ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGU5N2JlYTAuLjA3N2IxNDczIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTMzNDQsOCArMzM0NCw3IEBACiBOOiBMaW51cyBUb3J2YWxkcwogRTogdG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmcKIEQ6IE9yaWdpbmFsIGtlcm5lbCBoYWNrZXIKLVM6IDEyNzI1IFNXIE1pbGxpa2FuIFdheSwgU3VpdGUgNDAwCi1TOiBCZWF2ZXJ0b24sIE9yZWdvbiA5NzAwNQorUzogUG9ydGxhbmQsIE9yZWdvbiA5NzAwNQogUzogVVNBCiAKIE46IE1hcmNlbG8gVG9zYXR0aQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXYgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWYyYjhiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXYKQEAgLTAsMCArMSwyMCBAQAorV2hhdDoJCS9zeXMvZGV2CitEYXRlOgkJQXByaWwgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI2CitDb250YWN0OglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOglUaGUgL3N5cy9kZXYgdHJlZSBwcm92aWRlcyBhIG1ldGhvZCB0byBsb29rIHVwIHRoZSBzeXNmcworCQlwYXRoIGZvciBhIGRldmljZSB1c2luZyB0aGUgaW5mb3JtYXRpb24gcmV0dXJuZWQgZnJvbQorCQlzdGF0KDIpLiAgVGhlcmUgYXJlIHR3byBkaXJlY3RvcmllcywgJ2Jsb2NrJyBhbmQgJ2NoYXInLAorCQliZW5lYXRoIC9zeXMvZGV2IGNvbnRhaW5pbmcgc3ltYm9saWMgbGlua3Mgd2l0aCBuYW1lcyBvZgorCQl0aGUgZm9ybSAiPG1ham9yPjo8bWlub3I+Ii4gIFRoZXNlIGxpbmtzIHBvaW50IHRvIHRoZQorCQljb3JyZXNwb25kaW5nIHN5c2ZzIHBhdGggZm9yIHRoZSBnaXZlbiBkZXZpY2UuCisKKwkJRXhhbXBsZToKKwkJJCByZWFkbGluayAvc3lzL2Rldi9ibG9jay84OjMyCisJCS4uLy4uL2Jsb2NrL3NkYworCisJCUVudHJpZXMgaW4gL3N5cy9kZXYvY2hhciBhbmQgL3N5cy9kZXYvYmxvY2sgd2lsbCBiZQorCQlkeW5hbWljYWxseSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgYXMgZGV2aWNlcyBlbnRlciBhbmQKKwkJbGVhdmUgdGhlIHN5c3RlbS4KKworVXNlcnM6CQltZGFkbSA8bGludXgtcmFpZEB2Z2VyLmtlcm5lbC5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RNQS1hdHRyaWJ1dGVzLnR4dCBiL0RvY3VtZW50YXRpb24vRE1BLWF0dHJpYnV0ZXMudHh0CmluZGV4IDZkNzcyZjguLmI3NjhjYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRE1BLWF0dHJpYnV0ZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vRE1BLWF0dHJpYnV0ZXMudHh0CkBAIC0yMiwzICsyMiwxMiBAQAogY291bGQgcmFjZSB3aXRoIGRhdGEgRE1BLiAgTWFwcGluZyB0aGUgbWVtb3J5IHVzZWQgZm9yIGNvbXBsZXRpb24KIGluZGljYXRpb25zIHdpdGggRE1BX0FUVFJfV1JJVEVfQkFSUklFUiB3b3VsZCBwcmV2ZW50IHRoZSByYWNlLgogCitETUFfQVRUUl9XRUFLX09SREVSSU5HCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RNQV9BVFRSX1dFQUtfT1JERVJJTkcgc3BlY2lmaWVzIHRoYXQgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgbWFwcGluZworbWF5IGJlIHdlYWtseSBvcmRlcmVkLCB0aGF0IGlzIHRoYXQgcmVhZHMgYW5kIHdyaXRlcyBtYXkgcGFzcyBlYWNoIG90aGVyLgorCitTaW5jZSBpdCBpcyBvcHRpb25hbCBmb3IgcGxhdGZvcm1zIHRvIGltcGxlbWVudCBETUFfQVRUUl9XRUFLX09SREVSSU5HLAordGhvc2UgdGhhdCBkbyBub3Qgd2lsbCBzaW1wbHkgaWdub3JlIHRoZSBhdHRyaWJ1dGUgYW5kIGV4aGliaXQgZGVmYXVsdAorYmVoYXZpb3IuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2FkZ2V0LnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2FkZ2V0LnRtcGwKaW5kZXggNWE4ZmZhNy4uZWEzYmM5NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbApAQCAtNTI0LDYgKzUyNCw0NCBAQAogPCEtLSAhRWRyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMgLS0+CiA8L3NlY3QxPgogCis8c2VjdDEgaWQ9ImNvbXBvc2l0ZSI+PHRpdGxlPkNvbXBvc2l0ZSBEZXZpY2UgRnJhbWV3b3JrPC90aXRsZT4KKworPHBhcmE+VGhlIGNvcmUgQVBJIGlzIHN1ZmZpY2llbnQgZm9yIHdyaXRpbmcgZHJpdmVycyBmb3IgY29tcG9zaXRlCitVU0IgZGV2aWNlcyAod2l0aCBtb3JlIHRoYW4gb25lIGZ1bmN0aW9uIGluIGEgZ2l2ZW4gY29uZmlndXJhdGlvbiksCithbmQgYWxzbyBtdWx0aS1jb25maWd1cmF0aW9uIGRldmljZXMgKGFsc28gbW9yZSB0aGFuIG9uZSBmdW5jdGlvbiwKK2J1dCBub3QgbmVjZXNzYXJpbHkgc2hhcmluZyBhIGdpdmVuIGNvbmZpZ3VyYXRpb24pLgorVGhlcmUgaXMgaG93ZXZlciBhbiBvcHRpb25hbCBmcmFtZXdvcmsgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvCityZXVzZSBhbmQgY29tYmluZSBmdW5jdGlvbnMuCis8L3BhcmE+CisKKzxwYXJhPkRldmljZXMgdXNpbmcgdGhpcyBmcmFtZXdvcmsgcHJvdmlkZSBhIDxlbXBoYXNpcz5zdHJ1Y3QKK3VzYl9jb21wb3NpdGVfZHJpdmVyPC9lbXBoYXNpcz4sIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgb25lIG9yCittb3JlIDxlbXBoYXNpcz5zdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb248L2VtcGhhc2lzPiBpbnN0YW5jZXMuCitFYWNoIHN1Y2ggY29uZmlndXJhdGlvbiBpbmNsdWRlcyBhdCBsZWFzdCBvbmUKKzxlbXBoYXNpcz5zdHJ1Y3QgdXNiX2Z1bmN0aW9uPC9lbXBoYXNpcz4sIHdoaWNoIHBhY2thZ2VzIGEgdXNlcgordmlzaWJsZSByb2xlIHN1Y2ggYXMgIm5ldHdvcmsgbGluayIgb3IgIm1hc3Mgc3RvcmFnZSBkZXZpY2UiLgorTWFuYWdlbWVudCBmdW5jdGlvbnMgbWF5IGFsc28gZXhpc3QsIHN1Y2ggYXMgIkRldmljZSBGaXJtd2FyZQorVXBncmFkZSIuCis8L3BhcmE+CisKKyFJaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKKyFFZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCisKKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iZnVuY3Rpb25zIj48dGl0bGU+Q29tcG9zaXRlIERldmljZSBGdW5jdGlvbnM8L3RpdGxlPgorCis8cGFyYT5BdCB0aGlzIHdyaXRpbmcsIGEgZmV3IG9mIHRoZSBjdXJyZW50IGdhZGdldCBkcml2ZXJzIGhhdmUKK2JlZW4gY29udmVydGVkIHRvIHRoaXMgZnJhbWV3b3JrLgorTmVhci10ZXJtIHBsYW5zIGluY2x1ZGUgY29udmVydGluZyBhbGwgb2YgdGhlbSwgZXhjZXB0IGZvciAiZ2FkZ2V0ZnMiLgorPC9wYXJhPgorCishRWRyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCishRWRyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCisKKzwvc2VjdDE+CisKKwogPC9jaGFwdGVyPgogCiA8Y2hhcHRlciBpZD0iY29udHJvbGxlcnMiPjx0aXRsZT5QZXJpcGhlcmFsIENvbnRyb2xsZXIgRHJpdmVyczwvdGl0bGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKaW5kZXggZmRkN2Y0Zi4uZGY4N2QxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbApAQCAtMjEsNiArMjEsMTggQEAKICAgICA8L2FmZmlsaWF0aW9uPgogPC9hdXRob3I+CiAKKzxjb3B5cmlnaHQ+CisJPHllYXI+MjAwNi0yMDA4PC95ZWFyPgorCTxob2xkZXI+SGFucy1Kw7xyZ2VuIEtvY2guPC9ob2xkZXI+Cis8L2NvcHlyaWdodD4KKworPGxlZ2Fsbm90aWNlPgorPHBhcmE+CitUaGlzIGRvY3VtZW50YXRpb24gaXMgRnJlZSBTb2Z0d2FyZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitHUEwgdmVyc2lvbiAyLgorPC9wYXJhPgorPC9sZWdhbG5vdGljZT4KKwogPHB1YmRhdGU+MjAwNi0xMi0xMTwvcHViZGF0ZT4KIAogPGFic3RyYWN0PgpAQCAtMzAsNiArNDIsMTIgQEAKIAogPHJldmhpc3Rvcnk+CiAJPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC41PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwOC0wNS0yMjwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+aGprPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIGRlc2NyaXB0aW9uIG9mIHdyaXRlKCkgZnVuY3Rpb24uPC9yZXZyZW1hcms+CisJPC9yZXZpc2lvbj4KKwk8cmV2aXNpb24+CiAJPHJldm51bWJlcj4wLjQ8L3Jldm51bWJlcj4KIAk8ZGF0ZT4yMDA3LTExLTI2PC9kYXRlPgogCTxhdXRob3Jpbml0aWFscz5oams8L2F1dGhvcmluaXRpYWxzPgpAQCAtNTcsMjAgKzc1LDkgQEAKIDwvYm9va2luZm8+CiAKIDxjaGFwdGVyIGlkPSJhYm91dHRoaXNkb2MiPgotPD9kYmh0bWwgZmlsZW5hbWU9ImFib3V0Lmh0bWwiPz4KKzw/ZGJodG1sIGZpbGVuYW1lPSJhYm91dHRoaXMuaHRtbCI/PgogPHRpdGxlPkFib3V0IHRoaXMgZG9jdW1lbnQ8L3RpdGxlPgogCi08c2VjdDEgaWQ9ImNvcHlyaWdodCI+Ci08P2RiaHRtbCBmaWxlbmFtZT0iY29weXJpZ2h0Lmh0bWwiPz4KLTx0aXRsZT5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L3RpdGxlPgotPHBhcmE+Ci0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDYgYnkgSGFucy1Kw7xyZ2VuIEtvY2guPC9wYXJhPgotPHBhcmE+Ci1UaGlzIGRvY3VtZW50YXRpb24gaXMgRnJlZSBTb2Z0d2FyZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi1HUEwgdmVyc2lvbiAyLgotPC9wYXJhPgotPC9zZWN0MT4KLQogPHNlY3QxIGlkPSJ0cmFuc2xhdGlvbnMiPgogPD9kYmh0bWwgZmlsZW5hbWU9InRyYW5zbGF0aW9ucy5odG1sIj8+CiA8dGl0bGU+VHJhbnNsYXRpb25zPC90aXRsZT4KQEAgLTE4OSw2ICsxOTYsMzAgQEAKIAlyZXByZXNlbnRzIHRoZSB0b3RhbCBpbnRlcnJ1cHQgY291bnQuIFlvdSBjYW4gdXNlIHRoaXMgbnVtYmVyCiAJdG8gZmlndXJlIG91dCBpZiB5b3UgbWlzc2VkIHNvbWUgaW50ZXJydXB0cy4KIAk8L3BhcmE+CisJPHBhcmE+CisJRm9yIHNvbWUgaGFyZHdhcmUgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQgc291cmNlIGludGVybmFsbHksCisJYnV0IG5vdCBzZXBhcmF0ZSBJUlEgbWFzayBhbmQgc3RhdHVzIHJlZ2lzdGVycywgdGhlcmUgbWlnaHQgYmUKKwlzaXR1YXRpb25zIHdoZXJlIHVzZXJzcGFjZSBjYW5ub3QgZGV0ZXJtaW5lIHdoYXQgdGhlIGludGVycnVwdCBzb3VyY2UKKwl3YXMgaWYgdGhlIGtlcm5lbCBoYW5kbGVyIGRpc2FibGVzIHRoZW0gYnkgd3JpdGluZyB0byB0aGUgY2hpcCdzIElSUQorCXJlZ2lzdGVyLiBJbiBzdWNoIGEgY2FzZSwgdGhlIGtlcm5lbCBoYXMgdG8gZGlzYWJsZSB0aGUgSVJRIGNvbXBsZXRlbHkKKwl0byBsZWF2ZSB0aGUgY2hpcCdzIHJlZ2lzdGVyIHVudG91Y2hlZC4gTm93IHRoZSB1c2Vyc3BhY2UgcGFydCBjYW4KKwlkZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQsIGJ1dCBpdCBjYW5ub3QgcmUtZW5hYmxlCisJaW50ZXJydXB0cy4gQW5vdGhlciBjb3JuZXJjYXNlIGlzIGNoaXBzIHdoZXJlIHJlLWVuYWJsaW5nIGludGVycnVwdHMKKwlpcyBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbiB0byBhIGNvbWJpbmVkIElSUSBzdGF0dXMvYWNrbm93bGVkZ2UKKwlyZWdpc3Rlci4gVGhpcyB3b3VsZCBiZSByYWN5IGlmIGEgbmV3IGludGVycnVwdCBvY2N1cnJlZAorCXNpbXVsdGFuZW91c2x5LgorCTwvcGFyYT4KKwk8cGFyYT4KKwlUbyBhZGRyZXNzIHRoZXNlIHByb2JsZW1zLCBVSU8gYWxzbyBpbXBsZW1lbnRzIGEgd3JpdGUoKSBmdW5jdGlvbi4gSXQKKwlpcyBub3JtYWxseSBub3QgdXNlZCBhbmQgY2FuIGJlIGlnbm9yZWQgZm9yIGhhcmR3YXJlIHRoYXQgaGFzIG9ubHkgYQorCXNpbmdsZSBpbnRlcnJ1cHQgc291cmNlIG9yIGhhcyBzZXBhcmF0ZSBJUlEgbWFzayBhbmQgc3RhdHVzIHJlZ2lzdGVycy4KKwlJZiB5b3UgbmVlZCBpdCwgaG93ZXZlciwgYSB3cml0ZSB0byA8ZmlsZW5hbWU+L2Rldi91aW9YPC9maWxlbmFtZT4KKwl3aWxsIGNhbGwgdGhlIDxmdW5jdGlvbj5pcnFjb250cm9sKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpbXBsZW1lbnRlZAorCWJ5IHRoZSBkcml2ZXIuIFlvdSBoYXZlIHRvIHdyaXRlIGEgMzItYml0IHZhbHVlIHRoYXQgaXMgdXN1YWxseSBlaXRoZXIKKwkwIG9yIDEgdG8gZGlzYWJsZSBvciBlbmFibGUgaW50ZXJydXB0cy4gSWYgYSBkcml2ZXIgZG9lcyBub3QgaW1wbGVtZW50CisJPGZ1bmN0aW9uPmlycWNvbnRyb2woKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+d3JpdGUoKTwvZnVuY3Rpb24+IHdpbGwKKwlyZXR1cm4gd2l0aCA8dmFybmFtZT4tRU5PU1lTPC92YXJuYW1lPi4KKwk8L3BhcmE+CiAKIAk8cGFyYT4KIAlUbyBoYW5kbGUgaW50ZXJydXB0cyBwcm9wZXJseSwgeW91ciBjdXN0b20ga2VybmVsIG1vZHVsZSBjYW4KQEAgLTM2Miw2ICszOTMsMTQgQEAKIDxmdW5jdGlvbj5vcGVuKCk8L2Z1bmN0aW9uPiwgeW91IHdpbGwgcHJvYmFibHkgYWxzbyB3YW50IGEgY3VzdG9tCiA8ZnVuY3Rpb24+cmVsZWFzZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uCiA8L3BhcmE+PC9saXN0aXRlbT4KKworPGxpc3RpdGVtPjxwYXJhPgorPHZhcm5hbWU+aW50ICgqaXJxY29udHJvbCkoc3RydWN0IHVpb19pbmZvICppbmZvLCBzMzIgaXJxX29uKQorPC92YXJuYW1lPjogT3B0aW9uYWwuIElmIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gZW5hYmxlIG9yIGRpc2FibGUKK2ludGVycnVwdHMgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyB0byA8ZmlsZW5hbWU+L2Rldi91aW9YPC9maWxlbmFtZT4sCit5b3UgY2FuIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLiBUaGUgcGFyYW1ldGVyIDx2YXJuYW1lPmlycV9vbjwvdmFybmFtZT4KK3dpbGwgYmUgMCB0byBkaXNhYmxlIGludGVycnVwdHMgYW5kIDEgdG8gZW5hYmxlIHRoZW0uCis8L3BhcmE+PC9saXN0aXRlbT4KIDwvaXRlbWl6ZWRsaXN0PgogCiA8cGFyYT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSE9XVE8gYi9Eb2N1bWVudGF0aW9uL0hPV1RPCmluZGV4IDYxOWU4Y2EuLmMyMzcxYzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vSE9XVE8KKysrIGIvRG9jdW1lbnRhdGlvbi9IT1dUTwpAQCAtMzU4LDcgKzM1OCw3IEBACiAgICAgLSBwY21jaWEsIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLm5ldD4KIAlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2Jyb2RvL3BjbWNpYS0yLjYuZ2l0CiAKLSAgICAtIFNDU0ksIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QFN0ZWVsRXllLmNvbT4KKyAgICAtIFNDU0ksIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbT4KIAlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2plamIvc2NzaS1taXNjLTIuNi5naXQKIAogICAgIC0geDg2LCBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCA2NWExNDgyLi45ZjczNTg3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0zMDgsOSArMzA4LDQxIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglTQ1RQX0dFVF9QRUVSX0FERFJTX05VTV9PTEQsIFNDVFBfR0VUX1BFRVJfQUREUlNfT0xELAorCVNDVFBfR0VUX0xPQ0FMX0FERFJTX05VTV9PTEQsIFNDVFBfR0VUX0xPQ0FMX0FERFJTX09MRAorV2hlbjogCUp1bmUgMjAwOQorV2h5OiAgICBBIG5ld2VyIHZlcnNpb24gb2YgdGhlIG9wdGlvbnMgaGF2ZSBiZWVuIGludHJvZHVjZWQgaW4gMjAwNSB0aGF0CisJcmVtb3ZlcyB0aGUgbGltaXRpb25zIG9mIHRoZSBvbGQgQVBJLiAgVGhlIHNjdHAgbGlicmFyeSBoYXMgYmVlbgorICAgICAgICBjb252ZXJ0ZWQgdG8gdXNlIHRoZXNlIG5ldyBvcHRpb25zIGF0IHRoZSBzYW1lIHRpbWUuICBBbnkgdXNlcgorCXNwYWNlIGFwcCB0aGF0IGRpcmVjdGx5IHVzZXMgdGhlIG9sZCBvcHRpb25zIHNob3VsZCBjb252ZXJ0IHRvIHVzaW5nCisJdGhlIG5ldyBvcHRpb25zLgorV2hvOglWbGFkIFlhc2V2aWNoIDx2bGFkaXNsYXYueWFzZXZpY2hAaHAuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJQ09ORklHX1RIRVJNQUxfSFdNT04KIFdoZW46CUphbnVhcnkgMjAwOQogV2h5OglUaGlzIG9wdGlvbiB3YXMgaW50cm9kdWNlZCBqdXN0IHRvIGFsbG93IG9sZGVyIGxtLXNlbnNvcnMgdXNlcnNwYWNlCiAJdG8ga2VlcCB3b3JraW5nIG92ZXIgdGhlIHVwZ3JhZGUgdG8gMi42LjI2LiBBdCB0aGUgc2NoZWR1bGVkIHRpbWUgb2YKIAlyZW1vdmFsIGZpeGVkIGxtLXNlbnNvcnMgKDIueCBvciAzLngpIHNob3VsZCBiZSByZWFkaWx5IGF2YWlsYWJsZS4KIFdobzoJUmVuZSBIZXJtYW4gPHJlbmUuaGVybWFuQGdtYWlsLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CUNvZGUgdGhhdCBpcyBub3cgdW5kZXIgQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUworCShpbiBuZXQvY29yZS9uZXQtc3lzZnMuYykKK1doZW46CUFmdGVyIHRoZSBvbmx5IHVzZXIgKGhhbCkgaGFzIHNlZW4gYSByZWxlYXNlIHdpdGggdGhlIHBhdGNoZXMKKwlmb3IgZW5vdWdoIHRpbWUsIHByb2JhYmx5IHNvbWUgdGltZSBpbiAyMDEwLgorV2h5OglPdmVyIDFLIC50ZXh0Ly5kYXRhIHNpemUgcmVkdWN0aW9uLCBkYXRhIGlzIGF2YWlsYWJsZSBpbiBvdGhlcgorCXdheXMgKGlvY3RscykKK1dobzoJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6IENPTkZJR19ORl9DVF9BQ0NUCitXaGVuOiAyLjYuMjkKK1doeTogIEFjY291bnRpbmcgY2FuIG5vdyBiZSBlbmFibGVkL2Rpc2FibGVkIHdpdGhvdXQga2VybmVsIHJlY29tcGlsYXRpb24uCisgICAgICBDdXJyZW50bHkgdXNlZCBvbmx5IHRvIHNldCBhIGRlZmF1bHQgdmFsdWUgZm9yIGEgZmVhdHVyZSB0aGF0IGlzIGFsc28KKyAgICAgIGNvbnRyb2xsZWQgYnkgYSBrZXJuZWwvbW9kdWxlL3N5c2ZzL3N5c2N0bCBwYXJhbWV0ZXIuCitXaG86ICBLcnp5c3p0b2YgUGlvdHIgT2xlZHpraSA8b2xlQGFucy5wbD4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMudHh0CmluZGV4IGVhODI1ZTEuLjc4MDQzZDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy50eHQKQEAgLTI2LDExICsyNiwxMSBAQAogCiB0aGlzIHdpbGwgYWxsb2NhdGUgdGhlIGZpcnN0IGF2YWlsYWJsZSBsb29wYmFjayBkZXZpY2UgKGFuZCBsb2FkIGxvb3AubyAKIGtlcm5lbCBtb2R1bGUgaWYgbmVjZXNzYXJ5KSBhdXRvbWF0aWNhbGx5LiBJZiB0aGUgbG9vcGJhY2sgZHJpdmVyIGlzIG5vdAotbG9hZGVkIGF1dG9tYXRpY2FsbHksIG1ha2Ugc3VyZSB0aGF0IHlvdXIga2VybmVsIGlzIGNvbXBpbGVkIHdpdGgga21vZCAKLXN1cHBvcnQgKENPTkZJR19LTU9EKSBlbmFibGVkLiBCZXdhcmUgdGhhdCB1bW91bnQgd2lsbCBub3QKLWRlYWxsb2NhdGUgL2Rldi9sb29wTiBkZXZpY2UgaWYgL2V0Yy9tdGFiIGZpbGUgb24geW91ciBzeXN0ZW0gaXMgYQotc3ltYm9saWMgbGluayB0byAvcHJvYy9tb3VudHMuIFlvdSB3aWxsIG5lZWQgdG8gZG8gaXQgbWFudWFsbHkgdXNpbmcKLSItZCIgc3dpdGNoIG9mIGxvc2V0dXAoOCkuIFJlYWQgbG9zZXR1cCg4KSBtYW5wYWdlIGZvciBtb3JlIGluZm8uCitsb2FkZWQgYXV0b21hdGljYWxseSwgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgY29tcGlsZWQgdGhlIG1vZHVsZSBhbmQKK3RoYXQgbW9kcHJvYmUgaXMgZnVuY3Rpb25pbmcuIEJld2FyZSB0aGF0IHVtb3VudCB3aWxsIG5vdCBkZWFsbG9jYXRlCisvZGV2L2xvb3BOIGRldmljZSBpZiAvZXRjL210YWIgZmlsZSBvbiB5b3VyIHN5c3RlbSBpcyBhIHN5bWJvbGljIGxpbmsgdG8KKy9wcm9jL21vdW50cy4gWW91IHdpbGwgbmVlZCB0byBkbyBpdCBtYW51YWxseSB1c2luZyAiLWQiIHN3aXRjaCBvZgorbG9zZXR1cCg4KS4gUmVhZCBsb3NldHVwKDgpIG1hbnBhZ2UgZm9yIG1vcmUgaW5mby4KIAogVG8gY3JlYXRlIHRoZSBCRlMgaW1hZ2UgdW5kZXIgVW5peFdhcmUgeW91IG5lZWQgdG8gZmluZCBvdXQgZmlyc3Qgd2hpY2gKIHNsaWNlIGNvbnRhaW5zIGl0LiBUaGUgY29tbWFuZCBwcnR2dG9jKDFNKSBpcyB5b3VyIGZyaWVuZDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29uZmlnZnMvY29uZmlnZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb25maWdmcy9jb25maWdmcy50eHQKaW5kZXggMTU4MzhkNy4uNDRjOTdlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb25maWdmcy9jb25maWdmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb25maWdmcy9jb25maWdmcy50eHQKQEAgLTIzMywxMiArMjMzLDEwIEBACiBjb25maWdfaXRlbV90eXBlLgogCiAJc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgewotCQlpbnQgKCptYWtlX2l0ZW0pKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAotCQkJCSBjb25zdCBjaGFyICpuYW1lLAotCQkJCSBzdHJ1Y3QgY29uZmlnX2l0ZW0gKipuZXdfaXRlbSk7Ci0JCWludCAoKm1ha2VfZ3JvdXApKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAotCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgIHN0cnVjdCBjb25maWdfZ3JvdXAgKipuZXdfZ3JvdXApOworCQlzdHJ1Y3QgY29uZmlnX2l0ZW0gKigqbWFrZV9pdGVtKShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKKwkJCQkJCSBjb25zdCBjaGFyICpuYW1lKTsKKwkJc3RydWN0IGNvbmZpZ19ncm91cCAqKCptYWtlX2dyb3VwKShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpOwogCQlpbnQgKCpjb21taXRfaXRlbSkoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTsKIAkJdm9pZCAoKmRpc2Nvbm5lY3Rfbm90aWZ5KShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAkJCQkJICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb25maWdmcy9jb25maWdmc19leGFtcGxlLmMgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2V4YW1wbGUuYwppbmRleCAwYjQyMmFjLi4wMzk2NDg3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb25maWdmcy9jb25maWdmc19leGFtcGxlLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb25maWdmcy9jb25maWdmc19leGFtcGxlLmMKQEAgLTI3MywxMyArMjczLDEzIEBACiAJcmV0dXJuIGl0ZW0gPyBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLCBzdHJ1Y3Qgc2ltcGxlX2NoaWxkcmVuLCBncm91cCkgOiBOVUxMOwogfQogCi1zdGF0aWMgaW50IHNpbXBsZV9jaGlsZHJlbl9tYWtlX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKm5ld19pdGVtKQorc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqc2ltcGxlX2NoaWxkcmVuX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3Qgc2ltcGxlX2NoaWxkICpzaW1wbGVfY2hpbGQ7CiAKIAlzaW1wbGVfY2hpbGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2ltcGxlX2NoaWxkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzaW1wbGVfY2hpbGQpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCiAJY29uZmlnX2l0ZW1faW5pdF90eXBlX25hbWUoJnNpbXBsZV9jaGlsZC0+aXRlbSwgbmFtZSwKQEAgLTI4Nyw4ICsyODcsNyBAQAogCiAJc2ltcGxlX2NoaWxkLT5zdG9yZW1lID0gMDsKIAotCSpuZXdfaXRlbSA9ICZzaW1wbGVfY2hpbGQtPml0ZW07Ci0JcmV0dXJuIDA7CisJcmV0dXJuICZzaW1wbGVfY2hpbGQtPml0ZW07CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlIHNpbXBsZV9jaGlsZHJlbl9hdHRyX2Rlc2NyaXB0aW9uID0gewpAQCAtMzYwLDIxICszNTksMjAgQEAKICAqIGNoaWxkcmVuIG9mIGl0cyBvd24uCiAgKi8KIAotc3RhdGljIGludCBncm91cF9jaGlsZHJlbl9tYWtlX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgY29uZmlnX2dyb3VwICoqbmV3X2dyb3VwKQorc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwX2NoaWxkcmVuX21ha2VfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHNpbXBsZV9jaGlsZHJlbiAqc2ltcGxlX2NoaWxkcmVuOwogCiAJc2ltcGxlX2NoaWxkcmVuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNpbXBsZV9jaGlsZHJlbiksCiAJCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAoIXNpbXBsZV9jaGlsZHJlbikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAKIAljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoJnNpbXBsZV9jaGlsZHJlbi0+Z3JvdXAsIG5hbWUsCiAJCQkJICAgICZzaW1wbGVfY2hpbGRyZW5fdHlwZSk7CiAKLQkqbmV3X2dyb3VwID0gJnNpbXBsZV9jaGlsZHJlbi0+Z3JvdXA7Ci0JcmV0dXJuIDA7CisJcmV0dXJuICZzaW1wbGVfY2hpbGRyZW4tPmdyb3VwOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSBncm91cF9jaGlsZHJlbl9hdHRyX2Rlc2NyaXB0aW9uID0gewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMtcmRtYS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy1yZG1hLnR4dAppbmRleCBkMGVjNDVhLi40NGJkNzY2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy1yZG1hLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy1yZG1hLnR4dApAQCAtNSw3ICs1LDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICBBdXRob3I6IE5ldEFwcCBhbmQgT3BlbiBHcmlkIENvbXB1dGluZwotIERhdGU6IEFwcmlsIDE1LCAyMDA4CisgRGF0ZTogTWF5IDI5LCAyMDA4CiAKIFRhYmxlIG9mIENvbnRlbnRzCiB+fn5+fn5+fn5+fn5+fn5+fgpAQCAtNjAsMTYgKzYwLDE4IEBACiAgICAgVGhlIHByb2NlZHVyZXMgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQgaGF2ZSBiZWVuIHRlc3RlZCB3aXRoCiAgICAgZGlzdHJpYnV0aW9ucyBmcm9tIFJlZCBIYXQncyBGZWRvcmEgUHJvamVjdCAoaHR0cDovL2ZlZG9yYS5yZWRoYXQuY29tLykuCiAKLSAgLSBJbnN0YWxsIG5mcy11dGlscy0xLjEuMSBvciBncmVhdGVyIG9uIHRoZSBjbGllbnQKKyAgLSBJbnN0YWxsIG5mcy11dGlscy0xLjEuMiBvciBncmVhdGVyIG9uIHRoZSBjbGllbnQKIAotICAgIEFuIE5GUy9SRE1BIG1vdW50IHBvaW50IGNhbiBvbmx5IGJlIG9idGFpbmVkIGJ5IHVzaW5nIHRoZSBtb3VudC5uZnMKLSAgICBjb21tYW5kIGluIG5mcy11dGlscy0xLjEuMSBvciBncmVhdGVyLiBUbyBzZWUgd2hpY2ggdmVyc2lvbiBvZiBtb3VudC5uZnMKLSAgICB5b3UgYXJlIHVzaW5nLCB0eXBlOgorICAgIEFuIE5GUy9SRE1BIG1vdW50IHBvaW50IGNhbiBiZSBvYnRhaW5lZCBieSB1c2luZyB0aGUgbW91bnQubmZzIGNvbW1hbmQgaW4KKyAgICBuZnMtdXRpbHMtMS4xLjIgb3IgZ3JlYXRlciAobmZzLXV0aWxzLTEuMS4xIHdhcyB0aGUgZmlyc3QgbmZzLXV0aWxzCisgICAgdmVyc2lvbiB3aXRoIHN1cHBvcnQgZm9yIE5GUy9SRE1BIG1vdW50cywgYnV0IGZvciB2YXJpb3VzIHJlYXNvbnMgd2UKKyAgICByZWNvbW1lbmQgdXNpbmcgbmZzLXV0aWxzLTEuMS4yIG9yIGdyZWF0ZXIpLiBUbyBzZWUgd2hpY2ggdmVyc2lvbiBvZgorICAgIG1vdW50Lm5mcyB5b3UgYXJlIHVzaW5nLCB0eXBlOgogCi0gICAgPiAvc2Jpbi9tb3VudC5uZnMgLVYKKyAgICAkIC9zYmluL21vdW50Lm5mcyAtVgogCi0gICAgSWYgdGhlIHZlcnNpb24gaXMgbGVzcyB0aGFuIDEuMS4xIG9yIHRoZSBjb21tYW5kIGRvZXMgbm90IGV4aXN0LAotICAgIHRoZW4geW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBuZnMtdXRpbHMuCisgICAgSWYgdGhlIHZlcnNpb24gaXMgbGVzcyB0aGFuIDEuMS4yIG9yIHRoZSBjb21tYW5kIGRvZXMgbm90IGV4aXN0LAorICAgIHlvdSBzaG91bGQgaW5zdGFsbCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgbmZzLXV0aWxzLgogCiAgICAgRG93bmxvYWQgdGhlIGxhdGVzdCBwYWNrYWdlIGZyb206CiAKQEAgLTc3LDIyICs3OSwzMyBAQAogCiAgICAgVW5jb21wcmVzcyB0aGUgcGFja2FnZSBhbmQgZm9sbG93IHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgogCi0gICAgSWYgeW91IHdpbGwgbm90IGJlIHVzaW5nIEdTUyBhbmQgTkZTdjQsIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcwotICAgIGNhbiBiZSBzaW1wbGlmaWVkIGJ5IGRpc2FibGluZyB0aGVzZSBmZWF0dXJlcyB3aGVuIHJ1bm5pbmcgY29uZmlndXJlOgorICAgIElmIHlvdSB3aWxsIG5vdCBuZWVkIHRoZSBpZG1hcHBlciBhbmQgZ3NzZCBleGVjdXRhYmxlcyAoeW91IGRvIG5vdCBuZWVkCisgICAgdGhlc2UgdG8gY3JlYXRlIGFuIE5GUy9SRE1BIGVuYWJsZWQgbW91bnQgY29tbWFuZCksIHRoZSBpbnN0YWxsYXRpb24KKyAgICBwcm9jZXNzIGNhbiBiZSBzaW1wbGlmaWVkIGJ5IGRpc2FibGluZyB0aGVzZSBmZWF0dXJlcyB3aGVuIHJ1bm5pbmcKKyAgICBjb25maWd1cmU6CiAKLSAgICA+IC4vY29uZmlndXJlIC0tZGlzYWJsZS1nc3MgLS1kaXNhYmxlLW5mc3Y0CisgICAgJCAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtZ3NzIC0tZGlzYWJsZS1uZnN2NAogCi0gICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBzZWUgdGhlIHBhY2thZ2UncyBSRUFETUUgYW5kIElOU1RBTEwgZmlsZXMuCisgICAgVG8gYnVpbGQgbmZzLXV0aWxzIHlvdSB3aWxsIG5lZWQgdGhlIHRjcF93cmFwcGVycyBwYWNrYWdlIGluc3RhbGxlZC4gRm9yCisgICAgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHNlZSB0aGUgcGFja2FnZSdzIFJFQURNRSBhbmQgSU5TVEFMTCBmaWxlcy4KIAogICAgIEFmdGVyIGJ1aWxkaW5nIHRoZSBuZnMtdXRpbHMgcGFja2FnZSwgdGhlcmUgd2lsbCBiZSBhIG1vdW50Lm5mcyBiaW5hcnkgaW4KICAgICB0aGUgdXRpbHMvbW91bnQgZGlyZWN0b3J5LiBUaGlzIGJpbmFyeSBjYW4gYmUgdXNlZCB0byBpbml0aWF0ZSBORlMgdjIsIHYzLAotICAgIG9yIHY0IG1vdW50cy4gVG8gaW5pdGlhdGUgYSB2NCBtb3VudCwgdGhlIGJpbmFyeSBtdXN0IGJlIGNhbGxlZCBtb3VudC5uZnM0LgotICAgIFRoZSBzdGFuZGFyZCB0ZWNobmlxdWUgaXMgdG8gY3JlYXRlIGEgc3ltbGluayBjYWxsZWQgbW91bnQubmZzNCB0byBtb3VudC5uZnMuCisgICAgb3IgdjQgbW91bnRzLiBUbyBpbml0aWF0ZSBhIHY0IG1vdW50LCB0aGUgYmluYXJ5IG11c3QgYmUgY2FsbGVkCisgICAgbW91bnQubmZzNC4gIFRoZSBzdGFuZGFyZCB0ZWNobmlxdWUgaXMgdG8gY3JlYXRlIGEgc3ltbGluayBjYWxsZWQKKyAgICBtb3VudC5uZnM0IHRvIG1vdW50Lm5mcy4KIAotICAgIE5PVEU6IG1vdW50Lm5mcyBhbmQgdGhlcmVmb3JlIG5mcy11dGlscy0xLjEuMSBvciBncmVhdGVyIGlzIG9ubHkgbmVlZGVkCisgICAgVGhpcyBtb3VudC5uZnMgYmluYXJ5IHNob3VsZCBiZSBpbnN0YWxsZWQgYXQgL3NiaW4vbW91bnQubmZzIGFzIGZvbGxvd3M6CisKKyAgICAkIHN1ZG8gY3AgdXRpbHMvbW91bnQvbW91bnQubmZzIC9zYmluL21vdW50Lm5mcworCisgICAgSW4gdGhpcyBsb2NhdGlvbiwgbW91bnQubmZzIHdpbGwgYmUgaW52b2tlZCBhdXRvbWF0aWNhbGx5IGZvciBORlMgbW91bnRzCisgICAgYnkgdGhlIHN5c3RlbSBtb3VudCBjb21tbWFuZC4KKworICAgIE5PVEU6IG1vdW50Lm5mcyBhbmQgdGhlcmVmb3JlIG5mcy11dGlscy0xLjEuMiBvciBncmVhdGVyIGlzIG9ubHkgbmVlZGVkCiAgICAgb24gdGhlIE5GUyBjbGllbnQgbWFjaGluZS4gWW91IGRvIG5vdCBuZWVkIHRoaXMgc3BlY2lmaWMgdmVyc2lvbiBvZgogICAgIG5mcy11dGlscyBvbiB0aGUgc2VydmVyLiBGdXJ0aGVybW9yZSwgb25seSB0aGUgbW91bnQubmZzIGNvbW1hbmQgZnJvbQotICAgIG5mcy11dGlscy0xLjEuMSBpcyBuZWVkZWQgb24gdGhlIGNsaWVudC4KKyAgICBuZnMtdXRpbHMtMS4xLjIgaXMgbmVlZGVkIG9uIHRoZSBjbGllbnQuCiAKICAgLSBJbnN0YWxsIGEgTGludXgga2VybmVsIHdpdGggTkZTL1JETUEKIApAQCAtMTU2LDggKzE2OSw4IEBACiAgICAgdGhpcyB0aW1lLiBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBhIE1lbGxhbm94IFRhdm9yL1NpbmFpL0FyYmVsCiAgICAgY2FyZDoKIAotICAgID4gbW9kcHJvYmUgaWJfbXRoY2EKLSAgICA+IG1vZHByb2JlIGliX2lwb2liCisgICAgJCBtb2Rwcm9iZSBpYl9tdGhjYQorICAgICQgbW9kcHJvYmUgaWJfaXBvaWIKIAogICAgIElmIHlvdSBhcmUgdXNpbmcgSW5maW5pQmFuZCwgbWFrZSBzdXJlIHRoZXJlIGlzIGEgU3VibmV0IE1hbmFnZXIgKFNNKQogICAgIHJ1bm5pbmcgb24gdGhlIG5ldHdvcmsuIElmIHlvdXIgSUIgc3dpdGNoIGhhcyBhbiBlbWJlZGRlZCBTTSwgeW91IGNhbgpAQCAtMTY2LDcgKzE3OSw3IEBACiAKICAgICBJZiBhbiBTTSBpcyBydW5uaW5nIG9uIHlvdXIgbmV0d29yaywgeW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZzoKIAotICAgID4gY2F0IC9zeXMvY2xhc3MvaW5maW5pYmFuZC9kcml2ZXJYL3BvcnRzLzEvc3RhdGUKKyAgICAkIGNhdCAvc3lzL2NsYXNzL2luZmluaWJhbmQvZHJpdmVyWC9wb3J0cy8xL3N0YXRlCiAgICAgNDogQUNUSVZFCiAKICAgICB3aGVyZSBkcml2ZXJYIGlzIG10aGNhMCwgaXBhdGg1LCBlaGNhMywgZXRjLgpAQCAtMTc0LDEwICsxODcsMTAgQEAKICAgICBUbyBmdXJ0aGVyIHRlc3QgdGhlIEluZmluaUJhbmQgc29mdHdhcmUgc3RhY2ssIHVzZSBJUG9JQiAodGhpcwogICAgIGFzc3VtZXMgeW91IGhhdmUgdHdvIElCIGhvc3RzIG5hbWVkIGhvc3QxIGFuZCBob3N0Mik6CiAKLSAgICBob3N0MT4gaWZjb25maWcgaWIwIGEuYi5jLngKLSAgICBob3N0Mj4gaWZjb25maWcgaWIwIGEuYi5jLnkKLSAgICBob3N0MT4gcGluZyBhLmIuYy55Ci0gICAgaG9zdDI+IHBpbmcgYS5iLmMueAorICAgIGhvc3QxJCBpZmNvbmZpZyBpYjAgYS5iLmMueAorICAgIGhvc3QyJCBpZmNvbmZpZyBpYjAgYS5iLmMueQorICAgIGhvc3QxJCBwaW5nIGEuYi5jLnkKKyAgICBob3N0MiQgcGluZyBhLmIuYy54CiAKICAgICBGb3Igb3RoZXIgZGV2aWNlIHR5cGVzLCBmb2xsb3cgdGhlIGFwcHJvcHJpYXRlIHByb2NlZHVyZXMuCiAKQEAgLTIwMiwxMSArMjE1LDExIEBACiAgICAgL3ZvbDAgICAxOTIuMTY4LjAuNDcoZnNpZD0wLHJ3LGFzeW5jLGluc2VjdXJlLG5vX3Jvb3Rfc3F1YXNoKQogICAgIC92b2wwICAgMTkyLjE2OC4wLjAvMjU1LjI1NS4yNTUuMChmc2lkPTAscncsYXN5bmMsaW5zZWN1cmUsbm9fcm9vdF9zcXVhc2gpCiAKLSAgICBUaGUgSVAgYWRkcmVzcyhlcykgaXMoYXJlKSB0aGUgY2xpZW50J3MgSVBvSUIgYWRkcmVzcyBmb3IgYW4gSW5maW5pQmFuZCBIQ0Egb3IgdGhlCi0gICAgY2xlaW50J3MgaVdBUlAgYWRkcmVzcyhlcykgZm9yIGFuIFJOSUMuCisgICAgVGhlIElQIGFkZHJlc3MoZXMpIGlzKGFyZSkgdGhlIGNsaWVudCdzIElQb0lCIGFkZHJlc3MgZm9yIGFuIEluZmluaUJhbmQKKyAgICBIQ0Egb3IgdGhlIGNsZWludCdzIGlXQVJQIGFkZHJlc3MoZXMpIGZvciBhbiBSTklDLgogCi0gICAgTk9URTogVGhlICJpbnNlY3VyZSIgb3B0aW9uIG11c3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBORlMvUkRNQSBjbGllbnQgZG9lcyBub3QKLSAgICB1c2UgYSByZXNlcnZlZCBwb3J0LgorICAgIE5PVEU6IFRoZSAiaW5zZWN1cmUiIG9wdGlvbiBtdXN0IGJlIHVzZWQgYmVjYXVzZSB0aGUgTkZTL1JETUEgY2xpZW50IGRvZXMKKyAgICBub3QgdXNlIGEgcmVzZXJ2ZWQgcG9ydC4KIAogIEVhY2ggdGltZSBhIG1hY2hpbmUgYm9vdHM6CiAKQEAgLTIxNCw0MyArMjI3LDQ1IEBACiAKICAgICBGb3IgSW5maW5pQmFuZCB1c2luZyBhIE1lbGxhbm94IGFkYXB0ZXI6CiAKLSAgICA+IG1vZHByb2JlIGliX210aGNhCi0gICAgPiBtb2Rwcm9iZSBpYl9pcG9pYgotICAgID4gaWZjb25maWcgaWIwIGEuYi5jLmQKKyAgICAkIG1vZHByb2JlIGliX210aGNhCisgICAgJCBtb2Rwcm9iZSBpYl9pcG9pYgorICAgICQgaWZjb25maWcgaWIwIGEuYi5jLmQKIAogICAgIE5PVEU6IHVzZSB1bmlxdWUgYWRkcmVzc2VzIGZvciB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIKIAogICAtIFN0YXJ0IHRoZSBORlMgc2VydmVyCiAKLSAgICBJZiB0aGUgTkZTL1JETUEgc2VydmVyIHdhcyBidWlsdCBhcyBhIG1vZHVsZSAoQ09ORklHX1NVTlJQQ19YUFJUX1JETUE9bSBpbiBrZXJuZWwgY29uZmlnKSwKLSAgICBsb2FkIHRoZSBSRE1BIHRyYW5zcG9ydCBtb2R1bGU6CisgICAgSWYgdGhlIE5GUy9SRE1BIHNlcnZlciB3YXMgYnVpbHQgYXMgYSBtb2R1bGUgKENPTkZJR19TVU5SUENfWFBSVF9SRE1BPW0gaW4KKyAgICBrZXJuZWwgY29uZmlnKSwgbG9hZCB0aGUgUkRNQSB0cmFuc3BvcnQgbW9kdWxlOgogCi0gICAgPiBtb2Rwcm9iZSBzdmNyZG1hCisgICAgJCBtb2Rwcm9iZSBzdmNyZG1hCiAKLSAgICBSZWdhcmRsZXNzIG9mIGhvdyB0aGUgc2VydmVyIHdhcyBidWlsdCAobW9kdWxlIG9yIGJ1aWx0LWluKSwgc3RhcnQgdGhlIHNlcnZlcjoKKyAgICBSZWdhcmRsZXNzIG9mIGhvdyB0aGUgc2VydmVyIHdhcyBidWlsdCAobW9kdWxlIG9yIGJ1aWx0LWluKSwgc3RhcnQgdGhlCisgICAgc2VydmVyOgogCi0gICAgPiAvZXRjL2luaXQuZC9uZnMgc3RhcnQKKyAgICAkIC9ldGMvaW5pdC5kL25mcyBzdGFydAogCiAgICAgb3IKIAotICAgID4gc2VydmljZSBuZnMgc3RhcnQKKyAgICAkIHNlcnZpY2UgbmZzIHN0YXJ0CiAKICAgICBJbnN0cnVjdCB0aGUgc2VydmVyIHRvIGxpc3RlbiBvbiB0aGUgUkRNQSB0cmFuc3BvcnQ6CiAKLSAgICA+IGVjaG8gcmRtYSAyMDUwID4gL3Byb2MvZnMvbmZzZC9wb3J0bGlzdAorICAgICQgZWNobyByZG1hIDIwNTAgPiAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0CiAKICAgLSBPbiB0aGUgY2xpZW50IHN5c3RlbQogCi0gICAgSWYgdGhlIE5GUy9SRE1BIGNsaWVudCB3YXMgYnVpbHQgYXMgYSBtb2R1bGUgKENPTkZJR19TVU5SUENfWFBSVF9SRE1BPW0gaW4ga2VybmVsIGNvbmZpZyksCi0gICAgbG9hZCB0aGUgUkRNQSBjbGllbnQgbW9kdWxlOgorICAgIElmIHRoZSBORlMvUkRNQSBjbGllbnQgd2FzIGJ1aWx0IGFzIGEgbW9kdWxlIChDT05GSUdfU1VOUlBDX1hQUlRfUkRNQT1tIGluCisgICAga2VybmVsIGNvbmZpZyksIGxvYWQgdGhlIFJETUEgY2xpZW50IG1vZHVsZToKIAotICAgID4gbW9kcHJvYmUgeHBydHJkbWEua28KKyAgICAkIG1vZHByb2JlIHhwcnRyZG1hLmtvCiAKLSAgICBSZWdhcmRsZXNzIG9mIGhvdyB0aGUgY2xpZW50IHdhcyBidWlsdCAobW9kdWxlIG9yIGJ1aWx0LWluKSwgaXNzdWUgdGhlIG1vdW50Lm5mcyBjb21tYW5kOgorICAgIFJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBjbGllbnQgd2FzIGJ1aWx0IChtb2R1bGUgb3IgYnVpbHQtaW4pLCB1c2UgdGhpcworICAgIGNvbW1hbmQgdG8gbW91bnQgdGhlIE5GUy9SRE1BIHNlcnZlcjoKIAotICAgID4gL3BhdGgvdG8veW91ci9tb3VudC5uZnMgPElQb0lCLXNlcnZlci1uYW1lLW9yLWFkZHJlc3M+Oi88ZXhwb3J0PiAvbW50IC1pIC1vIHJkbWEscG9ydD0yMDUwCisgICAgJCBtb3VudCAtbyByZG1hLHBvcnQ9MjA1MCA8SVBvSUItc2VydmVyLW5hbWUtb3ItYWRkcmVzcz46LzxleHBvcnQ+IC9tbnQKIAotICAgIFRvIHZlcmlmeSB0aGF0IHRoZSBtb3VudCBpcyB1c2luZyBSRE1BLCBydW4gImNhdCAvcHJvYy9tb3VudHMiIGFuZCBjaGVjayB0aGUKLSAgICAicHJvdG8iIGZpZWxkIGZvciB0aGUgZ2l2ZW4gbW91bnQuCisgICAgVG8gdmVyaWZ5IHRoYXQgdGhlIG1vdW50IGlzIHVzaW5nIFJETUEsIHJ1biAiY2F0IC9wcm9jL21vdW50cyIgYW5kIGNoZWNrCisgICAgdGhlICJwcm90byIgZmllbGQgZm9yIHRoZSBnaXZlbiBtb3VudC4KIAogICBDb25ncmF0dWxhdGlvbnMhIFlvdSdyZSB1c2luZyBORlMvUkRNQSEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKaW5kZXggN2YyN2I4Zi4uOWU5YzM0OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKQEAgLTI0OCw2ICsyNDgsNyBAQAogYmxvY2svCiBidXMvCiBjbGFzcy8KK2Rldi8KIGRldmljZXMvCiBmaXJtd2FyZS8KIG5ldC8KQEAgLTI3NCw2ICsyNzUsMTEgQEAKIGZpbGVzeXN0ZW0gd2FudGluZyB0byBleHBvcnQgYXR0cmlidXRlcyBtdXN0IGNyZWF0ZSBpdHMgb3duIGhpZXJhcmNoeQogYmVsb3cgZnMvIChzZWUgLi9mdXNlLnR4dCBmb3IgYW4gZXhhbXBsZSkuCiAKK2Rldi8gY29udGFpbnMgdHdvIGRpcmVjdG9yaWVzIGNoYXIvIGFuZCBibG9jay8uIEluc2lkZSB0aGVzZSB0d28KK2RpcmVjdG9yaWVzIHRoZXJlIGFyZSBzeW1saW5rcyBuYW1lZCA8bWFqb3I+OjxtaW5vcj4uICBUaGVzZSBzeW1saW5rcworcG9pbnQgdG8gdGhlIHN5c2ZzIGRpcmVjdG9yeSBmb3IgdGhlIGdpdmVuIGRldmljZS4gIC9zeXMvZGV2IHByb3ZpZGVzIGEKK3F1aWNrIHdheSB0byBsb29rdXAgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgYSBkZXZpY2UgZnJvbSB0aGUgcmVzdWx0IG9mCithIHN0YXQoMikgb3BlcmF0aW9uLgogCiBNb3JlIGluZm9ybWF0aW9uIGNhbiBkcml2ZXItbW9kZWwgc3BlY2lmaWMgZmVhdHVyZXMgY2FuIGJlIGZvdW5kIGluCiBEb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC8uIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pYTY0L3BhcmF2aXJ0X29wcy50eHQgYi9Eb2N1bWVudGF0aW9uL2lhNjQvcGFyYXZpcnRfb3BzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWRlZDAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pYTY0L3BhcmF2aXJ0X29wcy50eHQKQEAgLTAsMCArMSwxMzcgQEAKK1BhcmF2aXJ0X29wcyBvbiBJQTY0Cis9PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICAgICAyMSBNYXkgMjAwOCwgSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhQHZhbGludXguY28uanA+CisKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KK1RoZSBhaW0gb2YgdGhpcyBkb2N1bWVudGF0aW9uIGlzIHRvIGhlbHAgd2l0aCBtYWludGFpbmFiaWxpdHkgYW5kL29yIHRvCitlbmNvdXJhZ2UgcGVvcGxlIHRvIHVzZSBwYXJhdmlydF9vcHMvSUE2NC4KKworcGFyYXZpcnRfb3BzIChwdl9vcHMgaW4gc2hvcnQpIGlzIGEgd2F5IGZvciB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IG9mCitMaW51eCBrZXJuZWwgb24geDg2LiBTZXZlcmFsIHdheXMgZm9yIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgd2VyZQorcHJvcG9zZWQsIHBhcmF2aXJ0X29wcyBpcyB0aGUgd2lubmVyLgorT24gdGhlIG90aGVyIGhhbmQsIG5vdyB0aGVyZSBhcmUgYWxzbyBzZXZlcmFsIElBNjQgdmlydHVhbGl6YXRpb24KK3RlY2hub2xvZ2llcyBsaWtlIGt2bS9JQTY0LCB4ZW4vSUE2NCBhbmQgbWFueSBvdGhlciBhY2FkZW1pYyBJQTY0CitoeXBlcnZpc29ycyBzbyB0aGF0IGl0IGlzIGdvb2QgdG8gYWRkIGdlbmVyaWMgdmlydHVhbGl6YXRpb24KK2luZnJhc3RydWN0dXJlIG9uIExpbnV4L0lBNjQuCisKKworV2hhdCBpcyBwYXJhdmlydF9vcHM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0l0IGhhcyBiZWVuIGRldmVsb3BlZCBvbiB4ODYgYXMgdmlydHVhbGl6YXRpb24gc3VwcG9ydCB2aWEgQVBJLCBub3QgQUJJLgorSXQgYWxsb3dzIGVhY2ggaHlwZXJ2aXNvciB0byBvdmVycmlkZSBvcGVyYXRpb25zIHdoaWNoIGFyZSBpbXBvcnRhbnQgZm9yCitoeXBlcnZpc29ycyBhdCBBUEkgbGV2ZWwuIEFuZCBpdCBhbGxvd3MgYSBzaW5nbGUga2VybmVsIGJpbmFyeSB0byBydW4gb24KK2FsbCBzdXBwb3J0ZWQgZXhlY3V0aW9uIGVudmlyb25tZW50cyBpbmNsdWRpbmcgbmF0aXZlIG1hY2hpbmUuCitFc3NlbnRpYWxseSBwYXJhdmlydF9vcHMgaXMgYSBzZXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgd2hpY2ggcmVwcmVzZW50CitvcGVyYXRpb25zIGNvcnJlc3BvbmRpbmcgdG8gbG93IGxldmVsIHNlbnNpdGl2ZSBpbnN0cnVjdGlvbnMgYW5kIGhpZ2gKK2xldmVsIGZ1bmN0aW9uYWxpdGllcyBpbiB2YXJpb3VzIGFyZWEuIEJ1dCBvbmUgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZQorZnJvbSB1c3VhbCBmdW5jdGlvbiBwb2ludGVyIHRhYmxlIGlzIHRoYXQgaXQgYWxsb3dzIG9wdGltaXphdGlvbiB3aXRoCitiaW5hcnkgcGF0Y2guIEl0IGlzIGJlY2F1c2Ugc29tZSBvZiB0aGVzZSBvcGVyYXRpb25zIGFyZSB2ZXJ5CitwZXJmb3JtYW5jZSBzZW5zaXRpdmUgYW5kIGluZGlyZWN0IGNhbGwgb3ZlcmhlYWQgaXMgbm90IG5lZ2xpZ2libGUuCitXaXRoIGJpbmFyeSBwYXRjaCwgaW5kaXJlY3QgQyBmdW5jdGlvbiBjYWxsIGNhbiBiZSB0cmFuc2Zvcm1lZCBpbnRvCitkaXJlY3QgQyBmdW5jdGlvbiBjYWxsIG9yIGluLXBsYWNlIGV4ZWN1dGlvbiB0byBlbGltaW5hdGUgdGhlIG92ZXJoZWFkLgorCitUaHVzLCBvcGVyYXRpb25zIG9mIHBhcmF2aXJ0X29wcyBhcmUgY2xhc3NpZmllZCBpbnRvIHRocmVlIGNhdGVnb3JpZXMuCistIHNpbXBsZSBpbmRpcmVjdCBjYWxsCisgIFRoZXNlIG9wZXJhdGlvbnMgY29ycmVzcG9uZCB0byBoaWdoIGxldmVsIGZ1bmN0aW9uYWxpdHkgc28gdGhhdCB0aGUKKyAgb3ZlcmhlYWQgb2YgaW5kaXJlY3QgY2FsbCBpc24ndCB2ZXJ5IGltcG9ydGFudC4KKworLSBpbmRpcmVjdCBjYWxsIHdoaWNoIGFsbG93cyBvcHRpbWl6YXRpb24gd2l0aCBiaW5hcnkgcGF0Y2gKKyAgVXN1YWxseSB0aGVzZSBvcGVyYXRpb25zIGNvcnJlc3BvbmQgdG8gbG93IGxldmVsIGluc3RydWN0aW9ucy4gVGhleQorICBhcmUgY2FsbGVkIGZyZXF1ZW50bHkgYW5kIHBlcmZvcm1hbmNlIGNyaXRpY2FsLiBTbyB0aGUgb3ZlcmhlYWQgaXMKKyAgdmVyeSBpbXBvcnRhbnQuCisKKy0gYSBzZXQgb2YgbWFjcm9zIGZvciBoYW5kIHdyaXR0ZW4gYXNzZW1ibHkgY29kZQorICBIYW5kIHdyaXR0ZW4gYXNzZW1ibHkgY29kZXMgKC5TIGZpbGVzKSBhbHNvIG5lZWQgcGFyYXZpcnR1YWxpemF0aW9uCisgIGJlY2F1c2UgdGhleSBpbmNsdWRlIHNlbnNpdGl2ZSBpbnN0cnVjdGlvbnMgb3Igc29tZSBvZiBjb2RlIHBhdGhzIGluCisgIHRoZW0gYXJlIHZlcnkgcGVyZm9ybWFuY2UgY3JpdGljYWwuCisKKworVGhlIHJlbGF0aW9uIHRvIHRoZSBJQTY0IG1hY2hpbmUgdmVjdG9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpbnV4L0lBNjQgaGFzIHRoZSBJQTY0IG1hY2hpbmUgdmVjdG9yIGZ1bmN0aW9uYWxpdHkgd2hpY2ggYWxsb3dzIHRoZQora2VybmVsIHRvIHN3aXRjaCBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gaW5pdGlhbGl6YXRpb24sIGlwaSwgZG1hIGFwaS4uLikKK2RlcGVuZGluZyBvbiBleGVjdXRpbmcgcGxhdGZvcm0uCitXZSBjYW4gcmVwbGFjZSBzb21lIGltcGxlbWVudGF0aW9ucyB2ZXJ5IGVhc2lseSBkZWZpbmluZyBhIG5ldyBtYWNoaW5lCit2ZWN0b3IuIFRodXMgYW5vdGhlciBhcHByb2FjaCBmb3IgdmlydHVhbGl6YXRpb24gc3VwcG9ydCB3b3VsZCBiZQorZW5oYW5jaW5nIHRoZSBtYWNoaW5lIHZlY3RvciBmdW5jdGlvbmFsaXR5LgorQnV0IHBhcmF2aXJ0X29wcyBhcHByb2FjaCB3YXMgdGFrZW4gYmVjYXVzZQorLSB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IG5lZWRzIHdpZGVyIHN1cHBvcnQgdGhhbiBtYWNoaW5lIHZlY3RvciBkb2VzLgorICBlLmcuIGxvdyBsZXZlbCBpbnN0cnVjdGlvbiBwYXJhdmlydHVhbGl6YXRpb24uIEl0IG11c3QgYmUKKyAgICAgICBpbml0aWFsaXplZCB2ZXJ5IGVhcmx5IGJlZm9yZSBwbGF0Zm9ybSBkZXRlY3Rpb24uCisKKy0gdmlydHVhbGl6YXRpb24gc3VwcG9ydCBuZWVkcyBtb3JlIGZ1bmN0aW9uYWxpdHkgbGlrZSBiaW5hcnkgcGF0Y2guCisgIFByb2JhYmx5IHRoZSBjYWxsaW5nIG92ZXJoZWFkIG1pZ2h0IG5vdCBiZSB2ZXJ5IGxhcmdlIGNvbXBhcmVkIHRvIHRoZQorICBlbXVsYXRpb24gb3ZlcmhlYWQgb2YgdmlydHVhbGl6YXRpb24uIEhvd2V2ZXIgaW4gdGhlIG5hdGl2ZSBjYXNlLCB0aGUKKyAgb3ZlcmhlYWQgc2hvdWxkIGJlIGVsaW1pbmF0ZWQgY29tcGxldGVseS4KKyAgQSBzaW5nbGUga2VybmVsIGJpbmFyeSBzaG91bGQgcnVuIG9uIGVhY2ggZW52aXJvbm1lbnQgaW5jbHVkaW5nIG5hdGl2ZSwKKyAgYW5kIHRoZSBvdmVyaGVhZCBvZiBwYXJhdmlydF9vcHMgb24gbmF0aXZlIGVudmlyb25tZW50IHNob3VsZCBiZSBhcworICBzbWFsbCBhcyBwb3NzaWJsZS4KKworLSBmb3IgZnVsbCB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5LCBlLmcuIEtWTS9JQTY0IG9yCisgIFhlbi9JQTY0IEhWTSBkb21haW4sIHRoZSByZXN1bHQgd291bGQgYmUKKyAgKHRoZSBlbXVsYXRlZCBwbGF0Zm9ybSBtYWNoaW5lIHZlY3Rvci4gcHJvYmFibHkgZGlnKSArIChwdl9vcHMpLgorICBUaGlzIG1lYW5zIHRoYXQgdGhlIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgbGF5ZXIgc2hvdWxkIGJlIHVuZGVyCisgIHRoZSBtYWNoaW5lIHZlY3RvciBsYXllci4KKworUG9zc2libHkgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIG1vdmUgc29tZSBmdW5jdGlvbiBwb2ludGVycyBmcm9tCitwYXJhdmlydF9vcHMgdG8gbWFjaGluZSB2ZWN0b3IuIEluIGZhY3QsIFhlbiBkb21VIGNhc2UgdXRpbGl6ZXMgYm90aAorcHZfb3BzIGFuZCBtYWNoaW5lIHZlY3Rvci4KKworCitJQTY0IHBhcmF2aXJ0X29wcworLS0tLS0tLS0tLS0tLS0tLS0KK0luIHRoaXMgc2VjdGlvbiwgdGhlIGNvbmNyZXRlIHBhcmF2aXJ0X29wcyB3aWxsIGJlIGRpc2N1c3NlZC4KK0JlY2F1c2Ugb2YgdGhlIGFyY2hpdGVjdHVyZSBkaWZmZXJlbmNlIGJldHdlZW4gaWE2NCBhbmQgeDg2LCB0aGUKK3Jlc3VsdGluZyBzZXQgb2YgZnVuY3Rpb25zIGlzIHZlcnkgZGlmZmVyZW50IGZyb20geDg2IHB2X29wcy4KKworLSBDIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGVzCitUaGV5IGFyZSBub3QgdmVyeSBwZXJmb3JtYW5jZSBjcml0aWNhbCBzbyB0aGF0IHNpbXBsZSBDIGluZGlyZWN0CitmdW5jdGlvbiBjYWxsIGlzIGFjY2VwdGFibGUuIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCBhdAordGhpcyBtb21lbnQuIEZvciBkZXRhaWxzIHNlZSBsaW51eC9pbmNsdWRlL2FzbS1pYTY0L3BhcmF2aXJ0LmgKKyAgLSBzdHJ1Y3QgcHZfaW5mbworICAgIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LgorICAtIHN0cnVjdCBwdl9pbml0X29wcworICAgIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgdmFyaW91cyBpbml0aWFsaXphdGlvbiBob29rcy4KKyAgLSBzdHJ1Y3QgcHZfaW9zYXBpY19vcHMKKyAgICBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG9va3MgdG8gaW9zYXBpYyBvcGVyYXRpb25zLgorICAtIHN0cnVjdCBwdl9pcnFfb3BzCisgICAgVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvb2tzIHRvIGlycSByZWxhdGVkIG9wZXJhdGlvbnMKKyAgLSBzdHJ1Y3QgcHZfdGltZV9vcAorICAgIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob29rcyB0byBzdGVhbCB0aW1lIGFjY291bnRpbmcuCisKKy0gYSBzZXQgb2YgaW5kaXJlY3QgY2FsbHMgd2hpY2ggbmVlZCBvcHRpbWl6YXRpb24KK0N1cnJlbnRseSB0aGlzIGNsYXNzIG9mIGZ1bmN0aW9ucyBjb3JyZXNwb25kIHRvIGEgc3Vic2V0IG9mIElBNjQKK2ludHJpbnNpY3MuIEF0IHRoaXMgbW9tZW50IHRoZSBvcHRpbWl6YXRpb24gd2l0aCBiaW5hcnkgcGF0Y2ggaXNuJ3QKK2ltcGxlbWVudGVkIHlldC4KK3N0cnVjdCBwdl9jcHVfb3AgaXMgZGVmaW5lZC4gRm9yIGRldGFpbHMgc2VlCitsaW51eC9pbmNsdWRlL2FzbS1pYTY0L3BhcmF2aXJ0X3ByaXZvcC5oCitNb3N0bHkgdGhleSBjb3JyZXNwb25kIHRvIGlhNjQgaW50cmluc2ljcyAxLXRvLTEuCitDYXZlYXQ6IE5vdyB0aGV5IGFyZSBkZWZpbmVkIGFzIEMgaW5kaXJlY3QgZnVuY3Rpb24gcG9pbnRlcnMsIGJ1dCBpbgorb3JkZXIgdG8gc3VwcG9ydCBiaW5hcnkgcGF0Y2ggb3B0aW1pemF0aW9uLCB0aGV5IHdpbGwgYmUgY2hhbmdlZAordXNpbmcgR0NDIGV4dGVuZGVkIGlubGluZSBhc3NlbWJseSBjb2RlLgorCistIGEgc2V0IG9mIG1hY3JvcyBmb3IgaGFuZCB3cml0dGVuIGFzc2VtYmx5IGNvZGUgKC5TIGZpbGVzKQorRm9yIG1haW50ZW5hbmNlIHB1cnBvc2UsIHRoZSB0YWtlbiBhcHByb2FjaCBmb3IgLlMgZmlsZXMgaXMgc2luZ2xlCitzb3VyY2UgY29kZSBhbmQgY29tcGlsZSBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtYWNyb3MgZGVmaW5pdGlvbnMuCitFYWNoIHB2X29wcyBpbnN0YW5jZSBtdXN0IGRlZmluZSB0aG9zZSBtYWNyb3MgdG8gY29tcGlsZS4KK1RoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IHNlbnNpdGl2ZSwgYnV0IG5vbi1wcml2aWxlZ2VkCitpbnN0cnVjdGlvbnMgbXVzdCBiZSBwYXJhdmlydHVhbGl6ZWQgYW5kIHRoYXQgc29tZSBwcml2aWxlZ2VkCitpbnN0cnVjdGlvbnMgYWxzbyBuZWVkIHBhcmF2aXJ0dWFsaXphdGlvbiBmb3IgcmVhc29uYWJsZSBwZXJmb3JtYW5jZS4KK0RldmVsb3BlcnMgd2hvIG1vZGlmeSAuUyBmaWxlcyBtdXN0IGJlIGF3YXJlIG9mIHRoYXQuIEF0IHRoaXMgbW9tZW50CithbiBlYXN5IGNoZWNrZXIgaXMgaW1wbGVtZW50ZWQgdG8gZGV0ZWN0IHBhcmF2aXJ0dWFsaXphdGlvbiBicmVha2FnZS4KK0J1dCBpdCBkb2Vzbid0IGNvdmVyIGFsbCB0aGUgY2FzZXMuCisKK1NvbWV0aW1lcyB0aGlzIHNldCBvZiBtYWNyb3MgaXMgY2FsbGVkIHB2X2NwdV9hc21fb3AuIEJ1dCB0aGVyZSBpcyBubworY29ycmVzcG9uZGluZyBzdHJ1Y3R1cmUgaW4gdGhlIHNvdXJjZSBjb2RlLgorVGhvc2UgbWFjcm9zIG1vc3RseSAxOjEgY29ycmVzcG9uZCB0byBhIHN1YnNldCBvZiBwcml2aWxlZ2VkCitpbnN0cnVjdGlvbnMuIFNlZSBsaW51eC9pbmNsdWRlL2FzbS1pYTY0L25hdGl2ZS9pbnN0LmguCitBbmQgc29tZSBmdW5jdGlvbnMgd3JpdHRlbiBpbiBhc3NlbWJseSBhbHNvIG5lZWQgdG8gYmUgb3ZlcnJpZGVkIHNvCit0aGF0IGVhY2ggcHZfb3BzIGluc3RhbmNlIGhhdmUgdG8gZGVmaW5lIHNvbWUgbWFjcm9zLiBBZ2FpbiBzZWUKK2xpbnV4L2luY2x1ZGUvYXNtLWlhNjQvbmF0aXZlL2luc3QuaC4KKworCitUaG9zZSBzdHJ1Y3R1cmVzIG11c3QgYmUgaW5pdGlhbGl6ZWQgdmVyeSBlYXJseSBiZWZvcmUgc3RhcnRfa2VybmVsLgorUHJvYmFibHkgaW5pdGlhbGl6ZWQgaW4gaGVhZC5TIHVzaW5nIG11bHRpIGVudHJ5IHBvaW50IG9yIHNvbWUgb3RoZXIgdHJpY2suCitGb3IgbmF0aXZlIGNhc2UgaW1wbGVtZW50YXRpb24gc2VlIGxpbnV4L2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnQuYy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvZ2FtZXBvcnQtcHJvZ3JhbW1pbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9nYW1lcG9ydC1wcm9ncmFtbWluZy50eHQKaW5kZXggMTRlMGE4Yi4uMDNhNzRmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9nYW1lcG9ydC1wcm9ncmFtbWluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9nYW1lcG9ydC1wcm9ncmFtbWluZy50eHQKQEAgLTEsNSArMSwzIEBACi0kSWQ6IGdhbWVwb3J0LXByb2dyYW1taW5nLnR4dCx2IDEuMyAyMDAxLzA0LzI0IDEzOjUxOjM3IHZvanRlY2ggRXhwICQKLQogUHJvZ3JhbW1pbmcgZ2FtZXBvcnQgZHJpdmVycwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQudHh0CmluZGV4IGZmOGNlYTAuLjY4NmVlOTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQudHh0CkBAIC0xLDcgKzEsNiBAQAogCQkJICBMaW51eCBJbnB1dCBkcml2ZXJzIHYxLjAKIAkgICAgICAgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+CiAJCQkgICAgIFNwb25zb3JlZCBieSBTdVNFCi0JICAgICRJZDogaW5wdXQudHh0LHYgMS44IDIwMDIvMDUvMjkgMDM6MTU6MDEgYnJhZGxleW0gRXhwICQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogMC4gRGlzY2xhaW1lcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1hcGkudHh0CmluZGV4IGFjYmQzMmIuLmM1MDczMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLWFwaS50eHQKQEAgLTUsOCArNSw2IEBACiAKIAkJCSAgICAgIDcgQXVnIDE5OTgKIAotCSRJZDogam95c3RpY2stYXBpLnR4dCx2IDEuMiAyMDAxLzA1LzA4IDIxOjIxOjIzIHZvanRlY2ggRXhwICQKLQogMS4gSW5pdGlhbGl6YXRpb24KIH5+fn5+fn5+fn5+fn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0CmluZGV4IGVkZTVmMzMuLjFjODU2ZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dApAQCAtMiw3ICsyLDYgQEAKIAkgICAgICAgKGMpIDE5OTgtMjAwMCBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+CiAJICAgICAgIChjKSAxOTk4IEFuZHJlZSBCb3JybWFubiA8YS5ib3JybWFubkB0dS1icy5kZT4KIAkJCSAgICAgU3BvbnNvcmVkIGJ5IFN1U0UKLQkkSWQ6IGpveXN0aWNrLXBhcnBvcnQudHh0LHYgMS42IDIwMDEvMDkvMjUgMDk6MzE6MzIgdm9qdGVjaCBFeHAgJAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAwLiBEaXNjbGFpbWVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2sudHh0CmluZGV4IDM4OWRlOWIuLjE1NGQ3NjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2sudHh0CkBAIC0xLDcgKzEsNiBAQAogCQkgICAgICAgTGludXggSm95c3RpY2sgZHJpdmVyIHYyLjAuMAogCSAgICAgICAoYykgMTk5Ni0yMDAwIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4KIAkJCSAgICAgU3BvbnNvcmVkIGJ5IFN1U0UKLQkgICAkSWQ6IGpveXN0aWNrLnR4dCx2IDEuMTIgMjAwMi8wMy8wMyAxMjoxMzowNyBqZGVuZXV4IEV4cCAkCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDAuIERpc2NsYWltZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggMDlhZDc0NS4uNDdlN2Q4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTEyMDYsNyArMTIwNiw3IEBACiAJCQkgICAgICAgICBvcgogCQkJICAgICAgICAgbWVtbWFwPTB4MTAwMDAkMHgxODY5MDAwMAogCi0JbWVtdGVzdD0JW0tOTCxYODZfNjRdIEVuYWJsZSBtZW10ZXN0CisJbWVtdGVzdD0JW0tOTCxYODZdIEVuYWJsZSBtZW10ZXN0CiAJCQlGb3JtYXQ6IDxpbnRlZ2VyPgogCQkJcmFuZ2U6IDAsNCA6IHBhdHRlcm4gbnVtYmVyCiAJCQlkZWZhdWx0IDogMCA8ZGlzYWJsZT4KQEAgLTEyNzksNiArMTI3OSwxMyBAQAogCQkJVGhpcyB1c2FnZSBpcyBvbmx5IGRvY3VtZW50ZWQgaW4gZWFjaCBkcml2ZXIgc291cmNlCiAJCQlmaWxlIGlmIGF0IGFsbC4KIAorCW5mX2Nvbm50cmFjay5hY2N0PQorCQkJW05FVEZJTFRFUl0gRW5hYmxlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZmxvdyBhY2NvdW50aW5nCisJCQkwIHRvIGRpc2FibGUgYWNjb3VudGluZworCQkJMSB0byBlbmFibGUgYWNjb3VudGluZworCQkJRGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uIENPTkZJR19ORl9DVF9BQ0NUIHRoYXQgaXMKKwkJCWdvaW5nIHRvIGJlIHJlbW92ZWQgaW4gMi42LjI5LgorCiAJbmZzYWRkcnM9CVtORlNdCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dC4KIApAQCAtMjAyNyw2ICsyMDM0LDkgQEAKIAogCXNuZC15bWZwY2k9CVtIVyxBTFNBXQogCisJc29mdGxvY2t1cF9wYW5pYz0KKwkJCVtLTkxdIFNob3VsZCB0aGUgc29mdC1sb2NrdXAgZGV0ZWN0b3IgZ2VuZXJhdGUgcGFuaWNzLgorCiAJc29ueXBpLio9CVtIV10gU29ueSBQcm9ncmFtbWFibGUgSS9PIENvbnRyb2wgRGV2aWNlIGRyaXZlcgogCQkJU2VlIERvY3VtZW50YXRpb24vc29ueXBpLnR4dAogCkBAIC0yMTU4LDYgKzIxNjgsMTAgQEAKIAkJCU5vdGUgdGhhdCBnZW51aW5lIG92ZXJjdXJyZW50IGV2ZW50cyB3b24ndCBiZQogCQkJcmVwb3J0ZWQgZWl0aGVyLgogCisJdW5rbm93bl9ubWlfcGFuaWMKKwkJCVtYODYtMzIsWDg2LTY0XQorCQkJU2V0IHVua25vd25fbm1pX3BhbmljPTEgZWFybHkgb24gYm9vdC4KKwogCXVzYmNvcmUuYXV0b3N1c3BlbmQ9CiAJCQlbVVNCXSBUaGUgYXV0b3N1c3BlbmQgdGltZSBkZWxheSAoaW4gc2Vjb25kcykgdXNlZAogCQkJZm9yIG5ld2x5LWRldGVjdGVkIFVTQiBkZXZpY2VzIChkZWZhdWx0IDIpLiAgVGhpcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZC50eHQgYi9Eb2N1bWVudGF0aW9uL21kLnR4dAppbmRleCBhOGI0MzA2Li4xZGE5ZDFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21kLnR4dApAQCAtMjM2LDYgKzIzNiwxMSBAQAogICAgICB3cml0aW5nIHRoZSB3b3JkIGZvciB0aGUgZGVzaXJlZCBzdGF0ZSwgaG93ZXZlciBzb21lIHN0YXRlcwogICAgICBjYW5ub3QgYmUgZXhwbGljaXRseSBzZXQsIGFuZCBzb21lIHRyYW5zaXRpb25zIGFyZSBub3QgYWxsb3dlZC4KIAorICAgICBTZWxlY3QvcG9sbCB3b3JrcyBvbiB0aGlzIGZpbGUuICBBbGwgY2hhbmdlcyBleGNlcHQgYmV0d2VlbgorICAgICAJYWN0aXZlX2lkbGUgYW5kIGFjdGl2ZSAod2hpY2ggY2FuIGJlIGZyZXF1ZW50IGFuZCBhcmUgbm90CisJdmVyeSBpbnRlcmVzdGluZykgYXJlIG5vdGlmaWVkLiAgYWN0aXZlLT5hY3RpdmVfaWRsZSBpcworCXJlcG9ydGVkIGlmIHRoZSBtZXRhZGF0YSBpcyBleHRlcm5hbGx5IG1hbmFnZWQuCisKICAgICAgY2xlYXIKICAgICAgICAgIE5vIGRldmljZXMsIG5vIHNpemUsIG5vIGxldmVsCiAgICAgICAgICBXcml0aW5nIGlzIGVxdWl2YWxlbnQgdG8gU1RPUF9BUlJBWSBpb2N0bApAQCAtMjkyLDYgKzI5NywxMCBAQAogCSAgICAgIHdyaXRlbW9zdGx5IC0gZGV2aWNlIHdpbGwgb25seSBiZSBzdWJqZWN0IHRvIHJlYWQKIAkJICAgICAgICAgcmVxdWVzdHMgaWYgdGhlcmUgYXJlIG5vIG90aGVyIG9wdGlvbnMuCiAJCQkgVGhpcyBhcHBsaWVzIG9ubHkgdG8gcmFpZDEgYXJyYXlzLgorCSAgICAgIGJsb2NrZWQgIC0gZGV2aWNlIGhhcyBmYWlsZWQsIG1ldGFkYXRhIGlzICJleHRlcm5hbCIsCisJICAgICAgICAgICAgICAgICBhbmQgdGhlIGZhaWx1cmUgaGFzbid0IGJlZW4gYWNrbm93bGVkZ2VkIHlldC4KKwkJCSBXcml0ZXMgdGhhdCB3b3VsZCB3cml0ZSB0byB0aGlzIGRldmljZSBpZgorCQkJIGl0IHdlcmUgbm90IGZhdWx0eSBhcmUgYmxvY2tlZC4KIAkgICAgICBzcGFyZSAgICAtIGRldmljZSBpcyB3b3JraW5nLCBidXQgbm90IGEgZnVsbCBtZW1iZXIuCiAJCQkgVGhpcyBpbmNsdWRlcyBzcGFyZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3MKIAkJCSBvZiBiZWluZyByZWNvdmVyZWQgdG8KQEAgLTMwMSw2ICszMTAsMTIgQEAKIAlXcml0aW5nICJyZW1vdmUiIHJlbW92ZXMgdGhlIGRldmljZSBmcm9tIHRoZSBhcnJheS4KIAlXcml0aW5nICJ3cml0ZW1vc3RseSIgc2V0cyB0aGUgd3JpdGVtb3N0bHkgZmxhZy4KIAlXcml0aW5nICItd3JpdGVtb3N0bHkiIGNsZWFycyB0aGUgd3JpdGVtb3N0bHkgZmxhZy4KKwlXcml0aW5nICJibG9ja2VkIiBzZXRzIHRoZSAiYmxvY2tlZCIgZmxhZy4KKwlXcml0aW5nICItYmxvY2tlZCIgY2xlYXIgdGhlICJibG9ja2VkIiBmbGFnIGFuZCBhbGxvd3Mgd3JpdGVzCisJCXRvIGNvbXBsZXRlLgorCisJVGhpcyBmaWxlIHJlc3BvbmRzIHRvIHNlbGVjdC9wb2xsLiBBbnkgY2hhbmdlIHRvICdmYXVsdHknCisJb3IgJ2Jsb2NrZWQnIGNhdXNlcyBhbiBldmVudC4KIAogICAgICAgZXJyb3JzCiAJQW4gYXBwcm94aW1hdGUgY291bnQgb2YgcmVhZCBlcnJvcnMgdGhhdCBoYXZlIGJlZW4gZGV0ZWN0ZWQgb24KQEAgLTMzMiw3ICszNDcsNyBAQAogICAgICAgICBmb3Igc3RvcmFnZSBvZiBkYXRhLiAgVGhpcyB3aWxsIG5vcm1hbGx5IGJlIHRoZSBzYW1lIGFzIHRoZQogCWNvbXBvbmVudF9zaXplLiAgVGhpcyBjYW4gYmUgd3JpdHRlbiB3aGlsZSBhc3NlbWJsaW5nIGFuCiAgICAgICAgIGFycmF5LiAgSWYgYSB2YWx1ZSBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgY29tcG9uZW50X3NpemUgaXMKLSAgICAgICAgd3JpdHRlbiwgY29tcG9uZW50X3NpemUgd2lsbCBiZSByZWR1Y2VkIHRvIHRoaXMgdmFsdWUuCisgICAgICAgIHdyaXR0ZW4sIGl0IHdpbGwgYmUgcmVqZWN0ZWQuCiAKIAogQW4gYWN0aXZlIG1kIGRldmljZSB3aWxsIGFsc28gY29udGFpbiBhbmQgZW50cnkgZm9yIGVhY2ggYWN0aXZlIGRldmljZQpAQCAtMzgxLDYgKzM5NiwxOSBAQAogCSdjaGVjaycgYW5kICdyZXBhaXInIHdpbGwgc3RhcnQgdGhlIGFwcHJvcHJpYXRlIHByb2Nlc3MKICAgICAgICAgICAgcHJvdmlkaW5nIHRoZSBjdXJyZW50IHN0YXRlIGlzICdpZGxlJy4KIAorICAgICAgVGhpcyBmaWxlIHJlc3BvbmRzIHRvIHNlbGVjdC9wb2xsLiAgQW55IGltcG9ydGFudCBjaGFuZ2UgaW4gdGhlIHZhbHVlCisgICAgICB0cmlnZ2VycyBhIHBvbGwgZXZlbnQuICBTb21ldGltZXMgdGhlIHZhbHVlIHdpbGwgYnJpZWZseSBiZQorICAgICAgInJlY292ZXIiIGlmIGEgcmVjb3Zlcnkgc2VlbXMgdG8gYmUgbmVlZGVkLCBidXQgY2Fubm90IGJlCisgICAgICBhY2hpZXZlZC4gSW4gdGhhdCBjYXNlLCB0aGUgdHJhbnNpdGlvbiB0byAicmVjb3ZlciIgaXNuJ3QKKyAgICAgIG5vdGlmaWVkLCBidXQgdGhlIHRyYW5zaXRpb24gYXdheSBpcy4KKworICAgZGVncmFkZWQKKyAgICAgIFRoaXMgY29udGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGRldmljZXMgYnkgd2hpY2ggdGhlCisgICAgICBhcnJheXMgaXMgZGVncmFkZWQuICBTbyBhbiBvcHRpbWFsIGFycmF5IHdpdGggc2hvdyAnMCcuICBBCisgICAgICBzaW5nbGUgZmFpbGVkL21pc3NpbmcgZHJpdmUgd2lsbCBzaG93ICcxJywgZXRjLgorICAgICAgVGhpcyBmaWxlIHJlc3BvbmRzIHRvIHNlbGVjdC9wb2xsLCBhbnkgaW5jcmVhc2Ugb3IgZGVjcmVhc2UKKyAgICAgIGluIHRoZSBjb3VudCBvZiBtaXNzaW5nIGRldmljZXMgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50LgorCiAgICBtaXNtYXRjaF9jb3VudAogICAgICAgV2hlbiBwZXJmb3JtaW5nICdjaGVjaycgYW5kICdyZXBhaXInLCBhbmQgcG9zc2libHkgd2hlbgogICAgICAgcGVyZm9ybWluZyAncmVzeW5jJywgbWQgd2lsbCBjb3VudCB0aGUgbnVtYmVyIG9mIGVycm9ycyB0aGF0IGFyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CmluZGV4IGEwY2RhMDYuLjdmYTdmZTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKQEAgLTI4OSwzNSArMjg5LDczIEBACiBmYWlsX292ZXJfbWFjCiAKIAlTcGVjaWZpZXMgd2hldGhlciBhY3RpdmUtYmFja3VwIG1vZGUgc2hvdWxkIHNldCBhbGwgc2xhdmVzIHRvCi0JdGhlIHNhbWUgTUFDIGFkZHJlc3MgKHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvciksIG9yLCB3aGVuCi0JZW5hYmxlZCwgY2hhbmdlIHRoZSBib25kJ3MgTUFDIGFkZHJlc3Mgd2hlbiBjaGFuZ2luZyB0aGUKLQlhY3RpdmUgaW50ZXJmYWNlIChpLmUuLCBmYWlsIG92ZXIgdGhlIE1BQyBhZGRyZXNzIGl0c2VsZikuCisJdGhlIHNhbWUgTUFDIGFkZHJlc3MgYXQgZW5zbGF2ZW1lbnQgKHRoZSB0cmFkaXRpb25hbAorCWJlaGF2aW9yKSwgb3IsIHdoZW4gZW5hYmxlZCwgcGVyZm9ybSBzcGVjaWFsIGhhbmRsaW5nIG9mIHRoZQorCWJvbmQncyBNQUMgYWRkcmVzcyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHNlbGVjdGVkIHBvbGljeS4KIAotCUZhaWwgb3ZlciBNQUMgaXMgdXNlZnVsIGZvciBkZXZpY2VzIHRoYXQgY2Fubm90IGV2ZXIgYWx0ZXIKLQl0aGVpciBNQUMgYWRkcmVzcywgb3IgZm9yIGRldmljZXMgdGhhdCByZWZ1c2UgaW5jb21pbmcKLQlicm9hZGNhc3RzIHdpdGggdGhlaXIgb3duIHNvdXJjZSBNQUMgKHdoaWNoIGludGVyZmVyZXMgd2l0aAotCXRoZSBBUlAgbW9uaXRvcikuCisJUG9zc2libGUgdmFsdWVzIGFyZToKIAotCVRoZSBkb3duIHNpZGUgb2YgZmFpbCBvdmVyIE1BQyBpcyB0aGF0IGV2ZXJ5IGRldmljZSBvbiB0aGUKLQluZXR3b3JrIG11c3QgYmUgdXBkYXRlZCB2aWEgZ3JhdHVpdG91cyBBUlAsIHZzLiBqdXN0IHVwZGF0aW5nCi0JYSBzd2l0Y2ggb3Igc2V0IG9mIHN3aXRjaGVzICh3aGljaCBvZnRlbiB0YWtlcyBwbGFjZSBmb3IgYW55Ci0JdHJhZmZpYywgbm90IGp1c3QgQVJQIHRyYWZmaWMsIGlmIHRoZSBzd2l0Y2ggc25vb3BzIGluY29taW5nCi0JdHJhZmZpYyB0byB1cGRhdGUgaXRzIHRhYmxlcykgZm9yIHRoZSB0cmFkaXRpb25hbCBtZXRob2QuICBJZgotCXRoZSBncmF0dWl0b3VzIEFSUCBpcyBsb3N0LCBjb21tdW5pY2F0aW9uIG1heSBiZSBkaXNydXB0ZWQuCisJbm9uZSBvciAwCiAKLQlXaGVuIGZhaWwgb3ZlciBNQUMgaXMgdXNlZCBpbiBjb25qdWN0aW9uIHdpdGggdGhlIG1paSBtb25pdG9yLAotCWRldmljZXMgd2hpY2ggYXNzZXJ0IGxpbmsgdXAgcHJpb3IgdG8gYmVpbmcgYWJsZSB0byBhY3R1YWxseQotCXRyYW5zbWl0IGFuZCByZWNlaXZlIGFyZSBwYXJ0aWN1bGFybHkgc3VzZWNwdGlibGUgdG8gbG9zcyBvZgotCXRoZSBncmF0dWl0b3VzIEFSUCwgYW5kIGFuIGFwcHJvcHJpYXRlIHVwZGVsYXkgc2V0dGluZyBtYXkgYmUKLQlyZXF1aXJlZC4KKwkJVGhpcyBzZXR0aW5nIGRpc2FibGVzIGZhaWxfb3Zlcl9tYWMsIGFuZCBjYXVzZXMKKwkJYm9uZGluZyB0byBzZXQgYWxsIHNsYXZlcyBvZiBhbiBhY3RpdmUtYmFja3VwIGJvbmQgdG8KKwkJdGhlIHNhbWUgTUFDIGFkZHJlc3MgYXQgZW5zbGF2ZW1lbnQgdGltZS4gIFRoaXMgaXMgdGhlCisJCWRlZmF1bHQuCiAKLQlBIHZhbHVlIG9mIDAgZGlzYWJsZXMgZmFpbCBvdmVyIE1BQywgYW5kIGlzIHRoZSBkZWZhdWx0LiAgQQotCXZhbHVlIG9mIDEgZW5hYmxlcyBmYWlsIG92ZXIgTUFDLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZAotCWF1dG9tYXRpY2FsbHkgaWYgdGhlIGZpcnN0IHNsYXZlIGFkZGVkIGNhbm5vdCBjaGFuZ2UgaXRzIE1BQwotCWFkZHJlc3MuICBUaGlzIG9wdGlvbiBtYXkgYmUgbW9kaWZpZWQgdmlhIHN5c2ZzIG9ubHkgd2hlbiBubwotCXNsYXZlcyBhcmUgcHJlc2VudCBpbiB0aGUgYm9uZC4KKwlhY3RpdmUgb3IgMQogCi0JVGhpcyBvcHRpb24gd2FzIGFkZGVkIGluIGJvbmRpbmcgdmVyc2lvbiAzLjIuMC4KKwkJVGhlICJhY3RpdmUiIGZhaWxfb3Zlcl9tYWMgcG9saWN5IGluZGljYXRlcyB0aGF0IHRoZQorCQlNQUMgYWRkcmVzcyBvZiB0aGUgYm9uZCBzaG91bGQgYWx3YXlzIGJlIHRoZSBNQUMKKwkJYWRkcmVzcyBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzbGF2ZS4gIFRoZSBNQUMKKwkJYWRkcmVzcyBvZiB0aGUgc2xhdmVzIGlzIG5vdCBjaGFuZ2VkOyBpbnN0ZWFkLCB0aGUgTUFDCisJCWFkZHJlc3Mgb2YgdGhlIGJvbmQgY2hhbmdlcyBkdXJpbmcgYSBmYWlsb3Zlci4KKworCQlUaGlzIHBvbGljeSBpcyB1c2VmdWwgZm9yIGRldmljZXMgdGhhdCBjYW5ub3QgZXZlcgorCQlhbHRlciB0aGVpciBNQUMgYWRkcmVzcywgb3IgZm9yIGRldmljZXMgdGhhdCByZWZ1c2UKKwkJaW5jb21pbmcgYnJvYWRjYXN0cyB3aXRoIHRoZWlyIG93biBzb3VyY2UgTUFDICh3aGljaAorCQlpbnRlcmZlcmVzIHdpdGggdGhlIEFSUCBtb25pdG9yKS4KKworCQlUaGUgZG93biBzaWRlIG9mIHRoaXMgcG9saWN5IGlzIHRoYXQgZXZlcnkgZGV2aWNlIG9uCisJCXRoZSBuZXR3b3JrIG11c3QgYmUgdXBkYXRlZCB2aWEgZ3JhdHVpdG91cyBBUlAsCisJCXZzLiBqdXN0IHVwZGF0aW5nIGEgc3dpdGNoIG9yIHNldCBvZiBzd2l0Y2hlcyAod2hpY2gKKwkJb2Z0ZW4gdGFrZXMgcGxhY2UgZm9yIGFueSB0cmFmZmljLCBub3QganVzdCBBUlAKKwkJdHJhZmZpYywgaWYgdGhlIHN3aXRjaCBzbm9vcHMgaW5jb21pbmcgdHJhZmZpYyB0bworCQl1cGRhdGUgaXRzIHRhYmxlcykgZm9yIHRoZSB0cmFkaXRpb25hbCBtZXRob2QuICBJZiB0aGUKKwkJZ3JhdHVpdG91cyBBUlAgaXMgbG9zdCwgY29tbXVuaWNhdGlvbiBtYXkgYmUKKwkJZGlzcnVwdGVkLgorCisJCVdoZW4gdGhpcyBwb2xpY3kgaXMgdXNlZCBpbiBjb25qdWN0aW9uIHdpdGggdGhlIG1paQorCQltb25pdG9yLCBkZXZpY2VzIHdoaWNoIGFzc2VydCBsaW5rIHVwIHByaW9yIHRvIGJlaW5nCisJCWFibGUgdG8gYWN0dWFsbHkgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYXJlIHBhcnRpY3VsYXJseQorCQlzdXNlY3B0aWJsZSB0byBsb3NzIG9mIHRoZSBncmF0dWl0b3VzIEFSUCwgYW5kIGFuCisJCWFwcHJvcHJpYXRlIHVwZGVsYXkgc2V0dGluZyBtYXkgYmUgcmVxdWlyZWQuCisKKwlmb2xsb3cgb3IgMgorCisJCVRoZSAiZm9sbG93IiBmYWlsX292ZXJfbWFjIHBvbGljeSBjYXVzZXMgdGhlIE1BQworCQlhZGRyZXNzIG9mIHRoZSBib25kIHRvIGJlIHNlbGVjdGVkIG5vcm1hbGx5IChub3JtYWxseQorCQl0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHNsYXZlIGFkZGVkIHRvIHRoZSBib25kKS4KKwkJSG93ZXZlciwgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBzbGF2ZXMgYXJlIG5vdCBzZXQKKwkJdG8gdGhpcyBNQUMgYWRkcmVzcyB3aGlsZSB0aGV5IGFyZSBpbiBhIGJhY2t1cCByb2xlOyBhCisJCXNsYXZlIGlzIHByb2dyYW1tZWQgd2l0aCB0aGUgYm9uZCdzIE1BQyBhZGRyZXNzIGF0CisJCWZhaWxvdmVyIHRpbWUgKGFuZCB0aGUgZm9ybWVybHkgYWN0aXZlIHNsYXZlIHJlY2VpdmVzCisJCXRoZSBuZXdseSBhY3RpdmUgc2xhdmUncyBNQUMgYWRkcmVzcykuCisKKwkJVGhpcyBwb2xpY3kgaXMgdXNlZnVsIGZvciBtdWx0aXBvcnQgZGV2aWNlcyB0aGF0CisJCWVpdGhlciBiZWNvbWUgY29uZnVzZWQgb3IgaW5jdXIgYSBwZXJmb3JtYW5jZSBwZW5hbHR5CisJCXdoZW4gbXVsdGlwbGUgcG9ydHMgYXJlIHByb2dyYW1tZWQgd2l0aCB0aGUgc2FtZSBNQUMKKwkJYWRkcmVzcy4KKworCisJVGhlIGRlZmF1bHQgcG9saWN5IGlzIG5vbmUsIHVubGVzcyB0aGUgZmlyc3Qgc2xhdmUgY2Fubm90CisJY2hhbmdlIGl0cyBNQUMgYWRkcmVzcywgaW4gd2hpY2ggY2FzZSB0aGUgYWN0aXZlIHBvbGljeSBpcworCXNlbGVjdGVkIGJ5IGRlZmF1bHQuCisKKwlUaGlzIG9wdGlvbiBtYXkgYmUgbW9kaWZpZWQgdmlhIHN5c2ZzIG9ubHkgd2hlbiBubyBzbGF2ZXMgYXJlCisJcHJlc2VudCBpbiB0aGUgYm9uZC4KKworCVRoaXMgb3B0aW9uIHdhcyBhZGRlZCBpbiBib25kaW5nIHZlcnNpb24gMy4yLjAuICBUaGUgImZvbGxvdyIKKwlwb2xpY3kgd2FzIGFkZGVkIGluIGJvbmRpbmcgdmVyc2lvbiAzLjMuMC4KIAogbGFjcF9yYXRlCiAKQEAgLTMzOCw3ICszNzYsOCBAQAogCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJvbmRpbmcgZGV2aWNlcyB0byBjcmVhdGUgZm9yIHRoaXMKIAlpbnN0YW5jZSBvZiB0aGUgYm9uZGluZyBkcml2ZXIuICBFLmcuLCBpZiBtYXhfYm9uZHMgaXMgMywgYW5kCiAJdGhlIGJvbmRpbmcgZHJpdmVyIGlzIG5vdCBhbHJlYWR5IGxvYWRlZCwgdGhlbiBib25kMCwgYm9uZDEKLQlhbmQgYm9uZDIgd2lsbCBiZSBjcmVhdGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4KKwlhbmQgYm9uZDIgd2lsbCBiZSBjcmVhdGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4gIFNwZWNpZnlpbmcKKwlhIHZhbHVlIG9mIDAgd2lsbCBsb2FkIGJvbmRpbmcsIGJ1dCB3aWxsIG5vdCBjcmVhdGUgYW55IGRldmljZXMuCiAKIG1paW1vbgogCkBAIC01MDEsNiArNTQwLDE3IEBACiAJCXN3YXBwZWQgd2l0aCB0aGUgbmV3IGN1cnJfYWN0aXZlX3NsYXZlIHRoYXQgd2FzCiAJCWNob3Nlbi4KIAorbnVtX2dyYXRfYXJwCisKKwlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBncmF0dWl0b3VzIEFSUHMgdG8gYmUgaXNzdWVkIGFmdGVyIGEKKwlmYWlsb3ZlciBldmVudC4gIE9uZSBncmF0dWl0b3VzIEFSUCBpcyBpc3N1ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIKKwl0aGUgZmFpbG92ZXIsIHN1YnNlcXVlbnQgQVJQcyBhcmUgc2VudCBhdCBhIHJhdGUgb2Ygb25lIHBlciBsaW5rCisJbW9uaXRvciBpbnRlcnZhbCAoYXJwX2ludGVydmFsIG9yIG1paW1vbiwgd2hpY2hldmVyIGlzIGFjdGl2ZSkuCisKKwlUaGUgdmFsaWQgcmFuZ2UgaXMgMCAtIDI1NTsgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4gIFRoaXMgb3B0aW9uCisJYWZmZWN0cyBvbmx5IHRoZSBhY3RpdmUtYmFja3VwIG1vZGUuICBUaGlzIG9wdGlvbiB3YXMgYWRkZWQgZm9yCisJYm9uZGluZyB2ZXJzaW9uIDMuMy4wLgorCiBwcmltYXJ5CiAKIAlBIHN0cmluZyAoZXRoMCwgZXRoMiwgZXRjKSBzcGVjaWZ5aW5nIHdoaWNoIHNsYXZlIGlzIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RtOTAwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG05MDAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWRmM2RlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RtOTAwMC50eHQKQEAgLTAsMCArMSwxNjcgQEAKK0RNOTAwMCBOZXR3b3JrIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcywKKwkgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4gPGJlbi1saW51eEBmbHVmZi5vcmc+CisKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyBob3cgdG8gdXNlIHRoZSBETTkwMDAgcGxhdGZvcm0tZGV2aWNlIGJhc2VkIG5ldHdvcmsgZHJpdmVyCit0aGF0IGlzIGNvbnRhaW5lZCBpbiB0aGUgZmlsZXMgZHJpdmVycy9uZXQvZG05MDAwLmMgYW5kIGRyaXZlcnMvbmV0L2RtOTAwMC5oLgorCitUaGUgZHJpdmVyIHN1cHBvcnRzIHRocmVlIERNOTAwMCB2YXJpYW50cywgdGhlIERNOTAwMEUgd2hpY2ggaXMgdGhlIGZpcnN0IGNoaXAKK3N1cHBvcnRlZCBhcyB3ZWxsIGFzIHRoZSBuZXdlciBETTkwMDBBIGFuZCBETTkwMDBCIGRldmljZXMuIEl0IGlzIGN1cnJlbnRseQorbWFpbnRhaW5lZCBhbmQgdGVzdGVkIGJ5IEJlbiBEb29rcywgd2hvIHNob3VsZCBiZSBDQzogdG8gYW55IHBhdGNoZXMgZm9yIHRoaXMKK2RyaXZlci4KKworCitEZWZpbmluZyB0aGUgcGxhdGZvcm0gZGV2aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtaW5pbXVtIHNldCBvZiByZXNvdXJjZXMgYXR0YWNoZWQgdG8gdGhlIHBsYXRmb3JtIGRldmljZSBhcmUgYXMgZm9sbG93czoKKworICAgIDEpIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBhZGRyZXNzIHJlZ2lzdGVyCisgICAgMikgVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGRhdGEgcmVnaXN0ZXIKKyAgICAzKSBUaGUgSVJRIGxpbmUgdGhlIGRldmljZSdzIGludGVycnVwdCBwaW4gaXMgY29ubmVjdGVkIHRvLgorCitUaGVzZSByZXNvdXJjZXMgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGF0IG9yZGVyLCBhcyB0aGUgb3JkZXJpbmcgb2YgdGhlCit0d28gYWRkcmVzcyByZWdpb25zIGlzIGltcG9ydGFudCAodGhlIGRyaXZlciBleHBlY3RzIHRoZXNlIHRvIGJlIGFkZHJlc3MKK2FuZCB0aGVuIGRhdGEpLgorCitBbiBleGFtcGxlIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGlzOgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJhc3RfZG05a19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9DUzUgKyBCQVNUX1BBX0RNOTAwMCwKKwkJLmVuZCAgID0gUzNDMjQxMF9DUzUgKyBCQVNUX1BBX0RNOTAwMCArIDMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX0NTNSArIEJBU1RfUEFfRE05MDAwICsgMHg0MCwKKwkJLmVuZCAgID0gUzNDMjQxMF9DUzUgKyBCQVNUX1BBX0RNOTAwMCArIDB4NDAgKyAweDNmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX0RNOTAwMCwKKwkJLmVuZCAgID0gSVJRX0RNOTAwMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmFzdF9kZXZpY2VfZG05ayA9IHsKKwkubmFtZQkJPSAiZG05MDAwIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYmFzdF9kbTlrX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBiYXN0X2RtOWtfcmVzb3VyY2UsCit9OworCitOb3RlIHRoZSBzZXR0aW5nIG9mIHRoZSBJUlEgdHJpZ2dlciBmbGFnIGluIGJhc3RfZG05a19yZXNvdXJjZVsyXS5mbGFncywKK2FzIHRoaXMgd2lsbCBnZW5lcmF0ZSBhIHdhcm5pbmcgaWYgaXQgaXMgbm90IHByZXNlbnQuIFRoZSB0cmlnZ2VyIGZyb20KK3RoZSBmbGFncyBmaWVsZCB3aWxsIGJlIHBhc3NlZCB0byByZXF1ZXN0X2lycSgpIHdoZW4gcmVnaXN0ZXJpbmcgdGhlIElSUQoraGFuZGxlciB0byBlbnN1cmUgdGhhdCB0aGUgSVJRIGlzIHNldHVwIGNvcnJlY3RseS4KKworVGhpcyBzaG93cyBhIHR5cGljYWwgcGxhdGZvcm0gZGV2aWNlLCB3aXRob3V0IHRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uCitwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkLiBUaGUgbmV4dCBleGFtcGxlIHVzZXMgdGhlIHNhbWUgcmVzb3VyY2VzLCBidXQgYWRkcwordGhlIG9wdGlvbmFsIHBsYXRmb3JtIGRhdGEgdG8gcGFzcyBleHRyYSBjb25maWd1cmF0aW9uIGRhdGE6CisKK3N0YXRpYyBzdHJ1Y3QgZG05MDAwX3BsYXRfZGF0YSBiYXN0X2RtOWtfcGxhdGRhdGEgPSB7CisJLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiYXN0X2RldmljZV9kbTlrID0geworCS5uYW1lCQk9ICJkbTkwMDAiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShiYXN0X2RtOWtfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IGJhc3RfZG05a19yZXNvdXJjZSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmFzdF9kbTlrX3BsYXRkYXRhLAorCX0KK307CisKK1RoZSBwbGF0Zm9ybSBkYXRhIGlzIGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9kbTkwMDAuaCBhbmQgZGVzY3JpYmVkIGJlbG93LgorCisKK1BsYXRmb3JtIGRhdGEKKy0tLS0tLS0tLS0tLS0KKworRXh0cmEgcGxhdGZvcm0gZGF0YSBmb3IgdGhlIERNOTAwMCBjYW4gZGVzY3JpYmUgdGhlIElPIGJ1cyB3aWR0aCB0byB0aGUKK2RldmljZSwgd2hldGhlciBvciBub3QgYW4gZXh0ZXJuYWwgUEhZIGlzIGF0dGFjaGVkIHRvIHRoZSBkZXZpY2UgYW5kCit0aGUgYXZhaWxhYmlsaXR5IG9mIGFuIGV4dGVybmFsIGNvbmZpZ3VyYXRpb24gRUVQUk9NLgorCitUaGUgZmxhZ3MgZm9yIHRoZSBwbGF0Zm9ybSBkYXRhIC5mbGFncyBmaWVsZCBhcmUgYXMgZm9sbG93czoKKworRE05MDAwX1BMQVRGXzhCSVRPTkxZCisKKwlUaGUgSU8gc2hvdWxkIGJlIGRvbmUgd2l0aCA4Yml0IG9wZXJhdGlvbnMuCisKK0RNOTAwMF9QTEFURl8xNkJJVE9OTFkKKworCVRoZSBJTyBzaG91bGQgYmUgZG9uZSB3aXRoIDE2Yml0IG9wZXJhdGlvbnMuCisKK0RNOTAwMF9QTEFURl8zMkJJVE9OTFkKKworCVRoZSBJTyBzaG91bGQgYmUgZG9uZSB3aXRoIDMyYml0IG9wZXJhdGlvbnMuCisKK0RNOTAwMF9QTEFURl9FWFRfUEhZCisKKwlUaGUgY2hpcCBpcyBjb25uZWN0ZWQgdG8gYW4gZXh0ZXJuYWwgUEhZLgorCitETTkwMDBfUExBVEZfTk9fRUVQUk9NCisKKwlUaGlzIGNhbiBiZSB1c2VkIHRvIHNpZ25pZnkgdGhhdCB0aGUgYm9hcmQgZG9lcyBub3QgaGF2ZSBhbgorCUVFUFJPTSwgb3IgdGhhdCB0aGUgRUVQUk9NIHNob3VsZCBiZSBoaWRkZW4gZnJvbSB0aGUgdXNlci4KKworRE05MDAwX1BMQVRGX1NJTVBMRV9QSFkKKworCVN3aXRjaCB0byB1c2luZyB0aGUgc2ltcGxlciBQSFkgcG9sbGluZyBtZXRob2Qgd2hpY2ggZG9lcyBub3QKKwl0cnkgYW5kIHJlYWQgdGhlIE1JSSBQSFkgc3RhdGUgcmVndWxhcmx5LiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlCisJd2hlbiB1c2luZyB0aGUgaW50ZXJuYWwgUEhZLiBTZWUgdGhlIHNlY3Rpb24gb24gbGluayBzdGF0ZSBwb2xsaW5nCisJZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKwlUaGUgY29uZmlnIHN5bWJvbCBETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMLCBLY29uZmlnIGVudHJ5CisJIkZvcmNlIHNpbXBsZSBOU1IgYmFzZWQgUEhZIHBvbGxpbmciIGFsbG93cyB0aGlzIGZsYWcgdG8gYmUKKwlmb3JjZWQgb24gYXQgYnVpbGQgdGltZS4KKworCitQSFkgTGluayBzdGF0ZSBwb2xsaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIga2VlcHMgdHJhY2sgb2YgdGhlIGxpbmsgc3RhdGUgYW5kIGluZm9ybXMgdGhlIG5ldHdvcmsgY29yZQorYWJvdXQgbGluayAoY2FycmllcikgYXZhaWxhYmxpbHR5LiBUaGlzIGlzIG1hbmFnZWQgYnkgc2V2ZXJhbCBtZXRob2RzCitkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24gb2YgdGhlIGNoaXAgYW5kIG9uIHdoaWNoIFBIWSBpcyBiZWluZyB1c2VkLgorCitGb3IgdGhlIGludGVybmFsIFBIWSwgdGhlIG9yaWdpbmFsIChhbmQgY3VycmVudGx5IGRlZmF1bHQpIG1ldGhvZCBpcwordG8gcmVhZCB0aGUgTUlJIHN0YXRlLCBlaXRoZXIgd2hlbiB0aGUgc3RhdHVzIGNoYW5nZXMgaWYgd2UgaGF2ZSB0aGUKK25lY2Vzc2FyeSBpbnRlcnJ1cHQgc3VwcG9ydCBpbiB0aGUgY2hpcCBvciBldmVyeSB0d28gc2Vjb25kcyB2aWEgYQorcGVyaW9kaWMgdGltZXIuCisKK1RvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgZm9yIHRoZSBpbnRlcm5hbCBQSFksIHRoZXJlIGlzIG5vdyB0aGUgb3B0aW9uCitvZiB1c2luZyB0aGUgRE05MDAwX0ZPUkNFX1NJTVBMRV9QSFlfUE9MTCBjb25maWcsIG9yIERNOTAwMF9QTEFURl9TSU1QTEVfUEhZCitwbGF0Zm9ybSBkYXRhIG9wdGlvbiB0byByZWFkIHRoZSBzdW1tYXJ5IGluZm9ybWF0aW9uIHdpdGhvdXQgdGhlCitleHBlbnNpdmUgTUlJIGFjY2Vzc2VzLiBUaGlzIG1ldGhvZCBpcyBmYXN0ZXIsIGJ1dCBkb2VzIG5vdCBwcmludAorYXMgbXVjaCBpbmZvcm1hdGlvbi4KKworV2hlbiB1c2luZyBhbiBleHRlcm5hbCBQSFksIHRoZSBkcml2ZXIgY3VycmVudGx5IGhhcyB0byBwb2xsIHRoZSBNSUkKK2xpbmsgc3RhdHVzIGFzIHRoZXJlIGlzIG5vIG1ldGhvZCBmb3IgZ2V0dGluZyBhbiBpbnRlcnJ1cHQgb24gbGluayBjaGFuZ2UuCisKKworRE05MDAwQSAvIERNOTAwMEIKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNoaXBzIGFyZSBmdW5jdGlvbmFsbHkgc2ltaWxhciB0byB0aGUgRE05MDAwRSBhbmQgYXJlIHN1cHBvcnRlZCBlYXNpbHkKK2J5IHRoZSBzYW1lIGRyaXZlci4gVGhlIGZlYXR1cmVzIGFyZToKKworICAgMSkgSW50ZXJydXB0IG9uIGludGVybmFsIFBIWSBzdGF0ZSBjaGFuZ2UuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcGVyaW9kaWMKKyAgICAgIHBvbGxpbmcgb2YgdGhlIFBIWSBzdGF0dXMgbWF5IGJlIGRpc2FibGVkIG9uIHRoZXNlIGRldmljZXMgd2hlbiB1c2luZworICAgICAgdGhlIGludGVybmFsIFBIWS4KKworICAgMikgVENQL1VEUCBjaGVja3N1bSBvZmZsb2FkaW5nLCB3aGljaCB0aGUgZHJpdmVyIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0LgorCisKK2V0aHRvb2wKKy0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyB0aGUgZXRodG9vbCBpbnRlcmZhY2UgZm9yIGFjY2VzcyB0byB0aGUgZHJpdmVyCitzdGF0ZSBpbmZvcm1hdGlvbiwgdGhlIFBIWSBzdGF0ZSBhbmQgdGhlIEVFUFJPTS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMDAudHh0CmluZGV4IDYxYjE3MWMuLjJkZjcxODYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dApAQCAtNTEzLDIxICs1MTMsMTEgQEAKICAgSW50ZWwoUikgUFJPLzEwMDAgUFQgRHVhbCBQb3J0IFNlcnZlciBDb25uZWN0aW9uCiAgIEludGVsKFIpIFBSTy8xMDAwIFBUIER1YWwgUG9ydCBTZXJ2ZXIgQWRhcHRlcgogICBJbnRlbChSKSBQUk8vMTAwMCBQRiBEdWFsIFBvcnQgU2VydmVyIEFkYXB0ZXIKLSAgSW50ZWwoUikgUFJPLzEwMDAgUFQgUXVhZCBQb3J0IFNlcnZlciBBZGFwdGVyIAorICBJbnRlbChSKSBQUk8vMTAwMCBQVCBRdWFkIFBvcnQgU2VydmVyIEFkYXB0ZXIKIAogICBOQVBJCiAgIC0tLS0KLSAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGUxMDAwIGRyaXZlci4gIE5BUEkgaXMgZW5hYmxlZAotICBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUga2VybmVsLiAgVG8gb3ZlcnJpZGUKLSAgdGhlIGRlZmF1bHQsIHVzZSB0aGUgZm9sbG93aW5nIGNvbXBpbGUtdGltZSBmbGFncy4KLQotICBUbyBlbmFibGUgTkFQSSwgY29tcGlsZSB0aGUgZHJpdmVyIG1vZHVsZSwgcGFzc2luZyBpbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgotCi0gICAgICAgbWFrZSBDRkxBR1NfRVhUUkE9LURFMTAwMF9OQVBJIGluc3RhbGwKLQotICBUbyBkaXNhYmxlIE5BUEksIGNvbXBpbGUgdGhlIGRyaXZlciBtb2R1bGUsIHBhc3NpbmcgaW4gYSBjb25maWd1cmF0aW9uIG9wdGlvbjoKLQotICAgICAgIG1ha2UgQ0ZMQUdTX0VYVFJBPS1ERTEwMDBfTk9fTkFQSSBpbnN0YWxsCisgIE5BUEkgKFJ4IHBvbGxpbmcgbW9kZSkgaXMgZW5hYmxlZCBpbiB0aGUgZTEwMDAgZHJpdmVyLgogCiAgIFNlZSB3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BUEkuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggOTQ2YjY2ZS4uZDg0OTMyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTU1MSw4ICs1NTEsOSBAQAogaWNtcF9yYXRlbGltaXQgLSBJTlRFR0VSCiAJTGltaXQgdGhlIG1heGltYWwgcmF0ZXMgZm9yIHNlbmRpbmcgSUNNUCBwYWNrZXRzIHdob3NlIHR5cGUgbWF0Y2hlcwogCWljbXBfcmF0ZW1hc2sgKHNlZSBiZWxvdykgdG8gc3BlY2lmaWMgdGFyZ2V0cy4KLQkwIHRvIGRpc2FibGUgYW55IGxpbWl0aW5nLCBvdGhlcndpc2UgdGhlIG1heGltYWwgcmF0ZSBpbiBqaWZmaWVzKDEpCi0JRGVmYXVsdDogMTAwCisJMCB0byBkaXNhYmxlIGFueSBsaW1pdGluZywKKwlvdGhlcndpc2UgdGhlIG1pbmltYWwgc3BhY2UgYmV0d2VlbiByZXNwb25zZXMgaW4gbWlsbGlzZWNvbmRzLgorCURlZmF1bHQ6IDEwMDAKIAogaWNtcF9yYXRlbWFzayAtIElOVEVHRVIKIAlNYXNrIG1hZGUgb2YgSUNNUCB0eXBlcyBmb3Igd2hpY2ggcmF0ZXMgYXJlIGJlaW5nIGxpbWl0ZWQuCkBAIC0xMDIzLDExICsxMDI0LDIzIEBACiAJYXV0b2NvbmZpZ3VyZWQgYWRkcmVzc2VzLgogCURlZmF1bHQ6IDE2CiAKK2Rpc2FibGVfaXB2NiAtIEJPT0xFQU4KKwlEaXNhYmxlIElQdjYgb3BlcmF0aW9uLgorCURlZmF1bHQ6IEZBTFNFIChlbmFibGUgSVB2NiBvcGVyYXRpb24pCisKK2FjY2VwdF9kYWQgLSBJTlRFR0VSCisJV2hldGhlciB0byBhY2NlcHQgREFEIChEdXBsaWNhdGUgQWRkcmVzcyBEZXRlY3Rpb24pLgorCTA6IERpc2FibGUgREFECisJMTogRW5hYmxlIERBRCAoZGVmYXVsdCkKKwkyOiBFbmFibGUgREFELCBhbmQgZGlzYWJsZSBJUHY2IG9wZXJhdGlvbiBpZiBNQUMtYmFzZWQgZHVwbGljYXRlCisJICAgbGluay1sb2NhbCBhZGRyZXNzIGhhcyBiZWVuIGZvdW5kLgorCiBpY21wLyo6CiByYXRlbGltaXQgLSBJTlRFR0VSCiAJTGltaXQgdGhlIG1heGltYWwgcmF0ZXMgZm9yIHNlbmRpbmcgSUNNUHY2IHBhY2tldHMuCi0JMCB0byBkaXNhYmxlIGFueSBsaW1pdGluZywgb3RoZXJ3aXNlIHRoZSBtYXhpbWFsIHJhdGUgaW4gamlmZmllcygxKQotCURlZmF1bHQ6IDEwMAorCTAgdG8gZGlzYWJsZSBhbnkgbGltaXRpbmcsCisJb3RoZXJ3aXNlIHRoZSBtaW5pbWFsIHNwYWNlIGJldHdlZW4gcmVzcG9uc2VzIGluIG1pbGxpc2Vjb25kcy4KKwlEZWZhdWx0OiAxMDAwCiAKIAogSVB2NiBVcGRhdGUgYnk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYi50eHQKaW5kZXggN2M5ODI3Ny4uYTBkMGZmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiLnR4dApAQCAtMSw3ICsxLDcgQEAKLUxpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMEdiRSBGYW1pbHkgb2YgQWRhcHRlcnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0xpbnV4IEJhc2UgRHJpdmVyIGZvciAxMCBHaWdhYml0IEludGVsKFIpIE5ldHdvcmsgQ29ubmVjdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1Ob3ZlbWJlciAxNywgMjAwNAorT2N0b2JlciA5LCAyMDA3CiAKIAogQ29udGVudHMKQEAgLTksOTQgKzksMTUxIEBACiAKIC0gSW4gVGhpcyBSZWxlYXNlCiAtIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorLSBCdWlsZGluZyBhbmQgSW5zdGFsbGF0aW9uCiAtIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCiAtIEltcHJvdmluZyBQZXJmb3JtYW5jZQorLSBBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCistIEtub3duIElzc3Vlcy9Ucm91Ymxlc2hvb3RpbmcKIC0gU3VwcG9ydAogCiAKKwogSW4gVGhpcyBSZWxlYXNlCiA9PT09PT09PT09PT09PT0KIAotVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwR2JFIEZhbWlseSAKLW9mIEFkYXB0ZXJzLCB2ZXJzaW9uIDEuMC54LiAgCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBpeGdiIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgMTAgR2lnYWJpdCBJbnRlbChSKQorTmV0d29yayBDb25uZWN0aW9uLiAgVGhpcyBkcml2ZXIgaW5jbHVkZXMgc3VwcG9ydCBmb3IgSXRhbml1bShSKTItYmFzZWQKK3N5c3RlbXMuCiAKLUZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIAotc3VwcGxpZWQgd2l0aCB5b3VyIEludGVsIFBSTy8xMEdiRSBhZGFwdGVyLiBBbGwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGxpc3RlZCAKLWFwcGx5IHRvIHVzZSB3aXRoIExpbnV4LgorRm9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24KK3N1cHBsaWVkIHdpdGggeW91ciAxMCBHaWdhYml0IGFkYXB0ZXIuICBBbGwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGxpc3RlZCBhcHBseQordG8gdXNlIHdpdGggTGludXguCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGlzIGtlcm5lbDoKKyAtIE5hdGl2ZSBWTEFOcworIC0gQ2hhbm5lbCBCb25kaW5nICh0ZWFtaW5nKQorIC0gU05NUAorCitDaGFubmVsIEJvbmRpbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2U6CisvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisKK1RoZSBkcml2ZXIgaW5mb3JtYXRpb24gcHJldmlvdXNseSBkaXNwbGF5ZWQgaW4gdGhlIC9wcm9jIGZpbGVzeXN0ZW0gaXMgbm90CitzdXBwb3J0ZWQgaW4gdGhpcyByZWxlYXNlLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgZXRodG9vbCAodmVyc2lvbiAxLjYKK29yIGxhdGVyKSwgbHNwY2ksIGFuZCBpZmNvbmZpZyB0byBvYnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24uCisKK0luc3RydWN0aW9ucyBvbiB1cGRhdGluZyBldGh0b29sIGNhbiBiZSBmb3VuZCBpbiB0aGUgc2VjdGlvbiAiQWRkaXRpb25hbAorQ29uZmlndXJhdGlvbnMiIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCisKIAogSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotVG8gdmVyaWZ5IHlvdXIgSW50ZWwgYWRhcHRlciBpcyBzdXBwb3J0ZWQsIGZpbmQgdGhlIGJvYXJkIElEIG51bWJlciBvbiB0aGUgCi1hZGFwdGVyLiBMb29rIGZvciBhIGxhYmVsIHRoYXQgaGFzIGEgYmFyY29kZSBhbmQgYSBudW1iZXIgaW4gdGhlIGZvcm1hdCAgCi1BMTIzNDUtMDAxLiAKK1RoZSBmb2xsb3dpbmcgSW50ZWwgbmV0d29yayBhZGFwdGVycyBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBkcml2ZXJzIGluIHRoaXMKK3JlbGVhc2U6CiAKLVVzZSB0aGUgYWJvdmUgaW5mb3JtYXRpb24gYW5kIHRoZSBBZGFwdGVyICYgRHJpdmVyIElEIEd1aWRlIGF0OgorQ29udHJvbGxlciAgQWRhcHRlciBOYW1lICAgICAgICAgICAgICAgICBQaHlzaWNhbCBMYXllcgorLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLQorODI1OTdFWCAgICAgSW50ZWwoUikgUFJPLzEwR2JFIExSL1NSL0NYNCAxMEcgQmFzZS1MUiAoMTMxMCBubSBvcHRpY2FsIGZpYmVyKQorICAgICAgICAgICAgU2VydmVyIEFkYXB0ZXJzICAgICAgICAgICAgICAxMEcgQmFzZS1TUiAoODUwIG5tIG9wdGljYWwgZmliZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwRyBCYXNlLUNYNCh0d2luLWF4aWFsIGNvcHBlciBjYWJsaW5nKQogCi0gIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvYWRhcHRlci9wcm8xMDAvMjEzOTcuaHRtCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciAmCitEcml2ZXIgSUQgR3VpZGUgYXQ6CiAKLUZvciB0aGUgbGF0ZXN0IEludGVsIG5ldHdvcmsgZHJpdmVycyBmb3IgTGludXgsIGdvIHRvOgorICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvc2IvQ1MtMDEyOTA0Lmh0bQogCi0gICAgaHR0cDovL2Rvd25sb2FkZmluZGVyLmludGVsLmNvbS9zY3JpcHRzLWRmL3N1cHBvcnRfaW50ZWwuYXNwCisKK0J1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2VsZWN0IG0gZm9yICJJbnRlbChSKSBQUk8vMTBHYkUgc3VwcG9ydCIgbG9jYXRlZCBhdDoKKyAgICAgIExvY2F0aW9uOgorICAgICAgICAtPiBEZXZpY2UgRHJpdmVycworICAgICAgICAgIC0+IE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQgKE5FVERFVklDRVMgWz15XSkKKyAgICAgICAgICAgIC0+IEV0aGVybmV0ICgxMDAwMCBNYml0KSAoTkVUREVWXzEwMDAwIFs9eV0pCisxLiBtYWtlIG1vZHVsZXMgJiYgbWFrZSBtb2R1bGVzX2luc3RhbGwKKworMi4gTG9hZCB0aGUgbW9kdWxlOgorCivCoMKgwqDCoG1vZHByb2JlIGl4Z2IgPHBhcmFtZXRlcj49PHZhbHVlPgorCisgICBUaGUgaW5zbW9kIGNvbW1hbmQgY2FuIGJlIHVzZWQgaWYgdGhlIGZ1bGwKKyAgIHBhdGggdG8gdGhlIGRyaXZlciBtb2R1bGUgaXMgc3BlY2lmaWVkLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgaW5zbW9kIC9saWIvbW9kdWxlcy88S0VSTkVMIFZFUlNJT04+L2tlcm5lbC9kcml2ZXJzL25ldC9peGdiL2l4Z2Iua28KKworICAgV2l0aCAyLjYgYmFzZWQga2VybmVscyBhbHNvIG1ha2Ugc3VyZSB0aGF0IG9sZGVyIGl4Z2IgZHJpdmVycyBhcmUKKyAgIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsLCBiZWZvcmUgbG9hZGluZyB0aGUgbmV3IG1vZHVsZToKKworICAgICBybW1vZCBpeGdiOyBtb2Rwcm9iZSBpeGdiCisKKzMuIEFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoZSBpbnRlcmZhY2UgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZywgd2hlcmUKKyAgIHggaXMgdGhlIGludGVyZmFjZSBudW1iZXI6CisKKyAgICAgaWZjb25maWcgZXRoeCA8SVBfYWRkcmVzcz4KKworNC4gVmVyaWZ5IHRoYXQgdGhlIGludGVyZmFjZSB3b3Jrcy4gRW50ZXIgdGhlIGZvbGxvd2luZywgd2hlcmUgPElQX2FkZHJlc3M+CisgICBpcyB0aGUgSVAgYWRkcmVzcyBmb3IgYW5vdGhlciBtYWNoaW5lIG9uIHRoZSBzYW1lIHN1Ym5ldCBhcyB0aGUgaW50ZXJmYWNlCisgICB0aGF0IGlzIGJlaW5nIHRlc3RlZDoKKworICAgICBwaW5nICA8SVBfYWRkcmVzcz4KKwogCiBDb21tYW5kIExpbmUgUGFyYW1ldGVycwogPT09PT09PT09PT09PT09PT09PT09PT0KIAotSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgdGhlICBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgCi11c2VkIGJ5IGVudGVyaW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBtb2Rwcm9iZSBvciBpbnNtb2QgY29tbWFuZAotdXNpbmcgdGhpcyBzeW50YXg6CitJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLCB0aGUgIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZQordXNlZCBieSBlbnRlcmluZyB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgbW9kcHJvYmUgY29tbWFuZCB1c2luZwordGhpcyBzeW50YXg6CiAKICAgICAgbW9kcHJvYmUgaXhnYiBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCiAKLSAgICAgaW5zbW9kIGl4Z2IgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXQorRm9yIGV4YW1wbGUsIHdpdGggdHdvIDEwR2JFIFBDSSBhZGFwdGVycywgZW50ZXJpbmc6CiAKLUZvciBleGFtcGxlLCB3aXRoIHR3byBQUk8vMTBHYkUgUENJIGFkYXB0ZXJzLCBlbnRlcmluZzoKKyAgICAgbW9kcHJvYmUgaXhnYiBUeERlc2NyaXB0b3JzPTgwLDEyOAogCi0gICAgaW5zbW9kIGl4Z2IgVHhEZXNjcmlwdG9ycz04MCwxMjgKLQotbG9hZHMgdGhlIGl4Z2IgZHJpdmVyIHdpdGggODAgVFggcmVzb3VyY2VzIGZvciB0aGUgZmlyc3QgYWRhcHRlciBhbmQgMTI4IFRYIAorbG9hZHMgdGhlIGl4Z2IgZHJpdmVyIHdpdGggODAgVFggcmVzb3VyY2VzIGZvciB0aGUgZmlyc3QgYWRhcHRlciBhbmQgMTI4IFRYCiByZXNvdXJjZXMgZm9yIHRoZSBzZWNvbmQgYWRhcHRlci4KIAogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyIGlzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc2V0dGluZywKLXVubGVzcyBvdGhlcndpc2Ugbm90ZWQuIEFsc28sIGlmIHRoZSBkcml2ZXIgaXMgc3RhdGljYWxseSBidWlsdCBpbnRvIHRoZQota2VybmVsLCB0aGUgZHJpdmVyIGlzIGxvYWRlZCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBwYXJhbWV0ZXJzLgotRXRodG9vbCBjYW4gYmUgdXNlZCB0byBjaGFuZ2Ugc29tZSBvZiB0aGUgcGFyYW1ldGVycyBhdCBydW50aW1lLgordW5sZXNzIG90aGVyd2lzZSBub3RlZC4KIAogRmxvd0NvbnRyb2wKIFZhbGlkIFJhbmdlOiAwLTMgKDA9bm9uZSwgMT1SeCBvbmx5LCAyPVR4IG9ubHksIDM9UngmVHgpCiBEZWZhdWx0OiBSZWFkIGZyb20gdGhlIEVFUFJPTQotICAgICAgICAgSWYgRUVQUk9NIGlzIG5vdCBkZXRlY3RlZCwgZGVmYXVsdCBpcyAzCi0gICAgVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGF1dG9tYXRpYyBnZW5lcmF0aW9uKFR4KSBhbmQgcmVzcG9uc2UoUngpIHRvIAotICAgIEV0aGVybmV0IFBBVVNFIGZyYW1lcy4KKyAgICAgICAgIElmIEVFUFJPTSBpcyBub3QgZGV0ZWN0ZWQsIGRlZmF1bHQgaXMgMQorICAgIFRoaXMgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbihUeCkgYW5kIHJlc3BvbnNlKFJ4KSB0bworICAgIEV0aGVybmV0IFBBVVNFIGZyYW1lcy4gIFRoZXJlIGFyZSBoYXJkd2FyZSBidWdzIGFzc29jaWF0ZWQgd2l0aCBlbmFibGluZworICAgIFR4IGZsb3cgY29udHJvbCBzbyBiZXdhcmUuCiAKIFJ4RGVzY3JpcHRvcnMKIFZhbGlkIFJhbmdlOiA2NC01MTIKIERlZmF1bHQgVmFsdWU6IDUxMgotICAgIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLiAKLSAgICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYnVmZmVyIG1vcmUgaW5jb21pbmcgcGFja2V0cy4gCi0gICAgRWFjaCBkZXNjcmlwdG9yIGlzIDE2IGJ5dGVzLiAgQSByZWNlaXZlIGJ1ZmZlciBpcyBhbHNvIGFsbG9jYXRlZCBmb3IgCi0gICAgZWFjaCBkZXNjcmlwdG9yIGFuZCBjYW4gYmUgZWl0aGVyIDIwNDgsIDQwNTYsIDgxOTIsIG9yIDE2Mzg0IGJ5dGVzLCAKLSAgICBkZXBlbmRpbmcgb24gdGhlIE1UVSBzZXR0aW5nLiBXaGVuIHRoZSBNVFUgc2l6ZSBpcyAxNTAwIG9yIGxlc3MsIHRoZSAKKyAgICBUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4KKyAgICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYnVmZmVyIG1vcmUgaW5jb21pbmcgcGFja2V0cy4KKyAgICBFYWNoIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuICBBIHJlY2VpdmUgYnVmZmVyIGlzIGFsc28gYWxsb2NhdGVkIGZvcgorICAgIGVhY2ggZGVzY3JpcHRvciBhbmQgY2FuIGJlIGVpdGhlciAyMDQ4LCA0MDU2LCA4MTkyLCBvciAxNjM4NCBieXRlcywKKyAgICBkZXBlbmRpbmcgb24gdGhlIE1UVSBzZXR0aW5nLiAgV2hlbiB0aGUgTVRVIHNpemUgaXMgMTUwMCBvciBsZXNzLCB0aGUKICAgICByZWNlaXZlIGJ1ZmZlciBzaXplIGlzIDIwNDggYnl0ZXMuIFdoZW4gdGhlIE1UVSBpcyBncmVhdGVyIHRoYW4gMTUwMCB0aGUKLSAgICByZWNlaXZlIGJ1ZmZlciBzaXplIHdpbGwgYmUgZWl0aGVyIDQwNTYsIDgxOTIsIG9yIDE2Mzg0IGJ5dGVzLiBUaGUgCisgICAgcmVjZWl2ZSBidWZmZXIgc2l6ZSB3aWxsIGJlIGVpdGhlciA0MDU2LCA4MTkyLCBvciAxNjM4NCBieXRlcy4gIFRoZQogICAgIG1heGltdW0gTVRVIHNpemUgaXMgMTYxMTQuCiAKIFJ4SW50RGVsYXkKIFZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKLURlZmF1bHQgVmFsdWU6IDYKLSAgICBUaGlzIHZhbHVlIGRlbGF5cyB0aGUgZ2VuZXJhdGlvbiBvZiByZWNlaXZlIGludGVycnVwdHMgaW4gdW5pdHMgb2YgCi0gICAgMC44MTkyIG1pY3Jvc2Vjb25kcy4gIFJlY2VpdmUgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUgCi0gICAgZWZmaWNpZW5jeSBpZiBwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiBJbmNyZWFzaW5nIAotICAgIHRoaXMgdmFsdWUgYWRkcyBleHRyYSBsYXRlbmN5IHRvIGZyYW1lIHJlY2VwdGlvbiBhbmQgY2FuIGVuZCB1cCAKLSAgICBkZWNyZWFzaW5nIHRoZSB0aHJvdWdocHV0IG9mIFRDUCB0cmFmZmljLiBJZiB0aGUgc3lzdGVtIGlzIHJlcG9ydGluZyAKLSAgICBkcm9wcGVkIHJlY2VpdmVzLCB0aGlzIHZhbHVlIG1heSBiZSBzZXQgdG9vIGhpZ2gsIGNhdXNpbmcgdGhlIGRyaXZlciB0byAKK0RlZmF1bHQgVmFsdWU6IDcyCisgICAgVGhpcyB2YWx1ZSBkZWxheXMgdGhlIGdlbmVyYXRpb24gb2YgcmVjZWl2ZSBpbnRlcnJ1cHRzIGluIHVuaXRzIG9mCisgICAgMC44MTkyIG1pY3Jvc2Vjb25kcy4gIFJlY2VpdmUgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUKKyAgICBlZmZpY2llbmN5IGlmIHByb3Blcmx5IHR1bmVkIGZvciBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMuICBJbmNyZWFzaW5nCisgICAgdGhpcyB2YWx1ZSBhZGRzIGV4dHJhIGxhdGVuY3kgdG8gZnJhbWUgcmVjZXB0aW9uIGFuZCBjYW4gZW5kIHVwCisgICAgZGVjcmVhc2luZyB0aGUgdGhyb3VnaHB1dCBvZiBUQ1AgdHJhZmZpYy4gIElmIHRoZSBzeXN0ZW0gaXMgcmVwb3J0aW5nCisgICAgZHJvcHBlZCByZWNlaXZlcywgdGhpcyB2YWx1ZSBtYXkgYmUgc2V0IHRvbyBoaWdoLCBjYXVzaW5nIHRoZSBkcml2ZXIgdG8KICAgICBydW4gb3V0IG9mIGF2YWlsYWJsZSByZWNlaXZlIGRlc2NyaXB0b3JzLgogCiBUeERlc2NyaXB0b3JzCiBWYWxpZCBSYW5nZTogNjQtNDA5NgogRGVmYXVsdCBWYWx1ZTogMjU2CiAgICAgVGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0IGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLgotICAgIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBxdWV1ZSBtb3JlIHRyYW5zbWl0cy4gRWFjaCAKKyAgICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcXVldWUgbW9yZSB0cmFuc21pdHMuICBFYWNoCiAgICAgZGVzY3JpcHRvciBpcyAxNiBieXRlcy4KIAogWHN1bVJYCkBAIC0xMDUsNTEgKzE2Miw0OSBAQAogICAgIEEgdmFsdWUgb2YgJzEnIGluZGljYXRlcyB0aGF0IHRoZSBkcml2ZXIgc2hvdWxkIGVuYWJsZSBJUCBjaGVja3N1bQogICAgIG9mZmxvYWQgZm9yIHJlY2VpdmVkIHBhY2tldHMgKGJvdGggVURQIGFuZCBUQ1ApIHRvIHRoZSBhZGFwdGVyIGhhcmR3YXJlLgogCi1Yc3VtVFgKLVZhbGlkIFJhbmdlOiAwLTEKLURlZmF1bHQgVmFsdWU6IDEKLSAgICBBIHZhbHVlIG9mICcxJyBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJpdmVyIHNob3VsZCBlbmFibGUgSVAgY2hlY2tzdW0KLSAgICBvZmZsb2FkIGZvciB0cmFuc21pdHRlZCBwYWNrZXRzIChib3RoIFVEUCBhbmQgVENQKSB0byB0aGUgYWRhcHRlciAKLSAgICBoYXJkd2FyZS4KIAogSW1wcm92aW5nIFBlcmZvcm1hbmNlCiA9PT09PT09PT09PT09PT09PT09PT0KIAotV2l0aCB0aGUgSW50ZWwgUFJPLzEwIEdiRSBhZGFwdGVyLCB0aGUgZGVmYXVsdCBMaW51eCBjb25maWd1cmF0aW9uIHdpbGwgdmVyeSAKLWxpa2VseSBsaW1pdCB0aGUgdG90YWwgYXZhaWxhYmxlIHRocm91Z2hwdXQgYXJ0aWZpY2lhbGx5LiAgVGhlcmUgaXMgYSBzZXQgb2YgCi10aGluZ3MgdGhhdCB3aGVuIGFwcGxpZWQgdG9nZXRoZXIgaW5jcmVhc2UgdGhlIGFiaWxpdHkgb2YgTGludXggdG8gdHJhbnNtaXQgCi1hbmQgcmVjZWl2ZSBkYXRhLiAgVGhlIGZvbGxvd2luZyBlbmhhbmNlbWVudHMgd2VyZSBvcmlnaW5hbGx5IGFjcXVpcmVkIGZyb20KLXNldHRpbmdzIHB1Ymxpc2hlZCBhdCBodHRwOi8vd3d3LnNwZWMub3JnL3dlYjk5IGZvciB2YXJpb3VzIHN1Ym1pdHRlZCByZXN1bHRzIAotdXNpbmcgTGludXguCitXaXRoIHRoZSAxMCBHaWdhYml0IHNlcnZlciBhZGFwdGVycywgdGhlIGRlZmF1bHQgTGludXggY29uZmlndXJhdGlvbiB3aWxsCit2ZXJ5IGxpa2VseSBsaW1pdCB0aGUgdG90YWwgYXZhaWxhYmxlIHRocm91Z2hwdXQgYXJ0aWZpY2lhbGx5LiAgVGhlcmUgaXMgYSBzZXQKK29mIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB0aGF0LCB3aGVuIGFwcGxpZWQgdG9nZXRoZXIsIHdpbGwgaW5jcmVhc2UgdGhlIGFiaWxpdHkKK29mIExpbnV4IHRvIHRyYW5zbWl0IGFuZCByZWNlaXZlIGRhdGEuICBUaGUgZm9sbG93aW5nIGVuaGFuY2VtZW50cyB3ZXJlCitvcmlnaW5hbGx5IGFjcXVpcmVkIGZyb20gc2V0dGluZ3MgcHVibGlzaGVkIGF0IGh0dHA6Ly93d3cuc3BlYy5vcmcvd2ViOTkvIGZvcgordmFyaW91cyBzdWJtaXR0ZWQgcmVzdWx0cyB1c2luZyBMaW51eC4KIAotTk9URTogVGhlc2UgY2hhbmdlcyBhcmUgb25seSBzdWdnZXN0aW9ucywgYW5kIHNlcnZlIGFzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIAotdHVuaW5nIHlvdXIgbmV0d29yayBwZXJmb3JtYW5jZS4KK05PVEU6IFRoZXNlIGNoYW5nZXMgYXJlIG9ubHkgc3VnZ2VzdGlvbnMsIGFuZCBzZXJ2ZSBhcyBhIHN0YXJ0aW5nIHBvaW50IGZvcgorICAgICAgdHVuaW5nIHlvdXIgbmV0d29yayBwZXJmb3JtYW5jZS4KIAogVGhlIGNoYW5nZXMgYXJlIG1hZGUgaW4gdGhyZWUgbWFqb3Igd2F5cywgbGlzdGVkIGluIG9yZGVyIG9mIGdyZWF0ZXN0IGVmZmVjdDoKLS0gVXNlIGlmY29uZmlnIHRvIG1vZGlmeSB0aGUgbXR1IChtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0KSBhbmQgdGhlIHR4cXVldWVsZW4gCistIFVzZSBpZmNvbmZpZyB0byBtb2RpZnkgdGhlIG10dSAobWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCkgYW5kIHRoZSB0eHF1ZXVlbGVuCiAgIHBhcmFtZXRlci4KIC0gVXNlIHN5c2N0bCB0byBtb2RpZnkgL3Byb2MgcGFyYW1ldGVycyAoZXNzZW50aWFsbHkga2VybmVsIHR1bmluZykKLS0gVXNlIHNldHBjaSB0byBtb2RpZnkgdGhlIE1NUkJDIGZpZWxkIGluIFBDSS1YIGNvbmZpZ3VyYXRpb24gc3BhY2UgdG8gaW5jcmVhc2UgCistIFVzZSBzZXRwY2kgdG8gbW9kaWZ5IHRoZSBNTVJCQyBmaWVsZCBpbiBQQ0ktWCBjb25maWd1cmF0aW9uIHNwYWNlIHRvIGluY3JlYXNlCiAgIHRyYW5zbWl0IGJ1cnN0IGxlbmd0aHMgb24gdGhlIGJ1cy4KIAotTk9URTogc2V0cGNpIG1vZGlmaWVzIHRoZSBhZGFwdGVyJ3MgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgdG8gYWxsb3cgaXQgdG8gcmVhZCAKLXVwIHRvIDRrIGJ5dGVzIGF0IGEgdGltZSAoZm9yIHRyYW5zbWl0cykuICBIb3dldmVyLCBmb3Igc29tZSBzeXN0ZW1zIHRoZSAKLWJlaGF2aW9yIGFmdGVyIG1vZGlmeWluZyB0aGlzIHJlZ2lzdGVyIG1heSBiZSB1bmRlZmluZWQgKHBvc3NpYmx5IGVycm9ycyBvZiBzb21lIAota2luZCkuIEEgcG93ZXItY3ljbGUsIGhhcmQgcmVzZXQgb3IgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBlNiByZWdpc3RlciBiYWNrIHRvIAotMjIgKHNldHBjaSAtZCA4MDg2OjEwNDggZTYuYj0yMikgbWF5IGJlIHJlcXVpcmVkIHRvIGdldCBiYWNrIHRvIGEgc3RhYmxlIAotY29uZmlndXJhdGlvbi4KK05PVEU6IHNldHBjaSBtb2RpZmllcyB0aGUgYWRhcHRlcidzIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHRvIGFsbG93IGl0IHRvIHJlYWQKK3VwIHRvIDRrIGJ5dGVzIGF0IGEgdGltZSAoZm9yIHRyYW5zbWl0cykuICBIb3dldmVyLCBmb3Igc29tZSBzeXN0ZW1zIHRoZQorYmVoYXZpb3IgYWZ0ZXIgbW9kaWZ5aW5nIHRoaXMgcmVnaXN0ZXIgbWF5IGJlIHVuZGVmaW5lZCAocG9zc2libHkgZXJyb3JzIG9mCitzb21lIGtpbmQpLiAgQSBwb3dlci1jeWNsZSwgaGFyZCByZXNldCBvciBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGU2IHJlZ2lzdGVyCitiYWNrIHRvIDIyIChzZXRwY2kgLWQgODA4NjoxYTQ4IGU2LmI9MjIpIG1heSBiZSByZXF1aXJlZCB0byBnZXQgYmFjayB0byBhCitzdGFibGUgY29uZmlndXJhdGlvbi4KIAogLSBDT1BZIHRoZXNlIGxpbmVzIGFuZCBwYXN0ZSB0aGVtIGludG8gaXhnYl9wZXJmLnNoOgogIyEvYmluL2Jhc2gKLWVjaG8gImNvbmZpZ3VyaW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgLCBlZGl0IHRoaXMgZmlsZSB0byBjaGFuZ2UgdGhlIGludGVyZmFjZSIKK2VjaG8gImNvbmZpZ3VyaW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgLCBlZGl0IHRoaXMgZmlsZSB0byBjaGFuZ2UgdGhlIGludGVyZmFjZQorb3IgZGV2aWNlIElEIG9mIDEwR2JFIGNhcmQiCiAjIHNldCBtbXJiYyB0byA0ayByZWFkcywgbW9kaWZ5IG9ubHkgSW50ZWwgMTBHYkUgZGV2aWNlIElEcwotc2V0cGNpIC1kIDgwODY6MTA0OCBlNi5iPTJlCi0jIHNldCB0aGUgTVRVIChtYXggdHJhbnNtaXNzaW9uIHVuaXQpIC0gaXQgcmVxdWlyZXMgeW91ciBzd2l0Y2ggYW5kIGNsaWVudHMgdG8gY2hhbmdlIHRvbyEKKyMgcmVwbGFjZSAxYTQ4IHdpdGggYXBwcm9wcmlhdGUgMTBHYkUgZGV2aWNlJ3MgSUQgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0sCisjIGlmIG5lZWRlZC4KK3NldHBjaSAtZCA4MDg2OjFhNDggZTYuYj0yZQorIyBzZXQgdGhlIE1UVSAobWF4IHRyYW5zbWlzc2lvbiB1bml0KSAtIGl0IHJlcXVpcmVzIHlvdXIgc3dpdGNoIGFuZCBjbGllbnRzCisjIHRvIGNoYW5nZSBhcyB3ZWxsLgogIyBzZXQgdGhlIHR4cXVldWVsZW4KICMgeW91ciBpeGdiIGFkYXB0ZXIgc2hvdWxkIGJlIGxvYWRlZCBhcyBldGgxIGZvciB0aGlzIHRvIHdvcmssIGNoYW5nZSBpZiBuZWVkZWQKIGlmY29uZmlnIGV0aDEgbXR1IDkwMDAgdHhxdWV1ZWxlbiAxMDAwIHVwCi0jIGNhbGwgdGhlIHN5c2N0bCB1dGlsaXR5IHRvIG1vZGlmeSAvcHJvYy9zeXMgZW50cmllcyAKLXN5c2N0bCAtcCAuL3N5c2N0bF9peGdiLmNvbmYgCisjIGNhbGwgdGhlIHN5c2N0bCB1dGlsaXR5IHRvIG1vZGlmeSAvcHJvYy9zeXMgZW50cmllcworc3lzY3RsIC1wIC4vc3lzY3RsX2l4Z2IuY29uZgogLSBFTkQgaXhnYl9wZXJmLnNoCiAKIC0gQ09QWSB0aGVzZSBsaW5lcyBhbmQgcGFzdGUgdGhlbSBpbnRvIHN5c2N0bF9peGdiLmNvbmY6CkBAIC0xNTksNTQgKzIxNCwyMjAgQEAKICMgc2V2ZXJhbCBuZXR3b3JrIGJlbmNobWFyayB0ZXN0cywgeW91ciBtaWxlYWdlIG1heSB2YXJ5CiAKICMjIyBJUFY0IHNwZWNpZmljIHNldHRpbmdzCi1uZXQuaXB2NC50Y3BfdGltZXN0YW1wcyA9IDAgIyB0dXJucyBUQ1AgdGltZXN0YW1wIHN1cHBvcnQgb2ZmLCBkZWZhdWx0IDEsIHJlZHVjZXMgQ1BVIHVzZQotbmV0LmlwdjQudGNwX3NhY2sgPSAwICMgdHVybiBTQUNLIHN1cHBvcnQgb2ZmLCBkZWZhdWx0IG9uCi0jIG9uIHN5c3RlbXMgd2l0aCBhIFZFUlkgZmFzdCBidXMgLT4gbWVtb3J5IGludGVyZmFjZSB0aGlzIGlzIHRoZSBiaWcgZ2FpbmVyIAotbmV0LmlwdjQudGNwX3JtZW0gPSAxMDAwMDAwMCAxMDAwMDAwMCAxMDAwMDAwMCAjIHNldHMgbWluL2RlZmF1bHQvbWF4IFRDUCByZWFkIGJ1ZmZlciwgZGVmYXVsdCA0MDk2IDg3MzgwIDE3NDc2MAotbmV0LmlwdjQudGNwX3dtZW0gPSAxMDAwMDAwMCAxMDAwMDAwMCAxMDAwMDAwMCAjIHNldHMgbWluL3ByZXNzdXJlL21heCBUQ1Agd3JpdGUgYnVmZmVyLCBkZWZhdWx0IDQwOTYgMTYzODQgMTMxMDcyCi1uZXQuaXB2NC50Y3BfbWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAgIyBzZXRzIG1pbi9wcmVzc3VyZS9tYXggVENQIGJ1ZmZlciBzcGFjZSwgZGVmYXVsdCAzMTc0NCAzMjI1NiAzMjc2OAorIyB0dXJuIFRDUCB0aW1lc3RhbXAgc3VwcG9ydCBvZmYsIGRlZmF1bHQgMSwgcmVkdWNlcyBDUFUgdXNlCituZXQuaXB2NC50Y3BfdGltZXN0YW1wcyA9IDAKKyMgdHVybiBTQUNLIHN1cHBvcnQgb2ZmLCBkZWZhdWx0IG9uCisjIG9uIHN5c3RlbXMgd2l0aCBhIFZFUlkgZmFzdCBidXMgLT4gbWVtb3J5IGludGVyZmFjZSB0aGlzIGlzIHRoZSBiaWcgZ2FpbmVyCituZXQuaXB2NC50Y3Bfc2FjayA9IDAKKyMgc2V0IG1pbi9kZWZhdWx0L21heCBUQ1AgcmVhZCBidWZmZXIsIGRlZmF1bHQgNDA5NiA4NzM4MCAxNzQ3NjAKK25ldC5pcHY0LnRjcF9ybWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAKKyMgc2V0IG1pbi9wcmVzc3VyZS9tYXggVENQIHdyaXRlIGJ1ZmZlciwgZGVmYXVsdCA0MDk2IDE2Mzg0IDEzMTA3MgorbmV0LmlwdjQudGNwX3dtZW0gPSAxMDAwMDAwMCAxMDAwMDAwMCAxMDAwMDAwMAorIyBzZXQgbWluL3ByZXNzdXJlL21heCBUQ1AgYnVmZmVyIHNwYWNlLCBkZWZhdWx0IDMxNzQ0IDMyMjU2IDMyNzY4CituZXQuaXB2NC50Y3BfbWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAKIAogIyMjIENPUkUgc2V0dGluZ3MgKG1vc3RseSBmb3Igc29ja2V0IGFuZCBVRFAgZWZmZWN0KQotbmV0LmNvcmUucm1lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDEzMTA3MQotbmV0LmNvcmUud21lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDEzMTA3MQotbmV0LmNvcmUucm1lbV9kZWZhdWx0ID0gNTI0Mjg3ICMgZGVmYXVsdCByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCA2NTUzNQotbmV0LmNvcmUud21lbV9kZWZhdWx0ID0gNTI0Mjg3ICMgZGVmYXVsdCBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCA2NTUzNQotbmV0LmNvcmUub3B0bWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gYW1vdW50IG9mIG9wdGlvbiBtZW1vcnkgYnVmZmVycywgZGVmYXVsdCAxMDI0MAotbmV0LmNvcmUubmV0ZGV2X21heF9iYWNrbG9nID0gMzAwMDAwICMgbnVtYmVyIG9mIHVucHJvY2Vzc2VkIGlucHV0IHBhY2tldHMgYmVmb3JlIGtlcm5lbCBzdGFydHMgZHJvcHBpbmcgdGhlbSwgZGVmYXVsdCAzMDAKKyMgc2V0IG1heGltdW0gcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgMTMxMDcxCituZXQuY29yZS5ybWVtX21heCA9IDUyNDI4NworIyBzZXQgbWF4aW11bSBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCAxMzEwNzEKK25ldC5jb3JlLndtZW1fbWF4ID0gNTI0Mjg3CisjIHNldCBkZWZhdWx0IHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDY1NTM1CituZXQuY29yZS5ybWVtX2RlZmF1bHQgPSA1MjQyODcKKyMgc2V0IGRlZmF1bHQgc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgNjU1MzUKK25ldC5jb3JlLndtZW1fZGVmYXVsdCA9IDUyNDI4NworIyBzZXQgbWF4aW11bSBhbW91bnQgb2Ygb3B0aW9uIG1lbW9yeSBidWZmZXJzLCBkZWZhdWx0IDEwMjQwCituZXQuY29yZS5vcHRtZW1fbWF4ID0gNTI0Mjg3CisjIHNldCBudW1iZXIgb2YgdW5wcm9jZXNzZWQgaW5wdXQgcGFja2V0cyBiZWZvcmUga2VybmVsIHN0YXJ0cyBkcm9wcGluZyB0aGVtOyBkZWZhdWx0IDMwMAorbmV0LmNvcmUubmV0ZGV2X21heF9iYWNrbG9nID0gMzAwMDAwCiAtIEVORCBzeXNjdGxfaXhnYi5jb25mCiAKLUVkaXQgdGhlIGl4Z2JfcGVyZi5zaCBzY3JpcHQgaWYgbmVjZXNzYXJ5IHRvIGNoYW5nZSBldGgxIHRvIHdoYXRldmVyIGludGVyZmFjZSAKLXlvdXIgaXhnYiBkcml2ZXIgaXMgdXNpbmcuCitFZGl0IHRoZSBpeGdiX3BlcmYuc2ggc2NyaXB0IGlmIG5lY2Vzc2FyeSB0byBjaGFuZ2UgZXRoMSB0byB3aGF0ZXZlciBpbnRlcmZhY2UKK3lvdXIgaXhnYiBkcml2ZXIgaXMgdXNpbmcgYW5kL29yIHJlcGxhY2UgJzFhNDgnIHdpdGggYXBwcm9wcmlhdGUgMTBHYkUgZGV2aWNlJ3MKK0lEIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLgogCi1OT1RFOiBVbmxlc3MgdGhlc2Ugc2NyaXB0cyBhcmUgYWRkZWQgdG8gdGhlIGJvb3QgcHJvY2VzcywgdGhlc2UgY2hhbmdlcyB3aWxsIAotb25seSBsYXN0IG9ubHkgdW50aWwgdGhlIG5leHQgc3lzdGVtIHJlYm9vdC4KK05PVEU6IFVubGVzcyB0aGVzZSBzY3JpcHRzIGFyZSBhZGRlZCB0byB0aGUgYm9vdCBwcm9jZXNzLCB0aGVzZSBjaGFuZ2VzIHdpbGwKKyAgICAgIG9ubHkgbGFzdCBvbmx5IHVudGlsIHRoZSBuZXh0IHN5c3RlbSByZWJvb3QuCiAKIAogUmVzb2x2aW5nIFNsb3cgVURQIFRyYWZmaWMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3VyIHNlcnZlciBkb2VzIG5vdCBzZWVtIHRvIGJlIGFibGUgdG8gcmVjZWl2ZSBVRFAgdHJhZmZpYyBhcyBmYXN0IGFzIGl0CitjYW4gcmVjZWl2ZSBUQ1AgdHJhZmZpYywgaXQgY291bGQgYmUgYmVjYXVzZSBMaW51eCwgYnkgZGVmYXVsdCwgZG9lcyBub3Qgc2V0Cit0aGUgbmV0d29yayBzdGFjayBidWZmZXJzIGFzIGxhcmdlIGFzIHRoZXkgbmVlZCB0byBiZSB0byBzdXBwb3J0IGhpZ2ggVURQCit0cmFuc2ZlciByYXRlcy4gIE9uZSB3YXkgdG8gYWxsZXZpYXRlIHRoaXMgcHJvYmxlbSBpcyB0byBhbGxvdyBtb3JlIG1lbW9yeSB0bworYmUgdXNlZCBieSB0aGUgSVAgc3RhY2sgdG8gc3RvcmUgaW5jb21pbmcgZGF0YS4KIAotSWYgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VlbSB0byBiZSBhYmxlIHRvIHJlY2VpdmUgVURQIHRyYWZmaWMgYXMgZmFzdCBhcyBpdCAKLWNhbiByZWNlaXZlIFRDUCB0cmFmZmljLCBpdCBjb3VsZCBiZSBiZWNhdXNlIExpbnV4LCBieSBkZWZhdWx0LCBkb2VzIG5vdCBzZXQgCi10aGUgbmV0d29yayBzdGFjayBidWZmZXJzIGFzIGxhcmdlIGFzIHRoZXkgbmVlZCB0byBiZSB0byBzdXBwb3J0IGhpZ2ggVURQIAotdHJhbnNmZXIgcmF0ZXMuIE9uZSB3YXkgdG8gYWxsZXZpYXRlIHRoaXMgcHJvYmxlbSBpcyB0byBhbGxvdyBtb3JlIG1lbW9yeSB0byAKLWJlIHVzZWQgYnkgdGhlIElQIHN0YWNrIHRvIHN0b3JlIGluY29taW5nIGRhdGEuIAotCi1Gb3IgaW5zdGFuY2UsIHVzZSB0aGUgY29tbWFuZHM6IAorRm9yIGluc3RhbmNlLCB1c2UgdGhlIGNvbW1hbmRzOgogICAgIHN5c2N0bCAtdyBuZXQuY29yZS5ybWVtX21heD0yNjIxNDMKIGFuZAogICAgIHN5c2N0bCAtdyBuZXQuY29yZS5ybWVtX2RlZmF1bHQ9MjYyMTQzCi10byBpbmNyZWFzZSB0aGUgcmVhZCBidWZmZXIgbWVtb3J5IG1heCBhbmQgZGVmYXVsdCB0byAyNjIxNDMgKDI1NmsgLSAxKSBmcm9tIAotZGVmYXVsdHMgb2YgbWF4PTEzMTA3MSAoMTI4ayAtIDEpIGFuZCBkZWZhdWx0PTY1NTM1ICg2NGsgLSAxKS4gVGhlc2UgdmFyaWFibGVzIAotd2lsbCBpbmNyZWFzZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrIGZvciByZWNlaXZlcywgYW5kIAordG8gaW5jcmVhc2UgdGhlIHJlYWQgYnVmZmVyIG1lbW9yeSBtYXggYW5kIGRlZmF1bHQgdG8gMjYyMTQzICgyNTZrIC0gMSkgZnJvbQorZGVmYXVsdHMgb2YgbWF4PTEzMTA3MSAoMTI4ayAtIDEpIGFuZCBkZWZhdWx0PTY1NTM1ICg2NGsgLSAxKS4gIFRoZXNlIHZhcmlhYmxlcword2lsbCBpbmNyZWFzZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrIGZvciByZWNlaXZlcywgYW5kCiBjYW4gYmUgaW5jcmVhc2VkIHNpZ25pZmljYW50bHkgbW9yZSBpZiBuZWNlc3NhcnkgZm9yIHlvdXIgYXBwbGljYXRpb24uCiAKKworQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIENvbmZpZ3VyaW5nIHRoZSBEcml2ZXIgb24gRGlmZmVyZW50IERpc3RyaWJ1dGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDb25maWd1cmluZyBhIG5ldHdvcmsgZHJpdmVyIHRvIGxvYWQgcHJvcGVybHkgd2hlbiB0aGUgc3lzdGVtIGlzIHN0YXJ0ZWQgaXMKKyAgZGlzdHJpYnV0aW9uIGRlcGVuZGVudC4gVHlwaWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGludm9sdmVzIGFkZGluZworICBhbiBhbGlhcyBsaW5lIHRvIC9ldGMvbW9kcHJvYmUuY29uZiBhcyB3ZWxsIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAKKyAgc2NyaXB0cyBhbmQvb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gIE1hbnkgcG9wdWxhciBMaW51eCBkaXN0cmlidXRpb25zIHNoaXAKKyAgd2l0aCB0b29scyB0byBtYWtlIHRoZXNlIGNoYW5nZXMgZm9yIHlvdS4gIFRvIGxlYXJuIHRoZSBwcm9wZXIgd2F5IHRvCisgIGNvbmZpZ3VyZSBhIG5ldHdvcmsgZGV2aWNlIGZvciB5b3VyIHN5c3RlbSwgcmVmZXIgdG8geW91ciBkaXN0cmlidXRpb24KKyAgZG9jdW1lbnRhdGlvbi4gIElmIGR1cmluZyB0aGlzIHByb2Nlc3MgeW91IGFyZSBhc2tlZCBmb3IgdGhlIGRyaXZlciBvciBtb2R1bGUKKyAgbmFtZSwgdGhlIG5hbWUgZm9yIHRoZSBMaW51eCBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsIDEwR2JFIEZhbWlseSBvZgorICBBZGFwdGVycyBpcyBpeGdiLgorCisgIFZpZXdpbmcgTGluayBNZXNzYWdlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcworICByZXN0cmljdGluZyBzeXN0ZW0gbWVzc2FnZXMuIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzIG9uCisgIHlvdXIgY29uc29sZSwgc2V0IGRtZXNnIHRvIGVpZ2h0IGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBkbWVzZyAtbiA4CisKKyAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4KKworCisgIEp1bWJvIEZyYW1lcworICAtLS0tLS0tLS0tLS0KKyAgVGhlIGRyaXZlciBzdXBwb3J0cyBKdW1ibyBGcmFtZXMgZm9yIGFsbCBhZGFwdGVycy4gSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMKKyAgZW5hYmxlZCBieSBjaGFuZ2luZyB0aGUgTVRVIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgb2YgMTUwMC4KKyAgVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZSBNVFUgaXMgMTYxMTQuICBVc2UgdGhlIGlmY29uZmlnIGNvbW1hbmQgdG8KKyAgaW5jcmVhc2UgdGhlIE1UVSBzaXplLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgaWZjb25maWcgZXRoeCBtdHUgOTAwMCB1cAorCisgIFRoZSBtYXhpbXVtIE1UVSBzZXR0aW5nIGZvciBKdW1ibyBGcmFtZXMgaXMgMTYxMTQuICBUaGlzIHZhbHVlIGNvaW5jaWRlcworICB3aXRoIHRoZSBtYXhpbXVtIEp1bWJvIEZyYW1lcyBzaXplIG9mIDE2MTI4LgorCisKKyAgRXRodG9vbAorICAtLS0tLS0tCisgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKKyAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIEV0aHRvb2wKKyAgdmVyc2lvbiAxLjYgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworICBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgZXRodG9vbCBjYW4gYmUgZm91bmQgZnJvbQorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwKKworICBOT1RFOiBFdGh0b29sIDEuNiBvbmx5IHN1cHBvcnRzIGEgbGltaXRlZCBzZXQgb2YgZXRodG9vbCBvcHRpb25zLiBTdXBwb3J0CisgICAgICAgIGZvciBhIG1vcmUgY29tcGxldGUgZXRodG9vbCBmZWF0dXJlIHNldCBjYW4gYmUgZW5hYmxlZCBieSB1cGdyYWRpbmcKKyAgICAgICAgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLgorCisKKyAgTkFQSQorICAtLS0tCisKKyAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGl4Z2IgZHJpdmVyLiAgTkFQSSBpcyBlbmFibGVkCisgIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBrZXJuZWwuICBzZWUgQ09ORklHX0lYR0JfTkFQSQorCisgIFNlZSB3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BUEkuCisKKworS25vd24gSXNzdWVzL1Ryb3VibGVzaG9vdGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIE5PVEU6IEFmdGVyIGluc3RhbGxpbmcgdGhlIGRyaXZlciwgaWYgeW91ciBJbnRlbCBOZXR3b3JrIENvbm5lY3Rpb24gaXMgbm90CisgIHdvcmtpbmcsIHZlcmlmeSBpbiB0aGUgIkluIFRoaXMgUmVsZWFzZSIgc2VjdGlvbiBvZiB0aGUgcmVhZG1lIHRoYXQgeW91IGhhdmUKKyAgaW5zdGFsbGVkIHRoZSBjb3JyZWN0IGRyaXZlci4KKworICBJbnRlbChSKSBQUk8vMTBHYkUgQ1g0IFNlcnZlciBBZGFwdGVyIENhYmxlIEludGVyb3BlcmFiaWxpdHkgSXNzdWUgd2l0aAorICBGdWppdHN1IFhFTlBBSyBNb2R1bGUgaW4gU21hcnRCaXRzIENoYXNzaXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEV4Y2Vzc2l2ZSBDUkMgZXJyb3JzIG1heSBiZSBvYnNlcnZlZCBpZiB0aGUgSW50ZWwoUikgUFJPLzEwR2JFIENYNAorICBTZXJ2ZXIgYWRhcHRlciBpcyBjb25uZWN0ZWQgdG8gYSBGdWppdHN1IFhFTlBBSyBDWDQgbW9kdWxlIGluIGEgU21hcnRCaXRzCisgIGNoYXNzaXMgdXNpbmcgMTUgbS8yNEFXRyBjYWJsZSBhc3NlbWJsaWVzIG1hbnVmYWN0dXJlZCBieSBGdWppdHN1IG9yIExlb25pLgorICBUaGUgQ1JDIGVycm9ycyBtYXkgYmUgcmVjZWl2ZWQgZWl0aGVyIGJ5IHRoZSBJbnRlbChSKSBQUk8vMTBHYkUgQ1g0CisgIFNlcnZlciBhZGFwdGVyIG9yIHRoZSBTbWFydEJpdHMuIElmIHRoaXMgc2l0dWF0aW9uIG9jY3VycyB1c2luZyBhIGRpZmZlcmVudAorICBjYWJsZSBhc3NlbWJseSBtYXkgcmVzb2x2ZSB0aGUgaXNzdWUuCisKKyAgQ1g0IFNlcnZlciBBZGFwdGVyIENhYmxlIEludGVyb3BlcmFiaWxpdHkgSXNzdWVzIHdpdGggSFAgUHJvY3VydmUgMzQwMGNsCisgIFN3aXRjaCBQb3J0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFeGNlc3NpdmUgQ1JDIGVycm9ycyBtYXkgYmUgb2JzZXJ2ZWQgaWYgdGhlIEludGVsKFIpIFBSTy8xMEdiRSBDWDQgU2VydmVyCisgIGFkYXB0ZXIgaXMgY29ubmVjdGVkIHRvIGFuIEhQIFByb2N1cnZlIDM0MDBjbCBzd2l0Y2ggcG9ydCB1c2luZyBzaG9ydCBjYWJsZXMKKyAgKDEgbSBvciBzaG9ydGVyKS4gSWYgdGhpcyBzaXR1YXRpb24gb2NjdXJzLCB1c2luZyBhIGxvbmdlciBjYWJsZSBtYXkgcmVzb2x2ZQorICB0aGUgaXNzdWUuCisKKyAgRXhjZXNzaXZlIENSQyBlcnJvcnMgbWF5IGJlIG9ic2VydmVkIHVzaW5nIEZ1aml0c3UgMjRBV0cgY2FibGUgYXNzZW1ibGllcyB0aGF0CisgIEFyZSAxMCBtIG9yIGxvbmdlciBvciB3aGVyZSB1c2luZyBhIExlb25pIDE1IG0vMjRBV0cgY2FibGUgYXNzZW1ibHkuIFRoZSBDUkMKKyAgZXJyb3JzIG1heSBiZSByZWNlaXZlZCBlaXRoZXIgYnkgdGhlIENYNCBTZXJ2ZXIgYWRhcHRlciBvciBhdCB0aGUgc3dpdGNoLiBJZgorICB0aGlzIHNpdHVhdGlvbiBvY2N1cnMsIHVzaW5nIGEgZGlmZmVyZW50IGNhYmxlIGFzc2VtYmx5IG1heSByZXNvbHZlIHRoZSBpc3N1ZS4KKworCisgIEp1bWJvIEZyYW1lcyBTeXN0ZW0gUmVxdWlyZW1lbnQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBoYXZlIGJlZW4gb2JzZXJ2ZWQgb24gTGludXggc3lzdGVtcyB3aXRoIDY0IE1CCisgIG9mIFJBTSBvciBsZXNzIHRoYXQgYXJlIHJ1bm5pbmcgSnVtYm8gRnJhbWVzLiAgSWYgeW91IGFyZSB1c2luZyBKdW1ibworICBGcmFtZXMsIHlvdXIgc3lzdGVtIG1heSByZXF1aXJlIG1vcmUgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBtaW5pbXVtCisgIHJlcXVpcmVtZW50IG9mIDY0IE1CIG9mIHN5c3RlbSBtZW1vcnkuCisKKworICBQZXJmb3JtYW5jZSBEZWdyYWRhdGlvbiB3aXRoIEp1bWJvIEZyYW1lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWdyYWRhdGlvbiBpbiB0aHJvdWdocHV0IHBlcmZvcm1hbmNlIG1heSBiZSBvYnNlcnZlZCBpbiBzb21lIEp1bWJvIGZyYW1lcworICBlbnZpcm9ubWVudHMuICBJZiB0aGlzIGlzIG9ic2VydmVkLCBpbmNyZWFzaW5nIHRoZSBhcHBsaWNhdGlvbidzIHNvY2tldCBidWZmZXIKKyAgc2l6ZSBhbmQvb3IgaW5jcmVhc2luZyB0aGUgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF8qbWVtIGVudHJ5IHZhbHVlcyBtYXkgaGVscC4KKyAgU2VlIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBtYW51YWwgYW5kIC91c3Ivc3JjL2xpbnV4Ki9Eb2N1bWVudGF0aW9uLworICBuZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgZm9yIG1vcmUgZGV0YWlscy4KKworCisgIEFsbG9jYXRpbmcgUnggQnVmZmVycyB3aGVuIFVzaW5nIEp1bWJvIEZyYW1lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQWxsb2NhdGluZyBSeCBidWZmZXJzIHdoZW4gdXNpbmcgSnVtYm8gRnJhbWVzIG9uIDIuNi54IGtlcm5lbHMgbWF5IGZhaWwgaWYKKyAgdGhlIGF2YWlsYWJsZSBtZW1vcnkgaXMgaGVhdmlseSBmcmFnbWVudGVkLiBUaGlzIGlzc3VlIG1heSBiZSBzZWVuIHdpdGggUENJLVgKKyAgYWRhcHRlcnMgb3Igd2l0aCBwYWNrZXQgc3BsaXQgZGlzYWJsZWQuIFRoaXMgY2FuIGJlIHJlZHVjZWQgb3IgZWxpbWluYXRlZAorICBieSBjaGFuZ2luZyB0aGUgYW1vdW50IG9mIGF2YWlsYWJsZSBtZW1vcnkgZm9yIHJlY2VpdmUgYnVmZmVyIGFsbG9jYXRpb24sIGJ5CisgIGluY3JlYXNpbmcgL3Byb2Mvc3lzL3ZtL21pbl9mcmVlX2tieXRlcy4KKworCisgIE11bHRpcGxlIEludGVyZmFjZXMgb24gU2FtZSBFdGhlcm5ldCBCcm9hZGNhc3QgTmV0d29yaworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRHVlIHRvIHRoZSBkZWZhdWx0IEFSUCBiZWhhdmlvciBvbiBMaW51eCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUKKyAgb25lIHN5c3RlbSBvbiB0d28gSVAgbmV0d29ya3MgaW4gdGhlIHNhbWUgRXRoZXJuZXQgYnJvYWRjYXN0IGRvbWFpbgorICAobm9uLXBhcnRpdGlvbmVkIHN3aXRjaCkgYmVoYXZlIGFzIGV4cGVjdGVkLiAgQWxsIEV0aGVybmV0IGludGVyZmFjZXMKKyAgd2lsbCByZXNwb25kIHRvIElQIHRyYWZmaWMgZm9yIGFueSBJUCBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBzeXN0ZW0uCisgIFRoaXMgcmVzdWx0cyBpbiB1bmJhbGFuY2VkIHJlY2VpdmUgdHJhZmZpYy4KKworICBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBpbnRlcmZhY2VzIGluIGEgc2VydmVyLCBkbyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZzoKKworICAtIFR1cm4gb24gQVJQIGZpbHRlcmluZyBieSBlbnRlcmluZzoKKyAgICAgIGVjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL2FsbC9hcnBfZmlsdGVyCisKKyAgLSBJbnN0YWxsIHRoZSBpbnRlcmZhY2VzIGluIHNlcGFyYXRlIGJyb2FkY2FzdCBkb21haW5zIC0gZWl0aGVyIGluCisgICAgZGlmZmVyZW50IHN3aXRjaGVzIG9yIGluIGEgc3dpdGNoIHBhcnRpdGlvbmVkIHRvIFZMQU5zLgorCisKKyAgVURQIFN0cmVzcyBUZXN0IERyb3BwZWQgUGFja2V0IElzc3VlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVuZGVyIHNtYWxsIHBhY2tldHMgVURQIHN0cmVzcyB0ZXN0IHdpdGggMTBHYkUgZHJpdmVyLCB0aGUgTGludXggc3lzdGVtCisgIG1heSBkcm9wIFVEUCBwYWNrZXRzIGR1ZSB0byB0aGUgZnVsbG5lc3Mgb2Ygc29ja2V0IGJ1ZmZlcnMuIFlvdSBtYXkgd2FudAorICB0byBjaGFuZ2UgdGhlIGRyaXZlcidzIEZsb3cgQ29udHJvbCB2YXJpYWJsZXMgdG8gdGhlIG1pbmltdW0gdmFsdWUgZm9yCisgIGNvbnRyb2xsaW5nIHBhY2tldCByZWNlcHRpb24uCisKKworICBUeCBIYW5ncyBQb3NzaWJsZSBVbmRlciBTdHJlc3MKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVuZGVyIHN0cmVzcyBjb25kaXRpb25zLCBpZiBUWCBoYW5ncyBvY2N1ciwgdHVybmluZyBvZmYgVFNPCisgICJldGh0b29sIC1LIGV0aDAgdHNvIG9mZiIgbWF5IHJlc29sdmUgdGhlIHByb2JsZW0uCisKKwogU3VwcG9ydAogPT09PT09PQogCi1Gb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhbmQgc3VwcG9ydCwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydCB3ZWJzaXRlIGF0OgogCiAgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCiAKK29yIHRoZSBJbnRlbCBXaXJlZCBOZXR3b3JraW5nIHByb2plY3QgaG9zdGVkIGJ5IFNvdXJjZWZvcmdlIGF0OgorCisgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMTAwMAorCiBJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKLWtlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIAotdGhlIGlzc3VlIHRvIGxpbnV4Lm5pY3NAaW50ZWwuY29tLgora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKK3RvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zZi5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbS9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZjhjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0vUkVBRE1FCkBAIC0wLDAgKzEsNjcgQEAKK21hYzgwMjExX2h3c2ltIC0gc29mdHdhcmUgc2ltdWxhdG9yIG9mIDgwMi4xMSByYWRpbyhzKSBmb3IgbWFjODAyMTEKK0NvcHlyaWdodCAoYykgMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworCitJbnRyb2R1Y3Rpb24KKworbWFjODAyMTFfaHdzaW0gaXMgYSBMaW51eCBrZXJuZWwgbW9kdWxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUKK2FyYml0cmFyeSBudW1iZXIgb2YgSUVFRSA4MDIuMTEgcmFkaW9zIGZvciBtYWM4MDIxMS4gSXQgY2FuIGJlIHVzZWQgdG8KK3Rlc3QgbW9zdCBvZiB0aGUgbWFjODAyMTEgZnVuY3Rpb25hbGl0eSBhbmQgdXNlciBzcGFjZSB0b29scyAoZS5nLiwKK2hvc3RhcGQgYW5kIHdwYV9zdXBwbGljYW50KSBpbiBhIHdheSB0aGF0IG1hdGNoZXMgdmVyeSBjbG9zZWx5IHdpdGgKK3RoZSBub3JtYWwgY2FzZSBvZiB1c2luZyByZWFsIFdMQU4gaGFyZHdhcmUuIEZyb20gdGhlIG1hYzgwMjExIHZpZXcKK3BvaW50LCBtYWM4MDIxMV9od3NpbSBpcyB5ZXQgYW5vdGhlciBoYXJkd2FyZSBkcml2ZXIsIGkuZS4sIG5vIGNoYW5nZXMKK3RvIG1hYzgwMjExIGFyZSBuZWVkZWQgdG8gdXNlIHRoaXMgdGVzdGluZyB0b29sLgorCitUaGUgbWFpbiBnb2FsIGZvciBtYWM4MDIxMV9od3NpbSBpcyB0byBtYWtlIGl0IGVhc2llciBmb3IgZGV2ZWxvcGVycwordG8gdGVzdCB0aGVpciBjb2RlIGFuZCB3b3JrIHdpdGggbmV3IGZlYXR1cmVzIHRvIG1hYzgwMjExLCBob3N0YXBkLAorYW5kIHdwYV9zdXBwbGljYW50LiBUaGUgc2ltdWxhdGVkIHJhZGlvcyBkbyBub3QgaGF2ZSB0aGUgbGltaXRhdGlvbnMKK29mIHJlYWwgaGFyZHdhcmUsIHNvIGl0IGlzIGVhc3kgdG8gZ2VuZXJhdGUgYW4gYXJiaXRyYXJ5IHRlc3Qgc2V0dXAKK2FuZCBhbHdheXMgcmVwcm9kdWNlIHRoZSBzYW1lIHNldHVwIGZvciBmdXR1cmUgdGVzdHMuIEluIGFkZGl0aW9uLAorc2luY2UgYWxsIHJhZGlvIG9wZXJhdGlvbiBpcyBzaW11bGF0ZWQsIGFueSBjaGFubmVsIGNhbiBiZSB1c2VkIGluCit0ZXN0cyByZWdhcmRsZXNzIG9mIHJlZ3VsYXRvcnkgcnVsZXMuCisKK21hYzgwMjExX2h3c2ltIGtlcm5lbCBtb2R1bGUgaGFzIGEgcGFyYW1ldGVyICdyYWRpb3MnIHRoYXQgY2FuIGJlIHVzZWQKK3RvIHNlbGVjdCBob3cgbWFueSByYWRpb3MgYXJlIHNpbXVsYXRlZCAoZGVmYXVsdCAyKS4gVGhpcyBhbGxvd3MKK2NvbmZpZ3VyYXRpb24gb2YgYm90aCB2ZXJ5IHNpbXBseSBzZXR1cHMgKGUuZy4sIGp1c3QgYSBzaW5nbGUgYWNjZXNzCitwb2ludCBhbmQgYSBzdGF0aW9uKSBvciBsYXJnZSBzY2FsZSB0ZXN0cyAobXVsdGlwbGUgYWNjZXNzIHBvaW50cyB3aXRoCitodW5kcmVkcyBvZiBzdGF0aW9ucykuCisKK21hYzgwMjExX2h3c2ltIHdvcmtzIGJ5IHRyYWNraW5nIHRoZSBjdXJyZW50IGNoYW5uZWwgb2YgZWFjaCB2aXJ0dWFsCityYWRpbyBhbmQgY29weWluZyBhbGwgdHJhbnNtaXR0ZWQgZnJhbWVzIHRvIGFsbCBvdGhlciByYWRpb3MgdGhhdCBhcmUKK2N1cnJlbnRseSBlbmFibGVkIGFuZCBvbiB0aGUgc2FtZSBjaGFubmVsIGFzIHRoZSB0cmFuc21pdHRpbmcKK3JhZGlvLiBTb2Z0d2FyZSBlbmNyeXB0aW9uIGluIG1hYzgwMjExIGlzIHVzZWQgc28gdGhhdCB0aGUgZnJhbWVzIGFyZQorYWN0dWFsbHkgZW5jcnlwdGVkIG92ZXIgdGhlIHZpcnR1YWwgYWlyIGludGVyZmFjZSB0byBhbGxvdyBtb3JlCitjb21wbGV0ZSB0ZXN0aW5nIG9mIGVuY3J5cHRpb24uCisKK0EgZ2xvYmFsIG1vbml0b3JpbmcgbmV0ZGV2LCBod3NpbSMsIGlzIGNyZWF0ZWQgaW5kZXBlbmRlbnQgb2YKK21hYzgwMjExLiBUaGlzIGludGVyZmFjZSBjYW4gYmUgdXNlZCB0byBtb25pdG9yIGFsbCB0cmFuc21pdHRlZCBmcmFtZXMKK3JlZ2FyZGxlc3Mgb2YgY2hhbm5lbC4KKworCitTaW1wbGUgZXhhbXBsZQorCitUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBtYWM4MDIxMV9od3NpbSB0byBzaW11bGF0ZSB0d28gcmFkaW9zOgorb25lIHRvIGFjdCBhcyBhbiBhY2Nlc3MgcG9pbnQgYW5kIHRoZSBvdGhlciBhcyBhIHN0YXRpb24gdGhhdAorYXNzb2NpYXRlcyB3aXRoIHRoZSBBUC4gaG9zdGFwZCBhbmQgd3BhX3N1cHBsaWNhbnQgYXJlIHVzZWQgdG8gdGFrZQorY2FyZSBvZiBXUEEyLVBTSyBhdXRoZW50aWNhdGlvbi4gSW4gYWRkaXRpb24sIGhvc3RhcGQgaXMgYWxzbworcHJvY2Vzc2luZyBhY2Nlc3MgcG9pbnQgc2lkZSBvZiBhc3NvY2lhdGlvbi4KKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgY3VycmVudCBMaW51eCBrZXJuZWwgZG9lcyBub3QgZW5hYmxlIEFQIG1vZGUsIHNvIGEKK3NpbXBsZSBwYXRjaCBpcyBuZWVkZWQgdG8gZW5hYmxlIEFQIG1vZGUgc2VsZWN0aW9uOgoraHR0cDovL2pvaGFubmVzLnNpcHNvbHV0aW9ucy5uZXQvcGF0Y2hlcy9rZXJuZWwvYWxsL0xBVEVTVC8wMDYtYWxsb3ctYXAtdmxhbi1tb2Rlcy5wYXRjaAorCisKKyMgQnVpbGQgbWFjODAyMTFfaHdzaW0gYXMgcGFydCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbgorCisjIExvYWQgdGhlIG1vZHVsZQorbW9kcHJvYmUgbWFjODAyMTFfaHdzaW0KKworIyBSdW4gaG9zdGFwZCAoQVApIGZvciB3bGFuMAoraG9zdGFwZCBob3N0YXBkLmNvbmYKKworIyBSdW4gd3BhX3N1cHBsaWNhbnQgKHN0YXRpb24pIGZvciB3bGFuMQord3BhX3N1cHBsaWNhbnQgLUR3ZXh0IC1pd2xhbjEgLWMgd3BhX3N1cHBsaWNhbnQuY29uZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltL2hvc3RhcGQuY29uZiBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbS9ob3N0YXBkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjZGU3ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbS9ob3N0YXBkLmNvbmYKQEAgLTAsMCArMSwxMSBAQAoraW50ZXJmYWNlPXdsYW4wCitkcml2ZXI9bmw4MDIxMQorCitod19tb2RlPWcKK2NoYW5uZWw9MQorc3NpZD1tYWM4MDIxMSB0ZXN0CisKK3dwYT0yCit3cGFfa2V5X21nbXQ9V1BBLVBTSword3BhX3BhaXJ3aXNlPUNDTVAKK3dwYV9wYXNzcGhyYXNlPTEyMzQ1Njc4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0vd3BhX3N1cHBsaWNhbnQuY29uZiBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbS93cGFfc3VwcGxpY2FudC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OTEyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0vd3BhX3N1cHBsaWNhbnQuY29uZgpAQCAtMCwwICsxLDEwIEBACitjdHJsX2ludGVyZmFjZT0vdmFyL3J1bi93cGFfc3VwcGxpY2FudAorCituZXR3b3JrPXsKKwlzc2lkPSJtYWM4MDIxMSB0ZXN0IgorCXBzaz0iMTIzNDU2NzgiCisJa2V5X21nbXQ9V1BBLVBTSworCXByb3RvPVdQQTIKKwlwYWlyd2lzZT1DQ01QCisJZ3JvdXA9Q0NNUAorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL211bHRpcXVldWUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL211bHRpcXVldWUudHh0CmluZGV4IGVhNWE0MmUuLmQzOTFlYTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tdWx0aXF1ZXVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXVsdGlxdWV1ZS50eHQKQEAgLTMsMTkgKzMsMTEgQEAKIAkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBTZWN0aW9uIDE6IEJhc2UgZHJpdmVyIHJlcXVpcmVtZW50cyBmb3IgaW1wbGVtZW50aW5nIG11bHRpcXVldWUgc3VwcG9ydAotU2VjdGlvbiAyOiBRZGlzYyBzdXBwb3J0IGZvciBtdWx0aXF1ZXVlIGRldmljZXMKLVNlY3Rpb24gMzogQnJpZWYgaG93dG8gdXNpbmcgUFJJTyBvciBSUiBmb3IgbXVsdGlxdWV1ZSBkZXZpY2VzCi0KIAogSW50cm86IEtlcm5lbCBzdXBwb3J0IGZvciBtdWx0aXF1ZXVlIGRldmljZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1LZXJuZWwgc3VwcG9ydCBmb3IgbXVsdGlxdWV1ZSBkZXZpY2VzIGlzIG9ubHkgYW4gQVBJIHRoYXQgaXMgcHJlc2VudGVkIHRvIHRoZQotbmV0ZGV2aWNlIGxheWVyIGZvciBiYXNlIGRyaXZlcnMgdG8gaW1wbGVtZW50LiAgVGhpcyBmZWF0dXJlIGlzIHBhcnQgb2YgdGhlCi1jb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBhbGwgbmV0d29yayBkZXZpY2VzIHdpbGwgYmUgcnVubmluZyBvbiB0aGUKLW11bHRpcXVldWUtYXdhcmUgc3RhY2suICBJZiBhIGJhc2UgZHJpdmVyIG9ubHkgaGFzIG9uZSBxdWV1ZSwgdGhlbiB0aGVzZQotY2hhbmdlcyBhcmUgdHJhbnNwYXJlbnQgdG8gdGhhdCBkcml2ZXIuCi0KK0tlcm5lbCBzdXBwb3J0IGZvciBtdWx0aXF1ZXVlIGRldmljZXMgaXMgYWx3YXlzIHByZXNlbnQuCiAKIFNlY3Rpb24gMTogQmFzZSBkcml2ZXIgcmVxdWlyZW1lbnRzIGZvciBpbXBsZW1lbnRpbmcgbXVsdGlxdWV1ZSBzdXBwb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzIsODQgKzI0LDQgQEAKIGRldmljZSBpcyBzdGlsbCBvcGVyYXRpb25hbC4gIG5ldGRldi0+cXVldWVfbG9jayBpcyBzdGlsbCB1c2VkIHdoZW4gdGhlIGRldmljZQogY29tZXMgb25saW5lIG9yIHdoZW4gaXQncyBjb21wbGV0ZWx5IHNodXQgZG93biAodW5yZWdpc3Rlcl9uZXRkZXYoKSwgZXRjLikuCiAKLUZpbmFsbHksIHRoZSBiYXNlIGRyaXZlciBzaG91bGQgaW5kaWNhdGUgdGhhdCBpdCBpcyBhIG11bHRpcXVldWUgZGV2aWNlLiAgVGhlCi1mZWF0dXJlIGZsYWcgTkVUSUZfRl9NVUxUSV9RVUVVRSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIG5ldGRldi0+ZmVhdHVyZXMKLWJpdG1hcCBvbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uICBCZWxvdyBpcyBhbiBleGFtcGxlIGZyb20gZTEwMDA6Ci0KLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQlpZiAoIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBlMTAwMF84MjU3MSkgfHwKLQkgICAgIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBlMTAwMF84MjU3MikgfHwKLQkgICAgIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikpCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9NVUxUSV9RVUVVRTsKLSNlbmRpZgotCi0KLVNlY3Rpb24gMjogUWRpc2Mgc3VwcG9ydCBmb3IgbXVsdGlxdWV1ZSBkZXZpY2VzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DdXJyZW50bHkgdHdvIHFkaXNjcyBzdXBwb3J0IG11bHRpcXVldWUgZGV2aWNlcy4gIEEgbmV3IHJvdW5kLXJvYmluIHFkaXNjLAotc2NoX3JyLCBhbmQgc2NoX3ByaW8uIFRoZSBxZGlzYyBpcyByZXNwb25zaWJsZSBmb3IgY2xhc3NpZnlpbmcgdGhlIHNrYidzIHRvCi1iYW5kcyBhbmQgcXVldWVzLCBhbmQgd2lsbCBzdG9yZSB0aGUgcXVldWUgbWFwcGluZyBpbnRvIHNrYi0+cXVldWVfbWFwcGluZy4KLVVzZSB0aGlzIGZpZWxkIGluIHRoZSBiYXNlIGRyaXZlciB0byBkZXRlcm1pbmUgd2hpY2ggcXVldWUgdG8gc2VuZCB0aGUgc2tiCi10by4KLQotc2NoX3JyIGhhcyBiZWVuIGFkZGVkIGZvciBoYXJkd2FyZSB0aGF0IGRvZXNuJ3Qgd2FudCBzY2hlZHVsaW5nIHBvbGljaWVzIGZyb20KLXNvZnR3YXJlLCBzbyBpdCdzIGEgc3RyYWlnaHQgcm91bmQtcm9iaW4gcWRpc2MuICBJdCB1c2VzIHRoZSBzYW1lIHN5bnRheCBhbmQKLWNsYXNzaWZpY2F0aW9uIHByaW9tYXAgdGhhdCBzY2hfcHJpbyB1c2VzLCBzbyBpdCBzaG91bGQgYmUgaW50dWl0aXZlIHRvCi1jb25maWd1cmUgZm9yIHBlb3BsZSB3aG8ndmUgdXNlZCBzY2hfcHJpby4KLQotSW4gb3JkZXIgdG8gdXRpbGl0aXplIHRoZSBtdWx0aXF1ZXVlIGZlYXR1cmVzIG9mIHRoZSBxZGlzY3MsIHRoZSBuZXR3b3JrCi1kZXZpY2UgbGF5ZXIgbmVlZHMgdG8gZW5hYmxlIG11bHRpcGxlIHF1ZXVlIHN1cHBvcnQuICBUaGlzIGNhbiBiZSBkb25lIGJ5Ci1zZWxlY3RpbmcgTkVUREVWSUNFU19NVUxUSVFVRVVFIHVuZGVyIERyaXZlcnMuCi0KLVRoZSBQUklPIHFkaXNjIG5hdHVyYWxseSBwbHVncyBpbnRvIGEgbXVsdGlxdWV1ZSBkZXZpY2UuICBJZgotTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIHNlbGVjdGVkLCB0aGVuIG9uIHFkaXNjIGxvYWQsIHRoZSBudW1iZXIgb2YKLWJhbmRzIHJlcXVlc3RlZCBpcyBjb21wYXJlZCB0byB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBvbiB0aGUgaGFyZHdhcmUuICBJZiB0aGV5Ci1hcmUgZXF1YWwsIGl0IHNldHMgYSBvbmUtdG8tb25lIG1hcHBpbmcgdXAgYmV0d2VlbiB0aGUgcXVldWVzIGFuZCBiYW5kcy4gIElmCi10aGV5J3JlIG5vdCBlcXVhbCwgaXQgd2lsbCBub3QgbG9hZCB0aGUgcWRpc2MuICBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yCi1mb3IgUlIuICBPbmNlIHRoZSBhc3NvY2lhdGlvbiBpcyBtYWRlLCBhbnkgc2tiIHRoYXQgaXMgY2xhc3NpZmllZCB3aWxsIGhhdmUKLXNrYi0+cXVldWVfbWFwcGluZyBzZXQsIHdoaWNoIHdpbGwgYWxsb3cgdGhlIGRyaXZlciB0byBwcm9wZXJseSBxdWV1ZSBza2IncwotdG8gbXVsdGlwbGUgcXVldWVzLgotCi0KLVNlY3Rpb24gMzogQnJpZWYgaG93dG8gdXNpbmcgUFJJTyBhbmQgUlIgZm9yIG11bHRpcXVldWUgZGV2aWNlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSB1c2Vyc3BhY2UgY29tbWFuZCAndGMsJyBwYXJ0IG9mIHRoZSBpcHJvdXRlMiBwYWNrYWdlLCBpcyB1c2VkIHRvIGNvbmZpZ3VyZQotcWRpc2NzLiAgVG8gYWRkIHRoZSBQUklPIHFkaXNjIHRvIHlvdXIgbmV0d29yayBkZXZpY2UsIGFzc3VtaW5nIHRoZSBkZXZpY2UgaXMKLWNhbGxlZCBldGgwLCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgotCi0jIHRjIHFkaXNjIGFkZCBkZXYgZXRoMCByb290IGhhbmRsZSAxOiBwcmlvIGJhbmRzIDQgbXVsdGlxdWV1ZQotCi1UaGlzIHdpbGwgY3JlYXRlIDQgYmFuZHMsIDAgYmVpbmcgaGlnaGVzdCBwcmlvcml0eSwgYW5kIGFzc29jaWF0ZSB0aG9zZSBiYW5kcwotdG8gdGhlIHF1ZXVlcyBvbiB5b3VyIE5JQy4gIEFzc3VtaW5nIGV0aDAgaGFzIDQgVHggcXVldWVzLCB0aGUgYmFuZCBtYXBwaW5nCi13b3VsZCBsb29rIGxpa2U6Ci0KLWJhbmQgMCA9PiBxdWV1ZSAwCi1iYW5kIDEgPT4gcXVldWUgMQotYmFuZCAyID0+IHF1ZXVlIDIKLWJhbmQgMyA9PiBxdWV1ZSAzCi0KLVRyYWZmaWMgd2lsbCBiZWdpbiBmbG93aW5nIHRocm91Z2ggZWFjaCBxdWV1ZSBpZiB5b3VyIFRPUyB2YWx1ZXMgYXJlIGFzc2lnbmluZwotdHJhZmZpYyBhY3Jvc3MgdGhlIHZhcmlvdXMgYmFuZHMuICBGb3IgZXhhbXBsZSwgc3NoIHRyYWZmaWMgd2lsbCBhbHdheXMgdHJ5IHRvCi1nbyBvdXQgYmFuZCAwIGJhc2VkIG9uIFRPUyAtPiBMaW51eCBwcmlvcml0eSBjb252ZXJzaW9uIChyZWFsdGltZSB0cmFmZmljKSwKLXNvIGl0IHdpbGwgYmUgc2VudCBvdXQgcXVldWUgMC4gIElDTVAgdHJhZmZpYyAocGluZ3MpIGZhbGwgaW50byB0aGUgIm5vcm1hbCIKLXRyYWZmaWMgY2xhc3NpZmljYXRpb24sIHdoaWNoIGlzIGJhbmQgMS4gIFRoZXJlZm9yZSBwaW5ncyB3aWxsIGJlIHNlbmQgb3V0Ci1xdWV1ZSAxIG9uIHRoZSBOSUMuCi0KLU5vdGUgdGhlIHVzZSBvZiB0aGUgbXVsdGlxdWV1ZSBrZXl3b3JkLiAgVGhpcyBpcyBvbmx5IGluIHZlcnNpb25zIG9mIGlwcm91dGUyCi10aGF0IHN1cHBvcnQgbXVsdGlxdWV1ZSBuZXR3b3JraW5nIGRldmljZXM7IGlmIHRoaXMgaXMgb21pdHRlZCB3aGVuIGxvYWRpbmcKLWEgcWRpc2Mgb250byBhIG11bHRpcXVldWUgZGV2aWNlLCB0aGUgcWRpc2Mgd2lsbCBsb2FkIGFuZCBvcGVyYXRlIHRoZSBzYW1lCi1pZiBpdCB3ZXJlIGxvYWRlZCBvbnRvIGEgc2luZ2xlLXF1ZXVlIGRldmljZSAoaS5lLiAtIHNlbmRzIGFsbCB0cmFmZmljIHRvCi1xdWV1ZSAwKS4KLQotQW5vdGhlciBhbHRlcm5hdGl2ZSB0byBtdWx0aXF1ZXVlIGJhbmQgYWxsb2NhdGlvbiBjYW4gYmUgZG9uZSBieSB1c2luZyB0aGUKLW11bHRpcXVldWUgb3B0aW9uIGFuZCBzcGVjaWZ5IDAgYmFuZHMuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGUgcWRpc2Mgd2lsbAotYWxsb2NhdGUgdGhlIG51bWJlciBvZiBiYW5kcyB0byBlcXVhbCB0aGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGF0IHRoZSBkZXZpY2UKLXJlcG9ydHMsIGFuZCBicmluZyB0aGUgcWRpc2Mgb25saW5lLgotCi1UaGUgYmVoYXZpb3Igb2YgdGMgZmlsdGVycyByZW1haW5zIHRoZSBzYW1lLCB3aGVyZSBpdCB3aWxsIG92ZXJyaWRlIFRPUyBwcmlvcml0eQotY2xhc3NpZmljYXRpb24uCi0KLQogQXV0aG9yOiBQZXRlciBQLiBXYXNraWV3aWN6IEpyLiA8cGV0ZXIucC53YXNraWV3aWN6LmpyQGludGVsLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zMmlvLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zMmlvLnR4dAppbmRleCAxZTI4ZTJkLi5jM2Q2YjRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0CkBAIC01MiwxMyArNTIsMTAgQEAKIChJQTY0LCBYZW9uKSByZXN1bHRpbmcgaW4gbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCh1cHRvIDclCiBvbiBjZXJ0YWluIHBsYXRmb3JtcykuCiAKLWUuIE5BUEkuIENvbXBpbGUtdGltZSBvcHRpb24oQ09ORklHX1MySU9fTkFQSSkgZm9yIGJldHRlciBSeCBpbnRlcnJ1cHQgCi1tb2RlcmF0aW9uLgotCi1mLiBTdGF0aXN0aWNzLiBDb21wcmVoZW5zaXZlIE1BQy1sZXZlbCBhbmQgc29mdHdhcmUgc3RhdGlzdGljcyBkaXNwbGF5ZWQKK2UuIFN0YXRpc3RpY3MuIENvbXByZWhlbnNpdmUgTUFDLWxldmVsIGFuZCBzb2Z0d2FyZSBzdGF0aXN0aWNzIGRpc3BsYXllZAogdXNpbmcgImV0aHRvb2wgLVMiIG9wdGlvbi4KIAotZy4gTXVsdGktRklGTy9SaW5nLiBTdXBwb3J0cyB1cCB0byA4IHRyYW5zbWl0IHF1ZXVlcyBhbmQgcmVjZWl2ZSByaW5ncywgCitmLiBNdWx0aS1GSUZPL1JpbmcuIFN1cHBvcnRzIHVwIHRvIDggdHJhbnNtaXQgcXVldWVzIGFuZCByZWNlaXZlIHJpbmdzLAogd2l0aCBtdWx0aXBsZSBzdGVlcmluZyBvcHRpb25zLgogCiA0LiAgQ29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy91ZHBsaXRlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy91ZHBsaXRlLnR4dAppbmRleCAzODcwZjI4Li44NTVkOGRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdWRwbGl0ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3VkcGxpdGUudHh0CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgZ2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX05PX0NIRUNLLCAmdmFsdWUsIC4uLik7CiAKICAgaXMgbWVhbmluZ2xlc3MgKGFzIGluIFRDUCkuIFBhY2tldHMgd2l0aCBhIHplcm8gY2hlY2tzdW0gZmllbGQgYXJlCi0gIGlsbGVnYWwgKGNmLiBSRkMgMzgyOCwgc2VjLiAzLjEpIHdpbGwgYmUgc2lsZW50bHkgZGlzY2FyZGVkLgorICBpbGxlZ2FsIChjZi4gUkZDIDM4MjgsIHNlYy4gMy4xKSBhbmQgd2lsbCBiZSBzaWxlbnRseSBkaXNjYXJkZWQuCiAKICAgNCkgRnJhZ21lbnRhdGlvbgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CmluZGV4IGRlMmU1YzAuLmVhMWI3MGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CkBAIC00MSwxMiArNDEsMjQgQEAKICAgVkkgLSBTeXN0ZW0tb24tYS1jaGlwIGRldmljZXMgYW5kIG5vZGVzCiAgICAgMSkgRGVmaW5pbmcgY2hpbGQgbm9kZXMgb2YgYW4gU09DCiAgICAgMikgUmVwcmVzZW50aW5nIGRldmljZXMgd2l0aG91dCBhIGN1cnJlbnQgT0Ygc3BlY2lmaWNhdGlvbgotICAgICAgYSkgUEhZIG5vZGVzCi0gICAgICBiKSBJbnRlcnJ1cHQgY29udHJvbGxlcnMKLSAgICAgIGMpIENGSSBvciBKRURFQyBtZW1vcnktbWFwcGVkIE5PUiBmbGFzaAotICAgICAgZCkgNHh4L0F4b24gRU1BQyBldGhlcm5ldCBub2RlcwotICAgICAgZSkgWGlsaW54IElQIGNvcmVzCi0gICAgICBmKSBVU0IgRUhDSSBjb250cm9sbGVycworICAgICAgYSkgTURJTyBJTyBkZXZpY2UKKyAgICAgIGIpIEdpYW5mYXItY29tcGF0aWJsZSBldGhlcm5ldCBub2RlcworICAgICAgYykgUEhZIG5vZGVzCisgICAgICBkKSBJbnRlcnJ1cHQgY29udHJvbGxlcnMKKyAgICAgIGUpIEkyQworICAgICAgZikgRnJlZXNjYWxlIFNPQyBVU0IgY29udHJvbGxlcnMKKyAgICAgIGcpIEZyZWVzY2FsZSBTT0MgU0VDIFNlY3VyaXR5IEVuZ2luZXMKKyAgICAgIGgpIEJvYXJkIENvbnRyb2wgYW5kIFN0YXR1cyAoQkNTUikKKyAgICAgIGkpIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgbW9kdWxlIChRRSkKKyAgICAgIGopIENGSSBvciBKRURFQyBtZW1vcnktbWFwcGVkIE5PUiBmbGFzaAorICAgICAgaykgR2xvYmFsIFV0aWxpdGllcyBCbG9jaworICAgICAgbCkgRnJlZXNjYWxlIENvbW11bmljYXRpb25zIFByb2Nlc3NvciBNb2R1bGUKKyAgICAgIG0pIENoaXBzZWxlY3QvTG9jYWwgQnVzCisgICAgICBuKSA0eHgvQXhvbiBFTUFDIGV0aGVybmV0IG5vZGVzCisgICAgICBvKSBYaWxpbnggSVAgY29yZXMKKyAgICAgIHApIEZyZWVzY2FsZSBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlCisJICBxKSBVU0IgRUhDSSBjb250cm9sbGVycworICAgICAgcikgTURJTyBvbiBHUElPcwogCiAgIFZJSSAtIE1hcnZlbGwgRGlzY292ZXJ5IG12NjRbMzQ1XTZ4IFN5c3RlbSBDb250cm9sbGVyIGNoaXBzCiAgICAgMSkgVGhlIC9zeXN0ZW0tY29udHJvbGxlciBub2RlCkBAIC03NywxMCArODksMTIgQEAKICAgICAzKSBPcGVuUElDIEludGVycnVwdCBDb250cm9sbGVycwogICAgIDQpIElTQSBJbnRlcnJ1cHQgQ29udHJvbGxlcnMKIAotICBWSUlJIC0gU3BlY2lmeWluZyBHUElPIGluZm9ybWF0aW9uIGZvciBkZXZpY2VzCisgIElYIC0gU3BlY2lmeWluZyBHUElPIGluZm9ybWF0aW9uIGZvciBkZXZpY2VzCiAgICAgMSkgZ3Bpb3MgcHJvcGVydHkKICAgICAyKSBncGlvLWNvbnRyb2xsZXIgbm9kZXMKIAorICBYIC0gU3BlY2lmeWluZyBkZXZpY2UgcG93ZXIgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiAoc2xlZXAgcHJvcGVydHkpCisKICAgQXBwZW5kaXggQSAtIFNhbXBsZSBTT0Mgbm9kZSBmb3IgTVBDODU0MAogCiAKQEAgLTE4MTUsNiArMTgyOSw2MCBAQAogCQkgICBiaWctZW5kaWFuOwogCSAgIH07CiAKKyAgICByKSBGcmVlc2NhbGUgRGlzcGxheSBJbnRlcmZhY2UgVW5pdAorCisgICAgVGhlIEZyZWVzY2FsZSBESVUgaXMgYSBMQ0QgY29udHJvbGxlciwgd2l0aCBwcm9wZXIgaGFyZHdhcmUsIGl0IGNhbiBhbHNvCisgICAgZHJpdmUgRFZJIG1vbml0b3JzLgorCisgICAgUmVxdWlyZWQgcHJvcGVydGllczoKKyAgICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgImZzbC1kaXUiLgorICAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3QgYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSBESVUgcmVnaXN0ZXIKKyAgICAgIHNldC4KKyAgICAtIEludGVycnVwdHMgOiBvbmUgRElVIGludGVycnVwdCBzaG91bGQgYmUgZGVzY3JpYmUgaGVyZS4KKworICAgIEV4YW1wbGUgKE1QQzg2MTBIUENEKQorCWRpc3BsYXlAMmMwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxkaXUiOworCQlyZWcgPSA8MHgyYzAwMCAxMDA+OworCQlpbnRlcnJ1cHRzID0gPDcyIDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwl9OworCisgICAgcykgRnJlZXNjYWxlIG9uIGJvYXJkIEZQR0EKKworICAgIFRoaXMgaXMgdGhlIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIGZvciBvbiBib2FyZCBGUEdBLgorCisgICAgUmVxdWlyZWQgcHJvcGVyaXRpZXM6CisgICAgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJmc2wsZnBnYS1waXhpcyIuCisgICAgLSByZWcgOiBzaG91bGQgY29udGFpbiB0aGUgYWRkcmVzcyBhbmQgdGhlIGxlbmdodCBvZiB0aGUgRlBQR0EgcmVnaXN0ZXIKKyAgICAgIHNldC4KKworICAgIEV4YW1wbGUgKE1QQzg2MTBIUENEKQorCWJvYXJkLWNvbnRyb2xAZTgwMDAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxmcGdhLXBpeGlzIjsKKwkJcmVnID0gPDB4ZTgwMDAwMDAgMzI+OworCX07CisKKyAgIHIpIE1ESU8gb24gR1BJT3MKKworICAgQ3VycmVudGx5IGRlZmluZWQgY29tcGF0aWJsZXM6CisgICAtIHZpcnR1YWwsZ3Bpby1tZGlvCisKKyAgIE1EQyBhbmQgTURJTyBsaW5lcyBjb25uZWN0ZWQgdG8gR1BJTyBjb250cm9sbGVycyBhcmUgbGlzdGVkIGluIHRoZQorICAgZ3Bpb3MgcHJvcGVydHkgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gVklJSS4xIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CisKKyAgIE1EQywgTURJTy4KKworICAgRXhhbXBsZToKKworCW1kaW8geworCQljb21wYXRpYmxlID0gInZpcnR1YWwsbWRpby1ncGlvIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlncGlvcyA9IDwmcWVfcGlvX2EgMTEKKwkJCSAmcWVfcGlvX2MgNj47CisJfTsKKwogVklJIC0gTWFydmVsbCBEaXNjb3ZlcnkgbXY2NFszNDVdNnggU3lzdGVtIENvbnRyb2xsZXIgY2hpcHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTI0MjIsOCArMjQ5MCw4IEBACiAJMiA9ICBoaWdoIHRvIGxvdyBlZGdlIHNlbnNpdGl2ZSB0eXBlIGVuYWJsZWQKIAkzID0gIGxvdyB0byBoaWdoIGVkZ2Ugc2Vuc2l0aXZlIHR5cGUgZW5hYmxlZAogCi1WSUlJIC0gU3BlY2lmeWluZyBHUElPIGluZm9ybWF0aW9uIGZvciBkZXZpY2VzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJWCAtIFNwZWNpZnlpbmcgR1BJTyBpbmZvcm1hdGlvbiBmb3IgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogMSkgZ3Bpb3MgcHJvcGVydHkKIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNDcxLDExNiArMjUzOSwxNTEgQEAKIAkJZ3Bpby1jb250cm9sbGVyOwogCX07CiAKK1ggLSBTcGVjaWZ5aW5nIERldmljZSBQb3dlciBNYW5hZ2VtZW50IEluZm9ybWF0aW9uIChzbGVlcCBwcm9wZXJ0eSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRGV2aWNlcyBvbiBTT0NzIG9mdGVuIGhhdmUgbWVjaGFuaXNtcyBmb3IgcGxhY2luZyBkZXZpY2VzIGludG8gbG93LXBvd2VyCitzdGF0ZXMgdGhhdCBhcmUgZGVjb3VwbGVkIGZyb20gdGhlIGRldmljZXMnIG93biByZWdpc3RlciBibG9ja3MuICBTb21ldGltZXMsCit0aGlzIGluZm9ybWF0aW9uIGlzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBhIGNlbGwtaW5kZXggcHJvcGVydHkgY2FuCityZWFzb25hYmx5IGRlc2NyaWJlLiAgVGh1cywgZWFjaCBkZXZpY2UgY29udHJvbGxlZCBpbiBzdWNoIGEgbWFubmVyCittYXkgY29udGFpbiBhICJzbGVlcCIgcHJvcGVydHkgd2hpY2ggZGVzY3JpYmVzIHRoZXNlIGNvbm5lY3Rpb25zLgorCitUaGUgc2xlZXAgcHJvcGVydHkgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgc2xlZXAgcmVzb3VyY2VzLCBlYWNoIG9mCit3aGljaCBjb25zaXN0cyBvZiBhIHBoYW5kbGUgdG8gYSBzbGVlcCBjb250cm9sbGVyLCBmb2xsb3dlZCBieSBhCitjb250cm9sbGVyLXNwZWNpZmljIHNsZWVwIHNwZWNpZmllciBvZiB6ZXJvIG9yIG1vcmUgY2VsbHMuCisKK1RoZSBzZW1hbnRpY3Mgb2Ygd2hhdCB0eXBlIG9mIGxvdyBwb3dlciBtb2RlcyBhcmUgcG9zc2libGUgYXJlIGRlZmluZWQKK2J5IHRoZSBzbGVlcCBjb250cm9sbGVyLiAgU29tZSBleGFtcGxlcyBvZiB0aGUgdHlwZXMgb2YgbG93IHBvd2VyIG1vZGVzCit0aGF0IG1heSBiZSBzdXBwb3J0ZWQgYXJlOgorCisgLSBEeW5hbWljOiBUaGUgZGV2aWNlIG1heSBiZSBkaXNhYmxlZCBvciBlbmFibGVkIGF0IGFueSB0aW1lLgorIC0gU3lzdGVtIFN1c3BlbmQ6IFRoZSBkZXZpY2UgbWF5IHJlcXVlc3QgdG8gYmUgZGlzYWJsZWQgb3IgcmVtYWluCisgICBhd2FrZSBkdXJpbmcgc3lzdGVtIHN1c3BlbmQsIGJ1dCB3aWxsIG5vdCBiZSBkaXNhYmxlZCB1bnRpbCB0aGVuLgorIC0gUGVybWFuZW50OiBUaGUgZGV2aWNlIGlzIGRpc2FibGVkIHBlcm1hbmVudGx5ICh1bnRpbCB0aGUgbmV4dCBoYXJkCisgICByZXNldCkuCisKK1NvbWUgZGV2aWNlcyBtYXkgc2hhcmUgYSBjbG9jayBkb21haW4gd2l0aCBlYWNoIG90aGVyLCBzdWNoIHRoYXQgdGhleSBzaG91bGQKK29ubHkgYmUgc3VzcGVuZGVkIHdoZW4gbm9uZSBvZiB0aGUgZGV2aWNlcyBhcmUgaW4gdXNlLiAgV2hlcmUgcmVhc29uYWJsZSwKK3N1Y2ggbm9kZXMgc2hvdWxkIGJlIHBsYWNlZCBvbiBhIHZpcnR1YWwgYnVzLCB3aGVyZSB0aGUgYnVzIGhhcyB0aGUgc2xlZXAKK3Byb3BlcnR5LiAgSWYgdGhlIGNsb2NrIGRvbWFpbiBpcyBzaGFyZWQgYW1vbmcgZGV2aWNlcyB0aGF0IGNhbm5vdCBiZQorcmVhc29uYWJseSBncm91cGVkIGluIHRoaXMgbWFubmVyLCB0aGVuIGNyZWF0ZSBhIHZpcnR1YWwgc2xlZXAgY29udHJvbGxlcgorKHNpbWlsYXIgdG8gYW4gaW50ZXJydXB0IG5leHVzLCBleGNlcHQgdGhhdCBkZWZpbmluZyBhIHN0YW5kYXJkaXplZAorc2xlZXAtbWFwIHNob3VsZCB3YWl0IHVudGlsIGl0cyBuZWNlc3NpdHkgaXMgZGVtb25zdHJhdGVkKS4KKwogQXBwZW5kaXggQSAtIFNhbXBsZSBTT0Mgbm9kZSBmb3IgTVBDODU0MAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1Ob3RlIHRoYXQgdGhlICNhZGRyZXNzLWNlbGxzIGFuZCAjc2l6ZS1jZWxscyBmb3IgdGhlIFNvQyBub2RlCi1pbiB0aGlzIGV4YW1wbGUgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgbGlzdGVkOyB0aGVzZSBhcmUgbGlrZWx5Ci1ub3QgbmVjZXNzYXJ5IGFzIHRoZXkgYXJlIHVzdWFsbHkgdGhlIHNhbWUgYXMgdGhlIHJvb3Qgbm9kZS4KLQotCXNvYzg1NDBAZTAwMDAwMDAgeworCXNvY0BlMDAwMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1jY3NyIiwgInNpbXBsZS1idXMiOwogCQlkZXZpY2VfdHlwZSA9ICJzb2MiOwotCQlyYW5nZXMgPSA8MDAwMDAwMDAgZTAwMDAwMDAgMDAxMDAwMDA+Ci0JCXJlZyA9IDxlMDAwMDAwMCAwMDAwMzAwMD47CisJCXJhbmdlcyA9IDwweDAwMDAwMDAwIDB4ZTAwMDAwMDAgMHgwMDEwMDAwMD4KIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKLQotCQltZGlvQDI0NTIwIHsKLQkJCXJlZyA9IDwyNDUyMCAyMD47Ci0JCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKLQkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0KLQkJCWV0aGVybmV0LXBoeUAwIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDA+Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwzNSAxPjsKLQkJCQlyZWcgPSA8MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0KLQkJCWV0aGVybmV0LXBoeUAxIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDE+Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwzNSAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0KLQkJCWV0aGVybmV0LXBoeUAzIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDI+Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwzNSAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0KLQkJfTsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmcGljPjsKIAogCQlldGhlcm5ldEAyNDAwMCB7Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKLQkJCW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDxkIDMgZSAzIDEyIDM+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDA+OworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgInNpbXBsZS1idXMiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXNsZWVwID0gPCZwbWMgMDAwMDAwODA+OworCQkJcmFuZ2VzOworCisJCQltZGlvQDI0NTIwIHsKKwkJCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHRzID0gPDcgMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlldGhlcm5ldEAyNTAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MjUwMDAgMTAwMD47Ci0JCQltYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDEgXTsKLQkJCWludGVycnVwdHMgPSA8MTMgMyAxNCAzIDE4IDM+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDE+OworCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMSBdOworCQkJaW50ZXJydXB0cyA9IDwxMyAyIDE0IDIgMTggMj47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwkJCXNsZWVwID0gPCZwbWMgMDAwMDAwNDA+OwogCQl9OwogCiAJCWV0aGVybmV0QDI2MDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIkZFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDI2MDAwIDEwMDA+OwotCQkJbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAyIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDE5IDM+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDI+OworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMiBdOworCQkJaW50ZXJydXB0cyA9IDw0MSAyPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCQkJc2xlZXAgPSA8JnBtYyAwMDAwMDAyMD47CiAJCX07CiAKIAkJc2VyaWFsQDQ1MDAgewotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8NDUwMCAxMDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDwxYSAzPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtZHVhcnQiLCAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDAwMDAwMDAyPjsKKwkJCXJhbmdlczsKKworCQkJc2VyaWFsQDQ1MDAgeworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCX07CisKKwkJCXNlcmlhbEA0NjAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQl9OwogCQl9OwogCi0JCXBpY0A0MDAwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDQwMDAwPjsKKwkJcGljOiBwaWNANDAwMDAgewogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKLQkJCXJlZyA9IDw0MDAwMCA0MDAwMD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CiAJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOwogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCiAJCWkyY0AzMDAwIHsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxYiAzPjsKLQkJCXJlZyA9IDwzMDAwIDE4PjsKLQkJCWRldmljZV90eXBlID0gImkyYyI7CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CiAJCQljb21wYXRpYmxlICA9ICJmc2wtaTJjIjsKIAkJCWRmc3JyOworCQkJc2xlZXAgPSA8JnBtYyAwMDAwMDAwND47CiAJCX07CiAKKwkJcG1jOiBwb3dlckBlMDA3MCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLXBtYyIsICJmc2wsbXBjODU0OC1wbWMiOworCQkJcmVnID0gPDB4ZTAwNzAgMHgyMD47CisJCX07CiAJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9ncGlvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODE1ZGZlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2dwaW8udHh0CkBAIC0wLDAgKzEsMzggQEAKK0V2ZXJ5IEdQSU8gY29udHJvbGxlciBub2RlIG11c3QgaGF2ZSAjZ3Bpby1jZWxscyBwcm9wZXJ0eSBkZWZpbmVkLAordGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgdG8gdHJhbnNsYXRlIGdwaW8tc3BlY2lmaWVycy4KKworT24gQ1BNMSBkZXZpY2VzLCBhbGwgcG9ydHMgYXJlIHVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXRzLgorUG9ydHMgQSwgQyBhbmQgRCBhcmUgMTZiaXQgcG9ydHMgYW5kIFBvcnRzIEIgYW5kIEUgYXJlIDMyYml0IHBvcnRzLgorCitPbiBDUE0yIGRldmljZXMsIGFsbCBwb3J0cyBhcmUgMzJiaXQgcG9ydHMgYW5kIHVzZSBhIGNvbW1vbiByZWdpc3RlciBsYXlvdXQuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiAiZnNsLGNwbTEtcGFyaW8tYmFuay1hIiwgImZzbCxjcG0xLXBhcmlvLWJhbmstYiIsCisgICJmc2wsY3BtMS1wYXJpby1iYW5rLWMiLCAiZnNsLGNwbTEtcGFyaW8tYmFuay1kIiwKKyAgImZzbCxjcG0xLXBhcmlvLWJhbmstZSIsICJmc2wsY3BtMi1wYXJpby1iYW5rIgorLSAjZ3Bpby1jZWxscyA6IFNob3VsZCBiZSB0d28uIFRoZSBmaXJzdCBjZWxsIGlzIHRoZSBwaW4gbnVtYmVyIGFuZCB0aGUKKyAgc2Vjb25kIGNlbGwgaXMgdXNlZCB0byBzcGVjaWZ5IG9wdGlvbmFsIHBhcmFtdGVycyAoY3VycmVudGx5IHVudXNlZCkuCistIGdwaW8tY29udHJvbGxlciA6IE1hcmtzIHRoZSBwb3J0IGFzIEdQSU8gY29udHJvbGxlci4KKworRXhhbXBsZSBvZiB0aHJlZSBTT0MgR1BJTyBiYW5rcyBkZWZpbmVkIGFzIGdwaW8tY29udHJvbGxlciBub2RlczoKKworCUNQTTFfUElPX0E6IGdwaW8tY29udHJvbGxlckA5NTAgeworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsY3BtMS1wYXJpby1iYW5rLWEiOworCQlyZWcgPSA8MHg5NTAgMHgxMD47CisJCWdwaW8tY29udHJvbGxlcjsKKwl9OworCisJQ1BNMV9QSU9fQjogZ3Bpby1jb250cm9sbGVyQGFiOCB7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gImZzbCxjcG0xLXBhcmlvLWJhbmstYiI7CisJCXJlZyA9IDwweGFiOCAweDEwPjsKKwkJZ3Bpby1jb250cm9sbGVyOworCX07CisKKwlDUE0xX1BJT19FOiBncGlvLWNvbnRyb2xsZXJAYWM4IHsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCWNvbXBhdGlibGUgPSAiZnNsLGNwbTEtcGFyaW8tYmFuay1lIjsKKwkJcmVnID0gPDB4YWM4IDB4MTg+OworCQlncGlvLWNvbnRyb2xsZXI7CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS91c2IudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3VzYi50eHQKaW5kZXggYzhmNDRkNi4uOWNjZDVmMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3VzYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3VzYi50eHQKQEAgLTEsMjIgKzEsMzcgQEAKLSogVVNCIChVbml2ZXJzYWwgU2VyaWFsIEJ1cyBDb250cm9sbGVyKQorRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBVU0IgQ29udHJvbGxlcgogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlIDogY291bGQgYmUgInFlX3VkYyIgb3IgImZoY2ktaGNkIi4KLS0gbW9kZSA6IHRoZSBjb3VsZCBiZSAiaG9zdCIgb3IgInNsYXZlIi4KLS0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZQotLSBpbnRlcnJ1cHRzIDogPGEgYj4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBhbmQgYiBpcyBhCi0gIGZpZWxkIHRoYXQgcmVwcmVzZW50cyBhbiBlbmNvZGluZyBvZiB0aGUgc2Vuc2UgYW5kIGxldmVsCi0gIGluZm9ybWF0aW9uIGZvciB0aGUgaW50ZXJydXB0LiAgVGhpcyBzaG91bGQgYmUgZW5jb2RlZCBiYXNlZCBvbgotICB0aGUgaW5mb3JtYXRpb24gaW4gc2VjdGlvbiAyKSBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW50ZXJydXB0Ci0gIGNvbnRyb2xsZXIgeW91IGhhdmUuCi0tIGludGVycnVwdC1wYXJlbnQgOiB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQKLSAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCistIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgImZzbCw8Y2hpcD4tcWUtdXNiIiwgImZzbCxtcGM4MzIzLXFlLXVzYiIuCistIHJlZyA6IHRoZSBmaXJzdCB0d28gY2VsbHMgc2hvdWxkIGNvbnRhaW4gdXNiIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQKKyAgbGVuZ3RoLCB0aGUgbmV4dCB0d28gdHdvIGNlbGxzIHNob3VsZCBjb250YWluIFBSQU0gbG9jYXRpb24gYW5kCisgIGxlbmd0aC4KKy0gaW50ZXJydXB0cyA6IHNob3VsZCBjb250YWluIFVTQiBpbnRlcnJ1cHQuCistIGludGVycnVwdC1wYXJlbnQgOiBpbnRlcnJ1cHQgc291cmNlIHBoYW5kbGUuCistIGZzbCxmdWxsc3BlZWQtY2xvY2sgOiBzcGVjaWZpZXMgdGhlIGZ1bGwgc3BlZWQgVVNCIGNsb2NrIHNvdXJjZToKKyAgIm5vbmUiOiBjbG9jayBzb3VyY2UgaXMgZGlzYWJsZWQKKyAgImJyZzEiIHRocm91Z2ggImJyZzE2IjogY2xvY2sgc291cmNlIGlzIEJSRzEtQlJHMTYsIHJlc3BlY3RpdmVseQorICAiY2xrMSIgdGhyb3VnaCAiY2xrMjQiOiBjbG9jayBzb3VyY2UgaXMgQ0xLMS1DTEsyNCwgcmVzcGVjdGl2ZWx5CistIGZzbCxsb3dzcGVlZC1jbG9jayA6IHNwZWNpZmllcyB0aGUgbG93IHNwZWVkIFVTQiBjbG9jayBzb3VyY2U6CisgICJub25lIjogY2xvY2sgc291cmNlIGlzIGRpc2FibGVkCisgICJicmcxIiB0aHJvdWdoICJicmcxNiI6IGNsb2NrIHNvdXJjZSBpcyBCUkcxLUJSRzE2LCByZXNwZWN0aXZlbHkKKyAgImNsazEiIHRocm91Z2ggImNsazI0IjogY2xvY2sgc291cmNlIGlzIENMSzEtQ0xLMjQsIHJlc3BlY3RpdmVseQorLSBodWItcG93ZXItYnVkZ2V0IDogVVNCIHBvd2VyIGJ1ZGdldCBmb3IgdGhlIHJvb3QgaHViLCBpbiBtQS4KKy0gZ3Bpb3MgOiBzaG91bGQgc3BlY2lmeSBHUElPcyBpbiB0aGlzIG9yZGVyOiBVU0JPRSwgVVNCVFAsIFVTQlROLCBVU0JSUCwKKyAgVVNCUk4sIFNQRUVEIChvcHRpb25hbCksIGFuZCBQT1dFUiAob3B0aW9uYWwpLgogCi1FeGFtcGxlKHNsYXZlKToKLQl1c2JANmMwIHsKLQkJY29tcGF0aWJsZSA9ICJxZV91ZGMiOwotCQlyZWcgPSA8NmMwIDQwPjsKLQkJaW50ZXJydXB0cyA9IDw4YiAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQltb2RlID0gInNsYXZlIjsKLQl9OworRXhhbXBsZToKKwordXNiQDZjMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1xZS11c2IiLCAiZnNsLG1wYzgzMjMtcWUtdXNiIjsKKwlyZWcgPSA8MHg2YzAgMHg0MCAweDhiMDAgMHgxMDA+OworCWludGVycnVwdHMgPSA8MTE+OworCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OworCWZzbCxmdWxsc3BlZWQtY2xvY2sgPSAiY2xrMjEiOworCWdwaW9zID0gPCZxZV9waW9fYiAgMiAwIC8qIFVTQk9FICovCisJCSAmcWVfcGlvX2IgIDMgMCAvKiBVU0JUUCAqLworCQkgJnFlX3Bpb19iICA4IDAgLyogVVNCVE4gKi8KKwkJICZxZV9waW9fYiAgOSAwIC8qIFVTQlJQICovCisJCSAmcWVfcGlvX2IgMTEgMCAvKiBVU0JSTiAqLworCQkgJnFlX3Bpb19lIDIwIDAgLyogU1BFRUQgKi8KKwkJICZxZV9waW9fZSAyMSAwIC8qIFBPV0VSICovPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tY3UtbXBjODM0OWVtaXR4LnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21jdS1tcGM4MzQ5ZW1pdHgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNzY2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tY3UtbXBjODM0OWVtaXR4LnR4dApAQCAtMCwwICsxLDE3IEBACitGcmVlc2NhbGUgTVBDODM0OUUtbUlUWC1jb21wYXRpYmxlIFBvd2VyIE1hbmFnZW1lbnQgTWljcm8gQ29udHJvbGxlciBVbml0IChNQ1UpCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiAiZnNsLDxtY3UtY2hpcD4tPGJvYXJkPiIsICJmc2wsbWN1LW1wYzgzNDllbWl0eCIuCistIHJlZyA6IHNob3VsZCBzcGVjaWZ5IEkyQyBhZGRyZXNzICgweDBhKS4KKy0gI2dwaW8tY2VsbHMgOiBzaG91bGQgYmUgMi4KKy0gZ3Bpby1jb250cm9sbGVyIDogc2hvdWxkIGJlIHByZXNlbnQuCisKK0V4YW1wbGU6CisKK21jdUAwYSB7CisJI2dwaW8tY2VsbHMgPSA8Mj47CisJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNDllbWl0eCIsCisJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKKwlyZWcgPSA8MHgwYT47CisJZ3Bpby1jb250cm9sbGVyOworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3BtYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9wbWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZjZmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9wbWMudHh0CkBAIC0wLDAgKzEsNjMgQEAKKyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sbGVyCisKK1Byb3BlcnRpZXM6CistIGNvbXBhdGlibGU6ICJmc2wsPGNoaXA+LXBtYyIuCisKKyAgImZzbCxtcGM4MzQ5LXBtYyIgc2hvdWxkIGJlIGxpc3RlZCBmb3IgYW55IGNoaXAgd2hvc2UgUE1DIGlzCisgIGNvbXBhdGlibGUuICAiZnNsLG1wYzgzMTMtcG1jIiBzaG91bGQgYWxzbyBiZSBsaXN0ZWQgZm9yIGFueSBjaGlwCisgIHdob3NlIFBNQyBpcyBjb21wYXRpYmxlLCBhbmQgaW1wbGllcyBkZWVwLXNsZWVwIGNhcGFiaWxpdHkuCisKKyAgImZzbCxtcGM4NTQ4LXBtYyIgc2hvdWxkIGJlIGxpc3RlZCBmb3IgYW55IGNoaXAgd2hvc2UgUE1DIGlzCisgIGNvbXBhdGlibGUuICAiZnNsLG1wYzg1MzYtcG1jIiBzaG91bGQgYWxzbyBiZSBsaXN0ZWQgZm9yIGFueSBjaGlwCisgIHdob3NlIFBNQyBpcyBjb21wYXRpYmxlLCBhbmQgaW1wbGllcyBkZWVwLXNsZWVwIGNhcGFiaWxpdHkuCisKKyAgImZzbCxtcGM4NjQxZC1wbWMiIHNob3VsZCBiZSBsaXN0ZWQgZm9yIGFueSBjaGlwIHdob3NlIFBNQyBpcworICBjb21wYXRpYmxlOyBhbGwgc3RhdGVtZW50cyBiZWxvdyB0aGF0IGFwcGx5IHRvICJmc2wsbXBjODU0OC1wbWMiIGFsc28KKyAgYXBwbHkgdG8gImZzbCxtcGM4NjQxZC1wbWMiLgorCisgIENvbXBhdGliaWxpdHkgZG9lcyBub3QgaW5jbHVkZSBiaXQgYXNzaWdtZW50cyBpbiBTQ0NSL1BNQ0RSL0RFVkRJU1I7IHRoZXNlCisgIGJpdCBhc3NpZ21lbnRzIGFyZSBpbmRpY2F0ZWQgdmlhIHRoZSBzbGVlcCBzcGVjaWZpZXIgaW4gZWFjaCBkZXZpY2UncworICBzbGVlcCBwcm9wZXJ0eS4KKworLSByZWc6IEZvciBkZXZpY2VzIGNvbXBhdGlibGUgd2l0aCAiZnNsLG1wYzgzNDktcG1jIiwgdGhlIGZpcnN0IHJlc291cmNlCisgIGlzIHRoZSBQTUMgYmxvY2ssIGFuZCB0aGUgc2Vjb25kIHJlc291cmNlIGlzIHRoZSBDbG9jayBDb25maWd1cmF0aW9uCisgIGJsb2NrLgorCisgIEZvciBkZXZpY2VzIGNvbXBhdGlibGUgd2l0aCAiZnNsLG1wYzg1NDgtcG1jIiwgdGhlIGZpcnN0IHJlc291cmNlCisgIGlzIGEgMzItYnl0ZSBibG9jayBiZWdpbm5pbmcgd2l0aCBERVZESVNSLgorCistIGludGVycnVwdHM6IEZvciAiZnNsLG1wYzgzNDktcG1jIi1jb21wYXRpYmxlIGRldmljZXMsIHRoZSBmaXJzdAorICByZXNvdXJjZSBpcyB0aGUgUE1DIGJsb2NrIGludGVycnVwdC4KKworLSBmc2wsbXBjODMxMy13YWtldXAtdGltZXI6IEZvciAiZnNsLG1wYzgzMTMtcG1jIi1jb21wYXRpYmxlIGRldmljZXMsCisgIHRoaXMgaXMgYSBwaGFuZGxlIHRvIGFuICJmc2wsZ3RtIiBub2RlIG9uIHdoaWNoIHRpbWVyIDQgY2FuIGJlIHVzZWQgYXMKKyAgYSB3YWtldXAgc291cmNlIGZyb20gZGVlcCBzbGVlcC4KKworU2xlZXAgc3BlY2lmaWVyczoKKworICBmc2wsbXBjODM0OS1wbWM6IFNsZWVwIHNwZWNpZmllcnMgY29uc2lzdCBvZiBvbmUgY2VsbC4gIEZvciBlYWNoIGJpdAorICB0aGF0IGlzIHNldCBpbiB0aGUgY2VsbCwgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIFNDQ1Igd2lsbCBiZSBzYXZlZAorICBhbmQgY2xlYXJlZCBvbiBzdXNwZW5kLCBhbmQgcmVzdG9yZWQgb24gcmVzdW1lLiAgVGhpcyBzbGVlcCBjb250cm9sbGVyCisgIHN1cHBvcnRzIGRpc2FibGluZyBhbmQgcmVzdW1pbmcgZGV2aWNlcyBhdCBhbnkgdGltZS4KKworICBmc2wsbXBjODUzNi1wbWM6IFNsZWVwIHNwZWNpZmllcnMgY29uc2lzdCBvZiB0aHJlZSBjZWxscywgdGhlIHRoaXJkIG9mCisgIHdoaWNoIHdpbGwgYmUgT1JlZCBpbnRvIFBNQ0RSIHVwb24gc3VzcGVuZCwgYW5kIGNsZWFyZWQgZnJvbSBQTUNEUgorICB1cG9uIHJlc3VtZS4gIFRoZSBmaXJzdCB0d28gY2VsbHMgYXJlIGFzIGRlc2NyaWJlZCBmb3IgZnNsLG1wYzg1NzgtcG1jLgorICBUaGlzIHNsZWVwIGNvbnRyb2xsZXIgb25seSBzdXBwb3J0cyBkaXNhYmxpbmcgZGV2aWNlcyBkdXJpbmcgc3lzdGVtCisgIHNsZWVwLCBvciBwZXJtYW5lbnRseS4KKworICBmc2wsbXBjODU0OC1wbWM6IFNsZWVwIHNwZWNpZmllcnMgY29uc2lzdCBvZiBvbmUgb3IgdHdvIGNlbGxzLCB0aGUKKyAgZmlyc3Qgb2Ygd2hpY2ggd2lsbCBiZSBPUmVkIGludG8gREVWRElTUiAoYW5kIHRoZSBzZWNvbmQgaW50bworICBERVZESVNSMiwgaWYgcHJlc2VudCAtLSB0aGlzIGNlbGwgc2hvdWxkIGJlIHplcm8gb3IgYWJzZW50IGlmIHRoZQorICBoYXJkd2FyZSBkb2VzIG5vdCBoYXZlIERFVkRJU1IyKSB1cG9uIGEgcmVxdWVzdCBmb3IgcGVybWFuZW50IGRldmljZQorICBkaXNhYmxpbmcuICBUaGlzIHNsZWVwIGNvbnRyb2xsZXIgZG9lcyBub3Qgc3VwcG9ydCBjb25maWd1cmluZyBkZXZpY2VzCisgIHRvIGRpc2FibGUgZHVyaW5nIHN5c3RlbSBzbGVlcCAodW5sZXNzIHN1cHBvcnRlZCBieSBhbm90aGVyIGNvbXBhdGlibGUKKyAgbWF0Y2gpLCBvciBkeW5hbWljYWxseS4KKworRXhhbXBsZToKKworCXBvd2VyQGIwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8ODAgOD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKaW5kZXggNTgzZWY2Yi4uY2Y1NWZhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKQEAgLTI0LDQ2ICsyNCwzOSBAQAogCiAqIEdpYW5mYXItY29tcGF0aWJsZSBldGhlcm5ldCBub2RlcwogCi1SZXF1aXJlZCBwcm9wZXJ0aWVzOgorUHJvcGVydGllczoKIAogICAtIGRldmljZV90eXBlIDogU2hvdWxkIGJlICJuZXR3b3JrIgogICAtIG1vZGVsIDogTW9kZWwgb2YgdGhlIGRldmljZS4gIENhbiBiZSAiVFNFQyIsICJlVFNFQyIsIG9yICJGRUMiCiAgIC0gY29tcGF0aWJsZSA6IFNob3VsZCBiZSAiZ2lhbmZhciIKICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCi0gIC0gbWFjLWFkZHJlc3MgOiBMaXN0IG9mIGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgZXRoZXJuZXQgYWRkcmVzcyBvZgorICAtIGxvY2FsLW1hYy1hZGRyZXNzIDogTGlzdCBvZiBieXRlcyByZXByZXNlbnRpbmcgdGhlIGV0aGVybmV0IGFkZHJlc3Mgb2YKICAgICB0aGlzIGNvbnRyb2xsZXIKLSAgLSBpbnRlcnJ1cHRzIDogPGEgYj4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBhbmQgYiBpcyBhCi0gICAgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQgbGV2ZWwKLSAgICBpbmZvcm1hdGlvbiBmb3IgdGhlIGludGVycnVwdC4gIFRoaXMgc2hvdWxkIGJlIGVuY29kZWQgYmFzZWQgb24KLSAgICB0aGUgaW5mb3JtYXRpb24gaW4gc2VjdGlvbiAyKSBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW50ZXJydXB0Ci0gICAgY29udHJvbGxlciB5b3UgaGF2ZS4KLSAgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0Ci0gICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisgIC0gaW50ZXJydXB0cyA6IEZvciBGRUMgZGV2aWNlcywgdGhlIGZpcnN0IGludGVycnVwdCBpcyB0aGUgZGV2aWNlJ3MKKyAgICBpbnRlcnJ1cHQuICBGb3IgVFNFQyBhbmQgZVRTRUMgZGV2aWNlcywgdGhlIGZpcnN0IGludGVycnVwdCBpcworICAgIHRyYW5zbWl0LCB0aGUgc2Vjb25kIGlzIHJlY2VpdmUsIGFuZCB0aGUgdGhpcmQgaXMgZXJyb3IuCiAgIC0gcGh5LWhhbmRsZSA6IFRoZSBwaGFuZGxlIGZvciB0aGUgUEhZIGNvbm5lY3RlZCB0byB0aGlzIGV0aGVybmV0CiAgICAgY29udHJvbGxlci4KICAgLSBmaXhlZC1saW5rIDogPGEgYiBjIGQgZT4gd2hlcmUgYSBpcyBlbXVsYXRlZCBwaHkgaWQgLSBjaG9vc2UgYW55LAogICAgIGJ1dCB1bmlxdWUgdG8gdGhlIGFsbCBzcGVjaWZpZWQgZml4ZWQtbGlua3MsIGIgaXMgZHVwbGV4IC0gMCBoYWxmLAogICAgIDEgZnVsbCwgYyBpcyBsaW5rIHNwZWVkIC0gZCMxMC9kIzEwMC9kIzEwMDAsIGQgaXMgcGF1c2UgLSAwIG5vCiAgICAgcGF1c2UsIDEgcGF1c2UsIGUgaXMgYXN5bV9wYXVzZSAtIDAgbm8gYXN5bV9wYXVzZSwgMSBhc3ltX3BhdXNlLgotCi1SZWNvbW1lbmRlZCBwcm9wZXJ0aWVzOgotCiAgIC0gcGh5LWNvbm5lY3Rpb24tdHlwZSA6IGEgc3RyaW5nIG5hbWluZyB0aGUgY29udHJvbGxlci9QSFkgaW50ZXJmYWNlIHR5cGUsCiAgICAgaS5lLiwgIm1paSIgKGRlZmF1bHQpLCAicm1paSIsICJnbWlpIiwgInJnbWlpIiwgInJnbWlpLWlkIiwgInNnbWlpIiwKICAgICAidGJpIiwgb3IgInJ0YmkiLiAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgaWYgdGhlIGNvbm5lY3Rpb24KICAgICBpcyBvZiB0eXBlICJyZ21paS1pZCIsIGFzIGFsbCBvdGhlciBjb25uZWN0aW9uIHR5cGVzIGFyZSBkZXRlY3RlZCBieQogICAgIGhhcmR3YXJlLgotCisgIC0gZnNsLG1hZ2ljLXBhY2tldCA6IElmIHByZXNlbnQsIGluZGljYXRlcyB0aGF0IHRoZSBoYXJkd2FyZSBzdXBwb3J0cworICAgIHdha2luZyB1cCB2aWEgbWFnaWMgcGFja2V0LgogCiBFeGFtcGxlOgogCWV0aGVybmV0QDI0MDAwIHsKLQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQltb2RlbCA9ICJUU0VDIjsKIAkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJcmVnID0gPDI0MDAwIDEwMDA+OwotCQltYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDAgXTsKLQkJaW50ZXJydXB0cyA9IDxkIDMgZSAzIDEyIDM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKLQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAwPgorCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDAgXTsKKwkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlwaHktaGFuZGxlID0gPCZwaHkwPgogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC91cG0tbmFuZC50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC91cG0tbmFuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhMDRkNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3VwbS1uYW5kLnR4dApAQCAtMCwwICsxLDI4IEBACitGcmVlc2NhbGUgTG9jYWxidXMgVVBNIHByb2dyYW1tZWQgdG8gd29yayB3aXRoIE5BTkQgZmxhc2gKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6ICJmc2wsdXBtLW5hbmQiLgorLSByZWcgOiBzaG91bGQgc3BlY2lmeSBsb2NhbGJ1cyBjaGlwIHNlbGVjdCBhbmQgc2l6ZSB1c2VkIGZvciB0aGUgY2hpcC4KKy0gZnNsLHVwbS1hZGRyLW9mZnNldCA6IFVQTSBwYXR0ZXJuIG9mZnNldCBmb3IgdGhlIGFkZHJlc3MgbGF0Y2guCistIGZzbCx1cG0tY21kLW9mZnNldCA6IFVQTSBwYXR0ZXJuIG9mZnNldCBmb3IgdGhlIGNvbW1hbmQgbGF0Y2guCistIGdwaW9zIDogbWF5IHNwZWNpZnkgb3B0aW9uYWwgR1BJTyBjb25uZWN0ZWQgdG8gdGhlIFJlYWR5LU5vdC1CdXN5IHBpbi4KKworRXhhbXBsZToKKwordXBtQDEsMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsdXBtLW5hbmQiOworCXJlZyA9IDwxIDAgMT47CisJZnNsLHVwbS1hZGRyLW9mZnNldCA9IDwxNj47CisJZnNsLHVwbS1jbWQtb2Zmc2V0ID0gPDg+OworCWdwaW9zID0gPCZxZV9waW9fZSAxOCAwPjsKKworCWZsYXNoIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gIi4uLiI7CisKKwkJcGFydGl0aW9uQDAgeworCQkJLi4uCisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2dwaW8vbGVkLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZ3Bpby9sZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNTFmNGMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL2xlZC50eHQKQEAgLTAsMCArMSwxNSBAQAorTEVEIGNvbm5lY3RlZCB0byBHUElPCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgImdwaW8tbGVkIi4KKy0gbGFiZWwgOiAob3B0aW9uYWwpIHRoZSBsYWJlbCBmb3IgdGhpcyBMRUQuIElmIG9taXR0ZWQsIHRoZSBsYWJlbCBpcworICB0YWtlbiBmcm9tIHRoZSBub2RlIG5hbWUgKGV4Y2x1ZGluZyB0aGUgdW5pdCBhZGRyZXNzKS4KKy0gZ3Bpb3MgOiBzaG91bGQgc3BlY2lmeSBMRUQgR1BJTy4KKworRXhhbXBsZToKKworbGVkQDAgeworCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWQiOworCWxhYmVsID0gImhkZCI7CisJZ3Bpb3MgPSA8Jm1jdV9waW8gMCAxPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Jma2lsbC50eHQgYi9Eb2N1bWVudGF0aW9uL3Jma2lsbC50eHQKaW5kZXggYTgzZmYyMy4uMDg0M2VkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcmZraWxsLnR4dApAQCAtMSw4OSArMSw1MjggQEAKIHJma2lsbCAtIFJGIHN3aXRjaCBzdWJzeXN0ZW0gc3VwcG9ydAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLTEgSW1wbGVtZW50YXRpb24gZGV0YWlscwotMiBEcml2ZXIgc3VwcG9ydAotMyBVc2Vyc3BhY2Ugc3VwcG9ydAorMSBJbnRyb2R1Y3Rpb24KKzIgSW1wbGVtZW50YXRpb24gZGV0YWlscworMyBLZXJuZWwgZHJpdmVyIGd1aWRlbGluZXMKKzMuMSB3aXJlbGVzcyBkZXZpY2UgZHJpdmVycworMy4yIHBsYXRmb3JtL3N3aXRjaCBkcml2ZXJzCiszLjMgaW5wdXQgZGV2aWNlIGRyaXZlcnMKKzQgS2VybmVsIEFQSQorNSBVc2Vyc3BhY2Ugc3VwcG9ydAorCisKKzEuIEludHJvZHVjdGlvbjoKKworVGhlIHJma2lsbCBzd2l0Y2ggc3Vic3lzdGVtIGV4aXN0cyB0byBhZGQgYSBnZW5lcmljIGludGVyZmFjZSB0byBjaXJjdWl0cnkgdGhhdAorY2FuIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBzaWduYWwgb3V0cHV0IG9mIGEgd2lyZWxlc3MgKnRyYW5zbWl0dGVyKiBvZiBhbnkKK3R5cGUuICBCeSBmYXIsIHRoZSBtb3N0IGNvbW1vbiB1c2UgaXMgdG8gZGlzYWJsZSByYWRpby1mcmVxdWVuY3kgdHJhbnNtaXR0ZXJzLgorCitOb3RlIHRoYXQgZGlzYWJsaW5nIHRoZSBzaWduYWwgb3V0cHV0IG1lYW5zIHRoYXQgdGhlIHRoZSB0cmFuc21pdHRlciBpcyB0byBiZQorbWFkZSB0byBub3QgZW1pdCBhbnkgZW5lcmd5IHdoZW4gImJsb2NrZWQiLiAgcmZraWxsIGlzIG5vdCBhYm91dCBibG9ja2luZyBkYXRhCit0cmFuc21pc3Npb25zLCBpdCBpcyBhYm91dCBibG9ja2luZyBlbmVyZ3kgZW1pc3Npb24uCisKK1RoZSByZmtpbGwgc3Vic3lzdGVtIG9mZmVycyBzdXBwb3J0IGZvciBrZXlzIGFuZCBzd2l0Y2hlcyBvZnRlbiBmb3VuZCBvbgorbGFwdG9wcyB0byBlbmFibGUgd2lyZWxlc3MgZGV2aWNlcyBsaWtlIFdpRmkgYW5kIEJsdWV0b290aCwgc28gdGhhdCB0aGVzZSBrZXlzCithbmQgc3dpdGNoZXMgYWN0dWFsbHkgcGVyZm9ybSBhbiBhY3Rpb24gaW4gYWxsIHdpcmVsZXNzIGRldmljZXMgb2YgYSBnaXZlbiB0eXBlCithdHRhY2hlZCB0byB0aGUgc3lzdGVtLgorCitUaGUgYnV0dG9ucyB0byBlbmFibGUgYW5kIGRpc2FibGUgdGhlIHdpcmVsZXNzIHRyYW5zbWl0dGVycyBhcmUgaW1wb3J0YW50IGluCitzaXR1YXRpb25zIHdoZXJlIHRoZSB1c2VyIGlzIGZvciBleGFtcGxlIHVzaW5nIGhpcyBsYXB0b3Agb24gYSBsb2NhdGlvbiB3aGVyZQorcmFkaW8tZnJlcXVlbmN5IHRyYW5zbWl0dGVycyBfbXVzdF8gYmUgZGlzYWJsZWQgKGUuZy4gYWlycGxhbmVzKS4KKworQmVjYXVzZSBvZiB0aGlzIHJlcXVpcmVtZW50LCB1c2Vyc3BhY2Ugc3VwcG9ydCBmb3IgdGhlIGtleXMgc2hvdWxkIG5vdCBiZSBtYWRlCittYW5kYXRvcnkuICBCZWNhdXNlIHVzZXJzcGFjZSBtaWdodCB3YW50IHRvIHBlcmZvcm0gc29tZSBhZGRpdGlvbmFsIHNtYXJ0ZXIKK3Rhc2tzIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLCByZmtpbGwgcHJvdmlkZXMgdXNlcnNwYWNlIHRoZSBwb3NzaWJpbGl0eSB0bwordGFrZSBvdmVyIHRoZSB0YXNrIHRvIGhhbmRsZSB0aGUga2V5IGV2ZW50cy4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotMTogSW1wbGVtZW50YXRpb24gZGV0YWlscworMjogSW1wbGVtZW50YXRpb24gZGV0YWlscwogCi1UaGUgcmZraWxsIHN3aXRjaCBzdWJzeXN0ZW0gb2ZmZXJzIHN1cHBvcnQgZm9yIGtleXMgb2Z0ZW4gZm91bmQgb24gbGFwdG9wcwotdG8gZW5hYmxlIHdpcmVsZXNzIGRldmljZXMgbGlrZSBXaUZpIGFuZCBCbHVldG9vdGguCitUaGUgcmZraWxsIHN1YnN5c3RlbSBpcyBjb21wb3NlZCBvZiB2YXJpb3VzIGNvbXBvbmVudHM6IHRoZSByZmtpbGwgY2xhc3MsIHRoZQorcmZraWxsLWlucHV0IG1vZHVsZSAoYW4gaW5wdXQgbGF5ZXIgaGFuZGxlciksIGFuZCBzb21lIHNwZWNpZmljIGlucHV0IGxheWVyCitldmVudHMuCiAKLVRoaXMgaXMgZG9uZSBieSBwcm92aWRpbmcgdGhlIHVzZXIgMyBwb3NzaWJpbGl0aWVzOgotIDEgLSBUaGUgcmZraWxsIHN5c3RlbSBoYW5kbGVzIGFsbCBldmVudHM7IHVzZXJzcGFjZSBpcyBub3QgYXdhcmUgb2YgZXZlbnRzLgotIDIgLSBUaGUgcmZraWxsIHN5c3RlbSBoYW5kbGVzIGFsbCBldmVudHM7IHVzZXJzcGFjZSBpcyBpbmZvcm1lZCBhYm91dCB0aGUgZXZlbnRzLgotIDMgLSBUaGUgcmZraWxsIHN5c3RlbSBkb2VzIG5vdCBoYW5kbGUgZXZlbnRzOyB1c2Vyc3BhY2UgaGFuZGxlcyBhbGwgZXZlbnRzLgorVGhlIHJma2lsbCBjbGFzcyBwcm92aWRlcyBrZXJuZWwgZHJpdmVycyB3aXRoIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cyB0aGVtIHRvCitrbm93IHdoZW4gdGhleSBzaG91bGQgZW5hYmxlIG9yIGRpc2FibGUgYSB3aXJlbGVzcyBuZXR3b3JrIGRldmljZSB0cmFuc21pdHRlci4KK1RoaXMgaXMgZW5hYmxlZCBieSB0aGUgQ09ORklHX1JGS0lMTCBLY29uZmlnIG9wdGlvbi4KIAotVGhlIGJ1dHRvbnMgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSB3aXJlbGVzcyByYWRpb3MgYXJlIGltcG9ydGFudCBpbgotc2l0dWF0aW9ucyB3aGVyZSB0aGUgdXNlciBpcyBmb3IgZXhhbXBsZSB1c2luZyBoaXMgbGFwdG9wIG9uIGEgbG9jYXRpb24gd2hlcmUKLXdpcmVsZXNzIHJhZGlvcyBfbXVzdF8gYmUgZGlzYWJsZWQgKGUuZy4gYWlycGxhbmVzKS4KLUJlY2F1c2Ugb2YgdGhpcyByZXF1aXJlbWVudCwgdXNlcnNwYWNlIHN1cHBvcnQgZm9yIHRoZSBrZXlzIHNob3VsZCBub3QgYmUKLW1hZGUgbWFuZGF0b3J5LiBCZWNhdXNlIHVzZXJzcGFjZSBtaWdodCB3YW50IHRvIHBlcmZvcm0gc29tZSBhZGRpdGlvbmFsIHNtYXJ0ZXIKLXRhc2tzIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLCByZmtpbGwgc3RpbGwgcHJvdmlkZXMgdXNlcnNwYWNlIHRoZSBwb3NzaWJpbGl0eQotdG8gdGFrZSBvdmVyIHRoZSB0YXNrIHRvIGhhbmRsZSB0aGUga2V5IGV2ZW50cy4KK1RoZSByZmtpbGwgY2xhc3Mgc3VwcG9ydCBtYWtlcyBzdXJlIHVzZXJzcGFjZSB3aWxsIGJlIG5vdGlmaWVkIG9mIGFsbCBzdGF0ZQorY2hhbmdlcyBvbiByZmtpbGwgZGV2aWNlcyB0aHJvdWdoIHVldmVudHMuICBJdCBwcm92aWRlcyBhIG5vdGlmaWNhdGlvbiBjaGFpbgorZm9yIGludGVyZXN0ZWQgcGFydGllcyBpbiB0aGUga2VybmVsIHRvIGFsc28gZ2V0IG5vdGlmaWVkIG9mIHJma2lsbCBzdGF0ZQorY2hhbmdlcyBpbiBvdGhlciBkcml2ZXJzLiAgSXQgY3JlYXRlcyBzZXZlcmFsIHN5c2ZzIGVudHJpZXMgd2hpY2ggY2FuIGJlIHVzZWQKK2J5IHVzZXJzcGFjZS4gIFNlZSBzZWN0aW9uICJVc2Vyc3BhY2Ugc3VwcG9ydCIuCiAKLVRoZSBzeXN0ZW0gaW5zaWRlIHRoZSBrZXJuZWwgaGFzIGJlZW4gc3BsaXQgaW50byAyIHNlcGFyYXRlIHNlY3Rpb25zOgotCTEgLSBSRktJTEwKLQkyIC0gUkZLSUxMX0lOUFVUCitUaGUgcmZraWxsLWlucHV0IG1vZHVsZSBwcm92aWRlcyB0aGUga2VybmVsIHdpdGggdGhlIGFiaWxpdHkgdG8gaW1wbGVtZW50IGEKK2Jhc2ljIHJlc3BvbnNlIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBhIGtleSBvciBidXR0b24gKG9yIHRvZ2dsZXMgYSBzd2l0Y2gpCityZWxhdGVkIHRvIHJma2lsbCBmdW5jdGlvbmFsaXR5LiAgSXQgaXMgYW4gaW4ta2VybmVsIGltcGxlbWVudGF0aW9uIG9mIGRlZmF1bHQKK3BvbGljeSBvZiByZWFjdGluZyB0byByZmtpbGwtcmVsYXRlZCBpbnB1dCBldmVudHMgYW5kIG5laXRoZXIgbWFuZGF0b3J5IG5vcgorcmVxdWlyZWQgZm9yIHdpcmVsZXNzIGRyaXZlcnMgdG8gb3BlcmF0ZS4gIEl0IGlzIGVuYWJsZWQgYnkgdGhlCitDT05GSUdfUkZLSUxMX0lOUFVUIEtjb25maWcgb3B0aW9uLgogCi1UaGUgZmlyc3Qgb3B0aW9uIGVuYWJsZXMgcmZraWxsIHN1cHBvcnQgYW5kIHdpbGwgbWFrZSBzdXJlIHVzZXJzcGFjZSB3aWxsCi1iZSBub3RpZmllZCBvZiBhbnkgZXZlbnRzIHRocm91Z2ggdGhlIGlucHV0IGRldmljZS4gSXQgYWxzbyBjcmVhdGVzIHNldmVyYWwKLXN5c2ZzIGVudHJpZXMgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdXNlcnNwYWNlLiBTZWUgc2VjdGlvbiAiVXNlcnNwYWNlIHN1cHBvcnQiLgorcmZraWxsLWlucHV0IGlzIGEgcmZraWxsLXJlbGF0ZWQgZXZlbnRzIGlucHV0IGxheWVyIGhhbmRsZXIuICBUaGlzIGhhbmRsZXIgd2lsbAorbGlzdGVuIHRvIGFsbCByZmtpbGwga2V5IGV2ZW50cyBhbmQgd2lsbCBjaGFuZ2UgdGhlIHJma2lsbCBzdGF0ZSBvZiB0aGUKK3dpcmVsZXNzIGRldmljZXMgYWNjb3JkaW5nbHkuICBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQgdXNlcnNwYWNlIGNvdWxkIGVpdGhlcgorZG8gbm90aGluZyBvciBzaW1wbHkgcGVyZm9ybSBtb25pdG9yaW5nIHRhc2tzLgogCi1UaGUgc2Vjb25kIG9wdGlvbiBwcm92aWRlcyBhbiByZmtpbGwgaW5wdXQgaGFuZGxlci4gVGhpcyBoYW5kbGVyIHdpbGwKLWxpc3RlbiB0byBhbGwgcmZraWxsIGtleSBldmVudHMgYW5kIHdpbGwgdG9nZ2xlIHRoZSByYWRpbyBhY2NvcmRpbmdseS4KLVdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCB1c2Vyc3BhY2UgY291bGQgZWl0aGVyIGRvIG5vdGhpbmcgb3Igc2ltcGx5Ci1wZXJmb3JtIG1vbml0b3JpbmcgdGFza3MuCitUaGUgcmZraWxsLWlucHV0IG1vZHVsZSBhbHNvIHByb3ZpZGVzIEVQTyAoZW1lcmdlbmN5IHBvd2VyLW9mZikgZnVuY3Rpb25hbGl0eQorZm9yIGFsbCB3aXJlbGVzcyB0cmFuc21pdHRlcnMuICBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSBvdmVycmlkZGVuLCBhbmQgaXQgaXMKK2Fsd2F5cyBhY3RpdmUuICByZmtpbGwgRVBPIGlzIHJlbGF0ZWQgdG8gKl9SRktJTExfQUxMIGlucHV0IGxheWVyIGV2ZW50cy4KIAorCitJbXBvcnRhbnQgdGVybXMgZm9yIHRoZSByZmtpbGwgc3Vic3lzdGVtOgorCitJbiBvcmRlciB0byBhdm9pZCBjb25mdXNpb24sIHdlIGF2b2lkIHRoZSB0ZXJtICJzd2l0Y2giIGluIHJma2lsbCB3aGVuIGl0IGlzCityZWZlcnJpbmcgdG8gYW4gZWxlY3Ryb25pYyBjb250cm9sIGNpcmN1aXQgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGEKK3RyYW5zbWl0dGVyLiAgV2UgcmVzZXJ2ZSBpdCBmb3IgdGhlIHBoeXNpY2FsIGRldmljZSBhIGh1bWFuIG1hbmlwdWxhdGVzCisod2hpY2ggaXMgYW4gaW5wdXQgZGV2aWNlLCBieSB0aGUgd2F5KToKKworcmZraWxsIHN3aXRjaDoKKworCUEgcGh5c2ljYWwgZGV2aWNlIGEgaHVtYW4gbWFuaXB1bGF0ZXMuICBJdHMgc3RhdGUgY2FuIGJlIHBlcmNlaXZlZCBieQorCXRoZSBrZXJuZWwgZWl0aGVyIGRpcmVjdGx5ICh0aHJvdWdoIGEgR1BJTyBwaW4sIEFDUEkgR1BFKSBvciBieSBpdHMKKwllZmZlY3Qgb24gYSByZmtpbGwgbGluZSBvZiBhIHdpcmVsZXNzIGRldmljZS4KKworcmZraWxsIGNvbnRyb2xsZXI6CisKKwlBIGhhcmR3YXJlIGNpcmN1aXQgdGhhdCBjb250cm9scyB0aGUgc3RhdGUgb2YgYSByZmtpbGwgbGluZSwgd2hpY2ggYQorCWtlcm5lbCBkcml2ZXIgY2FuIGludGVyYWN0IHdpdGggKnRvIG1vZGlmeSogdGhhdCBzdGF0ZSAoaS5lLiBpdCBoYXMKKwllaXRoZXIgd3JpdGUtb25seSBvciByZWFkL3dyaXRlIGFjY2VzcykuCisKK3Jma2lsbCBsaW5lOgorCisJQW4gaW5wdXQgY2hhbm5lbCAoaGFyZHdhcmUgb3Igc29mdHdhcmUpIG9mIGEgd2lyZWxlc3MgZGV2aWNlLCB3aGljaAorCWNhdXNlcyBhIHdpcmVsZXNzIHRyYW5zbWl0dGVyIHRvIHN0b3AgZW1pdHRpbmcgZW5lcmd5IChCTE9DSykgd2hlbiBpdAorCWlzIGFjdGl2ZS4gIFBvaW50IG9mIHZpZXcgaXMgZXh0cmVtZWx5IGltcG9ydGFudCBoZXJlOiByZmtpbGwgbGluZXMgYXJlCisJYWx3YXlzIHNlZW4gZnJvbSB0aGUgUG9WIG9mIGEgd2lyZWxlc3MgZGV2aWNlIChhbmQgaXRzIGRyaXZlcikuCisKK3NvZnQgcmZraWxsIGxpbmUvc29mdHdhcmUgcmZraWxsIGxpbmU6CisKKwlBIHJma2lsbCBsaW5lIHRoZSB3aXJlbGVzcyBkZXZpY2UgZHJpdmVyIGNhbiBkaXJlY3RseSBjaGFuZ2UgdGhlIHN0YXRlCisJb2YuICBSZWxhdGVkIHRvIHJma2lsbF9zdGF0ZSBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VELgorCitoYXJkIHJma2lsbCBsaW5lL2hhcmR3YXJlIHJma2lsbCBsaW5lOgorCisJQSByZmtpbGwgbGluZSB0aGF0IHdvcmtzIGZ1bGx5IGluIGhhcmR3YXJlIG9yIGZpcm13YXJlLCBhbmQgdGhhdCBjYW5ub3QKKwliZSBvdmVycmlkZGVuIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLiAgVGhlIGhhcmR3YXJlIGRldmljZSBvciB0aGUKKwlmaXJtd2FyZSBqdXN0IGV4cG9ydHMgaXRzIHN0YXR1cyB0byB0aGUgZHJpdmVyLCBidXQgaXQgaXMgcmVhZC1vbmx5LgorCVJlbGF0ZWQgdG8gcmZraWxsX3N0YXRlIFJGS0lMTF9TVEFURV9IQVJEX0JMT0NLRUQuCisKK1RoZSBlbnVtIHJma2lsbF9zdGF0ZSBkZXNjcmliZXMgdGhlIHJma2lsbCBzdGF0ZSBvZiBhIHRyYW5zbWl0dGVyOgorCitXaGVuIGEgcmZraWxsIGxpbmUgb3IgcmZraWxsIGNvbnRyb2xsZXIgaXMgaW4gdGhlIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQgc3RhdGUsCit0aGUgd2lyZWxlc3MgdHJhbnNtaXR0ZXIgKHJhZGlvIFRYIGNpcmN1aXQgZm9yIGV4YW1wbGUpIGlzICplbmFibGVkKi4gIFdoZW4gdGhlCitpdCBpcyBpbiB0aGUgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCBvciBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VELCB0aGUKK3dpcmVsZXNzIHRyYW5zbWl0dGVyIGlzIHRvIGJlICpibG9ja2VkKiBmcm9tIG9wZXJhdGluZy4KKworUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCBpbmRpY2F0ZXMgdGhhdCBhIGNhbGwgdG8gdG9nZ2xlX3JhZGlvKCkgY2FuIGNoYW5nZQordGhhdCBzdGF0ZS4gIFJGS0lMTF9TVEFURV9IQVJEX0JMT0NLRUQgaW5kaWNhdGVzIHRoYXQgYSBjYWxsIHRvIHRvZ2dsZV9yYWRpbygpCit3aWxsIG5vdCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgc3RhdGUgYW5kIHdpbGwgcmV0dXJuIHdpdGggYSBzdWl0YWJsZSBlcnJvciBpZgorYXR0ZW1wdHMgYXJlIG1hZGUgdG8gc2V0IHRoZSBzdGF0ZSB0byBSRktJTExfU1RBVEVfVU5CTE9DS0VELgorCitSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEIGlzIHVzZWQgYnkgZHJpdmVycyB0byBzaWduYWwgdGhhdCB0aGUgZGV2aWNlIGlzCitsb2NrZWQgaW4gdGhlIEJMT0NLRUQgc3RhdGUgYnkgYSBoYXJkd2lyZSByZmtpbGwgbGluZSAodHlwaWNhbGx5IGFuIGlucHV0IHBpbgordGhhdCwgd2hlbiBhY3RpdmUsIGZvcmNlcyB0aGUgdHJhbnNtaXR0ZXIgdG8gYmUgZGlzYWJsZWQpIHdoaWNoIHRoZSBkcml2ZXIKK0NBTk5PVCBvdmVycmlkZS4KKworRnVsbCByZmtpbGwgZnVuY3Rpb25hbGl0eSByZXF1aXJlcyB0d28gZGlmZmVyZW50IHN1YnN5c3RlbXMgdG8gY29vcGVyYXRlOiB0aGUKK2lucHV0IGxheWVyIGFuZCB0aGUgcmZraWxsIGNsYXNzLiAgVGhlIGlucHV0IGxheWVyIGlzc3VlcyAqY29tbWFuZHMqIHRvIHRoZQorZW50aXJlIHN5c3RlbSByZXF1ZXN0aW5nIHRoYXQgZGV2aWNlcyByZWdpc3RlcmVkIHRvIHRoZSByZmtpbGwgY2xhc3MgY2hhbmdlCitzdGF0ZS4gIFRoZSB3YXkgdGhpcyBpbnRlcmFjdGlvbiBoYXBwZW5zIGlzIG5vdCBjb21wbGV4LCBidXQgaXQgaXMgbm90IG9idmlvdXMKK2VpdGhlcjoKKworS2VybmVsIElucHV0IGxheWVyOgorCisJKiBHZW5lcmF0ZXMgS0VZX1dXQU4sIEtFWV9XTEFOLCBLRVlfQkxVRVRPT1RILCBTV19SRktJTExfQUxMLCBhbmQKKwkgIG90aGVyIHN1Y2ggZXZlbnRzIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjZXJ0YWluIGtleXMsIGJ1dHRvbnMsIG9yCisJICB0b2dnbGVzIGNlcnRhaW4gcGh5c2ljYWwgc3dpdGNoZXMuCisKKwlUSEUgSU5QVVQgTEFZRVIgSVMgTkVWRVIgVVNFRCBUTyBQUk9QQUdBVEUgU1RBVFVTLCBOT1RJRklDQVRJT05TIE9SIFRIRQorCUtJTkQgT0YgU1RVRkYgQU4gT04tU0NSRUVOLURJU1BMQVkgQVBQTElDQVRJT04gV09VTEQgUkVQT1JULiAgSXQgaXMKKwl1c2VkIHRvIGlzc3VlICpjb21tYW5kcyogZm9yIHRoZSBzeXN0ZW0gdG8gY2hhbmdlIGJlaGF2aW91ciwgYW5kIHRoZXNlCisJY29tbWFuZHMgbWF5IG9yIG1heSBub3QgYmUgY2FycmllZCBvdXQgYnkgc29tZSBrZXJuZWwgZHJpdmVyIG9yCisJdXNlcnNwYWNlIGFwcGxpY2F0aW9uLiAgSXQgZm9sbG93cyB0aGF0IGRvaW5nIHVzZXIgZmVlZGJhY2sgYmFzZWQgb25seQorCW9uIGlucHV0IGV2ZW50cyBpcyBicm9rZW4sIGFzIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGFuIGlucHV0IGV2ZW50CisJd2lsbCBiZSBhY3RlZCB1cG9uLgorCisJTW9zdCB3aXJlbGVzcyBjb21tdW5pY2F0aW9uIGRldmljZSBkcml2ZXJzIGltcGxlbWVudGluZyByZmtpbGwKKwlmdW5jdGlvbmFsaXR5IE1VU1QgTk9UIGdlbmVyYXRlIHRoZXNlIGV2ZW50cywgYW5kIGhhdmUgbm8gcmVhc29uIHRvCisJcmVnaXN0ZXIgdGhlbXNlbHZlcyB3aXRoIHRoZSBpbnB1dCBsYXllci4gIERvaW5nIG90aGVyd2lzZSBpcyBhIGNvbW1vbgorCW1pc2NvbmNlcHRpb24uICBUaGVyZSBpcyBhbiBBUEkgdG8gcHJvcGFnYXRlIHJma2lsbCBzdGF0dXMgY2hhbmdlCisJaW5mb3JtYXRpb24sIGFuZCBpdCBpcyBOT1QgdGhlIGlucHV0IGxheWVyLgorCityZmtpbGwgY2xhc3M6CisKKwkqIENhbGxzIGEgaG9vayBpbiBhIGRyaXZlciB0byBlZmZlY3RpdmVseSBjaGFuZ2UgdGhlIHdpcmVsZXNzCisJICB0cmFuc21pdHRlciBzdGF0ZTsKKwkqIEtlZXBzIHRyYWNrIG9mIHRoZSB3aXJlbGVzcyB0cmFuc21pdHRlciBzdGF0ZSAod2l0aCBoZWxwIGZyb20KKwkgIHRoZSBkcml2ZXIpOworCSogR2VuZXJhdGVzIHVzZXJzcGFjZSBub3RpZmljYXRpb25zICh1ZXZlbnRzKSBhbmQgYSBjYWxsIHRvIGEKKwkgIG5vdGlmaWNhdGlvbiBjaGFpbiAoa2VybmVsKSB3aGVuIHRoZXJlIGlzIGEgd2lyZWxlc3MgdHJhbnNtaXR0ZXIKKwkgIHN0YXRlIGNoYW5nZTsKKwkqIENvbm5lY3RzIGEgd2lyZWxlc3MgY29tbXVuaWNhdGlvbnMgZHJpdmVyIHdpdGggdGhlIGNvbW1vbiByZmtpbGwKKwkgIGNvbnRyb2wgc3lzdGVtLCB3aGljaCwgZm9yIGV4YW1wbGUsIGFsbG93cyBhY3Rpb25zIHN1Y2ggYXMKKwkgICJzd2l0Y2ggYWxsIGJsdWV0b290aCBkZXZpY2VzIG9mZmxpbmUiIHRvIGJlIGNhcnJpZWQgb3V0IGJ5CisJICB1c2Vyc3BhY2Ugb3IgYnkgcmZraWxsLWlucHV0LgorCisJVEhFIFJGS0lMTCBDTEFTUyBORVZFUiBJU1NVRVMgSU5QVVQgRVZFTlRTLiAgVEhFIFJGS0lMTCBDTEFTUyBET0VTCisJTk9UIExJU1RFTiBUTyBJTlBVVCBFVkVOVFMuICBOTyBEUklWRVIgVVNJTkcgVEhFIFJGS0lMTCBDTEFTUyBTSEFMTAorCUVWRVIgTElTVEVOIFRPLCBPUiBBQ1QgT04gUkZLSUxMIElOUFVUIEVWRU5UUy4gIERvaW5nIG90aGVyd2lzZSBpcworCWEgbGF5ZXJpbmcgdmlvbGF0aW9uLgorCisJTW9zdCB3aXJlbGVzcyBkYXRhIGNvbW11bmljYXRpb24gZHJpdmVycyBpbiB0aGUga2VybmVsIGhhdmUganVzdCB0bworCWltcGxlbWVudCB0aGUgcmZraWxsIGNsYXNzIEFQSSB0byB3b3JrIHByb3Blcmx5LiAgSW50ZXJmYWNpbmcgdG8gdGhlCisJaW5wdXQgbGF5ZXIgaXMgbm90IG9mdGVuIHJlcXVpcmVkIChhbmQgaXMgdmVyeSBvZnRlbiBhICpidWcqKSBvbgorCXdpcmVsZXNzIGRyaXZlcnMuCisKKwlQbGF0Zm9ybSBkcml2ZXJzIG9mdGVuIGhhdmUgdG8gYXR0YWNoIHRvIHRoZSBpbnB1dCBsYXllciB0byAqaXNzdWUqCisJKGJ1dCBuZXZlciB0byBsaXN0ZW4gdG8pIHJma2lsbCBldmVudHMgZm9yIHJma2lsbCBzd2l0Y2hlcywgYW5kIGFsc28gdG8KKwl0aGUgcmZraWxsIGNsYXNzIHRvIGV4cG9ydCBhIGNvbnRyb2wgaW50ZXJmYWNlIGZvciB0aGUgcGxhdGZvcm0gcmZraWxsCisJY29udHJvbGxlcnMgdG8gdGhlIHJma2lsbCBzdWJzeXN0ZW0uICBUaGlzIGRvZXMgTk9UIG1lYW4gdGhlIHJma2lsbAorCXN3aXRjaCBpcyBhdHRhY2hlZCB0byBhIHJma2lsbCBjbGFzcyAoZG9pbmcgc28gaXMgYWxtb3N0IGFsd2F5cyB3cm9uZykuCisJSXQganVzdCBtZWFucyB0aGUgc2FtZSBrZXJuZWwgbW9kdWxlIGlzIHRoZSBkcml2ZXIgZm9yIGRpZmZlcmVudAorCWRldmljZXMgKHJma2lsbCBzd2l0Y2hlcyBhbmQgcmZraWxsIGNvbnRyb2xsZXJzKS4KKworCitVc2Vyc3BhY2UgaW5wdXQgaGFuZGxlcnMgKHVldmVudHMpIG9yIGtlcm5lbCBpbnB1dCBoYW5kbGVycyAocmZraWxsLWlucHV0KToKKworCSogSW1wbGVtZW50cyB0aGUgcG9saWN5IG9mIHdoYXQgc2hvdWxkIGhhcHBlbiB3aGVuIG9uZSBvZiB0aGUgaW5wdXQKKwkgIGxheWVyIGV2ZW50cyByZWxhdGVkIHRvIHJma2lsbCBvcGVyYXRpb24gaXMgcmVjZWl2ZWQuCisJKiBVc2VzIHRoZSBzeXNmcyBpbnRlcmZhY2UgKHVzZXJzcGFjZSkgb3IgcHJpdmF0ZSByZmtpbGwgQVBJIGNhbGxzCisJICB0byB0ZWxsIHRoZSBkZXZpY2VzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmZraWxsIGNsYXNzIHRvIGNoYW5nZQorCSAgdGhlaXIgc3RhdGUgKGkuZS4gdHJhbnNsYXRlcyB0aGUgaW5wdXQgbGF5ZXIgZXZlbnQgaW50byByZWFsCisJICBhY3Rpb24pLgorCSogcmZraWxsLWlucHV0IGltcGxlbWVudHMgRVBPIGJ5IGhhbmRsaW5nIEVWX1NXIFNXX1JGS0lMTF9BTEwgMAorCSAgKHBvd2VyIG9mZiBhbGwgdHJhbnNtaXR0ZXJzKSBpbiBhIHNwZWNpYWwgd2F5OiBpdCBpZ25vcmVzIGFueQorCSAgb3ZlcnJpZGVzIGFuZCBsb2NhbCBzdGF0ZSBjYWNoZSBhbmQgZm9yY2VzIGFsbCB0cmFuc21pdHRlcnMgdG8gdGhlCisJICBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEIHN0YXRlIChpbmNsdWRpbmcgdGhvc2Ugd2hpY2ggYXJlIGFscmVhZHkKKwkgIHN1cHBvc2VkIHRvIGJlIEJMT0NLRUQpLiAgTm90ZSB0aGF0IHRoZSBvcHBvc2l0ZSBldmVudCAocG93ZXIgb24gYWxsCisJICB0cmFuc21pdHRlcnMpIGlzIGhhbmRsZWQgbm9ybWFsbHkuCisKK1VzZXJzcGFjZSB1ZXZlbnQgaGFuZGxlciBvciBrZXJuZWwgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVycyBob29rZWQgdG8gdGhlCityZmtpbGwgbm90aWZpZXIgY2hhaW46CisKKwkqIFRhcHMgaW50byB0aGUgcmZraWxsIG5vdGlmaWVyIGNoYWluIG9yIHRvIEtPQkpfQ0hBTkdFIHVldmVudHMsCisJICBpbiBvcmRlciB0byBrbm93IHdoZW4gYSBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIHJma2lsbAorCSAgY2xhc3MgY2hhbmdlcyBzdGF0ZTsKKwkqIElzc3VlcyBmZWVkYmFjayBub3RpZmljYXRpb25zIHRvIHRoZSB1c2VyOworCSogSW4gdGhlIHJhcmUgcGxhdGZvcm1zIHdoZXJlIHRoaXMgaXMgcmVxdWlyZWQsIHN5bnRoZXNpemVzIGFuIGlucHV0CisJICBldmVudCB0byBjb21tYW5kIGFsbCAqT1RIRVIqIHJma2lsbCBkZXZpY2VzIHRvIGFsc28gY2hhbmdlIHRoZWlyCisJICBzdGF0dWVzIHdoZW4gYSBzcGVjaWZpYyByZmtpbGwgZGV2aWNlIGNoYW5nZXMgc3RhdGUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMzogS2VybmVsIGRyaXZlciBndWlkZWxpbmVzCisKK1JlbWVtYmVyOiBwb2ludC1vZi12aWV3IGlzIGV2ZXJ5dGhpbmcgZm9yIGEgZHJpdmVyIHRoYXQgY29ubmVjdHMgdG8gdGhlIHJma2lsbAorc3Vic3lzdGVtLiAgQWxsIHRoZSBkZXRhaWxzIGJlbG93IG11c3QgYmUgbWVhc3VyZWQvcGVyY2VpdmVkIGZyb20gdGhlIHBvaW50IG9mCit2aWV3IG9mIHRoZSBzcGVjaWZpYyBkcml2ZXIgYmVpbmcgbW9kaWZpZWQuCisKK1RoZSBmaXJzdCB0aGluZyBvbmUgbmVlZHMgdG8ga25vdyBpcyB3aGV0aGVyIGhpcyBkcml2ZXIgc2hvdWxkIGJlIHRhbGtpbmcgdG8KK3RoZSByZmtpbGwgY2xhc3Mgb3IgdG8gdGhlIGlucHV0IGxheWVyLiAgSW4gcmFyZSBjYXNlcyAocGxhdGZvcm0gZHJpdmVycyksIGl0Citjb3VsZCBoYXBwZW4gdGhhdCB5b3UgbmVlZCB0byBkbyBib3RoLCBhcyBwbGF0Zm9ybSBkcml2ZXJzIG9mdGVuIGhhbmRsZSBhCit2YXJpZXR5IG9mIGRldmljZXMgaW4gdGhlIHNhbWUgZHJpdmVyLgorCitEbyBub3QgbWlzdGFrZSBpbnB1dCBkZXZpY2VzIGZvciByZmtpbGwgY29udHJvbGxlcnMuICBUaGUgb25seSB0eXBlIG9mICJyZmtpbGwKK3N3aXRjaCIgZGV2aWNlIHRoYXQgaXMgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSByZmtpbGwgY2xhc3MgYXJlIHRob3NlCitkaXJlY3RseSBjb250cm9sbGluZyB0aGUgY2lyY3VpdHMgdGhhdCBjYXVzZSBhIHdpcmVsZXNzIHRyYW5zbWl0dGVyIHRvIHN0b3AKK3dvcmtpbmcgKG9yIHRoZSBzb2Z0d2FyZSBlcXVpdmFsZW50IG9mIHRoZW0pLCBpLmUuIHdoYXQgd2UgY2FsbCBhIHJma2lsbAorY29udHJvbGxlci4gIEV2ZXJ5IG90aGVyIGtpbmQgb2YgInJma2lsbCBzd2l0Y2giIGlzIGp1c3QgYW4gaW5wdXQgZGV2aWNlIGFuZAorTVVTVCBOT1QgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSByZmtpbGwgY2xhc3MuCisKK0EgZHJpdmVyIHNob3VsZCByZWdpc3RlciBhIGRldmljZSB3aXRoIHRoZSByZmtpbGwgY2xhc3Mgd2hlbiBBTEwgb2YgdGhlCitmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0ICh0aGV5IGRlZmluZSBhIHJma2lsbCBjb250cm9sbGVyKToKKworMS4gVGhlIGRldmljZSBpcy9jb250cm9scyBhIGRhdGEgY29tbXVuaWNhdGlvbnMgd2lyZWxlc3MgdHJhbnNtaXR0ZXI7CisKKzIuIFRoZSBrZXJuZWwgY2FuIGludGVyYWN0IHdpdGggdGhlIGhhcmR3YXJlL2Zpcm13YXJlIHRvIENIQU5HRSB0aGUgd2lyZWxlc3MKKyAgIHRyYW5zbWl0dGVyIHN0YXRlIChibG9jay91bmJsb2NrIFRYIG9wZXJhdGlvbik7CisKKzMuIFRoZSB0cmFuc21pdHRlciBjYW4gYmUgbWFkZSB0byBub3QgZW1pdCBhbnkgZW5lcmd5IHdoZW4gImJsb2NrZWQiOgorICAgcmZraWxsIGlzIG5vdCBhYm91dCBibG9ja2luZyBkYXRhIHRyYW5zbWlzc2lvbnMsIGl0IGlzIGFib3V0IGJsb2NraW5nCisgICBlbmVyZ3kgZW1pc3Npb247CisKK0EgZHJpdmVyIHNob3VsZCByZWdpc3RlciBhIGRldmljZSB3aXRoIHRoZSBpbnB1dCBzdWJzeXN0ZW0gdG8gaXNzdWUKK3Jma2lsbC1yZWxhdGVkIGV2ZW50cyAoS0VZX1dMQU4sIEtFWV9CTFVFVE9PVEgsIEtFWV9XV0FOLCBLRVlfV0lNQVgsCitTV19SRktJTExfQUxMLCBldGMpIHdoZW4gQUxMIG9mIHRoZSBmb2xvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIEl0IGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gc29tZSBwaHlzaWNhbCBkZXZpY2UgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGgsIHRvCisgICBjb21tYW5kIHRoZSBPLlMuL2Zpcm13YXJlL2hhcmR3YXJlIHRvIGVuYWJsZS9kaXNhYmxlIGEgZGF0YSBjb21tdW5pY2F0aW9ucworICAgd2lyZWxlc3MgdHJhbnNtaXR0ZXIuCisKKyAgIEV4YW1wbGVzIG9mIHRoZSBwaHlzaWNhbCBkZXZpY2UgYXJlOiBidXR0b25zLCBrZXlzIGFuZCBzd2l0Y2hlcyB0aGUgdXNlcgorICAgd2lsbCBwcmVzcy90b3VjaC9zbGlkZS9zd2l0Y2ggdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHdpcmVsZXNzCisgICBjb21tdW5pY2F0aW9uIGRldmljZS4KKworMi4gSXQgaXMgTk9UIHNsYXZlZCB0byBhbm90aGVyIGRldmljZSwgaS5lLiB0aGVyZSBpcyBubyBvdGhlciBkZXZpY2UgdGhhdAorICAgaXNzdWVzIHJma2lsbC1yZWxhdGVkIGlucHV0IGV2ZW50cyBpbiBwcmVmZXJlbmNlIHRvIHRoaXMgb25lLgorCisgICBQbGVhc2UgcmVmZXIgdG8gdGhlIGNvcm5lciBjYXNlcyBhbmQgZXhhbXBsZXMgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCitXaGVuIGluIGRvdWJ0LCBkbyBub3QgaXNzdWUgaW5wdXQgZXZlbnRzLiAgRm9yIGRyaXZlcnMgdGhhdCBzaG91bGQgZ2VuZXJhdGUKK2lucHV0IGV2ZW50cyBpbiBzb21lIHBsYXRmb3JtcywgYnV0IG5vdCBpbiBvdGhlcnMgKGUuZy4gYjQzKSwgdGhlIGJlc3Qgc29sdXRpb24KK2lzIHRvIE5FVkVSIGdlbmVyYXRlIGlucHV0IGV2ZW50cyBpbiB0aGUgZmlyc3QgcGxhY2UuICBUaGF0IHdvcmsgc2hvdWxkIGJlCitkZWZlcnJlZCB0byBhIHBsYXRmb3JtLXNwZWNpZmljIGtlcm5lbCBtb2R1bGUgKHdoaWNoIHdpbGwga25vdyB3aGVuIHRvIGdlbmVyYXRlCitldmVudHMgdGhyb3VnaCB0aGUgcmZraWxsIG5vdGlmaWVyIGNoYWluKSBvciB0byB1c2Vyc3BhY2UuICBUaGlzIGF2b2lkcyB0aGUKK3VzdWFsIG1haW50ZW5hbmNlIHByb2JsZW1zIHdpdGggRE1JIHdoaXRlbGlzdGluZy4KKworCitDb3JuZXIgY2FzZXMgYW5kIGV4YW1wbGVzOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0yOiBEcml2ZXIgc3VwcG9ydAogCi1UbyBidWlsZCBhIGRyaXZlciB3aXRoIHJma2lsbCBzdWJzeXN0ZW0gc3VwcG9ydCwgdGhlIGRyaXZlciBzaG91bGQKLWRlcGVuZCBvbiB0aGUgS2NvbmZpZyBzeW1ib2wgUkZLSUxMOyBpdCBzaG91bGQgX25vdF8gZGVwZW5kIG9uCi1SS0ZJTExfSU5QVVQuCisxLiBJZiB0aGUgZGV2aWNlIGlzIGFuIGlucHV0IGRldmljZSB0aGF0LCBiZWNhdXNlIG9mIGhhcmR3YXJlIG9yIGZpcm13YXJlLAorY2F1c2VzIHdpcmVsZXNzIHRyYW5zbWl0dGVycyB0byBiZSBibG9ja2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIGtlcm5lbCdzIHdpbGwsIGl0CitpcyBzdGlsbCBqdXN0IGFuIGlucHV0IGRldmljZSwgYW5kIE5PVCB0byBiZSByZWdpc3RlcmVkIHdpdGggdGhlIHJma2lsbCBjbGFzcy4KIAotVW5sZXNzIGtleSBldmVudHMgdHJpZ2dlciBhbiBpbnRlcnJ1cHQgdG8gd2hpY2ggdGhlIGRyaXZlciBsaXN0ZW5zLCBwb2xsaW5nCi13aWxsIGJlIHJlcXVpcmVkIHRvIGRldGVybWluZSB0aGUga2V5IHN0YXRlIGNoYW5nZXMuIEZvciB0aGlzIHRoZSBpbnB1dAotbGF5ZXIgcHJvdmlkZXJzIHRoZSBpbnB1dC1wb2xsZGV2IGhhbmRsZXIuCisyLiBJZiB0aGUgd2lyZWxlc3MgdHJhbnNtaXR0ZXIgc3dpdGNoIGNvbnRyb2wgaXMgcmVhZC1vbmx5LCBpdCBpcyBhbiBpbnB1dAorZGV2aWNlIGFuZCBub3QgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSByZmtpbGwgY2xhc3MgKGFuZCBtYXliZSBub3QgdG8gYmUgbWFkZQorYW4gaW5wdXQgbGF5ZXIgZXZlbnQgc291cmNlIGVpdGhlciwgc2VlIGJlbG93KS4KIAotQSBkcml2ZXIgc2hvdWxkIGltcGxlbWVudCBhIGZldyBzdGVwcyB0byBjb3JyZWN0bHkgbWFrZSB1c2Ugb2YgdGhlCi1yZmtpbGwgc3Vic3lzdGVtLiBGaXJzdCBmb3Igbm9uLXBvbGxpbmcgZHJpdmVyczoKKzMuIElmIHRoZXJlIGlzIHNvbWUgb3RoZXIgZGV2aWNlIGRyaXZlciAqY2xvc2VyKiB0byB0aGUgYWN0dWFsIGhhcmR3YXJlIHRoZQordXNlciBpbnRlcmFjdGVkIHdpdGggKHRoZSBidXR0b24vc3dpdGNoL2tleSkgdG8gaXNzdWUgYW4gaW5wdXQgZXZlbnQsIFRIQVQgaXMKK3RoZSBkZXZpY2UgZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGlzc3VpbmcgaW5wdXQgZXZlbnRzLgogCi0JLSByZmtpbGxfYWxsb2NhdGUoKQotCS0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCkKLQktIHJma2lsbF9yZWdpc3RlcigpCi0JLSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoKQorRS5nOgorICBbUkZLSUxMIHNsaWRlciBzd2l0Y2hdIC0tIFtHUElPIGhhcmR3YXJlXSAtLSBbV0xBTiBjYXJkIHJmLWtpbGwgaW5wdXRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAocGxhdGZvcm0gZHJpdmVyKSAgICAod2lyZWxlc3MgY2FyZCBkcml2ZXIpCiAKLUZvciBwb2xsaW5nIGRyaXZlcnM6CitUaGUgdXNlciBpcyBjbG9zZXIgdG8gdGhlIFJGS0lMTCBzbGlkZSBzd2l0Y2ggcGxhZm9ybSBkcml2ZXIsIHNvIHRoZSBkcml2ZXIKK3doaWNoIG11c3QgaXNzdWUgaW5wdXQgZXZlbnRzIGlzIHRoZSBwbGF0Zm9ybSBkcml2ZXIgbG9va2luZyBhdCB0aGUgR1BJTworaGFyZHdhcmUsIGFuZCBORVZFUiB0aGUgd2lyZWxlc3MgY2FyZCBkcml2ZXIgKHdoaWNoIGlzIGp1c3QgYSBzbGF2ZSkuICBJdCBpcwordmVyeSBsaWtlbHkgdGhhdCB0aGVyZSBhcmUgb3RoZXIgbGVhdmVzIHRoYW4ganVzdCB0aGUgV0xBTiBjYXJkIHJmLWtpbGwgaW5wdXQKKyhlLmcuIGEgYmx1ZXRvb3RoIGNhcmQsIGV0YykuLi4KIAotCS0gcmZraWxsX2FsbG9jYXRlKCkKLQktIGlucHV0X2FsbG9jYXRlX3BvbGxlZF9kZXZpY2UoKQotCS0gcmZraWxsX3JlZ2lzdGVyKCkKLQktIGlucHV0X3JlZ2lzdGVyX3BvbGxlZF9kZXZpY2UoKQorT24gdGhlIG90aGVyIGhhbmQsIHNvbWUgZW1iZWRkZWQgZGV2aWNlcyBkbyB0aGlzOgogCi1XaGVuIGEga2V5IGV2ZW50IGhhcyBiZWVuIGRldGVjdGVkLCB0aGUgY29ycmVjdCBldmVudCBzaG91bGQgYmUKLXNlbnQgb3ZlciB0aGUgaW5wdXQgZGV2aWNlIHdoaWNoIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlIGRyaXZlci4KKyAgW1JGS0lMTCBzbGlkZXIgc3dpdGNoXSAtLSBbV0xBTiBjYXJkIHJmLWtpbGwgaW5wdXRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aXJlbGVzcyBjYXJkIGRyaXZlcikKIAorSW4gdGhpcyBzaXR1YXRpb24sIHRoZSB3aXJlbGVzcyBjYXJkIGRyaXZlciAqY291bGQqIHJlZ2lzdGVyIGl0c2VsZiBhcyBhbiBpbnB1dAorZGV2aWNlIGFuZCBpc3N1ZSByZi1raWxsIHJlbGF0ZWQgaW5wdXQgZXZlbnRzLi4uIGJ1dCBpbiBvcmRlciB0byBBVk9JRCB0aGUgbmVlZAorZm9yIERNSSB3aGl0ZWxpc3RpbmcsIHRoZSB3aXJlbGVzcyBjYXJkIGRyaXZlciBkb2VzIE5PVCBkbyBpdC4gIFVzZXJzcGFjZSAoSEFMKQorb3IgYSBwbGF0Zm9ybSBkcml2ZXIgKHRoYXQgZXhpc3RzIG9ubHkgb24gdGhlc2UgZW1iZWRkZWQgZGV2aWNlcykgd2lsbCBkbyB0aGUKK2RpcnR5IGpvYiBvZiBpc3N1aW5nIHRoZSBpbnB1dCBldmVudHMuCisKKworQ09NTU9OIE1JU1RBS0VTIGluIGtlcm5lbCBkcml2ZXJzLCByZWxhdGVkIHRvIHJma2lsbDoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotMzogVXNlcnNwYWNlIHN1cHBvcnQKIAotRm9yIGVhY2gga2V5IGFuIGlucHV0IGRldmljZSB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggd2lsbCBzZW5kIG91dCB0aGUgY29ycmVjdAota2V5IGV2ZW50IHdoZW4gdGhlIHJma2lsbCBrZXkgaGFzIGJlZW4gcHJlc3NlZC4KKzEuIE5FVkVSIGNvbmZ1c2UgaW5wdXQgZGV2aWNlIGtleXMgYW5kIGJ1dHRvbnMgd2l0aCBpbnB1dCBkZXZpY2Ugc3dpdGNoZXMuCisKKyAgMWEuIFN3aXRjaGVzIGFyZSBhbHdheXMgc2V0IG9yIHJlc2V0LiAgVGhleSByZXBvcnQgdGhlIGN1cnJlbnQgc3RhdGUKKyAgICAgIChvbiBwb3NpdGlvbiBvciBvZmYgcG9zaXRpb24pLgorCisgIDFiLiBLZXlzIGFuZCBidXR0b25zIGFyZSBlaXRoZXIgaW4gdGhlIHByZXNzZWQgb3Igbm90LXByZXNzZWQgc3RhdGUsIGFuZAorICAgICAgdGhhdCdzIGl0LiAgQSAiYnV0dG9uIiB0aGF0IGxhdGNoZXMgZG93biB3aGVuIHlvdSBwcmVzcyBpdCwgYW5kCisgICAgICB1bmxhdGNoZXMgd2hlbiB5b3UgcHJlc3MgaXQgYWdhaW4gaXMgaW4gZmFjdCBhIHN3aXRjaCBhcyBmYXIgYXMgaW5wdXQKKyAgICAgIGRldmljZXMgZ28uCisKK0FkZCB0aGUgU1dfKiBldmVudHMgeW91IG5lZWQgZm9yIHN3aXRjaGVzLCBkbyBOT1QgdHJ5IHRvIGVtdWxhdGUgYSBidXR0b24gdXNpbmcKK0tFWV8qIGV2ZW50cyBqdXN0IGJlY2F1c2UgdGhlcmUgaXMgbm8gc3VjaCBTV18qIGV2ZW50IHlldC4gIERvIE5PVCB0cnkgdG8gdXNlLAorZm9yIGV4YW1wbGUsIEtFWV9CTFVFVE9PVEggd2hlbiB5b3Ugc2hvdWxkIGJlIHVzaW5nIFNXX0JMVUVUT09USCBpbnN0ZWFkLgorCisyLiBJbnB1dCBkZXZpY2Ugc3dpdGNoZXMgKHNvdXJjZXMgb2YgRVZfU1cgZXZlbnRzKSBETyBzdG9yZSB0aGVpciBjdXJyZW50IHN0YXRlCisoc28geW91ICptdXN0KiBpbml0aWFsaXplIGl0IGJ5IGlzc3VpbmcgYSBncmF0dWl0b3VzIGlucHV0IGxheWVyIGV2ZW50IG9uCitkcml2ZXIgc3RhcnQtdXAgYW5kIGFsc28gd2hlbiByZXN1bWluZyBmcm9tIHNsZWVwKSwgYW5kIHRoYXQgc3RhdGUgQ0FOIGJlCitxdWVyaWVkIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggSU9DVExzLiAgVGhlcmUgaXMgbm8gc3lzZnMgaW50ZXJmYWNlIGZvciB0aGlzLAorYnV0IHRoYXQgZG9lc24ndCBtZWFuIHlvdSBzaG91bGQgYnJlYWsgdGhpbmdzIHRyeWluZyB0byBob29rIGl0IHRvIHRoZSByZmtpbGwKK2NsYXNzIHRvIGdldCBhIHN5c2ZzIGludGVyZmFjZSA6LSkKKworMy4gRG8gbm90IGlzc3VlICpfUkZLSUxMX0FMTCBldmVudHMgYnkgZGVmYXVsdCwgdW5sZXNzIHlvdSBhcmUgc3VyZSBpdCBpcyB0aGUKK2NvcnJlY3QgZXZlbnQgZm9yIHlvdXIgc3dpdGNoL2J1dHRvbi4gIFRoZXNlIGV2ZW50cyBhcmUgZW1lcmdlbmN5IHBvd2VyLW9mZgorZXZlbnRzIHdoZW4gdGhleSBhcmUgdHJ5aW5nIHRvIHR1cm4gdGhlIHRyYW5zbWl0dGVycyBvZmYuICBBbiBleGFtcGxlIG9mIGFuCitpbnB1dCBkZXZpY2Ugd2hpY2ggU0hPVUxEIGdlbmVyYXRlICpfUkZLSUxMX0FMTCBldmVudHMgaXMgdGhlIHdpcmVsZXNzLWtpbGwKK3N3aXRjaCBpbiBhIGxhcHRvcCB3aGljaCBpcyBOT1QgYSBob3RrZXksIGJ1dCBhIHJlYWwgc3dpdGNoIHRoYXQga2lsbHMgcmFkaW9zCitpbiBoYXJkd2FyZSwgZXZlbiBpZiB0aGUgTy5TLiBoYXMgZ29uZSB0byBsdW5jaC4gIEFuIGV4YW1wbGUgb2YgYW4gaW5wdXQgZGV2aWNlCit3aGljaCBTSE9VTEQgTk9UIGdlbmVyYXRlICpfUkZLSUxMX0FMTCBldmVudHMgYnkgZGVmYXVsdCwgaXMgYW55IHNvcnQgb2YgaG90CitrZXkgdGhhdCBkb2VzIG5vdGhpbmcgYnkgaXRzZWxmLCBhcyB3ZWxsIGFzIGFueSBob3Qga2V5IHRoYXQgaXMgdHlwZS1zcGVjaWZpYworKGUuZy4gdGhlIG9uZSBmb3IgV0xBTikuCisKKworMy4xIEd1aWRlbGluZXMgZm9yIHdpcmVsZXNzIGRldmljZSBkcml2ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gRWFjaCBpbmRlcGVuZGVudCB0cmFuc21pdHRlciBpbiBhIHdpcmVsZXNzIGRldmljZSAodXN1YWxseSB0aGVyZSBpcyBvbmx5IG9uZQordHJhbnNtaXR0ZXIgcGVyIGRldmljZSkgc2hvdWxkIGhhdmUgYSBTSU5HTEUgcmZraWxsIGNsYXNzIGF0dGFjaGVkIHRvIGl0LgorCisyLiBJZiB0aGUgZGV2aWNlIGRvZXMgbm90IGhhdmUgYW55IHNvcnQgb2YgaGFyZHdhcmUgYXNzaXN0YW5jZSB0byBhbGxvdyB0aGUKK2RyaXZlciB0byByZmtpbGwgdGhlIGRldmljZSwgdGhlIGRyaXZlciBzaG91bGQgZW11bGF0ZSBpdCBieSB0YWtpbmcgYWxsIGFjdGlvbnMKK3JlcXVpcmVkIHRvIHNpbGVuY2UgdGhlIHRyYW5zbWl0dGVyLgorCiszLiBJZiBpdCBpcyBpbXBvc3NpYmxlIHRvIHNpbGVuY2UgdGhlIHRyYW5zbWl0dGVyIChpLmUuIGl0IHN0aWxsIGVtaXRzIGVuZXJneSwKK2V2ZW4gaWYgaXQgaXMganVzdCBpbiBicmllZiBwdWxzZXMsIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSB0byB0cmFuc21pdCBhbmQgdGhlcmUKK2lzIG5vIGhhcmR3YXJlIHN1cHBvcnQgdG8gdHVybiBpdCBvZmYpIGRvIE5PVCBsaWUgdG8gdGhlIHVzZXJzLiAgRG8gbm90IGF0dGFjaAoraXQgdG8gYSByZmtpbGwgY2xhc3MuICBUaGUgcmZraWxsIHN1YnN5c3RlbSBkb2VzIG5vdCBkZWFsIHdpdGggZGF0YQordHJhbnNtaXNzaW9uLCBpdCBkZWFscyB3aXRoIGVuZXJneSBlbWlzc2lvbi4gIElmIHRoZSB0cmFuc21pdHRlciBpcyBlbWl0dGluZworZW5lcmd5LCBpdCBpcyBub3QgYmxvY2tlZCBpbiByZmtpbGwgdGVybXMuCisKKzQuIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSBkZXZpY2UgaGFzIG11bHRpcGxlIHJma2lsbCBpbnB1dCBsaW5lcyBhZmZlY3RpbmcKK3RoZSBzYW1lIHRyYW5zbWl0dGVyLCB0aGVpciBjb21iaW5lZCBzdGF0ZSBpcyB0byBiZSBleHBvcnRlZCBhcyBhIHNpbmdsZSBzdGF0ZQorcGVyIHRyYW5zbWl0dGVyIChzZWUgcnVsZSAxKS4KKworVGhpcyBydWxlIGV4aXN0cyBiZWNhdXNlIHVzZXJzIG9mIHRoZSByZmtpbGwgc3Vic3lzdGVtIGV4cGVjdCB0byBnZXQgKGFuZCBzZXQsCit3aGVuIHBvc3NpYmxlKSB0aGUgb3ZlcmFsbCB0cmFuc21pdHRlciByZmtpbGwgc3RhdGUsIG5vdCBvZiBhIHBhcnRpY3VsYXIgcmZraWxsCitsaW5lLgorCitFeGFtcGxlIG9mIGEgV0xBTiB3aXJlbGVzcyBkcml2ZXIgY29ubmVjdGVkIHRvIHRoZSByZmtpbGwgc3Vic3lzdGVtOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBjZXJ0YWluIFdMQU4gY2FyZCBoYXMgb25lIGlucHV0IHBpbiB0aGF0IGNhdXNlcyBpdCB0byBibG9jayB0aGUgdHJhbnNtaXR0ZXIKK2FuZCBtYWtlcyB0aGUgc3RhdHVzIG9mIHRoYXQgaW5wdXQgcGluIGF2YWlsYWJsZSAob25seSBmb3IgcmVhZGluZyEpIHRvIHRoZQora2VybmVsIGRyaXZlci4gIFRoaXMgaXMgYSBoYXJkIHJma2lsbCBpbnB1dCBsaW5lIChpdCBjYW5ub3QgYmUgb3ZlcnJpZGRlbiBieQordGhlIGtlcm5lbCBkcml2ZXIpLgorCitUaGUgY2FyZCBhbHNvIGhhcyBvbmUgUENJIHJlZ2lzdGVyIHRoYXQsIGlmIG1hbmlwdWxhdGVkIGJ5IHRoZSBkcml2ZXIsIGNhdXNlcworaXQgdG8gYmxvY2sgdGhlIHRyYW5zbWl0dGVyLiAgVGhpcyBpcyBhIHNvZnQgcmZraWxsIGlucHV0IGxpbmUuCisKK0l0IGhhcyBhbHNvIGEgdGhlcm1hbCBwcm90ZWN0aW9uIGNpcmN1aXRyeSB0aGF0IHNodXRzIGRvd24gaXRzIHRyYW5zbWl0dGVyIGlmCit0aGUgY2FyZCBvdmVyaGVhdHMsIGFuZCBtYWtlcyB0aGUgc3RhdHVzIG9mIHRoYXQgcHJvdGVjdGlvbiBhdmFpbGFibGUgKG9ubHkgZm9yCityZWFkaW5nISkgdG8gdGhlIGtlcm5lbCBkcml2ZXIuICBUaGlzIGlzIGFsc28gYSBoYXJkIHJma2lsbCBpbnB1dCBsaW5lLgorCitJZiBlaXRoZXIgb25lIG9mIHRoZXNlIHJma2lsbCBsaW5lcyBhcmUgYWN0aXZlLCB0aGUgdHJhbnNtaXR0ZXIgaXMgYmxvY2tlZCBieQordGhlIGhhcmR3YXJlIGFuZCBmb3JjZWQgb2ZmbGluZS4KKworVGhlIGRyaXZlciBzaG91bGQgYWxsb2NhdGUgYW5kIGF0dGFjaCB0byBpdHMgc3RydWN0IGRldmljZSAqT05FKiBpbnN0YW5jZSBvZgordGhlIHJma2lsbCBjbGFzcyAodGhlcmUgaXMgb25seSBvbmUgdHJhbnNtaXR0ZXIpLgorCitJdCBjYW4gaW1wbGVtZW50IHRoZSBnZXRfc3RhdGUoKSBob29rLCBhbmQgcmV0dXJuIFJGS0lMTF9TVEFURV9IQVJEX0JMT0NLRUQgaWYKK2VpdGhlciBvbmUgb2YgaXRzIHR3byBoYXJkIHJma2lsbCBpbnB1dCBsaW5lcyBhcmUgYWN0aXZlLiAgSWYgdGhlIHR3byBoYXJkCityZmtpbGwgbGluZXMgYXJlIGluYWN0aXZlLCBpdCBtdXN0IHJldHVybiBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEIGlmIGl0cyBzb2Z0CityZmtpbGwgaW5wdXQgbGluZSBpcyBhY3RpdmUuICBPbmx5IGlmIG5vbmUgb2YgdGhlIHJma2lsbCBpbnB1dCBsaW5lcyBhcmUKK2FjdGl2ZSwgd2lsbCBpdCByZXR1cm4gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRC4KKworSWYgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlIGdldF9zdGF0ZSgpIGhvb2ssIGl0IG11c3QgbWFrZSBzdXJlIHRoYXQgaXRzIGNhbGxzCit0byByZmtpbGxfZm9yY2Vfc3RhdGUoKSBhcmUgZW5vdWdoIHRvIGtlZXAgdGhlIHN0YXR1cyBhbHdheXMgdXAtdG8tZGF0ZSwgYW5kIGl0CittdXN0IGRvIGEgcmZraWxsX2ZvcmNlX3N0YXRlKCkgb24gcmVzdW1lIGZyb20gc2xlZXAuCisKK0V2ZXJ5IHRpbWUgdGhlIGRyaXZlciBnZXRzIGEgbm90aWZpY2F0aW9uIGZyb20gdGhlIGNhcmQgdGhhdCBvbmUgb2YgaXRzIHJma2lsbAorbGluZXMgY2hhbmdlZCBzdGF0ZSAocG9sbGluZyBtaWdodCBiZSBuZWVkZWQgb24gYmFkbHkgZGVzaWduZWQgY2FyZHMgdGhhdCBkb24ndAorZ2VuZXJhdGUgaW50ZXJydXB0cyBmb3Igc3VjaCBldmVudHMpLCBpdCByZWNvbXB1dGVzIHRoZSByZmtpbGwgc3RhdGUgYXMgcGVyCithYm92ZSwgYW5kIGNhbGxzIHJma2lsbF9mb3JjZV9zdGF0ZSgpIHRvIHVwZGF0ZSBpdC4KKworVGhlIGRyaXZlciBzaG91bGQgaW1wbGVtZW50IHRoZSB0b2dnbGVfcmFkaW8oKSBob29rLCB0aGF0OgorCisxLiBSZXR1cm5zIGFuIGVycm9yIGlmIG9uZSBvZiB0aGUgaGFyZHdhcmUgcmZraWxsIGxpbmVzIGFyZSBhY3RpdmUsIGFuZCB0aGUKK2NhbGxlciBhc2tlZCBmb3IgUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRC4KKworMi4gQWN0aXZhdGVzIHRoZSBzb2Z0IHJma2lsbCBsaW5lIGlmIHRoZSBjYWxsZXIgYXNrZWQgZm9yIHN0YXRlCitSRktJTExfU1RBVEVfU09GVF9CTE9DS0VELiAgSXQgc2hvdWxkIGRvIHRoaXMgZXZlbiBpZiBvbmUgb2YgdGhlIGhhcmQgcmZraWxsCitsaW5lcyBhcmUgYWN0aXZlLCBlZmZlY3RpdmVseSBkb3VibGUtYmxvY2tpbmcgdGhlIHRyYW5zbWl0dGVyLgorCiszLiBEZWFjdGl2YXRlcyB0aGUgc29mdCByZmtpbGwgbGluZSBpZiBub25lIG9mIHRoZSBoYXJkd2FyZSByZmtpbGwgbGluZXMgYXJlCithY3RpdmUgYW5kIHRoZSBjYWxsZXIgYXNrZWQgZm9yIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQ6IEtlcm5lbCBBUEkKKworVG8gYnVpbGQgYSBkcml2ZXIgd2l0aCByZmtpbGwgc3Vic3lzdGVtIHN1cHBvcnQsIHRoZSBkcml2ZXIgc2hvdWxkIGRlcGVuZCBvbgorKG9yIHNlbGVjdCkgdGhlIEtjb25maWcgc3ltYm9sIFJGS0lMTDsgaXQgc2hvdWxkIF9ub3RfIGRlcGVuZCBvbiBSS0ZJTExfSU5QVVQuCisKK1RoZSBoYXJkd2FyZSB0aGUgZHJpdmVyIHRhbGtzIHRvIG1heSBiZSB3cml0ZS1vbmx5ICh3aGVyZSB0aGUgY3VycmVudCBzdGF0ZQorb2YgdGhlIGhhcmR3YXJlIGlzIHVua25vd24pLCBvciByZWFkLXdyaXRlICh3aGVyZSB0aGUgaGFyZHdhcmUgY2FuIGJlIHF1ZXJpZWQKK2Fib3V0IGl0cyBjdXJyZW50IHN0YXRlKS4KKworVGhlIHJma2lsbCBjbGFzcyB3aWxsIGNhbGwgdGhlIGdldF9zdGF0ZSBob29rIG9mIGEgZGV2aWNlIGV2ZXJ5IHRpbWUgaXQgbmVlZHMKK3RvIGtub3cgdGhlICpyZWFsKiBjdXJyZW50IHN0YXRlIG9mIHRoZSBoYXJkd2FyZS4gIFRoaXMgY2FuIGhhcHBlbiBvZnRlbi4KKworU29tZSBoYXJkd2FyZSBwcm92aWRlcyBldmVudHMgd2hlbiBpdHMgc3RhdHVzIGNoYW5nZXMuICBJbiB0aGVzZSBjYXNlcywgaXQgaXMKK2Jlc3QgZm9yIHRoZSBkcml2ZXIgdG8gbm90IHByb3ZpZGUgYSBnZXRfc3RhdGUgaG9vaywgYW5kIGluc3RlYWQgcmVnaXN0ZXIgdGhlCityZmtpbGwgY2xhc3MgKmFscmVhZHkqIHdpdGggdGhlIGNvcnJlY3Qgc3RhdHVzLCBhbmQga2VlcCBpdCB1cGRhdGVkIHVzaW5nCityZmtpbGxfZm9yY2Vfc3RhdGUoKSB3aGVuIGl0IGdldHMgYW4gZXZlbnQgZnJvbSB0aGUgaGFyZHdhcmUuCisKK1RoZXJlIGlzIG5vIHByb3Zpc2lvbiBmb3IgYSBzdGF0aWNhbGx5LWFsbG9jYXRlZCByZmtpbGwgc3RydWN0LiAgWW91IG11c3QKK3VzZSByZmtpbGxfYWxsb2NhdGUoKSB0byBhbGxvY2F0ZSBvbmUuCisKK1lvdSBzaG91bGQ6CisJLSByZmtpbGxfYWxsb2NhdGUoKQorCS0gbW9kaWZ5IHJma2lsbCBmaWVsZHMgKGZsYWdzLCBuYW1lKQorCS0gbW9kaWZ5IHN0YXRlIHRvIHRoZSBjdXJyZW50IGhhcmR3YXJlIHN0YXRlIChUSElTIElTIFRIRSBPTkxZIFRJTUUKKwkgIFlPVSBDQU4gQUNDRVNTIHN0YXRlIERJUkVDVExZKQorCS0gcmZraWxsX3JlZ2lzdGVyKCkKKworVGhlIG9ubHkgd2F5IHRvIHNldCBhIGRldmljZSB0byB0aGUgUkZLSUxMX1NUQVRFX0hBUkRfQkxPQ0tFRCBzdGF0ZSBpcyB0aHJvdWdoCithIHN1aXRhYmxlIHJldHVybiBvZiBnZXRfc3RhdGUoKSBvciB0aHJvdWdoIHJma2lsbF9mb3JjZV9zdGF0ZSgpLgorCitXaGVuIGEgZGV2aWNlIGlzIGluIHRoZSBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEIHN0YXRlLCB0aGUgb25seSB3YXkgdG8gc3dpdGNoCitpdCB0byBhIGRpZmZlcmVudCBzdGF0ZSBpcyB0aHJvdWdoIGEgc3VpdGFibGUgcmV0dXJuIG9mIGdldF9zdGF0ZSgpIG9yIHRocm91Z2gKK3Jma2lsbF9mb3JjZV9zdGF0ZSgpLgorCitJZiB0b2dnbGVfcmFkaW8oKSBpcyBjYWxsZWQgdG8gc2V0IGEgZGV2aWNlIHRvIHN0YXRlIFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQKK3doZW4gdGhhdCBkZXZpY2UgaXMgYWxyZWFkeSBhdCB0aGUgUkZLSUxMX1NUQVRFX0hBUkRfQkxPQ0tFRCBzdGF0ZSwgaXQgc2hvdWxkCitub3QgcmV0dXJuIGFuIGVycm9yLiAgSW5zdGVhZCwgaXQgc2hvdWxkIHRyeSB0byBkb3VibGUtYmxvY2sgdGhlIHRyYW5zbWl0dGVyLAorc28gdGhhdCBpdHMgc3RhdGUgd2lsbCBjaGFuZ2UgZnJvbSBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEIHRvCitSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEIHNob3VsZCB0aGUgaGFyZHdhcmUgYmxvY2tpbmcgY2Vhc2UuCisKK1BsZWFzZSByZWZlciB0byB0aGUgc291cmNlIGZvciBtb3JlIGRvY3VtZW50YXRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzU6IFVzZXJzcGFjZSBzdXBwb3J0CisKK3Jma2lsbCBkZXZpY2VzIGlzc3VlIHVldmVudHMgKHdpdGggYW4gYWN0aW9uIG9mICJjaGFuZ2UiKSwgd2l0aCB0aGUgZm9sbG93aW5nCitlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0OgorCitSRktJTExfTkFNRQorUkZLSUxMX1NUQVRFCitSRktJTExfVFlQRQorCitUaGUgQUJJIGZvciB0aGVzZSB2YXJpYWJsZXMgaXMgZGVmaW5lZCBieSB0aGUgc3lzZnMgYXR0cmlidXRlcy4gIEl0IGlzIGJlc3QKK3RvIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBzb3VyY2UgdG8gbWFrZSBzdXJlIG9mIHRoZSBwb3NzaWJsZSB2YWx1ZXMuCisKK0l0IGlzIGV4cGVjdGVkIHRoYXQgSEFMIHdpbGwgdHJhcCB0aG9zZSwgYW5kIGJyaWRnZSB0aGVtIHRvIERCVVMsIGV0Yy4gIFRoZXNlCitldmVudHMgQ0FOIGFuZCBTSE9VTEQgYmUgdXNlZCB0byBnaXZlIGZlZWRiYWNrIHRvIHRoZSB1c2VyIGFib3V0IHRoZSByZmtpbGwKK3N0YXR1cyBvZiB0aGUgc3lzdGVtLgorCitJbnB1dCBkZXZpY2VzIG1heSBpc3N1ZSBldmVudHMgdGhhdCBhcmUgcmVsYXRlZCB0byByZmtpbGwuICBUaGVzZSBhcmUgdGhlCit2YXJpb3VzIEtFWV8qIGV2ZW50cyBhbmQgU1dfKiBldmVudHMgc3VwcG9ydGVkIGJ5IHJma2lsbC1pbnB1dC5jLgorCisqKioqKipJTVBPUlRBTlQqKioqKioKK1doZW4gcmZraWxsLWlucHV0IGlzIEFDVElWRSwgdXNlcnNwYWNlIGlzIE5PVCBUTyBDSEFOR0UgVEhFIFNUQVRFIE9GIEFOIFJGS0lMTAorU1dJVENIIElOIFJFU1BPTlNFIFRPIEFOIElOUFVUIEVWRU5UIGFsc28gaGFuZGxlZCBieSByZmtpbGwtaW5wdXQsIHVubGVzcyBpdAoraGFzIHNldCB0byB0cnVlIHRoZSB1c2VyX2NsYWltIGF0dHJpYnV0ZSBmb3IgdGhhdCBwYXJ0aWN1bGFyIHN3aXRjaC4gIFRoaXMgcnVsZQoraXMgKmFic29sdXRlKjsgZG8gTk9UIHZpb2xhdGUgaXQuCisqKioqKipJTVBPUlRBTlQqKioqKioKKworVXNlcnNwYWNlIG11c3Qgbm90IGFzc3VtZSBpdCBpcyB0aGUgb25seSBzb3VyY2Ugb2YgY29udHJvbCBmb3IgcmZraWxsIHN3aXRjaGVzLgorVGhlaXIgc3RhdGUgQ0FOIGFuZCBXSUxMIGNoYW5nZSBkdWUgdG8gZmlybXdhcmUgYWN0aW9ucywgZGlyZWN0IHVzZXIgYWN0aW9ucywKK2FuZCB0aGUgcmZraWxsLWlucHV0IEVQTyBvdmVycmlkZSBmb3IgKl9SRktJTExfQUxMLgorCitXaGVuIHJma2lsbC1pbnB1dCBpcyBub3QgYWN0aXZlLCB1c2Vyc3BhY2UgbXVzdCBpbml0aWF0ZSBhIHJma2lsbCBzdGF0dXMKK2NoYW5nZSBieSB3cml0aW5nIHRvIHRoZSAic3RhdGUiIGF0dHJpYnV0ZSBpbiBvcmRlciBmb3IgYW55dGhpbmcgdG8gaGFwcGVuLgorCitUYWtlIHBhcnRpY3VsYXIgY2FyZSB0byBpbXBsZW1lbnQgRVZfU1cgU1dfUkZLSUxMX0FMTCBwcm9wZXJseS4gIFdoZW4gdGhhdAorc3dpdGNoIGlzIHNldCB0byBPRkYsICpldmVyeSogcmZraWxsIGRldmljZSAqTVVTVCogYmUgaW1tZWRpYXRlbHkgcHV0IGludG8gdGhlCitSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEIHN0YXRlLCBubyBxdWVzdGlvbnMgYXNrZWQuCiAKIFRoZSBmb2xsb3dpbmcgc3lzZnMgZW50cmllcyB3aWxsIGJlIGNyZWF0ZWQ6CiAKIAluYW1lOiBOYW1lIGFzc2lnbmVkIGJ5IGRyaXZlciB0byB0aGlzIGtleSAoaW50ZXJmYWNlIG9yIGRyaXZlciBuYW1lKS4KIAl0eXBlOiBOYW1lIG9mIHRoZSBrZXkgdHlwZSAoIndsYW4iLCAiYmx1ZXRvb3RoIiwgZXRjKS4KLQlzdGF0ZTogQ3VycmVudCBzdGF0ZSBvZiB0aGUga2V5LiAxOiBPbiwgMDogT2ZmLgorCXN0YXRlOiBDdXJyZW50IHN0YXRlIG9mIHRoZSB0cmFuc21pdHRlcgorCQkwOiBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VECisJCQl0cmFuc21pdHRlciBpcyBmb3JjZWQgb2ZmLCBidXQgb25lIGNhbiBvdmVycmlkZSBpdAorCQkJYnkgYSB3cml0ZSB0byB0aGUgc3RhdGUgYXR0cmlidXRlOworCQkxOiBSRktJTExfU1RBVEVfVU5CTE9DS0VECisJCQl0cmFuc21pdGVyIGlzIE5PVCBmb3JjZWQgb2ZmLCBhbmQgbWF5IG9wZXJhdGUgaWYKKwkJCWFsbCBvdGhlciBjb25kaXRpb25zIGZvciBzdWNoIG9wZXJhdGlvbiBhcmUgbWV0CisJCQkoc3VjaCBhcyBpbnRlcmZhY2UgaXMgdXAgYW5kIGNvbmZpZ3VyZWQsIGV0Yyk7CisJCTI6IFJGS0lMTF9TVEFURV9IQVJEX0JMT0NLRUQKKwkJCXRyYW5zbWl0dGVyIGlzIGZvcmNlZCBvZmYgYnkgc29tZXRoaW5nIG91dHNpZGUgb2YKKwkJCXRoZSBkcml2ZXIncyBjb250cm9sLiAgT25lIGNhbm5vdCBzZXQgYSBkZXZpY2UgdG8KKwkJCXRoaXMgc3RhdGUgdGhyb3VnaCB3cml0ZXMgdG8gdGhlIHN0YXRlIGF0dHJpYnV0ZTsKIAljbGFpbTogMTogVXNlcnNwYWNlIGhhbmRsZXMgZXZlbnRzLCAwOiBLZXJuZWwgaGFuZGxlcyBldmVudHMKIAogQm90aCB0aGUgInN0YXRlIiBhbmQgImNsYWltIiBlbnRyaWVzIGFyZSBhbHNvIHdyaXRhYmxlLiBGb3IgdGhlICJzdGF0ZSIgZW50cnkKLXRoaXMgbWVhbnMgdGhhdCB3aGVuIDEgb3IgMCBpcyB3cml0dGVuIGFsbCByYWRpb3MsIG5vdCB5ZXQgaW4gdGhlIHJlcXVlc3RlZAotc3RhdGUsIHdpbGwgYmUgd2lsbCBiZSB0b2dnbGVkIGFjY29yZGluZ2x5LgordGhpcyBtZWFucyB0aGF0IHdoZW4gMSBvciAwIGlzIHdyaXR0ZW4sIHRoZSBkZXZpY2UgcmZraWxsIHN0YXRlIChpZiBub3QgeWV0IGluCit0aGUgcmVxdWVzdGVkIHN0YXRlKSwgd2lsbCBiZSB3aWxsIGJlIHRvZ2dsZWQgYWNjb3JkaW5nbHkuCisKIEZvciB0aGUgImNsYWltIiBlbnRyeSB3cml0aW5nIDEgdG8gaXQgbWVhbnMgdGhhdCB0aGUga2VybmVsIG5vIGxvbmdlciBoYW5kbGVzCiBrZXkgZXZlbnRzIGV2ZW4gdGhvdWdoIFJGS0lMTF9JTlBVVCBpbnB1dCB3YXMgZW5hYmxlZC4gV2hlbiAiY2xhaW0iIGhhcyBiZWVuCiBzZXQgdG8gMCwgdXNlcnNwYWNlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBpdCBsaXN0ZW5zIGZvciB0aGUgaW5wdXQgZXZlbnRzIG9yCi1jaGVjayB0aGUgc3lzZnMgInN0YXRlIiBlbnRyeSByZWd1bGFybHkgdG8gY29ycmVjdGx5IHBlcmZvcm0gdGhlIHJlcXVpcmVkCi10YXNrcyB3aGVuIHRoZSBya2ZpbGwga2V5IGlzIHByZXNzZWQuCitjaGVjayB0aGUgc3lzZnMgInN0YXRlIiBlbnRyeSByZWd1bGFybHkgdG8gY29ycmVjdGx5IHBlcmZvcm0gdGhlIHJlcXVpcmVkIHRhc2tzCit3aGVuIHRoZSBya2ZpbGwga2V5IGlzIHByZXNzZWQuCisKK0Egbm90ZSBhYm91dCBpbnB1dCBkZXZpY2VzIGFuZCBFVl9TVyBldmVudHM6CisKK0luIG9yZGVyIHRvIGtub3cgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gaW5wdXQgZGV2aWNlIHN3aXRjaCAobGlrZQorU1dfUkZLSUxMX0FMTCksIHlvdSB3aWxsIG5lZWQgdG8gdXNlIGFuIElPQ1RMLiAgVGhhdCBpbmZvcm1hdGlvbiBpcyBub3QKK2F2YWlsYWJsZSB0aHJvdWdoIHN5c2ZzIGluIGEgZ2VuZXJpYyB3YXkgYXQgdGhpcyB0aW1lLCBhbmQgaXQgaXMgbm90IGF2YWlsYWJsZQordGhyb3VnaCB0aGUgcmZraWxsIGNsYXNzIEFUIEFMTC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlciBiL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlcgppbmRleCA4OGFkNjE1Li43N2JhMGFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC9kcml2ZXIKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyCkBAIC0xODYsNiArMTg2LDE3IEBACiAJTG9ja2luZzogcG9ydF9zZW0gdGFrZW4uCiAJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KIAorICBmbHVzaF9idWZmZXIocG9ydCkKKwlGbHVzaCBhbnkgd3JpdGUgYnVmZmVycywgcmVzZXQgYW55IERNQSBzdGF0ZSBhbmQgc3RvcCBhbnkKKwlvbmdvaW5nIERNQSB0cmFuc2ZlcnMuCisKKwlUaGlzIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBwb3J0LT5pbmZvLT54bWl0IGNpcmN1bGFyCisJYnVmZmVyIGlzIGNsZWFyZWQuCisKKwlMb2NraW5nOiBwb3J0LT5sb2NrIHRha2VuLgorCUludGVycnVwdHM6IGxvY2FsbHkgZGlzYWJsZWQuCisJVGhpcyBjYWxsIG11c3Qgbm90IHNsZWVwCisKICAgc2V0X3Rlcm1pb3MocG9ydCx0ZXJtaW9zLG9sZHRlcm1pb3MpCiAJQ2hhbmdlIHRoZSBwb3J0IHBhcmFtZXRlcnMsIGluY2x1ZGluZyB3b3JkIGxlbmd0aCwgcGFyaXR5LCBzdG9wCiAJYml0cy4gIFVwZGF0ZSByZWFkX3N0YXR1c19tYXNrIGFuZCBpZ25vcmVfc3RhdHVzX21hc2sgdG8gaW5kaWNhdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwKaW5kZXggYzRkMmUzNS4uOWQ2NDRmNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgQ29tcG9uZW50czwvdGl0bGU+CiAhRXNvdW5kL2NvcmUvZGV2aWNlLmMKICAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5LTU9EIGFuZCBEZXZpY2UgRmlsZSBFbnRyaWVzPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Nb2R1bGUgcmVxdWVzdHMgYW5kIERldmljZSBGaWxlIEVudHJpZXM8L3RpdGxlPgogIUVzb3VuZC9jb3JlL3NvdW5kLmMKICAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5NZW1vcnkgTWFuYWdlbWVudCBIZWxwZXJzPC90aXRsZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BlY2lhbGl4LnR4dCBiL0RvY3VtZW50YXRpb24vc3BlY2lhbGl4LnR4dAppbmRleCA0YTRiNDI4Li42ZWI2ZjNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwZWNpYWxpeC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGVjaWFsaXgudHh0CkBAIC0yNzAsOCArMjcwLDggQEAKIEhhcmR3YXJlIGhhbmRzaGFraW5nIGlzc3Vlcy4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiBUaGUgZGVmYXVsdAotKCJTcGVjaWFsaXggRFRSL1JUUyBwaW4gaXMgUlRTIiBpcyBvZmYpIHRoZSBwaW4gYmVoYXZlcyBhcyBEVFIgd2hlbgorVGhlIGRyaXZlciBjYW4gYmUgdG9sZCB0byBvcGVyYXRlIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gVGhlIGRlZmF1bHQKK2JlaGF2aW91ciBpcyBzcGVjaWFsaXguc3hfcnRzY3RzID0gMCB3aGVyZSB0aGUgcGluIGJlaGF2ZXMgYXMgRFRSIHdoZW4KIGhhcmR3YXJlIGhhbmRzaGFraW5nIGlzIG9mZi4gSXQgYmVoYXZlcyBhcyB0aGUgUlRTIGhhcmR3YXJlCiBoYW5kc2hha2luZyBzaWduYWwgd2hlbiBoYXJkd2FyZSBoYW5kc2hha2luZyBpcyBzZWxlY3RlZC4KIApAQCAtMjgwLDcgKzI4MCw3IEBACiBzb2Z0d2FyZSBoYW5kc2hha2luZy4gU28gc3dpdGNoaW5nIG9uIHRoZSBmbHkgaXMgbm90IHJlYWxseSBhbgogb3B0aW9uLgogCi1JIGFjdHVhbGx5IHByZWZlciB0byB1c2UgdGhlICJTcGVjaWFsaXggRFRSL1JUUyBwaW4gaXMgUlRTIiBvcHRpb24uCitJIGFjdHVhbGx5IHByZWZlciB0byB1c2UgdGhlICJzcGVjaWFsaXguc3hfcnRzY3RzPTEiIG9wdGlvbi4KIFRoaXMgbWFrZXMgdGhlIERUUi9SVFMgcGluIGFsd2F5cyBhbiBSVFMgcGluLCBhbmQgaW9jdGxzIHRvCiBjaGFuZ2UgRFRSIGFyZSBhbHdheXMgaWdub3JlZC4gSSBoYXZlIGEgY2FibGUgdGhhdCBpcyBjb25maWd1cmVkCiBmb3IgdGhpcy4gCkBAIC0zNzksNyArMzc5LDUgQEAKICAgICAgICAgICAgIFlvdSBoYXZlIHRvIFdSSVRFIHRvIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIHRvIGV2ZW4gCiAgICAgICAgICAgICByZWFkLXByb2JlIGEgQ0QxODZ4IHJlZ2lzdGVyLiBEaXNhYmxlIGF1dG9kZXRlY3Rpb24/CiAgICAgICAgICAtLSBTcGVjaWFsaXg6IGFueSBzdWdnZXN0aW9ucz8KLSAgICAgICAtIEFyYml0cmFyeSBiYXVkIHJhdGVzIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LiAKLSAgICAgICAgICAgIElmIHlvdSBuZWVkIHRoaXMsIGJ1ZyBtZSBhYm91dCBpdC4gCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNmcy1ydWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2ZzLXJ1bGVzLnR4dAppbmRleCA4MGVmNTYyLi42MDQ5YTJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2ZzLXJ1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2ZzLXJ1bGVzLnR4dApAQCAtMyw5ICszLDggQEAKIFRoZSBrZXJuZWwtZXhwb3J0ZWQgc3lzZnMgZXhwb3J0cyBpbnRlcm5hbCBrZXJuZWwgaW1wbGVtZW50YXRpb24gZGV0YWlscwogYW5kIGRlcGVuZHMgb24gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgYW5kIGxheW91dC4gSXQgaXMgYWdyZWVkIHVwb24KIGJ5IHRoZSBrZXJuZWwgZGV2ZWxvcGVycyB0aGF0IHRoZSBMaW51eCBrZXJuZWwgZG9lcyBub3QgcHJvdmlkZSBhIHN0YWJsZQotaW50ZXJuYWwgQVBJLiBBcyBzeXNmcyBpcyBhIGRpcmVjdCBleHBvcnQgb2Yga2VybmVsIGludGVybmFsCi1zdHJ1Y3R1cmVzLCB0aGUgc3lzZnMgaW50ZXJmYWNlIGNhbm5vdCBwcm92aWRlIGEgc3RhYmxlIGludGVyZmFjZSBlaXRoZXI7Ci1pdCBtYXkgYWx3YXlzIGNoYW5nZSBhbG9uZyB3aXRoIGludGVybmFsIGtlcm5lbCBjaGFuZ2VzLgoraW50ZXJuYWwgQVBJLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBhc3BlY3RzIG9mIHRoZSBzeXNmcyBpbnRlcmZhY2UgdGhhdAorbWF5IG5vdCBiZSBzdGFibGUgYWNyb3NzIGtlcm5lbCByZWxlYXNlcy4KIAogVG8gbWluaW1pemUgdGhlIHJpc2sgb2YgYnJlYWtpbmcgdXNlcnMgb2Ygc3lzZnMsIHdoaWNoIGFyZSBpbiBtb3N0IGNhc2VzCiBsb3ctbGV2ZWwgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucywgd2l0aCBhIG5ldyBrZXJuZWwgcmVsZWFzZSwgdGhlIHVzZXJzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlbGVwaG9ueS9peGoudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWxlcGhvbnkvaXhqLnR4dAppbmRleCA2MjEwMjRmLi40NGQxMjQwMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWxlcGhvbnkvaXhqLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlbGVwaG9ueS9peGoudHh0CkBAIC0zMDUsMjEgKzMwNSwxNCBAQAogCiB3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgbmVlZGVkIGRyaXZlcnMgZ2V0dGluZyBsb2FkZWQgYXV0b21hdGljYWxseS4KIAotICAgZy4gIGlmIHlvdSBhcmUgcGxhbm5pbmcgb24gdXNpbmcga2VybmVsZCB0byBhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIAotbW9kdWxlIGZvciB5b3UsIHRoZW4geW91IG5lZWQgdG8gZWRpdCAvZXRjL2NvbmYubW9kdWxlcyBhbmQgYWRkIHRoZSAKKyAgIGcuICBpZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGhhdmluZyB0aGUga2VybmVsIGF1dG9tYXRpY2FsbHkgcmVxdWVzdAordGhlIG1vZHVsZSBmb3IgeW91LCB0aGVuIHlvdSBuZWVkIHRvIGVkaXQgL2V0Yy9jb25mLm1vZHVsZXMgYW5kIGFkZCB0aGUKIGZvbGxvd2luZyBsaW5lczoKIAogCW9wdGlvbnMgaXhqIGRzcGlvPTB4MzQwIHhpbz0weDMzMCBpeGpkZWJ1Zz0wCiAKIElmIHlvdSBkbyB0aGlzLCB0aGVuIHdoZW4geW91IGV4ZWN1dGUgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZQotbW9kdWxlIGtlcm5lbGQgd2lsbCBsb2FkIHRoZSBtb2R1bGUgZm9yIHlvdS4gIE5vdGUgdGhhdCB0byBkbyB0aGlzLAoteW91IG5lZWQgdG8gaGF2ZSB5b3VyIGtlcm5lbCBzZXQgdG8gc3VwcG9ydCBrZXJuZWxkLiAgWW91IGNhbiBjaGVjawotZm9yIHRoaXMgYnkgbG9va2luZyBhdCAvdXNyL3NyYy9saW51eC8uY29uZmlnIGFuZCB5b3Ugc2hvdWxkIHNlZSB0aGlzOgotCi0JIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotCSMKLQk8c25pcD4KLQlDT05GSUdfS01PRD15Cittb2R1bGUgdGhlIGtlcm5lbCB3aWxsIHJlcXVlc3QgdGhhdCBpdCBpcyBsb2FkZWQuCiAKICAgaC4gIGlmIHlvdSB3YW50IG5vbi1yb290IHVzZXJzIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIAogaXhqIGRldmljZXMgKHRoaXMgaXMgYSBnb29kIGlkZWEhKSB5b3Ugc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmc6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2dhZGdldF9zZXJpYWwudHh0CmluZGV4IDgxNWY1YzIuLjliMjJiZDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL2dhZGdldF9zZXJpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2dhZGdldF9zZXJpYWwudHh0CkBAIC0xLDYgKzEsNyBAQAogCiAgICAgICAgICAgICAgICAgIExpbnV4IEdhZGdldCBTZXJpYWwgRHJpdmVyIHYyLjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLzIwLzIwMDQKKyAgICAgICAgICAgICAgICAgICh1cGRhdGVkIDgtTWF5LTIwMDggZm9yIHYyLjMpCiAKIAogTGljZW5zZSBhbmQgRGlzY2xhaW1lcgpAQCAtMzEsNyArMzIsNyBAQAogLS0tLS0tLS0tLS0tLQogVmVyc2lvbnMgb2YgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGFyZSBhdmFpbGFibGUgZm9yIHRoZQogMi40IExpbnV4IGtlcm5lbHMsIGJ1dCB0aGlzIGRvY3VtZW50IGFzc3VtZXMgeW91IGFyZSB1c2luZwotdmVyc2lvbiAyLjAgb3IgbGF0ZXIgb2YgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGluIGEgMi42Cit2ZXJzaW9uIDIuMyBvciBsYXRlciBvZiB0aGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgaW4gYSAyLjYKIExpbnV4IGtlcm5lbC4KIAogVGhpcyBkb2N1bWVudCBhc3N1bWVzIHRoYXQgeW91IGFyZSBmYW1pbGlhciB3aXRoIExpbnV4IGFuZApAQCAtNDAsNiArNDEsMTIgQEAKIFVTQiBhbmQgc2VyaWFsIGRldmljZXMuICBJdCBhbHNvIGFzc3VtZXMgeW91IGNvbmZpZ3VyZSB0aGUgTGludXgKIGdhZGdldCBhbmQgdXNiIGRyaXZlcnMgYXMgbW9kdWxlcy4KIAorV2l0aCB2ZXJzaW9uIDIuMyBvZiB0aGUgZHJpdmVyLCBtYWpvciBhbmQgbWlub3IgZGV2aWNlIG5vZGVzIGFyZQorbm8gbG9uZ2VyIHN0YXRpY2FsbHkgZGVmaW5lZC4gIFlvdXIgTGludXggYmFzZWQgc3lzdGVtIHNob3VsZCBtb3VudAorc3lzZnMgaW4gL3N5cywgYW5kIHVzZSAibWRldiIgKGluIEJ1c3lib3gpIG9yICJ1ZGV2IiB0byBtYWtlIHRoZQorL2RldiBub2RlcyBtYXRjaGluZyB0aGUgc3lzZnMgL3N5cy9jbGFzcy90dHkgZmlsZXMuCisKKwogCiBPdmVydmlldwogLS0tLS0tLS0KQEAgLTEwNCwxNSArMTExLDggQEAKIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwuICBUaGVuIHJlYnVpbGQgYW5kIGluc3RhbGwgdGhlIGtlcm5lbCBvcgogbW9kdWxlcy4KIAotVGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIHVzZXMgbWFqb3IgbnVtYmVyIDEyNywgZm9yIG5vdy4gIFNvIHlvdQotd2lsbCBuZWVkIHRvIGNyZWF0ZSBhIGRldmljZSBub2RlIGZvciBpdCwgbGlrZSB0aGlzOgotCi0gIG1rbm9kIC9kZXYvdHR5Z3NlcmlhbCBjIDEyNyAwCi0KLVlvdSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlLgotCiBUaGVuIHlvdSBtdXN0IGxvYWQgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyLiAgVG8gbG9hZCBpdCBhcyBhbgotQUNNIGRldmljZSwgZG8gdGhpczoKK0FDTSBkZXZpY2UgKHJlY29tbWVuZGVkIGZvciBpbnRlcm9wZXJhYmlsaXR5KSwgZG8gdGhpczoKIAogICBtb2Rwcm9iZSBnX3NlcmlhbCB1c2VfYWNtPTEKIApAQCAtMTI1LDYgKzEyNSwyMyBAQAogc2lkZSBMaW51eCBzeXN0ZW0uICBZb3UgY2FuIGFkZCB0aGlzIHRvIHRoZSBzdGFydCB1cCBzY3JpcHRzLCBpZgogZGVzaXJlZC4KIAorWW91ciBzeXN0ZW0gc2hvdWxkIHVzZSBtZGV2IChmcm9tIGJ1c3lib3gpIG9yIHVkZXYgdG8gbWFrZSB0aGUKK2RldmljZSBub2Rlcy4gIEFmdGVyIHRoaXMgZ2FkZ2V0IGRyaXZlciBoYXMgYmVlbiBzZXQgdXAgeW91IHNob3VsZAordGhlbiBzZWUgYSAvZGV2L3R0eUdTMCBub2RlOgorCisgICMgbHMgLWwgL2Rldi90dHlHUzAgfCBjYXQKKyAgY3J3LXJ3LS0tLSAgICAxIHJvb3QgICAgIHJvb3QgICAgIDI1MywgICAwIE1heSAgOCAxNDoxMCAvZGV2L3R0eUdTMAorICAjCisKK05vdGUgdGhhdCB0aGUgbWFqb3IgbnVtYmVyICgyNTMsIGFib3ZlKSBpcyBzeXN0ZW0tc3BlY2lmaWMuICBJZgoreW91IG5lZWQgdG8gY3JlYXRlIC9kZXYgbm9kZXMgYnkgaGFuZCwgdGhlIHJpZ2h0IG51bWJlcnMgdG8gdXNlCit3aWxsIGJlIGluIHRoZSAvc3lzL2NsYXNzL3R0eS90dHlHUzAvZGV2IGZpbGUuCisKK1doZW4geW91IGxpbmsgdGhpcyBnYWRnZXQgZHJpdmVyIGVhcmx5LCBwZXJoYXBzIGV2ZW4gc3RhdGljYWxseSwKK3lvdSBtYXkgd2FudCB0byBzZXQgdXAgYW4gL2V0Yy9pbml0dGFiIGVudHJ5IHRvIHJ1biAiZ2V0dHkiIG9uIGl0LgorVGhlIC9kZXYvdHR5R1MwIGxpbmUgc2hvdWxkIHdvcmsgbGlrZSBtb3N0IGFueSBvdGhlciBzZXJpYWwgcG9ydC4KKworCiBJZiBnYWRnZXQgc2VyaWFsIGlzIGxvYWRlZCBhcyBhbiBBQ00gZGV2aWNlIHlvdSB3aWxsIHdhbnQgdG8gdXNlCiBlaXRoZXIgdGhlIFdpbmRvd3Mgb3IgTGludXggQUNNIGRyaXZlciBvbiB0aGUgaG9zdCBzaWRlLiAgSWYgZ2FkZ2V0CiBzZXJpYWwgaXMgbG9hZGVkIGFzIGEgYnVsayBpbi9vdXQgZGV2aWNlLCB5b3Ugd2lsbCB3YW50IHRvIHVzZSB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3BlcnNpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvcGVyc2lzdC50eHQKaW5kZXggZDU2Y2IxYS4uMDc0YjE1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvcGVyc2lzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvcGVyc2lzdC50eHQKQEAgLTgxLDggKzgxLDExIEBACiBzYW1lIGRlc2NyaXB0b3JzIGFzIGJlZm9yZSwgaW5jbHVkaW5nIHRoZSBWZW5kb3IgYW5kIFByb2R1Y3QgSURzLCB0aGVuCiB0aGUga2VybmVsIGNvbnRpbnVlcyB0byB1c2UgdGhlIHNhbWUgZGV2aWNlIHN0cnVjdHVyZS4gIEluIGVmZmVjdCwgdGhlCiBrZXJuZWwgdHJlYXRzIHRoZSBkZXZpY2UgYXMgdGhvdWdoIGl0IGhhZCBtZXJlbHkgYmVlbiByZXNldCBpbnN0ZWFkIG9mCi11bnBsdWdnZWQuICBUaGUgc2FtZSB0aGluZyBoYXBwZW5zIGlmIHRoZSBob3N0IGNvbnRyb2xsZXIgaXMgaW4gdGhlCi1leHBlY3RlZCBzdGF0ZSBidXQgYSBVU0IgZGV2aWNlIHdhcyB1bnBsdWdnZWQgYW5kIHRoZW4gcmVwbHVnZ2VkLgordW5wbHVnZ2VkLgorCitUaGUgc2FtZSB0aGluZyBoYXBwZW5zIGlmIHRoZSBob3N0IGNvbnRyb2xsZXIgaXMgaW4gdGhlIGV4cGVjdGVkIHN0YXRlCitidXQgYSBVU0IgZGV2aWNlIHdhcyB1bnBsdWdnZWQgYW5kIHRoZW4gcmVwbHVnZ2VkLCBvciBpZiBhIFVTQiBkZXZpY2UKK2ZhaWxzIHRvIGNhcnJ5IG91dCBhIG5vcm1hbCByZXN1bWUuCiAKIElmIG5vIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gdGhlIHBvcnQsIG9yIGlmIHRoZSBkZXNjcmlwdG9ycyBhcmUKIGRpZmZlcmVudCBmcm9tIHdoYXQgdGhlIGtlcm5lbCByZW1lbWJlcnMsIHRoZW4gdGhlIHRyZWF0bWVudCBpcyB3aGF0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91aGNpLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VoY2kudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjI1OTUyLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3VoY2kudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLVNwZWNpZmljYXRpb24gYW5kIEludGVybmFscyBmb3IgdGhlIE5ldyBVSENJIERyaXZlciAoV2hpdGVwYXBlci4uLikKLQotCWJyb3VnaHQgdG8geW91IGJ5Ci0KLQlHZW9yZyBBY2hlciwgYWNoZXJAaW4udHVtLmRlIChleGVjdXRpdmUgc2xhdmUpIChiYXNlIGd1aXRhcikKLQlEZXRpIEZsaWVnbCwgZGV0aUBmbGllZ2wuZGUgKGV4ZWN1dGl2ZSBzbGF2ZSkgKGxlYWQgdm9pY2UpCi0JVGhvbWFzIFNhaWxlciwgc2FpbGVyQGlmZS5lZS5ldGh6LmNoIChjaGllZiBjb25zdWx0YW50KSAoY2hlZXIgbGVhZGVyKQotIAotCSRJZDogUkVBRE1FLnVoY2ksdiAxLjEgMTk5OS8xMi8xNCAxNDowMzowMiBmbGllZ2wgRXhwICQKLQotVGhpcyBkb2N1bWVudCBhbmQgdGhlIG5ldyB1aGNpIHNvdXJjZXMgY2FuIGJlIGZvdW5kIG9uCi0JCWh0dHA6Ly9ob3Rzd2FwLmluLnR1bS5kZS91c2IKLQotMS4gR2VuZXJhbCBpc3N1ZXMKLQotMS4xIFdoeSBhIG5ldyBVSENJIGRyaXZlciwgd2UgYWxyZWFkeSBoYXZlIG9uZT8hPwotCi1Db3JyZWN0LCBidXQgaXRzIGludGVybmFsIHN0cnVjdHVyZSBnb3QgbW9yZSBhbmQgbW9yZSBtaXhlZCB1cCBieSB0aGUgKHN0aWxsCi1vbmdvaW5nKSBlZmZvcnRzIHRvIGdldCBpc29jaHJvbm91cyB0cmFuc2ZlcnMgKElTTykgdG8gd29yay4KLVNpbmNlIHRoZXJlIGlzIGFuIGluY3JlYXNpbmcgbmVlZCBmb3IgcmVsaWFibGUgSVNPLXRyYW5zZmVycyAoZXNwZWNpYWxseSAKLWZvciBVU0ItYXVkaW8gbmVlZGVkIGJ5IFRTIGFuZCBmb3IgYSBEQUItVVNCLVJlY2VpdmVyIGJ1aWxkIGJ5IEdBIGFuZCBERiksIAotdGhpcyBzdGF0ZSB3YXMgYSBiaXQgdW5zYXRpc2Z5aW5nIGluIG91ciBvcGluaW9uLCBzbyB3ZSd2ZSBkZWNpZGVkIChiYXNlZAotb24ga25vd2xlZGdlIGFuZCBleHBlcmllbmNlcyB3aXRoIHRoZSBvbGQgVUhDSSBkcml2ZXIpIHRvIHN0YXJ0IAotZnJvbSBzY3JhdGNoIHdpdGggYSBuZXcgYXBwcm9hY2gsIG11Y2ggc2ltcGxlciBidXQgYXQgdGhlIHNhbWUgdGltZSBtb3JlIAotcG93ZXJmdWwuCi1JdCBpcyBpbnNwaXJlZCBieSB0aGUgd2F5IFdpbjk4L1dpbjIwMDAgaGFuZGxlcyBVU0IgcmVxdWVzdHMgdmlhIFVSQnMsCi1idXQgaXQncyBkZWZpbml0ZWx5IDEwMCUgZnJlZSBvZiBNUy1jb2RlIGFuZCBkb2Vzbid0IGNyYXNoIHdoaWxlIAotdW5wbHVnZ2luZyBhbiB1c2VkIElTTy1kZXZpY2UgbGlrZSBXaW45OCA7LSkKLVNvbWUgY29kZSBmb3IgSFcgc2V0dXAgYW5kIHJvb3QgaHViIG1hbmFnZW1lbnQgd2FzIHRha2VuIGZyb20gdGhlIAotb3JpZ2luYWwgVUhDSSBkcml2ZXIsIGJ1dCBoZWF2aWx5IG1vZGlmaWVkIHRvIGZpdCBpbnRvIHRoZSBuZXcgY29kZS4KLVRoZSBpbnZlbnRpb24gb2YgdGhlIGJhc2ljIGNvbmNlcHQsIGFuZCBtYWpvciBjb2Rpbmcgd2VyZSBjb21wbGV0ZWQgaW4gdHdvIAotZGF5cyAoYW5kIG5pZ2h0cykgb24gdGhlIDE2dGggYW5kIDE3dGggb2YgT2N0b2JlciAxOTk5LCBub3cga25vd24gYXMgdGhlCi1ncmVhdCBVU0ItT2N0b2Jlci1SZXZvbHV0aW9uIHN0YXJ0ZWQgYnkgR0EsIERGLCBhbmQgVFMgOy0pCi0KLVNpbmNlIHRoZSBjb25jZXB0IGlzIGluIG5vIHdheSBVSENJIGRlcGVuZGVudCwgd2UgaG9wZSB0aGF0IGl0IHdpbGwgYWxzbyBiZSAKLXRyYW5zZmVycmVkIHRvIHRoZSBPSENJLWRyaXZlciwgc28gYm90aCBkcml2ZXJzIHNoYXJlIGEgY29tbW9uIEFQSS4KLQotMS4yLiBBZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzCi0KLSsgQWxsIFVTQiB0cmFuc2ZlciB0eXBlcyB3b3JrIG5vdyEKLSsgQXN5bmNocm9ub3VzIG9wZXJhdGlvbgotKyBTaW1wbGUsIGJ1dCBwb3dlcmZ1bCBpbnRlcmZhY2UgKG9ubHkgdHdvIGNhbGxzIGZvciBzdGFydCBhbmQgY2FuY2VsKQotKyBFYXN5IG1pZ3JhdGlvbiB0byB0aGUgbmV3IEFQSSwgc2ltcGxpZmllZCBieSBhIGNvbXBhdGliaWxpdHkgQVBJCi0rIFNpbXBsZSB1c2FnZSBvZiBJU08gdHJhbnNmZXJzCi0rIEF1dG9tYXRpYyBsaW5raW5nIG9mIHJlcXVlc3RzCi0rIElTTyB0cmFuc2ZlcnMgYWxsb3cgdmFyaWFibGUgbGVuZ3RoIGZvciBlYWNoIGZyYW1lIGFuZCBzdHJpcGluZwotKyBObyBDUFUgZGVwZW5kZW50IGFuZCBub24tcG9ydGFibGUgYXRvbWljIG1lbW9yeSBhY2Nlc3MsIG5vIGFzbSgpLWlubGluZXMKLSsgVGVzdGVkIG9uIHg4NiBhbmQgQWxwaGEKLQotLSBSZXdyaXRpbmcgZm9yIElTTyB0cmFuc2ZlcnMgbmVlZGVkCi0KLTEuMy4gSXMgdGhlcmUgc29tZSBjb21wYXRpYmlsaXR5IHRvIHRoZSBvbGQgQVBJPwotCi1ZZXMsIGJ1dCBvbmx5IGZvciBjb250cm9sLCBidWxrIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzLiBXZSd2ZSBpbXBsZW1lbnRlZCAKLXNvbWUgd3JhcHBlciBjYWxscyBmb3IgdGhlc2UgdHJhbnNmZXIgdHlwZXMuIFRoZSB1c2Jjb3JlIHdvcmtzIGZpbmUgd2l0aCAKLXRoZXNlIHdyYXBwZXJzLiBGb3IgSVNPIHRoZXJlJ3Mgbm8gY29tcGF0aWJpbGl0eSwgYmVjYXVzZSB0aGUgb2xkIElTTy1BUEkgCi1hbmQgaXRzIHNlbWFudGljcyB3ZXJlIHVubmVjZXNzYXJ5IGNvbXBsaWNhdGVkIGluIG91ciBvcGluaW9uLgotCi0xLjQuIFdoYXQncyByZWFsbHkgd29ya2luZz8KLQotQXMgc2FpZCBhYm92ZSwgQ1RSTCBhbmQgQlVMSyBhbHJlYWR5IHdvcmsgZmluZSBldmVuIHdpdGggdGhlIHdyYXBwZXJzLAotc28gbGVnYWN5IGNvZGUgd291bGRuJ3Qgbm90aWNlIHRoZSBjaGFuZ2UuCi1SZWdhcmRpbmcgdG8gVGhvbWFzLCBJU08gdHJhbnNmZXJzIG5vdyBydW4gc3RhYmxlIHdpdGggVVNCIGF1ZGlvLgotSU5UIHRyYW5zZmVycyAoZS5nLiBtb3VzZSBkcml2ZXIpIHdvcmsgZmluZSwgdG9vLgotCi0xLjUuIEFyZSB0aGVyZSBhbnkgYnVncz8KLQotTm8gOy0pCi1IbS4uLgotV2VsbCwgb2YgY291cnNlIHRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgZXh0ZW5zaXZlIHRlc3Rpbmcgb24gYWxsIGF2YWlsYWJsZQotaGFyZHdhcmUsIGJ1dCB3ZSBiZWxpZXZlIHRoYXQgYW55IGZpeGVzIHNob3VsZG4ndCBoYXJtIHRoZSBvdmVyYWxsIGNvbmNlcHQuCi0KLTEuNi4gV2hhdCBzaG91bGQgYmUgZG9uZSBuZXh0PwotCi1BIGxhcmdlIHBhcnQgb2YgdGhlIHJlcXVlc3QgaGFuZGxpbmcgc2VlbXMgdG8gYmUgaWRlbnRpY2FsIGZvciBVSENJIGFuZCAKLU9IQ0ksIHNvIGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIGV4dHJhY3QgdGhlIGNvbW1vbiBwYXJ0cyBhbmQgaGF2ZSBvbmx5IAotdGhlIEhXIHNwZWNpZmljIHN0dWZmIGluIHVoY2kuYy4gRnVydGhlcm1vcmUsIGFsbCBvdGhlciBVU0IgZGV2aWNlIGRyaXZlcnMKLXNob3VsZCBuZWVkIFVSQmlmaWNhdGlvbiwgaWYgdGhleSB1c2UgaXNvY2hyb25vdXMgb3IgaW50ZXJydXB0IHRyYW5zZmVycy4KLU9uZSB0aGluZyBtaXNzaW5nIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIChhbmQgdGhlIG9sZCBVSENJIGRyaXZlcikgCi1pcyBmYWlyIHF1ZXVlaW5nIGZvciBCVUxLIHRyYW5zZmVycy4gU2luY2UgdGhpcyB3b3VsZCBuZWVkIChpbiBwcmluY2lwbGUpIAotdGhlIGFsdGVyYXRpb24gb2YgYWxyZWFkeSBjb25zdHJ1Y3RlZCBURCBjaGFpbnMgKHRvIHN3aXRjaCBmcm9tIGRlcHRoIHRvIAotYnJlYWR0aCBleGVjdXRpb24pLCBhbm90aGVyIHdheSBoYXMgdG8gYmUgZm91bmQuIE1heWJlIHNvbWUgc2ltcGxlIAotaGV1cmlzdGljcyB3b3JrIHdpdGggdGhlIHNhbWUgZWZmZWN0LgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotMi4gSW50ZXJuYWwgc3RydWN0dXJlIGFuZCBtZWNoYW5pc21zCi0KLVRvIGdldCBxdWlja2x5IGZhbWlsaWFyIHdpdGggdGhlIGludGVybmFsIHN0cnVjdHVyZXMsIGhlcmUncyBhIHNob3J0Ci1kZXNjcmlwdGlvbiBob3cgdGhlIG5ldyBVSENJIGRyaXZlciB3b3Jrcy4gSG93ZXZlciwgdGhlIHVsdGltYXRlIHNvdXJjZSBvZgotdHJ1dGggaXMgb25seSB1aGNpLmMhCi0KLTIuMS4gRGVzY3JpcHRvciBzdHJ1Y3R1cmUgKFFIcyBhbmQgVERzKQotCi1EdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZSBmb2xsb3dpbmcgc2tlbGV0b24gaXMgYWxsb2NhdGVkIGluIGluaXRfc2tlbDoKLQotCSBmcmFtZXNwZWNpZmljICAgICAgICAgICB8ICAgICAgICAgICBjb21tb24gY2hhaW4gICAgIAotCi1mcmFtZWxpc3RbXQotWyAgMCBdLS0tLS0+IFREIC0tPiBURCAtLS0tLS0tXAotWyAgMSBdLS0tLS0+IFREIC0tPiBURCAtLS0tLS0tLT4gVEQgLS0tLT4gUUggLS0tLS0tLT4gUUggLS0tLS0tLT4gUUggLS0tPiBOVUxMCi0gIC4uLiAgICAgICAgVEQgLS0+IFREIC0tLS0tLS0vCi1bMTAyM10tLS0tLT4gVEQgLS0+IFREIC0tLS0tLS8KLQkgICAgIAotCSAgICAgXl4gICAgIF5eICAgICAgICAgICBeXiAgICAgICBeXiAgICAgICAgICBeXiAgICAgICAgICBeXgotICAgMTAyNCBURHMgZm9yICAgNyBURHMgZm9yICAgIDEgVEQgZm9yICAgU3RhcnQgb2YgICAgU3RhcnQgb2YgICAgRW5kIENoYWluCi0JICAgIElTTyAgSU5UICgyLTEyOG1zKSAxbXMtSU5UICAgIENUUkwgQ2hhaW4gIEJVTEsgQ2hhaW4KLQotRm9yIGVhY2ggQ1RSTCBvciBCVUxLIHRyYW5zZmVyIGEgbmV3IFFIIGlzIGFsbG9jYXRlZCBhbmQgdGhlIGNvbnRhaW5pbmcgZGF0YQotdHJhbnNmZXJzIGFyZSBhcHBlbmRlZCBhcyAodmVydGljYWwpIFREcy4gQWZ0ZXIgYnVpbGRpbmcgdGhlIHdob2xlIFFIIHdpdGggaXRzCi1kYW5nbGluZyBURHMsIHRoZSBRSCBpcyBpbnNlcnRlZCBiZWZvcmUgdGhlIEJVTEsgQ2hhaW4gUUggKGZvciBDVFJMKSBvcgotYmVmb3JlIHRoZSBFbmQgQ2hhaW4gUUggKGZvciBCVUxLKS4gU2luY2Ugb25seSB0aGUgUUgtPm5leHQgcG9pbnRlcnMgYXJlCi1hZmZlY3RlZCwgbm8gYXRvbWljIG1lbW9yeSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuIFRoZSB0aHJlZSBRSHMgaW4gdGhlCi1jb21tb24gY2hhaW4gYXJlIG5ldmVyIGVxdWlwcGVkIHdpdGggVERzIQotCi1Gb3IgSVNPIG9yIElOVCwgdGhlIFREIGZvciBlYWNoIGZyYW1lIGlzIHNpbXBseSBpbnNlcnRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZQotSVNPL0lOVC1URC1jaGFpbiBmb3IgdGhlIGRlc2lyZWQgZnJhbWUuIFRoZSA3IHNrZWxldG9uIElOVC1URHMgYXJlIHNjYXR0ZXJlZAotYW1vbmcgdGhlIDEwMjQgZnJhbWVzIHNpbWlsYXIgdG8gdGhlIG9sZCBVSENJIGRyaXZlci4KLQotRm9yIENUUkwvQlVMSy9JU08sIHRoZSBsYXN0IFREIGluIHRoZSB0cmFuc2ZlciBoYXMgdGhlIElPQy1iaXQgc2V0LiBGb3IgSU5ULAotZXZlcnkgVEQgKHRoZXJlIGlzIG9ubHkgb25lLi4uKSBoYXMgdGhlIElPQy1iaXQgc2V0LgotCi1CZXNpZGVzIHRoZSBkYXRhIGZvciB0aGUgVUhDSSBjb250cm9sbGVyICgyIG9yIDQgMzJiaXQgd29yZHMpLCB0aGUgZGVzY3JpcHRvcnMKLWFyZSBkb3VibGUtbGlua2VkIHRocm91Z2ggdGhlIC52ZXJ0aWNhbCBhbmQgLmhvcml6b250YWwgZWxlbWVudHMgaW4gdGhlIAotU1cgZGF0YSBvZiB0aGUgZGVzY3JpcHRvciAodXNpbmcgdGhlIGRvdWJsZS1saW5rZWQgbGlzdCBzdHJ1Y3R1cmVzIGFuZCAKLW9wZXJhdGlvbnMpLCBidXQgU1ctbGlua2luZyBvY2N1cnMgb25seSBpbiBjbG9zZWQgZG9tYWlucywgaS5lLiBmb3IgZWFjaCBvZgotdGhlIDEwMjQgSVNPLWNoYWlucyBhbmQgdGhlIDggSU5ULWNoYWlucyB0aGVyZSBpcyBhIGNsb3NlZCBjeWNsZS4gVGhpcyAKLXNpbXBsaWZpZXMgYWxsIGluc2VydGlvbnMgYW5kIHVubGlua2luZyBvcGVyYXRpb25zIGFuZCBhdm9pZHMgY29zdGx5IAotYnVzX3RvX3ZpcnQoKS1jYWxscy4KLQotMi4yLiBVUkIgc3RydWN0dXJlIGFuZCBsaW5raW5nIHRvIFFIL1REcwotCi1EdXJpbmcgYXNzZW1ibHkgb2YgdGhlIFFIIGFuZCBURHMgb2YgdGhlIHJlcXVlc3RlZCBhY3Rpb24sIHRoZXNlIGRlc2NyaXB0b3JzCi1hcmUgc3RvcmVkIGluIHVyYi0+dXJiX2xpc3QsIHNvIHRoZSBhbGxvY2F0ZWQgUUgvVEQgZGVzY3JpcHRvcnMgYXJlIGJvdW5kIHRvCi10aGlzIFVSQi4KLUlmIHRoZSBhc3NlbWJseSB3YXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIGRlc2NyaXB0b3JzIHdlcmUgYWRkZWQgdG8gdGhlIEhXIGNoYWluLAotdGhlIGNvcnJlc3BvbmRpbmcgVVJCIGlzIGluc2VydGVkIGludG8gYSBnbG9iYWwgVVJCIGxpc3QgZm9yIHRoaXMgY29udHJvbGxlci4KLVRoaXMgbGlzdCBzdG9yZXMgYWxsIHBlbmRpbmcgVVJCcy4KLQotMi4zLiBJbnRlcnJ1cHQgcHJvY2Vzc2luZwotCi1TaW5jZSBVSENJIHByb3ZpZGVzIG5vIG1lYW5zIHRvIGRpcmVjdGx5IGRldGVjdCBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zLCB0aGUKLWZvbGxvd2luZyBpcyBkb25lIGluIGVhY2ggVUhDSSBpbnRlcnJ1cHQgKHVoY2lfaW50ZXJydXB0KCkpOgotCi1Gb3IgZWFjaCBVUkIgaW4gdGhlIHBlbmRpbmcgcXVldWUgKHByb2Nlc3NfdXJiKCkpLCB0aGUgQUNUSVZFLWZsYWcgb2YgdGhlIAotYXNzb2NpYXRlZCBURHMgYXJlIHByb2Nlc3NlZCAoZGVwZW5kaW5nIG9uIHRoZSB0cmFuc2ZlciB0eXBlIAotcHJvY2Vzc197dHJhbnNmZXJ8aW50ZXJydXB0fGlzb30oKSkuIElmIHRoZSBURHMgYXJlIG5vdCBhY3RpdmUgYW55bW9yZSwgCi10aGV5IGluZGljYXRlIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB0cmFuc2FjdGlvbiBhbmQgdGhlIHN0YXR1cyBpcyBjYWxjdWxhdGVkLiAKLUluYWN0aXZlIFFIL1REcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBIVyBjaGFpbiAoc2luY2UgdGhlIGhvc3QgY29udHJvbGxlcgotYWxyZWFkeSByZW1vdmVkIHRoZSBURHMgZnJvbSB0aGUgUUgsIG5vIGF0b21pYyBhY2Nlc3MgaXMgbmVlZGVkKSBhbmQgCi1ldmVudHVhbGx5IHRoZSBVUkIgaXMgbWFya2VkIGFzIGNvbXBsZXRlZCAoT0sgb3IgZXJyb3JzKSBhbmQgcmVtb3ZlZCBmcm9tIHRoZSAKLXBlbmRpbmcgcXVldWUuIFRoZW4gdGhlIG5leHQgbGlua2VkIFVSQiBpcyBzdWJtaXR0ZWQuIEFmdGVyIChvciBpbW1lZGlhdGVseSAKLWJlZm9yZSkgdGhhdCwgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBpcyBjYWxsZWQuCi0KLTIuNC4gVW5saW5raW5nIFVSQnMKLQotRmlyc3QsIGFsbCBRSC9URHMgc3RvcmVkIGluIHRoZSBVUkIgYXJlIHVubGlua2VkIGZyb20gdGhlIEhXIGNoYWluLiAKLVRvIGVuc3VyZSB0aGF0IHRoZSBob3N0IGNvbnRyb2xsZXIgcmVhbGx5IGxlZnQgYSB2ZXJ0aWNhbCBURCBjaGFpbiwgd2UgCi13YWl0IGZvciBvbmUgZnJhbWUuIEFmdGVyIHRoYXQsIHRoZSBURHMgYXJlIHBoeXNpY2FsbHkgZGVzdHJveWVkLgotCi0yLjUuIFVSQiBsaW5raW5nIGFuZCB0aGUgY29uc2VxdWVuY2VzCi0KLVNpbmNlIFVSQnMgY2FuIGJlIGxpbmtlZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3VibWl0X3VyYiBpcyBjYWxsZWQgaW4KLXRoZSBVSENJLWludGVycnVwdCwgYWxsIHdvcmsgYXNzb2NpYXRlZCB3aXRoIFVSQi9RSC9URCBhc3NlbWJseSBoYXMgdG8gYmUKLWludGVycnVwdCBzYXZlLiBUaGlzIGZvcmNlcyBrbWFsbG9jIHRvIHVzZSBHRlBfQVRPTUlDIGluIHRoZSBpbnRlcnJ1cHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKaW5kZXggMTkxMTk0ZS4uZjBlNjEzYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQpAQCAtOCwzICs4LDQgQEAKICAgNyAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6NzFkMSwwMDcwOjcxZDNdCiAgIDggLT4gSGF1cHBhdWdlIFdpblRWLUhWUjE3MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjgxMDFdCiAgIDkgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjE0MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjgwMTBdCisgMTAgLT4gRFZpQ08gRnVzaW9uSERUVjcgRHVhbCBFeHByZXNzICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmQ2MThdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CmluZGV4IDFkNmEyNDUuLjEwNTkxNDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CkBAIC04LDEwICs4LDEzIEBACiAgIDcgLT4gTGVhZHRlayBXaW5mYXN0IFVTQiBJSSAgICAgICAgICAgICAgICAgICAoZW0yODAwKQogICA4IC0+IEt3b3JsZCBVU0IyODAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkKICAgOSAtPiBQaW5uYWNsZSBEYXp6bGUgRFZDIDkwL0RWQyAxMDAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMjMwNDowMjA3LDIzMDQ6MDIxYV0KLSAxMCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjA0MDo2NTAwLDIwNDA6NjUwMl0KKyAxMCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjA0MDo2NTAwXQogIDExIC0+IFRlcnJhdGVjIEh5YnJpZCBYUyAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFswY2NkOjAwNDJdCiAgMTIgLT4gS3dvcmxkIFBWUiBUViAyODAwIFJGICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKICAxMyAtPiBUZXJyYXRlYyBQcm9kaWd5IFhTICAgICAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMGNjZDowMDQ3XQogIDE0IC0+IFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wICAgICAgICAgKGVtMjgyMC9lbTI4NDApCiAgMTUgLT4gVi1HZWFyIFBvY2tldFRWICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODAwKQogIDE2IC0+IEhhdXBwYXVnZSBXaW5UViBIVlIgOTUwICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFsyMDQwOjY1MTMsMjA0MDo2NTE3LDIwNDA6NjUxYiwyMDQwOjY1MWZdCisgMTcgLT4gUGlubmFjbGUgUENUViBIRCBQcm8gU3RpY2sgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzIzMDQ6MDIyN10KKyAxOCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCAoUjIpICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjA0MDo2NTAyXQorIDE5IC0+IFBvaW50Tml4IEludHJhLU9yYWwgQ2FtZXJhICAgICAgICAgICAgICAgKGVtMjg2MCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCA2NzkzN2RmLi4zOTg2OGFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC0zNyw3ICszNyw3IEBACiAgMzYgLT4gVVBNT1NUIFBVUlBMRSBUViAgICAgICAgICAgICAgICAgICAgICAgICBbMTJhYjowODAwXQogIDM3IC0+IEl0ZW1zIE11Y2hUViBQbHVzIC8gSVQtMDA1CiAgMzggLT4gVGVycmF0ZWMgQ2luZXJneSAyMDAgVFYgICAgICAgICAgICAgICAgICBbMTUzYjoxMTUyXQotIDM5IC0+IExpZmVWaWV3IEZseVRWIFBsYXRpbnVtIE1pbmkgICAgICAgICAgICAgWzUxNjg6MDIxMiw0ZTQyOjAyMTJdCisgMzkgLT4gTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gTWluaSAgICAgICAgICAgICBbNTE2ODowMjEyLDRlNDI6MDIxMiw1MTY5OjE1MDJdCiAgNDAgLT4gQ29tcHJvIFZpZGVvTWF0ZSBUViBQVlIvRk0gICAgICAgICAgICAgICBbMTg1YjpjMTAwXQogIDQxIC0+IENvbXBybyBWaWRlb01hdGUgVFYgR29sZCsgICAgICAgICAgICAgICAgWzE4NWI6YzEwMF0KICA0MiAtPiBTYWJyZW50IFNCVC1UVkZNIChzYWE3MTMwKQpAQCAtMTI4LDcgKzEyOCw3IEBACiAxMjcgLT4gQmVob2xkZXIgQmVob2xkVFYgNTA3IEZNL1JEUyAvIEJlaG9sZFRWIDUwOSBGTSBbMDAwMDo1MDcxLDAwMDA6NTA3Qiw1YWNlOjUwNzAsNWFjZTo1MDkwXQogMTI4IC0+IEJlaG9sZGVyIEJlaG9sZFRWIENvbHVtYnVzIFRWRk0gICAgICAgICAgWzAwMDA6NTIwMV0KIDEyOSAtPiBCZWhvbGRlciBCZWhvbGRUViA2MDcgLyBCZWhvbGRUViA2MDkgICAgIFs1YWNlOjYwNzAsNWFjZTo2MDcxLDVhY2U6NjA3Miw1YWNlOjYwNzMsNWFjZTo2MDkwLDVhY2U6NjA5MSw1YWNlOjYwOTIsNWFjZTo2MDkzXQotMTMwIC0+IEJlaG9sZGVyIEJlaG9sZFRWIE02IC8gQmVob2xkVFYgTTYgRXh0cmEgWzVhY2U6NjE5MCw1YWNlOjYxOTMsNWFjZTo2MTkxXQorMTMwIC0+IEJlaG9sZGVyIEJlaG9sZFRWIE02ICAgICAgICAgICAgICAgICAgICAgWzVhY2U6NjE5MF0KIDEzMSAtPiBUd2luaGFuIEh5YnJpZCBEVFYtRFZCIDMwNTYgUENJICAgICAgICAgIFsxODIyOjAwMjJdCiAxMzIgLT4gR2VuaXVzIFRWR08gQU0xMU1DRQogMTMzIC0+IE5YUCBTbmFrZSBEVkItUyByZWZlcmVuY2UgZGVzaWduCkBAIC0xNDEsMyArMTQxLDcgQEAKIDE0MCAtPiBBdmVybWVkaWEgRFZCLVMgUHJvIEE3MDAgICAgICAgICAgICAgICAgIFsxNDYxOmE3YTFdCiAxNDEgLT4gQXZlcm1lZGlhIERWQi1TIEh5YnJpZCtGTSBBNzAwICAgICAgICAgICBbMTQ2MTphN2EyXQogMTQyIC0+IEJlaG9sZGVyIEJlaG9sZFRWIEg2ICAgICAgICAgICAgICAgICAgICAgWzVhY2U6NjI5MF0KKzE0MyAtPiBCZWhvbGRlciBCZWhvbGRUViBNNjMgICAgICAgICAgICAgICAgICAgIFs1YWNlOjYxOTFdCisxNDQgLT4gQmVob2xkZXIgQmVob2xkVFYgTTYgRXh0cmEgICAgICAgICAgICAgICBbNWFjZTo2MTkzXQorMTQ1IC0+IEFWZXJNZWRpYSBNaW5pUENJIERWQi1UIEh5YnJpZCBNMTAzICAgICAgWzE0NjE6ZjYzNl0KKzE0NiAtPiBBU1VTVGVLIFA3MTMxIEFuYWxvZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDE4LnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gxOC50eHQKaW5kZXggNjg0MmMyNi4uOTE0Y2I3ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDE4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MTgudHh0CkBAIC0xLDM2ICsxLDMwIEBACiBTb21lIG5vdGVzIHJlZ2FyZGluZyB0aGUgY3gxOCBkcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDIzNDE4IE1QRUcKIGVuY29kZXIgY2hpcDoKIAotMSkgVGhlIG9ubHkgaGFyZHdhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBpcyB0aGUgSGF1cHBhdWdlIEhWUi0xNjAwCi0gICBjYXJkIGFuZCB0aGUgQ29tcHJvIFZpZGVvTWF0ZSBIOTAwIChub3RlIHRoYXQgdGhpcyBjYXJkIG9ubHkKLSAgIHN1cHBvcnRzIGFuYWxvZyBpbnB1dCwgaXQgaGFzIG5vIGRpZ2l0YWwgdHVuZXIhKS4KKzEpIEN1cnJlbnRseSBzdXBwb3J0ZWQgYXJlOgogCi0yKSBTb21lIHBlb3BsZSBoYXZlIHByb2JsZW1zIGdldHRpbmcgdGhlIGkyYyBidXMgdG8gd29yay4gQ2F1c2UgdW5rbm93bi4KKwktIEhhdXBwYXVnZSBIVlItMTYwMAorCS0gQ29tcHJvIFZpZGVvTWF0ZSBIOTAwCisJLSBZdWFuIE1QQzcxOAorCS0gQ29uZXhhbnQgUmFwdG9yIFBBTC9TRUNBTSBkZXZraXQKKworMikgU29tZSBwZW9wbGUgaGF2ZSBwcm9ibGVtcyBnZXR0aW5nIHRoZSBpMmMgYnVzIHRvIHdvcmsuCiAgICBUaGUgc3ltcHRvbSBpcyB0aGF0IHRoZSBlZXByb20gY2Fubm90IGJlIHJlYWQgYW5kIHRoZSBjYXJkIGlzCi0gICB1bnVzYWJsZS4KKyAgIHVudXNhYmxlLiBUaGlzIGlzIHByb2JhYmx5IGZpeGVkLCBidXQgaWYgeW91IGhhdmUgcHJvYmxlbXMKKyAgIHRoZW4gcG9zdCB0byB0aGUgdmlkZW80bGludXggb3IgaXZ0di11c2VycyBtYWlsaW5nbGlzdC4KIAotMykgVGhlIGF1ZGlvIGZyb20gdGhlIGFuYWxvZyB0dW5lciBpcyBtb25vIG9ubHkuIFByb2JhYmx5IGNhdXNlZCBieQotICAgaW5jb3JyZWN0IGF1ZGlvIHJlZ2lzdGVyIGluZm9ybWF0aW9uIGluIHRoZSBkYXRhc2hlZXQuIFdlIGFyZQotICAgd2FpdGluZyBmb3IgdXBkYXRlZCBpbmZvcm1hdGlvbiBmcm9tIENvbmV4YW50LgorMykgVkJJIChyYXcgb3Igc2xpY2VkKSBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkLgogCi00KSBWQkkgKHJhdyBvciBzbGljZWQpIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuCis0KSBNUEVHIGluZGV4aW5nIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCiAKLTUpIE1QRUcgaW5kZXhpbmcgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KLQotNikgVGhlIGRyaXZlciBpcyBzdGlsbCBhIGJpdCByb3VnaCBhcm91bmQgdGhlIGVkZ2VzLCB0aGlzIHNob3VsZAorNSkgVGhlIGRyaXZlciBpcyBzdGlsbCBhIGJpdCByb3VnaCBhcm91bmQgdGhlIGVkZ2VzLCB0aGlzIHNob3VsZAogICAgaW1wcm92ZSBvdmVyIHRpbWUuCiAKIAogRmlybXdhcmU6CiAKLVRoZSBmaXJtd2FyZSBuZWVkcyB0byBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgV2luZG93cyBIYXVwcGF1Z2UgSFZSLTE2MDAKLWRyaXZlciwgYXZhaWxhYmxlIGhlcmU6CitZb3UgY2FuIG9idGFpbiB0aGUgZmlybXdhcmUgZmlsZXMgaGVyZToKIAotaHR0cDovL2hhdXBwYXVnZS5saWdodHBhdGgubmV0L3NvZnR3YXJlL2luc3RhbGxfY2QvaGF1cHBhdWdlX2NkXzMuNGQxLnppcAoraHR0cDovL2RsLml2dHZkcml2ZXIub3JnL2l2dHYvZmlybXdhcmUvY3gxOC1maXJtd2FyZS50YXIuZ3oKIAotVW56aXAsIHRoZW4gY29weSB0aGUgZm9sbG93aW5nIGZpbGVzIHRvIHRoZSBmaXJtd2FyZSBkaXJlY3RvcnkKLWFuZCByZW5hbWUgdGhlbSBhcyBmb2xsb3dzOgotCi1Ecml2ZXJzL0RyaXZlcjE4L2hjdzE4YXB1LnJvbSAtPiB2NGwtY3gyMzQxOC1hcHUuZncKLURyaXZlcnMvRHJpdmVyMTgvaGN3MThlbmMucm9tIC0+IHY0bC1jeDIzNDE4LWNwdS5mdwotRHJpdmVycy9Ecml2ZXIxOC9oY3cxOG1sQy5yb20gLT4gdjRsLWN4MjM0MTgtZGlnLmZ3CitVbnRhciBhbmQgY29weSB0aGUgLmZ3IGZpbGVzIHRvIHlvdXIgZmlybXdhcmUgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQ4ODBhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKQEAgLTAsMCArMSwyNDMgQEAKK0xpc3Qgb2YgdGhlIHdlYmNhbXMga25vdyBieSBnc3BjYS4KKworVGhlIG1vZHVsZXMgYXJlOgorCWdzcGNhX21haW4JbWFpbiBkcml2ZXIKKwlnc3BjYV94eHh4CXN1YmRyaXZlciBtb2R1bGUgd2l0aCB4eHh4IGFzIGZvbGxvd3MKKworeHh4eAkJdmVuZDpwcm9kCistLS0tCitzcGNhNTAxCQkwMDAwOjAwMDAJTXlzdEZyb21PcmkgVW5rbm93IENhbWVyYQorc3BjYTUwMQkJMDQwYTowMDAyCUtvZGFrIERWQy0zMjUKK3NwY2E1MDAJCTA0MGE6MDMwMAlLb2RhayBFWjIwMAoremMzeHgJCTA0MWU6MDQxZQlDcmVhdGl2ZSBXZWJDYW0gTGl2ZSEKK3NwY2E1MDAJCTA0MWU6NDAwYQlDcmVhdGl2ZSBQQy1DQU0gMzAwCitzdW5wbHVzCQkwNDFlOjQwMGIJQ3JlYXRpdmUgUEMtQ0FNIDYwMAorc3VucGx1cwkJMDQxZTo0MDEyCVBDLUNhbTM1MAorc3VucGx1cwkJMDQxZTo0MDEzCUNyZWF0aXZlIFBjY2FtNzUwCit6YzN4eAkJMDQxZTo0MDE3CUNyZWF0aXZlIFdlYmNhbSBNb2JpbGUgUEQxMDkwCitzcGNhNTA4CQkwNDFlOjQwMTgJQ3JlYXRpdmUgV2ViY2FtIFZpc3RhIChQRDExMDApCitzcGNhNTYxCQkwNDFlOjQwMWEJQ3JlYXRpdmUgV2ViY2FtIFZpc3RhIChQRDExMDApCit6YzN4eAkJMDQxZTo0MDFjCUNyZWF0aXZlIE5YCitzcGNhNTA1CQkwNDFlOjQwMWQJQ3JlYXRpdmUgV2ViY2FtIE5YIFVMVFJBCit6YzN4eAkJMDQxZTo0MDFlCUNyZWF0aXZlIE54IFBybworemMzeHgJCTA0MWU6NDAxZglDcmVhdGl2ZSBXZWJjYW0gTm90ZWJvb2sgUEQxMTcxCitwYWMyMDcJCTA0MWU6NDAyOAlDcmVhdGl2ZSBXZWJjYW0gVmlzdGEgUGx1cworemMzeHgJCTA0MWU6NDAyOQlDcmVhdGl2ZSBXZWJDYW0gVmlzdGEgUHJvCit6YzN4eAkJMDQxZTo0MDM0CUNyZWF0aXZlIEluc3RhbnQgUDA2MjAKK3pjM3h4CQkwNDFlOjQwMzUJQ3JlYXRpdmUgSW5zdGFudCBQMDYyMEQKK3pjM3h4CQkwNDFlOjQwMzYJQ3JlYXRpdmUgTGl2ZSAhCit6YzN4eAkJMDQxZTo0MDNhCUNyZWF0aXZlIE54IFBybyAyCitzcGNhNTYxCQkwNDFlOjQwM2IJQ3JlYXRpdmUgV2ViY2FtIFZpc3RhIChWRjAwMTApCit6YzN4eAkJMDQxZTo0MDUxCUNyZWF0aXZlIExpdmUhQ2FtIE5vdGVib29rIFBybyAoVkYwMjUwKQorb3Y1MTkJCTA0MWU6NDA1MglDcmVhdGl2ZSBMaXZlISBWSVNUQSBJTQoremMzeHgJCTA0MWU6NDA1MwlDcmVhdGl2ZSBMaXZlIUNhbSBWaWRlbyBJTQorb3Y1MTkJCTA0MWU6NDA1ZglDcmVhdGl2ZSBMaXZlISBWSVNUQSBWRjAzMzAKK292NTE5CQkwNDFlOjQwNjAJQ3JlYXRpdmUgTGl2ZSEgVklTVEEgVkYwMzUwCitvdjUxOQkJMDQxZTo0MDYxCUNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDQwMAorb3Y1MTkJCTA0MWU6NDA2NAlDcmVhdGl2ZSBMaXZlISBWSVNUQSBWRjA0MjAKK292NTE5CQkwNDFlOjQwNjgJQ3JlYXRpdmUgTGl2ZSEgVklTVEEgVkYwNDcwCitzcGNhNTYxCQkwNDU4OjcwMDQJR2VuaXVzIFZpZGVvQ0FNIEV4cHJlc3MgVjIKK3N1bnBsdXMJCTA0NTg6NzAwNglHZW5pdXMgRHNjIDEuMyBTbWFydAoremMzeHgJCTA0NTg6NzAwNwlHZW5pdXMgVmlkZW9DYW0gVjIKK3pjM3h4CQkwNDU4OjcwMGMJR2VuaXVzIFZpZGVvQ2FtIFYzCit6YzN4eAkJMDQ1ODo3MDBmCUdlbml1cyBWaWRlb0NhbSBXZWIgVjIKK3Nvbml4agkJMDQ1ODo3MDI1CUdlbml1cyBFeWUgMzExUQorc29uaXhqCQkwNDVlOjAwZjUJTWljcm9Tb2Z0IFZYMzAwMAorc29uaXhqCQkwNDVlOjAwZjcJTWljcm9Tb2Z0IFZYMTAwMAorb3Y1MTkJCTA0NWU6MDI4YwlNaWNybyRvZnQgeGJveCBjYW0KK3NwY2E1MDgJCTA0NjE6MDgxNQlNaWNybyBJbm5vdmF0aW9uIElDMjAwCitzdW5wbHVzCQkwNDYxOjA4MjEJRnVqaWZpbG0gTVYtMQoremMzeHgJCTA0NjE6MGEwMAlNaWNyb0lubm92YXRpb24gV2ViQ2FtMzIwCitzcGNhNTAwCQkwNDZkOjA4OTAJTG9naXRlY2ggUXVpY2tDYW0gdHJhdmVsZXIKK3ZjMDMyeAkJMDQ2ZDowODkyCUxvZ2l0ZWNoIE9yYmljYW0KK3ZjMDMyeAkJMDQ2ZDowODk2CUxvZ2l0ZWNoIE9yYmljYW0KK3pjM3h4CQkwNDZkOjA4YTAJTG9naXRlY2ggUUMgSU0KK3pjM3h4CQkwNDZkOjA4YTEJTG9naXRlY2ggUUMgSU0gMHgwOEExICtzb3VuZAoremMzeHgJCTA0NmQ6MDhhMglMYWJ0ZWMgV2ViY2FtIFBybworemMzeHgJCTA0NmQ6MDhhMwlMb2dpdGVjaCBRQyBDaGF0Cit6YzN4eAkJMDQ2ZDowOGE2CUxvZ2l0ZWNoIFFDaW0KK3pjM3h4CQkwNDZkOjA4YTcJTG9naXRlY2ggUXVpY2tDYW0gSW1hZ2UKK3pjM3h4CQkwNDZkOjA4YTkJTG9naXRlY2ggTm90ZWJvb2sgRGVsdXhlCit6YzN4eAkJMDQ2ZDowOGFhCUxhYnRlYyBXZWJjYW0gIE5vdGVib29rCit6YzN4eAkJMDQ2ZDowOGFjCUxvZ2l0ZWNoIFF1aWNrQ2FtIENvb2wKK3pjM3h4CQkwNDZkOjA4YWQJTG9naXRlY2ggUUNDb21tdW5pY2F0ZSBTVFgKK3pjM3h4CQkwNDZkOjA4YWUJTG9naXRlY2ggUXVpY2tDYW0gZm9yIE5vdGVib29rcworemMzeHgJCTA0NmQ6MDhhZglMb2dpdGVjaCBRdWlja0NhbSBDb29sCit6YzN4eAkJMDQ2ZDowOGI5CUxvZ2l0ZWNoIFFDIElNID8/PworemMzeHgJCTA0NmQ6MDhkNwlMb2dpdGVjaCBRQ2FtIFNUWAoremMzeHgJCTA0NmQ6MDhkOQlMb2dpdGVjaCBRdWlja0NhbSBJTS9Db25uZWN0Cit6YzN4eAkJMDQ2ZDowOGQ4CUxvZ2l0ZWNoIE5vdGVib29rIERlbHV4ZQoremMzeHgJCTA0NmQ6MDhkYQlMb2dpdGVjaCBRdWlja0NhbSBNZXNzZW5nZXIKK3pjM3h4CQkwNDZkOjA4ZGQJTG9naXRlY2ggUXVpY2tDYW0gZm9yIE5vdGVib29rcworc3BjYTUwMAkJMDQ2ZDowOTAwCUxvZ2l0ZWNoIEluYy4gQ2xpY2tTbWFydCAzMTAKK3NwY2E1MDAJCTA0NmQ6MDkwMQlMb2dpdGVjaCBJbmMuIENsaWNrU21hcnQgNTEwCitzdW5wbHVzCQkwNDZkOjA5MDUJTG9naXRlY2ggQ2xpY2tTbWFydCA4MjAKK3R2ODUzMgkJMDQ2ZDowOTIwCVFDIEV4cHJlc3MKK3R2ODUzMgkJMDQ2ZDowOTIxCUxhYnRlYyBXZWJjYW0KK3NwY2E1NjEJCTA0NmQ6MDkyOAlMb2dpdGVjaCBRQyBFeHByZXNzIEV0Y2gyCitzcGNhNTYxCQkwNDZkOjA5MjkJTGFidGVjIFdlYmNhbSBFbGNoMgorc3BjYTU2MQkJMDQ2ZDowOTJhCUxvZ2l0ZWNoIFFDIGZvciBOb3RlYm9vaworc3BjYTU2MQkJMDQ2ZDowOTJiCUxhYnRlYyBXZWJjYW0gUGx1cworc3BjYTU2MQkJMDQ2ZDowOTJjCUxvZ2l0ZWNoIFFDIGNoYXQgRWxjaDIKK3NwY2E1NjEJCTA0NmQ6MDkyZAlMb2dpdGVjaCBRQyBFbGNoMgorc3BjYTU2MQkJMDQ2ZDowOTJlCUxvZ2l0ZWNoIFFDIEVsY2gyCitzcGNhNTYxCQkwNDZkOjA5MmYJTG9naXRlY2ggUUMgRWxjaDIKK3N1bnBsdXMJCTA0NmQ6MDk2MAlMb2dpdGVjaCBDbGlja1NtYXJ0IDQyMAorc3VucGx1cwkJMDQ3MTowMzIyCVBoaWxpcHMgRE1WQzEzMDBLCit6YzN4eAkJMDQ3MTowMzI1CVBoaWxpcHMgU1BDIDIwMCBOQworemMzeHgJCTA0NzE6MDMyNglQaGlsaXBzIFNQQyAzMDAgTkMKK3Nvbml4agkJMDQ3MTowMzI3CVBoaWxpcHMgU1BDIDYwMCBOQworc29uaXhqCQkwNDcxOjAzMjgJUGhpbGlwcyBTUEMgNzAwIE5DCit6YzN4eAkJMDQ3MTowMzJkCVBoaWxpcHMgc3BjMjEwbmMKK3pjM3h4CQkwNDcxOjAzMmUJUGhpbGlwcyBzcGMzMTVuYworc29uaXhqCQkwNDcxOjAzMzAJUGhpbGlwcyBTUEMgNzEwTkMKK3NwY2E1MDEJCTA0OTc6YzAwMQlTbWlsZSBJbnRlcm5hdGlvbmFsCitzdW5wbHVzCQkwNGE1OjMwMDMJQmVucSBEQyAxMzAwCitzdW5wbHVzCQkwNGE1OjMwMDgJQmVucSBEQyAxNTAwCitzdW5wbHVzCQkwNGE1OjMwMGEJQmVucSBEQzM0MTAKK3NwY2E1MDAJCTA0YTU6MzAwYwlCZW5xIERDMTAxNgorc3VucGx1cwkJMDRmMToxMDAxCUpWQyBHQyBBNTAKK3NwY2E1NjEJCTA0ZmM6MDU2MQlGbGV4Y2FtIDEwMAorc3VucGx1cwkJMDRmYzo1MDBjCVN1bnBsdXMgQ0E1MDBDCitzdW5wbHVzCQkwNGZjOjUwNGEJQWlwdGVrIE1pbmkgUGVuQ2FtIDEuMworc3VucGx1cwkJMDRmYzo1MDRiCU1heGVsbCBNYXhQb2NrZXQgTEUgMS4zCitzdW5wbHVzCQkwNGZjOjUzMzAJRGlnaXRyZXggMjExMAorc3VucGx1cwkJMDRmYzo1MzYwCVN1bnBsdXMgR2VuZXJpYworc3BjYTUwMAkJMDRmYzo3MzMzCVBhbG1QaXhEQzg1CitzdW5wbHVzCQkwNGZjOmZmZmYJUHVyZSBEaWdpdGFsRGFrb3RhCitzcGNhNTAxCQkwNTA2OjAwZGYJM0NvbSBIb21lQ29ubmVjdCBMaXRlCitzdW5wbHVzCQkwNTJiOjE1MTMJTWVnYXBpeCBWNAordHY4NTMyCQkwNTQ1OjgwOGIJVmVvIFN0aW5ncmF5Cit0djg1MzIJCTA1NDU6ODMzMwlWZW8gU3RpbmdyYXkKK3N1bnBsdXMJCTA1NDY6MzE1NQlQb2xhcm9pZCBQREMzMDcwCitzdW5wbHVzCQkwNTQ2OjMxOTEJUG9sYXJvaWQgSW9uIDgwCitzdW5wbHVzCQkwNTQ2OjMyNzMJUG9sYXJvaWQgUERDMjAzMAorb3Y1MTkJCTA1NGM6MDE1NAlTb25ueSB0b3k0CitvdjUxOQkJMDU0YzowMTU1CVNvbm55IHRveTUKK3pjM3h4CQkwNTVmOmMwMDUJTXVzdGVrIFdjYW0zMDBBCitzcGNhNTAwCQkwNTVmOmMyMDAJTXVzdGVrIEdzbWFydCAzMDAKK3N1bnBsdXMJCTA1NWY6YzIxMQlLb3dhIEJzODg4ZSBNaWNyb2NhbWVyYQorc3BjYTUwMAkJMDU1ZjpjMjIwCUdzbWFydCBNaW5pCitzdW5wbHVzCQkwNTVmOmMyMzAJTXVzdGVrIERpZ2ljYW0gMzMwSworc3VucGx1cwkJMDU1ZjpjMjMyCU11c3RlayBNREMzNTAwCitzdW5wbHVzCQkwNTVmOmMzNjAJTXVzdGVrIERWNDAwMCBNcGVnNAorc3VucGx1cwkJMDU1ZjpjNDIwCU11c3RlayBnU21hcnQgTWluaSAyCitzdW5wbHVzCQkwNTVmOmM0MzAJTXVzdGVrIEdzbWFydCBMQ0QgMgorc3VucGx1cwkJMDU1ZjpjNDQwCU11c3RlayBEViAzMDAwCitzdW5wbHVzCQkwNTVmOmM1MjAJTXVzdGVrIGdTbWFydCBNaW5pIDMKK3N1bnBsdXMJCTA1NWY6YzUzMAlNdXN0ZWsgR3NtYXJ0IExDRCAzCitzdW5wbHVzCQkwNTVmOmM1NDAJR3NtYXJ0IEQzMAorc3VucGx1cwkJMDU1ZjpjNjMwCU11c3RlayBNREM0MDAwCitzdW5wbHVzCQkwNTVmOmM2NTAJTXVzdGVrIE1EQzU1MDBaCit6YzN4eAkJMDU1ZjpkMDAzCU11c3RlayBXQ2FtMzAwQQoremMzeHgJCTA1NWY6ZDAwNAlNdXN0ZWsgV0NhbTMwMCBBTgorY29uZXgJCTA1NzI6MDA0MQlDcmVhdGl2ZSBOb3RlYm9vayBjeDExNjQ2CitvdjUxOQkJMDVhOTowNTE5CU9tbmlWaXNpb24KK292NTE5CQkwNWE5OjA1MzAJT21uaVZpc2lvbgorb3Y1MTkJCTA1YTk6NDUxOQlPbW5pVmlzaW9uCitvdjUxOQkJMDVhOTo4NTE5CU9tbmlWaXNpb24KK3N1bnBsdXMJCTA1ZGE6MTAxOAlEaWdpdGFsIERyZWFtIEVuaWdtYSAxLjMKK3N0azAxNAkJMDVlMTowODkzCVN5bnRlayBEVjQwMDAKK3NwY2E1NjEJCTA2MGI6YTAwMQlNYXhlbGwgQ29tcGFjdCBQYyBQTTMKK3pjM3h4CQkwNjk4OjIwMDMJQ1RYIE03MzBWIGJ1aWx0IGluCitzcGNhNTAwCQkwNmJkOjA0MDQJQWdmYSBDTDIwCitzcGNhNTAwCQkwNmJlOjA4MDAJT3B0aW1lZGlhCitzdW5wbHVzCQkwNmQ2OjAwMzEJVHJ1c3QgNjEwIExDRCBQb3dlckNAbSBab29tCitzcGNhNTA2CQkwNmUxOmExOTAJQURTIEluc3RhbnQgVkNECitzcGNhNTA4CQkwNzMzOjAxMTAJVmlld1F1ZXN0IFZRMTEwCitzcGNhNTA4CQkwMTMwOjAxMzAJQ2xvbmUgRGlnaXRhbCBXZWJjYW0gMTEwNDMKK3NwY2E1MDEJCTA3MzM6MDQwMQlJbnRlbCBDcmVhdGUgYW5kIFNoYXJlCitzcGNhNTAxCQkwNzMzOjA0MDIJVmlld1F1ZXN0IE0zMThCCitzcGNhNTA1CQkwNzMzOjA0MzAJSW50ZWwgUEMgQ2FtZXJhIFBybworc3VucGx1cwkJMDczMzoxMzExCURpZ2l0YWwgRHJlYW0gRXBzaWxvbiAxLjMKK3N1bnBsdXMJCTA3MzM6MTMxNAlNZXJjdXJ5IDIuMU1FRyBEZWx1eGUgQ2xhc3NpYyBDYW0KK3N1bnBsdXMJCTA3MzM6MjIxMQlKZW5vcHRpayBqZGMgMjEgTENECitzdW5wbHVzCQkwNzMzOjIyMjEJTWVyY3VyeSBEaWdpdGFsIFBybyAzLjFwCitzdW5wbHVzCQkwNzMzOjMyNjEJQ29uY29yZCAzMDQ1IHNwY2E1MzZhCitzdW5wbHVzCQkwNzMzOjMyODEJQ3liZXJwaXggUzU1MFYKK3NwY2E1MDYJCTA3MzQ6MDQzYgkzRGVNb24gVVNCIENhcHR1cmUgYWthCitzcGNhNTAwCQkwODRkOjAwMDMJRC1MaW5rIERTQy0zNTAKK3NwY2E1MDAJCTA4Y2E6MDEwMwlBaXB0ZWsgUG9ja2V0RFYKK3N1bnBsdXMJCTA4Y2E6MDEwNAlBaXB0ZWsgUG9ja2V0RFZJSSAxLjMKK3N1bnBsdXMJCTA4Y2E6MDEwNglBaXB0ZWsgUG9ja2V0IERWMzEwMCsKK3N1bnBsdXMJCTA4Y2E6MjAwOAlBaXB0ZWsgTWluaSBQZW5DYW0gMiBNCitzdW5wbHVzCQkwOGNhOjIwMTAJQWlwdGVrIFBvY2tldENhbSAzTQorc3VucGx1cwkJMDhjYToyMDE2CUFpcHRlayBQb2NrZXRDYW0gMiBNZWdhCitzdW5wbHVzCQkwOGNhOjIwMTgJQWlwdGVrIFBlbmNhbSBTRCAyTQorc3VucGx1cwkJMDhjYToyMDIwCUFpcHRlayBTbGltIDMwMDBGCitzdW5wbHVzCQkwOGNhOjIwMjIJQWlwdGVrIFNsaW0gMzIwMAorc3VucGx1cwkJMDhjYToyMDI0CUFpcHRlayBEVjM1MDAgTXBlZzQKK3N1bnBsdXMJCTA4Y2E6MjAyOAlBaXB0ZWsgUG9ja2V0Q2FtNE0KK3N1bnBsdXMJCTA4Y2E6MjA0MAlBaXB0ZWsgUG9ja2V0RFY0MTAwTQorc3VucGx1cwkJMDhjYToyMDQyCUFpcHRlayBQb2NrZXREVjUxMDAKK3N1bnBsdXMJCTA4Y2E6MjA1MAlNZWRpb24gTUQgNDE0MzcKK3N1bnBsdXMJCTA4Y2E6MjA2MAlBaXB0ZWsgUG9ja2V0RFY1MzAwCit0djg1MzIJCTA5MjM6MDEwZglJQ001MzIgY2FtcworbWFycwkJMDkzYTowNTBmCU1hcnMtU2VtaSBQYy1DYW1lcmEKK3BhYzIwNwkJMDkzYToyNDYwCVBBQzIwNyBRdGVjIFdlYmNhbSAxMDAKK3BhYzIwNwkJMDkzYToyNDYzCVBoaWxpcHMgc3BjMjAwbmMgcGFjMjA3CitwYWMyMDcJCTA5M2E6MjQ2NAlMYWJ0ZWMgV2ViY2FtIDEyMDAKK3BhYzIwNwkJMDkzYToyNDY4CVBBQzIwNworcGFjMjA3CQkwOTNhOjI0NzAJR2VuaXVzIEdGMTEyCitwYWMyMDcJCTA5M2E6MjQ3MQlQQUMyMDcgR2VuaXVzIFZpZGVvQ2FtIGdlMTExCitwYWMyMDcJCTA5M2E6MjQ3MglQQUMyMDcgR2VuaXVzIFZpZGVvQ2FtIGdlMTEwCitwYWM3MzExCQkwOTNhOjI2MDAJUEFDNzMxMSBUeXBob29uCitwYWM3MzExCQkwOTNhOjI2MDEJUEFDNzMxMSBQaGlsbGlwcyBTUEM2MTBOQworcGFjNzMxMQkJMDkzYToyNjAzCVBBQzczMTIKK3BhYzczMTEJCTA5M2E6MjYwOAlQQUM3MzExIFRydXN0IFdCLTMzMDBwCitwYWM3MzExCQkwOTNhOjI2MGUJUEFDNzMxMSBHaWdhd2FyZSBWR0EgUEMgQ2FtZXJhLCBUcnVzdCBXQi0zMzUwcCwgU0lHTUEgY2FtIDIzNTAKK3BhYzczMTEJCTA5M2E6MjYwZglQQUM3MzExIFNuYWtlQ2FtCitwYWM3MzExCQkwOTNhOjI2MjEJUEFDNzMxeAoremMzeHgJCTBhYzg6MDMwMglaLXN0YXIgVmltaWNybyB6YzAzMDIKK3ZjMDMyeAkJMGFjODowMzIxCVZpbWljcm8gZ2VuZXJpYyB2YzAzMjEKK3ZjMDMyeAkJMGFjODowMzIzCVZpbWljcm8gVmMwMzIzCit2YzAzMngJCTBhYzg6MDMyOAlBNFRlY2ggUEstMTMwTUcKK3pjM3h4CQkwYWM4OjMwMWIJWi1TdGFyIHpjMzAxYgoremMzeHgJCTBhYzg6MzAzYglWaW1pY3JvIDB4MzAzYgoremMzeHgJCTBhYzg6MzA1YglaLXN0YXIgVmltaWNybyB6YzAzMDViCit6YzN4eAkJMGFjODozMDdiCUxkbGMgVkMzMDIrT3Y3NjIwCit2YzAzMngJCTBhYzg6YzAwMQlTb255IGVtYmVkZGVkIHZpbWljcm8KK3ZjMDMyeAkJMGFjODpjMDAyCVNvbnkgZW1iZWRkZWQgdmltaWNybworc3BjYTUwOAkJMGFmOTowMDEwCUhhbWEgVVNCIFNpZ2h0Y2FtIDEwMAorc3BjYTUwOAkJMGFmOTowMDExCUhhbWEgVVNCIFNpZ2h0Y2FtIDEwMAorc29uaXhiCQkwYzQ1OjYwMDEJR2VuaXVzIFZpZGVvQ0FNIE5CCitzb25peGIJCTBjNDU6NjAwNQlNaWNyb2RpYSBTd2VleCBNaW5pIFdlYmNhbQorc29uaXhiCQkwYzQ1OjYwMDcJU29uaXggc245YzEwMSArIFRhczUxMTBECitzb25peGIJCTBjNDU6NjAwOQlzcGNhQ2FtQDEyMAorc29uaXhiCQkwYzQ1OjYwMGQJc3BjYUNhbUAxMjAKK3Nvbml4YgkJMGM0NTo2MDExCU1pY3JvZGlhIFBDIENhbWVyYSAoU045QzEwMikKK3Nvbml4YgkJMGM0NTo2MDE5CUdlbmVyaWMgU29uaXggT1Y3NjMwCitzb25peGIJCTBjNDU6NjAyNAlHZW5lcmljIFNvbml4IFRhczUxMzBjCitzb25peGIJCTBjNDU6NjAyNQlYY2FtIFNoYW5nYQorc29uaXhiCQkwYzQ1OjYwMjgJU29uaXggQnRjIFBjMzgwCitzb25peGIJCTBjNDU6NjAyOQlzcGNhQ2FtQDE1MAorc29uaXhiCQkwYzQ1OjYwMmMJR2VuZXJpYyBTb25peCBPVjc2MzAKK3Nvbml4YgkJMGM0NTo2MDJkCUxJQy0yMDAgTEcKK3Nvbml4YgkJMGM0NTo2MDJlCUdlbml1cyBWaWRlb0NhbSBNZXNzZW5nZXIKK3Nvbml4agkJMGM0NTo2MDQwCVNwZWVkIE5WQyAzNTBLCitzb25peGoJCTBjNDU6NjA3YwlTb25peCBzbjljMTAycCBIdjcxMzFSCitzb25peGoJCTBjNDU6NjBjMAlTYW5naGEgU241MzUKK3Nvbml4agkJMGM0NTo2MGVjCVNOOUMxMDUrTU80MDAwCitzb25peGoJCTBjNDU6NjBmYglTdXJmZXIgTm9OYW1lCitzb25peGoJCTBjNDU6NjBmYwlMRy1MSUMzMDAKK3Nvbml4agkJMGM0NTo2MTJhCUF2YW50IENhbWVyYQorc29uaXhqCQkwYzQ1OjYxMmMJVHlwaG9vbiBSYXN5IENhbSAxLjNNUGl4Citzb25peGoJCTBjNDU6NjEzMAlTb25peCBQY2NhbQorc29uaXhqCQkwYzQ1OjYxMzgJU245YzEyMCBNbzQwMDAKK3Nvbml4agkJMGM0NTo2MTNiCVN1cmZlciBTTi0yMDYKK3Nvbml4agkJMGM0NTo2MTNjCVNvbml4IFBjY2FtMTY4CitzdW5wbHVzCQkwZDY0OjAzMDMJU3VucGx1cyBGYXNoaW9uQ2FtIERYRworZXRvbXMJCTEwMmM6NjE1MQlRY2FtIFNhbmdoYSBDSUYKK2V0b21zCQkxMDJjOjYyNTEJUWNhbSB4eHh4eHggVkdBCit6YzN4eAkJMTBmZDowMTI4CVR5cGhvb24gV2Vic2hvdCBJSSBVU0IgMzAwayAweDAxMjgKK3NwY2E1NjEJCTEwZmQ6N2U1MAlGbHlDYW0gVXNiIDEwMAoremMzeHgJCTEwZmQ6ODA1MAlUeXBob29uIFdlYnNob3QgSUkgVVNCIDMwMGsKK3NwY2E1MDEJCTE3NzY6NTAxYwlBcm93YW5hIDMwMEsgQ01PUyBDYW1lcmEKK3Q2MTMJCTE3YTE6MDEyOAlUNjEzL1RBUzUxMzBBCit2YzAzMngJCTE3ZWY6NDgwMglMZW5vdm8gVmMwMzIzK01JMTMxMF9TT0MKK3BhYzIwNwkJMjAwMTpmMTE1CUQtTGluayBEU0ItQzEyMAorc3BjYTUwMAkJMjg5OTowMTJjCVRvcHRybyBJbmR1c3RyaWFsCitzcGNhNTA4CQk4MDg2OjAxMTAJSW50ZWwgRWFzeSBQQyBDYW1lcmEKK3NwY2E1MDAJCTgwODY6MDYzMAlJbnRlbCBQb2NrZXQgUEMgQ2FtZXJhCitzcGNhNTA2CQk5OWZhOjg5ODgJR3JhbmR0ZWMgVi5jYXAKK3NwY2E1NjEJCWFiY2Q6Y2RlZQlQZXRjYW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjhjZi50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY4Y2YudHh0CmluZGV4IGUwYmJhODMuLjA1MTM4ZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjhjZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2OGNmLnR4dApAQCAtMTkzLDkgKzE5Myw2IEBACiAJCSBsb2FkcyB0aGF0IG1vZHVsZSBhdXRvbWF0aWNhbGx5LiBUaGlzIGFjdGlvbiBpcyBwZXJmb3JtZWQgYXMKIAkJIG9uY2Ugc29vbiBhcyB0aGUgJ3c5OTY4Y2YnIG1vZHVsZSBpcyBsb2FkZWQgaW50byBtZW1vcnkuCiBEZWZhdWx0OiAgICAgICAgIDEKLU5vdGU6ICAgICAgICAgICAgVGhlIGtlcm5lbCBtdXN0IGJlIGNvbXBpbGVkIHdpdGggdGhlIENPTkZJR19LTU9EIG9wdGlvbgotCQkgZW5hYmxlZCBmb3IgdGhlICdvdmNhbWNoaXAnIG1vZHVsZSB0byBiZSBsb2FkZWQgYW5kIGZvcgotCQkgdGhpcyBwYXJhbWV0ZXIgdG8gYmUgcHJlc2VudC4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBzaW1jYW1zCiBUeXBlOiAgICAgICAgICAgaW50CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDkzZmQ2YjIuLjVkODk3MWMgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC00NDEsMTAgKzQ0MSw3IEBACiBTOglNYWludGFpbmVkCiAKIEFSTSBQUklNRUNFTEwgTU1DSSBQTDE4MC8xIERSSVZFUgotUDoJUnVzc2VsbCBLaW5nCi1NOglybWtAYXJtLmxpbnV4Lm9yZy51awotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQotUzoJTWFpbnRhaW5lZAorUzoJT3JwaGFuCiAKIEFSTS9BREkgUk9BRFJVTk5FUiBNQUNISU5FIFNVUFBPUlQKIFA6CUxlbm5lcnQgQnV5dGVuaGVrCkBAIC00ODMsMTEgKzQ4MCwyOCBAQAogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQogUzoJTWFpbnRhaW5lZAogCitBUk0vQ09NUFVMQUIgQ00tWDI3MC9FTS1YMjcwIE1BQ0hJTkUgU1VQUE9SVAorUDoJTWlrZSBSYXBvcG9ydAorTToJbWlrZUBjb21wdWxhYi5jby5pbAorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorUzoJTWFpbnRhaW5lZAorCiBBUk0vQ09SR0kgTUFDSElORSBTVVBQT1JUCiBQOglSaWNoYXJkIFB1cmRpZQogTToJcnB1cmRpZUBycHN5cy5uZXQKIFM6CU1haW50YWluZWQKIAorQVJNL0VaWCBTTUFSVFBIT05FUyAoQTc4MCwgQTkxMCwgQTEyMDAsIEU2ODAsIFJPS1IgRTIgYW5kIFJPS1IgRTYpCitQOglEYW5pZWwgUmliZWlybworTToJZHJ3eXJtQGdtYWlsLmNvbQorUDoJU3RlZmFuIFNjaG1pZHQKK006CXN0ZWZhbkBvcGVuZXp4Lm9yZworUDoJSGFyYWxkIFdlbHRlCitNOglsYWZvcmdlQG9wZW5lengub3JnCitMOglvcGVuZXp4LWRldmVsQGxpc3RzLm9wZW5lengub3JnIChzdWJzY3JpYmVycy1vbmx5KQorVzoJaHR0cDovL3d3dy5vcGVuZXp4Lm9yZy8KK1M6CU1haW50YWluZWQKKwogQVJNL0dMT01BVElPTiBHRVNCQzkzMTJTWCBNQUNISU5FIFNVUFBPUlQKIFA6CUxlbm5lcnQgQnV5dGVuaGVrCiBNOglrZXJuZWxAd2FudHN0b2ZseS5vcmcKQEAgLTU3NSwxMCArNTg5LDE4IEBACiBTOglNYWludGFpbmVkCiAKIEFSTS9UT1NBIE1BQ0hJTkUgU1VQUE9SVAorUDoJRG1pdHJ5IEJhcnlzaGtvdgorTToJZGJhcnlzaGtvdkBnbWFpbC5jb20KIFA6CURpcmsgT3BmZXIKIE06CWRpcmtAb3BmZXItb25saW5lLmRlCiBTOglNYWludGFpbmVkCiAKK0FSTS9QQUxNVFggU1VQUE9SVAorUDoJTWFyZWsgVmFzdXQKK006CW1hcmVrLnZhc3V0QGdtYWlsLmNvbQorVzoJaHR0cDovL2hhY2tuZGV2LmNvbQorUzoJTWFpbnRhaW5lZAorCiBBUk0vUExFQiBTVVBQT1JUCiBQOglQZXRlciBDaHViYgogTToJcGxlYkBnZWxhdG8udW5zdy5lZHUuYXUKQEAgLTE5ODgsNiArMjAxMCwxMiBAQAogVzoJaHR0cDovL2FydGF4Lmthcmxpbi5tZmYuY3VuaS5jei9+bWlrdWxhcy92eXBsb2R5L2hwZnMvaW5kZXgtZS5jZ2kKIFM6CU1haW50YWluZWQKIAorSFRDUEVOIFRPVUNIU0NSRUVOIERSSVZFUgorUDoJUGF1IE9saXZhIEZvcmEKK006CXBvZkBlc2xhY2sub3JnCitMOglsaW51eC1pbnB1dEB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogSFVHRVRMQiBGSUxFU1lTVEVNCiBQOglXaWxsaWFtIElyd2luCiBNOgl3bGlAaG9sb21vcnBoeS5jb20KQEAgLTIxODksNiArMjIxNyw4IEBACiBNOglqZXNzZS5icmFuZGVidXJnQGludGVsLmNvbQogUDoJQnJ1Y2UgQWxsYW4KIE06CWJydWNlLncuYWxsYW5AaW50ZWwuY29tCitQOglQSiBXYXNraWV3aWN6CitNOglwZXRlci5wLndhc2tpZXdpY3ouanJAaW50ZWwuY29tCiBQOglKb2huIFJvbmNpYWsKIE06CWpvaG4ucm9uY2lha0BpbnRlbC5jb20KIEw6CWUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApAQCAtMjcyNSwxMiArMjc1NSwxMCBAQAogUzoJTWFpbnRhaW5lZAogCiBNQVJWRUxMIE1WNjQzWFggRVRIRVJORVQgRFJJVkVSCi1QOglEYWxlIEZhcm5zd29ydGgKLU06CWRhbGVAZmFybnN3b3J0aC5vcmcKLVA6CU1hbmlzaCBMYWNod2FuaQotTToJbWxhY2h3YW5pQG12aXN0YS5jb20KK1A6CUxlbm5lcnQgQnV5dGVuaGVrCitNOglidXl0ZW5oQG1hcnZlbGwuY29tCiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1TOglPZGQgRml4ZXMgZm9yIDIuNDsgTWFpbnRhaW5lZCBmb3IgMi42LgorUzoJU3VwcG9ydGVkCiAKIE1BVFJPWCBGUkFNRUJVRkZFUiBEUklWRVIKIFA6CVBldHIgVmFuZHJvdmVjCkBAIC0zMjc0LDE0ICszMzAyLDYgQEAKIFQ6CWdpdCBnaXQuaW5mcmFkZWFkLm9yZy9iYXR0ZXJ5LTIuNi5naXQKIFM6CU1haW50YWluZWQKIAotUE9XRVJQQyA0eHggRU1BQyBEUklWRVIKLVA6CUV1Z2VuZSBTdXJvdmVnaW4KLU06CWVic0BlYnNob21lLm5ldAotVzoJaHR0cDovL2tlcm5lbC5lYnNob21lLm5ldC9lbWFjLwotTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKLUw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU1haW50YWluZWQKLQogUE5QIFNVUFBPUlQKIFA6CUFkYW0gQmVsYXkKIE06CWFtYngxQG5lby5yci5jb20KQEAgLTM1MzUsNyArMzU1NSw3IEBACiAKIFMzOTAgTkVUV09SSyBEUklWRVJTCiBQOglVcnN1bGEgQnJhdW4KLU06CXVicmF1bkBsaW51eC52bmV0LmlibS5jb20KK006CXVyc3VsYS5icmF1bkBkZS5pYm0uY29tCiBQOglGcmFuayBCbGFzY2hrYQogTToJYmxhc2Noa2FAbGludXgudm5ldC5pYm0uY29tCiBNOglsaW51eDM5MEBkZS5pYm0uY29tCkBAIC0zNTU1LDcgKzM1NzUsNyBAQAogCiBTMzkwIElVQ1YgTkVUV09SSyBMQVlFUgogUDoJVXJzdWxhIEJyYXVuCi1NOgl1YnJhdW5AbGludXgudm5ldC5pYm0uY29tCitNOgl1cnN1bGEuYnJhdW5AZGUuaWJtLmNvbQogTToJbGludXgzOTBAZGUuaWJtLmNvbQogTDoJbGludXgtczM5MEB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saW51eDM5MC8KQEAgLTQwNDksOSArNDA2OSwxMCBAQAogUzoJTWFpbnRhaW5lZAogCiBUUE0gREVWSUNFIERSSVZFUgotUDogICAgIERlYm9yYSBWZWxhcmRlCi1QOiAgICAgUmFqaXYgQW5kcmFkZQotTToJdHBtZGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitQOglEZWJvcmEgVmVsYXJkZQorTToJZGVib3JhQGxpbnV4LnZuZXQuaWJtLmNvbQorUDoJUmFqaXYgQW5kcmFkZQorTToJc3Jhaml2QGxpbnV4LnZuZXQuaWJtLmNvbQogVzoJaHR0cDovL3RwbWRkLnNvdXJjZWZvcmdlLm5ldAogUDoJTWFyY2VsIFNlbGhvcnN0CiBNOgl0cG1Ac2VsaG9yc3QubmV0CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDYxOTI5MjIuLjRiY2QxY2YgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xMTQ4LDcgKzExNDgsOCBAQAogCUBmaW5kIC4gJChSQ1NfRklORF9JR05PUkUpIFwKIAkJXCggLW5hbWUgJyouW29hc10nIC1vIC1uYW1lICcqLmtvJyAtbyAtbmFtZSAnLiouY21kJyBcCiAJCS1vIC1uYW1lICcuKi5kJyAtbyAtbmFtZSAnLioudG1wJyAtbyAtbmFtZSAnKi5tb2QuYycgXAotCQktbyAtbmFtZSAnKi5zeW10eXBlcycgLW8gLW5hbWUgJ21vZHVsZXMub3JkZXInIFwpIFwKKwkJLW8gLW5hbWUgJyouc3ltdHlwZXMnIC1vIC1uYW1lICdtb2R1bGVzLm9yZGVyJyBcCisJCS1vIC1uYW1lICdNb2R1bGUubWFya2VycycgXCkgXAogCQktdHlwZSBmIC1wcmludCB8IHhhcmdzIHJtIC1mCiAKICMgbXJwcm9wZXIgLSBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcywgaW5jbHVkaW5nIC5jb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGM3YWQzMjQuLmQwNDhmNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMTIsNiArMTIsNyBAQAogCXNlbGVjdCBSVENfTElCCiAJc2VsZWN0IFNZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKKwlzZWxlY3QgSEFWRV9BUkNIX0tHREIKIAlzZWxlY3QgSEFWRV9LUFJPQkVTIGlmICghWElQX0tFUk5FTCkKIAlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTIGlmIChIQVZFX0tQUk9CRVMpCiAJc2VsZWN0IEhBVkVfRlRSQUNFIGlmICghWElQX0tFUk5FTCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwppbmRleCAyNzQ0NjczLi5kZDI5NDczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCkBAIC01NTQsOSArNTU0LDggQEAKIAogCWRldmljZV9pbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbyksIEdGUF9BVE9NSUMpOwogCWlmICghZGV2aWNlX2luZm8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiQ291bGQgbm90IGFsbG9jYXRlZCBkbWFib3VuY2VfZGV2aWNlX2luZm8gZm9yICVzIiwKLQkJCWRldi0+YnVzX2lkKTsKKwkJZGV2X2VycihkZXYsCisJCQkiQ291bGQgbm90IGFsbG9jYXRlZCBkbWFib3VuY2VfZGV2aWNlX2luZm9cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTU5NCw4ICs1OTMsNyBAQAogCiAJZGV2LT5hcmNoZGF0YS5kbWFib3VuY2UgPSBkZXZpY2VfaW5mbzsKIAotCXByaW50ayhLRVJOX0lORk8gImRtYWJvdW5jZTogcmVnaXN0ZXJlZCBkZXZpY2UgJXMgb24gJXMgYnVzXG4iLAotCQlkZXYtPmJ1c19pZCwgZGV2LT5idXMtPm5hbWUpOworCWRldl9pbmZvKGRldiwgImRtYWJvdW5jZTogcmVnaXN0ZXJlZCBkZXZpY2VcbiIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTYxNCwxNiArNjEyLDE1IEBACiAJZGV2LT5hcmNoZGF0YS5kbWFib3VuY2UgPSBOVUxMOwogCiAJaWYgKCFkZXZpY2VfaW5mbykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiJXM6IE5ldmVyIHJlZ2lzdGVyZWQgd2l0aCBkbWFib3VuY2UgYnV0IGF0dGVtcHRpbmciIFwKLQkJCSJ0byB1bnJlZ2lzdGVyIVxuIiwgZGV2LT5idXNfaWQpOworCQlkZXZfd2FybihkZXYsCisJCQkgIk5ldmVyIHJlZ2lzdGVyZWQgd2l0aCBkbWFib3VuY2UgYnV0IGF0dGVtcHRpbmciCisJCQkgInRvIHVucmVnaXN0ZXIhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghbGlzdF9lbXB0eSgmZGV2aWNlX2luZm8tPnNhZmVfYnVmZmVycykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXM6IFJlbW92aW5nIGZyb20gZG1hYm91bmNlIHdpdGggcGVuZGluZyBidWZmZXJzIVxuIiwKLQkJCWRldi0+YnVzX2lkKTsKKwkJZGV2X2VycihkZXYsCisJCQkiUmVtb3ZpbmcgZnJvbSBkbWFib3VuY2Ugd2l0aCBwZW5kaW5nIGJ1ZmZlcnMhXG4iKTsKIAkJQlVHKCk7CiAJfQogCkBAIC02MzksOCArNjM2LDcgQEAKIAogCWtmcmVlKGRldmljZV9pbmZvKTsKIAotCXByaW50ayhLRVJOX0lORk8gImRtYWJvdW5jZTogZGV2aWNlICVzIG9uICVzIGJ1cyB1bnJlZ2lzdGVyZWRcbiIsCi0JCWRldi0+YnVzX2lkLCBkZXYtPmJ1cy0+bmFtZSk7CisJZGV2X2luZm8oZGV2LCAiZG1hYm91bmNlOiBkZXZpY2UgdW5yZWdpc3RlcmVkXG4iKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKaW5kZXggZDk3M2M5OC4uYzNjM2EzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwpAQCAtNTQzLDcgKzU0Myw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXN0cm5jcHkoZGV2LT5kZXYuYnVzX2lkLCBpbmZvLT5uYW1lLCBzaXplb2YoZGV2LT5kZXYuYnVzX2lkKSk7CiAJLyoKIAkgKiBJZiB0aGUgcGFyZW50IGRldmljZSBoYXMgYSBETUEgbWFzayBhc3NvY2lhdGVkIHdpdGggaXQsCiAJICogcHJvcGFnYXRlIGl0IGRvd24gdG8gdGhlIGNoaWxkcmVuLgpAQCAtNTUzLDYgKzU1Miw3IEBACiAJCWRldi0+ZGV2LmRtYV9tYXNrID0gJmRldi0+ZG1hX21hc2s7CiAJfQogCisJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiVzIiwgaW5mby0+bmFtZSk7CiAJZGV2LT5kZXZpZAkgPSBpbmZvLT5kZXZpZDsKIAlkZXYtPmRldi5wYXJlbnQgID0gbGNoaXAtPmRldjsKIAlkZXYtPmRldi5idXMgICAgID0gJmxvY29tb19idXNfdHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwppbmRleCBlYjA2ZDBiLi4wYThlMWZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCkBAIC01NTAsOSArNTUwLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc25wcmludGYoZGV2LT5kZXYuYnVzX2lkLCBzaXplb2YoZGV2LT5kZXYuYnVzX2lkKSwKLQkJICIlNC40bHgiLCBpbmZvLT5vZmZzZXQpOwotCisJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiU0LjRseCIsIGluZm8tPm9mZnNldCk7CiAJZGV2LT5kZXZpZAkgPSBpbmZvLT5kZXZpZDsKIAlkZXYtPmRldi5wYXJlbnQgID0gc2FjaGlwLT5kZXY7CiAJZGV2LT5kZXYuYnVzICAgICA9ICZzYTExMTFfYnVzX3R5cGU7CkBAIC01NjAsNyArNTU4LDcgQEAKIAlkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IHNhY2hpcC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKIAlkZXYtPnJlcy5zdGFydCAgID0gc2FjaGlwLT5waHlzICsgaW5mby0+b2Zmc2V0OwogCWRldi0+cmVzLmVuZCAgICAgPSBkZXYtPnJlcy5zdGFydCArIDUxMTsKLQlkZXYtPnJlcy5uYW1lICAgID0gZGV2LT5kZXYuYnVzX2lkOworCWRldi0+cmVzLm5hbWUgICAgPSBkZXZfbmFtZSgmZGV2LT5kZXYpOwogCWRldi0+cmVzLmZsYWdzICAgPSBJT1JFU09VUkNFX01FTTsKIAlkZXYtPm1hcGJhc2UgICAgID0gc2FjaGlwLT5iYXNlICsgaW5mby0+b2Zmc2V0OwogCWRldi0+c2twY3JfbWFzayAgPSBpbmZvLT5za3Bjcl9tYXNrOwpAQCAtNTcwLDYgKzU2OCw3IEBACiAJaWYgKHJldCkgewogCQlwcmludGsoIlNBMTExMTogZmFpbGVkIHRvIGFsbG9jYXRlIHJlc291cmNlIGZvciAlc1xuIiwKIAkJCWRldi0+cmVzLm5hbWUpOworCQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCBOVUxMKTsKIAkJa2ZyZWUoZGV2KTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNTkzLDcgKzU5Miw4IEBACiAJCWlmIChkZXYtPmRtYV9tYXNrICE9IDB4ZmZmZmZmZmZVTCkgewogCQkJcmV0ID0gZG1hYm91bmNlX3JlZ2lzdGVyX2RldigmZGV2LT5kZXYsIDEwMjQsIDQwOTYpOwogCQkJaWYgKHJldCkgewotCQkJCXByaW50aygiU0ExMTExOiBGYWlsZWQgdG8gcmVnaXN0ZXIgJXMgd2l0aCBkbWFib3VuY2UiLCBkZXYtPmRldi5idXNfaWQpOworCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiU0ExMTExOiBGYWlsZWQgdG8gcmVnaXN0ZXIiCisJCQkJCSIgd2l0aCBkbWFib3VuY2VcbiIpOwogCQkJCWRldmljZV91bnJlZ2lzdGVyKCZkZXYtPmRldik7CiAJCQl9CiAJCX0KQEAgLTYyNyw3ICs2MjcsNyBAQAogCWlmICghc2FjaGlwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNhY2hpcC0+Y2xrID0gY2xrX2dldChtZSwgIkdQSU8yN19DTEsiKTsKKwlzYWNoaXAtPmNsayA9IGNsa19nZXQobWUsICJTQTExMTFfQ0xLIik7CiAJaWYgKCFzYWNoaXAtPmNsaykgewogCQlyZXQgPSBQVFJfRVJSKHNhY2hpcC0+Y2xrKTsKIAkJZ290byBlcnJfZnJlZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jIGIvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKaW5kZXggYmMyOTliMC4uYWUzOTU1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCWRldnB0ci0+Z3Bpby5iYXNlID0gLTE7CiAKIAlpZiAoaW5mLT5ncGlvX2Jhc2UgIT0gMCkgewotCQlkZXZwdHItPmdwaW8ubGFiZWwgPSBwZGV2LT5kZXYuYnVzX2lkOworCQlkZXZwdHItPmdwaW8ubGFiZWwgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAkJZGV2cHRyLT5ncGlvLmJhc2UgPSBpbmYtPmdwaW9fYmFzZTsKIAkJZGV2cHRyLT5ncGlvLm5ncGlvID0gMTI7IC8qIFBBMTEgPSAwLCBQQTEyID0gMSwgZXRjLiB1cCB0byBQQTIyID0gMTEgKi8KIAkJZGV2cHRyLT5ncGlvLnNldCA9IHNjb29wX2dwaW9fc2V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lenhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lenhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhODRkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2V6eF9kZWZjb25maWcKQEAgLTAsMCArMSwxNjE0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYtcmMzCisjIE1vbiBKdWwgIDcgMTc6NTI6MjEgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfSEFWRV9QV009eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItZXp4ZGV2IgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UUklaRVBTNCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAorQ09ORklHX1BYQV9FWlg9eQorQ09ORklHX01BQ0hfRVpYX0E3ODA9eQorQ09ORklHX01BQ0hfRVpYX0U2ODA9eQorQ09ORklHX01BQ0hfRVpYX0ExMjAwPXkKK0NPTkZJR19NQUNIX0VaWF9BOTEwPXkKK0NPTkZJR19NQUNIX0VaWF9FNj15CitDT05GSUdfTUFDSF9FWlhfRTI9eQorQ09ORklHX1BYQTI3eD15CitDT05GSUdfUFhBX1NTUD15CitDT05GSUdfUFhBX1BXTT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CitDT05GSUdfWFNDQUxFX1BNVT15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTEgcm9vdD0vZGV2L21tY2JsazBwMiByb290ZnN0eXBlPWV4dDIgcm9vdGRlbGF5PTEgaXA9MTkyLjE2OC4wLjIwMjoxOTIuMTY4LjAuMjAwOjE5Mi4xNjguMC4yMDA6MjU1LjI1NS4yNTUuMCBkZWJ1ZyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0tFWEVDPXkKK0NPTkZJR19BVEFHU19QUk9DPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKK0NPTkZJR19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lQVjZfTUlQNj1tCitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKK0NPTkZJR19CUklER0VfTkVURklMVEVSPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fRENDUCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0FIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fVURQTElURT1tCitDT05GSUdfTkZfTkFUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorQ09ORklHX05GX05BVF9URlRQPW0KK0NPTkZJR19ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfUFBUUD1tCitDT05GSUdfTkZfTkFUX0gzMjM9bQorQ09ORklHX05GX05BVF9TSVA9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorCisjCisjIEJyaWRnZTogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorQ09ORklHX0JSSURHRT1tCisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CitDT05GSUdfTkVUX1NDSF9GSUZPPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorQ09ORklHX0JUPXkKK0NPTkZJR19CVF9MMkNBUD1tCitDT05GSUdfQlRfU0NPPXkKK0NPTkZJR19CVF9SRkNPTU09bQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9bQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19CVF9IQ0lVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lVQVJUPXkKK0NPTkZJR19CVF9IQ0lVQVJUX0g0PXkKKyMgQ09ORklHX0JUX0hDSVVBUlRfQkNTUCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CisKKyMKKyMgV2lyZWxlc3MKKyMKK0NPTkZJR19DRkc4MDIxMT1tCitDT05GSUdfTkw4MDIxMT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19NQUM4MDIxMT1tCisKKyMKKyMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KKyMKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX05PTkUgaXMgbm90IHNldAorCisjCisjIFNlbGVjdGluZyAneScgZm9yIGFuIGFsZ29yaXRobSB3aWxsCisjCisKKyMKKyMgYnVpbGQgdGhlIGFsZ29yaXRobSBpbnRvIG1hYzgwMjExLgorIworQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKK0NPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQorIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfTEVEUz15CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTE9bQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj1tCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPW0KK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CisjIENPTkZJR19NVERfQkxLREVWUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1hJUD15CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT1tCitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZPXkKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVBNUE9XRVIgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfUFhBMjd4PXkKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX1BDQVA9eQorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVUlOUFVUPXkKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD04CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9eQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1BYQTJYWD1tCisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR1BJT19MSUI9eQorCisjCisjIEdQSU8gU3VwcG9ydAorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CitDT05GSUdfRVpYX1BDQVA9eQorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCitDT05GSUdfVklERU9fREVWPW0KK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCitDT05GSUdfVklERU9fQUxMT1dfVjRMMT15CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX01FRElBPW0KKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9bQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX1ZJREVPX1Y0TDI9bQorQ09ORklHX1ZJREVPX1Y0TDE9bQorQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CisjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPPXkKKyMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkVSXzMwMzYgaXMgbm90IHNldAorIyBDT05GSUdfVjRMX1VTQl9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fUFhBMjd4IGlzIG5vdCBzZXQKK0NPTkZJR19SQURJT19BREFQVEVSUz15CisjIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0k0NzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1BYQT15CisjIENPTkZJR19GQl9QWEFfU01BUlRQQU5FTCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlM9eQorIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FNMjAwRVBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CisjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVFM9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorQ09ORklHX0ZPTlRfTUlOSV80eDY9eQorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIEFMU0EgQVJNIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9QWEEyWFhfQUM5NyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIGRldmljZXMKKyMKKworIworIyBVU0IgZGV2aWNlcworIworIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0CisjCitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1BYQTJYWF9TT0M9eQorCisjCisjIEFMU0EgU29DIGF1ZGlvIGZvciBGcmVlc2NhbGUgU09DcworIworCisjCisjIFNvQyBBdWRpbyBmb3IgdGhlIFRleGFzIEluc3RydW1lbnRzIE9NQVAKKyMKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYPXkKK0NPTkZJR19VU0JfUFhBMjdYPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorIyBDT05GSUdfVVNCX0VUSF9STkRJUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKKworIworIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKK0NPTkZJR19TRElPX1VBUlQ9eQorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19QWEE9eQorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfU0ExMTAwPW0KKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPW0KK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPW0KK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9eQorQ09ORklHX0FVVE9GUzRfRlM9eQorQ09ORklHX0ZVU0VfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMl9BQ0w9eQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjNfQUNMPXkKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUk9PVF9ORlMgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorQ09ORklHX0NJRlNfU1RBVFM9eQorIyBDT05GSUdfQ0lGU19TVEFUUzIgaXMgbm90IHNldAorQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19YVFM9bQorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19UR1IxOTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRUVEPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCBlYjkwOTJjLi4xZDI5NmZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0yOCw2ICsyOCw3IEBACiBvYmotJChDT05GSUdfQVRBR1NfUFJPQykJKz0gYXRhZ3Mubwogb2JqLSQoQ09ORklHX09BQklfQ09NUEFUKQkrPSBzeXNfb2FiaS1jb21wYXQubwogb2JqLSQoQ09ORklHX0FSTV9USFVNQkVFKQkrPSB0aHVtYmVlLm8KK29iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYi5vCiAKIG9iai0kKENPTkZJR19DUlVOQ0gpCQkrPSBjcnVuY2gubyBjcnVuY2gtYml0cy5vCiBBRkxBR1NfY3J1bmNoLWJpdHMubwkJOj0gLVdhLC1tY3B1PWVwOTMxMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMgYi9hcmNoL2FybS9rZXJuZWwvZWNhcmQuYwppbmRleCA4YmZkMjk5Li5mNWNmZGFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZWNhcmQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZWNhcmQuYwpAQCAtNzgzLDcgKzc4Myw3IEBACiAKICNkZWZpbmUgZWNfc2V0X3Jlc291cmNlKGVjLG5yLHN0LHN6KQkJCQlcCiAJZG8gewkJCQkJCQlcCi0JCShlYyktPnJlc291cmNlW25yXS5uYW1lID0gZWMtPmRldi5idXNfaWQ7CVwKKwkJKGVjKS0+cmVzb3VyY2VbbnJdLm5hbWUgPSBkZXZfbmFtZSgmZWMtPmRldik7CVwKIAkJKGVjKS0+cmVzb3VyY2VbbnJdLnN0YXJ0ID0gc3Q7CQkJXAogCQkoZWMpLT5yZXNvdXJjZVtucl0uZW5kID0gKHN0KSArIChzeikgLSAxOwlcCiAJCShlYyktPnJlc291cmNlW25yXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwlcCkBAIC04NTMsOCArODUzLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRUNBUkRfTlVNX1JFU09VUkNFUzsgaSsrKSB7CiAJCWlmIChlYy0+cmVzb3VyY2VbaV0uZmxhZ3MgJiYKIAkJICAgIHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZWMtPnJlc291cmNlW2ldKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzb3VyY2Uocykgbm90IGF2YWlsYWJsZVxuIiwKLQkJCQllYy0+ZGV2LmJ1c19pZCk7CisJCQlkZXZfZXJyKCZlYy0+ZGV2LCAicmVzb3VyY2Uocykgbm90IGF2YWlsYWJsZVxuIik7CiAJCQllYy0+cmVzb3VyY2VbaV0uZW5kIC09IGVjLT5yZXNvdXJjZVtpXS5zdGFydDsKIAkJCWVjLT5yZXNvdXJjZVtpXS5zdGFydCA9IDA7CiAJCQllYy0+cmVzb3VyY2VbaV0uZmxhZ3MgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2tnZGIuYyBiL2FyY2gvYXJtL2tlcm5lbC9rZ2RiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmZmFlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9rZ2RiLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBhcmNoL2FybS9rZXJuZWwva2dkYi5jCisgKgorICogQVJNIEtHREIgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYworICogQ29weXJpZ2h0IChjKSAyMDA4IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIEF1dGhvcnM6ICBHZW9yZ2UgRGF2aXMgPGRhdmlzX2dAbXZpc3RhLmNvbT4KKyAqICAgICAgICAgICBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICovCisjaW5jbHVkZSA8bGludXgva2dkYi5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCisvKiBNYWtlIGEgbG9jYWwgY29weSBvZiB0aGUgcmVnaXN0ZXJzIHBhc3NlZCBpbnRvIHRoZSBoYW5kbGVyIChibGV0Y2gpICovCit2b2lkIHB0X3JlZ3NfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICprZXJuZWxfcmVncykKK3sKKwlpbnQgcmVnbm87CisKKwkvKiBJbml0aWFsaXplIGFsbCB0byB6ZXJvLiAqLworCWZvciAocmVnbm8gPSAwOyByZWdubyA8IEdEQl9NQVhfUkVHUzsgcmVnbm8rKykKKwkJZ2RiX3JlZ3NbcmVnbm9dID0gMDsKKworCWdkYl9yZWdzW19SMF0JCT0ga2VybmVsX3JlZ3MtPkFSTV9yMDsKKwlnZGJfcmVnc1tfUjFdCQk9IGtlcm5lbF9yZWdzLT5BUk1fcjE7CisJZ2RiX3JlZ3NbX1IyXQkJPSBrZXJuZWxfcmVncy0+QVJNX3IyOworCWdkYl9yZWdzW19SM10JCT0ga2VybmVsX3JlZ3MtPkFSTV9yMzsKKwlnZGJfcmVnc1tfUjRdCQk9IGtlcm5lbF9yZWdzLT5BUk1fcjQ7CisJZ2RiX3JlZ3NbX1I1XQkJPSBrZXJuZWxfcmVncy0+QVJNX3I1OworCWdkYl9yZWdzW19SNl0JCT0ga2VybmVsX3JlZ3MtPkFSTV9yNjsKKwlnZGJfcmVnc1tfUjddCQk9IGtlcm5lbF9yZWdzLT5BUk1fcjc7CisJZ2RiX3JlZ3NbX1I4XQkJPSBrZXJuZWxfcmVncy0+QVJNX3I4OworCWdkYl9yZWdzW19SOV0JCT0ga2VybmVsX3JlZ3MtPkFSTV9yOTsKKwlnZGJfcmVnc1tfUjEwXQkJPSBrZXJuZWxfcmVncy0+QVJNX3IxMDsKKwlnZGJfcmVnc1tfRlBdCQk9IGtlcm5lbF9yZWdzLT5BUk1fZnA7CisJZ2RiX3JlZ3NbX0lQXQkJPSBrZXJuZWxfcmVncy0+QVJNX2lwOworCWdkYl9yZWdzW19TUFRdCQk9IGtlcm5lbF9yZWdzLT5BUk1fc3A7CisJZ2RiX3JlZ3NbX0xSXQkJPSBrZXJuZWxfcmVncy0+QVJNX2xyOworCWdkYl9yZWdzW19QQ10JCT0ga2VybmVsX3JlZ3MtPkFSTV9wYzsKKwlnZGJfcmVnc1tfQ1BTUl0JCT0ga2VybmVsX3JlZ3MtPkFSTV9jcHNyOworfQorCisvKiBDb3B5IGxvY2FsIGdkYiByZWdpc3RlcnMgYmFjayB0byBrZ2RiIHJlZ3MsIGZvciBsYXRlciBjb3B5IHRvIGtlcm5lbCAqLwordm9pZCBnZGJfcmVnc190b19wdF9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqa2VybmVsX3JlZ3MpCit7CisJa2VybmVsX3JlZ3MtPkFSTV9yMAk9IGdkYl9yZWdzW19SMF07CisJa2VybmVsX3JlZ3MtPkFSTV9yMQk9IGdkYl9yZWdzW19SMV07CisJa2VybmVsX3JlZ3MtPkFSTV9yMgk9IGdkYl9yZWdzW19SMl07CisJa2VybmVsX3JlZ3MtPkFSTV9yMwk9IGdkYl9yZWdzW19SM107CisJa2VybmVsX3JlZ3MtPkFSTV9yNAk9IGdkYl9yZWdzW19SNF07CisJa2VybmVsX3JlZ3MtPkFSTV9yNQk9IGdkYl9yZWdzW19SNV07CisJa2VybmVsX3JlZ3MtPkFSTV9yNgk9IGdkYl9yZWdzW19SNl07CisJa2VybmVsX3JlZ3MtPkFSTV9yNwk9IGdkYl9yZWdzW19SN107CisJa2VybmVsX3JlZ3MtPkFSTV9yOAk9IGdkYl9yZWdzW19SOF07CisJa2VybmVsX3JlZ3MtPkFSTV9yOQk9IGdkYl9yZWdzW19SOV07CisJa2VybmVsX3JlZ3MtPkFSTV9yMTAJPSBnZGJfcmVnc1tfUjEwXTsKKwlrZXJuZWxfcmVncy0+QVJNX2ZwCT0gZ2RiX3JlZ3NbX0ZQXTsKKwlrZXJuZWxfcmVncy0+QVJNX2lwCT0gZ2RiX3JlZ3NbX0lQXTsKKwlrZXJuZWxfcmVncy0+QVJNX3NwCT0gZ2RiX3JlZ3NbX1NQVF07CisJa2VybmVsX3JlZ3MtPkFSTV9scgk9IGdkYl9yZWdzW19MUl07CisJa2VybmVsX3JlZ3MtPkFSTV9wYwk9IGdkYl9yZWdzW19QQ107CisJa2VybmVsX3JlZ3MtPkFSTV9jcHNyCT0gZ2RiX3JlZ3NbX0NQU1JdOworfQorCit2b2lkCitzbGVlcGluZ190aHJlYWRfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqdGhyZWFkX3JlZ3M7CisJaW50IHJlZ25vOworCisJLyogSnVzdCBtYWtpbmcgc3VyZS4uLiAqLworCWlmICh0YXNrID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIEluaXRpYWxpemUgdG8gemVybyAqLworCWZvciAocmVnbm8gPSAwOyByZWdubyA8IEdEQl9NQVhfUkVHUzsgcmVnbm8rKykKKwkJZ2RiX3JlZ3NbcmVnbm9dID0gMDsKKworCS8qIE90aGVyd2lzZSwgd2UgaGF2ZSBvbmx5IHNvbWUgcmVnaXN0ZXJzIGZyb20gc3dpdGNoX3RvKCkgKi8KKwl0aHJlYWRfcmVncwkJPSB0YXNrX3B0X3JlZ3ModGFzayk7CisJZ2RiX3JlZ3NbX1IwXQkJPSB0aHJlYWRfcmVncy0+QVJNX3IwOworCWdkYl9yZWdzW19SMV0JCT0gdGhyZWFkX3JlZ3MtPkFSTV9yMTsKKwlnZGJfcmVnc1tfUjJdCQk9IHRocmVhZF9yZWdzLT5BUk1fcjI7CisJZ2RiX3JlZ3NbX1IzXQkJPSB0aHJlYWRfcmVncy0+QVJNX3IzOworCWdkYl9yZWdzW19SNF0JCT0gdGhyZWFkX3JlZ3MtPkFSTV9yNDsKKwlnZGJfcmVnc1tfUjVdCQk9IHRocmVhZF9yZWdzLT5BUk1fcjU7CisJZ2RiX3JlZ3NbX1I2XQkJPSB0aHJlYWRfcmVncy0+QVJNX3I2OworCWdkYl9yZWdzW19SN10JCT0gdGhyZWFkX3JlZ3MtPkFSTV9yNzsKKwlnZGJfcmVnc1tfUjhdCQk9IHRocmVhZF9yZWdzLT5BUk1fcjg7CisJZ2RiX3JlZ3NbX1I5XQkJPSB0aHJlYWRfcmVncy0+QVJNX3I5OworCWdkYl9yZWdzW19SMTBdCQk9IHRocmVhZF9yZWdzLT5BUk1fcjEwOworCWdkYl9yZWdzW19GUF0JCT0gdGhyZWFkX3JlZ3MtPkFSTV9mcDsKKwlnZGJfcmVnc1tfSVBdCQk9IHRocmVhZF9yZWdzLT5BUk1faXA7CisJZ2RiX3JlZ3NbX1NQVF0JCT0gdGhyZWFkX3JlZ3MtPkFSTV9zcDsKKwlnZGJfcmVnc1tfTFJdCQk9IHRocmVhZF9yZWdzLT5BUk1fbHI7CisJZ2RiX3JlZ3NbX1BDXQkJPSB0aHJlYWRfcmVncy0+QVJNX3BjOworCWdkYl9yZWdzW19DUFNSXQkJPSB0aHJlYWRfcmVncy0+QVJNX2Nwc3I7Cit9CisKK3N0YXRpYyBpbnQgY29tcGlsZWRfYnJlYWs7CisKK2ludCBrZ2RiX2FyY2hfaGFuZGxlX2V4Y2VwdGlvbihpbnQgZXhjZXB0aW9uX3ZlY3RvciwgaW50IHNpZ25vLAorCQkJICAgICAgIGludCBlcnJfY29kZSwgY2hhciAqcmVtY29tX2luX2J1ZmZlciwKKwkJCSAgICAgICBjaGFyICpyZW1jb21fb3V0X2J1ZmZlciwKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqbGludXhfcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJY2hhciAqcHRyOworCisJc3dpdGNoIChyZW1jb21faW5fYnVmZmVyWzBdKSB7CisJY2FzZSAnRCc6CisJY2FzZSAnayc6CisJY2FzZSAnYyc6CisJCWtnZGJfY29udHRocmVhZCA9IE5VTEw7CisKKwkJLyoKKwkJICogVHJ5IHRvIHJlYWQgb3B0aW9uYWwgcGFyYW1ldGVyLCBwYyB1bmNoYW5nZWQgaWYgbm8gcGFybS4KKwkJICogSWYgdGhpcyB3YXMgYSBjb21waWxlZCBicmVha3BvaW50LCB3ZSBuZWVkIHRvIG1vdmUKKwkJICogdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24gb3Igd2Ugd2lsbCBqdXN0IGJyZWFrcG9pbnQKKwkJICogb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KKwkJICovCisJCXB0ciA9ICZyZW1jb21faW5fYnVmZmVyWzFdOworCQlpZiAoa2dkYl9oZXgybG9uZygmcHRyLCAmYWRkcikpCisJCQlsaW51eF9yZWdzLT5BUk1fcGMgPSBhZGRyOworCQllbHNlIGlmIChjb21waWxlZF9icmVhayA9PSAxKQorCQkJbGludXhfcmVncy0+QVJNX3BjICs9IDQ7CisKKwkJY29tcGlsZWRfYnJlYWsgPSAwOworCisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBrZ2RiX2Jya19mbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc3RyKQoreworCWtnZGJfaGFuZGxlX2V4Y2VwdGlvbigxLCBTSUdUUkFQLCAwLCByZWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtnZGJfY29tcGlsZWRfYnJrX2ZuKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zdHIpCit7CisJY29tcGlsZWRfYnJlYWsgPSAxOworCWtnZGJfaGFuZGxlX2V4Y2VwdGlvbigxLCBTSUdUUkFQLCAwLCByZWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVuZGVmX2hvb2sga2dkYl9icmtwdF9ob29rID0geworCS5pbnN0cl9tYXNrCQk9IDB4ZmZmZmZmZmYsCisJLmluc3RyX3ZhbAkJPSBLR0RCX0JSRUFLSU5TVCwKKwkuZm4JCQk9IGtnZGJfYnJrX2ZuCit9OworCitzdGF0aWMgc3RydWN0IHVuZGVmX2hvb2sga2dkYl9jb21waWxlZF9icmtwdF9ob29rID0geworCS5pbnN0cl9tYXNrCQk9IDB4ZmZmZmZmZmYsCisJLmluc3RyX3ZhbAkJPSBLR0RCX0NPTVBJTEVEX0JSRUFLLAorCS5mbgkJCT0ga2dkYl9jb21waWxlZF9icmtfZm4KK307CisKKy8qKgorICoJa2dkYl9hcmNoX2luaXQgLSBQZXJmb3JtIGFueSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW5pdGFsaXphdGlvbi4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIHRoZSBpbml0YWxpemF0aW9uIG9mIGFueSBhcmNoaXRlY3R1cmUKKyAqCXNwZWNpZmljIGNhbGxiYWNrcy4KKyAqLworaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfdW5kZWZfaG9vaygma2dkYl9icmtwdF9ob29rKTsKKwlyZWdpc3Rlcl91bmRlZl9ob29rKCZrZ2RiX2NvbXBpbGVkX2Jya3B0X2hvb2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJa2dkYl9hcmNoX2V4aXQgLSBQZXJmb3JtIGFueSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdW5pbml0YWxpemF0aW9uLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgdGhlIHVuaW5pdGFsaXphdGlvbiBvZiBhbnkgYXJjaGl0ZWN0dXJlCisgKglzcGVjaWZpYyBjYWxsYmFja3MsIGZvciBkeW5hbWljIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uCisgKi8KK3ZvaWQga2dkYl9hcmNoX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX3VuZGVmX2hvb2soJmtnZGJfYnJrcHRfaG9vayk7CisJdW5yZWdpc3Rlcl91bmRlZl9ob29rKCZrZ2RiX2NvbXBpbGVkX2Jya3B0X2hvb2spOworfQorCisvKgorICogUmVnaXN0ZXIgb3VyIHVuZGVmIGluc3RydWN0aW9uIGhvb2tzIHdpdGggQVJNIHVuZGVmIGNvcmUuCisgKiBXZSByZWdzaXRlciBhIGhvb2sgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBLR0IgYnJlYWsgaW5zdAorICogYW5kIHdlIGhhbmRsZSB0aGUgbm9ybWFsIHVuZGVmIGNhc2Ugd2l0aGluIHRoZSBkb191bmRlZmluc3RyCisgKiBoYW5kbGVyLgorICovCitzdHJ1Y3Qga2dkYl9hcmNoIGFyY2hfa2dkYl9vcHMgPSB7CisjaWZuZGVmIF9fQVJNRUJfXworCS5nZGJfYnB0X2luc3RyCQk9IHsweGZlLCAweGRlLCAweGZmLCAweGU3fQorI2Vsc2UgLyogISBfX0FSTUVCX18gKi8KKwkuZ2RiX2JwdF9pbnN0cgkJPSB7MHhlNywgMHhmZiwgMHhkZSwgMHhmZX0KKyNlbmRpZgorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggYjdiMDcyMC4uMzhmMGU3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCiAjaW5jbHVkZSAiY29tcGF0LmgiCiAjaW5jbHVkZSAiYXRhZ3MuaCIKQEAgLTg1Myw2ICs4NTQsNyBAQAogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwogI2VuZGlmCiAjZW5kaWYKKwllYXJseV90cmFwX2luaXQoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwppbmRleCBjYzUxNDViLi4zNjhkMTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKQEAgLTEzMCw3ICsxMzAsOSBAQAogCXsgInJlZCIsICAgbGVkX3JlZF9vbiwgICBsZWRfcmVkX29mZiAgIH0sCiB9OwogCi1zdGF0aWMgc3NpemVfdCBsZWRzX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgc3NpemVfdCBsZWRzX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJaW50IHJldCA9IC1FSU5WQUwsIGxlbiA9IHN0cmNzcG4oYnVmLCAiICIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCmluZGV4IDU1OTVmZGQuLjcyNzdhZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCkBAIC03MDgsNiArNzA4LDExIEBACiAKIHZvaWQgX19pbml0IHRyYXBfaW5pdCh2b2lkKQogeworCXJldHVybjsKK30KKwordm9pZCBfX2luaXQgZWFybHlfdHJhcF9pbml0KHZvaWQpCit7CiAJdW5zaWduZWQgbG9uZyB2ZWN0b3JzID0gQ09ORklHX1ZFQ1RPUlNfQkFTRTsKIAlleHRlcm4gY2hhciBfX3N0dWJzX3N0YXJ0W10sIF9fc3R1YnNfZW5kW107CiAJZXh0ZXJuIGNoYXIgX192ZWN0b3JzX3N0YXJ0W10sIF9fdmVjdG9yc19lbmRbXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbXBkMS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ltcGQxLmMKaW5kZXggNjJlNjUzYS4uNWExNTg4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ltcGQxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ltcGQxLmMKQEAgLTM5Myw5ICszOTMsNyBAQAogCQlpZiAoIWQpCiAJCQljb250aW51ZTsKIAotCQlzbnByaW50ZihkLT5kZXYuYnVzX2lkLCBzaXplb2YoZC0+ZGV2LmJ1c19pZCksCi0JCQkgImxtJXg6JTUuNWx4IiwgZGV2LT5pZCwgaWRldi0+b2Zmc2V0ID4+IDEyKTsKLQorCQlkZXZfc2V0X25hbWUoJmQtPmRldiwgImxtJXg6JTUuNWx4IiwgZGV2LT5pZCwgaWRldi0+b2Zmc2V0ID4+IDEyKTsKIAkJZC0+ZGV2LnBhcmVudAk9ICZkZXYtPmRldjsKIAkJZC0+cmVzLnN0YXJ0CT0gZGV2LT5yZXNvdXJjZS5zdGFydCArIGlkZXYtPm9mZnNldDsKIAkJZC0+cmVzLmVuZAk9IGQtPnJlcy5zdGFydCArIFNaXzRLIC0gMTsKQEAgLTQwNyw4ICs0MDUsNyBAQAogCiAJCXJldCA9IGFtYmFfZGV2aWNlX3JlZ2lzdGVyKGQsICZkZXYtPnJlc291cmNlKTsKIAkJaWYgKHJldCkgewotCQkJcHJpbnRrKCJ1bmFibGUgdG8gcmVnaXN0ZXIgZGV2aWNlICVzOiAlZFxuIiwKLQkJCQlkLT5kZXYuYnVzX2lkLCByZXQpOworCQkJZGV2X2VycigmZC0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIGRldmljZTogJWRcbiIpOwogCQkJa2ZyZWUoZCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbG0uYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9sbS5jCmluZGV4IDYyMmNkYzQuLmY5MzljNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9sbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9sbS5jCkBAIC04MSw4ICs4MSwxMCBAQAogCWRldi0+ZGV2LnJlbGVhc2UgPSBsbV9kZXZpY2VfcmVsZWFzZTsKIAlkZXYtPmRldi5idXMgPSAmbG1fYnVzdHlwZTsKIAotCXNucHJpbnRmKGRldi0+ZGV2LmJ1c19pZCwgc2l6ZW9mKGRldi0+ZGV2LmJ1c19pZCksICJsbSVkIiwgZGV2LT5pZCk7Ci0JZGV2LT5yZXNvdXJjZS5uYW1lID0gZGV2LT5kZXYuYnVzX2lkOworCXJldCA9IGRldl9zZXRfbmFtZSgmZGV2LT5kZXYsICJsbSVkIiwgZGV2LT5pZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlkZXYtPnJlc291cmNlLm5hbWUgPSBkZXZfbmFtZSgmZGV2LT5kZXYpOwogCiAJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkZXYtPnJlc291cmNlKTsKIAlpZiAocmV0ID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IDkxNGJiMzMuLmU4ZWU3ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwpAQCAtMTYsMTggKzE2LDI0IEBACiBjb25maWcgQ1BVX1BYQTMyMAogCWJvb2wgIlBYQTMyMCAoY29kZW5hbWUgTW9uYWhhbnMtUCkiCiAKK2NvbmZpZyBDUFVfUFhBOTMwCisJYm9vbCAiUFhBOTMwIChjb2RlbmFtZSBUYXZvci1QKSIKKwogZW5kbWVudQogCiBlbmRpZgogCi1tZW51ICJTZWxlY3QgdGFyZ2V0IGJvYXJkcyIKLQogY29uZmlnIEFSQ0hfR1VNU1RJWAogCWJvb2wgIkd1bXN0aXggWFNjYWxlIGJvYXJkcyIKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEKIAkgIEd1bXN0aXggRnVsbCBGdW5jdGlvbiBNaW5hdHVyZSBDb21wdXRlci4KIAorY29uZmlnIE1BQ0hfR1VNU1RJWF9GCisJYm9vbCAiQmFzaXgsIENvbm5leCwgd3MtMjAwYXgsIHdzLTQwMGF4IHN5c3RlbXMiCisJZGVwZW5kcyBvbiBBUkNIX0dVTVNUSVgKKwlzZWxlY3QgUFhBMjV4CisKIGNvbmZpZyBBUkNIX0xVQkJPQ0sKIAlib29sICJJbnRlbCBEQlBYQTI1MCBEZXZlbG9wbWVudCBQbGF0Zm9ybSIKIAlzZWxlY3QgUFhBMjV4CkBAIC01OCwxNDYgKzY0LDYgQEAKIAkgIFNMLUMzMDAwIChTcGl0eiksIFNMLUMzMTAwIChCb3J6b2kpIG9yIFNMLUM2MDAweCAoVG9zYSkKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLgogCi1jb25maWcgQVJDSF9QWEFfRVNFUklFUwotCWJvb2wgIlBYQSBiYXNlZCBUb3NoaWJhIGUtc2VyaWVzIFBEQXMiCi0Jc2VsZWN0IFBYQTI1eAotCi1jb25maWcgTUFDSF9FMzMwCi0JYm9vbCAiVG9zaGliYSBlMzMwIgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gQVJDSF9QWEFfRVNFUklFUwotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBUb3NoaWJhCi0JICBlMzMwIGZhbWlseSBQREEuCi0KLWNvbmZpZyBNQUNIX0U3NDAKLQlib29sICJUb3NoaWJhIGU3NDAiCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBBUkNIX1BYQV9FU0VSSUVTCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFRvc2hpYmEKLQkgIGU3NDAgZmFtaWx5IFBEQS4KLQotY29uZmlnIE1BQ0hfRTc1MAotCWJvb2wgIlRvc2hpYmEgZTc1MCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIEFSQ0hfUFhBX0VTRVJJRVMKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEgVG9zaGliYQotCSAgZTc1MCBmYW1pbHkgUERBLgotCi1jb25maWcgTUFDSF9FNDAwCi0JYm9vbCAiVG9zaGliYSBlNDAwIgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gQVJDSF9QWEFfRVNFUklFUwotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBUb3NoaWJhCi0JICBlNDAwIGZhbWlseSBQREEuCi0KLWNvbmZpZyBNQUNIX0U4MDAKLQlib29sICJUb3NoaWJhIGU4MDAiCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBBUkNIX1BYQV9FU0VSSUVTCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFRvc2hpYmEKLQkgIGU4MDAgZmFtaWx5IFBEQS4KLQotY29uZmlnIE1BQ0hfVFJJWkVQUzQKLQlib29sICJLZWl0aCB1bmQgS29lcCBUcml6ZXBzNCBESU1NLU1vZHVsZSIKLQlzZWxlY3QgUFhBMjd4Ci0KLWNvbmZpZyBNQUNIX0VNX1gyNzAKLQlib29sICJDb21wdUxhYiBFTS14MjcwIHBsYXRmb3JtIgotCXNlbGVjdCBQWEEyN3gKLQotY29uZmlnIE1BQ0hfQ09MSUJSSQotCWJvb2wgIlRvcmFkZXggQ29saWJyaSBQWDI3eCIKLQlzZWxlY3QgUFhBMjd4Ci0KLWNvbmZpZyBNQUNIX1pZTE9OSVRFCi0JYm9vbCAiUFhBM3h4IERldmVsb3BtZW50IFBsYXRmb3JtIgotCXNlbGVjdCBQWEEzeHgKLQlzZWxlY3QgSEFWRV9QV00KLQotY29uZmlnIE1BQ0hfTElUVExFVE9OCi0JYm9vbCAiUFhBM3h4IEZvcm0gRmFjdG9yIFBsYXRmb3JtIChha2EgTGl0dGxldG9uKSIKLQlzZWxlY3QgUFhBM3h4Ci0Jc2VsZWN0IFBYQV9TU1AKLQotY29uZmlnIE1BQ0hfQVJNQ09SRQotCWJvb2wgIkNvbXB1TGFiIENNLVgyNzAgbW9kdWxlcyIKLQlzZWxlY3QgUFhBMjd4Ci0Jc2VsZWN0IElXTU1YVAotCi1jb25maWcgTUFDSF9NQUdJQ0lBTgotCWJvb2wgIkVuYWJsZSBIVEMgTWFnaWNpYW4gU3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfUFhBCi0Jc2VsZWN0IFBYQTI3eAotCXNlbGVjdCBJV01NWFQKLQotY29uZmlnIE1BQ0hfUENNMDI3Ci0JYm9vbCAiUGh5dGVjIHBoeUNPUkUtUFhBMjcwIENQVSBtb2R1bGUgKFBDTS0wMjcpIgotCXNlbGVjdCBQWEEyN3gKLQlzZWxlY3QgSVdNTVhUCi0KLWVuZG1lbnUKLQotY2hvaWNlCi0JcHJvbXB0ICJVc2VkIGJhc2Vib2FyZCIKLQlkZXBlbmRzIG9uIE1BQ0hfUENNMDI3Ci0KLWNvbmZpZyBNQUNIX1BDTTk5MF9CQVNFQk9BUkQKLQlib29sICJQSFlURUMgUENNLTk5MCBkZXZlbG9wbWVudCBib2FyZCIKLQlzZWxlY3QgSEFWRV9QV00KLQotZW5kY2hvaWNlCi0KLWNob2ljZQotCXByb21wdCAiZGlzcGxheSBvbiBwY205OTAiCi0JZGVwZW5kcyBvbiBNQUNIX1BDTTk5MF9CQVNFQk9BUkQKLQotY29uZmlnIFBDTTk5MF9ESVNQTEFZX1NIQVJQCi0JYm9vbCAic2hhcnAgbHEwODR2MWRnMjEgc3RuIGRpc3BsYXkiCi0KLWNvbmZpZyBQQ005OTBfRElTUExBWV9ORUMKLQlib29sICJuZWMgbmw2NDQ4YmMyMF8xOGQgdGZ0IGRpc3BsYXkiCi0KLWNvbmZpZyBQQ005OTBfRElTUExBWV9OT05FCi0JYm9vbCAibm8gZGlzcGxheSIKLQotZW5kY2hvaWNlCi0KLWlmIEFSQ0hfR1VNU1RJWAotCi1jaG9pY2UKLQlwcm9tcHQgIlNlbGVjdCB0YXJnZXQgR3Vtc3RpeCBib2FyZCIKLQotY29uZmlnIE1BQ0hfR1VNU1RJWF9GCi0JYm9vbCAiQmFzaXgsIENvbm5leCwgd3MtMjAwYXgsIHdzLTQwMGF4IHN5c3RlbXMiCi0Jc2VsZWN0IFBYQTI1eAotCi1lbmRjaG9pY2UKLQotZW5kaWYKLQotCi1pZiBNQUNIX1RSSVpFUFM0Ci0KLWNob2ljZQotCXByb21wdCAiU2VsZWN0IGJhc2UgYm9hcmQgZm9yIFRyaXplcHMgNCBtb2R1bGUiCi0KLWNvbmZpZyBNQUNIX1RSSVpFUFM0X0NPTlhTCi0JYm9vbCAiQ29uWFMgRXZhbCBCb2FyZCIKLQotY29uZmlnIE1BQ0hfVFJJWkVQUzRfQU5ZCi0JYm9vbCAiYW5vdGhlciBCb2FyZCIKLQotZW5kY2hvaWNlCi0KLWVuZGlmCi0KLWVuZG1lbnUKLQogY29uZmlnIE1BQ0hfUE9PRExFCiAJYm9vbCAiRW5hYmxlIFNoYXJwIFNMLTU2MDAgKFBvb2RsZSkgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBYQV9TSEFSUFNMCkBAIC0yNDksNiArMTE1LDE4NiBAQAogCWRlcGVuZHMgb24gUFhBX1NIQVJQU0wKIAlzZWxlY3QgUFhBMjV4CiAKK2NvbmZpZyBBUkNIX1BYQV9FU0VSSUVTCisJYm9vbCAiUFhBIGJhc2VkIFRvc2hpYmEgZS1zZXJpZXMgUERBcyIKKwlzZWxlY3QgUFhBMjV4CisKK2NvbmZpZyBNQUNIX0UzMzAKKwlib29sICJUb3NoaWJhIGUzMzAiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX1BYQV9FU0VSSUVTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFRvc2hpYmEKKwkgIGUzMzAgZmFtaWx5IFBEQS4KKworY29uZmlnIE1BQ0hfRTM1MAorCWJvb2wgIlRvc2hpYmEgZTM1MCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBX0VTRVJJRVMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEgVG9zaGliYQorCSAgZTM1MCBmYW1pbHkgUERBLgorCitjb25maWcgTUFDSF9FNzQwCisJYm9vbCAiVG9zaGliYSBlNzQwIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQVJDSF9QWEFfRVNFUklFUworCXNlbGVjdCBGQl9XMTAwCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFRvc2hpYmEKKwkgIGU3NDAgZmFtaWx5IFBEQS4KKworY29uZmlnIE1BQ0hfRTc1MAorCWJvb2wgIlRvc2hpYmEgZTc1MCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBX0VTRVJJRVMKKwlzZWxlY3QgRkJfVzEwMAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBUb3NoaWJhCisJICBlNzUwIGZhbWlseSBQREEuCisKK2NvbmZpZyBNQUNIX0U0MDAKKwlib29sICJUb3NoaWJhIGU0MDAiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX1BYQV9FU0VSSUVTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFRvc2hpYmEKKwkgIGU0MDAgZmFtaWx5IFBEQS4KKworY29uZmlnIE1BQ0hfRTgwMAorCWJvb2wgIlRvc2hpYmEgZTgwMCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBX0VTRVJJRVMKKwlzZWxlY3QgRkJfVzEwMAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBUb3NoaWJhCisJICBlODAwIGZhbWlseSBQREEuCisKK2NvbmZpZyBNQUNIX1RSSVpFUFM0CisJYm9vbCAiS2VpdGggdW5kIEtvZXAgVHJpemVwczQgRElNTS1Nb2R1bGUiCisJc2VsZWN0IFBYQTI3eAorCitjb25maWcgTUFDSF9UUklaRVBTNF9DT05YUworCWJvb2wgIkNvblhTIEV2YWwgQm9hcmQiCisJZGVwZW5kcyBvbiBNQUNIX1RSSVpFUFM0CisKK2NvbmZpZyBNQUNIX0VNX1gyNzAKKwlib29sICJDb21wdUxhYiBFTS14MjcwIHBsYXRmb3JtIgorCXNlbGVjdCBQWEEyN3gKKworY29uZmlnIE1BQ0hfQ09MSUJSSQorCWJvb2wgIlRvcmFkZXggQ29saWJyaSBQWDI3eCIKKwlzZWxlY3QgUFhBMjd4CisKK2NvbmZpZyBNQUNIX1pZTE9OSVRFCisJYm9vbCAiUFhBM3h4IERldmVsb3BtZW50IFBsYXRmb3JtIChha2EgWnlsb25pdGUpIgorCXNlbGVjdCBQWEEzeHgKKwlzZWxlY3QgSEFWRV9QV00KKworY29uZmlnIE1BQ0hfTElUVExFVE9OCisJYm9vbCAiUFhBM3h4IEZvcm0gRmFjdG9yIFBsYXRmb3JtIChha2EgTGl0dGxldG9uKSIKKwlzZWxlY3QgUFhBM3h4CisJc2VsZWN0IFBYQV9TU1AKKworY29uZmlnIE1BQ0hfVEFWT1JFVkIKKwlib29sICJQWEE5MzAgRXZhbHVhdGlvbiBCb2FyZCAoYWthIFRhdm9yRVZCKSIKKwlzZWxlY3QgUFhBM3h4CisJc2VsZWN0IFBYQTkzMAorCitjb25maWcgTUFDSF9TQUFSCisJYm9vbCAiUFhBOTMwIEhhbmRoZWxkIFBsYXRmb3JtIChha2EgU0FBUikiCisJc2VsZWN0IFBYQTN4eAorCXNlbGVjdCBQWEE5MzAKKworY29uZmlnIE1BQ0hfQVJNQ09SRQorCWJvb2wgIkNvbXB1TGFiIENNLVgyNzAgbW9kdWxlcyIKKwlzZWxlY3QgUFhBMjd4CisJc2VsZWN0IElXTU1YVAorCitjb25maWcgTUFDSF9NQUdJQ0lBTgorCWJvb2wgIkVuYWJsZSBIVEMgTWFnaWNpYW4gU3VwcG9ydCIKKwlzZWxlY3QgUFhBMjd4CisJc2VsZWN0IElXTU1YVAorCitjb25maWcgTUFDSF9QQ00wMjcKKwlib29sICJQaHl0ZWMgcGh5Q09SRS1QWEEyNzAgQ1BVIG1vZHVsZSAoUENNLTAyNykiCisJc2VsZWN0IFBYQTI3eAorCXNlbGVjdCBJV01NWFQKKwlzZWxlY3QgUFhBX1NTUAorCitjb25maWcgQVJDSF9QWEFfUEFMTQorCWJvb2wgIlBYQSBiYXNlZCBQYWxtIFBEQXMiCisJc2VsZWN0IEhBVkVfUFdNCisKK2NvbmZpZyBNQUNIX1BBTE1UWAorCWJvb2wgIlBhbG0gVHxYIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQVJDSF9QWEFfUEFMTQorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgSVdNTVhUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFBhbG0gVHxYCisJICBoYW5kaGVsZCBjb21wdXRlci4KKworY29uZmlnIE1BQ0hfUENNOTkwX0JBU0VCT0FSRAorCWJvb2wgIlBIWVRFQyBQQ00tOTkwIGRldmVsb3BtZW50IGJvYXJkIgorCXNlbGVjdCBIQVZFX1BXTQorCWRlcGVuZHMgb24gTUFDSF9QQ00wMjcKKworY2hvaWNlCisJcHJvbXB0ICJkaXNwbGF5IG9uIHBjbTk5MCIKKwlkZXBlbmRzIG9uIE1BQ0hfUENNOTkwX0JBU0VCT0FSRAorCitjb25maWcgUENNOTkwX0RJU1BMQVlfU0hBUlAKKwlib29sICJzaGFycCBscTA4NHYxZGcyMSBzdG4gZGlzcGxheSIKKworY29uZmlnIFBDTTk5MF9ESVNQTEFZX05FQworCWJvb2wgIm5lYyBubDY0NDhiYzIwXzE4ZCB0ZnQgZGlzcGxheSIKKworY29uZmlnIFBDTTk5MF9ESVNQTEFZX05PTkUKKwlib29sICJubyBkaXNwbGF5IgorCitlbmRjaG9pY2UKKworCitjb25maWcgUFhBX0VaWAorCWJvb2wgIk1vdG9yb2xhIEVaWCBQbGF0Zm9ybSIKKwlzZWxlY3QgUFhBMjd4CisJc2VsZWN0IElXTU1YVAorCXNlbGVjdCBIQVZFX1BXTQorCitjb25maWcgTUFDSF9FWlhfQTc4MAorCWJvb2wgIk1vdG9yb2xhIEVaWCBBNzgwIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gUFhBX0VaWAorCitjb25maWcgTUFDSF9FWlhfRTY4MAorCWJvb2wgIk1vdG9yb2xhIEVaWCBFNjgwIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gUFhBX0VaWAorCitjb25maWcgTUFDSF9FWlhfQTEyMDAKKwlib29sICJNb3Rvcm9sYSBFWlggQTEyMDAiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBQWEFfRVpYCisKK2NvbmZpZyBNQUNIX0VaWF9BOTEwCisJYm9vbCAiTW90b3JvbGEgRVpYIEE5MTAiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBQWEFfRVpYCisKK2NvbmZpZyBNQUNIX0VaWF9FNgorCWJvb2wgIk1vdG9yb2xhIEVaWCBFNiIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFBYQV9FWlgKKworY29uZmlnIE1BQ0hfRVpYX0UyCisJYm9vbCAiTW90b3JvbGEgRVpYIEUyIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gUFhBX0VaWAorCitlbmRtZW51CisKIGNvbmZpZyBQWEEyNXgKIAlib29sCiAJaGVscApAQCAtMjg4LDQgKzMzNCwxMyBAQAogCWRlZmF1bHQgQkFDS0xJR0hUX1BXTQogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBQWEEyeHgvUFhBM3h4IFBXTSBjb250cm9sbGVycworCitjb25maWcgVE9TQV9CVAorCXRyaXN0YXRlICJDb250cm9sIHRoZSBzdGF0ZSBvZiBidWlsdC1pbiBibHVldG9vdGggY2hpcCBvbiBTaGFycCBTTC02MDAwIgorCWRlcGVuZHMgb24gTUFDSF9UT1NBCisJc2VsZWN0IFJGS0lMTAorCWhlbHAKKwkgIFRoaXMgaXMgYSBzaW1wbGUgZHJpdmVyIHRoYXQgaXMgYWJsZSB0byBjb250cm9sCisJICB0aGUgc3RhdGUgb2YgYnVpbHQgaW4gYmx1ZXRvb3RoIGNoaXAgb24gdG9zYS4KKwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKaW5kZXggYzRkZmJlOC4uOTllY2JlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKICMgQ29tbW9uIHN1cHBvcnQgKG11c3QgYmUgbGlua2VkIGJlZm9yZSBib2FyZCBzcGVjaWZpYyBzdXBwb3J0KQogb2JqLXkJCQkJKz0gY2xvY2subyBkZXZpY2VzLm8gZ2VuZXJpYy5vIGlycS5vIGRtYS5vIFwKLQkJCQkgICB0aW1lLm8gZ3Bpby5vCisJCQkJICAgdGltZS5vIGdwaW8ubyByZXNldC5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vIHNsZWVwLm8gc3RhbmRieS5vCiBvYmotJChDT05GSUdfQ1BVX0ZSRVEpCQkrPSBjcHUtcHhhLm8KIApAQCAtMTgsNiArMTgsNyBAQAogb2JqLSQoQ09ORklHX1BYQTN4eCkJCSs9IG1mcC1weGEzeHgubyBweGEzeHgubyBzbWVtYy5vCiBvYmotJChDT05GSUdfQ1BVX1BYQTMwMCkJKz0gcHhhMzAwLm8KIG9iai0kKENPTkZJR19DUFVfUFhBMzIwKQkrPSBweGEzMjAubworb2JqLSQoQ09ORklHX0NQVV9QWEE5MzApCSs9IHB4YTkzMC5vCiAKICMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAogb2JqLSQoQ09ORklHX0FSQ0hfR1VNU1RJWCkJKz0gZ3Vtc3RpeC5vCkBAIC0zNiw3ICszNywxMiBAQAogb2JqLSQoQ09ORklHX01BQ0hfVE9TQSkJCSs9IHRvc2Eubwogb2JqLSQoQ09ORklHX01BQ0hfRU1fWDI3MCkJKz0gZW0teDI3MC5vCiBvYmotJChDT05GSUdfTUFDSF9NQUdJQ0lBTikJKz0gbWFnaWNpYW4ubwotb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMpCSs9IGVzZXJpZXMubworb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMpCSs9IGVzZXJpZXMubyBlc2VyaWVzX3VkYy5vCitvYmotJChDT05GSUdfTUFDSF9FNzQwKQkJKz0gZTc0MF9sY2Qubworb2JqLSQoQ09ORklHX01BQ0hfRTc1MCkJCSs9IGU3NTBfbGNkLm8KK29iai0kKENPTkZJR19NQUNIX0U0MDApCQkrPSBlNDAwX2xjZC5vCitvYmotJChDT05GSUdfTUFDSF9FODAwKQkJKz0gZTgwMF9sY2Qubworb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkrPSBwYWxtdHgubwogCiBpZmVxICgkKENPTkZJR19NQUNIX1pZTE9OSVRFKSx5KQogICBvYmoteQkJCQkrPSB6eWxvbml0ZS5vCkBAIC00NCw4ICs1MCwxMSBAQAogICBvYmotJChDT05GSUdfQ1BVX1BYQTMyMCkJKz0genlsb25pdGVfcHhhMzIwLm8KIGVuZGlmCiBvYmotJChDT05GSUdfTUFDSF9MSVRUTEVUT04pCSs9IGxpdHRsZXRvbi5vCitvYmotJChDT05GSUdfTUFDSF9UQVZPUkVWQikJKz0gdGF2b3JldmIubworb2JqLSQoQ09ORklHX01BQ0hfU0FBUikJCSs9IHNhYXIubwogCiBvYmotJChDT05GSUdfTUFDSF9BUk1DT1JFKSAgICAgICs9IGNtLXgyNzAubworb2JqLSQoQ09ORklHX1BYQV9FWlgpICAgICAgICAgICArPSBlengubwogCiAjIFN1cHBvcnQgZm9yIGJsaW5reSBsaWdodHMKIGxlZC15IDo9IGxlZHMubwpAQCAtNTksMyArNjgsNSBAQAogaWZlcSAoJChDT05GSUdfUENJKSx5KQogb2JqLSQoQ09ORklHX01BQ0hfQVJNQ09SRSkgKz0gY20teDI3MC1wY2kubwogZW5kaWYKKworb2JqLSQoQ09ORklHX1RPU0FfQlQpCQkrPSB0b3NhLWJ0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCmluZGV4IGI0ZDA0OTUuLjYzMDA2M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYwpAQCAtMTAxLDIxICsxMDEsNiBAQAogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwogCiAKLXN0YXRpYyB2b2lkIGNsa19ncGlvMjdfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlweGFfZ3Bpb19tb2RlKEdQSU8xMV8zXzZNSHpfTUQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGtfZ3BpbzI3X2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfZ3BpbzI3X29wcyA9IHsKLQkuZW5hYmxlCQk9IGNsa19ncGlvMjdfZW5hYmxlLAotCS5kaXNhYmxlCT0gY2xrX2dwaW8yN19kaXNhYmxlLAotfTsKLQotCiB2b2lkIGNsa19ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJQ0tFTiB8PSAxIDw8IGNsay0+Y2tlbjsKQEAgLTEzMSwxNCArMTE2LDYgQEAKIAkuZGlzYWJsZQk9IGNsa19ja2VuX2Rpc2FibGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBjb21tb25fY2xrc1tdID0gewotCXsKLQkJLm5hbWUJCT0gIkdQSU8yN19DTEsiLAotCQkub3BzCQk9ICZjbGtfZ3BpbzI3X29wcywKLQkJLnJhdGUJCT0gMzY4NjQwMCwKLQl9LAotfTsKLQogdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIHNpemVfdCBudW0pCiB7CiAJaW50IGk7CkBAIC0xNDgsMTAgKzEyNSwzIEBACiAJCWxpc3RfYWRkKCZjbGtzW2ldLm5vZGUsICZjbG9ja3MpOwogCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIH0KLQotc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKLXsKLQljbGtzX3JlZ2lzdGVyKGNvbW1vbl9jbGtzLCBBUlJBWV9TSVpFKGNvbW1vbl9jbGtzKSk7Ci0JcmV0dXJuIDA7Ci19Ci1hcmNoX2luaXRjYWxsKGNsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCmluZGV4IDgzY2JmYWIuLjFlYzhmOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaApAQCAtNDcsOSArNDcsNDIgQEAKIAkJLm90aGVyCT0gX290aGVyLAkJCVwKIAl9CiAKKyNkZWZpbmUgSU5JVF9DTEsoX25hbWUsIF9vcHMsIF9yYXRlLCBfZGVsYXksIF9kZXYpICAgICAgXAorCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLm5hbWUgICA9IF9uYW1lLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLmRldiAgICA9IF9kZXYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLm9wcyAgICA9IF9vcHMsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnJhdGUgICA9IF9yYXRlLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLmRlbGF5CT0gX2RlbGF5LAkJCVwKKwl9CisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa19ja2VuX29wczsKIAogdm9pZCBjbGtfY2tlbl9lbmFibGUoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgY2xrX2NrZW5fZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOwogCisjaWZkZWYgQ09ORklHX1BYQTN4eAorI2RlZmluZSBQWEEzeHhfQ0tFTihfbmFtZSwgX2NrZW4sIF9yYXRlLCBfZGVsYXksIF9kZXYpCVwKKwl7CQkJCQkJXAorCQkubmFtZQk9IF9uYW1lLAkJCVwKKwkJLmRldgk9IF9kZXYsCQkJCVwKKwkJLm9wcwk9ICZjbGtfcHhhM3h4X2NrZW5fb3BzLAkJXAorCQkucmF0ZQk9IF9yYXRlLAkJCVwKKwkJLmNrZW4JPSBDS0VOXyMjX2NrZW4sCQkJXAorCQkuZGVsYXkJPSBfZGVsYXksCQkJXAorCX0KKworI2RlZmluZSBQWEEzeHhfQ0soX25hbWUsIF9ja2VuLCBfb3BzLCBfZGV2KQkJXAorCXsJCQkJCQlcCisJCS5uYW1lCT0gX25hbWUsCQkJXAorCQkuZGV2CT0gX2RldiwJCQkJXAorCQkub3BzCT0gX29wcywJCQkJXAorCQkuY2tlbgk9IENLRU5fIyNfY2tlbiwJCQlcCisJfQorCitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhM3h4X2NrZW5fb3BzOworZXh0ZXJuIHZvaWQgY2xrX3B4YTN4eF9ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICopOworZXh0ZXJuIHZvaWQgY2xrX3B4YTN4eF9ja2VuX2Rpc2FibGUoc3RydWN0IGNsayAqKTsKKyNlbmRpZgorCiB2b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgc2l6ZV90IG51bSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC1wY2kuYwppbmRleCAzMTljOWZmLi5iY2YwY2RlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAtcGNpLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogQml0cyB0YWtlbiBmcm9tIHZhcmlvdXMgcGxhY2VzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBDb21wdWxhYiwgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IENvbXB1bGFiLCBMdGQuCiAgKiBNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xOSwxNiArMTksMTYgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9jbS14MjcwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaXQ4MTUyLmg+CiAKLXVuc2lnbmVkIGxvbmcgaXQ4MTUyX2Jhc2VfYWRkcmVzcyA9IENNWDI3MF9JVDgxNTJfVklSVDsKK3Vuc2lnbmVkIGxvbmcgaXQ4MTUyX2Jhc2VfYWRkcmVzczsKK3N0YXRpYyBpbnQgY214MjcwX2l0ODE1Ml9pcnFfZ3BpbzsKIAogLyoKICAqIE9ubHkgZmlyc3QgNjRNQiBvZiBtZW1vcnkgY2FuIGJlIGFjY2Vzc2VkIHZpYSBQQ0kuCkBAIC00Miw3ICs0Miw3IEBACiAJdW5zaWduZWQgaW50IHN6ID0gU1pfNjRNID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAobWFjaGluZV9pc19hcm1jb3JlKCkpIHsKLQkJcHJfaW5mbygiQWRqdXN0aW5nIHpvbmVzIGZvciBDTS14MjcwXG4iKTsKKwkJcHJfaW5mbygiQWRqdXN0aW5nIHpvbmVzIGZvciBDTS1YMjcwXG4iKTsKIAogCQkvKgogCQkgKiBPbmx5IGFkanVzdCBpZiA+IDY0TSBvbiBjdXJyZW50IHN5c3RlbQpAQCAtNjAsMTkgKzYwLDIwIEBACiBzdGF0aWMgdm9pZCBjbXgyNzBfaXQ4MTUyX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJLyogY2xlYXIgb3VyIHBhcmVudCBpcnEgKi8KLQlHRURSKEdQSU9fSVQ4MTUyX0lSUSkgPSBHUElPX2JpdChHUElPX0lUODE1Ml9JUlEpOworCUdFRFIoY214MjcwX2l0ODE1Ml9pcnFfZ3BpbykgPSBHUElPX2JpdChjbXgyNzBfaXQ4MTUyX2lycV9ncGlvKTsKIAogCWl0ODE1Ml9pcnFfZGVtdXgoaXJxLCBkZXNjKTsKIH0KIAotdm9pZCBfX2NteDI3MF9wY2lfaW5pdF9pcnEodm9pZCkKK3ZvaWQgX19jbXgyNzBfcGNpX2luaXRfaXJxKGludCBpcnFfZ3BpbykKIHsKIAlpdDgxNTJfaW5pdF9pcnEoKTsKLQlweGFfZ3Bpb19tb2RlKElSUV9UT19HUElPKEdQSU9fSVQ4MTUyX0lSUSkpOwotCXNldF9pcnFfdHlwZShJUlFfR1BJTyhHUElPX0lUODE1Ml9JUlEpLCBJUlFUX1JJU0lORyk7CiAKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfR1BJTyhHUElPX0lUODE1Ml9JUlEpLAotCQkJCWNteDI3MF9pdDgxNTJfaXJxX2RlbXV4KTsKKwljbXgyNzBfaXQ4MTUyX2lycV9ncGlvID0gaXJxX2dwaW87CisKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoaXJxX2dwaW8pLCBJUlFUX1JJU0lORyk7CisKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihncGlvX3RvX2lycShpcnFfZ3BpbyksIGNteDI3MF9pdDgxNTJfaXJxX2RlbXV4KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtMTE1LDggKzExNiw4IEBACiAKIAkvKgogCSAgSGVyZSBjb21lcyB0aGUgdWdseSBwYXJ0LiBUaGUgcm91dGluZyBpcyBiYXNlYm9hcmQgc3BlY2lmaWMsCi0JICBidXQgZGVmaW5pbmcgYSBwbGF0Zm9ybSBmb3IgZWFjaCBwb3NzaWJsZSBiYXNlIG9mIENNLXgyNzAgaXMKLQkgIHVucmVhbGlzdGljLiBIZXJlIHdlIGtlZXAgbWFwcGluZyBmb3IgQVRYQmFzZSBhbmQgU0IteDI3MC4KKwkgIGJ1dCBkZWZpbmluZyBhIHBsYXRmb3JtIGZvciBlYWNoIHBvc3NpYmxlIGJhc2Ugb2YgQ00tWDI3MCBpcworCSAgdW5yZWFsaXN0aWMuIEhlcmUgd2Uga2VlcCBtYXBwaW5nIGZvciBBVFhCYXNlIGFuZCBTQi1YMjcwLgogCSovCiAJLyogQVRYQkFTRSBQQ0kgc2xvdCAqLwogCWlmIChzbG90ID09IDcpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLXBjaS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC1wY2kuaAppbmRleCBmZmUzN2I2Li40OGY1MzJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLXBjaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAtcGNpLmgKQEAgLTEsMTMgKzEsMTMgQEAKLWV4dGVybiB2b2lkIF9fY214MjcwX3BjaV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fY214MjcwX3BjaV9pbml0X2lycShpbnQgaXJxX2dwaW8pOwogZXh0ZXJuIHZvaWQgX19jbXgyNzBfcGNpX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBfX2NteDI3MF9wY2lfcmVzdW1lKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1BDSQotI2RlZmluZSBjbXgyNzBfcGNpX2luaXRfaXJxIF9fY214MjcwX3BjaV9pbml0X2lycQotI2RlZmluZSBjbXgyNzBfcGNpX3N1c3BlbmQgX19jbXgyNzBfcGNpX3N1c3BlbmQKLSNkZWZpbmUgY214MjcwX3BjaV9yZXN1bWUgX19jbXgyNzBfcGNpX3Jlc3VtZQorI2RlZmluZSBjbXgyNzBfcGNpX2luaXRfaXJxKHgpIF9fY214MjcwX3BjaV9pbml0X2lycSh4KQorI2RlZmluZSBjbXgyNzBfcGNpX3N1c3BlbmQoeCkgX19jbXgyNzBfcGNpX3N1c3BlbmQoeCkKKyNkZWZpbmUgY214MjcwX3BjaV9yZXN1bWUoeCkgX19jbXgyNzBfcGNpX3Jlc3VtZSh4KQogI2Vsc2UKLSNkZWZpbmUgY214MjcwX3BjaV9pbml0X2lycSgpIGRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBjbXgyNzBfcGNpX3N1c3BlbmQoKSBkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgY214MjcwX3BjaV9yZXN1bWUoKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgY214MjcwX3BjaV9pbml0X2lycSh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgY214MjcwX3BjaV9zdXNwZW5kKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBjbXgyNzBfcGNpX3Jlc3VtZSh4KSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCmluZGV4IDAxYjk5NjQuLjQwMmU4MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3IENvbXB1TGFiLCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQ29tcHVMYWIsIEx0ZC4KICAqIE1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTksNDQgKzksMTU2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy12MzAyMC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+Ci0KICNpbmNsdWRlIDx2aWRlby9tYnhmYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLXB4YTI3eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9iaXRmaWVsZC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2NtLXgyNzAuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pdDgxNTIuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJjbS14MjcwLXBjaS5oIgogCisvKiB2aXJ0dWFsIGFkZHJlc3NlcyBmb3Igc3RhdGljYWxseSBtYXBwZWQgcmVnaW9ucyAqLworI2RlZmluZSBDTVgyNzBfVklSVF9CQVNFCSgweGU4MDAwMDAwKQorI2RlZmluZSBDTVgyNzBfSVQ4MTUyX1ZJUlQJKENNWDI3MF9WSVJUX0JBU0UpCisKICNkZWZpbmUgUlRDX1BIWVNfQkFTRQkJKFBYQV9DUzFfUEhZUyArICg1IDw8IDIyKSkKICNkZWZpbmUgRE05MDAwX1BIWVNfQkFTRQkoUFhBX0NTMV9QSFlTICsgKDYgPDwgMjIpKQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNteDI3MF9kbTlrX3Jlc291cmNlW10gPSB7CisvKiBHUElPIElSUSB1c2FnZSAqLworI2RlZmluZSBHUElPMTBfRVRISVJRCQkoMTApCisjZGVmaW5lIEdQSU8yMl9JVDgxNTJfSVJRCSgyMikKKyNkZWZpbmUgR1BJTzgzX01NQ19JUlEJCSg4MykKKyNkZWZpbmUgR1BJTzk1X0dGWElSUQkJKDk1KQorCisjZGVmaW5lIENNWDI3MF9FVEhJUlEJCUlSUV9HUElPKEdQSU8xMF9FVEhJUlEpCisjZGVmaW5lIENNWDI3MF9JVDgxNTJfSVJRCUlSUV9HUElPKEdQSU8yMl9JVDgxNTJfSVJRKQorI2RlZmluZSBDTVgyNzBfTU1DX0lSUQkJSVJRX0dQSU8oR1BJTzgzX01NQ19JUlEpCisjZGVmaW5lIENNWDI3MF9HRlhJUlEJCUlSUV9HUElPKEdQSU85NV9HRlhJUlEpCisKKy8qIE1NQyBwb3dlciBlbmFibGUgKi8KKyNkZWZpbmUgR1BJTzEwNV9NTUNfUE9XRVIJKDEwNSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY214MjcwX3Bpbl9jb25maWdbXSA9IHsKKwkvKiBBQyc5NyAqLworCUdQSU8yOF9BQzk3X0JJVENMSywKKwlHUElPMjlfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKKwlHUElPMzFfQUM5N19TWU5DLAorCUdQSU85OF9BQzk3X1NZU0NMSywKKwlHUElPMTEzX0FDOTdfblJFU0VULAorCisJLyogQlRVQVJUICovCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwkvKiBTVFVBUlQgKi8KKwlHUElPNDZfU1RVQVJUX1JYRCwKKwlHUElPNDdfU1RVQVJUX1RYRCwKKworCS8qIE1DSSBjb250cm9sbGVyICovCisJR1BJTzMyX01NQ19DTEssCisJR1BJTzExMl9NTUNfQ01ELAorCUdQSU85Ml9NTUNfREFUXzAsCisJR1BJTzEwOV9NTUNfREFUXzEsCisJR1BJTzExMF9NTUNfREFUXzIsCisJR1BJTzExMV9NTUNfREFUXzMsCisKKwkvKiBMQ0QgKi8KKwlHUElPNThfTENEX0xERF8wLAorCUdQSU81OV9MQ0RfTEREXzEsCisJR1BJTzYwX0xDRF9MRERfMiwKKwlHUElPNjFfTENEX0xERF8zLAorCUdQSU82Ml9MQ0RfTEREXzQsCisJR1BJTzYzX0xDRF9MRERfNSwKKwlHUElPNjRfTENEX0xERF82LAorCUdQSU82NV9MQ0RfTEREXzcsCisJR1BJTzY2X0xDRF9MRERfOCwKKwlHUElPNjdfTENEX0xERF85LAorCUdQSU82OF9MQ0RfTEREXzEwLAorCUdQSU82OV9MQ0RfTEREXzExLAorCUdQSU83MF9MQ0RfTEREXzEyLAorCUdQSU83MV9MQ0RfTEREXzEzLAorCUdQSU83Ml9MQ0RfTEREXzE0LAorCUdQSU83M19MQ0RfTEREXzE1LAorCUdQSU83NF9MQ0RfRkNMSywKKwlHUElPNzVfTENEX0xDTEssCisJR1BJTzc2X0xDRF9QQ0xLLAorCUdQSU83N19MQ0RfQklBUywKKworCS8qIEkyQyAqLworCUdQSU8xMTdfSTJDX1NDTCwKKwlHUElPMTE4X0kyQ19TREEsCisKKwkvKiBTU1AxICovCisJR1BJTzIzX1NTUDFfU0NMSywKKwlHUElPMjRfU1NQMV9TRlJNLAorCUdQSU8yNV9TU1AxX1RYRCwKKwlHUElPMjZfU1NQMV9SWEQsCisKKwkvKiBTU1AyICovCisJR1BJTzE5X1NTUDJfU0NMSywKKwlHUElPMTRfU1NQMl9TRlJNLAorCUdQSU84N19TU1AyX1RYRCwKKwlHUElPODhfU1NQMl9SWEQsCisKKwkvKiBQQyBDYXJkICovCisJR1BJTzQ4X25QT0UsCisJR1BJTzQ5X25QV0UsCisJR1BJTzUwX25QSU9SLAorCUdQSU81MV9uUElPVywKKwlHUElPODVfblBDRV8xLAorCUdQSU81NF9uUENFXzIsCisJR1BJTzU1X25QUkVHLAorCUdQSU81Nl9uUFdBSVQsCisJR1BJTzU3X25JT0lTMTYsCisKKwkvKiBTRFJBTSBhbmQgbG9jYWwgYnVzICovCisJR1BJTzE1X25DU18xLAorCUdQSU83OF9uQ1NfMiwKKwlHUElPNzlfbkNTXzMsCisJR1BJTzgwX25DU180LAorCUdQSU8zM19uQ1NfNSwKKwlHUElPNDlfblBXRSwKKwlHUElPMThfUkRZLAorCisJLyogR1BJTyAqLworCUdQSU8wX0dQSU8JfCBXQUtFVVBfT05fRURHRV9CT1RILAorCUdQSU8xMDVfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTU1DL1NEIHBvd2VyICovCisJR1BJTzUzX0dQSU8sCQkJCS8qIFBDIGNhcmQgcmVzZXQgKi8KKworCS8qIE5BTkQgY29udHJvbHMgKi8KKwlHUElPMTFfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTkFORCBDRSMgKi8KKwlHUElPODlfR1BJTywJCQkJLyogTkFORCBSZWFkeS9CdXN5ICovCisKKwkvKiBpbnRlcnJ1cHRzICovCisJR1BJTzEwX0dQSU8sCS8qIERNOTAwMCBpbnRlcnJ1cHQgKi8KKwlHUElPODNfR1BJTywJLyogTU1DIGNhcmQgZGV0ZWN0ICovCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKSB8fCBkZWZpbmVkKENPTkZJR19ETTkwMDBfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXgyNzBfZG05MDAwX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQgPSBETTkwMDBfUEhZU19CQVNFLAogCQkuZW5kICAgPSBETTkwMDBfUEhZU19CQVNFICsgNCwKQEAgLTY0LDMxICsxNzYsNDUgQEAKIAl9CiB9OwogCi0vKiBmb3IgdGhlIG1vbWVudCB3ZSBsaW1pdCBvdXJzZWx2ZXMgdG8gMzJiaXQgSU8gdW50aWwgc29tZQotICogYmV0dGVyIElPIHJvdXRpbmVzIGNhbiBiZSB3cml0dGVuIGFuZCB0ZXN0ZWQKLSAqLwotc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGNteDI3MF9kbTlrX3BsYXRkYXRhID0geworc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGNteDI3MF9kbTkwMDBfcGxhdGRhdGEgPSB7CiAJLmZsYWdzCQk9IERNOTAwMF9QTEFURl8zMkJJVE9OTFksCiB9OwogCi0vKiBFdGhlcm5ldCBkZXZpY2UgKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNteDI3MF9kZXZpY2VfZG05ayA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNteDI3MF9kbTkwMDBfZGV2aWNlID0gewogCS5uYW1lCQk9ICJkbTkwMDAiLAogCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXgyNzBfZG05a19yZXNvdXJjZSksCi0JLnJlc291cmNlCT0gY214MjcwX2RtOWtfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNteDI3MF9kbTkwMDBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IGNteDI3MF9kbTkwMDBfcmVzb3VyY2UsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmNteDI3MF9kbTlrX3BsYXRkYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICZjbXgyNzBfZG05MDAwX3BsYXRkYXRhLAogCX0KIH07CiAKLS8qIHRvdWNoc2NyZWVuIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBjbXgyNzBfaW5pdF9kbTkwMDAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNteDI3MF9kbTkwMDBfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY214MjcwX2luaXRfZG05MDAwKHZvaWQpIHt9CisjZW5kaWYKKworLyogVUNCMTQwMCB0b3VjaHNjcmVlbiBjb250cm9sbGVyICovCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCkgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXgyNzBfdHNfZGV2aWNlID0gewogCS5uYW1lCQk9ICJ1Y2IxNDAwX3RzIiwKIAkuaWQJCT0gLTEsCiB9OwogCi0vKiBSVEMgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBjbXgyNzBfaW5pdF90b3VjaHNjcmVlbih2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY214MjcwX3RzX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X3RvdWNoc2NyZWVuKHZvaWQpIHt9CisjZW5kaWYKKworLyogVjMwMjAgUlRDICovCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMCkgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNteDI3MF92MzAyMF9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0ID0gUlRDX1BIWVNfQkFTRSwKQEAgLTExMSwyOCArMjM3LDY3IEBACiAJfQogfTsKIAotLyoKLSAqIENNLVgyNzAgTEVEcwotICovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXgyNzBfbGVkX2RldmljZSA9IHsKLQkubmFtZQkJPSAiY20teDI3MC1sZWQiLAotCS5pZAkJPSAtMSwKK3N0YXRpYyB2b2lkIF9faW5pdCBjbXgyNzBfaW5pdF9ydGModm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNteDI3MF9ydGNfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY214MjcwX2luaXRfcnRjKHZvaWQpIHt9CisjZW5kaWYKKworLyogQ00tWDI3MCBMRURzICovCisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0dQSU9fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjbXgyNzBfbGVkc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgPSAiY20teDI3MDpyZWQiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gIm5hbmQtZGlzayIsCisJCS5ncGlvID0gOTMsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUgPSAiY20teDI3MDpncmVlbiIsCisJCS5kZWZhdWx0X3RyaWdnZXIgPSAiaGVhcnRiZWF0IiwKKwkJLmdwaW8gPSA5NCwKKwkJLmFjdGl2ZV9sb3cgPSAxLAorCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgY214MjcwX2dwaW9fbGVkX3BkYXRhID0geworCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUoY214MjcwX2xlZHMpLAorCS5sZWRzID0gY214MjcwX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXgyNzBfbGVkX2RldmljZSA9IHsKKwkubmFtZQkJPSAibGVkcy1ncGlvIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmNteDI3MF9ncGlvX2xlZF9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNteDI3MF9pbml0X2xlZHModm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNteDI3MF9sZWRfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY214MjcwX2luaXRfbGVkcyh2b2lkKSB7fQorI2VuZGlmCisKIC8qIDI3MDBHIGdyYXBoaWNzICovCisjaWYgZGVmaW5lZChDT05GSUdfRkJfTUJYKSB8fCBkZWZpbmVkKENPTkZJR19GQl9NQlhfTU9EVUxFKQogc3RhdGljIHU2NCBmYl9kbWFfbWFzayA9IH4odTY0KTA7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY214MjcwXzI3MDBHX3Jlc291cmNlW10gPSB7CiAJLyogZnJhbWUgYnVmZmVyIG1lbW9yeSBpbmNsdWRpbmcgT0RGQiBhbmQgRXh0ZXJuYWwgU0RSQU0gKi8KIAlbMF0gPSB7Ci0JCS5zdGFydCA9IE1BUkFUSE9OX1BIWVMsCi0JCS5lbmQgICA9IE1BUkFUSE9OX1BIWVMgKyAweDAyMDAwMDAwLAorCQkuc3RhcnQgPSBQWEFfQ1MyX1BIWVMsCisJCS5lbmQgICA9IFBYQV9DUzJfUEhZUyArIDB4MDFmZmZmZmYsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJLyogTWFyYXRob24gcmVnaXN0ZXJzICovCiAJWzFdID0gewotCQkuc3RhcnQgPSBNQVJBVEhPTl9QSFlTICsgMHgwM2ZlMDAwMCwKLQkJLmVuZCAgID0gTUFSQVRIT05fUEhZUyArIDB4MDNmZmZmZmYsCisJCS5zdGFydCA9IFBYQV9DUzJfUEhZUyArIDB4MDNmZTAwMDAsCisJCS5lbmQgICA9IFBYQV9DUzJfUEhZUyArIDB4MDNmZmZmZmYsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiB9OwpAQCAtMjAwLDQzICszNjUsMTUgQEAKIAkuaWQJCT0gLTEsCiB9OwogCi1zdGF0aWMgdTY0IGF0YV9kbWFfbWFzayA9IH4odTY0KTA7CitzdGF0aWMgdm9pZCBfX2luaXQgY214MjcwX2luaXRfMjcwMEcodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNteDI3MF8yNzAwRyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0XzI3MDBHKHZvaWQpIHt9CisjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY214MjcwX2F0YSA9IHsKLQkubmFtZSA9ICJwYXRhX2NtX3gyNzAiLAotCS5pZCA9IC0xLAotCS5kZXYJCT0gewotCQkuZG1hX21hc2sJPSAmYXRhX2RtYV9tYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAotCX0sCi19OwotCi0vKiBwbGF0Zm9ybSBkZXZpY2VzICovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmNteDI3MF9kZXZpY2VfZG05aywKLQkmY214MjcwX3J0Y19kZXZpY2UsCi0JJmNteDI3MF8yNzAwRywKLQkmY214MjcwX2xlZF9kZXZpY2UsCi0JJmNteDI3MF90c19kZXZpY2UsCi0JJmNteDI3MF9hdGEsCi19OwotCi0vKiBNYXAgUENJIGNvbXBhbmlvbiBhbmQgSURFL0dlbmVyYWwgUHVycG9zZSBDUyBzdGF0aWNhbGx5ICovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGNteDI3MF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQlbMF0gPSB7IC8qIElERS9nZW5lcmFsIHB1cnBvc2Ugc3BhY2UgKi8KLQkJLnZpcnR1YWwJPSBDTVgyNzBfSURFMTA0X1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDTVgyNzBfSURFMTA0X1BIWVMpLAotCQkubGVuZ3RoCQk9IFNaXzY0TSAtIFNaXzhNLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LAotCVsxXSA9IHsgLyogUENJIGJyaWRnZSAqLwotCQkudmlydHVhbAk9IENNWDI3MF9JVDgxNTJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENNWDI3MF9JVDgxNTJfUEhZUyksCi0JCS5sZW5ndGgJCT0gU1pfNjRNLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LAotfTsKLQorI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKIC8qCiAgIERpc3BsYXkgZGVmaW5pdGlvbnMKICAga2VlcCB0aGVzZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGFsdGhvdWdoIHN5bWJvbGljIG5hbWVzIChhcwpAQCAtNDQ2LDcgKzU4MywxNiBAQAogKi8KIF9fc2V0dXAoIm1vbml0b3I9IiwgY214MjcwX3NldF9kaXNwbGF5KTsKIAorc3RhdGljIHZvaWQgX19pbml0IGNteDI3MF9pbml0X2Rpc3BsYXkodm9pZCkKK3sKKwlzZXRfcHhhX2ZiX2luZm8oY214MjcwX2Rpc3BsYXkpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbXgyNzBfaW5pdF9kaXNwbGF5KHZvaWQpIHt9CisjZW5kaWYKKwogLyogUFhBMjd4IE9IQ0kgY29udHJvbGxlciBzZXR1cCAqLworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKIHN0YXRpYyBpbnQgY214MjcwX29oY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJLyogU2V0IHRoZSBQb3dlciBDb250cm9sIFBvbGFyaXR5IExvdyAqLwpAQCAtNDYxLDM1ICs2MDcsMzcgQEAKIAkuaW5pdAkJPSBjbXgyNzBfb2hjaV9pbml0LAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IGNteDI3MF9pbml0X29oY2kodm9pZCkKK3sKKwlweGFfc2V0X29oY2lfaW5mbygmY214MjcwX29oY2lfcGxhdGZvcm1fZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X29oY2kodm9pZCkge30KKyNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfTU9EVUxFKQogc3RhdGljIGludCBjbXgyNzBfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgaXJxX2hhbmRsZXJfdCBjbXgyNzBfZGV0ZWN0X2ludCwKIAkJCSAgIHZvaWQgKmRhdGEpCiB7CiAJaW50IGVycjsKIAotCS8qCi0JICogc2V0dXAgR1BJTyBmb3IgUFhBMjd4IE1NQyBjb250cm9sbGVyCi0JICovCi0JcHhhX2dwaW9fbW9kZShHUElPMzJfTU1DQ0xLX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU8xMTJfTU1DQ01EX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU85Ml9NTUNEQVQwX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU8xMDlfTU1DREFUMV9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPMTEwX01NQ0RBVDJfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzExMV9NTUNEQVQzX01EKTsKKwllcnIgPSBncGlvX3JlcXVlc3QoR1BJTzEwNV9NTUNfUE9XRVIsICJNTUMvU0QgcG93ZXIiKTsKKwlpZiAoZXJyKSB7CisJCWRldl93YXJuKGRldiwgInBvd2VyIGdwaW8gdW5hdmFpbGFibGVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KIAotCS8qIFNCLVgyNzAgdXNlcyBHUElPMTA1IGFzIFNEIHBvd2VyIGVuYWJsZSAqLwotCXB4YV9ncGlvX21vZGUoMTA1IHwgR1BJT19PVVQpOwotCi0JLyogY2FyZCBkZXRlY3QgSVJRIG9uIEdQSU8gODMgKi8KLQlweGFfZ3Bpb19tb2RlKElSUV9UT19HUElPKENNWDI3MF9NTUNfSVJRKSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDVfTU1DX1BPV0VSLCAwKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKENNWDI3MF9NTUNfSVJRLCBjbXgyNzBfZGV0ZWN0X2ludCwKIAkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICJjbXgyNzBfbWNpX2luaXQ6IE1NQy9TRDogY2FuJ3QiCi0JCSAgICAgICAiIHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIik7CisJaWYgKGVycikgeworCQlncGlvX2ZyZWUoR1BJTzEwNV9NTUNfUE9XRVIpOworCQlkZXZfZXJyKGRldiwgImNteDI3MF9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCIKKwkJCSIgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKKwl9CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDk5LDE3ICs2NDcsMTggQEAKIAlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAogCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9uXG4iLCBfX2Z1bmNfXyk7Ci0JCUdQQ1IoMTA1KSA9IEdQSU9fYml0KDEwNSk7CisJCWRldl9kYmcoZGV2LCAicG93ZXIgb25cbiIpOworCQlncGlvX3NldF92YWx1ZShHUElPMTA1X01NQ19QT1dFUiwgMCk7CiAJfSBlbHNlIHsKLQkJR1BTUigxMDUpID0gR1BJT19iaXQoMTA1KTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvZmZcbiIsIF9fZnVuY19fKTsKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNV9NTUNfUE9XRVIsIDEpOworCQlkZXZfZGJnKGRldiwgInBvd2VyIG9mZlxuIik7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBjbXgyNzBfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCWZyZWVfaXJxKENNWDI3MF9NTUNfSVJRLCBkYXRhKTsKKwlncGlvX2ZyZWUoR1BJTzEwNV9NTUNfUE9XRVIpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNteDI3MF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKQEAgLTUxOSw2ICs2NjgsMTQgQEAKIAkuZXhpdAkJPSBjbXgyNzBfbWNpX2V4aXQsCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgY214MjcwX2luaXRfbW1jKHZvaWQpCit7CisJcHhhX3NldF9tY2lfaW5mbygmY214MjcwX21jaV9wbGF0Zm9ybV9kYXRhKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY214MjcwX2luaXRfbW1jKHZvaWQpIHt9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2xlZXBfc2F2ZV9tc2NbMTBdOwogCkBAIC01ODAsNTMgKzczNyw2MyBAQAogc3RhdGljIGludCBfX2luaXQgY214MjcwX3BtX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfUFhBMlhYX0FDOTcpIHx8IGRlZmluZWQoQ09ORklHX1NORF9QWEEyWFhfQUM5N19NT0RVTEUpCitzdGF0aWMgdm9pZCBfX2luaXQgY214MjcwX2luaXRfYWM5Nyh2b2lkKQoreworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbXgyNzBfaW5pdF9hYzk3KHZvaWQpIHt9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IGNteDI3MF9pbml0KHZvaWQpCiB7CiAJY214MjcwX3BtX2luaXQoKTsKIAotCXNldF9weGFfZmJfaW5mbyhjbXgyNzBfZGlzcGxheSk7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY214MjcwX3Bpbl9jb25maWcpKTsKIAotCS8qIHJlZ2lzdGVyIENNLVgyNzAgcGxhdGZvcm0gZGV2aWNlcyAqLwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwotCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOwotCi0JLyogc2V0IE1DSSBhbmQgT0hDSSBwbGF0Zm9ybSBwYXJhbWV0ZXJzICovCi0JcHhhX3NldF9tY2lfaW5mbygmY214MjcwX21jaV9wbGF0Zm9ybV9kYXRhKTsKLQlweGFfc2V0X29oY2lfaW5mbygmY214MjcwX29oY2lfcGxhdGZvcm1fZGF0YSk7Ci0KLQkvKiBUaGlzIGVuYWJsZXMgdGhlIFNUVUFSVCAqLwotCXB4YV9ncGlvX21vZGUoR1BJTzQ2X1NUUlhEX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU80N19TVFRYRF9NRCk7Ci0KLQkvKiBUaGlzIGVuYWJsZXMgdGhlIEJUVUFSVCAgKi8KLQlweGFfZ3Bpb19tb2RlKEdQSU80Ml9CVFJYRF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNDNfQlRUWERfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzQ0X0JUQ1RTX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU80NV9CVFJUU19NRCk7CisJY214MjcwX2luaXRfZG05MDAwKCk7CisJY214MjcwX2luaXRfcnRjKCk7CisJY214MjcwX2luaXRfZGlzcGxheSgpOworCWNteDI3MF9pbml0X21tYygpOworCWNteDI3MF9pbml0X29oY2koKTsKKwljbXgyNzBfaW5pdF9hYzk3KCk7CisJY214MjcwX2luaXRfdG91Y2hzY3JlZW4oKTsKKwljbXgyNzBfaW5pdF9sZWRzKCk7CisJY214MjcwX2luaXRfMjcwMEcoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGNteDI3MF9pbml0X2lycSh2b2lkKQogewogCXB4YTI3eF9pbml0X2lycSgpOwogCi0KLQljbXgyNzBfcGNpX2luaXRfaXJxKCk7Ci0KLQkvKiBTZXR1cCBpbnRlcnJ1cHQgZm9yIGRtOTAwMCAqLwotCXB4YV9ncGlvX21vZGUoSVJRX1RPX0dQSU8oQ01YMjcwX0VUSElSUSkpOwotCXNldF9pcnFfdHlwZShDTVgyNzBfRVRISVJRLCBJUlFUX1JJU0lORyk7Ci0KLQkvKiBTZXR1cCBpbnRlcnJ1cHQgZm9yIDI3MDBHICovCi0JcHhhX2dwaW9fbW9kZShJUlFfVE9fR1BJTyhDTVgyNzBfR0ZYSVJRKSk7Ci0Jc2V0X2lycV90eXBlKENNWDI3MF9HRlhJUlEsIElSUVRfRkFMTElORyk7CisJY214MjcwX3BjaV9pbml0X2lycShHUElPMjJfSVQ4MTUyX0lSUSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUENJCisvKiBNYXAgUENJIGNvbXBhbmlvbiBzdGF0aWNhbGx5ICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGNteDI3MF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7IC8qIFBDSSBicmlkZ2UgKi8KKwkJLnZpcnR1YWwJPSBDTVgyNzBfSVQ4MTUyX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihQWEFfQ1M0X1BIWVMpLAorCQkubGVuZ3RoCQk9IFNaXzY0TSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBjbXgyNzBfbWFwX2lvKHZvaWQpCiB7CiAJcHhhX21hcF9pbygpOwogCWlvdGFibGVfaW5pdChjbXgyNzBfaW9fZGVzYywgQVJSQVlfU0laRShjbXgyNzBfaW9fZGVzYykpOwotfQogCisJaXQ4MTUyX2Jhc2VfYWRkcmVzcyA9IENNWDI3MF9JVDgxNTJfVklSVDsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgY214MjcwX21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKK30KKyNlbmRpZgogCiBNQUNISU5FX1NUQVJUKEFSTUNPUkUsICJDb21wdWxhYiBDTS14MjcwIikKIAkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKaW5kZXggYjM3NjcxYi4uZTU4NTA0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCkBAIC00NjUsNiArNDY1LDcgQEAKIAkJR1BTUihDT1JHSV9HUElPX0lSX09OKSA9IEdQSU9fYml0KENPUkdJX0dQSU9fSVJfT04pOwogCWVsc2UKIAkJR1BDUihDT1JHSV9HUElPX0lSX09OKSA9IEdQSU9fYml0KENPUkdJX0dQSU9fSVJfT04pOworCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGNvcmdpX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYwppbmRleCBhNmYyMzkwLi44NDQ4OWRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCkBAIC0xMyw4ICsxMywxMCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL21mcC1weGEyN3guaD4KICNpbmNsdWRlIDxhc20vYXJjaC9vaGNpLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMjd4X2tleXBhZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jYW1lcmEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdWRpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTN4eF9uYW5kLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpAQCAtODMwLDQgKzgzMiw2MyBAQAogCXB4YV9yZWdpc3Rlcl9kZXZpY2UoJnB4YTN4eF9kZXZpY2VfbWNpMywgaW5mbyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhM3h4X3Jlc291cmNlc19uYW5kW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDQzMTAwMDAwLAorCQkuZW5kCT0gMHg0MzEwMDA1MywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9OQU5ELAorCQkuZW5kCT0gSVJRX05BTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkvKiBEUkNNUiBmb3IgRGF0YSBETUEgKi8KKwkJLnN0YXJ0CT0gOTcsCisJCS5lbmQJPSA5NywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbM10gPSB7CisJCS8qIERSQ01SIGZvciBDb21tYW5kIERNQSAqLworCQkuc3RhcnQJPSA5OSwKKwkJLmVuZAk9IDk5LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBweGEzeHhfbmFuZF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9uYW5kID0geworCS5uYW1lCQk9ICJweGEzeHgtbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmcHhhM3h4X25hbmRfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhM3h4X3Jlc291cmNlc19uYW5kKSwKKwkucmVzb3VyY2UJPSBweGEzeHhfcmVzb3VyY2VzX25hbmQsCit9OworCit2b2lkIF9faW5pdCBweGEzeHhfc2V0X25hbmRfaW5mbyhzdHJ1Y3QgcHhhM3h4X25hbmRfcGxhdGZvcm1fZGF0YSAqaW5mbykKK3sKKwlweGFfcmVnaXN0ZXJfZGV2aWNlKCZweGEzeHhfZGV2aWNlX25hbmQsIGluZm8pOworfQogI2VuZGlmIC8qIENPTkZJR19QWEEzeHggKi8KKworLyogcHhhMnh4LXNwaSBwbGF0Zm9ybS1kZXZpY2UgSUQgZXF1YWxzIHJlc3BlY3RpdmUgU1NQIHBsYXRmb3JtLWRldmljZSBJRCArIDEuCisgKiBTZWUgY29tbWVudCBpbiBhcmNoL2FybS9tYWNoLXB4YS9zc3AuYzo6c3NwX3Byb2JlKCkgKi8KK3ZvaWQgX19pbml0IHB4YTJ4eF9zZXRfc3BpX2luZm8odW5zaWduZWQgaWQsIHN0cnVjdCBweGEyeHhfc3BpX21hc3RlciAqaW5mbykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZDsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJweGEyeHgtc3BpIiwgaWQpOworCWlmIChwZCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAicHhhMnh4LXNwaTogZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBpZCAlZFxuIiwKKwkJICAgICAgIGlkKTsKKwkJcmV0dXJuOworCX0KKworCXBkLT5kZXYucGxhdGZvcm1fZGF0YSA9IGluZm87CisJcGxhdGZvcm1fZGV2aWNlX2FkZChwZCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKaW5kZXggYjg1MmViMS4uODg3YzczOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaApAQCAtMzEsNCArMzEsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhMjd4X2RldmljZV9wd20wOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhMjd4X2RldmljZV9wd20xOwogCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEzeHhfZGV2aWNlX25hbmQ7CisKIHZvaWQgX19pbml0IHB4YV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U0MDBfbGNkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNDAwX2xjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzAyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lNDAwX2xjZC5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBlNDAwX2xjZC5jCisgKgorICogKGMpIDIwMDUgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIGU0MDBfcHhhZmJfbW9kZV9pbmZvID0geworCS5waXhjbG9jayAgICAgICA9IDE0MDcwMywKKwkueHJlcyAgICAgICAgICAgPSAyNDAsCisJLnlyZXMgICAgICAgICAgID0gMzIwLAorCS5icHAgICAgICAgICAgICA9IDE2LAorCS5oc3luY19sZW4gICAgICA9IDQsCisJLmxlZnRfbWFyZ2luICAgID0gMjgsCisJLnJpZ2h0X21hcmdpbiAgID0gOCwKKwkudnN5bmNfbGVuICAgICAgPSAzLAorCS51cHBlcl9tYXJnaW4gICA9IDUsCisJLmxvd2VyX21hcmdpbiAgID0gNiwKKwkuc3luYyAgICAgICAgICAgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gZTQwMF9weGFmYl9tYWNoX2luZm8gPSB7CisJLm1vZGVzICAgICAgICAgID0gJmU0MDBfcHhhZmJfbW9kZV9pbmZvLAorCS5udW1fbW9kZXMgICAgICA9IDEsCisJLmxjY3IwICAgICAgICAgID0gTENDUjBfQ29sb3IgfCBMQ0NSMF9TbmdsIHwgTENDUjBfQWN0LAorCS5sY2NyMyAgICAgICAgICA9IDAsCisJLnB4YWZiX2JhY2tsaWdodF9wb3dlciAgPSBOVUxMLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZTQwMF9sY2RfaW5pdCh2b2lkKQoreworCWlmICghbWFjaGluZV9pc19lNDAwKCkpCisJCXJldHVybiAtRU5PREVWOworCisJc2V0X3B4YV9mYl9pbmZvKCZlNDAwX3B4YWZiX21hY2hfaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KGU0MDBfbGNkX2luaXQpOworCitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJlNDAwIGxjZCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEx2MiIpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwX2xjZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MF9sY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmJkNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MF9sY2QuYwpAQCAtMCwwICsxLDEyMyBAQAorLyogZTc0MF9sY2QuYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMQ0QgdGltaW5ncyBhbmQgZnVuY3Rpb25zCisgKiB0byBjb250cm9sIHRoZSBMQ0QgcG93ZXIgLyBmcm9udGxpZ2h0aW5nIHZpYSB0aGUgdzEwMGZiIGRyaXZlci4KKyAqCisgKiAoYykgMjAwNSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgorCisvKgorKipwb3RlbnRpYWwqKiBzaHV0ZG93biByb3V0aW5lIC0gdG8gYmUgaW52ZXN0aWdhdGVkCitkZXZtZW0yIDB4MGMwMTA1MjggdyAweGZmM2ZmZjAwCitkZXZtZW0yIDB4MGMwMTAxOTAgdyAweDdGRkY4MDAwCitkZXZtZW0yIDB4MGMwMTAxYjAgdyAweDAwRkYwMDAwCitkZXZtZW0yIDB4MGMwMTAwOGMgdyAweDAwMDAwMDAwCitkZXZtZW0yIDB4MGMwMTAwODAgdyAweDAwMDAwMGJmCitkZXZtZW0yIDB4MGMwMTAwOTggdyAweDAwMDAwMDE1CitkZXZtZW0yIDB4MGMwMTAwODggdyAweDRiMDAwMjA0CitkZXZtZW0yIDB4MGMwMTAwOTggdyAweDAwMDAwMDFkCisqLworCitzdGF0aWMgc3RydWN0IHcxMDBfZ2VuX3JlZ3MgZTc0MF9sY2RfcmVncyA9IHsKKwkubGNkX2Zvcm1hdCA9ICAgICAgICAgICAgMHgwMDAwODAyMywKKwkubGNkZF9jbnRsMSA9ICAgICAgICAgICAgMHgwZjAwMDAwMCwKKwkubGNkZF9jbnRsMiA9ICAgICAgICAgICAgMHgwMDAzZmZmZiwKKwkuZ2VubGNkX2NudGwxID0gICAgICAgICAgMHgwMGZmZmYwMywKKwkuZ2VubGNkX2NudGwyID0gICAgICAgICAgMHgwMDNjMGYwMywKKwkuZ2VubGNkX2NudGwzID0gICAgICAgICAgMHgwMDAxNDNhYSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9tb2RlIGU3NDBfbGNkX21vZGUgPSB7CisJLnhyZXMgICAgICAgICAgICA9IDI0MCwKKwkueXJlcyAgICAgICAgICAgID0gMzIwLAorCS5sZWZ0X21hcmdpbiAgICAgPSAyMCwKKwkucmlnaHRfbWFyZ2luICAgID0gMjgsCisJLnVwcGVyX21hcmdpbiAgICA9IDksCisJLmxvd2VyX21hcmdpbiAgICA9IDgsCisJLmNydGNfc3MgICAgICAgICA9IDB4ODAxNDAwMTMsCisJLmNydGNfbHMgICAgICAgICA9IDB4ODExNTAxMTAsCisJLmNydGNfZ3MgICAgICAgICA9IDB4ODAwNTAwMDUsCisJLmNydGNfdnBvc19ncyAgICA9IDB4MDAwYTAwMDksCisJLmNydGNfcmV2ICAgICAgICA9IDB4MDA0MDAxMGEsCisJLmNydGNfZGNsayAgICAgICA9IDB4YTkwNjAwMGEsCisJLmNydGNfZ2NsayAgICAgICA9IDB4ODAwNTAxMDgsCisJLmNydGNfZ29lICAgICAgICA9IDB4ODAwNTAxMDgsCisJLnBsbF9mcmVxICAgICAgICA9IDU3LAorCS5waXhjbGtfZGl2aWRlciAgICAgICAgID0gNCwKKwkucGl4Y2xrX2RpdmlkZXJfcm90YXRlZCA9IDQsCisJLnBpeGNsa19zcmMgICAgID0gQ0xLX1NSQ19YVEFMLAorCS5zeXNjbGtfZGl2aWRlciAgPSAxLAorCS5zeXNjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAorCS5jcnRjX3BzMV9hY3RpdmUgPSAgICAgICAweDQxMDYwMDEwLAorfTsKKworCitzdGF0aWMgc3RydWN0IHcxMDBfZ3Bpb19yZWdzIGU3NDBfdzEwMF9ncGlvX2luZm8gPSB7CisJLmluaXRfZGF0YTEgPSAweDIxMDAyMTAzLAorCS5ncGlvX2RpcjEgID0gMHhmZmZmZGVmZiwKKwkuZ3Bpb19vZTEgICA9IDB4MDNjMDA2NDMsCisJLmluaXRfZGF0YTIgPSAweDAwM2YwMDNmLAorCS5ncGlvX2RpcjIgID0gMHhmZmZmZmZmZiwKKwkuZ3Bpb19vZTIgICA9IDB4MDAwMDAwZmYsCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBmYl9tYWNoX2luZm8gZTc0MF9mYl9pbmZvID0geworCS5tb2RlbGlzdCAgID0gJmU3NDBfbGNkX21vZGUsCisJLm51bV9tb2RlcyAgPSAxLAorCS5yZWdzICAgICAgID0gJmU3NDBfbGNkX3JlZ3MsCisJLmdwaW8gICAgICAgPSAmZTc0MF93MTAwX2dwaW9faW5mbywKKwkueHRhbF9mcmVxID0gMTQzMTgwMDAsCisJLnh0YWxfZGJsICAgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlNzQwX2ZiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICAgICAgICAgID0gMHgwYzAwMDAwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgwY2ZmZmZmZiwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRldmljZSBkZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlNzQwX2ZiX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAidzEwMGZiIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZlNzQwX2ZiX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGU3NDBfZmJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSBlNzQwX2ZiX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbnQgZTc0MF9sY2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfZTc0MCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmU3NDBfZmJfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZTc0MF9sY2RfaW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIklhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImU3NDAgbGNkIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwX2xjZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MF9sY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWVkYzNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MF9sY2QuYwpAQCAtMCwwICsxLDEwOSBAQAorLyogZTc1MF9sY2QuYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMQ0QgdGltaW5ncyBhbmQgZnVuY3Rpb25zCisgKiB0byBjb250cm9sIHRoZSBMQ0QgcG93ZXIgLyBmcm9udGxpZ2h0aW5nIHZpYSB0aGUgdzEwMGZiIGRyaXZlci4KKyAqCisgKiAoYykgMjAwNSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgorCitzdGF0aWMgc3RydWN0IHcxMDBfZ2VuX3JlZ3MgZTc1MF9sY2RfcmVncyA9IHsKKwkubGNkX2Zvcm1hdCA9ICAgICAgICAgICAgMHgwMDAwODAwMywKKwkubGNkZF9jbnRsMSA9ICAgICAgICAgICAgMHgwMDAwMDAwMCwKKwkubGNkZF9jbnRsMiA9ICAgICAgICAgICAgMHgwMDAzZmZmZiwKKwkuZ2VubGNkX2NudGwxID0gICAgICAgICAgMHgwMGZmZjAwMywKKwkuZ2VubGNkX2NudGwyID0gICAgICAgICAgMHgwMDNjMGYwMywKKwkuZ2VubGNkX2NudGwzID0gICAgICAgICAgMHgwMDAxNDNhYSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9tb2RlIGU3NTBfbGNkX21vZGUgPSB7CisJLnhyZXMgICAgICAgICAgICA9IDI0MCwKKwkueXJlcyAgICAgICAgICAgID0gMzIwLAorCS5sZWZ0X21hcmdpbiAgICAgPSAyMSwKKwkucmlnaHRfbWFyZ2luICAgID0gMjIsCisJLnVwcGVyX21hcmdpbiAgICA9IDUsCisJLmxvd2VyX21hcmdpbiAgICA9IDQsCisJLmNydGNfc3MgICAgICAgICA9IDB4ODAxNTAwMTQsCisJLmNydGNfbHMgICAgICAgICA9IDB4ODAxNDAwMGQsCisJLmNydGNfZ3MgICAgICAgICA9IDB4YzEwMDAwMDUsCisJLmNydGNfdnBvc19ncyAgICA9IDB4MDAwMjAxNDcsCisJLmNydGNfcmV2ICAgICAgICA9IDB4MDA0MDAxMGEsCisJLmNydGNfZGNsayAgICAgICA9IDB4YTE3MDAwMzAsCisJLmNydGNfZ2NsayAgICAgICA9IDB4ODBjYzAwMTUsCisJLmNydGNfZ29lICAgICAgICA9IDB4ODBjYzAwMTUsCisJLmNydGNfcHMxX2FjdGl2ZSA9IDB4NjEwNjAwMTcsCisJLnBsbF9mcmVxICAgICAgICA9IDU3LAorCS5waXhjbGtfZGl2aWRlciAgICAgICAgID0gNCwKKwkucGl4Y2xrX2RpdmlkZXJfcm90YXRlZCA9IDQsCisJLnBpeGNsa19zcmMgICAgID0gQ0xLX1NSQ19YVEFMLAorCS5zeXNjbGtfZGl2aWRlciAgPSAxLAorCS5zeXNjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAorfTsKKworCitzdGF0aWMgc3RydWN0IHcxMDBfZ3Bpb19yZWdzIGU3NTBfdzEwMF9ncGlvX2luZm8gPSB7CisJLmluaXRfZGF0YTEgPSAweDAxMTkyZjFiLAorCS5ncGlvX2RpcjEgID0gMHhkNWZmZGVmZiwKKwkuZ3Bpb19vZTEgICA9IDB4MDAwMDIwYmYsCisJLmluaXRfZGF0YTIgPSAweDAxMGYwMTBmLAorCS5ncGlvX2RpcjIgID0gMHhmZmZmZmZmZiwKKwkuZ3Bpb19vZTIgICA9IDB4MDAwMDAxY2YsCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBmYl9tYWNoX2luZm8gZTc1MF9mYl9pbmZvID0geworCS5tb2RlbGlzdCAgID0gJmU3NTBfbGNkX21vZGUsCisJLm51bV9tb2RlcyAgPSAxLAorCS5yZWdzICAgICAgID0gJmU3NTBfbGNkX3JlZ3MsCisJLmdwaW8gICAgICAgPSAmZTc1MF93MTAwX2dwaW9faW5mbywKKwkueHRhbF9mcmVxICA9IDE0MzE4MDAwLAorCS54dGFsX2RibCAgID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZTc1MF9mYl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgICAgICAgICA9IDB4MGMwMDAwMDAsCisJCS5lbmQgICAgICAgICAgICA9IDB4MGNmZmZmZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZXZpY2UgZGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTc1MF9mYl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIncxMDBmYiIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmZTc1MF9mYl9pbmZvLAorCX0sCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShlNzUwX2ZiX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gZTc1MF9mYl9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW50IGU3NTBfbGNkX2luaXQodm9pZCkKK3sKKwlpZiAoIW1hY2hpbmVfaXNfZTc1MCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmU3NTBfZmJfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZTc1MF9sY2RfaW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIklhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImU3NTAgbGNkIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lODAwX2xjZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTgwMF9sY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFlYWIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTgwMF9sY2QuYwpAQCAtMCwwICsxLDE1OSBAQAorLyogZTgwMF9sY2QuYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMQ0QgdGltaW5ncyBhbmQgZnVuY3Rpb25zCisgKiB0byBjb250cm9sIHRoZSBMQ0QgcG93ZXIgLyBmcm9udGxpZ2h0aW5nIHZpYSB0aGUgdzEwMGZiIGRyaXZlci4KKyAqCisgKiAoYykgMjAwNSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgorCitzdGF0aWMgc3RydWN0IHcxMDBfZ2VuX3JlZ3MgZTgwMF9sY2RfcmVncyA9IHsKKwkubGNkX2Zvcm1hdCA9ICAgICAgICAgICAgMHgwMDAwODAwMywKKwkubGNkZF9jbnRsMSA9ICAgICAgICAgICAgMHgwMmEwMDAwMCwKKwkubGNkZF9jbnRsMiA9ICAgICAgICAgICAgMHgwMDAzZmZmZiwKKwkuZ2VubGNkX2NudGwxID0gICAgICAgICAgMHgwMDBmZjJhMywKKwkuZ2VubGNkX2NudGwyID0gICAgICAgICAgMHgwMDAwMDJhMywKKwkuZ2VubGNkX2NudGwzID0gICAgICAgICAgMHgwMDAxMDJhYSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9tb2RlIGU4MDBfbGNkX21vZGVbMl0gPSB7CisJWzBdID0geworCQkueHJlcyAgICAgICAgICAgID0gNDgwLAorCQkueXJlcyAgICAgICAgICAgID0gNjQwLAorCQkubGVmdF9tYXJnaW4gICAgID0gNTIsCisJCS5yaWdodF9tYXJnaW4gICAgPSAxNDgsCisJCS51cHBlcl9tYXJnaW4gICAgPSAyLAorCQkubG93ZXJfbWFyZ2luICAgID0gNiwKKwkJLmNydGNfc3MgICAgICAgICA9IDB4ODAzNTAwMzQsCisJCS5jcnRjX2xzICAgICAgICAgPSAweDgwMmIwMDI2LAorCQkuY3J0Y19ncyAgICAgICAgID0gMHg4MDE2MDAxNiwKKwkJLmNydGNfdnBvc19ncyAgICA9IDB4MDAwMjAwMDMsCisJCS5jcnRjX3JldiAgICAgICAgPSAweDAwNDAwMDFkLAorCQkuY3J0Y19kY2xrICAgICAgID0gMHhlMDAwMDAwMCwKKwkJLmNydGNfZ2NsayAgICAgICA9IDB4ODJhNTAwNDksCisJCS5jcnRjX2dvZSAgICAgICAgPSAweDgwZWUwMDFjLAorCQkuY3J0Y19wczFfYWN0aXZlID0gMHgwMDAwMDAwMCwKKwkJLnBsbF9mcmVxICAgICAgICA9IDEyOCwKKwkJLnBpeGNsa19kaXZpZGVyICAgICAgICAgPSA0LAorCQkucGl4Y2xrX2RpdmlkZXJfcm90YXRlZCA9IDYsCisJCS5waXhjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAorCQkuc3lzY2xrX2RpdmlkZXIgID0gMCwKKwkJLnN5c2Nsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCisJfSwKKwlbMV0gPSB7CisJCS54cmVzICAgICAgICAgICAgPSAyNDAsCisJCS55cmVzICAgICAgICAgICAgPSAzMjAsCisJCS5sZWZ0X21hcmdpbiAgICAgPSAxNSwKKwkJLnJpZ2h0X21hcmdpbiAgICA9IDg4LAorCQkudXBwZXJfbWFyZ2luICAgID0gMCwKKwkJLmxvd2VyX21hcmdpbiAgICA9IDcsCisJCS5jcnRjX3NzICAgICAgICAgPSAweGQwMTAwMDBmLAorCQkuY3J0Y19scyAgICAgICAgID0gMHg4MDA3MDAwMywKKwkJLmNydGNfZ3MgICAgICAgICA9IDB4ODAwMDAwMDAsCisJCS5jcnRjX3Zwb3NfZ3MgICAgPSAweDAxNDYwMTQ3LAorCQkuY3J0Y19yZXYgICAgICAgID0gMHgwMDQwMDAwMywKKwkJLmNydGNfZGNsayAgICAgICA9IDB4YTE3MDAwMzAsCisJCS5jcnRjX2djbGsgICAgICAgPSAweDgxNGIwMDA4LAorCQkuY3J0Y19nb2UgICAgICAgID0gMHg4MGNjMDAxNSwKKwkJLmNydGNfcHMxX2FjdGl2ZSA9IDB4MDAwMDAwMDAsCisJCS5wbGxfZnJlcSAgICAgICAgPSAxMDAsCisJCS5waXhjbGtfZGl2aWRlciAgICAgICAgID0gNiwgLyogV2luY2UgdXNlcyAxNCB3aGljaCBnaXZlcyBhIDdNSHogcGNsay4gKi8KKwkJLnBpeGNsa19kaXZpZGVyX3JvdGF0ZWQgPSA2LCAvKiB3ZSB3YW50IGEgMTRNSHogb25lIChtdWNoIG5pY2VyIHRvIGxvb2sgYXQpICovCisJCS5waXhjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAorCQkuc3lzY2xrX2RpdmlkZXIgID0gMCwKKwkJLnN5c2Nsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCisJfQorfTsKKworCitzdGF0aWMgc3RydWN0IHcxMDBfZ3Bpb19yZWdzIGU4MDBfdzEwMF9ncGlvX2luZm8gPSB7CisJLmluaXRfZGF0YTEgPSAweGMxM2ZjMDE5LAorCS5ncGlvX2RpcjEgID0gMHgzZTQwZGY3ZiwKKwkuZ3Bpb19vZTEgICA9IDB4MDAzYzMwMDAsCisJLmluaXRfZGF0YTIgPSAweDAwMDAwMDAwLAorCS5ncGlvX2RpcjIgID0gMHgwMDAwMDAwMCwKKwkuZ3Bpb19vZTIgICA9IDB4MDAwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBfbWVtX2luZm8gZTgwMF93MTAwX21lbV9pbmZvID0geworCS5leHRfY250bCAgICAgICAgPSAweDA5NjQwMDExLAorCS5zZHJhbV9tb2RlX3JlZyAgPSAweDAwNjAwMDIxLAorCS5leHRfdGltaW5nX2NudGwgPSAweDEwMDAxNTQ1LAorCS5pb19jbnRsICAgICAgICAgPSAweDdkZGQ3MzMzLAorCS5zaXplICAgICAgICAgICAgPSAweDFmZmZmZiwKK307CisKK3N0YXRpYyB2b2lkIGU4MDBfdGdfY2hhbmdlKHN0cnVjdCB3MTAwZmJfcGFyICpwYXIpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwl0bXAgPSB3MTAwZmJfZ3Bpb19yZWFkKFcxMDBfR1BJT19QT1JUX0EpOworCWlmIChwYXItPm1vZGUtPnhyZXMgPT0gNDgwKQorCQl0bXAgfD0gMHgxMDA7CisJZWxzZQorCQl0bXAgJj0gfjB4MTAwOworCXcxMDBmYl9ncGlvX3dyaXRlKFcxMDBfR1BJT19QT1JUX0EsIHRtcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF90Z19pbmZvIGU4MDBfdGdfaW5mbyA9IHsKKwkuY2hhbmdlID0gZTgwMF90Z19jaGFuZ2UsCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBmYl9tYWNoX2luZm8gZTgwMF9mYl9pbmZvID0geworCS5tb2RlbGlzdCAgID0gZTgwMF9sY2RfbW9kZSwKKwkubnVtX21vZGVzICA9IDIsCisJLnJlZ3MgICAgICAgPSAmZTgwMF9sY2RfcmVncywKKwkuZ3BpbyAgICAgICA9ICZlODAwX3cxMDBfZ3Bpb19pbmZvLAorCS5tZW0gICAgICAgID0gJmU4MDBfdzEwMF9tZW1faW5mbywKKwkudGcgICAgICAgICA9ICZlODAwX3RnX2luZm8sCisJLnh0YWxfZnJlcSAgPSAxNjAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZTgwMF9mYl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgICAgICAgICA9IDB4MGMwMDAwMDAsCisJCS5lbmQgICAgICAgICAgICA9IDB4MGNmZmZmZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZXZpY2UgZGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTgwMF9mYl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIncxMDBmYiIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmZTgwMF9mYl9pbmZvLAorCX0sCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShlODAwX2ZiX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gZTgwMF9mYl9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW50IGU4MDBfbGNkX2luaXQodm9pZCkKK3sKKwlpZiAoIW1hY2hpbmVfaXNfZTgwMCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmU4MDBfZmJfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZTgwMF9sY2RfaW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIklhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImU4MDAgbGNkIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKaW5kZXggMWJmNjgwNy4uZTVjYzZjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBTdXBwb3J0IGZvciBDb21wdUxhYiBFTS14MjcwIHBsYXRmb3JtCisgKiBTdXBwb3J0IGZvciBDb21wdUxhYiBFTS1YMjcwIHBsYXRmb3JtCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3IENvbXB1TGFiLCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQ29tcHVMYWIsIEx0ZC4KICAqIEF1dGhvcjogTWlrZSBSYXBvcG9ydCA8bWlrZUBjb21wdWxhYi5jby5pbD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTQsMzEgKzE0LDE1OSBAQAogCiAjaW5jbHVkZSA8bGludXgvZG05MDAwLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLXYzMDIwLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLXB4YTI3eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEyN3gtdWRjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9iaXRmaWVsZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTI3eF9rZXlwYWQuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogLyogR1BJTyBJUlEgdXNhZ2UgKi8KLSNkZWZpbmUgRU1fWDI3MF9NTUNfUEQJCSgxMDUpCi0jZGVmaW5lIEVNX1gyNzBfRVRISVJRCQlJUlFfR1BJTyg0MSkKLSNkZWZpbmUgRU1fWDI3MF9NTUNfSVJRCQlJUlFfR1BJTygxMykKKyNkZWZpbmUgR1BJTzQxX0VUSElSUQkJKDQxKQorI2RlZmluZSBHUElPMTNfTU1DX0NECQkoMTMpCisjZGVmaW5lIEVNX1gyNzBfRVRISVJRCQlJUlFfR1BJTyhHUElPNDFfRVRISVJRKQorI2RlZmluZSBFTV9YMjcwX01NQ19DRAkJSVJRX0dQSU8oR1BJTzEzX01NQ19DRCkKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlbV94MjcwX2RtOWtfcmVzb3VyY2VbXSA9IHsKKy8qIE5BTkQgY29udHJvbCBHUElPcyAqLworI2RlZmluZSBHUElPMTFfTkFORF9DUwkoMTEpCisjZGVmaW5lIEdQSU81Nl9OQU5EX1JCCSg1NikKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZW1feDI3MF9waW5fY29uZmlnW10gPSB7CisJLyogQUMnOTcgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKKwlHUElPOThfQUM5N19TWVNDTEssCisJR1BJTzExM19BQzk3X25SRVNFVCwKKworCS8qIEJUVUFSVCAqLworCUdQSU80Ml9CVFVBUlRfUlhELAorCUdQSU80M19CVFVBUlRfVFhELAorCUdQSU80NF9CVFVBUlRfQ1RTLAorCUdQSU80NV9CVFVBUlRfUlRTLAorCisJLyogU1RVQVJUICovCisJR1BJTzQ2X1NUVUFSVF9SWEQsCisJR1BJTzQ3X1NUVUFSVF9UWEQsCisKKwkvKiBNQ0kgY29udHJvbGxlciAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU8xMTJfTU1DX0NNRCwKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCisJLyogTENEICovCisJR1BJTzU4X0xDRF9MRERfMCwKKwlHUElPNTlfTENEX0xERF8xLAorCUdQSU82MF9MQ0RfTEREXzIsCisJR1BJTzYxX0xDRF9MRERfMywKKwlHUElPNjJfTENEX0xERF80LAorCUdQSU82M19MQ0RfTEREXzUsCisJR1BJTzY0X0xDRF9MRERfNiwKKwlHUElPNjVfTENEX0xERF83LAorCUdQSU82Nl9MQ0RfTEREXzgsCisJR1BJTzY3X0xDRF9MRERfOSwKKwlHUElPNjhfTENEX0xERF8xMCwKKwlHUElPNjlfTENEX0xERF8xMSwKKwlHUElPNzBfTENEX0xERF8xMiwKKwlHUElPNzFfTENEX0xERF8xMywKKwlHUElPNzJfTENEX0xERF8xNCwKKwlHUElPNzNfTENEX0xERF8xNSwKKwlHUElPNzRfTENEX0ZDTEssCisJR1BJTzc1X0xDRF9MQ0xLLAorCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPNzdfTENEX0JJQVMsCisKKwkvKiBRQ0kgKi8KKwlHUElPODRfQ0lGX0ZWLAorCUdQSU8yNV9DSUZfTFYsCisJR1BJTzUzX0NJRl9NQ0xLLAorCUdQSU81NF9DSUZfUENMSywKKwlHUElPODFfQ0lGX0REXzAsCisJR1BJTzU1X0NJRl9ERF8xLAorCUdQSU81MV9DSUZfRERfMiwKKwlHUElPNTBfQ0lGX0REXzMsCisJR1BJTzUyX0NJRl9ERF80LAorCUdQSU80OF9DSUZfRERfNSwKKwlHUElPMTdfQ0lGX0REXzYsCisJR1BJTzEyX0NJRl9ERF83LAorCisJLyogSTJDICovCisJR1BJTzExN19JMkNfU0NMLAorCUdQSU8xMThfSTJDX1NEQSwKKworCS8qIEtleXBhZCAqLworCUdQSU8xMDBfS1BfTUtJTl8wCXwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwMV9LUF9NS0lOXzEJfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPMTAyX0tQX01LSU5fMgl8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU8zNF9LUF9NS0lOXzMJfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPMzlfS1BfTUtJTl80CXwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzk5X0tQX01LSU5fNQl8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU85MV9LUF9NS0lOXzYJfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPMzZfS1BfTUtJTl83CXwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwM19LUF9NS09VVF8wLAorCUdQSU8xMDRfS1BfTUtPVVRfMSwKKwlHUElPMTA1X0tQX01LT1VUXzIsCisJR1BJTzEwNl9LUF9NS09VVF8zLAorCUdQSU8xMDdfS1BfTUtPVVRfNCwKKwlHUElPMTA4X0tQX01LT1VUXzUsCisJR1BJTzk2X0tQX01LT1VUXzYsCisJR1BJTzIyX0tQX01LT1VUXzcsCisKKwkvKiBTU1AxICovCisJR1BJTzI2X1NTUDFfUlhELAorCUdQSU8yM19TU1AxX1NDTEssCisJR1BJTzI0X1NTUDFfU0ZSTSwKKwlHUElPNTdfU1NQMV9UWEQsCisKKwkvKiBTU1AyICovCisJR1BJTzE5X1NTUDJfU0NMSywKKwlHUElPMTRfU1NQMl9TRlJNLAorCUdQSU84OV9TU1AyX1RYRCwKKwlHUElPODhfU1NQMl9SWEQsCisKKwkvKiBTRFJBTSBhbmQgbG9jYWwgYnVzICovCisJR1BJTzE1X25DU18xLAorCUdQSU83OF9uQ1NfMiwKKwlHUElPNzlfbkNTXzMsCisJR1BJTzgwX25DU180LAorCUdQSU80OV9uUFdFLAorCUdQSU8xOF9SRFksCisKKwkvKiBHUElPICovCisJR1BJTzFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCisKKwkvKiBwb3dlciBjb250cm9scyAqLworCUdQSU8yMF9HUElPCXwgTUZQX0xQTV9EUklWRV9MT1csCS8qIEdQUlNfUFdFTiAqLworCUdQSU8xMTVfR1BJTwl8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBXTEFOX1BXRU4gKi8KKworCS8qIE5BTkQgY29udHJvbHMgKi8KKwlHUElPMTFfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTkFORCBDRSMgKi8KKwlHUElPNTZfR1BJTywJCQkJLyogTkFORCBSZWFkeS9CdXN5ICovCisKKwkvKiBpbnRlcnJ1cHRzICovCisJR1BJTzEzX0dQSU8sCS8qIE1NQyBjYXJkIGRldGVjdCAqLworCUdQSU80MV9HUElPLAkvKiBETTkwMDAgaW50ZXJydXB0ICovCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKSB8fCBkZWZpbmVkKENPTkZJR19ETTkwMDBfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlbV94MjcwX2RtOTAwMF9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0ID0gUFhBX0NTMl9QSFlTLAogCQkuZW5kICAgPSBQWEFfQ1MyX1BIWVMgKyAzLApAQCAtNTYsMzIgKzE4NCwzMCBAQAogCX0KIH07CiAKLS8qIGZvciB0aGUgbW9tZW50IHdlIGxpbWl0IG91cnNlbHZlcyB0byAzMmJpdCBJTyB1bnRpbCBzb21lCi0gKiBiZXR0ZXIgSU8gcm91dGluZXMgY2FuIGJlIHdyaXR0ZW4gYW5kIHRlc3RlZAotICovCi1zdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgZW1feDI3MF9kbTlrX3BsYXRkYXRhID0geworc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGVtX3gyNzBfZG05MDAwX3BsYXRkYXRhID0gewogCS5mbGFncwkJPSBETTkwMDBfUExBVEZfMzJCSVRPTkxZLAogfTsKIAotLyogRXRoZXJuZXQgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlbV94MjcwX2RtOWsgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlbV94MjcwX2RtOTAwMCA9IHsKIAkubmFtZQkJPSAiZG05MDAwIiwKIAkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZW1feDI3MF9kbTlrX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJPSBlbV94MjcwX2RtOWtfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGVtX3gyNzBfZG05MDAwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBlbV94MjcwX2RtOTAwMF9yZXNvdXJjZSwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZW1feDI3MF9kbTlrX3BsYXRkYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICZlbV94MjcwX2RtOTAwMF9wbGF0ZGF0YSwKIAl9CiB9OwogCi0vKiBXTTk3MTIgdG91Y2hzY3JlZW4gY29udHJvbGxlci4gSG9wZWZ1bGx5IHRoZSBkcml2ZXIgd2lsbCBtYWtlIGl0IHRvCi0gKiB0aGUgbWFpbnN0cmVhbSBzb21ldGltZSAqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZW1feDI3MF90cyA9IHsKLQkubmFtZQkJPSAid205N3h4LXRzIiwKLQkuaWQJCT0gLTEsCi19Oworc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9kbTkwMDAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVtX3gyNzBfZG05MDAwKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X2RtOTAwMCh2b2lkKSB7fQorI2VuZGlmCiAKLS8qIFJUQyAqLworLyogVjMwMjAgUlRDICovCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMCkgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVtX3gyNzBfdjMwMjBfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCA9IFBYQV9DUzRfUEhZUywKQEAgLTEwNCwyMCArMjMwLDI2IEBACiAJfQogfTsKIAotLyogTkFORCBmbGFzaCAqLwotI2RlZmluZSBHUElPX05BTkRfQ1MJKDExKQotI2RlZmluZSBHUElPX05BTkRfUkIJKDU2KQorc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9ydGModm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVtX3gyNzBfcnRjKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X3J0Yyh2b2lkKSB7fQorI2VuZGlmCiAKKy8qIE5BTkQgZmxhc2ggKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QTEFURk9STSkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUExBVEZPUk1fTU9EVUxFKQogc3RhdGljIGlubGluZSB2b2lkIG5hbmRfY3Nfb24odm9pZCkKIHsKLQlHUENSKEdQSU9fTkFORF9DUykgPSBHUElPX2JpdChHUElPX05BTkRfQ1MpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMV9OQU5EX0NTLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgbmFuZF9jc19vZmYodm9pZCkKIHsKIAlkc2IoKTsKIAotCUdQU1IoR1BJT19OQU5EX0NTKSA9IEdQSU9fYml0KEdQSU9fTkFORF9DUyk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJTzExX05BTkRfQ1MsIDEpOwogfQogCiAvKiBoYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcyAqLwpAQCAtMTU3LDcgKzI4OSw3IEBACiB7CiAJZHNiKCk7CiAKLQlyZXR1cm4gR1BMUihHUElPX05BTkRfUkIpICYgR1BJT19iaXQoR1BJT19OQU5EX1JCKTsKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJTzU2X05BTkRfUkIpOwogfQogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZW1feDI3MF9wYXJ0aXRpb25faW5mb1tdID0gewpAQCAtMjEwLDE2ICszNDIsMzUgQEAKIAl9CiB9OwogCi0vKiBwbGF0Zm9ybSBkZXZpY2VzICovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmVtX3gyNzBfZG05aywKLQkmZW1feDI3MF90cywKLQkmZW1feDI3MF9ydGMsCi0JJmVtX3gyNzBfbmFuZCwKLX07CitzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X25hbmQodm9pZCkKK3sKKwlpbnQgZXJyOwogCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU8xMV9OQU5EX0NTLCAiTkFORCBDUyIpOworCWlmIChlcnIpIHsKKwkJcHJfd2FybmluZygiRU0tWDI3MDogZmFpbGVkIHRvIHJlcXVlc3QgTkFORCBDUyBncGlvXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPMTFfTkFORF9DUywgMSk7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoR1BJTzU2X05BTkRfUkIsICJOQU5EIFIvQiIpOworCWlmIChlcnIpIHsKKwkJcHJfd2FybmluZygiRU0tWDI3MDogZmFpbGVkIHRvIHJlcXVlc3QgTkFORCBSL0IgZ3Bpb1xuIik7CisJCWdwaW9fZnJlZShHUElPMTFfTkFORF9DUyk7CisJCXJldHVybjsKKwl9CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPNTZfTkFORF9SQik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVtX3gyNzBfbmFuZCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9uYW5kKHZvaWQpIHt9CisjZW5kaWYKIAogLyogUFhBMjd4IE9IQ0kgY29udHJvbGxlciBzZXR1cCAqLworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKIHN0YXRpYyBpbnQgZW1feDI3MF9vaGNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCS8qIFNldCB0aGUgUG93ZXIgQ29udHJvbCBQb2xhcml0eSBMb3cgKi8KQEAgLTIzNywyNyArMzg4LDIzIEBACiAJLmluaXQJCT0gZW1feDI3MF9vaGNpX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X29oY2kodm9pZCkKK3sKKwlweGFfc2V0X29oY2lfaW5mbygmZW1feDI3MF9vaGNpX3BsYXRmb3JtX2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfb2hjaSh2b2lkKSB7fQorI2VuZGlmCiAKKy8qIE1DSSBjb250cm9sbGVyIHNldHVwICovCisjaWYgZGVmaW5lZChDT05GSUdfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfTU9EVUxFKQogc3RhdGljIGludCBlbV94MjcwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICBpcnFfaGFuZGxlcl90IGVtX3gyNzBfZGV0ZWN0X2ludCwKIAkJCSAgICB2b2lkICpkYXRhKQogewotCWludCBlcnI7Ci0KLQkvKiBzZXR1cCBHUElPIGZvciBQWEEyN3ggTU1DIGNvbnRyb2xsZXIgKi8KLQlweGFfZ3Bpb19tb2RlKEdQSU8zMl9NTUNDTEtfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzExMl9NTUNDTURfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzkyX01NQ0RBVDBfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzEwOV9NTUNEQVQxX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU8xMTBfTU1DREFUMl9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPMTExX01NQ0RBVDNfTUQpOwotCi0JLyogRU0tWDI3MCB1c2VzIEdQSU8xMyBhcyBTRCBwb3dlciBlbmFibGUgKi8KLQlweGFfZ3Bpb19tb2RlKEVNX1gyNzBfTU1DX1BEIHwgR1BJT19PVVQpOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoRU1fWDI3MF9NTUNfSVJRLCBlbV94MjcwX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWludCBlcnIgPSByZXF1ZXN0X2lycShFTV9YMjcwX01NQ19DRCwgZW1feDI3MF9kZXRlY3RfaW50LAorCQkJICAgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJICAgICAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJROiAlZFxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBlcnIpOwpAQCAtMjc5LDcgKzQyNiw4IEBACiAKIHN0YXRpYyB2b2lkIGVtX3gyNzBfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCWZyZWVfaXJxKEVNX1gyNzBfTU1DX0lSUSwgZGF0YSk7CisJaW50IGlycSA9IGdwaW9fdG9faXJxKEdQSU8xM19NTUNfQ0QpOworCWZyZWVfaXJxKGlycSwgZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKQEAgLTI4OSw3ICs0MzcsMTYgQEAKIAkuZXhpdAkJPSBlbV94MjcwX21jaV9leGl0LAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9tbWModm9pZCkKK3sKKwlweGFfc2V0X21jaV9pbmZvKCZlbV94MjcwX21jaV9wbGF0Zm9ybV9kYXRhKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X21tYyh2b2lkKSB7fQorI2VuZGlmCisKIC8qIExDRCA0ODB4NjQwICovCisjaWYgZGVmaW5lZChDT05GSUdfRkJfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19GQl9QWEFfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gZW1feDI3MF9sY2RfbW9kZSA9IHsKIAkucGl4Y2xvY2sJPSA1MDAwMCwKIAkuYnBwCQk9IDE2LApAQCAtMzA3LDQwICs0NjQsOTYgQEAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIGVtX3gyNzBfbGNkID0gewogCS5tb2RlcwkJPSAmZW1feDI3MF9sY2RfbW9kZSwKIAkubnVtX21vZGVzCT0gMSwKLQkuY21hcF9pbnZlcnNlCT0gMCwKLQkuY21hcF9zdGF0aWMJPSAwLAotCS5sY2NyMAkJPSBMQ0NSMF9QQVMsCi0JLmxjY3IzCQk9IExDQ1IzX1BpeENsa0RpdigweDAxKSB8IExDQ1IzX0FjYigweGZmKSwKKwkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQLAogfTsKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfbGNkKHZvaWQpCit7CisJc2V0X3B4YV9mYl9pbmZvKCZlbV94MjcwX2xjZCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9sY2Qodm9pZCkge30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU05EX1BYQTJYWF9BQzk3KSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUFhBMlhYX0FDOTdfTU9EVUxFKQorc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9hYzk3KHZvaWQpCit7CisJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9hYzk3KHZvaWQpIHt9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4X01PRFVMRSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZW1feDI3MF9tYXRyaXhfa2V5c1tdID0geworCUtFWSgwLCAwLCBLRVlfQSksIEtFWSgxLCAwLCBLRVlfVVApLCBLRVkoMiwgMSwgS0VZX0IpLAorCUtFWSgwLCAyLCBLRVlfTEVGVCksIEtFWSgxLCAxLCBLRVlfRU5URVIpLCBLRVkoMiwgMCwgS0VZX1JJR0hUKSwKKwlLRVkoMCwgMSwgS0VZX0MpLCBLRVkoMSwgMiwgS0VZX0RPV04pLCBLRVkoMiwgMiwgS0VZX0QpLAorfTsKKworc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBlbV94MjcwX2tleXBhZF9pbmZvID0geworCS8qIGNvZGUgbWFwIGZvciB0aGUgbWF0cml4IGtleXMgKi8KKwkubWF0cml4X2tleV9yb3dzCT0gMywKKwkubWF0cml4X2tleV9jb2xzCT0gMywKKwkubWF0cml4X2tleV9tYXAJCT0gZW1feDI3MF9tYXRyaXhfa2V5cywKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUoZW1feDI3MF9tYXRyaXhfa2V5cyksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X2tleXBhZCh2b2lkKQoreworCXB4YV9zZXRfa2V5cGFkX2luZm8oJmVtX3gyNzBfa2V5cGFkX2luZm8pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfa2V5cGFkKHZvaWQpIHt9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGdwaW9fa2V5c19idXR0b25bXSA9IHsKKwlbMF0gPSB7CisJCS5kZXNjCT0gInNsZWVwL3dha2V1cCIsCisJCS5jb2RlCT0gS0VZX1NVU1BFTkQsCisJCS50eXBlCT0gRVZfUFdSLAorCQkuZ3Bpbwk9IDEsCisJCS53YWtldXAJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfZ3Bpb19rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBncGlvX2tleXNfYnV0dG9uLAorCS5uYnV0dG9ucwk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlbV94MjcwX2dwaW9fa2V5cyA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVtX3gyNzBfZ3Bpb19rZXlzX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfZ3Bpb19rZXlzKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlbV94MjcwX2dwaW9fa2V5cyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9ncGlvX2tleXModm9pZCkge30KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0KHZvaWQpCiB7Ci0JLyogc2V0dXAgTENEICovCi0Jc2V0X3B4YV9mYl9pbmZvKCZlbV94MjcwX2xjZCk7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZW1feDI3MF9waW5fY29uZmlnKSk7CiAKLQkvKiByZWdpc3RlciBFTS1YMjcwIHBsYXRmb3JtIGRldmljZXMgKi8KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLQlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKLQotCS8qIHNldCBNQ0kgYW5kIE9IQ0kgcGxhdGZvcm0gcGFyYW1ldGVycyAqLwotCXB4YV9zZXRfbWNpX2luZm8oJmVtX3gyNzBfbWNpX3BsYXRmb3JtX2RhdGEpOwotCXB4YV9zZXRfb2hjaV9pbmZvKCZlbV94MjcwX29oY2lfcGxhdGZvcm1fZGF0YSk7Ci0KLQkvKiBzZXR1cCBTVFVBUlQgR1BJT3MgKi8KLQlweGFfZ3Bpb19tb2RlKEdQSU80Nl9TVFJYRF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNDdfU1RUWERfTUQpOwotCi0JLyogc2V0dXAgQlRVQVJUIEdQSU9zICovCi0JcHhhX2dwaW9fbW9kZShHUElPNDJfQlRSWERfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzQzX0JUVFhEX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU80NF9CVENUU19NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNDVfQlRSVFNfTUQpOwotCi0JLyogU2V0dXAgaW50ZXJydXB0IGZvciBkbTkwMDAgKi8KLQlzZXRfaXJxX3R5cGUoRU1fWDI3MF9FVEhJUlEsIElSUVRfUklTSU5HKTsKKwllbV94MjcwX2luaXRfZG05MDAwKCk7CisJZW1feDI3MF9pbml0X3J0YygpOworCWVtX3gyNzBfaW5pdF9uYW5kKCk7CisJZW1feDI3MF9pbml0X2xjZCgpOworCWVtX3gyNzBfaW5pdF9tbWMoKTsKKwllbV94MjcwX2luaXRfb2hjaSgpOworCWVtX3gyNzBfaW5pdF9rZXlwYWQoKTsKKwllbV94MjcwX2luaXRfZ3Bpb19rZXlzKCk7CisJZW1feDI3MF9pbml0X2FjOTcoKTsKIH0KIAotTUFDSElORV9TVEFSVChFTV9YMjcwLCAiQ29tcHVsYWIgRU0teDI3MCIpCitNQUNISU5FX1NUQVJUKEVNX1gyNzAsICJDb21wdWxhYiBFTS1YMjcwIikKIAkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAogCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwppbmRleCBlZTBhZTkzLi5jMjliN2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8Z2VuZXJpYy5oPgorI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogLyogT25seSBlODAwIGhhcyAxMjhNQiBSQU0gKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBlc2VyaWVzX2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MsCkBAIC00Nyw2ICs0NywxOSBAQAogTUFDSElORV9FTkQKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01BQ0hfRTM1MAorTUFDSElORV9TVEFSVChFMzUwLCAiVG9zaGliYSBlMzUwIikKKwkvKiBNYWludGFpbmVyOiBJYW4gTW9sdG9uIChzcHlyb0BmMnMuY29tKSAqLworCS5waHlzX2lvICAgICAgICA9IDB4NDAwMDAwMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IHB4YTI1eF9pbml0X2lycSwKKwkuZml4dXAgICAgICAgICAgPSBlc2VyaWVzX2ZpeHVwLAorCS50aW1lciA9ICZweGFfdGltZXIsCitNQUNISU5FX0VORAorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTUFDSF9FNzQwCiBNQUNISU5FX1NUQVJUKEU3NDAsICJUb3NoaWJhIGU3NDAiKQogICAgICAgICAvKiBNYWludGFpbmVyOiBJYW4gTW9sdG9uIChzcHlyb0BmMnMuY29tKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllc191ZGMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXNfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyODQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXNfdWRjLmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFVEQyBmdW5jdGlvbnMgZm9yIHRoZSBUb3NoaWJhIGUtc2VyaWVzIFBEQXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIElhbiBNb2x0b24gMjAwMworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvdWRjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZXNlcmllcy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KKworLyogbG9jYWwgUFhBIGdlbmVyaWMgY29kZSAqLworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBlN3h4X3VkY19tYWNoX2luZm8gPSB7CisJLmdwaW9fdmJ1cyAgID0gR1BJT19FN1hYX1VTQl9ESVNDLAorCS5ncGlvX3B1bGx1cCA9IEdQSU9fRTdYWF9VU0JfUFVMTFVQLAorCS5ncGlvX3B1bGx1cF9pbnZlcnRlZCA9IDEKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gZTgwMF91ZGNfbWFjaF9pbmZvID0geworCS5ncGlvX3ZidXMgICA9IEdQSU9fRTgwMF9VU0JfRElTQywKKwkuZ3Bpb19wdWxsdXAgPSBHUElPX0U4MDBfVVNCX1BVTExVUCwKKwkuZ3Bpb19wdWxsdXBfaW52ZXJ0ZWQgPSAxCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlc2VyaWVzX3VkY19pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfZTMzMCgpIHx8IG1hY2hpbmVfaXNfZTM1MCgpIHx8CisJICAgIG1hY2hpbmVfaXNfZTc0MCgpIHx8IG1hY2hpbmVfaXNfZTc1MCgpIHx8CisJICAgIG1hY2hpbmVfaXNfZTQwMCgpKQorCQlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOworCWVsc2UgaWYgKG1hY2hpbmVfaXNfZTgwMCgpKQorCQlweGFfc2V0X3VkY19pbmZvKCZlODAwX3VkY19tYWNoX2luZm8pOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KGVzZXJpZXNfdWRjX2luaXQpOworCitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJlc2VyaWVzIFVEQyBzdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMdjIiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2V6eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZXp4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0M2VlZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2V6eC5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogIGV6eC5jIC0gQ29tbW9uIGNvZGUgZm9yIHRoZSBFWlggcGxhdGZvcm0uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVuZXp4Lm9yZz4sCisgKgkJICAyMDA3LTIwMDggRGFuaWVsIFJpYmVpcm8gPGRyd3lybUBnbWFpbC5jb20+LAorICoJCSAgMjAwNy0yMDA4IFN0ZWZhbiBTY2htaWR0IDxzdGVmYW5AZGF0ZW5mcmVpaGFmZW4ub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pMmMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3B3bV9iYWNrbGlnaHRfZGF0YSBlenhfYmFja2xpZ2h0X2RhdGEgPSB7CisJLnB3bV9pZAkJPSAwLAorCS5tYXhfYnJpZ2h0bmVzcwk9IDEwMjMsCisJLmRmdF9icmlnaHRuZXNzCT0gMTAyMywKKwkucHdtX3BlcmlvZF9ucwk9IDc4NzcwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXp4X2JhY2tsaWdodF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB3bS1iYWNrbGlnaHQiLAorCS5kZXYJCT0geworCQkucGFyZW50CT0gJnB4YTI3eF9kZXZpY2VfcHdtMC5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmV6eF9iYWNrbGlnaHRfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gbW9kZV9lenhfb2xkID0geworCS5waXhjbG9jawkJPSAxNTAwMDAsCisJLnhyZXMJCQk9IDI0MCwKKwkueXJlcwkJCT0gMzIwLAorCS5icHAJCQk9IDE2LAorCS5oc3luY19sZW4JCT0gMTAsCisJLmxlZnRfbWFyZ2luCQk9IDIwLAorCS5yaWdodF9tYXJnaW4JCT0gMTAsCisJLnZzeW5jX2xlbgkJPSAyLAorCS51cHBlcl9tYXJnaW4JCT0gMywKKwkubG93ZXJfbWFyZ2luCQk9IDIsCisJLnN5bmMJCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBlenhfZmJfaW5mb18xID0geworCS5tb2RlcwkJPSAmbW9kZV9lenhfb2xkLAorCS5udW1fbW9kZXMJPSAxLAorCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMTZCUFAsCit9OworCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBtb2RlXzcycjg5ODAzeTAxID0geworCS5waXhjbG9jawkJPSAxOTIzMDgsCisJLnhyZXMJCQk9IDI0MCwKKwkueXJlcwkJCT0gMzIwLAorCS5icHAJCQk9IDMyLAorCS5kZXB0aAkJCT0gMTgsCisJLmhzeW5jX2xlbgkJPSAxMCwKKwkubGVmdF9tYXJnaW4JCT0gMjAsCisJLnJpZ2h0X21hcmdpbgkJPSAxMCwKKwkudnN5bmNfbGVuCQk9IDIsCisJLnVwcGVyX21hcmdpbgkJPSAzLAorCS5sb3dlcl9tYXJnaW4JCT0gMiwKKwkuc3luYwkJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIGV6eF9mYl9pbmZvXzIgPSB7CisJLm1vZGVzCQk9ICZtb2RlXzcycjg5ODAzeTAxLAorCS5udW1fbW9kZXMJPSAxLAorCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMThCUFAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmV6eF9iYWNrbGlnaHRfZGV2aWNlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXp4X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIFBXTSBiYWNrbGlnaHQgKi8KKwlHUElPMTZfUFdNMF9PVVQsCisKKwkvKiBCVFVBUlQgKi8KKwlHUElPNDJfQlRVQVJUX1JYRCwKKwlHUElPNDNfQlRVQVJUX1RYRCwKKwlHUElPNDRfQlRVQVJUX0NUUywKKwlHUElPNDVfQlRVQVJUX1JUUywKKworCS8qIFNUVUFSVCAqLworCUdQSU80Nl9TVFVBUlRfUlhELAorCUdQSU80N19TVFVBUlRfVFhELAorCisJLyogRm9yIEE3ODAgc3VwcG9ydCAoY29ubmVjdGVkIHdpdGggTmVwdHVuZSBHU00gY2hpcCkgKi8KKwlHUElPMzBfVVNCX1AzXzIsCS8qIElDTF9UWEVOQiAqLworCUdQSU8zMV9VU0JfUDNfNiwJLyogSUNMX1ZQT1VUICovCisJR1BJTzkwX1VTQl9QM181LAkvKiBJQ0xfVlBJTiAqLworCUdQSU85MV9VU0JfUDNfMSwJLyogSUNMX1hSWEQgKi8KKwlHUElPNTZfVVNCX1AzXzQsCS8qIElDTF9WTU9VVCAqLworCUdQSU8xMTNfVVNCX1AzXzMsCS8qIC9JQ0xfVk1JTiAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IGV6eF9pbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZXp4X3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X2kyY19pbmZvKE5VTEwpOworCWlmIChtYWNoaW5lX2lzX2V6eF9hNzgwKCkgfHwgbWFjaGluZV9pc19lenhfZTY4MCgpKQorCQlzZXRfcHhhX2ZiX2luZm8oJmV6eF9mYl9pbmZvXzEpOworCWVsc2UKKwkJc2V0X3B4YV9mYl9pbmZvKCZlenhfZmJfaW5mb18yKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZXp4X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MsIHN0cnVjdCB0YWcgKnRhZ3MsCisJCWNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCit7CisJLyogV2UgaGF2ZSB0d28gcmFtIGNoaXBzLiBGaXJzdCBvbmUgd2l0aCAzMk1CIGF0IDB4QTAwMDAwMDAgYW5kIGEgc2Vjb25kCisJICogMTZNQiBvbmUgYXQgMHhBQzAwMDAwMAorCSAqLworCW1pLT5ucl9iYW5rcyA9IDI7CisJbWktPmJhbmtbMF0uc3RhcnQgPSAweGEwMDAwMDAwOworCW1pLT5iYW5rWzBdLm5vZGUgPSAwOworCW1pLT5iYW5rWzBdLnNpemUgPSAoMzIqMTAyNCoxMDI0KTsKKwltaS0+YmFua1sxXS5zdGFydCA9IDB4YWMwMDAwMDA7CisJbWktPmJhbmtbMV0ubm9kZSA9IDE7CisJbWktPmJhbmtbMV0uc2l6ZSA9ICgxNioxMDI0KjEwMjQpOworfQorCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0E3ODAKK01BQ0hJTkVfU1RBUlQoRVpYX0E3ODAsICJNb3Rvcm9sYSBFWlggQTc4MCIpCisJLnBoeXNfaW8gICAgICAgID0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuZml4dXAJCQk9IGV6eF9maXh1cCwKKwkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZSAgID0gJmV6eF9pbml0LAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0U2ODAKK01BQ0hJTkVfU1RBUlQoRVpYX0U2ODAsICJNb3Rvcm9sYSBFWlggRTY4MCIpCisJLnBoeXNfaW8gICAgICAgID0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuZml4dXAJCQk9IGV6eF9maXh1cCwKKwkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZSAgID0gJmV6eF9pbml0LAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0ExMjAwCitNQUNISU5FX1NUQVJUKEVaWF9BMTIwMCwgIk1vdG9yb2xhIEVaWCBBMTIwMCIpCisJLnBoeXNfaW8gICAgICAgID0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuZml4dXAJCQk9IGV6eF9maXh1cCwKKwkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZSAgID0gJmV6eF9pbml0LAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0E5MTAKK01BQ0hJTkVfU1RBUlQoRVpYX0E5MTAsICJNb3Rvcm9sYSBFWlggQTkxMCIpCisJLnBoeXNfaW8gICAgICAgID0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuZml4dXAJCQk9IGV6eF9maXh1cCwKKwkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZSAgID0gJmV6eF9pbml0LAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0U2CitNQUNISU5FX1NUQVJUKEVaWF9FNiwgIk1vdG9yb2xhIEVaWCBFNiIpCisJLnBoeXNfaW8gICAgICAgID0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuZml4dXAJCQk9IGV6eF9maXh1cCwKKwkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZSAgID0gJmV6eF9pbml0LAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0UyCitNQUNISU5FX1NUQVJUKEVaWF9FMiwgIk1vdG9yb2xhIEVaWCBFMiIpCisJLnBoeXNfaW8gICAgICAgID0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuZml4dXAJCQk9IGV6eF9maXh1cCwKKwkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZSAgID0gJmV6eF9pbml0LAorTUFDSElORV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwppbmRleCA1MzA2NTQ0Li5kZDc1OWQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3NzcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTI3eF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEzeHhfbmFuZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2xpdHRsZXRvbi5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpAQCAtMTAxLDE4ICsxMDMsMjYgQEAKIAlbMV0gPSB7CiAJCS5zdGFydAk9IElSUV9HUElPKG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzkwKSksCiAJCS5lbmQJPSBJUlFfR1BJTyhtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU85MCkpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgbGl0dGxldG9uX3NtYzkxeF9pbmZvID0geworCS5mbGFncwk9IFNNQzkxWF9VU0VfOEJJVCB8IFNNQzkxWF9VU0VfMTZCSVQgfAorCQkgIFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfVVNFX0RNQSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNtYzkxeCIsCiAJLmlkCQk9IDAsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmxpdHRsZXRvbl9zbWM5MXhfaW5mbywKKwl9LAogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRVMpCisjaWYgZGVmaW5lZChDT05GSUdfRkJfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19GQl9QWEFfTU9EVUxFKQogLyogdXNlIGJpdCAzMCwgMzEgYXMgdGhlIGluZGljYXRvciBvZiBjb21tYW5kIHBhcmFtZXRlciBudW1iZXIgKi8KICNkZWZpbmUgQ01EMCh4KQkJKCgweDAwMDAwMDAwKSB8ICgoeCkgPDwgOSkpCiAjZGVmaW5lIENNRDEoeCwgeDEpCSgoMHg0MDAwMDAwMCkgfCAoKHgpIDw8IDkpIHwgMHgxMDAgfCAoeDEpKQpAQCAtMzExLDkgKzMyMSw5IEBACiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGxpdHRsZXRvbl9pbml0X2xjZCh2b2lkKSB7fTsKLSNlbmRpZiAvKiBDT05GSUdfRkJfUFhBIHx8IENPTkZJR19GQl9QWEFfTU9EVUxFUyAqLworI2VuZGlmIC8qIENPTkZJR19GQl9QWEEgfHwgQ09ORklHX0ZCX1BYQV9NT0RVTEUgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4X01PRFVMRVMpCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFKQogc3RhdGljIHVuc2lnbmVkIGludCBsaXR0bGV0b25fbWF0cml4X2tleV9tYXBbXSA9IHsKIAkvKiBLRVkocm93LCBjb2wsIGtleV9jb2RlKSAqLwogCUtFWSgxLCAzLCBLRVlfMCksIEtFWSgwLCAwLCBLRVlfMSksIEtFWSgxLCAwLCBLRVlfMiksIEtFWSgyLCAwLCBLRVlfMyksCkBAIC0zNjEsNiArMzcxLDU3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbGl0dGxldG9uX2luaXRfa2V5cGFkKHZvaWQpIHt9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUFhBM3h4X01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBsaXR0bGV0b25fbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJWzBdID0geworCQkubmFtZSAgICAgICAgPSAiQm9vdGxvYWRlciIsCisJCS5vZmZzZXQgICAgICA9IDAsCisJCS5zaXplICAgICAgICA9IDB4MDYwMDAwLAorCQkubWFza19mbGFncyAgPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUgICAgICAgID0gIktlcm5lbCIsCisJCS5vZmZzZXQgICAgICA9IDB4MDYwMDAwLAorCQkuc2l6ZSAgICAgICAgPSAweDIwMDAwMCwKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lICAgICAgICA9ICJGaWxlc3lzdGVtIiwKKwkJLm9mZnNldCAgICAgID0gMHgwMjYwMDAwLAorCQkuc2l6ZSAgICAgICAgPSAweDMwMDAwMDAsICAgICAvKiA0OE0gLSByb290ZnMgKi8KKwl9LAorCVszXSA9IHsKKwkJLm5hbWUgICAgICAgID0gIk1hc3NTdG9yYWdlIiwKKwkJLm9mZnNldCAgICAgID0gMHgzMjYwMDAwLAorCQkuc2l6ZSAgICAgICAgPSAweDNkNDAwMDAsCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lICAgICAgICA9ICJCQlQiLAorCQkub2Zmc2V0ICAgICAgPSAweDZGQTAwMDAsCisJCS5zaXplICAgICAgICA9IDB4ODAwMDAsCisJCS5tYXNrX2ZsYWdzICA9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCS8qIE5PVEU6IHdlIHJlc2VydmUgc29tZSBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgTkFORCBmbGFzaCBmb3IKKwkgKiBiYWQgYmxvY2sgbWFuYWdlbWVudCwgYW5kIHRoZSBtYXggbnVtYmVyIG9mIHJlbG9jYXRpb24gYmxvY2tzCisJICogZGlmZmVycyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiBQbGVhc2UgdGFrZSBjYXJlIHdpdGggaXQgd2hlbgorCSAqIGRlZmluaW5nIHRoZSBwYXJ0aXRpb24gdGFibGUuCisJICovCit9OworCitzdGF0aWMgc3RydWN0IHB4YTN4eF9uYW5kX3BsYXRmb3JtX2RhdGEgbGl0dGxldG9uX25hbmRfaW5mbyA9IHsKKwkuZW5hYmxlX2FyYml0ZXIJPSAxLAorCS5wYXJ0cwkJPSBsaXR0bGV0b25fbmFuZF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobGl0dGxldG9uX25hbmRfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbGl0dGxldG9uX2luaXRfbmFuZCh2b2lkKQoreworCXB4YTN4eF9zZXRfbmFuZF9pbmZvKCZsaXR0bGV0b25fbmFuZF9pbmZvKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbGl0dGxldG9uX2luaXRfbmFuZCh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19NVERfTkFORF9QWEEzeHggfHwgQ09ORklHX01URF9OQU5EX1BYQTN4eF9NT0RVTEUgKi8KKwogc3RhdGljIHZvaWQgX19pbml0IGxpdHRsZXRvbl9pbml0KHZvaWQpCiB7CiAJLyogaW5pdGlhbGl6ZSBNRlAgY29uZmlndXJhdGlvbnMgKi8KQEAgLTM3NCw2ICs0MzUsNyBAQAogCiAJbGl0dGxldG9uX2luaXRfbGNkKCk7CiAJbGl0dGxldG9uX2luaXRfa2V5cGFkKCk7CisJbGl0dGxldG9uX2luaXRfbmFuZCgpOwogfQogCiBNQUNISU5FX1NUQVJUKExJVFRMRVRPTiwgIk1hcnZlbGwgRm9ybSBGYWN0b3IgRGV2ZWxvcG1lbnQgUGxhdGZvcm0gKGFrYSBMaXR0bGV0b24pIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwppbmRleCBhM2ZhZTQxLi5hYzI2NDIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KQEAgLTIyNiwxNCArMjI3LDYgQEAKIAkubnVtX2NoaXBzZWxlY3QJPSAwLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhX3NzcCA9IHsKLQkubmFtZQkJPSAicHhhMnh4LXNwaSIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmcHhhX3NzcF9tYXN0ZXJfaW5mbywKLQl9LAotfTsKLQogc3RhdGljIGludCBsdWJib2NrX2Fkczc4NDZfcGVuZG93bl9zdGF0ZSh2b2lkKQogewogCS8qIFRTX0JVU1kgaXMgYml0IDggaW4gTFVCX01JU0NfUkQsIGJ1dCBwZW5kb3duIGlzIGlycS1vbmx5ICovCkBAIC0yOTIsMTEgKzI4NSwxOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBsdWJib2NrX3NtYzkxeF9pbmZvID0geworCS5mbGFncwk9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlUIHwgU01DOTFYX0lPX1NISUZUXzIsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzbWM5MXgiLAogCS5pZAkJPSAtMSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbHViYm9ja19zbWM5MXhfaW5mbywKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZXNbXSA9IHsKQEAgLTM2Nyw3ICszNjcsNiBAQAogCSZzbWM5MXhfZGV2aWNlLAogCSZsdWJib2NrX2ZsYXNoX2RldmljZVswXSwKIAkmbHViYm9ja19mbGFzaF9kZXZpY2VbMV0sCi0JJnB4YV9zc3AsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBzaGFycF9sbTh2MzFfbW9kZSA9IHsKQEAgLTQ3MSw2ICs0NzAsNyBAQAogCX0gZWxzZSBpZiAobW9kZSAmIElSX0ZJUk1PREUpIHsKIAkJTFVCX01JU0NfV1IgfD0gMSA8PCA0OwogCX0KKwlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtNTAxLDYgKzUwMSw3IEBACiAJbHViYm9ja19mbGFzaF9kYXRhW2ZsYXNoYm9vdF0ubmFtZSA9ICJib290LXJvbSI7CiAJKHZvaWQpIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCisJcHhhMnh4X3NldF9zcGlfaW5mbygxLCAmcHhhX3NzcF9tYXN0ZXJfaW5mbyk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpX2JvYXJkX2luZm8pKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKaW5kZXggMDFiMmZhNy4uYzlkMjc0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCkBAIC0xNywxNyArMTcsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvaHRjLWVncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2h0Yy1wYXNpYzMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogCi0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTQ0LDcgKzQyLDcgQEAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtYWdpY2lhbl9waW5fY29uZmlnW10gPSB7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWdpY2lhbl9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAogCS8qIFNEUkFNIGFuZCBTdGF0aWMgTWVtb3J5IEkvTyBTaWduYWxzICovCiAJR1BJTzIwX25TRENTXzIsCkBAIC0xMzQsNiArMTMyLDcgQEAKIHN0YXRpYyB2b2lkIG1hZ2ljaWFuX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQogewogCWdwaW9fc2V0X3ZhbHVlKEdQSU84M19NQUdJQ0lBTl9uSVJfRU4sIG1vZGUgJiBJUl9PRkYpOworCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIG1hZ2ljaWFuX2ZpY3BfaW5mbyA9IHsKQEAgLTM5OSw2ICszOTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiYWNrbGlnaHQgPSB7CiAJLm5hbWUgPSAicHdtLWJhY2tsaWdodCIsCisJLmlkICAgPSAtMSwKIAkuZGV2ICA9IHsKIAkJLnBhcmVudCAgICAgICAgPSAmcHhhMjd4X2RldmljZV9wd20wLmRldiwKIAkJLnBsYXRmb3JtX2RhdGEgPSAmYmFja2xpZ2h0X2RhdGEsCkBAIC01MTEsNiArNTExLDM3IEBACiAgKiBFeHRlcm5hbCBwb3dlcgogICovCiAKK3N0YXRpYyBpbnQgcG93ZXJfc3VwcGx5X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoRUdQSU9fTUFHSUNJQU5fQ0FCTEVfU1RBVEVfQUMsICJDQUJMRV9TVEFURV9BQyIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NzX2FjOworCXJldCA9IGdwaW9fcmVxdWVzdChFR1BJT19NQUdJQ0lBTl9DQUJMRV9TVEFURV9VU0IsICJDQUJMRV9TVEFURV9VU0IiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jc191c2I7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEVHUElPX01BR0lDSUFOX0NIQVJHRV9FTiwgIkNIQVJHRV9FTiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NoZ19lbjsKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJTzMwX01BR0lDSUFOX25DSEFSR0VfRU4sICJuQ0hBUkdFX0VOIik7CisJaWYgKCFyZXQpCisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPMzBfTUFHSUNJQU5fbkNIQVJHRV9FTiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbmNoZ19lbjsKKworCXJldHVybiAwOworCitlcnJfbmNoZ19lbjoKKwlncGlvX2ZyZWUoRUdQSU9fTUFHSUNJQU5fQ0hBUkdFX0VOKTsKK2Vycl9jaGdfZW46CisJZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX0NBQkxFX1NUQVRFX1VTQik7CitlcnJfY3NfdXNiOgorCWdwaW9fZnJlZShFR1BJT19NQUdJQ0lBTl9DQUJMRV9TVEFURV9BQyk7CitlcnJfY3NfYWM6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBtYWdpY2lhbl9pc19hY19vbmxpbmUodm9pZCkKIHsKIAlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fQ0FCTEVfU1RBVEVfQUMpOwpAQCAtNTI3LDE0ICs1NTgsMjQgQEAKIAlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9DSEFSR0VfRU4sIGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgcG93ZXJfc3VwcGx5X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPMzBfTUFHSUNJQU5fbkNIQVJHRV9FTik7CisJZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX0NIQVJHRV9FTik7CisJZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX0NBQkxFX1NUQVRFX1VTQik7CisJZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX0NBQkxFX1NUQVRFX0FDKTsKK30KKwogc3RhdGljIGNoYXIgKm1hZ2ljaWFuX3N1cHBsaWNhbnRzW10gPSB7CiAJImRzMjc2MC1iYXR0ZXJ5LjAiLCAiYmFja3VwLWJhdHRlcnkiCiB9OwogCiBzdGF0aWMgc3RydWN0IHBkYV9wb3dlcl9wZGF0YSBwb3dlcl9zdXBwbHlfaW5mbyA9IHsKKwkuaW5pdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2luaXQsCiAJLmlzX2FjX29ubGluZSAgICA9IG1hZ2ljaWFuX2lzX2FjX29ubGluZSwKIAkuaXNfdXNiX29ubGluZSAgID0gbWFnaWNpYW5faXNfdXNiX29ubGluZSwKIAkuc2V0X2NoYXJnZSAgICAgID0gbWFnaWNpYW5fc2V0X2NoYXJnZSwKKwkuZXhpdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2V4aXQsCiAJLnN1cHBsaWVkX3RvICAgICA9IG1hZ2ljaWFuX3N1cHBsaWNhbnRzLAogCS5udW1fc3VwcGxpY2FudHMgPSBBUlJBWV9TSVpFKG1hZ2ljaWFuX3N1cHBsaWNhbnRzKSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCmluZGV4IGYyZTllN2MuLjg1MWVjMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTExMCw5ICsxMTEsOSBAQAogCUdQSU80NV9BQzk3X1NZU0NMSywKIAogCS8qIEtleXBhZCAqLwotCUdQSU85M19LUF9ES0lOXzAJfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKLQlHUElPOTRfS1BfREtJTl8xCXwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCi0JR1BJTzk1X0tQX0RLSU5fMgl8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU85M19LUF9ES0lOXzAsCisJR1BJTzk0X0tQX0RLSU5fMSwKKwlHUElPOTVfS1BfREtJTl8yLAogCUdQSU8xMDBfS1BfTUtJTl8wCXwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCiAJR1BJTzEwMV9LUF9NS0lOXzEJfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKIAlHUElPMTAyX0tQX01LSU5fMgl8IFdBS0VVUF9PTl9MRVZFTF9ISUdILApAQCAtMjQwLDExICsyNDEsMTkgQEAKIAl9CiB9OwogCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBtYWluc3RvbmVfc21jOTF4X2luZm8gPSB7CisJLmZsYWdzCT0gU01DOTFYX1VTRV84QklUIHwgU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9VU0VfMzJCSVQgfAorCQkgIFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfVVNFX0RNQSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNtYzkxeCIsCiAJLmlkCQk9IDAsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm1haW5zdG9uZV9zbWM5MXhfaW5mbywKKwl9LAogfTsKIAogc3RhdGljIGludCBtc3RfYXVkaW9fc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgdm9pZCAqcHJpdikKQEAgLTQ1NSw2ICs0NjQsNyBAQAogCX0gZWxzZSBpZiAobW9kZSAmIElSX0ZJUk1PREUpIHsKIAkJTVNUX01TQ1dSMSB8PSBNU1RfTVNDV1IxX0lSREFfRklSOwogCX0KKwlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwogCWlmIChtb2RlICYgSVJfT0ZGKSB7CiAJCU1TVF9NU0NXUjEgPSAoTVNUX01TQ1dSMSAmIH5NU1RfTVNDV1IxX0lSREFfTUFTSykgfCBNU1RfTVNDV1IxX0lSREFfT0ZGOwogCX0gZWxzZSB7CkBAIC01MTMsNyArNTIzLDcgQEAKIAkuaW5pdAkJPSBtYWluc3RvbmVfb2hjaV9pbml0LAogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4X01PRFVMRVMpCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFKQogc3RhdGljIHVuc2lnbmVkIGludCBtYWluc3RvbmVfbWF0cml4X2tleXNbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0EpLCBLRVkoMSwgMCwgS0VZX0IpLCBLRVkoMiwgMCwgS0VZX0MpLAogCUtFWSgzLCAwLCBLRVlfRCksIEtFWSg0LCAwLCBLRVlfRSksIEtFWSg1LCAwLCBLRVlfRiksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKaW5kZXggZDFjZGI0ZS4uZmQ0NTQ1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYwpAQCAtMzksNiArMzksMjggQEAKIAogc3RhdGljIHN0cnVjdCBncGlvX2Rlc2MgZ3Bpb19kZXNjW01GUF9QSU5fR1BJTzEyNyArIDFdOwogCitzdGF0aWMgaW50IF9fbWZwX2NvbmZpZ19scG0odW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbG9uZyBscG0pCit7CisJdW5zaWduZWQgbWFzayA9IEdQSU9fYml0KGdwaW8pOworCisJLyogbG93IHBvd2VyIHN0YXRlICovCisJc3dpdGNoIChscG0pIHsKKwljYXNlIE1GUF9MUE1fRFJJVkVfSElHSDoKKwkJUEdTUihncGlvKSB8PSBtYXNrOworCQlicmVhazsKKwljYXNlIE1GUF9MUE1fRFJJVkVfTE9XOgorCQlQR1NSKGdwaW8pICY9IH5tYXNrOworCQlicmVhazsKKwljYXNlIE1GUF9MUE1fSU5QVVQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX3dhcm5pbmcoIiVzOiBpbnZhbGlkIGxvdyBwb3dlciBzdGF0ZSBmb3IgR1BJTyVkXG4iLAorCQkJCV9fZnVuY19fLCBncGlvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9fbWZwX2NvbmZpZ19ncGlvKHVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIGxvbmcgYykKIHsKIAl1bnNpZ25lZCBsb25nIGdhZnIsIG1hc2sgPSBHUElPX2JpdChncGlvKTsKQEAgLTU3LDIxICs3OSw4IEBACiAJZWxzZQogCQlHUERSKGdwaW8pICY9IH5tYXNrOwogCi0JLyogbG93IHBvd2VyIHN0YXRlICovCi0Jc3dpdGNoIChjICYgTUZQX0xQTV9TVEFURV9NQVNLKSB7Ci0JY2FzZSBNRlBfTFBNX0RSSVZFX0hJR0g6Ci0JCVBHU1IoZ3BpbykgfD0gbWFzazsKLQkJYnJlYWs7Ci0JY2FzZSBNRlBfTFBNX0RSSVZFX0xPVzoKLQkJUEdTUihncGlvKSAmPSB+bWFzazsKLQkJYnJlYWs7Ci0JY2FzZSBNRlBfTFBNX0lOUFVUOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl93YXJuaW5nKCIlczogaW52YWxpZCBsb3cgcG93ZXIgc3RhdGUgZm9yIEdQSU8lZFxuIiwKLQkJCQlfX2Z1bmNfXywgZ3Bpbyk7CisJaWYgKF9fbWZwX2NvbmZpZ19scG0oZ3BpbywgYyAmIE1GUF9MUE1fU1RBVEVfTUFTSykpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCS8qIGdpdmUgZWFybHkgd2FybmluZyBpZiBNRlBfTFBNX0NBTl9XQUtFVVAgaXMgc2V0IG9uIHRoZQogCSAqIGNvbmZpZ3VyYXRpb25zIG9mIHRob3NlIHBpbnMgbm90IGFibGUgdG8gd2FrZXVwCkBAIC05MSw2ICsxMDAsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgX19tZnBfdmFsaWRhdGUoaW50IG1mcCkKK3sKKwlpbnQgZ3BpbyA9IG1mcF90b19ncGlvKG1mcCk7CisKKwlpZiAoKG1mcCA+IE1GUF9QSU5fR1BJTzEyNykgfHwgIWdwaW9fZGVzY1tncGlvXS52YWxpZCkgeworCQlwcl93YXJuaW5nKCIlczogR1BJTyVkIGlzIGludmFsaWQgcGluXG4iLCBfX2Z1bmNfXywgZ3Bpbyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gZ3BpbzsKK30KKwogdm9pZCBweGEyeHhfbWZwX2NvbmZpZyh1bnNpZ25lZCBsb25nICptZnBfY2ZncywgaW50IG51bSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtOTksMTMgKzEyMCw5IEBACiAKIAlmb3IgKGkgPSAwLCBjID0gbWZwX2NmZ3M7IGkgPCBudW07IGkrKywgYysrKSB7CiAKLQkJZ3BpbyA9IG1mcF90b19ncGlvKE1GUF9QSU4oKmMpKTsKLQotCQlpZiAoIWdwaW9fZGVzY1tncGlvXS52YWxpZCkgewotCQkJcHJfd2FybmluZygiJXM6IEdQSU8lZCBpcyBpbnZhbGlkIHBpblxuIiwKLQkJCQlfX2Z1bmNfXywgZ3Bpbyk7CisJCWdwaW8gPSBfX21mcF92YWxpZGF0ZShNRlBfUElOKCpjKSk7CisJCWlmIChncGlvIDwgMCkKIAkJCWNvbnRpbnVlOwotCQl9CiAKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC0xMTYsNiArMTMzLDIwIEBACiAJfQogfQogCit2b2lkIHB4YTJ4eF9tZnBfc2V0X2xwbShpbnQgbWZwLCB1bnNpZ25lZCBsb25nIGxwbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBncGlvOworCisJZ3BpbyA9IF9fbWZwX3ZhbGlkYXRlKG1mcCk7CisJaWYgKGdwaW8gPCAwKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19tZnBfY29uZmlnX2xwbShncGlvLCBscG0pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwogaW50IGdwaW9fc2V0X3dha2UodW5zaWduZWQgaW50IGdwaW8sIHVuc2lnbmVkIGludCBvbikKIHsKIAlzdHJ1Y3QgZ3Bpb19kZXNjICpkOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDg2NTdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKQEAgLTAsMCArMSw0MTYgQEAKKy8qCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgUGFsbVRYCisgKgorICogQXV0aG9yOiAgICAgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB3b3JrIG9mOgorICoJCUFsZXggT3Nib3JuZSA8YXRvQG1lc2h5Lm9yZz4KKyAqCQlDcmlzdGlhbm8gUC4gPGNyaXN0aWFub3BAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICoJCUphbiBIZXJtYW4gPDJocEBzZXpuYW0uY3o+CisgKgkJTWljaGFsIEhydXNlY2t5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAoZmluZCBtb3JlIGluZm8gYXQgd3d3LmhhY2tuZGV2LmNvbSkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9hdWRpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BhbG10eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJkYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTI3eF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpbiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFsbXR4X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIE1NQyAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU85Ml9NTUNfREFUXzAsCisJR1BJTzEwOV9NTUNfREFUXzEsCisJR1BJTzExMF9NTUNfREFUXzIsCisJR1BJTzExMV9NTUNfREFUXzMsCisJR1BJTzExMl9NTUNfQ01ELAorCisJLyogQUM5NyAqLworCUdQSU8yOF9BQzk3X0JJVENMSywKKwlHUElPMjlfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKKwlHUElPMzFfQUM5N19TWU5DLAorCisJLyogSXJEQSAqLworCUdQSU80Nl9GSUNQX1JYRCwKKwlHUElPNDdfRklDUF9UWEQsCisKKwkvKiBQV00gKi8KKwlHUElPMTZfUFdNMF9PVVQsCisKKwkvKiBVU0IgKi8KKwlHUElPMTNfR1BJTywKKworCS8qIFBDTUNJQSAqLworCUdQSU80OF9uUE9FLAorCUdQSU80OV9uUFdFLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzg1X25QQ0VfMSwKKwlHUElPNTRfblBDRV8yLAorCUdQSU83OV9QU0tUU0VMLAorCUdQSU81NV9uUFJFRywKKwlHUElPNTZfblBXQUlULAorCUdQSU81N19uSU9JUzE2LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbXR4X21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBwYWxtdHhfZGV0ZWN0X2ludCwKKwkJCQl2b2lkICpkYXRhKQoreworCWludCBlcnIgPSAwOworCisJLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLworCWVyciA9IHJlcXVlc3RfaXJxKElSUV9HUElPX1BBTE1UWF9TRF9ERVRFQ1RfTiwgcGFsbXR4X2RldGVjdF9pbnQsCisJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKKwkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwgIlNEX1BPV0VSIik7CisJaWYgKGVycikKKwkJZ290byBwd3JfZXJyOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKKwlpZiAoZXJyKQorCQlnb3RvIHJvX2VycjsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworCityb19lcnI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSKTsKK3B3cl9lcnI6CisJZnJlZV9pcnEoSVJRX0dQSU9fUEFMTVRYX1NEX0RFVEVDVF9OLCBkYXRhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwYWxtdHhfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSKTsKKwlmcmVlX2lycShJUlFfR1BJT19QQUxNVFhfU0RfREVURUNUX04sIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBwYWxtdHhfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKK3sKKwlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOworfQorCitzdGF0aWMgaW50IHBhbG10eF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFkpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10eF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuc2V0cG93ZXIJPSBwYWxtdHhfbWNpX3Bvd2VyLAorCS5nZXRfcm8JCT0gcGFsbXR4X21jaV9nZXRfcm8sCisJLmluaXQgCQk9IHBhbG10eF9tY2lfaW5pdCwKKwkuZXhpdAkJPSBwYWxtdHhfbWNpX2V4aXQsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleWJvYXJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGludCBwYWxtdHhfbWF0cml4X2tleXNbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX1BPV0VSKSwKKwlLRVkoMCwgMSwgS0VZX0YxKSwKKwlLRVkoMCwgMiwgS0VZX0VOVEVSKSwKKworCUtFWSgxLCAwLCBLRVlfRjIpLAorCUtFWSgxLCAxLCBLRVlfRjMpLAorCUtFWSgxLCAyLCBLRVlfRjQpLAorCisJS0VZKDIsIDAsIEtFWV9VUCksCisJS0VZKDIsIDIsIEtFWV9ET1dOKSwKKworCUtFWSgzLCAwLCBLRVlfUklHSFQpLAorCUtFWSgzLCAyLCBLRVlfTEVGVCksCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHBhbG10eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWF0cml4X2tleV9yb3dzCT0gNCwKKwkubWF0cml4X2tleV9jb2xzCT0gMywKKwkubWF0cml4X2tleV9tYXAJCT0gcGFsbXR4X21hdHJpeF9rZXlzLAorCS5tYXRyaXhfa2V5X21hcF9zaXplCT0gQVJSQVlfU0laRShwYWxtdHhfbWF0cml4X2tleXMpLAorCisJLmRlYm91bmNlX2ludGVydmFsCT0gMzAsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcGFsbXR4X3B4YV9idXR0b25zW10gPSB7CisJe0tFWV9GOCwgR1BJT19OUl9QQUxNVFhfSE9UU1lOQ19CVVRUT05fTiwgMSwgIkhvdFN5bmMgQnV0dG9uIiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBwYWxtdHhfcHhhX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHBhbG10eF9weGFfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHBhbG10eF9weGFfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdHhfcHhhX2tleXMgPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwYWxtdHhfcHhhX2tleXNfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQmFja2xpZ2h0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtdHhfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfQkxfUE9XRVIsICJCTCBQT1dFUiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9MQ0RfUE9XRVIsICJMQ0QgUE9XRVIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwlyZXR1cm4gMDsKK2VycjI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX0JMX1BPV0VSKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhbG10eF9iYWNrbGlnaHRfbm90aWZ5KGludCBicmlnaHRuZXNzKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UWF9MQ0RfUE9XRVIsIGJyaWdodG5lc3MpOworCXJldHVybiBicmlnaHRuZXNzOworfQorCitzdGF0aWMgdm9pZCBwYWxtdHhfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9CTF9QT1dFUik7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX0xDRF9QT1dFUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHBhbG10eF9iYWNrbGlnaHRfZGF0YSA9IHsKKwkucHdtX2lkCQk9IDAsCisJLm1heF9icmlnaHRuZXNzCT0gUEFMTVRYX01BWF9JTlRFTlNJVFksCisJLmRmdF9icmlnaHRuZXNzCT0gUEFMTVRYX01BWF9JTlRFTlNJVFksCisJLnB3bV9wZXJpb2RfbnMJPSBQQUxNVFhfUEVSSU9EX05TLAorCS5pbml0CQk9IHBhbG10eF9iYWNrbGlnaHRfaW5pdCwKKwkubm90aWZ5CQk9IHBhbG10eF9iYWNrbGlnaHRfbm90aWZ5LAorCS5leGl0CQk9IHBhbG10eF9iYWNrbGlnaHRfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10eF9iYWNrbGlnaHQgPSB7CisJLm5hbWUJPSAicHdtLWJhY2tsaWdodCIsCisJLmRldgk9IHsKKwkJLnBhcmVudAkJPSAmcHhhMjd4X2RldmljZV9wd20wLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbXR4X2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJckRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgcGFsbXR4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOworCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10eF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbXR4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVEQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHBhbG10eF91ZGNfY29tbWFuZChpbnQgY21kKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX1VTQl9QT1dFUiwgIWNtZCk7CisJdWRlbGF5KDUwKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UWF9VU0JfUFVMTFVQLCAhY21kKTsKK30KKworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBwYWxtdHhfdWRjX2luZm8gX19pbml0ZGF0YSA9IHsKKwkuZ3Bpb192YnVzCQk9IEdQSU9fTlJfUEFMTVRYX1VTQl9ERVRFQ1RfTiwKKwkuZ3Bpb192YnVzX2ludmVydGVkCT0gMSwKKwkudWRjX2NvbW1hbmQJCT0gcGFsbXR4X3VkY19jb21tYW5kLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUG93ZXIgc3VwcGx5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwb3dlcl9zdXBwbHlfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9QT1dFUl9ERVRFQ1QsICJDQUJMRV9TVEFURV9BQyIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NzX2FjOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX1VTQl9ERVRFQ1RfTiwgIkNBQkxFX1NUQVRFX1VTQiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NzX3VzYjsKKworCXJldHVybiAwOworCitlcnJfY3NfdXNiOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9QT1dFUl9ERVRFQ1QpOworZXJyX2NzX2FjOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXR4X2lzX2FjX29ubGluZSh2b2lkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UWF9QT1dFUl9ERVRFQ1QpOworfQorCitzdGF0aWMgaW50IHBhbG10eF9pc191c2Jfb25saW5lKHZvaWQpCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UWF9VU0JfREVURUNUX04pOworfQorCitzdGF0aWMgdm9pZCBwb3dlcl9zdXBwbHlfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1VTQl9ERVRFQ1RfTik7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1BPV0VSX0RFVEVDVCk7Cit9CisKK3N0YXRpYyBjaGFyICpwYWxtdHhfc3VwcGxpY2FudHNbXSA9IHsKKwkibWFpbi1iYXR0ZXJ5IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGRhX3Bvd2VyX3BkYXRhIHBvd2VyX3N1cHBseV9pbmZvID0geworCS5pbml0ICAgICAgICAgICAgPSBwb3dlcl9zdXBwbHlfaW5pdCwKKwkuaXNfYWNfb25saW5lICAgID0gcGFsbXR4X2lzX2FjX29ubGluZSwKKwkuaXNfdXNiX29ubGluZSAgID0gcGFsbXR4X2lzX3VzYl9vbmxpbmUsCisJLmV4aXQgICAgICAgICAgICA9IHBvd2VyX3N1cHBseV9leGl0LAorCS5zdXBwbGllZF90byAgICAgPSBwYWxtdHhfc3VwcGxpY2FudHMsCisJLm51bV9zdXBwbGljYW50cyA9IEFSUkFZX1NJWkUocGFsbXR4X3N1cHBsaWNhbnRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBvd2VyX3N1cHBseSA9IHsKKwkubmFtZSA9ICJwZGEtcG93ZXIiLAorCS5pZCAgID0gLTEsCisJLmRldiAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBvd2VyX3N1cHBseV9pbmZvLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGcmFtZWJ1ZmZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIHBhbG10eF9sY2RfbW9kZXNbXSA9IHsKK3sKKwkucGl4Y2xvY2sJPSA1NzY5MiwKKwkueHJlcwkJPSAzMjAsCisJLnlyZXMJCT0gNDgwLAorCS5icHAJCT0gMTYsCisKKwkubGVmdF9tYXJnaW4JPSAzMiwKKwkucmlnaHRfbWFyZ2luCT0gMSwKKwkudXBwZXJfbWFyZ2luCT0gNywKKwkubG93ZXJfbWFyZ2luCT0gMSwKKworCS5oc3luY19sZW4JPSA0LAorCS52c3luY19sZW4JPSAxLAorfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHBhbG10eF9sY2Rfc2NyZWVuID0geworCS5tb2RlcwkJPSBwYWxtdHhfbGNkX21vZGVzLAorCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKHBhbG10eF9sY2RfbW9kZXMpLAorCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNoaW5lIGluaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCisJJnBhbG10eF9weGFfa2V5cywKKyNlbmRpZgorCSZwYWxtdHhfYmFja2xpZ2h0LAorCSZwb3dlcl9zdXBwbHksCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBhbG10eF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKK3sKKwkudmlydHVhbAk9IFBBTE1UWF9QQ01DSUFfVklSVCwKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUEFMTVRYX1BDTUNJQV9QSFlTKSwKKwkubGVuZ3RoCQk9IFBBTE1UWF9QQ01DSUFfU0laRSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UKK30sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXR4X21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQocGFsbXR4X2lvX2Rlc2MsIEFSUkFZX1NJWkUocGFsbXR4X2lvX2Rlc2MpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBhbG10eF9pbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUocGFsbXR4X3Bpbl9jb25maWcpKTsKKworCXNldF9weGFfZmJfaW5mbygmcGFsbXR4X2xjZF9zY3JlZW4pOworCXB4YV9zZXRfbWNpX2luZm8oJnBhbG10eF9tY2lfcGxhdGZvcm1fZGF0YSk7CisJcHhhX3NldF91ZGNfaW5mbygmcGFsbXR4X3VkY19pbmZvKTsKKwlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKKwlweGFfc2V0X2ZpY3BfaW5mbygmcGFsbXR4X2ZpY3BfcGxhdGZvcm1fZGF0YSk7CisJcHhhX3NldF9rZXlwYWRfaW5mbygmcGFsbXR4X2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKFBBTE1UWCwgIlBhbG0gVHxYIikKKwkucGh5c19pbwk9IFBBTE1UWF9QSFlTX0lPX1NUQVJULAorCS5pb19wZ19vZmZzdAk9IGlvX3AydigweDQwMDAwMDAwKSwKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5tYXBfaW8JCT0gcGFsbXR4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHBhbG10eF9pbml0CitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY20wMjcuYwppbmRleCAzYjk0NWViLi4zNzdmM2JlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKQEAgLTI0LDcgKzI0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbWF4NzMwMS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CkBAIC0xMDgsNiArMTEwLDMyIEBACiAJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKIH07CiAKKy8qCisgKiBTUEkgaG9zdCBhbmQgZGV2aWNlcworICovCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHB4YV9zc3BfbWFzdGVyX2luZm8gPSB7CisJLm51bV9jaGlwc2VsZWN0CT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4NzMwMV9wbGF0Zm9ybV9kYXRhIG1heDczMDFfaW5mbyA9IHsKKwkuYmFzZSA9IC0xLAorfTsKKworLyogYnVzX251bSBtdXN0IG1hdGNoIGlkIGluIHB4YTJ4eF9zZXRfc3BpX2luZm8oKSBjYWxsICovCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcwk9ICJtYXg3MzAxIiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbWF4NzMwMV9pbmZvLAorCQkubWF4X3NwZWVkX2h6CT0gMTMwMDAwMDAsCisJCS5idXNfbnVtCT0gMSwKKwkJLmNoaXBfc2VsZWN0CT0gMCwKKwkJLm1vZGUJCT0gU1BJX01PREVfMCwKKwl9LAorfTsKKworLyoKKyAqIE5PUiBmbGFzaAorICovCiBzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwY20wMjdfZmxhc2hfZGF0YSA9IHsKIAkud2lkdGggID0gNCwKIH07CkBAIC0xOTAsNiArMjE4LDkgQEAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005OTBfQkFTRUJPQVJECiAJcGNtOTkwX2Jhc2Vib2FyZF9pbml0KCk7CiAjZW5kaWYKKworCXB4YTJ4eF9zZXRfc3BpX2luZm8oMSwgJnB4YV9zc3BfbWFzdGVyX2luZm8pOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHNwaV9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKHNwaV9ib2FyZF9pbmZvKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwY20wMjdfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKaW5kZXggNWQ4N2M3Yy4uMzAwMjNiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwpAQCAtMzMsMTQgKzMzLDMwIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvY2FtZXJhLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvb2hjaS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3BjbTk5MF9iYXNlYm9hcmQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21mcC1weGEyN3guaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBjbTk5MF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBNTUMgKi8KKwlHUElPMzJfTU1DX0NMSywKKwlHUElPMTEyX01NQ19DTUQsCisJR1BJTzkyX01NQ19EQVRfMCwKKwlHUElPMTA5X01NQ19EQVRfMSwKKwlHUElPMTEwX01NQ19EQVRfMiwKKwlHUElPMTExX01NQ19EQVRfMywKKwkvKiBVU0IgKi8KKwlHUElPODhfVVNCSDFfUFdSLAorCUdQSU84OV9VU0JIMV9QRU4sCisJLyogUFdNMCAqLworCUdQSU8xNl9QV00wX09VVCwKK307CiAKIC8qCiAgKiBwY205OTBfbGNkX3Bvd2VyIC0gY29udHJvbCBwb3dlciBzdXBwbHkgdG8gdGhlIExDRApAQCAtMjc3LDE2ICsyOTMsNiBAQAogewogCWludCBlcnI7CiAKLQkvKgotCSAqIGVuYWJsZSBHUElPIGZvciBQWEEyN3ggTU1DIGNvbnRyb2xsZXIKLQkgKi8KLQlweGFfZ3Bpb19tb2RlKEdQSU8zMl9NTUNDTEtfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzExMl9NTUNDTURfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzkyX01NQ0RBVDBfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzEwOV9NTUNEQVQxX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU8xMTBfTU1DREFUMl9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPMTExX01NQ0RBVDNfTUQpOwotCiAJZXJyID0gcmVxdWVzdF9pcnEoUENNMDI3X01NQ0RFVF9JUlEsIG1jaV9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVELAogCQkJICAgICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CiAJaWYgKGVycikKQEAgLTMzMyw4ICszMzksNiBAQAogICovCiBzdGF0aWMgaW50IHBjbTk5MF9vaGNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXB4YV9ncGlvX21vZGUoUENNOTkwX1VTQl9PVkVSQ1VSUkVOVCk7Ci0JcHhhX2dwaW9fbW9kZShQQ005OTBfVVNCX1BXUl9FTik7CiAJLyoKIAkgKiBkaXNhYmxlIFVTQiBwb3J0IDIgYW5kIDMKIAkgKiBwb3dlciBzZW5zZSBpcyBhY3RpdmUgbG93CkBAIC0zNjEsMjMgKzM2NSwyNyBAQAogICogUFhBMjd4IENhbWVyYSBzcGVjaWZpYyBzdHVmZgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19QWEEyN3hfTU9EVUxFKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNtOTkwX2NhbWVyYV9waW5fY29uZmlnW10gPSB7CisJLyogQ0lGICovCisJR1BJTzk4X0NJRl9ERF8wLAorCUdQSU8xMDVfQ0lGX0REXzEsCisJR1BJTzEwNF9DSUZfRERfMiwKKwlHUElPMTAzX0NJRl9ERF8zLAorCUdQSU85NV9DSUZfRERfNCwKKwlHUElPOTRfQ0lGX0REXzUsCisJR1BJTzkzX0NJRl9ERF82LAorCUdQSU8xMDhfQ0lGX0REXzcsCisJR1BJTzEwN19DSUZfRERfOCwKKwlHUElPMTA2X0NJRl9ERF85LAorCUdQSU80Ml9DSUZfTUNMSywKKwlHUElPNDVfQ0lGX1BDTEssCisJR1BJTzQzX0NJRl9GViwKKwlHUElPNDRfQ0lGX0xWLAorfTsKKwogc3RhdGljIGludCBwY205OTBfcHhhY2FtZXJhX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXB4YV9ncGlvX21vZGUoR1BJTzk4X0NJRl9ERF8wX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU8xMDVfQ0lGX0REXzFfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzEwNF9DSUZfRERfMl9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPMTAzX0NJRl9ERF8zX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU85NV9DSUZfRERfNF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPOTRfQ0lGX0REXzVfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzkzX0NJRl9ERF82X01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU8xMDhfQ0lGX0REXzdfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzEwN19DSUZfRERfOF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPMTA2X0NJRl9ERF85X01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU80Ml9DSUZfTUNMS19NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNDVfQ0lGX1BDTEtfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzQzX0NJRl9GVl9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNDRfQ0lGX0xWX01EKTsKLQorCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHBjbTk5MF9jYW1lcmFfcGluX2NvbmZpZykpOwogCXJldHVybiAwOwogfQogCkBAIC00NDksOCArNDU3LDEwIEBACiAgKi8KIHZvaWQgX19pbml0IHBjbTk5MF9iYXNlYm9hcmRfaW5pdCh2b2lkKQogeworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHBjbTk5MF9waW5fY29uZmlnKSk7CisKIAkvKiByZWdpc3RlciBDUExEIGFjY2VzcyAqLwotCWlvdGFibGVfaW5pdChwY205OTBfaW9fZGVzYywgQVJSQVlfU0laRShwY205OTBfaW9fZGVzYykpOworCWlvdGFibGVfaW5pdChBUlJBWV9BTkRfU0laRShwY205OTBfaW9fZGVzYykpOwogCiAJLyogcmVnaXN0ZXIgQ1BMRCdzIElSUSBjb250cm9sbGVyICovCiAJcGNtOTkwX2luaXRfaXJxKCk7CkBAIC00NTgsNyArNDY4LDYgQEAKICNpZm5kZWYgQ09ORklHX1BDTTk5MF9ESVNQTEFZX05PTkUKIAlzZXRfcHhhX2ZiX2luZm8oJnBjbTk5MF9mYmluZm8pOwogI2VuZGlmCi0JcHhhX2dwaW9fbW9kZShHUElPMTZfUFdNMF9NRCk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205OTBfYmFja2xpZ2h0X2RldmljZSk7CiAKIAkvKiBNTUMgKi8KQEAgLTQ3Myw5ICs0ODIsOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfVklERU9fUFhBMjd4X01PRFVMRSkKIAlweGFfc2V0X2NhbWVyYV9pbmZvKCZwY205OTBfcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEpOwogCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgcGNtOTkwX2kyY19kZXZpY2VzLAotCQlBUlJBWV9TSVpFKHBjbTk5MF9pMmNfZGV2aWNlcykpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKHBjbTk5MF9pMmNfZGV2aWNlcykpOwogI2VuZGlmCiAKLQlwcmludGsoS0VSTl9JTkZPIlBDTS05OTAgRXZhbHVhdGlvbiBiYXNlYm9hcmQgaW5pdGlhbGl6ZWRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlBDTS05OTAgRXZhbHVhdGlvbiBiYXNlYm9hcmQgaW5pdGlhbGl6ZWRcbiIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwppbmRleCBmODFjMTBjLi4zOTYxMmNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwpAQCAtMjY3LDYgKzI2Nyw3IEBACiAJfSBlbHNlIHsKIAkJR1BDUihQT09ETEVfR1BJT19JUl9PTikgPSBHUElPX2JpdChQT09ETEVfR1BJT19JUl9PTik7CiAJfQorCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBvb2RsZV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCmluZGV4IDRjZDUwZTMuLmM1Yjg0NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCkBAIC0xMDksNiArMTA5LDUyIEBACiAJLmdldHJhdGUJPSBjbGtfcHhhMjV4X2xjZF9nZXRyYXRlLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3BpbzEyX2NvbmZpZ18zMmtbXSA9IHsKKwlHUElPMTJfMzJLSHosCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvMTJfY29uZmlnX2dwaW9bXSA9IHsKKwlHUElPMTJfR1BJTywKK307CisKK3N0YXRpYyB2b2lkIGNsa19ncGlvMTJfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhncGlvMTJfY29uZmlnXzMyaywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19ncGlvMTJfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcHhhMnh4X21mcF9jb25maWcoZ3BpbzEyX2NvbmZpZ19ncGlvLCAxKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTI1eF9ncGlvMTJfb3BzID0geworCS5lbmFibGUgICAgICAgICA9IGNsa19ncGlvMTJfZW5hYmxlLAorCS5kaXNhYmxlICAgICAgICA9IGNsa19ncGlvMTJfZGlzYWJsZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdwaW8xMV9jb25maWdfM202W10gPSB7CisJR1BJTzExXzNfNk1IeiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdwaW8xMV9jb25maWdfZ3Bpb1tdID0geworCUdQSU8xMV9HUElPLAorfTsKKworc3RhdGljIHZvaWQgY2xrX2dwaW8xMV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKGdwaW8xMV9jb25maWdfM202LCAxKTsKK30KKworc3RhdGljIHZvaWQgY2xrX2dwaW8xMV9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhncGlvMTFfY29uZmlnX2dwaW8sIDEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhMjV4X2dwaW8xMV9vcHMgPSB7CisJLmVuYWJsZSAgICAgICAgID0gY2xrX2dwaW8xMV9lbmFibGUsCisJLmRpc2FibGUgICAgICAgID0gY2xrX2dwaW8xMV9kaXNhYmxlLAorfTsKKwogLyoKICAqIDMuNjg2NE1IeiAtPiBPU1QsIEdQSU8sIFNTUCwgUFdNLCBQTExzICg5NS44NDJNSHosIDE0Ny40NTZNSHopCiAgKiA5NS44NDJNSHogLT4gTU1DIDE5LjE2OU1IeiwgSTJDIDMxLjk0OU1IeiwgRklDUCA0Ny45MjNNSHosIFVTQiA0Ny45MjNNSHoKQEAgLTEyOCw2ICsxNzQsOCBAQAogCUlOSVRfQ0tFTigiVUFSVENMSyIsIEJUVUFSVCwgMTQ3NDU2MDAsIDEsICZweGFfZGV2aWNlX2J0dWFydC5kZXYpLAogCUlOSVRfQ0tFTigiVUFSVENMSyIsIFNUVUFSVCwgMTQ3NDU2MDAsIDEsIE5VTEwpLAogCUlOSVRfQ0tFTigiVURDQ0xLIiwgVVNCLCA0NzkyMzAwMCwgNSwgJnB4YTI1eF9kZXZpY2VfdWRjLmRldiksCisJSU5JVF9DTEsoIkdQSU8xMV9DTEsiLCAmY2xrX3B4YTI1eF9ncGlvMTFfb3BzLCAzNjg2NDAwLCAwLCBOVUxMKSwKKwlJTklUX0NMSygiR1BJTzEyX0NMSyIsICZjbGtfcHhhMjV4X2dwaW8xMl9vcHMsIDMyNzY4LCAwLCBOVUxMKSwKIAlJTklUX0NLRU4oIk1NQ0NMSyIsIE1NQywgMTkxNjkwMDAsIDAsICZweGFfZGV2aWNlX21jaS5kZXYpLAogCUlOSVRfQ0tFTigiSTJDQ0xLIiwgSTJDLCAzMTk0OTAwMCwgMCwgJnB4YV9kZXZpY2VfaTJjLmRldiksCiAKQEAgLTE0NSw3ICsxOTMsMTAgQEAKIAlJTklUX0NLRU4oIkZJQ1BDTEsiLCBGSUNQLCA0NzkyMzAwMCwgMCwgTlVMTCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBncGlvN19jbGsgPSBJTklUX0NLT1RIRVIoIkdQSU83X0NLIiwgJnB4YTI1eF9jbGtzWzRdLCBOVUxMKTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHB4YTJ4eF9jbGtfYWxpYXNlc1tdID0geworCUlOSVRfQ0tPVEhFUigiR1BJTzdfQ0xLIiwgJnB4YTI1eF9jbGtzWzRdLCBOVUxMKSwKKwlJTklUX0NLT1RIRVIoIlNBMTExMV9DTEsiLCAmcHhhMjV4X2Nsa3NbNV0sIE5VTEwpLAorfTsKIAogI2lmZGVmIENPTkZJR19QTQogCkBAIC0yOTMsNyArMzQ0LDcgQEAKIAlpbnQgaSwgcmV0ID0gMDsKIAogCS8qIE9ubHkgYWRkIEhXVUFSVCBmb3IgUFhBMjU1LzI2eDsgUFhBMjEwLzI1MC8yN3ggZG8gbm90IGhhdmUgaXQuICovCi0JaWYgKGNwdV9pc19weGEyNXgoKSkKKwlpZiAoY3B1X2lzX3B4YTI1NSgpKQogCQljbGtzX3JlZ2lzdGVyKCZweGEyNXhfaHd1YXJ0X2NsaywgMSk7CiAKIAlpZiAoY3B1X2lzX3B4YTIxeCgpIHx8IGNwdV9pc19weGEyNXgoKSkgewpAQCAtMzE3LDEwICszNjgsMTAgQEAKIAl9CiAKIAkvKiBPbmx5IGFkZCBIV1VBUlQgZm9yIFBYQTI1NS8yNng7IFBYQTIxMC8yNTAvMjd4IGRvIG5vdCBoYXZlIGl0LiAqLwotCWlmIChjcHVfaXNfcHhhMjV4KCkpCisJaWYgKGNwdV9pc19weGEyNTUoKSkKIAkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZweGFfZGV2aWNlX2h3dWFydCk7CiAKLQljbGtzX3JlZ2lzdGVyKCZncGlvN19jbGssIDEpOworCWNsa3NfcmVnaXN0ZXIocHhhMnh4X2Nsa19hbGlhc2VzLCBBUlJBWV9TSVpFKHB4YTJ4eF9jbGtfYWxpYXNlcykpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKaW5kZXggMGEwZDM4Ny4uZGE5MmU5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKQEAgLTE1LDEwICsxNSwxNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEzeHgtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21mcC1weGEzMDAuaD4KIAorI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKwogc3RhdGljIHN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwIHB4YTMwMF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0gewogCiAJTUZQX0FERFJfWChHUElPMCwgICBHUElPMiwgICAweDAwYjQpLApAQCAtNzksMTUgKzg1LDI2IEBACiAJTUZQX0FERFJfRU5ELAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgY29tbW9uX2Nsa3NbXSA9IHsKKwlQWEEzeHhfQ0tFTigiTkFORENMSyIsIE5BTkQsIDE1NjAwMDAwMCwgMCwgJnB4YTN4eF9kZXZpY2VfbmFuZC5kZXYpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcHhhMzEwX2Nsa3NbXSA9IHsKKwlQWEEzeHhfQ0tFTigiTU1DQ0xLIiwgTU1DMywgMTk1MDAwMDAsIDAsICZweGEzeHhfZGV2aWNlX21jaTMuZGV2KSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHB4YTMwMF9pbml0KHZvaWQpCiB7CiAJaWYgKGNwdV9pc19weGEzMDAoKSB8fCBjcHVfaXNfcHhhMzEwKCkpIHsKIAkJcHhhM3h4X2luaXRfbWZwKCk7CiAJCXB4YTN4eF9tZnBfaW5pdF9hZGRyKHB4YTMwMF9tZnBfYWRkcl9tYXApOworCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKGNvbW1vbl9jbGtzKSk7CiAJfQogCi0JaWYgKGNwdV9pc19weGEzMTAoKSkKKwlpZiAoY3B1X2lzX3B4YTMxMCgpKSB7CiAJCXB4YTN4eF9tZnBfaW5pdF9hZGRyKHB4YTMxMF9tZnBfYWRkcl9tYXApOworCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKHB4YTMxMF9jbGtzKSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCmluZGV4IDc0MTI4ZWIuLmM1NTdjMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCkBAIC0xNSwxMSArMTUsMTcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhM3h4LXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZnAtcHhhMzIwLmg+CiAKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKIHN0YXRpYyBzdHJ1Y3QgcHhhM3h4X21mcF9hZGRyX21hcCBweGEzMjBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKIAogCU1GUF9BRERSX1goR1BJTzAsICBHUElPNCwgICAweDAxMjQpLApAQCAtNzQsMTYgKzgwLDE3IEBACiAJTUZQX0FERFJfRU5ELAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IHB4YTMyMF9pbml0X21mcCh2b2lkKQotewotCXB4YTN4eF9pbml0X21mcCgpOwotCXB4YTN4eF9tZnBfaW5pdF9hZGRyKHB4YTMyMF9tZnBfYWRkcl9tYXApOwotfQorc3RhdGljIHN0cnVjdCBjbGsgcHhhMzIwX2Nsa3NbXSA9IHsKKwlQWEEzeHhfQ0tFTigiTkFORENMSyIsIE5BTkQsIDEwNDAwMDAwMCwgMCwgJnB4YTN4eF9kZXZpY2VfbmFuZC5kZXYpLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhMzIwX2luaXQodm9pZCkKIHsKLQlpZiAoY3B1X2lzX3B4YTMyMCgpKQotCQlweGEzMjBfaW5pdF9tZnAoKTsKKwlpZiAoY3B1X2lzX3B4YTMyMCgpKSB7CisJCXB4YTN4eF9pbml0X21mcCgpOworCQlweGEzeHhfbWZwX2luaXRfYWRkcihweGEzMjBfbWZwX2FkZHJfbWFwKTsKKwkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGEzMjBfY2xrcykpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwppbmRleCAxNTY4NWQyLi5mNDkxMDI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJcmV0dXJuIGhzaW9fY2xrOwogfQogCi1zdGF0aWMgdm9pZCBjbGtfcHhhM3h4X2NrZW5fZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3ZvaWQgY2xrX3B4YTN4eF9ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrID0gMXVsIDw8IChjbGstPmNrZW4gJiAweDFmKTsKIApAQCAtMTU0LDcgKzE1NCw3IEBACiAJCUNLRU5CIHw9IG1hc2s7CiB9CiAKLXN0YXRpYyB2b2lkIGNsa19weGEzeHhfY2tlbl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3ZvaWQgY2xrX3B4YTN4eF9ja2VuX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgbWFzayA9IDF1bCA8PCAoY2xrLT5ja2VuICYgMHgxZik7CiAKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQlDS0VOQiAmPSB+bWFzazsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9ja2VuX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9ja2VuX29wcyA9IHsKIAkuZW5hYmxlCQk9IGNsa19weGEzeHhfY2tlbl9lbmFibGUsCiAJLmRpc2FibGUJPSBjbGtfcHhhM3h4X2NrZW5fZGlzYWJsZSwKIH07CkBAIC0xOTYsMjQgKzE5Niw2IEBACiAJLmRpc2FibGUJPSBjbGtfcG91dF9kaXNhYmxlLAogfTsKIAotI2RlZmluZSBQWEEzeHhfQ0tFTihfbmFtZSwgX2NrZW4sIF9yYXRlLCBfZGVsYXksIF9kZXYpCVwKLQl7CQkJCQkJXAotCQkubmFtZQk9IF9uYW1lLAkJCVwKLQkJLmRldgk9IF9kZXYsCQkJCVwKLQkJLm9wcwk9ICZjbGtfcHhhM3h4X2NrZW5fb3BzLAkJXAotCQkucmF0ZQk9IF9yYXRlLAkJCVwKLQkJLmNrZW4JPSBDS0VOXyMjX2NrZW4sCQkJXAotCQkuZGVsYXkJPSBfZGVsYXksCQkJXAotCX0KLQotI2RlZmluZSBQWEEzeHhfQ0soX25hbWUsIF9ja2VuLCBfb3BzLCBfZGV2KQkJXAotCXsJCQkJCQlcCi0JCS5uYW1lCT0gX25hbWUsCQkJXAotCQkuZGV2CT0gX2RldiwJCQkJXAotCQkub3BzCT0gX29wcywJCQkJXAotCQkuY2tlbgk9IENLRU5fIyNfY2tlbiwJCQlcCi0JfQotCiBzdGF0aWMgc3RydWN0IGNsayBweGEzeHhfY2xrc1tdID0gewogCXsKIAkJLm5hbWUgICAgICAgICAgID0gIkNMS19QT1VUIiwKQEAgLTI0NCw3ICsyMjYsNiBAQAogCiAJUFhBM3h4X0NLRU4oIk1NQ0NMSyIsIE1NQzEsIDE5NTAwMDAwLCAwLCAmcHhhX2RldmljZV9tY2kuZGV2KSwKIAlQWEEzeHhfQ0tFTigiTU1DQ0xLIiwgTU1DMiwgMTk1MDAwMDAsIDAsICZweGEzeHhfZGV2aWNlX21jaTIuZGV2KSwKLQlQWEEzeHhfQ0tFTigiTU1DQ0xLIiwgTU1DMywgMTk1MDAwMDAsIDAsICZweGEzeHhfZGV2aWNlX21jaTMuZGV2KSwKIH07CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwMzg5NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKKyAqCisgKiBDb2RlIHNwZWNpZmljIHRvIFBYQTkzMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb24gTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZnAtcHhhOTMwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcHhhM3h4X21mcF9hZGRyX21hcCBweGE5MzBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKKworCU1GUF9BRERSKEdQSU8wLCAweDAyZTApLAorCU1GUF9BRERSKEdQSU8xLCAweDAyZGMpLAorCU1GUF9BRERSKEdQSU8yLCAweDAyZTgpLAorCU1GUF9BRERSKEdQSU8zLCAweDAyZDgpLAorCU1GUF9BRERSKEdQSU80LCAweDAyZTQpLAorCU1GUF9BRERSKEdQSU81LCAweDAyZWMpLAorCU1GUF9BRERSKEdQSU82LCAweDAyZjgpLAorCU1GUF9BRERSKEdQSU83LCAweDAyZmMpLAorCU1GUF9BRERSKEdQSU84LCAweDAzMDApLAorCU1GUF9BRERSKEdQSU85LCAweDAyZDQpLAorCU1GUF9BRERSKEdQSU8xMCwgMHgwMmY0KSwKKwlNRlBfQUREUihHUElPMTEsIDB4MDJmMCksCisJTUZQX0FERFIoR1BJTzEyLCAweDAzMDQpLAorCU1GUF9BRERSKEdQSU8xMywgMHgwMzEwKSwKKwlNRlBfQUREUihHUElPMTQsIDB4MDMwOCksCisJTUZQX0FERFIoR1BJTzE1LCAweDAzMGMpLAorCU1GUF9BRERSKEdQSU8xNiwgMHgwNGU4KSwKKwlNRlBfQUREUihHUElPMTcsIDB4MDRmNCksCisJTUZQX0FERFIoR1BJTzE4LCAweDA0ZjgpLAorCU1GUF9BRERSKEdQSU8xOSwgMHgwNGZjKSwKKwlNRlBfQUREUihHUElPMjAsIDB4MDUxOCksCisJTUZQX0FERFIoR1BJTzIxLCAweDA1MWMpLAorCU1GUF9BRERSKEdQSU8yMiwgMHgwNGVjKSwKKwlNRlBfQUREUihHUElPMjMsIDB4MDUwMCksCisJTUZQX0FERFIoR1BJTzI0LCAweDA0ZjApLAorCU1GUF9BRERSKEdQSU8yNSwgMHgwNTA0KSwKKwlNRlBfQUREUihHUElPMjYsIDB4MDUxMCksCisJTUZQX0FERFIoR1BJTzI3LCAweDA1MTQpLAorCU1GUF9BRERSKEdQSU8yOCwgMHgwNTIwKSwKKwlNRlBfQUREUihHUElPMjksIDB4MDYwMCksCisJTUZQX0FERFIoR1BJTzMwLCAweDA2MTgpLAorCU1GUF9BRERSKEdQSU8zMSwgMHgwNjEwKSwKKwlNRlBfQUREUihHUElPMzIsIDB4MDYwYyksCisJTUZQX0FERFIoR1BJTzMzLCAweDA2MWMpLAorCU1GUF9BRERSKEdQSU8zNCwgMHgwNjIwKSwKKwlNRlBfQUREUihHUElPMzUsIDB4MDYyOCksCisJTUZQX0FERFIoR1BJTzM2LCAweDA2MmMpLAorCU1GUF9BRERSKEdQSU8zNywgMHgwNjMwKSwKKwlNRlBfQUREUihHUElPMzgsIDB4MDYzNCksCisJTUZQX0FERFIoR1BJTzM5LCAweDA2MzgpLAorCU1GUF9BRERSKEdQSU80MCwgMHgwNjNjKSwKKwlNRlBfQUREUihHUElPNDEsIDB4MDYxNCksCisJTUZQX0FERFIoR1BJTzQyLCAweDA2MjQpLAorCU1GUF9BRERSKEdQSU80MywgMHgwNjA4KSwKKwlNRlBfQUREUihHUElPNDQsIDB4MDYwNCksCisJTUZQX0FERFIoR1BJTzQ1LCAweDA1MGMpLAorCU1GUF9BRERSKEdQSU80NiwgMHgwNTA4KSwKKwlNRlBfQUREUihHUElPNDcsIDB4MDJiYyksCisJTUZQX0FERFIoR1BJTzQ4LCAweDAyYjQpLAorCU1GUF9BRERSKEdQSU80OSwgMHgwMmI4KSwKKwlNRlBfQUREUihHUElPNTAsIDB4MDJjOCksCisJTUZQX0FERFIoR1BJTzUxLCAweDAyYzApLAorCU1GUF9BRERSKEdQSU81MiwgMHgwMmM0KSwKKwlNRlBfQUREUihHUElPNTMsIDB4MDJkMCksCisJTUZQX0FERFIoR1BJTzU0LCAweDAyY2MpLAorCU1GUF9BRERSKEdQSU81NSwgMHgwMjljKSwKKwlNRlBfQUREUihHUElPNTYsIDB4MDJhMCksCisJTUZQX0FERFIoR1BJTzU3LCAweDAyOTQpLAorCU1GUF9BRERSKEdQSU81OCwgMHgwMjk4KSwKKwlNRlBfQUREUihHUElPNTksIDB4MDJhNCksCisJTUZQX0FERFIoR1BJTzYwLCAweDAyYTgpLAorCU1GUF9BRERSKEdQSU82MSwgMHgwMmIwKSwKKwlNRlBfQUREUihHUElPNjIsIDB4MDJhYyksCisJTUZQX0FERFIoR1BJTzYzLCAweDA2NDApLAorCU1GUF9BRERSKEdQSU82NCwgMHgwNjVjKSwKKwlNRlBfQUREUihHUElPNjUsIDB4MDY0OCksCisJTUZQX0FERFIoR1BJTzY2LCAweDA2NDQpLAorCU1GUF9BRERSKEdQSU82NywgMHgwNjc0KSwKKwlNRlBfQUREUihHUElPNjgsIDB4MDY1OCksCisJTUZQX0FERFIoR1BJTzY5LCAweDA2NTQpLAorCU1GUF9BRERSKEdQSU83MCwgMHgwNjYwKSwKKwlNRlBfQUREUihHUElPNzEsIDB4MDY2OCksCisJTUZQX0FERFIoR1BJTzcyLCAweDA2NjQpLAorCU1GUF9BRERSKEdQSU83MywgMHgwNjUwKSwKKwlNRlBfQUREUihHUElPNzQsIDB4MDY2YyksCisJTUZQX0FERFIoR1BJTzc1LCAweDA2NGMpLAorCU1GUF9BRERSKEdQSU83NiwgMHgwNjcwKSwKKwlNRlBfQUREUihHUElPNzcsIDB4MDY3OCksCisJTUZQX0FERFIoR1BJTzc4LCAweDA2N2MpLAorCU1GUF9BRERSKEdQSU83OSwgMHgwNjk0KSwKKwlNRlBfQUREUihHUElPODAsIDB4MDY5YyksCisJTUZQX0FERFIoR1BJTzgxLCAweDA2YTApLAorCU1GUF9BRERSKEdQSU84MiwgMHgwNmE0KSwKKwlNRlBfQUREUihHUElPODMsIDB4MDY5OCksCisJTUZQX0FERFIoR1BJTzg0LCAweDA2YmMpLAorCU1GUF9BRERSKEdQSU84NSwgMHgwNmI0KSwKKwlNRlBfQUREUihHUElPODYsIDB4MDZiMCksCisJTUZQX0FERFIoR1BJTzg3LCAweDA2YzApLAorCU1GUF9BRERSKEdQSU84OCwgMHgwNmM0KSwKKwlNRlBfQUREUihHUElPODksIDB4MDZhYyksCisJTUZQX0FERFIoR1BJTzkwLCAweDA2ODApLAorCU1GUF9BRERSKEdQSU85MSwgMHgwNjg0KSwKKwlNRlBfQUREUihHUElPOTIsIDB4MDY4OCksCisJTUZQX0FERFIoR1BJTzkzLCAweDA2OTApLAorCU1GUF9BRERSKEdQSU85NCwgMHgwNjhjKSwKKwlNRlBfQUREUihHUElPOTUsIDB4MDZhOCksCisJTUZQX0FERFIoR1BJTzk2LCAweDA2YjgpLAorCU1GUF9BRERSKEdQSU85NywgMHgwNDEwKSwKKwlNRlBfQUREUihHUElPOTgsIDB4MDQxOCksCisJTUZQX0FERFIoR1BJTzk5LCAweDA0MWMpLAorCU1GUF9BRERSKEdQSU8xMDAsIDB4MDQxNCksCisJTUZQX0FERFIoR1BJTzEwMSwgMHgwNDA4KSwKKwlNRlBfQUREUihHUElPMTAyLCAweDAzMjQpLAorCU1GUF9BRERSKEdQSU8xMDMsIDB4MDQwYyksCisJTUZQX0FERFIoR1BJTzEwNCwgMHgwNDAwKSwKKwlNRlBfQUREUihHUElPMTA1LCAweDAzMjgpLAorCU1GUF9BRERSKEdQSU8xMDYsIDB4MDQwNCksCisKKwlNRlBfQUREUihuWENWUkVOLCAweDAyMDQpLAorCU1GUF9BRERSKERGX0NMRV9uT0UsIDB4MDIwYyksCisJTUZQX0FERFIoREZfbkFEVjFfQUxFLCAweDAyMTgpLAorCU1GUF9BRERSKERGX1NDTEtfRSwgMHgwMjE0KSwKKwlNRlBfQUREUihERl9TQ0xLX1MsIDB4MDIxMCksCisJTUZQX0FERFIobkJFMCwgMHgwMjFjKSwKKwlNRlBfQUREUihuQkUxLCAweDAyMjApLAorCU1GUF9BRERSKERGX25BRFYyX0FMRSwgMHgwMjI0KSwKKwlNRlBfQUREUihERl9JTlRfUm5CLCAweDAyMjgpLAorCU1GUF9BRERSKERGX25DUzAsIDB4MDIyYyksCisJTUZQX0FERFIoREZfbkNTMSwgMHgwMjMwKSwKKwlNRlBfQUREUihuTFVBLCAweDAyNTQpLAorCU1GUF9BRERSKG5MTEEsIDB4MDI1OCksCisJTUZQX0FERFIoREZfbldFLCAweDAyMzQpLAorCU1GUF9BRERSKERGX25SRV9uT0UsIDB4MDIzOCksCisJTUZQX0FERFIoREZfQUREUjAsIDB4MDI0YyksCisJTUZQX0FERFIoREZfQUREUjEsIDB4MDI1MCksCisJTUZQX0FERFIoREZfQUREUjIsIDB4MDI1YyksCisJTUZQX0FERFIoREZfQUREUjMsIDB4MDI2MCksCisJTUZQX0FERFIoREZfSU8wLCAweDAyM2MpLAorCU1GUF9BRERSKERGX0lPMSwgMHgwMjQwKSwKKwlNRlBfQUREUihERl9JTzIsIDB4MDI0NCksCisJTUZQX0FERFIoREZfSU8zLCAweDAyNDgpLAorCU1GUF9BRERSKERGX0lPNCwgMHgwMjY0KSwKKwlNRlBfQUREUihERl9JTzUsIDB4MDI2OCksCisJTUZQX0FERFIoREZfSU82LCAweDAyNmMpLAorCU1GUF9BRERSKERGX0lPNywgMHgwMjcwKSwKKwlNRlBfQUREUihERl9JTzgsIDB4MDI3NCksCisJTUZQX0FERFIoREZfSU85LCAweDAyNzgpLAorCU1GUF9BRERSKERGX0lPMTAsIDB4MDI3YyksCisJTUZQX0FERFIoREZfSU8xMSwgMHgwMjgwKSwKKwlNRlBfQUREUihERl9JTzEyLCAweDAyODQpLAorCU1GUF9BRERSKERGX0lPMTMsIDB4MDI4OCksCisJTUZQX0FERFIoREZfSU8xNCwgMHgwMjhjKSwKKwlNRlBfQUREUihERl9JTzE1LCAweDAyOTApLAorCisJTUZQX0FERFIoR1NJTV9VSU8sIDB4MDMxNCksCisJTUZQX0FERFIoR1NJTV9VQ0xLLCAweDAzMTgpLAorCU1GUF9BRERSKEdTSU1fVURFVCwgMHgwMzFjKSwKKwlNRlBfQUREUihHU0lNX25VUlNULCAweDAzMjApLAorCisJTUZQX0FERFIoUE1JQ19JTlQsIDB4MDZjOCksCisKKwlNRlBfQUREUihSRFksIDB4MDIwMCksCisKKwlNRlBfQUREUl9FTkQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBweGE5MzBfaW5pdCh2b2lkKQoreworCWlmIChjcHVfaXNfcHhhOTMwKCkpIHsKKwkJcHhhM3h4X2luaXRfbWZwKCk7CisJCXB4YTN4eF9tZnBfaW5pdF9hZGRyKHB4YTkzMF9tZnBfYWRkcl9tYXApOworCX0KKworCXJldHVybiAwOworfQorCitjb3JlX2luaXRjYWxsKHB4YTkzMF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Jlc2V0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9yZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzlkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9yZXNldC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1yZWdzLmg+CisKK3N0YXRpYyB2b2lkIGRvX2h3X3Jlc2V0KHZvaWQpOworCitzdGF0aWMgaW50IHJlc2V0X2dwaW8gPSAtMTsKKworaW50IGluaXRfZ3Bpb19yZXNldChpbnQgZ3BpbykKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGdwaW9fcmVxdWVzdChncGlvLCAicmVzZXQgZ2VuZXJhdG9yIik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgcmVxdWVzdCByZXNldF9ncGlvXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBjb25maWd1cmUgcmVzZXRfZ3BpbyBmb3IgaW5wdXRcbiIpOworCQlncGlvX2ZyZWUoZ3Bpbyk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWlmICghcmMpCisJCXJlc2V0X2dwaW8gPSBncGlvOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogVHJpZ2dlciBHUElPIHJlc2V0LgorICogVGhpcyBjb3ZlcnMgdmFyaW91cyB0eXBlcyBvZiBsb2dpYyBjb25uZWN0aW5nIGdwaW8gcGluCisgKiB0byBSRVNFVCBwaW5zIChuUkVTRVQgb3IgR1BJT19SRVNFVCk6CisgKi8KK3N0YXRpYyB2b2lkIGRvX2dwaW9fcmVzZXQodm9pZCkKK3sKKwlCVUdfT04ocmVzZXRfZ3BpbyA9PSAtMSk7CisKKwkvKiBkcml2ZSBpdCBsb3cgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQocmVzZXRfZ3BpbywgMCk7CisJbWRlbGF5KDIpOworCS8qIHJpc2luZyBlZGdlIG9yIGRyaXZlIGhpZ2ggKi8KKwlncGlvX3NldF92YWx1ZShyZXNldF9ncGlvLCAxKTsKKwltZGVsYXkoMik7CisJLyogZmFsbGluZyBlZGdlICovCisJZ3Bpb19zZXRfdmFsdWUocmVzZXRfZ3BpbywgMCk7CisKKwkvKiBnaXZlIGl0IHNvbWUgdGltZSAqLworCW1kZWxheSgxMCk7CisKKwlXQVJOX09OKDEpOworCS8qIGZhbGxiYWNrICovCisJZG9faHdfcmVzZXQoKTsKK30KKworc3RhdGljIHZvaWQgZG9faHdfcmVzZXQodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSB3YXRjaGRvZyBhbmQgbGV0IGl0IGZpcmUgKi8KKwlPV0VSID0gT1dFUl9XTUU7CisJT1NTUiA9IE9TU1JfTTM7CisJT1NNUjMgPSBPU0NSICsgMzY4NjQwOwkvKiAuLi4gaW4gMTAwIG1zICovCit9CisKK3ZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJaWYgKGNwdV9pc19weGEyeHgoKSkKKwkJUkNTUiA9IFJDU1JfSFdSIHwgUkNTUl9XRFIgfCBSQ1NSX1NNUiB8IFJDU1JfR1BSOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAncyc6CisJCS8qIEp1bXAgaW50byBST00gYXQgYWRkcmVzcyAwICovCisJCWNwdV9yZXNldCgwKTsKKwkJYnJlYWs7CisJY2FzZSAnaCc6CisJCWRvX2h3X3Jlc2V0KCk7CisJCWJyZWFrOworCWNhc2UgJ2cnOgorCQlkb19ncGlvX3Jlc2V0KCk7CisJCWJyZWFrOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2Fhci5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc2Fhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMmJjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgUFhBOTMwIEhhbmRoZWxkIFBsYXRmb3JtIChha2EgU0FBUikKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTN4eC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLXB4YTkzMC5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworLyogU0FBUiBNRlAgY29uZmlndXJhdGlvbnMgKi8KK3N0YXRpYyBtZnBfY2ZnX3Qgc2Fhcl9tZnBfY2ZnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBFdGhlcm5ldCAqLworCURGX25DUzFfbkNTMywKKwlHUElPOTdfR1BJTywKK307CisKKyNkZWZpbmUgU0FBUl9FVEhfUEhZUwkoMHgxNDAwMDAwMCkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAoU0FBUl9FVEhfUEhZUyArIDB4MzAwKSwKKwkJLmVuZAk9IChTQUFSX0VUSF9QSFlTICsgMHhmZmZmZiksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBncGlvX3RvX2lycShtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU85NykpLAorCQkuZW5kCT0gZ3Bpb190b19pcnEobWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPOTcpKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzYWFyX3NtYzkxeF9pbmZvID0geworCS5mbGFncwk9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlUIHwgU01DOTFYX1VTRV9ETUEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzYWFyX3NtYzkxeF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc2Fhcl9pbml0KHZvaWQpCit7CisJLyogaW5pdGlhbGl6ZSBNRlAgY29uZmlndXJhdGlvbnMgKi8KKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShzYWFyX21mcF9jZmcpKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21jOTF4X2RldmljZSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoU0FBUiwgIlBYQTkzMCBIYW5kaGVsZCBQbGF0Zm9ybSAoYWthIFNBQVIpIikKKwkvKiBNYWludGFpbmVyOiBFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4gKi8KKwkucGh5c19pbyAgICAgICAgPSAweDQwMDAwMDAwLAorCS5ib290X3BhcmFtcyAgICA9IDB4YTAwMDAxMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbyAgICAgICAgID0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBweGEzeHhfaW5pdF9pcnEsCisJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lICAgPSBzYWFyX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKaW5kZXggZTdkMGZjZC4uNzYyMjQ5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMjd4LXVkYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9vaGNpLmg+CkBAIC00NTAsNiArNDUxLDcgQEAKIAkJc2V0X3Njb29wX2dwaW8oJnNwaXR6c2Nvb3AyX2RldmljZS5kZXYsIFNQSVRaX1NDUDJfSVJfT04pOwogCWVsc2UKIAkJcmVzZXRfc2Nvb3BfZ3Bpbygmc3BpdHpzY29vcDJfZGV2aWNlLmRldiwgU1BJVFpfU0NQMl9JUl9PTik7CisJcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKIH0KIAogI2lmZGVmIENPTkZJR19NQUNIX0FLSVRBCkBAIC00NTksNiArNDYxLDcgQEAKIAkJYWtpdGFfc2V0X2lvZXhwKCZha2l0YWlvZXhwX2RldmljZS5kZXYsIEFLSVRBX0lPRVhQX0lSX09OKTsKIAllbHNlCiAJCWFraXRhX3Jlc2V0X2lvZXhwKCZha2l0YWlvZXhwX2RldmljZS5kZXYsIEFLSVRBX0lPRVhQX0lSX09OKTsKKwlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwogfQogI2VuZGlmCiAKQEAgLTUyOSwxMSArNTMyLDcgQEAKIAogc3RhdGljIHZvaWQgc3BpdHpfcG93ZXJvZmYodm9pZCkKIHsKLQlweGFfZ3Bpb19tb2RlKFNQSVRaX0dQSU9fT05fUkVTRVQgfCBHUElPX09VVCk7Ci0JR1BTUihTUElUWl9HUElPX09OX1JFU0VUKSA9IEdQSU9fYml0KFNQSVRaX0dQSU9fT05fUkVTRVQpOwotCi0JbWRlbGF5KDEwMDApOwotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdnJyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNwaXR6X3Jlc3RhcnQoY2hhciBtb2RlKQpAQCAtNTQ3LDYgKzU0Niw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjb21tb25faW5pdCh2b2lkKQogeworCWluaXRfZ3Bpb19yZXNldChTUElUWl9HUElPX09OX1JFU0VUKTsKIAlwbV9wb3dlcl9vZmYgPSBzcGl0el9wb3dlcm9mZjsKIAlhcm1fcG1fcmVzdGFydCA9IHNwaXR6X3Jlc3RhcnQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMKaW5kZXggMGJiMzE5OC4uODlmMzg2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMKQEAgLTE0LDEzICsxNCw2IEBACiAgKiAgSU8tYmFzZWQgU1NQIGFwcGxpY2F0aW9ucyBhbmQgYWxsb3dzIGVhc3kgcG9ydCBzZXR1cCBmb3IgRE1BIGFjY2Vzcy4KICAqCiAgKiAgQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Ci0gKgotICogIFJldmlzaW9uIGhpc3Rvcnk6Ci0gKiAgIDIybmQgQXVnIDIwMDMgSW5pdGlhbCB2ZXJzaW9uLgotICogICAyMHRoIERlYyAyMDA0IEFkZGVkIHNzcF9jb25maWcgZm9yIGNoYW5naW5nIHBvcnQgY29uZmlnIHdpdGhvdXQKLSAqICAgICAgICAgICAgICAgICBjbG9zaW5nIHRoZSBwb3J0LgotICogICAgNHRoIEF1ZyAyMDA1IEFkZGVkIG9wdGlvbiB0byBkaXNhYmxlIGlycSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBhbmQKLSAqICAgICAgICAgICAgICAgICBjbGVhbmVkIHVwIGlycSBhbmQgY2xvY2sgZGV0ZWN0aW9uLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI4NSw3ICsyNzgsNyBAQAogCQkJZ290byBvdXRfcmVnaW9uOwogCQlkZXYtPmlycSA9IHNzcC0+aXJxOwogCX0gZWxzZQotCQlkZXYtPmlycSA9IDA7CisJCWRldi0+aXJxID0gTk9fSVJROwogCiAJLyogdHVybiBvbiBTU1AgcG9ydCBjbG9jayAqLwogCWNsa19lbmFibGUoc3NwLT5jbGspOwpAQCAtMzA2LDcgKzI5OSw4IEBACiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IGRldi0+c3NwOwogCiAJc3NwX2Rpc2FibGUoZGV2KTsKLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5pcnEgIT0gTk9fSVJRKQorCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAljbGtfZGlzYWJsZShzc3AtPmNsayk7CiAJc3NwX2ZyZWUoc3NwKTsKIH0KQEAgLTM2MCw2ICszNTQsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5Iik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwlzc3AtPnBkZXYgPSBwZGV2OwogCiAJc3NwLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJTU1BDTEsiKTsKIAlpZiAoSVNfRVJSKHNzcC0+Y2xrKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyODM1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiLmMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS90YXZvcmV2Yi5jCisgKgorICogIFN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIFBYQTkzMCBFdmFsdWF0aW9uIEJvYXJkCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEzeHgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21mcC1weGE5MzAuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKy8qIFRhdm9yIEVWQiBNRlAgY29uZmlndXJhdGlvbnMgKi8KK3N0YXRpYyBtZnBfY2ZnX3QgdGF2b3JldmJfbWZwX2NmZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogRXRoZXJuZXQgKi8KKwlERl9uQ1MxX25DUzMsCisJR1BJTzQ3X0dQSU8sCit9OworCisjZGVmaW5lIFRBVk9SRVZCX0VUSF9QSFlTCSgweDE0MDAwMDAwKQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IChUQVZPUkVWQl9FVEhfUEhZUyArIDB4MzAwKSwKKwkJLmVuZAk9IChUQVZPUkVWQl9FVEhfUEhZUyArIDB4ZmZmZmYpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gZ3Bpb190b19pcnEobWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPNDcpKSwKKwkJLmVuZAk9IGdwaW9fdG9faXJxKG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzQ3KSksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgdGF2b3JldmJfc21jOTF4X2luZm8gPSB7CisJLmZsYWdzCT0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfVVNFX0RNQSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnRhdm9yZXZiX3NtYzkxeF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdGF2b3JldmJfaW5pdCh2b2lkKQoreworCS8qIGluaXRpYWxpemUgTUZQIGNvbmZpZ3VyYXRpb25zICovCisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUodGF2b3JldmJfbWZwX2NmZykpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKK30KKworTUFDSElORV9TVEFSVChUQVZPUkVWQiwgIlBYQTkzMCBFdmFsdWF0aW9uIEJvYXJkIChha2EgVGF2b3JFVkIpIikKKwkvKiBNYWludGFpbmVyOiBFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4gKi8KKwkucGh5c19pbyAgICAgICAgPSAweDQwMDAwMDAwLAorCS5ib290X3BhcmFtcyAgICA9IDB4YTAwMDAxMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbyAgICAgICAgID0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBweGEzeHhfaW5pdF9pcnEsCisJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lICAgPSB0YXZvcmV2Yl9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EtYnQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EtYnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDg1MDU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS1idC5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQmx1ZXRvb3RoIGJ1aWx0LWluIGNoaXAgY29udHJvbAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBEbWl0cnkgQmFyeXNoa292CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvdG9zYV9idC5oPgorCitzdGF0aWMgdm9pZCB0b3NhX2J0X29uKHN0cnVjdCB0b3NhX2J0X2RhdGEgKmRhdGEpCit7CisJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+Z3Bpb19yZXNldCwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+Z3Bpb19wd3IsIDEpOworCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPmdwaW9fcmVzZXQsIDEpOworCW1kZWxheSgyMCk7CisJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+Z3Bpb19yZXNldCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2FfYnRfb2ZmKHN0cnVjdCB0b3NhX2J0X2RhdGEgKmRhdGEpCit7CisJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+Z3Bpb19yZXNldCwgMSk7CisJbWRlbGF5KDEwKTsKKwlncGlvX3NldF92YWx1ZShkYXRhLT5ncGlvX3B3ciwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+Z3Bpb19yZXNldCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdG9zYV9idF90b2dnbGVfcmFkaW8odm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpCit7CisJcHJfaW5mbygiQlRfUkFESU8gZ29pbmc6ICVzXG4iLAorCQkJc3RhdGUgPT0gUkZLSUxMX1NUQVRFX09OID8gIm9uIiA6ICJvZmYiKTsKKworCWlmIChzdGF0ZSA9PSBSRktJTExfU1RBVEVfT04pIHsKKwkJcHJfaW5mbygiVE9TQV9CVDogZ29pbmcgT05cbiIpOworCQl0b3NhX2J0X29uKGRhdGEpOworCX0gZWxzZSB7CisJCXByX2luZm8oIlRPU0FfQlQ6IGdvaW5nIE9GRlxuIik7CisJCXRvc2FfYnRfb2ZmKGRhdGEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b3NhX2J0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHJma2lsbCAqcmZrOworCisJc3RydWN0IHRvc2FfYnRfZGF0YSAqZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlyYyA9IGdwaW9fcmVxdWVzdChkYXRhLT5ncGlvX3Jlc2V0LCAiQmx1ZXRvb3RoIHJlc2V0Iik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9yZXNldDsKKwlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChkYXRhLT5ncGlvX3Jlc2V0LCAwKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3Jlc2V0X2RpcjsKKwlyYyA9IGdwaW9fcmVxdWVzdChkYXRhLT5ncGlvX3B3ciwgIkJsdWV0b290aCBwb3dlciIpOworCWlmIChyYykKKwkJZ290byBlcnJfcHdyOworCXJjID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGRhdGEtPmdwaW9fcHdyLCAwKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3B3cl9kaXI7CisKKwlyZmsgPSByZmtpbGxfYWxsb2NhdGUoJmRldi0+ZGV2LCBSRktJTExfVFlQRV9CTFVFVE9PVEgpOworCWlmICghcmZrKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmZrX2FsbG9jOworCX0KKworCXJmay0+bmFtZSA9ICJ0b3NhLWJ0IjsKKwlyZmstPnRvZ2dsZV9yYWRpbyA9IHRvc2FfYnRfdG9nZ2xlX3JhZGlvOworCXJmay0+ZGF0YSA9IGRhdGE7CisjaWZkZWYgQ09ORklHX1JGS0lMTF9MRURTCisJcmZrLT5sZWRfdHJpZ2dlci5uYW1lID0gInRvc2EtYnQiOworI2VuZGlmCisKKwlyYyA9IHJma2lsbF9yZWdpc3RlcihyZmspOworCWlmIChyYykKKwkJZ290byBlcnJfcmZraWxsOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCByZmspOworCisJcmV0dXJuIDA7CisKK2Vycl9yZmtpbGw6CisJaWYgKHJmaykKKwkJcmZraWxsX2ZyZWUocmZrKTsKKwlyZmsgPSBOVUxMOworZXJyX3Jma19hbGxvYzoKKwl0b3NhX2J0X29mZihkYXRhKTsKK2Vycl9wd3JfZGlyOgorCWdwaW9fZnJlZShkYXRhLT5ncGlvX3B3cik7CitlcnJfcHdyOgorZXJyX3Jlc2V0X2RpcjoKKwlncGlvX2ZyZWUoZGF0YS0+Z3Bpb19yZXNldCk7CitlcnJfcmVzZXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0b3NhX2J0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRvc2FfYnRfZGF0YSAqZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJma2lsbCAqcmZrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlpZiAocmZrKQorCQlyZmtpbGxfdW5yZWdpc3RlcihyZmspOworCXJmayA9IE5VTEw7CisKKwl0b3NhX2J0X29mZihkYXRhKTsKKworCWdwaW9fZnJlZShkYXRhLT5ncGlvX3B3cik7CisJZ3Bpb19mcmVlKGRhdGEtPmdwaW9fcmVzZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRvc2FfYnRfZHJpdmVyID0geworCS5wcm9iZSA9IHRvc2FfYnRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRvc2FfYnRfcmVtb3ZlKSwKKworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRvc2EtYnQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCB0b3NhX2J0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0b3NhX2J0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0b3NhX2J0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdG9zYV9idF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0b3NhX2J0X2luaXQpOworbW9kdWxlX2V4aXQodG9zYV9idF9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCBhYjRhOWY1Li5mZWExN2NlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0xOCwzMCArMTgsMzEgQEAKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90YzYzOTN4Yi5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CisjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZnAtcHhhMjV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJkYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2kyYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VkYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3Rvc2FfYnQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC90b3NhLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KQEAgLTg2LDcgKzg3LDcgQEAKIAlHUElPNl9NTUNfQ0xLLAogCUdQSU84X01NQ19DUzAsCiAJR1BJTzlfR1BJTywgLyogRGV0ZWN0ICovCi0JLy8gR1BJTzEwIG5TRF9JTlQKKwlHUElPMTBfR1BJTywgLyogblNEX0lOVCAqLwogCiAJLyogQ0YgKi8KIAlHUElPMTNfR1BJTywgLyogQ0RfSVJRICovCkBAIC0xMjQsMzQgKzEyNSwzNCBAQAogCUdQSU80NF9CVFVBUlRfQ1RTLAogCUdQSU80NV9CVFVBUlRfUlRTLAogCi0JLyogSXJEQSAqLwotCUdQSU80Nl9TVFVBUlRfUlhELAotCUdQSU80N19TVFVBUlRfVFhELAotCiAJLyogS2V5YmQgKi8KLQlHUElPNThfR1BJTywKLQlHUElPNTlfR1BJTywKLQlHUElPNjBfR1BJTywKLQlHUElPNjFfR1BJTywKLQlHUElPNjJfR1BJTywKLQlHUElPNjNfR1BJTywKLQlHUElPNjRfR1BJTywKLQlHUElPNjVfR1BJTywKLQlHUElPNjZfR1BJTywKLQlHUElPNjdfR1BJTywKLQlHUElPNjhfR1BJTywKLQlHUElPNjlfR1BJTywKLQlHUElPNzBfR1BJTywKLQlHUElPNzFfR1BJTywKLQlHUElPNzJfR1BJTywKLQlHUElPNzNfR1BJTywKLQlHUElPNzRfR1BJTywKLQlHUElPNzVfR1BJTywKKwlHUElPNThfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAorCUdQSU81OV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCisJR1BJTzYwX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKKwlHUElPNjFfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAorCUdQSU82Ml9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCisJR1BJTzYzX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKKwlHUElPNjRfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAorCUdQSU82NV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCisJR1BJTzY2X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKKwlHUElPNjdfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAorCUdQSU82OF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCisJR1BJTzY5X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKKwlHUElPNzBfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAorCUdQSU83MV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCisJR1BJTzcyX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKKwlHUElPNzNfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAorCUdQSU83NF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCisJR1BJTzc1X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKIAogCS8qIFNQSSAqLwogCUdQSU84MV9TU1AyX0NMS19PVVQsCiAJR1BJTzgyX1NTUDJfRlJNX09VVCwKIAlHUElPODNfU1NQMl9UWEQsCisKKwkvKiBJckRBIGlzIG1hbmFnZWQgaW4gb3RoZXIgd2F5ICovCisJR1BJTzQ2X0dQSU8sCisJR1BJTzQ3X0dQSU8sCiB9OwogCiAvKgpAQCAtMjQ5LDYgKzI1MCwxNSBAQAogCiAJdG9zYV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAKKwllcnIgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX25TRF9ERVRFQ1QsICJNTUMvU0QgY2FyZCBkZXRlY3QiKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogY2FuJ3QgcmVxdWVzdCBuU0RfREVURUNUIGdwaW9cbiIpOworCQlnb3RvIGVycl9ncGlvX2RldGVjdDsKKwl9CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoVE9TQV9HUElPX25TRF9ERVRFQ1QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2dwaW9fZGV0ZWN0X2RpcjsKKwogCWVyciA9IHJlcXVlc3RfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgdG9zYV9kZXRlY3RfaW50LAogCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJCSJNTUMvU0QgY2FyZCBkZXRlY3QiLCBkYXRhKTsKQEAgLTI1Nyw3ICsyNjcsNyBAQAogCQlnb3RvIGVycl9pcnE7CiAJfQogCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19TRF9XUCwgInNkX3dwIik7CisJZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19TRF9XUCwgIlNEIFdyaXRlIFByb3RlY3QiKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogY2FuJ3QgcmVxdWVzdCBTRF9XUCBncGlvXG4iKTsKIAkJZ290byBlcnJfZ3Bpb193cDsKQEAgLTI2Niw3ICsyNzYsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2dwaW9fd3BfZGlyOwogCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19QV1JfT04sICJzZF9wd3IiKTsKKwllcnIgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX1BXUl9PTiwgIlNEIFBvd2VyIik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgU0RfUFdSIGdwaW9cbiIpOwogCQlnb3RvIGVycl9ncGlvX3B3cjsKQEAgLTI3NSw4ICsyODUsMjAgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9ncGlvX3B3cl9kaXI7CiAKKwllcnIgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX25TRF9JTlQsICJTRCBJbnQiKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogY2FuJ3QgcmVxdWVzdCBTRF9QV1IgZ3Bpb1xuIik7CisJCWdvdG8gZXJyX2dwaW9faW50OworCX0KKwllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChUT1NBX0dQSU9fblNEX0lOVCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZ3Bpb19pbnRfZGlyOworCiAJcmV0dXJuIDA7CiAKK2Vycl9ncGlvX2ludF9kaXI6CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19uU0RfSU5UKTsKK2Vycl9ncGlvX2ludDoKIGVycl9ncGlvX3B3cl9kaXI6CiAJZ3Bpb19mcmVlKFRPU0FfR1BJT19QV1JfT04pOwogZXJyX2dwaW9fcHdyOgpAQCAtMjg1LDYgKzMwNyw5IEBACiBlcnJfZ3Bpb193cDoKIAlmcmVlX2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwogZXJyX2lycToKK2Vycl9ncGlvX2RldGVjdF9kaXI6CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19uU0RfREVURUNUKTsKK2Vycl9ncGlvX2RldGVjdDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMDYsOSArMzMxLDExIEBACiAKIHN0YXRpYyB2b2lkIHRvc2FfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogeworCWdwaW9fZnJlZShUT1NBX0dQSU9fblNEX0lOVCk7CiAJZ3Bpb19mcmVlKFRPU0FfR1BJT19QV1JfT04pOwogCWdwaW9fZnJlZShUT1NBX0dQSU9fU0RfV1ApOwogCWZyZWVfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19uU0RfREVURUNUKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSB0b3NhX21jaV9wbGF0Zm9ybV9kYXRhID0gewpAQCAtMzIyLDI5ICszNDksNTUgQEAKIC8qCiAgKiBJcmRhCiAgKi8KK3N0YXRpYyB2b2lkIHRvc2FfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCit7CisJaWYgKG1vZGUgJiBJUl9PRkYpIHsKKwkJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX0lSX1BPV0VSRFdOLCAwKTsKKwkJcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRPU0FfR1BJT19JUkRBX1RYLCAwKTsKKwl9IGVsc2UgeworCQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOworCQlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fSVJfUE9XRVJEV04sIDEpOworCX0KK30KKwogc3RhdGljIGludCB0b3NhX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKIAorCXJldCA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fSVJEQV9UWCwgIklyREEgVFgiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl90eDsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoVE9TQV9HUElPX0lSREFfVFgsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3R4X2RpcjsKKwogCXJldCA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fSVJfUE9XRVJEV04sICJJckRBIHBvd2VyZG93biIpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX3B3cjsKIAogCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChUT1NBX0dQSU9fSVJfUE9XRVJEV04sIDApOwogCWlmIChyZXQpCi0JCWdwaW9fZnJlZShUT1NBX0dQSU9fSVJfUE9XRVJEV04pOworCQlnb3RvIGVycl9wd3JfZGlyOwogCisJdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoZGV2LCBJUl9TSVJNT0RFIHwgSVJfT0ZGKTsKKworCXJldHVybiAwOworCitlcnJfcHdyX2RpcjoKKwlncGlvX2ZyZWUoVE9TQV9HUElPX0lSX1BPV0VSRFdOKTsKK2Vycl9wd3I6CitlcnJfdHhfZGlyOgorCWdwaW9fZnJlZShUT1NBX0dQSU9fSVJEQV9UWCk7CitlcnJfdHg6CiAJcmV0dXJuIHJldDsKLQl9Cit9CiAKIHN0YXRpYyB2b2lkIHRvc2FfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoZGV2LCBJUl9TSVJNT0RFIHwgSVJfT0ZGKTsKIAlncGlvX2ZyZWUoVE9TQV9HUElPX0lSX1BPV0VSRFdOKTsKLX0KLQotc3RhdGljIHZvaWQgdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fSVJfUE9XRVJEV04sICEobW9kZSAmIElSX09GRikpOworCWdwaW9fZnJlZShUT1NBX0dQSU9fSVJEQV9UWCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHRvc2FfZmljcF9wbGF0Zm9ybV9kYXRhID0gewpAQCAtMzU1LDYgKzQwOCw3MCBAQAogfTsKIAogLyoKKyAqIFRvc2EgQUMgSU4KKyAqLworc3RhdGljIGludCB0b3NhX3Bvd2VyX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX0FDX0lOLCAiYWMgaW4iKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ncGlvX3JlcTsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KFRPU0FfR1BJT19BQ19JTik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ3Bpb19pbjsKKworCXJldHVybiAwOworCitlcnJfZ3Bpb19pbjoKKwlncGlvX2ZyZWUoVE9TQV9HUElPX0FDX0lOKTsKK2Vycl9ncGlvX3JlcToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0b3NhX3Bvd2VyX2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShUT1NBX0dQSU9fQUNfSU4pOworfQorCitzdGF0aWMgaW50IHRvc2FfcG93ZXJfYWNfb25saW5lKHZvaWQpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKFRPU0FfR1BJT19BQ19JTikgPT0gMDsKK30KKworc3RhdGljIGNoYXIgKnRvc2FfYWNfc3VwcGxpZWRfdG9bXSA9IHsKKwkibWFpbi1iYXR0ZXJ5IiwKKwkiYmFja3VwLWJhdHRlcnkiLAorCSJqYWNrZXQtYmF0dGVyeSIsCit9OworCitzdGF0aWMgc3RydWN0IHBkYV9wb3dlcl9wZGF0YSB0b3NhX3Bvd2VyX2RhdGEgPSB7CisJLmluaXQJCQk9IHRvc2FfcG93ZXJfaW5pdCwKKwkuaXNfYWNfb25saW5lCQk9IHRvc2FfcG93ZXJfYWNfb25saW5lLAorCS5leGl0CQkJPSB0b3NhX3Bvd2VyX2V4aXQsCisJLnN1cHBsaWVkX3RvCQk9IHRvc2FfYWNfc3VwcGxpZWRfdG8sCisJLm51bV9zdXBwbGljYW50cwk9IEFSUkFZX1NJWkUodG9zYV9hY19zdXBwbGllZF90byksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHRvc2FfcG93ZXJfcmVzb3VyY2VbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJhYyIsCisJCS5zdGFydAkJPSBncGlvX3RvX2lycShUT1NBX0dQSU9fQUNfSU4pLAorCQkuZW5kCQk9IGdwaW9fdG9faXJxKFRPU0FfR1BJT19BQ19JTiksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSB8CisJCQkJICBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8CisJCQkJICBJT1JFU09VUkNFX0lSUV9MT1dFREdFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0b3NhX3Bvd2VyX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInBkYS1wb3dlciIsCisJLmlkCQkJPSAtMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmdG9zYV9wb3dlcl9kYXRhLAorCS5yZXNvdXJjZQkJPSB0b3NhX3Bvd2VyX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUodG9zYV9wb3dlcl9yZXNvdXJjZSksCit9OworCisvKgogICogVG9zYSBLZXlib2FyZAogICovCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0b3Nha2JkX2RldmljZSA9IHsKQEAgLTQzOSw3ICs1NTYsNyBAQAogCX0sCiAJewogCQkubmFtZQkJCT0gInRvc2E6Ymx1ZTpibHVldG9vdGgiLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gInRvc2EtYnQiLAogCQkuZ3BpbwkJCT0gVE9TQV9HUElPX0JUX0xFRCwKIAl9LAogfTsKQEAgLTQ1NywyMSArNTc0LDE4NCBAQAogCX0sCiB9OwogCisvKgorICogVG9zaGliYSBNb2JpbGUgSU8gQ29udHJvbGxlcgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHRjNjM5M3hiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gVE9TQV9MQ0RDX1BIWVMsCisJCS5lbmQJPSBUT1NBX0xDRENfUEhZUyArIDB4M2ZmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKworCVsxXSA9IHsKKwkJLnN0YXJ0CT0gVE9TQV9JUlFfR1BJT19UQzYzOTNYQl9JTlQsCisJCS5lbmQJPSBUT1NBX0lSUV9HUElPX1RDNjM5M1hCX0lOVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKKworc3RhdGljIGludCB0b3NhX3RjNjM5M3hiX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJjOworCisJcmMgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX1RDNjM5M1hCX1JFU1RfSU4sICJ0YzYzOTN4YiAjcGNsciIpOworCWlmIChyYykKKwkJZ290byBlcnJfcmVxX3BjbHI7CisJcmMgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX1RDNjM5M1hCX1NVU1BFTkQsICJ0YzYzOTN4YiAjc3VzcGVuZCIpOworCWlmIChyYykKKwkJZ290byBlcnJfcmVxX3N1c3BlbmQ7CisJcmMgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX1RDNjM5M1hCX0wzVl9PTiwgImwzdiIpOworCWlmIChyYykKKwkJZ290byBlcnJfcmVxX2wzdjsKKwlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChUT1NBX0dQSU9fVEM2MzkzWEJfTDNWX09OLCAwKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2Rpcl9sM3Y7CisJcmMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoVE9TQV9HUElPX1RDNjM5M1hCX1NVU1BFTkQsIDApOworCWlmIChyYykKKwkJZ290byBlcnJfZGlyX3N1c3BlbmQ7CisJcmMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoVE9TQV9HUElPX1RDNjM5M1hCX1JFU1RfSU4sIDApOworCWlmIChyYykKKwkJZ290byBlcnJfZGlyX3BjbHI7CisKKwltZGVsYXkoMSk7CisKKwlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fVEM2MzkzWEJfU1VTUEVORCwgMSk7CisKKwltZGVsYXkoMTApOworCisJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX1RDNjM5M1hCX1JFU1RfSU4sIDEpOworCWdwaW9fc2V0X3ZhbHVlKFRPU0FfR1BJT19UQzYzOTNYQl9MM1ZfT04sIDEpOworCisJcmV0dXJuIDA7CitlcnJfZGlyX3BjbHI6CitlcnJfZGlyX3N1c3BlbmQ6CitlcnJfZGlyX2wzdjoKKwlncGlvX2ZyZWUoVE9TQV9HUElPX1RDNjM5M1hCX0wzVl9PTik7CitlcnJfcmVxX2wzdjoKKwlncGlvX2ZyZWUoVE9TQV9HUElPX1RDNjM5M1hCX1NVU1BFTkQpOworZXJyX3JlcV9zdXNwZW5kOgorCWdwaW9fZnJlZShUT1NBX0dQSU9fVEM2MzkzWEJfUkVTVF9JTik7CitlcnJfcmVxX3BjbHI6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHRvc2FfdGM2MzkzeGJfZGlzYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19UQzYzOTNYQl9MM1ZfT04pOworCWdwaW9fZnJlZShUT1NBX0dQSU9fVEM2MzkzWEJfU1VTUEVORCk7CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19UQzYzOTNYQl9SRVNUX0lOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvc2FfdGM2MzkzeGJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fVEM2MzkzWEJfU1VTUEVORCwgMSk7CisJbWRlbGF5KDEwKTsKKwlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fVEM2MzkzWEJfTDNWX09OLCAxKTsKKwltZGVsYXkoMTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9zYV90YzYzOTN4Yl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fVEM2MzkzWEJfTDNWX09OLCAwKTsKKwlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fVEM2MzkzWEJfU1VTUEVORCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB0b3NhX25hbmRfcGFydGl0aW9uW10gPSB7CisJeworCQkubmFtZQk9ICJzbWYiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSA3ICogMTAyNCAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lCT0gInJvb3QiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQk9IDI4ICogMTAyNCAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lCT0gImhvbWUiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyB1aW50OF90IHNjYW5fZmZfcGF0dGVybltdID0geyAweGZmLCAweGZmIH07CisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgdG9zYV90YzYzOTN4Yl9uYW5kX2JidCA9IHsKKwkub3B0aW9ucwk9IDAsCisJLm9mZnMJCT0gNCwKKwkubGVuCQk9IDIsCisJLnBhdHRlcm4JPSBzY2FuX2ZmX3BhdHRlcm4KK307CisKK3N0YXRpYyBzdHJ1Y3QgdG1pb19uYW5kX2RhdGEgdG9zYV90YzYzOTN4Yl9uYW5kX2NvbmZpZyA9IHsKKwkubnVtX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKHRvc2FfbmFuZF9wYXJ0aXRpb24pLAorCS5wYXJ0aXRpb24JPSB0b3NhX25hbmRfcGFydGl0aW9uLAorCS5iYWRibG9ja19wYXR0ZXJuID0gJnRvc2FfdGM2MzkzeGJfbmFuZF9iYnQsCit9OworCitzdGF0aWMgc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgdG9zYV90YzYzOTN4Yl9zZXR1cCA9IHsKKwkuc2NyX3BsbDJjcgk9IDB4MGNjMSwKKwkuc2NyX2dwZXIJPSAweDMzMDAsCisJLnNjcl9ncG9fZHNyCT0KKwkJVE9TQV9UQzYzOTNYQl9HUElPX0JJVChUT1NBX0dQSU9fQ0FSRF9WQ0NfT04pLAorCS5zY3JfZ3BvX2RvZWNyCT0KKwkJVE9TQV9UQzYzOTNYQl9HUElPX0JJVChUT1NBX0dQSU9fQ0FSRF9WQ0NfT04pLAorCisJLmlycV9iYXNlCT0gSVJRX0JPQVJEX1NUQVJULAorCS5ncGlvX2Jhc2UJPSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSwKKworCS5lbmFibGUJCT0gdG9zYV90YzYzOTN4Yl9lbmFibGUsCisJLmRpc2FibGUJPSB0b3NhX3RjNjM5M3hiX2Rpc2FibGUsCisJLnN1c3BlbmQJPSB0b3NhX3RjNjM5M3hiX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB0b3NhX3RjNjM5M3hiX3Jlc3VtZSwKKworCS5uYW5kX2RhdGEJPSAmdG9zYV90YzYzOTN4Yl9uYW5kX2NvbmZpZywKK307CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdGM2MzkzeGJfZGV2aWNlID0geworCS5uYW1lCT0gInRjNjM5M3hiIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZ0b3NhX3RjNjM5M3hiX3NldHVwLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjNjM5M3hiX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdGM2MzkzeGJfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCB0b3NhX2J0X2RhdGEgdG9zYV9idF9kYXRhID0geworCS5ncGlvX3B3cgk9IFRPU0FfR1BJT19CVF9QV1JfRU4sCisJLmdwaW9fcmVzZXQJPSBUT1NBX0dQSU9fQlRfUkVTRVQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0b3NhX2J0X2RldmljZSA9IHsKKwkubmFtZQk9ICJ0b3NhLWJ0IiwKKwkuaWQJPSAtMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdG9zYV9idF9kYXRhLAorfTsKKworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnRvc2FzY29vcF9kZXZpY2UsCiAJJnRvc2FzY29vcF9qY19kZXZpY2UsCisJJnRjNjM5M3hiX2RldmljZSwKKwkmdG9zYV9wb3dlcl9kZXZpY2UsCiAJJnRvc2FrYmRfZGV2aWNlLAogCSZ0b3NhX2dwaW9fa2V5c19kZXZpY2UsCiAJJnRvc2FsZWRfZGV2aWNlLAorCSZ0b3NhX2J0X2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIHRvc2FfcG93ZXJvZmYodm9pZCkKIHsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoVE9TQV9HUElPX09OX1JFU0VULCAwKTsKLQlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fT05fUkVTRVQsIDEpOwotCi0JbWRlbGF5KDEwMDApOwotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdnJyk7CiB9CiAKIHN0YXRpYyB2b2lkIHRvc2FfcmVzdGFydChjaGFyIG1vZGUpCkBAIC00ODUsMTAgKzc2NSwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdG9zYV9pbml0KHZvaWQpCiB7CisJaW50IGR1bW15OworCiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUodG9zYV9waW5fY29uZmlnKSk7CiAJZ3Bpb19zZXRfd2FrZShNRlBfUElOX0dQSU8xLCAxKTsKIAkvKiBXZSBjYW4ndCBwYXNzIHRvIGdwaW8ta2V5cyBzaW5jZSBpdCB3aWxsIGRyb3AgdGhlIFJlc2V0IGFsdGZ1bmMgKi8KIAorCWluaXRfZ3Bpb19yZXNldChUT1NBX0dQSU9fT05fUkVTRVQpOworCiAJcG1fcG93ZXJfb2ZmID0gdG9zYV9wb3dlcm9mZjsKIAlhcm1fcG1fcmVzdGFydCA9IHRvc2FfcmVzdGFydDsKIApAQCAtNDk3LDYgKzc4MSwxMCBAQAogCS8qIGVuYWJsZSBiYXR0X2ZhdWx0ICovCiAJUE1DUiA9IDB4MDE7CiAKKwlkdW1teSA9IGdwaW9jaGlwX3Jlc2VydmUoVE9TQV9TQ09PUF9HUElPX0JBU0UsIDEyKTsKKwlkdW1teSA9IGdwaW9jaGlwX3Jlc2VydmUoVE9TQV9TQ09PUF9KQ19HUElPX0JBU0UsIDEyKTsKKwlkdW1teSA9IGdwaW9jaGlwX3Jlc2VydmUoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UsIDE2KTsKKwogCXB4YV9zZXRfbWNpX2luZm8oJnRvc2FfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmdG9zYV9maWNwX3BsYXRmb3JtX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKaW5kZXggNjFlMjQ0MC4uZGVlN2JmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCkBAIC0yNTQsNiArMjU0LDcgQEAKIAkJLyogRmFzdCBtb2RlICovCiAJCXRyaXplcHNfY29ueHNfaXJjciB8PSBDb25YU19JUkNSX01PREU7CiAJfQorCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7CiAJaWYgKG1vZGUgJiBJUl9PRkYpIHsKIAkJdHJpemVwc19jb254c19pcmNyIHw9IENvblhTX0lSQ1JfU0Q7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCmluZGV4IDY2YjQ0NmMuLjhmY2E2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTI5LDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC96eWxvbml0ZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTI3eF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEzeHhfbmFuZC5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKQEAgLTM3LDYgKzM5LDggQEAKIHN0cnVjdCBwbGF0Zm9ybV9tbWNfc2xvdCB6eWxvbml0ZV9tbWNfc2xvdFtNQVhfU0xPVFNdOwogCiBpbnQgZ3Bpb19ldGhfaXJxOworaW50IGdwaW9fZGVidWdfbGVkMTsKK2ludCBncGlvX2RlYnVnX2xlZDI7CiAKIGludCB3bTk3MTNfaXJxOwogCkBAIC01NiwxMyArNjAsNTcgQEAKIAl9CiB9OwogCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSB6eWxvbml0ZV9zbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzhCSVQgfCBTTUM5MVhfVVNFXzE2QklUIHwKKwkJICBTTUM5MVhfTk9XQUlUIHwgU01DOTFYX1VTRV9ETUEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzbWM5MXgiLAogCS5pZAkJPSAwLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ6eWxvbml0ZV9zbWM5MXhfaW5mbywKKwl9LAogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19HUElPX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgenlsb25pdGVfZGVidWdfbGVkc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCQk9ICJ6eWxvbml0ZTp5ZWxsb3c6MSIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCQk9ICJ6eWxvbml0ZTp5ZWxsb3c6MiIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSB6eWxvbml0ZV9kZWJ1Z19sZWRzX2luZm8gPSB7CisJLmxlZHMJCT0genlsb25pdGVfZGVidWdfbGVkcywKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHp5bG9uaXRlX2RlYnVnX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugenlsb25pdGVfZGV2aWNlX2xlZHMgPSB7CisJLm5hbWUJCT0gImxlZHMtZ3BpbyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ6eWxvbml0ZV9kZWJ1Z19sZWRzX2luZm8sCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHp5bG9uaXRlX2luaXRfbGVkcyh2b2lkKQoreworCXp5bG9uaXRlX2RlYnVnX2xlZHNbMF0uZ3BpbyA9IGdwaW9fZGVidWdfbGVkMTsKKwl6eWxvbml0ZV9kZWJ1Z19sZWRzWzFdLmdwaW8gPSBncGlvX2RlYnVnX2xlZDI7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnp5bG9uaXRlX2RldmljZV9sZWRzKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgenlsb25pdGVfaW5pdF9sZWRzKHZvaWQpIHt9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHp5bG9uaXRlX2JhY2tsaWdodF9kYXRhID0gewogCS5wd21faWQJCT0gMywKQEAgLTI1OSw3ICszMDcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHp5bG9uaXRlX2luaXRfbW1jKHZvaWQpIHt9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4X01PRFVMRVMpCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFKQogc3RhdGljIHVuc2lnbmVkIGludCB6eWxvbml0ZV9tYXRyaXhfa2V5X21hcFtdID0gewogCS8qIEtFWShyb3csIGNvbCwga2V5X2NvZGUpICovCiAJS0VZKDAsIDAsIEtFWV9BKSwgS0VZKDAsIDEsIEtFWV9CKSwgS0VZKDAsIDIsIEtFWV9DKSwgS0VZKDAsIDUsIEtFWV9EKSwKQEAgLTMyNCw2ICszNzIsNTcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB6eWxvbml0ZV9pbml0X2tleXBhZCh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24genlsb25pdGVfbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJWzBdID0geworCQkubmFtZSAgICAgICAgPSAiQm9vdGxvYWRlciIsCisJCS5vZmZzZXQgICAgICA9IDAsCisJCS5zaXplICAgICAgICA9IDB4MDYwMDAwLAorCQkubWFza19mbGFncyAgPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUgICAgICAgID0gIktlcm5lbCIsCisJCS5vZmZzZXQgICAgICA9IDB4MDYwMDAwLAorCQkuc2l6ZSAgICAgICAgPSAweDIwMDAwMCwKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lICAgICAgICA9ICJGaWxlc3lzdGVtIiwKKwkJLm9mZnNldCAgICAgID0gMHgwMjYwMDAwLAorCQkuc2l6ZSAgICAgICAgPSAweDMwMDAwMDAsICAgICAvKiA0OE0gLSByb290ZnMgKi8KKwl9LAorCVszXSA9IHsKKwkJLm5hbWUgICAgICAgID0gIk1hc3NTdG9yYWdlIiwKKwkJLm9mZnNldCAgICAgID0gMHgzMjYwMDAwLAorCQkuc2l6ZSAgICAgICAgPSAweDNkNDAwMDAsCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lICAgICAgICA9ICJCQlQiLAorCQkub2Zmc2V0ICAgICAgPSAweDZGQTAwMDAsCisJCS5zaXplICAgICAgICA9IDB4ODAwMDAsCisJCS5tYXNrX2ZsYWdzICA9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCS8qIE5PVEU6IHdlIHJlc2VydmUgc29tZSBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgTkFORCBmbGFzaCBmb3IKKwkgKiBiYWQgYmxvY2sgbWFuYWdlbWVudCwgYW5kIHRoZSBtYXggbnVtYmVyIG9mIHJlbG9jYXRpb24gYmxvY2tzCisJICogZGlmZmVycyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiBQbGVhc2UgdGFrZSBjYXJlIHdpdGggaXQgd2hlbgorCSAqIGRlZmluaW5nIHRoZSBwYXJ0aXRpb24gdGFibGUuCisJICovCit9OworCitzdGF0aWMgc3RydWN0IHB4YTN4eF9uYW5kX3BsYXRmb3JtX2RhdGEgenlsb25pdGVfbmFuZF9pbmZvID0geworCS5lbmFibGVfYXJiaXRlcgk9IDEsCisJLnBhcnRzCQk9IHp5bG9uaXRlX25hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHp5bG9uaXRlX25hbmRfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgenlsb25pdGVfaW5pdF9uYW5kKHZvaWQpCit7CisJcHhhM3h4X3NldF9uYW5kX2luZm8oJnp5bG9uaXRlX25hbmRfaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHp5bG9uaXRlX2luaXRfbmFuZCh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19NVERfTkFORF9QWEEzeHggfHwgQ09ORklHX01URF9OQU5EX1BYQTN4eF9NT0RVTEUgKi8KKwogc3RhdGljIHZvaWQgX19pbml0IHp5bG9uaXRlX2luaXQodm9pZCkKIHsKIAkvKiBib2FyZC1wcm9jZXNzb3Igc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KQEAgLTM0Miw2ICs0NDEsOCBAQAogCXp5bG9uaXRlX2luaXRfbGNkKCk7CiAJenlsb25pdGVfaW5pdF9tbWMoKTsKIAl6eWxvbml0ZV9pbml0X2tleXBhZCgpOworCXp5bG9uaXRlX2luaXRfbmFuZCgpOworCXp5bG9uaXRlX2luaXRfbGVkcygpOwogfQogCiBNQUNISU5FX1NUQVJUKFpZTE9OSVRFLCAiUFhBM3h4IFBsYXRmb3JtIERldmVsb3BtZW50IEtpdCAoYWthIFp5bG9uaXRlKSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMwMC5jCmluZGV4IDZmN2FlOTcuLmIyOGQ0NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMwMC5jCkBAIC0xNiw5ICsxNiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgogCiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZnAtcHhhMzAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaTJjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvenlsb25pdGUuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKQEAgLTEwOSw2ICsxMTIsMTAgQEAKIAlHUElPMTJfTU1DMl9EQVQzLAogCUdQSU8xM19NTUMyX0NMSywKIAlHUElPMTRfTU1DMl9DTUQsCisKKwkvKiBTdGFuZGFyZCBJMkMgKi8KKwlHUElPMjFfSTJDX1NDTCwKKwlHUElPMjJfSTJDX1NEQSwKIH07CiAKIHN0YXRpYyBtZnBfY2ZnX3QgcHhhMzAwX21mcF9jZmdbXSBfX2luaXRkYXRhID0gewpAQCAtMTkyLDYgKzE5OSwzOSBAQAogCQlweGEzeHhfbWZwX3dyaXRlKGxjZF9kZXRlY3RfcGluc1tpXSwgbWZwcl9zYXZlW2ldKTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIGdwaW9fZXhwW10gPSB7CisJWzBdID0geworCQkuZ3Bpb19iYXNlCT0gMTI4LAorCX0sCisJWzFdID0geworCQkuZ3Bpb19iYXNlCT0gMTQ0LAorCX0sCit9OworCitzdHJ1Y3QgaTJjX2JvYXJkX2luZm8genlsb25pdGVfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS50eXBlCQk9ICJwY2E5NTM5IiwKKwkJLmFkZHIJCT0gMHg3NCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19leHBbMF0sCisJCS5pcnEJCT0gSVJRX0dQSU8oMTgpLAorCX0sIHsKKwkJLnR5cGUJCT0gInBjYTk1MzkiLAorCQkuYWRkcgkJPSAweDc1LAorCQkucGxhdGZvcm1fZGF0YQk9ICZncGlvX2V4cFsxXSwKKwkJLmlycQkJPSBJUlFfR1BJTygxOSksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB6eWxvbml0ZV9pbml0X2kyYyh2b2lkKQoreworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgQVJSQVlfQU5EX1NJWkUoenlsb25pdGVfaTJjX2JvYXJkX2luZm8pKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgenlsb25pdGVfaW5pdF9pMmModm9pZCkge30KKyNlbmRpZgorCiB2b2lkIF9faW5pdCB6eWxvbml0ZV9weGEzMDBfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfcHhhMzAwKCkgfHwgY3B1X2lzX3B4YTMxMCgpKSB7CkBAIC0yMDcsNiArMjQ3LDggQEAKIAogCQkvKiBXTTk3MTMgSVJRICovCiAJCXdtOTcxM19pcnEgPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8yNik7CisKKwkJenlsb25pdGVfaW5pdF9pMmMoKTsKIAl9CiAKIAlpZiAoY3B1X2lzX3B4YTMwMCgpKSB7CkBAIC0yMjIsNCArMjY0LDggQEAKIAkJenlsb25pdGVfbW1jX3Nsb3RbMl0uZ3Bpb19jZCA9IEVYVF9HUElPKDMwKTsKIAkJenlsb25pdGVfbW1jX3Nsb3RbMl0uZ3Bpb193cCA9IEVYVF9HUElPKDMxKTsKIAl9CisKKwkvKiBHUElPcyBmb3IgRGVidWcgTEVEcyAqLworCWdwaW9fZGVidWdfbGVkMSA9IEVYVF9HUElPKDI1KTsKKwlncGlvX2RlYnVnX2xlZDIgPSBFWFRfR1BJTygyNik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMyMC5jCmluZGV4IDJiNGZjMzQuLjJiN2ZiYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMyMC5jCkBAIC0xMTYsNiArMTE2LDEwIEBACiAJR1BJTzI3X01NQzJfREFUMywKIAlHUElPMjhfTU1DMl9DTEssCiAJR1BJTzI5X01NQzJfQ01ELAorCisJLyogRGVidWcgTEVEcyAqLworCUdQSU8xXzJfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKKwlHUElPNF8yX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0hJR0gsCiB9OwogCiAjZGVmaW5lIE5VTV9MQ0RfREVURUNUX1BJTlMJNwpAQCAtMTg5LDYgKzE5Myw4IEBACiAKIAkJLyogR1BJTyBwaW4gYXNzaWdubWVudCAqLwogCQlncGlvX2V0aF9pcnEJPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU85KTsKKwkJZ3Bpb19kZWJ1Z19sZWQxCT0gbWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPMV8yKTsKKwkJZ3Bpb19kZWJ1Z19sZWQyCT0gbWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPNF8yKTsKIAogCQkvKiBNTUMgY2FyZCBkZXRlY3QgJiB3cml0ZSBwcm90ZWN0IGZvciBjb250cm9sbGVyIDAgKi8KIAkJenlsb25pdGVfbW1jX3Nsb3RbMF0uZ3Bpb19jZCAgPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8xKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jCmluZGV4IGZjOTdmZTUuLmI1ODA5YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYwpAQCAtMTAzLDcgKzEwMyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19ncGlvMjcgPSB7Ci0JLm5hbWUJCT0gIkdQSU8yN19DTEsiLAorCS5uYW1lCQk9ICJTQTExMTFfQ0xLIiwKIAkucmF0ZQkJPSAzNjg2NDAwLAogCS5lbmFibGUJCT0gY2xrX2dwaW8yN19lbmFibGUsCiAJLmRpc2FibGUJPSBjbGtfZ3BpbzI3X2Rpc2FibGUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21tL01ha2VmaWxlCmluZGV4IGY2NGI5MjUuLjJlMjdhOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21tL01ha2VmaWxlCkBAIC03NiwzICs3Niw1IEBACiAKIG9iai0kKENPTkZJR19DQUNIRV9GRVJPQ0VPTl9MMikJKz0gY2FjaGUtZmVyb2Nlb24tbDIubwogb2JqLSQoQ09ORklHX0NBQ0hFX0wyWDApCSs9IGNhY2hlLWwyeDAubworb2JqLSQoQ09ORklHX0NBQ0hFX1hTQzNMMikJKz0gY2FjaGUteHNjM2wyLm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKaW5kZXggNmYzM2Y1OC4uZmYxNDEzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAl9CiAKIAltYm94LT5kZXYuY2xhc3MgPSAmb21hcF9tYm94X2NsYXNzOwotCXN0cmxjcHkobWJveC0+ZGV2LmJ1c19pZCwgbWJveC0+bmFtZSwgS09CSl9OQU1FX0xFTik7CisJZGV2X3NldF9uYW1lKCZtYm94LT5kZXYsICIlcyIsIG1ib3gtPm5hbWUpOwogCWRldl9zZXRfZHJ2ZGF0YSgmbWJveC0+ZGV2LCBtYm94KTsKIAogCXJldCA9IGRldmljZV9yZWdpc3RlcigmbWJveC0+ZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDBiZTU2MzAuLjhiOGY1NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IE1vbiBKdWwgNyAxNjoyNTozOSAyMDA4CisjIExhc3QgdXBkYXRlOiBTdW4gSnVsIDEzIDEyOjA0OjA1IDIwMDgKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMTgxMiwzICsxODEyLDExIEBACiBrczg2OTVfc29mdHBsYwkJTUFDSF9LUzg2OTVfU09GVFBMQwlLUzg2OTVfU09GVFBMQwkJMTgyMgogZ3ByaXNjNAkJCU1BQ0hfR1BSSVNDNAkJR1BSSVNDNAkJCTE4MjMKIHN0YW1wOTI2MAkJTUFDSF9TVEFNUDkyNjAJCVNUQU1QOTI2MAkJMTgyNAorc21kazY0MzAJCU1BQ0hfU01ESzY0MzAJCVNNREs2NDMwCQkxODI1CitzbWRrYzEwMAkJTUFDSF9TTURLQzEwMAkJU01ES0MxMDAJCTE4MjYKK3Rhdm9yZXZiCQlNQUNIX1RBVk9SRVZCCQlUQVZPUkVWQgkJMTgyNworc2FhcgkJCU1BQ0hfU0FBUgkJU0FBUgkJCTE4MjgKK2RlaXN0ZXJfZXllY2FtCQlNQUNIX0RFSVNURVJfRVlFQ0FNCURFSVNURVJfRVlFQ0FNCQkxODI5CithdDkxc2FtOW0xMGVrCQlNQUNIX0FUOTFTQU05TTEwRUsJQVQ5MVNBTTlNMTBFSwkJMTgzMAorbGlua3N0YXRpb25fcHJvZHVvCU1BQ0hfTElOS1NUQVRJT05fUFJPRFVPCUxJTktTVEFUSU9OX1BST0RVTwkxODMxCitoaXRfYjAJCQlNQUNIX0hJVF9CMAkJSElUX0IwCQkJMTgzMgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvY3B1LmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9jcHUuYwppbmRleCBiODQwOWNhLi5lODRmYWZmIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9jcHUuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9jcHUuYwpAQCAtMjYsMTQgKzI2LDE2IEBACiAgKiBYWFg6IElmL3doZW4gYSBTTVAtY2FwYWJsZSBpbXBsZW1lbnRhdGlvbiBvZiBBVlIzMiB3aWxsIGV2ZXIgYmUKICAqIG1hZGUsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIGNvZGUgZXhlY3V0ZXMgb24gdGhlIGNvcnJlY3QgQ1BVLgogICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3BjMGV2ZW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfcGMwZXZlbnQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgbG9uZyBwY2NyOwogCiAJcGNjciA9IHN5c3JlZ19yZWFkKFBDQ1IpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCAocGNjciA+PiAxMikgJiAweDNmKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3BjMGV2ZW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3BjMGV2ZW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwpAQCAtNDYsMTUgKzQ4LDE3IEBACiAJc3lzcmVnX3dyaXRlKFBDQ1IsIHZhbCk7CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIHNzaXplX3Qgc2hvd19wYzBjb3VudChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3BjMGNvdW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGxvbmcgcGNudDA7CiAKIAlwY250MCA9IHN5c3JlZ19yZWFkKFBDTlQwKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHBjbnQwKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3BjMGNvdW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICAgIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3BjMGNvdW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJY2hhciAqZW5kcDsKQEAgLTY3LDE0ICs3MSwxNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19wYzFldmVudChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3BjMWV2ZW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAl1bnNpZ25lZCBsb25nIHBjY3I7CiAKIAlwY2NyID0gc3lzcmVnX3JlYWQoUENDUik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHhcbiIsIChwY2NyID4+IDE4KSAmIDB4M2YpOwogfQotc3RhdGljIHNzaXplX3Qgc3RvcmVfcGMxZXZlbnQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorc3RhdGljIHNzaXplX3Qgc3RvcmVfcGMxZXZlbnQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgICBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CkBAIC04NywxNCArOTMsMTYgQEAKIAlzeXNyZWdfd3JpdGUoUENDUiwgdmFsKTsKIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgc3NpemVfdCBzaG93X3BjMWNvdW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfcGMxY291bnQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGxvbmcgcGNudDE7CiAKIAlwY250MSA9IHN5c3JlZ19yZWFkKFBDTlQxKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHBjbnQxKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3BjMWNvdW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3BjMWNvdW50KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgICAgIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKQEAgLTEwOCwxNCArMTE2LDE2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3BjY3ljbGVzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfcGNjeWNsZXMoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGxvbmcgcGNjbnQ7CiAKIAlwY2NudCA9IHN5c3JlZ19yZWFkKFBDQ05UKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHBjY250KTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3BjY3ljbGVzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3BjY3ljbGVzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgICAgIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKQEAgLTEyOSwxNCArMTM5LDE2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3BjZW5hYmxlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfcGNlbmFibGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgbG9uZyBwY2NyOwogCiAJcGNjciA9IHN5c3JlZ19yZWFkKFBDQ1IpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjXG4iLCAocGNjciAmIDEpPycxJzonMCcpOwogfQotc3RhdGljIHNzaXplX3Qgc3RvcmVfcGNlbmFibGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorc3RhdGljIHNzaXplX3Qgc3RvcmVfcGNlbmFibGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgICBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwY2NyLCB2YWw7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCmluZGV4IDAyMWQ1MTIuLjYwNGY0NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCkBAIC03LDYgKzcsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC01OTQsNiArNTk1LDE3IEBACiAJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZHdfZG1hX3BsYXRmb3JtX2RhdGEgZHdfZG1hYzBfZGF0YSA9IHsKKwkubnJfY2hhbm5lbHMJPSAzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkd19kbWFjMF9yZXNvdXJjZVtdID0geworCVBCTUVNKDB4ZmYyMDAwMDApLAorCUlSUSgyKSwKK307CitERUZJTkVfREVWX0RBVEEoZHdfZG1hYywgMCk7CitERVZfQ0xLKGhjbGssIGR3X2RtYWMwLCBoc2IsIDEwKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBTeXN0ZW0gcGVyaXBoZXJhbHMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC03MDgsMTcgKzcyMCw2IEBACiAJLnVzZXJzCQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRtYWNhMF9yZXNvdXJjZVtdID0gewotCXsKLQkJLnN0YXJ0CT0gMHhmZjIwMDAwMCwKLQkJLmVuZAk9IDB4ZmYyMGZmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JSVJRKDIpLAotfTsKLURFRklORV9ERVYoZG1hY2EsIDApOwotREVWX0NMSyhoY2xrLCBkbWFjYTAsIGhzYiwgMTApOwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogSE1BVFJJWAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTgzMSw3ICs4MzIsNyBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQzMl9laWMwX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWMwX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwZGNfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtYWNhMF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZHdfZG1hYzBfZGV2aWNlKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQzMl90Y2IwX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDMyX3RjYjFfZGV2aWNlKTsKQEAgLTIwMzIsNyArMjAzMyw3IEBACiAJJnNtYzBfbWNrLAogCSZwZGNfaGNsaywKIAkmcGRjX3BjbGssCi0JJmRtYWNhMF9oY2xrLAorCSZkd19kbWFjMF9oY2xrLAogCSZwaWNvX2NsaywKIAkmcGlvMF9tY2ssCiAJJnBpbzFfbWNrLApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCmluZGV4IGI4NzYzNGUuLmI4M2I4ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKQEAgLTg3Myw4ICs4NzMsOCBAQAogCSAgcGx1Z2dlZCBpbnRvIHNsb3RzIGZvdW5kIG9uIGFsbCBtb2Rlcm4gbGFwdG9wIGNvbXB1dGVycy4gIEFub3RoZXIKIAkgIGV4YW1wbGUsIHVzZWQgb24gbW9kZXJuIGRlc2t0b3BzIGFzIHdlbGwgYXMgbGFwdG9wcywgaXMgVVNCLgogCi0JICBFbmFibGUgSE9UUExVRyBhbmQgS01PRCwgYW5kIGJ1aWxkIGEgbW9kdWxhciBrZXJuZWwuICBHZXQgYWdlbnQKLQkgIHNvZnR3YXJlIChhdCA8aHR0cDovL2xpbnV4LWhvdHBsdWcuc291cmNlZm9yZ2UubmV0Lz4pIGFuZCBpbnN0YWxsIGl0LgorCSAgRW5hYmxlIEhPVFBMVUcgYW5kIGJ1aWxkIGEgbW9kdWxhciBrZXJuZWwuICBHZXQgYWdlbnQgc29mdHdhcmUKKwkgIChmcm9tIDxodHRwOi8vbGludXgtaG90cGx1Zy5zb3VyY2Vmb3JnZS5uZXQvPikgYW5kIGluc3RhbGwgaXQuCiAJICBUaGVuIHlvdXIga2VybmVsIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIG91dCB0byBhIHVzZXIgbW9kZSAicG9saWN5CiAJICBhZ2VudCIgKC9zYmluL2hvdHBsdWcpIHRvIGxvYWQgbW9kdWxlcyBhbmQgc2V0IHVwIHNvZnR3YXJlIG5lZWRlZAogCSAgdG8gdXNlIGRldmljZXMgYXMgeW91IGhvdHBsdWcgdGhlbS4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwppbmRleCA1OTU4ZWVjLi42ODliNjljIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCkBAIC0zMjMsMTAgKzMyMywxNSBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSAweDIwM0ZCODAwLAotCQkuZW5kCT0gMHgyMDNGQjgwMCArIDgsCisJCS5lbmQJPSAweDIwM0ZCODAwICsgMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CisJCS5zdGFydAk9IDB4MjAzRkI4MDAgKyA0LAorCQkuZW5kCT0gMHgyMDNGQjgwMCArIDUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0gewogCQkuc3RhcnQJPSBJUlFfUEY5LAogCQkuZW5kCT0gSVJRX1BGOSwKIAkJLmZsYWdzCT0gKElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UpLApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCmluZGV4IDdjYzQ4NjQuLjQxMDNhOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMKQEAgLTY1LDEwICs2NSwxNSBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSAweDIwMzAwMDAwLAotCQkuZW5kCT0gMHgyMDMwMDAwMCArIDgsCisJCS5lbmQJPSAweDIwMzAwMDAwICsgMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CisJCS5zdGFydAk9IDB4MjAzMDAwMDAgKyA0LAorCQkuZW5kCT0gMHgyMDMwMDAwMCArIDUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0gewogCQkuc3RhcnQJPSBJUlFfUEYxMCwKIAkJLmVuZAk9IElSUV9QRjEwLAogCQkuZmxhZ3MJPSAoSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSksCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2dlbmVyaWNfYm9hcmQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jCmluZGV4IDdkMjUwODIuLjAxYjYzZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jCkBAIC0xNjYsMTAgKzE2NiwxNSBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSAweDIwM0ZCODAwLAotCQkuZW5kCT0gMHgyMDNGQjgwMCArIDgsCisJCS5lbmQJPSAweDIwM0ZCODAwICsgMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CisJCS5zdGFydAk9IDB4MjAzRkI4MDAgKyA0LAorCQkuZW5kCT0gMHgyMDNGQjgwMCArIDUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0gewogCQkuc3RhcnQJPSBJUlFfUEY5LAogCQkuZW5kCT0gSVJRX1BGOSwKIAkJLmZsYWdzCT0gKElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UpLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9NYWtlZmlsZQppbmRleCAyMGM4M2E1Li4yMTcyMDMwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9NYWtlZmlsZQpAQCAtMiw3ICsyLDYgQEAKICMgYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvTWFrZWZpbGUKICMKIAotT0JKQ09QWSA9IG9iamNvcHktY3JpcwogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5IC0tcmVtb3ZlLXNlY3Rpb249LmJzcwogCiBzdWJkaXItIDo9IGNvbXByZXNzZWQgcmVzY3VlCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA0YTAzMWNiLi4wOGQ5NDNjIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTIsMTIgKzIsMTAgQEAKICMgYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQogIwogCi1DQyA9IGdjYy1jcmlzIC1tZWxmICQoTElOVVhJTkNMVURFKQotY2NmbGFncy15ICs9IC1PMgotTEQgPSBsZC1jcmlzCi1sZGZsYWdzLXkgKz0gLVQgJChvYmopL2RlY29tcHJlc3MubGQKK2FzZmxhZ3MteSArPSAkKExJTlVYSU5DTFVERSkKK2NjZmxhZ3MteSArPSAtTzIgJChMSU5VWElOQ0xVREUpCitsZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvZGVjb21wcmVzcy5sZAogT0JKRUNUUyA9ICQob2JqKS9oZWFkLm8gJChvYmopL21pc2MubwotT0JKQ09QWSA9IG9iamNvcHktY3JpcwogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5IC0tcmVtb3ZlLXNlY3Rpb249LmJzcwogCiBxdWlldF9jbWRfaW1hZ2UgPSBCVUlMRCAgICRACkBAIC0yMSwxMiArMTksNiBAQAogJChvYmopL2RlY29tcHJlc3MuYmluOiAkKG9iaikvZGVjb21wcmVzcy5vIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKIAotJChvYmopL2hlYWQubzogJChvYmopL2hlYWQuUyAuY29uZmlnCi0JQCQoQ0MpIC1EX19BU1NFTUJMWV9fIC10cmFkaXRpb25hbCAtYyAkPCAtbyAkQAotCi0kKG9iaikvbWlzYy5vOiAkKG9iaikvbWlzYy5jIC5jb25maWcKLQlAJChDQykgLURfX0tFUk5FTF9fIC1jICQ8IC1vICRACi0KICQob2JqKS92bWxpbnV4OiAkKG9iaikvcGlnZ3kuZ3ogJChvYmopL2RlY29tcHJlc3MuYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsaW1hZ2UpCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZCBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZAppbmRleCAwYjBhMTRmLi5lODBmNDU5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MubGQKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkCkBAIC0xLDQgKzEsNSBAQAotT1VUUFVUX0ZPUk1BVChlbGYzMi11cy1jcmlzKQorLyogT1VUUFVUX0ZPUk1BVChlbGYzMi11cy1jcmlzKSAqLworT1VUUFVUX0ZPUk1BVChlbGYzMi1jcmlzKQogCiBNRU1PUlkgCiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCA2MTBiZGIyLi45ODFmYmFlIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtMTUsNzcgKzE1LDc3IEBACiAjZGVmaW5lIENPTU1BTkRfTElORV9NQUdJQyAweDg3MTA5NTYzCiAKIAk7OyBFeHBvcnRlZCBzeW1ib2xzCi0JCi0JLmdsb2JsCV9pbnB1dF9kYXRhCiAKLQkKKwkuZ2xvYmwJaW5wdXRfZGF0YQorCisKIAkudGV4dAogCiAJbm9wCiAJZGkKIAogOzsgV2UgbmVlZCB0byBpbml0aWFsemUgRFJBTSByZWdpc3RlcnMgYmVmb3JlIHdlIHN0YXJ0IHVzaW5nIHRoZSBEUkFNCi0JCi0JY21wLmQJUkFNX0lOSVRfTUFHSUMsIHI4CTsgQWxyZWFkeSBpbml0aWFsaXplZD8KKworCWNtcC5kCVJBTV9JTklUX01BR0lDLCAkcjgJOyBBbHJlYWR5IGluaXRpYWxpemVkPwogCWJlcQlkcmFtX2luaXRfZmluaXNoZWQKIAlub3AKLQkKKwogI2luY2x1ZGUgIi4uLy4uL2xpYi9kcmFtX2luaXQuUyIKLQkKLWRyYW1faW5pdF9maW5pc2hlZDoJCi0JCQorCitkcmFtX2luaXRfZmluaXNoZWQ6CisKIAk7OyBJbml0aWF0ZSB0aGUgUEEgYW5kIFBCIHBvcnRzCiAKLQltb3ZlLmIgICBDT05GSUdfRVRSQVhfREVGX1JfUE9SVF9QQV9EQVRBLCByMAotCW1vdmUuYiAgIHIwLCBbUl9QT1JUX1BBX0RBVEFdCisJbW92ZS5iICAgQ09ORklHX0VUUkFYX0RFRl9SX1BPUlRfUEFfREFUQSwgJHIwCisJbW92ZS5iICAgJHIwLCBbUl9QT1JUX1BBX0RBVEFdCiAKLQltb3ZlLmIgICBDT05GSUdfRVRSQVhfREVGX1JfUE9SVF9QQV9ESVIsIHIwCi0JbW92ZS5iICAgcjAsIFtSX1BPUlRfUEFfRElSXQorCW1vdmUuYiAgIENPTkZJR19FVFJBWF9ERUZfUl9QT1JUX1BBX0RJUiwgJHIwCisJbW92ZS5iICAgJHIwLCBbUl9QT1JUX1BBX0RJUl0KIAotCW1vdmUuYiAgIENPTkZJR19FVFJBWF9ERUZfUl9QT1JUX1BCX0RBVEEsIHIwCi0JbW92ZS5iICAgcjAsIFtSX1BPUlRfUEJfREFUQV0KKwltb3ZlLmIgICBDT05GSUdfRVRSQVhfREVGX1JfUE9SVF9QQl9EQVRBLCAkcjAKKwltb3ZlLmIgICAkcjAsIFtSX1BPUlRfUEJfREFUQV0KIAotCW1vdmUuYiAgIENPTkZJR19FVFJBWF9ERUZfUl9QT1JUX1BCX0RJUiwgcjAKLQltb3ZlLmIgICByMCwgW1JfUE9SVF9QQl9ESVJdCisJbW92ZS5iICAgQ09ORklHX0VUUkFYX0RFRl9SX1BPUlRfUEJfRElSLCAkcjAKKwltb3ZlLmIgICAkcjAsIFtSX1BPUlRfUEJfRElSXQogCiAJOzsgU2V0dXAgdGhlIHN0YWNrIHRvIGEgc3VpdGFibHkgaGlnaCBhZGRyZXNzLgogCTs7IFdlIGFzc3VtZSA4IE1CIGlzIHRoZSBtaW5pbXVtIERSQU0gaW4gYW4gZUxpbnV4CiAJOzsgcHJvZHVjdCBhbmQgcHV0IHRoZSBzcCBhdCB0aGUgdG9wIGZvciBub3cuCiAKLQltb3ZlLmQJMHg0MDgwMDAwMCwgc3AKKwltb3ZlLmQJMHg0MDgwMDAwMCwgJHNwCiAKIAk7OyBGaWd1cmUgb3V0IHdoZXJlIHRoZSBjb21wcmVzc2VkIHBpZ2d5YmFjayBpbWFnZSBpcwogCTs7IGluIHRoZSBmbGFzaCAoc2luY2Ugd2Ugd29udCB0cnkgdG8gY29weSBpdCB0byBEUkFNCiAJOzsgYmVmb3JlIHVucGFja2luZykuIEl0IGlzIGF0IF9lZGF0YSwgYnV0IGluIGZsYXNoLgogCTs7IFVzZSAoX2VkYXRhIC0gYmFzc2UpIGFzIG9mZnNldCB0byB0aGUgY3VycmVudCBQQy4KLQkKLWJhc3NlOgltb3ZlLmQJcGMsIHI1Ci0JYW5kLmQJMHg3ZmZmZmZmZiwgcjUJOyBzdHJpcCBhbnkgbm9uLWNhY2hlIGJpdAotCXN1YnEJMiwgcjUJCTsgY29tcGVuc2F0ZSBmb3IgdGhlIG1vdmUuZCBwYyBpbnN0cgotCW1vdmUuZAlyNSwgcjAJCTsgc2F2ZSBmb3IgbGF0ZXIgLSBmbGFzaCBhZGRyZXNzIG9mICdiYXNzZScKLQlhZGQuZAlfZWRhdGEsIHI1Ci0Jc3ViLmQJYmFzc2UsIHI1CTsgcjUgPSBmbGFzaCBhZGRyZXNzIG9mICdfZWRhdGEnCi0JCisKK2Jhc3NlOgltb3ZlLmQJJHBjLCAkcjUKKwlhbmQuZAkweDdmZmZmZmZmLCAkcjUJOyBzdHJpcCBhbnkgbm9uLWNhY2hlIGJpdAorCXN1YnEJMiwgJHI1CQk7IGNvbXBlbnNhdGUgZm9yIHRoZSBtb3ZlLmQgJHBjIGluc3RyCisJbW92ZS5kCSRyNSwgJHIwCQk7IHNhdmUgZm9yIGxhdGVyIC0gZmxhc2ggYWRkcmVzcyBvZiAnYmFzc2UnCisJYWRkLmQJX2VkYXRhLCAkcjUKKwlzdWIuZAliYXNzZSwgJHI1CTsgJHI1ID0gZmxhc2ggYWRkcmVzcyBvZiAnX2VkYXRhJworCiAJOzsgQ29weSB0ZXh0K2RhdGEgdG8gRFJBTQotCQotCW1vdmUuZAliYXNzZSwgcjEJOyBkZXN0aW5hdGlvbgotCW1vdmUuZAlfZWRhdGEsIHIyCTsgZW5kIGRlc3RpbmF0aW9uCi0xOgltb3ZlLncJW3IwK10sIHIzCi0JbW92ZS53CXIzLCBbcjErXQotCWNtcC5kCXIyLCByMQorCisJbW92ZS5kCWJhc3NlLCAkcjEJOyBkZXN0aW5hdGlvbgorCW1vdmUuZAlfZWRhdGEsICRyMgk7IGVuZCBkZXN0aW5hdGlvbgorMToJbW92ZS53CVskcjArXSwgJHIzCisJbW92ZS53CSRyMywgWyRyMStdCisJY21wLmQJJHIyLCAkcjEKIAliY3MJMWIKIAlub3AKIAotCW1vdmUuZAlyNSwgW19pbnB1dF9kYXRhXSA7IGZvciB0aGUgZGVjb21wcmVzc29yCisJbW92ZS5kCSRyNSwgW2lucHV0X2RhdGFdIDsgZm9yIHRoZSBkZWNvbXByZXNzb3IKIAogCiAJOzsgQ2xlYXIgdGhlIGRlY29tcHJlc3NvcnMgQlNTIChiZXR3ZWVuIF9lZGF0YSBhbmQgX2VuZCkKLQkKLQltb3ZlcQkwLCByMAotCW1vdmUuZAlfZWRhdGEsIHIxCi0JbW92ZS5kCV9lbmQsIHIyCi0xOgltb3ZlLncJcjAsIFtyMStdCi0JY21wLmQJcjIsIHIxCisKKwltb3ZlcQkwLCAkcjAKKwltb3ZlLmQJX2VkYXRhLCAkcjEKKwltb3ZlLmQJX2VuZCwgJHIyCisxOgltb3ZlLncJJHIwLCBbJHIxK10KKwljbXAuZAkkcjIsICRyMQogCWJjcwkxYgogCW5vcAogCkBAIC05NCwxNiArOTQsMTYgQEAKIAltb3ZlLmQgICRyMTAsIFskcjEyXQogCW1vdmUuZAlfY21kX2xpbmVfYWRkciwgJHIxMgogCW1vdmUuZCAgJHIxMSwgWyRyMTJdCi0JCi0JOzsgRG8gdGhlIGRlY29tcHJlc3Npb24gYW5kIHNhdmUgY29tcHJlc3NlZCBzaXplIGluIF9pbnB0cgogCi0JanNyCV9kZWNvbXByZXNzX2tlcm5lbAotCQotCTs7IFB1dCBzdGFydCBhZGRyZXNzIG9mIHJvb3QgcGFydGl0aW9uIGluIHI5IHNvIHRoZSBrZXJuZWwgY2FuIHVzZSBpdAorCTs7IERvIHRoZSBkZWNvbXByZXNzaW9uIGFuZCBzYXZlIGNvbXByZXNzZWQgc2l6ZSBpbiBpbnB0cgorCisJanNyCWRlY29tcHJlc3Nfa2VybmVsCisKKwk7OyBQdXQgc3RhcnQgYWRkcmVzcyBvZiByb290IHBhcnRpdGlvbiBpbiAkcjkgc28gdGhlIGtlcm5lbCBjYW4gdXNlIGl0CiAJOzsgd2hlbiBtb3VudGluZyBmcm9tIGZsYXNoCiAKLQltb3ZlLmQJW19pbnB1dF9kYXRhXSwgcjkJOyBmbGFzaCBhZGRyZXNzIG9mIGNvbXByZXNzZWQga2VybmVsCi0JYWRkLmQJW19pbnB0cl0sIHI5CQk7IHNpemUgb2YgY29tcHJlc3NlZCBrZXJuZWwKKwltb3ZlLmQJW2lucHV0X2RhdGFdLCAkcjkJOyBmbGFzaCBhZGRyZXNzIG9mIGNvbXByZXNzZWQga2VybmVsCisJYWRkLmQJW2lucHRyXSwgJHI5CQk7IHNpemUgb2YgY29tcHJlc3NlZCBrZXJuZWwKIAogCTs7IFJlc3RvcmUgY29tbWFuZCBsaW5lIG1hZ2ljIGFuZCBhZGRyZXNzLgogCW1vdmUuZCAgX2NtZF9saW5lX21hZ2ljLCAkcjEwCkBAIC0xMTIsMTIgKzExMiwxMiBAQAogCW1vdmUuZCAgWyRyMTFdLCAkcjExCiAKIAk7OyBFbnRlciB0aGUgZGVjb21wcmVzc2VkIGtlcm5lbAotCW1vdmUuZAlSQU1fSU5JVF9NQUdJQywgcjgJOyBUZWxsIGtlcm5lbCB0aGF0IERSQU0gaXMgaW5pdGlhbGl6ZWQKKwltb3ZlLmQJUkFNX0lOSVRfTUFHSUMsICRyOAk7IFRlbGwga2VybmVsIHRoYXQgRFJBTSBpcyBpbml0aWFsaXplZAogCWp1bXAJMHg0MDAwNDAwMAk7IGtlcm5lbCBpcyBsaW5rZWQgdG8gdGhpcyBhZGRyZXNzCi0JCisKIAkuZGF0YQogCi1faW5wdXRfZGF0YToKK2lucHV0X2RhdGE6CiAJLmR3b3JkCTAJCTsgdXNlZCBieSB0aGUgZGVjb21wcmVzc29yCiBfY21kX2xpbmVfbWFnaWM6CiAJLmR3b3JkIDAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggOWE0M2FiMS4uMThlMTNiYyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTI5LDEyICsyOSwxMCBAQAogI2RlZmluZSBPRihhcmdzKSAgYXJncwogI2RlZmluZSBTVEFUSUMgc3RhdGljCiAKLXZvaWQqIG1lbXNldCh2b2lkKiBzLCBpbnQgYywgc2l6ZV90IG4pOwotdm9pZCogbWVtY3B5KHZvaWQqIF9fZGVzdCwgX19jb25zdCB2b2lkKiBfX3NyYywKLQkgICAgIHNpemVfdCBfX24pOwordm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7Cit2b2lkICptZW1jcHkodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKTsKIAotI2RlZmluZSBtZW16ZXJvKHMsIG4pICAgICBtZW1zZXQgKChzKSwgMCwgKG4pKQotCisjZGVmaW5lIG1lbXplcm8ocywgbikgICAgIG1lbXNldCgocyksIDAsIChuKSkKIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyICB1Y2g7CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaDsKQEAgLTYyLDU3ICs2MCw2OSBAQAogI2RlZmluZSBFTkNSWVBURUQgICAgMHgyMCAvKiBiaXQgNSBzZXQ6IGZpbGUgaXMgZW5jcnlwdGVkICovCiAjZGVmaW5lIFJFU0VSVkVEICAgICAweEMwIC8qIGJpdCA2LDc6ICAgcmVzZXJ2ZWQgKi8KIAotI2RlZmluZSBnZXRfYnl0ZSgpIGluYnVmW2lucHRyKytdCQotCQorI2RlZmluZSBnZXRfYnl0ZSgpIChpbmJ1ZltpbnB0cisrXSkKKwogLyogRGlhZ25vc3RpYyBmdW5jdGlvbnMgKi8KICNpZmRlZiBERUJVRwotIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykge2lmKCEoY29uZCkpIGVycm9yKG1zZyk7fQorIyAgZGVmaW5lIEFzc2VydChjb25kLCBtc2cpIGRvIHsgXAorCQlpZiAoIShjb25kKSkgXAorCQkJZXJyb3IobXNnKTsgXAorCX0gd2hpbGUgKDApCiAjICBkZWZpbmUgVHJhY2UoeCkgZnByaW50ZiB4Ci0jICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAodmVyYm9zZSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHZlcmJvc2U+MSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjKGMseCkge2lmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAodmVyYm9zZT4xICYmIChjKSkgZnByaW50ZiB4IDt9CisjICBkZWZpbmUgVHJhY2V2KHgpIGRvIHsgXAorCQlpZiAodmVyYm9zZSkgXAorCQkJZnByaW50ZiB4OyBcCisJfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBUcmFjZXZ2KHgpIGRvIHsgXAorCQlpZiAodmVyYm9zZSA+IDEpIFwKKwkJCWZwcmludGYgeDsgXAorCX0gd2hpbGUgKDApCisjICBkZWZpbmUgVHJhY2VjKGMsIHgpIGRvIHsgXAorCQlpZiAodmVyYm9zZSAmJiAoYykpIFwKKwkJCWZwcmludGYgeDsgXAorCX0gd2hpbGUgKDApCisjICBkZWZpbmUgVHJhY2VjdihjLCB4KSBkbyB7IFwKKwkJaWYgKHZlcmJvc2UgPiAxICYmIChjKSkgXAorCQkJZnByaW50ZiB4OyBcCisJfSB3aGlsZSAoMCkKICNlbHNlCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKQorIyAgZGVmaW5lIEFzc2VydChjb25kLCBtc2cpCiAjICBkZWZpbmUgVHJhY2UoeCkKICMgIGRlZmluZSBUcmFjZXYoeCkKICMgIGRlZmluZSBUcmFjZXZ2KHgpCi0jICBkZWZpbmUgVHJhY2VjKGMseCkKLSMgIGRlZmluZSBUcmFjZWN2KGMseCkKKyMgIGRlZmluZSBUcmFjZWMoYywgeCkKKyMgIGRlZmluZSBUcmFjZWN2KGMsIHgpCiAjZW5kaWYKIAotc3RhdGljIGludCAgZmlsbF9pbmJ1Zih2b2lkKTsKIHN0YXRpYyB2b2lkIGZsdXNoX3dpbmRvdyh2b2lkKTsKIHN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOwotc3RhdGljIHZvaWQgZ3ppcF9tYXJrKHZvaWQgKiopOwotc3RhdGljIHZvaWQgZ3ppcF9yZWxlYXNlKHZvaWQgKiopOwogCiBleHRlcm4gY2hhciAqaW5wdXRfZGF0YTsgIC8qIGxpdmVzIGluIGhlYWQuUyAqLwogCiBzdGF0aWMgbG9uZyBieXRlc19vdXQgPSAwOwogc3RhdGljIHVjaCAqb3V0cHV0X2RhdGE7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvdXRwdXRfcHRyID0gMDsKLSAKKwogc3RhdGljIHZvaWQgKm1hbGxvYyhpbnQgc2l6ZSk7CiBzdGF0aWMgdm9pZCBmcmVlKHZvaWQgKndoZXJlKTsKLXN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOwogc3RhdGljIHZvaWQgZ3ppcF9tYXJrKHZvaWQgKiopOwogc3RhdGljIHZvaWQgZ3ppcF9yZWxlYXNlKHZvaWQgKiopOwotIAorCiBzdGF0aWMgdm9pZCBwdXRzKGNvbnN0IGNoYXIgKik7CiAKIC8qIHRoZSAiaGVhcCIgaXMgcHV0IGRpcmVjdGx5IGFmdGVyIHRoZSBCU1MgZW5kcywgYXQgZW5kICovCi0gIAotZXh0ZXJuIGludCBlbmQ7Ci1zdGF0aWMgbG9uZyBmcmVlX21lbV9wdHIgPSAobG9uZykmZW5kOwotIAorCitleHRlcm4gaW50IF9lbmQ7CitzdGF0aWMgbG9uZyBmcmVlX21lbV9wdHIgPSAobG9uZykmX2VuZDsKKwogI2luY2x1ZGUgIi4uLy4uLy4uLy4uLy4uL2xpYi9pbmZsYXRlLmMiCiAKIHN0YXRpYyB2b2lkICptYWxsb2MoaW50IHNpemUpCiB7CiAJdm9pZCAqcDsKIAotCWlmIChzaXplIDwwKSBlcnJvcigiTWFsbG9jIGVycm9yIik7CisJaWYgKHNpemUgPCAwKQorCQllcnJvcigiTWFsbG9jIGVycm9yIik7CiAKIAlmcmVlX21lbV9wdHIgPSAoZnJlZV9tZW1fcHRyICsgMykgJiB+MzsJLyogQWxpZ24gKi8KIApAQCAtMTQyLDQ0ICsxNTIsNDcgQEAKIHB1dHMoY29uc3QgY2hhciAqcykKIHsKICNpZm5kZWYgQ09ORklHX0VUUkFYX0RFQlVHX1BPUlRfTlVMTAotCXdoaWxlKCpzKSB7CisJd2hpbGUgKCpzKSB7CiAjaWZkZWYgQ09ORklHX0VUUkFYX0RFQlVHX1BPUlQwCi0JCXdoaWxlKCEoKlJfU0VSSUFMMF9TVEFUVVMgJiAoMSA8PCA1KSkpIDsKKwkJd2hpbGUgKCEoKlJfU0VSSUFMMF9TVEFUVVMgJiAoMSA8PCA1KSkpIDsKIAkJKlJfU0VSSUFMMF9UUl9EQVRBID0gKnMrKzsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVFJBWF9ERUJVR19QT1JUMQotCQl3aGlsZSghKCpSX1NFUklBTDFfU1RBVFVTICYgKDEgPDwgNSkpKSA7CisJCXdoaWxlICghKCpSX1NFUklBTDFfU1RBVFVTICYgKDEgPDwgNSkpKSA7CiAJCSpSX1NFUklBTDFfVFJfREFUQSA9ICpzKys7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRVRSQVhfREVCVUdfUE9SVDIKLQkJd2hpbGUoISgqUl9TRVJJQUwyX1NUQVRVUyAmICgxIDw8IDUpKSkgOworCQl3aGlsZSAoISgqUl9TRVJJQUwyX1NUQVRVUyAmICgxIDw8IDUpKSkgOwogCQkqUl9TRVJJQUwyX1RSX0RBVEEgPSAqcysrOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VUUkFYX0RFQlVHX1BPUlQzCi0JCXdoaWxlKCEoKlJfU0VSSUFMM19TVEFUVVMgJiAoMSA8PCA1KSkpIDsKKwkJd2hpbGUgKCEoKlJfU0VSSUFMM19TVEFUVVMgJiAoMSA8PCA1KSkpIDsKIAkJKlJfU0VSSUFMM19UUl9EQVRBID0gKnMrKzsKICNlbmRpZgogCX0KICNlbmRpZgogfQogCi12b2lkKgotbWVtc2V0KHZvaWQqIHMsIGludCBjLCBzaXplX3QgbikKK3ZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pCiB7CiAJaW50IGk7Ci0JY2hhciAqc3MgPSAoY2hhciopczsKKwljaGFyICpzcyA9IChjaGFyICopczsKIAotCWZvciAoaT0wO2k8bjtpKyspIHNzW2ldID0gYzsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlzc1tpXSA9IGM7CisKKwlyZXR1cm4gczsKIH0KIAotdm9pZCoKLW1lbWNweSh2b2lkKiBfX2Rlc3QsIF9fY29uc3Qgdm9pZCogX19zcmMsCi0JCQkgICAgc2l6ZV90IF9fbikKK3ZvaWQgKm1lbWNweSh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiB7CiAJaW50IGk7CiAJY2hhciAqZCA9IChjaGFyICopX19kZXN0LCAqcyA9IChjaGFyICopX19zcmM7CiAKLQlmb3IgKGk9MDtpPF9fbjtpKyspIGRbaV0gPSBzW2ldOworCWZvciAoaSA9IDA7IGkgPCBfX247IGkrKykKKwkJZFtpXSA9IHNbaV07CisKKwlyZXR1cm4gX19kZXN0OwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE4Nyw0NiArMjAwLDQ0IEBACiAgKiAoVXNlZCBmb3IgdGhlIGRlY29tcHJlc3NlZCBkYXRhIG9ubHkuKQogICovCiAKLXN0YXRpYyB2b2lkCi1mbHVzaF93aW5kb3coKQorc3RhdGljIHZvaWQgZmx1c2hfd2luZG93KHZvaWQpCiB7Ci0gICAgdWxnIGMgPSBjcmM7ICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlICovCi0gICAgdW5zaWduZWQgbjsKLSAgICB1Y2ggKmluLCAqb3V0LCBjaDsKLSAgICAKLSAgICBpbiA9IHdpbmRvdzsKLSAgICBvdXQgPSAmb3V0cHV0X2RhdGFbb3V0cHV0X3B0cl07IAotICAgIGZvciAobiA9IDA7IG4gPCBvdXRjbnQ7IG4rKykgewotCSAgICBjaCA9ICpvdXQrKyA9ICppbisrOwotCSAgICBjID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKLSAgICB9Ci0gICAgY3JjID0gYzsKLSAgICBieXRlc19vdXQgKz0gKHVsZylvdXRjbnQ7Ci0gICAgb3V0cHV0X3B0ciArPSAodWxnKW91dGNudDsKLSAgICBvdXRjbnQgPSAwOworCXVsZyBjID0gY3JjOyAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZSAqLworCXVuc2lnbmVkIG47CisJdWNoICppbiwgKm91dCwgY2g7CisKKwlpbiA9IHdpbmRvdzsKKwlvdXQgPSAmb3V0cHV0X2RhdGFbb3V0cHV0X3B0cl07CisJZm9yIChuID0gMDsgbiA8IG91dGNudDsgbisrKSB7CisJCWNoID0gKm91dCA9ICppbjsKKwkJb3V0Kys7CisJCWluKys7CisJCWMgPSBjcmNfMzJfdGFiWygoaW50KWMgXiBjaCkgJiAweGZmXSBeIChjID4+IDgpOworCX0KKwljcmMgPSBjOworCWJ5dGVzX291dCArPSAodWxnKW91dGNudDsKKwlvdXRwdXRfcHRyICs9ICh1bGcpb3V0Y250OworCW91dGNudCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkCi1lcnJvcihjaGFyICp4KQorc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqeCkKIHsKIAlwdXRzKCJcblxuIik7CiAJcHV0cyh4KTsKIAlwdXRzKCJcblxuIC0tIFN5c3RlbSBoYWx0ZWRcbiIpOwogCi0Jd2hpbGUoMSk7CS8qIEhhbHQgKi8KKwl3aGlsZSAoMSk7CS8qIEhhbHQgKi8KIH0KIAotdm9pZAotc2V0dXBfbm9ybWFsX291dHB1dF9idWZmZXIoKQordm9pZCBzZXR1cF9ub3JtYWxfb3V0cHV0X2J1ZmZlcih2b2lkKQogewogCW91dHB1dF9kYXRhID0gKGNoYXIgKilLRVJORUxfTE9BRF9BRFI7CiB9CiAKLXZvaWQKLWRlY29tcHJlc3Nfa2VybmVsKCkKK3ZvaWQgZGVjb21wcmVzc19rZXJuZWwodm9pZCkKIHsKIAljaGFyIHJldmlzaW9uOwotCQorCiAJLyogaW5wdXRfZGF0YSBpcyBzZXQgaW4gaGVhZC5TICovCiAJaW5idWYgPSBpbnB1dF9kYXRhOwogCkBAIC0yNTcsMTEgKzI2OCwxMCBAQAogCiAJbWFrZWNyYygpOwogCi0JX19hc21fXyB2b2xhdGlsZSAoIm1vdmUgdnIsJTAiIDogIj1ybSIgKHJldmlzaW9uKSk7Ci0JaWYgKHJldmlzaW9uIDwgMTApCi0JeworCV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZlICR2ciwlMCIgOiAiPXJtIiAocmV2aXNpb24pKTsKKwlpZiAocmV2aXNpb24gPCAxMCkgewogCQlwdXRzKCJZb3UgbmVlZCBhbiBFVFJBWCAxMDBMWCB0byBydW4gbGludXggMi42XG4iKTsKLQkJd2hpbGUoMSk7CisJCXdoaWxlICgxKTsKIAl9CiAKIAlwdXRzKCJVbmNvbXByZXNzaW5nIExpbnV4Li4uXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9NYWtlZmlsZQppbmRleCAyZTUwNDViLi4wNzY4OGRhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL01ha2VmaWxlCkBAIC0yLDEyICsyLDkgQEAKICMgTWFrZWZpbGUgZm9yIHJlc2N1ZSAoYm9vdHN0cmFwKSBjb2RlCiAjCiAKLUNDID0gZ2NjLWNyaXMgLW1saW51eCAkKExJTlVYSU5DTFVERSkKLWNjZmxhZ3MteSArPSAtTzIKLWFzZmxhZ3MteSArPSAtdHJhZGl0aW9uYWwKLUxEID0gZ2NjLWNyaXMgLW1saW51eCAtbm9zdGRsaWIKLWxkZmxhZ3MteSArPSAtVCAkKG9iaikvcmVzY3VlLmxkCi1PQkpDT1BZID0gb2JqY29weS1jcmlzCitjY2ZsYWdzLXkgKz0gLU8yICQoTElOVVhJTkNMVURFKQorYXNmbGFncy15ICs9ICQoTElOVVhJTkNMVURFKQorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChvYmopL3Jlc2N1ZS5sZAogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5IC0tcmVtb3ZlLXNlY3Rpb249LmJzcwogb2JqLSQoQ09ORklHX0VUUkFYX0FYSVNGTEFTSE1BUCkgPSBoZWFkLm8KIE9CSkVDVCA6PSAkKG9iaikvaGVhZC5vCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKaW5kZXggNTIxMDNkMS4uODc2OWRjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCiAJCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBydGNfdGltZSAqKSBhcmcsICZ0bSwKIAkJCQkgc2l6ZW9mIHRtKSkgewotCQkJc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmcnRjX2xvY2spOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9kZWJ1Z3BvcnQuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZGVidWdwb3J0LmMKaW5kZXggMDRkNWVlZS4uM2RjNmU5MSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9kZWJ1Z3BvcnQuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2RlYnVncG9ydC5jCkBAIC00MjYsMTIgKzQyNiwxOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludAotZHVtbXlfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIGludCBkdW1teV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJcmV0dXJuIDgxOTI7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgZHVtbXlfb3BzID0geworCS5vcGVuID0gZHVtbXlfb3BlbiwKKwkuY2xvc2UgPSBkdW1teV9jbG9zZSwKKwkud3JpdGUgPSBkdW1teV93cml0ZSwKKwkud3JpdGVfcm9vbSA9IGR1bW15X3dyaXRlX3Jvb20sCit9OworCiB2b2lkIF9faW5pdAogaW5pdF9kdW1teV9jb25zb2xlKHZvaWQpCiB7CkBAIC00NDQsMTQgKzQ1MCwxNCBAQAogCWR1bW15X2RyaXZlci50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKIAlkdW1teV9kcml2ZXIuc3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKIAlkdW1teV9kcml2ZXIuaW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOworCS8qIE5vcm1hbGx5IEI5NjAwIGRlZmF1bHQuLi4gKi8KIAlkdW1teV9kcml2ZXIuaW5pdF90ZXJtaW9zLmNfY2ZsYWcgPQotCQlCMTE1MjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsgLyogaXMgbm9ybWFsbHkgQjk2MDAgZGVmYXVsdC4uLiAqLworCQlCMTE1MjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKIAlkdW1teV9kcml2ZXIuZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKKwlkdW1teV9kcml2ZXIuaW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gMTE1MjAwOworCWR1bW15X2RyaXZlci5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSAxMTUyMDA7CiAKLQlkdW1teV9kcml2ZXIub3BlbiA9IGR1bW15X29wZW47Ci0JZHVtbXlfZHJpdmVyLmNsb3NlID0gZHVtbXlfY2xvc2U7Ci0JZHVtbXlfZHJpdmVyLndyaXRlID0gZHVtbXlfd3JpdGU7Ci0JZHVtbXlfZHJpdmVyLndyaXRlX3Jvb20gPSBkdW1teV93cml0ZV9yb29tOworCWR1bW15X2RyaXZlci5vcHMgPSAmZHVtbXlfb3BzOwogCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKCZkdW1teV9kcml2ZXIpKQogCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgZHVtbXkgc2VyaWFsIGRyaXZlclxuIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L01ha2VmaWxlCmluZGV4IDNmOTEzNDkuLjk5ODk2YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L01ha2VmaWxlCkBAIC0yLDcgKzIsNiBAQAogIyBhcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9NYWtlZmlsZQogIwogCi1PQkpDT1BZID0gb2JqY29weS1jcmlzCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQKIAogc3ViZGlyLSA6PSBjb21wcmVzc2VkIHJlc2N1ZQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggMmM4YzJjMy4uZDYzMzVmMiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0yLDE0ICsyLDEwIEBACiAjIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKICMKIAotQ0MgPSBnY2MtY3JpcyAtbWxpbnV4IC1tYXJjaD12MzIgJChMSU5VWElOQ0xVREUpCiBhc2ZsYWdzLXkgKz0gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9tYWNoLyAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKIGNjZmxhZ3MteSArPSAtTzIgLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9tYWNoLyAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKLUxEID0gZ2NjLWNyaXMgLW1saW51eCAtbWFyY2g9djMyIC1ub3N0ZGxpYgotbGRmbGFncy15ICs9IC1UICQob2JqKS9kZWNvbXByZXNzLmxkCi1vYmoteSA9IGhlYWQubyBtaXNjLm8KK2xkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQob2JqKS9kZWNvbXByZXNzLmxkCiBPQkpFQ1RTID0gJChvYmopL2hlYWQubyAkKG9iaikvbWlzYy5vCi1PQkpDT1BZID0gb2JqY29weS1jcmlzCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiAKIHF1aWV0X2NtZF9pbWFnZSA9IEJVSUxEICAgJEAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9NYWtlZmlsZQppbmRleCBjMDk4Nzc5Li40NGFlMGFkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL01ha2VmaWxlCkBAIC03LDkgKzcsOCBAQAogCQktSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKIGFzZmxhZ3MteSArPSAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gvbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCiBMRCA9IGdjYy1jcmlzIC1tbGludXggLW1hcmNoPXYzMiAtbm9zdGRsaWIKLWxkZmxhZ3MteSArPSAtVCAkKG9iaikvcmVzY3VlLmxkCitsZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvcmVzY3VlLmxkCiBMRFBPU1RGTEFHUyA9IC1sZ2NjCi1PQkpDT1BZID0gb2JqY29weS1jcmlzCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiBvYmotJChDT05GSUdfRVRSQVhfQVhJU0ZMQVNITUFQKSA9IGhlYWQubwogT0JKRUNUIDo9ICQob2JqKS9oZWFkLm8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYwppbmRleCA1M2RiMzg3Li5mMjYzYWI1IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCkBAIC0yMjksNyArMjI5LDcgQEAKIAogCQlpZiAoY29weV90b191c2VyKChzdHJ1Y3QgcnRjX3RpbWUgKikgYXJnLCAmdG0sCiAJCQkJIHNpemVvZiB0bSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZydGNfbG9jayk7CisJCQltdXRleF91bmxvY2soJnJ0Y19sb2NrKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggMThiY2MxMC4uNDUxZjJmZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTU0MCw4ICs1NDAsOCBAQAogCSAgc3Ryb25nbHkgaW4gZmx1eCwgc28gbm8gZ29vZCByZWNvbW1lbmRhdGlvbiBjYW4gYmUgbWFkZS4KIAogY29uZmlnIENSQVNIX0RVTVAKLQkgIGJvb2wgImtlcm5lbCBjcmFzaCBkdW1wcyAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIElBNjRfTUNBX1JFQ09WRVJZICYmICFJQTY0X0hQX1NJTSAmJiAoIVNNUCB8fCBIT1RQTFVHX0NQVSkKKwkgIGJvb2wgImtlcm5lbCBjcmFzaCBkdW1wcyIKKwkgIGRlcGVuZHMgb24gSUE2NF9NQ0FfUkVDT1ZFUlkgJiYgIUlBNjRfSFBfU0lNICYmICghU01QIHx8IEhPVFBMVUdfQ1BVKQogCSAgaGVscAogCSAgICBHZW5lcmF0ZSBjcmFzaCBkdW1wIGFmdGVyIGJlaW5nIHN0YXJ0ZWQgYnkga2V4ZWMuCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9NYWtlZmlsZQppbmRleCBlNjdlZTNmLi45MDVkMjViIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L01ha2VmaWxlCkBAIC0xMDAsMyArMTAwLDkgQEAKICAgZWNobyAnICBib290CQktIEJ1aWxkIHZtbGludXggYW5kIGJvb3Rsb2FkZXIgZm9yIFNraSBzaW11bGF0b3InCiAgIGVjaG8gJyogdW53Y2hlY2sJLSBDaGVjayB2bWxpbnV4IGZvciBpbnZhbGlkIHVud2luZCBpbmZvJwogZW5kZWYKKworYXJjaHByZXBhcmU6IG1ha2VfbnJfaXJxc19oIEZPUkNFCitQSE9OWSArPSBtYWtlX25yX2lycXNfaCBGT1JDRQorCittYWtlX25yX2lycXNfaDogRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL2lhNjQva2VybmVsIGluY2x1ZGUvYXNtLWlhNjQvbnItaXJxcy5oCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL3NpbXNlcmlhbC5jIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYwppbmRleCAyM2NhZmM4Li4yNGIxYWQ1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvc2ltL3NpbXNlcmlhbC5jCisrKyBiL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMKQEAgLTE5MywxOCArMTkzLDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0jaWYgMAotLyoKLSAqIG5vdCByZWFsbHkgdXNlZCBpbiBvdXIgc2l0dWF0aW9uIHNvIGtlZXAgdGhlbSBjb21tZW50ZWQgb3V0IGZvciBub3cKLSAqLwotc3RhdGljIERFQ0xBUkVfVEFTS19RVUVVRSh0cV9zZXJpYWwpOyAvKiB1c2VkIHRvIGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUgKi8KLXN0YXRpYyB2b2lkIGRvX3NlcmlhbF9iaCh2b2lkKQotewotCXJ1bl90YXNrX3F1ZXVlKCZ0cV9zZXJpYWwpOwotCXByaW50ayhLRVJOX0VSUiAiZG9fc2VyaWFsX2JoOiBjYWxsZWRcbiIpOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIGRvX3NvZnRpbnQoc3RydWN0IHdvcmtfc3RydWN0ICpwcml2YXRlXykKIHsKIAlwcmludGsoS0VSTl9FUlIgInNpbXNlcmlhbDogZG9fc29mdGludCBjYWxsZWRcbiIpOwpAQCAtMzUxLDExICszMzksNyBAQAogCWluZm8tPnhtaXQuaGVhZCA9IGluZm8tPnhtaXQudGFpbCA9IDA7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotCi0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtNDA0LDEyICszODgsNiBAQAogCXByaW50ayhLRVJOX0lORk8gInNpbXJzX3VudGhyb3R0bGUgY2FsbGVkXG4iKTsKIH0KIAotLyoKLSAqIHJzX2JyZWFrKCkgLS0tIHJvdXRpbmUgd2hpY2ggdHVybnMgdGhlIGJyZWFrIGhhbmRsaW5nIG9uIG9yIG9mZgotICovCi1zdGF0aWMgdm9pZCByc19icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCi17Ci19CiAKIHN0YXRpYyBpbnQgcnNfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC00MjIsMTQgKzQwMCw2IEBACiAJfQogCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBUSU9DTUdFVDoKLQkJCXByaW50ayhLRVJOX0lORk8gInJzX2lvY3RsOiBUSU9DTUdFVCBjYWxsZWRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWNhc2UgVElPQ01CSVM6Ci0JCWNhc2UgVElPQ01CSUM6Ci0JCWNhc2UgVElPQ01TRVQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICJyc19pb2N0bDogVElPQ01CSVMvQklDL1NFVCBjYWxsZWRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWNhc2UgVElPQ0dTRVJJQUw6CiAJCQlwcmludGsoS0VSTl9JTkZPICJzaW1yc19pb2N0bCBUSU9DR1NFUklBTCBjYWxsZWRcbiIpOwogCQkJcmV0dXJuIDA7CkBAIC00ODgsMTQgKzQ1OCw2IEBACiAKIHN0YXRpYyB2b2lkIHJzX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0JdW5zaWduZWQgaW50IGNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCi0JaWYgKCAgIChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykKLQkgICAgJiYgKCAgIFJFTEVWQU5UX0lGTEFHKHR0eS0+dGVybWlvcy0+Y19pZmxhZykKLQkJPT0gUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkKLQkgIHJldHVybjsKLQotCiAJLyogSGFuZGxlIHR1cm5pbmcgb2ZmIENSVFNDVFMgKi8KIAlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKIAkgICAgISh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSkgewpAQCAtNjIzLDkgKzU4NSw4IEBACiAJICogdGhlIGxpbmUgZGlzY2lwbGluZSB0byBvbmx5IHByb2Nlc3MgWE9OL1hPRkYgY2hhcmFjdGVycy4KIAkgKi8KIAlzaHV0ZG93bihpbmZvKTsKLQlpZiAodHR5LT5vcHMtPmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5vcHMtPmZsdXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikgdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwlyc19mbHVzaF9idWZmZXIodHR5KTsKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+dHR5ID0gTlVMTDsKIAlpZiAoaW5mby0+YmxvY2tlZF9vcGVuKSB7CkBAIC05NTUsNyArOTE2LDYgQEAKIAkuc3RvcCA9IHJzX3N0b3AsCiAJLnN0YXJ0ID0gcnNfc3RhcnQsCiAJLmhhbmd1cCA9IHJzX2hhbmd1cCwKLQkuYnJlYWtfY3RsID0gcnNfYnJlYWssCiAJLndhaXRfdW50aWxfc2VudCA9IHJzX3dhaXRfdW50aWxfc2VudCwKIAkucmVhZF9wcm9jID0gcnNfcmVhZF9wcm9jLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDEzZmQxMGUuLjg3ZmVhMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtMzYsNiArMzYsOCBAQAogbWNhX3JlY292ZXJ5LXkJCQkrPSBtY2FfZHJ2Lm8gbWNhX2Rydl9hc20ubwogb2JqLSQoQ09ORklHX0lBNjRfTUNfRVJSX0lOSkVDVCkrPSBlcnJfaW5qZWN0Lm8KIAorb2JqLSQoQ09ORklHX1BBUkFWSVJUKQkJKz0gcGFyYXZpcnQubyBwYXJhdmlydGVudHJ5Lm8KKwogb2JqLSQoQ09ORklHX0lBNjRfRVNJKQkJKz0gZXNpLm8KIGlmbmVxICgkKENPTkZJR19JQTY0X0VTSSksKQogb2JqLXkJCQkJKz0gZXNpX3N0dWIubwkjIG11c3QgYmUgaW4ga2VybmVsIHByb3BlcgpAQCAtNzAsMyArNzIsNDUgQEAKICMgV2UgbXVzdCBidWlsZCBnYXRlLnNvIGJlZm9yZSB3ZSBjYW4gYXNzZW1ibGUgaXQuCiAjIE5vdGU6IGtidWlsZCBkb2VzIG5vdCB0cmFjayB0aGlzIGRlcGVuZGVuY3kgZHVlIHRvIHVzYWdlIG9mIC5pbmNiaW4KICQob2JqKS9nYXRlLWRhdGEubzogJChvYmopL2dhdGUuc28KKworIyBDYWxjdWxhdGUgTlJfSVJRID0gbWF4KElBNjRfTkFUSVZFX05SX0lSUVMsIFhFTl9OUl9JUlFTLCAuLi4pIGJhc2VkIG9uIGNvbmZpZworZGVmaW5lIHNlZC15CisJIi9eLT4ve3M6Xi0+XChbXiBdKlwpIFtcJCQjXSpcKFteIF0qXCkgXCguKlwpOiNkZWZpbmUgXDEgXDIgLyogXDMgKi86OyBzOi0+Ojo7IHA7fSIKK2VuZGVmCitxdWlldF9jbWRfbnJfaXJxcyA9IEdFTiAgICAgJEAKK2RlZmluZSBjbWRfbnJfaXJxcworCShzZXQgLWU7IFwKKwkgZWNobyAiI2lmbmRlZiBfX0FTTV9OUl9JUlFTX0hfXyI7IFwKKwkgZWNobyAiI2RlZmluZSBfX0FTTV9OUl9JUlFTX0hfXyI7IFwKKwkgZWNobyAiLyoiOyBcCisJIGVjaG8gIiAqIERPIE5PVCBNT0RJRlkuIjsgXAorCSBlY2hvICIgKiI7IFwKKwkgZWNobyAiICogVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgS2J1aWxkIjsgXAorCSBlY2hvICIgKiI7IFwKKwkgZWNobyAiICovIjsgXAorCSBlY2hvICIiOyBcCisJIHNlZCAtbmUgJChzZWQteSkgJDw7IFwKKwkgZWNobyAiIjsgXAorCSBlY2hvICIjZW5kaWYiICkgPiAkQAorZW5kZWYKKworIyBXZSB1c2UgaW50ZXJuYWwga2J1aWxkIHJ1bGVzIHRvIGF2b2lkIHRoZSAiaXMgdXAgdG8gZGF0ZSIgbWVzc2FnZSBmcm9tIG1ha2UKK2FyY2gvJChTUkNBUkNIKS9rZXJuZWwvbnItaXJxcy5zOiAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9rZXJuZWwvbnItaXJxcy5jIFwKKwkJCQkkKHdpbGRjYXJkICQoc3JjdHJlZSkvaW5jbHVkZS9hc20taWE2NC8qL2lycS5oKQorCSQoUSlta2RpciAtcCAkKGRpciAkQCkKKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsY2Nfc19jKQorCitpbmNsdWRlL2FzbS1pYTY0L25yLWlycXMuaDogYXJjaC8kKFNSQ0FSQ0gpL2tlcm5lbC9uci1pcnFzLnMKKwkkKFEpbWtkaXIgLXAgJChkaXIgJEApCisJJChjYWxsIGNtZCxucl9pcnFzKQorCitjbGVhbi1maWxlcyArPSAkKG9ianRyZWUpL2luY2x1ZGUvYXNtLWlhNjQvbnItaXJxcy5oCisKKyMKKyMgbmF0aXZlIGl2dC5TIGFuZCBlbnRyeS5TCisjCitBU01fUEFSQVZJUlRfT0JKUyA9IGl2dC5vIGVudHJ5Lm8KK2RlZmluZSBwYXJhdmlydHVhbGl6ZWRfbmF0aXZlCitBRkxBR1NfJCgxKSArPSAtRF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRQorZW5kZWYKKyQoZm9yZWFjaCBvYmosJChBU01fUEFSQVZJUlRfT0JKUyksJChldmFsICQoY2FsbCBwYXJhdmlydHVhbGl6ZWRfbmF0aXZlLCQob2JqKSkpKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwppbmRleCA0MzY4N2NjLi41ZDFlYjdlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwpAQCAtNzc0LDcgKzc3NCw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfQUNQSV9IT1RQTFVHX0NQVQogc3RhdGljCi1pbnQgYWNwaV9tYXBfY3B1Mm5vZGUoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgY3B1LCBsb25nIHBoeXNpZCkKK2ludCBhY3BpX21hcF9jcHUybm9kZShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBjcHUsIGludCBwaHlzaWQpCiB7CiAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQogCWludCBweG1faWQ7CkBAIC04NTQsOCArODU0LDcgQEAKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwogCXN0cnVjdCBhY3BpX21hZHRfbG9jYWxfc2FwaWMgKmxzYXBpYzsKIAljcHVtYXNrX3QgdG1wX21hcDsKLQlsb25nIHBoeXNpZDsKLQlpbnQgY3B1OworCWludCBjcHUsIHBoeXNpZDsKIAogCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX01BVCIsIE5VTEwsICZidWZmZXIpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL2lhNjQva2VybmVsL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggYjg0OThlYS4uN2I0MzU0NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtNTEsNyArNTEsNyBAQAogCXJldHZhbCA9IGlhNjRfcGFsX3NldF9wc3RhdGUoKHU2NCl2YWx1ZSk7CiAKIAlpZiAocmV0dmFsKSB7Ci0JCWRwcmludGsoIkZhaWxlZCB0byBzZXQgZnJlcSB0byAweCV4LCB3aXRoIGVycm9yIDB4JXhcbiIsCisJCWRwcmludGsoIkZhaWxlZCB0byBzZXQgZnJlcSB0byAweCV4LCB3aXRoIGVycm9yIDB4JWx4XG4iLAogCQkgICAgICAgIHZhbHVlLCByZXR2YWwpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC03NCw3ICs3NCw3IEBACiAKIAlpZiAocmV0dmFsKQogCQlkcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgZnJlcSB3aXRoICIKLQkJICAgICAgICAiZXJyb3IgMHgleCwgaWR4IDB4JXhcbiIsIHJldHZhbCwgKnZhbHVlKTsKKwkJCSJlcnJvciAweCVseCwgaWR4IDB4JXhcbiIsIHJldHZhbCwgKnZhbHVlKTsKIAogCXJldHVybiAoaW50KXJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwppbmRleCBjYTJiYjk1Li41NmFiMTU2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCkBAIC0yMyw2ICsyMywxMSBAQAogICogMTEvMDcvMjAwMAogICovCiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICogICAgICAgICAgICAgICAgICAgIHB2X29wcy4KKyAqLworLyoKICAqIEdsb2JhbCAocHJlc2VydmVkKSBwcmVkaWNhdGUgdXNhZ2Ugb24gc3lzY2FsbCBlbnRyeS9leGl0IHBhdGg6CiAgKgogICoJcEtTdGs6CQlTZWUgZW50cnkuaC4KQEAgLTQ1LDYgKzUwLDcgQEAKIAogI2luY2x1ZGUgIm1pbnN0YXRlLmgiCiAKKyNpZmRlZiBfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUKIAkvKgogCSAqIGV4ZWN2ZSgpIGlzIHNwZWNpYWwgYmVjYXVzZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIHdlIG5lZWQgdG8KIAkgKiBzZXR1cCBhIG51bGwgcmVnaXN0ZXIgd2luZG93IGZyYW1lLgpAQCAtMTczLDYgKzE3OSw3IEBACiAJbW92IHJwPWxvYzAKIAlici5yZXQuc3B0ay5tYW55IHJwCiBFTkQoc3lzX2Nsb25lKQorI2VuZGlmIC8qIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRSAqLwogCiAvKgogICogcHJldl90YXNrIDwtIGlhNjRfc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKQEAgLTE4MCw3ICsxODcsNyBAQAogICoJY2FsbGVkLiAgVGhlIGNvZGUgc3RhcnRpbmcgYXQgLm1hcCByZWxpZXMgb24gdGhpcy4gIFRoZSByZXN0IG9mIHRoZSBjb2RlCiAgKglkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGludGVycnVwdCBtYXNraW5nIHN0YXR1cy4KICAqLwotR0xPQkFMX0VOVFJZKGlhNjRfc3dpdGNoX3RvKQorR0xPQkFMX0VOVFJZKF9fcGFyYXZpcnRfc3dpdGNoX3RvKQogCS5wcm9sb2d1ZQogCWFsbG9jIHIxNj1hci5wZnMsMSwwLDAsMAogCURPX1NBVkVfU1dJVENIX1NUQUNLCkBAIC0yMDQsNyArMjExLDcgQEAKIAk7OwogLmRvbmU6CiAJbGQ4IHNwPVtyMjFdCQkJLy8gbG9hZCBrZXJuZWwgc3RhY2sgcG9pbnRlciBvZiBuZXcgdGFzawotCW1vdiBJQTY0X0tSKENVUlJFTlQpPWluMAkvLyB1cGRhdGUgImN1cnJlbnQiIGFwcGxpY2F0aW9uIHJlZ2lzdGVyCisJTU9WX1RPX0tSKENVUlJFTlQsIGluMCwgcjgsIHI5KQkJLy8gdXBkYXRlICJjdXJyZW50IiBhcHBsaWNhdGlvbiByZWdpc3RlcgogCW1vdiByOD1yMTMJCQkvLyByZXR1cm4gcG9pbnRlciB0byBwcmV2aW91c2x5IHJ1bm5pbmcgdGFzawogCW1vdiByMTM9aW4wCQkJLy8gc2V0ICJjdXJyZW50IiBwb2ludGVyCiAJOzsKQEAgLTIxNiwyNiArMjIzLDI1IEBACiAJYnIucmV0LnNwdGsubWFueSBycAkJLy8gYm9vZ2llIG9uIG91dCBpbiBuZXcgY29udGV4dAogCiAubWFwOgotCXJzbSBwc3IuaWMJCQkvLyBpbnRlcnJ1cHRzIChwc3IuaSkgYXJlIGFscmVhZHkgZGlzYWJsZWQgaGVyZQorCVJTTV9QU1JfSUMocjI1KQkJCS8vIGludGVycnVwdHMgKHBzci5pKSBhcmUgYWxyZWFkeSBkaXNhYmxlZCBoZXJlCiAJbW92bCByMjU9UEFHRV9LRVJORUwKIAk7OwogCXNybHouZAogCW9yIHIyMz1yMjUscjIwCQkJLy8gY29uc3RydWN0IFBBIHwgcGFnZSBwcm9wZXJ0aWVzCiAJbW92IHIyNT1JQTY0X0dSQU5VTEVfU0hJRlQ8PDIKIAk7OwotCW1vdiBjci5pdGlyPXIyNQotCW1vdiBjci5pZmE9aW4wCQkJLy8gVkEgb2YgbmV4dCB0YXNrLi4uCisJTU9WX1RPX0lUSVIocDAsIHIyNSwgcjgpCisJTU9WX1RPX0lGQShpbjAsIHI4KQkJLy8gVkEgb2YgbmV4dCB0YXNrLi4uCiAJOzsKIAltb3YgcjI1PUlBNjRfVFJfQ1VSUkVOVF9TVEFDSwotCW1vdiBJQTY0X0tSKENVUlJFTlRfU1RBQ0spPXIyNgkvLyByZW1lbWJlciBsYXN0IHBhZ2Ugd2UgbWFwcGVkLi4uCisJTU9WX1RPX0tSKENVUlJFTlRfU1RBQ0ssIHIyNiwgcjgsIHI5KQkvLyByZW1lbWJlciBsYXN0IHBhZ2Ugd2UgbWFwcGVkLi4uCiAJOzsKIAlpdHIuZCBkdHJbcjI1XT1yMjMJCS8vIHdpcmUgaW4gbmV3IG1hcHBpbmcuLi4KLQlzc20gcHNyLmljCQkJLy8gcmVlbmFibGUgdGhlIHBzci5pYyBiaXQKLQk7OwotCXNybHouZAorCVNTTV9QU1JfSUNfQU5EX1NSTFpfRChyOCwgcjkpCS8vIHJlZW5hYmxlIHRoZSBwc3IuaWMgYml0CiAJYnIuY29uZC5zcHRrIC5kb25lCi1FTkQoaWE2NF9zd2l0Y2hfdG8pCitFTkQoX19wYXJhdmlydF9zd2l0Y2hfdG8pCiAKKyNpZmRlZiBfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUKIC8qCiAgKiBOb3RlIHRoYXQgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBkdXJpbmcgc2F2ZV9zd2l0Y2hfc3RhY2sgYW5kIGxvYWRfc3dpdGNoX3N0YWNrLiAgVGhpcwogICogbWVhbnMgdGhhdCB3ZSBtYXkgZ2V0IGFuIGludGVycnVwdCB3aXRoICJzcCIgcG9pbnRpbmcgdG8gdGhlIG5ldyBrZXJuZWwgc3RhY2sgd2hpbGUKQEAgLTM3NSw3ICszODEsNyBAQAogICoJLSBiNyBob2xkcyBhZGRyZXNzIHRvIHJldHVybiB0bwogICoJLSBtdXN0IG5vdCB0b3VjaCByOC1yMTEKICAqLwotRU5UUlkobG9hZF9zd2l0Y2hfc3RhY2spCitHTE9CQUxfRU5UUlkobG9hZF9zd2l0Y2hfc3RhY2spCiAJLnByb2xvZ3VlCiAJLmFsdHJwIGI3CiAKQEAgLTU3MSw3ICs1NzcsNyBAQAogLnJldDM6CiAocFVTdGspCWNtcC5lcS51bmMgcDYscDA9cjAscjAJCQkvLyBwNiA8LSBwVVN0awogKHBVU3RrKQlyc20gcHNyLmkJCQkJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzCi0JYnIuY29uZC5zcHRrIC53b3JrX3BlbmRpbmdfc3lzY2FsbF9lbmQKKwlici5jb25kLnNwdGsgaWE2NF93b3JrX3BlbmRpbmdfc3lzY2FsbF9lbmQKIAogc3RyYWNlX2Vycm9yOgogCWxkOCByMz1bcjJdCQkJCS8vIGxvYWQgcHRfcmVncy5yOApAQCAtNjM2LDggKzY0MiwxNyBAQAogCWFkZHMgcjI9UFQoUjgpKzE2LHNwCQkJLy8gcjIgPSAmcHRfcmVncy5yOAogCW1vdiByMTA9cjAJCQkJLy8gY2xlYXIgZXJyb3IgaW5kaWNhdGlvbiBpbiByMTAKIChwNykJYnIuY29uZC5zcG50IGhhbmRsZV9zeXNjYWxsX2Vycm9yCS8vIGhhbmRsZSBwb3RlbnRpYWwgc3lzY2FsbCBmYWlsdXJlCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisJOzsKKwlici5jb25kLnNwdGsuZmV3IGlhNjRfbGVhdmVfc3lzY2FsbAorCTs7CisjZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUICovCiBFTkQoaWE2NF9yZXRfZnJvbV9zeXNjYWxsKQorI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKIAkvLyBmYWxsIHRocm91Z2gKKyNlbmRpZgorI2VuZGlmIC8qIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRSAqLworCiAvKgogICogaWE2NF9sZWF2ZV9zeXNjYWxsKCk6IFNhbWUgYXMgaWE2NF9sZWF2ZV9rZXJuZWwsIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QKICAqCW5lZWQgdG8gc3dpdGNoIHRvIGJhbmsgMCBhbmQgZG9lc24ndCByZXN0b3JlIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KQEAgLTY4Miw3ICs2OTcsNyBAQAogICoJICAgICAgYXIuY3NkOiBjbGVhcmVkCiAgKgkgICAgICBhci5zc2Q6IGNsZWFyZWQKICAqLwotRU5UUlkoaWE2NF9sZWF2ZV9zeXNjYWxsKQorR0xPQkFMX0VOVFJZKF9fcGFyYXZpcnRfbGVhdmVfc3lzY2FsbCkKIAlQVF9SRUdTX1VOV0lORF9JTkZPKDApCiAJLyoKIAkgKiB3b3JrLm5lZWRfcmVzY2hlZCBldGMuIG11c3RuJ3QgZ2V0IGNoYW5nZWQgYnkgdGhpcyBDUFUgYmVmb3JlIGl0IHJldHVybnMgdG8KQEAgLTY5MiwxMSArNzA3LDExIEBACiAJICogZXh0cmEgd29yay4gIFdlIGFsd2F5cyBjaGVjayBmb3IgZXh0cmEgd29yayB3aGVuIHJldHVybmluZyB0byB1c2VyLWxldmVsLgogCSAqIFdpdGggQ09ORklHX1BSRUVNUFQsIHdlIGFsc28gY2hlY2sgZm9yIGV4dHJhIHdvcmsgd2hlbiB0aGUgcHJlZW1wdF9jb3VudAogCSAqIGlzIDAuICBBZnRlciBleHRyYSB3b3JrIHByb2Nlc3NpbmcgaGFzIGJlZW4gY29tcGxldGVkLCBleGVjdXRpb24KLQkgKiByZXN1bWVzIGF0IC53b3JrX3Byb2Nlc3NlZF9zeXNjYWxsIHdpdGggcDYgc2V0IHRvIDEgaWYgdGhlIGV4dHJhLXdvcmstY2hlY2sKKwkgKiByZXN1bWVzIGF0IGlhNjRfd29ya19wcm9jZXNzZWRfc3lzY2FsbCB3aXRoIHA2IHNldCB0byAxIGlmIHRoZSBleHRyYS13b3JrLWNoZWNrCiAJICogbmVlZHMgdG8gYmUgcmVkb25lLgogCSAqLwogI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JcnNtIHBzci5pCQkJCS8vIGRpc2FibGUgaW50ZXJydXB0cworCVJTTV9QU1JfSShwMCwgcjIsIHIxOCkJCQkvLyBkaXNhYmxlIGludGVycnVwdHMKIAljbXAuZXEgcEx2U3lzLHAwPXIwLHIwCQkJLy8gcEx2U3lzPTE6IGxlYXZlIGZyb20gc3lzY2FsbAogKHBLU3RrKSBhZGRzIHIyMD1USV9QUkVfQ09VTlQrSUE2NF9UQVNLX1NJWkUscjEzCiAJOzsKQEAgLTcwNiwxMSArNzIxLDEyIEBACiAJOzsKIAljbXAuZXEgcDYscDA9cjIxLHIwCQkvLyBwNiA8LSBwVVN0ayB8fCAocHJlZW1wdF9jb3VudCA9PSAwKQogI2Vsc2UgLyogIUNPTkZJR19QUkVFTVBUICovCi0ocFVTdGspCXJzbSBwc3IuaQorCVJTTV9QU1JfSShwVVN0aywgcjIsIHIxOCkKIAljbXAuZXEgcEx2U3lzLHAwPXIwLHIwCQkvLyBwTHZTeXM9MTogbGVhdmUgZnJvbSBzeXNjYWxsCiAocFVTdGspCWNtcC5lcS51bmMgcDYscDA9cjAscjAJCS8vIHA2IDwtIHBVU3RrCiAjZW5kaWYKLS53b3JrX3Byb2Nlc3NlZF9zeXNjYWxsOgorLmdsb2JhbCBfX3BhcmF2aXJ0X3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGw7CitfX3BhcmF2aXJ0X3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGw6CiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAlhZGRzIHIyPVBUKExPQURSUykrMTYscjEyCiAocFVTdGspCW1vdi5tIHIyMj1hci5pdGMJCQkvLyBmZXRjaCB0aW1lIGF0IGxlYXZlCkBAIC03NDQsNyArNzYwLDcgQEAKIChwTm9uU3lzKSBicmVhayAwCQkvLyAgICAgIGJ1ZyBjaGVjazogd2Ugc2hvdWxkbid0IGJlIGhlcmUgaWYgcE5vblN5cyBpcyBUUlVFIQogCTs7CiAJaW52YWxhCQkJLy8gTTB8MSBpbnZhbGlkYXRlIEFMQVQKLQlyc20gcHNyLmkgfCBwc3IuaWMJLy8gTTIgICB0dXJuIG9mZiBpbnRlcnJ1cHRzIGFuZCBpbnRlcnJ1cHRpb24gY29sbGVjdGlvbgorCVJTTV9QU1JfSV9JQyhyMjgsIHIyOSwgcjMwKQkvLyBNMiAgIHR1cm4gb2ZmIGludGVycnVwdHMgYW5kIGludGVycnVwdGlvbiBjb2xsZWN0aW9uCiAJY21wLmVxIHA5LHAwPXIwLHIwCS8vIEEgICAgc2V0IHA5IHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIHJlc3RvcmUgY3IuaWZzCiAKIAlsZDggcjI5PVtyMl0sMTYJCS8vIE0wfDEgbG9hZCBjci5pcHNyCkBAIC03NjUsNyArNzgxLDcgQEAKIAk7OwogI2VuZGlmCiAJbGQ4IHIyNj1bcjJdLFBUKEIwKS1QVChBUl9QRlMpCS8vIE0wfDEgbG9hZCBhci5wZnMKLShwS1N0aykJbW92IHIyMj1wc3IJCQkvLyBNMiAgIHJlYWQgUFNSIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkCisJTU9WX0ZST01fUFNSKHBLU3RrLCByMjIsIHIyMSkJLy8gTTIgICByZWFkIFBTUiBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAogCW5vcCAwCiAJOzsKIAlsZDggcjIxPVtyMl0sUFQoQVJfUk5BVCktUFQoQjApIC8vIE0wfDEgbG9hZCBiMApAQCAtNzk4LDcgKzgxNCw3IEBACiAKIAlzcmx6LmQJCQkJLy8gTTAgICBlbnN1cmUgaW50ZXJydXB0aW9uIGNvbGxlY3Rpb24gaXMgb2ZmIChmb3IgY292ZXIpCiAJc2hyLnUgcjE4PXIxOSwxNgkJLy8gSTB8MSBnZXQgYnl0ZSBzaXplIG9mIGV4aXN0aW5nICJkaXJ0eSIgcGFydGl0aW9uCi0JY292ZXIJCQkJLy8gQiAgICBhZGQgY3VycmVudCBmcmFtZSBpbnRvIGRpcnR5IHBhcnRpdGlvbiAmIHNldCBjci5pZnMKKwlDT1ZFUgkJCQkvLyBCICAgIGFkZCBjdXJyZW50IGZyYW1lIGludG8gZGlydHkgcGFydGl0aW9uICYgc2V0IGNyLmlmcwogCTs7CiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAltb3YgcjE5PWFyLmJzcAkJCS8vIE0yICAgZ2V0IG5ldyBiYWNraW5nIHN0b3JlIHBvaW50ZXIKQEAgLTgyMyw4ICs4MzksOSBAQAogCW1vdi5tIGFyLnNzZD1yMAkJCS8vIE0yICAgY2xlYXIgYXIuc3NkCiAJbW92IGYxMT1mMAkJCS8vIEYgICAgY2xlYXIgZjExCiAJYnIuY29uZC5zcHRrLm1hbnkgcmJzX3N3aXRjaAkvLyBCCi1FTkQoaWE2NF9sZWF2ZV9zeXNjYWxsKQorRU5EKF9fcGFyYXZpcnRfbGVhdmVfc3lzY2FsbCkKIAorI2lmZGVmIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRQogI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKIEdMT0JBTF9FTlRSWShpYTY0X3JldF9mcm9tX2lhMzJfZXhlY3ZlKQogCVBUX1JFR1NfVU5XSU5EX0lORk8oMCkKQEAgLTgzNSwxMCArODUyLDIwIEBACiAJc3Q4LnNwaWxsIFtyMl09cjgJLy8gc3RvcmUgcmV0dXJuIHZhbHVlIGluIHNsb3QgZm9yIHI4IGFuZCBzZXQgdW5hdCBiaXQKIAkubWVtLm9mZnNldCA4LDAKIAlzdDguc3BpbGwgW3IzXT1yMAkvLyBjbGVhciBlcnJvciBpbmRpY2F0aW9uIGluIHNsb3QgZm9yIHIxMCBhbmQgc2V0IHVuYXQgYml0CisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisJOzsKKwkvLyBkb24ndCBmYWxsIHRocm91Z2gsIGlhNjRfbGVhdmVfa2VybmVsIG1heSBiZSAjZGVmaW5lJ2QKKwlici5jb25kLnNwdGsuZmV3IGlhNjRfbGVhdmVfa2VybmVsCisJOzsKKyNlbmRpZiAvKiBDT05GSUdfUEFSQVZJUlQgKi8KIEVORChpYTY0X3JldF9mcm9tX2lhMzJfZXhlY3ZlKQorI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKIAkvLyBmYWxsIHRocm91Z2gKKyNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19JQTMyX1NVUFBPUlQgKi8KLUdMT0JBTF9FTlRSWShpYTY0X2xlYXZlX2tlcm5lbCkKKyNlbmRpZiAvKiBfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUgKi8KKworR0xPQkFMX0VOVFJZKF9fcGFyYXZpcnRfbGVhdmVfa2VybmVsKQogCVBUX1JFR1NfVU5XSU5EX0lORk8oMCkKIAkvKgogCSAqIHdvcmsubmVlZF9yZXNjaGVkIGV0Yy4gbXVzdG4ndCBnZXQgY2hhbmdlZCBieSB0aGlzIENQVSBiZWZvcmUgaXQgcmV0dXJucyB0bwpAQCAtODUyLDcgKzg3OSw3IEBACiAJICogbmVlZHMgdG8gYmUgcmVkb25lLgogCSAqLwogI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JcnNtIHBzci5pCQkJCS8vIGRpc2FibGUgaW50ZXJydXB0cworCVJTTV9QU1JfSShwMCwgcjE3LCByMzEpCQkJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzCiAJY21wLmVxIHAwLHBMdlN5cz1yMCxyMAkJCS8vIHBMdlN5cz0wOiBsZWF2ZSBmcm9tIGtlcm5lbAogKHBLU3RrKQlhZGRzIHIyMD1USV9QUkVfQ09VTlQrSUE2NF9UQVNLX1NJWkUscjEzCiAJOzsKQEAgLTg2Miw3ICs4ODksNyBAQAogCTs7CiAJY21wLmVxIHA2LHAwPXIyMSxyMAkJLy8gcDYgPC0gcFVTdGsgfHwgKHByZWVtcHRfY291bnQgPT0gMCkKICNlbHNlCi0ocFVTdGspCXJzbSBwc3IuaQorCVJTTV9QU1JfSShwVVN0aywgcjE3LCByMzEpCiAJY21wLmVxIHAwLHBMdlN5cz1yMCxyMAkJLy8gcEx2U3lzPTA6IGxlYXZlIGZyb20ga2VybmVsCiAocFVTdGspCWNtcC5lcS51bmMgcDYscDA9cjAscjAJCS8vIHA2IDwtIHBVU3RrCiAjZW5kaWYKQEAgLTkxMCw3ICs5MzcsNyBAQAogCW1vdiBhci5jc2Q9cjMwCiAJbW92IGFyLnNzZD1yMzEKIAk7OwotCXJzbSBwc3IuaSB8IHBzci5pYwkvLyBpbml0aWF0ZSB0dXJuaW5nIG9mZiBvZiBpbnRlcnJ1cHQgYW5kIGludGVycnVwdGlvbiBjb2xsZWN0aW9uCisJUlNNX1BTUl9JX0lDKHIyMywgcjIyLCByMjUpCS8vIGluaXRpYXRlIHR1cm5pbmcgb2ZmIG9mIGludGVycnVwdCBhbmQgaW50ZXJydXB0aW9uIGNvbGxlY3Rpb24KIAlpbnZhbGEJCQkvLyBpbnZhbGlkYXRlIEFMQVQKIAk7OwogCWxkOC5maWxsIHIyMj1bcjJdLDI0CkBAIC05NDIsNyArOTY5LDcgQEAKIAltb3YgYXIuY2N2PXIxNQogCTs7CiAJbGRmLmZpbGwgZjExPVtyMl0KLQlic3cuMAkJCS8vIHN3aXRjaCBiYWNrIHRvIGJhbmsgMCAobm8gc3RvcCBiaXQgcmVxdWlyZWQgYmVmb3JlaGFuZC4uLikKKwlCU1dfMChyMiwgcjMsIHIxNSkJLy8gc3dpdGNoIGJhY2sgdG8gYmFuayAwIChubyBzdG9wIGJpdCByZXF1aXJlZCBiZWZvcmVoYW5kLi4uKQogCTs7CiAocFVTdGspCW1vdiByMTg9SUE2NF9LUihDVVJSRU5UKS8vIE0yICgxMiBjeWNsZSByZWFkIGxhdGVuY3kpCiAJYWRkcyByMTY9UFQoQ1JfSVBTUikrMTYscjEyCkBAIC05NTAsMTIgKzk3NywxMiBAQAogCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAkucHJlZC5yZWwubXV0ZXggcFVTdGsscEtTdGsKLShwS1N0aykJbW92IHIyMj1wc3IJCS8vIE0yIHJlYWQgUFNSIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkCisJTU9WX0ZST01fUFNSKHBLU3RrLCByMjIsIHIyOSkJLy8gTTIgcmVhZCBQU1Igbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKIChwVVN0aykJbW92Lm0gcjIyPWFyLml0YwkvLyBNICBmZXRjaCB0aW1lIGF0IGxlYXZlCiAJbm9wLmkgMAogCTs7CiAjZWxzZQotKHBLU3RrKQltb3YgcjIyPXBzcgkJLy8gTTIgcmVhZCBQU1Igbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKKwlNT1ZfRlJPTV9QU1IocEtTdGssIHIyMiwgcjI5KQkvLyBNMiByZWFkIFBTUiBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAogCW5vcC5pIDAKIAlub3AuaSAwCiAJOzsKQEAgLTEwMjcsNyArMTA1NCw3IEBACiAJICogTk9URTogYWxsb2MsIGxvYWRycywgYW5kIGNvdmVyIGNhbid0IGJlIHByZWRpY2F0ZWQuCiAJICovCiAocE5vblN5cykgYnIuY29uZC5kcG50IGRvbnRfcHJlc2VydmVfY3VycmVudF9mcmFtZQotCWNvdmVyCQkJCS8vIGFkZCBjdXJyZW50IGZyYW1lIGludG8gZGlydHkgcGFydGl0aW9uIGFuZCBzZXQgY3IuaWZzCisJQ09WRVIJCQkJLy8gYWRkIGN1cnJlbnQgZnJhbWUgaW50byBkaXJ0eSBwYXJ0aXRpb24gYW5kIHNldCBjci5pZnMKIAk7OwogCW1vdiByMTk9YXIuYnNwCQkJLy8gZ2V0IG5ldyBiYWNraW5nIHN0b3JlIHBvaW50ZXIKIHJic19zd2l0Y2g6CkBAIC0xMTMwLDE2ICsxMTU3LDE2IEBACiAocEtTdGspCWRlcCByMjk9cjIyLHIyOSwyMSwxCS8vIEkwIHVwZGF0ZSBpcHNyLnBwIHdpdGggcHNyLnBwCiAocEx2U3lzKW1vdiByMTY9cjAJCS8vIEEgIGNsZWFyIHIxNiBmb3IgbGVhdmVfc3lzY2FsbCwgbm8tb3Agb3RoZXJ3aXNlCiAJOzsKLQltb3YgY3IuaXBzcj1yMjkJCS8vIE0yCisJTU9WX1RPX0lQU1IocDAsIHIyOSwgcjI1KQkvLyBNMgogCW1vdiBhci5wZnM9cjI2CQkvLyBJMAogKHBMdlN5cyltb3YgcjE3PXIwCQkvLyBBICBjbGVhciByMTcgZm9yIGxlYXZlX3N5c2NhbGwsIG5vLW9wIG90aGVyd2lzZQogCi0ocDkpCW1vdiBjci5pZnM9cjMwCQkvLyBNMgorCU1PVl9UT19JRlMocDksIHIzMCwgcjI1KS8vIE0yCiAJbW92IGIwPXIyMQkJLy8gSTAKIChwTHZTeXMpbW92IHIxOD1yMAkJLy8gQSAgY2xlYXIgcjE4IGZvciBsZWF2ZV9zeXNjYWxsLCBuby1vcCBvdGhlcndpc2UKIAogCW1vdiBhci5mcHNyPXIyMAkJLy8gTTIKLQltb3YgY3IuaWlwPXIyOAkJLy8gTTIKKwlNT1ZfVE9fSUlQKHIyOCwgcjI1KQkvLyBNMgogCW5vcCAwCiAJOzsKIChwVVN0aykJbW92IGFyLnJuYXQ9cjI0CQkvLyBNMiBtdXN0IGhhcHBlbiB3aXRoIFJTRSBpbiBsYXp5IG1vZGUKQEAgLTExNDgsNyArMTE3NSw3IEBACiAKIAltb3YgYXIucnNjPXIyNwkJLy8gTTIKIAltb3YgcHI9cjMxLC0xCQkvLyBJMAotCXJmaQkJCS8vIEIKKwlSRkkJCQkvLyBCCiAKIAkvKgogCSAqIE9uIGVudHJ5OgpAQCAtMTE3NCwzNSArMTIwMSwzNiBAQAogCTs7CiAocEtTdGspIHN0NCBbcjIwXT1yMjEKICNlbmRpZgotCXNzbSBwc3IuaQkJLy8gZW5hYmxlIGludGVycnVwdHMKKwlTU01fUFNSX0kocDAsIHA2LCByMikJLy8gZW5hYmxlIGludGVycnVwdHMKIAlici5jYWxsLnNwbnQubWFueSBycD1zY2hlZHVsZQogLnJldDk6CWNtcC5lcSBwNixwMD1yMCxyMAkvLyBwNiA8LSAxIChyZS1jaGVjaykKLQlyc20gcHNyLmkJCS8vIGRpc2FibGUgaW50ZXJydXB0cworCVJTTV9QU1JfSShwMCwgcjIsIHIyMCkJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzCiAJOzsKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogKHBLU3RrKQlhZGRzIHIyMD1USV9QUkVfQ09VTlQrSUE2NF9UQVNLX1NJWkUscjEzCiAJOzsKIChwS1N0aykJc3Q0IFtyMjBdPXIwCQkvLyBwcmVlbXB0X2NvdW50KCkgPC0gMAogI2VuZGlmCi0ocEx2U3lzKWJyLmNvbmQuc3B0ay5mZXcgIC53b3JrX3BlbmRpbmdfc3lzY2FsbF9lbmQKKyhwTHZTeXMpYnIuY29uZC5zcHRrLmZldyAgX19wYXJhdmlydF9wZW5kaW5nX3N5c2NhbGxfZW5kCiAJYnIuY29uZC5zcHRrLm1hbnkgLndvcmtfcHJvY2Vzc2VkX2tlcm5lbAogCiAubm90aWZ5OgogKHBVU3RrKQlici5jYWxsLnNwbnQubWFueSBycD1ub3RpZnlfcmVzdW1lX3VzZXIKIC5yZXQxMDoJY21wLm5lIHA2LHAwPXIwLHIwCS8vIHA2IDwtIDAgKGRvbid0IHJlLWNoZWNrKQotKHBMdlN5cylici5jb25kLnNwdGsuZmV3ICAud29ya19wZW5kaW5nX3N5c2NhbGxfZW5kCisocEx2U3lzKWJyLmNvbmQuc3B0ay5mZXcgIF9fcGFyYXZpcnRfcGVuZGluZ19zeXNjYWxsX2VuZAogCWJyLmNvbmQuc3B0ay5tYW55IC53b3JrX3Byb2Nlc3NlZF9rZXJuZWwKIAotLndvcmtfcGVuZGluZ19zeXNjYWxsX2VuZDoKKy5nbG9iYWwgX19wYXJhdmlydF9wZW5kaW5nX3N5c2NhbGxfZW5kOworX19wYXJhdmlydF9wZW5kaW5nX3N5c2NhbGxfZW5kOgogCWFkZHMgcjI9UFQoUjgpKzE2LHIxMgogCWFkZHMgcjM9UFQoUjEwKSsxNixyMTIKIAk7OwogCWxkOCByOD1bcjJdCiAJbGQ4IHIxMD1bcjNdCi0JYnIuY29uZC5zcHRrLm1hbnkgLndvcmtfcHJvY2Vzc2VkX3N5c2NhbGwKKwlici5jb25kLnNwdGsubWFueSBfX3BhcmF2aXJ0X3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGxfdGFyZ2V0CitFTkQoX19wYXJhdmlydF9sZWF2ZV9rZXJuZWwpCiAKLUVORChpYTY0X2xlYXZlX2tlcm5lbCkKLQorI2lmZGVmIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRQogRU5UUlkoaGFuZGxlX3N5c2NhbGxfZXJyb3IpCiAJLyoKIAkgKiBTb21lIHN5c3RlbSBjYWxscyAoZS5nLiwgcHRyYWNlLCBtbWFwKSBjYW4gcmV0dXJuIGFyYml0cmFyeSB2YWx1ZXMgd2hpY2ggY291bGQKQEAgLTEyNDQsNyArMTI3Miw3IEBACiAJICogV2UgZGVjbGFyZSA4IGlucHV0IHJlZ2lzdGVycyBzbyB0aGUgc3lzdGVtIGNhbGwgYXJncyBnZXQgcHJlc2VydmVkLAogCSAqIGluIGNhc2Ugd2UgbmVlZCB0byByZXN0YXJ0IGEgc3lzdGVtIGNhbGwuCiAJICovCi1FTlRSWShub3RpZnlfcmVzdW1lX3VzZXIpCitHTE9CQUxfRU5UUlkobm90aWZ5X3Jlc3VtZV91c2VyKQogCS5wcm9sb2d1ZSBBU01fVU5XX1BSTEdfUlB8QVNNX1VOV19QUkxHX1BGUywgQVNNX1VOV19QUkxHX0dSU0FWRSg4KQogCWFsbG9jIGxvYzE9YXIucGZzLDgsMiwzLDAgLy8gcHJlc2VydmUgYWxsIGVpZ2h0IGlucHV0IHJlZ3MgaW4gY2FzZSBvZiBzeXNjYWxsIHJlc3RhcnQhCiAJbW92IHI5PWFyLnVuYXQKQEAgLTEzMDYsNyArMTMzNCw3IEBACiAJYWRkcyBzcD0xNixzcAogCTs7CiAJbGQ4IHI5PVtzcF0JCQkJLy8gbG9hZCBuZXcgYXIudW5hdAotCW1vdi5zcHRrIGI3PXI4LGlhNjRfbGVhdmVfa2VybmVsCisJbW92LnNwdGsgYjc9cjgsaWE2NF9uYXRpdmVfbGVhdmVfa2VybmVsCiAJOzsKIAltb3YgYXIudW5hdD1yOQogCWJyLm1hbnkgYjcKQEAgLTE2NjUsMyArMTY5Myw0IEBACiAJZGF0YTggc3lzX3RpbWVyZmRfZ2V0dGltZQogCiAJLm9yZyBzeXNfY2FsbF90YWJsZSArIDgqTlJfc3lzY2FsbHMJLy8gZ3VhcmQgYWdhaW5zdCBmYWlsdXJlcyB0byBpbmNyZWFzZSBOUl9zeXNjYWxscworI2VuZGlmIC8qIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lcnJfaW5qZWN0LmMgYi9hcmNoL2lhNjQva2VybmVsL2Vycl9pbmplY3QuYwppbmRleCBiNjQyNjQ4Li5jNTM5YzY4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2Vycl9pbmplY3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2Vycl9pbmplY3QuYwpAQCAtNTUsNyArNTUsOCBAQAogCiAjZGVmaW5lIHNob3cobmFtZSkgCQkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90IAkJCQkJCQkJXAotc2hvd18jI25hbWUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQkJCQlcCitzaG93XyMjbmFtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJXAorCQljaGFyICpidWYpCQkJCQkJXAogewkJCQkJCQkJCVwKIAl1MzIgY3B1PWRldi0+aWQ7CQkJCQkJXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgbmFtZVtjcHVdKTsJCQlcCkBAIC02Myw3ICs2NCw4IEBACiAKICNkZWZpbmUgc3RvcmUobmFtZSkJCQkJCQkJXAogc3RhdGljIHNzaXplX3QgCQkJCQkJCQlcCi1zdG9yZV8jI25hbWUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkJXAorc3RvcmVfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAlcCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCVwKIHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IGNwdT1kZXYtPmlkOwkJCQkJXAogCW5hbWVbY3B1XSA9IHNpbXBsZV9zdHJ0b3VsbChidWYsIE5VTEwsIDE2KTsJCQlcCkBAIC03Niw3ICs3OCw4IEBACiAgKiBwcm9jZXNzb3IuIFRoZSBjcHUgbnVtYmVyIGluIGRyaXZlciBpcyBvbmx5IHVzZWQgZm9yIHN0b3JpbmcgZGF0YS4KICAqLwogc3RhdGljIHNzaXplX3QKLXN0b3JlX2NhbGxfc3RhcnQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3N0b3JlX2NhbGxfc3RhcnQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJdW5zaWduZWQgaW50IGNwdT1kZXYtPmlkOwogCXVuc2lnbmVkIGxvbmcgY2FsbF9zdGFydCA9IHNpbXBsZV9zdHJ0b3VsbChidWYsIE5VTEwsIDE2KTsKQEAgLTEyNCwxNCArMTI3LDE2IEBACiBzdG9yZShlcnJfdHlwZV9pbmZvKQogCiBzdGF0aWMgc3NpemVfdAotc2hvd192aXJ0dWFsX3RvX3BoeXMoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc2hvd192aXJ0dWFsX3RvX3BoeXMoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7CiAJdW5zaWduZWQgaW50IGNwdT1kZXYtPmlkOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgcGh5c19hZGRyW2NwdV0pOwogfQogCiBzdGF0aWMgc3NpemVfdAotc3RvcmVfdmlydHVhbF90b19waHlzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdG9yZV92aXJ0dWFsX3RvX3BoeXMoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCXVuc2lnbmVkIGludCBjcHU9ZGV2LT5pZDsKIAl1NjQgdmlydF9hZGRyPXNpbXBsZV9zdHJ0b3VsbChidWYsIE5VTEwsIDE2KTsKQEAgLTE1NCw3ICsxNTksOCBAQAogc3RvcmUoZXJyX3N0cnVjdF9pbmZvKQogCiBzdGF0aWMgc3NpemVfdAotc2hvd19lcnJfZGF0YV9idWZmZXIoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc2hvd19lcnJfZGF0YV9idWZmZXIoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgaW50IGNwdT1kZXYtPmlkOwogCkBAIC0xNjUsNyArMTcxLDkgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXN0b3JlX2Vycl9kYXRhX2J1ZmZlcihzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQorc3RvcmVfZXJyX2RhdGFfYnVmZmVyKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJdW5zaWduZWQgaW50IGNwdT1kZXYtPmlkOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TCmluZGV4IGRkZWFiNGUuLmRiNTQwZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TCkBAIC0yNiwxMSArMjYsMTQgQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcGFsLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWNhX2FzbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKICNkZWZpbmUgU0FMX1BTUl9CSVRTX1RPX1NFVAkJCQlcCkBAIC0zNjcsNiArMzcwLDQ0IEBACiAJOzsKIChpc0JQKQlzdDggW3IyXT1yMjgJCS8vIHNhdmUgdGhlIGFkZHJlc3Mgb2YgdGhlIGJvb3QgcGFyYW0gYXJlYSBwYXNzZWQgYnkgdGhlIGJvb3Rsb2FkZXIKIAorI2lmZGVmIENPTkZJR19QQVJBVklSVAorCisJbW92bCByMTQ9aHlwZXJ2aXNvcl9zZXR1cF9ob29rcworCW1vdmwgcjE1PWh5cGVydmlzb3JfdHlwZQorCW1vdiByMTY9bnVtX2h5cGVydmlzb3JfaG9va3MKKwk7OworCWxkOCByMj1bcjE1XQorCTs7CisJY21wLmx0dSBwNyxwMD1yMixyMTYJLy8gYXJyYXkgc2l6ZSBjaGVjaworCXNobGFkZCByOD1yMiwzLHIxNAorCTs7CisocDcpCWxkOCByOT1bcjhdCisJOzsKKyhwNykJbW92IGIxPXI5CisocDcpCWNtcC5uZS51bmMgcDcscDA9cjkscjAJLy8gbm8gYWN0dWFsIGJyYW5jaCB0byBOVUxMCisJOzsKKyhwNykJYnIuY2FsbC5zcHRrLm1hbnkgcnA9YjEKKworCV9fSU5JVERBVEEKKworZGVmYXVsdF9zZXR1cF9ob29rID0gMAkJLy8gQ3VycmVudGx5IG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZS4KKworCS53ZWFrIHhlbl9zZXR1cF9ob29rCisKKwkuZ2xvYmFsIGh5cGVydmlzb3JfdHlwZQoraHlwZXJ2aXNvcl90eXBlOgorCWRhdGE4CQlQQVJBVklSVF9IWVBFUlZJU09SX1RZUEVfREVGQVVMVAorCisJLy8gbXVzdCBoYXZlIHRoZSBzYW1lIG9yZGVyIHdpdGggUEFSQVZJUlRfSFlQRVJWSVNPUl9UWVBFX3h4eAorCitoeXBlcnZpc29yX3NldHVwX2hvb2tzOgorCWRhdGE4CQlkZWZhdWx0X3NldHVwX2hvb2sKKwlkYXRhOAkJeGVuX3NldHVwX2hvb2sKK251bV9oeXBlcnZpc29yX2hvb2tzID0gKC4gLSBoeXBlcnZpc29yX3NldHVwX2hvb2tzKSAvIDgKKwkucHJldmlvdXMKKworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfU01QCiAoaXNBUCkJYnIuY2FsbC5zcHRrLm1hbnkgcnA9c3RhcnRfc2Vjb25kYXJ5CiAucmV0MDoKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKaW5kZXggMzk3NTJjZC4uM2JjMmZhNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKQEAgLTU4NSw2ICs1ODUsMTUgQEAKIAlyZXR1cm4gKGlvc2FwaWNfaW50cl9pbmZvW2lycV0uY291bnQgPiAxKTsKIH0KIAorc3RydWN0IGlycV9jaGlwKgoraWE2NF9uYXRpdmVfaW9zYXBpY19nZXRfaXJxX2NoaXAodW5zaWduZWQgbG9uZyB0cmlnZ2VyKQoreworCWlmICh0cmlnZ2VyID09IElPU0FQSUNfRURHRSkKKwkJcmV0dXJuICZpcnFfdHlwZV9pb3NhcGljX2VkZ2U7CisJZWxzZQorCQlyZXR1cm4gJmlycV90eXBlX2lvc2FwaWNfbGV2ZWw7Cit9CisKIHN0YXRpYyBpbnQKIHJlZ2lzdGVyX2ludHIgKHVuc2lnbmVkIGludCBnc2ksIGludCBpcnEsIHVuc2lnbmVkIGNoYXIgZGVsaXZlcnksCiAJICAgICAgIHVuc2lnbmVkIGxvbmcgcG9sYXJpdHksIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKQEAgLTYzNSwxMyArNjQ0LDEwIEBACiAJaW9zYXBpY19pbnRyX2luZm9baXJxXS5kbW9kZSAgICA9IGRlbGl2ZXJ5OwogCWlvc2FwaWNfaW50cl9pbmZvW2lycV0udHJpZ2dlciAgPSB0cmlnZ2VyOwogCi0JaWYgKHRyaWdnZXIgPT0gSU9TQVBJQ19FREdFKQotCQlpcnFfdHlwZSA9ICZpcnFfdHlwZV9pb3NhcGljX2VkZ2U7Ci0JZWxzZQotCQlpcnFfdHlwZSA9ICZpcnFfdHlwZV9pb3NhcGljX2xldmVsOworCWlycV90eXBlID0gaW9zYXBpY19nZXRfaXJxX2NoaXAodHJpZ2dlcik7CiAKIAlpZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCWlmIChpZGVzYy0+Y2hpcCAhPSBpcnFfdHlwZSkgeworCWlmIChpcnFfdHlwZSAhPSBOVUxMICYmIGlkZXNjLT5jaGlwICE9IGlycV90eXBlKSB7CiAJCWlmIChpZGVzYy0+Y2hpcCAhPSAmbm9faXJxX3R5cGUpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIiVzOiBjaGFuZ2luZyB2ZWN0b3IgJWQgZnJvbSAlcyB0byAlc1xuIiwKQEAgLTk3NCw2ICs5ODAsMjIgQEAKIH0KIAogdm9pZCBfX2luaXQKK2lhNjRfbmF0aXZlX2lvc2FwaWNfcGNhdF9jb21wYXRfaW5pdCh2b2lkKQoreworCWlmIChwY2F0X2NvbXBhdCkgeworCQkvKgorCQkgKiBEaXNhYmxlIHRoZSBjb21wYXRpYmlsaXR5IG1vZGUgaW50ZXJydXB0cyAoODI1OSBzdHlsZSksCisJCSAqIG5lZWRzIElOL09VVCBzdXBwb3J0IGVuYWJsZWQuCisJCSAqLworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiJXM6IERpc2FibGluZyBQQy1BVCBjb21wYXRpYmxlIDgyNTkgaW50ZXJydXB0c1xuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJb3V0YigweGZmLCAweEExKTsKKwkJb3V0YigweGZmLCAweDIxKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0CiBpb3NhcGljX3N5c3RlbV9pbml0IChpbnQgc3lzdGVtX3BjYXRfY29tcGF0KQogewogCWludCBpcnE7CkBAIC05ODcsMTcgKzEwMDksOCBAQAogCX0KIAogCXBjYXRfY29tcGF0ID0gc3lzdGVtX3BjYXRfY29tcGF0OwotCWlmIChwY2F0X2NvbXBhdCkgewotCQkvKgotCQkgKiBEaXNhYmxlIHRoZSBjb21wYXRpYmlsaXR5IG1vZGUgaW50ZXJydXB0cyAoODI1OSBzdHlsZSksCi0JCSAqIG5lZWRzIElOL09VVCBzdXBwb3J0IGVuYWJsZWQuCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiJXM6IERpc2FibGluZyBQQy1BVCBjb21wYXRpYmxlIDgyNTkgaW50ZXJydXB0c1xuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQkJb3V0YigweGZmLCAweEExKTsKLQkJb3V0YigweGZmLCAweDIxKTsKLQl9CisJaWYgKHBjYXRfY29tcGF0KQorCQlpb3NhcGljX3BjYXRfY29tcGF0X2luaXQoKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYwppbmRleCA1NTM4NDcxLi4yOGQzZDQ4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIH0KIAogaW50Ci1hc3NpZ25faXJxX3ZlY3RvciAoaW50IGlycSkKK2lhNjRfbmF0aXZlX2Fzc2lnbl9pcnFfdmVjdG9yIChpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHZlY3RvciwgY3B1OwpAQCAtMjIyLDcgKzIyMiw3IEBACiB9CiAKIHZvaWQKLWZyZWVfaXJxX3ZlY3RvciAoaW50IHZlY3RvcikKK2lhNjRfbmF0aXZlX2ZyZWVfaXJxX3ZlY3RvciAoaW50IHZlY3RvcikKIHsKIAlpZiAodmVjdG9yIDwgSUE2NF9GSVJTVF9ERVZJQ0VfVkVDVE9SIHx8CiAJICAgIHZlY3RvciA+IElBNjRfTEFTVF9ERVZJQ0VfVkVDVE9SKQpAQCAtNjAwLDcgKzYwMCw2IEBACiB7CiAJQlVHKCk7CiB9Ci1leHRlcm4gaXJxcmV0dXJuX3QgaGFuZGxlX0lQSSAoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXBpX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9CWhhbmRsZV9JUEksCkBAIC02MjMsNyArNjIyLDcgQEAKICNlbmRpZgogCiB2b2lkCi1yZWdpc3Rlcl9wZXJjcHVfaXJxIChpYTY0X3ZlY3RvciB2ZWMsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKK2lhNjRfbmF0aXZlX3JlZ2lzdGVyX3BlcmNwdV9pcnEgKGlhNjRfdmVjdG9yIHZlYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogewogCWlycV9kZXNjX3QgKmRlc2M7CiAJdW5zaWduZWQgaW50IGlycTsKQEAgLTYzOCwxMyArNjM3LDIxIEBACiB9CiAKIHZvaWQgX19pbml0Ci1pbml0X0lSUSAodm9pZCkKK2lhNjRfbmF0aXZlX3JlZ2lzdGVyX2lwaSh2b2lkKQogewotCXJlZ2lzdGVyX3BlcmNwdV9pcnEoSUE2NF9TUFVSSU9VU19JTlRfVkVDVE9SLCBOVUxMKTsKICNpZmRlZiBDT05GSUdfU01QCiAJcmVnaXN0ZXJfcGVyY3B1X2lycShJQTY0X0lQSV9WRUNUT1IsICZpcGlfaXJxYWN0aW9uKTsKIAlyZWdpc3Rlcl9wZXJjcHVfaXJxKElBNjRfSVBJX1JFU0NIRURVTEUsICZyZXNjaGVkX2lycWFjdGlvbik7CiAJcmVnaXN0ZXJfcGVyY3B1X2lycShJQTY0X0lQSV9MT0NBTF9UTEJfRkxVU0gsICZ0bGJfaXJxYWN0aW9uKTsKKyNlbmRpZgorfQorCit2b2lkIF9faW5pdAoraW5pdF9JUlEgKHZvaWQpCit7CisJaWE2NF9yZWdpc3Rlcl9pcGkoKTsKKwlyZWdpc3Rlcl9wZXJjcHVfaXJxKElBNjRfU1BVUklPVVNfSU5UX1ZFQ1RPUiwgTlVMTCk7CisjaWZkZWYgQ09ORklHX1NNUAogI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykgfHwgZGVmaW5lZChDT05GSUdfSUE2NF9ESUcpCiAJaWYgKHZlY3Rvcl9kb21haW5fdHlwZSAhPSBWRUNUT1JfRE9NQUlOX05PTkUpIHsKIAkJQlVHX09OKElBNjRfRklSU1RfREVWSUNFX1ZFQ1RPUiAhPSBJQTY0X0lSUV9NT1ZFX1ZFQ1RPUik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2l2dC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUwppbmRleCA4MGI0NGVhLi5jMzk2MjdkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2l2dC5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKQEAgLTEyLDYgKzEyLDE0IEBACiAgKgogICogMDAvMDgvMjMgQXNpdCBNYWxsaWNrIDxhc2l0LmsubWFsbGlja0BpbnRlbC5jb20+IFRMQiBoYW5kbGluZyBmb3IgU01QCiAgKiAwMC8xMi8yMCBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+IERUTEIvSVRMQiBoYW5kbGVyIG5vdyB1c2VzIHZpcnR1YWwgUFQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBDbworICoJRGFuIE1hZ2VuaGVpbWVyIDxkYW4ubWFnZW5oZWltZXJAaHAuY29tPgorICogICAgICBYZW4gcGFyYXZpcnR1YWxpemF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKiAgICAgICAgICAgICAgICAgICAgcHZfb3BzLgorICogICAgICBZYW96dSAoRWRkaWUpIERvbmcgPGVkZGllLmRvbmdAaW50ZWwuY29tPgogICovCiAvKgogICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGludGVycnVwdGlvbiB2ZWN0b3IgdGFibGUgdXNlZCBieSB0aGUgQ1BVLgpAQCAtMTAyLDEzICsxMTAsMTMgQEAKIAkgKgktIHRoZSBmYXVsdGluZyB2aXJ0dWFsIGFkZHJlc3MgdXNlcyB1bmltcGxlbWVudGVkIGFkZHJlc3MgYml0cwogCSAqCS0gdGhlIGZhdWx0aW5nIHZpcnR1YWwgYWRkcmVzcyBoYXMgbm8gdmFsaWQgcGFnZSB0YWJsZSBtYXBwaW5nCiAJICovCi0JbW92IHIxNj1jci5pZmEJCQkJLy8gZ2V0IGFkZHJlc3MgdGhhdCBjYXVzZWQgdGhlIFRMQiBtaXNzCisJTU9WX0ZST01fSUZBKHIxNikJCQkvLyBnZXQgYWRkcmVzcyB0aGF0IGNhdXNlZCB0aGUgVExCIG1pc3MKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJbW92bCByMTg9UEFHRV9TSElGVAotCW1vdiByMjU9Y3IuaXRpcgorCU1PVl9GUk9NX0lUSVIocjI1KQogI2VuZGlmCiAJOzsKLQlyc20gcHNyLmR0CQkJCS8vIHVzZSBwaHlzaWNhbCBhZGRyZXNzaW5nIGZvciBkYXRhCisJUlNNX1BTUl9EVAkJCQkvLyB1c2UgcGh5c2ljYWwgYWRkcmVzc2luZyBmb3IgZGF0YQogCW1vdiByMzE9cHIJCQkJLy8gc2F2ZSB0aGUgcHJlZGljYXRlIHJlZ2lzdGVycwogCW1vdiByMTk9SUE2NF9LUihQVF9CQVNFKQkJLy8gZ2V0IHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzCiAJc2hsIHIyMT1yMTYsMwkJCQkvLyBzaGlmdCBiaXQgNjAgaW50byBzaWduIGJpdApAQCAtMTY4LDIxICsxNzYsMjEgQEAKIAlkZXAgcjIxPXIxOSxyMjAsMywoUEFHRV9TSElGVC0zKQkvLyByMjE9cHRlX29mZnNldChwbWQsYWRkcikKIAk7OwogKHA3KQlsZDggcjE4PVtyMjFdCQkJCS8vIHJlYWQgKnB0ZQotCW1vdiByMTk9Y3IuaXNyCQkJCS8vIGNyLmlzciBiaXQgMzIgdGVsbHMgdXMgaWYgdGhpcyBpcyBhbiBpbnNuIG1pc3MKKwlNT1ZfRlJPTV9JU1IocjE5KQkJCS8vIGNyLmlzciBiaXQgMzIgdGVsbHMgdXMgaWYgdGhpcyBpcyBhbiBpbnNuIG1pc3MKIAk7OwogKHA3KQl0Yml0LnogcDYscDc9cjE4LF9QQUdFX1BfQklUCQkvLyBwYWdlIHByZXNlbnQgYml0IGNsZWFyZWQ/Ci0JbW92IHIyMj1jci5paGEJCQkJLy8gZ2V0IHRoZSBWSFBUIGFkZHJlc3MgdGhhdCBjYXVzZWQgdGhlIFRMQiBtaXNzCisJTU9WX0ZST01fSUhBKHIyMikJCQkvLyBnZXQgdGhlIFZIUFQgYWRkcmVzcyB0aGF0IGNhdXNlZCB0aGUgVExCIG1pc3MKIAk7OwkJCQkJLy8gYXZvaWQgUkFXIG9uIHA3CiAocDcpCXRiaXQubnoudW5jIHAxMCxwMTE9cjE5LDMyCQkvLyBpcyBpdCBhbiBpbnN0cnVjdGlvbiBUTEIgbWlzcz8KIAlkZXAgcjIzPTAscjIwLDAsUEFHRV9TSElGVAkJLy8gY2xlYXIgbG93IGJpdHMgdG8gZ2V0IHBhZ2UgYWRkcmVzcwogCTs7Ci0ocDEwKQlpdGMuaSByMTgJCQkJLy8gaW5zZXJ0IHRoZSBpbnN0cnVjdGlvbiBUTEIgZW50cnkKLShwMTEpCWl0Yy5kIHIxOAkJCQkvLyBpbnNlcnQgdGhlIGRhdGEgVExCIGVudHJ5CisJSVRDX0lfQU5EX0QocDEwLCBwMTEsIHIxOCwgcjI0KQkJLy8gaW5zZXJ0IHRoZSBpbnN0cnVjdGlvbiBUTEIgZW50cnkgYW5kCisJCQkJCQkvLyBpbnNlcnQgdGhlIGRhdGEgVExCIGVudHJ5CiAocDYpCWJyLmNvbmQuc3BudC5tYW55IHBhZ2VfZmF1bHQJCS8vIGhhbmRsZSBiYWQgYWRkcmVzcy9wYWdlIG5vdCBwcmVzZW50IChwYWdlIGZhdWx0KQotCW1vdiBjci5pZmE9cjIyCisJTU9WX1RPX0lGQShyMjIsIHIyNCkKIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKLShwOCkJbW92IGNyLml0aXI9cjI1CQkJCS8vIGNoYW5nZSB0byBkZWZhdWx0IHBhZ2Utc2l6ZSBmb3IgVkhQVAorCU1PVl9UT19JVElSKHA4LCByMjUsIHIyNCkJCS8vIGNoYW5nZSB0byBkZWZhdWx0IHBhZ2Utc2l6ZSBmb3IgVkhQVAogI2VuZGlmCiAKIAkvKgpAQCAtMTkyLDcgKzIwMCw3IEBACiAJICovCiAJYWRkcyByMjQ9X19ESVJUWV9CSVRTX05PX0VEfF9QQUdFX1BMXzB8X1BBR0VfQVJfUlcscjIzCiAJOzsKLShwNykJaXRjLmQgcjI0CisJSVRDX0QocDcsIHIyNCwgcjI1KQogCTs7CiAjaWZkZWYgQ09ORklHX1NNUAogCS8qCkBAIC0yMzQsNyArMjQyLDcgQEAKICNlbmRpZgogCiAJbW92IHByPXIzMSwtMQkJCQkvLyByZXN0b3JlIHByZWRpY2F0ZSByZWdpc3RlcnMKLQlyZmkKKwlSRkkKIEVORCh2aHB0X21pc3MpCiAKIAkub3JnIGlhNjRfaXZ0KzB4NDAwCkBAIC0yNDgsMTEgKzI1NiwxMSBAQAogCSAqIG1vZGUsIHdhbGsgdGhlIHBhZ2UgdGFibGUsIGFuZCB0aGVuIHJlLWV4ZWN1dGUgdGhlIFBURSByZWFkIGFuZAogCSAqIGdvIG9uIG5vcm1hbGx5IGFmdGVyIHRoYXQuCiAJICovCi0JbW92IHIxNj1jci5pZmEJCQkJLy8gZ2V0IHZpcnR1YWwgYWRkcmVzcworCU1PVl9GUk9NX0lGQShyMTYpCQkJLy8gZ2V0IHZpcnR1YWwgYWRkcmVzcwogCW1vdiByMjk9YjAJCQkJLy8gc2F2ZSBiMAogCW1vdiByMzE9cHIJCQkJLy8gc2F2ZSBwcmVkaWNhdGVzCiAuaXRsYl9mYXVsdDoKLQltb3YgcjE3PWNyLmloYQkJCQkvLyBnZXQgdmlydHVhbCBhZGRyZXNzIG9mIFBURQorCU1PVl9GUk9NX0lIQShyMTcpCQkJLy8gZ2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBQVEUKIAltb3ZsIHIzMD0xZgkJCQkvLyBsb2FkIG5lc3RlZCBmYXVsdCBjb250aW51YXRpb24gcG9pbnQKIAk7OwogMToJbGQ4IHIxOD1bcjE3XQkJCQkvLyByZWFkICpwdGUKQEAgLTI2MSw3ICsyNjksNyBAQAogCXRiaXQueiBwNixwMD1yMTgsX1BBR0VfUF9CSVQJCS8vIHBhZ2UgcHJlc2VudCBiaXQgY2xlYXJlZD8KIChwNikJYnIuY29uZC5zcG50IHBhZ2VfZmF1bHQKIAk7OwotCWl0Yy5pIHIxOAorCUlUQ19JKHAwLCByMTgsIHIxOSkKIAk7OwogI2lmZGVmIENPTkZJR19TTVAKIAkvKgpAQCAtMjc4LDcgKzI4Niw3IEBACiAocDcpCXB0Yy5sIHIxNixyMjAKICNlbmRpZgogCW1vdiBwcj1yMzEsLTEKLQlyZmkKKwlSRkkKIEVORChpdGxiX21pc3MpCiAKIAkub3JnIGlhNjRfaXZ0KzB4MDgwMApAQCAtMjkyLDExICszMDAsMTEgQEAKIAkgKiBtb2RlLCB3YWxrIHRoZSBwYWdlIHRhYmxlLCBhbmQgdGhlbiByZS1leGVjdXRlIHRoZSBQVEUgcmVhZCBhbmQKIAkgKiBnbyBvbiBub3JtYWxseSBhZnRlciB0aGF0LgogCSAqLwotCW1vdiByMTY9Y3IuaWZhCQkJCS8vIGdldCB2aXJ0dWFsIGFkZHJlc3MKKwlNT1ZfRlJPTV9JRkEocjE2KQkJCS8vIGdldCB2aXJ0dWFsIGFkZHJlc3MKIAltb3YgcjI5PWIwCQkJCS8vIHNhdmUgYjAKIAltb3YgcjMxPXByCQkJCS8vIHNhdmUgcHJlZGljYXRlcwogZHRsYl9mYXVsdDoKLQltb3YgcjE3PWNyLmloYQkJCQkvLyBnZXQgdmlydHVhbCBhZGRyZXNzIG9mIFBURQorCU1PVl9GUk9NX0lIQShyMTcpCQkJLy8gZ2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBQVEUKIAltb3ZsIHIzMD0xZgkJCQkvLyBsb2FkIG5lc3RlZCBmYXVsdCBjb250aW51YXRpb24gcG9pbnQKIAk7OwogMToJbGQ4IHIxOD1bcjE3XQkJCQkvLyByZWFkICpwdGUKQEAgLTMwNSw3ICszMTMsNyBAQAogCXRiaXQueiBwNixwMD1yMTgsX1BBR0VfUF9CSVQJCS8vIHBhZ2UgcHJlc2VudCBiaXQgY2xlYXJlZD8KIChwNikJYnIuY29uZC5zcG50IHBhZ2VfZmF1bHQKIAk7OwotCWl0Yy5kIHIxOAorCUlUQ19EKHAwLCByMTgsIHIxOSkKIAk7OwogI2lmZGVmIENPTkZJR19TTVAKIAkvKgpAQCAtMzIyLDcgKzMzMCw3IEBACiAocDcpCXB0Yy5sIHIxNixyMjAKICNlbmRpZgogCW1vdiBwcj1yMzEsLTEKLQlyZmkKKwlSRkkKIEVORChkdGxiX21pc3MpCiAKIAkub3JnIGlhNjRfaXZ0KzB4MGMwMApAQCAtMzMwLDkgKzMzOCw5IEBACiAvLyAweDBjMDAgRW50cnkgMyAoc2l6ZSA2NCBidW5kbGVzKSBBbHQgSVRMQiAoMTkpCiBFTlRSWShhbHRfaXRsYl9taXNzKQogCURCR19GQVVMVCgzKQotCW1vdiByMTY9Y3IuaWZhCQkvLyBnZXQgYWRkcmVzcyB0aGF0IGNhdXNlZCB0aGUgVExCIG1pc3MKKwlNT1ZfRlJPTV9JRkEocjE2KQkvLyBnZXQgYWRkcmVzcyB0aGF0IGNhdXNlZCB0aGUgVExCIG1pc3MKIAltb3ZsIHIxNz1QQUdFX0tFUk5FTAotCW1vdiByMjE9Y3IuaXBzcgorCU1PVl9GUk9NX0lQU1IocDAsIHIyMSkKIAltb3ZsIHIxOT0oKCgxIDw8IElBNjRfTUFYX1BIWVNfQklUUykgLSAxKSAmIH4weGZmZikKIAltb3YgcjMxPXByCiAJOzsKQEAgLTM0MSw5ICszNDksOSBAQAogCTs7CiAJY21wLmd0IHA4LHAwPTYscjIyCQkJLy8gdXNlciBtb2RlCiAJOzsKLShwOCkJdGhhc2ggcjE3PXIxNgorCVRIQVNIKHA4LCByMTcsIHIxNiwgcjIzKQogCTs7Ci0ocDgpCW1vdiBjci5paGE9cjE3CisJTU9WX1RPX0lIQShwOCwgcjE3LCByMjMpCiAocDgpCW1vdiByMjk9YjAJCQkJLy8gc2F2ZSBiMAogKHA4KQlici5jb25kLmRwdGsgLml0bGJfZmF1bHQKICNlbmRpZgpAQCAtMzU4LDkgKzM2Niw5IEBACiAJb3IgcjE5PXIxOSxyMTgJCS8vIHNldCBiaXQgNCAodW5jYWNoZWQpIGlmIHRoZSBhY2Nlc3Mgd2FzIHRvIHJlZ2lvbiA2CiAocDgpCWJyLmNvbmQuc3BudCBwYWdlX2ZhdWx0CiAJOzsKLQlpdGMuaSByMTkJCS8vIGluc2VydCB0aGUgVExCIGVudHJ5CisJSVRDX0kocDAsIHIxOSwgcjE4KQkvLyBpbnNlcnQgdGhlIFRMQiBlbnRyeQogCW1vdiBwcj1yMzEsLTEKLQlyZmkKKwlSRkkKIEVORChhbHRfaXRsYl9taXNzKQogCiAJLm9yZyBpYTY0X2l2dCsweDEwMDAKQEAgLTM2OCwxMSArMzc2LDExIEBACiAvLyAweDEwMDAgRW50cnkgNCAoc2l6ZSA2NCBidW5kbGVzKSBBbHQgRFRMQiAoNyw0NikKIEVOVFJZKGFsdF9kdGxiX21pc3MpCiAJREJHX0ZBVUxUKDQpCi0JbW92IHIxNj1jci5pZmEJCS8vIGdldCBhZGRyZXNzIHRoYXQgY2F1c2VkIHRoZSBUTEIgbWlzcworCU1PVl9GUk9NX0lGQShyMTYpCS8vIGdldCBhZGRyZXNzIHRoYXQgY2F1c2VkIHRoZSBUTEIgbWlzcwogCW1vdmwgcjE3PVBBR0VfS0VSTkVMCi0JbW92IHIyMD1jci5pc3IKKwlNT1ZfRlJPTV9JU1IocjIwKQogCW1vdmwgcjE5PSgoKDEgPDwgSUE2NF9NQVhfUEhZU19CSVRTKSAtIDEpICYgfjB4ZmZmKQotCW1vdiByMjE9Y3IuaXBzcgorCU1PVl9GUk9NX0lQU1IocDAsIHIyMSkKIAltb3YgcjMxPXByCiAJbW92IHIyND1QRVJDUFVfQUREUgogCTs7CkBAIC0zODEsOSArMzg5LDkgQEAKIAk7OwogCWNtcC5ndCBwOCxwMD02LHIyMgkJCS8vIGFjY2VzcyB0byByZWdpb24gMC01CiAJOzsKLShwOCkJdGhhc2ggcjE3PXIxNgorCVRIQVNIKHA4LCByMTcsIHIxNiwgcjI1KQogCTs7Ci0ocDgpCW1vdiBjci5paGE9cjE3CisJTU9WX1RPX0lIQShwOCwgcjE3LCByMjUpCiAocDgpCW1vdiByMjk9YjAJCQkJLy8gc2F2ZSBiMAogKHA4KQlici5jb25kLmRwdGsgZHRsYl9mYXVsdAogI2VuZGlmCkBAIC00MDIsNyArNDEwLDcgQEAKIAl0Yml0Lm56IHA5LHAwPXIyMCxJQTY0X0lTUl9OQV9CSVQJLy8gaXMgbm9uLWFjY2VzcyBiaXQgb24/CiAJOzsKIChwMTApCXN1YiByMTk9cjE5LHIyNgotKHAxMCkJbW92IGNyLml0aXI9cjI1CisJTU9WX1RPX0lUSVIocDEwLCByMjUsIHIyNCkKIAljbXAubmUgcDgscDA9cjAscjIzCiAocDkpCWNtcC5lcS5vci5hbmRjbSBwNixwNz1JQTY0X0lTUl9DT0RFX0xGRVRDSCxyMjIJLy8gY2hlY2sgaXNyLmNvZGUgZmllbGQKIChwMTIpCWRlcCByMTc9LTEscjE3LDQsMQkJCS8vIHNldCBtYT1VQyBmb3IgcmVnaW9uIDYgYWRkcgpAQCAtNDExLDExICs0MTksMTEgQEAKIAlkZXAgcjIxPS0xLHIyMSxJQTY0X1BTUl9FRF9CSVQsMQogCTs7CiAJb3IgcjE5PXIxOSxyMTcJCS8vIGluc2VydCBQVEUgY29udHJvbCBiaXRzIGludG8gcjE5Ci0ocDYpCW1vdiBjci5pcHNyPXIyMQorCU1PVl9UT19JUFNSKHA2LCByMjEsIHIyNCkKIAk7OwotKHA3KQlpdGMuZCByMTkJCS8vIGluc2VydCB0aGUgVExCIGVudHJ5CisJSVRDX0QocDcsIHIxOSwgcjE4KQkvLyBpbnNlcnQgdGhlIFRMQiBlbnRyeQogCW1vdiBwcj1yMzEsLTEKLQlyZmkKKwlSRkkKIEVORChhbHRfZHRsYl9taXNzKQogCiAJLm9yZyBpYTY0X2l2dCsweDE0MDAKQEAgLTQ0NCwxMCArNDUyLDEwIEBACiAJICoKIAkgKiBDbG9iYmVyZWQ6CWIwLCByMTgsIHIxOSwgcjIxLCByMjIsIHBzci5kdCAoY2xlYXJlZCkKIAkgKi8KLQlyc20gcHNyLmR0CQkJCS8vIHN3aXRjaCB0byB1c2luZyBwaHlzaWNhbCBkYXRhIGFkZHJlc3NpbmcKKwlSU01fUFNSX0RUCQkJCS8vIHN3aXRjaCB0byB1c2luZyBwaHlzaWNhbCBkYXRhIGFkZHJlc3NpbmcKIAltb3YgcjE5PUlBNjRfS1IoUFRfQkFTRSkJCS8vIGdldCB0aGUgcGFnZSB0YWJsZSBiYXNlIGFkZHJlc3MKIAlzaGwgcjIxPXIxNiwzCQkJCS8vIHNoaWZ0IGJpdCA2MCBpbnRvIHNpZ24gYml0Ci0JbW92IHIxOD1jci5pdGlyCisJTU9WX0ZST01fSVRJUihyMTgpCiAJOzsKIAlzaHIudSByMTc9cjE2LDYxCQkJLy8gZ2V0IHRoZSByZWdpb24gbnVtYmVyIGludG8gcjE3CiAJZXh0ci51IHIxOD1yMTgsMiw2CQkJLy8gZ2V0IHRoZSBmYXVsdGluZyBwYWdlIHNpemUKQEAgLTUwNywzMyArNTE1LDYgQEAKIAlGQVVMVCg2KQogRU5EKGlrZXlfbWlzcykKIAotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkvLyBjYWxsIGRvX3BhZ2VfZmF1bHQgKHByZWRpY2F0ZXMgYXJlIGluIHIzMSwgcHNyLmR0IG1heSBiZSBvZmYsIHIxNiBpcyBmYXVsdGluZyBhZGRyZXNzKQotRU5UUlkocGFnZV9mYXVsdCkKLQlzc20gcHNyLmR0Ci0JOzsKLQlzcmx6LmkKLQk7OwotCVNBVkVfTUlOX1dJVEhfQ09WRVIKLQlhbGxvYyByMTU9YXIucGZzLDAsMCwzLDAKLQltb3Ygb3V0MD1jci5pZmEKLQltb3Ygb3V0MT1jci5pc3IKLQlhZGRzIHIzPTgscjIJCQkJLy8gc2V0IHVwIHNlY29uZCBiYXNlIHBvaW50ZXIKLQk7OwotCXNzbSBwc3IuaWMgfCBQU1JfREVGQVVMVF9CSVRTCi0JOzsKLQlzcmx6LmkJCQkJCS8vIGd1YXJhbnRlZSB0aGF0IGludGVycnVwdGlvbiBjb2xsZWN0aW4gaXMgb24KLQk7OwotKHAxNSkJc3NtIHBzci5pCQkJCS8vIHJlc3RvcmUgcHNyLmkKLQltb3ZsIHIxND1pYTY0X2xlYXZlX2tlcm5lbAotCTs7Ci0JU0FWRV9SRVNUCi0JbW92IHJwPXIxNAotCTs7Ci0JYWRkcyBvdXQyPTE2LHIxMgkJCS8vIG91dDIgPSBwb2ludGVyIHRvIHB0X3JlZ3MKLQlici5jYWxsLnNwdGsubWFueSBiNj1pYTY0X2RvX3BhZ2VfZmF1bHQJLy8gaWdub3JlIHJldHVybiBhZGRyZXNzCi1FTkQocGFnZV9mYXVsdCkKLQogCS5vcmcgaWE2NF9pdnQrMHgxYzAwCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gMHgxYzAwIEVudHJ5IDcgKHNpemUgNjQgYnVuZGxlcykgRGF0YSBLZXkgTWlzcyAoMTIsNTEpCkBAIC01NTYsMTAgKzUzNywxMCBAQAogCSAqIHBhZ2UgdGFibGUgVExCIGVudHJ5IGlzbid0IHByZXNlbnQsIHdlIHRha2UgYSBuZXN0ZWQgVExCIG1pc3MgaGl0IHdoZXJlIHdlIGxvb2sKIAkgKiB1cCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgTDMgUFRFIGFuZCB0aGVuIGNvbnRpbnVlIGF0IGxhYmVsIDEgYmVsb3cuCiAJICovCi0JbW92IHIxNj1jci5pZmEJCQkJLy8gZ2V0IHRoZSBhZGRyZXNzIHRoYXQgY2F1c2VkIHRoZSBmYXVsdAorCU1PVl9GUk9NX0lGQShyMTYpCQkJLy8gZ2V0IHRoZSBhZGRyZXNzIHRoYXQgY2F1c2VkIHRoZSBmYXVsdAogCW1vdmwgcjMwPTFmCQkJCS8vIGxvYWQgY29udGludWF0aW9uIHBvaW50IGluIGNhc2Ugb2YgbmVzdGVkIGZhdWx0CiAJOzsKLQl0aGFzaCByMTc9cjE2CQkJCS8vIGNvbXB1dGUgdmlydHVhbCBhZGRyZXNzIG9mIEwzIFBURQorCVRIQVNIKHAwLCByMTcsIHIxNiwgcjE4KQkJLy8gY29tcHV0ZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgTDMgUFRFCiAJbW92IHIyOT1iMAkJCQkvLyBzYXZlIGIwIGluIGNhc2Ugb2YgbmVzdGVkIGZhdWx0CiAJbW92IHIzMT1wcgkJCQkvLyBzYXZlIHByCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNTc2LDcgKzU1Nyw3IEBACiAJOzsKIChwNikJY21wLmVxIHA2LHA3PXIyNixyMTgJCQkvLyBPbmx5IGNvbXBhcmUgaWYgcGFnZSBpcyBwcmVzZW50CiAJOzsKLShwNikJaXRjLmQgcjI1CQkJCS8vIGluc3RhbGwgdXBkYXRlZCBQVEUKKwlJVENfRChwNiwgcjI1LCByMTgpCQkJLy8gaW5zdGFsbCB1cGRhdGVkIFBURQogCTs7CiAJLyoKIAkgKiBUZWxsIHRoZSBhc3NlbWJsZXJzIGRlcGVuZGVuY3ktdmlvbGF0aW9uIGNoZWNrZXIgdGhhdCB0aGUgYWJvdmUgIml0YyIgaW5zdHJ1Y3Rpb25zCkBAIC02MDIsNyArNTgzLDcgQEAKIAlpdGMuZCByMTgJCQkJLy8gaW5zdGFsbCB1cGRhdGVkIFBURQogI2VuZGlmCiAJbW92IHByPXIzMSwtMQkJCQkvLyByZXN0b3JlIHByCi0JcmZpCisJUkZJCiBFTkQoZGlydHlfYml0KQogCiAJLm9yZyBpYTY0X2l2dCsweDI0MDAKQEAgLTYxMSwyMiArNTkyLDIyIEBACiBFTlRSWShpYWNjZXNzX2JpdCkKIAlEQkdfRkFVTFQoOSkKIAkvLyBMaWtlIEVudHJ5IDgsIGV4Y2VwdCBmb3IgaW5zdHJ1Y3Rpb24gYWNjZXNzCi0JbW92IHIxNj1jci5pZmEJCQkJLy8gZ2V0IHRoZSBhZGRyZXNzIHRoYXQgY2F1c2VkIHRoZSBmYXVsdAorCU1PVl9GUk9NX0lGQShyMTYpCQkJLy8gZ2V0IHRoZSBhZGRyZXNzIHRoYXQgY2F1c2VkIHRoZSBmYXVsdAogCW1vdmwgcjMwPTFmCQkJCS8vIGxvYWQgY29udGludWF0aW9uIHBvaW50IGluIGNhc2Ugb2YgbmVzdGVkIGZhdWx0CiAJbW92IHIzMT1wcgkJCQkvLyBzYXZlIHByZWRpY2F0ZXMKICNpZmRlZiBDT05GSUdfSVRBTklVTQogCS8qCiAJICogRXJyYXR1bSAxMCAoSUZBIG1heSBjb250YWluIGluY29ycmVjdCBhZGRyZXNzKSBoYXMgIk5vRml4IiBzdGF0dXMuCiAJICovCi0JbW92IHIxNz1jci5pcHNyCisJTU9WX0ZST01fSVBTUihwMCwgcjE3KQogCTs7Ci0JbW92IHIxOD1jci5paXAKKwlNT1ZfRlJPTV9JSVAocjE4KQogCXRiaXQueiBwNixwMD1yMTcsSUE2NF9QU1JfSVNfQklUCS8vIElBNjQgaW5zdHJ1Y3Rpb24gc2V0PwogCTs7CiAocDYpCW1vdiByMTY9cjE4CQkJCS8vIGlmIHNvLCB1c2UgY3IuaWlwIGluc3RlYWQgb2YgY3IuaWZhCiAjZW5kaWYgLyogQ09ORklHX0lUQU5JVU0gKi8KIAk7OwotCXRoYXNoIHIxNz1yMTYJCQkJLy8gY29tcHV0ZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgTDMgUFRFCisJVEhBU0gocDAsIHIxNywgcjE2LCByMTgpCQkvLyBjb21wdXRlIHZpcnR1YWwgYWRkcmVzcyBvZiBMMyBQVEUKIAltb3YgcjI5PWIwCQkJCS8vIHNhdmUgYjAgaW4gY2FzZSBvZiBuZXN0ZWQgZmF1bHQpCiAjaWZkZWYgQ09ORklHX1NNUAogCW1vdiByMjg9YXIuY2N2CQkJCS8vIHNhdmUgYXIuY2N2CkBAIC02NDIsNyArNjIzLDcgQEAKIAk7OwogKHA2KQljbXAuZXEgcDYscDc9cjI2LHIxOAkJCS8vIE9ubHkgaWYgcGFnZSBwcmVzZW50CiAJOzsKLShwNikJaXRjLmkgcjI1CQkJCS8vIGluc3RhbGwgdXBkYXRlZCBQVEUKKwlJVENfSShwNiwgcjI1LCByMjYpCQkJLy8gaW5zdGFsbCB1cGRhdGVkIFBURQogCTs7CiAJLyoKIAkgKiBUZWxsIHRoZSBhc3NlbWJsZXJzIGRlcGVuZGVuY3ktdmlvbGF0aW9uIGNoZWNrZXIgdGhhdCB0aGUgYWJvdmUgIml0YyIgaW5zdHJ1Y3Rpb25zCkBAIC02NjgsNyArNjQ5LDcgQEAKIAlpdGMuaSByMTgJCQkJLy8gaW5zdGFsbCB1cGRhdGVkIFBURQogI2VuZGlmIC8qICFDT05GSUdfU01QICovCiAJbW92IHByPXIzMSwtMQotCXJmaQorCVJGSQogRU5EKGlhY2Nlc3NfYml0KQogCiAJLm9yZyBpYTY0X2l2dCsweDI4MDAKQEAgLTY3NywxMCArNjU4LDEwIEBACiBFTlRSWShkYWNjZXNzX2JpdCkKIAlEQkdfRkFVTFQoMTApCiAJLy8gTGlrZSBFbnRyeSA4LCBleGNlcHQgZm9yIGRhdGEgYWNjZXNzCi0JbW92IHIxNj1jci5pZmEJCQkJLy8gZ2V0IHRoZSBhZGRyZXNzIHRoYXQgY2F1c2VkIHRoZSBmYXVsdAorCU1PVl9GUk9NX0lGQShyMTYpCQkJLy8gZ2V0IHRoZSBhZGRyZXNzIHRoYXQgY2F1c2VkIHRoZSBmYXVsdAogCW1vdmwgcjMwPTFmCQkJCS8vIGxvYWQgY29udGludWF0aW9uIHBvaW50IGluIGNhc2Ugb2YgbmVzdGVkIGZhdWx0CiAJOzsKLQl0aGFzaCByMTc9cjE2CQkJCS8vIGNvbXB1dGUgdmlydHVhbCBhZGRyZXNzIG9mIEwzIFBURQorCVRIQVNIKHAwLCByMTcsIHIxNiwgcjE4KQkJLy8gY29tcHV0ZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgTDMgUFRFCiAJbW92IHIzMT1wcgogCW1vdiByMjk9YjAJCQkJLy8gc2F2ZSBiMCBpbiBjYXNlIG9mIG5lc3RlZCBmYXVsdCkKICNpZmRlZiBDT05GSUdfU01QCkBAIC02OTcsNyArNjc4LDcgQEAKIAk7OwogKHA2KQljbXAuZXEgcDYscDc9cjI2LHIxOAkJCS8vIE9ubHkgaWYgcGFnZSBpcyBwcmVzZW50CiAJOzsKLShwNikJaXRjLmQgcjI1CQkJCS8vIGluc3RhbGwgdXBkYXRlZCBQVEUKKwlJVENfRChwNiwgcjI1LCByMjYpCQkJLy8gaW5zdGFsbCB1cGRhdGVkIFBURQogCS8qCiAJICogVGVsbCB0aGUgYXNzZW1ibGVycyBkZXBlbmRlbmN5LXZpb2xhdGlvbiBjaGVja2VyIHRoYXQgdGhlIGFib3ZlICJpdGMiIGluc3RydWN0aW9ucwogCSAqIGNhbm5vdCBwb3NzaWJseSBhZmZlY3QgdGhlIGZvbGxvd2luZyBsb2FkczoKQEAgLTcyMSw3ICs3MDIsNyBAQAogI2VuZGlmCiAJbW92IGIwPXIyOQkJCQkvLyByZXN0b3JlIGIwCiAJbW92IHByPXIzMSwtMQotCXJmaQorCVJGSQogRU5EKGRhY2Nlc3NfYml0KQogCiAJLm9yZyBpYTY0X2l2dCsweDJjMDAKQEAgLTc0NSwxMCArNzI2LDEwIEBACiAJICovCiAJREJHX0ZBVUxUKDExKQogCW1vdi5tIHIxNj1JQTY0X0tSKENVUlJFTlQpCQkvLyBNMiByMTYgPC0gY3VycmVudCB0YXNrICgxMiBjeWMpCi0JbW92IHIyOT1jci5pcHNyCQkJCS8vIE0yICgxMiBjeWMpCisJTU9WX0ZST01fSVBTUihwMCwgcjI5KQkJCS8vIE0yICgxMiBjeWMpCiAJbW92IHIzMT1wcgkJCQkvLyBJMCAoMiBjeWMpCiAKLQltb3YgcjE3PWNyLmlpbQkJCQkvLyBNMiAoMiBjeWMpCisJTU9WX0ZST01fSUlNKHIxNykJCQkvLyBNMiAoMiBjeWMpCiAJbW92Lm0gcjI3PWFyLnJzYwkJCS8vIE0yICgxMiBjeWMpCiAJbW92IHIxOD1fX0lBNjRfQlJFQUtfU1lTQ0FMTAkJLy8gQQogCkBAIC03NjcsNyArNzQ4LDcgQEAKIAlub3AubSAwCiAJbW92bCByMzA9c3lzX2NhbGxfdGFibGUJCQkvLyBYCiAKLQltb3YgcjI4PWNyLmlpcAkJCQkvLyBNMiAoMiBjeWMpCisJTU9WX0ZST01fSUlQKHIyOCkJCQkvLyBNMiAoMiBjeWMpCiAJY21wLmVxIHAwLHA3PXIxOCxyMTcJCQkvLyBJMCBpcyB0aGlzIGEgc3lzdGVtIGNhbGw/CiAocDcpCWJyLmNvbmQuc3BudCBub25fc3lzY2FsbAkJLy8gQiAgbm8gLT4KIAkvLwpAQCAtODY0LDE4ICs4NDUsMTcgQEAKICNlbmRpZgogCW1vdiBhci5yc2M9MHgzCQkJCS8vIE0yICAgc2V0IGVhZ2VyIG1vZGUsIHBsIDAsIExFLCBsb2FkcnM9MAogCW5vcCAwCi0JYnN3LjEJCQkJCS8vIEIgKDYgY3ljKSByZWdzIGFyZSBzYXZlZCwgc3dpdGNoIHRvIGJhbmsgMQorCUJTV18xKHIyLCByMTQpCQkJCS8vIEIgKDYgY3ljKSByZWdzIGFyZSBzYXZlZCwgc3dpdGNoIHRvIGJhbmsgMQogCTs7CiAKLQlzc20gcHNyLmljIHwgUFNSX0RFRkFVTFRfQklUUwkJLy8gTTIJbm93IGl0J3Mgc2FmZSB0byByZS1lbmFibGUgaW50ci4tY29sbGVjdGlvbgorCVNTTV9QU1JfSUNfQU5EX0RFRkFVTFRfQklUU19BTkRfU1JMWl9JKHIzLCByMTYpCS8vIE0yCW5vdyBpdCdzIHNhZmUgdG8gcmUtZW5hYmxlIGludHIuLWNvbGxlY3Rpb24KKwkJCQkJCS8vIE0wICAgZW5zdXJlIGludGVycnVwdGlvbiBjb2xsZWN0aW9uIGlzIG9uCiAJbW92bCByMz1pYTY0X3JldF9mcm9tX3N5c2NhbGwJCS8vIFgKIAk7OwotCi0Jc3Jsei5pCQkJCQkvLyBNMCAgIGVuc3VyZSBpbnRlcnJ1cHRpb24gY29sbGVjdGlvbiBpcyBvbgogCW1vdiBycD1yMwkJCQkvLyBJMCAgIHNldCB0aGUgcmVhbCByZXR1cm4gYWRkcgogKHAxMCkJYnIuY29uZC5zcG50Lm1hbnkgaWE2NF9yZXRfZnJvbV9zeXNjYWxsCS8vIEIgICAgcmV0dXJuIGlmIGJhZCBjYWxsLWZyYW1lIG9yIHIxNSBpcyBhIE5hVAogCi0ocDE1KQlzc20gcHNyLmkJCQkJLy8gTTIgICByZXN0b3JlIHBzci5pCisJU1NNX1BTUl9JKHAxNSwgcDE1LCByMTYpCQkvLyBNMiAgIHJlc3RvcmUgcHNyLmkKIChwMTQpCWJyLmNhbGwuc3B0ay5tYW55IGI2PWI2CQkJLy8gQiAgICBpbnZva2Ugc3lzY2FsbC1oYW5ka2VyIChpZ25vcmUgcmV0dXJuIGFkZHIpCiAJYnIuY29uZC5zcG50Lm1hbnkgaWE2NF90cmFjZV9zeXNjYWxsCS8vIEIJZG8gc3lzY2FsbC10cmFjaW5nIHRoaW5nYW1hZ2ljCiAJLy8gTk9UIFJFQUNIRUQKQEAgLTg5NSwyNyArODc1LDggQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyAweDMwMDAgRW50cnkgMTIgKHNpemUgNjQgYnVuZGxlcykgRXh0ZXJuYWwgSW50ZXJydXB0ICg0KQogRU5UUlkoaW50ZXJydXB0KQotCURCR19GQVVMVCgxMikKLQltb3YgcjMxPXByCQkvLyBwcmVwYXJlIHRvIHNhdmUgcHJlZGljYXRlcwotCTs7Ci0JU0FWRV9NSU5fV0lUSF9DT1ZFUgkvLyB1c2VzIHIzMTsgZGVmaW5lcyByMiBhbmQgcjMKLQlzc20gcHNyLmljIHwgUFNSX0RFRkFVTFRfQklUUwotCTs7Ci0JYWRkcyByMz04LHIyCQkvLyBzZXQgdXAgc2Vjb25kIGJhc2UgcG9pbnRlciBmb3IgU0FWRV9SRVNUCi0Jc3Jsei5pCQkJLy8gZW5zdXJlIGV2ZXJ5Ym9keSBrbm93cyBwc3IuaWMgaXMgYmFjayBvbgotCTs7Ci0JU0FWRV9SRVNUCi0JOzsKLQlNQ0FfUkVDT1ZFUl9SQU5HRShpbnRlcnJ1cHQpCi0JYWxsb2MgcjE0PWFyLnBmcywwLDAsMiwwIC8vIG11c3QgYmUgZmlyc3QgaW4gYW4gaW5zbiBncm91cAotCW1vdiBvdXQwPWNyLml2cgkJLy8gcGFzcyBjci5pdnIgYXMgZmlyc3QgYXJnCi0JYWRkIG91dDE9MTYsc3AJCS8vIHBhc3MgcG9pbnRlciB0byBwdF9yZWdzIGFzIHNlY29uZCBhcmcKLQk7OwotCXNybHouZAkJCS8vIG1ha2Ugc3VyZSB3ZSBzZWUgdGhlIGVmZmVjdCBvZiBjci5pdnIKLQltb3ZsIHIxND1pYTY0X2xlYXZlX2tlcm5lbAotCTs7Ci0JbW92IHJwPXIxNAotCWJyLmNhbGwuc3B0ay5tYW55IGI2PWlhNjRfaGFuZGxlX2lycQorCS8qIGludGVycnVwdCBoYW5kbGVyIGhhcyBiZWNvbWUgdG9vIGJpZyB0byBmaXQgdGhpcyBhcmVhLiAqLworCWJyLnNwdGsubWFueSBfX2ludGVycnVwdAogRU5EKGludGVycnVwdCkKIAogCS5vcmcgaWE2NF9pdnQrMHgzNDAwCkBAIC05NzgsNiArOTM5LDcgQEAKIAkgKgktIGFyLmZwc3I6IHNldCB0byBrZXJuZWwgc2V0dGluZ3MKIAkgKgktICBiNjogcHJlc2VydmVkIChzYW1lIGFzIG9uIGVudHJ5KQogCSAqLworI2lmZGVmIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRQogR0xPQkFMX0VOVFJZKGlhNjRfc3lzY2FsbF9zZXR1cCkKICNpZiBQVChCNikgIT0gMAogIyBlcnJvciBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IGI2IGlzIHRoZSBmaXJzdCBmaWVsZCBpbiBwdF9yZWdzLgpAQCAtMTA2OSw2ICsxMDMxLDcgQEAKIChwMTApCW1vdiByOD0tRUlOVkFMCiAJYnIucmV0LnNwdGsubWFueSBiNwogRU5EKGlhNjRfc3lzY2FsbF9zZXR1cCkKKyNlbmRpZiAvKiBfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUgKi8KIAogCS5vcmcgaWE2NF9pdnQrMHgzYzAwCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTA4Miw3ICsxMDQ1LDcgQEAKIAlEQkdfRkFVTFQoMTYpCiAJRkFVTFQoMTYpCiAKLSNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworI2lmIGRlZmluZWQoQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcpICYmIGRlZmluZWQoX19JQTY0X0FTTV9QQVJBVklSVFVBTElaRURfTkFUSVZFKQogCS8qCiAJICogVGhlcmUgaXMgbm8gcGFydGljdWxhciByZWFzb24gZm9yIHRoaXMgY29kZSB0byBiZSBoZXJlLCBvdGhlciB0aGFuCiAJICogdGhhdCB0aGVyZSBoYXBwZW5zIHRvIGJlIHNwYWNlIGhlcmUgdGhhdCB3b3VsZCBnbyB1bnVzZWQgb3RoZXJ3aXNlLgpAQCAtMTA5Miw3ICsxMDU1LDcgQEAKIAkgKiBhY2NvdW50X3N5c19lbnRlciBpcyBjYWxsZWQgZnJvbSBTQVZFX01JTiogbWFjcm9zIGlmIGFjY291bnRpbmcgaXMKIAkgKiBlbmFibGVkIGFuZCBpZiB0aGUgbWFjcm8gaXMgZW50ZXJlZCBmcm9tIHVzZXIgbW9kZS4KIAkgKi8KLUVOVFJZKGFjY291bnRfc3lzX2VudGVyKQorR0xPQkFMX0VOVFJZKGFjY291bnRfc3lzX2VudGVyKQogCS8vIG1vdi5tIHIyMD1hci5pdGMgaXMgY2FsbGVkIGluIGFkdmFuY2UsIGFuZCByMTMgaXMgY3VycmVudAogCWFkZCByMTY9VElfQUNfU1RBTVArSUE2NF9UQVNLX1NJWkUscjEzCiAJYWRkIHIxNz1USV9BQ19MRUFWRStJQTY0X1RBU0tfU0laRSxyMTMKQEAgLTExMjMsMTEwICsxMDg2LDE4IEBACiAJREJHX0ZBVUxUKDE3KQogCUZBVUxUKDE3KQogCi1FTlRSWShub25fc3lzY2FsbCkKLQltb3YgYXIucnNjPXIyNwkJCS8vIHJlc3RvcmUgYXIucnNjIGJlZm9yZSBTQVZFX01JTl9XSVRIX0NPVkVSCi0JOzsKLQlTQVZFX01JTl9XSVRIX0NPVkVSCi0KLQkvLyBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBjb2RlIHRvIGJlIGhlcmUsIG90aGVyIHRoYW4gdGhhdAotCS8vIHRoZXJlIGhhcHBlbnMgdG8gYmUgc3BhY2UgaGVyZSB0aGF0IHdvdWxkIGdvIHVudXNlZCBvdGhlcndpc2UuICBJZiB0aGlzCi0JLy8gZmF1bHQgZXZlciBnZXRzICJ1bnJlc2VydmVkIiwgc2ltcGx5IG1vdmVkIHRoZSBmb2xsb3dpbmcgY29kZSB0byBhIG1vcmUKLQkvLyBzdWl0YWJsZSBzcG90Li4uCi0KLQlhbGxvYyByMTQ9YXIucGZzLDAsMCwyLDAKLQltb3Ygb3V0MD1jci5paW0KLQlhZGQgb3V0MT0xNixzcAotCWFkZHMgcjM9OCxyMgkJCS8vIHNldCB1cCBzZWNvbmQgYmFzZSBwb2ludGVyIGZvciBTQVZFX1JFU1QKLQotCXNzbSBwc3IuaWMgfCBQU1JfREVGQVVMVF9CSVRTCi0JOzsKLQlzcmx6LmkJCQkJLy8gZ3VhcmFudGVlIHRoYXQgaW50ZXJydXB0aW9uIGNvbGxlY3Rpb24gaXMgb24KLQk7OwotKHAxNSkJc3NtIHBzci5pCQkJLy8gcmVzdG9yZSBwc3IuaQotCW1vdmwgcjE1PWlhNjRfbGVhdmVfa2VybmVsCi0JOzsKLQlTQVZFX1JFU1QKLQltb3YgcnA9cjE1Ci0JOzsKLQlici5jYWxsLnNwdGsubWFueSBiNj1pYTY0X2JhZF9icmVhawkvLyBhdm9pZCBXQVcgb24gQ0ZNIGFuZCBpZ25vcmUgcmV0dXJuIGFkZHIKLUVORChub25fc3lzY2FsbCkKLQogCS5vcmcgaWE2NF9pdnQrMHg0ODAwCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gMHg0ODAwIEVudHJ5IDE4IChzaXplIDY0IGJ1bmRsZXMpIFJlc2VydmVkCiAJREJHX0ZBVUxUKDE4KQogCUZBVUxUKDE4KQogCi0JLyoKLQkgKiBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBjb2RlIHRvIGJlIGhlcmUsIG90aGVyIHRoYW4gdGhhdAotCSAqIHRoZXJlIGhhcHBlbnMgdG8gYmUgc3BhY2UgaGVyZSB0aGF0IHdvdWxkIGdvIHVudXNlZCBvdGhlcndpc2UuICBJZiB0aGlzCi0JICogZmF1bHQgZXZlciBnZXRzICJ1bnJlc2VydmVkIiwgc2ltcGx5IG1vdmVkIHRoZSBmb2xsb3dpbmcgY29kZSB0byBhIG1vcmUKLQkgKiBzdWl0YWJsZSBzcG90Li4uCi0JICovCi0KLUVOVFJZKGRpc3BhdGNoX3VuYWxpZ25lZF9oYW5kbGVyKQotCVNBVkVfTUlOX1dJVEhfQ09WRVIKLQk7OwotCWFsbG9jIHIxND1hci5wZnMsMCwwLDIsMAkJLy8gbm93IGl0J3Mgc2FmZSAobXVzdCBiZSBmaXJzdCBpbiBpbnNuIGdyb3VwISkKLQltb3Ygb3V0MD1jci5pZmEKLQlhZGRzIG91dDE9MTYsc3AKLQotCXNzbSBwc3IuaWMgfCBQU1JfREVGQVVMVF9CSVRTCi0JOzsKLQlzcmx6LmkJCQkJCS8vIGd1YXJhbnRlZSB0aGF0IGludGVycnVwdGlvbiBjb2xsZWN0aW9uIGlzIG9uCi0JOzsKLShwMTUpCXNzbSBwc3IuaQkJCQkvLyByZXN0b3JlIHBzci5pCi0JYWRkcyByMz04LHIyCQkJCS8vIHNldCB1cCBzZWNvbmQgYmFzZSBwb2ludGVyCi0JOzsKLQlTQVZFX1JFU1QKLQltb3ZsIHIxND1pYTY0X2xlYXZlX2tlcm5lbAotCTs7Ci0JbW92IHJwPXIxNAotCWJyLnNwdGsubWFueSBpYTY0X3ByZXBhcmVfaGFuZGxlX3VuYWxpZ25lZAotRU5EKGRpc3BhdGNoX3VuYWxpZ25lZF9oYW5kbGVyKQotCiAJLm9yZyBpYTY0X2l2dCsweDRjMDAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyAweDRjMDAgRW50cnkgMTkgKHNpemUgNjQgYnVuZGxlcykgUmVzZXJ2ZWQKIAlEQkdfRkFVTFQoMTkpCiAJRkFVTFQoMTkpCiAKLQkvKgotCSAqIFRoZXJlIGlzIG5vIHBhcnRpY3VsYXIgcmVhc29uIGZvciB0aGlzIGNvZGUgdG8gYmUgaGVyZSwgb3RoZXIgdGhhbiB0aGF0Ci0JICogdGhlcmUgaGFwcGVucyB0byBiZSBzcGFjZSBoZXJlIHRoYXQgd291bGQgZ28gdW51c2VkIG90aGVyd2lzZS4gIElmIHRoaXMKLQkgKiBmYXVsdCBldmVyIGdldHMgInVucmVzZXJ2ZWQiLCBzaW1wbHkgbW92ZWQgdGhlIGZvbGxvd2luZyBjb2RlIHRvIGEgbW9yZQotCSAqIHN1aXRhYmxlIHNwb3QuLi4KLQkgKi8KLQotRU5UUlkoZGlzcGF0Y2hfdG9fZmF1bHRfaGFuZGxlcikKLQkvKgotCSAqIElucHV0OgotCSAqCXBzci5pYzoJb2ZmCi0JICoJcjE5OglmYXVsdCB2ZWN0b3IgbnVtYmVyIChlLmcuLCAyNCBmb3IgR2VuZXJhbCBFeGNlcHRpb24pCi0JICoJcjMxOgljb250YWlucyBzYXZlZCBwcmVkaWNhdGVzIChwcikKLQkgKi8KLQlTQVZFX01JTl9XSVRIX0NPVkVSX1IxOQotCWFsbG9jIHIxND1hci5wZnMsMCwwLDUsMAotCW1vdiBvdXQwPXIxNQotCW1vdiBvdXQxPWNyLmlzcgotCW1vdiBvdXQyPWNyLmlmYQotCW1vdiBvdXQzPWNyLmlpbQotCW1vdiBvdXQ0PWNyLml0aXIKLQk7OwotCXNzbSBwc3IuaWMgfCBQU1JfREVGQVVMVF9CSVRTCi0JOzsKLQlzcmx6LmkJCQkJCS8vIGd1YXJhbnRlZSB0aGF0IGludGVycnVwdGlvbiBjb2xsZWN0aW9uIGlzIG9uCi0JOzsKLShwMTUpCXNzbSBwc3IuaQkJCQkvLyByZXN0b3JlIHBzci5pCi0JYWRkcyByMz04LHIyCQkJCS8vIHNldCB1cCBzZWNvbmQgYmFzZSBwb2ludGVyIGZvciBTQVZFX1JFU1QKLQk7OwotCVNBVkVfUkVTVAotCW1vdmwgcjE0PWlhNjRfbGVhdmVfa2VybmVsCi0JOzsKLQltb3YgcnA9cjE0Ci0JYnIuY2FsbC5zcHRrLm1hbnkgYjY9aWE2NF9mYXVsdAotRU5EKGRpc3BhdGNoX3RvX2ZhdWx0X2hhbmRsZXIpCi0KIC8vCiAvLyAtLS0gRW5kIG9mIGxvbmcgZW50cmllcywgQmVnaW5uaW5nIG9mIHNob3J0IGVudHJpZXMKIC8vCkBAIC0xMjM2LDggKzExMDcsOCBAQAogLy8gMHg1MDAwIEVudHJ5IDIwIChzaXplIDE2IGJ1bmRsZXMpIFBhZ2UgTm90IFByZXNlbnQgKDEwLDIyLDQ5KQogRU5UUlkocGFnZV9ub3RfcHJlc2VudCkKIAlEQkdfRkFVTFQoMjApCi0JbW92IHIxNj1jci5pZmEKLQlyc20gcHNyLmR0CisJTU9WX0ZST01fSUZBKHIxNikKKwlSU01fUFNSX0RUCiAJLyoKIAkgKiBUaGUgTGludXggcGFnZSBmYXVsdCBoYW5kbGVyIGRvZXNuJ3QgZXhwZWN0IG5vbi1wcmVzZW50IHBhZ2VzIHRvIGJlIGluCiAJICogdGhlIFRMQi4gIEZsdXNoIHRoZSBleGlzdGluZyBlbnRyeSBub3csIHNvIHdlIG1lZXQgdGhhdCBleHBlY3RhdGlvbi4KQEAgLTEyNTYsOCArMTEyNyw4IEBACiAvLyAweDUxMDAgRW50cnkgMjEgKHNpemUgMTYgYnVuZGxlcykgS2V5IFBlcm1pc3Npb24gKDEzLDI1LDUyKQogRU5UUlkoa2V5X3Blcm1pc3Npb24pCiAJREJHX0ZBVUxUKDIxKQotCW1vdiByMTY9Y3IuaWZhCi0JcnNtIHBzci5kdAorCU1PVl9GUk9NX0lGQShyMTYpCisJUlNNX1BTUl9EVAogCW1vdiByMzE9cHIKIAk7OwogCXNybHouZApAQCAtMTI2OSw4ICsxMTQwLDggQEAKIC8vIDB4NTIwMCBFbnRyeSAyMiAoc2l6ZSAxNiBidW5kbGVzKSBJbnN0cnVjdGlvbiBBY2Nlc3MgUmlnaHRzICgyNikKIEVOVFJZKGlhY2Nlc3NfcmlnaHRzKQogCURCR19GQVVMVCgyMikKLQltb3YgcjE2PWNyLmlmYQotCXJzbSBwc3IuZHQKKwlNT1ZfRlJPTV9JRkEocjE2KQorCVJTTV9QU1JfRFQKIAltb3YgcjMxPXByCiAJOzsKIAlzcmx6LmQKQEAgLTEyODIsOCArMTE1Myw4IEBACiAvLyAweDUzMDAgRW50cnkgMjMgKHNpemUgMTYgYnVuZGxlcykgRGF0YSBBY2Nlc3MgUmlnaHRzICgxNCw1MykKIEVOVFJZKGRhY2Nlc3NfcmlnaHRzKQogCURCR19GQVVMVCgyMykKLQltb3YgcjE2PWNyLmlmYQotCXJzbSBwc3IuZHQKKwlNT1ZfRlJPTV9JRkEocjE2KQorCVJTTV9QU1JfRFQKIAltb3YgcjMxPXByCiAJOzsKIAlzcmx6LmQKQEAgLTEyOTUsNyArMTE2Niw3IEBACiAvLyAweDU0MDAgRW50cnkgMjQgKHNpemUgMTYgYnVuZGxlcykgR2VuZXJhbCBFeGNlcHRpb24gKDUsMzIsMzQsMzYsMzgsMzkpCiBFTlRSWShnZW5lcmFsX2V4Y2VwdGlvbikKIAlEQkdfRkFVTFQoMjQpCi0JbW92IHIxNj1jci5pc3IKKwlNT1ZfRlJPTV9JU1IocjE2KQogCW1vdiByMzE9cHIKIAk7OwogCWNtcDQuZXEgcDYscDA9MCxyMTYKQEAgLTEzMjQsOCArMTE5NSw4IEBACiBFTlRSWShuYXRfY29uc3VtcHRpb24pCiAJREJHX0ZBVUxUKDI2KQogCi0JbW92IHIxNj1jci5pcHNyCi0JbW92IHIxNz1jci5pc3IKKwlNT1ZfRlJPTV9JUFNSKHAwLCByMTYpCisJTU9WX0ZST01fSVNSKHIxNykKIAltb3YgcjMxPXByCQkJCS8vIHNhdmUgUFIKIAk7OwogCWFuZCByMTg9MHhmLHIxNwkJCQkvLyByMTggPSBjci5pcHNyLmNvZGV7MzowfQpAQCAtMTMzNSwxMCArMTIwNiwxMCBAQAogCWRlcCByMTY9LTEscjE2LElBNjRfUFNSX0VEX0JJVCwxCiAocDYpCWJyLmNvbmQuc3BudCAxZgkJLy8gYnJhbmNoIGlmIChjci5pc3ByLm5hID09IDAgfHwgY3IuaXBzci5jb2RlezM6MH0gIT0gTEZFVENIKQogCTs7Ci0JbW92IGNyLmlwc3I9cjE2CQkvLyBzZXQgY3IuaXBzci5uYQorCU1PVl9UT19JUFNSKHAwLCByMTYsIHIxOCkKIAltb3YgcHI9cjMxLC0xCiAJOzsKLQlyZmkKKwlSRkkKIAogMToJbW92IHByPXIzMSwtMQogCTs7CkBAIC0xMzYwLDI2ICsxMjMxLDI2IEBACiAJICoKIAkgKiBjci5pbW0gY29udGFpbnMgemVyb19leHQoaW1tMjEpCiAJICovCi0JbW92IHIxOD1jci5paW0KKwlNT1ZfRlJPTV9JSU0ocjE4KQogCTs7Ci0JbW92IHIxNz1jci5paXAKKwlNT1ZfRlJPTV9JSVAocjE3KQogCXNobCByMTg9cjE4LDQzCQkJLy8gcHV0IHNpZ24gYml0IGluIHBvc2l0aW9uICg0Mz02NC0yMSkKIAk7OwogCi0JbW92IHIxNj1jci5pcHNyCisJTU9WX0ZST01fSVBTUihwMCwgcjE2KQogCXNociByMTg9cjE4LDM5CQkJLy8gc2lnbiBleHRlbmQgKDM5PTQzLTQpCiAJOzsKIAogCWFkZCByMTc9cjE3LHIxOAkJCS8vIG5vdyBhZGQgdGhlIG9mZnNldAogCTs7Ci0JbW92IGNyLmlpcD1yMTcKKwlNT1ZfRlJPTV9JSVAocjE3KQogCWRlcCByMTY9MCxyMTYsNDEsMgkJLy8gY2xlYXIgRUkKIAk7OwogCi0JbW92IGNyLmlwc3I9cjE2CisJTU9WX0ZST01fSVBTUihwMCwgcjE2KQogCTs7CiAKLQlyZmkJCQkJLy8gYW5kIGdvIGJhY2sKKwlSRkkKIEVORChzcGVjdWxhdGlvbl92ZWN0b3IpCiAKIAkub3JnIGlhNjRfaXZ0KzB4NTgwMApAQCAtMTUxNywxMSArMTM4OCwxMSBAQAogCURCR19GQVVMVCg0NikKICNpZmRlZglDT05GSUdfSUEzMl9TVVBQT1JUCiAJbW92IHIzMT1wcgotCW1vdiByMTY9Y3IuaXNyCisJTU9WX0ZST01fSVNSKHIxNikKIAk7OwogCWV4dHIudSByMTc9cjE2LDE2LDgJLy8gZ2V0IElTUi5jb2RlCiAJbW92IHIxOD1hci5lZmxhZwotCW1vdiByMTk9Y3IuaWltCQkvLyBvbGQgZWZsYWcgdmFsdWUKKwlNT1ZfRlJPTV9JSU0ocjE5KQkvLyBvbGQgZWZsYWcgdmFsdWUKIAk7OwogCWNtcC5uZSBwNixwMD0yLHIxNwogKHA2KQlici5jb25kLnNwbnQgMWYJCS8vIG5vdCBhIHN5c3RlbSBmbGFnIGZhdWx0CkBAIC0xNTMzLDcgKzE0MDQsNyBAQAogKHA2KQlici5jb25kLnNwbnQgMWYJCS8vIGVmbGFncy5hYyBiaXQgZGlkbid0IGNoYW5nZQogCTs7CiAJbW92IHByPXIzMSwtMQkJLy8gcmVzdG9yZSBwcmVkaWNhdGUgcmVnaXN0ZXJzCi0JcmZpCisJUkZJCiAKIDE6CiAjZW5kaWYJLy8gQ09ORklHX0lBMzJfU1VQUE9SVApAQCAtMTY3Myw2ICsxNTQ0LDEzNyBAQAogCURCR19GQVVMVCg2NykKIAlGQVVMVCg2NykKIAorCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBjYWxsIGRvX3BhZ2VfZmF1bHQgKHByZWRpY2F0ZXMgYXJlIGluIHIzMSwgcHNyLmR0IG1heSBiZSBvZmYsIHIxNiBpcyBmYXVsdGluZyBhZGRyZXNzKQorRU5UUlkocGFnZV9mYXVsdCkKKwlTU01fUFNSX0RUX0FORF9TUkxaX0kKKwk7OworCVNBVkVfTUlOX1dJVEhfQ09WRVIKKwlhbGxvYyByMTU9YXIucGZzLDAsMCwzLDAKKwlNT1ZfRlJPTV9JRkEob3V0MCkKKwlNT1ZfRlJPTV9JU1Iob3V0MSkKKwlTU01fUFNSX0lDX0FORF9ERUZBVUxUX0JJVFNfQU5EX1NSTFpfSShyMTQsIHIzKQorCWFkZHMgcjM9OCxyMgkJCQkvLyBzZXQgdXAgc2Vjb25kIGJhc2UgcG9pbnRlcgorCVNTTV9QU1JfSShwMTUsIHAxNSwgcjE0KQkJLy8gcmVzdG9yZSBwc3IuaQorCW1vdmwgcjE0PWlhNjRfbGVhdmVfa2VybmVsCisJOzsKKwlTQVZFX1JFU1QKKwltb3YgcnA9cjE0CisJOzsKKwlhZGRzIG91dDI9MTYscjEyCQkJLy8gb3V0MiA9IHBvaW50ZXIgdG8gcHRfcmVncworCWJyLmNhbGwuc3B0ay5tYW55IGI2PWlhNjRfZG9fcGFnZV9mYXVsdAkvLyBpZ25vcmUgcmV0dXJuIGFkZHJlc3MKK0VORChwYWdlX2ZhdWx0KQorCitFTlRSWShub25fc3lzY2FsbCkKKwltb3YgYXIucnNjPXIyNwkJCS8vIHJlc3RvcmUgYXIucnNjIGJlZm9yZSBTQVZFX01JTl9XSVRIX0NPVkVSCisJOzsKKwlTQVZFX01JTl9XSVRIX0NPVkVSCisKKwkvLyBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBjb2RlIHRvIGJlIGhlcmUsIG90aGVyIHRoYW4gdGhhdAorCS8vIHRoZXJlIGhhcHBlbnMgdG8gYmUgc3BhY2UgaGVyZSB0aGF0IHdvdWxkIGdvIHVudXNlZCBvdGhlcndpc2UuICBJZiB0aGlzCisJLy8gZmF1bHQgZXZlciBnZXRzICJ1bnJlc2VydmVkIiwgc2ltcGx5IG1vdmVkIHRoZSBmb2xsb3dpbmcgY29kZSB0byBhIG1vcmUKKwkvLyBzdWl0YWJsZSBzcG90Li4uCisKKwlhbGxvYyByMTQ9YXIucGZzLDAsMCwyLDAKKwlNT1ZfRlJPTV9JSU0ob3V0MCkKKwlhZGQgb3V0MT0xNixzcAorCWFkZHMgcjM9OCxyMgkJCS8vIHNldCB1cCBzZWNvbmQgYmFzZSBwb2ludGVyIGZvciBTQVZFX1JFU1QKKworCVNTTV9QU1JfSUNfQU5EX0RFRkFVTFRfQklUU19BTkRfU1JMWl9JKHIxNSwgcjI0KQorCQkJCQkvLyBndWFyYW50ZWUgdGhhdCBpbnRlcnJ1cHRpb24gY29sbGVjdGlvbiBpcyBvbgorCVNTTV9QU1JfSShwMTUsIHAxNSwgcjE1KQkvLyByZXN0b3JlIHBzci5pCisJbW92bCByMTU9aWE2NF9sZWF2ZV9rZXJuZWwKKwk7OworCVNBVkVfUkVTVAorCW1vdiBycD1yMTUKKwk7OworCWJyLmNhbGwuc3B0ay5tYW55IGI2PWlhNjRfYmFkX2JyZWFrCS8vIGF2b2lkIFdBVyBvbiBDRk0gYW5kIGlnbm9yZSByZXR1cm4gYWRkcgorRU5EKG5vbl9zeXNjYWxsKQorCitFTlRSWShfX2ludGVycnVwdCkKKwlEQkdfRkFVTFQoMTIpCisJbW92IHIzMT1wcgkJLy8gcHJlcGFyZSB0byBzYXZlIHByZWRpY2F0ZXMKKwk7OworCVNBVkVfTUlOX1dJVEhfQ09WRVIJLy8gdXNlcyByMzE7IGRlZmluZXMgcjIgYW5kIHIzCisJU1NNX1BTUl9JQ19BTkRfREVGQVVMVF9CSVRTX0FORF9TUkxaX0kocjMsIHIxNCkKKwkJCQkvLyBlbnN1cmUgZXZlcnlib2R5IGtub3dzIHBzci5pYyBpcyBiYWNrIG9uCisJYWRkcyByMz04LHIyCQkvLyBzZXQgdXAgc2Vjb25kIGJhc2UgcG9pbnRlciBmb3IgU0FWRV9SRVNUCisJOzsKKwlTQVZFX1JFU1QKKwk7OworCU1DQV9SRUNPVkVSX1JBTkdFKGludGVycnVwdCkKKwlhbGxvYyByMTQ9YXIucGZzLDAsMCwyLDAgLy8gbXVzdCBiZSBmaXJzdCBpbiBhbiBpbnNuIGdyb3VwCisJTU9WX0ZST01fSVZSKG91dDAsIHI4KQkvLyBwYXNzIGNyLml2ciBhcyBmaXJzdCBhcmcKKwlhZGQgb3V0MT0xNixzcAkJLy8gcGFzcyBwb2ludGVyIHRvIHB0X3JlZ3MgYXMgc2Vjb25kIGFyZworCTs7CisJc3Jsei5kCQkJLy8gbWFrZSBzdXJlIHdlIHNlZSB0aGUgZWZmZWN0IG9mIGNyLml2cgorCW1vdmwgcjE0PWlhNjRfbGVhdmVfa2VybmVsCisJOzsKKwltb3YgcnA9cjE0CisJYnIuY2FsbC5zcHRrLm1hbnkgYjY9aWE2NF9oYW5kbGVfaXJxCitFTkQoX19pbnRlcnJ1cHQpCisKKwkvKgorCSAqIFRoZXJlIGlzIG5vIHBhcnRpY3VsYXIgcmVhc29uIGZvciB0aGlzIGNvZGUgdG8gYmUgaGVyZSwgb3RoZXIgdGhhbiB0aGF0CisJICogdGhlcmUgaGFwcGVucyB0byBiZSBzcGFjZSBoZXJlIHRoYXQgd291bGQgZ28gdW51c2VkIG90aGVyd2lzZS4gIElmIHRoaXMKKwkgKiBmYXVsdCBldmVyIGdldHMgInVucmVzZXJ2ZWQiLCBzaW1wbHkgbW92ZWQgdGhlIGZvbGxvd2luZyBjb2RlIHRvIGEgbW9yZQorCSAqIHN1aXRhYmxlIHNwb3QuLi4KKwkgKi8KKworRU5UUlkoZGlzcGF0Y2hfdW5hbGlnbmVkX2hhbmRsZXIpCisJU0FWRV9NSU5fV0lUSF9DT1ZFUgorCTs7CisJYWxsb2MgcjE0PWFyLnBmcywwLDAsMiwwCQkvLyBub3cgaXQncyBzYWZlIChtdXN0IGJlIGZpcnN0IGluIGluc24gZ3JvdXAhKQorCU1PVl9GUk9NX0lGQShvdXQwKQorCWFkZHMgb3V0MT0xNixzcAorCisJU1NNX1BTUl9JQ19BTkRfREVGQVVMVF9CSVRTX0FORF9TUkxaX0kocjMsIHIyNCkKKwkJCQkJCS8vIGd1YXJhbnRlZSB0aGF0IGludGVycnVwdGlvbiBjb2xsZWN0aW9uIGlzIG9uCisJU1NNX1BTUl9JKHAxNSwgcDE1LCByMykJCQkvLyByZXN0b3JlIHBzci5pCisJYWRkcyByMz04LHIyCQkJCS8vIHNldCB1cCBzZWNvbmQgYmFzZSBwb2ludGVyCisJOzsKKwlTQVZFX1JFU1QKKwltb3ZsIHIxND1pYTY0X2xlYXZlX2tlcm5lbAorCTs7CisJbW92IHJwPXIxNAorCWJyLnNwdGsubWFueSBpYTY0X3ByZXBhcmVfaGFuZGxlX3VuYWxpZ25lZAorRU5EKGRpc3BhdGNoX3VuYWxpZ25lZF9oYW5kbGVyKQorCisJLyoKKwkgKiBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBjb2RlIHRvIGJlIGhlcmUsIG90aGVyIHRoYW4gdGhhdAorCSAqIHRoZXJlIGhhcHBlbnMgdG8gYmUgc3BhY2UgaGVyZSB0aGF0IHdvdWxkIGdvIHVudXNlZCBvdGhlcndpc2UuICBJZiB0aGlzCisJICogZmF1bHQgZXZlciBnZXRzICJ1bnJlc2VydmVkIiwgc2ltcGx5IG1vdmVkIHRoZSBmb2xsb3dpbmcgY29kZSB0byBhIG1vcmUKKwkgKiBzdWl0YWJsZSBzcG90Li4uCisJICovCisKK0VOVFJZKGRpc3BhdGNoX3RvX2ZhdWx0X2hhbmRsZXIpCisJLyoKKwkgKiBJbnB1dDoKKwkgKglwc3IuaWM6CW9mZgorCSAqCXIxOToJZmF1bHQgdmVjdG9yIG51bWJlciAoZS5nLiwgMjQgZm9yIEdlbmVyYWwgRXhjZXB0aW9uKQorCSAqCXIzMToJY29udGFpbnMgc2F2ZWQgcHJlZGljYXRlcyAocHIpCisJICovCisJU0FWRV9NSU5fV0lUSF9DT1ZFUl9SMTkKKwlhbGxvYyByMTQ9YXIucGZzLDAsMCw1LDAKKwlNT1ZfRlJPTV9JU1Iob3V0MSkKKwlNT1ZfRlJPTV9JRkEob3V0MikKKwlNT1ZfRlJPTV9JSU0ob3V0MykKKwlNT1ZfRlJPTV9JVElSKG91dDQpCisJOzsKKwlTU01fUFNSX0lDX0FORF9ERUZBVUxUX0JJVFNfQU5EX1NSTFpfSShyMywgb3V0MCkKKwkJCQkJCS8vIGd1YXJhbnRlZSB0aGF0IGludGVycnVwdGlvbiBjb2xsZWN0aW9uIGlzIG9uCisJbW92IG91dDA9cjE1CisJOzsKKwlTU01fUFNSX0kocDE1LCBwMTUsIHIzKQkJCS8vIHJlc3RvcmUgcHNyLmkKKwlhZGRzIHIzPTgscjIJCQkJLy8gc2V0IHVwIHNlY29uZCBiYXNlIHBvaW50ZXIgZm9yIFNBVkVfUkVTVAorCTs7CisJU0FWRV9SRVNUCisJbW92bCByMTQ9aWE2NF9sZWF2ZV9rZXJuZWwKKwk7OworCW1vdiBycD1yMTQKKwlici5jYWxsLnNwdGsubWFueSBiNj1pYTY0X2ZhdWx0CitFTkQoZGlzcGF0Y2hfdG9fZmF1bHRfaGFuZGxlcikKKwogCS8qCiAJICogU3F1YXR0aW5nIGluIHRoaXMgc3BhY2UgLi4uCiAJICoKQEAgLTE2ODYsMTEgKzE2ODgsMTAgQEAKIAkucHJvbG9ndWUKIAkuYm9keQogCVNBVkVfTUlOX1dJVEhfQ09WRVIKLQlzc20gcHNyLmljIHwgUFNSX0RFRkFVTFRfQklUUworCVNTTV9QU1JfSUNfQU5EX0RFRkFVTFRfQklUU19BTkRfU1JMWl9JKHIzLCByMjQpCisJCQkJLy8gZ3VhcmFudGVlIHRoYXQgaW50ZXJydXB0aW9uIGNvbGxlY3Rpb24gaXMgb24KIAk7OwotCXNybHouaQkJLy8gZ3VhcmFudGVlIHRoYXQgaW50ZXJydXB0aW9uIGNvbGxlY3Rpb24gaXMgb24KLQk7OwotKHAxNSkJc3NtIHBzci5pCS8vIHJlc3RvcmUgcHNyLmkKKwlTU01fUFNSX0kocDE1LCBwMTUsIHIzKQkvLyByZXN0b3JlIHBzci5pCiAJYWRkcyByMz04LHIyCS8vIHNldCB1cCBzZWNvbmQgYmFzZSBwb2ludGVyIGZvciBTQVZFX1JFU1QKIAk7OwogCWFsbG9jIHIxND1hci5wZnMsMCwwLDEsMAkvLyBtdXN0IGJlIGZpcnN0IGluIGluc24gZ3JvdXAKQEAgLTE3MjksMTIgKzE3MzAsMTEgQEAKIEVOVFJZKGRpc3BhdGNoX3RvX2lhMzJfaGFuZGxlcikKIAlTQVZFX01JTgogCTs7Ci0JbW92IHIxND1jci5pc3IKLQlzc20gcHNyLmljIHwgUFNSX0RFRkFVTFRfQklUUworCU1PVl9GUk9NX0lTUihyMTQpCisJU1NNX1BTUl9JQ19BTkRfREVGQVVMVF9CSVRTX0FORF9TUkxaX0kocjMsIHIyNCkKKwkJCQkvLyBndWFyYW50ZWUgdGhhdCBpbnRlcnJ1cHRpb24gY29sbGVjdGlvbiBpcyBvbgogCTs7Ci0Jc3Jsei5pCQkJCQkvLyBndWFyYW50ZWUgdGhhdCBpbnRlcnJ1cHRpb24gY29sbGVjdGlvbiBpcyBvbgotCTs7Ci0ocDE1KQlzc20gcHNyLmkKKwlTU01fUFNSX0kocDE1LCBwMTUsIHIzKQogCWFkZHMgcjM9OCxyMgkJLy8gQmFzZSBwb2ludGVyIGZvciBTQVZFX1JFU1QKIAk7OwogCVNBVkVfUkVTVApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9taW5zdGF0ZS5oIGIvYXJjaC9pYTY0L2tlcm5lbC9taW5zdGF0ZS5oCmluZGV4IDc0YjZkNjcuLjI5MmUyMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWluc3RhdGUuaAorKysgYi9hcmNoL2lhNjQva2VybmVsL21pbnN0YXRlLmgKQEAgLTIsNiArMiw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAKICNpbmNsdWRlICJlbnRyeS5oIgorI2luY2x1ZGUgInBhcmF2aXJ0X2luc3QuaCIKIAogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCiAvKiByZWFkIGFyLml0YyBpbiBhZHZhbmNlLCBhbmQgdXNlIGl0IGJlZm9yZSBsZWF2aW5nIGJhbmsgMCAqLwpAQCAtNDMsMTYgKzQ0LDE2IEBACiAgKiBOb3RlIHRoYXQgcHNyLmljIGlzIE5PVCB0dXJuZWQgb24gYnkgdGhpcyBtYWNyby4gIFRoaXMgaXMgc28gdGhhdAogICogd2UgY2FuIHBhc3MgaW50ZXJydXB0aW9uIHN0YXRlIGFzIGFyZ3VtZW50cyB0byBhIGhhbmRsZXIuCiAgKi8KLSNkZWZpbmUgRE9fU0FWRV9NSU4oQ09WRVIsU0FWRV9JRlMsRVhUUkEsV09SS0FST1VORCkJCQkJCQlcCisjZGVmaW5lIElBNjRfTkFUSVZFX0RPX1NBVkVfTUlOKF9fQ09WRVIsU0FWRV9JRlMsRVhUUkEsV09SS0FST1VORCkJCQkJXAogCW1vdiByMTY9SUE2NF9LUihDVVJSRU5UKTsJLyogTSAqLwkJCQkJCQlcCiAJbW92IHIyNz1hci5yc2M7CQkJLyogTSAqLwkJCQkJCQlcCiAJbW92IHIyMD1yMTsJCQkvKiBBICovCQkJCQkJCVwKIAltb3YgcjI1PWFyLnVuYXQ7CQkvKiBNICovCQkJCQkJCVwKLQltb3YgcjI5PWNyLmlwc3I7CQkvKiBNICovCQkJCQkJCVwKKwlNT1ZfRlJPTV9JUFNSKHAwLHIyOSk7CQkvKiBNICovCQkJCQkJCVwKIAltb3YgcjI2PWFyLnBmczsJCQkvKiBJICovCQkJCQkJCVwKLQltb3YgcjI4PWNyLmlpcDsJCQkvKiBNICovCQkJCQkJCVwKKwlNT1ZfRlJPTV9JSVAocjI4KTsJCQkvKiBNICovCQkJCQkJXAogCW1vdiByMjE9YXIuZnBzcjsJCS8qIE0gKi8JCQkJCQkJXAotCUNPVkVSOwkJCQkvKiBCOzsgKG9yIG5vdGhpbmcpICovCQkJCQlcCisJX19DT1ZFUjsJCQkJLyogQjs7IChvciBub3RoaW5nKSAqLwkJCQlcCiAJOzsJCQkJCQkJCQkJCVwKIAlhZGRzIHIxNj1JQTY0X1RBU0tfVEhSRUFEX09OX1VTVEFDS19PRkZTRVQscjE2OwkJCQkJCVwKIAk7OwkJCQkJCQkJCQkJXApAQCAtMjQ0LDYgKzI0NSw2IEBACiAxOgkJCQkJCVwKIAkucHJlZC5yZWwgIm11dGV4IiwgcEtTdGssIHBVU3RrCiAKLSNkZWZpbmUgU0FWRV9NSU5fV0lUSF9DT1ZFUglET19TQVZFX01JTihjb3ZlciwgbW92IHIzMD1jci5pZnMsICwgUlNFX1dPUktBUk9VTkQpCi0jZGVmaW5lIFNBVkVfTUlOX1dJVEhfQ09WRVJfUjE5CURPX1NBVkVfTUlOKGNvdmVyLCBtb3YgcjMwPWNyLmlmcywgbW92IHIxNT1yMTksIFJTRV9XT1JLQVJPVU5EKQorI2RlZmluZSBTQVZFX01JTl9XSVRIX0NPVkVSCURPX1NBVkVfTUlOKENPVkVSLCBtb3YgcjMwPWNyLmlmcywgLCBSU0VfV09SS0FST1VORCkKKyNkZWZpbmUgU0FWRV9NSU5fV0lUSF9DT1ZFUl9SMTkJRE9fU0FWRV9NSU4oQ09WRVIsIG1vdiByMzA9Y3IuaWZzLCBtb3YgcjE1PXIxOSwgUlNFX1dPUktBUk9VTkQpCiAjZGVmaW5lIFNBVkVfTUlOCQkJRE9fU0FWRV9NSU4oICAgICAsIG1vdiByMzA9cjAsICwgKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZTgzZTJlYS4uMjlhYWQzNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCkBAIC0zMjEsNyArMzIxLDggQEAKIHZvaWQKIG1vZHVsZV9mcmVlIChzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCiB7Ci0JaWYgKG1vZC0+YXJjaC5pbml0X3Vud190YWJsZSAmJiBtb2R1bGVfcmVnaW9uID09IG1vZC0+bW9kdWxlX2luaXQpIHsKKwlpZiAobW9kICYmIG1vZC0+YXJjaC5pbml0X3Vud190YWJsZSAmJgorCSAgICBtb2R1bGVfcmVnaW9uID09IG1vZC0+bW9kdWxlX2luaXQpIHsKIAkJdW53X3JlbW92ZV91bndpbmRfdGFibGUobW9kLT5hcmNoLmluaXRfdW53X3RhYmxlKTsKIAkJbW9kLT5hcmNoLmluaXRfdW53X3RhYmxlID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL25yLWlycXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbnItaXJxcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZTA0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL25yLWlycXMuYwpAQCAtMCwwICsxLDI0IEBACisvKgorICogY2FsY3VsYXRlCisgKiBOUl9JUlFTID0gbWF4KElBNjRfTkFUSVZFX05SX0lSUVMsIFhFTl9OUl9JUlFTLCBGT09fTlJfSVJRUy4uLikKKyAqIGRlcGVuZGluZyBvbiBjb25maWcuCisgKiBUaGlzIG11c3QgYmUgY2FsY3VsYXRlZCBiZWZvcmUgcHJvY2Vzc2luZyBhc20tb2Zmc2V0LmMuCisgKi8KKworI2RlZmluZSBBU01fT0ZGU0VUU19DIDEKKworI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20taWE2NC9uYXRpdmUvaXJxLmg+CisKK3ZvaWQgZm9vKHZvaWQpCit7CisJdW5pb24gcGFyYXZpcnRfbnJfaXJxc19tYXggeworCQljaGFyIGlhNjRfbmF0aXZlX25yX2lycXNbSUE2NF9OQVRJVkVfTlJfSVJRU107CisjaWZkZWYgQ09ORklHX1hFTgorCQljaGFyIHhlbl9ucl9pcnFzW1hFTl9OUl9JUlFTXTsKKyNlbmRpZgorCX07CisKKwlERUZJTkUoTlJfSVJRUywgc2l6ZW9mICh1bmlvbiBwYXJhdmlydF9ucl9pcnFzX21heCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYWY1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0LmMKQEAgLTAsMCArMSwzNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnQuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqICAgICBZYW96dSAoRWRkaWUpIERvbmcgPGVkZGllLmRvbmdAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2lvc2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2VuZXJhbCBpbmZvCisgKi8KK3N0cnVjdCBwdl9pbmZvIHB2X2luZm8gPSB7CisJLmtlcm5lbF9ycGwgPSAwLAorCS5wYXJhdmlydF9lbmFibGVkID0gMCwKKwkubmFtZSA9ICJiYXJlIGhhcmR3YXJlIgorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHZfaW5pdF9vcHMKKyAqIGluaXRpYWxpemF0aW9uIGhvb2tzLgorICovCisKK3N0cnVjdCBwdl9pbml0X29wcyBwdl9pbml0X29wczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHZfY3B1X29wcworICogaW50cmluc2ljcyBob29rcy4KKyAqLworCisvKiBpYTY0X25hdGl2ZV94eHggYXJlIG1hY3JvcyBzbyB0aGF0IHdlIGhhdmUgdG8gbWFrZSB0aGVtIHJlYWwgZnVuY3Rpb25zICovCisKKyNkZWZpbmUgREVGSU5FX1ZPSURfRlVOQzEobmFtZSkJCQkJCVwKKwlzdGF0aWMgdm9pZAkJCQkJCVwKKwlpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZnVuYyh1bnNpZ25lZCBsb25nIGFyZykJXAorCXsJCQkJCQkJXAorCQlpYTY0X25hdGl2ZV8gIyMgbmFtZShhcmcpOwkJCVwKKwl9CQkJCQkJCVwKKworI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMihuYW1lKQkJCQkJXAorCXN0YXRpYyB2b2lkCQkJCQkJXAorCWlhNjRfbmF0aXZlXyAjIyBuYW1lICMjIF9mdW5jKHVuc2lnbmVkIGxvbmcgYXJnMCwJXAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSkJXAorCXsJCQkJCQkJXAorCQlpYTY0X25hdGl2ZV8gIyMgbmFtZShhcmcwLCBhcmcxKTsJCVwKKwl9CQkJCQkJCVwKKworI2RlZmluZSBERUZJTkVfRlVOQzAobmFtZSkJCQlcCisJc3RhdGljIHVuc2lnbmVkIGxvbmcJCQlcCisJaWE2NF9uYXRpdmVfICMjIG5hbWUgIyMgX2Z1bmModm9pZCkJXAorCXsJCQkJCVwKKwkJcmV0dXJuIGlhNjRfbmF0aXZlXyAjIyBuYW1lKCk7CVwKKwl9CisKKyNkZWZpbmUgREVGSU5FX0ZVTkMxKG5hbWUsIHR5cGUpCQkJXAorCXN0YXRpYyB1bnNpZ25lZCBsb25nCQkJCVwKKwlpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZnVuYyh0eXBlIGFyZykJCVwKKwl7CQkJCQkJXAorCQlyZXR1cm4gaWE2NF9uYXRpdmVfICMjIG5hbWUoYXJnKTsJXAorCX0JCQkJCQlcCisKK0RFRklORV9WT0lEX0ZVTkMxKGZjKTsKK0RFRklORV9WT0lEX0ZVTkMxKGludHJpbl9sb2NhbF9pcnFfcmVzdG9yZSk7CisKK0RFRklORV9WT0lEX0ZVTkMyKHB0Y2dhKTsKK0RFRklORV9WT0lEX0ZVTkMyKHNldF9ycik7CisKK0RFRklORV9GVU5DMChnZXRfcHNyX2kpOworCitERUZJTkVfRlVOQzEodGhhc2gsIHVuc2lnbmVkIGxvbmcpOworREVGSU5FX0ZVTkMxKGdldF9jcHVpZCwgaW50KTsKK0RFRklORV9GVU5DMShnZXRfcG1kLCBpbnQpOworREVGSU5FX0ZVTkMxKGdldF9yciwgdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyB2b2lkCitpYTY0X25hdGl2ZV9zc21faV9mdW5jKHZvaWQpCit7CisJaWE2NF9uYXRpdmVfc3NtKElBNjRfUFNSX0kpOworfQorCitzdGF0aWMgdm9pZAoraWE2NF9uYXRpdmVfcnNtX2lfZnVuYyh2b2lkKQoreworCWlhNjRfbmF0aXZlX3JzbShJQTY0X1BTUl9JKTsKK30KKworc3RhdGljIHZvaWQKK2lhNjRfbmF0aXZlX3NldF9ycjBfdG9fcnI0X2Z1bmModW5zaWduZWQgbG9uZyB2YWwwLCB1bnNpZ25lZCBsb25nIHZhbDEsCisJCQkJdW5zaWduZWQgbG9uZyB2YWwyLCB1bnNpZ25lZCBsb25nIHZhbDMsCisJCQkJdW5zaWduZWQgbG9uZyB2YWw0KQoreworCWlhNjRfbmF0aXZlX3NldF9ycjBfdG9fcnI0KHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpOworfQorCisjZGVmaW5lIENBU0VfR0VUX1JFRyhpZCkJCQkJXAorCWNhc2UgX0lBNjRfUkVHXyAjIyBpZDoJCQkJXAorCXJlcyA9IGlhNjRfbmF0aXZlX2dldHJlZyhfSUE2NF9SRUdfICMjIGlkKTsJXAorCWJyZWFrOworI2RlZmluZSBDQVNFX0dFVF9BUihpZCkgQ0FTRV9HRVRfUkVHKEFSXyAjIyBpZCkKKyNkZWZpbmUgQ0FTRV9HRVRfQ1IoaWQpIENBU0VfR0VUX1JFRyhDUl8gIyMgaWQpCisKK3Vuc2lnbmVkIGxvbmcKK2lhNjRfbmF0aXZlX2dldHJlZ19mdW5jKGludCByZWdudW0pCit7CisJdW5zaWduZWQgbG9uZyByZXMgPSAtMTsKKwlzd2l0Y2ggKHJlZ251bSkgeworCUNBU0VfR0VUX1JFRyhHUCk7CisJQ0FTRV9HRVRfUkVHKElQKTsKKwlDQVNFX0dFVF9SRUcoUFNSKTsKKwlDQVNFX0dFVF9SRUcoVFApOworCUNBU0VfR0VUX1JFRyhTUCk7CisKKwlDQVNFX0dFVF9BUihLUjApOworCUNBU0VfR0VUX0FSKEtSMSk7CisJQ0FTRV9HRVRfQVIoS1IyKTsKKwlDQVNFX0dFVF9BUihLUjMpOworCUNBU0VfR0VUX0FSKEtSNCk7CisJQ0FTRV9HRVRfQVIoS1I1KTsKKwlDQVNFX0dFVF9BUihLUjYpOworCUNBU0VfR0VUX0FSKEtSNyk7CisJQ0FTRV9HRVRfQVIoUlNDKTsKKwlDQVNFX0dFVF9BUihCU1ApOworCUNBU0VfR0VUX0FSKEJTUFNUT1JFKTsKKwlDQVNFX0dFVF9BUihSTkFUKTsKKwlDQVNFX0dFVF9BUihGQ1IpOworCUNBU0VfR0VUX0FSKEVGTEFHKTsKKwlDQVNFX0dFVF9BUihDU0QpOworCUNBU0VfR0VUX0FSKFNTRCk7CisJQ0FTRV9HRVRfQVIoQ0ZMQUcpOworCUNBU0VfR0VUX0FSKEZTUik7CisJQ0FTRV9HRVRfQVIoRklSKTsKKwlDQVNFX0dFVF9BUihGRFIpOworCUNBU0VfR0VUX0FSKENDVik7CisJQ0FTRV9HRVRfQVIoVU5BVCk7CisJQ0FTRV9HRVRfQVIoRlBTUik7CisJQ0FTRV9HRVRfQVIoSVRDKTsKKwlDQVNFX0dFVF9BUihQRlMpOworCUNBU0VfR0VUX0FSKExDKTsKKwlDQVNFX0dFVF9BUihFQyk7CisKKwlDQVNFX0dFVF9DUihEQ1IpOworCUNBU0VfR0VUX0NSKElUTSk7CisJQ0FTRV9HRVRfQ1IoSVZBKTsKKwlDQVNFX0dFVF9DUihQVEEpOworCUNBU0VfR0VUX0NSKElQU1IpOworCUNBU0VfR0VUX0NSKElTUik7CisJQ0FTRV9HRVRfQ1IoSUlQKTsKKwlDQVNFX0dFVF9DUihJRkEpOworCUNBU0VfR0VUX0NSKElUSVIpOworCUNBU0VfR0VUX0NSKElJUEEpOworCUNBU0VfR0VUX0NSKElGUyk7CisJQ0FTRV9HRVRfQ1IoSUlNKTsKKwlDQVNFX0dFVF9DUihJSEEpOworCUNBU0VfR0VUX0NSKExJRCk7CisJQ0FTRV9HRVRfQ1IoSVZSKTsKKwlDQVNFX0dFVF9DUihUUFIpOworCUNBU0VfR0VUX0NSKEVPSSk7CisJQ0FTRV9HRVRfQ1IoSVJSMCk7CisJQ0FTRV9HRVRfQ1IoSVJSMSk7CisJQ0FTRV9HRVRfQ1IoSVJSMik7CisJQ0FTRV9HRVRfQ1IoSVJSMyk7CisJQ0FTRV9HRVRfQ1IoSVRWKTsKKwlDQVNFX0dFVF9DUihQTVYpOworCUNBU0VfR0VUX0NSKENNQ1YpOworCUNBU0VfR0VUX0NSKExSUjApOworCUNBU0VfR0VUX0NSKExSUjEpOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fQ1JJVCAid3JvbmdfZ2V0cmVnICVkXG4iLCByZWdudW0pOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBDQVNFX1NFVF9SRUcoaWQpCQkJCVwKKwljYXNlIF9JQTY0X1JFR18gIyMgaWQ6CQkJCVwKKwlpYTY0X25hdGl2ZV9zZXRyZWcoX0lBNjRfUkVHXyAjIyBpZCwgdmFsKTsJXAorCWJyZWFrOworI2RlZmluZSBDQVNFX1NFVF9BUihpZCkgQ0FTRV9TRVRfUkVHKEFSXyAjIyBpZCkKKyNkZWZpbmUgQ0FTRV9TRVRfQ1IoaWQpIENBU0VfU0VUX1JFRyhDUl8gIyMgaWQpCisKK3ZvaWQKK2lhNjRfbmF0aXZlX3NldHJlZ19mdW5jKGludCByZWdudW0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXN3aXRjaCAocmVnbnVtKSB7CisJY2FzZSBfSUE2NF9SRUdfUFNSX0w6CisJCWlhNjRfbmF0aXZlX3NldHJlZyhfSUE2NF9SRUdfUFNSX0wsIHZhbCk7CisJCWlhNjRfZHZfc2VyaWFsaXplX2RhdGEoKTsKKwkJYnJlYWs7CisJQ0FTRV9TRVRfUkVHKFNQKTsKKwlDQVNFX1NFVF9SRUcoR1ApOworCisJQ0FTRV9TRVRfQVIoS1IwKTsKKwlDQVNFX1NFVF9BUihLUjEpOworCUNBU0VfU0VUX0FSKEtSMik7CisJQ0FTRV9TRVRfQVIoS1IzKTsKKwlDQVNFX1NFVF9BUihLUjQpOworCUNBU0VfU0VUX0FSKEtSNSk7CisJQ0FTRV9TRVRfQVIoS1I2KTsKKwlDQVNFX1NFVF9BUihLUjcpOworCUNBU0VfU0VUX0FSKFJTQyk7CisJQ0FTRV9TRVRfQVIoQlNQKTsKKwlDQVNFX1NFVF9BUihCU1BTVE9SRSk7CisJQ0FTRV9TRVRfQVIoUk5BVCk7CisJQ0FTRV9TRVRfQVIoRkNSKTsKKwlDQVNFX1NFVF9BUihFRkxBRyk7CisJQ0FTRV9TRVRfQVIoQ1NEKTsKKwlDQVNFX1NFVF9BUihTU0QpOworCUNBU0VfU0VUX0FSKENGTEFHKTsKKwlDQVNFX1NFVF9BUihGU1IpOworCUNBU0VfU0VUX0FSKEZJUik7CisJQ0FTRV9TRVRfQVIoRkRSKTsKKwlDQVNFX1NFVF9BUihDQ1YpOworCUNBU0VfU0VUX0FSKFVOQVQpOworCUNBU0VfU0VUX0FSKEZQU1IpOworCUNBU0VfU0VUX0FSKElUQyk7CisJQ0FTRV9TRVRfQVIoUEZTKTsKKwlDQVNFX1NFVF9BUihMQyk7CisJQ0FTRV9TRVRfQVIoRUMpOworCisJQ0FTRV9TRVRfQ1IoRENSKTsKKwlDQVNFX1NFVF9DUihJVE0pOworCUNBU0VfU0VUX0NSKElWQSk7CisJQ0FTRV9TRVRfQ1IoUFRBKTsKKwlDQVNFX1NFVF9DUihJUFNSKTsKKwlDQVNFX1NFVF9DUihJU1IpOworCUNBU0VfU0VUX0NSKElJUCk7CisJQ0FTRV9TRVRfQ1IoSUZBKTsKKwlDQVNFX1NFVF9DUihJVElSKTsKKwlDQVNFX1NFVF9DUihJSVBBKTsKKwlDQVNFX1NFVF9DUihJRlMpOworCUNBU0VfU0VUX0NSKElJTSk7CisJQ0FTRV9TRVRfQ1IoSUhBKTsKKwlDQVNFX1NFVF9DUihMSUQpOworCUNBU0VfU0VUX0NSKElWUik7CisJQ0FTRV9TRVRfQ1IoVFBSKTsKKwlDQVNFX1NFVF9DUihFT0kpOworCUNBU0VfU0VUX0NSKElSUjApOworCUNBU0VfU0VUX0NSKElSUjEpOworCUNBU0VfU0VUX0NSKElSUjIpOworCUNBU0VfU0VUX0NSKElSUjMpOworCUNBU0VfU0VUX0NSKElUVik7CisJQ0FTRV9TRVRfQ1IoUE1WKTsKKwlDQVNFX1NFVF9DUihDTUNWKTsKKwlDQVNFX1NFVF9DUihMUlIwKTsKKwlDQVNFX1NFVF9DUihMUlIxKTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9DUklUICJ3cm9uZyBzZXRyZWcgJWRcbiIsIHJlZ251bSk7CisJCWJyZWFrOworCX0KK30KKworc3RydWN0IHB2X2NwdV9vcHMgcHZfY3B1X29wcyA9IHsKKwkuZmMJCT0gaWE2NF9uYXRpdmVfZmNfZnVuYywKKwkudGhhc2gJCT0gaWE2NF9uYXRpdmVfdGhhc2hfZnVuYywKKwkuZ2V0X2NwdWlkCT0gaWE2NF9uYXRpdmVfZ2V0X2NwdWlkX2Z1bmMsCisJLmdldF9wbWQJPSBpYTY0X25hdGl2ZV9nZXRfcG1kX2Z1bmMsCisJLnB0Y2dhCQk9IGlhNjRfbmF0aXZlX3B0Y2dhX2Z1bmMsCisJLmdldF9ycgkJPSBpYTY0X25hdGl2ZV9nZXRfcnJfZnVuYywKKwkuc2V0X3JyCQk9IGlhNjRfbmF0aXZlX3NldF9ycl9mdW5jLAorCS5zZXRfcnIwX3RvX3JyNAk9IGlhNjRfbmF0aXZlX3NldF9ycjBfdG9fcnI0X2Z1bmMsCisJLnNzbV9pCQk9IGlhNjRfbmF0aXZlX3NzbV9pX2Z1bmMsCisJLmdldHJlZwkJPSBpYTY0X25hdGl2ZV9nZXRyZWdfZnVuYywKKwkuc2V0cmVnCQk9IGlhNjRfbmF0aXZlX3NldHJlZ19mdW5jLAorCS5yc21faQkJPSBpYTY0X25hdGl2ZV9yc21faV9mdW5jLAorCS5nZXRfcHNyX2kJPSBpYTY0X25hdGl2ZV9nZXRfcHNyX2lfZnVuYywKKwkuaW50cmluX2xvY2FsX2lycV9yZXN0b3JlCisJCQk9IGlhNjRfbmF0aXZlX2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZV9mdW5jLAorfTsKK0VYUE9SVF9TWU1CT0wocHZfY3B1X29wcyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJlcGxhY2VtZW50IG9mIGhhbmQgd3JpdHRlbiBhc3NlbWJseSBjb2Rlcy4KKyAqLworCit2b2lkCitwYXJhdmlydF9jcHVfYXNtX2luaXQoY29uc3Qgc3RydWN0IHB2X2NwdV9hc21fc3dpdGNoICpjcHVfYXNtX3N3aXRjaCkKK3sKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBwYXJhdmlydF9zd2l0Y2hfdG9fdGFyZzsKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBwYXJhdmlydF9sZWF2ZV9zeXNjYWxsX3Rhcmc7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGFyYXZpcnRfd29ya19wcm9jZXNzZWRfc3lzY2FsbF90YXJnOworCWV4dGVybiB1bnNpZ25lZCBsb25nIHBhcmF2aXJ0X2xlYXZlX2tlcm5lbF90YXJnOworCisJcGFyYXZpcnRfc3dpdGNoX3RvX3RhcmcgPSBjcHVfYXNtX3N3aXRjaC0+c3dpdGNoX3RvOworCXBhcmF2aXJ0X2xlYXZlX3N5c2NhbGxfdGFyZyA9IGNwdV9hc21fc3dpdGNoLT5sZWF2ZV9zeXNjYWxsOworCXBhcmF2aXJ0X3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGxfdGFyZyA9CisJCWNwdV9hc21fc3dpdGNoLT53b3JrX3Byb2Nlc3NlZF9zeXNjYWxsOworCXBhcmF2aXJ0X2xlYXZlX2tlcm5lbF90YXJnID0gY3B1X2FzbV9zd2l0Y2gtPmxlYXZlX2tlcm5lbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHZfaW9zYXBpY19vcHMKKyAqIGlvc2FwaWMgcmVhZC93cml0ZSBob29rcy4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50CitpYTY0X25hdGl2ZV9pb3NhcGljX3JlYWQoY2hhciBfX2lvbWVtICppb3NhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBfX2lhNjRfbmF0aXZlX2lvc2FwaWNfcmVhZChpb3NhcGljLCByZWcpOworfQorCitzdGF0aWMgdm9pZAoraWE2NF9uYXRpdmVfaW9zYXBpY193cml0ZShjaGFyIF9faW9tZW0gKmlvc2FwaWMsIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWwpCit7CisJX19pYTY0X25hdGl2ZV9pb3NhcGljX3dyaXRlKGlvc2FwaWMsIHJlZywgdmFsKTsKK30KKworc3RydWN0IHB2X2lvc2FwaWNfb3BzIHB2X2lvc2FwaWNfb3BzID0geworCS5wY2F0X2NvbXBhdF9pbml0ID0gaWE2NF9uYXRpdmVfaW9zYXBpY19wY2F0X2NvbXBhdF9pbml0LAorCS5nZXRfaXJxX2NoaXAgPSBpYTY0X25hdGl2ZV9pb3NhcGljX2dldF9pcnFfY2hpcCwKKworCS5fX3JlYWQgPSBpYTY0X25hdGl2ZV9pb3NhcGljX3JlYWQsCisJLl9fd3JpdGUgPSBpYTY0X25hdGl2ZV9pb3NhcGljX3dyaXRlLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHZfaXJxX29wcworICogaXJxIG9wZXJhdGlvbnMKKyAqLworCitzdHJ1Y3QgcHZfaXJxX29wcyBwdl9pcnFfb3BzID0geworCS5yZWdpc3Rlcl9pcGkgPSBpYTY0X25hdGl2ZV9yZWdpc3Rlcl9pcGksCisKKwkuYXNzaWduX2lycV92ZWN0b3IgPSBpYTY0X25hdGl2ZV9hc3NpZ25faXJxX3ZlY3RvciwKKwkuZnJlZV9pcnFfdmVjdG9yID0gaWE2NF9uYXRpdmVfZnJlZV9pcnFfdmVjdG9yLAorCS5yZWdpc3Rlcl9wZXJjcHVfaXJxID0gaWE2NF9uYXRpdmVfcmVnaXN0ZXJfcGVyY3B1X2lycSwKKworCS5yZXNlbmRfaXJxID0gaWE2NF9uYXRpdmVfcmVzZW5kX2lycSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHB2X3RpbWVfb3BzCisgKiB0aW1lIG9wZXJhdGlvbnMKKyAqLworCitzdGF0aWMgaW50CitpYTY0X25hdGl2ZV9kb19zdGVhbF9hY2NvdW50aW5nKHVuc2lnbmVkIGxvbmcgKm5ld19pdG0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwdl90aW1lX29wcyBwdl90aW1lX29wcyA9IHsKKwkuZG9fc3RlYWxfYWNjb3VudGluZyA9IGlhNjRfbmF0aXZlX2RvX3N0ZWFsX2FjY291bnRpbmcsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9pbnN0LmggYi9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0X2luc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2FkNmZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9pbnN0LmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbGludXgvYXJjaC9pYTY0L3hlbi9wYXJhdmlydF9pbnN0LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZkZWYgX19JQTY0X0FTTV9QQVJBVklSVFVBTElaRURfWEVOCisjaW5jbHVkZSA8YXNtL3hlbi9pbnN0Lmg+CisjaW5jbHVkZSA8YXNtL3hlbi9taW5zdGF0ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vbmF0aXZlL2luc3QuaD4KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0ZW50cnkuUyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRlbnRyeS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDJmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0ZW50cnkuUwpAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBsaW51eC9hcmNoL2lhNjQveGVuL3BhcmF2aXJ0ZW50cnkuUworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlICJlbnRyeS5oIgorCisjZGVmaW5lIERBVEE4KHN5bSwgaW5pdF92YWx1ZSkJCQlcCisJLnB1c2hzZWN0aW9uIC5kYXRhLnJlYWRfbW9zdGx5IDsJXAorCS5hbGlnbiA4IDsJCQkJXAorCS5nbG9iYWwgc3ltIDsJCQkJXAorCXN5bTogOwkJCQkJXAorCWRhdGE4IGluaXRfdmFsdWUgOwkJCVwKKwkucG9wc2VjdGlvbgorCisjZGVmaW5lIEJSQU5DSCh0YXJnLCByZWcsIGJyZWcpCQlcCisJbW92bCByZWc9dGFyZyA7CQkJXAorCTs7CQkJCVwKKwlsZDggcmVnPVtyZWddIDsJCQlcCisJOzsJCQkJXAorCW1vdiBicmVnPXJlZyA7CQkJXAorCWJyLmNvbmQuc3B0ay5tYW55IGJyZWcKKworI2RlZmluZSBCUkFOQ0hfUFJPQyhzeW0sIHJlZywgYnJlZykJCQkJXAorCURBVEE4KHBhcmF2aXJ0XyAjIyBzeW0gIyMgX3RhcmcsIGlhNjRfbmF0aXZlXyAjIyBzeW0pIDsgXAorCUdMT0JBTF9FTlRSWShwYXJhdmlydF8gIyMgc3ltKSA7CQkJXAorCQlCUkFOQ0gocGFyYXZpcnRfICMjIHN5bSAjIyBfdGFyZywgcmVnLCBicmVnKSA7CVwKKwlFTkQocGFyYXZpcnRfICMjIHN5bSkKKworI2RlZmluZSBCUkFOQ0hfUFJPQ19VTldJTkZPKHN5bSwgcmVnLCBicmVnKQkJCVwKKwlEQVRBOChwYXJhdmlydF8gIyMgc3ltICMjIF90YXJnLCBpYTY0X25hdGl2ZV8gIyMgc3ltKSA7IFwKKwlHTE9CQUxfRU5UUlkocGFyYXZpcnRfICMjIHN5bSkgOwkJCVwKKwkJUFRfUkVHU19VTldJTkRfSU5GTygwKSA7CQkJXAorCQlCUkFOQ0gocGFyYXZpcnRfICMjIHN5bSAjIyBfdGFyZywgcmVnLCBicmVnKSA7CVwKKwlFTkQocGFyYXZpcnRfICMjIHN5bSkKKworCitCUkFOQ0hfUFJPQyhzd2l0Y2hfdG8sIHIyMiwgYjcpCitCUkFOQ0hfUFJPQ19VTldJTkZPKGxlYXZlX3N5c2NhbGwsIHIyMiwgYjcpCitCUkFOQ0hfUFJPQyh3b3JrX3Byb2Nlc3NlZF9zeXNjYWxsLCByMiwgYjcpCitCUkFOQ0hfUFJPQ19VTldJTkZPKGxlYXZlX2tlcm5lbCwgcjIyLCBiNykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCA2MzJjZGE4Li5lNWMyZGU5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8YXNtL21jYS5oPgogI2luY2x1ZGUgPGFzbS9tZW1pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KICNpbmNsdWRlIDxhc20vcGF0Y2guaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTM0MSw2ICszNDIsOCBAQAogCXJzdmRfcmVnaW9uW25dLmVuZCAgID0gKHVuc2lnbmVkIGxvbmcpIGlhNjRfaW12YShfZW5kKTsKIAluKys7CiAKKwluICs9IHBhcmF2aXJ0X3Jlc2VydmVfbWVtb3J5KCZyc3ZkX3JlZ2lvbltuXSk7CisKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAlpZiAoaWE2NF9ib290X3BhcmFtLT5pbml0cmRfc3RhcnQpIHsKIAkJcnN2ZF9yZWdpb25bbl0uc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKGlhNjRfYm9vdF9wYXJhbS0+aW5pdHJkX3N0YXJ0KTsKQEAgLTUxOSw2ICs1MjIsOCBAQAogewogCXVud19pbml0KCk7CiAKKwlwYXJhdmlydF9hcmNoX3NldHVwX2Vhcmx5KCk7CisKIAlpYTY0X3BhdGNoX3Z0b3AoKHU2NCkgX19zdGFydF9fX3Z0b3BfcGF0Y2hsaXN0LCAodTY0KSBfX2VuZF9fX3Z0b3BfcGF0Y2hsaXN0KTsKIAogCSpjbWRsaW5lX3AgPSBfX3ZhKGlhNjRfYm9vdF9wYXJhbS0+Y29tbWFuZF9saW5lKTsKQEAgLTU4Myw2ICs1ODgsOSBAQAogCWFjcGlfYm9vdF9pbml0KCk7CiAjZW5kaWYKIAorCXBhcmF2aXJ0X2Jhbm5lcigpOworCXBhcmF2aXJ0X2FyY2hfc2V0dXBfY29uc29sZShjbWRsaW5lX3ApOworCiAjaWZkZWYgQ09ORklHX1ZUCiAJaWYgKCFjb25zd2l0Y2hwKSB7CiAjIGlmIGRlZmluZWQoQ09ORklHX0RVTU1ZX0NPTlNPTEUpCkBAIC02MDIsNiArNjEwLDggQEAKICNlbmRpZgogCiAJLyogZW5hYmxlIElBLTY0IE1hY2hpbmUgQ2hlY2sgQWJvcnQgSGFuZGxpbmcgdW5sZXNzIGRpc2FibGVkICovCisJaWYgKHBhcmF2aXJ0X2FyY2hfc2V0dXBfbm9tY2EoKSkKKwkJbm9tY2EgPSAxOwogCWlmICghbm9tY2EpCiAJCWlhNjRfbWNhX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA5ZDFkNDI5Li4wM2YxYTk5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL21jYS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTY0Miw2ICs2NDMsNyBAQAogCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CiAJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9jYWxsaW5fbWFwKTsKIAlwZXJfY3B1KGNwdV9zdGF0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IENQVV9PTkxJTkU7CisJcGFyYXZpcnRfcG9zdF9zbXBfcHJlcGFyZV9ib290X2NwdSgpOwogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCmluZGV4IGFhZDFiN2IuLjY1YzEwYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zYWwuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KQEAgLTQ4LDYgKzQ5LDE1IEBACiAKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCitzdGF0aWMgdm9pZAorcGFyYXZpcnRfY2xvY2tzb3VyY2VfcmVzdW1lKHZvaWQpCit7CisJaWYgKHB2X3RpbWVfb3BzLmNsb2Nrc291cmNlX3Jlc3VtZSkKKwkJcHZfdGltZV9vcHMuY2xvY2tzb3VyY2VfcmVzdW1lKCk7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9pdGMgPSB7CiAJLm5hbWUgICAgICAgICAgID0gIml0YyIsCiAJLnJhdGluZyAgICAgICAgID0gMzUwLApAQCAtNTYsNiArNjYsOSBAQAogCS5tdWx0ICAgICAgICAgICA9IDAsIC8qdG8gYmUgY2FsY3VsYXRlZCovCiAJLnNoaWZ0ICAgICAgICAgID0gMTYsCiAJLmZsYWdzICAgICAgICAgID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisJLnJlc3VtZQkJPSBwYXJhdmlydF9jbG9ja3NvdXJjZV9yZXN1bWUsCisjZW5kaWYKIH07CiBzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlICppdGNfY2xvY2tzb3VyY2U7CiAKQEAgLTE1Nyw2ICsxNzAsOSBAQAogCiAJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCisJaWYgKHBhcmF2aXJ0X2RvX3N0ZWFsX2FjY291bnRpbmcoJm5ld19pdG0pKQorCQlnb3RvIHNraXBfcHJvY2Vzc190aW1lX2FjY291bnRpbmc7CisKIAl3aGlsZSAoMSkgewogCQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKIApAQCAtMTg2LDYgKzIwMiw4IEBACiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJfQogCitza2lwX3Byb2Nlc3NfdGltZV9hY2NvdW50aW5nOgorCiAJZG8gewogCQkvKgogCQkgKiBJZiB3ZSdyZSB0b28gY2xvc2UgdG8gdGhlIG5leHQgY2xvY2sgdGljayBmb3IKQEAgLTMzNSw2ICszNTMsMTEgQEAKIAkJICovCiAJCWNsb2Nrc291cmNlX2l0Yy5yYXRpbmcgPSA1MDsKIAorCXBhcmF2aXJ0X2luaXRfbWlzc2luZ190aWNrc19hY2NvdW50aW5nKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwkvKiBhdm9pZCBzb2Z0bG9jayB1cCBtZXNzYWdlIHdoZW4gY3B1IGlzIHVucGx1ZyBhbmQgcGx1Z2dlZCBhZ2Fpbi4gKi8KKwl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisKIAkvKiBTZXR1cCB0aGUgQ1BVIGxvY2FsIHRpbWVyIHRpY2sgKi8KIAlpYTY0X2NwdV9sb2NhbF90aWNrKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA1OTI5YWIxLi41YTc3MjA2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCi0jZGVmaW5lIExPQURfT0ZGU0VUCShLRVJORUxfU1RBUlQgLSBLRVJORUxfVFJfUEFHRV9TSVpFKQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAKICNkZWZpbmUgSVZUX1RFWFQJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rdm0vTWFrZWZpbGUKaW5kZXggMTEyNzkxZC4uYmYyMmZiOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva3ZtL01ha2VmaWxlCkBAIC00Myw3ICs0Myw4IEBACiBFWFRSQV9DRkxBR1MgKz0gLUl2aXJ0L2t2bSAtSWFyY2gvaWE2NC9rdm0vCiBFWFRSQV9BRkxBR1MgKz0gLUl2aXJ0L2t2bSAtSWFyY2gvaWE2NC9rdm0vCiAKLWNvbW1vbi1vYmpzID0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBrdm1fbWFpbi5vIGlvYXBpYy5vKQorY29tbW9uLW9ianMgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gaW9hcGljLm8gXAorCQljb2FsZXNjZWRfbW1pby5vKQogCiBrdm0tb2JqcyA6PSAkKGNvbW1vbi1vYmpzKSBrdm0taWE2NC5vIGt2bV9mdy5vCiBvYmotJChDT05GSUdfS1ZNKSArPSBrdm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCmluZGV4IDY4Yzk3OGIuLjI2NzJmNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKQEAgLTE4Nyw2ICsxODcsOSBAQAogCiAJCXIgPSAxOwogCQlicmVhazsKKwljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CisJCXIgPSBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQ7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCX0KQEAgLTE5NSwxMSArMTk4LDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdmNwdV9maW5kX21taW9fZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJZ3BhX3QgYWRkcikKKwkJCQkJZ3BhX3QgYWRkciwgaW50IGxlbiwgaW50IGlzX3dyaXRlKQogewogCXN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBrdm1faW9fYnVzX2ZpbmRfZGV2KCZ2Y3B1LT5rdm0tPm1taW9fYnVzLCBhZGRyKTsKKwlkZXYgPSBrdm1faW9fYnVzX2ZpbmRfZGV2KCZ2Y3B1LT5rdm0tPm1taW9fYnVzLCBhZGRyLCBsZW4sIGlzX3dyaXRlKTsKIAogCXJldHVybiBkZXY7CiB9CkBAIC0yMzEsNyArMjM0LDcgQEAKIAlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX01NSU87CiAJcmV0dXJuIDA7CiBtbWlvOgotCW1taW9fZGV2ID0gdmNwdV9maW5kX21taW9fZGV2KHZjcHUsIHAtPmFkZHIpOworCW1taW9fZGV2ID0gdmNwdV9maW5kX21taW9fZGV2KHZjcHUsIHAtPmFkZHIsIHAtPnNpemUsICFwLT5kaXIpOwogCWlmIChtbWlvX2RldikgewogCQlpZiAoIXAtPmRpcikKIAkJCWt2bV9pb2RldmljZV93cml0ZShtbWlvX2RldiwgcC0+YWRkciwgcC0+c2l6ZSwKQEAgLTEwMzUsMTQgKzEwMzgsNiBAQAogCX0KIH0KIAotLyoKLSAqIE1ha2Ugc3VyZSB0aGF0IGEgY3B1IHRoYXQgaXMgYmVpbmcgaG90LXVucGx1Z2dlZCBkb2VzIG5vdCBoYXZlIGFueSB2Y3B1cwotICogY2FjaGVkIG9uIGl0LiBMZWF2ZSBpdCBhcyBibGFuayBmb3IgSUE2NC4KLSAqLwotdm9pZCBkZWNhY2hlX3ZjcHVzX29uX2NwdShpbnQgY3B1KQotewotfQotCiBzdGF0aWMgdm9pZCB2dGlfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIH0KQEAgLTE0NjAsNiArMTQ1NSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93KHN0cnVjdCBrdm0gKmt2bSkKK3sKK30KIAogbG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDU1ZWE1MmYuLjhjNWUxZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC00OTAsMjggKzQ5MCw2IEBACiAJICBOb3RlIGZvciBGYWxjb24gdXNlcnM6IFlvdSBhbHNvIGhhdmUgYW4gTUZQIHBvcnQsIGl0J3MganVzdCBub3QKIAkgIHdpcmVkIHRvIHRoZSBvdXRzaWRlLi4uIEJ1dCB5b3UgY291bGQgdXNlIHRoZSBwb3J0IHVuZGVyIExpbnV4LgogCi1jb25maWcgQVRBUklfU0NDCi0JdHJpc3RhdGUgIkF0YXJpIFNDQyBzZXJpYWwgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFUQVJJCi0JLS0taGVscC0tLQotCSAgSWYgeW91IGhhdmUgc2VyaWFsIHBvcnRzIGJhc2VkIG9uIGEgWmlsb2cgU0NDIGNoaXAgKE1vZGVtMiwgU2VyaWFsMiwKLQkgIExBTikgYW5kIGxpa2UgdG8gdXNlIHRoZW0gdW5kZXIgTGludXgsIHNheSBZLiBBbGwgYnVpbHQtaW4gU0NDJ3MgYXJlCi0JICBzdXBwb3J0ZWQgKFRULCBNZWdhU1RFLCBGYWxjb24pLCBhbmQgYWxzbyB0aGUgU1QtRVNDQy4gSWYgeW91IGhhdmUKLQkgIHR3byBjb25uZWN0b3JzIGZvciBjaGFubmVsIEEgKFNlcmlhbDIgYW5kIExBTiksIHRoZXkgYXJlIHZpc2libGUgYXMKLQkgIHR3byBzZXBhcmF0ZSBkZXZpY2VzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgotCi1jb25maWcgQVRBUklfU0NDX0RNQQotCWJvb2wgIkF0YXJpIFNDQyBzZXJpYWwgRE1BIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVEFSSV9TQ0MKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgRE1BIHN1cHBvcnQgZm9yIHJlY2VpdmluZyBkYXRhIG9uIGNoYW5uZWwgQSBvZiB0aGUgU0NDLgotCSAgSWYgeW91IGhhdmUgYSBUVCB5b3UgbWF5IHNheSBZIGhlcmUgYW5kIHJlYWQKLQkgIGRyaXZlcnMvY2hhci9hdGFyaV9TQ0MuUkVBRE1FLiBBbGwgb3RoZXIgdXNlcnMgc2hvdWxkIHNheSBOIGhlcmUsCi0JICBiZWNhdXNlIG9ubHkgdGhlIFRUIGhhcyBTQ0MtRE1BLCBldmVuIGlmIHlvdXIgbWFjaGluZSBrZWVwcyBjbGFpbWluZwotCSAgc28gYXQgYm9vdCB0aW1lLgotCiBjb25maWcgQVRBUklfTUlESQogCXRyaXN0YXRlICJBdGFyaSBNSURJIHNlcmlhbCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVRBUkkKQEAgLTU3OCwxOCArNTU2LDYgQEAKIAlkZXBlbmRzIG9uIElOUFVUX0FEQkhJRAogCWRlZmF1bHQgeQogCi1jb25maWcgQURCX0tFWUJPQVJECi0JYm9vbCAiU3VwcG9ydCBmb3IgQURCIGtleWJvYXJkIChvbGQgZHJpdmVyKSIKLQlkZXBlbmRzIG9uIE1BQyAmJiAhSU5QVVRfQURCSElECi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byB1c2UgYW4gQURCIGtleWJvYXJkIGF0dGFjaGVkIHRvIHlvdXIKLQkgIG1hY2hpbmUuIE5vdGUgdGhhdCB0aGlzIGRpc2FibGVzIGFueSBvdGhlciAoaWUuIFBTLzIpIGtleWJvYXJkCi0JICBzdXBwb3J0LCBldmVuIGlmIHlvdXIgbWFjaGluZSBpcyBwaHlzaWNhbGx5IGNhcGFibGUgb2YgdXNpbmcgYm90aCBhdAotCSAgdGhlIHNhbWUgdGltZS4KLQotCSAgSWYgeW91IHVzZSBhbiBBREIga2V5Ym9hcmQgKDQgcGluIGNvbm5lY3RvciksIHNheSBZIGhlcmUuCi0JICBJZiB5b3UgdXNlIGEgUFMvMiBrZXlib2FyZCAoNiBwaW4gY29ubmVjdG9yKSwgc2F5IE4gaGVyZS4KLQogY29uZmlnIEhQRENBCiAJdHJpc3RhdGUgIkhQIERDQSBzZXJpYWwgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIERJTyAmJiBTRVJJQUxfODI1MApAQCAtNjQwLDcgKzYwNiw3IEBACiAKIGNvbmZpZyBTRVJJQUxfQ09OU09MRQogCWJvb2wgIlN1cHBvcnQgZm9yIHNlcmlhbCBwb3J0IGNvbnNvbGUiCi0JZGVwZW5kcyBvbiAoQU1JR0EgfHwgQVRBUkkgfHwgTUFDIHx8IFNVTjMgfHwgU1VOM1ggfHwgVk1FIHx8IEFQT0xMTykgJiYgKEFUQVJJX01GUFNFUj15IHx8IEFUQVJJX1NDQz15IHx8IEFUQVJJX01JREk9eSB8fCBNQUNfU0NDPXkgfHwgQU1JR0FfQlVJTFRJTl9TRVJJQUw9eSB8fCBHVlBJT0VYVD15IHx8IE1VTFRJRkFDRV9JSUlfVFRZPXkgfHwgU0VSSUFMPXkgfHwgTVZNRTE0N19TQ0MgfHwgU0VSSUFMMTY3IHx8IE1WTUUxNjJfU0NDIHx8IEJWTUU2MDAwX1NDQyB8fCBETl9TRVJJQUwpCisJZGVwZW5kcyBvbiAoQU1JR0EgfHwgQVRBUkkgfHwgTUFDIHx8IFNVTjMgfHwgU1VOM1ggfHwgVk1FIHx8IEFQT0xMTykgJiYgKEFUQVJJX01GUFNFUj15IHx8IEFUQVJJX01JREk9eSB8fCBNQUNfU0NDPXkgfHwgQU1JR0FfQlVJTFRJTl9TRVJJQUw9eSB8fCBHVlBJT0VYVD15IHx8IE1VTFRJRkFDRV9JSUlfVFRZPXkgfHwgU0VSSUFMPXkgfHwgTVZNRTE0N19TQ0MgfHwgU0VSSUFMMTY3IHx8IE1WTUUxNjJfU0NDIHx8IEJWTUU2MDAwX1NDQyB8fCBETl9TRVJJQUwpCiAJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSBZIGhlcmUsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gdXNlIGEgc2VyaWFsIHBvcnQgYXMgdGhlCiAJICBzeXN0ZW0gY29uc29sZSAodGhlIHN5c3RlbSBjb25zb2xlIGlzIHRoZSBkZXZpY2Ugd2hpY2ggcmVjZWl2ZXMgYWxsCmRpZmYgLS1naXQgYS9hcmNoL202OGsvTWFrZWZpbGUgYi9hcmNoL202OGsvTWFrZWZpbGUKaW5kZXggYjE1MTczZi4uODEzM2RiYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9NYWtlZmlsZQpAQCAtMTMsNyArMTMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDE5OTQgYnkgSGFtaXNoIE1hY2RvbmFsZAogIwogCi1LQlVJTERfREVGQ09ORklHIDo9IGFtaWdhX2RlZmNvbmZpZworS0JVSUxEX0RFRkNPTkZJRyA6PSBtdWx0aV9kZWZjb25maWcKIAogIyBvdmVycmlkZSB0b3AgbGV2ZWwgbWFrZWZpbGUKIEFTICs9IC1tNjgwMjAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYyBiL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYwppbmRleCA1MGY1ZGFhLi5kZjY3OWQ5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCkBAIC0zNiwxNCArMzYsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi11bnNpZ25lZCBsb25nIGFtaWdhX21vZGVsOwotRVhQT1JUX1NZTUJPTChhbWlnYV9tb2RlbCk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbWlnYV9tb2RlbDsKIAogdW5zaWduZWQgbG9uZyBhbWlnYV9lY2xvY2s7CiBFWFBPUlRfU1lNQk9MKGFtaWdhX2VjbG9jayk7CiAKLXVuc2lnbmVkIGxvbmcgYW1pZ2FfbWFzdGVyY2xvY2s7Ci0KIHVuc2lnbmVkIGxvbmcgYW1pZ2FfY29sb3JjbG9jazsKIEVYUE9SVF9TWU1CT0woYW1pZ2FfY29sb3JjbG9jayk7CiAKQEAgLTUxLDcgKzQ4LDkgQEAKIEVYUE9SVF9TWU1CT0woYW1pZ2FfY2hpcHNldCk7CiAKIHVuc2lnbmVkIGNoYXIgYW1pZ2FfdmJsYW5rOwotdW5zaWduZWQgY2hhciBhbWlnYV9wc2ZyZXE7CitFWFBPUlRfU1lNQk9MKGFtaWdhX3ZibGFuayk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFtaWdhX3BzZnJlcTsKIAogc3RydWN0IGFtaWdhX2h3X3ByZXNlbnQgYW1pZ2FfaHdfcHJlc2VudDsKIEVYUE9SVF9TWU1CT0woYW1pZ2FfaHdfcHJlc2VudCk7CkBAIC05Miw4ICs5MSw2IEBACiBzdGF0aWMgY2hhciBhbWlnYV9tb2RlbF9uYW1lWzEzXSA9ICJBbWlnYSAiOwogCiBzdGF0aWMgdm9pZCBhbWlnYV9zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgaGFuZGxlcik7Ci0vKiBhbWlnYSBzcGVjaWZpYyBpcnEgZnVuY3Rpb25zICovCi1leHRlcm4gdm9pZCBhbWlnYV9pbml0X0lSUSh2b2lkKTsKIHN0YXRpYyB2b2lkIGFtaWdhX2dldF9tb2RlbChjaGFyICptb2RlbCk7CiBzdGF0aWMgaW50IGFtaWdhX2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcik7CiAvKiBhbWlnYSBzcGVjaWZpYyB0aW1lciBmdW5jdGlvbnMgKi8KQEAgLTEwNyw4ICsxMDQsNiBAQAogZXh0ZXJuIHZvaWQgYW1pZ2FfaW5pdF9zb3VuZCh2b2lkKTsKIHN0YXRpYyB2b2lkIGFtaWdhX21lbV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqYiwKIAkJCQkgICAgdW5zaWduZWQgaW50IGNvdW50KTsKLXZvaWQgYW1pZ2Ffc2VyaWFsX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLAotCQkJCXVuc2lnbmVkIGludCBjb3VudCk7CiAjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAogc3RhdGljIHZvaWQgYW1pZ2FfaGVhcnRiZWF0KGludCBvbik7CiAjZW5kaWYKQEAgLTQxOCw4ICs0MTMsNyBAQAogCW1hY2hfaGVhcnRiZWF0ID0gYW1pZ2FfaGVhcnRiZWF0OwogI2VuZGlmCiAKLQkvKiBGaWxsIGluIHRoZSBjbG9jayB2YWx1ZXMgKGJhc2VkIG9uIHRoZSA3MDAga0h6IEUtQ2xvY2spICovCi0JYW1pZ2FfbWFzdGVyY2xvY2sgPSA0MCphbWlnYV9lY2xvY2s7CS8qIDI4IE1IeiAqLworCS8qIEZpbGwgaW4gdGhlIGNsb2NrIHZhbHVlIChiYXNlZCBvbiB0aGUgNzAwIGtIeiBFLUNsb2NrKSAqLwogCWFtaWdhX2NvbG9yY2xvY2sgPSA1KmFtaWdhX2VjbG9jazsJLyogMy41IE1IeiAqLwogCiAJLyogY2xlYXIgYWxsIERNQSBiaXRzICovCkBAIC04MTcsOCArODExLDggQEAKIAkJOwogfQogCi12b2lkIGFtaWdhX3NlcmlhbF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKLQkJCQl1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBhbWlnYV9zZXJpYWxfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkgewogCQlpZiAoKnMgPT0gJ1xuJykKQEAgLTgyNyw3ICs4MjEsNyBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19TRVJJQUxfQ09OU09MRQorI2lmIDAKIHZvaWQgYW1pZ2Ffc2VyaWFsX3B1dHMoY29uc3QgY2hhciAqcykKIHsKIAlhbWlnYV9zZXJpYWxfY29uc29sZV93cml0ZShOVUxMLCBzLCBzdHJsZW4ocykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2RlYnVnLmMgYi9hcmNoL202OGsvYXRhcmkvZGVidWcuYwppbmRleCAwNDNkZGJjLi43MDJiMTVjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvZGVidWcuYworKysgYi9hcmNoL202OGsvYXRhcmkvZGVidWcuYwpAQCAtMjAsMTQgKzIwLDYgQEAKICNpbmNsdWRlIDxhc20vYXRhcmlody5oPgogI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KIAotLyogRmxhZyB0aGF0IE1vZGVtMSBwb3J0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgKi8KLWludCBhdGFyaV9NRlBfaW5pdF9kb25lOwotRVhQT1JUX1NZTUJPTChhdGFyaV9NRlBfaW5pdF9kb25lKTsKLQotLyogRmxhZyB0aGF0IE1vZGVtMSBwb3J0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgKi8KLWludCBhdGFyaV9TQ0NfaW5pdF9kb25lOwotRVhQT1JUX1NZTUJPTChhdGFyaV9TQ0NfaW5pdF9kb25lKTsKLQogLyogQ2FuIGJlIHNldCBzb21ld2hlcmUsIGlmIGEgU0NDIG1hc3RlciByZXNldCBoYXMgYWxyZWFkeSBiZSBkb25lIGFuZCBzaG91bGQKICAqIG5vdCBiZSByZXBlYXRlZDsgdXNlZCBieSBrZ2RiICovCiBpbnQgYXRhcmlfU0NDX3Jlc2V0X2RvbmU7CkBAIC00Nyw4ICszOSw4IEBACiAJbWZwLnVzYXJ0X2R0YSA9IGM7CiB9CiAKLXZvaWQgYXRhcmlfbWZwX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIGF0YXJpX21mcF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pIHsKIAkJaWYgKCpzdHIgPT0gJ1xuJykKQEAgLTY2LDggKzU4LDggQEAKIAlzY2MuY2hhX2JfZGF0YSA9IGM7CiB9CiAKLXZvaWQgYXRhcmlfc2NjX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIGF0YXJpX3NjY19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pIHsKIAkJaWYgKCpzdHIgPT0gJ1xuJykKQEAgLTgzLDggKzc1LDggQEAKIAlhY2lhLm1pZF9kYXRhID0gYzsKIH0KIAotdm9pZCBhdGFyaV9taWRpX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBhdGFyaV9taWRpX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pIHsKIAkJaWYgKCpzdHIgPT0gJ1xuJykKQEAgLTEzNiw3ICsxMjgsNyBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19TRVJJQUxfQ09OU09MRQorI2lmIDAKIGludCBhdGFyaV9tZnBfY29uc29sZV93YWl0X2tleShzdHJ1Y3QgY29uc29sZSAqY28pCiB7CiAJd2hpbGUgKCEobWZwLnJjdl9zdGF0ICYgMHg4MCkpCS8qIHdhaXQgZm9yIHJ4IGJ1ZiBmaWxsZWQgKi8KQEAgLTE2NiwxMSArMTU4LDcgQEAKICAqIFNDQyBzZXJpYWwgcG9ydHMuIFRoZXkncmUgdXNlZCBieSB0aGUgZGVidWdnaW5nIGludGVyZmFjZSwga2dkYiwgYW5kIHRoZQogICogc2VyaWFsIGNvbnNvbGUgY29kZS4KICAqLwotI2lmbmRlZiBDT05GSUdfU0VSSUFMX0NPTlNPTEUKIHN0YXRpYyB2b2lkIF9faW5pdCBhdGFyaV9pbml0X21mcF9wb3J0KGludCBjZmxhZykKLSNlbHNlCi12b2lkIGF0YXJpX2luaXRfbWZwX3BvcnQoaW50IGNmbGFnKQotI2VuZGlmCiB7CiAJLyoKIAkgKiB0aW1lciB2YWx1ZXMgZm9yIDEyMDAuLi4xMTUyMDAgYnBzOyA+IDM4NDAwIHNlbGVjdCAxMTAsIDEzNCwgb3IgMTUwCkBAIC0xOTMsOCArMTgxLDYgQEAKIAltZnAudGltX2R0X2QgPSBiYXVkX3RhYmxlW2JhdWRdOwogCW1mcC50aW1fY3RfY2QgfD0gMHgwMTsJCS8qIHN0YXJ0IHRpbWVyIEQsIDE6NCAqLwogCW1mcC50cm5fc3RhdCB8PSAweDAxOwkJLyogZW5hYmxlIFRYICovCi0KLQlhdGFyaV9NRlBfaW5pdF9kb25lID0gMTsKIH0KIAogI2RlZmluZSBTQ0NfV1JJVEUocmVnLCB2YWwpCQkJCVwKQEAgLTIxNCwxMSArMjAwLDcgQEAKIAkJCU1GUERFTEFZKCk7CQkJXAogCX0gd2hpbGUgKDApCiAKLSNpZm5kZWYgQ09ORklHX1NFUklBTF9DT05TT0xFCiBzdGF0aWMgdm9pZCBfX2luaXQgYXRhcmlfaW5pdF9zY2NfcG9ydChpbnQgY2ZsYWcpCi0jZWxzZQotdm9pZCBhdGFyaV9pbml0X3NjY19wb3J0KGludCBjZmxhZykKLSNlbmRpZgogewogCWV4dGVybiBpbnQgYXRhcmlfU0NDX3Jlc2V0X2RvbmU7CiAJc3RhdGljIGludCBjbGtzcmNfdGFibGVbOV0gPQpAQCAtMjc3LDE0ICsyNTksOSBAQAogCVNDQ19XUklURSg1LCByZWc1IHwgOCk7CiAKIAlhdGFyaV9TQ0NfcmVzZXRfZG9uZSA9IDE7Ci0JYXRhcmlfU0NDX2luaXRfZG9uZSA9IDE7CiB9CiAKLSNpZm5kZWYgQ09ORklHX1NFUklBTF9DT05TT0xFCiBzdGF0aWMgdm9pZCBfX2luaXQgYXRhcmlfaW5pdF9taWRpX3BvcnQoaW50IGNmbGFnKQotI2Vsc2UKLXZvaWQgYXRhcmlfaW5pdF9taWRpX3BvcnQoaW50IGNmbGFnKQotI2VuZGlmCiB7CiAJaW50IGJhdWQgPSBjZmxhZyAmIENCQVVEOwogCWludCBjc2l6ZSA9ICgoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4KSA/IDB4MTAgOiAweDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvTWFrZWZpbGUgYi9hcmNoL202OGsvZnBzcDA0MC9NYWtlZmlsZQppbmRleCAwMjE0ZDJmLi45NTA2ZDg4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvZnBzcDA0MC9NYWtlZmlsZQorKysgYi9hcmNoL202OGsvZnBzcDA0MC9NYWtlZmlsZQpAQCAtMTAsNyArMTAsNiBAQAogCSAgICB4X2JzdW4ubyB4X2ZsaW5lLm8geF9vcGVyci5vIHhfb3ZmbC5vIHhfc25hbi5vIHhfc3RvcmUubyBcCiAJICAgIHhfdW5mbC5vIHhfdW5pbXAubyB4X3Vuc3VwcC5vIGJ1Z2ZpeC5vIHNrZWxldG9uLm8KIAotRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbAogRVhUUkFfTERGTEFHUyA6PSAteAogCiAkKE9TX09CSlMpOiBmcHNwLmgKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9NYWtlZmlsZSBiL2FyY2gvbTY4ay9pZnBzcDA2MC9NYWtlZmlsZQppbmRleCAyZmU4NDcyLi40M2I0MzUwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaWZwc3AwNjAvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL01ha2VmaWxlCkBAIC02LDUgKzYsNCBAQAogCiBvYmoteSA6PSBmc2tlbGV0b24ubyBpc2tlbGV0b24ubyBvcy5vCiAKLUVYVFJBX0FGTEFHUyA6PSAtdHJhZGl0aW9uYWwKIEVYVFJBX0xERkxBR1MgOj0gLXgKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL202OGsva2VybmVsL01ha2VmaWxlCmluZGV4IDdhNjJhNzEuLjNhN2Y2MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTYsNSArMTYsMyBAQAogCiBvYmotJChDT05GSUdfUENJKQkrPSBiaW9zMzIubwogb2JqLXkkKENPTkZJR19NTVVfU1VOMykgKz0gZG1hLm8JIyBubywgaXQncyBub3QgYSB0eXBvCi0KLUVYVFJBX0FGTEFHUyA6PSAtdHJhZGl0aW9uYWwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYwppbmRleCBhOWZiODNhLi5lYTFlNDRkIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CkBAIC00MCw2ICs0MSwxMSBAQAogI2luY2x1ZGUgPGFzbS9kdm1hLmg+CiAjZW5kaWYKIAorI2lmICFGUFNUQVRFU0laRSB8fCAhTlJfSVJRUworI3dhcm5pbmcgTm8gQ1BVL3BsYXRmb3JtIHR5cGUgc2VsZWN0ZWQsIHlvdXIga2VybmVsIHdpbGwgbm90IHdvcmshCisjd2FybmluZyBBcmUgeW91IGJ1aWxkaW5nIGFuIGFsbG5vY29uZmlnIGtlcm5lbD8KKyNlbmRpZgorCiB1bnNpZ25lZCBsb25nIG02OGtfbWFjaHR5cGU7CiBFWFBPUlRfU1lNQk9MKG02OGtfbWFjaHR5cGUpOwogdW5zaWduZWQgbG9uZyBtNjhrX2NwdXR5cGU7CkBAIC0xMTYsNiArMTIyLDcgQEAKIGV4dGVybiBpbnQgbXZtZTE2eF9wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICopOwogZXh0ZXJuIGludCBtdm1lMTQ3X3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKik7CiBleHRlcm4gaW50IGhwMzAwX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKik7CitleHRlcm4gaW50IGFwb2xsb19wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICopOwogCiBleHRlcm4gdm9pZCBjb25maWdfYW1pZ2Eodm9pZCk7CiBleHRlcm4gdm9pZCBjb25maWdfYXRhcmkodm9pZCk7CkBAIC0xODMsNiArMTkwLDggQEAKIAkJCQl1bmtub3duID0gbXZtZTE0N19wYXJzZV9ib290aW5mbyhyZWNvcmQpOwogCQkJZWxzZSBpZiAoTUFDSF9JU19IUDMwMCkKIAkJCQl1bmtub3duID0gaHAzMDBfcGFyc2VfYm9vdGluZm8ocmVjb3JkKTsKKwkJCWVsc2UgaWYgKE1BQ0hfSVNfQVBPTExPKQorCQkJCXVua25vd24gPSBhcG9sbG9fcGFyc2VfYm9vdGluZm8ocmVjb3JkKTsKIAkJCWVsc2UKIAkJCQl1bmtub3duID0gMTsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcwppbmRleCA3NTM3Y2M1Li45OWIwNzg0IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcworKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcwpAQCAtMSw2ICsxLDcgQEAKIC8qIGxkIHNjcmlwdCB0byBtYWtlIG02OGsgTGludXgga2VybmVsICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIE9VVFBVVF9GT1JNQVQoImVsZjMyLW02OGsiLCAiZWxmMzItbTY4ayIsICJlbGYzMi1tNjhrIikKIE9VVFBVVF9BUkNIKG02OGspCkBAIC00MSw3ICs0Miw3IEBACiAgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCiAgIC8qIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgaW5pdCAqLwotICAuID0gQUxJR04oNDA5Nik7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KICAgX19pbml0X2JlZ2luID0gLjsKICAgLmluaXQudGV4dCA6IHsKIAlfc2luaXR0ZXh0ID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcwppbmRleCBjZGMzMTNlLi44YTQ5MTllIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzCkBAIC0xLDYgKzEsNyBAQAogLyogbGQgc2NyaXB0IHRvIG1ha2UgbTY4ayBMaW51eCBrZXJuZWwgKi8KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogT1VUUFVUX0ZPUk1BVCgiZWxmMzItbTY4ayIsICJlbGYzMi1tNjhrIiwgImVsZjMyLW02OGsiKQogT1VUUFVUX0FSQ0gobTY4aykKQEAgLTM0LDcgKzM1LDcgQEAKICAgX2VkYXRhID0gLjsKIAogICAvKiB3aWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KLSAgLiA9IEFMSUdOKDgxOTIpOwkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogX19pbml0X2JlZ2luID0gLjsKIAkuaW5pdC50ZXh0IDogewogCQlfc2luaXR0ZXh0ID0gLjsKQEAgLTYxLDEyICs2MiwxMiBAQAogCX0KIAlTRUNVUklUWV9JTklUCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JLiA9IEFMSUdOKDgxOTIpOworCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKIAkuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQogCV9faW5pdHJhbWZzX2VuZCA9IC47CiAjZW5kaWYKLQkuID0gQUxJR04oODE5Mik7CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX19pbml0X2VuZCA9IC47CiAJLmRhdGEuaW5pdC50YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL01ha2VmaWxlIGIvYXJjaC9tNjhrL2xpYi9NYWtlZmlsZQppbmRleCBhMThhZjA5Li5hZjlhYmY4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9saWIvTWFrZWZpbGUKQEAgLTIsNyArMiw1IEBACiAjIE1ha2VmaWxlIGZvciBtNjhrLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgogIwogCi1FWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsCi0KIGxpYi15CTo9IGFzaGxkaTMubyBhc2hyZGkzLm8gbHNocmRpMy5vIG11bGRpMy5vIFwKIAkgICBjaGVja3N1bS5vIHN0cmluZy5vIHVhY2Nlc3MubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9NYWtlZmlsZSBiL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUKaW5kZXggMWQyNjViYS4uZGFlYmQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9NYWtlZmlsZQorKysgYi9hcmNoL202OGsvbWFjL01ha2VmaWxlCkBAIC0yLDUgKzIsNSBAQAogIyBNYWtlZmlsZSBmb3IgTGludXggYXJjaC9tNjhrL21hYyBzb3VyY2UgZGlyZWN0b3J5CiAjCiAKLW9iai15CQk6PSBjb25maWcubyBib290cGFyc2UubyBtYWNpbnRzLm8gaW9wLm8gdmlhLm8gb3NzLm8gcHNjLm8gXAorb2JqLXkJCTo9IGNvbmZpZy5vIG1hY2ludHMubyBpb3AubyB2aWEubyBvc3MubyBwc2MubyBcCiAJCQliYWJvb24ubyBtYWNib2luZy5vIGRlYnVnLm8gbWlzYy5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2JhYm9vbi5jIGIvYXJjaC9tNjhrL21hYy9iYWJvb24uYwppbmRleCA2NzNhMTA4Li5kYWU5Yzk4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL2JhYm9vbi5jCisrKyBiL2FyY2gvbTY4ay9tYWMvYmFib29uLmMKQEAgLTIzLDkgKzIzLDcgQEAKIC8qICNkZWZpbmUgREVCVUdfSVJRUyAqLwogCiBpbnQgYmFib29uX3ByZXNlbnQ7Ci12b2xhdGlsZSBzdHJ1Y3QgYmFib29uICpiYWJvb247Ci0KLWlycXJldHVybl90IGJhYm9vbl9pcnEoaW50LCB2b2lkICopOworc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBiYWJvb24gKmJhYm9vbjsKIAogI2lmIDAKIGV4dGVybiBpbnQgbWFjaWRlX2Fja19pbnRyKHN0cnVjdCBhdGFfY2hhbm5lbCAqKTsKQEAgLTUwLDIwICs0OCwxMCBAQAogfQogCiAvKgotICogUmVnaXN0ZXIgdGhlIEJhYm9vbiBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBvbiBudWJ1cyBzbG90ICRDLgotICovCi0KLXZvaWQgX19pbml0IGJhYm9vbl9yZWdpc3Rlcl9pbnRlcnJ1cHRzKHZvaWQpCi17Ci0JcmVxdWVzdF9pcnEoSVJRX05VQlVTX0MsIGJhYm9vbl9pcnEsIElSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsCi0JCSAgICAiYmFib29uIiwgKHZvaWQgKikgYmFib29uKTsKLX0KLQotLyoKICAqIEJhYm9vbiBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcyB3b3JrcyBhIGxvdCBsaWtlIGEgVklBLgogICovCiAKLWlycXJldHVybl90IGJhYm9vbl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IGJhYm9vbl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCWludCBpcnFfYml0LCBpcnFfbnVtOwogCXVuc2lnbmVkIGNoYXIgZXZlbnRzOwpAQCAtOTUsNiArODMsMTYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKKy8qCisgKiBSZWdpc3RlciB0aGUgQmFib29uIGludGVycnVwdCBkaXNwYXRjaGVyIG9uIG51YnVzIHNsb3QgJEMuCisgKi8KKwordm9pZCBfX2luaXQgYmFib29uX3JlZ2lzdGVyX2ludGVycnVwdHModm9pZCkKK3sKKwlyZXF1ZXN0X2lycShJUlFfTlVCVVNfQywgYmFib29uX2lycSwgSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwKKwkJICAgICJiYWJvb24iLCAodm9pZCAqKSBiYWJvb24pOworfQorCiB2b2lkIGJhYm9vbl9pcnFfZW5hYmxlKGludCBpcnEpIHsKICNpZmRlZiBERUJVR19JUlFVU0UKIAlwcmludGsoImJhYm9vbl9pcnFfZW5hYmxlKCVkKVxuIiwgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvYm9vdHBhcnNlLmMgYi9hcmNoL202OGsvbWFjL2Jvb3RwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmQyMjM2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9tYWMvYm9vdHBhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KLQotLyoKLSAqCUJvb3RlciB2YXJzCi0gKi8KLQotaW50IGJvb3Rob3d0bzsKLWludCBfYm9vdGhvd3RvOwotCi0vKgotICoJQ2FsbGVkIGVhcmx5IHRvIHBhcnNlIHRoZSBlbnZpcm9ubWVudCAocGFzc2VkIHRvIHVzIGZyb20gdGhlIGJvb3RlcikKLSAqCWludG8gYSBib290aW5mbyBzdHJ1Y3QuIFdpbGwgZGllIGFzIHNvb24gYXMgd2UgaGF2ZSBvdXIgb3duIGJvb3RlcgotICovCi0KLSNkZWZpbmUgYXRvbCh4KQlzaW1wbGVfc3RydG91bCh4LE5VTEwsMCkKLQotdm9pZCBwYXJzZV9ib290ZXIoY2hhciAqZW52KQotewotCWNoYXIgKm5hbWU7Ci0JY2hhciAqdmFsdWU7Ci0jaWYgMAotCXdoaWxlKDAgJiYgKmVudikKLSNlbHNlCi0Jd2hpbGUoKmVudikKLSNlbmRpZgotCXsKLQkJbmFtZT1lbnY7Ci0JCXZhbHVlPW5hbWU7Ci0JCXdoaWxlKCp2YWx1ZSE9Jz0nJiYqdmFsdWUpCi0JCQl2YWx1ZSsrOwotCQlpZigqdmFsdWU9PSc9JykKLQkJCSp2YWx1ZSsrPTA7Ci0JCWVudj12YWx1ZTsKLQkJd2hpbGUoKmVudikKLQkJCWVudisrOwotCQllbnYrKzsKLSNpZiAwCi0JCWlmKHN0cmNtcChuYW1lLCJWSURFT19BRERSIik9PTApCi0JCQltYWNfbWNoLnZpZGVvYWRkcj1hdG9sKHZhbHVlKTsKLQkJaWYoc3RyY21wKG5hbWUsIlJPV19CWVRFUyIpPT0wKQotCQkJbWFjX21jaC52aWRlb3Jvdz1hdG9sKHZhbHVlKTsKLQkJaWYoc3RyY21wKG5hbWUsIlNDUkVFTl9ERVBUSCIpPT0wKQotCQkJbWFjX21jaC52aWRlb2RlcHRoPWF0b2wodmFsdWUpOwotCQlpZihzdHJjbXAobmFtZSwiRElNRU5TSU9OUyIpPT0wKQotCQkJbWFjX21jaC5kaW1lbnNpb25zPWF0b2wodmFsdWUpOwotI2VuZGlmCi0JCWlmKHN0cmNtcChuYW1lLCJCT09UVElNRSIpPT0wKQotCQkJbWFjX2JpX2RhdGEuYm9vdHRpbWU9YXRvbCh2YWx1ZSk7Ci0JCWlmKHN0cmNtcChuYW1lLCJHTVRCSUFTIik9PTApCi0JCQltYWNfYmlfZGF0YS5nbXRiaWFzPWF0b2wodmFsdWUpOwotCQlpZihzdHJjbXAobmFtZSwiQk9PVEVSVkVSIik9PTApCi0JCQltYWNfYmlfZGF0YS5ib290dmVyPWF0b2wodmFsdWUpOwotCQlpZihzdHJjbXAobmFtZSwiTUFDT1NfVklERU8iKT09MCkKLQkJCW1hY19iaV9kYXRhLnZpZGVvbG9naWNhbD1hdG9sKHZhbHVlKTsKLQkJaWYoc3RyY21wKG5hbWUsIk1BQ09TX1NDQyIpPT0wKQotCQkJbWFjX2JpX2RhdGEuc2NjYmFzZT1hdG9sKHZhbHVlKTsKLQkJaWYoc3RyY21wKG5hbWUsIk1BQ0hJTkVJRCIpPT0wKQotCQkJbWFjX2JpX2RhdGEuaWQ9YXRvbCh2YWx1ZSk7Ci0JCWlmKHN0cmNtcChuYW1lLCJNRU1TSVpFIik9PTApCi0JCQltYWNfYmlfZGF0YS5tZW1zaXplPWF0b2wodmFsdWUpOwotCQlpZihzdHJjbXAobmFtZSwiU0VSSUFMX01PREVNX0ZMQUdTIik9PTApCi0JCQltYWNfYmlfZGF0YS5zZXJpYWxtZj1hdG9sKHZhbHVlKTsKLQkJaWYoc3RyY21wKG5hbWUsIlNFUklBTF9NT0RFTV9IU0tJQ0xLIik9PTApCi0JCQltYWNfYmlfZGF0YS5zZXJpYWxoc2s9YXRvbCh2YWx1ZSk7Ci0JCWlmKHN0cmNtcChuYW1lLCJTRVJJQUxfTU9ERU1fR1BJQ0xLIik9PTApCi0JCQltYWNfYmlfZGF0YS5zZXJpYWxncGk9YXRvbCh2YWx1ZSk7Ci0JCWlmKHN0cmNtcChuYW1lLCJTRVJJQUxfUFJJTlRfRkxBR1MiKT09MCkKLQkJCW1hY19iaV9kYXRhLnByaW50bWY9YXRvbCh2YWx1ZSk7Ci0JCWlmKHN0cmNtcChuYW1lLCJTRVJJQUxfUFJJTlRfSFNLSUNMSyIpPT0wKQotCQkJbWFjX2JpX2RhdGEucHJpbnRoc2s9YXRvbCh2YWx1ZSk7Ci0JCWlmKHN0cmNtcChuYW1lLCJTRVJJQUxfUFJJTlRfR1BJQ0xLIik9PTApCi0JCQltYWNfYmlfZGF0YS5wcmludGdwaT1hdG9sKHZhbHVlKTsKLQkJaWYoc3RyY21wKG5hbWUsIlBST0NFU1NPUiIpPT0wKQotCQkJbWFjX2JpX2RhdGEuY3B1aWQ9YXRvbCh2YWx1ZSk7Ci0JCWlmKHN0cmNtcChuYW1lLCJST01CQVNFIik9PTApCi0JCQltYWNfYmlfZGF0YS5yb21iYXNlPWF0b2wodmFsdWUpOwotCQlpZihzdHJjbXAobmFtZSwiVElNRURCUkEiKT09MCkKLQkJCW1hY19iaV9kYXRhLnRpbWVkYnJhPWF0b2wodmFsdWUpOwotCQlpZihzdHJjbXAobmFtZSwiQURCREVMQVkiKT09MCkKLQkJCW1hY19iaV9kYXRhLmFkYmRlbGF5PWF0b2wodmFsdWUpOwotCX0KLSNpZiAwCS8qIFhYWDogVE9ETyB3aXRoIG02OGtfbWFjaF8qICovCi0JLyogRmlsbCBpbiB0aGUgYmFzZSBzdHVmZiAqLwotCWJvb3RfaW5mby5tYWNodHlwZT1NQUNIX01BQzsKLQkvKiBSZWFkIHRoaXMgZnJvbSB0aGUgbWFjaW5mbyB3ZSBnb3QgISAqLwotLyoJYm9vdF9pbmZvLmNwdXR5cGU9Q1BVXzY4MDIwfEZQVUJfNjg4ODE7Ki8KLS8qCWJvb3RfaW5mby5tZW1vcnlbMF0uYWRkcj0wOyovCi0vKglib290X2luZm8ubWVtb3J5WzBdLnNpemU9KChtYWNfYmlfZGF0YS5pZD4+NykmMzEpPDwyMDsqLwotCWJvb3RfaW5mby5udW1fbWVtb3J5PTE7CQkvKiBPbiBhIE1hY0lJICovCi0JYm9vdF9pbmZvLnJhbWRpc2tfc2l6ZT0wOwkvKiBGb3Igbm93ICovCi0JKmJvb3RfaW5mby5jb21tYW5kX2xpbmU9MDsKLSNlbmRpZgotIH0KLQotCi12b2lkIHByaW50X2Jvb3RlcihjaGFyICplbnYpCi17Ci0JY2hhciAqbmFtZTsKLQljaGFyICp2YWx1ZTsKLQl3aGlsZSgqZW52KQotCXsKLQkJbmFtZT1lbnY7Ci0JCXZhbHVlPW5hbWU7Ci0JCXdoaWxlKCp2YWx1ZSE9Jz0nJiYqdmFsdWUpCi0JCQl2YWx1ZSsrOwotCQlpZigqdmFsdWU9PSc9JykKLQkJCSp2YWx1ZSsrPTA7Ci0JCWVudj12YWx1ZTsKLQkJd2hpbGUoKmVudikKLQkJCWVudisrOwotCQllbnYrKzsKLQkJcHJpbnRrKCIlcz0lc1xuIiwgbmFtZSx2YWx1ZSk7Ci0JfQotIH0KLQotCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwppbmRleCBhZDNlM2JhLi5jNDVlMTg0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKIC8qIE1hYyBib290aW5mbyBzdHJ1Y3QgKi8KIAogc3RydWN0IG1hY19ib290ZXJfZGF0YSBtYWNfYmlfZGF0YTsKLWludCBtYWNfYmlzaXplID0gc2l6ZW9mIG1hY19iaV9kYXRhOwogCiAvKiBOZXcgbTY4ayBib290aW5mbyBzdHVmZiBhbmQgdmlkZW9iYXNlICovCiAKQEAgLTU1LDEwICs1NCw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgbWVtX2luZm8gbTY4a19yYW1kaXNrOwogCi12b2lkICptYWNfZW52OwkJCQkJLyogTG9hZGVkIGJ5IHRoZSBib290IGFzbSAqLwotCiAvKiBUaGUgcGh5cy4gdmlkZW8gYWRkci4gLSBtaWdodCBiZSBib2d1cyBvbiBzb21lIG1hY2hpbmVzICovCi11bnNpZ25lZCBsb25nIG1hY19vcmlnX3ZpZGVvYWRkcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1hY19vcmlnX3ZpZGVvYWRkcjsKIAogLyogTWFjIHNwZWNpZmljIHRpbWVyIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFjX2dldHRpbWVvZmZzZXQodm9pZCk7CkBAIC03OSw2ICs3Niw4IEBACiBleHRlcm4gdm9pZCBudWJ1c19zd2VlcF92aWRlbyh2b2lkKTsKIAogc3RhdGljIHZvaWQgbWFjX2dldF9tb2RlbChjaGFyICpzdHIpOworc3RhdGljIHZvaWQgbWFjX2lkZW50aWZ5KHZvaWQpOworc3RhdGljIHZvaWQgbWFjX3JlcG9ydF9oYXJkd2FyZSh2b2lkKTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1hY19zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgdmVjdG9yKQogewpAQCAtNzY1LDcgKzc2NCw3IEBACiAJfQogfTsKIAotdm9pZCBfX2luaXQgbWFjX2lkZW50aWZ5KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbWFjX2lkZW50aWZ5KHZvaWQpCiB7CiAJc3RydWN0IG1hY19tb2RlbCAqbTsKIApAQCAtODIxLDcgKzgyMCw3IEBACiAJYmFib29uX2luaXQoKTsKIH0KIAotdm9pZCBfX2luaXQgbWFjX3JlcG9ydF9oYXJkd2FyZSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG1hY19yZXBvcnRfaGFyZHdhcmUodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICJBcHBsZSBNYWNpbnRvc2ggJXNcbiIsIG1hY2ludG9zaF9jb25maWctPm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jIGIvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jCmluZGV4IGU4YTU3MTMuLjIxNjU3NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvZGVidWcuYworKysgYi9hcmNoL202OGsvbWFjL2RlYnVnLmMKQEAgLTUxLDYgKzUxLDggQEAKIHN0YXRpYyBpbnQgcGVuZywgbGluZTsKICNlbmRpZgogCisjaWYgMAorCiB2b2lkIG1hY19kZWJ1Z2dpbmdfc2hvcnQoaW50IHBvcywgc2hvcnQgbnVtKQogewogI2lmZGVmIERFQlVHX1NDUkVFTgpAQCAtMTI1LDYgKzEyNyw4IEBACiAjZW5kaWYKIH0KIAorI2VuZGlmICAvKiAgMCAgKi8KKwogI2lmZGVmIERFQlVHX1NFUklBTAogLyoKICAqIFRPRE86IHNlcmlhbCBkZWJ1ZyBjb2RlCkBAIC0xNDIsMTIgKzE0Niw2IEBACiAKICMgZGVmaW5lIHNjYyAoKigodm9sYXRpbGUgc3RydWN0IG1hY19TQ0MqKW1hY19iaV9kYXRhLnNjY2Jhc2UpKQogCi0vKiBGbGFnIHRoYXQgc2VyaWFsIHBvcnQgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhbmQgdXNlZCAqLwotaW50IG1hY19TQ0NfaW5pdF9kb25lOwotLyogQ2FuIGJlIHNldCBzb21ld2hlcmUsIGlmIGEgU0NDIG1hc3RlciByZXNldCBoYXMgYWxyZWFkeSBiZSBkb25lIGFuZCBzaG91bGQKLSAqIG5vdCBiZSByZXBlYXRlZDsgdXNlZCBieSBrZ2RiICovCi1pbnQgbWFjX1NDQ19yZXNldF9kb25lOwotCiBzdGF0aWMgaW50IHNjY19wb3J0ID0gLTE7CiAKIHN0YXRpYyBzdHJ1Y3QgY29uc29sZSBtYWNfY29uc29sZV9kcml2ZXIgPSB7CkBAIC0xNzEsOCArMTY5LDggQEAKICAqIHRoaXMgZHJpdmVyIGlmIE1hYy4KICAqLwogCi12b2lkIG1hY19kZWJ1Z19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBtYWNfZGVidWdfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNvdW50KQogewogCW1hY19zZXJpYWxfcHJpbnQoc3RyKTsKIH0KQEAgLTIwOSw4ICsyMDcsOCBAQAogCXNjYy5jaGFfYV9kYXRhID0gYzsKIH0KIAotdm9pZCBtYWNfc2NjYl9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAotCQkJICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIG1hY19zY2NiX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCisJCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQogewogCXdoaWxlIChjb3VudC0tKSB7CiAJCWlmICgqc3RyID09ICdcbicpCkBAIC0yMTksOCArMjE3LDggQEAKIAl9CiB9CiAKLXZvaWQgbWFjX3NjY2FfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKLQkJCSAgICB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBtYWNfc2NjYV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAorCQkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkgewogCQlpZiAoKnN0ciA9PSAnXG4nKQpAQCAtMjY1LDE0ICsyNjMsOCBAQAogCQkgICAgYmFycmllcigpOwkJCQlcCiAJfSB3aGlsZSgwKQogCi0jaWZuZGVmIENPTkZJR19TRVJJQUxfQ09OU09MRQogc3RhdGljIHZvaWQgX19pbml0IG1hY19pbml0X3NjY19wb3J0KGludCBjZmxhZywgaW50IHBvcnQpCi0jZWxzZQotdm9pZCBtYWNfaW5pdF9zY2NfcG9ydChpbnQgY2ZsYWcsIGludCBwb3J0KQotI2VuZGlmCiB7Ci0JZXh0ZXJuIGludCBtYWNfU0NDX3Jlc2V0X2RvbmU7Ci0KIAkvKgogCSAqIGJhdWQgcmF0ZXM6IDEyMDAsIDE4MDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5LjJrLCAzOC40aywgNTcuNmssIDExNS4yawogCSAqLwpAQCAtMzQwLDIyICszMzIsOSBAQAogCQlTQ0NBX1dSSVRFKDMsIHJlZzMgfCAxKTsKIAkJU0NDQV9XUklURSg1LCByZWc1IHwgOCk7CiAJfQotCi0JbWFjX1NDQ19yZXNldF9kb25lID0gMTsKLQltYWNfU0NDX2luaXRfZG9uZSA9IDE7CiB9CiAjZW5kaWYgLyogREVCVUdfU0VSSUFMICovCiAKLXZvaWQgbWFjX2luaXRfc2NjYV9wb3J0KGludCBjZmxhZykKLXsKLQltYWNfaW5pdF9zY2NfcG9ydChjZmxhZywgMCk7Ci19Ci0KLXZvaWQgbWFjX2luaXRfc2NjYl9wb3J0KGludCBjZmxhZykKLXsKLQltYWNfaW5pdF9zY2NfcG9ydChjZmxhZywgMSk7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IG1hY19kZWJ1Z19zZXR1cChjaGFyICphcmcpCiB7CiAJaWYgKCFNQUNIX0lTX01BQykKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvb3NzLmMgYi9hcmNoL202OGsvbWFjL29zcy5jCmluZGV4IDNjOTQzZDIuLjQzZDgzZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvb3NzLmMKKysrIGIvYXJjaC9tNjhrL21hYy9vc3MuYwpAQCAtMzAsOCArMzAsOCBAQAogaW50IG9zc19wcmVzZW50Owogdm9sYXRpbGUgc3RydWN0IG1hY19vc3MgKm9zczsKIAotaXJxcmV0dXJuX3Qgb3NzX2lycShpbnQsIHZvaWQgKik7Ci1pcnFyZXR1cm5fdCBvc3NfbnVidXNfaXJxKGludCwgdm9pZCAqKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBvc3NfaXJxKGludCwgdm9pZCAqKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBvc3NfbnVidXNfaXJxKGludCwgdm9pZCAqKTsKIAogZXh0ZXJuIGlycXJldHVybl90IHZpYTFfaXJxKGludCwgdm9pZCAqKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBtYWNfc2NjX2Rpc3BhdGNoKGludCwgdm9pZCAqKTsKQEAgLTkyLDcgKzkyLDcgQEAKICAqIGFuZCBTQ1NJOyBldmVyeXRoaW5nIGVsc2UgaXMgcm91dGVkIHRvIGl0cyBvd24gYXV0b3ZlY3RvciBJUlEuCiAgKi8KIAotaXJxcmV0dXJuX3Qgb3NzX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3Qgb3NzX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJaW50IGV2ZW50czsKIApAQCAtMTI2LDcgKzEyNiw3IEBACiAgKiBVbmxpa2UgdGhlIFZJQS9SQlYgdGhpcyBpcyBvbiBpdHMgb3duIGF1dG92ZWN0b3IgaW50ZXJydXB0IGxldmVsLgogICovCiAKLWlycXJldHVybl90IG9zc19udWJ1c19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IG9zc19udWJ1c19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCWludCBldmVudHMsIGlycV9iaXQsIGk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvcHNjLmMgYi9hcmNoL202OGsvbWFjL3BzYy5jCmluZGV4IGQ2NmY3MjMuLmY4NGE0ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvcHNjLmMKKysrIGIvYXJjaC9tNjhrL21hYy9wc2MuYwpAQCAtMzYsNyArMzYsNyBAQAogICogRGVidWdnaW5nIGR1bXAsIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMgdG8gc2VlIHdoYXQncyBnb2luZyBvbi4KICAqLwogCi12b2lkIHBzY19kZWJ1Z19kdW1wKHZvaWQpCitzdGF0aWMgdm9pZCBwc2NfZGVidWdfZHVtcCh2b2lkKQogewogCWludAlpOwogCkBAIC01NSw3ICs1NSw3IEBACiAgKiBleHBhbmRlZCB0byBjb3ZlciB3aGF0IEkgdGhpbmsgYXJlIHRoZSBvdGhlciA3IGNoYW5uZWxzLgogICovCiAKLXZvaWQgcHNjX2RtYV9kaWVfZGllX2RpZSh2b2lkKQorc3RhdGljIHZvaWQgcHNjX2RtYV9kaWVfZGllX2RpZSh2b2lkKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL3ZpYS5jIGIvYXJjaC9tNjhrL21hYy92aWEuYwppbmRleCBmYTQ4NWRmLi5mM2IyN2QwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL3ZpYS5jCisrKyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIGludCByYnZfcHJlc2VudDsKIGludCB2aWFfYWx0X21hcHBpbmc7CiBFWFBPUlRfU1lNQk9MKHZpYV9hbHRfbWFwcGluZyk7Ci1fX3U4IHJidl9jbGVhcjsKK3N0YXRpYyBfX3U4IHJidl9jbGVhcjsKIAogLyoKICAqIEdsb2JhbHMgZm9yIGFjY2Vzc2luZyB0aGUgVklBIGNoaXAgcmVnaXN0ZXJzIHdpdGhvdXQgaGF2aW5nIHRvCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvTWFrZWZpbGUgYi9hcmNoL202OGsvbWF0aC1lbXUvTWFrZWZpbGUKaW5kZXggNTM5OTQwNC4uYTA5MzViZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hdGgtZW11L01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9NYWtlZmlsZQpAQCAtMiw4ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCiAKLUVYVFJBX0FGTEFHUyA6PSAtdHJhZGl0aW9uYWwKLQogI0VYVFJBX0FGTEFHUyArPSAtREZQVV9FTVVfREVCVUcKICNFWFRSQV9DRkxBR1MgKz0gLURGUFVfRU1VX0RFQlVHCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKaW5kZXggMzBkMzRmMi4uMjI2Nzk1YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKKysrIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKQEAgLTI4NSw3ICsyODUsNiBAQAogCSAqIHRvIGEgY291cGxlIG9mIGFsbG9jYXRlZCBwYWdlcwogCSAqLwogCWVtcHR5X3plcm9fcGFnZSA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQltZW1zZXQoZW1wdHlfemVyb19wYWdlLCAwLCBQQUdFX1NJWkUpOwogCiAJLyoKIAkgKiBTZXQgdXAgU0ZDL0RGQyByZWdpc3RlcnMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9zdW4zbW11LmMgYi9hcmNoL202OGsvbW0vc3VuM21tdS5jCmluZGV4IDZhNjUxM2EuLmVkY2VlZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tbS9zdW4zbW11LmMKKysrIGIvYXJjaC9tNjhrL21tL3N1bjNtbXUuYwpAQCAtNTMsNyArNTMsNiBAQAogCXdwX3dvcmtzX29rID0gMDsKICNlbmRpZgogCWVtcHR5X3plcm9fcGFnZSA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQltZW1zZXQoZW1wdHlfemVyb19wYWdlLCAwLCBQQUdFX1NJWkUpOwogCiAJYWRkcmVzcyA9IFBBR0VfT0ZGU0VUOwogCXBnX2RpciA9IHN3YXBwZXJfcGdfZGlyOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3E0MC9jb25maWcuYyBiL2FyY2gvbTY4ay9xNDAvY29uZmlnLmMKaW5kZXggNDc2ZTE4ZS4uYmU5ZGUyZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3E0MC9jb25maWcuYworKysgYi9hcmNoL202OGsvcTQwL2NvbmZpZy5jCkBAIC00MSwxNCArNDEsMTIgQEAKIHN0YXRpYyBpbnQgIHE0MF9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpOwogZXh0ZXJuIHZvaWQgcTQwX3NjaGVkX2luaXQoaXJxX2hhbmRsZXJfdCBoYW5kbGVyKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcTQwX2dldHRpbWVvZmZzZXQodm9pZCk7Ci1leHRlcm4gaW50IHE0MF9od2NsayhpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgcTQwX2dldF9zcyh2b2lkKTsKLWV4dGVybiBpbnQgcTQwX3NldF9jbG9ja19tbXNzKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcTQwX2dldHRpbWVvZmZzZXQodm9pZCk7CitzdGF0aWMgaW50IHE0MF9od2NsayhpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcTQwX2dldF9zcyh2b2lkKTsKK3N0YXRpYyBpbnQgcTQwX3NldF9jbG9ja19tbXNzKHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIGludCBxNDBfZ2V0X3J0Y19wbGwoc3RydWN0IHJ0Y19wbGxfaW5mbyAqcGxsKTsKIHN0YXRpYyBpbnQgcTQwX3NldF9ydGNfcGxsKHN0cnVjdCBydGNfcGxsX2luZm8gKnBsbCk7Ci1leHRlcm4gdm9pZCBxNDBfcmVzZXQodm9pZCk7Ci12b2lkIHE0MF9oYWx0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcTQwX3dhaXRidXQodm9pZCk7CiB2b2lkIHE0MF9zZXRfdmVjdG9ycyh2b2lkKTsKIApAQCAtMTI3LDcgKzEyNSw3IEBACiB9CiAjZW5kaWYKIAotdm9pZCBxNDBfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIHE0MF9yZXNldCh2b2lkKQogewogICAgICAgICBoYWx0ZWQgPSAxOwogICAgICAgICBwcmludGsoIlxuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iCkBAIC0xMzcsNyArMTM1LDggQEAKIAl3aGlsZSAoMSkKIAkJOwogfQotdm9pZCBxNDBfaGFsdCh2b2lkKQorCitzdGF0aWMgdm9pZCBxNDBfaGFsdCh2b2lkKQogewogICAgICAgICBoYWx0ZWQgPSAxOwogICAgICAgICBwcmludGsoIlxuXG4qKioqKioqKioqKioqKioqKioqXG4iCkBAIC0xNjUsNyArMTY0LDggQEAKIHsKIAkweDNmOCwweDJmOCwweDNlOCwweDJlOCwwCiB9Owotdm9pZCBxNDBfZGlzYWJsZV9pcnFzKHZvaWQpCisKK3N0YXRpYyB2b2lkIHE0MF9kaXNhYmxlX2lycXModm9pZCkKIHsKIAl1bnNpZ25lZCBpLCBqOwogCkBAIC0yMjcsNyArMjI3LDcgQEAKIH0KIAogCi11bnNpZ25lZCBsb25nIHE0MF9nZXR0aW1lb2Zmc2V0KHZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBxNDBfZ2V0dGltZW9mZnNldCh2b2lkKQogewogCXJldHVybiA1MDAwICogKHFsX3RpY2tzICE9IDApOwogfQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgKiB9OwogICovCiAKLWludCBxNDBfaHdjbGsoaW50IG9wLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCitzdGF0aWMgaW50IHE0MF9od2NsayhpbnQgb3AsIHN0cnVjdCBydGNfdGltZSAqdCkKIHsKIAlpZiAob3ApIHsKIAkJLyogV3JpdGUuLi4uICovCkBAIC0yODUsNyArMjg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50IHE0MF9nZXRfc3Modm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcTQwX2dldF9zcyh2b2lkKQogewogCXJldHVybiBiY2QyYmluKFE0MF9SVENfU0VDUyk7CiB9CkBAIC0yOTUsNyArMjk1LDcgQEAKICAqIGNsb2NrIGlzIG91dCBieSA+IDMwIG1pbnV0ZXMuICBMb2dpYyBsaWZ0ZWQgZnJvbSBhdGFyaSBjb2RlLgogICovCiAKLWludCBxNDBfc2V0X2Nsb2NrX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQorc3RhdGljIGludCBxNDBfc2V0X2Nsb2NrX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQogewogCWludCByZXR2YWwgPSAwOwogCXNob3J0IHJlYWxfc2Vjb25kcyA9IG5vd3RpbWUgJSA2MCwgcmVhbF9taW51dGVzID0gKG5vd3RpbWUgLyA2MCkgJSA2MDsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL01ha2VmaWxlIGIvYXJjaC9tNjhrL3N1bjMvTWFrZWZpbGUKaW5kZXggYmUxYTg0Ny4uMzhiYTBlMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjMvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL3N1bjMvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvc3VuMyBzb3VyY2UgZGlyZWN0b3J5CiAjCiAKLW9iai15CTo9IHN1bjNpbnRzLm8gc3VuM2R2bWEubyBzYnVzLm8gaWRwcm9tLm8KK29iai15CTo9IHN1bjNpbnRzLm8gc3VuM2R2bWEubyBpZHByb20ubwogCiBvYmotJChDT05GSUdfU1VOMykgKz0gY29uZmlnLm8gbW11X2VtdS5vIGxlZHMubyBkdm1hLm8gaW50ZXJzaWwubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMgYi9hcmNoL202OGsvc3VuMy9jb25maWcuYwppbmRleCBjMGZiZDI3Li43MzIwODdkMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKQEAgLTM2LDcgKzM2LDcgQEAKIGNoYXIgc3VuM19yZXNlcnZlZF9wbWVnW1NVTjNfUE1FR1NfTlVNXTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuM19nZXR0aW1lb2Zmc2V0KHZvaWQpOwotZXh0ZXJuIHZvaWQgc3VuM19zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgaGFuZGxlcik7CitzdGF0aWMgdm9pZCBzdW4zX3NjaGVkX2luaXQoaXJxX2hhbmRsZXJfdCBoYW5kbGVyKTsKIGV4dGVybiB2b2lkIHN1bjNfZ2V0X21vZGVsIChjaGFyKiBtb2RlbCk7CiBleHRlcm4gdm9pZCBpZHByb21faW5pdCAodm9pZCk7CiBleHRlcm4gaW50IHN1bjNfaHdjbGsoaW50IHNldCwgc3RydWN0IHJ0Y190aW1lICp0KTsKQEAgLTExNCw3ICsxMTQsOCBAQAogCiAvKiBzdW4zIGJvb3RtZW0gYWxsb2NhdGlvbiAqLwogCi12b2lkIF9faW5pdCBzdW4zX2Jvb3RtZW1fYWxsb2ModW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzdW4zX2Jvb3RtZW1fYWxsb2ModW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBtZW1vcnlfZW5kKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFnZTsKIApAQCAtMTY0LDcgKzE2NSw3IEBACiAJc3VuM19ib290bWVtX2FsbG9jKG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZCk7CiB9CiAKLXZvaWQgX19pbml0IHN1bjNfc2NoZWRfaW5pdChpcnFfaGFuZGxlcl90IHRpbWVyX3JvdXRpbmUpCitzdGF0aWMgdm9pZCBfX2luaXQgc3VuM19zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgdGltZXJfcm91dGluZSkKIHsKIAlzdW4zX2Rpc2FibGVfaW50ZXJydXB0cygpOwogICAgICAgICBpbnRlcnNpbF9jbG9jay0+Y21kX3JlZz0oSU5URVJTSUxfUlVOfElOVEVSU0lMX0lOVF9ESVNBQkxFfElOVEVSU0lMXzI0SF9NT0RFKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2R2bWEuYyBiL2FyY2gvbTY4ay9zdW4zL2R2bWEuYwppbmRleCBkMmIzMDkzLi5kNTIyZWFhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuMy9kdm1hLmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvZHZtYS5jCkBAIC0xOSw3ICsxOSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHB0ZWxpc3RbMTIwXTsKIAotaW5saW5lIHVuc2lnbmVkIGxvbmcgZHZtYV9wYWdlKHVuc2lnbmVkIGxvbmcga2FkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkdm1hX3BhZ2UodW5zaWduZWQgbG9uZyBrYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHB0ZTsKIAl1bnNpZ25lZCBsb25nIGo7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9pZHByb20uYyBiL2FyY2gvbTY4ay9zdW4zL2lkcHJvbS5jCmluZGV4IGRjYTZhYjYuLmM4NmFjMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL2lkcHJvbS5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL2lkcHJvbS5jCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBpZHByb20uYyx2IDEuMjIgMTk5Ni8xMS8xMyAwNTowOToyNSBkYXZlbSBFeHAgJAorLyoKICAqIGlkcHJvbS5jOiBSb3V0aW5lcyB0byBsb2FkIHRoZSBpZHByb20gaW50byBrZXJuZWwgYWRkcmVzc2VzIGFuZAogICogICAgICAgICAgIGludGVycHJldCB0aGUgZGF0YSBjb250YWluZWQgd2l0aGluLgogICoKQEAgLTI1LDcgKzI1LDcgQEAKICAqIG9mIHRoZSBTcGFyYyBDUFUgYW5kIGhhdmUgYSBtZWFuaW5nZnVsIElEUFJPTSBtYWNodHlwZSB2YWx1ZSB0aGF0IHdlCiAgKiBrbm93IGFib3V0LiAgU2VlIGFzbS1zcGFyYy9tYWNoaW5lcy5oIGZvciBlbXBpcmljYWwgY29uc3RhbnRzLgogICovCi1zdHJ1Y3QgU3VuX01hY2hpbmVfTW9kZWxzIFN1bl9NYWNoaW5lc1tOVU1fU1VOX01BQ0hJTkVTXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgU3VuX01hY2hpbmVfTW9kZWxzIFN1bl9NYWNoaW5lc1tOVU1fU1VOX01BQ0hJTkVTXSA9IHsKIC8qIEZpcnN0LCBTdW4zJ3MgKi8KICAgICB7IC5uYW1lID0gIlN1biAzLzE2MCBTZXJpZXMiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VOMyB8IFNNXzNfMTYwKSB9LAogICAgIHsgLm5hbWUgPSAiU3VuIDMvNTAiLAkJLmlkX21hY2h0eXBlID0gKFNNX1NVTjMgfCBTTV8zXzUwKSB9LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvbW11X2VtdS5jIGIvYXJjaC9tNjhrL3N1bjMvbW11X2VtdS5jCmluZGV4IGZiMGY2YTIuLjYwZjlkNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL21tdV9lbXUuYworKysgYi9hcmNoL202OGsvc3VuMy9tbXVfZW11LmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogLyogcG9pbnRlcnMgdG8gdGhlIG1tIHN0cnVjdHMgZm9yIGVhY2ggdGFzayBpbiBlYWNoCiAgICBjb250ZXh0LiAweGZmZmZmZmZmIGlzIGEgbWFya2VyIGZvciBrZXJuZWwgY29udGV4dCAqLwotc3RydWN0IG1tX3N0cnVjdCAqY3R4X2FsbG9jW0NPTlRFWFRTX05VTV0gPSB7CitzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqY3R4X2FsbG9jW0NPTlRFWFRTX05VTV0gPSB7CiAgICAgWzBdID0gKHN0cnVjdCBtbV9zdHJ1Y3QgKikweGZmZmZmZmZmCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9wcm9tL01ha2VmaWxlIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9NYWtlZmlsZQppbmRleCA2ZTQ4YWUyLi5kYTdlYWMwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuMy9wcm9tL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vTWFrZWZpbGUKQEAgLTEsNCArMSwzIEBACi0jICRJZDogTWFrZWZpbGUsdiAxLjUgMTk5NS8xMS8yNSAwMDo1OTo0OCBkYXZlbSBFeHAgJAogIyBNYWtlZmlsZSBmb3IgdGhlIFN1biBCb290IFBST00gaW50ZXJmYWNlIGxpYnJhcnkgdW5kZXIKICMgTGludXguCiAjCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9wcm9tL2NvbnNvbGUuYyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vY29uc29sZS5jCmluZGV4IDUyYzE0MjcuLjJiY2I2ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL3Byb20vY29uc29sZS5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vY29uc29sZS5jCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBjb25zb2xlLmMsdiAxLjEwIDE5OTYvMTIvMTggMDY6NDY6NTQgdHJpZGdlIEV4cCAkCisvKgogICogY29uc29sZS5jOiBSb3V0aW5lcyB0aGF0IGRlYWwgd2l0aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSU8KICAqICAgICAgICAgICAgdG8vZnJvbSB0aGUgY3VycmVudCBjb25zb2xlIGRldmljZSB1c2luZyB0aGUgUFJPTS4KICAqCkBAIC0xMDQsOCArMTA0LDYgQEAKIAkJCQlyZXR1cm4gUFJPTURFVl9JVFRZQjsKIAkJfQogCQlyZXR1cm4gUFJPTURFVl9JX1VOSzsKLQljYXNlIFBST01fQVAxMDAwOgotCQlyZXR1cm4gUFJPTURFVl9JX1VOSzsKIAl9OwogfQogI2VuZGlmCkBAIC0xNjYsOCArMTY0LDYgQEAKIAkJCX07CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBQUk9NX0FQMTAwMDoKLQkJcmV0dXJuIFBST01ERVZfSV9VTks7CiAJfTsKIAlyZXR1cm4gUFJPTURFVl9PX1VOSzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3Byb20vaW5pdC5jIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9pbml0LmMKaW5kZXggMjAyYWRmYy4uZDhlNjM0OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjMvcHJvbS9pbml0LmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9pbml0LmMKQEAgLTEsNCArMSw0IEBACi0vKiAkSWQ6IGluaXQuYyx2IDEuOSAxOTk2LzEyLzE4IDA2OjQ2OjU1IHRyaWRnZSBFeHAgJAorLyoKICAqIGluaXQuYzogIEluaXRpYWxpemUgaW50ZXJuYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIFBST00KICAqICAgICAgICAgIGxpYnJhcnkgZnVuY3Rpb25zLgogICoKQEAgLTMxLDExICszMSw2IEBACiAKIHZvaWQgX19pbml0IHByb21faW5pdChzdHJ1Y3QgbGludXhfcm9tdmVjICpycCkKIHsKLSNpZmRlZiBDT05GSUdfQVAxMDAwCi0JZXh0ZXJuIHN0cnVjdCBsaW51eF9yb212ZWMgKmFwX3Byb21faW5pdCh2b2lkKTsKLQlycCA9IGFwX3Byb21faW5pdCgpOwotI2VuZGlmCi0KIAlyb212ZWMgPSBycDsKICNpZm5kZWYgQ09ORklHX1NVTjMKIAlzd2l0Y2gocm9tdmVjLT5wdl9yb212ZXJzKSB7CkBAIC01MywxMCArNDgsNiBAQAogCQlwcm9tX3ByaW50ZigiUFJPTUxJQjogU3VuIElFRUUgUHJvbSBub3Qgc3VwcG9ydGVkIHlldFxuIik7CiAJCXByb21faGFsdCgpOwogCQlicmVhazsKLQljYXNlIDQyOiAvKiB3aHkgbm90IDotKSAqLwotCQlwcm9tX3ZlcnMgPSBQUk9NX0FQMTAwMDsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQlwcm9tX3ByaW50ZigiUFJPTUxJQjogQmFkIFBST00gdmVyc2lvbiAlZFxuIiwKIAkJCSAgICByb212ZWMtPnB2X3JvbXZlcnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvcHJvbS9taXNjLmMgYi9hcmNoL202OGsvc3VuMy9wcm9tL21pc2MuYwppbmRleCBiODg3MTZmLi4zZDYwZTEzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuMy9wcm9tL21pc2MuYworKysgYi9hcmNoL202OGsvc3VuMy9wcm9tL21pc2MuYwpAQCAtMSw0ICsxLDQgQEAKLS8qICRJZDogbWlzYy5jLHYgMS4xNSAxOTk3LzA1LzE0IDIwOjQ1OjAwIGRhdmVtIEV4cCAkCisvKgogICogbWlzYy5jOiAgTWlzY2VsbGFuZW91cyBwcm9tIGZ1bmN0aW9ucyB0aGF0IGRvbid0IGJlbG9uZwogICogICAgICAgICAgYW55d2hlcmUgZWxzZS4KICAqCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9wcm9tL3ByaW50Zi5jIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9wcmludGYuYwppbmRleCBlN2JmZGUzLi5kZjg1MDE4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuMy9wcm9tL3ByaW50Zi5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vcHJpbnRmLmMKQEAgLTEsNCArMSw0IEBACi0vKiAkSWQ6IHByaW50Zi5jLHYgMS41IDE5OTYvMDQvMDQgMTY6MzE6MDcgdHJpZGdlIEV4cCAkCisvKgogICogcHJpbnRmLmM6ICBJbnRlcm5hbCBwcm9tIGxpYnJhcnkgcHJpbnRmIGZhY2lsaXR5LgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCkBAIC0zNywxMCArMzcsNiBAQAogCiAJYnB0ciA9IHBwYnVmOwogCi0jaWZkZWYgQ09ORklHX0FQMTAwMAotICAgICAgICBhcF93cml0ZSgxLGJwdHIsc3RybGVuKGJwdHIpKTsKLSNlbHNlCi0KICNpZmRlZiBDT05GSUdfS0dEQgogCWlmIChrZ2RiX2luaXRpYWxpemVkKSB7CiAJCXByaW50aygia2dkYl9pbml0aWFsaXplZCA9ICVkXG4iLCBrZ2RiX2luaXRpYWxpemVkKTsKQEAgLTU0LDcgKzUwLDYgQEAKIAkJcHJvbV9wdXRjaGFyKGNoKTsKIAl9CiAjZW5kaWYKLSNlbmRpZgogCXZhX2VuZChhcmdzKTsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9zYnVzLmMgYi9hcmNoL202OGsvc3VuMy9zYnVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYmRiZmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL3N1bjMvc2J1cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoKLSAqIFNCdXMgaGVscGVyIGZ1bmN0aW9ucwotICoKLSAqIFN1bjMgZG9uJ3QgaGF2ZSBhIHNidXMsIGJ1dCBtYW55IG9mIHRoZSB1c2VkIGRldmljZXMgYXJlIGFsc28KLSAqIHVzZWQgb24gU3BhcmMgbWFjaGluZXMgd2l0aCBzYnVzLiBUbyBhdm9pZCBoYXZpbmcgYSBsb3Qgb2YKLSAqIGR1cGxpY2F0ZSBjb2RlLCB3ZSBwcm92aWRlIG5lY2Vzc2FyeSBnbHVlIHN0dWZmIHRvIG1ha2UgdXNpbmcKLSAqIG9mIHRoZSBzYnVzIGRyaXZlciBjb2RlIHBvc3NpYmxlLgotICoKLSAqIChDKSAxOTk5IFRob21hcyBCb2dlbmRvZXJmZXIgKHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGUpCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLWludCBfX2luaXQgc2J1c19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgKnNwYXJjX2FsbG9jX2lvICh1MzIgYWRkcmVzcywgdm9pZCAqdmlydHVhbCwgaW50IGxlbiwgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICB1MzIgYnVzX3R5cGUsIGludCByZG9ubHkpCi17Ci0JcmV0dXJuICh2b2lkICopYWRkcmVzczsKLX0KLQotc3Vic3lzX2luaXRjYWxsKHNidXNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9zdW4zZHZtYS5jIGIvYXJjaC9tNjhrL3N1bjMvc3VuM2R2bWEuYwppbmRleCA4NzA5Njc3Li5mOTI3N2U4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuMy9zdW4zZHZtYS5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMKQEAgLTI5LDcgKzI5LDcgQEAKIGV4dGVybiB2b2lkIHN1bjNfZHZtYV9pbml0KHZvaWQpOwogI2VuZGlmCiAKLXVuc2lnbmVkIGxvbmcgaW9tbXVfdXNlW0lPTU1VX1RPVEFMX0VOVFJJRVNdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW9tbXVfdXNlW0lPTU1VX1RPVEFMX0VOVFJJRVNdOwogCiAjZGVmaW5lIGR2bWFfaW5kZXgoYmFkZHIpICgoYmFkZHIgLSBEVk1BX1NUQVJUKSA+PiBEVk1BX1BBR0VfU0hJRlQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3N1bjNpbnRzLmMgYi9hcmNoL202OGsvc3VuMy9zdW4zaW50cy5jCmluZGV4IGNmOTM0ODEuLjczNjRjZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL3N1bjNpbnRzLmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvc3VuM2ludHMuYwpAQCAtMzAsNyArMzAsNyBAQAogCXN1bjNfZW5hYmxlX2lycSgwKTsKIH0KIAotaW50IGxlZF9wYXR0ZXJuWzhdID0geworc3RhdGljIGludCBsZWRfcGF0dGVybls4XSA9IHsKICAgICAgICB+KDB4ODApLCB+KDB4MDEpLAogICAgICAgIH4oMHg0MCksIH4oMHgwMiksCiAgICAgICAgfigweDIwKSwgfigweDA0KSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggZDIxZGY1Zi4uYjljNzU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTMzMCw2ICszMzAsNyBAQAogCXNlbGVjdCBTR0lfSEFTX0RTMTI4NgogCXNlbGVjdCBTR0lfSEFTX0k4MDQyCiAJc2VsZWN0IFNHSV9IQVNfSU5EWURPRworCXNlbGVjdCBTR0lfSEFTX0hBTDIKIAlzZWxlY3QgU0dJX0hBU19TRUVRCiAJc2VsZWN0IFNHSV9IQVNfV0Q5MwogCXNlbGVjdCBTR0lfSEFTX1pJTE9HCkBAIC0zODYsNyArMzg3LDYgQEAKIAlzZWxlY3QgU0dJX0hBU19JODA0MgogCXNlbGVjdCBTR0lfSEFTX0lORFlET0cKIAlzZWxlY3QgU0dJX0hBU19IQUwyCi0Jc2VsZWN0IFNHSV9IQVNfSEFMMgogCXNlbGVjdCBTR0lfSEFTX1NFRVEKIAlzZWxlY3QgU0dJX0hBU19XRDkzCiAJc2VsZWN0IFNHSV9IQVNfWklMT0cKQEAgLTU1OCw2ICs1NTgsMjQgQEAKIGNvbmZpZyBNQUNIX1RYNDlYWAogCWJvb2wgIlRvc2hpYmEgVFg0OSBzZXJpZXMgYmFzZWQgbWFjaGluZXMiCiAKK2NvbmZpZyBNSUtST1RJS19SQjUzMgorCWJvb2wgIk1pa3JvdGlrIFJCNTMyIGJvYXJkcyIKKwlzZWxlY3QgQ0VWVF9SNEsKKwlzZWxlY3QgQ1NSQ19SNEsKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCXNlbGVjdCBIV19IQVNfUENJCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1dBUF9JT19TUEFDRQorCXNlbGVjdCBCT09UX1JBVworCXNlbGVjdCBHRU5FUklDX0dQSU8KKwloZWxwCisJICBTdXBwb3J0IHRoZSBNaWtyb3Rpayh0bSkgUm91dGVyQm9hcmQgNTMyIHNlcmllcywKKwkgIGJhc2VkIG9uIHRoZSBJRFQgUkMzMjQzNCBTb0MuCisKIGNvbmZpZyBXUl9QUE1DCiAJYm9vbCAiV2luZCBSaXZlciBQUE1DIGJvYXJkIgogCXNlbGVjdCBDRVZUX1I0SwpAQCAtODk5LDcgKzkxNyw3IEBACiAKIGNvbmZpZyBNSVBTX0wxX0NBQ0hFX1NISUZUCiAJaW50Ci0JZGVmYXVsdCAiNCIgaWYgTUFDSF9ERUNTVEFUSU9OCisJZGVmYXVsdCAiNCIgaWYgTUFDSF9ERUNTVEFUSU9OIHx8IE1JS1JPVElLX1JCNTMyCiAJZGVmYXVsdCAiNyIgaWYgU0dJX0lQMjIgfHwgU0dJX0lQMjcgfHwgU0dJX0lQMjggfHwgU05JX1JNCiAJZGVmYXVsdCAiNCIgaWYgUE1DX01TUDQyMDBfRVZBTAogCWRlZmF1bHQgIjUiCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggMzU2NDUzMy4uOWFhYjUxY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTU2MCw2ICs1NjAsMTMgQEAKIGNvcmUtJChDT05GSUdfVE9TSElCQV9KTVIzOTI3KQkrPSBhcmNoL21pcHMvdHh4OS9qbXIzOTI3LwogCiAjCisjIFJvdXRlcmJvYXJkIDUzMiBib2FyZAorIworY29yZS0kKENPTkZJR19NSUtST1RJS19SQjUzMikJKz0gYXJjaC9taXBzL3JiNTMyLworY2ZsYWdzLSQoQ09ORklHX01JS1JPVElLX1JCNTMyKSArPSAtSWluY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0Citsb2FkLSQoQ09ORklHX01JS1JPVElLX1JCNTMyKQkrPSAweGZmZmZmZmZmODAxMDEwMDAKKworIwogIyBUb3NoaWJhIFJCVFg0OTI3IGJvYXJkIG9yCiAjIFRvc2hpYmEgUkJUWDQ5MzcgYm9hcmQKICMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYyBiL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYwppbmRleCBkZDIzYmViLi5iNTE2NDQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jCkBAIC04MSw4ICs4MSw4IEBACiAKIAlzZXRfaW9fcG9ydF9iYXNlKENLU0VHMUFERFIoR1RfREVGX1BDSTBfSU9fQkFTRSkpOwogCi0JLyogSS9PIHBvcnQgcmVzb3VyY2UgbXVzdCBpbmNsdWRlIExDRC9idXR0b25zICovCi0JaW9wb3J0X3Jlc291cmNlLmVuZCA9IDB4MGZmZmZmZmY7CisJLyogSS9PIHBvcnQgcmVzb3VyY2UgKi8KKwlpb3BvcnRfcmVzb3VyY2UuZW5kID0gMHgwMWZmZmZmZjsKIAogCS8qIFRoZXNlIHJlc291cmNlcyBoYXZlIGJlZW4gcmVzZXJ2ZWQgYnkgVklBIFN1cGVySS9PIGNoaXAuICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29iYWx0X3Jlc2VydmVkX3Jlc291cmNlcyk7IGkrKykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjhkYzMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmI1MzJfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTMxNCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1CisjIE1vbiBBcHIgMjggMTI6MjQ6MTcgMjAwOAorIworQ09ORklHX01JUFM9eQorCisjCisjIE1hY2hpbmUgc2VsZWN0aW9uCisjCisjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAorIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVNT1RFX0ZVTE9ORyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAorIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAorQ09ORklHX01JS1JPVElLX1JCNTMyPXkKKyMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQk9PVF9SQVc9eQorQ09ORklHX0NFVlRfUjRLPXkKK0NPTkZJR19DU1JDX1I0Sz15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKK0NPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKKyMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CitDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX0lSUV9DUFU9eQorQ09ORklHX1NXQVBfSU9fU1BBQ0U9eQorQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NAorCisjCisjIENQVSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjIgaXMgbm90IHNldAorQ09ORklHX0NQVV9NSVBTMzJfUjE9eQorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IxMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKK0NPTkZJR19DUFVfTUlQUzMyPXkKK0NPTkZJR19DUFVfTUlQU1IxPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKKworIworIyBLZXJuZWwgdHlwZQorIworQ09ORklHXzMyQklUPXkKKyMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQorQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQorIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX0xMU0M9eQorQ09ORklHX0NQVV9IQVNfU1lOQz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCisjCitDT05GSUdfSFdfSEFTX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFEX1NJR05BTFM9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorQ09ORklHX0FSUEQ9eQorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz1tCitDT05GSUdfSU5FVF9UQ1BfRElBRz1tCitDT05GSUdfVENQX0NPTkdfQURWQU5DRUQ9eQorQ09ORklHX1RDUF9DT05HX0JJQz1tCitDT05GSUdfVENQX0NPTkdfQ1VCSUM9bQorQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPW0KK0NPTkZJR19UQ1BfQ09OR19IVENQPW0KK0NPTkZJR19UQ1BfQ09OR19IU1RDUD1tCitDT05GSUdfVENQX0NPTkdfSFlCTEE9bQorQ09ORklHX1RDUF9DT05HX1ZFR0FTPXkKK0NPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRT1tCitDT05GSUdfVENQX0NPTkdfTFA9bQorQ09ORklHX1RDUF9DT05HX1ZFTk89bQorQ09ORklHX1RDUF9DT05HX1lFQUg9bQorQ09ORklHX1RDUF9DT05HX0lMTElOT0lTPW0KKyMgQ09ORklHX0RFRkFVTFRfQklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ1VCSUMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9IVENQIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1ZFR0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfV0VTVFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJ2ZWdhcyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CisjIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDSz15CitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DVF9QUk9UT19EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19TQU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19TSVAgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KKyMgQ09ORklHX05GX0NUX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPXkKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPXkKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPXkKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND15CitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz15CisjIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX1RUTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX0ZJTFRFUj15CitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD15CisjIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVQ9eQorQ09ORklHX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPXkKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCisjIENPTkZJR19ORl9OQVRfQU1BTkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9TSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BTkdMRT15CisjIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9UVEwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorQ09ORklHX0JSSURHRT15CitDT05GSUdfVkxBTl84MDIxUT15CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz15CitDT05GSUdfTExDMj1tCisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hFRD15CisKKyMKKyMgUXVldWVpbmcvU2NoZWR1bGluZworIworQ09ORklHX05FVF9TQ0hfQ0JRPW0KKyMgQ09ORklHX05FVF9TQ0hfSFRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfSEZTQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9QUklPPW0KK0NPTkZJR19ORVRfU0NIX1JSPW0KKyMgQ09ORklHX05FVF9TQ0hfUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfU0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfVEVRTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1RCRiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0dSRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9EU01BUksgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfTkVURU09bQorIyBDT05GSUdfTkVUX1NDSF9JTkdSRVNTIGlzIG5vdCBzZXQKKworIworIyBDbGFzc2lmaWNhdGlvbgorIworQ09ORklHX05FVF9DTFM9eQorQ09ORklHX05FVF9DTFNfQkFTSUM9bQorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KK0NPTkZJR19DTFNfVTMyX1BFUkY9eQorQ09ORklHX0NMU19VMzJfTUFSSz15CitDT05GSUdfTkVUX0NMU19SU1ZQPW0KK0NPTkZJR19ORVRfQ0xTX1JTVlA2PW0KKyMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VNQVRDSD15CitDT05GSUdfTkVUX0VNQVRDSF9TVEFDSz0zMgorQ09ORklHX05FVF9FTUFUQ0hfQ01QPW0KK0NPTkZJR19ORVRfRU1BVENIX05CWVRFPW0KK0NPTkZJR19ORVRfRU1BVENIX1UzMj1tCitDT05GSUdfTkVUX0VNQVRDSF9NRVRBPW0KK0NPTkZJR19ORVRfRU1BVENIX1RFWFQ9bQorQ09ORklHX05FVF9DTFNfQUNUPXkKK0NPTkZJR19ORVRfQUNUX1BPTElDRT15CitDT05GSUdfTkVUX0FDVF9HQUNUPW0KK0NPTkZJR19HQUNUX1BST0I9eQorQ09ORklHX05FVF9BQ1RfTUlSUkVEPW0KK0NPTkZJR19ORVRfQUNUX0lQVD1tCisjIENPTkZJR19ORVRfQUNUX05BVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0FDVF9QRURJVD1tCisjIENPTkZJR19ORVRfQUNUX1NJTVAgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfSU5EPXkKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfSEFNUkFESU89eQorCisjCisjIFBhY2tldCBSYWRpbyBwcm90b2NvbHMKKyMKKyMgQ09ORklHX0FYMjUgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorQ09ORklHX01URF9CTE9DSzJNVEQ9eQorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9QTEFURk9STT15CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworIyBDT05GSUdfQkxLX0RFVl9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUE1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1JCNTMyPXkKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0lGQj1tCisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX0tPUklOQT15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDMzU4MTUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19WSUFfUkhJTkU9eQorIyBDT05GSUdfVklBX1JISU5FX01NSU8gaXMgbm90IHNldAorQ09ORklHX1ZJQV9SSElORV9OQVBJPXkKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU5fODAyMTE9eQorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CitDT05GSUdfQVRNRUw9bQorIyBDT05GSUdfUENJX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPTDJUUD1tCisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworQ09ORklHX1ZJREVPX0RFVj1tCitDT05GSUdfVklERU9fVjRMMl9DT01NT049bQorQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDE9eQorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT19WNEwxPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPIGlzIG5vdCBzZXQKKworIworIyBFbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzCisjCisKKyMKKyMgQXVkaW8gZGVjb2RlcnMKKyMKKworIworIyBWaWRlbyBkZWNvZGVycworIworCisjCisjIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycworIworCisjCisjIE1QRUcgdmlkZW8gZW5jb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX0NYMjM0MVggaXMgbm90IHNldAorCisjCisjIFZpZGVvIGVuY29kZXJzCisjCisKKyMKKyMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMKKyMKKyMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TVFJBRElTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkEgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fQURBUFRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkU9IiIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggNjVhZjNjYy4uYzI2NjIxMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTEyOSwyMyArMTI5LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQotYXNtbGlua2FnZSBpbnQgc3lzX3RydW5jYXRlNjQoY29uc3QgY2hhciBfX3VzZXIgKnBhdGgsIHVuc2lnbmVkIGludCBoaWdoLAotCQkJICAgICAgdW5zaWduZWQgaW50IGxvdykKLXsKLQlpZiAoKGludCloaWdoIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHN5c190cnVuY2F0ZShwYXRoLCAoKGxvbmcpIGhpZ2ggPDwgMzIpIHwgbG93KTsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3lzX2Z0cnVuY2F0ZTY0KHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGhpZ2gsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGxvdykKLXsKLQlpZiAoKGludCloaWdoIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHN5c19mdHJ1bmNhdGUoZmQsICgobG9uZykgaGlnaCA8PCAzMikgfCBsb3cpOwotfQotCiAvKgogICogc3lzX2V4ZWN2ZSgpIGV4ZWN1dGVzIGEgbmV3IHByb2dyYW0uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKaW5kZXggYjU1NjQxOS4uZGZkODY4YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKQEAgLTUyMiw4ICs1MjIsOCBAQAogCQlhdG9taWNfc2V0KCZjaGFubmVsX3dxc1tpXS5pbl9vcGVuLCAwKTsKIAkJbXV0ZXhfaW5pdCgmY2hhbm5lbF93cXNbaV0ubXV0ZXgpOwogCi0JCWRldiA9IGRldmljZV9jcmVhdGUobXRfY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwKLQkJICAgICAgICAgICAgICAgICAgICAiJXMlZCIsIG1vZHVsZV9uYW1lLCBpKTsKKwkJZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG10X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksCisJCQkJCSAgICBOVUxMLCAiJXMlZCIsIG1vZHVsZV9uYW1lLCBpKTsKIAkJaWYgKElTX0VSUihkZXYpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGRldik7CiAJCQlnb3RvIG91dF9jaHJkZXY7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggYzA1OGMwYi4uZmM0ZmQ0ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtMzU0LDcgKzM1NCw3IEBACiAJc3lzCXN5c19ta2RpcgkJMgogCXN5cwlzeXNfcm1kaXIJCTEJLyogNDA0MCAqLwogCXN5cwlzeXNfZHVwCQkJMQotCXN5cwlzeXNfcGlwZQkJMAorCXN5cwlzeXNtX3BpcGUJCTAKIAlzeXMJc3lzX3RpbWVzCQkxCiAJc3lzCXN5c19uaV9zeXNjYWxsCQkwCiAJc3lzCXN5c19icmsJCQkxCS8qIDQwNDUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKaW5kZXggZGM1OTdiNi4uMmI3M2ZkMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKQEAgLTIxOSw3ICsyMTksNyBAQAogCVBUUglzeXNfcmVhZHYKIAlQVFIJc3lzX3dyaXRldgogCVBUUglzeXNfYWNjZXNzCQkJLyogNTAyMCAqLwotCVBUUglzeXNfcGlwZQorCVBUUglzeXNtX3BpcGUKIAlQVFIJc3lzX3NlbGVjdAogCVBUUglzeXNfc2NoZWRfeWllbGQKIAlQVFIJc3lzX21yZW1hcApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCmluZGV4IDEyOTQwZWMuLjI2NTRlNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCVBUUgljb21wYXRfc3lzX3JlYWR2CiAJUFRSCWNvbXBhdF9zeXNfd3JpdGV2CiAJUFRSCXN5c19hY2Nlc3MJCQkvKiA2MDIwICovCi0JUFRSCXN5c19waXBlCisJUFRSCXN5c21fcGlwZQogCVBUUgljb21wYXRfc3lzX3NlbGVjdAogCVBUUglzeXNfc2NoZWRfeWllbGQKIAlQVFIJc3lzX21yZW1hcApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IDlhMjc1ZWYuLjc2MTY3YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCVBUUglzeXNfbWtkaXIKIAlQVFIJc3lzX3JtZGlyCQkJLyogNDA0MCAqLwogCVBUUglzeXNfZHVwCi0JUFRSCXN5c19waXBlCisJUFRSCXN5c21fcGlwZQogCVBUUgljb21wYXRfc3lzX3RpbWVzCiAJUFRSCXN5c19uaV9zeXNjYWxsCiAJUFRSCXN5c19icmsJCQkJLyogNDA0NSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwppbmRleCBhZjFiZGM4Li4zNTIzYzhkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYworKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwpAQCAtNDAsNyArNDAsMTQgQEAKICNpbmNsdWRlIDxhc20vc3lzbWlwcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLWFzbWxpbmthZ2UgaW50IHN5c19waXBlKG5hYmlfbm9fcmVnYXJncyB2b2xhdGlsZSBzdHJ1Y3QgcHRfcmVncyByZWdzKQorLyoKKyAqIEZvciBoaXN0b3JpYyByZWFzb25zIHRoZSBwaXBlKDIpIHN5c2NhbGwgb24gTUlQUyBoYXMgYW4gdW51c3VhbCBjYWxsaW5nCisgKiBjb252ZW50aW9uLiAgSXQgcmV0dXJucyByZXN1bHRzIGluIHJlZ2lzdGVycyAkdjAgLyAkdjEgd2hpY2ggbWVhbnMgdGhlcmUKKyAqIGlzIG5vIG5lZWQgZm9yIGl0IHRvIGRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgYSB1c2Vyc3BhY2UgcG9pbnRlcgorICogYXJndW1lbnQuICBIaXN0b3JpY2FsbHkgdGhhdCB1c2VkIHRvIGJlIGV4cGVuc2l2ZSBpbiBMaW51eC4gIFRoZXNlIGRheXMKKyAqIHRoZSBwZXJmb3JtYW5jZSBhZHZhbnRhZ2UgaXMgbmVnbGlnaWJsZS4KKyAqLworYXNtbGlua2FnZSBpbnQgc3lzbV9waXBlKG5hYmlfbm9fcmVnYXJncyB2b2xhdGlsZSBzdHJ1Y3QgcHRfcmVncyByZWdzKQogewogCWludCBmZFsyXTsKIAlpbnQgZXJyb3IsIHJlczsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9rZXJuZWxfbGlua2FnZS5jIGIvYXJjaC9taXBzL21hdGgtZW11L2tlcm5lbF9saW5rYWdlLmMKaW5kZXggZWQ0OWVmMC4uNTJlNmM1OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2tlcm5lbF9saW5rYWdlLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2tlcm5lbF9saW5rYWdlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorI2luY2x1ZGUgPGFzbS9mcHUuaD4KICNpbmNsdWRlIDxhc20vZnB1X2VtdWxhdG9yLmg+CiAKICNkZWZpbmUgU0lHTkFMTElOR19OQU4gMHg3ZmY4MDAwMDdmZjgwMDAwTEwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUgYi9hcmNoL21pcHMvcGNpL01ha2VmaWxlCmluZGV4IDU3ZTM0Y2EuLjE1ZTAxYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQpAQCAtNDksMyArNDksNCBAQAogb2JqLSQoQ09ORklHX1ZJQ1RPUl9NUEMzMFgpCSs9IGZpeHVwLW1wYzMweC5vCiBvYmotJChDT05GSUdfWkFPX0NBUENFTExBKQkrPSBmaXh1cC1jYXBjZWxsYS5vCiBvYmotJChDT05GSUdfV1JfUFBNQykJCSs9IGZpeHVwLXdycHBtYy5vCitvYmotJChDT05GSUdfTUlLUk9USUtfUkI1MzIpCSs9IHBjaS1yYzMyNDM0Lm8gb3BzLXJjMzI0MzQubyBmaXh1cC1yYzMyNDM0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtcmMzMjQzNC5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1yYzMyNDM0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViOTBkYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtcmMzMjQzNC5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICAJc3RldmVsQG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9yYzMyNDM0Lmg+CisKK3N0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBpcnFfbWFwWzJdWzEyXSA9IHsKKwl7MCwgMCwgMiwgMywgMiwgMywgMCwgMCwgMCwgMCwgMCwgMX0sCisJezAsIDAsIDEsIDMsIDAsIDIsIDEsIDMsIDAsIDIsIDEsIDN9Cit9OworCitpbnQgX19kZXZpbml0IHBjaWJpb3NfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaW50IGlycSA9IDA7CisKKwlpZiAoZGV2LT5idXMtPm51bWJlciA8IDIgJiYgUENJX1NMT1QoZGV2LT5kZXZmbikgPCAxMikKKwkJaXJxID0gaXJxX21hcFtkZXYtPmJ1cy0+bnVtYmVyXVtQQ0lfU0xPVChkZXYtPmRldmZuKV07CisKKwlyZXR1cm4gaXJxICsgR1JPVVA0X0lSUV9CQVNFICsgNDsKK30KKworc3RhdGljIHZvaWQgcmMzMjQzNF9wY2lfZWFybHlfZml4dXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gNiAmJiBkZXYtPmJ1cy0+bnVtYmVyID09IDApIHsKKwkJLyogZGlzYWJsZSBwcmVmZXRjaGVkIG1lbW9yeSByYW5nZSAqLworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfUFJFRl9NRU1PUllfTElNSVQsIDApOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfUFJFRl9NRU1PUllfQkFTRSwgMHgxMCk7CisKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgNCk7CisJfQorfQorCisvKgorICogVGhlIGZpeHVwIGFwcGxpZXMgdG8gYm90aCB0aGUgSURUIGFuZCBWSUEgZGV2aWNlcyBwcmVzZW50IG9uIHRoZSBib2FyZAorICovCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcmMzMjQzNF9wY2lfZWFybHlfZml4dXApOworCisvKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCitpbnQgcGNpYmlvc19wbGF0X2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1yYzMyNDM0LmMgYi9hcmNoL21pcHMvcGNpL29wcy1yYzMyNDM0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmOGZhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLXJjMzI0MzQuYwpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqICBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqICAgICBwY2lfb3BzIGZvciBJRFQgRUI0MzQgYm9hcmQKKyAqCisgKiAgQ29weXJpZ2h0IDIwMDQgSURUIEluYy4gKHJpc2NoZWxwQGlkdC5jb20pCisgKiAgQ29weXJpZ2h0IDIwMDYgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JjMzI0MzQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3BjaS5oPgorCisjZGVmaW5lIFBDSV9BQ0NFU1NfUkVBRCAgMAorI2RlZmluZSBQQ0lfQUNDRVNTX1dSSVRFIDEKKworCisjZGVmaW5lIFBDSV9DRkdfU0VUKGJ1cywgc2xvdCwgZnVuYywgb2ZmKSBcCisJKHJjMzI0MzRfcGNpLT5wY2ljZmdhID0gKDB4ODAwMDAwMDAgfCBcCisJCQkJKChidXMpIDw8IDE2KSB8ICgoc2xvdCk8PDExKSB8IFwKKwkJCQkoKGZ1bmMpPDw4KSB8IChvZmYpKSkKKworc3RhdGljIGlubGluZSBpbnQgY29uZmlnX2FjY2Vzcyh1bnNpZ25lZCBjaGFyIGFjY2Vzc190eXBlLAorCQkJCXN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQl1bnNpZ25lZCBjaGFyIHdoZXJlLCB1MzIgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChkZXZmbik7CisJdTggZnVuYyA9IFBDSV9GVU5DKGRldmZuKTsKKworCS8qIFNldHVwIGFkZHJlc3MgKi8KKwlQQ0lfQ0ZHX1NFVChidXMtPm51bWJlciwgc2xvdCwgZnVuYywgd2hlcmUpOworCXJjMzI0MzRfc3luYygpOworCisJaWYgKGFjY2Vzc190eXBlID09IFBDSV9BQ0NFU1NfV1JJVEUpCisJCXJjMzI0MzRfcGNpLT5wY2ljZmdkID0gKmRhdGE7CisJZWxzZQorCQkqZGF0YSA9IHJjMzI0MzRfcGNpLT5wY2ljZmdkOworCisJcmMzMjQzNF9zeW5jKCk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogV2UgY2FuJ3QgYWRkcmVzcyA4IGFuZCAxNiBiaXQgd29yZHMgZGlyZWN0bHkuICBJbnN0ZWFkIHdlIGhhdmUgdG8KKyAqIHJlYWQvd3JpdGUgYSAzMmJpdCB3b3JkIGFuZCBtYXNrL21vZGlmeSB0aGUgZGF0YSB3ZSBhY3R1YWxseSB3YW50LgorICovCitzdGF0aWMgaW50IHJlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgIGludCB3aGVyZSwgdTggKnZhbCkKK3sKKwl1MzIgZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gY29uZmlnX2FjY2VzcyhQQ0lfQUNDRVNTX1JFQUQsIGJ1cywgZGV2Zm4sIHdoZXJlLCAmZGF0YSk7CisJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAzKSA8PCAzKSkgJiAweGZmOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICAgaW50IHdoZXJlLCB1MTYgKnZhbCkKK3sKKwl1MzIgZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gY29uZmlnX2FjY2VzcyhQQ0lfQUNDRVNTX1JFQUQsIGJ1cywgZGV2Zm4sIHdoZXJlLCAmZGF0YSk7CisJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAzKSA8PCAzKSkgJiAweGZmZmY7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZWFkX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICAgIGludCB3aGVyZSwgdTMyICp2YWwpCit7CisJaW50IHJldDsKKwlpbnQgZGVsYXkgPSAxOworCisJLyoKKwkgKiBEb24ndCBzY2FuIHRvbyBmYXIsIGVsc2UgdGhlcmUgd2lsbCBiZSBlcnJvcnMgd2l0aCBwbHVnZ2VkIGluCisJICogZGF1Z2h0ZXJib2FyZCAocmI1NjQpLgorCSAqLworCWlmIChidXMtPm51bWJlciA9PSAwICYmIFBDSV9TTE9UKGRldmZuKSA+IDIxKQorCQlyZXR1cm4gMDsKKworcmV0cnk6CisJcmV0ID0gY29uZmlnX2FjY2VzcyhQQ0lfQUNDRVNTX1JFQUQsIGJ1cywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCisJLyoKKwkgKiBDZXJ0YWluIGRldmljZXMgcmVhY3QgZGVsYXllZCBhdCBkZXZpY2Ugc2NhbiB0aW1lLCB0aGlzCisJICogZ2l2ZXMgdGhlbSB0aW1lIHRvIHNldHRsZQorCSAqLworCWlmICh3aGVyZSA9PSBQQ0lfVkVORE9SX0lEKSB7CisJCWlmIChyZXQgPT0gMHhmZmZmZmZmZiB8fCByZXQgPT0gMHgwMDAwMDAwMCB8fAorCQkgICAgcmV0ID09IDB4MDAwMGZmZmYgfHwgcmV0ID09IDB4ZmZmZjAwMDApIHsKKwkJCWlmIChkZWxheSA+IDQpCisJCQkJcmV0dXJuIDA7CisJCQlkZWxheSAqPSAyOworCQkJbXNsZWVwKGRlbGF5KTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cit3cml0ZV9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJICB1OCB2YWwpCit7CisJdTMyIGRhdGEgPSAwOworCisJaWYgKGNvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19SRUFELCBidXMsIGRldmZuLCB3aGVyZSwgJmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlkYXRhID0gKGRhdGEgJiB+KDB4ZmYgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKSkgfAorCSAgICAodmFsIDw8ICgod2hlcmUgJiAzKSA8PCAzKSk7CisKKwlpZiAoY29uZmlnX2FjY2VzcyhQQ0lfQUNDRVNTX1dSSVRFLCBidXMsIGRldmZuLCB3aGVyZSwgJmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCisKK3N0YXRpYyBpbnQKK3dyaXRlX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAorCQkgIHUxNiB2YWwpCit7CisJdTMyIGRhdGEgPSAwOworCisJaWYgKGNvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19SRUFELCBidXMsIGRldmZuLCB3aGVyZSwgJmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlkYXRhID0gKGRhdGEgJiB+KDB4ZmZmZiA8PCAoKHdoZXJlICYgMykgPDwgMykpKSB8CisJICAgICh2YWwgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKTsKKworCWlmIChjb25maWdfYWNjZXNzKFBDSV9BQ0NFU1NfV1JJVEUsIGJ1cywgZGV2Zm4sIHdoZXJlLCAmZGF0YSkpCisJCXJldHVybiAtMTsKKworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworCitzdGF0aWMgaW50Cit3cml0ZV9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCSAgIHUzMiB2YWwpCit7CisJaWYgKGNvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19XUklURSwgYnVzLCBkZXZmbiwgd2hlcmUsICZ2YWwpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHBjaV9jb25maWdfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXJldHVybiByZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHdoZXJlLCAodTggKikgdmFsKTsKKwljYXNlIDI6CisJCXJldHVybiByZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHdoZXJlLCAodTE2ICopIHZhbCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCX0KK30KKworc3RhdGljIGludCBwY2lfY29uZmlnX3dyaXRlKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJcmV0dXJuIHdyaXRlX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHdoZXJlLCAodTgpIHZhbCk7CisJY2FzZSAyOgorCQlyZXR1cm4gd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgd2hlcmUsICh1MTYpIHZhbCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHdyaXRlX2NvbmZpZ19kd29yZChidXMsIGRldmZuLCB3aGVyZSwgdmFsKTsKKwl9Cit9CisKK3N0cnVjdCBwY2lfb3BzIHJjMzI0MzRfcGNpX29wcyA9IHsKKwkucmVhZCA9IHBjaV9jb25maWdfcmVhZCwKKwkud3JpdGUgPSBwY2lfY29uZmlnX3dyaXRlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzI4MjFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgorICogICAgIFBDSSBpbml0aWFsaXphdGlvbiBmb3IgSURUIEVCNDM0IGJvYXJkCisgKgorICogIENvcHlyaWdodCAyMDA0IElEVCBJbmMuIChyaXNjaGVscEBpZHQuY29tKQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JjMzI0MzQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3BjaS5oPgorCisjZGVmaW5lIFBDSV9BQ0NFU1NfUkVBRCAgMAorI2RlZmluZSBQQ0lfQUNDRVNTX1dSSVRFIDEKKworLyogZGVmaW5lIGFuIHVuc2lnbmVkIGFycmF5IGZvciB0aGUgUENJIHJlZ2lzdGVycyAqLworc3RhdGljIHVuc2lnbmVkIGludCBrb3JpbmFfY25mZ19yZWdzWzI1XSA9IHsKKwlLT1JJTkFfQ05GRzEsIEtPUklOQV9DTkZHMiwgS09SSU5BX0NORkczLCBLT1JJTkFfQ05GRzQsCisJS09SSU5BX0NORkc1LCBLT1JJTkFfQ05GRzYsIEtPUklOQV9DTkZHNywgS09SSU5BX0NORkc4LAorCUtPUklOQV9DTkZHOSwgS09SSU5BX0NORkcxMCwgS09SSU5BX0NORkcxMSwgS09SSU5BX0NORkcxMiwKKwlLT1JJTkFfQ05GRzEzLCBLT1JJTkFfQ05GRzE0LCBLT1JJTkFfQ05GRzE1LCBLT1JJTkFfQ05GRzE2LAorCUtPUklOQV9DTkZHMTcsIEtPUklOQV9DTkZHMTgsIEtPUklOQV9DTkZHMTksIEtPUklOQV9DTkZHMjAsCisJS09SSU5BX0NORkcyMSwgS09SSU5BX0NORkcyMiwgS09SSU5BX0NORkcyMywgS09SSU5BX0NORkcyNAorfTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmMzMjQzNF9yZXNfcGNpX21lbTE7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJjMzI0MzRfcmVzX3BjaV9tZW0yOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJjMzI0MzRfcmVzX3BjaV9tZW0xID0geworCS5uYW1lID0gIlBDSSBNRU0xIiwKKwkuc3RhcnQgPSAweDUwMDAwMDAwLAorCS5lbmQgPSAweDVGRkZGRkZGLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCS5wYXJlbnQgPSAmcmMzMjQzNF9yZXNfcGNpX21lbTEsCisJLnNpYmxpbmcgPSBOVUxMLAorCS5jaGlsZCA9ICZyYzMyNDM0X3Jlc19wY2lfbWVtMgorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByYzMyNDM0X3Jlc19wY2lfbWVtMiA9IHsKKwkubmFtZSA9ICJQQ0kgTWVtMiIsCisJLnN0YXJ0ID0gMHg2MDAwMDAwMCwKKwkuZW5kID0gMHg2RkZGRkZGRiwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkucGFyZW50ID0gJnJjMzI0MzRfcmVzX3BjaV9tZW0xLAorCS5zaWJsaW5nID0gTlVMTCwKKwkuY2hpbGQgPSBOVUxMCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJjMzI0MzRfcmVzX3BjaV9pbzEgPSB7CisJLm5hbWUgPSAiUENJIEkvTzEiLAorCS5zdGFydCA9IDB4MTg4MDAwMDAsCisJLmVuZCA9IDB4MTg4RkZGRkYsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9JTywKK307CisKK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyByYzMyNDM0X3BjaV9vcHM7CisKKyNkZWZpbmUgUENJX01FTTFfU1RBUlQJUENJX0FERFJfU1RBUlQKKyNkZWZpbmUgUENJX01FTTFfRU5ECShQQ0lfQUREUl9TVEFSVCArIENQVVRPUENJX01FTV9XSU4gLSAxKQorI2RlZmluZSBQQ0lfTUVNMl9TVEFSVAkoUENJX0FERFJfU1RBUlQgKyBDUFVUT1BDSV9NRU1fV0lOKQorI2RlZmluZSBQQ0lfTUVNMl9FTkQJKFBDSV9BRERSX1NUQVJUICsgKDIgKiBDUFVUT1BDSV9NRU1fV0lOKSAgLSAxKQorI2RlZmluZSBQQ0lfSU8xX1NUQVJUCShQQ0lfQUREUl9TVEFSVCArICgyICogQ1BVVE9QQ0lfTUVNX1dJTikpCisjZGVmaW5lIFBDSV9JTzFfRU5EIAkJCQkJCQlcCisJKFBDSV9BRERSX1NUQVJUICsgKDIgKiBDUFVUT1BDSV9NRU1fV0lOKSArIENQVVRPUENJX0lPX1dJTiAtIDEpCisjZGVmaW5lIFBDSV9JTzJfU1RBUlQJCQkJCQkJXAorCShQQ0lfQUREUl9TVEFSVCArICgyICogQ1BVVE9QQ0lfTUVNX1dJTikgKyBDUFVUT1BDSV9JT19XSU4pCisjZGVmaW5lIFBDSV9JTzJfRU5EIAkJCQkJCQlcCisJKFBDSV9BRERSX1NUQVJUICsgKDIgKiBDUFVUT1BDSV9NRU1fV0lOKSArICgyICogQ1BVVE9QQ0lfSU9fV0lOKSAtIDEpCisKK3N0cnVjdCBwY2lfY29udHJvbGxlciByYzMyNDM0X2NvbnRyb2xsZXIyOworCitzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgcmMzMjQzNF9jb250cm9sbGVyID0geworCS5wY2lfb3BzID0gJnJjMzI0MzRfcGNpX29wcywKKwkubWVtX3Jlc291cmNlID0gJnJjMzI0MzRfcmVzX3BjaV9tZW0xLAorCS5pb19yZXNvdXJjZSA9ICZyYzMyNDM0X3Jlc19wY2lfaW8xLAorCS5tZW1fb2Zmc2V0ID0gMCwKKwkuaW9fb2Zmc2V0ID0gMCwKKworfTsKKworI2lmZGVmIF9fTUlQU0VCX18KKyNkZWZpbmUgUENJX0VORElBTl9GTEFHIFBDSUxCQUNfc2JfbQorI2Vsc2UKKyNkZWZpbmUgUENJX0VORElBTl9GTEFHIDAKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCByYzMyNDM0X3BjaWJyaWRnZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHBjaWN2YWx1ZSwgcGNpY2RhdGEgPSAwOworCXVuc2lnbmVkIGludCBkdW1teXJlYWQsIHBjaWNudGx2YWw7CisJaW50IGxvb3BDb3VudDsKKwl1bnNpZ25lZCBpbnQgcGNpX2NvbmZpZ19hZGRyOworCisJcGNpY3ZhbHVlID0gcmMzMjQzNF9wY2ktPnBjaWM7CisJcGNpY3ZhbHVlID0gKHBjaWN2YWx1ZSA+PiBQQ0lNX1NIRlQpICYgUENJTV9CSVRfTEVOOworCWlmICghKChwY2ljdmFsdWUgPT0gUENJTV9IX0VBKSB8fAorCSAgICAgIChwY2ljdmFsdWUgPT0gUENJTV9IX0lBX0ZJWCkgfHwKKwkgICAgICAocGNpY3ZhbHVlID09IFBDSU1fSF9JQV9SUikpKSB7CisJCXByX2VycihLRVJOX0VSUiAiUENJIGluaXQgZXJyb3IhISFcbiIpOworCQkvKiBOb3QgaW4gSG9zdCBNb2RlLCByZXR1cm4gRVJST1IgKi8KKwkJcmV0dXJuIC0xOworCX0KKwkvKiBFbmFibGVzIHRoZSBJZGxlIEdyYW50IG1vZGUsIEFyYml0ZXIgUGFya2luZyAqLworCXBjaWNkYXRhIHw9IChQQ0lfQ1RMX0lHTSB8IFBDSV9DVExfRUFQIHwgUENJX0NUTF9FTik7CisJcmMzMjQzNF9wY2ktPnBjaWMgPSBwY2ljZGF0YTsJLyogRW5hYmxlIHRoZSBQQ0kgYnVzIEludGVyZmFjZSAqLworCS8qIFplcm8gb3V0IHRoZSBQQ0kgc3RhdHVzICYgUENJIFN0YXR1cyBNYXNrICovCisJZm9yICg7OykgeworCQlwY2ljZGF0YSA9IHJjMzI0MzRfcGNpLT5wY2lzOworCQlpZiAoIShwY2ljZGF0YSAmIFBDSV9TVEFUX1JJUCkpCisJCQlicmVhazsKKwl9CisKKwlyYzMyNDM0X3BjaS0+cGNpcyA9IDA7CisJcmMzMjQzNF9wY2ktPnBjaXNtID0gMHhGRkZGRkZGRjsKKwkvKiBaZXJvIG91dCB0aGUgUENJIGRlY291cGxlZCByZWdpc3RlcnMgKi8KKwlyYzMyNDM0X3BjaS0+cGNpZGFjID0gMDsJLyoKKwkJCQkJICogZGlzYWJsZSBQQ0kgZGVjb3VwbGVkIGFjY2Vzc2VzIGF0CisJCQkJCSAqIGluaXRpYWxpemF0aW9uCisJCQkJCSAqLworCXJjMzI0MzRfcGNpLT5wY2lkYXMgPSAwOwkvKiBjbGVhciB0aGUgc3RhdHVzICovCisJcmMzMjQzNF9wY2ktPnBjaWRhc20gPSAweDAwMDAwMDdGOwkvKiBNYXNrIGFsbCB0aGUgaW50ZXJydXB0cyAqLworCS8qIE1hc2sgUENJIE1lc3NhZ2luZyBJbnRlcnJ1cHRzICovCisJcmMzMjQzNF9wY2lfbXNnLT5wY2lpaWMgPSAwOworCXJjMzI0MzRfcGNpX21zZy0+cGNpaWltID0gMHhGRkZGRkZGRjsKKwlyYzMyNDM0X3BjaV9tc2ctPnBjaWlvaWMgPSAwOworCXJjMzI0MzRfcGNpX21zZy0+cGNpaW9pbSA9IDA7CisKKworCS8qIFNldHVwIFBDSUxCMCBhcyBNZW1vcnkgV2luZG93ICovCisJcmMzMjQzNF9wY2ktPnBjaWxiYVswXS5hZGRyZXNzID0gKHVuc2lnbmVkIGludCkgKFBDSV9BRERSX1NUQVJUKTsKKworCS8qIHNldHVwIHRoZSBQQ0kgbWFwIGFkZHJlc3MgYXMgc2FtZSBhcyB0aGUgbG9jYWwgYWRkcmVzcyAqLworCisJcmMzMjQzNF9wY2ktPnBjaWxiYVswXS5tYXBwaW5nID0gKHVuc2lnbmVkIGludCkgKFBDSV9BRERSX1NUQVJUKTsKKworCisJLyogU2V0dXAgUENJTEJBMSBhcyBNRU0gKi8KKwlyYzMyNDM0X3BjaS0+cGNpbGJhWzBdLmNvbnRyb2wgPQorCSAgICAoKChTSVpFXzI1Nk1CICYgMHgxZikgPDwgUENJX0xCQUNfU0laRV9CSVQpIHwgUENJX0VORElBTl9GTEFHKTsKKwlkdW1teXJlYWQgPSByYzMyNDM0X3BjaS0+cGNpbGJhWzBdLmNvbnRyb2w7CS8qIGZsdXNoIHRoZSBDUFUgd3JpdGUgQnVmZmVycyAqLworCXJjMzI0MzRfcGNpLT5wY2lsYmFbMV0uYWRkcmVzcyA9IDB4NjAwMDAwMDA7CisJcmMzMjQzNF9wY2ktPnBjaWxiYVsxXS5tYXBwaW5nID0gMHg2MDAwMDAwMDsKKworCS8qIHNldHVwIFBDSUxCQTIgYXMgSU8gV2luZG93ICovCisJcmMzMjQzNF9wY2ktPnBjaWxiYVsxXS5jb250cm9sID0KKwkgICAgKCgoU0laRV8yNTZNQiAmIDB4MWYpIDw8IFBDSV9MQkFDX1NJWkVfQklUKSB8IFBDSV9FTkRJQU5fRkxBRyk7CisJZHVtbXlyZWFkID0gcmMzMjQzNF9wY2ktPnBjaWxiYVsxXS5jb250cm9sOwkvKiBmbHVzaCB0aGUgQ1BVIHdyaXRlIEJ1ZmZlcnMgKi8KKwlyYzMyNDM0X3BjaS0+cGNpbGJhWzJdLmFkZHJlc3MgPSAweDE4QzAwMDAwOworCXJjMzI0MzRfcGNpLT5wY2lsYmFbMl0ubWFwcGluZyA9IDB4MThGRkZGRkY7CisKKwkvKiBzZXR1cCBQQ0lMQkEyIGFzIElPIFdpbmRvdyAqLworCXJjMzI0MzRfcGNpLT5wY2lsYmFbMl0uY29udHJvbCA9CisJICAgICgoKFNJWkVfNE1CICYgMHgxZikgPDwgUENJX0xCQUNfU0laRV9CSVQpIHwgUENJX0VORElBTl9GTEFHKTsKKwlkdW1teXJlYWQgPSByYzMyNDM0X3BjaS0+cGNpbGJhWzJdLmNvbnRyb2w7CS8qIGZsdXNoIHRoZSBDUFUgd3JpdGUgQnVmZmVycyAqLworCisJLyogU2V0dXAgUENJTEJBMyBhcyBJTyBXaW5kb3cgKi8KKwlyYzMyNDM0X3BjaS0+cGNpbGJhWzNdLmFkZHJlc3MgPSAweDE4ODAwMDAwOworCXJjMzI0MzRfcGNpLT5wY2lsYmFbM10ubWFwcGluZyA9IDB4MTg4MDAwMDA7CisJcmMzMjQzNF9wY2ktPnBjaWxiYVszXS5jb250cm9sID0KKwkgICAgKCgoKFNJWkVfMU1CICYgMHgxZmYpIDw8IFBDSV9MQkFDX1NJWkVfQklUKSB8IFBDSV9MQkFDX01TSSkgfAorCSAgICAgUENJX0VORElBTl9GTEFHKTsKKwlkdW1teXJlYWQgPSByYzMyNDM0X3BjaS0+cGNpbGJhWzNdLmNvbnRyb2w7CS8qIGZsdXNoIHRoZSBDUFUgd3JpdGUgQnVmZmVycyAqLworCisJcGNpX2NvbmZpZ19hZGRyID0gKHVuc2lnbmVkIGludCkgKDB4ODAwMDAwMDQpOworCWZvciAobG9vcENvdW50ID0gMDsgbG9vcENvdW50IDwgMjQ7IGxvb3BDb3VudCsrKSB7CisJCXJjMzI0MzRfcGNpLT5wY2ljZmdhID0gcGNpX2NvbmZpZ19hZGRyOworCQlkdW1teXJlYWQgPSByYzMyNDM0X3BjaS0+cGNpY2ZnYTsKKwkJcmMzMjQzNF9wY2ktPnBjaWNmZ2QgPSBrb3JpbmFfY25mZ19yZWdzW2xvb3BDb3VudF07CisJCWR1bW15cmVhZCA9IHJjMzI0MzRfcGNpLT5wY2ljZmdkOworCQlwY2lfY29uZmlnX2FkZHIgKz0gNDsKKwl9CisJcmMzMjQzNF9wY2ktPnBjaXRjID0KKwkgICAgKHVuc2lnbmVkIGludCkgKChQQ0lUQ19SVElNRVJfVkFMICYgMHhmZikgPDwgUENJX1RDX1JUSU1FUl9CSVQpIHwKKwkgICAgKChQQ0lUQ19EVElNRVJfVkFMICYgMHhmZikgPDwgUENJX1RDX0RUSU1FUl9CSVQpOworCisJcGNpY250bHZhbCA9IHJjMzI0MzRfcGNpLT5wY2ljOworCXBjaWNudGx2YWwgJj0gflBDSV9DVExfVE5SOworCXJjMzI0MzRfcGNpLT5wY2ljID0gcGNpY250bHZhbDsKKwlwY2ljbnRsdmFsID0gcmMzMjQzNF9wY2ktPnBjaWM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgcmMzMjQzNF9wY2lfaW5pdCh2b2lkKQoreworCXByX2luZm8oIlBDSTogSW5pdGlhbGl6aW5nIFBDSVxuIik7CisKKwlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSByYzMyNDM0X3Jlc19wY2lfaW8xLnN0YXJ0OworCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSByYzMyNDM0X3Jlc19wY2lfaW8xLmVuZDsKKworCXJjMzI0MzRfcGNpYnJpZGdlX2luaXQoKTsKKworCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZyYzMyNDM0X2NvbnRyb2xsZXIpOworCXJjMzI0MzRfc3luYygpOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwocmMzMjQzNF9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS5jIGIvYXJjaC9taXBzL3BjaS9wY2kuYwppbmRleCBkN2Q2Y2IwNi4uNzdiZDViNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2kuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS5jCkBAIC0yMDQsNyArMjA0LDcgQEAKICAqICBJZiB3ZSBzZXQgdXAgYSBkZXZpY2UgZm9yIGJ1cyBtYXN0ZXJpbmcsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGxhdGVuY3kKICAqICB0aW1lciBhcyBjZXJ0YWluIGNyYXBweSBCSU9TZXMgZm9yZ2V0IHRvIHNldCBpdCBwcm9wZXJseS4KICAqLwotdW5zaWduZWQgaW50IHBjaWJpb3NfbWF4X2xhdGVuY3kgPSAyNTU7CitzdGF0aWMgdW5zaWduZWQgaW50IHBjaWJpb3NfbWF4X2xhdGVuY3kgPSAyNTU7CiAKIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcmI1MzIvTWFrZWZpbGUgYi9hcmNoL21pcHMvcmI1MzIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYwYjZiNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9yYjUzMi9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBSQjUzMiBib2FyZCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCisjCisKK29iai15CSArPSBpcnEubyB0aW1lLm8gc2V0dXAubyBzZXJpYWwubyBwcm9tLm8gZ3Bpby5vIGRldmljZXMubworCitFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3JiNTMyL2RldmljZXMuYyBiL2FyY2gvbWlwcy9yYjUzMi9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmYjBhNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9yYjUzMi9kZXZpY2VzLmMKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiAgUm91dGVyQm9hcmQgNTAwIFBsYXRmb3JtIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JjMzI0MzQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L2RtYS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvZG1hX3YuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L2V0aC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvcmIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L2ludGVnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9ncGlvLmg+CisKKyNkZWZpbmUgRVRIMF9ETUFfUlhfSVJRICAgCShHUk9VUDFfSVJRX0JBU0UgKyAwKQorI2RlZmluZSBFVEgwX0RNQV9UWF9JUlEgICAJKEdST1VQMV9JUlFfQkFTRSArIDEpCisjZGVmaW5lIEVUSDBfUlhfT1ZSX0lSUSAgIAkoR1JPVVAzX0lSUV9CQVNFICsgOSkKKyNkZWZpbmUgRVRIMF9UWF9VTkRfSVJRICAgCShHUk9VUDNfSVJRX0JBU0UgKyAxMCkKKworI2RlZmluZSBFVEgwX1JYX0RNQV9BRERSICAoRE1BMF9CQVNFX0FERFIgKyAwICogRE1BX0NIQU5fT0ZGU0VUKQorI2RlZmluZSBFVEgwX1RYX0RNQV9BRERSICAoRE1BMF9CQVNFX0FERFIgKyAxICogRE1BX0NIQU5fT0ZGU0VUKQorCisvKiBOQU5EIGRlZmluaXRpb25zICovCisjZGVmaW5lIEdQSU9fUkRZICgxIDw8IDB4MDgpCisjZGVmaW5lIEdQSU9fV1BYICgxIDw8IDB4MDkpCisjZGVmaW5lIEdQSU9fQUxFICgxIDw8IDB4MGEpCisjZGVmaW5lIEdQSU9fQ0xFICgxIDw8IDB4MGIpCisKK2V4dGVybiBjaGFyICpib2FyZF90eXBlOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGtvcmluYV9kZXYwX3Jlc1tdID0geworCXsKKwkJLm5hbWUgPSAia29yaW5hX3JlZ3MiLAorCQkuc3RhcnQgPSBFVEgwX0JBU0VfQUREUiwKKwkJLmVuZCA9IEVUSDBfQkFTRV9BRERSICsgc2l6ZW9mKHN0cnVjdCBldGhfcmVncyksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCSB9LCB7CisJCS5uYW1lID0gImtvcmluYV9yeCIsCisJCS5zdGFydCA9IEVUSDBfRE1BX1JYX0lSUSwKKwkJLmVuZCA9IEVUSDBfRE1BX1JYX0lSUSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKKwl9LCB7CisJCS5uYW1lID0gImtvcmluYV90eCIsCisJCS5zdGFydCA9IEVUSDBfRE1BX1RYX0lSUSwKKwkJLmVuZCA9IEVUSDBfRE1BX1RYX0lSUSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKKwl9LCB7CisJCS5uYW1lID0gImtvcmluYV9vdnIiLAorCQkuc3RhcnQgPSBFVEgwX1JYX09WUl9JUlEsCisJCS5lbmQgPSBFVEgwX1JYX09WUl9JUlEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRCisJfSwgeworCQkubmFtZSA9ICJrb3JpbmFfdW5kIiwKKwkJLnN0YXJ0ID0gRVRIMF9UWF9VTkRfSVJRLAorCQkuZW5kID0gRVRIMF9UWF9VTkRfSVJRLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0sIHsKKwkJLm5hbWUgPSAia29yaW5hX2RtYV9yeCIsCisJCS5zdGFydCA9IEVUSDBfUlhfRE1BX0FERFIsCisJCS5lbmQgPSBFVEgwX1JYX0RNQV9BRERSICsgRE1BX0NIQU5fT0ZGU0VUIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJIH0sIHsKKwkJLm5hbWUgPSAia29yaW5hX2RtYV90eCIsCisJCS5zdGFydCA9IEVUSDBfVFhfRE1BX0FERFIsCisJCS5lbmQgPSBFVEgwX1RYX0RNQV9BRERSICsgRE1BX0NIQU5fT0ZGU0VUIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qga29yaW5hX2RldmljZSBrb3JpbmFfZGV2MF9kYXRhID0geworCS5uYW1lID0gImtvcmluYTAiLAorCS5tYWMgPSB7MHhkZSwgMHhjYSwgMHhmZiwgMHhjMCwgMHhmZiwgMHhlZX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtvcmluYV9kZXYwID0geworCS5pZCA9IDAsCisJLm5hbWUgPSAia29yaW5hIiwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAma29yaW5hX2RldjBfZGF0YSwKKwkucmVzb3VyY2UgPSBrb3JpbmFfZGV2MF9yZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGtvcmluYV9kZXYwX3JlcyksCit9OworCisjZGVmaW5lIENGX0dQSU9fTlVNIDEzCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2Zfc2xvdDBfcmVzW10gPSB7CisJeworCQkubmFtZSA9ICJjZl9tZW1iYXNlIiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5uYW1lID0gImNmX2lycSIsCisJCS5zdGFydCA9ICg4ICsgNCAqIDMyICsgQ0ZfR1BJT19OVU0pLAkvKiAxNDkgKi8KKwkJLmVuZCA9ICg4ICsgNCAqIDMyICsgQ0ZfR1BJT19OVU0pLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2ZfZGV2aWNlIGNmX3Nsb3QwX2RhdGEgPSB7CisJLmdwaW9fcGluID0gMTMKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNmX3Nsb3QwID0geworCS5pZCA9IDAsCisJLm5hbWUgPSAicGF0YS1yYjUzMi1jZiIsCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmNmX3Nsb3QwX2RhdGEsCisJLnJlc291cmNlID0gY2Zfc2xvdDBfcmVzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShjZl9zbG90MF9yZXMpLAorfTsKKworLyogUmVzb3VyY2VzIGFuZCBkZXZpY2UgZm9yIE5BTkQgKi8KK3N0YXRpYyBpbnQgcmI1MzJfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiByZWFkbChJRFQ0MzRfUkVHX0JBU0UgKyBHUElPRCkgJiBHUElPX1JEWTsKK30KKworc3RhdGljIHZvaWQgcmI1MzJfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgY2hhciBvcmJpdHMsIG5hbmRiaXRzOworCisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCW9yYml0cyA9IChjdHJsICYgTkFORF9DTEUpIDw8IDE7CisJCW9yYml0cyB8PSAoY3RybCAmIE5BTkRfQUxFKSA+PiAxOworCisJCW5hbmRiaXRzID0gKH5jdHJsICYgTkFORF9DTEUpIDw8IDE7CisJCW5hbmRiaXRzIHw9ICh+Y3RybCAmIE5BTkRfQUxFKSA+PiAxOworCisJCXNldF9sYXRjaF91NShvcmJpdHMsIG5hbmRiaXRzKTsKKwl9CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfc2xvdDBfcmVzW10gPSB7CisJWzBdID0geworCQkubmFtZSA9ICJuYW5kX21lbWJhc2UiLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIHJiNTMyX25hbmRfZGF0YSA9IHsKKwkuY3RybC5kZXZfcmVhZHkgPSByYjUzMl9kZXZfcmVhZHksCisJLmN0cmwuY21kX2N0cmwJPSByYjUzMl9jbWRfY3RybCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5hbmRfc2xvdDAgPSB7CisJLm5hbWUgPSAiZ2VuX25hbmQiLAorCS5pZCA9IC0xLAorCS5yZXNvdXJjZSA9IG5hbmRfc2xvdDBfcmVzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShuYW5kX3Nsb3QwX3JlcyksCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJnJiNTMyX25hbmRfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByYjUzMl9wYXJ0aXRpb25faW5mb1tdID0geworCXsKKwkJLm5hbWUgPSAiUm91dGVyYm9hcmQgTkFORCBib290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gNCAqIDEwMjQgKiAxMDI0LAorCX0sIHsKKwkJLm5hbWUgPSAicm9vdGZzIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJiNTMyX2xlZCA9IHsKKwkubmFtZSA9ICJyYjUzMi1sZWQiLAorCS5pZCA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcmI1MzJfZ3Bpb19idG5bXSA9IHsKKwl7CisJCS5ncGlvID0gMSwKKwkJLmNvZGUgPSBCVE5fMCwKKwkJLmRlc2MgPSAiUzEiLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSByYjUzMl9ncGlvX2J0bl9kYXRhID0geworCS5idXR0b25zID0gcmI1MzJfZ3Bpb19idG4sCisJLm5idXR0b25zID0gQVJSQVlfU0laRShyYjUzMl9ncGlvX2J0biksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByYjUzMl9idXR0b24gPSB7CisJLm5hbWUgCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcmI1MzJfZ3Bpb19idG5fZGF0YSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJiNTMyX3dkdF9yZXNbXSA9IHsKKwl7CisJCS5uYW1lID0gInJiNTMyX3dkdF9yZXMiLAorCQkuc3RhcnQgPSBJTlRFRzBfQkFTRV9BRERSLAorCQkuZW5kID0gSU5URUcwX0JBU0VfQUREUiArIHNpemVvZihzdHJ1Y3QgaW50ZWcpLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByYjUzMl93ZHQgPSB7CisJLm5hbWUgCQk9ICJyYzMyNDM0X3dkdCIsCisJLmlkIAkJPSAtMSwKKwkucmVzb3VyY2UgCT0gcmI1MzJfd2R0X3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmI1MzJfd2R0X3JlcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcmI1MzJfZGV2c1tdID0geworCSZrb3JpbmFfZGV2MCwKKwkmbmFuZF9zbG90MCwKKwkmY2Zfc2xvdDAsCisJJnJiNTMyX2xlZCwKKwkmcmI1MzJfYnV0dG9uLAorCSZyYjUzMl93ZHQKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9tYWNfYWRkcihjaGFyICptYWNzdHIpCit7CisJaW50IGksIGo7CisJdW5zaWduZWQgY2hhciByZXN1bHQsIHZhbHVlOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlyZXN1bHQgPSAwOworCisJCWlmIChpICE9IDUgJiYgKihtYWNzdHIgKyAyKSAhPSAnOicpCisJCQlyZXR1cm47CisKKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgeworCQkJaWYgKGlzeGRpZ2l0KCptYWNzdHIpCisJCQkgICAgJiYgKHZhbHVlID0KKwkJCQlpc2RpZ2l0KCptYWNzdHIpID8gKm1hY3N0ciAtCisJCQkJJzAnIDogdG91cHBlcigqbWFjc3RyKSAtICdBJyArIDEwKSA8IDE2KSB7CisJCQkJcmVzdWx0ID0gcmVzdWx0ICogMTYgKyB2YWx1ZTsKKwkJCQltYWNzdHIrKzsKKwkJCX0gZWxzZQorCQkJCXJldHVybjsKKwkJfQorCisJCW1hY3N0cisrOworCQlrb3JpbmFfZGV2MF9kYXRhLm1hY1tpXSA9IHJlc3VsdDsKKwl9Cit9CisKKworLyogREVWSUNFIENPTlRST0xMRVIgMSAqLworI2RlZmluZSBDRkdfRENfREVWMSAJKCh2b2lkICopMHhiODAxMDAxMCkKKyNkZWZpbmUgQ0ZHX0RDX0RFVjIgCSgodm9pZCAqKTB4YjgwMTAwMjApCisjZGVmaW5lIENGR19EQ19ERVZCQVNFICAgIDB4MAorI2RlZmluZSBDRkdfRENfREVWTUFTSyAgICAweDQKKyNkZWZpbmUgQ0ZHX0RDX0RFVkMgICAgICAgMHg4CisjZGVmaW5lIENGR19EQ19ERVZUQyAgICAgIDB4QworCisvKiBOQU5EIGRlZmluaXRpb25zICovCisjZGVmaW5lIE5BTkRfQ0hJUF9ERUxBWQkyNQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmI1MzJfbmFuZF9zZXR1cCh2b2lkKQoreworCXN3aXRjaCAobWlwc19tYWNodHlwZSkgeworCWNhc2UgTUFDSF9NSUtST1RJS19SQjUzMkE6CisJCXNldF9sYXRjaF91NShMT19GT0ZGIHwgTE9fQ0VYLAorCQkJCUxPX1VMRUQgfCBMT19BTEUgfCBMT19DTEUgfCBMT19XUFgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZXRfbGF0Y2hfdTUoTE9fV1BYIHwgTE9fRk9GRiB8IExPX0NFWCwKKwkJCQlMT19VTEVEIHwgTE9fQUxFIHwgTE9fQ0xFKTsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0dXAgTkFORCBzcGVjaWZpYyBzZXR0aW5ncyAqLworCXJiNTMyX25hbmRfZGF0YS5jaGlwLm5yX2NoaXBzID0gMTsKKwlyYjUzMl9uYW5kX2RhdGEuY2hpcC5ucl9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShyYjUzMl9wYXJ0aXRpb25faW5mbyk7CisJcmI1MzJfbmFuZF9kYXRhLmNoaXAucGFydGl0aW9ucyA9IHJiNTMyX3BhcnRpdGlvbl9pbmZvOworCXJiNTMyX25hbmRfZGF0YS5jaGlwLmNoaXBfZGVsYXkgPSBOQU5EX0NISVBfREVMQVk7CisJcmI1MzJfbmFuZF9kYXRhLmNoaXAub3B0aW9ucyA9IE5BTkRfTk9fQVVUT0lOQ1I7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9zZXR1cF9kZXZpY2VzKHZvaWQpCit7CisJLyogTG9vayBmb3IgdGhlIENGIGNhcmQgcmVhZGVyICovCisJaWYgKCFyZWFkbChDRkdfRENfREVWMSArIENGR19EQ19ERVZNQVNLKSkKKwkJcmI1MzJfZGV2c1sxXSA9IE5VTEw7CisJZWxzZSB7CisJCWNmX3Nsb3QwX3Jlc1swXS5zdGFydCA9CisJCSAgICByZWFkbChDRkdfRENfREVWMSArIENGR19EQ19ERVZCQVNFKTsKKwkJY2Zfc2xvdDBfcmVzWzBdLmVuZCA9IGNmX3Nsb3QwX3Jlc1swXS5zdGFydCArIDB4MTAwMDsKKwl9CisKKwkvKiBSZWFkIHRoZSBOQU5EIHJlc291cmNlcyBmcm9tIHRoZSBkZXZpY2UgY29udHJvbGxlciAqLworCW5hbmRfc2xvdDBfcmVzWzBdLnN0YXJ0ID0gcmVhZGwoQ0ZHX0RDX0RFVjIgKyBDRkdfRENfREVWQkFTRSk7CisJbmFuZF9zbG90MF9yZXNbMF0uZW5kID0gbmFuZF9zbG90MF9yZXNbMF0uc3RhcnQgKyAweDEwMDA7CisKKwkvKiBJbml0aWFsaXNlIHRoZSBOQU5EIGRldmljZSAqLworCXJiNTMyX25hbmRfc2V0dXAoKTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyYjUzMl9kZXZzLCBBUlJBWV9TSVpFKHJiNTMyX2RldnMpKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfa21hYyhjaGFyICpzKQoreworCXByaW50ayhLRVJOX0lORk8gImtvcmluYSBtYWMgPSAlc1xuIiwgcyk7CisJcGFyc2VfbWFjX2FkZHIocyk7CisJcmV0dXJuIDA7Cit9CisKK19fc2V0dXAoImttYWM9Iiwgc2V0dXBfa21hYyk7CisKK2FyY2hfaW5pdGNhbGwocGxhdF9zZXR1cF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9yYjUzMi9ncGlvLmMgYi9hcmNoL21pcHMvcmI1MzIvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmU4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcmI1MzIvZ3Bpby5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zIGZvciBJRFQgRUI0MzQgYm9hcmQKKyAqCisgKiAgQ29weXJpZ2h0IDIwMDQgSURUIEluYy4gKHJpc2NoZWxwQGlkdC5jb20pCisgKiAgQ29weXJpZ2h0IDIwMDYgUGhpbCBTdXR0ZXIgPG4wLTFAZnJlZXdydC5vcmc+CisgKiAgQ29weXJpZ2h0IDIwMDcgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JiLmg+CisKK3N0cnVjdCByYjUzMl9ncGlvX3JlZyBfX2lvbWVtICpyYjUzMl9ncGlvX3JlZzA7CitFWFBPUlRfU1lNQk9MKHJiNTMyX2dwaW9fcmVnMCk7CisKK3N0cnVjdCBtcG1jX2RldmljZSBkZXYzOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJiNTMyX2dwaW9fcmVnMF9yZXNbXSA9IHsKKwl7CisJCS5uYW1lIAk9ICJncGlvX3JlZzAiLAorCQkuc3RhcnQgCT0gKHUzMikoSURUNDM0X1JFR19CQVNFICsgR1BJT0JBU0UpLAorCQkuZW5kIAk9ICh1MzIpKElEVDQzNF9SRUdfQkFTRSArIEdQSU9CQVNFICsgc2l6ZW9mKHN0cnVjdCByYjUzMl9ncGlvX3JlZykpLAorCQkuZmxhZ3MgCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByYjUzMl9kZXYzX2N0bF9yZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gImRldjNfY3RsIiwKKwkJLnN0YXJ0CT0gKHUzMikoSURUNDM0X1JFR19CQVNFICsgREVWM0JBU0UpLAorCQkuZW5kCT0gKHUzMikoSURUNDM0X1JFR19CQVNFICsgREVWM0JBU0UgKyBzaXplb2Yoc3RydWN0IGRldl9yZWcpKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKwordm9pZCBzZXRfNDM0X3JlZyh1bnNpZ25lZCByZWdfb2ZmcywgdW5zaWduZWQgYml0LCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIHZhbCkKK3sKKwl1bnNpZ25lZCBmbGFncywgZGF0YTsKKwl1bnNpZ25lZCBpID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYzLmxvY2ssIGZsYWdzKTsKKworCWRhdGEgPSAqKHZvbGF0aWxlIHVuc2lnbmVkICopIChJRFQ0MzRfUkVHX0JBU0UgKyByZWdfb2Zmcyk7CisJZm9yIChpID0gMDsgaSAhPSBsZW47ICsraSkgeworCQlpZiAodmFsICYgKDEgPDwgaSkpCisJCQlkYXRhIHw9ICgxIDw8IChpICsgYml0KSk7CisJCWVsc2UKKwkJCWRhdGEgJj0gfigxIDw8IChpICsgYml0KSk7CisJfQorCXdyaXRlbChkYXRhLCAoSURUNDM0X1JFR19CQVNFICsgcmVnX29mZnMpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldjMubG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChzZXRfNDM0X3JlZyk7CisKK3Vuc2lnbmVkIGdldF80MzRfcmVnKHVuc2lnbmVkIHJlZ19vZmZzKQoreworCXJldHVybiByZWFkbChJRFQ0MzRfUkVHX0JBU0UgKyByZWdfb2Zmcyk7Cit9CitFWFBPUlRfU1lNQk9MKGdldF80MzRfcmVnKTsKKwordm9pZCBzZXRfbGF0Y2hfdTUodW5zaWduZWQgY2hhciBvcl9tYXNrLCB1bnNpZ25lZCBjaGFyIG5hbmRfbWFzaykKK3sKKwl1bnNpZ25lZCBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYzLmxvY2ssIGZsYWdzKTsKKworCWRldjMuc3RhdGUgPSAoZGV2My5zdGF0ZSB8IG9yX21hc2spICYgfm5hbmRfbWFzazsKKwl3cml0ZWwoZGV2My5zdGF0ZSwgJmRldjMuYmFzZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYzLmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woc2V0X2xhdGNoX3U1KTsKKwordW5zaWduZWQgY2hhciBnZXRfbGF0Y2hfdTUodm9pZCkKK3sKKwlyZXR1cm4gZGV2My5zdGF0ZTsKK30KK0VYUE9SVF9TWU1CT0woZ2V0X2xhdGNoX3U1KTsKKworaW50IHJiNTMyX2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIHJlYWRsKCZyYjUzMl9ncGlvX3JlZzAtPmdwaW9kKSAmICgxIDw8IGdwaW8pOworfQorRVhQT1JUX1NZTUJPTChyYjUzMl9ncGlvX2dldF92YWx1ZSk7CisKK3ZvaWQgcmI1MzJfZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIHRtcDsKKworCXRtcCA9IHJlYWRsKCZyYjUzMl9ncGlvX3JlZzAtPmdwaW9kKSAmIH4oMSA8PCBncGlvKTsKKwlpZiAodmFsdWUpCisJCXRtcCB8PSAxIDw8IGdwaW87CisKKwl3cml0ZWwodG1wLCAodm9pZCAqKSZyYjUzMl9ncGlvX3JlZzAtPmdwaW9kKTsKK30KK0VYUE9SVF9TWU1CT0wocmI1MzJfZ3Bpb19zZXRfdmFsdWUpOworCitpbnQgcmI1MzJfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3sKKwl3cml0ZWwocmVhZGwoJnJiNTMyX2dwaW9fcmVnMC0+Z3Bpb2NmZykgJiB+KDEgPDwgZ3BpbyksCisJICAgICAgICh2b2lkICopJnJiNTMyX2dwaW9fcmVnMC0+Z3Bpb2NmZyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocmI1MzJfZ3Bpb19kaXJlY3Rpb25faW5wdXQpOworCitpbnQgcmI1MzJfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7CisJd3JpdGVsKHJlYWRsKCZyYjUzMl9ncGlvX3JlZzAtPmdwaW9jZmcpIHwgKDEgPDwgZ3BpbyksCisJICAgICAgICh2b2lkICopJnJiNTMyX2dwaW9fcmVnMC0+Z3Bpb2NmZyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocmI1MzJfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKKwordm9pZCByYjUzMl9ncGlvX3NldF9pbnRfbGV2ZWwodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIHRtcDsKKworCXRtcCA9IHJlYWRsKCZyYjUzMl9ncGlvX3JlZzAtPmdwaW9pbGV2ZWwpICYgfigxIDw8IGdwaW8pOworCWlmICh2YWx1ZSkKKwkJdG1wIHw9IDEgPDwgZ3BpbzsKKwl3cml0ZWwodG1wLCAodm9pZCAqKSZyYjUzMl9ncGlvX3JlZzAtPmdwaW9pbGV2ZWwpOworfQorRVhQT1JUX1NZTUJPTChyYjUzMl9ncGlvX3NldF9pbnRfbGV2ZWwpOworCitpbnQgcmI1MzJfZ3Bpb19nZXRfaW50X2xldmVsKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIHJlYWRsKCZyYjUzMl9ncGlvX3JlZzAtPmdwaW9pbGV2ZWwpICYgKDEgPDwgZ3Bpbyk7Cit9CitFWFBPUlRfU1lNQk9MKHJiNTMyX2dwaW9fZ2V0X2ludF9sZXZlbCk7CisKK3ZvaWQgcmI1MzJfZ3Bpb19zZXRfaW50X3N0YXR1cyh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgdG1wOworCisJdG1wID0gcmVhZGwoJnJiNTMyX2dwaW9fcmVnMC0+Z3Bpb2lzdGF0KTsKKwlpZiAodmFsdWUpCisJCXRtcCB8PSAxIDw8IGdwaW87CisJd3JpdGVsKHRtcCwgKHZvaWQgKikmcmI1MzJfZ3Bpb19yZWcwLT5ncGlvaXN0YXQpOworfQorRVhQT1JUX1NZTUJPTChyYjUzMl9ncGlvX3NldF9pbnRfc3RhdHVzKTsKKworaW50IHJiNTMyX2dwaW9fZ2V0X2ludF9zdGF0dXModW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gcmVhZGwoJnJiNTMyX2dwaW9fcmVnMC0+Z3Bpb2lzdGF0KSAmICgxIDw8IGdwaW8pOworfQorRVhQT1JUX1NZTUJPTChyYjUzMl9ncGlvX2dldF9pbnRfc3RhdHVzKTsKKwordm9pZCByYjUzMl9ncGlvX3NldF9mdW5jKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCB0bXA7CisKKwl0bXAgPSByZWFkbCgmcmI1MzJfZ3Bpb19yZWcwLT5ncGlvZnVuYyk7CisJaWYgKHZhbHVlKQorCQl0bXAgfD0gMSA8PCBncGlvOworCXdyaXRlbCh0bXAsICh2b2lkICopJnJiNTMyX2dwaW9fcmVnMC0+Z3Bpb2Z1bmMpOworfQorRVhQT1JUX1NZTUJPTChyYjUzMl9ncGlvX3NldF9mdW5jKTsKKworaW50IHJiNTMyX2dwaW9fZ2V0X2Z1bmModW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gcmVhZGwoJnJiNTMyX2dwaW9fcmVnMC0+Z3Bpb2Z1bmMpICYgKDEgPDwgZ3Bpbyk7Cit9CitFWFBPUlRfU1lNQk9MKHJiNTMyX2dwaW9fZ2V0X2Z1bmMpOworCitpbnQgX19pbml0IHJiNTMyX2dwaW9faW5pdCh2b2lkKQoreworCXJiNTMyX2dwaW9fcmVnMCA9IGlvcmVtYXBfbm9jYWNoZShyYjUzMl9ncGlvX3JlZzBfcmVzWzBdLnN0YXJ0LAorCQkJCXJiNTMyX2dwaW9fcmVnMF9yZXNbMF0uZW5kIC0KKwkJCQlyYjUzMl9ncGlvX3JlZzBfcmVzWzBdLnN0YXJ0KTsKKworCWlmICghcmI1MzJfZ3Bpb19yZWcwKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmI1MzI6IGNhbm5vdCByZW1hcCBHUElPIHJlZ2lzdGVyIDBcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWRldjMuYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyYjUzMl9kZXYzX2N0bF9yZXNbMF0uc3RhcnQsCisJCQkJcmI1MzJfZGV2M19jdGxfcmVzWzBdLmVuZCAtCisJCQkJcmI1MzJfZGV2M19jdGxfcmVzWzBdLnN0YXJ0KTsKKworCWlmICghZGV2My5iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmI1MzI6IGNhbm5vdCByZW1hcCBkZXZpY2UgY29udHJvbGxlciAzXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwocmI1MzJfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9yYjUzMi9pcnEuYyBiL2FyY2gvbWlwcy9yYjUzMi9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQwZjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3JiNTMyL2lycS5jCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIENvcHlyaWdodCAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgICAgICAgc3RldmVsQG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JjMzI0MzQuaD4KKworc3RydWN0IGludHJfZ3JvdXAgeworCXUzMiBtYXNrOwkvKiBtYXNrIG9mIHZhbGlkIGJpdHMgaW4gcGVuZGluZy9tYXNrIHJlZ2lzdGVycyAqLworCXZvbGF0aWxlIHUzMiAqYmFzZV9hZGRyOworfTsKKworI2RlZmluZSBSQzMyNDM0X05SX0lSUVMgIChHUk9VUDRfSVJRX0JBU0UgKyAzMikKKworI2lmIChOUl9JUlFTIDwgUkMzMjQzNF9OUl9JUlFTKQorI2Vycm9yIFRvbyBsaXR0bGUgaXJxcyBkZWZpbmVkLiBEaWQgeW91IG92ZXJyaWRlIDxhc20vaXJxLmg+ID8KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfZ3JvdXAgaW50cl9ncm91cFtOVU1fSU5UUl9HUk9VUFNdID0geworCXsKKwkJLm1hc2sJPSAweDAwMDBlZmZmLAorCQkuYmFzZV9hZGRyID0gKHUzMiAqKSBLU0VHMUFERFIoSUNfR1JPVVAwX1BFTkQgKyAwICogSUNfR1JPVVBfT0ZGU0VUKX0sCisJeworCQkubWFzawk9IDB4MDAwMDFmZmYsCisJCS5iYXNlX2FkZHIgPSAodTMyICopIEtTRUcxQUREUihJQ19HUk9VUDBfUEVORCArIDEgKiBJQ19HUk9VUF9PRkZTRVQpfSwKKwl7CisJCS5tYXNrCT0gMHgwMDAwMDAwNywKKwkJLmJhc2VfYWRkciA9ICh1MzIgKikgS1NFRzFBRERSKElDX0dST1VQMF9QRU5EICsgMiAqIElDX0dST1VQX09GRlNFVCl9LAorCXsKKwkJLm1hc2sJPSAweDAwMDNmZmZmLAorCQkuYmFzZV9hZGRyID0gKHUzMiAqKSBLU0VHMUFERFIoSUNfR1JPVVAwX1BFTkQgKyAzICogSUNfR1JPVVBfT0ZGU0VUKX0sCisJeworCQkubWFzawk9IDB4ZmZmZmZmZmYsCisJCS5iYXNlX2FkZHIgPSAodTMyICopIEtTRUcxQUREUihJQ19HUk9VUDBfUEVORCArIDQgKiBJQ19HUk9VUF9PRkZTRVQpfQorfTsKKworI2RlZmluZSBSRUFEX1BFTkQoYmFzZSkgKCooYmFzZSkpCisjZGVmaW5lIFJFQURfTUFTSyhiYXNlKSAoKihiYXNlICsgMikpCisjZGVmaW5lIFdSSVRFX01BU0soYmFzZSwgdmFsKSAoKihiYXNlICsgMikgPSAodmFsKSkKKworc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dyb3VwKHVuc2lnbmVkIGludCBpcnFfbnIpCit7CisJcmV0dXJuIChpcnFfbnIgLSBHUk9VUDBfSVJRX0JBU0UpID4+IDU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdyb3VwX3RvX2lwKHVuc2lnbmVkIGludCBncm91cCkKK3sKKwlyZXR1cm4gZ3JvdXAgKyAyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2xvY2FsX2lycSh1bnNpZ25lZCBpbnQgaXApCit7CisJaW50IGlwbnVtID0gMHgxMDAgPDwgaXA7CisKKwlzZXRfYzBfc3RhdHVzKGlwbnVtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbG9jYWxfaXJxKHVuc2lnbmVkIGludCBpcCkKK3sKKwlpbnQgaXBudW0gPSAweDEwMCA8PCBpcDsKKworCWNsZWFyX2MwX3N0YXR1cyhpcG51bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfbG9jYWxfaXJxKHVuc2lnbmVkIGludCBpcCkKK3sKKwlpbnQgaXBudW0gPSAweDEwMCA8PCBpcDsKKworCWNsZWFyX2MwX2NhdXNlKGlwbnVtKTsKK30KKworc3RhdGljIHZvaWQgcmI1MzJfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCWludCBpcCA9IGlycV9uciAtIEdST1VQMF9JUlFfQkFTRTsKKwl1bnNpZ25lZCBpbnQgZ3JvdXAsIGludHJfYml0OworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYWRkcjsKKworCWlmIChpcCA8IDApCisJCWVuYWJsZV9sb2NhbF9pcnEoaXJxX25yKTsKKwllbHNlIHsKKwkJZ3JvdXAgPSBpcCA+PiA1OworCisJCWlwICY9ICgxIDw8IDUpIC0gMTsKKwkJaW50cl9iaXQgPSAxIDw8IGlwOworCisJCWVuYWJsZV9sb2NhbF9pcnEoZ3JvdXBfdG9faXAoZ3JvdXApKTsKKworCQlhZGRyID0gaW50cl9ncm91cFtncm91cF0uYmFzZV9hZGRyOworCQlXUklURV9NQVNLKGFkZHIsIFJFQURfTUFTSyhhZGRyKSAmIH5pbnRyX2JpdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByYjUzMl9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCWludCBpcCA9IGlycV9uciAtIEdST1VQMF9JUlFfQkFTRTsKKwl1bnNpZ25lZCBpbnQgZ3JvdXAsIGludHJfYml0LCBtYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYWRkcjsKKworCWlmIChpcCA8IDApIHsKKwkJZGlzYWJsZV9sb2NhbF9pcnEoaXJxX25yKTsKKwl9IGVsc2UgeworCQlncm91cCA9IGlwID4+IDU7CisKKwkJaXAgJj0gKDEgPDwgNSkgLSAxOworCQlpbnRyX2JpdCA9IDEgPDwgaXA7CisJCWFkZHIgPSBpbnRyX2dyb3VwW2dyb3VwXS5iYXNlX2FkZHI7CisJCW1hc2sgPSBSRUFEX01BU0soYWRkcik7CisJCW1hc2sgfD0gaW50cl9iaXQ7CisJCVdSSVRFX01BU0soYWRkciwgbWFzayk7CisKKwkJLyoKKwkJICogaWYgdGhlcmUgYXJlIG5vIG1vcmUgaW50ZXJydXB0cyBlbmFibGVkIGluIHRoaXMKKwkJICogZ3JvdXAsIGRpc2FibGUgY29ycmVzcG9uZGluZyBJUAorCQkgKi8KKwkJaWYgKG1hc2sgPT0gaW50cl9ncm91cFtncm91cF0ubWFzaykKKwkJCWRpc2FibGVfbG9jYWxfaXJxKGdyb3VwX3RvX2lwKGdyb3VwKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCByYjUzMl9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCit7CisJcmI1MzJfZGlzYWJsZV9pcnEoaXJxX25yKTsKKwlhY2tfbG9jYWxfaXJxKGdyb3VwX3RvX2lwKGlycV90b19ncm91cChpcnFfbnIpKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcmMzMjQzNF9pcnFfdHlwZSA9IHsKKwkubmFtZQkJPSAiUkI1MzIiLAorCS5hY2sJCT0gcmI1MzJfZGlzYWJsZV9pcnEsCisJLm1hc2sJCT0gcmI1MzJfZGlzYWJsZV9pcnEsCisJLm1hc2tfYWNrCT0gcmI1MzJfbWFza19hbmRfYWNrX2lycSwKKwkudW5tYXNrCQk9IHJiNTMyX2VuYWJsZV9pcnEsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGk7CisKKwlwcl9pbmZvKCJJbml0aWFsaXppbmcgSVJRJ3M6ICVkIG91dCBvZiAlZFxuIiwgUkMzMjQzNF9OUl9JUlFTLCBOUl9JUlFTKTsKKworCWZvciAoaSA9IDA7IGkgPCBSQzMyNDM0X05SX0lSUVM7IGkrKykKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICAmcmMzMjQzNF9pcnFfdHlwZSwKKwkJCQkJaGFuZGxlX2xldmVsX2lycSk7Cit9CisKKy8qIE1haW4gSW50ZXJydXB0IGRpc3BhdGNoZXIgKi8KK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpcCwgcGVuZCwgZ3JvdXA7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphZGRyOworCXVuc2lnbmVkIGludCBjcDBfY2F1c2UgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKGNwMF9jYXVzZSAmIENBVVNFRl9JUDcpIHsKKwkJZG9fSVJRKDcpOworCX0gZWxzZSB7CisJCWlwID0gKGNwMF9jYXVzZSAmIDB4N2MwMCk7CisJCWlmIChpcCkgeworCQkJZ3JvdXAgPSAyMSArIChmbHMoaXApIC0gMzIpOworCisJCQlhZGRyID0gaW50cl9ncm91cFtncm91cF0uYmFzZV9hZGRyOworCisJCQlwZW5kID0gUkVBRF9QRU5EKGFkZHIpOworCQkJcGVuZCAmPSB+UkVBRF9NQVNLKGFkZHIpOwkvKiBvbmx5IHVubWFza2VkIGludGVycnVwdHMgKi8KKwkJCXBlbmQgPSAzOSArIChmbHMocGVuZCkgLSAzMik7CisJCQlkb19JUlEoKGdyb3VwIDw8IDUpICsgcGVuZCk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcmI1MzIvcHJvbS5jIGIvYXJjaC9taXBzL3JiNTMyL3Byb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmMwYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3JiNTMyL3Byb20uYwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqICBSb3V0ZXJCb2FyZCA1MDAgc3BlY2lmaWMgcHJvbSByb3V0aW5lcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIFBldGVyIFNhZGlrIDxwZXRlci5zYWRpa0BpZHQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA2LCBQLkNocmlzdGVhcyA8cF9jaHJpc3RAaG9sLmdyPgorICogIENvcHlyaWdodCAoQykgMjAwNywgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqCQkJRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgorICoJCQlGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9kZHIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3Byb20uaD4KKworZXh0ZXJuIHZvaWQgX19pbml0IHNldHVwX3NlcmlhbF9wb3J0KHZvaWQpOworCit1bnNpZ25lZCBpbnQgaWR0X2NwdV9mcmVxID0gMTMyMDAwMDAwOworRVhQT1JUX1NZTUJPTChpZHRfY3B1X2ZyZXEpOwordW5zaWduZWQgaW50IGdwaW9fYm9vdHVwX3N0YXRlOworRVhQT1JUX1NZTUJPTChncGlvX2Jvb3R1cF9zdGF0ZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGRyX3JlZ1tdID0geworCXsKKwkJLm5hbWUgPSAiZGRyLXJlZyIsCisJCS5zdGFydCA9IEREUjBfUEhZU19BRERSLAorCQkuZW5kID0gRERSMF9QSFlTX0FERFIgKyBzaXplb2Yoc3RydWN0IGRkcl9yYW0pLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCit2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKK3sKKwkvKiBObyBwcm9tIG1lbW9yeSB0byBmcmVlICovCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hdGNoX3RhZyhjaGFyICphcmcsIGNvbnN0IGNoYXIgKnRhZykKK3sKKwlyZXR1cm4gc3RybmNtcChhcmcsIHRhZywgc3RybGVuKHRhZykpID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0YWcydWwoY2hhciAqYXJnLCBjb25zdCBjaGFyICp0YWcpCit7CisJY2hhciAqbnVtOworCisJbnVtID0gYXJnICsgc3RybGVuKHRhZyk7CisJcmV0dXJuIHNpbXBsZV9zdHJ0b3VsKG51bSwgMCwgMTApOworfQorCit2b2lkIF9faW5pdCBwcm9tX3NldHVwX2NtZGxpbmUodm9pZCkKK3sKKwljaGFyIGNtZF9saW5lW0NMX1NJWkVdOworCWNoYXIgKmNwLCAqYm9hcmQ7CisJaW50IHByb21fYXJnYzsKKwljaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKKwlpbnQgaTsKKworCXByb21fYXJnYyA9IGZ3X2FyZzA7CisJcHJvbV9hcmd2ID0gKGNoYXIgKiopIGZ3X2FyZzE7CisJcHJvbV9lbnZwID0gKGNoYXIgKiopIGZ3X2FyZzI7CisKKwljcCA9IGNtZF9saW5lOworCQkvKiBOb3RlOiBpdCBpcyBjb21tb24gdGhhdCBwYXJhbWV0ZXJzIHN0YXJ0CisJCSAqIGF0IGFyZ3ZbMV0gYW5kIG5vdCBhcmd2WzBdLAorCQkgKiBob3dldmVyLCBvdXIgZWxmIGxvYWRlciBzdGFydHMgYXQgWzBdICovCisJZm9yIChpID0gMDsgaSA8IHByb21fYXJnYzsgaSsrKSB7CisJCWlmIChtYXRjaF90YWcocHJvbV9hcmd2W2ldLCBGUkVRX1RBRykpIHsKKwkJCWlkdF9jcHVfZnJlcSA9IHRhZzJ1bChwcm9tX2FyZ3ZbaV0sIEZSRVFfVEFHKTsKKwkJCWNvbnRpbnVlOworCQl9CisjaWZkZWYgSUdOT1JFX0NNRExJTkVfTUVNCisJCS8qIHBhcnNlcyBvdXQgdGhlICJtZW09eHgiIGFyZyAqLworCQlpZiAobWF0Y2hfdGFnKHByb21fYXJndltpXSwgTUVNX1RBRykpCisJCQljb250aW51ZTsKKyNlbmRpZgorCQlpZiAoaSA+IDApCisJCQkqKGNwKyspID0gJyAnOworCQlpZiAobWF0Y2hfdGFnKHByb21fYXJndltpXSwgQk9BUkRfVEFHKSkgeworCQkJYm9hcmQgPSBwcm9tX2FyZ3ZbaV0gKyBzdHJsZW4oQk9BUkRfVEFHKTsKKworCQkJaWYgKG1hdGNoX3RhZyhib2FyZCwgQk9BUkRfUkI1MzJBKSkKKwkJCQltaXBzX21hY2h0eXBlID0gTUFDSF9NSUtST1RJS19SQjUzMkE7CisJCQllbHNlCisJCQkJbWlwc19tYWNodHlwZSA9IE1BQ0hfTUlLUk9USUtfUkI1MzI7CisJCX0KKworCQlpZiAobWF0Y2hfdGFnKHByb21fYXJndltpXSwgR1BJT19UQUcpKQorCQkJZ3Bpb19ib290dXBfc3RhdGUgPSB0YWcydWwocHJvbV9hcmd2W2ldLCBHUElPX1RBRyk7CisKKwkJc3RyY3B5KGNwLCBwcm9tX2FyZ3ZbaV0pOworCQljcCArPSBzdHJsZW4ocHJvbV9hcmd2W2ldKTsKKwl9CisJKihjcCsrKSA9ICcgJzsKKworCWkgPSBzdHJsZW4oYXJjc19jbWRsaW5lKTsKKwlpZiAoaSA+IDApIHsKKwkJKihjcCsrKSA9ICcgJzsKKwkJc3RyY3B5KGNwLCBhcmNzX2NtZGxpbmUpOworCQljcCArPSBzdHJsZW4oYXJjc19jbWRsaW5lKTsKKwl9CisJaWYgKGdwaW9fYm9vdHVwX3N0YXRlICYgMHgwMikKKwkJc3RyY3B5KGNwLCBHUElPX0lOSVRfTk9CVVRUT04pOworCWVsc2UKKwkJc3RyY3B5KGNwLCBHUElPX0lOSVRfQlVUVE9OKTsKKworCWNtZF9saW5lW0NMX1NJWkUtMV0gPSAnXDAnOworCisJc3RyY3B5KGFyY3NfY21kbGluZSwgY21kX2xpbmUpOworfQorCit2b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGRyX3JhbSBfX2lvbWVtICpkZHI7CisJcGh5c190IG1lbXNpemU7CisJcGh5c190IGRkcmJhc2U7CisKKwlkZHIgPSBpb3JlbWFwX25vY2FjaGUoZGRyX3JlZ1swXS5zdGFydCwKKwkJCWRkcl9yZWdbMF0uZW5kIC0gZGRyX3JlZ1swXS5zdGFydCk7CisKKwlpZiAoIWRkcikgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZW1hcCBERFIgcmVnaXN0ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJZGRyYmFzZSA9IChwaHlzX3QpJmRkci0+ZGRyYmFzZTsKKwltZW1zaXplID0gKHBoeXNfdCkmZGRyLT5kZHJtYXNrOworCW1lbXNpemUgPSAwIC0gbWVtc2l6ZTsKKworCXByb21fc2V0dXBfY21kbGluZSgpOworCisJLyogZ2l2ZSBhbGwgUkFNIHRvIGJvb3QgYWxsb2NhdG9yLAorCSAqIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IDB4NDAwIGFuZCB0aGUgbGFzdCAweDIwMCBieXRlcyAqLworCWFkZF9tZW1vcnlfcmVnaW9uKGRkcmJhc2UgKyAweDQwMCwgbWVtc2l6ZSAtIDB4NjAwLCBCT09UX01FTV9SQU0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3JiNTMyL3NlcmlhbC5jIGIvYXJjaC9taXBzL3JiNTMyL3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDViNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcmI1MzIvc2VyaWFsLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqICAgICBTZXJpYWwgcG9ydCBpbml0aWFsaXNhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IDIwMDQgSURUIEluYy4gKHJpc2NoZWxwQGlkdC5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvcmMzMjQzNC5oPgorCitleHRlcm4gdW5zaWduZWQgaW50IGlkdF9jcHVfZnJlcTsKKworc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgcmI1MzJfdWFydCA9IHsKKwkudHlwZSA9IFBPUlRfMTY1NTBBLAorCS5saW5lID0gMCwKKwkuaXJxID0gUkMzMjQzNF9VQVJUMF9JUlEsCisJLmlvdHlwZSA9IFVQSU9fTUVNLAorCS5tZW1iYXNlID0gKGNoYXIgKilLU0VHMUFERFIoUkMzMjQzNF9VQVJUMF9CQVNFKSwKKwkucmVnc2hpZnQgPSAyCit9OworCitpbnQgX19pbml0IHNldHVwX3NlcmlhbF9wb3J0KHZvaWQpCit7CisJcmI1MzJfdWFydC51YXJ0Y2xrID0gaWR0X2NwdV9mcmVxOworCisJcmV0dXJuIGVhcmx5X3NlcmlhbF9zZXR1cCgmcmI1MzJfdWFydCk7Cit9CithcmNoX2luaXRjYWxsKHNldHVwX3NlcmlhbF9wb3J0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9yYjUzMi9zZXR1cC5jIGIvYXJjaC9taXBzL3JiNTMyL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhZmE5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9yYjUzMi9zZXR1cC5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBzZXR1cC5jIC0gYm9vdCB0aW1lIHNldHVwIGNvZGUKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JjMzI0MzQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3BjaS5oPgorCitzdHJ1Y3QgcGNpX3JlZyBfX2lvbWVtICpwY2lfcmVnOworRVhQT1JUX1NZTUJPTChwY2lfcmVnKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2kwX3Jlc1tdID0geworCXsKKwkJLm5hbWUgPSAicGNpX3JlZzAiLAorCQkuc3RhcnQgPSBQQ0kwX0JBU0VfQUREUiwKKwkJLmVuZCA9IFBDSTBfQkFTRV9BRERSICsgc2l6ZW9mKHN0cnVjdCBwY2lfcmVnKSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHZvaWQgcmJfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpCit7CisJLyoganVzdCBqdW1wIHRvIHRoZSByZXNldCB2ZWN0b3IgKi8KKwl3cml0ZWwoMHg4MDAwMDAwMSwgKHZvaWQgKilLU0VHMUFERFIoUkMzMjQzNF9SRUdfQkFTRSArIFJDMzI0MzRfUlNUKSk7CisJKCh2b2lkICgqKSh2b2lkKSkgS1NFRzFBRERSKDB4MUZDMDAwMDB1KSkoKTsKK30KKworc3RhdGljIHZvaWQgcmJfbWFjaGluZV9oYWx0KHZvaWQpCit7CisJZm9yICg7OykKKwkJY29udGludWU7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCit7CisJdTMyIHZhbDsKKworCV9tYWNoaW5lX3Jlc3RhcnQgPSByYl9tYWNoaW5lX3Jlc3RhcnQ7CisJX21hY2hpbmVfaGFsdCA9IHJiX21hY2hpbmVfaGFsdDsKKwlwbV9wb3dlcl9vZmYgPSByYl9tYWNoaW5lX2hhbHQ7CisKKwlzZXRfaW9fcG9ydF9iYXNlKEtTRUcxKTsKKworCXBjaV9yZWcgPSBpb3JlbWFwX25vY2FjaGUocGNpMF9yZXNbMF0uc3RhcnQsCisJCQkJcGNpMF9yZXNbMF0uZW5kIC0gcGNpMF9yZXNbMF0uc3RhcnQpOworCWlmICghcGNpX3JlZykgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCByZW1hcCBQQ0kgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXZhbCA9IF9fcmF3X3JlYWRsKCZwY2lfcmVnLT5wY2ljKTsKKwl2YWwgJj0gMHhGRkZGRkY3OworCV9fcmF3X3dyaXRlbCh2YWwsICh2b2lkICopJnBjaV9yZWctPnBjaWMpOworCisjaWZkZWYgQ09ORklHX1BDSQorCS8qIEVuYWJsZSBQQ0kgaW50ZXJydXB0cyBpbiBFUExEIE1hc2sgcmVnaXN0ZXIgKi8KKwkqZXBsZF9tYXNrID0gMHgwOworCSooZXBsZF9tYXNrICsgMSkgPSAweDA7CisjZW5kaWYKKwl3cml0ZV9jMF93aXJlZCgwKTsKK30KKworY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCit7CisJc3dpdGNoIChtaXBzX21hY2h0eXBlKSB7CisJY2FzZSBNQUNIX01JS1JPVElLX1JCNTMyQToKKwkJcmV0dXJuICJNaWtyb3RpayBSQjUzMkEiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIk1pa3JvdGlrIFJCNTMyIjsKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3JiNTMyL3RpbWUuYyBiL2FyY2gvbWlwcy9yYjUzMi90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3NGVkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9yYjUzMi90aW1lLmMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogIFNldHRpbmcgdXAgdGhlIGNsb2NrIG9uIHRoZSBNSVBTIGJvYXJkcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKworI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9yYzMyNDM0Lmg+CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgaWR0X2NwdV9mcmVxOworCisvKgorICogRmlndXJlIG91dCB0aGUgcjRrIG9mZnNldCwgdGhlIGFtb3VudCB0byBpbmNyZW1lbnQgdGhlIGNvbXBhcmUKKyAqIHJlZ2lzdGVyIGZvciBlYWNoIHRpbWUgdGljay4gVGhlcmUgaXMgbm8gUlRDIGF2YWlsYWJsZS4KKyAqCisgKiBUaGUgUkMzMjQzNCBjb3VudHMgYXQgaGFsZiB0aGUgQ1BVICpjb3JlKiBzcGVlZC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGNhbF9yNGtvZmYodm9pZCkKK3sKKwltaXBzX2hwdF9mcmVxdWVuY3kgPSBpZHRfY3B1X2ZyZXEgKiBJRFRfQ0xPQ0tfTVVMVCAvIDI7CisKKwlyZXR1cm4gbWlwc19ocHRfZnJlcXVlbmN5IC8gSFo7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGVzdF9mcmVxLCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHI0a19vZmZzZXQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlwcmludGsoS0VSTl9JTkZPICJjYWxjdWxhdGluZyByNGtvZmYuLi4gIik7CisJcjRrX29mZnNldCA9IGNhbF9yNGtvZmYoKTsKKwlwcmludGsoIiUwOGx4KCVkKVxuIiwgcjRrX29mZnNldCwgKGludCkgcjRrX29mZnNldCk7CisKKwllc3RfZnJlcSA9IDIgKiByNGtfb2Zmc2V0ICogSFo7CisJZXN0X2ZyZXEgKz0gNTAwMDsJLyogcm91bmQgKi8KKwllc3RfZnJlcSAtPSBlc3RfZnJlcSAlIDEwMDAwOworCXByaW50ayhLRVJOX0lORk8gIkNQVSBmcmVxdWVuY3kgJWQuJTAyZCBNSHpcbiIsIGVzdF9mcmVxIC8gMTAwMDAwMCwKKwkgICAgICAgKGVzdF9mcmVxICUgMTAwMDAwMCkgKiAxMDAgLyAxMDAwMDAwKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYwppbmRleCBmYzZkZjk2Li42MDE0MTIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKQEAgLTE4OCw4ICsxODgsNyBAQAogCWlmIChpcDIyX2lzX2Z1bGxob3VzZSgpKQogCQlyZXR1cm4gMDsgLyogZnVsbCBob3VzZSBoYXMgbm8gdm9sdW1lIGJ1dHRvbnMgKi8KIAotCXJldHVybiBJU19FUlIocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgic2dpaW5keWJ0bnMiLAotCQkJCQkJICAgICAgLTEsIE5VTEwsIDApKTsKKwlyZXR1cm4gSVNfRVJSKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInNnaWJ0bnMiLCAtMSwgTlVMTCwgMCkpOwogfQogCiBkZXZpY2VfaW5pdGNhbGwoc2dpX2J1dHRvbl9kZXZpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDI4LWJlcnIuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDI4LWJlcnIuYwppbmRleCBmZWU3YTJlLi4zMGUxMmUyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyOC1iZXJyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjgtYmVyci5jCkBAIC00MTIsNyArNDEyLDcgQEAKIAkgKiBOb3cgd2UgaGF2ZSBhbiBhc3luY2hyb25vdXMgYnVzIGVycm9yLCBzcGVjdWxhdGl2ZWx5IG9yIERNQSBjYXVzZWQuCiAJICogTmVlZCB0byBzZWFyY2ggYWxsIERNQSBkZXNjcmlwdG9ycyBmb3IgdGhlIGVycm9yIGFkZHJlc3MuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHBjMyk7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaHBjMykvc2l6ZW9mKHN0cnVjdCBocGMzX3N0YXQpOyArK2kpIHsKIAkJc3RydWN0IGhwYzNfc3RhdCAqaHAgPSAoc3RydWN0IGhwYzNfc3RhdCAqKSZocGMzICsgaTsKIAkJaWYgKChjcHVfZXJyX3N0YXQgJiBDUFVfRVJSTUFTSykgJiYKIAkJICAgIChjcHVfZXJyX2FkZHIgPT0gaHAtPm5kcHRyIHx8IGNwdV9lcnJfYWRkciA9PSBocC0+Y2JwKSkKQEAgLTQyMSw3ICs0MjEsNyBAQAogCQkgICAgKGdpb19lcnJfYWRkciA9PSBocC0+bmRwdHIgfHwgZ2lvX2Vycl9hZGRyID09IGhwLT5jYnApKQogCQkJYnJlYWs7CiAJfQotCWlmIChpIDwgQVJSQVlfU0laRShocGMzKSkgeworCWlmIChpIDwgc2l6ZW9mKGhwYzMpL3NpemVvZihzdHJ1Y3QgaHBjM19zdGF0KSkgewogCQlzdHJ1Y3QgaHBjM19zdGF0ICpocCA9IChzdHJ1Y3QgaHBjM19zdGF0ICopJmhwYzMgKyBpOwogCQlwcmludGsoS0VSTl9FUlIgImF0IERNQSBhZGRyZXNzZXM6IEhQQzMgQCAlMDhseDoiCiAJCSAgICAgICAiIGN0bCAlMDh4LCBuZHAgJTA4eCwgY2JwICUwOHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItcGxhdGZvcm0uYwppbmRleCAyZWU0MDFiLi4zZDYzNzIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXBsYXRmb3JtLmMKQEAgLTg1LDE4ICs4NSw3IEBACiAKIHN0YXRpYyBfX2luaXQgaW50IHNnaW8yYnRuc19kZXZpbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7Ci0JaW50IHJldDsKLQotCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzZ2lvMmJ0bnMiLCAtMSk7Ci0JaWYgKCFwZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKLQlpZiAocmV0KQotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIElTX0VSUihwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJzZ2lidG5zIiwgLTEsIE5VTEwsIDApKTsKIH0KIAogZGV2aWNlX2luaXRjYWxsKHNnaW8yYnRuc19kZXZpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKaW5kZXggMjhiMDEyYS4uNjZlM2UzZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKQEAgLTU3Niw3ICs1NzYsOCBAQAogCiAJdGJfY2xhc3MgPSB0YmM7CiAKLQlkZXYgPSBkZXZpY2VfY3JlYXRlKHRiYywgTlVMTCwgTUtERVYoU0JQUk9GX1RCX01BSk9SLCAwKSwgInRiIik7CisJZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHRiYywgTlVMTCwgTUtERVYoU0JQUk9GX1RCX01BSk9SLCAwKSwKKwkJCQkgICAgTlVMTCwgInRiIik7CiAJaWYgKElTX0VSUihkZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGV2KTsKIAkJZ290byBvdXRfY2xhc3M7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9LY29uZmlnIGIvYXJjaC9taXBzL3R4eDkvS2NvbmZpZwppbmRleCBiOTJhMTM0Li42ZGU0YzVhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy90eHg5L0tjb25maWcKQEAgLTcsNiArNyw4IEBACiAJYm9vbCAiVG9zaGliYSBSQlRYNDlbMjNdNyBib2FyZCIKIAlkZXBlbmRzIG9uIE1BQ0hfVFg0OVhYCiAJc2VsZWN0IFNPQ19UWDQ5MjcKKwkjIFRYNDkzNyBpcyBzdWJzZXQgb2YgVFg0OTM4CisJc2VsZWN0IFNPQ19UWDQ5MzgKIAloZWxwCiAJICBUaGlzIFRvc2hpYmEgYm9hcmQgaXMgYmFzZWQgb24gdGhlIFRYNDkyNyBwcm9jZXNzb3IuIFNheSBZIGhlcmUgdG8KIAkgIHN1cHBvcnQgdGhpcyBtYWNoaW5lIHR5cGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvTWFrZWZpbGUgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL01ha2VmaWxlCmluZGV4IDY2OGZkYWEuLjljMTIwNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9NYWtlZmlsZQpAQCAtNCw4ICs0LDggQEAKIAogb2JqLXkJKz0gc2V0dXAubwogb2JqLSQoQ09ORklHX1BDSSkJKz0gcGNpLm8KLW9iai0kKENPTkZJR19TT0NfVFg0OTI3KQkrPSBtZW1fdHg0OTI3Lm8gaXJxX3R4NDkyNy5vCi1vYmotJChDT05GSUdfU09DX1RYNDkzOCkJKz0gbWVtX3R4NDkzOC5vIGlycV90eDQ5Mzgubworb2JqLSQoQ09ORklHX1NPQ19UWDQ5MjcpCSs9IG1lbV90eDQ5MjcubyBzZXR1cF90eDQ5MjcubyBpcnFfdHg0OTI3Lm8KK29iai0kKENPTkZJR19TT0NfVFg0OTM4KQkrPSBtZW1fdHg0OTI3Lm8gc2V0dXBfdHg0OTM4Lm8gaXJxX3R4NDkzOC5vCiBvYmotJChDT05GSUdfVE9TSElCQV9GUENJQjApCSs9IHNtc2NfZmRjMzdtODF4Lm8KIG9iai0kKENPTkZJR19LR0RCKQkrPSBkYmdpby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvaXJxX3R4NDkyNy5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9pcnFfdHg0OTI3LmMKaW5kZXggNjM3N2JkOC4uY2JlYTFmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9pcnFfdHg0OTI3LmMKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9pcnFfdHg0OTI3LmMKQEAgLTMxLDcgKzMxLDcgQEAKIHZvaWQgX19pbml0IHR4NDkyN19pcnFfaW5pdCh2b2lkKQogewogCW1pcHNfY3B1X2lycV9pbml0KCk7Ci0JdHh4OV9pcnFfaW5pdChUWDQ5MjdfSVJDX1JFRyk7CisJdHh4OV9pcnFfaW5pdChUWDQ5MjdfSVJDX1JFRyAmIDB4ZmZmZmZmZmZmVUxMKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihNSVBTX0NQVV9JUlFfQkFTRSArIFRYNDkyN19JUkNfSU5ULAogCQkJCWhhbmRsZV9zaW1wbGVfaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvaXJxX3R4NDkzOC5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9pcnFfdHg0OTM4LmMKaW5kZXggNWZjODZjOS4uNmVhYzY4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9pcnFfdHg0OTM4LmMKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9pcnFfdHg0OTM4LmMKQEAgLTE5LDcgKzE5LDcgQEAKIHZvaWQgX19pbml0IHR4NDkzOF9pcnFfaW5pdCh2b2lkKQogewogCW1pcHNfY3B1X2lycV9pbml0KCk7Ci0JdHh4OV9pcnFfaW5pdChUWDQ5MzhfSVJDX1JFRyk7CisJdHh4OV9pcnFfaW5pdChUWDQ5MzhfSVJDX1JFRyAmIDB4ZmZmZmZmZmZmVUxMKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihNSVBTX0NQVV9JUlFfQkFTRSArIFRYNDkzOF9JUkNfSU5ULAogCQkJCWhhbmRsZV9zaW1wbGVfaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvbWVtX3R4NDkyNy5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9tZW1fdHg0OTI3LmMKaW5kZXggMTJkZmMzNy4uZWY2ZWE2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9tZW1fdHg0OTI3LmMKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9tZW1fdHg0OTI3LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X3Byb20uYworICogbGludXgvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9tZW1fdHg0OTI3LmMKICAqCiAgKiBjb21tb24gdHg0OTI3IG1lbW9yeSBpbnRlcmZhY2UKICAqCkBAIC0zMiw4ICszMiw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vdHh4OS90eDQ5MjcuaD4KIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgdHg0OTI3X3Byb2Nlc3Nfc2RjY3IodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgdHg0OTI3X3Byb2Nlc3Nfc2RjY3IodTY0IF9faW9tZW0gKmFkZHIpCiB7CiAJdTY0IHZhbDsKIAl1bnNpZ25lZCBpbnQgc2RjY3JfY2U7CkBAIC00NSw5NyArNDYsMzIgQEAKIAl1bnNpZ25lZCBpbnQgcnMgPSAwOwogCXVuc2lnbmVkIGludCBjcyA9IDA7CiAJdW5zaWduZWQgaW50IG13ID0gMDsKLQl1bnNpZ25lZCBpbnQgbXNpemUgPSAwOwogCi0JdmFsID0gX19yYXdfcmVhZHEoKHZvaWQgX19pb21lbSAqKWFkZHIpOworCXZhbCA9IF9fcmF3X3JlYWRxKGFkZHIpOwogCiAJLyogTVZNQ1AgLS0gbmVlZCAjZGVmcyBmb3IgdGhlc2UgYml0cyBtYXNrcyAqLwogCXNkY2NyX2NlID0gKCh2YWwgJiAoMSA8PCAxMCkpID4+IDEwKTsKIAlzZGNjcl9icyA9ICgodmFsICYgKDEgPDwgOCkpID4+IDgpOwogCXNkY2NyX3JzID0gKCh2YWwgJiAoMyA8PCA1KSkgPj4gNSk7Ci0Jc2RjY3JfY3MgPSAoKHZhbCAmICgzIDw8IDIpKSA+PiAyKTsKKwlzZGNjcl9jcyA9ICgodmFsICYgKDcgPDwgMikpID4+IDIpOwogCXNkY2NyX213ID0gKCh2YWwgJiAoMSA8PCAwKSkgPj4gMCk7CiAKIAlpZiAoc2RjY3JfY2UpIHsKLQkJc3dpdGNoIChzZGNjcl9icykgewotCQljYXNlIDA6ewotCQkJCWJzID0gMjsKLQkJCQlicmVhazsKLQkJCX0KLQkJY2FzZSAxOnsKLQkJCQlicyA9IDQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJc3dpdGNoIChzZGNjcl9ycykgewotCQljYXNlIDA6ewotCQkJCXJzID0gMjA0ODsKLQkJCQlicmVhazsKLQkJCX0KLQkJY2FzZSAxOnsKLQkJCQlycyA9IDQwOTY7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgMjp7Ci0JCQkJcnMgPSA4MTkyOwotCQkJCWJyZWFrOwotCQkJfQotCQljYXNlIDM6ewotCQkJCXJzID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlzd2l0Y2ggKHNkY2NyX2NzKSB7Ci0JCWNhc2UgMDp7Ci0JCQkJY3MgPSAyNTY7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgMTp7Ci0JCQkJY3MgPSA1MTI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgMjp7Ci0JCQkJY3MgPSAxMDI0OwotCQkJCWJyZWFrOwotCQkJfQotCQljYXNlIDM6ewotCQkJCWNzID0gMjA0ODsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlzd2l0Y2ggKHNkY2NyX213KSB7Ci0JCWNhc2UgMDp7Ci0JCQkJbXcgPSA4OwotCQkJCWJyZWFrOwotCQkJfQkvKiA4IGJ5dGVzID0gNjQgYml0cyAqLwotCQljYXNlIDE6ewotCQkJCW13ID0gNDsKLQkJCQlicmVhazsKLQkJCX0JLyogNCBieXRlcyA9IDMyIGJpdHMgKi8KLQkJfQorCQlicyA9IDIgPDwgc2RjY3JfYnM7CisJCXJzID0gMjA0OCA8PCBzZGNjcl9yczsKKwkJY3MgPSAyNTYgPDwgc2RjY3JfY3M7CisJCW13ID0gOCA+PiBzZGNjcl9tdzsKIAl9CiAKLQkvKiAgICAgICAgICAgIGJ5dGVzIHBlciBjaGlwICAgICBNQiBwZXIgY2hpcCAgICAgIG51bSBjaGlwcyAqLwotCW1zaXplID0gKCgocnMgKiBjcyAqIG13KSAvICgxMDI0ICogMTAyNCkpICogYnMpOwotCi0JcmV0dXJuIChtc2l6ZSk7CisJcmV0dXJuIHJzICogY3MgKiBtdyAqIGJzOwogfQogCi0KIHVuc2lnbmVkIGludCBfX2luaXQgdHg0OTI3X2dldF9tZW1fc2l6ZSh2b2lkKQogewotCXVuc2lnbmVkIGludCBjMDsKLQl1bnNpZ25lZCBpbnQgYzE7Ci0JdW5zaWduZWQgaW50IGMyOwotCXVuc2lnbmVkIGludCBjMzsKLQl1bnNpZ25lZCBpbnQgdG90YWw7CisJdW5zaWduZWQgaW50IHRvdGFsID0gMDsKKwlpbnQgaTsKIAotCS8qIE1WTUNQIC0tIG5lZWQgI2RlZnMgZm9yIHRoZXNlIHJlZ2lzdGVycyAqLwotCWMwID0gdHg0OTI3X3Byb2Nlc3Nfc2RjY3IoMHhmZjFmODAwMCk7Ci0JYzEgPSB0eDQ5MjdfcHJvY2Vzc19zZGNjcigweGZmMWY4MDA4KTsKLQljMiA9IHR4NDkyN19wcm9jZXNzX3NkY2NyKDB4ZmYxZjgwMTApOwotCWMzID0gdHg0OTI3X3Byb2Nlc3Nfc2RjY3IoMHhmZjFmODAxOCk7Ci0JdG90YWwgPSBjMCArIGMxICsgYzIgKyBjMzsKLQotCXJldHVybiAodG90YWwpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR4NDkyN19zZHJhbWNwdHItPmNyKTsgaSsrKQorCQl0b3RhbCArPSB0eDQ5MjdfcHJvY2Vzc19zZGNjcigmdHg0OTI3X3NkcmFtY3B0ci0+Y3JbaV0pOworCXJldHVybiB0b3RhbDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvbWVtX3R4NDkzOC5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9tZW1fdHg0OTM4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYmFlYWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9tZW1fdHg0OTM4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL3Byb20uYwotICoKLSAqIGNvbW1vbiB0eDQ5MzggbWVtb3J5IGludGVyZmFjZQotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgVG9zaGliYSBDb3Jwb3JhdGlvbgotICoKLSAqIDIwMDMtMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMKLSAqIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcwotICogb3IgaW1wbGllZC4KLSAqCi0gKiBTdXBwb3J0IGZvciBUWDQ5MzggaW4gMi42IC0gTWFuaXNoIExhY2h3YW5pIChtbGFjaHdhbmlAbXZpc3RhLmNvbSkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQKLXR4NDkzOF9wcm9jZXNzX3NkY2NyKHU2NCAqIGFkZHIpCi17Ci0JdTY0IHZhbDsKLQl1bnNpZ25lZCBpbnQgc2RjY3JfY2U7Ci0JdW5zaWduZWQgaW50IHNkY2NyX3JzOwotCXVuc2lnbmVkIGludCBzZGNjcl9jczsKLQl1bnNpZ25lZCBpbnQgc2RjY3JfbXc7Ci0JdW5zaWduZWQgaW50IHJzID0gMDsKLQl1bnNpZ25lZCBpbnQgY3MgPSAwOwotCXVuc2lnbmVkIGludCBtdyA9IDA7Ci0JdW5zaWduZWQgaW50IGJjID0gNDsKLQl1bnNpZ25lZCBpbnQgbXNpemUgPSAwOwotCi0JdmFsID0gX19fX3Jhd19yZWFkcSgodm9pZCBfX2lvbWVtICopYWRkcik7Ci0KLQkvKiBNVk1DUCAtLSBuZWVkICNkZWZzIGZvciB0aGVzZSBiaXRzIG1hc2tzICovCi0Jc2RjY3JfY2UgPSAoKHZhbCAmICgxIDw8IDEwKSkgPj4gMTApOwotCXNkY2NyX3JzID0gKCh2YWwgJiAoMyA8PCA1KSkgPj4gNSk7Ci0Jc2RjY3JfY3MgPSAoKHZhbCAmICg3IDw8IDIpKSA+PiAyKTsKLQlzZGNjcl9tdyA9ICgodmFsICYgKDEgPDwgMCkpID4+IDApOwotCi0JaWYgKHNkY2NyX2NlKSB7Ci0JCXN3aXRjaCAoc2RjY3JfcnMpIHsKLQkJY2FzZSAwOnsKLQkJCQlycyA9IDIwNDg7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgMTp7Ci0JCQkJcnMgPSA0MDk2OwotCQkJCWJyZWFrOwotCQkJfQotCQljYXNlIDI6ewotCQkJCXJzID0gODE5MjsKLQkJCQlicmVhazsKLQkJCX0KLQkJZGVmYXVsdDp7Ci0JCQkJcnMgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXN3aXRjaCAoc2RjY3JfY3MpIHsKLQkJY2FzZSAwOnsKLQkJCQljcyA9IDI1NjsKLQkJCQlicmVhazsKLQkJCX0KLQkJY2FzZSAxOnsKLQkJCQljcyA9IDUxMjsKLQkJCQlicmVhazsKLQkJCX0KLQkJY2FzZSAyOnsKLQkJCQljcyA9IDEwMjQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgMzp7Ci0JCQkJY3MgPSAyMDQ4OwotCQkJCWJyZWFrOwotCQkJfQotCQljYXNlIDQ6ewotCQkJCWNzID0gNDA5NjsKLQkJCQlicmVhazsKLQkJCX0KLQkJZGVmYXVsdDp7Ci0JCQkJY3MgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXN3aXRjaCAoc2RjY3JfbXcpIHsKLQkJY2FzZSAwOnsKLQkJCQltdyA9IDg7Ci0JCQkJYnJlYWs7Ci0JCQl9CS8qIDggYnl0ZXMgPSA2NCBiaXRzICovCi0JCWNhc2UgMTp7Ci0JCQkJbXcgPSA0OwotCQkJCWJyZWFrOwotCQkJfQkvKiA0IGJ5dGVzID0gMzIgYml0cyAqLwotCQl9Ci0JfQotCi0JLyogICAgICAgICAgIGJ5dGVzIHBlciBjaGlwICAgIE1CIHBlciBjaGlwICAgICAgICAgIGJhbmsgY291bnQgKi8KLQltc2l6ZSA9ICgoKHJzICogY3MgKiBtdykgLyAoMTAyNCAqIDEwMjQpKSAqIChiYykpOwotCi0JLyogTVZNQ1AgLS0gYmMgaGFyZCBjb2RlZCB0byA0IGZyb20gdGFibGUgOS4zLjEgICAgICovCi0JLyogICAgICAgICAgYm9hZCBzdXBwb3J0cyBiYz0yIGJ1dCBubyB3YXkgdG8gZGV0ZWN0ICovCi0KLQlyZXR1cm4gKG1zaXplKTsKLX0KLQotdW5zaWduZWQgaW50IF9faW5pdAotdHg0OTM4X2dldF9tZW1fc2l6ZSh2b2lkKQotewotCXVuc2lnbmVkIGludCBjMDsKLQl1bnNpZ25lZCBpbnQgYzE7Ci0JdW5zaWduZWQgaW50IGMyOwotCXVuc2lnbmVkIGludCBjMzsKLQl1bnNpZ25lZCBpbnQgdG90YWw7Ci0KLQkvKiBNVk1DUCAtLSBuZWVkICNkZWZzIGZvciB0aGVzZSByZWdpc3RlcnMgKi8KLQljMCA9IHR4NDkzOF9wcm9jZXNzX3NkY2NyKCh1NjQgKikgMHhmZjFmODAwMCk7Ci0JYzEgPSB0eDQ5MzhfcHJvY2Vzc19zZGNjcigodTY0ICopIDB4ZmYxZjgwMDgpOwotCWMyID0gdHg0OTM4X3Byb2Nlc3Nfc2RjY3IoKHU2NCAqKSAweGZmMWY4MDEwKTsKLQljMyA9IHR4NDkzOF9wcm9jZXNzX3NkY2NyKCh1NjQgKikgMHhmZjFmODAxOCk7Ci0JdG90YWwgPSBjMCArIGMxICsgYzIgKyBjMzsKLQotCXJldHVybiAodG90YWwpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCmluZGV4IDVhZmM1ZDUuLjhjNjBjNzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKQEAgLTE5LDcgKzE5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vdHh4OS9nZW5lcmljLmg+CiAjaWZkZWYgQ09ORklHX0NQVV9UWDQ5WFgKICNpbmNsdWRlIDxhc20vdHh4OS90eDQ5MzguaD4KQEAgLTMwLDYgKzMyLDcgQEAKIHN0YXRpYyBjaGFyIHR4eDlfY2VfcmVzX25hbWVbOF1bNF07CS8qICJDRW4iICovCiAKIC8qIHBjb2RlLCBpbnRlcm5hbCByZWdpc3RlciAqLwordW5zaWduZWQgaW50IHR4eDlfcGNvZGU7CiBjaGFyIHR4eDlfcGNvZGVfc3RyWzhdOwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0eHg5X3JlZ19yZXMgPSB7CiAJLm5hbWUgPSB0eHg5X3Bjb2RlX3N0ciwKQEAgLTU5LDE1ICs2MiwxNiBAQAogdW5zaWduZWQgaW50IHR4eDlfY3B1X2Nsb2NrOwogdW5zaWduZWQgaW50IHR4eDlfZ2J1c19jbG9jazsKIAoraW50IHR4eDlfY2NmZ190b2VvbiBfX2luaXRkYXRhID0gMTsKIAogLyogTWluaW11bSBDTEsgc3VwcG9ydCAqLwogCiBzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJaWYgKCFzdHJjbXAoaWQsICJzcGktYmFzZWNsayIpKQotCQlyZXR1cm4gKHN0cnVjdCBjbGsgKikodHh4OV9nYnVzX2Nsb2NrIC8gMiAvIDQpOworCQlyZXR1cm4gKHN0cnVjdCBjbGsgKikoKHVuc2lnbmVkIGxvbmcpdHh4OV9nYnVzX2Nsb2NrIC8gMiAvIDQpOwogCWlmICghc3RyY21wKGlkLCAiaW1idXNfY2xrIikpCi0JCXJldHVybiAoc3RydWN0IGNsayAqKSh0eHg5X2didXNfY2xvY2sgLyAyKTsKKwkJcmV0dXJuIChzdHJ1Y3QgY2xrICopKCh1bnNpZ25lZCBsb25nKXR4eDlfZ2J1c19jbG9jayAvIDIpOwogCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKQEAgLTk0LDYgKzk4LDIyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19wdXQpOwogCisvKiBHUElPIHN1cHBvcnQgKi8KKworI2lmZGVmIENPTkZJR19HRU5FUklDX0dQSU8KK2ludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChncGlvX3RvX2lycSk7CisKK2ludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MKGlycV90b19ncGlvKTsKKyNlbmRpZgorCiBleHRlcm4gc3RydWN0IHR4eDlfYm9hcmRfdmVjIGptcjM5MjdfdmVjOwogZXh0ZXJuIHN0cnVjdCB0eHg5X2JvYXJkX3ZlYyByYnR4NDkyN192ZWM7CiBleHRlcm4gc3RydWN0IHR4eDlfYm9hcmRfdmVjIHJidHg0OTM3X3ZlYzsKQEAgLTEwNyw2ICsxMjcsMTIgQEAKIAlpbnQgYXJnYyA9IChpbnQpZndfYXJnMDsKIAljaGFyICoqYXJndiA9IChjaGFyICoqKWZ3X2FyZzE7CiAJaW50IGk7CQkJLyogQWx3YXlzIGlnbm9yZSB0aGUgIi1jIiBhdCBhcmd2WzBdICovCisjaWZkZWYgQ09ORklHXzY0QklUCisJY2hhciAqZml4ZWRfYXJndlszMl07CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJZml4ZWRfYXJndltpXSA9IChjaGFyICopKGxvbmcpKCooKF9fczMyICopYXJndiArIGkpKTsKKwlhcmd2ID0gZml4ZWRfYXJndjsKKyNlbmRpZgogCiAJLyogaWdub3JlIGFsbCBidWlsdC1pbiBhcmdzIGlmIGFueSBmL3cgYXJncyBnaXZlbiAqLwogCWlmIChhcmdjID4gMSkKQEAgLTEyNiwxNSArMTUyLDE5IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQ1BVX1RYNDlYWAogCXN3aXRjaCAoVFg0OTM4X1JFVl9QQ09ERSgpKSB7CisjaWZkZWYgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcKIAljYXNlIDB4NDkyNzoKIAkJdHh4OV9ib2FyZF92ZWMgPSAmcmJ0eDQ5MjdfdmVjOwogCQlicmVhazsKIAljYXNlIDB4NDkzNzoKIAkJdHh4OV9ib2FyZF92ZWMgPSAmcmJ0eDQ5MzdfdmVjOwogCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19UT1NISUJBX1JCVFg0OTM4CiAJY2FzZSAweDQ5Mzg6CiAJCXR4eDlfYm9hcmRfdmVjID0gJnJidHg0OTM4X3ZlYzsKIAkJYnJlYWs7CisjZW5kaWYKIAl9CiAjZW5kaWYKIApAQCAtMTYwLDYgKzE5MCwxMCBAQAogLyogd3JhcHBlcnMgKi8KIHZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CisJaW9wb3J0X3Jlc291cmNlLnN0YXJ0ID0gMDsKKwlpb3BvcnRfcmVzb3VyY2UuZW5kID0gfjBVTDsJLyogbm8gbGltaXQgKi8KKwlpb21lbV9yZXNvdXJjZS5zdGFydCA9IDA7CisJaW9tZW1fcmVzb3VyY2UuZW5kID0gfjBVTDsJLyogbm8gbGltaXQgKi8KIAl0eHg5X2JvYXJkX3ZlYy0+bWVtX3NldHVwKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXBfdHg0OTI3LmMgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkyNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDZlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkyNy5jCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogVFg0OTI3IHNldHVwIHJvdXRpbmVzCisgKiBCYXNlZCBvbiBsaW51eC9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9zZXR1cC5jLAorICoJICAgIGFuZCBSQlRYNDl4eCBwYXRjaCBmcm9tIENFTEYgcGF0Y2ggYXJjaGl2ZS4KKyAqCisgKiAyMDAzLTIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIChDKSBDb3B5cmlnaHQgVE9TSElCQSBDT1JQT1JBVElPTiAyMDAwLTIwMDEsIDIwMDQtMjAwNworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGFzbS90eHg5aXJxLmg+CisjaW5jbHVkZSA8YXNtL3R4eDl0bXIuaD4KKyNpbmNsdWRlIDxhc20vdHh4OXBpby5oPgorI2luY2x1ZGUgPGFzbS90eHg5L2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxhc20vdHh4OS90eDQ5MjcuaD4KKwordm9pZCBfX2luaXQgdHg0OTI3X3dkcl9pbml0KHZvaWQpCit7CisJLyogY2xlYXIgV2F0Y2hEb2dSZXNldCAoVzFDKSAqLworCXR4NDkyN19jY2ZnX3NldChUWDQ5MjdfQ0NGR19XRFJTVCk7CisJLyogZG8gcmVzZXQgb24gd2F0Y2hkb2cgKi8KKwl0eDQ5MjdfY2NmZ19zZXQoVFg0OTI3X0NDRkdfV1IpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHR4NDkyN19zZHJhbV9yZXNvdXJjZVs0XTsKKwordm9pZCBfX2luaXQgdHg0OTI3X3NldHVwKHZvaWQpCit7CisJaW50IGk7CisJX191MzIgZGl2bW9kZTsKKwlpbnQgY3B1Y2xrID0gMDsKKwl1NjQgY2NmZzsKKworCXR4eDlfcmVnX3Jlc19pbml0KFRYNDkyN19SRVZfUENPREUoKSwgVFg0OTI3X1JFR19CQVNFLAorCQkJICBUWDQ5MjdfUkVHX1NJWkUpOworCisJLyogU0RSQU1DLEVCVVNDIGFyZSBjb25maWd1cmVkIGJ5IFBST00gKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICghKFRYNDkyN19FQlVTQ19DUihpKSAmIDB4OCkpCisJCQljb250aW51ZTsJLyogZGlzYWJsZWQgKi8KKwkJdHh4OV9jZV9yZXNbaV0uc3RhcnQgPSAodW5zaWduZWQgbG9uZylUWDQ5MjdfRUJVU0NfQkEoaSk7CisJCXR4eDlfY2VfcmVzW2ldLmVuZCA9CisJCQl0eHg5X2NlX3Jlc1tpXS5zdGFydCArIFRYNDkyN19FQlVTQ19TSVpFKGkpIC0gMTsKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZ0eHg5X2NlX3Jlc1tpXSk7CisJfQorCisJLyogY2xvY2tzICovCisJY2NmZyA9IF9fX19yYXdfcmVhZHEoJnR4NDkyN19jY2ZncHRyLT5jY2ZnKTsKKwlpZiAodHh4OV9tYXN0ZXJfY2xvY2spIHsKKwkJLyogY2FsY3VsYXRlIGdidXNfY2xvY2sgYW5kIGNwdV9jbG9jayBmcm9tIG1hc3Rlcl9jbG9jayAqLworCQlkaXZtb2RlID0gKF9fdTMyKWNjZmcgJiBUWDQ5MjdfQ0NGR19ESVZNT0RFX01BU0s7CisJCXN3aXRjaCAoZGl2bW9kZSkgeworCQljYXNlIFRYNDkyN19DQ0ZHX0RJVk1PREVfODoKKwkJY2FzZSBUWDQ5MjdfQ0NGR19ESVZNT0RFXzEwOgorCQljYXNlIFRYNDkyN19DQ0ZHX0RJVk1PREVfMTI6CisJCWNhc2UgVFg0OTI3X0NDRkdfRElWTU9ERV8xNjoKKwkJCXR4eDlfZ2J1c19jbG9jayA9IHR4eDlfbWFzdGVyX2Nsb2NrICogNDsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0eHg5X2didXNfY2xvY2sgPSB0eHg5X21hc3Rlcl9jbG9jazsKKwkJfQorCQlzd2l0Y2ggKGRpdm1vZGUpIHsKKwkJY2FzZSBUWDQ5MjdfQ0NGR19ESVZNT0RFXzI6CisJCWNhc2UgVFg0OTI3X0NDRkdfRElWTU9ERV84OgorCQkJY3B1Y2xrID0gdHh4OV9nYnVzX2Nsb2NrICogMjsgYnJlYWs7CisJCWNhc2UgVFg0OTI3X0NDRkdfRElWTU9ERV8yXzU6CisJCWNhc2UgVFg0OTI3X0NDRkdfRElWTU9ERV8xMDoKKwkJCWNwdWNsayA9IHR4eDlfZ2J1c19jbG9jayAqIDUgLyAyOyBicmVhazsKKwkJY2FzZSBUWDQ5MjdfQ0NGR19ESVZNT0RFXzM6CisJCWNhc2UgVFg0OTI3X0NDRkdfRElWTU9ERV8xMjoKKwkJCWNwdWNsayA9IHR4eDlfZ2J1c19jbG9jayAqIDM7IGJyZWFrOworCQljYXNlIFRYNDkyN19DQ0ZHX0RJVk1PREVfNDoKKwkJY2FzZSBUWDQ5MjdfQ0NGR19ESVZNT0RFXzE2OgorCQkJY3B1Y2xrID0gdHh4OV9nYnVzX2Nsb2NrICogNDsgYnJlYWs7CisJCX0KKwkJdHh4OV9jcHVfY2xvY2sgPSBjcHVjbGs7CisJfSBlbHNlIHsKKwkJaWYgKHR4eDlfY3B1X2Nsb2NrID09IDApCisJCQl0eHg5X2NwdV9jbG9jayA9IDIwMDAwMDAwMDsJLyogMjAwTUh6ICovCisJCS8qIGNhbGN1bGF0ZSBnYnVzX2Nsb2NrIGFuZCBtYXN0ZXJfY2xvY2sgZnJvbSBjcHVfY2xvY2sgKi8KKwkJY3B1Y2xrID0gdHh4OV9jcHVfY2xvY2s7CisJCWRpdm1vZGUgPSAoX191MzIpY2NmZyAmIFRYNDkyN19DQ0ZHX0RJVk1PREVfTUFTSzsKKwkJc3dpdGNoIChkaXZtb2RlKSB7CisJCWNhc2UgVFg0OTI3X0NDRkdfRElWTU9ERV8yOgorCQljYXNlIFRYNDkyN19DQ0ZHX0RJVk1PREVfODoKKwkJCXR4eDlfZ2J1c19jbG9jayA9IGNwdWNsayAvIDI7IGJyZWFrOworCQljYXNlIFRYNDkyN19DQ0ZHX0RJVk1PREVfMl81OgorCQljYXNlIFRYNDkyN19DQ0ZHX0RJVk1PREVfMTA6CisJCQl0eHg5X2didXNfY2xvY2sgPSBjcHVjbGsgKiAyIC8gNTsgYnJlYWs7CisJCWNhc2UgVFg0OTI3X0NDRkdfRElWTU9ERV8zOgorCQljYXNlIFRYNDkyN19DQ0ZHX0RJVk1PREVfMTI6CisJCQl0eHg5X2didXNfY2xvY2sgPSBjcHVjbGsgLyAzOyBicmVhazsKKwkJY2FzZSBUWDQ5MjdfQ0NGR19ESVZNT0RFXzQ6CisJCWNhc2UgVFg0OTI3X0NDRkdfRElWTU9ERV8xNjoKKwkJCXR4eDlfZ2J1c19jbG9jayA9IGNwdWNsayAvIDQ7IGJyZWFrOworCQl9CisJCXN3aXRjaCAoZGl2bW9kZSkgeworCQljYXNlIFRYNDkyN19DQ0ZHX0RJVk1PREVfODoKKwkJY2FzZSBUWDQ5MjdfQ0NGR19ESVZNT0RFXzEwOgorCQljYXNlIFRYNDkyN19DQ0ZHX0RJVk1PREVfMTI6CisJCWNhc2UgVFg0OTI3X0NDRkdfRElWTU9ERV8xNjoKKwkJCXR4eDlfbWFzdGVyX2Nsb2NrID0gdHh4OV9nYnVzX2Nsb2NrIC8gNDsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0eHg5X21hc3Rlcl9jbG9jayA9IHR4eDlfZ2J1c19jbG9jazsKKwkJfQorCX0KKwkvKiBjaGFuZ2UgZGVmYXVsdCB2YWx1ZSB0byB1ZGVsYXkvbWRlbGF5IHRha2UgcmVhc29uYWJsZSB0aW1lICovCisJbG9vcHNfcGVyX2ppZmZ5ID0gdHh4OV9jcHVfY2xvY2sgLyBIWiAvIDI7CisKKwkvKiBDQ0ZHICovCisJdHg0OTI3X3dkcl9pbml0KCk7CisJLyogY2xlYXIgQnVzRXJyb3JPbldyaXRlIGZsYWcgKFcxQykgKi8KKwl0eDQ5MjdfY2NmZ19zZXQoVFg0OTI3X0NDRkdfQkVPVyk7CisJLyogZW5hYmxlIFRpbWVvdXQgQnVzRXJyb3IgKi8KKwlpZiAodHh4OV9jY2ZnX3RvZW9uKQorCQl0eDQ5MjdfY2NmZ19zZXQoVFg0OTI3X0NDRkdfVE9FKTsKKworCS8qIERNQSBzZWxlY3Rpb24gKi8KKwl0eHg5X2NsZWFyNjQoJnR4NDkyN19jY2ZncHRyLT5wY2ZnLCBUWDQ5MjdfUENGR19ETUFTRUxfQUxMKTsKKworCS8qIFVzZSBleHRlcm5hbCBjbG9jayBmb3IgZXh0ZXJuYWwgYXJiaXRlciAqLworCWlmICghKF9fX19yYXdfcmVhZHEoJnR4NDkyN19jY2ZncHRyLT5jY2ZnKSAmIFRYNDkyN19DQ0ZHX1BDSUFSQikpCisJCXR4eDlfY2xlYXI2NCgmdHg0OTI3X2NjZmdwdHItPnBjZmcsIFRYNDkyN19QQ0ZHX1BDSUNMS0VOX0FMTCk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcyAtLSAlZE1IeihNJWRNSHopIENSSVI6JTA4eCBDQ0ZHOiVsbHggUENGRzolbGx4XG4iLAorCSAgICAgICB0eHg5X3Bjb2RlX3N0ciwKKwkgICAgICAgKGNwdWNsayArIDUwMDAwMCkgLyAxMDAwMDAwLAorCSAgICAgICAodHh4OV9tYXN0ZXJfY2xvY2sgKyA1MDAwMDApIC8gMTAwMDAwMCwKKwkgICAgICAgKF9fdTMyKV9fX19yYXdfcmVhZHEoJnR4NDkyN19jY2ZncHRyLT5jcmlyKSwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX19fcmF3X3JlYWRxKCZ0eDQ5MjdfY2NmZ3B0ci0+Y2NmZyksCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpX19fX3Jhd19yZWFkcSgmdHg0OTI3X2NjZmdwdHItPnBjZmcpKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzIFNEUkFNQyAtLSIsIHR4eDlfcGNvZGVfc3RyKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCV9fdTY0IGNyID0gVFg0OTI3X1NEUkFNQ19DUihpKTsKKwkJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplOworCQlpZiAoISgoX191MzIpY3IgJiAweDAwMDAwNDAwKSkKKwkJCWNvbnRpbnVlOwkvKiBkaXNhYmxlZCAqLworCQliYXNlID0gKHVuc2lnbmVkIGxvbmcpKGNyID4+IDQ5KSA8PCAyMTsKKwkJc2l6ZSA9ICgoKHVuc2lnbmVkIGxvbmcpKGNyID4+IDMzKSAmIDB4N2ZmZikgKyAxKSA8PCAyMTsKKwkJcHJpbnRrKCIgQ1IlZDolMDE2bGx4IiwgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZyljcik7CisJCXR4NDkyN19zZHJhbV9yZXNvdXJjZVtpXS5uYW1lID0gIlNEUkFNIjsKKwkJdHg0OTI3X3NkcmFtX3Jlc291cmNlW2ldLnN0YXJ0ID0gYmFzZTsKKwkJdHg0OTI3X3NkcmFtX3Jlc291cmNlW2ldLmVuZCA9IGJhc2UgKyBzaXplIC0gMTsKKwkJdHg0OTI3X3NkcmFtX3Jlc291cmNlW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmdHg0OTI3X3NkcmFtX3Jlc291cmNlW2ldKTsKKwl9CisJcHJpbnRrKCIgVFI6JTA5bGx4XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKV9fX19yYXdfcmVhZHEoJnR4NDkyN19zZHJhbWNwdHItPnRyKSk7CisKKwkvKiBUTVIgKi8KKwkvKiBkaXNhYmxlIGFsbCB0aW1lcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVFg0OTI3X05SX1RNUjsgaSsrKQorCQl0eHg5X3Rtcl9pbml0KFRYNDkyN19UTVJfUkVHKGkpICYgMHhmZmZmZmZmZmZVTEwpOworCisJLyogUElPICovCisJdHh4OV9ncGlvX2luaXQoVFg0OTI3X1BJT19SRUcgJiAweGZmZmZmZmZmZlVMTCwgMCwgVFg0OTI3X05VTV9QSU8pOworCV9fcmF3X3dyaXRlbCgwLCAmdHg0OTI3X3Bpb3B0ci0+bWFza2NwdSk7CisJX19yYXdfd3JpdGVsKDAsICZ0eDQ5MjdfcGlvcHRyLT5tYXNrZXh0KTsKK30KKwordm9pZCBfX2luaXQgdHg0OTI3X3RpbWVfaW5pdCh1bnNpZ25lZCBpbnQgdG1ybnIpCit7CisJaWYgKF9fX19yYXdfcmVhZHEoJnR4NDkyN19jY2ZncHRyLT5jY2ZnKSAmIFRYNDkyN19DQ0ZHX1RJTlRESVMpCisJCXR4eDlfY2xvY2tldmVudF9pbml0KFRYNDkyN19UTVJfUkVHKHRtcm5yKSAmIDB4ZmZmZmZmZmZmVUxMLAorCQkJCSAgICAgVFhYOV9JUlFfQkFTRSArIFRYNDkyN19JUl9UTVIodG1ybnIpLAorCQkJCSAgICAgVFhYOV9JTUNMSyk7Cit9CisKK3ZvaWQgX19pbml0IHR4NDkyN19zZXR1cF9zZXJpYWwodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1RYWDkKKwlpbnQgaTsKKwlzdHJ1Y3QgdWFydF9wb3J0IHJlcTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwkJcmVxLmxpbmUgPSBpOworCQlyZXEuaW90eXBlID0gVVBJT19NRU07CisJCXJlcS5tZW1iYXNlID0gKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKVRYNDkyN19TSU9fUkVHKGkpOworCQlyZXEubWFwYmFzZSA9IFRYNDkyN19TSU9fUkVHKGkpICYgMHhmZmZmZmZmZmZVTEw7CisJCXJlcS5pcnEgPSBUWFg5X0lSUV9CQVNFICsgVFg0OTI3X0lSX1NJTyhpKTsKKwkJcmVxLmZsYWdzIHw9IFVQRl9CVUdHWV9VQVJUIC8qSEFWRV9DVFNfTElORSovOworCQlyZXEudWFydGNsayA9IFRYWDlfSU1DTEs7CisJCWVhcmx5X3NlcmlhbF90eHg5X3NldHVwKCZyZXEpOworCX0KKyNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX1RYWDkgKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXBfdHg0OTM4LmMgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkzOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNzM3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkzOC5jCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogVFg0OTM4LzQ5Mzcgc2V0dXAgcm91dGluZXMKKyAqIEJhc2VkIG9uIGxpbnV4L2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMsCisgKgkgICAgYW5kIFJCVFg0OXh4IHBhdGNoIGZyb20gQ0VMRiBwYXRjaCBhcmNoaXZlLgorICoKKyAqIDIwMDMtMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogKEMpIENvcHlyaWdodCBUT1NISUJBIENPUlBPUkFUSU9OIDIwMDAtMjAwMSwgMjAwNC0yMDA3CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8YXNtL3R4eDlpcnEuaD4KKyNpbmNsdWRlIDxhc20vdHh4OXRtci5oPgorI2luY2x1ZGUgPGFzbS90eHg5cGlvLmg+CisjaW5jbHVkZSA8YXNtL3R4eDkvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGFzbS90eHg5L3R4NDkzOC5oPgorCit2b2lkIF9faW5pdCB0eDQ5Mzhfd2RyX2luaXQodm9pZCkKK3sKKwkvKiBjbGVhciBXYXRjaERvZ1Jlc2V0IChXMUMpICovCisJdHg0OTM4X2NjZmdfc2V0KFRYNDkzOF9DQ0ZHX1dEUlNUKTsKKwkvKiBkbyByZXNldCBvbiB3YXRjaGRvZyAqLworCXR4NDkzOF9jY2ZnX3NldChUWDQ5MzhfQ0NGR19XUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHg0OTM4X3NkcmFtX3Jlc291cmNlWzRdOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0eDQ5Mzhfc3JhbV9yZXNvdXJjZTsKKworI2RlZmluZSBUWDQ5MzhfU1JBTV9TSVpFIDB4ODAwCisKK3ZvaWQgX19pbml0IHR4NDkzOF9zZXR1cCh2b2lkKQoreworCWludCBpOworCV9fdTMyIGRpdm1vZGU7CisJaW50IGNwdWNsayA9IDA7CisJdTY0IGNjZmc7CisKKwl0eHg5X3JlZ19yZXNfaW5pdChUWDQ5MzhfUkVWX1BDT0RFKCksIFRYNDkzOF9SRUdfQkFTRSwKKwkJCSAgVFg0OTM4X1JFR19TSVpFKTsKKworCS8qIFNEUkFNQyxFQlVTQyBhcmUgY29uZmlndXJlZCBieSBQUk9NICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoIShUWDQ5MzhfRUJVU0NfQ1IoaSkgJiAweDgpKQorCQkJY29udGludWU7CS8qIGRpc2FibGVkICovCisJCXR4eDlfY2VfcmVzW2ldLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpVFg0OTM4X0VCVVNDX0JBKGkpOworCQl0eHg5X2NlX3Jlc1tpXS5lbmQgPQorCQkJdHh4OV9jZV9yZXNbaV0uc3RhcnQgKyBUWDQ5MzhfRUJVU0NfU0laRShpKSAtIDE7CisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmdHh4OV9jZV9yZXNbaV0pOworCX0KKworCS8qIGNsb2NrcyAqLworCWNjZmcgPSBfX19fcmF3X3JlYWRxKCZ0eDQ5MzhfY2NmZ3B0ci0+Y2NmZyk7CisJaWYgKHR4eDlfbWFzdGVyX2Nsb2NrKSB7CisJCS8qIGNhbGN1bGF0ZSBnYnVzX2Nsb2NrIGFuZCBjcHVfY2xvY2sgZnJvbSBtYXN0ZXJfY2xvY2sgKi8KKwkJZGl2bW9kZSA9IChfX3UzMiljY2ZnICYgVFg0OTM4X0NDRkdfRElWTU9ERV9NQVNLOworCQlzd2l0Y2ggKGRpdm1vZGUpIHsKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzg6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xMDoKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzEyOgorCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfMTY6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xODoKKwkJCXR4eDlfZ2J1c19jbG9jayA9IHR4eDlfbWFzdGVyX2Nsb2NrICogNDsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0eHg5X2didXNfY2xvY2sgPSB0eHg5X21hc3Rlcl9jbG9jazsKKwkJfQorCQlzd2l0Y2ggKGRpdm1vZGUpIHsKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzI6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV84OgorCQkJY3B1Y2xrID0gdHh4OV9nYnVzX2Nsb2NrICogMjsgYnJlYWs7CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8yXzU6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xMDoKKwkJCWNwdWNsayA9IHR4eDlfZ2J1c19jbG9jayAqIDUgLyAyOyBicmVhazsKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzM6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xMjoKKwkJCWNwdWNsayA9IHR4eDlfZ2J1c19jbG9jayAqIDM7IGJyZWFrOworCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfNDoKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzE2OgorCQkJY3B1Y2xrID0gdHh4OV9nYnVzX2Nsb2NrICogNDsgYnJlYWs7CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV80XzU6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xODoKKwkJCWNwdWNsayA9IHR4eDlfZ2J1c19jbG9jayAqIDkgLyAyOyBicmVhazsKKwkJfQorCQl0eHg5X2NwdV9jbG9jayA9IGNwdWNsazsKKwl9IGVsc2UgeworCQlpZiAodHh4OV9jcHVfY2xvY2sgPT0gMCkKKwkJCXR4eDlfY3B1X2Nsb2NrID0gMzAwMDAwMDAwOwkvKiAzMDBNSHogKi8KKwkJLyogY2FsY3VsYXRlIGdidXNfY2xvY2sgYW5kIG1hc3Rlcl9jbG9jayBmcm9tIGNwdV9jbG9jayAqLworCQljcHVjbGsgPSB0eHg5X2NwdV9jbG9jazsKKwkJZGl2bW9kZSA9IChfX3UzMiljY2ZnICYgVFg0OTM4X0NDRkdfRElWTU9ERV9NQVNLOworCQlzd2l0Y2ggKGRpdm1vZGUpIHsKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzI6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV84OgorCQkJdHh4OV9nYnVzX2Nsb2NrID0gY3B1Y2xrIC8gMjsgYnJlYWs7CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8yXzU6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xMDoKKwkJCXR4eDlfZ2J1c19jbG9jayA9IGNwdWNsayAqIDIgLyA1OyBicmVhazsKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzM6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xMjoKKwkJCXR4eDlfZ2J1c19jbG9jayA9IGNwdWNsayAvIDM7IGJyZWFrOworCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfNDoKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzE2OgorCQkJdHh4OV9nYnVzX2Nsb2NrID0gY3B1Y2xrIC8gNDsgYnJlYWs7CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV80XzU6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xODoKKwkJCXR4eDlfZ2J1c19jbG9jayA9IGNwdWNsayAqIDIgLyA5OyBicmVhazsKKwkJfQorCQlzd2l0Y2ggKGRpdm1vZGUpIHsKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzg6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xMDoKKwkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzEyOgorCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfMTY6CisJCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xODoKKwkJCXR4eDlfbWFzdGVyX2Nsb2NrID0gdHh4OV9nYnVzX2Nsb2NrIC8gNDsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0eHg5X21hc3Rlcl9jbG9jayA9IHR4eDlfZ2J1c19jbG9jazsKKwkJfQorCX0KKwkvKiBjaGFuZ2UgZGVmYXVsdCB2YWx1ZSB0byB1ZGVsYXkvbWRlbGF5IHRha2UgcmVhc29uYWJsZSB0aW1lICovCisJbG9vcHNfcGVyX2ppZmZ5ID0gdHh4OV9jcHVfY2xvY2sgLyBIWiAvIDI7CisKKwkvKiBDQ0ZHICovCisJdHg0OTM4X3dkcl9pbml0KCk7CisJLyogY2xlYXIgQnVzRXJyb3JPbldyaXRlIGZsYWcgKFcxQykgKi8KKwl0eDQ5MzhfY2NmZ19zZXQoVFg0OTM4X0NDRkdfQkVPVyk7CisJLyogZW5hYmxlIFRpbWVvdXQgQnVzRXJyb3IgKi8KKwlpZiAodHh4OV9jY2ZnX3RvZW9uKQorCQl0eDQ5MzhfY2NmZ19zZXQoVFg0OTM4X0NDRkdfVE9FKTsKKworCS8qIERNQSBzZWxlY3Rpb24gKi8KKwl0eHg5X2NsZWFyNjQoJnR4NDkzOF9jY2ZncHRyLT5wY2ZnLCBUWDQ5MzhfUENGR19ETUFTRUxfQUxMKTsKKworCS8qIFVzZSBleHRlcm5hbCBjbG9jayBmb3IgZXh0ZXJuYWwgYXJiaXRlciAqLworCWlmICghKF9fX19yYXdfcmVhZHEoJnR4NDkzOF9jY2ZncHRyLT5jY2ZnKSAmIFRYNDkzOF9DQ0ZHX1BDSUFSQikpCisJCXR4eDlfY2xlYXI2NCgmdHg0OTM4X2NjZmdwdHItPnBjZmcsIFRYNDkzOF9QQ0ZHX1BDSUNMS0VOX0FMTCk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcyAtLSAlZE1IeihNJWRNSHopIENSSVI6JTA4eCBDQ0ZHOiVsbHggUENGRzolbGx4XG4iLAorCSAgICAgICB0eHg5X3Bjb2RlX3N0ciwKKwkgICAgICAgKGNwdWNsayArIDUwMDAwMCkgLyAxMDAwMDAwLAorCSAgICAgICAodHh4OV9tYXN0ZXJfY2xvY2sgKyA1MDAwMDApIC8gMTAwMDAwMCwKKwkgICAgICAgKF9fdTMyKV9fX19yYXdfcmVhZHEoJnR4NDkzOF9jY2ZncHRyLT5jcmlyKSwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX19fcmF3X3JlYWRxKCZ0eDQ5MzhfY2NmZ3B0ci0+Y2NmZyksCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpX19fX3Jhd19yZWFkcSgmdHg0OTM4X2NjZmdwdHItPnBjZmcpKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzIFNEUkFNQyAtLSIsIHR4eDlfcGNvZGVfc3RyKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCV9fdTY0IGNyID0gVFg0OTM4X1NEUkFNQ19DUihpKTsKKwkJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplOworCQlpZiAoISgoX191MzIpY3IgJiAweDAwMDAwNDAwKSkKKwkJCWNvbnRpbnVlOwkvKiBkaXNhYmxlZCAqLworCQliYXNlID0gKHVuc2lnbmVkIGxvbmcpKGNyID4+IDQ5KSA8PCAyMTsKKwkJc2l6ZSA9ICgoKHVuc2lnbmVkIGxvbmcpKGNyID4+IDMzKSAmIDB4N2ZmZikgKyAxKSA8PCAyMTsKKwkJcHJpbnRrKCIgQ1IlZDolMDE2bGx4IiwgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZyljcik7CisJCXR4NDkzOF9zZHJhbV9yZXNvdXJjZVtpXS5uYW1lID0gIlNEUkFNIjsKKwkJdHg0OTM4X3NkcmFtX3Jlc291cmNlW2ldLnN0YXJ0ID0gYmFzZTsKKwkJdHg0OTM4X3NkcmFtX3Jlc291cmNlW2ldLmVuZCA9IGJhc2UgKyBzaXplIC0gMTsKKwkJdHg0OTM4X3NkcmFtX3Jlc291cmNlW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmdHg0OTM4X3NkcmFtX3Jlc291cmNlW2ldKTsKKwl9CisJcHJpbnRrKCIgVFI6JTA5bGx4XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKV9fX19yYXdfcmVhZHEoJnR4NDkzOF9zZHJhbWNwdHItPnRyKSk7CisKKwkvKiBTUkFNICovCisJaWYgKHR4eDlfcGNvZGUgPT0gMHg0OTM4ICYmIF9fX19yYXdfcmVhZHEoJnR4NDkzOF9zcmFtY3B0ci0+Y3IpICYgMSkgeworCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IFRYNDkzOF9TUkFNX1NJWkU7CisJCXR4NDkzOF9zcmFtX3Jlc291cmNlLm5hbWUgPSAiU1JBTSI7CisJCXR4NDkzOF9zcmFtX3Jlc291cmNlLnN0YXJ0ID0KKwkJCShfX19fcmF3X3JlYWRxKCZ0eDQ5Mzhfc3JhbWNwdHItPmNyKSA+PiAoMzktMTEpKQorCQkJJiB+KHNpemUgLSAxKTsKKwkJdHg0OTM4X3NyYW1fcmVzb3VyY2UuZW5kID0KKwkJCXR4NDkzOF9zcmFtX3Jlc291cmNlLnN0YXJ0ICsgVFg0OTM4X1NSQU1fU0laRSAtIDE7CisJCXR4NDkzOF9zcmFtX3Jlc291cmNlLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmdHg0OTM4X3NyYW1fcmVzb3VyY2UpOworCX0KKworCS8qIFRNUiAqLworCS8qIGRpc2FibGUgYWxsIHRpbWVycyAqLworCWZvciAoaSA9IDA7IGkgPCBUWDQ5MzhfTlJfVE1SOyBpKyspCisJCXR4eDlfdG1yX2luaXQoVFg0OTM4X1RNUl9SRUcoaSkgJiAweGZmZmZmZmZmZlVMTCk7CisKKwkvKiBETUEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlfX19fcmF3X3dyaXRlcShUWDQ5MzhfRE1BX01DUl9NU1RFTiwKKwkJCSAgICAgICAodm9pZCBfX2lvbWVtICopKFRYNDkzOF9ETUFfUkVHKGkpICsgMHg1MCkpOworCisJLyogUElPICovCisJdHh4OV9ncGlvX2luaXQoVFg0OTM4X1BJT19SRUcgJiAweGZmZmZmZmZmZlVMTCwgMCwgVFg0OTM4X05VTV9QSU8pOworCV9fcmF3X3dyaXRlbCgwLCAmdHg0OTM4X3Bpb3B0ci0+bWFza2NwdSk7CisJX19yYXdfd3JpdGVsKDAsICZ0eDQ5MzhfcGlvcHRyLT5tYXNrZXh0KTsKKworCWlmICh0eHg5X3Bjb2RlID09IDB4NDkzOCkgeworCQlfX3U2NCBwY2ZnID0gX19fX3Jhd19yZWFkcSgmdHg0OTM4X2NjZmdwdHItPnBjZmcpOworCQkvKiBzZXQgUENJQzEgcmVzZXQgKi8KKwkJdHh4OV9zZXQ2NCgmdHg0OTM4X2NjZmdwdHItPmNsa2N0ciwgVFg0OTM4X0NMS0NUUl9QQ0lDMVJTVCk7CisJCWlmIChwY2ZnICYgKFRYNDkzOF9QQ0ZHX0VUSDBfU0VMIHwgVFg0OTM4X1BDRkdfRVRIMV9TRUwpKSB7CisJCQltZGVsYXkoMSk7CS8qIGF0IGxlYXN0IDEyOCBjcHUgY2xvY2sgKi8KKwkJCS8qIGNsZWFyIFBDSUMxIHJlc2V0ICovCisJCQl0eHg5X2NsZWFyNjQoJnR4NDkzOF9jY2ZncHRyLT5jbGtjdHIsCisJCQkJICAgICBUWDQ5MzhfQ0xLQ1RSX1BDSUMxUlNUKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzdG9wIFBDSUMxXG4iLCB0eHg5X3Bjb2RlX3N0cik7CisJCQkvKiBzdG9wIFBDSUMxICovCisJCQl0eHg5X3NldDY0KCZ0eDQ5MzhfY2NmZ3B0ci0+Y2xrY3RyLAorCQkJCSAgIFRYNDkzOF9DTEtDVFJfUENJQzFDS0QpOworCQl9CisJCWlmICghKHBjZmcgJiBUWDQ5MzhfUENGR19FVEgwX1NFTCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzdG9wIEVUSDBcbiIsIHR4eDlfcGNvZGVfc3RyKTsKKwkJCXR4eDlfc2V0NjQoJnR4NDkzOF9jY2ZncHRyLT5jbGtjdHIsCisJCQkJICAgVFg0OTM4X0NMS0NUUl9FVEgwUlNUKTsKKwkJCXR4eDlfc2V0NjQoJnR4NDkzOF9jY2ZncHRyLT5jbGtjdHIsCisJCQkJICAgVFg0OTM4X0NMS0NUUl9FVEgwQ0tEKTsKKwkJfQorCQlpZiAoIShwY2ZnICYgVFg0OTM4X1BDRkdfRVRIMV9TRUwpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogc3RvcCBFVEgxXG4iLCB0eHg5X3Bjb2RlX3N0cik7CisJCQl0eHg5X3NldDY0KCZ0eDQ5MzhfY2NmZ3B0ci0+Y2xrY3RyLAorCQkJCSAgIFRYNDkzOF9DTEtDVFJfRVRIMVJTVCk7CisJCQl0eHg5X3NldDY0KCZ0eDQ5MzhfY2NmZ3B0ci0+Y2xrY3RyLAorCQkJCSAgIFRYNDkzOF9DTEtDVFJfRVRIMUNLRCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgX19pbml0IHR4NDkzOF90aW1lX2luaXQodW5zaWduZWQgaW50IHRtcm5yKQoreworCWlmIChfX19fcmF3X3JlYWRxKCZ0eDQ5MzhfY2NmZ3B0ci0+Y2NmZykgJiBUWDQ5MzhfQ0NGR19USU5URElTKQorCQl0eHg5X2Nsb2NrZXZlbnRfaW5pdChUWDQ5MzhfVE1SX1JFRyh0bXJucikgJiAweGZmZmZmZmZmZlVMTCwKKwkJCQkgICAgIFRYWDlfSVJRX0JBU0UgKyBUWDQ5MzhfSVJfVE1SKHRtcm5yKSwKKwkJCQkgICAgIFRYWDlfSU1DTEspOworfQorCit2b2lkIF9faW5pdCB0eDQ5Mzhfc2V0dXBfc2VyaWFsKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NFUklBTF9UWFg5CisJaW50IGk7CisJc3RydWN0IHVhcnRfcG9ydCByZXE7CisJdW5zaWduZWQgaW50IGNoX21hc2sgPSAwOworCisJaWYgKF9fcmF3X3JlYWRxKCZ0eDQ5MzhfY2NmZ3B0ci0+cGNmZykgJiBUWDQ5MzhfUENGR19FVEgwX1NFTCkKKwkJY2hfbWFzayB8PSAxIDw8IDE7IC8qIGRpc2FibGUgU0lPMSBieSBQQ0ZHIHNldHRpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmICgoMSA8PCBpKSAmIGNoX21hc2spCisJCQljb250aW51ZTsKKwkJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwkJcmVxLmxpbmUgPSBpOworCQlyZXEuaW90eXBlID0gVVBJT19NRU07CisJCXJlcS5tZW1iYXNlID0gKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKVRYNDkzOF9TSU9fUkVHKGkpOworCQlyZXEubWFwYmFzZSA9IFRYNDkzOF9TSU9fUkVHKGkpICYgMHhmZmZmZmZmZmZVTEw7CisJCXJlcS5pcnEgPSBUWFg5X0lSUV9CQVNFICsgVFg0OTM4X0lSX1NJTyhpKTsKKwkJcmVxLmZsYWdzIHw9IFVQRl9CVUdHWV9VQVJUIC8qSEFWRV9DVFNfTElORSovOworCQlyZXEudWFydGNsayA9IFRYWDlfSU1DTEs7CisJCWVhcmx5X3NlcmlhbF90eHg5X3NldHVwKCZyZXEpOworCX0KKyNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX1RYWDkgKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2ptcjM5Mjcvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L2ptcjM5Mjcvc2V0dXAuYwppbmRleCA1ZTM1ZWY3Li4wMzY0N2ViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9qbXIzOTI3L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9zZXR1cC5jCkBAIC0xMDUsMTQgKzEwNSw2IEBACiAJX21hY2hpbmVfaGFsdCA9IGptcjM5MjdfbWFjaGluZV9oYWx0OwogCXBtX3Bvd2VyX29mZiA9IGptcjM5MjdfbWFjaGluZV9wb3dlcl9vZmY7CiAKLQkvKgotCSAqIElPL01FTSByZXNvdXJjZXMuCi0JICovCi0JaW9wb3J0X3Jlc291cmNlLnN0YXJ0ID0gMDsKLQlpb3BvcnRfcmVzb3VyY2UuZW5kID0gMHhmZmZmZmZmZjsKLQlpb21lbV9yZXNvdXJjZS5zdGFydCA9IDA7Ci0JaW9tZW1fcmVzb3VyY2UuZW5kID0gMHhmZmZmZmZmZjsKLQogCS8qIFJlYm9vdCBvbiBwYW5pYyAqLwogCXBhbmljX3RpbWVvdXQgPSAxODA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L2lycS5jIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MjcvaXJxLmMKaW5kZXggNzBmMTMyMS4uY2Q3NDhhOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MjcvaXJxLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MjcvaXJxLmMKQEAgLTEyNiwxNCArMTI2LDEyIEBACiAJLm1hc2tfYWNrID0gdG9zaGliYV9yYnR4NDkyN19pcnFfaW9jX2Rpc2FibGUsCiAJLnVubWFzayA9IHRvc2hpYmFfcmJ0eDQ5MjdfaXJxX2lvY19lbmFibGUsCiB9OwotI2RlZmluZSBUT1NISUJBX1JCVFg0OTI3X0lPQ19JTlRSX0VOQUIgKHZvaWQgX19pb21lbSAqKTB4YmMwMDIwMDBVTAotI2RlZmluZSBUT1NISUJBX1JCVFg0OTI3X0lPQ19JTlRSX1NUQVQgKHZvaWQgX19pb21lbSAqKTB4YmMwMDIwMDZVTAogCiBzdGF0aWMgaW50IHRvc2hpYmFfcmJ0eDQ5MjdfaXJxX25lc3RlZChpbnQgc3dfaXJxKQogewogCXU4IGxldmVsMzsKIAotCWxldmVsMyA9IHJlYWRiKFRPU0hJQkFfUkJUWDQ5MjdfSU9DX0lOVFJfU1RBVCkgJiAweDFmOworCWxldmVsMyA9IHJlYWRiKHJidHg0OTI3X2ltc3RhdF9hZGRyKSAmIDB4MWY7CiAJaWYgKGxldmVsMykKIAkJc3dfaXJxID0gUkJUWDQ5MjdfSVJRX0lPQyArIGZscyhsZXZlbDMpIC0gMTsKIAlyZXR1cm4gKHN3X2lycSk7CkBAIC0xNTQsMTggKzE1MiwxOCBAQAogewogCXVuc2lnbmVkIGNoYXIgdjsKIAotCXYgPSByZWFkYihUT1NISUJBX1JCVFg0OTI3X0lPQ19JTlRSX0VOQUIpOworCXYgPSByZWFkYihyYnR4NDkyN19pbWFza19hZGRyKTsKIAl2IHw9ICgxIDw8IChpcnEgLSBSQlRYNDkyN19JUlFfSU9DKSk7Ci0Jd3JpdGViKHYsIFRPU0hJQkFfUkJUWDQ5MjdfSU9DX0lOVFJfRU5BQik7CisJd3JpdGViKHYsIHJidHg0OTI3X2ltYXNrX2FkZHIpOwogfQogCiBzdGF0aWMgdm9pZCB0b3NoaWJhX3JidHg0OTI3X2lycV9pb2NfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGNoYXIgdjsKIAotCXYgPSByZWFkYihUT1NISUJBX1JCVFg0OTI3X0lPQ19JTlRSX0VOQUIpOworCXYgPSByZWFkYihyYnR4NDkyN19pbWFza19hZGRyKTsKIAl2ICY9IH4oMSA8PCAoaXJxIC0gUkJUWDQ5MjdfSVJRX0lPQykpOwotCXdyaXRlYih2LCBUT1NISUJBX1JCVFg0OTI3X0lPQ19JTlRSX0VOQUIpOworCXdyaXRlYih2LCByYnR4NDkyN19pbWFza19hZGRyKTsKIAltbWlvd2IoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MjcvcHJvbS5jIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MjcvcHJvbS5jCmluZGV4IDk0MmU2MjcuLjVjMGRlNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3Byb20uYworKysgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9wcm9tLmMKQEAgLTM2LDEwICszNiw2IEBACiAKIHZvaWQgX19pbml0IHJidHg0OTI3X3Byb21faW5pdCh2b2lkKQogewotCWV4dGVybiBpbnQgdHg0OTI3X2dldF9tZW1fc2l6ZSh2b2lkKTsKLQlpbnQgbXNpemU7Ci0KIAlwcm9tX2luaXRfY21kbGluZSgpOwotCW1zaXplID0gdHg0OTI3X2dldF9tZW1fc2l6ZSgpOwotCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1zaXplIDw8IDIwLCBCT09UX01FTV9SQU0pOworCWFkZF9tZW1vcnlfcmVnaW9uKDAsIHR4NDkyN19nZXRfbWVtX3NpemUoKSwgQk9PVF9NRU1fUkFNKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9zZXR1cC5jCmluZGV4IDE2NTdmZDkuLjNkYTIwZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mjcvc2V0dXAuYwpAQCAtNTMsMTcgKzUzLDEwIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS90eHg5dG1yLmg+CiAjaW5jbHVkZSA8YXNtL3R4eDkvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS90eHg5L3BjaS5oPgogI2luY2x1ZGUgPGFzbS90eHg5L3JidHg0OTI3Lmg+CiAjaW5jbHVkZSA8YXNtL3R4eDkvdHg0OTM4Lmg+CS8qIGZvciBUWDQ5MzcgKi8KLSNpZmRlZiBDT05GSUdfU0VSSUFMX1RYWDkKLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2VuZGlmCi0KLXN0YXRpYyBpbnQgdHg0OTI3X2NjZmdfdG9lb24gPSAxOwogCiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHZvaWQgX19pbml0IHR4NDkyN19wY2lfc2V0dXAodm9pZCkKQEAgLTE4NCwxNCArMTc3LDE0IEBACiAJcHJpbnRrKEtFUk5fTk9USUNFICJTeXN0ZW0gUmVib290aW5nLi4uXG4iKTsKIAogCS8qIGVuYWJsZSB0aGUgcy93IHJlc2V0IHJlZ2lzdGVyICovCi0Jd3JpdGViKFJCVFg0OTI3X1NXX1JFU0VUX0VOQUJMRV9TRVQsIFJCVFg0OTI3X1NXX1JFU0VUX0VOQUJMRSk7CisJd3JpdGViKDEsIHJidHg0OTI3X3NvZnRyZXNldGxvY2tfYWRkcik7CiAKIAkvKiB3YWl0IGZvciBlbmFibGUgdG8gYmUgc2VlbiAqLwotCXdoaWxlICgocmVhZGIoUkJUWDQ5MjdfU1dfUkVTRVRfRU5BQkxFKSAmCi0JCVJCVFg0OTI3X1NXX1JFU0VUX0VOQUJMRV9TRVQpID09IDB4MDApOworCXdoaWxlICghKHJlYWRiKHJidHg0OTI3X3NvZnRyZXNldGxvY2tfYWRkcikgJiAxKSkKKwkJOwogCiAJLyogZG8gYSBzL3cgcmVzZXQgKi8KLQl3cml0ZWIoUkJUWDQ5MjdfU1dfUkVTRVRfRE9fU0VULCBSQlRYNDkyN19TV19SRVNFVF9ETyk7CisJd3JpdGViKDEsIHJidHg0OTI3X3NvZnRyZXNldF9hZGRyKTsKIAogCS8qIGRvIHNvbWV0aGluZyBwYXNzaXZlIHdoaWxlIHdhaXRpbmcgZm9yIHJlc2V0ICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTIxMyw5ICsyMDYsMTEgQEAKIAkvKiBubyByZXR1cm4gKi8KIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTI3X2Nsb2NrX2luaXQodm9pZCk7CitzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MzdfY2xvY2tfaW5pdCh2b2lkKTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTI3X21lbV9zZXR1cCh2b2lkKQogewotCWludCBpOwogCXUzMiBjcDBfY29uZmlnOwogCWNoYXIgKmFyZ3B0cjsKIApAQCAtMjI3LDE2ICsyMjIsMTggQEAKIAljcDBfY29uZmlnID0gY3AwX2NvbmZpZyAmIH4oVFg0OV9DT05GX0lDIHwgVFg0OV9DT05GX0RDKTsKIAl3cml0ZV9jMF9jb25maWcoY3AwX2NvbmZpZyk7CiAKLQlpb3BvcnRfcmVzb3VyY2UuZW5kID0gMHhmZmZmZmZmZjsKLQlpb21lbV9yZXNvdXJjZS5lbmQgPSAweGZmZmZmZmZmOworCWlmIChUWDQ5MjdfUkVWX1BDT0RFKCkgPT0gMHg0OTI3KSB7CisJCXJidHg0OTI3X2Nsb2NrX2luaXQoKTsKKwkJdHg0OTI3X3NldHVwKCk7CisJfSBlbHNlIHsKKwkJcmJ0eDQ5MzdfY2xvY2tfaW5pdCgpOworCQl0eDQ5Mzhfc2V0dXAoKTsKKwl9CiAKIAlfbWFjaGluZV9yZXN0YXJ0ID0gdG9zaGliYV9yYnR4NDkyN19yZXN0YXJ0OwogCV9tYWNoaW5lX2hhbHQgPSB0b3NoaWJhX3JidHg0OTI3X2hhbHQ7CiAJcG1fcG93ZXJfb2ZmID0gdG9zaGliYV9yYnR4NDkyN19wb3dlcl9vZmY7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVFg0OTI3X05SX1RNUjsgaSsrKQotCQl0eHg5X3Rtcl9pbml0KFRYNDkyN19UTVJfUkVHKDApICYgMHhmZmZmZmZmZmZVTEwpOwotCiAjaWZkZWYgQ09ORklHX1BDSQogCXR4eDlfYWxsb2NfcGNpX2NvbnRyb2xsZXIoJnR4eDlfcHJpbWFyeV9wY2ljLAogCQkJCSAgUkJUWDQ5MjdfUENJTUVNLCBSQlRYNDkyN19QQ0lNRU1fU0laRSwKQEAgLTI0NSwzNiArMjQyLDEzIEBACiAJc2V0X2lvX3BvcnRfYmFzZShLU0VHMSArIFJCVFg0OTI3X0lTQV9JT19PRkZTRVQpOwogI2VuZGlmCiAKLQkvKiBDQ0ZHICovCi0JLyogZG8gcmVzZXQgb24gd2F0Y2hkb2cgKi8KLQl0eDQ5MjdfY2NmZ19zZXQoVFg0OTI3X0NDRkdfV1IpOwotCS8qIGVuYWJsZSBUaW1lb3V0IEJ1c0Vycm9yICovCi0JaWYgKHR4NDkyN19jY2ZnX3RvZW9uKQotCQl0eDQ5MjdfY2NmZ19zZXQoVFg0OTI3X0NDRkdfVE9FKTsKLQotI2lmZGVmIENPTkZJR19TRVJJQUxfVFhYOQotCXsKLQkJZXh0ZXJuIGludCBlYXJseV9zZXJpYWxfdHh4OV9zZXR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKLQkJc3RydWN0IHVhcnRfcG9ydCByZXE7Ci0JCWZvcihpID0gMDsgaSA8IDI7IGkrKykgewotCQkJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKLQkJCXJlcS5saW5lID0gaTsKLQkJCXJlcS5pb3R5cGUgPSBVUElPX01FTTsKLQkJCXJlcS5tZW1iYXNlID0gKGNoYXIgKikoMHhmZjFmZjMwMCArIGkgKiAweDEwMCk7Ci0JCQlyZXEubWFwYmFzZSA9IDB4ZmYxZmYzMDAgKyBpICogMHgxMDA7Ci0JCQlyZXEuaXJxID0gVFhYOV9JUlFfQkFTRSArIFRYNDkyN19JUl9TSU8oaSk7Ci0JCQlyZXEuZmxhZ3MgfD0gVVBGX0JVR0dZX1VBUlQgLypIQVZFX0NUU19MSU5FKi87Ci0JCQlyZXEudWFydGNsayA9IDUwMDAwMDAwOwotCQkJZWFybHlfc2VyaWFsX3R4eDlfc2V0dXAoJnJlcSk7Ci0JCX0KLQl9CisJdHg0OTI3X3NldHVwX3NlcmlhbCgpOwogI2lmZGVmIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFCiAgICAgICAgIGFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwogICAgICAgICBpZiAoc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9IikgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwzODQwMCIpOwogICAgICAgICB9CiAjZW5kaWYKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1JPT1RfTkZTCiAgICAgICAgIGFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwpAQCAtMjkxLDE5ICsyNjUsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCByYnR4NDl4N19jb21tb25fdGltZV9pbml0KHZvaWQpCi17Ci0JLyogY2hhbmdlIGRlZmF1bHQgdmFsdWUgdG8gdWRlbGF5L21kZWxheSB0YWtlIHJlYXNvbmFibGUgdGltZSAqLwotCWxvb3BzX3Blcl9qaWZmeSA9IHR4eDlfY3B1X2Nsb2NrIC8gSFogLyAyOwotCi0JbWlwc19ocHRfZnJlcXVlbmN5ID0gdHh4OV9jcHVfY2xvY2sgLyAyOwotCWlmIChfX19fcmF3X3JlYWRxKCZ0eDQ5MjdfY2NmZ3B0ci0+Y2NmZykgJiBUWDQ5MjdfQ0NGR19USU5URElTKQotCQl0eHg5X2Nsb2NrZXZlbnRfaW5pdChUWDQ5MjdfVE1SX1JFRygwKSAmIDB4ZmZmZmZmZmZmVUxMLAotCQkJCSAgICAgVFhYOV9JUlFfQkFTRSArIDE3LAotCQkJCSAgICAgNTAwMDAwMDApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MjdfdGltZV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MjdfY2xvY2tfaW5pdCh2b2lkKQogewogCS8qCiAJICogQVNTVU1QVElPTjogUENJRElWTU9ERSBpcyBjb25maWd1cmVkIGZvciBQQ0kgMzNNSHogb3IgNjZNSHouCkBAIC0zMjUsMTEgKzI4Nyw5IEBACiAJZGVmYXVsdDoKIAkJdHh4OV9jcHVfY2xvY2sgPSAyMDAwMDAwMDA7CS8qIDIwME1IeiAqLwogCX0KLQotCXJidHg0OXg3X2NvbW1vbl90aW1lX2luaXQoKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTM3X3RpbWVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTM3X2Nsb2NrX2luaXQodm9pZCkKIHsKIAkvKgogCSAqIEFTU1VNUFRJT046IFBDSURJVk1PREUgaXMgY29uZmlndXJlZCBmb3IgUENJIDMzTUh6IG9yIDY2TUh6LgpAQCAtMzU3LDE1ICszMTcsMTggQEAKIAlkZWZhdWx0OgogCQl0eHg5X2NwdV9jbG9jayA9IDMzMzMzMzMzMzsJLyogMzMzTUh6ICovCiAJfQorfQogCi0JcmJ0eDQ5eDdfY29tbW9uX3RpbWVfaW5pdCgpOworc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTI3X3RpbWVfaW5pdCh2b2lkKQoreworCXR4NDkyN190aW1lX2luaXQoMCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHRvc2hpYmFfcmJ0eDQ5MjdfcnRjX2luaXQodm9pZCkKIHsKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIF9faW5pdGRhdGEgcmVzID0gewotCQkuc3RhcnQJPSAweDFjMDEwMDAwLAotCQkuZW5kCT0gMHgxYzAxMDAwMCArIDB4ODAwIC0gMSwKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzID0geworCQkuc3RhcnQJPSBSQlRYNDkyN19CUkFNUlRDX0JBU0UgLSBJT19CQVNFLAorCQkuZW5kCT0gUkJUWDQ5MjdfQlJBTVJUQ19CQVNFIC0gSU9fQkFTRSArIDB4ODAwIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPQpAQCAtMzc1LDcgKzMzOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHJidHg0OTI3X25lX2luaXQodm9pZCkKIHsKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIF9faW5pdGRhdGEgcmVzW10gPSB7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0gewogCQl7CiAJCQkuc3RhcnQJPSBSQlRYNDkyN19SVExfODAxOV9CQVNFLAogCQkJLmVuZAk9IFJCVFg0OTI3X1JUTF84MDE5X0JBU0UgKyAweDIwIC0gMSwKQEAgLTQzNCw3ICszOTcsNyBAQAogCS5wcm9tX2luaXQgPSByYnR4NDkyN19wcm9tX2luaXQsCiAJLm1lbV9zZXR1cCA9IHJidHg0OTI3X21lbV9zZXR1cCwKIAkuaXJxX3NldHVwID0gcmJ0eDQ5MjdfaXJxX3NldHVwLAotCS50aW1lX2luaXQgPSByYnR4NDkzN190aW1lX2luaXQsCisJLnRpbWVfaW5pdCA9IHJidHg0OTI3X3RpbWVfaW5pdCwKIAkuZGV2aWNlX2luaXQgPSByYnR4NDkyN19kZXZpY2VfaW5pdCwKIAkuYXJjaF9pbml0ID0gcmJ0eDQ5MzdfYXJjaF9pbml0LAogI2lmZGVmIENPTkZJR19QQ0kKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3Byb20uYyBiL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3Byb20uYwppbmRleCBmYmIzNzQ1Li5lZTE4OTUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5MzgvcHJvbS5jCkBAIC0xOCwxMiArMTgsOCBAQAogCiB2b2lkIF9faW5pdCByYnR4NDkzOF9wcm9tX2luaXQodm9pZCkKIHsKLQlleHRlcm4gaW50IHR4NDkzOF9nZXRfbWVtX3NpemUodm9pZCk7Ci0JaW50IG1zaXplOwogI2lmbmRlZiBDT05GSUdfVFg0OTM4X05BTkRfQk9PVAogCXByb21faW5pdF9jbWRsaW5lKCk7CiAjZW5kaWYKLQotCW1zaXplID0gdHg0OTM4X2dldF9tZW1fc2l6ZSgpOwotCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1zaXplIDw8IDIwLCBCT09UX01FTV9SQU0pOworCWFkZF9tZW1vcnlfcmVnaW9uKDAsIHR4NDkzOF9nZXRfbWVtX3NpemUoKSwgQk9PVF9NRU1fUkFNKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9zZXR1cC5jCmluZGV4IGFhYTk4N2EuLjZjMmI5OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYwpAQCAtMjAsMjEgKzIwLDE0IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3R4eDl0bXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdHh4OS9nZW5lcmljLmg+CiAjaW5jbHVkZSA8YXNtL3R4eDkvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3R4eDkvcmJ0eDQ5MzguaD4KLSNpZmRlZiBDT05GSUdfU0VSSUFMX1RYWDkKLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGFzbS90eHg5L3NwaS5oPgogI2luY2x1ZGUgPGFzbS90eHg5cGlvLmg+CiAKLXN0YXRpYyBpbnQgdHg0OTM4X2NjZmdfdG9lb24gPSAxOwotCiBzdGF0aWMgdm9pZCByYnR4NDkzOF9tYWNoaW5lX2hhbHQodm9pZCkKIHsKICAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJTeXN0ZW0gSGFsdGVkXG4iKTsKQEAgLTE4MiwxODggKzE3NSwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJidHg0OTM4X2ZwZ2FfcmVzb3VyY2U7Ci1zdGF0aWMgc3RydWN0IHJlc291cmNlIHR4NDkzOF9zZHJhbV9yZXNvdXJjZVs0XTsKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHg0OTM4X3NyYW1fcmVzb3VyY2U7Ci0KLXZvaWQgX19pbml0IHR4NDkzOF9ib2FyZF9zZXR1cCh2b2lkKQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZGl2bW9kZTsKLQlpbnQgY3B1Y2xrID0gMDsKLQl1bnNpZ25lZCBsb25nIHBjb2RlID0gVFg0OTM4X1JFVl9QQ09ERSgpOwotCi0JaW9wb3J0X3Jlc291cmNlLnN0YXJ0ID0gMDsKLQlpb3BvcnRfcmVzb3VyY2UuZW5kID0gMHhmZmZmZmZmZjsKLQlpb21lbV9yZXNvdXJjZS5zdGFydCA9IDA7Ci0JaW9tZW1fcmVzb3VyY2UuZW5kID0gMHhmZmZmZmZmZjsJLyogZXhwYW5kIHRvIDRHQiAqLwotCi0JdHh4OV9yZWdfcmVzX2luaXQocGNvZGUsIFRYNDkzOF9SRUdfQkFTRSwKLQkJCSAgVFg0OTM4X1JFR19TSVpFKTsKLQkvKiBTRFJBTUMsRUJVU0MgYXJlIGNvbmZpZ3VyZWQgYnkgUFJPTSAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKCEoVFg0OTM4X0VCVVNDX0NSKGkpICYgMHg4KSkKLQkJCWNvbnRpbnVlOwkvKiBkaXNhYmxlZCAqLwotCQl0eHg5X2NlX3Jlc1tpXS5zdGFydCA9ICh1bnNpZ25lZCBsb25nKVRYNDkzOF9FQlVTQ19CQShpKTsKLQkJdHh4OV9jZV9yZXNbaV0uZW5kID0KLQkJCXR4eDlfY2VfcmVzW2ldLnN0YXJ0ICsgVFg0OTM4X0VCVVNDX1NJWkUoaSkgLSAxOwotCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnR4eDlfY2VfcmVzW2ldKTsKLQl9Ci0KLQkvKiBjbG9ja3MgKi8KLQlpZiAodHh4OV9tYXN0ZXJfY2xvY2spIHsKLQkJdTY0IGNjZmcgPSBfX19fcmF3X3JlYWRxKCZ0eDQ5MzhfY2NmZ3B0ci0+Y2NmZyk7Ci0JCS8qIGNhbGN1bGF0ZSBnYnVzX2Nsb2NrIGFuZCBjcHVfY2xvY2tfZnJlcSBmcm9tIG1hc3Rlcl9jbG9jayAqLwotCQlkaXZtb2RlID0gKF9fdTMyKWNjZmcgJiBUWDQ5MzhfQ0NGR19ESVZNT0RFX01BU0s7Ci0JCXN3aXRjaCAoZGl2bW9kZSkgewotCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfODoKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzEwOgotCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfMTI6Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xNjoKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzE4OgotCQkJdHh4OV9nYnVzX2Nsb2NrID0gdHh4OV9tYXN0ZXJfY2xvY2sgKiA0OyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCXR4eDlfZ2J1c19jbG9jayA9IHR4eDlfbWFzdGVyX2Nsb2NrOwotCQl9Ci0JCXN3aXRjaCAoZGl2bW9kZSkgewotCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfMjoKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzg6Ci0JCQljcHVjbGsgPSB0eHg5X2didXNfY2xvY2sgKiAyOyBicmVhazsKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzJfNToKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzEwOgotCQkJY3B1Y2xrID0gdHh4OV9nYnVzX2Nsb2NrICogNSAvIDI7IGJyZWFrOwotCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfMzoKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzEyOgotCQkJY3B1Y2xrID0gdHh4OV9nYnVzX2Nsb2NrICogMzsgYnJlYWs7Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV80OgotCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfMTY6Ci0JCQljcHVjbGsgPSB0eHg5X2didXNfY2xvY2sgKiA0OyBicmVhazsKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzRfNToKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzE4OgotCQkJY3B1Y2xrID0gdHh4OV9nYnVzX2Nsb2NrICogOSAvIDI7IGJyZWFrOwotCQl9Ci0JCXR4eDlfY3B1X2Nsb2NrID0gY3B1Y2xrOwotCX0gZWxzZSB7Ci0JCXU2NCBjY2ZnID0gX19fX3Jhd19yZWFkcSgmdHg0OTM4X2NjZmdwdHItPmNjZmcpOwotCQlpZiAodHh4OV9jcHVfY2xvY2sgPT0gMCkgewotCQkJdHh4OV9jcHVfY2xvY2sgPSAzMDAwMDAwMDA7CS8qIDMwME1IeiAqLwotCQl9Ci0JCS8qIGNhbGN1bGF0ZSBnYnVzX2Nsb2NrIGFuZCBtYXN0ZXJfY2xvY2sgZnJvbSBjcHVfY2xvY2tfZnJlcSAqLwotCQljcHVjbGsgPSB0eHg5X2NwdV9jbG9jazsKLQkJZGl2bW9kZSA9IChfX3UzMiljY2ZnICYgVFg0OTM4X0NDRkdfRElWTU9ERV9NQVNLOwotCQlzd2l0Y2ggKGRpdm1vZGUpIHsKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzI6Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV84OgotCQkJdHh4OV9nYnVzX2Nsb2NrID0gY3B1Y2xrIC8gMjsgYnJlYWs7Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8yXzU6Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xMDoKLQkJCXR4eDlfZ2J1c19jbG9jayA9IGNwdWNsayAqIDIgLyA1OyBicmVhazsKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzM6Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xMjoKLQkJCXR4eDlfZ2J1c19jbG9jayA9IGNwdWNsayAvIDM7IGJyZWFrOwotCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfNDoKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzE2OgotCQkJdHh4OV9nYnVzX2Nsb2NrID0gY3B1Y2xrIC8gNDsgYnJlYWs7Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV80XzU6Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xODoKLQkJCXR4eDlfZ2J1c19jbG9jayA9IGNwdWNsayAqIDIgLyA5OyBicmVhazsKLQkJfQotCQlzd2l0Y2ggKGRpdm1vZGUpIHsKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzg6Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xMDoKLQkJY2FzZSBUWDQ5MzhfQ0NGR19ESVZNT0RFXzEyOgotCQljYXNlIFRYNDkzOF9DQ0ZHX0RJVk1PREVfMTY6Ci0JCWNhc2UgVFg0OTM4X0NDRkdfRElWTU9ERV8xODoKLQkJCXR4eDlfbWFzdGVyX2Nsb2NrID0gdHh4OV9nYnVzX2Nsb2NrIC8gNDsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl0eHg5X21hc3Rlcl9jbG9jayA9IHR4eDlfZ2J1c19jbG9jazsKLQkJfQotCX0KLQkvKiBjaGFuZ2UgZGVmYXVsdCB2YWx1ZSB0byB1ZGVsYXkvbWRlbGF5IHRha2UgcmVhc29uYWJsZSB0aW1lICovCi0JbG9vcHNfcGVyX2ppZmZ5ID0gdHh4OV9jcHVfY2xvY2sgLyBIWiAvIDI7Ci0KLQkvKiBDQ0ZHICovCi0JLyogY2xlYXIgV2F0Y2hEb2dSZXNldCxCdXNFcnJvck9uV3JpdGUgZmxhZyAoVzFDKSAqLwotCXR4NDkzOF9jY2ZnX3NldChUWDQ5MzhfQ0NGR19XRFJTVCB8IFRYNDkzOF9DQ0ZHX0JFT1cpOwotCS8qIGRvIHJlc2V0IG9uIHdhdGNoZG9nICovCi0JdHg0OTM4X2NjZmdfc2V0KFRYNDkzOF9DQ0ZHX1dSKTsKLQkvKiBjbGVhciBQQ0lDMSByZXNldCAqLwotCXR4eDlfY2xlYXI2NCgmdHg0OTM4X2NjZmdwdHItPmNsa2N0ciwgVFg0OTM4X0NMS0NUUl9QQ0lDMVJTVCk7Ci0KLQkvKiBlbmFibGUgVGltZW91dCBCdXNFcnJvciAqLwotCWlmICh0eDQ5MzhfY2NmZ190b2VvbikKLQkJdHg0OTM4X2NjZmdfc2V0KFRYNDkzOF9DQ0ZHX1RPRSk7Ci0KLQkvKiBETUEgc2VsZWN0aW9uICovCi0JdHh4OV9jbGVhcjY0KCZ0eDQ5MzhfY2NmZ3B0ci0+cGNmZywgVFg0OTM4X1BDRkdfRE1BU0VMX0FMTCk7Ci0KLQkvKiBVc2UgZXh0ZXJuYWwgY2xvY2sgZm9yIGV4dGVybmFsIGFyYml0ZXIgKi8KLQlpZiAoIShfX19fcmF3X3JlYWRxKCZ0eDQ5MzhfY2NmZ3B0ci0+Y2NmZykgJiBUWDQ5MzhfQ0NGR19QQ0lBUkIpKQotCQl0eHg5X2NsZWFyNjQoJnR4NDkzOF9jY2ZncHRyLT5wY2ZnLCBUWDQ5MzhfUENGR19QQ0lDTEtFTl9BTEwpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgLS0gJWRNSHooTSVkTUh6KSBDUklSOiUwOHggQ0NGRzolbGx4IFBDRkc6JWxseFxuIiwKLQkgICAgICAgdHh4OV9wY29kZV9zdHIsCi0JICAgICAgIChjcHVjbGsgKyA1MDAwMDApIC8gMTAwMDAwMCwKLQkgICAgICAgKHR4eDlfbWFzdGVyX2Nsb2NrICsgNTAwMDAwKSAvIDEwMDAwMDAsCi0JICAgICAgIChfX3UzMilfX19fcmF3X3JlYWRxKCZ0eDQ5MzhfY2NmZ3B0ci0+Y3JpciksCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpX19fX3Jhd19yZWFkcSgmdHg0OTM4X2NjZmdwdHItPmNjZmcpLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKV9fX19yYXdfcmVhZHEoJnR4NDkzOF9jY2ZncHRyLT5wY2ZnKSk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlcyBTRFJBTUMgLS0iLCB0eHg5X3Bjb2RlX3N0cik7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGxvbmcgY3IgPSB0eDQ5Mzhfc2RyYW1jcHRyLT5jcltpXTsKLQkJdW5zaWduZWQgbG9uZyByYW1fYmFzZSwgcmFtX3NpemU7Ci0JCWlmICghKCh1bnNpZ25lZCBsb25nKWNyICYgMHgwMDAwMDQwMCkpCi0JCQljb250aW51ZTsJLyogZGlzYWJsZWQgKi8KLQkJcmFtX2Jhc2UgPSAodW5zaWduZWQgbG9uZykoY3IgPj4gNDkpIDw8IDIxOwotCQlyYW1fc2l6ZSA9ICgodW5zaWduZWQgbG9uZykoY3IgPj4gMzMpICsgMSkgPDwgMjE7Ci0JCWlmIChyYW1fYmFzZSA+PSAweDIwMDAwMDAwKQotCQkJY29udGludWU7CS8qIGhpZ2ggbWVtb3J5IChpZ25vcmUpICovCi0JCXByaW50aygiIENSJWQ6JTAxNkx4IiwgaSwgY3IpOwotCQl0eDQ5Mzhfc2RyYW1fcmVzb3VyY2VbaV0ubmFtZSA9ICJTRFJBTSI7Ci0JCXR4NDkzOF9zZHJhbV9yZXNvdXJjZVtpXS5zdGFydCA9IHJhbV9iYXNlOwotCQl0eDQ5Mzhfc2RyYW1fcmVzb3VyY2VbaV0uZW5kID0gcmFtX2Jhc2UgKyByYW1fc2l6ZSAtIDE7Ci0JCXR4NDkzOF9zZHJhbV9yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwotCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnR4NDkzOF9zZHJhbV9yZXNvdXJjZVtpXSk7Ci0JfQotCXByaW50aygiIFRSOiUwOUx4XG4iLCB0eDQ5Mzhfc2RyYW1jcHRyLT50cik7Ci0KLQkvKiBTUkFNICovCi0JaWYgKHR4NDkzOF9zcmFtY3B0ci0+Y3IgJiAxKSB7Ci0JCXVuc2lnbmVkIGludCBzaXplID0gMHg4MDA7Ci0JCXVuc2lnbmVkIGxvbmcgYmFzZSA9Ci0JCQkodHg0OTM4X3NyYW1jcHRyLT5jciA+PiAoMzktMTEpKSAmIH4oc2l6ZSAtIDEpOwotCQl0eDQ5Mzhfc3JhbV9yZXNvdXJjZS5uYW1lID0gIlNSQU0iOwotCQl0eDQ5Mzhfc3JhbV9yZXNvdXJjZS5zdGFydCA9IGJhc2U7Ci0JCXR4NDkzOF9zcmFtX3Jlc291cmNlLmVuZCA9IGJhc2UgKyBzaXplIC0gMTsKLQkJdHg0OTM4X3NyYW1fcmVzb3VyY2UuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKLQkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZ0eDQ5Mzhfc3JhbV9yZXNvdXJjZSk7Ci0JfQotCi0JLyogVE1SICovCi0JZm9yIChpID0gMDsgaSA8IFRYNDkzOF9OUl9UTVI7IGkrKykKLQkJdHh4OV90bXJfaW5pdChUWDQ5MzhfVE1SX1JFRyhpKSAmIDB4ZmZmZmZmZmZmVUxMKTsKLQotCS8qIGVuYWJsZSBETUEgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQotCQlfX19fcmF3X3dyaXRlcShUWDQ5MzhfRE1BX01DUl9NU1RFTiwKLQkJCSAgICAgICAodm9pZCBfX2lvbWVtICopKFRYNDkzOF9ETUFfUkVHKGkpICsgMHg1MCkpOwotCi0JLyogUElPICovCi0JX19yYXdfd3JpdGVsKDAsICZ0eDQ5MzhfcGlvcHRyLT5tYXNrY3B1KTsKLQlfX3Jhd193cml0ZWwoMCwgJnR4NDkzOF9waW9wdHItPm1hc2tleHQpOwotCi0jaWZkZWYgQ09ORklHX1BDSQotCXR4eDlfYWxsb2NfcGNpX2NvbnRyb2xsZXIoJnR4eDlfcHJpbWFyeV9wY2ljLCAwLCAwLCAwLCAwKTsKLSNlbmRpZgotfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MzhfdGltZV9pbml0KHZvaWQpCiB7Ci0JbWlwc19ocHRfZnJlcXVlbmN5ID0gdHh4OV9jcHVfY2xvY2sgLyAyOwotCWlmIChfX19fcmF3X3JlYWRxKCZ0eDQ5MzhfY2NmZ3B0ci0+Y2NmZykgJiBUWDQ5MzhfQ0NGR19USU5URElTKQotCQl0eHg5X2Nsb2NrZXZlbnRfaW5pdChUWDQ5MzhfVE1SX1JFRygwKSAmIDB4ZmZmZmZmZmZmVUxMLAotCQkJCSAgICAgVFhYOV9JUlFfQkFTRSArIFRYNDkzOF9JUl9UTVIoMCksCi0JCQkJICAgICB0eHg5X2didXNfY2xvY2sgLyAyKTsKKwl0eDQ5MzhfdGltZV9pbml0KDApOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MzhfbWVtX3NldHVwKHZvaWQpCkBAIC0zNzEsMzkgKzE4NiwyNCBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBwY2ZnOwogCWNoYXIgKmFyZ3B0cjsKIAotCWlvbWVtX3Jlc291cmNlLmVuZCA9IDB4ZmZmZmZmZmY7CS8qIDRHQiAqLwotCiAJaWYgKHR4eDlfbWFzdGVyX2Nsb2NrID09IDApCiAJCXR4eDlfbWFzdGVyX2Nsb2NrID0gMjUwMDAwMDA7IC8qIDI1TUh6ICovCi0JdHg0OTM4X2JvYXJkX3NldHVwKCk7Ci0jaWZuZGVmIENPTkZJR19QQ0kKKworCXR4NDkzOF9zZXR1cCgpOworCisjaWZkZWYgQ09ORklHX1BDSQorCXR4eDlfYWxsb2NfcGNpX2NvbnRyb2xsZXIoJnR4eDlfcHJpbWFyeV9wY2ljLCAwLCAwLCAwLCAwKTsKKyNlbHNlCiAJc2V0X2lvX3BvcnRfYmFzZShSQlRYNDkzOF9FVEhFUl9CQVNFKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NFUklBTF9UWFg5Ci0JewotCQlleHRlcm4gaW50IGVhcmx5X3NlcmlhbF90eHg5X3NldHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwotCQlpbnQgaTsKLQkJc3RydWN0IHVhcnRfcG9ydCByZXE7Ci0JCWZvcihpID0gMDsgaSA8IDI7IGkrKykgewotCQkJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKLQkJCXJlcS5saW5lID0gaTsKLQkJCXJlcS5pb3R5cGUgPSBVUElPX01FTTsKLQkJCXJlcS5tZW1iYXNlID0gKGNoYXIgKikoMHhmZjFmZjMwMCArIGkgKiAweDEwMCk7Ci0JCQlyZXEubWFwYmFzZSA9IDB4ZmYxZmYzMDAgKyBpICogMHgxMDA7Ci0JCQlyZXEuaXJxID0gUkJUWDQ5MzhfSVJRX0lSQ19TSU8oaSk7Ci0JCQlyZXEuZmxhZ3MgfD0gVVBGX0JVR0dZX1VBUlQgLypIQVZFX0NUU19MSU5FKi87Ci0JCQlyZXEudWFydGNsayA9IDUwMDAwMDAwOwotCQkJZWFybHlfc2VyaWFsX3R4eDlfc2V0dXAoJnJlcSk7Ci0JCX0KLQl9CisJdHg0OTM4X3NldHVwX3NlcmlhbCgpOwogI2lmZGVmIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFCiAgICAgICAgIGFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwogICAgICAgICBpZiAoc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9IikgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwzODQwMCIpOwogICAgICAgICB9CiAjZW5kaWYKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzhfTVBMRVhfUElPNThfNjEKIAlwcmludGsoIlBJT1NFTDogZGlzYWJsaW5nIGJvdGggYXRhIGFuZCBuYW5kIHNlbGVjdGlvblxuIik7CkBAIC00NTcsNyArMjU3LDcgQEAKIAlyYnR4NDkzOF9mcGdhX3Jlc291cmNlLnN0YXJ0ID0gQ1BIWVNBRERSKFJCVFg0OTM4X0ZQR0FfUkVHX0FERFIpOwogCXJidHg0OTM4X2ZwZ2FfcmVzb3VyY2UuZW5kID0gQ1BIWVNBRERSKFJCVFg0OTM4X0ZQR0FfUkVHX0FERFIpICsgMHhmZmZmOwogCXJidHg0OTM4X2ZwZ2FfcmVzb3VyY2UuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKLQlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyYnR4NDkzOF9mcGdhX3Jlc291cmNlKSkKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmdHh4OV9jZV9yZXNbMl0sICZyYnR4NDkzOF9mcGdhX3Jlc291cmNlKSkKIAkJcHJpbnRrKCJyZXF1ZXN0IHJlc291cmNlIGZvciBmcGdhIGZhaWxlZFxuIik7CiAKIAlfbWFjaGluZV9yZXN0YXJ0ID0gcmJ0eDQ5MzhfbWFjaGluZV9yZXN0YXJ0OwpAQCAtNDg4LDE4ICsyODgsNiBAQAogCXJldHVybiBJU19FUlIoZGV2KSA/IFBUUl9FUlIoZGV2KSA6IDA7CiB9CiAKLS8qIEdQSU8gc3VwcG9ydCAqLwotCi1pbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogc3RhdGljIERFRklORV9TUElOTE9DSyhyYnR4NDkzOF9zcGlfZ3Bpb19sb2NrKTsKIAogc3RhdGljIHZvaWQgcmJ0eDQ5Mzhfc3BpX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQsCkBAIC01NzksNyArMzY3LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTM4X2FyY2hfaW5pdCh2b2lkKQogewotCXR4eDlfZ3Bpb19pbml0KFRYNDkzOF9QSU9fUkVHICYgMHhmZmZmZmZmZmZVTEwsIDAsIDE2KTsKIAlncGlvY2hpcF9hZGQoJnJidHg0OTM4X3NwaV9ncGlvX2NoaXApOwogCXJidHg0OTM4X3BjaV9zZXR1cCgpOwogCXJidHg0OTM4X3NwaV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtc2VyaWFsLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtc2VyaWFsLmMKaW5kZXggYjljMjY4Yy4uOGIwNTRlNyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXNlcmlhbC5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvbW4xMDMwMC1zZXJpYWwuYwpAQCAtMzkyLDcgKzM5Miw3IEBACiBzdGF0aWMgdm9pZCBtbjEwMzAwX3NlcmlhbF9yZWNlaXZlX2ludGVycnVwdChzdHJ1Y3QgbW4xMDMwMF9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdWFydF9pY291bnQgKmljb3VudCA9ICZwb3J0LT51YXJ0Lmljb3VudDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dWFydC5pbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnVhcnQuaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgaXg7CiAJaW50IGNvdW50OwogCXU4IHN0LCBjaCwgcHVzaCwgc3RhdHVzLCBvdmVycnVuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCBkZTg4OTcyLi43MzdlYmY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTEyLDYgKzExMiw3IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfS1BST0JFUworCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgogCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKIAlzZWxlY3QgSEFWRV9MTUIKIAlzZWxlY3QgSEFWRV9ETUFfQVRUUlMgaWYgUFBDNjQKQEAgLTE5OSw3ICsyMDAsNyBAQAogCiBjb25maWcgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gQURCX1BNVSB8fCBQUENfRUZJS0EgfHwgUFBDX0xJVEU1MjAwCisJZGVwZW5kcyBvbiBBREJfUE1VIHx8IFBQQ19FRklLQSB8fCBQUENfTElURTUyMDAgfHwgUFBDXzgzeHgKIAogY29uZmlnIFBQQ19EQ1JfTkFUSVZFCiAJYm9vbApAQCAtNTY4LDExICs1NjksMTUgQEAKIGNvbmZpZyBNQ0EKIAlib29sCiAKKyMgUGxhdGZvcm1zIHRoYXQgd2hhdCBQQ0kgdHVybmVkIHVuY29uZGl0aW9uYWxseSBqdXN0IGRvIHNlbGVjdCBQQ0kKKyMgaW4gdGhlaXIgY29uZmlnIG5vZGUuICBQbGF0Zm9ybXMgdGhhdCB3YW50IHRvIGNob29zZSBhdCBjb25maWcKKyMgdGltZSBzaG91bGQgc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFCitjb25maWcgUFBDX1BDSV9DSE9JQ0UKKwlib29sCisKIGNvbmZpZyBQQ0kKLQlib29sICJQQ0kgc3VwcG9ydCIgaWYgNDB4IHx8IENQTTIgfHwgUFBDXzgzeHggfHwgUFBDXzg1eHggfHwgUFBDXzg2eHggXAotCQl8fCBQUENfTVBDNTJ4eCB8fCAoRU1CRURERUQgJiYgKFBQQ19QU0VSSUVTIHx8IFBQQ19JU0VSSUVTKSkgXAotCQl8fCBQUENfUFMzIHx8IDQ0eAotCWRlZmF1bHQgeSBpZiAhNDB4ICYmICFDUE0yICYmICE4eHggJiYgIVBQQ19NUEM1MTJ4ICYmICFQUENfODN4eCBcCisJYm9vbCAiUENJIHN1cHBvcnQiIGlmIFBQQ19QQ0lfQ0hPSUNFCisJZGVmYXVsdCB5IGlmICE0MHggJiYgIUNQTTIgJiYgITh4eCAmJiAhUFBDXzgzeHggXAogCQkmJiAhUFBDXzg1eHggJiYgIVBQQ184Nnh4CiAJZGVmYXVsdCBQQ0lfUEVSTUVESUEgaWYgITR4eCAmJiAhQ1BNMiAmJiAhOHh4CiAJZGVmYXVsdCBQQ0lfUVNQQU4gaWYgITR4eCAmJiAhQ1BNMiAmJiA4eHgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKaW5kZXggMjg0MGFiNi4uOGM4YWFkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKQEAgLTQxLDIyICs0MSw2IEBACiAJICBUaGlzIG9wdGlvbiB3aWxsIGFkZCBhIHNtYWxsIGFtb3VudCBvZiBvdmVyaGVhZCB0byBhbGwgaHlwZXJ2aXNvcgogCSAgY2FsbHMuCiAKLWNvbmZpZyBERUJVR0dFUgotCWJvb2wgIkVuYWJsZSBkZWJ1Z2dlciBob29rcyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKLQkgIEluY2x1ZGUgaW4ta2VybmVsIGhvb2tzIGZvciBrZXJuZWwgZGVidWdnZXJzLiBVbmxlc3MgeW91IGFyZQotCSAgaW50ZW5kaW5nIHRvIGRlYnVnIHRoZSBrZXJuZWwsIHNheSBOIGhlcmUuCi0KLWNvbmZpZyBLR0RCCi0JYm9vbCAiSW5jbHVkZSBrZ2RiIGtlcm5lbCBkZWJ1Z2dlciIKLQlkZXBlbmRzIG9uIERFQlVHR0VSICYmIChCUk9LRU4gfHwgUFBDX0dFTjU1MCB8fCA0eHgpCi0Jc2VsZWN0IERFQlVHX0lORk8KLQloZWxwCi0JICBJbmNsdWRlIGluLWtlcm5lbCBob29rcyBmb3Iga2dkYiwgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgbGV2ZWwKLQkgIGRlYnVnZ2VyLiAgU2VlIDxodHRwOi8va2dkYi5zb3VyY2Vmb3JnZS5uZXQvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQkgIFVubGVzcyB5b3UgYXJlIGludGVuZGluZyB0byBkZWJ1ZyB0aGUga2VybmVsLCBzYXkgTiBoZXJlLgotCiBjb25maWcgQ09ERV9QQVRDSElOR19TRUxGVEVTVAogCWJvb2wgIlJ1biBzZWxmLXRlc3RzIG9mIHRoZSBjb2RlLXBhdGNoaW5nIGNvZGUuIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCkBAIC02NywzNiArNTEsOSBAQAogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVmYXVsdCBuCiAKLWNob2ljZQotCXByb21wdCAiU2VyaWFsIFBvcnQiCi0JZGVwZW5kcyBvbiBLR0RCCi0JZGVmYXVsdCBLR0RCX1RUWVMxCi0KLWNvbmZpZyBLR0RCX1RUWVMwCi0JYm9vbCAidHR5UzAiCi0KLWNvbmZpZyBLR0RCX1RUWVMxCi0JYm9vbCAidHR5UzEiCi0KLWNvbmZpZyBLR0RCX1RUWVMyCi0JYm9vbCAidHR5UzIiCi0KLWNvbmZpZyBLR0RCX1RUWVMzCi0JYm9vbCAidHR5UzMiCi0KLWVuZGNob2ljZQotCi1jb25maWcgS0dEQl9DT05TT0xFCi0JYm9vbCAiRW5hYmxlIHNlcmlhbCBjb25zb2xlIHRocnUga2dkYiBwb3J0IgotCWRlcGVuZHMgb24gS0dEQiAmJiA4eHggfHwgQ1BNMgotCWhlbHAKLQkgIElmIHlvdSBlbmFibGUgdGhpcywgYWxsIHNlcmlhbCBjb25zb2xlIG1lc3NhZ2VzIHdpbGwgYmUgc2VudAotCSAgb3ZlciB0aGUgZ2RiIHN0dWIuCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgWE1PTgogCWJvb2wgIkluY2x1ZGUgeG1vbiBrZXJuZWwgZGVidWdnZXIiCi0JZGVwZW5kcyBvbiBERUJVR0dFUgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJaGVscAogCSAgSW5jbHVkZSBpbi1rZXJuZWwgaG9va3MgZm9yIHRoZSB4bW9uIGtlcm5lbCBtb25pdG9yL2RlYnVnZ2VyLgogCSAgVW5sZXNzIHlvdSBhcmUgaW50ZW5kaW5nIHRvIGRlYnVnIHRoZSBrZXJuZWwsIHNheSBOIGhlcmUuCkBAIC0xMjYsNiArODMsMTEgQEAKIAkgIHRvIHNheSBZIGhlcmUsIHVubGVzcyB5b3UncmUgYnVpbGRpbmcgZm9yIGEgbWVtb3J5LWNvbnN0cmFpbmVkCiAJICBzeXN0ZW0uCiAKK2NvbmZpZyBERUJVR0dFUgorCWJvb2wKKwlkZXBlbmRzIG9uIEtHREIgfHwgWE1PTgorCWRlZmF1bHQgeQorCiBjb25maWcgSVJRU1RBQ0tTCiAJYm9vbCAiVXNlIHNlcGFyYXRlIGtlcm5lbCBzdGFja3Mgd2hlbiBwcm9jZXNzaW5nIGludGVycnVwdHMiCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQppbmRleCAxOWY4M2M4Li4xNDE3NGFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQpAQCAtMTYzLDEyICsxNjMsMTIgQEAKICAgICAgIGNtZF9mbGV4ID0gJChGTEVYKSAtbyRAICQ8OyBjcCAkQCAkQF9zaGlwcGVkCiAKICQob2JqKS9kdGMtc3JjL2R0Yy1wYXJzZXIudGFiLmM6ICQoc3JjKS9kdGMtc3JjL2R0Yy1wYXJzZXIueSBGT1JDRQotICAgICAkKGNhbGwgaWZfY2hhbmdlZCxiaXNvbikKKwkkKGNhbGwgaWZfY2hhbmdlZCxiaXNvbikKIAogJChvYmopL2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuaDogJChvYmopL2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuYwogCiAkKG9iaikvZHRjLXNyYy9kdGMtbGV4ZXIubGV4LmM6ICQoc3JjKS9kdGMtc3JjL2R0Yy1sZXhlci5sIEZPUkNFCi0gICAgICQoY2FsbCBpZl9jaGFuZ2VkLGZsZXgpCisJJChjYWxsIGlmX2NoYW5nZWQsZmxleCkKIGVuZGlmCiAKICMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM3NDQ4aHBjMi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNzQ0OGhwYzIuZHRzCmluZGV4IDcwNWMyM2MuLjI1NDRmM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM3NDQ4aHBjMi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzc0NDhocGMyLmR0cwpAQCAtMTgsNiArMTgsMTYgQEAKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKIAorCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZW5ldDA7CisJCWV0aGVybmV0MSA9ICZlbmV0MTsKKworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKworCQlwY2kwID0gJnBjaTA7CisJfTsKKwogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPTwwPjsKQEAgLTc4LDcgKzg4LDcgQEAKIAogCQl9OwogCi0JCWV0aGVybmV0QDYyMDAgeworCQllbmV0MDogZXRoZXJuZXRANjIwMCB7CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKQEAgLTkxLDcgKzEwMSw3IEBACiAJCQlwaHktaGFuZGxlID0gPCZwaHk4PjsKIAkJfTsKIAotCQlldGhlcm5ldEA2NjAwIHsKKwkJZW5ldDE6IGV0aGVybmV0QDY2MDAgewogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwxPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0xMDUsNyArMTE1LDcgQEAKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTk+OwogCQl9OwogCi0JCXNlcmlhbEA3ODA4IHsKKwkJc2VyaWFsMDogc2VyaWFsQDc4MDggewogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CiAJCQlyZWcgPSA8MHg3ODA4IDB4MjAwPjsKQEAgLTExNCw3ICsxMjQsNyBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKLQkJc2VyaWFsQDdjMDggeworCQlzZXJpYWwxOiBzZXJpYWxAN2MwOCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKIAkJCXJlZyA9IDwweDdjMDggMHgyMDA+OwpAQCAtMTMxLDcgKzE0MSw3IEBACiAJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOwogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwotCQlwY2lAMTAwMCB7CisJCXBjaTA6IHBjaUAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidHNpMTA4LXBjaSI7CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKQEAgLTE4NCw4ICsxOTQsNCBAQAogCQkJfTsKIAkJfTsKIAl9OwotCWNob3NlbiB7Ci0JCWxpbnV4LHN0ZG91dC1wYXRoID0gIi90c2kxMDhAYzAwMDAwMDAvc2VyaWFsQDc4MDgiOwotCX07Ci0KIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cwppbmRleCAzNjY0ZmI1Li4yYTk0YWUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMKQEAgLTEwOSwxOCArMTA5LDM4IEBACiAJCQlyZWcgPSA8MHgyMDAgMHgxMDA+OwogCQl9OwogCi0JCWkyY0AzMDAwIHsKKwkJc2xlZXAtbmV4dXMgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWRmc3JyOwotCQkJcnRjQDY4IHsKLQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwotCQkJCXJlZyA9IDwweDY4PjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CisJCQlyYW5nZXM7CisKKwkJCWkyY0AzMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWRmc3JyOworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQl9OworCQkJfTsKKworCQkJY3J5cHRvQDMwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMyLjIiLCAiZnNsLHNlYzIuMSIsCisJCQkJICAgICAgICAgICAgICJmc2wsc2VjMi4wIjsKKwkJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDExIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJZnNsLG51bS1jaGFubmVscyA9IDwxPjsKKwkJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CisJCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDRjPjsKKwkJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4MDEyMjAwM2Y+OwogCQkJfTsKIAkJfTsKIApAQCAtMTg4LDM3ICsyMDgsNDQgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJcGh5X3R5cGUgPSAidXRtaV93aWRlIjsKLQkJfTsKLQotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MjAgMHg4PjsKLQkJCQlyZWcgPSA8MHg0PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDMwMDAwMD47CiAJCX07CiAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlzbGVlcCA9IDwmcG1jIDB4MjAwMDAwMDA+OworCQkJcmFuZ2VzOworCiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7Ci0JCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgInNpbXBsZS1idXMiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAweDggMzYgMHg4IDM1IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8ICZwaHkxID47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDI0NTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHk0OiBldGhlcm5ldC1waHlANCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIwIDB4OD47CisJCQkJCXJlZyA9IDwweDQ+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CkBAIC0yMzEsNiArMjU4LDggQEAKIAkJCWludGVycnVwdHMgPSA8MzQgMHg4IDMzIDB4OCAzMiAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCAmcGh5NCA+OworCQkJc2xlZXAgPSA8JnBtYyAweDEwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMjUzLDE3ICsyODIsNiBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCX07CiAKLQkJY3J5cHRvQDMwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYzIuMiIsICJmc2wsc2VjMi4xIiwgImZzbCxzZWMyLjAiOwotCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDExIDB4OD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWZzbCxudW0tY2hhbm5lbHMgPSA8MT47Ci0JCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47Ci0JCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4NGM+OwotCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDAxMjIwMDNmPjsKLQkJfTsKLQogCQkvKiBJUElDCiAJCSAqIGludGVycnVwdHMgY2VsbCA9IDxpbnRyICMsIHNlbnNlPgogCQkgKiBzZW5zZSB2YWx1ZXMgbWF0Y2ggbGludXggSU9SRVNPVVJDRV9JUlFfKiBkZWZpbmVzOgpAQCAtMjc3LDM2ICsyOTUsMTE5IEBACiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQkJZGV2aWNlX3R5cGUgPSAiaXBpYyI7CiAJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxMy1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlmc2wsbXBjODMxMy13YWtldXAtdGltZXIgPSA8Jmd0bTE+OworCisJCQkvKiBSZW1vdmUgdGhpcyAob3IgY2hhbmdlIHRvICJva2F5IikgaWYgeW91IGhhdmUKKwkJCSAqIGEgUkVWQTMgb3IgbGF0ZXIgYm9hcmQsIGlmIHlvdSBhcHBseSBvbmUgb2YgdGhlCisJCQkgKiB3b3JrYXJvdW5kcyBsaXN0ZWQgaW4gc2VjdGlvbiA4LjUgb2YgdGhlIGJvYXJkCisJCQkgKiBtYW51YWwsIG9yIGlmIHlvdSBhcmUgYWRhcHRpbmcgdGhpcyBkZXZpY2UgdHJlZQorCQkJICogdG8gYSBkaWZmZXJlbnQgYm9hcmQuCisJCQkgKi8KKwkJCXN0YXR1cyA9ICJmYWlsIjsKKwkJfTsKKworCQlndG0xOiB0aW1lckA1MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxMy1ndG0iLCAiZnNsLGd0bSI7CisJCQlyZWcgPSA8MHg1MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw5MCA4IDc4IDggODQgOCA3MiA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OworCisJCXRpbWVyQDYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzEzLWd0bSIsICJmc2wsZ3RtIjsKKwkJCXJlZyA9IDwweDYwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDkxIDggNzkgOCA4NSA4IDczIDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAotCXBjaTA6IHBjaUBlMDAwODUwMCB7Ci0JCWNlbGwtaW5kZXggPSA8MT47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OwotCQlpbnRlcnJ1cHQtbWFwID0gPAorCXNsZWVwLW5leHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OworCQlyYW5nZXM7CiAKLQkJCQkvKiBJRFNFTCAweDBFIC1taW5pIFBDSSAqLwotCQkJCSAweDcwMDAgMHgwIDB4MCAweDEgJmlwaWMgMTggMHg4Ci0JCQkJIDB4NzAwMCAweDAgMHgwIDB4MiAmaXBpYyAxOCAweDgKLQkJCQkgMHg3MDAwIDB4MCAweDAgMHgzICZpcGljIDE4IDB4OAotCQkJCSAweDcwMDAgMHgwIDB4MCAweDQgJmlwaWMgMTggMHg4CisJCXBjaTA6IHBjaUBlMDAwODUwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCQkvKiBJRFNFTCAweDBFIC1taW5pIFBDSSAqLworCQkJCQkgMHg3MDAwIDB4MCAweDAgMHgxICZpcGljIDE4IDB4OAorCQkJCQkgMHg3MDAwIDB4MCAweDAgMHgyICZpcGljIDE4IDB4OAorCQkJCQkgMHg3MDAwIDB4MCAweDAgMHgzICZpcGljIDE4IDB4OAorCQkJCQkgMHg3MDAwIDB4MCAweDAgMHg0ICZpcGljIDE4IDB4OAogCi0JCQkJLyogSURTRUwgMHgwRiAtIFBDSSBzbG90ICovCi0JCQkJIDB4NzgwMCAweDAgMHgwIDB4MSAmaXBpYyAxNyAweDgKLQkJCQkgMHg3ODAwIDB4MCAweDAgMHgyICZpcGljIDE4IDB4OAotCQkJCSAweDc4MDAgMHgwIDB4MCAweDMgJmlwaWMgMTcgMHg4Ci0JCQkJIDB4NzgwMCAweDAgMHgwIDB4NCAmaXBpYyAxOCAweDg+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJaW50ZXJydXB0cyA9IDw2NiAweDg+OwotCQlidXMtcmFuZ2UgPSA8MHgwIDB4MD47Ci0JCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKLQkJCSAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCi0JCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjAwMDAwMCAweDAgMHgwMDEwMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDI+OwotCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OwotCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7Ci0JCWRldmljZV90eXBlID0gInBjaSI7CisJCQkJCS8qIElEU0VMIDB4MEYgLSBQQ0kgc2xvdCAqLworCQkJCQkgMHg3ODAwIDB4MCAweDAgMHgxICZpcGljIDE3IDB4OAorCQkJCQkgMHg3ODAwIDB4MCAweDAgMHgyICZpcGljIDE4IDB4OAorCQkJCQkgMHg3ODAwIDB4MCAweDAgMHgzICZpcGljIDE3IDB4OAorCQkJCQkgMHg3ODAwIDB4MCAweDAgMHg0ICZpcGljIDE4IDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWludGVycnVwdHMgPSA8NjYgMHg4PjsKKwkJCWJ1cy1yYW5nZSA9IDwweDAgMHgwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKKwkJCQkgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCX07CisKKwkJZG1hQDgyYTggeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hIiwgImZzbCxlbG8tZG1hIjsKKwkJCXJlZyA9IDwweGUwMDA4MmE4IDQ+OworCQkJcmFuZ2VzID0gPDAgMHhlMDAwODEwMCAweDFhOD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWludGVycnVwdHMgPSA8NzEgOD47CisKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLAorCQkJCSAgICAgICAgICAgICAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDAgMHgyOD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJfTsKKworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLAorCQkJCSAgICAgICAgICAgICAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHgyOD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJfTsKKworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzEzLWRtYS1jaGFubmVsIiwKKwkJCQkgICAgICAgICAgICAgImZzbCxlbG8tZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDI4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQl9OworCisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLAorCQkJCSAgICAgICAgICAgICAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWludGVycnVwdHMgPSA8NzEgOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCX07CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCmluZGV4IDk4MTk0MWUuLjY2NjE4NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCkBAIC0zODgsNiArMzg4LDIwIEBACiAJCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAogCQkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKIAkJCQkJICAweDAgMHgwMDEwMDAwMD47CisKKwkJCQlpc2FAMWUgeworCQkJCQlkZXZpY2VfdHlwZSA9ICJpc2EiOworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkJCXJlZyA9IDwweGYwMDAgMCAwIDAgMD47CisJCQkJCXJhbmdlcyA9IDwxIDAgMHgwMTAwMDAwMCAwIDAKKwkJCQkJCSAgMHgwMDAwMTAwMD47CisKKwkJCQkJcnRjQDcwIHsKKwkJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLGIwMCI7CisJCQkJCQlyZWcgPSA8MSAweDcwIDI+OworCQkJCQl9OworCQkJCX07CiAJCQl9OwogCQl9OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDRfZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQ0X2RzX2RlZmNvbmZpZwppbmRleCAwNDJhODVlLi5hMDU4M2U1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDRfZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0NF9kc19kZWZjb25maWcKQEAgLTk5NywxMCArOTk3LDEyIEBACiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKICMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKICMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NzJfZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTcyX2RzX2RlZmNvbmZpZwppbmRleCAwMzYyN2NmZS4uMTY0ZmQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTcyX2RzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NzJfZHNfZGVmY29uZmlnCkBAIC05OTcsMTAgKzk5NywxMiBAQAogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CiAjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwppbmRleCAzZWZhYjcxLi5mYTAxNzA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMTAwNSwxMCArMTAwNSwxMiBAQAogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CiAjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODYxMF9ocGNkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2MTBfaHBjZF9kZWZjb25maWcKaW5kZXggNTYxMmQ0MC4uY2RmOThhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODYxMF9ocGNkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LXJjNQotIyBNb24gSnVuICA5IDA4OjUwOjI0IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNgorIyBUdWUgSnVsIDE1IDA4OjMxOjAxIDIwMDgKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtNTEsNiArNTEsOCBAQAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CitDT05GSUdfSElCRVJOQVRFXzMyPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtOTcsNiArOTksNyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QQ1NQS1JfUExBVEZPUk09eQogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQpAQCAtMTE3LDcgKzEyMCw3IEBACiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xNTMsMzEgKzE1Niw0MyBAQAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CiAjCi0jIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzg2eHg9eQorQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorQ09ORklHX1BQQ19DSFJQPXkKICMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODZ4eD15CiAjIENPTkZJR19NUEM4NjQxX0hQQ04gaXMgbm90IHNldAogIyBDT05GSUdfU0JDODY0MUQgaXMgbm90IHNldAogQ09ORklHX01QQzg2MTBfSFBDRD15CiBDT05GSUdfTVBDODYxMD15CisjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX05BVElWRT15CisjIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorQ09ORklHX1BQQ19SVEFTPXkKKyMgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORyBpcyBub3Qgc2V0CitDT05GSUdfUlRBU19QUk9DPXkKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzEwNj15CiAjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19QUEM2MDFfU1lOQ19GSVggaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKK0NPTkZJR19GU0xfVUxJMTU3NT15CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTIwMiw2ICsyMTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjI4LDExICsyNDQsMTMgQEAKICMKICMgQnVzIG9wdGlvbnMKICMKKyMgQ09ORklHX0lTQSBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CiBDT05GSUdfUFBDX0lORElSRUNUX1BDST15CiBDT05GSUdfRlNMX1NPQz15CiBDT05GSUdfRlNMX1BDST15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQogQ09ORklHX1BDSV9TWVNDQUxMPXkKQEAgLTQ2OSw2ICs0ODcsNyBAQAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19GTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldApAQCAtNTcxLDYgKzU5MCw4IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NRVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTUFDNTNDOTQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldApAQCAtNjM5LDYgKzY2MCwxMCBAQAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldApAQCAtNjU1LDYgKzY4MCw4IEBACiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiAjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CkBAIC03NjIsMTQgKzc4OSwxNiBAQAogIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19CUklRX1BBTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTc4Nyw5ICs4MTYsMTEgQEAKICMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0hZRFJBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BPV0VSTUFDPXkKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldApAQCAtODI2LDYgKzg1Nyw3IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtODg4LDYgKzkyMCw5IEBACiAjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUExBVElOVU0gaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkFMS1lSSUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CkBAIC0xMDI3LDEyICsxMDYyLDE5IEBACiAjCiAjIEFMU0EgUG93ZXJNYWMgZGV2aWNlcwogIworIyBDT05GSUdfU05EX1BPV0VSTUFDIGlzIG5vdCBzZXQKIAogIwogIyBBTFNBIFBvd2VyUEMgZGV2aWNlcwogIwogCiAjCisjIEFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyCisjCisjIENPTkZJR19TTkRfQU9BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BT0FfU09VTkRCVVMgaXMgbm90IHNldAorCisjCiAjIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKICMKIENPTkZJR19TTkRfU09DPXkKQEAgLTEwNzUsNyArMTExNyw1NyBAQAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKQEAgLTEyOTUsOCArMTM4NywxMSBAQAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2NDFfaHBjbl9kZWZjb25maWcKaW5kZXggNGE4MTcxNS4uODY3YjhjMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2NDFfaHBjbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwpAQCAtOTkxLDEwICs5OTEsMTIgQEAKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQogIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZTkxYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnCkBAIC0wLDAgKzEsMzMwNCBAQAorIyBwb3dlcnBjCisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYtZ2l0MgorIyBUdWUgSnVsIDE1IDIzOjU0OjE4IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CitDT05GSUdfUkVEQk9PVD15CitDT05GSUdfSElCRVJOQVRFXzMyPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLU1RBVFM9eQorQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CitDT05GSUdfVEFTS19YQUNDVD15CitDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKK0NPTkZJR19BVURJVD15CitDT05GSUdfQVVESVRTWVNDQUxMPXkKK0NPTkZJR19BVURJVF9UUkVFPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUF9OUz15CitDT05GSUdfQ0dST1VQX0RFVklDRT15CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1VTRVJfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUF9TQ0hFRD15CitDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQorQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKKyMgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorQ09ORklHX1VUU19OUz15CitDT05GSUdfSVBDX05TPXkKK0NPTkZJR19VU0VSX05TPXkKK0NPTkZJR19QSURfTlM9eQorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX1BDU1BLUl9QTEFURk9STT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX01BUktFUlM9eQorQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19LUFJPQkVTPXkKK0NPTkZJR19LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKK0NPTkZJR19MU0Y9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKK0NPTkZJR19CTEtfREVWX0lOVEVHUklUWT15CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CitDT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDNTJ4eD15CisjIENPTkZJR19QUENfTVBDNTIwMF9TSU1QTEUgaXMgbm90IHNldAorQ09ORklHX1BQQ19FRklLQT15CisjIENPTkZJR19QUENfTElURTUyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19NUEM1MjAwX0JVR0ZJWD15CitDT05GSUdfUFBDX01QQzUyMDBfR1BJTz15CitDT05GSUdfUFBDX1BNQUM9eQorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODJ4eD15CitDT05GSUdfTVBDODI3Ml9BRFM9eQorQ09ORklHX1BRMkZBRFM9eQorQ09ORklHX0VQODI0OEU9eQorQ09ORklHX1BRMkFEUz15CitDT05GSUdfODI2MD15CitDT05GSUdfODI3Mj15CitDT05GSUdfUFEyX0FEU19QQ0lfUElDPXkKK0NPTkZJR19QUENfODN4eD15CitDT05GSUdfTVBDODMxeF9SREI9eQorQ09ORklHX01QQzgzMnhfTURTPXkKK0NPTkZJR19NUEM4MzJ4X1JEQj15CitDT05GSUdfTVBDODM0eF9NRFM9eQorQ09ORklHX01QQzgzNHhfSVRYPXkKK0NPTkZJR19NUEM4MzZ4X01EUz15CitDT05GSUdfTVBDODM2eF9SREs9eQorQ09ORklHX01QQzgzN3hfTURTPXkKK0NPTkZJR19NUEM4Mzd4X1JEQj15CitDT05GSUdfU0JDODM0eD15CitDT05GSUdfQVNQODM0eD15CitDT05GSUdfUFBDX01QQzgzMXg9eQorQ09ORklHX1BQQ19NUEM4MzJ4PXkKK0NPTkZJR19QUENfTVBDODM0eD15CitDT05GSUdfUFBDX01QQzgzN3g9eQorQ09ORklHX1BQQ184Nnh4PXkKK0NPTkZJR19NUEM4NjQxX0hQQ049eQorQ09ORklHX1NCQzg2NDFEPXkKK0NPTkZJR19NUEM4NjEwX0hQQ0Q9eQorQ09ORklHX01QQzg2NDE9eQorQ09ORklHX01QQzg2MTA9eQorIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAorQ09ORklHX1BQQ19OQVRJVkU9eQorIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0lQSUM9eQorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0k4MjU5PXkKK0NPTkZJR19QUENfUlRBUz15CisjIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1JUQVNfUFJPQz15CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDMTA2PXkKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorQ09ORklHX0NQVV9GUkVRX0RFQlVHPXkKK0NPTkZJR19DUFVfRlJFUV9TVEFUPW0KK0NPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCisjCitDT05GSUdfQ1BVX0ZSRVFfUE1BQz15CisjIENPTkZJR19QUEM2MDFfU1lOQ19GSVggaXMgbm90IHNldAorQ09ORklHX1RBVT15CisjIENPTkZJR19UQVVfSU5UIGlzIG5vdCBzZXQKK0NPTkZJR19UQVVfQVZFUkFHRT15CitDT05GSUdfUVVJQ0NfRU5HSU5FPXkKK0NPTkZJR19DUE0yPXkKK0NPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HPXkKK0NPTkZJR19GU0xfVUxJMTU3NT15CitDT05GSUdfQ1BNPXkKK0NPTkZJR19QUENfQkVTVENPTU09eQorQ09ORklHX1BQQ19CRVNUQ09NTV9BVEE9bQorQ09ORklHX1BQQ19CRVNUQ09NTV9GRUM9bQorQ09ORklHX1BQQ19CRVNUQ09NTV9HRU5fQkQ9bQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCitDT05GSUdfSElHSE1FTT15CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKK0NPTkZJR19BUkNIX1dBTlRTX0ZSRUVaRVJfQ09OVFJPTD15CitDT05GSUdfUE09eQorQ09ORklHX1BNX0RFQlVHPXkKKyMgQ09ORklHX1BNX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0NBTl9QTV9UUkFDRT15CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CitDT05GSUdfSElCRVJOQVRJT049eQorQ09ORklHX1BNX1NURF9QQVJUSVRJT049IiIKK0NPTkZJR19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19JU0E9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX0ZTTF9MQkM9eQorQ09ORklHX0ZTTF9HVE09eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lfODI2MD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQorQ09ORklHX1BDSUVBU1BNPXkKKyMgQ09ORklHX1BDSUVBU1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CitDT05GSUdfUENJX01TST15CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorQ09ORklHX0NBUkRCVVM9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworQ09ORklHX1lFTlRBPXkKK0NPTkZJR19ZRU5UQV9PMj15CitDT05GSUdfWUVOVEFfUklDT0g9eQorQ09ORklHX1lFTlRBX1RJPXkKK0NPTkZJR19ZRU5UQV9FTkVfVFVORT15CitDT05GSUdfWUVOVEFfVE9TSElCQT15CitDT05GSUdfUEQ2NzI5PW0KK0NPTkZJR19JODIwOTI9bQorQ09ORklHX0k4MjM2NT1tCisjIENPTkZJR19UQ0lDIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfUFJPQkU9eQorQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorQ09ORklHX0hBU19SQVBJRElPPXkKKyMgQ09ORklHX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCitDT05GSUdfQURWQU5DRURfT1BUSU9OUz15CisjIENPTkZJR19MT1dNRU1fU0laRV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCisjIENPTkZJR19QQUdFX09GRlNFVF9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCisjIENPTkZJR19LRVJORUxfU1RBUlRfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCisjIENPTkZJR19UQVNLX1NJWkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9eQorQ09ORklHX1hGUk1fU1VCX1BPTElDWT15CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKK0NPTkZJR19YRlJNX1NUQVRJU1RJQ1M9eQorQ09ORklHX05FVF9LRVk9bQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCitDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPW0KK0NPTkZJR19JTkVUX1RDUF9ESUFHPW0KK0NPTkZJR19UQ1BfQ09OR19BRFZBTkNFRD15CitDT05GSUdfVENQX0NPTkdfQklDPW0KK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfVENQX0NPTkdfV0VTVFdPT0Q9bQorQ09ORklHX1RDUF9DT05HX0hUQ1A9bQorQ09ORklHX1RDUF9DT05HX0hTVENQPW0KK0NPTkZJR19UQ1BfQ09OR19IWUJMQT1tCitDT05GSUdfVENQX0NPTkdfVkVHQVM9bQorQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFPW0KK0NPTkZJR19UQ1BfQ09OR19MUD1tCitDT05GSUdfVENQX0NPTkdfVkVOTz1tCitDT05GSUdfVENQX0NPTkdfWUVBSD1tCitDT05GSUdfVENQX0NPTkdfSUxMSU5PSVM9bQorIyBDT05GSUdfREVGQVVMVF9CSUMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ1VCSUM9eQorIyBDT05GSUdfREVGQVVMVF9IVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfVkVHQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9XRVNUV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1JFTk8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX1RDUF9NRDVTSUc9eQorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKK0NPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lQVjZfTUlQNj1tCitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBWNl9TVUJUUkVFUz15CitDT05GSUdfSVBWNl9NUk9VVEU9eQorQ09ORklHX0lQVjZfUElNU01fVjI9eQorQ09ORklHX05FVExBQkVMPXkKK0NPTkZJR19ORVRXT1JLX1NFQ01BUks9eQorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fRENDUD1tCitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19EQ0NQPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fVURQTElURT1tCitDT05GSUdfTkZfTkFUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorQ09ORklHX05GX05BVF9URlRQPW0KK0NPTkZJR19ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfUFBUUD1tCitDT05GSUdfTkZfTkFUX0gzMjM9bQorQ09ORklHX05GX05BVF9TSVA9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorCisjCisjIERFQ25ldDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0RFQ05FVF9ORl9HUkFCVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBCcmlkZ2U6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW0KK0NPTkZJR19CUklER0VfRUJUX0JST1VURT1tCitDT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tCitDT05GSUdfQlJJREdFX0VCVF9UX05BVD1tCitDT05GSUdfQlJJREdFX0VCVF84MDJfMz1tCitDT05GSUdfQlJJREdFX0VCVF9BTU9ORz1tCitDT05GSUdfQlJJREdFX0VCVF9BUlA9bQorQ09ORklHX0JSSURHRV9FQlRfSVA9bQorQ09ORklHX0JSSURHRV9FQlRfTElNSVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSSz1tCitDT05GSUdfQlJJREdFX0VCVF9QS1RUWVBFPW0KK0NPTkZJR19CUklER0VfRUJUX1NUUD1tCitDT05GSUdfQlJJREdFX0VCVF9WTEFOPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KK0NPTkZJR19CUklER0VfRUJUX0ROQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSS19UPW0KK0NPTkZJR19CUklER0VfRUJUX1JFRElSRUNUPW0KK0NPTkZJR19CUklER0VfRUJUX1NOQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTE9HPW0KK0NPTkZJR19CUklER0VfRUJUX1VMT0c9bQorQ09ORklHX0JSSURHRV9FQlRfTkZMT0c9bQorQ09ORklHX0lQX0RDQ1A9bQorQ09ORklHX0lORVRfRENDUF9ESUFHPW0KK0NPTkZJR19JUF9EQ0NQX0FDS1ZFQz15CisKKyMKKyMgRENDUCBDQ0lEcyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfRENDUF9DQ0lEMj1tCisjIENPTkZJR19JUF9EQ0NQX0NDSUQyX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQX0NDSUQzPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDNfUlRPPTEwMAorQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9bQorCisjCisjIERDQ1AgS2VybmVsIEhhY2tpbmcKKyMKKyMgQ09ORklHX0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVF9EQ0NQUFJPQkU9bQorQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CitDT05GSUdfVElQQz1tCisjIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FUTT1tCitDT05GSUdfQVRNX0NMSVA9bQorIyBDT05GSUdfQVRNX0NMSVBfTk9fSUNNUCBpcyBub3Qgc2V0CitDT05GSUdfQVRNX0xBTkU9bQorIyBDT05GSUdfQVRNX01QT0EgaXMgbm90IHNldAorQ09ORklHX0FUTV9CUjI2ODQ9bQorIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFPW0KK0NPTkZJR19WTEFOXzgwMjFRPW0KK0NPTkZJR19ERUNORVQ9bQorQ09ORklHX0RFQ05FVF9ST1VURVI9eQorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CitDT05GSUdfQVRBTEs9bQorQ09ORklHX0RFVl9BUFBMRVRBTEs9bQorIyBDT05GSUdfTFRQQyBpcyBub3Qgc2V0CisjIENPTkZJR19DT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19JUEREUD1tCitDT05GSUdfSVBERFBfRU5DQVA9eQorQ09ORklHX0lQRERQX0RFQ0FQPXkKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0FOX1JPVVRFUj1tCitDT05GSUdfTkVUX1NDSEVEPXkKKworIworIyBRdWV1ZWluZy9TY2hlZHVsaW5nCisjCitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KK0NPTkZJR19ORVRfU0NIX0hGU0M9bQorQ09ORklHX05FVF9TQ0hfQVRNPW0KK0NPTkZJR19ORVRfU0NIX1BSSU89bQorQ09ORklHX05FVF9TQ0hfUkVEPW0KK0NPTkZJR19ORVRfU0NIX1NGUT1tCitDT05GSUdfTkVUX1NDSF9URVFMPW0KK0NPTkZJR19ORVRfU0NIX1RCRj1tCitDT05GSUdfTkVUX1NDSF9HUkVEPW0KK0NPTkZJR19ORVRfU0NIX0RTTUFSSz1tCitDT05GSUdfTkVUX1NDSF9ORVRFTT1tCitDT05GSUdfTkVUX1NDSF9JTkdSRVNTPW0KKworIworIyBDbGFzc2lmaWNhdGlvbgorIworQ09ORklHX05FVF9DTFM9eQorQ09ORklHX05FVF9DTFNfQkFTSUM9bQorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KK0NPTkZJR19DTFNfVTMyX1BFUkY9eQorQ09ORklHX0NMU19VMzJfTUFSSz15CitDT05GSUdfTkVUX0NMU19SU1ZQPW0KK0NPTkZJR19ORVRfQ0xTX1JTVlA2PW0KK0NPTkZJR19ORVRfQ0xTX0ZMT1c9bQorQ09ORklHX05FVF9FTUFUQ0g9eQorQ09ORklHX05FVF9FTUFUQ0hfU1RBQ0s9MzIKK0NPTkZJR19ORVRfRU1BVENIX0NNUD1tCitDT05GSUdfTkVUX0VNQVRDSF9OQllURT1tCitDT05GSUdfTkVUX0VNQVRDSF9VMzI9bQorQ09ORklHX05FVF9FTUFUQ0hfTUVUQT1tCitDT05GSUdfTkVUX0VNQVRDSF9URVhUPW0KK0NPTkZJR19ORVRfQ0xTX0FDVD15CitDT05GSUdfTkVUX0FDVF9QT0xJQ0U9bQorQ09ORklHX05FVF9BQ1RfR0FDVD1tCitDT05GSUdfR0FDVF9QUk9CPXkKK0NPTkZJR19ORVRfQUNUX01JUlJFRD1tCitDT05GSUdfTkVUX0FDVF9JUFQ9bQorQ09ORklHX05FVF9BQ1RfTkFUPW0KK0NPTkZJR19ORVRfQUNUX1BFRElUPW0KK0NPTkZJR19ORVRfQUNUX1NJTVA9bQorQ09ORklHX05FVF9DTFNfSU5EPXkKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19JUkRBPW0KKworIworIyBJckRBIHByb3RvY29scworIworQ09ORklHX0lSTEFOPW0KK0NPTkZJR19JUk5FVD1tCitDT05GSUdfSVJDT01NPW0KKyMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAorCisjCisjIElyREEgb3B0aW9ucworIworQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKK0NPTkZJR19JUkRBX0ZBU1RfUlI9eQorIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0lSVFRZX1NJUj1tCisKKyMKKyMgRG9uZ2xlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RPTkdMRSBpcyBub3Qgc2V0CitDT05GSUdfS0lOR1NVTl9ET05HTEU9bQorQ09ORklHX0tTREFaWkxFX0RPTkdMRT1tCitDT05GSUdfS1M5NTlfRE9OR0xFPW0KKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfSVJEQT1tCitDT05GSUdfU0lHTUFURUxfRklSPW0KK0NPTkZJR19OU0NfRklSPW0KK0NPTkZJR19XSU5CT05EX0ZJUj1tCitDT05GSUdfVE9TSElCQV9GSVI9bQorQ09ORklHX1NNQ19JUkNDX0ZJUj1tCitDT05GSUdfQUxJX0ZJUj1tCitDT05GSUdfVkxTSV9GSVI9bQorQ09ORklHX1ZJQV9GSVI9bQorQ09ORklHX01DU19GSVI9bQorQ09ORklHX0JUPW0KK0NPTkZJR19CVF9MMkNBUD1tCitDT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9SRkNPTU09bQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9bQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQlRfSENJVVNCPW0KK0NPTkZJR19CVF9IQ0lVU0JfU0NPPXkKK0NPTkZJR19CVF9IQ0lVQVJUPW0KK0NPTkZJR19CVF9IQ0lVQVJUX0g0PXkKK0NPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQorQ09ORklHX0JUX0hDSVVBUlRfTEw9eQorQ09ORklHX0JUX0hDSUJDTTIwM1g9bQorQ09ORklHX0JUX0hDSUJQQTEwWD1tCitDT05GSUdfQlRfSENJQkZVU0I9bQorQ09ORklHX0JUX0hDSURUTDE9bQorQ09ORklHX0JUX0hDSUJUM0M9bQorQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KK0NPTkZJR19CVF9IQ0lCVFVBUlQ9bQorQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CisKKyMKKyMgV2lyZWxlc3MKKyMKK0NPTkZJR19DRkc4MDIxMT1tCitDT05GSUdfTkw4MDIxMT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX01BQzgwMjExPW0KK0NPTkZJR19NQUM4MDIxMV9RT1M9eQorCisjCisjIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCisjCitDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0icGlkIgorQ09ORklHX01BQzgwMjExX01FU0g9eQorQ09ORklHX01BQzgwMjExX0xFRFM9eQorQ09ORklHX01BQzgwMjExX0RFQlVHRlM9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KK0NPTkZJR19JRUVFODAyMTFfREVCVUc9eQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorQ09ORklHX05FVF85UD1tCitDT05GSUdfTkVUXzlQX1ZJUlRJTz1tCisjIENPTkZJR19ORVRfOVBfREVCVUcgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19ERVZSRVM9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj15CitDT05GSUdfUFJPQ19FVkVOVFM9eQorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0dQSU89eQorQ09ORklHX09GX0kyQz15CitDT05GSUdfUEFSUE9SVD1tCitDT05GSUdfUEFSUE9SVF9QQz1tCitDT05GSUdfUEFSUE9SVF9TRVJJQUw9bQorIyBDT05GSUdfUEFSUE9SVF9QQ19GSUZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX1BDX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfMTI4ND15CitDT05GSUdfUEFSUE9SVF9OT1RfUEM9eQorQ09ORklHX1BOUD15CisjIENPTkZJR19QTlBfREVCVUcgaXMgbm90IHNldAorCisjCisjIFByb3RvY29scworIworQ09ORklHX0lTQVBOUD15CisjIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorQ09ORklHX01BQ19GTE9QUFk9bQorIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19WSVJUSU9fQkxLPW0KK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NXzkzQ1g2PW0KKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTPW0KK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworQ09ORklHX0lERV9BVEFQST15CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CisjIENPTkZJR19CTEtfREVWX0lERUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPW0KK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQorIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfVEFTS19JT0NUTD15CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVQTlAgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFX1BNQUM9eQorQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQVRBMTAwRklSU1Q9eQorQ09ORklHX0JMS19ERVZfSURFRE1BX1BNQUM9eQorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKK0NPTkZJR19CTEtfREVWX0hEX09OTFk9eQorQ09ORklHX0JMS19ERVZfSEQ9eQorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CitDT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0hSX0RFVl9PU1NUPW0KK0NPTkZJR19CTEtfREVWX1NSPW0KK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz15CitDT05GSUdfQ0hSX0RFVl9TQ0g9bQorQ09ORklHX1NDU0lfRU5DTE9TVVJFPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TUlBfQVRUUlM9bQorQ09ORklHX1NDU0lfU1JQX1RHVF9BVFRSUz15CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfNzAwMEZBU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSEExNTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUhBMTU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1UxNF8zNEYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01FU0g9bQorQ09ORklHX1NDU0lfTUVTSF9TWU5DX1JBVEU9NQorQ09ORklHX1NDU0lfTUVTSF9SRVNFVF9ERUxBWV9NUz00MDAwCitDT05GSUdfU0NTSV9NQUM1M0M5ND1tCitDT05GSUdfU0NTSV9TUlA9bQorQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBPXkKKyMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9ESD15CitDT05GSUdfU0NTSV9ESF9SREFDPW0KK0NPTkZJR19TQ1NJX0RIX0hQX1NXPW0KK0NPTkZJR19TQ1NJX0RIX0VNQz1tCitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9GU0w9bQorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorQ09ORklHX0FUQV9QSUlYPW0KKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CitDT05GSUdfUERDX0FETUE9bQorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBX0dFTkVSSUM9bQorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVNBUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX01QQzUyeHg9bQorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9PUFRJRE1BPW0KKyMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1FESSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1ZJQT1tCisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EX1ZMQiBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9QTEFURk9STT1tCitDT05GSUdfUEFUQV9PRl9QTEFURk9STT1tCitDT05GSUdfUEFUQV9TQ0g9bQorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCitDT05GSUdfTURfUkFJRDEwPW0KK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorQ09ORklHX01EX0ZBVUxUWT1tCitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fREVCVUc9eQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KK0NPTkZJR19ETV9NVUxUSVBBVEg9bQorIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAorQ09ORklHX0RNX1VFVkVOVD15CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKK0NPTkZJR19GSVJFV0lSRT1tCitDT05GSUdfRklSRVdJUkVfT0hDST1tCitDT05GSUdfRklSRVdJUkVfT0hDSV9ERUJVRz15CitDT05GSUdfRklSRVdJUkVfU0JQMj1tCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKK0NPTkZJR19BREI9eQorQ09ORklHX0FEQl9DVURBPXkKK0NPTkZJR19BREJfUE1VPXkKK0NPTkZJR19BREJfUE1VX0xFRD15CitDT05GSUdfQURCX1BNVV9MRURfSURFPXkKK0NPTkZJR19QTUFDX0FQTV9FTVU9eQorQ09ORklHX1BNQUNfTUVESUFCQVk9eQorQ09ORklHX1BNQUNfQkFDS0xJR0hUPXkKKyMgQ09ORklHX1BNQUNfQkFDS0xJR0hUX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfQURCX01BQ0lPPXkKK0NPTkZJR19JTlBVVF9BREJISUQ9eQorQ09ORklHX01BQ19FTVVNT1VTRUJUTj15CitDT05GSUdfVEhFUk1fV0lORFRVTk5FTD1tCitDT05GSUdfVEhFUk1fQURUNzQ2WD1tCitDT05GSUdfV0lOREZBUk09eQorIyBDT05GSUdfQU5TTENEIGlzIG5vdCBzZXQKK0NPTkZJR19QTUFDX1JBQ0tNRVRFUj1tCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFPXkKK0NPTkZJR19JRkI9bQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KK0NPTkZJR19NQUNWTEFOPW0KK0NPTkZJR19FUVVBTElaRVI9bQorQ09ORklHX1RVTj1tCitDT05GSUdfVkVUSD1tCitDT05GSUdfTkVUX1NCMTAwMD1tCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj1tCisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPW0KK0NPTkZJR19EQVZJQ09NX1BIWT1tCitDT05GSUdfUVNFTUlfUEhZPW0KK0NPTkZJR19MWFRfUEhZPW0KK0NPTkZJR19DSUNBREFfUEhZPW0KK0NPTkZJR19WSVRFU1NFX1BIWT1tCitDT05GSUdfU01TQ19QSFk9bQorQ09ORklHX0JST0FEQ09NX1BIWT1tCitDT05GSUdfSUNQTFVTX1BIWT1tCitDT05GSUdfUkVBTFRFS19QSFk9bQorQ09ORklHX01ESU9fQklUQkFORz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorQ09ORklHX01BQ0U9bQorIyBDT05GSUdfTUFDRV9BQVVJX1BPUlQgaXMgbm90IHNldAorQ09ORklHX0JNQUM9bQorQ09ORklHX0hBUFBZTUVBTD1tCitDT05GSUdfU1VOR0VNPW0KK0NPTkZJR19DQVNTSU5JPW0KK0NPTkZJR19ORVRfVkVORE9SXzNDT009eQorIyBDT05GSUdfRUwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VMMiBpcyBub3Qgc2V0CisjIENPTkZJR19FTFBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfRUwxNiBpcyBub3Qgc2V0CitDT05GSUdfRUwzPW0KKyMgQ09ORklHXzNDNTE1IGlzIG5vdCBzZXQKK0NPTkZJR19WT1JURVg9bQorQ09ORklHX1RZUEhPT049bQorIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAorQ09ORklHX05FVF9WRU5ET1JfU01DPXkKKyMgQ09ORklHX1dEODB4MyBpcyBub3Qgc2V0CitDT05GSUdfVUxUUkE9bQorIyBDT05GSUdfU01DOTE5NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfVFVMSVA9eQorQ09ORklHX0RFMjEwNFg9bQorQ09ORklHX1RVTElQPW0KKyMgQ09ORklHX1RVTElQX01XSSBpcyBub3Qgc2V0CitDT05GSUdfVFVMSVBfTU1JTz15CisjIENPTkZJR19UVUxJUF9OQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19ERTRYNT1tCitDT05GSUdfV0lOQk9ORF84NDA9bQorQ09ORklHX0RNOTEwMj1tCitDT05GSUdfVUxJNTI2WD1tCitDT05GSUdfUENNQ0lBX1hJUkNPTT1tCisjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAorIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX05FVF9JU0E9eQorIyBDT05GSUdfRTIxMDAgaXMgbm90IHNldAorQ09ORklHX0VXUkszPW0KKyMgQ09ORklHX0VFWFBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFWFBSRVNTX1BSTyBpcyBub3Qgc2V0CisjIENPTkZJR19IUExBTl9QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xQNDg2RSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEgxNkkgaXMgbm90IHNldAorQ09ORklHX05FMjAwMD1tCisjIENPTkZJR19aTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFRVE4MDA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CitDT05GSUdfUENORVQzMj1tCitDT05GSUdfQU1EODExMV9FVEg9bQorQ09ORklHX0FNRDgxMTFFX05BUEk9eQorQ09ORklHX0FEQVBURUNfU1RBUkZJUkU9bQorQ09ORklHX0FEQVBURUNfU1RBUkZJUkVfTkFQST15CisjIENPTkZJR19BQzMyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVBSSUNPVCBpcyBub3Qgc2V0CitDT05GSUdfQjQ0PW0KK0NPTkZJR19CNDRfUENJX0FVVE9TRUxFQ1Q9eQorQ09ORklHX0I0NF9QQ0lDT1JFX0FVVE9TRUxFQ1Q9eQorQ09ORklHX0I0NF9QQ0k9eQorQ09ORklHX0ZPUkNFREVUSD1tCitDT05GSUdfRk9SQ0VERVRIX05BUEk9eQorIyBDT05GSUdfQ1M4OXgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPW0KK0NPTkZJR19GRUFMTlg9bQorQ09ORklHX05BVFNFTUk9bQorQ09ORklHX05FMktfUENJPW0KK0NPTkZJR184MTM5Q1A9bQorQ09ORklHXzgxMzlUT089bQorIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAorQ09ORklHXzgxMzlUT09fODEyOT15CisjIENPTkZJR184MTM5X09MRF9SWF9SRVNFVCBpcyBub3Qgc2V0CitDT05GSUdfUjYwNDA9bQorQ09ORklHX1NJUzkwMD1tCitDT05GSUdfRVBJQzEwMD1tCitDT05GSUdfU1VOREFOQ0U9bQorIyBDT05GSUdfU1VOREFOQ0VfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVExBTj1tCitDT05GSUdfVklBX1JISU5FPW0KK0NPTkZJR19WSUFfUkhJTkVfTU1JTz15CitDT05GSUdfVklBX1JISU5FX05BUEk9eQorQ09ORklHX1NDOTIwMzE9bQorQ09ORklHX05FVF9QT0NLRVQ9eQorQ09ORklHX0RFNjAwPW0KK0NPTkZJR19ERTYyMD1tCitDT05GSUdfRkVDX01QQzUyeHg9bQorQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQorIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorQ09ORklHX0FDRU5JQz1tCisjIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JIGlzIG5vdCBzZXQKK0NPTkZJR19ETDJLPW0KK0NPTkZJR19FMTAwMD1tCitDT05GSUdfRTEwMDBfTkFQST15CisjIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDBFPW0KK0NPTkZJR19FMTAwMEVfRU5BQkxFRD15CitDT05GSUdfSVAxMDAwPW0KK0NPTkZJR19JR0I9bQorQ09ORklHX05TODM4MjA9bQorQ09ORklHX0hBTUFDSEk9bQorQ09ORklHX1lFTExPV0ZJTj1tCitDT05GSUdfUjgxNjk9bQorQ09ORklHX1I4MTY5X05BUEk9eQorQ09ORklHX1I4MTY5X1ZMQU49eQorQ09ORklHX1NJUzE5MD1tCitDT05GSUdfU0tHRT1tCisjIENPTkZJR19TS0dFX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TS1kyPW0KKyMgQ09ORklHX1NLWTJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1ZJQV9WRUxPQ0lUWT1tCitDT05GSUdfVElHT04zPW0KK0NPTkZJR19CTlgyPW0KK0NPTkZJR19HSUFORkFSPW0KK0NPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfVUNDX0dFVEggaXMgbm90IHNldAorQ09ORklHX01WNjQzWFhfRVRIPW0KK0NPTkZJR19RTEEzWFhYPW0KK0NPTkZJR19BVEwxPW0KK0NPTkZJR19ORVRERVZfMTAwMDA9eQorQ09ORklHX0NIRUxTSU9fVDE9bQorQ09ORklHX0NIRUxTSU9fVDFfMUc9eQorQ09ORklHX0NIRUxTSU9fVDFfTkFQST15CitDT05GSUdfQ0hFTFNJT19UMz1tCitDT05GSUdfSVhHQkU9bQorQ09ORklHX0lYR0I9bQorQ09ORklHX0lYR0JfTkFQST15CitDT05GSUdfUzJJTz1tCitDT05GSUdfUzJJT19OQVBJPXkKK0NPTkZJR19NWVJJMTBHRT1tCitDT05GSUdfTkVUWEVOX05JQz1tCitDT05GSUdfTklVPW0KKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfVEVIVVRJPW0KK0NPTkZJR19CTlgyWD1tCitDT05GSUdfU0ZDPW0KKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCitDT05GSUdfVVNCX0NBVEM9bQorQ09ORklHX1VTQl9LQVdFVEg9bQorQ09ORklHX1VTQl9QRUdBU1VTPW0KK0NPTkZJR19VU0JfUlRMODE1MD1tCitDT05GSUdfVVNCX1VTQk5FVD1tCitDT05GSUdfVVNCX05FVF9BWDg4MTdYPW0KK0NPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPW0KK0NPTkZJR19VU0JfTkVUX0RNOTYwMT1tCitDT05GSUdfVVNCX05FVF9HTDYyMEE9bQorQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCitDT05GSUdfVVNCX05FVF9QTFVTQj1tCitDT05GSUdfVVNCX05FVF9NQ1M3ODMwPW0KK0NPTkZJR19VU0JfTkVUX1JORElTX0hPU1Q9bQorQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVD1tCitDT05GSUdfVVNCX0FMSV9NNTYzMj15CitDT05GSUdfVVNCX0FOMjcyMD15CitDT05GSUdfVVNCX0JFTEtJTj15CitDT05GSUdfVVNCX0FSTUxJTlVYPXkKK0NPTkZJR19VU0JfRVBTT04yODg4PXkKK0NPTkZJR19VU0JfS0MyMTkwPXkKK0NPTkZJR19VU0JfTkVUX1pBVVJVUz1tCitDT05GSUdfTkVUX1BDTUNJQT15CitDT05GSUdfUENNQ0lBXzNDNTg5PW0KK0NPTkZJR19QQ01DSUFfM0M1NzQ9bQorQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KK0NPTkZJR19QQ01DSUFfUENORVQ9bQorQ09ORklHX1BDTUNJQV9OTUNMQU49bQorQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCitDT05GSUdfUENNQ0lBX1hJUkMyUFM9bQorQ09ORklHX1BDTUNJQV9BWE5FVD1tCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX0FUTV9EUklWRVJTPXkKKyMgQ09ORklHX0FUTV9EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfQVRNX1RDUD1tCitDT05GSUdfQVRNX0xBTkFJPW0KK0NPTkZJR19BVE1fRU5JPW0KKyMgQ09ORklHX0FUTV9FTklfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0VOSV9UVU5FX0JVUlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fTklDU1RBUj1tCisjIENPTkZJR19BVE1fTklDU1RBUl9VU0VfU1VOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTklDU1RBUl9VU0VfSURUNzcxMDUgaXMgbm90IHNldAorQ09ORklHX0FUTV9JRFQ3NzI1Mj1tCisjIENPTkZJR19BVE1fSURUNzcyNTJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lEVDc3MjUyX1JDVl9BTEwgaXMgbm90IHNldAorQ09ORklHX0FUTV9JRFQ3NzI1Ml9VU0VfU1VOST15CisjIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAorQ09ORklHX0FUTV9GT1JFMjAwRV9NQVlCRT1tCisjIENPTkZJR19BVE1fRk9SRTIwMEVfUENBIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fSEU9bQorIyBDT05GSUdfQVRNX0hFX1VTRV9TVU5JIGlzIG5vdCBzZXQKK0NPTkZJR19GRERJPXkKKyMgQ09ORklHX0RFRlhYIGlzIG5vdCBzZXQKK0NPTkZJR19TS0ZQPW0KKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QTElQPW0KK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCisjIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPQVRNPW0KK0NPTkZJR19QUFBPTDJUUD1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KK0NPTkZJR19TTElQX1NNQVJUPXkKKyMgQ09ORklHX1NMSVBfTU9ERV9TTElQNiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0ZDPXkKK0NPTkZJR19ORVRDT05TT0xFPW0KK0NPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CitDT05GSUdfVklSVElPX05FVD1tCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPXkKK0NPTkZJR19JTlBVVF9QT0xMREVWPW0KKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKK0NPTkZJR19JTlBVVF9KT1lERVY9bQorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfU0VSSUFMPW0KK0NPTkZJR19NT1VTRV9BUFBMRVRPVUNIPW0KKyMgQ09ORklHX01PVVNFX0lOUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9MT0dJQk0gaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUEMxMTBQQUQgaXMgbm90IHNldAorQ09ORklHX01PVVNFX1ZTWFhYQUE9bQorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQorQ09ORklHX0pPWVNUSUNLX0FOQUxPRz1tCitDT05GSUdfSk9ZU1RJQ0tfQTNEPW0KK0NPTkZJR19KT1lTVElDS19BREk9bQorQ09ORklHX0pPWVNUSUNLX0NPQlJBPW0KK0NPTkZJR19KT1lTVElDS19HRjJLPW0KK0NPTkZJR19KT1lTVElDS19HUklQPW0KK0NPTkZJR19KT1lTVElDS19HUklQX01QPW0KK0NPTkZJR19KT1lTVElDS19HVUlMTEVNT1Q9bQorQ09ORklHX0pPWVNUSUNLX0lOVEVSQUNUPW0KK0NPTkZJR19KT1lTVElDS19TSURFV0lOREVSPW0KK0NPTkZJR19KT1lTVElDS19UTURDPW0KK0NPTkZJR19KT1lTVElDS19JRk9SQ0U9bQorQ09ORklHX0pPWVNUSUNLX0lGT1JDRV9VU0I9eQorQ09ORklHX0pPWVNUSUNLX0lGT1JDRV8yMzI9eQorQ09ORklHX0pPWVNUSUNLX1dBUlJJT1I9bQorQ09ORklHX0pPWVNUSUNLX01BR0VMTEFOPW0KK0NPTkZJR19KT1lTVElDS19TUEFDRU9SQj1tCitDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMPW0KK0NPTkZJR19KT1lTVElDS19TVElOR0VSPW0KK0NPTkZJR19KT1lTVElDS19UV0lESk9ZPW0KK0NPTkZJR19KT1lTVElDS19aSEVOSFVBPW0KK0NPTkZJR19KT1lTVElDS19EQjk9bQorQ09ORklHX0pPWVNUSUNLX0dBTUVDT049bQorQ09ORklHX0pPWVNUSUNLX1RVUkJPR1JBRlg9bQorQ09ORklHX0pPWVNUSUNLX0pPWURVTVA9bQorQ09ORklHX0pPWVNUSUNLX1hQQUQ9bQorQ09ORklHX0pPWVNUSUNLX1hQQURfRkY9eQorQ09ORklHX0pPWVNUSUNLX1hQQURfTEVEUz15CitDT05GSUdfSU5QVVRfVEFCTEVUPXkKK0NPTkZJR19UQUJMRVRfVVNCX0FDRUNBRD1tCitDT05GSUdfVEFCTEVUX1VTQl9BSVBURUs9bQorQ09ORklHX1RBQkxFVF9VU0JfR1RDTz1tCitDT05GSUdfVEFCTEVUX1VTQl9LQlRBQj1tCitDT05GSUdfVEFCTEVUX1VTQl9XQUNPTT1tCisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfUENTUEtSPW0KK0NPTkZJR19JTlBVVF9BVElfUkVNT1RFPW0KK0NPTkZJR19JTlBVVF9BVElfUkVNT1RFMj1tCitDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEU9bQorQ09ORklHX0lOUFVUX1BPV0VSTUFURT1tCitDT05GSUdfSU5QVVRfWUVBTElOSz1tCitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKK0NPTkZJR19TRVJJT19SQVc9bQorQ09ORklHX0dBTUVQT1JUPW0KK0NPTkZJR19HQU1FUE9SVF9OUzU1OD1tCitDT05GSUdfR0FNRVBPUlRfTDQ9bQorQ09ORklHX0dBTUVQT1JUX0VNVTEwSzE9bQorQ09ORklHX0dBTUVQT1JUX0ZNODAxPW0KK0NPTkZJR19JTlBVVF9MSVJDPXkKK0NPTkZJR19MSVJDX0RFVj1tCitDT05GSUdfTElSQ19BVElVU0I9bQorQ09ORklHX0xJUkNfQlQ4Mjk9bQorQ09ORklHX0xJUkNfQ01ESVI9bQorQ09ORklHX0xJUkNfSTJDPW0KK0NPTkZJR19MSVJDX0lHT1JQTFVHVVNCPW0KK0NPTkZJR19MSVJDX0lNT049bQorQ09ORklHX0xJUkNfSVQ4Nz1tCitDT05GSUdfTElSQ19NQ0VVU0I9bQorQ09ORklHX0xJUkNfTUNFVVNCMj1tCitDT05GSUdfTElSQ19QVlIxNTA9bQorQ09ORklHX0xJUkNfUEFSQUxMRUw9bQorQ09ORklHX0xJUkNfU0VSSUFMPW0KK0NPTkZJR19MSVJDX1NJUj1tCitDT05GSUdfTElSQ19TVFJFQU1aQVA9bQorQ09ORklHX0xJUkNfVFRVU0JJUj1tCisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CisjIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAorQ09ORklHX1JPQ0tFVFBPUlQ9bQorQ09ORklHX0NZQ0xBREVTPW0KKyMgQ09ORklHX0NZWl9JTlRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VTUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0kgaXMgbm90IHNldAorQ09ORklHX1NZTkNMSU5LPW0KK0NPTkZJR19TWU5DTElOS01QPW0KK0NPTkZJR19TWU5DTElOS19HVD1tCitDT05GSUdfTl9IRExDPW0KKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKK0NPTkZJR19OT1pPTUk9bQorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfUE5QPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DUz1tCitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CisjIENPTkZJR19TRVJJQUxfODI1MF9GT1VSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9BQ0NFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfQk9DQSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9FWEFSX1NUMTZDNTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0hVQjYgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1VBUlRMSVRFPW0KK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPRz1tCisjIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX1RUWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX01QQzUyeHg9eQorQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEVfQkFVRD0xMTUyMDAKK0NPTkZJR19TRVJJQUxfSlNNPW0KK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorIyBDT05GSUdfU0VSSUFMX1FFIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSCBpcyBub3Qgc2V0CitDT05GSUdfQlJJUV9QQU5FTD1tCitDT05GSUdfUFJJTlRFUj1tCitDT05GSUdfTFBfQ09OU09MRT15CitDT05GSUdfUFBERVY9bQorIyBDT05GSUdfSFZDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorQ09ORklHX0hXX1JBTkRPTV9WSVJUSU89bQorQ09ORklHX05WUkFNPXkKK0NPTkZJR19EVExLPW0KK0NPTkZJR19SMzk2ND1tCisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CitDT05GSUdfQ0FSRE1BTl80MDAwPW0KK0NPTkZJR19DQVJETUFOXzQwNDA9bQorQ09ORklHX0lQV0lSRUxFU1M9bQorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfQUxHT0JJVD15CitDT05GSUdfSTJDX0FMR09QQ0E9bQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKK0NPTkZJR19JMkNfSFlEUkE9bQorQ09ORklHX0kyQ19QT1dFUk1BQz15CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfQ1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPW0KKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19TSU1URUM9bQorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKK0NPTkZJR19JMkNfUEFSUE9SVD1tCitDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQ9bQorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfVElOWV9VU0I9bQorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKK0NPTkZJR19JMkNfVk9PRE9PMz1tCisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfRUxFS1RPUiBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BDQV9JU0E9bQorQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09bQorQ09ORklHX0kyQ19TVFVCPW0KKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CitDT05GSUdfQVQyND1tCitDT05GSUdfU0VOU09SU19FRVBST009bQorQ09ORklHX1NFTlNPUlNfUENGODU3ND1tCitDT05GSUdfUENGODU3NT1tCitDT05GSUdfU0VOU09SU19QQ0E5NTM5PW0KK0NPTkZJR19TRU5TT1JTX1BDRjg1OTE9bQorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTUFYNjg3NT1tCitDT05GSUdfU0VOU09SU19UU0wyNTUwPW0KKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dQSU9fTElCPXkKKworIworIyBHUElPIFN1cHBvcnQKKyMKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKK0NPTkZJR19XMT1tCitDT05GSUdfVzFfQ09OPXkKKworIworIyAxLXdpcmUgQnVzIE1hc3RlcnMKKyMKKyMgQ09ORklHX1cxX01BU1RFUl9NQVRST1ggaXMgbm90IHNldAorQ09ORklHX1cxX01BU1RFUl9EUzI0OTA9bQorQ09ORklHX1cxX01BU1RFUl9EUzI0ODI9bQorIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAorCisjCisjIDEtd2lyZSBTbGF2ZXMKKyMKK0NPTkZJR19XMV9TTEFWRV9USEVSTT1tCitDT05GSUdfVzFfU0xBVkVfU01FTT1tCitDT05GSUdfVzFfU0xBVkVfRFMyNDMzPW0KK0NPTkZJR19XMV9TTEFWRV9EUzI0MzNfQ1JDPXkKK0NPTkZJR19XMV9TTEFWRV9EUzI3NjA9bQorQ09ORklHX1BPV0VSX1NVUFBMWT1tCisjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKK0NPTkZJR19BUE1fUE9XRVI9bQorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorQ09ORklHX0JBVFRFUllfUE1VPW0KK0NPTkZJR19IV01PTj1tCitDT05GSUdfSFdNT05fVklEPW0KK0NPTkZJR19TRU5TT1JTX0FENzQxOD1tCitDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KK0NPTkZJR19TRU5TT1JTX0FETTEwMjU9bQorQ09ORklHX1NFTlNPUlNfQURNMTAyNj1tCitDT05GSUdfU0VOU09SU19BRE0xMDI5PW0KK0NPTkZJR19TRU5TT1JTX0FETTEwMzE9bQorQ09ORklHX1NFTlNPUlNfQURNOTI0MD1tCitDT05GSUdfU0VOU09SU19BRFQ3NDcwPW0KK0NPTkZJR19TRU5TT1JTX0FEVDc0NzM9bQorQ09ORklHX1NFTlNPUlNfQU1TPW0KK0NPTkZJR19TRU5TT1JTX0FNU19QTVU9eQorQ09ORklHX1NFTlNPUlNfQU1TX0kyQz15CitDT05GSUdfU0VOU09SU19BVFhQMT1tCitDT05GSUdfU0VOU09SU19EUzE2MjE9bQorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0Y3MTgwNUY9bQorQ09ORklHX1NFTlNPUlNfRjcxODgyRkc9bQorQ09ORklHX1NFTlNPUlNfRjc1Mzc1Uz1tCitDT05GSUdfU0VOU09SU19HTDUxOFNNPW0KK0NPTkZJR19TRU5TT1JTX0dMNTIwU009bQorQ09ORklHX1NFTlNPUlNfSVQ4Nz1tCitDT05GSUdfU0VOU09SU19MTTYzPW0KK0NPTkZJR19TRU5TT1JTX0xNNzU9bQorQ09ORklHX1NFTlNPUlNfTE03Nz1tCitDT05GSUdfU0VOU09SU19MTTc4PW0KK0NPTkZJR19TRU5TT1JTX0xNODA9bQorQ09ORklHX1NFTlNPUlNfTE04Mz1tCitDT05GSUdfU0VOU09SU19MTTg1PW0KK0NPTkZJR19TRU5TT1JTX0xNODc9bQorQ09ORklHX1NFTlNPUlNfTE05MD1tCitDT05GSUdfU0VOU09SU19MTTkyPW0KK0NPTkZJR19TRU5TT1JTX0xNOTM9bQorQ09ORklHX1NFTlNPUlNfTUFYMTYxOT1tCitDT05GSUdfU0VOU09SU19NQVg2NjUwPW0KK0NPTkZJR19TRU5TT1JTX1BDODczNjA9bQorQ09ORklHX1NFTlNPUlNfUEM4NzQyNz1tCitDT05GSUdfU0VOU09SU19TSVM1NTk1PW0KK0NPTkZJR19TRU5TT1JTX0RNRTE3Mzc9bQorQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE9bQorQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5Mj1tCitDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3PW0KK0NPTkZJR19TRU5TT1JTX0FEUzc4Mjg9bQorQ09ORklHX1NFTlNPUlNfVEhNQzUwPW0KK0NPTkZJR19TRU5TT1JTX1ZJQTY4NkE9bQorQ09ORklHX1NFTlNPUlNfVlQxMjExPW0KK0NPTkZJR19TRU5TT1JTX1ZUODIzMT1tCitDT05GSUdfU0VOU09SU19XODM3ODFEPW0KK0NPTkZJR19TRU5TT1JTX1c4Mzc5MUQ9bQorQ09ORklHX1NFTlNPUlNfVzgzNzkyRD1tCitDT05GSUdfU0VOU09SU19XODM3OTM9bQorQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTPW0KK0NPTkZJR19TRU5TT1JTX1c4M0w3ODZORz1tCitDT05GSUdfU0VOU09SU19XODM2MjdIRj1tCitDT05GSUdfU0VOU09SU19XODM2MjdFSEY9bQorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD15CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfU09GVF9XQVRDSERPRz1tCisjIENPTkZJR19NUEM1MjAwX1dEVCBpcyBub3Qgc2V0CitDT05GSUdfODN4eF9XRFQ9bQorQ09ORklHX1dBVENIRE9HX1JUQVM9bQorCisjCisjIElTQS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVhDT01XRCBpcyBub3Qgc2V0CisjIENPTkZJR19XRFQgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworQ09ORklHX1VTQlBDV0FUQ0hET0c9bQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CitDT05GSUdfU1NCPW0KK0NPTkZJR19TU0JfU1BST009eQorQ09ORklHX1NTQl9QQ0lIT1NUX1BPU1NJQkxFPXkKK0NPTkZJR19TU0JfUENJSE9TVD15CisjIENPTkZJR19TU0JfQjQzX1BDSV9CUklER0UgaXMgbm90IHNldAorQ09ORklHX1NTQl9QQ01DSUFIT1NUX1BPU1NJQkxFPXkKK0NPTkZJR19TU0JfUENNQ0lBSE9TVD15CisjIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRV9QT1NTSUJMRT15CitDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFPXkKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUZEX1NNNTAxPW0KKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCitDT05GSUdfVklERU9fREVWPW0KK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCitDT05GSUdfVklERU9fQUxMT1dfVjRMMT15CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQorQ09ORklHX0RWQl9DT1JFPW0KK0NPTkZJR19WSURFT19NRURJQT1tCisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfVklERU9fU0FBNzE0Nj1tCitDT05GSUdfVklERU9fU0FBNzE0Nl9WVj1tCitDT05GSUdfTUVESUFfQVRUQUNIPXkKK0NPTkZJR19NRURJQV9UVU5FUj1tCisjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkUgaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI3WD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzE9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMDYwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIyNjY9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjEzMT1tCitDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCitDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVM9bQorQ09ORklHX1ZJREVPX1Y0TDI9bQorQ09ORklHX1ZJREVPX1Y0TDE9bQorQ09ORklHX1ZJREVPQlVGX0dFTj1tCitDT05GSUdfVklERU9CVUZfRE1BX1NHPW0KK0NPTkZJR19WSURFT0JVRl9WTUFMTE9DPW0KK0NPTkZJR19WSURFT0JVRl9EVkI9bQorQ09ORklHX1ZJREVPX0JUQ1g9bQorQ09ORklHX1ZJREVPX0lSX0kyQz1tCitDT05GSUdfVklERU9fSVI9bQorQ09ORklHX1ZJREVPX1RWRUVQUk9NPW0KK0NPTkZJR19WSURFT19UVU5FUj1tCitDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgRW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBlciBjaGlwcworIworCisjCisjIEF1ZGlvIGRlY29kZXJzCisjCitDT05GSUdfVklERU9fVFZBVURJTz1tCitDT05GSUdfVklERU9fVERBNzQzMj1tCitDT05GSUdfVklERU9fVERBOTg0MD1tCitDT05GSUdfVklERU9fVERBOTg3NT1tCitDT05GSUdfVklERU9fVEVBNjQxNUM9bQorQ09ORklHX1ZJREVPX1RFQTY0MjA9bQorQ09ORklHX1ZJREVPX01TUDM0MDA9bQorQ09ORklHX1ZJREVPX0NTNTM0NT1tCitDT05GSUdfVklERU9fQ1M1M0wzMkE9bQorQ09ORklHX1ZJREVPX001Mjc5MD1tCitDT05GSUdfVklERU9fVExWMzIwQUlDMjNCPW0KK0NPTkZJR19WSURFT19XTTg3NzU9bQorQ09ORklHX1ZJREVPX1dNODczOT1tCitDT05GSUdfVklERU9fVlAyN1NNUFg9bQorCisjCisjIFZpZGVvIGRlY29kZXJzCisjCitDT05GSUdfVklERU9fQlQ4MTk9bQorQ09ORklHX1ZJREVPX0JUODU2PW0KK0NPTkZJR19WSURFT19CVDg2Nj1tCitDT05GSUdfVklERU9fS1MwMTI3PW0KK0NPTkZJR19WSURFT19PVjc2NzA9bQorQ09ORklHX1ZJREVPX1RDTTgyNVg9bQorQ09ORklHX1ZJREVPX1NBQTcxMTA9bQorQ09ORklHX1ZJREVPX1NBQTcxMTE9bQorQ09ORklHX1ZJREVPX1NBQTcxMTQ9bQorQ09ORklHX1ZJREVPX1NBQTcxMVg9bQorQ09ORklHX1ZJREVPX1NBQTcxN1g9bQorQ09ORklHX1ZJREVPX1NBQTcxOTE9bQorQ09ORklHX1ZJREVPX1RWUDUxNTA9bQorQ09ORklHX1ZJREVPX1ZQWDMyMjA9bQorCisjCisjIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycworIworQ09ORklHX1ZJREVPX0NYMjU4NDA9bQorCisjCisjIE1QRUcgdmlkZW8gZW5jb2RlcnMKKyMKK0NPTkZJR19WSURFT19DWDIzNDFYPW0KKworIworIyBWaWRlbyBlbmNvZGVycworIworQ09ORklHX1ZJREVPX1NBQTcxMjc9bQorQ09ORklHX1ZJREVPX1NBQTcxODU9bQorQ09ORklHX1ZJREVPX0FEVjcxNzA9bQorQ09ORklHX1ZJREVPX0FEVjcxNzU9bQorCisjCisjIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCisjCitDT05GSUdfVklERU9fVVBENjQwMzFBPW0KK0NPTkZJR19WSURFT19VUEQ2NDA4Mz1tCisjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19CVDg0OD1tCitDT05GSUdfVklERU9fQlQ4NDhfRFZCPXkKK0NPTkZJR19WSURFT19TQUE2NTg4PW0KKyMgQ09ORklHX1ZJREVPX1BNUyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fQldRQ0FNPW0KK0NPTkZJR19WSURFT19DUUNBTT1tCitDT05GSUdfVklERU9fVzk5NjY9bQorQ09ORklHX1ZJREVPX0NQSUE9bQorQ09ORklHX1ZJREVPX0NQSUFfUFA9bQorQ09ORklHX1ZJREVPX0NQSUFfVVNCPW0KK0NPTkZJR19WSURFT19DUElBMj1tCitDT05GSUdfVklERU9fU0FBNTI0NkE9bQorQ09ORklHX1ZJREVPX1NBQTUyNDk9bQorQ09ORklHX1RVTkVSXzMwMzY9bQorIyBDT05GSUdfVklERU9fU1RSQURJUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19aT1JBTiBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fU0FBNzEzND1tCitDT05GSUdfVklERU9fU0FBNzEzNF9BTFNBPW0KK0NPTkZJR19WSURFT19TQUE3MTM0X0RWQj1tCitDT05GSUdfVklERU9fTVhCPW0KK0NPTkZJR19WSURFT19EUEM9bQorQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTj1tCitDT05GSUdfVklERU9fSEVYSVVNX0dFTUlOST1tCitDT05GSUdfVklERU9fQ1g4OD1tCitDT05GSUdfVklERU9fQ1g4OF9BTFNBPW0KK0NPTkZJR19WSURFT19DWDg4X0JMQUNLQklSRD1tCitDT05GSUdfVklERU9fQ1g4OF9EVkI9bQorQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0PW0KK0NPTkZJR19WSURFT19DWDIzODg1PW0KK0NPTkZJR19WSURFT19BVTA4Mjg9bQorQ09ORklHX1ZJREVPX0lWVFY9bQorQ09ORklHX1ZJREVPX0ZCX0lWVFY9bQorQ09ORklHX1ZJREVPX0NYMTg9bQorIyBDT05GSUdfVklERU9fQ0FGRV9DQ0lDIGlzIG5vdCBzZXQKK0NPTkZJR19WNExfVVNCX0RSSVZFUlM9eQorQ09ORklHX1VTQl9WSURFT19DTEFTUz1tCitDT05GSUdfVklERU9fUFZSVVNCMj1tCitDT05GSUdfVklERU9fUFZSVVNCMl9TWVNGUz15CitDT05GSUdfVklERU9fUFZSVVNCMl9EVkI9eQorIyBDT05GSUdfVklERU9fUFZSVVNCMl9ERUJVR0lGQyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fRU0yOFhYPW0KK0NPTkZJR19WSURFT19FTTI4WFhfQUxTQT1tCitDT05GSUdfVklERU9fRU0yOFhYX0RWQj1tCitDT05GSUdfVklERU9fVVNCVklTSU9OPW0KK0NPTkZJR19WSURFT19VU0JWSURFTz1tCitDT05GSUdfVVNCX1ZJQ0FNPW0KK0NPTkZJR19VU0JfSUJNQ0FNPW0KK0NPTkZJR19VU0JfS09OSUNBV0M9bQorQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVI9bQorQ09ORklHX1VTQl9FVDYxWDI1MT1tCitDT05GSUdfVklERU9fT1ZDQU1DSElQPW0KK0NPTkZJR19VU0JfVzk5NjhDRj1tCitDT05GSUdfVVNCX09WNTExPW0KK0NPTkZJR19VU0JfU0U0MDE9bQorQ09ORklHX1VTQl9TTjlDMTAyPW0KK0NPTkZJR19VU0JfU1RWNjgwPW0KK0NPTkZJR19VU0JfWkMwMzAxPW0KK0NPTkZJR19VU0JfUFdDPW0KKyMgQ09ORklHX1VTQl9QV0NfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9aUjM2NFhYPW0KK0NPTkZJR19VU0JfU1RLV0VCQ0FNPW0KK0NPTkZJR19TT0NfQ0FNRVJBPW0KK0NPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDE9bQorIyBDT05GSUdfTVQ5TTAwMV9QQ0E5NTM2X1NXSVRDSCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyPW0KKyMgQ09ORklHX01UOVYwMjJfUENBOTUzNl9TV0lUQ0ggaXMgbm90IHNldAorQ09ORklHX1JBRElPX0FEQVBURVJTPXkKKyMgQ09ORklHX1JBRElPX0NBREVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1JUUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19SVFJBQ0syIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX0FaVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19HRU1URUsgaXMgbm90IHNldAorQ09ORklHX1JBRElPX0dFTVRFS19QQ0k9bQorQ09ORklHX1JBRElPX01BWElSQURJTz1tCitDT05GSUdfUkFESU9fTUFFU1RSTz1tCisjIENPTkZJR19SQURJT19TRjE2Rk1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1NGMTZGTVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1RFUlJBVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1RSVVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1RZUEhPT04gaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fWk9MVFJJWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RTQlI9bQorQ09ORklHX1VTQl9TSTQ3MFg9bQorQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQorCisjCisjIFN1cHBvcnRlZCBTQUE3MTQ2IGJhc2VkIFBDSSBBZGFwdGVycworIworQ09ORklHX1RUUENJX0VFUFJPTT1tCitDT05GSUdfRFZCX0FWNzExMD1tCitDT05GSUdfRFZCX0FWNzExMF9PU0Q9eQorQ09ORklHX0RWQl9CVURHRVRfQ09SRT1tCitDT05GSUdfRFZCX0JVREdFVD1tCitDT05GSUdfRFZCX0JVREdFVF9DST1tCitDT05GSUdfRFZCX0JVREdFVF9BVj1tCitDT05GSUdfRFZCX0JVREdFVF9QQVRDSD1tCisKKyMKKyMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIworQ09ORklHX0RWQl9VU0I9bQorIyBDT05GSUdfRFZCX1VTQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1VTQl9BODAwPW0KK0NPTkZJR19EVkJfVVNCX0RJQlVTQl9NQj1tCisjIENPTkZJR19EVkJfVVNCX0RJQlVTQl9NQl9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0RWQl9VU0JfRElCVVNCX01DPW0KK0NPTkZJR19EVkJfVVNCX0RJQjA3MDA9bQorQ09ORklHX0RWQl9VU0JfVU1UXzAxMD1tCitDT05GSUdfRFZCX1VTQl9DWFVTQj1tCitDT05GSUdfRFZCX1VTQl9NOTIwWD1tCitDT05GSUdfRFZCX1VTQl9HTDg2MT1tCitDT05GSUdfRFZCX1VTQl9BVTY2MTA9bQorQ09ORklHX0RWQl9VU0JfRElHSVRWPW0KK0NPTkZJR19EVkJfVVNCX1ZQNzA0NT1tCitDT05GSUdfRFZCX1VTQl9WUDcwMlg9bQorQ09ORklHX0RWQl9VU0JfR1A4UFNLPW0KK0NPTkZJR19EVkJfVVNCX05PVkFfVF9VU0IyPW0KK0NPTkZJR19EVkJfVVNCX1RUVVNCMj1tCitDT05GSUdfRFZCX1VTQl9EVFQyMDBVPW0KK0NPTkZJR19EVkJfVVNCX09QRVJBMT1tCitDT05GSUdfRFZCX1VTQl9BRjkwMDU9bQorQ09ORklHX0RWQl9VU0JfQUY5MDA1X1JFTU9URT1tCitDT05GSUdfRFZCX1RUVVNCX0JVREdFVD1tCitDT05GSUdfRFZCX1RUVVNCX0RFQz1tCitDT05GSUdfRFZCX0NJTkVSR1lUMj1tCitDT05GSUdfRFZCX0NJTkVSR1lUMl9UVU5JTkc9eQorQ09ORklHX0RWQl9DSU5FUkdZVDJfU1RSRUFNX1VSQl9DT1VOVD0zMgorQ09ORklHX0RWQl9DSU5FUkdZVDJfU1RSRUFNX0JVRl9TSVpFPTUxMgorQ09ORklHX0RWQl9DSU5FUkdZVDJfUVVFUllfSU5URVJWQUw9MjUwCitDT05GSUdfRFZCX0NJTkVSR1lUMl9FTkFCTEVfUkNfSU5QVVRfREVWSUNFPXkKK0NPTkZJR19EVkJfQ0lORVJHWVQyX1JDX1FVRVJZX0lOVEVSVkFMPTEwMAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCitDT05GSUdfRFZCX0IyQzJfRkxFWENPUD1tCitDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9QQ0k9bQorQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfVVNCPW0KKyMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfREVCVUcgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBCVDg3OCBBZGFwdGVycworIworQ09ORklHX0RWQl9CVDhYWD1tCisKKyMKKyMgU3VwcG9ydGVkIFBsdXRvMiBBZGFwdGVycworIworQ09ORklHX0RWQl9QTFVUTzI9bQorCisjCisjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCisjCisKKyMKKyMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAorCisjCisjIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9DWDI0MTEwPW0KK0NPTkZJR19EVkJfQ1gyNDEyMz1tCitDT05GSUdfRFZCX01UMzEyPW0KK0NPTkZJR19EVkJfUzVIMTQyMD1tCitDT05GSUdfRFZCX1NUVjAyOTk9bQorQ09ORklHX0RWQl9UREE4MDgzPW0KK0NPTkZJR19EVkJfVERBMTAwODY9bQorQ09ORklHX0RWQl9WRVMxWDkzPW0KK0NPTkZJR19EVkJfVFVORVJfSVREMTAwMD1tCitDT05GSUdfRFZCX1REQTgyNlg9bQorQ09ORklHX0RWQl9UVUE2MTAwPW0KKworIworIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9TUDg4NzA9bQorQ09ORklHX0RWQl9TUDg4N1g9bQorQ09ORklHX0RWQl9DWDIyNzAwPW0KK0NPTkZJR19EVkJfQ1gyMjcwMj1tCitDT05GSUdfRFZCX0w2NDc4MT1tCitDT05GSUdfRFZCX1REQTEwMDRYPW0KK0NPTkZJR19EVkJfTlhUNjAwMD1tCitDT05GSUdfRFZCX01UMzUyPW0KK0NPTkZJR19EVkJfWkwxMDM1Mz1tCitDT05GSUdfRFZCX0RJQjMwMDBNQj1tCitDT05GSUdfRFZCX0RJQjMwMDBNQz1tCitDT05GSUdfRFZCX0RJQjcwMDBNPW0KK0NPTkZJR19EVkJfRElCNzAwMFA9bQorQ09ORklHX0RWQl9UREExMDA0OD1tCisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfVkVTMTgyMD1tCitDT05GSUdfRFZCX1REQTEwMDIxPW0KK0NPTkZJR19EVkJfVERBMTAwMjM9bQorQ09ORklHX0RWQl9TVFYwMjk3PW0KKworIworIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfTlhUMjAwWD1tCitDT05GSUdfRFZCX09SNTEyMTE9bQorQ09ORklHX0RWQl9PUjUxMTMyPW0KK0NPTkZJR19EVkJfQkNNMzUxMD1tCitDT05GSUdfRFZCX0xHRFQzMzBYPW0KK0NPTkZJR19EVkJfUzVIMTQwOT1tCitDT05GSUdfRFZCX0FVODUyMj1tCitDT05GSUdfRFZCX1M1SDE0MTE9bQorCisjCisjIERpZ2l0YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCisjCitDT05GSUdfRFZCX1BMTD1tCitDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzA9bQorCisjCisjIFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCisjCitDT05GSUdfRFZCX0xOQlAyMT1tCitDT05GSUdfRFZCX0lTTDY0MDU9bQorQ09ORklHX0RWQl9JU0w2NDIxPW0KK0NPTkZJR19EQUI9eQorQ09ORklHX1VTQl9EQUJVU0I9bQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19BR1A9eQorQ09ORklHX0FHUF9VTklOT1JUSD15CitDT05GSUdfRFJNPW0KK0NPTkZJR19EUk1fVERGWD1tCitDT05GSUdfRFJNX1IxMjg9bQorQ09ORklHX0RSTV9SQURFT049bQorQ09ORklHX0RSTV9NR0E9bQorQ09ORklHX0RSTV9TSVM9bQorQ09ORklHX0RSTV9WSUE9bQorQ09ORklHX0RSTV9TQVZBR0U9bQorQ09ORklHX1ZHQVNUQVRFPXkKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CitDT05GSUdfRkJfRERDPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfU1ZHQUxJQj1tCitDT05GSUdfRkJfTUFDTU9ERVM9eQorQ09ORklHX0ZCX0JBQ0tMSUdIVD15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKK0NPTkZJR19GQl9USUxFQkxJVFRJTkc9eQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCitDT05GSUdfRkJfQ0lSUlVTPW0KKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorQ09ORklHX0ZCX09GPXkKKyMgQ09ORklHX0ZCX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCX1BMQVRJTlVNPXkKK0NPTkZJR19GQl9WQUxLWVJJRT15CitDT05GSUdfRkJfQ1Q2NTU1MD15CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfTlZJRElBPXkKK0NPTkZJR19GQl9OVklESUFfSTJDPXkKKyMgQ09ORklHX0ZCX05WSURJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRkJfTlZJRElBX0JBQ0tMSUdIVD15CitDT05GSUdfRkJfUklWQT1tCisjIENPTkZJR19GQl9SSVZBX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9SSVZBX0JBQ0tMSUdIVD15CitDT05GSUdfRkJfTUFUUk9YPXkKK0NPTkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKK0NPTkZJR19GQl9NQVRST1hfTVlTVElRVUU9eQorQ09ORklHX0ZCX01BVFJPWF9HPXkKK0NPTkZJR19GQl9NQVRST1hfSTJDPW0KK0NPTkZJR19GQl9NQVRST1hfTUFWRU49bQorQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQ9eQorQ09ORklHX0ZCX1JBREVPTj15CitDT05GSUdfRkJfUkFERU9OX0kyQz15CitDT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15CisjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZCX0FUWTEyOD15CitDT05GSUdfRkJfQVRZMTI4X0JBQ0tMSUdIVD15CitDT05GSUdfRkJfQVRZPXkKK0NPTkZJR19GQl9BVFlfQ1Q9eQorQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRD15CitDT05GSUdfRkJfQVRZX0dYPXkKK0NPTkZJR19GQl9BVFlfQkFDS0xJR0hUPXkKK0NPTkZJR19GQl9TMz1tCitDT05GSUdfRkJfU0FWQUdFPW0KK0NPTkZJR19GQl9TQVZBR0VfSTJDPXkKK0NPTkZJR19GQl9TQVZBR0VfQUNDRUw9eQorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9ORU9NQUdJQz1tCitDT05GSUdfRkJfS1lSTz1tCitDT05GSUdfRkJfM0RGWD1tCitDT05GSUdfRkJfM0RGWF9BQ0NFTD15CitDT05GSUdfRkJfVk9PRE9PMT1tCisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorQ09ORklHX0ZCX1RSSURFTlQ9bQorQ09ORklHX0ZCX1RSSURFTlRfQUNDRUw9eQorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GU0xfRElVIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TTTUwMT1tCitDT05GSUdfRkJfSUJNX0dYVDQ1MDA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD1tCisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0s9eQorQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0tfU0laRT02NAorIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KK0NPTkZJR19TTkRfSFdERVA9bQorQ09ORklHX1NORF9SQVdNSURJPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TTkRfU0VRX0RVTU1ZPW0KK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQorQ09ORklHX1NORF9ERUJVRz15CitDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0U9eQorQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRz15CitDT05GSUdfU05EX1ZNQVNURVI9eQorQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCitDT05GSUdfU05EX09QTDNfTElCPW0KK0NPTkZJR19TTkRfVlhfTElCPW0KK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCitDT05GSUdfU05EX0RSSVZFUlM9eQorQ09ORklHX1NORF9EVU1NWT1tCitDT05GSUdfU05EX1ZJUk1JREk9bQorQ09ORklHX1NORF9NVFBBVj1tCitDT05GSUdfU05EX01UUzY0PW0KK0NPTkZJR19TTkRfU0VSSUFMX1UxNjU1MD1tCitDT05GSUdfU05EX01QVTQwMT1tCitDT05GSUdfU05EX1BPUlRNQU4yWDQ9bQorQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkU9eQorQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkVfREVGQVVMVD01CitDT05GSUdfU05EX1NCX0NPTU1PTj1tCitDT05GSUdfU05EX1NCMTZfRFNQPW0KK0NPTkZJR19TTkRfSVNBPXkKKyMgQ09ORklHX1NORF9BRExJQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUQxODE2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUQxODQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDIzMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSTgzMzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0MjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyMzYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RUMDE5WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVM5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTY4OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQzYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dVU0NMQVNTSUMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dVU0VYVFJFTUUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dVU01BWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URVJXQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFUldBVkVfU1RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzU0EyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUFRJOTJYX0FEMTg0OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BUSTkyWF9DUzQyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QVEk5M1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JUk8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0IxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0UgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NHQUxBWFkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NTQ0FQRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfV0FWRUZST05UIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKK0NPTkZJR19TTkRfQUQxODg5PW0KK0NPTkZJR19TTkRfQUxTMzAwPW0KK0NPTkZJR19TTkRfQUxTNDAwMD1tCitDT05GSUdfU05EX0FMSTU0NTE9bQorQ09ORklHX1NORF9BVElJWFA9bQorQ09ORklHX1NORF9BVElJWFBfTU9ERU09bQorQ09ORklHX1NORF9BVTg4MTA9bQorQ09ORklHX1NORF9BVTg4MjA9bQorQ09ORklHX1NORF9BVTg4MzA9bQorQ09ORklHX1NORF9BVzI9bQorQ09ORklHX1NORF9BWlQzMzI4PW0KK0NPTkZJR19TTkRfQlQ4N1g9bQorIyBDT05GSUdfU05EX0JUODdYX09WRVJDTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0NBMDEwNj1tCitDT05GSUdfU05EX0NNSVBDST1tCitDT05GSUdfU05EX09YWUdFTl9MSUI9bQorQ09ORklHX1NORF9PWFlHRU49bQorQ09ORklHX1NORF9DUzQyODE9bQorQ09ORklHX1NORF9DUzQ2WFg9bQorQ09ORklHX1NORF9DUzQ2WFhfTkVXX0RTUD15CitDT05GSUdfU05EX0NTNTUzMD1tCitDT05GSUdfU05EX0RBUkxBMjA9bQorQ09ORklHX1NORF9HSU5BMjA9bQorQ09ORklHX1NORF9MQVlMQTIwPW0KK0NPTkZJR19TTkRfREFSTEEyND1tCitDT05GSUdfU05EX0dJTkEyND1tCitDT05GSUdfU05EX0xBWUxBMjQ9bQorQ09ORklHX1NORF9NT05BPW0KK0NPTkZJR19TTkRfTUlBPW0KK0NPTkZJR19TTkRfRUNITzNHPW0KK0NPTkZJR19TTkRfSU5ESUdPPW0KK0NPTkZJR19TTkRfSU5ESUdPSU89bQorQ09ORklHX1NORF9JTkRJR09ESj1tCitDT05GSUdfU05EX0VNVTEwSzE9bQorQ09ORklHX1NORF9FTVUxMEsxWD1tCitDT05GSUdfU05EX0VOUzEzNzA9bQorQ09ORklHX1NORF9FTlMxMzcxPW0KK0NPTkZJR19TTkRfRVMxOTM4PW0KK0NPTkZJR19TTkRfRVMxOTY4PW0KK0NPTkZJR19TTkRfRk04MDE9bQorQ09ORklHX1NORF9GTTgwMV9URUE1NzVYX0JPT0w9eQorQ09ORklHX1NORF9GTTgwMV9URUE1NzVYPW0KKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorQ09ORklHX1NORF9IRFNQPW0KK0NPTkZJR19TTkRfSERTUE09bQorQ09ORklHX1NORF9ISUZJRVI9bQorQ09ORklHX1NORF9JQ0UxNzEyPW0KK0NPTkZJR19TTkRfSUNFMTcyND1tCisjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0tPUkcxMjEyPW0KK0NPTkZJR19TTkRfTUFFU1RSTzM9bQorQ09ORklHX1NORF9NSVhBUlQ9bQorQ09ORklHX1NORF9OTTI1Nj1tCitDT05GSUdfU05EX1BDWEhSPW0KK0NPTkZJR19TTkRfUklQVElERT1tCitDT05GSUdfU05EX1JNRTMyPW0KK0NPTkZJR19TTkRfUk1FOTY9bQorQ09ORklHX1NORF9STUU5NjUyPW0KK0NPTkZJR19TTkRfU09OSUNWSUJFUz1tCitDT05GSUdfU05EX1RSSURFTlQ9bQorQ09ORklHX1NORF9WSUE4MlhYPW0KK0NPTkZJR19TTkRfVklBODJYWF9NT0RFTT1tCitDT05GSUdfU05EX1ZJUlRVT1NPPW0KK0NPTkZJR19TTkRfVlgyMjI9bQorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BQQz15CitDT05GSUdfU05EX1BPV0VSTUFDPW0KK0NPTkZJR19TTkRfUE9XRVJNQUNfQVVUT19EUkM9eQorQ09ORklHX1NORF9BT0E9bQorQ09ORklHX1NORF9BT0FfRkFCUklDX0xBWU9VVD1tCitDT05GSUdfU05EX0FPQV9PTllYPW0KK0NPTkZJR19TTkRfQU9BX1RBUz1tCitDT05GSUdfU05EX0FPQV9UT09OSUU9bQorQ09ORklHX1NORF9BT0FfU09VTkRCVVM9bQorQ09ORklHX1NORF9BT0FfU09VTkRCVVNfSTJTPW0KK0NPTkZJR19TTkRfVVNCPXkKK0NPTkZJR19TTkRfVVNCX0FVRElPPW0KK0NPTkZJR19TTkRfVVNCX1VTWDJZPW0KK0NPTkZJR19TTkRfVVNCX0NBSUFRPW0KK0NPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKKyMgQ09ORklHX1NORF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9bQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CitDT05GSUdfSElEUkFXPXkKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0s9eQorQ09ORklHX0hJRF9GRj15CitDT05GSUdfSElEX1BJRD15CitDT05GSUdfTE9HSVRFQ0hfRkY9eQorQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGPXkKK0NPTkZJR19QQU5USEVSTE9SRF9GRj15CitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPXkKK0NPTkZJR19aRVJPUExVU19GRj15CitDT05GSUdfVVNCX0hJRERFVj15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPW0KK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorQ09ORklHX1VTQl9FSENJX0ZTTD15CitDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9bQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9TU0IgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9bQorQ09ORklHX1VTQl9VMTMyX0hDRD1tCitDT05GSUdfVVNCX1NMODExX0hDRD1tCisjIENPTkZJR19VU0JfU0w4MTFfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCitDT05GSUdfVVNCX0FDTT1tCitDT05GSUdfVVNCX1BSSU5URVI9bQorQ09ORklHX1VTQl9XRE09bQorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9VU0JBVD15CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQorQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9BTEFVREE9eQorQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9LQVJNQT15CitDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQj15CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKK0NPTkZJR19VU0JfTURDODAwPW0KK0NPTkZJR19VU0JfTUlDUk9URUs9bQorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfVVNTNzIwPW0KK0NPTkZJR19VU0JfU0VSSUFMPW0KK0NPTkZJR19VU0JfRVpVU0I9eQorQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15CitDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRT1tCitDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRT1tCitDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2PW0KK0NPTkZJR19VU0JfU0VSSUFMX0JFTEtJTj1tCitDT05GSUdfVVNCX1NFUklBTF9DSDM0MT1tCitDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQ9bQorQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KK0NPTkZJR19VU0JfU0VSSUFMX0NQMjEwMT1tCitDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KK0NPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KK0NPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KK0NPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQ9bQorQ09ORklHX1VTQl9TRVJJQUxfVklTT1I9bQorQ09ORklHX1VTQl9TRVJJQUxfSVBBUT1tCitDT05GSUdfVVNCX1NFUklBTF9JUj1tCitDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVD1tCitDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9UST1tCisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9JUFc9bQorQ09ORklHX1VTQl9TRVJJQUxfSVVVPW0KK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQorQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCitDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQorQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQorQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMD1tCitDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwPW0KK0NPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBPW0KK0NPTkZJR19VU0JfU0VSSUFMX05BVk1BTj1tCitDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQorQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OD1tCitDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1PW0KK0NPTkZJR19VU0JfU0VSSUFMX0hQNFg9bQorQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCitDT05GSUdfVVNCX1NFUklBTF9TQUZFX1BBRERFRD15CitDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUz1tCitDT05GSUdfVVNCX1NFUklBTF9UST1tCitDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9bQorQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KK0NPTkZJR19VU0JfU0VSSUFMX09QVElPTj1tCitDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUPW0KK0NPTkZJR19VU0JfU0VSSUFMX0RFQlVHPW0KKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCitDT05GSUdfVVNCX0VNSTYyPW0KK0NPTkZJR19VU0JfRU1JMjY9bQorQ09ORklHX1VTQl9BRFVUVVg9bQorQ09ORklHX1VTQl9BVUVSU1dBTEQ9bQorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0xFR09UT1dFUj1tCitDT05GSUdfVVNCX0xDRD1tCitDT05GSUdfVVNCX0JFUlJZX0NIQVJHRT1tCitDT05GSUdfVVNCX0xFRD1tCisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorQ09ORklHX1VTQl9QSElER0VUPW0KK0NPTkZJR19VU0JfUEhJREdFVEtJVD1tCitDT05GSUdfVVNCX1BISURHRVRNT1RPUkNPTlRST0w9bQorQ09ORklHX1VTQl9QSElER0VUU0VSVk89bQorQ09ORklHX1VTQl9JRE1PVVNFPW0KK0NPTkZJR19VU0JfRlRESV9FTEFOPW0KK0NPTkZJR19VU0JfQVBQTEVESVNQTEFZPW0KK0NPTkZJR19VU0JfU0lTVVNCVkdBPW0KK0NPTkZJR19VU0JfU0lTVVNCVkdBX0NPTj15CitDT05GSUdfVVNCX0xEPW0KK0NPTkZJR19VU0JfVFJBTkNFVklCUkFUT1I9bQorQ09ORklHX1VTQl9JT1dBUlJJT1I9bQorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9JU0lHSFRGVz1tCitDT05GSUdfVVNCX0FUTT1tCitDT05GSUdfVVNCX1NQRUVEVE9VQ0g9bQorQ09ORklHX1VTQl9DWEFDUlU9bQorQ09ORklHX1VTQl9VRUFHTEVBVE09bQorQ09ORklHX1VTQl9YVVNCQVRNPW0KKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPW0KK0NPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0s9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPW0KK0NPTkZJR19BQ0NFU1NJQklMSVRZPXkKK0NPTkZJR19BMTFZX0JSQUlMTEVfQ09OU09MRT15CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19FREFDPXkKKworIworIyBSZXBvcnRpbmcgc3Vic3lzdGVtcworIworIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRURBQ19NTV9FREFDPW0KK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9bQorQ09ORklHX1JUQ19EUlZfRFMxMzc0PW0KK0NPTkZJR19SVENfRFJWX0RTMTY3Mj1tCitDT05GSUdfUlRDX0RSVl9NQVg2OTAwPW0KK0NPTkZJR19SVENfRFJWX1JTNUMzNzI9bQorQ09ORklHX1JUQ19EUlZfSVNMMTIwOD1tCitDT05GSUdfUlRDX0RSVl9YMTIwNT1tCitDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzPW0KK0NPTkZJR19SVENfRFJWX1BDRjg1ODM9bQorQ09ORklHX1JUQ19EUlZfTTQxVDgwPW0KK0NPTkZJR19SVENfRFJWX000MVQ4MF9XRFQ9eQorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0ZNMzEzMD1tCisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0NNT1M9eQorQ09ORklHX1JUQ19EUlZfRFMxNTExPW0KK0NPTkZJR19SVENfRFJWX0RTMTU1Mz1tCitDT05GSUdfUlRDX0RSVl9EUzE3NDI9bQorQ09ORklHX1JUQ19EUlZfU1RLMTdUQTg9bQorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTTQ4VDU5PW0KK0NPTkZJR19SVENfRFJWX1YzMDIwPW0KKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX1BQQz15CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKKyMgQ09ORklHX0ZTTF9ETUEgaXMgbm90IHNldAorQ09ORklHX0FVWERJU1BMQVk9eQorQ09ORklHX0tTMDEwOD1tCitDT05GSUdfS1MwMTA4X1BPUlQ9MHgzNzgKK0NPTkZJR19LUzAxMDhfREVMQVk9MgorQ09ORklHX1VJTz1tCitDT05GSUdfVUlPX0NJRj1tCitDT05GSUdfVUlPX1NNWD1tCisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz1tCitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0VYVDJfRlNfWElQPXkKK0NPTkZJR19GU19YSVA9eQorQ09ORklHX0VYVDNfRlM9bQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19FWFQ0REVWX0ZTPW0KK0NPTkZJR19FWFQ0REVWX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQ0REVWX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUNERFVl9GU19TRUNVUklUWT15CitDT05GSUdfSkJEPW0KKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj1tCitDT05GSUdfSkJEMl9ERUJVRz15CitDT05GSUdfRlNfTUJDQUNIRT1tCitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGU19GUz1tCitDT05GSUdfSkZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorQ09ORklHX1hGU19RVU9UQT15CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19HRlMyX0ZTPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPW0KK0NPTkZJR19PQ0ZTMl9GUz1tCitDT05GSUdfT0NGUzJfRlNfTzJDQj1tCitDT05GSUdfT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVI9bQorIyBDT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CitDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0U9eQorIyBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KK0NPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9ImFzY2lpIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0VDUllQVF9GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KK0NPTkZJR19CRUZTX0ZTPW0KKyMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JGU19GUz1tCitDT05GSUdfRUZTX0ZTPW0KK0NPTkZJR19DUkFNRlM9bQorQ09ORklHX1NRVUFTSEZTPW0KKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKK0NPTkZJR19WWEZTX0ZTPW0KK0NPTkZJR19NSU5JWF9GUz1tCisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19RTlg0RlNfRlM9bQorQ09ORklHX1JPTUZTX0ZTPW0KK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMl9BQ0w9eQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjNfQUNMPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfU1VOUlBDX0JJTkQzND15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KK0NPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1dFQUtfUFdfSEFTSD15CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NJRlNfVVBDQUxMPXkKK0NPTkZJR19DSUZTX0RGU19VUENBTEw9eQorQ09ORklHX05DUF9GUz1tCitDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkc9eQorQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkc9eQorQ09ORklHX05DUEZTX1NUUk9ORz15CitDT05GSUdfTkNQRlNfTkZTX05TPXkKK0NPTkZJR19OQ1BGU19PUzJfTlM9eQorQ09ORklHX05DUEZTX1NNQUxMRE9TPXkKK0NPTkZJR19OQ1BGU19OTFM9eQorQ09ORklHX05DUEZTX0VYVFJBUz15CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR185UF9GUz1tCisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfT1NGX1BBUlRJVElPTj15CitDT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19CU0RfRElTS0xBQkVMPXkKK0NPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQorQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CitDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMPXkKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NHSV9QQVJUSVRJT049eQorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfU1VOX1BBUlRJVElPTj15CitDT05GSUdfS0FSTUFfUEFSVElUSU9OPXkKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9InV0ZjgiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9bQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9ERUJVRz15CitDT05GSUdfUUVfR1BJTz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj1tCitDT05GSUdfQ1JDX1QxMERJRj1tCitDT05GSUdfQ1JDX0lUVV9UPW0KK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19VTlVTRURfU1lNQk9MUz15CitDT05GSUdfREVCVUdfRlM9eQorQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CitDT05GSUdfU0NIRURTVEFUUz15CitDT05GSUdfVElNRVJfU1RBVFM9eQorQ09ORklHX0RFQlVHX09CSkVDVFM9eQorIyBDT05GSUdfREVCVUdfT0JKRUNUU19TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfT0JKRUNUU19GUkVFPXkKK0NPTkZJR19ERUJVR19PQkpFQ1RTX1RJTUVSUz15CitDT05GSUdfU0xVQl9ERUJVR19PTj15CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19QSV9MSVNUPXkKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19ISUdITUVNPXkKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKK0NPTkZJR19ERUJVR19WTT15CitDT05GSUdfREVCVUdfV1JJVEVDT1VOVD15CitDT05GSUdfREVCVUdfTElTVD15CitDT05GSUdfREVCVUdfU0c9eQorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKK0NPTkZJR19GQVVMVF9JTkpFQ1RJT049eQorQ09ORklHX0ZBSUxTTEFCPXkKK0NPTkZJR19GQUlMX1BBR0VfQUxMT0M9eQorQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUPXkKK0NPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlM9eQorQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9TVEFDS1RSQUNFX0ZJTFRFUj15CitDT05GSUdfTEFURU5DWVRPUD15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX0ZUUkFDRT15CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRklSRVdJUkVfT0hDSV9SRU1PVEVfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKK0NPTkZJR19ERUJVR0dFUj15CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1hNT049eQorIyBDT05GSUdfWE1PTl9ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKK0NPTkZJR19JUlFTVEFDS1M9eQorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UWF9URVhUPXkKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKK0NPTkZJR19TRUNVUklUWT15CitDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CitDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNPXkKK0NPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUz15CisjIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTY1NTM2CitDT05GSUdfU0VDVVJJVFlfU0VMSU5VWD15CitDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU09eQorQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNX1ZBTFVFPTEKK0NPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RJU0FCTEU9eQorQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVWRUxPUD15CitDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFM9eQorQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQ0hFQ0tSRVFQUk9UX1ZBTFVFPTEKK0NPTkZJR19TRUNVUklUWV9TRUxJTlVYX0VOQUJMRV9TRUNNQVJLX0RFRkFVTFQ9eQorIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9QT0xJQ1lEQl9WRVJTSU9OX01BWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz1tCitDT05GSUdfQVNZTkNfQ09SRT1tCitDT05GSUdfQVNZTkNfTUVNQ1BZPW0KK0NPTkZJR19BU1lOQ19YT1I9bQorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19TRVFJVj1tCisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fQ1RSPW0KK0NPTkZJR19DUllQVE9fQ1RTPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX1hUUz1tCisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fUk1EMTI4PW0KK0NPTkZJR19DUllQVE9fUk1EMTYwPW0KK0NPTkZJR19DUllQVE9fUk1EMjU2PW0KK0NPTkZJR19DUllQVE9fUk1EMzIwPW0KK0NPTkZJR19DUllQVE9fU0hBMT15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQorQ09ORklHX0NSWVBUT19TRUVEPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCitDT05GSUdfQ1JZUFRPX0hXPXkKK0NPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WD1tCitDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVhfUk5HPXkKK0NPTkZJR19DUllQVE9fREVWX1RBTElUT1M9bQorQ09ORklHX1BQQ19DTE9DSz15CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CitDT05GSUdfVklSVFVBTElaQVRJT049eQorQ09ORklHX1ZJUlRJTz1tCitDT05GSUdfVklSVElPX1JJTkc9bQorQ09ORklHX1ZJUlRJT19QQ0k9bQorQ09ORklHX1ZJUlRJT19CQUxMT09OPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCmluZGV4IDcxZDc5ZTQuLmY5YTNkM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNQotIyBNb24gQXByIDI4IDEyOjM5OjEwIDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNgorIyBXZWQgSnVsIDE2IDEzOjU5OjI0IDIwMDgKICMKIENPTkZJR19QUEM2ND15CiAKQEAgLTE0LDggKzE0LDkgQEAKIENPTkZJR19UVU5FX0NFTEw9eQogQ09ORklHX1BQQ19GUFU9eQogQ09ORklHX0FMVElWRUM9eQorIyBDT05GSUdfVlNYIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTU1fU0xJQ0VTPXkKIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgpAQCAtMzEsNiArMzIsNyBAQAogQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CkBAIC05MCw2ICs5Miw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQpAQCAtMTE3LDEyICsxMjAsMTUgQEAKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldApAQCAtMTMyLDYgKzEzOCw3IEBACiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogQ09ORklHX0JMT0NLX0NPTVBBVD15CiAKICMKQEAgLTE1MiwxMyArMTU5LDggQEAKICMgUGxhdGZvcm0gc3VwcG9ydAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUEFTRU1JIGlzIG5vdCBzZXQKQEAgLTE4Nyw2ICsxODksNyBAQAogIyBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgb3B0aW9ucwogIwogQ09ORklHX1NQVV9GUz15CitDT05GSUdfU1BVX0ZTXzY0S19MUz15CiBDT05GSUdfU1BVX0JBU0U9eQogIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQSUMgaXMgbm90IHNldApAQCAtMjIyLDYgKzIyNSw3IEBACiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKK0NPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15CiAjIENPTkZJR19JT01NVV9WTUVSR0UgaXMgbm90IHNldAogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQpAQCAtMjQ4LDE4ICsyNTIsMjIgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NRU1PUllfSE9UUExVRz15CiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfQVJDSF9NRU1PUllfUFJPQkU9eQotIyBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBU19IQVNIXzY0Sz15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCi0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX1NNVD15CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorQ09ORklHX1BNPXkKK0NPTkZJR19QTV9ERUJVRz15CisjIENPTkZJR19QTV9WRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMjczLDYgKzI4MSw3IEBACiAjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAwMDAwMDAwMAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCkBAIC00MTIsNiArNDIxLDggQEAKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC00NzgsNiArNDg5LDcgQEAKICMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKQEAgLTUzMyw4ICs1NDUsMTggQEAKICMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX1pBVVJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPW0KKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0RFRkxBVEU9bQorIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNjAzLDYgKzYyNSw3IEBACiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTYxOCwyMyArNjQxLDE3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtNjUyLDggKzY2OSwxNyBAQAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKQEAgLTY3MSw4ICs2OTcsOCBAQAogQ09ORklHX0ZCX1NZU19GSUxMUkVDVD15CiBDT05GSUdfRkJfU1lTX0NPUFlBUkVBPXkKIENPTkZJR19GQl9TWVNfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TWVNfRk9QUz15Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtNzEyLDE4ICs3MzgsMTIgQEAKICMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9bQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KK0NPTkZJR19TTkRfSFdERVA9bQorQ09ORklHX1NORF9SQVdNSURJPW0KICMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CkBAIC03MzIsNTMgKzc1MiwyMCBAQAogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBQb3dlck1hYyBkZXZpY2VzCi0jCi0KLSMKLSMgQUxTQSBQb3dlck1hYyByZXF1aXJlcyBJMkMKLSMKLQotIwotIyBBTFNBIFBvd2VyUEMgZGV2aWNlcwotIworIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9QUEM9eQogQ09ORklHX1NORF9QUzM9bQogQ09ORklHX1NORF9QUzNfREVGQVVMVF9TVEFSVF9ERUxBWT0yMDAwCi0KLSMKLSMgVVNCIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorQ09ORklHX1NORF9VU0JfQVVESU89bQogIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKLSMKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfSElEUkFXPXkKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwpAQCAtODA3LDE3ICs3OTQsMjAgQEAKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVNQRU5EPXkKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD1tCiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKQEAgLTgzMSw2ICs4MjEsNyBAQAogIwogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC04OTAsMTIgKzg4MSw0NSBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9bQorQ09ORklHX1JUQ19DTEFTUz1tCisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX1BQQz1tCiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKQEAgLTkxMSw2ICs5MzUsNyBAQAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CkBAIC05NTksOCArOTg0LDggQEAKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA1OSwxMiArMTA4NCwxNSBAQAogIwogQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfSVRVX1Q9bQogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCiBDT05GSUdfTFpPX0NPTVBSRVNTPW0KIENPTkZJR19MWk9fREVDT01QUkVTUz1tCiBDT05GSUdfUExJU1Q9eQpAQCAtMTA4Miw3ICsxMTEwLDcgQEAKIENPTkZJR19GUkFNRV9XQVJOPTIwNDgKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKQEAgLTEwOTAsMzMgKzExMTgsNDkgQEAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKK0NPTkZJR19QUk9WRV9MT0NLSU5HPXkKK0NPTkZJR19MT0NLREVQPXkKICMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTE9DS0RFUD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQ9eQogQ09ORklHX0RFQlVHX0xJU1Q9eQogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRU1RBQ0tTPXkKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCkBAIC0xMTcyLDYgKzEyMTYsMTAgQEAKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQppbmRleCBiZjBiMWZkLi4xYTQwOTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTc0LDYgKzc0LDcgQEAKIAkJCQkgICBtaXNjXyQoQ09ORklHX1dPUkRfU0laRSkubwogb2JqLSQoQ09ORklHX1BQQzMyKQkJKz0gZW50cnlfMzIubyBzZXR1cF8zMi5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBkbWFfNjQubyBpb21tdS5vCitvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwogb2JqLSQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKQkrPSBwcm9tX2luaXQubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBwcGNfa3N5bXMubwogb2JqLSQoQ09ORklHX0JPT1RYX1RFWFQpCSs9IGJ0ZXh0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCBmN2YzYzIxLi5iOTM2YTFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0zNTUsNiArMzU1LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCisJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC9jb21wYXQtcG93ZXI1KyIsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXI1KyIsCiAJfSwKIAl7CS8qIFBvd2VyNiAqLwpAQCAtMzg2LDYgKzM4Nyw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvY29tcGF0LXBvd2VyNiIsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXI2IiwKIAl9LAogCXsJLyogMi4wNi1jb21wbGlhbnQgcHJvY2Vzc29yLCBpLmUuIFBvd2VyNyAiYXJjaGl0ZWN0ZWQiIG1vZGUgKi8KQEAgLTM5Nyw2ICszOTksNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKKwkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L2NvbXBhdC1wb3dlcjciLAogCQkucGxhdGZvcm0JCT0gInBvd2VyNyIsCiAJfSwKIAl7CS8qIFBvd2VyNyAqLwpAQCAtMTYyOSw2ICsxNjMyLDIzIEBACiAJCQkJdC0+Y3B1X3NldHVwID0gcy0+Y3B1X3NldHVwOwogCQkJCXQtPmNwdV9yZXN0b3JlID0gcy0+Y3B1X3Jlc3RvcmU7CiAJCQkJdC0+cGxhdGZvcm0gPSBzLT5wbGF0Zm9ybTsKKwkJCQkvKgorCQkJCSAqIElmIHdlIGhhdmUgcGFzc2VkIHRocm91Z2ggdGhpcyBsb2dpYyBvbmNlCisJCQkJICogYmVmb3JlIGFuZCBoYXZlIHB1bGxlZCB0aGUgZGVmYXVsdCBjYXNlCisJCQkJICogYmVjYXVzZSB0aGUgcmVhbCBQVlIgd2FzIG5vdCBmb3VuZCBpbnNpZGUKKwkJCQkgKiBjcHVfc3BlY3NbXSwgdGhlbiB3ZSBhcmUgcG9zc2libHkgcnVubmluZyBpbgorCQkJCSAqIGNvbXBhdGliaWxpdHkgbW9kZS4gSW4gdGhhdCBjYXNlLCBsZXQgdGhlCisJCQkJICogb3Byb2ZpbGVyIGtub3cgd2hpY2ggc2V0IG9mIGNvbXBhdGliaWxpdHkKKwkJCQkgKiBjb3VudGVycyB0byBwdWxsIGZyb20gYnkgbWFraW5nIHN1cmUgdGhlCisJCQkJICogb3Byb2ZpbGVfY3B1X3R5cGUgc3RyaW5nIGlzIHNldCB0byB0aGF0IG9mCisJCQkJICogY29tcGF0aWJpbGl0eSBtb2RlLiBJZiB0aGUgb3Byb2ZpbGVfY3B1X3R5cGUKKwkJCQkgKiBhbHJlYWR5IGhhcyBhIHZhbHVlLCB0aGVuIHdlIGFyZSBwb3NzaWJseQorCQkJCSAqIG92ZXJyaWRpbmcgYSByZWFsIFBWUiB3aXRoIGEgbG9naWNhbCBvbmUsIGFuZCwKKwkJCQkgKiBpbiB0aGF0IGNhc2UsIGtlZXAgdGhlIGN1cnJlbnQgdmFsdWUgZm9yCisJCQkJICogb3Byb2ZpbGVfY3B1X3R5cGUuCisJCQkJICovCisJCQkJaWYgKHQtPm9wcm9maWxlX2NwdV90eXBlID09IE5VTEwpCisJCQkJCXQtPm9wcm9maWxlX2NwdV90eXBlID0gcy0+b3Byb2ZpbGVfY3B1X3R5cGU7CiAJCQl9IGVsc2UKIAkJCQkqdCA9ICpzOwogCQkJKlBUUlJFTE9DKCZjdXJfY3B1X3NwZWMpID0gJnRoZV9jcHVfc3BlYzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwppbmRleCBjNDI2ODUwLi4zY2I1MmZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCkBAIC0xNTEsMTYgKzE1MSwxMSBAQAogCS8qIEludmFsaWRhdGUgVExCMCAqLwogCWxpCXI2LDB4MDQKIAl0bGJpdmF4IDAscjYKLSNpZmRlZiBDT05GSUdfU01QCi0JdGxic3luYwotI2VuZGlmCisJVExCU1lOQwogCS8qIEludmFsaWRhdGUgVExCMSAqLwogCWxpCXI2LDB4MGMKIAl0bGJpdmF4IDAscjYKLSNpZmRlZiBDT05GSUdfU01QCi0JdGxic3luYwotI2VuZGlmCi0JbXN5bmMKKwlUTEJTWU5DCiAKIC8qIDMuIFNldHVwIGEgdGVtcCBtYXBwaW5nIGFuZCBqdW1wIHRvIGl0ICovCiAJYW5kaS4JcjUsIHIzLCAweDEJLyogRmluZCBhbiBlbnRyeSBub3QgdXNlZCBhbmQgaXMgbm9uLXplcm8gKi8KQEAgLTIzOCwxMCArMjMzLDcgQEAKIAkvKiBJbnZhbGlkYXRlIFRMQjEgKi8KIAlsaQlyOSwweDBjCiAJdGxiaXZheCAwLHI5Ci0jaWZkZWYgQ09ORklHX1NNUAotCXRsYnN5bmMKLSNlbmRpZgotCW1zeW5jCisJVExCU1lOQwogCiAvKiA2LiBTZXR1cCBLRVJORUxCQVNFIG1hcHBpbmcgaW4gVExCMVswXSAqLwogCWxpcwlyNiwweDEwMDAJCS8qIFNldCBNQVMwKFRMQlNFTCkgPSBUTEIxKDEpLCBFU0VMID0gMCAqLwpAQCAtMjgzLDEwICsyNzUsNyBAQAogCS8qIEludmFsaWRhdGUgVExCMSAqLwogCWxpCXI5LDB4MGMKIAl0bGJpdmF4IDAscjkKLSNpZmRlZiBDT05GSUdfU01QCi0JdGxic3luYwotI2VuZGlmCi0JbXN5bmMKKwlUTEJTWU5DCiAKIAkvKiBFc3RhYmxpc2ggdGhlIGludGVycnVwdCB2ZWN0b3Igb2Zmc2V0cyAqLwogCVNFVF9JVk9SKDAsICBDcml0aWNhbElucHV0KTsKQEAgLTQ4Myw5MCArNDcyLDE2IEBACiAKIAkvKiBEYXRhIFN0b3JhZ2UgSW50ZXJydXB0ICovCiAJU1RBUlRfRVhDRVBUSU9OKERhdGFTdG9yYWdlKQotCW10c3ByCVNQUk5fU1BSRzAsIHIxMAkJLyogU2F2ZSBzb21lIHdvcmtpbmcgcmVnaXN0ZXJzICovCi0JbXRzcHIJU1BSTl9TUFJHMSwgcjExCi0JbXRzcHIJU1BSTl9TUFJHNFcsIHIxMgotCW10c3ByCVNQUk5fU1BSRzVXLCByMTMKLQltZmNyCXIxMQotCW10c3ByCVNQUk5fU1BSRzdXLCByMTEKLQotCS8qCi0JICogQ2hlY2sgaWYgaXQgd2FzIGEgc3RvcmUgZmF1bHQsIGlmIG5vdCB0aGVuIGJhaWwKLQkgKiBiZWNhdXNlIGEgdXNlciB0cmllZCB0byBhY2Nlc3MgYSBrZXJuZWwgb3IKLQkgKiByZWFkLXByb3RlY3RlZCBwYWdlLiAgT3RoZXJ3aXNlLCBnZXQgdGhlCi0JICogb2ZmZW5kaW5nIGFkZHJlc3MgYW5kIGhhbmRsZSBpdC4KLQkgKi8KLQltZnNwcglyMTAsIFNQUk5fRVNSCi0JYW5kaXMuCXIxMCwgcjEwLCBFU1JfU1RAaAotCWJlcQkyZgotCi0JbWZzcHIJcjEwLCBTUFJOX0RFQVIJCS8qIEdldCBmYXVsdGluZyBhZGRyZXNzICovCi0KLQkvKiBJZiB3ZSBhcmUgZmF1bHRpbmcgYSBrZXJuZWwgYWRkcmVzcywgd2UgaGF2ZSB0byB1c2UgdGhlCi0JICoga2VybmVsIHBhZ2UgdGFibGVzLgotCSAqLwotCWxpcwlyMTEsIFBBR0VfT0ZGU0VUQGgKLQljbXBsdwkwLCByMTAsIHIxMQotCWJnZQkyZgotCi0JLyogR2V0IHRoZSBQR0QgZm9yIHRoZSBjdXJyZW50IHRocmVhZCAqLwotMzoKLQltZnNwcglyMTEsU1BSTl9TUFJHMwotCWx3eglyMTEsUEdESVIocjExKQotNDoKLQlGSU5EX1BURQotCi0JLyogQXJlIF9QQUdFX1VTRVIgJiBfUEFHRV9SVyBzZXQgJiBfUEFHRV9IV1dSSVRFIG5vdD8gKi8KLQlhbmRpLglyMTMsIHIxMSwgX1BBR0VfUld8X1BBR0VfVVNFUnxfUEFHRV9IV1dSSVRFCi0JY21wd2kJMCwgcjEzLCBfUEFHRV9SV3xfUEFHRV9VU0VSCi0JYm5lCTJmCQkJLyogQmFpbCBpZiBub3QgKi8KLQotCS8qIFVwZGF0ZSAnY2hhbmdlZCcuICovCi0Jb3JpCXIxMSwgcjExLCBfUEFHRV9ESVJUWXxfUEFHRV9BQ0NFU1NFRHxfUEFHRV9IV1dSSVRFCi0Jc3R3CXIxMSwgUFRFX0ZMQUdTX09GRlNFVChyMTIpIC8qIFVwZGF0ZSBMaW51eCBwYWdlIHRhYmxlICovCi0KLQkvKiBNQVMyIG5vdCB1cGRhdGVkIGFzIHRoZSBlbnRyeSBkb2VzIGV4aXN0IGluIHRoZSB0bGIsIHRoaXMKLQkgICBmYXVsdCB0YWtlbiB0byBkZXRlY3Qgc3RhdGUgdHJhbnNpdGlvbiAoZWc6IENPVyAtPiBESVJUWSkKLQkgKi8KLQlhbmRpLglyMTEsIHIxMSwgX1BBR0VfSFdFWEVDCi0Jcmx3aW1pCXIxMSwgcjExLCAzMSwgMjcsIDI3CS8qIFNYIDwtIF9QQUdFX0hXRVhFQyAqLwotCW9yaQlyMTEsIHIxMSwgKE1BUzNfVVd8TUFTM19TV3xNQVMzX1VSfE1BUzNfU1IpQGwgLyogc2V0IHN0YXRpYyBwZXJtcyAqLwotCi0JLyogdXBkYXRlIHNlYXJjaCBQSUQgaW4gTUFTNiwgQVMgPSAwICovCi0JbWZzcHIJcjEyLCBTUFJOX1BJRDAKLQlzbHdpCXIxMiwgcjEyLCAxNgotCW10c3ByCVNQUk5fTUFTNiwgcjEyCi0KLQkvKiBmaW5kIHRoZSBUTEIgaW5kZXggdGhhdCBjYXVzZWQgdGhlIGZhdWx0LiAgSXQgaGFzIHRvIGJlIGhlcmUuICovCi0JdGxic3gJMCwgcjEwCi0KLQkvKiBvbmx5IHVwZGF0ZSB0aGUgcGVybSBiaXRzLCBhc3N1bWUgdGhlIFJQTiBpcyBmaW5lICovCi0JbWZzcHIJcjEyLCBTUFJOX01BUzMKLQlybHdpbWkJcjEyLCByMTEsIDAsIDIwLCAzMQotCW10c3ByCVNQUk5fTUFTMyxyMTIKLQl0bGJ3ZQotCi0JLyogRG9uZS4uLnJlc3RvcmUgcmVnaXN0ZXJzIGFuZCBnZXQgb3V0IG9mIGhlcmUuICAqLwotCW1mc3ByCXIxMSwgU1BSTl9TUFJHN1IKLQltdGNyCXIxMQotCW1mc3ByCXIxMywgU1BSTl9TUFJHNVIKLQltZnNwcglyMTIsIFNQUk5fU1BSRzRSCi0JbWZzcHIJcjExLCBTUFJOX1NQUkcxCi0JbWZzcHIJcjEwLCBTUFJOX1NQUkcwCi0JcmZpCQkJLyogRm9yY2UgY29udGV4dCBjaGFuZ2UgKi8KLQotMjoKLQkvKgotCSAqIFRoZSBiYWlsb3V0LiAgUmVzdG9yZSByZWdpc3RlcnMgdG8gcHJlLWV4Y2VwdGlvbiBjb25kaXRpb25zCi0JICogYW5kIGNhbGwgdGhlIGhlYXZ5d2VpZ2h0cyB0byBoZWxwIHVzIG91dC4KLQkgKi8KLQltZnNwcglyMTEsIFNQUk5fU1BSRzdSCi0JbXRjcglyMTEKLQltZnNwcglyMTMsIFNQUk5fU1BSRzVSCi0JbWZzcHIJcjEyLCBTUFJOX1NQUkc0UgotCW1mc3ByCXIxMSwgU1BSTl9TUFJHMQotCW1mc3ByCXIxMCwgU1BSTl9TUFJHMAotCWIJZGF0YV9hY2Nlc3MKKwlOT1JNQUxfRVhDRVBUSU9OX1BST0xPRworCW1mc3ByCXI1LFNQUk5fRVNSCQkvKiBHcmFiIHRoZSBFU1IsIHNhdmUgaXQsIHBhc3MgYXJnMyAqLworCXN0dwlyNSxfRVNSKHIxMSkKKwltZnNwcglyNCxTUFJOX0RFQVIJCS8qIEdyYWIgdGhlIERFQVIsIHNhdmUgaXQsIHBhc3MgYXJnMiAqLworCWFuZGlzLglyMTAscjUsKEVTUl9JTEt8RVNSX0RMSylAaAorCWJuZQkxZgorCUVYQ19YRkVSX0VFX0xJVEUoMHgwMzAwLCBoYW5kbGVfcGFnZV9mYXVsdCkKKzE6CisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCUVYQ19YRkVSX0VFX0xJVEUoMHgwMzAwLCBDYWNoZUxvY2tpbmdFeGNlcHRpb24pCiAKIAkvKiBJbnN0cnVjdGlvbiBTdG9yYWdlIEludGVycnVwdCAqLwogCUlOU1RSVUNUSU9OX1NUT1JBR0VfRVhDRVBUSU9OCkBAIC02NDUsMTUgKzU2MCwzMCBAQAogCWx3eglyMTEsUEdESVIocjExKQogCiA0OgorCS8qIE1hc2sgb2YgcmVxdWlyZWQgcGVybWlzc2lvbiBiaXRzLiBOb3RlIHRoYXQgd2hpbGUgd2UKKwkgKiBkbyBjb3B5IEVTUjpTVCB0byBfUEFHRV9SVyBwb3NpdGlvbiBhcyB0cnlpbmcgdG8gd3JpdGUKKwkgKiB0byBhbiBSTyBwYWdlIGlzIHByZXR0eSBjb21tb24sIHdlIGRvbid0IGRvIGl0IHdpdGgKKwkgKiBfUEFHRV9ESVJUWS4gV2UgY291bGQgZG8gaXQsIGJ1dCBpdCdzIGEgZmFpcmx5IHJhcmUKKwkgKiBldmVudCBzbyBJJ2QgcmF0aGVyIHRha2UgdGhlIG92ZXJoZWFkIHdoZW4gaXQgaGFwcGVucworCSAqIHJhdGhlciB0aGFuIGFkZGluZyBhbiBpbnN0cnVjdGlvbiBoZXJlLiBXZSBzaG91bGQgbWVhc3VyZQorCSAqIHdoZXRoZXIgdGhlIHdob2xlIHRoaW5nIGlzIHdvcnRoIGl0IGluIHRoZSBmaXJzdCBwbGFjZQorCSAqIGFzIHdlIGNvdWxkIGF2b2lkIGxvYWRpbmcgU1BSTl9FU1IgY29tcGxldGVseSBpbiB0aGUgZmlyc3QKKwkgKiBwbGFjZS4uLgorCSAqCisJICogVE9ETzogSXMgaXQgd29ydGggZG9pbmcgdGhhdCBtZnNwciAmIHJsd2ltaSBpbiB0aGUgZmlyc3QKKwkgKiAgICAgICBwbGFjZSBvciBjYW4gd2Ugc2F2ZSBhIGNvdXBsZSBvZiBpbnN0cnVjdGlvbnMgaGVyZSA/CisJICovCisJbWZzcHIJcjEyLFNQUk5fRVNSCisJbGkJcjEzLF9QQUdFX1BSRVNFTlR8X1BBR0VfQUNDRVNTRUQKKwlybHdpbWkJcjEzLHIxMiwxMSwyOSwyOQorCiAJRklORF9QVEUKLQlhbmRpLglyMTMsIHIxMSwgX1BBR0VfUFJFU0VOVAkvKiBJcyB0aGUgcGFnZSBwcmVzZW50PyAqLwotCWJlcQkyZgkJCS8qIEJhaWwgaWYgbm90IHByZXNlbnQgKi8KKwlhbmRjLglyMTMscjEzLHIxMQkJLyogQ2hlY2sgcGVybWlzc2lvbiAqLworCWJuZQkyZgkJCS8qIEJhaWwgaWYgcGVybWlzc2lvbiBtaXNtYWNoICovCiAKICNpZmRlZiBDT05GSUdfUFRFXzY0QklUCiAJbHd6CXIxMywgMChyMTIpCiAjZW5kaWYKLQlvcmkJcjExLCByMTEsIF9QQUdFX0FDQ0VTU0VECi0Jc3R3CXIxMSwgUFRFX0ZMQUdTX09GRlNFVChyMTIpCiAKIAkgLyogSnVtcCB0byBjb21tb24gdGxiIGxvYWQgKi8KIAliCWZpbmlzaF90bGJfbG9hZApAQCAtNjY3LDcgKzU5Nyw3IEBACiAJbWZzcHIJcjEyLCBTUFJOX1NQUkc0UgogCW1mc3ByCXIxMSwgU1BSTl9TUFJHMQogCW1mc3ByCXIxMCwgU1BSTl9TUFJHMAotCWIJZGF0YV9hY2Nlc3MKKwliCURhdGFTdG9yYWdlCiAKIAkvKiBJbnN0cnVjdGlvbiBUTEIgRXJyb3IgSW50ZXJydXB0ICovCiAJLyoKQEAgLTcwNSwxNSArNjM1LDE2IEBACiAJbHd6CXIxMSxQR0RJUihyMTEpCiAKIDQ6CisJLyogTWFrZSB1cCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgKi8KKwlsaQlyMTMsX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfSFdFWEVDCisKIAlGSU5EX1BURQotCWFuZGkuCXIxMywgcjExLCBfUEFHRV9QUkVTRU5UCS8qIElzIHRoZSBwYWdlIHByZXNlbnQ/ICovCi0JYmVxCTJmCQkJLyogQmFpbCBpZiBub3QgcHJlc2VudCAqLworCWFuZGMuCXIxMyxyMTMscjExCQkvKiBDaGVjayBwZXJtaXNzaW9uICovCisJYm5lCTJmCQkJLyogQmFpbCBpZiBwZXJtaXNzaW9uIG1pc21hY2ggKi8KIAogI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKIAlsd3oJcjEzLCAwKHIxMikKICNlbmRpZgotCW9yaQlyMTEsIHIxMSwgX1BBR0VfQUNDRVNTRUQKLQlzdHcJcjExLCBQVEVfRkxBR1NfT0ZGU0VUKHIxMikKIAogCS8qIEp1bXAgdG8gY29tbW9uIFRMQiBsb2FkIHBvaW50ICovCiAJYglmaW5pc2hfdGxiX2xvYWQKQEAgLTc2OCwyOSArNjk5LDEzIEBACiAgKiBMb2NhbCBmdW5jdGlvbnMKICAqLwogCi0JLyoKLQkgKiBEYXRhIFRMQiBleGNlcHRpb25zIHdpbGwgYmFpbCBvdXQgdG8gdGhpcyBwb2ludAotCSAqIGlmIHRoZXkgY2FuJ3QgcmVzb2x2ZSB0aGUgbGlnaHR3ZWlnaHQgVExCIGZhdWx0LgotCSAqLwotZGF0YV9hY2Nlc3M6Ci0JTk9STUFMX0VYQ0VQVElPTl9QUk9MT0cKLQltZnNwcglyNSxTUFJOX0VTUgkJLyogR3JhYiB0aGUgRVNSLCBzYXZlIGl0LCBwYXNzIGFyZzMgKi8KLQlzdHcJcjUsX0VTUihyMTEpCi0JbWZzcHIJcjQsU1BSTl9ERUFSCQkvKiBHcmFiIHRoZSBERUFSLCBzYXZlIGl0LCBwYXNzIGFyZzIgKi8KLQlhbmRpcy4JcjEwLHI1LChFU1JfSUxLfEVTUl9ETEspQGgKLQlibmUJMWYKLQlFWENfWEZFUl9FRV9MSVRFKDB4MDMwMCwgaGFuZGxlX3BhZ2VfZmF1bHQpCi0xOgotCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKLQlFWENfWEZFUl9FRV9MSVRFKDB4MDMwMCwgQ2FjaGVMb2NraW5nRXhjZXB0aW9uKQotCiAvKgotCiAgKiBCb3RoIHRoZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBUTEIgbWlzcyBnZXQgdG8gdGhpcwogICogcG9pbnQgdG8gbG9hZCB0aGUgVExCLgogICoJcjEwIC0gRUEgb2YgZmF1bHQKICAqCXIxMSAtIFRMQiAoaW5mbyBmcm9tIExpbnV4IFBURSkKLSAqCXIxMiwgcjEzIC0gYXZhaWxhYmxlIHRvIHVzZQorICoJcjEyIC0gYXZhaWxhYmxlIHRvIHVzZQorICoJcjEzIC0gdXBwZXIgYml0cyBvZiBQVEUgKGlmIFBURV82NEJJVCkgb3IgYXZhaWxhYmxlIHRvIHVzZQogICoJQ1I1IC0gcmVzdWx0cyBvZiBhZGRyID49IFBBR0VfT0ZGU0VUCiAgKglNQVMwLCBNQVMxIC0gbG9hZGVkIHdpdGggcHJvcGVyIHZhbHVlIHdoZW4gd2UgZ2V0IGhlcmUKICAqCU1BUzIsIE1BUzMgLSB3aWxsIG5lZWQgYWRkaXRpb25hbCBpbmZvIGZyb20gTGludXggUFRFCkBAIC04MTIsMjAgKzcyNywxNCBAQAogI2VuZGlmCiAJbXRzcHIJU1BSTl9NQVMyLCByMTIKIAotCWJnZQk1LCAxZgotCi0JLyogaXMgdXNlciBhZGRyICovCi0JYW5kaS4JcjEyLCByMTEsIChfUEFHRV9VU0VSIHwgX1BBR0VfSFdXUklURSB8IF9QQUdFX0hXRVhFQykKKwlsaQlyMTAsIChfUEFHRV9IV0VYRUMgfCBfUEFHRV9QUkVTRU5UKQorCXJsd2ltaQlyMTAsIHIxMSwgMzEsIDI5LCAyOQkvKiBleHRyYWN0IF9QQUdFX0RJUlRZIGludG8gU1cgKi8KKwlhbmQJcjEyLCByMTEsIHIxMAogCWFuZGkuCXIxMCwgcjExLCBfUEFHRV9VU0VSCS8qIFRlc3QgZm9yIF9QQUdFX1VTRVIgKi8KLQlzcndpCXIxMCwgcjEyLCAxCi0Jb3IJcjEyLCByMTIsIHIxMAkvKiBDb3B5IHVzZXIgcGVybXMgaW50byBzdXBlcnZpc29yICovCi0JaXNlbGVxCXIxMiwgMCwgcjEyCi0JYgkyZgotCi0JLyogaXMga2VybmVsIGFkZHIgKi8KLTE6CXJsd2lubQlyMTIsIHIxMSwgMzEsIDI5LCAyOQkvKiBFeHRyYWN0IF9QQUdFX0hXV1JJVEUgaW50byBTVyAqLwotCW9yaQlyMTIsIHIxMiwgKE1BUzNfU1ggfCBNQVMzX1NSKQotCisJc2x3aQlyMTAsIHIxMiwgMQorCW9yCXIxMCwgcjEwLCByMTIKKwlpc2VsZXEJcjEyLCByMTIsIHIxMAorCQogI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKIDI6CXJsd2ltaQlyMTIsIHIxMywgMjQsIDAsIDcJLyogZ3JhYiBSUE5bMzI6MzldICovCiAJcmx3aW1pCXIxMiwgcjExLCAyNCwgOCwgMTkJLyogZ3JhYiBSUE5bNDA6NTFdICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKaW5kZXggOGM2OGVlOS4uMjM4NWY2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwpAQCAtMTg2LDcgKzE4Niw4IEBACiBzdGF0aWMgZG1hX2FkZHJfdCBpb21tdV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAogCQkJICAgICAgdm9pZCAqcGFnZSwgdW5zaWduZWQgaW50IG5wYWdlcywKIAkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgaW50IGFsaWduX29yZGVyKQorCQkJICAgICAgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBpbnQgYWxpZ25fb3JkZXIsCisJCQkgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGVudHJ5LCBmbGFnczsKIAlkbWFfYWRkcl90IHJldCA9IERNQV9FUlJPUl9DT0RFOwpAQCAtMjA1LDcgKzIwNiw3IEBACiAKIAkvKiBQdXQgdGhlIFRDRXMgaW4gdGhlIEhXIHRhYmxlICovCiAJcHBjX21kLnRjZV9idWlsZCh0YmwsIGVudHJ5LCBucGFnZXMsICh1bnNpZ25lZCBsb25nKXBhZ2UgJiBJT01NVV9QQUdFX01BU0ssCi0JCQkgZGlyZWN0aW9uKTsKKwkJCSBkaXJlY3Rpb24sIGF0dHJzKTsKIAogCiAJLyogRmx1c2gvaW52YWxpZGF0ZSBUTEIgY2FjaGVzIGlmIG5lY2Vzc2FyeSAqLwpAQCAtMzM2LDcgKzMzNyw4IEBACiAJCQkgICAgbnBhZ2VzLCBlbnRyeSwgZG1hX2FkZHIpOwogCiAJCS8qIEluc2VydCBpbnRvIEhXIHRhYmxlICovCi0JCXBwY19tZC50Y2VfYnVpbGQodGJsLCBlbnRyeSwgbnBhZ2VzLCB2YWRkciAmIElPTU1VX1BBR0VfTUFTSywgZGlyZWN0aW9uKTsKKwkJcHBjX21kLnRjZV9idWlsZCh0YmwsIGVudHJ5LCBucGFnZXMsIHZhZGRyICYgSU9NTVVfUEFHRV9NQVNLLAorCQkJCSBkaXJlY3Rpb24sIGF0dHJzKTsKIAogCQkvKiBJZiB3ZSBhcmUgaW4gYW4gb3BlbiBzZWdtZW50LCB0cnkgbWVyZ2luZyAqLwogCQlpZiAoc2Vnc3RhcnQgIT0gcykgewpAQCAtNTczLDcgKzU3NSw4IEBACiAJCQlhbGlnbiA9IFBBR0VfU0hJRlQgLSBJT01NVV9QQUdFX1NISUZUOwogCiAJCWRtYV9oYW5kbGUgPSBpb21tdV9hbGxvYyhkZXYsIHRibCwgdmFkZHIsIG5wYWdlcywgZGlyZWN0aW9uLAotCQkJCQkgbWFzayA+PiBJT01NVV9QQUdFX1NISUZULCBhbGlnbik7CisJCQkJCSBtYXNrID4+IElPTU1VX1BBR0VfU0hJRlQsIGFsaWduLAorCQkJCQkgYXR0cnMpOwogCQlpZiAoZG1hX2hhbmRsZSA9PSBETUFfRVJST1JfQ09ERSkgewogCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJpb21tdV9hbGxvYyBmYWlsZWQsICIKQEAgLTY0Miw3ICs2NDUsNyBAQAogCW5pb19wYWdlcyA9IHNpemUgPj4gSU9NTVVfUEFHRV9TSElGVDsKIAlpb19vcmRlciA9IGdldF9pb21tdV9vcmRlcihzaXplKTsKIAltYXBwaW5nID0gaW9tbXVfYWxsb2MoZGV2LCB0YmwsIHJldCwgbmlvX3BhZ2VzLCBETUFfQklESVJFQ1RJT05BTCwKLQkJCSAgICAgIG1hc2sgPj4gSU9NTVVfUEFHRV9TSElGVCwgaW9fb3JkZXIpOworCQkJICAgICAgbWFzayA+PiBJT01NVV9QQUdFX1NISUZULCBpb19vcmRlciwgTlVMTCk7CiAJaWYgKG1hcHBpbmcgPT0gRE1BX0VSUk9SX0NPREUpIHsKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylyZXQsIG9yZGVyKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZmRmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwpAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAqIFBvd2VyUEMgYmFja2VuZCB0byB0aGUgS0dEQiBzdHViLgorICoKKyAqIDE5OTggKGMpIE1pY2hhZWwgQUsgVGVzY2ggKHRlc2NoQGNzLndpc2MuZWR1KQorICogQ29weXJpZ2h0IChDKSAyMDAzIFRpbWVzeXMgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBQUEM2NCBNb2RzIChDKSAyMDA1IEZyYW5rIFJvd2FuZCAoZnJvd2FuZEBtdmlzdGEuY29tKQorICogUFBDMzIgc3VwcG9ydCByZXN0b3JlZCBieSBWaXRhbHkgV29vbCA8dndvb2xAcnUubXZpc3RhLmNvbT4gYW5kCisgKiBTZXJnZWkgU2h0eWx5b3YgPHNzaHR5bHlvdkBydS5tdmlzdGEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGFzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tnZGIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisvKgorICogVGhpcyB0YWJsZSBjb250YWlucyB0aGUgbWFwcGluZyBiZXR3ZWVuIFBvd2VyUEMgaGFyZHdhcmUgdHJhcCB0eXBlcywgYW5kCisgKiBzaWduYWxzLCB3aGljaCBhcmUgcHJpbWFyaWx5IHdoYXQgR0RCIHVuZGVyc3RhbmRzLiAgR0RCIGFuZCB0aGUga2VybmVsCisgKiBkb24ndCBhbHdheXMgYWdyZWUgb24gdmFsdWVzLCBzbyB3ZSB1c2UgY29uc3RhbnRzIHRha2VuIGZyb20gZ2RiLTYuMi4KKyAqLworc3RhdGljIHN0cnVjdCBoYXJkX3RyYXBfaW5mbworeworCXVuc2lnbmVkIGludCB0dDsJCS8qIFRyYXAgdHlwZSBjb2RlIGZvciBwb3dlcnBjICovCisJdW5zaWduZWQgY2hhciBzaWdubzsJCS8qIFNpZ25hbCB0aGF0IHdlIG1hcCB0aGlzIHRyYXAgaW50byAqLworfSBoYXJkX3RyYXBfaW5mb1tdID0geworCXsgMHgwMTAwLCAweDAyIC8qIFNJR0lOVCAqLyAgfSwJCS8qIHN5c3RlbSByZXNldCAqLworCXsgMHgwMjAwLCAweDBiIC8qIFNJR1NFR1YgKi8gfSwJCS8qIG1hY2hpbmUgY2hlY2sgKi8KKwl7IDB4MDMwMCwgMHgwYiAvKiBTSUdTRUdWICovIH0sCQkvKiBkYXRhIGFjY2VzcyAqLworCXsgMHgwNDAwLCAweDBiIC8qIFNJR1NFR1YgKi8gfSwJCS8qIGluc3RydWN0aW9uIGFjY2VzcyAqLworCXsgMHgwNTAwLCAweDAyIC8qIFNJR0lOVCAqLyAgfSwJCS8qIGV4dGVybmFsIGludGVycnVwdCAqLworCXsgMHgwNjAwLCAweDBhIC8qIFNJR0JVUyAqLyAgfSwJCS8qIGFsaWdubWVudCAqLworCXsgMHgwNzAwLCAweDA1IC8qIFNJR1RSQVAgKi8gfSwJCS8qIHByb2dyYW0gY2hlY2sgKi8KKwl7IDB4MDgwMCwgMHgwOCAvKiBTSUdGUEUgKi8gIH0sCQkvKiBmcCB1bmF2YWlsYWJsZSAqLworCXsgMHgwOTAwLCAweDBlIC8qIFNJR0FMUk0gKi8gfSwJCS8qIGRlY3JlbWVudGVyICovCisJeyAweDBjMDAsIDB4MTQgLyogU0lHQ0hMRCAqLyB9LAkJLyogc3lzdGVtIGNhbGwgKi8KKyNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorCXsgMHgyMDAyLCAweDA1IC8qIFNJR1RSQVAgKi8gfSwJCS8qIGRlYnVnICovCisjaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQorCXsgMHgyMDEwLCAweDA4IC8qIFNJR0ZQRSAqLyAgfSwJCS8qIHNwZSB1bmF2YWlsYWJsZSAqLworCXsgMHgyMDIwLCAweDA4IC8qIFNJR0ZQRSAqLyAgfSwJCS8qIHNwZSB1bmF2YWlsYWJsZSAqLworCXsgMHgyMDMwLCAweDA4IC8qIFNJR0ZQRSAqLyAgfSwJCS8qIHNwZSBmcCBkYXRhICovCisJeyAweDIwNDAsIDB4MDggLyogU0lHRlBFICovICB9LAkJLyogc3BlIGZwIGRhdGEgKi8KKwl7IDB4MjA1MCwgMHgwOCAvKiBTSUdGUEUgKi8gIH0sCQkvKiBzcGUgZnAgcm91bmQgKi8KKwl7IDB4MjA2MCwgMHgwZSAvKiBTSUdJTEwgKi8gIH0sCQkvKiBwZXJmb3JtYWNlIG1vbml0b3IgKi8KKwl7IDB4MjkwMCwgMHgwOCAvKiBTSUdGUEUgKi8gIH0sCQkvKiBhcHUgdW5hdmFpbGFibGUgKi8KKwl7IDB4MzEwMCwgMHgwZSAvKiBTSUdBTFJNICovIH0sCQkvKiBmaXhlZCBpbnRlcnZhbCB0aW1lciAqLworCXsgMHgzMjAwLCAweDAyIC8qIFNJR0lOVCAqLyAgfSwgCS8qIHdhdGNoZG9nICovCisjZWxzZSAvKiAhIENPTkZJR19GU0xfQk9PS0UgKi8KKwl7IDB4MTAwMCwgMHgwZSAvKiBTSUdBTFJNICovIH0sCQkvKiBwcm9nIGludGVydmFsIHRpbWVyICovCisJeyAweDEwMTAsIDB4MGUgLyogU0lHQUxSTSAqLyB9LAkJLyogZml4ZWQgaW50ZXJ2YWwgdGltZXIgKi8KKwl7IDB4MTAyMCwgMHgwMiAvKiBTSUdJTlQgKi8gIH0sIAkvKiB3YXRjaGRvZyAqLworCXsgMHgyMDEwLCAweDA4IC8qIFNJR0ZQRSAqLyAgfSwJCS8qIGZwIHVuYXZhaWxhYmxlICovCisJeyAweDIwMjAsIDB4MDggLyogU0lHRlBFICovICB9LAkJLyogYXAgdW5hdmFpbGFibGUgKi8KKyNlbmRpZgorI2Vsc2UgLyogISAoZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkpICovCisJeyAweDBkMDAsIDB4MDUgLyogU0lHVFJBUCAqLyB9LAkJLyogc2luZ2xlLXN0ZXAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR184eHgpCisJeyAweDEwMDAsIDB4MDQgLyogU0lHSUxMICovICB9LAkJLyogc29mdHdhcmUgZW11bGF0aW9uICovCisjZWxzZSAvKiAhIENPTkZJR184eHggKi8KKwl7IDB4MGYwMCwgMHgwNCAvKiBTSUdJTEwgKi8gIH0sCQkvKiBwZXJmb3JtYW5jZSBtb25pdG9yICovCisJeyAweDBmMjAsIDB4MDggLyogU0lHRlBFICovICB9LAkJLyogYWx0aXZlYyB1bmF2YWlsYWJsZSAqLworCXsgMHgxMzAwLCAweDA1IC8qIFNJR1RSQVAgKi8gfSwgCS8qIGluc3RydWN0aW9uIGFkZHJlc3MgYnJlYWsgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkKKwl7IDB4MTIwMCwgMHgwNSAvKiBTSUdJTEwgKi8gIH0sCQkvKiBzeXN0ZW0gZXJyb3IgKi8KKwl7IDB4MTUwMCwgMHgwNCAvKiBTSUdJTEwgKi8gIH0sCQkvKiBzb2Z0IHBhdGNoICovCisJeyAweDE2MDAsIDB4MDQgLyogU0lHSUxMICovICB9LAkJLyogbWFpbnRlbmFuY2UgKi8KKwl7IDB4MTcwMCwgMHgwOCAvKiBTSUdGUEUgKi8gIH0sCQkvKiBhbHRpdmVjIGFzc2lzdCAqLworCXsgMHgxODAwLCAweDA0IC8qIFNJR0lMTCAqLyAgfSwJCS8qIHRoZXJtYWwgKi8KKyNlbHNlIC8qICEgQ09ORklHX1BQQzY0ICovCisJeyAweDE0MDAsIDB4MDIgLyogU0lHSU5UICovICB9LAkJLyogU01JICovCisJeyAweDE2MDAsIDB4MDggLyogU0lHRlBFICovICB9LAkJLyogYWx0aXZlYyBhc3Npc3QgKi8KKwl7IDB4MTcwMCwgMHgwNCAvKiBTSUdJTEwgKi8gIH0sCQkvKiBUQVUgKi8KKwl7IDB4MjAwMCwgMHgwNSAvKiBTSUdUUkFQICovIH0sCQkvKiBydW4gbW9kZSAqLworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCXsgMHgwMDAwLCAweDAwIH0JCQkvKiBNdXN0IGJlIGxhc3QgKi8KK307CisKK3N0YXRpYyBpbnQgY29tcHV0ZVNpZ25hbCh1bnNpZ25lZCBpbnQgdHQpCit7CisJc3RydWN0IGhhcmRfdHJhcF9pbmZvICpodDsKKworCWZvciAoaHQgPSBoYXJkX3RyYXBfaW5mbzsgaHQtPnR0ICYmIGh0LT5zaWdubzsgaHQrKykKKwkJaWYgKGh0LT50dCA9PSB0dCkKKwkJCXJldHVybiBodC0+c2lnbm87CisKKwlyZXR1cm4gU0lHSFVQOwkJLyogZGVmYXVsdCBmb3IgdGhpbmdzIHdlIGRvbid0IGtub3cgYWJvdXQgKi8KK30KKworc3RhdGljIGludCBrZ2RiX2NhbGxfbm1pX2hvb2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJa2dkYl9ubWljYWxsYmFjayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCByZWdzKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQga2dkYl9yb3VuZHVwX2NwdXModW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzbXBfc2VuZF9kZWJ1Z2dlcl9icmVhayhNU0dfQUxMX0JVVF9TRUxGKTsKK30KKyNlbmRpZgorCisvKiBLR0RCIGZ1bmN0aW9ucyB0byB1c2UgZXhpc3RpbmcgUG93ZXJQQzY0IGhvb2tzLiAqLworc3RhdGljIGludCBrZ2RiX2RlYnVnZ2VyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBrZ2RiX2hhbmRsZV9leGNlcHRpb24oMCwgY29tcHV0ZVNpZ25hbChUUkFQKHJlZ3MpKSwgMCwgcmVncyk7Cit9CisKK3N0YXRpYyBpbnQga2dkYl9oYW5kbGVfYnJlYWtwb2ludChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAodXNlcl9tb2RlKHJlZ3MpKQorCQlyZXR1cm4gMDsKKworCWlmIChrZ2RiX2hhbmRsZV9leGNlcHRpb24oMCwgU0lHVFJBUCwgMCwgcmVncykgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKih1MzIgKikgKHJlZ3MtPm5pcCkgPT0gKih1MzIgKikgKCZhcmNoX2tnZGJfb3BzLmdkYl9icHRfaW5zdHIpKQorCQlyZWdzLT5uaXAgKz0gNDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGtnZGJfc2luZ2xlc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZF9pbmZvLCAqZXhjZXB0aW9uX3RocmVhZF9pbmZvOworCisJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE9uIEJvb2sgRSBhbmQgcGVyaGFwcyBvdGhlciBwcm9jZXNzc29ycywgc2luZ2xlc3RlcCBpcyBoYW5kbGVkIG9uCisJICogdGhlIGNyaXRpY2FsIGV4Y2VwdGlvbiBzdGFjay4gIFRoaXMgY2F1c2VzIGN1cnJlbnRfdGhyZWFkX2luZm8oKQorCSAqIHRvIGZhaWwsIHNpbmNlIGl0IGl0IGxvY2F0ZXMgdGhlIHRocmVhZF9pbmZvIGJ5IG1hc2tpbmcgb2ZmCisJICogdGhlIGxvdyBiaXRzIG9mIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIuICBXZSB3b3JrIGFyb3VuZAorCSAqIHRoaXMgaXNzdWUgYnkgY29weWluZyB0aGUgdGhyZWFkX2luZm8gZnJvbSB0aGUga2VybmVsIHN0YWNrCisJICogYmVmb3JlIGNhbGxpbmcga2dkYl9oYW5kbGVfZXhjZXB0aW9uLCBhbmQgY29weWluZyBpdCBiYWNrCisJICogYWZ0ZXJ3YXJkcy4gIE9uIG1vc3QgcHJvY2Vzc29ycyB0aGUgY29weSBpcyBhdm9pZGVkIHNpbmNlCisJICogZXhjZXB0aW9uX3RocmVhZF9pbmZvID09IHRocmVhZF9pbmZvLgorCSAqLworCXRocmVhZF9pbmZvID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShyZWdzLT5ncHJbMV0gJiB+KFRIUkVBRF9TSVpFLTEpKTsKKwlleGNlcHRpb25fdGhyZWFkX2luZm8gPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisKKwlpZiAodGhyZWFkX2luZm8gIT0gZXhjZXB0aW9uX3RocmVhZF9pbmZvKQorCQltZW1jcHkoZXhjZXB0aW9uX3RocmVhZF9pbmZvLCB0aHJlYWRfaW5mbywgc2l6ZW9mICp0aHJlYWRfaW5mbyk7CisKKwlrZ2RiX2hhbmRsZV9leGNlcHRpb24oMCwgU0lHVFJBUCwgMCwgcmVncyk7CisKKwlpZiAodGhyZWFkX2luZm8gIT0gZXhjZXB0aW9uX3RocmVhZF9pbmZvKQorCQltZW1jcHkodGhyZWFkX2luZm8sIGV4Y2VwdGlvbl90aHJlYWRfaW5mbywgc2l6ZW9mICp0aHJlYWRfaW5mbyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBrZ2RiX2lhYnJfbWF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoa2dkYl9oYW5kbGVfZXhjZXB0aW9uKDAsIGNvbXB1dGVTaWduYWwoVFJBUChyZWdzKSksIDAsIHJlZ3MpICE9IDApCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGtnZGJfZGFicl9tYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAodXNlcl9tb2RlKHJlZ3MpKQorCQlyZXR1cm4gMDsKKworCWlmIChrZ2RiX2hhbmRsZV9leGNlcHRpb24oMCwgY29tcHV0ZVNpZ25hbChUUkFQKHJlZ3MpKSwgMCwgcmVncykgIT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgUEFDSzY0KHB0ciwgc3JjKSBkbyB7ICoocHRyKyspID0gKHNyYyk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUEFDSzMyKHB0ciwgc3JjKSBkbyB7ICAgICAgICAgIFwKKwl1MzIgKnB0cjMyOyAgICAgICAgICAgICAgICAgICBcCisJcHRyMzIgPSAodTMyICopcHRyOyAgICAgICAgICAgXAorCSoocHRyMzIrKykgPSAoc3JjKTsgICAgICAgICAgIFwKKwlwdHIgPSAodW5zaWduZWQgbG9uZyAqKXB0cjMyOyBcCisJfSB3aGlsZSAoMCkKKworCit2b2lkIHB0X3JlZ3NfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgKnB0ciA9IGdkYl9yZWdzOworCWludCByZWc7CisKKwltZW1zZXQoZ2RiX3JlZ3MsIDAsIE5VTVJFR0JZVEVTKTsKKworCWZvciAocmVnID0gMDsgcmVnIDwgMzI7IHJlZysrKQorCQlQQUNLNjQocHRyLCByZWdzLT5ncHJbcmVnXSk7CisKKyNpZmRlZiBDT05GSUdfRlNMX0JPT0tFCisjaWZkZWYgQ09ORklHX1NQRQorCWZvciAocmVnID0gMDsgcmVnIDwgMzI7IHJlZysrKQorCQlQQUNLNjQocHRyLCBjdXJyZW50LT50aHJlYWQuZXZyW3JlZ10pOworI2Vsc2UKKwlwdHIgKz0gMzI7CisjZW5kaWYKKyNlbHNlCisJLyogZnAgcmVnaXN0ZXJzIG5vdCB1c2VkIGJ5IGtlcm5lbCwgbGVhdmUgemVybyAqLworCXB0ciArPSAzMiAqIDggLyBzaXplb2YobG9uZyk7CisjZW5kaWYKKworCVBBQ0s2NChwdHIsIHJlZ3MtPm5pcCk7CisJUEFDSzY0KHB0ciwgcmVncy0+bXNyKTsKKwlQQUNLMzIocHRyLCByZWdzLT5jY3IpOworCVBBQ0s2NChwdHIsIHJlZ3MtPmxpbmspOworCVBBQ0s2NChwdHIsIHJlZ3MtPmN0cik7CisJUEFDSzMyKHB0ciwgcmVncy0+eGVyKTsKKworCUJVR19PTigodW5zaWduZWQgbG9uZylwdHIgPgorCSAgICAgICAodW5zaWduZWQgbG9uZykoKCh2b2lkICopZ2RiX3JlZ3MpICsgTlVNUkVHQllURVMpKTsKK30KKwordm9pZCBzbGVlcGluZ190aHJlYWRfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKShwLT50aHJlYWQua3NwICsKKwkJCQkJCSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQpOworCXVuc2lnbmVkIGxvbmcgKnB0ciA9IGdkYl9yZWdzOworCWludCByZWc7CisKKwltZW1zZXQoZ2RiX3JlZ3MsIDAsIE5VTVJFR0JZVEVTKTsKKworCS8qIFJlZ3MgR1BSMC0yICovCisJZm9yIChyZWcgPSAwOyByZWcgPCAzOyByZWcrKykKKwkJUEFDSzY0KHB0ciwgcmVncy0+Z3ByW3JlZ10pOworCisJLyogUmVncyBHUFIzLTEzIGFyZSBjYWxsZXIgc2F2ZWQsIG5vdCBpbiByZWdzLT5ncHJbXSAqLworCXB0ciArPSAxMTsKKworCS8qIFJlZ3MgR1BSMTQtMzEgKi8KKwlmb3IgKHJlZyA9IDE0OyByZWcgPCAzMjsgcmVnKyspCisJCVBBQ0s2NChwdHIsIHJlZ3MtPmdwcltyZWddKTsKKworI2lmZGVmIENPTkZJR19GU0xfQk9PS0UKKyNpZmRlZiBDT05GSUdfU1BFCisJZm9yIChyZWcgPSAwOyByZWcgPCAzMjsgcmVnKyspCisJCVBBQ0s2NChwdHIsIHAtPnRocmVhZC5ldnJbcmVnXSk7CisjZWxzZQorCXB0ciArPSAzMjsKKyNlbmRpZgorI2Vsc2UKKwkvKiBmcCByZWdpc3RlcnMgbm90IHVzZWQgYnkga2VybmVsLCBsZWF2ZSB6ZXJvICovCisJcHRyICs9IDMyICogOCAvIHNpemVvZihsb25nKTsKKyNlbmRpZgorCisJUEFDSzY0KHB0ciwgcmVncy0+bmlwKTsKKwlQQUNLNjQocHRyLCByZWdzLT5tc3IpOworCVBBQ0szMihwdHIsIHJlZ3MtPmNjcik7CisJUEFDSzY0KHB0ciwgcmVncy0+bGluayk7CisJUEFDSzY0KHB0ciwgcmVncy0+Y3RyKTsKKwlQQUNLMzIocHRyLCByZWdzLT54ZXIpOworCisJQlVHX09OKCh1bnNpZ25lZCBsb25nKXB0ciA+CisJICAgICAgICh1bnNpZ25lZCBsb25nKSgoKHZvaWQgKilnZGJfcmVncykgKyBOVU1SRUdCWVRFUykpOworfQorCisjZGVmaW5lIFVOUEFDSzY0KGRlc3QsIHB0cikgZG8geyBkZXN0ID0gKihwdHIrKyk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVU5QQUNLMzIoZGVzdCwgcHRyKSBkbyB7ICAgICAgIFwKKwl1MzIgKnB0cjMyOyAgICAgICAgICAgICAgICAgICBcCisJcHRyMzIgPSAodTMyICopcHRyOyAgICAgICAgICAgXAorCWRlc3QgPSAqKHB0cjMyKyspOyAgICAgICAgICAgIFwKKwlwdHIgPSAodW5zaWduZWQgbG9uZyAqKXB0cjMyOyBcCisJfSB3aGlsZSAoMCkKKwordm9pZCBnZGJfcmVnc190b19wdF9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nICpwdHIgPSBnZGJfcmVnczsKKwlpbnQgcmVnOworI2lmZGVmIENPTkZJR19TUEUKKwl1bmlvbiB7CisJCXUzMiB2MzJbMl07CisJCXU2NCB2NjQ7CisJfSBhY2M7CisjZW5kaWYKKworCWZvciAocmVnID0gMDsgcmVnIDwgMzI7IHJlZysrKQorCQlVTlBBQ0s2NChyZWdzLT5ncHJbcmVnXSwgcHRyKTsKKworI2lmZGVmIENPTkZJR19GU0xfQk9PS0UKKyNpZmRlZiBDT05GSUdfU1BFCisJZm9yIChyZWcgPSAwOyByZWcgPCAzMjsgcmVnKyspCisJCVVOUEFDSzY0KGN1cnJlbnQtPnRocmVhZC5ldnJbcmVnXSwgcHRyKTsKKyNlbHNlCisJcHRyICs9IDMyOworI2VuZGlmCisjZWxzZQorCS8qIGZwIHJlZ2lzdGVycyBub3QgdXNlZCBieSBrZXJuZWwsIGxlYXZlIHplcm8gKi8KKwlwdHIgKz0gMzIgKiA4IC8gc2l6ZW9mKGludCk7CisjZW5kaWYKKworCVVOUEFDSzY0KHJlZ3MtPm5pcCwgcHRyKTsKKwlVTlBBQ0s2NChyZWdzLT5tc3IsIHB0cik7CisJVU5QQUNLMzIocmVncy0+Y2NyLCBwdHIpOworCVVOUEFDSzY0KHJlZ3MtPmxpbmssIHB0cik7CisJVU5QQUNLNjQocmVncy0+Y3RyLCBwdHIpOworCVVOUEFDSzMyKHJlZ3MtPnhlciwgcHRyKTsKKworCUJVR19PTigodW5zaWduZWQgbG9uZylwdHIgPgorCSAgICAgICAodW5zaWduZWQgbG9uZykoKCh2b2lkICopZ2RiX3JlZ3MpICsgTlVNUkVHQllURVMpKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBQb3dlclBDIHNwZWNpZmljIHByb2Nlc2luZyBmb3IgaW50ZXJmYWNpbmcgdG8gZ2RiLgorICovCitpbnQga2dkYl9hcmNoX2hhbmRsZV9leGNlcHRpb24oaW50IHZlY3RvciwgaW50IHNpZ25vLCBpbnQgZXJyX2NvZGUsCisJCQkgICAgICAgY2hhciAqcmVtY29tX2luX2J1ZmZlciwgY2hhciAqcmVtY29tX291dF9idWZmZXIsCisJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKmxpbnV4X3JlZ3MpCit7CisJY2hhciAqcHRyID0gJnJlbWNvbV9pbl9idWZmZXJbMV07CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJc3dpdGNoIChyZW1jb21faW5fYnVmZmVyWzBdKSB7CisJCS8qCisJCSAqIHNBQS4uQUEgICBTdGVwIG9uZSBpbnN0cnVjdGlvbiBmcm9tIEFBLi5BQQorCQkgKiBUaGlzIHdpbGwgcmV0dXJuIGFuIGVycm9yIHRvIGdkYiAuLgorCQkgKi8KKwljYXNlICdzJzoKKwljYXNlICdjJzoKKwkJLyogaGFuZGxlIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgKi8KKwkJaWYgKGtnZGJfaGV4MmxvbmcoJnB0ciwgJmFkZHIpKQorCQkJbGludXhfcmVncy0+bmlwID0gYWRkcjsKKworCQlhdG9taWNfc2V0KCZrZ2RiX2NwdV9kb2luZ19zaW5nbGVfc3RlcCwgLTEpOworCQkvKiBzZXQgdGhlIHRyYWNlIGJpdCBpZiB3ZSdyZSBzdGVwcGluZyAqLworCQlpZiAocmVtY29tX2luX2J1ZmZlclswXSA9PSAncycpIHsKKyNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorCQkJbXRzcHIoU1BSTl9EQkNSMCwKKwkJCSAgICAgIG1mc3ByKFNQUk5fREJDUjApIHwgREJDUjBfSUMgfCBEQkNSMF9JRE0pOworCQkJbGludXhfcmVncy0+bXNyIHw9IE1TUl9ERTsKKyNlbHNlCisJCQlsaW51eF9yZWdzLT5tc3IgfD0gTVNSX1NFOworI2VuZGlmCisJCQlrZ2RiX3NpbmdsZV9zdGVwID0gMTsKKwkJCWlmIChrZ2RiX2NvbnR0aHJlYWQpCisJCQkJYXRvbWljX3NldCgma2dkYl9jcHVfZG9pbmdfc2luZ2xlX3N0ZXAsCisJCQkJCSAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCQl9CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIEdsb2JhbCBkYXRhCisgKi8KK3N0cnVjdCBrZ2RiX2FyY2ggYXJjaF9rZ2RiX29wcyA9IHsKKwkuZ2RiX2JwdF9pbnN0ciA9IHsweDdkLCAweDgyLCAweDEwLCAweDA4fSwKK307CisKK3N0YXRpYyBpbnQga2dkYl9ub3RfaW1wbGVtZW50ZWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpvbGRfX2RlYnVnZ2VyX2lwaTsKK3N0YXRpYyB2b2lkICpvbGRfX2RlYnVnZ2VyOworc3RhdGljIHZvaWQgKm9sZF9fZGVidWdnZXJfYnB0Oworc3RhdGljIHZvaWQgKm9sZF9fZGVidWdnZXJfc3N0ZXA7CitzdGF0aWMgdm9pZCAqb2xkX19kZWJ1Z2dlcl9pYWJyX21hdGNoOworc3RhdGljIHZvaWQgKm9sZF9fZGVidWdnZXJfZGFicl9tYXRjaDsKK3N0YXRpYyB2b2lkICpvbGRfX2RlYnVnZ2VyX2ZhdWx0X2hhbmRsZXI7CisKK2ludCBrZ2RiX2FyY2hfaW5pdCh2b2lkKQoreworCW9sZF9fZGVidWdnZXJfaXBpID0gX19kZWJ1Z2dlcl9pcGk7CisJb2xkX19kZWJ1Z2dlciA9IF9fZGVidWdnZXI7CisJb2xkX19kZWJ1Z2dlcl9icHQgPSBfX2RlYnVnZ2VyX2JwdDsKKwlvbGRfX2RlYnVnZ2VyX3NzdGVwID0gX19kZWJ1Z2dlcl9zc3RlcDsKKwlvbGRfX2RlYnVnZ2VyX2lhYnJfbWF0Y2ggPSBfX2RlYnVnZ2VyX2lhYnJfbWF0Y2g7CisJb2xkX19kZWJ1Z2dlcl9kYWJyX21hdGNoID0gX19kZWJ1Z2dlcl9kYWJyX21hdGNoOworCW9sZF9fZGVidWdnZXJfZmF1bHRfaGFuZGxlciA9IF9fZGVidWdnZXJfZmF1bHRfaGFuZGxlcjsKKworCV9fZGVidWdnZXJfaXBpID0ga2dkYl9jYWxsX25taV9ob29rOworCV9fZGVidWdnZXIgPSBrZ2RiX2RlYnVnZ2VyOworCV9fZGVidWdnZXJfYnB0ID0ga2dkYl9oYW5kbGVfYnJlYWtwb2ludDsKKwlfX2RlYnVnZ2VyX3NzdGVwID0ga2dkYl9zaW5nbGVzdGVwOworCV9fZGVidWdnZXJfaWFicl9tYXRjaCA9IGtnZGJfaWFicl9tYXRjaDsKKwlfX2RlYnVnZ2VyX2RhYnJfbWF0Y2ggPSBrZ2RiX2RhYnJfbWF0Y2g7CisJX19kZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyID0ga2dkYl9ub3RfaW1wbGVtZW50ZWQ7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBrZ2RiX2FyY2hfZXhpdCh2b2lkKQoreworCV9fZGVidWdnZXJfaXBpID0gb2xkX19kZWJ1Z2dlcl9pcGk7CisJX19kZWJ1Z2dlciA9IG9sZF9fZGVidWdnZXI7CisJX19kZWJ1Z2dlcl9icHQgPSBvbGRfX2RlYnVnZ2VyX2JwdDsKKwlfX2RlYnVnZ2VyX3NzdGVwID0gb2xkX19kZWJ1Z2dlcl9zc3RlcDsKKwlfX2RlYnVnZ2VyX2lhYnJfbWF0Y2ggPSBvbGRfX2RlYnVnZ2VyX2lhYnJfbWF0Y2g7CisJX19kZWJ1Z2dlcl9kYWJyX21hdGNoID0gb2xkX19kZWJ1Z2dlcl9kYWJyX21hdGNoOworCV9fZGVidWdnZXJfZmF1bHRfaGFuZGxlciA9IG9sZF9fZGVidWdnZXJfZmF1bHRfaGFuZGxlcjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKaW5kZXggMDYzY2RkNC4uMjI0ZTlhMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTU5OCw2ICs1OTgsNyBAQAogCQkJcmVzLT5zdGFydCA9IHBjaV9hZGRyOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoJCS8qIFBDSSBNZW1vcnkgc3BhY2UgKi8KKwkJY2FzZSAzOgkJLyogUENJIDY0IGJpdHMgTWVtb3J5IHNwYWNlICovCiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgIiBNRU0gMHglMDE2bGx4Li4weCUwMTZsbHggLT4gMHglMDE2bGx4ICVzXG4iLAogCQkJICAgICAgIGNwdV9hZGRyLCBjcHVfYWRkciArIHNpemUgLSAxLCBwY2lfYWRkciwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9wYXJzZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMKaW5kZXggOTBlYjNhMy4uYmMxZmIyNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMKQEAgLTEyOCwzMSArMTI4LDYgQEAKIAkJKnNpemVjID0gMjsKIH0KIAotc3RhdGljIHU2NCBvZl9idXNfcGNpX21hcCh1MzIgKmFkZHIsIGNvbnN0IHUzMiAqcmFuZ2UsIGludCBuYSwgaW50IG5zLCBpbnQgcG5hKQotewotCXU2NCBjcCwgcywgZGE7Ci0KLQkvKiBDaGVjayBhZGRyZXNzIHR5cGUgbWF0Y2ggKi8KLQlpZiAoKGFkZHJbMF0gXiByYW5nZVswXSkgJiAweDAzMDAwMDAwKQotCQlyZXR1cm4gT0ZfQkFEX0FERFI7Ci0KLQkvKiBSZWFkIGFkZHJlc3MgdmFsdWVzLCBza2lwcGluZyBoaWdoIGNlbGwgKi8KLQljcCA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlICsgMSwgbmEgLSAxKTsKLQlzICA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlICsgbmEgKyBwbmEsIG5zKTsKLQlkYSA9IG9mX3JlYWRfbnVtYmVyKGFkZHIgKyAxLCBuYSAtIDEpOwotCi0JREJHKCJPRjogUENJIG1hcCwgY3A9IlBSdTY0Iiwgcz0iUFJ1NjQiLCBkYT0iUFJ1NjQiXG4iLCBjcCwgcywgZGEpOwotCi0JaWYgKGRhIDwgY3AgfHwgZGEgPj0gKGNwICsgcykpCi0JCXJldHVybiBPRl9CQURfQUREUjsKLQlyZXR1cm4gZGEgLSBjcDsKLX0KLQotc3RhdGljIGludCBvZl9idXNfcGNpX3RyYW5zbGF0ZSh1MzIgKmFkZHIsIHU2NCBvZmZzZXQsIGludCBuYSkKLXsKLQlyZXR1cm4gb2ZfYnVzX2RlZmF1bHRfdHJhbnNsYXRlKGFkZHIgKyAxLCBvZmZzZXQsIG5hIC0gMSk7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfYnVzX3BjaV9nZXRfZmxhZ3MoY29uc3QgdTMyICphZGRyKQogewogCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CkBAIC0xNzIsNiArMTQ3LDM1IEBACiAJcmV0dXJuIGZsYWdzOwogfQogCitzdGF0aWMgdTY0IG9mX2J1c19wY2lfbWFwKHUzMiAqYWRkciwgY29uc3QgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCit7CisJdTY0IGNwLCBzLCBkYTsKKwl1bnNpZ25lZCBpbnQgYWYsIHJmOworCisJYWYgPSBvZl9idXNfcGNpX2dldF9mbGFncyhhZGRyKTsKKwlyZiA9IG9mX2J1c19wY2lfZ2V0X2ZsYWdzKHJhbmdlKTsKKworCS8qIENoZWNrIGFkZHJlc3MgdHlwZSBtYXRjaCAqLworCWlmICgoYWYgXiByZikgJiAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0lPKSkKKwkJcmV0dXJuIE9GX0JBRF9BRERSOworCisJLyogUmVhZCBhZGRyZXNzIHZhbHVlcywgc2tpcHBpbmcgaGlnaCBjZWxsICovCisJY3AgPSBvZl9yZWFkX251bWJlcihyYW5nZSArIDEsIG5hIC0gMSk7CisJcyAgPSBvZl9yZWFkX251bWJlcihyYW5nZSArIG5hICsgcG5hLCBucyk7CisJZGEgPSBvZl9yZWFkX251bWJlcihhZGRyICsgMSwgbmEgLSAxKTsKKworCURCRygiT0Y6IFBDSSBtYXAsIGNwPSJQUnU2NCIsIHM9IlBSdTY0IiwgZGE9IlBSdTY0IlxuIiwgY3AsIHMsIGRhKTsKKworCWlmIChkYSA8IGNwIHx8IGRhID49IChjcCArIHMpKQorCQlyZXR1cm4gT0ZfQkFEX0FERFI7CisJcmV0dXJuIGRhIC0gY3A7Cit9CisKK3N0YXRpYyBpbnQgb2ZfYnVzX3BjaV90cmFuc2xhdGUodTMyICphZGRyLCB1NjQgb2Zmc2V0LCBpbnQgbmEpCit7CisJcmV0dXJuIG9mX2J1c19kZWZhdWx0X3RyYW5zbGF0ZShhZGRyICsgMSwgb2Zmc2V0LCBuYSAtIDEpOworfQorCiBjb25zdCB1MzIgKm9mX2dldF9wY2lfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGJhcl9ubywgdTY0ICpzaXplLAogCQkJdW5zaWduZWQgaW50ICpmbGFncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCA0ZWZlYmU4Li4wNjZlNjVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC00MywxMCArNDMsNiBAQAogCiAjZGVmaW5lIERCRyhmbXQuLi4pCiAKLSNpZiBkZWZpbmVkIENPTkZJR19LR0RCCi0jaW5jbHVkZSA8YXNtL2tnZGIuaD4KLSNlbmRpZgotCiBleHRlcm4gdm9pZCBib290eF9pbml0KHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcGh5cyk7CiAKIGludCBib290X2NwdWlkOwpAQCAtMzAyLDE4ICsyOTgsNiBAQAogCiAJeG1vbl9zZXR1cCgpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfS0dEQikKLQlpZiAocHBjX21kLmtnZGJfbWFwX3NjYykKLQkJcHBjX21kLmtnZGJfbWFwX3NjYygpOwotCXNldF9kZWJ1Z190cmFwcygpOwotCWlmIChzdHJzdHIoY21kX2xpbmUsICJnZGIiKSkgewotCQlpZiAocHBjX21kLnByb2dyZXNzKQotCQkJcHBjX21kLnByb2dyZXNzKCJzZXR1cF9hcmNoOiBrZ2RiIGJyZWFrcG9pbnQiLCAweDQwMDApOwotCQlwcmludGsoImtnZGIgYnJlYWtwb2ludCBhY3RpdmF0ZWRcbiIpOwotCQlicmVha3BvaW50KCk7Ci0JfQotI2VuZGlmCi0KIAkvKgogCSAqIFNldCBjYWNoZSBsaW5lIHNpemUgYmFzZWQgb24gdHlwZSBvZiBjcHUgYXMgYSBkZWZhdWx0LgogCSAqIFN5c3RlbXMgd2l0aCBPRiBjYW4gbG9vayBpbiB0aGUgcHJvcGVydGllcyBvbiB0aGUgY3B1IG5vZGUocykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggMDcxYmVlMy4uZjI1ODk2NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTU5LDYgKzU5LDYgQEAKIAogdm9pZCBzYXZlX3N0YWNrX3RyYWNlX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKIHsKLQlzYXZlX2NvbnRleHRfc3RhY2sodHJhY2UsIHRzay0+dGhyZWFkLnJlZ3MtPmdwclsxXSwgdHNrLCAwKTsKKwlzYXZlX2NvbnRleHRfc3RhY2sodHJhY2UsIHRzay0+dGhyZWFkLmtzcCwgdHNrLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNhdmVfc3RhY2tfdHJhY2VfdHNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwppbmRleCBjODEyN2Y4Li5hYmEwYmE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCkBAIC0yOCw3ICsyOCw5IEBACiAvKiBUaW1lIGluIG1pY3Jvc2Vjb25kcyB3ZSBkZWxheSBiZWZvcmUgc2xlZXBpbmcgaW4gdGhlIGlkbGUgbG9vcCAqLwogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc210X3Nub296ZV9kZWxheSkgPSB7IDEwMCB9OwogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9zbXRfc25vb3plX2RlbGF5KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3NtdF9zbm9vemVfZGVsYXkoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsCiAJCQkJICAgICAgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjcHUgKmNwdSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcHUsIHN5c2Rldik7CkBAIC00NCw3ICs0Niw5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3NtdF9zbm9vemVfZGVsYXkoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19zbXRfc25vb3plX2RlbGF5KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY3B1ICpjcHUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgY3B1LCBzeXNkZXYpOwogCkBAIC0xNTIsMTQgKzE1NiwxNyBAQAogCW10c3ByKEFERFJFU1MsIHZhbCk7IFwKIAlyZXR1cm4gMDsgXAogfSBcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjTkFNRShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNOQU1FKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIFwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBcCisJCQljaGFyICpidWYpIFwKIHsgXAogCXN0cnVjdCBjcHUgKmNwdSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcHUsIHN5c2Rldik7IFwKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHJ1bl9vbl9jcHUoY3B1LT5zeXNkZXYuaWQsIHJlYWRfIyNOQU1FLCAwKTsgXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgdmFsKTsgXAogfSBcCiBzdGF0aWMgc3NpemVfdCBfX3VzZWQgXAotCXN0b3JlXyMjTkFNRShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAorCXN0b3JlXyMjTkFNRShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgXAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKIHsgXAogCXN0cnVjdCBjcHUgKmNwdSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcHUsIHN5c2Rldik7IFwKIAl1bnNpZ25lZCBsb25nIHZhbDsgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDg3YTcyYzYuLmE5MTQ0MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTksNiArOSwyNSBAQAogCiBFTlRSWShfc3RleHQpCiAKK1BIRFJTIHsKKwlrZXJuZWwgUFRfTE9BRCBGTEFHUyg3KTsgLyogUldYICovCisJbm90ZXMgUFRfTk9URSBGTEFHUygwKTsKKwlkdW1teSBQVF9OT1RFIEZMQUdTKDApOworCisJLyogYmludXRpbHMgPCAyLjE4IGhhcyBhIGJ1ZyB0aGF0IG1ha2VzIGl0IG1pc2JlaGF2ZSB3aGVuIHRha2luZyBhbgorCSAgIEVMRiBmaWxlIHdpdGggYWxsIHNlZ21lbnRzIGF0IGxvYWQgYWRkcmVzcyAwIGFzIGlucHV0LiAgVGhpcworCSAgIGhhcHBlbnMgd2hlbiBydW5uaW5nICJzdHJpcCIgb24gdm1saW51eCwgYmVjYXVzZSBvZiB0aGUgQVQoKSBtYWdpYworCSAgIGluIHRoaXMgbGlua2VyIHNjcmlwdC4gIFBlb3BsZSB1c2luZyBHQ0MgPj0gNC4yIHdvbid0IHJ1biBpbnRvCisJICAgdGhpcyBwcm9ibGVtLCBiZWNhdXNlIHRoZSAiYnVpbGQtaWQiIHN1cHBvcnQgd2lsbCBwdXQgc29tZSBkYXRhCisJICAgaW50byB0aGUgIm5vdGVzIiBzZWdtZW50IChhdCBhIG5vbi16ZXJvIGxvYWQgYWRkcmVzcykuCisKKwkgICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBmb3JjZSBzb21lIGRhdGEgaW50byBib3RoIHRoZSAiZHVtbXkiCisJICAgc2VnbWVudCBhbmQgdGhlIGtlcm5lbCBzZWdtZW50LCBzbyB0aGUgZHVtbXkgc2VnbWVudCB3aWxsIGdldCBhCisJICAgbm9uLXplcm8gbG9hZCBhZGRyZXNzLiAgSXQncyBub3QgZW5vdWdoIHRvIGFsd2F5cyBjcmVhdGUgdGhlCisJICAgIm5vdGVzIiBzZWdtZW50LCBzaW5jZSBpZiBub3RoaW5nIGdldHMgYXNzaWduZWQgdG8gaXQsIGl0cyBsb2FkCisJICAgYWRkcmVzcyB3aWxsIGJlIHplcm8uICAqLworfQorCiAjaWZkZWYgQ09ORklHX1BQQzY0CiBPVVRQVVRfQVJDSChwb3dlcnBjOmNvbW1vbjY0KQogamlmZmllcyA9IGppZmZpZXNfNjQ7CkBAIC01MCw3ICs2OSw3IEBACiAJCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCQlfZXRleHQgPSAuOwogCQlQUk9WSURFMzIgKGV0ZXh0ID0gLik7Ci0JfQorCX0gOmtlcm5lbAogCiAJLyogUmVhZC1vbmx5IGRhdGEgKi8KIAlST0RBVEEKQEAgLTYyLDcgKzgxLDEzIEBACiAJCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKIAl9CiAKLQlOT1RFUworCU5PVEVTIDprZXJuZWwgOm5vdGVzCisKKwkvKiBUaGUgZHVtbXkgc2VnbWVudCBjb250ZW50cyBmb3IgdGhlIGJ1ZyB3b3JrYXJvdW5kIG1lbnRpb25lZCBhYm92ZQorCSAgIG5lYXIgUEhEUlMuICAqLworCS5kdW1teSA6IHsKKwkJTE9ORygweGYxNzcpCisJfSA6a2VybmVsIDpkdW1teQogCiAvKgogICogSW5pdCBzZWN0aW9ucyBkaXNjYXJkZWQgYXQgcnVudGltZQpAQCAtNzQsNyArOTksNyBAQAogCQlfc2luaXR0ZXh0ID0gLjsKIAkJSU5JVF9URVhUCiAJCV9laW5pdHRleHQgPSAuOwotCX0KKwl9IDprZXJuZWwKIAogCS8qIC5leGl0LnRleHQgaXMgZGlzY2FyZGVkIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsCiAJICogdG8gZGVhbCB3aXRoIHJlZmVyZW5jZXMgZnJvbSBfX2J1Z190YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKaW5kZXggZDBkMzU4ZC4uMDRlMzQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiBFWFRSQV9DRkxBR1MgKz0gLUl2aXJ0L2t2bSAtSWFyY2gvcG93ZXJwYy9rdm0KIAotY29tbW9uLW9ianMgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8pCitjb21tb24tb2JqcyA9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX21haW4ubyBjb2FsZXNjZWRfbW1pby5vKQogCiBrdm0tb2JqcyA6PSAkKGNvbW1vbi1vYmpzKSBwb3dlcnBjLm8gZW11bGF0ZS5vIGJvb2tlX2d1ZXN0Lm8KIG9iai0kKENPTkZJR19LVk0pICs9IGt2bS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCmluZGV4IDc3N2UwZjMuLjUzODI2YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC0xNDUsNiArMTQ1LDkgQEAKIAljYXNlIEtWTV9DQVBfVVNFUl9NRU1PUlk6CiAJCXIgPSAxOwogCQlicmVhazsKKwljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CisJCXIgPSBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQ7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTE2Nyw2ICsxNzAsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3coc3RydWN0IGt2bSAqa3ZtKQoreworfQorCiBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKQEAgLTI0MCwxMCArMjQ3LDYgQEAKIHsKIH0KIAotdm9pZCBkZWNhY2hlX3ZjcHVzX29uX2NwdShpbnQgY3B1KQotewotfQotCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKaW5kZXggNGU0MzcwMi4uOGM1YTAzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYwpAQCAtOTksNyArOTksNyBAQAogCiAJZm9yICg7IGZjdXIgPCBmZW5kOyBmY3VyKyspIHsKIAkJaWYgKHBhdGNoX2ZlYXR1cmVfc2VjdGlvbih2YWx1ZSwgZmN1cikpIHsKLQkJCV9fV0FSTigpOworCQkJV0FSTl9PTigxKTsKIAkJCXByaW50aygiVW5hYmxlIHRvIHBhdGNoIGZlYXR1cmUgc2VjdGlvbiBhdCAlcCAtICVwIiBcCiAJCQkJIiB3aXRoICVwIC0gJXBcbiIsCiAJCQkJY2FsY19hZGRyKGZjdXIsIGZjdXItPnN0YXJ0X29mZiksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL3N0cmluZy5TIGIvYXJjaC9wb3dlcnBjL2xpYi9zdHJpbmcuUwppbmRleCA0OWViMWYxLi42NGUyZTQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL3N0cmluZy5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvc3RyaW5nLlMKQEAgLTEzLDEzICsxMyw3IEBACiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KIAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JLmFsaWduCTMKLSNkZWZpbmUgRVhUQkwJLmxsb25nCi0jZWxzZQotCS5hbGlnbgkyCi0jZGVmaW5lIEVYVEJMCS5sb25nCi0jZW5kaWYKKwlQUENfTE9OR19BTElHTgogCS50ZXh0CiAJCiBfR0xPQkFMKHN0cmNweSkKQEAgLTE2MCw5ICsxNTQsOSBAQAogCWJscgogCiAJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQlFWFRCTAkxMWIsOTBiCi0JRVhUQkwJMWIsOTFiCi0JRVhUQkwJOGIsOTJiCisJUFBDX0xPTkcJMTFiLDkwYgorCVBQQ19MT05HCTFiLDkxYgorCVBQQ19MT05HCThiLDkyYgogCS50ZXh0CiAKIF9HTE9CQUwoX19zdHJuY3B5X2Zyb21fdXNlcikKQEAgLTE4Myw3ICsxNzcsNyBAQAogCWJscgogCiAJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQlFWFRCTAkxYiw5OWIKKwlQUENfTE9ORwkxYiw5OWIKIAkudGV4dAogCiAvKiByMyA9IHN0ciwgcjQgPSBsZW4gKD4gMCksIHI1ID0gdG9wIChoaWdoZXN0IGFkZHIpICovCkBAIC0yMDgsNCArMjAyLDQgQEAKIAlibHIKIAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JRVhUQkwJMWIsOTliCisJUFBDX0xPTkcJMWIsOTliCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9LY29uZmlnCmluZGV4IGFjZDJmYzguLmQ2NjRiMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9LY29uZmlnCkBAIC0zLDYgKzMsNyBAQAogCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDMzIKIAlzZWxlY3QgRlNMX1NPQwogCXNlbGVjdCBQUENfQ0xPQ0sKKwlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKIAogY29uZmlnIFBQQ19NUEM1MjAwX1NJTVBMRQogCWJvb2wgIkdlbmVyaWMgc3VwcG9ydCBmb3Igc2ltcGxlIE1QQzUyMDAgYmFzZWQgYm9hcmRzIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZwppbmRleCAxYzgwMzRiLi43NWViMWVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZwpAQCAtMzAsNiArMzAsNyBAQAogCXNlbGVjdCA4MjcyCiAJc2VsZWN0IDgyNjAKIAlzZWxlY3QgRlNMX1NPQworCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgTURJT19CSVRCQU5HCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBFbWJlZGRlZCBQbGFuZXQgRVA4MjQ4RSBib2FyZC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jCmluZGV4IDM3M2U5OTMuLmQ1NzcwZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYwpAQCAtNTksNyArNTksNiBAQAogCW9mX25vZGVfcHV0KG5wKTsKIH0KIAotI2lmZGVmIENPTkZJR19GU19FTkVUX01ESU9fRkNDCiBzdGF0aWMgdm9pZCBlcDgyNDhlX3NldF9tZGMoc3RydWN0IG1kaW9iYl9jdHJsICpjdHJsLCBpbnQgbGV2ZWwpCiB7CiAJaWYgKGxldmVsKQpAQCAtMTY1LDcgKzE2NCw2IEBACiAJLnByb2JlID0gZXA4MjQ4ZV9tZGlvX3Byb2JlLAogCS5yZW1vdmUgPSBlcDgyNDhlX21kaW9fcmVtb3ZlLAogfTsKLSNlbmRpZgogCiBzdHJ1Y3QgY3BtX3BpbiB7CiAJaW50IHBvcnQsIHBpbiwgZmxhZ3M7CkBAIC0yOTgsOSArMjk2LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQogewogCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBvZl9idXNfaWRzLCBOVUxMKTsKLSNpZmRlZiBDT05GSUdfRlNfRU5FVF9NRElPX0ZDQwogCW9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZXA4MjQ4ZV9tZGlvX2RyaXZlcik7Ci0jZW5kaWYKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZwppbmRleCAyN2Q5YmY4Li42MTU5YzVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZwpAQCAtMiw3ICsyLDggQEAKIAlib29sICI4M3h4LWJhc2VkIGJvYXJkcyIKIAlkZXBlbmRzIG9uIDZ4eCAmJiBQUENfTVVMVElQTEFURk9STQogCXNlbGVjdCBQUENfVURCR18xNjU1MAotCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCisJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFCisJc2VsZWN0IEZTTF9QQ0kgaWYgUENJCiAJc2VsZWN0IEZTTF9TT0MKIAlzZWxlY3QgSVBJQwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvTWFrZWZpbGUKaW5kZXggZjMzMWZkNy4uYmE1MDI4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBQb3dlclBDIDgzeHggbGludXgga2VybmVsLgogIwogb2JqLXkJCQkJOj0gbWlzYy5vIHVzYi5vCi1vYmotJChDT05GSUdfUENJKQkJKz0gcGNpLm8KK29iai0kKENPTkZJR19TVVNQRU5EKQkJKz0gc3VzcGVuZC5vIHN1c3BlbmQtYXNtLm8KIG9iai0kKENPTkZJR19NUEM4MzF4X1JEQikJKz0gbXBjODMxeF9yZGIubwogb2JqLSQoQ09ORklHX01QQzgzMnhfUkRCKQkrPSBtcGM4MzJ4X3JkYi5vCiBvYmotJChDT05GSUdfTVBDODM0eF9NRFMpCSs9IG1wYzgzNHhfbWRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzF4X3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMXhfcmRiLmMKaW5kZXggYzRkYjUxNy4uYTQyOGY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMXhfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMXhfcmRiLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pcGljLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgogCiAjaW5jbHVkZSAibXBjODN4eC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jCmluZGV4IDZkYmM2ZWEuLmRkNGJlNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KICNpbmNsdWRlIDxhc20vcWUuaD4KICNpbmNsdWRlIDxhc20vcWVfaWMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfcmRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9yZGIuYwppbmRleCBlN2Y3MDZiLi5mMDQ5ZDY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9yZGIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9yZGIuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9xZS5oPgogI2luY2x1ZGUgPGFzbS9xZV9pYy5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KIAogI2luY2x1ZGUgIm1wYzgzeHguaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYwppbmRleCA1MGU4ZjYzLi43MzAxZDc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CiAKICNpbmNsdWRlICJtcGM4M3h4LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKaW5kZXggMmI4YTBhMy4uMzBkNTA5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgogCiAjaW5jbHVkZSAibXBjODN4eC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzZ4X21kcy5jCmluZGV4IGMyZTVkZTYuLjc1YjgwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzZ4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzZ4X21kcy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KICNpbmNsdWRlIDxhc20vcWUuaD4KICNpbmNsdWRlIDxhc20vcWVfaWMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNnhfcmRrLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2eF9yZGsuYwppbmRleCBjMTBkZWM0Li5hNTI3M2JiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2eF9yZGsuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2eF9yZGsuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9xZS5oPgogI2luY2x1ZGUgPGFzbS9xZV9pYy5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KIAogI2luY2x1ZGUgIm1wYzgzeHguaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYwppbmRleCA2NGQxN2IwLi5iZTYyZGUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9pcGljLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CiAKICNpbmNsdWRlICJtcGM4M3h4LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKaW5kZXggYzAwMzU2Yi4uZGEwMzBhZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pcGljLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgogCiAjaW5jbHVkZSAibXBjODN4eC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODN4eC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzeHguaAppbmRleCA4OGEzYjVjLi4yYTdjYmFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODN4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4LmgKQEAgLTI2LDYgKzI2LDggQEAKICNkZWZpbmUgTVBDODM0WF9TSUNSTF9VU0IxICAgICAgICAgMHgyMDAwMDAwMAogI2RlZmluZSBNUEM4MzFYX1NJQ1JMX1VTQl9NQVNLICAgICAweDAwMDAwYzAwCiAjZGVmaW5lIE1QQzgzMVhfU0lDUkxfVVNCX1VMUEkgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgTVBDODMxNV9TSUNSTF9VU0JfTUFTSyAgICAgMHgwMDAwMDBmYworI2RlZmluZSBNUEM4MzE1X1NJQ1JMX1VTQl9VTFBJICAgICAweDAwMDAwMDU0CiAjZGVmaW5lIE1QQzgzN1hfU0lDUkxfVVNCX01BU0sgICAgIDB4ZjAwMDAwMDAKICNkZWZpbmUgTVBDODM3WF9TSUNSTF9VU0JfVUxQSSAgICAgMHg1MDAwMDAwMAogCkBAIC0zNCw2ICszNiw4IEBACiAjZGVmaW5lIE1QQzgzNFhfU0lDUkhfVVNCX1VUTUkgICAgIDB4MDAwMjAwMDAKICNkZWZpbmUgTVBDODMxWF9TSUNSSF9VU0JfTUFTSyAgICAgMHgwMDAwMDBlMAogI2RlZmluZSBNUEM4MzFYX1NJQ1JIX1VTQl9VTFBJICAgICAweDAwMDAwMGEwCisjZGVmaW5lIE1QQzgzMTVfU0lDUkhfVVNCX01BU0sgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgTVBDODMxNV9TSUNSSF9VU0JfVUxQSSAgICAgMHgwMDAwMDAwMAogCiAvKiBVU0IgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBGU0xfVVNCMl9DT05UUk9MX09GRlMgICAgICAweDUwMApAQCAtNTUsNyArNTksNiBAQAogICogbXBjODN4eF8qIGZpbGVzLiBNb3N0bHkgZm9yIHVzZSBieSBtcGM4M3h4X3NldHVwCiAgKi8KIAotZXh0ZXJuIGludCBtcGM4M3h4X2FkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpOwogZXh0ZXJuIHZvaWQgbXBjODN4eF9yZXN0YXJ0KGNoYXIgKmNtZCk7CiBleHRlcm4gbG9uZyBtcGM4M3h4X3RpbWVfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgbXBjODM0eF91c2JfY2ZnKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3BjaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGYxMDgwLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBGU0wgU29DIHNldHVwIGNvZGUKLSAqCi0gKiBNYWludGFpbmVkIGJ5IEt1bWFyIEdhbGEgKHNlZSBNQUlOVEFJTkVSUyBmb3IgY29udGFjdCBpbmZvcm1hdGlvbikKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KLQotI3VuZGVmIERFQlVHCi0KLSNpZmRlZiBERUJVRwotI2RlZmluZSBEQkcoeC4uLikgcHJpbnRrKHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikKLSNlbmRpZgotCi1pbnQgX19pbml0IG1wYzgzeHhfYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKLXsKLQlpbnQgbGVuOwotCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKLQlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsKLQljb25zdCBpbnQgKmJ1c19yYW5nZTsKLQlpbnQgcHJpbWFyeSA9IDEsIGhhc19hZGRyZXNzID0gMDsKLQlwaHlzX2FkZHJfdCBpbW1yID0gZ2V0X2ltbXJiYXNlKCk7Ci0KLQlEQkcoIkFkZGluZyBQQ0kgaG9zdCBicmlkZ2UgJXNcbiIsIGRldi0+ZnVsbF9uYW1lKTsKLQotCS8qIEZldGNoIGhvc3QgYnJpZGdlIHJlZ2lzdGVycyBhZGRyZXNzICovCi0JaGFzX2FkZHJlc3MgPSAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYsIDAsICZyc3JjKSA9PSAwKTsKLQotCS8qIEdldCBidXMgcmFuZ2UgaWYgYW55ICovCi0JYnVzX3JhbmdlID0gb2ZfZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOwotCWlmIChidXNfcmFuZ2UgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IGJ1cy1yYW5nZSBmb3IgJXMsIGFzc3VtZSIKLQkJICAgICAgICIgYnVzIDBcbiIsIGRldi0+ZnVsbF9uYW1lKTsKLQl9Ci0KLQlwcGNfcGNpX2ZsYWdzIHw9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX0JVUzsKLQlob3NlID0gcGNpYmlvc19hbGxvY19jb250cm9sbGVyKGRldik7Ci0JaWYgKCFob3NlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWhvc2UtPmZpcnN0X2J1c25vID0gYnVzX3JhbmdlID8gYnVzX3JhbmdlWzBdIDogMDsKLQlob3NlLT5sYXN0X2J1c25vID0gYnVzX3JhbmdlID8gYnVzX3JhbmdlWzFdIDogMHhmZjsKLQotCS8qIE1QQzgzeHggc3VwcG9ydHMgdXAgdG8gdHdvIGhvc3QgY29udHJvbGxlcnMgb25lIGF0IDB4ODUwMCBmcm9tIGltbXJiYXIKLQkgKiB0aGUgb3RoZXIgYXQgMHg4NjAwLCB3ZSBjb25zaWRlciB0aGUgMHg4NTAwIHRoZSBwcmltYXJ5IGNvbnRyb2xsZXIKLQkgKi8KLQkvKiBQQ0kgMSAqLwotCWlmICgocnNyYy5zdGFydCAmIDB4ZmZmZmYpID09IDB4ODUwMCkgewotCQlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgaW1tciArIDB4ODMwMCwgaW1tciArIDB4ODMwNCwgMCk7Ci0JfQotCS8qIFBDSSAyICovCi0JaWYgKChyc3JjLnN0YXJ0ICYgMHhmZmZmZikgPT0gMHg4NjAwKSB7Ci0JCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCBpbW1yICsgMHg4MzgwLCBpbW1yICsgMHg4Mzg0LCAwKTsKLQkJcHJpbWFyeSA9IDA7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgTVBDODN4eCBQQ0kgaG9zdCBicmlkZ2UgYXQgMHglMDE2bGx4LiAiCi0JICAgICAgICJGaXJtd2FyZSBidXMgbnVtYmVyOiAlZC0+JWRcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcnNyYy5zdGFydCwgaG9zZS0+Zmlyc3RfYnVzbm8sCi0JICAgICAgIGhvc2UtPmxhc3RfYnVzbm8pOwotCi0JREJHKCIgLT5Ib3NlIGF0IDB4JXAsIGNmZ19hZGRyPTB4JXAsY2ZnX2RhdGE9MHglcFxuIiwKLQkgICAgaG9zZSwgaG9zZS0+Y2ZnX2FkZHIsIGhvc2UtPmNmZ19kYXRhKTsKLQotCS8qIEludGVycHJldCB0aGUgInJhbmdlcyIgcHJvcGVydHkgKi8KLQkvKiBUaGlzIGFsc28gbWFwcyB0aGUgSS9PIHJlZ2lvbiBhbmQgc2V0cyBpc2FfaW8vbWVtX2Jhc2UgKi8KLQlwY2lfcHJvY2Vzc19icmlkZ2VfT0ZfcmFuZ2VzKGhvc2UsIGRldiwgcHJpbWFyeSk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zYmM4MzR4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc2JjODM0eC5jCmluZGV4IGNmMzgyNDc0Li5mYzIxZjVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc2JjODM0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zYmM4MzR4LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgogCiAjaW5jbHVkZSAibXBjODN4eC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC1hc20uUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLWFzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MzA1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC1hc20uUwpAQCAtMCwwICsxLDUzMyBAQAorLyoKKyAqIEVudGVyIGFuZCBsZWF2ZSBkZWVwIHNsZWVwIHN0YXRlIG9uIE1QQzgzeHgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQXV0aG9yOiBTY290dCBXb29kIDxzY290dHdvb2RAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorCisjZGVmaW5lIFNTX01FTVNBVkUJMHgwMCAvKiBGaXJzdCA4IGJ5dGVzIG9mIFJBTSAqLworI2RlZmluZSBTU19ISUQJCTB4MDggLyogMyBISURzICovCisjZGVmaW5lIFNTX0lBQlIJCTB4MTQgLyogMiBJQUJScyAqLworI2RlZmluZSBTU19JQkNSCQkweDFjCisjZGVmaW5lIFNTX0RBQlIJCTB4MjAgLyogMiBEQUJScyAqLworI2RlZmluZSBTU19EQkNSCQkweDI4CisjZGVmaW5lIFNTX1NQCQkweDJjCisjZGVmaW5lIFNTX1NSCQkweDMwIC8qIDE2IHNlZ21lbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNTX1IyCQkweDcwCisjZGVmaW5lIFNTX01TUgkJMHg3NAorI2RlZmluZSBTU19TRFIxCQkweDc4CisjZGVmaW5lIFNTX0xSCQkweDdjCisjZGVmaW5lIFNTX1NQUkcJCTB4ODAgLyogNCBTUFJHcyAqLworI2RlZmluZSBTU19EQkFUCQkweDkwIC8qIDggREJBVHMgKi8KKyNkZWZpbmUgU1NfSUJBVAkJMHhkMCAvKiA4IElCQVRzICovCisjZGVmaW5lIFNTX1RCCQkweDExMAorI2RlZmluZSBTU19DUgkJMHgxMTgKKyNkZWZpbmUgU1NfR1BSRUcJMHgxMWMgLyogcjEyLXIzMSAqLworI2RlZmluZSBTVEFURV9TQVZFX1NJWkUgMHgxNmMKKworCS5zZWN0aW9uIC5kYXRhCisJLmFsaWduCTUKKworbXBjODN4eF9zbGVlcF9zYXZlX2FyZWE6CisJLnNwYWNlCVNUQVRFX1NBVkVfU0laRQoraW1tcmJhc2U6CisJLmxvbmcJMAorCisJLnNlY3Rpb24gLnRleHQKKwkuYWxpZ24JNQorCisJLyogcjMgPSBwaHlzaWNhbCBhZGRyZXNzIG9mIElNTVIgKi8KK19HTE9CQUwobXBjODN4eF9lbnRlcl9kZWVwX3NsZWVwKQorCWxpcwlyNCwgaW1tcmJhc2VAaGEKKwlzdHcJcjMsIGltbXJiYXNlQGwocjQpCisKKwkvKiBUaGUgZmlyc3QgMiB3b3JkcyBvZiBtZW1vcnkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUKKwkgKiBib290bG9hZGVyLCB0byB0ZWxsIGl0IGhvdyB0byByZXN1bWUuCisJICoKKwkgKiBUaGUgZmlyc3Qgd29yZCBpcyB0aGUgbWFnaWMgbnVtYmVyIDB4ZjUxNTNhZTUsIGFuZCB0aGUgc2Vjb25kCisJICogaXMgdGhlIHBvaW50ZXIgdG8gbXBjODN4eF9kZWVwX3Jlc3VtZS4KKwkgKgorCSAqIFRoZSBvcmlnaW5hbCBjb250ZW50IG9mIHRoZXNlIHR3byB3b3JkcyBpcyBzYXZlZCBpbiBTU19NRU1TQVZFLgorCSAqLworCisJbGlzCXIzLCBtcGM4M3h4X3NsZWVwX3NhdmVfYXJlYUBoCisJb3JpCXIzLCByMywgbXBjODN4eF9zbGVlcF9zYXZlX2FyZWFAbAorCisJbGlzCXI0LCBLRVJORUxCQVNFQGgKKwlsd3oJcjUsIDAocjQpCisJbHd6CXI2LCA0KHI0KQorCisJc3R3CXI1LCBTU19NRU1TQVZFKzAocjMpCisJc3R3CXI2LCBTU19NRU1TQVZFKzQocjMpCisKKwltZnNwcglyNSwgU1BSTl9ISUQwCisJbWZzcHIJcjYsIFNQUk5fSElEMQorCW1mc3ByCXI3LCBTUFJOX0hJRDIKKworCXN0dwlyNSwgU1NfSElEKzAocjMpCisJc3R3CXI2LCBTU19ISUQrNChyMykKKwlzdHcJcjcsIFNTX0hJRCs4KHIzKQorCisJbWZzcHIJcjQsIFNQUk5fSUFCUgorCW1mc3ByCXI1LCBTUFJOX0lBQlIyCisJbWZzcHIJcjYsIFNQUk5fSUJDUgorCW1mc3ByCXI3LCBTUFJOX0RBQlIKKwltZnNwcglyOCwgU1BSTl9EQUJSMgorCW1mc3ByCXI5LCBTUFJOX0RCQ1IKKworCXN0dwlyNCwgU1NfSUFCUiswKHIzKQorCXN0dwlyNSwgU1NfSUFCUis0KHIzKQorCXN0dwlyNiwgU1NfSUJDUihyMykKKwlzdHcJcjcsIFNTX0RBQlIrMChyMykKKwlzdHcJcjgsIFNTX0RBQlIrNChyMykKKwlzdHcJcjksIFNTX0RCQ1IocjMpCisKKwltZnNwcglyNCwgU1BSTl9TUFJHMAorCW1mc3ByCXI1LCBTUFJOX1NQUkcxCisJbWZzcHIJcjYsIFNQUk5fU1BSRzIKKwltZnNwcglyNywgU1BSTl9TUFJHMworCW1mc2RyMQlyOAorCisJc3R3CXI0LCBTU19TUFJHKzAocjMpCisJc3R3CXI1LCBTU19TUFJHKzQocjMpCisJc3R3CXI2LCBTU19TUFJHKzgocjMpCisJc3R3CXI3LCBTU19TUFJHKzEyKHIzKQorCXN0dwlyOCwgU1NfU0RSMShyMykKKworCW1mc3ByCXI0LCBTUFJOX0RCQVQwVQorCW1mc3ByCXI1LCBTUFJOX0RCQVQwTAorCW1mc3ByCXI2LCBTUFJOX0RCQVQxVQorCW1mc3ByCXI3LCBTUFJOX0RCQVQxTAorCisJc3R3CXI0LCBTU19EQkFUKzB4MDAocjMpCisJc3R3CXI1LCBTU19EQkFUKzB4MDQocjMpCisJc3R3CXI2LCBTU19EQkFUKzB4MDgocjMpCisJc3R3CXI3LCBTU19EQkFUKzB4MGMocjMpCisKKwltZnNwcglyNCwgU1BSTl9EQkFUMlUKKwltZnNwcglyNSwgU1BSTl9EQkFUMkwKKwltZnNwcglyNiwgU1BSTl9EQkFUM1UKKwltZnNwcglyNywgU1BSTl9EQkFUM0wKKworCXN0dwlyNCwgU1NfREJBVCsweDEwKHIzKQorCXN0dwlyNSwgU1NfREJBVCsweDE0KHIzKQorCXN0dwlyNiwgU1NfREJBVCsweDE4KHIzKQorCXN0dwlyNywgU1NfREJBVCsweDFjKHIzKQorCisJbWZzcHIJcjQsIFNQUk5fREJBVDRVCisJbWZzcHIJcjUsIFNQUk5fREJBVDRMCisJbWZzcHIJcjYsIFNQUk5fREJBVDVVCisJbWZzcHIJcjcsIFNQUk5fREJBVDVMCisKKwlzdHcJcjQsIFNTX0RCQVQrMHgyMChyMykKKwlzdHcJcjUsIFNTX0RCQVQrMHgyNChyMykKKwlzdHcJcjYsIFNTX0RCQVQrMHgyOChyMykKKwlzdHcJcjcsIFNTX0RCQVQrMHgyYyhyMykKKworCW1mc3ByCXI0LCBTUFJOX0RCQVQ2VQorCW1mc3ByCXI1LCBTUFJOX0RCQVQ2TAorCW1mc3ByCXI2LCBTUFJOX0RCQVQ3VQorCW1mc3ByCXI3LCBTUFJOX0RCQVQ3TAorCisJc3R3CXI0LCBTU19EQkFUKzB4MzAocjMpCisJc3R3CXI1LCBTU19EQkFUKzB4MzQocjMpCisJc3R3CXI2LCBTU19EQkFUKzB4MzgocjMpCisJc3R3CXI3LCBTU19EQkFUKzB4M2MocjMpCisKKwltZnNwcglyNCwgU1BSTl9JQkFUMFUKKwltZnNwcglyNSwgU1BSTl9JQkFUMEwKKwltZnNwcglyNiwgU1BSTl9JQkFUMVUKKwltZnNwcglyNywgU1BSTl9JQkFUMUwKKworCXN0dwlyNCwgU1NfSUJBVCsweDAwKHIzKQorCXN0dwlyNSwgU1NfSUJBVCsweDA0KHIzKQorCXN0dwlyNiwgU1NfSUJBVCsweDA4KHIzKQorCXN0dwlyNywgU1NfSUJBVCsweDBjKHIzKQorCisJbWZzcHIJcjQsIFNQUk5fSUJBVDJVCisJbWZzcHIJcjUsIFNQUk5fSUJBVDJMCisJbWZzcHIJcjYsIFNQUk5fSUJBVDNVCisJbWZzcHIJcjcsIFNQUk5fSUJBVDNMCisKKwlzdHcJcjQsIFNTX0lCQVQrMHgxMChyMykKKwlzdHcJcjUsIFNTX0lCQVQrMHgxNChyMykKKwlzdHcJcjYsIFNTX0lCQVQrMHgxOChyMykKKwlzdHcJcjcsIFNTX0lCQVQrMHgxYyhyMykKKworCW1mc3ByCXI0LCBTUFJOX0lCQVQ0VQorCW1mc3ByCXI1LCBTUFJOX0lCQVQ0TAorCW1mc3ByCXI2LCBTUFJOX0lCQVQ1VQorCW1mc3ByCXI3LCBTUFJOX0lCQVQ1TAorCisJc3R3CXI0LCBTU19JQkFUKzB4MjAocjMpCisJc3R3CXI1LCBTU19JQkFUKzB4MjQocjMpCisJc3R3CXI2LCBTU19JQkFUKzB4MjgocjMpCisJc3R3CXI3LCBTU19JQkFUKzB4MmMocjMpCisKKwltZnNwcglyNCwgU1BSTl9JQkFUNlUKKwltZnNwcglyNSwgU1BSTl9JQkFUNkwKKwltZnNwcglyNiwgU1BSTl9JQkFUN1UKKwltZnNwcglyNywgU1BSTl9JQkFUN0wKKworCXN0dwlyNCwgU1NfSUJBVCsweDMwKHIzKQorCXN0dwlyNSwgU1NfSUJBVCsweDM0KHIzKQorCXN0dwlyNiwgU1NfSUJBVCsweDM4KHIzKQorCXN0dwlyNywgU1NfSUJBVCsweDNjKHIzKQorCisJbWZtc3IJcjQKKwltZmxyCXI1CisJbWZjcglyNgorCisJc3R3CXI0LCBTU19NU1IocjMpCisJc3R3CXI1LCBTU19MUihyMykKKwlzdHcJcjYsIFNTX0NSKHIzKQorCXN0dwlyMSwgU1NfU1AocjMpCisJc3R3CXIyLCBTU19SMihyMykKKworMToJbWZ0YnUJcjQKKwltZnRiCXI1CisJbWZ0YnUJcjYKKwljbXB3CXI0LCByNgorCWJuZQkxYgorCisJc3R3CXI0LCBTU19UQiswKHIzKQorCXN0dwlyNSwgU1NfVEIrNChyMykKKworCXN0bXcJcjEyLCBTU19HUFJFRyhyMykKKworCWxpCXI0LCAwCisJYWRkaQlyNiwgcjMsIFNTX1NSLTQKKzE6CW1mc3JpbglyNSwgcjQKKwlzdHd1CXI1LCA0KHI2KQorCWFkZGlzCXI0LCByNCwgMHgxMDAwCisJY21wd2kJcjQsIDAKKwlibmUJMWIKKworCS8qIERpc2FibGUgbWFjaGluZSBjaGVja3MgYW5kIGNyaXRpY2FsIGV4Y2VwdGlvbnMgKi8KKwltZm1zcglyNAorCXJsd2lubQlyNCwgcjQsIDAsIH5NU1JfQ0UKKwlybHdpbm0JcjQsIHI0LCAwLCB+TVNSX01FCisJbXRtc3IJcjQKKwlpc3luYworCisjZGVmaW5lIFRNUF9WSVJUX0lNTVIJCTB4ZjAwMDAwMDAKKyNkZWZpbmUgREVGQVVMVF9JTU1SX1ZBTFVFCTB4ZmY0MDAwMDAKKyNkZWZpbmUgSU1NUkJBUl9CQVNFCQkweDAwMDAKKworCWxpcwlyNCwgaW1tcmJhc2VAaGEKKwlsd3oJcjQsIGltbXJiYXNlQGwocjQpCisKKwkvKiBVc2UgREJBVDAgdG8gYWRkcmVzcyB0aGUgY3VycmVudCBJTU1SIHNwYWNlICovCisKKwlvcmkJcjQsIHI0LCAweDAwMmEKKwltdHNwcglTUFJOX0RCQVQwTCwgcjQKKwlsaXMJcjgsIFRNUF9WSVJUX0lNTVJAaAorCW9yaQlyNCwgcjgsIDB4MDAxZQkvKiAxIE1CeXRlIGFjY2Vzc2FibGUgZnJvbSBLZXJuZWwgU3BhY2Ugb25seSAqLworCW10c3ByCVNQUk5fREJBVDBVLCByNAorCWlzeW5jCisKKwkvKiBVc2UgREJBVDEgdG8gYWRkcmVzcyB0aGUgb3JpZ2luYWwgSU1NUiBzcGFjZSAqLworCisJbGlzCXI0LCBERUZBVUxUX0lNTVJfVkFMVUVAaAorCW9yaQlyNCwgcjQsIDB4MDAyYQorCW10c3ByCVNQUk5fREJBVDFMLCByNAorCWxpcwlyOSwgKFRNUF9WSVJUX0lNTVIgKyAweDAxMDAwMDAwKUBoCisJb3JpCXI0LCByOSwgMHgwMDFlCS8qIDEgTUJ5dGUgYWNjZXNzYWJsZSBmcm9tIEtlcm5lbCBTcGFjZSBvbmx5ICovCisJbXRzcHIJU1BSTl9EQkFUMVUsIHI0CisJaXN5bmMKKworCS8qIFVzZSBEQkFUMiB0byBhZGRyZXNzIHRoZSBiZWdpbm5pbmcgb2YgUkFNLiAgVGhpcyBpc24ndCBkb25lCisJICogdXNpbmcgdGhlIG5vcm1hbCB2aXJ0dWFsIG1hcHBpbmcsIGJlY2F1c2Ugd2l0aCBwYWdlIGRlYnVnZ2luZworCSAqIGVuYWJsZWQgaXQgd2lsbCBiZSByZWFkLW9ubHkuCisJICovCisKKwlsaQlyNCwgMHgwMDAyCisJbXRzcHIJU1BSTl9EQkFUMkwsIHI0CisJbGlzCXI0LCBLRVJORUxCQVNFQGgKKwlvcmkJcjQsIHI0LCAweDAwMWUJLyogMSBNQnl0ZSBhY2Nlc3NhYmxlIGZyb20gS2VybmVsIFNwYWNlIG9ubHkgKi8KKwltdHNwcglTUFJOX0RCQVQyVSwgcjQKKwlpc3luYworCisJLyogRmx1c2ggdGhlIGNhY2hlIHdpdGggb3VyIEJBVCwgYXMgdGhlcmUgd2lsbCBiZSBUTEIgbWlzc2VzCisJICogb3RoZXJ3aXNlIGlmIHBhZ2UgZGVidWdnaW5nIGlzIGVuYWJsZWQsIGFuZCB0aGVzZSBtaXNzZXMKKwkgKiB3aWxsIGRpc3R1cmIgdGhlIFBMUlUgYWxnb3JpdGhtLgorCSAqLworCisJYmwJX19mbHVzaF9kaXNhYmxlX0wxCisKKwkvKiBLZWVwIHRoZSBpLWNhY2hlIGVuYWJsZWQsIHNvIHRoZSBoYWNrIGJlbG93IGZvciBsb3ctYm9vdAorCSAqIGZsYXNoIHdpbGwgd29yay4KKwkgKi8KKwltZnNwcglyMywgU1BSTl9ISUQwCisJb3JpCXIzLCByMywgSElEMF9JQ0UKKwltdHNwcglTUFJOX0hJRDAsIHIzCisJaXN5bmMKKworCWxpcwlyNiwgMHhmNTE1CisJb3JpCXI2LCByNiwgMHgzYWU1CisKKwlsaXMJcjcsIG1wYzgzeHhfZGVlcF9yZXN1bWVAaAorCW9yaQlyNywgcjcsIG1wYzgzeHhfZGVlcF9yZXN1bWVAbAorCXRvcGh5cyhyNywgcjcpCisKKwlsaXMJcjUsIEtFUk5FTEJBU0VAaAorCXN0dwlyNiwgMChyNSkKKwlzdHcJcjcsIDQocjUpCisKKwkvKiBSZXNldCBCQVJzICovCisKKwlsaQlyNCwgMAorCXN0dwlyNCwgMHgwMDI0KHI4KQorCXN0dwlyNCwgMHgwMDJjKHI4KQorCXN0dwlyNCwgMHgwMDM0KHI4KQorCXN0dwlyNCwgMHgwMDNjKHI4KQorCXN0dwlyNCwgMHgwMDY0KHI4KQorCXN0dwlyNCwgMHgwMDZjKHI4KQorCisJLyogUmV2IDEgb2YgdGhlIDgzMTMgaGFzIHByb2JsZW1zIHdpdGggd2FrZXVwIGV2ZW50cyB0aGF0IGFyZQorCSAqIHBlbmRpbmcgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIGRlZXAgc2xlZXAgc3RhdGUgKHN1Y2ggYXMgaWYKKwkgKiB0aGUgUENJIGhvc3Qgc2V0cyB0aGUgc3RhdGUgdG8gRDMgYW5kIHRoZW4gRDAgaW4gcmFwaWQKKwkgKiBzdWNjZXNzaW9uKS4gIFRoaXMgY2hlY2sgc2hyaW5rcyB0aGUgcmFjZSB3aW5kb3cgc29tZXdoYXQuCisJICoKKwkgKiBTZWUgZXJyYXR1bSBQQ0kyMywgdGhvdWdoIHRoZSBwcm9ibGVtIGlzIG5vdCBsaW1pdGVkCisJICogdG8gUENJLgorCSAqLworCisJbHd6CXIzLCAweDBiMDQocjgpCisJYW5kaS4JcjMsIHIzLCAxCisJYm5lLQltcGM4M3h4X2RlZXBfcmVzdW1lCisKKwkvKiBNb3ZlIElNTVIgYmFjayB0byB0aGUgZGVmYXVsdCBsb2NhdGlvbiwgZm9sbG93aW5nIHRoZQorCSAqIHByb2NlZHVyZSBzcGVjaWZpZWQgaW4gdGhlIE1QQzgzMTMgbWFudWFsLgorCSAqLworCWx3eglyNCwgSU1NUkJBUl9CQVNFKHI4KQorCWlzeW5jCisJbGlzCXI0LCBERUZBVUxUX0lNTVJfVkFMVUVAaAorCXN0dwlyNCwgSU1NUkJBUl9CQVNFKHI4KQorCWxpcwlyNCwgS0VSTkVMQkFTRUBoCisJbHd6CXI0LCAwKHI0KQorCWlzeW5jCisJbHd6CXI0LCBJTU1SQkFSX0JBU0UocjkpCisJbXIJcjgsIHI5CisJaXN5bmMKKworCS8qIENoZWNrIHRoZSBSZXNldCBDb25maWd1cmF0aW9uIFdvcmQgdG8gc2VlIHdoZXRoZXIgZmxhc2ggbmVlZHMKKwkgKiB0byBiZSBtYXBwZWQgYXQgYSBsb3cgYWRkcmVzcyBvciBhIGhpZ2ggYWRkcmVzcy4KKwkgKi8KKworCWx3eglyNCwgMHgwOTA0KHI4KQorCWFuZGlzLglyNCwgcjQsIDB4MDQwMAorCWxpCXI0LCAwCisJYmVxCWJvb3RfbG93CisJbGlzCXI0LCAweGZmODAKK2Jvb3RfbG93OgorCXN0dwlyNCwgMHgwMDIwKHI4KQorCWxpcwlyNywgMHg4MDAwCisJb3JpCXI3LCByNywgMHgwMDE2CisKKwltZnNwcglyNSwgU1BSTl9ISUQwCisJcmx3aW5tCXI1LCByNSwgMCwgfihISUQwX0RPWkUgfCBISUQwX05BUCkKKwlvcmlzCXI1LCByNSwgSElEMF9TTEVFUEBoCisJbXRzcHIJU1BSTl9ISUQwLCByNQorCWlzeW5jCisKKwltZm1zcglyNQorCW9yaXMJcjUsIHI1LCBNU1JfUE9XQGgKKworCS8qIEVuYWJsZSB0aGUgZmxhc2ggbWFwcGluZyBhdCB0aGUgYXBwcm9wcmlhdGUgYWRkcmVzcy4gIFRoaXMKKwkgKiBtYXBwaW5nIHdpbGwgb3ZlcnJpZGUgdGhlIFJBTSBtYXBwaW5nIGlmIGJvb3RpbmcgbG93LCBzbyB0aGVyZSdzCisJICogbm8gbmVlZCB0byBkaXNhYmxlIHRoZSBsYXR0ZXIuICBUaGlzIG11c3QgYmUgZG9uZSBpbnNpZGUgdGhlIHNhbWUKKwkgKiBjYWNoZSBsaW5lIGFzIHNldHRpbmcgTVNSX1BPVywgc28gdGhhdCBubyBpbnN0cnVjdGlvbiBmZXRjaGVzCisJICogZnJvbSBSQU0gaGFwcGVuIGFmdGVyIHRoZSBmbGFzaCBtYXBwaW5nIGlzIHR1cm5lZCBvbi4KKwkgKi8KKworCS5hbGlnbgk1CisJc3R3CXI3LCAweDAwMjQocjgpCisJc3luYworCWlzeW5jCisJbXRtc3IJcjUKKwlpc3luYworMToJYgkxYgorCittcGM4M3h4X2RlZXBfcmVzdW1lOgorCWxpcwlyNCwgMWZAaAorCW9yaQlyNCwgcjQsIDFmQGwKKwl0b3BoeXMocjQsIHI0KQorCW10c3JyMAlyNAorCisJbWZtc3IJcjQKKwlybHdpbm0JcjQsIHI0LCAwLCB+KE1TUl9JUiB8IE1TUl9EUikKKwltdHNycjEJcjQKKworCXJmaQorCisxOgl0bGJpYQorCWJsCV9faW52YWxfZW5hYmxlX0wxCisKKwlsaXMJcjMsIG1wYzgzeHhfc2xlZXBfc2F2ZV9hcmVhQGgKKwlvcmkJcjMsIHIzLCBtcGM4M3h4X3NsZWVwX3NhdmVfYXJlYUBsCisJdG9waHlzKHIzLCByMykKKworCWx3eglyNSwgU1NfTUVNU0FWRSswKHIzKQorCWx3eglyNiwgU1NfTUVNU0FWRSs0KHIzKQorCisJc3R3CXI1LCAwKDApCisJc3R3CXI2LCA0KDApCisKKwlsd3oJcjUsIFNTX0hJRCswKHIzKQorCWx3eglyNiwgU1NfSElEKzQocjMpCisJbHd6CXI3LCBTU19ISUQrOChyMykKKworCW10c3ByCVNQUk5fSElEMCwgcjUKKwltdHNwcglTUFJOX0hJRDEsIHI2CisJbXRzcHIJU1BSTl9ISUQyLCByNworCisJbHd6CXI0LCBTU19JQUJSKzAocjMpCisJbHd6CXI1LCBTU19JQUJSKzQocjMpCisJbHd6CXI2LCBTU19JQkNSKHIzKQorCWx3eglyNywgU1NfREFCUiswKHIzKQorCWx3eglyOCwgU1NfREFCUis0KHIzKQorCWx3eglyOSwgU1NfREJDUihyMykKKworCW10c3ByCVNQUk5fSUFCUiwgcjQKKwltdHNwcglTUFJOX0lBQlIyLCByNQorCW10c3ByCVNQUk5fSUJDUiwgcjYKKwltdHNwcglTUFJOX0RBQlIsIHI3CisJbXRzcHIJU1BSTl9EQUJSMiwgcjgKKwltdHNwcglTUFJOX0RCQ1IsIHI5CisKKwlsaQlyNCwgMAorCWFkZGkJcjYsIHIzLCBTU19TUi00CisxOglsd3p1CXI1LCA0KHI2KQorCW10c3JpbglyNSwgcjQKKwlhZGRpcwlyNCwgcjQsIDB4MTAwMAorCWNtcHdpCXI0LCAwCisJYm5lCTFiCisKKwlsd3oJcjQsIFNTX0RCQVQrMHgwMChyMykKKwlsd3oJcjUsIFNTX0RCQVQrMHgwNChyMykKKwlsd3oJcjYsIFNTX0RCQVQrMHgwOChyMykKKwlsd3oJcjcsIFNTX0RCQVQrMHgwYyhyMykKKworCW10c3ByCVNQUk5fREJBVDBVLCByNAorCW10c3ByCVNQUk5fREJBVDBMLCByNQorCW10c3ByCVNQUk5fREJBVDFVLCByNgorCW10c3ByCVNQUk5fREJBVDFMLCByNworCisJbHd6CXI0LCBTU19EQkFUKzB4MTAocjMpCisJbHd6CXI1LCBTU19EQkFUKzB4MTQocjMpCisJbHd6CXI2LCBTU19EQkFUKzB4MTgocjMpCisJbHd6CXI3LCBTU19EQkFUKzB4MWMocjMpCisKKwltdHNwcglTUFJOX0RCQVQyVSwgcjQKKwltdHNwcglTUFJOX0RCQVQyTCwgcjUKKwltdHNwcglTUFJOX0RCQVQzVSwgcjYKKwltdHNwcglTUFJOX0RCQVQzTCwgcjcKKworCWx3eglyNCwgU1NfREJBVCsweDIwKHIzKQorCWx3eglyNSwgU1NfREJBVCsweDI0KHIzKQorCWx3eglyNiwgU1NfREJBVCsweDI4KHIzKQorCWx3eglyNywgU1NfREJBVCsweDJjKHIzKQorCisJbXRzcHIJU1BSTl9EQkFUNFUsIHI0CisJbXRzcHIJU1BSTl9EQkFUNEwsIHI1CisJbXRzcHIJU1BSTl9EQkFUNVUsIHI2CisJbXRzcHIJU1BSTl9EQkFUNUwsIHI3CisKKwlsd3oJcjQsIFNTX0RCQVQrMHgzMChyMykKKwlsd3oJcjUsIFNTX0RCQVQrMHgzNChyMykKKwlsd3oJcjYsIFNTX0RCQVQrMHgzOChyMykKKwlsd3oJcjcsIFNTX0RCQVQrMHgzYyhyMykKKworCW10c3ByCVNQUk5fREJBVDZVLCByNAorCW10c3ByCVNQUk5fREJBVDZMLCByNQorCW10c3ByCVNQUk5fREJBVDdVLCByNgorCW10c3ByCVNQUk5fREJBVDdMLCByNworCisJbHd6CXI0LCBTU19JQkFUKzB4MDAocjMpCisJbHd6CXI1LCBTU19JQkFUKzB4MDQocjMpCisJbHd6CXI2LCBTU19JQkFUKzB4MDgocjMpCisJbHd6CXI3LCBTU19JQkFUKzB4MGMocjMpCisKKwltdHNwcglTUFJOX0lCQVQwVSwgcjQKKwltdHNwcglTUFJOX0lCQVQwTCwgcjUKKwltdHNwcglTUFJOX0lCQVQxVSwgcjYKKwltdHNwcglTUFJOX0lCQVQxTCwgcjcKKworCWx3eglyNCwgU1NfSUJBVCsweDEwKHIzKQorCWx3eglyNSwgU1NfSUJBVCsweDE0KHIzKQorCWx3eglyNiwgU1NfSUJBVCsweDE4KHIzKQorCWx3eglyNywgU1NfSUJBVCsweDFjKHIzKQorCisJbXRzcHIJU1BSTl9JQkFUMlUsIHI0CisJbXRzcHIJU1BSTl9JQkFUMkwsIHI1CisJbXRzcHIJU1BSTl9JQkFUM1UsIHI2CisJbXRzcHIJU1BSTl9JQkFUM0wsIHI3CisKKwlsd3oJcjQsIFNTX0lCQVQrMHgyMChyMykKKwlsd3oJcjUsIFNTX0lCQVQrMHgyNChyMykKKwlsd3oJcjYsIFNTX0lCQVQrMHgyOChyMykKKwlsd3oJcjcsIFNTX0lCQVQrMHgyYyhyMykKKworCW10c3ByCVNQUk5fSUJBVDRVLCByNAorCW10c3ByCVNQUk5fSUJBVDRMLCByNQorCW10c3ByCVNQUk5fSUJBVDVVLCByNgorCW10c3ByCVNQUk5fSUJBVDVMLCByNworCisJbHd6CXI0LCBTU19JQkFUKzB4MzAocjMpCisJbHd6CXI1LCBTU19JQkFUKzB4MzQocjMpCisJbHd6CXI2LCBTU19JQkFUKzB4MzgocjMpCisJbHd6CXI3LCBTU19JQkFUKzB4M2MocjMpCisKKwltdHNwcglTUFJOX0lCQVQ2VSwgcjQKKwltdHNwcglTUFJOX0lCQVQ2TCwgcjUKKwltdHNwcglTUFJOX0lCQVQ3VSwgcjYKKwltdHNwcglTUFJOX0lCQVQ3TCwgcjcKKworCWx3eglyNCwgU1NfU1BSRyswKHIzKQorCWx3eglyNSwgU1NfU1BSRys0KHIzKQorCWx3eglyNiwgU1NfU1BSRys4KHIzKQorCWx3eglyNywgU1NfU1BSRysxMihyMykKKwlsd3oJcjgsIFNTX1NEUjEocjMpCisKKwltdHNwcglTUFJOX1NQUkcwLCByNAorCW10c3ByCVNQUk5fU1BSRzEsIHI1CisJbXRzcHIJU1BSTl9TUFJHMiwgcjYKKwltdHNwcglTUFJOX1NQUkczLCByNworCW10c2RyMQlyOAorCisJbHd6CXI0LCBTU19NU1IocjMpCisJbHd6CXI1LCBTU19MUihyMykKKwlsd3oJcjYsIFNTX0NSKHIzKQorCWx3eglyMSwgU1NfU1AocjMpCisJbHd6CXIyLCBTU19SMihyMykKKworCW10c3JyMQlyNAorCW10c3JyMAlyNQorCW10Y3IJcjYKKworCWxpCXI0LCAwCisJbXRzcHIJU1BSTl9UQldMLCByNAorCisJbHd6CXI0LCBTU19UQiswKHIzKQorCWx3eglyNSwgU1NfVEIrNChyMykKKworCW10c3ByCVNQUk5fVEJXVSwgcjQKKwltdHNwcglTUFJOX1RCV0wsIHI1CisKKwlsbXcJcjEyLCBTU19HUFJFRyhyMykKKworCS8qIEtpY2sgZGVjcmVtZW50ZXIgKi8KKwlsaQlyMCwgMQorCW10ZGVjCXIwCisKKwlyZmkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTY1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogTVBDODN4eCBzdXNwZW5kIHN1cHBvcnQKKyAqCisgKiBBdXRob3I6IFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21wYzZ4eC5oPgorCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKworI2RlZmluZSBQTUNDUjFfTkVYVF9TVEFURSAgICAgICAweDBDIC8qIE5leHQgc3RhdGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgUE1DQ1IxX05FWFRfU1RBVEVfU0hJRlQgMgorI2RlZmluZSBQTUNDUjFfQ1VSUl9TVEFURSAgICAgICAweDAzIC8qIEN1cnJlbnQgc3RhdGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQqLworI2RlZmluZSBJTU1SX1JDV19PRkZTRVQgICAgICAgICAweDkwMAorI2RlZmluZSBSQ1dfUENJX0hPU1QgICAgICAgICAgICAweDgwMDAwMDAwCisKK3ZvaWQgbXBjODN4eF9lbnRlcl9kZWVwX3NsZWVwKHBoeXNfYWRkcl90IGltbXJiYXNlKTsKKworc3RydWN0IG1wYzgzeHhfcG1jIHsKKwl1MzIgY29uZmlnOworI2RlZmluZSBQTUNDUl9ETFBFTiAyIC8qIEREUiBTRFJBTSBsb3cgcG93ZXIgZW5hYmxlICovCisjZGVmaW5lIFBNQ0NSX1NMUEVOIDEgLyogU3lzdGVtIGxvdyBwb3dlciBlbmFibGUgKi8KKworCXUzMiBldmVudDsKKwl1MzIgbWFzazsKKy8qIEFsbCBidXQgUE1DSSBhcmUgZGVlcC1zbGVlcCBvbmx5ICovCisjZGVmaW5lIFBNQ0VSX0dQSU8gICAweDEwMAorI2RlZmluZSBQTUNFUl9QQ0kgICAgMHgwODAKKyNkZWZpbmUgUE1DRVJfVVNCICAgIDB4MDQwCisjZGVmaW5lIFBNQ0VSX0VUU0VDMSAweDAyMAorI2RlZmluZSBQTUNFUl9FVFNFQzIgMHgwMTAKKyNkZWZpbmUgUE1DRVJfVElNRVIgIDB4MDA4CisjZGVmaW5lIFBNQ0VSX0lOVDEgICAweDAwNAorI2RlZmluZSBQTUNFUl9JTlQyICAgMHgwMDIKKyNkZWZpbmUgUE1DRVJfUE1DSSAgIDB4MDAxCisjZGVmaW5lIFBNQ0VSX0FMTCAgICAweDFGRgorCisJLyogZGVlcC1zbGVlcCBvbmx5ICovCisJdTMyIGNvbmZpZzE7CisjZGVmaW5lIFBNQ0NSMV9VU0VfU1RBVEUgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUE1DQ1IxX1BNRV9FTiAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBQTUNDUjFfQVNTRVJUX1BNRSAweDAwMDAwMDQwCisjZGVmaW5lIFBNQ0NSMV9QT1dFUl9PRkYgIDB4MDAwMDAwMjAKKworCS8qIGRlZXAtc2xlZXAgb25seSAqLworCXUzMiBjb25maWcyOworfTsKKworc3RydWN0IG1wYzgzeHhfcmN3IHsKKwl1MzIgcmN3bHI7CisJdTMyIHJjd2hyOworfTsKKworc3RydWN0IG1wYzgzeHhfY2xvY2sgeworCXUzMiBzcG1yOworCXUzMiBvY2NyOworCXUzMiBzY2NyOworfTsKKworc3RydWN0IHBtY190eXBlIHsKKwlpbnQgaGFzX2RlZXBfc2xlZXA7Cit9OworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZSAqcG1jX2RldjsKK3N0YXRpYyBpbnQgaGFzX2RlZXBfc2xlZXAsIGRlZXBfc2xlZXBpbmc7CitzdGF0aWMgaW50IHBtY19pcnE7CitzdGF0aWMgc3RydWN0IG1wYzgzeHhfcG1jIF9faW9tZW0gKnBtY19yZWdzOworc3RhdGljIHN0cnVjdCBtcGM4M3h4X2Nsb2NrIF9faW9tZW0gKmNsb2NrX3JlZ3M7CitzdGF0aWMgaW50IGlzX3BjaV9hZ2VudCwgd2FrZV9mcm9tX3BjaTsKK3N0YXRpYyBwaHlzX2FkZHJfdCBpbW1yYmFzZTsKK3N0YXRpYyBpbnQgcGNpX3BtX3N0YXRlOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGFnZW50X3dxKTsKKworaW50IGZzbF9kZWVwX3NsZWVwKHZvaWQpCit7CisJcmV0dXJuIGRlZXBfc2xlZXBpbmc7Cit9CisKK3N0YXRpYyBpbnQgbXBjODN4eF9jaGFuZ2Vfc3RhdGUodm9pZCkKK3sKKwl1MzIgY3Vycl9zdGF0ZTsKKwl1MzIgcmVnX2NmZzEgPSBpbl9iZTMyKCZwbWNfcmVncy0+Y29uZmlnMSk7CisKKwlpZiAoaXNfcGNpX2FnZW50KSB7CisJCXBjaV9wbV9zdGF0ZSA9IChyZWdfY2ZnMSAmIFBNQ0NSMV9ORVhUX1NUQVRFKSA+PgorCQkgICAgICAgICAgICAgICBQTUNDUjFfTkVYVF9TVEFURV9TSElGVDsKKwkJY3Vycl9zdGF0ZSA9IHJlZ19jZmcxICYgUE1DQ1IxX0NVUlJfU1RBVEU7CisKKwkJaWYgKGN1cnJfc3RhdGUgIT0gcGNpX3BtX3N0YXRlKSB7CisJCQlyZWdfY2ZnMSAmPSB+UE1DQ1IxX0NVUlJfU1RBVEU7CisJCQlyZWdfY2ZnMSB8PSBwY2lfcG1fc3RhdGU7CisJCQlvdXRfYmUzMigmcG1jX3JlZ3MtPmNvbmZpZzEsIHJlZ19jZmcxKTsKKworCQkJd2FrZV91cCgmYWdlbnRfd3EpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IHBtY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIGV2ZW50ID0gaW5fYmUzMigmcG1jX3JlZ3MtPmV2ZW50KTsKKwlpbnQgcmV0ID0gSVJRX05PTkU7CisKKwlpZiAobXBjODN4eF9jaGFuZ2Vfc3RhdGUoKSkKKwkJcmV0ID0gSVJRX0hBTkRMRUQ7CisKKwlpZiAoZXZlbnQpIHsKKwkJb3V0X2JlMzIoJnBtY19yZWdzLT5ldmVudCwgZXZlbnQpOworCQlyZXQgPSBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1wYzgzeHhfc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJaW50IHJldCA9IC1FQUdBSU47CisKKwkvKiBEb24ndCBnbyB0byBzbGVlcCBpZiB0aGVyZSdzIGEgcmFjZSB3aGVyZSBwY2lfcG1fc3RhdGUgY2hhbmdlcworCSAqIGJldHdlZW4gdGhlIGFnZW50IHRocmVhZCBjaGVja2luZyBpdCBhbmQgdGhlIFBNIGNvZGUgZGlzYWJsaW5nCisJICogaW50ZXJydXB0cy4KKwkgKi8KKwlpZiAod2FrZV9mcm9tX3BjaSkgeworCQlpZiAocGNpX3BtX3N0YXRlICE9IChkZWVwX3NsZWVwaW5nID8gMyA6IDIpKQorCQkJZ290byBvdXQ7CisKKwkJb3V0X2JlMzIoJnBtY19yZWdzLT5jb25maWcxLAorCQkgICAgICAgICBpbl9iZTMyKCZwbWNfcmVncy0+Y29uZmlnMSkgfCBQTUNDUjFfUE1FX0VOKTsKKwl9CisKKwkvKiBQdXQgdGhlIHN5c3RlbSBpbnRvIGxvdy1wb3dlciBtb2RlIGFuZCB0aGUgUkFNCisJICogaW50byBzZWxmLXJlZnJlc2ggbW9kZSBvbmNlIHRoZSBjb3JlIGdvZXMgdG8KKwkgKiBzbGVlcC4KKwkgKi8KKworCW91dF9iZTMyKCZwbWNfcmVncy0+Y29uZmlnLCBQTUNDUl9TTFBFTiB8IFBNQ0NSX0RMUEVOKTsKKworCS8qIElmIGl0IGhhcyBkZWVwIHNsZWVwIChpLmUuIGl0J3MgYW4gODMxeCBvciBjb21wYXRpYmxlKSwKKwkgKiBkaXNhYmxlIHBvd2VyIHRvIHRoZSBjb3JlIHVwb24gZW50ZXJpbmcgc2xlZXAgbW9kZS4gIFRoaXMgd2lsbAorCSAqIHJlcXVpcmUgZ29pbmcgdGhyb3VnaCB0aGUgYm9vdCBmaXJtd2FyZSB1cG9uIGEgd2FrZXVwIGV2ZW50LgorCSAqLworCisJaWYgKGRlZXBfc2xlZXBpbmcpIHsKKwkJb3V0X2JlMzIoJnBtY19yZWdzLT5tYXNrLCBQTUNFUl9BTEwpOworCisJCW91dF9iZTMyKCZwbWNfcmVncy0+Y29uZmlnMSwKKwkJICAgICAgICAgaW5fYmUzMigmcG1jX3JlZ3MtPmNvbmZpZzEpIHwgUE1DQ1IxX1BPV0VSX09GRik7CisKKwkJZW5hYmxlX2tlcm5lbF9mcCgpOworCisJCW1wYzgzeHhfZW50ZXJfZGVlcF9zbGVlcChpbW1yYmFzZSk7CisKKwkJb3V0X2JlMzIoJnBtY19yZWdzLT5jb25maWcxLAorCQkgICAgICAgICBpbl9iZTMyKCZwbWNfcmVncy0+Y29uZmlnMSkgJiB+UE1DQ1IxX1BPV0VSX09GRik7CisKKwkJb3V0X2JlMzIoJnBtY19yZWdzLT5tYXNrLCBQTUNFUl9QTUNJKTsKKwl9IGVsc2UgeworCQlvdXRfYmUzMigmcG1jX3JlZ3MtPm1hc2ssIFBNQ0VSX1BNQ0kpOworCisJCW1wYzZ4eF9lbnRlcl9zdGFuZGJ5KCk7CisJfQorCisJcmV0ID0gMDsKKworb3V0OgorCW91dF9iZTMyKCZwbWNfcmVncy0+Y29uZmlnMSwKKwkgICAgICAgICBpbl9iZTMyKCZwbWNfcmVncy0+Y29uZmlnMSkgJiB+UE1DQ1IxX1BNRV9FTik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtcGM4M3h4X3N1c3BlbmRfZmluaXNoKHZvaWQpCit7CisJZGVlcF9zbGVlcGluZyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjODN4eF9zdXNwZW5kX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gc3RhdGUgPT0gUE1fU1VTUEVORF9TVEFOREJZIHx8IHN0YXRlID09IFBNX1NVU1BFTkRfTUVNOworfQorCitzdGF0aWMgaW50IG1wYzgzeHhfc3VzcGVuZF9iZWdpbihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKKwkJCWRlZXBfc2xlZXBpbmcgPSAwOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJCWlmIChoYXNfZGVlcF9zbGVlcCkKKwkJCQlkZWVwX3NsZWVwaW5nID0gMTsKKworCQkJcmV0dXJuIDA7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBhZ2VudF90aHJlYWRfZm4odm9pZCAqZGF0YSkKK3sKKwl3aGlsZSAoMSkgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYWdlbnRfd3EsIHBjaV9wbV9zdGF0ZSA+PSAyKTsKKwkJdHJ5X3RvX2ZyZWV6ZSgpOworCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCBwY2lfcG1fc3RhdGUgPCAyKQorCQkJY29udGludWU7CisKKwkJLyogV2l0aCBhIHByZWVtcHRpYmxlIGtlcm5lbCAob3IgU01QKSwgdGhpcyBjb3VsZCByYWNlIHdpdGgKKwkJICogYSB1c2Vyc3BhY2UtZHJpdmVuIHN1c3BlbmQgcmVxdWVzdC4gIEl0J3MgcHJvYmFibHkgYmVzdAorCQkgKiB0byBhdm9pZCBtaXhpbmcgdGhlIHR3byB3aXRoIHN1Y2ggYSBjb25maWd1cmF0aW9uIChvcgorCQkgKiBlbHNlIGZpeCBpdCBieSBhZGRpbmcgYSBtdXRleCB0byBzdGF0ZV9zdG9yZSB0aGF0IHdlIGNhbgorCQkgKiBzeW5jaHJvbml6ZSB3aXRoKS4KKwkJICovCisKKwkJd2FrZV9mcm9tX3BjaSA9IDE7CisKKwkJcG1fc3VzcGVuZChwY2lfcG1fc3RhdGUgPT0gMyA/IFBNX1NVU1BFTkRfTUVNIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX1NVU1BFTkRfU1RBTkRCWSk7CisKKwkJd2FrZV9mcm9tX3BjaSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc2V0X2FnZW50KHZvaWQpCit7CisJb3V0X2JlMzIoJnBtY19yZWdzLT5jb25maWcxLCBQTUNDUjFfVVNFX1NUQVRFKTsKKwlvdXRfYmUzMigmcG1jX3JlZ3MtPm1hc2ssIFBNQ0VSX1BNQ0kpOworCisJa3RocmVhZF9ydW4oYWdlbnRfdGhyZWFkX2ZuLCBOVUxMLCAiUENJIHBvd2VyIG1ndCIpOworfQorCitzdGF0aWMgaW50IG1wYzgzeHhfaXNfcGNpX2FnZW50KHZvaWQpCit7CisJc3RydWN0IG1wYzgzeHhfcmN3IF9faW9tZW0gKnJjd19yZWdzOworCWludCByZXQ7CisKKwlyY3dfcmVncyA9IGlvcmVtYXAoZ2V0X2ltbXJiYXNlKCkgKyBJTU1SX1JDV19PRkZTRVQsCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXBjODN4eF9yY3cpKTsKKworCWlmICghcmN3X3JlZ3MpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gIShpbl9iZTMyKCZyY3dfcmVncy0+cmN3aHIpICYgUkNXX1BDSV9IT1NUKTsKKworCWlvdW5tYXAocmN3X3JlZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgbXBjODN4eF9zdXNwZW5kX29wcyA9IHsKKwkudmFsaWQgPSBtcGM4M3h4X3N1c3BlbmRfdmFsaWQsCisJLmJlZ2luID0gbXBjODN4eF9zdXNwZW5kX2JlZ2luLAorCS5lbnRlciA9IG1wYzgzeHhfc3VzcGVuZF9lbnRlciwKKwkuZmluaXNoID0gbXBjODN4eF9zdXNwZW5kX2ZpbmlzaCwKK307CisKK3N0YXRpYyBpbnQgcG1jX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJc3RydWN0IHBtY190eXBlICp0eXBlID0gbWF0Y2gtPmRhdGE7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhhc19kZWVwX3NsZWVwID0gdHlwZS0+aGFzX2RlZXBfc2xlZXA7CisJaW1tcmJhc2UgPSBnZXRfaW1tcmJhc2UoKTsKKwlwbWNfZGV2ID0gb2ZkZXY7CisKKwlpc19wY2lfYWdlbnQgPSBtcGM4M3h4X2lzX3BjaV9hZ2VudCgpOworCWlmIChpc19wY2lfYWdlbnQgPCAwKQorCQlyZXR1cm4gaXNfcGNpX2FnZW50OworCisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwbWNfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmIChwbWNfaXJxICE9IE5PX0lSUSkgeworCQlyZXQgPSByZXF1ZXN0X2lycShwbWNfaXJxLCBwbWNfaXJxX2hhbmRsZXIsIElSUUZfU0hBUkVELAorCQkgICAgICAgICAgICAgICAgICAicG1jIiwgb2ZkZXYpOworCisJCWlmIChyZXQpCisJCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXBtY19yZWdzID0gaW9yZW1hcChyZXMuc3RhcnQsIHNpemVvZihzdHJ1Y3QgbXBjODN4eF9wbWMpKTsKKworCWlmICghcG1jX3JlZ3MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMSwgJnJlcyk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9wbWM7CisJfQorCisJY2xvY2tfcmVncyA9IGlvcmVtYXAocmVzLnN0YXJ0LCBzaXplb2Yoc3RydWN0IG1wYzgzeHhfcG1jKSk7CisKKwlpZiAoIWNsb2NrX3JlZ3MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfcG1jOworCX0KKworCWlmIChpc19wY2lfYWdlbnQpCisJCW1wYzgzeHhfc2V0X2FnZW50KCk7CisKKwlzdXNwZW5kX3NldF9vcHMoJm1wYzgzeHhfc3VzcGVuZF9vcHMpOworCXJldHVybiAwOworCitvdXRfcG1jOgorCWlvdW5tYXAocG1jX3JlZ3MpOworb3V0OgorCWlmIChwbWNfaXJxICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEocG1jX2lycSwgb2ZkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbWNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXJldHVybiAtRVBFUk07Cit9OworCitzdGF0aWMgc3RydWN0IHBtY190eXBlIHBtY190eXBlc1tdID0geworCXsKKwkJLmhhc19kZWVwX3NsZWVwID0gMSwKKwl9LAorCXsKKwkJLmhhc19kZWVwX3NsZWVwID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwbWNfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxtcGM4MzEzLXBtYyIsCisJCS5kYXRhID0gJnBtY190eXBlc1swXSwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcG1jIiwKKwkJLmRhdGEgPSAmcG1jX3R5cGVzWzFdLAorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHBtY19kcml2ZXIgPSB7CisJLm5hbWUgPSAibXBjODN4eC1wbWMiLAorCS5tYXRjaF90YWJsZSA9IHBtY19tYXRjaCwKKwkucHJvYmUgPSBwbWNfcHJvYmUsCisJLnJlbW92ZSA9IHBtY19yZW1vdmUKK307CisKK3N0YXRpYyBpbnQgcG1jX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZwbWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocG1jX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jCmluZGV4IDY0YmNmMGEuLmNjOTljMjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvdXNiLmMKQEAgLTEzNywxNSArMTM3LDIxIEBACiAKIAkvKiBDb25maWd1cmUgcGluIG11eCBmb3IgVUxQSS4gIFRoZXJlIGlzIG5vIHBpbiBtdXggZm9yIFVUTUkgKi8KIAlpZiAocHJvcCAmJiAhc3RyY21wKHByb3AsICJ1bHBpIikpIHsKLQkJdGVtcCA9IGluX2JlMzIoaW1tYXAgKyBNUEM4M1hYX1NJQ1JMX09GRlMpOwotCQl0ZW1wICY9IH5NUEM4MzFYX1NJQ1JMX1VTQl9NQVNLOwotCQl0ZW1wIHw9IE1QQzgzMVhfU0lDUkxfVVNCX1VMUEk7Ci0JCW91dF9iZTMyKGltbWFwICsgTVBDODNYWF9TSUNSTF9PRkZTLCB0ZW1wKTsKLQotCQl0ZW1wID0gaW5fYmUzMihpbW1hcCArIE1QQzgzWFhfU0lDUkhfT0ZGUyk7Ci0JCXRlbXAgJj0gfk1QQzgzMVhfU0lDUkhfVVNCX01BU0s7Ci0JCXRlbXAgfD0gTVBDODMxWF9TSUNSSF9VU0JfVUxQSTsKLQkJb3V0X2JlMzIoaW1tYXAgKyBNUEM4M1hYX1NJQ1JIX09GRlMsIHRlbXApOworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaW1tcl9ub2RlLCAiZnNsLG1wYzgzMTUtaW1tciIpKSB7CisJCQljbHJzZXRiaXRzX2JlMzIoaW1tYXAgKyBNUEM4M1hYX1NJQ1JMX09GRlMsCisJCQkJCU1QQzgzMTVfU0lDUkxfVVNCX01BU0ssCisJCQkJCU1QQzgzMTVfU0lDUkxfVVNCX1VMUEkpOworCQkJY2xyc2V0Yml0c19iZTMyKGltbWFwICsgTVBDODNYWF9TSUNSSF9PRkZTLAorCQkJCQlNUEM4MzE1X1NJQ1JIX1VTQl9NQVNLLAorCQkJCQlNUEM4MzE1X1NJQ1JIX1VTQl9VTFBJKTsKKwkJfSBlbHNlIHsKKwkJCWNscnNldGJpdHNfYmUzMihpbW1hcCArIE1QQzgzWFhfU0lDUkxfT0ZGUywKKwkJCQkJTVBDODMxWF9TSUNSTF9VU0JfTUFTSywKKwkJCQkJTVBDODMxWF9TSUNSTF9VU0JfVUxQSSk7CisJCQljbHJzZXRiaXRzX2JlMzIoaW1tYXAgKyBNUEM4M1hYX1NJQ1JIX09GRlMsCisJCQkJCU1QQzgzMVhfU0lDUkhfVVNCX01BU0ssCisJCQkJCU1QQzgzMVhfU0lDUkhfVVNCX1VMUEkpOworCQl9CiAJfQogCiAJaW91bm1hcChpbW1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCmluZGV4IGNlYmVhNWMuLjI5MTY3NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCkBAIC0yLDggKzIsOCBAQAogCWJvb2wgIk1hY2hpbmUgVHlwZSIKIAlkZXBlbmRzIG9uIFBQQ184NXh4CiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCi0Jc2VsZWN0IFBQQ19JTkRJUkVDVF9QQ0kgaWYgUENJCiAJc2VsZWN0IE1QSUMKKwlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKIAlzZWxlY3QgRlNMX1BDSSBpZiBQQ0kKIAlzZWxlY3QgU0VSSUFMXzgyNTBfU0hBUkVfSVJRIGlmIFNFUklBTF84MjUwCiAJZGVmYXVsdCB5CkBAIC04Niw3ICs4Niw2IEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVFEgQ29tcG9uZW50cyBUUU04NTQ4IGJvYXJkLgogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQotCXNlbGVjdCBQUENfQ1BNX05FV19CSU5ESU5HCiAJc2VsZWN0IFRRTTg1eHgKIAogY29uZmlnIFRRTTg1NTUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jCmluZGV4IDI1ZjQxY2QuLjAwYzUzNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYwpAQCAtMTE1LDcgKzExNSw2IEBACiAKICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW50IHByaW1hcnlfcGhiX2FkZHI7Ci1leHRlcm4gaW50IHVzZXNfZnNsX3VsaV9tMTU3NTsKIGV4dGVybiBpbnQgdWxpX2V4Y2x1ZGVfZGV2aWNlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKIAkJCQl1X2NoYXIgYnVzLCB1X2NoYXIgZGV2Zm4pOwogCkBAIC0xNjEsNyArMTYwLDYgQEAKIAkJfQogCX0KIAotCXVzZXNfZnNsX3VsaV9tMTU3NSA9IDE7CiAJcHBjX21kLnBjaV9leGNsdWRlX2RldmljZSA9IG1wYzg1eHhfZXhjbHVkZV9kZXZpY2U7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwppbmRleCA4MGE4MWUwLi45MzU1YTUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwpAQCAtMjcsNiArMjcsNyBAQAogY29uZmlnIE1QQzg2MTBfSFBDRAogCWJvb2wgIkZyZWVzY2FsZSBNUEM4NjEwIEhQQ0QiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IEZTTF9VTEkxNTc1CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODYxMCBIUENEIGJvYXJkLgogCkBAIC0zNCw2ICszNSw3IEBACiAKIGNvbmZpZyBNUEM4NjQxCiAJYm9vbAorCXNlbGVjdCBQUENfUENJX0NIT0lDRQogCXNlbGVjdCBGU0xfUENJIGlmIFBDSQogCXNlbGVjdCBQUENfVURCR18xNjU1MAogCXNlbGVjdCBNUElDCkBAIC00MSw2ICs0Myw3IEBACiAKIGNvbmZpZyBNUEM4NjEwCiAJYm9vbAorCXNlbGVjdCBQUENfUENJX0NIT0lDRQogCXNlbGVjdCBGU0xfUENJIGlmIFBDSQogCXNlbGVjdCBQUENfVURCR18xNjU1MAogCXNlbGVjdCBNUElDCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKaW5kZXggMzA3MjUzMC4uNWVlZGI3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYwpAQCAtNTgsOTMgKzU4LDYgQEAKIH0KIG1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKG1wYzg2eHhfaHBjZCwgbXBjODYxMF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOwogCi0jaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3VsaTE1NzUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1MzIgdGVtcDMyOwotCi0JLyogRGlzYWJsZSBJTlR4ICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgJnRlbXAzMik7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsICh0ZW1wMzIgfCAxPDwyNikpOwotCi0JLyogRW5hYmxlIHNpZGViYW5kIGludGVycnVwdCAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4OTAsICZ0ZW1wMzIpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDkwLCAodGVtcDMyIHwgMTw8MjIpKTsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3VsaTUyODgoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0JdW5zaWduZWQgc2hvcnQgdGVtcDsKLQotCS8qIEludGVycnVwdCBEaXNhYmxlLCBOZWVkZWQgd2hlbiBTQVRBIGRpc2FibGVkICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJnRlbXApOwotCXRlbXAgfD0gMTw8MTA7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIHRlbXApOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDgzLCAmYyk7Ci0JYyB8PSAweDgwOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODMsIGMpOwotCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1BST0csIDB4MDEpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19ERVZJQ0UsIDB4MDYpOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDgzLCAmYyk7Ci0JYyAmPSAweDdmOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODMsIGMpOwotfQotCi0vKgotICogU2luY2UgODI1OVBJQyB3YXMgZGlzYWJsZWQgb24gdGhlIGJvYXJkLCB0aGUgSURFIGRldmljZSBjYW4gbm90Ci0gKiB1c2UgdGhlIGxlZ2FjeSBJUlEsIHdlIG5lZWQgdG8gbGV0IHRoZSBJREUgZGV2aWNlIHdvcmsgdW5kZXIKLSAqIG5hdGl2ZSBtb2RlIGFuZCB1c2UgdGhlIGludGVycnVwdCBsaW5lIGxpa2Ugb3RoZXIgUENJIGRldmljZXMuCi0gKiBJUlExNCBpcyBhIHNpZGViYW5kIGludGVycnVwdCBmcm9tIElERSBkZXZpY2UgdG8gQ1BVIGFuZCB3ZSB1c2UgdGhpcwotICogYXMgdGhlIGludGVycnVwdCBmb3IgSURFIGRldmljZS4KLSAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3VsaTUyMjkoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NGIsICZjKTsKLQljIHw9IDB4MTA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgYyk7Ci19Ci0KLS8qCi0gKiBTQVRBIGludGVycnVwdCBwaW4gYnVnIGZpeAotICogVGhlcmUncyBhIGNoaXAgYnVnIGZvciA1Mjg4LCBUaGUgaW50ZXJydXB0IHBpbiBzaG91bGQgYmUgMiwKLSAqIG5vdCB0aGUgcmVhZCBvbmx5IHZhbHVlIDEsIFNvIGl0IHVzZSBJTlRCIywgbm90IElOVEEjIHdoaWNoCi0gKiBhY3R1YWxseSB1c2VkIGJ5IHRoZSBJREUgZGV2aWNlIDUyMjkuCi0gKiBBcyBvZiB0aGlzIGJ1ZywgZHVyaW5nIHRoZSBQQ0kgaW5pdGlhbGl6YXRpb24sIDUyODggcmVhZCB0aGUKLSAqIGlycSBvZiBJREUgZGV2aWNlIGZyb20gdGhlIGRldmljZSB0cmVlLCB0aGlzIGZ1bmN0aW9uIGZpeCB0aGlzCi0gKiBidWcgYnkgcmUtYXNzaWduaW5nIGEgY29ycmVjdCBpcnEgdG8gNTI4OC4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBmaW5hbF91bGk1Mjg4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGRldi0+YnVzKTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmhvc2Vub2RlID0gaG9zZSA/IGhvc2UtPmRuIDogTlVMTDsKLQlzdHJ1Y3Qgb2ZfaXJxIG9pcnE7Ci0JaW50IHZpcnEsIHBpbiA9IDI7Ci0JdTMyIGxhZGRyWzNdOwotCi0JaWYgKCFob3Nlbm9kZSkKLQkJcmV0dXJuOwotCi0JbGFkZHJbMF0gPSAoaG9zZS0+Zmlyc3RfYnVzbm8gPDwgMTYpIHwgKFBDSV9ERVZGTigzMSwgMCkgPDwgOCk7Ci0JbGFkZHJbMV0gPSBsYWRkclsyXSA9IDA7Ci0Jb2ZfaXJxX21hcF9yYXcoaG9zZW5vZGUsICZwaW4sIDEsIGxhZGRyLCAmb2lycSk7Ci0JdmlycSA9IGlycV9jcmVhdGVfb2ZfbWFwcGluZyhvaXJxLmNvbnRyb2xsZXIsIG9pcnEuc3BlY2lmaWVyLAotCQkJCSAgICAgb2lycS5zaXplKTsKLQlkZXYtPmlycSA9IHZpcnE7Ci19Ci0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FMLCAweDE1NzUsIHF1aXJrX3VsaTE1NzUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQUwsIDB4NTI4OCwgcXVpcmtfdWxpNTI4OCk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTCwgMHg1MjI5LCBxdWlya191bGk1MjI5KTsKLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQUwsIDB4NTI4OCwgZmluYWxfdWxpNTI4OCk7Ci0jZW5kaWYgLyogQ09ORklHX1BDSSAqLwotCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfRlNMX0RJVSkgfHwgZGVmaW5lZChDT05GSUdfRkJfRlNMX0RJVV9NT0RVTEUpCiAKIHN0YXRpYyB1MzIgZ2V0X2J1c2ZyZXEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYwppbmRleCA3OTE2NTk5Li5mNzEyZDljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCkBAIC00NSw3ICs0NSw2IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQ0kKLWV4dGVybiBpbnQgdXNlc19mc2xfdWxpX20xNTc1OwogZXh0ZXJuIGludCB1bGlfZXhjbHVkZV9kZXZpY2Uoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAogCQkJCXVfY2hhciBidXMsIHVfY2hhciBkZXZmbik7CiAKQEAgLTg3LDcgKzg2LDYgQEAKIAkJCWZzbF9hZGRfYnJpZGdlKG5wLCAwKTsKIAl9CiAKLQl1c2VzX2ZzbF91bGlfbTE1NzUgPSAxOwogCXBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UgPSBtcGM4Nnh4X2V4Y2x1ZGVfZGV2aWNlOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCA2OTBjMWY0Li4xZDA5Njg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC0yNTMsMTcgKzI1MywxMyBAQAogCWRlcGVuZHMgb24gTVBDODV4eCB8fCA4MjYwCiAJc2VsZWN0IENQTQogCXNlbGVjdCBQUENfTElCX1JIRUFQCisJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFCiAJaGVscAogCSAgVGhlIENQTTIgKENvbW11bmljYXRpb25zIFByb2Nlc3NvciBNb2R1bGUpIGlzIGEgY29wcm9jZXNzb3Igb24KIAkgIGVtYmVkZGVkIENQVXMgbWFkZSBieSBGcmVlc2NhbGUuICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gbWVhbnMgdGhhdAogCSAgeW91IHdpc2ggdG8gYnVpbGQgYSBrZXJuZWwgZm9yIGEgbWFjaGluZSB3aXRoIGEgQ1BNMiBjb3Byb2Nlc3NvcgogCSAgb24gaXQgKDgyNngsIDgyN3gsIDg1NjApLgogCi1jb25maWcgUFBDX0NQTV9ORVdfQklORElORwotCWJvb2wKLQlkZXBlbmRzIG9uIENQTTEgfHwgQ1BNMgotCWRlZmF1bHQgeQotCiBjb25maWcgQVhPTl9SQU0KIAl0cmlzdGF0ZSAiQXhvbiBERFIyIG1lbW9yeSBkZXZpY2UgZHJpdmVyIgogCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCmluZGV4IDViYzRiNjExLi43ZjY1MTI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQpAQCAtNDIsMTIgKzQyLDE0IEBACiAJc2VsZWN0IFBQQ19EQ1JfTkFUSVZFCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IDR4eF9TT0MKKwlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKIAogY29uZmlnIDQ0eAogCWJvb2wgIkFNQ0MgNDR4IgogCXNlbGVjdCBQUENfRENSX05BVElWRQogCXNlbGVjdCBQUENfVURCR18xNjU1MAogCXNlbGVjdCA0eHhfU09DCisJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFCiAKIGNvbmZpZyBFMjAwCiAJYm9vbCAiRnJlZXNjYWxlIGUyMDAiCkBAIC04NCw5ICs4Niw2IEBACiAJICBtYWNoaW5lcy4gV2hlbiBidWlsZGluZyBhIGtlcm5lbCB0aGF0IGlzIHN1cHBvc2VkIHRvIHJ1biBvbmx5CiAJICBvbiBDZWxsLCB5b3Ugc2hvdWxkIGFsc28gc2VsZWN0IHRoZSBQT1dFUjRfT05MWSBvcHRpb24uCiAKLWNvbmZpZyA2eHgKLQlib29sCi0KICMgdGhpcyBpcyB0ZW1wIHRvIGhhbmRsZSBjb21wYXQgd2l0aCBhcmNoPXBwYwogY29uZmlnIDh4eAogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKaW5kZXggMzk1OWZjZi4uYzE0ZDdkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKQEAgLTgzLDYgKzgzLDIyIEBACiAJZGVwZW5kcyBvbiBQUENfQ0VMTF9OQVRJVkUKIAlkZWZhdWx0IHkKIAorY29uZmlnIFBQQ19JQk1fQ0VMTF9SRVNFVEJVVFRPTgorCWJvb2wgIklCTSBDZWxsIEJsYWRlIFBpbmhvbGUgcmVzZXQgYnV0dG9uIgorCWRlcGVuZHMgb24gQ0JFX1JBUyAmJiBQUENfSUJNX0NFTExfQkxBREUKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTdXBwb3J0IFBpbmhvbGUgUmVzZXRidXR0b24gb24gSUJNIENlbGwgYmxhZGVzLgorCSAgVGhpcyBhZGRzIGEgbWV0aG9kIHRvIHRyaWdnZXIgc3lzdGVtIHJlc2V0IHZpYSBmcm9udCBwYW5lbCBwaW5ob2xlIGJ1dHRvbi4KKworY29uZmlnIFBQQ19JQk1fQ0VMTF9QT1dFUkJVVFRPTgorCXRyaXN0YXRlICJJQk0gQ2VsbCBCbGFkZSBwb3dlciBidXR0b24iCisJZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUgJiYgUFBDX1BNSSAmJiBJTlBVVF9FVkRFVgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFN1cHBvcnQgUG93ZXJidXR0b24gb24gSUJNIENlbGwgYmxhZGVzLgorCSAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgcG93ZXJidXR0b24gYXMgYW4gaW5wdXQgZGV2aWNlLgorCiBjb25maWcgQ0JFX1RIRVJNCiAJdHJpc3RhdGUgIkNCRSB0aGVybWFsIHN1cHBvcnQiCiAJZGVmYXVsdCBtCkBAIC0xMDcsNiArMTIzLDE1IEBACiAJICBwcm9jZXNzb3Igd2lsbCBub3Qgb25seSBiZSBhYmxlIHRvIHJ1biBhdCBsb3dlciBzcGVlZCwKIAkgIGJ1dCBhbHNvIGF0IGxvd2VyIGNvcmUgdm9sdGFnZS4KIAorY29uZmlnIENCRV9DUFVGUkVRX1NQVV9HT1ZFUk5PUgorCXRyaXN0YXRlICJDQkUgZnJlcXVlbmN5IHNjYWxpbmcgYmFzZWQgb24gU1BVIHVzYWdlIgorCWRlcGVuZHMgb24gU1BVX0ZTICYmIENQVV9GUkVRCisJZGVmYXVsdCBtCisJaGVscAorCSAgVGhpcyBnb3Zlcm5vciBjaGVja3MgZm9yIHNwdSB1c2FnZSB0byBhZGp1c3QgdGhlIGNwdSBmcmVxdWVuY3kuCisJICBJZiBubyBzcHUgaXMgcnVubmluZyBvbiBhIGdpdmVuIGNwdSwgdGhhdCBjcHUgd2lsbCBiZSB0aHJvdHRsZWQgdG8KKwkgIHRoZSBtaW5pbWFsIHBvc3NpYmxlIGZyZXF1ZW5jeS4KKwogZW5kbWVudQogCiBjb25maWcgT1BST0ZJTEVfQ0VMTApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlCmluZGV4IGMyYTdlNGUuLjdmZDgzMDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvTWFrZWZpbGUKQEAgLTgsNiArOCw5IEBACiBvYmotJChDT05GSUdfQ0JFX0NQVUZSRVFfUE1JKQkJKz0gY2JlX2NwdWZyZXFfcG1pLm8KIG9iai0kKENPTkZJR19DQkVfQ1BVRlJFUSkJCSs9IGNiZS1jcHVmcmVxLm8KIGNiZS1jcHVmcmVxLXkJCQkJKz0gY2JlX2NwdWZyZXFfcGVydmFzaXZlLm8gY2JlX2NwdWZyZXEubworb2JqLSQoQ09ORklHX0NCRV9DUFVGUkVRX1NQVV9HT1ZFUk5PUikJKz0gY3B1ZnJlcV9zcHVkZW1hbmQubworCitvYmotJChDT05GSUdfUFBDX0lCTV9DRUxMX1BPV0VSQlVUVE9OKQkrPSBjYmVfcG93ZXJidXR0b24ubwogCiBpZmVxICgkKENPTkZJR19TTVApLHkpCiBvYmotJChDT05GSUdfUFBDX0NFTExfTkFUSVZFKQkJKz0gc21wLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2RkYWE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9wb3dlcmJ1dHRvbi5jCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogZHJpdmVyIGZvciBwb3dlcmJ1dHRvbiBvbiBJQk0gY2VsbCBibGFkZXMKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA1LTIwMDgKKyAqCisgKiBBdXRob3I6IENocmlzdGlhbiBLcmFmZnQgPGtyYWZmdEBkZS5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9wbWkuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCitzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqYnV0dG9uX2RldjsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpidXR0b25fcGRldjsKKworc3RhdGljIHZvaWQgY2JlX3Bvd2VyYnV0dG9uX2hhbmRsZV9wbWkocG1pX21lc3NhZ2VfdCBwbWlfbXNnKQoreworCUJVR19PTihwbWlfbXNnLnR5cGUgIT0gUE1JX1RZUEVfUE9XRVJfQlVUVE9OKTsKKworCWlucHV0X3JlcG9ydF9rZXkoYnV0dG9uX2RldiwgS0VZX1BPV0VSLCAxKTsKKwlpbnB1dF9zeW5jKGJ1dHRvbl9kZXYpOworCWlucHV0X3JlcG9ydF9rZXkoYnV0dG9uX2RldiwgS0VZX1BPV0VSLCAwKTsKKwlpbnB1dF9zeW5jKGJ1dHRvbl9kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBtaV9oYW5kbGVyIGNiZV9wbWlfaGFuZGxlciA9IHsKKwkudHlwZQkJCT0gUE1JX1RZUEVfUE9XRVJfQlVUVE9OLAorCS5oYW5kbGVfcG1pX21lc3NhZ2UJPSBjYmVfcG93ZXJidXR0b25faGFuZGxlX3BtaSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNiZV9wb3dlcmJ1dHRvbl9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGlucHV0X2RldiAqZGV2OworCisJaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIklCTSxDQlBMVVMtMS4wIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogTm90IGEgY2VsbCBibGFkZS5cbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFkZXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogTm90IGVub3VnaCBtZW1vcnkuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCXNldF9iaXQoRVZfS0VZLCBkZXYtPmV2Yml0KTsKKwlzZXRfYml0KEtFWV9QT1dFUiwgZGV2LT5rZXliaXQpOworCisJZGV2LT5uYW1lID0gIlBvd2VyIEJ1dHRvbiI7CisJZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisKKwkvKiB0aGlzIG1ha2VzIHRoZSBidXR0b24gbG9vayBsaWtlIGFuIGFjcGkgcG93ZXIgYnV0dG9uCisJICogbm8gY2x1ZSB3aGV0aGVyIGFueW9uZSByZWxpZXMgb24gdGhhdCB0aG91Z2ggKi8KKwlkZXYtPmlkLnByb2R1Y3QgPSAweDAyOworCWRldi0+cGh5cyA9ICJMTlhQV1JCTi9idXR0b24vaW5wdXQwIjsKKworCWJ1dHRvbl9wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicG93ZXJfYnV0dG9uIiwgMCwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihidXR0b25fcGRldikpIHsKKwkJcmV0ID0gUFRSX0VSUihidXR0b25fcGRldik7CisJCWdvdG8gb3V0X2ZyZWVfaW5wdXQ7CisJfQorCisJZGV2LT5kZXYucGFyZW50ID0gJmJ1dHRvbl9wZGV2LT5kZXY7CisJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGRldik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZyZWVfcGRldjsKKwl9CisKKwlidXR0b25fZGV2ID0gZGV2OworCisJcmV0ID0gcG1pX3JlZ2lzdGVyX2hhbmRsZXIoJmNiZV9wbWlfaGFuZGxlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgd2l0aCBwbWkuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZyZWVfcGRldjsKKwl9CisKKwlnb3RvIG91dDsKKworb3V0X2ZyZWVfcGRldjoKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihidXR0b25fcGRldik7CitvdXRfZnJlZV9pbnB1dDoKKwlpbnB1dF9mcmVlX2RldmljZShkZXYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjYmVfcG93ZXJidXR0b25fZXhpdCh2b2lkKQoreworCXBtaV91bnJlZ2lzdGVyX2hhbmRsZXIoJmNiZV9wbWlfaGFuZGxlcik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYnV0dG9uX3BkZXYpOworCWlucHV0X2ZyZWVfZGV2aWNlKGJ1dHRvbl9kZXYpOworfQorCittb2R1bGVfaW5pdChjYmVfcG93ZXJidXR0b25faW5pdCk7Cittb2R1bGVfZXhpdChjYmVfcG93ZXJidXR0b25fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzdGlhbiBLcmFmZnQgPGtyYWZmdEBkZS5pYm0uY29tPiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV90aGVybWFsLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3RoZXJtYWwuYwppbmRleCA0ODUyYmYzLi40ZDRjOGMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3RoZXJtYWwuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3RoZXJtYWwuYwpAQCAtOTcsNyArOTcsOCBAQAogCXJldHVybiB2YWx1ZS5zcGVbc3B1LT5zcGVfaWRdOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVfc2hvd190ZW1wKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNwdV9zaG93X3RlbXAoc3RydWN0IHN5c19kZXZpY2UgKnN5c2Rldiwgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7CiAJdTggdmFsdWU7CiAJc3RydWN0IGNiZV9wbWRfcmVncyBfX2lvbWVtICpwbWRfcmVnczsKQEAgLTE0NiwzMiArMTQ3LDM4IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNwdV9zaG93X3Rocm90dGxlX2VuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzcHVfc2hvd190aHJvdHRsZV9lbmQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNob3dfdGhyb3R0bGUoZ2V0X3BtZF9yZWdzKHN5c2RldiksIGJ1ZiwgMCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNwdV9zaG93X3Rocm90dGxlX2JlZ2luKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNwdV9zaG93X3Rocm90dGxlX2JlZ2luKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXJldHVybiBzaG93X3Rocm90dGxlKGdldF9wbWRfcmVncyhzeXNkZXYpLCBidWYsIDgpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVfc2hvd190aHJvdHRsZV9mdWxsX3N0b3Aoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc3B1X3Nob3dfdGhyb3R0bGVfZnVsbF9zdG9wKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXJldHVybiBzaG93X3Rocm90dGxlKGdldF9wbWRfcmVncyhzeXNkZXYpLCBidWYsIDE2KTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1X3N0b3JlX3Rocm90dGxlX2VuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQorc3RhdGljIHNzaXplX3Qgc3B1X3N0b3JlX3Rocm90dGxlX2VuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIHN0b3JlX3Rocm90dGxlKGdldF9wbWRfcmVncyhzeXNkZXYpLCBidWYsIHNpemUsIDApOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVfc3RvcmVfdGhyb3R0bGVfYmVnaW4oc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBzc2l6ZV90IHNwdV9zdG9yZV90aHJvdHRsZV9iZWdpbihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIHN0b3JlX3Rocm90dGxlKGdldF9wbWRfcmVncyhzeXNkZXYpLCBidWYsIHNpemUsIDgpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVfc3RvcmVfdGhyb3R0bGVfZnVsbF9zdG9wKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgc3NpemVfdCBzcHVfc3RvcmVfdGhyb3R0bGVfZnVsbF9zdG9wKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAlyZXR1cm4gc3RvcmVfdGhyb3R0bGUoZ2V0X3BtZF9yZWdzKHN5c2RldiksIGJ1Ziwgc2l6ZSwgMTYpOwogfQpAQCAtMTkyLDQzICsxOTksNTEgQEAKIAogLyogc2hvd3MgdGhlIHRlbXBlcmF0dXJlIG9mIHRoZSBEVFMgb24gdGhlIFBQRSwKICAqIGxvY2F0ZWQgbmVhciB0aGUgbGluZWFyIHRoZXJtYWwgc2Vuc29yICovCi1zdGF0aWMgc3NpemVfdCBwcGVfc2hvd190ZW1wMChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBwcGVfc2hvd190ZW1wMChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gcHBlX3Nob3dfdGVtcChzeXNkZXYsIGJ1ZiwgMzIpOwogfQogCiAvKiBzaG93cyB0aGUgdGVtcGVyYXR1cmUgb2YgdGhlIHNlY29uZCBEVFMgb24gdGhlIFBQRSAqLwotc3RhdGljIHNzaXplX3QgcHBlX3Nob3dfdGVtcDEoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgcHBlX3Nob3dfdGVtcDEoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHBwZV9zaG93X3RlbXAoc3lzZGV2LCBidWYsIDApOwogfQogCi1zdGF0aWMgc3NpemVfdCBwcGVfc2hvd190aHJvdHRsZV9lbmQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgcHBlX3Nob3dfdGhyb3R0bGVfZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXJldHVybiBzaG93X3Rocm90dGxlKGNiZV9nZXRfY3B1X3BtZF9yZWdzKHN5c2Rldi0+aWQpLCBidWYsIDMyKTsKIH0KIAotc3RhdGljIHNzaXplX3QgcHBlX3Nob3dfdGhyb3R0bGVfYmVnaW4oc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgcHBlX3Nob3dfdGhyb3R0bGVfYmVnaW4oc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNob3dfdGhyb3R0bGUoY2JlX2dldF9jcHVfcG1kX3JlZ3Moc3lzZGV2LT5pZCksIGJ1ZiwgNDApOwogfQogCi1zdGF0aWMgc3NpemVfdCBwcGVfc2hvd190aHJvdHRsZV9mdWxsX3N0b3Aoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgcHBlX3Nob3dfdGhyb3R0bGVfZnVsbF9zdG9wKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXJldHVybiBzaG93X3Rocm90dGxlKGNiZV9nZXRfY3B1X3BtZF9yZWdzKHN5c2Rldi0+aWQpLCBidWYsIDQ4KTsKIH0KIAotc3RhdGljIHNzaXplX3QgcHBlX3N0b3JlX3Rocm90dGxlX2VuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQorc3RhdGljIHNzaXplX3QgcHBlX3N0b3JlX3Rocm90dGxlX2VuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIHN0b3JlX3Rocm90dGxlKGNiZV9nZXRfY3B1X3BtZF9yZWdzKHN5c2Rldi0+aWQpLCBidWYsIHNpemUsIDMyKTsKIH0KIAotc3RhdGljIHNzaXplX3QgcHBlX3N0b3JlX3Rocm90dGxlX2JlZ2luKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgc3NpemVfdCBwcGVfc3RvcmVfdGhyb3R0bGVfYmVnaW4oc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCXJldHVybiBzdG9yZV90aHJvdHRsZShjYmVfZ2V0X2NwdV9wbWRfcmVncyhzeXNkZXYtPmlkKSwgYnVmLCBzaXplLCA0MCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHBwZV9zdG9yZV90aHJvdHRsZV9mdWxsX3N0b3Aoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBzc2l6ZV90IHBwZV9zdG9yZV90aHJvdHRsZV9mdWxsX3N0b3Aoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCXJldHVybiBzdG9yZV90aHJvdHRsZShjYmVfZ2V0X2NwdV9wbWRfcmVncyhzeXNkZXYtPmlkKSwgYnVmLCBzaXplLCA0OCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY3B1ZnJlcV9zcHVkZW1hbmQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jcHVmcmVxX3NwdWRlbWFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzZjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY3B1ZnJlcV9zcHVkZW1hbmQuYwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIHNwdSBhd2FyZSBjcHVmcmVxIGdvdmVybm9yIGZvciB0aGUgY2VsbCBwcm9jZXNzb3IKKyAqCisgKiDCqSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDYtMjAwOAorICoKKyAqIEF1dGhvcjogQ2hyaXN0aWFuIEtyYWZmdCA8a3JhZmZ0QGRlLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vc3B1Lmg+CisKKyNkZWZpbmUgUE9MTF9USU1FCTEwMDAwMAkJLyogaW4gwrVzICovCisjZGVmaW5lIEVYUAkJNzUzCQkvKiBleHAoLTEpIGluIGZpeGVkLXBvaW50ICovCisKK3N0cnVjdCBzcHVfZ292X2luZm9fc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGJ1c3lfc3B1czsJLyogZml4ZWQtcG9pbnQgKi8KKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJdW5zaWduZWQgaW50IHBvbGxfaW50OwkJLyogwrVzICovCit9Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzcHVfZ292X2luZm9fc3RydWN0LCBzcHVfZ292X2luZm8pOworCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtzcHVnb3Zfd3E7CisKK3N0YXRpYyBpbnQgY2FsY19mcmVxKHN0cnVjdCBzcHVfZ292X2luZm9fc3RydWN0ICppbmZvKQoreworCWludCBjcHU7CisJaW50IGJ1c3lfc3B1czsKKworCWNwdSA9IGluZm8tPnBvbGljeS0+Y3B1OworCWJ1c3lfc3B1cyA9IGF0b21pY19yZWFkKCZjYmVfc3B1X2luZm9bY3B1X3RvX25vZGUoY3B1KV0uYnVzeV9zcHVzKTsKKworCUNBTENfTE9BRChpbmZvLT5idXN5X3NwdXMsIEVYUCwgYnVzeV9zcHVzICogRklYRURfMSk7CisJcHJfZGVidWcoImNwdSAlZDogYnVzeV9zcHVzPSVkLCBpbmZvLT5idXN5X3NwdXM9JWxkXG4iLAorCQkJY3B1LCBidXN5X3NwdXMsIGluZm8tPmJ1c3lfc3B1cyk7CisKKwlyZXR1cm4gaW5mby0+cG9saWN5LT5tYXggKiBpbmZvLT5idXN5X3NwdXMgLyBGSVhFRF8xOworfQorCitzdGF0aWMgdm9pZCBzcHVfZ292X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzcHVfZ292X2luZm9fc3RydWN0ICppbmZvOworCWludCBkZWxheTsKKwl1bnNpZ25lZCBsb25nIHRhcmdldF9mcmVxOworCisJaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3B1X2dvdl9pbmZvX3N0cnVjdCwgd29yay53b3JrKTsKKworCS8qIGFmdGVyIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyB3ZSB1bnNldCBpbmZvLT5wb2xpY3kgKi8KKwlCVUdfT04oaW5mby0+cG9saWN5ID09IE5VTEwpOworCisJdGFyZ2V0X2ZyZXEgPSBjYWxjX2ZyZXEoaW5mbyk7CisJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQoaW5mby0+cG9saWN5LCB0YXJnZXRfZnJlcSwgQ1BVRlJFUV9SRUxBVElPTl9IKTsKKworCWRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhpbmZvLT5wb2xsX2ludCk7CisJcXVldWVfZGVsYXllZF93b3JrX29uKGluZm8tPnBvbGljeS0+Y3B1LCBrc3B1Z292X3dxLCAmaW5mby0+d29yaywgZGVsYXkpOworfQorCitzdGF0aWMgdm9pZCBzcHVfZ292X2luaXRfd29yayhzdHJ1Y3Qgc3B1X2dvdl9pbmZvX3N0cnVjdCAqaW5mbykKK3sKKwlpbnQgZGVsYXkgPSB1c2Vjc190b19qaWZmaWVzKGluZm8tPnBvbGxfaW50KTsKKwlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZpbmZvLT53b3JrLCBzcHVfZ292X3dvcmspOworCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihpbmZvLT5wb2xpY3ktPmNwdSwga3NwdWdvdl93cSwgJmluZm8tPndvcmssIGRlbGF5KTsKK30KKworc3RhdGljIHZvaWQgc3B1X2dvdl9jYW5jZWxfd29yayhzdHJ1Y3Qgc3B1X2dvdl9pbmZvX3N0cnVjdCAqaW5mbykKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmluZm8tPndvcmspOworfQorCitzdGF0aWMgaW50IHNwdV9nb3ZfZ292ZXJuKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgZXZlbnQpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IHBvbGljeS0+Y3B1OworCXN0cnVjdCBzcHVfZ292X2luZm9fc3RydWN0ICppbmZvLCAqYWZmZWN0ZWRfaW5mbzsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCWluZm8gPSAmcGVyX2NwdShzcHVfZ292X2luZm8sIGNwdSk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBDUFVGUkVRX0dPVl9TVEFSVDoKKwkJaWYgKCFjcHVfb25saW5lKGNwdSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiY3B1ICVkIGlzIG5vdCBvbmxpbmVcbiIsIGNwdSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIXBvbGljeS0+Y3VyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIm5vIGNwdSBzcGVjaWZpZWQgaW4gcG9saWN5XG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGluaXRpYWxpemUgc3B1X2dvdl9pbmZvIGZvciBhbGwgYWZmZWN0ZWQgY3B1cyAqLworCQlmb3JfZWFjaF9jcHVfbWFzayhpLCBwb2xpY3ktPmNwdXMpIHsKKwkJCWFmZmVjdGVkX2luZm8gPSAmcGVyX2NwdShzcHVfZ292X2luZm8sIGkpOworCQkJYWZmZWN0ZWRfaW5mby0+cG9saWN5ID0gcG9saWN5OworCQl9CisKKwkJaW5mby0+cG9sbF9pbnQgPSBQT0xMX1RJTUU7CisKKwkJLyogc2V0dXAgdGltZXIgKi8KKwkJc3B1X2dvdl9pbml0X3dvcmsoaW5mbyk7CisKKwkJYnJlYWs7CisKKwljYXNlIENQVUZSRVFfR09WX1NUT1A6CisJCS8qIGNhbmNlbCB0aW1lciAqLworCQlzcHVfZ292X2NhbmNlbF93b3JrKGluZm8pOworCisJCS8qIGNsZWFuIHNwdV9nb3ZfaW5mbyBmb3IgYWxsIGFmZmVjdGVkIGNwdXMgKi8KKwkJZm9yX2VhY2hfY3B1X21hc2sgKGksIHBvbGljeS0+Y3B1cykgeworCQkJaW5mbyA9ICZwZXJfY3B1KHNwdV9nb3ZfaW5mbywgaSk7CisJCQlpbmZvLT5wb2xpY3kgPSBOVUxMOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yIHNwdV9nb3Zlcm5vciA9IHsKKwkubmFtZSA9ICJzcHVkZW1hbmQiLAorCS5nb3Zlcm5vciA9IHNwdV9nb3ZfZ292ZXJuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorfTsKKworLyoKKyAqIG1vZHVsZSBpbml0IGFuZCBkZXN0b3kKKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBzcHVfZ292X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJa3NwdWdvdl93cSA9IGNyZWF0ZV93b3JrcXVldWUoImtzcHVnb3YiKTsKKwlpZiAoIWtzcHVnb3Zfd3EpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjcmVhdGlvbiBvZiBrc3B1Z292IGZhaWxlZFxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3IoJnNwdV9nb3Zlcm5vcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgInJlZ2lzdHJhdGlvbiBvZiBnb3Zlcm5vciBmYWlsZWRcbiIpOworCQlkZXN0cm95X3dvcmtxdWV1ZShrc3B1Z292X3dxKTsKKwkJZ290byBvdXQ7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzcHVfZ292X2V4aXQodm9pZCkKK3sKKwljcHVmcmVxX3VucmVnaXN0ZXJfZ292ZXJub3IoJnNwdV9nb3Zlcm5vcik7CisJZGVzdHJveV93b3JrcXVldWUoa3NwdWdvdl93cSk7Cit9CisKKworbW9kdWxlX2luaXQoc3B1X2dvdl9pbml0KTsKK21vZHVsZV9leGl0KHNwdV9nb3ZfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzdGlhbiBLcmFmZnQgPGtyYWZmdEBkZS5pYm0uY29tPiIpOworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCmluZGV4IGVlYWNiM2EuLjIwODAwNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCkBAIC0xNzMsNyArMTczLDggQEAKIH0KIAogc3RhdGljIHZvaWQgdGNlX2J1aWxkX2NlbGwoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGxvbmcgaW5kZXgsIGxvbmcgbnBhZ2VzLAotCQl1bnNpZ25lZCBsb25nIHVhZGRyLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisJCXVuc2lnbmVkIGxvbmcgdWFkZHIsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyAqaW9fcHRlLCBiYXNlX3B0ZTsKQEAgLTE5OCw2ICsxOTksOCBAQAogCWJhc2VfcHRlID0gSU9QVEVfUFBfVyB8IElPUFRFX1BQX1IgfCBJT1BURV9NIHwgSU9QVEVfU09fUlcgfAogCQkod2luZG93LT5pb2lkICYgSU9QVEVfSU9JRF9NYXNrKTsKICNlbmRpZgorCWlmICh1bmxpa2VseShkbWFfZ2V0X2F0dHIoRE1BX0FUVFJfV0VBS19PUkRFUklORywgYXR0cnMpKSkKKwkJYmFzZV9wdGUgJj0gfklPUFRFX1NPX1JXOwogCiAJaW9fcHRlID0gKHVuc2lnbmVkIGxvbmcgKil0YmwtPml0X2Jhc2UgKyAoaW5kZXggLSB0YmwtPml0X29mZnNldCk7CiAKQEAgLTUxOSw3ICs1MjIsNyBAQAogCiAJX19zZXRfYml0KDAsIHdpbmRvdy0+dGFibGUuaXRfbWFwKTsKIAl0Y2VfYnVpbGRfY2VsbCgmd2luZG93LT50YWJsZSwgd2luZG93LT50YWJsZS5pdF9vZmZzZXQsIDEsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZylpb21tdS0+cGFkX3BhZ2UsIERNQV9UT19ERVZJQ0UpOworCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaW9tbXUtPnBhZF9wYWdlLCBETUFfVE9fREVWSUNFLCBOVUxMKTsKIAl3aW5kb3ctPnRhYmxlLml0X2hpbnQgPSB3aW5kb3ctPnRhYmxlLml0X2Jsb2Nrc2l6ZTsKIAogCXJldHVybiB3aW5kb3c7CkBAIC01MzgsNyArNTQxLDkgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNlbGxfZG1hX2RpcmVjdF9vZmZzZXQ7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRtYV9pb21tdV9maXhlZF9iYXNlOwotc3RydWN0IGRtYV9tYXBwaW5nX29wcyBkbWFfaW9tbXVfZml4ZWRfb3BzOworCisvKiBpb21tdV9maXhlZF9pc193ZWFrIGlzIHNldCBpZiBib290ZWQgd2l0aCBpb21tdV9maXhlZD13ZWFrICovCitzdGF0aWMgaW50IGlvbW11X2ZpeGVkX2lzX3dlYWs7CiAKIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfdGFibGUgKmNlbGxfZ2V0X2lvbW11X3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTU2Miw2ICs1NjcsOTggQEAKIAlyZXR1cm4gJndpbmRvdy0+dGFibGU7CiB9CiAKKy8qIEEgY29oZXJlbnQgYWxsb2NhdGlvbiBpbXBsaWVzIHN0cm9uZyBvcmRlcmluZyAqLworCitzdGF0aWMgdm9pZCAqZG1hX2ZpeGVkX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKK3sKKwlpZiAoaW9tbXVfZml4ZWRfaXNfd2VhaykKKwkJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldiwgY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KSwKKwkJCQkJICAgIHNpemUsIGRtYV9oYW5kbGUsCisJCQkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBmbGFnLAorCQkJCQkgICAgZGV2LT5hcmNoZGF0YS5udW1hX25vZGUpOworCWVsc2UKKwkJcmV0dXJuIGRtYV9kaXJlY3Rfb3BzLmFsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwKKwkJCQkJCSAgICAgZmxhZyk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9maXhlZF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJaWYgKGlvbW11X2ZpeGVkX2lzX3dlYWspCisJCWlvbW11X2ZyZWVfY29oZXJlbnQoY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KSwgc2l6ZSwgdmFkZHIsCisJCQkJICAgIGRtYV9oYW5kbGUpOworCWVsc2UKKwkJZG1hX2RpcmVjdF9vcHMuZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKK30KKworc3RhdGljIGRtYV9hZGRyX3QgZG1hX2ZpeGVkX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwdHIsCisJCQkJICAgICAgIHNpemVfdCBzaXplLAorCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCWlmIChpb21tdV9maXhlZF9pc193ZWFrID09IGRtYV9nZXRfYXR0cihETUFfQVRUUl9XRUFLX09SREVSSU5HLCBhdHRycykpCisJCXJldHVybiBkbWFfZGlyZWN0X29wcy5tYXBfc2luZ2xlKGRldiwgcHRyLCBzaXplLCBkaXJlY3Rpb24sCisJCQkJCQkgYXR0cnMpOworCWVsc2UKKwkJcmV0dXJuIGlvbW11X21hcF9zaW5nbGUoZGV2LCBjZWxsX2dldF9pb21tdV90YWJsZShkZXYpLCBwdHIsCisJCQkJCXNpemUsIGRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwKKwkJCQkJYXR0cnMpOworfQorCitzdGF0aWMgdm9pZCBkbWFfZml4ZWRfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCQkgICBzaXplX3Qgc2l6ZSwKKwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJaWYgKGlvbW11X2ZpeGVkX2lzX3dlYWsgPT0gZG1hX2dldF9hdHRyKERNQV9BVFRSX1dFQUtfT1JERVJJTkcsIGF0dHJzKSkKKwkJZG1hX2RpcmVjdF9vcHMudW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbiwKKwkJCQkJICAgIGF0dHJzKTsKKwllbHNlCisJCWlvbW11X3VubWFwX3NpbmdsZShjZWxsX2dldF9pb21tdV90YWJsZShkZXYpLCBkbWFfYWRkciwgc2l6ZSwKKwkJCQkgICBkaXJlY3Rpb24sIGF0dHJzKTsKK30KKworc3RhdGljIGludCBkbWFfZml4ZWRfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJaWYgKGlvbW11X2ZpeGVkX2lzX3dlYWsgPT0gZG1hX2dldF9hdHRyKERNQV9BVFRSX1dFQUtfT1JERVJJTkcsIGF0dHJzKSkKKwkJcmV0dXJuIGRtYV9kaXJlY3Rfb3BzLm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uLCBhdHRycyk7CisJZWxzZQorCQlyZXR1cm4gaW9tbXVfbWFwX3NnKGRldiwgY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KSwgc2csIG5lbnRzLAorCQkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKK30KKworc3RhdGljIHZvaWQgZG1hX2ZpeGVkX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlpZiAoaW9tbXVfZml4ZWRfaXNfd2VhayA9PSBkbWFfZ2V0X2F0dHIoRE1BX0FUVFJfV0VBS19PUkRFUklORywgYXR0cnMpKQorCQlkbWFfZGlyZWN0X29wcy51bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uLCBhdHRycyk7CisJZWxzZQorCQlpb21tdV91bm1hcF9zZyhjZWxsX2dldF9pb21tdV90YWJsZShkZXYpLCBzZywgbmVudHMsIGRpcmVjdGlvbiwKKwkJCSAgICAgICBhdHRycyk7Cit9CisKK3N0YXRpYyBpbnQgZG1hX2ZpeGVkX2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gbWFzayA9PSBETUFfNjRCSVRfTUFTSzsKK30KKworc3RhdGljIGludCBkbWFfc2V0X21hc2tfYW5kX3N3aXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzayk7CisKK3N0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2lvbW11X2ZpeGVkX29wcyA9IHsKKwkuYWxsb2NfY29oZXJlbnQgPSBkbWFfZml4ZWRfYWxsb2NfY29oZXJlbnQsCisJLmZyZWVfY29oZXJlbnQgID0gZG1hX2ZpeGVkX2ZyZWVfY29oZXJlbnQsCisJLm1hcF9zaW5nbGUgICAgID0gZG1hX2ZpeGVkX21hcF9zaW5nbGUsCisJLnVubWFwX3NpbmdsZSAgID0gZG1hX2ZpeGVkX3VubWFwX3NpbmdsZSwKKwkubWFwX3NnICAgICAgICAgPSBkbWFfZml4ZWRfbWFwX3NnLAorCS51bm1hcF9zZyAgICAgICA9IGRtYV9maXhlZF91bm1hcF9zZywKKwkuZG1hX3N1cHBvcnRlZCAgPSBkbWFfZml4ZWRfZG1hX3N1cHBvcnRlZCwKKwkuc2V0X2RtYV9tYXNrICAgPSBkbWFfc2V0X21hc2tfYW5kX3N3aXRjaCwKK307CisKIHN0YXRpYyB2b2lkIGNlbGxfZG1hX2Rldl9zZXR1cF9maXhlZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgdm9pZCBjZWxsX2RtYV9kZXZfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtOTE4LDkgKzEwMTUsMTYgQEAKIAogCXByX2RlYnVnKCJpb21tdTogbWFwcGluZyAweCVseCBwYWdlcyBmcm9tIDB4JWx4XG4iLCBmc2l6ZSwgZmJhc2UpOwogCi0JYmFzZV9wdGUgPSBJT1BURV9QUF9XIHwgSU9QVEVfUFBfUiB8IElPUFRFX00gfCBJT1BURV9TT19SVworCWJhc2VfcHRlID0gSU9QVEVfUFBfVyB8IElPUFRFX1BQX1IgfCBJT1BURV9NCiAJCSAgICB8IChjZWxsX2lvbW11X2dldF9pb2lkKG5wKSAmIElPUFRFX0lPSURfTWFzayk7CiAKKwlpZiAoaW9tbXVfZml4ZWRfaXNfd2VhaykKKwkJcHJfaW5mbygiSU9NTVU6IFVzaW5nIHdlYWsgb3JkZXJpbmcgZm9yIGZpeGVkIG1hcHBpbmdcbiIpOworCWVsc2UgeworCQlwcl9pbmZvKCJJT01NVTogVXNpbmcgc3Ryb25nIG9yZGVyaW5nIGZvciBmaXhlZCBtYXBwaW5nXG4iKTsKKwkJYmFzZV9wdGUgfD0gSU9QVEVfU09fUlc7CisJfQorCiAJZm9yICh1YWRkciA9IDA7IHVhZGRyIDwgZnNpemU7IHVhZGRyICs9ICgxIDw8IDI0KSkgewogCQkvKiBEb24ndCB0b3VjaCB0aGUgZHluYW1pYyByZWdpb24gKi8KIAkJaW9hZGRyID0gdWFkZHIgKyBmYmFzZTsKQEAgLTEwMzYsOSArMTE0MCw2IEBACiAJCWNlbGxfaW9tbXVfc2V0dXBfd2luZG93KGlvbW11LCBucCwgZGJhc2UsIGRzaXplLCAwKTsKIAl9CiAKLQlkbWFfaW9tbXVfZml4ZWRfb3BzID0gZG1hX2RpcmVjdF9vcHM7Ci0JZG1hX2lvbW11X2ZpeGVkX29wcy5zZXRfZG1hX21hc2sgPSBkbWFfc2V0X21hc2tfYW5kX3N3aXRjaDsKLQogCWRtYV9pb21tdV9vcHMuc2V0X2RtYV9tYXNrID0gZG1hX3NldF9tYXNrX2FuZF9zd2l0Y2g7CiAJc2V0X3BjaV9kbWFfb3BzKCZkbWFfaW9tbXVfb3BzKTsKIApAQCAtMTA1Miw2ICsxMTUzLDkgQEAKIAlpZiAoc3RyY21wKHN0ciwgIm9mZiIpID09IDApCiAJCWlvbW11X2ZpeGVkX2Rpc2FibGVkID0gMTsKIAorCWVsc2UgaWYgKHN0cmNtcChzdHIsICJ3ZWFrIikgPT0gMCkKKwkJaW9tbXVfZml4ZWRfaXNfd2VhayA9IDE7CisKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImlvbW11X2ZpeGVkPSIsIHNldHVwX2lvbW11X2ZpeGVkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9wZXJ2YXNpdmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9wZXJ2YXNpdmUuYwppbmRleCA4YTM2MzFjLi5lZmRhY2M4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcGVydmFzaXZlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3BlcnZhc2l2ZS5jCkBAIC0zOCw4ICszOCw2IEBACiAKICNpbmNsdWRlICJwZXJ2YXNpdmUuaCIKIAotc3RhdGljIGludCBzeXNyZXNldF9oYWNrOwotCiBzdGF0aWMgdm9pZCBjYmVfcG93ZXJfc2F2ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY3RybCwgdGhyZWFkX3N3aXRjaF9jb250cm9sOwpAQCAtODcsOSArODUsNiBAQAogCiBzdGF0aWMgaW50IGNiZV9zeXN0ZW1fcmVzZXRfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWludCBjcHU7Ci0Jc3RydWN0IGNiZV9wbWRfcmVncyBfX2lvbWVtICpwbWQ7Ci0KIAlzd2l0Y2ggKHJlZ3MtPm1zciAmIFNSUjFfV0FLRU1BU0spIHsKIAljYXNlIFNSUjFfV0FLRUVFOgogCQlkb19JUlEocmVncyk7CkBAIC05OCwxOSArOTMsNyBAQAogCQl0aW1lcl9pbnRlcnJ1cHQocmVncyk7CiAJCWJyZWFrOwogCWNhc2UgU1JSMV9XQUtFTVQ6Ci0JCS8qCi0JCSAqIFRoZSBCTUMgY2FuIGluamVjdCB1c2VyIHRyaWdnZXJlZCBzeXN0ZW0gcmVzZXQgZXhjZXB0aW9ucywKLQkJICogYnV0IGNhbm5vdCBzZXQgdGhlIHN5c3RlbSByZXNldCByZWFzb24gaW4gc3JyMSwKLQkJICogc28gY2hlY2sgYW4gZXh0cmEgcmVnaXN0ZXIgaGVyZS4KLQkJICovCi0JCWlmIChzeXNyZXNldF9oYWNrICYmIChjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCkpID09IDApIHsKLQkJCXBtZCA9IGNiZV9nZXRfY3B1X3BtZF9yZWdzKGNwdSk7Ci0JCQlpZiAoaW5fYmU2NCgmcG1kLT5yYXNfZXNjXzApICYgMHhmZmZmKSB7Ci0JCQkJb3V0X2JlNjQoJnBtZC0+cmFzX2VzY18wLCAwKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotCQlicmVhazsKKwkJcmV0dXJuIGNiZV9zeXNyZXNldF9oYWNrKCk7CiAjaWZkZWYgQ09ORklHX0NCRV9SQVMKIAljYXNlIFNSUjFfV0FLRVNZU0VSUjoKIAkJY2JlX3N5c3RlbV9lcnJvcl9leGNlcHRpb24ocmVncyk7CkBAIC0xMzQsOCArMTE3LDYgQEAKIAlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1BBVVNFX1pFUk8pKQogCQlyZXR1cm47CiAKLQlzeXNyZXNldF9oYWNrID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJJQk0sQ0JQTFVTLTEuMCIpOwotCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgY2JlX3BtZF9yZWdzIF9faW9tZW0gKnJlZ3MgPSBjYmVfZ2V0X2NwdV9wbWRfcmVncyhjcHUpOwogCQlpZiAoIXJlZ3MpCkBAIC0xNDQsMTIgKzEyNSw2IEBACiAJCSAvKiBFbmFibGUgUGF1c2UoMCkgY29udHJvbCBiaXQgKi8KIAkJb3V0X2JlNjQoJnJlZ3MtPnBtY3IsIGluX2JlNjQoJnJlZ3MtPnBtY3IpIHwKIAkJCQkJICAgIENCRV9QTURfUEFVU0VfWkVST19DT05UUk9MKTsKLQotCQkvKiBFbmFibGUgSlRBRyBzeXN0ZW0tcmVzZXQgaGFjayAqLwotCQlpZiAoc3lzcmVzZXRfaGFjaykKLQkJCW91dF9iZTMyKCZyZWdzLT5maXJfbW9kZV9yZWcsCi0JCQkJaW5fYmUzMigmcmVncy0+ZmlyX21vZGVfcmVnKSB8Ci0JCQkJQ0JFX1BNRF9GSVJfTU9ERV9NOCk7CiAJfQogCiAJcHBjX21kLnBvd2VyX3NhdmUgPSBjYmVfcG93ZXJfc2F2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9wZXJ2YXNpdmUuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9wZXJ2YXNpdmUuaAppbmRleCA3YjUwOTQ3Li5mZDRkN2I3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcGVydmFzaXZlLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3BlcnZhc2l2ZS5oCkBAIC0zMCw0ICszMCwxMyBAQAogZXh0ZXJuIHZvaWQgY2JlX21haW50ZW5hbmNlX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBjYmVfdGhlcm1hbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCisjaWZkZWYgQ09ORklHX1BQQ19JQk1fQ0VMTF9SRVNFVEJVVFRPTgorZXh0ZXJuIGludCBjYmVfc3lzcmVzZXRfaGFjayh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBjYmVfc3lzcmVzZXRfaGFjayh2b2lkKQoreworCXJldHVybiAxOworfQorI2VuZGlmIC8qIENPTkZJR19QUENfSUJNX0NFTExfUkVTRVRCVVRUT04gKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMKaW5kZXggNTA1ZjliOS4uMmExNGIwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3Jhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYwpAQCAtMjM2LDYgKzIzNiw1MiBAQAogCS5ub3RpZmllcl9jYWxsID0gY2JlX3B0Y2FsX25vdGlmeV9yZWJvb3QKIH07CiAKKyNpZmRlZiBDT05GSUdfUFBDX0lCTV9DRUxMX1JFU0VUQlVUVE9OCitzdGF0aWMgaW50IHN5c3Jlc2V0X2hhY2s7CisKK3N0YXRpYyBpbnQgX19pbml0IGNiZV9zeXNyZXNldF9pbml0KHZvaWQpCit7CisJc3RydWN0IGNiZV9wbWRfcmVncyBfX2lvbWVtICpyZWdzOworCisJc3lzcmVzZXRfaGFjayA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiSUJNLENCUExVUy0xLjAiKTsKKwlpZiAoIXN5c3Jlc2V0X2hhY2spCisJCXJldHVybiAwOworCisJcmVncyA9IGNiZV9nZXRfY3B1X3BtZF9yZWdzKDApOworCWlmICghcmVncykKKwkJcmV0dXJuIDA7CisKKwkvKiBFbmFibGUgSlRBRyBzeXN0ZW0tcmVzZXQgaGFjayAqLworCW91dF9iZTMyKCZyZWdzLT5maXJfbW9kZV9yZWcsCisJCWluX2JlMzIoJnJlZ3MtPmZpcl9tb2RlX3JlZykgfAorCQlDQkVfUE1EX0ZJUl9NT0RFX004KTsKKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKGNiZV9zeXNyZXNldF9pbml0KTsKKworaW50IGNiZV9zeXNyZXNldF9oYWNrKHZvaWQpCit7CisJc3RydWN0IGNiZV9wbWRfcmVncyBfX2lvbWVtICpyZWdzOworCisJLyoKKwkgKiBUaGUgQk1DIGNhbiBpbmplY3QgdXNlciB0cmlnZ2VyZWQgc3lzdGVtIHJlc2V0IGV4Y2VwdGlvbnMsCisJICogYnV0IGNhbm5vdCBzZXQgdGhlIHN5c3RlbSByZXNldCByZWFzb24gaW4gc3JyMSwKKwkgKiBzbyBjaGVjayBhbiBleHRyYSByZWdpc3RlciBoZXJlLgorCSAqLworCWlmIChzeXNyZXNldF9oYWNrICYmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkpIHsKKwkJcmVncyA9IGNiZV9nZXRfY3B1X3BtZF9yZWdzKDApOworCQlpZiAoIXJlZ3MpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGluX2JlNjQoJnJlZ3MtPnJhc19lc2NfMCkgJiAweDAwMDBmZmZmKSB7CisJCQlvdXRfYmU2NCgmcmVncy0+cmFzX2VzY18wLCAwKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorI2VuZGlmIC8qIENPTkZJR19QUENfSUJNX0NFTExfUkVTRVRCVVRUT04gKi8KKwogaW50IF9faW5pdCBjYmVfcHRjYWxfaW5pdCh2b2lkKQogewogCWludCByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCmluZGV4IDc4ZjkwNWIuLmE1YmRiODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCkBAIC03MDMsNyArNzAzLDggQEAKIH0KIAogCi1zdGF0aWMgc3NpemVfdCBzcHVfc3RhdF9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNwdV9zdGF0X3Nob3coc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzcHUgKnNwdSA9IGNvbnRhaW5lcl9vZihzeXNkZXYsIHN0cnVjdCBzcHUsIHN5c2Rldik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYwppbmRleCA2MDljNDZkLi43NjhjMjYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCkBAIC0zNjcsNyArMzY3LDcgQEAKIAl2aWFpc2EgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzMSwgTlVMTCk7CiAJaWYgKCF2aWFpc2EpCiAJCXJldHVybjsKLQlwcmludGsoIkZpeGluZyBWSUEgSURFLCBmb3JjZSBsZWdhY3kgbW9kZSBvbiAnJXMnXG4iLCB2aWFpZGUtPmRldi5idXNfaWQpOworCWRldl9pbmZvKCZ2aWFpZGUtPmRldiwgIkZpeGluZyBWSUEgSURFLCBmb3JjZSBsZWdhY3kgbW9kZSBvblxuIik7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZSh2aWFpZGUsIFBDSV9DTEFTU19QUk9HLCAmcHJvZ2lmKTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUodmlhaWRlLCBQQ0lfQ0xBU1NfUFJPRywgcHJvZ2lmICYgfjB4NSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2ZzbF91bGkxNTc1LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2ZzbF91bGkxNTc1LmMKaW5kZXggYWZjOTE0MS4uZWY3NGEwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9mc2xfdWxpMTU3NS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZnNsX3VsaTE1NzUuYwpAQCAtNTEsMTUgKzUxLDEzIEBACiAJVUxJXzgyNTlfTk9ORSwJCS8qIFBJUlFIICovCiB9OwogCi0vKiBzZXQgaW4gYm9hcmQgY29kZSBpZiB5b3Ugd2FudCB0aGlzIHF1aXJrcyB0byBkbyBzb21ldGhpbmcgKi8KLWludCB1c2VzX2ZzbF91bGlfbTE1NzU7Ci0KIC8qIEJyaWRnZSAqLwogc3RhdGljIHZvaWQgX19kZXZpbml0IGVhcmx5X3VsaTUyNDkoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBjaGFyIHRlbXA7CiAKLQlpZiAoIXVzZXNfZnNsX3VsaV9tMTU3NSkKKwlpZiAoIW1hY2hpbmVfaXMobXBjODZ4eF9ocGNuKSAmJiAhbWFjaGluZV9pcyhtcGM4NTQ0X2RzKSAmJgorCQkJIW1hY2hpbmVfaXMobXBjODU3Ml9kcykpCiAJCXJldHVybjsKIAogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBQQ0lfQ09NTUFORF9JTyB8CkBAIC04Miw3ICs4MCw4IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoIXVzZXNfZnNsX3VsaV9tMTU3NSkKKwlpZiAoIW1hY2hpbmVfaXMobXBjODZ4eF9ocGNuKSAmJiAhbWFjaGluZV9pcyhtcGM4NTQ0X2RzKSAmJgorCQkJIW1hY2hpbmVfaXMobXBjODU3Ml9kcykpCiAJCXJldHVybjsKIAogCS8qCkBAIC0xNTAsNyArMTQ5LDggQEAKIAkgKiBJUlEgMTQ6IEVkZ2UKIAkgKiBJUlEgMTU6IEVkZ2UKIAkgKi8KLQlpZiAoIXVzZXNfZnNsX3VsaV9tMTU3NSkKKwlpZiAoIW1hY2hpbmVfaXMobXBjODZ4eF9ocGNuKSAmJiAhbWFjaGluZV9pcyhtcGM4NTQ0X2RzKSAmJgorCQkJIW1hY2hpbmVfaXMobXBjODU3Ml9kcykpCiAJCXJldHVybjsKIAogCW91dGIoMHhmYSwgMHg0ZDApOwpAQCAtMTc2LDcgKzE3Niw4IEBACiAJdW5zaWduZWQgY2hhciBjOwogCXVuc2lnbmVkIGludCBkOwogCi0JaWYgKCF1c2VzX2ZzbF91bGlfbTE1NzUpCisJaWYgKCFtYWNoaW5lX2lzKG1wYzg2eHhfaHBjbikgJiYgIW1hY2hpbmVfaXMobXBjODU0NF9kcykgJiYKKwkJCSFtYWNoaW5lX2lzKG1wYzg1NzJfZHMpKQogCQlyZXR1cm47CiAKIAkvKiByZWFkL3dyaXRlIGxvY2sgKi8KQEAgLTIwMCw3ICsyMDEsOCBAQAogewogCXVuc2lnbmVkIHNob3J0IHRlbXA7CiAKLQlpZiAoIXVzZXNfZnNsX3VsaV9tMTU3NSkKKwlpZiAoIW1hY2hpbmVfaXMobXBjODZ4eF9ocGNuKSAmJiAhbWFjaGluZV9pcyhtcGM4NTQ0X2RzKSAmJgorCQkJIW1hY2hpbmVfaXMobXBjODU3Ml9kcykpCiAJCXJldHVybjsKIAogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUgfApAQCAtMjIxLDcgKzIyMyw3IEBACiAJZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7CiAJCWlmICgoYnVzLT5yZXNvdXJjZVtpXSkgJiYKIAkJCShidXMtPnJlc291cmNlW2ldLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQkJZHVtbXkgPSBpb3JlbWFwKGJ1cy0+cmVzb3VyY2VbaV0tPnN0YXJ0LCAweDQpOworCQkJZHVtbXkgPSBpb3JlbWFwKGJ1cy0+cmVzb3VyY2VbaV0tPmVuZCAtIDMsIDB4NCk7CiAJCQlpZiAoZHVtbXkpIHsKIAkJCQlpbl84KGR1bW15KTsKIAkJCQlpb3VubWFwKGR1bW15KTsKQEAgLTIzOCw2ICsyNDAsMTAzIEBACiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FMLCAweDUyNDksIHF1aXJrX2ZpbmFsX3VsaTUyNDkpOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTCwgMHgxNTc1LCBxdWlya19maW5hbF91bGkxNTc1KTsKIAorc3RhdGljIHZvaWQgX19kZXZpbml0IGhwY2RfcXVpcmtfdWxpMTU3NShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXUzMiB0ZW1wMzI7CisKKwlpZiAoIW1hY2hpbmVfaXMobXBjODZ4eF9ocGNkKSkKKwkJcmV0dXJuOworCisJLyogRGlzYWJsZSBJTlR4ICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgJnRlbXAzMik7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsICh0ZW1wMzIgfCAxPDwyNikpOworCisJLyogRW5hYmxlIHNpZGViYW5kIGludGVycnVwdCAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4OTAsICZ0ZW1wMzIpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDkwLCAodGVtcDMyIHwgMTw8MjIpKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGhwY2RfcXVpcmtfdWxpNTI4OChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKwl1bnNpZ25lZCBzaG9ydCB0ZW1wOworCisJaWYgKCFtYWNoaW5lX2lzKG1wYzg2eHhfaHBjZCkpCisJCXJldHVybjsKKworCS8qIEludGVycnVwdCBEaXNhYmxlLCBOZWVkZWQgd2hlbiBTQVRBIGRpc2FibGVkICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJnRlbXApOworCXRlbXAgfD0gMTw8MTA7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIHRlbXApOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDgzLCAmYyk7CisJYyB8PSAweDgwOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODMsIGMpOworCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1BST0csIDB4MDEpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19ERVZJQ0UsIDB4MDYpOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDgzLCAmYyk7CisJYyAmPSAweDdmOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODMsIGMpOworfQorCisvKgorICogU2luY2UgODI1OVBJQyB3YXMgZGlzYWJsZWQgb24gdGhlIGJvYXJkLCB0aGUgSURFIGRldmljZSBjYW4gbm90CisgKiB1c2UgdGhlIGxlZ2FjeSBJUlEsIHdlIG5lZWQgdG8gbGV0IHRoZSBJREUgZGV2aWNlIHdvcmsgdW5kZXIKKyAqIG5hdGl2ZSBtb2RlIGFuZCB1c2UgdGhlIGludGVycnVwdCBsaW5lIGxpa2Ugb3RoZXIgUENJIGRldmljZXMuCisgKiBJUlExNCBpcyBhIHNpZGViYW5kIGludGVycnVwdCBmcm9tIElERSBkZXZpY2UgdG8gQ1BVIGFuZCB3ZSB1c2UgdGhpcworICogYXMgdGhlIGludGVycnVwdCBmb3IgSURFIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IGhwY2RfcXVpcmtfdWxpNTIyOShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWlmICghbWFjaGluZV9pcyhtcGM4Nnh4X2hwY2QpKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NGIsICZjKTsKKwljIHw9IDB4MTA7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgYyk7Cit9CisKKy8qCisgKiBTQVRBIGludGVycnVwdCBwaW4gYnVnIGZpeAorICogVGhlcmUncyBhIGNoaXAgYnVnIGZvciA1Mjg4LCBUaGUgaW50ZXJydXB0IHBpbiBzaG91bGQgYmUgMiwKKyAqIG5vdCB0aGUgcmVhZCBvbmx5IHZhbHVlIDEsIFNvIGl0IHVzZSBJTlRCIywgbm90IElOVEEjIHdoaWNoCisgKiBhY3R1YWxseSB1c2VkIGJ5IHRoZSBJREUgZGV2aWNlIDUyMjkuCisgKiBBcyBvZiB0aGlzIGJ1ZywgZHVyaW5nIHRoZSBQQ0kgaW5pdGlhbGl6YXRpb24sIDUyODggcmVhZCB0aGUKKyAqIGlycSBvZiBJREUgZGV2aWNlIGZyb20gdGhlIGRldmljZSB0cmVlLCB0aGlzIGZ1bmN0aW9uIGZpeCB0aGlzCisgKiBidWcgYnkgcmUtYXNzaWduaW5nIGEgY29ycmVjdCBpcnEgdG8gNTI4OC4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBocGNkX2ZpbmFsX3VsaTUyODgoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoZGV2LT5idXMpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaG9zZW5vZGUgPSBob3NlID8gaG9zZS0+ZG4gOiBOVUxMOworCXN0cnVjdCBvZl9pcnEgb2lycTsKKwlpbnQgdmlycSwgcGluID0gMjsKKwl1MzIgbGFkZHJbM107CisKKwlpZiAoIW1hY2hpbmVfaXMobXBjODZ4eF9ocGNkKSkKKwkJcmV0dXJuOworCisJaWYgKCFob3Nlbm9kZSkKKwkJcmV0dXJuOworCisJbGFkZHJbMF0gPSAoaG9zZS0+Zmlyc3RfYnVzbm8gPDwgMTYpIHwgKFBDSV9ERVZGTigzMSwgMCkgPDwgOCk7CisJbGFkZHJbMV0gPSBsYWRkclsyXSA9IDA7CisJb2ZfaXJxX21hcF9yYXcoaG9zZW5vZGUsICZwaW4sIDEsIGxhZGRyLCAmb2lycSk7CisJdmlycSA9IGlycV9jcmVhdGVfb2ZfbWFwcGluZyhvaXJxLmNvbnRyb2xsZXIsIG9pcnEuc3BlY2lmaWVyLAorCQkJCSAgICAgb2lycS5zaXplKTsKKwlkZXYtPmlycSA9IHZpcnE7Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FMLCAweDE1NzUsIGhwY2RfcXVpcmtfdWxpMTU3NSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTCwgMHg1Mjg4LCBocGNkX3F1aXJrX3VsaTUyODgpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQUwsIDB4NTIyOSwgaHBjZF9xdWlya191bGk1MjI5KTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQUwsIDB4NTI4OCwgaHBjZF9maW5hbF91bGk1Mjg4KTsKKwogaW50IHVsaV9leGNsdWRlX2RldmljZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCiAJCQl1X2NoYXIgYnVzLCB1X2NoYXIgZGV2Zm4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCmluZGV4IDc2MWQ5ZTkuLmVhM2U1NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCWJvb2wgIklCTSBMZWdhY3kgaVNlcmllcyIKIAlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CiAJc2VsZWN0IFBQQ19JTkRJUkVDVF9JTworCXNlbGVjdCBQUENfUENJX0NIT0lDRSBpZiBFTUJFRERFRAogCiBtZW51ICJpU2VyaWVzIGRldmljZSBkcml2ZXJzIgogCWRlcGVuZHMgb24gUFBDX0lTRVJJRVMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lvbW11LmMKaW5kZXggYWI1ZDg2OC4uYmM4MThlNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lvbW11LmMKQEAgLTQyLDcgKzQyLDggQEAKICNpbmNsdWRlIDxhc20vaXNlcmllcy9pb21tdS5oPgogCiBzdGF0aWMgdm9pZCB0Y2VfYnVpbGRfaVNlcmllcyhzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgbG9uZyBpbmRleCwgbG9uZyBucGFnZXMsCi0JCXVuc2lnbmVkIGxvbmcgdWFkZHIsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKKwkJdW5zaWduZWQgbG9uZyB1YWRkciwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1NjQgcmM7CiAJdTY0IHRjZSwgcnBuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMKaW5kZXggODY5NjdiZC4uNzA1NDFiNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jCkBAIC04NSw3ICs4NSw4IEBACiAKIHN0YXRpYyB2b2lkIGlvYm1hcF9idWlsZChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgbG9uZyBpbmRleCwKIAkJCSBsb25nIG5wYWdlcywgdW5zaWduZWQgbG9uZyB1YWRkciwKLQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXUzMiAqaXA7CiAJdTMyIHJwbjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwppbmRleCAwMGJkMDE2Li4zMTYzNTQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCkBAIC05Nyw4ICs5Nyw2IEBACiBpbnQgc2NjZGJnOwogI2VuZGlmCiAKLWV4dGVybiB2b2lkIHpzX2tnZGJfaG9vayhpbnQgdHR5X251bSk7Ci0KIHN5c19jdHJsZXJfdCBzeXNfY3RybGVyID0gU1lTX0NUUkxFUl9VTktOT1dOOwogRVhQT1JUX1NZTUJPTChzeXNfY3RybGVyKTsKIApAQCAtMzI5LDEwICszMjcsNiBAQAogCWwyY3JfaW5pdCgpOwogI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLwogCi0jaWZkZWYgQ09ORklHX0tHREIKLQl6c19rZ2RiX2hvb2soMCk7Ci0jZW5kaWYKLQogCWZpbmRfdmlhX2N1ZGEoKTsKIAlmaW5kX3ZpYV9wbXUoKTsKIAlzbXVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcKaW5kZXggYTVmNGU5NS4uOTIwY2Y3YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnCkBAIC04LDYgKzgsNyBAQAogCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQogCXNlbGVjdCBVU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8KIAlzZWxlY3QgTUVNT1JZX0hPVFBMVUcKKwlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBTb255IFBTMyBnYW1lIGNvbnNvbGUKIAkgIGFuZCBvdGhlciBwbGF0Zm9ybXMgdXNpbmcgdGhlIFBTMyBoeXBlcnZpc29yLiAgRW5hYmxpbmcgdGhpcwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvZGV2aWNlLWluaXQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2RldmljZS1pbml0LmMKaW5kZXggMzg2NmRlYi4uZmZkZDhlOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvZGV2aWNlLWluaXQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9kZXZpY2UtaW5pdC5jCkBAIC00ODYsNiArNDg2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwLT5kZXYubWF0Y2hfaWQgPSBQUzNfTUFUQ0hfSURfR1JBUEhJQ1M7CisJcC0+ZGV2Lm1hdGNoX3N1Yl9pZCA9IFBTM19NQVRDSF9TVUJfSURfRkI7CiAJcC0+ZGV2LmRldl90eXBlID0gUFMzX0RFVklDRV9UWVBFX0lPQzA7CiAKIAlyZXN1bHQgPSBwczNfc3lzdGVtX2J1c19kZXZpY2VfcmVnaXN0ZXIoJnAtPmRldik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKaW5kZXggZDY2YzM2Mi4uMjgwZWU4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwpAQCAtMzQ3LDE2ICszNDcsMjMgQEAKIAlzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZHJpdmVyICpkcnYgPSBwczNfZHJ2X3RvX3N5c3RlbV9idXNfZHJ2KF9kcnYpOwogCXN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldiA9IHBzM19kZXZfdG9fc3lzdGVtX2J1c19kZXYoX2Rldik7CiAKLQlyZXN1bHQgPSBkZXYtPm1hdGNoX2lkID09IGRydi0+bWF0Y2hfaWQ7CisJaWYgKCFkZXYtPm1hdGNoX3N1Yl9pZCkKKwkJcmVzdWx0ID0gZGV2LT5tYXRjaF9pZCA9PSBkcnYtPm1hdGNoX2lkOworCWVsc2UKKwkJcmVzdWx0ID0gZGV2LT5tYXRjaF9zdWJfaWQgPT0gZHJ2LT5tYXRjaF9zdWJfaWQgJiYKKwkJCWRldi0+bWF0Y2hfaWQgPT0gZHJ2LT5tYXRjaF9pZDsKIAogCWlmIChyZXN1bHQpCi0JCXByX2luZm8oIiVzOiVkOiBkZXY9JXUoJXMpLCBkcnY9JXUoJXMpOiBtYXRjaFxuIiwgX19mdW5jX18sCi0JCQlfX0xJTkVfXywgZGV2LT5tYXRjaF9pZCwgZGV2LT5jb3JlLmJ1c19pZCwKLQkJCWRydi0+bWF0Y2hfaWQsIGRydi0+Y29yZS5uYW1lKTsKKwkJcHJfaW5mbygiJXM6JWQ6IGRldj0ldS4ldSglcyksIGRydj0ldS4ldSglcyk6IG1hdGNoXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLAorCQkJZGV2LT5tYXRjaF9pZCwgZGV2LT5tYXRjaF9zdWJfaWQsIGRldi0+Y29yZS5idXNfaWQsCisJCQlkcnYtPm1hdGNoX2lkLCBkcnYtPm1hdGNoX3N1Yl9pZCwgZHJ2LT5jb3JlLm5hbWUpOwogCWVsc2UKLQkJcHJfZGVidWcoIiVzOiVkOiBkZXY9JXUoJXMpLCBkcnY9JXUoJXMpOiBtaXNzXG4iLCBfX2Z1bmNfXywKLQkJCV9fTElORV9fLCBkZXYtPm1hdGNoX2lkLCBkZXYtPmNvcmUuYnVzX2lkLAotCQkJZHJ2LT5tYXRjaF9pZCwgZHJ2LT5jb3JlLm5hbWUpOworCQlwcl9kZWJ1ZygiJXM6JWQ6IGRldj0ldS4ldSglcyksIGRydj0ldS4ldSglcyk6IG1pc3NcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sCisJCQlkZXYtPm1hdGNoX2lkLCBkZXYtPm1hdGNoX3N1Yl9pZCwgZGV2LT5jb3JlLmJ1c19pZCwKKwkJCWRydi0+bWF0Y2hfaWQsIGRydi0+bWF0Y2hfc3ViX2lkLCBkcnYtPmNvcmUubmFtZSk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnCmluZGV4IDA3ZmU1YjYuLjc1N2MwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogCXNlbGVjdCBSVEFTX0VSUk9SX0xPR0dJTkcKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgUFBDX05BVElWRQorCXNlbGVjdCBQUENfUENJX0NIT0lDRSBpZiBFTUJFRERFRAogCWRlZmF1bHQgeQogCiBjb25maWcgUFBDX1NQTFBBUgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IGMwMjdmMGEuLjU0ODE2ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTc1LDkgKzc1LDkgQEAKICAqLwogCiAvKiBJZiBhIGRldmljZSBkcml2ZXIga2VlcHMgcmVhZGluZyBhbiBNTUlPIHJlZ2lzdGVyIGluIGFuIGludGVycnVwdAotICogaGFuZGxlciBhZnRlciBhIHNsb3QgaXNvbGF0aW9uIGV2ZW50IGhhcyBvY2N1cnJlZCwgd2UgYXNzdW1lIGl0Ci0gKiBpcyBicm9rZW4gYW5kIHBhbmljLiAgVGhpcyBzZXRzIHRoZSB0aHJlc2hvbGQgZm9yIGhvdyBtYW55IHJlYWQKLSAqIGF0dGVtcHRzIHdlIGFsbG93IGJlZm9yZSBwYW5pY2tpbmcuCisgKiBoYW5kbGVyIGFmdGVyIGEgc2xvdCBpc29sYXRpb24gZXZlbnQsIGl0IG1pZ2h0IGJlIGJyb2tlbi4KKyAqIFRoaXMgc2V0cyB0aGUgdGhyZXNob2xkIGZvciBob3cgbWFueSByZWFkIGF0dGVtcHRzIHdlIGFsbG93CisgKiBiZWZvcmUgcHJpbnRpbmcgYW4gZXJyb3IgbWVzc2FnZS4KICAqLwogI2RlZmluZSBFRUhfTUFYX0ZBSUxTCTIxMDAwMDAKIApAQCAtNDcwLDYgKzQ3MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcGNpX2RuICpwZG47CiAJaW50IHJjID0gMDsKKwljb25zdCBjaGFyICpsb2NhdGlvbjsKIAogCXRvdGFsX21taW9fZmZzKys7CiAKQEAgLTUwOSwxOCArNTEwLDE1IEBACiAJcmMgPSAxOwogCWlmIChwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfSVNPTEFURUQpIHsKIAkJcGRuLT5lZWhfY2hlY2tfY291bnQgKys7Ci0JCWlmIChwZG4tPmVlaF9jaGVja19jb3VudCA+PSBFRUhfTUFYX0ZBSUxTKSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJFRUg6IERldmljZSBkcml2ZXIgaWdub3JlZCAlZCBiYWQgcmVhZHMsIHBhbmljaW5nXG4iLAotCQkJICAgICAgICBwZG4tPmVlaF9jaGVja19jb3VudCk7CisJCWlmIChwZG4tPmVlaF9jaGVja19jb3VudCAlIEVFSF9NQVhfRkFJTFMgPT0gMCkgeworCQkJbG9jYXRpb24gPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpYm0sbG9jLWNvZGUiLCBOVUxMKTsKKwkJCXByaW50ayAoS0VSTl9FUlIgIkVFSDogJWQgcmVhZHMgaWdub3JlZCBmb3IgcmVjb3ZlcmluZyBkZXZpY2UgYXQgIgorCQkJCSJsb2NhdGlvbj0lcyBkcml2ZXI9JXMgcGNpIGFkZHI9JXNcbiIsCisJCQkJcGRuLT5lZWhfY2hlY2tfY291bnQsIGxvY2F0aW9uLAorCQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBwY2lfbmFtZShkZXYpKTsKKwkJCXByaW50ayAoS0VSTl9FUlIgIkVFSDogTWlnaHQgYmUgaW5maW5pdGUgbG9vcCBpbiAlcyBkcml2ZXJcbiIsCisJCQkJZGV2LT5kcml2ZXItPm5hbWUpOwogCQkJZHVtcF9zdGFjaygpOwotCQkJbXNsZWVwKDUwMDApOwotCQkJCi0JCQkvKiByZS1yZWFkIHRoZSBzbG90IHJlc2V0IHN0YXRlICovCi0JCQlpZiAocmVhZF9zbG90X3Jlc2V0X3N0YXRlKHBkbiwgcmV0cykgIT0gMCkKLQkJCQlyZXRzWzBdID0gLTE7CS8qIHJlc2V0IHN0YXRlIHVua25vd24gKi8KLQotCQkJLyogSWYgd2UgYXJlIGhlcmUsIHRoZW4gd2UgaGl0IGFuIGluZmluaXRlIGxvb3AuIFN0b3AuICovCi0JCQlwYW5pYygiRUVIOiBNTUlPIGhhbHQgKCVkKSBvbiBkZXZpY2U6JXNcbiIsIHJldHNbMF0sIHBjaV9uYW1lKGRldikpOwogCQl9CiAJCWdvdG8gZG5fdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggOWExMjkwOC4uNTM3N2RkNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTUwLDcgKzUwLDggQEAKIAogc3RhdGljIHZvaWQgdGNlX2J1aWxkX3BTZXJpZXMoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGxvbmcgaW5kZXgsCiAJCQkgICAgICBsb25nIG5wYWdlcywgdW5zaWduZWQgbG9uZyB1YWRkciwKLQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKKwkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCSAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXU2NCBwcm90b190Y2U7CiAJdTY0ICp0Y2VwOwpAQCAtOTUsNyArOTYsOCBAQAogCiBzdGF0aWMgdm9pZCB0Y2VfYnVpbGRfcFNlcmllc0xQKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBsb25nIHRjZW51bSwKIAkJCQlsb25nIG5wYWdlcywgdW5zaWduZWQgbG9uZyB1YWRkciwKLQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXU2NCByYzsKIAl1NjQgcHJvdG9fdGNlLCB0Y2U7CkBAIC0xMjcsNyArMTI5LDggQEAKIAogc3RhdGljIHZvaWQgdGNlX2J1aWxkbXVsdGlfcFNlcmllc0xQKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBsb25nIHRjZW51bSwKIAkJCQkgICAgIGxvbmcgbnBhZ2VzLCB1bnNpZ25lZCBsb25nIHVhZGRyLAotCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdTY0IHJjOwogCXU2NCBwcm90b190Y2U7CkBAIC0xMzYsNyArMTM5LDggQEAKIAlsb25nIGwsIGxpbWl0OwogCiAJaWYgKG5wYWdlcyA9PSAxKSB7Ci0JCXRjZV9idWlsZF9wU2VyaWVzTFAodGJsLCB0Y2VudW0sIG5wYWdlcywgdWFkZHIsIGRpcmVjdGlvbik7CisJCXRjZV9idWlsZF9wU2VyaWVzTFAodGJsLCB0Y2VudW0sIG5wYWdlcywgdWFkZHIsCisJCQkJICAgIGRpcmVjdGlvbiwgYXR0cnMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNTAsNyArMTU0LDcgQEAKIAkJLyogSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIHRoZSBsb29wIGltcGxlbWVudGF0aW9uICovCiAJCWlmICghdGNlcCkgewogCQkJdGNlX2J1aWxkX3BTZXJpZXNMUCh0YmwsIHRjZW51bSwgbnBhZ2VzLCB1YWRkciwKLQkJCQkJICAgIGRpcmVjdGlvbik7CisJCQkJCSAgICBkaXJlY3Rpb24sIGF0dHJzKTsKIAkJCXJldHVybjsKIAkJfQogCQlfX2dldF9jcHVfdmFyKHRjZV9wYWdlKSA9IHRjZXA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYXhvbnJhbS5jCmluZGV4IDdmNTkxODguLjllMTA1Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYXhvbnJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYXhvbnJhbS5jCkBAIC01Nyw2ICs1Nyw4IEBACiAjZGVmaW5lIEFYT05fUkFNX1NFQ1RPUl9TSVpFCQkxIDw8IEFYT05fUkFNX1NFQ1RPUl9TSElGVAogI2RlZmluZSBBWE9OX1JBTV9JUlFfRkxBR1MJCUlSUUZfU0hBUkVEIHwgSVJRRl9UUklHR0VSX1JJU0lORwogCitzdGF0aWMgaW50IGF6ZnNfbWFqb3IsIGF6ZnNfbWlub3I7CisKIHN0cnVjdCBheG9uX3JhbV9iYW5rIHsKIAlzdHJ1Y3Qgb2ZfZGV2aWNlCSpkZXZpY2U7CiAJc3RydWN0IGdlbmRpc2sJCSpkaXNrOwpAQCAtMTQ4LDcgKzE1MCwxMCBAQAogCXN0cnVjdCBheG9uX3JhbV9iYW5rICpiYW5rID0gZGV2aWNlLT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJbG9mZl90IG9mZnNldDsKIAotCW9mZnNldCA9IHNlY3RvciA8PCBBWE9OX1JBTV9TRUNUT1JfU0hJRlQ7CisJb2Zmc2V0ID0gc2VjdG9yOworCWlmIChkZXZpY2UtPmJkX3BhcnQgIT0gTlVMTCkKKwkJb2Zmc2V0ICs9IGRldmljZS0+YmRfcGFydC0+c3RhcnRfc2VjdDsKKwlvZmZzZXQgPDw9IEFYT05fUkFNX1NFQ1RPUl9TSElGVDsKIAlpZiAob2Zmc2V0ID49IGJhbmstPnNpemUpIHsKIAkJZGV2X2VycigmYmFuay0+ZGV2aWNlLT5kZXYsICJBY2Nlc3Mgb3V0c2lkZSBvZiBhZGRyZXNzIHNwYWNlXG4iKTsKIAkJcmV0dXJuIC1FUkFOR0U7CkBAIC0yMjcsMTkgKzIzMiwxNCBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAKLQliYW5rLT5kaXNrLT5maXJzdF9taW5vciA9IDA7CisJYmFuay0+ZGlzay0+bWFqb3IgPSBhemZzX21ham9yOworCWJhbmstPmRpc2stPmZpcnN0X21pbm9yID0gYXpmc19taW5vcjsKIAliYW5rLT5kaXNrLT5mb3BzID0gJmF4b25fcmFtX2Rldm9wczsKIAliYW5rLT5kaXNrLT5wcml2YXRlX2RhdGEgPSBiYW5rOwogCWJhbmstPmRpc2stPmRyaXZlcmZzX2RldiA9ICZkZXZpY2UtPmRldjsKIAogCXNwcmludGYoYmFuay0+ZGlzay0+ZGlza19uYW1lLCAiJXMlZCIsCiAJCQlBWE9OX1JBTV9ERVZJQ0VfTkFNRSwgYXhvbl9yYW1fYmFua19pZCk7Ci0JYmFuay0+ZGlzay0+bWFqb3IgPSByZWdpc3Rlcl9ibGtkZXYoMCwgYmFuay0+ZGlzay0+ZGlza19uYW1lKTsKLQlpZiAoYmFuay0+ZGlzay0+bWFqb3IgPCAwKSB7Ci0JCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIGJsb2NrIGRldmljZVxuIik7Ci0JCXJjID0gLUVGQVVMVDsKLQkJZ290byBmYWlsZWQ7Ci0JfQogCiAJYmFuay0+ZGlzay0+cXVldWUgPSBibGtfYWxsb2NfcXVldWUoR0ZQX0tFUk5FTCk7CiAJaWYgKGJhbmstPmRpc2stPnF1ZXVlID09IE5VTEwpIHsKQEAgLTI3Niw2ICsyNzYsOCBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAKKwlhemZzX21pbm9yICs9IGJhbmstPmRpc2stPm1pbm9yczsKKwogCXJldHVybiAwOwogCiBmYWlsZWQ6CkBAIC0zMTAsNyArMzEyLDYgQEAKIAogCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9lY2MpOwogCWZyZWVfaXJxKGJhbmstPmlycV9pZCwgZGV2aWNlKTsKLQl1bnJlZ2lzdGVyX2Jsa2RldihiYW5rLT5kaXNrLT5tYWpvciwgYmFuay0+ZGlzay0+ZGlza19uYW1lKTsKIAlkZWxfZ2VuZGlzayhiYW5rLT5kaXNrKTsKIAlpb3VubWFwKCh2b2lkIF9faW9tZW0gKikgYmFuay0+aW9fYWRkcik7CiAJa2ZyZWUoYmFuayk7CkBAIC0zNDEsNiArMzQyLDE0IEBACiBzdGF0aWMgaW50IF9faW5pdAogYXhvbl9yYW1faW5pdCh2b2lkKQogeworCWF6ZnNfbWFqb3IgPSByZWdpc3Rlcl9ibGtkZXYoYXpmc19tYWpvciwgQVhPTl9SQU1fREVWSUNFX05BTUUpOworCWlmIChhemZzX21ham9yIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIGNhbm5vdCBiZWNvbWUgYmxvY2sgZGV2aWNlIG1ham9yIG51bWJlclxuIiwKKwkJCQlBWE9OX1JBTV9NT0RVTEVfTkFNRSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlhemZzX21pbm9yID0gMDsKKwogCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmF4b25fcmFtX2RyaXZlcik7CiB9CiAKQEAgLTM1MSw2ICszNjAsNyBAQAogYXhvbl9yYW1fZXhpdCh2b2lkKQogewogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZheG9uX3JhbV9kcml2ZXIpOworCXVucmVnaXN0ZXJfYmxrZGV2KGF6ZnNfbWFqb3IsIEFYT05fUkFNX0RFVklDRV9OQU1FKTsKIH0KIAogbW9kdWxlX2luaXQoYXhvbl9yYW1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCmluZGV4IDAwNWMyZWMuLmRlOGM4YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCkBAIC0xNDksNyArMTQ5LDggQEAKIAogc3RhdGljIHZvaWQgZGFydF9idWlsZChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgbG9uZyBpbmRleCwKIAkJICAgICAgIGxvbmcgbnBhZ2VzLCB1bnNpZ25lZCBsb25nIHVhZGRyLAotCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgaW50ICpkcDsKIAl1bnNpZ25lZCBpbnQgcnBuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwppbmRleCA4N2IwYWExLi42MWU2ZDc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX1BQQ184NXh4KSB8fCBkZWZpbmVkKENPTkZJR19QUENfODZ4eCkKIC8qIGF0bXUgc2V0dXAgZm9yIGZzbCBwY2kvcGNpZSBjb250cm9sbGVyICovCiB2b2lkIF9faW5pdCBzZXR1cF9wY2lfYXRtdShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHN0cnVjdCByZXNvdXJjZSAqcnNyYykKIHsKQEAgLTI0OCwzICsyNDksNjMgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODY0MSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODY0MUQsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzg2MTAsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CisjZW5kaWYgLyogQ09ORklHX1BQQ184NXh4IHx8IENPTkZJR19QUENfODZ4eCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfUFBDXzgzeHgpCitpbnQgX19pbml0IG1wYzgzeHhfYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsKKwljb25zdCBpbnQgKmJ1c19yYW5nZTsKKwlpbnQgcHJpbWFyeSA9IDEsIGhhc19hZGRyZXNzID0gMDsKKwlwaHlzX2FkZHJfdCBpbW1yID0gZ2V0X2ltbXJiYXNlKCk7CisKKwlwcl9kZWJ1ZygiQWRkaW5nIFBDSSBob3N0IGJyaWRnZSAlc1xuIiwgZGV2LT5mdWxsX25hbWUpOworCisJLyogRmV0Y2ggaG9zdCBicmlkZ2UgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KKwloYXNfYWRkcmVzcyA9IChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldiwgMCwgJnJzcmMpID09IDApOworCisJLyogR2V0IGJ1cyByYW5nZSBpZiBhbnkgKi8KKwlidXNfcmFuZ2UgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CisJaWYgKGJ1c19yYW5nZSA9PSBOVUxMIHx8IGxlbiA8IDIgKiBzaXplb2YoaW50KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBnZXQgYnVzLXJhbmdlIGZvciAlcywgYXNzdW1lIgorCQkgICAgICAgIiBidXMgMFxuIiwgZGV2LT5mdWxsX25hbWUpOworCX0KKworCXBwY19wY2lfZmxhZ3MgfD0gUFBDX1BDSV9SRUFTU0lHTl9BTExfQlVTOworCWhvc2UgPSBwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoZGV2KTsKKwlpZiAoIWhvc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMF0gOiAwOworCWhvc2UtPmxhc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMV0gOiAweGZmOworCisJLyogTVBDODN4eCBzdXBwb3J0cyB1cCB0byB0d28gaG9zdCBjb250cm9sbGVycyBvbmUgYXQgMHg4NTAwIGZyb20gaW1tcmJhcgorCSAqIHRoZSBvdGhlciBhdCAweDg2MDAsIHdlIGNvbnNpZGVyIHRoZSAweDg1MDAgdGhlIHByaW1hcnkgY29udHJvbGxlcgorCSAqLworCS8qIFBDSSAxICovCisJaWYgKChyc3JjLnN0YXJ0ICYgMHhmZmZmZikgPT0gMHg4NTAwKSB7CisJCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCBpbW1yICsgMHg4MzAwLCBpbW1yICsgMHg4MzA0LCAwKTsKKwl9CisJLyogUENJIDIgKi8KKwlpZiAoKHJzcmMuc3RhcnQgJiAweGZmZmZmKSA9PSAweDg2MDApIHsKKwkJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIGltbXIgKyAweDgzODAsIGltbXIgKyAweDgzODQsIDApOworCQlwcmltYXJ5ID0gMDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBNUEM4M3h4IFBDSSBob3N0IGJyaWRnZSBhdCAweCUwMTZsbHguICIKKwkgICAgICAgIkZpcm13YXJlIGJ1cyBudW1iZXI6ICVkLT4lZFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyc3JjLnN0YXJ0LCBob3NlLT5maXJzdF9idXNubywKKwkgICAgICAgaG9zZS0+bGFzdF9idXNubyk7CisKKwlwcl9kZWJ1ZygiIC0+SG9zZSBhdCAweCVwLCBjZmdfYWRkcj0weCVwLGNmZ19kYXRhPTB4JXBcbiIsCisJICAgIGhvc2UsIGhvc2UtPmNmZ19hZGRyLCBob3NlLT5jZmdfZGF0YSk7CisKKwkvKiBJbnRlcnByZXQgdGhlICJyYW5nZXMiIHByb3BlcnR5ICovCisJLyogVGhpcyBhbHNvIG1hcHMgdGhlIEkvTyByZWdpb24gYW5kIHNldHMgaXNhX2lvL21lbV9iYXNlICovCisJcGNpX3Byb2Nlc3NfYnJpZGdlX09GX3Jhbmdlcyhob3NlLCBkZXYsIHByaW1hcnkpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BQQ184M3h4ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5oCmluZGV4IDM3YjA0YWQuLjEzZjMwYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5oCkBAIC04Myw2ICs4Myw3IEBACiAKIGV4dGVybiBpbnQgZnNsX2FkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpc19wcmltYXJ5KTsKIGV4dGVybiB2b2lkIGZzbF9wY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK2V4dGVybiBpbnQgbXBjODN4eF9hZGRfYnJpZGdlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KTsKIAogI2VuZGlmIC8qIF9fUE9XRVJQQ19GU0xfUENJX0ggKi8KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCmluZGV4IGViY2VjNzMuLjIxNDM4OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCkBAIC0yMDcsNjggKzIwNyw2MCBAQAogYXJjaF9pbml0Y2FsbChvZl9hZGRfZml4ZWRfcGh5cyk7CiAjZW5kaWYgLyogQ09ORklHX0ZJWEVEX1BIWSAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBnZmFyX21kaW9fb2ZfaW5pdCh2b2lkKQorc3RhdGljIGludCBnZmFyX21kaW9fb2ZfaW5pdF9vbmUoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gTlVMTDsKKwlpbnQgazsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkID0gTlVMTDsKKwlzdHJ1Y3QgZ2lhbmZhcl9tZGlvX2RhdGEgbWRpb19kYXRhOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1kaW9fZGV2OwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJaW50IHJldDsKIAotCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJmc2wsZ2lhbmZhci1tZGlvIik7CisJbWVtc2V0KCZyZXMsIDAsIHNpemVvZihyZXMpKTsKKwltZW1zZXQoJm1kaW9fZGF0YSwgMCwgc2l6ZW9mKG1kaW9fZGF0YSkpOwogCi0JLyogdHJ5IHRoZSBkZXByZWNhdGVkIHZlcnNpb24gKi8KLQlpZiAoIW5wKQotCQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLCAibWRpbyIsICJnaWFuZmFyIik7CisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCWlmIChucCkgewotCQlpbnQgazsKLQkJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5VTEw7Ci0JCXN0cnVjdCBnaWFuZmFyX21kaW9fZGF0YSBtZGlvX2RhdGE7CisJbWRpb19kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJmc2wtZ2lhbmZhcl9tZGlvIiwKKwkJCXJlcy5zdGFydCYweGZmZmZmLCAmcmVzLCAxKTsKKwlpZiAoSVNfRVJSKG1kaW9fZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIobWRpb19kZXYpOwogCi0JCW1lbXNldCgmcmVzLCAwLCBzaXplb2YocmVzKSk7Ci0JCW1lbXNldCgmbWRpb19kYXRhLCAwLCBzaXplb2YobWRpb19kYXRhKSk7CisJZm9yIChrID0gMDsgayA8IDMyOyBrKyspCisJCW1kaW9fZGF0YS5pcnFba10gPSBQSFlfUE9MTDsKIAotCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyOwotCi0JCW1kaW9fZGV2ID0KLQkJICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImZzbC1naWFuZmFyX21kaW8iLAotCQkJCQkJICAgIHJlcy5zdGFydCwgJnJlcywgMSk7Ci0JCWlmIChJU19FUlIobWRpb19kZXYpKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKG1kaW9fZGV2KTsKLQkJCWdvdG8gZXJyOworCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChucCwgY2hpbGQpKSAhPSBOVUxMKSB7CisJCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7CisJCWlmIChpcnEgIT0gTk9fSVJRKSB7CisJCQljb25zdCB1MzIgKmlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7CisJCQltZGlvX2RhdGEuaXJxWyppZF0gPSBpcnE7CiAJCX0KLQotCQlmb3IgKGsgPSAwOyBrIDwgMzI7IGsrKykKLQkJCW1kaW9fZGF0YS5pcnFba10gPSBQSFlfUE9MTDsKLQotCQl3aGlsZSAoKGNoaWxkID0gb2ZfZ2V0X25leHRfY2hpbGQobnAsIGNoaWxkKSkgIT0gTlVMTCkgewotCQkJaW50IGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGNoaWxkLCAwKTsKLQkJCWlmIChpcnEgIT0gTk9fSVJRKSB7Ci0JCQkJY29uc3QgdTMyICppZCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwKLQkJCQkJCQkicmVnIiwgTlVMTCk7Ci0JCQkJbWRpb19kYXRhLmlycVsqaWRdID0gaXJxOwotCQkJfQotCQl9Ci0KLQkJcmV0ID0KLQkJICAgIHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShtZGlvX2RldiwgJm1kaW9fZGF0YSwKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGdpYW5mYXJfbWRpb19kYXRhKSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIHVucmVnOwogCX0KIAotCW9mX25vZGVfcHV0KG5wKTsKLQlyZXR1cm4gMDsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEobWRpb19kZXYsICZtZGlvX2RhdGEsCisJCQkJc2l6ZW9mKHN0cnVjdCBnaWFuZmFyX21kaW9fZGF0YSkpOworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1kaW9fZGV2KTsKIAotdW5yZWc6Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWRpb19kZXYpOwotZXJyOgotCW9mX25vZGVfcHV0KG5wKTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IF9faW5pdCBnZmFyX21kaW9fb2ZfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZnNsLGdpYW5mYXItbWRpbyIpCisJCWdmYXJfbWRpb19vZl9pbml0X29uZShucCk7CisKKwkvKiB0cnkgdGhlIGRlcHJlY2F0ZWQgdmVyc2lvbiAqLworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgIm1kaW8iLCAiZ2lhbmZhciIpOworCQlnZmFyX21kaW9fb2ZfaW5pdF9vbmUobnApOworCisJcmV0dXJuIDA7Cit9CisKIGFyY2hfaW5pdGNhbGwoZ2Zhcl9tZGlvX29mX2luaXQpOwogCiBzdGF0aWMgY29uc3QgY2hhciAqZ2Zhcl90eF9pbnRyID0gInR4IjsKQEAgLTI5Niw2ICsyODgsOSBAQAogCQljb25zdCBwaGFuZGxlICpwaDsKIAkJaW50IG5fcmVzID0gMjsKIAorCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQorCQkJY29udGludWU7CisKIAkJbWVtc2V0KHIsIDAsIHNpemVvZihyKSk7CiAJCW1lbXNldCgmZ2Zhcl9kYXRhLCAwLCBzaXplb2YoZ2Zhcl9kYXRhKSk7CiAKQEAgLTM1Nyw2ICszNTIsOSBAQAogCQllbHNlCiAJCQlnZmFyX2RhdGEuaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKIAorCQlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZnNsLG1hZ2ljLXBhY2tldCIsIE5VTEwpKQorCQkJZ2Zhcl9kYXRhLmRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX01BR0lDX1BBQ0tFVDsKKwogCQlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBoeS1oYW5kbGUiLCBOVUxMKTsKIAkJaWYgKHBoID09IE5VTEwpIHsKIAkJCXUzMiAqZml4ZWRfbGluazsKQEAgLTM5MCw3ICszODgsNyBAQAogCiAJCQlnZmFyX2RhdGEucGh5X2lkID0gKmlkOwogCQkJc25wcmludGYoZ2Zhcl9kYXRhLmJ1c19pZCwgTUlJX0JVU19JRF9TSVpFLCAiJWxseCIsCi0JCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLnN0YXJ0KTsKKwkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMuc3RhcnQmMHhmZmZmZik7CiAKIAkJCW9mX25vZGVfcHV0KHBoeSk7CiAJCQlvZl9ub2RlX3B1dChtZGlvKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmgKaW5kZXggNTJjODMxZi4uMDI0Mjk5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmgKQEAgLTEwLDYgKzEwLDcgQEAKIGV4dGVybiB1MzIgZnNsX2dldF9zeXNfZnJlcSh2b2lkKTsKIAogc3RydWN0IHNwaV9ib2FyZF9pbmZvOworc3RydWN0IGRldmljZV9ub2RlOwogCiBleHRlcm4gaW50IGZzbF9zcGlfaW5pdChzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmJvYXJkX2luZm9zLAogCQkJdW5zaWduZWQgaW50IG51bV9ib2FyZF9pbmZvcywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKaW5kZXggY2FiYTFjMC4uODhhOTgzZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTg4OSw4ICs4OTAsNzggQEAKIAlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAocHJpbWFyeV9pcGljLT5pcnFob3N0LCBpcnEpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgc2ljZnI7CisJdTMyIHNpcHJyWzJdOworCXUzMiBzaW1zclsyXTsKKwl1MzIgc2ljbnI7CisJdTMyIHNtcHJyWzJdOworCXUzMiBzZW1zcjsKKwl1MzIgc2VjbnI7CisJdTMyIHNlcm1yOworCXUzMiBzZXJjcjsKK30gaXBpY19zYXZlZF9zdGF0ZTsKKworc3RhdGljIGludCBpcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKnNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaXBpYyAqaXBpYyA9IHByaW1hcnlfaXBpYzsKKworCWlwaWNfc2F2ZWRfc3RhdGUuc2ljZnIgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgSVBJQ19TSUNGUik7CisJaXBpY19zYXZlZF9zdGF0ZS5zaXByclswXSA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBJUElDX1NJUFJSX0EpOworCWlwaWNfc2F2ZWRfc3RhdGUuc2lwcnJbMV0gPSBpcGljX3JlYWQoaXBpYy0+cmVncywgSVBJQ19TSVBSUl9EKTsKKwlpcGljX3NhdmVkX3N0YXRlLnNpbXNyWzBdID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIElQSUNfU0lNU1JfSCk7CisJaXBpY19zYXZlZF9zdGF0ZS5zaW1zclsxXSA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBJUElDX1NJTVNSX0wpOworCWlwaWNfc2F2ZWRfc3RhdGUuc2ljbnIgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgSVBJQ19TSUNOUik7CisJaXBpY19zYXZlZF9zdGF0ZS5zbXByclswXSA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBJUElDX1NNUFJSX0EpOworCWlwaWNfc2F2ZWRfc3RhdGUuc21wcnJbMV0gPSBpcGljX3JlYWQoaXBpYy0+cmVncywgSVBJQ19TTVBSUl9CKTsKKwlpcGljX3NhdmVkX3N0YXRlLnNlbXNyID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIElQSUNfU0VNU1IpOworCWlwaWNfc2F2ZWRfc3RhdGUuc2VjbnIgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgSVBJQ19TRUNOUik7CisJaXBpY19zYXZlZF9zdGF0ZS5zZXJtciA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBJUElDX1NFUk1SKTsKKwlpcGljX3NhdmVkX3N0YXRlLnNlcmNyID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIElQSUNfU0VSQ1IpOworCisJaWYgKGZzbF9kZWVwX3NsZWVwKCkpIHsKKwkJLyogSW4gZGVlcCBzbGVlcCwgbWFrZSBzdXJlIHRoZXJlIGNhbiBiZSBubworCQkgKiBwZW5kaW5nIGludGVycnVwdHMsIGFzIHRoaXMgY2FuIGNhdXNlCisJCSAqIHByb2JsZW1zIG9uIDgzMXguCisJCSAqLworCQlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIElQSUNfU0lNU1JfSCwgMCk7CisJCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TSU1TUl9MLCAwKTsKKwkJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NFTVNSLCAwKTsKKwkJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NFUk1SLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3QgaXBpYyAqaXBpYyA9IHByaW1hcnlfaXBpYzsKKworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TSUNGUiwgaXBpY19zYXZlZF9zdGF0ZS5zaWNmcik7CisJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NJUFJSX0EsIGlwaWNfc2F2ZWRfc3RhdGUuc2lwcnJbMF0pOworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TSVBSUl9ELCBpcGljX3NhdmVkX3N0YXRlLnNpcHJyWzFdKTsKKwlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIElQSUNfU0lNU1JfSCwgaXBpY19zYXZlZF9zdGF0ZS5zaW1zclswXSk7CisJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NJTVNSX0wsIGlwaWNfc2F2ZWRfc3RhdGUuc2ltc3JbMV0pOworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TSUNOUiwgaXBpY19zYXZlZF9zdGF0ZS5zaWNucik7CisJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NNUFJSX0EsIGlwaWNfc2F2ZWRfc3RhdGUuc21wcnJbMF0pOworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TTVBSUl9CLCBpcGljX3NhdmVkX3N0YXRlLnNtcHJyWzFdKTsKKwlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIElQSUNfU0VNU1IsIGlwaWNfc2F2ZWRfc3RhdGUuc2Vtc3IpOworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TRUNOUiwgaXBpY19zYXZlZF9zdGF0ZS5zZWNucik7CisJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NFUk1SLCBpcGljX3NhdmVkX3N0YXRlLnNlcm1yKTsKKwlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIElQSUNfU0VSQ1IsIGlwaWNfc2F2ZWRfc3RhdGUuc2VyY3IpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBpcGljX3N1c3BlbmQgTlVMTAorI2RlZmluZSBpcGljX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgaXBpY19zeXNjbGFzcyA9IHsKIAkubmFtZSA9ICJpcGljIiwKKwkuc3VzcGVuZCA9IGlwaWNfc3VzcGVuZCwKKwkucmVzdW1lID0gaXBpY19yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZGV2aWNlX2lwaWMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYwppbmRleCA5ZTgyZDdlLi5iM2I3M2FlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jCkBAIC02NCw3ICs2NCw3IEBACiBwaHlzX2FkZHJfdCBnZXRfcWVfYmFzZSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcWU7Ci0JdW5zaWduZWQgaW50IHNpemU7CisJaW50IHNpemU7CiAJY29uc3QgdTMyICpwcm9wOwogCiAJaWYgKHFlYmFzZSAhPSAtMSkKQEAgLTE1OCw3ICsxNTgsNyBAQAogdW5zaWduZWQgaW50IHFlX2dldF9icmdfY2xrKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpxZTsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlpbnQgc2l6ZTsKIAljb25zdCB1MzIgKnByb3A7CiAKIAlpZiAoYnJnX2NsaykKQEAgLTMwNSw3ICszMDUsNyBAQAogCiBzdGF0aWMgaW50IHFlX3NkbWFfaW5pdCh2b2lkKQogewotCXN0cnVjdCBzZG1hICpzZG1hID0gJnFlX2ltbXItPnNkbWE7CisJc3RydWN0IHNkbWEgX19pb21lbSAqc2RtYSA9ICZxZV9pbW1yLT5zZG1hOwogCXVuc2lnbmVkIGxvbmcgc2RtYV9idWZfb2Zmc2V0OwogCiAJaWYgKCFzZG1hKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2MuYwppbmRleCBkM2M3ZjVhLi4xZDc4MDcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2MuYwpAQCAtODgsNyArODgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBnZXRfY214dWNyX3JlZyh1bnNpZ25lZCBpbnQgdWNjX251bSwgX19iZTMyICoqY214dWNyLAorc3RhdGljIHZvaWQgZ2V0X2NteHVjcl9yZWcodW5zaWduZWQgaW50IHVjY19udW0sIF9fYmUzMiBfX2lvbWVtICoqY214dWNyLAogCXVuc2lnbmVkIGludCAqcmVnX251bSwgdW5zaWduZWQgaW50ICpzaGlmdCkKIHsKIAl1bnNpZ25lZCBpbnQgY214ID0gKCh1Y2NfbnVtICYgMSkgPDwgMSkgKyAodWNjX251bSA+IDMpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKIGludCB1Y2NfbXV4X3NldF9ncmFudF90c2FfYmtwdCh1bnNpZ25lZCBpbnQgdWNjX251bSwgaW50IHNldCwgdTMyIG1hc2spCiB7Ci0JX19iZTMyICpjbXh1Y3I7CisJX19iZTMyIF9faW9tZW0gKmNteHVjcjsKIAl1bnNpZ25lZCBpbnQgcmVnX251bTsKIAl1bnNpZ25lZCBpbnQgc2hpZnQ7CiAKQEAgLTEyMSw3ICsxMjEsNyBAQAogaW50IHVjY19zZXRfcWVfbXV4X3J4dHgodW5zaWduZWQgaW50IHVjY19udW0sIGVudW0gcWVfY2xvY2sgY2xvY2ssCiAJZW51bSBjb21tX2RpciBtb2RlKQogewotCV9fYmUzMiAqY214dWNyOworCV9fYmUzMiBfX2lvbWVtICpjbXh1Y3I7CiAJdW5zaWduZWQgaW50IHJlZ19udW07CiAJdW5zaWduZWQgaW50IHNoaWZ0OwogCXUzMiBjbG9ja19iaXRzID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19mYXN0LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2NfZmFzdC5jCmluZGV4IGJjZjg4ZTYuLjFhZWNiMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19mYXN0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX2Zhc3QuYwpAQCAtNDYsNyArNDYsNyBAQAogCXByaW50ayhLRVJOX0lORk8gInVjY20gIDogYWRkcj0weCVwLCB2YWw9MHglMDh4XG4iLAogCQkgICZ1Y2NmLT51Zl9yZWdzLT51Y2NtLCBpbl9iZTMyKCZ1Y2NmLT51Zl9yZWdzLT51Y2NtKSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAidWNjcyAgOiBhZGRyPTB4JXAsIHZhbD0weCUwMnhcbiIsCi0JCSAgJnVjY2YtPnVmX3JlZ3MtPnVjY3MsIHVjY2YtPnVmX3JlZ3MtPnVjY3MpOworCQkgICZ1Y2NmLT51Zl9yZWdzLT51Y2NzLCBpbl84KCZ1Y2NmLT51Zl9yZWdzLT51Y2NzKSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAidXJmYiAgOiBhZGRyPTB4JXAsIHZhbD0weCUwOHhcbiIsCiAJCSAgJnVjY2YtPnVmX3JlZ3MtPnVyZmIsIGluX2JlMzIoJnVjY2YtPnVmX3JlZ3MtPnVyZmIpKTsKIAlwcmludGsoS0VSTl9JTkZPICJ1cmZzICA6IGFkZHI9MHglcCwgdmFsPTB4JTA0eFxuIiwKQEAgLTY4LDcgKzY4LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJ1cnRyeSA6IGFkZHI9MHglcCwgdmFsPTB4JTA4eFxuIiwKIAkJICAmdWNjZi0+dWZfcmVncy0+dXJ0cnksIGluX2JlMzIoJnVjY2YtPnVmX3JlZ3MtPnVydHJ5KSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZ3VlbXIgOiBhZGRyPTB4JXAsIHZhbD0weCUwMnhcbiIsCi0JCSAgJnVjY2YtPnVmX3JlZ3MtPmd1ZW1yLCB1Y2NmLT51Zl9yZWdzLT5ndWVtcik7CisJCSAgJnVjY2YtPnVmX3JlZ3MtPmd1ZW1yLCBpbl84KCZ1Y2NmLT51Zl9yZWdzLT5ndWVtcikpOwogfQogRVhQT1JUX1NZTUJPTCh1Y2NfZmFzdF9kdW1wX3JlZ3MpOwogCkBAIC05Niw3ICs5Niw3IEBACiAKIHZvaWQgdWNjX2Zhc3RfZW5hYmxlKHN0cnVjdCB1Y2NfZmFzdF9wcml2YXRlICogdWNjZiwgZW51bSBjb21tX2RpciBtb2RlKQogewotCXN0cnVjdCB1Y2NfZmFzdCAqdWZfcmVnczsKKwlzdHJ1Y3QgdWNjX2Zhc3QgX19pb21lbSAqdWZfcmVnczsKIAl1MzIgZ3VtcjsKIAogCXVmX3JlZ3MgPSB1Y2NmLT51Zl9yZWdzOwpAQCAtMTE3LDcgKzExNyw3IEBACiAKIHZvaWQgdWNjX2Zhc3RfZGlzYWJsZShzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqIHVjY2YsIGVudW0gY29tbV9kaXIgbW9kZSkKIHsKLQlzdHJ1Y3QgdWNjX2Zhc3QgKnVmX3JlZ3M7CisJc3RydWN0IHVjY19mYXN0IF9faW9tZW0gKnVmX3JlZ3M7CiAJdTMyIGd1bXI7CiAKIAl1Zl9yZWdzID0gdWNjZi0+dWZfcmVnczsKQEAgLTEzOSw3ICsxMzksNyBAQAogaW50IHVjY19mYXN0X2luaXQoc3RydWN0IHVjY19mYXN0X2luZm8gKiB1Zl9pbmZvLCBzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqKiB1Y2NmX3JldCkKIHsKIAlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKLQlzdHJ1Y3QgdWNjX2Zhc3QgKnVmX3JlZ3M7CisJc3RydWN0IHVjY19mYXN0IF9faW9tZW0gKnVmX3JlZ3M7CiAJdTMyIGd1bXI7CiAJaW50IHJldDsKIApAQCAtMjE2LDEwICsyMTYsMTAgQEAKIAl1Y2NmLT5zdG9wcGVkX3R4ID0gMDsKIAl1Y2NmLT5zdG9wcGVkX3J4ID0gMDsKIAl1Zl9yZWdzID0gdWNjZi0+dWZfcmVnczsKLQl1Y2NmLT5wX3VjY2UgPSAodTMyICopICYgKHVmX3JlZ3MtPnVjY2UpOwotCXVjY2YtPnBfdWNjbSA9ICh1MzIgKikgJiAodWZfcmVncy0+dWNjbSk7CisJdWNjZi0+cF91Y2NlID0gJnVmX3JlZ3MtPnVjY2U7CisJdWNjZi0+cF91Y2NtID0gJnVmX3JlZ3MtPnVjY207CiAjaWZkZWYgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORAotCXVjY2YtPnBfdXRvZHIgPSAodTE2ICopICYgKHVmX3JlZ3MtPnV0b2RyKTsKKwl1Y2NmLT5wX3V0b2RyID0gJnVmX3JlZ3MtPnV0b2RyOwogI2VuZGlmCiAjaWZkZWYgU1RBVElTVElDUwogCXVjY2YtPnR4X2ZyYW1lcyA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCBiNjc4MTAzLi5iNzk1YjNlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTg2NCw3ICs4NjQsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgc3NpemVfdCBjcHVfY29uZmlndXJlX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgY3B1X2NvbmZpZ3VyZV9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IGNvdW50OwogCkBAIC04NzQsOCArODc1LDkgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNwdV9jb25maWd1cmVfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAotCQkJCSAgIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IGNwdV9jb25maWd1cmVfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IGNwdSA9IGRldi0+aWQ7CiAJaW50IHZhbCwgcmM7CkBAIC05MjIsNyArOTI0LDggQEAKIHN0YXRpYyBTWVNERVZfQVRUUihjb25maWd1cmUsIDA2NDQsIGNwdV9jb25maWd1cmVfc2hvdywgY3B1X2NvbmZpZ3VyZV9zdG9yZSk7CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBzc2l6ZV90IGNwdV9wb2xhcml6YXRpb25fc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBjcHVfcG9sYXJpemF0aW9uX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJaW50IGNwdSA9IGRldi0+aWQ7CiAJc3NpemVfdCBjb3VudDsKQEAgLTk1MCw3ICs5NTMsOCBAQAogfQogc3RhdGljIFNZU0RFVl9BVFRSKHBvbGFyaXphdGlvbiwgMDQ0NCwgY3B1X3BvbGFyaXphdGlvbl9zaG93LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19jcHVfYWRkcmVzcyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2NwdV9hZGRyZXNzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgX19jcHVfbG9naWNhbF9tYXBbZGV2LT5pZF0pOwogfQpAQCAtOTcwLDcgKzk3NCw4IEBACiAJLmF0dHJzID0gY3B1X2NvbW1vbl9hdHRycywKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfY2FwYWJpbGl0eShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2NhcGFiaWxpdHkoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OwogCWludCByYzsKQEAgLTk4Miw3ICs5ODcsOCBAQAogfQogc3RhdGljIFNZU0RFVl9BVFRSKGNhcGFiaWxpdHksIDA0NDQsIHNob3dfY2FwYWJpbGl0eSwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaWRsZV9jb3VudChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2lkbGVfY291bnQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzMzkwX2lkbGVfZGF0YSAqaWRsZTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgaWRsZV9jb3VudDsKQEAgLTk5NSw3ICsxMDAxLDggQEAKIH0KIHN0YXRpYyBTWVNERVZfQVRUUihpZGxlX2NvdW50LCAwNDQ0LCBzaG93X2lkbGVfY291bnQsIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzaG93X2lkbGVfdGltZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2lkbGVfdGltZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHMzOTBfaWRsZV9kYXRhICppZGxlOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfdGltZTsKQEAgLTExMTIsNyArMTExOSw5IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3NpemVfdCBfX3JlZiByZXNjYW5fc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorc3RhdGljIHNzaXplX3QgX19yZWYgcmVzY2FuX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCQkgIHNpemVfdCBjb3VudCkKIHsKIAlpbnQgcmM7CkBAIC0xMTIzLDcgKzExMzIsOSBAQAogc3RhdGljIFNZU0RFVl9BVFRSKHJlc2NhbiwgMDIwMCwgTlVMTCwgcmVzY2FuX3N0b3JlKTsKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIHNzaXplX3QgZGlzcGF0Y2hpbmdfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBkaXNwYXRjaGluZ19zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQogewogCXNzaXplX3QgY291bnQ7CiAKQEAgLTExMzMsOCArMTE0NCw5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBkaXNwYXRjaGluZ19zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCQkJIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IGRpc3BhdGNoaW5nX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlpbnQgdmFsLCByYzsKIAljaGFyIGRlbGltOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwppbmRleCBmMmNlZGUzLi5hYjcwZDliIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwpAQCAtMTEwMCw3ICsxMTAwLDkgQEAKIAkJcmV0dXJuIGV0cl9wb3J0MV9vbmxpbmUgPyAmZXRyX3BvcnQxIDogTlVMTDsKIH0KIAotc3RhdGljIHNzaXplX3QgZXRyX29ubGluZV9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGV0cl9vbmxpbmVfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAl1bnNpZ25lZCBpbnQgb25saW5lOwogCkBAIC0xMTA5LDcgKzExMTEsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBldHJfb25saW5lX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCi0JCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAKQEAgLTExMzYsNyArMTEzOSw5IEBACiAKIHN0YXRpYyBTWVNERVZfQVRUUihvbmxpbmUsIDA2MDAsIGV0cl9vbmxpbmVfc2hvdywgZXRyX29ubGluZV9zdG9yZSk7CiAKLXN0YXRpYyBzc2l6ZV90IGV0cl9zdGVwcGluZ19jb250cm9sX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgZXRyX3N0ZXBwaW5nX2NvbnRyb2xfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCAoZGV2ID09ICZldHJfcG9ydDBfZGV2KSA/CiAJCSAgICAgICBldHJfZWFjci5lMCA6IGV0cl9lYWNyLmUxKTsKQEAgLTExNDQsNyArMTE0OSw4IEBACiAKIHN0YXRpYyBTWVNERVZfQVRUUihzdGVwcGluZ19jb250cm9sLCAwNDAwLCBldHJfc3RlcHBpbmdfY29udHJvbF9zaG93LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3QgZXRyX21vZGVfY29kZV9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGV0cl9tb2RlX2NvZGVfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJaWYgKCFldHJfcG9ydDBfb25saW5lICYmICFldHJfcG9ydDFfb25saW5lKQogCQkvKiBTdGF0dXMgd29yZCBpcyBub3QgdXB0b2RhdGUgaWYgYm90aCBwb3J0cyBhcmUgb2ZmbGluZS4gKi8KQEAgLTExNTUsNyArMTE2MSw4IEBACiAKIHN0YXRpYyBTWVNERVZfQVRUUihzdGF0ZV9jb2RlLCAwNDAwLCBldHJfbW9kZV9jb2RlX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBldHJfdW50dW5lZF9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGV0cl91bnR1bmVkX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBldHJfYWliICphaWIgPSBldHJfYWliX2Zyb21fZGV2KGRldik7CiAKQEAgLTExNjYsNyArMTE3Myw4IEBACiAKIHN0YXRpYyBTWVNERVZfQVRUUih1bnR1bmVkLCAwNDAwLCBldHJfdW50dW5lZF9zaG93LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3QgZXRyX25ldHdvcmtfaWRfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBldHJfbmV0d29ya19pZF9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZXRyX2FpYiAqYWliID0gZXRyX2FpYl9mcm9tX2RldihkZXYpOwogCkBAIC0xMTc3LDcgKzExODUsOCBAQAogCiBzdGF0aWMgU1lTREVWX0FUVFIobmV0d29yaywgMDQwMCwgZXRyX25ldHdvcmtfaWRfc2hvdywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IGV0cl9pZF9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGV0cl9pZF9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBldHJfYWliICphaWIgPSBldHJfYWliX2Zyb21fZGV2KGRldik7CiAKQEAgLTExODgsNyArMTE5Nyw4IEBACiAKIHN0YXRpYyBTWVNERVZfQVRUUihpZCwgMDQwMCwgZXRyX2lkX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBldHJfcG9ydF9udW1iZXJfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBldHJfcG9ydF9udW1iZXJfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZXRyX2FpYiAqYWliID0gZXRyX2FpYl9mcm9tX2RldihkZXYpOwogCkBAIC0xMTk5LDcgKzEyMDksOCBAQAogCiBzdGF0aWMgU1lTREVWX0FUVFIocG9ydCwgMDQwMCwgZXRyX3BvcnRfbnVtYmVyX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBldHJfY291cGxlZF9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGV0cl9jb3VwbGVkX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGV0cl9haWIgKmFpYiA9IGV0cl9haWJfZnJvbV9kZXYoZGV2KTsKIApAQCAtMTIxMCw3ICsxMjIxLDggQEAKIAogc3RhdGljIFNZU0RFVl9BVFRSKGNvdXBsZWQsIDA0MDAsIGV0cl9jb3VwbGVkX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBldHJfbG9jYWxfdGltZV9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGV0cl9sb2NhbF90aW1lX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGV0cl9haWIgKmFpYiA9IGV0cl9haWJfZnJvbV9kZXYoZGV2KTsKIApAQCAtMTIyMSw3ICsxMjMzLDggQEAKIAogc3RhdGljIFNZU0RFVl9BVFRSKGxvY2FsX3RpbWUsIDA0MDAsIGV0cl9sb2NhbF90aW1lX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBldHJfdXRjX29mZnNldF9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGV0cl91dGNfb2Zmc2V0X3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGV0cl9haWIgKmFpYiA9IGV0cl9haWJfZnJvbV9kZXYoZGV2KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggODRhN2ZlZC4uMTEyMzBiMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC0zMSw3ICszMSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgX19pbnRlcnJ1cHRfaXNfZGVsaXZlcmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICAgIHN0cnVjdCBpbnRlcnJ1cHRfaW5mbyAqaW50aSkKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpCiB7CiAJc3dpdGNoIChpbnRpLT50eXBlKSB7CiAJY2FzZSBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZOgpAQCAtOTEsNyArOTEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfX3NldF9pbnRlcmNlcHRfaW5kaWNhdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgICBzdHJ1Y3QgaW50ZXJydXB0X2luZm8gKmludGkpCisJCQkJICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogewogCXN3aXRjaCAoaW50aS0+dHlwZSkgewogCWNhc2UgS1ZNX1MzOTBfSU5UX0VNRVJHRU5DWToKQEAgLTExMSw3ICsxMTEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2RvX2RlbGl2ZXJfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICBzdHJ1Y3QgaW50ZXJydXB0X2luZm8gKmludGkpCisJCQkJICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogewogCWNvbnN0IHVuc2lnbmVkIHNob3J0IHRhYmxlW10gPSB7IDIsIDQsIDQsIDYgfTsKIAlpbnQgcmMsIGV4Y2VwdGlvbiA9IDA7CkBAIC0yOTAsOSArMjkwLDkgQEAKIAogaW50IGt2bV9jcHVfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IGxvY2FsX2ludGVycnVwdCAqbGkgPSAmdmNwdS0+YXJjaC5sb2NhbF9pbnQ7Ci0Jc3RydWN0IGZsb2F0X2ludGVycnVwdCAqZmkgPSB2Y3B1LT5hcmNoLmxvY2FsX2ludC5mbG9hdF9pbnQ7Ci0Jc3RydWN0IGludGVycnVwdF9pbmZvICAqaW50aTsKKwlzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsaSA9ICZ2Y3B1LT5hcmNoLmxvY2FsX2ludDsKKwlzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IHZjcHUtPmFyY2gubG9jYWxfaW50LmZsb2F0X2ludDsKKwlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gICppbnRpOwogCWludCByYyA9IDA7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmxpLT5hY3RpdmUpKSB7CkBAIC00MDgsOSArNDA4LDkgQEAKIAogdm9pZCBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IGxvY2FsX2ludGVycnVwdCAqbGkgPSAmdmNwdS0+YXJjaC5sb2NhbF9pbnQ7Ci0Jc3RydWN0IGZsb2F0X2ludGVycnVwdCAqZmkgPSB2Y3B1LT5hcmNoLmxvY2FsX2ludC5mbG9hdF9pbnQ7Ci0Jc3RydWN0IGludGVycnVwdF9pbmZvICAqbiwgKmludGkgPSBOVUxMOworCXN0cnVjdCBrdm1fczM5MF9sb2NhbF9pbnRlcnJ1cHQgKmxpID0gJnZjcHUtPmFyY2gubG9jYWxfaW50OworCXN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gdmNwdS0+YXJjaC5sb2NhbF9pbnQuZmxvYXRfaW50OworCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAgKm4sICppbnRpID0gTlVMTDsKIAlpbnQgZGVsaXZlcjsKIAogCV9fcmVzZXRfaW50ZXJjZXB0X2luZGljYXRvcnModmNwdSk7CkBAIC00NjUsOCArNDY1LDggQEAKIAogaW50IGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjb2RlKQogewotCXN0cnVjdCBsb2NhbF9pbnRlcnJ1cHQgKmxpID0gJnZjcHUtPmFyY2gubG9jYWxfaW50OwotCXN0cnVjdCBpbnRlcnJ1cHRfaW5mbyAqaW50aTsKKwlzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsaSA9ICZ2Y3B1LT5hcmNoLmxvY2FsX2ludDsKKwlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7CiAKIAlpbnRpID0ga3phbGxvYyhzaXplb2YoKmludGkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWludGkpCkBAIC00ODcsOSArNDg3LDkgQEAKIGludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLAogCQkgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCkKIHsKLQlzdHJ1Y3QgbG9jYWxfaW50ZXJydXB0ICpsaTsKLQlzdHJ1Y3QgZmxvYXRfaW50ZXJydXB0ICpmaTsKLQlzdHJ1Y3QgaW50ZXJydXB0X2luZm8gKmludGk7CisJc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCAqbGk7CisJc3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmk7CisJc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpOwogCWludCBzaWdjcHU7CiAKIAlpbnRpID0ga3phbGxvYyhzaXplb2YoKmludGkpLCBHRlBfS0VSTkVMKTsKQEAgLTU0NCw4ICs1NDQsOCBAQAogaW50IGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50KQogewotCXN0cnVjdCBsb2NhbF9pbnRlcnJ1cHQgKmxpOwotCXN0cnVjdCBpbnRlcnJ1cHRfaW5mbyAqaW50aTsKKwlzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsaTsKKwlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7CiAKIAlpbnRpID0ga3phbGxvYyhzaXplb2YoKmludGkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWludGkpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggNjU1OGIwOS4uMTc4MmNiYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtNzksMTAgKzc5LDYgQEAKIHsKIH0KIAotdm9pZCBkZWNhY2hlX3ZjcHVzX29uX2NwdShpbnQgY3B1KQotewotfQotCiBpbnQga3ZtX2FyY2hfaGFyZHdhcmVfc2V0dXAodm9pZCkKIHsKIAlyZXR1cm4gMDsKQEAgLTE5OCw2ICsxOTQsNyBAQAogdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlkZWJ1Z191bnJlZ2lzdGVyKGt2bS0+YXJjaC5kYmYpOworCWt2bV9mcmVlX3BoeXNtZW0oa3ZtKTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKGt2bS0+YXJjaC5zY2EpKTsKIAlrZnJlZShrdm0pOwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwpAQCAtMjUwLDExICsyNDcsMTYgQEAKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2JlYSA9IDE7CiB9CiAKKy8qIFRoZSBjdXJyZW50IGNvZGUgY2FuIGhhdmUgdXAgdG8gMjU2IHBhZ2VzIGZvciB2aXJ0aW8gKi8KKyNkZWZpbmUgVklSVElPREVTQ1NQQUNFICgyNTZ1bCAqIDQwOTZ1bCkKKwogaW50IGt2bV9hcmNoX3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWF0b21pY19zZXQoJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncywgQ1BVU1RBVF9aQVJDSCk7Ci0JdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc2xtID0gMHhmZmZmZmZmZmZmVUw7Ci0JdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yID0gMHgwMDAwMDAwMDAwMDA7CisJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc2xtID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X21lbXNpemUgKworCQkJCSAgICAgIHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9vcmlnaW4gKworCQkJCSAgICAgIFZJUlRJT0RFU0NTUEFDRSAtIDF1bDsKKwl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3IgPSB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luOwogCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5lY2IgICA9IDI7CiAJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmVjYSAgID0gMHhDMTAwMjAwMVU7CiAJc2V0dXBfdGltZXIoJnZjcHUtPmFyY2guY2tjX3RpbWVyLCBrdm1fczM5MF9pZGxlX3dha2V1cCwKQEAgLTI3Myw3ICsyNzUsOCBAQAogCWlmICghdmNwdSkKIAkJZ290byBvdXRfbm9tZW07CiAKLQl2Y3B1LT5hcmNoLnNpZV9ibG9jayA9IChzdHJ1Y3Qgc2llX2Jsb2NrICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwl2Y3B1LT5hcmNoLnNpZV9ibG9jayA9IChzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrICopCisJCQkJCWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAogCWlmICghdmNwdS0+YXJjaC5zaWVfYmxvY2spCiAJCWdvdG8gb3V0X2ZyZWVfY3B1OwpAQCAtNjcyLDYgKzY3NSwxMCBAQAogCXJldHVybiAwOwogfQogCit2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvdyhzdHJ1Y3Qga3ZtICprdm0pCit7Cit9CisKIGdmbl90IHVuYWxpYXNfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogewogCXJldHVybiBnZm47CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IGMwMjI4NmMuLjJlMmQyZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAogc3RhdGljIHZvaWQgaGFuZGxlX3N0c2lfM18yXzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzaW5mb18zXzJfMiAqbWVtKQogewotCXN0cnVjdCBmbG9hdF9pbnRlcnJ1cHQgKmZpID0gJnZjcHUtPmt2bS0+YXJjaC5mbG9hdF9pbnQ7CisJc3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSAmdmNwdS0+a3ZtLT5hcmNoLmZsb2F0X2ludDsKIAlpbnQgY3B1cyA9IDA7CiAJaW50IG47CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vc2lncC5jIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKaW5kZXggMGEyMzZhYy4uNWE1NTYxMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogc3RhdGljIGludCBfX3NpZ3Bfc2Vuc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY3B1X2FkZHIsIHU2NCAqcmVnKQogewotCXN0cnVjdCBmbG9hdF9pbnRlcnJ1cHQgKmZpID0gJnZjcHUtPmt2bS0+YXJjaC5mbG9hdF9pbnQ7CisJc3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSAmdmNwdS0+a3ZtLT5hcmNoLmZsb2F0X2ludDsKIAlpbnQgcmM7CiAKIAlpZiAoY3B1X2FkZHIgPj0gS1ZNX01BWF9WQ1BVUykKQEAgLTcxLDkgKzcxLDkgQEAKIAogc3RhdGljIGludCBfX3NpZ3BfZW1lcmdlbmN5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGNwdV9hZGRyKQogewotCXN0cnVjdCBmbG9hdF9pbnRlcnJ1cHQgKmZpID0gJnZjcHUtPmt2bS0+YXJjaC5mbG9hdF9pbnQ7Ci0Jc3RydWN0IGxvY2FsX2ludGVycnVwdCAqbGk7Ci0Jc3RydWN0IGludGVycnVwdF9pbmZvICppbnRpOworCXN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gJnZjcHUtPmt2bS0+YXJjaC5mbG9hdF9pbnQ7CisJc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCAqbGk7CisJc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpOwogCWludCByYzsKIAogCWlmIChjcHVfYWRkciA+PSBLVk1fTUFYX1ZDUFVTKQpAQCAtMTA4LDkgKzEwOCw5IEBACiAKIHN0YXRpYyBpbnQgX19zaWdwX3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY3B1X2FkZHIsIGludCBzdG9yZSkKIHsKLQlzdHJ1Y3QgZmxvYXRfaW50ZXJydXB0ICpmaSA9ICZ2Y3B1LT5rdm0tPmFyY2guZmxvYXRfaW50OwotCXN0cnVjdCBsb2NhbF9pbnRlcnJ1cHQgKmxpOwotCXN0cnVjdCBpbnRlcnJ1cHRfaW5mbyAqaW50aTsKKwlzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9ICZ2Y3B1LT5rdm0tPmFyY2guZmxvYXRfaW50OworCXN0cnVjdCBrdm1fczM5MF9sb2NhbF9pbnRlcnJ1cHQgKmxpOworCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTsKIAlpbnQgcmM7CiAKIAlpZiAoY3B1X2FkZHIgPj0gS1ZNX01BWF9WQ1BVUykKQEAgLTE2OSw5ICsxNjksOSBAQAogc3RhdGljIGludCBfX3NpZ3Bfc2V0X3ByZWZpeChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjcHVfYWRkciwgdTMyIGFkZHJlc3MsCiAJCQkgICAgIHU2NCAqcmVnKQogewotCXN0cnVjdCBmbG9hdF9pbnRlcnJ1cHQgKmZpID0gJnZjcHUtPmt2bS0+YXJjaC5mbG9hdF9pbnQ7Ci0Jc3RydWN0IGxvY2FsX2ludGVycnVwdCAqbGk7Ci0Jc3RydWN0IGludGVycnVwdF9pbmZvICppbnRpOworCXN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gJnZjcHUtPmt2bS0+YXJjaC5mbG9hdF9pbnQ7CisJc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCAqbGk7CisJc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpOwogCWludCByYzsKIAl1OCB0bXA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvbWlnb3Ivc2V0dXAuYwppbmRleCAwMWFmNDQyLi45NjNjOTkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL21pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9taWdvci9zZXR1cC5jCkBAIC0zMCw3ICszMCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtYzkxeF9pbmZvID0gewogCS5mbGFncyA9IFNNQzkxWF9VU0VfMTZCSVQsCi0JLmlycV9mbGFncyA9IElSUUZfVFJJR0dFUl9ISUdILAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfZXRoX3Jlc291cmNlc1tdID0gewpAQCAtNDIsNyArNDEsNyBAQAogCX0sCiAJWzFdID0gewogCQkuc3RhcnQgID0gMzIsIC8qIElSUTAgKi8KLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXN5c2ZzLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zeXNmcy5jCmluZGV4IDUxYjU3YzAuLjM0N2VlMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXN5c2ZzLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc3lzZnMuYwpAQCAtMjMsNyArMjMsOCBAQAogfTsKIEVYUE9SVF9TWU1CT0woZG1hX3N5c2NsYXNzKTsKIAotc3RhdGljIHNzaXplX3QgZG1hX3Nob3dfZGV2aWNlcyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBkbWFfc2hvd19kZXZpY2VzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IGxlbiA9IDA7CiAJaW50IGk7CkBAIC01NywxMyArNTgsMTUgQEAKIH0KIHBvc3Rjb3JlX2luaXRjYWxsKGRtYV9zeXNjbGFzc19pbml0KTsKIAotc3RhdGljIHNzaXplX3QgZG1hX3Nob3dfZGV2X2lkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGRtYV9zaG93X2Rldl9pZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gdG9fZG1hX2NoYW5uZWwoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY2hhbm5lbC0+ZGV2X2lkKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZG1hX3N0b3JlX2Rldl9pZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9IHRvX2RtYV9jaGFubmVsKGRldik7CkBAIC03NCw2ICs3Nyw3IEBACiBzdGF0aWMgU1lTREVWX0FUVFIoZGV2X2lkLCBTX0lSVUdPIHwgU19JV1VTUiwgZG1hX3Nob3dfZGV2X2lkLCBkbWFfc3RvcmVfZGV2X2lkKTsKIAogc3RhdGljIHNzaXplX3QgZG1hX3N0b3JlX2NvbmZpZyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9IHRvX2RtYV9jaGFubmVsKGRldik7CkBAIC04NywxMyArOTEsMTUgQEAKIAogc3RhdGljIFNZU0RFVl9BVFRSKGNvbmZpZywgU19JV1VTUiwgTlVMTCwgZG1hX3N0b3JlX2NvbmZpZyk7CiAKLXN0YXRpYyBzc2l6ZV90IGRtYV9zaG93X21vZGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgZG1hX3Nob3dfbW9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gdG9fZG1hX2NoYW5uZWwoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIGNoYW5uZWwtPm1vZGUpOwogfQogCiBzdGF0aWMgc3NpemVfdCBkbWFfc3RvcmVfbW9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwgPSB0b19kbWFfY2hhbm5lbChkZXYpOwpAQCAtMTA0LDcgKzExMCw4IEBACiBzdGF0aWMgU1lTREVWX0FUVFIobW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsIGRtYV9zaG93X21vZGUsIGRtYV9zdG9yZV9tb2RlKTsKIAogI2RlZmluZSBkbWFfcm9fYXR0cihmaWVsZCwgZm10KQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IGRtYV9zaG93XyMjZmllbGQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQlcCitzdGF0aWMgc3NpemVfdCBkbWFfc2hvd18jI2ZpZWxkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIAkJXAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwgPSB0b19kbWFfY2hhbm5lbChkZXYpOwkJXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgZm10LCBjaGFubmVsLT5maWVsZCk7CQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvTWFrZWZpbGUKaW5kZXggZmVmMjhlMi4uNjY2OGU2MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBACiAjS0JVSUxEX0NGTEFHUyArPSAtZyAtcGlwZSAtZmNhbGwtdXNlZC1nNSAtZmNhbGwtdXNlZC1nNwogS0JVSUxEX0NGTEFHUyArPSAtbTMyIC1waXBlIC1tbm8tZnB1IC1mY2FsbC11c2VkLWc1IC1mY2FsbC11c2VkLWc3CiBLQlVJTERfQUZMQUdTICs9IC1tMzIKK0NQUEZMQUdTX3ZtbGludXgubGRzICs9IC1tMzIKIAogI0xERkxBR1Nfdm1saW51eCA9IC1OIC1UdGV4dCAweGYwMDA0MDAwCiAjICBTaW5jZSAyLjUuNDAsIHRoZSBmaXJzdCBzdGFnZSBpcyBsZWZ0IG5vdCBidGZpeC1lZC4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKaW5kZXggNjcwNzQyMi4uNTI2N2Q0OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIENQVSBpZGxlIGNhbGxiYWNrIGZ1bmN0aW9uCiAgKiBTZWUgLi4uL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYwogICovCi12b2lkIGFwY19zd2lmdF9pZGxlKHZvaWQpCitzdGF0aWMgdm9pZCBhcGNfc3dpZnRfaWRsZSh2b2lkKQogewogI2lmZGVmIEFQQ19ERUJVR19MRUQKIAlzZXRfYXV4aW8oMHgwMCwgQVVYSU9fTEVEKTsgCkBAIC04NSw1NCArODUsNzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhcGNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYsIAotCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgX19hcmcpCitzdGF0aWMgbG9uZyBhcGNfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgX19hcmcpCiB7CiAJX191OCBpbmFyZywgX191c2VyICphcmc7CiAKIAlhcmcgPSAoX191OCBfX3VzZXIgKikgX19hcmc7CisKKwlsb2NrX2tlcm5lbCgpOworCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEFQQ0lPQ0dGQU5DVEw6Ci0JCWlmIChwdXRfdXNlcihhcGNfcmVhZGIoQVBDX0ZBTkNUTF9SRUcpICYgQVBDX1JFR01BU0ssIGFyZykpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChwdXRfdXNlcihhcGNfcmVhZGIoQVBDX0ZBTkNUTF9SRUcpICYgQVBDX1JFR01BU0ssIGFyZykpIHsKKwkJCXVubG9ja19rZXJuZWwoKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBBUENJT0NHQ1BXUjoKLQkJaWYgKHB1dF91c2VyKGFwY19yZWFkYihBUENfQ1BPV0VSX1JFRykgJiBBUENfUkVHTUFTSywgYXJnKSkKKwkJaWYgKHB1dF91c2VyKGFwY19yZWFkYihBUENfQ1BPV0VSX1JFRykgJiBBUENfUkVHTUFTSywgYXJnKSkgeworCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEFQQ0lPQ0dCUE9SVDoKLQkJaWYgKHB1dF91c2VyKGFwY19yZWFkYihBUENfQlBPUlRfUkVHKSAmIEFQQ19CUE1BU0ssIGFyZykpCisJCWlmIChwdXRfdXNlcihhcGNfcmVhZGIoQVBDX0JQT1JUX1JFRykgJiBBUENfQlBNQVNLLCBhcmcpKSB7CisJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQogCQlicmVhazsKIAogCWNhc2UgQVBDSU9DU0ZBTkNUTDoKLQkJaWYgKGdldF91c2VyKGluYXJnLCBhcmcpKQorCQlpZiAoZ2V0X3VzZXIoaW5hcmcsIGFyZykpIHsKKwkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAtRUZBVUxUOworCQl9CiAJCWFwY193cml0ZWIoaW5hcmcgJiBBUENfUkVHTUFTSywgQVBDX0ZBTkNUTF9SRUcpOwogCQlicmVhazsKIAljYXNlIEFQQ0lPQ1NDUFdSOgotCQlpZiAoZ2V0X3VzZXIoaW5hcmcsIGFyZykpCisJCWlmIChnZXRfdXNlcihpbmFyZywgYXJnKSkgeworCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KIAkJYXBjX3dyaXRlYihpbmFyZyAmIEFQQ19SRUdNQVNLLCBBUENfQ1BPV0VSX1JFRyk7CiAJCWJyZWFrOwogCWNhc2UgQVBDSU9DU0JQT1JUOgotCQlpZiAoZ2V0X3VzZXIoaW5hcmcsIGFyZykpCisJCWlmIChnZXRfdXNlcihpbmFyZywgYXJnKSkgeworCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KIAkJYXBjX3dyaXRlYihpbmFyZyAmIEFQQ19CUE1BU0ssIEFQQ19CUE9SVF9SRUcpOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX07CiAKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFwY19mb3BzID0gewotCS5pb2N0bCA9CWFwY19pb2N0bCwKLQkub3BlbiA9CQlhcGNfb3BlbiwKLQkucmVsZWFzZSA9CWFwY19yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9CWFwY19pb2N0bCwKKwkub3BlbiA9CQkJYXBjX29wZW4sCisJLnJlbGVhc2UgPQkJYXBjX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgYXBjX21pc2NkZXYgPSB7IEFQQ19NSU5PUiwgQVBDX0RFVk5BTUUsICZhcGNfZm9wcyB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggY2QzZjc2OS4uYjViYjk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xOCwxOCArMTgsNiBAQAogewogCURFRklORShBT0ZGX3Rhc2tfdGhyZWFkLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZCkpOwogCUJMQU5LKCk7Ci0JLyogWFhYIFRoaXMgaXMgdGhlIHN0dWZmIGZvciBzY2xvdy5TLCBraWxsIGl0LiAqLwotCURFRklORShBT0ZGX3Rhc2tfcGlkLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBpZCkpOwotCURFRklORShBT0ZGX3Rhc2tfdWlkLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHVpZCkpOwotCURFRklORShBT0ZGX3Rhc2tfZ2lkLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGdpZCkpOwotCURFRklORShBT0ZGX3Rhc2tfZXVpZCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBldWlkKSk7Ci0JREVGSU5FKEFPRkZfdGFza19lZ2lkLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGVnaWQpKTsKLQkvKiBERUZJTkUoVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2spKTsgKi8KLQlERUZJTkUoQVNJWl90YXNrX3VpZCwJc2l6ZW9mKGN1cnJlbnQtPnVpZCkpOwotCURFRklORShBU0laX3Rhc2tfZ2lkLAlzaXplb2YoY3VycmVudC0+Z2lkKSk7Ci0JREVGSU5FKEFTSVpfdGFza19ldWlkLAlzaXplb2YoY3VycmVudC0+ZXVpZCkpOwotCURFRklORShBU0laX3Rhc2tfZWdpZCwJc2l6ZW9mKGN1cnJlbnQtPmVnaWQpKTsKLQlCTEFOSygpOwogCURFRklORShBT0ZGX3RocmVhZF9mb3JrX2twc3IsCiAJCQlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgZm9ya19rcHNyKSk7CiAJQkxBTksoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2VidXMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2VidXMuYwppbmRleCA5MmM2ZmMwLi45NzI5NDIzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9lYnVzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZWJ1cy5jCkBAIC02OSw3ICs2OSw3IEBACiAKIC8qCiAgKi8KLWludCBfX2luaXQgZWJ1c19ibGFja2xpc3RfaXJxKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW50IF9faW5pdCBlYnVzX2JsYWNrbGlzdF9pcnEoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgZWJ1c19kZXZpY2VfaXJxICpkcDsKIApAQCAtODMsOCArODMsOCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9faW5pdCBmaWxsX2VidXNfY2hpbGQoc3RydWN0IGRldmljZV9ub2RlICpkcCwKLQkJCSAgICBzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZCAqZGV2KQorc3RhdGljIHZvaWQgX19pbml0IGZpbGxfZWJ1c19jaGlsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAorCQkJCSAgIHN0cnVjdCBsaW51eF9lYnVzX2NoaWxkICpkZXYpCiB7CiAJY29uc3QgaW50ICpyZWdzOwogCWNvbnN0IGludCAqaXJxczsKQEAgLTE0NCw3ICsxNDQsOCBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgZmlsbF9lYnVzX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIF9faW5pdCBmaWxsX2VidXNfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJICAgIHN0cnVjdCBsaW51eF9lYnVzX2RldmljZSAqZGV2KQogewogCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKIAlzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZCAqY2hpbGQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwppbmRleCA0YmNmZTU0Li4yZjk2MjU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vdmFkZHJzLmg+CiAjaW5jbHVkZSA8YXNtL21lbXJlZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpZmRlZiBDT05GSUdfU1VONAogI2luY2x1ZGUgPGFzbS9wZ3RzdW40Lmg+CiAjZWxzZQpAQCAtMTMxNyw3ICsxMzE4LDYgQEAKIAlibmUJbGludXhfZmFzdF9zeXNjYWxsCiAJIC8qIEp1c3QgZG8gZmlyc3QgaW5zbiBmcm9tIFNBVkVfQUxMIGluIHRoZSBkZWxheSBzbG90ICovCiAKLQkuZ2xvYmwJc3lzY2FsbF9pc190b29faGFyZAogc3lzY2FsbF9pc190b29faGFyZDoKIAlTQVZFX0FMTF9IRUFECiAJIHJkCSV3aW0sICVsMwpAQCAtMTU0NCw4ICsxNTQ0LDcgQEAKICNlbmRpZgogCiAJLmFsaWduCTQKLQkuZ2xvYmwJX19oYW5kbGVfZXhjZXB0aW9uLCBmbHVzaF9wYXRjaF9leGNlcHRpb24KLV9faGFuZGxlX2V4Y2VwdGlvbjoKKwkuZ2xvYmwJZmx1c2hfcGF0Y2hfZXhjZXB0aW9uCiBmbHVzaF9wYXRjaF9leGNlcHRpb246CiAJRkxVU0hfQUxMX0tFUk5FTF9XSU5ET1dTOwogCWxkZAlbJW8wXSwgJW82CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9ldHJhcC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvZXRyYXAuUwppbmRleCBmMzdkOTYxLi5lODA2ZmNkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9ldHJhcC5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2V0cmFwLlMKQEAgLTIyOCw3ICsyMjgsNiBAQAogCSAqLwogI2RlZmluZSBnbG9iX3RtcCAgICAgZzEKIAotCS5nbG9ibAl0c2V0dXBfc3VuNGNfc3RhY2tjaGsKIHRzZXR1cF9zdW40Y19zdGFja2NoazoKIAkvKiBEb25lIGJ5IGNhbGxlcjogYW5kY2MgJXNwLCAweDcsICVnMCAqLwogCWJuZQl0cmFwX3NldHVwX3VzZXJfc3RhY2tfaXNfYm9saXhlZApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZC5TCmluZGV4IDNiZmQ2MDguLjUwZDlhMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkLlMKQEAgLTMyLDcgKzMyLDYgQEAKICAqLwogCiAJLmFsaWduIDQKLSAgICAgICAgLmdsb2JsICBjcHV0eXAKIGNwdXR5cDoKICAgICAgICAgLndvcmQgICAxCiAKQEAgLTEyODAsNyArMTI3OSw2IEBACiAgKiBnZXRzIGluaXRpYWxpemVkIGluIGMtY29kZSBzbyBhbGwgcm91dGluZXMgY2FuIHVzZSBpdC4KICAqLwogCi0JLmdsb2JsCXByb21fdmVjdG9yX3AKIHByb21fdmVjdG9yX3A6CiAJCS53b3JkIDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaWRwcm9tLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYwppbmRleCA3MjIwNTYyLi5mYzUxMWYzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYwpAQCAtMjQsNyArMjQsNyBAQAogICogb2YgdGhlIFNwYXJjIENQVSBhbmQgaGF2ZSBhIG1lYW5pbmdmdWwgSURQUk9NIG1hY2h0eXBlIHZhbHVlIHRoYXQgd2UKICAqIGtub3cgYWJvdXQuICBTZWUgYXNtLXNwYXJjL21hY2hpbmVzLmggZm9yIGVtcGlyaWNhbCBjb25zdGFudHMuCiAgKi8KLXN0cnVjdCBTdW5fTWFjaGluZV9Nb2RlbHMgU3VuX01hY2hpbmVzW05VTV9TVU5fTUFDSElORVNdID0geworc3RhdGljIHN0cnVjdCBTdW5fTWFjaGluZV9Nb2RlbHMgU3VuX01hY2hpbmVzW05VTV9TVU5fTUFDSElORVNdID0gewogLyogRmlyc3QsIFN1bjQncyAqLwogeyAiU3VuIDQvMTAwIFNlcmllcyIsIChTTV9TVU40IHwgU01fNF8xMTApIH0sCiB7ICJTdW4gNC8yMDAgU2VyaWVzIiwgKFNNX1NVTjQgfCBTTV80XzI2MCkgfSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKaW5kZXggN2IxNzUyMi4uNDg3OTYwOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKQEAgLTQ5LDEzICs0OSwxNiBAQAogCiAjZGVmaW5lIG1tdV9pbnZhbF9kbWFfYXJlYShwLCBsKQkvKiBBbnRvbiBwdWxsZWQgaXQgb3V0IGZvciAyLjQuMC14eCAqLwogCi1zdHJ1Y3QgcmVzb3VyY2UgKl9zcGFyY19maW5kX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqciwgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgc3RydWN0IHJlc291cmNlICpfc3BhcmNfZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnIsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyk7CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKl9zcGFyY19pb3JlbWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgYnVzLCB1MzIgcGEsIGludCBzeik7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICpfc3BhcmNfYWxsb2NfaW8odW5zaWduZWQgaW50IGJ1c25vLCB1bnNpZ25lZCBsb25nIHBoeXMsCiAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBjaGFyICpuYW1lKTsKIHN0YXRpYyB2b2lkIF9zcGFyY19mcmVlX2lvKHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIAorc3RhdGljIHZvaWQgcmVnaXN0ZXJfcHJvY19zcGFyY19pb3BvcnQodm9pZCk7CisKIC8qIFRoaXMgcG9pbnRzIHRvIHRoZSBuZXh0IHRvIHVzZSB2aXJ0dWFsIG1lbW9yeSBmb3IgRFZNQSBtYXBwaW5ncyAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBfc3BhcmNfZHZtYSA9IHsKIAkubmFtZSA9ICJzcGFyY19kdm1hIiwgLnN0YXJ0ID0gRFZNQV9WQUREUiwgLmVuZCA9IERWTUFfRU5EIC0gMQpAQCAtNTM5LDggKzU0Miw2IEBACiAKIGludCBfX2luaXQgc2J1c19hcmNoX3ByZWluaXQodm9pZCkKIHsKLQlleHRlcm4gdm9pZCByZWdpc3Rlcl9wcm9jX3NwYXJjX2lvcG9ydCh2b2lkKTsKLQogCXJlZ2lzdGVyX3Byb2Nfc3BhcmNfaW9wb3J0KCk7CiAKICNpZmRlZiBDT05GSUdfU1VONApAQCAtODUzLDggKzg1NCw4IEBACiAgKiBYWFggVG9vIHNsb3cuIENhbiBoYXZlIDgxOTIgRFZNQSBwYWdlcyBvbiBzdW40bSBpbiB0aGUgd29yc3QgY2FzZS4KICAqIFRoaXMgcHJvYmFibHkgd2FycmFudHMgc29tZSBzb3J0IG9mIGhhc2hpbmcuCiAgKi8KLXN0cnVjdCByZXNvdXJjZSAqCi1fc3BhcmNfZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHVuc2lnbmVkIGxvbmcgaGl0KQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqX3NwYXJjX2ZpbmRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgaGl0KQogewogICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnRtcDsKIApAQCAtODY1LDcgKzg2Niw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgcmVnaXN0ZXJfcHJvY19zcGFyY19pb3BvcnQodm9pZCkKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3Byb2Nfc3BhcmNfaW9wb3J0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJpb19tYXAiLDAsTlVMTCxfc3BhcmNfaW9fZ2V0X2luZm8sJnNwYXJjX2lvbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMKaW5kZXggMDg3MzkwYi4uOTNlMWQxYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogc3RydWN0IGlycWFjdGlvbiBzdGF0aWNfaXJxYWN0aW9uW01BWF9TVEFUSUNfQUxMT0NdOwogaW50IHN0YXRpY19pcnFfY291bnQ7CiAKLXN0cnVjdCB7CitzdGF0aWMgc3RydWN0IHsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaW50IGZsYWdzOwogfSBzcGFyY19pcnFbTlJfSVJRU107CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZGE0OGQyNC4uNGJiNDMwOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMSw2ICsxLDYgQEAKIC8qICBsaW51eC9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogIENvcHlyaWdodCAoQykgMTk5NiBFZGRpZSBDLiBEb3N0ICAgKGVjZEBza3luZXQuYmUpCiAgKi8KIApAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpAQCAtMTc3LDYgKzE3Niw4IEBACiAJbWFjaGluZV9oYWx0KCk7CiB9CiAKKyNpZiAwCisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3BhcmNfYmFja3RyYWNlX2xvY2spOwogCiB2b2lkIF9fc2hvd19iYWNrdHJhY2UodW5zaWduZWQgbG9uZyBmcCkKQEAgLTE5Niw3ICsxOTcsNyBAQAogCQkgICAgICAgcnctPmluc1s0XSwgcnctPmluc1s1XSwKIAkJICAgICAgIHJ3LT5pbnNbNl0sCiAJCSAgICAgICBydy0+aW5zWzddKTsKLQkJcHJpbnRfc3ltYm9sKCIlc1xuIiwgcnctPmluc1s3XSk7CisJCXByaW50aygiJXBTXG4iLCAodm9pZCAqKSBydy0+aW5zWzddKTsKIAkJcncgPSAoc3RydWN0IHJlZ193aW5kb3cgKikgcnctPmluc1s2XTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BhcmNfYmFja3RyYWNlX2xvY2ssIGZsYWdzKTsKQEAgLTIyOCw3ICsyMjksNiBAQAogfQogI2VuZGlmCiAKLSNpZiAwCiB2b2lkIHNob3dfc3RhY2tmcmFtZShzdHJ1Y3Qgc3BhcmNfc3RhY2tmICpzZikKIHsKIAl1bnNpZ25lZCBsb25nIHNpemU7CkBAIC0yNjQsMTQgKzI2NCwxNCBAQAogCiAgICAgICAgIHByaW50aygiUFNSOiAlMDhseCBQQzogJTA4bHggTlBDOiAlMDhseCBZOiAlMDhseCAgICAlc1xuIiwKIAkgICAgICAgci0+cHNyLCByLT5wYywgci0+bnBjLCByLT55LCBwcmludF90YWludGVkKCkpOwotCXByaW50X3N5bWJvbCgiUEM6IDwlcz5cbiIsIHItPnBjKTsKKwlwcmludGsoIlBDOiA8JXBTPlxuIiwgKHZvaWQgKikgci0+cGMpOwogCXByaW50aygiJSVHOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHggICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIiwKIAkgICAgICAgci0+dV9yZWdzWzBdLCByLT51X3JlZ3NbMV0sIHItPnVfcmVnc1syXSwgci0+dV9yZWdzWzNdLAogCSAgICAgICByLT51X3JlZ3NbNF0sIHItPnVfcmVnc1s1XSwgci0+dV9yZWdzWzZdLCByLT51X3JlZ3NbN10pOwogCXByaW50aygiJSVPOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHggICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIiwKIAkgICAgICAgci0+dV9yZWdzWzhdLCByLT51X3JlZ3NbOV0sIHItPnVfcmVnc1sxMF0sIHItPnVfcmVnc1sxMV0sCiAJICAgICAgIHItPnVfcmVnc1sxMl0sIHItPnVfcmVnc1sxM10sIHItPnVfcmVnc1sxNF0sIHItPnVfcmVnc1sxNV0pOwotCXByaW50X3N5bWJvbCgiUlBDOiA8JXM+XG4iLCByLT51X3JlZ3NbMTVdKTsKKwlwcmludGsoIlJQQzogPCVwUz5cbiIsICh2b2lkICopIHItPnVfcmVnc1sxNV0pOwogCiAJcHJpbnRrKCIlJUw6ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseCAgJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLAogCSAgICAgICBydy0+bG9jYWxzWzBdLCBydy0+bG9jYWxzWzFdLCBydy0+bG9jYWxzWzJdLCBydy0+bG9jYWxzWzNdLApAQCAtMzA2LDcgKzMwNiw3IEBACiAJCXJ3ID0gKHN0cnVjdCByZWdfd2luZG93ICopIGZwOwogCQlwYyA9IHJ3LT5pbnNbN107CiAJCXByaW50aygiWyUwOGx4IDogIiwgcGMpOwotCQlwcmludF9zeW1ib2woIiVzIF0gIiwgcGMpOworCQlwcmludGsoIiVwUyBdICIsICh2b2lkICopIHBjKTsKIAkJZnAgPSBydy0+aW5zWzZdOwogCX0gd2hpbGUgKCsrY291bnQgPCAxNik7CiAJcHJpbnRrKCJcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcnRyYXAuUyBiL2FyY2gvc3BhcmMva2VybmVsL3J0cmFwLlMKaW5kZXggY2UzMDA4Mi4uODkxZjQ2MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcnRyYXAuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9ydHJhcC5TCkBAIC0yMjQsOCArMjI0LDYgQEAKIAliCXNpZ25hbF9wCiAJIGxkCVslY3VycHRyICsgVElfRkxBR1NdLCAlZzIKIAotCi0JLmdsb2JsCXN1bjRjX3JldHRfc3RhY2tjaGsKIHN1bjRjX3JldHRfc3RhY2tjaGs6CiAJYmUJMWYKIAkgYW5kCSVmcCwgMHhmZmYsICVnMQkJISBkZWxheSBzbG90CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYwppbmRleCBhMGVhMGJjLi45ZTQ1MWIyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwLmMKQEAgLTY3LDcgKzY3LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyYXBiYXNlOwogCiAvKiBQcmV0dHkgc2ljayBlaD8gKi8KLXZvaWQgcHJvbV9zeW5jX21lKHZvaWQpCitzdGF0aWMgdm9pZCBwcm9tX3N5bmNfbWUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHByb21fdGJyLCBmbGFnczsKIApAQCAtOTcsNyArOTcsNyBAQAogCXJldHVybjsKIH0KIAotdW5zaWduZWQgaW50IGJvb3RfZmxhZ3MgX19pbml0ZGF0YSA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGJvb3RfZmxhZ3MgX19pbml0ZGF0YSA9IDA7CiAjZGVmaW5lIEJPT1RNRV9ERUJVRyAgMHgxCiAKIC8qIEV4cG9ydGVkIGZvciBtbS9pbml0LmM6cGFnaW5nX2luaXQuICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCmluZGV4IDY3MjRhYjkuLjE2MTllYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCkBAIC0zNSwxMyArMzUsOSBAQAogCiAjaW5jbHVkZSAiaXJxLmgiCiAKLWludCBzbXBfbnVtX2NwdXMgPSAxOwogdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjcHVfY2FsbGluX21hcFtOUl9DUFVTXSBfX2luaXRkYXRhID0gezAsfTsKIHVuc2lnbmVkIGNoYXIgYm9vdF9jcHVfaWQgPSAwOwogdW5zaWduZWQgY2hhciBib290X2NwdV9pZDQgPSAwOyAvKiBib290X2NwdV9pZCA8PCAyICovCi1pbnQgc21wX2FjdGl2YXRlZCA9IDA7Ci12b2xhdGlsZSBpbnQgX19jcHVfbnVtYmVyX21hcFtOUl9DUFVTXTsKLXZvbGF0aWxlIGludCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsKIAogY3B1bWFza190IGNwdV9vbmxpbmVfbWFwID0gQ1BVX01BU0tfTk9ORTsKIGNwdW1hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcCA9IENQVV9NQVNLX05PTkU7CkBAIC01NSw5ICs1MSw2IEBACiAgKiBpbnN0cnVjdGlvbiB3aGljaCBpcyBtdWNoIGJldHRlci4uLgogICovCiAKLS8qIFVzZWQgdG8gbWFrZSBiaXRvcHMgYXRvbWljICovCi11bnNpZ25lZCBjaGFyIGJpdG9wc19zcGlubG9jayA9IDA7Ci0KIHZvaWQgX19jcHVpbml0IHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpCiB7CiAJaW50IGNwdV9ub2RlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40Y19pcnEuYwppbmRleCBjNmFjOWZjLi4zNDBmYzM5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40Y19pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40Y19pcnEuYwpAQCAtNjgsNyArNjgsOCBAQAogCiBzdGF0aWMgaW50IHN1bjRjX3BpbF9tYXBbXSA9IHsgMCwgMSwgMiwgMywgNSwgNywgOCwgOSB9OwogCi11bnNpZ25lZCBpbnQgc3VuNGNfc2JpbnRfdG9faXJxKHN0cnVjdCBzYnVzX2RldiAqc2RldiwgdW5zaWduZWQgaW50IHNiaW50KQorc3RhdGljIHVuc2lnbmVkIGludCBzdW40Y19zYmludF90b19pcnEoc3RydWN0IHNidXNfZGV2ICpzZGV2LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2JpbnQpCiB7CiAJaWYgKHNiaW50ID49IHNpemVvZihzdW40Y19waWxfbWFwKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBib2d1cyBTQklOVCAlZFxuIiwgc2Rldi0+cHJvbV9uYW1lLCBzYmludCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCmluZGV4IDhhYzU2NjEuLjEyOTBiNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCkBAIC01MiwxMyArNTIsMTMgQEAKIGV4dGVybiBpbnQgc3RhdGljX2lycV9jb3VudDsKIHVuc2lnbmVkIGNoYXIgY3B1X2xlZHNbMzJdOwogI2lmZGVmIENPTkZJR19TTVAKLXVuc2lnbmVkIGNoYXIgc2J1c190aWRbMzJdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2J1c190aWRbMzJdOwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uICppcnFfYWN0aW9uW05SX0lSUVNdOwogZXh0ZXJuIHNwaW5sb2NrX3QgaXJxX2FjdGlvbl9sb2NrOwogCi1zdHJ1Y3Qgc2J1c19hY3Rpb24geworc3RhdGljIHN0cnVjdCBzYnVzX2FjdGlvbiB7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCS8qIEZvciBTTVAgdGhpcyBuZWVkcyB0byBiZSBleHRlbmRlZCAqLwogfSAqc2J1c19hY3Rpb25zOwpAQCAtMjY3LDcgKzI2Nyw4IEBACiAJCXJldHVybiBpcnE7CiB9CiAKLXVuc2lnbmVkIGludCBzdW40ZF9zYmludF90b19pcnEoc3RydWN0IHNidXNfZGV2ICpzZGV2LCB1bnNpZ25lZCBpbnQgc2JpbnQpCitzdGF0aWMgdW5zaWduZWQgaW50IHN1bjRkX3NiaW50X3RvX2lycShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBzYmludCkKIHsKIAlpZiAoc2JpbnQgPj0gc2l6ZW9mKHNidXNfdG9fcGlsKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBib2d1cyBTQklOVCAlZFxuIiwgc2Rldi0+cHJvbV9uYW1lLCBzYmludCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX2lycS5jCmluZGV4IGI5MmQ2ZDIuLjk0ZTAyZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX2lycS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX2lycS5jCkBAIC0xNTQsNyArMTU0LDggQEAKIAogc3RhdGljIGludCBzdW40bV9waWxfbWFwW10gPSB7IDAsIDIsIDMsIDUsIDcsIDksIDExLCAxMyB9OwogCi11bnNpZ25lZCBpbnQgc3VuNG1fc2JpbnRfdG9faXJxKHN0cnVjdCBzYnVzX2RldiAqc2RldiwgdW5zaWduZWQgaW50IHNiaW50KSAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VuNG1fc2JpbnRfdG9faXJxKHN0cnVjdCBzYnVzX2RldiAqc2RldiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHNiaW50KQogewogCWlmIChzYmludCA+PSBzaXplb2Yoc3VuNG1fcGlsX21hcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYm9ndXMgU0JJTlQgJWRcbiIsIHNkZXYtPnByb21fbmFtZSwgc2JpbnQpOwpAQCAtMTYzLDcgKzE2NCw3IEBACiAJcmV0dXJuIHN1bjRtX3BpbF9tYXBbc2JpbnRdIHwgMHgzMDsKIH0KIAotaW5saW5lIHVuc2lnbmVkIGxvbmcgc3VuNG1fZ2V0X2lycW1hc2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN1bjRtX2dldF9pcnFtYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogICAgIApAQCAtMjgxLDcgKzI4Miw3IEBACiAjZGVmaW5lIFRJTUVSX0lSUSAgCShPQklPX0lOVFIgfCAxMCkKICNkZWZpbmUgUFJPRklMRV9JUlEJKE9CSU9fSU5UUiB8IDE0KQogCi1zdHJ1Y3Qgc3VuNG1fdGltZXJfcmVncyAqc3VuNG1fdGltZXJzOworc3RhdGljIHN0cnVjdCBzdW40bV90aW1lcl9yZWdzICpzdW40bV90aW1lcnM7CiB1bnNpZ25lZCBpbnQgbHZsMTRfcmVzb2x1dGlvbiA9ICgoKDEwMDAwMDAvSFopICsgMSkgPDwgMTApOwogCiBzdGF0aWMgdm9pZCBzdW40bV9jbGVhcl9jbG9ja19pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMKaW5kZXggZmZiODc1YS4uNDA2YWMxYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMKQEAgLTI0NCw4ICsyNDQsOSBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhjcm9zc19jYWxsX2xvY2spOwogCiAvKiBDcm9zcyBjYWxscyBtdXN0IGJlIHNlcmlhbGl6ZWQsIGF0IGxlYXN0IGN1cnJlbnRseS4gKi8KLXZvaWQgc21wNG1fY3Jvc3NfY2FsbChzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsCi0JCSAgICB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCwgdW5zaWduZWQgbG9uZyBhcmc1KQorc3RhdGljIHZvaWQgc21wNG1fY3Jvc3NfY2FsbChzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmc0LCB1bnNpZ25lZCBsb25nIGFyZzUpCiB7CiAJCXJlZ2lzdGVyIGludCBuY3B1cyA9IFNVTjRNX05DUFVTOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzQ0LDcgKzM0NSw3IEBACiAJCWVuYWJsZV9waWxfaXJxKDE0KTsKIH0KIAotdm9pZCBfX2luaXQgc21wNG1fYmxhY2tib3hfaWQodW5zaWduZWQgKmFkZHIpCitzdGF0aWMgdm9pZCBfX2luaXQgc21wNG1fYmxhY2tib3hfaWQodW5zaWduZWQgKmFkZHIpCiB7CiAJaW50IHJkID0gKmFkZHIgJiAweDNlMDAwMDAwOwogCWludCByczEgPSByZCA+PiAxMTsKQEAgLTM1NCw3ICszNTUsNyBAQAogCWFkZHJbMl0gPSAweDgwMDgyMDAzIHwgcmQgfCByczE7CS8qIGFuZCByZWcsIDMsIHJlZyAqLwogfQogCi12b2lkIF9faW5pdCBzbXA0bV9ibGFja2JveF9jdXJyZW50KHVuc2lnbmVkICphZGRyKQorc3RhdGljIHZvaWQgX19pbml0IHNtcDRtX2JsYWNrYm94X2N1cnJlbnQodW5zaWduZWQgKmFkZHIpCiB7CiAJaW50IHJkID0gKmFkZHIgJiAweDNlMDAwMDAwOwogCWludCByczEgPSByZCA+PiAxMTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWUuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWUuYwppbmRleCA1M2NhYWNiLi5hYjNkZDBiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSAiaXJxLmgiCiAKIERFRklORV9TUElOTE9DSyhydGNfbG9jayk7Ci1lbnVtIHNwYXJjX2Nsb2NrX3R5cGUgc3BfY2xvY2tfdHlwOworc3RhdGljIGVudW0gc3BhcmNfY2xvY2tfdHlwZSBzcF9jbG9ja190eXA7CiBERUZJTkVfU1BJTkxPQ0sobW9zdGVrX2xvY2spOwogdm9pZCBfX2lvbWVtICptc3RrNDh0MDJfcmVncyA9IE5VTEw7CiBzdGF0aWMgc3RydWN0IG1vc3RlazQ4dDA4IF9faW9tZW0gKm1zdGs0OHQwOF9yZWdzID0gTlVMTDsKQEAgLTM2Niw3ICszNjYsNyBAQAogZnNfaW5pdGNhbGwoY2xvY2tfaW5pdCk7CiAjZW5kaWYgLyogIUNPTkZJR19TVU40ICovCiAKLXZvaWQgX19pbml0IHNidXNfdGltZV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc2J1c190aW1lX2luaXQodm9pZCkKIHsKIAogCUJURklYVVBTRVRfQ0FMTChidXNfZG9fc2V0dGltZW9mZGF5LCBzYnVzX2RvX3NldHRpbWVvZmRheSwgQlRGSVhVUENBTExfTk9STSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHMuYwppbmRleCA5NzhlOWQ4Li41ZDQ1ZDVmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHMuYwogICoKLSAqIENvcHlyaWdodCAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAxOTk1LCAyMDA4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAyMDAwIEpha3ViIEplbGluZWsgKGpha3ViQHJlZGhhdC5jb20pCiAgKi8KIApAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4gIC8qIGZvciBqaWZmaWVzICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgpAQCAtMzMsOSArMzIsNiBAQAogCXVuc2lnbmVkIGxvbmcgdHlwZTsKIH07CiAKLWludCB0cmFwX2N1cmJ1ZiA9IDA7Ci1zdHJ1Y3QgdHJhcF90cmFjZV9lbnRyeSB0cmFwYnVmWzEwMjRdOwotCiB2b2lkIHN5c2NhbGxfdHJhY2VfZW50cnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcHJpbnRrKCIlc1slZF06ICIsIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKQEAgLTcyLDcgKzY4LDcgQEAKIAlwcm9tX2hhbHQoKTsKIH0KIAotdm9pZCBpbnN0cnVjdGlvbl9kdW1wICh1bnNpZ25lZCBsb25nICpwYykKK3N0YXRpYyB2b2lkIGluc3RydWN0aW9uX2R1bXAodW5zaWduZWQgbG9uZyAqcGMpCiB7CiAJaW50IGk7CiAJCkBAIC0xMTksOCArMTE1LDggQEAKIAkJICAgICAgY291bnQrKyA8IDMwCQkJCSYmCiAgICAgICAgICAgICAgICAgICAgICAgKCgodW5zaWduZWQgbG9uZykgcncpID49IFBBR0VfT0ZGU0VUKQkmJgogCQkgICAgICAhKCgodW5zaWduZWQgbG9uZykgcncpICYgMHg3KSkgewotCQkJcHJpbnRrKCJDYWxsZXJbJTA4bHhdIiwgcnctPmluc1s3XSk7Ci0JCQlwcmludF9zeW1ib2woIjogJXNcbiIsIHJ3LT5pbnNbN10pOworCQkJcHJpbnRrKCJDYWxsZXJbJTA4bHhdOiAlcFNcbiIsIHJ3LT5pbnNbN10sCisJCQkgICAgICAgKHZvaWQgKikgcnctPmluc1s3XSk7CiAJCQlydyA9IChzdHJ1Y3QgcmVnX3dpbmRvdyAqKXJ3LT5pbnNbNl07CiAJCX0KIAl9CkBAIC00NzksMTAgKzQ3NSw2IEBACiAKIGV4dGVybiB2b2lkIHNwYXJjX2NwdV9zdGFydHVwKHZvaWQpOwogCi1pbnQgbGludXhfc21wX3N0aWxsX2luaXR0aW5nOwotdW5zaWduZWQgaW50IHRoaXNjcHVzX3RicjsKLWludCB0aGlzY3B1c19taWQ7Ci0KIHZvaWQgdHJhcF9pbml0KHZvaWQpCiB7CiAJZXh0ZXJuIHZvaWQgdGhyZWFkX2luZm9fb2Zmc2V0c19hcmVfYm9saXhlZF9wZXRlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvd29mLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC93b2YuUwppbmRleCA0YmNlMzhkLi4zYmJjZDhkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC93b2YuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC93b2YuUwpAQCAtMzA2LDcgKzMwNiw2IEBACiAgKiBBcyBub3RlZCBhYm92ZSAlY3VycHRyIGNhbm5vdCBiZSB0b3VjaGVkIGJ5IHRoaXMgcm91dGluZSBhdCBhbGwuCiAgKi8KIAotCS5nbG9ibAlzcHdpbl9zdW40Y19zdGFja2Noawogc3B3aW5fc3VuNGNfc3RhY2tjaGs6CiAJLyogTE9DQVRJT046IFdpbmRvdyB0byBiZSBzYXZlZCBvbiB0aGUgc3RhY2sgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvd3VmLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC93dWYuUwppbmRleCA4MmU1MTQ1Li43NzlmZjc1MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvd3VmLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvd3VmLlMKQEAgLTI0Myw3ICsyNDMsNiBAQAogCSAqLwogCiAJLmFsaWduCTQKLQkuZ2xvYmwJc3VuNGNfZndpbl9zdGFja2Noawogc3VuNGNfZndpbl9zdGFja2NoazoKIAkvKiBMT0NBVElPTjogV2luZG93ICdXJyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2ZhdWx0LmMgYi9hcmNoL3NwYXJjL21tL2ZhdWx0LmMKaW5kZXggMGEzY2Q4Zi4uMzYwNGMyZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vZmF1bHQuYwpAQCAtNDUxLDcgKzQ1MSw3IEBACiB9CiAKIC8qIFRoaXMgYWx3YXlzIGRlYWxzIHdpdGggdXNlciBhZGRyZXNzZXMuICovCi1pbmxpbmUgdm9pZCBmb3JjZV91c2VyX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlKQorc3RhdGljIHZvaWQgZm9yY2VfdXNlcl9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZSkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdC5jCmluZGV4IDc3OTRlY2IuLmUxMDNmMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS92YWMtb3BzLmg+CkBAIC0xMjgsNyArMTI5LDcgQEAKIAlyZXR1cm4gbnI7CiB9CiAKLXVuc2lnbmVkIGxvbmcgY2FsY19tYXhfbG93X3Bmbih2b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY19tYXhfbG93X3Bmbih2b2lkKQogewogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgdG1wID0gcGZuX2Jhc2UgKyAoU1JNTVVfTUFYTUVNID4+IFBBR0VfU0hJRlQpOwpAQCAtMjkyLDcgKzI5Myw3IEBACiAgKgogICogV2Ugc2ltcGx5IGNvcHkgdGhlIDIuNCBpbXBsZW1lbnRhdGlvbiBmb3Igbm93LgogICovCi1pbnQgcGd0X2NhY2hlX3dhdGVyWzJdID0geyAyNSwgNTAgfTsKK3N0YXRpYyBpbnQgcGd0X2NhY2hlX3dhdGVyWzJdID0geyAyNSwgNTAgfTsKIAogdm9pZCBjaGVja19wZ3RfY2FjaGUodm9pZCkKIHsKQEAgLTM1Niw4ICszNTcsNiBAQAogCWRldmljZV9zY2FuKCk7CiB9CiAKLXN0cnVjdCBjYWNoZV9wYWxpYXMgKnNwYXJjX2FsaWFzZXM7Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCB0YWludF9yZWFsX3BhZ2VzKHZvaWQpCiB7CiAJaW50IGk7CkBAIC0zNzUsNyArMzc0LDcgQEAKIAl9CiB9CiAKLXZvaWQgbWFwX2hpZ2hfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCitzdGF0aWMgdm9pZCBtYXBfaGlnaF9yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCmluZGV4IDIzZDMyOTEuLmM2MjRlMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYworKysgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgogCiBlbnVtIG1idXNfbW9kdWxlIHNybW11X21vZHR5cGU7Ci11bnNpZ25lZCBpbnQgaHdidWdfYml0bWFzazsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHdidWdfYml0bWFzazsKIGludCB2YWNfY2FjaGVfc2l6ZTsKIGludCB2YWNfbGluZV9zaXplOwogCkBAIC02MCw3ICs2MCw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBhZ2Vfa2VybmVsOwogCi1wZ2RfdCAqc3JtbXVfc3dhcHBlcl9wZ19kaXI7CitzdGF0aWMgcGdkX3QgKnNybW11X3N3YXBwZXJfcGdfZGlyOwogCiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBGTFVTSF9CRUdJTihtbSkKQEAgLTgzLDEyICs4MywxMiBAQAogY2hhciAqc3JtbXVfbmFtZTsKIAogY3R4ZF90ICpzcm1tdV9jdHhfdGFibGVfcGh5czsKLWN0eGRfdCAqc3JtbXVfY29udGV4dF90YWJsZTsKK3N0YXRpYyBjdHhkX3QgKnNybW11X2NvbnRleHRfdGFibGU7CiAKIGludCB2aWtpbmdfbXhjY19wcmVzZW50Owogc3RhdGljIERFRklORV9TUElOTE9DSyhzcm1tdV9jb250ZXh0X3NwaW5sb2NrKTsKIAotaW50IGlzX2h5cGVyc3BhcmM7CitzdGF0aWMgaW50IGlzX2h5cGVyc3BhcmM7CiAKIC8qCiAgKiBJbiBnZW5lcmFsIGFsbCBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUgVjggYXRvbWljCkBAIC0xMTIsMTEgKzExMiwxMSBAQAogCXJldHVybiAoKHggJiAweEYwMDAwMDAwKSAhPSAwKTsKIH0KIAotaW50IHNybW11X2NhY2hlX3BhZ2V0YWJsZXM7CitzdGF0aWMgaW50IHNybW11X2NhY2hlX3BhZ2V0YWJsZXM7CiAKIC8qIHRoZXNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW4gc3JtbXVfbm9jYWNoZV9jYWxjc2l6ZSgpICovCi11bnNpZ25lZCBsb25nIHNybW11X25vY2FjaGVfc2l6ZTsKLXVuc2lnbmVkIGxvbmcgc3JtbXVfbm9jYWNoZV9lbmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzcm1tdV9ub2NhY2hlX3NpemU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzcm1tdV9ub2NhY2hlX2VuZDsKIAogLyogMSBiaXQgPD0+IDI1NiBieXRlcyBvZiBub2NhY2hlIDw9PiA2NCBQVEVzICovCiAjZGVmaW5lIFNSTU1VX05PQ0FDSEVfQklUTUFQX1NISUZUIChQQUdFX1NISUZUIC0gNCkKQEAgLTMyNCw3ICszMjQsNyBAQAogCXJldHVybiAoU1JNTVVfTk9DQUNIRV9WQUREUiArIChvZmZzZXQgPDwgU1JNTVVfTk9DQUNIRV9CSVRNQVBfU0hJRlQpKTsKIH0KIAotdW5zaWduZWQgaW5saW5lIGxvbmcgc3JtbXVfZ2V0X25vY2FjaGUoaW50IHNpemUsIGludCBhbGlnbikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNybW11X2dldF9ub2NhY2hlKGludCBzaXplLCBpbnQgYWxpZ24pCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTMzNiw3ICszMzYsNyBAQAogCXJldHVybiB0bXA7CiB9CiAKLXZvaWQgc3JtbXVfZnJlZV9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBzaXplKQorc3RhdGljIHZvaWQgc3JtbXVfZnJlZV9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBzaXplKQogewogCWludCBvZmZzZXQ7CiAKQEAgLTM2OSw3ICszNjksOCBAQAogCWJpdF9tYXBfY2xlYXIoJnNybW11X25vY2FjaGVfbWFwLCBvZmZzZXQsIHNpemUpOwogfQogCi12b2lkIHNybW11X2Vhcmx5X2FsbG9jYXRlX3B0YWJsZV9za2VsZXRvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitzdGF0aWMgdm9pZCBzcm1tdV9lYXJseV9hbGxvY2F0ZV9wdGFibGVfc2tlbGV0b24odW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIGVuZCk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHByb2JlX21lbW9yeSh2b2lkKTsJLyogaW4gZmF1bHQuYyAqLwogCkBAIC0zNzcsNyArMzc4LDcgQEAKICAqIFJlc2VydmUgbm9jYWNoZSBkeW5hbWljYWxseSBwcm9wb3J0aW9uYWxseSB0byB0aGUgYW1vdW50IG9mCiAgKiBzeXN0ZW0gUkFNLiAtLSBUb21hcyBTemVwZSA8c3plcGVAcGluZXJlY29yZHMuY29tPiwgSnVuZSAyMDAyCiAgKi8KLXZvaWQgc3JtbXVfbm9jYWNoZV9jYWxjc2l6ZSh2b2lkKQorc3RhdGljIHZvaWQgc3JtbXVfbm9jYWNoZV9jYWxjc2l6ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgc3lzbWVtYXZhaWwgPSBwcm9iZV9tZW1vcnkoKSAvIDEwMjQ7CiAJaW50IHNybW11X25vY2FjaGVfbnBhZ2VzOwpAQCAtMzk4LDcgKzM5OSw3IEBACiAJc3JtbXVfbm9jYWNoZV9lbmQgPSBTUk1NVV9OT0NBQ0hFX1ZBRERSICsgc3JtbXVfbm9jYWNoZV9zaXplOwogfQogCi12b2lkIF9faW5pdCBzcm1tdV9ub2NhY2hlX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzcm1tdV9ub2NhY2hlX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgYml0bWFwX2JpdHM7CiAJcGdkX3QgKnBnZDsKQEAgLTY0NSw3ICs2NDYsNyBAQAogICogbWFwcGluZ3Mgb24gdGhlIGtlcm5lbCBzdGFjayB3aXRob3V0IGFueSBzcGVjaWFsIGNvZGUgYXMgd2UgZGlkCiAgKiBuZWVkIG9uIHRoZSBzdW40Yy4KICAqLwotc3RydWN0IHRocmVhZF9pbmZvICpzcm1tdV9hbGxvY190aHJlYWRfaW5mbyh2b2lkKQorc3RhdGljIHN0cnVjdCB0aHJlYWRfaW5mbyAqc3JtbXVfYWxsb2NfdGhyZWFkX2luZm8odm9pZCkKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsKIApAQCAtMTA0NSwxMyArMTA0NiwxNCBAQAogICogICAgICAgYXJvdW5kIDhtYiBtYXBwZWQgZm9yIHVzLgogICovCiAKLXZvaWQgX19pbml0IGVhcmx5X3BndGFibGVfYWxsb2NmYWlsKGNoYXIgKnR5cGUpCitzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfcGd0YWJsZV9hbGxvY2ZhaWwoY2hhciAqdHlwZSkKIHsKIAlwcm9tX3ByaW50ZigiaW5oZXJpdF9wcm9tX21hcHBpbmdzOiBDYW5ub3QgYWxsb2Mga2VybmVsICVzLlxuIiwgdHlwZSk7CiAJcHJvbV9oYWx0KCk7CiB9CiAKLXZvaWQgX19pbml0IHNybW11X2Vhcmx5X2FsbG9jYXRlX3B0YWJsZV9za2VsZXRvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzcm1tdV9lYXJseV9hbGxvY2F0ZV9wdGFibGVfc2tlbGV0b24odW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwZ2RfdCAqcGdkcDsKIAlwbWRfdCAqcG1kcDsKQEAgLTEwODEsNyArMTA4Myw4IEBACiAJfQogfQogCi12b2lkIF9faW5pdCBzcm1tdV9hbGxvY2F0ZV9wdGFibGVfc2tlbGV0b24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgdm9pZCBfX2luaXQgc3JtbXVfYWxsb2NhdGVfcHRhYmxlX3NrZWxldG9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXBnZF90ICpwZ2RwOwogCXBtZF90ICpwbWRwOwpAQCAtMTExNiw3ICsxMTE5LDggQEAKICAqIGxvb2tpbmcgYXQgdGhlIHByb20ncyBwYWdlIHRhYmxlIGRpcmVjdGx5IHdoaWNoIGlzIHdoYXQgbW9zdAogICogb3RoZXIgT1MncyBkby4gIFl1Y2suLi4gdGhpcyBpcyBtdWNoIGJldHRlci4KICAqLwotdm9pZCBfX2luaXQgc3JtbXVfaW5oZXJpdF9wcm9tX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgdm9pZCBfX2luaXQgc3JtbXVfaW5oZXJpdF9wcm9tX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwZ2RfdCAqcGdkcDsKIAlwbWRfdCAqcG1kcDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vdHN1bmFtaS5TIGIvYXJjaC9zcGFyYy9tbS90c3VuYW1pLlMKaW5kZXggZGIwZDZkZS4uNGU1NWU4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS90c3VuYW1pLlMKKysrIGIvYXJjaC9zcGFyYy9tbS90c3VuYW1pLlMKQEAgLTkzLDcgKzkzLDYgQEAKIAlsZGQJW3NyYyArIG9mZnNldCArIDB4MDBdLCB0MjsgXAogCXN0ZAl0MiwgW2RzdCArIG9mZnNldCArIDB4MDBdOwogCi0JLmdsb2JsCXRzdW5hbWlfY29weV8xcGFnZQogdHN1bmFtaV9jb3B5XzFwYWdlOgogLyogTk9URTogVGhpcyByb3V0aW5lIGhhcyB0byBiZSBzaG9ydGVyIHRoYW4gNzBpbnNucyAtLWpqICovCiAJb3IJJWcwLCAoUEFHRV9TSVpFID4+IDgpLCAlZzEKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9LY29uZmlnIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKaW5kZXggZmNhOTI0Ni4uN2M4ODI2MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L0tjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKQEAgLTE2LDYgKzE2LDcgQEAKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9MTUIKIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKKwlzZWxlY3QgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaWYgU01QCiAKIGNvbmZpZyBHRU5FUklDX1RJTUUKIAlib29sCkBAIC04MSw2ICs4MiwxMCBAQAogCWJvb2wKIAlkZWZfYm9vbCB5CiAKK3NvdXJjZSAiaW5pdC9LY29uZmlnIgorCittZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCisKIGNob2ljZQogCXByb21wdCAiS2VybmVsIHBhZ2Ugc2l6ZSIKIAlkZWZhdWx0IFNQQVJDNjRfUEFHRV9TSVpFXzhLQgpAQCAtOTMsMTkgKzk4LDExIEBACiAJICA4S0IgYW5kIDY0S0Igd29yayBxdWl0ZSB3ZWxsLCBzaW5jZSBTUEFSQyBFTEYgc2VjdGlvbnMKIAkgIHByb3ZpZGUgZm9yIHVwIHRvIDY0S0IgYWxpZ25tZW50LgogCi0JICBUaGVyZWZvcmUsIDUxMktCIGFuZCA0TUIgYXJlIGZvciBleHBlcnQgaGFja2VycyBvbmx5LgotCiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvLCBjaG9vc2UgOEtCLgogCiBjb25maWcgU1BBUkM2NF9QQUdFX1NJWkVfNjRLQgogCWJvb2wgIjY0S0IiCiAKLWNvbmZpZyBTUEFSQzY0X1BBR0VfU0laRV81MTJLQgotCWJvb2wgIjUxMktCIgotCi1jb25maWcgU1BBUkM2NF9QQUdFX1NJWkVfNE1CCi0JYm9vbCAiNE1CIgotCiBlbmRjaG9pY2UKIAogY29uZmlnIFNFQ0NPTVAKQEAgLTEzNiwxNCArMTMzLDEwIEBACiAJICBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMuCiAJICBTYXkgTiBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIENQVSBob3RwbHVnLgogCi1zb3VyY2UgImluaXQvS2NvbmZpZyIKLQogY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKIAlib29sCiAJZGVmYXVsdCB5CiAKLW1lbnUgIkdlbmVyYWwgbWFjaGluZSBzZXR1cCIKLQogc291cmNlICJrZXJuZWwvdGltZS9LY29uZmlnIgogCiBjb25maWcgU01QCkBAIC0yMjUsMTEgKzIxOCwxMCBAQAogCWJvb2wgIjRNQiIKIAogY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzUxMksKLQlkZXBlbmRzIG9uICFTUEFSQzY0X1BBR0VfU0laRV80TUIgJiYgIVNQQVJDNjRfUEFHRV9TSVpFXzUxMktCCiAJYm9vbCAiNTEySyIKIAogY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0SwotCWRlcGVuZHMgb24gIVNQQVJDNjRfUEFHRV9TSVpFXzRNQiAmJiAhU1BBUkM2NF9QQUdFX1NJWkVfNTEyS0IgJiYgIVNQQVJDNjRfUEFHRV9TSVpFXzY0S0IKKwlkZXBlbmRzIG9uICFTUEFSQzY0X1BBR0VfU0laRV82NEtCCiAJYm9vbCAiNjRLIgogCiBlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9NYWtlZmlsZSBiL2FyY2gvc3BhcmM2NC9NYWtlZmlsZQppbmRleCA0YjhmMmIwLi5iNzg1YTM5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYzY0L01ha2VmaWxlCkBAIC05LDcgKzksOSBAQAogCiBDSEVDS0ZMQUdTCSs9IC1EX19zcGFyY19fIC1EX19zcGFyY192OV9fIC1tNjQKIAotQ1BQRkxBR1Nfdm1saW51eC5sZHMgKz0gLVVzcGFyYworIyBVbmRlZmluZSBzcGFyYyB3aGVuIHByb2Nlc3Npbmcgdm1saW51eC5sZHMgLSBpdCBpcyB1c2VkCisjIEFuZCB0ZWFjaCBDUFAgd2UgYXJlIGRvaW5nIDY0IGJpdCBidWlsZHMgKGZvciB0aGlzIGNhc2UpCitDUFBGTEFHU192bWxpbnV4LmxkcyArPSAtbTY0IC1Vc3BhcmMKIAogTERGTEFHUwkJOj0gLW0gZWxmNjRfc3BhcmMKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZyBiL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKaW5kZXggNzZlYjgzMi4uODJjYWI1YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LXJjMgotIyBGcmkgTWF5IDE2IDEzOjM2OjA3IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNgorIyBGcmkgSnVsIDE4IDAwOjQ3OjA3IDIwMDgKICMKIENPTkZJR19TUEFSQz15CiBDT05GSUdfU1BBUkM2ND15CkBAIC0yMiwxOCArMjIsNiBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX09GPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzhLQj15Ci0jIENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzUxMktCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzRNQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSFpfMTAwPXkKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUdfQ1BVPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTEwNSw2ICs5Myw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTIxLDYgKzExMCw3IEBACiBDT05GSUdfQkxPQ0s9eQogQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQogQ09ORklHX0JMS19ERVZfQlNHPXkKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DS19DT01QQVQ9eQogCiAjCkBAIC0xMzYsMTEgKzEyNiwyMSBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKIENPTkZJR19DTEFTU0lDX1JDVT15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiAKICMKLSMgR2VuZXJhbCBtYWNoaW5lIHNldHVwCisjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwogIworQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzhLQj15CisjIENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVR19DUFU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CkBAIC0zNDIsNiArMzQyLDggQEAKIENPTkZJR19TVEFOREFMT05FPXkKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC0zNjYsNiArMzY4LDcgQEAKIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRT15CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIENPTkZJR19TVU5WREM9bQorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKQEAgLTM3OSw2ICszODIsNyBAQAogIwogIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1RJTUlOR1M9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKICMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CkBAIC00MjksOCArNDMzLDYgQEAKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0JMS19ERVZfSERfT05MWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC01MDQsNiArNTA2LDcgQEAKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVU5FU1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPW0KQEAgLTUyOSw2ICs1MzIsMTAgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKQEAgLTc0NSw3ICs3NTIsOCBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT1tCitDT05GSUdfSFdfUkFORE9NX04yUk5HPW0KICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNzU5LDM4ICs3NjcsNTggQEAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKQEAgLTg1Niw2ICs4ODQsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC05ODUsMTUgKzEwMTQsNyBAQAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAogQ09ORklHX0xPR09fU1VOX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9bQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KQEAgLTEwMTAsMjEgKzEwMzEsMTcgQEAKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX1ZNQVNURVI9eQogQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCiBDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorQ09ORklHX1NORF9EUklWRVJTPXkKIENPTkZJR19TTkRfRFVNTVk9bQogQ09ORklHX1NORF9WSVJNSURJPW0KIENPTkZJR19TTkRfTVRQQVY9bQogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKKyMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQogIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfQUxJNTQ1MT1tCkBAIC0xMDg0LDM3ICsxMTAxLDE0IEBACiAjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIGRldmljZXMKLSMKK0NPTkZJR19TTkRfVVNCPXkKICMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBTcGFyYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX1NQQVJDPXkKICMgQ09ORklHX1NORF9TVU5fQU1ENzkzMCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NVTl9DUzQyMzE9bQogIyBDT05GSUdfU05EX1NVTl9EQlJJIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKLSMKLQotIwotIyBTb0MgQXVkaW8gZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQCi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19BQzk3X0JVUz1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQpAQCAtMTE2Nyw2ICsxMTYxLDcgQEAKICMKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtMTIyNiw2ICsxMjIxLDcgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xNDIwLDYgKzE0MTYsMTIgQEAKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTE0ODYsNiArMTQ4OCwxMCBAQAogQ09ORklHX0NSWVBUT19NRDQ9eQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCkBAIC0xNTI3LDYgKzE1MzMsNyBAQAogIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX0NDSVRUPW0KIENPTkZJR19DUkMxNj1tCisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2NlbnRyYWwuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2VudHJhbC5jCmluZGV4IGI2MWI4ZGYuLmYyZTg3ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2VudHJhbC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2VudHJhbC5jCkBAIC0xNiw4ICsxNiw4IEBACiAjaW5jbHVkZSA8YXNtL2ZoYy5oPgogI2luY2x1ZGUgPGFzbS9zdGFyZmlyZS5oPgogCi1zdHJ1Y3QgbGludXhfY2VudHJhbCAqY2VudHJhbF9idXMgPSBOVUxMOwotc3RydWN0IGxpbnV4X2ZoYyAqZmhjX2xpc3QgPSBOVUxMOworc3RhdGljIHN0cnVjdCBsaW51eF9jZW50cmFsICpjZW50cmFsX2J1cyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGxpbnV4X2ZoYyAqZmhjX2xpc3QgPSBOVUxMOwogCiAjZGVmaW5lIElTX0NFTlRSQUxfRkhDKF9fZmhjKQkoKF9fZmhjKSA9PSBjZW50cmFsX2J1cy0+Y2hpbGQpCiAKQEAgLTc5LDkgKzc5LDkgQEAKIH0KIAogLyogQXBwbHkgcHJvYmVkIGZoYyByYW5nZXMgdG8gcmVnaXN0ZXJzIHBhc3NlZCwgaWYgbm8gcmFuZ2VzIHJldHVybi4gKi8KLXZvaWQgYXBwbHlfZmhjX3JhbmdlcyhzdHJ1Y3QgbGludXhfZmhjICpmaGMsCi0JCSAgICAgIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVncywKLQkJICAgICAgaW50IG5yZWdzKQorc3RhdGljIHZvaWQgYXBwbHlfZmhjX3JhbmdlcyhzdHJ1Y3QgbGludXhfZmhjICpmaGMsCisJCQkgICAgIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVncywKKwkJCSAgICAgaW50IG5yZWdzKQogewogCWlmIChmaGMtPm51bV9maGNfcmFuZ2VzKQogCQlhZGp1c3RfcmVncyhyZWdzLCBucmVncywgZmhjLT5maGNfcmFuZ2VzLApAQCAtODksOCArODksOCBAQAogfQogCiAvKiBBcHBseSBwcm9iZWQgY2VudHJhbCByYW5nZXMgdG8gcmVnaXN0ZXJzIHBhc3NlZCwgaWYgbm8gcmFuZ2VzIHJldHVybi4gKi8KLXZvaWQgYXBwbHlfY2VudHJhbF9yYW5nZXMoc3RydWN0IGxpbnV4X2NlbnRyYWwgKmNlbnRyYWwsCi0JCQkgIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVncywgaW50IG5yZWdzKQorc3RhdGljIHZvaWQgYXBwbHlfY2VudHJhbF9yYW5nZXMoc3RydWN0IGxpbnV4X2NlbnRyYWwgKmNlbnRyYWwsCisJCQkJIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVncywgaW50IG5yZWdzKQogewogCWlmIChjZW50cmFsLT5udW1fY2VudHJhbF9yYW5nZXMpCiAJCWFkanVzdF9yZWdzKHJlZ3MsIG5yZWdzLCBjZW50cmFsLT5jZW50cmFsX3JhbmdlcywKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHMuYwppbmRleCBlZGI3NGY1Li5kMGZhNWFhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2RzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9kcy5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAkJCXN0cnVjdCBkc19jYXBfc3RhdGUgKmNwLAogCQkJdm9pZCAqYnVmLCBpbnQgbGVuKTsKIAotc3RydWN0IGRzX2NhcF9zdGF0ZSBkc19zdGF0ZXNfdGVtcGxhdGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNfY2FwX3N0YXRlIGRzX3N0YXRlc190ZW1wbGF0ZVtdID0gewogCXsKIAkJLnNlcnZpY2VfaWQJPSAibWQtdXBkYXRlIiwKIAkJLmRhdGEJCT0gbWRfdXBkYXRlX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2VidXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZWJ1cy5jCmluZGV4IGM0OWQwMzguLjRkNThkN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZWJ1cy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZWJ1cy5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAlkZXYtPm9mZGV2Lm5vZGUgPSBkcDsKIAlkZXYtPm9mZGV2LmRldi5wYXJlbnQgPSAmZGV2LT5idXMtPm9mZGV2LmRldjsKIAlkZXYtPm9mZGV2LmRldi5idXMgPSAmZWJ1c19idXNfdHlwZTsKLQlzcHJpbnRmKGRldi0+b2ZkZXYuZGV2LmJ1c19pZCwgImVidXNbJTA4eF0iLCBkcC0+bm9kZSk7CisJZGV2X3NldF9uYW1lKCZkZXYtPm9mZGV2LmRldiwgImVidXNbJTA4eF0iLCBkcC0+bm9kZSk7CiAKIAkvKiBSZWdpc3RlciB3aXRoIGNvcmUgKi8KIAlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPm9mZGV2KSAhPSAwKQpAQCAtNTAxLDcgKzUwMSw3IEBACiAJCWVidXMtPm9mZGV2Lm5vZGUgPSBkcDsKIAkJZWJ1cy0+b2ZkZXYuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJCWVidXMtPm9mZGV2LmRldi5idXMgPSAmZWJ1c19idXNfdHlwZTsKLQkJc3ByaW50ZihlYnVzLT5vZmRldi5kZXYuYnVzX2lkLCAiZWJ1cyVkIiwgbnVtX2VidXMpOworCQlkZXZfc2V0X25hbWUoJmVidXMtPm9mZGV2LmRldiwgImVidXMlZCIsIG51bV9lYnVzKTsKIAogCQkvKiBSZWdpc3RlciB3aXRoIGNvcmUgKi8KIAkJaWYgKG9mX2RldmljZV9yZWdpc3RlcigmZWJ1cy0+b2ZkZXYpICE9IDApCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2h2YXBpLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2h2YXBpLmMKaW5kZXggZjM0ZjVkNi4uNjkxNzYwYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9odmFwaS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaHZhcGkuYwpAQCAtMzQsOCArMzQsMTIgQEAKIAl7IC5ncm91cCA9IEhWX0dSUF9MRE9NLAkJCQkJfSwKIAl7IC5ncm91cCA9IEhWX0dSUF9TVkNfQ0hBTiwJLmZsYWdzID0gRkxBR19QUkVfQVBJCX0sCiAJeyAuZ3JvdXAgPSBIVl9HUlBfTkNTLAkJLmZsYWdzID0gRkxBR19QUkVfQVBJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfUk5HLAkJCQkJfSwKIAl7IC5ncm91cCA9IEhWX0dSUF9OSUFHX1BFUkYsCS5mbGFncyA9IEZMQUdfUFJFX0FQSQl9LAogCXsgLmdyb3VwID0gSFZfR1JQX0ZJUkVfUEVSRiwJCQkJfSwKKwl7IC5ncm91cCA9IEhWX0dSUF9OMl9DUFUsCQkJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfTklVLAkJCQkJfSwKKwl7IC5ncm91cCA9IEhWX0dSUF9WRl9DUFUsCQkJCX0sCiAJeyAuZ3JvdXAgPSBIVl9HUlBfRElBRywJCS5mbGFncyA9IEZMQUdfUFJFX0FQSQl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9vZl9kZXZpY2UuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMKaW5kZXggZDU2OWY2MC4uNGZkNDhhYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9vZl9kZXZpY2UuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL29mX2RldmljZS5jCkBAIC03OTcsOSArNzk3LDkgQEAKIAlvcC0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAlvcC0+ZGV2LmJ1cyA9ICZvZl9wbGF0Zm9ybV9idXNfdHlwZTsKIAlpZiAoIXBhcmVudCkKLQkJc3RyY3B5KG9wLT5kZXYuYnVzX2lkLCAicm9vdCIpOworCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICJyb290Iik7CiAJZWxzZQotCQlzcHJpbnRmKG9wLT5kZXYuYnVzX2lkLCAiJTA4eCIsIGRwLT5ub2RlKTsKKwkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5ub2RlKTsKIAogCWlmIChvZl9kZXZpY2VfcmVnaXN0ZXIob3ApKSB7CiAJCXByaW50aygiJXM6IENvdWxkIG5vdCByZWdpc3RlciBvZiBkZXZpY2UuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpLmMKaW5kZXggZDAwYTM2NS4uNTUwOTYxOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jCkBAIC00MDgsNyArNDA4LDcgQEAKIAlkZXYtPmNsYXNzID0gY2xhc3MgPj4gODsKIAlkZXYtPnJldmlzaW9uID0gY2xhc3MgJiAweGZmOwogCi0Jc3ByaW50ZihkZXYtPmRldi5idXNfaWQsICIlMDR4OiUwMng6JTAyeC4lZCIsIHBjaV9kb21haW5fbnIoYnVzKSwKKwlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJTA0eDolMDJ4OiUwMnguJWQiLCBwY2lfZG9tYWluX25yKGJ1cyksCiAJCWRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pKTsKIAogCWlmIChvZnBjaV92ZXJib3NlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfbXNpLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9tc2kuYwppbmRleCBkYjVlOGZkLi42MGM3MWUzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9tc2kuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9tc2kuYwpAQCAtMTIwLDkgKzEyMCw5IEBACiAJLyogWFhYIGFmZmluaXR5IFhYWCAqLwogfTsKIAotaW50IHNwYXJjNjRfc2V0dXBfbXNpX2lycSh1bnNpZ25lZCBpbnQgKnZpcnRfaXJxX3AsCi0JCQkgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJICBzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5KQorc3RhdGljIGludCBzcGFyYzY0X3NldHVwX21zaV9pcnEodW5zaWduZWQgaW50ICp2aXJ0X2lycV9wLAorCQkJCSBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgc3RydWN0IG1zaV9kZXNjICplbnRyeSkKIHsKIAlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBwZGV2LT5kZXYuYXJjaGRhdGEuaG9zdF9jb250cm9sbGVyOwogCWNvbnN0IHN0cnVjdCBzcGFyYzY0X21zaXFfb3BzICpvcHMgPSBwYm0tPm1zaV9vcHM7CkBAIC0xNzksOCArMTc5LDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIHNwYXJjNjRfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgdmlydF9pcnEsCi0JCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIHNwYXJjNjRfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgdmlydF9pcnEsCisJCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBwZGV2LT5kZXYuYXJjaGRhdGEuaG9zdF9jb250cm9sbGVyOwogCWNvbnN0IHN0cnVjdCBzcGFyYzY0X21zaXFfb3BzICpvcHMgPSBwYm0tPm1zaV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwppbmRleCBlMmJiOTc5Li5hMTA0YzgwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKQEAgLTUzMSw3ICs1MzEsNyBAQAogCS8qIE5vdGhpbmcgdG8gZG8uLi4gKi8KIH0KIAotY29uc3Qgc3RydWN0IGRtYV9vcHMgc3VuNHZfZG1hX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX29wcyBzdW40dl9kbWFfb3BzID0gewogCS5hbGxvY19jb2hlcmVudAkJCT0gZG1hXzR2X2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50CQkJPSBkbWFfNHZfZnJlZV9jb2hlcmVudCwKIAkubWFwX3NpbmdsZQkJCT0gZG1hXzR2X21hcF9zaW5nbGUsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDIwODRmODEuLjMxZWE3NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KQEAgLTIxMSw3ICsyMTAsNyBAQAogCXByaW50aygiaTQ6ICUwMTZseCBpNTogJTAxNmx4IGk2OiAlMDE2bHggaTc6ICUwMTZseFxuIiwKIAkgICAgICAgcndrLT5pbnNbNF0sIHJ3ay0+aW5zWzVdLCByd2stPmluc1s2XSwgcndrLT5pbnNbN10pOwogCWlmIChyZWdzLT50c3RhdGUgJiBUU1RBVEVfUFJJVikKLQkJcHJpbnRfc3ltYm9sKCJJNzogPCVzPlxuIiwgcndrLT5pbnNbN10pOworCQlwcmludGsoIkk3OiA8JXBTPlxuIiwgKHZvaWQgKikgcndrLT5pbnNbN10pOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMjMyLDcgKzIzMSw3IEBACiAjZW5kaWYKIAlwcmludGsoIlRTVEFURTogJTAxNmx4IFRQQzogJTAxNmx4IFROUEM6ICUwMTZseCBZOiAlMDh4ICAgICVzXG4iLCByZWdzLT50c3RhdGUsCiAJICAgICAgIHJlZ3MtPnRwYywgcmVncy0+dG5wYywgcmVncy0+eSwgcHJpbnRfdGFpbnRlZCgpKTsKLQlwcmludF9zeW1ib2woIlRQQzogPCVzPlxuIiwgcmVncy0+dHBjKTsKKwlwcmludGsoIlRQQzogPCVwUz5cbiIsICh2b2lkICopIHJlZ3MtPnRwYyk7CiAJcHJpbnRrKCJnMDogJTAxNmx4IGcxOiAlMDE2bHggZzI6ICUwMTZseCBnMzogJTAxNmx4XG4iLAogCSAgICAgICByZWdzLT51X3JlZ3NbMF0sIHJlZ3MtPnVfcmVnc1sxXSwgcmVncy0+dV9yZWdzWzJdLAogCSAgICAgICByZWdzLT51X3JlZ3NbM10pOwpAQCAtMjQ1LDcgKzI0NCw3IEBACiAJcHJpbnRrKCJvNDogJTAxNmx4IG81OiAlMDE2bHggc3A6ICUwMTZseCByZXRfcGM6ICUwMTZseFxuIiwKIAkgICAgICAgcmVncy0+dV9yZWdzWzEyXSwgcmVncy0+dV9yZWdzWzEzXSwgcmVncy0+dV9yZWdzWzE0XSwKIAkgICAgICAgcmVncy0+dV9yZWdzWzE1XSk7Ci0JcHJpbnRfc3ltYm9sKCJSUEM6IDwlcz5cbiIsIHJlZ3MtPnVfcmVnc1sxNV0pOworCXByaW50aygiUlBDOiA8JXBTPlxuIiwgKHZvaWQgKikgcmVncy0+dV9yZWdzWzE1XSk7CiAJc2hvd19yZWd3aW5kb3cocmVncyk7CiAjaWZkZWYgQ09ORklHX1NNUAogCXNwaW5fdW5sb2NrKCZyZWdkdW1wX2xvY2spOwpAQCAtMzQ2LDkgKzM0NSw2IEBACiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0cCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwotI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCWNoYXIgYnVmZmVyW0tTWU1fU1lNQk9MX0xFTl07Ci0jZW5kaWYKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB0aGlzX2NwdSwgY3B1OwogCkBAIC0zNzcsMTcgKzM3MywxMyBAQAogCQkgICAgICAgZ3AtPnRzdGF0ZSwgZ3AtPnRwYywgZ3AtPnRucGMsCiAJCSAgICAgICAoKHRwICYmIHRwLT50YXNrKSA/IHRwLT50YXNrLT5jb21tIDogIk5VTEwiKSwKIAkJICAgICAgICgodHAgJiYgdHAtPnRhc2spID8gdHAtPnRhc2stPnBpZCA6IC0xKSk7Ci0jaWZkZWYgQ09ORklHX0tBTExTWU1TCisKIAkJaWYgKGdwLT50c3RhdGUgJiBUU1RBVEVfUFJJVikgewotCQkJc3ByaW50X3N5bWJvbChidWZmZXIsIGdwLT50cGMpOwotCQkJcHJpbnRrKCIgICAgICAgICAgICAgVFBDWyVzXSAiLCBidWZmZXIpOwotCQkJc3ByaW50X3N5bWJvbChidWZmZXIsIGdwLT5vNyk7Ci0JCQlwcmludGsoIk83WyVzXSAiLCBidWZmZXIpOwotCQkJc3ByaW50X3N5bWJvbChidWZmZXIsIGdwLT5pNyk7Ci0JCQlwcmludGsoIkk3WyVzXVxuIiwgYnVmZmVyKTsKLQkJfSBlbHNlCi0jZW5kaWYKLQkJeworCQkJcHJpbnRrKCIgICAgICAgICAgICAgVFBDWyVwU10gTzdbJXBTXSBJN1slcFNdXG4iLAorCQkJICAgICAgICh2b2lkICopIGdwLT50cGMsCisJCQkgICAgICAgKHZvaWQgKikgZ3AtPm83LAorCQkJICAgICAgICh2b2lkICopIGdwLT5pNyk7CisJCX0gZWxzZSB7CiAJCQlwcmludGsoIiAgICAgICAgICAgICBUUENbJWx4XSBPN1slbHhdIEk3WyVseF1cbiIsCiAJCQkgICAgICAgZ3AtPnRwYywgZ3AtPm83LCBncC0+aTcpOwogCQl9CkBAIC02OTEsOSArNjgzLDkgQEAKIAkJICAoKHVuc2lnbmVkIGxvbmcpIGNoaWxkX3NmKSAtIFNUQUNLX0JJQVM7CiAKIAkJLyogU3BlY2lhbCBjYXNlLCBpZiB3ZSBhcmUgc3Bhd25pbmcgYSBrZXJuZWwgdGhyZWFkIGZyb20KLQkJICogYSB1c2Vyc3BhY2UgdGFzayAodmlhIEtNT0QsIE5GUywgb3Igc2ltaWxhcikgd2UgbXVzdAotCQkgKiBkaXNhYmxlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGluIHRoZSBjaGlsZCBiZWNhdXNlIHRoZQotCQkgKiBhZGRyZXNzIHNwYWNlIGFuZCBwcm90ZWN0aW9uIHJlYWxtIGFyZSBjaGFuZ2luZy4KKwkJICogYSB1c2Vyc3BhY2UgdGFzayAodXNlcm1vZGUgaGVscGVyLCBORlMgb3Igc2ltaWxhciksIHdlCisJCSAqIG11c3QgZGlzYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVycyBpbiB0aGUgY2hpbGQgYmVjYXVzZQorCQkgKiB0aGUgYWRkcmVzcyBzcGFjZSBhbmQgcHJvdGVjdGlvbiByZWFsbSBhcmUgY2hhbmdpbmcuCiAJCSAqLwogCQlpZiAodC0+ZmxhZ3MgJiBfVElGX1BFUkZDVFIpIHsKIAkJCXQtPnVzZXJfY250ZDAgPSB0LT51c2VyX2NudGQxID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCmluZGV4IGMwOTlkOTYuLjdjZjcyYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwpAQCAtNzg4LDg5ICs3ODgsMzYgQEAKIAkJCSAgICAgIDAsIDAsIDAsIG1hc2spOwogfQogCitleHRlcm4gdW5zaWduZWQgbG9uZyB4Y2FsbF9jYWxsX2Z1bmN0aW9uOworCit2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzaykKK3sKKwlzbXBfY3Jvc3NfY2FsbF9tYXNrZWQoJnhjYWxsX2NhbGxfZnVuY3Rpb24sIDAsIDAsIDAsIG1hc2spOworfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyB4Y2FsbF9jYWxsX2Z1bmN0aW9uX3NpbmdsZTsKKwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpCit7CisJY3B1bWFza190IG1hc2sgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCisJc21wX2Nyb3NzX2NhbGxfbWFza2VkKCZ4Y2FsbF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSwgMCwgMCwgMCwgbWFzayk7Cit9CisKIC8qIFNlbmQgY3Jvc3MgY2FsbCB0byBhbGwgcHJvY2Vzc29ycyBleGNlcHQgc2VsZi4gKi8KICNkZWZpbmUgc21wX2Nyb3NzX2NhbGwoZnVuYywgY3R4LCBkYXRhMSwgZGF0YTIpIFwKIAlzbXBfY3Jvc3NfY2FsbF9tYXNrZWQoZnVuYywgY3R4LCBkYXRhMSwgZGF0YTIsIGNwdV9vbmxpbmVfbWFwKQogCi1zdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCB7Ci0Jdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKTsKLQl2b2lkICppbmZvOwotCWF0b21pY190IGZpbmlzaGVkOwotCWludCB3YWl0OwotfTsKLQotc3RhdGljIHN0cnVjdCBjYWxsX2RhdGFfc3RydWN0ICpjYWxsX2RhdGE7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIHhjYWxsX2NhbGxfZnVuY3Rpb247Ci0KLS8qKgotICogc21wX2NhbGxfZnVuY3Rpb24oKTogUnVuIGEgZnVuY3Rpb24gb24gYWxsIG90aGVyIENQVXMuCi0gKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KLSAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KLSAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBzdGF0dXMgY29kZS4gRG9lcyBub3QgcmV0dXJuIHVudGlsCi0gKiByZW1vdGUgQ1BVcyBhcmUgbmVhcmx5IHJlYWR5IHRvIGV4ZWN1dGUgPDxmdW5jPj4gb3IgYXJlIG9yIGhhdmUgZXhlY3V0ZWQuCi0gKgotICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCi0gKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KLSAqLwotc3RhdGljIGludCBzcGFyYzY0X3NtcF9jYWxsX2Z1bmN0aW9uX21hc2sodm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAotCQkJCQkgIGludCB3YWl0LCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBkYXRhOwotCWludCBjcHVzOwotCi0JLyogQ2FuIGRlYWRsb2NrIHdoZW4gY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKLQotCWRhdGEuZnVuYyA9IGZ1bmM7Ci0JZGF0YS5pbmZvID0gaW5mbzsKLQlhdG9taWNfc2V0KCZkYXRhLmZpbmlzaGVkLCAwKTsKLQlkYXRhLndhaXQgPSB3YWl0OwotCi0Jc3Bpbl9sb2NrKCZjYWxsX2xvY2spOwotCi0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7Ci0JY3B1cyA9IGNwdXNfd2VpZ2h0KG1hc2spOwotCWlmICghY3B1cykKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JY2FsbF9kYXRhID0gJmRhdGE7Ci0JbWIoKTsKLQotCXNtcF9jcm9zc19jYWxsX21hc2tlZCgmeGNhbGxfY2FsbF9mdW5jdGlvbiwgMCwgMCwgMCwgbWFzayk7Ci0KLQkvKiBXYWl0IGZvciByZXNwb25zZSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkgIT0gY3B1cykKLQkJY3B1X3JlbGF4KCk7Ci0KLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IHdhaXQpCi17Ci0JcmV0dXJuIHNwYXJjNjRfc21wX2NhbGxfZnVuY3Rpb25fbWFzayhmdW5jLCBpbmZvLCB3YWl0LCBjcHVfb25saW5lX21hcCk7Ci19Ci0KIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25fY2xpZW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbykgPSBjYWxsX2RhdGEtPmZ1bmM7Ci0Jdm9pZCAqaW5mbyA9IGNhbGxfZGF0YS0+aW5mbzsKLQogCWNsZWFyX3NvZnRpbnQoMSA8PCBpcnEpOwotCWlmIChjYWxsX2RhdGEtPndhaXQpIHsKLQkJLyogbGV0IGluaXRpYXRvciBwcm9jZWVkIG9ubHkgYWZ0ZXIgY29tcGxldGlvbiAqLwotCQlmdW5jKGluZm8pOwotCQlhdG9taWNfaW5jKCZjYWxsX2RhdGEtPmZpbmlzaGVkKTsKLQl9IGVsc2UgewotCQkvKiBsZXQgaW5pdGlhdG9yIHByb2NlZWQgYWZ0ZXIgZ2V0dGluZyBkYXRhICovCi0JCWF0b21pY19pbmMoJmNhbGxfZGF0YS0+ZmluaXNoZWQpOwotCQlmdW5jKGluZm8pOwotCX0KKwlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOworfQorCit2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9jbGllbnQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJY2xlYXJfc29mdGludCgxIDw8IGlycSk7CisJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRzYl9zeW5jKHZvaWQgKmluZm8pCkBAIC04OTAsNyArODM3LDcgQEAKIAogdm9pZCBzbXBfdHNiX3N5bmMoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0Jc3BhcmM2NF9zbXBfY2FsbF9mdW5jdGlvbl9tYXNrKHRzYl9zeW5jLCBtbSwgMSwgbW0tPmNwdV92bV9tYXNrKTsKKwlzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKG1tLT5jcHVfdm1fbWFzaywgdHNiX3N5bmMsIG1tLCAxKTsKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGNhbGxfZmx1c2hfdGxiX21tOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwppbmRleCA0OWQzZWE1MC4uNTA0ZTY3OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKQEAgLTEwOCw4ICsxMDgsNiBAQAogRVhQT1JUX1NZTUJPTChfX3dyaXRlX2xvY2spOwogRVhQT1JUX1NZTUJPTChfX3dyaXRlX3VubG9jayk7CiBFWFBPUlRfU1lNQk9MKF9fd3JpdGVfdHJ5bG9jayk7Ci0KLUVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb24pOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmZGVmIENPTkZJR19NQ09VTlQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCmluZGV4IGFjMWJmZjUuLmUxZjRlYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYwpAQCAtNTQyLDcgKzU0Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHNwYXJjNjRfbW1hcF9jaGVjayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQoraW50IHNwYXJjX21tYXBfY2hlY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSB7CiAJCWlmIChsZW4gPj0gU1RBQ0tfVE9QMzIpCkBAIC02MTQsOSArNjE0LDkgQEAKIAkJZ290byBvdXQ7CiAJaWYgKHVubGlrZWx5KG5ld19sZW4gPj0gVkFfRVhDTFVERV9TVEFSVCkpCiAJCWdvdG8gb3V0OwotCWlmICh1bmxpa2VseShzcGFyYzY0X21tYXBfY2hlY2soYWRkciwgb2xkX2xlbikpKQorCWlmICh1bmxpa2VseShzcGFyY19tbWFwX2NoZWNrKGFkZHIsIG9sZF9sZW4pKSkKIAkJZ290byBvdXQ7Ci0JaWYgKHVubGlrZWx5KHNwYXJjNjRfbW1hcF9jaGVjayhuZXdfYWRkciwgbmV3X2xlbikpKQorCWlmICh1bmxpa2VseShzcGFyY19tbWFwX2NoZWNrKG5ld19hZGRyLCBuZXdfbGVuKSkpCiAJCWdvdG8gb3V0OwogCiAJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwppbmRleCBiYTViZDYyLi45N2I3N2ZiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCkBAIC0zNTksNyArMzU5LDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgY3BfY29tcGF0X3N0YXQ2NChzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBjb21wYXRfc3RhdDY0IF9fdXNlciAqc3RhdGJ1ZikKK3N0YXRpYyBpbnQgY3BfY29tcGF0X3N0YXQ2NChzdHJ1Y3Qga3N0YXQgKnN0YXQsCisJCQkgICAgc3RydWN0IGNvbXBhdF9zdGF0NjQgX191c2VyICpzdGF0YnVmKQogewogCWludCBlcnI7CiAKQEAgLTg3MCw5ICs4NzEsOSBAQAogCXVuc2lnbmVkIGxvbmcgcmV0ID0gLUVJTlZBTDsKIAl1bnNpZ25lZCBsb25nIG5ld19hZGRyID0gX19uZXdfYWRkcjsKIAotCWlmICh1bmxpa2VseShzcGFyYzY0X21tYXBfY2hlY2soYWRkciwgb2xkX2xlbikpKQorCWlmICh1bmxpa2VseShzcGFyY19tbWFwX2NoZWNrKGFkZHIsIG9sZF9sZW4pKSkKIAkJZ290byBvdXQ7Ci0JaWYgKHVubGlrZWx5KHNwYXJjNjRfbW1hcF9jaGVjayhuZXdfYWRkciwgbmV3X2xlbikpKQorCWlmICh1bmxpa2VseShzcGFyY19tbWFwX2NoZWNrKG5ld19hZGRyLCBuZXdfbGVuKSkpCiAJCWdvdG8gb3V0OwogCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJcmV0ID0gZG9fbXJlbWFwKGFkZHIsIG9sZF9sZW4sIG5ld19sZW4sIGZsYWdzLCBuZXdfYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c2ZzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c2ZzLmMKaW5kZXggZTg4NTAzNC4uODRlNWNlMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzZnMuYwpAQCAtMTQsNyArMTQsOCBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBodl9tbXVfc3RhdGlzdGljcywgbW11X3N0YXRzKSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpOwogCiAjZGVmaW5lIFNIT1dfTU1VU1RBVF9VTE9ORyhOQU1FKSBcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjTkFNRShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNOQU1FKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIFwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKIHsgXAogCXN0cnVjdCBodl9tbXVfc3RhdGlzdGljcyAqcCA9ICZwZXJfY3B1KG1tdV9zdGF0cywgZGV2LT5pZCk7IFwKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHAtPk5BTUUpOyBcCkBAIC0xMzUsMTMgKzEzNiwxNiBAQAogCXJldHVybiBzdW40dl9tbXVzdGF0X2NvbmYocmEsICZvcmlnX3JhKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19tbXVzdGF0X2VuYWJsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19tbXVzdGF0X2VuYWJsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGxvbmcgdmFsID0gcnVuX29uX2NwdShzLT5pZCwgcmVhZF9tbXVzdGF0X2VuYWJsZSwgMCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx4XG4iLCB2YWwpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9tbXVzdGF0X2VuYWJsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tbXVzdGF0X2VuYWJsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQlzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWwsIGVycjsKIAlpbnQgcmV0ID0gc3NjYW5mKGJ1ZiwgIiVsZCIsICZ2YWwpOwpAQCAtMTc5LDE0ICsxODMsMTYgQEAKICNlbmRpZgogCiAjZGVmaW5lIFNIT1dfQ1BVREFUQV9VTE9OR19OQU1FKE5BTUUsIE1FTUJFUikgXAotc3RhdGljIHNzaXplX3Qgc2hvd18jI05BTUUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKSBcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjTkFNRShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBcCisJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKIHsgXAogCWNwdWluZm9fc3BhcmMgKmMgPSAmY3B1X2RhdGEoZGV2LT5pZCk7IFwKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGMtPk1FTUJFUik7IFwKIH0KIAogI2RlZmluZSBTSE9XX0NQVURBVEFfVUlOVF9OQU1FKE5BTUUsIE1FTUJFUikgXAotc3RhdGljIHNzaXplX3Qgc2hvd18jI05BTUUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKSBcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjTkFNRShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBcCisJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKIHsgXAogCWNwdWluZm9fc3BhcmMgKmMgPSAmY3B1X2RhdGEoZGV2LT5pZCk7IFwKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYy0+TUVNQkVSKTsgXApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCmluZGV4IDM2OTc0OTIuLmJkMzBlY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKQEAgLTEsNiArMSw2IEBACiAvKiBhcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsMTk5NyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsMTk5NywyMDA4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAoQykgMTk5NywxOTk5LDIwMDAgSmFrdWIgSmVsaW5layAoamFrdWJAcmVkaGF0LmNvbSkKICAqLwogCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0zNyw5ICszNiw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9oZWFkLmg+Ci0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCiAjaW5jbHVkZSAiZW50cnkuaCIKQEAgLTc0LDcgKzcwLDcgQEAKIAkJICAgICAgIGkgKyAxLAogCQkgICAgICAgcC0+dHJhcHN0YWNrW2ldLnRzdGF0ZSwgcC0+dHJhcHN0YWNrW2ldLnRwYywKIAkJICAgICAgIHAtPnRyYXBzdGFja1tpXS50bnBjLCBwLT50cmFwc3RhY2tbaV0udHQpOwotCQlwcmludF9zeW1ib2woIlRSQVBMT0c6IFRQQzwlcz5cbiIsIHAtPnRyYXBzdGFja1tpXS50cGMpOworCQlwcmludGsoIlRSQVBMT0c6IFRQQzwlcFM+XG4iLCAodm9pZCAqKSBwLT50cmFwc3RhY2tbaV0udHBjKTsKIAl9CiB9CiAKQEAgLTEwODEsNyArMTA3Nyw3IEBACiAJICAgICAgIHJlZ3MtPnRwYywgcmVncy0+dG5wYywgcmVncy0+dV9yZWdzW1VSRUdfSTddLCByZWdzLT50c3RhdGUpOwogCXByaW50aygiJXMiICJFUlJPUiglZCk6ICIsCiAJICAgICAgIChyZWNvdmVyYWJsZSA/IEtFUk5fV0FSTklORyA6IEtFUk5fQ1JJVCksIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JcHJpbnRfc3ltYm9sKCJUUEM8JXM+XG4iLCByZWdzLT50cGMpOworCXByaW50aygiVFBDPCVwUz5cbiIsICh2b2lkICopIHJlZ3MtPnRwYyk7CiAJcHJpbnRrKCIlcyIgIkVSUk9SKCVkKTogTV9TWU5EKCVseCksICBFX1NZTkQoJWx4KSVzJXNcbiIsCiAJICAgICAgIChyZWNvdmVyYWJsZSA/IEtFUk5fV0FSTklORyA6IEtFUk5fQ1JJVCksIHNtcF9wcm9jZXNzb3JfaWQoKSwKIAkgICAgICAgKGFmc3IgJiBDSEFGU1JfTV9TWU5EUk9NRSkgPj4gQ0hBRlNSX01fU1lORFJPTUVfU0hJRlQsCkBAIC0xNjg5LDcgKzE2ODUsNyBAQAogCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQkgICAgICAgKHR5cGUgJiAweDEpID8gJ0knIDogJ0QnLAogCQkgICAgICAgcmVncy0+dHBjKTsKLQkJcHJpbnRfc3ltYm9sKEtFUk5fRU1FUkcgIlRQQzwlcz5cbiIsIHJlZ3MtPnRwYyk7CisJCXByaW50ayhLRVJOX0VNRVJHICJUUEM8JXBTPlxuIiwgKHZvaWQgKikgcmVncy0+dHBjKTsKIAkJcGFuaWMoIklycmVjb3ZlcmFibGUgQ2hlZXRhaCsgcGFyaXR5IGVycm9yLiIpOwogCX0KIApAQCAtMTY5Nyw3ICsxNjkzLDcgQEAKIAkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLAogCSAgICAgICAodHlwZSAmIDB4MSkgPyAnSScgOiAnRCcsCiAJICAgICAgIHJlZ3MtPnRwYyk7Ci0JcHJpbnRfc3ltYm9sKEtFUk5fV0FSTklORyAiVFBDPCVzPlxuIiwgcmVncy0+dHBjKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJUUEM8JXBTPlxuIiwgKHZvaWQgKikgcmVncy0+dHBjKTsKIH0KIAogc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5IHsKQEAgLTE5MDQsOSArMTkwMCwxMCBAQAogCiAJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLUlUTEI6IEVycm9yIGF0IFRQQ1slbHhdLCB0bCAlZFxuIiwKIAkgICAgICAgcmVncy0+dHBjLCB0bCk7Ci0JcHJpbnRfc3ltYm9sKEtFUk5fRU1FUkcgIlNVTjRWLUlUTEI6IFRQQzwlcz5cbiIsIHJlZ3MtPnRwYyk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLUlUTEI6IFRQQzwlcFM+XG4iLCAodm9pZCAqKSByZWdzLT50cGMpOwogCXByaW50ayhLRVJOX0VNRVJHICJTVU40Vi1JVExCOiBPN1slbHhdXG4iLCByZWdzLT51X3JlZ3NbVVJFR19JN10pOwotCXByaW50X3N5bWJvbChLRVJOX0VNRVJHICJTVU40Vi1JVExCOiBPNzwlcz5cbiIsIHJlZ3MtPnVfcmVnc1tVUkVHX0k3XSk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLUlUTEI6IE83PCVwUz5cbiIsCisJICAgICAgICh2b2lkICopIHJlZ3MtPnVfcmVnc1tVUkVHX0k3XSk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLUlUTEI6IHZhZGRyWyVseF0gY3R4WyVseF0gIgogCSAgICAgICAicHRlWyVseF0gZXJyb3JbJWx4XVxuIiwKIAkgICAgICAgc3VuNHZfZXJyX2l0bGJfdmFkZHIsIHN1bjR2X2Vycl9pdGxiX2N0eCwKQEAgLTE5MjcsOSArMTkyNCwxMCBAQAogCiAJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLURUTEI6IEVycm9yIGF0IFRQQ1slbHhdLCB0bCAlZFxuIiwKIAkgICAgICAgcmVncy0+dHBjLCB0bCk7Ci0JcHJpbnRfc3ltYm9sKEtFUk5fRU1FUkcgIlNVTjRWLURUTEI6IFRQQzwlcz5cbiIsIHJlZ3MtPnRwYyk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLURUTEI6IFRQQzwlcFM+XG4iLCAodm9pZCAqKSByZWdzLT50cGMpOwogCXByaW50ayhLRVJOX0VNRVJHICJTVU40Vi1EVExCOiBPN1slbHhdXG4iLCByZWdzLT51X3JlZ3NbVVJFR19JN10pOwotCXByaW50X3N5bWJvbChLRVJOX0VNRVJHICJTVU40Vi1EVExCOiBPNzwlcz5cbiIsIHJlZ3MtPnVfcmVnc1tVUkVHX0k3XSk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLURUTEI6IE83PCVwUz5cbiIsCisJICAgICAgICh2b2lkICopIHJlZ3MtPnVfcmVnc1tVUkVHX0k3XSk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLURUTEI6IHZhZGRyWyVseF0gY3R4WyVseF0gIgogCSAgICAgICAicHRlWyVseF0gZXJyb3JbJWx4XVxuIiwKIAkgICAgICAgc3VuNHZfZXJyX2R0bGJfdmFkZHIsIHN1bjR2X2Vycl9kdGxiX2N0eCwKQEAgLTIxMTEsMTAgKzIxMDksNyBAQAogCWZwID0ga3NwICsgU1RBQ0tfQklBUzsKIAl0aHJlYWRfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSB0cDsKIAotCXByaW50aygiQ2FsbCBUcmFjZToiKTsKLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKLQlwcmludGsoIlxuIik7Ci0jZW5kaWYKKwlwcmludGsoIkNhbGwgVHJhY2U6XG4iKTsKIAlkbyB7CiAJCXN0cnVjdCBzcGFyY19zdGFja2YgKnNmOwogCQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKQEAgLTIxMzcsMTIgKzIxMzIsOCBAQAogCQkJZnAgPSAodW5zaWduZWQgbG9uZylzZi0+ZnAgKyBTVEFDS19CSUFTOwogCQl9CiAKLQkJcHJpbnRrKCIgWyUwMTZseF0gIiwgcGMpOwotCQlwcmludF9zeW1ib2woIiVzXG4iLCBwYyk7CisJCXByaW50aygiIFslMDE2bHhdICVwU1xuIiwgcGMsICh2b2lkICopIHBjKTsKIAl9IHdoaWxlICgrK2NvdW50IDwgMTYpOwotI2lmbmRlZiBDT05GSUdfS0FMTFNZTVMKLQlwcmludGsoIlxuIik7Ci0jZW5kaWYKIH0KIAogdm9pZCBkdW1wX3N0YWNrKHZvaWQpCkBAIC0yMjExLDkgKzIyMDIsOCBAQAogCQl3aGlsZSAocncgJiYKIAkJICAgICAgIGNvdW50KysgPCAzMCYmCiAJCSAgICAgICBpc19rZXJuZWxfc3RhY2soY3VycmVudCwgcncpKSB7Ci0JCQlwcmludGsoIkNhbGxlclslMDE2bHhdIiwgcnctPmluc1s3XSk7Ci0JCQlwcmludF9zeW1ib2woIjogJXMiLCBydy0+aW5zWzddKTsKLQkJCXByaW50aygiXG4iKTsKKwkJCXByaW50aygiQ2FsbGVyWyUwMTZseF06ICVwU1xuIiwgcnctPmluc1s3XSwKKwkJCSAgICAgICAodm9pZCAqKSBydy0+aW5zWzddKTsKIAogCQkJcncgPSBrZXJuZWxfc3RhY2tfdXAocncpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3R0YWJsZS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90dGFibGUuUwppbmRleCA0NTAwNTNhLi4xYWRlM2Q2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3R0YWJsZS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHRhYmxlLlMKQEAgLTU4LDcgKzU4LDEyIEBACiB0bDBfaXJxNDoJQlRSQVAoMHg0NCkKICNlbmRpZgogdGwwX2lycTU6CVRSQVBfSVJRKGhhbmRsZXJfaXJxLCA1KQotdGwwX2lycTY6CUJUUkFQKDB4NDYpIEJUUkFQKDB4NDcpIEJUUkFQKDB4NDgpIEJUUkFQKDB4NDkpCisjaWZkZWYgQ09ORklHX1NNUAordGwwX2lycTY6CVRSQVBfSVJRKHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9jbGllbnQsIDYpCisjZWxzZQordGwwX2lycTY6CUJUUkFQKDB4NDYpCisjZW5kaWYKK3RsMF9pcnE3OglCVFJBUCgweDQ3KSBCVFJBUCgweDQ4KSBCVFJBUCgweDQ5KQogdGwwX2lycTEwOglCVFJBUCgweDRhKSBCVFJBUCgweDRiKSBCVFJBUCgweDRjKSBCVFJBUCgweDRkKQogdGwwX2lycTE0OglUUkFQX0lSUSh0aW1lcl9pbnRlcnJ1cHQsIDE0KQogdGwwX2lycTE1OglUUkFQX0lSUShoYW5kbGVyX2lycSwgMTUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYwppbmRleCBhZmE3ZmM0Li4yMDNkZGZhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMKQEAgLTIsNyArMiw3IEBACiAgKiB1bmFsaWduZWQuYzogVW5hbGlnbmVkIGxvYWQvc3RvcmUgdHJhcCBoYW5kbGluZyB3aXRoIHNwZWNpYWwKICAqICAgICAgICAgICAgICBjYXNlcyBmb3IgdGhlIGtlcm5lbCB0byBkbyB0aGVtIG1vcmUgcXVpY2tseS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk2LDIwMDggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKICAqLwogCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGFzbS9mcHVtYWNyby5oPgogCiAvKiAjZGVmaW5lIERFQlVHX01OQSAqLwpAQCAtMjg5LDggKzI4OCw4IEBACiAJaWYgKGNvdW50IDwgNSkgewogCQlsYXN0X3RpbWUgPSBqaWZmaWVzOwogCQljb3VudCsrOwotCQlwcmludGsoIktlcm5lbCB1bmFsaWduZWQgYWNjZXNzIGF0IFRQQ1slbHhdICIsIHJlZ3MtPnRwYyk7Ci0JCXByaW50X3N5bWJvbCgiJXNcbiIsIHJlZ3MtPnRwYyk7CisJCXByaW50aygiS2VybmVsIHVuYWxpZ25lZCBhY2Nlc3MgYXQgVFBDWyVseF0gJXBTXG4iLAorCQkgICAgICAgcmVncy0+dHBjLCAodm9pZCAqKSByZWdzLT50cGMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC92aW8uYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdmlvLmMKaW5kZXggZTc4YjM1MS4uYTQ5MDA3NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC92aW8uYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Zpby5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlpZiAoIXN0cmNtcCh0eXBlLCAiZG9tYWluLXNlcnZpY2VzLXBvcnQiKSkKIAkJYnVzX2lkX25hbWUgPSAiZHMiOwogCi0JaWYgKHN0cmxlbihidXNfaWRfbmFtZSkgPj0gS09CSl9OQU1FX0xFTiAtIDQpIHsKKwlpZiAoc3RybGVuKGJ1c19pZF9uYW1lKSA+PSBCVVNfSURfU0laRSAtIDQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWSU86IGJ1c19pZF9uYW1lIFslc10gaXMgdG9vIGxvbmcuXG4iLAogCQkgICAgICAgYnVzX2lkX25hbWUpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTI2MCwxNiArMjYwLDE0IEBACiAJdmlvX2ZpbGxfY2hhbm5lbF9pbmZvKGhwLCBtcCwgdmRldik7CiAKIAlpZiAoIWlkKSB7Ci0JCXNucHJpbnRmKHZkZXYtPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiJXMiLAotCQkJIGJ1c19pZF9uYW1lKTsKKwkJZGV2X3NldF9uYW1lKCZ2ZGV2LT5kZXYsICIlcyIsIGJ1c19pZF9uYW1lKTsKIAkJdmRldi0+ZGV2X25vID0gfih1NjQpMDsKIAl9IGVsc2UgaWYgKCFjZmdfaGFuZGxlKSB7Ci0JCXNucHJpbnRmKHZkZXYtPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiJXMtJWx1IiwKLQkJCSBidXNfaWRfbmFtZSwgKmlkKTsKKwkJZGV2X3NldF9uYW1lKCZ2ZGV2LT5kZXYsICIlcy0lbHUiLCBidXNfaWRfbmFtZSwgKmlkKTsKIAkJdmRldi0+ZGV2X25vID0gKmlkOwogCX0gZWxzZSB7Ci0JCXNucHJpbnRmKHZkZXYtPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiJXMtJWx1LSVsdSIsCi0JCQkgYnVzX2lkX25hbWUsICpjZmdfaGFuZGxlLCAqaWQpOworCQlkZXZfc2V0X25hbWUoJnZkZXYtPmRldiwgIiVzLSVsdS0lbHUiLCBidXNfaWRfbmFtZSwKKwkJCSAgICAgKmNmZ19oYW5kbGUsICppZCk7CiAJCXZkZXYtPmRldl9ubyA9ICpjZmdfaGFuZGxlOwogCX0KIApAQCAtMjkyLDEyICsyOTAsMTIgQEAKIAl9CiAJdmRldi0+ZHAgPSBkcDsKIAotCXByaW50ayhLRVJOX0lORk8gIlZJTzogQWRkaW5nIGRldmljZSAlc1xuIiwgdmRldi0+ZGV2LmJ1c19pZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVklPOiBBZGRpbmcgZGV2aWNlICVzXG4iLCBkZXZfbmFtZSgmdmRldi0+ZGV2KSk7CiAKIAllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJnZkZXYtPmRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIlZJTzogQ291bGQgbm90IHJlZ2lzdGVyIGRldmljZSAlcywgZXJyPSVkXG4iLAotCQkgICAgICAgdmRldi0+ZGV2LmJ1c19pZCwgZXJyKTsKKwkJICAgICAgIGRldl9uYW1lKCZ2ZGV2LT5kZXYpLCBlcnIpOwogCQlrZnJlZSh2ZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMzMwLDcgKzMyOCw3IEBACiAJZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQoJnJvb3RfdmRldi0+ZGV2LCAodm9pZCAqKSBub2RlLAogCQkJCXZpb19tZF9ub2RlX21hdGNoKTsKIAlpZiAoZGV2KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlZJTzogUmVtb3ZpbmcgZGV2aWNlICVzXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0lORk8gIlZJTzogUmVtb3ZpbmcgZGV2aWNlICVzXG4iLCBkZXZfbmFtZShkZXYpKTsKIAogCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvY29weV9wYWdlLlMgYi9hcmNoL3NwYXJjNjQvbGliL2NvcHlfcGFnZS5TCmluZGV4IDM3NDYwNjYuLmIyNDNkM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9saWIvY29weV9wYWdlLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9jb3B5X3BhZ2UuUwpAQCAtMjUsOSArMjUsOSBAQAogCiAjZGVmaW5lCURDQUNIRV9TSVpFCShQQUdFX1NJWkUgKiAyKQogCi0jaWYgKFBBR0VfU0hJRlQgPT0gMTMpIHx8IChQQUdFX1NISUZUID09IDE5KQorI2lmIChQQUdFX1NISUZUID09IDEzKQogI2RlZmluZSBQQUdFX1NJWkVfUkVNCTB4ODAKLSNlbGlmIChQQUdFX1NISUZUID09IDE2KSB8fCAoUEFHRV9TSElGVCA9PSAyMikKKyNlbGlmIChQQUdFX1NISUZUID09IDE2KQogI2RlZmluZSBQQUdFX1NJWkVfUkVNCTB4MTAwCiAjZWxzZQogI2Vycm9yIFdyb25nIFBBR0VfU0hJRlQgc3BlY2lmaWVkCkBAIC0xOTgsNyArMTk4LDcgQEAKIAljbXAJCSVvMiwgUEFHRV9TSVpFX1JFTQogCWJuZSxwdAkJJXhjYywgMWIKIAkgYWRkCQklbzAsIDB4NDAsICVvMAotI2lmIChQQUdFX1NISUZUID09IDE2KSB8fCAoUEFHRV9TSElGVCA9PSAyMikKKyNpZiAoUEFHRV9TSElGVCA9PSAxNikKIAlUT1VDSChmMCwgZjIsIGY0LCBmNiwgZjgsIGYxMCwgZjEyLCBmMTQpCiAJbGRkYQkJWyVvMV0gQVNJX0JMS19QLCAlZjMyCiAJc3RkYQkJJWY0OCwgWyVvMF0gJWFzaQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL2ZhdWx0LmMgYi9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYwppbmRleCAyMzZmNGQyLi5lYTdkN2FlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL3NwYXJjNjQvbW0vZmF1bHQuYzogUGFnZSBmYXVsdCBoYW5kbGVycyBmb3IgdGhlIDY0LWJpdCBTcGFyYy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk2LCAyMDA4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKICAqLwogCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTExNSw3ICsxMTQsNyBAQAogCXByaW50ayhLRVJOX0NSSVQgIk9PUFM6IEJvZ3VzIGtlcm5lbCBQQyBbJTAxNmx4XSBpbiBmYXVsdCBoYW5kbGVyXG4iLAogCSAgICAgICByZWdzLT50cGMpOwogCXByaW50ayhLRVJOX0NSSVQgIk9PUFM6IFJQQyBbJTAxNmx4XVxuIiwgcmVncy0+dV9yZWdzWzE1XSk7Ci0JcHJpbnRfc3ltYm9sKCJSUEM6IDwlcz5cbiIsIHJlZ3MtPnVfcmVnc1sxNV0pOworCXByaW50aygiT09QUzogUlBDIDwlcFM+XG4iLCAodm9pZCAqKSByZWdzLT51X3JlZ3NbMTVdKTsKIAlwcmludGsoS0VSTl9DUklUICJPT1BTOiBGYXVsdCB3YXMgdG8gdmFkZHJbJWx4XVxuIiwgdmFkZHIpOwogCWR1bXBfc3RhY2soKTsKIAl1bmhhbmRsZWRfZmF1bHQocmVncy0+dHBjLCBjdXJyZW50LCByZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS90c2IuYyBiL2FyY2gvc3BhcmM2NC9tbS90c2IuYwppbmRleCBmZTcwYzhhLi4zNTQ3OTM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbW0vdHNiLmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL3RzYi5jCkBAIC05NiwxMiArOTYsNiBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNjRLQikKICNkZWZpbmUgSFZfUEdTWl9JRFhfQkFTRQlIVl9QR1NaX0lEWF82NEsKICNkZWZpbmUgSFZfUEdTWl9NQVNLX0JBU0UJSFZfUEdTWl9NQVNLXzY0SwotI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNTEyS0IpCi0jZGVmaW5lIEhWX1BHU1pfSURYX0JBU0UJSFZfUEdTWl9JRFhfNTEySwotI2RlZmluZSBIVl9QR1NaX01BU0tfQkFTRQlIVl9QR1NaX01BU0tfNTEySwotI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNE1CKQotI2RlZmluZSBIVl9QR1NaX0lEWF9CQVNFCUhWX1BHU1pfSURYXzRNQgotI2RlZmluZSBIVl9QR1NaX01BU0tfQkFTRQlIVl9QR1NaX01BU0tfNE1CCiAjZWxzZQogI2Vycm9yIEJyb2tlbiBiYXNlIHBhZ2Ugc2l6ZSBzZXR0aW5nLi4uCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TIGIvYXJjaC9zcGFyYzY0L21tL3VsdHJhLlMKaW5kZXggOWJiMmQ5MC4uNGM4Y2ExMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL3VsdHJhLlMKKysrIGIvYXJjaC9zcGFyYzY0L21tL3VsdHJhLlMKQEAgLTY4OCw2ICs2ODgsMTEgQEAKIAl3cgkJJWcwLCAoMSA8PCBQSUxfU01QX0NBTExfRlVOQyksICVzZXRfc29mdGludAogCXJldHJ5CiAKKwkuZ2xvYmwJCXhjYWxsX2NhbGxfZnVuY3Rpb25fc2luZ2xlCit4Y2FsbF9jYWxsX2Z1bmN0aW9uX3NpbmdsZToKKwl3cgkJJWcwLCAoMSA8PCBQSUxfU01QX0NBTExfRlVOQ19TTkdMKSwgJXNldF9zb2Z0aW50CisJcmV0cnkKKwogCS5nbG9ibAkJeGNhbGxfcmVjZWl2ZV9zaWduYWwKIHhjYWxsX3JlY2VpdmVfc2lnbmFsOgogCXdyCQklZzAsICgxIDw8IFBJTF9TTVBfUkVDRUlWRV9TSUdOQUwpLCAlc2V0X3NvZnRpbnQKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9pbml0LmggYi9hcmNoL3VtL2luY2x1ZGUvaW5pdC5oCmluZGV4IGIwMGE5NTcuLjM3ZGQwOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9pbml0LmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2luaXQuaApAQCAtNDUsNiArNDUsOCBAQAogIyBkZWZpbmUgX19zZWN0aW9uKFMpIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXygjUykpKQogI2VuZGlmCiAKKyNpZiBfX0dOVUNfXyA9PSAzCisKICNpZiBfX0dOVUNfTUlOT1JfXyA+PSAzCiAjIGRlZmluZSBfX3VzZWQJCQlfX2F0dHJpYnV0ZV9fKChfX3VzZWRfXykpCiAjZWxzZQpAQCAtNTIsNiArNTQsMTIgQEAKICNlbmRpZgogCiAjZWxzZQorI2lmIF9fR05VQ19fID09IDQKKyMgZGVmaW5lIF9fdXNlZAkJCV9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKKyNlbmRpZgorI2VuZGlmCisKKyNlbHNlCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNlbmRpZgogLyogVGhlc2UgYXJlIGZvciBldmVyeWJvZHkgKGFsdGhvdWdoIG5vdCBhbGwgYXJjaHMgd2lsbCBhY3R1YWxseQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggOTZlMGMyZS4uMDM5ODBjYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC00NDcsNyArNDQ3LDYgQEAKIAogY29uZmlnIE1FTVRFU1QKIAlib29sICJNZW10ZXN0IgotCWRlcGVuZHMgb24gWDg2XzY0CiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWRkcyBhIGtlcm5lbCBwYXJhbWV0ZXIgJ21lbXRlc3QnLCB3aGljaCBhbGxvd3MgbWVtdGVzdAogCSAgdG8gYmUgc2V0LgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCBhYmZmMWI4Li4yYzUxOGZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtMzYyLDEwICszNjIsNiBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1XSU5DSElQQzYgfHwgTUNZUklYSUlJIHx8IFg4Nl9FTEFOIHx8IE1LNiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTTU4NiB8fCBNNDg2IHx8IE1WSUFDM18yIHx8IE1HRU9ERUdYMQogCi1jb25maWcgWDg2X0dPT0RfQVBJQwotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE1LNyB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE1LOCB8fCBNRUZGSUNFT04gfHwgTUNPUkUyIHx8IE1WSUFDNyB8fCBYODZfNjQKLQogY29uZmlnIFg4Nl9JTlRFTF9VU0VSQ09QWQogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNTg2TU1YIHx8IFg4Nl9HRU5FUklDIHx8IE1LOCB8fCBNSzcgfHwgTUVGRklDRU9OIHx8IE1DT1JFMgpAQCAtNDE4LDQgKzQxNCw0IEBACiAKIGNvbmZpZyBYODZfREVCVUdDVExNU1IKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiAhKE01ODZNTVggfHwgTTU4NlRTQyB8fCBNNTg2IHx8IE00ODYgfHwgTTM4NikKKwlkZXBlbmRzIG9uICEoTUs2IHx8IE1XSU5DSElQQzYgfHwgTVdJTkNISVAyIHx8IE1XSU5DSElQM0QgfHwgTUNZUklYSUlJIHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNNTg2IHx8IE00ODYgfHwgTTM4NikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuZGVidWcgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCmluZGV4IGFlMzZiZmEuLjA5MmYwMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwpAQCAtNSwxMyArNSwxNSBAQAogCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCi1jb25maWcgTk9OUFJPTUlTQ19ERVZNRU0KK2NvbmZpZyBTVFJJQ1RfREVWTUVNCiAJYm9vbCAiRmlsdGVyIGFjY2VzcyB0byAvZGV2L21lbSIKIAloZWxwCi0JICBJZiB0aGlzIG9wdGlvbiBpcyBsZWZ0IG9mZiwgeW91IGFsbG93IHVzZXJzcGFjZSBhY2Nlc3MgdG8gYWxsCisJICBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCwgeW91IGFsbG93IHVzZXJzcGFjZSAocm9vdCkgYWNjZXNzIHRvIGFsbAogCSAgb2YgbWVtb3J5LCBpbmNsdWRpbmcga2VybmVsIGFuZCB1c2Vyc3BhY2UgbWVtb3J5LiBBY2NpZGVudGFsCiAJICBhY2Nlc3MgdG8gdGhpcyBpcyBvYnZpb3VzbHkgZGlzYXN0cm91cywgYnV0IHNwZWNpZmljIGFjY2VzcyBjYW4KLQkgIGJlIHVzZWQgYnkgcGVvcGxlIGRlYnVnZ2luZyB0aGUga2VybmVsLgorCSAgYmUgdXNlZCBieSBwZW9wbGUgZGVidWdnaW5nIHRoZSBrZXJuZWwuIE5vdGUgdGhhdCB3aXRoIFBBVCBzdXBwb3J0CisJICBlbmFibGVkLCBldmVuIGluIHRoaXMgY2FzZSB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zIG9uIC9kZXYvbWVtCisJICB1c2UgZHVlIHRvIHRoZSBjYWNoZSBhbGlhc2luZyByZXF1aXJlbWVudHMuCiAKIAkgIElmIHRoaXMgb3B0aW9uIGlzIHN3aXRjaGVkIG9uLCB0aGUgL2Rldi9tZW0gZmlsZSBvbmx5IGFsbG93cwogCSAgdXNlcnNwYWNlIGFjY2VzcyB0byBQQ0kgc3BhY2UgYW5kIHRoZSBCSU9TIGNvZGUgYW5kIGRhdGEgcmVnaW9ucy4KQEAgLTI4Nyw3ICsyODksNiBAQAogCiBjb25maWcgT1BUSU1JWkVfSU5MSU5JTkcKIAlib29sICJBbGxvdyBnY2MgdG8gdW5pbmxpbmUgZnVuY3Rpb25zIG1hcmtlZCAnaW5saW5lJyIKLQlkZXBlbmRzIG9uIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGRldGVybWluZXMgaWYgdGhlIGtlcm5lbCBmb3JjZXMgZ2NjIHRvIGlubGluZSB0aGUgZnVuY3Rpb25zCiAJICBkZXZlbG9wZXJzIGhhdmUgbWFya2VkICdpbmxpbmUnLiBEb2luZyBzbyB0YWtlcyBhd2F5IGZyZWVkb20gZnJvbSBnY2MgdG8KQEAgLTI5OCw1ICsyOTksNyBAQAogCSAgYmVjb21lIHRoZSBkZWZhdWx0IGluIHRoZSBmdXR1cmUsIHVudGlsIHRoZW4gdGhpcyBvcHRpb24gaXMgdGhlcmUgdG8KIAkgIHRlc3QgZ2NjIGZvciB0aGlzLgogCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvZWRkLmMgYi9hcmNoL3g4Ni9ib290L2VkZC5jCmluZGV4IDAzMzk5ZDYuLmQ5M2NiYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvZWRkLmMKKysrIGIvYXJjaC94ODYvYm9vdC9lZGQuYwpAQCAtMTY3LDkgKzE2Nyw4IEBACiAJCSAqIFNjYW4gdGhlIEJJT1Mtc3VwcG9ydGVkIGhhcmQgZGlza3MgYW5kIHF1ZXJ5IEVERAogCQkgKiBpbmZvcm1hdGlvbi4uLgogCQkgKi8KLQkJZ2V0X2VkZF9pbmZvKGRldm5vLCAmZWkpOwotCi0JCWlmIChib290X3BhcmFtcy5lZGRidWZfZW50cmllcyA8IEVERE1BWE5SKSB7CisJCWlmICghZ2V0X2VkZF9pbmZvKGRldm5vLCAmZWkpCisJCSAgICAmJiBib290X3BhcmFtcy5lZGRidWZfZW50cmllcyA8IEVERE1BWE5SKSB7CiAJCQltZW1jcHkoZWRwLCAmZWksIHNpemVvZiBlaSk7CiAJCQllZHArKzsKIAkJCWJvb3RfcGFyYW1zLmVkZGJ1Zl9lbnRyaWVzKys7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3BtLmMgYi9hcmNoL3g4Ni9ib290L3BtLmMKaW5kZXggMzI4OTU2Zi4uODVhMWNkOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9wbS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvcG0uYwpAQCAtOTgsMTIgKzk4LDYgQEAKIC8qCiAgKiBTZXQgdXAgdGhlIEdEVAogICovCi0jZGVmaW5lIEdEVF9FTlRSWShmbGFncywgYmFzZSwgbGltaXQpCQlcCi0JKCgodTY0KShiYXNlICYgMHhmZjAwMDAwMCkgPDwgMzIpIHwJXAotCSAoKHU2NClmbGFncyA8PCA0MCkgfAkJCVwKLQkgKCh1NjQpKGxpbWl0ICYgMHgwMGZmMDAwMCkgPDwgMzIpIHwJXAotCSAoKHU2NCkoYmFzZSAmIDB4MDBmZmZmZmYpIDw8IDE2KSB8CVwKLQkgKCh1NjQpKGxpbWl0ICYgMHgwMDAwZmZmZikpKQogCiBzdHJ1Y3QgZ2R0X3B0ciB7CiAJdTE2IGxlbjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcgYi9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCmluZGV4IDliYzM0ZTIuLjRkNzNmNTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKKysrIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwpAQCAtMjA0Nyw3ICsyMDQ3LDcgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfTk9OUFJPTUlTQ19ERVZNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU1RSSUNUX0RFVk1FTSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcgYi9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKaW5kZXggYWU1MTI0ZS4uYTQwNDUyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZwpAQCAtMjAxMiw3ICsyMDEyLDcgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfTk9OUFJPTUlTQ19ERVZNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU1RSSUNUX0RFVk1FTSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL2lhMzJfc2lnbmFsLmMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfc2lnbmFsLmMKaW5kZXggY2IzODU2YS4uMjBhZjRjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyX3NpZ25hbC5jCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMl9zaWduYWwuYwpAQCAtMzYsNiArMzYsMTEgQEAKIAogI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKIAorI2RlZmluZSBGSVhfRUZMQUdTCShYODZfRUZMQUdTX0FDIHwgWDg2X0VGTEFHU19PRiB8IFwKKwkJCSBYODZfRUZMQUdTX0RGIHwgWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfU0YgfCBcCisJCQkgWDg2X0VGTEFHU19aRiB8IFg4Nl9FRkxBR1NfQUYgfCBYODZfRUZMQUdTX1BGIHwgXAorCQkJIFg4Nl9FRkxBR1NfQ0YpCisKIGFzbWxpbmthZ2UgaW50IGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc2lnc2V0X3QgKm9sZHNldCk7CiB2b2lkIHNpZ25hbF9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCBfX3VzZXIgKmZyYW1lLCBjaGFyICp3aGVyZSk7CiAKQEAgLTI0OCw3ICsyNTMsNyBAQAogCXJlZ3MtPnNzIHw9IDM7CiAKIAllcnIgfD0gX19nZXRfdXNlcih0bXBmbGFncywgJnNjLT5mbGFncyk7Ci0JcmVncy0+ZmxhZ3MgPSAocmVncy0+ZmxhZ3MgJiB+MHg0MERENSkgfCAodG1wZmxhZ3MgJiAweDQwREQ1KTsKKwlyZWdzLT5mbGFncyA9IChyZWdzLT5mbGFncyAmIH5GSVhfRUZMQUdTKSB8ICh0bXBmbGFncyAmIEZJWF9FRkxBR1MpOwogCS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KIAlyZWdzLT5vcmlnX2F4ID0gLTE7CiAKQEAgLTUxNSw3ICs1MjAsNiBAQAogCQkJY29tcGF0X3NpZ3NldF90ICpzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lOwotCXN0cnVjdCBleGVjX2RvbWFpbiAqZWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluOwogCXZvaWQgX191c2VyICpyZXN0b3JlcjsKIAlpbnQgZXJyID0gMDsKIApAQCAtNTM4LDggKzU0Miw3IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKIAotCWVyciB8PSBfX3B1dF91c2VyKChlZCAmJiBlZC0+c2lnbmFsX2ludm1hcCAmJiBzaWcgPCAzMgotCQkJICAgPyBlZC0+c2lnbmFsX2ludm1hcFtzaWddIDogc2lnKSwgJmZyYW1lLT5zaWcpOworCWVyciB8PSBfX3B1dF91c2VyKHNpZywgJmZyYW1lLT5zaWcpOwogCWVyciB8PSBfX3B1dF91c2VyKHB0cl90b19jb21wYXQoJmZyYW1lLT5pbmZvKSwgJmZyYW1lLT5waW5mbyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIocHRyX3RvX2NvbXBhdCgmZnJhbWUtPnVjKSwgJmZyYW1lLT5wdWMpOwogCWVyciB8PSBjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKCZmcmFtZS0+aW5mbywgaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwppbmRleCAyMDM3MWQwLi4yM2QxNDZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTM3LDYgKzM3LDExIEBACiAJbW92cQklcmF4LFI4KCVyc3ApCiAJLmVuZG0KIAorCS8qCisJICogUmVsb2FkIGFyZyByZWdpc3RlcnMgZnJvbSBzdGFjayBpbiBjYXNlIHB0cmFjZSBjaGFuZ2VkIHRoZW0uCisJICogV2UgZG9uJ3QgcmVsb2FkICVlYXggYmVjYXVzZSBzeXNjYWxsX3RyYWNlX2VudGVyKCkgcmV0dXJuZWQKKwkgKiB0aGUgdmFsdWUgaXQgd2FudHMgdXMgdG8gdXNlIGluIHRoZSB0YWJsZSBsb29rdXAuCisJICovCiAJLm1hY3JvIExPQURfQVJHUzMyIG9mZnNldAogCW1vdmwgXG9mZnNldCglcnNwKSwlcjExZAogCW1vdmwgXG9mZnNldCs4KCVyc3ApLCVyMTBkCkBAIC00Niw3ICs1MSw2IEBACiAJbW92bCBcb2Zmc2V0KzQ4KCVyc3ApLCVlZHgKIAltb3ZsIFxvZmZzZXQrNTYoJXJzcCksJWVzaQogCW1vdmwgXG9mZnNldCs2NCglcnNwKSwlZWRpCi0JbW92bCBcb2Zmc2V0KzcyKCVyc3ApLCVlYXgKIAkuZW5kbQogCQogCS5tYWNybyBDRklfU1RBUlRQUk9DMzIgc2ltcGxlCkBAIC0xMzcsMTMgKzE0MSwxMiBAQAogIAkucHJldmlvdXMJCiAJR0VUX1RIUkVBRF9JTkZPKCVyMTApCiAJb3JsICAgICRUU19DT01QQVQsVElfc3RhdHVzKCVyMTApCi0JdGVzdGwgICQoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NFQ0NPTVApLCBcCi0JCSBUSV9mbGFncyglcjEwKQorCXRlc3RsICAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJXIxMCkKIAlDRklfUkVNRU1CRVJfU1RBVEUKIAlqbnogIHN5c2VudGVyX3RyYWNlc3lzCi1zeXNlbnRlcl9kb19jYWxsOgkKIAljbXBsCSQoSUEzMl9OUl9zeXNjYWxscy0xKSwlZWF4CiAJamEJaWEzMl9iYWRzeXMKK3N5c2VudGVyX2RvX2NhbGw6CiAJSUEzMl9BUkdfRklYVVAgMQogCWNhbGwJKmlhMzJfc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkKIAltb3ZxCSVyYXgsUkFYLUFSR09GRlNFVCglcnNwKQpAQCAtMjQyLDggKzI0NSw3IEBACiAJLnByZXZpb3VzCQogCUdFVF9USFJFQURfSU5GTyglcjEwKQogCW9ybCAgICRUU19DT01QQVQsVElfc3RhdHVzKCVyMTApCi0JdGVzdGwgJChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfU0VDQ09NUCksIFwKLQkJVElfZmxhZ3MoJXIxMCkKKwl0ZXN0bCAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJXIxMCkKIAlDRklfUkVNRU1CRVJfU1RBVEUKIAlqbnogICBjc3Rhcl90cmFjZXN5cwogY3N0YXJfZG9fY2FsbDoJCkBAIC0zMjEsNiArMzIzLDcgQEAKIAkvKkNGSV9SRUxfT0ZGU0VUCXJmbGFncyxFRkxBR1MtUklQKi8KIAkvKkNGSV9SRUxfT0ZGU0VUCWNzLENTLVJJUCovCiAJQ0ZJX1JFTF9PRkZTRVQJcmlwLFJJUC1SSVAKKwlQQVJBVklSVF9BREpVU1RfRVhDRVBUSU9OX0ZSQU1FCiAJU1dBUEdTCiAJLyoKIAkgKiBObyBuZWVkIHRvIGZvbGxvdyB0aGlzIGlycXMgb24vb2ZmIHNlY3Rpb246IHRoZSBzeXNjYWxsCkBAIC0zMzYsOCArMzM5LDcgQEAKIAlTQVZFX0FSR1MgMCwwLDEKIAlHRVRfVEhSRUFEX0lORk8oJXIxMCkKIAlvcmwgICAkVFNfQ09NUEFULFRJX3N0YXR1cyglcjEwKQotCXRlc3RsICQoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NFQ0NPTVApLCBcCi0JCVRJX2ZsYWdzKCVyMTApCisJdGVzdGwgJF9USUZfV09SS19TWVNDQUxMX0VOVFJZLFRJX2ZsYWdzKCVyMTApCiAJam56IGlhMzJfdHJhY2VzeXMKIGlhMzJfZG9fc3lzY2FsbDoJCiAJY21wbCAkKElBMzJfTlJfc3lzY2FsbHMtMSksJWVheApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IGRhMTQwNjEuLjNkYjY1MWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTcsOSArNywxMCBAQAogQ1BQRkxBR1Nfdm1saW51eC5sZHMgKz0gLVUkKFVUU19NQUNISU5FKQogCiBpZmRlZiBDT05GSUdfRlRSQUNFCi0jIERvIG5vdCBwcm9maWxlIGRlYnVnIHV0aWxpdGllcworIyBEbyBub3QgcHJvZmlsZSBkZWJ1ZyBhbmQgbG93bGV2ZWwgdXRpbGl0aWVzCiBDRkxBR1NfUkVNT1ZFX3RzYy5vID0gLXBnCiBDRkxBR1NfUkVNT1ZFX3J0Yy5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX3BhcmF2aXJ0Lm8gPSAtcGcKIGVuZGlmCiAKICMKQEAgLTEwMiw2ICsxMDMsNyBAQAogIyA2NCBiaXQgc3BlY2lmaWMgZmlsZXMKIGlmZXEgKCQoQ09ORklHX1g4Nl82NCkseSkKICAgICAgICAgb2JqLXkJCQkJKz0gZ2VuYXBpY182NC5vIGdlbmFwaWNfZmxhdF82NC5vIGdlbngyYXBpY191dl94Lm8gdGxiX3V2Lm8KKwlvYmoteQkJCQkrPSBiaW9zX3V2Lm8KICAgICAgICAgb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gcG10aW1lcl82NC5vCiAgICAgICAgIG9iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0XzY0Lm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IGY0ODlkN2EuLmZhODhhMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTEwMjEsNyArMTAyMSw3IEBACiAJbXBfYnVzX2lkX3RvX3R5cGVbTVBfSVNBX0JVU10gPSBNUF9CVVNfSVNBOwogI2VuZGlmCiAJc2V0X2JpdChNUF9JU0FfQlVTLCBtcF9idXNfbm90X3BjaSk7Ci0JRHByaW50aygiQnVzICMlZCBpcyBJU0FcbiIsIE1QX0lTQV9CVVMpOworCXByX2RlYnVnKCJCdXMgIyVkIGlzIElTQVxuIiwgTVBfSVNBX0JVUyk7CiAKICNpZmRlZiBDT05GSUdfWDg2X0VTNzAwMAogCS8qCkBAIC0xMTI3LDggKzExMjcsOCBAQAogCQlyZXR1cm4gZ3NpOwogCX0KIAlpZiAodGVzdF9iaXQoaW9hcGljX3BpbiwgbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5waW5fcHJvZ3JhbW1lZCkpIHsKLQkJRHByaW50ayhLRVJOX0RFQlVHICJQaW4gJWQtJWQgYWxyZWFkeSBwcm9ncmFtbWVkXG4iLAotCQkJbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5hcGljX2lkLCBpb2FwaWNfcGluKTsKKwkJcHJfZGVidWcoS0VSTl9ERUJVRyAiUGluICVkLSVkIGFscmVhZHkgcHJvZ3JhbW1lZFxuIiwKKwkJCSBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmFwaWNfaWQsIGlvYXBpY19waW4pOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAkJcmV0dXJuIChnc2kgPCBJUlFfQ09NUFJFU1NJT05fU1RBUlQgPyBnc2kgOiBnc2lfdG9faXJxW2dzaV0pOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMKaW5kZXggYzI1MDJlYi4uOTIyMGNmNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMKQEAgLTczLDYgKzczLDcgQEAKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKIAogCWNwdW1hc2tfdCBzYXZlZF9tYXNrOworCWNwdW1hc2tfb2ZfY3B1X3B0cihuZXdfbWFzaywgY3B1KTsKIAlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7CiAJdW5zaWduZWQgaW50IGVkeF9wYXJ0OwpAQCAtOTEsNyArOTIsNyBAQAogCiAJLyogTWFrZSBzdXJlIHdlIGFyZSBydW5uaW5nIG9uIHJpZ2h0IENQVSAqLwogCXNhdmVkX21hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0JcmV0dmFsID0gc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCXJldHZhbCA9IHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIG5ld19tYXNrKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gLTE7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IDg2OGRlM2QuLmEzZGRhZDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKICNpbmNsdWRlICJyZWFsbW9kZS93YWtldXAuaCIKICNpbmNsdWRlICJzbGVlcC5oIgpAQCAtMjMsMTUgKzI0LDYgQEAKIHN0YXRpYyBjaGFyIHRlbXBfc3RhY2tbMTAyNDBdOwogI2VuZGlmCiAKLS8qIFhYWDogdGhpcyBtYWNybyBzaG91bGQgbW92ZSB0byBhc20teDg2L3NlZ21lbnQuaCBhbmQgYmUgc2hhcmVkIHdpdGggdGhlCi0gICBib290IGNvZGUuLi4gKi8KLSNkZWZpbmUgR0RUX0VOVFJZKGZsYWdzLCBiYXNlLCBsaW1pdCkJCVwKLQkoKCh1NjQpKGJhc2UgJiAweGZmMDAwMDAwKSA8PCAzMikgfAlcCi0JICgodTY0KWZsYWdzIDw8IDQwKSB8CQkJXAotCSAoKHU2NCkobGltaXQgJiAweDAwZmYwMDAwKSA8PCAzMikgfAlcCi0JICgodTY0KShiYXNlICYgMHgwMGZmZmZmZikgPDwgMTYpIHwJXAotCSAoKHU2NCkobGltaXQgJiAweDAwMDBmZmZmKSkpCi0KIC8qKgogICogYWNwaV9zYXZlX3N0YXRlX21lbSAtIHNhdmUga2VybmVsIHN0YXRlCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCmluZGV4IGYyNzY2ZDguLmMyNTIxMGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11LWhlbHBlci5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgotI2luY2x1ZGUgPGFzbS9nYXJ0Lmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXUuaD4KIApAQCAtMzIsMjEgKzMyLDM3IEBACiAjZGVmaW5lIHRvX3BhZ2VzKGFkZHIsIHNpemUpIFwKIAkgKHJvdW5kX3VwKCgoYWRkcikgJiB+UEFHRV9NQVNLKSArIChzaXplKSwgUEFHRV9TSVpFKSA+PiBQQUdFX1NISUZUKQogCisjZGVmaW5lIEVYSVRfTE9PUF9DT1VOVCAxMDAwMDAwMAorCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhhbWRfaW9tbXVfZGV2dGFibGVfbG9jayk7CiAKLXN0cnVjdCBjb21tYW5kIHsKKy8qCisgKiBnZW5lcmFsIHN0cnVjdCB0byBtYW5hZ2UgY29tbWFuZHMgc2VuZCB0byBhbiBJT01NVQorICovCitzdHJ1Y3QgaW9tbXVfY21kIHsKIAl1MzIgZGF0YVs0XTsKIH07CiAKIHN0YXRpYyBpbnQgZG1hX29wc191bml0eV9tYXAoc3RydWN0IGRtYV9vcHNfZG9tYWluICpkbWFfZG9tLAogCQkJICAgICBzdHJ1Y3QgdW5pdHlfbWFwX2VudHJ5ICplKTsKIAorLyogcmV0dXJucyAhMCBpZiB0aGUgSU9NTVUgaXMgY2FjaGluZyBub24tcHJlc2VudCBlbnRyaWVzIGluIGl0cyBUTEIgKi8KIHN0YXRpYyBpbnQgaW9tbXVfaGFzX25wY2FjaGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiB7CiAJcmV0dXJuIGlvbW11LT5jYXAgJiBJT01NVV9DQVBfTlBDQUNIRTsKIH0KIAotc3RhdGljIGludCBfX2lvbW11X3F1ZXVlX2NvbW1hbmQoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHN0cnVjdCBjb21tYW5kICpjbWQpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElPTU1VIGNvbW1hbmQgcXVldWluZyBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFdyaXRlcyB0aGUgY29tbWFuZCB0byB0aGUgSU9NTVVzIGNvbW1hbmQgYnVmZmVyIGFuZCBpbmZvcm1zIHRoZQorICogaGFyZHdhcmUgYWJvdXQgdGhlIG5ldyBjb21tYW5kLiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlvbW11LT5sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgX19pb21tdV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCBzdHJ1Y3QgaW9tbXVfY21kICpjbWQpCiB7CiAJdTMyIHRhaWwsIGhlYWQ7CiAJdTggKnRhcmdldDsKQEAgLTYzLDcgKzc5LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW9tbXVfcXVldWVfY29tbWFuZChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgc3RydWN0IGNvbW1hbmQgKmNtZCkKKy8qCisgKiBHZW5lcmFsIHF1ZXVpbmcgZnVuY3Rpb24gZm9yIGNvbW1hbmRzLiBUYWtlcyBpb21tdS0+bG9jayBhbmQgY2FsbHMKKyAqIF9faW9tbXVfcXVldWVfY29tbWFuZCgpLgorICovCitzdGF0aWMgaW50IGlvbW11X3F1ZXVlX2NvbW1hbmQoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHN0cnVjdCBpb21tdV9jbWQgKmNtZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CkBAIC03NSwxNiArOTUsMjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgSU9NTVUgaGFzCisgKiBjb21wbGV0ZWQgZXhlY3V0aW9uIG9mIGFsbCBjb21tYW5kcyB3ZSBzZW50LiBJdCBzZW5kcyBhCisgKiBDT01QTEVUSU9OX1dBSVQgY29tbWFuZCBhbmQgd2FpdHMgZm9yIGl0IHRvIGZpbmlzaC4gVGhlIElPTU1VIGluZm9ybXMKKyAqIHVzIGFib3V0IHRoYXQgYnkgd3JpdGluZyBhIHZhbHVlIHRvIGEgcGh5c2ljYWwgYWRkcmVzcyB3ZSBwYXNzIHdpdGgKKyAqIHRoZSBjb21tYW5kLgorICovCiBzdGF0aWMgaW50IGlvbW11X2NvbXBsZXRpb25fd2FpdChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBjb21tYW5kIGNtZDsKKwlzdHJ1Y3QgaW9tbXVfY21kIGNtZDsKIAl2b2xhdGlsZSB1NjQgcmVhZHkgPSAwOwogCXVuc2lnbmVkIGxvbmcgcmVhZHlfcGh5cyA9IHZpcnRfdG9fcGh5cygmcmVhZHkpOworCXVuc2lnbmVkIGxvbmcgaSA9IDA7CiAKIAltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCWNtZC5kYXRhWzBdID0gTE9XX1UzMihyZWFkeV9waHlzKSB8IENNRF9DT01QTF9XQUlUX1NUT1JFX01BU0s7Ci0JY21kLmRhdGFbMV0gPSBISUdIX1UzMihyZWFkeV9waHlzKTsKKwljbWQuZGF0YVsxXSA9IHVwcGVyXzMyX2JpdHMocmVhZHlfcGh5cyk7CiAJY21kLmRhdGFbMl0gPSAxOyAvKiB2YWx1ZSB3cml0dGVuIHRvICdyZWFkeScgKi8KIAlDTURfU0VUX1RZUEUoJmNtZCwgQ01EX0NPTVBMX1dBSVQpOwogCkBAIC05NSwxNSArMTIzLDIzIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXdoaWxlICghcmVhZHkpCisJd2hpbGUgKCFyZWFkeSAmJiAoaSA8IEVYSVRfTE9PUF9DT1VOVCkpIHsKKwkJKytpOwogCQljcHVfcmVsYXgoKTsKKwl9CisKKwlpZiAodW5saWtlbHkoKGkgPT0gRVhJVF9MT09QX0NPVU5UKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJBTUQgSU9NTVU6IENvbXBsZXRpb24gd2FpdCBsb29wIGZhaWxlZFxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIENvbW1hbmQgc2VuZCBmdW5jdGlvbiBmb3IgaW52YWxpZGF0aW5nIGEgZGV2aWNlIHRhYmxlIGVudHJ5CisgKi8KIHN0YXRpYyBpbnQgaW9tbXVfcXVldWVfaW52X2Rldl9lbnRyeShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTE2IGRldmlkKQogewotCXN0cnVjdCBjb21tYW5kIGNtZDsKKwlzdHJ1Y3QgaW9tbXVfY21kIGNtZDsKIAogCUJVR19PTihpb21tdSA9PSBOVUxMKTsKIApAQCAtMTE2LDIwICsxNTIsMjMgQEAKIAlyZXR1cm4gaW9tbXVfcXVldWVfY29tbWFuZChpb21tdSwgJmNtZCk7CiB9CiAKKy8qCisgKiBHZW5lcmljIGNvbW1hbmQgc2VuZCBmdW5jdGlvbiBmb3IgaW52YWxpZGFpbmcgVExCIGVudHJpZXMKKyAqLwogc3RhdGljIGludCBpb21tdV9xdWV1ZV9pbnZfaW9tbXVfcGFnZXMoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCiAJCXU2NCBhZGRyZXNzLCB1MTYgZG9taWQsIGludCBwZGUsIGludCBzKQogewotCXN0cnVjdCBjb21tYW5kIGNtZDsKKwlzdHJ1Y3QgaW9tbXVfY21kIGNtZDsKIAogCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJYWRkcmVzcyAmPSBQQUdFX01BU0s7CiAJQ01EX1NFVF9UWVBFKCZjbWQsIENNRF9JTlZfSU9NTVVfUEFHRVMpOwogCWNtZC5kYXRhWzFdIHw9IGRvbWlkOwogCWNtZC5kYXRhWzJdID0gTE9XX1UzMihhZGRyZXNzKTsKLQljbWQuZGF0YVszXSA9IEhJR0hfVTMyKGFkZHJlc3MpOwotCWlmIChzKQorCWNtZC5kYXRhWzNdID0gdXBwZXJfMzJfYml0cyhhZGRyZXNzKTsKKwlpZiAocykgLyogc2l6ZSBiaXQgLSB3ZSBmbHVzaCBtb3JlIHRoYW4gb25lIDRrYiBwYWdlICovCiAJCWNtZC5kYXRhWzJdIHw9IENNRF9JTlZfSU9NTVVfUEFHRVNfU0laRV9NQVNLOwotCWlmIChwZGUpCisJaWYgKHBkZSkgLyogUERFIGJpdCAtIHdlIHdhbid0IGZsdXNoIGV2ZXJ5dGhpbmcgbm90IG9ubHkgdGhlIFBURXMgKi8KIAkJY21kLmRhdGFbMl0gfD0gQ01EX0lOVl9JT01NVV9QQUdFU19QREVfTUFTSzsKIAogCWlvbW11LT5uZWVkX3N5bmMgPSAxOwpAQCAtMTM3LDYgKzE3NiwxMSBAQAogCXJldHVybiBpb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKIH0KIAorLyoKKyAqIFRMQiBpbnZhbGlkYXRpb24gZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGZyb20gdGhlIG1hcHBpbmcgZnVuY3Rpb25zLgorICogSXQgaW52YWxpZGF0ZXMgYSBzaW5nbGUgUFRFIGlmIHRoZSByYW5nZSB0byBmbHVzaCBpcyB3aXRoaW4gYSBzaW5nbGUKKyAqIHBhZ2UuIE90aGVyd2lzZSBpdCBmbHVzaGVzIHRoZSB3aG9sZSBUTEIgb2YgdGhlIElPTU1VLgorICovCiBzdGF0aWMgaW50IGlvbW11X2ZsdXNoX3BhZ2VzKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1MTYgZG9taWQsCiAJCXU2NCBhZGRyZXNzLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTE1OSw2ICsyMDMsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSB1c2VkIHRoZSBjcmVhdGUgdGhlIHBhZ2UgdGFibGUgbWFwcGluZ3MgZm9yCisgKiB1bml0eSBtYXBwZWQgcmVnaW9ucy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEdlbmVyaWMgbWFwcGluZyBmdW5jdGlvbnMuIEl0IG1hcHMgYSBwaHlzaWNhbCBhZGRyZXNzIGludG8gYSBETUEKKyAqIGFkZHJlc3Mgc3BhY2UuIEl0IGFsbG9jYXRlcyB0aGUgcGFnZSB0YWJsZSBwYWdlcyBpZiBuZWNlc3NhcnkuCisgKiBJbiB0aGUgZnV0dXJlIGl0IGNhbiBiZSBleHRlbmRlZCB0byBhIGdlbmVyaWMgbWFwcGluZyBmdW5jdGlvbgorICogc3VwcG9ydGluZyBhbGwgZmVhdHVyZXMgb2YgQU1EIElPTU1VIHBhZ2UgdGFibGVzIGxpa2UgbGV2ZWwgc2tpcHBpbmcKKyAqIGFuZCBmdWxsIDY0IGJpdCBhZGRyZXNzIHNwYWNlcy4KKyAqLwogc3RhdGljIGludCBpb21tdV9tYXAoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb20sCiAJCSAgICAgdW5zaWduZWQgbG9uZyBidXNfYWRkciwKIAkJICAgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKQEAgLTIwOSw2ICsyNjcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgc3BlY2lmaWMgdW5pdHkgbWFwcGluZyBlbnRyeSBpcyBuZWVkZWQgZm9yCisgKiB0aGlzIHNwZWNpZmljIElPTU1VLgorICovCiBzdGF0aWMgaW50IGlvbW11X2Zvcl91bml0eV9tYXAoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCiAJCQkgICAgICAgc3RydWN0IHVuaXR5X21hcF9lbnRyeSAqZW50cnkpCiB7CkBAIC0yMjMsNiArMjg1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBJbml0IHRoZSB1bml0eSBtYXBwaW5ncyBmb3IgYSBzcGVjaWZpYyBJT01NVSBpbiB0aGUgc3lzdGVtCisgKgorICogQmFzaWNhbGx5IGl0ZXJhdGVzIG92ZXIgYWxsIHVuaXR5IG1hcHBpbmcgZW50cmllcyBhbmQgYXBwbGllcyB0aGVtIHRvCisgKiB0aGUgZGVmYXVsdCBkb21haW4gRE1BIG9mIHRoYXQgSU9NTVUgaWYgbmVjZXNzYXJ5LgorICovCiBzdGF0aWMgaW50IGlvbW11X2luaXRfdW5pdHlfbWFwcGluZ3Moc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiB7CiAJc3RydWN0IHVuaXR5X21hcF9lbnRyeSAqZW50cnk7CkBAIC0yMzksNiArMzA3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGFwcGxpZXMgdGhlIG1hcHBpbmcgdG8gdGhlIHBhZ2UgdGFibGUgb2YgdGhlCisgKiBkbWFfb3BzIGRvbWFpbi4KKyAqLwogc3RhdGljIGludCBkbWFfb3BzX3VuaXR5X21hcChzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRtYV9kb20sCiAJCQkgICAgIHN0cnVjdCB1bml0eV9tYXBfZW50cnkgKmUpCiB7CkBAIC0yNjEsNiArMzMzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEluaXRzIHRoZSB1bml0eSBtYXBwaW5ncyByZXF1aXJlZCBmb3IgYSBzcGVjaWZpYyBkZXZpY2UKKyAqLwogc3RhdGljIGludCBpbml0X3VuaXR5X21hcHBpbmdzX2Zvcl9kZXZpY2Uoc3RydWN0IGRtYV9vcHNfZG9tYWluICpkbWFfZG9tLAogCQkJCQkgIHUxNiBkZXZpZCkKIHsKQEAgLTI3OCwxMiArMzUzLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlIG5leHQgZnVuY3Rpb25zIGJlbG9uZyB0byB0aGUgYWRkcmVzcyBhbGxvY2F0b3IgZm9yIHRoZSBkbWFfb3BzCisgKiBpbnRlcmZhY2UgZnVuY3Rpb25zLiBUaGV5IHdvcmsgbGlrZSB0aGUgYWxsb2NhdG9ycyBpbiB0aGUgb3RoZXIgSU9NTVUKKyAqIGRyaXZlcnMuIEl0cyBiYXNpY2FsbHkgYSBiaXRtYXAgd2hpY2ggbWFya3MgdGhlIGFsbG9jYXRlZCBwYWdlcyBpbgorICogdGhlIGFwZXJ0dXJlLiBNYXliZSBpdCBjb3VsZCBiZSBlbmhhbmNlZCBpbiB0aGUgZnV0dXJlIHRvIGEgbW9yZQorICogZWZmaWNpZW50IGFsbG9jYXRvci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRtYV9tYXNrX3RvX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKIAlyZXR1cm4gKG1hc2sgPj4gUEFHRV9TSElGVCkgKwogCQkoUEFHRV9BTElHTihtYXNrICYgflBBR0VfTUFTSykgPj4gUEFHRV9TSElGVCk7CiB9CiAKKy8qCisgKiBUaGUgYWRkcmVzcyBhbGxvY2F0b3IgY29yZSBmdW5jdGlvbi4KKyAqCisgKiBjYWxsZWQgd2l0aCBkb21haW4tPmxvY2sgaGVsZAorICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkbWFfb3BzX2FsbG9jX2FkZHJlc3NlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgc3RydWN0IGRtYV9vcHNfZG9tYWluICpkb20sCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IHBhZ2VzKQpAQCAtMzE3LDYgKzQwNiwxMSBAQAogCXJldHVybiBhZGRyZXNzOwogfQogCisvKgorICogVGhlIGFkZHJlc3MgZnJlZSBmdW5jdGlvbi4KKyAqCisgKiBjYWxsZWQgd2l0aCBkb21haW4tPmxvY2sgaGVsZAorICovCiBzdGF0aWMgdm9pZCBkbWFfb3BzX2ZyZWVfYWRkcmVzc2VzKHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG9tLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCQkgICB1bnNpZ25lZCBpbnQgcGFnZXMpCkBAIC0zMjUsNiArNDE5LDE2IEBACiAJaW9tbXVfYXJlYV9mcmVlKGRvbS0+Yml0bWFwLCBhZGRyZXNzLCBwYWdlcyk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlIG5leHQgZnVuY3Rpb25zIGJlbG9uZyB0byB0aGUgZG9tYWluIGFsbG9jYXRpb24uIEEgZG9tYWluIGlzCisgKiBhbGxvY2F0ZWQgZm9yIGV2ZXJ5IElPTU1VIGFzIHRoZSBkZWZhdWx0IGRvbWFpbi4gSWYgZGV2aWNlIGlzb2xhdGlvbgorICogaXMgZW5hYmxlZCwgZXZlcnkgZGV2aWNlIGdldCBpdHMgb3duIGRvbWFpbi4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nCisgKiBhYm91dCBkb21haW5zIGlzIHRoZSBwYWdlIHRhYmxlIG1hcHBpbmcgdGhlIERNQSBhZGRyZXNzIHNwYWNlIHRoZXkKKyAqIGNvbnRhaW4uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyB1MTYgZG9tYWluX2lkX2FsbG9jKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM0Miw2ICs0NDYsMTAgQEAKIAlyZXR1cm4gaWQ7CiB9CiAKKy8qCisgKiBVc2VkIHRvIHJlc2VydmUgYWRkcmVzcyByYW5nZXMgaW4gdGhlIGFwZXJ0dXJlIChlLmcuIGZvciBleGNsdXNpb24KKyAqIHJhbmdlcy4KKyAqLwogc3RhdGljIHZvaWQgZG1hX29wc19yZXNlcnZlX2FkZHJlc3NlcyhzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRvbSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IHBhZ2VzKQpAQCAtMzgyLDYgKzQ5MCwxMCBAQAogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwMSk7CiB9CiAKKy8qCisgKiBGcmVlIGEgZG9tYWluLCBvbmx5IHVzZWQgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlCisgKiBhbGxvY2F0aW9uIHBhdGggYW5kIHdlIG5lZWQgdG8gZnJlZSBhbiBhbHJlYWR5IGFsbG9jYXRlZCBwYWdlIHRhYmxlCisgKi8KIHN0YXRpYyB2b2lkIGRtYV9vcHNfZG9tYWluX2ZyZWUoc3RydWN0IGRtYV9vcHNfZG9tYWluICpkb20pCiB7CiAJaWYgKCFkb20pCkBAIC0zOTYsNiArNTA4LDExIEBACiAJa2ZyZWUoZG9tKTsKIH0KIAorLyoKKyAqIEFsbG9jYXRlcyBhIG5ldyBwcm90ZWN0aW9uIGRvbWFpbiB1c2FibGUgZm9yIHRoZSBkbWFfb3BzIGZ1bmN0aW9ucy4KKyAqIEl0IGFsc28gaW50aWFsaXplcyB0aGUgcGFnZSB0YWJsZSBhbmQgdGhlIGFkZHJlc3MgYWxsb2NhdG9yIGRhdGEKKyAqIHN0cnVjdHVyZXMgcmVxdWlyZWQgZm9yIHRoZSBkbWFfb3BzIGludGVyZmFjZQorICovCiBzdGF0aWMgc3RydWN0IGRtYV9vcHNfZG9tYWluICpkbWFfb3BzX2RvbWFpbl9hbGxvYyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwKIAkJCQkJCSAgIHVuc2lnbmVkIG9yZGVyKQogewpAQCAtNDM2LDYgKzU1Myw3IEBACiAJZG1hX2RvbS0+Yml0bWFwWzBdID0gMTsKIAlkbWFfZG9tLT5uZXh0X2JpdCA9IDA7CiAKKwkvKiBJbnRpYWxpemUgdGhlIGV4Y2x1c2lvbiByYW5nZSBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCAmJgogCSAgICBpb21tdS0+ZXhjbHVzaW9uX3N0YXJ0IDwgZG1hX2RvbS0+YXBlcnR1cmVfc2l6ZSkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0cGFnZSA9IGlvbW11LT5leGNsdXNpb25fc3RhcnQgPj4gUEFHRV9TSElGVDsKQEAgLTQ0NCw2ICs1NjIsMTEgQEAKIAkJZG1hX29wc19yZXNlcnZlX2FkZHJlc3NlcyhkbWFfZG9tLCBzdGFydHBhZ2UsIHBhZ2VzKTsKIAl9CiAKKwkvKgorCSAqIEF0IHRoZSBsYXN0IHN0ZXAsIGJ1aWxkIHRoZSBwYWdlIHRhYmxlcyBzbyB3ZSBkb24ndCBuZWVkIHRvCisJICogYWxsb2NhdGUgcGFnZSB0YWJsZSBwYWdlcyBpbiB0aGUgZG1hX29wcyBtYXBwaW5nL3VubWFwcGluZworCSAqIHBhdGguCisJICovCiAJbnVtX3B0ZV9wYWdlcyA9IGRtYV9kb20tPmFwZXJ0dXJlX3NpemUgLyAoUEFHRV9TSVpFICogNTEyKTsKIAlkbWFfZG9tLT5wdGVfcGFnZXMgPSBremFsbG9jKG51bV9wdGVfcGFnZXMgKiBzaXplb2Yodm9pZCAqKSwKIAkJCUdGUF9LRVJORUwpOwpAQCAtNDcyLDYgKzU5NSwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCisvKgorICogRmluZCBvdXQgdGhlIHByb3RlY3Rpb24gZG9tYWluIHN0cnVjdHVyZSBmb3IgYSBnaXZlbiBQQ0kgZGV2aWNlLiBUaGlzCisgKiB3aWxsIGdpdmUgdXMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUgcm9vdCBmb3IgZXhhbXBsZS4KKyAqLwogc3RhdGljIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluX2Zvcl9kZXZpY2UodTE2IGRldmlkKQogewogCXN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tOwpAQCAtNDg0LDYgKzYxMSwxMCBAQAogCXJldHVybiBkb207CiB9CiAKKy8qCisgKiBJZiBhIGRldmljZSBpcyBub3QgeWV0IGFzc29jaWF0ZWQgd2l0aCBhIGRvbWFpbiwgdGhpcyBmdW5jdGlvbiBkb2VzCisgKiBhc3NpZ25zIGl0IHZpc2libGUgZm9yIHRoZSBoYXJkd2FyZQorICovCiBzdGF0aWMgdm9pZCBzZXRfZGV2aWNlX2RvbWFpbihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwKIAkJCSAgICAgIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAogCQkJICAgICAgdTE2IGRldmlkKQpAQCAtNTA4LDYgKzYzOSwxOSBAQAogCWlvbW11LT5uZWVkX3N5bmMgPSAxOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGUgbmV4dCBmdW5jdGlvbnMgYmVsb25nIHRvIHRoZSBkbWFfb3BzIG1hcHBpbmcvdW5tYXBwaW5nIGNvZGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogSW4gdGhlIGRtYV9vcHMgcGF0aCB3ZSBvbmx5IGhhdmUgdGhlIHN0cnVjdCBkZXZpY2UuIFRoaXMgZnVuY3Rpb24KKyAqIGZpbmRzIHRoZSBjb3JyZXNwb25kaW5nIElPTU1VLCB0aGUgcHJvdGVjdGlvbiBkb21haW4gYW5kIHRoZQorICogcmVxdWVzdG9yIGlkIGZvciBhIGdpdmVuIGRldmljZS4KKyAqIElmIHRoZSBkZXZpY2UgaXMgbm90IHlldCBhc3NvY2lhdGVkIHdpdGggYSBkb21haW4gdGhpcyBpcyBhbHNvIGRvbmUKKyAqIGluIHRoaXMgZnVuY3Rpb24uCisgKi8KIHN0YXRpYyBpbnQgZ2V0X2RldmljZV9yZXNvdXJjZXMoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBhbWRfaW9tbXUgKippb21tdSwKIAkJCQlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKipkb21haW4sCkBAIC01MjAsOCArNjY0LDkgQEAKIAlCVUdfT04oIWRldiB8fCBkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlIHx8ICFkZXYtPmRtYV9tYXNrKTsKIAogCXBjaWRldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlfYmRmID0gKHBjaWRldi0+YnVzLT5udW1iZXIgPDwgOCkgfCBwY2lkZXYtPmRldmZuOworCV9iZGYgPSBjYWxjX2RldmlkKHBjaWRldi0+YnVzLT5udW1iZXIsIHBjaWRldi0+ZGV2Zm4pOwogCisJLyogZGV2aWNlIG5vdCB0cmFuc2xhdGVkIGJ5IGFueSBJT01NVSBpbiB0aGUgc3lzdGVtPyAqLwogCWlmIChfYmRmID49IGFtZF9pb21tdV9sYXN0X2JkZikgewogCQkqaW9tbXUgPSBOVUxMOwogCQkqZG9tYWluID0gTlVMTDsKQEAgLTU0Nyw2ICs2OTIsMTAgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIFRoaXMgaXMgdGhlIGdlbmVyaWMgbWFwIGZ1bmN0aW9uLiBJdCBtYXBzIG9uZSA0a2IgcGFnZSBhdCBwYWRkciB0bworICogdGhlIGdpdmVuIGFkZHJlc3MgaW4gdGhlIERNQSBhZGRyZXNzIHNwYWNlIGZvciB0aGUgZG9tYWluLgorICovCiBzdGF0aWMgZG1hX2FkZHJfdCBkbWFfb3BzX2RvbWFpbl9tYXAoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCiAJCQkJICAgICBzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRvbSwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKQEAgLTU3OCw2ICs3MjcsOSBAQAogCXJldHVybiAoZG1hX2FkZHJfdClhZGRyZXNzOwogfQogCisvKgorICogVGhlIGdlbmVyaWMgdW5tYXBwaW5nIGZ1bmN0aW9uIGZvciBvbiBwYWdlIGluIHRoZSBETUEgYWRkcmVzcyBzcGFjZS4KKyAqLwogc3RhdGljIHZvaWQgZG1hX29wc19kb21haW5fdW5tYXAoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCiAJCQkJIHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG9tLAogCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCkBAIC01OTcsNiArNzQ5LDEyIEBACiAJKnB0ZSA9IDBVTEw7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnRhaW5zIGNvbW1vbiBjb2RlIGZvciBtYXBwaW5nIG9mIGEgcGh5c2ljYWxseQorICogY29udGlndW91cyBtZW1vcnkgcmVnaW9uIGludG8gRE1BIGFkZHJlc3Mgc3BhY2UuIEl0IGlzIHVzZXMgYnkgYWxsCisgKiBtYXBwaW5nIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGlzIElPTU1VIGRyaXZlci4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRvbWFpbiBsb2NrIGhlbGQuCisgKi8KIHN0YXRpYyBkbWFfYWRkcl90IF9fbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCiAJCQkgICAgICAgc3RydWN0IGRtYV9vcHNfZG9tYWluICpkbWFfZG9tLApAQCAtNjI4LDYgKzc4NiwxMCBAQAogCXJldHVybiBhZGRyZXNzOwogfQogCisvKgorICogRG9lcyB0aGUgcmV2ZXJzZSBvZiB0aGUgX19tYXBfc2luZ2xlIGZ1bmN0aW9uLiBNdXN0IGJlIGNhbGxlZCB3aXRoCisgKiB0aGUgZG9tYWluIGxvY2sgaGVsZCB0b28KKyAqLwogc3RhdGljIHZvaWQgX191bm1hcF9zaW5nbGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCiAJCQkgICBzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRtYV9kb20sCiAJCQkgICBkbWFfYWRkcl90IGRtYV9hZGRyLApAQCAtNjUyLDYgKzgxNCw5IEBACiAJZG1hX29wc19mcmVlX2FkZHJlc3NlcyhkbWFfZG9tLCBkbWFfYWRkciwgcGFnZXMpOwogfQogCisvKgorICogVGhlIGV4cG9ydGVkIG1hcF9zaW5nbGUgZnVuY3Rpb24gZm9yIGRtYV9vcHMuCisgKi8KIHN0YXRpYyBkbWFfYWRkcl90IG1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwKIAkJCSAgICAgc2l6ZV90IHNpemUsIGludCBkaXIpCiB7CkBAIC02NjQsNiArODI5LDcgQEAKIAlnZXRfZGV2aWNlX3Jlc291cmNlcyhkZXYsICZpb21tdSwgJmRvbWFpbiwgJmRldmlkKTsKIAogCWlmIChpb21tdSA9PSBOVUxMIHx8IGRvbWFpbiA9PSBOVUxMKQorCQkvKiBkZXZpY2Ugbm90IGhhbmRsZWQgYnkgYW55IEFNRCBJT01NVSAqLwogCQlyZXR1cm4gKGRtYV9hZGRyX3QpcGFkZHI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CkBAIC02ODMsNiArODQ5LDkgQEAKIAlyZXR1cm4gYWRkcjsKIH0KIAorLyoKKyAqIFRoZSBleHBvcnRlZCB1bm1hcF9zaW5nbGUgZnVuY3Rpb24gZm9yIGRtYV9vcHMuCisgKi8KIHN0YXRpYyB2b2lkIHVubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCiAJCQkgc2l6ZV90IHNpemUsIGludCBkaXIpCiB7CkBAIC02OTIsNiArODYxLDcgQEAKIAl1MTYgZGV2aWQ7CiAKIAlpZiAoIWdldF9kZXZpY2VfcmVzb3VyY2VzKGRldiwgJmlvbW11LCAmZG9tYWluLCAmZGV2aWQpKQorCQkvKiBkZXZpY2Ugbm90IGhhbmRsZWQgYnkgYW55IEFNRCBJT01NVSAqLwogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CkBAIC03MDYsNiArODc2LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiB9CiAKKy8qCisgKiBUaGlzIGlzIGEgc3BlY2lhbCBtYXBfc2cgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCBpZiB3ZSBzaG91bGQgbWFwIGEKKyAqIGRldmljZSB3aGljaCBpcyBub3QgaGFuZGxlZCBieSBhbiBBTUQgSU9NTVUgaW4gdGhlIHN5c3RlbS4KKyAqLwogc3RhdGljIGludCBtYXBfc2dfbm9faW9tbXUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJCSAgIGludCBuZWxlbXMsIGludCBkaXIpCiB7CkBAIC03MjAsNiArODk0LDEwIEBACiAJcmV0dXJuIG5lbGVtczsKIH0KIAorLyoKKyAqIFRoZSBleHBvcnRlZCBtYXBfc2cgZnVuY3Rpb24gZm9yIGRtYV9vcHMgKGhhbmRsZXMgc2NhdHRlci1nYXRoZXIKKyAqIGxpc3RzKS4KKyAqLwogc3RhdGljIGludCBtYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJICBpbnQgbmVsZW1zLCBpbnQgZGlyKQogewpAQCAtNzc1LDYgKzk1MywxMCBAQAogCWdvdG8gb3V0OwogfQogCisvKgorICogVGhlIGV4cG9ydGVkIG1hcF9zZyBmdW5jdGlvbiBmb3IgZG1hX29wcyAoaGFuZGxlcyBzY2F0dGVyLWdhdGhlcgorICogbGlzdHMpLgorICovCiBzdGF0aWMgdm9pZCB1bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAogCQkgICAgIGludCBuZWxlbXMsIGludCBkaXIpCiB7CkBAIC04MDQsNiArOTg2LDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIH0KIAorLyoKKyAqIFRoZSBleHBvcnRlZCBhbGxvY19jb2hlcmVudCBmdW5jdGlvbiBmb3IgZG1hX29wcy4KKyAqLwogc3RhdGljIHZvaWQgKmFsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2FkZHIsIGdmcF90IGZsYWcpCiB7CkBAIC04NTEsNiArMTAzNiwxMSBAQAogCXJldHVybiB2aXJ0X2FkZHI7CiB9CiAKKy8qCisgKiBUaGUgZXhwb3J0ZWQgZnJlZV9jb2hlcmVudCBmdW5jdGlvbiBmb3IgZG1hX29wcy4KKyAqIEZJWE1FOiBmaXggdGhlIGdlbmVyaWMgeDg2IERNQSBsYXllciBzbyB0aGF0IGl0IGFjdHVhbGx5IGNhbGxzIHRoYXQKKyAqICAgICAgICBmdW5jdGlvbi4KKyAqLwogc3RhdGljIHZvaWQgZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJICB2b2lkICp2aXJ0X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CkBAIC04NzksNiArMTA2OSw4IEBACiB9CiAKIC8qCisgKiBUaGUgZnVuY3Rpb24gZm9yIHByZS1hbGxvY2F0aW5nIHByb3RlY3Rpb24gZG9tYWlucy4KKyAqCiAgKiBJZiB0aGUgZHJpdmVyIGNvcmUgaW5mb3JtcyB0aGUgRE1BIGxheWVyIGlmIGEgZHJpdmVyIGdyYWJzIGEgZGV2aWNlCiAgKiB3ZSBkb24ndCBuZWVkIHRvIHByZWFsbG9jYXRlIHRoZSBwcm90ZWN0aW9uIGRvbWFpbnMgYW55bW9yZS4KICAqIEZvciBub3cgd2UgaGF2ZSB0by4KQEAgLTkyMSwxMiArMTExMywyMCBAQAogCS51bm1hcF9zZyA9IHVubWFwX3NnLAogfTsKIAorLyoKKyAqIFRoZSBmdW5jdGlvbiB3aGljaCBjbHVlcyB0aGUgQU1EIElPTU1VIGRyaXZlciBpbnRvIGRtYV9vcHMuCisgKi8KIGludCBfX2luaXQgYW1kX2lvbW11X2luaXRfZG1hX29wcyh2b2lkKQogewogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwogCWludCBvcmRlciA9IGFtZF9pb21tdV9hcGVydHVyZV9vcmRlcjsKIAlpbnQgcmV0OwogCisJLyoKKwkgKiBmaXJzdCBhbGxvY2F0ZSBhIGRlZmF1bHQgcHJvdGVjdGlvbiBkb21haW4gZm9yIGV2ZXJ5IElPTU1VIHdlCisJICogZm91bmQgaW4gdGhlIHN5c3RlbS4gRGV2aWNlcyBub3QgYXNzaWduZWQgdG8gYW55IG90aGVyCisJICogcHJvdGVjdGlvbiBkb21haW4gd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZGVmYXVsdCBvbmUuCisJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpb21tdSwgJmFtZF9pb21tdV9saXN0LCBsaXN0KSB7CiAJCWlvbW11LT5kZWZhdWx0X2RvbSA9IGRtYV9vcHNfZG9tYWluX2FsbG9jKGlvbW11LCBvcmRlcik7CiAJCWlmIChpb21tdS0+ZGVmYXVsdF9kb20gPT0gTlVMTCkKQEAgLTkzNiw2ICsxMTM2LDEwIEBACiAJCQlnb3RvIGZyZWVfZG9tYWluczsKIAl9CiAKKwkvKgorCSAqIElmIGRldmljZSBpc29sYXRpb24gaXMgZW5hYmxlZCwgcHJlLWFsbG9jYXRlIHRoZSBwcm90ZWN0aW9uCisJICogZG9tYWlucyBmb3IgZWFjaCBkZXZpY2UuCisJICovCiAJaWYgKGFtZF9pb21tdV9pc29sYXRlKQogCQlwcmVhbGxvY19wcm90ZWN0aW9uX2RvbWFpbnMoKTsKIApAQCAtOTQ3LDYgKzExNTEsNyBAQAogCWdhcnRfaW9tbXVfYXBlcnR1cmUgPSAwOwogI2VuZGlmCiAKKwkvKiBNYWtlIHRoZSBkcml2ZXIgZmluYWxseSB2aXNpYmxlIHRvIHRoZSBkcml2ZXJzICovCiAJZG1hX29wcyA9ICZhbWRfaW9tbXVfZG1hX29wczsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwppbmRleCAyYTEzZTQzLi5jOWQ4ZmYyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwpAQCAtMjUsMjAgKzI1LDEzIEBACiAjaW5jbHVkZSA8YXNtL3BjaS1kaXJlY3QuaD4KICNpbmNsdWRlIDxhc20vYW1kX2lvbW11X3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdS5oPgotI2luY2x1ZGUgPGFzbS9nYXJ0Lmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAKIC8qCiAgKiBkZWZpbml0aW9ucyBmb3IgdGhlIEFDUEkgc2Nhbm5pbmcgY29kZQogICovCi0jZGVmaW5lIFVQREFURV9MQVNUX0JERih4KSBkbyB7XAotCWlmICgoeCkgPiBhbWRfaW9tbXVfbGFzdF9iZGYpIFwKLQkJYW1kX2lvbW11X2xhc3RfYmRmID0gKHgpOyBcCi0JfSB3aGlsZSAoMCk7Ci0KLSNkZWZpbmUgREVWSUQoYnVzLCBkZXZmbikgKCgoYnVzKSA8PCA4KSB8IChkZXZmbikpCiAjZGVmaW5lIFBDSV9CVVMoeCkgKCgoeCkgPj4gOCkgJiAweGZmKQogI2RlZmluZSBJVlJTX0hFQURFUl9MRU5HVEggNDgKLSNkZWZpbmUgVEJMX1NJWkUoeCkgKDEgPDwgKFBBR0VfU0hJRlQgKyBnZXRfb3JkZXIoYW1kX2lvbW11X2xhc3RfYmRmICogKHgpKSkpCiAKICNkZWZpbmUgQUNQSV9JVkhEX1RZUEUgICAgICAgICAgICAgICAgICAweDEwCiAjZGVmaW5lIEFDUElfSVZNRF9UWVBFX0FMTCAgICAgICAgICAgICAgMHgyMApAQCAtNzEsNiArNjQsMTcgQEAKICNkZWZpbmUgQUNQSV9ERVZGTEFHX0xJTlQxICAgICAgICAgICAgICAweDgwCiAjZGVmaW5lIEFDUElfREVWRkxBR19BVFNESVMgICAgICAgICAgICAgMHgxMDAwMDAwMAogCisvKgorICogQUNQSSB0YWJsZSBkZWZpbml0aW9ucworICoKKyAqIFRoZXNlIGRhdGEgc3RydWN0dXJlcyBhcmUgbGFpZCBvdmVyIHRoZSB0YWJsZSB0byBwYXJzZSB0aGUgaW1wb3J0YW50IHZhbHVlcworICogb3V0IG9mIGl0LgorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBvbmUgSU9NTVUgaW4gdGhlIEFDUEkgdGFibGUuIFR5cGljYWxseSBmb2xsb3dlZCBieSBvbmUKKyAqIG9yIG1vcmUgaXZoZF9lbnRyeXMuCisgKi8KIHN0cnVjdCBpdmhkX2hlYWRlciB7CiAJdTggdHlwZTsKIAl1OCBmbGFnczsKQEAgLTgzLDYgKzg3LDEwIEBACiAJdTMyIHJlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorLyoKKyAqIEEgZGV2aWNlIGVudHJ5IGRlc2NyaWJpbmcgd2hpY2ggZGV2aWNlcyBhIHNwZWNpZmljIElPTU1VIHRyYW5zbGF0ZXMgYW5kCisgKiB3aGljaCByZXF1ZXN0b3IgaWRzIHRoZXkgdXNlLgorICovCiBzdHJ1Y3QgaXZoZF9lbnRyeSB7CiAJdTggdHlwZTsKIAl1MTYgZGV2aWQ7CkBAIC05MCw2ICs5OCwxMCBAQAogCXUzMiBleHQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisvKgorICogQW4gQU1EIElPTU1VIG1lbW9yeSBkZWZpbml0aW9uIHN0cnVjdHVyZS4gSXQgZGVmaW5lcyB0aGluZ3MgbGlrZSBleGNsdXNpb24KKyAqIHJhbmdlcyBmb3IgZGV2aWNlcyBhbmQgcmVnaW9ucyB0aGF0IHNob3VsZCBiZSB1bml0eSBtYXBwZWQuCisgKi8KIHN0cnVjdCBpdm1kX2hlYWRlciB7CiAJdTggdHlwZTsKIAl1OCBmbGFnczsKQEAgLTEwMywyMiArMTE1LDgwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBhbWRfaW9tbXVfZGV0ZWN0ZWQ7CiAKLXUxNiBhbWRfaW9tbXVfbGFzdF9iZGY7Ci1zdHJ1Y3QgbGlzdF9oZWFkIGFtZF9pb21tdV91bml0eV9tYXA7Ci11bnNpZ25lZCBhbWRfaW9tbXVfYXBlcnR1cmVfb3JkZXIgPSAyNjsKLWludCBhbWRfaW9tbXVfaXNvbGF0ZTsKK3UxNiBhbWRfaW9tbXVfbGFzdF9iZGY7CQkJLyogbGFyZ2VzdCBQQ0kgZGV2aWNlIGlkIHdlIGhhdmUKKwkJCQkJICAgdG8gaGFuZGxlICovCitMSVNUX0hFQUQoYW1kX2lvbW11X3VuaXR5X21hcCk7CQkvKiBhIGxpc3Qgb2YgcmVxdWlyZWQgdW5pdHkgbWFwcGluZ3MKKwkJCQkJICAgd2UgZmluZCBpbiBBQ1BJICovCit1bnNpZ25lZCBhbWRfaW9tbXVfYXBlcnR1cmVfb3JkZXIgPSAyNjsgLyogc2l6ZSBvZiBhcGVydHVyZSBpbiBwb3dlciBvZiAyICovCitpbnQgYW1kX2lvbW11X2lzb2xhdGU7CQkJLyogaWYgMSwgZGV2aWNlIGlzb2xhdGlvbiBpcyBlbmFibGVkICovCiAKLXN0cnVjdCBsaXN0X2hlYWQgYW1kX2lvbW11X2xpc3Q7CitMSVNUX0hFQUQoYW1kX2lvbW11X2xpc3QpOwkJLyogbGlzdCBvZiBhbGwgQU1EIElPTU1VcyBpbiB0aGUKKwkJCQkJICAgc3lzdGVtICovCisKKy8qCisgKiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgdGFibGUgd2hpY2ggaXMgc2hhcmVkIGJ5IGFsbCBBTUQgSU9NTVVzCisgKiBpdCBpcyBpbmRleGVkIGJ5IHRoZSBQQ0kgZGV2aWNlIGlkIG9yIHRoZSBIVCB1bml0IGlkIGFuZCBjb250YWlucworICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRvbWFpbiB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8gYXMgd2VsbCBhcyB0aGUKKyAqIHBhZ2UgdGFibGUgcm9vdCBwb2ludGVyLgorICovCiBzdHJ1Y3QgZGV2X3RhYmxlX2VudHJ5ICphbWRfaW9tbXVfZGV2X3RhYmxlOworCisvKgorICogVGhlIGFsaWFzIHRhYmxlIGlzIGEgZHJpdmVyIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIHRoZQorICogbWFwcGluZ3Mgb2YgdGhlIFBDSSBkZXZpY2UgaWRzIHRvIHRoZSBhY3R1YWwgcmVxdWVzdG9yIGlkcyBvbiB0aGUgSU9NTVUuCisgKiBNb3JlIHRoYW4gb25lIGRldmljZSBjYW4gc2hhcmUgdGhlIHNhbWUgcmVxdWVzdG9yIGlkLgorICovCiB1MTYgKmFtZF9pb21tdV9hbGlhc190YWJsZTsKKworLyoKKyAqIFRoZSBybG9va3VwIHRhYmxlIGlzIHVzZWQgdG8gZmluZCB0aGUgSU9NTVUgd2hpY2ggaXMgcmVzcG9uc2libGUKKyAqIGZvciBhIHNwZWNpZmljIGRldmljZS4gSXQgaXMgYWxzbyBpbmRleGVkIGJ5IHRoZSBQQ0kgZGV2aWNlIGlkLgorICovCiBzdHJ1Y3QgYW1kX2lvbW11ICoqYW1kX2lvbW11X3Jsb29rdXBfdGFibGU7CisKKy8qCisgKiBUaGUgcGQgdGFibGUgKHByb3RlY3Rpb24gZG9tYWluIHRhYmxlKSBpcyB1c2VkIHRvIGZpbmQgdGhlIHByb3RlY3Rpb24gZG9tYWluCisgKiBkYXRhIHN0cnVjdHVyZSBhIGRldmljZSBiZWxvbmdzIHRvLiBJbmRleGVkIHdpdGggdGhlIFBDSSBkZXZpY2UgaWQgdG9vLgorICovCiBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKiphbWRfaW9tbXVfcGRfdGFibGU7CisKKy8qCisgKiBBTUQgSU9NTVUgYWxsb3dzIHVwIHRvIDJeMTYgZGlmZmVyZW5kIHByb3RlY3Rpb24gZG9tYWlucy4gVGhpcyBpcyBhIGJpdG1hcAorICogdG8ga25vdyB3aGljaCBvbmVzIGFyZSBhbHJlYWR5IGluIHVzZS4KKyAqLwogdW5zaWduZWQgbG9uZyAqYW1kX2lvbW11X3BkX2FsbG9jX2JpdG1hcDsKIAotc3RhdGljIHUzMiBkZXZfdGFibGVfc2l6ZTsKLXN0YXRpYyB1MzIgYWxpYXNfdGFibGVfc2l6ZTsKLXN0YXRpYyB1MzIgcmxvb2t1cF90YWJsZV9zaXplOworc3RhdGljIHUzMiBkZXZfdGFibGVfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgZGV2aWNlIHRhYmxlICovCitzdGF0aWMgdTMyIGFsaWFzX3RhYmxlX3NpemU7CS8qIHNpemUgb2YgdGhlIGFsaWFzIHRhYmxlICovCitzdGF0aWMgdTMyIHJsb29rdXBfdGFibGVfc2l6ZTsJLyogc2l6ZSBpZiB0aGUgcmxvb2t1cCB0YWJsZSAqLwogCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2xhc3RfZGV2aWQodTE2IGRldmlkKQoreworCWlmIChkZXZpZCA+IGFtZF9pb21tdV9sYXN0X2JkZikKKwkJYW1kX2lvbW11X2xhc3RfYmRmID0gZGV2aWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Ymxfc2l6ZShpbnQgZW50cnlfc2l6ZSkKK3sKKwl1bnNpZ25lZCBzaGlmdCA9IFBBR0VfU0hJRlQgKworCQkJIGdldF9vcmRlcihhbWRfaW9tbXVfbGFzdF9iZGYgKiBlbnRyeV9zaXplKTsKKworCXJldHVybiAxVUwgPDwgc2hpZnQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQU1EIElPTU1VIE1NSU8gcmVnaXN0ZXIgc3BhY2UgaGFuZGxpbmcgZnVuY3Rpb25zCisgKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHByb2dyYW0gdGhlIElPTU1VIGRldmljZSByZWdpc3RlcnMgaW4KKyAqIE1NSU8gc3BhY2UgcmVxdWlyZWQgZm9yIHRoYXQgZHJpdmVyLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBzZXQgdGhlIGV4Y2x1c2lvbiByYW5nZSBpbiB0aGUgSU9NTVUuIERNQSBhY2Nlc3NlcyB0byB0aGUKKyAqIGV4Y2x1c2lvbiByYW5nZSBhcmUgcGFzc2VkIHRocm91Z2ggdW50cmFuc2xhdGVkCisgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBpb21tdV9zZXRfZXhjbHVzaW9uX3JhbmdlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewogCXU2NCBzdGFydCA9IGlvbW11LT5leGNsdXNpb25fc3RhcnQgJiBQQUdFX01BU0s7CkBAIC0xMzcsNiArMjA3LDcgQEAKIAkJCSZlbnRyeSwgc2l6ZW9mKGVudHJ5KSk7CiB9CiAKKy8qIFByb2dyYW1zIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgdGFibGUgaW50byB0aGUgSU9NTVUgaGFyZHdhcmUgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBpb21tdV9zZXRfZGV2aWNlX3RhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewogCXUzMiBlbnRyeTsKQEAgLTE0OSw2ICsyMjAsNyBAQAogCQkJJmVudHJ5LCBzaXplb2YoZW50cnkpKTsKIH0KIAorLyogR2VuZXJpYyBmdW5jdGlvbnMgdG8gZW5hYmxlL2Rpc2FibGUgY2VydGFpbiBmZWF0dXJlcyBvZiB0aGUgSU9NTVUuICovCiBzdGF0aWMgdm9pZCBfX2luaXQgaW9tbXVfZmVhdHVyZV9lbmFibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU4IGJpdCkKIHsKIAl1MzIgY3RybDsKQEAgLTE2Nyw2ICsyMzksNyBAQAogCXdyaXRlbChjdHJsLCBpb21tdS0+bW1pb19iYXNlICsgTU1JT19DT05UUk9MX09GRlNFVCk7CiB9CiAKKy8qIEZ1bmN0aW9uIHRvIGVuYWJsZSB0aGUgaGFyZHdhcmUgKi8KIHZvaWQgX19pbml0IGlvbW11X2VuYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKIHsKIAlwcmludGsoS0VSTl9JTkZPICJBTUQgSU9NTVU6IEVuYWJsaW5nIElPTU1VIGF0ICIpOwpAQCAtMTc2LDYgKzI0OSwxMCBAQAogCWlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0lPTU1VX0VOKTsKIH0KIAorLyoKKyAqIG1hcHBpbmcgYW5kIHVubWFwcGluZyBmdW5jdGlvbnMgZm9yIHRoZSBJT01NVSBNTUlPIHNwYWNlLiBFYWNoIEFNRCBJT01NVSBpbgorICogdGhlIHN5c3RlbSBoYXMgb25lLgorICovCiBzdGF0aWMgdTggKiBfX2luaXQgaW9tbXVfbWFwX21taW9fc3BhY2UodTY0IGFkZHJlc3MpCiB7CiAJdTggKnJldDsKQEAgLTE5OSwxNiArMjc2LDMzIEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKGlvbW11LT5tbWlvX3BoeXMsIE1NSU9fUkVHSU9OX0xFTkdUSCk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlIGZ1bmN0aW9ucyBiZWxvdyBiZWxvbmcgdG8gdGhlIGZpcnN0IHBhc3Mgb2YgQU1EIElPTU1VIEFDUEkgdGFibGUKKyAqIHBhcnNpbmcuIEluIHRoaXMgcGFzcyB3ZSB0cnkgdG8gZmluZCBvdXQgdGhlIGhpZ2hlc3QgZGV2aWNlIGlkIHRoaXMKKyAqIGNvZGUgaGFzIHRvIGhhbmRsZS4gVXBvbiB0aGlzIGluZm9ybWF0aW9uIHRoZSBzaXplIG9mIHRoZSBzaGFyZWQgZGF0YQorICogc3RydWN0dXJlcyBpcyBkZXRlcm1pbmVkIGxhdGVyLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgbGFzdCBkZXZpY2UgaWQgdGhlIElPTU1VIGhhcyB0byBoYW5kbGUgZnJvbSB0aGUgUENJCisgKiBjYXBhYmlsaXR5IGhlYWRlciBmb3IgdGhpcyBJT01NVQorICovCiBzdGF0aWMgaW50IF9faW5pdCBmaW5kX2xhc3RfZGV2aWRfb25fcGNpKGludCBidXMsIGludCBkZXYsIGludCBmbiwgaW50IGNhcF9wdHIpCiB7CiAJdTMyIGNhcDsKIAogCWNhcCA9IHJlYWRfcGNpX2NvbmZpZyhidXMsIGRldiwgZm4sIGNhcF9wdHIrTU1JT19SQU5HRV9PRkZTRVQpOwotCVVQREFURV9MQVNUX0JERihERVZJRChNTUlPX0dFVF9CVVMoY2FwKSwgTU1JT19HRVRfTEQoY2FwKSkpOworCXVwZGF0ZV9sYXN0X2RldmlkKGNhbGNfZGV2aWQoTU1JT19HRVRfQlVTKGNhcCksIE1NSU9fR0VUX0xEKGNhcCkpKTsKIAogCXJldHVybiAwOwogfQogCisvKgorICogQWZ0ZXIgcmVhZGluZyB0aGUgaGlnaGVzdCBkZXZpY2UgaWQgZnJvbSB0aGUgSU9NTVUgUENJIGNhcGFiaWxpdHkgaGVhZGVyCisgKiB0aGlzIGZ1bmN0aW9uIGxvb2tzIGlmIHRoZXJlIGlzIGEgaGlnaGVyIGRldmljZSBpZCBkZWZpbmVkIGluIHRoZSBBQ1BJIHRhYmxlCisgKi8KIHN0YXRpYyBpbnQgX19pbml0IGZpbmRfbGFzdF9kZXZpZF9mcm9tX2l2aGQoc3RydWN0IGl2aGRfaGVhZGVyICpoKQogewogCXU4ICpwID0gKHZvaWQgKiloLCAqZW5kID0gKHZvaWQgKiloOwpAQCAtMjI5LDcgKzMyMyw4IEBACiAJCWNhc2UgSVZIRF9ERVZfUkFOR0VfRU5EOgogCQljYXNlIElWSERfREVWX0FMSUFTOgogCQljYXNlIElWSERfREVWX0VYVF9TRUxFQ1Q6Ci0JCQlVUERBVEVfTEFTVF9CREYoZGV2LT5kZXZpZCk7CisJCQkvKiBhbGwgdGhlIGFib3ZlIHN1YmZpZWxkIHR5cGVzIHJlZmVyIHRvIGRldmljZSBpZHMgKi8KKwkJCXVwZGF0ZV9sYXN0X2RldmlkKGRldi0+ZGV2aWQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTI0Miw2ICszMzcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEl0ZXJhdGUgb3ZlciBhbGwgSVZIRCBlbnRyaWVzIGluIHRoZSBBQ1BJIHRhYmxlIGFuZCBmaW5kIHRoZSBoaWdoZXN0IGRldmljZQorICogaWQgd2hpY2ggd2UgbmVlZCB0byBoYW5kbGUuIFRoaXMgaXMgdGhlIGZpcnN0IG9mIHRocmVlIGZ1bmN0aW9ucyB3aGljaCBwYXJzZQorICogdGhlIEFDUEkgdGFibGUuIFNvIHdlIGNoZWNrIHRoZSBjaGVja3N1bSBoZXJlLgorICovCiBzdGF0aWMgaW50IF9faW5pdCBmaW5kX2xhc3RfZGV2aWRfYWNwaShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewogCWludCBpOwpAQCAtMjc3LDE5ICszNzcsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBiZWxvbmcgdGhlIHRoZSBjb2RlIHBhdGggd2hpY2ggcGFyc2VzIHRoZSBBQ1BJIHRhYmxlCisgKiB0aGUgc2Vjb25kIHRpbWUuIEluIHRoaXMgQUNQSSBwYXJzaW5nIGl0ZXJhdGlvbiB3ZSBhbGxvY2F0ZSBJT01NVSBzcGVjaWZpYworICogZGF0YSBzdHJ1Y3R1cmVzLCBpbml0aWFsaXplIHRoZSBkZXZpY2UvYWxpYXMvcmxvb2t1cCB0YWJsZSBhbmQgYWxzbworICogYmFzaWNhbGx5IGluaXRpYWxpemUgdGhlIGhhcmR3YXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQWxsb2NhdGVzIHRoZSBjb21tYW5kIGJ1ZmZlci4gVGhpcyBidWZmZXIgaXMgcGVyIEFNRCBJT01NVS4gV2UgY2FuCisgKiB3cml0ZSBjb21tYW5kcyB0byB0aGF0IGJ1ZmZlciBsYXRlciBhbmQgdGhlIElPTU1VIHdpbGwgZXhlY3V0ZSB0aGVtCisgKiBhc3luY2hyb25vdXNseQorICovCiBzdGF0aWMgdTggKiBfX2luaXQgYWxsb2NfY29tbWFuZF9idWZmZXIoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiB7Ci0JdTggKmNtZF9idWYgPSAodTggKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsCisJdTggKmNtZF9idWYgPSAodTggKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLAogCQkJZ2V0X29yZGVyKENNRF9CVUZGRVJfU0laRSkpOwotCXU2NCBlbnRyeSA9IDA7CisJdTY0IGVudHJ5OwogCiAJaWYgKGNtZF9idWYgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpb21tdS0+Y21kX2J1Zl9zaXplID0gQ01EX0JVRkZFUl9TSVpFOwogCi0JbWVtc2V0KGNtZF9idWYsIDAsIENNRF9CVUZGRVJfU0laRSk7Ci0KIAllbnRyeSA9ICh1NjQpdmlydF90b19waHlzKGNtZF9idWYpOwogCWVudHJ5IHw9IE1NSU9fQ01EX1NJWkVfNTEyOwogCW1lbWNweV90b2lvKGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0NNRF9CVUZfT0ZGU0VULApAQCAtMzAyLDExICs0MTQsMTAgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGZyZWVfY29tbWFuZF9idWZmZXIoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiB7Ci0JaWYgKGlvbW11LT5jbWRfYnVmKQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWlvbW11LT5jbWRfYnVmLAotCQkJCWdldF9vcmRlcihDTURfQlVGRkVSX1NJWkUpKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWlvbW11LT5jbWRfYnVmLCBnZXRfb3JkZXIoQ01EX0JVRkZFUl9TSVpFKSk7CiB9CiAKKy8qIHNldHMgYSBzcGVjaWZpYyBiaXQgaW4gdGhlIGRldmljZSB0YWJsZSBlbnRyeS4gKi8KIHN0YXRpYyB2b2lkIHNldF9kZXZfZW50cnlfYml0KHUxNiBkZXZpZCwgdTggYml0KQogewogCWludCBpID0gKGJpdCA+PiA1KSAmIDB4MDc7CkBAIC0zMTUsNyArNDI2LDE4IEBACiAJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVtpXSB8PSAoMSA8PCBfYml0KTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNldF9kZXZfZW50cnlfZnJvbV9hY3BpKHUxNiBkZXZpZCwgdTMyIGZsYWdzLCB1MzIgZXh0X2ZsYWdzKQorLyogV3JpdGVzIHRoZSBzcGVjaWZpYyBJT01NVSBmb3IgYSBkZXZpY2UgaW50byB0aGUgcmxvb2t1cCB0YWJsZSAqLworc3RhdGljIHZvaWQgX19pbml0IHNldF9pb21tdV9mb3JfZGV2aWNlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1MTYgZGV2aWQpCit7CisJYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbZGV2aWRdID0gaW9tbXU7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBkZXZpY2Ugc3BlY2lmaWMgZmxhZ3MgcmVhZCBmcm9tIHRoZSBBQ1BJCisgKiB0YWJsZSBhbmQgc2V0cyB1cCB0aGUgZGV2aWNlIHRhYmxlIGVudHJ5IHdpdGggdGhhdCBpbmZvcm1hdGlvbgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2Rldl9lbnRyeV9mcm9tX2FjcGkoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCisJCQkJCSAgIHUxNiBkZXZpZCwgdTMyIGZsYWdzLCB1MzIgZXh0X2ZsYWdzKQogewogCWlmIChmbGFncyAmIEFDUElfREVWRkxBR19JTklUUEFTUykKIAkJc2V0X2Rldl9lbnRyeV9iaXQoZGV2aWQsIERFVl9FTlRSWV9JTklUX1BBU1MpOwpAQCAtMzMxLDEzICs0NTMsMTQgQEAKIAkJc2V0X2Rldl9lbnRyeV9iaXQoZGV2aWQsIERFVl9FTlRSWV9MSU5UMF9QQVNTKTsKIAlpZiAoZmxhZ3MgJiBBQ1BJX0RFVkZMQUdfTElOVDEpCiAJCXNldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfTElOVDFfUEFTUyk7CisKKwlzZXRfaW9tbXVfZm9yX2RldmljZShpb21tdSwgZGV2aWQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X2lvbW11X2Zvcl9kZXZpY2Uoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHUxNiBkZXZpZCkKLXsKLQlhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF0gPSBpb21tdTsKLX0KLQorLyoKKyAqIFJlYWRzIHRoZSBkZXZpY2UgZXhjbHVzaW9uIHJhbmdlIGZyb20gQUNQSSBhbmQgaW5pdGlhbGl6ZSBJT01NVSB3aXRoCisgKiBpdAorICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2RldmljZV9leGNsdXNpb25fcmFuZ2UodTE2IGRldmlkLCBzdHJ1Y3QgaXZtZF9oZWFkZXIgKm0pCiB7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXUgPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF07CkBAIC0zNDYsMTIgKzQ2OSwyMiBAQAogCQlyZXR1cm47CiAKIAlpZiAoaW9tbXUpIHsKKwkJLyoKKwkJICogV2Ugb25seSBjYW4gY29uZmlndXJlIGV4Y2x1c2lvbiByYW5nZXMgcGVyIElPTU1VLCBub3QKKwkJICogcGVyIGRldmljZS4gQnV0IHdlIGNhbiBlbmFibGUgdGhlIGV4Y2x1c2lvbiByYW5nZSBwZXIKKwkJICogZGV2aWNlLiBUaGlzIGlzIGRvbmUgaGVyZQorCQkgKi8KIAkJc2V0X2Rldl9lbnRyeV9iaXQobS0+ZGV2aWQsIERFVl9FTlRSWV9FWCk7CiAJCWlvbW11LT5leGNsdXNpb25fc3RhcnQgPSBtLT5yYW5nZV9zdGFydDsKIAkJaW9tbXUtPmV4Y2x1c2lvbl9sZW5ndGggPSBtLT5yYW5nZV9sZW5ndGg7CiAJfQogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyBzb21lIGltcG9ydGFudCBkYXRhIGZyb20gdGhlIElPTU1VIFBDSSBzcGFjZSBhbmQKKyAqIGluaXRpYWxpemVzIHRoZSBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBpdC4gSXQgcmVhZHMgdGhlIGhhcmR3YXJlCisgKiBjYXBhYmlsaXRpZXMgYW5kIHRoZSBmaXJzdC9sYXN0IGRldmljZSBlbnRyaWVzCisgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0X2lvbW11X2Zyb21fcGNpKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewogCWludCBidXMgPSBQQ0lfQlVTKGlvbW11LT5kZXZpZCk7CkBAIC0zNjMsMTAgKzQ5NiwxNiBAQAogCWlvbW11LT5jYXAgPSByZWFkX3BjaV9jb25maWcoYnVzLCBkZXYsIGZuLCBjYXBfcHRyK01NSU9fQ0FQX0hEUl9PRkZTRVQpOwogCiAJcmFuZ2UgPSByZWFkX3BjaV9jb25maWcoYnVzLCBkZXYsIGZuLCBjYXBfcHRyK01NSU9fUkFOR0VfT0ZGU0VUKTsKLQlpb21tdS0+Zmlyc3RfZGV2aWNlID0gREVWSUQoTU1JT19HRVRfQlVTKHJhbmdlKSwgTU1JT19HRVRfRkQocmFuZ2UpKTsKLQlpb21tdS0+bGFzdF9kZXZpY2UgPSBERVZJRChNTUlPX0dFVF9CVVMocmFuZ2UpLCBNTUlPX0dFVF9MRChyYW5nZSkpOworCWlvbW11LT5maXJzdF9kZXZpY2UgPSBjYWxjX2RldmlkKE1NSU9fR0VUX0JVUyhyYW5nZSksCisJCQkJCSBNTUlPX0dFVF9GRChyYW5nZSkpOworCWlvbW11LT5sYXN0X2RldmljZSA9IGNhbGNfZGV2aWQoTU1JT19HRVRfQlVTKHJhbmdlKSwKKwkJCQkJTU1JT19HRVRfTEQocmFuZ2UpKTsKIH0KIAorLyoKKyAqIFRha2VzIGEgcG9pbnRlciB0byBhbiBBTUQgSU9NTVUgZW50cnkgaW4gdGhlIEFDUEkgdGFibGUgYW5kCisgKiBpbml0aWFsaXplcyB0aGUgaGFyZHdhcmUgYW5kIG91ciBkYXRhIHN0cnVjdHVyZXMgd2l0aCBpdC4KKyAqLwogc3RhdGljIHZvaWQgX19pbml0IGluaXRfaW9tbXVfZnJvbV9hY3BpKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LAogCQkJCQlzdHJ1Y3QgaXZoZF9oZWFkZXIgKmgpCiB7CkBAIC0zNzQsNyArNTEzLDcgQEAKIAl1OCAqZW5kID0gcCwgZmxhZ3MgPSAwOwogCXUxNiBkZXZfaSwgZGV2aWQgPSAwLCBkZXZpZF9zdGFydCA9IDAsIGRldmlkX3RvID0gMDsKIAl1MzIgZXh0X2ZsYWdzID0gMDsKLQlib29sIGFsaWFzID0gMDsKKwlib29sIGFsaWFzID0gZmFsc2U7CiAJc3RydWN0IGl2aGRfZW50cnkgKmU7CiAKIAkvKgpAQCAtNDE0LDIyICs1NTMsMjMgQEAKIAkJY2FzZSBJVkhEX0RFVl9BTEw6CiAJCQlmb3IgKGRldl9pID0gaW9tbXUtPmZpcnN0X2RldmljZTsKIAkJCQkJZGV2X2kgPD0gaW9tbXUtPmxhc3RfZGV2aWNlOyArK2Rldl9pKQotCQkJCXNldF9kZXZfZW50cnlfZnJvbV9hY3BpKGRldl9pLCBlLT5mbGFncywgMCk7CisJCQkJc2V0X2Rldl9lbnRyeV9mcm9tX2FjcGkoaW9tbXUsIGRldl9pLAorCQkJCQkJCWUtPmZsYWdzLCAwKTsKIAkJCWJyZWFrOwogCQljYXNlIElWSERfREVWX1NFTEVDVDoKIAkJCWRldmlkID0gZS0+ZGV2aWQ7Ci0JCQlzZXRfZGV2X2VudHJ5X2Zyb21fYWNwaShkZXZpZCwgZS0+ZmxhZ3MsIDApOworCQkJc2V0X2Rldl9lbnRyeV9mcm9tX2FjcGkoaW9tbXUsIGRldmlkLCBlLT5mbGFncywgMCk7CiAJCQlicmVhazsKIAkJY2FzZSBJVkhEX0RFVl9TRUxFQ1RfUkFOR0VfU1RBUlQ6CiAJCQlkZXZpZF9zdGFydCA9IGUtPmRldmlkOwogCQkJZmxhZ3MgPSBlLT5mbGFnczsKIAkJCWV4dF9mbGFncyA9IDA7Ci0JCQlhbGlhcyA9IDA7CisJCQlhbGlhcyA9IGZhbHNlOwogCQkJYnJlYWs7CiAJCWNhc2UgSVZIRF9ERVZfQUxJQVM6CiAJCQlkZXZpZCA9IGUtPmRldmlkOwogCQkJZGV2aWRfdG8gPSBlLT5leHQgPj4gODsKLQkJCXNldF9kZXZfZW50cnlfZnJvbV9hY3BpKGRldmlkLCBlLT5mbGFncywgMCk7CisJCQlzZXRfZGV2X2VudHJ5X2Zyb21fYWNwaShpb21tdSwgZGV2aWQsIGUtPmZsYWdzLCAwKTsKIAkJCWFtZF9pb21tdV9hbGlhc190YWJsZVtkZXZpZF0gPSBkZXZpZF90bzsKIAkJCWJyZWFrOwogCQljYXNlIElWSERfREVWX0FMSUFTX1JBTkdFOgpAQCAtNDM3LDI0ICs1NzcsMjUgQEAKIAkJCWZsYWdzID0gZS0+ZmxhZ3M7CiAJCQlkZXZpZF90byA9IGUtPmV4dCA+PiA4OwogCQkJZXh0X2ZsYWdzID0gMDsKLQkJCWFsaWFzID0gMTsKKwkJCWFsaWFzID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIElWSERfREVWX0VYVF9TRUxFQ1Q6CiAJCQlkZXZpZCA9IGUtPmRldmlkOwotCQkJc2V0X2Rldl9lbnRyeV9mcm9tX2FjcGkoZGV2aWQsIGUtPmZsYWdzLCBlLT5leHQpOworCQkJc2V0X2Rldl9lbnRyeV9mcm9tX2FjcGkoaW9tbXUsIGRldmlkLCBlLT5mbGFncywKKwkJCQkJCWUtPmV4dCk7CiAJCQlicmVhazsKIAkJY2FzZSBJVkhEX0RFVl9FWFRfU0VMRUNUX1JBTkdFOgogCQkJZGV2aWRfc3RhcnQgPSBlLT5kZXZpZDsKIAkJCWZsYWdzID0gZS0+ZmxhZ3M7CiAJCQlleHRfZmxhZ3MgPSBlLT5leHQ7Ci0JCQlhbGlhcyA9IDA7CisJCQlhbGlhcyA9IGZhbHNlOwogCQkJYnJlYWs7CiAJCWNhc2UgSVZIRF9ERVZfUkFOR0VfRU5EOgogCQkJZGV2aWQgPSBlLT5kZXZpZDsKIAkJCWZvciAoZGV2X2kgPSBkZXZpZF9zdGFydDsgZGV2X2kgPD0gZGV2aWQ7ICsrZGV2X2kpIHsKIAkJCQlpZiAoYWxpYXMpCiAJCQkJCWFtZF9pb21tdV9hbGlhc190YWJsZVtkZXZfaV0gPSBkZXZpZF90bzsKLQkJCQlzZXRfZGV2X2VudHJ5X2Zyb21fYWNwaSgKKwkJCQlzZXRfZGV2X2VudHJ5X2Zyb21fYWNwaShpb21tdSwKIAkJCQkJCWFtZF9pb21tdV9hbGlhc190YWJsZVtkZXZfaV0sCiAJCQkJCQlmbGFncywgZXh0X2ZsYWdzKTsKIAkJCX0KQEAgLTQ2Nyw2ICs2MDgsNyBAQAogCX0KIH0KIAorLyogSW5pdGlhbGl6ZXMgdGhlIGRldmljZS0+aW9tbXUgbWFwcGluZyBmb3IgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBfX2luaXQgaW5pdF9pb21tdV9kZXZpY2VzKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewogCXUxNiBpOwpAQCAtNDk0LDYgKzYzNiwxMSBAQAogCX0KIH0KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2x1ZXMgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBvbmUgSU9NTVUKKyAqIHRvZ2V0aGVyIGFuZCBhbHNvIGFsbG9jYXRlcyB0aGUgY29tbWFuZCBidWZmZXIgYW5kIHByb2dyYW1zIHRoZQorICogaGFyZHdhcmUuIEl0IGRvZXMgTk9UIGVuYWJsZSB0aGUgSU9NTVUuIFRoaXMgaXMgZG9uZSBhZnRlcndhcmRzLgorICovCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2lvbW11X29uZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgc3RydWN0IGl2aGRfaGVhZGVyICpoKQogewogCXNwaW5fbG9ja19pbml0KCZpb21tdS0+bG9jayk7CkBAIC01MjEsNiArNjY4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBJdGVyYXRlcyBvdmVyIGFsbCBJT01NVSBlbnRyaWVzIGluIHRoZSBBQ1BJIHRhYmxlLCBhbGxvY2F0ZXMgdGhlCisgKiBJT01NVSBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemVzIGl0IHdpdGggaW5pdF9pb21tdV9vbmUoKQorICovCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2lvbW11X2FsbChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewogCXU4ICpwID0gKHU4ICopdGFibGUsICplbmQgPSAodTggKil0YWJsZTsKQEAgLTUyOCw4ICs2NzksNiBAQAogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwogCWludCByZXQ7CiAKLQlJTklUX0xJU1RfSEVBRCgmYW1kX2lvbW11X2xpc3QpOwotCiAJZW5kICs9IHRhYmxlLT5sZW5ndGg7CiAJcCArPSBJVlJTX0hFQURFUl9MRU5HVEg7CiAKQEAgLTU1NSw2ICs3MDQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGUgbmV4dCBmdW5jdGlvbnMgYmVsb25nIHRvIHRoZSB0aGlyZCBwYXNzIG9mIHBhcnNpbmcgdGhlIEFDUEkKKyAqIHRhYmxlLiBJbiB0aGlzIGxhc3QgcGFzcyB0aGUgbWVtb3J5IG1hcHBpbmcgcmVxdWlyZW1lbnRzIGFyZQorICogZ2F0aGVyZWQgKGxpa2UgZXhjbHVzaW9uIGFuZCB1bml0eSBtYXBwaW5nIHJlYW5nZXMpLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgdm9pZCBfX2luaXQgZnJlZV91bml0eV9tYXBzKHZvaWQpCiB7CiAJc3RydWN0IHVuaXR5X21hcF9lbnRyeSAqZW50cnksICpuZXh0OwpAQCAtNTY1LDYgKzcyMiw3IEBACiAJfQogfQogCisvKiBjYWxsZWQgd2hlbiB3ZSBmaW5kIGFuIGV4Y2x1c2lvbiByYW5nZSBkZWZpbml0aW9uIGluIEFDUEkgKi8KIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZXhjbHVzaW9uX3JhbmdlKHN0cnVjdCBpdm1kX2hlYWRlciAqbSkKIHsKIAlpbnQgaTsKQEAgLTU4OCw2ICs3NDYsNyBAQAogCXJldHVybiAwOwogfQogCisvKiBjYWxsZWQgZm9yIHVuaXR5IG1hcCBBQ1BJIGRlZmluaXRpb24gKi8KIHN0YXRpYyBpbnQgX19pbml0IGluaXRfdW5pdHlfbWFwX3JhbmdlKHN0cnVjdCBpdm1kX2hlYWRlciAqbSkKIHsKIAlzdHJ1Y3QgdW5pdHlfbWFwX2VudHJ5ICplID0gMDsKQEAgLTYxOSwxMyArNzc4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIGl0ZXJhdGVzIG92ZXIgYWxsIG1lbW9yeSBkZWZpbml0aW9ucyB3ZSBmaW5kIGluIHRoZSBBQ1BJIHRhYmxlICovCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X21lbW9yeV9kZWZpbml0aW9ucyhzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewogCXU4ICpwID0gKHU4ICopdGFibGUsICplbmQgPSAodTggKil0YWJsZTsKIAlzdHJ1Y3QgaXZtZF9oZWFkZXIgKm07CiAKLQlJTklUX0xJU1RfSEVBRCgmYW1kX2lvbW11X3VuaXR5X21hcCk7Ci0KIAllbmQgKz0gdGFibGUtPmxlbmd0aDsKIAlwICs9IElWUlNfSEVBREVSX0xFTkdUSDsKIApAQCAtNjQyLDYgKzgwMCwxMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBmaW5hbGx5IGVuYWJsZXMgYWxsIElPTU1VcyBmb3VuZCBpbiB0aGUgc3lzdGVtIGFmdGVyCisgKiB0aGV5IGhhdmUgYmVlbiBpbml0aWFsaXplZAorICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZW5hYmxlX2lvbW11cyh2b2lkKQogewogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwpAQCAtNjc4LDYgKzg0MCwzNCBAQAogCS5jbHMgPSAmYW1kX2lvbW11X3N5c2Rldl9jbGFzcywKIH07CiAKKy8qCisgKiBUaGlzIGlzIHRoZSBjb3JlIGluaXQgZnVuY3Rpb24gZm9yIEFNRCBJT01NVSBoYXJkd2FyZSBpbiB0aGUgc3lzdGVtLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZ2VuZXJpYyB4ODYgRE1BIGxheWVyIGluaXRpYWxpemF0aW9uCisgKiBjb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYmFzaWNhbGx5IHBhcnNlcyB0aGUgQUNQSSB0YWJsZSBmb3IgQU1EIElPTU1VIChJVlJTKQorICogdGhyZWUgdGltZXM6CisgKgorICoJMSBwYXNzKSBGaW5kIHRoZSBoaWdoZXN0IFBDSSBkZXZpY2UgaWQgdGhlIGRyaXZlciBoYXMgdG8gaGFuZGxlLgorICoJCVVwb24gdGhpcyBpbmZvcm1hdGlvbiB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGlzCisgKgkJZGV0ZXJtaW5lZCB0aGF0IG5lZWRzIHRvIGJlIGFsbG9jYXRlZC4KKyAqCisgKgkyIHBhc3MpIEluaXRpYWxpemUgdGhlIGRhdGEgc3RydWN0dXJlcyBqdXN0IGFsbG9jYXRlZCB3aXRoIHRoZQorICoJCWluZm9ybWF0aW9uIGluIHRoZSBBQ1BJIHRhYmxlIGFib3V0IGF2YWlsYWJsZSBBTUQgSU9NTVVzCisgKgkJaW4gdGhlIHN5c3RlbS4gSXQgYWxzbyBtYXBzIHRoZSBQQ0kgZGV2aWNlcyBpbiB0aGUKKyAqCQlzeXN0ZW0gdG8gc3BlY2lmaWMgSU9NTVVzCisgKgorICoJMyBwYXNzKSBBZnRlciB0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYW5kCisgKgkJaW5pdGlhbGl6ZWQgd2UgdXBkYXRlIHRoZW0gd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBtZW1vcnkKKyAqCQlyZW1hcHBpbmcgcmVxdWlyZW1lbnRzIHBhcnNlZCBvdXQgb2YgdGhlIEFDUEkgdGFibGUgaW4KKyAqCQl0aGlzIGxhc3QgcGFzcy4KKyAqCisgKiBBZnRlciB0aGF0IHRoZSBoYXJkd2FyZSBpcyBpbml0aWFsaXplZCBhbmQgcmVhZHkgdG8gZ28uIEluIHRoZSBsYXN0CisgKiBzdGVwIHdlIGRvIHNvbWUgTGludXggc3BlY2lmaWMgdGhpbmdzIGxpa2UgcmVnaXN0ZXJpbmcgdGhlIGRyaXZlciBpbgorICogdGhlIGRtYV9vcHMgaW50ZXJmYWNlIGFuZCBpbml0aWFsaXppbmcgdGhlIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQKKyAqIGZ1bmN0aW9ucy4gRmluYWxseSBpdCBwcmludHMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCBBTUQgSU9NTVVzIGFuZAorICogdGhlIGRyaXZlciBzdGF0ZSBhbmQgZW5hYmxlcyB0aGUgaGFyZHdhcmUuCisgKi8KIGludCBfX2luaXQgYW1kX2lvbW11X2luaXQodm9pZCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKQEAgLTY5OSwxNCArODg5LDE0IEBACiAJaWYgKGFjcGlfdGFibGVfcGFyc2UoIklWUlMiLCBmaW5kX2xhc3RfZGV2aWRfYWNwaSkgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkZXZfdGFibGVfc2l6ZSAgICAgPSBUQkxfU0laRShERVZfVEFCTEVfRU5UUllfU0laRSk7Ci0JYWxpYXNfdGFibGVfc2l6ZSAgID0gVEJMX1NJWkUoQUxJQVNfVEFCTEVfRU5UUllfU0laRSk7Ci0Jcmxvb2t1cF90YWJsZV9zaXplID0gVEJMX1NJWkUoUkxPT0tVUF9UQUJMRV9FTlRSWV9TSVpFKTsKKwlkZXZfdGFibGVfc2l6ZSAgICAgPSB0Ymxfc2l6ZShERVZfVEFCTEVfRU5UUllfU0laRSk7CisJYWxpYXNfdGFibGVfc2l6ZSAgID0gdGJsX3NpemUoQUxJQVNfVEFCTEVfRU5UUllfU0laRSk7CisJcmxvb2t1cF90YWJsZV9zaXplID0gdGJsX3NpemUoUkxPT0tVUF9UQUJMRV9FTlRSWV9TSVpFKTsKIAogCXJldCA9IC1FTk9NRU07CiAKIAkvKiBEZXZpY2UgdGFibGUgLSBkaXJlY3RseSB1c2VkIGJ5IGFsbCBJT01NVXMgKi8KLQlhbWRfaW9tbXVfZGV2X3RhYmxlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsCisJYW1kX2lvbW11X2Rldl90YWJsZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywKIAkJCQkgICAgICBnZXRfb3JkZXIoZGV2X3RhYmxlX3NpemUpKTsKIAlpZiAoYW1kX2lvbW11X2Rldl90YWJsZSA9PSBOVUxMKQogCQlnb3RvIG91dDsKQEAgLTczMCwyNyArOTIwLDIzIEBACiAJICogUHJvdGVjdGlvbiBEb21haW4gdGFibGUgLSBtYXBzIGRldmljZXMgdG8gcHJvdGVjdGlvbiBkb21haW5zCiAJICogVGhpcyB0YWJsZSBoYXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgcmxvb2t1cF90YWJsZQogCSAqLwotCWFtZF9pb21tdV9wZF90YWJsZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAorCWFtZF9pb21tdV9wZF90YWJsZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywKIAkJCQkgICAgIGdldF9vcmRlcihybG9va3VwX3RhYmxlX3NpemUpKTsKIAlpZiAoYW1kX2lvbW11X3BkX3RhYmxlID09IE5VTEwpCiAJCWdvdG8gZnJlZTsKIAotCWFtZF9pb21tdV9wZF9hbGxvY19iaXRtYXAgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKKwlhbWRfaW9tbXVfcGRfYWxsb2NfYml0bWFwID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKAorCQkJCQkgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sCiAJCQkJCSAgICBnZXRfb3JkZXIoTUFYX0RPTUFJTl9JRC84KSk7CiAJaWYgKGFtZF9pb21tdV9wZF9hbGxvY19iaXRtYXAgPT0gTlVMTCkKIAkJZ290byBmcmVlOwogCiAJLyoKLQkgKiBtZW1vcnkgaXMgYWxsb2NhdGVkIG5vdzsgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHRhYmxlIHdpdGggYWxsIHplcm9lcwotCSAqIGFuZCBsZXQgYWxsIGFsaWFzIGVudHJpZXMgcG9pbnQgdG8gaXRzZWxmCisJICogbGV0IGFsbCBhbGlhcyBlbnRyaWVzIHBvaW50IHRvIGl0c2VsZgogCSAqLwotCW1lbXNldChhbWRfaW9tbXVfZGV2X3RhYmxlLCAwLCBkZXZfdGFibGVfc2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IGFtZF9pb21tdV9sYXN0X2JkZjsgKytpKQogCQlhbWRfaW9tbXVfYWxpYXNfdGFibGVbaV0gPSBpOwogCi0JbWVtc2V0KGFtZF9pb21tdV9wZF90YWJsZSwgMCwgcmxvb2t1cF90YWJsZV9zaXplKTsKLQltZW1zZXQoYW1kX2lvbW11X3BkX2FsbG9jX2JpdG1hcCwgMCwgTUFYX0RPTUFJTl9JRCAvIDgpOwotCiAJLyoKIAkgKiBuZXZlciBhbGxvY2F0ZSBkb21haW4gMCBiZWNhdXNlIGl0cyB1c2VkIGFzIHRoZSBub24tYWxsb2NhdGVkIGFuZAogCSAqIGVycm9yIHZhbHVlIHBsYWNlaG9sZGVyCkBAIC03OTUsMjQgKzk4MSwxOSBAQAogCXJldHVybiByZXQ7CiAKIGZyZWU6Ci0JaWYgKGFtZF9pb21tdV9wZF9hbGxvY19iaXRtYXApCi0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYW1kX2lvbW11X3BkX2FsbG9jX2JpdG1hcCwgMSk7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylhbWRfaW9tbXVfcGRfYWxsb2NfYml0bWFwLCAxKTsKIAotCWlmIChhbWRfaW9tbXVfcGRfdGFibGUpCi0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYW1kX2lvbW11X3BkX3RhYmxlLAotCQkJCWdldF9vcmRlcihybG9va3VwX3RhYmxlX3NpemUpKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFtZF9pb21tdV9wZF90YWJsZSwKKwkJICAgZ2V0X29yZGVyKHJsb29rdXBfdGFibGVfc2l6ZSkpOwogCi0JaWYgKGFtZF9pb21tdV9ybG9va3VwX3RhYmxlKQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFtZF9pb21tdV9ybG9va3VwX3RhYmxlLAotCQkJCWdldF9vcmRlcihybG9va3VwX3RhYmxlX3NpemUpKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFtZF9pb21tdV9ybG9va3VwX3RhYmxlLAorCQkgICBnZXRfb3JkZXIocmxvb2t1cF90YWJsZV9zaXplKSk7CiAKLQlpZiAoYW1kX2lvbW11X2FsaWFzX3RhYmxlKQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFtZF9pb21tdV9hbGlhc190YWJsZSwKLQkJCQlnZXRfb3JkZXIoYWxpYXNfdGFibGVfc2l6ZSkpOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYW1kX2lvbW11X2FsaWFzX3RhYmxlLAorCQkgICBnZXRfb3JkZXIoYWxpYXNfdGFibGVfc2l6ZSkpOwogCi0JaWYgKGFtZF9pb21tdV9kZXZfdGFibGUpCi0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYW1kX2lvbW11X2Rldl90YWJsZSwKLQkJCQlnZXRfb3JkZXIoZGV2X3RhYmxlX3NpemUpKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFtZF9pb21tdV9kZXZfdGFibGUsCisJCSAgIGdldF9vcmRlcihkZXZfdGFibGVfc2l6ZSkpOwogCiAJZnJlZV9pb21tdV9hbGwoKTsKIApAQCAtODIxLDYgKzEwMDIsMTMgQEAKIAlnb3RvIG91dDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFYXJseSBkZXRlY3QgY29kZS4gVGhpcyBjb2RlIHJ1bnMgYXQgSU9NTVUgZGV0ZWN0aW9uIHRpbWUgaW4gdGhlIERNQQorICogbGF5ZXIuIEl0IGp1c3QgbG9va3MgaWYgdGhlcmUgaXMgYW4gSVZSUyBBQ1BJIHRhYmxlIHRvIGRldGVjdCBBTUQKKyAqIElPTU1VcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBfX2luaXQgZWFybHlfYW1kX2lvbW11X2RldGVjdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewogCXJldHVybiAwOwpAQCAtODI4LDcgKzEwMTYsNyBAQAogCiB2b2lkIF9faW5pdCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpCiB7Ci0JaWYgKHN3aW90bGIgfHwgbm9faW9tbXUgfHwgaW9tbXVfZGV0ZWN0ZWQpCisJaWYgKHN3aW90bGIgfHwgbm9faW9tbXUgfHwgKGlvbW11X2RldGVjdGVkICYmICFnYXJ0X2lvbW11X2FwZXJ0dXJlKSkKIAkJcmV0dXJuOwogCiAJaWYgKGFjcGlfdGFibGVfcGFyc2UoIklWUlMiLCBlYXJseV9hbWRfaW9tbXVfZGV0ZWN0KSA9PSAwKSB7CkBAIC04NDEsNiArMTAyOSwxMyBAQAogCX0KIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQYXJzaW5nIGZ1bmN0aW9ucyBmb3IgdGhlIEFNRCBJT01NVSBzcGVjaWZpYyBrZXJuZWwgY29tbWFuZCBsaW5lCisgKiBvcHRpb25zLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpCiB7CiAJZm9yICg7ICpzdHI7ICsrc3RyKSB7CkBAIC04NTMsMjAgKzEwNDgsMTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGFyc2VfYW1kX2lvbW11X3NpemVfb3B0aW9ucyhjaGFyICpzdHIpCiB7Ci0JZm9yICg7ICpzdHI7ICsrc3RyKSB7Ci0JCWlmIChzdHJjbXAoc3RyLCAiMzJNIikgPT0gMCkKLQkJCWFtZF9pb21tdV9hcGVydHVyZV9vcmRlciA9IDI1OwotCQlpZiAoc3RyY21wKHN0ciwgIjY0TSIpID09IDApCi0JCQlhbWRfaW9tbXVfYXBlcnR1cmVfb3JkZXIgPSAyNjsKLQkJaWYgKHN0cmNtcChzdHIsICIxMjhNIikgPT0gMCkKLQkJCWFtZF9pb21tdV9hcGVydHVyZV9vcmRlciA9IDI3OwotCQlpZiAoc3RyY21wKHN0ciwgIjI1Nk0iKSA9PSAwKQotCQkJYW1kX2lvbW11X2FwZXJ0dXJlX29yZGVyID0gMjg7Ci0JCWlmIChzdHJjbXAoc3RyLCAiNTEyTSIpID09IDApCi0JCQlhbWRfaW9tbXVfYXBlcnR1cmVfb3JkZXIgPSAyOTsKLQkJaWYgKHN0cmNtcChzdHIsICIxRyIpID09IDApCi0JCQlhbWRfaW9tbXVfYXBlcnR1cmVfb3JkZXIgPSAzMDsKLQl9CisJdW5zaWduZWQgb3JkZXIgPSBQQUdFX1NISUZUICsgZ2V0X29yZGVyKG1lbXBhcnNlKHN0ciwgJnN0cikpOworCisJaWYgKChvcmRlciA+IDI0KSAmJiAob3JkZXIgPCAzMSkpCisJCWFtZF9pb21tdV9hcGVydHVyZV9vcmRlciA9IG9yZGVyOwogCiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCmluZGV4IDlmOTA3ODAuLjQ0ZTIxODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpY18zMi5jCmluZGV4IGE0MzdkMDIuLmQ2Yzg5ODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWNfMzIuYwpAQCAtNzUsNyArNzUsNyBAQAogLyoKICAqIERlYnVnIGxldmVsLCBleHBvcnRlZCBmb3IgaW9fYXBpYy5jCiAgKi8KLWludCBhcGljX3ZlcmJvc2l0eTsKK3Vuc2lnbmVkIGludCBhcGljX3ZlcmJvc2l0eTsKIAogaW50IHBpY19tb2RlOwogCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkvKiBMZXZlbCB0cmlnZ2VyZWQgZm9yIDgyNDg5RFggKi8KIAlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKIAkJdiB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwgdik7CisJYXBpY193cml0ZShBUElDX0xWVDAsIHYpOwogfQogCiAvKioKQEAgLTIxMiw5ICsyMTIsNiBAQAogICogdGhpcyBmdW5jdGlvbiB0d2ljZSBvbiB0aGUgYm9vdCBDUFUsIG9uY2Ugd2l0aCBhIGJvZ3VzIHRpbWVvdXQKICAqIHZhbHVlLCBzZWNvbmQgdGltZSBmb3IgcmVhbC4gVGhlIG90aGVyIChub25jYWxpYnJhdGluZykgQ1BVcwogICogY2FsbCB0aGlzIGZ1bmN0aW9uIG9ubHkgb25jZSwgd2l0aCB0aGUgcmVhbCwgY2FsaWJyYXRlZCB2YWx1ZS4KLSAqCi0gKiBXZSBkbyByZWFkcyBiZWZvcmUgd3JpdGVzIGV2ZW4gaWYgdW5uZWNlc3NhcnksIHRvIGdldCBhcm91bmQgdGhlCi0gKiBQNSBBUElDIGRvdWJsZSB3cml0ZSBidWcuCiAgKi8KIHN0YXRpYyB2b2lkIF9fc2V0dXBfQVBJQ19MVlRUKHVuc2lnbmVkIGludCBjbG9ja3MsIGludCBvbmVzaG90LCBpbnQgaXJxZW4pCiB7CkBAIC0yMjksMTggKzIyNiwxOCBAQAogCWlmICghaXJxZW4pCiAJCWx2dHRfdmFsdWUgfD0gQVBJQ19MVlRfTUFTS0VEOwogCi0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRULCBsdnR0X3ZhbHVlKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUVCwgbHZ0dF92YWx1ZSk7CiAKIAkvKgogCSAqIERpdmlkZSBQSUNMSyBieSAxNgogCSAqLwogCXRtcF92YWx1ZSA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfVERDUiwgKHRtcF92YWx1ZQotCQkJCSYgfihBUElDX1REUl9ESVZfMSB8IEFQSUNfVERSX0RJVl9UTUJBU0UpKQotCQkJCXwgQVBJQ19URFJfRElWXzE2KTsKKwlhcGljX3dyaXRlKEFQSUNfVERDUiwKKwkJICAgKHRtcF92YWx1ZSAmIH4oQVBJQ19URFJfRElWXzEgfCBBUElDX1REUl9ESVZfVE1CQVNFKSkgfAorCQkgICBBUElDX1REUl9ESVZfMTYpOwogCiAJaWYgKCFvbmVzaG90KQotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX1RNSUNULCBjbG9ja3MvQVBJQ19ESVZJU09SKTsKKwkJYXBpY193cml0ZShBUElDX1RNSUNULCBjbG9ja3MgLyBBUElDX0RJVklTT1IpOwogfQogCiAvKgpAQCAtMjQ5LDcgKzI0Niw3IEBACiBzdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKIAkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19UTUlDVCwgZGVsdGEpOworCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgZGVsdGEpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzgsNyArMjc1LDcgQEAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgogCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7CiAJCXYgfD0gKEFQSUNfTFZUX01BU0tFRCB8IExPQ0FMX1RJTUVSX1ZFQ1RPUik7Ci0JCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUVCwgdik7CisJCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2KTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CiAJCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwpAQCAtMzcyLDEyICszNjksNyBAQAogCX0KIH0KIAotLyoKLSAqIFNldHVwIHRoZSBib290IEFQSUMKLSAqCi0gKiBDYWxpYnJhdGUgYW5kIHZlcmlmeSB0aGUgcmVzdWx0LgotICovCi12b2lkIF9faW5pdCBzZXR1cF9ib290X0FQSUNfY2xvY2sodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNhbGlicmF0ZV9BUElDX2Nsb2NrKHZvaWQpCiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7CiAJY29uc3QgbG9uZyBwbV8xMDBtcyA9IFBNVE1SX1RJQ0tTX1BFUl9TRUMvMTA7CkBAIC0zODcsMjQgKzM3OSw2IEBACiAJbG9uZyBkZWx0YSwgZGVsdGFwbTsKIAlpbnQgcG1fcmVmZXJlbmNlZCA9IDA7CiAKLQkvKgotCSAqIFRoZSBsb2NhbCBhcGljIHRpbWVyIGNhbiBiZSBkaXNhYmxlZCB2aWEgdGhlIGtlcm5lbAotCSAqIGNvbW1hbmRsaW5lIG9yIGZyb20gdGhlIENQVSBkZXRlY3Rpb24gY29kZS4gUmVnaXN0ZXIgdGhlIGxhcGljCi0JICogdGltZXIgYXMgYSBkdW1teSBjbG9jayBldmVudCBzb3VyY2Ugb24gU01QIHN5c3RlbXMsIHNvIHRoZQotCSAqIGJyb2FkY2FzdCBtZWNoYW5pc20gaXMgdXNlZC4gT24gVVAgc3lzdGVtcyBzaW1wbHkgaWdub3JlIGl0LgotCSAqLwotCWlmIChsb2NhbF9hcGljX3RpbWVyX2Rpc2FibGVkKSB7Ci0JCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCi0JCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkgewotCQkJbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gMTsKLQkJCXNldHVwX0FQSUNfdGltZXIoKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiVXNpbmcgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHRzLlxuIgotCQkgICAgImNhbGlicmF0aW5nIEFQSUMgdGltZXIgLi4uXG4iKTsKLQogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKIAkvKiBSZXBsYWNlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KQEAgLTQ4OSw4ICs0NjMsNiBAQAogCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0IC8gKDEwMDAwMDAgLyBIWiksCiAJCSAgICBjYWxpYnJhdGlvbl9yZXN1bHQgJSAoMTAwMDAwMCAvIEhaKSk7CiAKLQlsb2NhbF9hcGljX3RpbWVyX3ZlcmlmeV9vayA9IDE7Ci0KIAkvKgogCSAqIERvIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBBUElDIGNhbGlicmF0aW9uIHJlc3VsdAogCSAqLwpAQCAtNDk4LDEyICs0NzAsMTEgQEAKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiQVBJQyBmcmVxdWVuY3kgdG9vIHNsb3csIGRpc2FibGluZyBhcGljIHRpbWVyXG4iKTsKLQkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQotCQkJc2V0dXBfQVBJQ190aW1lcigpOwotCQlyZXR1cm47CisJCXJldHVybiAtMTsKIAl9CiAKKwlsb2NhbF9hcGljX3RpbWVyX3ZlcmlmeV9vayA9IDE7CisKIAkvKiBXZSB0cnVzdCB0aGUgcG0gdGltZXIgYmFzZWQgY2FsaWJyYXRpb24gKi8KIAlpZiAoIXBtX3JlZmVyZW5jZWQpIHsKIAkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIHZlcmlmeSBBUElDIHRpbWVyXG4iKTsKQEAgLTU0MywyMiArNTE0LDU1IEBACiAJaWYgKCFsb2NhbF9hcGljX3RpbWVyX3ZlcmlmeV9vaykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiQVBJQyB0aW1lciBkaXNhYmxlZCBkdWUgdG8gdmVyaWZpY2F0aW9uIGZhaWx1cmUuXG4iKTsKLQkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPT0gMSkKLQkJCXJldHVybjsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBJZiBubWlfd2F0Y2hkb2cgaXMgc2V0IHRvIElPX0FQSUMsIHdlIG5lZWQgdGhlCi0JCSAqIFBJVC9IUEVUIGdvaW5nLiAgT3RoZXJ3aXNlIHJlZ2lzdGVyIGxhcGljIGFzIGEgZHVtbXkKLQkJICogZGV2aWNlLgotCQkgKi8KLQkJaWYgKG5taV93YXRjaGRvZyAhPSBOTUlfSU9fQVBJQykKLQkJCWxhcGljX2Nsb2NrZXZlbnQuZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIHRpbWVyIHJlZ2lzdGVyZWQgYXMgZHVtbXksIgotCQkJCSIgZHVlIHRvIG5taV93YXRjaGRvZz0lZCFcbiIsIG5taV93YXRjaGRvZyk7CisJCQlyZXR1cm4gLTE7CiAJfQogCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgYm9vdCBBUElDCisgKgorICogQ2FsaWJyYXRlIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdC4KKyAqLwordm9pZCBfX2luaXQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpCit7CisJLyoKKwkgKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgZGlzYWJsZWQgdmlhIHRoZSBrZXJuZWwKKwkgKiBjb21tYW5kbGluZSBvciBmcm9tIHRoZSBDUFUgZGV0ZWN0aW9uIGNvZGUuIFJlZ2lzdGVyIHRoZSBsYXBpYworCSAqIHRpbWVyIGFzIGEgZHVtbXkgY2xvY2sgZXZlbnQgc291cmNlIG9uIFNNUCBzeXN0ZW1zLCBzbyB0aGUKKwkgKiBicm9hZGNhc3QgbWVjaGFuaXNtIGlzIHVzZWQuIE9uIFVQIHN5c3RlbXMgc2ltcGx5IGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAobG9jYWxfYXBpY190aW1lcl9kaXNhYmxlZCkgeworCQkvKiBObyBicm9hZGNhc3Qgb24gVVAgISAqLworCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpIHsKKwkJCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IDE7CisJCQlzZXR1cF9BUElDX3RpbWVyKCk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlVzaW5nIGxvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0cy5cbiIKKwkJICAgICJjYWxpYnJhdGluZyBBUElDIHRpbWVyIC4uLlxuIik7CisKKwlpZiAoY2FsaWJyYXRlX0FQSUNfY2xvY2soKSkgeworCQkvKiBObyBicm9hZGNhc3Qgb24gVVAgISAqLworCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpCisJCQlzZXR1cF9BUElDX3RpbWVyKCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIG5taV93YXRjaGRvZyBpcyBzZXQgdG8gSU9fQVBJQywgd2UgbmVlZCB0aGUKKwkgKiBQSVQvSFBFVCBnb2luZy4gIE90aGVyd2lzZSByZWdpc3RlciBsYXBpYyBhcyBhIGR1bW15CisJICogZGV2aWNlLgorCSAqLworCWlmIChubWlfd2F0Y2hkb2cgIT0gTk1JX0lPX0FQSUMpCisJCWxhcGljX2Nsb2NrZXZlbnQuZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyB0aW1lciByZWdpc3RlcmVkIGFzIGR1bW15LCIKKwkJCSIgZHVlIHRvIG5taV93YXRjaGRvZz0lZCFcbiIsIG5taV93YXRjaGRvZyk7CisKIAkvKiBTZXR1cCB0aGUgbGFwaWMgb3IgcmVxdWVzdCB0aGUgYnJvYWRjYXN0ICovCiAJc2V0dXBfQVBJQ190aW1lcigpOwogfQpAQCAtNjkzLDQ0ICs2OTcsNDQgQEAKIAkgKi8KIAlpZiAobWF4bHZ0ID49IDMpIHsKIAkJdiA9IEVSUk9SX0FQSUNfVkVDVE9SOyAvKiBhbnkgbm9uLXplcm8gdmVjdG9yIHdpbGwgZG8gKi8KLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKIAl9CiAJLyoKIAkgKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIHNldCBtYXNrcyBvbmx5IGZpcnN0IHRvIGRlYXNzZXJ0CiAJICogYW55IGxldmVsLXRyaWdnZXJlZCBzb3VyY2VzLgogCSAqLwogCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVFQsIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKIAl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CiAJdiA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMSwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwogCWlmIChtYXhsdnQgPj0gNCkgewogCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOwotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVFBDLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwkJYXBpY193cml0ZShBUElDX0xWVFBDLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKIAl9CiAKIAkvKiBsZXRzIG5vdCB0b3VjaCB0aGlzIGlmIHdlIGRpZG4ndCBmcm9iIGl0ICovCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMCiAJaWYgKG1heGx2dCA+PSA1KSB7CiAJCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRUSE1SLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwogCX0KICNlbmRpZgogCS8qCiAJICogQ2xlYW4gQVBJQyBzdGF0ZSBmb3Igb3RoZXIgT1NzOgogCSAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUVCwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCk7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQxLCBBUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBBUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCBBUElDX0xWVF9NQVNLRUQpOwogCWlmIChtYXhsdnQgPj0gMykKLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRFUlIsIEFQSUNfTFZUX01BU0tFRCk7CisJCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIEFQSUNfTFZUX01BU0tFRCk7CiAJaWYgKG1heGx2dCA+PSA0KQotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVFBDLCBBUElDX0xWVF9NQVNLRUQpOworCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfTFZUX01BU0tFRCk7CiAKICNpZmRlZiBDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwKIAlpZiAobWF4bHZ0ID49IDUpCi0JCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUVEhNUiwgQVBJQ19MVlRfTUFTS0VEKTsKKwkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIEFQSUNfTFZUX01BU0tFRCk7CiAjZW5kaWYKIAkvKiBJbnRlZ3JhdGVkIEFQSUMgKCE4MjQ4OURYKSA/ICovCiAJaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSkgewpAQCAtNzU2LDcgKzc2MCw3IEBACiAJICovCiAJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKIAl2YWx1ZSAmPSB+QVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX1NQSVYsIHZhbHVlKTsKKwlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwogCiAJLyoKIAkgKiBXaGVuIExBUElDIHdhcyBkaXNhYmxlZCBieSB0aGUgQklPUyBhbmQgZW5hYmxlZCBieSB0aGUga2VybmVsLApAQCAtODY1LDggKzg2OSw4IEBACiAJYXBpY193YWl0X2ljcl9pZGxlKCk7CiAKIAlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiU3luY2hyb25pemluZyBBcmIgSURzLlxuIik7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIEFQSUNfREVTVF9BTExJTkMgfCBBUElDX0lOVF9MRVZFTFRSSUcKLQkJCQl8IEFQSUNfRE1fSU5JVCk7CisJYXBpY193cml0ZShBUElDX0lDUiwKKwkJICAgQVBJQ19ERVNUX0FMTElOQyB8IEFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfRE1fSU5JVCk7CiB9CiAKIC8qCkBAIC05MDIsMTYgKzkwNiwxNiBAQAogCWVsc2UKIAkJdmFsdWUgfD0gQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwogCXZhbHVlIHw9IFNQVVJJT1VTX0FQSUNfVkVDVE9SOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfU1BJViwgdmFsdWUpOworCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7CiAKIAkvKgogCSAqIFNldCB1cCB0aGUgdmlydHVhbCB3aXJlIG1vZGUuCiAJICovCi0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKIAl2YWx1ZSA9IEFQSUNfRE1fTk1JOwogCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQkJLyogODI0ODlEWCAqLwogCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMSwgdmFsdWUpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBsYXBpY19zZXR1cF9lc3Iodm9pZCkKQEAgLTkyNiw3ICs5MzAsNyBAQAogCiAJCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KIAkJdmFsdWUgPSBFUlJPUl9BUElDX1ZFQ1RPUjsKLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRFUlIsIHZhbHVlKTsKKwkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdmFsdWUpOwogCQkvKgogCQkgKiBzcGVjIHNheXMgY2xlYXIgZXJyb3JzIGFmdGVyIGVuYWJsaW5nIHZlY3Rvci4KIAkJICovCkBAIC05ODksNyArOTkzLDcgQEAKIAkgKi8KIAl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwogCXZhbHVlICY9IH5BUElDX1RQUklfTUFTSzsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX1RBU0tQUkksIHZhbHVlKTsKKwlhcGljX3dyaXRlKEFQSUNfVEFTS1BSSSwgdmFsdWUpOwogCiAJLyoKIAkgKiBBZnRlciBhIGNyYXNoLCB3ZSBubyBsb25nZXIgc2VydmljZSB0aGUgaW50ZXJydXB0cyBhbmQgYSBwZW5kaW5nCkBAIC0xMDQ3LDcgKzEwNTEsNyBAQAogCSAqIFNldCBzcHVyaW91cyBJUlEgdmVjdG9yCiAJICovCiAJdmFsdWUgfD0gU1BVUklPVVNfQVBJQ19WRUNUT1I7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19TUElWLCB2YWx1ZSk7CisJYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKIAogCS8qCiAJICogU2V0IHVwIExWVDAsIExWVDE6CkBAIC0xMDY5LDcgKzEwNzMsNyBAQAogCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXNrZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwKIAkJCQlzbXBfcHJvY2Vzc29yX2lkKCkpOwogCX0KLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIHZhbHVlKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdmFsdWUpOwogCiAJLyoKIAkgKiBvbmx5IHRoZSBCUCBzaG91bGQgc2VlIHRoZSBMSU5UMSBOTUkgc2lnbmFsLCBvYnZpb3VzbHkuCkBAIC0xMDgwLDcgKzEwODQsNyBAQAogCQl2YWx1ZSA9IEFQSUNfRE1fTk1JIHwgQVBJQ19MVlRfTUFTS0VEOwogCWlmICghaW50ZWdyYXRlZCkJCS8qIDgyNDg5RFggKi8KIAkJdmFsdWUgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDEsIHZhbHVlKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwogfQogCiB2b2lkIF9fY3B1aW5pdCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQpAQCAtMTA5MSw3ICsxMDk1LDcgQEAKIAkvKiBEaXNhYmxlIHRoZSBsb2NhbCBhcGljIHRpbWVyICovCiAJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKIAl2YWx1ZSB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVFQsIHZhbHVlKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdmFsdWUpOwogCiAJc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7CiAJYXBpY19wbV9hY3RpdmF0ZSgpOwpAQCAtMTIxNCw5ICsxMjE4LDYgQEAKIAogaW50IF9faW5pdCBBUElDX2luaXRfdW5pcHJvY2Vzc29yKHZvaWQpCiB7Ci0JaWYgKGRpc2FibGVfYXBpYykKLQkJY2xlYXJfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVBJQyk7Ci0KIAlpZiAoIXNtcF9mb3VuZF9jb25maWcgJiYgIWNwdV9oYXNfYXBpYykKIAkJcmV0dXJuIC0xOwogCkBAIC0xNDE5LDcgKzE0MjAsNyBAQAogCQl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKIAkJdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKIAkJdmFsdWUgfD0gMHhmOwotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX1NQSVYsIHZhbHVlKTsKKwkJYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKIAogCQlpZiAoIXZpcnRfd2lyZV9zZXR1cCkgewogCQkJLyoKQEAgLTE0MzIsMTAgKzE0MzMsMTAgQEAKIAkJCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKIAkJCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKIAkJCXZhbHVlID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWx1ZSwgQVBJQ19NT0RFX0VYVElOVCk7Ci0JCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIHZhbHVlKTsKKwkJCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2YWx1ZSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBEaXNhYmxlIExWVDAgKi8KLQkJCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsKKwkJCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOwogCQl9CiAKIAkJLyoKQEAgLTE0NDksNyArMTQ1MCw3IEBACiAJCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKIAkJdmFsdWUgfD0gQVBJQ19MVlRfUkVNT1RFX0lSUiB8IEFQSUNfU0VORF9QRU5ESU5HOwogCQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9OTUkpOwotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDEsIHZhbHVlKTsKKwkJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKIAl9CiB9CiAKQEAgLTE3MDAsNyArMTcwMSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2xhcGljKGNoYXIgKmFyZykKIHsKIAlkaXNhYmxlX2FwaWMgPSAxOwotCWNsZWFyX2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FQSUMpOworCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfQVBJQyk7CiAJcmV0dXJuIDA7CiB9CiBlYXJseV9wYXJhbSgibm9sYXBpYyIsIHBhcnNlX25vbGFwaWMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljXzY0LmMKaW5kZXggMWUzZDMyZS4uN2YxZjAzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpY182NC5jCkBAIC01NCw3ICs1NCw3IEBACiAvKgogICogRGVidWcgbGV2ZWwsIGV4cG9ydGVkIGZvciBpb19hcGljLmMKICAqLwotaW50IGFwaWNfdmVyYm9zaXR5OwordW5zaWduZWQgaW50IGFwaWNfdmVyYm9zaXR5OwogCiAvKiBIYXZlIHdlIGZvdW5kIGFuIE1QIHRhYmxlICovCiBpbnQgc21wX2ZvdW5kX2NvbmZpZzsKQEAgLTMxNCw3ICszMTQsNyBAQAogCiAjZGVmaW5lIFRJQ0tfQ09VTlQgMTAwMDAwMDAwCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBjYWxpYnJhdGVfQVBJQ19jbG9jayh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY2FsaWJyYXRlX0FQSUNfY2xvY2sodm9pZCkKIHsKIAl1bnNpZ25lZCBhcGljLCBhcGljX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgdHNjLCB0c2Nfc3RhcnQ7CkBAIC0zNjgsNiArMzY4LDE3IEBACiAJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhGLCAmbGFwaWNfY2xvY2tldmVudCk7CiAKIAljYWxpYnJhdGlvbl9yZXN1bHQgPSByZXN1bHQgLyBIWjsKKworCS8qCisJICogRG8gYSBzYW5pdHkgY2hlY2sgb24gdGhlIEFQSUMgY2FsaWJyYXRpb24gcmVzdWx0CisJICovCisJaWYgKGNhbGlicmF0aW9uX3Jlc3VsdCA8ICgxMDAwMDAwIC8gSFopKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJBUElDIGZyZXF1ZW5jeSB0b28gc2xvdywgZGlzYWJsaW5nIGFwaWMgdGltZXJcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zOTQsMTQgKzQwNSw3IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHRzLlxuIik7Ci0JY2FsaWJyYXRlX0FQSUNfY2xvY2soKTsKLQotCS8qCi0JICogRG8gYSBzYW5pdHkgY2hlY2sgb24gdGhlIEFQSUMgY2FsaWJyYXRpb24gcmVzdWx0Ci0JICovCi0JaWYgKGNhbGlicmF0aW9uX3Jlc3VsdCA8ICgxMDAwMDAwIC8gSFopKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJBUElDIGZyZXF1ZW5jeSB0b28gc2xvdywgZGlzYWJsaW5nIGFwaWMgdGltZXJcbiIpOworCWlmIChjYWxpYnJhdGVfQVBJQ19jbG9jaygpKSB7CiAJCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCiAJCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkKIAkJCXNldHVwX0FQSUNfdGltZXIoKTsKQEAgLTEzMzcsNyArMTM0MSw3IEBACiBzdGF0aWMgX19pbml0IGludCBzZXR1cF9kaXNhYmxlYXBpYyhjaGFyICpzdHIpCiB7CiAJZGlzYWJsZV9hcGljID0gMTsKLQljbGVhcl9jcHVfY2FwKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUElDKTsKKwlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX0FQSUMpOwogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oImRpc2FibGVhcGljIiwgc2V0dXBfZGlzYWJsZWFwaWMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwppbmRleCBiYWNmNWRlLi5hYTg5Mzg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgogCisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKwogI2RlZmluZSBfX05PX1NUVUJTIDEKICN1bmRlZiBfX1NZU0NBTEwKICN1bmRlZiBfQVNNX1g4Nl82NF9VTklTVERfSF8KQEAgLTEzMSw1ICsxMzMsMTQgQEAKIAlPRkZTRVQoQlBfbG9hZGZsYWdzLCBib290X3BhcmFtcywgaGRyLmxvYWRmbGFncyk7CiAJT0ZGU0VUKEJQX2hhcmR3YXJlX3N1YmFyY2gsIGJvb3RfcGFyYW1zLCBoZHIuaGFyZHdhcmVfc3ViYXJjaCk7CiAJT0ZGU0VUKEJQX3ZlcnNpb24sIGJvb3RfcGFyYW1zLCBoZHIudmVyc2lvbik7CisKKwlCTEFOSygpOworCURFRklORShQQUdFX1NJWkVfYXNtLCBQQUdFX1NJWkUpOworI2lmZGVmIENPTkZJR19YRU4KKwlCTEFOSygpOworCU9GRlNFVChYRU5fdmNwdV9pbmZvX21hc2ssIHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9tYXNrKTsKKwlPRkZTRVQoWEVOX3ZjcHVfaW5mb19wZW5kaW5nLCB2Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZyk7CisjdW5kZWYgRU5UUlkKKyNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYyBiL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzOWJkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIEJJT1MgcnVuIHRpbWUgaW50ZXJmYWNlIHJvdXRpbmVzLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxhc20vdXYvYmlvcy5oPgorCitjb25zdCBjaGFyICoKK3g4Nl9iaW9zX3N0cmVycm9yKGxvbmcgc3RhdHVzKQoreworCWNvbnN0IGNoYXIgKnN0cjsKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgIDA6IHN0ciA9ICJDYWxsIGNvbXBsZXRlZCB3aXRob3V0IGVycm9yIjsgYnJlYWs7CisJY2FzZSAtMTogc3RyID0gIk5vdCBpbXBsZW1lbnRlZCI7IGJyZWFrOworCWNhc2UgLTI6IHN0ciA9ICJJbnZhbGlkIGFyZ3VtZW50IjsgYnJlYWs7CisJY2FzZSAtMzogc3RyID0gIkNhbGwgY29tcGxldGVkIHdpdGggZXJyb3IiOyBicmVhazsKKwlkZWZhdWx0OiBzdHIgPSAiVW5rbm93biBCSU9TIHN0YXR1cyBjb2RlIjsgYnJlYWs7CisJfQorCXJldHVybiBzdHI7Cit9CisKK2xvbmcKK3g4Nl9iaW9zX2ZyZXFfYmFzZSh1bnNpZ25lZCBsb25nIHdoaWNoLCB1bnNpZ25lZCBsb25nICp0aWNrc19wZXJfc2Vjb25kLAorCQkgICB1bnNpZ25lZCBsb25nICpkcmlmdF9pbmZvKQoreworCXN0cnVjdCB1dl9iaW9zX3JldHZhbCBpc3J2OworCisJQklPU19DQUxMKGlzcnYsIEJJT1NfRlJFUV9CQVNFLCB3aGljaCwgMCwgMCwgMCwgMCwgMCwgMCk7CisJKnRpY2tzX3Blcl9zZWNvbmQgPSBpc3J2LnYwOworCSpkcmlmdF9pbmZvID0gaXNydi52MTsKKwlyZXR1cm4gaXNydi5zdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ODZfYmlvc19mcmVxX2Jhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggODFhMDdjYS4uY2FlOWNhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC0yNCw4ICsyNCw2IEBACiBleHRlcm4gdm9pZCB2aWRlKHZvaWQpOwogX19hc21fXygiLmFsaWduIDRcbnZpZGU6IHJldCIpOwogCi1pbnQgZm9yY2VfbXdhaXQgX19jcHVpbml0ZGF0YTsKLQogc3RhdGljIHZvaWQgX19jcHVpbml0IGVhcmx5X2luaXRfYW1kKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAlpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZF82NC5jCmluZGV4IDdjMzZmYjguLmQxNjkyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWRfNjQuYwpAQCAtMTE1LDYgKzExNSw4IEBACiAJLyogYy0+eDg2X3Bvd2VyIGlzIDgwMDBfMDAwNyBlZHguIEJpdCA4IGlzIGNvbnN0YW50IFRTQyAqLwogCWlmIChjLT54ODZfcG93ZXIgJiAoMTw8OCkpCiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7CisKKwlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9TWVNDQUxMMzIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9hbWQoc3RydWN0IGNwdWluZm9feDg2ICpjKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYwppbmRleCAxYjFjNTZiLi5jOWI1OGE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYwpAQCAtMTMxLDEzICsxMzEsNyBAQAogICogICAoZm9yIGR1ZSB0byBsYWNrIG9mICJpbnZscGciIGFuZCB3b3JraW5nIFdQIG9uIGEgaTM4NikKICAqIC0gSW4gb3JkZXIgdG8gcnVuIG9uIGFueXRoaW5nIHdpdGhvdXQgYSBUU0MsIHdlIG5lZWQgdG8gYmUKICAqICAgY29tcGlsZWQgZm9yIGEgaTQ4Ni4KLSAqIC0gSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgbG9jYWwgQVBJQyBvbiBhIGJ1Z2d5IFBlbnRpdW0gbWFjaGluZSwKLSAqICAgd2UgbmVlZCB0byBiZSBjb21waWxlZCB3aXRoIENPTkZJR19YODZfR09PRF9BUElDIGRpc2FibGVkLAotICogICB3aGljaCBoYXBwZW5zIGltcGxpY2l0bHkgaWYgY29tcGlsZWQgZm9yIGEgUGVudGl1bSBvciBsb3dlcgotICogICAodW5sZXNzIGFuIGFkdmFuY2VkIHNlbGVjdGlvbiBvZiBDUFUgZmVhdHVyZXMgaXMgdXNlZCkgYXMgYW4KLSAqICAgb3RoZXJ3aXNlIGNvbmZpZyBpbXBsaWVzIGEgcHJvcGVybHkgd29ya2luZyBsb2NhbCBBUElDIHdpdGhvdXQKLSAqICAgdGhlIG5lZWQgdG8gZG8gZXh0cmEgcmVhZHMgZnJvbSB0aGUgQVBJQy4KLSovCisgKi8KIAogc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2NvbmZpZyh2b2lkKQogewpAQCAtMTUxLDIxICsxNDUsNiBAQAogCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAzKQogCQlwYW5pYygiS2VybmVsIHJlcXVpcmVzIGk0ODYrIGZvciAnaW52bHBnJyBhbmQgb3RoZXIgZmVhdHVyZXMiKTsKICNlbmRpZgotCi0vKgotICogSWYgd2Ugd2VyZSB0b2xkIHdlIGhhZCBhIGdvb2QgbG9jYWwgQVBJQywgY2hlY2sgZm9yIGJ1Z2d5IFBlbnRpYSwKLSAqIGkuZS4gYWxsIEIgc3RlcHBpbmdzIGFuZCB0aGUgQzIgc3RlcHBpbmcgb2YgUDU0QyB3aGVuIHVzaW5nIHRoZWlyCi0gKiBpbnRlZ3JhdGVkIEFQSUMgKHNlZSAxMUFQIGVycmF0dW0gaW4gIlBlbnRpdW0gUHJvY2Vzc29yCi0gKiBTcGVjaWZpY2F0aW9uIFVwZGF0ZSIpLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpICYmIGRlZmluZWQoQ09ORklHX1g4Nl9HT09EX0FQSUMpCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMCi0JICAgICYmIGNwdV9oYXNfYXBpYwotCSAgICAmJiBib290X2NwdV9kYXRhLng4NiA9PSA1Ci0JICAgICYmIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID09IDIKLQkgICAgJiYgKGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPCA2IHx8IGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPT0gMTEpKQotCQlwYW5pYygiS2VybmVsIGNvbXBpbGVkIGZvciBQTU1YKywgYXNzdW1lcyBhIGxvY2FsIEFQSUMgd2l0aG91dCB0aGUgcmVhZC1iZWZvcmUtd3JpdGUgYnVnISIpOwotI2VuZGlmCiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb25fNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uXzY0LmMKaW5kZXggN2I4Y2M3Mi4uZGQ2ZTNmMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb25fNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbl82NC5jCkBAIC03LDE1ICs3LDEzIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2dkYi5oPgogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KQEAgLTMwNSw3ICszMDMsNiBAQAogCQkJYy0+eDg2X2NhcGFiaWxpdHlbMl0gPSBjcHVpZF9lZHgoMHg4MDg2MDAwMSk7CiAJfQogCi0JYy0+ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSBjcHVpZF9lYXgoMHg4MDAwMDAwMCk7CiAJaWYgKGMtPmV4dGVuZGVkX2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDcpCiAJCWMtPng4Nl9wb3dlciA9IGNwdWlkX2VkeCgweDgwMDAwMDA3KTsKIApAQCAtMzE2LDE4ICszMTMsMTEgQEAKIAkJYy0+eDg2X3BoeXNfYml0cyA9IGVheCAmIDB4ZmY7CiAJfQogCi0JLyogQXNzdW1lIGFsbCA2NC1iaXQgQ1BVcyBzdXBwb3J0IDMyLWJpdCBzeXNjYWxsICovCi0Jc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfU1lTQ0FMTDMyKTsKLQogCWlmIChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfVU5LTk9XTiAmJgogCSAgICBjcHVfZGV2c1tjLT54ODZfdmVuZG9yXS0+Y19lYXJseV9pbml0KQogCQljcHVfZGV2c1tjLT54ODZfdmVuZG9yXS0+Y19lYXJseV9pbml0KGMpOwogCiAJdmFsaWRhdGVfcGF0X3N1cHBvcnQoYyk7Ci0KLQkvKiBlYXJseV9wYXJhbSBjb3VsZCBjbGVhciB0aGF0LCBidXQgcmVjYWxsIGdldCBpdCBzZXQgYWdhaW4gKi8KLQlpZiAoZGlzYWJsZV9hcGljKQotCQljbGVhcl9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0FQSUMpOwogfQogCiAvKgpAQCAtNTE3LDggKzUwNyw3IEBACiB9CiAKIGNoYXIgYm9vdF9leGNlcHRpb25fc3RhY2tzWyhOX0VYQ0VQVElPTl9TVEFDS1MgLSAxKSAqIEVYQ0VQVElPTl9TVEtTWiArCi0JCQkgICBERUJVR19TVEtTWl0KLV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ic3MucGFnZV9hbGlnbmVkIikpKTsKKwkJCSAgIERFQlVHX1NUS1NaXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CiAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgaWdub3JlX3N5c3JldCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IGIwYzgyMDguLmZmMmZmZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTIwMCwxMCArMjAwLDEyIEBACiBzdGF0aWMgdm9pZCBkcnZfd3JpdGUoc3RydWN0IGRydl9jbWQgKmNtZCkKIHsKIAljcHVtYXNrX3Qgc2F2ZWRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKKwljcHVtYXNrX29mX2NwdV9wdHJfZGVjbGFyZShjcHVfbWFzayk7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBjbWQtPm1hc2spIHsKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGkpKTsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBjbWQtPm1hc2spIHsKKwkJY3B1bWFza19vZl9jcHVfcHRyX25leHQoY3B1X21hc2ssIGkpOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVfbWFzayk7CiAJCWRvX2Rydl93cml0ZShjbWQpOwogCX0KIApAQCAtMjY3LDExICsyNjksMTIgQEAKIAl9IGFwZXJmX2N1ciwgbXBlcmZfY3VyOwogCiAJY3B1bWFza190IHNhdmVkX21hc2s7CisJY3B1bWFza19vZl9jcHVfcHRyKGNwdV9tYXNrLCBjcHUpOwogCXVuc2lnbmVkIGludCBwZXJmX3BlcmNlbnQ7CiAJdW5zaWduZWQgaW50IHJldHZhbDsKIAogCXNhdmVkX21hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdV9tYXNrKTsKIAlpZiAoZ2V0X2NwdSgpICE9IGNwdSkgewogCQkvKiBXZSB3ZXJlIG5vdCBhYmxlIHRvIHJ1biBvbiByZXF1ZXN0ZWQgcHJvY2Vzc29yICovCiAJCXB1dF9jcHUoKTsKQEAgLTMzNyw2ICszNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jdXJfZnJlcV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSkKIHsKKwljcHVtYXNrX29mX2NwdV9wdHIoY3B1X21hc2ssIGNwdSk7CiAJc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0gcGVyX2NwdShkcnZfZGF0YSwgY3B1KTsKIAl1bnNpZ25lZCBpbnQgZnJlcTsKIAl1bnNpZ25lZCBpbnQgY2FjaGVkX2ZyZXE7CkBAIC0zNDksNyArMzUzLDcgQEAKIAl9CiAKIAljYWNoZWRfZnJlcSA9IGRhdGEtPmZyZXFfdGFibGVbZGF0YS0+YWNwaV9kYXRhLT5zdGF0ZV0uZnJlcXVlbmN5OwotCWZyZXEgPSBleHRyYWN0X2ZyZXEoZ2V0X2N1cl92YWwoJmNwdW1hc2tfb2ZfY3B1KGNwdSkpLCBkYXRhKTsKKwlmcmVxID0gZXh0cmFjdF9mcmVxKGdldF9jdXJfdmFsKGNwdV9tYXNrKSwgZGF0YSk7CiAJaWYgKGZyZXEgIT0gY2FjaGVkX2ZyZXEpIHsKIAkJLyoKIAkJICogVGhlIGRyZWFkZWQgQklPUyBmcmVxdWVuY3kgY2hhbmdlIGJlaGluZCBvdXIgYmFjay4KQEAgLTQ1MSw3ICs0NTUsNyBAQAogCiAJZnJlcXMub2xkID0gcGVyZi0+c3RhdGVzW3BlcmYtPnN0YXRlXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAJZnJlcXMubmV3ID0gZGF0YS0+ZnJlcV90YWJsZVtuZXh0X3N0YXRlXS5mcmVxdWVuY3k7Ci0JZm9yX2VhY2hfY3B1X21hc2soaSwgY21kLm1hc2spIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBjbWQubWFzaykgewogCQlmcmVxcy5jcHUgPSBpOwogCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCX0KQEAgLTQ2Niw3ICs0NzAsNyBAQAogCQl9CiAJfQogCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgY21kLm1hc2spIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBjbWQubWFzaykgewogCQlmcmVxcy5jcHUgPSBpOwogCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCmluZGV4IDE5OWU0ZTAuLmYxNjg1ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBub3RpZmllcnMgKi8KLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBwb2xpY3ktPmNwdXMpIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBwb2xpY3ktPmNwdXMpIHsKIAkJZnJlcXMuY3B1ID0gaTsKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAl9CkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogCS8qIHJ1biBvbiBlYWNoIGxvZ2ljYWwgQ1BVLCBzZWUgc2VjdGlvbiAxMy4xNS4zIG9mIElBMzIgSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlCiAJICogRGV2ZWxvcGVyJ3MgTWFudWFsLCBWb2x1bWUgMwogCSAqLwotCWZvcl9lYWNoX2NwdV9tYXNrKGksIHBvbGljeS0+Y3B1cykKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBwb2xpY3ktPmNwdXMpCiAJCWNwdWZyZXFfcDRfc2V0ZGMoaSwgcDRjbG9ja21vZF90YWJsZVtuZXdzdGF0ZV0uaW5kZXgpOwogCiAJLyogbm90aWZpZXJzICovCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgcG9saWN5LT5jcHVzKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgcG9saWN5LT5jcHVzKSB7CiAJCWZyZXFzLmNwdSA9IGk7CiAJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmgKaW5kZXggZjhhNjNiMy4uMzVmYjRlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmgKQEAgLTEsNSArMSw0IEBACiAvKgotICogICRJZDogcG93ZXJub3ctazcuaCx2IDEuMiAyMDAzLzAyLzEwIDE4OjI2OjAxIGRhdmVqIEV4cCAkCiAgKiAgKEMpIDIwMDMgRGF2ZSBKb25lcy4KICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCAyMDY3OTFlLi41M2M3YjY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtNDc5LDExICs0NzksMTIgQEAKIHN0YXRpYyBpbnQgY2hlY2tfc3VwcG9ydGVkX2NwdSh1bnNpZ25lZCBpbnQgY3B1KQogewogCWNwdW1hc2tfdCBvbGRtYXNrOworCWNwdW1hc2tfb2ZfY3B1X3B0cihjcHVfbWFzaywgY3B1KTsKIAl1MzIgZWF4LCBlYngsIGVjeCwgZWR4OwogCXVuc2lnbmVkIGludCByYyA9IDA7CiAKIAlvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVfbWFzayk7CiAKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGNwdSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJsaW1pdGluZyB0byBjcHUgJXUgZmFpbGVkXG4iLCBjcHUpOwpAQCAtOTY2LDcgKzk2Nyw3IEBACiAJZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKIAlmcmVxcy5uZXcgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGZpZCk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCAqKGRhdGEtPmF2YWlsYWJsZV9jb3JlcykpIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCAqKGRhdGEtPmF2YWlsYWJsZV9jb3JlcykpIHsKIAkJZnJlcXMuY3B1ID0gaTsKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAl9CkBAIC05NzQsNyArOTc1LDcgQEAKIAlyZXMgPSB0cmFuc2l0aW9uX2ZpZF92aWQoZGF0YSwgZmlkLCB2aWQpOwogCWZyZXFzLm5ldyA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCAqKGRhdGEtPmF2YWlsYWJsZV9jb3JlcykpIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCAqKGRhdGEtPmF2YWlsYWJsZV9jb3JlcykpIHsKIAkJZnJlcXMuY3B1ID0gaTsKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiAJfQpAQCAtOTk3LDcgKzk5OCw3IEBACiAJZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwgZGF0YS0+Y3VycnBzdGF0ZSk7CiAJZnJlcXMubmV3ID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwgcHN0YXRlKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksICooZGF0YS0+YXZhaWxhYmxlX2NvcmVzKSkgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksICooZGF0YS0+YXZhaWxhYmxlX2NvcmVzKSkgewogCQlmcmVxcy5jcHUgPSBpOwogCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCX0KQEAgLTEwMDUsNyArMTAwNiw3IEBACiAJcmVzID0gdHJhbnNpdGlvbl9wc3RhdGUoZGF0YSwgcHN0YXRlKTsKIAlmcmVxcy5uZXcgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBwc3RhdGUpOwogCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgKihkYXRhLT5hdmFpbGFibGVfY29yZXMpKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgKihkYXRhLT5hdmFpbGFibGVfY29yZXMpKSB7CiAJCWZyZXFzLmNwdSA9IGk7CiAJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogCX0KQEAgLTEwMTYsNiArMTAxNyw3IEBACiBzdGF0aWMgaW50IHBvd2Vybm93azhfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sLCB1bnNpZ25lZCB0YXJnZnJlcSwgdW5zaWduZWQgcmVsYXRpb24pCiB7CiAJY3B1bWFza190IG9sZG1hc2s7CisJY3B1bWFza19vZl9jcHVfcHRyKGNwdV9tYXNrLCBwb2wtPmNwdSk7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEgPSBwZXJfY3B1KHBvd2Vybm93X2RhdGEsIHBvbC0+Y3B1KTsKIAl1MzIgY2hlY2tmaWQ7CiAJdTMyIGNoZWNrdmlkOwpAQCAtMTAzMCw3ICsxMDMyLDcgQEAKIAogCS8qIG9ubHkgcnVuIG9uIHNwZWNpZmljIENQVSBmcm9tIGhlcmUgb24gKi8KIAlvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShwb2wtPmNwdSkpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdV9tYXNrKTsKIAogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gcG9sLT5jcHUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibGltaXRpbmcgdG8gY3B1ICV1IGZhaWxlZFxuIiwgcG9sLT5jcHUpOwpAQCAtMTEwNSw2ICsxMTA3LDcgQEAKIHsKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YTsKIAljcHVtYXNrX3Qgb2xkbWFzazsKKwljcHVtYXNrX29mX2NwdV9wdHJfZGVjbGFyZShuZXdtYXNrKTsKIAlpbnQgcmM7CiAKIAlpZiAoIWNwdV9vbmxpbmUocG9sLT5jcHUpKQpAQCAtMTE1Niw3ICsxMTU5LDggQEAKIAogCS8qIG9ubHkgcnVuIG9uIHNwZWNpZmljIENQVSBmcm9tIGhlcmUgb24gKi8KIAlvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShwb2wtPmNwdSkpOworCWNwdW1hc2tfb2ZfY3B1X3B0cl9uZXh0KG5ld21hc2ssIHBvbC0+Y3B1KTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBuZXdtYXNrKTsKIAogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gcG9sLT5jcHUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibGltaXRpbmcgdG8gY3B1ICV1IGZhaWxlZFxuIiwgcG9sLT5jcHUpOwpAQCAtMTE3OCw3ICsxMTgyLDcgQEAKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkbWFzayk7CiAKIAlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKQotCQlwb2wtPmNwdXMgPSBjcHVtYXNrX29mX2NwdShwb2wtPmNwdSk7CisJCXBvbC0+Y3B1cyA9ICpuZXdtYXNrOwogCWVsc2UKIAkJcG9sLT5jcHVzID0gcGVyX2NwdShjcHVfY29yZV9tYXAsIHBvbC0+Y3B1KTsKIAlkYXRhLT5hdmFpbGFibGVfY29yZXMgPSAmKHBvbC0+Y3B1cyk7CkBAIC0xMjQ0LDYgKzEyNDgsNyBAQAogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhOwogCWNwdW1hc2tfdCBvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCWNwdW1hc2tfb2ZfY3B1X3B0cihuZXdtYXNrLCBjcHUpOwogCXVuc2lnbmVkIGludCBraHogPSAwOwogCXVuc2lnbmVkIGludCBmaXJzdDsKIApAQCAtMTI1Myw3ICsxMjU4LDcgQEAKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIG5ld21hc2spOwogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gY3B1KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJCSJsaW1pdGluZyB0byBDUFUgJWQgZmFpbGVkIGluIHBvd2Vybm93azhfZ2V0XG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCmluZGV4IDkwOGRkMzQuLmNhMmFjMTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKQEAgLTI4LDcgKzI4LDggQEAKICNkZWZpbmUgUEZYCQkic3BlZWRzdGVwLWNlbnRyaW5vOiAiCiAjZGVmaW5lIE1BSU5UQUlORVIJImNwdWZyZXFAbGlzdHMubGludXgub3JnLnVrIgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1jZW50cmlubyIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIFwKKwljcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1jZW50cmlubyIsIG1zZykKIAogI2RlZmluZSBJTlRFTF9NU1JfUkFOR0UJKDB4ZmZmZikKIApAQCAtNjYsMTEgKzY3LDEyIEBACiAKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKm9wX3BvaW50czsgLyogY2xvY2svdm9sdGFnZSBwYWlycyAqLwogfTsKLXN0YXRpYyBpbnQgY2VudHJpbm9fdmVyaWZ5X2NwdV9pZChjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMsIGNvbnN0IHN0cnVjdCBjcHVfaWQgKngpOworc3RhdGljIGludCBjZW50cmlub192ZXJpZnlfY3B1X2lkKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYywKKwkJCQkgIGNvbnN0IHN0cnVjdCBjcHVfaWQgKngpOwogCiAvKiBPcGVyYXRpbmcgcG9pbnRzIGZvciBjdXJyZW50IENQVSAqLwotc3RhdGljIHN0cnVjdCBjcHVfbW9kZWwgKmNlbnRyaW5vX21vZGVsW05SX0NQVVNdOwotc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfaWQgKmNlbnRyaW5vX2NwdVtOUl9DUFVTXTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X21vZGVsICosIGNlbnRyaW5vX21vZGVsKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjb25zdCBzdHJ1Y3QgY3B1X2lkICosIGNlbnRyaW5vX2NwdSk7CiAKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgY2VudHJpbm9fZHJpdmVyOwogCkBAIC0yNTUsNyArMjU3LDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2VudHJpbm9fbW9kZWxbcG9saWN5LT5jcHVdID0gbW9kZWw7CisJcGVyX2NwdShjZW50cmlub19tb2RlbCwgcG9saWN5LT5jcHUpID0gbW9kZWw7CiAKIAlkcHJpbnRrKCJmb3VuZCBcIiVzXCI6IG1heCBmcmVxdWVuY3k6ICVka0h6XG4iLAogCSAgICAgICBtb2RlbC0+bW9kZWxfbmFtZSwgbW9kZWwtPm1heF9mcmVxKTsKQEAgLTI2NCwxMCArMjY2LDE0IEBACiB9CiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBjZW50cmlub19jcHVfaW5pdF90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkgeyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSBpbnQgY2VudHJpbm9fY3B1X2luaXRfdGFibGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TUEVFRFNURVBfQ0VOVFJJTk9fVEFCTEUgKi8KIAotc3RhdGljIGludCBjZW50cmlub192ZXJpZnlfY3B1X2lkKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYywgY29uc3Qgc3RydWN0IGNwdV9pZCAqeCkKK3N0YXRpYyBpbnQgY2VudHJpbm9fdmVyaWZ5X2NwdV9pZChjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMsCisJCQkJICBjb25zdCBzdHJ1Y3QgY3B1X2lkICp4KQogewogCWlmICgoYy0+eDg2ID09IHgtPng4NikgJiYKIAkgICAgKGMtPng4Nl9tb2RlbCA9PSB4LT54ODZfbW9kZWwpICYmCkBAIC0yODYsMjMgKzI5MiwyOCBAQAogCSAqIGZvciBjZW50cmlubywgYXMgc29tZSBEU0RUcyBhcmUgYnVnZ3kuCiAJICogSWRlYWxseSwgdGhpcyBjYW4gYmUgZG9uZSB1c2luZyB0aGUgYWNwaV9kYXRhIHN0cnVjdHVyZS4KIAkgKi8KLQlpZiAoKGNlbnRyaW5vX2NwdVtjcHVdID09ICZjcHVfaWRzW0NQVV9CQU5JQVNdKSB8fAotCSAgICAoY2VudHJpbm9fY3B1W2NwdV0gPT0gJmNwdV9pZHNbQ1BVX0RPVEhBTl9BMV0pIHx8Ci0JICAgIChjZW50cmlub19jcHVbY3B1XSA9PSAmY3B1X2lkc1tDUFVfRE9USEFOX0IwXSkpIHsKKwlpZiAoKHBlcl9jcHUoY2VudHJpbm9fY3B1LCBjcHUpID09ICZjcHVfaWRzW0NQVV9CQU5JQVNdKSB8fAorCSAgICAocGVyX2NwdShjZW50cmlub19jcHUsIGNwdSkgPT0gJmNwdV9pZHNbQ1BVX0RPVEhBTl9BMV0pIHx8CisJICAgIChwZXJfY3B1KGNlbnRyaW5vX2NwdSwgY3B1KSA9PSAmY3B1X2lkc1tDUFVfRE9USEFOX0IwXSkpIHsKIAkJbXNyID0gKG1zciA+PiA4KSAmIDB4ZmY7CiAJCXJldHVybiBtc3IgKiAxMDAwMDA7CiAJfQogCi0JaWYgKCghY2VudHJpbm9fbW9kZWxbY3B1XSkgfHwgKCFjZW50cmlub19tb2RlbFtjcHVdLT5vcF9wb2ludHMpKQorCWlmICgoIXBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIGNwdSkpIHx8CisJICAgICghcGVyX2NwdShjZW50cmlub19tb2RlbCwgY3B1KS0+b3BfcG9pbnRzKSkKIAkJcmV0dXJuIDA7CiAKIAltc3IgJj0gMHhmZmZmOwotCWZvciAoaT0wO2NlbnRyaW5vX21vZGVsW2NwdV0tPm9wX3BvaW50c1tpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgewotCQlpZiAobXNyID09IGNlbnRyaW5vX21vZGVsW2NwdV0tPm9wX3BvaW50c1tpXS5pbmRleCkKLQkJCXJldHVybiBjZW50cmlub19tb2RlbFtjcHVdLT5vcF9wb2ludHNbaV0uZnJlcXVlbmN5OworCWZvciAoaSA9IDA7CisJCXBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIGNwdSktPm9wX3BvaW50c1tpXS5mcmVxdWVuY3kKKwkJCQkJCQkhPSBDUFVGUkVRX1RBQkxFX0VORDsKKwkgICAgIGkrKykgeworCQlpZiAobXNyID09IHBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIGNwdSktPm9wX3BvaW50c1tpXS5pbmRleCkKKwkJCXJldHVybiBwZXJfY3B1KGNlbnRyaW5vX21vZGVsLCBjcHUpLT4KKwkJCQkJCQlvcF9wb2ludHNbaV0uZnJlcXVlbmN5OwogCX0KIAlpZiAoZmFpbHNhZmUpCi0JCXJldHVybiBjZW50cmlub19tb2RlbFtjcHVdLT5vcF9wb2ludHNbaS0xXS5mcmVxdWVuY3k7CisJCXJldHVybiBwZXJfY3B1KGNlbnRyaW5vX21vZGVsLCBjcHUpLT5vcF9wb2ludHNbaS0xXS5mcmVxdWVuY3k7CiAJZWxzZQogCQlyZXR1cm4gMDsKIH0KQEAgLTMxMyw5ICszMjQsMTAgQEAKIAl1bnNpZ25lZCBsLCBoOwogCXVuc2lnbmVkIGNsb2NrX2ZyZXE7CiAJY3B1bWFza190IHNhdmVkX21hc2s7CisJY3B1bWFza19vZl9jcHVfcHRyKG5ld19tYXNrLCBjcHUpOwogCiAJc2F2ZWRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbmV3X21hc2spOwogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gY3B1KQogCQlyZXR1cm4gMDsKIApAQCAtMzQ3LDcgKzM1OSw4IEBACiAJaW50IGk7CiAKIAkvKiBPbmx5IEludGVsIG1ha2VzIEVuaGFuY2VkIFNwZWVkc3RlcC1jYXBhYmxlIENQVXMgKi8KLQlpZiAoY3B1LT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgfHwgIWNwdV9oYXMoY3B1LCBYODZfRkVBVFVSRV9FU1QpKQorCWlmIChjcHUtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCB8fAorCSAgICAhY3B1X2hhcyhjcHUsIFg4Nl9GRUFUVVJFX0VTVCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGNwdV9oYXMoY3B1LCBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpKQpAQCAtMzYxLDkgKzM3NCw5IEBACiAJCQlicmVhazsKIAogCWlmIChpICE9IE5fSURTKQotCQljZW50cmlub19jcHVbcG9saWN5LT5jcHVdID0gJmNwdV9pZHNbaV07CisJCXBlcl9jcHUoY2VudHJpbm9fY3B1LCBwb2xpY3ktPmNwdSkgPSAmY3B1X2lkc1tpXTsKIAotCWlmICghY2VudHJpbm9fY3B1W3BvbGljeS0+Y3B1XSkgeworCWlmICghcGVyX2NwdShjZW50cmlub19jcHUsIHBvbGljeS0+Y3B1KSkgewogCQlkcHJpbnRrKCJmb3VuZCB1bnN1cHBvcnRlZCBDUFUgd2l0aCAiCiAJCSJFbmhhbmNlZCBTcGVlZFN0ZXA6IHNlbmQgL3Byb2MvY3B1aW5mbyB0byAiCiAJCU1BSU5UQUlORVIgIlxuIik7CkBAIC0zODYsMjMgKzM5OSwyNiBAQAogCQkvKiBjaGVjayB0byBzZWUgaWYgaXQgc3R1Y2sgKi8KIAkJcmRtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGwsIGgpOwogCQlpZiAoIShsICYgKDE8PDE2KSkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJjb3VsZG4ndCBlbmFibGUgRW5oYW5jZWQgU3BlZWRTdGVwXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJImNvdWxkbid0IGVuYWJsZSBFbmhhbmNlZCBTcGVlZFN0ZXBcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKIAlmcmVxID0gZ2V0X2N1cl9mcmVxKHBvbGljeS0+Y3B1KTsKLQotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDsgLyogMTB1UyB0cmFuc2l0aW9uIGxhdGVuY3kgKi8KKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAwMDA7CisJCQkJCQkvKiAxMHVTIHRyYW5zaXRpb24gbGF0ZW5jeSAqLwogCXBvbGljeS0+Y3VyID0gZnJlcTsKIAogCWRwcmludGsoImNlbnRyaW5vX2NwdV9pbml0OiBjdXI9JWRrSHpcbiIsIHBvbGljeS0+Y3VyKTsKIAotCXJldCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBjZW50cmlub19tb2RlbFtwb2xpY3ktPmNwdV0tPm9wX3BvaW50cyk7CisJcmV0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksCisJCXBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIHBvbGljeS0+Y3B1KS0+b3BfcG9pbnRzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gKHJldCk7CiAKLQljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihjZW50cmlub19tb2RlbFtwb2xpY3ktPmNwdV0tPm9wX3BvaW50cywgcG9saWN5LT5jcHUpOworCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKAorCQlwZXJfY3B1KGNlbnRyaW5vX21vZGVsLCBwb2xpY3ktPmNwdSktPm9wX3BvaW50cywgcG9saWN5LT5jcHUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTEsMTIgKzQyNywxMiBAQAogewogCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKIAotCWlmICghY2VudHJpbm9fbW9kZWxbY3B1XSkKKwlpZiAoIXBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIGNwdSkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIoY3B1KTsKIAotCWNlbnRyaW5vX21vZGVsW2NwdV0gPSBOVUxMOworCXBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIGNwdSkgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MzAsMTcgKzQ0NiwyNiBAQAogICovCiBzdGF0aWMgaW50IGNlbnRyaW5vX3ZlcmlmeSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0JcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksIGNlbnRyaW5vX21vZGVsW3BvbGljeS0+Y3B1XS0+b3BfcG9pbnRzKTsKKwlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwKKwkJCXBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIHBvbGljeS0+Y3B1KS0+b3BfcG9pbnRzKTsKIH0KIAogLyoqCiAgKiBjZW50cmlub19zZXRwb2xpY3kgLSBzZXQgYSBuZXcgQ1BVRnJlcSBwb2xpY3kKICAqIEBwb2xpY3k6IG5ldyBwb2xpY3kKICAqIEB0YXJnZXRfZnJlcTogdGhlIHRhcmdldCBmcmVxdWVuY3kKLSAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5IChDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQorICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kKKyAqCShDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQogICoKICAqIFNldHMgYSBuZXcgQ1BVRnJlcSBwb2xpY3kuCiAgKi8KK3N0cnVjdCBhbGxtYXNrcyB7CisJY3B1bWFza190CQlvbmxpbmVfcG9saWN5X2NwdXM7CisJY3B1bWFza190CQlzYXZlZF9tYXNrOworCWNwdW1hc2tfdAkJc2V0X21hc2s7CisJY3B1bWFza190CQljb3ZlcmVkX2NwdXM7Cit9OworCiBzdGF0aWMgaW50IGNlbnRyaW5vX3RhcmdldCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKQEAgLTQ0OCw0OCArNDczLDU1IEBACiAJdW5zaWduZWQgaW50ICAgIG5ld3N0YXRlID0gMDsKIAl1bnNpZ25lZCBpbnQJbXNyLCBvbGRtc3IgPSAwLCBoID0gMCwgY3B1ID0gcG9saWN5LT5jcHU7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMJZnJlcXM7Ci0JY3B1bWFza190CQlvbmxpbmVfcG9saWN5X2NwdXM7Ci0JY3B1bWFza190CQlzYXZlZF9tYXNrOwotCWNwdW1hc2tfdAkJc2V0X21hc2s7Ci0JY3B1bWFza190CQljb3ZlcmVkX2NwdXM7CiAJaW50CQkJcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBpbnQJCWosIGssIGZpcnN0X2NwdSwgdG1wOworCUNQVU1BU0tfQUxMT0MoYWxsbWFza3MpOworCUNQVU1BU0tfUFRSKG9ubGluZV9wb2xpY3lfY3B1cywgYWxsbWFza3MpOworCUNQVU1BU0tfUFRSKHNhdmVkX21hc2ssIGFsbG1hc2tzKTsKKwlDUFVNQVNLX1BUUihzZXRfbWFzaywgYWxsbWFza3MpOworCUNQVU1BU0tfUFRSKGNvdmVyZWRfY3B1cywgYWxsbWFza3MpOwogCi0JaWYgKHVubGlrZWx5KGNlbnRyaW5vX21vZGVsW2NwdV0gPT0gTlVMTCkpCi0JCXJldHVybiAtRU5PREVWOworCWlmICh1bmxpa2VseShhbGxtYXNrcyA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAodW5saWtlbHkocGVyX2NwdShjZW50cmlub19tb2RlbCwgY3B1KSA9PSBOVUxMKSkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAodW5saWtlbHkoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwKLQkJCWNlbnRyaW5vX21vZGVsW2NwdV0tPm9wX3BvaW50cywKKwkJCXBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIGNwdSktPm9wX3BvaW50cywKIAkJCXRhcmdldF9mcmVxLAogCQkJcmVsYXRpb24sCiAJCQkmbmV3c3RhdGUpKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJLyogY3B1ZnJlcSBob2xkcyB0aGUgaG90cGx1ZyBsb2NrLCBzbyB3ZSBhcmUgc2FmZSBmcm9tIGhlcmUgb24gKi8KLQljcHVzX2FuZChvbmxpbmVfcG9saWN5X2NwdXMsIGNwdV9vbmxpbmVfbWFwLCBwb2xpY3ktPmNwdXMpOworCWNwdXNfYW5kKCpvbmxpbmVfcG9saWN5X2NwdXMsIGNwdV9vbmxpbmVfbWFwLCBwb2xpY3ktPmNwdXMpOwogI2Vsc2UKLQlvbmxpbmVfcG9saWN5X2NwdXMgPSBwb2xpY3ktPmNwdXM7CisJKm9ubGluZV9wb2xpY3lfY3B1cyA9IHBvbGljeS0+Y3B1czsKICNlbmRpZgogCi0Jc2F2ZWRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKKwkqc2F2ZWRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKIAlmaXJzdF9jcHUgPSAxOwotCWNwdXNfY2xlYXIoY292ZXJlZF9jcHVzKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhqLCBvbmxpbmVfcG9saWN5X2NwdXMpIHsKKwljcHVzX2NsZWFyKCpjb3ZlcmVkX2NwdXMpOworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGosICpvbmxpbmVfcG9saWN5X2NwdXMpIHsKIAkJLyoKIAkJICogU3VwcG9ydCBmb3IgU01QIHN5c3RlbXMuCiAJCSAqIE1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBvbiBDUFUgdGhhdCB3YW50cyB0byBjaGFuZ2UgZnJlcQogCQkgKi8KLQkJY3B1c19jbGVhcihzZXRfbWFzayk7CisJCWNwdXNfY2xlYXIoKnNldF9tYXNrKTsKIAkJaWYgKHBvbGljeS0+c2hhcmVkX3R5cGUgPT0gQ1BVRlJFUV9TSEFSRURfVFlQRV9BTlkpCi0JCQljcHVzX29yKHNldF9tYXNrLCBzZXRfbWFzaywgb25saW5lX3BvbGljeV9jcHVzKTsKKwkJCWNwdXNfb3IoKnNldF9tYXNrLCAqc2V0X21hc2ssICpvbmxpbmVfcG9saWN5X2NwdXMpOwogCQllbHNlCi0JCQljcHVfc2V0KGosIHNldF9tYXNrKTsKKwkJCWNwdV9zZXQoaiwgKnNldF9tYXNrKTsKIAotCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmc2V0X21hc2spOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBzZXRfbWFzayk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwotCQlpZiAodW5saWtlbHkoIWNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIHNldF9tYXNrKSkpIHsKKwkJaWYgKHVubGlrZWx5KCFjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCAqc2V0X21hc2spKSkgewogCQkJZHByaW50aygiY291bGRuJ3QgbGltaXQgdG8gQ1BVcyBpbiB0aGlzIGRvbWFpblxuIik7CiAJCQlyZXR2YWwgPSAtRUFHQUlOOwogCQkJaWYgKGZpcnN0X2NwdSkgewpAQCAtNTAwLDcgKzUzMiw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCW1zciA9IGNlbnRyaW5vX21vZGVsW2NwdV0tPm9wX3BvaW50c1tuZXdzdGF0ZV0uaW5kZXg7CisJCW1zciA9IHBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIGNwdSktPm9wX3BvaW50c1tuZXdzdGF0ZV0uaW5kZXg7CiAKIAkJaWYgKGZpcnN0X2NwdSkgewogCQkJcmRtc3IoTVNSX0lBMzJfUEVSRl9DVEwsIG9sZG1zciwgaCk7CkBAIC01MTcsNyArNTQ5LDcgQEAKIAkJCWRwcmludGsoInRhcmdldD0lZGtIeiBvbGQ9JWQgbmV3PSVkIG1zcj0lMDR4XG4iLAogCQkJCXRhcmdldF9mcmVxLCBmcmVxcy5vbGQsIGZyZXFzLm5ldywgbXNyKTsKIAotCQkJZm9yX2VhY2hfY3B1X21hc2soaywgb25saW5lX3BvbGljeV9jcHVzKSB7CisJCQlmb3JfZWFjaF9jcHVfbWFza19ucihrLCAqb25saW5lX3BvbGljeV9jcHVzKSB7CiAJCQkJZnJlcXMuY3B1ID0gazsKIAkJCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywKIAkJCQkJQ1BVRlJFUV9QUkVDSEFOR0UpOwpAQCAtNTM2LDExICs1NjgsMTEgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJY3B1X3NldChqLCBjb3ZlcmVkX2NwdXMpOworCQljcHVfc2V0KGosICpjb3ZlcmVkX2NwdXMpOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KIAotCWZvcl9lYWNoX2NwdV9tYXNrKGssIG9ubGluZV9wb2xpY3lfY3B1cykgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGssICpvbmxpbmVfcG9saWN5X2NwdXMpIHsKIAkJZnJlcXMuY3B1ID0gazsKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiAJfQpAQCAtNTUzLDEwICs1ODUsMTIgQEAKIAkJICogQmVzdCBlZmZvcnQgdW5kby4uCiAJCSAqLwogCi0JCWlmICghY3B1c19lbXB0eShjb3ZlcmVkX2NwdXMpKSB7Ci0JCQlmb3JfZWFjaF9jcHVfbWFzayhqLCBjb3ZlcmVkX2NwdXMpIHsKLQkJCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LAotCQkJCQkJICAgICAmY3B1bWFza19vZl9jcHUoaikpOworCQlpZiAoIWNwdXNfZW1wdHkoKmNvdmVyZWRfY3B1cykpIHsKKwkJCWNwdW1hc2tfb2ZfY3B1X3B0cl9kZWNsYXJlKG5ld19tYXNrKTsKKworCQkJZm9yX2VhY2hfY3B1X21hc2tfbnIoaiwgKmNvdmVyZWRfY3B1cykgeworCQkJCWNwdW1hc2tfb2ZfY3B1X3B0cl9uZXh0KG5ld19tYXNrLCBqKTsKKwkJCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBuZXdfbWFzayk7CiAJCQkJd3Jtc3IoTVNSX0lBMzJfUEVSRl9DVEwsIG9sZG1zciwgaCk7CiAJCQl9CiAJCX0KQEAgLTU2NCwxOSArNTk4LDIyIEBACiAJCXRtcCA9IGZyZXFzLm5ldzsKIAkJZnJlcXMubmV3ID0gZnJlcXMub2xkOwogCQlmcmVxcy5vbGQgPSB0bXA7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrKGosIG9ubGluZV9wb2xpY3lfY3B1cykgeworCQlmb3JfZWFjaF9jcHVfbWFza19ucihqLCAqb25saW5lX3BvbGljeV9jcHVzKSB7CiAJCQlmcmVxcy5jcHUgPSBqOwogCQkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAkJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogCQl9CiAJfQotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZzYXZlZF9tYXNrKTsKLQlyZXR1cm4gMDsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBzYXZlZF9tYXNrKTsKKwlyZXR2YWwgPSAwOworCWdvdG8gb3V0OwogCiBtaWdyYXRlX2VuZDoKIAlwcmVlbXB0X2VuYWJsZSgpOwotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZzYXZlZF9tYXNrKTsKLQlyZXR1cm4gMDsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBzYXZlZF9tYXNrKTsKK291dDoKKwlDUFVNQVNLX0ZSRUUoYWxsbWFza3MpOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBjZW50cmlub19hdHRyW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwppbmRleCAxYjUwMjQ0Li4yZjM3MjhkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTI0NCw3ICsyNDQsOCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXQodW5zaWduZWQgaW50IGNwdSkKIHsKLQlyZXR1cm4gX3NwZWVkc3RlcF9nZXQoJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCWNwdW1hc2tfb2ZfY3B1X3B0cihuZXdtYXNrLCBjcHUpOworCXJldHVybiBfc3BlZWRzdGVwX2dldChuZXdtYXNrKTsKIH0KIAogLyoqCkBAIC0yNzksNyArMjgwLDcgQEAKIAogCWNwdXNfYWxsb3dlZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIHBvbGljeS0+Y3B1cykgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksIHBvbGljeS0+Y3B1cykgewogCQlmcmVxcy5jcHUgPSBpOwogCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCX0KQEAgLTI5Miw3ICsyOTMsNyBAQAogCS8qIGFsbG93IHRvIGJlIHJ1biBvbiBhbGwgQ1BVcyAqLwogCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVzX2FsbG93ZWQpOwogCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgcG9saWN5LT5jcHVzKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgcG9saWN5LT5jcHVzKSB7CiAJCWZyZXFzLmNwdSA9IGk7CiAJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwppbmRleCA3MDYwOWVmLi5iNzVmMjU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCkBAIC0yMjcsNiArMjI3LDE2IEBACiAJaWYgKGNwdV9oYXNfYnRzKQogCQlkc19pbml0X2ludGVsKGMpOwogCisJLyoKKwkgKiBTZWUgaWYgd2UgaGF2ZSBhIGdvb2QgbG9jYWwgQVBJQyBieSBjaGVja2luZyBmb3IgYnVnZ3kgUGVudGlhLAorCSAqIGkuZS4gYWxsIEIgc3RlcHBpbmdzIGFuZCB0aGUgQzIgc3RlcHBpbmcgb2YgUDU0QyB3aGVuIHVzaW5nIHRoZWlyCisJICogaW50ZWdyYXRlZCBBUElDIChzZWUgMTFBUCBlcnJhdHVtIGluICJQZW50aXVtIFByb2Nlc3NvcgorCSAqIFNwZWNpZmljYXRpb24gVXBkYXRlIikuCisJICovCisJaWYgKGNwdV9oYXNfYXBpYyAmJiAoYy0+eDg2PDw4IHwgYy0+eDg2X21vZGVsPDw0KSA9PSAweDUyMCAmJgorCSAgICAoYy0+eDg2X21hc2sgPCAweDYgfHwgYy0+eDg2X21hc2sgPT0gMHhiKSkKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfMTFBUCk7CisKICNpZmRlZiBDT05GSUdfWDg2X05VTUFRCiAJbnVtYXFfdHNjX2Rpc2FibGUoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggMmM4YWZhZi4uNjUwZDQwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC00ODksNyArNDg5LDcgQEAKIAlpbnQgc2libGluZzsKIAogCXRoaXNfbGVhZiA9IENQVUlENF9JTkZPX0lEWChjcHUsIGluZGV4KTsKLQlmb3JfZWFjaF9jcHVfbWFzayhzaWJsaW5nLCB0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoc2libGluZywgdGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkgewogCQlzaWJsaW5nX2xlYWYgPSBDUFVJRDRfSU5GT19JRFgoc2libGluZywgaW5kZXgpOwkKIAkJY3B1X2NsZWFyKGNwdSwgc2libGluZ19sZWFmLT5zaGFyZWRfY3B1X21hcCk7CiAJfQpAQCAtNTE2LDYgKzUxNiw3IEBACiAJdW5zaWduZWQgbG9uZwkJajsKIAlpbnQJCQlyZXR2YWw7CiAJY3B1bWFza190CQlvbGRtYXNrOworCWNwdW1hc2tfb2ZfY3B1X3B0cihuZXdtYXNrLCBjcHUpOwogCiAJaWYgKG51bV9jYWNoZV9sZWF2ZXMgPT0gMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC01MjYsNyArNTI3LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXJldHZhbCA9IHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKKwlyZXR2YWwgPSBzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBuZXdtYXNrKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKIApAQCAtNzgwLDE1ICs3ODEsMTQgQEAKIAkJCX0KIAkJCWtvYmplY3RfcHV0KHBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSk7CiAJCQljcHVpZDRfY2FjaGVfc3lzZnNfZXhpdChjcHUpOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gcmV0dmFsOwogCQl9CiAJCWtvYmplY3RfdWV2ZW50KCYodGhpc19vYmplY3QtPmtvYmopLCBLT0JKX0FERCk7CiAJfQotCWlmICghcmV0dmFsKQotCQljcHVfc2V0KGNwdSwgY2FjaGVfZGV2X21hcCk7CisJY3B1X3NldChjcHUsIGNhY2hlX2Rldl9tYXApOwogCiAJa29iamVjdF91ZXZlbnQocGVyX2NwdShjYWNoZV9rb2JqZWN0LCBjcHUpLCBLT0JKX0FERCk7Ci0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGNhY2hlX3JlbW92ZV9kZXYoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNfZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYwppbmRleCBjNGE3ZWMzLi42NWEzMzk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYwpAQCAtNTgwLDcgKzU4MCw3IEBACiAJY2hhciBfX3VzZXIgKmJ1ZiA9IHVidWY7CiAJaW50IGksIGVycjsKIAotCWNwdV90c2MgPSBrbWFsbG9jKE5SX0NQVVMgKiBzaXplb2YobG9uZyksIEdGUF9LRVJORUwpOworCWNwdV90c2MgPSBrbWFsbG9jKG5yX2NwdV9pZHMgKiBzaXplb2YobG9uZyksIEdGUF9LRVJORUwpOwogCWlmICghY3B1X3RzYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTc2MiwxMCArNzYyLDE0IEBACiAKIC8qIFdoeSBhcmUgdGhlcmUgbm8gZ2VuZXJpYyBmdW5jdGlvbnMgZm9yIHRoaXM/ICovCiAjZGVmaW5lIEFDQ0VTU09SKG5hbWUsIHZhciwgc3RhcnQpIFwKLQlzdGF0aWMgc3NpemVfdCBzaG93XyAjIyBuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBjaGFyICpidWYpIHsJXAorCXN0YXRpYyBzc2l6ZV90IHNob3dfICMjIG5hbWUoc3RydWN0IHN5c19kZXZpY2UgKnMsCQlcCisJCQkJICAgICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkJCSAgICAgY2hhciAqYnVmKSB7CQkJXAogCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbHhcbiIsICh1bnNpZ25lZCBsb25nKXZhcik7CVwKIAl9CQkJCQkJCQlcCi0Jc3RhdGljIHNzaXplX3Qgc2V0XyAjIyBuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzLGNvbnN0IGNoYXIgKmJ1ZixzaXplX3Qgc2l6KSB7IFwKKwlzdGF0aWMgc3NpemVfdCBzZXRfICMjIG5hbWUoc3RydWN0IHN5c19kZXZpY2UgKnMsCQlcCisJCQkJICAgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAlcCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpeikgewlcCiAJCWNoYXIgKmVuZDsJCQkJCQlcCiAJCXVuc2lnbmVkIGxvbmcgbmV3ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kLCAwKTsJXAogCQlpZiAoZW5kID09IGJ1ZikgcmV0dXJuIC1FSU5WQUw7CQkJCVwKQEAgLTc4NiwxNCArNzkwLDE2IEBACiBBQ0NFU1NPUihiYW5rNGN0bCxiYW5rWzRdLG1jZV9yZXN0YXJ0KCkpCiBBQ0NFU1NPUihiYW5rNWN0bCxiYW5rWzVdLG1jZV9yZXN0YXJ0KCkpCiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfdHJpZ2dlcihzdHJ1Y3Qgc3lzX2RldmljZSAqcywgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190cmlnZ2VyKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCiB7CiAJc3RyY3B5KGJ1ZiwgdHJpZ2dlcik7CiAJc3RyY2F0KGJ1ZiwgIlxuIik7CiAJcmV0dXJuIHN0cmxlbih0cmlnZ2VyKSArIDE7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNldF90cmlnZ2VyKHN0cnVjdCBzeXNfZGV2aWNlICpzLGNvbnN0IGNoYXIgKmJ1ZixzaXplX3Qgc2l6KQorc3RhdGljIHNzaXplX3Qgc2V0X3RyaWdnZXIoc3RydWN0IHN5c19kZXZpY2UgKnMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1ZixzaXplX3Qgc2l6KQogewogCWNoYXIgKnA7CiAJaW50IGxlbjsKQEAgLTgwNiwxMiArODEyLDEyIEBACiB9CiAKIHN0YXRpYyBTWVNERVZfQVRUUih0cmlnZ2VyLCAwNjQ0LCBzaG93X3RyaWdnZXIsIHNldF90cmlnZ2VyKTsKLUFDQ0VTU09SKHRvbGVyYW50LHRvbGVyYW50LCkKK3N0YXRpYyBTWVNERVZfSU5UX0FUVFIodG9sZXJhbnQsIDA2NDQsIHRvbGVyYW50KTsKIEFDQ0VTU09SKGNoZWNrX2ludGVydmFsLGNoZWNrX2ludGVydmFsLG1jZV9yZXN0YXJ0KCkpCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKm1jZV9hdHRyaWJ1dGVzW10gPSB7CiAJJmF0dHJfYmFuazBjdGwsICZhdHRyX2JhbmsxY3RsLCAmYXR0cl9iYW5rMmN0bCwKIAkmYXR0cl9iYW5rM2N0bCwgJmF0dHJfYmFuazRjdGwsICZhdHRyX2Jhbms1Y3RsLAotCSZhdHRyX3RvbGVyYW50LCAmYXR0cl9jaGVja19pbnRlcnZhbCwgJmF0dHJfdHJpZ2dlciwKKwkmYXR0cl90b2xlcmFudC5hdHRyLCAmYXR0cl9jaGVja19pbnRlcnZhbCwgJmF0dHJfdHJpZ2dlciwKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKaW5kZXggN2M5YTgxMy4uODg3MzZjYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYwpAQCAtNTI3LDcgKzUyNyw3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIGItPmNwdXMpIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBiLT5jcHVzKSB7CiAJCWlmIChpID09IGNwdSkKIAkJCWNvbnRpbnVlOwogCkBAIC02MTcsNyArNjE3LDcgQEAKICNlbmRpZgogCiAJLyogcmVtb3ZlIGFsbCBzaWJsaW5nIHN5bWxpbmtzIGJlZm9yZSB1bnJlZ2lzdGVyaW5nICovCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgYi0+Y3B1cykgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksIGItPmNwdXMpIHsKIAkJaWYgKGkgPT0gY3B1KQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3A0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9wNC5jCmluZGV4IGVlZjAwMWEuLjliNjBmY2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3A0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svcDQuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJLyogVGhlIHRlbXBlcmF0dXJlIHRyYW5zaXRpb24gaW50ZXJydXB0IGhhbmRsZXIgc2V0dXAgKi8KIAloID0gVEhFUk1BTF9BUElDX1ZFQ1RPUjsJCS8qIG91ciBkZWxpdmVyeSB2ZWN0b3IgKi8KIAloIHw9IChBUElDX0RNX0ZJWEVEIHwgQVBJQ19MVlRfTUFTS0VEKTsJLyogd2UnbGwgbWFzayB0aWxsIHdlJ3JlIHJlYWR5ICovCi0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRUSE1SLCBoKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgaCk7CiAKIAlyZG1zcihNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQsIGwsIGgpOwogCXdybXNyKE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVCwgbCB8IDB4MDMgLCBoKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogCXdybXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsIHwgKDE8PDMpLCBoKTsKIAogCWwgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVFRITVIsIGwgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgbCAmIH5BUElDX0xWVF9NQVNLRUQpOwogCXByaW50ayhLRVJOX0lORk8gIkNQVSVkOiBUaGVybWFsIG1vbml0b3JpbmcgZW5hYmxlZFxuIiwgY3B1KTsKIAogCS8qIGVuYWJsZSB0aGVybWFsIHRocm90dGxlIHByb2Nlc3NpbmcgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IDFmNGNjNDguLmQ1YWUyMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwpAQCAtMzUsNiArMzUsNyBAQAogCiAjZGVmaW5lIGRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHN0YXRpYyBzc2l6ZV90IHRoZXJtX3Rocm90X3N5c2Rldl9zaG93XyMjbmFtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCAgICAgICAgXAorCQkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmKSAgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggNmQ0YmRjMC4uZGU3NDM5ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCiAJZG9fZGl2KGNvdW50LCBubWlfaHopOwogCWlmKGRlc2NyKQotCQlEcHJpbnRrKCJzZXR0aW5nICVzIHRvIC0weCUwOEx4XG4iLCBkZXNjciwgY291bnQpOworCQlwcl9kZWJ1Zygic2V0dGluZyAlcyB0byAtMHglMDhMeFxuIiwgZGVzY3IsIGNvdW50KTsKIAl3cm1zcmwocGVyZmN0cl9tc3IsIDAgLSBjb3VudCk7CiB9CiAKQEAgLTI2MSw3ICsyNjEsNyBAQAogCiAJZG9fZGl2KGNvdW50LCBubWlfaHopOwogCWlmKGRlc2NyKQotCQlEcHJpbnRrKCJzZXR0aW5nICVzIHRvIC0weCUwOEx4XG4iLCBkZXNjciwgY291bnQpOworCQlwcl9kZWJ1Zygic2V0dGluZyAlcyB0byAtMHglMDhMeFxuIiwgZGVzY3IsIGNvdW50KTsKIAl3cm1zcihwZXJmY3RyX21zciwgKHUzMikoLWNvdW50KSwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKaW5kZXggMGQwZDkwNS4uYTI2YzQ4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogewogCWlmICgqcG9zID09IDApCS8qIGp1c3QgaW4gY2FzZSwgY3B1IDAgaXMgbm90IHRoZSBmaXJzdCAqLwogCQkqcG9zID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoKCpwb3MpIDwgTlJfQ1BVUyAmJiBjcHVfb25saW5lKCpwb3MpKQorCWlmICgoKnBvcykgPCBucl9jcHVfaWRzICYmIGNwdV9vbmxpbmUoKnBvcykpCiAJCXJldHVybiAmY3B1X2RhdGEoKnBvcyk7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCmluZGV4IDJkZTVmYTIuLjE0YjExYjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCkBAIC0xNDEsOCArMTQxLDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBkZXZpY2VfY3JlYXRlKGNwdWlkX2NsYXNzLCBOVUxMLCBNS0RFVihDUFVJRF9NQUpPUiwgY3B1KSwKLQkJCSAgICAiY3B1JWQiLCBjcHUpOworCWRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShjcHVpZF9jbGFzcywgTlVMTCwgTUtERVYoQ1BVSURfTUFKT1IsIGNwdSksCisJCQkJICAgIE5VTEwsICJjcHUlZCIsIGNwdSk7CiAJcmV0dXJuIElTX0VSUihkZXYpID8gUFRSX0VSUihkZXYpIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggMjhjMjkxOC4uOWFmODkwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC04NzcsNyArODc3LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0VBUkxZX1JFUyAmJiBlYXJseV9yZXNbaV0uZW5kOyBpKyspCiAJCWNvdW50Kys7CiAKLQlwcmludGsoS0VSTl9JTkZPICIoJWQgZWFybHkgcmVzZXJ2YXRpb25zKSA9PT4gYm9vdG1lbVxuIiwgY291bnQpOworCXByaW50ayhLRVJOX0lORk8gIiglZCBlYXJseSByZXNlcnZhdGlvbnMpID09PiBib290bWVtIFslMDEwbGx4IC0gJTAxMGxseF1cbiIsCisJCQkgY291bnQsIHN0YXJ0LCBlbmQpOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBlYXJseV9yZXMgKnIgPSAmZWFybHlfcmVzW2ldOwogCQlwcmludGsoS0VSTl9JTkZPICIgICMlZCBbJTAxMGxseCAtICUwMTBsbHhdICUxNnMiLCBpLApAQCAtMTI5OCwxMSArMTI5OSw2IEBACiAJfQogfQogCi0vKgotICogTm9uLXN0YW5kYXJkIG1lbW9yeSBzZXR1cCBjYW4gYmUgc3BlY2lmaWVkIHZpYSB0aGlzIHF1aXJrOgotICovCi1jaGFyICogKCphcmNoX21lbW9yeV9zZXR1cF9xdWlyaykodm9pZCk7Ci0KIGNoYXIgKl9faW5pdCBkZWZhdWx0X21hY2hpbmVfc3BlY2lmaWNfbWVtb3J5X3NldHVwKHZvaWQpCiB7CiAJY2hhciAqd2hvID0gIkJJT1MtZTgyMCI7CkBAIC0xMzQzLDggKzEzMzksOCBAQAogCiBjaGFyICpfX2luaXQgX19hdHRyaWJ1dGVfXygod2VhaykpIG1hY2hpbmVfc3BlY2lmaWNfbWVtb3J5X3NldHVwKHZvaWQpCiB7Ci0JaWYgKGFyY2hfbWVtb3J5X3NldHVwX3F1aXJrKSB7Ci0JCWNoYXIgKndobyA9IGFyY2hfbWVtb3J5X3NldHVwX3F1aXJrKCk7CisJaWYgKHg4Nl9xdWlya3MtPmFyY2hfbWVtb3J5X3NldHVwKSB7CisJCWNoYXIgKndobyA9IHg4Nl9xdWlya3MtPmFyY2hfbWVtb3J5X3NldHVwKCk7CiAKIAkJaWYgKHdobykKIAkJCXJldHVybiB3aG87CkBAIC0xMzY3LDI0ICsxMzYzLDMgQEAKIAlwcmludGsoS0VSTl9JTkZPICJCSU9TLXByb3ZpZGVkIHBoeXNpY2FsIFJBTSBtYXA6XG4iKTsKIAllODIwX3ByaW50X21hcCh3aG8pOwogfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotaW50IF9faW5pdCBhcmNoX2dldF9yYW1fcmFuZ2UoaW50IHNsb3QsIHU2NCAqYWRkciwgdTY0ICpzaXplKQotewotCWludCBpOwotCi0JaWYgKHNsb3QgPCAwIHx8IHNsb3QgPj0gZTgyMC5ucl9tYXApCi0JCXJldHVybiAtMTsKLQlmb3IgKGkgPSBzbG90OyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewotCQlpZiAoZTgyMC5tYXBbaV0udHlwZSAhPSBFODIwX1JBTSkKLQkJCWNvbnRpbnVlOwotCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gZTgyMC5ucl9tYXAgfHwgZTgyMC5tYXBbaV0uYWRkciA+IChtYXhfcGZuIDw8IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gLTE7Ci0JKmFkZHIgPSBlODIwLm1hcFtpXS5hZGRyOwotCSpzaXplID0gbWluX3QodTY0LCBlODIwLm1hcFtpXS5zaXplICsgZTgyMC5tYXBbaV0uYWRkciwKLQkJbWF4X3BmbiA8PCBQQUdFX1NISUZUKSAtICphZGRyOwotCXJldHVybiBpICsgMTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jCmluZGV4IGEwZTExYzAuLjQzNTNjZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKQEAgLTE2LDEwICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KLQotI2lmZGVmIENPTkZJR19HQVJUX0lPTU1VCi0jaW5jbHVkZSA8YXNtL2dhcnQuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogCiBzdGF0aWMgdm9pZCBfX2luaXQgZml4X2h5cGVydHJhbnNwb3J0X2NvbmZpZyhpbnQgbnVtLCBpbnQgc2xvdCwgaW50IGZ1bmMpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IDZiYzA3ZjAuLmNkZmQ5NGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC0zMzIsNyArMzMyLDcgQEAKIAlHRVRfVEhSRUFEX0lORk8oJWVicCkKIAogCS8qIE5vdGUsIF9USUZfU0VDQ09NUCBpcyBiaXQgbnVtYmVyIDgsIGFuZCBzbyBpdCBuZWVkcyB0ZXN0dyBhbmQgbm90IHRlc3RiICovCi0JdGVzdHcgJChfVElGX1NZU0NBTExfRU1VfF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NFQ0NPTVB8X1RJRl9TWVNDQUxMX0FVRElUKSxUSV9mbGFncyglZWJwKQorCXRlc3R3ICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglZWJwKQogCWpueiBzeXNjYWxsX3RyYWNlX2VudHJ5CiAJY21wbCAkKG5yX3N5c2NhbGxzKSwgJWVheAogCWphZSBzeXNjYWxsX2JhZHN5cwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJR0VUX1RIUkVBRF9JTkZPKCVlYnApCiAJCQkJCSMgc3lzdGVtIGNhbGwgdHJhY2luZyBpbiBvcGVyYXRpb24gLyBlbXVsYXRpb24KIAkvKiBOb3RlLCBfVElGX1NFQ0NPTVAgaXMgYml0IG51bWJlciA4LCBhbmQgc28gaXQgbmVlZHMgdGVzdHcgYW5kIG5vdCB0ZXN0YiAqLwotCXRlc3R3ICQoX1RJRl9TWVNDQUxMX0VNVXxfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9BVURJVCksVElfZmxhZ3MoJWVicCkKKwl0ZXN0dyAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJWVicCkKIAlqbnogc3lzY2FsbF90cmFjZV9lbnRyeQogCWNtcGwgJChucl9zeXNjYWxscyksICVlYXgKIAlqYWUgc3lzY2FsbF9iYWRzeXMKQEAgLTM4MywxMCArMzgzLDYgQEAKIAkJCQkJIyBzZXR0aW5nIG5lZWRfcmVzY2hlZCBvciBzaWdwZW5kaW5nCiAJCQkJCSMgYmV0d2VlbiBzYW1wbGluZyBhbmQgdGhlIGlyZXQKIAlUUkFDRV9JUlFTX09GRgotCXRlc3RsICRYODZfRUZMQUdTX1RGLFBUX0VGTEFHUyglZXNwKQkjIElmIHRyYWNpbmcgc2V0IHNpbmdsZXN0ZXAgZmxhZyBvbiBleGl0Ci0Janogbm9fc2luZ2xlc3RlcAotCW9ybCAkX1RJRl9TSU5HTEVTVEVQLFRJX2ZsYWdzKCVlYnApCi1ub19zaW5nbGVzdGVwOgogCW1vdmwgVElfZmxhZ3MoJWVicCksICVlY3gKIAl0ZXN0dyAkX1RJRl9BTExXT1JLX01BU0ssICVjeAkjIGN1cnJlbnQtPndvcmsKIAlqbmUgc3lzY2FsbF9leGl0X3dvcmsKQEAgLTUxNCwxMiArNTEwLDggQEAKIHN5c2NhbGxfdHJhY2VfZW50cnk6CiAJbW92bCAkLUVOT1NZUyxQVF9FQVgoJWVzcCkKIAltb3ZsICVlc3AsICVlYXgKLQl4b3JsICVlZHgsJWVkeAotCWNhbGwgZG9fc3lzY2FsbF90cmFjZQotCWNtcGwgJDAsICVlYXgKLQlqbmUgcmVzdW1lX3VzZXJzcGFjZQkJIyByZXQgIT0gMCAtPiBydW5uaW5nIHVuZGVyIFBUUkFDRV9TWVNFTVUsCi0JCQkJCSMgc28gbXVzdCBza2lwIGFjdHVhbCBzeXNjYWxsCi0JbW92bCBQVF9PUklHX0VBWCglZXNwKSwgJWVheAorCWNhbGwgc3lzY2FsbF90cmFjZV9lbnRlcgorCS8qIFdoYXQgaXQgcmV0dXJuZWQgaXMgd2hhdCB3ZSdsbCBhY3R1YWxseSB1c2UuICAqLwogCWNtcGwgJChucl9zeXNjYWxscyksICVlYXgKIAlqbmFlIHN5c2NhbGxfY2FsbAogCWptcCBzeXNjYWxsX2V4aXQKQEAgLTUyOCwxNCArNTIwLDEzIEBACiAJIyBwZXJmb3JtIHN5c2NhbGwgZXhpdCB0cmFjaW5nCiAJQUxJR04KIHN5c2NhbGxfZXhpdF93b3JrOgotCXRlc3RiICQoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NJTkdMRVNURVApLCAlY2wKKwl0ZXN0YiAkX1RJRl9XT1JLX1NZU0NBTExfRVhJVCwgJWNsCiAJanogd29ya19wZW5kaW5nCiAJVFJBQ0VfSVJRU19PTgotCUVOQUJMRV9JTlRFUlJVUFRTKENMQlJfQU5ZKQkjIGNvdWxkIGxldCBkb19zeXNjYWxsX3RyYWNlKCkgY2FsbAorCUVOQUJMRV9JTlRFUlJVUFRTKENMQlJfQU5ZKQkjIGNvdWxkIGxldCBzeXNjYWxsX3RyYWNlX2xlYXZlKCkgY2FsbAogCQkJCQkjIHNjaGVkdWxlKCkgaW5zdGVhZAogCW1vdmwgJWVzcCwgJWVheAotCW1vdmwgJDEsICVlZHgKLQljYWxsIGRvX3N5c2NhbGxfdHJhY2UKKwljYWxsIHN5c2NhbGxfdHJhY2VfbGVhdmUKIAlqbXAgcmVzdW1lX3VzZXJzcGFjZQogRU5EKHN5c2NhbGxfZXhpdF93b3JrKQogCUNGSV9FTkRQUk9DCkBAIC0xMDI0LDYgKzEwMTUsNyBAQAogRU5UUlkoeGVuX3N5c2VudGVyX3RhcmdldCkKIAlSSU5HMF9JTlRfRlJBTUUKIAlhZGRsICQ1KjQsICVlc3AJCS8qIHJlbW92ZSB4ZW4tcHJvdmlkZWQgZnJhbWUgKi8KKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTUqNAogCWptcCBzeXNlbnRlcl9wYXN0X2VzcAogCUNGSV9FTkRQUk9DCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggYWU2M2U1OC4uODQxMGUyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTM0OSw4ICszNDksNyBAQAogCW1vdnEgICVyY3gsUklQLUFSR09GRlNFVCglcnNwKQogCUNGSV9SRUxfT0ZGU0VUIHJpcCxSSVAtQVJHT0ZGU0VUCiAJR0VUX1RIUkVBRF9JTkZPKCVyY3gpCi0JdGVzdGwgJChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfU0VDQ09NUCksIFwKLQkJVElfZmxhZ3MoJXJjeCkKKwl0ZXN0bCAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJXJjeCkKIAlqbnogdHJhY2VzeXMKIAljbXBxICRfX05SX3N5c2NhbGxfbWF4LCVyYXgKIAlqYSBiYWRzeXMKQEAgLTQzMCw3ICs0MjksMTIgQEAKIAlGSVhVUF9UT1BfT0ZfU1RBQ0sgJXJkaQogCW1vdnEgJXJzcCwlcmRpCiAJY2FsbCBzeXNjYWxsX3RyYWNlX2VudGVyCi0JTE9BRF9BUkdTIEFSR09GRlNFVCAgLyogcmVsb2FkIGFyZ3MgZnJvbSBzdGFjayBpbiBjYXNlIHB0cmFjZSBjaGFuZ2VkIGl0ICovCisJLyoKKwkgKiBSZWxvYWQgYXJnIHJlZ2lzdGVycyBmcm9tIHN0YWNrIGluIGNhc2UgcHRyYWNlIGNoYW5nZWQgdGhlbS4KKwkgKiBXZSBkb24ndCByZWxvYWQgJXJheCBiZWNhdXNlIHN5c2NhbGxfdHJhY2VfZW50ZXIoKSByZXR1cm5lZAorCSAqIHRoZSB2YWx1ZSBpdCB3YW50cyB1cyB0byB1c2UgaW4gdGhlIHRhYmxlIGxvb2t1cC4KKwkgKi8KKwlMT0FEX0FSR1MgQVJHT0ZGU0VULCAxCiAJUkVTVE9SRV9SRVNUCiAJY21wcSAkX19OUl9zeXNjYWxsX21heCwlcmF4CiAJamEgICBpbnRfcmV0X2Zyb21fc3lzX2NhbGwJLyogUkFYKCVyc3ApIHNldCB0byAtRU5PU1lTIGFib3ZlICovCkBAIC00ODMsNyArNDg3LDcgQEAKIAlFTkFCTEVfSU5URVJSVVBUUyhDTEJSX05PTkUpCiAJU0FWRV9SRVNUCiAJLyogQ2hlY2sgZm9yIHN5c2NhbGwgZXhpdCB0cmFjZSAqLwkKLQl0ZXN0bCAkKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TSU5HTEVTVEVQKSwlZWR4CisJdGVzdGwgJF9USUZfV09SS19TWVNDQUxMX0VYSVQsJWVkeAogCWp6IGludF9zaWduYWwKIAlwdXNocSAlcmRpCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDgKQEAgLTQ5MSw3ICs0OTUsNyBAQAogCWNhbGwgc3lzY2FsbF90cmFjZV9sZWF2ZQogCXBvcHEgJXJkaQogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtOAotCWFuZGwgJH4oX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NJTkdMRVNURVApLCVlZGkKKwlhbmRsICR+KF9USUZfV09SS19TWVNDQUxMX0VYSVR8X1RJRl9TWVNDQUxMX0VNVSksJWVkaQogCWptcCBpbnRfcmVzdG9yZV9yZXN0CiAJCiBpbnRfc2lnbmFsOgpAQCAtMTE4OSw2ICsxMTkzLDcgQEAKIAkvKiBydW5zIG9uIGV4Y2VwdGlvbiBzdGFjayAqLwogS1BST0JFX0VOVFJZKGRlYnVnKQogIAlJTlRSX0ZSQU1FCisJUEFSQVZJUlRfQURKVVNUX0VYQ0VQVElPTl9GUkFNRQogCXB1c2hxICQwCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDgJCQogCXBhcmFub2lkZW50cnkgZG9fZGVidWcsIERFQlVHX1NUQUNLCkBAIC0xMTk4LDYgKzEyMDMsNyBAQAogCS8qIHJ1bnMgb24gZXhjZXB0aW9uIHN0YWNrICovCQogS1BST0JFX0VOVFJZKG5taSkKIAlJTlRSX0ZSQU1FCisJUEFSQVZJUlRfQURKVVNUX0VYQ0VQVElPTl9GUkFNRQogCXB1c2hxICQtMQogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CiAJcGFyYW5vaWRlbnRyeSBkb19ubWksIDAsIDAKQEAgLTEyMTEsNiArMTIxNyw3IEBACiAKIEtQUk9CRV9FTlRSWShpbnQzKQogIAlJTlRSX0ZSQU1FCisJUEFSQVZJUlRfQURKVVNUX0VYQ0VQVElPTl9GUkFNRQogIAlwdXNocSAkMAogIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAogIAlwYXJhbm9pZGVudHJ5IGRvX2ludDMsIERFQlVHX1NUQUNLCkBAIC0xMjM3LDYgKzEyNDQsNyBAQAogCS8qIHJ1bnMgb24gZXhjZXB0aW9uIHN0YWNrICovCiBFTlRSWShkb3VibGVfZmF1bHQpCiAJWENQVF9GUkFNRQorCVBBUkFWSVJUX0FESlVTVF9FWENFUFRJT05fRlJBTUUKIAlwYXJhbm9pZGVudHJ5IGRvX2RvdWJsZV9mYXVsdAogCWptcCBwYXJhbm9pZF9leGl0MQogCUNGSV9FTkRQUk9DCkBAIC0xMjUzLDYgKzEyNjEsNyBAQAogCS8qIHJ1bnMgb24gZXhjZXB0aW9uIHN0YWNrICovCiBFTlRSWShzdGFja19zZWdtZW50KQogCVhDUFRfRlJBTUUKKwlQQVJBVklSVF9BREpVU1RfRVhDRVBUSU9OX0ZSQU1FCiAJcGFyYW5vaWRlbnRyeSBkb19zdGFja19zZWdtZW50CiAJam1wIHBhcmFub2lkX2V4aXQxCiAJQ0ZJX0VORFBST0MKQEAgLTEyNzgsNiArMTI4Nyw3IEBACiAJLyogcnVucyBvbiBleGNlcHRpb24gc3RhY2sgKi8KIEVOVFJZKG1hY2hpbmVfY2hlY2spCiAJSU5UUl9GUkFNRQorCVBBUkFWSVJUX0FESlVTVF9FWENFUFRJT05fRlJBTUUKIAlwdXNocSAkMAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CQogCXBhcmFub2lkZW50cnkgZG9fbWFjaGluZV9jaGVjawpAQCAtMTMxMiwzICsxMzIyLDEwMyBAQAogCXN5c3JldAogCUNGSV9FTkRQUk9DCiBFTkRQUk9DKGlnbm9yZV9zeXNyZXQpCisKKyNpZmRlZiBDT05GSUdfWEVOCitFTlRSWSh4ZW5faHlwZXJ2aXNvcl9jYWxsYmFjaykKKwl6ZXJvZW50cnkgeGVuX2RvX2h5cGVydmlzb3JfY2FsbGJhY2sKK0VORCh4ZW5faHlwZXJ2aXNvcl9jYWxsYmFjaykKKworLyoKKyMgQSBub3RlIG9uIHRoZSAiY3JpdGljYWwgcmVnaW9uIiBpbiBvdXIgY2FsbGJhY2sgaGFuZGxlci4KKyMgV2Ugd2FudCB0byBhdm9pZCBzdGFja2luZyBjYWxsYmFjayBoYW5kbGVycyBkdWUgdG8gZXZlbnRzIG9jY3VycmluZworIyBkdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGxhc3QgZXZlbnQuIFRvIGRvIHRoaXMsIHdlIGtlZXAgZXZlbnRzIGRpc2FibGVkCisjIHVudGlsIHdlJ3ZlIGRvbmUgYWxsIHByb2Nlc3NpbmcuIEhPV0VWRVIsIHdlIG11c3QgZW5hYmxlIGV2ZW50cyBiZWZvcmUKKyMgcG9wcGluZyB0aGUgc3RhY2sgZnJhbWUgKGNhbid0IGJlIGRvbmUgYXRvbWljYWxseSkgYW5kIHNvIGl0IHdvdWxkIHN0aWxsCisjIGJlIHBvc3NpYmxlIHRvIGdldCBlbm91Z2ggaGFuZGxlciBhY3RpdmF0aW9ucyB0byBvdmVyZmxvdyB0aGUgc3RhY2suCisjIEFsdGhvdWdoIHVubGlrZWx5LCBidWdzIG9mIHRoYXQga2luZCBhcmUgaGFyZCB0byB0cmFjayBkb3duLCBzbyB3ZSdkCisjIGxpa2UgdG8gYXZvaWQgdGhlIHBvc3NpYmlsaXR5LgorIyBTbywgb24gZW50cnkgdG8gdGhlIGhhbmRsZXIgd2UgZGV0ZWN0IHdoZXRoZXIgd2UgaW50ZXJydXB0ZWQgYW4KKyMgZXhpc3RpbmcgYWN0aXZhdGlvbiBpbiBpdHMgY3JpdGljYWwgcmVnaW9uIC0tIGlmIHNvLCB3ZSBwb3AgdGhlIGN1cnJlbnQKKyMgYWN0aXZhdGlvbiBhbmQgcmVzdGFydCB0aGUgaGFuZGxlciB1c2luZyB0aGUgcHJldmlvdXMgb25lLgorKi8KK0VOVFJZKHhlbl9kb19oeXBlcnZpc29yX2NhbGxiYWNrKSAgICMgZG9faHlwZXJ2aXNvcl9jYWxsYmFjayhzdHJ1Y3QgKnB0X3JlZ3MpCisJQ0ZJX1NUQVJUUFJPQworLyogU2luY2Ugd2UgZG9uJ3QgbW9kaWZ5ICVyZGksIGV2dGNobl9kb191cGFsbChzdHJ1Y3QgKnB0X3JlZ3MpIHdpbGwKKyAgIHNlZSB0aGUgY29ycmVjdCBwb2ludGVyIHRvIHRoZSBwdF9yZWdzICovCisJbW92cSAlcmRpLCAlcnNwICAgICAgICAgICAgIyB3ZSBkb24ndCByZXR1cm4sIGFkanVzdCB0aGUgc3RhY2sgZnJhbWUKKwlDRklfRU5EUFJPQworCUNGSV9ERUZBVUxUX1NUQUNLCisxMToJaW5jbCAlZ3M6cGRhX2lycWNvdW50CisJbW92cSAlcnNwLCVyYnAKKwlDRklfREVGX0NGQV9SRUdJU1RFUiByYnAKKwljbW92enEgJWdzOnBkYV9pcnFzdGFja3B0ciwlcnNwCisJcHVzaHEgJXJicAkJCSMgYmFja2xpbmsgZm9yIG9sZCB1bndpbmRlcgorCWNhbGwgeGVuX2V2dGNobl9kb191cGNhbGwKKwlwb3BxICVyc3AKKwlDRklfREVGX0NGQV9SRUdJU1RFUiByc3AKKwlkZWNsICVnczpwZGFfaXJxY291bnQKKwlqbXAgIGVycm9yX2V4aXQKKwlDRklfRU5EUFJPQworRU5EKGRvX2h5cGVydmlzb3JfY2FsbGJhY2spCisKKy8qCisjIEh5cGVydmlzb3IgdXNlcyB0aGlzIGZvciBhcHBsaWNhdGlvbiBmYXVsdHMgd2hpbGUgaXQgZXhlY3V0ZXMuCisjIFdlIGdldCBoZXJlIGZvciB0d28gcmVhc29uczoKKyMgIDEuIEZhdWx0IHdoaWxlIHJlbG9hZGluZyBEUywgRVMsIEZTIG9yIEdTCisjICAyLiBGYXVsdCB3aGlsZSBleGVjdXRpbmcgSVJFVAorIyBDYXRlZ29yeSAxIHdlIGRvIG5vdCBuZWVkIHRvIGZpeCB1cCBhcyBYZW4gaGFzIGFscmVhZHkgcmVsb2FkZWQgYWxsIHNlZ21lbnQKKyMgcmVnaXN0ZXJzIHRoYXQgY291bGQgYmUgcmVsb2FkZWQgYW5kIHplcm9lZCB0aGUgb3RoZXJzLgorIyBDYXRlZ29yeSAyIHdlIGZpeCB1cCBieSBraWxsaW5nIHRoZSBjdXJyZW50IHByb2Nlc3MuIFdlIGNhbm5vdCB1c2UgdGhlCisjIG5vcm1hbCBMaW51eCByZXR1cm4gcGF0aCBpbiB0aGlzIGNhc2UgYmVjYXVzZSBpZiB3ZSB1c2UgdGhlIElSRVQgaHlwZXJjYWxsCisjIHRvIHBvcCB0aGUgc3RhY2sgZnJhbWUgd2UgZW5kIHVwIGluIGFuIGluZmluaXRlIGxvb3Agb2YgZmFpbHNhZmUgY2FsbGJhY2tzLgorIyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIGNhdGVnb3JpZXMgYnkgY29tcGFyaW5nIGVhY2ggc2F2ZWQgc2VnbWVudCByZWdpc3RlcgorIyB3aXRoIGl0cyBjdXJyZW50IGNvbnRlbnRzOiBhbnkgZGlzY3JlcGFuY3kgbWVhbnMgd2UgaW4gY2F0ZWdvcnkgMS4KKyovCitFTlRSWSh4ZW5fZmFpbHNhZmVfY2FsbGJhY2spCisJZnJhbWVzeiA9IChSSVAtMHgzMCkJLyogd29ya2Fyb3VuZCBidWdneSBnYXMgKi8KKwlfZnJhbWUgZnJhbWVzegorCUNGSV9SRUxfT0ZGU0VUIHJjeCwgMAorCUNGSV9SRUxfT0ZGU0VUIHIxMSwgOAorCW1vdncgJWRzLCVjeAorCWNtcHcgJWN4LDB4MTAoJXJzcCkKKwlDRklfUkVNRU1CRVJfU1RBVEUKKwlqbmUgMWYKKwltb3Z3ICVlcywlY3gKKwljbXB3ICVjeCwweDE4KCVyc3ApCisJam5lIDFmCisJbW92dyAlZnMsJWN4CisJY21wdyAlY3gsMHgyMCglcnNwKQorCWpuZSAxZgorCW1vdncgJWdzLCVjeAorCWNtcHcgJWN4LDB4MjgoJXJzcCkKKwlqbmUgMWYKKwkvKiBBbGwgc2VnbWVudHMgbWF0Y2ggdGhlaXIgc2F2ZWQgdmFsdWVzID0+IENhdGVnb3J5IDIgKEJhZCBJUkVUKS4gKi8KKwltb3ZxICglcnNwKSwlcmN4CisJQ0ZJX1JFU1RPUkUgcmN4CisJbW92cSA4KCVyc3ApLCVyMTEKKwlDRklfUkVTVE9SRSByMTEKKwlhZGRxICQweDMwLCVyc3AKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTB4MzAKKwlwdXNocSAkMAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CisJcHVzaHEgJXIxMQorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CisJcHVzaHEgJXJjeAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CisJam1wIGdlbmVyYWxfcHJvdGVjdGlvbgorCUNGSV9SRVNUT1JFX1NUQVRFCisxOgkvKiBTZWdtZW50IG1pc21hdGNoID0+IENhdGVnb3J5IDEgKEJhZCBzZWdtZW50KS4gUmV0cnkgdGhlIElSRVQuICovCisJbW92cSAoJXJzcCksJXJjeAorCUNGSV9SRVNUT1JFIHJjeAorCW1vdnEgOCglcnNwKSwlcjExCisJQ0ZJX1JFU1RPUkUgcjExCisJYWRkcSAkMHgzMCwlcnNwCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC0weDMwCisJcHVzaHEgJDAKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAorCVNBVkVfQUxMCisJam1wIGVycm9yX2V4aXQKKwlDRklfRU5EUFJPQworRU5EKHhlbl9mYWlsc2FmZV9jYWxsYmFjaykKKworI2VuZGlmIC8qIENPTkZJR19YRU4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYwppbmRleCAxYTljNjg4Li43ODY1NDhhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCiAJICovCiAJY3B1ID0gZmlyc3RfY3B1KGNwdW1hc2spOwotCWlmICgodW5zaWduZWQpY3B1IDwgTlJfQ1BVUykKKwlpZiAoKHVuc2lnbmVkKWNwdSA8IG5yX2NwdV9pZHMpCiAJCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwogCWVsc2UKIAkJcmV0dXJuIEJBRF9BUElDSUQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jCmluZGV4IDcxMWYxMWMuLjJjZmNiZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgogI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KKyNpbmNsdWRlIDxhc20vdXYvYmlvcy5oPgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdXZfaHViX2luZm9fcywgX191dl9odWJfaW5mbyk7CiBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKF9fdXZfaHViX2luZm8pOwpAQCAtNDAsNiArNDEsOSBAQAogc2hvcnQgdXZfcG9zc2libGVfYmxhZGVzOwogRVhQT1JUX1NZTUJPTF9HUEwodXZfcG9zc2libGVfYmxhZGVzKTsKIAordW5zaWduZWQgbG9uZyBzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQ7CitFWFBPUlRfU1lNQk9MKHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CisKIC8qIFN0YXJ0IHdpdGggYWxsIElSUXMgcG9pbnRpbmcgdG8gYm9vdCBDUFUuICBJUlEgYmFsYW5jaW5nIHdpbGwgc2hpZnQgdGhlbS4gKi8KIAogc3RhdGljIGNwdW1hc2tfdCB1dl90YXJnZXRfY3B1cyh2b2lkKQpAQCAtOTQsNyArOTgsNyBAQAogewogCXVuc2lnbmVkIGludCBjcHU7CiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7ICsrY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCWlmIChjcHVfaXNzZXQoY3B1LCBtYXNrKSkKIAkJCXV2X3NlbmRfSVBJX29uZShjcHUsIHZlY3Rvcik7CiB9CkBAIC0xMjgsNyArMTMyLDcgQEAKIAkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCiAJICovCiAJY3B1ID0gZmlyc3RfY3B1KGNwdW1hc2spOwotCWlmICgodW5zaWduZWQpY3B1IDwgTlJfQ1BVUykKKwlpZiAoKHVuc2lnbmVkKWNwdSA8IG5yX2NwdV9pZHMpCiAJCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwogCWVsc2UKIAkJcmV0dXJuIEJBRF9BUElDSUQ7CkBAIC0yNzIsNiArMjc2LDIzIEBACiAJCW1hcF9oaWdoKCJNTUlPSCIsIG1taW9oLnMuYmFzZSwgc2hpZnQsIG1hcF91Yyk7CiB9CiAKK3N0YXRpYyBfX2luaXQgdm9pZCB1dl9ydGNfaW5pdCh2b2lkKQoreworCWxvbmcgc3RhdHVzLCB0aWNrc19wZXJfc2VjLCBkcmlmdDsKKworCXN0YXR1cyA9CisJICAgIHg4Nl9iaW9zX2ZyZXFfYmFzZShCSU9TX0ZSRVFfQkFTRV9SRUFMVElNRV9DTE9DSywgJnRpY2tzX3Blcl9zZWMsCisJCQkJCSZkcmlmdCk7CisJaWYgKHN0YXR1cyAhPSAwIHx8IHRpY2tzX3Blcl9zZWMgPCAxMDAwMDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJInVuYWJsZSB0byBkZXRlcm1pbmUgcGxhdGZvcm0gUlRDIGNsb2NrIGZyZXF1ZW5jeSwgIgorCQkJImd1ZXNzaW5nLlxuIik7CisJCS8qIEJJT1MgZ2l2ZXMgd3JvbmcgdmFsdWUgZm9yIGNsb2NrIGZyZXEuIHNvIGd1ZXNzICovCisJCXNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCA9IDEwMDAwMDAwMDAwMDBVTCAvIDMwMDAwVUw7CisJfSBlbHNlCisJCXNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCA9IHRpY2tzX3Blcl9zZWM7Cit9CisKIHN0YXRpYyBfX2luaXQgdm9pZCB1dl9zeXN0ZW1faW5pdCh2b2lkKQogewogCXVuaW9uIHV2aF9zaV9hZGRyX21hcF9jb25maWdfdSBtX25fY29uZmlnOwpAQCAtMzI2LDYgKzM0Nyw4IEBACiAJZ25vZGVfdXBwZXIgPSAoKCh1bnNpZ25lZCBsb25nKW5vZGVfaWQucy5ub2RlX2lkKSAmCiAJCSAgICAgICB+KCgxIDw8IG5fdmFsKSAtIDEpKSA8PCBtX3ZhbDsKIAorCXV2X3J0Y19pbml0KCk7CisKIAlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKIAkJbmlkID0gY3B1X3RvX25vZGUoY3B1KTsKIAkJcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKaW5kZXggYzk3ODE5OC4uMWIzMThlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYwpAQCAtMzksNiArMzksMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgeDg2NjRfcGRhICpfX2NwdV9wZGFbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKICNlbmRpZgogCit2b2lkIF9faW5pdCB4ODZfNjRfaW5pdF9wZGEodm9pZCkKK3sKKwlfY3B1X3BkYSA9IF9fY3B1X3BkYTsKKwljcHVfcGRhKDApID0gJl9ib290X2NwdV9wZGE7CisJcGRhX2luaXQoMCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCB6YXBfaWRlbnRpdHlfbWFwcGluZ3Modm9pZCkKIHsKIAlwZ2RfdCAqcGdkID0gcGdkX29mZnNldF9rKDBVTCk7CkBAIC0xMDIsOSArMTA5LDcgQEAKIAogCWVhcmx5X3ByaW50aygiS2VybmVsIGFsaXZlXG4iKTsKIAotCV9jcHVfcGRhID0gX19jcHVfcGRhOwotCWNwdV9wZGEoMCkgPSAmX2Jvb3RfY3B1X3BkYTsKLQlwZGFfaW5pdCgwKTsKKwl4ODZfNjRfaW5pdF9wZGEoKTsKIAogCWVhcmx5X3ByaW50aygiS2VybmVsIHJlYWxseSBhbGl2ZVxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCmluZGV4IGIwN2FjN2IuLmRiMzI4MGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwpAQCAtNDA3LDYgKzQwNyw3IEBACiAJLyogVGhpcyBtdXN0IG1hdGNoIHRoZSBmaXJzdCBlbnRyeSBpbiBsZXZlbDJfa2VybmVsX3BndCAqLwogCS5xdWFkICAgMHgwMDAwMDAwMDAwMDAwMDAwCiAKKyNpbmNsdWRlICIuLi8uLi94ODYveGVuL3hlbi1oZWFkLlMiCiAJCiAJLnNlY3Rpb24gLmJzcywgImF3IiwgQG5vYml0cwogCS5hbGlnbiBMMV9DQUNIRV9CWVRFUwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzMyLmMKaW5kZXggNTU4YWJmNC4uZGU5YWEwZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY18zMi5jCkBAIC03NTYsNyArNzU2LDcgQEAKIAkvKgogCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgogCSAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSLCBjZmcpOworCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIGNmZyk7CiB9CiAjZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KIApAQCAtMjAzMCw3ICsyMDMwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHY7CiAKIAl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVubWFza19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTIwMzgsNyArMjAzOCw3IEBACiAJdW5zaWduZWQgbG9uZyB2OwogCiAJdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwgdiAmIH5BUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2ICYgfkFQSUNfTFZUX01BU0tFRCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbGFwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtMjE2OCw3ICsyMTY4LDcgQEAKIAkgKiBUaGUgQUVPSSBtb2RlIHdpbGwgZmluaXNoIHRoZW0gaW4gdGhlIDgyNTlBCiAJICogYXV0b21hdGljYWxseS4KIAkgKi8KLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRVhUSU5UKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOwogCWluaXRfODI1OUEoMSk7CiAJdGltZXJfYWNrID0gKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQyAmJiAhQVBJQ19JTlRFR1JBVEVEKHZlcikpOwogCkBAIC0yMTc3LDggKzIxNzcsOSBAQAogCXBpbjIgID0gaW9hcGljX2k4MjU5LnBpbjsKIAlhcGljMiA9IGlvYXBpY19pODI1OS5hcGljOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiLi5USU1FUjogdmVjdG9yPTB4JTAyWCBhcGljMT0lZCBwaW4xPSVkIGFwaWMyPSVkIHBpbjI9JWRcbiIsCi0JCXZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKKwlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggIgorCQkgICAgImFwaWMxPSVkIHBpbjE9JWQgYXBpYzI9JWQgcGluMj0lZFxuIiwKKwkJICAgIHZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKIAogCS8qCiAJICogU29tZSBCSU9TIHdyaXRlcnMgYXJlIGNsdWVsZXNzIGFuZCByZXBvcnQgdGhlIEV4dElOVEEKQEAgLTIyMTYsMTIgKzIyMTcsMTMgQEAKIAkJfQogCQljbGVhcl9JT19BUElDX3BpbihhcGljMSwgcGluMSk7CiAJCWlmICghbm9fcGluMSkKLQkJCXByaW50ayhLRVJOX0VSUiAiLi5NUC1CSU9TIGJ1ZzogIgotCQkJICAgICAgICI4MjU0IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQ1xuIik7CisJCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0VSUiAiLi5NUC1CSU9TIGJ1ZzogIgorCQkJCSAgICAiODI1NCB0aW1lciBub3QgY29ubmVjdGVkIHRvIElPLUFQSUNcbiIpOwogCi0JCXByaW50ayhLRVJOX0lORk8gIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgKElSUTApICIKLQkJICAgICAgICJ0aHJvdWdoIHRoZSA4MjU5QSAuLi4gIik7Ci0JCXByaW50aygiXG4uLi4uLiAoZm91bmQgcGluICVkKSAuLi4iLCBwaW4yKTsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyICIKKwkJCSAgICAiKElSUTApIHRocm91Z2ggdGhlIDgyNTlBIC4uLlxuIik7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTworCQkJICAgICIuLi4uLiAoZm91bmQgYXBpYyAlZCBwaW4gJWQpIC4uLlxuIiwgYXBpYzIsIHBpbjIpOwogCQkvKgogCQkgKiBsZWdhY3kgZGV2aWNlcyBzaG91bGQgYmUgY29ubmVjdGVkIHRvIElPIEFQSUMgIzAKIAkJICovCkBAIC0yMjMwLDcgKzIyMzIsNyBAQAogCQl1bm1hc2tfSU9fQVBJQ19pcnEoMCk7CiAJCWVuYWJsZV84MjU5QV9pcnEoMCk7CiAJCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQkJcHJpbnRrKCJ3b3Jrcy5cbiIpOworCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIHdvcmtzLlxuIik7CiAJCQl0aW1lcl90aHJvdWdoXzgyNTkgPSAxOwogCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewogCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOwpAQCAtMjI0NCw0NCArMjI0Niw0NyBAQAogCQkgKi8KIAkJZGlzYWJsZV84MjU5QV9pcnEoMCk7CiAJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMyLCBwaW4yKTsKLQkJcHJpbnRrKCIgZmFpbGVkLlxuIik7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiBmYWlsZWQuXG4iKTsKIAl9CiAKIAlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInRpbWVyIGRvZXNuJ3Qgd29yayB0aHJvdWdoIHRoZSBJTy1BUElDIC0gZGlzYWJsaW5nIE5NSSBXYXRjaGRvZyFcbiIpOworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX1dBUk5JTkcgInRpbWVyIGRvZXNuJ3Qgd29yayAiCisJCQkgICAgInRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7CiAJCW5taV93YXRjaGRvZyA9IE5NSV9OT05FOwogCX0KIAl0aW1lcl9hY2sgPSAwOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBWaXJ0dWFsIFdpcmUgSVJRLi4uIik7CisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCisJCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBWaXJ0dWFsIFdpcmUgSVJRLi4uXG4iKTsKIAogCWxhcGljX3JlZ2lzdGVyX2ludHIoMCwgdmVjdG9yKTsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIEFQSUNfRE1fRklYRUQgfCB2ZWN0b3IpOwkvKiBGaXhlZCBtb2RlICovCisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRklYRUQgfCB2ZWN0b3IpOwkvKiBGaXhlZCBtb2RlICovCiAJZW5hYmxlXzgyNTlBX2lycSgwKTsKIAogCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlwcmludGsoIiB3b3Jrcy5cbiIpOworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRklYRUQgfCB2ZWN0b3IpOwotCXByaW50aygiIGZhaWxlZC5cbiIpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0ZJWEVEIHwgdmVjdG9yKTsKKwlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZC5cbiIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBFeHRJTlQgSVJRLi4uIik7CisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCisJCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBFeHRJTlQgSVJRLi4uXG4iKTsKIAogCWluaXRfODI1OUEoMCk7CiAJbWFrZV84MjU5QV9pcnEoMCk7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKIAogCXVubG9ja19FeHRJTlRfbG9naWMoKTsKIAogCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlwcmludGsoIiB3b3Jrcy5cbiIpOworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlwcmludGsoIiBmYWlsZWQgOiguXG4iKTsKKwlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZCA6KC5cbiIpOwogCXBhbmljKCJJTy1BUElDICsgdGltZXIgZG9lc24ndCB3b3JrISAgQm9vdCB3aXRoIGFwaWM9ZGVidWcgYW5kIHNlbmQgYSAiCi0JCSJyZXBvcnQuICBUaGVuIHRyeSBib290aW5nIHdpdGggdGhlICdub2FwaWMnIG9wdGlvbiIpOworCQkicmVwb3J0LiAgVGhlbiB0cnkgYm9vdGluZyB3aXRoIHRoZSAnbm9hcGljJyBvcHRpb24uXG4iKTsKIG91dDoKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY182NC5jIGIvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfNjQuYwppbmRleCA2NTEwY2RlLi44MjY5NDM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzY0LmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vYWNwaS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL21zaWRlZi5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnRyYW5zcG9ydC5oPgpAQCAtNzMxLDcgKzczMiw3IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIG1hc2spIHsKIAkJY3B1bWFza190IGRvbWFpbiwgbmV3X21hc2s7CiAJCWludCBuZXdfY3B1OwogCQlpbnQgdmVjdG9yLCBvZmZzZXQ7CkBAIC03NTIsNyArNzUzLDcgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAodmVjdG9yID09IElBMzJfU1lTQ0FMTF9WRUNUT1IpCiAJCQlnb3RvIG5leHQ7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrKG5ld19jcHUsIG5ld19tYXNrKQorCQlmb3JfZWFjaF9jcHVfbWFza19ucihuZXdfY3B1LCBuZXdfbWFzaykKIAkJCWlmIChwZXJfY3B1KHZlY3Rvcl9pcnEsIG5ld19jcHUpW3ZlY3Rvcl0gIT0gLTEpCiAJCQkJZ290byBuZXh0OwogCQkvKiBGb3VuZCBvbmUhICovCkBAIC03NjIsNyArNzYzLDcgQEAKIAkJCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDE7CiAJCQljZmctPm9sZF9kb21haW4gPSBjZmctPmRvbWFpbjsKIAkJfQotCQlmb3JfZWFjaF9jcHVfbWFzayhuZXdfY3B1LCBuZXdfbWFzaykKKwkJZm9yX2VhY2hfY3B1X21hc2tfbnIobmV3X2NwdSwgbmV3X21hc2spCiAJCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIG5ld19jcHUpW3ZlY3Rvcl0gPSBpcnE7CiAJCWNmZy0+dmVjdG9yID0gdmVjdG9yOwogCQljZmctPmRvbWFpbiA9IGRvbWFpbjsKQEAgLTc5NCw3ICs3OTUsNyBAQAogCiAJdmVjdG9yID0gY2ZnLT52ZWN0b3I7CiAJY3B1c19hbmQobWFzaywgY2ZnLT5kb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spCisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBtYXNrKQogCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IC0xOwogCiAJY2ZnLT52ZWN0b3IgPSAwOwpAQCAtMTM3MiwxMiArMTM3MywxMCBAQAogc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSAmaXJxX2NmZ1tpcnFdOwotCWNwdW1hc2tfdCBtYXNrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQltYXNrID0gY3B1bWFza19vZl9jcHUoZmlyc3RfY3B1KGNmZy0+ZG9tYWluKSk7Ci0Jc2VuZF9JUElfbWFzayhtYXNrLCBjZmctPnZlY3Rvcik7CisJc2VuZF9JUElfbWFzayhjcHVtYXNrX29mX2NwdShmaXJzdF9jcHUoY2ZnLT5kb21haW4pKSwgY2ZnLT52ZWN0b3IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMTsKQEAgLTE2OTYsOCArMTY5NSw5IEBACiAJcGluMiAgPSBpb2FwaWNfaTgyNTkucGluOwogCWFwaWMyID0gaW9hcGljX2k4MjU5LmFwaWM7CiAKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsS0VSTl9JTkZPICIuLlRJTUVSOiB2ZWN0b3I9MHglMDJYIGFwaWMxPSVkIHBpbjE9JWQgYXBpYzI9JWQgcGluMj0lZFxuIiwKLQkJY2ZnLT52ZWN0b3IsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7CisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLlRJTUVSOiB2ZWN0b3I9MHglMDJYICIKKwkJICAgICJhcGljMT0lZCBwaW4xPSVkIGFwaWMyPSVkIHBpbjI9JWRcbiIsCisJCSAgICBjZmctPnZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKIAogCS8qCiAJICogU29tZSBCSU9TIHdyaXRlcnMgYXJlIGNsdWVsZXNzIGFuZCByZXBvcnQgdGhlIEV4dElOVEEKQEAgLTE3MzUsMTQgKzE3MzUsMTMgQEAKIAkJfQogCQljbGVhcl9JT19BUElDX3BpbihhcGljMSwgcGluMSk7CiAJCWlmICghbm9fcGluMSkKLQkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsS0VSTl9FUlIgIi4uTVAtQklPUyBidWc6ICIKKwkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fRVJSICIuLk1QLUJJT1MgYnVnOiAiCiAJCQkJICAgICI4MjU0IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQ1xuIik7CiAKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLEtFUk5fSU5GTwotCQkJIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgKElSUTApICIKLQkJCSJ0aHJvdWdoIHRoZSA4MjU5QSAuLi4gIik7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwiXG4uLi4uLiAoZm91bmQgYXBpYyAlZCBwaW4gJWQpIC4uLiIsCi0JCQlhcGljMiwgcGluMik7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciAiCisJCQkgICAgIihJUlEwKSB0aHJvdWdoIHRoZSA4MjU5QSAuLi5cbiIpOworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KKwkJCSAgICAiLi4uLi4gKGZvdW5kIGFwaWMgJWQgcGluICVkKSAuLi5cbiIsIGFwaWMyLCBwaW4yKTsKIAkJLyoKIAkJICogbGVnYWN5IGRldmljZXMgc2hvdWxkIGJlIGNvbm5lY3RlZCB0byBJTyBBUElDICMwCiAJCSAqLwpAQCAtMTc1MSw3ICsxNzUwLDcgQEAKIAkJdW5tYXNrX0lPX0FQSUNfaXJxKDApOwogCQllbmFibGVfODI1OUFfaXJxKDApOwogCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwiIHdvcmtzLlxuIik7CisJCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gd29ya3MuXG4iKTsKIAkJCXRpbWVyX3Rocm91Z2hfODI1OSA9IDE7CiAJCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CiAJCQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7CkBAIC0xNzY1LDI5ICsxNzY0LDMyIEBACiAJCSAqLwogCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKIAkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzIsIHBpbjIpOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIiBmYWlsZWQuXG4iKTsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIGZhaWxlZC5cbiIpOwogCX0KIAogCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidGltZXIgZG9lc24ndCB3b3JrIHRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fV0FSTklORyAidGltZXIgZG9lc24ndCB3b3JrICIKKwkJCSAgICAidGhyb3VnaCB0aGUgSU8tQVBJQyAtIGRpc2FibGluZyBOTUkgV2F0Y2hkb2chXG4iKTsKIAkJbm1pX3dhdGNoZG9nID0gTk1JX05PTkU7CiAJfQogCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8gIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgVmlydHVhbCBXaXJlIElSUS4uLiIpOworCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTworCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgVmlydHVhbCBXaXJlIElSUS4uLlxuIik7CiAKIAlsYXBpY19yZWdpc3Rlcl9pbnRyKDApOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0ZJWEVEIHwgY2ZnLT52ZWN0b3IpOwkvKiBGaXhlZCBtb2RlICovCiAJZW5hYmxlXzgyNTlBX2lycSgwKTsKIAogCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIiB3b3Jrcy5cbiIpOworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlkaXNhYmxlXzgyNTlBX2lycSgwKTsKIAlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9GSVhFRCB8IGNmZy0+dmVjdG9yKTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIiBmYWlsZWQuXG4iKTsKKwlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZC5cbiIpOwogCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8gIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgRXh0SU5UIElSUS4uLiIpOworCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTworCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgRXh0SU5UIElSUS4uLlxuIik7CiAKIAlpbml0XzgyNTlBKDApOwogCW1ha2VfODI1OUFfaXJxKDApOwpAQCAtMTc5NiwxMSArMTc5OCwxMiBAQAogCXVubG9ja19FeHRJTlRfbG9naWMoKTsKIAogCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIiB3b3Jrcy5cbiIpOworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIiBmYWlsZWQgOiguXG4iKTsKLQlwYW5pYygiSU8tQVBJQyArIHRpbWVyIGRvZXNuJ3Qgd29yayEgVHJ5IHVzaW5nIHRoZSAnbm9hcGljJyBrZXJuZWwgcGFyYW1ldGVyXG4iKTsKKwlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZCA6KC5cbiIpOworCXBhbmljKCJJTy1BUElDICsgdGltZXIgZG9lc24ndCB3b3JrISAgQm9vdCB3aXRoIGFwaWM9ZGVidWcgYW5kIHNlbmQgYSAiCisJCSJyZXBvcnQuICBUaGVuIHRyeSBib290aW5nIHdpdGggdGhlICdub2FwaWMnIG9wdGlvbi5cbiIpOwogb3V0OgogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pb19kZWxheS5jIGIvYXJjaC94ODYva2VybmVsL2lvX2RlbGF5LmMKaW5kZXggNTkyMWU1Zi4uMWMzYTY2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2RlbGF5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lvX2RlbGF5LmMKQEAgLTEwMyw2ICsxMDMsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpb19kZWxheV9wYXJhbShjaGFyICpzKQogeworCWlmICghcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoIXN0cmNtcChzLCAiMHg4MCIpKQogCQlpb19kZWxheV90eXBlID0gQ09ORklHX0lPX0RFTEFZX1RZUEVfMFg4MDsKIAllbHNlIGlmICghc3RyY21wKHMsICIweGVkIikpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXBpLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXBpLmMKaW5kZXggOWQ5OGNkYS4uM2Y3NTM3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lwaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcGkuYwpAQCAtNzAsNyArNzAsNyBAQAogCS8qCiAJICogU2VuZCB0aGUgSVBJLiBUaGUgd3JpdGUgdG8gQVBJQ19JQ1IgZmlyZXMgdGhpcyBvZmYuCiAJICovCi0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIGNmZyk7CisJYXBpY193cml0ZShBUElDX0lDUiwgY2ZnKTsKIH0KIAogdm9pZCBzZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCkBAIC05OCw3ICs5OCw3IEBACiAJICogcHJlcGFyZSB0YXJnZXQgY2hpcCBmaWVsZAogCSAqLwogCWNmZyA9IF9fcHJlcGFyZV9JQ1IyKG1hc2spOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwgY2ZnKTsKKwlhcGljX3dyaXRlKEFQSUNfSUNSMiwgY2ZnKTsKIAogCS8qCiAJICogcHJvZ3JhbSB0aGUgSUNSCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkvKgogCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgogCSAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSLCBjZmcpOworCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIGNmZyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKaW5kZXggNDdhNmY2Zi4uMWNmOGMxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwpAQCAtODMsMTEgKzgzLDggQEAKIHN0YXRpYyB1bmlvbiBpcnFfY3R4ICpoYXJkaXJxX2N0eFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHVuaW9uIGlycV9jdHggKnNvZnRpcnFfY3R4W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyBjaGFyIHNvZnRpcnFfc3RhY2tbTlJfQ1BVUyAqIFRIUkVBRF9TSVpFXQotCQlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmJzcy5wYWdlX2FsaWduZWQiKSkpOwotCi1zdGF0aWMgY2hhciBoYXJkaXJxX3N0YWNrW05SX0NQVVMgKiBUSFJFQURfU0laRV0KLQkJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5ic3MucGFnZV9hbGlnbmVkIikpKTsKK3N0YXRpYyBjaGFyIHNvZnRpcnFfc3RhY2tbTlJfQ1BVUyAqIFRIUkVBRF9TSVpFXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CitzdGF0aWMgY2hhciBoYXJkaXJxX3N0YWNrW05SX0NQVVMgKiBUSFJFQURfU0laRV0gX19wYWdlX2FsaWduZWRfYnNzOwogCiBzdGF0aWMgdm9pZCBjYWxsX29uX3N0YWNrKHZvaWQgKmZ1bmMsIHZvaWQgKnN0YWNrKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2tkZWJ1Z2ZzLmMgYi9hcmNoL3g4Ni9rZXJuZWwva2RlYnVnZnMuYwppbmRleCBjMDMyMDU5Li5mMmQ0M2JjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva2RlYnVnZnMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva2RlYnVnZnMuYwpAQCAtMTIsOSArMTIsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKK3N0cnVjdCBkZW50cnkgKmFyY2hfZGVidWdmc19kaXI7CitFWFBPUlRfU1lNQk9MKGFyY2hfZGVidWdmc19kaXIpOworCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JPT1RfUEFSQU1TCiBzdHJ1Y3Qgc2V0dXBfZGF0YV9ub2RlIHsKIAl1NjQgcGFkZHI7CkBAIC0yMDksNiArMjEzLDEwIEBACiB7CiAJaW50IGVycm9yID0gMDsKIAorCWFyY2hfZGVidWdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIng4NiIsIE5VTEwpOworCWlmICghYXJjaF9kZWJ1Z2ZzX2RpcikKKwkJcmV0dXJuIC1FTk9NRU07CisKICNpZmRlZiBDT05GSUdfREVCVUdfQk9PVF9QQVJBTVMKIAllcnJvciA9IGJvb3RfcGFyYW1zX2tkZWJ1Z2ZzX2luaXQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggYjhjNjc0My4uNDNjMDE5ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC04NjAsNyArODYwLDYgQEAKIAogCXJlc3VtZV9leGVjdXRpb24oY3VyLCByZWdzLCBrY2IpOwogCXJlZ3MtPmZsYWdzIHw9IGtjYi0+a3Byb2JlX3NhdmVkX2ZsYWdzOwotCXRyYWNlX2hhcmRpcnFzX2ZpeHVwX2ZsYWdzKHJlZ3MtPmZsYWdzKTsKIAogCWlmICgoa2NiLT5rcHJvYmVfc3RhdHVzICE9IEtQUk9CRV9SRUVOVEVSKSAmJiBjdXItPnBvc3RfaGFuZGxlcikgewogCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTRE9ORTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKaW5kZXggODdlZGYxYy4uZDAyZGVmMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCi12b2lkIF9faW5pdCBrdm1fc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBrdm1fc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKIHsKIAlXQVJOX09OKGt2bV9yZWdpc3Rlcl9jbG9jaygicHJpbWFyeSBjcHUgY2xvY2siKSk7CiAJbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbGR0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbGR0LmMKaW5kZXggYTg0NDk1Ny4uM2ZlZTJhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2xkdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9sZHQuYwpAQCAtNjIsMTIgKzYyLDEyIEBACiAKIAlpZiAocmVsb2FkKSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCQljcHVtYXNrX3QgbWFzazsKKwkJY3B1bWFza19vZl9jcHVfcHRyX2RlY2xhcmUobWFzayk7CiAKIAkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWxvYWRfTERUKHBjKTsKLQkJbWFzayA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCWlmICghY3B1c19lcXVhbChjdXJyZW50LT5tbS0+Y3B1X3ZtX21hc2ssIG1hc2spKQorCQljcHVtYXNrX29mX2NwdV9wdHJfbmV4dChtYXNrLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQlpZiAoIWNwdXNfZXF1YWwoY3VycmVudC0+bW0tPmNwdV92bV9tYXNrLCAqbWFzaykpCiAJCQlzbXBfY2FsbF9mdW5jdGlvbihmbHVzaF9sZHQsIGN1cnJlbnQtPm1tLCAxKTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlLmMKaW5kZXggNTZiOTMzMS4uNjk5NGM3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGUuYwpAQCAtMzg4LDYgKzM4OCw3IEBACiAJdm9pZCAqbmV3X21jID0gTlVMTDsKIAlpbnQgY3B1OwogCWNwdW1hc2tfdCBvbGQ7CisJY3B1bWFza19vZl9jcHVfcHRyX2RlY2xhcmUobmV3bWFzayk7CiAKIAlvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAKQEAgLTQwNCw3ICs0MDUsOCBAQAogCiAJCQlpZiAoIXVjaS0+dmFsaWQpCiAJCQkJY29udGludWU7Ci0JCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSk7CisJCQljcHVtYXNrX29mX2NwdV9wdHJfbmV4dChuZXdtYXNrLCBjcHUpOworCQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbmV3bWFzayk7CiAJCQllcnJvciA9IGdldF9tYWNoaW5nX21pY3JvY29kZShuZXdfbWMsIGNwdSk7CiAJCQlpZiAoZXJyb3IgPCAwKQogCQkJCWdvdG8gb3V0OwpAQCAtNTc0LDYgKzU3Niw3IEBACiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CiAJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKIAljcHVtYXNrX3Qgb2xkOworCWNwdW1hc2tfb2ZfY3B1X3B0cihuZXdtYXNrLCBjcHUpOwogCXVuc2lnbmVkIGludCB2YWxbMl07CiAJaW50IGVyciA9IDA7CiAKQEAgLTU4Miw3ICs1ODUsNyBAQAogCQlyZXR1cm4gMDsKIAogCW9sZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbmV3bWFzayk7CiAKIAkvKiBDaGVjayBpZiB0aGUgbWljcm9jb2RlIHdlIGhhdmUgaW4gbWVtb3J5IG1hdGNoZXMgdGhlIENQVSAqLwogCWlmIChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgfHwgYy0+eDg2IDwgNiB8fApAQCAtNjIwLDExICs2MjMsMTIgQEAKIHN0YXRpYyB2b2lkIG1pY3JvY29kZV9pbml0X2NwdShpbnQgY3B1LCBpbnQgcmVzdW1lKQogewogCWNwdW1hc2tfdCBvbGQ7CisJY3B1bWFza19vZl9jcHVfcHRyKG5ld21hc2ssIGNwdSk7CiAJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKIAogCW9sZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKIAotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBuZXdtYXNrKTsKIAltdXRleF9sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwogCWNvbGxlY3RfY3B1X2luZm8oY3B1KTsKIAlpZiAodWNpLT52YWxpZCAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcgJiYgIXJlc3VtZSkKQEAgLTY0NCw3ICs2NDgsOSBAQAogCW11dGV4X3VubG9jaygmbWljcm9jb2RlX211dGV4KTsKIH0KIAotc3RhdGljIHNzaXplX3QgcmVsb2FkX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KQorc3RhdGljIHNzaXplX3QgcmVsb2FkX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc3opCiB7CiAJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGRldi0+aWQ7CiAJY2hhciAqZW5kOwpAQCAtNjU2LDExICs2NjIsMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHZhbCA9PSAxKSB7CiAJCWNwdW1hc2tfdCBvbGQ7CisJCWNwdW1hc2tfb2ZfY3B1X3B0cihuZXdtYXNrLCBjcHUpOwogCiAJCW9sZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKIAogCQlnZXRfb25saW5lX2NwdXMoKTsKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBuZXdtYXNrKTsKIAogCQltdXRleF9sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwogCQlpZiAodWNpLT52YWxpZCkKQEAgLTY3NCwxNCArNjgxLDE2IEBACiAJcmV0dXJuIHN6OwogfQogCi1zdGF0aWMgc3NpemVfdCB2ZXJzaW9uX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgdmVyc2lvbl9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBkZXYtPmlkOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHgleFxuIiwgdWNpLT5yZXYpOwogfQogCi1zdGF0aWMgc3NpemVfdCBwZl9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHBmX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGRldi0+aWQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tb2R1bGVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9tb2R1bGVfNjQuYwppbmRleCBhODg4ZTY3Li4wZTg2NzY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL21vZHVsZV82NC5jCkBAIC0xNTAsNyArMTUwLDggQEAKICAgICAgICAgICAgICAgICAgICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtb2R1bGUgKm1lKQogewotCWNvbnN0IEVsZl9TaGRyICpzLCAqdGV4dCA9IE5VTEwsICphbHQgPSBOVUxMLCAqbG9ja3MgPSBOVUxMOworCWNvbnN0IEVsZl9TaGRyICpzLCAqdGV4dCA9IE5VTEwsICphbHQgPSBOVUxMLCAqbG9ja3MgPSBOVUxMLAorCQkqcGFyYSA9IE5VTEw7CiAJY2hhciAqc2Vjc3RyaW5ncyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKIAogCWZvciAocyA9IHNlY2hkcnM7IHMgPCBzZWNoZHJzICsgaGRyLT5lX3NobnVtOyBzKyspIHsKQEAgLTE2MCw2ICsxNjEsOCBAQAogCQkJYWx0ID0gczsKIAkJaWYgKCFzdHJjbXAoIi5zbXBfbG9ja3MiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkpCiAJCQlsb2Nrcz0gczsKKwkJaWYgKCFzdHJjbXAoIi5wYXJhaW5zdHJ1Y3Rpb25zIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpKQorCQkJcGFyYSA9IHM7CiAJfQogCiAJaWYgKGFsdCkgewpAQCAtMTc1LDYgKzE3OCwxMSBAQAogCQkJCQkgICAgdHNlZywgdHNlZyArIHRleHQtPnNoX3NpemUpOwogCX0KIAorCWlmIChwYXJhKSB7CisJCXZvaWQgKnBzZWcgPSAodm9pZCAqKXBhcmEtPnNoX2FkZHI7CisJCWFwcGx5X3BhcmF2aXJ0KHBzZWcsIHBzZWcgKyBwYXJhLT5zaF9zaXplKTsKKwl9CisKIAlyZXR1cm4gbW9kdWxlX2J1Z19maW5hbGl6ZShoZHIsIHNlY2hkcnMsIG1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKaW5kZXggM2IyNWU0OS4uNmFlMDA1YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2Jpb3NfZWJkYS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3RyYW1wb2xpbmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAogI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTQ4LDc2ICs0OSw2IEBACiAJcmV0dXJuIHN1bSAmIDB4RkY7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi1pbnQgZm91bmRfbnVtYXE7Ci0vKgotICogSGF2ZSB0byBtYXRjaCB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyaWVzIHRvIG1haW4gdGFibGUgZW50cmllcyBieSBjb3VudGVyCi0gKiBoZW5jZSB0aGUgbXBjX3JlY29yZCB2YXJpYWJsZSAuLi4uIGNhbid0IHNlZSBhIGxlc3MgZGlzZ3VzdGluZyB3YXkgb2YKLSAqIGRvaW5nIHRoaXMgLi4uLgotICovCi1zdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiB7Ci0JdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zX2xlbjsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zX3R5cGU7Ci0JdW5zaWduZWQgY2hhciB0cmFuc19xdWFkOwotCXVuc2lnbmVkIGNoYXIgdHJhbnNfZ2xvYmFsOwotCXVuc2lnbmVkIGNoYXIgdHJhbnNfbG9jYWw7Ci0JdW5zaWduZWQgc2hvcnQgdHJhbnNfcmVzZXJ2ZWQ7Ci19OwotCi0KLXN0YXRpYyBpbnQgbXBjX3JlY29yZDsKLXN0YXRpYyBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb25fdGFibGVbTUFYX01QQ19FTlRSWV0KLSAgICBfX2NwdWluaXRkYXRhOwotCi1zdGF0aWMgaW5saW5lIGludCBnZW5lcmF0ZV9sb2dpY2FsX2FwaWNpZChpbnQgcXVhZCwgaW50IHBoeXNfYXBpY2lkKQotewotCXJldHVybiAocXVhZCA8PCA0KSArIChwaHlzX2FwaWNpZCA/IHBoeXNfYXBpY2lkIDw8IDEgOiAxKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIGludCBtcGNfYXBpY19pZChzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0sCi0JCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb25fcmVjb3JkKQotewotCWludCBxdWFkID0gdHJhbnNsYXRpb25fcmVjb3JkLT50cmFuc19xdWFkOwotCWludCBsb2dpY2FsX2FwaWNpZCA9IGdlbmVyYXRlX2xvZ2ljYWxfYXBpY2lkKHF1YWQsIG0tPm1wY19hcGljaWQpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIlByb2Nlc3NvciAjJWQgJXU6JXUgQVBJQyB2ZXJzaW9uICVkIChxdWFkICVkLCBhcGljICVkKVxuIiwKLQkgICAgICAgbS0+bXBjX2FwaWNpZCwKLQkgICAgICAgKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX0ZBTUlMWV9NQVNLKSA+PiA4LAotCSAgICAgICAobS0+bXBjX2NwdWZlYXR1cmUgJiBDUFVfTU9ERUxfTUFTSykgPj4gNCwKLQkgICAgICAgbS0+bXBjX2FwaWN2ZXIsIHF1YWQsIGxvZ2ljYWxfYXBpY2lkKTsKLQlyZXR1cm4gbG9naWNhbF9hcGljaWQ7Ci19Ci0KLWludCBtcF9idXNfaWRfdG9fbm9kZVtNQVhfTVBfQlVTU0VTXTsKLQotaW50IG1wX2J1c19pZF90b19sb2NhbFtNQVhfTVBfQlVTU0VTXTsKLQotc3RhdGljIHZvaWQgbXBjX29lbV9idXNfaW5mbyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIGNoYXIgKm5hbWUsCi0Jc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uKQotewotCWludCBxdWFkID0gdHJhbnNsYXRpb24tPnRyYW5zX3F1YWQ7Ci0JaW50IGxvY2FsID0gdHJhbnNsYXRpb24tPnRyYW5zX2xvY2FsOwotCi0JbXBfYnVzX2lkX3RvX25vZGVbbS0+bXBjX2J1c2lkXSA9IHF1YWQ7Ci0JbXBfYnVzX2lkX3RvX2xvY2FsW20tPm1wY19idXNpZF0gPSBsb2NhbDsKLQlwcmludGsoS0VSTl9JTkZPICJCdXMgIyVkIGlzICVzIChub2RlICVkKVxuIiwKLQkgICAgICAgbS0+bXBjX2J1c2lkLCBuYW1lLCBxdWFkKTsKLX0KLQotaW50IHF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkIFtOUl9DUFVTLzRdWzRdOwotc3RhdGljIHZvaWQgbXBjX29lbV9wY2lfYnVzKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSwKLQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pCi17Ci0JaW50IHF1YWQgPSB0cmFuc2xhdGlvbi0+dHJhbnNfcXVhZDsKLQlpbnQgbG9jYWwgPSB0cmFuc2xhdGlvbi0+dHJhbnNfbG9jYWw7Ci0KLQlxdWFkX2xvY2FsX3RvX21wX2J1c19pZFtxdWFkXVtsb2NhbF0gPSBtLT5tcGNfYnVzaWQ7Ci19Ci0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgTVBfcHJvY2Vzc29yX2luZm8oc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptKQogewogCWludCBhcGljaWQ7CkBAIC0xMjcsMTQgKzU4LDEyIEBACiAJCWRpc2FibGVkX2NwdXMrKzsKIAkJcmV0dXJuOwogCX0KLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi0JaWYgKGZvdW5kX251bWFxKQotCQlhcGljaWQgPSBtcGNfYXBpY19pZChtLCB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSk7CisKKwlpZiAoeDg2X3F1aXJrcy0+bXBjX2FwaWNfaWQpCisJCWFwaWNpZCA9IHg4Nl9xdWlya3MtPm1wY19hcGljX2lkKG0pOwogCWVsc2UKIAkJYXBpY2lkID0gbS0+bXBjX2FwaWNpZDsKLSNlbHNlCi0JYXBpY2lkID0gbS0+bXBjX2FwaWNpZDsKLSNlbmRpZgorCiAJaWYgKG0tPm1wY19jcHVmbGFnICYgQ1BVX0JPT1RQUk9DRVNTT1IpIHsKIAkJYm9vdHVwX2NwdSA9ICIgKEJvb3R1cC1DUFUpIjsKIAkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gbS0+bXBjX2FwaWNpZDsKQEAgLTE1MSwxMiArODAsMTAgQEAKIAltZW1jcHkoc3RyLCBtLT5tcGNfYnVzdHlwZSwgNik7CiAJc3RyWzZdID0gMDsKIAotI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLQlpZiAoZm91bmRfbnVtYXEpCi0JCW1wY19vZW1fYnVzX2luZm8obSwgc3RyLCB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSk7Ci0jZWxzZQotCXByaW50ayhLRVJOX0lORk8gIkJ1cyAjJWQgaXMgJXNcbiIsIG0tPm1wY19idXNpZCwgc3RyKTsKLSNlbmRpZgorCWlmICh4ODZfcXVpcmtzLT5tcGNfb2VtX2J1c19pbmZvKQorCQl4ODZfcXVpcmtzLT5tcGNfb2VtX2J1c19pbmZvKG0sIHN0cik7CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJCdXMgIyVkIGlzICVzXG4iLCBtLT5tcGNfYnVzaWQsIHN0cik7CiAKICNpZiBNQVhfTVBfQlVTU0VTIDwgMjU2CiAJaWYgKG0tPm1wY19idXNpZCA+PSBNQVhfTVBfQlVTU0VTKSB7CkBAIC0xNzMsMTAgKzEwMCw5IEBACiAJCW1wX2J1c19pZF90b190eXBlW20tPm1wY19idXNpZF0gPSBNUF9CVVNfSVNBOwogI2VuZGlmCiAJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgQlVTVFlQRV9QQ0ksIHNpemVvZihCVVNUWVBFX1BDSSkgLSAxKSA9PSAwKSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQotCQlpZiAoZm91bmRfbnVtYXEpCi0JCQltcGNfb2VtX3BjaV9idXMobSwgdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0pOwotI2VuZGlmCisJCWlmICh4ODZfcXVpcmtzLT5tcGNfb2VtX3BjaV9idXMpCisJCQl4ODZfcXVpcmtzLT5tcGNfb2VtX3BjaV9idXMobSk7CisKIAkJY2xlYXJfYml0KG0tPm1wY19idXNpZCwgbXBfYnVzX25vdF9wY2kpOwogI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQgKENPTkZJR19NQ0EpCiAJCW1wX2J1c19pZF90b190eXBlW20tPm1wY19idXNpZF0gPSBNUF9CVVNfUENJOwpAQCAtMzE2LDgzICsyNDIsNiBAQAogCQltLT5tcGNfc3JjYnVzaXJxLCBtLT5tcGNfZGVzdGFwaWMsIG0tPm1wY19kZXN0YXBpY2xpbnQpOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQotc3RhdGljIHZvaWQgX19pbml0IE1QX3RyYW5zbGF0aW9uX2luZm8oc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKm0pCi17Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiVHJhbnNsYXRpb246IHJlY29yZCAlZCwgdHlwZSAlZCwgcXVhZCAlZCwgZ2xvYmFsICVkLCBsb2NhbCAlZFxuIiwKLQkgICAgICAgbXBjX3JlY29yZCwgbS0+dHJhbnNfdHlwZSwgbS0+dHJhbnNfcXVhZCwgbS0+dHJhbnNfZ2xvYmFsLAotCSAgICAgICBtLT50cmFuc19sb2NhbCk7Ci0KLQlpZiAobXBjX3JlY29yZCA+PSBNQVhfTVBDX0VOVFJZKQotCQlwcmludGsoS0VSTl9FUlIgIk1BWF9NUENfRU5UUlkgZXhjZWVkZWQhXG4iKTsKLQllbHNlCi0JCXRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdID0gbTsJLyogc3Rhc2ggdGhpcyBmb3IgbGF0ZXIgKi8KLQlpZiAobS0+dHJhbnNfcXVhZCA8IE1BWF9OVU1OT0RFUyAmJiAhbm9kZV9vbmxpbmUobS0+dHJhbnNfcXVhZCkpCi0JCW5vZGVfc2V0X29ubGluZShtLT50cmFuc19xdWFkKTsKLX0KLQotLyoKLSAqIFJlYWQvcGFyc2UgdGhlIE1QQyBvZW0gdGFibGVzCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0IHNtcF9yZWFkX21wY19vZW0oc3RydWN0IG1wX2NvbmZpZ19vZW10YWJsZSAqb2VtdGFibGUsCi0JCQkJICAgIHVuc2lnbmVkIHNob3J0IG9lbXNpemUpCi17Ci0JaW50IGNvdW50ID0gc2l6ZW9mKCpvZW10YWJsZSk7CS8qIHRoZSBoZWFkZXIgc2l6ZSAqLwotCXVuc2lnbmVkIGNoYXIgKm9lbXB0ciA9ICgodW5zaWduZWQgY2hhciAqKW9lbXRhYmxlKSArIGNvdW50OwotCi0JbXBjX3JlY29yZCA9IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgYW4gT0VNIE1QQyB0YWJsZSBhdCAlOHAgLSBwYXJzaW5nIGl0IC4uLiBcbiIsCi0JICAgICAgIG9lbXRhYmxlKTsKLQlpZiAobWVtY21wKG9lbXRhYmxlLT5vZW1fc2lnbmF0dXJlLCBNUENfT0VNX1NJR05BVFVSRSwgNCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIlNNUCBtcGMgb2VtdGFibGU6IGJhZCBzaWduYXR1cmUgWyVjJWMlYyVjXSFcbiIsCi0JCSAgICAgICBvZW10YWJsZS0+b2VtX3NpZ25hdHVyZVswXSwgb2VtdGFibGUtPm9lbV9zaWduYXR1cmVbMV0sCi0JCSAgICAgICBvZW10YWJsZS0+b2VtX3NpZ25hdHVyZVsyXSwgb2VtdGFibGUtPm9lbV9zaWduYXR1cmVbM10pOwotCQlyZXR1cm47Ci0JfQotCWlmIChtcGZfY2hlY2tzdW0oKHVuc2lnbmVkIGNoYXIgKilvZW10YWJsZSwgb2VtdGFibGUtPm9lbV9sZW5ndGgpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNNUCBvZW0gbXB0YWJsZTogY2hlY2tzdW0gZXJyb3IhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQl3aGlsZSAoY291bnQgPCBvZW10YWJsZS0+b2VtX2xlbmd0aCkgewotCQlzd2l0Y2ggKCpvZW1wdHIpIHsKLQkJY2FzZSBNUF9UUkFOU0xBVElPTjoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqbSA9Ci0JCQkJICAgIChzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqKW9lbXB0cjsKLQkJCQlNUF90cmFuc2xhdGlvbl9pbmZvKG0pOwotCQkJCW9lbXB0ciArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJKyttcGNfcmVjb3JkOwotCQkJCWJyZWFrOwotCQkJfQotCQlkZWZhdWx0OgotCQkJewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIlVucmVjb2duaXNlZCBPRU0gdGFibGUgZW50cnkgdHlwZSEgLSAlZFxuIiwKLQkJCQkgICAgICAgKGludCkqb2VtcHRyKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgbnVtYXFfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKLQkJCQkgY2hhciAqcHJvZHVjdGlkKQotewotCWlmIChzdHJuY21wKG9lbSwgIklCTSBOVU1BIiwgOCkpCi0JCXByaW50aygiV2FybmluZyEgIE5vdCBhIE5VTUEtUSBzeXN0ZW0hXG4iKTsKLQllbHNlCi0JCWZvdW5kX251bWFxID0gMTsKLQotCWlmIChtcGMtPm1wY19vZW1wdHIpCi0JCXNtcF9yZWFkX21wY19vZW0oKHN0cnVjdCBtcF9jb25maWdfb2VtdGFibGUgKiltcGMtPm1wY19vZW1wdHIsCi0JCQkJIG1wYy0+bXBjX29lbXNpemUpOwotfQotI2VuZGlmIC8qIENPTkZJR19YODZfTlVNQVEgKi8KLQogLyoKICAqIFJlYWQvcGFyc2UgdGhlIE1QQwogICovCkBAIC00NTcsNyArMzA2LDYgQEAKIAl9IGVsc2UKIAkJbXBzX29lbV9jaGVjayhtcGMsIG9lbSwgc3RyKTsKICNlbmRpZgotCiAJLyogc2F2ZSB0aGUgbG9jYWwgQVBJQyBhZGRyZXNzLCBpdCBtaWdodCBiZSBub24tZGVmYXVsdCAqLwogCWlmICghYWNwaV9sYXBpYykKIAkJbXBfbGFwaWNfYWRkciA9IG1wYy0+bXBjX2xhcGljOwpAQCAtNDY1LDEyICszMTMsMTcgQEAKIAlpZiAoZWFybHkpCiAJCXJldHVybiAxOwogCisJaWYgKG1wYy0+bXBjX29lbXB0ciAmJiB4ODZfcXVpcmtzLT5zbXBfcmVhZF9tcGNfb2VtKSB7CisJCXN0cnVjdCBtcF9jb25maWdfb2VtdGFibGUgKm9lbV90YWJsZSA9IChzdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlICopKHVuc2lnbmVkIGxvbmcpbXBjLT5tcGNfb2VtcHRyOworCQl4ODZfcXVpcmtzLT5zbXBfcmVhZF9tcGNfb2VtKG9lbV90YWJsZSwgbXBjLT5tcGNfb2Vtc2l6ZSk7CisJfQorCiAJLyoKIAkgKiAgICAgIE5vdyBwcm9jZXNzIHRoZSBjb25maWd1cmF0aW9uIGJsb2Nrcy4KIAkgKi8KLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi0JbXBjX3JlY29yZCA9IDA7Ci0jZW5kaWYKKwlpZiAoeDg2X3F1aXJrcy0+bXBjX3JlY29yZCkKKwkJKng4Nl9xdWlya3MtPm1wY19yZWNvcmQgPSAwOworCiAJd2hpbGUgKGNvdW50IDwgbXBjLT5tcGNfbGVuZ3RoKSB7CiAJCXN3aXRjaCAoKm1wdCkgewogCQljYXNlIE1QX1BST0NFU1NPUjoKQEAgLTUzNiw5ICszODksOCBAQAogCQkJY291bnQgPSBtcGMtPm1wY19sZW5ndGg7CiAJCQlicmVhazsKIAkJfQotI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLQkJKyttcGNfcmVjb3JkOwotI2VuZGlmCisJCWlmICh4ODZfcXVpcmtzLT5tcGNfcmVjb3JkKQorCQkJKCp4ODZfcXVpcmtzLT5tcGNfcmVjb3JkKSsrOwogCX0KIAogI2lmZGVmIENPTkZJR19YODZfR0VORVJJQ0FSQ0gKQEAgLTcyNiwyMCArNTc4LDE0IEBACiBzdGF0aWMgc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGZfZm91bmQ7CiAKIC8qCi0gKiBNYWNoaW5lIHNwZWNpZmljIHF1aXJrIGZvciBmaW5kaW5nIHRoZSBTTVAgY29uZmlnIGJlZm9yZSBvdGhlciBzZXR1cAotICogYWN0aXZpdGllcyBkZXN0cm95IHRoZSB0YWJsZToKLSAqLwotaW50ICgqbWFjaF9nZXRfc21wX2NvbmZpZ19xdWlyaykodW5zaWduZWQgaW50IGVhcmx5KTsKLQotLyoKICAqIFNjYW4gdGhlIG1lbW9yeSBibG9ja3MgZm9yIGFuIFNNUCBjb25maWd1cmF0aW9uIGJsb2NrLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgX19nZXRfc21wX2NvbmZpZyh1bnNpZ25lZCBpbnQgZWFybHkpCiB7CiAJc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGYgPSBtcGZfZm91bmQ7CiAKLQlpZiAobWFjaF9nZXRfc21wX2NvbmZpZ19xdWlyaykgewotCQlpZiAobWFjaF9nZXRfc21wX2NvbmZpZ19xdWlyayhlYXJseSkpCisJaWYgKHg4Nl9xdWlya3MtPm1hY2hfZ2V0X3NtcF9jb25maWcpIHsKKwkJaWYgKHg4Nl9xdWlya3MtPm1hY2hfZ2V0X3NtcF9jb25maWcoZWFybHkpKQogCQkJcmV0dXJuOwogCX0KIAlpZiAoYWNwaV9sYXBpYyAmJiBlYXJseSkKQEAgLTg5OSwxNCArNzQ1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCAoKm1hY2hfZmluZF9zbXBfY29uZmlnX3F1aXJrKSh1bnNpZ25lZCBpbnQgcmVzZXJ2ZSk7Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBfX2ZpbmRfc21wX2NvbmZpZyh1bnNpZ25lZCBpbnQgcmVzZXJ2ZSkKIHsKIAl1bnNpZ25lZCBpbnQgYWRkcmVzczsKIAotCWlmIChtYWNoX2ZpbmRfc21wX2NvbmZpZ19xdWlyaykgewotCQlpZiAobWFjaF9maW5kX3NtcF9jb25maWdfcXVpcmsocmVzZXJ2ZSkpCisJaWYgKHg4Nl9xdWlya3MtPm1hY2hfZmluZF9zbXBfY29uZmlnKSB7CisJCWlmICh4ODZfcXVpcmtzLT5tYWNoX2ZpbmRfc21wX2NvbmZpZyhyZXNlcnZlKSkKIAkJCXJldHVybjsKIAl9CiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwppbmRleCBhMTUzYjM5Li45ZmQ4MDk1NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21zci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwpAQCAtMTQ5LDggKzE0OSw4IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0JZGV2ID0gZGV2aWNlX2NyZWF0ZShtc3JfY2xhc3MsIE5VTEwsIE1LREVWKE1TUl9NQUpPUiwgY3B1KSwKLQkJCSAgICAibXNyJWQiLCBjcHUpOworCWRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShtc3JfY2xhc3MsIE5VTEwsIE1LREVWKE1TUl9NQUpPUiwgY3B1KSwKKwkJCQkgICAgTlVMTCwgIm1zciVkIiwgY3B1KTsKIAlyZXR1cm4gSVNfRVJSKGRldikgPyBQVFJfRVJSKGRldikgOiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbm1pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbm1pLmMKaW5kZXggZWMwMjRiMy4uYWM2ZDUxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL25taS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ubWkuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAKIHN0YXRpYyB2b2lkIF9fYWNwaV9ubWlfZW5hYmxlKHZvaWQgKl9fdW51c2VkKQogewotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwgQVBJQ19ETV9OTUkpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX05NSSk7CiB9CiAKIC8qCkBAIC0yNzcsNyArMjc3LDcgQEAKIAogc3RhdGljIHZvaWQgX19hY3BpX25taV9kaXNhYmxlKHZvaWQgKl9fdW51c2VkKQogewotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwgQVBJQ19ETV9OTUkgfCBBUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX05NSSB8IEFQSUNfTFZUX01BU0tFRCk7CiB9CiAKIC8qCkBAIC00NDgsNiArNDQ4LDEzIEBACiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3Vua25vd25fbm1pX3BhbmljKGNoYXIgKnN0cikKK3sKKwl1bmtub3duX25taV9wYW5pYyA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJ1bmtub3duX25taV9wYW5pYyIsIHNldHVwX3Vua25vd25fbm1pX3BhbmljKTsKKwogc3RhdGljIGludCB1bmtub3duX25taV9wYW5pY19jYWxsYmFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNwdSkKIHsKIAl1bnNpZ25lZCBjaGFyIHJlYXNvbiA9IGdldF9ubWlfcmVhc29uKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbnVtYXFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9udW1hcV8zMi5jCmluZGV4IGEyM2U4MjMuLmI4YzQ1NjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9udW1hcV8zMi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCiAjZGVmaW5lCU1CX1RPX1BBR0VTKGFkZHIpICgoYWRkcikgPDwgKDIwIC0gUEFHRV9TSElGVCkpCiAKQEAgLTcxLDYgKzcyLDE4OCBAQAogCX0KIH0KIAorCit2b2lkIF9faW5pdCBudW1hcV90c2NfZGlzYWJsZSh2b2lkKQoreworCWlmICghZm91bmRfbnVtYXEpCisJCXJldHVybjsKKworCWlmIChudW1fb25saW5lX25vZGVzKCkgPiAxKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJOVU1BUTogZGlzYWJsaW5nIFRTQ1xuIik7CisJCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG51bWFxX3ByZV90aW1lX2luaXQodm9pZCkKK3sKKwludW1hcV90c2NfZGlzYWJsZSgpOworCXJldHVybiAwOworfQorCitpbnQgZm91bmRfbnVtYXE7CisvKgorICogSGF2ZSB0byBtYXRjaCB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyaWVzIHRvIG1haW4gdGFibGUgZW50cmllcyBieSBjb3VudGVyCisgKiBoZW5jZSB0aGUgbXBjX3JlY29yZCB2YXJpYWJsZSAuLi4uIGNhbid0IHNlZSBhIGxlc3MgZGlzZ3VzdGluZyB3YXkgb2YKKyAqIGRvaW5nIHRoaXMgLi4uLgorICovCitzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiB7CisJdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIHRyYW5zX2xlbjsKKwl1bnNpZ25lZCBjaGFyIHRyYW5zX3R5cGU7CisJdW5zaWduZWQgY2hhciB0cmFuc19xdWFkOworCXVuc2lnbmVkIGNoYXIgdHJhbnNfZ2xvYmFsOworCXVuc2lnbmVkIGNoYXIgdHJhbnNfbG9jYWw7CisJdW5zaWduZWQgc2hvcnQgdHJhbnNfcmVzZXJ2ZWQ7Cit9OworCisvKiB4ODZfcXVpcmtzIG1lbWJlciAqLworc3RhdGljIGludCBtcGNfcmVjb3JkOworc3RhdGljIHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbl90YWJsZVtNQVhfTVBDX0VOVFJZXQorICAgIF9fY3B1aW5pdGRhdGE7CisKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyYXRlX2xvZ2ljYWxfYXBpY2lkKGludCBxdWFkLCBpbnQgcGh5c19hcGljaWQpCit7CisJcmV0dXJuIChxdWFkIDw8IDQpICsgKHBoeXNfYXBpY2lkID8gcGh5c19hcGljaWQgPDwgMSA6IDEpOworfQorCisvKiB4ODZfcXVpcmtzIG1lbWJlciAqLworc3RhdGljIGludCBtcGNfYXBpY19pZChzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0pCit7CisJaW50IHF1YWQgPSB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXS0+dHJhbnNfcXVhZDsKKwlpbnQgbG9naWNhbF9hcGljaWQgPSBnZW5lcmF0ZV9sb2dpY2FsX2FwaWNpZChxdWFkLCBtLT5tcGNfYXBpY2lkKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJQcm9jZXNzb3IgIyVkICV1OiV1IEFQSUMgdmVyc2lvbiAlZCAocXVhZCAlZCwgYXBpYyAlZClcbiIsCisJICAgICAgIG0tPm1wY19hcGljaWQsCisJICAgICAgIChtLT5tcGNfY3B1ZmVhdHVyZSAmIENQVV9GQU1JTFlfTUFTSykgPj4gOCwKKwkgICAgICAgKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX01PREVMX01BU0spID4+IDQsCisJICAgICAgIG0tPm1wY19hcGljdmVyLCBxdWFkLCBsb2dpY2FsX2FwaWNpZCk7CisJcmV0dXJuIGxvZ2ljYWxfYXBpY2lkOworfQorCitpbnQgbXBfYnVzX2lkX3RvX25vZGVbTUFYX01QX0JVU1NFU107CisKK2ludCBtcF9idXNfaWRfdG9fbG9jYWxbTUFYX01QX0JVU1NFU107CisKKy8qIHg4Nl9xdWlya3MgbWVtYmVyICovCitzdGF0aWMgdm9pZCBtcGNfb2VtX2J1c19pbmZvKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSwgY2hhciAqbmFtZSkKK3sKKwlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19xdWFkOworCWludCBsb2NhbCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19sb2NhbDsKKworCW1wX2J1c19pZF90b19ub2RlW20tPm1wY19idXNpZF0gPSBxdWFkOworCW1wX2J1c19pZF90b19sb2NhbFttLT5tcGNfYnVzaWRdID0gbG9jYWw7CisJcHJpbnRrKEtFUk5fSU5GTyAiQnVzICMlZCBpcyAlcyAobm9kZSAlZClcbiIsCisJICAgICAgIG0tPm1wY19idXNpZCwgbmFtZSwgcXVhZCk7Cit9CisKK2ludCBxdWFkX2xvY2FsX3RvX21wX2J1c19pZCBbTlJfQ1BVUy80XVs0XTsKKworLyogeDg2X3F1aXJrcyBtZW1iZXIgKi8KK3N0YXRpYyB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0pCit7CisJaW50IHF1YWQgPSB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXS0+dHJhbnNfcXVhZDsKKwlpbnQgbG9jYWwgPSB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXS0+dHJhbnNfbG9jYWw7CisKKwlxdWFkX2xvY2FsX3RvX21wX2J1c19pZFtxdWFkXVtsb2NhbF0gPSBtLT5tcGNfYnVzaWQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBNUF90cmFuc2xhdGlvbl9pbmZvKHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICptKQoreworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgIlRyYW5zbGF0aW9uOiByZWNvcmQgJWQsIHR5cGUgJWQsIHF1YWQgJWQsIGdsb2JhbCAlZCwgbG9jYWwgJWRcbiIsCisJICAgICAgIG1wY19yZWNvcmQsIG0tPnRyYW5zX3R5cGUsIG0tPnRyYW5zX3F1YWQsIG0tPnRyYW5zX2dsb2JhbCwKKwkgICAgICAgbS0+dHJhbnNfbG9jYWwpOworCisJaWYgKG1wY19yZWNvcmQgPj0gTUFYX01QQ19FTlRSWSkKKwkJcHJpbnRrKEtFUk5fRVJSICJNQVhfTVBDX0VOVFJZIGV4Y2VlZGVkIVxuIik7CisJZWxzZQorCQl0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSA9IG07CS8qIHN0YXNoIHRoaXMgZm9yIGxhdGVyICovCisJaWYgKG0tPnRyYW5zX3F1YWQgPCBNQVhfTlVNTk9ERVMgJiYgIW5vZGVfb25saW5lKG0tPnRyYW5zX3F1YWQpKQorCQlub2RlX3NldF9vbmxpbmUobS0+dHJhbnNfcXVhZCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1wZl9jaGVja3N1bSh1bnNpZ25lZCBjaGFyICptcCwgaW50IGxlbikKK3sKKwlpbnQgc3VtID0gMDsKKworCXdoaWxlIChsZW4tLSkKKwkJc3VtICs9ICptcCsrOworCisJcmV0dXJuIHN1bSAmIDB4RkY7Cit9CisKKy8qCisgKiBSZWFkL3BhcnNlIHRoZSBNUEMgb2VtIHRhYmxlcworICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbXBfcmVhZF9tcGNfb2VtKHN0cnVjdCBtcF9jb25maWdfb2VtdGFibGUgKm9lbXRhYmxlLAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBvZW1zaXplKQoreworCWludCBjb3VudCA9IHNpemVvZigqb2VtdGFibGUpOwkvKiB0aGUgaGVhZGVyIHNpemUgKi8KKwl1bnNpZ25lZCBjaGFyICpvZW1wdHIgPSAoKHVuc2lnbmVkIGNoYXIgKilvZW10YWJsZSkgKyBjb3VudDsKKworCW1wY19yZWNvcmQgPSAwOworCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIGFuIE9FTSBNUEMgdGFibGUgYXQgJThwIC0gcGFyc2luZyBpdCAuLi4gXG4iLAorCSAgICAgICBvZW10YWJsZSk7CisJaWYgKG1lbWNtcChvZW10YWJsZS0+b2VtX3NpZ25hdHVyZSwgTVBDX09FTV9TSUdOQVRVUkUsIDQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJTTVAgbXBjIG9lbXRhYmxlOiBiYWQgc2lnbmF0dXJlIFslYyVjJWMlY10hXG4iLAorCQkgICAgICAgb2VtdGFibGUtPm9lbV9zaWduYXR1cmVbMF0sIG9lbXRhYmxlLT5vZW1fc2lnbmF0dXJlWzFdLAorCQkgICAgICAgb2VtdGFibGUtPm9lbV9zaWduYXR1cmVbMl0sIG9lbXRhYmxlLT5vZW1fc2lnbmF0dXJlWzNdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobXBmX2NoZWNrc3VtKCh1bnNpZ25lZCBjaGFyICopb2VtdGFibGUsIG9lbXRhYmxlLT5vZW1fbGVuZ3RoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTTVAgb2VtIG1wdGFibGU6IGNoZWNrc3VtIGVycm9yIVxuIik7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKGNvdW50IDwgb2VtdGFibGUtPm9lbV9sZW5ndGgpIHsKKwkJc3dpdGNoICgqb2VtcHRyKSB7CisJCWNhc2UgTVBfVFJBTlNMQVRJT046CisJCQl7CisJCQkJc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKm0gPQorCQkJCSAgICAoc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKilvZW1wdHI7CisJCQkJTVBfdHJhbnNsYXRpb25faW5mbyhtKTsKKwkJCQlvZW1wdHIgKz0gc2l6ZW9mKCptKTsKKwkJCQljb3VudCArPSBzaXplb2YoKm0pOworCQkJCSsrbXBjX3JlY29yZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJVbnJlY29nbmlzZWQgT0VNIHRhYmxlIGVudHJ5IHR5cGUhIC0gJWRcbiIsCisJCQkJICAgICAgIChpbnQpKm9lbXB0cik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IHg4Nl9xdWlya3MgbnVtYXFfeDg2X3F1aXJrcyBfX2luaXRkYXRhID0geworCS5hcmNoX3ByZV90aW1lX2luaXQJPSBudW1hcV9wcmVfdGltZV9pbml0LAorCS5hcmNoX3RpbWVfaW5pdAkJPSBOVUxMLAorCS5hcmNoX3ByZV9pbnRyX2luaXQJPSBOVUxMLAorCS5hcmNoX21lbW9yeV9zZXR1cAk9IE5VTEwsCisJLmFyY2hfaW50cl9pbml0CQk9IE5VTEwsCisJLmFyY2hfdHJhcF9pbml0CQk9IE5VTEwsCisJLm1hY2hfZ2V0X3NtcF9jb25maWcJPSBOVUxMLAorCS5tYWNoX2ZpbmRfc21wX2NvbmZpZwk9IE5VTEwsCisJLm1wY19yZWNvcmQJCT0gJm1wY19yZWNvcmQsCisJLm1wY19hcGljX2lkCQk9IG1wY19hcGljX2lkLAorCS5tcGNfb2VtX2J1c19pbmZvCT0gbXBjX29lbV9idXNfaW5mbywKKwkubXBjX29lbV9wY2lfYnVzCT0gbXBjX29lbV9wY2lfYnVzLAorCS5zbXBfcmVhZF9tcGNfb2VtCT0gc21wX3JlYWRfbXBjX29lbSwKK307CisKK3ZvaWQgbnVtYXFfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKKwkJCQkgY2hhciAqcHJvZHVjdGlkKQoreworCWlmIChzdHJuY21wKG9lbSwgIklCTSBOVU1BIiwgOCkpCisJCXByaW50aygiV2FybmluZyEgIE5vdCBhIE5VTUEtUSBzeXN0ZW0hXG4iKTsKKwllbHNlCisJCWZvdW5kX251bWFxID0gMTsKK30KKwogc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X2NoZWNrX251bWFxKHZvaWQpCiB7CiAJLyoKQEAgLTgyLDYgKzI2NSw5IEBACiAJICovCiAJaWYgKHNtcF9mb3VuZF9jb25maWcpCiAJCWVhcmx5X2dldF9zbXBfY29uZmlnKCk7CisKKwlpZiAoZm91bmRfbnVtYXEpCisJCXg4Nl9xdWlya3MgPSAmbnVtYXFfeDg2X3F1aXJrczsKIH0KIAogaW50IF9faW5pdCBnZXRfbWVtY2ZnX251bWFxKHZvaWQpCkBAIC05MiwxNCArMjc4LDMgQEAKIAlzbXBfZHVtcF9xY3QoKTsKIAlyZXR1cm4gMTsKIH0KLQotdm9pZCBfX2luaXQgbnVtYXFfdHNjX2Rpc2FibGUodm9pZCkKLXsKLQlpZiAoIWZvdW5kX251bWFxKQotCQlyZXR1cm47Ci0KLQlpZiAobnVtX29ubGluZV9ub2RlcygpID4gMSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiTlVNQVE6IGRpc2FibGluZyBUU0NcbiIpOwotCQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYwppbmRleCBlMGY1NzFkLi45NGRhNGQ1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTIzLDYgKzEyNCw3IEBACiAJCS5wdl9pcnFfb3BzID0gcHZfaXJxX29wcywKIAkJLnB2X2FwaWNfb3BzID0gcHZfYXBpY19vcHMsCiAJCS5wdl9tbXVfb3BzID0gcHZfbW11X29wcywKKwkJLnB2X2xvY2tfb3BzID0gcHZfbG9ja19vcHMsCiAJfTsKIAlyZXR1cm4gKigodm9pZCAqKikmdG1wbCArIHR5cGUpOwogfQpAQCAtMjY2LDYgKzI2OCwxNyBAQAogCXJldHVybiBfX2dldF9jcHVfdmFyKHBhcmF2aXJ0X2xhenlfbW9kZSk7CiB9CiAKK3ZvaWQgX19pbml0IHBhcmF2aXJ0X3VzZV9ieXRlbG9ja3Modm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJcHZfbG9ja19vcHMuc3Bpbl9pc19sb2NrZWQgPSBfX2J5dGVfc3Bpbl9pc19sb2NrZWQ7CisJcHZfbG9ja19vcHMuc3Bpbl9pc19jb250ZW5kZWQgPSBfX2J5dGVfc3Bpbl9pc19jb250ZW5kZWQ7CisJcHZfbG9ja19vcHMuc3Bpbl9sb2NrID0gX19ieXRlX3NwaW5fbG9jazsKKwlwdl9sb2NrX29wcy5zcGluX3RyeWxvY2sgPSBfX2J5dGVfc3Bpbl90cnlsb2NrOworCXB2X2xvY2tfb3BzLnNwaW5fdW5sb2NrID0gX19ieXRlX3NwaW5fdW5sb2NrOworI2VuZGlmCit9CisKIHN0cnVjdCBwdl9pbmZvIHB2X2luZm8gPSB7CiAJLm5hbWUgPSAiYmFyZSBoYXJkd2FyZSIsCiAJLnBhcmF2aXJ0X2VuYWJsZWQgPSAwLApAQCAtMzYxLDcgKzM3NCw2IEBACiBzdHJ1Y3QgcHZfYXBpY19vcHMgcHZfYXBpY19vcHMgPSB7CiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJLmFwaWNfd3JpdGUgPSBuYXRpdmVfYXBpY193cml0ZSwKLQkuYXBpY193cml0ZV9hdG9taWMgPSBuYXRpdmVfYXBpY193cml0ZV9hdG9taWMsCiAJLmFwaWNfcmVhZCA9IG5hdGl2ZV9hcGljX3JlYWQsCiAJLnNldHVwX2Jvb3RfY2xvY2sgPSBzZXR1cF9ib290X0FQSUNfY2xvY2ssCiAJLnNldHVwX3NlY29uZGFyeV9jbG9jayA9IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrLApAQCAtMzczLDYgKzM4NSw5IEBACiAjaWZuZGVmIENPTkZJR19YODZfNjQKIAkucGFnZXRhYmxlX3NldHVwX3N0YXJ0ID0gbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydCwKIAkucGFnZXRhYmxlX3NldHVwX2RvbmUgPSBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUsCisjZWxzZQorCS5wYWdldGFibGVfc2V0dXBfc3RhcnQgPSBwYXJhdmlydF9ub3AsCisJLnBhZ2V0YWJsZV9zZXR1cF9kb25lID0gcGFyYXZpcnRfbm9wLAogI2VuZGlmCiAKIAkucmVhZF9jcjIgPSBuYXRpdmVfcmVhZF9jcjIsCkBAIC00MjgsNyArNDQzLDcgQEAKICNlbmRpZiAvKiBQQUdFVEFCTEVfTEVWRUxTID49IDMgKi8KIAogCS5wdGVfdmFsID0gbmF0aXZlX3B0ZV92YWwsCi0JLnB0ZV9mbGFncyA9IG5hdGl2ZV9wdGVfdmFsLAorCS5wdGVfZmxhZ3MgPSBuYXRpdmVfcHRlX2ZsYWdzLAogCS5wZ2RfdmFsID0gbmF0aXZlX3BnZF92YWwsCiAKIAkubWFrZV9wdGUgPSBuYXRpdmVfbWFrZV9wdGUsCkBAIC00NDYsNiArNDYxLDE4IEBACiAJLnNldF9maXhtYXAgPSBuYXRpdmVfc2V0X2ZpeG1hcCwKIH07CiAKK3N0cnVjdCBwdl9sb2NrX29wcyBwdl9sb2NrX29wcyA9IHsKKyNpZmRlZiBDT05GSUdfU01QCisJLnNwaW5faXNfbG9ja2VkID0gX190aWNrZXRfc3Bpbl9pc19sb2NrZWQsCisJLnNwaW5faXNfY29udGVuZGVkID0gX190aWNrZXRfc3Bpbl9pc19jb250ZW5kZWQsCisKKwkuc3Bpbl9sb2NrID0gX190aWNrZXRfc3Bpbl9sb2NrLAorCS5zcGluX3RyeWxvY2sgPSBfX3RpY2tldF9zcGluX3RyeWxvY2ssCisJLnNwaW5fdW5sb2NrID0gX190aWNrZXRfc3Bpbl91bmxvY2ssCisjZW5kaWYKK307CitFWFBPUlRfU1lNQk9MX0dQTChwdl9sb2NrX29wcyk7CisKIEVYUE9SVF9TWU1CT0xfR1BMKHB2X3RpbWVfb3BzKTsKIEVYUE9SVF9TWU1CT0wgICAgKHB2X2NwdV9vcHMpOwogRVhQT1JUX1NZTUJPTCAgICAocHZfbW11X29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jCmluZGV4IDY5NTliNWMuLjE1MWYyZDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11LWhlbHBlci5oPgotI2luY2x1ZGUgPGFzbS9nYXJ0Lmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2NhbGdhcnkuaD4KICNpbmNsdWRlIDxhc20vdGNlLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1kaXJlY3QuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDg0NjdlYzIuLmNiZWNiMDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtNSwxMiArNSwxMSBAQAogCiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS9nYXJ0Lmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2NhbGdhcnkuaD4KICNpbmNsdWRlIDxhc20vYW1kX2lvbW11Lmg+CiAKLWludCBmb3JiaWRfZGFjIF9fcmVhZF9tb3N0bHk7Ci1FWFBPUlRfU1lNQk9MKGZvcmJpZF9kYWMpOworc3RhdGljIGludCBmb3JiaWRfZGFjIF9fcmVhZF9tb3N0bHk7CiAKIGNvbnN0IHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHM7CiBFWFBPUlRfU1lNQk9MKGRtYV9vcHMpOwpAQCAtMTE0LDIxICsxMTMsMTUgQEAKIAkgKiBUaGUgb3JkZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCBmb3IKIAkgKiBmYWxsLWJhY2svZmFpbC1vdmVyIHJlYXNvbnMKIAkgKi8KLSNpZmRlZiBDT05GSUdfR0FSVF9JT01NVQogCWdhcnRfaW9tbXVfaG9sZV9pbml0KCk7Ci0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19DQUxHQVJZX0lPTU1VCiAJZGV0ZWN0X2NhbGdhcnkoKTsKLSNlbmRpZgogCiAJZGV0ZWN0X2ludGVsX2lvbW11KCk7CiAKIAlhbWRfaW9tbXVfZGV0ZWN0KCk7CiAKLSNpZmRlZiBDT05GSUdfU1dJT1RMQgogCXBjaV9zd2lvdGxiX2luaXQoKTsKLSNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTE4NCw5ICsxNzcsNyBAQAogCQkJc3dpb3RsYiA9IDE7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19HQVJUX0lPTU1VCiAJCWdhcnRfcGFyc2Vfb3B0aW9ucyhwKTsKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NBTEdBUllfSU9NTVUKIAkJaWYgKCFzdHJuY21wKHAsICJjYWxnYXJ5IiwgNykpCkBAIC0zMjMsOCArMzE0LDcgQEAKIHsKICNpZmRlZiBDT05GSUdfUENJCiAJaWYgKG1hc2sgPiAweGZmZmZmZmZmICYmIGZvcmJpZF9kYWMgPiAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBDSTogRGlzYWxsb3dpbmcgREFDIGZvciBkZXZpY2UgJXNcbiIsCi0JCQkJIGRldi0+YnVzX2lkKTsKKwkJZGV2X2luZm8oZGV2LCAiUENJOiBEaXNhbGxvd2luZyBEQUMgZm9yIGRldmljZVxuIik7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZgpAQCAtMzUxLDggKzM0MSw3IEBACiAJICAgdHlwZS4gTm9ybWFsbHkgdGhpcyBkb2Vzbid0IG1ha2UgYW55IGRpZmZlcmVuY2UsIGJ1dCBnaXZlcwogCSAgIG1vcmUgZ2VudGxlIGhhbmRsaW5nIG9mIElPTU1VIG92ZXJmbG93LiAqLwogCWlmIChpb21tdV9zYWNfZm9yY2UgJiYgKG1hc2sgPj0gRE1BXzQwQklUX01BU0spKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3JjZSBTQUMgd2l0aCBtYXNrICVMeFxuIiwKLQkJCQkgZGV2LT5idXNfaWQsIG1hc2spOworCQlkZXZfaW5mbyhkZXYsICJGb3JjZSBTQUMgd2l0aCBtYXNrICVMeFxuIiwgbWFzayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTAwLDE3ICs0ODksMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGNpX2lvbW11X2luaXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfQ0FMR0FSWV9JT01NVQogCWNhbGdhcnlfaW9tbXVfaW5pdCgpOwotI2VuZGlmCiAKIAlpbnRlbF9pb21tdV9pbml0KCk7CiAKIAlhbWRfaW9tbXVfaW5pdCgpOwogCi0jaWZkZWYgQ09ORklHX0dBUlRfSU9NTVUKIAlnYXJ0X2lvbW11X2luaXQoKTsKLSNlbmRpZgogCiAJbm9faW9tbXVfaW5pdCgpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwppbmRleCBjM2ZlNzg0Li5kZjVmMTQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZ2FydC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3N3aW90bGIuaD4KQEAgLTE5Nyw5ICsxOTgsNyBAQAogCSAqIG91dC4gSG9wZWZ1bGx5IG5vIG5ldHdvcmsgZGV2aWNlcyB1c2Ugc2luZ2xlIG1hcHBpbmdzIHRoYXQgYmlnLgogCSAqLwogCi0JcHJpbnRrKEtFUk5fRVJSCi0JCSJQQ0ktRE1BOiBPdXQgb2YgSU9NTVUgc3BhY2UgZm9yICVsdSBieXRlcyBhdCBkZXZpY2UgJXNcbiIsCi0JCXNpemUsIGRldi0+YnVzX2lkKTsKKwlkZXZfZXJyKGRldiwgIlBDSS1ETUE6IE91dCBvZiBJT01NVSBzcGFjZSBmb3IgJWx1IGJ5dGVzXG4iLCBzaXplKTsKIAogCWlmIChzaXplID4gUEFHRV9TSVpFKkVNRVJHRU5DWV9QQUdFUykgewogCQlpZiAoZGlyID09IFBDSV9ETUFfRlJPTURFVklDRSB8fCBkaXIgPT0gUENJX0RNQV9CSURJUkVDVElPTkFMKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jCmluZGV4IGFlYzQzZDUuLjc5MmI5MTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCi0jaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGJfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jCmluZGV4IDgyMjk5Y2QuLjIwZGY4MzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKLSNpbmNsdWRlIDxhc20vZ2FydC5oPgorI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9zd2lvdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCA0ZDYyOWM2Li43ZmM0ZDViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE1LDYgKzE1LDcgQEAKIEVYUE9SVF9TWU1CT0woaWRsZV9ub213YWl0KTsKIAogc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfeHN0YXRlX2NhY2hlcDsKK3N0YXRpYyBpbnQgZm9yY2VfbXdhaXQgX19jcHVpbml0ZGF0YTsKIAogaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYykKIHsKQEAgLTE5OSw2ICsyMDAsNyBAQAogICoKICAqIGlkbGU9bXdhaXQgb3ZlcnJpZGVzIHRoaXMgZGVjaXNpb24gYW5kIGZvcmNlcyB0aGUgdXNhZ2Ugb2YgbXdhaXQuCiAgKi8KK3N0YXRpYyBpbnQgX19jcHVpbml0ZGF0YSBmb3JjZV9td2FpdDsKIAogI2RlZmluZSBNV0FJVF9JTkZPCQkJMHgwNQogI2RlZmluZSBNV0FJVF9FQ1hfRVhURU5ERURfSU5GTwkJMHgwMQpAQCAtMzI2LDYgKzMyOCw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlkbGVfc2V0dXAoY2hhciAqc3RyKQogeworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICghc3RyY21wKHN0ciwgInBvbGwiKSkgewogCQlwcmludGsoInVzaW5nIHBvbGxpbmcgaWRsZSB0aHJlYWRzLlxuIik7CiAJCXBtX2lkbGUgPSBwb2xsX2lkbGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCBhOGU1MzYyLi5lOGE4ZTFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTUzNyw4ICs1MzcsOCBAQAogc3RydWN0IHRhc2tfc3RydWN0ICoKIF9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldl9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfcCkKIHsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqcHJldiA9ICZwcmV2X3AtPnRocmVhZCwKLQkJCQkgKm5leHQgPSAmbmV4dF9wLT50aHJlYWQ7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnByZXYgPSAmcHJldl9wLT50aHJlYWQ7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKm5leHQgPSAmbmV4dF9wLT50aHJlYWQ7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7CiAJdW5zaWduZWQgZnNpbmRleCwgZ3NpbmRleDsKQEAgLTU4NiwzNSArNTg2LDM0IEBACiAKIAkvKiAKIAkgKiBTd2l0Y2ggRlMgYW5kIEdTLgorCSAqCisJICogU2VnbWVudCByZWdpc3RlciAhPSAwIGFsd2F5cyByZXF1aXJlcyBhIHJlbG9hZC4gIEFsc28KKwkgKiByZWxvYWQgd2hlbiBpdCBoYXMgY2hhbmdlZC4gIFdoZW4gcHJldiBwcm9jZXNzIHVzZWQgNjRiaXQKKwkgKiBiYXNlIGFsd2F5cyByZWxvYWQgdG8gYXZvaWQgYW4gaW5mb3JtYXRpb24gbGVhay4KIAkgKi8KLQl7IAotCQkvKiBzZWdtZW50IHJlZ2lzdGVyICE9IDAgYWx3YXlzIHJlcXVpcmVzIGEgcmVsb2FkLiAKLQkJICAgYWxzbyByZWxvYWQgd2hlbiBpdCBoYXMgY2hhbmdlZC4gCi0JCSAgIHdoZW4gcHJldiBwcm9jZXNzIHVzZWQgNjRiaXQgYmFzZSBhbHdheXMgcmVsb2FkCi0JCSAgIHRvIGF2b2lkIGFuIGluZm9ybWF0aW9uIGxlYWsuICovCi0JCWlmICh1bmxpa2VseShmc2luZGV4IHwgbmV4dC0+ZnNpbmRleCB8IHByZXYtPmZzKSkgewotCQkJbG9hZHNlZ21lbnQoZnMsIG5leHQtPmZzaW5kZXgpOwotCQkJLyogY2hlY2sgaWYgdGhlIHVzZXIgdXNlZCBhIHNlbGVjdG9yICE9IDAKLQkgICAgICAgICAgICAgICAgICogaWYgeWVzIGNsZWFyIDY0Yml0IGJhc2UsIHNpbmNlIG92ZXJsb2FkZWQgYmFzZQotICAgICAgICAgICAgICAgICAgICAgICAgICogaXMgYWx3YXlzIG1hcHBlZCB0byB0aGUgTnVsbCBzZWxlY3RvcgotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JCQlpZiAoZnNpbmRleCkKKwlpZiAodW5saWtlbHkoZnNpbmRleCB8IG5leHQtPmZzaW5kZXggfCBwcmV2LT5mcykpIHsKKwkJbG9hZHNlZ21lbnQoZnMsIG5leHQtPmZzaW5kZXgpOworCQkvKiAKKwkJICogQ2hlY2sgaWYgdGhlIHVzZXIgdXNlZCBhIHNlbGVjdG9yICE9IDA7IGlmIHllcworCQkgKiAgY2xlYXIgNjRiaXQgYmFzZSwgc2luY2Ugb3ZlcmxvYWRlZCBiYXNlIGlzIGFsd2F5cworCQkgKiAgbWFwcGVkIHRvIHRoZSBOdWxsIHNlbGVjdG9yCisJCSAqLworCQlpZiAoZnNpbmRleCkKIAkJCXByZXYtPmZzID0gMDsJCQkJCi0JCX0KLQkJLyogd2hlbiBuZXh0IHByb2Nlc3MgaGFzIGEgNjRiaXQgYmFzZSB1c2UgaXQgKi8KLQkJaWYgKG5leHQtPmZzKSAKLQkJCXdybXNybChNU1JfRlNfQkFTRSwgbmV4dC0+ZnMpOyAKLQkJcHJldi0+ZnNpbmRleCA9IGZzaW5kZXg7Ci0KLQkJaWYgKHVubGlrZWx5KGdzaW5kZXggfCBuZXh0LT5nc2luZGV4IHwgcHJldi0+Z3MpKSB7Ci0JCQlsb2FkX2dzX2luZGV4KG5leHQtPmdzaW5kZXgpOwotCQkJaWYgKGdzaW5kZXgpCi0JCQlwcmV2LT5ncyA9IDA7CQkJCQotCQl9Ci0JCWlmIChuZXh0LT5ncykKLQkJCXdybXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIG5leHQtPmdzKTsgCi0JCXByZXYtPmdzaW5kZXggPSBnc2luZGV4OwogCX0KKwkvKiB3aGVuIG5leHQgcHJvY2VzcyBoYXMgYSA2NGJpdCBiYXNlIHVzZSBpdCAqLworCWlmIChuZXh0LT5mcykKKwkJd3Jtc3JsKE1TUl9GU19CQVNFLCBuZXh0LT5mcyk7CisJcHJldi0+ZnNpbmRleCA9IGZzaW5kZXg7CisKKwlpZiAodW5saWtlbHkoZ3NpbmRleCB8IG5leHQtPmdzaW5kZXggfCBwcmV2LT5ncykpIHsKKwkJbG9hZF9nc19pbmRleChuZXh0LT5nc2luZGV4KTsKKwkJaWYgKGdzaW5kZXgpCisJCQlwcmV2LT5ncyA9IDA7CQkJCQorCX0KKwlpZiAobmV4dC0+Z3MpCisJCXdybXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIG5leHQtPmdzKTsKKwlwcmV2LT5nc2luZGV4ID0gZ3NpbmRleDsKIAogCS8qIE11c3QgYmUgYWZ0ZXIgRFMgcmVsb2FkICovCiAJdW5sYXp5X2ZwdShwcmV2X3ApOwpAQCAtNjI3LDcgKzYyNiw4IEBACiAJd3JpdGVfcGRhKHBjdXJyZW50LCBuZXh0X3ApOyAKIAogCXdyaXRlX3BkYShrZXJuZWxzdGFjaywKLQkodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UobmV4dF9wKSArIFRIUkVBRF9TSVpFIC0gUERBX1NUQUNLT0ZGU0VUKTsKKwkJICAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UobmV4dF9wKSArCisJCSAgVEhSRUFEX1NJWkUgLSBQREFfU1RBQ0tPRkZTRVQpOwogI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgogCXdyaXRlX3BkYShzdGFja19jYW5hcnksIG5leHRfcC0+c3RhY2tfY2FuYXJ5KTsKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCmluZGV4IDc3MDQwYjYuLmUzN2RjY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTEzNTcsOCArMTM1Nyw2IEBACiAjZW5kaWYKIH0KIAotI2lmZGVmIENPTkZJR19YODZfMzIKLQogdm9pZCBzZW5kX3NpZ3RyYXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZXJyb3JfY29kZSkKIHsKIAlzdHJ1Y3Qgc2lnaW5mbyBpbmZvOwpAQCAtMTM3Nyw4OSArMTM3NSwxMCBAQAogCWZvcmNlX3NpZ19pbmZvKFNJR1RSQVAsICZpbmZvLCB0c2spOwogfQogCi0vKiBub3RpZmljYXRpb24gb2Ygc3lzdGVtIGNhbGwgZW50cnkvZXhpdAotICogLSB0cmlnZ2VyZWQgYnkgY3VycmVudC0+d29yay5zeXNjYWxsX3RyYWNlCi0gKi8KLWludCBkb19zeXNjYWxsX3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZW50cnlleGl0KQotewotCWludCBpc19zeXNlbXUgPSB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX0VNVSk7Ci0JLyoKLQkgKiBXaXRoIFRJRl9TWVNDQUxMX0VNVSBzZXQgd2Ugd2FudCB0byBpZ25vcmUgVElGX1NJTkdMRVNURVAgZm9yIHN5c2NhbGwKLQkgKiBpbnRlcmNlcHRpb24KLQkgKi8KLQlpbnQgaXNfc2luZ2xlc3RlcCA9ICFpc19zeXNlbXUgJiYgdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCk7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBkbyB0aGUgc2VjdXJlIGNvbXB1dGluZyBjaGVjayBmaXJzdCAqLwotCWlmICghZW50cnlleGl0KQotCQlzZWN1cmVfY29tcHV0aW5nKHJlZ3MtPm9yaWdfYXgpOwotCi0JaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKSB7Ci0JCWlmIChlbnRyeWV4aXQpCi0JCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+YXgpLAotCQkJCQkJcmVncy0+YXgpOwotCQkvKiBEZWJ1ZyB0cmFwcywgd2hlbiB1c2luZyBQVFJBQ0VfU0lOR0xFU1RFUCwgbXVzdCBiZSBzZW50IG9ubHkKLQkJICogb24gdGhlIHN5c2NhbGwgZXhpdCBwYXRoLiBOb3JtYWxseSwgd2hlbiBUSUZfU1lTQ0FMTF9BVURJVCBpcwotCQkgKiBub3QgdXNlZCwgZW50cnkuUyB3aWxsIGNhbGwgdXMgb25seSBvbiBzeXNjYWxsIGV4aXQsIG5vdAotCQkgKiBlbnRyeTsgc28gd2hlbiBUSUZfU1lTQ0FMTF9BVURJVCBpcyB1c2VkIHdlIG11c3QgYXZvaWQKLQkJICogY2FsbGluZyBzZW5kX3NpZ3RyYXAoKSBvbiBzeXNjYWxsIGVudHJ5LgotCQkgKgotCQkgKiBOb3RlIHRoYXQgd2hlbiBQVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVAgaXMgdXNlZCwKLQkJICogaXNfc2luZ2xlc3RlcCBpcyBmYWxzZSwgZGVzcGl0ZSBoaXMgbmFtZSwgc28gd2Ugd2lsbCBzdGlsbCBkbwotCQkgKiB0aGUgY29ycmVjdCB0aGluZy4KLQkJICovCi0JCWVsc2UgaWYgKGlzX3NpbmdsZXN0ZXApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKLQkJZ290byBvdXQ7Ci0KLQkvKiBJZiBhIHByb2Nlc3Mgc3RvcHMgb24gdGhlIDFzdCB0cmFjZXBvaW50IHdpdGggU1lTQ0FMTF9UUkFDRQotCSAqIGFuZCB0aGVuIGlzIHJlc3VtZWQgd2l0aCBTWVNFTVVfU0lOR0xFU1RFUCwgaXQgd2lsbCBjb21lIGluCi0JICogaGVyZS4gV2UgaGF2ZSB0byBjaGVjayB0aGlzIGFuZCByZXR1cm4gKi8KLQlpZiAoaXNfc3lzZW11ICYmIGVudHJ5ZXhpdCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBGYWtlIGEgZGVidWcgdHJhcCAqLwotCWlmIChpc19zaW5nbGVzdGVwKQotCQlzZW5kX3NpZ3RyYXAoY3VycmVudCwgcmVncywgMCk7Ci0KLSAJaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSAmJiAhaXNfc3lzZW11KQotCQlnb3RvIG91dDsKLQotCS8qIHRoZSAweDgwIHByb3ZpZGVzIGEgd2F5IGZvciB0aGUgdHJhY2luZyBwYXJlbnQgdG8gZGlzdGluZ3Vpc2gKLQkgICBiZXR3ZWVuIGEgc3lzY2FsbCBzdG9wIGFuZCBTSUdUUkFQIGRlbGl2ZXJ5ICovCi0JLyogTm90ZSB0aGF0IHRoZSBkZWJ1Z2dlciBjb3VsZCBjaGFuZ2UgdGhlIHJlc3VsdCBvZiB0ZXN0X3RocmVhZF9mbGFnISovCi0JcHRyYWNlX25vdGlmeShTSUdUUkFQIHwgKChjdXJyZW50LT5wdHJhY2UgJiBQVF9UUkFDRVNZU0dPT0QpID8gMHg4MDowKSk7Ci0KLQkvKgotCSAqIHRoaXMgaXNuJ3QgdGhlIHNhbWUgYXMgY29udGludWluZyB3aXRoIGEgc2lnbmFsLCBidXQgaXQgd2lsbCBkbwotCSAqIGZvciBub3JtYWwgdXNlLiAgc3RyYWNlIG9ubHkgY29udGludWVzIHdpdGggYSBzaWduYWwgaWYgdGhlCi0JICogc3RvcHBpbmcgc2lnbmFsIGlzIG5vdCBTSUdUUkFQLiAgLWJybAotCSAqLwotCWlmIChjdXJyZW50LT5leGl0X2NvZGUpIHsKLQkJc2VuZF9zaWcoY3VycmVudC0+ZXhpdF9jb2RlLCBjdXJyZW50LCAxKTsKLQkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKLQl9Ci0JcmV0ID0gaXNfc3lzZW11Owotb3V0OgotCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiAhZW50cnlleGl0KQotCQlhdWRpdF9zeXNjYWxsX2VudHJ5KEFVRElUX0FSQ0hfSTM4NiwgcmVncy0+b3JpZ19heCwKLQkJCQkgICAgcmVncy0+YngsIHJlZ3MtPmN4LCByZWdzLT5keCwgcmVncy0+c2kpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlyZWdzLT5vcmlnX2F4ID0gLTE7IC8qIGZvcmNlIHNraXAgb2Ygc3lzY2FsbCByZXN0YXJ0aW5nICovCi0JaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQotCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+YXgpLCByZWdzLT5heCk7Ci0JcmV0dXJuIDE7Ci19Ci0KLSNlbHNlICAvKiBDT05GSUdfWDg2XzY0ICovCi0KIHN0YXRpYyB2b2lkIHN5c2NhbGxfdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJaWYgKCEoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCisJCXJldHVybjsKIAogI2lmIDAKIAlwcmludGsoInRyYWNlICVzIGlwICVseCBzcCAlbHggYXggJWQgb3JpZ3JheCAlZCBjYWxsZXIgJWx4IHRpZmxhZ3MgJXggcHRyYWNlICV4XG4iLApAQCAtMTQ4MSwzOSArMTQwMCw4MSBAQAogCX0KIH0KIAotYXNtbGlua2FnZSB2b2lkIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBkZWZpbmUgSVNfSUEzMgkxCisjZWxpZiBkZWZpbmVkIENPTkZJR19JQTMyX0VNVUxBVElPTgorIyBkZWZpbmUgSVNfSUEzMgl0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKQorI2Vsc2UKKyMgZGVmaW5lIElTX0lBMzIJMAorI2VuZGlmCisKKy8qCisgKiBXZSBtdXN0IHJldHVybiB0aGUgc3lzY2FsbCBudW1iZXIgdG8gYWN0dWFsbHkgbG9vayB1cCBpbiB0aGUgdGFibGUuCisgKiBUaGlzIGNhbiBiZSAtMUwgdG8gc2tpcCBydW5uaW5nIGFueSBzeXNjYWxsIGF0IGFsbC4KKyAqLworYXNtcmVncGFybSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJbG9uZyByZXQgPSAwOworCisJLyoKKwkgKiBJZiB3ZSBzdGVwcGVkIGludG8gYSBzeXNlbnRlci9zeXNjYWxsIGluc24sIGl0IHRyYXBwZWQgaW4KKwkgKiBrZXJuZWwgbW9kZTsgZG9fZGVidWcoKSBjbGVhcmVkIFRGIGFuZCBzZXQgVElGX1NJTkdMRVNURVAuCisJICogSWYgdXNlci1tb2RlIGhhZCBzZXQgVEYgaXRzZWxmLCB0aGVuIGl0J3Mgc3RpbGwgY2xlYXIgZnJvbQorCSAqIGRvX2RlYnVnKCkgYW5kIHdlIG5lZWQgdG8gc2V0IGl0IGFnYWluIHRvIHJlc3RvcmUgdGhlIHVzZXIKKwkgKiBzdGF0ZS4gIElmIHdlIGVudGVyZWQgb24gdGhlIHNsb3cgcGF0aCwgVEYgd2FzIGFscmVhZHkgc2V0LgorCSAqLworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKKwkJcmVncy0+ZmxhZ3MgfD0gWDg2X0VGTEFHU19URjsKKwogCS8qIGRvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGZpcnN0ICovCiAJc2VjdXJlX2NvbXB1dGluZyhyZWdzLT5vcmlnX2F4KTsKIAotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKQotCSAgICAmJiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCisJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfRU1VKSkpCisJCXJldCA9IC0xTDsKKworCWlmIChyZXQgfHwgdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCiAJCXN5c2NhbGxfdHJhY2UocmVncyk7CiAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpIHsKLQkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpKSB7CisJCWlmIChJU19JQTMyKQogCQkJYXVkaXRfc3lzY2FsbF9lbnRyeShBVURJVF9BUkNIX0kzODYsCiAJCQkJCSAgICByZWdzLT5vcmlnX2F4LAogCQkJCQkgICAgcmVncy0+YngsIHJlZ3MtPmN4LAogCQkJCQkgICAgcmVncy0+ZHgsIHJlZ3MtPnNpKTsKLQkJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCWVsc2UKIAkJCWF1ZGl0X3N5c2NhbGxfZW50cnkoQVVESVRfQVJDSF9YODZfNjQsCiAJCQkJCSAgICByZWdzLT5vcmlnX2F4LAogCQkJCQkgICAgcmVncy0+ZGksIHJlZ3MtPnNpLAogCQkJCQkgICAgcmVncy0+ZHgsIHJlZ3MtPnIxMCk7Ci0JCX0KKyNlbmRpZgogCX0KKworCXJldHVybiByZXQgPzogcmVncy0+b3JpZ19heDsKIH0KIAotYXNtbGlua2FnZSB2b2lkIHN5c2NhbGxfdHJhY2VfbGVhdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21yZWdwYXJtIHZvaWQgc3lzY2FsbF90cmFjZV9sZWF2ZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCiAJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5heCksIHJlZ3MtPmF4KTsKIAotCWlmICgodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkKLQkgICAgIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKQotCSAgICAmJiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQogCQlzeXNjYWxsX3RyYWNlKHJlZ3MpOwotfQogCi0jZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLworCS8qCisJICogSWYgVElGX1NZU0NBTExfRU1VIGlzIHNldCwgd2Ugb25seSBnZXQgaGVyZSBiZWNhdXNlIG9mCisJICogVElGX1NJTkdMRVNURVAgKGkuZS4gdGhpcyBpcyBQVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVApLgorCSAqIFdlIGFscmVhZHkgcmVwb3J0ZWQgdGhpcyBzeXNjYWxsIGluc3RydWN0aW9uIGluCisJICogc3lzY2FsbF90cmFjZV9lbnRlcigpLCBzbyBkb24ndCBkbyBhbnkgbW9yZSBub3cuCisJICovCisJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfRU1VKSkpCisJCXJldHVybjsKKworCS8qCisJICogSWYgd2UgYXJlIHNpbmdsZS1zdGVwcGluZywgc3ludGhlc2l6ZSBhIHRyYXAgdG8gZm9sbG93IHRoZQorCSAqIHN5c3RlbSBjYWxsIGluc3RydWN0aW9uLgorCSAqLworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSAmJgorCSAgICAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCisJCXNlbmRfc2lndHJhcChjdXJyZW50LCByZWdzLCAwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCBmOGE2MjE2Li4wNmE5ZjY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC0xNzcsNiArMTc3LDE0IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBvd2VyRWRnZSAyNDAwIiksCiAJCX0sCiAJfSwKKwl7CS8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBEZWxsIFQ1NDAwJ3MgKi8KKwkJLmNhbGxiYWNrID0gc2V0X2Jpb3NfcmVib290LAorCQkuaWRlbnQgPSAiRGVsbCBQcmVjaXNpb24gVDU0MDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVjaXNpb24gV29ya1N0YXRpb24gVDU0MDAiKSwKKwkJfSwKKwl9LAogCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIEhQIGxhcHRvcHMgKi8KIAkJLmNhbGxiYWNrID0gc2V0X2Jpb3NfcmVib290LAogCQkuaWRlbnQgPSAiSFAgQ29tcGFxIExhcHRvcCIsCkBAIC00MDMsMjQgKzQxMSwyOCBAQAogewogCS8qIFN0b3AgdGhlIGNwdXMgYW5kIGFwaWNzICovCiAjaWZkZWYgQ09ORklHX1NNUAotCWludCByZWJvb3RfY3B1X2lkOwogCiAJLyogVGhlIGJvb3QgY3B1IGlzIGFsd2F5cyBsb2dpY2FsIGNwdSAwICovCi0JcmVib290X2NwdV9pZCA9IDA7CisJaW50IHJlYm9vdF9jcHVfaWQgPSAwOworCWNwdW1hc2tfb2ZfY3B1X3B0cihuZXdtYXNrLCByZWJvb3RfY3B1X2lkKTsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBTZWUgaWYgdGhlcmUgaGFzIGJlZW4gZ2l2ZW4gYSBjb21tYW5kIGxpbmUgb3ZlcnJpZGUgKi8KIAlpZiAoKHJlYm9vdF9jcHUgIT0gLTEpICYmIChyZWJvb3RfY3B1IDwgTlJfQ1BVUykgJiYKLQkJY3B1X29ubGluZShyZWJvb3RfY3B1KSkKKwkJY3B1X29ubGluZShyZWJvb3RfY3B1KSkgewogCQlyZWJvb3RfY3B1X2lkID0gcmVib290X2NwdTsKKwkJY3B1bWFza19vZl9jcHVfcHRyX25leHQobmV3bWFzaywgcmVib290X2NwdV9pZCk7CisJfQogI2VuZGlmCiAKIAkvKiBNYWtlIGNlcnRhaW4gdGhlIGNwdSBJJ20gYWJvdXQgdG8gcmVib290IG9uIGlzIG9ubGluZSAqLwotCWlmICghY3B1X29ubGluZShyZWJvb3RfY3B1X2lkKSkKKwlpZiAoIWNwdV9vbmxpbmUocmVib290X2NwdV9pZCkpIHsKIAkJcmVib290X2NwdV9pZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJY3B1bWFza19vZl9jcHVfcHRyX25leHQobmV3bWFzaywgcmVib290X2NwdV9pZCk7CisJfQogCiAJLyogTWFrZSBjZXJ0YWluIEkgb25seSBydW4gb24gdGhlIGFwcHJvcHJpYXRlIHByb2Nlc3NvciAqLwotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShyZWJvb3RfY3B1X2lkKSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbmV3bWFzayk7CiAKIAkvKiBPLksgTm93IHRoYXQgSSdtIG9uIHRoZSBhcHByb3ByaWF0ZSBwcm9jZXNzb3IsCiAJICogc3RvcCBhbGwgb2YgdGhlIG90aGVycy4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggNTMxYjU1Yi4uYjRhYWNiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTU3LDEyICs1Nyw4IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KIAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvZWRkLmg+Ci0jaW5jbHVkZSA8bGludXgvaXNjc2lfaWJmdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KQEAgLTk2LDcgKzkyLDcgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KIApAQCAtMTA0LDcgKzEwMCw2IEBACiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAKICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC01NzksNiArNTc0LDEwIEBACiBlYXJseV9wYXJhbSgiZWxmY29yZWhkciIsIHNldHVwX2VsZmNvcmVoZHIpOwogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgeDg2X3F1aXJrcyBkZWZhdWx0X3g4Nl9xdWlya3MgX19pbml0ZGF0YTsKKworc3RydWN0IHg4Nl9xdWlya3MgKng4Nl9xdWlya3MgX19pbml0ZGF0YSA9ICZkZWZhdWx0X3g4Nl9xdWlya3M7CisKIC8qCiAgKiBEZXRlcm1pbmUgaWYgd2Ugd2VyZSBsb2FkZWQgYnkgYW4gRUZJIGxvYWRlci4gIElmIHNvLCB0aGVuIHdlIGhhdmUgYWxzbyBiZWVuCiAgKiBwYXNzZWQgdGhlIGVmaSBtZW1tYXAsIHN5c3RhYiwgZXRjLiwgc28gd2Ugc2hvdWxkIHVzZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMKQEAgLTY4MSw3ICs2ODAsNyBAQAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCQlkaXNhYmxlX2FwaWMgPSAxOwogI2VuZGlmCi0JCWNsZWFyX2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FQSUMpOworCQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX0FQSUMpOwogCX0KIAogI2lmZGVmIENPTkZJR19QQ0kKQEAgLTgyNCw3ICs4MjMsMTAgQEAKIAl2bWlfaW5pdCgpOwogI2VuZGlmCiAKKwlwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfc3RhcnQoc3dhcHBlcl9wZ19kaXIpOwogCXBhZ2luZ19pbml0KCk7CisJcGFyYXZpcnRfcGFnZXRhYmxlX3NldHVwX2RvbmUoc3dhcHBlcl9wZ19kaXIpOworCXBhcmF2aXJ0X3Bvc3RfYWxsb2NhdG9yX2luaXQoKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAltYXBfdnN5c2NhbGwoKTsKQEAgLTg1NCwxNCArODU2LDYgQEAKIAlpbml0X2NwdV90b19ub2RlKCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLQkvKgotCSAqIG5lZWQgdG8gY2hlY2sgb25saW5lIG5vZGVzIG51bSwgY2FsbCBpdAotCSAqIGhlcmUgYmVmb3JlIHRpbWVfaW5pdC90c2NfaW5pdAotCSAqLwotCW51bWFxX3RzY19kaXNhYmxlKCk7Ci0jZW5kaWYKLQogCWluaXRfYXBpY19tYXBwaW5ncygpOwogCWlvYXBpY19pbml0X21hcHBpbmdzKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwppbmRleCBjYWM2ODQzLi5mNzc0NWY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCkBAIC0yMjcsOCArMjI3LDggQEAKIAkvKiBhbGxvY2F0ZSB0aGUgbWFwICovCiAJbWFwID0gYWxsb2NfYm9vdG1lbV9sb3cobnJfbm9kZV9pZHMgKiBzaXplb2YoY3B1bWFza190KSk7CiAKLQlEcHJpbnRrKEtFUk5fREVCVUcgIk5vZGUgdG8gY3B1bWFzayBtYXAgYXQgJXAgZm9yICVkIG5vZGVzXG4iLAotCQltYXAsIG5yX25vZGVfaWRzKTsKKwlwcl9kZWJ1ZyhLRVJOX0RFQlVHICJOb2RlIHRvIGNwdW1hc2sgbWFwIGF0ICVwIGZvciAlZCBub2Rlc1xuIiwKKwkJIG1hcCwgbnJfbm9kZV9pZHMpOwogCiAJLyogbm9kZV90b19jcHVtYXNrKCkgd2lsbCBub3cgd29yayAqLwogCW5vZGVfdG9fY3B1bWFza19tYXAgPSBtYXA7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpID0gbm9kZTsKIAogCWVsc2UKLQkJRHByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgbm9kZSBmb3Igbm9uLXByZXNlbnQgY3B1ICVkXG4iLCBjcHUpOworCQlwcl9kZWJ1ZygiU2V0dGluZyBub2RlIGZvciBub24tcHJlc2VudCBjcHUgJWRcbiIsIGNwdSk7CiB9CiAKIHZvaWQgX19jcHVpbml0IG51bWFfY2xlYXJfbm9kZShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IGUxZmM3YmQuLjZmYjViY2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCiBiYWRmcmFtZToKIAlpZiAoc2hvd191bmhhbmRsZWRfc2lnbmFscyAmJiBwcmludGtfcmF0ZWxpbWl0KCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMlc1slZF0gYmFkIGZyYW1lIGluIHNpZ3JldHVybiBmcmFtZToiCisJCXByaW50aygiJXMlc1slZF0gYmFkIGZyYW1lIGluIHNpZ3JldHVybiBmcmFtZToiCiAJCQkiJXAgaXA6JWx4IHNwOiVseCBvZWF4OiVseCIsCiAJCSAgICB0YXNrX3BpZF9ucihjdXJyZW50KSA+IDEgPyBLRVJOX0lORk8gOiBLRVJOX0VNRVJHLAogCQkgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIGZyYW1lLCByZWdzLT5pcCwKQEAgLTY1NywxMiArNjU3LDYgQEAKIHZvaWQKIGRvX25vdGlmeV9yZXN1bWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKnVudXNlZCwgX191MzIgdGhyZWFkX2luZm9fZmxhZ3MpCiB7Ci0JLyogUGVuZGluZyBzaW5nbGUtc3RlcD8gKi8KLQlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX1NJTkdMRVNURVApIHsKLQkJcmVncy0+ZmxhZ3MgfD0gWDg2X0VGTEFHU19URjsKLQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApOwotCX0KLQogCS8qIGRlYWwgd2l0aCBwZW5kaW5nIHNpZ25hbCBkZWxpdmVyeSAqLwogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfU0lHUEVORElORykKIAkJZG9fc2lnbmFsKHJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IDg4MDIzZmMuLjQ3YzNkMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTQ4NywxMiArNDg3LDYgQEAKIHZvaWQgZG9fbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqdW51c2VkLAogCQkgICAgICBfX3UzMiB0aHJlYWRfaW5mb19mbGFncykKIHsKLQkvKiBQZW5kaW5nIHNpbmdsZS1zdGVwPyAqLwotCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfU0lOR0xFU1RFUCkgewotCQlyZWdzLT5mbGFncyB8PSBYODZfRUZMQUdTX1RGOwotCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCk7Ci0JfQotCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKIAkvKiBub3RpZnkgdXNlcnNwYWNlIG9mIHBlbmRpbmcgTUNFcyAqLwogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfTUNFX05PVElGWSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDY4NzM3NmEuLjMzMjUxMjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCXBhbmljKCIlczogcGh5cyBDUFUjJWQsIENQVSMlZCBhbHJlYWR5IHByZXNlbnQ/P1xuIiwgX19mdW5jX18sCiAJCQkJCXBoeXNfaWQsIGNwdWlkKTsKIAl9Ci0JRHByaW50aygiQ1BVIyVkIChwaHlzIElEOiAlZCkgd2FpdGluZyBmb3IgQ0FMTE9VVFxuIiwgY3B1aWQsIHBoeXNfaWQpOworCXByX2RlYnVnKCJDUFUjJWQgKHBoeXMgSUQ6ICVkKSB3YWl0aW5nIGZvciBDQUxMT1VUXG4iLCBjcHVpZCwgcGh5c19pZCk7CiAKIAkvKgogCSAqIFNUQVJUVVAgSVBJcyBhcmUgZnJhZ2lsZSBiZWFzdHMgYXMgdGhleSBtaWdodCBzb21ldGltZXMKQEAgLTI1MSw3ICsyNTEsNyBAQAogCSAqIGJvYXJkcykKIAkgKi8KIAotCURwcmludGsoIkNBTExJTiwgYmVmb3JlIHNldHVwX2xvY2FsX0FQSUMoKS5cbiIpOworCXByX2RlYnVnKCJDQUxMSU4sIGJlZm9yZSBzZXR1cF9sb2NhbF9BUElDKCkuXG4iKTsKIAlzbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMoKTsKIAlzZXR1cF9sb2NhbF9BUElDKCk7CiAJZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKQEAgLTI2Niw3ICsyNjYsNyBAQAogCWxvY2FsX2lycV9lbmFibGUoKTsKIAljYWxpYnJhdGVfZGVsYXkoKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCURwcmludGsoIlN0YWNrIGF0IGFib3V0ICVwXG4iLCAmY3B1aWQpOworCXByX2RlYnVnKCJTdGFjayBhdCBhYm91dCAlcFxuIiwgJmNwdWlkKTsKIAogCS8qCiAJICogU2F2ZSBvdXIgcHJvY2Vzc29yIHBhcmFtZXRlcnMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCWNwdV9zZXQoY3B1LCBjcHVfc2libGluZ19zZXR1cF9tYXApOwogCiAJaWYgKHNtcF9udW1fc2libGluZ3MgPiAxKSB7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9zaWJsaW5nX3NldHVwX21hcCkgeworCQlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBjcHVfc2libGluZ19zZXR1cF9tYXApIHsKIAkJCWlmIChjLT5waHlzX3Byb2NfaWQgPT0gY3B1X2RhdGEoaSkucGh5c19wcm9jX2lkICYmCiAJCQkgICAgYy0+Y3B1X2NvcmVfaWQgPT0gY3B1X2RhdGEoaSkuY3B1X2NvcmVfaWQpIHsKIAkJCQljcHVfc2V0KGksIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKSB7CiAJCWlmIChwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgIT0gQkFEX0FQSUNJRCAmJgogCQkgICAgcGVyX2NwdShjcHVfbGxjX2lkLCBjcHUpID09IHBlcl9jcHUoY3B1X2xsY19pZCwgaSkpIHsKIAkJCWNwdV9zZXQoaSwgYy0+bGxjX3NoYXJlZF9tYXApOwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJLyoKIAkgKiBBbGxvdyB0aGUgdXNlciB0byBpbXByZXNzIGZyaWVuZHMuCiAJICovCi0JRHByaW50aygiQmVmb3JlIGJvZ29taXBzLlxuIik7CisJcHJfZGVidWcoIkJlZm9yZSBib2dvbWlwcy5cbiIpOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVfY2FsbG91dF9tYXApKQogCQkJYm9nb3N1bSArPSBjcHVfZGF0YShjcHUpLmxvb3BzX3Blcl9qaWZmeTsKQEAgLTUyMyw3ICs1MjMsNyBAQAogCQlib2dvc3VtLyg1MDAwMDAvSFopLAogCQkoYm9nb3N1bS8oNTAwMC9IWikpJTEwMCk7CiAKLQlEcHJpbnRrKCJCZWZvcmUgYm9nb2NvdW50IC0gc2V0dGluZyBhY3RpdmF0ZWQ9MS5cbiIpOworCXByX2RlYnVnKCJCZWZvcmUgYm9nb2NvdW50IC0gc2V0dGluZyBhY3RpdmF0ZWQ9MS5cbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpCkBAIC01NDYsOCArNTQ2LDggQEAKIAkJCXByaW50ayhLRVJOX0NPTlQKIAkJCSAgICAgICAiYSBwcmV2aW91cyBBUElDIGRlbGl2ZXJ5IG1heSBoYXZlIGZhaWxlZFxuIik7CiAKLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKGFwaWNpZCkpOwotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgQVBJQ19ETV9SRU1SRCB8IHJlZ3NbaV0pOworCQlhcGljX3dyaXRlKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChhcGljaWQpKTsKKwkJYXBpY193cml0ZShBUElDX0lDUiwgQVBJQ19ETV9SRU1SRCB8IHJlZ3NbaV0pOwogCiAJCXRpbWVvdXQgPSAwOwogCQlkbyB7CkBAIC01NzksMjkgKzU3OSwyNCBAQAogCWludCBtYXhsdnQ7CiAKIAkvKiBUYXJnZXQgY2hpcCAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChsb2dpY2FsX2FwaWNpZCkpOworCWFwaWNfd3JpdGUoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKGxvZ2ljYWxfYXBpY2lkKSk7CiAKIAkvKiBCb290IG9uIHRoZSBzdGFjayAqLwogCS8qIEtpY2sgdGhlIHNlY29uZCAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSLCBBUElDX0RNX05NSSB8IEFQSUNfREVTVF9MT0dJQ0FMKTsKKwlhcGljX3dyaXRlKEFQSUNfSUNSLCBBUElDX0RNX05NSSB8IEFQSUNfREVTVF9MT0dJQ0FMKTsKIAotCURwcmludGsoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4iKTsKKwlwcl9kZWJ1ZygiV2FpdGluZyBmb3Igc2VuZCB0byBmaW5pc2guLi5cbiIpOwogCXNlbmRfc3RhdHVzID0gc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUoKTsKIAogCS8qCiAJICogR2l2ZSB0aGUgb3RoZXIgQ1BVIHNvbWUgdGltZSB0byBhY2NlcHQgdGhlIElQSS4KIAkgKi8KIAl1ZGVsYXkoMjAwKTsKLQkvKgotCSAqIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4KLQkgKi8KIAltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0JaWYgKG1heGx2dCA+IDMpIHsKLQkJYXBpY19yZWFkX2Fyb3VuZChBUElDX1NQSVYpOworCWlmIChtYXhsdnQgPiAzKQkJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gICovCiAJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCX0KIAlhY2NlcHRfc3RhdHVzID0gKGFwaWNfcmVhZChBUElDX0VTUikgJiAweEVGKTsKLQlEcHJpbnRrKCJOTUkgc2VudC5cbiIpOworCXByX2RlYnVnKCJOTUkgc2VudC5cbiIpOwogCiAJaWYgKHNlbmRfc3RhdHVzKQogCQlwcmludGsoS0VSTl9FUlIgIkFQSUMgbmV2ZXIgZGVsaXZlcmVkPz8/XG4iKTsKQEAgLTYyNSw0MiArNjIwLDQ0IEBACiAJCXJldHVybiBzZW5kX3N0YXR1czsKIAl9CiAKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CisKIAkvKgogCSAqIEJlIHBhcmFub2lkIGFib3V0IGNsZWFyaW5nIEFQSUMgZXJyb3JzLgogCSAqLwogCWlmIChBUElDX0lOVEVHUkFURUQoYXBpY192ZXJzaW9uW3BoeXNfYXBpY2lkXSkpIHsKLQkJYXBpY19yZWFkX2Fyb3VuZChBUElDX1NQSVYpOwotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICAqLworCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CiAJCWFwaWNfcmVhZChBUElDX0VTUik7CiAJfQogCi0JRHByaW50aygiQXNzZXJ0aW5nIElOSVQuXG4iKTsKKwlwcl9kZWJ1ZygiQXNzZXJ0aW5nIElOSVQuXG4iKTsKIAogCS8qCiAJICogVHVybiBJTklUIG9uIHRhcmdldCBjaGlwCiAJICovCi0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKHBoeXNfYXBpY2lkKSk7CisJYXBpY193cml0ZShBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQocGh5c19hcGljaWQpKTsKIAogCS8qCiAJICogU2VuZCBJUEkKIAkgKi8KLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19JTlRfQVNTRVJUCi0JCQkJfCBBUElDX0RNX0lOSVQpOworCWFwaWNfd3JpdGUoQVBJQ19JQ1IsCisJCSAgIEFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfSU5UX0FTU0VSVCB8IEFQSUNfRE1fSU5JVCk7CiAKLQlEcHJpbnRrKCJXYWl0aW5nIGZvciBzZW5kIHRvIGZpbmlzaC4uLlxuIik7CisJcHJfZGVidWcoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4iKTsKIAlzZW5kX3N0YXR1cyA9IHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7CiAKIAltZGVsYXkoMTApOwogCi0JRHByaW50aygiRGVhc3NlcnRpbmcgSU5JVC5cbiIpOworCXByX2RlYnVnKCJEZWFzc2VydGluZyBJTklULlxuIik7CiAKIAkvKiBUYXJnZXQgY2hpcCAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChwaHlzX2FwaWNpZCkpOworCWFwaWNfd3JpdGUoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKHBoeXNfYXBpY2lkKSk7CiAKIAkvKiBTZW5kIElQSSAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSLCBBUElDX0lOVF9MRVZFTFRSSUcgfCBBUElDX0RNX0lOSVQpOworCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIEFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfRE1fSU5JVCk7CiAKLQlEcHJpbnRrKCJXYWl0aW5nIGZvciBzZW5kIHRvIGZpbmlzaC4uLlxuIik7CisJcHJfZGVidWcoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4iKTsKIAlzZW5kX3N0YXR1cyA9IHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7CiAKIAltYigpOwpAQCAtNjg3LDU1ICs2ODQsNDcgQEAKIAkvKgogCSAqIFJ1biBTVEFSVFVQIElQSSBsb29wLgogCSAqLwotCURwcmludGsoIiNzdGFydHVwIGxvb3BzOiAlZC5cbiIsIG51bV9zdGFydHMpOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOworCXByX2RlYnVnKCIjc3RhcnR1cCBsb29wczogJWQuXG4iLCBudW1fc3RhcnRzKTsKIAogCWZvciAoaiA9IDE7IGogPD0gbnVtX3N0YXJ0czsgaisrKSB7Ci0JCURwcmludGsoIlNlbmRpbmcgU1RBUlRVUCAjJWQuXG4iLCBqKTsKLQkJYXBpY19yZWFkX2Fyb3VuZChBUElDX1NQSVYpOwotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwkJcHJfZGVidWcoIlNlbmRpbmcgU1RBUlRVUCAjJWQuXG4iLCBqKTsKKwkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICAqLworCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CiAJCWFwaWNfcmVhZChBUElDX0VTUik7Ci0JCURwcmludGsoIkFmdGVyIGFwaWNfd3JpdGUuXG4iKTsKKwkJcHJfZGVidWcoIkFmdGVyIGFwaWNfd3JpdGUuXG4iKTsKIAogCQkvKgogCQkgKiBTVEFSVFVQIElQSQogCQkgKi8KIAogCQkvKiBUYXJnZXQgY2hpcCAqLwotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQocGh5c19hcGljaWQpKTsKKwkJYXBpY193cml0ZShBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQocGh5c19hcGljaWQpKTsKIAogCQkvKiBCb290IG9uIHRoZSBzdGFjayAqLwogCQkvKiBLaWNrIHRoZSBzZWNvbmQgKi8KLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIEFQSUNfRE1fU1RBUlRVUAotCQkJCQl8IChzdGFydF9laXAgPj4gMTIpKTsKKwkJYXBpY193cml0ZShBUElDX0lDUiwgQVBJQ19ETV9TVEFSVFVQIHwgKHN0YXJ0X2VpcCA+PiAxMikpOwogCiAJCS8qCiAJCSAqIEdpdmUgdGhlIG90aGVyIENQVSBzb21lIHRpbWUgdG8gYWNjZXB0IHRoZSBJUEkuCiAJCSAqLwogCQl1ZGVsYXkoMzAwKTsKIAotCQlEcHJpbnRrKCJTdGFydHVwIHBvaW50IDEuXG4iKTsKKwkJcHJfZGVidWcoIlN0YXJ0dXAgcG9pbnQgMS5cbiIpOwogCi0JCURwcmludGsoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4iKTsKKwkJcHJfZGVidWcoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4iKTsKIAkJc2VuZF9zdGF0dXMgPSBzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSgpOwogCiAJCS8qCiAJCSAqIEdpdmUgdGhlIG90aGVyIENQVSBzb21lIHRpbWUgdG8gYWNjZXB0IHRoZSBJUEkuCiAJCSAqLwogCQl1ZGVsYXkoMjAwKTsKLQkJLyoKLQkJICogRHVlIHRvIHRoZSBQZW50aXVtIGVycmF0dW0gM0FQLgotCQkgKi8KLQkJaWYgKG1heGx2dCA+IDMpIHsKLQkJCWFwaWNfcmVhZF9hcm91bmQoQVBJQ19TUElWKTsKKwkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICAqLwogCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCX0KIAkJYWNjZXB0X3N0YXR1cyA9IChhcGljX3JlYWQoQVBJQ19FU1IpICYgMHhFRik7CiAJCWlmIChzZW5kX3N0YXR1cyB8fCBhY2NlcHRfc3RhdHVzKQogCQkJYnJlYWs7CiAJfQotCURwcmludGsoIkFmdGVyIFN0YXJ0dXAuXG4iKTsKKwlwcl9kZWJ1ZygiQWZ0ZXIgU3RhcnR1cC5cbiIpOwogCiAJaWYgKHNlbmRfc3RhdHVzKQogCQlwcmludGsoS0VSTl9FUlIgIkFQSUMgbmV2ZXIgZGVsaXZlcmVkPz8/XG4iKTsKQEAgLTc2OCw3ICs3NTcsNyBAQAogICoKICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBfY3B1X3BkYSBwb2ludGVyIHRhYmxlIGlzIGluaXRpYWxpemVkLgogICovCi1zdGF0aWMgaW50IF9fY3B1aW5pdCBnZXRfbG9jYWxfcGRhKGludCBjcHUpCitpbnQgX19jcHVpbml0IGdldF9sb2NhbF9wZGEoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgeDg2NjRfcGRhICpvbGRwZGEsICpuZXdwZGE7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gc2l6ZW9mKHN0cnVjdCB4ODY2NF9wZGEpOwpAQCAtODg2LDcgKzg3NSw3IEBACiAKIAlpZiAoZ2V0X3V2X3N5c3RlbV90eXBlKCkgIT0gVVZfTk9OX1VOSVFVRV9BUElDKSB7CiAKLQkJRHByaW50aygiU2V0dGluZyB3YXJtIHJlc2V0IGNvZGUgYW5kIHZlY3Rvci5cbiIpOworCQlwcl9kZWJ1ZygiU2V0dGluZyB3YXJtIHJlc2V0IGNvZGUgYW5kIHZlY3Rvci5cbiIpOwogCiAJCXN0b3JlX05NSV92ZWN0b3IoJm5taV9oaWdoLCAmbm1pX2xvdyk7CiAKQEAgLTkwNyw5ICs4OTYsOSBAQAogCQkvKgogCQkgKiBhbGxvdyBBUHMgdG8gc3RhcnQgaW5pdGlhbGl6aW5nLgogCQkgKi8KLQkJRHByaW50aygiQmVmb3JlIENhbGxvdXQgJWQuXG4iLCBjcHUpOworCQlwcl9kZWJ1ZygiQmVmb3JlIENhbGxvdXQgJWQuXG4iLCBjcHUpOwogCQljcHVfc2V0KGNwdSwgY3B1X2NhbGxvdXRfbWFwKTsKLQkJRHByaW50aygiQWZ0ZXIgQ2FsbG91dCAlZC5cbiIsIGNwdSk7CisJCXByX2RlYnVnKCJBZnRlciBDYWxsb3V0ICVkLlxuIiwgY3B1KTsKIAogCQkvKgogCQkgKiBXYWl0IDVzIHRvdGFsIGZvciBhIHJlc3BvbnNlCkBAIC05MjIsMTAgKzkxMSwxMCBAQAogCiAJCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVfY2FsbGluX21hcCkpIHsKIAkJCS8qIG51bWJlciBDUFVzIGxvZ2ljYWxseSwgc3RhcnRpbmcgZnJvbSAxIChCU1AgaXMgMCkgKi8KLQkJCURwcmludGsoIk9LLlxuIik7CisJCQlwcl9kZWJ1ZygiT0suXG4iKTsKIAkJCXByaW50ayhLRVJOX0lORk8gIkNQVSVkOiAiLCBjcHUpOwogCQkJcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhKGNwdSkpOwotCQkJRHByaW50aygiQ1BVIGhhcyBib290ZWQuXG4iKTsKKwkJCXByX2RlYnVnKCJDUFUgaGFzIGJvb3RlZC5cbiIpOwogCQl9IGVsc2UgewogCQkJYm9vdF9lcnJvciA9IDE7CiAJCQlpZiAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXRyYW1wb2xpbmVfYmFzZSkKQEAgLTk3MCw3ICs5NTksNyBAQAogCiAJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwogCi0JRHByaW50aygiKysrKysrKysrKysrKysrKysrKys9Xy0tLUNQVSBVUCAgJXVcbiIsIGNwdSk7CisJcHJfZGVidWcoIisrKysrKysrKysrKysrKysrKysrPV8tLS1DUFUgVVAgICV1XG4iLCBjcHUpOwogCiAJaWYgKGFwaWNpZCA9PSBCQURfQVBJQ0lEIHx8IGFwaWNpZCA9PSBib290X2NwdV9waHlzaWNhbF9hcGljaWQgfHwKIAkgICAgIXBoeXNpZF9pc3NldChhcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKSkgewpAQCAtOTgyLDcgKzk3MSw3IEBACiAJICogQWxyZWFkeSBib290ZWQgQ1BVPwogCSAqLwogCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVfY2FsbGluX21hcCkpIHsKLQkJRHByaW50aygiZG9fYm9vdF9jcHUgJWQgQWxyZWFkeSBzdGFydGVkXG4iLCBjcHUpOworCQlwcl9kZWJ1ZygiZG9fYm9vdF9jcHUgJWQgQWxyZWFkeSBzdGFydGVkXG4iLCBjcHUpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKQEAgLTEwMDksNyArOTk4LDcgQEAKIAllcnIgPSBkb19ib290X2NwdShhcGljaWQsIGNwdSk7CiAjZW5kaWYKIAlpZiAoZXJyKSB7Ci0JCURwcmludGsoImRvX2Jvb3RfY3B1IGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJcHJfZGVidWcoImRvX2Jvb3RfY3B1IGZhaWxlZCAlZFxuIiwgZXJyKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMjEzLDcgKzEyMDIsNyBAQAogCiB2b2lkIF9faW5pdCBuYXRpdmVfc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7Ci0JRHByaW50aygiQm9vdCBkb25lLlxuIik7CisJcHJfZGVidWcoIkJvb3QgZG9uZS5cbiIpOwogCiAJaW1wcmVzc19mcmllbmRzKCk7CiAJc21wX2NoZWNrcygpOwpAQCAtMTIzMCw3ICsxMjE5LDcgQEAKIAlpbnQgc2libGluZzsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKHNpYmxpbmcsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoc2libGluZywgcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpIHsKIAkJY3B1X2NsZWFyKGNwdSwgcGVyX2NwdShjcHVfY29yZV9tYXAsIHNpYmxpbmcpKTsKIAkJLyovCiAJCSAqIGxhc3QgdGhyZWFkIHNpYmxpbmcgaW4gdGhpcyBjcHUgY29yZSBnb2luZyBkb3duCkBAIC0xMjM5LDcgKzEyMjgsNyBAQAogCQkJY3B1X2RhdGEoc2libGluZykuYm9vdGVkX2NvcmVzLS07CiAJfQogCi0JZm9yX2VhY2hfY3B1X21hc2soc2libGluZywgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCisJZm9yX2VhY2hfY3B1X21hc2tfbnIoc2libGluZywgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCiAJCWNwdV9jbGVhcihjcHUsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBzaWJsaW5nKSk7CiAJY3B1c19jbGVhcihwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSk7CiAJY3B1c19jbGVhcihwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7CkBAIC0xMzExLDcgKzEzMDAsNyBAQAogCWNwdV9jbGVhcihjcHUsIGNwdV9jYWxsb3V0X21hcCk7CiAJY3B1X2NsZWFyKGNwdSwgY3B1X2NhbGxpbl9tYXApOwogCS8qIHdhcyBzZXQgYnkgY3B1X2luaXQoKSAqLwotCWNsZWFyX2JpdChjcHUsICh1bnNpZ25lZCBsb25nICopJmNwdV9pbml0aWFsaXplZCk7CisJY3B1X2NsZWFyKGNwdSwgY3B1X2luaXRpYWxpemVkKTsKIAludW1hX3JlbW92ZV9jcHUoY3B1KTsKIH0KIApAQCAtMTM5MCw3ICsxMzc5LDggQEAKIHsKIAlleHRlcm4gdW5zaWduZWQgaW50IG1heGNwdXM7CiAKLQltYXhjcHVzID0gc2ltcGxlX3N0cnRvdWwoYXJnLCBOVUxMLCAwKTsKKwlpZiAoYXJnKQorCQltYXhjcHVzID0gc2ltcGxlX3N0cnRvdWwoYXJnLCBOVUxMLCAwKTsKIAlyZXR1cm4gMDsKIH0KIGVhcmx5X3BhcmFtKCJtYXhjcHVzIiwgcGFyc2VfbWF4Y3B1cyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wY29tbW9uXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wY29tbW9uXzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMTM3ODkuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGNvbW1vbl8zMi5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jIGIvYXJjaC94ODYva2VybmVsL3N0ZXAuYwppbmRleCA5MmMyMGZlLi5lOGI5ODYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGVwLmMKQEAgLTEwNSw2ICsxMDUsMjAgQEAKIHN0YXRpYyBpbnQgZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOworCXVuc2lnbmVkIGxvbmcgb2ZsYWdzOworCisJLyoKKwkgKiBJZiB3ZSBzdGVwcGVkIGludG8gYSBzeXNlbnRlci9zeXNjYWxsIGluc24sIGl0IHRyYXBwZWQgaW4KKwkgKiBrZXJuZWwgbW9kZTsgZG9fZGVidWcoKSBjbGVhcmVkIFRGIGFuZCBzZXQgVElGX1NJTkdMRVNURVAuCisJICogSWYgdXNlci1tb2RlIGhhZCBzZXQgVEYgaXRzZWxmLCB0aGVuIGl0J3Mgc3RpbGwgY2xlYXIgZnJvbQorCSAqIGRvX2RlYnVnKCkgYW5kIHdlIG5lZWQgdG8gc2V0IGl0IGFnYWluIHRvIHJlc3RvcmUgdGhlIHVzZXIKKwkgKiBzdGF0ZSBzbyB3ZSBkb24ndCB3cm9uZ2x5IHNldCBUSUZfRk9SQ0VEX1RGIGJlbG93LgorCSAqIElmIGVuYWJsZV9zaW5nbGVfc3RlcCgpIHdhcyB1c2VkIGxhc3QgYW5kIHRoYXQgaXMgd2hhdAorCSAqIHNldCBUSUZfU0lOR0xFU1RFUCwgdGhlbiBib3RoIFRGIGFuZCBUSUZfRk9SQ0VEX1RGIGFyZQorCSAqIGFscmVhZHkgc2V0IGFuZCBvdXIgYm9va2tlZXBpbmcgaXMgZmluZS4KKwkgKi8KKwlpZiAodW5saWtlbHkodGVzdF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKSkpCisJCXJlZ3MtPmZsYWdzIHw9IFg4Nl9FRkxBR1NfVEY7CiAKIAkvKgogCSAqIEFsd2F5cyBzZXQgVElGX1NJTkdMRVNURVAgLSB0aGlzIGd1YXJhbnRlZXMgdGhhdApAQCAtMTEzLDExICsxMjcsNyBAQAogCSAqLwogCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKIAotCS8qCi0JICogSWYgVEYgd2FzIGFscmVhZHkgc2V0LCBkb24ndCBkbyBhbnl0aGluZyBlbHNlCi0JICovCi0JaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19URikKLQkJcmV0dXJuIDA7CisJb2ZsYWdzID0gcmVncy0+ZmxhZ3M7CiAKIAkvKiBTZXQgVEYgb24gdGhlIGtlcm5lbCBzdGFjay4uICovCiAJcmVncy0+ZmxhZ3MgfD0gWDg2X0VGTEFHU19URjsKQEAgLTEyNiw5ICsxMzYsMjIgQEAKIAkgKiAuLmJ1dCBpZiBURiBpcyBjaGFuZ2VkIGJ5IHRoZSBpbnN0cnVjdGlvbiB3ZSB3aWxsIHRyYWNlLAogCSAqIGRvbid0IG1hcmsgaXQgYXMgYmVpbmcgInVzIiB0aGF0IHNldCBpdCwgc28gdGhhdCB3ZQogCSAqIHdvbid0IGNsZWFyIGl0IGJ5IGhhbmQgbGF0ZXIuCisJICoKKwkgKiBOb3RlIHRoYXQgaWYgd2UgZG9uJ3QgYWN0dWFsbHkgZXhlY3V0ZSB0aGUgcG9wZiBiZWNhdXNlCisJICogb2YgYSBzaWduYWwgYXJyaXZpbmcgcmlnaHQgbm93IG9yIHN1Y2hsaWtlLCB3ZSB3aWxsIGxvc2UKKwkgKiB0cmFjayBvZiB0aGUgZmFjdCB0aGF0IGl0IHJlYWxseSB3YXMgInVzIiB0aGF0IHNldCBpdC4KIAkgKi8KLQlpZiAoaXNfc2V0dGluZ190cmFwX2ZsYWcoY2hpbGQsIHJlZ3MpKQorCWlmIChpc19zZXR0aW5nX3RyYXBfZmxhZyhjaGlsZCwgcmVncykpIHsKKwkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfRk9SQ0VEX1RGKTsKIAkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJZiBURiB3YXMgYWxyZWFkeSBzZXQsIGNoZWNrIHdoZXRoZXIgaXQgd2FzIHVzIHdobyBzZXQgaXQuCisJICogSWYgbm90LCB3ZSBzaG91bGQgbmV2ZXIgYXR0ZW1wdCBhIGJsb2NrIHN0ZXAuCisJICovCisJaWYgKG9mbGFncyAmIFg4Nl9FRkxBR1NfVEYpCisJCXJldHVybiB0ZXN0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX0ZPUkNFRF9URik7CiAKIAlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfRk9SQ0VEX1RGKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RpbWVfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC90aW1lXzMyLmMKaW5kZXggMDU5Y2E2ZS4uZmZlM2M2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RpbWVfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZV8zMi5jCkBAIC0xMjksNiArMTI5LDcgQEAKICAqLwogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CisJcHJlX3RpbWVfaW5pdF9ob29rKCk7CiAJdHNjX2luaXQoKTsKIAlsYXRlX3RpbWVfaW5pdCA9IGNob29zZV90aW1lX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwc18zMi5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzXzMyLmMKaW5kZXggOGE3Njg5Ny4uMDNkZjhlNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzXzMyLmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCiAjaW5jbHVkZSAibWFjaF90cmFwcy5oIgogCkBAIC03NywyNiArNzgsNiBAQAogZ2F0ZV9kZXNjIGlkdF90YWJsZVsyNTZdCiAJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLmlkdCIpKSkgPSB7IHsgeyB7IDAsIDAgfSB9IH0sIH07CiAKLWFzbWxpbmthZ2Ugdm9pZCBkaXZpZGVfZXJyb3Iodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgZGVidWcodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgbm1pKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGludDModm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgb3ZlcmZsb3codm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgYm91bmRzKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGludmFsaWRfb3Aodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgZGV2aWNlX25vdF9hdmFpbGFibGUodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGludmFsaWRfVFNTKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIHNlZ21lbnRfbm90X3ByZXNlbnQodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgc3RhY2tfc2VnbWVudCh2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBnZW5lcmFsX3Byb3RlY3Rpb24odm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgcGFnZV9mYXVsdCh2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBjb3Byb2Nlc3Nvcl9lcnJvcih2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBzaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGFsaWdubWVudF9jaGVjayh2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBzcHVyaW91c19pbnRlcnJ1cHRfYnVnKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIG1hY2hpbmVfY2hlY2sodm9pZCk7Ci0KIGludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7CiBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMjQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGNvZGVfYnl0ZXMgPSA2NDsKQEAgLTI1Niw3ICsyMzcsNyBAQAogCiBzdGF0aWMgdm9pZAogc2hvd190cmFjZV9sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQorCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCkKIHsKIAlkdW1wX3RyYWNlKHRhc2ssIHJlZ3MsIHN0YWNrLCBicCwgJnByaW50X3RyYWNlX29wcywgbG9nX2x2bCk7CiAJcHJpbnRrKCIlcyA9PT09PT09PT09PT09PT09PT09PT09PVxuIiwgbG9nX2x2bCk7CkBAIC0zODMsNiArMzY0LDU0IEBACiAJcmV0dXJuIHVkMiA9PSAweDBiMGY7CiB9CiAKK3N0YXRpYyByYXdfc3BpbmxvY2tfdCBkaWVfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBpbnQgZGllX293bmVyID0gLTE7CitzdGF0aWMgdW5zaWduZWQgaW50IGRpZV9uZXN0X2NvdW50OworCit1bnNpZ25lZCBfX2twcm9iZXMgbG9uZyBvb3BzX2JlZ2luKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW9vcHNfZW50ZXIoKTsKKworCWlmIChkaWVfb3duZXIgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgeworCQljb25zb2xlX3ZlcmJvc2UoKTsKKwkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJX19yYXdfc3Bpbl9sb2NrKCZkaWVfbG9jayk7CisJCWRpZV9vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJZGllX25lc3RfY291bnQgPSAwOworCQlidXN0X3NwaW5sb2NrcygxKTsKKwl9IGVsc2UgeworCQlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCX0KKwlkaWVfbmVzdF9jb3VudCsrOworCXJldHVybiBmbGFnczsKK30KKwordm9pZCBfX2twcm9iZXMgb29wc19lbmQodW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaWducikKK3sKKwlidXN0X3NwaW5sb2NrcygwKTsKKwlkaWVfb3duZXIgPSAtMTsKKwlhZGRfdGFpbnQoVEFJTlRfRElFKTsKKwlfX3Jhd19zcGluX3VubG9jaygmZGllX2xvY2spOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlpZiAoIXJlZ3MpCisJCXJldHVybjsKKworCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCisJCWNyYXNoX2tleGVjKHJlZ3MpOworCisJaWYgKGluX2ludGVycnVwdCgpKQorCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIGluIGludGVycnVwdCIpOworCisJaWYgKHBhbmljX29uX29vcHMpCisJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKKworCW9vcHNfZXhpdCgpOworCWRvX2V4aXQoc2lnbnIpOworfQorCiBpbnQgX19rcHJvYmVzIF9fZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQogewogCXVuc2lnbmVkIHNob3J0IHNzOwpAQCAtNDIzLDMxICs0NTIsOSBAQAogICovCiB2b2lkIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKIHsKLQlzdGF0aWMgc3RydWN0IHsKLQkJcmF3X3NwaW5sb2NrX3QgbG9jazsKLQkJdTMyIGxvY2tfb3duZXI7Ci0JCWludCBsb2NrX293bmVyX2RlcHRoOwotCX0gZGllID0gewotCQkubG9jayA9CQkJX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VELAotCQkubG9ja19vd25lciA9CQktMSwKLQkJLmxvY2tfb3duZXJfZGVwdGggPQkwCi0JfTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBvb3BzX2JlZ2luKCk7CiAKLQlvb3BzX2VudGVyKCk7Ci0KLQlpZiAoZGllLmxvY2tfb3duZXIgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgewotCQljb25zb2xlX3ZlcmJvc2UoKTsKLQkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJX19yYXdfc3Bpbl9sb2NrKCZkaWUubG9jayk7Ci0JCWRpZS5sb2NrX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlkaWUubG9ja19vd25lcl9kZXB0aCA9IDA7Ci0JCWJ1c3Rfc3BpbmxvY2tzKDEpOwotCX0gZWxzZSB7Ci0JCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JfQotCi0JaWYgKCsrZGllLmxvY2tfb3duZXJfZGVwdGggPCAzKSB7CisJaWYgKGRpZV9uZXN0X2NvdW50IDwgMykgewogCQlyZXBvcnRfYnVnKHJlZ3MtPmlwLCByZWdzKTsKIAogCQlpZiAoX19kaWUoc3RyLCByZWdzLCBlcnIpKQpAQCAtNDU2LDI2ICs0NjMsNyBAQAogCQlwcmludGsoS0VSTl9FTUVSRyAiUmVjdXJzaXZlIGRpZSgpIGZhaWx1cmUsIG91dHB1dCBzdXBwcmVzc2VkXG4iKTsKIAl9CiAKLQlidXN0X3NwaW5sb2NrcygwKTsKLQlkaWUubG9ja19vd25lciA9IC0xOwotCWFkZF90YWludChUQUlOVF9ESUUpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZkaWUubG9jayk7Ci0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWlmICghcmVncykKLQkJcmV0dXJuOwotCi0JaWYgKGtleGVjX3Nob3VsZF9jcmFzaChjdXJyZW50KSkKLQkJY3Jhc2hfa2V4ZWMocmVncyk7Ci0KLQlpZiAoaW5faW50ZXJydXB0KCkpCi0JCXBhbmljKCJGYXRhbCBleGNlcHRpb24gaW4gaW50ZXJydXB0Iik7Ci0KLQlpZiAocGFuaWNfb25fb29wcykKLQkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiIpOwotCi0Jb29wc19leGl0KCk7Ci0JZG9fZXhpdChTSUdTRUdWKTsKKwlvb3BzX2VuZChmbGFncywgcmVncywgU0lHU0VHVik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfNjQuYwppbmRleCAyNjk2YTY4Li4zZjE4ZDczIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfNjQuYwpAQCAtNTEsMzAgKzUxLDEwIEBACiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vcGRhLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAKICNpbmNsdWRlIDxtYWNoX3RyYXBzLmg+CiAKLWFzbWxpbmthZ2Ugdm9pZCBkaXZpZGVfZXJyb3Iodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgZGVidWcodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgbm1pKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGludDModm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgb3ZlcmZsb3codm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgYm91bmRzKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGludmFsaWRfb3Aodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgZGV2aWNlX25vdF9hdmFpbGFibGUodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgZG91YmxlX2ZhdWx0KHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGNvcHJvY2Vzc29yX3NlZ21lbnRfb3ZlcnJ1bih2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBpbnZhbGlkX1RTUyh2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBzZWdtZW50X25vdF9wcmVzZW50KHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIHN0YWNrX3NlZ21lbnQodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgZ2VuZXJhbF9wcm90ZWN0aW9uKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIHBhZ2VfZmF1bHQodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgY29wcm9jZXNzb3JfZXJyb3Iodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcih2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBhbGlnbm1lbnRfY2hlY2sodm9pZCk7Ci1hc21saW5rYWdlIHZvaWQgc3B1cmlvdXNfaW50ZXJydXB0X2J1Zyh2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBtYWNoaW5lX2NoZWNrKHZvaWQpOwotCiBpbnQgcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pOwogaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDEyOwogc3RhdGljIHVuc2lnbmVkIGludCBjb2RlX2J5dGVzID0gNjQ7CkBAIC0zNTUsMTcgKzMzNSwyNCBAQAogCS5hZGRyZXNzID0gcHJpbnRfdHJhY2VfYWRkcmVzcywKIH07CiAKLXZvaWQgc2hvd190cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCkKK3N0YXRpYyB2b2lkCitzaG93X3RyYWNlX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpCiB7CiAJcHJpbnRrKCJcbkNhbGwgVHJhY2U6XG4iKTsKLQlkdW1wX3RyYWNlKHRhc2ssIHJlZ3MsIHN0YWNrLCBicCwgJnByaW50X3RyYWNlX29wcywgTlVMTCk7CisJZHVtcF90cmFjZSh0YXNrLCByZWdzLCBzdGFjaywgYnAsICZwcmludF90cmFjZV9vcHMsIGxvZ19sdmwpOwogCXByaW50aygiXG4iKTsKIH0KIAordm9pZCBzaG93X3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwKQoreworCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzdGFjaywgYnAsICIiKTsKK30KKwogc3RhdGljIHZvaWQKLV9zaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCXVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwKQorc2hvd19zdGFja19sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQogewogCXVuc2lnbmVkIGxvbmcgKnN0YWNrOwogCWludCBpOwpAQCAtMzk5LDEyICszODYsMTIgQEAKIAkJcHJpbnRrKCIgJTAxNmx4IiwgKnN0YWNrKyspOwogCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKIAl9Ci0Jc2hvd190cmFjZSh0YXNrLCByZWdzLCBzcCwgYnApOworCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzcCwgYnAsIGxvZ19sdmwpOwogfQogCiB2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzcCkKIHsKLQlfc2hvd19zdGFjayh0YXNrLCBOVUxMLCBzcCwgMCk7CisJc2hvd19zdGFja19sb2dfbHZsKHRhc2ssIE5VTEwsIHNwLCAwLCAiIik7CiB9CiAKIC8qCkBAIC00NTQsNyArNDQxLDggQEAKIAkJdTggKmlwOwogCiAJCXByaW50aygiU3RhY2s6ICIpOwotCQlfc2hvd19zdGFjayhOVUxMLCByZWdzLCAodW5zaWduZWQgbG9uZyAqKXNwLCByZWdzLT5icCk7CisJCXNob3dfc3RhY2tfbG9nX2x2bChOVUxMLCByZWdzLCAodW5zaWduZWQgbG9uZyAqKXNwLAorCQkJCXJlZ3MtPmJwLCAiIik7CiAJCXByaW50aygiXG4iKTsKIAogCQlwcmludGsoS0VSTl9FTUVSRyAiQ29kZTogIik7CkBAIC01MTgsNyArNTA2LDcgQEAKIH0KIAogdm9pZCBfX2twcm9iZXMgb29wc19lbmQodW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaWducikKLXsgCit7CiAJZGllX293bmVyID0gLTE7CiAJYnVzdF9zcGlubG9ja3MoMCk7CiAJZGllX25lc3RfY291bnQtLTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCBlOTRiZGI2Li40MWUwMWIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC03Myw3ICs3Myw3IEBACiAJcmV0dXJuIHZpc3dzX2JvYXJkX3R5cGUgPj0gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgdmlzd3NfdGltZV9pbml0X3F1aXJrKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB2aXN3c190aW1lX2luaXQodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICJTdGFydGluZyBDb2JhbHQgVGltZXIgc3lzdGVtIGNsb2NrXG4iKTsKIApAQCAtOTMsNyArOTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB2aXN3c19wcmVfaW50cl9pbml0X3F1aXJrKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB2aXN3c19wcmVfaW50cl9pbml0KHZvaWQpCiB7CiAJaW5pdF9WSVNXU19BUElDX2lycXMoKTsKIApAQCAtMTE0LDcgKzExNCw3IEBACiAKIGxvbmcgbG9uZyBtZW1fc2l6ZSBfX2luaXRkYXRhID0gMDsKIAotc3RhdGljIGNoYXIgKiBfX2luaXQgdmlzd3NfbWVtb3J5X3NldHVwX3F1aXJrKHZvaWQpCitzdGF0aWMgY2hhciAqIF9faW5pdCB2aXN3c19tZW1vcnlfc2V0dXAodm9pZCkKIHsKIAlsb25nIGxvbmcgZ2Z4X21lbV9zaXplID0gOCAqIE1COwogCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlvdXRsKFBJSVhfU1BFQ0lBTF9TVE9QLCAweENGQyk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHZpc3dzX2dldF9zbXBfY29uZmlnX3F1aXJrKHVuc2lnbmVkIGludCBlYXJseSkKK3N0YXRpYyBpbnQgX19pbml0IHZpc3dzX2dldF9zbXBfY29uZmlnKHVuc2lnbmVkIGludCBlYXJseSkKIHsKIAkvKgogCSAqIFByZXZlbnQgTVAtdGFibGUgcGFyc2luZyBieSB0aGUgZ2VuZXJpYyBjb2RlOgpAQCAtMTkyLDcgKzE5Miw3IEBACiAgKiBObyBwcm9ibGVtIGZvciBMaW51eC4KICAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXQgTVBfcHJvY2Vzc29yX2luZm8gKHN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbSkKK3N0YXRpYyB2b2lkIF9faW5pdCBNUF9wcm9jZXNzb3JfaW5mbyhzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0pCiB7CiAJaW50IHZlciwgbG9naWNhbF9hcGljaWQ7CiAJcGh5c2lkX21hc2tfdCBhcGljX2NwdXM7CkBAIC0yMzIsNyArMjMyLDcgQEAKIAlhcGljX3ZlcnNpb25bbS0+bXBjX2FwaWNpZF0gPSB2ZXI7CiB9CiAKLWludCBfX2luaXQgdmlzd3NfZmluZF9zbXBfY29uZmlnX3F1aXJrKHVuc2lnbmVkIGludCByZXNlcnZlKQorc3RhdGljIGludCBfX2luaXQgdmlzd3NfZmluZF9zbXBfY29uZmlnKHVuc2lnbmVkIGludCByZXNlcnZlKQogewogCXN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbXAgPSBwaHlzX3RvX3ZpcnQoQ09fQ1BVX1RBQl9QSFlTKTsKIAl1bnNpZ25lZCBzaG9ydCBuY3B1cyA9IHJlYWR3KHBoeXNfdG9fdmlydChDT19DUFVfTlVNX1BIWVMpKTsKQEAgLTI1OCw3ICsyNTgsMTcgQEAKIAlyZXR1cm4gMTsKIH0KIAotZXh0ZXJuIGludCB2aXN3c190cmFwX2luaXRfcXVpcmsodm9pZCk7CitzdGF0aWMgaW50IHZpc3dzX3RyYXBfaW5pdCh2b2lkKTsKKworc3RhdGljIHN0cnVjdCB4ODZfcXVpcmtzIHZpc3dzX3g4Nl9xdWlya3MgX19pbml0ZGF0YSA9IHsKKwkuYXJjaF90aW1lX2luaXQJCT0gdmlzd3NfdGltZV9pbml0LAorCS5hcmNoX3ByZV9pbnRyX2luaXQJPSB2aXN3c19wcmVfaW50cl9pbml0LAorCS5hcmNoX21lbW9yeV9zZXR1cAk9IHZpc3dzX21lbW9yeV9zZXR1cCwKKwkuYXJjaF9pbnRyX2luaXQJCT0gTlVMTCwKKwkuYXJjaF90cmFwX2luaXQJCT0gdmlzd3NfdHJhcF9pbml0LAorCS5tYWNoX2dldF9zbXBfY29uZmlnCT0gdmlzd3NfZ2V0X3NtcF9jb25maWcsCisJLm1hY2hfZmluZF9zbXBfY29uZmlnCT0gdmlzd3NfZmluZF9zbXBfY29uZmlnLAorfTsKIAogdm9pZCBfX2luaXQgdmlzd3NfZWFybHlfZGV0ZWN0KHZvaWQpCiB7CkBAIC0yNzIsMTYgKzI4MiwxMCBAQAogCiAJLyoKIAkgKiBJbnN0YWxsIHNwZWNpYWwgcXVpcmtzIGZvciB0aW1lciwgaW50ZXJydXB0IGFuZCBtZW1vcnkgc2V0dXA6Ci0JICovCi0JYXJjaF90aW1lX2luaXRfcXVpcmsJCT0gdmlzd3NfdGltZV9pbml0X3F1aXJrOwotCWFyY2hfcHJlX2ludHJfaW5pdF9xdWlyawk9IHZpc3dzX3ByZV9pbnRyX2luaXRfcXVpcms7Ci0JYXJjaF9tZW1vcnlfc2V0dXBfcXVpcmsJCT0gdmlzd3NfbWVtb3J5X3NldHVwX3F1aXJrOwotCi0JLyoKIAkgKiBGYWxsIGJhY2sgdG8gZ2VuZXJpYyBiZWhhdmlvciBmb3IgdHJhcHM6CisJICogT3ZlcnJpZGUgZ2VuZXJpYyBNUC10YWJsZSBwYXJzaW5nOgogCSAqLwotCWFyY2hfaW50cl9pbml0X3F1aXJrCQk9IE5VTEw7Ci0JYXJjaF90cmFwX2luaXRfcXVpcmsJCT0gdmlzd3NfdHJhcF9pbml0X3F1aXJrOworCXg4Nl9xdWlya3MgPSAmdmlzd3NfeDg2X3F1aXJrczsKIAogCS8qCiAJICogSW5zdGFsbCByZWJvb3QgcXVpcmtzOgpAQCAtMjk0LDEyICsyOTgsNiBAQAogCSAqLwogCW5vX2Jyb2FkY2FzdCA9IDA7CiAKLQkvKgotCSAqIE92ZXJyaWRlIGdlbmVyaWMgTVAtdGFibGUgcGFyc2luZzoKLQkgKi8KLQltYWNoX2dldF9zbXBfY29uZmlnX3F1aXJrCT0gdmlzd3NfZ2V0X3NtcF9jb25maWdfcXVpcms7Ci0JbWFjaF9maW5kX3NtcF9jb25maWdfcXVpcmsJPSB2aXN3c19maW5kX3NtcF9jb25maWdfcXVpcms7Ci0KICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAkvKgogCSAqIFR1cm4gb2ZmIElPLUFQSUMgZGV0ZWN0aW9uIGFuZCBpbml0aWFsaXphdGlvbjoKQEAgLTQyNiw3ICs0MjQsNyBAQAogCQljb19hcGljX3JlYWQoQ09fQVBJQ19JRCkpOwogfQogCi1pbnQgX19pbml0IHZpc3dzX3RyYXBfaW5pdF9xdWlyayh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdmlzd3NfdHJhcF9pbml0KHZvaWQpCiB7CiAJbGl0aGl1bV9pbml0KCk7CiAJY29iYWx0X2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwppbmRleCBiMTUzNDYwLi4wYTFiMWE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCkBAIC05MDYsNyArOTA2LDYgQEAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAlwYXJhX2ZpbGwocHZfYXBpY19vcHMuYXBpY19yZWFkLCBBUElDUmVhZCk7CiAJcGFyYV9maWxsKHB2X2FwaWNfb3BzLmFwaWNfd3JpdGUsIEFQSUNXcml0ZSk7Ci0JcGFyYV9maWxsKHB2X2FwaWNfb3BzLmFwaWNfd3JpdGVfYXRvbWljLCBBUElDV3JpdGUpOwogI2VuZGlmCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL01ha2VmaWxlIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCmluZGV4IGM5N2QzNWMuLmQwZTk0MGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKQEAgLTIsNyArMiw4IEBACiAjIE1ha2VmaWxlIGZvciBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIG1vZHVsZQogIwogCi1jb21tb24tb2JqcyA9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX21haW4ubyBpb2FwaWMubykKK2NvbW1vbi1vYmpzID0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBrdm1fbWFpbi5vIGlvYXBpYy5vIFwKKyAgICAgICAgICAgICAgICBjb2FsZXNjZWRfbW1pby5vKQogaWZlcSAoJChDT05GSUdfS1ZNX1RSQUNFKSx5KQogY29tbW9uLW9ianMgKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBrdm1fdHJhY2UubykKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCmluZGV4IDM4MjlhYTcuLmMwZjc4NzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCkBAIC05MSw3ICs5MSw3IEBACiAJYy0+Z2F0ZSA9IHZhbDsKIH0KIAotaW50IHBpdF9nZXRfZ2F0ZShzdHJ1Y3Qga3ZtICprdm0sIGludCBjaGFubmVsKQorc3RhdGljIGludCBwaXRfZ2V0X2dhdGUoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY2hhbm5lbCkKIHsKIAlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jaykpOwogCkBAIC0xOTMsMTkgKzE5MywxNiBAQAogCX0KIH0KIAotaW50IF9fcGl0X3RpbWVyX2ZuKHN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHMpCitzdGF0aWMgaW50IF9fcGl0X3RpbWVyX2ZuKHN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHMpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1MCA9IHBzLT5waXQtPmt2bS0+dmNwdXNbMF07CiAJc3RydWN0IGt2bV9rcGl0X3RpbWVyICpwdCA9ICZwcy0+cGl0X3RpbWVyOwogCi0JYXRvbWljX2luYygmcHQtPnBlbmRpbmcpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCWlmICh2Y3B1MCkgeworCWlmICghYXRvbWljX2luY19hbmRfdGVzdCgmcHQtPnBlbmRpbmcpKQogCQlzZXRfYml0KEtWTV9SRVFfUEVORElOR19USU1FUiwgJnZjcHUwLT5yZXF1ZXN0cyk7Ci0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1MC0+d3EpKSB7Ci0JCQl2Y3B1MC0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdmNwdTAtPndxKTsKLQkJfQorCWlmICh2Y3B1MCAmJiB3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1MC0+d3EpKSB7CisJCXZjcHUwLT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZjcHUwLT53cSk7CiAJfQogCiAJcHQtPnRpbWVyLmV4cGlyZXMgPSBrdGltZV9hZGRfbnMocHQtPnRpbWVyLmV4cGlyZXMsIHB0LT5wZXJpb2QpOwpAQCAtMzA4LDYgKzMwNSw3IEBACiAJCWNyZWF0ZV9waXRfdGltZXIoJnBzLT5waXRfdGltZXIsIHZhbCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMjoKKwljYXNlIDM6CiAJCWNyZWF0ZV9waXRfdGltZXIoJnBzLT5waXRfdGltZXIsIHZhbCwgMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC00NTksNyArNDU3LDggQEAKIAltdXRleF91bmxvY2soJnBpdF9zdGF0ZS0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgcGl0X2luX3JhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyKQorc3RhdGljIGludCBwaXRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsCisJCQlpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCiB7CiAJcmV0dXJuICgoYWRkciA+PSBLVk1fUElUX0JBU0VfQUREUkVTUykgJiYKIAkJKGFkZHIgPCBLVk1fUElUX0JBU0VfQUREUkVTUyArIEtWTV9QSVRfTUVNX0xFTkdUSCkpOwpAQCAtNTAwLDcgKzQ5OSw4IEBACiAJbXV0ZXhfdW5sb2NrKCZwaXRfc3RhdGUtPmxvY2spOwogfQogCi1zdGF0aWMgaW50IHNwZWFrZXJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIpCitzdGF0aWMgaW50IHNwZWFrZXJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsCisJCQkgICAgaW50IGxlbiwgaW50IGlzX3dyaXRlKQogewogCXJldHVybiAoYWRkciA9PSBLVk1fU1BFQUtFUl9CQVNFX0FERFJFU1MpOwogfQpAQCAtNTc1LDcgKzU3NSw3IEBACiAJfQogfQogCi12b2lkIF9faW5qZWN0X3BpdF90aW1lcl9pbnRyKHN0cnVjdCBrdm0gKmt2bSkKK3N0YXRpYyB2b2lkIF9faW5qZWN0X3BpdF90aW1lcl9pbnRyKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAltdXRleF9sb2NrKCZrdm0tPmxvY2spOwogCWt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgMCwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTkuYyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCmluZGV4IGFiMjljZjIuLmMzMTE2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1OS5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCkBAIC0xMzAsOCArMTMwLDEwIEBACiB7CiAJc3RydWN0IGt2bV9waWMgKnMgPSBvcGFxdWU7CiAKLQlwaWNfc2V0X2lycTEoJnMtPnBpY3NbaXJxID4+IDNdLCBpcnEgJiA3LCBsZXZlbCk7Ci0JcGljX3VwZGF0ZV9pcnEocyk7CisJaWYgKGlycSA+PSAwICYmIGlycSA8IFBJQ19OVU1fUElOUykgeworCQlwaWNfc2V0X2lycTEoJnMtPnBpY3NbaXJxID4+IDNdLCBpcnEgJiA3LCBsZXZlbCk7CisJCXBpY191cGRhdGVfaXJxKHMpOworCX0KIH0KIAogLyoKQEAgLTM0Niw3ICszNDgsOCBAQAogCXJldHVybiBzLT5lbGNyOwogfQogCi1zdGF0aWMgaW50IHBpY2Rldl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRkcikKK3N0YXRpYyBpbnQgcGljZGV2X2luX3JhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLAorCQkJICAgaW50IGxlbiwgaW50IGlzX3dyaXRlKQogewogCXN3aXRjaCAoYWRkcikgewogCWNhc2UgMHgyMDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pcnEuaCBiL2FyY2gveDg2L2t2bS9pcnEuaAppbmRleCAyYTE1YmUyLi43Y2E0N2NiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmgKKysrIGIvYXJjaC94ODYva3ZtL2lycS5oCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiaW9hcGljLmgiCiAjaW5jbHVkZSAibGFwaWMuaCIKIAorI2RlZmluZSBQSUNfTlVNX1BJTlMgMTYKKwogc3RydWN0IGt2bTsKIHN0cnVjdCBrdm1fdmNwdTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2xhcGljLmMgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuYwppbmRleCBlYmMwM2Y1Li43M2Y0M2RlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYworKysgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuYwpAQCAtMzU2LDggKzM1Niw5IEBACiAJY2FzZSBBUElDX0RNX1NNSToKIAkJcHJpbnRrKEtFUk5fREVCVUcgIklnbm9yaW5nIGd1ZXN0IFNNSVxuIik7CiAJCWJyZWFrOworCiAJY2FzZSBBUElDX0RNX05NSToKLQkJcHJpbnRrKEtFUk5fREVCVUcgIklnbm9yaW5nIGd1ZXN0IE5NSVxuIik7CisJCWt2bV9pbmplY3Rfbm1pKHZjcHUpOwogCQlicmVhazsKIAogCWNhc2UgQVBJQ19ETV9JTklUOgpAQCAtNTcyLDYgKzU3Myw4IEBACiB7CiAJdTMyIHZhbCA9IDA7CiAKKwlLVk1UUkFDRV8xRChBUElDX0FDQ0VTUywgYXBpYy0+dmNwdSwgKHUzMilvZmZzZXQsIGhhbmRsZXIpOworCiAJaWYgKG9mZnNldCA+PSBMQVBJQ19NTUlPX0xFTkdUSCkKIAkJcmV0dXJuIDA7CiAKQEAgLTY5NSw2ICs2OTgsOCBAQAogCiAJb2Zmc2V0ICY9IDB4ZmYwOwogCisJS1ZNVFJBQ0VfMUQoQVBJQ19BQ0NFU1MsIGFwaWMtPnZjcHUsICh1MzIpb2Zmc2V0LCBoYW5kbGVyKTsKKwogCXN3aXRjaCAob2Zmc2V0KSB7CiAJY2FzZSBBUElDX0lEOgkJLyogTG9jYWwgQVBJQyBJRCAqLwogCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19JRCwgdmFsKTsKQEAgLTc4MCw3ICs3ODUsOCBAQAogCiB9CiAKLXN0YXRpYyBpbnQgYXBpY19tbWlvX3JhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyKQorc3RhdGljIGludCBhcGljX21taW9fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsCisJCQkgICBpbnQgbGVuLCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gKHN0cnVjdCBrdm1fbGFwaWMgKil0aGlzLT5wcml2YXRlOwogCWludCByZXQgPSAwOwpAQCAtOTM5LDggKzk0NSw4IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgKnEgPSAmYXBpYy0+dmNwdS0+d3E7CiAKLQlhdG9taWNfaW5jKCZhcGljLT50aW1lci5wZW5kaW5nKTsKLQlzZXRfYml0KEtWTV9SRVFfUEVORElOR19USU1FUiwgJmFwaWMtPnZjcHUtPnJlcXVlc3RzKTsKKwlpZighYXRvbWljX2luY19hbmRfdGVzdCgmYXBpYy0+dGltZXIucGVuZGluZykpCisJCXNldF9iaXQoS1ZNX1JFUV9QRU5ESU5HX1RJTUVSLCAmYXBpYy0+dmNwdS0+cmVxdWVzdHMpOwogCWlmICh3YWl0cXVldWVfYWN0aXZlKHEpKSB7CiAJCWFwaWMtPnZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZShxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5oIGIvYXJjaC94ODYva3ZtL2xhcGljLmgKaW5kZXggNjc2YzM5Ni4uODE4NTg4OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmgKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmgKQEAgLTMxLDYgKzMxLDcgQEAKIHU2NCBrdm1fbGFwaWNfZ2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fbGFwaWNfc2V0X3RwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTsKIHZvaWQga3ZtX2xhcGljX3NldF9iYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbHVlKTsKK3U2NCBrdm1fbGFwaWNfZ2V0X2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogaW50IGt2bV9hcGljX21hdGNoX3BoeXNpY2FsX2FkZHIoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgdTE2IGRlc3QpOwogaW50IGt2bV9hcGljX21hdGNoX2xvZ2ljYWxfYWRkcihzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCB1OCBtZGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IDdlN2MzOTYuLmIwZTRkZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAgLTY2LDcgKzY2LDggQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChNTVVfREVCVUcpIHx8IGRlZmluZWQoQVVESVQpCi1zdGF0aWMgaW50IGRiZyA9IDE7CitzdGF0aWMgaW50IGRiZyA9IDA7Cittb2R1bGVfcGFyYW0oZGJnLCBib29sLCAwNjQ0KTsKICNlbmRpZgogCiAjaWZuZGVmIE1NVV9ERUJVRwpAQCAtNzc2LDYgKzc3NywxNSBAQAogCUJVRygpOwogfQogCitzdGF0aWMgdm9pZCBub25wYWdpbmdfcHJlZmV0Y2hfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBUNjRfRU5UX1BFUl9QQUdFOyArK2kpCisJCXNwLT5zcHRbaV0gPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKK30KKwogc3RhdGljIHN0cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9tbXVfbG9va3VwX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7CiAJdW5zaWduZWQgaW5kZXg7CkBAIC04NDEsNyArODUxLDEwIEBACiAJaGxpc3RfYWRkX2hlYWQoJnNwLT5oYXNoX2xpbmssIGJ1Y2tldCk7CiAJaWYgKCFtZXRhcGh5c2ljYWwpCiAJCXJtYXBfd3JpdGVfcHJvdGVjdCh2Y3B1LT5rdm0sIGdmbik7Ci0JdmNwdS0+YXJjaC5tbXUucHJlZmV0Y2hfcGFnZSh2Y3B1LCBzcCk7CisJaWYgKHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlICE9IHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGUpCisJCXZjcHUtPmFyY2gubW11LnByZWZldGNoX3BhZ2UodmNwdSwgc3ApOworCWVsc2UKKwkJbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2UodmNwdSwgc3ApOwogCXJldHVybiBzcDsKIH0KIApAQCAtOTE3LDE0ICs5MzAsMTcgQEAKIAl9CiAJa3ZtX21tdV9wYWdlX3VubGlua19jaGlsZHJlbihrdm0sIHNwKTsKIAlpZiAoIXNwLT5yb290X2NvdW50KSB7Ci0JCWlmICghc3AtPnJvbGUubWV0YXBoeXNpY2FsKQorCQlpZiAoIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCAmJiAhc3AtPnJvbGUuaW52YWxpZCkKIAkJCXVuYWNjb3VudF9zaGFkb3dlZChrdm0sIHNwLT5nZm4pOwogCQlobGlzdF9kZWwoJnNwLT5oYXNoX2xpbmspOwogCQlrdm1fbW11X2ZyZWVfcGFnZShrdm0sIHNwKTsKIAl9IGVsc2UgeworCQlpbnQgaW52YWxpZCA9IHNwLT5yb2xlLmludmFsaWQ7CiAJCWxpc3RfbW92ZSgmc3AtPmxpbmssICZrdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcyk7CiAJCXNwLT5yb2xlLmludmFsaWQgPSAxOwogCQlrdm1fcmVsb2FkX3JlbW90ZV9tbXVzKGt2bSk7CisJCWlmICghc3AtPnJvbGUubWV0YXBoeXNpY2FsICYmICFpbnZhbGlkKQorCQkJdW5hY2NvdW50X3NoYWRvd2VkKGt2bSwgc3AtPmdmbik7CiAJfQogCWt2bV9tbXVfcmVzZXRfbGFzdF9wdGVfdXBkYXRlZChrdm0pOwogfQpAQCAtMTEwMyw3ICsxMTE5LDcgQEAKIAkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgZ2ZuKTsKIAogCXBncHJpbnRrKCIlczogc2V0dGluZyBzcHRlICVsbHhcbiIsIF9fZnVuY19fLCBzcHRlKTsKLQlwZ3ByaW50aygiaW5zdGFudGlhdGluZyAlcyBQVEUgKCVzKSBhdCAlZCAoJWxseCkgYWRkciAlbGx4XG4iLAorCXBncHJpbnRrKCJpbnN0YW50aWF0aW5nICVzIFBURSAoJXMpIGF0ICVsZCAoJWxseCkgYWRkciAlcFxuIiwKIAkJIChzcHRlJlBUX1BBR0VfU0laRV9NQVNLKT8gIjJNQiIgOiAiNGtCIiwKIAkJIChzcHRlJlBUX1dSSVRBQkxFX01BU0spPyJSVyI6IlIiLCBnZm4sIHNwdGUsIHNoYWRvd19wdGUpOwogCXNldF9zaGFkb3dfcHRlKHNoYWRvd19wdGUsIHNwdGUpOwpAQCAtMTEyMiw4ICsxMTM4LDEwIEBACiAJCWVsc2UKIAkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOwogCX0KLQlpZiAoIXB0d3JpdGUgfHwgISpwdHdyaXRlKQorCWlmIChzcGVjdWxhdGl2ZSkgewogCQl2Y3B1LT5hcmNoLmxhc3RfcHRlX3VwZGF0ZWQgPSBzaGFkb3dfcHRlOworCQl2Y3B1LT5hcmNoLmxhc3RfcHRlX2dmbiA9IGdmbjsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIG5vbnBhZ2luZ19uZXdfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTExNzEsOSArMTE4OSwxMCBAQAogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCi0JCQl0YWJsZVtpbmRleF0gPSBfX3BhKG5ld190YWJsZS0+c3B0KQotCQkJCXwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSwotCQkJCXwgc2hhZG93X3VzZXJfbWFzayB8IHNoYWRvd194X21hc2s7CisJCQlzZXRfc2hhZG93X3B0ZSgmdGFibGVbaW5kZXhdLAorCQkJCSAgICAgICBfX3BhKG5ld190YWJsZS0+c3B0KQorCQkJCSAgICAgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKKwkJCQkgICAgICAgfCBzaGFkb3dfdXNlcl9tYXNrIHwgc2hhZG93X3hfbWFzayk7CiAJCX0KIAkJdGFibGVfYWRkciA9IHRhYmxlW2luZGV4XSAmIFBUNjRfQkFTRV9BRERSX01BU0s7CiAJfQpAQCAtMTIxMSwxNSArMTIzMCw2IEBACiB9CiAKIAotc3RhdGljIHZvaWQgbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKQotCQlzcC0+c3B0W2ldID0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGU7Ci19Ci0KIHN0YXRpYyB2b2lkIG1tdV9mcmVlX3Jvb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnQgaTsKQEAgLTE2NzEsNiArMTY4MSwxOCBAQAogCXZjcHUtPmFyY2gudXBkYXRlX3B0ZS5wZm4gPSBwZm47CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV9tbXVfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pCit7CisJdTY0ICpzcHRlID0gdmNwdS0+YXJjaC5sYXN0X3B0ZV91cGRhdGVkOworCisJaWYgKHNwdGUKKwkgICAgJiYgdmNwdS0+YXJjaC5sYXN0X3B0ZV9nZm4gPT0gZ2ZuCisJICAgICYmIHNoYWRvd19hY2Nlc3NlZF9tYXNrCisJICAgICYmICEoKnNwdGUgJiBzaGFkb3dfYWNjZXNzZWRfbWFzaykKKwkgICAgJiYgaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlKSkKKwkJc2V0X2JpdChQVF9BQ0NFU1NFRF9TSElGVCwgKHVuc2lnbmVkIGxvbmcgKilzcHRlKTsKK30KKwogdm9pZCBrdm1fbW11X3B0ZV93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwKIAkJICAgICAgIGNvbnN0IHU4ICpuZXcsIGludCBieXRlcykKIHsKQEAgLTE2OTQsNiArMTcxNiw3IEBACiAJcGdwcmludGsoIiVzOiBncGEgJWxseCBieXRlcyAlZFxuIiwgX19mdW5jX18sIGdwYSwgYnl0ZXMpOwogCW1tdV9ndWVzc19wYWdlX2Zyb21fcHRlX3dyaXRlKHZjcHUsIGdwYSwgbmV3LCBieXRlcyk7CiAJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKKwlrdm1fbW11X2FjY2Vzc19wYWdlKHZjcHUsIGdmbik7CiAJa3ZtX21tdV9mcmVlX3NvbWVfcGFnZXModmNwdSk7CiAJKyt2Y3B1LT5rdm0tPnN0YXQubW11X3B0ZV93cml0ZTsKIAlrdm1fbW11X2F1ZGl0KHZjcHUsICJwcmUgcHRlIHdyaXRlIik7CkBAIC0xOTQ4LDcgKzE5NzEsNyBAQAogCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwogfQogCi12b2lkIGt2bV9tbXVfcmVtb3ZlX29uZV9hbGxvY19tbXVfcGFnZShzdHJ1Y3Qga3ZtICprdm0pCitzdGF0aWMgdm9pZCBrdm1fbW11X3JlbW92ZV9vbmVfYWxsb2NfbW11X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2U7CiAKQEAgLTE5NjgsNiArMTk5MSw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShrdm0sICZ2bV9saXN0LCB2bV9saXN0KSB7CiAJCWludCBucGFnZXM7CiAKKwkJaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygma3ZtLT5zbG90c19sb2NrKSkKKwkJCWNvbnRpbnVlOwogCQlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOwogCQlucGFnZXMgPSBrdm0tPmFyY2gubl9hbGxvY19tbXVfcGFnZXMgLQogCQkJIGt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzOwpAQCAtMTk4MCw2ICsyMDA1LDcgQEAKIAkJbnJfdG9fc2Nhbi0tOwogCiAJCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKKwkJdXBfcmVhZCgma3ZtLT5zbG90c19sb2NrKTsKIAl9CiAJaWYgKGt2bV9mcmVlZCkKIAkJbGlzdF9tb3ZlX3RhaWwoJmt2bV9mcmVlZC0+dm1fbGlzdCwgJnZtX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oCmluZGV4IDE3MzA3NTcuLjI1OGU1ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaAorKysgYi9hcmNoL3g4Ni9rdm0vbW11LmgKQEAgLTE1LDcgKzE1LDggQEAKICNkZWZpbmUgUFRfVVNFUl9NQVNLICgxVUxMIDw8IDIpCiAjZGVmaW5lIFBUX1BXVF9NQVNLICgxVUxMIDw8IDMpCiAjZGVmaW5lIFBUX1BDRF9NQVNLICgxVUxMIDw8IDQpCi0jZGVmaW5lIFBUX0FDQ0VTU0VEX01BU0sgKDFVTEwgPDwgNSkKKyNkZWZpbmUgUFRfQUNDRVNTRURfU0hJRlQgNQorI2RlZmluZSBQVF9BQ0NFU1NFRF9NQVNLICgxVUxMIDw8IFBUX0FDQ0VTU0VEX1NISUZUKQogI2RlZmluZSBQVF9ESVJUWV9NQVNLICgxVUxMIDw8IDYpCiAjZGVmaW5lIFBUX1BBR0VfU0laRV9NQVNLICgxVUxMIDw8IDcpCiAjZGVmaW5lIFBUX1BBVF9NQVNLICgxVUxMIDw8IDcpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IDkzNGM3YjYuLjRkOTE4MjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC00NjAsOCArNDYwLDkgQEAKIHN0YXRpYyB2b2lkIEZOQU1FKHByZWZldGNoX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiB7Ci0JaW50IGksIG9mZnNldCA9IDAsIHIgPSAwOwotCXB0X2VsZW1lbnRfdCBwdDsKKwlpbnQgaSwgaiwgb2Zmc2V0LCByOworCXB0X2VsZW1lbnRfdCBwdFsyNTYgLyBzaXplb2YocHRfZWxlbWVudF90KV07CisJZ3BhX3QgcHRlX2dwYTsKIAogCWlmIChzcC0+cm9sZS5tZXRhcGh5c2ljYWwKIAkgICAgfHwgKFBUVFlQRSA9PSAzMiAmJiBzcC0+cm9sZS5sZXZlbCA+IFBUX1BBR0VfVEFCTEVfTEVWRUwpKSB7CkBAIC00NjksMTkgKzQ3MCwyMCBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKFBUVFlQRSA9PSAzMikKKwlwdGVfZ3BhID0gZ2ZuX3RvX2dwYShzcC0+Z2ZuKTsKKwlpZiAoUFRUWVBFID09IDMyKSB7CiAJCW9mZnNldCA9IHNwLT5yb2xlLnF1YWRyYW50IDw8IFBUNjRfTEVWRUxfQklUUzsKKwkJcHRlX2dwYSArPSBvZmZzZXQgKiBzaXplb2YocHRfZWxlbWVudF90KTsKKwl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgUFQ2NF9FTlRfUEVSX1BBR0U7ICsraSkgewotCQlncGFfdCBwdGVfZ3BhID0gZ2ZuX3RvX2dwYShzcC0+Z2ZuKTsKLQkJcHRlX2dwYSArPSAoaStvZmZzZXQpICogc2l6ZW9mKHB0X2VsZW1lbnRfdCk7Ci0KLQkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIHB0ZV9ncGEsICZwdCwKLQkJCQkJICBzaXplb2YocHRfZWxlbWVudF90KSk7Ci0JCWlmIChyIHx8IGlzX3ByZXNlbnRfcHRlKHB0KSkKLQkJCXNwLT5zcHRbaV0gPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKLQkJZWxzZQotCQkJc3AtPnNwdFtpXSA9IHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGU7CisJZm9yIChpID0gMDsgaSA8IFBUNjRfRU5UX1BFUl9QQUdFOyBpICs9IEFSUkFZX1NJWkUocHQpKSB7CisJCXIgPSBrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBwdGVfZ3BhLCBwdCwgc2l6ZW9mIHB0KTsKKwkJcHRlX2dwYSArPSBBUlJBWV9TSVpFKHB0KSAqIHNpemVvZihwdF9lbGVtZW50X3QpOworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwdCk7ICsraikKKwkJCWlmIChyIHx8IGlzX3ByZXNlbnRfcHRlKHB0W2pdKSkKKwkJCQlzcC0+c3B0W2kral0gPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKKwkJCWVsc2UKKwkJCQlzcC0+c3B0W2kral0gPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IDZiMGQ1ZmEuLmI3NTZlODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAKKyNkZWZpbmUgX19leCh4KSBfX2t2bV9oYW5kbGVfZmF1bHRfb25fcmVib290KHgpCisKIE1PRFVMRV9BVVRIT1IoIlF1bXJhbmV0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTEyOSwxNyArMTMxLDE3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGdpKHZvaWQpCiB7Ci0JYXNtIHZvbGF0aWxlIChTVk1fQ0xHSSk7CisJYXNtIHZvbGF0aWxlIChfX2V4KFNWTV9DTEdJKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdGdpKHZvaWQpCiB7Ci0JYXNtIHZvbGF0aWxlIChTVk1fU1RHSSk7CisJYXNtIHZvbGF0aWxlIChfX2V4KFNWTV9TVEdJKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZscGdhKHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIGFzaWQpCiB7Ci0JYXNtIHZvbGF0aWxlIChTVk1fSU5WTFBHQSA6OiAiYSIoYWRkciksICJjIihhc2lkKSk7CisJYXNtIHZvbGF0aWxlIChfX2V4KFNWTV9JTlZMUEdBKSA6OiAiYSIoYWRkciksICJjIihhc2lkKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdm1fcmVhZF9jcjIodm9pZCkKQEAgLTI3MCwxOSArMjcyLDExIEBACiAKIHN0YXRpYyB2b2lkIHN2bV9oYXJkd2FyZV9kaXNhYmxlKHZvaWQgKmdhcmJhZ2UpCiB7Ci0Jc3RydWN0IHN2bV9jcHVfZGF0YSAqc3ZtX2RhdGEKLQkJPSBwZXJfY3B1KHN2bV9kYXRhLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl1aW50NjRfdCBlZmVyOwogCi0JaWYgKHN2bV9kYXRhKSB7Ci0JCXVpbnQ2NF90IGVmZXI7Ci0KLQkJd3Jtc3JsKE1TUl9WTV9IU0FWRV9QQSwgMCk7Ci0JCXJkbXNybChNU1JfRUZFUiwgZWZlcik7Ci0JCXdybXNybChNU1JfRUZFUiwgZWZlciAmIH5NU1JfRUZFUl9TVk1FX01BU0spOwotCQlwZXJfY3B1KHN2bV9kYXRhLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IE5VTEw7Ci0JCV9fZnJlZV9wYWdlKHN2bV9kYXRhLT5zYXZlX2FyZWEpOwotCQlrZnJlZShzdm1fZGF0YSk7Ci0JfQorCXdybXNybChNU1JfVk1fSFNBVkVfUEEsIDApOworCXJkbXNybChNU1JfRUZFUiwgZWZlcik7CisJd3Jtc3JsKE1TUl9FRkVSLCBlZmVyICYgfk1TUl9FRkVSX1NWTUVfTUFTSyk7CiB9CiAKIHN0YXRpYyB2b2lkIHN2bV9oYXJkd2FyZV9lbmFibGUodm9pZCAqZ2FyYmFnZSkKQEAgLTMyMSw2ICszMTUsMTkgQEAKIAkgICAgICAgcGFnZV90b19wZm4oc3ZtX2RhdGEtPnNhdmVfYXJlYSkgPDwgUEFHRV9TSElGVCk7CiB9CiAKK3N0YXRpYyB2b2lkIHN2bV9jcHVfdW5pbml0KGludCBjcHUpCit7CisJc3RydWN0IHN2bV9jcHVfZGF0YSAqc3ZtX2RhdGEKKwkJPSBwZXJfY3B1KHN2bV9kYXRhLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCWlmICghc3ZtX2RhdGEpCisJCXJldHVybjsKKworCXBlcl9jcHUoc3ZtX2RhdGEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpID0gTlVMTDsKKwlfX2ZyZWVfcGFnZShzdm1fZGF0YS0+c2F2ZV9hcmVhKTsKKwlrZnJlZShzdm1fZGF0YSk7Cit9CisKIHN0YXRpYyBpbnQgc3ZtX2NwdV9pbml0KGludCBjcHUpCiB7CiAJc3RydWN0IHN2bV9jcHVfZGF0YSAqc3ZtX2RhdGE7CkBAIC00NTgsNiArNDY1LDExIEBACiAKIHN0YXRpYyBfX2V4aXQgdm9pZCBzdm1faGFyZHdhcmVfdW5zZXR1cCh2b2lkKQogeworCWludCBjcHU7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJc3ZtX2NwdV91bmluaXQoY3B1KTsKKwogCV9fZnJlZV9wYWdlcyhwZm5fdG9fcGFnZShpb3BtX2Jhc2UgPj4gUEFHRV9TSElGVCksIElPUE1fQUxMT0NfT1JERVIpOwogCWlvcG1fYmFzZSA9IDA7CiB9CkBAIC03MDcsMTAgKzcxOSw2IEBACiAJcmR0c2NsbCh2Y3B1LT5hcmNoLmhvc3RfdHNjKTsKIH0KIAotc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZGVjYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHN2bV9jYWNoZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKQEAgLTk0OSw3ICs5NTcsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKQogewotCXJldHVybiB0b19zdm0odmNwdSktPmRiX3JlZ3NbZHJdOworCXVuc2lnbmVkIGxvbmcgdmFsID0gdG9fc3ZtKHZjcHUpLT5kYl9yZWdzW2RyXTsKKwlLVk1UUkFDRV8yRChEUl9SRUFELCB2Y3B1LCAodTMyKWRyLCAodTMyKXZhbCwgaGFuZGxlcik7CisJcmV0dXJuIHZhbDsKIH0KIAogc3RhdGljIHZvaWQgc3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWx1ZSwKQEAgLTEwMDQsNiArMTAxNCwxNiBAQAogCiAJZmF1bHRfYWRkcmVzcyAgPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzI7CiAJZXJyb3JfY29kZSA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMTsKKworCWlmICghbnB0X2VuYWJsZWQpCisJCUtWTVRSQUNFXzNEKFBBR0VfRkFVTFQsICZzdm0tPnZjcHUsIGVycm9yX2NvZGUsCisJCQkgICAgKHUzMilmYXVsdF9hZGRyZXNzLCAodTMyKShmYXVsdF9hZGRyZXNzID4+IDMyKSwKKwkJCSAgICBoYW5kbGVyKTsKKwllbHNlCisJCUtWTVRSQUNFXzNEKFREUF9GQVVMVCwgJnN2bS0+dmNwdSwgZXJyb3JfY29kZSwKKwkJCSAgICAodTMyKWZhdWx0X2FkZHJlc3MsICh1MzIpKGZhdWx0X2FkZHJlc3MgPj4gMzIpLAorCQkJICAgIGhhbmRsZXIpOworCiAJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCgmc3ZtLT52Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlKTsKIH0KIApAQCAtMTA4MSw2ICsxMTAxLDE5IEBACiAJcmV0dXJuIGt2bV9lbXVsYXRlX3Bpbygmc3ZtLT52Y3B1LCBrdm1fcnVuLCBpbiwgc2l6ZSwgcG9ydCk7CiB9CiAKK3N0YXRpYyBpbnQgbm1pX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJS1ZNVFJBQ0VfMEQoTk1JLCAmc3ZtLT52Y3B1LCBoYW5kbGVyKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpbnRyX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJKytzdm0tPnZjcHUuc3RhdC5pcnFfZXhpdHM7CisJS1ZNVFJBQ0VfMEQoSU5UUiwgJnN2bS0+dmNwdSwgaGFuZGxlcik7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgbm9wX29uX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJcmV0dXJuIDE7CkBAIC0xMjE5LDYgKzEyNTIsOSBAQAogCWlmIChzdm1fZ2V0X21zcigmc3ZtLT52Y3B1LCBlY3gsICZkYXRhKSkKIAkJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKIAllbHNlIHsKKwkJS1ZNVFJBQ0VfM0QoTVNSX1JFQUQsICZzdm0tPnZjcHUsIGVjeCwgKHUzMilkYXRhLAorCQkJICAgICh1MzIpKGRhdGEgPj4gMzIpLCBoYW5kbGVyKTsKKwogCQlzdm0tPnZtY2ItPnNhdmUucmF4ID0gZGF0YSAmIDB4ZmZmZmZmZmY7CiAJCXN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSBkYXRhID4+IDMyOwogCQlzdm0tPm5leHRfcmlwID0gc3ZtLT52bWNiLT5zYXZlLnJpcCArIDI7CkBAIC0xMjg0LDE2ICsxMzIwLDE5IEBACiAJY2FzZSBNU1JfSzdfRVZOVFNFTDE6CiAJY2FzZSBNU1JfSzdfRVZOVFNFTDI6CiAJY2FzZSBNU1JfSzdfRVZOVFNFTDM6CisJY2FzZSBNU1JfSzdfUEVSRkNUUjA6CisJY2FzZSBNU1JfSzdfUEVSRkNUUjE6CisJY2FzZSBNU1JfSzdfUEVSRkNUUjI6CisJY2FzZSBNU1JfSzdfUEVSRkNUUjM6CiAJCS8qCi0JCSAqIG9ubHkgc3VwcG9ydCB3cml0aW5nIDAgdG8gdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGZvciBub3cKLQkJICogdG8gbWFrZSBXaW5kb3dzIGhhcHB5LiBTaG91bGQgYmUgcmVwbGFjZWQgYnkgYSByZWFsCi0JCSAqIHBlcmZvcm1hbmNlIGNvdW50ZXIgZW11bGF0aW9uIGxhdGVyLgorCQkgKiBKdXN0IGRpc2NhcmQgYWxsIHdyaXRlcyB0byB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnM7IHRoaXMKKwkJICogc2hvdWxkIGtlZXAgYm90aCBvbGRlciBsaW51eCBhbmQgd2luZG93cyA2NC1iaXQgZ3Vlc3RzCisJCSAqIGhhcHB5CiAJCSAqLwotCQlpZiAoZGF0YSAhPSAwKQotCQkJZ290byB1bmhhbmRsZWQ7CisJCXByX3VuaW1wbCh2Y3B1LCAidW5pbXBsZW1lbnRlZCBwZXJmY3RyIHdybXNyOiAweCV4IGRhdGEgMHglbGx4XG4iLCBlY3gsIGRhdGEpOworCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JdW5oYW5kbGVkOgogCQlyZXR1cm4ga3ZtX3NldF9tc3JfY29tbW9uKHZjcHUsIGVjeCwgZGF0YSk7CiAJfQogCXJldHVybiAwOwpAQCAtMTMwNCw2ICsxMzQzLDEwIEBACiAJdTMyIGVjeCA9IHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07CiAJdTY0IGRhdGEgPSAoc3ZtLT52bWNiLT5zYXZlLnJheCAmIC0xdSkKIAkJfCAoKHU2NCkoc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXSAmIC0xdSkgPDwgMzIpOworCisJS1ZNVFJBQ0VfM0QoTVNSX1dSSVRFLCAmc3ZtLT52Y3B1LCBlY3gsICh1MzIpZGF0YSwgKHUzMikoZGF0YSA+PiAzMiksCisJCSAgICBoYW5kbGVyKTsKKwogCXN2bS0+bmV4dF9yaXAgPSBzdm0tPnZtY2ItPnNhdmUucmlwICsgMjsKIAlpZiAoc3ZtX3NldF9tc3IoJnN2bS0+dmNwdSwgZWN4LCBkYXRhKSkKIAkJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKQEAgLTEzMjMsNiArMTM2Niw4IEBACiBzdGF0aWMgaW50IGludGVycnVwdF93aW5kb3dfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogeworCUtWTVRSQUNFXzBEKFBFTkRfSU5UUiwgJnN2bS0+dmNwdSwgaGFuZGxlcik7CisKIAlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICY9IH4oMVVMTCA8PCBJTlRFUkNFUFRfVklOVFIpOwogCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsICY9IH5WX0lSUV9NQVNLOwogCS8qCkBAIC0xMzY0LDggKzE0MDksOCBAQAogCVtTVk1fRVhJVF9FWENQX0JBU0UgKyBQRl9WRUNUT1JdIAk9IHBmX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgTk1fVkVDVE9SXSAJPSBubV9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIE1DX1ZFQ1RPUl0gCT0gbWNfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9JTlRSXSAJCQk9IG5vcF9vbl9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX05NSV0JCQkJPSBub3Bfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9JTlRSXSAJCQk9IGludHJfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9OTUldCQkJCT0gbm1pX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfU01JXQkJCQk9IG5vcF9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0lOSVRdCQkJCT0gbm9wX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfVklOVFJdCQkJPSBpbnRlcnJ1cHRfd2luZG93X2ludGVyY2VwdGlvbiwKQEAgLTEzOTcsNiArMTQ0Miw5IEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAJdTMyIGV4aXRfY29kZSA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGU7CiAKKwlLVk1UUkFDRV8zRChWTUVYSVQsIHZjcHUsIGV4aXRfY29kZSwgKHUzMilzdm0tPnZtY2ItPnNhdmUucmlwLAorCQkgICAgKHUzMikoKHU2NClzdm0tPnZtY2ItPnNhdmUucmlwID4+IDMyKSwgZW50cnlleGl0KTsKKwogCWlmIChucHRfZW5hYmxlZCkgewogCQlpbnQgbW11X3JlbG9hZCA9IDA7CiAJCWlmICgodmNwdS0+YXJjaC5jcjAgXiBzdm0tPnZtY2ItPnNhdmUuY3IwKSAmIFg4Nl9DUjBfUEcpIHsKQEAgLTE0NzAsNiArMTUxOCw4IEBACiB7CiAJc3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sOwogCisJS1ZNVFJBQ0VfMUQoSU5KX1ZJUlEsICZzdm0tPnZjcHUsICh1MzIpaXJxLCBoYW5kbGVyKTsKKwogCWNvbnRyb2wgPSAmc3ZtLT52bWNiLT5jb250cm9sOwogCWNvbnRyb2wtPmludF92ZWN0b3IgPSBpcnE7CiAJY29udHJvbC0+aW50X2N0bCAmPSB+Vl9JTlRSX1BSSU9fTUFTSzsKQEAgLTE2NjAsOSArMTcxMCw5IEBACiAJc3luY19sYXBpY190b19jcjgodmNwdSk7CiAKIAlzYXZlX2hvc3RfbXNycyh2Y3B1KTsKLQlmc19zZWxlY3RvciA9IHJlYWRfZnMoKTsKLQlnc19zZWxlY3RvciA9IHJlYWRfZ3MoKTsKLQlsZHRfc2VsZWN0b3IgPSByZWFkX2xkdCgpOworCWZzX3NlbGVjdG9yID0ga3ZtX3JlYWRfZnMoKTsKKwlnc19zZWxlY3RvciA9IGt2bV9yZWFkX2dzKCk7CisJbGR0X3NlbGVjdG9yID0ga3ZtX3JlYWRfbGR0KCk7CiAJc3ZtLT5ob3N0X2NyMiA9IGt2bV9yZWFkX2NyMigpOwogCXN2bS0+aG9zdF9kcjYgPSByZWFkX2RyNigpOwogCXN2bS0+aG9zdF9kcjcgPSByZWFkX2RyNygpOwpAQCAtMTcxNiwxNyArMTc2NiwxNyBAQAogCQkvKiBFbnRlciBndWVzdCBtb2RlICovCiAJCSJwdXNoICUlcmF4IFxuXHQiCiAJCSJtb3YgJWNbdm1jYl0oJVtzdm1dKSwgJSVyYXggXG5cdCIKLQkJU1ZNX1ZNTE9BRCAiXG5cdCIKLQkJU1ZNX1ZNUlVOICJcblx0IgotCQlTVk1fVk1TQVZFICJcblx0IgorCQlfX2V4KFNWTV9WTUxPQUQpICJcblx0IgorCQlfX2V4KFNWTV9WTVJVTikgIlxuXHQiCisJCV9fZXgoU1ZNX1ZNU0FWRSkgIlxuXHQiCiAJCSJwb3AgJSVyYXggXG5cdCIKICNlbHNlCiAJCS8qIEVudGVyIGd1ZXN0IG1vZGUgKi8KIAkJInB1c2ggJSVlYXggXG5cdCIKIAkJIm1vdiAlY1t2bWNiXSglW3N2bV0pLCAlJWVheCBcblx0IgotCQlTVk1fVk1MT0FEICJcblx0IgotCQlTVk1fVk1SVU4gIlxuXHQiCi0JCVNWTV9WTVNBVkUgIlxuXHQiCisJCV9fZXgoU1ZNX1ZNTE9BRCkgIlxuXHQiCisJCV9fZXgoU1ZNX1ZNUlVOKSAiXG5cdCIKKwkJX19leChTVk1fVk1TQVZFKSAiXG5cdCIKIAkJInBvcCAlJWVheCBcblx0IgogI2VuZGlmCiAKQEAgLTE3OTUsOSArMTg0NSw5IEBACiAJd3JpdGVfZHI3KHN2bS0+aG9zdF9kcjcpOwogCWt2bV93cml0ZV9jcjIoc3ZtLT5ob3N0X2NyMik7CiAKLQlsb2FkX2ZzKGZzX3NlbGVjdG9yKTsKLQlsb2FkX2dzKGdzX3NlbGVjdG9yKTsKLQlsb2FkX2xkdChsZHRfc2VsZWN0b3IpOworCWt2bV9sb2FkX2ZzKGZzX3NlbGVjdG9yKTsKKwlrdm1fbG9hZF9ncyhnc19zZWxlY3Rvcik7CisJa3ZtX2xvYWRfbGR0KGxkdF9zZWxlY3Rvcik7CiAJbG9hZF9ob3N0X21zcnModmNwdSk7CiAKIAlyZWxvYWRfdHNzKHZjcHUpOwpAQCAtMTg4OSw3ICsxOTM5LDYgQEAKIAkucHJlcGFyZV9ndWVzdF9zd2l0Y2ggPSBzdm1fcHJlcGFyZV9ndWVzdF9zd2l0Y2gsCiAJLnZjcHVfbG9hZCA9IHN2bV92Y3B1X2xvYWQsCiAJLnZjcHVfcHV0ID0gc3ZtX3ZjcHVfcHV0LAotCS52Y3B1X2RlY2FjaGUgPSBzdm1fdmNwdV9kZWNhY2hlLAogCiAJLnNldF9ndWVzdF9kZWJ1ZyA9IHN2bV9ndWVzdF9kZWJ1ZywKIAkuZ2V0X21zciA9IHN2bV9nZXRfbXNyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IDEwY2U2ZWUuLjBjYWM2MzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogCisjZGVmaW5lIF9fZXgoeCkgX19rdm1faGFuZGxlX2ZhdWx0X29uX3JlYm9vdCh4KQorCiBNT0RVTEVfQVVUSE9SKCJRdW1yYW5ldCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC01Myw2ICs1NSw3IEBACiAKIHN0cnVjdCB2Y3B1X3ZteCB7CiAJc3RydWN0IGt2bV92Y3B1ICAgICAgIHZjcHU7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgIGxvY2FsX3ZjcHVzX2xpbms7CiAJaW50ICAgICAgICAgICAgICAgICAgIGxhdW5jaGVkOwogCXU4ICAgICAgICAgICAgICAgICAgICBmYWlsOwogCXUzMiAgICAgICAgICAgICAgICAgICBpZHRfdmVjdG9yaW5nX2luZm87CkBAIC04OCw5ICs5MSwxMSBAQAogfQogCiBzdGF0aWMgaW50IGluaXRfcm1vZGUoc3RydWN0IGt2bSAqa3ZtKTsKK3N0YXRpYyB1NjQgY29uc3RydWN0X2VwdHAodW5zaWduZWQgbG9uZyByb290X2hwYSk7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgdm1jcyAqLCB2bXhhcmVhKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgdm1jcyAqLCBjdXJyZW50X3ZtY3MpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQsIHZjcHVzX29uX2NwdSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdm14X2lvX2JpdG1hcF9hOwogc3RhdGljIHN0cnVjdCBwYWdlICp2bXhfaW9fYml0bWFwX2I7CkBAIC0yNjAsNiArMjY1LDExIEBACiAJCVNFQ09OREFSWV9FWEVDX0VOQUJMRV9WUElEKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY3B1X2hhc192aXJ0dWFsX25taXModm9pZCkKK3sKKwlyZXR1cm4gdm1jc19jb25maWcucGluX2Jhc2VkX2V4ZWNfY3RybCAmIFBJTl9CQVNFRF9WSVJUVUFMX05NSVM7Cit9CisKIHN0YXRpYyBpbnQgX19maW5kX21zcl9pbmRleChzdHJ1Y3QgdmNwdV92bXggKnZteCwgdTMyIG1zcikKIHsKIAlpbnQgaTsKQEAgLTI3OCw3ICsyODgsNyBAQAogCXU2NCBndmE7CiAgICAgfSBvcGVyYW5kID0geyB2cGlkLCAwLCBndmEgfTsKIAotICAgIGFzbSB2b2xhdGlsZSAoQVNNX1ZNWF9JTlZWUElECisgICAgYXNtIHZvbGF0aWxlIChfX2V4KEFTTV9WTVhfSU5WVlBJRCkKIAkJICAvKiBDRj09MSBvciBaRj09MSAtLT4gcmMgPSAtMSAqLwogCQkgICI7IGphIDFmIDsgdWQyIDsgMToiCiAJCSAgOiA6ICJhIigmb3BlcmFuZCksICJjIihleHQpIDogImNjIiwgIm1lbW9yeSIpOwpAQCAtMjkwLDcgKzMwMCw3IEBACiAJCXU2NCBlcHRwLCBncGE7CiAJfSBvcGVyYW5kID0ge2VwdHAsIGdwYX07CiAKLQlhc20gdm9sYXRpbGUgKEFTTV9WTVhfSU5WRVBUCisJYXNtIHZvbGF0aWxlIChfX2V4KEFTTV9WTVhfSU5WRVBUKQogCQkJLyogQ0Y9PTEgb3IgWkY9PTEgLS0+IHJjID0gLTEgKi8KIAkJCSI7IGphIDFmIDsgdWQyIDsgMTpcbiIKIAkJCTogOiAiYSIgKCZvcGVyYW5kKSwgImMiIChleHQpIDogImNjIiwgIm1lbW9yeSIpOwpAQCAtMzExLDcgKzMyMSw3IEBACiAJdTY0IHBoeXNfYWRkciA9IF9fcGEodm1jcyk7CiAJdTggZXJyb3I7CiAKLQlhc20gdm9sYXRpbGUgKEFTTV9WTVhfVk1DTEVBUl9SQVggIjsgc2V0bmEgJTAiCisJYXNtIHZvbGF0aWxlIChfX2V4KEFTTV9WTVhfVk1DTEVBUl9SQVgpICI7IHNldG5hICUwIgogCQkgICAgICA6ICI9ZyIoZXJyb3IpIDogImEiKCZwaHlzX2FkZHIpLCAibSIocGh5c19hZGRyKQogCQkgICAgICA6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAoZXJyb3IpCkBAIC0zMjksNiArMzM5LDkgQEAKIAlpZiAocGVyX2NwdShjdXJyZW50X3ZtY3MsIGNwdSkgPT0gdm14LT52bWNzKQogCQlwZXJfY3B1KGN1cnJlbnRfdm1jcywgY3B1KSA9IE5VTEw7CiAJcmR0c2NsbCh2bXgtPnZjcHUuYXJjaC5ob3N0X3RzYyk7CisJbGlzdF9kZWwoJnZteC0+bG9jYWxfdmNwdXNfbGluayk7CisJdm14LT52Y3B1LmNwdSA9IC0xOworCXZteC0+bGF1bmNoZWQgPSAwOwogfQogCiBzdGF0aWMgdm9pZCB2Y3B1X2NsZWFyKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQpAQCAtMzM2LDcgKzM0OSw2IEBACiAJaWYgKHZteC0+dmNwdS5jcHUgPT0gLTEpCiAJCXJldHVybjsKIAlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUodm14LT52Y3B1LmNwdSwgX192Y3B1X2NsZWFyLCB2bXgsIDEpOwotCXZteC0+bGF1bmNoZWQgPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdnBpZF9zeW5jX3ZjcHVfYWxsKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQpAQCAtMzc4LDcgKzM5MCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAotCWFzbSB2b2xhdGlsZSAoQVNNX1ZNWF9WTVJFQURfUkRYX1JBWAorCWFzbSB2b2xhdGlsZSAoX19leChBU01fVk1YX1ZNUkVBRF9SRFhfUkFYKQogCQkgICAgICA6ICI9YSIodmFsdWUpIDogImQiKGZpZWxkKSA6ICJjYyIpOwogCXJldHVybiB2YWx1ZTsKIH0KQEAgLTQxMyw3ICs0MjUsNyBAQAogewogCXU4IGVycm9yOwogCi0JYXNtIHZvbGF0aWxlIChBU01fVk1YX1ZNV1JJVEVfUkFYX1JEWCAiOyBzZXRuYSAlMCIKKwlhc20gdm9sYXRpbGUgKF9fZXgoQVNNX1ZNWF9WTVdSSVRFX1JBWF9SRFgpICI7IHNldG5hICUwIgogCQkgICAgICAgOiAiPXEiKGVycm9yKSA6ICJhIih2YWx1ZSksICJkIihmaWVsZCkgOiAiY2MiKTsKIAlpZiAodW5saWtlbHkoZXJyb3IpKQogCQl2bXdyaXRlX2Vycm9yKGZpZWxkLCB2YWx1ZSk7CkBAIC00MzEsMTAgKzQ0Myw4IEBACiAKIHN0YXRpYyB2b2lkIHZtY3Nfd3JpdGU2NCh1bnNpZ25lZCBsb25nIGZpZWxkLCB1NjQgdmFsdWUpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCXZtY3Nfd3JpdGVsKGZpZWxkLCB2YWx1ZSk7Ci0jZWxzZQotCXZtY3Nfd3JpdGVsKGZpZWxkLCB2YWx1ZSk7CisjaWZuZGVmIENPTkZJR19YODZfNjQKIAlhc20gdm9sYXRpbGUgKCIiKTsKIAl2bWNzX3dyaXRlbChmaWVsZCsxLCB2YWx1ZSA+PiAzMik7CiAjZW5kaWYKQEAgLTQ3NCw3ICs0ODQsNyBAQAogCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGdkdDsKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2NzOwogCi0JZ2V0X2dkdCgmZ2R0KTsKKwlrdm1fZ2V0X2dkdCgmZ2R0KTsKIAlkZXNjcyA9ICh2b2lkICopZ2R0LmJhc2U7CiAJZGVzY3NbR0RUX0VOVFJZX1RTU10udHlwZSA9IDk7IC8qIGF2YWlsYWJsZSBUU1MgKi8KIAlsb2FkX1RSX2Rlc2MoKTsKQEAgLTUzMCw5ICs1NDAsOSBAQAogCSAqIFNldCBob3N0IGZzIGFuZCBncyBzZWxlY3RvcnMuICBVbmZvcnR1bmF0ZWx5LCAyMi4yLjMgZG9lcyBub3QKIAkgKiBhbGxvdyBzZWdtZW50IHNlbGVjdG9ycyB3aXRoIGNwbCA+IDAgb3IgdGkgPT0gMS4KIAkgKi8KLQl2bXgtPmhvc3Rfc3RhdGUubGR0X3NlbCA9IHJlYWRfbGR0KCk7CisJdm14LT5ob3N0X3N0YXRlLmxkdF9zZWwgPSBrdm1fcmVhZF9sZHQoKTsKIAl2bXgtPmhvc3Rfc3RhdGUuZ3NfbGR0X3JlbG9hZF9uZWVkZWQgPSB2bXgtPmhvc3Rfc3RhdGUubGR0X3NlbDsKLQl2bXgtPmhvc3Rfc3RhdGUuZnNfc2VsID0gcmVhZF9mcygpOworCXZteC0+aG9zdF9zdGF0ZS5mc19zZWwgPSBrdm1fcmVhZF9mcygpOwogCWlmICghKHZteC0+aG9zdF9zdGF0ZS5mc19zZWwgJiA3KSkgewogCQl2bWNzX3dyaXRlMTYoSE9TVF9GU19TRUxFQ1RPUiwgdm14LT5ob3N0X3N0YXRlLmZzX3NlbCk7CiAJCXZteC0+aG9zdF9zdGF0ZS5mc19yZWxvYWRfbmVlZGVkID0gMDsKQEAgLTU0MCw3ICs1NTAsNyBAQAogCQl2bWNzX3dyaXRlMTYoSE9TVF9GU19TRUxFQ1RPUiwgMCk7CiAJCXZteC0+aG9zdF9zdGF0ZS5mc19yZWxvYWRfbmVlZGVkID0gMTsKIAl9Ci0Jdm14LT5ob3N0X3N0YXRlLmdzX3NlbCA9IHJlYWRfZ3MoKTsKKwl2bXgtPmhvc3Rfc3RhdGUuZ3Nfc2VsID0ga3ZtX3JlYWRfZ3MoKTsKIAlpZiAoISh2bXgtPmhvc3Rfc3RhdGUuZ3Nfc2VsICYgNykpCiAJCXZtY3Nfd3JpdGUxNihIT1NUX0dTX1NFTEVDVE9SLCB2bXgtPmhvc3Rfc3RhdGUuZ3Nfc2VsKTsKIAllbHNlIHsKQEAgLTU3NiwxNSArNTg2LDE1IEBACiAJKyt2bXgtPnZjcHUuc3RhdC5ob3N0X3N0YXRlX3JlbG9hZDsKIAl2bXgtPmhvc3Rfc3RhdGUubG9hZGVkID0gMDsKIAlpZiAodm14LT5ob3N0X3N0YXRlLmZzX3JlbG9hZF9uZWVkZWQpCi0JCWxvYWRfZnModm14LT5ob3N0X3N0YXRlLmZzX3NlbCk7CisJCWt2bV9sb2FkX2ZzKHZteC0+aG9zdF9zdGF0ZS5mc19zZWwpOwogCWlmICh2bXgtPmhvc3Rfc3RhdGUuZ3NfbGR0X3JlbG9hZF9uZWVkZWQpIHsKLQkJbG9hZF9sZHQodm14LT5ob3N0X3N0YXRlLmxkdF9zZWwpOworCQlrdm1fbG9hZF9sZHQodm14LT5ob3N0X3N0YXRlLmxkdF9zZWwpOwogCQkvKgogCQkgKiBJZiB3ZSBoYXZlIHRvIHJlbG9hZCBncywgd2UgbXVzdCB0YWtlIGNhcmUgdG8KIAkJICogcHJlc2VydmUgb3VyIGdzIGJhc2UuCiAJCSAqLwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWxvYWRfZ3Modm14LT5ob3N0X3N0YXRlLmdzX3NlbCk7CisJCWt2bV9sb2FkX2dzKHZteC0+aG9zdF9zdGF0ZS5nc19zZWwpOwogI2lmZGVmIENPTkZJR19YODZfNjQKIAkJd3Jtc3JsKE1TUl9HU19CQVNFLCB2bWNzX3JlYWRsKEhPU1RfR1NfQkFTRSkpOwogI2VuZGlmCkBAIC02MTcsMTMgKzYyNywxNyBAQAogCQl2Y3B1X2NsZWFyKHZteCk7CiAJCWt2bV9taWdyYXRlX3RpbWVycyh2Y3B1KTsKIAkJdnBpZF9zeW5jX3ZjcHVfYWxsKHZteCk7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWxpc3RfYWRkKCZ2bXgtPmxvY2FsX3ZjcHVzX2xpbmssCisJCQkgJnBlcl9jcHUodmNwdXNfb25fY3B1LCBjcHUpKTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCX0KIAogCWlmIChwZXJfY3B1KGN1cnJlbnRfdm1jcywgY3B1KSAhPSB2bXgtPnZtY3MpIHsKIAkJdTggZXJyb3I7CiAKIAkJcGVyX2NwdShjdXJyZW50X3ZtY3MsIGNwdSkgPSB2bXgtPnZtY3M7Ci0JCWFzbSB2b2xhdGlsZSAoQVNNX1ZNWF9WTVBUUkxEX1JBWCAiOyBzZXRuYSAlMCIKKwkJYXNtIHZvbGF0aWxlIChfX2V4KEFTTV9WTVhfVk1QVFJMRF9SQVgpICI7IHNldG5hICUwIgogCQkJICAgICAgOiAiPWciKGVycm9yKSA6ICJhIigmcGh5c19hZGRyKSwgIm0iKHBoeXNfYWRkcikKIAkJCSAgICAgIDogImNjIik7CiAJCWlmIChlcnJvcikKQEAgLTY0MCw4ICs2NTQsOCBAQAogCQkgKiBMaW51eCB1c2VzIHBlci1jcHUgVFNTIGFuZCBHRFQsIHNvIHNldCB0aGVzZSB3aGVuIHN3aXRjaGluZwogCQkgKiBwcm9jZXNzb3JzLgogCQkgKi8KLQkJdm1jc193cml0ZWwoSE9TVF9UUl9CQVNFLCByZWFkX3RyX2Jhc2UoKSk7IC8qIDIyLjIuNCAqLwotCQlnZXRfZ2R0KCZkdCk7CisJCXZtY3Nfd3JpdGVsKEhPU1RfVFJfQkFTRSwga3ZtX3JlYWRfdHJfYmFzZSgpKTsgLyogMjIuMi40ICovCisJCWt2bV9nZXRfZ2R0KCZkdCk7CiAJCXZtY3Nfd3JpdGVsKEhPU1RfR0RUUl9CQVNFLCBkdC5iYXNlKTsgICAvKiAyMi4yLjQgKi8KIAogCQlyZG1zcmwoTVNSX0lBMzJfU1lTRU5URVJfRVNQLCBzeXNlbnRlcl9lc3ApOwpAQCAtNjg0LDExICs2OTgsNiBAQAogCXVwZGF0ZV9leGNlcHRpb25fYml0bWFwKHZjcHUpOwogfQogCi1zdGF0aWMgdm9pZCB2bXhfdmNwdV9kZWNhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQl2Y3B1X2NsZWFyKHRvX3ZteCh2Y3B1KSk7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZteF9nZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOwpAQCAtOTEzLDYgKzkyMiwxOCBAQAogCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOgogCQlndWVzdF93cml0ZV90c2MoZGF0YSk7CiAJCWJyZWFrOworCWNhc2UgTVNSX1A2X1BFUkZDVFIwOgorCWNhc2UgTVNSX1A2X1BFUkZDVFIxOgorCWNhc2UgTVNSX1A2X0VWTlRTRUwwOgorCWNhc2UgTVNSX1A2X0VWTlRTRUwxOgorCQkvKgorCQkgKiBKdXN0IGRpc2NhcmQgYWxsIHdyaXRlcyB0byB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnM7IHRoaXMKKwkJICogc2hvdWxkIGtlZXAgYm90aCBvbGRlciBsaW51eCBhbmQgd2luZG93cyA2NC1iaXQgZ3Vlc3RzCisJCSAqIGhhcHB5CisJCSAqLworCQlwcl91bmltcGwodmNwdSwgInVuaW1wbGVtZW50ZWQgcGVyZmN0ciB3cm1zcjogMHgleCBkYXRhIDB4JWxseFxuIiwgbXNyX2luZGV4LCBkYXRhKTsKKworCQlicmVhazsKIAlkZWZhdWx0OgogCQl2bXhfbG9hZF9ob3N0X3N0YXRlKHZteCk7CiAJCW1zciA9IGZpbmRfbXNyX2VudHJ5KHZteCwgbXNyX2luZGV4KTsKQEAgLTEwMjIsNiArMTA0Myw3IEBACiAJdTY0IHBoeXNfYWRkciA9IF9fcGEocGVyX2NwdSh2bXhhcmVhLCBjcHUpKTsKIAl1NjQgb2xkOwogCisJSU5JVF9MSVNUX0hFQUQoJnBlcl9jcHUodmNwdXNfb25fY3B1LCBjcHUpKTsKIAlyZG1zcmwoTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MLCBvbGQpOwogCWlmICgob2xkICYgKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgfAogCQkgICAgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQpKQpAQCAtMTAzMiwxMyArMTA1NCwyNSBAQAogCQkgICAgICAgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX0xPQ0tFRCB8CiAJCSAgICAgICBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRCk7CiAJd3JpdGVfY3I0KHJlYWRfY3I0KCkgfCBYODZfQ1I0X1ZNWEUpOyAvKiBGSVhNRTogbm90IGNwdSBob3RwbHVnIHNhZmUgKi8KLQlhc20gdm9sYXRpbGUgKEFTTV9WTVhfVk1YT05fUkFYIDogOiAiYSIoJnBoeXNfYWRkciksICJtIihwaHlzX2FkZHIpCisJYXNtIHZvbGF0aWxlIChBU01fVk1YX1ZNWE9OX1JBWAorCQkgICAgICA6IDogImEiKCZwaHlzX2FkZHIpLCAibSIocGh5c19hZGRyKQogCQkgICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKIH0KIAorc3RhdGljIHZvaWQgdm1jbGVhcl9sb2NhbF92Y3B1cyh2b2lkKQoreworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCB2Y3B1X3ZteCAqdm14LCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bXgsIG4sICZwZXJfY3B1KHZjcHVzX29uX2NwdSwgY3B1KSwKKwkJCQkgbG9jYWxfdmNwdXNfbGluaykKKwkJX192Y3B1X2NsZWFyKHZteCk7Cit9CisKIHN0YXRpYyB2b2lkIGhhcmR3YXJlX2Rpc2FibGUodm9pZCAqZ2FyYmFnZSkKIHsKLQlhc20gdm9sYXRpbGUgKEFTTV9WTVhfVk1YT0ZGIDogOiA6ICJjYyIpOworCXZtY2xlYXJfbG9jYWxfdmNwdXMoKTsKKwlhc20gdm9sYXRpbGUgKF9fZXgoQVNNX1ZNWF9WTVhPRkYpIDogOiA6ICJjYyIpOwogCXdyaXRlX2NyNChyZWFkX2NyNCgpICYgflg4Nl9DUjRfVk1YRSk7CiB9CiAKQEAgLTEwNzIsNyArMTEwNiw3IEBACiAJdTMyIF92bWVudHJ5X2NvbnRyb2wgPSAwOwogCiAJbWluID0gUElOX0JBU0VEX0VYVF9JTlRSX01BU0sgfCBQSU5fQkFTRURfTk1JX0VYSVRJTkc7Ci0Jb3B0ID0gMDsKKwlvcHQgPSBQSU5fQkFTRURfVklSVFVBTF9OTUlTOwogCWlmIChhZGp1c3Rfdm14X2NvbnRyb2xzKG1pbiwgb3B0LCBNU1JfSUEzMl9WTVhfUElOQkFTRURfQ1RMUywKIAkJCQkmX3Bpbl9iYXNlZF9leGVjX2NvbnRyb2wpIDwgMCkKIAkJcmV0dXJuIC1FSU87CkBAIC0xMzg5LDYgKzE0MjMsOCBAQAogc3RhdGljIHZvaWQgdm14X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdnBpZF9zeW5jX3ZjcHVfYWxsKHRvX3ZteCh2Y3B1KSk7CisJaWYgKHZtX25lZWRfZXB0KCkpCisJCWVwdF9zeW5jX2NvbnRleHQoY29uc3RydWN0X2VwdHAodmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpKTsKIH0KIAogc3RhdGljIHZvaWQgdm14X2RlY2FjaGVfY3I0X2d1ZXN0X2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTQyMCw3ICsxNDU2LDcgQEAKIAlpZiAoIShjcjAgJiBYODZfQ1IwX1BHKSkgewogCQkvKiBGcm9tIHBhZ2luZy9zdGFydGluZyB0byBub25wYWdpbmcgKi8KIAkJdm1jc193cml0ZTMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsCi0JCQkgICAgIHZtY3NfY29uZmlnLmNwdV9iYXNlZF9leGVjX2N0cmwgfAorCQkJICAgICB2bWNzX3JlYWQzMihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSB8CiAJCQkgICAgIChDUFVfQkFTRURfQ1IzX0xPQURfRVhJVElORyB8CiAJCQkgICAgICBDUFVfQkFTRURfQ1IzX1NUT1JFX0VYSVRJTkcpKTsKIAkJdmNwdS0+YXJjaC5jcjAgPSBjcjA7CkBAIC0xNDMwLDcgKzE0NjYsNyBAQAogCX0gZWxzZSBpZiAoIWlzX3BhZ2luZyh2Y3B1KSkgewogCQkvKiBGcm9tIG5vbnBhZ2luZyB0byBwYWdpbmcgKi8KIAkJdm1jc193cml0ZTMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsCi0JCQkgICAgIHZtY3NfY29uZmlnLmNwdV9iYXNlZF9leGVjX2N0cmwgJgorCQkJICAgICB2bWNzX3JlYWQzMihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSAmCiAJCQkgICAgIH4oQ1BVX0JBU0VEX0NSM19MT0FEX0VYSVRJTkcgfAogCQkJICAgICAgIENQVV9CQVNFRF9DUjNfU1RPUkVfRVhJVElORykpOwogCQl2Y3B1LT5hcmNoLmNyMCA9IGNyMDsKQEAgLTE4MjEsNyArMTg1Nyw3IEBACiAJc3Bpbl91bmxvY2soJnZteF92cGlkX2xvY2spOwogfQogCi12b2lkIHZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKHN0cnVjdCBwYWdlICptc3JfYml0bWFwLCB1MzIgbXNyKQorc3RhdGljIHZvaWQgdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IHBhZ2UgKm1zcl9iaXRtYXAsIHUzMiBtc3IpCiB7CiAJdm9pZCAqdmE7CiAKQEAgLTE5MDcsOCArMTk0Myw4IEBACiAJdm1jc193cml0ZTE2KEhPU1RfQ1NfU0VMRUNUT1IsIF9fS0VSTkVMX0NTKTsgIC8qIDIyLjIuNCAqLwogCXZtY3Nfd3JpdGUxNihIT1NUX0RTX1NFTEVDVE9SLCBfX0tFUk5FTF9EUyk7ICAvKiAyMi4yLjQgKi8KIAl2bWNzX3dyaXRlMTYoSE9TVF9FU19TRUxFQ1RPUiwgX19LRVJORUxfRFMpOyAgLyogMjIuMi40ICovCi0Jdm1jc193cml0ZTE2KEhPU1RfRlNfU0VMRUNUT1IsIHJlYWRfZnMoKSk7ICAgIC8qIDIyLjIuNCAqLwotCXZtY3Nfd3JpdGUxNihIT1NUX0dTX1NFTEVDVE9SLCByZWFkX2dzKCkpOyAgICAvKiAyMi4yLjQgKi8KKwl2bWNzX3dyaXRlMTYoSE9TVF9GU19TRUxFQ1RPUiwga3ZtX3JlYWRfZnMoKSk7ICAgIC8qIDIyLjIuNCAqLworCXZtY3Nfd3JpdGUxNihIT1NUX0dTX1NFTEVDVE9SLCBrdm1fcmVhZF9ncygpKTsgICAgLyogMjIuMi40ICovCiAJdm1jc193cml0ZTE2KEhPU1RfU1NfU0VMRUNUT1IsIF9fS0VSTkVMX0RTKTsgIC8qIDIyLjIuNCAqLwogI2lmZGVmIENPTkZJR19YODZfNjQKIAlyZG1zcmwoTVNSX0ZTX0JBU0UsIGEpOwpAQCAtMTkyMiw3ICsxOTU4LDcgQEAKIAogCXZtY3Nfd3JpdGUxNihIT1NUX1RSX1NFTEVDVE9SLCBHRFRfRU5UUllfVFNTKjgpOyAgLyogMjIuMi40ICovCiAKLQlnZXRfaWR0KCZkdCk7CisJa3ZtX2dldF9pZHQoJmR0KTsKIAl2bWNzX3dyaXRlbChIT1NUX0lEVFJfQkFTRSwgZHQuYmFzZSk7ICAgLyogMjIuMi40ICovCiAKIAlhc20oIm1vdiAkLkxrdm1fdm14X3JldHVybiwgJTAiIDogIj1yIihrdm1fdm14X3JldHVybikpOwpAQCAtMjExNCw2ICsyMTUwLDEzIEBACiAJCQlpcnEgfCBJTlRSX1RZUEVfRVhUX0lOVFIgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CiB9CiAKK3N0YXRpYyB2b2lkIHZteF9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAorCQkJSU5UUl9UWVBFX05NSV9JTlRSIHwgSU5UUl9JTkZPX1ZBTElEX01BU0sgfCBOTUlfVkVDVE9SKTsKKwl2Y3B1LT5hcmNoLm5taV9wZW5kaW5nID0gMDsKK30KKwogc3RhdGljIHZvaWQga3ZtX2RvX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludCB3b3JkX2luZGV4ID0gX19mZnModmNwdS0+YXJjaC5pcnFfc3VtbWFyeSk7CkBAIC0yNTU0LDggKzI1OTcsNiBAQAogCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZDY0KEVYSVRfUVVBTElGSUNBVElPTik7CiAJb2Zmc2V0ID0gZXhpdF9xdWFsaWZpY2F0aW9uICYgMHhmZmZ1bDsKIAotCUtWTVRSQUNFXzFEKEFQSUNfQUNDRVNTLCB2Y3B1LCAodTMyKW9mZnNldCwgaGFuZGxlcik7Ci0KIAllciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwga3ZtX3J1biwgMCwgMCwgMCk7CiAKIAlpZiAoZXIgIT0gIEVNVUxBVEVfRE9ORSkgewpAQCAtMjYzOSw2ICsyNjgwLDE5IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwl1MzIgY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbDsKKworCS8qIGNsZWFyIHBlbmRpbmcgTk1JICovCisJY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbCA9IHZtY3NfcmVhZDMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpOworCWNwdV9iYXNlZF92bV9leGVjX2NvbnRyb2wgJj0gfkNQVV9CQVNFRF9WSVJUVUFMX05NSV9QRU5ESU5HOworCXZtY3Nfd3JpdGUzMihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjcHVfYmFzZWRfdm1fZXhlY19jb250cm9sKTsKKwkrK3ZjcHUtPnN0YXQubm1pX3dpbmRvd19leGl0czsKKworCXJldHVybiAxOworfQorCiAvKgogICogVGhlIGV4aXQgaGFuZGxlcnMgcmV0dXJuIDEgaWYgdGhlIGV4aXQgd2FzIGhhbmRsZWQgZnVsbHkgYW5kIGd1ZXN0IGV4ZWN1dGlvbgogICogbWF5IHJlc3VtZS4gIE90aGVyd2lzZSB0aGV5IHNldCB0aGUga3ZtX3J1biBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUgd2hhdCBuZWVkcwpAQCAtMjY0OSw2ICsyNzAzLDcgQEAKIAlbRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSV0gICAgICAgICAgID0gaGFuZGxlX2V4Y2VwdGlvbiwKIAlbRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBUXSAgICAgID0gaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdCwKIAlbRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxUXSAgICAgICAgICAgID0gaGFuZGxlX3RyaXBsZV9mYXVsdCwKKwlbRVhJVF9SRUFTT05fTk1JX1dJTkRPV10JICAgICAgPSBoYW5kbGVfbm1pX3dpbmRvdywKIAlbRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT05dICAgICAgICAgID0gaGFuZGxlX2lvLAogCVtFWElUX1JFQVNPTl9DUl9BQ0NFU1NdICAgICAgICAgICAgICAgPSBoYW5kbGVfY3IsCiAJW0VYSVRfUkVBU09OX0RSX0FDQ0VTU10gICAgICAgICAgICAgICA9IGhhbmRsZV9kciwKQEAgLTI3MzYsMTcgKzI3OTEsNTIgQEAKIAl2bWNzX3dyaXRlMzIoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbCk7CiB9CiAKK3N0YXRpYyB2b2lkIGVuYWJsZV9ubWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1MzIgY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbDsKKworCWlmICghY3B1X2hhc192aXJ0dWFsX25taXMoKSkKKwkJcmV0dXJuOworCisJY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbCA9IHZtY3NfcmVhZDMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpOworCWNwdV9iYXNlZF92bV9leGVjX2NvbnRyb2wgfD0gQ1BVX0JBU0VEX1ZJUlRVQUxfTk1JX1BFTkRJTkc7CisJdm1jc193cml0ZTMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIGNwdV9iYXNlZF92bV9leGVjX2NvbnRyb2wpOworfQorCitzdGF0aWMgaW50IHZteF9ubWlfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdTMyIGd1ZXN0X2ludHIgPSB2bWNzX3JlYWQzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8pOworCXJldHVybiAhKGd1ZXN0X2ludHIgJiAoR1VFU1RfSU5UUl9TVEFURV9OTUkgfAorCQkJICAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTU9WX1NTIHwKKwkJCSAgICAgICBHVUVTVF9JTlRSX1NUQVRFX1NUSSkpOworfQorCitzdGF0aWMgaW50IHZteF9pcnFfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdTMyIGd1ZXN0X2ludHIgPSB2bWNzX3JlYWQzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8pOworCXJldHVybiAoIShndWVzdF9pbnRyICYgKEdVRVNUX0lOVFJfU1RBVEVfTU9WX1NTIHwKKwkJCSAgICAgICBHVUVTVF9JTlRSX1NUQVRFX1NUSSkpICYmCisJCSh2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUykgJiBYODZfRUZMQUdTX0lGKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9pbnRyX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKHZjcHUtPmFyY2gubm1pX3BlbmRpbmcpCisJCWVuYWJsZV9ubWlfd2luZG93KHZjcHUpOworCWVsc2UgaWYgKGt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSkKKwkJZW5hYmxlX2lycV93aW5kb3codmNwdSk7Cit9CisKIHN0YXRpYyB2b2lkIHZteF9pbnRyX2Fzc2lzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0JdTMyIGlkdHZfaW5mb19maWVsZCwgaW50cl9pbmZvX2ZpZWxkOwotCWludCBoYXNfZXh0X2lycSwgaW50ZXJydXB0X3dpbmRvd19vcGVuOworCXUzMiBpZHR2X2luZm9fZmllbGQsIGludHJfaW5mb19maWVsZCwgZXhpdF9pbnRyX2luZm9fZmllbGQ7CiAJaW50IHZlY3RvcjsKIAogCXVwZGF0ZV90cHJfdGhyZXNob2xkKHZjcHUpOwogCi0JaGFzX2V4dF9pcnEgPSBrdm1fY3B1X2hhc19pbnRlcnJ1cHQodmNwdSk7CiAJaW50cl9pbmZvX2ZpZWxkID0gdm1jc19yZWFkMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxEKTsKKwlleGl0X2ludHJfaW5mb19maWVsZCA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKTsKIAlpZHR2X2luZm9fZmllbGQgPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKIAlpZiAoaW50cl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1ZBTElEX01BU0spIHsKIAkJaWYgKGlkdHZfaW5mb19maWVsZCAmIElOVFJfSU5GT19WQUxJRF9NQVNLKSB7CkBAIC0yNzU0LDggKzI4NDQsNyBAQAogCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCQlwcmludGsoS0VSTl9FUlIgIkZhdWx0IHdoZW4gSURUX1ZlY3RvcmluZ1xuIik7CiAJCX0KLQkJaWYgKGhhc19leHRfaXJxKQotCQkJZW5hYmxlX2lycV93aW5kb3codmNwdSk7CisJCWVuYWJsZV9pbnRyX3dpbmRvdyh2Y3B1KTsKIAkJcmV0dXJuOwogCX0KIAlpZiAodW5saWtlbHkoaWR0dl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1ZBTElEX01BU0spKSB7CkBAIC0yNzY1LDMwICsyODU0LDU2IEBACiAJCQl1OCB2ZWN0ID0gaWR0dl9pbmZvX2ZpZWxkICYgVkVDVE9SSU5HX0lORk9fVkVDVE9SX01BU0s7CiAKIAkJCXZteF9pbmplY3RfaXJxKHZjcHUsIHZlY3QpOwotCQkJaWYgKHVubGlrZWx5KGhhc19leHRfaXJxKSkKLQkJCQllbmFibGVfaXJxX3dpbmRvdyh2Y3B1KTsKKwkJCWVuYWJsZV9pbnRyX3dpbmRvdyh2Y3B1KTsKIAkJCXJldHVybjsKIAkJfQogCiAJCUtWTVRSQUNFXzFEKFJFREVMSVZFUl9FVlQsIHZjcHUsIGlkdHZfaW5mb19maWVsZCwgaGFuZGxlcik7CiAKLQkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwgaWR0dl9pbmZvX2ZpZWxkKTsKKwkJLyoKKwkJICogU0RNIDM6IDI1LjcuMS4yCisJCSAqIENsZWFyIGJpdCAiYmxvY2sgYnkgTk1JIiBiZWZvcmUgVk0gZW50cnkgaWYgYSBOTUkgZGVsaXZlcnkKKwkJICogZmF1bHRlZC4KKwkJICovCisJCWlmICgoaWR0dl9pbmZvX2ZpZWxkICYgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLKQorCQkgICAgPT0gSU5UUl9UWVBFX05NSV9JTlRSICYmIGNwdV9oYXNfdmlydHVhbF9ubWlzKCkpCisJCQl2bWNzX3dyaXRlMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAorCQkJCXZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTykgJgorCQkJCX5HVUVTVF9JTlRSX1NUQVRFX05NSSk7CisKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwgaWR0dl9pbmZvX2ZpZWxkCisJCQkJJiB+SU5UUl9JTkZPX1JFU1ZEX0JJVFNfTUFTSyk7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sCiAJCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pKTsKIAogCQlpZiAodW5saWtlbHkoaWR0dl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLKSkKIAkJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9FWENFUFRJT05fRVJST1JfQ09ERSwKIAkJCQl2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0VSUk9SX0NPREUpKTsKLQkJaWYgKHVubGlrZWx5KGhhc19leHRfaXJxKSkKLQkJCWVuYWJsZV9pcnFfd2luZG93KHZjcHUpOworCQllbmFibGVfaW50cl93aW5kb3codmNwdSk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKCFoYXNfZXh0X2lycSkKKwlpZiAoY3B1X2hhc192aXJ0dWFsX25taXMoKSkgeworCQkvKgorCQkgKiBTRE0gMzogMjUuNy4xLjIKKwkJICogUmUtc2V0IGJpdCAiYmxvY2sgYnkgTk1JIiBiZWZvcmUgVk0gZW50cnkgaWYgdm1leGl0IGNhdXNlZCBieQorCQkgKiBhIGd1ZXN0IElSRVQgZmF1bHQuCisJCSAqLworCQlpZiAoKGV4aXRfaW50cl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSAmJgorCQkgICAgKGV4aXRfaW50cl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLKSAhPSA4KQorCQkJdm1jc193cml0ZTMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywKKwkJCQl2bWNzX3JlYWQzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8pIHwKKwkJCQlHVUVTVF9JTlRSX1NUQVRFX05NSSk7CisJCWVsc2UgaWYgKHZjcHUtPmFyY2gubm1pX3BlbmRpbmcpIHsKKwkJCWlmICh2bXhfbm1pX2VuYWJsZWQodmNwdSkpCisJCQkJdm14X2luamVjdF9ubWkodmNwdSk7CisJCQllbmFibGVfaW50cl93aW5kb3codmNwdSk7CisJCQlyZXR1cm47CisJCX0KKworCX0KKwlpZiAoIWt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSkKIAkJcmV0dXJuOwotCWludGVycnVwdF93aW5kb3dfb3BlbiA9Ci0JCSgodm1jc19yZWFkbChHVUVTVF9SRkxBR1MpICYgWDg2X0VGTEFHU19JRikgJiYKLQkJICh2bWNzX3JlYWQzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8pICYgMykgPT0gMCk7Ci0JaWYgKGludGVycnVwdF93aW5kb3dfb3BlbikgeworCWlmICh2bXhfaXJxX2VuYWJsZWQodmNwdSkpIHsKIAkJdmVjdG9yID0ga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpOwogCQl2bXhfaW5qZWN0X2lycSh2Y3B1LCB2ZWN0b3IpOwogCQlrdm1fdGltZXJfaW50cl9wb3N0KHZjcHUsIHZlY3Rvcik7CkBAIC0yODM4LDcgKzI5NTMsNyBAQAogCQkicHVzaCAlJWVkeDsgcHVzaCAlJWVicDsiCiAJCSJwdXNoICUlZWN4IFxuXHQiCiAjZW5kaWYKLQkJQVNNX1ZNWF9WTVdSSVRFX1JTUF9SRFggIlxuXHQiCisJCV9fZXgoQVNNX1ZNWF9WTVdSSVRFX1JTUF9SRFgpICJcblx0IgogCQkvKiBDaGVjayBpZiB2bWxhdW5jaCBvZiB2bXJlc3VtZSBpcyBuZWVkZWQgKi8KIAkJImNtcGwgJDAsICVjW2xhdW5jaGVkXSglMCkgXG5cdCIKIAkJLyogTG9hZCBndWVzdCByZWdpc3RlcnMuICBEb24ndCBjbG9iYmVyIGZsYWdzLiAqLwpAQCAtMjg3Myw5ICsyOTg4LDkgQEAKICNlbmRpZgogCQkvKiBFbnRlciBndWVzdCBtb2RlICovCiAJCSJqbmUgLkxsYXVuY2hlZCBcblx0IgotCQlBU01fVk1YX1ZNTEFVTkNIICJcblx0IgorCQlfX2V4KEFTTV9WTVhfVk1MQVVOQ0gpICJcblx0IgogCQkiam1wIC5Ma3ZtX3ZteF9yZXR1cm4gXG5cdCIKLQkJIi5MbGF1bmNoZWQ6ICIgQVNNX1ZNWF9WTVJFU1VNRSAiXG5cdCIKKwkJIi5MbGF1bmNoZWQ6ICIgX19leChBU01fVk1YX1ZNUkVTVU1FKSAiXG5cdCIKIAkJIi5Ma3ZtX3ZteF9yZXR1cm46ICIKIAkJLyogU2F2ZSBndWVzdCByZWdpc3RlcnMsIGxvYWQgaG9zdCByZWdpc3RlcnMsIGtlZXAgZmxhZ3MgKi8KICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC0yOTQ5LDcgKzMwNjQsOCBAQAogCQlmaXh1cF9ybW9kZV9pcnEodm14KTsKIAogCXZjcHUtPmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuID0KLQkJKHZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTykgJiAzKSA9PSAwOworCQkodm1jc19yZWFkMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPKSAmCisJCSAoR1VFU1RfSU5UUl9TVEFURV9TVEkgfCBHVUVTVF9JTlRSX1NUQVRFX01PVl9TUykpID09IDA7CiAKIAlhc20oIm1vdiAlMCwgJSVkczsgbW92ICUwLCAlJWVzIiA6IDogInIiKF9fVVNFUl9EUykpOwogCXZteC0+bGF1bmNoZWQgPSAxOwpAQCAtMjk1Nyw3ICszMDczLDggQEAKIAlpbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7CiAKIAkvKiBXZSBuZWVkIHRvIGhhbmRsZSBOTUlzIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi0JaWYgKChpbnRyX2luZm8gJiBJTlRSX0lORk9fSU5UUl9UWVBFX01BU0spID09IDB4MjAwKSB7IC8qIG5taSAqLworCWlmICgoaW50cl9pbmZvICYgSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLKSA9PSAweDIwMCAmJgorCSAgICAoaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZBTElEX01BU0spKSB7CiAJCUtWTVRSQUNFXzBEKE5NSSwgdmNwdSwgaGFuZGxlcik7CiAJCWFzbSgiaW50ICQyIik7CiAJfQpAQCAtMjk2OCw3ICszMDg1LDcgQEAKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAogCWlmICh2bXgtPnZtY3MpIHsKLQkJb25fZWFjaF9jcHUoX192Y3B1X2NsZWFyLCB2bXgsIDEpOworCQl2Y3B1X2NsZWFyKHZteCk7CiAJCWZyZWVfdm1jcyh2bXgtPnZtY3MpOwogCQl2bXgtPnZtY3MgPSBOVUxMOwogCX0KQEAgLTMwOTUsNyArMzIxMiw2IEBACiAJLnByZXBhcmVfZ3Vlc3Rfc3dpdGNoID0gdm14X3NhdmVfaG9zdF9zdGF0ZSwKIAkudmNwdV9sb2FkID0gdm14X3ZjcHVfbG9hZCwKIAkudmNwdV9wdXQgPSB2bXhfdmNwdV9wdXQsCi0JLnZjcHVfZGVjYWNoZSA9IHZteF92Y3B1X2RlY2FjaGUsCiAKIAkuc2V0X2d1ZXN0X2RlYnVnID0gc2V0X2d1ZXN0X2RlYnVnLAogCS5ndWVzdF9kZWJ1Z19wcmUgPSBrdm1fZ3Vlc3RfZGVidWdfcHJlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC5oCmluZGV4IDc5ZDk0YzYuLjQyNWExMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguaAorKysgYi9hcmNoL3g4Ni9rdm0vdm14LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNkZWZpbmUgQ1BVX0JBU0VEX0NSOF9MT0FEX0VYSVRJTkcgICAgICAgICAgICAgIDB4MDAwODAwMDAKICNkZWZpbmUgQ1BVX0JBU0VEX0NSOF9TVE9SRV9FWElUSU5HICAgICAgICAgICAgIDB4MDAxMDAwMDAKICNkZWZpbmUgQ1BVX0JBU0VEX1RQUl9TSEFET1cgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX0JBU0VEX1ZJUlRVQUxfTk1JX1BFTkRJTkcJCTB4MDA0MDAwMDAKICNkZWZpbmUgQ1BVX0JBU0VEX01PVl9EUl9FWElUSU5HICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKICNkZWZpbmUgQ1BVX0JBU0VEX1VOQ09ORF9JT19FWElUSU5HICAgICAgICAgICAgIDB4MDEwMDAwMDAKICNkZWZpbmUgQ1BVX0JBU0VEX1VTRV9JT19CSVRNQVBTICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKQEAgLTIxNiw3ICsyMTcsNyBAQAogI2RlZmluZSBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQgICAgICAgIDIKIAogI2RlZmluZSBFWElUX1JFQVNPTl9QRU5ESU5HX0lOVEVSUlVQVCAgIDcKLQorI2RlZmluZSBFWElUX1JFQVNPTl9OTUlfV0lORE9XCQk4CiAjZGVmaW5lIEVYSVRfUkVBU09OX1RBU0tfU1dJVENIICAgICAgICAgOQogI2RlZmluZSBFWElUX1JFQVNPTl9DUFVJRCAgICAgICAgICAgICAgIDEwCiAjZGVmaW5lIEVYSVRfUkVBU09OX0hMVCAgICAgICAgICAgICAgICAgMTIKQEAgLTI1MSw3ICsyNTIsOSBAQAogI2RlZmluZSBJTlRSX0lORk9fVkVDVE9SX01BU0sgICAgICAgICAgIDB4ZmYgICAgICAgICAgICAvKiA3OjAgKi8KICNkZWZpbmUgSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLICAgICAgICAweDcwMCAgICAgICAgICAgLyogMTA6OCAqLwogI2RlZmluZSBJTlRSX0lORk9fREVMSVZFUl9DT0RFX01BU0sgICAgIDB4ODAwICAgICAgICAgICAvKiAxMSAqLworI2RlZmluZSBJTlRSX0lORk9fVU5CTE9DS19OTUkJCTB4MTAwMAkJLyogMTIgKi8KICNkZWZpbmUgSU5UUl9JTkZPX1ZBTElEX01BU0sgICAgICAgICAgICAweDgwMDAwMDAwICAgICAgLyogMzEgKi8KKyNkZWZpbmUgSU5UUl9JTkZPX1JFU1ZEX0JJVFNfTUFTSyAgICAgICAweDdmZmZmMDAwCiAKICNkZWZpbmUgVkVDVE9SSU5HX0lORk9fVkVDVE9SX01BU0sgICAgICAgICAgIAlJTlRSX0lORk9fVkVDVE9SX01BU0sKICNkZWZpbmUgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLICAgICAgICAJSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLCkBAIC0yNTksOSArMjYyLDE2IEBACiAjZGVmaW5lIFZFQ1RPUklOR19JTkZPX1ZBTElEX01BU0sgICAgICAgCUlOVFJfSU5GT19WQUxJRF9NQVNLCiAKICNkZWZpbmUgSU5UUl9UWVBFX0VYVF9JTlRSICAgICAgICAgICAgICAoMCA8PCA4KSAvKiBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UUl9UWVBFX05NSV9JTlRSCQkoMiA8PCA4KSAvKiBOTUkgKi8KICNkZWZpbmUgSU5UUl9UWVBFX0VYQ0VQVElPTiAgICAgICAgICAgICAoMyA8PCA4KSAvKiBwcm9jZXNzb3IgZXhjZXB0aW9uICovCiAjZGVmaW5lIElOVFJfVFlQRV9TT0ZUX0lOVFIgICAgICAgICAgICAgKDQgPDwgOCkgLyogc29mdHdhcmUgaW50ZXJydXB0ICovCiAKKy8qIEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyBmbGFncy4gKi8KKyNkZWZpbmUgR1VFU1RfSU5UUl9TVEFURV9TVEkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgR1VFU1RfSU5UUl9TVEFURV9NT1ZfU1MJCTB4MDAwMDAwMDIKKyNkZWZpbmUgR1VFU1RfSU5UUl9TVEFURV9TTUkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgR1VFU1RfSU5UUl9TVEFURV9OTUkJCTB4MDAwMDAwMDgKKwogLyoKICAqIEV4aXQgUXVhbGlmaWNhdGlvbnMgZm9yIE1PViBmb3IgQ29udHJvbCBSZWdpc3RlciBBY2Nlc3MKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDBmYWEyNTQuLjlmMWNkYjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTcyLDYgKzcyLDcgQEAKIAl7ICJtbWlvX2V4aXRzIiwgVkNQVV9TVEFUKG1taW9fZXhpdHMpIH0sCiAJeyAic2lnbmFsX2V4aXRzIiwgVkNQVV9TVEFUKHNpZ25hbF9leGl0cykgfSwKIAl7ICJpcnFfd2luZG93IiwgVkNQVV9TVEFUKGlycV93aW5kb3dfZXhpdHMpIH0sCisJeyAibm1pX3dpbmRvdyIsIFZDUFVfU1RBVChubWlfd2luZG93X2V4aXRzKSB9LAogCXsgImhhbHRfZXhpdHMiLCBWQ1BVX1NUQVQoaGFsdF9leGl0cykgfSwKIAl7ICJoYWx0X3dha2V1cCIsIFZDUFVfU1RBVChoYWx0X3dha2V1cCkgfSwKIAl7ICJoeXBlcmNhbGxzIiwgVkNQVV9TVEFUKGh5cGVyY2FsbHMpIH0sCkBAIC0xNzMsNiArMTc0LDEyIEBACiAJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKHZjcHUsIFBGX1ZFQ1RPUiwgZXJyb3JfY29kZSk7CiB9CiAKK3ZvaWQga3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPmFyY2gubm1pX3BlbmRpbmcgPSAxOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2luamVjdF9ubWkpOworCiB2b2lkIGt2bV9xdWV1ZV9leGNlcHRpb25fZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIG5yLCB1MzIgZXJyb3JfY29kZSkKIHsKIAlXQVJOX09OKHZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcpOwpAQCAtNjA0LDYgKzYxMSwzOCBAQAogCW1hcmtfcGFnZV9kaXJ0eSh2LT5rdm0sIHZjcHUtPnRpbWUgPj4gUEFHRV9TSElGVCk7CiB9CiAKK3N0YXRpYyBib29sIG1zcl9tdHJyX3ZhbGlkKHVuc2lnbmVkIG1zcikKK3sKKwlzd2l0Y2ggKG1zcikgeworCWNhc2UgMHgyMDAgLi4uIDB4MjAwICsgMiAqIEtWTV9OUl9WQVJfTVRSUiAtIDE6CisJY2FzZSBNU1JfTVRSUmZpeDY0S18wMDAwMDoKKwljYXNlIE1TUl9NVFJSZml4MTZLXzgwMDAwOgorCWNhc2UgTVNSX01UUlJmaXgxNktfQTAwMDA6CisJY2FzZSBNU1JfTVRSUmZpeDRLX0MwMDAwOgorCWNhc2UgTVNSX01UUlJmaXg0S19DODAwMDoKKwljYXNlIE1TUl9NVFJSZml4NEtfRDAwMDA6CisJY2FzZSBNU1JfTVRSUmZpeDRLX0Q4MDAwOgorCWNhc2UgTVNSX01UUlJmaXg0S19FMDAwMDoKKwljYXNlIE1TUl9NVFJSZml4NEtfRTgwMDA6CisJY2FzZSBNU1JfTVRSUmZpeDRLX0YwMDAwOgorCWNhc2UgTVNSX01UUlJmaXg0S19GODAwMDoKKwljYXNlIE1TUl9NVFJSZGVmVHlwZToKKwljYXNlIE1TUl9JQTMyX0NSX1BBVDoKKwkJcmV0dXJuIHRydWU7CisJY2FzZSAweDJmODoKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBzZXRfbXNyX210cnIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSkKK3sKKwlpZiAoIW1zcl9tdHJyX3ZhbGlkKG1zcikpCisJCXJldHVybiAxOworCisJdmNwdS0+YXJjaC5tdHJyW21zciAtIDB4MjAwXSA9IGRhdGE7CisJcmV0dXJuIDA7Cit9CiAKIGludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSkKIHsKQEAgLTYyNSw4ICs2NjQsOSBAQAogCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1dSSVRFOgotCWNhc2UgMHgyMDAgLi4uIDB4MmZmOiAvKiBNVFJScyAqLwogCQlicmVhazsKKwljYXNlIDB4MjAwIC4uLiAweDJmZjoKKwkJcmV0dXJuIHNldF9tc3JfbXRycih2Y3B1LCBtc3IsIGRhdGEpOwogCWNhc2UgTVNSX0lBMzJfQVBJQ0JBU0U6CiAJCWt2bV9zZXRfYXBpY19iYXNlKHZjcHUsIGRhdGEpOwogCQlicmVhazsKQEAgLTY4NCw2ICs3MjQsMTUgQEAKIAlyZXR1cm4ga3ZtX3g4Nl9vcHMtPmdldF9tc3IodmNwdSwgbXNyX2luZGV4LCBwZGF0YSk7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X21zcl9tdHJyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSkKK3sKKwlpZiAoIW1zcl9tdHJyX3ZhbGlkKG1zcikpCisJCXJldHVybiAxOworCisJKnBkYXRhID0gdmNwdS0+YXJjaC5tdHJyW21zciAtIDB4MjAwXTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEpCiB7CiAJdTY0IGRhdGE7CkBAIC03MDUsMTEgKzc1NCwxMyBAQAogCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrMTY6CiAJY2FzZSBNU1JfSUEzMl9VQ09ERV9SRVY6CiAJY2FzZSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjoKLQkJLyogTVRSUiByZWdpc3RlcnMgKi8KLQljYXNlIDB4ZmU6Ci0JY2FzZSAweDIwMCAuLi4gMHgyZmY6CiAJCWRhdGEgPSAwOwogCQlicmVhazsKKwljYXNlIE1TUl9NVFJSY2FwOgorCQlkYXRhID0gMHg1MDAgfCBLVk1fTlJfVkFSX01UUlI7CisJCWJyZWFrOworCWNhc2UgMHgyMDAgLi4uIDB4MmZmOgorCQlyZXR1cm4gZ2V0X21zcl9tdHJyKHZjcHUsIG1zciwgcGRhdGEpOwogCWNhc2UgMHhjZDogLyogZnNiIGZyZXF1ZW5jeSAqLwogCQlkYXRhID0gMzsKIAkJYnJlYWs7CkBAIC04MTcsNDEgKzg2OCw2IEBACiAJcmV0dXJuIHI7CiB9CiAKLS8qCi0gKiBNYWtlIHN1cmUgdGhhdCBhIGNwdSB0aGF0IGlzIGJlaW5nIGhvdC11bnBsdWdnZWQgZG9lcyBub3QgaGF2ZSBhbnkgdmNwdXMKLSAqIGNhY2hlZCBvbiBpdC4KLSAqLwotdm9pZCBkZWNhY2hlX3ZjcHVzX29uX2NwdShpbnQgY3B1KQotewotCXN0cnVjdCBrdm0gKnZtOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlpbnQgaTsKLQotCXNwaW5fbG9jaygma3ZtX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodm0sICZ2bV9saXN0LCB2bV9saXN0KQotCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7Ci0JCQl2Y3B1ID0gdm0tPnZjcHVzW2ldOwotCQkJaWYgKCF2Y3B1KQotCQkJCWNvbnRpbnVlOwotCQkJLyoKLQkJCSAqIElmIHRoZSB2Y3B1IGlzIGxvY2tlZCwgdGhlbiBpdCBpcyBydW5uaW5nIG9uIHNvbWUKLQkJCSAqIG90aGVyIGNwdSBhbmQgdGhlcmVmb3JlIGl0IGlzIG5vdCBjYWNoZWQgb24gdGhlCi0JCQkgKiBjcHUgaW4gcXVlc3Rpb24uCi0JCQkgKgotCQkJICogSWYgaXQncyBub3QgbG9ja2VkLCBjaGVjayB0aGUgbGFzdCBjcHUgaXQgZXhlY3V0ZWQKLQkJCSAqIG9uLgotCQkJICovCi0JCQlpZiAobXV0ZXhfdHJ5bG9jaygmdmNwdS0+bXV0ZXgpKSB7Ci0JCQkJaWYgKHZjcHUtPmNwdSA9PSBjcHUpIHsKLQkJCQkJa3ZtX3g4Nl9vcHMtPnZjcHVfZGVjYWNoZSh2Y3B1KTsKLQkJCQkJdmNwdS0+Y3B1ID0gLTE7Ci0JCQkJfQotCQkJCW11dGV4X3VubG9jaygmdmNwdS0+bXV0ZXgpOwotCQkJfQotCQl9Ci0Jc3Bpbl91bmxvY2soJmt2bV9sb2NrKTsKLX0KLQogaW50IGt2bV9kZXZfaW9jdGxfY2hlY2tfZXh0ZW5zaW9uKGxvbmcgZXh0KQogewogCWludCByOwpAQCAtODY5LDYgKzg4NSw5IEBACiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCQlyID0gMTsKIAkJYnJlYWs7CisJY2FzZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPOgorCQlyID0gS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUOworCQlicmVhazsKIAljYXNlIEtWTV9DQVBfVkFQSUM6CiAJCXIgPSAha3ZtX3g4Nl9vcHMtPmNwdV9oYXNfYWNjZWxlcmF0ZWRfdHByKCk7CiAJCWJyZWFrOwpAQCAtMTc4MSwxMyArMTgwMCwxNCBAQAogICogT25seSBhcGljIG5lZWQgYW4gTU1JTyBkZXZpY2UgaG9vaywgc28gc2hvcnRjdXQgbm93Li4KICAqLwogc3RhdGljIHN0cnVjdCBrdm1faW9fZGV2aWNlICp2Y3B1X2ZpbmRfcGVydmNwdV9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkJZ3BhX3QgYWRkcikKKwkJCQkJCWdwYV90IGFkZHIsIGludCBsZW4sCisJCQkJCQlpbnQgaXNfd3JpdGUpCiB7CiAJc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldjsKIAogCWlmICh2Y3B1LT5hcmNoLmFwaWMpIHsKIAkJZGV2ID0gJnZjcHUtPmFyY2guYXBpYy0+ZGV2OwotCQlpZiAoZGV2LT5pbl9yYW5nZShkZXYsIGFkZHIpKQorCQlpZiAoZGV2LT5pbl9yYW5nZShkZXYsIGFkZHIsIGxlbiwgaXNfd3JpdGUpKQogCQkJcmV0dXJuIGRldjsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC0xNzk1LDEzICsxODE1LDE1IEBACiAKIAogc3RhdGljIHN0cnVjdCBrdm1faW9fZGV2aWNlICp2Y3B1X2ZpbmRfbW1pb19kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkJZ3BhX3QgYWRkcikKKwkJCQkJCWdwYV90IGFkZHIsIGludCBsZW4sCisJCQkJCQlpbnQgaXNfd3JpdGUpCiB7CiAJc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldjsKIAotCWRldiA9IHZjcHVfZmluZF9wZXJ2Y3B1X2Rldih2Y3B1LCBhZGRyKTsKKwlkZXYgPSB2Y3B1X2ZpbmRfcGVydmNwdV9kZXYodmNwdSwgYWRkciwgbGVuLCBpc193cml0ZSk7CiAJaWYgKGRldiA9PSBOVUxMKQotCQlkZXYgPSBrdm1faW9fYnVzX2ZpbmRfZGV2KCZ2Y3B1LT5rdm0tPm1taW9fYnVzLCBhZGRyKTsKKwkJZGV2ID0ga3ZtX2lvX2J1c19maW5kX2RldigmdmNwdS0+a3ZtLT5tbWlvX2J1cywgYWRkciwgbGVuLAorCQkJCQkgIGlzX3dyaXRlKTsKIAlyZXR1cm4gZGV2OwogfQogCkBAIC0xODY5LDcgKzE4OTEsNyBAQAogCSAqIElzIHRoaXMgTU1JTyBoYW5kbGVkIGxvY2FsbHk/CiAJICovCiAJbXV0ZXhfbG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKLQltbWlvX2RldiA9IHZjcHVfZmluZF9tbWlvX2Rldih2Y3B1LCBncGEpOworCW1taW9fZGV2ID0gdmNwdV9maW5kX21taW9fZGV2KHZjcHUsIGdwYSwgYnl0ZXMsIDApOwogCWlmIChtbWlvX2RldikgewogCQlrdm1faW9kZXZpY2VfcmVhZChtbWlvX2RldiwgZ3BhLCBieXRlcywgdmFsKTsKIAkJbXV0ZXhfdW5sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOwpAQCAtMTkyNCw3ICsxOTQ2LDcgQEAKIAkgKiBJcyB0aGlzIE1NSU8gaGFuZGxlZCBsb2NhbGx5PwogCSAqLwogCW11dGV4X2xvY2soJnZjcHUtPmt2bS0+bG9jayk7Ci0JbW1pb19kZXYgPSB2Y3B1X2ZpbmRfbW1pb19kZXYodmNwdSwgZ3BhKTsKKwltbWlvX2RldiA9IHZjcHVfZmluZF9tbWlvX2Rldih2Y3B1LCBncGEsIGJ5dGVzLCAxKTsKIAlpZiAobW1pb19kZXYpIHsKIAkJa3ZtX2lvZGV2aWNlX3dyaXRlKG1taW9fZGV2LCBncGEsIGJ5dGVzLCB2YWwpOwogCQltdXRleF91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CkBAIC0yMDIwLDYgKzIwNDIsNyBAQAogCiBpbnQgZW11bGF0ZV9jbHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKKwlLVk1UUkFDRV8wRChDTFRTLCB2Y3B1LCBoYW5kbGVyKTsKIAlrdm1feDg2X29wcy0+c2V0X2NyMCh2Y3B1LCB2Y3B1LT5hcmNoLmNyMCAmIH5YODZfQ1IwX1RTKTsKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KQEAgLTIwNTMsMjEgKzIwNzYsMTkgQEAKIAogdm9pZCBrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgY2hhciAqY29udGV4dCkKIHsKLQlzdGF0aWMgaW50IHJlcG9ydGVkOwogCXU4IG9wY29kZXNbNF07CiAJdW5zaWduZWQgbG9uZyByaXAgPSB2Y3B1LT5hcmNoLnJpcDsKIAl1bnNpZ25lZCBsb25nIHJpcF9saW5lYXI7CiAKLQlyaXBfbGluZWFyID0gcmlwICsgZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfQ1MpOwotCi0JaWYgKHJlcG9ydGVkKQorCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQogCQlyZXR1cm47CiAKKwlyaXBfbGluZWFyID0gcmlwICsgZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfQ1MpOworCiAJZW11bGF0b3JfcmVhZF9zdGQocmlwX2xpbmVhciwgKHZvaWQgKilvcGNvZGVzLCA0LCB2Y3B1KTsKIAogCXByaW50ayhLRVJOX0VSUiAiZW11bGF0aW9uIGZhaWxlZCAoJXMpIHJpcCAlbHggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkgICAgICAgY29udGV4dCwgcmlwLCBvcGNvZGVzWzBdLCBvcGNvZGVzWzFdLCBvcGNvZGVzWzJdLCBvcGNvZGVzWzNdKTsKLQlyZXBvcnRlZCA9IDE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKTsKIApAQCAtMjEwNSwyNyArMjEyNiw2IEBACiAJCQk/IFg4NkVNVUxfTU9ERV9QUk9UNjQgOgljc19kYgogCQkJPyBYODZFTVVMX01PREVfUFJPVDMyIDogWDg2RU1VTF9NT0RFX1BST1QxNjsKIAotCQlpZiAodmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQubW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0KSB7Ci0JCQl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5jc19iYXNlID0gMDsKLQkJCXZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmRzX2Jhc2UgPSAwOwotCQkJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZXNfYmFzZSA9IDA7Ci0JCQl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5zc19iYXNlID0gMDsKLQkJfSBlbHNlIHsKLQkJCXZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmNzX2Jhc2UgPQotCQkJCQlnZXRfc2VnbWVudF9iYXNlKHZjcHUsIFZDUFVfU1JFR19DUyk7Ci0JCQl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5kc19iYXNlID0KLQkJCQkJZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfRFMpOwotCQkJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZXNfYmFzZSA9Ci0JCQkJCWdldF9zZWdtZW50X2Jhc2UodmNwdSwgVkNQVV9TUkVHX0VTKTsKLQkJCXZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LnNzX2Jhc2UgPQotCQkJCQlnZXRfc2VnbWVudF9iYXNlKHZjcHUsIFZDUFVfU1JFR19TUyk7Ci0JCX0KLQotCQl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5nc19iYXNlID0KLQkJCQkJZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfR1MpOwotCQl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5mc19iYXNlID0KLQkJCQkJZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfRlMpOwotCiAJCXIgPSB4ODZfZGVjb2RlX2luc24oJnZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LCAmZW11bGF0ZV9vcHMpOwogCiAJCS8qIFJlamVjdCB0aGUgaW5zdHJ1Y3Rpb25zIG90aGVyIHRoYW4gVk1DQUxML1ZNTUNBTEwgd2hlbgpAQCAtMjMwMCw5ICsyMzAwLDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdmNwdV9maW5kX3Bpb19kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkgICAgICAgZ3BhX3QgYWRkcikKKwkJCQkJICAgICAgIGdwYV90IGFkZHIsIGludCBsZW4sCisJCQkJCSAgICAgICBpbnQgaXNfd3JpdGUpCiB7Ci0JcmV0dXJuIGt2bV9pb19idXNfZmluZF9kZXYoJnZjcHUtPmt2bS0+cGlvX2J1cywgYWRkcik7CisJcmV0dXJuIGt2bV9pb19idXNfZmluZF9kZXYoJnZjcHUtPmt2bS0+cGlvX2J1cywgYWRkciwgbGVuLCBpc193cml0ZSk7CiB9CiAKIGludCBrdm1fZW11bGF0ZV9waW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBpbnQgaW4sCkBAIC0yMzMxLDExICsyMzMyLDEwIEBACiAKIAlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKIAltZW1jcHkodmNwdS0+YXJjaC5waW9fZGF0YSwgJnZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSwgNCk7Ci0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKIAogCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCi0JcGlvX2RldiA9IHZjcHVfZmluZF9waW9fZGV2KHZjcHUsIHBvcnQpOworCXBpb19kZXYgPSB2Y3B1X2ZpbmRfcGlvX2Rldih2Y3B1LCBwb3J0LCBzaXplLCAhaW4pOwogCWlmIChwaW9fZGV2KSB7CiAJCWtlcm5lbF9waW8ocGlvX2RldiwgdmNwdSwgdmNwdS0+YXJjaC5waW9fZGF0YSk7CiAJCWNvbXBsZXRlX3Bpbyh2Y3B1KTsKQEAgLTI0MTcsNyArMjQxNyw5IEBACiAJCX0KIAl9CiAKLQlwaW9fZGV2ID0gdmNwdV9maW5kX3Bpb19kZXYodmNwdSwgcG9ydCk7CisJcGlvX2RldiA9IHZjcHVfZmluZF9waW9fZGV2KHZjcHUsIHBvcnQsCisJCQkJICAgIHZjcHUtPmFyY2gucGlvLmN1cl9jb3VudCwKKwkJCQkgICAgIXZjcHUtPmFyY2gucGlvLmluKTsKIAlpZiAoIXZjcHUtPmFyY2gucGlvLmluKSB7CiAJCS8qIHN0cmluZyBQSU8gd3JpdGUgKi8KIAkJcmV0ID0gcGlvX2NvcHlfZGF0YSh2Y3B1KTsKQEAgLTI2MDAsMjcgKzI2MDIsNDEgQEAKIAogdW5zaWduZWQgbG9uZyByZWFsbW9kZV9nZXRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3IpCiB7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwogCWt2bV94ODZfb3BzLT5kZWNhY2hlX2NyNF9ndWVzdF9iaXRzKHZjcHUpOwogCXN3aXRjaCAoY3IpIHsKIAljYXNlIDA6Ci0JCXJldHVybiB2Y3B1LT5hcmNoLmNyMDsKKwkJdmFsdWUgPSB2Y3B1LT5hcmNoLmNyMDsKKwkJYnJlYWs7CiAJY2FzZSAyOgotCQlyZXR1cm4gdmNwdS0+YXJjaC5jcjI7CisJCXZhbHVlID0gdmNwdS0+YXJjaC5jcjI7CisJCWJyZWFrOwogCWNhc2UgMzoKLQkJcmV0dXJuIHZjcHUtPmFyY2guY3IzOworCQl2YWx1ZSA9IHZjcHUtPmFyY2guY3IzOworCQlicmVhazsKIAljYXNlIDQ6Ci0JCXJldHVybiB2Y3B1LT5hcmNoLmNyNDsKKwkJdmFsdWUgPSB2Y3B1LT5hcmNoLmNyNDsKKwkJYnJlYWs7CiAJY2FzZSA4OgotCQlyZXR1cm4ga3ZtX2dldF9jcjgodmNwdSk7CisJCXZhbHVlID0ga3ZtX2dldF9jcjgodmNwdSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXZjcHVfcHJpbnRmKHZjcHUsICIlczogdW5leHBlY3RlZCBjciAldVxuIiwgX19mdW5jX18sIGNyKTsKIAkJcmV0dXJuIDA7CiAJfQorCUtWTVRSQUNFXzNEKENSX1JFQUQsIHZjcHUsICh1MzIpY3IsICh1MzIpdmFsdWUsCisJCSAgICAodTMyKSgodTY0KXZhbHVlID4+IDMyKSwgaGFuZGxlcik7CisKKwlyZXR1cm4gdmFsdWU7CiB9CiAKIHZvaWQgcmVhbG1vZGVfc2V0X2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNyLCB1bnNpZ25lZCBsb25nIHZhbCwKIAkJICAgICB1bnNpZ25lZCBsb25nICpyZmxhZ3MpCiB7CisJS1ZNVFJBQ0VfM0QoQ1JfV1JJVEUsIHZjcHUsICh1MzIpY3IsICh1MzIpdmFsLAorCQkgICAgKHUzMikoKHU2NCl2YWwgPj4gMzIpLCBoYW5kbGVyKTsKKwogCXN3aXRjaCAoY3IpIHsKIAljYXNlIDA6CiAJCWt2bV9zZXRfY3IwKHZjcHUsIG1rX2NyXzY0KHZjcHUtPmFyY2guY3IwLCB2YWwpKTsKQEAgLTI3NzEsOCArMjc4NywxMCBAQAogCWlmICghYXBpYyB8fCAhYXBpYy0+dmFwaWNfYWRkcikKIAkJcmV0dXJuOwogCisJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoYXBpYy0+dmFwaWNfcGFnZSk7CiAJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgYXBpYy0+dmFwaWNfYWRkciA+PiBQQUdFX1NISUZUKTsKKwl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogfQogCiBzdGF0aWMgaW50IF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKQEAgLTI5MjgsOSArMjk0Niw3IEBACiAKIAlwb3N0X2t2bV9ydW5fc2F2ZSh2Y3B1LCBrdm1fcnVuKTsKIAotCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAl2YXBpY19leGl0KHZjcHUpOwotCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTI5NDIsMTUgKzI5NTgsMTUgQEAKIAogCXZjcHVfbG9hZCh2Y3B1KTsKIAotCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9VTklOSVRJQUxJWkVEKSkgewotCQlrdm1fdmNwdV9ibG9jayh2Y3B1KTsKLQkJdmNwdV9wdXQodmNwdSk7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQogCWlmICh2Y3B1LT5zaWdzZXRfYWN0aXZlKQogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnZjcHUtPnNpZ3NldCwgJnNpZ3NhdmVkKTsKIAorCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9VTklOSVRJQUxJWkVEKSkgeworCQlrdm1fdmNwdV9ibG9jayh2Y3B1KTsKKwkJciA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKwogCS8qIHJlLXN5bmMgYXBpYydzIHRwciAqLwogCWlmICghaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkKIAkJa3ZtX3NldF9jcjgodmNwdSwga3ZtX3J1bi0+Y3I4KTsKQEAgLTMwNzAsOCArMzA4Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGdldF9zZWdtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCXN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLCBpbnQgc2VnKQordm9pZCBrdm1fZ2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkgICAgIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLCBpbnQgc2VnKQogewogCWt2bV94ODZfb3BzLT5nZXRfc2VnbWVudCh2Y3B1LCB2YXIsIHNlZyk7CiB9CkBAIC0zMDgwLDcgKzMwOTYsNyBAQAogewogCXN0cnVjdCBrdm1fc2VnbWVudCBjczsKIAotCWdldF9zZWdtZW50KHZjcHUsICZjcywgVkNQVV9TUkVHX0NTKTsKKwlrdm1fZ2V0X3NlZ21lbnQodmNwdSwgJmNzLCBWQ1BVX1NSRUdfQ1MpOwogCSpkYiA9IGNzLmRiOwogCSpsID0gY3MubDsKIH0KQEAgLTMwOTQsMTUgKzMxMTAsMTUgQEAKIAogCXZjcHVfbG9hZCh2Y3B1KTsKIAotCWdldF9zZWdtZW50KHZjcHUsICZzcmVncy0+Y3MsIFZDUFVfU1JFR19DUyk7Ci0JZ2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5kcywgVkNQVV9TUkVHX0RTKTsKLQlnZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmVzLCBWQ1BVX1NSRUdfRVMpOwotCWdldF9zZWdtZW50KHZjcHUsICZzcmVncy0+ZnMsIFZDUFVfU1JFR19GUyk7Ci0JZ2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5ncywgVkNQVV9TUkVHX0dTKTsKLQlnZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPnNzLCBWQ1BVX1NSRUdfU1MpOworCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmNzLCBWQ1BVX1NSRUdfQ1MpOworCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmRzLCBWQ1BVX1NSRUdfRFMpOworCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmVzLCBWQ1BVX1NSRUdfRVMpOworCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmZzLCBWQ1BVX1NSRUdfRlMpOworCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmdzLCBWQ1BVX1NSRUdfR1MpOworCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPnNzLCBWQ1BVX1NSRUdfU1MpOwogCi0JZ2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT50ciwgVkNQVV9TUkVHX1RSKTsKLQlnZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmxkdCwgVkNQVV9TUkVHX0xEVFIpOworCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPnRyLCBWQ1BVX1NSRUdfVFIpOworCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmxkdCwgVkNQVV9TUkVHX0xEVFIpOwogCiAJa3ZtX3g4Nl9vcHMtPmdldF9pZHQodmNwdSwgJmR0KTsKIAlzcmVncy0+aWR0LmxpbWl0ID0gZHQubGltaXQ7CkBAIC0zMTU0LDcgKzMxNzAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCitzdGF0aWMgdm9pZCBrdm1fc2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpCiB7CiAJa3ZtX3g4Nl9vcHMtPnNldF9zZWdtZW50KHZjcHUsIHZhciwgc2VnKTsKQEAgLTMxOTEsNyArMzIwNyw3IEBACiAJaWYgKHNlbGVjdG9yICYgMSA8PCAyKSB7CiAJCXN0cnVjdCBrdm1fc2VnbWVudCBrdm1fc2VnOwogCi0JCWdldF9zZWdtZW50KHZjcHUsICZrdm1fc2VnLCBWQ1BVX1NSRUdfTERUUik7CisJCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAma3ZtX3NlZywgVkNQVV9TUkVHX0xEVFIpOwogCiAJCWlmIChrdm1fc2VnLnVudXNhYmxlKQogCQkJZHRhYmxlLT5saW1pdCA9IDA7CkBAIC0zMjk3LDcgKzMzMTMsNyBAQAogewogCXN0cnVjdCBrdm1fc2VnbWVudCBrdm1fc2VnOwogCi0JZ2V0X3NlZ21lbnQodmNwdSwgJmt2bV9zZWcsIHNlZyk7CisJa3ZtX2dldF9zZWdtZW50KHZjcHUsICZrdm1fc2VnLCBzZWcpOwogCXJldHVybiBrdm1fc2VnLnNlbGVjdG9yOwogfQogCkBAIC0zMzEzLDggKzMzMjksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNlbGVjdG9yLAotCQkJCSAgIGludCB0eXBlX2JpdHMsIGludCBzZWcpCitpbnQga3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNlbGVjdG9yLAorCQkJCWludCB0eXBlX2JpdHMsIGludCBzZWcpCiB7CiAJc3RydWN0IGt2bV9zZWdtZW50IGt2bV9zZWc7CiAKQEAgLTMzMjcsNyArMzM0Myw3IEBACiAJCWlmICgha3ZtX3NlZy5zKQogCQkJa3ZtX3NlZy51bnVzYWJsZSA9IDE7CiAKLQlzZXRfc2VnbWVudCh2Y3B1LCAma3ZtX3NlZywgc2VnKTsKKwlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJmt2bV9zZWcsIHNlZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNzMsMjUgKzMzODksMjUgQEAKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTSV0gPSB0c3MtPmVzaTsKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV0gPSB0c3MtPmVkaTsKIAotCWlmIChsb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmxkdF9zZWxlY3RvciwgMCwgVkNQVV9TUkVHX0xEVFIpKQorCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5sZHRfc2VsZWN0b3IsIDAsIFZDUFVfU1JFR19MRFRSKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAobG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5lcywgMSwgVkNQVV9TUkVHX0VTKSkKKwlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+ZXMsIDEsIFZDUFVfU1JFR19FUykpCiAJCXJldHVybiAxOwogCi0JaWYgKGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+Y3MsIDksIFZDUFVfU1JFR19DUykpCisJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmNzLCA5LCBWQ1BVX1NSRUdfQ1MpKQogCQlyZXR1cm4gMTsKIAotCWlmIChsb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPnNzLCAxLCBWQ1BVX1NSRUdfU1MpKQorCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5zcywgMSwgVkNQVV9TUkVHX1NTKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAobG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5kcywgMSwgVkNQVV9TUkVHX0RTKSkKKwlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+ZHMsIDEsIFZDUFVfU1JFR19EUykpCiAJCXJldHVybiAxOwogCi0JaWYgKGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+ZnMsIDEsIFZDUFVfU1JFR19GUykpCisJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmZzLCAxLCBWQ1BVX1NSRUdfRlMpKQogCQlyZXR1cm4gMTsKIAotCWlmIChsb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmdzLCAxLCBWQ1BVX1NSRUdfR1MpKQorCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5ncywgMSwgVkNQVV9TUkVHX0dTKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNDMyLDI0ICszNDQ4LDI0IEBACiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU0ldID0gdHNzLT5zaTsKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV0gPSB0c3MtPmRpOwogCi0JaWYgKGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+bGR0LCAwLCBWQ1BVX1NSRUdfTERUUikpCisJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmxkdCwgMCwgVkNQVV9TUkVHX0xEVFIpKQogCQlyZXR1cm4gMTsKIAotCWlmIChsb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmVzLCAxLCBWQ1BVX1NSRUdfRVMpKQorCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5lcywgMSwgVkNQVV9TUkVHX0VTKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAobG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5jcywgOSwgVkNQVV9TUkVHX0NTKSkKKwlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+Y3MsIDksIFZDUFVfU1JFR19DUykpCiAJCXJldHVybiAxOwogCi0JaWYgKGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+c3MsIDEsIFZDUFVfU1JFR19TUykpCisJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPnNzLCAxLCBWQ1BVX1NSRUdfU1MpKQogCQlyZXR1cm4gMTsKIAotCWlmIChsb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmRzLCAxLCBWQ1BVX1NSRUdfRFMpKQorCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5kcywgMSwgVkNQVV9TUkVHX0RTKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBrdm1fdGFza19zd2l0Y2hfMTYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgdHNzX3NlbGVjdG9yLAorc3RhdGljIGludCBrdm1fdGFza19zd2l0Y2hfMTYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgdHNzX3NlbGVjdG9yLAogCQkgICAgICAgc3RydWN0IGRlc2Nfc3RydWN0ICpjc2VnX2Rlc2MsCiAJCSAgICAgICBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKm5zZWdfZGVzYykKIHsKQEAgLTM0NzIsNyArMzQ4OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGt2bV90YXNrX3N3aXRjaF8zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiB0c3Nfc2VsZWN0b3IsCitzdGF0aWMgaW50IGt2bV90YXNrX3N3aXRjaF8zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiB0c3Nfc2VsZWN0b3IsCiAJCSAgICAgICBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmNzZWdfZGVzYywKIAkJICAgICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqbnNlZ19kZXNjKQogewpAQCAtMzUwMiw3ICszNTE4LDcgQEAKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgbnNlZ19kZXNjOwogCWludCByZXQgPSAwOwogCi0JZ2V0X3NlZ21lbnQodmNwdSwgJnRyX3NlZywgVkNQVV9TUkVHX1RSKTsKKwlrdm1fZ2V0X3NlZ21lbnQodmNwdSwgJnRyX3NlZywgVkNQVV9TUkVHX1RSKTsKIAogCWlmIChsb2FkX2d1ZXN0X3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3Nfc2VsZWN0b3IsICZuc2VnX2Rlc2MpKQogCQlnb3RvIG91dDsKQEAgLTM1NjEsNyArMzU3Nyw3IEBACiAJa3ZtX3g4Nl9vcHMtPnNldF9jcjAodmNwdSwgdmNwdS0+YXJjaC5jcjAgfCBYODZfQ1IwX1RTKTsKIAlzZWdfZGVzY3RfdG9fa3ZtX2Rlc2N0KCZuc2VnX2Rlc2MsIHRzc19zZWxlY3RvciwgJnRyX3NlZyk7CiAJdHJfc2VnLnR5cGUgPSAxMTsKLQlzZXRfc2VnbWVudCh2Y3B1LCAmdHJfc2VnLCBWQ1BVX1NSRUdfVFIpOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmdHJfc2VnLCBWQ1BVX1NSRUdfVFIpOwogb3V0OgogCWt2bV94ODZfb3BzLT5kZWNhY2hlX3JlZ3ModmNwdSk7CiAJcmV0dXJuIHJldDsKQEAgLTM2MjgsMTUgKzM2NDQsMTUgQEAKIAkJfQogCX0KIAotCXNldF9zZWdtZW50KHZjcHUsICZzcmVncy0+Y3MsIFZDUFVfU1JFR19DUyk7Ci0Jc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5kcywgVkNQVV9TUkVHX0RTKTsKLQlzZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmVzLCBWQ1BVX1NSRUdfRVMpOwotCXNldF9zZWdtZW50KHZjcHUsICZzcmVncy0+ZnMsIFZDUFVfU1JFR19GUyk7Ci0Jc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5ncywgVkNQVV9TUkVHX0dTKTsKLQlzZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPnNzLCBWQ1BVX1NSRUdfU1MpOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmNzLCBWQ1BVX1NSRUdfQ1MpOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmRzLCBWQ1BVX1NSRUdfRFMpOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmVzLCBWQ1BVX1NSRUdfRVMpOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmZzLCBWQ1BVX1NSRUdfRlMpOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmdzLCBWQ1BVX1NSRUdfR1MpOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPnNzLCBWQ1BVX1NSRUdfU1MpOwogCi0Jc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT50ciwgVkNQVV9TUkVHX1RSKTsKLQlzZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmxkdCwgVkNQVV9TUkVHX0xEVFIpOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPnRyLCBWQ1BVX1NSRUdfVFIpOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmxkdCwgVkNQVV9TUkVHX0xEVFIpOwogCiAJdmNwdV9wdXQodmNwdSk7CiAKQEAgLTM3NTEsMTQgKzM3NjcsMTQgQEAKIAkgKiBhbGxvY2F0ZSByYW0gd2l0aCBHRlBfS0VSTkVMLgogCSAqLwogCWlmICghdXNlZF9tYXRoKCkpCi0JCWZ4X3NhdmUoJnZjcHUtPmFyY2guaG9zdF9meF9pbWFnZSk7CisJCWt2bV9meF9zYXZlKCZ2Y3B1LT5hcmNoLmhvc3RfZnhfaW1hZ2UpOwogCiAJLyogSW5pdGlhbGl6ZSBndWVzdCBGUFUgYnkgcmVzZXR0aW5nIG91cnMgYW5kIHNhdmluZyBpbnRvIGd1ZXN0J3MgKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlmeF9zYXZlKCZ2Y3B1LT5hcmNoLmhvc3RfZnhfaW1hZ2UpOwotCWZ4X2Zpbml0KCk7Ci0JZnhfc2F2ZSgmdmNwdS0+YXJjaC5ndWVzdF9meF9pbWFnZSk7Ci0JZnhfcmVzdG9yZSgmdmNwdS0+YXJjaC5ob3N0X2Z4X2ltYWdlKTsKKwlrdm1fZnhfc2F2ZSgmdmNwdS0+YXJjaC5ob3N0X2Z4X2ltYWdlKTsKKwlrdm1fZnhfZmluaXQoKTsKKwlrdm1fZnhfc2F2ZSgmdmNwdS0+YXJjaC5ndWVzdF9meF9pbWFnZSk7CisJa3ZtX2Z4X3Jlc3RvcmUoJnZjcHUtPmFyY2guaG9zdF9meF9pbWFnZSk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIAogCXZjcHUtPmFyY2guY3IwIHw9IFg4Nl9DUjBfRVQ7CkBAIC0zNzc1LDggKzM3OTEsOCBAQAogCQlyZXR1cm47CiAKIAl2Y3B1LT5ndWVzdF9mcHVfbG9hZGVkID0gMTsKLQlmeF9zYXZlKCZ2Y3B1LT5hcmNoLmhvc3RfZnhfaW1hZ2UpOwotCWZ4X3Jlc3RvcmUoJnZjcHUtPmFyY2guZ3Vlc3RfZnhfaW1hZ2UpOworCWt2bV9meF9zYXZlKCZ2Y3B1LT5hcmNoLmhvc3RfZnhfaW1hZ2UpOworCWt2bV9meF9yZXN0b3JlKCZ2Y3B1LT5hcmNoLmd1ZXN0X2Z4X2ltYWdlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9sb2FkX2d1ZXN0X2ZwdSk7CiAKQEAgLTM3ODYsOCArMzgwMiw4IEBACiAJCXJldHVybjsKIAogCXZjcHUtPmd1ZXN0X2ZwdV9sb2FkZWQgPSAwOwotCWZ4X3NhdmUoJnZjcHUtPmFyY2guZ3Vlc3RfZnhfaW1hZ2UpOwotCWZ4X3Jlc3RvcmUoJnZjcHUtPmFyY2guaG9zdF9meF9pbWFnZSk7CisJa3ZtX2Z4X3NhdmUoJnZjcHUtPmFyY2guZ3Vlc3RfZnhfaW1hZ2UpOworCWt2bV9meF9yZXN0b3JlKCZ2Y3B1LT5hcmNoLmhvc3RfZnhfaW1hZ2UpOwogCSsrdmNwdS0+c3RhdC5mcHVfcmVsb2FkOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3B1dF9ndWVzdF9mcHUpOwpAQCAtNDAxNiw2ICs0MDMyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93KHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlrdm1fbW11X3phcF9hbGwoa3ZtKTsKK30KKwogaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiB2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9SVU5OQUJMRQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYwppbmRleCA5MzJmMjE2Li5mMmY5MDQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJMCwgMCwgMCwgRHN0UmVnIHwgU3JjTWVtMzIgfCBNb2RSTSB8IE1vdiAvKiBtb3ZzeGQgKHg4Ni82NCkgKi8gLAogCTAsIDAsIDAsIDAsCiAJLyogMHg2OCAtIDB4NkYgKi8KLQkwLCAwLCBJbXBsaWNpdE9wcyB8IE1vdiB8IFN0YWNrLCAwLAorCVNyY0ltbSB8IE1vdiB8IFN0YWNrLCAwLCBTcmNJbW1CeXRlIHwgTW92IHwgU3RhY2ssIDAsCiAJU3JjTm9uZSAgfCBCeXRlT3AgIHwgSW1wbGljaXRPcHMsIFNyY05vbmUgIHwgSW1wbGljaXRPcHMsIC8qIGluc2IsIGluc3cvaW5zZCAqLwogCVNyY05vbmUgIHwgQnl0ZU9wICB8IEltcGxpY2l0T3BzLCBTcmNOb25lICB8IEltcGxpY2l0T3BzLCAvKiBvdXRzYiwgb3V0c3cvb3V0c2QgKi8KIAkvKiAweDcwIC0gMHg3NyAqLwpAQCAtMTM4LDkgKzEzOCwxMSBAQAogCS8qIDB4ODggLSAweDhGICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBNb3YsIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTW92LAogCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKLQkwLCBNb2RSTSB8IERzdFJlZywgMCwgR3JvdXAgfCBHcm91cDFBLAotCS8qIDB4OTAgLSAweDlGICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwlEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IE1vdiwgTW9kUk0gfCBEc3RSZWcsCisJRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIEdyb3VwIHwgR3JvdXAxQSwKKwkvKiAweDkwIC0gMHg5NyAqLworCURzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywJRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLAorCS8qIDB4OTggLSAweDlGICovCiAJMCwgMCwgMCwgMCwgSW1wbGljaXRPcHMgfCBTdGFjaywgSW1wbGljaXRPcHMgfCBTdGFjaywgMCwgMCwKIAkvKiAweEEwIC0gMHhBNyAqLwogCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vdiB8IE1lbUFicywgRHN0UmVnIHwgU3JjTWVtIHwgTW92IHwgTWVtQWJzLApAQCAtMTUyLDcgKzE1NCw4IEBACiAJQnl0ZU9wIHwgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsIEltcGxpY2l0T3BzIHwgTW92IHwgU3RyaW5nLAogCUJ5dGVPcCB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBJbXBsaWNpdE9wcyB8IFN0cmluZywKIAkvKiAweEIwIC0gMHhCRiAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAJLyogMHhDMCAtIDB4QzcgKi8KIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNLAogCTAsIEltcGxpY2l0T3BzIHwgU3RhY2ssIDAsIDAsCkBAIC0xNjgsNyArMTcxLDggQEAKIAkvKiAweEUwIC0gMHhFNyAqLwogCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAJLyogMHhFOCAtIDB4RUYgKi8KLQlJbXBsaWNpdE9wcyB8IFN0YWNrLCBTcmNJbW18SW1wbGljaXRPcHMsIDAsIFNyY0ltbUJ5dGV8SW1wbGljaXRPcHMsCisJSW1wbGljaXRPcHMgfCBTdGFjaywgU3JjSW1tIHwgSW1wbGljaXRPcHMsCisJSW1wbGljaXRPcHMsIFNyY0ltbUJ5dGUgfCBJbXBsaWNpdE9wcywKIAkwLCAwLCAwLCAwLAogCS8qIDB4RjAgLSAweEY3ICovCiAJMCwgMCwgMCwgMCwKQEAgLTIxNSw3ICsyMTksNyBAQAogCS8qIDB4QTAgLSAweEE3ICovCiAJMCwgMCwgMCwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBCaXRPcCwgMCwgMCwgMCwgMCwKIAkvKiAweEE4IC0gMHhBRiAqLwotCTAsIDAsIDAsIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBCaXRPcCwgMCwgMCwgTW9kUk0sIDAsCiAJLyogMHhCMCAtIDB4QjcgKi8KIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIDAsCiAJICAgIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AsCkBAIC01MTgsNiArNTIyLDM5IEBACiAJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPmVpcCwgcmVsKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X3NlZ19vdmVycmlkZShzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjLCBpbnQgc2VnKQoreworCWMtPmhhc19zZWdfb3ZlcnJpZGUgPSB0cnVlOworCWMtPnNlZ19vdmVycmlkZSA9IHNlZzsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VnX2Jhc2Uoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBzZWcpCit7CisJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCAmJiBzZWcgPCBWQ1BVX1NSRUdfRlMpCisJCXJldHVybiAwOworCisJcmV0dXJuIGt2bV94ODZfb3BzLT5nZXRfc2VnbWVudF9iYXNlKGN0eHQtPnZjcHUsIHNlZyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlZ19vdmVycmlkZV9iYXNlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJCSAgICAgICBzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjKQoreworCWlmICghYy0+aGFzX3NlZ19vdmVycmlkZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2VnX2Jhc2UoY3R4dCwgYy0+c2VnX292ZXJyaWRlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXNfYmFzZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlyZXR1cm4gc2VnX2Jhc2UoY3R4dCwgVkNQVV9TUkVHX0VTKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3NfYmFzZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlyZXR1cm4gc2VnX2Jhc2UoY3R4dCwgVkNQVV9TUkVHX1NTKTsKK30KKwogc3RhdGljIGludCBkb19mZXRjaF9pbnNuX2J5dGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJCQkgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGxpbmVhciwgdTggKmRlc3QpCkBAIC02NjAsNyArNjk3LDcgQEAKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAl1OCBzaWI7Ci0JaW50IGluZGV4X3JlZyA9IDAsIGJhc2VfcmVnID0gMCwgc2NhbGUsIHJpcF9yZWxhdGl2ZSA9IDA7CisJaW50IGluZGV4X3JlZyA9IDAsIGJhc2VfcmVnID0gMCwgc2NhbGU7CiAJaW50IHJjID0gMDsKIAogCWlmIChjLT5yZXhfcHJlZml4KSB7CkBAIC03MzEsNDcgKzc2OCwyOCBAQAogCQl9CiAJCWlmIChjLT5tb2RybV9ybSA9PSAyIHx8IGMtPm1vZHJtX3JtID09IDMgfHwKIAkJICAgIChjLT5tb2RybV9ybSA9PSA2ICYmIGMtPm1vZHJtX21vZCAhPSAwKSkKLQkJCWlmICghYy0+b3ZlcnJpZGVfYmFzZSkKLQkJCQljLT5vdmVycmlkZV9iYXNlID0gJmN0eHQtPnNzX2Jhc2U7CisJCQlpZiAoIWMtPmhhc19zZWdfb3ZlcnJpZGUpCisJCQkJc2V0X3NlZ19vdmVycmlkZShjLCBWQ1BVX1NSRUdfU1MpOwogCQljLT5tb2RybV9lYSA9ICh1MTYpYy0+bW9kcm1fZWE7CiAJfSBlbHNlIHsKIAkJLyogMzIvNjQtYml0IE1vZFIvTSBkZWNvZGUuICovCi0JCXN3aXRjaCAoYy0+bW9kcm1fcm0pIHsKLQkJY2FzZSA0OgotCQljYXNlIDEyOgorCQlpZiAoKGMtPm1vZHJtX3JtICYgNykgPT0gNCkgewogCQkJc2liID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKIAkJCWluZGV4X3JlZyB8PSAoc2liID4+IDMpICYgNzsKIAkJCWJhc2VfcmVnIHw9IHNpYiAmIDc7CiAJCQlzY2FsZSA9IHNpYiA+PiA2OwogCi0JCQlzd2l0Y2ggKGJhc2VfcmVnKSB7Ci0JCQljYXNlIDU6Ci0JCQkJaWYgKGMtPm1vZHJtX21vZCAhPSAwKQotCQkJCQljLT5tb2RybV9lYSArPSBjLT5yZWdzW2Jhc2VfcmVnXTsKLQkJCQllbHNlCi0JCQkJCWMtPm1vZHJtX2VhICs9Ci0JCQkJCQlpbnNuX2ZldGNoKHMzMiwgNCwgYy0+ZWlwKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6CisJCQlpZiAoKGJhc2VfcmVnICYgNykgPT0gNSAmJiBjLT5tb2RybV9tb2QgPT0gMCkKKwkJCQljLT5tb2RybV9lYSArPSBpbnNuX2ZldGNoKHMzMiwgNCwgYy0+ZWlwKTsKKwkJCWVsc2UKIAkJCQljLT5tb2RybV9lYSArPSBjLT5yZWdzW2Jhc2VfcmVnXTsKLQkJCX0KLQkJCXN3aXRjaCAoaW5kZXhfcmVnKSB7Ci0JCQljYXNlIDQ6Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgorCQkJaWYgKGluZGV4X3JlZyAhPSA0KQogCQkJCWMtPm1vZHJtX2VhICs9IGMtPnJlZ3NbaW5kZXhfcmVnXSA8PCBzY2FsZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDU6Ci0JCQlpZiAoYy0+bW9kcm1fbW9kICE9IDApCi0JCQkJYy0+bW9kcm1fZWEgKz0gYy0+cmVnc1tjLT5tb2RybV9ybV07Ci0JCQllbHNlIGlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpCi0JCQkJcmlwX3JlbGF0aXZlID0gMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgorCQl9IGVsc2UgaWYgKChjLT5tb2RybV9ybSAmIDcpID09IDUgJiYgYy0+bW9kcm1fbW9kID09IDApIHsKKwkJCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpCisJCQkJYy0+cmlwX3JlbGF0aXZlID0gMTsKKwkJfSBlbHNlCiAJCQljLT5tb2RybV9lYSArPSBjLT5yZWdzW2MtPm1vZHJtX3JtXTsKLQkJCWJyZWFrOwotCQl9CiAJCXN3aXRjaCAoYy0+bW9kcm1fbW9kKSB7CiAJCWNhc2UgMDoKIAkJCWlmIChjLT5tb2RybV9ybSA9PSA1KQpAQCAtNzg1LDIyICs4MDMsNiBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKHJpcF9yZWxhdGl2ZSkgewotCQljLT5tb2RybV9lYSArPSBjLT5laXA7Ci0JCXN3aXRjaCAoYy0+ZCAmIFNyY01hc2spIHsKLQkJY2FzZSBTcmNJbW1CeXRlOgotCQkJYy0+bW9kcm1fZWEgKz0gMTsKLQkJCWJyZWFrOwotCQljYXNlIFNyY0ltbToKLQkJCWlmIChjLT5kICYgQnl0ZU9wKQotCQkJCWMtPm1vZHJtX2VhICs9IDE7Ci0JCQllbHNlCi0JCQkJaWYgKGMtPm9wX2J5dGVzID09IDgpCi0JCQkJCWMtPm1vZHJtX2VhICs9IDQ7Ci0JCQkJZWxzZQotCQkJCQljLT5tb2RybV9lYSArPSBjLT5vcF9ieXRlczsKLQkJfQotCX0KIGRvbmU6CiAJcmV0dXJuIHJjOwogfQpAQCAtODM4LDYgKzg0MCw3IEBACiAKIAltZW1zZXQoYywgMCwgc2l6ZW9mKHN0cnVjdCBkZWNvZGVfY2FjaGUpKTsKIAljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJpcDsKKwljdHh0LT5jc19iYXNlID0gc2VnX2Jhc2UoY3R4dCwgVkNQVV9TUkVHX0NTKTsKIAltZW1jcHkoYy0+cmVncywgY3R4dC0+dmNwdS0+YXJjaC5yZWdzLCBzaXplb2YgYy0+cmVncyk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTg3NiwyMyArODc5LDE1IEBACiAJCQkJLyogc3dpdGNoIGJldHdlZW4gMi80IGJ5dGVzICovCiAJCQkJYy0+YWRfYnl0ZXMgPSBkZWZfYWRfYnl0ZXMgXiA2OwogCQkJYnJlYWs7Ci0JCWNhc2UgMHgyZToJLyogQ1Mgb3ZlcnJpZGUgKi8KLQkJCWMtPm92ZXJyaWRlX2Jhc2UgPSAmY3R4dC0+Y3NfYmFzZTsKLQkJCWJyZWFrOwotCQljYXNlIDB4M2U6CS8qIERTIG92ZXJyaWRlICovCi0JCQljLT5vdmVycmlkZV9iYXNlID0gJmN0eHQtPmRzX2Jhc2U7Ci0JCQlicmVhazsKIAkJY2FzZSAweDI2OgkvKiBFUyBvdmVycmlkZSAqLwotCQkJYy0+b3ZlcnJpZGVfYmFzZSA9ICZjdHh0LT5lc19iYXNlOworCQljYXNlIDB4MmU6CS8qIENTIG92ZXJyaWRlICovCisJCWNhc2UgMHgzNjoJLyogU1Mgb3ZlcnJpZGUgKi8KKwkJY2FzZSAweDNlOgkvKiBEUyBvdmVycmlkZSAqLworCQkJc2V0X3NlZ19vdmVycmlkZShjLCAoYy0+YiA+PiAzKSAmIDMpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHg2NDoJLyogRlMgb3ZlcnJpZGUgKi8KLQkJCWMtPm92ZXJyaWRlX2Jhc2UgPSAmY3R4dC0+ZnNfYmFzZTsKLQkJCWJyZWFrOwogCQljYXNlIDB4NjU6CS8qIEdTIG92ZXJyaWRlICovCi0JCQljLT5vdmVycmlkZV9iYXNlID0gJmN0eHQtPmdzX2Jhc2U7Ci0JCQlicmVhazsKLQkJY2FzZSAweDM2OgkvKiBTUyBvdmVycmlkZSAqLwotCQkJYy0+b3ZlcnJpZGVfYmFzZSA9ICZjdHh0LT5zc19iYXNlOworCQkJc2V0X3NlZ19vdmVycmlkZShjLCBjLT5iICYgNyk7CiAJCQlicmVhazsKIAkJY2FzZSAweDQwIC4uLiAweDRmOiAvKiBSRVggKi8KIAkJCWlmIChtb2RlICE9IFg4NkVNVUxfTU9ERV9QUk9UNjQpCkBAIC05NjQsMTUgKzk1OSwxMSBAQAogCWlmIChyYykKIAkJZ290byBkb25lOwogCi0JaWYgKCFjLT5vdmVycmlkZV9iYXNlKQotCQljLT5vdmVycmlkZV9iYXNlID0gJmN0eHQtPmRzX2Jhc2U7Ci0JaWYgKG1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCAmJgotCSAgICBjLT5vdmVycmlkZV9iYXNlICE9ICZjdHh0LT5mc19iYXNlICYmCi0JICAgIGMtPm92ZXJyaWRlX2Jhc2UgIT0gJmN0eHQtPmdzX2Jhc2UpCi0JCWMtPm92ZXJyaWRlX2Jhc2UgPSBOVUxMOworCWlmICghYy0+aGFzX3NlZ19vdmVycmlkZSkKKwkJc2V0X3NlZ19vdmVycmlkZShjLCBWQ1BVX1NSRUdfRFMpOwogCi0JaWYgKGMtPm92ZXJyaWRlX2Jhc2UpCi0JCWMtPm1vZHJtX2VhICs9ICpjLT5vdmVycmlkZV9iYXNlOworCWlmICghKCFjLT50d29ieXRlICYmIGMtPmIgPT0gMHg4ZCkpCisJCWMtPm1vZHJtX2VhICs9IHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpOwogCiAJaWYgKGMtPmFkX2J5dGVzICE9IDgpCiAJCWMtPm1vZHJtX2VhID0gKHUzMiljLT5tb2RybV9lYTsKQEAgLTEwNDksNiArMTA0MCw3IEBACiAJCWJyZWFrOwogCWNhc2UgRHN0TWVtOgogCQlpZiAoKGMtPmQgJiBNb2RSTSkgJiYgYy0+bW9kcm1fbW9kID09IDMpIHsKKwkJCWMtPmRzdC5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKIAkJCWMtPmRzdC50eXBlID0gT1BfUkVHOwogCQkJYy0+ZHN0LnZhbCA9IGMtPmRzdC5vcmlnX3ZhbCA9IGMtPm1vZHJtX3ZhbDsKIAkJCWMtPmRzdC5wdHIgPSBjLT5tb2RybV9wdHI7CkBAIC0xMDU4LDYgKzEwNTAsOSBAQAogCQlicmVhazsKIAl9CiAKKwlpZiAoYy0+cmlwX3JlbGF0aXZlKQorCQljLT5tb2RybV9lYSArPSBjLT5laXA7CisKIGRvbmU6CiAJcmV0dXJuIChyYyA9PSBYODZFTVVMX1VOSEFORExFQUJMRSkgPyAtMSA6IDA7CiB9CkBAIC0xMDcwLDcgKzEwNjUsNyBAQAogCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOwogCWMtPmRzdC52YWwgPSBjLT5zcmMudmFsOwogCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU1BdLCAtYy0+b3BfYnl0ZXMpOwotCWMtPmRzdC5wdHIgPSAodm9pZCAqKSByZWdpc3Rlcl9hZGRyZXNzKGMsIGN0eHQtPnNzX2Jhc2UsCisJYy0+ZHN0LnB0ciA9ICh2b2lkICopIHJlZ2lzdGVyX2FkZHJlc3MoYywgc3NfYmFzZShjdHh0KSwKIAkJCQkJICAgICAgIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pOwogfQogCkBAIC0xMDgwLDcgKzEwNzUsNyBAQAogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwogCWludCByYzsKIAotCXJjID0gb3BzLT5yZWFkX3N0ZChyZWdpc3Rlcl9hZGRyZXNzKGMsIGN0eHQtPnNzX2Jhc2UsCisJcmMgPSBvcHMtPnJlYWRfc3RkKHJlZ2lzdGVyX2FkZHJlc3MoYywgc3NfYmFzZShjdHh0KSwKIAkJCQkJICAgIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pLAogCQkJICAgJmMtPmRzdC52YWwsIGMtPmRzdC5ieXRlcywgY3R4dC0+dmNwdSk7CiAJaWYgKHJjICE9IDApCkBAIC0xNDAyLDExICsxMzk3LDExIEBACiAJCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU1BdLAogCQkJCQkgICAtYy0+b3BfYnl0ZXMpOwogCQljLT5kc3QucHRyID0gKHZvaWQgKikgcmVnaXN0ZXJfYWRkcmVzcygKLQkJCWMsIGN0eHQtPnNzX2Jhc2UsIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pOworCQkJYywgc3NfYmFzZShjdHh0KSwgYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSk7CiAJCWJyZWFrOwogCWNhc2UgMHg1OCAuLi4gMHg1ZjogLyogcG9wIHJlZyAqLwogCXBvcF9pbnN0cnVjdGlvbjoKLQkJaWYgKChyYyA9IG9wcy0+cmVhZF9zdGQocmVnaXN0ZXJfYWRkcmVzcyhjLCBjdHh0LT5zc19iYXNlLAorCQlpZiAoKHJjID0gb3BzLT5yZWFkX3N0ZChyZWdpc3Rlcl9hZGRyZXNzKGMsIHNzX2Jhc2UoY3R4dCksCiAJCQljLT5yZWdzW1ZDUFVfUkVHU19SU1BdKSwgYy0+ZHN0LnB0ciwKIAkJCWMtPm9wX2J5dGVzLCBjdHh0LT52Y3B1KSkgIT0gMCkKIAkJCWdvdG8gZG9uZTsKQEAgLTE0MjAsOSArMTQxNSw4IEBACiAJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOwogCQljLT5kc3QudmFsID0gKHMzMikgYy0+c3JjLnZhbDsKIAkJYnJlYWs7CisJY2FzZSAweDY4OiAvKiBwdXNoIGltbSAqLwogCWNhc2UgMHg2YTogLyogcHVzaCBpbW04ICovCi0JCWMtPnNyYy52YWwgPSAwTDsKLQkJYy0+c3JjLnZhbCA9IGluc25fZmV0Y2goczgsIDEsIGMtPmVpcCk7CiAJCWVtdWxhdGVfcHVzaChjdHh0KTsKIAkJYnJlYWs7CiAJY2FzZSAweDZjOgkJLyogaW5zYiAqLwpAQCAtMTQzMyw3ICsxNDI3LDcgQEAKIAkJCQljLT5yZXBfcHJlZml4ID8KIAkJCQlhZGRyZXNzX21hc2soYywgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSkgOiAxLAogCQkJCShjdHh0LT5lZmxhZ3MgJiBFRkxHX0RGKSwKLQkJCQlyZWdpc3Rlcl9hZGRyZXNzKGMsIGN0eHQtPmVzX2Jhc2UsCisJCQkJcmVnaXN0ZXJfYWRkcmVzcyhjLCBlc19iYXNlKGN0eHQpLAogCQkJCQkJIGMtPnJlZ3NbVkNQVV9SRUdTX1JESV0pLAogCQkJCWMtPnJlcF9wcmVmaXgsCiAJCQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSkgPT0gMCkgewpAQCAtMTQ0OSw5ICsxNDQzLDggQEAKIAkJCQljLT5yZXBfcHJlZml4ID8KIAkJCQlhZGRyZXNzX21hc2soYywgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSkgOiAxLAogCQkJCShjdHh0LT5lZmxhZ3MgJiBFRkxHX0RGKSwKLQkJCQlyZWdpc3Rlcl9hZGRyZXNzKGMsIGMtPm92ZXJyaWRlX2Jhc2UgPwotCQkJCQkJCSpjLT5vdmVycmlkZV9iYXNlIDoKLQkJCQkJCQljdHh0LT5kc19iYXNlLAorCQkJCQkgcmVnaXN0ZXJfYWRkcmVzcyhjLAorCQkJCQkgIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLAogCQkJCQkJIGMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0pLAogCQkJCWMtPnJlcF9wcmVmaXgsCiAJCQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSkgPT0gMCkgewpAQCAtMTQ5MCw2ICsxNDgzLDcgQEAKIAkJZW11bGF0ZV8yb3BfU3JjVigidGVzdCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIDB4ODYgLi4uIDB4ODc6CS8qIHhjaGcgKi8KKwl4Y2hnOgogCQkvKiBXcml0ZSBiYWNrIHRoZSByZWdpc3RlciBzb3VyY2UuICovCiAJCXN3aXRjaCAoYy0+ZHN0LmJ5dGVzKSB7CiAJCWNhc2UgMToKQEAgLTE1MTQsMTQgKzE1MDgsNjAgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDg4IC4uLiAweDhiOgkvKiBtb3YgKi8KIAkJZ290byBtb3Y7CisJY2FzZSAweDhjOiB7IC8qIG1vdiByL20sIHNyZWcgKi8KKwkJc3RydWN0IGt2bV9zZWdtZW50IHNlZ3JlZzsKKworCQlpZiAoYy0+bW9kcm1fcmVnIDw9IDUpCisJCQlrdm1fZ2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgJnNlZ3JlZywgYy0+bW9kcm1fcmVnKTsKKwkJZWxzZSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIweDhjOiBJbnZhbGlkIHNlZ3JlZyBpbiBtb2RybSBieXRlIDB4JTAyeFxuIiwKKwkJCSAgICAgICBjLT5tb2RybSk7CisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQl9CisJCWMtPmRzdC52YWwgPSBzZWdyZWcuc2VsZWN0b3I7CisJCWJyZWFrOworCX0KIAljYXNlIDB4OGQ6IC8qIGxlYSByMTYvcjMyLCBtICovCiAJCWMtPmRzdC52YWwgPSBjLT5tb2RybV9lYTsKIAkJYnJlYWs7CisJY2FzZSAweDhlOiB7IC8qIG1vdiBzZWcsIHIvbTE2ICovCisJCXVpbnQxNl90IHNlbDsKKwkJaW50IHR5cGVfYml0czsKKwkJaW50IGVycjsKKworCQlzZWwgPSBjLT5zcmMudmFsOworCQlpZiAoYy0+bW9kcm1fcmVnIDw9IDUpIHsKKwkJCXR5cGVfYml0cyA9IChjLT5tb2RybV9yZWcgPT0gMSkgPyA5IDogMTsKKwkJCWVyciA9IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LT52Y3B1LCBzZWwsCisJCQkJCQkJICB0eXBlX2JpdHMsIGMtPm1vZHJtX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJJbnZhbGlkIHNlZ3JlZyBpbiBtb2RybSBieXRlIDB4JTAyeFxuIiwKKwkJCQkJYy0+bW9kcm0pOworCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJfQorCisJCWlmIChlcnIgPCAwKQorCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7ICAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJYnJlYWs7CisJfQogCWNhc2UgMHg4ZjoJCS8qIHBvcCAoc29sZSBtZW1iZXIgb2YgR3JwMWEpICovCiAJCXJjID0gZW11bGF0ZV9ncnAxYShjdHh0LCBvcHMpOwogCQlpZiAocmMgIT0gMCkKIAkJCWdvdG8gZG9uZTsKIAkJYnJlYWs7CisJY2FzZSAweDkwOiAvKiBub3AgLyB4Y2hnIHI4LHJheCAqLworCQlpZiAoIShjLT5yZXhfcHJlZml4ICYgMSkpIHsgLyogbm9wICovCisJCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CisJCQlicmVhazsKKwkJfQorCWNhc2UgMHg5MSAuLi4gMHg5NzogLyogeGNoZyByZWcscmF4ICovCisJCWMtPnNyYy50eXBlID0gYy0+ZHN0LnR5cGUgPSBPUF9SRUc7CisJCWMtPnNyYy5ieXRlcyA9IGMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOworCQljLT5zcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKikgJmMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07CisJCWMtPnNyYy52YWwgPSAqKGMtPnNyYy5wdHIpOworCQlnb3RvIHhjaGc7CiAJY2FzZSAweDljOiAvKiBwdXNoZiAqLwogCQljLT5zcmMudmFsID0gICh1bnNpZ25lZCBsb25nKSBjdHh0LT5lZmxhZ3M7CiAJCWVtdWxhdGVfcHVzaChjdHh0KTsKQEAgLTE1NDAsMTEgKzE1ODAsMTAgQEAKIAkJYy0+ZHN0LnR5cGUgPSBPUF9NRU07CiAJCWMtPmRzdC5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKIAkJYy0+ZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopcmVnaXN0ZXJfYWRkcmVzcyhjLAotCQkJCQkJICAgY3R4dC0+ZXNfYmFzZSwKKwkJCQkJCSAgIGVzX2Jhc2UoY3R4dCksCiAJCQkJCQkgICBjLT5yZWdzW1ZDUFVfUkVHU19SREldKTsKIAkJaWYgKChyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZChyZWdpc3Rlcl9hZGRyZXNzKGMsCi0JCSAgICAgIGMtPm92ZXJyaWRlX2Jhc2UgPyAqYy0+b3ZlcnJpZGVfYmFzZSA6Ci0JCQkJCWN0eHQtPmRzX2Jhc2UsCisJCQkJCSAgIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLAogCQkJCQljLT5yZWdzW1ZDUFVfUkVHU19SU0ldKSwKIAkJCQkJJmMtPmRzdC52YWwsCiAJCQkJCWMtPmRzdC5ieXRlcywgY3R4dC0+dmNwdSkpICE9IDApCkBAIC0xNTYwLDggKzE1OTksNyBAQAogCQljLT5zcmMudHlwZSA9IE9QX05PTkU7IC8qIERpc2FibGUgd3JpdGViYWNrLiAqLwogCQljLT5zcmMuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXM7CiAJCWMtPnNyYy5wdHIgPSAodW5zaWduZWQgbG9uZyAqKXJlZ2lzdGVyX2FkZHJlc3MoYywKLQkJCQljLT5vdmVycmlkZV9iYXNlID8gKmMtPm92ZXJyaWRlX2Jhc2UgOgotCQkJCQkJICAgY3R4dC0+ZHNfYmFzZSwKKwkJCQkgICAgICAgc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyksCiAJCQkJCQkgICBjLT5yZWdzW1ZDUFVfUkVHU19SU0ldKTsKIAkJaWYgKChyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZCgodW5zaWduZWQgbG9uZyljLT5zcmMucHRyLAogCQkJCQkJJmMtPnNyYy52YWwsCkBAIC0xNTcyLDcgKzE2MTAsNyBAQAogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7IC8qIERpc2FibGUgd3JpdGViYWNrLiAqLwogCQljLT5kc3QuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXM7CiAJCWMtPmRzdC5wdHIgPSAodW5zaWduZWQgbG9uZyAqKXJlZ2lzdGVyX2FkZHJlc3MoYywKLQkJCQkJCSAgIGN0eHQtPmVzX2Jhc2UsCisJCQkJCQkgICBlc19iYXNlKGN0eHQpLAogCQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSk7CiAJCWlmICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpYy0+ZHN0LnB0ciwKIAkJCQkJCSZjLT5kc3QudmFsLApAQCAtMTU5Niw3ICsxNjM0LDcgQEAKIAkJYy0+ZHN0LnR5cGUgPSBPUF9NRU07CiAJCWMtPmRzdC5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKIAkJYy0+ZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopcmVnaXN0ZXJfYWRkcmVzcyhjLAotCQkJCQkJICAgY3R4dC0+ZXNfYmFzZSwKKwkJCQkJCSAgIGVzX2Jhc2UoY3R4dCksCiAJCQkJCQkgICBjLT5yZWdzW1ZDUFVfUkVHU19SREldKTsKIAkJYy0+ZHN0LnZhbCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07CiAJCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SREldLApAQCAtMTYwOCw4ICsxNjQ2LDcgQEAKIAkJYy0+ZHN0LmJ5dGVzID0gKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzOwogCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKikmYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXTsKIAkJaWYgKChyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZChyZWdpc3Rlcl9hZGRyZXNzKGMsCi0JCQkJYy0+b3ZlcnJpZGVfYmFzZSA/ICpjLT5vdmVycmlkZV9iYXNlIDoKLQkJCQkJCSAgIGN0eHQtPmRzX2Jhc2UsCisJCQkJCQkgc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyksCiAJCQkJCQkgYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXSksCiAJCQkJCQkgJmMtPmRzdC52YWwsCiAJCQkJCQkgYy0+ZHN0LmJ5dGVzLApAQCAtMTYyMiw2ICsxNjU5LDggQEAKIAljYXNlIDB4YWUgLi4uIDB4YWY6CS8qIHNjYXMgKi8KIAkJRFBSSU5URigiVXJrISBJIGRvbid0IGhhbmRsZSBTQ0FTLlxuIik7CiAJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJY2FzZSAweGI4OiAvKiBtb3YgciwgaW1tICovCisJCWdvdG8gbW92OwogCWNhc2UgMHhjMCAuLi4gMHhjMToKIAkJZW11bGF0ZV9ncnAyKGN0eHQpOwogCQlicmVhazsKQEAgLTE2NjAsMTMgKzE2OTksMzkgQEAKIAkJYnJlYWs7CiAJfQogCWNhc2UgMHhlOTogLyogam1wIHJlbCAqLwotCWNhc2UgMHhlYjogLyogam1wIHJlbCBzaG9ydCAqLworCQlnb3RvIGptcDsKKwljYXNlIDB4ZWE6IC8qIGptcCBmYXIgKi8geworCQl1aW50MzJfdCBlaXA7CisJCXVpbnQxNl90IHNlbDsKKworCQlzd2l0Y2ggKGMtPm9wX2J5dGVzKSB7CisJCWNhc2UgMjoKKwkJCWVpcCA9IGluc25fZmV0Y2godTE2LCAyLCBjLT5laXApOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWVpcCA9IGluc25fZmV0Y2godTMyLCA0LCBjLT5laXApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUFJJTlRGKCJqbXAgZmFyOiBJbnZhbGlkIG9wX2J5dGVzXG4iKTsKKwkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCX0KKwkJc2VsID0gaW5zbl9mZXRjaCh1MTYsIDIsIGMtPmVpcCk7CisJCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dC0+dmNwdSwgc2VsLCA5LCBWQ1BVX1NSRUdfQ1MpIDwgMCkgeworCQkJRFBSSU5URigiam1wIGZhcjogRmFpbGVkIHRvIGxvYWQgQ1MgZGVzY3JpcHRvclxuIik7CisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQl9CisKKwkJYy0+ZWlwID0gZWlwOworCQlicmVhazsKKwl9CisJY2FzZSAweGViOgorCSAgICAgIGptcDoJCS8qIGptcCByZWwgc2hvcnQgKi8KIAkJam1wX3JlbChjLCBjLT5zcmMudmFsKTsKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KIAkJYnJlYWs7CiAJY2FzZSAweGY0OiAgICAgICAgICAgICAgLyogaGx0ICovCiAJCWN0eHQtPnZjcHUtPmFyY2guaGFsdF9yZXF1ZXN0ID0gMTsKLQkJZ290byBkb25lOworCQlicmVhazsKIAljYXNlIDB4ZjU6CS8qIGNtYyAqLwogCQkvKiBjb21wbGVtZW50IGNhcnJ5IGZsYWcgZnJvbSBlZmxhZ3MgcmVnICovCiAJCWN0eHQtPmVmbGFncyBePSBFRkxHX0NGOwpAQCAtMTg4Miw2ICsxOTQ3LDggQEAKIAkJYy0+c3JjLnZhbCAmPSAoYy0+ZHN0LmJ5dGVzIDw8IDMpIC0gMTsKIAkJZW11bGF0ZV8yb3BfU3JjVl9ub2J5dGUoImJ0cyIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwogCQlicmVhazsKKwljYXNlIDB4YWU6ICAgICAgICAgICAgICAvKiBjbGZsdXNoICovCisJCWJyZWFrOwogCWNhc2UgMHhiMCAuLi4gMHhiMToJLyogY21weGNoZyAqLwogCQkvKgogCQkgKiBTYXZlIHJlYWwgc291cmNlIHZhbHVlLCB0aGVuIGNvbXBhcmUgRUFYIGFnYWluc3QKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9ib290LmMgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCmluZGV4IDUwZGFkNDQuLjAzMTNhNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xndWVzdC9ib290LmMKKysrIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwpAQCAtOTkxLDcgKzk5MSw2IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJLyogYXBpYyByZWFkL3dyaXRlIGludGVyY2VwdHMgKi8KIAlwdl9hcGljX29wcy5hcGljX3dyaXRlID0gbGd1ZXN0X2FwaWNfd3JpdGU7Ci0JcHZfYXBpY19vcHMuYXBpY193cml0ZV9hdG9taWMgPSBsZ3Vlc3RfYXBpY193cml0ZTsKIAlwdl9hcGljX29wcy5hcGljX3JlYWQgPSBsZ3Vlc3RfYXBpY19yZWFkOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZGVmYXVsdC9zZXR1cC5jIGIvYXJjaC94ODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKaW5kZXggNDgyNzhmYS4uM2QzMTc4MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKKysrIGIvYXJjaC94ODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKQEAgLTEwLDE0ICsxMCw2IEBACiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAotLyoKLSAqIEFueSBxdWlya3MgdG8gYmUgcGVyZm9ybWVkIHRvIGluaXRpYWxpemUgdGltZXJzL2lycXMvZXRjPwotICovCi1pbnQgKCphcmNoX3RpbWVfaW5pdF9xdWlyaykodm9pZCk7Ci1pbnQgKCphcmNoX3ByZV9pbnRyX2luaXRfcXVpcmspKHZvaWQpOwotaW50ICgqYXJjaF9pbnRyX2luaXRfcXVpcmspKHZvaWQpOwotaW50ICgqYXJjaF90cmFwX2luaXRfcXVpcmspKHZvaWQpOwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAjZGVmaW5lIERFRkFVTFRfU0VORF9JUEkJKDEpCiAjZWxzZQpAQCAtMzcsOCArMjksOCBAQAogICoqLwogdm9pZCBfX2luaXQgcHJlX2ludHJfaW5pdF9ob29rKHZvaWQpCiB7Ci0JaWYgKGFyY2hfcHJlX2ludHJfaW5pdF9xdWlyaykgewotCQlpZiAoYXJjaF9wcmVfaW50cl9pbml0X3F1aXJrKCkpCisJaWYgKHg4Nl9xdWlya3MtPmFyY2hfcHJlX2ludHJfaW5pdCkgeworCQlpZiAoeDg2X3F1aXJrcy0+YXJjaF9wcmVfaW50cl9pbml0KCkpCiAJCQlyZXR1cm47CiAJfQogCWluaXRfSVNBX2lycXMoKTsKQEAgLTY0LDggKzU2LDggQEAKICAqKi8KIHZvaWQgX19pbml0IGludHJfaW5pdF9ob29rKHZvaWQpCiB7Ci0JaWYgKGFyY2hfaW50cl9pbml0X3F1aXJrKSB7Ci0JCWlmIChhcmNoX2ludHJfaW5pdF9xdWlyaygpKQorCWlmICh4ODZfcXVpcmtzLT5hcmNoX2ludHJfaW5pdCkgeworCQlpZiAoeDg2X3F1aXJrcy0+YXJjaF9pbnRyX2luaXQoKSkKIAkJCXJldHVybjsKIAl9CiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCkBAIC05Nyw4ICs4OSw4IEBACiAgKiovCiB2b2lkIF9faW5pdCB0cmFwX2luaXRfaG9vayh2b2lkKQogewotCWlmIChhcmNoX3RyYXBfaW5pdF9xdWlyaykgewotCQlpZiAoYXJjaF90cmFwX2luaXRfcXVpcmsoKSkKKwlpZiAoeDg2X3F1aXJrcy0+YXJjaF90cmFwX2luaXQpIHsKKwkJaWYgKHg4Nl9xdWlya3MtPmFyY2hfdHJhcF9pbml0KCkpCiAJCQlyZXR1cm47CiAJfQogfQpAQCAtMTExLDYgKzEwMywxNiBAQAogfTsKIAogLyoqCisgKiBwcmVfdGltZV9pbml0X2hvb2sgLSBkbyBhbnkgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb25zIGJlZm9yZS4KKyAqCisgKiovCit2b2lkIF9faW5pdCBwcmVfdGltZV9pbml0X2hvb2sodm9pZCkKK3sKKwlpZiAoeDg2X3F1aXJrcy0+YXJjaF9wcmVfdGltZV9pbml0KQorCQl4ODZfcXVpcmtzLT5hcmNoX3ByZV90aW1lX2luaXQoKTsKK30KKworLyoqCiAgKiB0aW1lX2luaXRfaG9vayAtIGRvIGFueSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0gdGltZXIuCiAgKgogICogRGVzY3JpcHRpb246CkBAIC0xMTksMTMgKzEyMSwxMyBAQAogICoqLwogdm9pZCBfX2luaXQgdGltZV9pbml0X2hvb2sodm9pZCkKIHsKLQlpZiAoYXJjaF90aW1lX2luaXRfcXVpcmspIHsKKwlpZiAoeDg2X3F1aXJrcy0+YXJjaF90aW1lX2luaXQpIHsKIAkJLyoKIAkJICogQSBub256ZXJvIHJldHVybiBjb2RlIGRvZXMgbm90IG1lYW4gZmFpbHVyZSwgaXQgbWVhbnMKIAkJICogdGhhdCB0aGUgYXJjaGl0ZWN0dXJlIHF1aXJrIGRvZXMgbm90IHdhbnQgYW55CiAJCSAqIGdlbmVyaWMgKHRpbWVyKSBzZXR1cCB0byBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhpczoKIAkJICovCi0JCWlmIChhcmNoX3RpbWVfaW5pdF9xdWlyaygpKQorCQlpZiAoeDg2X3F1aXJrcy0+YXJjaF90aW1lX2luaXQoKSkKIAkJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZXM3MDAwL2VzNzAwMHBsYXQuYyBiL2FyY2gveDg2L21hY2gtZXM3MDAwL2VzNzAwMHBsYXQuYwppbmRleCA0MzU0Y2U4Li41MDE4OWFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWVzNzAwMC9lczcwMDBwbGF0LmMKKysrIGIvYXJjaC94ODYvbWFjaC1lczcwMDAvZXM3MDAwcGxhdC5jCkBAIC0xMzAsMTAgKzEzMCwxMCBAQAogCQkJbWlwX2FkZHIgPSB2YWw7CiAJCQltaXAgPSAoc3RydWN0IG1pcF9yZWcgKil2YWw7CiAJCQltaXBfcmVnID0gX192YShtaXApOwotCQkJRHByaW50aygiZXM3MDAwX21pcGNmZzogaG9zdF9yZWcgPSAweCVseCBcbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcpaG9zdF9yZWcpOwotCQkJRHByaW50aygiZXM3MDAwX21pcGNmZzogbWlwX3JlZyA9IDB4JWx4IFxuIiwKLQkJCQkodW5zaWduZWQgbG9uZyltaXBfcmVnKTsKKwkJCXByX2RlYnVnKCJlczcwMDBfbWlwY2ZnOiBob3N0X3JlZyA9IDB4JWx4IFxuIiwKKwkJCQkgKHVuc2lnbmVkIGxvbmcpaG9zdF9yZWcpOworCQkJcHJfZGVidWcoImVzNzAwMF9taXBjZmc6IG1pcF9yZWcgPSAweCVseCBcbiIsCisJCQkJICh1bnNpZ25lZCBsb25nKW1pcF9yZWcpOwogCQkJc3VjY2VzcysrOwogCQkJYnJlYWs7CiAJCWNhc2UgTUlQX1BTQUlfUkVHOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCA5ODczNzE2Li4xZmJiODQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMjEsMyArMjEsNCBAQAogZW5kaWYKIG9iai0kKENPTkZJR19BQ1BJX05VTUEpCQkrPSBzcmF0XyQoQklUUykubwogCitvYmotJChDT05GSUdfTUVNVEVTVCkJCSs9IG1lbXRlc3QubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMgYi9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYwppbmRleCAwYmIwY2FlLi5hMjBkMWZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYworKysgYi9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYwpAQCAtMTQ4LDggKzE0OCw4IEBACiAJICogd2UgaGF2ZSBub3cuICJicmVhayIgaXMgZWl0aGVyIGNoYW5naW5nIHBlcm1zLCBsZXZlbHMgb3IKIAkgKiBhZGRyZXNzIHNwYWNlIG1hcmtlci4KIAkgKi8KLQlwcm90ID0gcGdwcm90X3ZhbChuZXdfcHJvdCkgJiB+KFBURV9NQVNLKTsKLQljdXIgPSBwZ3Byb3RfdmFsKHN0LT5jdXJyZW50X3Byb3QpICYgfihQVEVfTUFTSyk7CisJcHJvdCA9IHBncHJvdF92YWwobmV3X3Byb3QpICYgfihQVEVfUEZOX01BU0spOworCWN1ciA9IHBncHJvdF92YWwoc3QtPmN1cnJlbnRfcHJvdCkgJiB+KFBURV9QRk5fTUFTSyk7CiAKIAlpZiAoIXN0LT5sZXZlbCkgewogCQkvKiBGaXJzdCBlbnRyeSAqLwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BNRDsgaSsrKSB7CiAJCXN0LT5jdXJyZW50X2FkZHJlc3MgPSBub3JtYWxpemVfYWRkcihQICsgaSAqIFBNRF9MRVZFTF9NVUxUKTsKIAkJaWYgKCFwbWRfbm9uZSgqc3RhcnQpKSB7Ci0JCQlwZ3Byb3R2YWxfdCBwcm90ID0gcG1kX3ZhbCgqc3RhcnQpICYgflBURV9NQVNLOworCQkJcGdwcm90dmFsX3QgcHJvdCA9IHBtZF92YWwoKnN0YXJ0KSAmIFBURV9GTEFHU19NQVNLOwogCiAJCQlpZiAocG1kX2xhcmdlKCpzdGFydCkgfHwgIXBtZF9wcmVzZW50KCpzdGFydCkpCiAJCQkJbm90ZV9wYWdlKG0sIHN0LCBfX3BncHJvdChwcm90KSwgMyk7CkBAIC0yNTMsNyArMjUzLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUFVEOyBpKyspIHsKIAkJc3QtPmN1cnJlbnRfYWRkcmVzcyA9IG5vcm1hbGl6ZV9hZGRyKFAgKyBpICogUFVEX0xFVkVMX01VTFQpOwogCQlpZiAoIXB1ZF9ub25lKCpzdGFydCkpIHsKLQkJCXBncHJvdHZhbF90IHByb3QgPSBwdWRfdmFsKCpzdGFydCkgJiB+UFRFX01BU0s7CisJCQlwZ3Byb3R2YWxfdCBwcm90ID0gcHVkX3ZhbCgqc3RhcnQpICYgUFRFX0ZMQUdTX01BU0s7CiAKIAkJCWlmIChwdWRfbGFyZ2UoKnN0YXJ0KSB8fCAhcHVkX3ByZXNlbnQoKnN0YXJ0KSkKIAkJCQlub3RlX3BhZ2UobSwgc3QsIF9fcGdwcm90KHByb3QpLCAyKTsKQEAgLTI4OCw3ICsyODgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKykgewogCQlzdC5jdXJyZW50X2FkZHJlc3MgPSBub3JtYWxpemVfYWRkcihpICogUEdEX0xFVkVMX01VTFQpOwogCQlpZiAoIXBnZF9ub25lKCpzdGFydCkpIHsKLQkJCXBncHJvdHZhbF90IHByb3QgPSBwZ2RfdmFsKCpzdGFydCkgJiB+UFRFX01BU0s7CisJCQlwZ3Byb3R2YWxfdCBwcm90ID0gcGdkX3ZhbCgqc3RhcnQpICYgUFRFX0ZMQUdTX01BU0s7CiAKIAkJCWlmIChwZ2RfbGFyZ2UoKnN0YXJ0KSB8fCAhcGdkX3ByZXNlbnQoKnN0YXJ0KSkKIAkJCQlub3RlX3BhZ2UobSwgJnN0LCBfX3BncHJvdChwcm90KSwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggOTY4OWE1MS4uZDM3ZjI5MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtODQ0LDYgKzg0NCw5IEBACiAJCXJlc2VydmVfZWFybHkodGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKIAkJCQkgdGFibGVfZW5kIDw8IFBBR0VfU0hJRlQsICJQR1RBQkxFIik7CiAKKwlpZiAoIWFmdGVyX2luaXRfYm9vdG1lbSkKKwkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKKwogCXJldHVybiBlbmQgPj4gUEFHRV9TSElGVDsKIH0KIApAQCAtODY4LDggKzg3MSw2IEBACiAJICovCiAJc3BhcnNlX2luaXQoKTsKIAl6b25lX3NpemVzX2luaXQoKTsKLQotCXBhcmF2aXJ0X3Bvc3RfYWxsb2NhdG9yX2luaXQoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCAzMDYwNDllLi5lYzM3MTIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC01MTcsMTE4ICs1MTcsNiBAQAogCQlkaXJlY3RfZ2JwYWdlcyA9IDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUVNVEVTVAotCi1zdGF0aWMgdm9pZCBfX2luaXQgbWVtdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgdW5zaWduZWQgcGF0dGVybikKLXsKLQl1bnNpZ25lZCBsb25nIGk7Ci0JdW5zaWduZWQgbG9uZyAqc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9iYWQ7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2JhZDsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BoeXNfYWxpZ25lZDsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCXVuc2lnbmVkIGxvbmcgaW5jcjsKLQotCXN3aXRjaCAocGF0dGVybikgewotCWNhc2UgMDoKLQkJdmFsID0gMFVMOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXZhbCA9IC0xVUw7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJdmFsID0gMHg1NTU1NTU1NTU1NTU1NTU1VUw7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJdmFsID0gMHhhYWFhYWFhYWFhYWFhYWFhVUw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlpbmNyID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwotCXN0YXJ0X3BoeXNfYWxpZ25lZCA9IEFMSUdOKHN0YXJ0X3BoeXMsIGluY3IpOwotCWNvdW50ID0gKHNpemUgLSAoc3RhcnRfcGh5c19hbGlnbmVkIC0gc3RhcnRfcGh5cykpL2luY3I7Ci0Jc3RhcnQgPSBfX3ZhKHN0YXJ0X3BoeXNfYWxpZ25lZCk7Ci0Jc3RhcnRfYmFkID0gMDsKLQlsYXN0X2JhZCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJc3RhcnRbaV0gPSB2YWw7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIHN0YXJ0KyssIHN0YXJ0X3BoeXNfYWxpZ25lZCArPSBpbmNyKSB7Ci0JCWlmICgqc3RhcnQgIT0gdmFsKSB7Ci0JCQlpZiAoc3RhcnRfcGh5c19hbGlnbmVkID09IGxhc3RfYmFkICsgaW5jcikgewotCQkJCWxhc3RfYmFkICs9IGluY3I7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChzdGFydF9iYWQpIHsKLQkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4gICUwMTZseCBiYWQgbWVtIGFkZHIgJTAxNmx4IC0gJTAxNmx4IHJlc2VydmVkIiwKLQkJCQkJCXZhbCwgc3RhcnRfYmFkLCBsYXN0X2JhZCArIGluY3IpOwotCQkJCQlyZXNlcnZlX2Vhcmx5KHN0YXJ0X2JhZCwgbGFzdF9iYWQgLSBzdGFydF9iYWQsICJCQUQgUkFNIik7Ci0JCQkJfQotCQkJCXN0YXJ0X2JhZCA9IGxhc3RfYmFkID0gc3RhcnRfcGh5c19hbGlnbmVkOwotCQkJfQotCQl9Ci0JfQotCWlmIChzdGFydF9iYWQpIHsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4gICUwMTZseCBiYWQgbWVtIGFkZHIgJTAxNmx4IC0gJTAxNmx4IHJlc2VydmVkIiwKLQkJCXZhbCwgc3RhcnRfYmFkLCBsYXN0X2JhZCArIGluY3IpOwotCQlyZXNlcnZlX2Vhcmx5KHN0YXJ0X2JhZCwgbGFzdF9iYWQgLSBzdGFydF9iYWQsICJCQUQgUkFNIik7Ci0JfQotCi19Ci0KLS8qIGRlZmF1bHQgaXMgZGlzYWJsZWQgKi8KLXN0YXRpYyBpbnQgbWVtdGVzdF9wYXR0ZXJuIF9faW5pdGRhdGE7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX21lbXRlc3QoY2hhciAqYXJnKQotewotCWlmIChhcmcpCi0JCW1lbXRlc3RfcGF0dGVybiA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgTlVMTCwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWVhcmx5X3BhcmFtKCJtZW10ZXN0IiwgcGFyc2VfbWVtdGVzdCk7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9tZW10ZXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXU2NCB0X3N0YXJ0LCB0X3NpemU7Ci0JdW5zaWduZWQgcGF0dGVybjsKLQotCWlmICghbWVtdGVzdF9wYXR0ZXJuKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9JTkZPICJlYXJseV9tZW10ZXN0OiBwYXR0ZXJuIG51bSAlZCIsIG1lbXRlc3RfcGF0dGVybik7Ci0JZm9yIChwYXR0ZXJuID0gMDsgcGF0dGVybiA8IG1lbXRlc3RfcGF0dGVybjsgcGF0dGVybisrKSB7Ci0JCXRfc3RhcnQgPSBzdGFydDsKLQkJdF9zaXplID0gMDsKLQkJd2hpbGUgKHRfc3RhcnQgPCBlbmQpIHsKLQkJCXRfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYV9zaXplKHRfc3RhcnQsICZ0X3NpemUsIDEpOwotCi0JCQkvKiBkb25lID8gKi8KLQkJCWlmICh0X3N0YXJ0ID49IGVuZCkKLQkJCQlicmVhazsKLQkJCWlmICh0X3N0YXJ0ICsgdF9zaXplID4gZW5kKQotCQkJCXRfc2l6ZSA9IGVuZCAtIHRfc3RhcnQ7Ci0KLQkJCXByaW50ayhLRVJOX0NPTlQgIlxuICAlMDE2bGx4IC0gJTAxNmxseCBwYXR0ZXJuICVkIiwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXRfc3RhcnQsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0X3N0YXJ0ICsgdF9zaXplLCBwYXR0ZXJuKTsKLQotCQkJbWVtdGVzdCh0X3N0YXJ0LCB0X3NpemUsIHBhdHRlcm4pOwotCi0JCQl0X3N0YXJ0ICs9IHRfc2l6ZTsKLQkJfQotCX0KLQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9tZW10ZXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotfQotI2VuZGlmCi0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJCQl1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkJCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9tZW10ZXN0LmMgYi9hcmNoL3g4Ni9tbS9tZW10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyZTE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L21tL21lbXRlc3QuYwpAQCAtMCwwICsxLDEyMyBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKworI2luY2x1ZGUgPGFzbS9lODIwLmg+CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtZW10ZXN0KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSB1bnNpZ25lZCBwYXR0ZXJuKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nICpzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2JhZDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfYmFkOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGh5c19hbGlnbmVkOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJdW5zaWduZWQgbG9uZyBpbmNyOworCisJc3dpdGNoIChwYXR0ZXJuKSB7CisJY2FzZSAwOgorCQl2YWwgPSAwVUw7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gLTFVTDsKKwkJYnJlYWs7CisJY2FzZSAyOgorI2lmZGVmIENPTkZJR19YODZfNjQKKwkJdmFsID0gMHg1NTU1NTU1NTU1NTU1NTU1VUw7CisjZWxzZQorCQl2YWwgPSAweDU1NTU1NTU1VUw7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSAzOgorI2lmZGVmIENPTkZJR19YODZfNjQKKwkJdmFsID0gMHhhYWFhYWFhYWFhYWFhYWFhVUw7CisjZWxzZQorCQl2YWwgPSAweGFhYWFhYWFhVUw7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCWluY3IgPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJc3RhcnRfcGh5c19hbGlnbmVkID0gQUxJR04oc3RhcnRfcGh5cywgaW5jcik7CisJY291bnQgPSAoc2l6ZSAtIChzdGFydF9waHlzX2FsaWduZWQgLSBzdGFydF9waHlzKSkvaW5jcjsKKwlzdGFydCA9IF9fdmEoc3RhcnRfcGh5c19hbGlnbmVkKTsKKwlzdGFydF9iYWQgPSAwOworCWxhc3RfYmFkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQlzdGFydFtpXSA9IHZhbDsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgc3RhcnQrKywgc3RhcnRfcGh5c19hbGlnbmVkICs9IGluY3IpIHsKKwkJaWYgKCpzdGFydCAhPSB2YWwpIHsKKwkJCWlmIChzdGFydF9waHlzX2FsaWduZWQgPT0gbGFzdF9iYWQgKyBpbmNyKSB7CisJCQkJbGFzdF9iYWQgKz0gaW5jcjsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHN0YXJ0X2JhZCkgeworCQkJCQlwcmludGsoS0VSTl9DT05UICJcbiAgJTAxMGx4IGJhZCBtZW0gYWRkciAlMDEwbHggLSAlMDEwbHggcmVzZXJ2ZWQiLAorCQkJCQkJdmFsLCBzdGFydF9iYWQsIGxhc3RfYmFkICsgaW5jcik7CisJCQkJCXJlc2VydmVfZWFybHkoc3RhcnRfYmFkLCBsYXN0X2JhZCAtIHN0YXJ0X2JhZCwgIkJBRCBSQU0iKTsKKwkJCQl9CisJCQkJc3RhcnRfYmFkID0gbGFzdF9iYWQgPSBzdGFydF9waHlzX2FsaWduZWQ7CisJCQl9CisJCX0KKwl9CisJaWYgKHN0YXJ0X2JhZCkgeworCQlwcmludGsoS0VSTl9DT05UICJcbiAgJTAxNmx4IGJhZCBtZW0gYWRkciAlMDEwbHggLSAlMDEwbHggcmVzZXJ2ZWQiLAorCQkJdmFsLCBzdGFydF9iYWQsIGxhc3RfYmFkICsgaW5jcik7CisJCXJlc2VydmVfZWFybHkoc3RhcnRfYmFkLCBsYXN0X2JhZCAtIHN0YXJ0X2JhZCwgIkJBRCBSQU0iKTsKKwl9CisKK30KKworLyogZGVmYXVsdCBpcyBkaXNhYmxlZCAqLworc3RhdGljIGludCBtZW10ZXN0X3BhdHRlcm4gX19pbml0ZGF0YTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfbWVtdGVzdChjaGFyICphcmcpCit7CisJaWYgKGFyZykKKwkJbWVtdGVzdF9wYXR0ZXJuID0gc2ltcGxlX3N0cnRvdWwoYXJnLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oIm1lbXRlc3QiLCBwYXJzZV9tZW10ZXN0KTsKKwordm9pZCBfX2luaXQgZWFybHlfbWVtdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1NjQgdF9zdGFydCwgdF9zaXplOworCXVuc2lnbmVkIHBhdHRlcm47CisKKwlpZiAoIW1lbXRlc3RfcGF0dGVybikKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZWFybHlfbWVtdGVzdDogcGF0dGVybiBudW0gJWQiLCBtZW10ZXN0X3BhdHRlcm4pOworCWZvciAocGF0dGVybiA9IDA7IHBhdHRlcm4gPCBtZW10ZXN0X3BhdHRlcm47IHBhdHRlcm4rKykgeworCQl0X3N0YXJ0ID0gc3RhcnQ7CisJCXRfc2l6ZSA9IDA7CisJCXdoaWxlICh0X3N0YXJ0IDwgZW5kKSB7CisJCQl0X3N0YXJ0ID0gZmluZF9lODIwX2FyZWFfc2l6ZSh0X3N0YXJ0LCAmdF9zaXplLCAxKTsKKworCQkJLyogZG9uZSA/ICovCisJCQlpZiAodF9zdGFydCA+PSBlbmQpCisJCQkJYnJlYWs7CisJCQlpZiAodF9zdGFydCArIHRfc2l6ZSA+IGVuZCkKKwkJCQl0X3NpemUgPSBlbmQgLSB0X3N0YXJ0OworCisJCQlwcmludGsoS0VSTl9DT05UICJcbiAgJTAxMGxseCAtICUwMTBsbHggcGF0dGVybiAlZCIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0X3N0YXJ0LAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdF9zdGFydCArIHRfc2l6ZSwgcGF0dGVybik7CisKKwkJCW1lbXRlc3QodF9zdGFydCwgdF9zaXplLCBwYXR0ZXJuKTsKKworCQkJdF9zdGFydCArPSB0X3NpemU7CisJCX0KKwl9CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfNjQuYyBiL2FyY2gveDg2L21tL251bWFfNjQuYwppbmRleCBiNDMyZDU3Li45NzgyZjQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCkBAIC0yMCwxMCArMjAsNiBAQAogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2s4Lmg+CiAKLSNpZm5kZWYgRHByaW50awotI2RlZmluZSBEcHJpbnRrKHguLi4pCi0jZW5kaWYKLQogc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQuYyBiL2FyY2gveDg2L21tL3BhdC5jCmluZGV4IGQ0NTg1MDcuLjJmZTMwOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC5jCisrKyBiL2FyY2gveDg2L21tL3BhdC5jCkBAIC0xMiw2ICsxMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CkBAIC0zNzMsOCArMzc1LDggQEAKIAlyZXR1cm4gdm1hX3Byb3Q7CiB9CiAKLSNpZmRlZiBDT05GSUdfTk9OUFJPTUlTQ19ERVZNRU0KLS8qIFRoaXMgY2hlY2sgaXMgZG9uZSBpbiBkcml2ZXJzL2NoYXIvbWVtLmMgaW4gY2FzZSBvZiBOT05QUk9NSVNDX0RFVk1FTSovCisjaWZkZWYgQ09ORklHX1NUUklDVF9ERVZNRU0KKy8qIFRoaXMgY2hlY2sgaXMgZG9uZSBpbiBkcml2ZXJzL2NoYXIvbWVtLmMgaW4gY2FzZSBvZiBTVFJJQ1RfREVWTUVNKi8KIHN0YXRpYyBpbmxpbmUgaW50IHJhbmdlX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4gMTsKQEAgLTM5OCw3ICs0MDAsNyBAQAogCX0KIAlyZXR1cm4gMTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfTk9OUFJPTUlTQ19ERVZNRU0gKi8KKyNlbmRpZiAvKiBDT05GSUdfU1RSSUNUX0RFVk1FTSAqLwogCiBpbnQgcGh5c19tZW1fYWNjZXNzX3Byb3RfYWxsb3dlZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQkJdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCAqdm1hX3Byb3QpCkBAIC00ODksMyArNDkxLDg5IEBACiAKIAlmcmVlX21lbXR5cGUoYWRkciwgYWRkciArIHNpemUpOwogfQorCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKKy8qIGdldCBOdGggZWxlbWVudCBvZiB0aGUgbGlua2VkIGxpc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgbWVtdHlwZSAqbWVtdHlwZV9nZXRfaWR4KGxvZmZfdCBwb3MpCit7CisJc3RydWN0IG1lbXR5cGUgKmxpc3Rfbm9kZSwgKnByaW50X2VudHJ5OworCWludCBpID0gMTsKKworCXByaW50X2VudHJ5ICA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZW10eXBlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmludF9lbnRyeSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2soJm1lbXR5cGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsaXN0X25vZGUsICZtZW10eXBlX2xpc3QsIG5kKSB7CisJCWlmIChwb3MgPT0gaSkgeworCQkJKnByaW50X2VudHJ5ID0gKmxpc3Rfbm9kZTsKKwkJCXNwaW5fdW5sb2NrKCZtZW10eXBlX2xvY2spOworCQkJcmV0dXJuIHByaW50X2VudHJ5OworCQl9CisJCSsraTsKKwl9CisJc3Bpbl91bmxvY2soJm1lbXR5cGVfbG9jayk7CisJa2ZyZWUocHJpbnRfZW50cnkpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqbWVtdHlwZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQoreworCWlmICgqcG9zID09IDApIHsKKwkJKysqcG9zOworCQlzZXFfcHJpbnRmKHNlcSwgIlBBVCBtZW10eXBlIGxpc3Q6XG4iKTsKKwl9CisKKwlyZXR1cm4gbWVtdHlwZV9nZXRfaWR4KCpwb3MpOworfQorCitzdGF0aWMgdm9pZCAqbWVtdHlwZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKysqcG9zOworCXJldHVybiBtZW10eXBlX2dldF9pZHgoKnBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIG1lbXR5cGVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyBpbnQgbWVtdHlwZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgbWVtdHlwZSAqcHJpbnRfZW50cnkgPSAoc3RydWN0IG1lbXR5cGUgKil2OworCisJc2VxX3ByaW50ZihzZXEsICIlcyBAIDB4JUx4LTB4JUx4XG4iLCBjYXR0cl9uYW1lKHByaW50X2VudHJ5LT50eXBlKSwKKwkJCXByaW50X2VudHJ5LT5zdGFydCwgcHJpbnRfZW50cnktPmVuZCk7CisJa2ZyZWUocHJpbnRfZW50cnkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIG1lbXR5cGVfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBtZW10eXBlX3NlcV9zdGFydCwKKwkubmV4dCAgPSBtZW10eXBlX3NlcV9uZXh0LAorCS5zdG9wICA9IG1lbXR5cGVfc2VxX3N0b3AsCisJLnNob3cgID0gbWVtdHlwZV9zZXFfc2hvdywKK307CisKK3N0YXRpYyBpbnQgbWVtdHlwZV9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJm1lbXR5cGVfc2VxX29wcyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lbXR5cGVfZm9wcyA9IHsKKwkub3BlbiAgICA9IG1lbXR5cGVfc2VxX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGF0X21lbXR5cGVfbGlzdF9pbml0KHZvaWQpCit7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicGF0X21lbXR5cGVfbGlzdCIsIFNfSVJVU1IsIGFyY2hfZGVidWdmc19kaXIsCisJCQkJTlVMTCwgJm1lbXR5cGVfZm9wcyk7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwocGF0X21lbXR5cGVfbGlzdF9pbml0KTsKKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL01ha2VmaWxlIGIvYXJjaC94ODYvcGNpL01ha2VmaWxlCmluZGV4IGU1MTVlOGQuLmQ0OTIwMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9wY2kvTWFrZWZpbGUKQEAgLTUsMTMgKzUsMTMgQEAKIG9iai0kKENPTkZJR19QQ0lfRElSRUNUKQkrPSBkaXJlY3Qubwogb2JqLSQoQ09ORklHX1BDSV9PTFBDKQkJKz0gb2xwYy5vCiAKLXBjaS15CQkJCTo9IGZpeHVwLm8KLXBjaS0kKENPTkZJR19BQ1BJKQkJKz0gYWNwaS5vCi1wY2kteQkJCQkrPSBsZWdhY3kubyBpcnEubworb2JqLXkJCQkJKz0gZml4dXAubworb2JqLSQoQ09ORklHX0FDUEkpCQkrPSBhY3BpLm8KK29iai15CQkJCSs9IGxlZ2FjeS5vIGlycS5vCiAKLXBjaS0kKENPTkZJR19YODZfVklTV1MpCQkrPSB2aXN3cy5vCitvYmotJChDT05GSUdfWDg2X1ZJU1dTKQkJKz0gdmlzd3MubwogCi1wY2ktJChDT05GSUdfWDg2X05VTUFRKQkJKz0gbnVtYS5vCitvYmotJChDT05GSUdfWDg2X05VTUFRKQkJKz0gbnVtYXFfMzIubwogCi1vYmoteQkJCQkrPSAkKHBjaS15KSBjb21tb24ubyBlYXJseS5vCitvYmoteQkJCQkrPSBjb21tb24ubyBlYXJseS5vCiBvYmoteQkJCQkrPSBhbWRfYnVzLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9lYXJseS5jIGIvYXJjaC94ODYvcGNpL2Vhcmx5LmMKaW5kZXggODU4ZGJlMy4uODY2MzFjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2Vhcmx5LmMKKysrIGIvYXJjaC94ODYvcGNpL2Vhcmx5LmMKQEAgLTcsMTUgKzcsMTMgQEAKIC8qIERpcmVjdCBQQ0kgYWNjZXNzLiBUaGlzIGlzIHVzZWQgZm9yIFBDSSBhY2Nlc3NlcyBpbiBlYXJseSBib290IGJlZm9yZQogICAgdGhlIFBDSSBzdWJzeXN0ZW0gd29ya3MuICovCiAKLSNkZWZpbmUgUERwcmludGsoeC4uLikKLQogdTMyIHJlYWRfcGNpX2NvbmZpZyh1OCBidXMsIHU4IHNsb3QsIHU4IGZ1bmMsIHU4IG9mZnNldCkKIHsKIAl1MzIgdjsKIAlvdXRsKDB4ODAwMDAwMDAgfCAoYnVzPDwxNikgfCAoc2xvdDw8MTEpIHwgKGZ1bmM8PDgpIHwgb2Zmc2V0LCAweGNmOCk7CiAJdiA9IGlubCgweGNmYyk7CiAJaWYgKHYgIT0gMHhmZmZmZmZmZikKLQkJUERwcmludGsoIiV4IHJlYWRpbmcgNCBmcm9tICV4OiAleFxuIiwgc2xvdCwgb2Zmc2V0LCB2KTsKKwkJcHJfZGVidWcoIiV4IHJlYWRpbmcgNCBmcm9tICV4OiAleFxuIiwgc2xvdCwgb2Zmc2V0LCB2KTsKIAlyZXR1cm4gdjsKIH0KIApAQCAtMjQsNyArMjIsNyBAQAogCXU4IHY7CiAJb3V0bCgweDgwMDAwMDAwIHwgKGJ1czw8MTYpIHwgKHNsb3Q8PDExKSB8IChmdW5jPDw4KSB8IG9mZnNldCwgMHhjZjgpOwogCXYgPSBpbmIoMHhjZmMgKyAob2Zmc2V0JjMpKTsKLQlQRHByaW50aygiJXggcmVhZGluZyAxIGZyb20gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHYpOworCXByX2RlYnVnKCIleCByZWFkaW5nIDEgZnJvbSAleDogJXhcbiIsIHNsb3QsIG9mZnNldCwgdik7CiAJcmV0dXJuIHY7CiB9CiAKQEAgLTMzLDI4ICszMSwyOCBAQAogCXUxNiB2OwogCW91dGwoMHg4MDAwMDAwMCB8IChidXM8PDE2KSB8IChzbG90PDwxMSkgfCAoZnVuYzw8OCkgfCBvZmZzZXQsIDB4Y2Y4KTsKIAl2ID0gaW53KDB4Y2ZjICsgKG9mZnNldCYyKSk7Ci0JUERwcmludGsoIiV4IHJlYWRpbmcgMiBmcm9tICV4OiAleFxuIiwgc2xvdCwgb2Zmc2V0LCB2KTsKKwlwcl9kZWJ1ZygiJXggcmVhZGluZyAyIGZyb20gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHYpOwogCXJldHVybiB2OwogfQogCiB2b2lkIHdyaXRlX3BjaV9jb25maWcodTggYnVzLCB1OCBzbG90LCB1OCBmdW5jLCB1OCBvZmZzZXQsCiAJCQkJICAgIHUzMiB2YWwpCiB7Ci0JUERwcmludGsoIiV4IHdyaXRpbmcgdG8gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHZhbCk7CisJcHJfZGVidWcoIiV4IHdyaXRpbmcgdG8gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHZhbCk7CiAJb3V0bCgweDgwMDAwMDAwIHwgKGJ1czw8MTYpIHwgKHNsb3Q8PDExKSB8IChmdW5jPDw4KSB8IG9mZnNldCwgMHhjZjgpOwogCW91dGwodmFsLCAweGNmYyk7CiB9CiAKIHZvaWQgd3JpdGVfcGNpX2NvbmZpZ19ieXRlKHU4IGJ1cywgdTggc2xvdCwgdTggZnVuYywgdTggb2Zmc2V0LCB1OCB2YWwpCiB7Ci0JUERwcmludGsoIiV4IHdyaXRpbmcgdG8gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHZhbCk7CisJcHJfZGVidWcoIiV4IHdyaXRpbmcgdG8gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHZhbCk7CiAJb3V0bCgweDgwMDAwMDAwIHwgKGJ1czw8MTYpIHwgKHNsb3Q8PDExKSB8IChmdW5jPDw4KSB8IG9mZnNldCwgMHhjZjgpOwogCW91dGIodmFsLCAweGNmYyArIChvZmZzZXQmMykpOwogfQogCiB2b2lkIHdyaXRlX3BjaV9jb25maWdfMTYodTggYnVzLCB1OCBzbG90LCB1OCBmdW5jLCB1OCBvZmZzZXQsIHUxNiB2YWwpCiB7Ci0JUERwcmludGsoIiV4IHdyaXRpbmcgdG8gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHZhbCk7CisJcHJfZGVidWcoIiV4IHdyaXRpbmcgdG8gJXg6ICV4XG4iLCBzbG90LCBvZmZzZXQsIHZhbCk7CiAJb3V0bCgweDgwMDAwMDAwIHwgKGJ1czw8MTYpIHwgKHNsb3Q8PDExKSB8IChmdW5jPDw4KSB8IG9mZnNldCwgMHhjZjgpOwogCW91dHcodmFsLCAweGNmYyArIChvZmZzZXQmMikpOwogfQpAQCAtNzEsNyArNjksNyBAQAogCWludCBqOwogCXUzMiB2YWw7CiAKLQlwcmludGsoIlBDSTogJTAyeDolMDJ4OiUwMngiLCBidXMsIHNsb3QsIGZ1bmMpOworCXByaW50ayhLRVJOX0lORk8gIlBDSTogJTAyeDolMDJ4OiUwMngiLCBidXMsIHNsb3QsIGZ1bmMpOwogCiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPSA0KSB7CiAJCWlmICghKGkgJiAweDBmKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9sZWdhY3kuYyBiL2FyY2gveDg2L3BjaS9sZWdhY3kuYwppbmRleCAxMzI4NzZjLi5lYzljZTM1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9sZWdhY3kuYworKysgYi9hcmNoL3g4Ni9wY2kvbGVnYWN5LmMKQEAgLTU3LDE0ICs1NywxNyBAQAogCiBpbnQgX19pbml0IHBjaV9zdWJzeXNfaW5pdCh2b2lkKQogeworI2lmZGVmIENPTkZJR19YODZfTlVNQVEKKwlwY2lfbnVtYXFfaW5pdCgpOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FDUEkKIAlwY2lfYWNwaV9pbml0KCk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X1ZJU1dTCisJcGNpX3Zpc3dzX2luaXQoKTsKKyNlbmRpZgogCXBjaV9sZWdhY3lfaW5pdCgpOwogCXBjaWJpb3NfaXJxX2luaXQoKTsKLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi0JcGNpX251bWFfaW5pdCgpOwotI2VuZGlmCiAJcGNpYmlvc19pbml0KCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9udW1hLmMgYi9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9wY2kvbnVtYS5jCnJlbmFtZSB0byBhcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYwppbmRleCA4YjVjYTE5Li5mNGIxNmRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbnVtYS5jCisrKyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIG51bWEuYyAtIExvdy1sZXZlbCBQQ0kgYWNjZXNzIGZvciBOVU1BLVEgbWFjaGluZXMKKyAqIG51bWFxXzMyLmMgLSBMb3ctbGV2ZWwgUENJIGFjY2VzcyBmb3IgTlVNQS1RIG1hY2hpbmVzCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMTUxLDcgKzE1MSw3IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ1MU5YLCBwY2lfZml4dXBfaTQ1MG54KTsKIAotaW50IF9faW5pdCBwY2lfbnVtYV9pbml0KHZvaWQpCitpbnQgX19pbml0IHBjaV9udW1hcV9pbml0KHZvaWQpCiB7CiAJaW50IHF1YWQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9wY2kuaCBiL2FyY2gveDg2L3BjaS9wY2kuaAppbmRleCAzZTI1ZGViLi4xNWI5Y2Y2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL3BjaS5oCisrKyBiL2FyY2gveDg2L3BjaS9wY2kuaApAQCAtMTA4LDcgKzEwOCw4IEBACiAvKiBzb21lIGNvbW1vbiB1c2VkIHN1YnN5c19pbml0Y2FsbHMgKi8KIGV4dGVybiBpbnQgX19pbml0IHBjaV9hY3BpX2luaXQodm9pZCk7CiBleHRlcm4gaW50IF9faW5pdCBwY2liaW9zX2lycV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBfX2luaXQgcGNpX251bWFfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgX19pbml0IHBjaV92aXN3c19pbml0KHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgcGNpX251bWFxX2luaXQodm9pZCk7CiBleHRlcm4gaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCk7CiAKIC8qIHBjaS1tbWNvbmZpZy5jICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvdmlzd3MuYyBiL2FyY2gveDg2L3BjaS92aXN3cy5jCmluZGV4IDFhN2JlZDQuLjQyZjRjYjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS92aXN3cy5jCisrKyBiL2FyY2gveDg2L3BjaS92aXN3cy5jCkBAIC04Niw4ICs4NiwxNCBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgaXJxKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcGNpX3Zpc3dzX2luaXQodm9pZCkKK2ludCBfX2luaXQgcGNpX3Zpc3dzX2luaXQodm9pZCkKIHsKKwlpZiAoIWlzX3Zpc3dzX2JveCgpKQorCQlyZXR1cm4gLTE7CisKKwlwY2liaW9zX2VuYWJsZV9pcnEgPSAmcGNpX3Zpc3dzX2VuYWJsZV9pcnE7CisJcGNpYmlvc19kaXNhYmxlX2lycSA9ICZwY2lfdmlzd3NfZGlzYWJsZV9pcnE7CisKIAkvKiBUaGUgVklTV1Mgc3VwcG9ydHMgY29uZmlndXJhdGlvbiBhY2Nlc3MgdHlwZSAxIG9ubHkgKi8KIAlwY2lfcHJvYmUgPSAocGNpX3Byb2JlIHwgUENJX1BST0JFX0NPTkYxKSAmCiAJCSAgICB+KFBDSV9QUk9CRV9CSU9TIHwgUENJX1BST0JFX0NPTkYyKTsKQEAgLTEwNSwxOCArMTExLDMgQEAKIAlwY2liaW9zX3Jlc291cmNlX3N1cnZleSgpOwogCXJldHVybiAwOwogfQotCi1zdGF0aWMgX19pbml0IGludCBwY2lfc3Vic3lzX2luaXQodm9pZCkKLXsKLQlpZiAoIWlzX3Zpc3dzX2JveCgpKQotCQlyZXR1cm4gLTE7Ci0KLQlwY2liaW9zX2VuYWJsZV9pcnEgPSAmcGNpX3Zpc3dzX2VuYWJsZV9pcnE7Ci0JcGNpYmlvc19kaXNhYmxlX2lycSA9ICZwY2lfdmlzd3NfZGlzYWJsZV9pcnE7Ci0KLQlwY2lfdmlzd3NfaW5pdCgpOwotCXBjaWJpb3NfaW5pdCgpOwotCi0JcmV0dXJuIDA7Ci19Ci1zdWJzeXNfaW5pdGNhbGwocGNpX3N1YnN5c19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUgYi9hcmNoL3g4Ni92ZHNvL01ha2VmaWxlCmluZGV4IGI3YWQ5ZjguLjRkNmVmMGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvdmRzby9NYWtlZmlsZQpAQCAtNjIsNyArNjIsNyBAQAogIyBCdWlsZCBtdWx0aXBsZSAzMi1iaXQgdkRTTyBpbWFnZXMgdG8gY2hvb3NlIGZyb20gYXQgYm9vdCB0aW1lLgogIwogb2JqLSQoVkRTTzMyLXkpCQkJKz0gdmRzbzMyLXN5bXMubGRzCi12ZHNvMzIuc28tJChDT05GSUdfWDg2XzMyKQkrPSBpbnQ4MAordmRzbzMyLnNvLSQoVkRTTzMyLXkpCQkrPSBpbnQ4MAogdmRzbzMyLnNvLSQoQ09ORklHX0NPTVBBVCkJKz0gc3lzY2FsbAogdmRzbzMyLnNvLSQoVkRTTzMyLXkpCQkrPSBzeXNlbnRlcgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92ZHNvL3Zkc28zMi1zZXR1cC5jIGIvYXJjaC94ODYvdmRzby92ZHNvMzItc2V0dXAuYwppbmRleCAwYmNlNTQyLi41MTNmMzMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92ZHNvL3Zkc28zMi1zZXR1cC5jCisrKyBiL2FyY2gveDg2L3Zkc28vdmRzbzMyLXNldHVwLmMKQEAgLTE5MywxNyArMTkzLDEyIEBACiAJfQogfQogCi0vKgotICogVGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCBieSB2ZHNvMzIuUyB0byBtYXJrIHRoZSBib3VuZHMKLSAqIG9mIHRoZSBFTEYgRFNPIGltYWdlcyBpbmNsdWRlZCB0aGVyZWluLgotICovCi1leHRlcm4gY29uc3QgY2hhciB2ZHNvMzJfZGVmYXVsdF9zdGFydCwgdmRzbzMyX2RlZmF1bHRfZW5kOwotZXh0ZXJuIGNvbnN0IGNoYXIgdmRzbzMyX3N5c2VudGVyX3N0YXJ0LCB2ZHNvMzJfc3lzZW50ZXJfZW5kOwogc3RhdGljIHN0cnVjdCBwYWdlICp2ZHNvMzJfcGFnZXNbMV07CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKICNkZWZpbmUJdmRzbzMyX3N5c2VudGVyKCkJKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TWVNFTlRFUjMyKSkKKyNkZWZpbmUJdmRzbzMyX3N5c2NhbGwoKQkoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NZU0NBTEwzMikpCiAKIC8qIE1heSBub3QgYmUgX19pbml0OiBjYWxsZWQgZHVyaW5nIHJlc3VtZSAqLwogdm9pZCBzeXNjYWxsMzJfY3B1X2luaXQodm9pZCkKQEAgLTIyNiw2ICsyMjEsNyBAQAogI2Vsc2UgIC8qIENPTkZJR19YODZfMzIgKi8KIAogI2RlZmluZSB2ZHNvMzJfc3lzZW50ZXIoKQkoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFUCkpCisjZGVmaW5lIHZkc28zMl9zeXNjYWxsKCkJKDApCiAKIHZvaWQgZW5hYmxlX3NlcF9jcHUodm9pZCkKIHsKQEAgLTI5NiwxMiArMjkyLDE1IEBACiAJZ2F0ZV92bWFfaW5pdCgpOwogI2VuZGlmCiAKLQlpZiAoIXZkc28zMl9zeXNlbnRlcigpKSB7Ci0JCXZzeXNjYWxsID0gJnZkc28zMl9kZWZhdWx0X3N0YXJ0OwotCQl2c3lzY2FsbF9sZW4gPSAmdmRzbzMyX2RlZmF1bHRfZW5kIC0gJnZkc28zMl9kZWZhdWx0X3N0YXJ0OwotCX0gZWxzZSB7CisJaWYgKHZkc28zMl9zeXNjYWxsKCkpIHsKKwkJdnN5c2NhbGwgPSAmdmRzbzMyX3N5c2NhbGxfc3RhcnQ7CisJCXZzeXNjYWxsX2xlbiA9ICZ2ZHNvMzJfc3lzY2FsbF9lbmQgLSAmdmRzbzMyX3N5c2NhbGxfc3RhcnQ7CisJfSBlbHNlIGlmICh2ZHNvMzJfc3lzZW50ZXIoKSl7CiAJCXZzeXNjYWxsID0gJnZkc28zMl9zeXNlbnRlcl9zdGFydDsKIAkJdnN5c2NhbGxfbGVuID0gJnZkc28zMl9zeXNlbnRlcl9lbmQgLSAmdmRzbzMyX3N5c2VudGVyX3N0YXJ0OworCX0gZWxzZSB7CisJCXZzeXNjYWxsID0gJnZkc28zMl9pbnQ4MF9zdGFydDsKKwkJdnN5c2NhbGxfbGVuID0gJnZkc28zMl9pbnQ4MF9lbmQgLSAmdmRzbzMyX2ludDgwX3N0YXJ0OwogCX0KIAogCW1lbWNweShzeXNjYWxsX3BhZ2UsIHZzeXNjYWxsLCB2c3lzY2FsbF9sZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby92ZHNvMzIuUyBiL2FyY2gveDg2L3Zkc28vdmRzbzMyLlMKaW5kZXggMWUzNmY3Mi4uMmNlNWY4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby92ZHNvMzIuUworKysgYi9hcmNoL3g4Ni92ZHNvL3Zkc28zMi5TCkBAIC0yLDE0ICsyLDE3IEBACiAKIF9fSU5JVERBVEEKIAotCS5nbG9ibCB2ZHNvMzJfZGVmYXVsdF9zdGFydCwgdmRzbzMyX2RlZmF1bHRfZW5kCi12ZHNvMzJfZGVmYXVsdF9zdGFydDoKLSNpZmRlZiBDT05GSUdfWDg2XzMyCisJLmdsb2JsIHZkc28zMl9pbnQ4MF9zdGFydCwgdmRzbzMyX2ludDgwX2VuZAordmRzbzMyX2ludDgwX3N0YXJ0OgogCS5pbmNiaW4gImFyY2gveDg2L3Zkc28vdmRzbzMyLWludDgwLnNvIgotI2Vsc2UKK3Zkc28zMl9pbnQ4MF9lbmQ6CisKKwkuZ2xvYmwgdmRzbzMyX3N5c2NhbGxfc3RhcnQsIHZkc28zMl9zeXNjYWxsX2VuZAordmRzbzMyX3N5c2NhbGxfc3RhcnQ6CisjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5pbmNiaW4gImFyY2gveDg2L3Zkc28vdmRzbzMyLXN5c2NhbGwuc28iCiAjZW5kaWYKLXZkc28zMl9kZWZhdWx0X2VuZDoKK3Zkc28zMl9zeXNjYWxsX2VuZDoKIAogCS5nbG9ibCB2ZHNvMzJfc3lzZW50ZXJfc3RhcnQsIHZkc28zMl9zeXNlbnRlcl9lbmQKIHZkc28zMl9zeXNlbnRlcl9zdGFydDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vdm1hLmMgYi9hcmNoL3g4Ni92ZHNvL3ZtYS5jCmluZGV4IDE5YTZjZmEuLjI1N2JhNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vdm1hLmMKKysrIGIvYXJjaC94ODYvdmRzby92bWEuYwpAQCAtMjEsNyArMjEsOCBAQAogZXh0ZXJuIGNoYXIgdmRzb19zdGFydFtdLCB2ZHNvX2VuZFtdOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHZkc29fc3luY19jcHVpZDsKIAotc3RydWN0IHBhZ2UgKip2ZHNvX3BhZ2VzOworc3RhdGljIHN0cnVjdCBwYWdlICoqdmRzb19wYWdlczsKK3N0YXRpYyB1bnNpZ25lZCB2ZHNvX3NpemU7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqdmFyX3JlZih2b2lkICpwLCBjaGFyICpuYW1lKQogewpAQCAtMzgsNiArMzksNyBAQAogCWludCBpOwogCWNoYXIgKnZiYXNlOwogCisJdmRzb19zaXplID0gbnBhZ2VzIDw8IFBBR0VfU0hJRlQ7CiAJdmRzb19wYWdlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnBhZ2VzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZkc29fcGFnZXMpCiAJCWdvdG8gb29tOwpAQCAtMTAxLDIwICsxMDMsMTkgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlpbnQgcmV0OwotCXVuc2lnbmVkIGxlbiA9IHJvdW5kX3VwKHZkc29fZW5kIC0gdmRzb19zdGFydCwgUEFHRV9TSVpFKTsKIAogCWlmICghdmRzb19lbmFibGVkKQogCQlyZXR1cm4gMDsKIAogCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7Ci0JYWRkciA9IHZkc29fYWRkcihtbS0+c3RhcnRfc3RhY2ssIGxlbik7Ci0JYWRkciA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIGFkZHIsIGxlbiwgMCwgMCk7CisJYWRkciA9IHZkc29fYWRkcihtbS0+c3RhcnRfc3RhY2ssIHZkc29fc2l6ZSk7CisJYWRkciA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIGFkZHIsIHZkc29fc2l6ZSwgMCwgMCk7CiAJaWYgKElTX0VSUl9WQUxVRShhZGRyKSkgewogCQlyZXQgPSBhZGRyOwogCQlnb3RvIHVwX2ZhaWw7CiAJfQogCi0JcmV0ID0gaW5zdGFsbF9zcGVjaWFsX21hcHBpbmcobW0sIGFkZHIsIGxlbiwKKwlyZXQgPSBpbnN0YWxsX3NwZWNpYWxfbWFwcGluZyhtbSwgYWRkciwgdmRzb19zaXplLAogCQkJCSAgICAgIFZNX1JFQUR8Vk1fRVhFQ3wKIAkJCQkgICAgICBWTV9NQVlSRUFEfFZNX01BWVdSSVRFfFZNX01BWUVYRUN8CiAJCQkJICAgICAgVk1fQUxXQVlTRFVNUCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9LY29uZmlnIGIvYXJjaC94ODYveGVuL0tjb25maWcKaW5kZXggYzJjYzk5NS4uMzgxNWU0MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL0tjb25maWcKKysrIGIvYXJjaC94ODYveGVuL0tjb25maWcKQEAgLTYsOCArNiw4IEBACiAJYm9vbCAiWGVuIGd1ZXN0IHN1cHBvcnQiCiAJc2VsZWN0IFBBUkFWSVJUCiAJc2VsZWN0IFBBUkFWSVJUX0NMT0NLCi0JZGVwZW5kcyBvbiBYODZfMzIKLQlkZXBlbmRzIG9uIFg4Nl9DTVBYQ0hHICYmIFg4Nl9UU0MgJiYgWDg2X1BBRSAmJiAhKFg4Nl9WSVNXUyB8fCBYODZfVk9ZQUdFUikKKwlkZXBlbmRzIG9uIFg4Nl82NCB8fCAoWDg2XzMyICYmIFg4Nl9QQUUgJiYgIShYODZfVklTV1MgfHwgWDg2X1ZPWUFHRVIpKQorCWRlcGVuZHMgb24gWDg2X0NNUFhDSEcgJiYgWDg2X1RTQwogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIExpbnV4IFhlbiBwb3J0LiAgRW5hYmxpbmcgdGhpcyB3aWxsIGFsbG93IHRoZQogCSAga2VybmVsIHRvIGJvb3QgaW4gYSBwYXJhdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdW5kZXIgdGhlCkBAIC0xNSwxMCArMTUsMTYgQEAKIAogY29uZmlnIFhFTl9NQVhfRE9NQUlOX01FTU9SWQogICAgICAgIGludCAiTWF4aW11bSBhbGxvd2VkIHNpemUgb2YgYSBkb21haW4gaW4gZ2lnYWJ5dGVzIgotICAgICAgIGRlZmF1bHQgOAorICAgICAgIGRlZmF1bHQgOCBpZiBYODZfMzIKKyAgICAgICBkZWZhdWx0IDMyIGlmIFg4Nl82NAogICAgICAgIGRlcGVuZHMgb24gWEVOCiAgICAgICAgaGVscAogICAgICAgICAgVGhlIHBzZXVkby1waHlzaWNhbCB0byBtYWNoaW5lIGFkZHJlc3MgYXJyYXkgaXMgc2l6ZWQKICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgbWF4aW11bSBwb3NzaWJsZSBtZW1vcnkgc2l6ZSBvZiBhIFhlbgogICAgICAgICAgZG9tYWluLiAgVGhpcyBhcnJheSB1c2VzIDEgcGFnZSBwZXIgZ2lnYWJ5dGUsIHNvIHRoZXJlJ3Mgbm8KLSAgICAgICAgIG5lZWQgdG8gYmUgdG9vIHN0aW5neSBoZXJlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgICAgIG5lZWQgdG8gYmUgdG9vIHN0aW5neSBoZXJlLgorCitjb25maWcgWEVOX1NBVkVfUkVTVE9SRQorICAgICAgIGJvb2wKKyAgICAgICBkZXBlbmRzIG9uIFBNCisgICAgICAgZGVmYXVsdCB5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL01ha2VmaWxlIGIvYXJjaC94ODYveGVuL01ha2VmaWxlCmluZGV4IDJiYTJkMTYuLjU5YzFlNTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACiBvYmoteQkJOj0gZW5saWdodGVuLm8gc2V0dXAubyBtdWx0aWNhbGxzLm8gbW11Lm8gXAotCQkJdGltZS5vIHhlbi1hc20ubyBncmFudC10YWJsZS5vIHN1c3BlbmQubworCQkJdGltZS5vIHhlbi1hc21fJChCSVRTKS5vIGdyYW50LXRhYmxlLm8gc3VzcGVuZC5vCiAKIG9iai0kKENPTkZJR19TTVApCSs9IHNtcC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKaW5kZXggYmI1MDg0NS4uOWZmNmUzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uvc2NoZWQuaD4KICNpbmNsdWRlIDx4ZW4vZmVhdHVyZXMuaD4KICNpbmNsdWRlIDx4ZW4vcGFnZS5oPgorI2luY2x1ZGUgPHhlbi9odmMtY29uc29sZS5oPgogCiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTQwLDEyICs0MSwxMiBAQAogI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21zci1pbmRleC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KIAogI2luY2x1ZGUgInhlbi1vcHMuaCIKICNpbmNsdWRlICJtbXUuaCIKQEAgLTU3LDYgKzU4LDE4IEBACiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmNwdV9pbmZvLCB4ZW5fdmNwdV9pbmZvKTsKIAogLyoKKyAqIElkZW50aXR5IG1hcCwgaW4gYWRkaXRpb24gdG8gcGxhaW4ga2VybmVsIG1hcC4gIFRoaXMgbmVlZHMgdG8gYmUKKyAqIGxhcmdlIGVub3VnaCB0byBhbGxvY2F0ZSBwYWdlIHRhYmxlIHBhZ2VzIHRvIGFsbG9jYXRlIHRoZSByZXN0LgorICogRWFjaCBwYWdlIGNhbiBtYXAgMk1CLgorICovCitzdGF0aWMgcHRlX3QgbGV2ZWwxX2lkZW50X3BndFtQVFJTX1BFUl9QVEUgKiA0XSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisvKiBsMyBwdWQgZm9yIHVzZXJzcGFjZSB2c3lzY2FsbCBtYXBwaW5nICovCitzdGF0aWMgcHVkX3QgbGV2ZWwzX3VzZXJfdnN5c2NhbGxbUFRSU19QRVJfUFVEXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworCisvKgogICogTm90ZSBhYm91dCBjcjMgKHBhZ2V0YWJsZSBiYXNlKSB2YWx1ZXM6CiAgKgogICogeGVuX2NyMyBjb250YWlucyB0aGUgY3VycmVudCBsb2dpY2FsIGNyMyB2YWx1ZTsgaXQgY29udGFpbnMgdGhlCkBAIC0xNjcsMTAgKzE4MCwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2Jhbm5lcih2b2lkKQogeworCXVuc2lnbmVkIHZlcnNpb24gPSBIWVBFUlZJU09SX3hlbl92ZXJzaW9uKFhFTlZFUl92ZXJzaW9uLCBOVUxMKTsKKwlzdHJ1Y3QgeGVuX2V4dHJhdmVyc2lvbiBleHRyYTsKKwlIWVBFUlZJU09SX3hlbl92ZXJzaW9uKFhFTlZFUl9leHRyYXZlcnNpb24sICZleHRyYSk7CisKIAlwcmludGsoS0VSTl9JTkZPICJCb290aW5nIHBhcmF2aXJ0dWFsaXplZCBrZXJuZWwgb24gJXNcbiIsCiAJICAgICAgIHB2X2luZm8ubmFtZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiSHlwZXJ2aXNvciBzaWduYXR1cmU6ICVzJXNcbiIsCi0JICAgICAgIHhlbl9zdGFydF9pbmZvLT5tYWdpYywKKwlwcmludGsoS0VSTl9JTkZPICJYZW4gdmVyc2lvbjogJWQuJWQlcyVzXG4iLAorCSAgICAgICB2ZXJzaW9uID4+IDE2LCB2ZXJzaW9uICYgMHhmZmZmLCBleHRyYS5leHRyYXZlcnNpb24sCiAJICAgICAgIHhlbl9mZWF0dXJlKFhFTkZFQVRfbW11X3B0X3VwZGF0ZV9wcmVzZXJ2ZV9hZCkgPyAiIChwcmVzZXJ2ZS1BRCkiIDogIiIpOwogfQogCkBAIC0zNjMsMTQgKzM4MCw2IEBACiAKIHN0YXRpYyB2b2lkIHhlbl9sb2FkX3RscyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdW5zaWduZWQgaW50IGNwdSkKIHsKLQl4ZW5fbWNfYmF0Y2goKTsKLQotCWxvYWRfVExTX2Rlc2NyaXB0b3IodCwgY3B1LCAwKTsKLQlsb2FkX1RMU19kZXNjcmlwdG9yKHQsIGNwdSwgMSk7Ci0JbG9hZF9UTFNfZGVzY3JpcHRvcih0LCBjcHUsIDIpOwotCi0JeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfQ1BVKTsKLQogCS8qCiAJICogWFhYIHNsZWF6eSBoYWNrOiBJZiB3ZSdyZSBiZWluZyBjYWxsZWQgaW4gYSBsYXp5LWNwdSB6b25lLAogCSAqIGl0IG1lYW5zIHdlJ3JlIGluIGEgY29udGV4dCBzd2l0Y2gsIGFuZCAlZ3MgaGFzIGp1c3QgYmVlbgpAQCAtMzc5LDExICszODgsNDAgQEAKIAkgKiBFaXRoZXIgd2F5LCBpdCBoYXMgYmVlbiBzYXZlZCwgYW5kIHRoZSBuZXcgdmFsdWUgd2lsbCBnZXQKIAkgKiBsb2FkZWQgcHJvcGVybHkuICBUaGlzIHdpbGwgZ28gYXdheSBhcyBzb29uIGFzIFhlbiBoYXMgYmVlbgogCSAqIG1vZGlmaWVkIHRvIG5vdCBzYXZlL3Jlc3RvcmUgJWdzIGZvciBub3JtYWwgaHlwZXJjYWxscy4KKwkgKgorCSAqIE9uIHg4Nl82NCwgdGhpcyBoYWNrIGlzIG5vdCB1c2VkIGZvciAlZ3MsIGJlY2F1c2UgZ3MgcG9pbnRzCisJICogdG8gS0VSTkVMX0dTX0JBU0UgKGFuZCB1c2VzIGl0IGZvciBQREEgcmVmZXJlbmNlcyksIHNvIHdlCisJICogbXVzdCBub3QgemVybyAlZ3Mgb24geDg2XzY0CisJICoKKwkgKiBGb3IgeDg2XzY0LCB3ZSBuZWVkIHRvIHplcm8gJWZzLCBvdGhlcndpc2Ugd2UgbWF5IGdldCBhbgorCSAqIGV4Y2VwdGlvbiBiZXR3ZWVuIHRoZSBuZXcgJWZzIGRlc2NyaXB0b3IgYmVpbmcgbG9hZGVkIGFuZAorCSAqICVmcyBiZWluZyBlZmZlY3RpdmVseSBjbGVhcmVkIGF0IF9fc3dpdGNoX3RvKCkuCiAJICovCi0JaWYgKHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSA9PSBQQVJBVklSVF9MQVpZX0NQVSkKKwlpZiAocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpID09IFBBUkFWSVJUX0xBWllfQ1BVKSB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCQlsb2Fkc2VnbWVudChncywgMCk7CisjZWxzZQorCQlsb2Fkc2VnbWVudChmcywgMCk7CisjZW5kaWYKKwl9CisKKwl4ZW5fbWNfYmF0Y2goKTsKKworCWxvYWRfVExTX2Rlc2NyaXB0b3IodCwgY3B1LCAwKTsKKwlsb2FkX1RMU19kZXNjcmlwdG9yKHQsIGNwdSwgMSk7CisJbG9hZF9UTFNfZGVzY3JpcHRvcih0LCBjcHUsIDIpOworCisJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfQ1BVKTsKIH0KIAorI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyB2b2lkIHhlbl9sb2FkX2dzX2luZGV4KHVuc2lnbmVkIGludCBpZHgpCit7CisJaWYgKEhZUEVSVklTT1Jfc2V0X3NlZ21lbnRfYmFzZShTRUdCQVNFX0dTX1VTRVJfU0VMLCBpZHgpKQorCQlCVUcoKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCB4ZW5fd3JpdGVfbGR0X2VudHJ5KHN0cnVjdCBkZXNjX3N0cnVjdCAqZHQsIGludCBlbnRyeW51bSwKIAkJCQljb25zdCB2b2lkICpwdHIpCiB7CkBAIC00MDAsMjMgKzQzOCwxOCBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBpbnQgY3Z0X2dhdGVfdG9fdHJhcChpbnQgdmVjdG9yLCB1MzIgbG93LCB1MzIgaGlnaCwKK3N0YXRpYyBpbnQgY3Z0X2dhdGVfdG9fdHJhcChpbnQgdmVjdG9yLCBjb25zdCBnYXRlX2Rlc2MgKnZhbCwKIAkJCSAgICBzdHJ1Y3QgdHJhcF9pbmZvICppbmZvKQogewotCXU4IHR5cGUsIGRwbDsKLQotCXR5cGUgPSAoaGlnaCA+PiA4KSAmIDB4MWY7Ci0JZHBsID0gKGhpZ2ggPj4gMTMpICYgMzsKLQotCWlmICh0eXBlICE9IDB4ZiAmJiB0eXBlICE9IDB4ZSkKKwlpZiAodmFsLT50eXBlICE9IDB4ZiAmJiB2YWwtPnR5cGUgIT0gMHhlKQogCQlyZXR1cm4gMDsKIAogCWluZm8tPnZlY3RvciA9IHZlY3RvcjsKLQlpbmZvLT5hZGRyZXNzID0gKGhpZ2ggJiAweGZmZmYwMDAwKSB8IChsb3cgJiAweDAwMDBmZmZmKTsKLQlpbmZvLT5jcyA9IGxvdyA+PiAxNjsKLQlpbmZvLT5mbGFncyA9IGRwbDsKKwlpbmZvLT5hZGRyZXNzID0gZ2F0ZV9vZmZzZXQoKnZhbCk7CisJaW5mby0+Y3MgPSBnYXRlX3NlZ21lbnQoKnZhbCk7CisJaW5mby0+ZmxhZ3MgPSB2YWwtPmRwbDsKIAkvKiBpbnRlcnJ1cHQgZ2F0ZXMgY2xlYXIgSUYgKi8KLQlpZiAodHlwZSA9PSAweGUpCisJaWYgKHZhbC0+dHlwZSA9PSAweGUpCiAJCWluZm8tPmZsYWdzIHw9IDQ7CiAKIAlyZXR1cm4gMTsKQEAgLTQ0MywxMSArNDc2LDEwIEBACiAKIAlpZiAocCA+PSBzdGFydCAmJiAocCArIDgpIDw9IGVuZCkgewogCQlzdHJ1Y3QgdHJhcF9pbmZvIGluZm9bMl07Ci0JCXUzMiAqZGVzYyA9ICh1MzIgKilnOwogCiAJCWluZm9bMV0uYWRkcmVzcyA9IDA7CiAKLQkJaWYgKGN2dF9nYXRlX3RvX3RyYXAoZW50cnludW0sIGRlc2NbMF0sIGRlc2NbMV0sICZpbmZvWzBdKSkKKwkJaWYgKGN2dF9nYXRlX3RvX3RyYXAoZW50cnludW0sIGcsICZpbmZvWzBdKSkKIAkJCWlmIChIWVBFUlZJU09SX3NldF90cmFwX3RhYmxlKGluZm8pKQogCQkJCUJVRygpOwogCX0KQEAgLTQ2MCwxMyArNDkyLDEzIEBACiB7CiAJdW5zaWduZWQgaW4sIG91dCwgY291bnQ7CiAKLQljb3VudCA9IChkZXNjLT5zaXplKzEpIC8gODsKKwljb3VudCA9IChkZXNjLT5zaXplKzEpIC8gc2l6ZW9mKGdhdGVfZGVzYyk7CiAJQlVHX09OKGNvdW50ID4gMjU2KTsKIAogCWZvciAoaW4gPSBvdXQgPSAwOyBpbiA8IGNvdW50OyBpbisrKSB7Ci0JCWNvbnN0IHUzMiAqZW50cnkgPSAodTMyICopKGRlc2MtPmFkZHJlc3MgKyBpbiAqIDgpOworCQlnYXRlX2Rlc2MgKmVudHJ5ID0gKGdhdGVfZGVzYyopKGRlc2MtPmFkZHJlc3MpICsgaW47CiAKLQkJaWYgKGN2dF9nYXRlX3RvX3RyYXAoaW4sIGVudHJ5WzBdLCBlbnRyeVsxXSwgJnRyYXBzW291dF0pKQorCQlpZiAoY3Z0X2dhdGVfdG9fdHJhcChpbiwgZW50cnksICZ0cmFwc1tvdXRdKSkKIAkJCW91dCsrOwogCX0KIAl0cmFwc1tvdXRdLmFkZHJlc3MgPSAwOwpAQCAtNjk1LDMzICs3MjcsODkgQEAKIAl4ODZfd3JpdGVfcGVyY3B1KHhlbl9jdXJyZW50X2NyMywgKHVuc2lnbmVkIGxvbmcpdik7CiB9CiAKLXN0YXRpYyB2b2lkIHhlbl93cml0ZV9jcjModW5zaWduZWQgbG9uZyBjcjMpCitzdGF0aWMgdm9pZCBfX3hlbl93cml0ZV9jcjMoYm9vbCBrZXJuZWwsIHVuc2lnbmVkIGxvbmcgY3IzKQogewogCXN0cnVjdCBtbXVleHRfb3AgKm9wOwogCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgbWNzOwotCXVuc2lnbmVkIGxvbmcgbWZuID0gcGZuX3RvX21mbihQRk5fRE9XTihjcjMpKTsKKwl1bnNpZ25lZCBsb25nIG1mbjsKIAorCWlmIChjcjMpCisJCW1mbiA9IHBmbl90b19tZm4oUEZOX0RPV04oY3IzKSk7CisJZWxzZQorCQltZm4gPSAwOworCisJV0FSTl9PTihtZm4gPT0gMCAmJiBrZXJuZWwpOworCisJbWNzID0gX194ZW5fbWNfZW50cnkoc2l6ZW9mKCpvcCkpOworCisJb3AgPSBtY3MuYXJnczsKKwlvcC0+Y21kID0ga2VybmVsID8gTU1VRVhUX05FV19CQVNFUFRSIDogTU1VRVhUX05FV19VU0VSX0JBU0VQVFI7CisJb3AtPmFyZzEubWZuID0gbWZuOworCisJTVVMVElfbW11ZXh0X29wKG1jcy5tYywgb3AsIDEsIE5VTEwsIERPTUlEX1NFTEYpOworCisJaWYgKGtlcm5lbCkgeworCQl4ODZfd3JpdGVfcGVyY3B1KHhlbl9jcjMsIGNyMyk7CisKKwkJLyogVXBkYXRlIHhlbl9jdXJyZW50X2NyMyBvbmNlIHRoZSBiYXRjaCBoYXMgYWN0dWFsbHkKKwkJICAgYmVlbiBzdWJtaXR0ZWQuICovCisJCXhlbl9tY19jYWxsYmFjayhzZXRfY3VycmVudF9jcjMsICh2b2lkICopY3IzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhlbl93cml0ZV9jcjModW5zaWduZWQgbG9uZyBjcjMpCit7CiAJQlVHX09OKHByZWVtcHRpYmxlKCkpOwogCi0JbWNzID0geGVuX21jX2VudHJ5KHNpemVvZigqb3ApKTsgIC8qIGRpc2FibGVzIGludGVycnVwdHMgKi8KKwl4ZW5fbWNfYmF0Y2goKTsgIC8qIGRpc2FibGVzIGludGVycnVwdHMgKi8KIAogCS8qIFVwZGF0ZSB3aGlsZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc28gaXRzIGF0b21pYyB3aXRoCiAJICAgcmVzcGVjdCB0byBpcGlzICovCiAJeDg2X3dyaXRlX3BlcmNwdSh4ZW5fY3IzLCBjcjMpOwogCi0Jb3AgPSBtY3MuYXJnczsKLQlvcC0+Y21kID0gTU1VRVhUX05FV19CQVNFUFRSOwotCW9wLT5hcmcxLm1mbiA9IG1mbjsKKwlfX3hlbl93cml0ZV9jcjModHJ1ZSwgY3IzKTsKIAotCU1VTFRJX21tdWV4dF9vcChtY3MubWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKLQotCS8qIFVwZGF0ZSB4ZW5fdXBkYXRlX2NyMyBvbmNlIHRoZSBiYXRjaCBoYXMgYWN0dWFsbHkKLQkgICBiZWVuIHN1Ym1pdHRlZC4gKi8KLQl4ZW5fbWNfY2FsbGJhY2soc2V0X2N1cnJlbnRfY3IzLCAodm9pZCAqKWNyMyk7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXsKKwkJcGdkX3QgKnVzZXJfcGdkID0geGVuX2dldF91c2VyX3BnZChfX3ZhKGNyMykpOworCQlpZiAodXNlcl9wZ2QpCisJCQlfX3hlbl93cml0ZV9jcjMoZmFsc2UsIF9fcGEodXNlcl9wZ2QpKTsKKwkJZWxzZQorCQkJX194ZW5fd3JpdGVfY3IzKGZhbHNlLCAwKTsKKwl9CisjZW5kaWYKIAogCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX0NQVSk7ICAvKiBpbnRlcnJ1cHRzIHJlc3RvcmVkICovCiB9CiAKK3N0YXRpYyBpbnQgeGVuX3dyaXRlX21zcl9zYWZlKHVuc2lnbmVkIGludCBtc3IsIHVuc2lnbmVkIGxvdywgdW5zaWduZWQgaGlnaCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gMDsKKworCXN3aXRjaChtc3IpIHsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCXVuc2lnbmVkIHdoaWNoOworCQl1NjQgYmFzZTsKKworCWNhc2UgTVNSX0ZTX0JBU0U6CQl3aGljaCA9IFNFR0JBU0VfRlM7IGdvdG8gc2V0OworCWNhc2UgTVNSX0tFUk5FTF9HU19CQVNFOgl3aGljaCA9IFNFR0JBU0VfR1NfVVNFUjsgZ290byBzZXQ7CisJY2FzZSBNU1JfR1NfQkFTRToJCXdoaWNoID0gU0VHQkFTRV9HU19LRVJORUw7IGdvdG8gc2V0OworCisJc2V0OgorCQliYXNlID0gKCh1NjQpaGlnaCA8PCAzMikgfCBsb3c7CisJCWlmIChIWVBFUlZJU09SX3NldF9zZWdtZW50X2Jhc2Uod2hpY2gsIGJhc2UpICE9IDApCisJCQlyZXQgPSAtRUZBVUxUOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldCA9IG5hdGl2ZV93cml0ZV9tc3Jfc2FmZShtc3IsIGxvdywgaGlnaCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogLyogRWFybHkgaW4gYm9vdCwgd2hpbGUgc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBwYWdldGFibGUsIGFzc3VtZQogICAgZXZlcnl0aGluZyBpcyBwaW5uZWQuICovCiBzdGF0aWMgX19pbml0IHZvaWQgeGVuX2FsbG9jX3B0ZV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgcGZuKQpAQCAtNzc4LDYgKzg2Niw0OCBAQAogCXhlbl9hbGxvY19wdHBhZ2UobW0sIHBmbiwgUFRfUE1EKTsKIH0KIAorc3RhdGljIGludCB4ZW5fcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXBnZF90ICpwZ2QgPSBtbS0+cGdkOworCWludCByZXQgPSAwOworCisJQlVHX09OKFBhZ2VQaW5uZWQodmlydF90b19wYWdlKHBnZCkpKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwl7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKHBnZCk7CisJCXBnZF90ICp1c2VyX3BnZDsKKworCQlCVUdfT04ocGFnZS0+cHJpdmF0ZSAhPSAwKTsKKworCQlyZXQgPSAtRU5PTUVNOworCisJCXVzZXJfcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwkJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXVzZXJfcGdkOworCisJCWlmICh1c2VyX3BnZCAhPSBOVUxMKSB7CisJCQl1c2VyX3BnZFtwZ2RfaW5kZXgoVlNZU0NBTExfU1RBUlQpXSA9CisJCQkJX19wZ2QoX19wYShsZXZlbDNfdXNlcl92c3lzY2FsbCkgfCBfUEFHRV9UQUJMRSk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJQlVHX09OKFBhZ2VQaW5uZWQodmlydF90b19wYWdlKHhlbl9nZXRfdXNlcl9wZ2QocGdkKSkpKTsKKwl9CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9wZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJcGdkX3QgKnVzZXJfcGdkID0geGVuX2dldF91c2VyX3BnZChwZ2QpOworCisJaWYgKHVzZXJfcGdkKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdXNlcl9wZ2QpOworI2VuZGlmCit9CisKIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiB1bnRpbCB3ZSdyZSBPSyB0byB1c2Ugc3RydWN0IHBhZ2UgKi8KIHN0YXRpYyB2b2lkIHhlbl9yZWxlYXNlX3B0cGFnZSh1MzIgcGZuLCB1bnNpZ25lZCBsZXZlbCkKIHsKQEAgLTgwMyw2ICs5MzMsMTggQEAKIAl4ZW5fcmVsZWFzZV9wdHBhZ2UocGZuLCBQVF9QTUQpOwogfQogCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0CitzdGF0aWMgdm9pZCB4ZW5fYWxsb2NfcHVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgcGZuKQoreworCXhlbl9hbGxvY19wdHBhZ2UobW0sIHBmbiwgUFRfUFVEKTsKK30KKworc3RhdGljIHZvaWQgeGVuX3JlbGVhc2VfcHVkKHUzMiBwZm4pCit7CisJeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUFVEKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0hJR0hQVEUKIHN0YXRpYyB2b2lkICp4ZW5fa21hcF9hdG9taWNfcHRlKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSkKIHsKQEAgLTg0MSw2OCArOTgzLDE2IEBACiAKIHN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKQogewotCXBnZF90ICp4ZW5fcGdkID0gKHBnZF90ICopeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2U7Ci0JaW50IGk7Ci0KLQkvKiBzcGVjaWFsIHNldF9wdGUgZm9yIHBhZ2V0YWJsZSBpbml0aWFsaXphdGlvbiAqLwotCXB2X21tdV9vcHMuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlX2luaXQ7Ci0KLQlpbml0X21tLnBnZCA9IGJhc2U7Ci0JLyoKLQkgKiBjb3B5IHRvcC1sZXZlbCBvZiBYZW4tc3VwcGxpZWQgcGFnZXRhYmxlIGludG8gcGxhY2UuICBUaGlzCi0JICogaXMgYSBzdGFuZC1pbiB3aGlsZSB3ZSBjb3B5IHRoZSBwbWQgcGFnZXMuCi0JICovCi0JbWVtY3B5KGJhc2UsIHhlbl9wZ2QsIFBUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkpOwotCi0JLyoKLQkgKiBGb3IgUEFFLCBuZWVkIHRvIGFsbG9jYXRlIG5ldyBwbWRzLCByYXRoZXIgdGhhbgotCSAqIHNoYXJlIFhlbidzLCBzaW5jZSBYZW4gZG9lc24ndCBsaWtlIHBtZCdzIGJlaW5nCi0JICogc2hhcmVkIGJldHdlZW4gYWRkcmVzcyBzcGFjZXMuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BHRDsgaSsrKSB7Ci0JCWlmIChwZ2RfdmFsX21hKHhlbl9wZ2RbaV0pICYgX1BBR0VfUFJFU0VOVCkgewotCQkJcG1kX3QgKnBtZCA9IChwbWRfdCAqKWFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7Ci0KLQkJCW1lbWNweShwbWQsICh2b2lkICopcGdkX3BhZ2VfdmFkZHIoeGVuX3BnZFtpXSksCi0JCQkgICAgICAgUEFHRV9TSVpFKTsKLQotCQkJbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShwbWQpOwotCi0JCQlzZXRfcGdkKCZiYXNlW2ldLCBfX3BnZCgxICsgX19wYShwbWQpKSk7Ci0JCX0gZWxzZQotCQkJcGdkX2NsZWFyKCZiYXNlW2ldKTsKLQl9Ci0KLQkvKiBtYWtlIHN1cmUgemVyb19wYWdlIGlzIG1hcHBlZCBSTyBzbyB3ZSBjYW4gdXNlIGl0IGluIHBhZ2V0YWJsZXMgKi8KLQltYWtlX2xvd21lbV9wYWdlX3JlYWRvbmx5KGVtcHR5X3plcm9fcGFnZSk7Ci0JbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShiYXNlKTsKLQkvKgotCSAqIFN3aXRjaCB0byBuZXcgcGFnZXRhYmxlLiAgVGhpcyBpcyBkb25lIGJlZm9yZQotCSAqIHBhZ2V0YWJsZV9pbml0IGhhcyBkb25lIGFueXRoaW5nIHNvIHRoYXQgdGhlIG5ldyBwYWdlcwotCSAqIGFkZGVkIHRvIHRoZSB0YWJsZSBjYW4gYmUgcHJlcGFyZWQgcHJvcGVybHkgZm9yIFhlbi4KLQkgKi8KLQl4ZW5fd3JpdGVfY3IzKF9fcGEoYmFzZSkpOwotCi0JLyogVW5waW4gaW5pdGlhbCBYZW4gcGFnZXRhYmxlICovCi0JcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1VOUElOX1RBQkxFLAotCQkJICBQRk5fRE9XTihfX3BhKHhlbl9zdGFydF9pbmZvLT5wdF9iYXNlKSkpOwogfQogCiB2b2lkIHhlbl9zZXR1cF9zaGFyZWRfaW5mbyh2b2lkKQogewogCWlmICgheGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpIHsKLQkJdW5zaWduZWQgbG9uZyBhZGRyID0gZml4X3RvX3ZpcnQoRklYX1BBUkFWSVJUX0JPT1RNQVApOworCQlzZXRfZml4bWFwKEZJWF9QQVJBVklSVF9CT09UTUFQLAorCQkJICAgeGVuX3N0YXJ0X2luZm8tPnNoYXJlZF9pbmZvKTsKIAotCQkvKgotCQkgKiBDcmVhdGUgYSBtYXBwaW5nIGZvciB0aGUgc2hhcmVkIGluZm8gcGFnZS4KLQkJICogU2hvdWxkIGJlIHNldF9maXhtYXAoKSwgYnV0IHNoYXJlZF9pbmZvIGlzIGEgbWFjaGluZQotCQkgKiBhZGRyZXNzIHdpdGggbm8gY29ycmVzcG9uZGluZyBwc2V1ZG8tcGh5cyBhZGRyZXNzLgotCQkgKi8KLQkJc2V0X3B0ZV9tZm4oYWRkciwKLQkJCSAgICBQRk5fRE9XTih4ZW5fc3RhcnRfaW5mby0+c2hhcmVkX2luZm8pLAotCQkJICAgIFBBR0VfS0VSTkVMKTsKLQotCQlIWVBFUlZJU09SX3NoYXJlZF9pbmZvID0gKHN0cnVjdCBzaGFyZWRfaW5mbyAqKWFkZHI7CisJCUhZUEVSVklTT1Jfc2hhcmVkX2luZm8gPQorCQkJKHN0cnVjdCBzaGFyZWRfaW5mbyAqKWZpeF90b192aXJ0KEZJWF9QQVJBVklSVF9CT09UTUFQKTsKIAl9IGVsc2UKIAkJSFlQRVJWSVNPUl9zaGFyZWRfaW5mbyA9CiAJCQkoc3RydWN0IHNoYXJlZF9pbmZvICopX192YSh4ZW5fc3RhcnRfaW5mby0+c2hhcmVkX2luZm8pOwpAQCAtOTE3LDI2ICsxMDA3LDMyIEBACiAKIHN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpCiB7CisJeGVuX3NldHVwX3NoYXJlZF9pbmZvKCk7Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcG9zdF9hbGxvY2F0b3JfaW5pdCh2b2lkKQoreworCXB2X21tdV9vcHMuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlOworCXB2X21tdV9vcHMuc2V0X3BtZCA9IHhlbl9zZXRfcG1kOworCXB2X21tdV9vcHMuc2V0X3B1ZCA9IHhlbl9zZXRfcHVkOworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAorCXB2X21tdV9vcHMuc2V0X3BnZCA9IHhlbl9zZXRfcGdkOworI2VuZGlmCisKIAkvKiBUaGlzIHdpbGwgd29yayBhcyBsb25nIGFzIHBhdGNoaW5nIGhhc24ndCBoYXBwZW5lZCB5ZXQKIAkgICAod2hpY2ggaXQgaGFzbid0KSAqLwogCXB2X21tdV9vcHMuYWxsb2NfcHRlID0geGVuX2FsbG9jX3B0ZTsKIAlwdl9tbXVfb3BzLmFsbG9jX3BtZCA9IHhlbl9hbGxvY19wbWQ7CiAJcHZfbW11X29wcy5yZWxlYXNlX3B0ZSA9IHhlbl9yZWxlYXNlX3B0ZTsKIAlwdl9tbXVfb3BzLnJlbGVhc2VfcG1kID0geGVuX3JlbGVhc2VfcG1kOwotCXB2X21tdV9vcHMuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlOworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAorCXB2X21tdV9vcHMuYWxsb2NfcHVkID0geGVuX2FsbG9jX3B1ZDsKKwlwdl9tbXVfb3BzLnJlbGVhc2VfcHVkID0geGVuX3JlbGVhc2VfcHVkOworI2VuZGlmCiAKLQl4ZW5fc2V0dXBfc2hhcmVkX2luZm8oKTsKLQotCS8qIEFjdHVhbGx5IHBpbiB0aGUgcGFnZXRhYmxlIGRvd24sIGJ1dCB3ZSBjYW4ndCBzZXQgUEdfcGlubmVkCi0JICAgeWV0IGJlY2F1c2UgdGhlIHBhZ2Ugc3RydWN0dXJlcyBkb24ndCBleGlzdCB5ZXQuICovCi0JcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1BJTl9MM19UQUJMRSwgUEZOX0RPV04oX19wYShiYXNlKSkpOwotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3Bvc3RfYWxsb2NhdG9yX2luaXQodm9pZCkKLXsKLQlwdl9tbXVfb3BzLnNldF9wbWQgPSB4ZW5fc2V0X3BtZDsKLQlwdl9tbXVfb3BzLnNldF9wdWQgPSB4ZW5fc2V0X3B1ZDsKLQorI2lmZGVmIENPTkZJR19YODZfNjQKKwlTZXRQYWdlUGlubmVkKHZpcnRfdG9fcGFnZShsZXZlbDNfdXNlcl92c3lzY2FsbCkpOworI2VuZGlmCiAJeGVuX21hcmtfaW5pdF9tbV9waW5uZWQoKTsKIH0KIApAQCAtOTUwLDYgKzEwNDYsNyBAQAogCiAJLyogeGVuX3ZjcHVfc2V0dXAgbWFuYWdlZCB0byBwbGFjZSB0aGUgdmNwdV9pbmZvIHdpdGhpbiB0aGUKIAkgICBwZXJjcHUgYXJlYSBmb3IgYWxsIGNwdXMsIHNvIG1ha2UgdXNlIG9mIGl0ICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmIChoYXZlX3ZjcHVfaW5mb19wbGFjZW1lbnQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiWGVuOiB1c2luZyB2Y3B1X2luZm8gcGxhY2VtZW50XG4iKTsKIApAQCAtOTU5LDYgKzEwNTYsNyBAQAogCQlwdl9pcnFfb3BzLmlycV9lbmFibGUgPSB4ZW5faXJxX2VuYWJsZV9kaXJlY3Q7CiAJCXB2X21tdV9vcHMucmVhZF9jcjIgPSB4ZW5fcmVhZF9jcjJfZGlyZWN0OwogCX0KKyNlbmRpZgogfQogCiBzdGF0aWMgdW5zaWduZWQgeGVuX3BhdGNoKHU4IHR5cGUsIHUxNiBjbG9iYmVycywgdm9pZCAqaW5zbmJ1ZiwKQEAgLTk3OSwxMCArMTA3NywxMiBAQAogCWdvdG8gcGF0Y2hfc2l0ZQogCiAJc3dpdGNoICh0eXBlKSB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCQlTSVRFKHB2X2lycV9vcHMsIGlycV9lbmFibGUpOwogCQlTSVRFKHB2X2lycV9vcHMsIGlycV9kaXNhYmxlKTsKIAkJU0lURShwdl9pcnFfb3BzLCBzYXZlX2ZsKTsKIAkJU0lURShwdl9pcnFfb3BzLCByZXN0b3JlX2ZsKTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAjdW5kZWYgU0lURQogCiAJcGF0Y2hfc2l0ZToKQEAgLTEwMjUsOCArMTEyNSwxNSBAQAogI2lmZGVmIENPTkZJR19YODZfRjAwRl9CVUcKIAljYXNlIEZJWF9GMDBGX0lEVDoKICNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfMzIKIAljYXNlIEZJWF9XUF9URVNUOgogCWNhc2UgRklYX1ZEU086CisjIGlmZGVmIENPTkZJR19ISUdITUVNCisJY2FzZSBGSVhfS01BUF9CRUdJTiAuLi4gRklYX0tNQVBfRU5EOgorIyBlbmRpZgorI2Vsc2UKKwljYXNlIFZTWVNDQUxMX0xBU1RfUEFHRSAuLi4gVlNZU0NBTExfRklSU1RfUEFHRToKKyNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCWNhc2UgRklYX0FQSUNfQkFTRToJLyogbWFwcyBkdW1teSBsb2NhbCBBUElDICovCiAjZW5kaWYKQEAgLTEwMzksNiArMTE0NiwxNSBAQAogCX0KIAogCV9fbmF0aXZlX3NldF9maXhtYXAoaWR4LCBwdGUpOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qIFJlcGxpY2F0ZSBjaGFuZ2VzIHRvIG1hcCB0aGUgdnN5c2NhbGwgcGFnZSBpbnRvIHRoZSB1c2VyCisJICAgcGFnZXRhYmxlIHZzeXNjYWxsIG1hcHBpbmcuICovCisJaWYgKGlkeCA+PSBWU1lTQ0FMTF9MQVNUX1BBR0UgJiYgaWR4IDw9IFZTWVNDQUxMX0ZJUlNUX1BBR0UpIHsKKwkJdW5zaWduZWQgbG9uZyB2YWRkciA9IF9fZml4X3RvX3ZpcnQoaWR4KTsKKwkJc2V0X3B0ZV92YWRkcl9wdWQobGV2ZWwzX3VzZXJfdnN5c2NhbGwsIHZhZGRyLCBwdGUpOworCX0KKyNlbmRpZgogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2luZm8geGVuX2luZm8gX19pbml0ZGF0YSA9IHsKQEAgLTEwODQsMTggKzEyMDAsMjUgQEAKIAkud2JpbnZkID0gbmF0aXZlX3diaW52ZCwKIAogCS5yZWFkX21zciA9IG5hdGl2ZV9yZWFkX21zcl9zYWZlLAotCS53cml0ZV9tc3IgPSBuYXRpdmVfd3JpdGVfbXNyX3NhZmUsCisJLndyaXRlX21zciA9IHhlbl93cml0ZV9tc3Jfc2FmZSwKIAkucmVhZF90c2MgPSBuYXRpdmVfcmVhZF90c2MsCiAJLnJlYWRfcG1jID0gbmF0aXZlX3JlYWRfcG1jLAogCiAJLmlyZXQgPSB4ZW5faXJldCwKIAkuaXJxX2VuYWJsZV9zeXNleGl0ID0geGVuX3N5c2V4aXQsCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS51c2VyZ3Nfc3lzcmV0MzIgPSB4ZW5fc3lzcmV0MzIsCisJLnVzZXJnc19zeXNyZXQ2NCA9IHhlbl9zeXNyZXQ2NCwKKyNlbmRpZgogCiAJLmxvYWRfdHJfZGVzYyA9IHBhcmF2aXJ0X25vcCwKIAkuc2V0X2xkdCA9IHhlbl9zZXRfbGR0LAogCS5sb2FkX2dkdCA9IHhlbl9sb2FkX2dkdCwKIAkubG9hZF9pZHQgPSB4ZW5fbG9hZF9pZHQsCiAJLmxvYWRfdGxzID0geGVuX2xvYWRfdGxzLAorI2lmZGVmIENPTkZJR19YODZfNjQKKwkubG9hZF9nc19pbmRleCA9IHhlbl9sb2FkX2dzX2luZGV4LAorI2VuZGlmCiAKIAkuc3RvcmVfZ2R0ID0gbmF0aXZlX3N0b3JlX2dkdCwKIAkuc3RvcmVfaWR0ID0gbmF0aXZlX3N0b3JlX2lkdCwKQEAgLTExMDksMTQgKzEyMzIsMzQgQEAKIAkuc2V0X2lvcGxfbWFzayA9IHhlbl9zZXRfaW9wbF9tYXNrLAogCS5pb19kZWxheSA9IHhlbl9pb19kZWxheSwKIAorCS8qIFhlbiB0YWtlcyBjYXJlIG9mICVncyB3aGVuIHN3aXRjaGluZyB0byB1c2VybW9kZSBmb3IgdXMgKi8KKwkuc3dhcGdzID0gcGFyYXZpcnRfbm9wLAorCiAJLmxhenlfbW9kZSA9IHsKIAkJLmVudGVyID0gcGFyYXZpcnRfZW50ZXJfbGF6eV9jcHUsCiAJCS5sZWF2ZSA9IHhlbl9sZWF2ZV9sYXp5LAogCX0sCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgX194ZW5faW5pdF9JUlEodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaW50IGk7CisKKwkvKiBDcmVhdGUgaWRlbnRpdHkgdmVjdG9yLT5pcnEgbWFwICovCisJZm9yKGkgPSAwOyBpIDwgTlJfVkVDVE9SUzsgaSsrKSB7CisJCWludCBjcHU7CisKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVtpXSA9IGk7CisJfQorI2VuZGlmCS8qIENPTkZJR19YODZfNjQgKi8KKworCXhlbl9pbml0X0lSUSgpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2lycV9vcHMgeGVuX2lycV9vcHMgX19pbml0ZGF0YSA9IHsKLQkuaW5pdF9JUlEgPSB4ZW5faW5pdF9JUlEsCisJLmluaXRfSVJRID0gX194ZW5faW5pdF9JUlEsCiAJLnNhdmVfZmwgPSB4ZW5fc2F2ZV9mbCwKIAkucmVzdG9yZV9mbCA9IHhlbl9yZXN0b3JlX2ZsLAogCS5pcnFfZGlzYWJsZSA9IHhlbl9pcnFfZGlzYWJsZSwKQEAgLTExMjQsMTQgKzEyNjcsMTMgQEAKIAkuc2FmZV9oYWx0ID0geGVuX3NhZmVfaGFsdCwKIAkuaGFsdCA9IHhlbl9oYWx0LAogI2lmZGVmIENPTkZJR19YODZfNjQKLQkuYWRqdXN0X2V4Y2VwdGlvbl9mcmFtZSA9IHBhcmF2aXJ0X25vcCwKKwkuYWRqdXN0X2V4Y2VwdGlvbl9mcmFtZSA9IHhlbl9hZGp1c3RfZXhjZXB0aW9uX2ZyYW1lLAogI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2FwaWNfb3BzIHhlbl9hcGljX29wcyBfX2luaXRkYXRhID0gewogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCS5hcGljX3dyaXRlID0geGVuX2FwaWNfd3JpdGUsCi0JLmFwaWNfd3JpdGVfYXRvbWljID0geGVuX2FwaWNfd3JpdGUsCiAJLmFwaWNfcmVhZCA9IHhlbl9hcGljX3JlYWQsCiAJLnNldHVwX2Jvb3RfY2xvY2sgPSBwYXJhdmlydF9ub3AsCiAJLnNldHVwX3NlY29uZGFyeV9jbG9jayA9IHBhcmF2aXJ0X25vcCwKQEAgLTExNTcsOCArMTI5OSw4IEBACiAJLnB0ZV91cGRhdGUgPSBwYXJhdmlydF9ub3AsCiAJLnB0ZV91cGRhdGVfZGVmZXIgPSBwYXJhdmlydF9ub3AsCiAKLQkucGdkX2FsbG9jID0gX19wYXJhdmlydF9wZ2RfYWxsb2MsCi0JLnBnZF9mcmVlID0gcGFyYXZpcnRfbm9wLAorCS5wZ2RfYWxsb2MgPSB4ZW5fcGdkX2FsbG9jLAorCS5wZ2RfZnJlZSA9IHhlbl9wZ2RfZnJlZSwKIAogCS5hbGxvY19wdGUgPSB4ZW5fYWxsb2NfcHRlX2luaXQsCiAJLnJlbGVhc2VfcHRlID0geGVuX3JlbGVhc2VfcHRlX2luaXQsCkBAIC0xMTcwLDcgKzEzMTIsMTEgQEAKIAkua21hcF9hdG9taWNfcHRlID0geGVuX2ttYXBfYXRvbWljX3B0ZSwKICNlbmRpZgogCi0JLnNldF9wdGUgPSBOVUxMLAkvKiBzZWUgeGVuX3BhZ2V0YWJsZV9zZXR1cF8qICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS5zZXRfcHRlID0geGVuX3NldF9wdGUsCisjZWxzZQorCS5zZXRfcHRlID0geGVuX3NldF9wdGVfaW5pdCwKKyNlbmRpZgogCS5zZXRfcHRlX2F0ID0geGVuX3NldF9wdGVfYXQsCiAJLnNldF9wbWQgPSB4ZW5fc2V0X3BtZF9oeXBlciwKIApAQCAtMTE4NCwxNSArMTMzMCwyNiBAQAogCS5tYWtlX3B0ZSA9IHhlbl9tYWtlX3B0ZSwKIAkubWFrZV9wZ2QgPSB4ZW5fbWFrZV9wZ2QsCiAKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQogCS5zZXRfcHRlX2F0b21pYyA9IHhlbl9zZXRfcHRlX2F0b21pYywKIAkuc2V0X3B0ZV9wcmVzZW50ID0geGVuX3NldF9wdGVfYXQsCi0JLnNldF9wdWQgPSB4ZW5fc2V0X3B1ZF9oeXBlciwKIAkucHRlX2NsZWFyID0geGVuX3B0ZV9jbGVhciwKIAkucG1kX2NsZWFyID0geGVuX3BtZF9jbGVhciwKKyNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLworCS5zZXRfcHVkID0geGVuX3NldF9wdWRfaHlwZXIsCiAKIAkubWFrZV9wbWQgPSB4ZW5fbWFrZV9wbWQsCiAJLnBtZF92YWwgPSB4ZW5fcG1kX3ZhbCwKIAorI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAorCS5wdWRfdmFsID0geGVuX3B1ZF92YWwsCisJLm1ha2VfcHVkID0geGVuX21ha2VfcHVkLAorCS5zZXRfcGdkID0geGVuX3NldF9wZ2RfaHlwZXIsCisKKwkuYWxsb2NfcHVkID0geGVuX2FsbG9jX3B0ZV9pbml0LAorCS5yZWxlYXNlX3B1ZCA9IHhlbl9yZWxlYXNlX3B0ZV9pbml0LAorI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLworCiAJLmFjdGl2YXRlX21tID0geGVuX2FjdGl2YXRlX21tLAogCS5kdXBfbW1hcCA9IHhlbl9kdXBfbW1hcCwKIAkuZXhpdF9tbWFwID0geGVuX2V4aXRfbW1hcCwKQEAgLTEyMDUsMjEgKzEzNjIsNiBAQAogCS5zZXRfZml4bWFwID0geGVuX3NldF9maXhtYXAsCiB9OwogCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbXBfb3BzIHhlbl9zbXBfb3BzIF9faW5pdGRhdGEgPSB7Ci0JLnNtcF9wcmVwYXJlX2Jvb3RfY3B1ID0geGVuX3NtcF9wcmVwYXJlX2Jvb3RfY3B1LAotCS5zbXBfcHJlcGFyZV9jcHVzID0geGVuX3NtcF9wcmVwYXJlX2NwdXMsCi0JLmNwdV91cCA9IHhlbl9jcHVfdXAsCi0JLnNtcF9jcHVzX2RvbmUgPSB4ZW5fc21wX2NwdXNfZG9uZSwKLQotCS5zbXBfc2VuZF9zdG9wID0geGVuX3NtcF9zZW5kX3N0b3AsCi0JLnNtcF9zZW5kX3Jlc2NoZWR1bGUgPSB4ZW5fc21wX3NlbmRfcmVzY2hlZHVsZSwKLQotCS5zZW5kX2NhbGxfZnVuY19pcGkgPSB4ZW5fc21wX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGksCi0JLnNlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkgPSB4ZW5fc21wX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpLAotfTsKLSNlbmRpZgkvKiBDT05GSUdfU01QICovCi0KIHN0YXRpYyB2b2lkIHhlbl9yZWJvb3QoaW50IHJlYXNvbikKIHsKIAlzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24gciA9IHsgLnJlYXNvbiA9IHJlYXNvbiB9OwpAQCAtMTI2NCw2ICsxNDA2LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHhlbl9yZXNlcnZlX3RvcCh2b2lkKQogeworI2lmZGVmIENPTkZJR19YODZfMzIKIAl1bnNpZ25lZCBsb25nIHRvcCA9IEhZUEVSVklTT1JfVklSVF9TVEFSVDsKIAlzdHJ1Y3QgeGVuX3BsYXRmb3JtX3BhcmFtZXRlcnMgcHA7CiAKQEAgLTEyNzEsOCArMTQxNCwyNDggQEAKIAkJdG9wID0gcHAudmlydF9zdGFydDsKIAogCXJlc2VydmVfdG9wX2FkZHJlc3MoLXRvcCArIDIgKiBQQUdFX1NJWkUpOworI2VuZGlmCS8qIENPTkZJR19YODZfMzIgKi8KIH0KIAorLyoKKyAqIExpa2UgX192YSgpLCBidXQgcmV0dXJucyBhZGRyZXNzIGluIHRoZSBrZXJuZWwgbWFwcGluZyAod2hpY2ggaXMKKyAqIGFsbCB3ZSBoYXZlIHVudGlsIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyBoYXMgYmVlbiBzZXQgdXAuCisgKi8KK3N0YXRpYyB2b2lkICpfX2thKHBoeXNfYWRkcl90IHBhZGRyKQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwlyZXR1cm4gKHZvaWQgKikocGFkZHIgKyBfX1NUQVJUX0tFUk5FTF9tYXApOworI2Vsc2UKKwlyZXR1cm4gX192YShwYWRkcik7CisjZW5kaWYKK30KKworLyogQ29udmVydCBhIG1hY2hpbmUgYWRkcmVzcyB0byBwaHlzaWNhbCBhZGRyZXNzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtMnAocGh5c19hZGRyX3QgbWFkZHIpCit7CisJcGh5c19hZGRyX3QgcGFkZHI7CisKKwltYWRkciAmPSBQVEVfUEZOX01BU0s7CisJcGFkZHIgPSBtZm5fdG9fcGZuKG1hZGRyID4+IFBBR0VfU0hJRlQpIDw8IFBBR0VfU0hJRlQ7CisKKwlyZXR1cm4gcGFkZHI7Cit9CisKKy8qIENvbnZlcnQgYSBtYWNoaW5lIGFkZHJlc3MgdG8ga2VybmVsIHZpcnR1YWwgKi8KK3N0YXRpYyB2b2lkICptMnYocGh5c19hZGRyX3QgbWFkZHIpCit7CisJcmV0dXJuIF9fa2EobTJwKG1hZGRyKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgdm9pZCB3YWxrKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBsNGlkeCA9IHBnZF9pbmRleChhZGRyKTsKKwl1bnNpZ25lZCBsM2lkeCA9IHB1ZF9pbmRleChhZGRyKTsKKwl1bnNpZ25lZCBsMmlkeCA9IHBtZF9pbmRleChhZGRyKTsKKwl1bnNpZ25lZCBsMWlkeCA9IHB0ZV9pbmRleChhZGRyKTsKKwlwZ2RfdCBsNDsKKwlwdWRfdCBsMzsKKwlwbWRfdCBsMjsKKwlwdGVfdCBsMTsKKworCXhlbl9yYXdfcHJpbnRrKCJ3YWxrICVwLCAlbHggLT4gJWQgJWQgJWQgJWRcbiIsCisJCSAgICAgICBwZ2QsIGFkZHIsIGw0aWR4LCBsM2lkeCwgbDJpZHgsIGwxaWR4KTsKKworCWw0ID0gcGdkW2w0aWR4XTsKKwl4ZW5fcmF3X3ByaW50aygiICBsNDogJTAxNmx4XG4iLCBsNC5wZ2QpOworCXhlbl9yYXdfcHJpbnRrKCIgICAgICAlMDE2bHhcbiIsIHBnZF92YWwobDQpKTsKKworCWwzID0gKChwdWRfdCAqKShtMnYobDQucGdkKSkpW2wzaWR4XTsKKwl4ZW5fcmF3X3ByaW50aygiICBsMzogJTAxNmx4XG4iLCBsMy5wdWQpOworCXhlbl9yYXdfcHJpbnRrKCIgICAgICAlMDE2bHhcbiIsIHB1ZF92YWwobDMpKTsKKworCWwyID0gKChwbWRfdCAqKShtMnYobDMucHVkKSkpW2wyaWR4XTsKKwl4ZW5fcmF3X3ByaW50aygiICBsMjogJTAxNmx4XG4iLCBsMi5wbWQpOworCXhlbl9yYXdfcHJpbnRrKCIgICAgICAlMDE2bHhcbiIsIHBtZF92YWwobDIpKTsKKworCWwxID0gKChwdGVfdCAqKShtMnYobDIucG1kKSkpW2wxaWR4XTsKKwl4ZW5fcmF3X3ByaW50aygiICBsMTogJTAxNmx4XG4iLCBsMS5wdGUpOworCXhlbl9yYXdfcHJpbnRrKCIgICAgICAlMDE2bHhcbiIsIHB0ZV92YWwobDEpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzZXRfcGFnZV9wcm90KHZvaWQgKmFkZHIsIHBncHJvdF90IHByb3QpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBfX3BhKGFkZHIpID4+IFBBR0VfU0hJRlQ7CisJcHRlX3QgcHRlID0gcGZuX3B0ZShwZm4sIHByb3QpOworCisJeGVuX3Jhd19wcmludGsoImFkZHI9JXAgcGZuPSVseCBtZm49JWx4IHByb3Q9JTAxNmxseCBwdGU9JTAxNmxseFxuIiwKKwkJICAgICAgIGFkZHIsIHBmbiwgZ2V0X3BoeXNfdG9fbWFjaGluZShwZm4pLAorCQkgICAgICAgcGdwcm90X3ZhbChwcm90KSwgcHRlLnB0ZSk7CisKKwlpZiAoSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZygodW5zaWduZWQgbG9uZylhZGRyLCBwdGUsIDApKQorCQlCVUcoKTsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIHhlbl9tYXBfaWRlbnRpdHlfZWFybHkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBtYXhfcGZuKQoreworCXVuc2lnbmVkIHBtZGlkeCwgcHRlaWR4OworCXVuc2lnbmVkIGlkZW50X3B0ZTsKKwl1bnNpZ25lZCBsb25nIHBmbjsKKworCWlkZW50X3B0ZSA9IDA7CisJcGZuID0gMDsKKwlmb3IocG1kaWR4ID0gMDsgcG1kaWR4IDwgUFRSU19QRVJfUE1EICYmIHBmbiA8IG1heF9wZm47IHBtZGlkeCsrKSB7CisJCXB0ZV90ICpwdGVfcGFnZTsKKworCQkvKiBSZXVzZSBvciBhbGxvY2F0ZSBhIHBhZ2Ugb2YgcHRlcyAqLworCQlpZiAocG1kX3ByZXNlbnQocG1kW3BtZGlkeF0pKQorCQkJcHRlX3BhZ2UgPSBtMnYocG1kW3BtZGlkeF0ucG1kKTsKKwkJZWxzZSB7CisJCQkvKiBDaGVjayBmb3IgZnJlZSBwdGUgcGFnZXMgKi8KKwkJCWlmIChpZGVudF9wdGUgPT0gQVJSQVlfU0laRShsZXZlbDFfaWRlbnRfcGd0KSkKKwkJCQlicmVhazsKKworCQkJcHRlX3BhZ2UgPSAmbGV2ZWwxX2lkZW50X3BndFtpZGVudF9wdGVdOworCQkJaWRlbnRfcHRlICs9IFBUUlNfUEVSX1BURTsKKworCQkJcG1kW3BtZGlkeF0gPSBfX3BtZChfX3BhKHB0ZV9wYWdlKSB8IF9QQUdFX1RBQkxFKTsKKwkJfQorCisJCS8qIEluc3RhbGwgbWFwcGluZ3MgKi8KKwkJZm9yKHB0ZWlkeCA9IDA7IHB0ZWlkeCA8IFBUUlNfUEVSX1BURTsgcHRlaWR4KyssIHBmbisrKSB7CisJCQlwdGVfdCBwdGU7CisKKwkJCWlmIChwZm4gPiBtYXhfcGZuX21hcHBlZCkKKwkJCQltYXhfcGZuX21hcHBlZCA9IHBmbjsKKworCQkJaWYgKCFwdGVfbm9uZShwdGVfcGFnZVtwdGVpZHhdKSkKKwkJCQljb250aW51ZTsKKworCQkJcHRlID0gcGZuX3B0ZShwZm4sIFBBR0VfS0VSTkVMX0VYRUMpOworCQkJcHRlX3BhZ2VbcHRlaWR4XSA9IHB0ZTsKKwkJfQorCX0KKworCWZvcihwdGVpZHggPSAwOyBwdGVpZHggPCBpZGVudF9wdGU7IHB0ZWlkeCArPSBQVFJTX1BFUl9QVEUpCisJCXNldF9wYWdlX3Byb3QoJmxldmVsMV9pZGVudF9wZ3RbcHRlaWR4XSwgUEFHRV9LRVJORUxfUk8pOworCisJc2V0X3BhZ2VfcHJvdChwbWQsIFBBR0VfS0VSTkVMX1JPKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyB2b2lkIGNvbnZlcnRfcGZuX21mbih2b2lkICp2KQoreworCXB0ZV90ICpwdGUgPSB2OworCWludCBpOworCisJLyogQWxsIGxldmVscyBhcmUgY29udmVydGVkIHRoZSBzYW1lIHdheSwgc28ganVzdCB0cmVhdCB0aGVtCisJICAgYXMgcHRlcy4gKi8KKwlmb3IoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVEU7IGkrKykKKwkJcHRlW2ldID0geGVuX21ha2VfcHRlKHB0ZVtpXS5wdGUpOworfQorCisvKgorICogU2V0IHVwIHRoZSBpbml0YWwga2VybmVsIHBhZ2V0YWJsZS4KKyAqCisgKiBXZSBjYW4gY29uc3RydWN0IHRoaXMgYnkgZ3JhZnRpbmcgdGhlIFhlbiBwcm92aWRlZCBwYWdldGFibGUgaW50bworICogaGVhZF82NC5TJ3MgcHJlY29uc3RydWN0ZWQgcGFnZXRhYmxlcy4gIFdlIGNvcHkgdGhlIFhlbiBMMidzIGludG8KKyAqIGxldmVsMl9pZGVudF9wZ3QsIGxldmVsMl9rZXJuZWxfcGd0IGFuZCBsZXZlbDJfZml4bWFwX3BndC4gIFRoaXMKKyAqIG1lYW5zIHRoYXQgb25seSB0aGUga2VybmVsIGhhcyBhIHBoeXNpY2FsIG1hcHBpbmcgdG8gc3RhcnQgd2l0aCAtCisgKiBidXQgdGhhdCdzIGVub3VnaCB0byBnZXQgX192YSB3b3JraW5nLiAgV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZXN0CisgKiBvZiB0aGUgcGh5c2ljYWwgbWFwcGluZyBvbmNlIHNvbWUgc29ydCBvZiBhbGxvY2F0b3IgaGFzIGJlZW4gc2V0CisgKiB1cC4KKyAqLworc3RhdGljIF9faW5pdCBwZ2RfdCAqeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBtYXhfcGZuKQoreworCXB1ZF90ICpsMzsKKwlwbWRfdCAqbDI7CisKKwkvKiBaYXAgaWRlbnRpdHkgbWFwcGluZyAqLworCWluaXRfbGV2ZWw0X3BndFswXSA9IF9fcGdkKDApOworCisJLyogUHJlLWNvbnN0cnVjdGVkIGVudHJpZXMgYXJlIGluIHBmbiwgc28gY29udmVydCB0byBtZm4gKi8KKwljb252ZXJ0X3Bmbl9tZm4oaW5pdF9sZXZlbDRfcGd0KTsKKwljb252ZXJ0X3Bmbl9tZm4obGV2ZWwzX2lkZW50X3BndCk7CisJY29udmVydF9wZm5fbWZuKGxldmVsM19rZXJuZWxfcGd0KTsKKworCWwzID0gbTJ2KHBnZFtwZ2RfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwKV0ucGdkKTsKKwlsMiA9IG0ydihsM1twdWRfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwKV0ucHVkKTsKKworCW1lbWNweShsZXZlbDJfaWRlbnRfcGd0LCBsMiwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7CisJbWVtY3B5KGxldmVsMl9rZXJuZWxfcGd0LCBsMiwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7CisKKwlsMyA9IG0ydihwZ2RbcGdkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCArIFBNRF9TSVpFKV0ucGdkKTsKKwlsMiA9IG0ydihsM1twdWRfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwICsgUE1EX1NJWkUpXS5wdWQpOworCW1lbWNweShsZXZlbDJfZml4bWFwX3BndCwgbDIsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOworCisJLyogU2V0IHVwIGlkZW50aXR5IG1hcCAqLworCXhlbl9tYXBfaWRlbnRpdHlfZWFybHkobGV2ZWwyX2lkZW50X3BndCwgbWF4X3Bmbik7CisKKwkvKiBNYWtlIHBhZ2V0YWJsZSBwaWVjZXMgUk8gKi8KKwlzZXRfcGFnZV9wcm90KGluaXRfbGV2ZWw0X3BndCwgUEFHRV9LRVJORUxfUk8pOworCXNldF9wYWdlX3Byb3QobGV2ZWwzX2lkZW50X3BndCwgUEFHRV9LRVJORUxfUk8pOworCXNldF9wYWdlX3Byb3QobGV2ZWwzX2tlcm5lbF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKKwlzZXRfcGFnZV9wcm90KGxldmVsM191c2VyX3ZzeXNjYWxsLCBQQUdFX0tFUk5FTF9STyk7CisJc2V0X3BhZ2VfcHJvdChsZXZlbDJfa2VybmVsX3BndCwgUEFHRV9LRVJORUxfUk8pOworCXNldF9wYWdlX3Byb3QobGV2ZWwyX2ZpeG1hcF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKKworCS8qIFBpbiBkb3duIG5ldyBMNCAqLworCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9QSU5fTDRfVEFCTEUsCisJCQkgIFBGTl9ET1dOKF9fcGFfc3ltYm9sKGluaXRfbGV2ZWw0X3BndCkpKTsKKworCS8qIFVucGluIFhlbi1wcm92aWRlZCBvbmUgKi8KKwlwaW5fcGFnZXRhYmxlX3BmbihNTVVFWFRfVU5QSU5fVEFCTEUsIFBGTl9ET1dOKF9fcGEocGdkKSkpOworCisJLyogU3dpdGNoIG92ZXIgKi8KKwlwZ2QgPSBpbml0X2xldmVsNF9wZ3Q7CisKKwkvKgorCSAqIEF0IHRoaXMgc3RhZ2UgdGhlcmUgY2FuIGJlIG5vIHVzZXIgcGdkLCBhbmQgbm8gcGFnZQorCSAqIHN0cnVjdHVyZSB0byBhdHRhY2ggaXQgdG8sIHNvIG1ha2Ugc3VyZSB3ZSBqdXN0IHNldCBrZXJuZWwKKwkgKiBwZ2QuCisJICovCisJeGVuX21jX2JhdGNoKCk7CisJX194ZW5fd3JpdGVfY3IzKHRydWUsIF9fcGEocGdkKSk7CisJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfQ1BVKTsKKworCXJlc2VydmVfZWFybHkoX19wYSh4ZW5fc3RhcnRfaW5mby0+cHRfYmFzZSksCisJCSAgICAgIF9fcGEoeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2UgKworCQkJICAgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcyAqIFBBR0VfU0laRSksCisJCSAgICAgICJYRU4gUEFHRVRBQkxFUyIpOworCisJcmV0dXJuIHBnZDsKK30KKyNlbHNlCS8qICFDT05GSUdfWDg2XzY0ICovCitzdGF0aWMgcG1kX3QgbGV2ZWwyX2tlcm5lbF9wZ3RbUFRSU19QRVJfUE1EXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisKK3N0YXRpYyBfX2luaXQgcGdkX3QgKnhlbl9zZXR1cF9rZXJuZWxfcGFnZXRhYmxlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgbWF4X3BmbikKK3sKKwlwbWRfdCAqa2VybmVsX3BtZDsKKworCWluaXRfcGdfdGFibGVzX3N0YXJ0ID0gX19wYShwZ2QpOworCWluaXRfcGdfdGFibGVzX2VuZCA9IF9fcGEocGdkKSArIHhlbl9zdGFydF9pbmZvLT5ucl9wdF9mcmFtZXMqUEFHRV9TSVpFOworCW1heF9wZm5fbWFwcGVkID0gUEZOX0RPV04oaW5pdF9wZ190YWJsZXNfZW5kICsgNTEyKjEwMjQpOworCisJa2VybmVsX3BtZCA9IG0ydihwZ2RbS0VSTkVMX1BHRF9CT1VOREFSWV0ucGdkKTsKKwltZW1jcHkobGV2ZWwyX2tlcm5lbF9wZ3QsIGtlcm5lbF9wbWQsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOworCisJeGVuX21hcF9pZGVudGl0eV9lYXJseShsZXZlbDJfa2VybmVsX3BndCwgbWF4X3Bmbik7CisKKwltZW1jcHkoc3dhcHBlcl9wZ19kaXIsIHBnZCwgc2l6ZW9mKHBnZF90KSAqIFBUUlNfUEVSX1BHRCk7CisJc2V0X3BnZCgmc3dhcHBlcl9wZ19kaXJbS0VSTkVMX1BHRF9CT1VOREFSWV0sCisJCQlfX3BnZChfX3BhKGxldmVsMl9rZXJuZWxfcGd0KSB8IF9QQUdFX1BSRVNFTlQpKTsKKworCXNldF9wYWdlX3Byb3QobGV2ZWwyX2tlcm5lbF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKKwlzZXRfcGFnZV9wcm90KHN3YXBwZXJfcGdfZGlyLCBQQUdFX0tFUk5FTF9STyk7CisJc2V0X3BhZ2VfcHJvdChlbXB0eV96ZXJvX3BhZ2UsIFBBR0VfS0VSTkVMX1JPKTsKKworCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9VTlBJTl9UQUJMRSwgUEZOX0RPV04oX19wYShwZ2QpKSk7CisKKwl4ZW5fd3JpdGVfY3IzKF9fcGEoc3dhcHBlcl9wZ19kaXIpKTsKKworCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9QSU5fTDNfVEFCTEUsIFBGTl9ET1dOKF9fcGEoc3dhcHBlcl9wZ19kaXIpKSk7CisKKwlyZXR1cm4gc3dhcHBlcl9wZ19kaXI7Cit9CisjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLworCiAvKiBGaXJzdCBDIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBYZW4gYm9vdCAqLwogYXNtbGlua2FnZSB2b2lkIF9faW5pdCB4ZW5fc3RhcnRfa2VybmVsKHZvaWQpCiB7CkBAIC0xMzAxLDUzICsxNjg0LDU2IEBACiAKIAltYWNoaW5lX29wcyA9IHhlbl9tYWNoaW5lX29wczsKIAotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfb3BzID0geGVuX3NtcF9vcHM7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qIERpc2FibGUgdW50aWwgZGlyZWN0IHBlci1jcHUgZGF0YSBhY2Nlc3MuICovCisJaGF2ZV92Y3B1X2luZm9fcGxhY2VtZW50ID0gMDsKKwl4ODZfNjRfaW5pdF9wZGEoKTsKICNlbmRpZgogCisJeGVuX3NtcF9pbml0KCk7CisKIAkvKiBHZXQgbWZuIGxpc3QgKi8KIAlpZiAoIXhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKQogCQl4ZW5fYnVpbGRfZHluYW1pY19waHlzX3RvX21hY2hpbmUoKTsKIAogCXBnZCA9IChwZ2RfdCAqKXhlbl9zdGFydF9pbmZvLT5wdF9iYXNlOwogCi0JaW5pdF9wZ190YWJsZXNfc3RhcnQgPSBfX3BhKHBnZCk7Ci0JaW5pdF9wZ190YWJsZXNfZW5kID0gX19wYShwZ2QpICsgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcypQQUdFX1NJWkU7Ci0JbWF4X3Bmbl9tYXBwZWQgPSAoaW5pdF9wZ190YWJsZXNfZW5kICsgNTEyKjEwMjQpID4+IFBBR0VfU0hJRlQ7Ci0KLQlpbml0X21tLnBnZCA9IHBnZDsgLyogdXNlIHRoZSBYZW4gcGFnZXRhYmxlcyB0byBzdGFydCAqLwotCi0JLyoga2VlcCB1c2luZyBYZW4gZ2R0IGZvciBub3c7IG5vIHVyZ2VudCBuZWVkIHRvIGNoYW5nZSBpdCAqLwotCi0JeDg2X3dyaXRlX3BlcmNwdSh4ZW5fY3IzLCBfX3BhKHBnZCkpOwotCXg4Nl93cml0ZV9wZXJjcHUoeGVuX2N1cnJlbnRfY3IzLCBfX3BhKHBnZCkpOwotCi0JLyogRG9uJ3QgZG8gdGhlIGZ1bGwgdmNwdV9pbmZvIHBsYWNlbWVudCBzdHVmZiB1bnRpbCB3ZSBoYXZlIGEKLQkgICBwb3NzaWJsZSBtYXAgYW5kIGEgbm9uLWR1bW15IHNoYXJlZF9pbmZvLiAqLwotCXBlcl9jcHUoeGVuX3ZjcHUsIDApID0gJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1swXTsKLQotCXB2X2luZm8ua2VybmVsX3JwbCA9IDE7Ci0JaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfc3VwZXJ2aXNvcl9tb2RlX2tlcm5lbCkpCi0JCXB2X2luZm8ua2VybmVsX3JwbCA9IDA7Ci0KIAkvKiBQcmV2ZW50IHVud2FudGVkIGJpdHMgZnJvbSBiZWluZyBzZXQgaW4gUFRFcy4gKi8KIAlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfR0xPQkFMOwogCWlmICghaXNfaW5pdGlhbF94ZW5kb21haW4oKSkKIAkJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfihfUEFHRV9QV1QgfCBfUEFHRV9QQ0QpOwogCisJLyogRG9uJ3QgZG8gdGhlIGZ1bGwgdmNwdV9pbmZvIHBsYWNlbWVudCBzdHVmZiB1bnRpbCB3ZSBoYXZlIGEKKwkgICBwb3NzaWJsZSBtYXAgYW5kIGEgbm9uLWR1bW15IHNoYXJlZF9pbmZvLiAqLworCXBlcl9jcHUoeGVuX3ZjcHUsIDApID0gJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1swXTsKKworCXhlbl9yYXdfY29uc29sZV93cml0ZSgibWFwcGluZyBrZXJuZWwgaW50byBwaHlzaWNhbCBtZW1vcnlcbiIpOworCXBnZCA9IHhlbl9zZXR1cF9rZXJuZWxfcGFnZXRhYmxlKHBnZCwgeGVuX3N0YXJ0X2luZm8tPm5yX3BhZ2VzKTsKKworCWluaXRfbW0ucGdkID0gcGdkOworCisJLyoga2VlcCB1c2luZyBYZW4gZ2R0IGZvciBub3c7IG5vIHVyZ2VudCBuZWVkIHRvIGNoYW5nZSBpdCAqLworCisJcHZfaW5mby5rZXJuZWxfcnBsID0gMTsKKwlpZiAoeGVuX2ZlYXR1cmUoWEVORkVBVF9zdXBlcnZpc29yX21vZGVfa2VybmVsKSkKKwkJcHZfaW5mby5rZXJuZWxfcnBsID0gMDsKKwogCS8qIHNldCB0aGUgbGltaXQgb2Ygb3VyIGFkZHJlc3Mgc3BhY2UgKi8KIAl4ZW5fcmVzZXJ2ZV90b3AoKTsKIAorI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBzZXQgdXAgYmFzaWMgQ1BVSUQgc3R1ZmYgKi8KIAljcHVfZGV0ZWN0KCZuZXdfY3B1X2RhdGEpOwogCW5ld19jcHVfZGF0YS5oYXJkX21hdGggPSAxOwogCW5ld19jcHVfZGF0YS54ODZfY2FwYWJpbGl0eVswXSA9IGNwdWlkX2VkeCgxKTsKKyNlbmRpZgogCiAJLyogUG9rZSB2YXJpb3VzIHVzZWZ1bCB0aGluZ3MgaW50byBib290X3BhcmFtcyAqLwogCWJvb3RfcGFyYW1zLmhkci50eXBlX29mX2xvYWRlciA9ICg5IDw8IDQpIHwgMDsKIAlib290X3BhcmFtcy5oZHIucmFtZGlza19pbWFnZSA9IHhlbl9zdGFydF9pbmZvLT5tb2Rfc3RhcnQKIAkJPyBfX3BhKHhlbl9zdGFydF9pbmZvLT5tb2Rfc3RhcnQpIDogMDsKIAlib290X3BhcmFtcy5oZHIucmFtZGlza19zaXplID0geGVuX3N0YXJ0X2luZm8tPm1vZF9sZW47CisJYm9vdF9wYXJhbXMuaGRyLmNtZF9saW5lX3B0ciA9IF9fcGEoeGVuX3N0YXJ0X2luZm8tPmNtZF9saW5lKTsKIAogCWlmICghaXNfaW5pdGlhbF94ZW5kb21haW4oKSkgewogCQlhZGRfcHJlZmVycmVkX2NvbnNvbGUoInhlbmJvb3QiLCAwLCBOVUxMKTsKQEAgLTEzNTUsNiArMTc0MSwyMSBAQAogCQlhZGRfcHJlZmVycmVkX2NvbnNvbGUoImh2YyIsIDAsIE5VTEwpOwogCX0KIAorCXhlbl9yYXdfY29uc29sZV93cml0ZSgiYWJvdXQgdG8gZ2V0IHN0YXJ0ZWQuLi5cbiIpOworCisjaWYgMAorCXhlbl9yYXdfcHJpbnRrKCImYm9vdF9wYXJhbXM9JXAgX19wYSgmYm9vdF9wYXJhbXMpPSVseCBfX3ZhKF9fcGEoJmJvb3RfcGFyYW1zKSk9JWx4XG4iLAorCQkgICAgICAgJmJvb3RfcGFyYW1zLCBfX3BhX3N5bWJvbCgmYm9vdF9wYXJhbXMpLAorCQkgICAgICAgX192YShfX3BhX3N5bWJvbCgmYm9vdF9wYXJhbXMpKSk7CisKKwl3YWxrKHBnZCwgJmJvb3RfcGFyYW1zKTsKKwl3YWxrKHBnZCwgX192YShfX3BhKCZib290X3BhcmFtcykpKTsKKyNlbmRpZgorCiAJLyogU3RhcnQgdGhlIHdvcmxkICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWkzODZfc3RhcnRfa2VybmVsKCk7CisjZWxzZQorCXg4Nl82NF9zdGFydF9yZXNlcnZhdGlvbnMoKGNoYXIgKilfX3BhX3N5bWJvbCgmYm9vdF9wYXJhbXMpKTsKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IGZmMGFhNzQuLmFhMzc0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTQ0LDggKzQ0LDEwIEBACiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgogCiAjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KICNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KQEAgLTU2LDI2ICs1OCwyOSBAQAogI2luY2x1ZGUgIm11bHRpY2FsbHMuaCIKICNpbmNsdWRlICJtbXUuaCIKIAorLyoKKyAqIEp1c3QgYmV5b25kIHRoZSBoaWdoZXN0IHVzZXJtb2RlIGFkZHJlc3MuICBTVEFDS19UT1BfTUFYIGhhcyBhCisgKiByZWR6b25lIGFib3ZlIGl0LCBzbyByb3VuZCBpdCB1cCB0byBhIFBHRCBib3VuZGFyeS4KKyAqLworI2RlZmluZSBVU0VSX0xJTUlUCSgoU1RBQ0tfVE9QX01BWCArIFBHRElSX1NJWkUgLSAxKSAmIFBHRElSX01BU0spCisKKwogI2RlZmluZSBQMk1fRU5UUklFU19QRVJfUEFHRQkoUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQogI2RlZmluZSBUT1BfRU5UUklFUwkJKE1BWF9ET01BSU5fUEFHRVMgLyBQMk1fRU5UUklFU19QRVJfUEFHRSkKIAogLyogUGxhY2Vob2xkZXIgZm9yIGhvbGVzIGluIHRoZSBhZGRyZXNzIHNwYWNlICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwMm1fbWlzc2luZ1tQMk1fRU5UUklFU19QRVJfUEFHRV0KLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGF0YS5wYWdlX2FsaWduZWQiKSkpID0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHAybV9taXNzaW5nW1AyTV9FTlRSSUVTX1BFUl9QQUdFXSBfX3BhZ2VfYWxpZ25lZF9kYXRhID0KIAkJeyBbIDAgLi4uIFAyTV9FTlRSSUVTX1BFUl9QQUdFLTEgXSA9IH4wVUwgfTsKIAogIC8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIHBhZ2VzIGNvbnRhaW5pbmcgcDJtIGVudHJpZXMgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nICpwMm1fdG9wW1RPUF9FTlRSSUVTXQotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5kYXRhLnBhZ2VfYWxpZ25lZCIpKSkgPQorc3RhdGljIHVuc2lnbmVkIGxvbmcgKnAybV90b3BbVE9QX0VOVFJJRVNdIF9fcGFnZV9hbGlnbmVkX2RhdGEgPQogCQl7IFsgMCAuLi4gVE9QX0VOVFJJRVMgLSAxXSA9ICZwMm1fbWlzc2luZ1swXSB9OwogCiAvKiBBcnJheXMgb2YgcDJtIGFycmF5cyBleHByZXNzZWQgaW4gbWZucyB1c2VkIGZvciBzYXZlL3Jlc3RvcmUgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHAybV90b3BfbWZuW1RPUF9FTlRSSUVTXQotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ic3MucGFnZV9hbGlnbmVkIikpKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHAybV90b3BfbWZuW1RPUF9FTlRSSUVTXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHAybV90b3BfbWZuX2xpc3RbCi0JCQlQQUdFX0FMSUdOKFRPUF9FTlRSSUVTIC8gUDJNX0VOVFJJRVNfUEVSX1BBR0UpXQotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ic3MucGFnZV9hbGlnbmVkIikpKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHAybV90b3BfbWZuX2xpc3RbVE9QX0VOVFJJRVMgLyBQMk1fRU5UUklFU19QRVJfUEFHRV0KKwlfX3BhZ2VfYWxpZ25lZF9ic3M7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcDJtX3RvcF9pbmRleCh1bnNpZ25lZCBsb25nIHBmbikKIHsKQEAgLTE4MSwxNSArMTg2LDE2IEBACiAJcDJtX3RvcFt0b3BpZHhdW2lkeF0gPSBtZm47CiB9CiAKLXhtYWRkcl90IGFyYml0cmFyeV92aXJ0X3RvX21hY2hpbmUodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreG1hZGRyX3QgYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSh2b2lkICp2YWRkcikKIHsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKIAl1bnNpZ25lZCBpbnQgbGV2ZWw7CiAJcHRlX3QgKnB0ZSA9IGxvb2t1cF9hZGRyZXNzKGFkZHJlc3MsICZsZXZlbCk7CiAJdW5zaWduZWQgb2Zmc2V0ID0gYWRkcmVzcyAmIH5QQUdFX01BU0s7CiAKIAlCVUdfT04ocHRlID09IE5VTEwpOwogCi0JcmV0dXJuIFhNQUREUigocHRlX21mbigqcHRlKSA8PCBQQUdFX1NISUZUKSArIG9mZnNldCk7CisJcmV0dXJuIFhNQUREUigoKHBoeXNfYWRkcl90KXB0ZV9tZm4oKnB0ZSkgPDwgUEFHRV9TSElGVCkgKyBvZmZzZXQpOwogfQogCiB2b2lkIG1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkodm9pZCAqdmFkZHIpCkBAIC0yNTYsNyArMjYyLDggQEAKIAogCXhlbl9tY19iYXRjaCgpOwogCi0JdS5wdHIgPSB2aXJ0X3RvX21hY2hpbmUocHRyKS5tYWRkcjsKKwkvKiBwdHIgbWF5IGJlIGlvcmVtYXBwZWQgZm9yIDY0LWJpdCBwYWdldGFibGUgc2V0dXAgKi8KKwl1LnB0ciA9IGFyYml0cmFyeV92aXJ0X3RvX21hY2hpbmUocHRyKS5tYWRkcjsKIAl1LnZhbCA9IHBtZF92YWxfbWEodmFsKTsKIAlleHRlbmRfbW11X3VwZGF0ZSgmdSk7CiAKQEAgLTI4MywzNSArMjkwLDcgQEAKICAqLwogdm9pZCBzZXRfcHRlX21mbih1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIG1mbiwgcGdwcm90X3QgZmxhZ3MpCiB7Ci0JcGdkX3QgKnBnZDsKLQlwdWRfdCAqcHVkOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnB0ZTsKLQotCXBnZCA9IHN3YXBwZXJfcGdfZGlyICsgcGdkX2luZGV4KHZhZGRyKTsKLQlpZiAocGdkX25vbmUoKnBnZCkpIHsKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0JcHVkID0gcHVkX29mZnNldChwZ2QsIHZhZGRyKTsKLQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0JcG1kID0gcG1kX29mZnNldChwdWQsIHZhZGRyKTsKLQlpZiAocG1kX25vbmUoKnBtZCkpIHsKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0JcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCB2YWRkcik7Ci0JLyogPG1mbixmbGFncz4gc3RvcmVkIGFzLWlzLCB0byBwZXJtaXQgY2xlYXJpbmcgZW50cmllcyAqLwotCXhlbl9zZXRfcHRlKHB0ZSwgbWZuX3B0ZShtZm4sIGZsYWdzKSk7Ci0KLQkvKgotCSAqIEl0J3MgZW5vdWdoIHRvIGZsdXNoIHRoaXMgb25lIG1hcHBpbmcuCi0JICogKFBHRSBtYXBwaW5ncyBnZXQgZmx1c2hlZCBhcyB3ZWxsKQotCSAqLwotCV9fZmx1c2hfdGxiX29uZSh2YWRkcik7CisJc2V0X3B0ZV92YWRkcih2YWRkciwgbWZuX3B0ZShtZm4sIGZsYWdzKSk7CiB9CiAKIHZvaWQgeGVuX3NldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKQEAgLTM2NCw4ICszNDMsOCBAQAogc3RhdGljIHB0ZXZhbF90IHB0ZV9tZm5fdG9fcGZuKHB0ZXZhbF90IHZhbCkKIHsKIAlpZiAodmFsICYgX1BBR0VfUFJFU0VOVCkgewotCQl1bnNpZ25lZCBsb25nIG1mbiA9ICh2YWwgJiBQVEVfTUFTSykgPj4gUEFHRV9TSElGVDsKLQkJcHRldmFsX3QgZmxhZ3MgPSB2YWwgJiB+UFRFX01BU0s7CisJCXVuc2lnbmVkIGxvbmcgbWZuID0gKHZhbCAmIFBURV9QRk5fTUFTSykgPj4gUEFHRV9TSElGVDsKKwkJcHRldmFsX3QgZmxhZ3MgPSB2YWwgJiBQVEVfRkxBR1NfTUFTSzsKIAkJdmFsID0gKChwdGV2YWxfdCltZm5fdG9fcGZuKG1mbikgPDwgUEFHRV9TSElGVCkgfCBmbGFnczsKIAl9CiAKQEAgLTM3NSw4ICszNTQsOCBAQAogc3RhdGljIHB0ZXZhbF90IHB0ZV9wZm5fdG9fbWZuKHB0ZXZhbF90IHZhbCkKIHsKIAlpZiAodmFsICYgX1BBR0VfUFJFU0VOVCkgewotCQl1bnNpZ25lZCBsb25nIHBmbiA9ICh2YWwgJiBQVEVfTUFTSykgPj4gUEFHRV9TSElGVDsKLQkJcHRldmFsX3QgZmxhZ3MgPSB2YWwgJiB+UFRFX01BU0s7CisJCXVuc2lnbmVkIGxvbmcgcGZuID0gKHZhbCAmIFBURV9QRk5fTUFTSykgPj4gUEFHRV9TSElGVDsKKwkJcHRldmFsX3QgZmxhZ3MgPSB2YWwgJiBQVEVfRkxBR1NfTUFTSzsKIAkJdmFsID0gKChwdGV2YWxfdClwZm5fdG9fbWZuKHBmbikgPDwgUEFHRV9TSElGVCkgfCBmbGFnczsKIAl9CiAKQEAgLTQxOCw3ICszOTcsOCBAQAogCiAJeGVuX21jX2JhdGNoKCk7CiAKLQl1LnB0ciA9IHZpcnRfdG9fbWFjaGluZShwdHIpLm1hZGRyOworCS8qIHB0ciBtYXkgYmUgaW9yZW1hcHBlZCBmb3IgNjQtYml0IHBhZ2V0YWJsZSBzZXR1cCAqLworCXUucHRyID0gYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZShwdHIpLm1hZGRyOwogCXUudmFsID0gcHVkX3ZhbF9tYSh2YWwpOwogCWV4dGVuZF9tbXVfdXBkYXRlKCZ1KTsKIApAQCAtNDQxLDE0ICs0MjEsMTkgQEAKIAogdm9pZCB4ZW5fc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQogeworI2lmZGVmIENPTkZJR19YODZfUEFFCiAJcHRlcC0+cHRlX2hpZ2ggPSBwdGUucHRlX2hpZ2g7CiAJc21wX3dtYigpOwogCXB0ZXAtPnB0ZV9sb3cgPSBwdGUucHRlX2xvdzsKKyNlbHNlCisJKnB0ZXAgPSBwdGU7CisjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19YODZfUEFFCiB2b2lkIHhlbl9zZXRfcHRlX2F0b21pYyhwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQogewotCXNldF82NGJpdCgodTY0ICopcHRlcCwgcHRlX3ZhbF9tYShwdGUpKTsKKwlzZXRfNjRiaXQoKHU2NCAqKXB0ZXAsIG5hdGl2ZV9wdGVfdmFsKHB0ZSkpOwogfQogCiB2b2lkIHhlbl9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCkBAIC00NjIsNiArNDQ3LDcgQEAKIHsKIAlzZXRfcG1kKHBtZHAsIF9fcG1kKDApKTsKIH0KKyNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLwogCiBwbWRfdCB4ZW5fbWFrZV9wbWQocG1kdmFsX3QgcG1kKQogewpAQCAtNDY5LDc4ICs0NTUsMTg5IEBACiAJcmV0dXJuIG5hdGl2ZV9tYWtlX3BtZChwbWQpOwogfQogCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0CitwdWR2YWxfdCB4ZW5fcHVkX3ZhbChwdWRfdCBwdWQpCit7CisJcmV0dXJuIHB0ZV9tZm5fdG9fcGZuKHB1ZC5wdWQpOworfQorCitwdWRfdCB4ZW5fbWFrZV9wdWQocHVkdmFsX3QgcHVkKQoreworCXB1ZCA9IHB0ZV9wZm5fdG9fbWZuKHB1ZCk7CisKKwlyZXR1cm4gbmF0aXZlX21ha2VfcHVkKHB1ZCk7Cit9CisKK3BnZF90ICp4ZW5fZ2V0X3VzZXJfcGdkKHBnZF90ICpwZ2QpCit7CisJcGdkX3QgKnBnZF9wYWdlID0gKHBnZF90ICopKCgodW5zaWduZWQgbG9uZylwZ2QpICYgUEFHRV9NQVNLKTsKKwl1bnNpZ25lZCBvZmZzZXQgPSBwZ2QgLSBwZ2RfcGFnZTsKKwlwZ2RfdCAqdXNlcl9wdHIgPSBOVUxMOworCisJaWYgKG9mZnNldCA8IHBnZF9pbmRleChVU0VSX0xJTUlUKSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShwZ2RfcGFnZSk7CisJCXVzZXJfcHRyID0gKHBnZF90ICopcGFnZS0+cHJpdmF0ZTsKKwkJaWYgKHVzZXJfcHRyKQorCQkJdXNlcl9wdHIgKz0gb2Zmc2V0OworCX0KKworCXJldHVybiB1c2VyX3B0cjsKK30KKworc3RhdGljIHZvaWQgX194ZW5fc2V0X3BnZF9oeXBlcihwZ2RfdCAqcHRyLCBwZ2RfdCB2YWwpCit7CisJc3RydWN0IG1tdV91cGRhdGUgdTsKKworCXUucHRyID0gdmlydF90b19tYWNoaW5lKHB0cikubWFkZHI7CisJdS52YWwgPSBwZ2RfdmFsX21hKHZhbCk7CisJZXh0ZW5kX21tdV91cGRhdGUoJnUpOworfQorCiAvKgotICAoWWV0IGFub3RoZXIpIHBhZ2V0YWJsZSB3YWxrZXIuICBUaGlzIG9uZSBpcyBpbnRlbmRlZCBmb3IgcGlubmluZyBhCi0gIHBhZ2V0YWJsZS4gIFRoaXMgbWVhbnMgdGhhdCBpdCB3YWxrcyBhIHBhZ2V0YWJsZSBhbmQgY2FsbHMgdGhlCi0gIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGVhY2ggcGFnZSBpdCBmaW5kcyBtYWtpbmcgdXAgdGhlIHBhZ2UgdGFibGUsCi0gIGF0IGV2ZXJ5IGxldmVsLiAgSXQgd2Fsa3MgdGhlIGVudGlyZSBwYWdldGFibGUsIGJ1dCBpdCBvbmx5IGJvdGhlcnMKLSAgcGlubmluZyBwdGUgcGFnZXMgd2hpY2ggYXJlIGJlbG93IHB0ZV9saW1pdC4gIEluIHRoZSBub3JtYWwgY2FzZQotICB0aGlzIHdpbGwgYmUgVEFTS19TSVpFLCBidXQgYXQgYm9vdCB3ZSBuZWVkIHRvIHBpbiB1cCB0bwotICBGSVhBRERSX1RPUC4gIEJ1dCB0aGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0IHdlIGRvbid0IHBpbiBiZXlvbmQKLSAgdGhlcmUsIGJlY2F1c2UgdGhlbiB3ZSBzdGFydCBnZXR0aW5nIGludG8gWGVuJ3MgcHRlcy4KLSovCi1zdGF0aWMgaW50IHBnZF93YWxrKHBnZF90ICpwZ2RfYmFzZSwgaW50ICgqZnVuYykoc3RydWN0IHBhZ2UgKiwgZW51bSBwdF9sZXZlbCksCisgKiBSYXcgaHlwZXJjYWxsLWJhc2VkIHNldF9wZ2QsIGludGVuZGVkIGZvciBpbiBlYXJseSBib290IGJlZm9yZQorICogdGhlcmUncyBhIHBhZ2Ugc3RydWN0dXJlLiAgVGhpcyBpbXBsaWVzOgorICogIDEuIFRoZSBvbmx5IGV4aXN0aW5nIHBhZ2V0YWJsZSBpcyB0aGUga2VybmVsJ3MKKyAqICAyLiBJdCBpcyBhbHdheXMgcGlubmVkCisgKiAgMy4gSXQgaGFzIG5vIHVzZXIgcGFnZXRhYmxlIGF0dGFjaGVkIHRvIGl0CisgKi8KK3ZvaWQgX19pbml0IHhlbl9zZXRfcGdkX2h5cGVyKHBnZF90ICpwdHIsIHBnZF90IHZhbCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCXhlbl9tY19iYXRjaCgpOworCisJX194ZW5fc2V0X3BnZF9oeXBlcihwdHIsIHZhbCk7CisKKwl4ZW5fbWNfaXNzdWUoUEFSQVZJUlRfTEFaWV9NTVUpOworCisJcHJlZW1wdF9lbmFibGUoKTsKK30KKwordm9pZCB4ZW5fc2V0X3BnZChwZ2RfdCAqcHRyLCBwZ2RfdCB2YWwpCit7CisJcGdkX3QgKnVzZXJfcHRyID0geGVuX2dldF91c2VyX3BnZChwdHIpOworCisJLyogSWYgcGFnZSBpcyBub3QgcGlubmVkLCB3ZSBjYW4ganVzdCB1cGRhdGUgdGhlIGVudHJ5CisJICAgZGlyZWN0bHkgKi8KKwlpZiAoIXBhZ2VfcGlubmVkKHB0cikpIHsKKwkJKnB0ciA9IHZhbDsKKwkJaWYgKHVzZXJfcHRyKSB7CisJCQlXQVJOX09OKHBhZ2VfcGlubmVkKHVzZXJfcHRyKSk7CisJCQkqdXNlcl9wdHIgPSB2YWw7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qIElmIGl0J3MgcGlubmVkLCB0aGVuIHdlIGNhbiBhdCBsZWFzdCBiYXRjaCB0aGUga2VybmVsIGFuZAorCSAgIHVzZXIgdXBkYXRlcyB0b2dldGhlci4gKi8KKwl4ZW5fbWNfYmF0Y2goKTsKKworCV9feGVuX3NldF9wZ2RfaHlwZXIocHRyLCB2YWwpOworCWlmICh1c2VyX3B0cikKKwkJX194ZW5fc2V0X3BnZF9oeXBlcih1c2VyX3B0ciwgdmFsKTsKKworCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX01NVSk7Cit9CisjZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA9PSA0ICovCisKKy8qCisgKiAoWWV0IGFub3RoZXIpIHBhZ2V0YWJsZSB3YWxrZXIuICBUaGlzIG9uZSBpcyBpbnRlbmRlZCBmb3IgcGlubmluZyBhCisgKiBwYWdldGFibGUuICBUaGlzIG1lYW5zIHRoYXQgaXQgd2Fsa3MgYSBwYWdldGFibGUgYW5kIGNhbGxzIHRoZQorICogY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBwYWdlIGl0IGZpbmRzIG1ha2luZyB1cCB0aGUgcGFnZSB0YWJsZSwKKyAqIGF0IGV2ZXJ5IGxldmVsLiAgSXQgd2Fsa3MgdGhlIGVudGlyZSBwYWdldGFibGUsIGJ1dCBpdCBvbmx5IGJvdGhlcnMKKyAqIHBpbm5pbmcgcHRlIHBhZ2VzIHdoaWNoIGFyZSBiZWxvdyBsaW1pdC4gIEluIHRoZSBub3JtYWwgY2FzZSB0aGlzCisgKiB3aWxsIGJlIFNUQUNLX1RPUF9NQVgsIGJ1dCBhdCBib290IHdlIG5lZWQgdG8gcGluIHVwIHRvCisgKiBGSVhBRERSX1RPUC4KKyAqCisgKiBGb3IgMzItYml0IHRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgd2UgZG9uJ3QgcGluIGJleW9uZCB0aGVyZSwKKyAqIGJlY2F1c2UgdGhlbiB3ZSBzdGFydCBnZXR0aW5nIGludG8gWGVuJ3MgcHRlcy4KKyAqCisgKiBGb3IgNjQtYml0LCB3ZSBtdXN0IHNraXAgdGhlIFhlbiBob2xlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGFkZHJlc3MKKyAqIHNwYWNlLCBqdXN0IGFmdGVyIHRoZSBiaWcgeDg2LTY0IHZpcnR1YWwgaG9sZS4KKyAqLworc3RhdGljIGludCBwZ2Rfd2FsayhwZ2RfdCAqcGdkLCBpbnQgKCpmdW5jKShzdHJ1Y3QgcGFnZSAqLCBlbnVtIHB0X2xldmVsKSwKIAkJICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCiB7Ci0JcGdkX3QgKnBnZCA9IHBnZF9iYXNlOwogCWludCBmbHVzaCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKLQl1bnNpZ25lZCBsb25nIHBnZF9uZXh0OworCXVuc2lnbmVkIGhvbGVfbG93LCBob2xlX2hpZ2g7CisJdW5zaWduZWQgcGdkaWR4X2xpbWl0LCBwdWRpZHhfbGltaXQsIHBtZGlkeF9saW1pdDsKKwl1bnNpZ25lZCBwZ2RpZHgsIHB1ZGlkeCwgcG1kaWR4OwogCi0JQlVHX09OKGxpbWl0ID4gRklYQUREUl9UT1ApOworCS8qIFRoZSBsaW1pdCBpcyB0aGUgbGFzdCBieXRlIHRvIGJlIHRvdWNoZWQgKi8KKwlsaW1pdC0tOworCUJVR19PTihsaW1pdCA+PSBGSVhBRERSX1RPUCk7CiAKIAlpZiAoeGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpCiAJCXJldHVybiAwOwogCi0JZm9yICg7IGFkZHIgIT0gRklYQUREUl9UT1A7IHBnZCsrLCBhZGRyID0gcGdkX25leHQpIHsKKwkvKgorCSAqIDY0LWJpdCBoYXMgYSBncmVhdCBiaWcgaG9sZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBhZGRyZXNzCisJICogc3BhY2UsIHdoaWNoIGNvbnRhaW5zIHRoZSBYZW4gbWFwcGluZ3MuICBPbiAzMi1iaXQgdGhlc2UKKwkgKiB3aWxsIGVuZCB1cCBtYWtpbmcgYSB6ZXJvLXNpemVkIGhvbGUgYW5kIHNvIGlzIGEgbm8tb3AuCisJICovCisJaG9sZV9sb3cgPSBwZ2RfaW5kZXgoVVNFUl9MSU1JVCk7CisJaG9sZV9oaWdoID0gcGdkX2luZGV4KFBBR0VfT0ZGU0VUKTsKKworCXBnZGlkeF9saW1pdCA9IHBnZF9pbmRleChsaW1pdCk7CisjaWYgUFRSU19QRVJfUFVEID4gMQorCXB1ZGlkeF9saW1pdCA9IHB1ZF9pbmRleChsaW1pdCk7CisjZWxzZQorCXB1ZGlkeF9saW1pdCA9IDA7CisjZW5kaWYKKyNpZiBQVFJTX1BFUl9QTUQgPiAxCisJcG1kaWR4X2xpbWl0ID0gcG1kX2luZGV4KGxpbWl0KTsKKyNlbHNlCisJcG1kaWR4X2xpbWl0ID0gMDsKKyNlbmRpZgorCisJZmx1c2ggfD0gKCpmdW5jKSh2aXJ0X3RvX3BhZ2UocGdkKSwgUFRfUEdEKTsKKworCWZvciAocGdkaWR4ID0gMDsgcGdkaWR4IDw9IHBnZGlkeF9saW1pdDsgcGdkaWR4KyspIHsKIAkJcHVkX3QgKnB1ZDsKLQkJdW5zaWduZWQgbG9uZyBwdWRfbGltaXQsIHB1ZF9uZXh0OwogCi0JCXBnZF9uZXh0ID0gcHVkX2xpbWl0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIEZJWEFERFJfVE9QKTsKLQotCQlpZiAoIXBnZF92YWwoKnBnZCkpCisJCWlmIChwZ2RpZHggPj0gaG9sZV9sb3cgJiYgcGdkaWR4IDwgaG9sZV9oaWdoKQogCQkJY29udGludWU7CiAKLQkJcHVkID0gcHVkX29mZnNldChwZ2QsIDApOworCQlpZiAoIXBnZF92YWwocGdkW3BnZGlkeF0pKQorCQkJY29udGludWU7CisKKwkJcHVkID0gcHVkX29mZnNldCgmcGdkW3BnZGlkeF0sIDApOwogCiAJCWlmIChQVFJTX1BFUl9QVUQgPiAxKSAvKiBub3QgZm9sZGVkICovCiAJCQlmbHVzaCB8PSAoKmZ1bmMpKHZpcnRfdG9fcGFnZShwdWQpLCBQVF9QVUQpOwogCi0JCWZvciAoOyBhZGRyICE9IHB1ZF9saW1pdDsgcHVkKyssIGFkZHIgPSBwdWRfbmV4dCkgeworCQlmb3IgKHB1ZGlkeCA9IDA7IHB1ZGlkeCA8IFBUUlNfUEVSX1BVRDsgcHVkaWR4KyspIHsKIAkJCXBtZF90ICpwbWQ7Ci0JCQl1bnNpZ25lZCBsb25nIHBtZF9saW1pdDsKIAotCQkJcHVkX25leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgcHVkX2xpbWl0KTsKKwkJCWlmIChwZ2RpZHggPT0gcGdkaWR4X2xpbWl0ICYmCisJCQkgICAgcHVkaWR4ID4gcHVkaWR4X2xpbWl0KQorCQkJCWdvdG8gb3V0OwogCi0JCQlpZiAocHVkX25leHQgPCBsaW1pdCkKLQkJCQlwbWRfbGltaXQgPSBwdWRfbmV4dDsKLQkJCWVsc2UKLQkJCQlwbWRfbGltaXQgPSBsaW1pdDsKLQotCQkJaWYgKHB1ZF9ub25lKCpwdWQpKQorCQkJaWYgKHB1ZF9ub25lKHB1ZFtwdWRpZHhdKSkKIAkJCQljb250aW51ZTsKIAotCQkJcG1kID0gcG1kX29mZnNldChwdWQsIDApOworCQkJcG1kID0gcG1kX29mZnNldCgmcHVkW3B1ZGlkeF0sIDApOwogCiAJCQlpZiAoUFRSU19QRVJfUE1EID4gMSkgLyogbm90IGZvbGRlZCAqLwogCQkJCWZsdXNoIHw9ICgqZnVuYykodmlydF90b19wYWdlKHBtZCksIFBUX1BNRCk7CiAKLQkJCWZvciAoOyBhZGRyICE9IHBtZF9saW1pdDsgcG1kKyspIHsKLQkJCQlhZGRyICs9IChQQUdFX1NJWkUgKiBQVFJTX1BFUl9QVEUpOwotCQkJCWlmICgocG1kX2xpbWl0LTEpIDwgKGFkZHItMSkpIHsKLQkJCQkJYWRkciA9IHBtZF9saW1pdDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQorCQkJZm9yIChwbWRpZHggPSAwOyBwbWRpZHggPCBQVFJTX1BFUl9QTUQ7IHBtZGlkeCsrKSB7CisJCQkJc3RydWN0IHBhZ2UgKnB0ZTsKIAotCQkJCWlmIChwbWRfbm9uZSgqcG1kKSkKKwkJCQlpZiAocGdkaWR4ID09IHBnZGlkeF9saW1pdCAmJgorCQkJCSAgICBwdWRpZHggPT0gcHVkaWR4X2xpbWl0ICYmCisJCQkJICAgIHBtZGlkeCA+IHBtZGlkeF9saW1pdCkKKwkJCQkJZ290byBvdXQ7CisKKwkJCQlpZiAocG1kX25vbmUocG1kW3BtZGlkeF0pKQogCQkJCQljb250aW51ZTsKIAotCQkJCWZsdXNoIHw9ICgqZnVuYykocG1kX3BhZ2UoKnBtZCksIFBUX1BURSk7CisJCQkJcHRlID0gcG1kX3BhZ2UocG1kW3BtZGlkeF0pOworCQkJCWZsdXNoIHw9ICgqZnVuYykocHRlLCBQVF9QVEUpOwogCQkJfQogCQl9CiAJfQotCi0JZmx1c2ggfD0gKCpmdW5jKSh2aXJ0X3RvX3BhZ2UocGdkX2Jhc2UpLCBQVF9QR0QpOworb3V0OgogCiAJcmV0dXJuIGZsdXNoOwogfQpAQCAtNjIyLDE0ICs3MTksMzEgQEAKIHsKIAl4ZW5fbWNfYmF0Y2goKTsKIAotCWlmIChwZ2Rfd2FsayhwZ2QsIHBpbl9wYWdlLCBUQVNLX1NJWkUpKSB7CisJaWYgKHBnZF93YWxrKHBnZCwgcGluX3BhZ2UsIFVTRVJfTElNSVQpKSB7CiAJCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGZvciBrbWFwX2ZsdXNoX3VudXNlZCAqLwogCQl4ZW5fbWNfaXNzdWUoMCk7CiAJCWttYXBfZmx1c2hfdW51c2VkKCk7CiAJCXhlbl9tY19iYXRjaCgpOwogCX0KIAorI2lmZGVmIENPTkZJR19YODZfNjQKKwl7CisJCXBnZF90ICp1c2VyX3BnZCA9IHhlbl9nZXRfdXNlcl9wZ2QocGdkKTsKKworCQl4ZW5fZG9fcGluKE1NVUVYVF9QSU5fTDRfVEFCTEUsIFBGTl9ET1dOKF9fcGEocGdkKSkpOworCisJCWlmICh1c2VyX3BnZCkgeworCQkJcGluX3BhZ2UodmlydF90b19wYWdlKHVzZXJfcGdkKSwgUFRfUEdEKTsKKwkJCXhlbl9kb19waW4oTU1VRVhUX1BJTl9MNF9UQUJMRSwgUEZOX0RPV04oX19wYSh1c2VyX3BnZCkpKTsKKwkJfQorCX0KKyNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCS8qIE5lZWQgdG8gbWFrZSBzdXJlIHVuc2hhcmVkIGtlcm5lbCBQTUQgaXMgcGlubmFibGUgKi8KKwlwaW5fcGFnZSh2aXJ0X3RvX3BhZ2UocGdkX3BhZ2UocGdkW3BnZF9pbmRleChUQVNLX1NJWkUpXSkpLCBQVF9QTUQpOworI2VuZGlmCiAJeGVuX2RvX3BpbihNTVVFWFRfUElOX0wzX1RBQkxFLCBQRk5fRE9XTihfX3BhKHBnZCkpKTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAJeGVuX21jX2lzc3VlKDApOwogfQogCkBAIC02NTYsOSArNzcwLDExIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGdkX2xvY2ssIGZsYWdzKTsKIH0KIAotLyogVGhlIGluaXRfbW0gcGFnZXRhYmxlIGlzIHJlYWxseSBwaW5uZWQgYXMgc29vbiBhcyBpdHMgY3JlYXRlZCwgYnV0Ci0gICB0aGF0J3MgYmVmb3JlIHdlIGhhdmUgcGFnZSBzdHJ1Y3R1cmVzIHRvIHN0b3JlIHRoZSBiaXRzLiAgU28gZG8gYWxsCi0gICB0aGUgYm9vay1rZWVwaW5nIG5vdy4gKi8KKy8qCisgKiBUaGUgaW5pdF9tbSBwYWdldGFibGUgaXMgcmVhbGx5IHBpbm5lZCBhcyBzb29uIGFzIGl0cyBjcmVhdGVkLCBidXQKKyAqIHRoYXQncyBiZWZvcmUgd2UgaGF2ZSBwYWdlIHN0cnVjdHVyZXMgdG8gc3RvcmUgdGhlIGJpdHMuICBTbyBkbyBhbGwKKyAqIHRoZSBib29rLWtlZXBpbmcgbm93LgorICovCiBzdGF0aWMgX19pbml0IGludCBtYXJrX3Bpbm5lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwdF9sZXZlbCBsZXZlbCkKIHsKIAlTZXRQYWdlUGlubmVkKHBhZ2UpOwpAQCAtNzA4LDcgKzgyNCwyMyBAQAogCiAJeGVuX2RvX3BpbihNTVVFWFRfVU5QSU5fVEFCTEUsIFBGTl9ET1dOKF9fcGEocGdkKSkpOwogCi0JcGdkX3dhbGsocGdkLCB1bnBpbl9wYWdlLCBUQVNLX1NJWkUpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwl7CisJCXBnZF90ICp1c2VyX3BnZCA9IHhlbl9nZXRfdXNlcl9wZ2QocGdkKTsKKworCQlpZiAodXNlcl9wZ2QpIHsKKwkJCXhlbl9kb19waW4oTU1VRVhUX1VOUElOX1RBQkxFLCBQRk5fRE9XTihfX3BhKHVzZXJfcGdkKSkpOworCQkJdW5waW5fcGFnZSh2aXJ0X3RvX3BhZ2UodXNlcl9wZ2QpLCBQVF9QR0QpOworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCS8qIE5lZWQgdG8gbWFrZSBzdXJlIHVuc2hhcmVkIGtlcm5lbCBQTUQgaXMgdW5waW5uZWQgKi8KKwlwaW5fcGFnZSh2aXJ0X3RvX3BhZ2UocGdkX3BhZ2UocGdkW3BnZF9pbmRleChUQVNLX1NJWkUpXSkpLCBQVF9QTUQpOworI2VuZGlmCisKKwlwZ2Rfd2FsayhwZ2QsIHVucGluX3BhZ2UsIFVTRVJfTElNSVQpOwogCiAJeGVuX21jX2lzc3VlKDApOwogfQpAQCAtNzI3LDcgKzg1OSw2IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCAmcGdkX2xpc3QsIGxydSkgewogCQlpZiAoUGFnZVNhdmVQaW5uZWQocGFnZSkpIHsKIAkJCUJVR19PTighUGFnZVBpbm5lZChwYWdlKSk7Ci0JCQlwcmludGsoInVucGlubmluZyBwaW5uZWQgJXBcbiIsIHBhZ2VfYWRkcmVzcyhwYWdlKSk7CiAJCQl4ZW5fcGdkX3VucGluKChwZ2RfdCAqKXBhZ2VfYWRkcmVzcyhwYWdlKSk7CiAJCQlDbGVhclBhZ2VTYXZlUGlubmVkKHBhZ2UpOwogCQl9CkBAIC03NTcsOCArODg4LDE1IEBACiBzdGF0aWMgdm9pZCBkcm9wX290aGVyX21tX3JlZih2b2lkICppbmZvKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gaW5mbzsKKwlzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW07CiAKLQlpZiAoX19nZXRfY3B1X3ZhcihjcHVfdGxic3RhdGUpLmFjdGl2ZV9tbSA9PSBtbSkKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJYWN0aXZlX21tID0gcmVhZF9wZGEoYWN0aXZlX21tKTsKKyNlbHNlCisJYWN0aXZlX21tID0gX19nZXRfY3B1X3ZhcihjcHVfdGxic3RhdGUpLmFjdGl2ZV9tbTsKKyNlbmRpZgorCisJaWYgKGFjdGl2ZV9tbSA9PSBtbSkKIAkJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qIElmIHRoaXMgY3B1IHN0aWxsIGhhcyBhIHN0YWxlIGNyMyByZWZlcmVuY2UsIHRoZW4gbWFrZSBzdXJlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11LmggYi9hcmNoL3g4Ni94ZW4vbW11LmgKaW5kZXggMjk3YmY5Zi4uMGY1OWJkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5oCisrKyBiL2FyY2gveDg2L3hlbi9tbXUuaApAQCAtMTAsMTggKzEwLDYgQEAKIAlQVF9QVEUKIH07CiAKLS8qCi0gKiBQYWdlLWRpcmVjdG9yeSBhZGRyZXNzZXMgYWJvdmUgNEdCIGRvIG5vdCBmaXQgaW50byBhcmNoaXRlY3R1cmFsICVjcjMuCi0gKiBXaGVuIGFjY2Vzc2luZyAlY3IzLCBvciBlcXVpdmFsZW50IGZpZWxkIGluIHZjcHVfZ3Vlc3RfY29udGV4dCwgZ3Vlc3RzCi0gKiBtdXN0IHVzZSB0aGUgZm9sbG93aW5nIGFjY2Vzc29yIG1hY3JvcyB0byBwYWNrL3VucGFjayB2YWxpZCBNRk5zLgotICoKLSAqIE5vdGUgdGhhdCBYZW4gaXMgdXNpbmcgdGhlIGZhY3QgdGhhdCB0aGUgcGFnZXRhYmxlIGJhc2UgaXMgYWx3YXlzCi0gKiBwYWdlLWFsaWduZWQsIGFuZCBwdXR0aW5nIHRoZSAxMiBNU0Igb2YgdGhlIGFkZHJlc3MgaW50byB0aGUgMTIgTFNCCi0gKiBvZiBjcjMuCi0gKi8KLSNkZWZpbmUgeGVuX3Bmbl90b19jcjMocGZuKSAoKCh1bnNpZ25lZCkocGZuKSA8PCAxMikgfCAoKHVuc2lnbmVkKShwZm4pID4+IDIwKSkKLSNkZWZpbmUgeGVuX2NyM190b19wZm4oY3IzKSAoKCh1bnNpZ25lZCkoY3IzKSA+PiAxMikgfCAoKHVuc2lnbmVkKShjcjMpIDw8IDIwKSkKLQogCiB2b2lkIHNldF9wdGVfbWZuKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBmbGFncyk7CiAKQEAgLTQ0LDEzICszMiwyNiBAQAogdm9pZCB4ZW5fc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKTsKIHZvaWQgeGVuX3NldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOworCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIHZvaWQgeGVuX3NldF9wdGVfYXRvbWljKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpOwordm9pZCB4ZW5fcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKK3ZvaWQgeGVuX3BtZF9jbGVhcihwbWRfdCAqcG1kcCk7CisjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KKwogdm9pZCB4ZW5fc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kdmFsKTsKIHZvaWQgeGVuX3NldF9wdWQocHVkX3QgKnB0ciwgcHVkX3QgdmFsKTsKIHZvaWQgeGVuX3NldF9wbWRfaHlwZXIocG1kX3QgKnBtZHAsIHBtZF90IHBtZHZhbCk7CiB2b2lkIHhlbl9zZXRfcHVkX2h5cGVyKHB1ZF90ICpwdHIsIHB1ZF90IHZhbCk7Ci12b2lkIHhlbl9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApOwotdm9pZCB4ZW5fcG1kX2NsZWFyKHBtZF90ICpwbWRwKTsKKworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAorcHVkdmFsX3QgeGVuX3B1ZF92YWwocHVkX3QgcHVkKTsKK3B1ZF90IHhlbl9tYWtlX3B1ZChwdWR2YWxfdCBwdWR2YWwpOwordm9pZCB4ZW5fc2V0X3BnZChwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkKTsKK3ZvaWQgeGVuX3NldF9wZ2RfaHlwZXIocGdkX3QgKnBnZHAsIHBnZF90IHBnZCk7CisjZW5kaWYKKworcGdkX3QgKnhlbl9nZXRfdXNlcl9wZ2QocGdkX3QgKnBnZCk7CiAKIHB0ZV90IHhlbl9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKIHZvaWQgIHhlbl9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYyBiL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKaW5kZXggM2M2M2M0ZGEuLjllZmQxYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKKysrIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYwpAQCAtNzYsNiArNzYsNyBAQAogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVkIG11bHRpY2FsbChzKSBmYWlsZWQ6IGNwdSAlZFxuIiwKIAkJCSAgICAgICByZXQsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCQlkdW1wX3N0YWNrKCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgYi0+bWNpZHg7IGkrKykgewogCQkJCXByaW50aygiICBjYWxsICUyZC8lZDogb3A9JWx1IGFyZz1bJWx4XSByZXN1bHQ9JWxkXG4iLAogCQkJCSAgICAgICBpKzEsIGItPm1jaWR4LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NldHVwLmMgYi9hcmNoL3g4Ni94ZW4vc2V0dXAuYwppbmRleCBlMGEzOTU5Li5iNmFjYzNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc2V0dXAuYwpAQCAtODMsMzAgKzgzLDcyIEBACiAKIC8qCiAgKiBTZXQgdGhlIGJpdCBpbmRpY2F0aW5nICJub3NlZ25lZyIgbGlicmFyeSB2YXJpYW50cyBzaG91bGQgYmUgdXNlZC4KKyAqIFdlIG9ubHkgbmVlZCB0byBib3RoZXIgaW4gcHVyZSAzMi1iaXQgbW9kZTsgY29tcGF0IDMyLWJpdCBwcm9jZXNzZXMKKyAqIGNhbiBoYXZlIHVuLXRydW5jYXRlZCBzZWdtZW50cywgc28gd3JhcHBpbmcgYXJvdW5kIGlzIGFsbG93ZWQuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBmaWRkbGVfdmRzbyh2b2lkKQogewotCWV4dGVybiBjb25zdCBjaGFyIHZkc28zMl9kZWZhdWx0X3N0YXJ0OwotCXUzMiAqbWFzayA9IFZEU08zMl9TWU1CT0woJnZkc28zMl9kZWZhdWx0X3N0YXJ0LCBOT1RFX01BU0spOworI2lmZGVmIENPTkZJR19YODZfMzIKKwl1MzIgKm1hc2s7CisJbWFzayA9IFZEU08zMl9TWU1CT0woJnZkc28zMl9pbnQ4MF9zdGFydCwgTk9URV9NQVNLKTsKIAkqbWFzayB8PSAxIDw8IFZEU09fTk9URV9OT05FR1NFR19CSVQ7CisJbWFzayA9IFZEU08zMl9TWU1CT0woJnZkc28zMl9zeXNlbnRlcl9zdGFydCwgTk9URV9NQVNLKTsKKwkqbWFzayB8PSAxIDw8IFZEU09fTk9URV9OT05FR1NFR19CSVQ7CisjZW5kaWYKIH0KIAotdm9pZCB4ZW5fZW5hYmxlX3N5c2VudGVyKHZvaWQpCitzdGF0aWMgX19jcHVpbml0IGludCByZWdpc3Rlcl9jYWxsYmFjayh1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkICpmdW5jKQogewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZXh0ZXJuIHZvaWQgeGVuX3N5c2VudGVyX3RhcmdldCh2b2lkKTsKLQkvKiBNYXNrIGV2ZW50cyBvbiBlbnRyeSwgZXZlbiB0aG91Z2ggdGhleSBnZXQgZW5hYmxlZCBpbW1lZGlhdGVseSAqLwotCXN0YXRpYyBzdHJ1Y3QgY2FsbGJhY2tfcmVnaXN0ZXIgc3lzZW50ZXIgPSB7Ci0JCS50eXBlID0gQ0FMTEJBQ0tUWVBFX3N5c2VudGVyLAotCQkuYWRkcmVzcyA9IHsgX19LRVJORUxfQ1MsICh1bnNpZ25lZCBsb25nKXhlbl9zeXNlbnRlcl90YXJnZXQgfSwKKwlzdHJ1Y3QgY2FsbGJhY2tfcmVnaXN0ZXIgY2FsbGJhY2sgPSB7CisJCS50eXBlID0gdHlwZSwKKwkJLmFkZHJlc3MgPSBYRU5fQ0FMTEJBQ0soX19LRVJORUxfQ1MsIGZ1bmMpLAogCQkuZmxhZ3MgPSBDQUxMQkFDS0ZfbWFza19ldmVudHMsCiAJfTsKIAotCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFUCkgfHwKLQkgICAgSFlQRVJWSVNPUl9jYWxsYmFja19vcChDQUxMQkFDS09QX3JlZ2lzdGVyLCAmc3lzZW50ZXIpICE9IDApIHsKLQkJY2xlYXJfY3B1X2NhcCgmY3B1X2RhdGEoY3B1KSwgWDg2X0ZFQVRVUkVfU0VQKTsKLQkJY2xlYXJfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfU0VQKTsKKwlyZXR1cm4gSFlQRVJWSVNPUl9jYWxsYmFja19vcChDQUxMQkFDS09QX3JlZ2lzdGVyLCAmY2FsbGJhY2spOworfQorCit2b2lkIF9fY3B1aW5pdCB4ZW5fZW5hYmxlX3N5c2VudGVyKHZvaWQpCit7CisJZXh0ZXJuIHZvaWQgeGVuX3N5c2VudGVyX3RhcmdldCh2b2lkKTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIHN5c2VudGVyX2ZlYXR1cmU7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJc3lzZW50ZXJfZmVhdHVyZSA9IFg4Nl9GRUFUVVJFX1NFUDsKKyNlbHNlCisJc3lzZW50ZXJfZmVhdHVyZSA9IFg4Nl9GRUFUVVJFX1NZU0VOVEVSMzI7CisjZW5kaWYKKworCWlmICghYm9vdF9jcHVfaGFzKHN5c2VudGVyX2ZlYXR1cmUpKQorCQlyZXR1cm47CisKKwlyZXQgPSByZWdpc3Rlcl9jYWxsYmFjayhDQUxMQkFDS1RZUEVfc3lzZW50ZXIsIHhlbl9zeXNlbnRlcl90YXJnZXQpOworCWlmKHJldCAhPSAwKQorCQlzZXR1cF9jbGVhcl9jcHVfY2FwKHN5c2VudGVyX2ZlYXR1cmUpOworfQorCit2b2lkIF9fY3B1aW5pdCB4ZW5fZW5hYmxlX3N5c2NhbGwodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaW50IHJldDsKKwlleHRlcm4gdm9pZCB4ZW5fc3lzY2FsbF90YXJnZXQodm9pZCk7CisJZXh0ZXJuIHZvaWQgeGVuX3N5c2NhbGwzMl90YXJnZXQodm9pZCk7CisKKwlyZXQgPSByZWdpc3Rlcl9jYWxsYmFjayhDQUxMQkFDS1RZUEVfc3lzY2FsbCwgeGVuX3N5c2NhbGxfdGFyZ2V0KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IHN5c2NhbGwgY2FsbGJhY2s6ICVkXG4iLCByZXQpOworCQkvKiBQcmV0dHkgZmF0YWw7IDY0LWJpdCB1c2Vyc3BhY2UgaGFzIG5vIG90aGVyCisJCSAgIG1lY2hhbmlzbSBmb3Igc3lzY2FsbHMuICovCiAJfQorCisJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TWVNDQUxMMzIpKSB7CisJCXJldCA9IHJlZ2lzdGVyX2NhbGxiYWNrKENBTExCQUNLVFlQRV9zeXNjYWxsMzIsCisJCQkJCXhlbl9zeXNjYWxsMzJfdGFyZ2V0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9TWVNDQUxMMzIpOworCX0KKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiB9CiAKIHZvaWQgX19pbml0IHhlbl9hcmNoX3NldHVwKHZvaWQpCkBAIC0xMjAsMTAgKzE2MiwxMiBAQAogCWlmICgheGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpCiAJCUhZUEVSVklTT1Jfdm1fYXNzaXN0KFZNQVNTVF9DTURfZW5hYmxlLCBWTUFTU1RfVFlQRV9wYWVfZXh0ZW5kZWRfY3IzKTsKIAotCUhZUEVSVklTT1Jfc2V0X2NhbGxiYWNrcyhfX0tFUk5FTF9DUywgKHVuc2lnbmVkIGxvbmcpeGVuX2h5cGVydmlzb3JfY2FsbGJhY2ssCi0JCQkJIF9fS0VSTkVMX0NTLCAodW5zaWduZWQgbG9uZyl4ZW5fZmFpbHNhZmVfY2FsbGJhY2spOworCWlmIChyZWdpc3Rlcl9jYWxsYmFjayhDQUxMQkFDS1RZUEVfZXZlbnQsIHhlbl9oeXBlcnZpc29yX2NhbGxiYWNrKSB8fAorCSAgICByZWdpc3Rlcl9jYWxsYmFjayhDQUxMQkFDS1RZUEVfZmFpbHNhZmUsIHhlbl9mYWlsc2FmZV9jYWxsYmFjaykpCisJCUJVRygpOwogCiAJeGVuX2VuYWJsZV9zeXNlbnRlcigpOworCXhlbl9lbmFibGVfc3lzY2FsbCgpOwogCiAJc2V0X2lvcGwuaW9wbCA9IDE7CiAJcmMgPSBIWVBFUlZJU09SX3BoeXNkZXZfb3AoUEhZU0RFVk9QX3NldF9pb3BsLCAmc2V0X2lvcGwpOwpAQCAtMTQzLDExICsxODcsNiBAQAogCiAJcG1faWRsZSA9IHhlbl9pZGxlOwogCi0jaWZkZWYgQ09ORklHX1NNUAotCS8qIGZpbGwgY3B1c19wb3NzaWJsZSB3aXRoIGFsbCBhdmFpbGFibGUgY3B1cyAqLwotCXhlbl9maWxsX3Bvc3NpYmxlX21hcCgpOwotI2VuZGlmCi0KIAlwYXJhdmlydF9kaXNhYmxlX2lvc3BhY2UoKTsKIAogCWZpZGRsZV92ZHNvKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc21wLmMgYi9hcmNoL3g4Ni94ZW4vc21wLmMKaW5kZXggMjMzMTU2Zi4uZDhmYWY3OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NtcC5jCisrKyBiL2FyY2gveDg2L3hlbi9zbXAuYwpAQCAtMTUsNiArMTUsNyBAQAogICogVGhpcyBkb2VzIG5vdCBoYW5kbGUgSE9UUExVR19DUFUgeWV0LgogICovCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCkBAIC0zNSw2ICszNiw4IEBACiAjaW5jbHVkZSAieGVuLW9wcy5oIgogI2luY2x1ZGUgIm1tdS5oIgogCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgeGVuX2luaXRfbG9ja19jcHUoaW50IGNwdSk7CisKIGNwdW1hc2tfdCB4ZW5fY3B1X2luaXRpYWxpemVkX21hcDsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcmVzY2hlZF9pcnEpOwpAQCAtNjYsMTMgKzY5LDIyIEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWNwdV9pbml0KCk7Ci0JeGVuX2VuYWJsZV9zeXNlbnRlcigpOwotCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JcGVyX2NwdShjcHVfc3RhdGUsIGNwdSkgPSBDUFVfT05MSU5FOworCisJeGVuX2VuYWJsZV9zeXNlbnRlcigpOworCXhlbl9lbmFibGVfc3lzY2FsbCgpOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHUpOworCWNwdV9kYXRhKGNwdSkueDg2X21heF9jb3JlcyA9IDE7CisJc2V0X2NwdV9zaWJsaW5nX21hcChjcHUpOwogCiAJeGVuX3NldHVwX2NwdV9jbG9ja2V2ZW50cygpOwogCisJY3B1X3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKTsKKwl4ODZfd3JpdGVfcGVyY3B1KGNwdV9zdGF0ZSwgQ1BVX09OTElORSk7CisJd21iKCk7CisKIAkvKiBXZSBjYW4gdGFrZSBpbnRlcnJ1cHRzIG5vdzogd2UncmUgb2ZmaWNpYWxseSAidXAiLiAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtMTQxLDU2ICsxNTMsMzkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgX19pbml0IHhlbl9maWxsX3Bvc3NpYmxlX21hcCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9maWxsX3Bvc3NpYmxlX21hcCh2b2lkKQogewogCWludCBpLCByYzsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKIAkJcmMgPSBIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX2lzX3VwLCBpLCBOVUxMKTsKLQkJaWYgKHJjID49IDApCisJCWlmIChyYyA+PSAwKSB7CisJCQludW1fcHJvY2Vzc29ycysrOwogCQkJY3B1X3NldChpLCBjcHVfcG9zc2libGVfbWFwKTsKKwkJfQogCX0KIH0KIAotdm9pZCBfX2luaXQgeGVuX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiB7Ci0JaW50IGNwdTsKLQogCUJVR19PTihzbXBfcHJvY2Vzc29yX2lkKCkgIT0gMCk7CiAJbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7CiAKIAkvKiBXZSd2ZSBzd2l0Y2hlZCB0byB0aGUgInJlYWwiIHBlci1jcHUgZ2R0LCBzbyBtYWtlIHN1cmUgdGhlCiAJICAgb2xkIG1lbW9yeSBjYW4gYmUgcmVjeWNsZWQgKi8KLQltYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZSgmcGVyX2NwdV9fZ2R0X3BhZ2UpOwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQljcHVzX2NsZWFyKHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKLQkJLyoKLQkJICogY3B1X2NvcmVfbWFwIGxpdmVzIGluIGEgcGVyIGNwdSBhcmVhIHRoYXQgaXMgY2xlYXJlZAotCQkgKiB3aGVuIHRoZSBwZXIgY3B1IGFycmF5IGlzIGFsbG9jYXRlZC4KLQkJICoKLQkJICogY3B1c19jbGVhcihwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7Ci0JCSAqLwotCX0KKwltYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZSgmcGVyX2NwdV92YXIoZ2R0X3BhZ2UpKTsKIAogCXhlbl9zZXR1cF92Y3B1X2luZm9fcGxhY2VtZW50KCk7CiB9CiAKLXZvaWQgX19pbml0IHhlbl9zbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CiAJdW5zaWduZWQgY3B1OwogCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQljcHVzX2NsZWFyKHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKLQkJLyoKLQkJICogY3B1X2NvcmVfIG1hcCB3aWxsIGJlIHplcm9lZCB3aGVuIHRoZSBwZXIKLQkJICogY3B1IGFyZWEgaXMgYWxsb2NhdGVkLgotCQkgKgotCQkgKiBjcHVzX2NsZWFyKHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKLQkJICovCi0JfQorCXhlbl9pbml0X2xvY2tfY3B1KDApOwogCiAJc21wX3N0b3JlX2NwdV9pbmZvKDApOworCWNwdV9kYXRhKDApLng4Nl9tYXhfY29yZXMgPSAxOwogCXNldF9jcHVfc2libGluZ19tYXAoMCk7CiAKIAlpZiAoeGVuX3NtcF9pbnRyX2luaXQoMCkpCkBAIC0yMjUsNyArMjIwLDcgQEAKIGNwdV9pbml0aWFsaXplX2NvbnRleHQodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQogewogCXN0cnVjdCB2Y3B1X2d1ZXN0X2NvbnRleHQgKmN0eHQ7Ci0Jc3RydWN0IGdkdF9wYWdlICpnZHQgPSAmcGVyX2NwdShnZHRfcGFnZSwgY3B1KTsKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdDsKIAogCWlmIChjcHVfdGVzdF9hbmRfc2V0KGNwdSwgeGVuX2NwdV9pbml0aWFsaXplZF9tYXApKQogCQlyZXR1cm4gMDsKQEAgLTIzNCwxMiArMjI5LDE1IEBACiAJaWYgKGN0eHQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShjcHUpOworCiAJY3R4dC0+ZmxhZ3MgPSBWR0NGX0lOX0tFUk5FTDsKIAljdHh0LT51c2VyX3JlZ3MuZHMgPSBfX1VTRVJfRFM7CiAJY3R4dC0+dXNlcl9yZWdzLmVzID0gX19VU0VSX0RTOwotCWN0eHQtPnVzZXJfcmVncy5mcyA9IF9fS0VSTkVMX1BFUkNQVTsKLQljdHh0LT51c2VyX3JlZ3MuZ3MgPSAwOwogCWN0eHQtPnVzZXJfcmVncy5zcyA9IF9fS0VSTkVMX0RTOworI2lmZGVmIENPTkZJR19YODZfMzIKKwljdHh0LT51c2VyX3JlZ3MuZnMgPSBfX0tFUk5FTF9QRVJDUFU7CisjZW5kaWYKIAljdHh0LT51c2VyX3JlZ3MuZWlwID0gKHVuc2lnbmVkIGxvbmcpY3B1X2JyaW5ndXBfYW5kX2lkbGU7CiAJY3R4dC0+dXNlcl9yZWdzLmVmbGFncyA9IDB4MTAwMDsgLyogSU9QTF9SSU5HMSAqLwogCkBAIC0yNDksMTEgKzI0NywxMSBAQAogCiAJY3R4dC0+bGR0X2VudHMgPSAwOwogCi0JQlVHX09OKCh1bnNpZ25lZCBsb25nKWdkdC0+Z2R0ICYgflBBR0VfTUFTSyk7Ci0JbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShnZHQtPmdkdCk7CisJQlVHX09OKCh1bnNpZ25lZCBsb25nKWdkdCAmIH5QQUdFX01BU0spOworCW1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkoZ2R0KTsKIAotCWN0eHQtPmdkdF9mcmFtZXNbMF0gPSB2aXJ0X3RvX21mbihnZHQtPmdkdCk7Ci0JY3R4dC0+Z2R0X2VudHMgICAgICA9IEFSUkFZX1NJWkUoZ2R0LT5nZHQpOworCWN0eHQtPmdkdF9mcmFtZXNbMF0gPSB2aXJ0X3RvX21mbihnZHQpOworCWN0eHQtPmdkdF9lbnRzICAgICAgPSBHRFRfRU5UUklFUzsKIAogCWN0eHQtPnVzZXJfcmVncy5jcyA9IF9fS0VSTkVMX0NTOwogCWN0eHQtPnVzZXJfcmVncy5lc3AgPSBpZGxlLT50aHJlYWQuc3AwIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKTsKQEAgLTI2MSw5ICsyNTksMTEgQEAKIAljdHh0LT5rZXJuZWxfc3MgPSBfX0tFUk5FTF9EUzsKIAljdHh0LT5rZXJuZWxfc3AgPSBpZGxlLT50aHJlYWQuc3AwOwogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWN0eHQtPmV2ZW50X2NhbGxiYWNrX2NzICAgICA9IF9fS0VSTkVMX0NTOwotCWN0eHQtPmV2ZW50X2NhbGxiYWNrX2VpcCAgICA9ICh1bnNpZ25lZCBsb25nKXhlbl9oeXBlcnZpc29yX2NhbGxiYWNrOwogCWN0eHQtPmZhaWxzYWZlX2NhbGxiYWNrX2NzICA9IF9fS0VSTkVMX0NTOworI2VuZGlmCisJY3R4dC0+ZXZlbnRfY2FsbGJhY2tfZWlwICAgID0gKHVuc2lnbmVkIGxvbmcpeGVuX2h5cGVydmlzb3JfY2FsbGJhY2s7CiAJY3R4dC0+ZmFpbHNhZmVfY2FsbGJhY2tfZWlwID0gKHVuc2lnbmVkIGxvbmcpeGVuX2ZhaWxzYWZlX2NhbGxiYWNrOwogCiAJcGVyX2NwdSh4ZW5fY3IzLCBjcHUpID0gX19wYShzd2FwcGVyX3BnX2Rpcik7CkBAIC0yNzYsNyArMjc2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IF9fY3B1aW5pdCB4ZW5fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW50IF9fY3B1aW5pdCB4ZW5fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICppZGxlID0gaWRsZV90YXNrKGNwdSk7CiAJaW50IHJjOwpAQCAtMjg3LDEwICsyODcsMjggQEAKIAkJcmV0dXJuIHJjOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyogQWxsb2NhdGUgbm9kZSBsb2NhbCBtZW1vcnkgZm9yIEFQIHBkYXMgKi8KKwlXQVJOX09OKGNwdSA9PSAwKTsKKwlpZiAoY3B1ID4gMCkgeworCQlyYyA9IGdldF9sb2NhbF9wZGEoY3B1KTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWluaXRfZ2R0KGNwdSk7CiAJcGVyX2NwdShjdXJyZW50X3Rhc2ssIGNwdSkgPSBpZGxlOwogCWlycV9jdHhfaW5pdChjcHUpOworI2Vsc2UKKwljcHVfcGRhKGNwdSktPnBjdXJyZW50ID0gaWRsZTsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcoaWRsZSwgVElGX0ZPUkspOworI2VuZGlmCiAJeGVuX3NldHVwX3RpbWVyKGNwdSk7CisJeGVuX2luaXRfbG9ja19jcHUoY3B1KTsKKworCXBlcl9jcHUoY3B1X3N0YXRlLCBjcHUpID0gQ1BVX1VQX1BSRVBBUkU7CiAKIAkvKiBtYWtlIHN1cmUgaW50ZXJydXB0cyBzdGFydCBibG9ja2VkICovCiAJcGVyX2NwdSh4ZW5fdmNwdSwgY3B1KS0+ZXZ0Y2huX3VwY2FsbF9tYXNrID0gMTsKQEAgLTMwNiwyMCArMzI0LDE4IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlzbXBfc3RvcmVfY3B1X2luZm8oY3B1KTsKLQlzZXRfY3B1X3NpYmxpbmdfbWFwKGNwdSk7Ci0JLyogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgY3B1X29ubGluZV9tYXAgKi8KLQl3bWIoKTsKLQotCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7Ci0KIAlyYyA9IEhZUEVSVklTT1JfdmNwdV9vcChWQ1BVT1BfdXAsIGNwdSwgTlVMTCk7CiAJQlVHX09OKHJjKTsKIAorCXdoaWxlKHBlcl9jcHUoY3B1X3N0YXRlLCBjcHUpICE9IENQVV9PTkxJTkUpIHsKKwkJSFlQRVJWSVNPUl9zY2hlZF9vcChTQ0hFRE9QX3lpZWxkLCAwKTsKKwkJYmFycmllcigpOworCX0KKwogCXJldHVybiAwOwogfQogCi12b2lkIHhlbl9zbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3N0YXRpYyB2b2lkIHhlbl9zbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKIH0KIApAQCAtMzM1LDEyICszNTEsMTIgQEAKIAlCVUcoKTsKIH0KIAotdm9pZCB4ZW5fc21wX3NlbmRfc3RvcCh2b2lkKQorc3RhdGljIHZvaWQgeGVuX3NtcF9zZW5kX3N0b3Aodm9pZCkKIHsKIAlzbXBfY2FsbF9mdW5jdGlvbihzdG9wX3NlbGYsIE5VTEwsIDApOwogfQogCi12b2lkIHhlbl9zbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCitzdGF0aWMgdm9pZCB4ZW5fc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQogewogCXhlbl9zZW5kX0lQSV9vbmUoY3B1LCBYRU5fUkVTQ0hFRFVMRV9WRUNUT1IpOwogfQpAQCAtMzUxLDE4ICszNjcsMTggQEAKIAogCWNwdXNfYW5kKG1hc2ssIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIG1hc2spCiAJCXhlbl9zZW5kX0lQSV9vbmUoY3B1LCB2ZWN0b3IpOwogfQogCi12b2lkIHhlbl9zbXBfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzaykKK3N0YXRpYyB2b2lkIHhlbl9zbXBfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzaykKIHsKIAlpbnQgY3B1OwogCiAJeGVuX3NlbmRfSVBJX21hc2sobWFzaywgWEVOX0NBTExfRlVOQ1RJT05fVkVDVE9SKTsKIAogCS8qIE1ha2Ugc3VyZSBvdGhlciB2Y3B1cyBnZXQgYSBjaGFuY2UgdG8gcnVuIGlmIHRoZXkgbmVlZCB0by4gKi8KLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIG1hc2spIHsKIAkJaWYgKHhlbl92Y3B1X3N0b2xlbihjcHUpKSB7CiAJCQlIWVBFUlZJU09SX3NjaGVkX29wKFNDSEVET1BfeWllbGQsIDApOwogCQkJYnJlYWs7CkBAIC0zNzAsNyArMzg2LDcgQEAKIAl9CiB9CiAKLXZvaWQgeGVuX3NtcF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQorc3RhdGljIHZvaWQgeGVuX3NtcF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQogewogCXhlbl9zZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2ZfY3B1KGNwdSksIFhFTl9DQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IpOwogfQpAQCAtMzc5LDcgKzM5NSwxMSBAQAogewogCWlycV9lbnRlcigpOwogCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9jYWxsX2NvdW50Kys7CisjZWxzZQorCWFkZF9wZGEoaXJxX2NhbGxfY291bnQsIDEpOworI2VuZGlmCiAJaXJxX2V4aXQoKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTM4OSw4ICs0MDksMTk2IEBACiB7CiAJaXJxX2VudGVyKCk7CiAJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9jYWxsX2NvdW50Kys7CisjZWxzZQorCWFkZF9wZGEoaXJxX2NhbGxfY291bnQsIDEpOworI2VuZGlmCiAJaXJxX2V4aXQoKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KKworc3RydWN0IHhlbl9zcGlubG9jayB7CisJdW5zaWduZWQgY2hhciBsb2NrOwkJLyogMCAtPiBmcmVlOyAxIC0+IGxvY2tlZCAqLworCXVuc2lnbmVkIHNob3J0IHNwaW5uZXJzOwkvKiBjb3VudCBvZiB3YWl0aW5nIGNwdXMgKi8KK307CisKK3N0YXRpYyBpbnQgeGVuX3NwaW5faXNfbG9ja2VkKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCit7CisJc3RydWN0IHhlbl9zcGlubG9jayAqeGwgPSAoc3RydWN0IHhlbl9zcGlubG9jayAqKWxvY2s7CisKKwlyZXR1cm4geGwtPmxvY2sgIT0gMDsKK30KKworc3RhdGljIGludCB4ZW5fc3Bpbl9pc19jb250ZW5kZWQoc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgeGVuX3NwaW5sb2NrICp4bCA9IChzdHJ1Y3QgeGVuX3NwaW5sb2NrICopbG9jazsKKworCS8qIE5vdCBzdHJpY3RseSB0cnVlOyB0aGlzIGlzIG9ubHkgdGhlIGNvdW50IG9mIGNvbnRlbmRlZAorCSAgIGxvY2stdGFrZXJzIGVudGVyaW5nIHRoZSBzbG93IHBhdGguICovCisJcmV0dXJuIHhsLT5zcGlubmVycyAhPSAwOworfQorCitzdGF0aWMgaW50IHhlbl9zcGluX3RyeWxvY2soc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgeGVuX3NwaW5sb2NrICp4bCA9IChzdHJ1Y3QgeGVuX3NwaW5sb2NrICopbG9jazsKKwl1OCBvbGQgPSAxOworCisJYXNtKCJ4Y2hnYiAlYjAsJTEiCisJICAgIDogIitxIiAob2xkKSwgIittIiAoeGwtPmxvY2spIDogOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gb2xkID09IDA7Cit9CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGxvY2tfa2lja2VyX2lycSkgPSAtMTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgeGVuX3NwaW5sb2NrICosIGxvY2tfc3Bpbm5lcnMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbm5pbmdfbG9jayhzdHJ1Y3QgeGVuX3NwaW5sb2NrICp4bCkKK3sKKwlfX2dldF9jcHVfdmFyKGxvY2tfc3Bpbm5lcnMpID0geGw7CisJd21iKCk7CQkJLyogc2V0IGxvY2sgb2YgaW50ZXJlc3QgYmVmb3JlIGNvdW50ICovCisJYXNtKExPQ0tfUFJFRklYICIgaW5jdyAlMCIKKwkgICAgOiAiK20iICh4bC0+c3Bpbm5lcnMpIDogOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnNwaW5uaW5nX2xvY2soc3RydWN0IHhlbl9zcGlubG9jayAqeGwpCit7CisJYXNtKExPQ0tfUFJFRklYICIgZGVjdyAlMCIKKwkgICAgOiAiK20iICh4bC0+c3Bpbm5lcnMpIDogOiAibWVtb3J5Iik7CisJd21iKCk7CQkJLyogZGVjcmVtZW50IGNvdW50IGJlZm9yZSBjbGVhcmluZyBsb2NrICovCisJX19nZXRfY3B1X3Zhcihsb2NrX3NwaW5uZXJzKSA9IE5VTEw7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgeGVuX3NwaW5fbG9ja19zbG93KHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCit7CisJc3RydWN0IHhlbl9zcGlubG9jayAqeGwgPSAoc3RydWN0IHhlbl9zcGlubG9jayAqKWxvY2s7CisJaW50IGlycSA9IF9fZ2V0X2NwdV92YXIobG9ja19raWNrZXJfaXJxKTsKKwlpbnQgcmV0OworCisJLyogSWYga2lja2VyIGludGVycnVwdHMgbm90IGluaXRpYWxpemVkIHlldCwganVzdCBzcGluICovCisJaWYgKGlycSA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBhbm5vdW5jZSB3ZSdyZSBzcGlubmluZyAqLworCXNwaW5uaW5nX2xvY2soeGwpOworCisJLyogY2xlYXIgcGVuZGluZyAqLworCXhlbl9jbGVhcl9pcnFfcGVuZGluZyhpcnEpOworCisJLyogY2hlY2sgYWdhaW4gbWFrZSBzdXJlIGl0IGRpZG4ndCBiZWNvbWUgZnJlZSB3aGlsZQorCSAgIHdlIHdlcmVuJ3QgbG9va2luZyAgKi8KKwlyZXQgPSB4ZW5fc3Bpbl90cnlsb2NrKGxvY2spOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogYmxvY2sgdW50aWwgaXJxIGJlY29tZXMgcGVuZGluZyAqLworCXhlbl9wb2xsX2lycShpcnEpOworCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOworCitvdXQ6CisJdW5zcGlubmluZ19sb2NrKHhsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB4ZW5fc3Bpbl9sb2NrKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCit7CisJc3RydWN0IHhlbl9zcGlubG9jayAqeGwgPSAoc3RydWN0IHhlbl9zcGlubG9jayAqKWxvY2s7CisJaW50IHRpbWVvdXQ7CisJdTggb2xkdmFsOworCisJZG8geworCQl0aW1lb3V0ID0gMSA8PCAxMDsKKworCQlhc20oIjE6IHhjaGdiICUxLCUwXG4iCisJCSAgICAiICAgdGVzdGIgJTEsJTFcbiIKKwkJICAgICIgICBqeiAzZlxuIgorCQkgICAgIjI6IHJlcDtub3BcbiIKKwkJICAgICIgICBjbXBiICQwLCUwXG4iCisJCSAgICAiICAgamUgMWJcbiIKKwkJICAgICIgICBkZWMgJTJcbiIKKwkJICAgICIgICBqbnogMmJcbiIKKwkJICAgICIzOlxuIgorCQkgICAgOiAiK20iICh4bC0+bG9jayksICI9cSIgKG9sZHZhbCksICIrciIgKHRpbWVvdXQpCisJCSAgICA6ICIxIiAoMSkKKwkJICAgIDogIm1lbW9yeSIpOworCisJfSB3aGlsZSAodW5saWtlbHkob2xkdmFsICE9IDAgJiYgIXhlbl9zcGluX2xvY2tfc2xvdyhsb2NrKSkpOworfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZCB4ZW5fc3Bpbl91bmxvY2tfc2xvdyhzdHJ1Y3QgeGVuX3NwaW5sb2NrICp4bCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJLyogWFhYIHNob3VsZCBtaXggdXAgbmV4dCBjcHUgc2VsZWN0aW9uICovCisJCWlmIChwZXJfY3B1KGxvY2tfc3Bpbm5lcnMsIGNwdSkgPT0geGwpIHsKKwkJCXhlbl9zZW5kX0lQSV9vbmUoY3B1LCBYRU5fU1BJTl9VTkxPQ0tfVkVDVE9SKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB4ZW5fc3Bpbl91bmxvY2soc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgeGVuX3NwaW5sb2NrICp4bCA9IChzdHJ1Y3QgeGVuX3NwaW5sb2NrICopbG9jazsKKworCXNtcF93bWIoKTsJCS8qIG1ha2Ugc3VyZSBubyB3cml0ZXMgZ2V0IG1vdmVkIGFmdGVyIHVubG9jayAqLworCXhsLT5sb2NrID0gMDsJCS8qIHJlbGVhc2UgbG9jayAqLworCisJLyogbWFrZSBzdXJlIHVubG9jayBoYXBwZW5zIGJlZm9yZSBraWNrICovCisJYmFycmllcigpOworCisJaWYgKHVubGlrZWx5KHhsLT5zcGlubmVycykpCisJCXhlbl9zcGluX3VubG9ja19zbG93KHhsKTsKK30KKworc3RhdGljIF9fY3B1aW5pdCB2b2lkIHhlbl9pbml0X2xvY2tfY3B1KGludCBjcHUpCit7CisJaW50IGlycTsKKwljb25zdCBjaGFyICpuYW1lOworCisJbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAic3BpbmxvY2slZCIsIGNwdSk7CisJaXJxID0gYmluZF9pcGlfdG9faXJxaGFuZGxlcihYRU5fU1BJTl9VTkxPQ0tfVkVDVE9SLAorCQkJCSAgICAgY3B1LAorCQkJCSAgICAgeGVuX3Jlc2NoZWR1bGVfaW50ZXJydXB0LAorCQkJCSAgICAgSVJRRl9ESVNBQkxFRHxJUlFGX1BFUkNQVXxJUlFGX05PQkFMQU5DSU5HLAorCQkJCSAgICAgbmFtZSwKKwkJCQkgICAgIE5VTEwpOworCisJaWYgKGlycSA+PSAwKSB7CisJCWRpc2FibGVfaXJxKGlycSk7IC8qIG1ha2Ugc3VyZSBpdCdzIG5ldmVyIGRlbGl2ZXJlZCAqLworCQlwZXJfY3B1KGxvY2tfa2lja2VyX2lycSwgY3B1KSA9IGlycTsKKwl9CisKKwlwcmludGsoImNwdSAlZCBzcGlubG9jayBldmVudCBpcnEgJWRcbiIsIGNwdSwgaXJxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHhlbl9pbml0X3NwaW5sb2Nrcyh2b2lkKQoreworCXB2X2xvY2tfb3BzLnNwaW5faXNfbG9ja2VkID0geGVuX3NwaW5faXNfbG9ja2VkOworCXB2X2xvY2tfb3BzLnNwaW5faXNfY29udGVuZGVkID0geGVuX3NwaW5faXNfY29udGVuZGVkOworCXB2X2xvY2tfb3BzLnNwaW5fbG9jayA9IHhlbl9zcGluX2xvY2s7CisJcHZfbG9ja19vcHMuc3Bpbl90cnlsb2NrID0geGVuX3NwaW5fdHJ5bG9jazsKKwlwdl9sb2NrX29wcy5zcGluX3VubG9jayA9IHhlbl9zcGluX3VubG9jazsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbXBfb3BzIHhlbl9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CisJLnNtcF9wcmVwYXJlX2Jvb3RfY3B1ID0geGVuX3NtcF9wcmVwYXJlX2Jvb3RfY3B1LAorCS5zbXBfcHJlcGFyZV9jcHVzID0geGVuX3NtcF9wcmVwYXJlX2NwdXMsCisJLmNwdV91cCA9IHhlbl9jcHVfdXAsCisJLnNtcF9jcHVzX2RvbmUgPSB4ZW5fc21wX2NwdXNfZG9uZSwKKworCS5zbXBfc2VuZF9zdG9wID0geGVuX3NtcF9zZW5kX3N0b3AsCisJLnNtcF9zZW5kX3Jlc2NoZWR1bGUgPSB4ZW5fc21wX3NlbmRfcmVzY2hlZHVsZSwKKworCS5zZW5kX2NhbGxfZnVuY19pcGkgPSB4ZW5fc21wX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGksCisJLnNlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkgPSB4ZW5fc21wX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpLAorfTsKKwordm9pZCBfX2luaXQgeGVuX3NtcF9pbml0KHZvaWQpCit7CisJc21wX29wcyA9IHhlbl9zbXBfb3BzOworCXhlbl9maWxsX3Bvc3NpYmxlX21hcCgpOworCXhlbl9pbml0X3NwaW5sb2NrcygpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3N1c3BlbmQuYyBiL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMKaW5kZXggMjUxNjY5YS4uMmEyMzRkYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3N1c3BlbmQuYworKysgYi9hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jCkBAIC0zOCw4ICszOCwxMSBAQAogCQl4ZW5fY3B1X2luaXRpYWxpemVkX21hcCA9IGNwdV9vbmxpbmVfbWFwOwogI2VuZGlmCiAJCXhlbl92Y3B1X3Jlc3RvcmUoKTsKLQkJeGVuX3RpbWVyX3Jlc3VtZSgpOwogCX0KIAogfQogCit2b2lkIHhlbl9hcmNoX3Jlc3VtZSh2b2lkKQoreworCS8qIG5vdGhpbmcgKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tYXNtLlMgYi9hcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni94ZW4veGVuLWFzbS5TCnJlbmFtZSB0byBhcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV82NC5TIGIvYXJjaC94ODYveGVuL3hlbi1hc21fNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDM4Y2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYveGVuL3hlbi1hc21fNjQuUwpAQCAtMCwwICsxLDI3MSBAQAorLyoKKwlBc20gdmVyc2lvbnMgb2YgWGVuIHB2LW9wcywgc3VpdGFibGUgZm9yIGVpdGhlciBkaXJlY3QgdXNlIG9yIGlubGluaW5nLgorCVRoZSBpbmxpbmUgdmVyc2lvbnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBkaXJlY3QtdXNlIHZlcnNpb25zLCB3aXRoIHRoZQorCXByZS0gYW5kIHBvc3QtYW1ibGUgY2hvcHBlZCBvZmYuCisKKwlUaGlzIGNvZGUgaXMgZW5jb2RlZCBmb3Igc2l6ZSByYXRoZXIgdGhhbiBhYnNvbHV0ZSBlZmZpY2llbmN5LAorCXdpdGggYSB2aWV3IHRvIGJlaW5nIGFibGUgdG8gaW5saW5lIGFzIG11Y2ggYXMgcG9zc2libGUuCisKKwlXZSBvbmx5IGJvdGhlciB3aXRoIGRpcmVjdCBmb3JtcyAoaWUsIHZjcHUgaW4gcGRhKSBvZiB0aGUgb3BlcmF0aW9ucworCWhlcmU7IHRoZSBpbmRpcmVjdCBmb3JtcyBhcmUgYmV0dGVyIGhhbmRsZWQgaW4gQywgc2luY2UgdGhleSdyZQorCWdlbmVyYWxseSB0b28gbGFyZ2UgdG8gaW5saW5lIGFueXdheS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisKKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgorCisjZGVmaW5lIFJFTE9DKHgsIHYpCS5nbG9ibCB4IyNfcmVsb2M7IHgjI19yZWxvYz12CisjZGVmaW5lIEVORFBBVENIKHgpCS5nbG9ibCB4IyNfZW5kOyB4IyNfZW5kPS4KKworLyogUHNldWRvLWZsYWcgdXNlZCBmb3IgdmlydHVhbCBOTUksIHdoaWNoIHdlIGRvbid0IGltcGxlbWVudCB5ZXQgKi8KKyNkZWZpbmUgWEVOX0VGTEFHU19OTUkJMHg4MDAwMDAwMAorCisjaWYgMAorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKworLyoKKwlFbmFibGUgZXZlbnRzLiAgVGhpcyBjbGVhcnMgdGhlIGV2ZW50IG1hc2sgYW5kIHRlc3RzIHRoZSBwZW5kaW5nCisJZXZlbnQgc3RhdHVzIHdpdGggb25lIGFuZCBvcGVyYXRpb24uICBJZiB0aGVyZSBhcmUgcGVuZGluZworCWV2ZW50cywgdGhlbiBlbnRlciB0aGUgaHlwZXJ2aXNvciB0byBnZXQgdGhlbSBoYW5kbGVkLgorICovCitFTlRSWSh4ZW5faXJxX2VuYWJsZV9kaXJlY3QpCisJLyogVW5tYXNrIGV2ZW50cyAqLworCW1vdmIgJDAsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8sIFhFTl92Y3B1X2luZm9fbWFzaykKKworCS8qIFByZWVtcHQgaGVyZSBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIHRoYXQgd2lsbCBkZWFsIHdpdGgKKwkgICBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLiAgVGhlIHBlbmRpbmcgY2hlY2sgbWF5IGVuZCB1cCBiZWluZworCSAgIHJ1biBvbiB0aGUgd3JvbmcgQ1BVLCBidXQgdGhhdCBkb2Vzbid0IGh1cnQuICovCisKKwkvKiBUZXN0IGZvciBwZW5kaW5nICovCisJdGVzdGIgJDB4ZmYsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8sIFhFTl92Y3B1X2luZm9fcGVuZGluZykKKwlqeiAxZgorCisyOgljYWxsIGNoZWNrX2V2ZW50cworMToKK0VORFBBVENIKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKKwlyZXQKKwlFTkRQUk9DKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKKwlSRUxPQyh4ZW5faXJxX2VuYWJsZV9kaXJlY3QsIDJiKzEpCisKKy8qCisJRGlzYWJsaW5nIGV2ZW50cyBpcyBzaW1wbHkgYSBtYXR0ZXIgb2YgbWFraW5nIHRoZSBldmVudCBtYXNrCisJbm9uLXplcm8uCisgKi8KK0VOVFJZKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCisJbW92YiAkMSwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbywgWEVOX3ZjcHVfaW5mb19tYXNrKQorRU5EUEFUQ0goeGVuX2lycV9kaXNhYmxlX2RpcmVjdCkKKwlyZXQKKwlFTkRQUk9DKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCisJUkVMT0MoeGVuX2lycV9kaXNhYmxlX2RpcmVjdCwgMCkKKworLyoKKwkoeGVuXylzYXZlX2ZsIGlzIHVzZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGludGVycnVwdCBlbmFibGUgc3RhdHVzLgorCUNhbGxlcnMgZXhwZWN0IHRoZSBzdGF0dXMgdG8gYmUgaW4gWDg2X0VGTEFHU19JRiwgYW5kIG90aGVyIGJpdHMKKwltYXkgYmUgc2V0IGluIHRoZSByZXR1cm4gdmFsdWUuICBXZSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGJ5CisJbWFraW5nIHN1cmUgdGhhdCBYODZfRUZMQUdTX0lGIGhhcyB0aGUgcmlnaHQgdmFsdWUgKGFuZCBvdGhlciBiaXRzCisJaW4gdGhhdCBieXRlIGFyZSAwKSwgYnV0IG90aGVyIGJpdHMgaW4gdGhlIHJldHVybiB2YWx1ZSBhcmUKKwl1bmRlZmluZWQuICBXZSBuZWVkIHRvIHRvZ2dsZSB0aGUgc3RhdGUgb2YgdGhlIGJpdCwgYmVjYXVzZQorCVhlbiBhbmQgeDg2IHVzZSBvcHBvc2l0ZSBzZW5zZXMgKG1hc2sgdnMgZW5hYmxlKS4KKyAqLworRU5UUlkoeGVuX3NhdmVfZmxfZGlyZWN0KQorCXRlc3RiICQweGZmLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvLCBYRU5fdmNwdV9pbmZvX21hc2spCisJc2V0eiAlYWgKKwlhZGRiICVhaCwlYWgKK0VORFBBVENIKHhlbl9zYXZlX2ZsX2RpcmVjdCkKKwlyZXQKKwlFTkRQUk9DKHhlbl9zYXZlX2ZsX2RpcmVjdCkKKwlSRUxPQyh4ZW5fc2F2ZV9mbF9kaXJlY3QsIDApCisKKy8qCisJSW4gcHJpbmNpcGxlIHRoZSBjYWxsZXIgc2hvdWxkIGJlIHBhc3NpbmcgdXMgYSB2YWx1ZSByZXR1cm4KKwlmcm9tIHhlbl9zYXZlX2ZsX2RpcmVjdCwgYnV0IGZvciByb2J1c3RuZXNzIHNha2Ugd2UgdGVzdCBvbmx5CisJdGhlIFg4Nl9FRkxBR1NfSUYgZmxhZyByYXRoZXIgdGhhbiB0aGUgd2hvbGUgYnl0ZS4gQWZ0ZXIKKwlzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgbWFzayBzdGF0ZSwgaXQgY2hlY2tzIGZvciB1bm1hc2tlZAorCXBlbmRpbmcgZXZlbnRzIGFuZCBlbnRlcnMgdGhlIGh5cGVydmlzb3IgdG8gZ2V0IHRoZW0gZGVsaXZlcmVkCisJaWYgc28uCisgKi8KK0VOVFJZKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKKwl0ZXN0YiAkWDg2X0VGTEFHU19JRj4+OCwgJWFoCisJc2V0eiBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvLCBYRU5fdmNwdV9pbmZvX21hc2spCisJLyogUHJlZW1wdCBoZXJlIGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2UgdGhhdCB3aWxsIGRlYWwgd2l0aAorCSAgIGFueSBwZW5kaW5nIGludGVycnVwdHMuICBUaGUgcGVuZGluZyBjaGVjayBtYXkgZW5kIHVwIGJlaW5nCisJICAgcnVuIG9uIHRoZSB3cm9uZyBDUFUsIGJ1dCB0aGF0IGRvZXNuJ3QgaHVydC4gKi8KKworCS8qIGNoZWNrIGZvciB1bm1hc2tlZCBhbmQgcGVuZGluZyAqLworCWNtcHcgJDB4MDAwMSwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbywgWEVOX3ZjcHVfaW5mb19wZW5kaW5nKQorCWp6IDFmCisyOgljYWxsIGNoZWNrX2V2ZW50cworMToKK0VORFBBVENIKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKKwlyZXQKKwlFTkRQUk9DKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKKwlSRUxPQyh4ZW5fcmVzdG9yZV9mbF9kaXJlY3QsIDJiKzEpCisKKworLyoKKwlGb3JjZSBhbiBldmVudCBjaGVjayBieSBtYWtpbmcgYSBoeXBlcmNhbGwsCisJYnV0IHByZXNlcnZlIHJlZ3MgYmVmb3JlIG1ha2luZyB0aGUgY2FsbC4KKyAqLworY2hlY2tfZXZlbnRzOgorCXB1c2ggJXJheAorCXB1c2ggJXJjeAorCXB1c2ggJXJkeAorCXB1c2ggJXJzaQorCXB1c2ggJXJkaQorCXB1c2ggJXI4CisJcHVzaCAlcjkKKwlwdXNoICVyMTAKKwlwdXNoICVyMTEKKwljYWxsIGZvcmNlX2V2dGNobl9jYWxsYmFjaworCXBvcCAlcjExCisJcG9wICVyMTAKKwlwb3AgJXI5CisJcG9wICVyOAorCXBvcCAlcmRpCisJcG9wICVyc2kKKwlwb3AgJXJkeAorCXBvcCAlcmN4CisJcG9wICVyYXgKKwlyZXQKKyNlbmRpZgorCitFTlRSWSh4ZW5fYWRqdXN0X2V4Y2VwdGlvbl9mcmFtZSkKKwltb3YgOCswKCVyc3ApLCVyY3gKKwltb3YgOCs4KCVyc3ApLCVyMTEKKwlyZXQgJDE2CisKK2h5cGVyY2FsbF9pcmV0ID0gaHlwZXJjYWxsX3BhZ2UgKyBfX0hZUEVSVklTT1JfaXJldCAqIDMyCisvKgorCVhlbjY0IGlyZXQgZnJhbWU6CisKKwlzcworCXJzcAorCXJmbGFncworCWNzCisJcmlwCQk8LS0gc3RhbmRhcmQgaXJldCBmcmFtZQorCisJZmxhZ3MKKworCXJjeAkJfQorCXIxMQkJfTwtLSBwdXNoZWQgYnkgaHlwZXJjYWxsIHBhZ2UKK3JzcCAtPglyYXgJCX0KKyAqLworRU5UUlkoeGVuX2lyZXQpCisJcHVzaHEgJDAKKzE6CWptcCBoeXBlcmNhbGxfaXJldAorRU5EUEFUQ0goeGVuX2lyZXQpCitSRUxPQyh4ZW5faXJldCwgMWIrMSkKKworLyoKKwlzeXNleGl0IGlzIG5vdCB1c2VkIGZvciA2NC1iaXQgcHJvY2Vzc2VzLCBzbyBpdCdzCisJb25seSBldmVyIHVzZWQgdG8gcmV0dXJuIHRvIDMyLWJpdCBjb21wYXQgdXNlcnNwYWNlLgorICovCitFTlRSWSh4ZW5fc3lzZXhpdCkKKwlwdXNocSAkX19VU0VSMzJfRFMKKwlwdXNocSAlcmN4CisJcHVzaHEgJFg4Nl9FRkxBR1NfSUYKKwlwdXNocSAkX19VU0VSMzJfQ1MKKwlwdXNocSAlcmR4CisKKwlwdXNocSAkVkdDRl9pbl9zeXNjYWxsCisxOglqbXAgaHlwZXJjYWxsX2lyZXQKK0VORFBBVENIKHhlbl9zeXNleGl0KQorUkVMT0MoeGVuX3N5c2V4aXQsIDFiKzEpCisKK0VOVFJZKHhlbl9zeXNyZXQ2NCkKKwkvKiBXZSdyZSBhbHJlYWR5IG9uIHRoZSB1c2VybW9kZSBzdGFjayBhdCB0aGlzIHBvaW50LCBidXQgc3RpbGwKKwkgICB3aXRoIHRoZSBrZXJuZWwgZ3MsIHNvIHdlIGNhbiBlYXNpbHkgc3dpdGNoIGJhY2sgKi8KKwltb3ZxICVyc3AsICVnczpwZGFfb2xkcnNwCisJbW92cSAlZ3M6cGRhX2tlcm5lbHN0YWNrLCVyc3AKKworCXB1c2hxICRfX1VTRVJfRFMKKwlwdXNocSAlZ3M6cGRhX29sZHJzcAorCXB1c2hxICVyMTEKKwlwdXNocSAkX19VU0VSX0NTCisJcHVzaHEgJXJjeAorCisJcHVzaHEgJFZHQ0ZfaW5fc3lzY2FsbAorMToJam1wIGh5cGVyY2FsbF9pcmV0CitFTkRQQVRDSCh4ZW5fc3lzcmV0NjQpCitSRUxPQyh4ZW5fc3lzcmV0NjQsIDFiKzEpCisKK0VOVFJZKHhlbl9zeXNyZXQzMikKKwkvKiBXZSdyZSBhbHJlYWR5IG9uIHRoZSB1c2VybW9kZSBzdGFjayBhdCB0aGlzIHBvaW50LCBidXQgc3RpbGwKKwkgICB3aXRoIHRoZSBrZXJuZWwgZ3MsIHNvIHdlIGNhbiBlYXNpbHkgc3dpdGNoIGJhY2sgKi8KKwltb3ZxICVyc3AsICVnczpwZGFfb2xkcnNwCisJbW92cSAlZ3M6cGRhX2tlcm5lbHN0YWNrLCAlcnNwCisKKwlwdXNocSAkX19VU0VSMzJfRFMKKwlwdXNocSAlZ3M6cGRhX29sZHJzcAorCXB1c2hxICVyMTEKKwlwdXNocSAkX19VU0VSMzJfQ1MKKwlwdXNocSAlcmN4CisKKwlwdXNocSAkVkdDRl9pbl9zeXNjYWxsCisxOglqbXAgaHlwZXJjYWxsX2lyZXQKK0VORFBBVENIKHhlbl9zeXNyZXQzMikKK1JFTE9DKHhlbl9zeXNyZXQzMiwgMWIrMSkKKworLyoKKwlYZW4gaGFuZGxlcyBzeXNjYWxsIGNhbGxiYWNrcyBtdWNoIGxpa2Ugb3JkaW5hcnkgZXhjZXB0aW9ucywKKwl3aGljaCBtZWFucyB3ZSBoYXZlOgorCSAtIGtlcm5lbCBncworCSAtIGtlcm5lbCByc3AKKwkgLSBhbiBpcmV0LWxpa2Ugc3RhY2sgZnJhbWUgb24gdGhlIHN0YWNrIChpbmNsdWRpbmcgcmN4IGFuZCByMTEpOgorCQlzcworCQlyc3AKKwkJcmZsYWdzCisJCWNzCisJCXJpcAorCQlyMTEKKwlyc3AtPglyY3gKKworCUluIGFsbCB0aGUgZW50cnlwb2ludHMsIHdlIHVuZG8gYWxsIHRoYXQgdG8gbWFrZSBpdCBsb29rCisJbGlrZSBhIENQVS1nZW5lcmF0ZWQgc3lzY2FsbC9zeXNlbnRlciBhbmQganVtcCB0byB0aGUgbm9ybWFsCisJZW50cnlwb2ludC4KKyAqLworCisubWFjcm8gdW5kb194ZW5fc3lzY2FsbAorCW1vdiAwKjgoJXJzcCksJXJjeAorCW1vdiAxKjgoJXJzcCksJXIxMQorCW1vdiA1KjgoJXJzcCksJXJzcAorLmVuZG0KKworLyogTm9ybWFsIDY0LWJpdCBzeXN0ZW0gY2FsbCB0YXJnZXQgKi8KK0VOVFJZKHhlbl9zeXNjYWxsX3RhcmdldCkKKwl1bmRvX3hlbl9zeXNjYWxsCisJam1wIHN5c3RlbV9jYWxsX2FmdGVyX3N3YXBncworRU5EUFJPQyh4ZW5fc3lzY2FsbF90YXJnZXQpCisKKyNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KKworLyogMzItYml0IGNvbXBhdCBzeXNjYWxsIHRhcmdldCAqLworRU5UUlkoeGVuX3N5c2NhbGwzMl90YXJnZXQpCisJdW5kb194ZW5fc3lzY2FsbAorCWptcCBpYTMyX2NzdGFyX3RhcmdldAorRU5EUFJPQyh4ZW5fc3lzY2FsbDMyX3RhcmdldCkKKworLyogMzItYml0IGNvbXBhdCBzeXNlbnRlciB0YXJnZXQgKi8KK0VOVFJZKHhlbl9zeXNlbnRlcl90YXJnZXQpCisJdW5kb194ZW5fc3lzY2FsbAorCWptcCBpYTMyX3N5c2VudGVyX3RhcmdldAorRU5EUFJPQyh4ZW5fc3lzZW50ZXJfdGFyZ2V0KQorCisjZWxzZSAvKiAhQ09ORklHX0lBMzJfRU1VTEFUSU9OICovCisKK0VOVFJZKHhlbl9zeXNjYWxsMzJfdGFyZ2V0KQorRU5UUlkoeGVuX3N5c2VudGVyX3RhcmdldCkKKwlsZWEgMTYoJXJzcCksICVyc3AJLyogc3RyaXAgJXJjeCwlcjExICovCisJbW92ICQtRU5PU1lTLCAlcmF4CisJcHVzaHEgJFZHQ0ZfaW5fc3lzY2FsbAorCWptcCBoeXBlcmNhbGxfaXJldAorRU5EUFJPQyh4ZW5fc3lzY2FsbDMyX3RhcmdldCkKK0VORFBST0MoeGVuX3N5c2VudGVyX3RhcmdldCkKKworI2VuZGlmCS8qIENPTkZJR19JQTMyX0VNVUxBVElPTiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3hlbi1oZWFkLlMgYi9hcmNoL3g4Ni94ZW4veGVuLWhlYWQuUwppbmRleCA3YzBjZjYzLi42M2Q0OWE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLWhlYWQuUworKysgYi9hcmNoL3g4Ni94ZW4veGVuLWhlYWQuUwpAQCAtNSwxNSArNSwyNCBAQAogCiAjaW5jbHVkZSA8bGludXgvZWxmbm90ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwogI2luY2x1ZGUgPGFzbS9ib290Lmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2VsZm5vdGUuaD4KICNpbmNsdWRlIDxhc20veGVuL2ludGVyZmFjZS5oPgogCiAJX19JTklUCiBFTlRSWShzdGFydHVwX3hlbikKLQltb3ZsICVlc2kseGVuX3N0YXJ0X2luZm8KIAljbGQKLQltb3ZsICQoaW5pdF90aHJlYWRfdW5pb24rVEhSRUFEX1NJWkUpLCVlc3AKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJbW92ICVlc2kseGVuX3N0YXJ0X2luZm8KKwltb3YgJGluaXRfdGhyZWFkX3VuaW9uK1RIUkVBRF9TSVpFLCVlc3AKKyNlbHNlCisJbW92ICVyc2kseGVuX3N0YXJ0X2luZm8KKwltb3YgJGluaXRfdGhyZWFkX3VuaW9uK1RIUkVBRF9TSVpFLCVyc3AKKyNlbmRpZgogCWptcCB4ZW5fc3RhcnRfa2VybmVsCiAKIAlfX0ZJTklUCkBAIC0yMSwyMSArMzAsMjYgQEAKIC5wdXNoc2VjdGlvbiAudGV4dAogCS5hbGlnbiBQQUdFX1NJWkVfYXNtCiBFTlRSWShoeXBlcmNhbGxfcGFnZSkKLQkuc2tpcCAweDEwMDAKKwkuc2tpcCBQQUdFX1NJWkVfYXNtCiAucG9wc2VjdGlvbgogCiAJRUxGTk9URShYZW4sIFhFTl9FTEZOT1RFX0dVRVNUX09TLCAgICAgICAuYXNjaXogImxpbnV4IikKIAlFTEZOT1RFKFhlbiwgWEVOX0VMRk5PVEVfR1VFU1RfVkVSU0lPTiwgIC5hc2NpeiAiMi42IikKIAlFTEZOT1RFKFhlbiwgWEVOX0VMRk5PVEVfWEVOX1ZFUlNJT04sICAgIC5hc2NpeiAieGVuLTMuMCIpCi0JRUxGTk9URShYZW4sIFhFTl9FTEZOT1RFX1ZJUlRfQkFTRSwgICAgICAubG9uZyAgX19QQUdFX09GRlNFVCkKLQlFTEZOT1RFKFhlbiwgWEVOX0VMRk5PVEVfRU5UUlksICAgICAgICAgIC5sb25nICBzdGFydHVwX3hlbikKLQlFTEZOT1RFKFhlbiwgWEVOX0VMRk5PVEVfSFlQRVJDQUxMX1BBR0UsIC5sb25nICBoeXBlcmNhbGxfcGFnZSkKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJRUxGTk9URShYZW4sIFhFTl9FTEZOT1RFX1ZJUlRfQkFTRSwgICAgICBfQVNNX1BUUiBfX1BBR0VfT0ZGU0VUKQorI2Vsc2UKKwlFTEZOT1RFKFhlbiwgWEVOX0VMRk5PVEVfVklSVF9CQVNFLCAgICAgIF9BU01fUFRSIF9fU1RBUlRfS0VSTkVMX21hcCkKKyNlbmRpZgorCUVMRk5PVEUoWGVuLCBYRU5fRUxGTk9URV9FTlRSWSwgICAgICAgICAgX0FTTV9QVFIgc3RhcnR1cF94ZW4pCisJRUxGTk9URShYZW4sIFhFTl9FTEZOT1RFX0hZUEVSQ0FMTF9QQUdFLCBfQVNNX1BUUiBoeXBlcmNhbGxfcGFnZSkKIAlFTEZOT1RFKFhlbiwgWEVOX0VMRk5PVEVfRkVBVFVSRVMsICAgICAgIC5hc2NpeiAiIXdyaXRhYmxlX3BhZ2VfdGFibGVzfHBhZV9wZ2Rpcl9hYm92ZV80Z2IiKQogCUVMRk5PVEUoWGVuLCBYRU5fRUxGTk9URV9QQUVfTU9ERSwgICAgICAgLmFzY2l6ICJ5ZXMiKQogCUVMRk5PVEUoWGVuLCBYRU5fRUxGTk9URV9MT0FERVIsICAgICAgICAgLmFzY2l6ICJnZW5lcmljIikKIAlFTEZOT1RFKFhlbiwgWEVOX0VMRk5PVEVfTDFfTUZOX1ZBTElELAogCQkucXVhZCBfUEFHRV9QUkVTRU5UOyAucXVhZCBfUEFHRV9QUkVTRU5UKQogCUVMRk5PVEUoWGVuLCBYRU5fRUxGTk9URV9TVVNQRU5EX0NBTkNFTCwgLmxvbmcgMSkKLQlFTEZOT1RFKFhlbiwgWEVOX0VMRk5PVEVfSFZfU1RBUlRfTE9XLCAgIC5sb25nIF9fSFlQRVJWSVNPUl9WSVJUX1NUQVJUKQorCUVMRk5PVEUoWGVuLCBYRU5fRUxGTk9URV9IVl9TVEFSVF9MT1csICAgX0FTTV9QVFIgX19IWVBFUlZJU09SX1ZJUlRfU1RBUlQpCisJRUxGTk9URShYZW4sIFhFTl9FTEZOT1RFX1BBRERSX09GRlNFVCwgICBfQVNNX1BUUiAwKQogCiAjZW5kaWYgLypDT05GSUdfWEVOICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaAppbmRleCA2ZjRiMTA0Li5kZDNjMjMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKQEAgLTI2LDYgKzI2LDcgQEAKIHZvaWQgX19pbml0IHhlbl9hcmNoX3NldHVwKHZvaWQpOwogdm9pZCBfX2luaXQgeGVuX2luaXRfSVJRKHZvaWQpOwogdm9pZCB4ZW5fZW5hYmxlX3N5c2VudGVyKHZvaWQpOwordm9pZCB4ZW5fZW5hYmxlX3N5c2NhbGwodm9pZCk7CiB2b2lkIHhlbl92Y3B1X3Jlc3RvcmUodm9pZCk7CiAKIHZvaWQgX19pbml0IHhlbl9idWlsZF9keW5hbWljX3BoeXNfdG9fbWFjaGluZSh2b2lkKTsKQEAgLTM3LDcgKzM4LDYgQEAKIHVuc2lnbmVkIGxvbmcgeGVuX2dldF93YWxsY2xvY2sodm9pZCk7CiBpbnQgeGVuX3NldF93YWxsY2xvY2sodW5zaWduZWQgbG9uZyB0aW1lKTsKIHVuc2lnbmVkIGxvbmcgbG9uZyB4ZW5fc2NoZWRfY2xvY2sodm9pZCk7Ci12b2lkIHhlbl90aW1lcl9yZXN1bWUodm9pZCk7CiAKIGlycXJldHVybl90IHhlbl9kZWJ1Z19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIApAQCAtNDUsMjAgKzQ1LDE1IEBACiAKIHZvaWQgeGVuX21hcmtfaW5pdF9tbV9waW5uZWQodm9pZCk7CiAKLXZvaWQgX19pbml0IHhlbl9maWxsX3Bvc3NpYmxlX21hcCh2b2lkKTsKLQogdm9pZCBfX2luaXQgeGVuX3NldHVwX3ZjcHVfaW5mb19wbGFjZW1lbnQodm9pZCk7Ci12b2lkIHhlbl9zbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKTsKLXZvaWQgeGVuX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKLWludCB4ZW5fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpOwotdm9pZCB4ZW5fc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOwogCi12b2lkIHhlbl9zbXBfc2VuZF9zdG9wKHZvaWQpOwotdm9pZCB4ZW5fc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KTsKLXZvaWQgeGVuX3NtcF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKTsKLXZvaWQgeGVuX3NtcF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KTsKKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIHhlbl9zbXBfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIGNwdW1hc2tfdCB4ZW5fY3B1X2luaXRpYWxpemVkX21hcDsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgeGVuX3NtcF9pbml0KHZvaWQpIHt9CisjZW5kaWYKIAogCiAvKiBEZWNsYXJlIGFuIGFzbSBmdW5jdGlvbiwgYWxvbmcgd2l0aCBzeW1ib2xzIG5lZWRlZCB0byBtYWtlIGl0CkBAIC03Myw3ICs2OCwxMSBAQAogREVDTF9BU00odW5zaWduZWQgbG9uZywgeGVuX3NhdmVfZmxfZGlyZWN0LCB2b2lkKTsKIERFQ0xfQVNNKHZvaWQsIHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCwgdW5zaWduZWQgbG9uZyk7CiAKKy8qIFRoZXNlIGFyZSBub3QgZnVuY3Rpb25zLCBhbmQgY2Fubm90IGJlIGNhbGxlZCBub3JtYWxseSAqLwogdm9pZCB4ZW5faXJldCh2b2lkKTsKIHZvaWQgeGVuX3N5c2V4aXQodm9pZCk7Cit2b2lkIHhlbl9zeXNyZXQzMih2b2lkKTsKK3ZvaWQgeGVuX3N5c3JldDY0KHZvaWQpOwordm9pZCB4ZW5fYWRqdXN0X2V4Y2VwdGlvbl9mcmFtZSh2b2lkKTsKIAogI2VuZGlmIC8qIFhFTl9PUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvS2NvbmZpZyBiL2FyY2gveHRlbnNhL0tjb25maWcKaW5kZXggOWZjODU1MS4uMDJlNDE3ZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvS2NvbmZpZworKysgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCkBAIC0xOTQsOCArMTk0LDggQEAKIAlwbHVnZ2VkIGludG8gc2xvdHMgZm91bmQgb24gYWxsIG1vZGVybiBsYXB0b3AgY29tcHV0ZXJzLiAgQW5vdGhlcgogCWV4YW1wbGUsIHVzZWQgb24gbW9kZXJuIGRlc2t0b3BzIGFzIHdlbGwgYXMgbGFwdG9wcywgaXMgVVNCLgogCi0JRW5hYmxlIEhPVFBMVUcgYW5kIEtNT0QsIGFuZCBidWlsZCBhIG1vZHVsYXIga2VybmVsLiAgR2V0IGFnZW50Ci0Jc29mdHdhcmUgKGF0IDxodHRwOi8vbGludXgtaG90cGx1Zy5zb3VyY2Vmb3JnZS5uZXQvPikgYW5kIGluc3RhbGwgaXQuCisJRW5hYmxlIEhPVFBMVUcgYW5kIGJ1aWxkIGEgbW9kdWxhciBrZXJuZWwuICBHZXQgYWdlbnQgc29mdHdhcmUKKwkoZnJvbSA8aHR0cDovL2xpbnV4LWhvdHBsdWcuc291cmNlZm9yZ2UubmV0Lz4pIGFuZCBpbnN0YWxsIGl0LgogCVRoZW4geW91ciBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgb3V0IHRvIGEgdXNlciBtb2RlICJwb2xpY3kKIAlhZ2VudCIgKC9zYmluL2hvdHBsdWcpIHRvIGxvYWQgbW9kdWxlcyBhbmQgc2V0IHVwIHNvZnR3YXJlIG5lZWRlZAogCXRvIHVzZSBkZXZpY2VzIGFzIHlvdSBob3RwbHVnIHRoZW0uCmRpZmYgLS1naXQgYS9ibG9jay9ic2cuYyBiL2Jsb2NrL2JzZy5jCmluZGV4IDVmYjliMGIuLjVhNjhiMDkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JzZy5jCisrKyBiL2Jsb2NrL2JzZy5jCkBAIC0xMDQ0LDcgKzEwNDQsOCBAQAogCWJjZC0+cmVsZWFzZSA9IHJlbGVhc2U7CiAJa3JlZl9pbml0KCZiY2QtPnJlZik7CiAJZGV2ID0gTUtERVYoYnNnX21ham9yLCBiY2QtPm1pbm9yKTsKLQljbGFzc19kZXYgPSBkZXZpY2VfY3JlYXRlKGJzZ19jbGFzcywgcGFyZW50LCBkZXYsICIlcyIsIGRldm5hbWUpOworCWNsYXNzX2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShic2dfY2xhc3MsIHBhcmVudCwgZGV2LCBOVUxMLAorCQkJCQkgICIlcyIsIGRldm5hbWUpOwogCWlmIChJU19FUlIoY2xhc3NfZGV2KSkgewogCQlyZXQgPSBQVFJfRVJSKGNsYXNzX2Rldik7CiAJCWdvdG8gcHV0X2RldjsKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDkwNzRmMzguLmMxM2NjNzcgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtMTgzLDYgKzE4Myw3IEBACiB2b2lkIGFkZF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7CisJaW50IHJldHZhbDsKIAogCWRpc2stPmZsYWdzIHw9IEdFTkhEX0ZMX1VQOwogCWJsa19yZWdpc3Rlcl9yZWdpb24oTUtERVYoZGlzay0+bWFqb3IsIGRpc2stPmZpcnN0X21pbm9yKSwKQEAgLTE5Myw3ICsxOTQsOCBAQAogCiAJYmRpID0gJmRpc2stPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvOwogCWJkaV9yZWdpc3Rlcl9kZXYoYmRpLCBNS0RFVihkaXNrLT5tYWpvciwgZGlzay0+Zmlyc3RfbWlub3IpKTsKLQlzeXNmc19jcmVhdGVfbGluaygmZGlzay0+ZGV2LmtvYmosICZiZGktPmRldi0+a29iaiwgImJkaSIpOworCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkaXNrLT5kZXYua29iaiwgJmJkaS0+ZGV2LT5rb2JqLCAiYmRpIik7CisJV0FSTl9PTihyZXR2YWwpOwogfQogCiBFWFBPUlRfU1lNQk9MKGFkZF9kaXNrKTsKQEAgLTIyNSw4OSArMjI3LDExMSBAQAogfQogCiAvKgorICogcHJpbnQgYSBwYXJ0aXRpb25zIC0gaW50ZW5kZWQgZm9yIHBsYWNlcyB3aGVyZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGNhbid0IGJlCisgKiBtb3VudGVkIGFuZCB0aHVzIHRvIGdpdmUgdGhlIHZpY3RpbSBzb21lIGlkZWEgb2Ygd2hhdCB3ZW50IHdyb25nCisgKi8KK3N0YXRpYyBpbnQgcHJpbnRrX3BhcnRpdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGdlbmRpc2sgKnNncDsKKwljaGFyIGJ1ZltCREVWTkFNRV9TSVpFXTsKKwlpbnQgbjsKKworCWlmIChkZXYtPnR5cGUgIT0gJmRpc2tfdHlwZSkKKwkJZ290byBleGl0OworCisJc2dwID0gZGV2X3RvX2Rpc2soZGV2KTsKKwkvKgorCSAqIERvbid0IHNob3cgZW1wdHkgZGV2aWNlcyBvciB0aGluZ3MgdGhhdCBoYXZlIGJlZW4gc3VycHJlc3NlZAorCSAqLworCWlmIChnZXRfY2FwYWNpdHkoc2dwKSA9PSAwIHx8CisJICAgIChzZ3AtPmZsYWdzICYgR0VOSERfRkxfU1VQUFJFU1NfUEFSVElUSU9OX0lORk8pKQorCQlnb3RvIGV4aXQ7CisKKwkvKgorCSAqIE5vdGUsIHVubGlrZSAvcHJvYy9wYXJ0aXRpb25zLCBJIGFtIHNob3dpbmcgdGhlIG51bWJlcnMgaW4KKwkgKiBoZXggLSB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIHJvb3Q9IG9wdGlvbiB0YWtlcy4KKwkgKi8KKwlwcmludGsoIiUwMnglMDJ4ICUxMGxsdSAlcyIsCisJCXNncC0+bWFqb3IsIHNncC0+Zmlyc3RfbWlub3IsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpZ2V0X2NhcGFjaXR5KHNncCkgPj4gMSwKKwkJZGlza19uYW1lKHNncCwgMCwgYnVmKSk7CisJaWYgKHNncC0+ZHJpdmVyZnNfZGV2ICE9IE5VTEwgJiYKKwkgICAgc2dwLT5kcml2ZXJmc19kZXYtPmRyaXZlciAhPSBOVUxMKQorCQlwcmludGsoIiBkcml2ZXI6ICVzXG4iLAorCQkJc2dwLT5kcml2ZXJmc19kZXYtPmRyaXZlci0+bmFtZSk7CisJZWxzZQorCQlwcmludGsoIiAoZHJpdmVyPylcbiIpOworCisJLyogbm93IHNob3cgdGhlIHBhcnRpdGlvbnMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgc2dwLT5taW5vcnMgLSAxOyArK24pIHsKKwkJaWYgKHNncC0+cGFydFtuXSA9PSBOVUxMKQorCQkJZ290byBleGl0OworCQlpZiAoc2dwLT5wYXJ0W25dLT5ucl9zZWN0cyA9PSAwKQorCQkJZ290byBleGl0OworCQlwcmludGsoIiAgJTAyeCUwMnggJTEwbGx1ICVzXG4iLAorCQkJc2dwLT5tYWpvciwgbiArIDEgKyBzZ3AtPmZpcnN0X21pbm9yLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzZ3AtPnBhcnRbbl0tPm5yX3NlY3RzID4+IDEsCisJCQlkaXNrX25hbWUoc2dwLCBuICsgMSwgYnVmKSk7CisJfQorZXhpdDoKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIHByaW50IGEgZnVsbCBsaXN0IG9mIGFsbCBwYXJ0aXRpb25zIC0gaW50ZW5kZWQgZm9yIHBsYWNlcyB3aGVyZSB0aGUgcm9vdAogICogZmlsZXN5c3RlbSBjYW4ndCBiZSBtb3VudGVkIGFuZCB0aHVzIHRvIGdpdmUgdGhlIHZpY3RpbSBzb21lIGlkZWEgb2Ygd2hhdAogICogd2VudCB3cm9uZwogICovCiB2b2lkIF9faW5pdCBwcmludGtfYWxsX3BhcnRpdGlvbnModm9pZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGdlbmRpc2sgKnNncDsKLQljaGFyIGJ1ZltCREVWTkFNRV9TSVpFXTsKLQlpbnQgbjsKLQogCW11dGV4X2xvY2soJmJsb2NrX2NsYXNzX2xvY2spOwotCS8qIEZvciBlYWNoIGJsb2NrIGRldmljZS4uLiAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYmxvY2tfY2xhc3MuZGV2aWNlcywgbm9kZSkgewotCQlpZiAoZGV2LT50eXBlICE9ICZkaXNrX3R5cGUpCi0JCQljb250aW51ZTsKLQkJc2dwID0gZGV2X3RvX2Rpc2soZGV2KTsKLQkJLyoKLQkJICogRG9uJ3Qgc2hvdyBlbXB0eSBkZXZpY2VzIG9yIHRoaW5ncyB0aGF0IGhhdmUgYmVlbiBzdXJwcmVzc2VkCi0JCSAqLwotCQlpZiAoZ2V0X2NhcGFjaXR5KHNncCkgPT0gMCB8fAotCQkgICAgKHNncC0+ZmxhZ3MgJiBHRU5IRF9GTF9TVVBQUkVTU19QQVJUSVRJT05fSU5GTykpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBOb3RlLCB1bmxpa2UgL3Byb2MvcGFydGl0aW9ucywgSSBhbSBzaG93aW5nIHRoZSBudW1iZXJzIGluCi0JCSAqIGhleCAtIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgcm9vdD0gb3B0aW9uIHRha2VzLgotCQkgKi8KLQkJcHJpbnRrKCIlMDJ4JTAyeCAlMTBsbHUgJXMiLAotCQkJc2dwLT5tYWpvciwgc2dwLT5maXJzdF9taW5vciwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZ2V0X2NhcGFjaXR5KHNncCkgPj4gMSwKLQkJCWRpc2tfbmFtZShzZ3AsIDAsIGJ1ZikpOwotCQlpZiAoc2dwLT5kcml2ZXJmc19kZXYgIT0gTlVMTCAmJgotCQkgICAgc2dwLT5kcml2ZXJmc19kZXYtPmRyaXZlciAhPSBOVUxMKQotCQkJcHJpbnRrKCIgZHJpdmVyOiAlc1xuIiwKLQkJCQlzZ3AtPmRyaXZlcmZzX2Rldi0+ZHJpdmVyLT5uYW1lKTsKLQkJZWxzZQotCQkJcHJpbnRrKCIgKGRyaXZlcj8pXG4iKTsKLQotCQkvKiBub3cgc2hvdyB0aGUgcGFydGl0aW9ucyAqLwotCQlmb3IgKG4gPSAwOyBuIDwgc2dwLT5taW5vcnMgLSAxOyArK24pIHsKLQkJCWlmIChzZ3AtPnBhcnRbbl0gPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQkJCWlmIChzZ3AtPnBhcnRbbl0tPm5yX3NlY3RzID09IDApCi0JCQkJY29udGludWU7Ci0JCQlwcmludGsoIiAgJTAyeCUwMnggJTEwbGx1ICVzXG4iLAotCQkJCXNncC0+bWFqb3IsIG4gKyAxICsgc2dwLT5maXJzdF9taW5vciwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXNncC0+cGFydFtuXS0+bnJfc2VjdHMgPj4gMSwKLQkJCQlkaXNrX25hbWUoc2dwLCBuICsgMSwgYnVmKSk7Ci0JCX0KLQl9Ci0KKwljbGFzc19mb3JfZWFjaF9kZXZpY2UoJmJsb2NrX2NsYXNzLCBOVUxMLCBOVUxMLCBwcmludGtfcGFydGl0aW9uKTsKIAltdXRleF91bmxvY2soJmJsb2NrX2NsYXNzX2xvY2spOwogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIC8qIGl0ZXJhdG9yICovCitzdGF0aWMgaW50IGZpbmRfc3RhcnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWxvZmZfdCBrID0gKihsb2ZmX3QgKilkYXRhOworCisJaWYgKGRldi0+dHlwZSAhPSAmZGlza190eXBlKQorCQlyZXR1cm4gMDsKKwlpZiAoIWstLSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkICpwYXJ0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcGFydCwgbG9mZl90ICpwb3MpCiB7Ci0JbG9mZl90IGsgPSAqcG9zOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlsb2ZmX3QgbiA9ICpwb3M7CisKKwlpZiAoIW4pCisJCXNlcV9wdXRzKHBhcnQsICJtYWpvciBtaW5vciAgI2Jsb2NrcyAgbmFtZVxuXG4iKTsKIAogCW11dGV4X2xvY2soJmJsb2NrX2NsYXNzX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYmxvY2tfY2xhc3MuZGV2aWNlcywgbm9kZSkgewotCQlpZiAoZGV2LT50eXBlICE9ICZkaXNrX3R5cGUpCi0JCQljb250aW51ZTsKLQkJaWYgKCFrLS0pCi0JCQlyZXR1cm4gZGV2X3RvX2Rpc2soZGV2KTsKLQl9CisJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJmJsb2NrX2NsYXNzLCBOVUxMLCAodm9pZCAqKXBvcywgZmluZF9zdGFydCk7CisJaWYgKGRldikKKwkJcmV0dXJuIGRldl90b19kaXNrKGRldik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgZmluZF9uZXh0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoZGV2LT50eXBlID09ICZkaXNrX3R5cGUpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCAqcGFydF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcGFydCwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGdlbmRpc2sgKmdwID0gdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJKysqcG9zOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmZ3AtPmRldi5ub2RlLCBub2RlKSB7Ci0JCWlmICgmZGV2LT5ub2RlID09ICZibG9ja19jbGFzcy5kZXZpY2VzKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWlmIChkZXYtPnR5cGUgPT0gJmRpc2tfdHlwZSkKLQkJCXJldHVybiBkZXZfdG9fZGlzayhkZXYpOwotCX0KKwlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmYmxvY2tfY2xhc3MsICZncC0+ZGV2LCBOVUxMLCBmaW5kX25leHQpOworCWlmIChkZXYpCisJCXJldHVybiBkZXZfdG9fZGlzayhkZXYpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0zMjIsOSArMzQ2LDYgQEAKIAlpbnQgbjsKIAljaGFyIGJ1ZltCREVWTkFNRV9TSVpFXTsKIAotCWlmICgmc2dwLT5kZXYubm9kZSA9PSBibG9ja19jbGFzcy5kZXZpY2VzLm5leHQpCi0JCXNlcV9wdXRzKHBhcnQsICJtYWpvciBtaW5vciAgI2Jsb2NrcyAgbmFtZVxuXG4iKTsKLQogCS8qIERvbid0IHNob3cgbm9uLXBhcnRpdGlvbmFibGUgcmVtb3ZlYWJsZSBkZXZpY2VzIG9yIGVtcHR5IGRldmljZXMgKi8KIAlpZiAoIWdldF9jYXBhY2l0eShzZ3ApIHx8CiAJCQkoc2dwLT5taW5vcnMgPT0gMSAmJiAoc2dwLT5mbGFncyAmIEdFTkhEX0ZMX1JFTU9WQUJMRSkpKQpAQCAtMzcwLDcgKzM5MSwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnZW5oZF9kZXZpY2VfaW5pdCh2b2lkKQogewotCWludCBlcnJvciA9IGNsYXNzX3JlZ2lzdGVyKCZibG9ja19jbGFzcyk7CisJaW50IGVycm9yOworCisJYmxvY2tfY2xhc3MuZGV2X2tvYmogPSBzeXNmc19kZXZfYmxvY2tfa29iajsKKwllcnJvciA9IGNsYXNzX3JlZ2lzdGVyKCZibG9ja19jbGFzcyk7CiAJaWYgKHVubGlrZWx5KGVycm9yKSkKIAkJcmV0dXJuIGVycm9yOwogCWJkZXZfbWFwID0ga29ial9tYXBfaW5pdChiYXNlX3Byb2JlLCAmYmxvY2tfY2xhc3NfbG9jayk7CkBAIC01MzIsNiArNTU2LDcgQEAKIAkucmVsZWFzZQk9IGRpc2tfcmVsZWFzZSwKIH07CiAKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogLyoKICAqIGFnZ3JlZ2F0ZSBkaXNrIHN0YXQgY29sbGVjdG9yLiAgVXNlcyB0aGUgc2FtZSBzdGF0cyB0aGF0IHRoZSBzeXNmcwogICogZW50cmllcyBkbywgYWJvdmUsIGJ1dCBtYWtlcyB0aGVtIGF2YWlsYWJsZSB0aHJvdWdoIG9uZSBzZXFfZmlsZS4KQEAgLTU0MiwxNiArNTY3LDEyIEBACiAKIHN0YXRpYyB2b2lkICpkaXNrc3RhdHNfc3RhcnQoc3RydWN0IHNlcV9maWxlICpwYXJ0LCBsb2ZmX3QgKnBvcykKIHsKLQlsb2ZmX3QgayA9ICpwb3M7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCiAJbXV0ZXhfbG9jaygmYmxvY2tfY2xhc3NfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZibG9ja19jbGFzcy5kZXZpY2VzLCBub2RlKSB7Ci0JCWlmIChkZXYtPnR5cGUgIT0gJmRpc2tfdHlwZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIWstLSkKLQkJCXJldHVybiBkZXZfdG9fZGlzayhkZXYpOwotCX0KKwlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmYmxvY2tfY2xhc3MsIE5VTEwsICh2b2lkICopcG9zLCBmaW5kX3N0YXJ0KTsKKwlpZiAoZGV2KQorCQlyZXR1cm4gZGV2X3RvX2Rpc2soZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtNTYxLDEyICs1ODIsOSBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCSsrKnBvczsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmdwLT5kZXYubm9kZSwgbm9kZSkgewotCQlpZiAoJmRldi0+bm9kZSA9PSAmYmxvY2tfY2xhc3MuZGV2aWNlcykKLQkJCXJldHVybiBOVUxMOwotCQlpZiAoZGV2LT50eXBlID09ICZkaXNrX3R5cGUpCi0JCQlyZXR1cm4gZGV2X3RvX2Rpc2soZGV2KTsKLQl9CisJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJmJsb2NrX2NsYXNzLCAmZ3AtPmRldiwgTlVMTCwgZmluZF9uZXh0KTsKKwlpZiAoZGV2KQorCQlyZXR1cm4gZGV2X3RvX2Rpc2soZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtNjQxLDYgKzY1OSw3IEBACiAJLnN0b3AJPSBkaXNrc3RhdHNfc3RvcCwKIAkuc2hvdwk9IGRpc2tzdGF0c19zaG93CiB9OworI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKIHN0YXRpYyB2b2lkIG1lZGlhX2NoYW5nZV9ub3RpZnlfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTY2NSwyNCArNjg0LDM4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChnZW5oZF9tZWRpYV9jaGFuZ2Vfbm90aWZ5KTsKICNlbmRpZiAgLyogIDAgICovCiAKK3N0cnVjdCBmaW5kX2Jsb2NrIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBwYXJ0OworfTsKKworc3RhdGljIGludCBtYXRjaF9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZpbmRfYmxvY2sgKmZpbmQgPSBkYXRhOworCisJaWYgKGRldi0+dHlwZSAhPSAmZGlza190eXBlKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RyY21wKGRldi0+YnVzX2lkLCBmaW5kLT5uYW1lKSA9PSAwKSB7CisJCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTsKKwkJaWYgKGZpbmQtPnBhcnQgPCBkaXNrLT5taW5vcnMpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIGRldl90IGJsa19sb29rdXBfZGV2dChjb25zdCBjaGFyICpuYW1lLCBpbnQgcGFydCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJZGV2X3QgZGV2dCA9IE1LREVWKDAsIDApOworCXN0cnVjdCBmaW5kX2Jsb2NrIGZpbmQ7CiAKIAltdXRleF9sb2NrKCZibG9ja19jbGFzc19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJsb2NrX2NsYXNzLmRldmljZXMsIG5vZGUpIHsKLQkJaWYgKGRldi0+dHlwZSAhPSAmZGlza190eXBlKQotCQkJY29udGludWU7Ci0JCWlmIChzdHJjbXAoZGV2LT5idXNfaWQsIG5hbWUpID09IDApIHsKLQkJCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTsKLQotCQkJaWYgKHBhcnQgPCBkaXNrLT5taW5vcnMpCi0JCQkJZGV2dCA9IE1LREVWKE1BSk9SKGRldi0+ZGV2dCksCi0JCQkJCSAgICAgTUlOT1IoZGV2LT5kZXZ0KSArIHBhcnQpOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJZmluZC5uYW1lID0gbmFtZTsKKwlmaW5kLnBhcnQgPSBwYXJ0OworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZibG9ja19jbGFzcywgTlVMTCwgKHZvaWQgKikmZmluZCwgbWF0Y2hfaWQpOworCWlmIChkZXYpCisJCWRldnQgPSBNS0RFVihNQUpPUihkZXYtPmRldnQpLAorCQkJICAgICBNSU5PUihkZXYtPmRldnQpICsgcGFydCk7CiAJbXV0ZXhfdW5sb2NrKCZibG9ja19jbGFzc19sb2NrKTsKIAogCXJldHVybiBkZXZ0OwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbWNweS5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbWNweS5jCmluZGV4IGE1ZWRhODAuLmRkY2NmYjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19tZW1jcHkuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfbWVtY3B5LmMKQEAgLTczLDE1ICs3Myw3IEBACiAJCXByX2RlYnVnKCIlczogKHN5bmMpIGxlbjogJXp1XG4iLCBfX2Z1bmNfXywgbGVuKTsKIAogCQkvKiB3YWl0IGZvciBhbnkgcHJlcmVxdWlzaXRlIG9wZXJhdGlvbnMgKi8KLQkJaWYgKGRlcGVuZF90eCkgewotCQkJLyogaWYgYWNrIGlzIGFscmVhZHkgc2V0IHRoZW4gd2UgY2Fubm90IGJlIHN1cmUKLQkJCSAqIHdlIGFyZSByZWZlcnJpbmcgdG8gdGhlIGNvcnJlY3Qgb3BlcmF0aW9uCi0JCQkgKi8KLQkJCUJVR19PTihhc3luY190eF90ZXN0X2FjayhkZXBlbmRfdHgpKTsKLQkJCWlmIChkbWFfd2FpdF9mb3JfYXN5bmNfdHgoZGVwZW5kX3R4KSA9PSBETUFfRVJST1IpCi0JCQkJcGFuaWMoIiVzOiBETUFfRVJST1Igd2FpdGluZyBmb3IgZGVwZW5kX3R4XG4iLAotCQkJCQlfX2Z1bmNfXyk7Ci0JCX0KKwkJYXN5bmNfdHhfcXVpZXNjZSgmZGVwZW5kX3R4KTsKIAogCQlkZXN0X2J1ZiA9IGttYXBfYXRvbWljKGRlc3QsIEtNX1VTRVIwKSArIGRlc3Rfb2Zmc2V0OwogCQlzcmNfYnVmID0ga21hcF9hdG9taWMoc3JjLCBLTV9VU0VSMSkgKyBzcmNfb2Zmc2V0OwpAQCAtOTEsNyArODMsNyBAQAogCQlrdW5tYXBfYXRvbWljKGRlc3RfYnVmLCBLTV9VU0VSMCk7CiAJCWt1bm1hcF9hdG9taWMoc3JjX2J1ZiwgS01fVVNFUjEpOwogCi0JCWFzeW5jX3R4X3N5bmNfZXBpbG9nKGZsYWdzLCBkZXBlbmRfdHgsIGNiX2ZuLCBjYl9wYXJhbSk7CisJCWFzeW5jX3R4X3N5bmNfZXBpbG9nKGNiX2ZuLCBjYl9wYXJhbSk7CiAJfQogCiAJcmV0dXJuIHR4OwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbXNldC5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbXNldC5jCmluZGV4IGY1ZmYzOTA2Li41YjVlYjk5IDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfbWVtc2V0LmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbXNldC5jCkBAIC03MiwxOSArNzIsMTEgQEAKIAkJZGVzdF9idWYgPSAodm9pZCAqKSAoKChjaGFyICopIHBhZ2VfYWRkcmVzcyhkZXN0KSkgKyBvZmZzZXQpOwogCiAJCS8qIHdhaXQgZm9yIGFueSBwcmVyZXF1aXNpdGUgb3BlcmF0aW9ucyAqLwotCQlpZiAoZGVwZW5kX3R4KSB7Ci0JCQkvKiBpZiBhY2sgaXMgYWxyZWFkeSBzZXQgdGhlbiB3ZSBjYW5ub3QgYmUgc3VyZQotCQkJICogd2UgYXJlIHJlZmVycmluZyB0byB0aGUgY29ycmVjdCBvcGVyYXRpb24KLQkJCSAqLwotCQkJQlVHX09OKGRlcGVuZF90eC0+YWNrKTsKLQkJCWlmIChkbWFfd2FpdF9mb3JfYXN5bmNfdHgoZGVwZW5kX3R4KSA9PSBETUFfRVJST1IpCi0JCQkJcGFuaWMoIiVzOiBETUFfRVJST1Igd2FpdGluZyBmb3IgZGVwZW5kX3R4XG4iLAotCQkJCQlfX2Z1bmNfXyk7Ci0JCX0KKwkJYXN5bmNfdHhfcXVpZXNjZSgmZGVwZW5kX3R4KTsKIAogCQltZW1zZXQoZGVzdF9idWYsIHZhbCwgbGVuKTsKIAotCQlhc3luY190eF9zeW5jX2VwaWxvZyhmbGFncywgZGVwZW5kX3R4LCBjYl9mbiwgY2JfcGFyYW0pOworCQlhc3luY190eF9zeW5jX2VwaWxvZyhjYl9mbiwgY2JfcGFyYW0pOwogCX0KIAogCXJldHVybiB0eDsKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY190eC5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKaW5kZXggMDk1Yzc5OC4uODVlYWY3YiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCWNhc2UgRE1BX1JFU09VUkNFX1JFTU9WRUQ6CiAJCWZvdW5kID0gMDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzeW5jX3R4X2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmVmLCAmYXN5bmNfdHhfbWFzdGVyX2xpc3QsIG5vZGUpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVmLCAmYXN5bmNfdHhfbWFzdGVyX2xpc3QsIG5vZGUpCiAJCQlpZiAocmVmLT5jaGFuID09IGNoYW4pIHsKIAkJCQkvKiBwZXJtaXQgYmFja2luZyBkZXZpY2VzIHRvIGdvIGF3YXkgKi8KIAkJCQlkbWFfY2hhbl9wdXQocmVmLT5jaGFuKTsKQEAgLTYwOCwyMyArNjA4LDM0IEBACiAJCXByX2RlYnVnKCIlczogKHN5bmMpXG4iLCBfX2Z1bmNfXyk7CiAKIAkJLyogd2FpdCBmb3IgYW55IHByZXJlcXVpc2l0ZSBvcGVyYXRpb25zICovCi0JCWlmIChkZXBlbmRfdHgpIHsKLQkJCS8qIGlmIGFjayBpcyBhbHJlYWR5IHNldCB0aGVuIHdlIGNhbm5vdCBiZSBzdXJlCi0JCQkgKiB3ZSBhcmUgcmVmZXJyaW5nIHRvIHRoZSBjb3JyZWN0IG9wZXJhdGlvbgotCQkJICovCi0JCQlCVUdfT04oYXN5bmNfdHhfdGVzdF9hY2soZGVwZW5kX3R4KSk7Ci0JCQlpZiAoZG1hX3dhaXRfZm9yX2FzeW5jX3R4KGRlcGVuZF90eCkgPT0gRE1BX0VSUk9SKQotCQkJCXBhbmljKCIlczogRE1BX0VSUk9SIHdhaXRpbmcgZm9yIGRlcGVuZF90eFxuIiwKLQkJCQkJX19mdW5jX18pOwotCQl9CisJCWFzeW5jX3R4X3F1aWVzY2UoJmRlcGVuZF90eCk7CiAKLQkJYXN5bmNfdHhfc3luY19lcGlsb2coZmxhZ3MsIGRlcGVuZF90eCwgY2JfZm4sIGNiX3BhcmFtKTsKKwkJYXN5bmNfdHhfc3luY19lcGlsb2coY2JfZm4sIGNiX3BhcmFtKTsKIAl9CiAKIAlyZXR1cm4gdHg7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhc3luY190cmlnZ2VyX2NhbGxiYWNrKTsKIAorLyoqCisgKiBhc3luY190eF9xdWllc2NlIC0gZW5zdXJlIHR4IGlzIGNvbXBsZXRlIGFuZCBmcmVlYWJsZSB1cG9uIHJldHVybgorICogQHR4IC0gdHJhbnNhY3Rpb24gdG8gcXVpZXNjZQorICovCit2b2lkIGFzeW5jX3R4X3F1aWVzY2Uoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoqdHgpCit7CisJaWYgKCp0eCkgeworCQkvKiBpZiBhY2sgaXMgYWxyZWFkeSBzZXQgdGhlbiB3ZSBjYW5ub3QgYmUgc3VyZQorCQkgKiB3ZSBhcmUgcmVmZXJyaW5nIHRvIHRoZSBjb3JyZWN0IG9wZXJhdGlvbgorCQkgKi8KKwkJQlVHX09OKGFzeW5jX3R4X3Rlc3RfYWNrKCp0eCkpOworCQlpZiAoZG1hX3dhaXRfZm9yX2FzeW5jX3R4KCp0eCkgPT0gRE1BX0VSUk9SKQorCQkJcGFuaWMoIkRNQV9FUlJPUiB3YWl0aW5nIGZvciB0cmFuc2FjdGlvblxuIik7CisJCWFzeW5jX3R4X2FjaygqdHgpOworCQkqdHggPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFzeW5jX3R4X3F1aWVzY2UpOworCiBtb2R1bGVfaW5pdChhc3luY190eF9pbml0KTsKIG1vZHVsZV9leGl0KGFzeW5jX3R4X2V4aXQpOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKaW5kZXggM2EwZGRkYy4uNjU5NzRjNiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwpAQCAtMzUsNzQgKzM1LDEyMSBAQAogICogCXdoZW4gQ09ORklHX0RNQV9FTkdJTkU9bgogICovCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCi1kb19hc3luY194b3Ioc3RydWN0IGRtYV9kZXZpY2UgKmRldmljZSwKLQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBwYWdlICpkZXN0LCBzdHJ1Y3QgcGFnZSAqKnNyY19saXN0LAotCXVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzcmNfY250LCBzaXplX3QgbGVuLAotCWVudW0gYXN5bmNfdHhfZmxhZ3MgZmxhZ3MsIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVwZW5kX3R4LAotCWRtYV9hc3luY190eF9jYWxsYmFjayBjYl9mbiwgdm9pZCAqY2JfcGFyYW0pCitkb19hc3luY194b3Ioc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgcGFnZSAqZGVzdCwgc3RydWN0IHBhZ2UgKipzcmNfbGlzdCwKKwkgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBzcmNfY250LCBzaXplX3QgbGVuLAorCSAgICAgZW51bSBhc3luY190eF9mbGFncyBmbGFncywKKwkgICAgIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVwZW5kX3R4LAorCSAgICAgZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuLCB2b2lkICpjYl9wYXJhbSkKIHsKLQlkbWFfYWRkcl90IGRtYV9kZXN0OworCXN0cnVjdCBkbWFfZGV2aWNlICpkbWEgPSBjaGFuLT5kZXZpY2U7CiAJZG1hX2FkZHJfdCAqZG1hX3NyYyA9IChkbWFfYWRkcl90ICopIHNyY19saXN0OwotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHg7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCA9IE5VTEw7CisJaW50IHNyY19vZmYgPSAwOwogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZG1hX3ByZXBfZmxhZ3MgPSBjYl9mbiA/IERNQV9QUkVQX0lOVEVSUlVQVCA6IDA7CisJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIF9jYl9mbjsKKwl2b2lkICpfY2JfcGFyYW07CisJZW51bSBhc3luY190eF9mbGFncyBhc3luY19mbGFnczsKKwllbnVtIGRtYV9jdHJsX2ZsYWdzIGRtYV9mbGFnczsKKwlpbnQgeG9yX3NyY19jbnQ7CisJZG1hX2FkZHJfdCBkbWFfZGVzdDsKIAotCXByX2RlYnVnKCIlczogbGVuOiAlenVcbiIsIF9fZnVuY19fLCBsZW4pOwotCi0JZG1hX2Rlc3QgPSBkbWFfbWFwX3BhZ2UoZGV2aWNlLT5kZXYsIGRlc3QsIG9mZnNldCwgbGVuLAotCQkJCURNQV9GUk9NX0RFVklDRSk7Ci0KKwlkbWFfZGVzdCA9IGRtYV9tYXBfcGFnZShkbWEtPmRldiwgZGVzdCwgb2Zmc2V0LCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CiAJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykKLQkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkZXZpY2UtPmRldiwgc3JjX2xpc3RbaV0sIG9mZnNldCwKKwkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkbWEtPmRldiwgc3JjX2xpc3RbaV0sIG9mZnNldCwKIAkJCQkJICBsZW4sIERNQV9UT19ERVZJQ0UpOwogCi0JLyogU2luY2Ugd2UgaGF2ZSBjbG9iYmVyZWQgdGhlIHNyY19saXN0IHdlIGFyZSBjb21taXR0ZWQKLQkgKiB0byBkb2luZyB0aGlzIGFzeW5jaHJvbm91c2x5LiAgRHJpdmVycyBmb3JjZSBmb3J3YXJkIHByb2dyZXNzCi0JICogaW4gY2FzZSB0aGV5IGNhbiBub3QgcHJvdmlkZSBhIGRlc2NyaXB0b3IKLQkgKi8KLQl0eCA9IGRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX3hvcihjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgc3JjX2NudCwgbGVuLAotCQkJCQkgZG1hX3ByZXBfZmxhZ3MpOwotCWlmICghdHgpIHsKLQkJaWYgKGRlcGVuZF90eCkKLQkJCWRtYV93YWl0X2Zvcl9hc3luY190eChkZXBlbmRfdHgpOworCXdoaWxlIChzcmNfY250KSB7CisJCWFzeW5jX2ZsYWdzID0gZmxhZ3M7CisJCWRtYV9mbGFncyA9IDA7CisJCXhvcl9zcmNfY250ID0gbWluKHNyY19jbnQsIGRtYS0+bWF4X3hvcik7CisJCS8qIGlmIHdlIGFyZSBzdWJtaXR0aW5nIGFkZGl0aW9uYWwgeG9ycywgbGVhdmUgdGhlIGNoYWluIG9wZW4sCisJCSAqIGNsZWFyIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXJzLCBhbmQgbGVhdmUgdGhlIGRlc3RpbmF0aW9uCisJCSAqIGJ1ZmZlciBtYXBwZWQKKwkJICovCisJCWlmIChzcmNfY250ID4geG9yX3NyY19jbnQpIHsKKwkJCWFzeW5jX2ZsYWdzICY9IH5BU1lOQ19UWF9BQ0s7CisJCQlkbWFfZmxhZ3MgPSBETUFfQ09NUExfU0tJUF9ERVNUX1VOTUFQOworCQkJX2NiX2ZuID0gTlVMTDsKKwkJCV9jYl9wYXJhbSA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlfY2JfZm4gPSBjYl9mbjsKKwkJCV9jYl9wYXJhbSA9IGNiX3BhcmFtOworCQl9CisJCWlmIChfY2JfZm4pCisJCQlkbWFfZmxhZ3MgfD0gRE1BX1BSRVBfSU5URVJSVVBUOwogCi0JCXdoaWxlICghdHgpCi0JCQl0eCA9IGRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX3hvcihjaGFuLCBkbWFfZGVzdCwKLQkJCQkJCQkgZG1hX3NyYywgc3JjX2NudCwgbGVuLAotCQkJCQkJCSBkbWFfcHJlcF9mbGFncyk7CisJCS8qIFNpbmNlIHdlIGhhdmUgY2xvYmJlcmVkIHRoZSBzcmNfbGlzdCB3ZSBhcmUgY29tbWl0dGVkCisJCSAqIHRvIGRvaW5nIHRoaXMgYXN5bmNocm9ub3VzbHkuICBEcml2ZXJzIGZvcmNlIGZvcndhcmQgcHJvZ3Jlc3MKKwkJICogaW4gY2FzZSB0aGV5IGNhbiBub3QgcHJvdmlkZSBhIGRlc2NyaXB0b3IKKwkJICovCisJCXR4ID0gZG1hLT5kZXZpY2VfcHJlcF9kbWFfeG9yKGNoYW4sIGRtYV9kZXN0LCAmZG1hX3NyY1tzcmNfb2ZmXSwKKwkJCQkJICAgICAgeG9yX3NyY19jbnQsIGxlbiwgZG1hX2ZsYWdzKTsKKworCQlpZiAodW5saWtlbHkoIXR4KSkKKwkJCWFzeW5jX3R4X3F1aWVzY2UoJmRlcGVuZF90eCk7CisKKwkJLyogc3BpbiB3YWl0IGZvciB0aGUgcHJlY2VlZGluZyB0cmFuc2FjdGlvbnMgdG8gY29tcGxldGUgKi8KKwkJd2hpbGUgKHVubGlrZWx5KCF0eCkpIHsKKwkJCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGNoYW4pOworCQkJdHggPSBkbWEtPmRldmljZV9wcmVwX2RtYV94b3IoY2hhbiwgZG1hX2Rlc3QsCisJCQkJCQkgICAgICAmZG1hX3NyY1tzcmNfb2ZmXSwKKwkJCQkJCSAgICAgIHhvcl9zcmNfY250LCBsZW4sCisJCQkJCQkgICAgICBkbWFfZmxhZ3MpOworCQl9CisKKwkJYXN5bmNfdHhfc3VibWl0KGNoYW4sIHR4LCBhc3luY19mbGFncywgZGVwZW5kX3R4LCBfY2JfZm4sCisJCQkJX2NiX3BhcmFtKTsKKworCQlkZXBlbmRfdHggPSB0eDsKKwkJZmxhZ3MgfD0gQVNZTkNfVFhfREVQX0FDSzsKKworCQlpZiAoc3JjX2NudCA+IHhvcl9zcmNfY250KSB7CisJCQkvKiBkcm9wIGNvbXBsZXRlZCBzb3VyY2VzICovCisJCQlzcmNfY250IC09IHhvcl9zcmNfY250OworCQkJc3JjX29mZiArPSB4b3Jfc3JjX2NudDsKKworCQkJLyogdXNlIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0IGEgc291cmNlICovCisJCQlkbWFfc3JjWy0tc3JjX29mZl0gPSBkbWFfZGVzdDsKKwkJCXNyY19jbnQrKzsKKwkJfSBlbHNlCisJCQlicmVhazsKIAl9CiAKLQlhc3luY190eF9zdWJtaXQoY2hhbiwgdHgsIGZsYWdzLCBkZXBlbmRfdHgsIGNiX2ZuLCBjYl9wYXJhbSk7Ci0KIAlyZXR1cm4gdHg7CiB9CiAKIHN0YXRpYyB2b2lkCiBkb19zeW5jX3hvcihzdHJ1Y3QgcGFnZSAqZGVzdCwgc3RydWN0IHBhZ2UgKipzcmNfbGlzdCwgdW5zaWduZWQgaW50IG9mZnNldCwKLQl1bnNpZ25lZCBpbnQgc3JjX2NudCwgc2l6ZV90IGxlbiwgZW51bSBhc3luY190eF9mbGFncyBmbGFncywKLQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlcGVuZF90eCwKLQlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2JfZm4sIHZvaWQgKmNiX3BhcmFtKQorCSAgICBpbnQgc3JjX2NudCwgc2l6ZV90IGxlbiwgZW51bSBhc3luY190eF9mbGFncyBmbGFncywKKwkgICAgZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuLCB2b2lkICpjYl9wYXJhbSkKIHsKLQl2b2lkICpfZGVzdDsKIAlpbnQgaTsKLQotCXByX2RlYnVnKCIlczogbGVuOiAlenVcbiIsIF9fZnVuY19fLCBsZW4pOworCWludCB4b3Jfc3JjX2NudDsKKwlpbnQgc3JjX29mZiA9IDA7CisJdm9pZCAqZGVzdF9idWY7CisJdm9pZCAqKnNyY3MgPSAodm9pZCAqKikgc3JjX2xpc3Q7CiAKIAkvKiByZXVzZSB0aGUgJ3NyY19saXN0JyBhcnJheSB0byBjb252ZXJ0IHRvIGJ1ZmZlciBwb2ludGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCi0JCXNyY19saXN0W2ldID0gKHN0cnVjdCBwYWdlICopCi0JCQkocGFnZV9hZGRyZXNzKHNyY19saXN0W2ldKSArIG9mZnNldCk7CisJCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3Moc3JjX2xpc3RbaV0pICsgb2Zmc2V0OwogCiAJLyogc2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQlfZGVzdCA9IHBhZ2VfYWRkcmVzcyhkZXN0KSArIG9mZnNldDsKKwlkZXN0X2J1ZiA9IHBhZ2VfYWRkcmVzcyhkZXN0KSArIG9mZnNldDsKIAogCWlmIChmbGFncyAmIEFTWU5DX1RYX1hPUl9aRVJPX0RTVCkKLQkJbWVtc2V0KF9kZXN0LCAwLCBsZW4pOworCQltZW1zZXQoZGVzdF9idWYsIDAsIGxlbik7CiAKLQl4b3JfYmxvY2tzKHNyY19jbnQsIGxlbiwgX2Rlc3QsCi0JCSh2b2lkICoqKSBzcmNfbGlzdCk7CisJd2hpbGUgKHNyY19jbnQgPiAwKSB7CisJCS8qIHByb2Nlc3MgdXAgdG8gJ01BWF9YT1JfQkxPQ0tTJyBzb3VyY2VzICovCisJCXhvcl9zcmNfY250ID0gbWluKHNyY19jbnQsIE1BWF9YT1JfQkxPQ0tTKTsKKwkJeG9yX2Jsb2Nrcyh4b3Jfc3JjX2NudCwgbGVuLCBkZXN0X2J1ZiwgJnNyY3Nbc3JjX29mZl0pOwogCi0JYXN5bmNfdHhfc3luY19lcGlsb2coZmxhZ3MsIGRlcGVuZF90eCwgY2JfZm4sIGNiX3BhcmFtKTsKKwkJLyogZHJvcCBjb21wbGV0ZWQgc291cmNlcyAqLworCQlzcmNfY250IC09IHhvcl9zcmNfY250OworCQlzcmNfb2ZmICs9IHhvcl9zcmNfY250OworCX0KKworCWFzeW5jX3R4X3N5bmNfZXBpbG9nKGNiX2ZuLCBjYl9wYXJhbSk7CiB9CiAKIC8qKgpAQCAtMTMyLDEwNiArMTc5LDM0IEBACiAJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gYXN5bmNfdHhfZmluZF9jaGFubmVsKGRlcGVuZF90eCwgRE1BX1hPUiwKIAkJCQkJCSAgICAgICZkZXN0LCAxLCBzcmNfbGlzdCwKIAkJCQkJCSAgICAgIHNyY19jbnQsIGxlbik7Ci0Jc3RydWN0IGRtYV9kZXZpY2UgKmRldmljZSA9IGNoYW4gPyBjaGFuLT5kZXZpY2UgOiBOVUxMOwotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwotCWRtYV9hc3luY190eF9jYWxsYmFjayBfY2JfZm47Ci0Jdm9pZCAqX2NiX3BhcmFtOwotCXVuc2lnbmVkIGxvbmcgbG9jYWxfZmxhZ3M7Ci0JaW50IHhvcl9zcmNfY250OwotCWludCBpID0gMCwgc3JjX29mZiA9IDA7Ci0KIAlCVUdfT04oc3JjX2NudCA8PSAxKTsKIAotCXdoaWxlIChzcmNfY250KSB7Ci0JCWxvY2FsX2ZsYWdzID0gZmxhZ3M7Ci0JCWlmIChkZXZpY2UpIHsgLyogcnVuIHRoZSB4b3IgYXN5bmNocm9ub3VzbHkgKi8KLQkJCXhvcl9zcmNfY250ID0gbWluKHNyY19jbnQsIGRldmljZS0+bWF4X3hvcik7Ci0JCQkvKiBpZiB3ZSBhcmUgc3VibWl0dGluZyBhZGRpdGlvbmFsIHhvcnMKLQkJCSAqIG9ubHkgc2V0IHRoZSBjYWxsYmFjayBvbiB0aGUgbGFzdCB0cmFuc2FjdGlvbgotCQkJICovCi0JCQlpZiAoc3JjX2NudCA+IHhvcl9zcmNfY250KSB7Ci0JCQkJbG9jYWxfZmxhZ3MgJj0gfkFTWU5DX1RYX0FDSzsKLQkJCQlfY2JfZm4gPSBOVUxMOwotCQkJCV9jYl9wYXJhbSA9IE5VTEw7Ci0JCQl9IGVsc2UgewotCQkJCV9jYl9mbiA9IGNiX2ZuOwotCQkJCV9jYl9wYXJhbSA9IGNiX3BhcmFtOwotCQkJfQorCWlmIChjaGFuKSB7CisJCS8qIHJ1biB0aGUgeG9yIGFzeW5jaHJvbm91c2x5ICovCisJCXByX2RlYnVnKCIlcyAoYXN5bmMpOiBsZW46ICV6dVxuIiwgX19mdW5jX18sIGxlbik7CiAKLQkJCXR4ID0gZG9fYXN5bmNfeG9yKGRldmljZSwgY2hhbiwgZGVzdCwKLQkJCQkJICAmc3JjX2xpc3Rbc3JjX29mZl0sIG9mZnNldCwKLQkJCQkJICB4b3Jfc3JjX2NudCwgbGVuLCBsb2NhbF9mbGFncywKLQkJCQkJICBkZXBlbmRfdHgsIF9jYl9mbiwgX2NiX3BhcmFtKTsKLQkJfSBlbHNlIHsgLyogcnVuIHRoZSB4b3Igc3luY2hyb25vdXNseSAqLwotCQkJLyogaW4gdGhlIHN5bmMgY2FzZSB0aGUgZGVzdCBpcyBhbiBpbXBsaWVkIHNvdXJjZQotCQkJICogKGFzc3VtZXMgdGhlIGRlc3QgaXMgYXQgdGhlIHNyY19vZmYgaW5kZXgpCi0JCQkgKi8KLQkJCWlmIChmbGFncyAmIEFTWU5DX1RYX1hPUl9EUk9QX0RTVCkgewotCQkJCXNyY19jbnQtLTsKLQkJCQlzcmNfb2ZmKys7Ci0JCQl9CisJCXJldHVybiBkb19hc3luY194b3IoY2hhbiwgZGVzdCwgc3JjX2xpc3QsIG9mZnNldCwgc3JjX2NudCwgbGVuLAorCQkJCSAgICBmbGFncywgZGVwZW5kX3R4LCBjYl9mbiwgY2JfcGFyYW0pOworCX0gZWxzZSB7CisJCS8qIHJ1biB0aGUgeG9yIHN5bmNocm9ub3VzbHkgKi8KKwkJcHJfZGVidWcoIiVzIChzeW5jKTogbGVuOiAlenVcbiIsIF9fZnVuY19fLCBsZW4pOwogCi0JCQkvKiBwcm9jZXNzIHVwIHRvICdNQVhfWE9SX0JMT0NLUycgc291cmNlcyAqLwotCQkJeG9yX3NyY19jbnQgPSBtaW4oc3JjX2NudCwgTUFYX1hPUl9CTE9DS1MpOwotCi0JCQkvKiBpZiB3ZSBhcmUgc3VibWl0dGluZyBhZGRpdGlvbmFsIHhvcnMKLQkJCSAqIG9ubHkgc2V0IHRoZSBjYWxsYmFjayBvbiB0aGUgbGFzdCB0cmFuc2FjdGlvbgotCQkJICovCi0JCQlpZiAoc3JjX2NudCA+IHhvcl9zcmNfY250KSB7Ci0JCQkJbG9jYWxfZmxhZ3MgJj0gfkFTWU5DX1RYX0FDSzsKLQkJCQlfY2JfZm4gPSBOVUxMOwotCQkJCV9jYl9wYXJhbSA9IE5VTEw7Ci0JCQl9IGVsc2UgewotCQkJCV9jYl9mbiA9IGNiX2ZuOwotCQkJCV9jYl9wYXJhbSA9IGNiX3BhcmFtOwotCQkJfQotCi0JCQkvKiB3YWl0IGZvciBhbnkgcHJlcmVxdWlzaXRlIG9wZXJhdGlvbnMgKi8KLQkJCWlmIChkZXBlbmRfdHgpIHsKLQkJCQkvKiBpZiBhY2sgaXMgYWxyZWFkeSBzZXQgdGhlbiB3ZSBjYW5ub3QgYmUgc3VyZQotCQkJCSAqIHdlIGFyZSByZWZlcnJpbmcgdG8gdGhlIGNvcnJlY3Qgb3BlcmF0aW9uCi0JCQkJICovCi0JCQkJQlVHX09OKGFzeW5jX3R4X3Rlc3RfYWNrKGRlcGVuZF90eCkpOwotCQkJCWlmIChkbWFfd2FpdF9mb3JfYXN5bmNfdHgoZGVwZW5kX3R4KSA9PQotCQkJCQlETUFfRVJST1IpCi0JCQkJCXBhbmljKCIlczogRE1BX0VSUk9SIHdhaXRpbmcgZm9yICIKLQkJCQkJCSJkZXBlbmRfdHhcbiIsCi0JCQkJCQlfX2Z1bmNfXyk7Ci0JCQl9Ci0KLQkJCWRvX3N5bmNfeG9yKGRlc3QsICZzcmNfbGlzdFtzcmNfb2ZmXSwgb2Zmc2V0LAotCQkJCXhvcl9zcmNfY250LCBsZW4sIGxvY2FsX2ZsYWdzLCBkZXBlbmRfdHgsCi0JCQkJX2NiX2ZuLCBfY2JfcGFyYW0pOworCQkvKiBpbiB0aGUgc3luYyBjYXNlIHRoZSBkZXN0IGlzIGFuIGltcGxpZWQgc291cmNlCisJCSAqIChhc3N1bWVzIHRoZSBkZXN0IGlzIHRoZSBmaXJzdCBzb3VyY2UpCisJCSAqLworCQlpZiAoZmxhZ3MgJiBBU1lOQ19UWF9YT1JfRFJPUF9EU1QpIHsKKwkJCXNyY19jbnQtLTsKKwkJCXNyY19saXN0Kys7CiAJCX0KIAotCQkvKiB0aGUgcHJldmlvdXMgdHggaXMgaGlkZGVuIGZyb20gdGhlIGNsaWVudCwKLQkJICogc28gYWNrIGl0Ci0JCSAqLwotCQlpZiAoaSAmJiBkZXBlbmRfdHgpCi0JCQlhc3luY190eF9hY2soZGVwZW5kX3R4KTsKKwkJLyogd2FpdCBmb3IgYW55IHByZXJlcXVpc2l0ZSBvcGVyYXRpb25zICovCisJCWFzeW5jX3R4X3F1aWVzY2UoJmRlcGVuZF90eCk7CiAKLQkJZGVwZW5kX3R4ID0gdHg7CisJCWRvX3N5bmNfeG9yKGRlc3QsIHNyY19saXN0LCBvZmZzZXQsIHNyY19jbnQsIGxlbiwKKwkJCSAgICBmbGFncywgY2JfZm4sIGNiX3BhcmFtKTsKIAotCQlpZiAoc3JjX2NudCA+IHhvcl9zcmNfY250KSB7Ci0JCQkvKiBkcm9wIGNvbXBsZXRlZCBzb3VyY2VzICovCi0JCQlzcmNfY250IC09IHhvcl9zcmNfY250OwotCQkJc3JjX29mZiArPSB4b3Jfc3JjX2NudDsKLQotCQkJLyogdW5jb25kaXRpb25hbGx5IHByZXNlcnZlIHRoZSBkZXN0aW5hdGlvbiAqLwotCQkJZmxhZ3MgJj0gfkFTWU5DX1RYX1hPUl9aRVJPX0RTVDsKLQotCQkJLyogdXNlIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0IGEgc291cmNlLCBidXQgcmVtZW1iZXIKLQkJCSAqIGl0J3MgZHJvcHBlZCwgYmVjYXVzZSBpdCdzIGltcGxpZWQsIGluIHRoZSBzeW5jIGNhc2UKLQkJCSAqLwotCQkJc3JjX2xpc3RbLS1zcmNfb2ZmXSA9IGRlc3Q7Ci0JCQlzcmNfY250Kys7Ci0JCQlmbGFncyB8PSBBU1lOQ19UWF9YT1JfRFJPUF9EU1Q7Ci0JCX0gZWxzZQotCQkJc3JjX2NudCA9IDA7Ci0JCWkrKzsKKwkJcmV0dXJuIE5VTEw7CiAJfQotCi0JcmV0dXJuIHR4OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXN5bmNfeG9yKTsKIApAQCAtMjg1LDExICsyNjAsMTEgQEAKIAkJdHggPSBkZXZpY2UtPmRldmljZV9wcmVwX2RtYV96ZXJvX3N1bShjaGFuLCBkbWFfc3JjLCBzcmNfY250LAogCQkJCQkJICAgICAgbGVuLCByZXN1bHQsCiAJCQkJCQkgICAgICBkbWFfcHJlcF9mbGFncyk7Ci0JCWlmICghdHgpIHsKLQkJCWlmIChkZXBlbmRfdHgpCi0JCQkJZG1hX3dhaXRfZm9yX2FzeW5jX3R4KGRlcGVuZF90eCk7CisJCWlmICh1bmxpa2VseSghdHgpKSB7CisJCQlhc3luY190eF9xdWllc2NlKCZkZXBlbmRfdHgpOwogCiAJCQl3aGlsZSAoIXR4KQorCQkJCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGNoYW4pOwogCQkJCXR4ID0gZGV2aWNlLT5kZXZpY2VfcHJlcF9kbWFfemVyb19zdW0oY2hhbiwKIAkJCQkJZG1hX3NyYywgc3JjX2NudCwgbGVuLCByZXN1bHQsCiAJCQkJCWRtYV9wcmVwX2ZsYWdzKTsKQEAgLTMwNywxOCArMjgyLDExIEBACiAJCXR4ID0gYXN5bmNfeG9yKGRlc3QsIHNyY19saXN0LCBvZmZzZXQsIHNyY19jbnQsIGxlbiwgeG9yX2ZsYWdzLAogCQkJZGVwZW5kX3R4LCBOVUxMLCBOVUxMKTsKIAotCQlpZiAodHgpIHsKLQkJCWlmIChkbWFfd2FpdF9mb3JfYXN5bmNfdHgodHgpID09IERNQV9FUlJPUikKLQkJCQlwYW5pYygiJXM6IERNQV9FUlJPUiB3YWl0aW5nIGZvciB0eFxuIiwKLQkJCQkJX19mdW5jX18pOwotCQkJYXN5bmNfdHhfYWNrKHR4KTsKLQkJfQorCQlhc3luY190eF9xdWllc2NlKCZ0eCk7CiAKIAkJKnJlc3VsdCA9IHBhZ2VfaXNfemVybyhkZXN0LCBvZmZzZXQsIGxlbikgPyAwIDogMTsKIAotCQl0eCA9IE5VTEw7Ci0KLQkJYXN5bmNfdHhfc3luY19lcGlsb2coZmxhZ3MsIGRlcGVuZF90eCwgY2JfZm4sIGNiX3BhcmFtKTsKKwkJYXN5bmNfdHhfc3luY19lcGlsb2coY2JfZm4sIGNiX3BhcmFtKTsKIAl9CiAKIAlyZXR1cm4gdHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCBmZGE0NDY3Li44MDhlMGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDYgQEAKIG9iai0kKENPTkZJR19QQVJJU0MpCQkrPSBwYXJpc2MvCiBvYmotJChDT05GSUdfUkFQSURJTykJCSs9IHJhcGlkaW8vCiBvYmoteQkJCQkrPSB2aWRlby8KLW9iai15CQkJCSs9IGdwdS8KIG9iai0kKENPTkZJR19BQ1BJKQkJKz0gYWNwaS8KICMgUG5QIG11c3QgY29tZSBhZnRlciBBQ1BJIHNpbmNlIGl0IHdpbGwgZXZlbnR1YWxseSBuZWVkIHRvIGNoZWNrIGlmIGFjcGkKICMgd2FzIHVzZWQgYW5kIGRvIG5vdGhpbmcgaWYgc28KQEAgLTIzLDYgKzIyLDkgQEAKICMgZGVmYXVsdC4KIG9iai15CQkJCSs9IGNoYXIvCiAKKyMgZ3B1LyBjb21lcyBhZnRlciBjaGFyIGZvciBBR1AgdnMgRFJNIHN0YXJ0dXAKK29iai15CQkJCSs9IGdwdS8KKwogb2JqLSQoQ09ORklHX0NPTk5FQ1RPUikJCSs9IGNvbm5lY3Rvci8KIAogIyBpODEwZmIgYW5kIGludGVsZmIgZGVwZW5kIG9uIGNoYXIvYWdwLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JheS5jIGIvZHJpdmVycy9hY3BpL2JheS5jCmluZGV4IGU2Y2FmNWQuLjYxYjZjNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9iYXkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF5LmMKQEAgLTM4MCw5ICszODAsNiBAQAogCWlmIChhY3BpX2Rpc2FibGVkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qIGxvb2sgZm9yIGRvY2thYmxlIGRyaXZlIGJheXMgKi8KIAlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsCiAJCUFDUElfVUlOVDMyX01BWCwgZmluZF9iYXksICZiYXlzLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kb2NrLmMgYi9kcml2ZXJzL2FjcGkvZG9jay5jCmluZGV4IDFlODcyZTcuLmJiN2M1MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2RvY2suYwpAQCAtOTIwLDkgKzkyMCw2IEBACiAJaWYgKGFjcGlfZGlzYWJsZWQpCiAJCXJldHVybiAwOwogCi0JaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybiAwOwotCiAJLyogbG9vayBmb3IgYSBkb2NrIHN0YXRpb24gKi8KIAlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsCiAJCQkgICAgQUNQSV9VSU5UMzJfTUFYLCBmaW5kX2RvY2ssICZudW0sIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Zhbi5jIGIvZHJpdmVycy9hY3BpL2Zhbi5jCmluZGV4IDU1YzE3YWYuLjI2NTViYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9mYW4uYworKysgYi9kcml2ZXJzL2FjcGkvZmFuLmMKQEAgLTI2MywyMiArMjYzLDIyIEBACiAJCWdvdG8gZW5kOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gUFJFRklYCi0JCSIlcyBpcyByZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsCi0JCWRldmljZS0+ZGV2LmJ1c19pZCwgY2Rldi0+aWQpOworCWRldl9pbmZvKCZkZXZpY2UtPmRldiwgInJlZ2lzdGVyZWQgYXMgY29vbGluZ19kZXZpY2UlZFxuIiwgY2Rldi0+aWQpOwogCiAJYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gY2RldjsKIAlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2aWNlLT5kZXYua29iaiwKIAkJCQkgICAmY2Rldi0+ZGV2aWNlLmtvYmosCiAJCQkJICAgInRoZXJtYWxfY29vbGluZyIpOwogCWlmIChyZXN1bHQpCi0JCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkNyZWF0ZSBzeXNmcyBsaW5rXG4iKTsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXYsICJGYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGxpbmsgIgorCQkJIid0aGVybWFsX2Nvb2xpbmcnXG4iKTsKIAogCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZjZGV2LT5kZXZpY2Uua29iaiwKIAkJCQkgICAmZGV2aWNlLT5kZXYua29iaiwKIAkJCQkgICAiZGV2aWNlIik7CiAJaWYgKHJlc3VsdCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiQ3JlYXRlIHN5c2ZzIGxpbmtcbiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgc3lzZnMgbGluayAiCisJCQkiJ2RldmljZSdcbiIpOwogCiAJcmVzdWx0ID0gYWNwaV9mYW5fYWRkX2ZzKGRldmljZSk7CiAJaWYgKHJlc3VsdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IDBmMmRkODEuLjA4NDEwOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9nbHVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2dsdWUuYwpAQCAtMTQ2LDggKzE0Niw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJaWYgKGRldi0+YXJjaGRhdGEuYWNwaV9oYW5kbGUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKLQkJICAgICAgICJEcml2ZXJzIGNoYW5nZWQgJ2FjcGlfaGFuZGxlJyBmb3IgJXNcbiIsIGRldi0+YnVzX2lkKTsKKwkJZGV2X3dhcm4oZGV2LCAiRHJpdmVycyBjaGFuZ2VkICdhY3BpX2hhbmRsZSdcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZ2V0X2RldmljZShkZXYpOwpAQCAtMTk1LDggKzE5NCw3IEBACiAJCS8qIGFjcGlfYmluZF9vbmUgaW5jcmVhc2UgcmVmY250IGJ5IG9uZSAqLwogCQlwdXRfZGV2aWNlKGRldik7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAotCQkgICAgICAgIk9vcHMsICdhY3BpX2hhbmRsZScgY29ycnVwdCBmb3IgJXNcbiIsIGRldi0+YnVzX2lkKTsKKwkJZGV2X2VycihkZXYsICJPb3BzLCAnYWNwaV9oYW5kbGUnIGNvcnJ1cHRcbiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMzOCw5ICszMzYsNiBAQAogCWlmIChhY3BpX2Rpc2FibGVkKQogCQlyZXR1cm4gMDsKIAotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKLQogCWlmIChkZXYpIHsKIAkJcnRjX3dha2Vfc2V0dXAoKTsKIAkJcnRjX2luZm8ud2FrZV9vbiA9IHJ0Y193YWtlX29uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCBlYzBmMmQ1Li5lMzY0MjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtNzE0LDkgKzcxNCw4IEBACiAJCWdvdG8gZW5kOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gUFJFRklYCi0JCSIlcyBpcyByZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsCi0JCWRldmljZS0+ZGV2LmJ1c19pZCwgcHItPmNkZXYtPmlkKTsKKwlkZXZfaW5mbygmZGV2aWNlLT5kZXYsICJyZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsCisJCSBwci0+Y2Rldi0+aWQpOwogCiAJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosCiAJCQkJICAgJnByLT5jZGV2LT5kZXZpY2Uua29iaiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKaW5kZXggMDYyMmFjZTAuLmEyYzNmOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCkBAIC04MjcsNiArODI3LDcgQEAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmcoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKIHsKIAljcHVtYXNrX3Qgc2F2ZWRfbWFzazsKKwljcHVtYXNrX29mX2NwdV9wdHJfZGVjbGFyZShuZXdfbWFzayk7CiAJaW50IHJldDsKIAogCWlmICghcHIpCkBAIC04MzgsNyArODM5LDggQEAKIAkgKiBNaWdyYXRlIHRhc2sgdG8gdGhlIGNwdSBwb2ludGVkIGJ5IHByLgogCSAqLwogCXNhdmVkX21hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KHByLT5pZCkpOworCWNwdW1hc2tfb2ZfY3B1X3B0cl9uZXh0KG5ld19tYXNrLCBwci0+aWQpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIG5ld19tYXNrKTsKIAlyZXQgPSBwci0+dGhyb3R0bGluZy5hY3BpX3Byb2Nlc3Nvcl9nZXRfdGhyb3R0bGluZyhwcik7CiAJLyogcmVzdG9yZSB0aGUgcHJldmlvdXMgc3RhdGUgKi8KIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmc2F2ZWRfbWFzayk7CkBAIC05ODcsNiArOTg5LDcgQEAKIGludCBhY3BpX3Byb2Nlc3Nvcl9zZXRfdGhyb3R0bGluZyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCBpbnQgc3RhdGUpCiB7CiAJY3B1bWFza190IHNhdmVkX21hc2s7CisJY3B1bWFza19vZl9jcHVfcHRyX2RlY2xhcmUobmV3X21hc2spOwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqbWF0Y2hfcHI7CkBAIC0xMDEzLDcgKzEwMTYsNyBAQAogCSAqIGFmZmVjdGVkIGNwdSBpbiBvcmRlciB0byBnZXQgb25lIHByb3BlciBULXN0YXRlLgogCSAqIFRoZSBub3RpZmllciBldmVudCBpcyBUSFJPVFRMSU5HX1BSRUNIQU5HRS4KIAkgKi8KLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBvbmxpbmVfdGhyb3R0bGluZ19jcHVzKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgb25saW5lX3Rocm90dGxpbmdfY3B1cykgewogCQl0X3N0YXRlLmNwdSA9IGk7CiAJCWFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfbm90aWZpZXIoVEhST1RUTElOR19QUkVDSEFOR0UsCiAJCQkJCQkJJnRfc3RhdGUpOwpAQCAtMTAyNSw3ICsxMDI4LDggQEAKIAkgKiBpdCBjYW4gYmUgY2FsbGVkIG9ubHkgZm9yIHRoZSBjcHUgcG9pbnRlZCBieSBwci4KIAkgKi8KIAlpZiAocF90aHJvdHRsaW5nLT5zaGFyZWRfdHlwZSA9PSBET01BSU5fQ09PUkRfVFlQRV9TV19BTlkpIHsKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KHByLT5pZCkpOworCQljcHVtYXNrX29mX2NwdV9wdHJfbmV4dChuZXdfbWFzaywgcHItPmlkKTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbmV3X21hc2spOwogCQlyZXQgPSBwX3Rocm90dGxpbmctPmFjcGlfcHJvY2Vzc29yX3NldF90aHJvdHRsaW5nKHByLAogCQkJCQkJdF9zdGF0ZS50YXJnZXRfc3RhdGUpOwogCX0gZWxzZSB7CkBAIC0xMDM0LDcgKzEwMzgsNyBAQAogCQkgKiBpdCBpcyBuZWNlc3NhcnkgdG8gc2V0IFQtc3RhdGUgZm9yIGV2ZXJ5IGFmZmVjdGVkCiAJCSAqIGNwdXMuCiAJCSAqLwotCQlmb3JfZWFjaF9jcHVfbWFzayhpLCBvbmxpbmVfdGhyb3R0bGluZ19jcHVzKSB7CisJCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksIG9ubGluZV90aHJvdHRsaW5nX2NwdXMpIHsKIAkJCW1hdGNoX3ByID0gcGVyX2NwdShwcm9jZXNzb3JzLCBpKTsKIAkJCS8qCiAJCQkgKiBJZiB0aGUgcG9pbnRlciBpcyBpbnZhbGlkLCB3ZSB3aWxsIHJlcG9ydCB0aGUKQEAgLTEwNTYsNyArMTA2MCw4IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCQl0X3N0YXRlLmNwdSA9IGk7Ci0JCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoaSkpOworCQkJY3B1bWFza19vZl9jcHVfcHRyX25leHQobmV3X21hc2ssIGkpOworCQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbmV3X21hc2spOwogCQkJcmV0ID0gbWF0Y2hfcHItPnRocm90dGxpbmcuCiAJCQkJYWNwaV9wcm9jZXNzb3Jfc2V0X3Rocm90dGxpbmcoCiAJCQkJbWF0Y2hfcHIsIHRfc3RhdGUudGFyZ2V0X3N0YXRlKTsKQEAgLTEwNjgsNyArMTA3Myw3IEBACiAJICogYWZmZWN0ZWQgY3B1IHRvIHVwZGF0ZSB0aGUgVC1zdGF0ZXMuCiAJICogVGhlIG5vdGlmaWVyIGV2ZW50IGlzIFRIUk9UVExJTkdfUE9TVENIQU5HRQogCSAqLwotCWZvcl9lYWNoX2NwdV9tYXNrKGksIG9ubGluZV90aHJvdHRsaW5nX2NwdXMpIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBvbmxpbmVfdGhyb3R0bGluZ19jcHVzKSB7CiAJCXRfc3RhdGUuY3B1ID0gaTsKIAkJYWNwaV9wcm9jZXNzb3JfdGhyb3R0bGluZ19ub3RpZmllcihUSFJPVFRMSU5HX1BPU1RDSEFOR0UsCiAJCQkJCQkJJnRfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggZjMxMzJhYS4uZjZmNTJjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC00NzEsNyArNDcxLDcgQEAKIAlkZXZpY2UtPmRldi5yZWxlYXNlID0gJmFjcGlfZGV2aWNlX3JlbGVhc2U7CiAJcmVzdWx0ID0gZGV2aWNlX2FkZCgmZGV2aWNlLT5kZXYpOwogCWlmKHJlc3VsdCkgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJFcnJvciBhZGRpbmcgZGV2aWNlICVzIiwgZGV2aWNlLT5kZXYuYnVzX2lkKTsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXYsICJFcnJvciBhZGRpbmcgZGV2aWNlXG4iKTsKIAkJZ290byBlbmQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwppbmRleCA4NGM3OTVmLi4zMGEzNDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKQEAgLTExNzksOCArMTE3OSw4IEBACiAKIAl0ei0+dHpfZW5hYmxlZCA9IDE7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiJXMgaXMgcmVnaXN0ZXJlZCBhcyB0aGVybWFsX3pvbmUlZFxuIiwKLQkJCXR6LT5kZXZpY2UtPmRldi5idXNfaWQsIHR6LT50aGVybWFsX3pvbmUtPmlkKTsKKwlkZXZfaW5mbygmdHotPmRldmljZS0+ZGV2LCAicmVnaXN0ZXJlZCBhcyB0aGVybWFsX3pvbmUlZFxuIiwKKwkJIHR6LT50aGVybWFsX3pvbmUtPmlkKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCA2NGM4ODkzLi4zN2I5ZTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtNzYyLDkgKzc2Miw4IEBACiAJCWlmIChJU19FUlIoZGV2aWNlLT5jZGV2KSkKIAkJCXJldHVybjsKIAotCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWAotCQkJIiVzIGlzIHJlZ2lzdGVyZWQgYXMgY29vbGluZ19kZXZpY2UlZFxuIiwKLQkJCWRldmljZS0+ZGV2LT5kZXYuYnVzX2lkLCBkZXZpY2UtPmNkZXYtPmlkKTsKKwkJZGV2X2luZm8oJmRldmljZS0+ZGV2LT5kZXYsICJyZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsCisJCQkgZGV2aWNlLT5jZGV2LT5pZCk7CiAJCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmRldi0+ZGV2LmtvYmosCiAJCQkJJmRldmljZS0+Y2Rldi0+ZGV2aWNlLmtvYmosCiAJCQkJInRoZXJtYWxfY29vbGluZyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vS2NvbmZpZyBiL2RyaXZlcnMvYXRtL0tjb25maWcKaW5kZXggYjU1NGVkYS4uZjE5N2ExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vS2NvbmZpZworKysgYi9kcml2ZXJzL2F0bS9LY29uZmlnCkBAIC0yOTQsNyArMjk0LDcgQEAKIAogY29uZmlnIEFUTV9JQQogCXRyaXN0YXRlICJJbnRlcnBoYXNlIEFUTSBQQ0kgeDU3NS94NTI1L3g1MzEiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgITY0QklUCisJZGVwZW5kcyBvbiBQQ0kKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgSW50ZXJwaGFzZSAoaSlDaGlwU0FSIGFkYXB0ZXIgY2FyZHMKIAkgIHdoaWNoIGluY2x1ZGUgYSB2YXJpZXR5IG9mIHZhcmlhbnRzIGluIHRlcm0gb2YgdGhlIHNpemUgb2YgdGhlCkBAIC0zMjUsODEgKzMyNSwyMiBAQAogCSAgc3BlZWQgb2YgdGhlIGRyaXZlciwgYW5kIHRoZSBzaXplIG9mIHlvdXIgc3lzbG9nIGZpbGVzISBXaGVuCiAJICBpbmFjdGl2ZSwgdGhleSB3aWxsIGhhdmUgb25seSBhIG1vZGVzdCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuCiAKLWNvbmZpZyBBVE1fRk9SRTIwMEVfTUFZQkUKK2NvbmZpZyBBVE1fRk9SRTIwMEUKIAl0cmlzdGF0ZSAiRk9SRSBTeXN0ZW1zIDIwMEUtc2VyaWVzIgotCWRlcGVuZHMgb24gUENJIHx8IFNCVVMKKwlkZXBlbmRzIG9uIChQQ0kgfHwgU0JVUykKKwlzZWxlY3QgRldfTE9BREVSCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIEZPUkUgU3lzdGVtcyAyMDBFLXNlcmllcyBBVE0gYWRhcHRlcgogCSAgY2FyZHMuIEl0IHNpbXVsdGFuZW91c2x5IHN1cHBvcnRzIFBDQS0yMDBFIGFuZCBTQkEtMjAwRSBtb2RlbHMKIAkgIG9uIFBDSSBhbmQgU0JVUyBob3N0cy4gU2F5IFkgKG9yIE0gdG8gY29tcGlsZSBhcyBhIG1vZHVsZQogCSAgbmFtZWQgZm9yZV8yMDBlKSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBBVE0gYWRhcHRlcnMuCiAKLQkgIE5vdGUgdGhhdCB0aGUgZHJpdmVyIHdpbGwgYWN0dWFsbHkgYmUgY29tcGlsZWQgb25seSBpZiB5b3UKLQkgIGFkZGl0aW9uYWxseSBlbmFibGUgdGhlIHN1cHBvcnQgZm9yIFBDQS0yMDBFIGFuZC9vciBTQkEtMjAwRQotCSAgY2FyZHMuCi0KIAkgIFNlZSB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZm9yZTIwMGUudHh0PiBmb3IKIAkgIGZ1cnRoZXIgZGV0YWlscy4KIAotY29uZmlnIEFUTV9GT1JFMjAwRV9QQ0EKLQlib29sICJQQ0EtMjAwRSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVRNX0ZPUkUyMDBFX01BWUJFICYmIFBDSQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgeW91ciBQQ0EtMjAwRSBjYXJkcyB0byBiZSBwcm9iZWQuCi0KLWNvbmZpZyBBVE1fRk9SRTIwMEVfUENBX0RFRkFVTFRfRlcKLQlib29sICJVc2UgZGVmYXVsdCBQQ0EtMjAwRSBmaXJtd2FyZSAobm9ybWFsbHkgZW5hYmxlZCkiCi0JZGVwZW5kcyBvbiBBVE1fRk9SRTIwMEVfUENBCi0JaGVscAotCSAgVXNlIHRoZSBkZWZhdWx0IFBDQS0yMDBFIGZpcm13YXJlIGRhdGEgc2hpcHBlZCB3aXRoIHRoZSBkcml2ZXIuCi0KLQkgIE5vcm1hbCB1c2VycyBkbyBub3QgaGF2ZSB0byBkZWFsIHdpdGggdGhlIGZpcm13YXJlIHN0dWZmLCBzbwotCSAgdGhleSBzaG91bGQgc2F5IFkgaGVyZS4KLQotY29uZmlnIEFUTV9GT1JFMjAwRV9QQ0FfRlcKLQlzdHJpbmcgIlBhdGhuYW1lIG9mIHVzZXItc3VwcGxpZWQgYmluYXJ5IGZpcm13YXJlIgotCWRlcGVuZHMgb24gQVRNX0ZPUkUyMDBFX1BDQSAmJiAhQVRNX0ZPUkUyMDBFX1BDQV9ERUZBVUxUX0ZXCi0JZGVmYXVsdCAiIgotCWhlbHAKLQkgIFRoaXMgZGVmaW5lcyB0aGUgcGF0aG5hbWUgb2YgYW4gYWx0ZXJuYXRpdmUgUENBLTIwMEUgYmluYXJ5Ci0JICBmaXJtd2FyZSBpbWFnZSBzdXBwbGllZCBieSB0aGUgdXNlci4gVGhpcyBwYXRobmFtZSBtYXkgYmUKLQkgIGFic29sdXRlIG9yIHJlbGF0aXZlIHRvIHRoZSBkcml2ZXJzL2F0bSBkaXJlY3RvcnkuCi0KLQkgIFRoZSBkcml2ZXIgY29tZXMgd2l0aCBhbiBhZGVxdWF0ZSBmaXJtd2FyZSBpbWFnZSwgc28gbm9ybWFsIHVzZXJzIGRvCi0JICBub3QgaGF2ZSB0byBzdXBwbHkgYW4gYWx0ZXJuYXRpdmUgb25lLiBUaGV5IGp1c3Qgc2F5IFkgdG8gIlVzZQotCSAgZGVmYXVsdCBQQ0EtMjAwRSBmaXJtd2FyZSIgaW5zdGVhZC4KLQotY29uZmlnIEFUTV9GT1JFMjAwRV9TQkEKLQlib29sICJTQkEtMjAwRSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVRNX0ZPUkUyMDBFX01BWUJFICYmIFNCVVMKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHlvdXIgU0JBLTIwMEUgY2FyZHMgdG8gYmUgcHJvYmVkLgotCi1jb25maWcgQVRNX0ZPUkUyMDBFX1NCQV9ERUZBVUxUX0ZXCi0JYm9vbCAiVXNlIGRlZmF1bHQgU0JBLTIwMEUgZmlybXdhcmUgKG5vcm1hbGx5IGVuYWJsZWQpIgotCWRlcGVuZHMgb24gQVRNX0ZPUkUyMDBFX1NCQQotCWhlbHAKLQkgIFVzZSB0aGUgZGVmYXVsdCBTQkEtMjAwRSBmaXJtd2FyZSBkYXRhIHNoaXBwZWQgd2l0aCB0aGUgZHJpdmVyLgotCi0JICBOb3JtYWwgdXNlcnMgZG8gbm90IGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBmaXJtd2FyZSBzdHVmZiwgc28KLQkgIHRoZXkgc2hvdWxkIHNheSBZIGhlcmUuCi0KLWNvbmZpZyBBVE1fRk9SRTIwMEVfU0JBX0ZXCi0Jc3RyaW5nICJQYXRobmFtZSBvZiB1c2VyLXN1cHBsaWVkIGJpbmFyeSBmaXJtd2FyZSIKLQlkZXBlbmRzIG9uIEFUTV9GT1JFMjAwRV9TQkEgJiYgIUFUTV9GT1JFMjAwRV9TQkFfREVGQVVMVF9GVwotCWRlZmF1bHQgIiIKLQloZWxwCi0JICBUaGlzIGRlZmluZXMgdGhlIHBhdGhuYW1lIG9mIGFuIGFsdGVybmF0aXZlIFNCQS0yMDBFIGJpbmFyeQotCSAgZmlybXdhcmUgaW1hZ2Ugc3VwcGxpZWQgYnkgdGhlIHVzZXIuIFRoaXMgcGF0aG5hbWUgbWF5IGJlCi0JICBhYnNvbHV0ZSBvciByZWxhdGl2ZSB0byB0aGUgZHJpdmVycy9hdG0gZGlyZWN0b3J5LgotCi0JICBUaGUgZHJpdmVyIGNvbWVzIHdpdGggYW4gYWRlcXVhdGUgZmlybXdhcmUgaW1hZ2UsIHNvIG5vcm1hbCB1c2VycyBkbwotCSAgbm90IGhhdmUgdG8gc3VwcGx5IGFuIGFsdGVybmF0aXZlIG9uZS4gVGhleSBqdXN0IHNheSBZIHRvICJVc2UKLQkgIGRlZmF1bHQgU0JBLTIwMEUgZmlybXdhcmUiLCBhYm92ZS4KLQogY29uZmlnIEFUTV9GT1JFMjAwRV9VU0VfVEFTS0xFVAogCWJvb2wgIkRlZmVyIGludGVycnVwdCB3b3JrIHRvIGEgdGFza2xldCIKLQlkZXBlbmRzIG9uIChQQ0kgfHwgU0JVUykgJiYgKEFUTV9GT1JFMjAwRV9QQ0EgfHwgQVRNX0ZPUkUyMDBFX1NCQSkKKwlkZXBlbmRzIG9uIEFUTV9GT1JFMjAwRQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgZGVmZXJzIHdvcmsgdG8gYmUgZG9uZSBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8gYQpAQCAtNDA4LDcgKzM0OSw3IEBACiAKIGNvbmZpZyBBVE1fRk9SRTIwMEVfVFhfUkVUUlkKIAlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHR4IHJldHJpZXMiCi0JZGVwZW5kcyBvbiAoUENJIHx8IFNCVVMpICYmIChBVE1fRk9SRTIwMEVfUENBIHx8IEFUTV9GT1JFMjAwRV9TQkEpCisJZGVwZW5kcyBvbiBBVE1fRk9SRTIwMEUKIAlkZWZhdWx0ICIxNiIKIAktLS1oZWxwLS0tCiAJICBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHRyYW5zbWl0CkBAIC00MjUsNyArMzY2LDcgQEAKIAogY29uZmlnIEFUTV9GT1JFMjAwRV9ERUJVRwogCWludCAiRGVidWdnaW5nIGxldmVsICgwLTMpIgotCWRlcGVuZHMgb24gKFBDSSB8fCBTQlVTKSAmJiAoQVRNX0ZPUkUyMDBFX1BDQSB8fCBBVE1fRk9SRTIwMEVfU0JBKQorCWRlcGVuZHMgb24gQVRNX0ZPUkUyMDBFCiAJZGVmYXVsdCAiMCIKIAloZWxwCiAJICBTcGVjaWZpZXMgdGhlIGxldmVsIG9mIGRlYnVnZ2luZyBtZXNzYWdlcyBpc3N1ZWQgYnkgdGhlIGRyaXZlci4KQEAgLTQzNiwxMiArMzc3LDYgQEAKIAkgIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIGRyaXZlciwgYW5kIHRoZSBzaXplIG9mIHlvdXIgc3lzbG9nIGZpbGVzIQogCSAgS2VlcCB0aGUgZGVidWdnaW5nIGxldmVsIHRvIDAgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb25zLgogCi1jb25maWcgQVRNX0ZPUkUyMDBFCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIChQQ0kgfHwgU0JVUykgJiYgKEFUTV9GT1JFMjAwRV9QQ0EgfHwgQVRNX0ZPUkUyMDBFX1NCQSkKLQlkZWZhdWx0IG0gaWYgQVRNX0ZPUkUyMDBFX01BWUJFIT15Ci0JZGVmYXVsdCB5IGlmIEFUTV9GT1JFMjAwRV9NQVlCRT15Ci0KIGNvbmZpZyBBVE1fSEUKIAl0cmlzdGF0ZSAiRm9yZVJ1bm5lciBIRSBTZXJpZXMiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL01ha2VmaWxlIGIvZHJpdmVycy9hdG0vTWFrZWZpbGUKaW5kZXggNzQ5MjY2ZS4uMGJmYjMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9hdG0vTWFrZWZpbGUKQEAgLTMsMTQgKzMsNiBAQAogIwogCiBmb3JlXzIwMGUtb2Jqcwk6PSBmb3JlMjAwZS5vCi1ob3N0cHJvZ3MteQk6PSBmb3JlMjAwZV9ta2Zpcm0KLQotIyBGaWxlcyBnZW5lcmF0ZWQgdGhhdCBzaGFsbCBiZSByZW1vdmVkIHVwb24gbWFrZSBjbGVhbgotY2xlYW4tZmlsZXMgOj0gcGNhMjAwZS5iaW4gcGNhMjAwZS5iaW4xIHBjYTIwMGUuYmluMiBwY2EyMDBlX2VjZC5iaW4gXAotCXBjYTIwMGVfZWNkLmJpbjEgcGNhMjAwZV9lY2QuYmluMiBzYmEyMDBlX2VjZC5iaW4gc2JhMjAwZV9lY2QuYmluMSBcCi0Jc2JhMjAwZV9lY2QuYmluMgotIyBGaXJtd2FyZSBnZW5lcmF0ZWQgdGhhdCBzaGFsbCBiZSByZW1vdmVkIHVwb24gbWFrZSBjbGVhbgotY2xlYW4tZmlsZXMgKz0gZm9yZTIwMGVfcGNhX2Z3LmMgZm9yZTIwMGVfc2JhX2Z3LmMKIAogb2JqLSQoQ09ORklHX0FUTV9aQVRNKQkJKz0gemF0bS5vIHVQRDk4NDAyLm8KIG9iai0kKENPTkZJR19BVE1fTklDU1RBUikJKz0gbmljc3Rhci5vCkBAIC0zNiwzOCArMjgsNyBAQAogb2JqLSQoQ09ORklHX0FUTV9GSVJFU1RSRUFNKQkrPSBmaXJlc3RyZWFtLm8KIG9iai0kKENPTkZJR19BVE1fTEFOQUkpCQkrPSBsYW5haS5vCiAKLWlmZXEgKCQoQ09ORklHX0FUTV9GT1JFMjAwRV9QQ0EpLHkpCi0gIGZvcmVfMjAwZS1vYmpzCQkrPSBmb3JlMjAwZV9wY2FfZncubwotICAjIGd1ZXNzIHRoZSB0YXJnZXQgZW5kaWFuZXNzIHRvIGNob29zZSB0aGUgcmlnaHQgUENBLTIwMEUgZmlybXdhcmUgaW1hZ2UKLSAgaWZlcSAoJChDT05GSUdfQVRNX0ZPUkUyMDBFX1BDQV9ERUZBVUxUX0ZXKSx5KQotICAgIGJ5dGVvcmRlci5oCQkJOj0gaW5jbHVkZSQoaWYgJChwYXRzdWJzdCAkKHNyY3RyZWUpLCwkKG9ianRyZWUpKSwyKS9hc20vYnl0ZW9yZGVyLmgKLSAgICBDT05GSUdfQVRNX0ZPUkUyMDBFX1BDQV9GVwk6PSAkKG9iaikvcGNhMjAwZSQoaWYgJChzaGVsbCAkKENDKSAkKEtCVUlMRF9DUFBGTEFHUykgLUUgLWRNICQoYnl0ZW9yZGVyLmgpIHwgZ3JlcCAnIF9fTElUVExFX0VORElBTiAnKSwuYmluLF9lY2QuYmluMikKLSAgZW5kaWYKLWVuZGlmCi0KLWlmZXEgKCQoQ09ORklHX0FUTV9GT1JFMjAwRV9TQkEpLHkpCi0gIGZvcmVfMjAwZS1vYmpzCQkrPSBmb3JlMjAwZV9zYmFfZncubwotICBpZmVxICgkKENPTkZJR19BVE1fRk9SRTIwMEVfU0JBX0RFRkFVTFRfRlcpLHkpCi0gICAgQ09ORklHX0FUTV9GT1JFMjAwRV9TQkFfRlcJOj0gJChvYmopL3NiYTIwMGVfZWNkLmJpbjIKLSAgZW5kaWYKLWVuZGlmCiBvYmotJChDT05GSUdfQVRNX0hFKQkJKz0gaGUubwogaWZlcSAoJChDT05GSUdfQVRNX0hFX1VTRV9TVU5JKSx5KQogICBvYmotJChDT05GSUdfQVRNX0hFKQkJKz0gc3VuaS5vCiBlbmRpZgotCi0jIEZPUkUgU3lzdGVtcyAyMDBFLXNlcmllcyBmaXJtd2FyZSBtYWdpYwotJChvYmopL2ZvcmUyMDBlX3BjYV9mdy5jOiAkKHBhdHN1YnN0ICIlIiwgJSwgJChDT05GSUdfQVRNX0ZPUkUyMDBFX1BDQV9GVykpIFwKLQkJCSAgJChvYmopL2ZvcmUyMDBlX21rZmlybQotCSQob2JqKS9mb3JlMjAwZV9ta2Zpcm0gLWsgLWIgX2ZvcmUyMDBlX3BjYV9mdyBcCi0JICAtaSAkKENPTkZJR19BVE1fRk9SRTIwMEVfUENBX0ZXKSAtbyAkQAotCi0kKG9iaikvZm9yZTIwMGVfc2JhX2Z3LmM6ICQocGF0c3Vic3QgIiUiLCAlLCAkKENPTkZJR19BVE1fRk9SRTIwMEVfU0JBX0ZXKSkgXAotCQkJICAkKG9iaikvZm9yZTIwMGVfbWtmaXJtCi0JJChvYmopL2ZvcmUyMDBlX21rZmlybSAtayAtYiBfZm9yZTIwMGVfc2JhX2Z3IFwKLQkgIC1pICQoQ09ORklHX0FUTV9GT1JFMjAwRV9TQkFfRlcpIC1vICRACi0KLSMgZGVhbCB3aXRoIHRoZSB2YXJpb3VzIHN1ZmZpeGVzIG9mIHRoZSBiaW5hcnkgZmlybXdhcmUgaW1hZ2VzCi0kKG9iaikvJS5iaW4gJChvYmopLyUuYmluMSAkKG9iaikvJS5iaW4yOiAkKHNyYykvJS5kYXRhCi0Jb2JqY29weSAtSWloZXggJDwgLU9iaW5hcnkgJEAuZ3oKLQlnemlwIC1uIC1kZiAkQC5negpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKaW5kZXggNDMyMTgxZS4uZDVjMWJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYworKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRtX3N1bmkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTQ1LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotI2lmZGVmIENPTkZJR19BVE1fRk9SRTIwMEVfU0JBCisjaWZkZWYgQ09ORklHX1NCVVMKICNpbmNsdWRlIDxhc20vaWRwcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3NidXMuaD4KICNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KQEAgLTM4Miw5ICszODMsNiBAQAogICAgIGNhc2UgRk9SRTIwMEVfU1RBVEVfU1RBUlRfRlc6CiAJLyogbm90aGluZyB0byBkbyBmb3IgdGhhdCBzdGF0ZSAqLwogCi0gICAgY2FzZSBGT1JFMjAwRV9TVEFURV9MT0FEX0ZXOgotCS8qIG5vdGhpbmcgdG8gZG8gZm9yIHRoYXQgc3RhdGUgKi8KLQogICAgIGNhc2UgRk9SRTIwMEVfU1RBVEVfUkVTRVQ6CiAJLyogbm90aGluZyB0byBkbyBmb3IgdGhhdCBzdGF0ZSAqLwogCkBAIC00MDUsNyArNDAzLDcgQEAKIH0KIAogCi0jaWZkZWYgQ09ORklHX0FUTV9GT1JFMjAwRV9QQ0EKKyNpZmRlZiBDT05GSUdfUENJCiAKIHN0YXRpYyB1MzIgZm9yZTIwMGVfcGNhX3JlYWQodm9sYXRpbGUgdTMyIF9faW9tZW0gKmFkZHIpCiB7CkBAIC02NTgsMTAgKzY1NiwxMCBAQAogCQkgICBwY2lfZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwY2lfZGV2LT5kZXZmbikpOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0FUTV9GT1JFMjAwRV9QQ0EgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIAotI2lmZGVmIENPTkZJR19BVE1fRk9SRTIwMEVfU0JBCisjaWZkZWYgQ09ORklHX1NCVVMKIAogc3RhdGljIHUzMgogZm9yZTIwMGVfc2JhX3JlYWQodm9sYXRpbGUgdTMyIF9faW9tZW0gKmFkZHIpCkBAIC05MDcsNyArOTA1LDcgQEAKIAogICAgIHJldHVybiBzcHJpbnRmKHBhZ2UsICIgICBTQlVTIHNsb3QvZGV2aWNlOlx0XHQlZC8nJXMnXG4iLCBzYnVzX2Rldi0+c2xvdCwgc2J1c19kZXYtPnByb21fbmFtZSk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0FUTV9GT1JFMjAwRV9TQkEgKi8KKyNlbmRpZiAvKiBDT05GSUdfU0JVUyAqLwogCiAKIHN0YXRpYyB2b2lkCkBAIC0yNTUyLDEzICsyNTUwLDUzIEBACiAgICAgd2hpbGUgKGZvcmUyMDBlX21vbml0b3JfZ2V0Yyhmb3JlMjAwZSkgPj0gMCk7CiB9CiAKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgRldfRVhUICIuYmluIgorI2Vsc2UKKyNkZWZpbmUgRldfRVhUICJfZWNkLmJpbjIiCisjZW5kaWYKIAogc3RhdGljIGludCBfX2RldmluaXQKLWZvcmUyMDBlX3N0YXJ0X2Z3KHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCitmb3JlMjAwZV9sb2FkX2FuZF9zdGFydF9mdyhzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewotICAgIGludCAgICAgICAgICAgICAgIG9rOwotICAgIGNoYXIgICAgICAgICAgICAgIGNtZFsgNDggXTsKLSAgICBzdHJ1Y3QgZndfaGVhZGVyKiBmd19oZWFkZXIgPSAoc3RydWN0IGZ3X2hlYWRlciopIGZvcmUyMDBlLT5idXMtPmZ3X2RhdGE7CisgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CisgICAgc3RydWN0IGZ3X2hlYWRlciAqZndfaGVhZGVyOworICAgIHUzMiAqZndfZGF0YSwgZndfc2l6ZTsKKyAgICB1MzIgX19pb21lbSAqbG9hZF9hZGRyOworICAgIGNoYXIgYnVmWzQ4XTsKKyAgICBpbnQgZXJyID0gLUVOT0RFVjsKKworICAgIGlmIChzdHJjbXAoZm9yZTIwMGUtPmJ1cy0+bW9kZWxfbmFtZSwgIlBDQS0yMDBFIikgPT0gMCkKKwlkZXZpY2UgPSAmKChzdHJ1Y3QgcGNpX2RldiAqKSBmb3JlMjAwZS0+YnVzX2RldiktPmRldjsKKyNpZmRlZiBDT05GSUdfU0JVUworICAgIGVsc2UgaWYgKHN0cmNtcChmb3JlMjAwZS0+YnVzLT5tb2RlbF9uYW1lLCAiU0JBLTIwMEUiKSA9PSAwKQorCWRldmljZSA9ICYoKHN0cnVjdCBzYnVzX2RldiAqKSBmb3JlMjAwZS0+YnVzX2RldiktPm9mZGV2LmRldjsKKyNlbmRpZgorICAgIGVsc2UKKwlyZXR1cm4gZXJyOworCisgICAgc3ByaW50ZihidWYsICIlcyVzIiwgZm9yZTIwMGUtPmJ1cy0+cHJvY19uYW1lLCBGV19FWFQpOworICAgIGlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgYnVmLCBkZXZpY2UpID09IDEpIHsKKwlwcmludGsoRk9SRTIwMEUgIm1pc3NpbmcgJXMgZmlybXdhcmUgaW1hZ2VcbiIsIGZvcmUyMDBlLT5idXMtPm1vZGVsX25hbWUpOworCXJldHVybiBlcnI7CisgICAgfQorCisgICAgZndfZGF0YSA9ICh1MzIgKikgZmlybXdhcmUtPmRhdGE7CisgICAgZndfc2l6ZSA9IGZpcm13YXJlLT5zaXplIC8gc2l6ZW9mKHUzMik7CisgICAgZndfaGVhZGVyID0gKHN0cnVjdCBmd19oZWFkZXIgKikgZmlybXdhcmUtPmRhdGE7CisgICAgbG9hZF9hZGRyID0gZm9yZTIwMGUtPnZpcnRfYmFzZSArIGxlMzJfdG9fY3B1KGZ3X2hlYWRlci0+bG9hZF9vZmZzZXQpOworCisgICAgRFBSSU5USygyLCAiZGV2aWNlICVzIGZpcm13YXJlIGJlaW5nIGxvYWRlZCBhdCAweCVwICglZCB3b3JkcylcbiIsCisJICAgIGZvcmUyMDBlLT5uYW1lLCBsb2FkX2FkZHIsIGZ3X3NpemUpOworCisgICAgaWYgKGxlMzJfdG9fY3B1KGZ3X2hlYWRlci0+bWFnaWMpICE9IEZXX0hFQURFUl9NQUdJQykgeworCXByaW50ayhGT1JFMjAwRSAiY29ycnVwdGVkICVzIGZpcm13YXJlIGltYWdlXG4iLCBmb3JlMjAwZS0+YnVzLT5tb2RlbF9uYW1lKTsKKwlnb3RvIHJlbGVhc2U7CisgICAgfQorCisgICAgZm9yICg7IGZ3X3NpemUtLTsgZndfZGF0YSsrLCBsb2FkX2FkZHIrKykKKwlmb3JlMjAwZS0+YnVzLT53cml0ZShsZTMyX3RvX2NwdSgqZndfZGF0YSksIGxvYWRfYWRkcik7CiAKICAgICBEUFJJTlRLKDIsICJkZXZpY2UgJXMgZmlybXdhcmUgYmVpbmcgc3RhcnRlZFxuIiwgZm9yZTIwMGUtPm5hbWUpOwogCkBAIC0yNTY3LDQ2ICsyNjA1LDIyIEBACiAgICAgZm9yZTIwMGVfc3BpbigxMDApOwogI2VuZGlmCiAKLSAgICBzcHJpbnRmKGNtZCwgIlxyZ28gJXhcciIsIGxlMzJfdG9fY3B1KGZ3X2hlYWRlci0+c3RhcnRfb2Zmc2V0KSk7CisgICAgc3ByaW50ZihidWYsICJccmdvICV4XHIiLCBsZTMyX3RvX2NwdShmd19oZWFkZXItPnN0YXJ0X29mZnNldCkpOworICAgIGZvcmUyMDBlX21vbml0b3JfcHV0cyhmb3JlMjAwZSwgYnVmKTsKIAotICAgIGZvcmUyMDBlX21vbml0b3JfcHV0cyhmb3JlMjAwZSwgY21kKTsKLQotICAgIG9rID0gZm9yZTIwMGVfaW9fcG9sbChmb3JlMjAwZSwgJmZvcmUyMDBlLT5jcF9tb25pdG9yLT5ic3RhdCwgQlNUQVRfQ1BfUlVOTklORywgMTAwMCk7Ci0gICAgaWYgKG9rID09IDApIHsKKyAgICBpZiAoZm9yZTIwMGVfaW9fcG9sbChmb3JlMjAwZSwgJmZvcmUyMDBlLT5jcF9tb25pdG9yLT5ic3RhdCwgQlNUQVRfQ1BfUlVOTklORywgMTAwMCkgPT0gMCkgewogCXByaW50ayhGT1JFMjAwRSAiZGV2aWNlICVzIGZpcm13YXJlIGRpZG4ndCBzdGFydFxuIiwgZm9yZTIwMGUtPm5hbWUpOwotCXJldHVybiAtRU5PREVWOworCWdvdG8gcmVsZWFzZTsKICAgICB9CiAKICAgICBwcmludGsoRk9SRTIwMEUgImRldmljZSAlcyBmaXJtd2FyZSBzdGFydGVkXG4iLCBmb3JlMjAwZS0+bmFtZSk7CiAKICAgICBmb3JlMjAwZS0+c3RhdGUgPSBGT1JFMjAwRV9TVEFURV9TVEFSVF9GVzsKLSAgICByZXR1cm4gMDsKLX0KKyAgICBlcnIgPSAwOwogCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1mb3JlMjAwZV9sb2FkX2Z3KHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCi17Ci0gICAgX19sZTMyKiBmd19kYXRhID0gKF9fbGUzMiopIGZvcmUyMDBlLT5idXMtPmZ3X2RhdGE7Ci0gICAgdTMyICBmd19zaXplID0gKHUzMikgKmZvcmUyMDBlLT5idXMtPmZ3X3NpemUgLyBzaXplb2YodTMyKTsKLQotICAgIHN0cnVjdCBmd19oZWFkZXIqIGZ3X2hlYWRlciA9IChzdHJ1Y3QgZndfaGVhZGVyKikgZndfZGF0YTsKLQotICAgIHUzMiBfX2lvbWVtICpsb2FkX2FkZHIgPSBmb3JlMjAwZS0+dmlydF9iYXNlICsgbGUzMl90b19jcHUoZndfaGVhZGVyLT5sb2FkX29mZnNldCk7Ci0KLSAgICBEUFJJTlRLKDIsICJkZXZpY2UgJXMgZmlybXdhcmUgYmVpbmcgbG9hZGVkIGF0IDB4JXAgKCVkIHdvcmRzKVxuIiwgCi0JICAgIGZvcmUyMDBlLT5uYW1lLCBsb2FkX2FkZHIsIGZ3X3NpemUpOwotCi0gICAgaWYgKGxlMzJfdG9fY3B1KGZ3X2hlYWRlci0+bWFnaWMpICE9IEZXX0hFQURFUl9NQUdJQykgewotCXByaW50ayhGT1JFMjAwRSAiY29ycnVwdGVkICVzIGZpcm13YXJlIGltYWdlXG4iLCBmb3JlMjAwZS0+YnVzLT5tb2RlbF9uYW1lKTsKLQlyZXR1cm4gLUVOT0RFVjsKLSAgICB9Ci0KLSAgICBmb3IgKDsgZndfc2l6ZS0tOyBmd19kYXRhKyssIGxvYWRfYWRkcisrKQotCWZvcmUyMDBlLT5idXMtPndyaXRlKGxlMzJfdG9fY3B1KCpmd19kYXRhKSwgbG9hZF9hZGRyKTsKLQotICAgIGZvcmUyMDBlLT5zdGF0ZSA9IEZPUkUyMDBFX1NUQVRFX0xPQURfRlc7Ci0gICAgcmV0dXJuIDA7CityZWxlYXNlOgorICAgIHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworICAgIHJldHVybiBlcnI7CiB9CiAKIApAQCAtMjY1MiwxMCArMjY2Niw3IEBACiAgICAgaWYgKGZvcmUyMDBlX3Jlc2V0KGZvcmUyMDBlLCAxKSA8IDApCiAJcmV0dXJuIC1FTk9ERVY7CiAKLSAgICBpZiAoZm9yZTIwMGVfbG9hZF9mdyhmb3JlMjAwZSkgPCAwKQotCXJldHVybiAtRU5PREVWOwotCi0gICAgaWYgKGZvcmUyMDBlX3N0YXJ0X2Z3KGZvcmUyMDBlKSA8IDApCisgICAgaWYgKGZvcmUyMDBlX2xvYWRfYW5kX3N0YXJ0X2Z3KGZvcmUyMDBlKSA8IDApCiAJcmV0dXJuIC1FTk9ERVY7CiAKICAgICBpZiAoZm9yZTIwMGVfaW5pdGlhbGl6ZShmb3JlMjAwZSkgPCAwKQpAQCAtMjY4OSw3ICsyNzAwLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19BVE1fRk9SRTIwMEVfUENBCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGludCBfX2RldmluaXQKIGZvcmUyMDBlX3BjYV9kZXRlY3Qoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZW50KQogewpAQCAtMjgwNCw3ICsyODE1LDcgQEAKIAl9CiAgICAgfQogCi0jaWZkZWYgQ09ORklHX0FUTV9GT1JFMjAwRV9QQ0EKKyNpZmRlZiBDT05GSUdfUENJCiAgICAgaWYgKCFwY2lfcmVnaXN0ZXJfZHJpdmVyKCZmb3JlMjAwZV9wY2FfZHJpdmVyKSkKIAlyZXR1cm4gMDsKICNlbmRpZgpAQCAtMjgyMSw3ICsyODMyLDcgQEAKIHsKICAgICBzdHJ1Y3QgZm9yZTIwMGUgKmZvcmUyMDBlLCAqbmV4dDsKIAotI2lmZGVmIENPTkZJR19BVE1fRk9SRTIwMEVfUENBCisjaWZkZWYgQ09ORklHX1BDSQogICAgIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZm9yZTIwMGVfcGNhX2RyaXZlcik7CiAjZW5kaWYKIApAQCAtMzE0MCwxOSArMzE1MSw5IEBACiB9OwogCiAKLSNpZmRlZiBDT05GSUdfQVRNX0ZPUkUyMDBFX1BDQQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgX2ZvcmUyMDBlX3BjYV9md19kYXRhW107Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBfZm9yZTIwMGVfcGNhX2Z3X3NpemU7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVRNX0ZPUkUyMDBFX1NCQQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgX2ZvcmUyMDBlX3NiYV9md19kYXRhW107Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBfZm9yZTIwMGVfc2JhX2Z3X3NpemU7Ci0jZW5kaWYKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBmb3JlMjAwZV9idXMgZm9yZTIwMGVfYnVzW10gPSB7Ci0jaWZkZWYgQ09ORklHX0FUTV9GT1JFMjAwRV9QQ0EKKyNpZmRlZiBDT05GSUdfUENJCiAgICAgeyAiUENBLTIwMEUiLCAicGNhMjAwZSIsIDMyLCA0LCAzMiwgCi0gICAgICBfZm9yZTIwMGVfcGNhX2Z3X2RhdGEsICZfZm9yZTIwMGVfcGNhX2Z3X3NpemUsCiAgICAgICBmb3JlMjAwZV9wY2FfcmVhZCwKICAgICAgIGZvcmUyMDBlX3BjYV93cml0ZSwKICAgICAgIGZvcmUyMDBlX3BjYV9kbWFfbWFwLApAQCAtMzE3Myw5ICszMTc0LDggQEAKICAgICAgIGZvcmUyMDBlX3BjYV9wcm9jX3JlYWQsCiAgICAgfSwKICNlbmRpZgotI2lmZGVmIENPTkZJR19BVE1fRk9SRTIwMEVfU0JBCisjaWZkZWYgQ09ORklHX1NCVVMKICAgICB7ICJTQkEtMjAwRSIsICJzYmEyMDBlIiwgMzIsIDY0LCAzMiwKLSAgICAgIF9mb3JlMjAwZV9zYmFfZndfZGF0YSwgJl9mb3JlMjAwZV9zYmFfZndfc2l6ZSwKICAgICAgIGZvcmUyMDBlX3NiYV9yZWFkLAogICAgICAgZm9yZTIwMGVfc2JhX3dyaXRlLAogICAgICAgZm9yZTIwMGVfc2JhX2RtYV9tYXAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5oIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuaAppbmRleCA4ZGQ0YWE3Li41YzZlN2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5oCisrKyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmgKQEAgLTc1NCw3ICs3NTQsNiBAQAogICAgIEZPUkUyMDBFX1NUQVRFX0NPTkZJR1VSRSwgICAgIC8qIGJ1cyBpbnRlcmZhY2UgY29uZmlndXJlZCAgICAgICAgICAqLwogICAgIEZPUkUyMDBFX1NUQVRFX01BUCwgICAgICAgICAgIC8qIGJvYXJkIHNwYWNlIG1hcHBlZCBpbiBob3N0IG1lbW9yeSAqLwogICAgIEZPUkUyMDBFX1NUQVRFX1JFU0VULCAgICAgICAgIC8qIGJvYXJkIHJlc2V0dGVkICAgICAgICAgICAgICAgICAgICAqLwotICAgIEZPUkUyMDBFX1NUQVRFX0xPQURfRlcsICAgICAgIC8qIGZpcm13YXJlIGxvYWRlZCAgICAgICAgICAgICAgICAgICAqLwogICAgIEZPUkUyMDBFX1NUQVRFX1NUQVJUX0ZXLCAgICAgIC8qIGZpcm13YXJlIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAqLwogICAgIEZPUkUyMDBFX1NUQVRFX0lOSVRJQUxJWkUsICAgIC8qIGluaXRpYWxpemUgY29tbWFuZCBzdWNjZXNzZnVsICAgICAqLwogICAgIEZPUkUyMDBFX1NUQVRFX0lOSVRfQ01EUSwgICAgIC8qIGNvbW1hbmQgcXVldWUgaW5pdGlhbGl6ZWQgICAgICAgICAqLwpAQCAtODAzLDggKzgwMiw2IEBACiAgICAgaW50ICAgICAgICAgICAgICAgICAgZGVzY3JfYWxpZ25tZW50OyAgICAgLyogdHBkL3JwZC9yYmQgRE1BIGFsaWdubWVudCByZXF1aXJlbWVudCAgKi8KICAgICBpbnQgICAgICAgICAgICAgICAgICBidWZmZXJfYWxpZ25tZW50OyAgICAvKiByeCBidWZmZXJzIERNQSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgICAqLwogICAgIGludCAgICAgICAgICAgICAgICAgIHN0YXR1c19hbGlnbm1lbnQ7ICAgIC8qIHN0YXR1cyB3b3JkcyBETUEgYWxpZ25tZW50IHJlcXVpcmVtZW50ICovCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciogZndfZGF0YTsgICAgICAgICAgICAgLyogYWRkcmVzcyBvZiBmaXJtd2FyZSBkYXRhIHN0YXJ0ICAgICAgICAgKi8KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQqICBmd19zaXplOyAgICAgICAgICAgICAvKiBhZGRyZXNzIG9mIGZpcm13YXJlIGRhdGEgc2l6ZSAgICAgICAgICAqLwogICAgIHUzMiAgICAgICAgICAgICAgICAgICgqcmVhZCkodm9sYXRpbGUgdTMyIF9faW9tZW0gKik7CiAgICAgdm9pZCAgICAgICAgICAgICAgICAgKCp3cml0ZSkodTMyLCB2b2xhdGlsZSB1MzIgX19pb21lbSAqKTsKICAgICB1MzIgICAgICAgICAgICAgICAgICAoKmRtYV9tYXApKHN0cnVjdCBmb3JlMjAwZSosIHZvaWQqLCBpbnQsIGludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9mb3JlMjAwZV9maXJtd2FyZV9jb3B5cmlnaHQgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZV9maXJtd2FyZV9jb3B5cmlnaHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OGU2NDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGVfZmlybXdhcmVfY29weXJpZ2h0CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotCi1UaGVzZSBtaWNyb2NvZGUgZGF0YSBhcmUgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIAotCi1XZSB3b3VsZCBwcmVmZXIgeW91IG5vdCB0byBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGl0IGFuZCBub3QgdG8gYXNrCi1mb3IgYXNzZW1ibHkgb3Igb3RoZXIgbWljcm9jb2RlIHNvdXJjZS4KLQotQ29weXJpZ2h0IChjKSAxOTk1LTIwMDAgRk9SRSBTeXN0ZW1zLCBJbmMuLCBhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiAgVGhpcyAKLW5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IgcHVibGljIGFjY2VzcyB0byB0aGVzZSBtYXRlcmlhbHMgd2hpY2gKLWFyZSBhIHRyYWRlIHNlY3JldCBvZiBGT1JFIFN5c3RlbXMsIEluYy4gb3IgaXRzIHN1YnNpZGlhcmllcyBvciBhZmZpbGlhdGVzIAotKHRvZ2V0aGVyIHJlZmVycmVkIHRvIGFzICJGT1JFIiksIGFuZCB3aGljaCBtYXkgbm90IGJlIHJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgCi1vciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCBGT1JFJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsCi1yaWdodHMgcmVzZXJ2ZWQuCi0KLVUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cy4gIElmIHlvdSBhcmUgbGljZW5zaW5nIHRoZSBTb2Z0d2FyZSBvbiAKLWJlaGFsZiBvZiB0aGUgVS5TLiBHb3Zlcm5tZW50ICgiR292ZXJubWVudCIpLCB0aGUgZm9sbG93aW5nIHByb3Zpc2lvbnMgYXBwbHkKLXRvIHlvdS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBzdXBwbGllZCB0byB0aGUgRGVwYXJ0bWVudCBvZiBEZWZlbnNlICgiRG9EIiksIGl0IAotaXMgY2xhc3NpZmllZCBhcyAiQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSIgdW5kZXIgcGFyYWdyYXBoIDI1Mi4yMjctNzAxNAotb2YgdGhlIERvRCBTdXBwbGVtZW50IHRvIHRoZSBGZWRlcmFsIEFjcXVpc2l0aW9uIFJlZ3VsYXRpb25zICgiREZBUlMiKSAob3IgYW55IAotc3VjY2Vzc29yIHJlZ3VsYXRpb25zKSBhbmQgdGhlIEdvdmVybm1lbnQgaXMgYWNxdWlyaW5nIG9ubHkgdGhlIGxpY2Vuc2UKLXJpZ2h0cyBncmFudGVkIGhlcmVpbiAodGhlIGxpY2Vuc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIG5vbi1Hb3Zlcm5tZW50IAotdXNlcnMpLiAgSWYgdGhlIFNvZnR3YXJlIGlzIHN1cHBsaWVkIHRvIGFueSB1bml0IG9yIGFnZW5jeSBvZiB0aGUgR292ZXJubWVudAotb3RoZXIgdGhhbiB0aGUgRG9ELCBpdCBpcyBjbGFzc2lmaWVkIGFzICJSZXN0cmljdGVkIENvbXB1dGVyIFNvZnR3YXJlIiBhbmQKLXRoZSBHb3Zlcm5tZW50J3MgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSBhcmUgZGVmaW5lZCBpbiBwYXJhZ3JhcGggNTIuMjI3LTE5IG9mCi10aGUgRmVkZXJhbCBBY3F1aXNpdGlvbiBSZWd1bGF0aW9ucyAoIkZBUiIpIChvciBhbnkgc3VjY2Vzc29yIHJlZ3VsYXRpb25zKSBvciwKLWluIHRoZSBjYXNlcyBvZiBOQVNBLCBpbiBwYXJhZ3JhcGggMTguNTIuMjI3LTg2IG9mIHRoZSBOQVNBIFN1cHBsZW1lbnQgdG8gdGhlIEZBUiAKLShvciBhbnkgc3VjY2Vzc29yIHJlZ3VsYXRpb25zKS4KLQotRk9SRSBTeXN0ZW1zIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmssIGFuZCBGb3JlUnVubmVyLCBGb3JlUnVubmVyTEUsIGFuZCAKLUZvcmVUaG91Z2h0IGFyZSB0cmFkZW1hcmtzIG9mIEZPUkUgU3lzdGVtcywgSW5jLiAgQWxsIG90aGVyIGJyYW5kcyBvciBwcm9kdWN0IAotbmFtZXMgYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIHRoZWlyIHJlc3BlY3RpdmUgaG9sZGVycy4KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGVfbWtmaXJtLmMgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZV9ta2Zpcm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwZTE0Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2F0bS9mb3JlMjAwZV9ta2Zpcm0uYworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKgotICBta2Zpcm0uYzogZ2VuZXJhdGVzIGEgQyByZWFkYWJsZSBmaWxlIGZyb20gYSBiaW5hcnkgZmlybXdhcmUgaW1hZ2UKLQotICBDaHJpc3RvcGhlIExpenppIChsaXp6aUB7Y3N0aS5mciwgY25hbS5mcn0pLCBKdW5lIDE5OTkuCi0gIAotICBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCi0gIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCi0qLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLWNoYXIqIGRlZmF1bHRfYmFzZW5hbWUgPSAicGNhMjAwZSI7IC8qIHdhcyBpbml0aWFsbHkgd3JpdHRlbiBmb3IgdGhlIFBDQS0yMDBFIGZpcm13YXJlICovCi1jaGFyKiBkZWZhdWx0X2luZm5hbWUgID0gIjxzdGRpbj4iOwotY2hhciogZGVmYXVsdF9vdXRmbmFtZSA9ICI8c3Rkb3V0PiI7Ci0KLWNoYXIqIHByb2duYW1lOwotaW50ICAgdmVyYm9zZSAgPSAwOwotaW50ICAgaW5rZXJuZWwgPSAwOwotCi0KLXZvaWQgdXNhZ2Uodm9pZCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLQkgICAgIiVzOiBbLXZdIFsta10gWy1iIGJhc2VuYW1lIF0gWy1pIGZpcm13YXJlLmJpbl0gWy1vIGZpcm13YXJlLmNdXG4iLAotCSAgICBwcm9nbmFtZSk7Ci0gICAgZXhpdCgtMSk7Ci19Ci0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIHRpbWVfdCAgIG5vdzsKLSAgICBjaGFyKiAgICBpbmZuYW1lICA9IE5VTEw7Ci0gICAgY2hhciogICAgb3V0Zm5hbWUgPSBOVUxMOwotICAgIGNoYXIqICAgIGJhc2VuYW1lID0gTlVMTDsKLSAgICBGSUxFKiAgICBpbmZpbGU7Ci0gICAgRklMRSogICAgb3V0ZmlsZTsKLSAgICB1bnNpZ25lZCBmaXJtc2l6ZTsKLSAgICBpbnQgICAgICBjOwotCi0gICAgcHJvZ25hbWUgPSAqKGFyZ3YrKyk7Ci0gICAgCi0gICAgd2hpbGUgKGFyZ2MgPiAxKSB7Ci0gICAgICAgIGlmICgoKmFyZ3YpWzBdID09ICctJykgewotICAgICAgICAgICAgc3dpdGNoICgoKmFyZ3YpWzFdKSB7Ci0JICAgIGNhc2UgJ2knOgotCQlpZiAoYXJnYy0tIDwgMykKLQkJICAgIHVzYWdlKCk7Ci0JCWluZm5hbWUgPSAqKCsrYXJndik7Ci0JCWJyZWFrOwotCSAgICBjYXNlICdvJzoKLQkJaWYgKGFyZ2MtLSA8IDMpCi0JCSAgICB1c2FnZSgpOwotCQlvdXRmbmFtZSA9ICooKythcmd2KTsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgJ2InOgotCQlpZiAoYXJnYy0tIDwgMykKLQkJICAgIHVzYWdlKCk7Ci0JCWJhc2VuYW1lID0gKigrK2FyZ3YpOwotCQlicmVhazsKLQkgICAgY2FzZSAndic6Ci0JCXZlcmJvc2UgPSAxOwotCQlicmVhazsKLQkgICAgY2FzZSAnayc6Ci0JCWlua2VybmVsID0gMTsKLQkJYnJlYWs7Ci0JICAgIGRlZmF1bHQ6Ci0JCXVzYWdlKCk7Ci0gICAgICAgICAgICB9Ci0JfQotCWVsc2UgewotCSAgICB1c2FnZSgpOwotCX0KLQlhcmdjLS07Ci0gICAgICAgIGFyZ3YrKzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGluZm5hbWUgIT0gTlVMTCkgewotCWluZmlsZSA9IGZvcGVuKGluZm5hbWUsICJyIik7Ci0JaWYgKGluZmlsZSA9PSBOVUxMKSB7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gJXMgZm9yIHJlYWRpbmdcbiIsCi0JCSAgICBwcm9nbmFtZSwgaW5mbmFtZSk7Ci0JICAgIGV4aXQoLTIpOwotCX0KLSAgICB9Ci0gICAgZWxzZSB7Ci0JaW5maWxlID0gc3RkaW47Ci0JaW5mbmFtZSA9IGRlZmF1bHRfaW5mbmFtZTsKLSAgICB9Ci0KLSAgICBpZiAob3V0Zm5hbWUpIHsKLQlvdXRmaWxlID0gZm9wZW4ob3V0Zm5hbWUsICJ3Iik7Ci0JaWYgKG91dGZpbGUgPT0gTlVMTCkgewotCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzIGZvciB3cml0aW5nXG4iLAotCQkgICAgcHJvZ25hbWUsIG91dGZuYW1lKTsKLQkgICAgZXhpdCgtMyk7Ci0JfQotICAgIH0KLSAgICBlbHNlIHsKLQlvdXRmaWxlID0gc3Rkb3V0OwotCW91dGZuYW1lID0gZGVmYXVsdF9vdXRmbmFtZTsKLSAgICB9Ci0KLSAgICBpZiAoYmFzZW5hbWUgPT0gTlVMTCkKLQliYXNlbmFtZSA9IGRlZmF1bHRfYmFzZW5hbWU7Ci0KLSAgICBpZiAodmVyYm9zZSkgewotCWZwcmludGYoc3RkZXJyLCAiJXM6IGlucHV0IGZpbGUgPSAlc1xuIiwgcHJvZ25hbWUsIGluZm5hbWUgKTsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBvdXRwdXQgZmlsZSA9ICVzXG4iLCBwcm9nbmFtZSwgb3V0Zm5hbWUgKTsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBmaXJtd2FyZSBiYXNlbmFtZSA9ICVzXG4iLCBwcm9nbmFtZSwgYmFzZW5hbWUgKTsKLSAgICB9Ci0KLSAgICB0aW1lKCZub3cpOwotICAgIGZwcmludGYob3V0ZmlsZSwgIi8qXG4gIGdlbmVyYXRlZCBieSAlcyBmcm9tICVzIG9uICVzIgotCSAgICAiICBETyBOT1QgRURJVCFcbiovXG5cbiIsCi0JICAgIHByb2duYW1lLCBpbmZuYW1lLCBjdGltZSgmbm93KSk7Ci0KLSAgICBpZiAoaW5rZXJuZWwpCi0JZnByaW50ZihvdXRmaWxlLCAiI2luY2x1ZGUgPGxpbnV4L2luaXQuaD5cblxuIiApOwotICAgIAotICAgIC8qIFhYWCBmb3JjZSAzMiBiaXQgYWxpZ25tZW50PyAqLwotICAgIGZwcmludGYob3V0ZmlsZSwgImNvbnN0IHVuc2lnbmVkIGNoYXIlcyAlc19kYXRhW10gPSB7XG4iLCAKLQkgICAgaW5rZXJuZWwgPyAiIF9faW5pdGRhdGEiIDogIiIsIGJhc2VuYW1lICk7Ci0gICAgCi0gICAgYyA9IGdldGMoaW5maWxlKTsKLSAgICBmcHJpbnRmKG91dGZpbGUsIlx0MHglMDJ4IiwgYyk7Ci0gICAgZmlybXNpemUgPSAxOwotICAgIAotICAgIHdoaWxlICgoYyA9IGdldGMoaW5maWxlKSkgPj0gMCkgewotCQotCWlmIChmaXJtc2l6ZSsrICUgOCkKLQkgICAgZnByaW50ZihvdXRmaWxlLCIsIDB4JTAyeCIsIGMpOwotCWVsc2UKLQkgICAgZnByaW50ZihvdXRmaWxlLCIsXG5cdDB4JTAyeCIsIGMpOwotICAgIH0KLQotICAgIGZwcmludGYob3V0ZmlsZSwgIlxufTtcblxuIik7Ci0KLSAgICBmcHJpbnRmKG91dGZpbGUsICJjb25zdCB1bnNpZ25lZCBpbnQlcyAlc19zaXplID0gJXU7XG4iLAotCSAgICBpbmtlcm5lbCA/ICIgX19pbml0ZGF0YSIgOiAiIiwgYmFzZW5hbWUsIGZpcm1zaXplICk7Ci0KLSAgICBpZiAoaW5maWxlICE9IHN0ZGluKQotCWZjbG9zZShpbmZpbGUpOwotICAgIGlmIChvdXRmaWxlICE9IHN0ZG91dCkKLQlmY2xvc2Uob3V0ZmlsZSk7Ci0KLSAgICBpZih2ZXJib3NlKQotCWZwcmludGYoc3RkZXJyLCAiJXM6IGZpcm13YXJlIHNpemUgPSAldVxuIiwgcHJvZ25hbWUsIGZpcm1zaXplKTsKLQotICAgIGV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9oZS5jIGIvZHJpdmVycy9hdG0vaGUuYwppbmRleCBlYTQ5NWIyLi5iZGJhZDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9oZS5jCisrKyBiL2RyaXZlcnMvYXRtL2hlLmMKQEAgLTc1LDE0ICs3NSw4IEBACiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSA8bGludXgvc29uZXQuaD4KIAotI2RlZmluZSBVU0VfVEFTS0xFVAogI3VuZGVmIFVTRV9TQ0FUVEVSR0FUSEVSCiAjdW5kZWYgVVNFX0NIRUNLU1VNX0hXCQkJLyogc3RpbGwgY29uZnVzZWQgYWJvdXQgdGhpcyAqLwotI2RlZmluZSBVU0VfUkJQUwotI3VuZGVmIFVTRV9SQlBTX1BPT0wJCQkvKiBpZiBtZW1vcnkgaXMgdGlnaHQgdHJ5IHRoaXMgKi8KLSN1bmRlZiBVU0VfUkJQTF9QT09MCQkJLyogaWYgbWVtb3J5IGlzIHRpZ2h0IHRyeSB0aGlzICovCi0jZGVmaW5lIFVTRV9UUERfUE9PTAotLyogI3VuZGVmIENPTkZJR19BVE1fSEVfVVNFX1NVTkkgKi8KIC8qICN1bmRlZiBIRV9ERUJVRyAqLwogCiAjaW5jbHVkZSAiaGUuaCIKQEAgLTM4OCw5ICszODIsNyBAQAogCWhlX2Rldi0+YXRtX2Rldi0+ZGV2X2RhdGEgPSBoZV9kZXY7CiAJYXRtX2Rldi0+ZGV2X2RhdGEgPSBoZV9kZXY7CiAJaGVfZGV2LT5udW1iZXIgPSBhdG1fZGV2LT5udW1iZXI7Ci0jaWZkZWYgVVNFX1RBU0tMRVQKIAl0YXNrbGV0X2luaXQoJmhlX2Rldi0+dGFza2xldCwgaGVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIGhlX2Rldik7Ci0jZW5kaWYKIAlzcGluX2xvY2tfaW5pdCgmaGVfZGV2LT5nbG9iYWxfbG9jayk7CiAKIAlpZiAoaGVfc3RhcnQoYXRtX2RldikpIHsKQEAgLTc4NywyMyArNzc5LDEzIEBACiB7CiAJaW50IGk7CiAKLSNpZmRlZiBVU0VfUkJQUwogCS8qIHNtYWxsIGJ1ZmZlciBwb29sICovCi0jaWZkZWYgVVNFX1JCUFNfUE9PTAogCWhlX2Rldi0+cmJwc19wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJyYnBzIiwgaGVfZGV2LT5wY2lfZGV2LAogCQkJQ09ORklHX1JCUFNfQlVGU0laRSwgOCwgMCk7CiAJaWYgKGhlX2Rldi0+cmJwc19wb29sID09IE5VTEwpIHsKIAkJaHByaW50aygidW5hYmxlIHRvIGNyZWF0ZSByYnBzIHBhZ2VzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotI2Vsc2UgLyogIVVTRV9SQlBTX1BPT0wgKi8KLQloZV9kZXYtPnJicHNfcGFnZXMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoZV9kZXYtPnBjaV9kZXYsCi0JCUNPTkZJR19SQlBTX1NJWkUgKiBDT05GSUdfUkJQU19CVUZTSVpFLCAmaGVfZGV2LT5yYnBzX3BhZ2VzX3BoeXMpOwotCWlmIChoZV9kZXYtPnJicHNfcGFnZXMgPT0gTlVMTCkgewotCQlocHJpbnRrKCJ1bmFibGUgdG8gY3JlYXRlIHJicHMgcGFnZSBwb29sXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotI2VuZGlmIC8qIFVTRV9SQlBTX1BPT0wgKi8KIAogCWhlX2Rldi0+cmJwc19iYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LAogCQlDT05GSUdfUkJQU19TSVpFICogc2l6ZW9mKHN0cnVjdCBoZV9yYnApLCAmaGVfZGV2LT5yYnBzX3BoeXMpOwpAQCAtODE4LDE0ICs4MDAsOSBAQAogCQlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAJCXZvaWQgKmNwdWFkZHI7CiAKLSNpZmRlZiBVU0VfUkJQU19QT09MIAogCQljcHVhZGRyID0gcGNpX3Bvb2xfYWxsb2MoaGVfZGV2LT5yYnBzX3Bvb2wsIEdGUF9LRVJORUx8R0ZQX0RNQSwgJmRtYV9oYW5kbGUpOwogCQlpZiAoY3B1YWRkciA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0jZWxzZQotCQljcHVhZGRyID0gaGVfZGV2LT5yYnBzX3BhZ2VzICsgKGkgKiBDT05GSUdfUkJQU19CVUZTSVpFKTsKLQkJZG1hX2hhbmRsZSA9IGhlX2Rldi0+cmJwc19wYWdlc19waHlzICsgKGkgKiBDT05GSUdfUkJQU19CVUZTSVpFKTsKLSNlbmRpZgogCiAJCWhlX2Rldi0+cmJwc192aXJ0W2ldLnZpcnQgPSBjcHVhZGRyOwogCQloZV9kZXYtPnJicHNfYmFzZVtpXS5zdGF0dXMgPSBSQlBfTE9BTkVEIHwgUkJQX1NNQUxMQlVGIHwgKGkgPDwgUkJQX0lOREVYX09GRik7CkBAIC04NDQsMzAgKzgyMSwxNCBAQAogCQkJUkJQX1FTSVpFKENPTkZJR19SQlBTX1NJWkUgLSAxKSB8CiAJCQlSQlBfSU5UX0VOQiwKIAkJCQkJCUcwX1JCUFNfUUkgKyAoZ3JvdXAgKiAzMikpOwotI2Vsc2UgLyogIVVTRV9SQlBTICovCi0JaGVfd3JpdGVsKGhlX2RldiwgMHgwLCBHMF9SQlBTX1MgKyAoZ3JvdXAgKiAzMikpOwotCWhlX3dyaXRlbChoZV9kZXYsIDB4MCwgRzBfUkJQU19UICsgKGdyb3VwICogMzIpKTsKLQloZV93cml0ZWwoaGVfZGV2LCAweDAsIEcwX1JCUFNfUUkgKyAoZ3JvdXAgKiAzMikpOwotCWhlX3dyaXRlbChoZV9kZXYsIFJCUF9USFJFU0goMHgxKSB8IFJCUF9RU0laRSgweDApLAotCQkJCQkJRzBfUkJQU19CUyArIChncm91cCAqIDMyKSk7Ci0jZW5kaWYgLyogVVNFX1JCUFMgKi8KIAogCS8qIGxhcmdlIGJ1ZmZlciBwb29sICovCi0jaWZkZWYgVVNFX1JCUExfUE9PTAogCWhlX2Rldi0+cmJwbF9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJyYnBsIiwgaGVfZGV2LT5wY2lfZGV2LAogCQkJQ09ORklHX1JCUExfQlVGU0laRSwgOCwgMCk7CiAJaWYgKGhlX2Rldi0+cmJwbF9wb29sID09IE5VTEwpIHsKIAkJaHByaW50aygidW5hYmxlIHRvIGNyZWF0ZSByYnBsIHBvb2xcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0jZWxzZSAvKiAhVVNFX1JCUExfUE9PTCAqLwotCWhlX2Rldi0+cmJwbF9wYWdlcyA9ICh2b2lkICopIHBjaV9hbGxvY19jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwKLQkJQ09ORklHX1JCUExfU0laRSAqIENPTkZJR19SQlBMX0JVRlNJWkUsICZoZV9kZXYtPnJicGxfcGFnZXNfcGh5cyk7Ci0JaWYgKGhlX2Rldi0+cmJwbF9wYWdlcyA9PSBOVUxMKSB7Ci0JCWhwcmludGsoInVuYWJsZSB0byBjcmVhdGUgcmJwbCBwYWdlc1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLSNlbmRpZiAvKiBVU0VfUkJQTF9QT09MICovCiAKIAloZV9kZXYtPnJicGxfYmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwKIAkJQ09ORklHX1JCUExfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfcmJwKSwgJmhlX2Rldi0+cmJwbF9waHlzKTsKQEAgLTg4MiwxNCArODQzLDkgQEAKIAkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwogCQl2b2lkICpjcHVhZGRyOwogCi0jaWZkZWYgVVNFX1JCUExfUE9PTAogCQljcHVhZGRyID0gcGNpX3Bvb2xfYWxsb2MoaGVfZGV2LT5yYnBsX3Bvb2wsIEdGUF9LRVJORUx8R0ZQX0RNQSwgJmRtYV9oYW5kbGUpOwogCQlpZiAoY3B1YWRkciA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0jZWxzZQotCQljcHVhZGRyID0gaGVfZGV2LT5yYnBsX3BhZ2VzICsgKGkgKiBDT05GSUdfUkJQTF9CVUZTSVpFKTsKLQkJZG1hX2hhbmRsZSA9IGhlX2Rldi0+cmJwbF9wYWdlc19waHlzICsgKGkgKiBDT05GSUdfUkJQTF9CVUZTSVpFKTsKLSNlbmRpZgogCiAJCWhlX2Rldi0+cmJwbF92aXJ0W2ldLnZpcnQgPSBjcHVhZGRyOwogCQloZV9kZXYtPnJicGxfYmFzZVtpXS5zdGF0dXMgPSBSQlBfTE9BTkVEIHwgKGkgPDwgUkJQX0lOREVYX09GRik7CkBAIC0xNDc1LDcgKzE0MzEsNiBAQAogCiAJaGVfaW5pdF90cGRycShoZV9kZXYpOwogCi0jaWZkZWYgVVNFX1RQRF9QT09MCiAJaGVfZGV2LT50cGRfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgidHBkIiwgaGVfZGV2LT5wY2lfZGV2LAogCQlzaXplb2Yoc3RydWN0IGhlX3RwZCksIFRQRF9BTElHTk1FTlQsIDApOwogCWlmIChoZV9kZXYtPnRwZF9wb29sID09IE5VTEwpIHsKQEAgLTE0ODQsMjAgKzE0MzksNiBAQAogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZoZV9kZXYtPm91dHN0YW5kaW5nX3RwZHMpOwotI2Vsc2UKLQloZV9kZXYtPnRwZF9iYXNlID0gKHZvaWQgKikgcGNpX2FsbG9jX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LAotCQkJQ09ORklHX05VTVRQRFMgKiBzaXplb2Yoc3RydWN0IGhlX3RwZCksICZoZV9kZXYtPnRwZF9iYXNlX3BoeXMpOwotCWlmICghaGVfZGV2LT50cGRfYmFzZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX05VTVRQRFM7ICsraSkgewotCQloZV9kZXYtPnRwZF9iYXNlW2ldLnN0YXR1cyA9IChpIDw8IFRQRF9BRERSX1NISUZUKTsKLQkJaGVfZGV2LT50cGRfYmFzZVtpXS5pbnVzZSA9IDA7Ci0JfQotCQkKLQloZV9kZXYtPnRwZF9oZWFkID0gaGVfZGV2LT50cGRfYmFzZTsKLQloZV9kZXYtPnRwZF9lbmQgPSAmaGVfZGV2LT50cGRfYmFzZVtDT05GSUdfTlVNVFBEUyAtIDFdOwotI2VuZGlmCiAKIAlpZiAoaGVfaW5pdF9ncm91cChoZV9kZXYsIDApICE9IDApCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTYwNiw5ICsxNTQ3LDcgQEAKIAkJZ2VuX2NudGxfMCAmPSB+KElOVF9QUk9DX0VOQkwgfCBJTklUX0VOQik7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpX2RldiwgR0VOX0NOVExfMCwgZ2VuX2NudGxfMCk7CiAKLSNpZmRlZiBVU0VfVEFTS0xFVAogCQl0YXNrbGV0X2Rpc2FibGUoJmhlX2Rldi0+dGFza2xldCk7Ci0jZW5kaWYKIAogCQkvKiBkaXNhYmxlIHJlY3YgYW5kIHRyYW5zbWl0ICovCiAKQEAgLTE2MzgsNyArMTU3Nyw2IEBACiAJCQkJCQloZV9kZXYtPmhzcCwgaGVfZGV2LT5oc3BfcGh5cyk7CiAKIAlpZiAoaGVfZGV2LT5yYnBsX2Jhc2UpIHsKLSNpZmRlZiBVU0VfUkJQTF9QT09MCiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfUkJQTF9TSVpFOyArK2kpIHsKQEAgLTE2NDcsMjIgKzE1ODUsMTQgQEAKIAogCQkJcGNpX3Bvb2xfZnJlZShoZV9kZXYtPnJicGxfcG9vbCwgY3B1YWRkciwgZG1hX2hhbmRsZSk7CiAJCX0KLSNlbHNlCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfUkJQTF9TSVpFCi0JCQkqIENPTkZJR19SQlBMX0JVRlNJWkUsIGhlX2Rldi0+cmJwbF9wYWdlcywgaGVfZGV2LT5yYnBsX3BhZ2VzX3BoeXMpOwotI2VuZGlmCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfUkJQTF9TSVpFCiAJCQkqIHNpemVvZihzdHJ1Y3QgaGVfcmJwKSwgaGVfZGV2LT5yYnBsX2Jhc2UsIGhlX2Rldi0+cmJwbF9waHlzKTsKIAl9CiAKLSNpZmRlZiBVU0VfUkJQTF9QT09MCiAJaWYgKGhlX2Rldi0+cmJwbF9wb29sKQogCQlwY2lfcG9vbF9kZXN0cm95KGhlX2Rldi0+cmJwbF9wb29sKTsKLSNlbmRpZgogCi0jaWZkZWYgVVNFX1JCUFMKIAlpZiAoaGVfZGV2LT5yYnBzX2Jhc2UpIHsKLSNpZmRlZiBVU0VfUkJQU19QT09MCiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfUkJQU19TSVpFOyArK2kpIHsKQEAgLTE2NzEsMjAgKzE2MDEsMTIgQEAKIAogCQkJcGNpX3Bvb2xfZnJlZShoZV9kZXYtPnJicHNfcG9vbCwgY3B1YWRkciwgZG1hX2hhbmRsZSk7CiAJCX0KLSNlbHNlCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfUkJQU19TSVpFCi0JCQkqIENPTkZJR19SQlBTX0JVRlNJWkUsIGhlX2Rldi0+cmJwc19wYWdlcywgaGVfZGV2LT5yYnBzX3BhZ2VzX3BoeXMpOwotI2VuZGlmCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfUkJQU19TSVpFCiAJCQkqIHNpemVvZihzdHJ1Y3QgaGVfcmJwKSwgaGVfZGV2LT5yYnBzX2Jhc2UsIGhlX2Rldi0+cmJwc19waHlzKTsKIAl9CiAKLSNpZmRlZiBVU0VfUkJQU19QT09MCiAJaWYgKGhlX2Rldi0+cmJwc19wb29sKQogCQlwY2lfcG9vbF9kZXN0cm95KGhlX2Rldi0+cmJwc19wb29sKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogVVNFX1JCUFMgKi8KIAogCWlmIChoZV9kZXYtPnJicnFfYmFzZSkKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChoZV9kZXYtPnBjaV9kZXYsIENPTkZJR19SQlJRX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3JicnEpLApAQCAtMTY5OCwxNCArMTYyMCw4IEBACiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfVEJSUV9TSVpFICogc2l6ZW9mKHN0cnVjdCBoZV90YnJxKSwKIAkJCQkJCQloZV9kZXYtPnRwZHJxX2Jhc2UsIGhlX2Rldi0+dHBkcnFfcGh5cyk7CiAKLSNpZmRlZiBVU0VfVFBEX1BPT0wKIAlpZiAoaGVfZGV2LT50cGRfcG9vbCkKIAkJcGNpX3Bvb2xfZGVzdHJveShoZV9kZXYtPnRwZF9wb29sKTsKLSNlbHNlCi0JaWYgKGhlX2Rldi0+dHBkX2Jhc2UpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfTlVNVFBEUyAqIHNpemVvZihzdHJ1Y3QgaGVfdHBkKSwKLQkJCQkJCQloZV9kZXYtPnRwZF9iYXNlLCBoZV9kZXYtPnRwZF9iYXNlX3BoeXMpOwotI2VuZGlmCiAKIAlpZiAoaGVfZGV2LT5wY2lfZGV2KSB7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhlX2Rldi0+cGNpX2RldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKQEAgLTE3MjAsNyArMTYzNiw2IEBACiBzdGF0aWMgc3RydWN0IGhlX3RwZCAqCiBfX2FsbG9jX3RwZChzdHJ1Y3QgaGVfZGV2ICpoZV9kZXYpCiB7Ci0jaWZkZWYgVVNFX1RQRF9QT09MCiAJc3RydWN0IGhlX3RwZCAqdHBkOwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsgCiAKQEAgLTE3MzUsMjcgKzE2NTAsNiBAQAogCXRwZC0+aW92ZWNbMl0uYWRkciA9IDA7IHRwZC0+aW92ZWNbMl0ubGVuID0gMDsKIAogCXJldHVybiB0cGQ7Ci0jZWxzZQotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IENPTkZJR19OVU1UUERTOyArK2kpIHsKLQkJKytoZV9kZXYtPnRwZF9oZWFkOwotCQlpZiAoaGVfZGV2LT50cGRfaGVhZCA+IGhlX2Rldi0+dHBkX2VuZCkgewotCQkJaGVfZGV2LT50cGRfaGVhZCA9IGhlX2Rldi0+dHBkX2Jhc2U7Ci0JCX0KLQotCQlpZiAoIWhlX2Rldi0+dHBkX2hlYWQtPmludXNlKSB7Ci0JCQloZV9kZXYtPnRwZF9oZWFkLT5pbnVzZSA9IDE7Ci0JCQloZV9kZXYtPnRwZF9oZWFkLT5zdGF0dXMgJj0gVFBEX01BU0s7Ci0JCQloZV9kZXYtPnRwZF9oZWFkLT5pb3ZlY1swXS5hZGRyID0gMDsgaGVfZGV2LT50cGRfaGVhZC0+aW92ZWNbMF0ubGVuID0gMDsKLQkJCWhlX2Rldi0+dHBkX2hlYWQtPmlvdmVjWzFdLmFkZHIgPSAwOyBoZV9kZXYtPnRwZF9oZWFkLT5pb3ZlY1sxXS5sZW4gPSAwOwotCQkJaGVfZGV2LT50cGRfaGVhZC0+aW92ZWNbMl0uYWRkciA9IDA7IGhlX2Rldi0+dHBkX2hlYWQtPmlvdmVjWzJdLmxlbiA9IDA7Ci0JCQlyZXR1cm4gaGVfZGV2LT50cGRfaGVhZDsKLQkJfQotCX0KLQlocHJpbnRrKCJvdXQgb2YgdHBkcyAtLSBpbmNyZWFzZSBDT05GSUdfTlVNVFBEUyAoJWQpXG4iLCBDT05GSUdfTlVNVFBEUyk7Ci0JcmV0dXJuIE5VTEw7Ci0jZW5kaWYKIH0KIAogI2RlZmluZSBBQUw1X0xFTihidWYsbGVuKSAJCQkJCQlcCkBAIC0xODA0LDExICsxNjk4LDkgQEAKIAkJCVJCUlFfQ09OX0NMT1NFRChoZV9kZXYtPnJicnFfaGVhZCkgPyAiIENPTl9DTE9TRUQiIDogIiIsCiAJCQlSQlJRX0hCVUZfRVJSKGhlX2Rldi0+cmJycV9oZWFkKSA/ICIgSEJVRl9FUlIiIDogIiIpOwogCi0jaWZkZWYgVVNFX1JCUFMKIAkJaWYgKFJCUlFfQUREUihoZV9kZXYtPnJicnFfaGVhZCkgJiBSQlBfU01BTExCVUYpCiAJCQlyYnAgPSAmaGVfZGV2LT5yYnBzX2Jhc2VbUkJQX0lOREVYKFJCUlFfQUREUihoZV9kZXYtPnJicnFfaGVhZCkpXTsKIAkJZWxzZQotI2VuZGlmCiAJCQlyYnAgPSAmaGVfZGV2LT5yYnBsX2Jhc2VbUkJQX0lOREVYKFJCUlFfQUREUihoZV9kZXYtPnJicnFfaGVhZCkpXTsKIAkJCiAJCWJ1Zl9sZW4gPSBSQlJRX0JVRkxFTihoZV9kZXYtPnJicnFfaGVhZCkgKiA0OwpAQCAtMTg4NywxMiArMTc3OSwxMCBAQAogCiAJCWZvciAoaW92ID0gaGVfdmNjLT5pb3ZfaGVhZDsKIAkJCQlpb3YgPCBoZV92Y2MtPmlvdl90YWlsOyArK2lvdikgewotI2lmZGVmIFVTRV9SQlBTCiAJCQlpZiAoaW92LT5pb3ZfYmFzZSAmIFJCUF9TTUFMTEJVRikKIAkJCQltZW1jcHkoc2tiX3B1dChza2IsIGlvdi0+aW92X2xlbiksCiAJCQkJCWhlX2Rldi0+cmJwc192aXJ0W1JCUF9JTkRFWChpb3YtPmlvdl9iYXNlKV0udmlydCwgaW92LT5pb3ZfbGVuKTsKIAkJCWVsc2UKLSNlbmRpZgogCQkJCW1lbWNweShza2JfcHV0KHNrYiwgaW92LT5pb3ZfbGVuKSwKIAkJCQkJaGVfZGV2LT5yYnBsX3ZpcnRbUkJQX0lOREVYKGlvdi0+aW92X2Jhc2UpXS52aXJ0LCBpb3YtPmlvdl9sZW4pOwogCQl9CkBAIC0xOTM3LDExICsxODI3LDkgQEAKIAogCQlmb3IgKGlvdiA9IGhlX3ZjYy0+aW92X2hlYWQ7CiAJCQkJaW92IDwgaGVfdmNjLT5pb3ZfdGFpbDsgKytpb3YpIHsKLSNpZmRlZiBVU0VfUkJQUwogCQkJaWYgKGlvdi0+aW92X2Jhc2UgJiBSQlBfU01BTExCVUYpCiAJCQkJcmJwID0gJmhlX2Rldi0+cmJwc19iYXNlW1JCUF9JTkRFWChpb3YtPmlvdl9iYXNlKV07CiAJCQllbHNlCi0jZW5kaWYKIAkJCQlyYnAgPSAmaGVfZGV2LT5yYnBsX2Jhc2VbUkJQX0lOREVYKGlvdi0+aW92X2Jhc2UpXTsKIAogCQkJcmJwLT5zdGF0dXMgJj0gflJCUF9MT0FORUQ7CkBAIC0xOTc3LDkgKzE4NjUsNyBAQAogCQkJCQloZV9kZXYtPmhzcC0+Z3JvdXBbZ3JvdXBdLnRicnFfdGFpbCk7CiAJc3RydWN0IGhlX3RwZCAqdHBkOwogCWludCBzbG90LCB1cGRhdGVkID0gMDsKLSNpZmRlZiBVU0VfVFBEX1BPT0wKIAlzdHJ1Y3QgaGVfdHBkICpfX3RwZDsKLSNlbmRpZgogCiAJLyogMi4xLjYgdHJhbnNtaXQgYnVmZmVyIHJldHVybiBxdWV1ZSAqLwogCkBAIC0xOTkxLDcgKzE4NzcsNiBAQAogCQkJVEJSUV9UUEQoaGVfZGV2LT50YnJxX2hlYWQpLCAKIAkJCVRCUlFfRU9TKGhlX2Rldi0+dGJycV9oZWFkKSA/ICIgRU9TIiA6ICIiLAogCQkJVEJSUV9NVUxUSVBMRShoZV9kZXYtPnRicnFfaGVhZCkgPyAiIE1VTFRJUExFIiA6ICIiKTsKLSNpZmRlZiBVU0VfVFBEX1BPT0wKIAkJdHBkID0gTlVMTDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShfX3RwZCwgJmhlX2Rldi0+b3V0c3RhbmRpbmdfdHBkcywgZW50cnkpIHsKIAkJCWlmIChUUERfQUREUihfX3RwZC0+c3RhdHVzKSA9PSBUQlJRX1RQRChoZV9kZXYtPnRicnFfaGVhZCkpIHsKQEAgLTIwMDYsOSArMTg5MSw2IEBACiAJCQkJCQlUQlJRX1RQRChoZV9kZXYtPnRicnFfaGVhZCkpOwogCQkJZ290byBuZXh0X3RicnFfZW50cnk7CiAJCX0KLSNlbHNlCi0JCXRwZCA9ICZoZV9kZXYtPnRwZF9iYXNlWyBUUERfSU5ERVgoVEJSUV9UUEQoaGVfZGV2LT50YnJxX2hlYWQpKSBdOwotI2VuZGlmCiAKIAkJaWYgKFRCUlFfRU9TKGhlX2Rldi0+dGJycV9oZWFkKSkgewogCQkJSFBSSU5USygid2FrZV91cCh0eF93YWl0cSkgY2lkIDB4JXhcbiIsCkBAIC0yMDM4LDEyICsxOTIwLDggQEAKIAkJfQogCiBuZXh0X3RicnFfZW50cnk6Ci0jaWZkZWYgVVNFX1RQRF9QT09MCiAJCWlmICh0cGQpCiAJCQlwY2lfcG9vbF9mcmVlKGhlX2Rldi0+dHBkX3Bvb2wsIHRwZCwgVFBEX0FERFIodHBkLT5zdGF0dXMpKTsKLSNlbHNlCi0JCXRwZC0+aW51c2UgPSAwOwotI2VuZGlmCiAJCWhlX2Rldi0+dGJycV9oZWFkID0gKHN0cnVjdCBoZV90YnJxICopCiAJCQkJKCh1bnNpZ25lZCBsb25nKSBoZV9kZXYtPnRicnFfYmFzZSB8CiAJCQkJCVRCUlFfTUFTSygrK2hlX2Rldi0+dGJycV9oZWFkKSk7CkBAIC0yMDg2LDcgKzE5NjQsNiBAQAogCQloZV93cml0ZWwoaGVfZGV2LCBSQlBMX01BU0soaGVfZGV2LT5yYnBsX3RhaWwpLCBHMF9SQlBMX1QpOwogfQogCi0jaWZkZWYgVVNFX1JCUFMKIHN0YXRpYyB2b2lkCiBoZV9zZXJ2aWNlX3JicHMoc3RydWN0IGhlX2RldiAqaGVfZGV2LCBpbnQgZ3JvdXApCiB7CkBAIC0yMTEzLDcgKzE5OTAsNiBAQAogCWlmIChtb3ZlZCkKIAkJaGVfd3JpdGVsKGhlX2RldiwgUkJQU19NQVNLKGhlX2Rldi0+cmJwc190YWlsKSwgRzBfUkJQU19UKTsKIH0KLSNlbmRpZiAvKiBVU0VfUkJQUyAqLwogCiBzdGF0aWMgdm9pZAogaGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC0yMTI0LDkgKzIwMDAsNyBAQAogCWludCB1cGRhdGVkID0gMDsKIAogCUhQUklOVEsoInRhc2tsZXQgKDB4JWx4KVxuIiwgZGF0YSk7Ci0jaWZkZWYgVVNFX1RBU0tMRVQKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGVfZGV2LT5nbG9iYWxfbG9jaywgZmxhZ3MpOwotI2VuZGlmCiAKIAl3aGlsZSAoaGVfZGV2LT5pcnFfaGVhZCAhPSBoZV9kZXYtPmlycV90YWlsKSB7CiAJCSsrdXBkYXRlZDsKQEAgLTIxNDEsOSArMjAxNSw3IEBACiAJCQljYXNlIElUWVBFX1JCUlFfVElNRVI6CiAJCQkJaWYgKGhlX3NlcnZpY2VfcmJycShoZV9kZXYsIGdyb3VwKSkgewogCQkJCQloZV9zZXJ2aWNlX3JicGwoaGVfZGV2LCBncm91cCk7Ci0jaWZkZWYgVVNFX1JCUFMKIAkJCQkJaGVfc2VydmljZV9yYnBzKGhlX2RldiwgZ3JvdXApOwotI2VuZGlmIC8qIFVTRV9SQlBTICovCiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSBJVFlQRV9UQlJRX1RIUkVTSDoKQEAgLTIxNTYsOSArMjAyOCw3IEBACiAJCQkJaGVfc2VydmljZV9yYnBsKGhlX2RldiwgZ3JvdXApOwogCQkJCWJyZWFrOwogCQkJY2FzZSBJVFlQRV9SQlBTX1RIUkVTSDoKLSNpZmRlZiBVU0VfUkJQUwogCQkJCWhlX3NlcnZpY2VfcmJwcyhoZV9kZXYsIGdyb3VwKTsKLSNlbmRpZiAvKiBVU0VfUkJQUyAqLwogCQkJCWJyZWFrOwogCQkJY2FzZSBJVFlQRV9QSFk6CiAJCQkJSFBSSU5USygicGh5IGludGVycnVwdFxuIik7CkBAIC0yMTg2LDkgKzIwNTYsNyBAQAogCiAJCQkJaGVfc2VydmljZV9yYnJxKGhlX2RldiwgMCk7CiAJCQkJaGVfc2VydmljZV9yYnBsKGhlX2RldiwgMCk7Ci0jaWZkZWYgVVNFX1JCUFMKIAkJCQloZV9zZXJ2aWNlX3JicHMoaGVfZGV2LCAwKTsKLSNlbmRpZiAvKiBVU0VfUkJQUyAqLwogCQkJCWhlX3NlcnZpY2VfdGJycShoZV9kZXYsIDApOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKQEAgLTIyMTAsOSArMjA3OCw3IEBACiAJCQlJUlFfVEFJTChoZV9kZXYtPmlycV90YWlsKSwgSVJRMF9IRUFEKTsKIAkJKHZvaWQpIGhlX3JlYWRsKGhlX2RldiwgSU5UX0ZJRk8pOyAvKiA4LjEuMiBjb250cm9sbGVyIGVycmF0YTsgZmx1c2ggcG9zdGVkIHdyaXRlcyAqLwogCX0KLSNpZmRlZiBVU0VfVEFTS0xFVAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhlX2Rldi0+Z2xvYmFsX2xvY2ssIGZsYWdzKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QKQEAgLTIyNDQsMTEgKzIxMTAsNyBAQAogCiAJaWYgKGhlX2Rldi0+aXJxX2hlYWQgIT0gaGVfZGV2LT5pcnFfdGFpbCkgewogCQloYW5kbGVkID0gMTsKLSNpZmRlZiBVU0VfVEFTS0xFVAogCQl0YXNrbGV0X3NjaGVkdWxlKCZoZV9kZXYtPnRhc2tsZXQpOwotI2Vsc2UKLQkJaGVfdGFza2xldCgodW5zaWduZWQgbG9uZykgaGVfZGV2KTsKLSNlbmRpZgogCQloZV93cml0ZWwoaGVfZGV2LCBJTlRfQ0xFQVJfQSwgSU5UX0ZJRk8pOwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KIAkJKHZvaWQpIGhlX3JlYWRsKGhlX2RldiwgSU5UX0ZJRk8pOwkJLyogZmx1c2ggcG9zdGVkIHdyaXRlcyAqLwogCX0KQEAgLTIzMDUsMjMgKzIxNjcsMTQgQEAKIAkJCQkJZGV2X2tmcmVlX3NrYl9hbnkodHBkLT5za2IpOwogCQkJCWF0b21pY19pbmMoJnRwZC0+dmNjLT5zdGF0cy0+dHhfZXJyKTsKIAkJCX0KLSNpZmRlZiBVU0VfVFBEX1BPT0wKIAkJCXBjaV9wb29sX2ZyZWUoaGVfZGV2LT50cGRfcG9vbCwgdHBkLCBUUERfQUREUih0cGQtPnN0YXR1cykpOwotI2Vsc2UKLQkJCXRwZC0+aW51c2UgPSAwOwotI2VuZGlmCiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAkvKiAyLjEuNSB0cmFuc21pdCBwYWNrZXQgZGVzY3JpcHRvciByZWFkeSBxdWV1ZSAqLwotI2lmZGVmIFVTRV9UUERfUE9PTAogCWxpc3RfYWRkX3RhaWwoJnRwZC0+ZW50cnksICZoZV9kZXYtPm91dHN0YW5kaW5nX3RwZHMpOwogCWhlX2Rldi0+dHBkcnFfdGFpbC0+dHBkID0gVFBEX0FERFIodHBkLT5zdGF0dXMpOwotI2Vsc2UKLQloZV9kZXYtPnRwZHJxX3RhaWwtPnRwZCA9IGhlX2Rldi0+dHBkX2Jhc2VfcGh5cyArCi0JCQkJKFRQRF9JTkRFWCh0cGQtPnN0YXR1cykgKiBzaXplb2Yoc3RydWN0IGhlX3RwZCkpOwotI2VuZGlmCiAJaGVfZGV2LT50cGRycV90YWlsLT5jaWQgPSBjaWQ7CiAJd21iKCk7CiAKQEAgLTI1MTEsMTMgKzIzNjQsOCBAQAogCQkJZ290byBvcGVuX2ZhaWxlZDsKIAkJfQogCi0jaWZkZWYgVVNFX1JCUFMKIAkJcnNyMSA9IFJTUjFfR1JPVVAoMCk7CiAJCXJzcjQgPSBSU1I0X0dST1VQKDApOwotI2Vsc2UgLyogIVVTRV9SQlBTICovCi0JCXJzcjEgPSBSU1IxX0dST1VQKDApfFJTUjFfUkJQTF9PTkxZOwotCQlyc3I0ID0gUlNSNF9HUk9VUCgwKXxSU1I0X1JCUExfT05MWTsKLSNlbmRpZiAvKiBVU0VfUkJQUyAqLwogCQlyc3IwID0gdmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzID09IEFUTV9VQlIgPyAKIAkJCQkoUlNSMF9FUERfRU5BQkxFfFJTUjBfUFBEX0VOQUJMRSkgOiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9oZS5oIGIvZHJpdmVycy9hdG0vaGUuaAppbmRleCBiODdkNmNjLi5jMjk4M2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9oZS5oCisrKyBiL2RyaXZlcnMvYXRtL2hlLmgKQEAgLTUxLDggKzUxLDYgQEAKICNkZWZpbmUgQ09ORklHX0lSUV9TSVpFCQkxMjgKICNkZWZpbmUgQ09ORklHX0lSUV9USFJFU0gJKENPTkZJR19JUlFfU0laRS8yKQogCi0jZGVmaW5lIENPTkZJR19OVU1UUERTCQkyNTYKLQogI2RlZmluZSBDT05GSUdfVFBEUlFfU0laRQk1MTIKICNkZWZpbmUgVFBEUlFfTUFTSyh4KQkJKCgodW5zaWduZWQgbG9uZykoeCkpJigoQ09ORklHX1RQRFJRX1NJWkU8PDMpLTEpKQogCkBAIC0xNDAsMTIgKzEzOCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCi0jaWZkZWYgVVNFX1RQRF9QT09MCiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKLSNlbHNlCi0JdTMyIGludXNlOwotCWNoYXIgcGFkZGluZ1szMiAtIHNpemVvZih1MzIpIC0gKDIqc2l6ZW9mKHZvaWQqKSldOwotI2VuZGlmCiB9OwogCiAjZGVmaW5lIFRQRF9BTElHTk1FTlQJNjQKQEAgLTI5MSwxNiArMjg0LDkgQEAKIAl2b2xhdGlsZSB1bnNpZ25lZCAqaXJxX3RhaWxvZmZzZXQ7CiAJaW50IGlycV9wZWFrOwogCi0jaWZkZWYgVVNFX1RBU0tMRVQKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKLSNlbmRpZgotI2lmZGVmIFVTRV9UUERfUE9PTAogCXN0cnVjdCBwY2lfcG9vbCAqdHBkX3Bvb2w7CiAJc3RydWN0IGxpc3RfaGVhZCBvdXRzdGFuZGluZ190cGRzOwotI2Vsc2UKLQlzdHJ1Y3QgaGVfdHBkICp0cGRfaGVhZCwgKnRwZF9iYXNlLCAqdHBkX2VuZDsKLQlkbWFfYWRkcl90IHRwZF9iYXNlX3BoeXM7Ci0jZW5kaWYKIAogCWRtYV9hZGRyX3QgdHBkcnFfcGh5czsKIAlzdHJ1Y3QgaGVfdHBkcnEgKnRwZHJxX2Jhc2UsICp0cGRycV90YWlsLCAqdHBkcnFfaGVhZDsKQEAgLTMxMSwyNSArMjk3LDEzIEBACiAJc3RydWN0IGhlX3JicnEgKnJicnFfYmFzZSwgKnJicnFfaGVhZDsKIAlpbnQgcmJycV9wZWFrOwogCi0jaWZkZWYgVVNFX1JCUExfUE9PTAogCXN0cnVjdCBwY2lfcG9vbCAqcmJwbF9wb29sOwotI2Vsc2UKLQl2b2lkICpyYnBsX3BhZ2VzOwotCWRtYV9hZGRyX3QgcmJwbF9wYWdlc19waHlzOwotI2VuZGlmCiAJZG1hX2FkZHJfdCByYnBsX3BoeXM7CiAJc3RydWN0IGhlX3JicCAqcmJwbF9iYXNlLCAqcmJwbF90YWlsOwogCXN0cnVjdCBoZV92aXJ0ICpyYnBsX3ZpcnQ7CiAJaW50IHJicGxfcGVhazsKIAotI2lmZGVmIFVTRV9SQlBTCi0jaWZkZWYgVVNFX1JCUFNfUE9PTAogCXN0cnVjdCBwY2lfcG9vbCAqcmJwc19wb29sOwotI2Vsc2UKLQl2b2lkICpyYnBzX3BhZ2VzOwotCWRtYV9hZGRyX3QgcmJwc19wYWdlc19waHlzOwotI2VuZGlmCi0jZW5kaWYKIAlkbWFfYWRkcl90IHJicHNfcGh5czsKIAlzdHJ1Y3QgaGVfcmJwICpyYnBzX2Jhc2UsICpyYnBzX3RhaWw7CiAJc3RydWN0IGhlX3ZpcnQgKnJicHNfdmlydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jIGIvZHJpdmVycy9hdG0vaXBoYXNlLmMKaW5kZXggMTM5ZmNlNi4uMjRkZjczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaXBoYXNlLmMKKysrIGIvZHJpdmVycy9hdG0vaXBoYXNlLmMKQEAgLTY1LDEyICs2NSw3IEBACiAjaW5jbHVkZSAiaXBoYXNlLmgiCQkgIAogI2luY2x1ZGUgInN1bmkuaCIJCSAgCiAjZGVmaW5lIHN3YXAoeCkgKCgoeCAmIDB4ZmYpIDw8IDgpIHwgKCh4ICYgMHhmZjAwKSA+PiA4KSkgIAotc3RydWN0IHN1bmlfcHJpdiB7Ci0gICAgICAgIHN0cnVjdCBrX3NvbmV0X3N0YXRzIHNvbmV0X3N0YXRzOyAvKiBsaW5rIGRpYWdub3N0aWNzICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgbG9vcF9tb2RlOyAgICAgICAgLyogbG9vcGJhY2sgbW9kZSAqLwotICAgICAgICBzdHJ1Y3QgYXRtX2RldiAqZGV2OyAgICAgICAgICAgIC8qIGRldmljZSBiYWNrLXBvaW50ZXIgKi8KLSAgICAgICAgc3RydWN0IHN1bmlfcHJpdiAqbmV4dDsgICAgICAgICAvKiBuZXh0IFNVTkkgKi8KLX07IAorCiAjZGVmaW5lIFBSSVYoZGV2KSAoKHN0cnVjdCBzdW5pX3ByaXYgKikgZGV2LT5waHlfZGF0YSkKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaWFfcGh5X2dldChzdHJ1Y3QgYXRtX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIpOwpAQCAtOTQsMTAgKzg5LDYgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jaWYgQklUU19QRVJfTE9ORyAhPSAzMgotIyAgZXJyb3IgRklYTUU6IHRoaXMgZHJpdmVyIG9ubHkgd29ya3Mgb24gMzItYml0IHBsYXRmb3JtcwotI2VuZGlmCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIElBX0xJQiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZCBpYV9pbml0X3J0bl9xIChJQVJUTl9RICpxdWUpIApAQCAtMTQxMSw3ICsxNDAyLDYgQEAKIAlzdHJ1Y3QgYWJyX3ZjX3RhYmxlICAqYWJyX3ZjX3RhYmxlOyAKIAl1MTYgKnZjX3RhYmxlOyAgCiAJdTE2ICpyZWFzc190YWJsZTsgIAotICAgICAgICB1MTYgKnB0cjE2OwogCWludCBpLGosIHZjc2l6ZV9zZWw7ICAKIAl1X3Nob3J0IGZyZWVxX3N0X2FkcjsgIAogCXVfc2hvcnQgKmZyZWVxX3N0YXJ0OyAgCkBAIC0xNDI2LDE0ICsxNDE2LDE1IEBACiAJCXByaW50ayhLRVJOX0VSUiBERVZfTEFCRUwgImNhbid0IGFsbG9jYXRlIERMRXNcbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQotCWlhZGV2LT5yeF9kbGVfcS5zdGFydCA9IChzdHJ1Y3QgZGxlKilkbGVfYWRkcjsgIAorCWlhZGV2LT5yeF9kbGVfcS5zdGFydCA9IChzdHJ1Y3QgZGxlICopZGxlX2FkZHI7CiAJaWFkZXYtPnJ4X2RsZV9xLnJlYWQgPSBpYWRldi0+cnhfZGxlX3Euc3RhcnQ7ICAKIAlpYWRldi0+cnhfZGxlX3Eud3JpdGUgPSBpYWRldi0+cnhfZGxlX3Euc3RhcnQ7ICAKLQlpYWRldi0+cnhfZGxlX3EuZW5kID0gKHN0cnVjdCBkbGUqKSgodTMyKWRsZV9hZGRyK3NpemVvZihzdHJ1Y3QgZGxlKSpETEVfRU5UUklFUyk7ICAKKwlpYWRldi0+cnhfZGxlX3EuZW5kID0gKHN0cnVjdCBkbGUqKSgodW5zaWduZWQgbG9uZylkbGVfYWRkcitzaXplb2Yoc3RydWN0IGRsZSkqRExFX0VOVFJJRVMpOwogCS8qIHRoZSBlbmQgb2YgdGhlIGRsZSBxIHBvaW50cyB0byB0aGUgZW50cnkgYWZ0ZXIgdGhlIGxhc3QgIAogCURMRSB0aGF0IGNhbiBiZSB1c2VkLiAqLyAgCiAgIAogCS8qIHdyaXRlIHRoZSB1cHBlciAyMCBiaXRzIG9mIHRoZSBzdGFydCBhZGRyZXNzIHRvIHJ4IGxpc3QgYWRkcmVzcyByZWdpc3RlciAqLyAgCisJLyogV2Uga25vdyB0aGlzIGlzIDMyYml0IGJ1cyBhZGRyZXNzZWQgc28gdGhlIGZvbGxvd2luZyBpcyBzYWZlICovCiAJd3JpdGVsKGlhZGV2LT5yeF9kbGVfZG1hICYgMHhmZmZmZjAwMCwKIAkgICAgICAgaWFkZXYtPmRtYSArIElQSEFTRTU1NzVfUlhfTElTVF9BRERSKTsgIAogCUlGX0lOSVQocHJpbnRrKCJUeCBEbGUgbGlzdCBhZGRyOiAweCUwOHggdmFsdWU6IDB4JTB4XG4iLCAKQEAgLTE1ODcsMTEgKzE1NzgsMTIgQEAKIAkgICBTZXQgUGFja2V0IEFnaW5nIEludGVydmFsIGNvdW50IHJlZ2lzdGVyIHRvIG92ZXJmbG93IGluIGFib3V0IDQgdXMKICAJKi8gIAogICAgICAgICB3cml0ZXcoMHhGNkY4LCBpYWRldi0+cmVhc3NfcmVnK1BLVF9UTV9DTlQgKTsKLSAgICAgICAgcHRyMTYgPSAodTE2KilqOwotICAgICAgICBpID0gKCh1MzIpcHRyMTYgPj4gNikgJiAweGZmOwotCXB0cjE2ICArPSBqIC0gMTsKLQlpIHw9KCgodTMyKXB0cjE2IDw8IDIpICYgMHhmZjAwKTsKKworICAgICAgICBpID0gKGogPj4gNikgJiAweEZGOworICAgICAgICBqICs9IDIgKiAoaiAtIDEpOworICAgICAgICBpIHw9ICgoaiA8PCAyKSAmIDB4RkYwMCk7CiAgICAgICAgIHdyaXRldyhpLCBpYWRldi0+cmVhc3NfcmVnK1RNT1VUX1JBTkdFKTsKKwogICAgICAgICAvKiBpbml0aWF0ZSB0aGUgZGVzY190YmxlICovCiAgICAgICAgIGZvcihpPTA7IGk8aWFkZXYtPm51bV90eF9kZXNjO2krKykKICAgICAgICAgICAgIGlhZGV2LT5kZXNjX3RibFtpXS50aW1lc3RhbXAgPSAwOwpAQCAtMTkxNCw3ICsxOTA2LDcgQEAKIAlpYWRldi0+dHhfZGxlX3Euc3RhcnQgPSAoc3RydWN0IGRsZSopZGxlX2FkZHI7ICAKIAlpYWRldi0+dHhfZGxlX3EucmVhZCA9IGlhZGV2LT50eF9kbGVfcS5zdGFydDsgIAogCWlhZGV2LT50eF9kbGVfcS53cml0ZSA9IGlhZGV2LT50eF9kbGVfcS5zdGFydDsgIAotCWlhZGV2LT50eF9kbGVfcS5lbmQgPSAoc3RydWN0IGRsZSopKCh1MzIpZGxlX2FkZHIrc2l6ZW9mKHN0cnVjdCBkbGUpKkRMRV9FTlRSSUVTKTsgIAorCWlhZGV2LT50eF9kbGVfcS5lbmQgPSAoc3RydWN0IGRsZSopKCh1bnNpZ25lZCBsb25nKWRsZV9hZGRyK3NpemVvZihzdHJ1Y3QgZGxlKSpETEVfRU5UUklFUyk7CiAKIAkvKiB3cml0ZSB0aGUgdXBwZXIgMjAgYml0cyBvZiB0aGUgc3RhcnQgYWRkcmVzcyB0byB0eCBsaXN0IGFkZHJlc3MgcmVnaXN0ZXIgKi8gIAogCXdyaXRlbChpYWRldi0+dHhfZGxlX2RtYSAmIDB4ZmZmZmYwMDAsCkBAIC0yOTA3LDcgKzI4OTksNyBAQAogICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGlmICgodTMyKXNrYi0+ZGF0YSAmIDMpIHsKKyAgICAgICAgaWYgKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIDMpIHsKICAgICAgICAgICAgcHJpbnRrKCJNaXNhbGlnbmVkIFNLQlxuIik7CiAgICAgICAgICAgIGlmICh2Y2MtPnBvcCkKICAgICAgICAgICAgICAgICAgdmNjLT5wb3AodmNjLCBza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vcGNhMjAwZS5kYXRhIGIvZHJpdmVycy9hdG0vcGNhMjAwZS5kYXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzhlODNiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvYXRtL3BjYTIwMGUuZGF0YQorKysgL2Rldi9udWxsCkBAIC0xLDg1MCArMCwwIEBACi06MTUwMDAwMDAxRjhCMDgwOEFCNUExMDM4MDIwMzcwNjM2MTMyMzAzMDY1MkU2MjY5NkU0RAotOjE1MDAxNTAwN0QwMEU0M0EwRDcwMTRENzc5NkZBNUJERTg0RUM4NjIxMUE3MzMzMDIwRUUKLToxNTAwMkEwMEFEODlDMDBBMjNFQTgzQUE1ODlDN0U3QzM4RDgxNTJFQjg4NzQ3NzY3N0QzCi06MTUwMDNGMDA5NUMzOUMzREIyQUIzODhDQTMyNEM0QTUwOTM1MkJGQkIwODVCQkQwQzczRgotOjE1MDA1NDAwNzIxMEI5MDNDOTI5OTFDQ0QxQjFDMjQyMjU1QkNDRDgxRUE1QzM0QzY4MjYKLToxNTAwNjkwMDA2MjcxQUM2RDM2QTNBMzFCOTc2RDRBOUE2ODNEQjRCMDdCQjM4MjY1QzU2Ci06MTUwMDdFMDBCRkVGQkRCNzc3N0JBNzAzMEIyNzMzOTk0QzM1NzM3QUZCQkVGN0JERUZFNwotOjE1MDA5MzAwRUY3RERGRjdCRUY3NzY5RkZFRUFENzlGMjIxMjIxRTFFRDg0NEMzRTQ2NzcKLToxNTAwQTgwMDdFQTNCRkYwMzZGODI3Q0Y4NTk3QzNBRjBDN0U5MjBCMTY1OTVCQ0U1QUE4Ci06MTUwMEJEMDAyOTZCNjQ4M0Q4M0U5RjdEQkU4RkY1MEJFNzRBMEI0NUZCMUYyNzRGQUE3OQotOjE1MDBEMjAwRDgyRTI4NjcxMzlERjYzN0ZEOTM3RUYxRDU1RkIwNzY5RkU4Njc4QkRBRkIKLToxNTAwRTcwMDdEOUJEODg4NTQ1MTUxNTE3MkZFMjdFNDEzOEU5RkM5OTQ5Q0JGRjAyNkJDCi06MTUwMEZDMDA3NDFERjgzRUNFNTk4MjNGRjIzQkY4OTM0NjQ5M0Y2QjRGMTdDMUIzQTdDRQotOjE1MDExMTAwQjNCNzlDOTdEMzI3NUI1QUJGRUMzQ0Y5NTc5NDU3NzAzQjNDQkZFRkQ2MDAKLToxNTAxMjYwMEZDMzgyMzZDQTkxQjVFMzQ3RURCRkE2N0Y3RUQ0Mzk3OTU2RUE0RDNDNUY0Ci06MTUwMTNCMDA3Q0U2QTU2Nzc5OUVGRkY1Q0ZDNEZGN0JERjkzOEJGODNFODNFREU1OUYwMgotOjE1MDE1MDAwRkVBQzI0QkY4QTNDM0YyRkY5RkRGRjkzM0NGNTFFRjJGRkVDMkZFQkZBMTEKLToxNTAxNjUwMDIzNDFDMzhDQkM1RjRFQUEyNjVGNUVBRjA0QkM1MUYwMDU5RkQxNDE5RUQ4Ci06MTUwMTdBMDAwNjM0OTNENDY1QTIzODRFNjZBMDE3MUMzMDIzMUY0MEFCNUNCNTY0NkZDOAotOjE1MDE4RjAwNUNCRkI2MzNERUNDQzYxNEQyREFGNjIyRjE1RDMxODlFRkVBM0VFMjhCODMKLToxNTAxQTQwMDdEOTlGOERBQkU0RDdDMjQxOEE0MzhBRjMxMjkwMTVENzUwN0YxMDMyRUJBCi06MTUwMUI5MDBFMTc0ODI3RjQ2QzgyMjI5QUUyQkM2M0E5RDUwRTkyNTM5NjBFQzAwNUZDQQotOjE1MDFDRTAwRjJFREZFMEFGMTJBOUQ1RUJENkEzNUYxQjVBQzQ0MUE0OUJBRDk0RjIyQzYKLToxNTAxRTMwMERFQ0I1NDRGMTgwRDFBNTFGQUNEOEM0QTdDMDM0QjkzREFGRDY0NTVBOEY5Ci06MTUwMUY4MDA5QUFDNUFCNzRDOTU0MkVGMTFFMjNEQjA5NDZBMEYxQjBEQTEwQkYwQ0MwQwotOjE1MDIwRDAwRjlBNEE4MDk3QkNBMUQ3NTE0NzRBMDJGRUMwMjU5M0M3NUM5RTg3MEQxNzYKLToxNTAyMjIwMEI4Q0YzNTJFQzM3ODNDMzc5RTFDMjg5M0M5ODAxN0M2QTU3QjNDREQwRTRECi06MTUwMjM3MDBDRTMyNDI2QTlDQjk5RjAzRkMyRTgxQkY0NkFEMEQwNjU0NEZEMDE5MEIwOAotOjE1MDI0QzAwQzA1ODBCOEU4OTdFRkRGNDkwREUwOEZENjUyRTlDRkFFOTExREQ1RjI0RkUKLToxNTAyNjEwMENGODMyNDY5REFCMTExNkJFMEYzQzQzN0I2ODZGOEQyNzVDNDM3QUM5MjIwCi06MTUwMjc2MDAwNTQyQkZGNkNDMDMyMEIyMkFCNzIzN0UxRjVCOTdBNEU5MjdBMzk3NDkwQwotOjE1MDI4QjAwNjRDNDNBRkYwQ0Q4QUNDRTg4ODZEMzdGNjMyQTdGNEMxNjAwNUUyODlDQUYKLToxNTAyQTAwMDNFNDkxRERBRkIwODM1MTNDNkIwQTZCOEU0OTI5NjI2RjUzMUUwODc3NDc5Ci06MTUwMkI1MDA4MkU1OEM5RTI1MDNEREQ0NURDNDc3N0UzQkYxMDUxRjI1M0UwOTY4NEU0MgotOjE1MDJDQTAwQzNCQUMyNjgyNUFDMzlGNTIyNUY2NTk4RUUyM0IzNjYyMjdDNTJBQkZDM0EKLToxNTAyREYwMEJDMjc1NEU2MUJEMUZGRUJBRTZEQ0RGRThENDlBQUVBMzhFRTg5QTM1QTFCCi06MTUwMkY0MDA5REYwRENGNDI1NDIzNDY4MUJCQjA5RTk4NTM2MDMzRjJGM0M1RjgzNUYyNAotOjE1MDMwOTAwMTA3RTE0N0UxQUU4QUEwNDA2QTM2OTg5REI2M0M5NUFERTlGOTI3MkVCQTcKLToxNTAzMUUwMEMxN0M2MTMxQUM0NTE5MTkzNDU3MDI4NzIzQkUxMThEMDQzM0Q2RjA2M0U1Ci06MTUwMzMzMDA1QzZFMUM3N0VDMjk4MUZEMTE4NjYzQjJGQTNBNDU1RjhEMTFBMkQ2NkJDMAotOjE1MDM0ODAwQUZFOUIwOTZFNkQ0QTM4NDU0RDcwRDAwNEVDQTgyMzU1NDExMTdDN0E1RjIKLToxNTAzNUQwMDJEMjZGOEU0QjA3RDM4NDhCQTk1NjQwMkZDN0JGOEVDOTU2Q0I2QjZEMzVGCi06MTUwMzcyMDA5MUVCMjFCMjgwQzIxOENBQjA0MTIyQjU5NTc1ODNEMTI2MTg5QjdEODhGRgotOjE1MDM4NzAwRkIyQkRBNDY1NjBGNTIwNTZDODY3QzZDRTg1RkYxMTM1RjE5RTBDOTQ4RDEKLToxNTAzOUMwMDIzODczMzQyOTE2Nzk4RjNBNkU0NUZBNThDOTAyMTg4N0RCOUE4REY5MzA3Ci06MTUwM0IxMDAyRUVDRjc0MjFGNjkzQUIwNTRERTZGNzNGNEZERjQxNEU4M0E2QjY2QjJDMAotOjE1MDNDNjAwMEIxMUMzQkEwRTQ1RDBEMTA3NEUzMzE4QzkyQzI0RkUwNzRGRjI2N0U4NDcKLToxNTAzREIwMEUwM0FFNjcxOTNENjM1QzQwRDlGRDY2QTY1QjQ3MUNBQkE1QUM2NkQ5QzE3Ci06MTUwM0YwMDA4MUI2OERFNEY1MjAwQUVBMzE2QjNFM0VGNUY4RDRDQUYwQzkwMkJGQkM2RQotOjE1MDQwNTAwMDNGRDEyRUQwMEJFMzlGOEU3QzRFNzY1RjJBNkY4QkNDODA4M0RBNkI2NDgKLToxNTA0MUEwMDMzNURBQUEwQUZDNERFQTY2QTZDREM4NDE4RUEyNjkxMEZBRDZBMDgyMUJFCi06MTUwNDJGMDAxMkI0QTlDMjY5RDFEREFDOURCMDVBOThCRDA2QjkxRDgwNzcwMkQ2MDIxQgotOjE1MDQ0NDAwRjAyQ0E0NzlCRjg4Q0QzRDgyQkUzRjkyRDQ5MTM3QzI2MkUwRUI1OTY5QkIKLToxNTA0NTkwMEQ2QUM4REE0RjRBM0EwRUI4MDhGRUI4NTcwRTZGMzQ4OTdGOUY3N0NFNEMyCi06MTUwNDZFMDA3MUU0RTA3QzczRjJDMEZDMjU2QUMzMjA4QjJENUM4MzRENDNCQTNGMDYwRgotOjE1MDQ4MzAwRjM5NTY2QjM4NjEwM0ZDNjExRTMyMUUyM0QwMkYxMTY4QTc5NDI2QzNERkQKLToxNTA0OTgwMEUxNTlEQTMyQUFBMzRDMDgzRkJBNjJEQzI0NzQ4NDdBOTRCRjAzMUQ4NkEyCi06MTUwNEFEMDBBQ0U1RUFFQjk2OUNEQzRGRjNGMzIxNkYwM0RFNTQxNEZEOEVEM0RBMzA1MAotOjE1MDRDMjAwNUY1QUM5NTM3OTVBODA0RjIxNDZEMDU2MTI4MTFDMERCNkEwQkMwRTY3REUKLToxNTA0RDcwMDdDNkU0NzFGQzNBNUNGQTA0QjA2NjM5RUZBMjAxRTExRkExODJFN0QzRTUzCi06MTUwNEVDMDA5NTU2OTEzRTg5MjI3RDEyOUY1MTFGREJBNUNGMDU5NzBDRjYzQ0Y1NDE5OQotOjE1MDUwMTAwQkNFMDk3QjgzRUI2NEI5RjRGQTU1NUE0Q0Y2MDkxM0U4MzlGNTExRjc1MkEKLToxNTA1MTYwMDI2QUY0RkNCNEM1RTA2ODRDRjQ3MUZDNDhCNzU3MzdERjA3OUMzN0M2OUIzCi06MTUwNTJCMDAxNUU5NzNCQzQ4OUZFMzJFN0RDMjMxQUZEOTk3RkVGMTU5MjUzMDE5NzVEQwotOjE1MDU0MDAwN0NCQzVFMzNGNUQ5MThGMkU1M0U4MkZENjlEMUI3NDVGRjgyRTgyMzdGMjIKLToxNTA1NTUwMEVDNEZCMDdFRDJBNDYyNkZEOEMzRjczNjMzMjFGQTI5RDExRjE0RkQ2OTM4Ci06MTUwNTZBMDBEMTNGMkVGQTlENDA2NzhGRkExQUNCRDEzMTE4MUI1MDdGODhGQkE4NDUxRQotOjE1MDU3RjAwRTE3OTUwN0Q4MzYyRUM0RkMyNzM0QTdEODc4NkQ1RDUyNkNGNDMxMzU2Q0MKLToxNTA1OTQwMDEwRTZENTExNTJCQjJDRTY2OTBGMjQzREVEMzU2OTRGQkIxN0Q2MDE3NDg3Ci06MTUwNUE5MDBCMjUxQzc2NkY1MTRBM0QzMDM3MzM3QUI2NzE4OUQwNDNDNzdBOUU3MjhBQgotOjE1MDVCRTAwQ0UzRkNGRTVBMEM4QjM0N0VEMTdGOUNEQjA5QTgxMkVFNEEwOUFGQkM4NjEKLToxNTA1RDMwMDA1RjNFQ0NFMUY3NkIwQjgwNTlDNkFENTEzNDJEODc3NzdCRUMxNjA5M0Y3Ci06MTUwNUU4MDAyRUQ4MkIzQkRGNjEzMDk0Qzk4MTNEQjdGM0E1MEU4N0ZFNkE5NUFGMUY1OAotOjE1MDVGRDAwRDI1OUM2OUU1M0I0NDdGMDQ3OTkxRUFBMUZEREU4RDA3NDcwOTE5NjgzMzIKLToxNTA2MTIwMEVCQzg4QUIyRDUwOTVDQTRGQjA3QUE4N0VEMDMwOTYxRDM3NDk0REIzNDhGCi06MTUwNjI3MDBDMjcyMjVENzdENDk3RUJGMzI5NTgyNzFDRTZGOERBMEQxMkNGNjEyRTM3RgotOjE1MDYzQzAwNzE4RUQzMjU2ODIwNkYzRkRGODc0QzdCNDc3RUFDNEREODMxMEFFMzVCNDAKLToxNTA2NTEwMEMxN0U2ODNCMTM5RUEzRUE2MTc4QTZENjVCNENBNjU5MjZFNzJFRjU1NUY0Ci06MTUwNjY2MDA3QTgyRDk3N0QwNkE5QTYxMEU1OEYzRDgwRDRGNkJGREY0RERGQUMzNzUwNgotOjE1MDY3QjAwRTdENjdENjcyQUE5M0REODgxNzIwQzMwMUI1NUM2RTREMDg2MEVCOTc1MDYKLToxNTA2OTAwMDdENURGRjNBMEE2MzZCRDg5OENERTRBRDRDN0E0MkNCREU5MTVCMDM3NTg3Ci06MTUwNkE1MDA4N0Q3NTkzMDU2RERDMUU1NDc3QjU1NDI5Q0RDRjhCNURDRkFBQjE1QUZCRAotOjE1MDZCQTAwQUUzQjAyNjNGRkQzRUU2OUFGOEM1NTg0RkVGM0ZEMEZEQTkwRTZCRkFERTcKLToxNTA2Q0YwMDMwREI3MEZFQkY5QzE4NkI0M0RDNEJFRkJGREU0NjgyQkQ4QzI3Qzg2RjVBCi06MTUwNkU0MDBCM0JDMTg1Q0MyNjQwNjNERUQwODZCRjczMERBMjQxOEI2NTVENkY2MzExMAotOjE1MDZGOTAwMzk0ODUwQjUzMTI2RUVGQ0QxQUMyRUJEMUI4M0Y4M0I2RDU2MDU2QzU2NjIKLToxNTA3MEUwMDI3RjA3OUIzNTY1NzM5REZDM0EyQUM4RDU5MUFCNDhCMzdGRDQwOTdCNkJECi06MTUwNzIzMDA3RDQ1MjdDQTQxRjM4RTAwRDZDNDg2NjU4ODdBMzBDRURBNUU2QkEwOUNFOAotOjE1MDczODAwRUY3NTY4Q0Y4QTdFQzAzRkY4MERDMDVGNkI1NjA3ODI4MEFGQjI1Qzg2RDkKLToxNTA3NEQwMEY4NjNBQ0VEQjMyNjU4REJDMjZDQkVFMDQ3ODBGRkVFQjcwMTdGOUJCOThDCi06MTUwNzYyMDAzMDEwMDFGQ0IwQzVFNTRFNUEwREQwQkVDOEQ2NjE4RkQ1Mzg5M0RGREJDMAotOjE1MDc3NzAwNDg5RDBBNzgxQTVCOUIyNzYxNkRGQUQ0NDM1NDA5QzA4RTE3OUMzNjVCMDEKLToxNTA3OEMwMEI4NkQyQzVFQjM0RTVCQ0REMENFQzBCOTgxMDZDQkJBMjVBMjlBODdBRUM3Ci06MTUwN0ExMDA2NzZCRDA5Nzc2MDFCQzRBN0RDREMyQkExNUVENTc1RTFERDdCNzg2MTBDRgotOjE1MDdCNjAwOEZDNzE1RUU5NTRGMEE1Q0I0Qjc4ODM3MTM5RjlGMDc5RThBRUZBMjFFMzIKLToxNTA3Q0IwMERGOTgxNDY3OTcxNEFCOTE2M0U5OUY1OUZFQkRFMzI2M0E3MDRGRkE0REY4Ci06MTUwN0UwMDAwQkZBRDQwMEQ5RkNFMTExNURGMUM1NDFDNzc3MkQ1OTFEQjdCQTFDNzkyOQotOjE1MDdGNTAwRDRCQkNDMUI5RjcwMUVDNzYxQkUyMkU0QTE0MjlFQjczNkU2RTVDMUJEQTkKLToxNTA4MEEwMEVFOTJDMDlENzRDOTMzNzkwQjc5MjIyRTc5QkE0MDFFRTg1MzVBNDI5RTM5Ci06MTUwODFGMDBGM0FCRjJGMjNDMkI3ODVDQzQzODEyRjI0QzBBNzk5QTVDRjJFMDVFNzU5RAotOjE1MDgzNDAwQkZDMDQ1N0Y3M0U0QzFFNzlCQzkxMzc2QzlCMzE5RTQ4MTNFNEQ5NjkwRDUKLToxNTA4NDkwMEE3RDkyNUNGRTU1RjcxMUU2RDMzQjhBNzcxNzk5MDA3Q0E3M0JDMjUyRjg2Ci06MTUwODVFMDAwRkVFMzU2NzM5MkVFMzU1MDZCOTM1REUzRTYyNUQ4N0IzQUM5MzYzRERDNQotOjE1MDg3MzAwNjc1RDM4N0IzMjVGRUVDNTNEQ0EzNzBDRjFEMDY0RDI3MDdGMUY5RTFCQUQKLToxNTA4ODgwMEJDQ0M3NzMyOTYyQ0ZDQjYwQUY3NkIxN0FGRDgwQzE2OTRBNEQ2RUJEQUI3Ci06MTUwODlEMDA0N0U1OERGQzFDRUI3NUUxRTEwNTYzMzExRTIxQjY3OTRDOTU3MDRGQTAwQwotOjE1MDhCMjAwMzFFRUJGOEJDOTNERDAyNzAzMjZFQzBGOEE1NDY3NDc3MUZDQ0VGMEIwNDAKLToxNTA4QzcwMDdFNjdGODFDRDg2NEQ4RUE0MDFDQzgxOTQ4MEZFMTgxMURCQzc2RTVGREZFCi06MTUwOERDMDA3MzNBODNGREQ1MDhENkFBMjQ0MDZEOURDRjNGQTc1RkNDNjZGRDY1RDU5MgotOjE1MDhGMTAwRkRGQUVFN0JGMzMyRjVGMEZEQzIyNTkzNkQ3NjkwMzNBRDAxNTUwQTNBMjQKLToxNTA5MDYwMEJDRjEyQ0JGODZGMTg0RjMwNUUwMDc1NjdDNjhFNTlFREIzRkNDRjE0OThECi06MTUwOTFCMDBENzlGNjkyQjczRTg4MDNDQzI1RTRDQUVEQTE1MjM3MDQ2M0E0QTJERTQyRgotOjE1MDkzMDAwQUIzNDk5OEJDMERFMUJEMDFDMEFBN0M1NzE1MzE0RUQwRkM3NEY0QjUxMEUKLToxNTA5NDUwMDVFRDJCREM5MzE5ODkzMDAxRjE4QjNBMkFFNzM0QjE3RDRFMkNGQTg5RUIxCi06MTUwOTVBMDBENkI3MjQ1RTYzOTRFMkYzNTA1MjBFOTVBNkRENjA3OTk0Mzc4MEY2NUI3MAotOjE1MDk2RjAwNTA3QjFDODU3QUUzNkQwQjZCMTI0OTFEODEzM0VBODhFNkQ0MUE3MkI5MkEKLToxNTA5ODQwMEE4MzU2MDdFNTJENDIxNDQ4QzI1NUQ3NTQ4RUUwRjcyM0ZENjU2RTg0NzQ0Ci06MTUwOTk5MDBDQTNEMjg5NzRERTMzQzQ3NTFBRjkwQ0ZFQjk2MDNENjFCRTU0NUJBODE5NwotOjE1MDlBRTAwOTA2RDJBNDRENDQ2Q0ExOTBCRTU1MERFNUY4NUIyNzNERjYzNzI2NENDQzEKLToxNTA5QzMwMEMxNUU0ODc1MDEzODhCOTI4Qzg5NzRCNEVEOUM0RThGRDgwRjM5NUQ5QjMyCi06MTUwOUQ4MDBEOUE3RjZGREZENTQ4MkIzQjYxNDFCMzU4RjkyNTE0RDNBMzBDRUVBMkVFOAotOjE1MDlFRDAwM0VDN0I2MTA4NzQ0RTQ3OEJFNkVDQjk4NTU1RjQ2RkE1NEQwRTc3QTIzRDgKLToxNTBBMDIwMEZERTg3NkFFMUZFNzkzMkFFMEMzRUMyMjZDQzJFQzk4RTY3NkJDNzM0N0RFCi06MTUwQTE3MDBEQzBBNDQ2QzM2MTY3NUYzQTQ4MjY3MzA2QzcyNTk1QTRDODVEOUE1RDMxMAotOjE1MEEyQzAwNjQ2N0FCNjBEMEU0NzYxQUEwMEMxRTE5QTZDRkRFMDU3NTg0RjI3REFDNEMKLToxNTBBNDEwMDgxMEE2NEYwOUY1ODQ1REQ2QjA3Mzg5NkFDQzA1OTM2MzI0RTFEM0ZDMUQwCi06MTUwQTU2MDAxQzg0Mzc5NkM3NDg1QzIzOTFGRDE2ODk5OENDMkVBQzBFODA3MTE5RjQxOQotOjE1MEE2QjAwQTUyRDg2ODk5NzE2RTU1NTcxOUQxRTVDQUJGNzc4NjBGREE2ODZEODdEMkUKLToxNTBBODAwMDg4MUZENzQ4MzlBQkNCRUFEQjM0QzA2QUU2RkMxOTZGNDlGOURDMzM2N0E3Ci06MTUwQTk1MDBGRjk2NTNGQ0JDRTgzRTc3NEU5REMxOThGRDk0MzNFNzIwM0Y3MzRFMEVGMgotOjE1MEFBQTAwRTdDRTlCRUNFQzE5RjlCRUU1Rjg5NjFDMzBBMjYzNERGQ0ZFQTBEMEI3MEQKLToxNTBBQkYwMEI4MkZBMTRDQkRDMjNFNkM2RDQyNDlFNjU3NDQxOUIyMDgxREEyNDdGMUUyCi06MTUwQUQ0MDBBRTAyRkMwQTdEODFEOUNDMDBGQTc0Qzg0QURDQzgyRTcyRjkzMzZCMzUyNAotOjE1MEFFOTAwNzUxODY0ODdEOEE3NTdDQ0M1QjA2RkUzN0Q1NkI1QkFBQUY5MTJENjc0RDYKLToxNTBBRkUwMDEyRjEzRUEzQUUwRDVEODM5ODVDOUZGNkI3QjNEQUVFMzFDRUI3MTNEQTA2Ci06MTUwQjEzMDA0NUU0MjBGMzNCOTBEQjEyNzAwQkUxMTdDNDdENDA1OEUwNDY4QTcwMDU2OAotOjE1MEIyODAwREM0MkY4NzExMUVGMEVGRDFFMzE2Nzc3RDExQzAxQjcxMERFMkJFOEY3NUMKLToxNTBCM0QwMDBBNUNBMzA4NTdDMDJEODRCNzA5RkEyQjA1RkQwNjgxOEI3OEY4QkNEQ0M5Ci06MTUwQjUyMDA5NTZGMUE1RDYzRjg4QzY3MjkzQzQzNzlDMThGQ0FBQjQ2QzAzNzg2MkNGMAotOjE1MEI2NzAwQjQ5N0FDQkNBMkUzN0EwN0Q1NjEzQjAwRjZBQTA5MUZFRDkwMTU1M0FGRjMKLToxNTBCN0MwMEVEQkZBMjU3QTlBN0FDNjVDNjA3NkQ4MTRERkZBRENCQjEzMUVCNDREMkZDCi06MTUwQjkxMDBEM0VEOEQ5OTY2MjY5QjVEMEMzNTVFQUIxQ0JCNjIzOTNFNUIwOUI5MkRBMQotOjE1MEJBNjAwN0QzREVCNzNDN0MwQjdBMENFOTU1OTlENEFFN0M0QTM4OEFGNUM1RTQxMjEKLToxNTBCQkIwMDFBQ0FBMTIxM0Q1MTNFQUNBMTZDMzUzQjFBMkMyNzlFRDlEQTYzNEUzMEVCCi06MTUwQkQwMDAyMDI3QTRERkM2M0MyMkUyNzNDMjJBOEU2N0Y0MDVDNjEzNjJDNjFEMjdBRQotOjE1MEJFNTAwMkZERTExRDdDMzY1REMwRjE1OTFEMzNFMkQ0RTVFODJGRDNCMTcyMzA3NjgKLToxNTBCRkEwMDg2MzRDQzA3OEFEODRGMzE1NjU2NDJDQUMyQjNFMEQzQUM5RTE3MzEwNTAwCi06MTUwQzBGMDBGMUYzMThGODlCQThERjczQjBGQkM1QjlFMkU2QjFENDIyNjI2OUE4RjQ0OAotOjE1MEMyNDAwRkQ4RDJCOUU3QUJFRjBEQkNGRDU3NDczRTIyOTZDM0QyREVDN0VCQ0YyRTEKLToxNTBDMzkwMEFFMDBERjEzOTUwRERFQTgwMkNGQjdGQTcxM0NDMjVBMzVFMEVDQTUyQUMzCi06MTUwQzRFMDBENDEyRjU0NEE5NkVEMkUzNjU1Rjc4Q0EyM0UwQjRDNjc4Q0ExOUM3M0JDNgotOjE1MEM2MzAwN0EyNURDRjA4NEVDRDAwODI3OUVBODcxOUUzN0U1RTFCOUZEOEFEREIxODIKLToxNTBDNzgwMDBEQzA3NjRDRDQyM0FBREM0RDczQjUxOUJGREY3Qzg0RURGN0IzNTg5QkE1Ci06MTUwQzhEMDAyOTc4MTc4RjIzMjQ3MjkyMDZENEY2NjZBQ0RGMTgxQzZDN0ZGREJFRjYyRgotOjE1MENBMjAwM0YwNEZGQjQwOTFEM0U4QkVERTJDOEEwOEVGN0ExNDgxMzYxMzU0QTQyN0UKLToxNTBDQjcwMEJGMDA3NUM3OUNGRDUyRjBFRkJBMDlGRkY1OENGRjgwQzlGMjI4MURCNkVCCi06MTUwQ0NDMDA5MThFOTQzRUNFRTk0NjgwOTc4MEUxNzNCQTA0N0Q2QTYzN0RDM0U5RTMyNgotOjE1MENFMTAwRkQzMEQ0MTQyNkFCRDVBMEJGMDY2MzUzRjVCN0FENTdBQjQyNjExMUU3MzIKLToxNTBDRjYwMDIxNzU3OTNCRDBBNDM1Q0EwMUREOTEwMUUzNkU1MTUxM0ZGNzJDRjg1OTE2Ci06MTUwRDBCMDA1MzNGRDBENkFCMEY4NDZBRDQwNzlBMDNFQUFBRDA1NjI3NkZBOTRGNzFDMgotOjE1MEQyMDAwREE4MkE2RTQzQjNFODdBRUY0OEZCNzg2QUQ0RTJGNkY3NUVFQTM2NTg0RTIKLToxNTBEMzUwMDgzN0Q4RjY0MjA4NzQzREUxMEY3Q0Q4QjU2QTdFNTU2NUMwRjc2MjdDRDgyCi06MTUwRDRBMDA3MUU4MTFDODQxMzJFMjQwNEMyMDBFQ0E5QTg1QkE4RTFBRkIzNTQyNTI0NAotOjE1MEQ1RjAwOTgwQkNERUNERjlGOTdDMUFGNzFDRjU1RDAyRTJDMkVBNjYwQkY4MjNEMkQKLToxNTBENzQwMDYxMzUxOTBFNjFGQzY0NzZCRURFRTFCRUE3RkQ5Qzc4N0YxMDdGODRFOTA4Ci06MTUwRDg5MDA1ODYwRUYyQzk5MzA0OTVEMkE5QUE3NkQwOERBQjZDMTYyNEY4MUZENjQ0RgotOjE1MEQ5RTAwNzI0NDVCNjM4Qzk0QTQ1RDIxNjgzNzNFNDJCQ0VFN0QyODVGNUY2NUNDMkQKLToxNTBEQjMwMEU0RDdCMDNFMzE3MkY1QzlGQ0YzODFDREYzMDFFODU2MzIxRjI4QUUzQTUxCi06MTUwREM4MDAyODc3MUU2ODhDNEE1QkQ2NDFDRDA3QjEwN0I1OEE3MjM3OUMyMTBFNkRGRAotOjE1MERERDAwRDQ3NzQxNUVGNjQ4NzEyRDBBQUQxQzQ4NDYxMzJBM0Y5NzdDMTc3MkRERTUKLToxNTBERjIwMEIxRTRDN0NERTRFQTEwQkRGNkI1RkM3QjhEM0Q1RkZGRERGRUE2MjNDNDc2Ci06MTUwRTA3MDAzN0YxNDlENjA3NjcxOTZERjM3RDcyQkI3M0Q3ODdGNzY3NjRCNzcxNzZDRAotOjE1MEUxQzAwMTJERkVERUQ0RTlFOUQ2MkVEMjRDNjEyQjRFOUIzMTlGNkNFMEZDRUM1NTMKLToxNTBFMzEwMDYwQTc5NUUyOEVDNTU5MkI0OUFDRDU1RUEwM0RGQkE3N0MxRjQwOEQyRjE5Ci06MTUwRTQ2MDBDMTk5MjUxMTFFRDYxQUIxRkQyMkQ0MzFDQzc2OERDQzc2Njg2QkM0NjkxMwotOjE1MEU1QjAwMDI1OTQ4NzU1QzVCRkU4OUIwNUY0QzYyRjYwM0UzMDc5QTgwNUUxNUMwM0YKLToxNTBFNzAwMDdGN0U5RjdDMkY1QkNGRURBMkJFODIxNjZCMTdBQzU5OTAwRUY2QkI1OUU4Ci06MTUwRTg1MDAzRDk1Rjc4MTQ3M0VENTA3MDZDNDlERkU3MDQ5MUY1MDcyRkI3REM2NDIyRQotOjE1MEU5QTAwOURDMTM2QjZCMDhEMkQ2QzYzMEJEQkQ4Njg5QjcyQzhFNTZFOUY5OUFGOEIKLToxNTBFQUYwMDNERjFERDEzRDQ1MUMxNEE3NTdGMTBDRUY4QkUzQzZDMkRDMDBFMDY1MzVDCi06MTUwRUM0MDAwNUIwM0YwMkQ4RDFFMDk4MDNBQjQyNTgyREMwNTYwNDI3MTFDNkVFM0Q0QQotOjE1MEVEOTAwQjg3RERGRkIxOEVDMDk3NjNERkZGMTVDQkJCRUY3MzBGMThEN0Q4Qzc2NEMKLToxNTBFRUUwMDZEQjg3N0JFN0FDRDU3OUY3ODA5RkYyODEzRkUxMTA1QkUxN0I2MTVDQTFGCi06MTUwRjAzMDBEOTIyMTM1RjIzQzhFMjAxNTk5Nzk0OTBCNTExRTY3ODk5QUM0REY3REVGRgotOjE1MEYxODAwQ0UxQUNDNTdERURFMTJGMjk2MEI3OTVGMDc1OTk3NkM5QkVCQ0YwNkZBQzgKLToxNTBGMkQwMDRCMDk1RjhFNURDQkZBQ0E0MDhGQzhCNUI5N0FDNDgwNEVGODFBRUFFMTk0Ci06MTUwRjQyMDBCRkY3NzY3REU5NzZGNEU5MjlBMThGMkNGNEY5Rjk1NkUyRUI4NERGNjc1RAotOjE1MEY1NzAwRTFCRkY5N0Y0MTI3QjU4MTJBNkExMzY1RUZFNjIwMDc0QUIwMjlCNzAxRUMKLToxNTBGNkMwMDFDRkIzMkU5MzQzNTdDMEU2QUE2MEFENjU5QUVFQTk2QTI2RUZBNUI3NkY5Ci06MTUwRjgxMDA5NzBFNzk2NzZCNkM4OEJEMkI4RTdENTNEQ0Y3M0NDNzZBNTQzM0ZEMEQ2MAotOjE1MEY5NjAwQTg5RDY0Mzg0N0UzM0I1NURDOTQwMUVGNjJFQzk0NTVGNUM0MTlFQkMyOTUKLToxNTBGQUIwMDQ3OUMzNjAxQkFEOTg1ODYzOTA1N0Q4OUY3QkQ2MzFGMTVDQTMzMjY3MDU3Ci06MTUwRkMwMDBERjgzQjY4QjI0NERCRkNBRjkxMThERjM0MzNFQzhDRkRFNURDODZGMzkzMgotOjE1MEZENTAwRTA1NTNENzFDQURBMEFGQzM0NDE4MzdFQzRGOUM1MDQzRkU4N0JEREY2MDkKLToxNTBGRUEwMDU0ODQzRENEM0ZFMUVGQjhBRjNFNDQwQUM2MTc4OUYxNUQ2MkZDQkRBMjlECi06MTUwRkZGMDBGMTFBMzFCRTU1OEM4RjE1OEQyRjE2RTM0RDYyM0NDMUM2MzM2NkQ3OUUyOQotOjE1MTAxNDAwRkM3OTNGMEIzQTUyMDJGQjM3RUNENURFRTUyNDUyNzA3Njg3QkY4MUE1RkMKLToxNTEwMjkwMEI2NDZFMTRDNDFFQTkyM0JGMEFDNTk2M0VDNUY4N0VGRjUzNTkxRDcwRUQ4Ci06MTUxMDNFMDAyQzlERDUzQUMyMkY4NzNBNURGN0U5MkY0QzNDRjExM0I0RDU3M0JCMkYzNQotOjE1MTA1MzAwNzUwNDVERjBDQkFGRkVGNTc1ODRCN0VFRjg0OTg3RkJGRTdERkE4RDZGODMKLToxNTEwNjgwMDlENDBGODkzRkZGMEUzMEVDMkJFODcxODM0RTNGRkZDMTc5QkZDMDE2M0U4Ci06MTUxMDdEMDA0N0IyOTdGODI2OUYyNEJFMzk3MkJBRUUxNzgyN0Y1OUI4N0ZDQjM4MEUyMwotOjE1MTA5MjAwRjkxNjczODg1NDhEMzkxOTcyMzFDMjRBRUNDNzRFQUU4MUIzNTFGQkVFNDAKLToxNTEwQTcwMDJERTJERTA3NzAwRjZDMTlENTJBNjM4RjA2NUY4MTE2NzFGNjZFRTc2NzJDCi06MTUxMEJDMDAzQzFDNzNDRTMyMEM1NjQ0QUY4RURGRjdGMUVGMzMyRTBGRThGNjgzRjhGMgotOjE1MTBEMTAwMUQwMUZCMTY0MEM0N0U4QUREMjkxOEJFNTFCNjU3MTA1NkNCMjQxOUJFNjkKLToxNTEwRTYwMDVGMzlDREVFNTI3NjhCN0IxNzg0QTlFQTI4M0I0QkVENzFDMTgyMDJENjdGCi06MTUxMEZCMDBFNzgyMzUwOUQ4REU5OUZDQjcwNzg2NkIxQ0VENEIyNjA4Njk1NDQ3MkQ4QwotOjE1MTExMDAwMzcwQ0JGNDM2QzI4ODI1NTQ5MzI2OTJFODQ1MThBNjdCRkQ4Mzg1NTBFMTAKLToxNTExMjUwMDhERUEyRDM4MjZGNEM2RUY2NTA4QkQ5QkQ5OUQ4QUY5MUZEQzU4RjQ1M0IyCi06MTUxMTNBMDAyRjlCOUZGMzQ1RDE4QTdFNjQ5QzRBMDdGMDlDMDMzOEVDRkQzREU3MTNFRQotOjE1MTE0RjAwNTY0N0U5M0VBODI3QjE5RUMyRjNFRTY1RjBCNzQ0MUZFOUM2Rjc0RUQzRDAKLToxNTExNjQwMDM5N0ZFMUI2NkRBQ0UyNzYwREE3NEZFNkU0MENBNzRGRDNGRTJERTNEQTJDCi06MTUxMTc5MDA2Njc1REM3MkQzN0M3OUU5ODA4NkZCMzNEMjhDMTVFQ0VGQTNFQ0VFNjIyNgotOjE1MTE4RTAwQUI4MEVEMTEzMkVFMTEzMjA2NjA1RjY3MzJFMjdCMjU3Njg2NERFMURFRDgKLToxNTExQTMwMENGNkEwNUI2Rjc4QkI1MUMxMDZCMjk4QjZGMjk5OENEQTA2NjA1REUxNkM1Ci06MTUxMUI4MDA3RUZGOTI4MDMzODMxN0NGQTE3ODY2MTI3QTc4NDVBQjE0QjUxNzZGNjREMQotOjE1MTFDRDAwMEJFQTU0NkVERjkzRUM1RTBFRjc2OTAzRjRDMzMzMkUzRTNCMzBGMkYwODYKLToxNTExRTIwMDVDNTg5OTFCQzZFQUU3OTRENTA5MjcyQjQ5M0M2RjU2MzgxQzZDNjZBMTI0Ci06MTUxMUY3MDBERDZBMzNDQ0NFMDE0M0M4QzE2MDAxM0IxQUQ4OTgxMkU3MjczODlGQzIyMwotOjE1MTIwQzAwOUM1QTAzRDYwREQ2ODhCNTkxNzE3MzIxRDJBM0EzNTYyOTdDNTIwMjlGNDIKLToxNTEyMjEwMEU0RjBERkU0RjYwNTE4M0M1QjdCOURDRkY5NDRGQ0JEMjBGNEU0QjE5QzU1Ci06MTUxMjM2MDA2Mjc1OEJFNEU4MDRDRjU3QTUxNEYzRjdBMDNGM0ZGRUYyOTZGQ0I4MDM0RAotOjE1MTI0QjAwN0JBOTA0NEM3RTc4MkVDQ0UzODZCOTYyM0FFN0RGMjJBNjlDNzg3NUM3OEUKLToxNTEyNjAwMDcyN0Y1MTJDNjMzQjI1QzY2RTM2QzcyODMxQzcxOTZCQzRGNjhCRjlCOTdDCi06MTUxMjc1MDA5NTkwQkI4REJCQzkwMjI3OEZBMDRENUU3NDdDMEU5RUVCQTdFMzdBQUMzOQotOjE1MTI4QTAwNjg3Q0MxRTU5NENFNjlBNENDMTY0OEI2ODk5OEE3MUI3Q0FDMDZGNzAxNkQKLToxNTEyOUYwMDczNzMzRTI3QTE3RjYwNUMzODYzN0RFRTMxRjZFRDFCQTdDMzVBMTc4RDc2Ci06MTUxMkI0MDBDRTIyMUE4RTBEQjgwRjcyOTg1MTBDMDM3QTJGMzgzMDdGMUU2Njk0ODAyNwotOjE1MTJDOTAwNTU1NjE3QzI1MEE3RkQyRTlEMUQ1OEJDMDRBQ0JDREEwRDMzNENCQjRFQzEKLToxNTEyREUwMDI2RTFENUMyM0VCMDhGNjBDRUMwQjhGNDgzQ0Y2MzREODVERkU0QjE3RUNECi06MTUxMkYzMDAyMDE1QUQ3NUJENEIyMjU1ODRCRDMzNDJGRkY1MzNGRjFEMzExRDNGQUZEQgotOjE1MTMwODAwM0M4NERGMUJEODc0MDBCRkI1MEJGMzVDNTY4QTg2NzJEQjM0NjAwQ0Y3QjIKLToxNTEzMUQwMDE3NjUxNEYxMkMyRDE3MTc0OThBRjkxQ0YzRTEyRUNDMjVEMEM3NzkwN0MxCi06MTUxMzMyMDA5N0E2MzQ0NjFGN0RDNTRGNjgyOUI4RTI4MjlCNkVGQzI1QTVFMTBBQzAxOAotOjE1MTM0NzAwN0I5REVGREVFQTc4OEU3NURCNkJBQjc0MTM3QkY5NEJFQkJBRTBCMjBEQ0MKLToxNTEzNUMwMDY3RTREMUJFODM1MDRCQjAzQzMwMUZCQkZEMTY2OUExOUVCNzVBMDNGM0NDCi06MTUxMzcxMDA3NkU0RkFDQ0I0MEFEN0Q1MTY3OURFRDlBQjc5M0UyRUI0NzU2MTNFMkUxMQotOjE1MTM4NjAwMjEwQkNDRTFCMkE0NENENjAyRUQ4NTQ4MEY2QUJFOTI3NjI4ODE0RjcyOUMKLToxNTEzOUIwMEY4ODVGMkVENzVGOTFEQzZBRjU0M0QzN0JFNDlGNURDRjgyRUFCOUUxQkI3Ci06MTUxM0IwMDBDQkE0MDRFQzE1REZEQ0Y4RjY1NENGOEQ2NUI5MDg4NkY4NDdEQzczRjMyRQotOjE1MTNDNTAwRUYzQzJCNzlGRDg1MzFDRUY3MDZCNDY5QkQ2QkVGODNENkQ4MjVCRURGOUYKLToxNTEzREEwMDIwQUVCRDUwMjkxQTkzNUQ2M0ZFQTIzMUFGNkI2QzQ5RDE1ODk1NkI2QzU4Ci06MTUxM0VGMDBCOTIyRjYxMUU1MkQ0QTE0OTNDQUVBMzA3QkNGQzRCRjYzQTRGNDFBNkJEMwotOjE1MTQwNDAwMDdFOUY1MzJCRUU3NjU1ODFCMzRBMUE4MjA3MkY1ODg5RTMwQzYzNUZDRUUKLToxNTE0MTkwMDU2NzZCMTNDQTIxRjJCMUZENzhFODU0NzM1QUM1NUJFNjM5Q0QzQkMxNzMwCi06MTUxNDJFMDAzRkQwMTkyRTIwMUYzNjBFNjhDQTU2NTNBRjgxQkM1Q0U5N0FGRjhCREZFMQotOjE1MTQ0MzAwOEZDQUU2Mzg4MzNGMTdBQjBBQ0RCOEQ2MTNERkZCRkZEMzdERkM3QjlBRTcKLToxNTE0NTgwMDU4RUVEQjFCODBDRkYwMzM1RjY1RjJEN0NEQ0I5MkRGQzRFRjRFQzRCN0JGCi06MTUxNDZEMDAzMzEzRUNCQjI3N0U1RjNFQzFCRjhEMDgwRTUwRkVCRDBDMTUzODgzMEMyNQotOjE1MTQ4MjAwQTdEN0Y1N0UwM0RGOUYzRjJCRjg0Q0NFRTE3MzQ3MDExRkZFN0RDRDA0NjAKLToxNTE0OTcwMEZCN0VDQUUxNjMwQjNFNUQ4MjBGQzcxOTM0NTU1MUE3MjVBMTNEMTE5NDc5Ci06MTUxNEFDMDBCQTJCMEU4REU4RkVGMDJBRkQzNTNDOUZDNEVFNkUwQkM0MkE0MjU3NDVBNwotOjE1MTRDMTAwN0M1RDhBREQxMzlBODU2NzJGRDhCRjVFOEJFQkQ0MzNEQTU3MTlGM0I0QUIKLToxNTE0RDYwMEUzM0EyOTJBQkU4QjAzM0JCRTA5NzkzNTI5NzU3N0E5QTcyQzM4OEFENjZDCi06MTUxNEVCMDBDOENBNUE4OEVCMDNCNDJFN0NCMEVEMzA2NjVDQTVERkM0NkY1RDM3RkY1MwotOjE1MTUwMDAwM0I5Q0VCMjJCRkI0MUFENDVGNUFDRUZCRTgzNkY1ODAxNTU2MEY1QkZFQTkKLToxNTE1MTUwMEY0MDhGREJGRjZCRTNFM0E4QUVCQ0FGMzU1QUI1QTZBNDk4REE4MTZBREE2Ci06MTUxNTJBMDA0NkMyMjA5NTg4NzA4NDQ3NzE1QTQyMjY0ODk2NEM0MzE4MkY3ODMwNjkzNAotOjE1MTUzRjAwNjM5Q0FEMTJDMjZFREI2NDRDMUMyNkEzREQ2MUU3NzA0RTU4QkIyNTVBQzQKLToxNTE1NTQwMDIwRTEwNzI5RDU0ODQ2MjYzOEI0QjA2NEUzMDkzODMyMkIxMjNDNDcyNDhFCi06MTUxNTY5MDA2MkUyNzVGMDJDNjFCNDhDQzM5MEM0MjY5RDE5QzYyNjMzMjQ1NkJDNEE2NQotOjE1MTU3RTAwODZDRDM4RjRERURGQUJBQUVFOTIxMEZFOTgzOUIzNjdGRjU4RDVEMUE5QTgKLToxNTE1OTMwMEVBNTdFRkUzQkU3QkVGQkJFRkRFRjdFRUJCNjU3ODg3QjZENTA4N0JGMTdECi06MTUxNUE4MDAwODFGQTYzQTgzQTk0MUIyMkI1RjM0OTFDRTk0NUUwRURGNkU3NzlCRUJBMQotOjE1MTVCRDAwQkYzRUQwRUMyRTVGQTFGRDk5NkVEQTc1QTAyQzlFNTE1N0ZDREJGMDBERjkKLToxNTE1RDIwMEFGNkU4RDRDMkI1RjRDRTUyM0VBMzM2NjkzRkE4QTVEQkU3N0M2RjJEMTdCCi06MTUxNUU3MDBFMzE4MThENUFEODAyNTRDRUY2QUQ0NzYyM0FDNzY3M0FDRkI5QTJDRDFEMAotOjE1MTVGQzAwQTZBOTNGMzdCRDEyRkMyMjhFNzI5M0Y1QjVDOUIxODQ1OTRDRjJDQzgzMDcKLToxNTE2MTEwMDdERTlFOEEwRTk4QkY1OUFGRUQ4QTg2OUVEREJCOEY5RjhBNENEQzdGMTUyCi06MTUxNjI2MDAyOTdDOUNFMURGQjEyMTRENzFGMTZGNTFDQ0RCOThFMTUxRUMxQjYxQUZFNQotOjE1MTYzQjAwODQ3ODM0OEZFNDY2MDk1QkE0NUI3REFCQjZGQTE2MTk2ODc2RjM3MzUwOTMKLToxNTE2NTAwMEVEMzY0MjMxRjk0RTZCQkZDMUUwRjBFNTFERjk3QkFDOEZDNDVCQTFERjlECi06MTUxNjY1MDBBRjZFNjBGOTg3Q0E5MjlBQTIyRTE2QjQ1OTA1M0FDMEY1NDkxRDMxNjI5RAotOjE1MTY3QTAwRUE1MTIzQTI2RUUwNEE2ODc1NkIxRkU5QTc1ODY0RUYxQjdGNDE3MzdDNTcKLToxNTE2OEYwMDc3N0JFREYxREI2RkY5NUIxNEJCRkQyODVBQTlCRjM5NDVBNzc0MzU3NURGCi06MTUxNkE0MDA4QzY3Q0IxQzMxQjlFRDBGRTdFNDE1RkI5QUUzNDlBRDk4NzhEQzVEM0U5QwotOjE1MTZCOTAwQUFGNjFBMUJBODdEOERFMEQwRDQ4M0Y0N0ZENTY4NTNBQjhDRUQ2QThENzAKLToxNTE2Q0UwMDExNTdFQjhEMkVCNUM5MzBENDU1NDRCQjQ3NzQ5M0ZENTk1Qjc1NEFFQzc5Ci06MTUxNkUzMDA5RkI2RjU1M0ZFQTQzQTZBMUM1MUI5RDFGN0VDNTE1RUMyOEVFOTczMzZBNAotOjE1MTZGODAwM0RDQjE3QkM3NTk1MjczNjdEOTI3NzJFNThDQzc3NkRBQUU1QkI5RjZEODkKLToxNTE3MEQwMEUwNUQ2RkFERTA0RjJGMzhDRUIxNjZGMkI5MUZDMDg5MjQyNkVDQkFGREYzCi06MTUxNzIyMDBDRjlFRTJGRUQzODdGNTlFQjdGNkYyNjJCNjc3QTkxQjJFMzIwNUYzOEJBMwotOjE1MTczNzAwRDQ1NUNEOTlCNDY4MDdBRjkyNTg3RUIxM0I0RDc0QTA4M0YzOUJBNEJGMTMKLToxNTE3NEMwMDcxMjE3RDQzQkExNkVCMzAzMkZCNjA2RkRERjg5RTE5MURGQ0ZEODIxOTEyCi06MTUxNzYxMDBFQTIzNUUxQjc5Mjc5RDVGOTUzQzZDODhCMTA1M0ZFMENCMzdEQUQ3RjAxNAotOjE1MTc3NjAwODM4ODEyOUY3ODhCM0E4NUFFNzI5MEYyQkMxRkNDRkE5REY4QTZGQjlEQ0EKLToxNTE3OEIwMDEwQUYxRTE0QjY1RTNCN0M3QTRDRTEzRjRENjNERjRCMzJBMzJGNDlGQTg2Ci06MTUxN0EwMDA2Q0QzMTA0RjU5NkI1RUE2REYzQTVGMzFBNzQ0RDg3RDkzMjZERUFCNkEzOQotOjE1MTdCNTAwMDI3QkE5NDE2N0JDNjNGRDVFOEI1NTEyNEZFMEVDNDgzQjhGQkJEQTU2Q0QKLToxNTE3Q0EwMDY2RjBDM0YxQzVBODVEMzEyN0M0NERFQzU3RjZBOTUyOEIzMjNBQzBBRjMzCi06MTUxN0RGMDBEOTZENjI3RjczNEE5QkY0REUzN0FEQ0RFOUZCMDcxQjVDRUQzMzU3RkIxRgotOjE1MTdGNDAwRUEwQ0VEQ0JBRUY2RTdDRkQwN0VENUM3NkMxRkZFMzU4OTg2MzA3NzYwMUEKLToxNTE4MDkwMDAxMEMzQkU2NTgzMENDQTdCNkE2QjdBRjhDQkUyOERBNTI2MzAzQTQ2QkNDCi06MTUxODFFMDAwQ0I3MzJBNUQzODRFRjhGNENCNjcxODhEQTlEMUYxQjMwOUU1RUYwNkIxMwotOjE1MTgzMzAwRTFEMzMxRTlGNkYzNzFFRENGQUM3RDJBRUIzRjIyRTUyNzc0QTlFQ0E0NjQKLToxNTE4NDgwMEJFN0VBQ0IzRDFCNzhFMEI1RDQ2QjkyRkE5OTVFQzE4RTE1MTFGOEI2MEM2Ci06MTUxODVEMDA3Qzk2RUMxOEU0MzE3QTg2NkYwMUYyMUIyOTZGMEIzMzdFNkQ2MkVGMThBNAotOjE1MTg3MjAwNjk5RTY5NjlENEQ3MTJDNzdGMjQxODhBQjU4NjU5MjlERkQ5MzlCODhEQ0MKLToxNTE4ODcwMDE5MEY3MEYwOEZGQTc5MDIzNEE0QjVGQUNFRURBMUY2NEVGMjkyRDA5NkFGCi06MTUxODlDMDBENkI5M0I4RUYyMDhCNTExOEM1QjNBMzNGMjA4M0YxMEUzNzA3RkYxQjgwNwotOjE1MThCMTAwMjFGNjc3MzhDMTMyNzc0NzNEMjdCOURERDZCMTc3QURGMEYzMDk4Njk2RkUKLToxNTE4QzYwMEI1NzZEQ0ZCMjlGRDNDRTFFOUI1OThFNzRFQ0ZBNUZGMjBDRTQwODRBRDhCCi06MTUxOERCMDA3MzA1NjJCRjBENzM5REJEOUYyQ0Y2NDM0MzMxQTlCOTQwNTlBRkEzNkU1MgotOjE1MThGMDAwOTQ2NTRBMzM5N0E1QzM3QUE3MzgxQkYwQjI1ODE3MEVDMkM3MzJCQTNDMkEKLToxNTE5MDUwMEIzNTYyMUM3MTdFOTU4OUY0ODRDNzg1QTQyNkYzNUYwRDA4QTdCNzQzNjJBCi06MTUxOTFBMDAzRTYyODY1NjJDQjZGRDVBQzRCQTk2QjU1NzYxMUMzNTk3NjI0RjNEM0E3MgotOjE1MTkyRjAwMThCRjRERERCNDA0MzY5M0Q4ODczNTA2ODYzM0ZGQ0E2MDNDNDg3NUY5QjMKLToxNTE5NDQwMEYzMkJGNTJCRTk3NEUwOERFNTdBRDNFMzRGN0E5QTFDNUE1REEwQkVCMDJECi06MTUxOTU5MDBGMDc2MUJFRUI2OUJDMkVEQjk1NEExQ0JBNzkzMzdDMjFFNUU2Njg2RUQwOQotOjE1MTk2RTAwRjU5M0U5RjA0MzQ2MDMyRkU4ODNENTk3MTlGQTMwRkUwRDczMURGQTYwMzkKLToxNTE5ODMwMDNDMTc1RjI5RkExMDExMzAyOEQxQjgwRUY4MEQzNUE3MDU3N0MwOEYzQjgzCi06MTUxOTk4MDBGMTVFQzkyQ0NDMjVFMzdCRjhFMEVGRDI4NTQyOEY1NDBFQzdDNzk3NkZDMgotOjE1MTlBRDAwQUExRkE1QkVBREEyQkUzOUVGNzdGQ0NFNzVENDEwRkUyNDA0OEJBRkU4RTIKLToxNTE5QzIwMEE4RTA4NUI5M0I0RUYwMDk5OUM1OThCMTY4MzhBMDBDRUE5OTMzMzVGNEY2Ci06MTUxOUQ3MDA1QjhEMjVFOEZEMzFGRTNFREVDMzc3MTBGQjQxNEEzQjZDMDZFMzg2REZGOQotOjE1MTlFQzAwNkU3RkE5N0Q1OTdFRjcxNTI1MDQ4RkIzRkEwNDFGMjMzMzE2RkI5RDYyMDIKLToxNTFBMDEwMEJGNjlEODgzRkQ2QTEzN0JCQjU3RDNFOTUwRDZGRjg5QzZDQkJGQjE3QzVGCi06MTUxQTE2MDA2MjVGNzY3RDU4OTRDRjk2MURCNkZGOERDQ0ZGQjRGNUUyQjY5ODhGMjdGRAotOjE1MUEyQjAwNTNERjM3MTVFMjczMzUzNTMwNUMxQ0RBNEVGNTZDRTFDMTU0QTUzMTJCNDEKLToxNTFBNDAwMDk1RDNCMjJBQjVEODA4ODREQTg4REU2M0EyQ0UxMENEQzkyQ0ZBRkJGQzVFCi06MTUxQTU1MDAzNTE5RkJGMjFBODdBRjhFRkNGQTIzODRDNzUyQkUxNkZBQkQwMjFGRjgwOQotOjE1MUE2QTAwQThGMEI1RUE4REQ3Njk3RjFFQTk2REJFNDdGNTM0OUZGNzVFRTFBMUM4NDQKLToxNTFBN0YwMDI3OTc4MjZFMUJEMkU5QzI0OUM5QjE5M0JBOEQzQ0QwMkQyQUVGMzJEQTExCi06MTUxQTk0MDBFMDEzQjg5NjgzRDZDODU3NDNGOUNFREFGOUMyQTkxNTU0RUY2QTczOTU3MgotOjE1MUFBOTAwQzU3M0MzODI4NkY2QkQyNjc2MEZFRjE2RkI4Mjk1MjQ2RjU2ODJBNjg2MTkKLToxNTFBQkUwMDQ1QzNBOUY3MEUwOUVCODY1Nzc4N0EzOTFDNzEwNzg4MUYzRkFENERFNjA3Ci06MTUxQUQzMDA1OEY1MTdGMTAxRkQ0MTc1NTY2M0IxM0FBQkY2QTVDQTkyNDY3M0UxODI5MwotOjE1MUFFODAwQzY1N0YxOEVFMDE4QkM5RTJFNUNBODRBOEQwMjRFODVGNEIwNzJBM0Q1OEYKLToxNTFBRkQwMEM3RkFGOUU1MUZBN0YzMzNFN0YxQzYwRjVCN0I4REUzODdDRDQzNjVENTg1Ci06MTUxQjEyMDAxQUY1OEM2M0JGQUJEN0FFOUZDQTM3QTMyRThERUE3MkYyM0FGOUI2NTI0QQotOjE1MUIyNzAwOUU3RDZCMDZCNDVEMzRDNkQwODc1QjQ5RTY0RDZGNkJGQjhGQUQzRDhBMEMKLToxNTFCM0MwMDUyMkFGRkFBNjRDMTg1NzM3QjVEMTgwQkUzNzE2M0JFN0Y1MDBGRkU2RTk4Ci06MTUxQjUxMDBCRjgxMDFCRTNBRjVBMjYxOUREMzRBMzMzM0YyODJENjQ3RjVDRUYzRDcxMAotOjE1MUI2NjAwRThBNDJCOTdDMEQ3QkM4NjVERTE4OUM4MzdEQjcwRjYyRTg5QjFCQjY2QjMKLToxNTFCN0IwMEIxNkUxMkFENzJEOTkwRUUyNUZFQzdERTUwNjM2NEE4OTEyOUNGNTlCNDkxCi06MTUxQjkwMDBCMUY1Mzc4QzYxNTlGMDk5NEE3MDQ1NUEwNUZDQ0E3M0U2OUIzRjRBRTcwQwotOjE1MUJBNTAwMUZGNTU4RkQ1QzQ5QjQ2RTlBODFBNkI3NTFEQkQzRkIzNEY4QTNCNEQ4MkUKLToxNTFCQkEwMDEzNDQzRDVCRURGMkYzNjI1MkEzNzc5QzY0NDA3NDBGRjdGODEzN0EyNDI0Ci06MTUxQkNGMDBCNTlGMzc1RDRBRTczQjY1NzM2OTlDRTAyQ0REQTg4RDc3OUNFNzE0QjJGMgotOjE1MUJFNDAwODBGMEUwRTRFOUE3NzdFMkQ5Nzg4QUM3N0Y5OEI2Q0UzRjUyOUUzN0RGNEQKLToxNTFCRjkwMDlGOEE3QkYwRTA0Q0IwMTJGRTRCNEE1M0VENDZGRDA1MEJFNzgzRDNDQTI4Ci06MTUxQzBFMDA4RDAyRkZFMDczNzE1NjZEMEY3NzcwOEQzMzcxQUI1MzAzMjZDNzNFN0JERQotOjE1MUMyMzAwNzg1QUJGNTk1N0E2REY0NzJGNUFGRDA2RUQ1MTVGMUJENTU3NjNEMzRDQUQKLToxNTFDMzgwMEYwRTZBMEM1OUJGMDRCOTdENkZDQkUxRUE1RjdCNzNBRkM2N0QzQzJDMkZBCi06MTUxQzREMDA2M0I2MEVFREEyMDU2QjFCRjFDNEM4QkY1ODNDMzFDRjVGQUY4NzA2QTQzMgotOjE1MUM2MjAwNDY4NzM3QjY2MkJDNUJFNzNCNkRERTIwOUQzRjMyQTQyRDY0Mjc5QUMxRTgKLToxNTFDNzcwMDE3QzE4NjYxQzEwRjY2N0NBMUU2RUI3RTUxOTc2OUFFNUM2OEYzODFFNURCCi06MTUxQzhDMDBGNzNBOTVFRUE0OTNGQTQyQ0E2MUUyRjk3NjVFNDQ3QzExNkNBRkQ1OTVFQwotOjE1MUNBMTAwMzc2QzdDM0JFM0MxNTUwNkY2RDQ0Q0Y4QkUxREUzOURGMjAzRTczN0I0QTUKLToxNTFDQjYwMDQzRTNFOTI4RDVFOUY4RDNFNEJBNzg2MzFCRjE4NkZBQTZDNTFCMTJFMURCCi06MTUxQ0NCMDA1N0I2Nzk2M0VEREY1QUY4MTU3QjU2ODQ5M0NCQkZDREQyMEZGNUNEOEE3QwotOjE1MUNFMDAwNkVEMUI1OUY3Q0E5OUU2NDlDNTk5RDVBNjM1NkE1NTY5ODI0RTc0QzkyMTQKLToxNTFDRjUwMDgzQzYwQ0ZCNERFMjFDMzNGNDE0M0ZEOTAxQzIyNzZFMDYzRjZGRDI5MzdCCi06MTUxRDBBMDA3ODVFNTFCN0RFMDZCRjRDRDJERkEwOTc0OUY5MDMzQUY2QjVCQUVDNzNDQwotOjE1MUQxRjAwMEJGMDJEN0I1MEY4MzMwRDBCNUI0QUY4NzdFMzRDMzREOTRGODdDQTRFM0IKLToxNTFEMzQwMDZBQ0MxODEyQkVERTRBQjJEMzg0QkRCQjJBNzk0QUU4NzdGMUU0MTA3ODJBCi06MTUxRDQ5MDA3MjhFQTI3NjlBQUJENDUzQTY0MUY3MTJFMzg4RkVBQTZBQkQ2Nzk1NDM5OAotOjE1MUQ1RTAwRkNGMjRERjQzRkQ4NDM4MTUwQjQ3NTBGRTY2RkE1OEExNzkzOUNBRjI2M0YKLToxNTFENzMwMDNCRTY3NkY4RTIzQjc2MzNEOTY5MTVEQTU1QkQyN0IyQkYwREY4RjM1RkQ0Ci06MTUxRDg4MDBDOERBQ0RBREVBN0RFNkRCM0Y5M0VFOTQ5NTdCRjUyQTc1MDVBRjIyNURENwotOjE1MUQ5RDAwRkU5MkVBNkQwRUQyRkQ1QkYwNDUxNEUzNkMwRjJGM0Q5RkNFN0ZBRDUyMTQKLToxNTFEQjIwMDZFMjQ5QkRDMjA3QkQ2OThDNzhFREQxNTIxMUI1MEI2Njk0RDc2QUMwMUE4Ci06MTUxREM3MDA1OUQ5RTQ0QTQzM0UyNTE0NkVBNTNBQ0QyRUQ1REZFQ0Y4NTg5NjkyQkREMAotOjE1MUREQzAwOUJDNzJDM0QwREJGOEY1MkREQkI5NUE3REFBMDhGNTVDRjYxODU4MENCNDgKLToxNTFERjEwMDZENjdCQTZEQ0NFODBGQUQ3MUQwMjlGMjU3RjM2QkM1QUM5MDI5RUY5OUFGCi06MTUxRTA2MDA0MTJBMDM5OUUxODZDOUUyQkY3QTdFM0JDRDBCODAwRjcwMDRENTk3MEQ2OAotOjE1MUUxQjAwRjQyMThGNzgxRkVCRTc2QzdDMzE3NDlFNjA2OEM1QTc3NEY0MUQ3QTkwQjcKLToxNTFFMzAwMEY3NzQ4MzRFNjA4NUFBQTgyRTIxMDM4QzFFMUU1NTlGRTFBRkNFMjZEQUJFCi06MTUxRTQ1MDAyQkM0Njc1NERFNjkwNzc2NjA5MEY0MUY0QTMzREQ2RERFOTM0RThCMzZEMAotOjE1MUU1QTAwODU1RUE1MUMzNjQ3NDg0NzJCOEZEOUIyMkM2QUM5MzlENEQ5MzYxQkVCRkQKLToxNTFFNkYwMEY2NjE0QTNCMkNFMEYyQjJCRDdBMEZFMDhBRUUzMTIxQTcxQ0JBMzk2QkMxCi06MTUxRTg0MDAxRUQxMzc0MEJCRjcwNEVENzA3RTVDNTU0OThGNTczQTg3N0RFQTFEQTY4NwotOjE1MUU5OTAwNzcwNUU5NDBEMUJEQTI2RUU4RjVEMEU5RkRFQUIzNjZDRDc1QTkyOUFCOUMKLToxNTFFQUUwMENGNTgzNDcwRjBFREE2QzM2MEMwRjJCRkJDRDk3QjFFNjA4NTZFN0EwMDQyCi06MTUxRUMzMDA5RUIxQkZBMTM5RDJBMTE3RTQ5NTUyNjUyNkQ2NzAxRDdBRDRFNDkzNTVDNQotOjE1MUVEODAwNzc0REU3RDdBODdEOUUyRjlFN0FDNzJDMDk1RDZDQ0Q0OTkyMkQ3REZFNTQKLToxNTFFRUQwMDBBOEQ4RDJGRjAwQUVENEZGNDI1QjE2RkYzN0Q5RDI3REFDNDNFOTBFRDkxCi06MTUxRjAyMDA5NzFFQTZCQkIwODdCMDg2MDhDMjhDQzFDNzdERDgwQzhCQjNEQ0RGMzBERgotOjE1MUYxNzAwRTY4NENFNTBCQjNGMjQ5OTUyREFFQThCM0Q0OTNBRUQ3MkNDMkI2NkM3OTIKLToxNTFGMkMwMEJEMEY5MThFN0JCRkQxNzFFRkJEN0E3NzRBMDI0RTg1N0U5Qjg3MzkyRTc2Ci06MTUxRjQxMDAxQ0I1RjVEQjJFQ0IyRjhGQzY2Q0NDRjZCMzFGMTZGNzZBREIwNjM4NjI3QgotOjE1MUY1NjAwOENEQzA3M0IyQjQyNjVCNjA4N0QzQTJEN0M0NDUyNUM0NDRFQzgxOUUzOTQKLToxNTFGNkIwMEUxNTgyRDlGOURDQzY5MDkzQ0JCOUUwNzRFQjdFODUyRjIwNDBGNDBCRkEyCi06MTUxRjgwMDA4NzlFN0MxRjdDRDI1RjE2M0VCODdERUM5QjFBQ0FCRDRGQ0E1M0RGNjc3QwotOjE1MUY5NTAwQkY2OUVEQTc1MTdERkJEOTc3MzRCNkVEMTg0N0Y0OTAzRUY2NkQwREJBNDAKLToxNTFGQUEwMDE4RTQ3NzFGN0I0RDgzMkYyREUwODk5MjBFODdGQzgwRTU1Njg5MDU5RTc2Ci06MTUxRkJGMDAyMjc5MTUxODVCQTlERjRERkRGMTJCOEZFOEIyRkE5QzgxQkUzQTdFNTBGNgotOjE1MUZENDAwMkM3QTlGRDkzMUVCNUVFMTAzOUM0RjMwMzE2MzhERDlDNzA2MzJGRTUwMUEKLToxNTFGRTkwMDI4Q0ZBMkNGOTlBRjEyNUZGQUNFOERFODZDQTREMzg0RkQwNEZBMEZEQjM5Ci06MTUxRkZFMDA3QkNDNjhBQkU4NTI0QUVGQ0Q3OTQxRThGNTZCQjFBRTNDNzJDQzFDNjNEQQotOjE1MjAxMzAwMjI1RjFDRkEzQ0ZDRTJCMEI3ODg2N0Q4MDc1OEFGMjEzOTE3QzdCQzczNjQKLToxNTIwMjgwMEFERTI3MDczQjlFQTY5RjQ5RDIzM0RCQ0ZFMThBNzcyNkRFRDg1MkI1QkU0Ci06MTUyMDNEMDBBMDVGOTMwRDVBMTI0REJENjM1NDY4REZEMzY3NEJDRjBCOUREOEUzM0Y4NQotOjE1MjA1MjAwQTEyMzZGMDlGQzFCRUE4NzkwM0Y3MjcwNjcyRkNENDU3REMyMzYwNTBGRDMKLToxNTIwNjcwMDg4Nzc2NDIzNEU5MjNDRjQ5RDNCQThDRjNCRjc5Q0NFMjYwNzA1NEMzODJECi06MTUyMDdDMDBFRjQzN0MyNTY0RkMxRkM2RDYzNjU5NzhGOTg2RTEzQkZENzI5NjBGOTIxOQotOjE1MjA5MTAwREUwQzFGODRDMDA3ODQyNzg3RjZCRUM4MkFCREFCQ0Q2M0QxMTFGNDMzNkQKLToxNTIwQTYwMEJBNEQ4NzlFNEZCMzE3MzU4NzlFMkNGQTBENzMxMDNBQkFDRDJCNTNGMUEwCi06MTUyMEJCMDA2N0UxRURBQkFGRkY5MTg2MzM3MjUzNzE3NjQ0RTBBQ0E0NERGODQ4REJCMAotOjE1MjBEMDAwMzgxQjA2Q0UwMjZDRkM1ODFDQkVEQUQ3OUVCQzc3ODlBODBGQjZDQ0E4NEMKLToxNTIwRTUwMDg1MzMxNjVEMzQ2Q0ZENzdGNjVCNzMzQjFCOUUzQjdBNDJFMDQ3QUM3RkE2Ci06MTUyMEZBMDAxOUM3Q0MwMkU4QzU5MzVGRTE2RjEwNEIxMjdGOTQxNEE1M0NDREMwRUQ0NQotOjE1MjEwRjAwRTM5RTI3OTZGRTY5Q0E3MzY3MjhFNjY5NzZGMzA5NzhDMzczRTkxRERERjgKLToxNTIxMjQwMDI3QkRBMDc3QUI1OTlDMDRBNzhDMERDQkY2MDM1RDJEN0VCNkM2MEFGMDg1Ci06MTUyMTM5MDA5NEUxRjVFOTc2OUZCREVGNkVBQUVCRUZGNDlEQkJBQUMzNjdEOUVBQTcwMQotOjE1MjE0RTAwQzE3MTA2NDRFODNGRTEzMDE3NzhEOUY2NjlBQjdGQ0E0MDFDNkJFQjJEMkUKLToxNTIxNjMwMEVBMDM0QkIwRkZFMTY1OUQ3QTcwQzc1NzQ1RkZEOEU2RTc3OEVGRDgxNzU2Ci06MTUyMTc4MDA0OTNFN0NEMTc0RDkzQkZEQzJENkMxOUUzNkUxODI0NTQ3NENBNzhFMjAzQwotOjE1MjE4RDAwRDk1MTg1MkU1QzhDMTE3RjI3OTdBRjZGQkE3RUREQzJDNzZGQ0E5RkE4RUUKLToxNTIxQTIwMERENDBGQTk2ODU5RkJGRDdFQkE0MjczRjAwM0ZERjI3RkMzQ0ZGRUY4MkRGCi06MTUyMUI3MDA5Rjk3ODA5Rjc1NzdFOThFNkQ5RTY2NjFDRTI2N0Y2RUUxODM2Q0U2REUxNAotOjE1MjFDQzAwMzhFQzA1MEIxRjBCRDgyMjNERjhGRTYyODE4RjlDNjhBOTVFMUUyRjZGM0EKLToxNTIxRTEwMEJFNDVDQzcxRkI3ODJDRjVBRUI5RUQ5N0IwOTc0QjVCRTlEOTgwN0NCMUNFCi06MTUyMUY2MDBFQzFGQzIxQkZCRTMyQzBGMkE1ODMzMTBGRjg0QkIwMTE3RUU1RTM2OUQ5OQotOjE1MjIwQjAwRjZBNkUzQUU5NzcwQjc4RDcwRjc3NzM2RUUyRTEyRUVEMDdFQzhENUZFMkQKLToxNTIyMjAwMEI1NUY1ODZENEY2REY3MDU2RDVGRkU1MDU2NjZEQzVDNTZDQzcxQzk4QTI0Ci06MTUyMjM1MDBBNjRDM0VFQkVDNzQ2NjdDMkNDNEJBRUVCQUU3MzMzMjQ0RDhFN0UzNTQ1RgotOjE1MjI0QTAwMkUzRUE0NEQyRUY3MEFEODIwNEIyMDQ3MjJBNEUzNDE4RTYwNEQwQTY3QjMKLToxNTIyNUYwMDIwNTBFRUU5OTQ0QjlFRTRCQ0E0NjFGRjBGRTczNkYwNUVCQ0IzRTQ0OUVDCi06MTUyMjc0MDA4OTZGREQ0QkZBMDE2QTVCQzg5NDZENDM2MkNDNjI3RDBBN0QyRTc2RjUzQwotOjE1MjI4OTAwNTlBNjNFQkI2NUNENzRGRkE1NTFGOEU2Mjg1QzJGQkE2NEU4MDFEMjBGMzQKLToxNTIyOUUwMEZBOTIzMkY1NDczNTRFREUyN0Y0Q0E5MDZCOEY4QzA2M0VFOTkwMzRCNzJECi06MTUyMkIzMDAwMzU3Mjc2REZFNDA3OURGNDI5NjJGOEZFRkQ0OTVGMzNCQjVBOUZFRkMxRQotOjE1MjJDODAwODZCMDM1NzY5N0Y1NkI0MkI3OTQ1OTE3NzAzNTI2RDY1Qzg2RTIwQkIxMEIKLToxNTIyREQwMEE3NDM2MzIzMjc3NTJDMkVBNzRFQzQ3RDdFRDI3MzA4QkYwNUYxQTFDNjY5Ci06MTUyMkYyMDBFMkE4NDFGMzAxRTczRDI5Qjk0NTU2MTM3Q0FFRjIxNzM4MkIxODJBQzJDQQotOjE1MjMwNzAwMTlCQTBDNEM1MTYxNzc2Q0M3OTlCQkYyRDVBREQwQjE1ODc5NThEODIxQ0YKLToxNTIzMUMwMEQwOTUyNzFFQjA3QzY3QUZFMTVFQkU4Q0U2RERERjNGMjA3Q0Y3QzJFQTE3Ci06MTUyMzMxMDBGMUQ0MDMzM0ZCNzMxQjg3QjA3RUQxMkZENjJGNzY5MzFFNUMzNEQ2MjlBMwotOjE1MjM0NjAwRDYwOUQ4Qjg5QzMwMUE4RTU4QjA0Nzg3RTI0NUYwNkZCNEQzM0RCMUExMkQKLToxNTIzNUIwMEI4RDIzMDJDRkFEN0MzRjY2QTM4NEZFODVCNDdGMzg4MzEwNEJEMDg3MzlBCi06MTUyMzcwMDA4QzQxNzM1QkE2N0ZDNTkxQzE0NkE3QUNCNThGOUI3OUJFMDE5RTZCODc0MQotOjE1MjM4NTAwQjJFQjMxQkJDQjg2QjVBMkI4MEQ4RjcxMTM3ODI4NUQyMTVCMUFCMEI4M0YKLToxNTIzOUEwMERCOTRBQ0ZEOTg4RUNDNUE4REJEM0Y4RkJENjg1NjdFRDJEQUY3QjRGRDY1Ci06MTUyM0FGMDAxMTA5NzcxNjdFQUNCNUY0QTk3ODU0M0EwRjRDRjEyRkEyNzExMEJGMUY3NAotOjE1MjNDNDAwN0QzMDVBMzExNjQ4OTdFOTI4Qjc3Q0EyRTIxRDk0REUxQjRENkFCRTIyQ0UKLToxNTIzRDkwMDRCMkY0QjExNEM1NzcyRTI1OEYzMkFDNEZCRTg3QUNCOTZDMURBQzE0MjhECi06MTUyM0VFMDBEQjhGNkFCNUUwOTEyM0YxRkJFODlEMDNCQjgwOUJGMjZCRUJDNTFFQTNBNQotOjE1MjQwMzAwRDgwNzVDNkJFN0QzNURGOTU2QTQ1RUU4QTBGRjM4RDI4REY1NThDRkY5ODMKLToxNTI0MTgwMDc2MUNGMzFFRkE4MkZENEZDMEQxQkI3MzQ4MEI4RUQ5RjA1MEJBRDNFRTEwCi06MTUyNDJEMDAxNkJCQkU5RTE5REFFRDc3QjVCQkQ1Q0VGNzhDMkJERjRBNkExN0Y5OTIyMAotOjE1MjQ0MjAwQUU3QzZENzZCRTgxMTlFMDVCOTlGQTY2MUM2NzEwOEUwODE4QkYxQkM3MEEKLToxNTI0NTcwMDFFRDgxNTgyNDUyMUY4OUUxNkJDNzM0Q0Y4Q0RGNDdFOEY2MDY1RDZCQTNCCi06MTUyNDZDMDBFMDE1MTdBQ0RCRUNCQTVGOUMwMUQ2NjExNzBDREJFRDdDMkZDRjAwRUI5RgotOjE1MjQ4MTAwNDk1N0JFMUQ3NkJFNTczRTAwNTZEMEQ4ODFGNUVBODdDMDdBRDUwNTZCOUUKLToxNTI0OTYwMENBQUVCQkZERkUxQjYxRURCQTNGMEJDMzY1M0I1RkY3RkQzN0ExRTdGRDI0Ci06MTUyNEFCMDA1OTdBNUVCRTA5M0QyRkJCREFCREUyRDA3Mzg2NzZGQjVERUQ1RTc1RTg0NQotOjE1MjRDMDAwNzk5Mzc2Qjc2Q0MwRjgxQTA1MEU4QzA5NzdCQkU4QUZCRDdFOEY3NDg3NUEKLToxNTI0RDUwMEU3MUZBN0ZDRkJEOTUwODZFNzM3NzgyRDlFN0Y1RkIyNzgzRUI2MjFEQjQ2Ci06MTUyNEVBMDA3NkQ0NkJCNUZERjA4NjBGNjgxQkZCQTU3NkJCNEU3QjkzQUU3RTZFQjBGNwotOjE1MjRGRjAwRUJGOEUyQ0M3NTE4MThCMzhFNkZDRUI1RTkzMjhGRTRDQkU1QzFBQ0JDRjgKLToxNTI1MTQwMDEzRTM1OUFDQ0QyMkU2OTQyMUZDMDk5ODMyNjI0MDU3RjFGOTNCRjVERDZFCi06MTUyNTI5MDA2NTg2QTZEMEZDQTBBQzNEQTU5N0YyMTNGQTNFOUExMkRDMzJFODA5RUFBOQotOjE1MjUzRTAwRDc0Q0IyQzcyOTE3OTI4NkI0RkRBNDM3ODI1RjJDRkZDN0JENjQ0QjI0QTUKLToxNTI1NTMwMDNCRTBFRkJENTJENDk1OUQxQkVBQTgyRTBGQ0QwQjE5Qjk0QTdBODk2RjA0Ci06MTUyNTY4MDBERDkwOTBBOTQyOUUzQUYzNDUxQ0YyNzQ0OEM4NTM2NTBEQzE0RjcyNTQzOQotOjE1MjU3RDAwNzIzRDRGOUQ4RkIwREZEQkFGNDk2NTg2OUVDNjFBMThGNkRBQURCMzc0OTgKLToxNTI1OTIwMEY2REMzNDZDQjU2RkQ4RjIzNERBNjc4QTM1RDVGMTIxQzNFQUNCQTAwNjlCCi06MTUyNUE3MDA3RjE3RUMwQjE4OTg5N0M4NUU5OUFCQkNBMkZCNDhFN0M2REMzNEUzN0MyNAotOjE1MjVCQzAwMzI5NDVEMEZDNzNBMUNGNjk0NDI3MEQ3ODU2RkJFRkQ5QkU2RjMzOUQzNzkKLToxNTI1RDEwMEQ3QzJBRDc1RENBMzg2NENGMzQ4QTA0MTlDNzU2MzAxRTkxN0ZBOTMzNDk3Ci06MTUyNUU2MDBCNzJEMTBCQUM5MTEzMzEyNjREMUQ3Njg4RUY2MTUwRDBBOUYwRTJCMTYwMQotOjE1MjVGQjAwNThCNUQ4MDdEQTVEQTY2QUFDN0UyRjZGMTNGQjBCM0Q2NEVGNTc5QUUyNTQKLToxNTI2MTAwMDRDRENGRkVERkZDM0JEMUMzMEIzNkRFRkYyMzhEMTU5QzBFRTdBQkY5OUYzCi06MTUyNjI1MDBGNEI2RTVGNEZFQ0JFQzFGOTcyMkM2MDlGQUIwQUJFQzg4NzM1RTU5MTVCOQotOjE1MjYzQTAwN0QyMzdENDhGNDQzMjFCQkUyRTNGRTBGRjRGMjkyMTVFRkVBRDlCNEExQUQKLToxNTI2NEYwMEUxNzVCMUY0MTJBN0FEMEFDREIyRDUzRjRBNUJGMUU0OEQ3NTM1QzZCRTQzCi06MTUyNjY0MDAyQkVBOEE3RTQwRjkxODk1MkI1RDMzQjVEQ0VEQjE4Nzk2NTg3NDMzQ0M4QwotOjE1MjY3OTAwRDVBMDlCNUQyRTRDNzlGREQzRjJENkM1MkFFQ0JDMkExN0ZCNDMzNjVEQUIKLToxNTI2OEUwMDY1OTFBRkM3NUMzMDYxQzc3QjIzN0NFMjZDNUQ1RDJDQUY1MUVDQkRDMDYwCi06MTUyNkEzMDA3RjUzRTQ0RjcwOTJGMTMxMDlGOTg5QTcxMTM3NDZCNkUyQzMxOTg4MEYyRQotOjE1MjZCODAwMjdDRTNGMTMyRjg5QjM5OUUzODNBNjdCM0ZBOUY1ODg2QjNGMDg3QkE2MDMKLToxNTI2Q0QwMERCMzg4RjYwM0YyNzJBNkMxQjcxQkU1MjUxRTBGRjYxM0ZBQjM4MDc5OTBCCi06MTUyNkUyMDBERDBGRUE3NTk1NUYxODkzMUI5RDNEMjFENDIxQUZFMTdBOEY1ODlCMUU0NAotOjE1MjZGNzAwMUM5RTc0RURBMzNBRUNFRjYzQTNGOTZGQzk3N0U1N0NEOUYzOUVGNDc1MTkKLToxNTI3MEMwMEU5NTFFOTMzNTI1MEJBQzZGRThFRkQzNUZCMkU3Qjk5MERCMUFGMzE5MzE0Ci06MTUyNzIxMDA3NUIzMEVCNjgzRkQyOTI5REE1RjYyOEZCMTQ3RDk0MzZDMjNEM0Q4MDM2QQotOjE1MjczNjAwNkMzREZCMUNCQjk3RkQwMTVCQ0RFRTY2QUJEODRBQjY4MjJENjdDREFDRjAKLToxNTI3NEIwMDg5MzVCMjA2QjY4QzJENjU3N0IwN0FCNjg0RDVCMTVBMTY2NjlGNjZCNzNDCi06MTUyNzYwMDBCMzRGQjExQUJBN0U4RkREQzYxNkQzNTVDRDNFNDlEN0FENkMxMTVENTVFOAotOjE1Mjc3NTAwNzQ3RDgyQUU4NTc0NTVEMkE1RDI1NTIxQUU3MkJBMTY4ODZCQkVCODZFNUEKLToxNTI3OEEwMDExRDczQ0ZCMkExMzU3QTk3RENEQ0Q1QzIxRkIyQUM5NUM0MUQ3MzVDN0VDCi06MTUyNzlGMDA3NTE1NEZCOTAyRDMyRUU1ODY2QkY2MEQ1N0QxOENEN0FDOUI1RUZFMEY3QQotOjE1MjdCNDAwQkMwQTNGRjQyQUY4Qzg1N0ZFODc1RTNFMjZDRTE4MUZCN0Q2Qjc1NEUxMTEKLToxNTI3QzkwMDhCNEVCQTNERTlGMTUxQTYxRTQ3NUExNUE1MTlGNjczMzUzRDhGREJDRkI0Ci06MTUyN0RFMDAzNUY0QUM0OEY0OEMzNUJFRjI2QUNBMUZFMTA2NUJDREM3Qzk1RTUwMjRBMAotOjE1MjdGMzAwOEQyQkVBQzJFMzRBOENGRTkzRjQ5RjVBNzg1QzhDMkJCMTFFNTIyREY2NjcKLToxNTI4MDgwMERCNTVENTRFQ0JCN0QzMjQ0QThCRDk2OTA1NzY5QTg3RDI5Mjc2NUFBMTY3Ci06MTUyODFEMDA5RDk2NDM2OUE4OEZEQTE0QjAyQjJDMUFCNkVCODI1RjYwRDhBRTAzN0U5OAotOjE1MjgzMjAwODA2MUJCMkNGQ0ZFQzI1NDI2MkFDMTY2NTFGOUYwNEI1ODI4QkQ4RDMzQzAKLToxNTI4NDcwMDc1RTEwMTZGNjg5OUE4MjcyQUUyRUVENDFBQzU0OUE5Q0U3NzY2MzFDRDlFCi06MTUyODVDMDA2Qjk1MDc3QzY3MUE4NDNDODg3RkMwQkJFMTBGNzgwNzNGMzhCQzJCQTJCMgotOjE1Mjg3MTAwNzc5NDZFMjI1RDdFQkQ0MTE3NkQ4RjJGMzYxRERDMzkzODQ3M0ZDNjZENDMKLToxNTI4ODYwMDE4OTU2MTQxMTM0MzE1M0U3NjYxMDM3RTIwMENGRDE0NjVDMkFEQzAyRkVECi06MTUyODlCMDA3MEE4NzhBQ0ZDQTk2RkRCRUY5OUNBOUJENDg1QTY2MUQ3QzM1RUIxRDIzNQotOjE1MjhCMDAwQTM5NDJGOEE3NTRBNjVBMTI5RkJDOEE2QkZDOTNEMkE2NUYzOENCQjlFQTAKLToxNTI4QzUwMDE1NEZGNkQ5QjBEMzQ1RkQ2M0U5RDk4OEVENjRGOTQ3QUE3QzQyQUNFN0NECi06MTUyOERBMDBBODU2M0M0OEIxMkVBQThBNTg5MUI5RjZCM0YwNDNGMzEwQUY2MTdEMjMyMwotOjE1MjhFRjAwQkM4QzQ3N0ZFMTYxMDlDRjMyMzMyRkE0QjZDQTkxMDY3REEyQjI0MUM0ODcKLToxNTI5MDQwMEE5OThGOEFFRjcwRUUwMDRCRkUxMkIzMDQ2RTVGQzZDMTlDRUU0OUEzNUM2Ci06MTUyOTE5MDA4NDBCNTI5RUI4NEZBRDMzRjNEODZEMDRGQjZEQTYzNzE0NjkxRDlGMjE2OAotOjE1MjkyRTAwNEQ5MUFDMzRBNkJFNjdDMkJFQUFDRTk5QUU5RkE5ODY0ODAzN0ZEM0ZENjQKLToxNTI5NDMwMDQxNTVBQTkzODk2NjRBQkNCRDRFODZGRjhDNTIwOUY5RUQ2MzRBMkQzNTRCCi06MTUyOTU4MDBCOUNDQTgxMTcxMTk2QTREQTYwMDJFNTVDMDEyRjU5NDUyMUI4QjBEQjRBRQotOjE1Mjk2RDAwMkY5RjI5RDU5NUY4RTI3QURDN0RGMUM1NzVCODQ3RDFEN0YxQjA5MEY5NEIKLToxNTI5ODIwMEM4MkJGODE4RjI5REY0ODlCODE4MTNDQjc4NDRGOEQ5NDY5MDFFNEJDRkU4Ci06MTUyOTk3MDA1RTRENzlBMjQ2NENBQzc3NkJGNjU5RkMxODhGODhCNTkzMkRENjk5RkNFQgotOjE1MjlBQzAwNzA5Qjc1NDY5RTZEQjdFM0YwNzZEOTY3NzgxMEY3NjQzNjAxOTUyMDVERDkKLToxNTI5QzEwMDI0NjExODJDQTE0MUZGQzFFRkY3OTZDQjc3QjBGMTBFQzNBRkNBNzUyQzRDCi06MTUyOUQ2MDBCQUQzOTg0NEJGQzY1NUMzNUEwN0IyQ0UyREQ3QTQ3MkVBNDQ5RDU0OUYyRAotOjE1MjlFQjAwMzg2NzgzRTc2OEFGRDE1NTE2RDcyNDMxRkZGNTlBOTk3M0UzRDFGRkRFMjQKLToxNTJBMDAwMDhGRkVDRDU3OUYzNjY0RjU3NUQyMTkxMzQ2NDQ5NUVGNzhFOUExOTdBODIwCi06MTUyQTE1MDBGRUQ3RkE5MThFQjQxQTRBM0IzMDJEQUQ5NEQyNzY0RDRCREJCNjlDRTBFMAotOjE1MkEyQTAwNTJERUVFRkZGMjQzRUZENDkyNjJDNkZERUEyNTYzM0IzQkMzRTdBRjc4MTIKLToxNTJBM0YwMDQ3NkZBOUY4NjlFREQ3OTY1REIxN0RBNUUzNjJCRDZENDFGQzAyN0M3MzlCCi06MTUyQTU0MDA4NDVFQjE2MEM1Mzk1RDRFMEUxQTlFRjIyM0FEQUFGQUFEN0U2NjRDOUEyRQotOjE1MkE2OTAwQkVBRTVFQTE5MzYzN0VGNjhERjUyRDBENjE4RUE0NzY5OEYxMERGMzE2MUYKLToxNTJBN0UwMEU5MUQxRDc4Mjg2MDNGQUQxRDdFRTg5NzRCMDkwNkEyRTkyNTgyRUI5QzA3Ci06MTUyQTkzMDAyMUYxN0RGQUQ3MzZCRENENkY4OUQwNUNBQ0VDMzMwOTY3RjFFQkNCNTdCMQotOjE1MkFBODAwRDVGQUJBQTlCREU4Q0U2MTc2MjQxNzZCRTVDMzNFMUY3NDgzREQwNzdDOUIKLToxNTJBQkQwMEFCREZBMUY0RkQwN0FDREYyRkQ4QkZCRjdERTAwQ0NEQjdDOUVCRDNDMjlCCi06MTUyQUQyMDA2MDQ3N0ZEODlGRjA5QzMxODBCN0VENkM4Q0M3QkY5MzVCRjdDNDEzQjk3RQotOjE1MkFFNzAwNzU1ODFGMzgzMEZFMzU2RERFRjlGRDVBQ0VCOTM3RjRCQkQ5ODVEQTc5OUEKLToxNTJBRkMwMDYzQTc3NEM0MTY4NUZFNjJBRDJGOEU4QkJFOTYyODdGQUU0RjNFN0NDOTE4Ci06MTUyQjExMDA5QzI3QkQ0NkVGMkY5OEJFRjhCMUE1RDg4MzQyREQxMzBGOUYzMzdDQzk3NAotOjE1MkIyNjAwRENCQTkxMjc3M0VGMTA2NzE4ODc0NTFDOThFMzA5MEZEOTBDQ0EwOTAzMjUKLToxNTJCM0IwMDdERjlFREExQ0VGQUQwNjlBQTVCRjkwNzhFRkUyODgwM0JGQUJENjExRkQ1Ci06MTUyQjUwMDA2MjA1MjlCQjhGMkIwMkZFRUYxRjdGOUJDNjYwODFCQUI3MEI2QkI1Nzk4NwotOjE1MkI2NTAwNkE2N0JDMjdDRTM1ODlGNDkzODlDQTFGMUFEMDUxOTJBNDc3N0NENTg3NjIKLToxNTJCN0EwMEY4M0FCQzZCQTJGMkQ3MjZFNURERjM0QkI1RTY4RTI4RTVERjExNUI1NTg2Ci06MTUyQjhGMDAwN0JCNEE4QzJERTU5ODIxMjc5RjI1MTlFOUFEOEI4RDFEQUQ2M0M2MDkyMAotOjE1MkJBNDAwNjMwMkJDNDdFRjMxN0VENjUzQkE5QzNDNDZGQ0QzMjk3QzEzQUJFREQ4MUUKLToxNTJCQjkwMDZENjJBQzE5N0JDNTNFNDdCNTE4NjcwNkY3MjVGN0QyMzg4QjczOTk2ODU4Ci06MTUyQkNFMDBBQjMwNUU4RkJCOEZGMTNBREMxMTNGQ0E5N0VDQTMzQUM2OEMzNkVDMkJDMAotOjE1MkJFMzAwMjYxMzg2RTQyMzFDODVDNzRDRkMwNjFGNjI3QzlDRjkyRURFMEQ5MjNFRTYKLToxNTJCRjgwMDQ5M0E3RjMyNjFERTE2RTcyMjdEOENEMkYxMUJGQkM4MTM5NURDRjBDNzUxCi06MTUyQzBEMDBFNEJBMDBFOTZCMTgyNzEzOTU4M0U2M0NCMjI3NDZBRjdCRUYyMDVDOUFFNgotOjE1MkMyMjAwNjdERTRGRkIxNDgyQTc4OURBQjg4MDcxMTVFRUU3MTMyNDgzOUJBODVFODAKLToxNTJDMzcwMDk2M0M2OEJFOTFGMUU3RUUzMkZDODQ4MTMwMDE3N0ExOTNENzMzRTM3NEM5Ci06MTUyQzRDMDBCRkYwNjMyMTc5RDYxRDM5QTdGREU1MTc3MkVCRkE1OUE3RDYxRkVGRDNFRAotOjE1MkM2MTAwN0U1OTI1REZEMTRGRjZEQURDNDRBRkRFQjM5MzZCM0QwRDE3QzU1RUI0RkQKLToxNTJDNzYwMDkyN0FCQUZGQjY0NUU1OUYxMUJBNUIzODNFOEM5ODI0ODEwNTA5QzRDODA2Ci06MTUyQzhCMDAzMkU2Mjc0NTlGQUMxODJGM0VFOEEzNzExMUMzQTU1QUM2REVGQkRCODYxMQotOjE1MkNBMDAwQjQxQUYxOEE1RjM1N0JDNkI4MDZGRjQxNUZGMjIwOTVEQjBEM0M4QjU4RjYKLToxNTJDQjUwMDU3QTVBOUE3Q0RGOUE5QUY5QkQ1ODQ5QkY5RDRENzY0MkVGNjM0Nzc4QkFGCi06MTUyQ0NBMDBGMTU5QURFRTE2QkVGMUEyMEU4NTIzNkU5RkFGNTRGREFBMjE3Q0Y2MzY3MwotOjE1MkNERjAwNzE0RUU1MENDODA2MzkzNjYyRDRBN0JFNDM3OTc3RDM1OEU5QTU3OUVFMDUKLToxNTJDRjQwMEEwOEUzQTNENjc4NzQ0MkNFNUI2QkY2MEFDMENGNjJGRDk4MDg4NTcyMkQ3Ci06MTUyRDA5MDBBRkRCQTU1MzlGMEU3OEQ2RUREM0I3RTRCMUE5RTM2MzFDQjE2RUJBRjg1MAotOjE1MkQxRTAwNTdERTkyQkZGRkI0MjRFODIyNjIwMDA1NTNGMDMzRUExNzdFNDZDMDI5QUUKLToxNTJEMzMwMEUyRkUwNDU5NDJBQzVGOEE3ODY2OUZCNzdDQkY5MDZFOEVGNTZBQTVBOUNGCi06MTUyRDQ4MDA1REZERTFENEYzNDk2NTA1RDc3REE0MDNFN0FDRTVCQUFDNzJEM0VGNDM3MQotOjE1MkQ1RDAwOENCNzgzQkMzQUQyQjcxNEVCQkUyNUVEQzQzRkVBMTAyRjhERTNGNzA5QjEKLToxNTJENzIwMDMzNjRGRjQ2NEMwRDRCRUU5MzdEOUFGMkQ3MjEwREVCQzJCRThDRkY3Q0NCCi06MTUyRDg3MDBCRjg4ODFFMzAxNkVDNjdCOEQyQTQxMDdFQjhDQTI0NDc2MzdDRUU1NUFDNgotOjE1MkQ5QzAwNjcxM0FEM0RCRDM3QTkyRTg5NjAwMEVENDEzRkE5RUI5ODFFNUFEMDY5QzAKLToxNTJEQjEwMEVFOEY1OEU3REExMDQzNDZGQTAzMkVGNDc0NDVEMEQxMTA3RTZBOEFFMDAzCi06MTUyREM2MDBFQkU3OEU1RjE2MzY0NDk3ODhCNzIzQTc0ODg2OEQ0RjBBM0MwN0M4NDYwNAotOjE1MkREQjAwRjYwQjFGODM3RTExNkZDNzIzNjI1NjVCQkU2QkNDNzhDQTQ0M0M0NkMwODgKLToxNTJERjAwMDI5QTVCRUMyQUI1MzlGQTg3NUNCNzZDODc0RDA0RkM4RjU4QzRDMjdGOTc1Ci06MTUyRTA1MDBCRTI1QjcyNTk4RkE4RDI5RTIyQzFFMDdGRkVEMzJGN0ZDMkU1RDUyMEY4MQotOjE1MkUxQTAwM0YzQjlCMDZDMDcxMzBCNUNGRjBGMDVFM0REMDY4QzVCQ0YzOTA2QzQwNDAKLToxNTJFMkYwMERDNzYzRkVCNURFMjI3MUU5OUM3N0E2QjQxQkZBRDJFREVEQzZBRDFDOUIwCi06MTUyRTQ0MDBEODhFN0JGOTk1NTZDMTVCNDQzN0ZDOTZDNUI5ODJCODg4RTMwNDdBODM2NwotOjE1MkU1OTAwQkUyMjM2MUZDNjMyRDE3MzNBMkQ2NTUxRDZBMkMzODdFMUY2MjNEMzA4M0YKLToxNTJFNkUwMDM0NzBFM0RFQTFDN0M3QTA0MTgxQTA0MUJGMURFNzI4NEI4QjBGQTU4MTgyCi06MTUyRTgzMDA2QjZFNzVGMDNGRjYyREM0QTcyQzBBQkI2OTUxMUNGQjY0QURCMDRCQTNCRQotOjE1MkU5ODAwRURDM0Q3OUVGQ0U0NTIyNTk2NDdGMzY4QkIwMURCMTNCMjhBN0YyNUI3MzAKLToxNTJFQUQwMEVFRTJCRjM4RjJDNzkyMTdBNTQ0QUJFMjA1REM5NEE4NEZBMDFERkE2OEU2Ci06MTUyRUMyMDBDNTNBQjJEQTQwN0JBODNCMTMwRjIzQTMxRjU5RjQyODczRDE2Mjg3ODBBOQotOjE1MkVENzAwQTdDQjNBQjc0MEVGMTE1NzRCNDlFRDMzMjUzNTIxRjgwOEJGMzVENzc5NzkKLToxNTJFRUMwMEUwQTBBQjdDRjBGMzk5RjhFMDIyQUU3ODNGMUIxMkZCMTYzRUQwQkM3RENBCi06MTUyRjAxMDA0OEYzQUI1RTIxOEIxNUYwMDdDOTlFQjI4ODI1N0IzMkUzOEVGQTJDNkQ0OAotOjE1MkYxNjAwQzFGQzRCRjczNUU3MDQwRTY4OUMwNkZCN0Y2QkY1MzczNUVEQjMxM0Q4OUUKLToxNTJGMkIwMEEzMjkwRDc1QjU5NkQxRENBRkIyRTRGMTMwMUIzQjFFNjFBOUUzRDcyRTdGCi06MTUyRjQwMDBBNEYzRTkzRTRDQkY4NzI5N0Q1OEIzQ0JERjJDRkY5MTM3QTdFNkFGQjZFQwotOjE1MkY1NTAwRjM2MzFFMUZGRDhEREJGRjE0RjMyQzhCQkFDQjhBQjhDMzYyQ0Y4RDFCNEYKLToxNTJGNkEwMEQ3OUY5NEVGNjg4MkJGOEIzQTFBRkZFQTk5NTM1QTJFOTkxN0IyREFEQjVECi06MTUyRjdGMDA4NUI4NDgwNUVBQUI1RDM4RkY2OEY5ODM4Rjg5MzM1MDhBM0E0Mjc2NEE0NQotOjE1MkY5NDAwQzJGMEE3MTZENUM5N0Y5M0NFMDcxRUNFNUU0QUU3NEZBRkQzMEQ5QjM4MDgKLToxNTJGQTkwMDNCNDg2NTlCRDQ2NzhDQzk5RjcxRDI4OTBDMTE3M0M5RTJDMzNGMzMwNTIwCi06MTUyRkJFMDBFRjVBQjE5RDI2N0E0ODNGQUMyMzNERThFM0YwRTZDNENGN0E4RDg0QTdDRQotOjE1MkZEMzAwQ0I2MDQ3RTQ5Njg5OUY3MTMzRTFFOTM3OUJENDFFRjMzN0Q3MzEzRUUyNTEKLToxNTJGRTgwMEI2MkREMjZFNUU4NkVFMTMzNjFDQkRENDhBRUI2RTFDMzRBMDAzNEIzNDk0Ci06MTUyRkZEMDA2RTAwM0JGRDM2NzdGQzE3RDJGQkMyNTExM0ZBQUU4M0IzOTM4N0IyRjhDNAotOjE1MzAxMjAwNkVGRDc1MTZCRkYzMTEwQjIyNTQ0QTdBNzlCQjcxOTZFMERFQ0U2MjlDRTYKLToxNTMwMjcwMEE1QzJGREQ4OEZGMkE3QUE4RERDRDNCNUZBQjdFMjhCNkIzQjk3MkQ5QjcyCi06MTUzMDNDMDBBMjJCRTYzMUY4ODkyRTEzRkE1MzlFRjQyOEM5OEYzNTg2OUE4QUY2MzM3MgotOjE1MzA1MTAwRTU1N0E2Q0Y1N0E5QzNEN0Q0RDIxMzE3MkUyRDIwNUJDNDUzQUU4OTM2RjUKLToxNTMwNjYwMDEwNUYxNjdBQjZCN0JENTYyRjhBRDRENjE3NTA5QjQ3MkJFRTVDM0EzRjNDCi06MTUzMDdCMDBBNUQyNUM1NzZEOTRBNkMyODZFNDZGRDQzQjlGQURFNURFMzFCMkZCQzYxMgotOjE1MzA5MDAwOTc5OUNFMUUzNzYyMUIwQTVENUQ2OTI3RkRCMUFBNTZDNjVFNkFGNDkxNDYKLToxNTMwQTUwMDYxNjYzQzdDQzBENzg1RjMwMUZGNDlEQzUzQ0IzRDc3NjRENzgzNEFFRDlDCi06MTUzMEJBMDBCODgyRDVCNjlDMEE5MzlDNUFBNjQxNEY5RkE3NEE2MTExOEY1NEM4NjlDMQotOjE1MzBDRjAwQjI0MUE4M0ZCMjJCMjY5NTM1N0YzRTNGNUMzNjc2NTAyRkIzRDczMzgzODIKLToxNTMwRTQwMDM0MEY2M0JFNjVFM0FGOTgwMUU5QjI1RTU3NTlGNDE5NTY3RUE2OTVCMTZECi06MTUzMEY5MDAyQjVDNjFGRkIwMzQyOEJEQUJFRjUzQkQ3NUQwMDVDMzI0MTNFNzRCNDNBRgotOjE1MzEwRTAwN0E0OUU4NjRBQjJGRjIwRjRCRTZEM0RENzNBRTRGRjhBRDYwMUQ2RkVFRjIKLToxNTMxMjMwMDBBQzRDMjNCNjlGQkM3QzRGOTE1OUFENzhCRTMyN0Y0QzA3Q0QyNEI5NEU4Ci06MTUzMTM4MDA4RUUxOEZGQTNGOTc3NDZGRENGQjk3RTdENTE3QzdGMkM4MjY3OUM1NjA0QgotOjE1MzE0RDAwQTlFNzhGQkY0MUUzNjg3RUVBNjkwM0IyNEFDNDExQTBGRTA3NjgzRUJFNTUKLToxNTMxNjIwMDVBRDZCQjI0NDJCQTBDRTY5QjA3QkM4NkQwNUY3RUZDMENBRjc1NzQ5Njk0Ci06MTUzMTc3MDBBQkJGNEJERjU0NjcxOUZFREZFOTlCRUEyQ0NCNkVBNkIzNDRERkUxMjlBNQotOjE1MzE4QzAwRTdGQzI3NjQwQ0UxQ0E1N0Y5ODVBNTA1NjIwRjBGNzgzQkI1MzQ3OEZBRkMKLToxNTMxQTEwMDE3NTRGRjI5QkU5RTcwQjc3Rjk5RTE5Q0E5MTc3ODBBQzU0NzMyNzgwQTZDCi06MTUzMUI2MDBBNTE2RDVGQUFFNjA0RkI5NjM1ODdFRkQxNEU0NzM2ODVFNkE1NjJERkQxMwotOjE1MzFDQjAwMzY4QTUzMjVFMjVFOTA1QTIwRUUwNkM5RjE5OUZBNEZGMzY5QkQ2N0Y1NjgKLToxNTMxRTAwMEJCRkFFNTZCNjkxRkYwODBCRUQ2RDg3RDlGNzhERkVBRkJGQzE5RkE4RTdDCi06MTUzMUY1MDAzMkMzRDczRTdFRkYxNzEwREQ0QjIxNDdBMzNERkQ2REJGOTk2NkJGNTA3MAotOjE1MzIwQTAwMUZDNTVBQUE4QjlFNkJERDc5QTI3REM2M0RBQzlGNkYyMDFEM0RGNzg3MDkKLToxNTMyMUYwMEJENEI1NEY1MzQ1OTIwMjk1RTJDOTFERUE1NUMzMDgzMzY1RkNBMzgxRjEwCi06MTUzMjM0MDBBNEZDQzREQ0NFMkVGMjgwNzQ1NTg3RENCQjY1QzVCQjdBNzhFQzNCRjVGRAotOjE1MzI0OTAwQjczNDU4RjhCQzg1QkQ2M0Y5NzU1MTdCQjdDMDVFMDk1RjE0MzgwNUNGM0QKLToxNTMyNUUwMEMxQkYxMzNFQTJFNTI5NkY5RDkzNjdFRUU5NEIxOUJDQ0ZBNUIyOEFEQTUzCi06MTUzMjczMDBERTFGMkY0Q0I0MjBFRjU2RUNFNTQ0NDdGQTExN0IzMUU3Q0MyOUJDM0JDRgotOjE1MzI4ODAwRTAzOTdCNEEzN0QyNjQyN0QxRkI2QUY1MEI0QjcxMDczQzkzQ0JGM0VFNEIKLToxNTMyOUQwMEQ4RjZEMDRGNDkxRkZDODlFMTUzNUYzRTUwQTNGRUM4NUMzNjY5RjczMTk1Ci06MTUzMkIyMDBCQTZCRDg4RkY4QUFDOUY1REM3QTg2QURCNDZCRjhDQTcyQUJGQzQ5QzI4RAotOjE1MzJDNzAwNUJEMEFFRUJEQUYyQzc5NkRFQ0U1RUE4MTNCNjhFMkIyRkNBQTIwRTc3QjEKLToxNTMyREMwMEI5QjM5NEE3RTNBOTBCNUE1OEZEOEY0QjkwOEVGOTkxNTRFNUNGRTFGOThDCi06MTUzMkYxMDAxOUNDOTFEMTVENDlFODlGMjg1QjgwM0Q2NUMyMjVCRTFGMzNCRkU3QjA2MgotOjE1MzMwNjAwQzBFQjNDOTU3NDAyQkJGRUEyMjlDRjczNkIzREQ2NzM3RjgxM0FCQjk2N0UKLToxNTMzMUIwMEVFODZBN0M4RDJDQjUxQkZFN0VCN0I3NEExMDM3Qzg3NjQwNUU5NTc2Njk2Ci06MTUzMzMwMDBFNDc5NEQ4OTI0RjQ1MjlBM0I0NDNDMTZDNTNBODNGMzYxRkYzNEE3NzQ1QwotOjE1MzM0NTAwNDk1REVCNzVGODE5MzI2NUE3OTg3Nzk0MTI5QTNGRUM3OTQ3Q0M0MTc4NUYKLToxNTMzNUEwMEY3MzFFNjFGNjdFRUIxRTdBMTE5RTcxRkNDM0Q5ODgzRUFDNTk5RkJDQzUxCi06MTUzMzZGMDA1Q0MzRDUzMTZCQUVCMURBNTE1OUE5RkEyQjczMEU3NDA5OUE5NzdDNkFGMwotOjE1MzM4NDAwQjdCOUU1QkRCNEFGMjBDOUJCMEEwOEVFRkE0OEEyQ0VCMUZGNEE2OTFFRTgKLToxNTMzOTkwMDQzOUVENUVGMzlGNEVFMzQ5QUVBMkNCQjcxNjI1NEJDMzdGMDNFNENGODM0Ci06MTUzM0FFMDA0MTc5OTZCQzZDNDg2NTU3ODgxRjM5RDk4RDVEM0MzNzk5ODgxNzUzM0JCMgotOjE1MzNDMzAwNEE3MkE0MUY2MzJFMjc3NThBQTM0RUYwMUE3OEFFNUFGREQ5MDFGMEQ0QTkKLToxNTMzRDgwMEM1RjcxREZEQ0M4Njk5NjA3REEzRTc1OTFBQzNFREM2RDY1RjU4RjNCQjk0Ci06MTUzM0VEMDA1ODk3QTVCNjQ2N0Y5NTFENUY4MTkwRTVFRkUxQjNDRjE5MjQ0MzJDOUYxOAotOjE1MzQwMjAwNzRDRkZDMkIwMUVCNzdEQ0NCRjIzNzQ4QUM3MDdCMEVDQkM3Nzk4NkY4QTIKLToxNTM0MTcwMEQ4RDQ2RjNCNERGQzJENEQ0QzE3MTExMjlEQkE0NkZGNkRGNDZGRDBGRkM2Ci06MTUzNDJDMDAzMEZEOEZEM0ZGMDRGRDJCM0ZBMkY3M0ZCMkYyOEFCRDgzQTBFQUM0Njg5NgotOjE1MzQ0MTAwRTQ2N0M3RjBFMTg4NEExREIxRjA2RjU1NUI5N0IwRkE1Rjc1NUVBNDdDNTEKLToxNTM0NTYwMDE1RkRDRjEwMEVBRTkyNkNCRTZBQjJGQTc2MUVGQjRCN0I5REFEN0U4MDQ1Ci06MTUzNDZCMDAyN0U5Qjk0N0Y1QjYyODM0QUVDN0RFNDY1RjQ3MERDNEJDMTRFNzNFRUE0NgotOjE1MzQ4MDAwQkIzOURBQTk3N0Y0M0JDQTFGQTdGQ0I3QjJCRENERTI5OURBNTM5QTVGRkEKLToxNTM0OTUwMDM0MENGNDQzMzk2MUMwQkYzNkI0RTI5OENFNjI3QjM5REVBM0VDN0VGODY3Ci06MTUzNEFBMDA2MzIxNzYzNEQ1NTkyQ0VBN0M0NUI0Mjk2MjFCN0Q2MDFEQzc3ODUxRTQxMgotOjE1MzRCRjAwNTQzM0YyQTNDREI5QTExQkZEQTk1OTcwODJGN0IyRUNGRUFERjBERjA4OTIKLToxNTM0RDQwMDY2Q0ZFQ0JGNzk5QTFBQTQzOTkzRDU5RkUyMTZBRUUxREIzMTZDRjVCMzRCCi06MTUzNEU5MDA3RTg4OEIzNkM3M0IwREFDODE5NDhDMUREMzE1NkFCNzI0N0U1NDg3OEY3OQotOjE1MzRGRTAwOUVBQzRFNERDMzFBODg4RkQyMDJFMzVEN0FDRjg0QTdDNUZEQ0U0N0VGOTIKLToxNTM1MTMwMDQyQ0E3RkQzRkQ2NDg3OEU2MDFGRDREOTc3MjVGOEZDQ0MxNTVGNjk3QUYwCi06MTUzNTI4MDAwQ0E1N0ZFMzdCOUMxMzFBMDkyMjM2NDc3NUVCNTVCQTdCOTUzQTFEMzE4OAotOjE1MzUzRDAwNzJGREIxNEEzMzk3Q0E1QzBCQjE0MkY5QkZCNjFCNTZCQzYxNzkxN0QyQzMKLToxNTM1NTIwMDA2MjlDRDFGMUJBMDM5Njc5MTdFNzFCOTc0OTc1N0U5RDBDNzI5MERGMUFDCi06MTUzNTY3MDA0QkJCOTAzRjU2NjlFMDdDOEQ4QTczQTI5NDI2QzcwNkNDNjFBNEQzQjM1NQotOjE1MzU3QzAwNDE3QzdCOTE2NDIxN0NGQzZCRTYzMjcxQzY4MzA3QjIzNjA5Q0UxQzVGRjYKLToxNTM1OTEwMEY1NThGMUIyQjYyMTlERTAwN0MwNzk0NzEwNzdGNDVEQUU5QzdGNDY0MzMwCi06MTUzNUE2MDAzRjRBRTExQkE0OEM3MDlGRkY5OEJFOEU2Q0IzMzlBQURDOTI5NzNBMjgwMAotOjE1MzVCQjAwRTJCNjEwRkNDNUExMTRGMkVGRUQ5MEJBN0I4NTNGMjdDRTE4REU5NjZDOTkKLToxNTM1RDAwMDVBQTJGODJENUYwQkM0NjY5ODJERUExQzNBRTBBMzNDM0UyQjRGQjAzNEQxCi06MTUzNUU1MDAyOTJGOTE4RURDNTg5NjQ1RjMwNERFMEM5QUY3QUFFNjU4REY4MDgyRkYxMQotOjE1MzVGQTAwQkRDM0U3RTM3M0UwOTc5RUM4Rjg4N0M5RUFBNEQ5NUE0Mjc4MjJCOTI0NjAKLToxNTM2MEYwMDEzN0VBMkY0Q0M2NkYwRTcyRjI1QkM1QkRGM0NGOTZCNzM3QkVBNkYwRjM2Ci06MTUzNjI0MDBDODk3REFGNUNCQzU1M0VCQzdGNzQ0REFFQ0ZBQkRBMUIxNTZDQTZCNTBFOQotOjE1MzYzOTAwREU3RUQ0QjU4NzY0RTc1QTE5NkIzQUVEMzQzRTIyNTRGRjZBRUU1M0YxM0QKLToxNTM2NEUwMDFDNkQ4NTNGQjc0NDdBMkVFOUMyQTY1RkQ1Q0RCNTA0ODM4QzMzNzIyNDk0Ci06MTUzNjYzMDBBN0YxN0Q5NUY5NkEzQjg3RENEQzUzNzY0NkMzN0FFQ0FBRDQzRjEzQ0ZGNAotOjE1MzY3ODAwRkVDMDVDNERGNzI0RjFDMjVBQkFBRjRFN0RBNjFGQjQxMEZFRTc2QUVEQjUKLToxNTM2OEQwMDAxMUZENTUxNEZGNTk3MDY1ODdFNTgxREUwMTY5QzVGRTgwNzlDMzg4RjczCi06MTUzNkEyMDBCRDkyRjQ3NUQ4MzA5RUYyNThFQjlFQjIzNjBERjIzRTQyRURDNEE4MkVGNAotOjE1MzZCNzAwQ0E3NzNDNEFGN0NERjQxRkExRkE3MzMxNjcxODREN0M0MzZBQjkxOUEzQjcKLToxNTM2Q0MwMDc2QTJBOUZERkQzOEYzQjA5QURBODlBQTNEMDcwRTUyMUU4RERBM0FBQTlGCi06MTUzNkUxMDBEODY3NkM0OTg3NDAzQjg0QzA5MjNENjU0OUFENTUxRDMwNjMwNEQ3NjYyQQotOjE1MzZGNjAwQUE3RjgyRjA3MzM1QzAwQTdENTRFNjMyREQ3MTRFOUVGOENGQkM0NkNGRjcKLToxNTM3MEIwMEFCQTg4RTg5MDBDRTE5MjRGODE2N0E3RTM1MDA3RTU3NUJERkE0RkI2QUUxCi06MTUzNzIwMDA0QTkzMjk2RDk4OUVGRDQxOEI0NkQzNzFFQ0E2OTdGNzUyNUNERjRDNzkyNgotOjE1MzczNTAwOEI1NUI5MzlDNzQ1Q0ZCMDNBNDhCODg2N0YzMUY2ODQyNzY5OUMwRjlBNjMKLToxNTM3NEEwMDhBNEE3M0RBMzQ5QTg3NUY5QjJBQUZFMTJGQTI4NDczNDgwNjc3NjU2NEVBCi06MTUzNzVGMDAzMDFDMTIzMDU3REY0REQzODEwN0U3MUNCNzhENzA1MUNFMzg2NTk0RUNGNgotOjE1Mzc3NDAwMThCNEU0RENCNjYzOTYwQzhBRUUzNUUwRDMzMjE3MzIwQTZCNTg4ODhEM0MKLToxNTM3ODkwMDE5OTU3NzY1REFERDM2NjlDQkVGMUU5MjQ5NTgxQjNDNjg0QTY1NzEzRDI0Ci06MTUzNzlFMDBFMzdGNDY3OEEwNjkyRjlGRTYyRTIzMzg5QkU1RTNBQzA2RDk0MDhERkRGOAotOjE1MzdCMzAwMTJDQjI3M0UzMkE4OUY4RDdFMUFDNzA1RUE4MkNGQUNDQTYzRjlGM0U5NkMKLToxNTM3QzgwMDE5REY5MjkxOTVEREZBMjhGMTY5QkZDMjBBQkZDQ0FBMUE0OTQwMDhGQzdDCi06MTUzN0REMDAzRTQyQ0YwOUM1QzI2QjM5QUI2QThFREE3MjFGQjI0MEMwNDY3NTYwMkU0QgotOjE1MzdGMjAwODg1MDFFMTJFNjg1Q0JFOEFFMjgyRkVBOTk3ODc0MzQxRjVGQTg2ODZGRjcKLToxNTM4MDcwMDg0Q0ZBNzg4QkQ0NkY3QUJDQkJEQ0QwQUU1REI1QTdDRTMxODcyQzYwOTU0Ci06MTUzODFDMDBGNkNDMzAwRTI3OThGNTBEM0MyNzhGOUZGODYwQTdGRDlEQkE3MkQ1REJEMAotOjE1MzgzMTAwNUM0REY1RTQ5NzVGMjEzQTFEOUE4MjBCODVGQTczMTY3Q0EzREMyNkNFNzQKLToxNTM4NDYwMEQwRUM4QUUxM0IwMzNEQzYxMzkxNUVEMUZGRkM0RkQzRkM0NkY4MDBGRkRDCi06MTUzODVCMDAyRDI1QjQ0MTZGN0ZCNTA4RTMwRUZEN0FEMUMwMUNEMUM4M0E0NTVFQTkzMgotOjE1Mzg3MDAwMkNBQzc3RTY2M0FENjNDMEFDNzJGQUE1NzQxQjMyRTkxNkQ1RTBCRDQwQUMKLToxNTM4ODUwMDE3NzQwNTAzRkU3RTBBRDU4MTMyM0VGNTQ1N0FGRjJCMzNCRkM4MkFDN0M2Ci06MTUzODlBMDA5NDE3NERFMDc4M0JFNUNGNzVDRDVCNkFEMUQ0RjU5QjZCNDVBQzMwNDhDQQotOjE1MzhBRjAwNzkyNjhBQzBGMzU1NDY0MjhDOTM2QTMxNEVFMERGMDQ5OUZCRTZGNTc0OUQKLToxNTM4QzQwMDNFRkM3NTBBRTI4OTQ2NkZCNDVBNTdENTRBRTNDQTcyQTk3OTk0Q0FEMDIzCi06MTUzOEQ5MDAzODJFRjRCQUVBMkZCNkNGRDY2NUVENTVENTk4NzgxQjAxQjU3NkVBQThFRAotOjE1MzhFRTAwNUIzOUZGN0IyMkQ2MzA3Q0I1QjA5NjI0OTMxQzk1QTlCRTIyOTJGN0U4QjYKLToxNTM5MDMwMEM3QzQ0MzAzRjUwRkQyMzM3Q0FENjQ3MTFFQzhENjAzRTBFM0Y1MzZGNjM0Ci06MTUzOTE4MDBGODJDRjhFNUQ4MTBDOUE0MTcwRDcxMkVEREQyNTVEM0M1MzQwN0UzRkJDQwotOjE1MzkyRDAwNTVCMkZBOEM2OUNCOTMwMEJFMEQwOUY5MjZDMzNGQzJGRUZFQzQyNEQ1QzEKLToxNTM5NDIwMEYzRTMxOEYxNjA2Q0M4NUUzMzRFQTdGRjZBNkNCMEQxNEZCRjcxMzY4N0U1Ci06MTUzOTU3MDA0NURCRjlGNjQyOTY5RjVCNDkzNEI0RUJGRTJERjVEREU5MEJENjcwNTBENwotOjE1Mzk2QzAwODc4NUFCMjMwMjU3RjBGQjBEQjE0NThENEU3RjBBQTgwRjkzMTU4QjlBM0QKLToxNTM5ODEwMDcxQ0U3MzcyMTYyQkFDQjg5ODFEM0YzMjY0MTREOTY1MTdDOTg2RkMyODAyCi06MTUzOTk2MDBGREM0RkU5QjgwOUZGNDA5QzBFMjFEMjMzQjNCM0E0QTc1MEQ0MDU3MjQ4RAotOjE1MzlBQjAwM0M3NDY3RkM0NUJDOTQ2RkI0ODBFNURGQTMwMjc2QUI2Rjc3OEQyNTA4OTIKLToxNTM5QzAwMEI3MzVBNjAzMzdGNjExRkZDN0IxOUYxQ0M1RkE4M0E4MkY4NEI1OEM1NUJBCi06MTUzOUQ1MDAwN0EwM0ZFM0JEOTAzRDM2QkVFQUE3RUQ0RjU5RTM2NTE1QjdGMTVCODI4RQotOjE1MzlFQTAwRkQwRjNGRTUyOThFQzlDRDlCNzNCMjYzNDdDOUFGQzFCN0JCMDQ3RUQxRTMKLToxNTM5RkYwMEQ2QkNCMTQxRDJBMzA2QjFBNzk4MTZFNzFBRTlBRjNDRjI0MkUzNDUzRjNFCi06MTUzQTE0MDA3MEYzNzNERDE5NEYyM0Y2Rjk1RUU4MDc4MUYxQTdGNEMwRjkyNTVBQjAyRQotOjE1M0EyOTAwQkQ0MTlGOTc5MjlBMDQ5RjE5REQ3QzA3Q0RFRkJFNTAzNjBFMDk2MEFFRTcKLToxNTNBM0UwMDYzOUY2QTg2MkUzMDk2RUZEMENERUFGQjZGRDE3N0FBMEJGOTcxMzZDOTQ3Ci06MTUzQTUzMDAxRkIzRTI4QTIwQ0REQkI0NDhDNDZDOTc0NURDMTIwQkE2QkYyMjk4RTA1OAotOjE1M0E2ODAwREYwODFBRUNDNzU5M0E5QTAzMzNGNDRENzkxQkExMDNDQUE5NTM0NjAxQUMKLToxNTNBN0QwMDdCQTU3MTMyRUQ2RDlFOTdGMjM2MDdBN0Y1ODE2NDg4MEY3ODkyNTM0M0ZCCi06MTUzQTkyMDAzN0E3MkJFMTE4MzAzOEZDRTg0RjlEMzBGQTUyREU5NjUwRDM5MDgwMDlCOQotOjE1M0FBNzAwNzA2NkY0RDU3MEI1QTA4QjIyRjQyQUMwRkQyOUVDNDEwOTFDQ0Q4QjBGM0MKLToxNTNBQkMwMEQ0M0I3OEQ5NEMzMkQ3NkJEM0NENDczQTU0NTFBNUQ0NjhGNUNEQzJDNUU1Ci06MTUzQUQxMDA3NUMxRTMwMzA2QzY0RDg5RERDRTNGNTJGOThGRDNERjg1RDRERkFBNDI4OAotOjE1M0FFNjAwRjQzN0FCQ0Y4MzlGQjcyMzY2MkZGMTgxNUY3NUY1MjlGNkIyRDExNzkzMEUKLToxNTNBRkIwMEIyN0Q1MkFEM0U1OUY4NTA0NTlGOUNGM0QyMzYzRDQ0QkYwQ0Q3OTgyODRCCi06MTUzQjEwMDA3NkUxMEU3QTAxRjBFNkY0Njc0RUU4NEEyQkM5NDE5QTdGN0Y2RUU2QjUzOQotOjE1M0IyNTAwRDNGODUyRjZGMDM3M0M5NjlFMDg3QzZDNjBEOTcxMEYxOUI4Mzk3MzBFQUQKLToxNTNCM0EwMEQ3RDI4QkM0Qjk2QUJCREM0MTJBMDcxRTQ5QTI4QzRCOUU4NTdGMzc5NTA0Ci06MTUzQjRGMDBGRkZERUE1MTkyMzk4M0ZDNEYyMzQzQjVDQThFMTFEMTJGNUZCMkQzNzRCNQotOjE1M0I2NDAwRkEwQzc5MDE3RTJGMTZCMUU1OUYzNUREQjIwOTczODk5QzdDRDZFQzIzMEUKLToxNTNCNzkwMDVENTMyMUZCM0U0MDMyREY5Rjg0MUNFM0E2RDVDRkUxMkM5RDkzNDM0NkFBCi06MTUzQjhFMDBBOEU5ODRDMDQ3ODhGQTYwQUY2RjE3MTQ0MEJFOEFGMUM1NzUyQkVFRkMxMwotOjE1M0JBMzAwMTVEMURFQzIxNTJGQjhDNjk3ODU5RkEyRDM4MzIyRkUyRjcwRjdDOEMzRDEKLToxNTNCQjgwMDk2QkYyQkVBRkYwRURCNEI3QzMwNjgwNDlBM0E2REZFMUZDQ0YwRkY2MUM5Ci06MTUzQkNEMDBFMjdGQzAwNzNCMDVFQjdDODIwRjYyRTAwM0MzRTY4M0QxMENERkNGQ0ZCOAotOjE1M0JFMjAwOUZDQUY3NDcwNTdGMEU2NkU5QUY4RTE4QTgyQkNCRDM4MzJFRkE3NzREMTEKLToxNTNCRjcwMEEzM0ZFMEQ5NkJGNTM3MjkzNzYzRUNCOEM3MEM3RUNCNDlDNDMyNEExODYzCi06MTUzQzBDMDA0RjkzNkNCMzYwQjZGQUI5OEJGOERBRTFFMTEwQzE1NzRDN0NFQkMwN0FBNQotOjE1M0MyMTAwOEQ2MDJEMjc1OERCN0MzN0YyRUNBQkJGMDFCRkJBRTA4RDExQkMzMTE3MjMKLToxNTNDMzYwMEJDQUExQjVFNEIzNkJBRjUwMkE1QTk1M0MwRUJDODIxNkI2RUU4MTIzMDMwCi06MTUzQzRCMDBDQjMxQ0I4N0NGODgyNERBOEE1QzczNjJFQURBNTQxRUM0QjkxMjU2REYwQwotOjE1M0M2MDAwNkJFMEZCNTNCMDFEQjVGRjk1MkVDQ0YwMUZEOTJFNkYyMjU2QzA2MUY5OEYKLToxNTNDNzUwMDRFMjU2NkQ5MkZDNTkxQTMzQUE5NzJDNTI1OTU3MjRCRTA3Q0JGRTY5MTNECi06MTUzQzhBMDA1ODYwMEVERThEOEYxOENBRjlBNDI2OTMwRDczOUNFMDU1QzhFNjk1ODkxMAotOjE1M0M5RjAwQzdCMEFFRTVGMzIxNTYxQ0U3MjFBMkE3NEFCNjRGRkNBOURFOTYwRUE0MTUKLToxNTNDQjQwMDc3RkQzM0U2OTEwRURGRDk1MzYyOUZGNDRBQzVERTNCRDhGOEE4NjE4NjQ4Ci06MTUzQ0M5MDBBNTE2RDQ1MzlFRDg4Qjk4QzFDMUI5ODhFRjQxRTk4OTZFRUM3N0VEMzUxMwotOjE1M0NERTAwNjVBQTBGN0I2MUUyMzdCNTJCOEJCNUZBQkRBNjI4ODdCNjhDQkQzODdGREMKLToxNTNDRjMwMDNDQTczQzI5MzdCNjVCNjUzQUUyNjQxM0UxNkM5MzZGMkRENzg1QkYyMzdBCi06MTUzRDA4MDA3QzUyNkM5QjA4QjBBMkZFOURBQkI5OTZCMzZFNTI4RkQzNzBFOUZEMkM4QgotOjE1M0QxRDAwRDdEMDY3OTlDQTk0Mjc4RTZEMDJGQzk4Q0YwMTBCNjAwMzZGMkUyMzE4QkUKLToxNTNEMzIwMDRBQ0U5RkQ0RTY2MkNFN0ZGRDU5QkQ5ODcxOUEyRjkyREFCNzMwMkZEOTFDCi06MTUzRDQ3MDA3NUUyRkIwODZERDQ1Nzk0NzNGQUJFOEJFQUVGREE3NzQyRjg1MTgyN0Y3NQotOjE1M0Q1QzAwNDRERUU4NDg4N0FGRkI5RkY1MTQ2MEEzM0VBMTJGNkNGMjIwQ0U1RUE2QzYKLToxNTNENzEwMDgxMDdEMjlEMzlGMEI5MTQyQzRCRUYxRDVDNUNDQ0UwQzE2QTJCODMwNzg5Ci06MTUzRDg2MDBBQ0RGOEQ1Qjc4MDg3RDU3NkVFQzVBODczREM5MjFERTRFRTlCRDE4NUZCNgotOjE1M0Q5QjAwODQxM0E0QzEzNjQ0QUMzMzBCREU1Mzg0ODM2MzFBRUFDRjU5Rjc2QjdEMEQKLToxNTNEQjAwMDg3QzBDMzMxMkQ0MEZEMDMwRTE0OUMzQkM2REEzQkY0MzI2QTBCMzEwQkFCCi06MTUzREM1MDBDM0Q0N0UzOUM5NDEyNzFFQTE3NTFFMjRDRUQ5M0I4Q0VEMjlFQkQyREVENQotOjE1M0REQTAwMjNERDc1NDE5OEZENjE5NTJBREZFNUM0NUIxRkZFQkM4ODQ3Mjg3NERFNjQKLToxNTNERUYwMEQ1QzJBRTVBNzQyMDI4NjI2OEVFMTZERjgwNDA1OUUyRUI3Q0ZBM0Q4QzkyCi06MTUzRTA0MDA3REMwRjE3RjcyQzVCMzI1MUIxMTMxODQ4NDVFMDg3RjdBRjhBNjg1OTc2RgotOjE1M0UxOTAwNzE4NjNDNEFERDAxRDI0OUM2RTJENURFMTZDOTU3QTNDQjkxQzVGQTIwQUYKLToxNTNFMkUwMEMxOEFGODBCNDhBRkQwRkE3NTA1NzM5MDdBNkZBMzRGRkRBMzQ2NDU3RDcwCi06MTUzRTQzMDBBMDU5OEVBQTNBREVBNTQ4NDdDNzdEQjMzODhGRjRFNzIyOTY2MTQ5ODM2RgotOjE1M0U1ODAwNkE1QUY1MUU4NjBFMzRCNjhDREU1NTY4ODYxRThFMEYzNkQ2NTAxREQ1NEEKLToxNTNFNkQwMDU0NDc5NUZBNDBBMzUzNDdBOTc4M0ZCNThEQ0JDQjFGMTBGNUZBNDVCRDQxCi06MTUzRTgyMDBCRkVBNzBGMjVBQkYwRjFCODlFNTdENzc4QTMzREEwRDEzNTY1QjUxMEJCNwotOjE1M0U5NzAwN0VFMEVBQUNGMEVGQUYzNkEzOTQ4RTM5RjYyQTYzODVEMkVBQzVCQTEyMEIKLToxNTNFQUMwMDgxOEU2OEY3OTNGMjBEOEE3QzYxQkUwMUU1OERDNTI2RjI4RUNEOTAxNzhBCi06MTUzRUMxMDA2RDZGMDdFRDkyNTY5RTgzMzdDOUIzMDE2M0QzQ0VCM0ZEMjY3OUMyOTRCNgotOjE1M0VENjAwQzc2RkU3RDkzMDJENEZBRTUyMkZCRTM3ODQ3Q0UwOTVBRENCN0Y3NjI3MDgKLToxNTNFRUIwMDY0MjVGQTIxNTMzRjcxOUY0M0YyRENBNzlBRTY0Q0VCNTk2MTY2RkJDQjI3Ci06MTUzRjAwMDA2MzhDMkE4MzYzRDg2RjE0N0EwQjNERTM0Q0FEODgzNzFCOEQwQkRFMkQzNwotOjE1M0YxNTAwQjFDRUNFNjdENjg0MjRDOUUyQjc0Q0JENTQ5RkVBQUMxRjA5M0YzNEIyMjQKLToxNTNGMkEwMDRGN0Y5MEMzQjA3RTAyOUZFRjk0QTA2RkI2QkMxNTBCRUI4ODgxNzQ2QTlDCi06MTUzRjNGMDBEM0FBOUZERTk1OEMzRkE3MDdDRjNGQTdDMTQ2MkRBMUIxMTI2QzFBMTE4MQotOjE1M0Y1NDAwNjM5N0Y4MzZBMEIwMTNGNTk4NjczRkY3NTYwRTUzRTMyMzRCMTMzNDk3QkQKLToxNTNGNjkwMEZCQzkzNjJBNDYxRjE0NkU1QTNFNkZDMjMzQTQwMDMxOEJGREYxNjM0QjQwCi06MTUzRjdFMDBBMDRCMjM3RjEwRjUzQjcwMDgzOURFNjVDMTE3NDlENDhCRUZGREQ5RjUzMwotOjE1M0Y5MzAwQ0U4RjBGMkVBRDk5NTY2RkM2MEVBNkI5NDE5NDlGNjE3REU2MUZFREYxMEMKLToxNTNGQTgwMDg3N0VDMTU2MjY3ODhCMkY2M0RDMjg1NUQ5RjJFRTc4NUIzNDdFNzExNjBGCi06MTUzRkJEMDBFQjlGNjYyODc3NzQ1QTM5MUE5RjM3OUMyN0I0Q0ExRkUyM0Y5RkExRkNBQwotOjE1M0ZEMjAwRDY4RjUwRkVERDE5Q0FENTdGMjhCQzg3Rjg5NTE5Q0FCRENGM0VCQ0JERjUKLToxNTNGRTcwMEQ0MzRGRDBBRkMxMjc0RjMxRkQ2RDVGRkM5RjU0REJBMTlERUM3QUY3RUM4Ci06MTUzRkZDMDBGMEZCODkwRjdCRkZFRjVERkZCNEY3N0VGNzc4RjhBMEY1RDZGRkZGRkU3MQotOjE1NDAxMTAwNUZGNTVFNzFFMUJGNzg5QTdDRkE3RjA3N0U5QjNGQTY5RDM5OUE3OEZGRTQKLToxNTQwMjYwMEM2RjFGMDYxRjVCOUY5NEQyQTNCQTJGNzc5MTI5QjNGMkFCRjYxQkNDRTUyCi06MTU0MDNCMDA5MTU1RkU3OTcxMUVBQUJBQjU1Mzg5NkQ1RTQ5QzNEQTFGRjg4MjhFRjhCRgotOjE1NDA1MDAwNzdGODBFQjhGRkVFNkUxRDYzMUUzQTgyM0ZCMDQ1OUZCNUFBNUI1N0Q1QjgKLToxNTQwNjUwMDJGRjE1OTc3QjdFQkMxNzU1Q0YzNEI5NTdBQjBBODUyNEY5MENFNjZDQjRECi06MTU0MDdBMDA4NzRERDc0ODJGNTEwMkQ1M0FFQUZCRDdENjc1NjgwREQ3ODZFMTczQjVDQgotOjE1NDA4RjAwQUU0QTg3N0YzM0JDNzc2NDM1QTdFNTcxOTJGOTI1RkU0QUJENjA1RDhEMjMKLToxNTQwQTQwMEZFRjUzNThCQjU4QTc1OEJCNTkwN0ZCM0RFOTlGMzdCMUFGNkEzMTZDODI4Ci06MTU0MEI5MDAzMUM0QzcwOTIyQUYyQzdENDIxN0VCNDBBQkRBODUwQzgyMkNBQTI4NEE0RgotOjE1NDBDRTAwNjhGMDgzNzJERTE3OEJGNzhCNzU2RjIwMkVGNERBOEEwN0UzQkFGMENGQTEKLToxNTQwRTMwMDI0MzhDRkNFRDBGRTRBQkJGRDQyNkFGRjEwQjU1RkUyNkExQkVEOTY1M0YzCi06MTU0MEY4MDBGQkM4MjdFQUE1RkFERDZENUZCM0VCOUQ3MEQ1OUI0RUZGMzRFRDQ3NEM3QgotOjE1NDEwRDAwQzU1QUQ2QjI5RTRDMThENDFEQ0Y4OTcxRTAyMkNEQUNCQTZFQTcyOTdCNEMKLToxNTQxMjIwMDJFRTFDNTRGNkRFNkFGNUQ0Q0Y4QTlENDE2Rjg2QkY0Rjk5Rjk2NUJCQzkzCi06MTU0MTM3MDBBQzdENjNDNTFGQ0IyRDg3NjYyNzA0RkVCMTJFNDU3Mzc4MTA2QkEyQjcxMgotOjE1NDE0QzAwMDlERDI0MEJCQjg4MUQwMUZEOTBDNTlGMTQ3RDIzOThDRURBMzA4REEyQTQKLToxNTQxNjEwMEVGRkUwRDdBQzVCRUY1QkE1NEU0QzA5NkJFRUVDMEQ2NDhCMDk1RkEyQjIxCi06MTU0MTc2MDA0NTdBOUMxNDYzODc1NkY5NDUzNUJBNUZDMEQ0QUQyRDI4NEFFODNEM0JCOQotOjE1NDE4QjAwRjc2NEY4MDA3OEZFNkQzQTZEQzNDMDQ0M0Y3MUY2Q0VEQTc3OUQ3ODEyOEYKLToxNTQxQTAwMEVEOEVEQjcwNDg2NTVERjgyNjlDNkYzNkI3NjAwOEVDQUJEMjAzRDQxRTVFCi06MTU0MUI1MDBGQUQ2NjJGQkI4QzMzOTRDRTAyNTJGOEI5NzBBRTI5QkMyQjU0RDdBQzlFNAotOjE1NDFDQTAwQkE3QTAxQ0ZFRTlDNkVBRDgwRjA1MkU4NEZFOEI5MkNCMTcxOEZDRDk3NUMKLToxNTQxREYwMDBCNDVERkIzRUQ1RUExQjYwQzdBMTcyMDdDMTFERDhCMUQxODQwRkI4QTlCCi06MTU0MUY0MDBENTFCMzREOERDMTVFQjM2NjhEM0U5NEY4MzI3NTAyMENFMTNCMjgyOEE3QwotOjE1NDIwOTAwMzMwN0M1N0JFOTVDOEQ1RUYyNjA0Qzk3RDk5N0Y0NTk5NEU3ODBDNDQyMDMKLToxNTQyMUUwMDVFRkI3OTFGM0QxN0FFMjNGODg4NEYwQThCRUE3NUZFQkQwNkVERDBFQjQ5Ci06MTU0MjMzMDAwRDVBRTFCOUI1N0EwOUE3QjQ3REFCNzRGRUQ5N0I4OERGRUZEMTQwRkI5MgotOjE1NDI0ODAwMTJDMjY1QzU1QTBCMDc3MjRDNkE1MUQ5MTY1RTRGMzhGMzRBMEZFQkZFNzUKLToxNTQyNUQwMDU4MEU2MkY4MDdGM0IxNTc1M0JFQkE3NTk2RjRBOEVFOTc1N0VBRkUxNTNGCi06MTU0MjcyMDBENEQ2REQ4RkVCRkU1NUY3RTg3QjczNTY2QTU4MjM5NzU3NjRGM0U3ODUyQQotOjE1NDI4NzAwQUMzMzI0MjI3RkEyRDZDQUZGREExNzc1RkZBQjBERkFERTlEQjU5QTk3QzUKLToxNTQyOUMwMEU2RUNDMEY3MzY2QjE1OUZDRTY5QzE3NzYyN0NGMURBOERGOTYzMEQxQjA2Ci06MTU0MkIxMDA5RkM2Qjc4Njc5QUQ1RTcxRUU2MTVEM0FEQkEwNzNDQTJCRjlCMkY4REYxNgotOjE1NDJDNjAwODYzMTFEMTI2NzRFMzYyMTc2QjRBRjlEQ0E5RDZFRDgyOEVDREE2NUFDQ0YKLToxNTQyREIwMDI1MzcxMERFOTgxNzU4QjZCMUEyNkJCREI2OUI2NDAxRTk4MkM1QkJFOEMzCi06MTU0MkYwMDBGRTg3OTAzMUZGRjMzMUREQkZBQjQxODcwREExQUE4RjcyQjE2Rjk4RjgzOAotOjE1NDMwNTAwQTIyRUFERkQ5MjJFREVCREQ2NDBFRjZCRjVCRDg0MkZEMDFDN0MwREZCODkKLToxNTQzMUEwMEFCRTA5QjUyNEJDNTM5QzIxRjZGRDc0QkNFN0Q1MTJGM0NEQjJERThERTg2Ci06MTU0MzJGMDA0Mzc0OUY0NUY0MkU4OEYwOEQ2RTM5MDQ1QTgzNUVDMjVGRDdBNjIzRjgxOAotOjE1NDM0NDAwRjA2RTgyQTUwNUYwMTM4RTExMzc3QTFEM0QyNzcyQjY2QUIzQTgxREMwM0MKLToxNTQzNTkwMERGQjlEMzdBQkVGQjdBQkEwNDcyQzhGOThEQkMzNEFGNkMzQTQ4NjkyODlCCi06MTU0MzZFMDAwQjdFMzZDOThDMDRGRTIwRTdDOEJFOUNFM0YwRDI3NkNBMjM3Q0FCMDlDMwotOjE1NDM4MzAwODZBREY0MUNGOERFN0NBREUyNkMyOUUxQjM1NDlGODk2RjdFQzlCMjdDNzgKLToxNTQzOTgwMEYzNzdDQ0UyMUJFMEJEODBGODI2RTRERjJBNzBGMTc1OUI3N0MwMzcyNUIxCi06MTU0M0FEMDA5Q0QyQTZGMTRFNzdGQ0JFQzcwQTQyNUI4ODI2QjFENjZFRjZFODYzQjM3MgotOjE1NDNDMjAwNDJEMTU2QzlGRkI4RUVGQzJFOEMzQ0ZBMTg2ODMzQUI3REZENDZGNjdBOTUKLToxNTQzRDcwMENCNDZFNzVFRjFBRTQ3N0MxRkEyMjBCRTdFNjNFMTU4Q0I0NjI5OUZFODlGCi06MTU0M0VDMDBGQzg5NEFFRTI1REM1RjI3N0EwMzY3QjcwQkZDN0I1QTBBNzkwN0UxRkU5OAotOjE1NDQwMTAwNzFDMkZEMUUyMUI3RERGOENGQjFGMTlGQjBCRTRCMTE5NDdDOUZBMEI2Q0MKLToxNTQ0MTYwMEEzOUJDRTA4NUE4MDU3QTI5QjQ2QTdEMTAyREY2RDdCRDBBNjA1QzlENzZECi06MTU0NDJCMDBFMkY1MkU1QURDRUFBMkM1N0JDMjg3MzAzQjg2NzdEMkY4RUQ3NUQxMDZDMQotOjE1NDQ0MDAwRUI1NUEwM0JEMjc3RDhGNDM5NEZCNDcxRThCMTY1OUFGRkU3ODdEMUUzRDEKLToxNTQ0NTUwMDgyOEIxRTdGNjVEMzAzNjNCOEM0QTZDNTBENzQyMERBQjg2OTkxMTc3OTY2Ci06MTU0NDZBMDBFNEIxRENDOEZBQzdEODc2RDZFMjFGN0I2NEUzMkM2NUNCQzYzQ0Y2OUY2OQotOjE1NDQ3RjAwMUYyQjg4RkZDOTQ2RkZEOEEzRTI3N0M1MUY4QjMxNUFFQzY3RjQzQkYyMDcKLToxNTQ0OTQwMDI1ODE3Nzc5NDcyNUY3OTA4Q0JEOUUxN0U1MDUwRURFNjk2QzE2RkE3NzVBCi06MTU0NEE5MDA5MjlDQkI1RjJGNUNGQkQ0MTRCQzE3Q0M4NEY3QUU4NUEwQjkwQkVGMzE3NwotOjE1NDRCRTAwODE3N0E3QkY2RUZDOTM2QzJGQkVEQkM2M0ZENjdDMzAzNjFDRkMxN0JCQjMKLToxNTQ0RDMwMEYwRUYxMTZCMzcxNjdFN0I2REZDMTY0MTM2RDEzQkVDMzNCQkY5REUyOTU3Ci06MTU0NEU4MDBGRjRCMjFGRjJEOUFBMTlDODg3QjY5RDNDMUMyNzlGRDE0NTg5RTQwOEM0MwotOjE1NDRGRDAwQUFBNEQ0ODI3M0Q1MDk5MjM3Qjk1NEM3MjMwNEMzQTE3QjM3RUIxNUVCRjAKLToxNTQ1MTIwMDlBMzQyNTY3ODk5Njk3NzNBNzA2MUVGNjkzQkM2MUFGMzc2QzNDRjQwMzFCCi06MTU0NTI3MDA3QTc3NkVBRDU2OUNGMzU5MkQzRkU3MEZBQzc3RDJDQThENkNDRDNEMUJGNgotOjE1NDUzQzAwNzdDNzNDMkQ4MDZCMjE3MDUyMkVENkI2MDNCOUFBNDdDQzg1NDg0NzNDNzIKLToxNTQ1NTEwMDM3QzdBNjQxRkJEODlCQ0E3MUU2Njg3QjlFNDAzRUY4MEUwM0FFQjdDOUFCCi06MTU0NTY2MDBFQ0E0M0M5OUYxRkUxQThENzdDQzUxMTdEMjY5MDVFQjQxRDAwMzY4NEVBNQotOjE1NDU3QjAwMEJCRTZBRTdGRjE2M0Q1N0JDMkJFMzVFN0NEMkVBNzdDMUZGMDFFRjk4NDkKLTowNjQ1OTAwMEMwRTZCODkyMDAwMDM1Ci06MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vcGNhMjAwZV9lY2QuZGF0YSBiL2RyaXZlcnMvYXRtL3BjYTIwMGVfZWNkLmRhdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjYTg0YWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9hdG0vcGNhMjAwZV9lY2QuZGF0YQorKysgL2Rldi9udWxsCkBAIC0xLDkwNiArMCwwIEBACi06MTUwMDAwMDAxRjhCMDgwOEFDNUExMDM4MDIwMzcwNjM2MTMyMzAzMDY1NUY2NTYzNjQyOAotOjE1MDAxNTAwMkU2MjY5NkUzMjdEMDBEQzNBMEQ3MDU0NDU5QUZEMjYxMzMzMTM2Mjc4QTQKLToxNTAwMkEwMDE5MjY2M0UwMjQ3OTcyODA2MEExMEU5MDYzMjEzRjY0RjA3MDBGM0RFMDVFCi06MTUwMDNGMDA5RTZDREM3QjJGMzUxNEIzNUVGMEEyOEI5QTVBNzMxRTU1NEI5MTQ3NEM1QwotOjE1MDA1NDAwMzRFMTFBQjY2OTI2MThCNzYwOUQ4NDA0QTIxMjFDQTg2NDhENzU1MTQzNUQKLToxNTAwNjkwMDlEQTU3OEE1NkM4QUYyNzZBOUFCODI5REYzQUM5MkRENTJDQzVFQjE3N0EwCi06MTUwMDdFMDBENENBMzJGNzdEREQ2RjY2NUUyNjNGQTI1Qjc3NUI3NzUzRDVFOUY3QkVBOAotOjE1MDA5MzAwRkVGQUZCRUJFRkZCRkFFQjdFNzlGNEE5MUY2QzI3MEEyMUExODcwODQ5QzEKLToxNTAwQTgwMDdDOTc0Q0ZBODUzNkMxMUYzN0I5QTk5RkZFQUQ5QzQ5MzAyNTY5MjU4MzIxCi06MTUwMEJEMDBEOEVGNEVFRTZFMTRFRjU5RTNCM0VERkVEM0UzQzczNUVDNjdFNTA4MjJDQwotOjE1MDBEMjAwQTlGRTBGRkQyOUJGN0NFQTk3QTI2RjRFQzk5M0Q1MzdBRjEzMjM0QTVFMkQKLToxNTAwRTcwMDVFREU5NEYzQkYyNDVGNEFGQ0YxRjEyOUU3Q0Y5RTg2NkUwQURFMkMzOTE5Ci06MTUwMEZDMDAyQkYwMjM3Rjg0OUYzMjQwRjY4OEZFQjVFQzc1NzkyRDM5RTNCQ0I0M0U5QgotOjE1MDExMTAwQzlBOUY1NEJERTI0RkZCQzlDM0M2OTg3RERDRDMzRjM5MzhDQjA2NzRFNEUKLToxNTAxMjYwMDc4RDZGOEQ3RDYzRkQ5REM4Q0VFQUJEQzQ4MjRCMkY5REM5NDlFMzkxOTY1Ci06MTUwMTNCMDBGRUQ3QkYxMUZGOTc1RTcyNjdGMTdEMUNGQjRCRTc3RTM2MjVCRkJDMEMyNgotOjE1MDE1MDAwM0YwRkY5QkZGRjUzNzJDQjcyNjcxQTFGM0QzRUY5OURGNTEzMTJFQ0NGMEQKLToxNTAxNjUwMEMwNzAwOTVDMEU1RkY4RkZGRTRCM0E3RTI0Njg1MUZERDMxQzUyMzBGQTQ2Ci06MTUwMTdBMDBGQzBBMzVFMDA5ODMyRjc5QURCNUU0NTE0MEEzQTQ3NDNDOENFM0UzOUY2MgotOjE1MDE4RjAwQzM1QkIwOURFQUZGMDVCRDdBOTVCQjNEQURFNkI1NkRBREU1Mzg0NjU0MjUKLToxNTAxQTQwMDUyQzkwRTExRUYwOEI0NzczQTg4NTdGQjAxM0NCNzExMkYwOTA2MTlDRUFDCi06MTUwMUI5MDA1QjEyNTM4MEFFQjY5NUY4MDE5N0Q4NzRGRTlBOTAyMkE1RDU1NEFERTU3MgotOjE1MDFDRTAwMjY2MUNBNzNFRTgwQjVGNUYyNkFFMjJEN0Y5QTc4RkM4MTQ4Mzg0ODRBQjUKLToxNTAxRTMwMEU4QjM2REJENEQ4NDNENEM0OTMwQ0U0MkIwNkZDQzA5MTg2MUNGQjlCREFECi06MTUwMUY4MDAyNjIxQzNCNDM4RDAxMEJFNkRENzA5MUFGMjkwOTBERkVBMzM0OTMwQzZBQQotOjE1MDIwRDAwMTE4N0U4NkQ5Q0IwOUUyRURGMTgwMzNDOEREMjIwQTlCQjZENTczOTBEQjQKLToxNTAyMjIwMDExRDJEOEIyNkYyM0MwMkNFQTBGQUMwRUI3NkNCQURCM0M0RjQ4RjFCQkYyCi06MTUwMjM3MDAxMTU3QTVFQkQyNUZDMEZDQ0I4MDRBMzQxMkVDQTIxMUQxMzNFQTE2N0REMgotOjE1MDI0QzAwM0I4NTE4NTEwMzExQTUzQTVGREQ2MjIyNkQ5QzRCRDQ2QUVBNTY3QUNDQTkKLToxNTAyNjEwMDM2MkRCNzhFRThBNzY4M0UyMTAxN0YyMDFFNEU5MjdFRUFCNjE2OTk0NERCCi06MTUwMjc2MDBBRkUxQURFM0FFQkFDMEM1MzUzNEIwRUU0MTk0Q0Y4QUMyRkU0N0M2MDY1RQotOjE1MDI4QjAwNzk2MERENTI1M0QxRkE2ODM0MzQ2MDAwQkM0NUMwRDkwOUJFMEE2ODEwMjUKLToxNTAyQTAwMEJERDdCQTRCREJCQTEyRUQ4QTdDMDlFQjhFQTc5QkRBNkJGOTgxNjY4MUFDCi06MTUwMkI1MDBGNzBFRjM3MjMyNTlGNDUxOEQ1OUY1NzhCM0FCMEE2NkU3QTM1OTdGMEU2OQotOjE1MDJDQTAwQkE5MEUwNEU1QkVFQzY2OUU1NzY1RDJBMzNERDY3NjI5MzY0MjdDMUQ1QzAKLToxNTAyREYwMDVDREE0MENBOEE3QUEwM0VBODA3QUMwMTQ3QkJBMDJFNTJBNzI5NzQxODBFCi06MTUwMkY0MDA3Qjk1NkY0NjFERDg1MUVCM0VBMTQzNDhDOEEwRUE5Njg5RjIzMzJEQTcyQgotOjE1MDMwOTAwMEU3Qjk0MUZGQjAwRDhGRkQ2ODAxNTI2NjM3QjY5QUI4RkNDMjJBNUYwM0MKLToxNTAzMUUwMEFDRjY1ODYzMzU1QkNCNDc0MEI3RjVBMDVCNkEzQ0VDMjM5OTU0MTU2Q0MxCi06MTUwMzMzMDBFN0IwOUU5QUE3RjA4NEYwODVEQjc2MEREMTcxMzc4OTEwQjYyODVFQTQwNgotOjE1MDM0ODAwRjY0QTVGNDAzREUwNUQ4QkI0QzJGODAwQkQ4RUUzNDE4QkFGMDZCOEFBM0QKLToxNTAzNUQwMEVFODFGNUU5NjM5M0RFNkQzQjkyRTAzODVENTY0NzQ4Njk4MDg1MDkxOTQ2Ci06MTUwMzcyMDBBNzlFQzI1NkUwRDM0RjQ5NzkyQjFENzU5MzEwQUMwMzJCRDZGQkNEQ0VBRgotOjE1MDM4NzAwMzhEODQ1RUZFNTQ1NkE4N0Y5NTkzMjA5N0FCQjVCMDUwRDk4QkZFMzBGOEEKLToxNTAzOUMwMDlDREYyQkU2Qjc2N0U2NjdFNkM2RURDNkQyNERCN0U3QTU2QUE0ODg4Nzc3Ci06MTUwM0IxMDAzNjI2REUzQjZEMjUzRUU1QzU4MTBCRTE5Q0Q4MDk1QTdDRkVCMjQxRDhCRgotOjE1MDNDNjAwNzY1QTY2M0M2REFFOENCQzRFRjdCNzBEMzU0MjAyNjRGNTE4MzNDMTYxMDUKLToxNTAzREIwMEE2NDM4RjMyMDE4QzIzMkMzMDNBNjRFMjlBMjNEQ0FEQkRDQUU2MDRDRTUyCi06MTUwM0YwMDBDMkRBRkMwQkU0ODM5MkIwMjdEMjBDM0U1NDYzODYxMjJGRjA5NjREREIzRAotOjE1MDQwNTAwQzBBN0JFQzM1QTM2NkQzMjNCMTIwQUU4QjM1N0Y4NTMxRUNBMUVENDZERjAKLToxNTA0MUEwMDdGNkFFNzMyQTY4MDBGRkE0OTMwMkU2MzIxQjhDNDhFQjk3RTU2MEJFRkUwCi06MTUwNDJGMDA0NTgxMTBDQzY5MTBGRTlCODREODI1QzEwNDE1OTkyQTY3OTQwNjIzQ0JGNwotOjE1MDQ0NDAwRTlFQzU4NEU1REQxOTEyREI0RTg0QzlEQTlDNDg2Njg5MTg4QUJCOEYwRjAKLToxNTA0NTkwMEJENDNFNDk0QTEyNERFQTQ5REU0MzUwM0U3NUQ4N0I0RDZGOUU3RjgxQ0NECi06MTUwNDZFMDBFNzQ4RUYwNUYyOTY0MTlBMDYyODY2Rjg0RUYyM0FDMDQ3OTEzNjNDQkYyNAotOjE1MDQ4MzAwMEJDRkMzMUNFNUQyMTNFRjcxQzQ0NzU5MTYyQkE0RTgxRjIwNzcxNDhERjkKLToxNTA0OTgwMERFNjc3RTFCRjQyOTUwMUYxMTdBQkFCNUEzRTAzN0ZENTI3RUZEMjFERTY4Ci06MTUwNEFEMDA3MkVCMjY1Mzg5MEM1MDJGQzg0NEQ4MDNCQzkzNzQwM0JEN0UyMTEzQ0U2NgotOjE1MDRDMjAwMjdGQTUxRkUwRUM0QUFFN0RDQTA0OTA2REIzOEU2MkJGMDRGREIwRTUyRTkKLToxNTA0RDcwMEVGQzI0QjA5MzM5QTczMUNFMzg4NkYyQzIwM0ExOTFDRTBBMzQ0RTA1OTFBCi06MTUwNEVDMDAxODNGNTE0REM0OUY4ODI1OEM0NzFGMjEzRUMyRkFBQzY4QThDRkI4NTY1MAotOjE1MDUwMTAwRDY1MzVEQUFCOTJBM0NFN0MwRUZDQjA3MjhDQzZCREMzM0VCQkUzQUY0RTkKLToxNTA1MTYwMEU3NkJDOTY0QjE5RUY4OTQ5NTE5RkY2NENFNTY4RTA5MUY3NDE1MEM5OTVECi06MTUwNTJCMDA4ODVCMUM4M0Q4MkZFRjQzRkNEMEUxNjdBMzA2NTEzQjM5QzRFMzFDRjRDNwotOjE1MDU0MDAwMDEzMUE2RkU5NjVGNEQyNkZEOUU3Mzg3Q0Q3OUU3OEU5QUU0NkFBRjkwRjEKLToxNTA1NTUwMDA5RkMyQTBFN0UyNTYyRTVEMUM4QzYyQUI0MEJGQTg3RTdDQ0E5OEMxRjlBCi06MTUwNTZBMDBFMDdDREIwRjAyRTAwNzlFRDA3QTEzNkRENURFRTg5MkVCMjdENzREREFBOAotOjE1MDU3RjAwOTA3NUYwRDQ3QTFFMjIyRjFCQTlGNTI0RkFBQkJDMTc2M0MyRjY5OTg5MjMKLToxNTA1OTQwMEY2OTM3NkZCRDFGQjRGMDA3RTQzOTZDREZBODVDRDhBMUJEMTY2QzNCNjc4Ci06MTUwNUE5MDBDREUyNjhCMzIyMzIzNjYwNzU1QTAzQzZCNUU2NEQyQjA1M0RDQzFEMjM5MAotOjE1MDVCRTAwRDI2NjQ0NUYxNDk3QURBRDBCNjhFMDNFMTVCRjZENjQ0OEQ4Mjc4QUVCNTYKLToxNTA1RDMwMEM4MDY3OEJFRjczRUIwQzMwRkU5NDdFMDkyRTAxRkM1ODUwOTU3MzVEQUZFCi06MTUwNUU4MDBGNjcxRDdFRTU1Q0YyNDVDOTU4MTg4QUI1QURBMDM3QzA0NkQwMUJFRTEyMQotOjE1MDVGRDAwQkFGNEE5RTk1MThFOUIxRDVBQzYyNkZFMDlCMTIxNzMyREFFQUJCNDhCQkIKLToxNTA2MTIwMDhDMTVCNDU5REFEN0IzRjMyQ0M0MjhGQTM0RDdCNjU0N0FDRTdEMDY3MzY5Ci06MTUwNjI3MDAzNDVCNEYwNjMxQjM5QTI2NkIxMDI3NDg4NTVEOUFFRTk1RkFBOURENTY3NwotOjE1MDYzQzAwRDRFQTM1RUFCNDg3NTc5MkQyNTgzODk3QjQ5OUZFNUQzRjEyRkE5MUZBMzEKLToxNTA2NTEwMEEzMzQzQUZBMThFNDg3QzdCODIzQkY3NDg5REMwMjdFODdCNjIwRkEyMEQ1Ci06MTUwNjY2MDA0RkQxRjA0M0RFOUFFNUIwQzUyOEY4NzdBQzY2NEJENThEMUJEMjFFRkZGQQotOjE1MDY3QjAwNTlCQTdCNzlBRDQyM0NEMjNFRkY2RUFFNTA5QTY3QjBDRjdCNjA5RjYzNjAKLToxNTA2OTAwMEZGMjNGNjM5ODlGNkQ5QkNENjRDRUQ4NTUwRTg1MDcyRjU1N0QyMUVCMDc2Ci06MTUwNkE1MDA0NzQ1QUQ2RUUzMzlEQjFFRjNDOTIyRDM3RjdEQTlCMDQ3OEU1RTYyOTY1MwotOjE1MDZCQTAwNUFBNUQ1N0Y4MjdCOEZCRTlGNDYxMjVGRjA0RjY2RTFGRTU0MTI4NjY3NjEKLToxNTA2Q0YwMDg2Rjk0NUQ4MThFRDQ2OUVDQUY4QTA4QTdCQjQ2ODYwQkI2RTg3RUQ0RUMzCi06MTUwNkU0MDBGMTE0QkY2Q0RCNDVDMTc2NEQ2MEJCOEY2RERCNUQwMERCMjFGRjgwODNFMAotOjE1MDZGOTAwN0Y4M0NEN0IyMkRGRTNDNjdFNkY1RjI2Njc0QzlGMkJFNjM4NzI0NTU1REYKLToxNTA3MEUwMDFBMEY3RERBMTExRjBCMjBBNzc4MzYxRjRCRTcxMEIxMUY4RUMxM0NBQjNGCi06MTUwNzIzMDBDRkI4NUE5MzJCNjRDMzVDODI3OTI0OTQ3ODhGNjExRTUxRTYwRTlCNEEzQwotOjE1MDczODAwMDdFNDEzOTg3NzI4RTFDODI3MzkyNzIxOUYwQzYwM0VGMUUxQjgxODkzQTgKLToxNTA3NEQwMEY5QTREOEIzRjlBNEY5NjNFMDJENzI0QTUzOUY4OEQ5Nzk4MDg3M0FGQkE1Ci06MTUwNzYyMDAxQzNBMzdFNTkzNTlDRTVDMzNBMTc4MUQzQkMxREM5QjdCQ0RBMjM1RUQxMgotOjE1MDc3NzAwQTI5RTJDNTIzRTM3OUI0OTg4Q0UxN0JBRjdGMzkwOUZFOEVGODIxRjc5MjUKLToxNTA3OEMwMDBBQjExNjA4RDI1QUUxNDc0QjQ0NURGN0ZDNUNDRDIwRTVGQjY4QTNBODcwCi06MTUwN0ExMDAxNzBFNzBBMkRGMDEwREZDRkQ3RkJCRjU0NDI5Q0E0QzlBQkVBMDE2Rjg2RQotOjE1MDdCNjAwODE5MEREMzE1RTBGN0U1MTAzRTM0RjkyNUZBRjgyNUE5NEEzMEVDRkNENDEKLToxNTA3Q0IwMEVEQzdCRDQ1RkEzRkVBMDZGNjE2N0FBODkwQjdCRTZFRUI4RUQyRTI3NUY3Ci06MTUwN0UwMDA1Rjk4MTk1ODVGN0M3MzI0QjkzMkM1QUJDQzkwQjVDMENERjBCMjYyOTM5QQotOjE1MDdGNTAwNjk1NTQ0REUxNkI0RjQxOUU2NDc2MDVFQzkwMzEzRTdERDEzRDlCNjUyQjYKLToxNTA4MEEwMEFFMUJFMzFCNzBEREVDNzk0MUMwMkRDOEMyNUQxMTI5QjM3MTM1MkFFQUE0Ci06MTUwODFGMDAzRDdCNURERDAyRUYwMDlGM0Y0RUVBNTQ5ODg3RjY4NEZBQUE2ODQ1MjQ2OQotOjE1MDgzNDAwQUY0MkQ0NTI5MERGNTcwQkZDNTZCQTBCRjAxNUM0RDczQkY5MTFGMDRCOTAKLToxNTA4NDkwMDM3RTI0M0RFMDNGQzYyRENBN0QxOTc3Q0EyMDZFREU1Q0VGQTcwNjNCREM2Ci06MTUwODVFMDBBM0JFREI0Q0MxOTcyOTBENjE3REE2OEJEQzc5MUE3QjU1MDU1RUE5NjdBRQotOjE1MDg3MzAwMEQ3QTQ3N0REN0VBOThCRjIwRTJBRTQ4RDU3ODQ4QzNGRDAwMzUwRjYwMUMKLToxNTA4ODgwMDdDNDIxRUM2OTg0OUNGQjM3RkVBMDYwRkM2NjA0RjIwQjAwMUNFNDk2MzE4Ci06MTUwODlEMDBGNDVCQjE0MUZBRTNCNkExMjZEQzJCOTlBOEU3MzQ2NjQxQUZDQ0JEMEM1RAotOjE1MDhCMjAwRkM5RjgwQjNEMjRFMzgzNzYxQUQxQzgzRkRFMTMyMEY0MUJFRjBFRkJBNzAKLToxNTA4QzcwMDVGOUM4OUZDNTAxQkUzOUVBQUMyRDk4QUU4RjVENDg3NzVERTU4MkRENEZECi06MTUwOERDMDA3OUMxMzBENjUzRkI2NDlFRTA0ODM3NDA0RTg5OUFEMEIyQ0Y1OTJCNzIyMAotOjE1MDhGMTAwNDhGMTNGNDdEQzcwN0VGQTdCMTNFQjM2OTlBRjBERkJGQ0E0REI3NTVDMjQKLToxNTA5MDYwMDNCNzU0NzdBQTA0NkFENjA1RUY1NDFCM0U1RDZCQkNEMzZBMEE5NzhGRkY4Ci06MTUwOTFCMDBDNkRDOEI3NTBDOUNCQjMwMDdEREIyRTc1NTMzMzc4MjdCNDBCN0Q4MDM4NwotOjE1MDkzMDAwOEEwMzMxOTBBNzkyREY0MkZFQ0NGNEMzNzlFMzE2NzEwNkIxRUJBRUIxQTUKLToxNTA5NDUwMDFFRUVDN0YzMDdENDVEOURBMURFNzRCRDA1NjcxQ0JFNDI5Q0ExOEU0M0JDCi06MTUwOTVBMDBCRTVCNjgyQ0QwQ0M5NUUyQUNBMUY2QzRERDM4MUZGQTgyOEVFNUUyMUQ5RgotOjE1MDk2RjAwQ0Y0RjE3REUzNkNCREI5Qjk1RUE0NzZBNzJEMjc5RDExRjUzQTZDRjlGQTUKLToxNTA5ODQwMDJGNzU5NzA3N0FDQ0YyNUJENkM0OTg4NkE3NjMzNTE3RDc4NUVDODBFN0NDCi06MTUwOTk5MDBDNERGMTIzMjBBQUQwQkRBNEU2ODNBQjQyNUQwMDhCNDBCMzAxRTg3QzZDQgotOjE1MDlBRTAwQTBFOTYyNUU0RkRDNkVCMDRGRjQzMDU5QkJGRDE2Q0YyQ0ExM0RERTU2RkIKLToxNTA5QzMwMDQzQkVEQkI1MEVGODNGQzIzMTdGMzYyOUYyMEMzNDA5Qzc0MTBGNzEyNjhGCi06MTUwOUQ4MDA4RjJGODhDQkY2MEE0QkYxRDkzODFENUU5QURGODJCODM2MkQzRkE0NzVDMwotOjE1MDlFRDAwQkE0QkQyOTNGOEUzNjQzQUJFODA2N0UzOUMyNTMzRDFDQkQwM0EzQzEzQTEKLToxNTBBMDIwMDlFOEREMzM0MjVCRjg5MzI2RDlDOTY0RTQ2QTY4NTUzRDJDOUQwNDBCQkY3Ci06MTUwQTE3MDA3RjU1QzMxQTk5NUMzRDJDRjFDN0EyNUNFNDBEOENCMUUyOTg4MTc5MDM2MAotOjE1MEEyQzAwNjIzNTg2RjEyQjYyOUE1OEY0MTJGQTI4OUMzRjY0N0MzNDQyNEM5NjA4RTUKLToxNTBBNDEwMDdGOUIyRTRFNUU4MTM4NzE1REZBODU3OUNCOUU5MzkzNjMyNDdENjY5NzlECi06MTUwQTU2MDBCMTgxRjE4MjM1MDFDNjIwQzYwQ0M2NEUzQTU2QUNBMzk5NTg1MThGQzk2QgotOjE1MEE2QjAwQjNGQTE4RDQ1N0Q2OUYxQTZCMjE1NkYwOUNDRTIyMzkxM0UyMjQxNTNGRjMKLToxNTBBODAwMDFGNDMxRTlBOEQ3OTkwRURBNTE3NUNGMkFDRkU4MTdEN0QzODAyNzExNEQ2Ci06MTUwQTk1MDA4MTM4MEE3RDhEMzhEQTZDQzc1MUMzNjM5OTM4RkEwMDlFMjNERjA3MjMyRQotOjE1MEFBQTAwNDIyM0QwMTI4RjQzODUwRThENDE2QjgwMTY4MjU2MDJFRDFBRTA3NTNENDkKLToxNTBBQkYwMDM2MzE4RUM0MUQwM0M0MTJDQUVGRDlERjkzOEUyN0UwOUI5NjVCMDNCOTkyCi06MTUwQUQ0MDBGN0JDRkY4QTIxQzcwNzI2QzU1N0FBMDU1MzdFOUY4REVCRTA0NzMxN0UzMwotOjE1MEFFOTAwREVFRjgxRjE1NzQ0MUQyM0M3NUJFMkIyQzEzQTM2NDlGRUY1MDIyRjlCRUYKLToxNTBBRkUwMDRFOEIyM0NFNUFFMjFGOTFFOUY4QjU0QzhBQjM1RTMyMEQzRDg3NEZFRjZGCi06MTUwQjEzMDA5QTkxNUU4Njk2OUVDNjlCNDIwRjM4MkIyMzBFOUQ5MkRGNDQ5OTY2OEE2OQotOjE1MEIyODAwOEQ3QTMyOTU5RDYwQkU0RDdGRTE5NEUzNjgzRjM5NEU3NEEwRjMxNTRENzQKLToxNTBCM0QwMENFNERFMTdGOTg4RUJGRDRCQThCMzhENEZCQjg0NkM4QUM1NDJDNEVBODNCCi06MTUwQjUyMDAyNzcxM0ZERjkxRDk4RjE1NkZBQkE4NkRCNzhDQjY1NTg4QkQxREZDNTc5OAotOjE1MEI2NzAwN0QyODY2MTRFRjFBQTRCQTQ3OUUwNzhCNzdGNUQyODg0N0Q2QUU4OENGOTQKLToxNTBCN0MwMEIwQzY2NTUyNjc4NEI5QjI2MEUzOEU3REJDNDQ1Qjg4Njc0Q0I2RTEwQTVDCi06MTUwQjkxMDAyMUVFNzVEREE2MUY2MzVBMkRDNzE4RjEyQjc4MDc5NkFFMzNGQTk5OUUxRAotOjE1MEJBNjAwNDM0ODQ1MjRCNzAyNzU2QTgwNjdFNTgxMDE1MTk3MjFCQzczRkUxMDg1OTUKLToxNTBCQkIwMDk4NjJCOTJBRThBRjc3RjNEQkI1MTNEQzFENkI3M0RDNjM1OTE0RjFBQzg0Ci06MTUwQkQwMDA4N0YxMkU1NkQyNUE3NUIzQjQ2MjJGNjc2ODAxN0UxQ0Y2N0NCRjFFMzM4RgotOjE1MEJFNTAwMTVDODVGOTg1RkUyRjIzQjlFRTBGMzc1RjRCMTFDRkE3NDM5NjRCMDZFRTkKLToxNTBCRkEwMDUyMUZDNDhCRDc0QTdEMkM4NzNFNUY0OTJCNEI5RkMxMkM3RDA2QkZBMTBBCi06MTUwQzBGMDAzRTcxODczRTY3MUQzMkM0NkY1MjFGQzQ0QjdDNDdFQTEzNzdFOEYzOTU0QwotOjE1MEMyNDAwQjRCMkY0MTlDRUQyNjdGODFCRUFBMzVFQzlFOEIzRTQ0QTQ2MDY4NERGMDIKLToxNTBDMzkwMDhDM0U4OEE3REFGQUUwRjNBQTlCQTU5NUE1Q0Y0ODk2M0UyMzBFN0Q0MjA3Ci06MTUwQzRFMDBGNkZEQTYxQTE4MERBNzdDQkNDQ0EwNjZCQjg5N0NBNThGRTBGQjRFRkJGMAotOjE1MEM2MzAwM0Q2RUJGMzdEOEVGQzgxRkRGMERGMTFFQTNDMjk3ODFDN0NFMUNEMUQzNjAKLToxNTBDNzgwMDQxRkJCRERGN0UxRkI2REYyRkQ4RUYyM0Y2RkI2QUEwQjM1MzNCQzZDNDdFCi06MTUwQzhEMDA3RTBCNjNFRERBNDlCQzFCRTQwQzlFQkJCNDlGRTJGOTlGOEZDMjczQkZFNgotOjE1MENBMjAwRjYxNjBCNjk4QkE5N0RFNkU2MUFDQzJCODU3RDY5NUUyNEI3M0ExMENCNzYKLToxNTBDQjcwMEFERjYyNTcyQUIzREIwMEU3OERFNDUxRENCQjU5NzA1OUQ3QTk4QkI1RUFDCi06MTUwQ0NDMDAzQjI1RTg0NEUxQjk1NjdCODNFMUZDNzdBNDFDMEM3OUQ2NkI3Qjk4QTQwOAotOjE1MENFMTAwNkJGMTg1NDBCNzEwNzI0RjBEMzk0QjRGNkYzQkI5MTY3MTUwOTY0MjJEMzYKLToxNTBDRjYwMEI3MDI2MTNGRDlGNjUzMDExQjc1QzBGNjZFN0I0QkMwNTBBNjE0RUM5OUE0Ci06MTUwRDBCMDA2RENGQUQ0REQxNUZBQ0M5RjU0MzNBRjNDNDczM0ZBQkI3RjlBMzRDMEZDNAotOjE1MEQyMDAwOTYwREFDNDlEMTRDRTEyMkFEMTQ2RTRBNTY5NEFERDRDNjQ1QkFGNzY4RkUKLToxNTBEMzUwMEI5RDUzODFFQjU2REFBM0QyMTZEMUFCQTIyRUY2RjkwNDc4OUJEM0ZFMTlECi06MTUwRDRBMDBCOEJFQzMzOTJFRjlERDY1RDM1ODI4NjE3NEY0NDk4OUIzREVBNjgxQkM1NwotOjE1MEQ1RjAwRkQ0ODAzQzZDNjlGQzg4QzU1RDk3NjBDQzNGODQ2QjAxRkRBOEVDMjczOUIKLToxNTBENzQwMDU4M0JDMEYwREMzOTIyNjRCQTJDRTREQ0ExQkRDODhFMDhGQjc2RjFEQkVECi06MTUwRDg5MDBBRjA4MDdGNDdERjc0NjZFNjVEOTg1M0JDRENEQTU2RjJDN0Y2MTJDNjYzMQotOjE1MEQ5RTAwN0M3QjJEQ0FEMTJFNkM5NDBGNjdCOTU1NkJERDk1MkI0QUY3MkM2NzMwQzMKLToxNTBEQjMwMDc2OTcxODhCMEI3OUYzNjNCOTE1RjNERTcyNTcwNjRBMEYyQ0U3MzA1NjQxCi06MTUwREM4MDBCODU2Q0E4RkY2Q0E4NzM4QjlGMTdCNzdFNUVGRTZCRkI4RkMyMDhDRkRCRQotOjE1MERERDAwNDc3NTZFNzUzRTlDNTc3RjdERjFGMzJBQTRGOUYxN0M1QTg1RjNGRkY1NTcKLToxNTBERjIwMEM4NjAxNUUyOUVCRjc4MDI2QUFEMDZDMTEzRTQ4RjVCQTIyRjExMzI4M0EwCi06MTUwRTA3MDA5RTcxNURGNDNCMDU2RDEyMENDNTU1RDEzNzBBMzlFMDdDMThDNzk4QjhCQgotOjE1MEUxQzAwRURDQzY1NTNGOTMwMDJGMUY3MUEyRDEwREY3RjYyNUNDRUJCQ0M2QjQ1QzUKLToxNTBFMzEwMDJGNkQ0NDgyMTE2RTQwM0Y2N0RENTE1M0Q5RjQ3REE4QjNGNkQxNUI3MTJDCi06MTUwRTQ2MDBBRjA0QkI0OUJFMzFERTJBRkEwNkRFMkVGQTJFNjFDRkJDM0Q4MEJGRUY1RQotOjE1MEU1QjAwNjlDMEJGOUIxNjA2ODI4MEFGODk1QzI2RjJBREU4MUJGOUIwRTg1NzBCOTIKLToxNTBFNzAwMDlCQ0YzQTAzRjgxRkZFMTBGMDM3RDFEOTAxMURGMDQzNUNDQTFERTM3RURCCi06MTUwRTg1MDBFODlGMTVFQkIwOTM5NzVDQzlFQzZEQTQ1NDAzM0M0M0FDQ0QyM0IwMzY3RAotOjE1MEU5QTAwOEREQTdFQTYwNkM2MDA3NjgxQUU5NkI2RTE0MUQxNUZFMEU1RDAzN0FEMzAKLToxNTBFQUYwMDI0NUUxNjc0RDUyOTQ0QTNGQkFGMjc3REU4NEIzQjAwNUVBMDFEODNCQTI5Ci06MTUwRUM0MDBDMTEyRjZDQjgxQjNGOEVENzcyMDlFOEMyQkRDMkIxRkIxNzFEMURFNzYxMwotOjE1MEVEOTAwQkM1MTdDREUwRDNDNTVFRjA3NjZFQjlBOThGRDZEQjM5RjIyQkY0OEUyQkYKLToxNTBFRUUwMDY3RENCRjZCMDhFQjVGNTI5Rjc4OURDMzNCQjM0MDM2N0ZBOENGNTRCREZDCi06MTUwRjAzMDA3ODJGRjAyMTc3NkI0M0ZDOTMxNUI2M0NEQTFERjRDNjk3OTJDNzYxOThDQwotOjE1MEYxODAwQUZEQUYyMzA1QjFFQUE2NUU0QzFCREVFQkM4RDNCRUE5MDY3NzQwNjc5RTkKLToxNTBGMkQwMDc0ODczQ0I1MjAwRkJDMzMzNjg1M0NCNTBFNzk5RUI0Nzk3QzgwNzE2NEQ2Ci06MTUwRjQyMDBDQjMzNkFDQjczQkQyQzIzMEZFRTU1RjdEOUI4RTg2RjI5NzlGMDc5M0E3MgotOjE1MEY1NzAwNzk0MjBFNzlENjgzM0NGMENFNjI1M0M4RjNDRUYyOEMzQzk3N0UyNzc5NDMKLToxNTBGNkMwMDJDQkI4MjdCOUE5NDA3NzlBMDNDM0IxQ0YyRTA1RTczNUFFMjBBNUUyRTM2Ci06MTUwRjgxMDBDOEFEQURENTdERkM3QTMyOTk0Q0U1NTg2N0Y5MTdEMTA2NTk0NDNCMDFGNgotOjE1MEY5NjAwMzlCQTk2QUE4MTBERTFDRTM1RkQxNEZGNEZBODczRUNCODIxNzU4OTczRjEKLToxNTBGQUIwMEREQ0UyOTFCQUZFMEE1MDVGMTc5MUNGQjY2NThFQjY1Mzk4NTZGOUE1QTU5Ci06MTUwRkMwMDAwMkNFNThFOTM5RkQ3QzgzOUQ4RjUzQjgwNkUwNDUyMUI2N0Q5MDFCOUREOAotOjE1MEZENTAwRjM3NTJEQ0E2QTgxQkYwMTcyMThEQTYxNjg5RkIxNDY2RDIxREJBOTJERkIKLToxNTBGRUEwMDAzOUYyOTY3RUQ1QTE1QUNENTdBNTY2NjNDNjI3MjcyQjA3MTQ5QTI4RjkwCi06MTUwRkZGMDA0NkFEQkVDNjJFQzA4RjY5MjNBQzVGQTNBQ0YzQzgwOTVBNEMwNkNDMzk4RQotOjE1MTAxNDAwNUI4RkQwRjkxNzNGQTNBRDVCRUZBNDZERjM5N0QyRTdCNjJFQTdDRjFGNTcKLToxNTEwMjkwMDU5NDNEQjJGQUVBMzg3RTY5RkE2NzgzRkYzNTdCRkM4QzE5OEE2RjhCRkNCCi06MTUxMDNFMDA1NDJGMUM3OTkzMTY5Q0U5MzEwRjVDREMwN0Y1QzBCRTU1NEVCOUNFREU1RAotOjE1MTA1MzAwNDNCQzg1REFGQUVBMzQ0QzZGQTFFNUY3MTJBRkNGMDkxMzBBQjREMEMzREQKLToxNTEwNjgwMEQzQzA2QkFGMjUyN0MxOEQ0ODBCQzM3Qzg5RjZGMTJGOUU2MjFFNkJBMUQxCi06MTUxMDdEMDBDQkQ2NEMwMTg3NUFFMDkzRjlDNEJCMzBENkMzNzA0RDMxMkZENDVFQzlDMwotOjE1MTA5MjAwRDQwNUU5OUYzQUMyODg0QTk5NUIxM0RGMkZEODU1RkNDNzhFMjA2M0Q3MkQKLToxNTEwQTcwMDQ0REZDNUFFQkI2NEFEMzNFRTkyREY0OTQ4MTJFQUEyQzIzRTMzNkEwRDY3Ci06MTUxMEJDMDAxOUY4N0Q2MzhFQkJDRjNDOTQzMzY0MUMwQTBEMTg5REIwOTYyRjU4NkY4QgotOjE1MTBEMTAwMTg5RTBGM0UxNzc3QzlGODI1RTI4MEQ1NjFBODFCQTk4OTdFOTBFRjkwNzkKLToxNTEwRTYwMDBGQ0ZGNzZFM0EyNEUwQ0Y0NDBBMkEzRTQ5RkQ3QjhEOUQzNzdFNUUyM0NFCi06MTUxMEZCMDBGN0M3NDg3QTJGOEQzMTk0N0YwMUVDNjNGOUIxREY5N0NGOEJGRDFERUU4RQotOjE1MTExMDAwMjNGNjVFMzgyQ0VBMThCOTdGMERDQjVDMDczNjkzRkIxRkIzNzFCQTA0QjUKLToxNTExMjUwMDRFNDM2NjlGMTRGMUYwQTRDRDY3NzQxMjlGNUIyN0YwOTFGQkU1QjBBOEYyCi06MTUxMTNBMDA4NzUyN0NFMjM2OUZGNTM2MUY4OUQzNDU2NTFFRUU2N0IxNzE0MjhFMDREQgotOjE1MTE0RjAwOTVCQUJDRkQ3REE2M0ZCNEM4M0MwNkJBRkEyMjc3NTYwNTYwQUZCQTdBNzgKLToxNTExNjQwMDQzRUE3QjNFNzI2RkM1NjU3OEY2ODBGRENCMEMzODA3RTUwRTM0QzI5RUZECi06MTUxMTc5MDA1NUFEOTRGNjg3NTUwREJGOEIwNEU5RDhEQjkwMjc2MjRBNURBREY2MzI2RAotOjE1MTE4RTAwREVEOUY5RENFQUREQjAwRjc1QjBEMkQwQkVBQTAzMjREQTQ4RDQzREQ0REQKLToxNTExQTMwMDU1REExNTc2MkY4NTFBNERGRjBENUZBOEZEODZCQjZDNUI1NzY5MUQzQzMxCi06MTUxMUI4MDBBNDFERTBGRTQ0MUY2M0I5N0Q0RENCQjQ2RThFNzlDNTFBMDUzRDEyQkQ1NgotOjE1MTFDRDAwNEMwNTlBMDgyNzZBOTRDMjgxQ0JFM0U0QjlFNTI3RERENUNFRjk2NUM2QjcKLToxNTExRTIwMDQxOTNEQjM0NzAyRTNFMjMyRDFENjhCOTRCOTc4NDQzNTlGMzdEMzAzRkNBCi06MTUxMUY3MDBBNEJEQzhBMTg2QjBFNzQ3QTc5Q0FGRkUyM0VFNEQ0QkMyMjg0QjEwQzYxMQotOjE1MTIwQzAwOTY0MTlEMTFENDNBQzQ1RDM0MjdBRDhEODZGNjJCOUVBQjYwOUUzQjQxMUEKLToxNTEyMjEwMDM5RTk2Qzc0NDc1QUI5MEZGNjYwMTdENkJCN0EyRkY3NDRBMkJDMjAzMkJCCi06MTUxMjM2MDAyMkVFOUMyN0ZBRjFCMEVEQzdENjA0M0Y0RUZCRUY2ODlGQTEzQUZDQjc5QgotOjE1MTI0QjAwMTA2QTg1QjQ4RjgyMUZFMEZBQTE4RkU2RUQxRjMwOEJDOTIyNTNFQUI2MTYKLToxNTEyNjAwMDQ0RUExNkVBQUU3NkZBQjM1RkVCNjA4MTg4QkJEMjhERTc2OEMyQTgwN0VECi06MTUxMjc1MDBENkEzRTk0RUUyQzVGN0U3RTdCNjFCMjU5Qjg5RjdBNUI5MzE0M0Q1OTZGQQotOjE1MTI4QTAwOEFCNTU5OEZFQjAwNzNEOUZBRTg3NkVDNzM1NzhCRkYyMUNBQkYyMzIwNkMKLToxNTEyOUYwMDY5QUFBQjNDNjExNTlFNjc2QTEyOEY4ODVFMEJBNEU0RDYyMEVFQ0E4ODBCCi06MTUxMkI0MDA1QUI4Q0M2Qzc1MkRERDlFNkJDMzk5Q0ZEQTlFMUFDN0ZGNjM1MjQzMEJDRAotOjE1MTJDOTAwQkZFNzRFRDEwODQ1QkZFNzRCM0RBRkNCQzA0NTlDODAxRUY4MUQxMUVGMDIKLToxNTEyREUwMENEMEU2QUVFM0E5NkRFOUJFNEJERDkxNkJDQUJCMkVGQTUzMTRFMDhERURECi06MTUxMkYzMDBBRkU5Qzc1OTQwQUIyRUM3QjUxNTcwQkQ4RjVEQUZBOTVFMjlFRUZCOTkwQQotOjE1MTMwODAwQkNFMzlGQTM3Nzk5RjhCRDAxNjkyMkNDQTc0NkNEQjNDOUE0N0Y1MjdFQTkKLToxNTEzMUQwMEIyRjlENzRFRTJERjZFREY5RDRCMzlFRTEyNzc2NkJENzFBNEEzMjQwRTM4Ci06MTUxMzMyMDA0QkJBM0E3RTQ3OTAzMDdDNEU0QzQxOUZDNTcxRkY5MUY0RDUwMEYwNjIwQgotOjE1MTM0NzAwOTRFMkJFNjhEM0Y0RjkzNDdGRDUwQUFEQTAyMjY0RTc4RDBBRURGNjZBMDUKLToxNTEzNUMwMEEwQzk3QzZBNDdGQUVFMTA2OEIzQTJBQ0Y3RjRCM0NEOEY4RjFEMzU1NjU0Ci06MTUxMzcxMDA2OEY3NTdGOEI0RkJDQjAzREFBMjhBRDQ3REVCMEE2REJCQTQ2REQzNTQ5MAotOjE1MTM4NjAwQkM4NzI3RDE1NURFOUYxOUI2Mzg3MTdCMjVENjEwRjhFQzQ2MzhEOEY3MTYKLToxNTEzOUIwMDIwN0VDRjg5NTBGQzNFNzMxQUJGRTcyQzRFQjgyQjcxM0QxMDQ3OTEzODVGCi06MTUxM0IwMDBFQzIwRTY2MEM0RDFGQjM4RTJBMEFDQTUwMUFDMTFBMUI2N0I4ODkwMzE2MgotOjE1MTNDNTAwMDIzNkZFNEJFMjU1QzVERDY5MENDRjlCRUE3OUQyNEZGMTVFRDJGMjBFMzUKLToxNTEzREEwMDg4RUY2QjQ0QUM3QjRDRTBGQkQ1RDdFNDc3MzBGQkRDODEzMDREMUJBMEMzCi06MTUxM0VGMDBFMjhDRTI4MDA1NkQ1OEEzMDNCNkNDODYzNUUwRDlCNzU0RjBFMzNCMUM3RQotOjE1MTQwNDAwRTNFMkZGMEM4NjVENjQ4OTM2QzA5RDMwREM5NzE3NjZDMTg4Q0I0RENBNTUKLToxNTE0MTkwMDI3QzI1ODNERjQ2QTY0ODhBOTEwQ0JBQkIzQzcxMkNBRjg3MDE2QUMwMTQ2Ci06MTUxNDJFMDA2MDIzNTkzMEY3QkYyOUUzQTM1OTMwMDJCMDc3MTA2NkFGRjM3RjEzRjNFOQotOjE1MTQ0MzAwODRDMTUxMTU2OUY2MjQyRjMyMDM2MTdDQzA2NDRDMjgwQzBGMEMxQUY2NTYKLToxNTE0NTgwMDIyOTk2MEQwNjQwODcxRTJBMjk3NTAyQzM3MDI1QUVGQjE0MTI2NEFEQzYwCi06MTUxNDZEMDBFMEExQ0M0MTU2RDkyREVFN0NDMTQ0MTI2Q0IwNzkyNjEyMkRERDlEQjhEMwotOjE1MTQ4MjAwOTkzMjc4NDQwNzBGMTRCNzQyNURFRThFNzNCRDJENkEyQjY1NTlCN0Q0OTcKLToxNTE0OTcwMDlENTJCMzU1REUxNTU3ODUzOEJBRThCMjU1OUM3M0RGRDdERDZGRTZDREQ1Ci06MTUxNEFDMDA2NDUwRjFGNkVBN0U0Q0JEMzdEREZEQkVFRkVCQUZCRkZFQkVBRkZCRkJBNwotOjE1MTRDMTAwQkEzMURFNDREODJEQjgwRUU3Mzg5MTlFNEZCRTlBRjMxQjM3RkY2RThDMEIKLToxNTE0RDYwMEQ5N0Q4RTRBMUJDMTlGRTExM0NDMzUwMEVCN0QxNURBQTg5ODZCMjVFMDVDCi06MTUxNEVCMDA4N0I0NzFGNjI0NDlEMDIxMzNDRUZEQTQ3MzIwOEZBMEVEMzdBMTlGNzRCMAotOjE1MTUwMDAwMzY2M0M3QzQ1ODc1N0Q5OUU2RTMxNDRBQkU5QUExMkY5NDdDOUJGNTBDRDQKLToxNTE1MTUwMDhDRUJBQjFEMzQyMzRDRDQ0NzE4MEI0Mjk4MTExRTU3ODIzQUE0NDMxRDgxCi06MTUxNTJBMDA2NzY4QzNEN0NBQjJBRDkyQzZBRDkyNDYzRkU2M0NBOTFDMTZERjNGRjdFQwotOjE1MTUzRjAwRTFGRjcwOUNEQUI5MDQ2OTI5MUJGRDUyMzY0NDZFOURFNDE1RDgzM0MwQ0YKLToxNTE1NTQwMDBEQkVFQkFCNkMxMEU2MUMxMDVGQzZGNThERUM4NzVCM0VENUJDRTc5OUNGCi06MTUxNTY5MDBBRjMyNjlCNzBFRkVCRThBQjJDMjU2OTc5MkIwRDk3NjgyRTcyREFERTZGRAotOjE1MTU3RTAwNzE3RDUxNDZENjREMkYyQjcyOTYwMTJERENFNzA0Q0RFNDkyRUZBQjU1MjcKLToxNTE1OTMwMDUxMUU0QUJFMDEzNEJFQzFDQTUyOUNDRjdFNTNEMkMxQ0JDMEU2RjgxQkE5Ci06MTUxNUE4MDBDN0E0RkU0OTUwMTVCRTI5MzM2MURDNjA4Q0Y4MzM3QzgyNUU4RkYwRDhGNgotOjE1MTVCRDAwQjg1NUE4M0QyOUQwOUU2NERBQkYyREY4MEI2NUYwNkVFREM5Rjg0MzIwOEYKLToxNTE1RDIwMDc3MEJDMDNCOTRGREM0NzdERTI3MUZEMDZFRjcwOURFMkZCOUM2RjhGQ0Q5Ci06MTUxNUU3MDAwOUY4QjJGNUZCREFCMkY1NzZEOUQzMDVDQTk0NzVEM0NCNEE5QzY1Nzk2RgotOjE1MTVGQzAwRjE1NDJFREY3MjhFREFGM0RGQTkxQjdBRjI3NDAzM0VBNzY0RERENUJFN0MKLToxNTE2MTEwMDMxMEI3QzYzRDc1NUUzRjNGQkQ5NkZEMUVFNEVDRDI3QjM2Q0JEODQzQ0M3Ci06MTUxNjI2MDA3OUNBOTYzOTc4NUY3OEI2RDc0OEU0RDVDRjNBMzc2NjA4MTg2M0I0QTE0MgotOjE1MTYzQjAwMUNGQ0E5NDhDOTI2MTVGN0EzMDFENjg1M0ZDRkVBMzg5NDBGOUMxNzc2OUIKLToxNTE2NTAwMEREOTRCMzBFNzhFMTk2NzBGOEQzMDE2MzJDMEY4NkNEMDMyMTgzQTJDQzIyCi06MTUxNjY1MDBDQzJGMDM3ODdCRUQzMjVGQjZDQzJDNTAzNkQzOUI1Qjg2N0RFQTczRjRCMAotOjE1MTY3QTAwRDkyRUVCMkQ1MDU2RUM3NTk2OTkzNDUxQTkxMDU2MjFGOTQzNjIxNDc1MkEKLToxNTE2OEYwMDA2Q0U0QjFGQzgzQ0M2Q0EzMDZFQzJGRkZCQzdEQUNCMUM2QjUxNTI0QTNBCi06MTUxNkE0MDBGODlBMTNFNUQ3QzdFNTM3NEU2RDM5OUY3OTEwRjcyQjEzQUMxREU2QkEzMwotOjE1MTZCOTAwM0YyNDc0NTkyMTE4RUEzNUMzODBCQTcwMENERkIxOURBNTNCRDYwOTY4QzcKLToxNTE2Q0UwMDFGNTAxRjZFNDc1RDAyRkZGMUJCMDMxNTYzM0E4NzhGQjJFMjIzQUM1MDNDCi06MTUxNkUzMDBCOUVBMjhBN0NFRjZFNTg1Q0I1NTI4RUY5MjcxMkU5NEZCN0M3RTYxN0M4NAotOjE1MTZGODAwQjgyMEJGN0M4NUZCM0FFQjVDQzIxODMyQzdBMzA3MkExMjNBRDcwM0RGMUQKLToxNTE3MEQwMDg2NkY3RjQyNThEOENGQUYxQjAzN0EyRDc0N0Q2NzU4QjlFMzlBOTA3QUFFCi06MTUxNzIyMDBERUI2RkQ0MjFGRTdGMjNBNTcxRjE3QTAwNUJFMTFCNDhDNTFGRTA0RDg0MQotOjE1MTczNzAwRDcyMzNDRjA2RjBBRjJBMTQwN0I5MjY5OUY0QkRGMUU4N0RDRTFGQzc1MTkKLToxNTE3NEMwMDc5QTdDRjZGRTI5RDNFQkY4QkJDRDNFNzMyMjk1MEI2REYzMzdEN0U5N0E4Ci06MTUxNzYxMDA3OEE3Q0Y2NTI1QUYwQ0RCM0ZFN0ZDMzZCQjI2RTEzQUJCOTJDRjcxNjEyMwotOjE1MTc3NjAwMUI5MEE3MEIxREI2MEZFM0UwREQ3MkFGODYzODZDQTE5QTU3QTczOEVBRDkKLToxNTE3OEIwMDdDNzk3NTZFNDc1RDc5NUU1REE5QTM2RTgxMkFFRDQ4MjA0NTc3RjcyMzA5Ci06MTUxN0EwMDA1RDI2OEYxRjY2N0Q4RjM4MEJEQTdCRTZEQ0RGODgzMzhDNjlFMDU4NjQwQwotOjE1MTdCNTAwRkQ4RDk4MjE3QzhCRENEQzQ1QTI2NjczN0U1NDdGNzVCQkFCQUQ4RTlGNTcKLToxNTE3Q0EwMDY3QzA5QzdBRjUxNjQyOEEwRTM2MUFDOUNGRDMxRTU4NDNFQTUzRjA1NEYzCi06MTUxN0RGMDA4MDI3OThGQjg3RkI2NDNGMDM5OTdBM0VGNkM3N0E3MjY5ODRCREQ3OUY3OQotOjE1MTdGNDAwOERBRkI3MEVGQ0ZGRkVDRUI3MTA0RjBERDBDQTQyM0RGQUVBM0I5NTU1RDMKLToxNTE4MDkwMDc2RUMwOUUzMzlBNERCN0M3MzEyQ0ZBMjc0QzdERTlDRTJDRjQ5NUNEQjZDCi06MTUxODFFMDBDMDMzRjk2NjhBOUY1MTAxRkZGMjVFQjE1N0UyRjAzOUE5OEI4QzlGNDNFNAotOjE1MTgzMzAwN0U1MjgwN0QzOUM0RTMzOUQyQ0VGNjgzOUQxRDA1M0IwQkNGRUY4RkVBNjUKLToxNTE4NDgwMDgyNzdENTlDNzdCNkNEOEQ3RDk2RjYxMDZGQUZDRTNFOTNGQzhCQjgzODRECi06MTUxODVEMDBGRjUwRkYzNTAxM0MxM0NBM0ZCQzUzQjkwM0YxRURCOTU3Q0M5M0RERjBCNQotOjE1MTg3MjAwNDQ3RjEyNzM0RTc5Q0MwOEZFQUZDRkYxMzdFMzZDQ0Q3NzFDNzMzNUUzQTAKLToxNTE4ODcwMEZGQTYyQ0VDMkJGMDI0MjE3OTkyOTAzQzQ5NDg5RTI0OTAyN0M1QjA5RTNCCi06MTUxODlDMDBCRTE2RkVFMTVDRjI2QTRCMDIzM0I1QkVDMDRCQzU4MjU3QTJFQzU2MjgyNAotOjE1MThCMTAwM0IxMDE4Q0IyOTVCMDE2NTQzODFFMzc2NTkyOTk2OTU0MUQ5OEQ4MTQ5Q0YKLToxNTE4QzYwMDJDRTNGQkVFODI5RjdBMEFGODA3N0M2QzRENERFN0UzQTUzQjg5QTcyMUY0Ci06MTUxOERCMDA4NTdDQUNCQUUzNEZERDlGRkUwMkYyNTAyNEU1NjEwRkUwM0RERjlDNEI0NQotOjE1MThGMDAwNjc4MzQyM0M0NzNGODUzOTAzQjRCRUY0RTk3NDVBNUJFMTFCRkEyOUQyQ0IKLToxNTE5MDUwMDVBRjNBRDY5QjVFMzkxREY4NkRFRUQwNUU4MkQ5NkY0OUUwMTVBMUI5QUJGCi06MTUxOTFBMDBBN0NCQUY4OTM5QkUwNTY0RjdFMzhCNjk0RjExRjRFMzgzOEJEM0ZCNjE2QwotOjE1MTkyRjAwMDI5Q0QzMTdCMTFGQkU2QkVBNDdFNjNDRUVCN0VDNEY1NzgxRkUyOEIyM0YKLToxNTE5NDQwMDNGNTc1NjExNEYxN0ZDQkUwQkZFRjczRTgxM0U2OTU1NENENTZBMThENzNDCi06MTUxOTU5MDBGREEwRjM1Q0NCMDk5OTg0NzJGQ0FGOTA1NkZBMjFCRTA3NzRBQTAxNzcyMwotOjE1MTk2RTAwMTY2ODg2QTU2QTJEMkYyMkZFMDhFODk5QjUxMURDMEY4QzUxREMzNTQyNkIKLToxNTE5ODMwMDlCOThBMjYyQUQxMkRCMEZCNjU4MzFDMTFFRjZGM0ZEMkMwQUVEQ0U0NDM2Ci06MTUxOTk4MDA4RTU4QTUxREM3QUNCNTEyNzYyRjNDRDNENzlCNzQyMzNDNURFMkJGQkJBNgotOjE1MTlBRDAwMjE4RjlFMDZEOTU2ODdFNzQ2RjAzNTdEOUFDMDQ3NzQ4MTBGRjEyMEJFRDgKLToxNTE5QzIwMEU4MzNCOUY4MTY0MEJCRDI4RTIzRDY1QUMwRjdFMTA1MDFDMzI3RjE3RDhBCi06MTUxOUQ3MDA3QzQxRTA4M0ZGNkUyNzNGNTVDOUNGQTM0RDQ0RDQzNzkxOUNGQTM5QjZDNgotOjE1MTlFQzAwRkU5M0Y1OTc1NkU2RDZDRjk1RjVEQjY1RkQwNzc5RjVGMzY0RkQ1QTU5QTUKLToxNTFBMDEwMDdGOUNEN0E3QThFRkQ5RUNGOUEzMzRGNDkxOTEzRTFERjc5MERDNjhBMzJDCi06MTUxQTE2MDBGM0NFMUJGNTgzM0ZDNEYwQ0M0NzY1NkM3MzMzRUUyRjk5N0Q3NTk1OUExMwotOjE1MUEyQjAwMTJENEE1M0UxQkE4MzhBRjM3ODdGNjA1NUIxREYxRENCRDI3M0I3RThEMEIKLToxNTFBNDAwMEJDN0FCQ0ZCRkRFNjgwQTNGQ0RDMEJDRjVDQzFGMjk1OUI3RkRERUM4Q0Q5Ci06MTUxQTU1MDBGRjlFN0RFQkE3MkY2M0Y5ODNGRkY4QUI2NjUyODlCMUM3NjFEQUZCREI1NgotOjE1MUE2QTAwMjc1QTdDN0U3MzczRUM4N0M0MzM3NjFGRjE0Q0EzRDM5MUFGOUI3QTM2QzkKLToxNTFBN0YwMEQ3M0UwQjVGMjM2NUExMEU3MTc5QzUzQThDOTdBOUI5N0RCM0ZEMjM2QzcyCi06MTUxQTk0MDAzNzEzNjQ3RDMwMjg3MjFCQjBFRDQwREJCODNFMzM3MjVGNjA3RjFCRDdBQQotOjE1MUFBOTAwRTVDQ0I0NzUzOUQ0NzE5RDBGMzA3OTU5MUUzQzVDNkY1MkIwMkQ1RDVDMTUKLToxNTFBQkUwMDg2RUQzNTE4MzMwNkNEMkExREY3QkRDMTZGRjRGNDU3QzRGNEJCQzg5MjE2Ci06MTUxQUQzMDBBMDk3MkNBOTlCQUZCOTgyOTgyMzM2NTBDMUY0NzU2NjU1RjBCRDBDNUYyRgotOjE1MUFFODAwQzZGODNFQzQ2Q0NFMEZCNjE3N0Q5NDEyRjBGNTQ2RjNFQTNEOEU3QTA1OUUKLToxNTFBRkQwMEVBN0JCMzdDRUQyRjUyNDhCRjFCRUE1REI1MzA3RUIyQ0Q3QzZFQ0ZDNDBBCi06MTUxQjEyMDBCN0Q3NDFGQjhEQjJGREY3NDBGRkZCQjU5MjgwNURFNzg3QkEwNjIyRTQyRgotOjE1MUIyNzAwMDlGRjJGM0MzQjYyNTRDM0ZGRjk4RTM2MEJDRkM2MEQ1RjFFM0RGN0MwQTgKLToxNTFCM0MwMDM4MjUyMjcxQ0IwREJBQjZGRUNCQjQyNzc2MjVFREQ5RkE1NTdBOTZFQzBDCi06MTUxQjUxMDBERkFBNDlEMEQzMjAzRjM5N0FDNTI3RTU3NEI0OTFGMDc5MTM0QTNFNEIxRgotOjE1MUI2NjAwOTMyNTY0MTZDQTE5RkFDMTM2RUMyNzYxOUU2MTBDNDc3NUQwRTVBQTg4NDIKLToxNTFCN0IwMDE5QzcyM0RDRkVEMjgwOEMzRkVGMDFCOEQ1QzBGRkRFNDVDNDkzQUExMkU5Ci06MTUxQjkwMDBCMjdGQjIwMTYwQ0I3RDcyMjI2REY5OTM2NDk4MEU0RThFRUEzMzZGNDI3MwotOjE1MUJBNTAwOUIxRUEwQzI5N0Q1RTQzRTZEMzVDNTc2NDU5RUI4RjFBRjhCN0U1MEVGMjIKLToxNTFCQkEwMDZCOENCMTA2MkJFQjZGNDVFMEJENjY5MDkwMjgzQzFCOUUyM0M0ODRFNzBDCi06MTUxQkNGMDA2NUY4OTVDM0ZCNjVGODg1RTBDNzlFMTNGQjVEMDhBN0Y1M0ZEMjlFRDM5OQotOjE1MUJFNDAwQjgyNjkzRkZEREU3RDM5RUUzRjg5RjhEQjA3OTMwM0UxODFCQThFNDdCNkYKLToxNTFCRjkwMDA5MjlFQkY0RkQ4NDNDODdCNjgxOEQ1ODM2N0ZFRDc1QzY2OTkxOUZDMjJFCi06MTUxQzBFMDA2MTI4MUFDNjI4NUVDNzdDN0E5QUJBOEYxMDJGRUEyMjhDOUI3MTFGRjMzRAotOjE1MUMyMzAwODhFNTZBQTMwNkVFMjc2M0VDOEFFN0NBQUIyM0I4Qjc1QUQ2RTRBMEUzQjkKLToxNTFDMzgwMEFDOUJDQ0MyRDgyQUUyQzc3MzRGQjg1N0IxMDBFQUM3M0NEMjVFNzEzQ0NCCi06MTUxQzREMDAwNzk4Q0E3NTM1QTMyNkZDNUZGMDVGNjA5RjUwMUY4OUZDOEIwQzJEOTlBQwotOjE1MUM2MjAwQjM5OTU4RjYzQjU3MEFGMEYxN0QzQ0M1RjE4RTdCOTdGNjNCRUU1OUYyREQKLToxNTFDNzcwMEI4MEZGQzFGNzNDNEI5NkM3ODNFNzZDNDQwNUQ5MDRBNUZDRkU3MUVDNkJBCi06MTUxQzhDMDA0NDg2RkVGOTI4MkYyM0E5RUI4OUVGREQ1MUYxMEU3RjcwMUNCMzZENjM0MQotOjE1MUNBMTAwMTZDNjUxODYyNjhGRUE2NTBBREY0M0IxNDQ3QzI1NjY2MTNDQTVDOTQxMDMKLToxNTFDQjYwMEI3RDhCRjFDQTYwRjRDM0QzMEI1Nzg3MjM0NDcyRTY3QTM1QzIyN0QyMEQ0Ci06MTUxQ0NCMDA5QkJCNkYyNzFFMUVBRjBDMUY2MUU4RjdFREQ3NTYwNTEwODYxQjczQTJERAotOjE1MUNFMDAwMjJBNzk4MTYzOTQxRkRGQzlDRDMxNzk2OTdFNzAwMjc5ODYyRUYwNzVGRjUKLToxNTFDRjUwMDE0RjkxNkZDNUM4MkRBQzNGNzRDNzkxQzM5N0NDQzdBNUNDRUM3NkJGNTFDCi06MTUxRDBBMDAyNzlCMUNGQ0ZBNjYxQTI0NkUzQ0FCODRGODBCQ0M4MUYyNTU2MEVCRTVBQwotOjE1MUQxRjAwRkM2MEI4RjdBQzUyMkU1NzY0QjI4ODgwMUQzMjg2NjJDQTI2M0M3QjQwRTUKLToxNTFEMzQwMEVGRTU3MTZGQkZCRDZFOUI0MzQ2MENENDZCQzg1QjJBRTlDM0VGQ0ZERUY4Ci06MTUxRDQ5MDA0NjNDQ0FENDUzODZGQUZFNTNCQTUzNDdFMjc5MjQ2NjgyMUVFNzZCQkM1QQotOjE1MUQ1RTAwN0U5QUZFQkJEMzBBQzYyNjE1MkVGQkE2NTgxRjREMDE3RkNDQjg3RTMzNzkKLToxNTFENzMwMDE5MERFMjk5QzVENDk2QTNDRENFNzFCOTRFRUE4QkVFMTU5QzA3NzlGMTUwCi06MTUxRDg4MDAxNzVDQkZEOTcwNEQwRTM3NEQ0RUQyQ0M5OTQ0NzU5NDYxMUNFRDdCNjZDRgotOjE1MUQ5RDAwQkMyMEVDMTkxMjc2RjkwQTkyQjM4RjlCODU4Rjc5QTRGRDc0NUZDNUIwRTAKLToxNTFEQjIwMENFQ0ZDNzgzOEU0NUZBNjNGQ0VDNDJEQzVDOENFQjAzQzA1MTlDMUMzNzI5Ci06MTUxREM3MDA5NUU0MDlEMzVEMUEzNzcwNEY3MDI2RTA5QjFCNjY4NjJCNDJFOUExQTQ5MgotOjE1MUREQzAwQjI0OUQxN0FFOTBERUEyRjhEMzNFOUI0REYxQjUzODJEOTc1NzA5OEEyNzkKLToxNTFERjEwMDVGQkJEQjg1QkFCMDE1Q0FBQUY5NzkwRDlFQUU4QjNFQzNGRDYyMEQ1MTVDCi06MTUxRTA2MDA4RUNGQ0EwNjk4M0I3N0JGQzhENzVBMDFFRDRENzI3RjAxN0FDMTNFNDZBQwotOjE1MUUxQjAwMEVBMzdEMUNFNkY2NzE1RkM1NDlERDNCRDk3NzNCQzczN0E1RjRCMkM2RkMKLToxNTFFMzAwMDMxNDE3QjM4NkU3QUQxREY5M0U1NDU5MUI4QTkzNjI2NzhGRjBFOTEwM0JDCi06MTUxRTQ1MDBCQTA1RjJFQTVFMDdGMzhEQzVBRDlCQzUxOTU1RTY4QThDNjdGQTM3MzdGRAotOjE1MUU1QTAwMzQxQUI0QkYxNUZBMkFGMzNFOEQ5RUY3MEU2N0YzNzFGNzgxN0ZFMTM1NDAKLToxNTFFNkYwMDI1M0RFQzJBRjQ0MEI5MEFGQTE3Njk3MUUyNzQ4OTc4RUFERTlDMzMzNEUyCi06MTUxRTg0MDBBODI3NDFDNjQ4RTU0OUIxOEYyMEZEMzNFMDlERTA4RkM4MkRDOEU1QTMzQwotOjE1MUU5OTAwREFGNzYyQ0U3RTNEQ0NCREM4MDZFQzAzNkJDNzc5MUE0QTFFREU1QjI5QTMKLToxNTFFQUUwMEQ2ODFFNjgzNTAzRTE4OEVFOTZFQUZEODZCNEIwMjRERTc4QjREM0NBM0FBCi06MTUxRUMzMDAzRTBCRUIwM0VCNDU4RTBDREFCMEM1NzJFREQ4Q0E2NTY0Q0NBQzgzM0FCQgotOjE1MUVEODAwOUI3NjRFMzdCNDZGNThDRkZENkMxRUM3NUYyQkRCMzUzQURBQjUyNDVGRTEKLToxNTFFRUQwMEREMEIzRjEzQ0JBM0VCNzk4Q0M0QzQzODMxRjYwNUQ3QUE0OEM3RTA1Mzk5Ci06MTUxRjAyMDA3MUREMzcyOUY3MDRBMURDQzZEQjI1RTFGRDU1MDFCQ0JCMUQ3OEI3Q0IxQwotOjE1MUYxNzAwNzYzRjcxQjRCQjBCRjA2MjNCRDNEMTJFMkFEQkY1MTRBMEVGQUVFNDFCNkMKLToxNTFGMkMwMDI2Q0VCMTdFNEVFM0RGOUI2ODVGREM0MDhCMEFGNDNEQ0Y2NTY3OUNFRjAzCi06MTUxRjQxMDA0MzBGRkUxM0QwNEFDNDM5N0VCNzgzRDY2RTA5N0JBMDAwQURDQzQxQzM3NAotOjE1MUY1NjAwNkVEOUVFNTAwMTVBODcxREVERjZDODc2MkY3QzBEQUQzOEM2MzZBREE1RTYKLToxNTFGNkIwMERGNDA2QkE5ODNENkE0ODREREIxNjEzQUFENUQxQkIyMzQ3QzJDREI2RDg5Ci06MTUxRjgwMDBEQjcwOTVGMURDOTAxRDRGRTUyQUUzQTkzOEYwOUVCN0M3QjMwMERFREQ1NgotOjE1MUY5NTAwMEVCQzE3RUNGMUJDMEFERUQ2OEQzOEJGMjY5MDA3NEM3NUUyQzVGRUNBOEUKLToxNTFGQUEwMEZCMzZCMERDOTZGOTM1RDBGRTMwODk2NzY0N0U2Mzg5OTBGOTJCMkUyMUUyCi06MTUxRkJGMDBGM0ExOEQ1OURDRTExMjgxQkI2NUUzRDdFMDA2QkMzRTg5RDdDNkU3NzMwOQotOjE1MUZENDAwRjQ3M0EzODREMTU2MTgwNkMzMzk2QkVGNzU5N0U3RUIzQ0QwMkZDNzVGOTAKLToxNTFGRTkwMENBRUEzQjNFOUZGOTVEMEE0NzE5Qjc2Nzc4NEY4RTdBOUNBMTFGRTkyRUY3Ci06MTUxRkZFMDBFRDMzRjY4MTVGQUE4MjZENTNENzlFMzJDQUU5MDlFMzIwMjE3MzlDM0ExQwotOjE1MjAxMzAwRTg2RkEwNUY4NTc0OEZGRDlEREYxNUQ3MEY5QkUzM0FDQThCODgyNzFFOEMKLToxNTIwMjgwMEQwNjEzREJDMTdEN0JGNzc3MTU4NTlEQkIwMUM2MDE1ODE1REM4RThENUI0Ci06MTUyMDNEMDBEMEI4RUU1RTE3RTczQTk1RUI1M0RCNUU5OEE4NEZFMzVDOUZBQTZENDBCMgotOjE1MjA1MjAwM0ZFODUxOTdFMzNEQTdCRjk1OThBRjMxQUNCQjJBOTg4MUU3RjE3OEFFMkYKLToxNTIwNjcwMDhDQjBGOUQyMzYyNTA0N0UyNkY1Njk3ODQ4Rjg5NDYwNjM0NTVGNDZGOTBBCi06MTUyMDdDMDBGOTA5N0UzRTA4RUQ1MjY0MUNFQ0QyM0I4NjNCNzY4MkEyNkQyQTY4NEYyOAotOjE1MjA5MTAwNUVDRUFFMUYxOTNGQzdENDZCRjgzMTlDOEU3QjE1RjJGRkE1NzQ3QTVFMUUKLToxNTIwQTYwMEZFNUE1MkVDNzdGMjc4QkQzNTlDMDJGREVBODFCOTE1QUVBMTJDRDQxMzg2Ci06MTUyMEJCMDA0NTVERUMyRTE2M0E1OTkxN0U3QzI5M0NBMzdGNDg2NzcyRkY1ODhBRTdCMAotOjE1MjBEMDAwRTc5NTM5RjNDNjk0NDY3MUVGNENBQkEzMUQ1RUY4OTNERjBFNkRDMkYzQTQKLToxNTIwRTUwMDFBOUU1QjNBQzkxMENFODM5ODdGNTEwQkZGODE2N0U4NzdCQjJBMTNFREQxCi06MTUyMEZBMDA1ODdGNDM2OEQ0QjgyMUY0MEVDQThDRDVDQzczNDVDNjE4QzJDMzcyRkYxRAotOjE1MjEwRjAwRTZCODk1RkRGRjhFQzFDQkZFM0E4RTNFMEJGMUIzODQyMUJFN0YwNzZENjkKLToxNTIxMjQwMEJBQUZDOERCNjMxQ0ZGMzI0QkQzNjA4QUZCNEQwRTlBMTJCNDk5MUM1QjFDCi06MTUyMTM5MDBFOUQ3NUMwMTFCMzdERUJEQzNGMzQyMzBGRjFBREFGQjZGRkNDMkNBQkNCRQotOjE1MjE0RTAwQUZGQTIyODMyN0I5RjA1ODUzNTEyNkVGMDdENkFCMzIwRjFCRTkyQUJCOUIKLToxNTIxNjMwMDMxMEU3RUZFMTBCM0Y4MTlEMzFBM0EwN0Y4N0QzQkIyNDMxNUIwNDREQjIxCi06MTUyMTc4MDAzMTg2RkMwN0IzNjhBOUVBRDMzMEQ2QzdFMTlCNDE0QkQxOEU1QkVEMEU4RAotOjE1MjE4RDAwQkYxMkQ2RERFNDExQUQ2NEU1ODQ0QkFFOEIwQkUwNTk4M0JFNEI0MUQ4REQKLToxNTIxQTIwMDU1NTY4OUZBMTZDMDlFQTA4NDBENTk0QUVDOTQ4NTY3MDRDNDc5N0U2OTFFCi06MTUyMUI3MDBCQjUxQkYxNUNCRjk4QjM5NkRGMjVDMDA5MTc1OTMwNUZEMTk5MTVCODhDOAotOjE1MjFDQzAwNzI3NDYxMDZEMjk1NjBFRDIyNjc5OEI5MjU3RDZFMjcxRDY4MkI4QjA1QUMKLToxNTIxRTEwMDVDN0YzMDQxNTUyMkNGMkFBOEM3MkNBNDQzRkQ2ODg5QzU2RDUxODY4RTI2Ci06MTUyMUY2MDAxNEVEOEE2NUU1MUJFMTFDQkQ0RkMwMTk0QzA5RjgwMjZFODJGM0E3RUMzRAotOjE1MjIwQjAwQTMzRUU2ODIzNTIyM0Y4MzQ3QzY3NTNDMTM4RjNFQjBGODI2NjE2MTlCOTMKLToxNTIyMjAwMDlDNzkwMEYwM0Y4QzY1RkQxRkJCREYwODNGNzE5RkU4OUZDMDMzOTY4M0Q0Ci06MTUyMjM1MDBDN0RFNzNDMEI2OUM4RjQ5QzFDNzFCMzZGNzVBRkU3MDgyRDcyNTlDMzhBOAotOjE1MjI0QTAwMzNFNzkxNDM1NEQwRDI0MDU1Q0U5NzU2Nzk4NzUwODBCQTY1M0UyMDJGQ0YKLToxNTIyNUYwMDBGOEZCMjg3MTdBMUVGRkEwQUNGNDc3M0QyRTA3Qjc5MDk3MzhFMURCNERFCi06MTUyMjc0MDBCMTE0RjUwOEM2RkU5OTJEMjdFODBCRTMwRDY1Q0Y5MzVFOURERkQzMTQ3NwotOjE1MjI4OTAwQTY5QzJGRkNBQzA1RDQyQkQwNUZENjYwNTI1Qzg0MTc5N0Y2MUFFQ0MwMjIKLToxNTIyOUUwMEFEQzYwN0ZGOTZGNjkwQTkxMUJFQkVGN0UxMThBOTZGMUE4QTc2OEFGOUJCCi06MTUyMkIzMDAyM0UyNEUwMTdCMEQ1MzVFM0M3RDFERDVEMzc2MjQ3MzVFM0VCMzlFOUE3NwotOjE1MjJDODAwM0E2NkREN0VBREVCQTlGMDZCOTYyRDUzOTg0NzM2NUMyMkQ2QkRCOTMyNDMKLToxNTIyREQwMDI1NjQwODY5MTk5NjdDRTE2MzEyOEM3MTc5RTJFQjU5NThDN0EzM0Q0MzkzCi06MTUyMkYyMDA3OTQyMTlFMEJDMzJDNTFBRkVBNUFGNDRBRTUyQTFGNTA0Q0YxQjBFQzA2RQotOjE1MjMwNzAwREM2NzE3RTgzQzdGQTAxREY3NjdCQ0RBOTJGQUY3RDE5RUMyM0FGQzExMTgKLToxNTIzMUMwMEVERDZFMDY1OTg5M0NCOTNCRTU1REMzNkRFMkZGMzdERUVDNzRCNEYwRTFDCi06MTUyMzMxMDA3MEI5RTNGOTYwQTJEQ0MyRjJGN0U0RkEzNjIyREI0NkYzREFDQTcyMEI5RQotOjE1MjM0NjAwQ0JFREYzQjgzNkZDNUVGOUNENjBERTM3QjJEQ0MyRjIyRTA5QkY1RkI2MDcKLToxNTIzNUIwMDhERTVCNTk1RTUxNjk2REJFQkQ0QzUxMkZFNkFEOTE2REJFMUZCMDI4NzE4Ci06MTUyMzcwMDBCRTY5NzVENEUxM0I5RTZEQzIzMzRENkU5MEEzNjJCMDU1OEEzNjYyMjEzNAotOjE1MjM4NTAwQkYxNDc1QkY4MUUzMUREMDQ2RjE5RUE5Qjk3MzQzNDNDRDBBQUM1N0NCMTYKLToxNTIzOUEwMDdBMkUxOEE1REExMTZCQkVGOTQ5OTNCRkU1NTM0Mzg5MUNCNzVFOEU5NUM5Ci06MTUyM0FGMDA2QzcyQzM5QTBCRUNGMUJDOTk5MTE5MkI5NUM4MDVDQjk2RDk5OUEwREIxQwotOjE1MjNDNDAwOTI1NzcwOUYyRTNCMDc3RTBBMzY1MkUxRTc0NkQ4QjRGOTI4RTc1NzQ2NEQKLToxNTIzRDkwMEFGMjAwQ0Y1RTA4ODMxNTgzQ0FBMjM2RDczMzc1NzU5RjY3Q0U2MzJDMDE0Ci06MTUyM0VFMDBDRkU1OEVGM0JCOEJGODU5MkZBMTQ3QUNGQ0Y5MkNGMjQwMDEyN0NDMTlFQgotOjE1MjQwMzAwRTczQzc5NkE3NkFGOTFGOEFERDg0NzU0QTU0RUZCQTY3OUYyNzQ4MERGMUUKLToxNTI0MTgwMDhEMjNFNkM4QzAwOENGODk1MThCQjNGOThGOEIzMUY3MDA3QzhEMDdGODVGCi06MTUyNDJEMDBERTdFMzZBRUI1MEVFNENENjdDQkNERkYzNkJFRTk5ODRGQUQ0NUZGMDcyQwotOjE1MjQ0MjAwM0EzQUNGOUYwODZCMjNBQ0M0REJDN0Y5RjkxMkMwNkJGQUQ0RTEwQjVDQjYKLToxNTI0NTcwMENDQjNCQjQwMEJCNjExRkIyMEE2QzVGNzQ3MkFDN0RBNEIwRUM2OEQyMUM4Ci06MTUyNDZDMDA5MDE1QjUyOTRFOTMyMjA2NjJCOUM1N0UyOUJGMzcwOTZEMzNENjZCQjBCOAotOjE1MjQ4MTAwNkU0RkExN0Q5N0YwMzA3RUFCNDcxNkIxNjIyRkRFNzVENzQzMjcyRjY2QzMKLToxNTI0OTYwMDcxQUIwNUZDMTA3NzA0RjBGMjNEMEFEM0MyRjExQTAyQkJBRjRFOENEMEFBCi06MTUyNEFCMDBDQjEyMjc4RTZGMEU0RUE4NzdFN0UxQ0NFRDdGNzVGQjQ2MDdGRTkwMDM1MgotOjE1MjRDMDAwQkY1NjAwQkZFMkMwQkZBMDAwRkVBQTZCQzQ4RkZFNDU2RjYzODBEQUI0QTkKLToxNTI0RDUwMDIwMEQxMzlGMDgxQTE2MDBBRTdDRkNFQUM0MTE4RTRCOEI4Q0MwREEzQzMwCi06MTUyNEVBMDBEMTBFNkI2RjBCN0QxRjQ1RTM3N0NBQ0M1QjEwMTk2MUNGODNERjgzMzY3OQotOjE1MjRGRjAwRUQ5MkQzQ0ZDMTU4OUY1QTY1RjVCNjUxMDNFRjc0QkJGNDY0NTUzMzhGQTQKLToxNTI1MTQwMDI3NTZERkI0QjRBQTZENkI1MEZCNjE0M0UzNjZFRDlFQkY1ODdGQjdCNkE2Ci06MTUyNTI5MDBFMTI3QkJCQTNCMUZEREE1QURFRkRDREVEOUIxQUIzM0E4QjU2Q0I5Njc5RAotOjE1MjUzRTAwQzdDRUNFOEQ1RDNCN0VGQ0EzQUVFRTJERjVDQjZFNUIxNkQwQUExRkQ5MDkKLToxNTI1NTMwMEQ1QjU2REU3Q0UxRDhGNkRFOTc4QkMyMzU0NTdENzU4NzdEQkQyM0Y1QkQ2Ci06MTUyNTY4MDBBRTNEQkM2RDdCRTcyRTJERDA1ODVCRDc1MERCNzgwN0JDMDRFQjAzQzExQQotOjE1MjU3RDAwRkFEQkI0QUE0Q0ZDQ0NDNjU3NUJCQkI1MzNCQUEzQkJGNkExMUQ4RjQ2NDYKLToxNTI1OTIwMDZCM0JCNjc2NDQ3NzNENTFGQjY4QzdCNkM3NkE3N0VEN0NBOEI2NzM1NzAwCi06MTUyNUE3MDBCNEY2RTEyNzZBM0IzQUI2RjNCMkVEM0I3NjQ0OTdFREJBQTk2RTg1NzYwMQotOjE1MjVCQzAwQUJENkI5NzU1QkI3QjZCNUYzRTE4RTFGNkZFRkQ2MUVFQUVBNzhFQzQ3OEMKLToxNTI1RDEwMDlENUFGNUVFRUVDRUREREQ0QjExQ0JCNzgzQkY3NUU3QjZDNzNCNzdENjI0Ci06MTUyNUU2MDAzRTBDREREQUQyRDFGREU4OTZBRDNCMUY1RkY2RDA0RDJCMUFBRTA2M0YxMAotOjE1MjVGQjAwMDM5RTlGNjc5OUUzMEZCN0VGQzc3RDQyQjU4QUNFRjUzN0I0NTc2QkY1QzkKLToxNTI2MTAwMDZDMTk5RUU1QjFGM0Y0MjNDQUNBODVGQTA1RTM1MEU4NzBCNDg4MENEMzM0Ci06MTUyNjI1MDBGNjNGQTYzMzc5RkFFRERBQkRENjdGRkVDRUI1NTI1MTdGNjA1NDY5MkQ1OQotOjE1MjYzQTAwQjQwQUU2REUzOUQwMjUzRTc4QkU4NUJBNTM5RUNCRUVGQTIyRUQ3OTc3ODUKLToxNTI2NEYwMDkxMTJEQ0E4MUQ2MTM1NTAzNzlGOEMzNzg3QjQwMUM2RUJDM0NBRDMwMTY1Ci06MTUyNjY0MDAyODQzN0REM0U0MjhDMzc2MkFEODQwODA2OUY1NkJBNUFCNkM5QjUwMEUyMQotOjE1MjY3OTAwQkE3MTA2MTFCRTA0RkVCRjAyQjBGN0E5Q0Y0NEQxNEYxQ0ZFNjU3QTE2RjcKLToxNTI2OEUwMEQyRTVDQzZCNzdFNkI0QzcyRThCNTg1QzFGNkY1RjREQkJBMDNENTEzRkEyCi06MTUyNkEzMDBCNzdDRjBDRDA0RTY4RDM5RjBCMzI4RTE2NzY3OTdCOUM4NUNBNDBGRTlGOAotOjE1MjZCODAwRjA2OUM3MThGNjYxMDZBQzUzMzE3RjhFNEMyREM1MzhBQ0NGREY3MkFCNEUKLToxNTI2Q0QwMDgxN0RDNzdCMTY0QkZFQTFEMUMwMkI1NEFBMDA5NkQ4QUYzQTQ0QzNEQUM2Ci06MTUyNkUyMDAwQkI0RkU2REMwMERGRTk0MEZCRUI3RjFFMDM5MUVCQ0IzMDFDQTJDMjcyMQotOjE1MjZGNzAwQ0UzNUU5MzRDN0M5RUY2RDA0RkZFQTc4M0EzREE3MzJFMjEyN0I2QUUxNTMKLToxNTI3MEMwMDAxN0ExREQ4MDU4NDk5N0MwQkYzNjYwMzUwRjYwQUE3QUIwNEVDRTUyMUFCCi06MTUyNzIxMDA3RTZGQzQ3RURDOTcyQkIzQzdDRDNFNjMxMUZCMDM4RURERTc3Q0VDMzBGNQotOjE1MjczNjAwN0VBMzY5MzBFRkQ0QkU4NDVCNUI2MTk1QjQxQzg1RjEzRUMwNjFFMzNDNUYKLToxNTI3NEIwMEM0Mzk1OEFBQkQ2Q0Q1N0NFNTZBQ0FGQUFCNjIwQzZDN0UzQkM3QzFGNzMwCi06MTUyNzYwMDA0RURBRkQ3NUY1NTc0RUE2NjczOUM3MDNFOTUxODExRTlGNjNCQ0EyMTFENgotOjE1Mjc3NTAwMzc4RDI1N0Y2NUE5MjA4NzVBNzIyNDMxRDdCRjFCREE3NjUxNUY3MjExREQKLToxNTI3OEEwMDlCOUQyQ0RFQjQzQUI5MTRFNDM1REE4RTc3NkFFMDFEODk3ODJGMEUwOTk3Ci06MTUyNzlGMDBERjREREY1NTcwOURBNDUzRjQ2NTk0N0Y3OUQwQzA3QjM2RDY2MkZDNDYyMQotOjE1MjdCNDAwQzUzM0JCNjFFRThCMEU5QUNCRjVENzQyNzVBQkQ2Njg0NUFCREUyRjM5NkUKLToxNTI3QzkwMDRGRkRBMTVCRjgzRTYzRUZFQkU5NTk5NzVDNzY1RUQ2MDA5QjkxMzNGRTA0Ci06MTUyN0RFMDA2QjI5REU1RDg5RUREQUExREQxOUQ5MkU5MDZDMDFCOEFERDY2QTExREY5NwotOjE1MjdGMzAwNDhGMDNCMjlFNUIzMjZCMjg2MEVGMEJDOTE0NUQ0ODVGNzdGMDE0RkM0Q0MKLToxNTI4MDgwMDlEOTRCOUNGQkQyRTcxMjc4RUI4RTc2QjA0N0NFOTVBRkQ1MkIxODBFRkI1Ci06MTUyODFEMDBBNTIzQzYwM0RBRUNFMDVDNkQ3NkRERUI4QkNBODJENkUyMUI4M0E3QjFFMwotOjE1MjgzMjAwMEVFM0JBRTNFOTU5OEIzNTU3OTBEM0E5MEU1MERDODM3NkMzQkMzQzBEQTMKLToxNTI4NDcwMEYzMjAxMzdGOUI3QTQ1RDhFN0E5NTdBQzlGNTc1NEVCN0NCRjE4NzRFNjMwCi06MTUyODVDMDBBMDg0MEZERkYzQkRENDdFODA2NUI3QjVEQjZEODczNjA3REJGMEJFQjRCOQotOjE1Mjg3MTAwMTJERTA3RENERkNEQzdBNTdGMjFFNjUxMkI3Q0NGRTM1ODMyNEU3N0YyRjYKLToxNTI4ODYwMDI4QzIzM0Q5ODJEMjUxQzNGN0RGODcxOTBBNEU2QjEyQ0YzODlGRTdFNzIwCi06MTUyODlCMDBBOUFDRDBBQkZBMTBDMDlENUY1QTYzMkMwN0JFRTJEOUQ4MUE3MjlFRjYzMQotOjE1MjhCMDAwODZERTg4NjI0QzJEODk2QjgzQjZBNTg2MDU2Mzc1MURDODRFQzk5RTcxMEMKLToxNTI4QzUwMDhBQjkwNDQxRENGRjUwN0YyMUM2NDZDRTY1RjRBOTE1QkUyRUQzODBBRUNECi06MTUyOERBMDA1MDNCQTc1RkZEODUzNTcxMjlFRDM5NUEyNEZBNzkxNzhDNzU1MzgxMzFEMwotOjE1MjhFRjAwODU3NTc1NTk3RTlGN0EyRkE1NzkwRTA5QzJEOTJFQkY5RjBGNzNBRTY0NTYKLToxNTI5MDQwMENBMzRGMEJFQkEyMjU4QTc4NDkyODcyOUZENEREQTYzN0Y4QjczMDU3NUYzCi06MTUyOTE5MDBFMjg0RTQzQkM2NkY5MTE3MDFFMDgzREQ2NjE4RUFGODNCN0I4NjQ2NTJEMgotOjE1MjkyRTAwNjkxMUVGODQzNkE1NDc3Mzc5OEYzMjU4ODg1NjlDQzdFNUM5MUVFNkZCOTIKLToxNTI5NDMwMDRDRjBGQzgzQkZDREZENkUwMkY5OEY3MkNFNzVDMzdFNkFGMzdBMTA3OEVFCi06MTUyOTU4MDBERDlBMUNCMTI2NUU5MzNFODBCM0RGQjgzNzI0RkI0RDdGMkZGQThENjNDQwotOjE1Mjk2RDAwOEZGMEEyMDBBRjQ2OEUxOTk3Q0Q1MTIxOUI3ODhFRDZENTc2QjcxMTg2QjIKLToxNTI5ODIwMEZBOUI2REY5OTM2MzIxRjg5ODg1RDFGMDdCNDE2QjE0NjRFMkUzRDc4NDk5Ci06MTUyOTk3MDA0Q0NDMkZBRDM3RkMyM0FFQTAyRDFCNzhDQzNCMkFFMkI5NTIzNjRFRTg0OQotOjE1MjlBQzAwRThERjJEMjYyNzU2QTE1Q0Y4MUExMzVDMUUyQzczQjFFRTFFMzg2MjI4QzUKLToxNTI5QzEwMEEwNzMxNzRCMzkxMEZCMDJCOUUzN0UxMkY4RUM1NzVGMDE5OUVGQTE1RUY4Ci06MTUyOUQ2MDA5MDBCNUY0RjlEOTFCQTI4Rjk2RENGMDdDNzM3MTgxQjJGQzRFRjY1MzhBNwotOjE1MjlFQjAwREZBMTNERTc3OTNFMUU5ODRGOTgzNzY0OUY3RkI5Q0UyMTFCREQyMDFCNEIKLToxNTJBMDAwMEQxMzM0MjM2NUM3ODE3OTY5NDBEQ0M4MzQzREVGMDFDMDdDQ0VCNzgyRDQ0Ci06MTUyQTE1MDAzQjdFMDg2Rjc2QjhDQkQwRkZGRDJGRUI0MUM3NTlENUM5MzZBQjJBRDlCQQotOjE1MkEyQTAwNjI4MTlFQjM0MDBGQjIwMkY5MDlGQzVFNjY1Q0VGOTQ2QTU1M0NDNjFBRTQKLToxNTJBM0YwMDJCQjAwRjA2RkE5QkNFRjAwRTE4OTE3MjhDMUI4REI1QTNERkU2RjI4QzQ3Ci06MTUyQTU0MDAxOEI4OUZBNkNCNzNENkU4ODMzRkMwRjc5NzEyRkNBQzE4REZGRjgyNzVBNQotOjE1MkE2OTAwM0I5RTBGRkI3OUM1NDk1OEFCQzZGOTVFOTgxQUVCQjMzMDBGNzI3NUVDNkMKLToxNTJBN0UwMDE0RjdGRkNDNTgxQzY1NzI5RUFBRjU1OUFCQjU1MzE2ODM2NzE5MUIzMzcyCi06MTUyQTkzMDA0RTZCQTI5RTJDOEFEMzhGQUZFMjFGQkFDOTg0RTcyM0E1QjlGOEIxQTJCMwotOjE1MkFBODAwQ0Y1RDNGNzNGRDRGN0I0RjFCMURDNTc1REQ5QkQ1QUMzNDJCMEQ2Mjc2NzYKLToxNTJBQkQwMEQ5NUQ0OTU4NDgyMzJDMTJDOTUxOUM1REIxQzg5MjJDQzI0MkE4OEZFQzEzCi06MTUyQUQyMDAxMDY1NEI5RDc0NDYxMkY2M0FCNjAzQjE5RDg0QjYzNEM3RTc4NEM0MkIwMAotOjE1MkFFNzAwNTg4OTA1OEZGMDMwMTVGNjVBMjY2Njk1NDgwRTZFMjA5NTM5OTA5MDE0RDkKLToxNTJBRkMwMDkyQTU3NjFDOTE1MkIyRTEzODFDOUFBNEY2Mzg3MTZDOUFCOEI2RUM2MjkzCi06MTUyQjExMDA4N0E0MzZEQjdCRUZDQ0FDNTYwMjdGMjVFRDM5RkREMTMzNjdDRUNDRkI3MgotOjE1MkIyNjAwQkVFRkRFRjdFRUJCRUZCREZCRUVCQjk1QkI4NkYzNzMxN0Q4MkZEOThGNUQKLToxNTJCM0IwMEQ5RjdEOTYzNkM4MjNEQzQwQ0I2OUQ2RDYxOUJEOTE3RDg0Njc2Mjc1QkJDCi06MTUyQjUwMDBDRjZFNjUzN0IzM0VBNkIwNEZCMEI1RUNFM0VDNjNFQ0EzQUM5QjVEQzc4NAotOjE1MkI2NTAwNTZCMzU1NkMyNTVCQzE5NkMzOENCMjkzNzVCMDc2RDZDNjk2QjEwODVCNDUKLToxNTJCN0EwMENBNUE1OTk4ODVEODg3RDhENUVDODNBQzA1OUUwRkIwQUI1ODMzM0M0RDY0Ci06MTUyQjhGMDBFQ0ZERjBCQzhGMkQ4MUE3MTE5RTJCRTE1OTBDNEYwMzNDMzIzQ0Y1RjRCMwotOjE1MkJBNDAwRDRDMUIzODg5RTVBN0FBRUEwNjdBMUZERDREMDUzNkQzRjU1ODUyNzY4N0IKLToxNTJCQjkwMDNGODFDMkUzMkY3QTE2MTQzREJFNTk4Rjc3Q0UyMzVERjJDQ0JGRTRBOTFECi06MTUyQkNFMDBCQ0VDMzNFRjJEMUZGMTZEOUY4QTc3N0NDQURGRjVFMzc5Qzc0N0MwQzNENwotOjE1MkJFMzAwNTM1QUY2QkI5NjNENjA5OUNFQjI4MEVDNTJEN0RFMUY2M0YyNDFGNDZCQUMKLToxNTJCRjgwMDA0M0ZEREZFNkY4MkZGOUNGRERGMDJGRjEyMDdGRkM4NjNFQTlBMjA3RURDCi06MTUyQzBEMDA1NEQzNTlCNzk2ODM0OUIyQzQyOTlBMjQyRjNFMjhDNUUxQ0RDMDZCMkU1QgotOjE1MkMyMjAwM0U0ODc2MDJDOTdFNkMxM0Q5QkU5MzY1REJDRjYzRkI3MUUwMTdCN0ZEMjYKLToxNTJDMzcwMENBNkQzRjE3Rjg2NTZDQkYwQURCQUYwNEZDMzAzRjI4OTNDRTI2NEEyQzRCCi06MTUyQzRDMDAxNkIyRjM0MkJERTI5MDlEMDdFQTExODdFQ0I0QTgzNzFDODIzNDMxMEU5MQotOjE1MkM2MTAwRjc2ODY1NkRFM0I3NTFEMEJBNEE4M0Q5RjZBODFCRTQxQUY0OEJEMUI5NTIKLToxNTJDNzYwMEZGQjBFRUNCNzBBREMyNTQzM0YwODE4NjUxNjFBQTgzRUMxQjI2REUyNjc0Ci06MTUyQzhCMDA2Q0YyNkRDMkM4MUUwQjg0NTU0MjE4RjgxQkU4Q0Y5RkU4NTBBOUVDNUNGMQotOjE1MkNBMDAwQjNFMUUwQ0VDMTM5RDYyMzY3QzM5ODNCNDIzNEQxNjU5QTg3ODc3NDlDODkKLToxNTJDQjUwMEY3MzFBQzI3QTUwOUY1MjM3RTExODc5MkNCOEEzRjk5QjVDMzgxMzc3NkNFCi06MTUyQ0NBMDBDOThCMEREREM5RTdCOEU1MUY4Mzc4MzFFNDlCRDI2MjgzMTc0MDA2N0ExMgotOjE1MkNERjAwOEI2RjhDOUI4OTkzMkJGQTk3NUMzM0ZGQkFFRDRGRjhDRkU2RTdBMzZEQkYKLToxNTJDRjQwMDA5RUIzQ0I3QUM0RDkzRkQ1QkQ5RDJFNzIwREQ0OTk5NzQzRDRBRUQ3RjI4Ci06MTUyRDA5MDAzQTM3RUI4MkI2ODZGNjYwNDNFREMwM0I1RDJDRTk2QTM3Q0E2MDlFQ0E3NQotOjE1MkQxRTAwNDczQkQ0RTk4NjBFNUE5RjlCRkVCRTdCMTlFMjA0RERCODQ2OUE4NTc0OTUKLToxNTJEMzMwMDIyNkI0NzFENkNBMzA1NzAwMThDNTYxM0U0NTZBMzhDNUQwNUIwNUY2NUUxCi06MTUyRDQ4MDBCODgzRDFGRURDNjVGQzI0Q0VGMjYzRjJBQjA2RjJEQUE2Qjk2QjE0MjE3QQotOjE1MkQ1RDAwNTkyNzNGNkNERkYwQkQ0OUU2NUE3OUEwOTk5NDE4NjhFNTcxQkUyQzM1RTYKLToxNTJENzIwMEEwM0Q0QTE4Q0ZDMzUwNjRCQkRFNDJFQjUwNjE4MzQ5MDg5NzRDQjBDNDI1Ci06MTUyRDg3MDA1Q0Q1NTA0NkIzOEVFNUYzNTNENUFBOTQ2ODhFRTA1NzQ4MzRCN0UyMzc3OAotOjE1MkQ5QzAwODY3NUNEODU0OEE2QzZCOEQ0OEVEMTVFNjUyOEE0MjVBODRGQjQ2QjUxMUIKLToxNTJEQjEwMEQyNkQ4QUEyN0YzQzNGQkYxQkUyQzRDODhFMjRDQUQwRDY1OUQ4QjgxNjNGCi06MTUyREM2MDBBNTczMDAxQkFDMzNCMUExOEQ5NjFFMTRCQkRCQkUyNzIwNjVFQjQ4RTAyQwotOjE1MkREQjAwM0FFRjdDMDAyQTA5RjM5N0E0QUVCM0E0ODJGQjNERTg3RTc1MDVCRjhDRjMKLToxNTJERjAwMEU1QjZFOEEyQ0NCN0IyRDg1NkZEM0NENjJCMjdFQjk2REQ1QzRCNkZBQUM3Ci06MTUyRTA1MDBDNTJDNjlBNTNDMjEzRjVBNTdDMkZGRDg4ODlFQUE0OTI4MUNEOUYzMUM4RQotOjE1MkUxQTAwMzEwQTdBMjBCMTFGQTRCMTdFQjVGMkZEM0EyRjlGMzA5ODlFODQ3OTE0MDgKLToxNTJFMkYwMEJGRUM5QjM3N0YxM0YyN0YzMjhERkVFOEQ3MDI3RUEzNzNGQ0FBQzE2RjI2Ci06MTUyRTQ0MDA2ODhFREZBNjE1MDA5N0Y0N0NGQTczMzdCRjEwMDY4MTU5MTNFNUE3RjVGQgotOjE1MkU1OTAwQkJEOTk0NTZCQkYyMDVCNUI3RkU5OUYwNDNFREU3RUNCMzE2MDkzQTNGRjMKLToxNTJFNkUwMEJDMjg3MTA2RUYwRUEwNzVCMzQ1MkI0RkE5N0M2NjVDNzdDMUI4MjhDQkE2Ci06MTUyRTgzMDBERjRBMzNGREJDMjFBNDQ2NjhBRTgzNkI2RDQyNzY3NzVCMTBFNzUxNTA4NwotOjE1MkU5ODAwMEVEM0JGNjE1Q0MxQkRBMDIyMUVDQUQ5MzNFMUM5OUI1RjZBMDMxODgwRUIKLToxNTJFQUQwMEE2NEYwMzVDQTc3NDRFREJBOTNFQjRFRTc5RUQ4QUE4MDZFRDY4QTcwMTU0Ci06MTUyRUMyMDAzODRCNUM1Q0IxM0EyQzZDODdGMjYyNUIyN0Q5QkU1MkI0MkQzRTI5MDhBNwotOjE1MkVENzAwNjhFQjc0REJBOEQwRkQwMkY4M0YzMDZBQjlCRjZFQkJCRjNEM0E5NUNGQzEKLToxNTJFRUMwMDA3MzIxN0U3NUNGMzExRkI2OTNBRTk5QUQyMTE2Rjc3QjNBQzk2Rjg1RTA1Ci06MTUyRjAxMDA2OUVCOTdCRjVDREE4QUZBMTBBM0I5ODc5NDg1QTcxRjUwNEE0RTNEQTVCQgotOjE1MkYxNjAwNUVDN0NFODQxNzY2OEZBOTY0NjcyREE0REI3NjA2NzM1NEQ3ODBGNEY3N0UKLToxNTJGMkIwMEVBRjk1QjlFMzYxNjcyNEY0MkY4MTk0MzQ4MUM2OEMzMzkyQ0U2M0Q3RDdFCi06MTUyRjQwMDBDQjI5NURDODk0QjYxRUJBQTc3NDE5Q0EyNkM0NDdBNEIxODM0OTU3MDY5NAotOjE1MkY1NTAwRTg3QzU4QzdCQUZDNjFFRjYwMjQ3ODFDRjI5NjdFQUQ2MTdEMjQ4NDNCNTIKLToxNTJGNkEwMEY2RjhBNDgwN0IyM0QyQjY4MzEyQzFGRkMzODNDRjQzMUYyQzk3ODc1M0IxCi06MTUyRjdGMDA2OERCQkE0QzFFNENFQzRBNjgwQUQ3QTM0MTFGRkRBOThFMzY1N0UzOEZENQotOjE1MkY5NDAwMzE3NjlGODBGQjA5NUE2QUJBRTEzNTAzRTJFRTc4NDk2RTU5MTY4M0Y4REUKLToxNTJGQTkwMDlCRTNBQjVCNTE4RUExQkUyNTFERDBGOUNDNTc4MDQ3QkE1QkUzRDlGRDhFCi06MTUyRkJFMDBBRDRDM0ZBQzRGNjNEQjgzNzBFQzNGNkJDMTlGQ0YxQzgwRjYzMzQ4QjYxMgotOjE1MkZEMzAwMjk5QTZDREIzMUQ0RDdGNDYxQjIwQkRGNDRGRDBDNjREQkNDMzBGNEIzRTMKLToxNTJGRTgwMDg0QzYwMzZEMjVBNjQ1RjAyQjMwQUQxNUJGQjg1RjI2NjQ3NjQzMUU1OTZECi06MTUyRkZEMDBCMkM1NUE5RDQ5RUE5QzAwMzgwQTY1Qzk4NjJBQjY0M0VDMUZGQkE2MzA4RAotOjE1MzAxMjAwNkNEQzg4QTFDQzlENDkxQTU3MjUzNEYyQ0Y4MDNGQkE1MTJFOUM2RUQwMjkKLToxNTMwMjcwMDc0MzFDRUI3N0E0MTc2QzQ3RTMyREQzMDZFMkMwQzY2RkE4RjVFNzQyRjIyCi06MTUzMDNDMDAwMzVDMUE1MzZGRTQwNTA5RTBFOTgyMzJDRTYwQkYwQUE1QjUyQ0YwRTA4OAotOjE1MzA1MTAwMkVDODk3NjVGNjE4NEYxNUNFRjdBNDc0MTEzMDEwMDJFMDlFMUZENDIyNDMKLToxNTMwNjYwMDRDM0Y5RUE2NzkyOUYwQjNFREQxNTNDQUU5REI0QjVCRDM2QzUwNDkyN0ZECi06MTUzMDdCMDA3NjJCMTcxQkY5NjVFOUU4QjA1Mjk1MUM1MTc3NkRENTk0NUQxRDY3NDlDMwotOjE1MzA5MDAwQjY5NENDRkJEMzlENEJFQUFFQTEzREEzNTA2MjEyRDc2MkJEOEI5MkI4QjcKLToxNTMwQTUwMDI3QThENzY2QTg0RUQ2OUFCNjgwRjY3NTEzQjQ2NkREQ0VBMzJDRkRCQ0EzCi06MTUzMEJBMDBDRTc1QTM4RUUxMTNDNkFFQUNBNkUwN0FBMTkwRDkwM0U5QjYyMTlFNjlBNQotOjE1MzBDRjAwNkZBRkRBQkNERkE4MzUxRjM2OUEwMDM3QjU1MEQ3NUMyOTg4MDUxMDhFQ0EKLToxNTMwRTQwMEZEQjM0OURFNDZCNjNDMjgwRjQ5NDM5QjRFNDJCNTdDOUY0RTM2RjdENkI5Ci06MTUzMEY5MDA2OTFBQTREMzkxMzdGMEYxNDM3QUM0RkMxRUM0REQ2NkEwMEQ0RTYxNkFCNwotOjE1MzEwRTAwOEY4QTc5QkE0RTRFOTA4RTVBRUM3MUM2NkE3MEJGM0Y3NDg0NkMwNUYwRjgKLToxNTMxMjMwMDNENDMyQUQ0NjlENEQ1QjM1MzREOTVCMUQ5RkQyMzg3NkJGQjI5RUQ4QkU3Ci06MTUzMTM4MDBGRkM2RkZGMDYxOEVFODQyN0IxRTdFRjMxMUQyMDNBNDVCNzY3MENEMUZGNAotOjE1MzE0RDAwRkQ1ODkyRjRCNUIwQ0VENkZFNDc4QUY2M0Y4Q0VDODg1MjZEMEVBNTQzRDAKLToxNTMxNjIwMEU2MjMxOTY5QTVBNjBBRDc2QjZBQzkxQTRERTU2NUNEMTAwNURDRDNERUUzCi06MTUzMTc3MDBBMzM1NDU3N0I3RTFCOUIxQzAwMEI0MUY5OEI3NTYyN0QwN0REODA4REE0NwotOjE1MzE4QzAwNkUzQ0QzNkVGMUZEREQ4NkRGMTQ1QkQxOEZFQzhEMTZGNjQzRDJCNEU2MTAKLToxNTMxQTEwMEVGNDJEQ0U0NDZGNDQ2QTI4Mzc1QzY5OTYzRkIzNEQ0Q0JCNkNFMzY1QjY5Ci06MTUzMUI2MDA3NzIwRkMwMkYyRTJENkEwQ0U1RTg2RThDN0E1MEVBOEMxNDU4M0M2MDMxNwotOjE1MzFDQjAwNTFFQjVDMkNBRTlEQkI3QTJDREJDQjM3MTZEOTIxRTAzRUFBOTEyRDYyQUEKLToxNTMxRTAwMDA5NjlBQjdGRUQyMEQ5MzI4NEZBRTMzQTM0NkYwMjJGQ0I5RDI3N0M3QjMxCi06MTUzMUY1MDA0REJFNTdBNEI5NDM5QUY2MTk1Q0E0NkI2QUREQjEwMUYzNUMwM0VENDIzNQotOjE1MzIwQTAwMjFCQzlDRjk0NUFEQzk1QzEwMkVFNkYxQzhEQjkxOEVDNERGMEJCQzFEQzgKLToxNTMyMUYwMEY4RkM4NkQyNUVCRkY5QkE0MTc2REJGRTExREJFMTkwQjFFNUNEN0NBMDEyCi06MTUzMjM0MDBFNTRERUNCQjE2MkQxMEQ3N0U3M0E3RUVEMjQ2NTQ2RkE3QjVEN0VGMDJGRAotOjE1MzI0OTAwMUU4MUY3Q0I4ODZDNjRBOTA4NkQ2NTIxMUIwOTIzMURCNUEyMzZBQTU5MUYKLToxNTMyNUUwMEY0RDJEM0E0RjM3NUFFOUZEQTE4RDAwRkREM0NCM0Y0NUY1MzM2REQ5MTgyCi06MTUzMjczMDBDRTk4MDZERDQ4RDdCOTM0MjUxQUQ4RjQ3ODI3MUNCRjVCNUFGRDRGRDI5OQotOjE1MzI4ODAwQTI5QzY4OTFCNkY3Nzk2NjY4RjI4RUI0MjgxQTZCMUQzQUU4REY0NzdCNDUKLToxNTMyOUQwMDU5OTVBMTYyOUFGOEUyRUYwRjkzRERFREQ4QzBFNDg1N0JERURGMjZDNTM4Ci06MTUzMkIyMDBDQjYwNUMxREQwRDFCNjM2RjJBRUNENUYyQzZEOURGQTJGODcxRjU5RkNCMAotOjE1MzJDNzAwQTMxQTY4RTY1QkE0MTkxQ0YwNERBNDIxRDZENURBRjNCMUNBQzBGMjMwREMKLToxNTMyREMwMEVGQzJCOUE4ODJCQzY0RDFBNUE2ODgyNjlCMDk5RTk0NjU3NzA1QzI3MTc1Ci06MTUzMkYxMDA1RjUxMzI3NzFBOUM5Q0E0RjY4NDZFQTVDOEJFNDBBNDI4N0RFNDkzMDU2MQotOjE1MzMwNjAwN0Q1RkQyMTM0RUIzMDlEMkRCNkM0MkRBMEY0QzI4QTJFQzI2REUxQzIyNUYKLToxNTMzMUIwMDNENDA0REFGODk1QUJDQThEMDBGQTFDRURDMDYxQzhGRTE3QkZEMjlDMkJFCi06MTUzMzMwMDAwMUY0NUI3RkVBMEY1NjdEQ0QzOUQ3NkNBMThERkJFQTYwQUFCRjA2NjQ1RQotOjE1MzM0NTAwMDE5OTY1MEU4NjU4RjY2MDk0OTkwN0FCN0Y5QkY3QzA3NzEyREM5M0UwQUEKLToxNTMzNUEwMDNGRDk2REE3N0ZBQkY4Q0FCOUQ5RjFBQkVERjgzOEFFRUY3RkJEQTg0QzJFCi06MTUzMzZGMDBENEM3ODBGOTQ3NzE1QUIyQ0Y0NTc3MTY2OEZBQzU3QkY4NjU1REI4N0UzRQotOjE1MzM4NDAwMkUxRjREREMzNzc1NEMyOTg1RTkwNjJGOEZBNEQwNEU0OUI5RkM0NDhBREQKLToxNTMzOTkwMEVDODZEMzdFNTA5NkNFNTQ0QUYyMjE5OEI3MjQ3NUQxNUNEMjdBRTNGREI2Ci06MTUzM0FFMDA3OTBGRTI0MTdCMzBFRjk5OUI2NzMxNkNBNDc3MDg2OUJCRTQwN0Y1RjM3MwotOjE1MzNDMzAwQ0Y2QTIwMjNFOTY0MDNDNTZBODc3RjY3NTBEQkI1NkNBRDRDRUYwMjc5REUKLToxNTMzRDgwMEIxMTVFNEEyRjdEMjM2QTc5RjFERDE5M0FFOTRDRUY2RjFCREQzQ0Y2QTBFCi06MTUzM0VEMDA0NkQyOTUzNkJBRTQ1REM2RUIxN0IxN0YyNEVDQjlDOTgwRjExQ0NBNDJDQQotOjE1MzQwMjAwNDA3RkRDNUY5NUExOEM2MjlDNUM3ODdBMzYzRTcxN0ZENzk2NjcyRDVERUIKLToxNTM0MTcwMDY4N0Q4RjhFQjIzMzA3RkQwQkVCMDg2RTYzRjVERjgyQkMxODhBOTE0RDU0Ci06MTUzNDJDMDA3NDI3OUZFQzhGNjdGMjY5N0MyRDJGRDRFMkQ5QTE2MDM1QzhGMTAzRkFDMQotOjE1MzQ0MTAwNDkyOEYzNkUxNkQ3OTgxOTRBRTNCQTk4NjgzNkU5QTVDN0MzRUFCNzEyMUUKLToxNTM0NTYwMENERTFDMUY2RjY1OUIyNjUxOUMzNzVFMjc2RUFGNzY1RENBREMwNjdBRTQ5Ci06MTUzNDZCMDBENzY1MzM5NjY2RDIyQjg2MjAzNEE4QjhENjZDQzk5NThCREJDQTYxRUU4QgotOjE1MzQ4MDAwRTJBQTUzQTgwQ0I0ODc4NzY5REMwMzYxQjUzMjFBOEU5NDQzOTlGQkVCNTQKLToxNTM0OTUwMEFGNkRBQjM1NjUxODFCOUJGNDZBMzNBNDczNjJBNzNBRjg5NUIwRTZDRTE3Ci06MTUzNEFBMDBDMjNDMzFENzZFMzg3Nzg4QTBFRTA3QjM3NEQwNDFERTZDMENGM0I4NTYzRQotOjE1MzRCRjAwMURGQkQ0MjREMzZGMTkxNTUyQjg3RkY4NTdGNDM1NTdCODk2Q0RBQ0ZGNUEKLToxNTM0RDQwMDU3REI3QTE3NEQzNjNGMEIwMTNGNkI1NzUwQUVGN0M5NUM4OEU2MkE1MDRGCi06MTUzNEU5MDAwRkRFQjExRDkzN0I2NEIyMjZCQjQ3QURCMUVGNkZGMEMzMzg4REUzMzE3RgotOjE1MzRGRTAwQ0I3REM3RjA3MkNGQTlBRDBEOTVEN0IwQkFBOTdFQzZDRTY5MTJGQjc1OUEKLToxNTM1MTMwMDlCOUY3QjU5REQyOUJCNUI1MTU2MEMwMUFGQUNFNTI2RDQ0MEYwNDhCRjU0Ci06MTUzNTI4MDAxMEZERjVEMjVBRjhCQTRFRUQyNkJCRjRDODI3QUI1NkEyNkVDMDExRkJEMgotOjE1MzUzRDAwQkVBMTg0MzYwNUUzQkUyRjcxNThGNUQ2ODJEQzUyQjBDRkZDQ0U2RjE1N0EKLToxNTM1NTIwMEM4RTZGODREQUYyODhCRjhFMjY1MzA2N0Y5OEVDRUNDNDcwRThFODNDQ0U2Ci06MTUzNTY3MDA1NTZCREVBRjIzRUZDMjc2ODE3QkQ4NUUxOEFGOUZBQTE5NTkxQTA1NTk4QwotOjE1MzU3QzAwMDdDN0ExNEZCODc1OTI2RkZFRTk0MTJERUNDODM0NkZCQzk5N0Y0Qjk5RUEKLToxNTM1OTEwMDI2RkRGQkZDNUJDQTM0RUQ2RjI1RDNDNDVFRDA0Q0U3N0MzOUYyMUNDMEI2Ci06MTUzNUE2MDA5NUQwNzA3QjVCMzlFOTM0MjNERThFQjVGOThGRkYwN0U0N0Y0QzVCMEIyOAotOjE1MzVCQjAwQjg3QkEwNUQ3NzZDNzYxMDlFODI4OTQzMDUzQzA1Q0QyNTYxRTExQ0VFRjIKLToxNTM1RDAwMDI5NkQ5OUU0NEYxQzQzN0UxRDVDNjhDRTBCODM1QkY3OTkwMUZBOTY5QjUzCi06MTUzNUU1MDA4QkU4QUIwMzVGQkY1Q0ZENjE5QzhEQjhCQTVGNTY0RjVFQzgwQjg4MDc3OQotOjE1MzVGQTAwQUM2QjhCNUQ3NzY2RDdCREY2MzI3NUM3MzRFOTBCRUZCREZFOEI4MEVFMUQKLToxNTM2MEYwMEQ1Qzg1NzYzQkJEMkIxRDdFN0NDNkZBMDhFNzQ3NzQ0MTEzRDVCOEFFM0E1Ci06MTUzNjI0MDBDNDc2RUIzN0IwQjQ3NjIzQzhGMENGM0YzNUIyNTQ5NjhGNEYwMjk3RDY1NAotOjE1MzYzOTAwN0MxQzhDQjdEMjE5QzM2RkI3NEIxRUY1MDVBNDlGMUI3N0IzQjM5QTk3RkUKLToxNTM2NEUwMDdCOTFFRTRGQjg2MkU1Q0I2QTI4RkJCREM4MTUxRDE2M0VBRjYwMkY1MDJFCi06MTUzNjYzMDBEQkMzRkU3QTA1Q0U2NzQyNjcwOUE3RDhFNjcwM0QxN0Q3ODRFQjRDNzcxRQotOjE1MzY3ODAwQUIxM0E3RUFGOEQzMDVCQzU3NDE1QTQ5MUU0ODI3MkE5MkJEMThGNzJFRTQKLToxNTM2OEQwMDVDQjI4RDFENEFBMzJFNEFDOUQ0MzEwQzFCNzU5RDNDQTZFQTc5OTg0N0UwCi06MTUzNkEyMDA0MTc4OTM3QzdCMUI3RTExOUVGMzJCQ0E5NjZEQkFGOTE5OTAxNzdGQUVGRAotOjE1MzZCNzAwMEJGMjYzQTMyREYyQkYxQUQ1RTdFRDNBQzY4NjI2NDVENDM3Q0JBQ0Q1MTIKLToxNTM2Q0MwMEFDN0Y5QzRCMEQ0RDlFNUI2MUE1M0YwMjc4RjNEQjc5NUQ1OEIxQkVFRDZECi06MTUzNkUxMDA2QUY2RjU1NjlBMEIxNUM1QzVCNDk4NDc3MTNBQjRGN0JFRTVERTMzNEFGRQotOjE1MzZGNjAwNDhGRUNCQTVFODhGRTMyNTg4RDIxRkM3RkYwNzcxQ0M4QzBENjU1MDNFN0IKLToxNTM3MEIwMEM1QjRFNUE4NjMwRkI4QzRGMzYxQjVCQkJFNEE3ODVEMjg4MzhDNjBFNzk2Ci06MTUzNzIwMDA1RjM5RUJCRjJBRUNCMkZFRDNFNUYyRkMzMDdDNzU1N0E1MjVCNzYzRkU4QwotOjE1MzczNTAwQUU4Nzc3QTgzNDM3RkEyMUYwMEE5MEJCOENFODIzOEExNDREQUFENTMwMkYKLToxNTM3NEEwMDk2RDA3OUJENzc2MUEzMUY1RjE4NjM1MjVDNkFBRDhBRkI5ODRDREE0QTA4Ci06MTUzNzVGMDBFMzkwMTQ4MEYxQzQxRTg3Njg0Q0MyQjBGNzMwMUUzOTYzOTEzRDJFNUQ5NAotOjE1Mzc3NDAwNzYzQ0MyQjEwOEM3QTQwOEQ5RjQyODhDMjkxQTNCNjE4RDI5NTYzOTMyQzkKLToxNTM3ODkwMEFCOTY1RjMxMTZBMDZDMDFFMzk0MjA2RjM3QkE1RkNEMEJFNTE5MkQ1NTg5Ci06MTUzNzlFMDAwRTcwNDdBMkM5NTY2NzdFNTgwREUzMUFDNjY5N0FENUExRjdBMDVFREI1QQotOjE1MzdCMzAwNkFDRDJCNzMzRkEwNzAxREMzNDM4MDFGNENDRjMyQ0ZFOTc0MTc0ODRFRjUKLToxNTM3QzgwMDgzNzk2NTRBMkJDRDI0MTMzRTI4NDdDQTFDNEE2MzlGMkIzMThGNjk5ODQ3Ci06MTUzN0REMDAyN0I2MzU2QzczNERGMkIzQTNEOEE2Q0VCRUUxQzg2QjM2Q0MwMEVCQTFBNQotOjE1MzdGMjAwNUQ1RjgxM0UzQ0EwRDM3OTU5QjQzOUZBNUQ2QjVDRERGM0NBNENGRkYyRTQKLToxNTM4MDcwMDA2QURGMzJGODJCRDVGMzY1OUM1M0MyMDhCN0FGNjJEQjBEQzcxOUU3OTRECi06MTUzODFDMDAzNkJCOTg2NzBBNUU0QkNFNkVCMjc5OTNBNTIzRTJDNkJCMDNGQ0NFNThBQQotOjE1MzgzMTAwOThEMTM2MDM5RUZDQzczQkQ0NTUyMENGQkEwN0M2RDQ5MURDOTg1MjI3NTMKLToxNTM4NDYwMEJCM0IxN0NBMUZGQzMwQUU5RDUxMUFBOTU5MkQ5QzE3OEQzNTQwQkJFMDE2Ci06MTUzODVCMDA4NkY4Nzg4M0VFOTY3MDFEOEUxQjdBNzE2RjczODQ5RDFGRDBDQzEzNzhGMQotOjE1Mzg3MDAwQjlEMTVDNzk3Mjc2RjlBQjEyQ0Q0QkZGQTQ3MjJFRDFCRjA5RjUzNzU2RDAKLToxNTM4ODUwMEIxMEE0OTVBQUNBMkJFMkRFRTc1NDc2QTU4ODU1QkZBMDZFOTQ3NUU5NTI4Ci06MTUzODlBMDA3OUIzMEI3NUE3ODI1RjBBQTNBQzRCM0E1MTY0NUYwMENGRTU0MjNDQTcxQQotOjE1MzhBRjAwM0NGNEVGMDJGNzhDQ0Q2RTlBRUI5NEUzQkVGODEzNDFCNDdERDNENEZGNDgKLToxNTM4QzQwMDQ2MTBGMzZEMjUzRDlGNUMzNUFCMTBFMzYzQzA1Nzk3QThFRjkzQjk4RTg3Ci06MTUzOEQ5MDA1MjQ4MkZDNjFCOEMwQkUwQ0Y3RjY5NDBCN0Y0MTJGOTIxNjc5REMwMkRGQQotOjE1MzhFRTAwNkQ1MTdGMDE2MTY4NUY2RjA0RTM0MEJENzA0RjRGNDZERDI5RjBFM0UzRkMKLToxNTM5MDMwMDYzQzY1MUY0ODdGRjE3NjE4RTdFRDY0RTg3N0I1QkNGODEzRjdFQzc4MTYxCi06MTUzOTE4MDBDNjc4M0VGMEE4Q0IzQTUzMzk4MjM0Rjc0RkEzMUQ0NjU2QjYwRkVERTIwOQotOjE1MzkyRDAwQkRBQzQ5QTcxRjU0NTBBRkI1MUFFNzM3RDIyMTREMTAwRkE4M0Q0MERCNkUKLToxNTM5NDIwMDA1MzJERjVCNjZFRTIxQkI0OEI1QzAwQjgzMjZDNjFGREVDMjZEMUZBMUFDCi06MTUzOTU3MDBGQkUxNzBBRTczNTVBNjZCQTkyNDVBNjcyRkQwRjZDOTdDQ0E3MzYyNTRDRAotOjE1Mzk2QzAwODAzODgyMTVDNzVGOURFMTk3NzJGQjJFNERDQjYyNjVBNEVGQUEwM0RFMjQKLToxNTM5ODEwMDIyMDFFQjRDMjNFQUI3QTBERDQxRENDRjM3QzE4RjQ5QzlDMkZFMUEyRjA4Ci06MTUzOTk2MDA5RjM3RUUwMkJBRjE4MDE3MTFGQTY2QkNDQUJFQTM3MjBFN0Q0MzcxNDFDQQotOjE1MzlBQjAwOEI5QjNGM0NDODNGM0RBMEJFRTE3N0YyQUQyREU0OUJCMkYzOEREQkI2NUUKLToxNTM5QzAwMDY3NzcwMEFGMzg1QTg2QjY5NUU0N0U5NjRCMThCNEZFMkU0NTM0QUVBRUYyCi06MTUzOUQ1MDBCRDlGMzc5QjBDQzE0NDNGQTA5NUQ5NEVFNTU3OUJEMzA2Q0E0MzkyOTkxQgotOjE1MzlFQTAwODEzQ0UzRkRCODJFQjlBMzY2ODM0MkJDQUE2RTYzN0ZBRDg5NjdDQ0NGRDAKLToxNTM5RkYwMEY2RjNGMjY3OERBMzQxQUI3RDM0NDI5QTI2MzMzN0RBMDJFOTIzOTA1RjYxCi06MTUzQTE0MDBENzAyRTYwOTQxN0EwQkI2M0Y0QjIzNkM2OEE3NzQxNUNBQTA3NkZCNzI1QgotOjE1M0EyOTAwRDU0NUZCQTNFNkVGOEMxRDM1MzEyNTRBNzkyQUZEMzE3MDQzRkM4M0FCQ0YKLToxNTNBM0UwMEUxMUI4N0JDNEI2MTRFNzBBM0I5RDc4ODlBMEZBNEJCNEQ3RDM0MDY1RkE0Ci06MTUzQTUzMDBEQ0QzOEJDMTdGMTZDMjE1MjgyQkU3QjM2REYxQjIwQ0UxMDA5MDE1RDg5MAotOjE1M0E2ODAwNTE5MzUxRkFDRDhDNzExQkU0MUIwN0Q4RkNEODVFMDE1NzJERjAxNUUwQkIKLToxNTNBN0QwMDhCMzYyRTY1MDhBRjg1RkZENTkwODcxRkJFOEQzMDc3REIwMEZGRTcxNkQxCi06MTUzQTkyMDA2MERCMDY1QzgxNUYzN0Y4RjFDMDZGOUUwMkJGNTBEMEEyNDc3QzhFNEQ5NAotOjE1M0FBNzAwNUZGN0QzMDkxNURBNUQ4NTRGRTY5Nzk3MTREMThCNDM3OEU0NzEwM0Q3NEEKLToxNTNBQkMwMEEwNDJGMkI4MjZFMEZGRTVGNEU1RTgzQzQ4NDQ4QkI5NThDNUQ1OTk1QkNDCi06MTUzQUQxMDAyMkQ4NkY0QTNCNjQyRDRCM0E4MUNEN0EzNTlFNjk5MTA2OEM1MkRBMjM2NgotOjE1M0FFNjAwRTY4NjlDM0MzMjUwNjY3RDdBOENDRTA1NzAzNTA5NzVDNjdFNEIxNEUyQTEKLToxNTNBRkIwMDQ1MzQwNkY5MEQyMTVFRkM0RDA1REVBNjlDQzIzMUFENTk0NUJCRTI4QkRFCi06MTUzQjEwMDBFNURFQTU2Q0QzMkI4MzUzQ0YzMkU2RTRDMzM2MEQ2ODk5OUZEOEZCMDVBRgotOjE1M0IyNTAwOUJDNjM0MTNGRTUxMDc0MzI4QzBEM0ExMkZDNDcxMDVDMzlFQjVGNDhDRUYKLToxNTNCM0EwMDVCMUNGRTA0N0VEOTlGQTBBRURFQjJFNTAyQzAwQTMyMDdDMUVERDA5QjI2Ci06MTUzQjRGMDA0OTIwOTdEQkU5ODI2Q0Y5NzJCNkE5ODNGMjc3RjQ2RDMxMERFNDU1NTFEMAotOjE1M0I2NDAwQzlCQTI4MENGMzJBMEI1RThBMkZFQ0RGN0U2RTQ2MUY1RUMyQkI5NkZDQ0QKLToxNTNCNzkwMEZCMEE3NUVDRkEzMUQ2RjE4MDdBMDMwQzBERDI5NzI2RjRGODhGMTE2MDRFCi06MTUzQjhFMDBCNDRENjRBREY3RUJFMENFQzAzQjA5NkYxNkRFMUNCQzI2QkNEMzc4N0I5OQotOjE1M0JBMzAwNzU4RTBDQUQzMTE5REU1MENFOEFDQjM2MEQ1QTc1QjU3NEU2QzlDRDdFODEKLToxNTNCQjgwMDM5REIyRENGNzE0N0U3QjhFMzczREM4OTM5RUVDQzFDNzc3NjhFREI5Q0Q1Ci06MTUzQkNEMDBFMzY2QkY5QTUzRkVBRjhBNzRGQTAxM0ZERERDNkNGQjAzOTM0ODNCRkZEMQotOjE1M0JFMjAwNjRDMTZFNTMxQ0VBMTYxODM4QUM1NkQyRDk1MDNCMUY5ODczRTNEQ0ZBNjEKLToxNTNCRjcwMDg2RjhCQTQ4RTBEODg0OUVDRTIxOUQ2NkYwMzYwNUVFQjNGMDlFODNGNzk5Ci06MTUzQzBDMDAwMkJDMDJEMEE3MUFERTI2NzhEQkUxRUQ4NjU3ODE3N0MzNEZBQ0I4RUNGNgotOjE1M0MyMTAwRDAwNEUxMkRFM0QwMUZEQzg4MzdCREM4OEQ3ODRCMTRCOTExNkYxQjhCNzcKLToxNTNDMzYwMERDODhCNzc4OTExQkYxMTYyQjcyMjNERUEyNDU2RUM0NUJBOEM4OEQ3OEFDCi06MTUzQzRCMDA5MzhCQ0JGRkQ1OEM1RDQ0MkExRkRDODE4RThDODE2RDFCRjU0QkY5N0JGRAotOjE1M0M2MDAwRDY1REVCOUM2QjI3OUM1RENFM0UwM0UwNTc2NDQ1Rjg5RDFCRTc0RjBDMjkKLToxNTNDNzUwMDQ3REU3MzE0RTQxNzkwOERGNDI3RTYzMTBGRUExQUMyOUNCQTMzQ0QzMUU4Ci06MTUzQzhBMDA4RjAwRkZDMDY3M0E0NTE4MjNDQkU1NDVENzNDMDVFMzYyMkRGQzIzMURGQgotOjE1M0M5RjAwNzk2OTlCN0E5NzE3NzhENjdDNTY3MTA3NkJFQzhDQ0VCNzc4REE0REYwREMKLToxNTNDQjQwMDFGOTk2RkYxQjIzQUQ2QjhEQ0QxMUI5MUQxQ0UyRjhDRjkzQUU0ODEzOEU2Ci06MTUzQ0M5MDA5QkFFODRGMTFCRDI5RkFCNDREOUUxRDExOTNCMEEyMEVGOURBOTFGODBEMAotOjE1M0NERTAwNzE3OTNGQ0EwOEZBRjQwQUY3RjIyNzIwOEVFQ0JERkNGOEU0OEM3M0I4RTgKLToxNTNDRjMwMDk3ODlFMzExQTBEMTUzMUM0Rjg0NzJCN0RBNjdCQzQxREU1OTdFMTZGMkQxCi06MTUzRDA4MDBGMjkwRkMzRTlCOEZENTAyQkM5QjI1MUMwRjUxQkVEOEFFRUY4OEUzQjk5QQotOjE1M0QxRDAwOUU0N0Y1MkREMUZENTQ3RkNGODdEQ0JEOTJEQ0FDMjNDRjZGMDNCNDc5NEYKLToxNTNEMzIwMDU3RUVDNkI1MzA2REUzM0M1Q0NGMUZEMzk5RkVBODFFODBCOTdCMjcxQjkwCi06MTUzRDQ3MDBBNEY4ODM5RTA5ODVBQjY5ODdCMTc1Q0NDMDdCODA3ODkwNUJDOUI2NkY4MwotOjE1M0Q1QzAwNkM1ODdCNkEzRThFNjM3QUJGRTQ0RDUxMUU0NzQ1OTAyMTIxOEQyMDNGNTcKLToxNTNENzEwMEFBRjMzMDE2N0IyQTcxNUQ2RUNDNDAxQjA2ODhFNzQ2Qzk5MjNGMTBENjE3Ci06MTUzRDg2MDA5QzM4NUJCRURCMzc4RjU1M0MwMUY5NjVFNkUxMzhEM0E4Mjc2OTZDNkFDQQotOjE1M0Q5QjAwQTJCMTA5Q0YxMzcyMzUyMTNBOUY3RUY2NjJERTUzOUUxOEU4NzRDNzlBQkEKLToxNTNEQjAwMDU0NTk2RUQwNUY1Q0MxMkRCRjBCRDI0Q0NEQjc2NDIyMDcwRjNFNUI1NzcyCi06MTUzREM1MDA2QjY2RkQ0M0Q2QTdBNzkxNEY2RDI1QkI2Qjk4QkY3NEZBMDMwQTlFRDNEOQotOjE1M0REQTAwNDA5ODdERDFCMUE1M0NDODJBM0NFNDM5MEQ3OUY2ODI0Qzg1RTc0MDc4NjMKLToxNTNERUYwMEQyNjVBNTcxMzg0MDc2MDdBNjJEOUJBMTdDN0NDMjEwNjVFQkZFRDAzQzRBCi06MTUzRTA0MDBFOTQxM0ZBQTA1ODBFN0YzRjI2MzA2QzZBRjA0M0U0QUY3QTU5NzgwRkMyQwotOjE1M0UxOTAwOEM3NzBDMTZERERGNzIxRUYyRjg1MTFDREE1RTFDNkQxNjU4NzY5MUJGRDcKLToxNTNFMkUwMENCQzYzQTQ1NzBFMzM4ODNCODhDOTYzM0NGRUJEMDY2NUY2NTAzOUQwRUYyCi06MTUzRTQzMDBFQzE2NEVGNjExNkZDMjNDRThDQzA0NUJEMkU5QzA3RDFFRTA0NkZENDAxQQotOjE1M0U1ODAwQTA0MzA1REFGOUMwQjZDMUEzREVEOTg1QkNDN0IxRkI1RDVDQTc2MDUxNDQKLToxNTNFNkQwMDlEOUNGMTA2RUI0NUZCQkNDMEVGMTAyRTc3NzYxOEUwMzlBQTUxMURBNDYyCi06MTUzRTgyMDAzMTlDNzM0MEJEQjdDRkQ4OUQ4RDBGNjgyMzFFRTZCOTAxNjA3NUQyN0NFQgotOjE1M0U5NzAwMzgzQUQ4ODk3QkQ0RkY3Q0UwRTdGQjQ1QjlDNTA4OTBBRUE3MEE3RDc2MEEKLToxNTNFQUMwMEI1RTFDMENFQ0JGQjY5MUU4NkZGMzhDNjRCMzY4RUQ2RDg3MDNBN0E2RkJECi06MTUzRUMxMDAzNjJFMDNCOEJGRDYwMjYxQkUzOEJGREM1RjMyRDMzNzI0NEZBMzZBREQ0QwotOjE1M0VENjAwRTM5QUE2RjI4Q0UzRTNDQjU5MjQ4MjdCRDY3OTZCRUYyMTlGRkZGMkYxRTAKLToxNTNFRUIwMDA4RjgyNTc1QkM1QkMwOUJCQjU3RjU5RUJFNTY5MThFQUY1NEVCNjQ1NzM1Ci06MTUzRjAwMDAxN0U5QjRFNkI2QTMwRTg5Qzc1MzNDNkVEQTcwQjZCMjI1MzQyRTRGMEFDQwotOjE1M0YxNTAwQ0NGMzM0RDRGMTY3RDBGNkQ4QTZBRjUyNUUxODVGNDA1RTFGMTlBNzdCNjYKLToxNTNGMkEwMDBCRThGQzQ3NTcwQjlEN0IwMDM5NUNGRjY2NjJBQzEzQ0Y0NDIwN0UxRkU3Ci06MTUzRjNGMDA4ODczNzRBRjlDOEQ3NzlGQ0Y3NDc3NTZBMUJDNkUxRUQzQ0ZERkZDOURGRAotOjE1M0Y1NDAwRTUzRjAzMzdENjk5MzcyNzJFREZERTAwNDc1NjdCQjNEQThGNjgxRUQ2QjIKLToxNTNGNjkwMDc3OUJFRURFNjBENzA0OTU4N0ZEQ0NBMkE3NEMzODc1RjgzNURGQjUwNDNFCi06MTUzRjdFMDBGNzI5MzE1Q0FGQ0I4RTQ1OUNGQUM2QjhEOUVEMTJGNTEyMkVDNkI5NEU0NgotOjE1M0Y5MzAwODREQkMxREI0QkQ5NzFFMjAxNjIxQzc4ODI1RENFQ0YyMDhGNzc1QkE3MEMKLToxNTNGQTgwMDNBRDNCRDNDNTQzRUJCMkQ3NkJGOUVGN0FDMDYzQThBRjFBMkJBQzg4RkEwCi06MTUzRkJEMDBFOUE4N0Y1NkE4MEJDQzYxQUNGQTM3MTVFQTgyNzBGMDVEMUZBNEJBMTAwMQotOjE1M0ZEMjAwOUVFMjYzNkY4OTI3QjdENEE4REFFQjFFNzlBQ0FGNzA3QzE3RTlGQUUxMjcKLToxNTNGRTcwMERDNjg4RkNCRTYxMzgwMDNFMEU5OUU4MkNERjFEQzgwNzZGMkJGMUM3REU4Ci06MTUzRkZDMDBDQjE2QUExM0VBQ0YzQTY5NkY4Mzc0NDhFRjM0QTQyOUU2MzM3N0JGNjk2MAotOjE1NDAxMTAwQjU1NzUxREVBRkNCRjE3MUVENzNEMTg5MzA5NjhENkQ1MURBN0NENDNBNTQKLToxNTQwMjYwMDU3OTY5QjgwRjlDMkEwNDFGNkUxQTcyRDVFRUVGNDE1REUzQzYwNDg5RTgxCi06MTU0MDNCMDAwOUQ1MEIzQ0Y3N0U5ODVCODkyNkYyMTVDREFFRkY5MTk5RkE0M0JCQThFOQotOjE1NDA1MDAwRUEzQTQ2RjVBRjAyQkFEOUY0MkQ4QzIxRTVDOEVGQTgzRjY4QUE2NTA3RTkKLToxNTQwNjUwMERDRUEwRjE3RDExNjRBRTREMEFDRkVGMDlCRUMyMUIyOEY4MjM4NkJCRDEwCi06MTU0MDdBMDBDNTNBRUY4REU1M0NDQzg2M0JBMTJENUJGREE0NkJEMDZBQzcwMEVCNTA5NwotOjE1NDA4RjAwMDJDRjMwRUJGREJCQzlCNkY5QjEzOUY0RDYyRDdBRDcxRjVENkU4MDVCMDkKLToxNTQwQTQwMDhDOEYxN0QxRjU5MDhFNjk2NkU4M0E2RUQ3MkI0NUY1NDI5RUUzRUQxQThDCi06MTU0MEI5MDBBNjNBMkRDQ0YwQ0JCMUVEM0JCNDJDQjQ1RkYwRTMzMzY4NkIzRkE5MEZDMgotOjE1NDBDRTAwNDFGRkIzRUNFQzVCRjVGODAyQjQ0RkE3MkRGQUQ4RDFDRTRBMjgxRjYxOEUKLToxNTQwRTMwMEI5MDBCMDJDODRCNjc3QTg2Qzc2REIzQkY5OUZEMEVFRTQyMkY4RTIwMEFDCi06MTU0MEY4MDA1RkJDMDgzRUQ5ODFDRkUyNEI4NENGQUU0MTgyQUY5ODJGNEM0RjVCN0I1MQotOjE1NDEwRDAwQzhGOEU1RTNENjlEQjM3QTM0QjlCMUIyNjhDQzQ5RkNERTY5NEI4NUI5REMKLToxNTQxMjIwMEFCOEY0NTQ2MDhCNzY4Q0IyMjNEOURBRjI4QjQzRDkwNkQ3RTgxQkFERDdBCi06MTU0MTM3MDA1RkU1QUY5NUUyRDZGQ0RCMTdEREFGM0UwOTY5MDIwRDdDQUZGNzc0NUEwQQotOjE1NDE0QzAwNzE3MUNDQkIwMEMzNzI4Nzc0RTk3NDQ2RTE2MTBFN0UxMDYwOTU3MENDMTMKLToxNTQxNjEwMDgxRjY4M0VCOTI4MjgwNzJBN0E2MDU4MzQ3RkE2NTkwOTExMkY3OEVGNDM3Ci06MTU0MTc2MDA2RTQxRkZENEVGOTA4NzZGMTE0RTFFQTM3REYwNzNGNUMzQ0I1OEVFQThDQwotOjE1NDE4QjAwNkU4NEI4NUVDQ0E3MkUzOThDMzZDMUZDNTU3OEJGMTBGODI3NjEzRUNFOTYKLToxNTQxQTAwMEE0NjE4Mzg3RkM3MDhGOTNEQzUwMkU0RjdCMkFDMzA2QTVDM0IyRjQ2MUU3Ci06MTU0MUI1MDBENDE3NUQ1MDk3RTEzQjA3QUMzNDVCMTIzMEE3Qzc3NTExNjE4REE2RDJDQwotOjE1NDFDQTAwRkRCQ0E4NzM2NENGRTkxMTU2Q0M3RjZCQjdBNjk0RjQ5QzU3MTNGOUJDMzMKLToxNTQxREYwMDZGRTQyMzlBODI3NUU2MjE0RDVERjJDMDNBODQxRkM3NEU4NDA1NjFDM0MyCi06MTU0MUY0MDAzRDg0NzY4MDIxNzBGQTg4NTIxNTg3QkE5RUY4OEFFQTYzMUFGMEYwOEM1MQotOjE1NDIwOTAwRjIyRDFDMTdFQzNDRDFGRTNDQzhDMDNFNENFN0Q0N0QwOEYyNEZFRDNDNUYKLToxNTQyMUUwMDRDRjdGRTYyN0JBMUI4QjE0MzVCODRFREJGNTM0RDg0MERFQTg0NzVDMUMwCi06MTU0MjMzMDA3QjQxOTEyRTg4MDdBNjFGRDMxMDlGNkRBODM2MDBFMTBFMkVDRTE2RjBFOQotOjE1NDI0ODAwNjA5NTU1QzAwM0FFQkZFNjJDM0MwNEJGQ0Y3N0E2N0E3MEFGNzk0MjFCN0IKLToxNTQyNUQwMDAwRkYxMUVDMkY4MDEzRjRDM0I1MEQxQzgzMkQ3ODhGMDEwRTBFMjg5ODY1Ci06MTU0MjcyMDA3RjQ5Q0Y2QkVBNjZDMkMzMDFDNTBCRjU0MzFDNDg3ODJFMDVGNzRFRjAxMwotOjE1NDI4NzAwQ0UwRDI4MEI2RERBODZBMEZDQkFFMEI5N0VDNzVFQUQ2NURGMDRFNkZGREIKLToxNTQyOUMwMEFGMzBCNkEzMjZBNUJDQ0FDRTY5OEI0MkVDRDM4RDMyRkY2MUM3OUU2MkRCCi06MTU0MkIxMDBFRTkzNjRBRjk2RUNDRTc0RDMxQUMxOTI1MUVCNkM2MDhBRDI0NUNENkQ3RAotOjE1NDJDNjAwMUFCNDZEMEY3QzcxMUZDREM4QkQzNkQzQ0VGMTNDMThBRTU1NjExQjZEMzMKLToxNTQyREIwMEMxQjkzNEVBMUU4NkRBMzVGNjFBRTlCNThEQzI5ODlCNEQzNEI5N0IzOTY1Ci06MTU0MkYwMDAyMUEyRjI4OUIwQkEwNzYwQUQ1NzI2RjE5RTM4NUQ5Nzc3NzdEMUZDMTRGNgotOjE1NDMwNTAwRTI0OEMwM0I0NEY5NjM5RDgyRkNEOTRFNDlGRUM0NzIzRTI2RTM3ODlEQzMKLToxNTQzMUEwMDdEMEVFNDYxRkNGNkUzNUMyQUY2MjhEOUJDMEQ3NEM4ODY5NTNGQ0E4Q0I3Ci06MTU0MzJGMDA2M0Q5MTA4NEI1NDBGQTI2NDhERjA4RTlEMUFGNTZGRTQ0QTc5MzA3QjQ2RgotOjE1NDM0NDAwQTc0RTExQzIwNTA4N0Y2RUM1NjcyOTNGOTFFNjY2QUY2QzcxRTI2Q0M0OTMKLToxNTQzNTkwMDcyMDAyNjdGQzdCNDk1Qjc2RUMxOEQzODhBNjBERjAwMzg1QkU0NjdCQjFCCi06MTU0MzZFMDBGODhFOTAxMTgzNzA1QzJGRTg4MkY5MzQ5NzBBQUI1MjAyRjdEMkFDRjhGMQotOjE1NDM4MzAwOTgxRkI0ODEwMDBGRjk2MDNDRDJFNzdFMERDRjAxNUFGNzY5NjAxRjZFREEKLToxNTQzOTgwMDY3RjZGQzFBREJCQzM0NkU5N0IzQUYxRjZEMzI1NEQzRDk3RENCMEZFNzZGCi06MTU0M0FEMDA0Q0U4ODc2RDIyNjBFOUIwNUYzMjVGRTIzODhCOUUwNTdGQzhCRkQ2OTkwQgotOjE1NDNDMjAwRkY5MDFFMUY5NDRGNzcwNDY1MENGM0I1NEJFNzVDRDZEOUMxN0QzQTg2NjgKLToxNTQzRDcwMDIxRkYwMTVFNkI5NTA1NzEwMkI5QUZBOUZFRDM1RjUzNTA1RUY1NzcxRDBGCi06MTU0M0VDMDBCMkVFRTU4MDMwM0ZDRUZERDk2MTFDREZCNThGQkY1MEMyNkFCMzg3REJCNAotOjE1NDQwMTAwMzZDMkI4MjdEQUYzMEM0QjY3RDA5MjczRDA2NkJDOTAzOEIwQjQwQTY0RTMKLToxNTQ0MTYwMDRGM0ZFNjFCREE2N0MxNTFFMDkzMjk4MkNGMUY0RDQ2QzgzRTA0QjgzMTFECi06MTU0NDJCMDBDRkVBRTg3ODVCNkQ1MTlFODVCOTBCRjA1QzRBNkZGM0NGREZEOEVEMTlERgotOjE1NDQ0MDAwRUI4MTczM0I4MENERjcxQ0FERTkzNENFQTQyOTNFOEY0OEY3NkRERkE3ODkKLToxNTQ0NTUwMEZERjYzMkU5RjZDRjQ5MDdFRDVEQkZEQzdBNTJENERDQUJGREZCNjVEMkY0Ci06MTU0NDZBMDBERkY1MkVEMkJGN0M5OTc0OTE3Nzg0NzdBRjc2RUUzMkU5REU2MEVGNUM2NwotOjE1NDQ3RjAwREVGNDlCNzNGNkQzNzA3REE3QjhGRDAxQURBNjVGOUJCREJFMzEzNzNDQzkKLToxNTQ0OTQwMEYxRkFEQjg3NEZCRjUzRjhGRjc2RkU3M0MyQzVFMkY2RkY3NkVCMDNGRkM2Ci06MTU0NEE5MDAxRkZFNDc4NTRCNDVGOEY3Q0RFNTRCRkY2N0UwQjdEQjQ3RUNCREE1Qzc2NQotOjE1NDRCRTAwRkVCNTgwOTc0OTE2RkIyNEQ5Qjg2OUVBMUY5NEUyQjdBRDgyQUUyODdBRjIKLToxNTQ0RDMwMDZGNTczNTA4QzdCQjU2QzVFQkI2QUI3NEQ2MDc2NTZFRUYwNjc1REVFQTkyCi06MTU0NEU4MDBFREFBMkNERkE5Q0RCQjZFNDBGNUY3Njg4QUM4MzVBOEZFQ0EwNjM1MDlBRgotOjE1NDRGRDAwNzI4QkREQTdENzVEODBCMTU5RjIzNkE5OThERjFGOUJEN0RFRUIzNTY1MkYKLToxNTQ1MTIwMDEyNzVGRjdBNzBFRTEyRDc1MDIzODk5NzRCN0EzRjA3M0MzOTIwMzZBODNDCi06MTU0NTI3MDBFNTNEMkRFQUMzRDczNzJCRjUzRENENEE1MEJDNEQxRDJDRjk4MDgyRjY2RQotOjE1NDUzQzAwMjAxN0YxNzE2N0FFRTJDN0Y4M0M3N0E1NEE2QjBGQUIwNzg4NzcyMDBGMUYKLToxNTQ1NTEwMEE5QUY0QzJBQThERkU1ODRGQjI4QkM1OTc1N0IxMzI0REZENURGOTQ1MEMxCi06MTU0NTY2MDA2OTdGQzlCRTJGN0MyRTBDQUI2QzE4MkEwMDg2QkQwMDQzQTBBODdDMkMxRAotOjE1NDU3QjAwQjcwRTYwQzA3ODk0MkZFNDVGNUNGNjA1M0JERkU5QTI3Q0YzRjk2N0YyMEIKLToxNTQ1OTAwMDIyOUUxNTBGQjNERUI1Nzg0NzNBRTQ5RDI4ODk2Qjg4OEYzQ0IzRjJCQUE0Ci06MTU0NUE1MDA5QUIxMDU1NTgwMUIxMUNBRjRBQzY5MDYxQzM1Mjg4QkM0MTZCNUY2NDMwQgotOjE1NDVCQTAwN0NBRjlCMERGNEQ1N0Y5RUVGREQzQjNGNDkzNEMwNzU5MTEwQzA4MTdCREUKLToxNTQ1Q0YwMDcwNTc5MUREOTAxOUQ4MTEyNjkyOTM1OEUyMUVBQTFCQzA3NEQyODZFOTMzCi06MTU0NUU0MDAyOEQ2NURCQzUxQURERkI5NTZFNTJBMUREOEYyMTcxREQ4M0EwMUI2NkE2MgotOjE1NDVGOTAwQjE4MUZDMTMyMDIwM0FGNEYyNTRCNkE4MjJDMUI0NUQ1OTU0OTk1NDc3NTUKLToxNTQ2MEUwMDZEREQ1MTY4MEI4OEU3M0ZFNEYzMzYwQzhDRUE4OTM2OTVBQ0ZERTNFOTgzCi06MTU0NjIzMDA3QkIwREM5QzBEMDc1NzkzQzJCQkE3ODRGOTlBMDU4Mzc3NjdBM0VBODUyRQotOjE1NDYzODAwRjJCMDZFQkRCNjJFM0YyQUJEMTE1RUNBNjZGMDUyMEY2REE3NjI0RDk3NEMKLToxNTQ2NEQwMDFBRTg4OTEwM0NEQjRBQjYyQkU1ODA5NzBBMzFBOTk2QjI2NERGMEVCQjQ3Ci06MTU0NjYyMDA2RDJFQTZCQUNGOTQ3QjBFQ0FEMjIxQ0MwQkY4MDJCQUZCMUMxODkwRjY1RgotOjE1NDY3NzAwRjVERDM3MkEyODBCRDVGN0RDQThDQ0E1M0Y3NDIyNkYzOUVEMUJDQ0Y0QzIKLToxNTQ2OEMwMEE3RkFBOTNEMTQ4RjNCRDVBMjA2NkU4QUFCM0NCQjUzOUQwNzcxMUZFNjMwCi06MTU0NkExMDA1OEQwNkRGRjFCRjA1RkQxMDM3MDQyN0JBOUE4OENBOERBRTMxRENBREVGRQotOjE1NDZCNjAwMTMxRDRBQzVBOTM1NkE0MDAzQkY5REFCNTVFRDIzMzc0MERCQkY0MUMxQTYKLToxNTQ2Q0IwMDM2MTAwMDlDRDZBRkIxNzBDMUM3Qjk1RTk5NkRBMEI2MEQ3MjlBREZDRDkyCi06MTU0NkUwMDBEREEyOEFGMTEyQkNGN0M0RUZDMUJEOUFCQUVFRkU3OURDQURBQUM4QUY3MgotOjE1NDZGNTAwNTJDNTk1NTBERTc1NzdBOEUyRUExQkQ0RTE5MjU1NEEwNEQ3MDE1NkNFNzUKLToxNTQ3MEEwMEM0MkYwQjVBRTc2NjI4N0UzMjZDQzU3RkYyMzNBQUY4NDQ4NzNBQkMzNUIwCi06MTU0NzFGMDBBQ0I4NjFEQ0Y1M0U3RTlCNTJGRkExOTI1RUI0OEQyQzI0QzI3RDlFNkNEQwotOjE1NDczNDAwNDdERkZENjg0RjRBMEJBQkY1QTc2RTUxQjk5MzFEQUEwNjcxMzk2MTg2OTEKLToxNTQ3NDkwMDE2OUJCMDhGMDdFOTlDQ0QzQUI0QTUyMjBDNDBCQUUzMUQ3RDM0RDc2QjY0Ci06MTU0NzVFMDA2N0JEQTVERTUwNUY5OUI3QkRBRjNFQjU1NkQ5MDZCQzQxMDZGRjIxRjhGMQotOjE1NDc3MzAwN0UxQTc5Q0U0RkQ2QUJFMjUwODc4QTcyQjUyQ0RGOEFCMjlEMjAyNjNGQUYKLToxNTQ3ODgwMEEzNzI2QkVFNTQyOUVDQzkwRTA4MEZBQkMzODAzM0E0M0ZCNjcxOUM5M0ZECi06MTU0NzlEMDA5NEZGMDNENzVCN0YwQTcwQTgwREE4ODE1MzlGNTEyQjRFNkVBNzM2QjBCMQotOjE1NDdCMjAwMEJEQUMwM0NBMDdENzk1NEVCMkJFNjRCNDg3N0E0MURFOTI4REIzNEM1N0IKLToxNTQ3QzcwMDM2NzkxREMwRDI4QkYwMDM5RUYxNkVCRjFFRjg0Rjk2RENBNUNDODM3MjA4Ci06MTU0N0RDMDAxMEZFQzFBREQ2RkZBQThCRjkwMEYyMjVDNzhENzE2MTZDNThCNzI3OEZEQgotOjE1NDdGMTAwNkIzODU2REIzNjYwNkE4NUY4NDNCRTA3NzNBRTA1NEVCQkJBMUJFMjkwRTQKLToxNTQ4MDYwMDNFMzlDMDcwRDcxQ0ZENEFFRkUzQjU0QUZEQzk2QUMwNkRCNTdBQjk3NjMwCi06MTU0ODFCMDBGNDEyOUI2OTQ3QkY2NDU2M0I0MjFBOTQ0MzNCMEE4QTc3MTE1RTFFQjZDNwotOjE1NDgzMDAwREIxMkI2QTM4MDA2N0U3M0RBRDJGNkM0OUZBRjJGMEY2RTAwRkFDNEZCOUQKLToxNTQ4NDUwMEI3QjM1QkQ3Q0YwQkM2RkEzOUYxMEVENTcxNTc0NDZGNUQ4Rjc0OUEzNzZGCi06MTU0ODVBMDBCMEI2OEY5REU4RUQ3M0JFRjUyRkJCRTg3RTlERjJDNERBQkU4QTZDNkYxQwotOjE1NDg2RjAwMUZFNzAxOUE1RkQ5QTBCOTgxMEUxNzgxRjY4OEJGQUI4OTE2QUVERTBBQkUKLToxNTQ4ODQwMDZEMEJEMEUxMEVBMEMzMEVFMkU5QzVCNDI4QjE2OTkxQjRFRUY1RjE3MzY1Ci06MTU0ODk5MDBDMjk1NTA3NjZDREQxNEQxMDVEQjRENkNEREQxMzk3NDAxOUFGODZFQjIxOAotOjE1NDhBRTAwRTkwMjdDRDdCN0I2ODgyRUVGMkJBMkNCQUJBNDMzMzlEM0I3Qjc0MkJGMTAKLToxNTQ4QzMwMDFFMjlBMjEzRDk4Nzg2MzY4MEZFOUI2RDVBOUQwNjNBMzlCNEQ5RjAxRTM3Ci06MTU0OEQ4MDBFOTcxQTY4ODFFM0ZCMkU5ODE3RDNBNjBEM0UyMTIzQTAwNkQ4QTY5NTEwMQotOjE1NDhFRDAwMTZGREQ0RkFEMkU4REFGNUVDNkVENjJCNjYzRkQ1Mzc0RkRBRDA1N0M2MkEKLToxNTQ5MDIwMEZFN0E3RDc5RTI2RkZBQzRFQ0FERTRBRUZGM0NGNTU3OUZDOEMwMURCRDcwCi06MTU0OTE3MDA5M0YwQ0U2RjZFRDA1Q0MwN0IyRjk2QzVCNDcyMDdFRkQwNEYyQkM0QUQ5NQotOjE1NDkyQzAwQzBGRkZFNDJBRDU4NzNFRjJDQkM5NzVGMEVFRkE5QzU0OEYzMjJCQ0M3RTcKLToxNTQ5NDEwMDA5RUY0RTdEOEJGMTBGM0NERjc3OUQ4RDdGNUMxM0MxN0VFMkUwREY1NzMyCi06MTU0OTU2MDA4NDdGMTdBRDZENThGODFEQjFGMTVCODk3QzBBQzJGMERFRjBFMjNFRTAxRgotOjE1NDk2QjAwQTQ3Rjg5QzYwNThCNjY5ODhFRUNEM0RCNzRCMDcwMUU5OTA1Q0I5NzAxNUMKLToxNTQ5ODAwMENGNjI4NkVCN0QxMkJFNDlFMDNEQTU5MDA3REU5RkJDRjc2M0I3QTlGNUE5Ci06MTU0OTk1MDAzRDVEOEE1NEIyNTQyOTJCQjk1NkMxMzYyQzAyRUY2MTI3M0FGQUY2RkU2OAotOjE1NDlBQTAwMEI4NDlENUFBM0Y4NEEzRUEyNzg0QTNFNkE4NTcxQUJGQUQ4RjUzN0Y0QjAKLToxNTQ5QkYwMDZEOEJCQjdBMTFBRUM1RjY5REYyRDA0NkJDQTVCMjhCQzY0OEY0NDc3QjM1Ci06MTU0OUQ0MDAxOENFMUMwNUNCNDdCQjkxMjVDRUQ4NkQ4RjFGMTgwRjc1QTUxMUFFRTc5QwotOjE1NDlFOTAwRjM3OTNGQzQyOUY0RkQyN0ExRUZFM0Q4NzUwNkE2OTNCODVFODJGMjAxN0YKLToxNTQ5RkUwMDhDNzVGRTI3RUNGOERGODJGRkZBOTc3OUZDRkE4RTUwNUUyOTc1OTc2QjVFCi06MTU0QTEzMDBGQzM2RDREMzYyOUM3NTk3Mjk4QzJDNzk1Rjc0RkM3NjgzNjlBNEYzODUwNAotOjEwNEEyODAwRkVGRTk5RjVENkYyRkYwNkUyRTVEMUE0QTg5QzAwMDBBNwotOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3NiYTIwMGVfZWNkLmRhdGEgYi9kcml2ZXJzL2F0bS9zYmEyMDBlX2VjZC5kYXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDk3ZTc0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvYXRtL3NiYTIwMGVfZWNkLmRhdGEKKysrIC9kZXYvbnVsbApAQCAtMSw5MjggKzAsMCBAQAotOjE1MDAwMDAwMUY4QjA4MDhBQzVBMTAzODAyMDM3MzYyNjEzMjMwMzA2NTVGNjU2MzY0MjYKLToxNTAwMTUwMDJFNjI2OTZFMzI3RDAwREMzQTBENkMxNEQ3OTk2RkQ3QjNGNUFFNzFDQ0Q0Ci06MTUwMDJBMDA3ODU5MkYzRjhERDcwRjBBQTk0OUU4REQwMjJFMDdGNjFBMTY0NEFBNDBDMwotOjE1MDAzRjAwMDEyRDg4QTQzM0VFNTIyNjg4NDRFODkyNEI1NzE3OTIyMjlEMUIwRjhFQjEKLToxNTAwNTQwMDAxM0I3REQwQzc2MDg4MTNFMTY0MEQ1RTU4NTI5QzZDOTA5RDEwMURFNEFDCi06MTUwMDY5MDAxNjM1Nzc0OUE0RTRCQThBNzIyNzU0MURDOUFBMTcyOTVDNEEyRjc2NDU1RQotOjE1MDA3RTAwMjU5NDM4RUM3RERGOUIxOUVGNzgzMUM0QTE1MjRGNzcyQjhEREY5QkY3NDIKLToxNTAwOTMwMEJFRjdGREJGRUZGQkRFMUIzRkZDRDNCRjdGODhCODA4ODk2RTI0ODRGRUQzCi06MTUwMEE4MDA4ODkwODQ0QTg4MEVGRDFDQjRCQkEwMERCNzEwMTI4Mzk2NDM5QjgwNzZDQwotOjE1MDBCRDAwMThEQTRFNjhCNTFGQzMwMzZEMTZEQTFEQjgzNjRFODgwMjZERTkyRkJBNkQKLToxNTAwRDIwMDFFRkU0ODY0NTJCRjdDNjNEOTBENjNBRTgyNUUwODYzRkI1NEUxQTk4NEMyCi06MTUwMEU3MDA3ODJGOTk5RjZBQjU5RjlFM0M0OUIxOUQ1MjI2OTBEOEVEOUZGQjczN0Q5RgotOjE1MDBGQzAwRkNEMzhGNDVEQjY2RjM1M0QyQjZBRDE0MzNBRUYyRjJGMjA5RDc3RjQ5MUQKLToxNTAxMTEwMEJFMzRFMTg3ODcyNzVDM0ZGNTI2NzhFREYxMzY5M0IyMEI3RUU0N0ZFMTdECi06MTUwMTI2MDBFNzFBMjBCQjQ1RkI0QUE5NUQ1RTI5REM3MkREOTgzQzg1ODlFNTJCNEM2OAotOjE1MDEzQjAwOTI3RTc5NTlCOUE5ODdBN0RBNkU0RENGMjQ4NDJENzc4RTk3Q0M3RjYzQkEKLToxNTAxNTAwMEY5MEI2RDZERThCRUFFRUJGOTdDMjk5RDQ5Qzk1OTU2QTQzRjdBNUJGNEQ1Ci06MTUwMTY1MDA1RjdDNTEyQUExRkJCN0Q4N0VGNEFGQkY5OTkwNUU3OTkxOUU5N0ZDREY4MwotOjE1MDE3QTAwRkZCOTNDNzU5RTVCQ0RGM0Y0OERFRkRBMjlFODlDMkE4RUExMDlEQzBFMEIKLToxNTAxOEYwMDVGRjhGRkZFMkIzODdFMjRBQ0IzRkM2NzY1QTQzMkJCNkY5MTFDRjRDNjc0Ci06MTUwMUE0MDBDMTk3N0NGQTcyRjIzMDgwMzExMjFBOEVFM0JDM0UwMjZGRTE0RTk2RkY2NwotOjE1MDFCOTAwMDI1QUY5QUEyMTc5M0JENDZCNUIzQjFBNzA4RUM4QTQyOUZGMUNGMTU1N0EKLToxNTAxQ0UwMDNFNEY3QzgxRkRDNDk3NzgwMkZBNURDNDQ3QzI2MThFRUJFQTkzMkVDMDU3Ci06MTUwMUUzMDA0QkI3OTAwMEMwMTIxMzBGODczQzUyRURFQTUwNjU3REExNEFCODZCQUZBNgotOjE1MDFGODAwMTRENEI3NUM1QzQ2N0MxRDRGMTI2RjIwQjgyMzFFMjY5NzU5RUY5RUZFMzIKLToxNTAyMEQwMDlEODQ2RjYxMjQ5Q0UxRkEwMzg0NEMwQjZBNzE2RkQ1MkYyMEVCOUM2NTE4Ci06MTUwMjIyMDAzNUMxNDQ3QzdBRUI2OTE2RjU5MjY4NDA0RkE5MjQ5QzM0MTA4NkM0RjZDMgotOjE1MDIzNzAwMTgyNDc3QUNDNzlGRTMwMDU3MEZGQzg3RTNGQkMzQTQ2NTdBRUI2QTE2OTIKLToxNTAyNEMwMDg1RjRENEJFN0ZCMzRBRTRGNUFDN0Q3REIzRkEzQzIxMzU0NkQyREQwNDVGCi06MTUwMjYxMDA3QzMyQzgxRjcyMzBFRjZBOUUyMkI3QThCODFFRTcxMTZFREZDQ0NCOEE5RAotOjE1MDI3NjAwNjdFNTQ5NzUxRkY1QjQ5MERDNkM1NjQxNDgzMDEwODQ0QzI2RUY2NkJFQTEKLToxNTAyOEIwMDYwNjdGQ0MzQjlDNEU3MjFGM0Q1M0RDM0VFMTY2OUY3MjY1NUJBQjA0Q0Y2Ci06MTUwMkEwMDA5NUI2QUM2NTRCMDA4RUYwM0VGRDZFQkE2NTMxRUEwOEYxMTNGOTU4QTYzRQotOjE1MDJCNTAwRjhGNEVCMDE1ODUzQjk2NkJFN0FCOTUwQThGRUIwNEQ4REI0RkY5MzNCQTAKLToxNTAyQ0EwMDAyMTI1NEJDMjQ3OERBNzVEQjNDNDU2RkMyRDMwNkU0Mjk3NzVDNUYyNTQ2Ci06MTUwMkRGMDA3OEEyMDJGRkI3NjI2MTE1RjlEOUFCOTVCNTYwOEJGQzYwMUIwNERENTQwMgotOjE1MDJGNDAwMDU3NUMwRjkwQkExQzM5REQ1NjQwQTkxRkJGNERDOEEyRDBERTc4MEQ3MTUKLToxNTAzMDkwMDFEQzBBQjNEMUZBQjI2RTNDMzQ4Nzg5OEJEMDdEQTBGMDUzOTY0RkM2MTgwCi06MTUwMzFFMDBCMDlGNkUyQzg1RjRFRkREQzA1NEIyQjMzRjkzOTc4ODg2RUQzMEI0OTQ0NwotOjE1MDMzMzAwNzY4ODc5RTA4NUNBNzIzQkNFRjc1Q0MzNzkxOEFCMTc2M0JCNzE4QzhGODEKLToxNTAzNDgwMEUyMTg5NzNBNTAzRjg4N0Y0MUNCNzhGQ0Y1NDVGQzAyNTZBQ0IzRThEQTEwCi06MTUwMzVEMDAzNDA1MkQ4QkVFODQzNDFERjhEOTI0RjE4NzRERkM2MkJEQzA2NUQxQjQ1OAotOjE1MDM3MjAwNjkzOTY1NzVFMkJGNTI4MjNGNUNDNDdGMDNBRTlCRjE3RjJCRkQyODNGNUMKLToxNTAzODcwMEJFN0RGRTFCQzQxODYzQzM2MkFDNDMyNUIxRkU4QzNEM0VGNjZFRDMxMjk2Ci06MTUwMzlDMDBGNkJFMzlGRjAyNTcyODFEQUY2OUVEMTdGODg4M0MyRjgzMzg2QTVBMTkyMwotOjE1MDNCMTAwMUJCNUU0MThDMzBCNzNFM0U0OEFGNTczNTM5RTlCRjM3RjJCRkNENzZFMDcKLToxNTAzQzYwMDgyN0ZDQ0VFQjFGRTFFMUI3RjgzOEQ5RkE0NTkyOUFFNTIxQzM4N0ZDRDhCCi06MTUwM0RCMDBFMTQzQjYyQzAyQTczQ0Q0MzNBMTBDRTNGNjQ3QTdCOTFGQUFGQTU1RDIwNAotOjE1MDNGMDAwMzBDRkI0QUQwNkI2ODVGRTBEQkVEOTkwMzI3REQzODkwM0VDNUJCOUE1NzIKLToxNTA0MDUwMDY4NUY2RjU1ODdFMDlCMzQ3NEIwQUM0NEEyMTA1Qjc4NEQyQ0FEMUVDRTc2Ci06MTUwNDFBMDBCODVCODBCRTUxMkQ3N0E5NTcwQTg1QTBEMzNGRDZGRDk5RUIzQkM0RkFGNgotOjE1MDQyRjAwQ0UwOUQ3OEZBRDA1M0M1NzcxNURDQ0UxMkIxOEEyMzUyRjRCRTRERjNFMjYKLToxNTA0NDQwMEEzRTczRjM1NjJGOTY3MEQ3RkVFQUMzQUZEMDM0RDIxQjE0QkFDNEVCOTY2Ci06MTUwNDU5MDA0NzVENEM3RkM1RjZEQzNCOTAyMEYyQkY4MUVGMjY3OTNGQzRGNTYwNTAzNQotOjE1MDQ2RTAwODk2MzFFRTBEMDBGQzQ5MjIyREVFMzc4OEQzRTAwRkRCNDgxRTMyNEI3NDQKLToxNTA0ODMwMEE4NDcwRUVFOEE5M0RDN0IxMEIzNjZDNEY3Q0REQ0ExNzhFOUUzQUNGREVBCi06MTUwNDk4MDBGRDk1NkEyN0M0QjdGNkY3RDc4MzdERTY4ODc4Nzk4NzE1MkZCRjA1MzJDRAotOjE1MDRBRDAwQzg3NTk4QUI5MkJDMUJDRjI2RTEzNEU3RDA1NjY5MkVFMDdGM0VEMENGNjcKLToxNTA0QzIwMDMzQ0M5NkQyQ0FCNTZBQTEyQ0NCMjRENzJBNTVFQUREQzhCQUM5NDlDNUEzCi06MTUwNEQ3MDBBNTBEQjBFRUIyRTMwQUMyOEM0MjFBM0Q0QzVFNTZDMDVFMENBQjg4NkU2RgotOjE1MDRFQzAwRjIzQThDNjc3MTJERjRGRjQ1MTEzQzAyREU2OEZFNkQwM0U0MzA5MDk2QzkKLToxNTA1MDEwMERCNDVBQUJCMjAzNzQ5RDFCQkQ1QkI4MEE3NjI5Q0JGMTdGODZDNjcwMURECi06MTUwNTE2MDBFMDZENjc4OEY4QkM0MEZCOTMzNjc3QzRCQkUxMzU5NTBDRkVEQ0MwOUNGOQotOjE1MDUyQjAwODdGQzcyOEI1RkM0NTVGNTUxNUVFRDJFM0JBOUEwNUVENjU1OTIxODE5MzQKLToxNTA1NDAwMDFDMzBCMjQ0QzBFOTE4RTdCQjUxOUU3MDVBQzRGQzJBNDJGQzI0OTZEMjk0Ci06MTUwNTU1MDA0N0I3RjYzNTg3MzQ1N0EzNzdDMzA5RjBCMzAxMDZGMDg5REQzRjlDMEY4NgotOjE1MDU2QTAwMzY0RkYxNkI4NTQyNEQ5REYyNkIzNTlBRkY5NDU3Qjk0RUE4QjFGQ0RCOUQKLToxNTA1N0YwMDlDODQzMjcxNzdFNTc5MTVFMTgzNzlDODNEMjAyQkQyMzg1QTA2NzJDQkU2Ci06MTUwNTk0MDAwMzQ2MTA1Mzc0MkM2M0NFQzk3RjMyQzBGNjAxRUY4Njk3RDU1OTA3OEVENQotOjE1MDVBOTAwQzNCRTREMDk3RUMwRUUxOUIwQkJEODEzNkJFOTlBODgyOUYzQTIxRUNGQUEKLToxNTA1QkUwMENBRTNBQUIwMTNFNjM0Q0I0NjAxODc4RDFFQURCNTcyNUEwMjcyMUFEQTFBCi06MTUwNUQzMDAwMDc0ODI3NkM4QTI3RkExNUY4MDBFOTAxNkQ5NTlENDBGRUFFNTk3NURCMgotOjE1MDVFODAwREYwNzlEODQ0RDlENTgzQ0Q4M0EwOTAwMkU4NzRFQUE4NTRFNTZBQzVGN0QKLToxNTA1RkQwMDJDRjA5MDBDMEJCNjBBRjlDMDBGRjc2NEFDMDdGNjc2MTI2Qjk4NENCMDEzCi06MTUwNjEyMDA1NUU4MkJGQTNDRDgwRkQ2MTkxNTk4MzcwNzFGNjcxRjQyM0RGNTQ3Q0M0OAotOjE1MDYyNzAwOUQ5QUJCQjk0RUY5NEZENUVERkVEOTkyMEQ5QUJCMjk0OEREQ0RFM0VEMDUKLToxNTA2M0MwMDdCM0ZFNEYxQUNFMjAxREQ5NkNBOENGMkExREMxRUIyMDA2QUEzNjc5ODc3Ci06MTUwNjUxMDAwQ0IyQ0FCRDlCRDg4RTNCODk2RkFGQjZCMUM5QkJFMTA1RjA3OTZFRDZFRQotOjE1MDY2NjAwMTRFMUE1QUNCMDAyRkQ4MDMyMjFFM0Q1MkIyNkNGQkM1RjdGODBERUJGMjgKLToxNTA2N0IwMDk4ODQ5MkYxNUFCMjQ3MEQ4QzMyQzEyRkU5RUY2M0RERDk4NTYwQUY4NUIzCi06MTUwNjkwMDAwNkVDQ0Y4Q0Y1RjRFMDVFMDUzRDBBRDk0ODZDRDBDMEY1MDFEOEMzNTM5NAotOjE1MDZBNTAwMUM3MkJEMDU3NTRBQkE2RDYzNjQ1MTlCMjlEQkRENzUzRjVCNDg1REM0RkUKLToxNTA2QkEwMDZCQ0FGQTZCRjUzQTc5RjIxNkIyRTY0MUQ2OTM5Mzk2QjVGNURCQzQ3N0I2Ci06MTUwNkNGMDA0Q0M4RkEzMEM4QkFDMzk0MzUwNDdCQkJFMUY3QTY3Q0IxRTNGQTUzMjA5NQotOjE1MDZFNDAwNUY2REY2M0JFQUQ0NDg5MzkwQUQyQzM2NDMwREU5QTFFNjZGNjM1RDEyQ0IKLToxNTA2RjkwMDNCMjA2MjgwOTZGRkRDMzhFQjI1NTNBMEU1QjgxRjg1QUU1MDA3NjQ0OTEwCi06MTUwNzBFMDBEMTJGRTRCRThDRjU4MDFFRkE4QTdBQzhCRDZBMjA5RDUyM0RGNDgwMUU0QQotOjE1MDcyMzAwNzREMDQzRDBEMjQzMjVFODAxNjkwNzRCNjg4MzFGNEUxOTRGRjM4NDcyRTMKLToxNTA3MzgwMEMwOTcyQUVFRDE4OUY3RTYzNDZCNkY0NkM2RTZEMUM3ODAyN0VDODc2MEY0Ci06MTUwNzREMDBFRjNBRjcyQkVFNTVDMjUzRkFCNTE1MUVDMTBCQzQxN0Q4QUYyNzYxQkY5RAotOjE1MDc2MjAwN0VDQUREOTU0M0FBNkJFNjU5RDVENTM1MjRGNkVDMTFDNzlFRUQyOTdCNDUKLToxNTA3NzcwMEM1REVCMzdFOUMzRjUyRENCMzM1RThGRkU4RDdDRTdEM0IwQkUwNTA0NkZCCi06MTUwNzhDMDBCRjQzNDZBRDlDNEM3MUVFRTdCMUZDOTQzQkNERkRDMUNCRjFFQTQ2QjE5MQotOjE1MDdBMTAwNTc4OEY0OEFENDUyQkRBQzUzRjRBQjVERUI0NUJDOEUwNjQ4NkM4RUYwNTYKLToxNTA3QjYwMDVGNkVFNjVFQzg4NTcyRjIwQTkzRDZBQ0M1OUM5NzQ5NDBDRTJCNEM0RDNBCi06MTUwN0NCMDBCMDVFRkRCOEMyNjYyNjk0QzA2RTg4MEY3N0E0NTQxRkZBNEZDQ0IwRkM2MAotOjE1MDdFMDAwODdDNzY3MUQ5MzFBQkQ1NUFCNjFCRkM2NTgxQkQxMThGQTRBREEwNTM1MkUKLToxNTA3RjUwMDQxNTg2MTg4QTMyMkYyMENEM0EwMzU2ODU5OEIxRjdDRUIwNEFDRjM2NjI3Ci06MTUwODBBMDA4RkE5MDExREYzRkZFRjBENTFDQkUwMUVGODRCQjZEQjNFNjc2NEIwOUI1MwotOjE1MDgxRjAwRTlFMDRCQzg5NzczRkU1MUYwQUQxNTI0QzFCNkU5ODc5NjkzRjA2NUEzQjEKLToxNTA4MzQwMDFFNjU4MTM5NkZCNjFEQ0U0QTU4NUY3QzQzNUEwRjlBQjRCMjc4Q0U3MzgwCi06MTUwODQ5MDBDQ0FENEE4RTM2MjFGRTM0QjkzNTdFNUQzM0Q3RTc0QkQ2MzcyNjVCQzU2OAotOjE1MDg1RTAwRkFBNTEzQUNBN0RBNDkyNjc3NzU4QjFDNkRDRjQ3MTEwRkNDREQ5NThDMzcKLToxNTA4NzMwMDM0QTFGRUVEQjUwMUZEOTg0QTYxQ0U4QkYwQjFCOTgwM0I5NTA5MjVDMUM4Ci06MTUwODg4MDBBNjE2NEM4MzA1MjM4QkY1QTlDQzY0N0MyMkYwQTZENDhDRjExRjdEQUM4MgotOjE1MDg5RDAwMTY3RDM1RDc2Rjk0RDY0RkVCMUU3NkQ0M0ZBMkFFNjQyQzhBQjU4RjI5MTYKLToxNTA4QjIwMERGMTk2Q0NEN0FDRkVBNTM2ODlERjU4RjYzRkQxQzBEN0QxMDYwQTFGRURDCi06MTUwOEM3MDA0MTFDRDIxQUE2MUVDNDNEMEJGMkUyN0UxQTU3MkJFM0YxRjkzRTJGRUVFRAotOjE1MDhEQzAwNTNDMzFGQ0NDNkYxN0M1QkE3NUM1MUZGODZCRTA2RTdEREExOUQyNEY2QkYKLToxNTA4RjEwMDA0QzM5QzlFN0I0MEQ0ODkzQzhCRjUwRTlDODc1RDMzQ0Q5QTI3MEE3MTUzCi06MTUwOTA2MDAwM0VCMkI5MkRCOEU3MDA2QzJDOUMxMTk3MDJFN0U1QTlDOEJBNzQ3RkE2OAotOjE1MDkxQjAwQzU5OTM4MTgxRDU0QjFDRUMwRjU0NEFFMTU2NzYyMTJBQThGNEY4RjM0NDcKLToxNTA5MzAwMDg4NzMzMDlFODlDQjgwNjZGQkZFRkJBREYzRjBCREVBRjMyRUZCM0NCQzcwCi06MTUwOTQ1MDBENDNDN0JERTEwQzc4QjY3Q0Y4OUYyMzQ5RTNEREZBQTI5Mzk3QjYyQUU5QwotOjE1MDk1QTAwQjZDRkMzQjk5MkYzMzA4Nzk4NkIzRjM3M0IwRjdGNEQ4QzdDNENEQjE4NzUKLToxNTA5NkYwMEYxMUMzQ0EzQkE2MDFEQzZCQTNEMTBDNzc2QkY5QjU2QkM1NUM3MzE0NjQ3Ci06MTUwOTg0MDA4QTVBNDBDNDM4OThDNzM5QTA4NTM1NjlDRDlDQTRBN0M5ODQ0OUExM0VCQQotOjE1MDk5OTAwQTIyMjA2MEE5Qjg5MTg1OEVEQURGQTE1RjhDNDgwOThEQjRFQUNGMzZEMkYKLToxNTA5QUUwMDkxREYxRUM0MjNENjBCOUQ5QjcwMjRGNjI3NjNGN0JCMTk2NTdBMjQyNTlGCi06MTUwOUMzMDA2QzAwNjcwMTAzQzcyNkY3RkNCMzIxN0MxNkVDMUJBODQ5MkE1ODUzNjBENQotOjE1MDlEODAwMkM0N0JGNzkwNkY5MjI0QkQ5NEJBODQzRkI1RUUwMzY2QzUzMUY5OEQ4MjcKLToxNTA5RUQwMDM2MTNERDBCOTRDNzk2QUEyOEVCM0VCQzE3ODA1NkRDMEI0MDNCRkU1RTcxCi06MTUwQTAyMDA2MDY5M0NFRUJBRjE1RUUwRUI2Q0Q2RkUxN0IwRDk0NEZBRTQxM0Q4RDE1QQotOjE1MEExNzAwNUI3NTBGRDgzMENBMkM3OTM5Q0FFQjZEOUQ2REUyOTA0NzBDQkY0M0RFNkEKLToxNTBBMkMwMDA0MjE1MzA0OUZBRDdEOTY3RDA3MEM4NDk5REM3MzYxM0MzRjcyOUY2MTkwCi06MTUwQTQxMDBFMzlEMDE3ODZENUJEQkYxRTlDRTQ3OEFGMUM1RTVFQjEwN0FEQTk0REQzMAotOjE1MEE1NjAwRDM2ODlGNTFFNThENDlBNUE2NzU5MEM1ODAwRkFDMEZGMDRDQUE3OUNEMUEKLToxNTBBNkIwMDNDOERGMDVDRTgwREZDMEE3NDgzNjNFRTkyQjE2MTQ3NUM5QTQxRTdGNjFGCi06MTUwQTgwMDA2MENDQjkzODAyQjk3QTY1OUYxQUQwRDA3RjFBMThDODFFNzA4NTgwQzc3RQotOjE1MEE5NTAwMzFCRUQyM0M1NjQ2NDhBM0U2Njk0NDU5NzY0MERGQjVDNjNDN0ZFMUY4MzgKLToxNTBBQUEwMEUxREEyMTA2QjUwOEY3QzgyRjQxMkNFRjMzRUVBNEE3MEQyOUI5QzcyMTBCCi06MTUwQUJGMDA5N0NFMTA0RUZGMTE5RUI3NEM1QzRCMjY4QjJCNzlBQTg4MEJFMDg3QUQ2MQotOjE1MEFENDAwNzNBMDhCRTg3ODQ2MzRGMEREQTZGMzRERTREMTFERjJGNDM4NzhEMDI3ODMKLToxNTBBRTkwMDI5MEZDMjY1MUUzMEU1RDExREYyN0MyREFFMTI3OUFFOTZDODczRjUzNkZBCi06MTUwQUZFMDBFNUM5MzhFNDc5QzdDMTQzNjY5MkYyMjA1Q0ZFN0U1MzlFOEM0MzlFQUZFNgotOjE1MEIxMzAwQzU1NTIyQ0ZCNTEyNzlBRUREQTYzQ0M5OTFBMjNDNjc0NzhBM0NFMEY4OTEKLToxNTBCMjgwMDY0RTQ0MTM4RDk5MjA3RkI0QjI2OEJBQjQ0OUVEMTEyNzk0NjFERjI0NDBDCi06MTUwQjNEMDBBREZCMEMxOUYzQjlFNUUzNzUwQTUzRUZGQjA5RDIzNTdEMDRERjk3NUE0NQotOjE1MEI1MjAwRUYxOUVCQkRERTdBNDdGQUY4M0U0M0JDMjc5OUYwNjVBMEIxQUI0Q0I0RkYKLToxNTBCNjcwMEVDQUFGNTlFQjZERUFGNTlFRjE3QURGNzUxRUJGRDFEQzBCMzhCOUVFMDM4Ci06MTUwQjdDMDBEOEQ3NjBBRTkzQkVDQ0M1QkQwM0Y0N0JFODZCNUNENDAzRDA0RkQzMzdFNwotOjE1MEI5MTAwNzk5NERFQzVDQzczQzU1OTIzMDNFQkUwNUM1MTMzNEJGMzM0MDc5MzlFQzcKLToxNTBCQTYwMDY2N0ZERUQzRUMwNTNCNjA2RDhGMzIzNkQwNTMwMkNGNzY1OEJCOUFCRURGCi06MTUwQkJCMDAyQUYwNzQ0MzdGMzM3RDgzRTNGQUI3NEMzRTM4RDJEQzRFNzc3MzEzQUZBNAotOjE1MEJEMDAwNkUwQzAyNUVCQzZCNTg0MURFNjE2N0I2QkVCQzVDREM1OTAwNEMxNUY1QjkKLToxNTBCRTUwMDM0RTJEODBCNUI1RjEzNjM1OUM3RDgzMzVCREYxNDYzQzg5MzNERjZFNDg0Ci06MTUwQkZBMDBENkJEQ0I2REZDNzc1MUQzN0U4ODY3OTZFOEE3Rjk3NjhCM0VGMkI0QjY1RQotOjE1MEMwRjAwNkU2MDk5OEREMzg2NDU1QzM2QUNDRDJCRjIxNkIyNjAxMUVGNUY1MTRGRUYKLToxNTBDMjQwMEIzQjg0QkIxNzQzQUZDODhBOUQzOUNGOEVFNjFDQTNFQzNDRTFGMzA0RjhDCi06MTUwQzM5MDBDN0NEOUJGNEVFQjY3MDBDOUE2MzhDRkY5RDA5RjNBMTg1MDM2OTA3MTA5OQotOjE1MEM0RTAwMDdDQzY1MUYyRENFNDUyQzNEQzY2MTdFMURFODBGNzVDN0EwMUZBNzA3MkYKLToxNTBDNjMwMDM5OUU4RkNFMDk5RTJFMEIzRTFGQTVDRkYxNUVBMURGMUVFM0Y0ODg3MERCCi06MTUwQzc4MDA0MEZGMDNENzNENEQ3QjY3NTI2NTQzRTg4RDg1Q0ZFNjkyQ0EwRjk2MjMxNQotOjE1MEM4RDAwMUY5RDQyNDcxNTUwOUIyRTU5MkUzNTJEMEFFRDVFQzg2MUVFNkUzMTk3NTQKLToxNTBDQTIwMDExRkM1NjI0M0Q4REIzREU5NDlBODJBMTgzMEIwRDk4QUI1QTZFRjI4RkUzCi06MTUwQ0I3MDBGQUFBODA3RDcyRkQyQkE5RTk4QkRBRTcxNjFFODJCOTNGMzY3QjlBMkJFQgotOjE1MENDQzAwQjRGMkM2Q0YyRUZEMjE4MjM4N0Y1N0NCMjJCOEZFQjdCRDgzMTE4NEZERDAKLToxNTBDRTEwMEUwRDI2OUM4RkIzQjA0NERFMDNGQTM4Qjc2ODZFMDE5RTRDQ0M0NDRCQkRGCi06MTUwQ0Y2MDA0QkUwMjZFMTY4MjYyOURBODRFMDAzNkE4RTBDRUU4OUU5MTcyRUFCQUVCRAotOjE1MEQwQjAwRjczNUQ4N0ZBRkIwQ0E2MDI2OEVGQTMxRDc1RDM2MzY4QkQ2RDQxMTA5RjkKLToxNTBEMjAwMDZCODYwMkVEQjQ5NUM3NTVEN0ZBNDdBMEY2RDlDRkVFQzA1QzA5N0EzMzYzCi06MTUwRDM1MDBFOTI2OEQwRUQxRUUzMDNBNDVEQjIzRjQ1OTBFRTcwNUQ3RkVDNzAxRkVCMQotOjE1MEQ0QTAwN0JBQzJBMTgwNjc4MkE2MjE5QzIwRjhBMzY2MTlDMTVFRDUyQTFGMzI5NjkKLToxNTBENUYwMDE3MDBGRUZEN0YxMEI1RDVENDYwMENFMEEzODZDOTc3RDJFODg3RjY2OTJCCi06MTUwRDc0MDA2MTg3NUQ0NjdBQTQ5OERCNDgwOEVBQURCMDIyNkNCMzBENkM5M0EwMDdDMwotOjE1MEQ4OTAwQjgxQ0NDQzFEODQ1QjZCNENDQkEyQjE3RUQ0NUEzMDFEQTlEREYyNzNFMTQKLToxNTBEOUUwMDFFNzZCN0MwMzE4RjFEMTgyREY4RDE5NzFFODVGMTRBN0EwMkVBMDU1RDBECi06MTUwREIzMDBFOEFGMENDRTE2MEJCRTgzNzBFNkJFQzI1Q0I5Q0Q4MjQ1N0Q1QkZCOEQ3OQotOjE1MERDODAwNjFGRjI5QTAyOUZCREU1MzNCOTYyNUFENkY2RDUwN0ZDMUI4OTZGRjhEQUYKLToxNTBEREQwMDExNjgxRDYyRThDMERCRjNBRjFCRjBDRTc1RTAyRDEwNERBOUIyMEZDRkYzCi06MTUwREYyMDAzOUVGMUIxMjFEMzIzRTY5QjBGOEExQjNEOUY1MkY0RDFBNDc2MUJENkM3MAotOjE1MEUwNzAwRjFDMzJEN0U4RUNFMjlGMjgzQjlFRTAzMEIzNkVCRTAyNzdCMEI3RTYyM0EKLToxNTBFMUMwMDBFN0UzNjAzM0ZGMENFRjkwNEZDNkM3NkYwRjM5ODQ1RTMzRERDNDcxNjBCCi06MTUwRTMxMDAzRjU5OEI5RjRBMDczRjk4QUI1NjU5QjBFODZGMzYzRkQ4QkYxOTNGNTFBQwotOjE1MEU0NjAwMDczRkFCODExRjc4RTdDOTA5Rjg3OTZCNzE5MTlGOEZCRTMwNjk5QzFCQkIKLToxNTBFNUIwMEMxOUM2NkYyODMzNDkwOUZENkQ5NDU3RTMwRDc5QzMxNjEwNTJEMzdDNDEzCi06MTUwRTcwMDBENjhFRTY5NDMxMEE2NzZBM0JDNjNBM0YwRjY4NzQ5MDZCRjQzNEM0RTg0RgotOjE1MEU4NTAwQ0Q0QzBFREUxNzNGQkMyQ0NERjBGRjU2MEVFNzRFMkFENjVEOTA5MUI3OEIKLToxNTBFOUEwMDYyQ0E3RjhDRTA2NTJFRjE3QjFENzkzMzRFRkI3OTU5RDU3OTk1RTYwNzc5Ci06MTUwRUFGMDA1ODcxNEREQUI4NjhDNTYzMUI1NjAxQjg2RUQ4REI3RTg4OERDRUY1MzEyNAotOjE1MEVDNDAwREFDRDM3MDM3RDA1Rjg1MEU4NTE3OEFFRjAwNDlEQ0I3N0QxMDVFMDMzNTMKLToxNTBFRDkwMDBEQkM5MzQ2QzA1NkFCNzk5REIyNEQzNUM4QTE0NDdEM0VDNUJBRjU1NDI3Ci06MTUwRUVFMDBBMjA3RTA5M0Y0MUM0RjUzQzYwRkY3OUU2NjM1NjQ0MDlEQjZBNTk3RDUxNAotOjE1MEYwMzAwNUVCQUMyM0FCNjdDOTdFREE5OURDRkY2NkU1OUM4RjZGNTJFNjM5RDk3QzUKLToxNTBGMTgwMDU2QjIyM0I1NjcxOERFRDM3Q0ZDREIzMkRDRDMwQ0ZGQjdFN0Q5REVGMzJECi06MTUwRjJEMDBBQ0YyQzIzMUY1RTBBNUZENTAwRkVDNUZFMkU0RUI5RDMwRjE1NUQxRDU5MwotOjE1MEY0MjAwQ0Q2MzYzQjE3NkQ2QjA5MEY4RkNDRTMxMjE0MDNCM0I3QTkzRjFDREQ3NUUKLToxNTBGNTcwMDBBMzc4QzJCNUEzQkM3Nzg4OUZBMDlENDRGQjA4RUI3QjMzQjlCMjYxODRFCi06MTUwRjZDMDA4NzVBRTA2QTFERjE3OTQzNDkxMUFCQzA0NkYyRENFNDMxOEVGNkM1Rjc0RAotOjE1MEY4MTAwNEY0NkFDMUE0MTNFQzc4OUNDQjg0NEM1MUQyQkJGOEFGRjY4MTBFNkZDQkEKLToxNTBGOTYwMDlBNjg3QkY4QThEQkFDNzU4NjQ1MUI2NkE0MDA3NTUxNTU0QUVERDY4NzhFCi06MTUwRkFCMDA5NDZFQkQ1Rjk5MjZBNUQ0MjM2NTQzQ0E5MUU4ODA3MjE4NkNGOUFDRkVCNAotOjE1MEZDMDAwODZFMjdERUYwRkFBODAwNUUwODM3QTk3MjJBRjYzMkFGQTQxODU4MzNGQjYKLToxNTBGRDUwMEJDODM5MEQ4OTAxODdGNTJBQjZDRkNDNEZFNzcwRjJCNkVGQ0ZCMEEzM0JGCi06MTUwRkVBMDAzRjZBNjNCOTM0Qzk5MUU3Mzk5MEM3MkE5MjVGMzVDQzRBM0U4MTc5QzRDNgotOjE1MEZGRjAwQ0E4NTY3NDUxRDYzRTZBRkIzNjZBQzAzOUQ5OUY5OEY1QjMwM0QwMjY2MTcKLToxNTEwMTQwMDQ3MzE0RjhBRkRGMDk4NDUyNzdCMDM5RDNCQzZEMTMxRjNFNTU5NTEwRkQ2Ci06MTUxMDI5MDBEOTc0MzIxNjlEMEYyRDNBMjY0QzBGMzNFMzcwOUE4N0FGMTJEMjFCNzZCRQotOjE1MTAzRTAwQjU5NDFGNDhBOTgxRTgzQ0JDREZGM0ZCQjVFRjQ2ODI5MEFCQUU1RTM3MkMKLToxNTEwNTMwMEU1RkQ0MEZCRUJDNkNCRDBGNzgyRkVFQjE0MzgwNzc5MDYxMjkwQjM5QUZDCi06MTUxMDY4MDA1REExNzQ1Q0E2NzhERjFCNjZDOTJDQzQ4OUE0QUI2NTMzM0Q2NTJDMDIyRQotOjE1MTA3RDAwMUM5MkZDM0RDODQzNUQzQzE0REQxRjM5NDhCQTEzNzg4Njc2ODc3QUUyMUUKLToxNTEwOTIwMEQyM0Q1MEEzQzU0NjhDQjk3NEM0NzA1QkJBOEVEMDJFMjM0QTBGMUE4MTk3Ci06MTUxMEE3MDA3QzhBNzM0RjZBRTcwMkRBNjc2MDVDODk1RDAwMzlGMkZENUMwNjlDMzhEOAotOjE1MTBCQzAwMEUyNzYyMDYwNzJFQUY5M0U2QTYxN0ZBOUE5REVCRUI5NDQzQUE2MUUxOUUKLToxNTEwRDEwMEMwQjVEODQ3NUMxNDcwNDlBMUZBNzhCNDY0QkQxRkQ2NDdFOTczMDZENEYzCi06MTUxMEU2MDAxMEQ2RkFFRTA5RDdFN0ZFMTE3MzUzN0QxQzc5MDlDM0RDMDJBODMzQzIzMgotOjE1MTBGQjAwQjQ4QkUxREQ5NjQxM0ExMjBBRkQyRkMzRTNDMjM4Nzc5QTE5RTQ3MDQyMkEKLToxNTExMTAwMEQyM0EwQzNGRTQ2MDM3RDZCQkIxN0VDM0FCNzUxQjk1REEzOTcxOEYzNjVDCi06MTUxMTI1MDBERThGQ0Y1QTdFQUM4RkYzRTMzMUZGQ0RBNjE0RDlFMUJGNTU1MDJCOEMwNAotOjE1MTEzQTAwRjkyOEY4MDFEQTBGN0RCNEZDQzA4MDVBNDNFNkE5QTY2Q0Y1QTY2Q0QxMUEKLToxNTExNEYwMEJFNjZBNzNGMDc2ODE3MEY2QTUyOTM4NEU3NjZDMjk5MTdFQ0IxNzMzRTBDCi06MTUxMTY0MDBGMUUxRkJCRTk5OURDQUM1NERDNEY3RTJDQ0E0MjJEM0Y5QzIzNkFCRDE2QQotOjE1MTE3OTAwMEVCMDk2QUZFRTdFMDg1QkNGNTJGMTNGMkQxNUIzODMyNjRFNzk4OTM3MTkKLToxNTExOEUwMDJFNDNGRjU2OEYwOTQ3NDQ0QjgzMzZERjE0RjY1RDFEOTFBQjE2QTgxREU1Ci06MTUxMUEzMDBFRUY5MEY3OUFDNzFFRUQ3MUZCMkU3RjFGRjZBRTRFOERDMDcyNTFCNDc5RQotOjE1MTFCODAwQjRGQjQxQkZERDVGNTkxQzE3RkIwNEU0OTg0MzhFMzY2MTdFODAxQTkzMUQKLToxNTExQ0QwMDRFOEJGNTYwNEQ2MzFDQTI1MjBCRDUxODgzQjM3QTAwNjEzNjA5OThDQjc0Ci06MTUxMUUyMDBENjc3OUY0RUJDQTNBMDI0NzY5MjA3Njk3MzgzN0RDRjgyREYwMzQ2NTdFMAotOjE1MTFGNzAwMzQyRjM2QkZEMTlCNzc5Nzg4NEY0RTc2MzNDNDg3NjM3RUI5NUI3RDA3N0YKLToxNTEyMEMwMDcxM0FFODJGMTdCODI5QzMzQjU5NDlGRTBDRTg3NzE5QjgwRUU5NUJFQkZDCi06MTUxMjIxMDAzMkI4MEVFODlENzFGNjJGM0FGMTU4QkY4M0I5RTM5MDczRjBGQkVGMTU1MgotOjE1MTIzNjAwNTY4REY3NEZGQzI4NUI4QkZCOTJERTFCMDlEMjc5OERDQzhBMEYzRkExQzQKLToxNTEyNEIwMDBGMzVFQTYyOUY3NzhBRUZFNUJCQTc1QzQxM0FEQzJGM0Y2N0RFNzVDMjhCCi06MTUxMjYwMDAxOEU0QUIxQTFCQkZBNENENjU1OEIzMDlEODFGN0VERTQyNzJGRDdDOUFEQQotOjE1MTI3NTAwMDNCNkMyODI5NTIwMzc0RjE2RUUxMEYwQkEwQUUyREQwQjVBNUQxM0Q2RkEKLToxNTEyOEEwMDA4RTY3N0ZFNDMyQTlDOUUxODQ0NzM0MzVBRjMzOUY4RTQ2Q0Q2M0I0QzA4Ci06MTUxMjlGMDAxMDRGQTY3QUY0Mjg5MzQ1NEVFODNGRjNCQjQyQTExQUVGMDZCNzg5QjVCRAotOjE1MTJCNDAwNjlCMTc2ODFCNjlGRDVDODRGQUI3NzZBRTc1OTQ0ODMzMzY1NkM5RTgxMUQKLToxNTEyQzkwMEY0ODlEQzZGMDgxRUIwOUY0QjE5OTIzQzU3NDVEQzUyRkVBODhEREJFNEU1Ci06MTUxMkRFMDAxMUY2REE1ODlGQTc4QzJDRDA1OEE0NEQ2RkFDRDJBNjQ3N0VBMDRENkRGOQotOjE1MTJGMzAwNDRCRTM3Njk3NUNEQjY3QzkyM0M1QjJEOTU2RjMyNzM4MjBGN0JBQ0M0NTUKLToxNTEzMDgwMDdFN0MxOEJGN0Q5RjAzREI2NUUyNEIwOEE5QzYzQUM2RTUzQkE3QkVFOThFCi06MTUxMzFEMDBDMkZCQzczNEQ2NEQ3NDdBMTA3MjVFNkNDOEMwREE0MjRBMEUzMUQ3QkJFNwotOjE1MTMzMjAwRTdENUZGMDY1RTdCNUNDNDhCRjZDNzdCRjk0NjVBRDM1ODQ1NkIyMjdFMTUKLToxNTEzNDcwMDdBNDdFMzY2RDBEMzJBNUFEQkI4Q0VCMjM3RTJBODk2NUYxNTc3RDRFMDU3Ci06MTUxMzVDMDAwQzM0Mjg5RjUxQ0I4MEM2MDI5OEFGODZCRTFCRkEwODg3NzNGNkI5MEJCNQotOjE1MTM3MTAwRTE1REQ2MzhBRTBGMjZFNzg1NzFCRDhDQjIwMjdEMTlGODI4NENBNUVDQ0IKLToxNTEzODYwMDA4RTk1MzE4OUM4NzAyQUUzRUYxN0RFMDU5RjE3RjUyMDNENjdENjg1QTY0Ci06MTUxMzlCMDA5Q0QxNzE5Rjc5N0Q1N0Q0MzY4ODIzMzM3QzQ3NTVEN0NDNEVGNTcwNTJDQgotOjE1MTNCMDAwNkFBOUI5NzA1RTlEMjNFRTU5MzM4NjhFREY1RTc2MEU4OEVGMzQzODQ3NTUKLToxNTEzQzUwMDhFMERCMUNCRTJGQjBDNjVCM0M4QTlFNTA4NDMyQzE4RjE3REE1NkY4ODBDCi06MTUxM0RBMDBDREQyQkU2QTEyNkI4OTM5OEVERjRERjQyNDhFRkZCQzg5Qzg4MzA2NERCNgotOjE1MTNFRjAwQTZGMDNCODgyMUFGMTk1MEEzMzBFRUQ3OUFDNUI4MTdERUE5ODBBQjZENzIKLToxNTE0MDQwMDkyRjA1RTIyRjZCQTcxMThGQzAyNjU4MkZENUY4RDc3MTVCM0EyQTcxQjI3Ci06MTUxNDE5MDBDNTlENDU2RUQwMzhBQzQ5NDJFRjc4OEZGNzBDQzQzQzVCQzZBMDI1MjM2OAotOjE1MTQyRTAwQ0ExMUIxRjI3RDdEMDFDRjc1RkY0M0NDMTMwNjQ3NTVBNEQ5OTNCQzkxQ0MKLToxNTE0NDMwMDE5ODhDMzAzODYxMTI4MEMwRjFDRDZFMDQ1MzI2ODk0NjQ4MDM4QzE2OEM5Ci06MTUxNDU4MDAyNTU2RTQwNjg4RUU3QjVDRDA4OTI2NkVCNDUwNzI5MDU1NzY4QjVCNUZDQQotOjE1MTQ2RDAwMzA4MTA0MUY1Q0YzNEMyMDZCRTFERTg0Q0Q5NDkzMkIyMjAzMDcxQTNEOEIKLToxNTE0ODIwMEFDQ0JERTc5QkI2OEE1QUU3MjE2NzdDN0Q1QjlERUVDRDY5RTQ3Nzk2MTVFCi06MTUxNDk3MDA4RDZDREM2NUFCMzhFN0JFQUZCQkRGQ0M5QkM5QTBFMERFRDVGRDk4N0FDMwotOjE1MTRBQzAwNkZCRUVFRjc3RDVGN0ZGREY1Rjc3RERERkQ3NTQ3RjVGMzFCMzE1QTg4QUMKLToxNTE0QzEwMDFCQjg4RUQxMEJCNjE4NjA3QkNFRjMxQzAyNTNCMkU5NDEzMThFNTlCMDVBCi06MTUxNEQ2MDBFNzUxQ0NGMTg2NzFBMDNGNENEQ0IyOEZDNTM4MTQ2NDJEM0YwMTM4N0EzOQotOjE1MTRFQjAwNDMzMTU1NzcwRkIzQkMwNjk5RDlBMzI4QUJFRjk1NEZCMDM1OTU0OTMxNzkKLToxNTE1MDAwMDJGNDY5OEEyMENCM0JEOEEyOTFCMkMyMDYwRTQ3MjA2NTYyQTYwNTc3MDJFCi06MTUxNTE1MDA2RDQ2QzQ1NDU3NkRERjMwREQxQjI5MjAyNUNBQjA2OTg3NjFEQ0U4Q0Y1RgotOjE1MTUyQTAwODE5MTAyODk5NDY3QzNFODIwM0NFNUM4MTkyQTgzQUZBOUMwMzJEMTVFMjEKLToxNTE1M0YwMERDOEYyMUY0NzY5RTZCMjJCRUJGRjRFNTlDN0Y3MEIxRUZFM0Q0RTI5MUNCCi06MTUxNTU0MDAzRkM1RkZGMDE5RUFFODgxQkU2MDZCQzAzMTZBRDEwOTI5QzNGNDQ1OTJBRQotOjE1MTU2OTAwMzBGQUY0MTg4QkJCM0YwMUJCMDdEMUMzMTY4Q0JCOTNFOUI4ODhDQjc2MDEKLToxNTE1N0UwMEMxNTQ4QUM5MzU5NDdDM0RDRDY3MjhGOTE2RURFODE5NTY2QjZDQkMyMzA5Ci06MTUxNTkzMDA0RUY0NkY3REExNDE4NkIzMTk0MzdFNUMwMzQ1RDlDOEMzQjQyRjFDNjVCNAotOjE1MTVBODAwRjA3QTAxOUYxMkIxMTE3QjAyOUYzRURDMkY5MjE5M0VBNjAzNUVGQzFGRTAKLToxNTE1QkQwMDhFMTk1NkZGQTc0NDdGNzY4QkZFNjRCQTYwQzkwRDYyMjRBMDBGRjNBMTk3Ci06MTUxNUQyMDBENzY5NkY4MjZDMjlCMkQ5NjM1OUI0QzcyNTlFNzJDRUYzQkQyRkQzRTlERQotOjE1MTVFNzAwQzU1OUY2ODVDQkZCNzVCNkNGNTU1MzQ0QzI3QUREMTkxNUM3NEMwRERCNjgKLToxNTE1RkMwMDEzRTczMEIyNjEzQUFDQzAwRTJCQzY3MTFDMzc2QkMxRTMzOUM0N0I4RDIwCi06MTUxNjExMDBDQ0UxQTFFNDA5RTBGNzA0OUQzRkM5RTRFRUQzMDUzRjBDMDYzNkNENTdCNAotOjE1MTYyNjAwMTkxNzczQkY4NDIxQzMzNzJDODcwOEZBOEMzREMzNjc4Q0Q5ODg4RjBFN0MKLToxNTE2M0IwMDlCRjlFQTkzM0NGNTQ5QkFGRTVCNUNENjAwODM3NzczNzczQURFOEU1M0VECi06MTUxNjUwMDA2OTMxQ0MzRTQ0M0JGMTlEQjVDOTBCQkM1QjZEODJGNzI5NDc5Q0U5N0ZEQQotOjE1MTY2NTAwQzA5QjI5REY1Nzk3MjlCNzYwN0JGM0MwQTQwREQzNjE0RTNCMkM2N0ZGQjEKLToxNTE2N0EwMDkxRTlCQjE4NjNENkY4QjU4RkVEOEU5Q0IxOEQ0RkU3Qzc3MTBEQ0JBRTUwCi06MTUxNjhGMDBGNThEOUVFNzFCQUJFQzI1NUIxOUM2NzRFRDhCQzgyQ0NCQTZBMDNDQUM1NQotOjE1MTZBNDAwNzI3QzVGNzJBMTUzNkJDODI5OUY4NUI0RUY0N0RBNzFBMzAyOEM3NzZGQjIKLToxNTE2QjkwMEM0Qjk0NUM2QkQwRUMwMTU3RTI4NjM5RjUwMzc3MDJDNTg2NUU1RjYzMjVGCi06MTUxNkNFMDA5MDgzNEJFMDYxNEYxQjhFQTIxQzFDNTZGQkI5RkU3MTk4OUUwQjAzN0M1RAotOjE1MTZFMzAwN0IyQzk4MzcwM0QzRjNDMDY2N0FCMjYxRDhBNjJFNUI5QjJENTg2NzFFNTQKLToxNTE2RjgwMDU4QTFDNzBFRDM4RDQ0MzFEOEI2ODU0MjNFMjQ2QUEwRkRDMEYxRTkxNUNECi06MTUxNzBEMDBGQTFFNEZFQjNCQzBEMDE3RDhENjNBNDgxMTYxNkIxQUE4QkY1RUE2QkY0MgotOjE1MTcyMjAwMzFDM0QyRjM5OTA3NzEzRDNDNDE4RkMyQjhGNzg1Qjg2RENCODc0M0JFMzEKLToxNTE3MzcwMDYxMUM1MDg2Mzk3QkYyMzBENjMzMUI2Q0YzNTBCNEVGNjgxRkI3QTE1REMyCi06MTUxNzRDMDBDMUI1MjZGOEVFQzBDMkI4Q0FGMDgzOUVDMTQ0OTBFNjgzQ0IzNkI4NjFEOQotOjE1MTc2MTAwQUZCRjIwM0Y1QzA2NzhBQjQzRDhERjYyNkU3MzJEOTk2MTVDNTAwRjY1OUQKLToxNTE3NzYwMDc5RTVFNUNEREZENjU5MUYyN0I0M0U3REI4RURDMEMyODRDQTczMTBBRkU0Ci06MTUxNzhCMDA0MzZFRkY4QkI4QjA5RDVGRDUwN0M2OERGMEY1OEQ3MTY1Rjc2QjQyRDhCNwotOjE1MTdBMDAwN0JDQjc3NzM3QjlDMkRFQjZDN0I5Qzg3MTdGODg2RjMwMjcxMEEzRTAxODcKLToxNTE3QjUwMEY3NkNDNEM3RjZDM0YzQzgyMTRGN0Q5MkFFOUZDRERGNkU5QkRFRTExODY1Ci06MTUxN0NBMDA3Njc4QTY4RjcxRTI5OTNFQzYwQjNDRDNDNzMzQzkwM0RCRUY5RTNFQzZBQgotOjE1MTdERjAwOUQ5RUU5RTM1OUNBODE2MUZENTdFQ0RGNjZFNkJDMjIxRUMzNzFDRTdEMDMKLToxNTE3RjQwMDAzQ0E3NDg5Q0RGN0MxNTM5Nzc4NUM2MjEyOUIyRjk0NzNDQTI0NUI5OUFDCi06MTUxODA5MDAzN0E3Q0M2NTJCNUI5MDUzNTY2NDJCNUIyQzBCM0YxMjk4MzRFMjNEQzhENwotOjE1MTgxRTAwOTcyRUYyQ0JBRDU4MjQ0NjgzOEEzMzkwODkzRDYyOTRFNUVBNDI1RjY0NjQKLToxNTE4MzMwMDYyOEZBOEM2RTM4QzlDRDg1M0NFRTRDOEM4QkU5MjQ2NDdERDJBRTg1M0FBCi06MTUxODQ4MDA5ODY3MDc0Mjg2N0MzQjIxMDUwNzJCMzU3RDMyRTU3NjNBM0FENTM2Nzg3OAotOjE1MTg1RDAwNEEyMDkzNUU4NUFGQzNGRTA4NzRFQTcwRjRGN0U1NjQ2QTgwNUVFOTQxQUEKLToxNTE4NzIwMDA0NEVDNDQ1NzZFREZGRkZGREQ1RDYxMEY3RDg2NzI5MzcwRDc1QTgzNUY4Ci06MTUxODg3MDBGNzQ5RUJBQ0JENEREQzJGMjRFREZBMjkzNjY3Njg4RjlFMUE2N0NGRDFEOQotOjE1MTg5QzAwNTMyQ0M3QUEzRDc5NkE5MjlEQzk4OUQyQzQ0NkJFMTY2NzhCNDEwRDA3QUYKLToxNTE4QjEwMDE5RkUxOEU1Mzk3MTNGNzFBQkY3RjNCQzY1RUU2N0JCQzFDRjBFODI5RjJGCi06MTUxOEM2MDAwNTFGQzlFNDU2QzJFNDY2RjlFQTFBRTA4Mzc4M0FENUYyQ0Y4NEVDMjJBMAotOjE1MThEQjAwMEUyNjNCQjQ3RDUxQzBFMzA3Rjg0N0Y3NDlBQjkxRDZEOThEN0M4QzhDRDIKLToxNTE4RjAwMEMwMTNENzFCMUQwQThCMTU0REZDQkYyMTJCRjY4Q0QxMDdCRjYxN0YxN0YzCi06MTUxOTA1MDBCMTc5RTBBNDg5NkQwNDU5MjQ4NDJDMTI0MjE2MDkyMThCMDRDQUEyRjA3OQotOjE1MTkxQTAwNUU1N0EzM0Q3RUI5NUVGOUUxNThGMjI4Q0IwMzMzOTVBRUMwRDE0MjJFRkQKLToxNTE5MkYwMDJCMEVCQjEzNjAwNzAyRjEyQ0Q4M0QwMEVCMEI5Q0I2NjA0NTA4OUIwRjYyCi06MTUxOTQ0MDBCMDVCMDNBMzA4NjNGQjNBNUNBNjU3MkU4MTBDNDE5NjE3MkY0RDk3NjVDMwotOjE1MTk1OTAwQzM3QUUyQkU3MDA5NjVFOTVGN0RCREVEQkFERUY2OUNDQkEzMEYwNTQyNjEKLToxNTE5NkUwMDFGM0VBQTI2RUVEQUVBNkMzRTJCMjRFMkFFMDc1RTlDQzBFQkRBM0NCQzdFCi06MTUxOTgzMDBDNkExN0UyOUUzQjU3NEY1OERGNEMxRjVGMjdCM0MwRkJGODU4MkRGNTI1QQotOjE1MTk5ODAwQTBERDFGOUFBRUJGRkEzNUY0Qjc3MzIyRTUyRTgwNzZCNDRGNEM2RjQ3MUEKLToxNTE5QUQwMDEyRjAzNDRGNjAzQkJDQUI2RjU0OTc2RUE0M0RGMTNDRUQ5MTQ0N0IxQTcxCi06MTUxOUMyMDA4MTg3NzNGNzQxN0JCRTAxRkRENkZGODIzNjI5N0UyQTJCQTU5NEQ5N0UwRAotOjE1MTlENzAwQjA3OThFQkIwODg5MDAxQ0ZGNEJBNEQ2RDg4REVGMDFENTUwNDAzQThCOTkKLToxNTE5RUMwMDE1Q0Q5NDk1RUE1N0Q5MUUzM0Q4OTlGQTA4QUUzNzQ3OERGMDAxRUUxMzUyCi06MTUxQTAxMDA5NTgzN0NBRTMyRkUzMkY4NjI0OTA3N0ZEOENERDY0QjBEQTgzNzE2MTkyMgotOjE1MUExNjAwMzI4QjlBNEU5QTEzOUY3MkRDN0VDMDlCOUFBRDFCNTNGMERGQzFGRkJCQTQKLToxNTFBMkIwMDJFN0M5QUNEQ0YwNTUxRjcwQTNDMUIyMERFRjQyQTlDMUU1MTM5M0RBNEQ3Ci06MTUxQTQwMDA4M0Y0RDAyQkRCRTkyRDg2N0E0NTRENDM2NjNERDBEQjJENzA5Q0ZFOTQ0MAotOjE1MUE1NTAwRDNFQjE0RjRFMEJGQ0IyRTRGNTlDOEIzMDg2NDg5RTVFRDU1MjRBQjdDOTQKLToxNTFBNkEwMDhFNjVGRkFBNzg3OTQzNEVGOTVDNTEzRTI2Q0FDQjczQ0FFNzg5RjJFMzI4Ci06MTUxQTdGMDBBMkRDQ0JDQTI3OEQxQTlBMzlDRjkyODIzNjUyRDJBNUUyREU5RDBCN0RENwotOjE1MUE5NDAwNzRDRUY5OTU2RTg4ODc2OEQ0QjkwNUUyOENBRDU1QjhBRUE5NzdBRDJBMjkKLToxNTFBQTkwMDU2QTRBMDJBRTI5QTlFODUxN0Q1QUFEMEJFNjBBRDJENUY2MENGNDhEM0JFCi06MTUxQUJFMDAwNzI4QUJFN0RCM0ZBQzBBRDhFMDFGRkZGMEU1QUIwODVGQjNGNTgzMkE3MAotOjE1MUFEMzAwN0I3RUMxODUzN0JGRkYxQUMyOUZGOERCOUY1NTkxNjJEQ0RCRUUzNzNBN0YKLToxNTFBRTgwMEZGRTU4NTZBQUY0RkRGNEExRTIzNkU5NzRBRENEM0Y4QjRFNThGMjk4N0UwCi06MTUxQUZEMDBCMkZEMzM4RjM1MjY0REI0MjEwRTBGOUZDMzMxOTg5Q0REMzYyQjNFQzJDNAotOjE1MUIxMjAwN0EzMzQxRDdBN0Q2RjJEQzE5QUNEQjUzMzdBQ0NFOEMzQzEyRDg1RkM3MzIKLToxNTFCMjcwMEVDMzkxREI1RUMzOTk0NTk2NzcyNDYzN0U2OUZFRjFCOUZBN0RDRjE0QjVECi06MTUxQjNDMDAyOTc3NjYxRTQ2QjU1RUREQUZFMkJFMEFDNDhERUVFRTg1NTE3NTNENTlEMwotOjE1MUI1MTAwMUVGNDkwRTVBQjE2Mjk4RUUwNzk5MDQ1Q0Y0MkFBNkVEMEZEQzE3MzY5QkYKLToxNTFCNjYwMEI5QzREOTlBQzRDRDRDMUU3NDBGQzYyODRFODhGNTA2NzNDQUREQjY3MkZCCi06MTUxQjdCMDAwOUNBM0IzMzcyRUQyRTkwNDhCNzBCQ0ExRDY1RDA3RkEyQ0UyMkU2RDMwNwotOjE1MUI5MDAwRjhCNzM3NDFGRDA2NTFGRjBFQjBGRjNFRTFERkIwQ0MwNzY1MTU4NEVCOUYKLToxNTFCQTUwMDEzRkU1RjcyNjE0MDJCODFGRjhCNkM3NTk2NUM4ODY5REUxQzdFMUU4NDk0Ci06MTUxQkJBMDA3RTRBNDQ2MkE2MEI3QzZDRjk2RjUzRUVFOEQ1OTRCQkY5Q0JENDJDRDFDNQotOjE1MUJDRjAwQkU3NTExQjBEM0EwM0Y1OTc2QzUyQkY0NTQ0MkY5ODM5RTg2OTI3RjZFRjMKLToxNTFCRTQwMEU4NEUzMjBCRjUwQ0UzNjAwQjM3QUU1RkUyMUVBMTZDRTMwQjczODU0RkE0Ci06MTUxQkY5MDA0Nzk4MEYzNjAyMjJCRkExMDhGMDJFMDBGOTdCOTcxMkI3RUVFN0JBQkZFNwotOjE1MUMwRTAwNjAwREUwMTZGQjMwNTRGOEYzMTc0OUJGRDEzQjNBQThCRUI5MENGN0U5ODQKLToxNTFDMjMwMDAyMDY4RjY1NEIwQzU2MUVBODMwRDA3NzE3Qjg2M0RBMEY5NjNFNUNFRThECi06MTUxQzM4MDBBRDhDRDJENjU3MzJGMTE2ODU3N0E5MEYyMjU1Nzg4RUMyRUYxQ0ZDOTQ5OAotOjE1MUM0RDAwNUVCMEFGRjAxQjE3QkZENjVFQkVGRTg1RjgyRUZFMTJEN0JGOTRDNkY0NTUKLToxNTFDNjIwMEJDNENDMEEzRkZDMUUxNjEwMTJGMDA5RjU2ODNFRjc0ODBDRTgzN0UyQjdCCi06MTUxQzc3MDAwMEZGNTBDQ0Q2MTgyNjRERTlEQjg0QkM4MjNFODMwRTk4OTZEQ0FERjlENwotOjE1MUM4QzAwMDc5NjU5NkQ5Mzk0MDM3NDA2QjNBREQ0MDgzQzRBNDhEMTdGQTZEQzkzQ0QKLToxNTFDQTEwMDI0OUJBRUVFMjJCMzcwQUQxQkYxRkYzM0NDNDc2NzAyREQzMUE4MTM3NkU4Ci06MTUxQ0I2MDA3MzNGNjVFMTkxMDUxRUY5MzJFNzZERjQ5Mzk0N0I5MEU3RjU4ODNBMTAxQQotOjE1MUNDQjAwMDdEMTIxMERDN0VDNjQ2QTM2MUIyM0I4MzdENkY3RjdDNzE5OEM0Q0NFRDAKLToxNTFDRTAwMDI2REU5RjBFRjI3N0Y4ODNGMkNFRDQ4RDlBQjg5RkQ2Mzc3QTVDOUQyRjk5Ci06MTUxQ0Y1MDBCMUY1MEU5M0VGQjM0NTREREM1NzVCNkJBM0MzRDcxREZCOERDN0M2MUZEOAotOjE1MUQwQTAwMUI1RjM2M0E5OEE1M0YzN0EzRkUyMDlGQTA0MzgxNEFEQ0EzODZCODIwM0MKLToxNTFEMUYwMDNDNDQzMTQ2REJBRkFDMEJCMDFDNDVDQzhEOEJCQzRCOTVDODE5QzNDNzdCCi06MTUxRDM0MDA3MkU4QkYzMDNEN0NFRDlCRjY4QTc1NTdCRThFM0JDMkY3MEMwMjBBREY4RAotOjE1MUQ0OTAwMkY0MEJBMzg3RUMyMjdDREU3NTkzRkRDNDBGQzM3M0U4NDM4RDJGM0IwQjMKLToxNTFENUUwMEFGRTc0MUQwMDY1QTY5RkE3OUY0NzVEQjNBRjBDQjY5RkIxN0E1RTNCODk5Ci06MTUxRDczMDBENjJCMUJFQzlDMTQxOTJEMjBFMDM3RDhGQTNFRTBBMDYzMUI1OTFFODQxRAotOjE1MUQ4ODAwQ0Y5QTY3Q0QyMTAzRUMwQzEyQ0E3ODRDRDgzNEZDQkVGQjVFRTI5NkM2OTAKLToxNTFEOUQwMDVGRDJFNDBGNUY1MkVEMzYyRDZENzdEOTlDNkNDNDQ4RkRENTdCOTIzODI0Ci06MTUxREIyMDAzMzI0QTMyRDY2RjMxOTFBQTM3NzkwQzEyMEU2RUE0RkZERkI3MDk1QkQwNQotOjE1MURDNzAwNkY2RTEyNjNCQkE0ODJFNDVEMUZFNTZCOUJCQUMwM0IyMkYwMjY3NDJFRkEKLToxNTFEREMwMDNGQzBBQkM3MzhERTI1QzdCM0YwQ0UxMDc4Qzc1N0U3RTA0NTdCMDhGMUU4Ci06MTUxREYxMDBENUJFODVGRDJBM0JBRjBGMzYxMEYxMjYzOTNFN0QxOUVFQzlDQjgzQjQ4MgotOjE1MUUwNjAwMzAzOUFDNEJDOTMzQkFBQjI4QzZENkY5NjYwMjlEQjk2MUFBMzkyMjg2OUYKLToxNTFFMUIwMDcxMjgyOTZEOTE5NDRFRTMxNkY5MUQ2RDJDOTVGMjc5QTI1MjMwMzM0RkMyCi06MTUxRTMwMDAwRDFCMTg3N0VFNzJBMEFEQUE2REI0Q0VERDYzNUUzNThCNEI1ODdFRTIzRgotOjE1MUU0NTAwQTRBOUUyQjNCOEEyOTFDODBGQkNDQUU2NDIwMUU1NTRFOEQxM0NFRDA3MTMKLToxNTFFNUEwMEZGMTVFODQ3RkZENUNGRkNEN0JFODUyM0FBNjdCNEVCNUU0NjZGNUNFQTRCCi06MTUxRTZGMDBBNDk1NzFDRTdCMzhBNjdCMzAxRTEzRjA4MjQ4NEM5NzJCMTNBQzdEODcyNgotOjE1MUU4NDAwQzgwMUQ1ODRCMUVDREEzMEM4RjZEMUJFODUzNjFFRkFDNDExMTk0RUI3NkQKLToxNTFFOTkwMDZGNkU2ODMwNjg3RENCRUQ0NkZBN0QxQTNGRkRGRDk5N0NFQzdERTBGRkI1Ci06MTUxRUFFMDAzREJBRTA4NzVFODMxRjgwQ0I2MDFGOTExNzNCNEQwN0RGNEZERjkzNzVBQgotOjE1MUVDMzAwMjYwNEVEMTUwMUJFOEI0N0Y4M0M1RkM0NEYyMDNCMkUxRjlFNEY5MjJENTMKLToxNTFFRDgwMDQ3QjlFQkQ1QUNGRDBCMTg2RkM4ODMwM0ZBMUFENzNGNDNDOTIzN0I4QTRFCi06MTUxRUVEMDBGOTVDNERGRjI1QzA3QkMzNTFENUU1MTE2QjY0QzBEM0M1NDIxRENGMzg3MwotOjE1MUYwMjAwQ0ZDMkYyQjY0RDNDNDcwQTdEQ0MzMjMxQkZBQjY1M0ExMkQ3RkYxNENBM0MKLToxNTFGMTcwMDJDREUxOURGNTA3RkQ3MjYxNjA3QjMzQzhFN0E1MUVGN0JCNjdBRDVDOTRBCi06MTUxRjJDMDBEN0Y3QzA0RjQ3Nzg2MjEzREJEM0QwMzE0RjAwREI4MkYzNDlFNEEzRjc3QQotOjE1MUY0MTAwQTU5OEVBMURFNUZDMjBEQ0EyREIyQUYwOURDQzQzNzdDNDQ2Nzc5QkE4RUMKLToxNTFGNTYwMEY3QjZBRERFN0FBMDhCRjU0NjZERjVEQTQ0QkQ5RkU0RTE2RjdERjI4NDVCCi06MTUxRjZCMDA4RUUzRUExQ0UzRjE2Rjc0RjQwM0I1Nzg5RTA2RjgzQkNDNzQ2Nzk4QUQ0QwotOjE1MUY4MDAwMTVGN0ZFMURGMDRBMDYxOUFGQjUzNjVFREIwNUVFRjdGM0YwM0E2RUUzQTEKLToxNTFGOTUwMDYxOTdBOEY3OEY3OTc4QkQ2MEFCQjc1QkQ0RkJEN0FGRTAzNUJBMzlDMzI2Ci06MTUxRkFBMDA2QkZERDdGMDVBNkZFMzM1Mjk3MDBGNkM5RUNFNkI3QzczODY4NzVGODk0MwotOjE1MUZCRjAwN0E0MzlCQUZEMTlGOUIzM0ZENTk3MzhERkVBQ0IxRDFCRDY4RjU2NzFFQTcKLToxNTFGRDQwMEJBMjMzNkJBMTM1NjdGNUU4MzZFNzcwMzhFQUZCMzI4MDMxQUI2RDNDNUY3Ci06MTUxRkU5MDBGNjhBRkIzRjEwNkVFOUZDN0VBODdGODRDNEQyM0FERkUwRTQzQTdGRDU5QwotOjE1MUZGRTAwQzE3NTVFNkZDOEQwMEUzQjM5RUQ4RTg2QUZBMDBENzQxQjA0NUQ4QjVFN0IKLToxNTIwMTMwMDgzQUQ5RDBEMDI0NzRGN0UxQzE0QzdBQ0I1MTZBREU2REEzQzNDNEZGNjMwCi06MTUyMDI4MDA1QUM2REVCMUYxOENFNzcxRTVFMzk0RjkyRkJDQjc0NzNFNEQzMUNFNzNFNAotOjE1MjAzRDAwMTU3NTY5RkIyMDZFOTRDMTk3QzlGNUVGNkEwQjhDMzNEQTQxRENBM0I3RjQKLToxNTIwNTIwMEQ5QTAxRjQwQkJGMkQ5MUVFQjNCOUYyM0E2MUVEMTg3NTVENDE3QkVGNzA0Ci06MTUyMDY3MDA3NzQwODVGOUVBMUU5QzlGQUU2N0I4MzJCRUUxMkVDMDU1MDA3RTIxNkRGRgotOjE1MjA3QzAwNTc0M0MzQUE2QjQzOENEOTU0NjY0RjJEN0ZBMUEzM0Q4RDMxN0IyQUQ3QzUKLToxNTIwOTEwMDAxRkY2MDQ3MURCNkY3QUNGNjE2NjNCRTRFQkZFQTU4NDhCNTE0RTY1OTUxCi06MTUyMEE2MDBFMEJBRUY2NTlFRkJDNTdENTM4MkQzQTdDMjlFODZGQjc4NkMwN0JFOEZGNAotOjE1MjBCQjAwQjc2NTkwOURFNzkxQzNCQTQ2RDEyRjQ1ODZDMTJGQkRBREI5QTI2NzBDOTkKLToxNTIwRDAwMEY0NEQ3OUZEQzk4RjMyRjMzQjlFQ0ZEMEE5Rjk3MEJCMUFENzEyQzRGRkJDCi06MTUyMEU1MDBBOTU0NkE1RUVFNUM4RkFGNDdCMkZENzBCMzY0MEFFQ0FCMUJDNjU2Qjg4QwotOjE1MjBGQTAwRDRBMEExOEUzNkI0QzVBRTQyNkU5MzI1MkJDRUM2RjMyREJGNEJBNTczNjgKLToxNTIxMEYwMDNGOTUyOTk2OUYzOURGOUUzNzI4NTVGMjdCNzA1NDVCM0RCQzgwMjhCNzNCCi06MTUyMTI0MDAxRUZBODRDMzBBOUVBMTFBQTE4OEU3MDkzQzQzNTVFNkMwREJENTU4RkM0RAotOjE1MjEzOTAwRUIyODRFMzQ2MkY5MkRBMTQxRUQ5NkQwREJBODMzNjYxNUQ2QzE5ODAwREYKLToxNTIxNEUwMEYzQTkwMUVFREIxQTMzMzNGRkRGRDYxOEVDQ0Y2MjE4QTMxMDFGNEQ2ODBFCi06MTUyMTYzMDBGQ0ZCQjdEMUE3N0IwQjNDMUREQTdCQkZDREYwRTQ5RjYyNzE5MjhEQTc3NQotOjE1MjE3ODAwODQ1MTQ1NEVBRUYxMjk4RTgwNDUxQkVGMDJCQTgzRDE4QzUyQUNFRkJCODEKLToxNTIxOEQwMEY1MEIzM0ZEQkVFRThCMzQ5REU0OTI5MzZCMEJEMjc5NUYzMDlGMTQ3OTgwCi06MTUyMUEyMDBGOEM4RDdGQzVCMzEyN0EyOEY5QUVDMkM1NzI5Q0IxOUJBMTdDNTIxNzM3MQotOjE1MjFCNzAwNUNCQzZFOUNBMkZDQzEyRDlBQjJCQzE3RkFGQTM0N0NEMzZCNEFDQTY5RTcKLToxNTIxQ0MwMEIzRDExNjRGNUU3Qzg0OTA2NzE0RTc5QUIzMEUzMTZGQ0Q0M0U3MjE4QzI2Ci06MTUyMUUxMDA1REYyRTJGNjlCNEVGOTREQzA3REQ2MjBCNENGOTRBMkVGOUE5ODZGODE5NgotOjE1MjFGNjAwRUI5RjY5REY4REYzOEE0MjMxN0UxMUVGQjdDNTdEMTRBMjBDRkZFN0I5QUQKLToxNTIyMEIwMEVGODNFNTk2QTIxRTREQ0M0MEJFMTI3NDgyRTc4QzUzOTdFMENGNjVFNzlBCi06MTUyMjIwMDAwM0ZBMUJGOTQ1QkNCRTYwODJFNTFCQjFCQzBGRjlBNDg5N0NDODNGNUY3MwotOjE1MjIzNTAwOEVCQzczREQxM0VCRjExNTAzMTlGRDQ2M0MxMzhGNzAzQ0ZFMjk4RTlGQjkKLToxNTIyNEEwMEUzNEQzMEY5Q0NGRjc5MTc3NUMwMUMwRUVGQUZFODIzQzMyQTlFQTNDM0QyCi06MTUyMjVGMDA5ODk3N0Y5MzMwQjE0RUQ2MzgwMEZDQzcwN0VDRjdDOUYwNzYyM0ZFQzkyNgotOjE1MjI3NDAwNDc3OEZCMzg5RDc4MTYxRDZCNEQwMEVCMzIzOTI2QjkxQzZGRDlEQTY5ODcKLToxNTIyODkwMEUyM0QxMTZDNEU2M0E3OTkzRTVGMUIzMjM4MkYxNTg2Q0NFNDUyNkJGMDZBCi06MTUyMjlFMDA5Qzg0ODBFMTEyRjlBMDBDMUUxRUE0NEYyREM1RDhGNTE4Q0I0N0I0RjMzNAotOjE1MjJCMzAwRTA3RDZEMzlCNUY3MURENDMxMjU3OTA4RjdFNkE5QTUyNzJDQzYwNkRCN0EKLToxNTIyQzgwMDdBOTg3NEFBRUNERUE4QjBDMUU0ODI3QzYxQjkwNEVEQTUxNUJBODE5Mzc5Ci06MTUyMkREMDBFNEMyQTI0RThEMUVCODUzM0I3RjIxRTUyNkUzMDM2Q0ZFRURDNTNFOTJFOAotOjE1MjJGMjAwNEY2OTkyRjIyRUY1NDVGOEY5Nzk2QkVFQjJBMDcwRkFGQ0E5QTM2RTg4NzYKLToxNTIzMDcwMENERTdCMkU2NTBFMzI3Q0Q3QjZGNzQwRTE1RkU0QkQzRDIyOUNDMjNFQ0RCCi06MTUyMzFDMDA3N0YyRjk2OUI2NEU3MTFENDI1RTRBODQ1QzU4OUYwNEEzM0M3RjREMUVDMQotOjE1MjMzMTAwMzA3MTNFOERGRTBDRjUwOTc1ODBDOTRBRTc3M0U5QTM1RkE2RTZEOEY0N0UKLToxNTIzNDYwMDM4NEI5RjU5REU3ODAwQzYzRTlEMzBFNkY5MDI4REI4N0VFMjUxOTY5N0RDCi06MTUyMzVCMDA3Rjg4RkUxNEU2RTlDRjI4NzcwNkFGQzA5OEJDMkJFOTY1RTdCMDdCMUZBNAotOjE1MjM3MDAwRTVGNEUzOEZFMjI1MUIwNzk4REU2MTBFOTc4MDlCMDgzRjI3RTZCNTUxRjMKLToxNTIzODUwMDUxMzc5MTUzNTdDMDREODQxRjE1RTNEREMyRkY5RUY4RTY3Q0NFMzcwMjNCCi06MTUyMzlBMDA2RTIyQkM1NUUwM0YyN0VBMjY3M0VBMEFCODg5RjBCNTAyRkYzMjgxQkY3NwotOjE1MjNBRjAwNTNENEM1N0FGOEJFRDg2NjZGQkE2RDY1Rjg4RTY3REJGMDRDOUIwQkY0MjYKLToxNTIzQzQwMEE4MTA3Qzk1QTQwQzk4MjgyRjQ5REVBRkExOUYwOTI4ODM3ODg2NzZFRTcwCi06MTUyM0Q5MDBEQzUwNUY5NTA0RjNEM0Y5MUQxMzVBOTEzMjY0MkVEMjJGQURGNTU1N0ZCNgotOjE1MjNFRTAwQTY0OTkxRDNFNjZCNTFFNzE2MTdDRkZCOUMzNzMzMzI2MzhEMTQ5OTMwMDIKLToxNTI0MDMwMDJEOUQ5RDA5QjYyRDc5MTVEN0QxMzI2M0UwRkJFMDIzMjU3NjZFODg0RUU5Ci06MTUyNDE4MDAxQjhGNjI3Q0E1RUQwQUUyOTAwRjBFNjhCRDg1ODMyQUYyMzY3N0FCREY3QwotOjE1MjQyRDAwQjRDNjMzRDMwMUI0MDkxMDFCMzg5MkVGQjJGRDQ2RkVGRDg4OTkzQjlFOEUKLToxNTI0NDIwMDc5RkUyNEQwODQzMTYzMUYyNzJGREREQ0E5MjVGRTg5QUZGM0M5QzJBNkFDCi06MTUyNDU3MDA3REREMzhEOThCQjlBMkQ2MThFOTE5NjAzOTJCQjJGMEE3Mzg1Njk2NjE5RAotOjE1MjQ2QzAwNkUwMEM0MUE4RkIxQjVGN0NDREVEMzA2QzUxOTEwRTdBOUZFRjBGRDQ3RjAKLToxNTI0ODEwMERCNzhBQTJERjgzRkIwRDEzOUYxNDQ1ODE5QTA0RTRGMTc5MzY3MjlFMDJFCi06MTUyNDk2MDBBQkZGMkNFMzc3RTlFNzM5N0UxNzc4QzEzQTQ0RUVDMDMzMjYyNjVCMTcwRAotOjE1MjRBQjAwMjk4RTM3M0EwRkM2QjQzRUQwMTU3OTZEOENERkNGMDBCODcwM0QwNUM2RjgKLToxNTI0QzAwMEUzM0M3NjQ3MDBGODY2MkNDNzdCQzMzMDg3RDhGMkJGQjhCRkFBNDY5NjVGCi06MTUyNEQ1MDBEMjQyMEZERUJERDc2MThDRkYzQTQzNUJDRTEzODdCODIyNDA5N0FGNDk4OAotOjE1MjRFQTAwOThEODVGN0RFMEY3RTVCMzAzQzYxNTQxMTNGQjM3OEIyNjk0QkI3MjY4RTQKLToxNTI0RkYwMDY2QjdCRkE0QjFDMTQ2M0Y2Q0EzQUZFNEExMkZEOUU4MkZDRTQzREY3RjgwCi06MTUyNTE0MDA4M0Y0MzFCRUU4QUMwQzE4MTYyRkM4QzNEODI1Q0VDMzYyQTA5NTRCNUZGNQotOjE1MjUyOTAwM0UzQkM0NjgyOTkxMDEwM0VGNDA4MkI5Qjc4OUIxOEZBNEYwM0I4RjE2REMKLToxNTI1M0UwMDQ3MDZFODYxODg3QkQwQTc0REQ5RTMxQzVDNzM5M0ZENjY2NzlEQTFFMTA4Ci06MTUyNTUzMDA1RDYwNTMyRkZBQUJEODdFNUZDOTZEMkJGQzc1Q0Q0MUU1NEYyQTJBQjdCQgotOjE1MjU2ODAwMkEwRkZFRjFBNjA3OTRDRERGREJEOURFRjJFQzRFNjU1M0NCQjY5NkE2MTYKLToxNTI1N0QwMDlEMkQ0MUE1RkFGMTA3QjdFRjY4Njk2OERERkVEREVGQjRCNjNGNUVCRTVDCi06MTUyNTkyMDBGMkVFOTUwMUE1RTQ5OTlEQUQ0RkVGRDhCMUZEQjlDNzlCOUU2RjBBQURBRgotOjE1MjVBNzAwNUE1NUI5RUFFRTE1N0Y3NDk3RjJENEQzREI1QTc2MkE4MUNBQjI1NTE1NkIKLToxNTI1QkMwMDY1OTVBQkUxMjU1ODFFMDg5NkRGQURGOEQzRkI1QjE2QkRCMkIyRTY5NkVCCi06MTUyNUQxMDBCNkVERUQ2NTRGNkU3RkI2QURBQ0E5QjlBOTZERTcwQjY1Q0YzNjNERkRBNwotOjE1MjVFNjAwNUNEOUNFMUQ0Rjk2QjVFQzZDMkI3QkVBODVCMkE2QTY2RDBDQjY2REZCMjQKLToxNTI1RkIwMEY2QjY5NTNCNkY1Qjc1OEY3MkE3RDJEMkZDNzRCQkQyRENGMjU0RDM3NzVCCi06MTUyNjEwMDBCN0I1MkI0RkI2MzYzREY3OUQxNkE1NjQ1NzdCQ0JBRUY2MTU0OEU1RkE3NgotOjE1MjYyNTAwRjAzN0VGNzhGQUY5OTYxRDY1NEY0MUIzMUU2RjZBN0ZGNkYxRTYxRENGOTUKLToxNTI2M0EwMEFGN0NGMkI2N0IyQUFFODUzRjhEOUU5RDY3OUFFMzBCMzdFRTY3RjcxQTRECi06MTUyNjRGMDBGODhEQjlCRThBQzYxMkE1OUNBRUM0QjM1Q0Q2Mzk4RDg4QjQwNkVGRDFCOAotOjE1MjY2NDAwMzgxNDNBRDI1NjQwRkE4REM2REZBN0QyRTczNDFBOTU4REU2MjdCRjcwM0IKLToxNTI2NzkwMEFDOTFFNDg3MzVCRjUyNkRGODYxRUM3RDBDQjZDNDBCQ0YzN0QxNzZFMjZGCi06MTUyNjhFMDAzRTA5REQ2RkI0N0U5MTcyRkY3NEE5MTQ2QzUwODY2ODI5OTQyRDIyQzNDNgotOjE1MjZBMzAwNTUyMUE1ODdCMkYyQjBCNDM3MDAzMEI0Mzc2QjZEMzBBQzI3ODMwRjA0QjUKLToxNTI2QjgwMDlDNjZCNzUyQjRDRUYyMDkwQkMwMzZDRTIwM0M5NkMwRkY1NzAxRjczRTc4Ci06MTUyNkNEMDBGOUU1MzY4QzEzQ0ZGRDc1NkExNkYyNjUzRkQ3NjAzRkQzMTBCREMyRjcxRgotOjE1MjZFMjAwQ0FCQTU4RkQxMkEzMUZFQTEzRjlCMkU5ODU2RkNFMDI3RDNCNEZCNDhEOTkKLToxNTI2RjcwMEIwQjNEMzJCMUQ2NDJFRjI4NzdDNzg5NTkzMTREQjMwMDNFNkE5OThFM0ZECi06MTUyNzBDMDA0NkM2NTdFMDNFQTlENzU3N0RBNzg2NkRFRjAyMzkzQTdGNTJBOUUxQjVENQotOjE1MjcyMTAwNkE3RUMwQzVEN0FCMEUxOTYxRTU4NzQ2Q0QwOEQwODY3OENBMEJERjVCQzgKLToxNTI3MzYwMDc0RjAxQzk3Qjc3QTg1MDYzMEQzNEVGM0ExNTQ4QUQxRUM2MkZENzJDQzlFCi06MTUyNzRCMDAzQzlENEFDREMxRkJDNEY4QkE3MzhGNzExM0Y4MDVDNDM5RjkxNkFFRTczMwotOjE1Mjc2MDAwMDcwMDc2OENGMUU1MDQ3Rjc5MDhGOTBBRUZDNzc1QjlGOTU2QkY1OTY3Q0MKLToxNTI3NzUwMDZDQTJCRkMzQkVCQkNDRkEwRUY3NTcxNDA1QzY5RERDOTU3MDI5Rjc5ODBGCi06MTUyNzhBMDBDRUVBRTNEMERGMDcxODZFMUM4NzM4MDY4Qjk0RDdDQ0QyMkYxRDZCRUQ0QQotOjE1Mjc5RjAwRUJCRjI4NzM0QkRFRjY3RUE4NzkyN0U1RkFBQUYyRDI3NzUyQjNFQ0ZENDkKLToxNTI3QjQwMDgxRkNDOEMwOEZEN0Q2NUY2RDExOTcxMTRERkVFQzU1NkM5MzEyMUQ0ODQ4Ci06MTUyN0M5MDBDQ0MxM0JFN0U4NjIyMzE0RUQ0ODkwRTJCNjQ2NEY5MjZDRjE0Njk3ODI4QgotOjE1MjdERTAwM0YzRUM3RUVDM0YzRjk2QUExRUQwRjE4Nzg3RjI5Q0UxRERGOTQ3MEJFM0EKLToxNTI3RjMwMEE0MUExOEQzNDhFRjNGQTNFMTFENTFGNUI4Q0YxMkM2QjNEQjYxMTY5M0Q0Ci06MTUyODA4MDBGNkVBNDFENTBDNTVBRURCQTQxNEFDRkJEMDc5RDFGMDg1NkU2N0VCOERBMAotOjE1MjgxRDAwNDYyMjM1RUIyM0IxMkYxMjhBRjZEMDlCQjJGNEEwMUVGM0JGRTc2M0JEMDEKLToxNTI4MzIwMDY2QTg3NzNBQkRBRjEyMzFGMDdFRUU0MEI0OUExMkY5MTVFQTY2NkQ4M0Q5Ci06MTUyODQ3MDA3OTM3OTVGNjNBRENFQjM1REM0NzY3RjYxN0JFREZFM0MwRjU4QzhCRkMyQwotOjE1Mjg1QzAwQ0VBQUU2MDE4ODlEQ0IyMDRFNzg5MjVFMjkyNDJFQ0ZEODgwRjY5ODcyQTAKLToxNTI4NzEwMDczNzBBRTcyRjNBQTM3OTZDRTBGQkVCQUVDRDZFMDE4QzA5MURFRDQ4OTRBCi06MTUyODg2MDBENEFDNjU4QTIzQzhGODkxN0IwQzVDNzM3NkMxMzgzQzBGN0E5RkRFMEY0NAotOjE1Mjg5QjAwMUIzRkM2RkRGMUY4MzFGMzJGMTY5NkE4NkM3RDE4NkNFNEQxNDIxMTZGOTcKLToxNTI4QjAwMDI5MEVCNjc2MUEwNzVDNTY1REFCNUUzQkQ0Mzk1ODM3QTBFMjlEQTdDODEyCi06MTUyOEM1MDAyRkFFRTdFNkQyQzJGMThCREZCN0MyRjdFRjM5Mzg1RkI4QTY3OUUxMEQ3MQotOjE1MjhEQTAwMUMzRjdCRTlFMkEyNDFDREZCREY0NzI4MkE0QTZEMTRDRkI0NUY2NEU3MkQKLToxNTI4RUYwMEU3Q0NEMEVCNkExRkUwNUQ1NDU0QUFERDg1NzdDMjhFNDdENTUyNzJEMTc0Ci06MTUyOTA0MDBFODBDOUQ2OEMzM0QyRTA1RkJBOTZFODU2NjQyOUZBMEFFMzg3NzBGMUI4RAotOjE1MjkxOTAwQjhCNzFGQzRGNThFRjA4Rjc5MUY4OEIxOEIzMUI0QzRFNjYxMEFGMDE1RkEKLToxNTI5MkUwMDZBNjRGQzg3N0Y2QzhFNERBNURDQTcwQjc4M0JENzQzOUZBRUNERDM3NzE5Ci06MTUyOTQzMDAzMDhGOUU5RkRCQTZERUE5MTRDQkU5NDAzQ0VERTJGQjQ1MzBDNjlDRTNCMwotOjE1Mjk1ODAwM0E4QzgzRkQ0NjAxQ0M0QjQyQzkyMzg2MzE5NjcyNUJERkNFODBCMTgxMUYKLToxNTI5NkQwMDM2RjBBQzkwM0JFRUE3QTIyQ0MyMjAwN0FCNEUzRjk0QjFGN0YxOTcwRDYzCi06MTUyOTgyMDBDQ0E3NjJGQjhGNTBBN0Y0OEQ2Q0Q5NUYwNTM5RTZFMzE1QzdFRDgyNjgwQgotOjE1Mjk5NzAwMDdGNTdGQ0U2NTNFMzU5Q0ZEMUQ5MzNGRUEzM0IzMDVGQjBENEJENkJEQzcKLToxNTI5QUMwMDIwRUJEQUU4ODA3OUY1QjhGMEY5RjY3NkEzNEU4QTc2MUZGRDBENkYzNzhFCi06MTUyOUMxMDBGNjNERTJEQjA1Rjg0QTU5OUY0NThDNUQyQzZFMTMzQUZBMkJBRUEzNzhDRgotOjE1MjlENjAwN0VEQTUxRjc4MDg2N0I4NkRGQjJGNDUwRjQwOTk3NjcwNjU3RTgzNzlDNUQKLToxNTI5RUIwMEU3MzZEMDBERTA4M0U5QzZBMkEyQjU5QUVGMTc4RUEwQTUyMzc4M0NCRkM5Ci06MTUyQTAwMDA4REVGQjMwQTFEMzlBMzYyNUNCNzhDOUM1OTg3RkFFMUFENEMzMEJEMzAyMQotOjE1MkExNTAwRjU2NUFBRUJGRDIxNEQwMjVCQkI0Q0U4MDM1RjBGQzhFRUZGMTE5MEI3ODgKLToxNTJBMkEwMDRGM0VDNkUyOUREOUEwMUY1RUIwQkY1NzdFMkRFNDZFOEQwQkRCMzdCOEFBCi06MTUyQTNGMDA2NzlENEZFRTJCNzE3QzQzN0Q5NEZEMzQzQTMwQUU3QTIxOEVBQzE3RkRBMwotOjE1MkE1NDAwM0VDM0E2MjNFREEwMjNBRDFGNzAxRDcxODA5QzI1QTEyM0U1OTdCOTlDNTMKLToxNTJBNjkwMDU5RUUwMUY2RkZGMTRDM0YyMjNFNEZCODRENkJGREI3QjY3MkIwNjc2NjI3Ci06MTUyQTdFMDA0OUI0Q0VGNDQ3RkZBN0JERUY4RjhFRTJCOEYzQUMxRUY1NDgzM0QyMjAxNQotOjE1MkE5MzAwNUFDM0NDMjBCMDkwNUE0NDM4OTJBMzM4MzM2MjUwMjQ1OTg0ODFCMDVFMkQKLToxNTJBQTgwMDk5MTA3Njk2NzNCMkREOTJCMEM3QjFCRDEwOUI2NEI5M0I2RTFGRUY4NUU3Ci06MTUyQUJEMDBDNDIzMTg4OTAxMzdCOEU5MTM1ODk2MTUzMzcyMjRBRjdDMEIzOTg1MDdDOQotOjE1MkFEMjAwMzk3QzRGMjRFMkMyMzlCMDIxREMyQzIxMUM5NzY0RjEzODhGRDhCQUFDRTMKLToxNTJBRTcwMENGMjgzRTYyRTNDNDY2RUVGQkE5RUUxRThEODQ2Q0VDRERCREY3RUU4RjIxCi06MTUyQUZDMDA5QjdFRjNCQUVCRjdCN0JFREY2RjU1N0RBQkVBNUJERjVBNjlBQzREM0RDMAotOjE1MkIxMTAwNjRBQzRFRDUxOUQ0MDc1QUY2NTM1M0RDMkUzNEU2MzcxRUI5ODY5RjJCMTAKLToxNTJCMjYwMDBBQ0VCMkVFNDVGREI1NTY1NEJBNUIwRERFODE3REEyOTE0RUM4Njk4MjRGCi06MTUyQjNCMDA3QjUwQzVGQUQ5ODQ3NUFFMUUzMkY3MDM3QzNENjk5NDlGMERFNEVCNURBMwotOjE1MkI1MDAwQjA5MTMxQ0VEOEExMDUyNzY4NkUzQUNDRDdCRUE0NTRCNzAxQkRDNEQ1MTQKLToxNTJCNjUwMEE5OTM1Q0RFOEJBNzg2QzE5M0YzMjRCOURCNTgyRDlGMzQ3NDdBRkJGNUY4Ci06MTUyQjdBMDAxMUY1QjQ2Qzg2QjNFQTYxRURFQTA3Qzg4MzJFMzZFNkZFMDdGMTczMDVCQgotOjE1MkI4RjAwNUY3N0JDMjUzQzI3M0MyQzdDNTZGMDA5MzdEOEFGRDk3RjYzM0Y2NERGRTkKLToxNTJCQTQwMDYzQzNFQzU5NjZCMERENkMwN0RCQ0VGRTlBNkQ2MThGQjM4REVDNjFGNjJBCi06MTUyQkI5MDAyMEVCNjAwQUZCMTI1QkNGRkU4QzdEOTE3RDgxQjVCMTdCRDk2QUI2OEE2MQotOjE1MkJDRTAwQUQ2NDJCRDg3MjlBNDFCNkIwNjZENkM0MUFEOTMyMTY2NjRCNTkwMzBCRDgKLToxNTJCRTMwMEIxMjBGQjBDQkI5QjdEOUFENUQzRjMyOTc2MTdBQkEzQTc5NjdEOTI5RTBGCi06MTUyQkY4MDAzQkQ5MTI3QTZBRThGOTA0M0Q4QkU5QTlBNjQ3QTZBNzhBM0Y5NUY0MkNDNwotOjE1MkMwRDAwRTI0RjA1N0ZFRUUwQ0Y0MkVCNTlDMDlGNzJFQjk5OUY3QjAyRDZFM0NGRTEKLToxNTJDMjIwMDNEQkVCQzY3NUVERUUzOURGNjk0Q0Q3OEE0NUI5RUI5QjczQ0E1QjMzRTE1Ci06MTUyQzM3MDA3MzNFRjBGMTdDRTg1MzcyREJBN0Y4MjMzRkVFREIzRTJFNkUzQjMzOEU1MgotOjE1MkM0QzAwRjNCMUMxNUE0REU2Njc0QjQ4NTZBOTZDRUE4QzMyRjkyOEZDNkFDODRGRDYKLToxNTJDNjEwMEI3QkU2QkU5M0I2RDdERDdEM0I3MjREMDM3RkE5NkNBNUE4QTFGRDE3NDQyCi06MTUyQzc2MDBENkE2QTU2OTUyMkMwOThBMjZDOThCOEY0QTMxRkFBN0U4OUY1OTdDMTQxOQotOjE1MkM4QjAwRTU5OEI2NDk2QkI5MEQzNjU5QjZGQ0RDOTY5RjQwN0UzMUNCQUZEOEYyMDIKLToxNTJDQTAwMDczOTA1RkNBRjIyQkIxRkMwQUM4MEZGOTUxOTlGQzJDQUFDNEEyNDEyQkMxCi06MTUyQ0I1MDAyRkU4RjkwNkFEM0NBMEQ3MUJCNEQyNDI4RjM3NDg2OUEyMDJGNjY0NjVENwotOjE1MkNDQTAwMkQ4ODBFNDlCRTRCQTNEOTc1QkY5M0U0NjlGODQ1Qjk5RDg3OTBFRTRENkIKLToxNTJDREYwMDA5MERBRTMzNzVENEZFQUJGQjVENjc5QTU1OEU5RjBGMDkxQkZEOTAzMDJDCi06MTUyQ0Y0MDA2RTdGODdDMjRBMjk4Q0ZDMERGODhCNjc5QjU1NUU3NkJBQ0VCMDcxNjdDRgotOjE1MkQwOTAwRTMxQ0Y1NDg1QjMwRUEyRjcxOUFFODMyOUY3NzA3NzVDQ0YzMThFQUM5OTQKLToxNTJEMUUwMEQzMDQzQjgxNUZFMDUwNzI5OEYxRTNBN0FDNzBFQTEzNUJFNUM1ODY2RUU3Ci06MTUyRDMzMDBFNTkzRkEyRkE2N0Y5NEUyNDVEMTVGNEE4QjBERDEwNUJCQTNCM0JGQTNBRgotOjE1MkQ0ODAwQzI1NDlDNzRERUI3RTQ5OEZBRDYyRDdGOEVGRkYxRUM1Q0U4MjY5OEU3NzAKLToxNTJENUQwMEY3NjU2REQyQjRDNzZBRUE2RDcwNUQ0Njk5RUI3NDE0NUFERkZDOUNCNEU2Ci06MTUyRDcyMDA4Mzc4OEREMTFDMzREODQ0N0RBNzgzMjUxQzRENDYxMUVDQTE0NjlBRDVCOQotOjE1MkQ4NzAwQzlFQTY2QkUxRTM3Rjk0M0U3MzJFMDA0NkVBQzg5OEU1MzNBMEY2QjgyMTgKLToxNTJEOUMwMDRFQjQ1MTRGQjhBMDhFNTY3M0M5MEQ0NjExQkI4QjYwQkZDQjcwMDYyMkRDCi06MTUyREIxMDA5REU5NTlGQzI0QzFGNDYzRjI1QjA2RkFEQURBOTk2QjEyNDE1OUU3N0VFMAotOjE1MkRDNjAwRTBFRjAyOUNDQjE1MUE0NEEyOTkxNEVGNkExMDMxM0Y5NkFBRjUzN0EwMTkKLToxNTJEREIwMDNCMkY4NUE4QzgyNkJEOUVBRjNCQzE3RTZDMzNEN0M5ODAzQkVBMjhBNzI3Ci06MTUyREYwMDAzMkVBNzQ5NDJGOUUyOTU3QTU3ODVEMTg2RjU3QkNBRTAxRUYyOEVBOUFGRgotOjE1MkUwNTAwMEU3MjE5MUE3MTM5MUZDM0RFNjIzMEE4QzU3OTlCNjhEMjIyNUNENzI4RDEKLToxNTJFMUEwMDAyRkY1ODc2NkUxQkM1ODk3MkZCODc5MDk1Q0QzM0NGMzEyREMyRjVGMjBFCi06MTUyRTJGMDAzN0YxMzNBODJDQjhDNTNDMDNDREI2NTlGNzE0MjQyRDVEMDhBQ0VCQ0VBMQotOjE1MkU0NDAwMjVBMDEyMzQ1RjQ5RTgzQTRCMjhEOERGODFGQkFEMTVFMjMyOTZERUExMTMKLToxNTJFNTkwMDdCNjRCMTgxNDU3N0MyQUU5QzhCQTU2NUREQjRGRjZBRUEzMUQ1NjcwQTlCCi06MTUyRTZFMDAxQTc4OUU5NDFGNUY0N0MyNzdCNDU3NEYyRTg4MkI0MkFBMTdERjQ2NEVEQwotOjE1MkU4MzAwQ0YyM0ZBNUZGQjUwQkYwQUY5QTAyRUNBNjcwREE2Mjc2OERFMjQyRUZCNzYKLToxNTJFOTgwMEVFODNERkE1RkM1RkVFODMzRkZDRUFDOUFGN0Y4NjVGMzlGOUY1Q0NGMDgwCi06MTUyRUFEMDBEQkJBODJFMDkyNUVFQkZCRkE4M0FGODc0ODYwRDYzQ0YyMTU3RDFCM0JGQwotOjE1MkVDMjAwQTM1NUFDN0M1RDZEQUY3QTI1RjQ2Q0QzMDQ1RkI3NTgxNEJGNDRGNTc5OTkKLToxNTJFRDcwMDRBNUJCNEYyQkNFQUJBNEZFMzM2Q0FDQjJEQkJGMzkzNEY4OENCQzRENDk2Ci06MTUyRUVDMDA5MEVFQTBGMTUxOTZCRkRGQzdGNEVCODYyQjY5REFFM0U0NzZENEM3MEZCQwotOjE1MkYwMTAwMzQwNjMwN0ZBMkYyOThGRUI3QzYxREMyRUIyQUYwNTFDQzVFMDk4RDNDRkEKLToxNTJGMTYwMEY4NjYyM0MxNDJCNEJENDJGMDlERDcwNTZEOUZGQUVDODZEN0I0M0IyMkE2Ci06MTUyRjJCMDA1NDg2QjRDRjIwRENDNTZGQUU1ODFENzJFRDQ2RjkzQjQ3RDk0ODIxQ0RCMgotOjE1MkY0MDAwRTNCRTMzRUE3MjVEQTNGMDVERkRBRUI2RDdDOUZGRTk3RUQzRkQzNzk2RkIKLToxNTJGNTUwMEZCM0ZGNTlGQzk2NkZEN0RGNjc5QzBFOENGRkIxMjhFMzMzQUYwQjY4RENGCi06MTUyRjZBMDA4RDZCRjExRjE0MzY3Q0VCNUI4NTBERDA3RkU4NEYzRkFCMkNCQ0YwQjRCMAotOjE1MkY3RjAwNTI3MEZFQTJCQTg2NUQwQTJEMUMzRkE5NDIyNzQ4RjhDOTAwRjRGNUNDREMKLToxNTJGOTQwMDNBMTIwRDcwRUVENTJGRkQwN0Y1RkE0MzU3OEM4NUMyQ0IxNEU3OTJFMUQ0Ci06MTUyRkE5MDA4QTFGNjlDNEJDMTVGOTRGM0U3NDVFNzdBNTBBMUI0NjlGMjg1Q0M2RjVBRgotOjE1MkZCRTAwNjQ1RkUyNkJERTQ3MTM4RTE0RDFGQUI4OEU3QUZDRTE1MDc3Mzg3MDhBQjMKLToxNTJGRDMwMEYyOTc3RUEzQTEyRTEyNjA4RUZFNjhENDg1RkQxMDY5RDc1MTg5QzNGRUM5Ci06MTUyRkU4MDBFM0EzQUY1MTNCMkM5NkY3MjZCMzI0NEYxNkM5RERGMUZENzE0RDExRDZCRgotOjE1MkZGRDAwNjlENDRFN0ZBRUMzNkUyODhEMDBFQzI5MTdGNjEwQjRFNDY0RjVFRjBEMDIKLToxNTMwMTIwMDhBQkJFNzREQjk3RTU5OTRFMjZGOEZBRDZFRTBFQkFGMDVFNjU5NEQzMUQ1Ci06MTUzMDI3MDBGNTZERUEyNzlEMERCMUYxQzMwRDRDM0ZBRTRGODJGRkIwQkU0N0UxRUI3QgotOjE1MzAzQzAwQzk1RjRDMUQyMTFFRUFFNkY2NDg2QTJEN0I0MUJDQkRFOTdCQjlEREYwRUIKLToxNTMwNTEwMDVBREVENjQ4QUU0REVEQTVCNjE2RDc0NEEyQUJDNEI0MzBERTJFQTYzNUM0Ci06MTUzMDY2MDBFMDhEM0QzMjU3RUEwMEVDMUQ3MzNCQTJFNUE5ODQyRUI4NUVDNjNDOTNGNAotOjE1MzA3QjAwREIwQjA1MkZBMjhEQjhDRTIxNkNDODg4NDJFRTRFMjU4Q0JCRTIxQUY3QjcKLToxNTMwOTAwMDdGRUYyNzU0MUVCOTIxMTM0RUQyRDREMDEzMTMxQkNBNDg2RTQ0NUI5OTdBCi06MTUzMEE1MDBBQzFFMzIxNjA2NTI5RDYzMzc5RENCMDg5N0M2RTlGN0IyMkU4OUUwNjkxNgotOjE1MzBCQTAwQTUzMjJFQTE2RDA1RkIzNDlERkFFMTU2Q0E5N0E1MDY4QzhCQkM3RTQ5NDYKLToxNTMwQ0YwMDlEREFBOTE0MjRDMERFRUVENkMyNEMzRjA1M0JEQUEzRTgyRjc3NDdDRTg1Ci06MTUzMEU0MDAyQkJGN0VCNEIwQTE4Rjc1MkI3REYxMDM0QUU5MTI3MTU5NUY2NEFGMzIxNwotOjE1MzBGOTAwM0ZEMUFCRUVERkE5MjlGQjlCMkY3M0Q5NTJDQTFDRUM1QkIzQTRGMkIzREMKLToxNTMxMEUwMDdDOEYyODE4MUZDNURBNkJEOUEyMDRGNjAwRjU4QTE0QUY4RkI5ODZFREM2Ci06MTUzMTIzMDAzMkVERjVFM0JCNEQyNDE5M0FGMzlBMkVCNDExRUZFQUE3OERGREUzOUExQQotOjE1MzEzODAwODJGNTQxNTc2QTgwRDJFRDAyOEVGOTVFNUU3OUU2QTA1MTkxNzlDRUE4QjUKLToxNTMxNEQwMDI1QkM1NDUwM0QzMzg1MjQxNjUwMzhEQTY3QURCQzhCREI2RUUxNzk0ODExCi06MTUzMTYyMDA5QTcxOTFFNkExRTVGMjUzM0FCN0IxQjg0MUQzMjg5RDhFQkU0MThDMURBMgotOjE1MzE3NzAwRDNDMzk5MUY1MERDNURENDQ2N0E2OTlDMUI1MDkxNjc3NjJFRjQ3ODYwMDAKLToxNTMxOEMwMDRCODBCQUZDNzMyN0Q1ODNGMTVFQzVCQkIyNTc3NTY4NDNBQTZCN0NCODdBCi06MTUzMUExMDAxMUU3RTg3REE3OEU5OEY2QkM0RjMzQjYwMDNBMDBEMDI5QTM5RkI4QUUyQQotOjE1MzFCNjAwNDdBNTdBRjczQkQ2RUQ1MzEzNDU3OTc3NkNBNEIxRDY5RkQ0QkVGMTBGNDYKLToxNTMxQ0IwMEUyOEYwRjBBOUM2NjdDMEZDNDk3Nzk4MUVCMDNGMjVCODA2MDMzMDU3RUIyCi06MTUzMUUwMDAyQ0MxRjVCNzgwMTM3MzNGMjRDOUY3NDM4Q0YxNUVBNTNDRDNEMzE3Q0M5MAotOjE1MzFGNTAwQkM5MDkyNTY2QUJDMEYyOTU4QUJBOUEyQUMxOTFFMTdGNkI4MDdCNERBQTgKLToxNTMyMEEwMEM4ODE0NjlDRjNGMjc3MTE2RkQxQkNCNjNDMEVGNzcxMjM2MEI5ODVCMzNGCi06MTUzMjFGMDAwM0FBMzkyRTFDMzA3QzE5NEYwM0ZDQjBCNkVGQ0FFRDhGRjRGMTNEMDA5QQotOjE1MzIzNDAwMDc3MDk3RUVENTZCMzg5RENDRjNDOTAyMUJEMUEwNDc2RDlFNEIxRUU1QkUKLToxNTMyNDkwMDdERTlBRjI4MkY2MTJERkFCMjE0QTdBRjkwM0NBMjA2MTY3NTFCNEY0N0IwCi06MTUzMjVFMDBDQzczQUM1ODRCMTdCRUEwNzFCQkJBMTJBN0IzNjkzQjVBRTIzQ0ZGOUQ0RQotOjE1MzI3MzAwQTM1NzYxRDM5MkVBOERGNTY4MzE0MzdENUJGQTNBQTc0MzU5NDZDNEI5MkMKLToxNTMyODgwMEU1Nzk4MEE3OUNEQjVGNEE3NkRBNzczNDMwRkQ0OTAzRjZDMTAwQTc5MDJBCi06MTUzMjlEMDBGOTg2NTY5Qjk5MTdDQUVGRkJEMUU3ODNCRUJDREZDRkY1RjlENEZGNkZCNQotOjE1MzJCMjAwMkE2Q0Y3NjVERUM2MzhDMDZEQUI0ODk5MUVFM0IxRjdCMzdFREZGQkUwRUMKLToxNTMyQzcwMDc3OTMwNkMwQjEyRkIzNEY3NzY4QkQ2QTU5OEJCOUU3RUZBMDdFMDNGN0FGCi06MTUzMkRDMDBERTc4NThFRjUyMEZGMUQwNDJENjFCMDJGRENFN0Q3OThBNzdDRjU5QjY0OQotOjE1MzJGMTAwN0YyRjczRERBRjg5NEVDRTdCNDQzN0I4NDVCRURGMTFFN0ZCNThBMDM3QzQKLToxNTMzMDYwMEU4Q0I2RDVFQTE5RDEzM0Q2N0QyOTJFM0RFQTJDM0VENzBGQjkxNjkwNDVGCi06MTUzMzFCMDAxQUU0RTNERUE2QzdDN0EwNDEzMUE3NDE5RkI1Q0YzMzQ1OEJEQkQyMjBCRAotOjE1MzMzMDAwNkZFQ0I1RjExRjFCODdCREI0RDI2MDNFMkRCQ0IxNEY4NjYwNUY4MzQ1RUYKLToxNTMzNDUwMEJCNDY2RjNDRjFDOTQ2Mjk1NjQ0RTM2Qzk3MkU5MDFGRkFCMUNEREYyOEMyCi06MTUzMzVBMDA2QzM4RjE0N0ZCM0NBMEQ5OUY5NDEzQURCQzhCMzQ0M0EwM0E4MTc2QThBOAotOjE1MzM2RjAwQTNCOUU3NjM5NjgxRjI5MEI3N0RCRTdENEE3RTMyRTlCMTIwOEYxNkRCNjcKLToxNTMzODQwMDM5M0M0OUQzRUUwRTg1NjM1RjUxQ0FFQzMzMDRFQkJFMUJCODk1M0NGREQ4Ci06MTUzMzk5MDBFM0FENzlFOUI3N0UzOUE3RTdDQkY1ODNGQkQ4MzBEN0RCREMwNDlBNzc0OAotOjE1MzNBRTAwMEQyQjFFRDlDOUZCRTkyRDVDMEY1MEQzMTc0NENDQkUyOUQ3RUVBOENFMkEKLToxNTMzQzMwMEMyMjY4Q0NCRjRCRUVGM0NDNzAxQjU1M0RGQjYzRjk4RjVDRENDQjhGNjYxCi06MTUzM0Q4MDAwQkY2RENDQjAzQzlDRTA1MjQxM0M4MkM3NTM0QzhDNjhGNDY1OEU2NjhCQwotOjE1MzNFRDAwRjkzRjY2RERGNDFFMjVGNzI4Rjk4RjM2NTlFOTNGMjhCRTMyMzEzREJFNzcKLToxNTM0MDIwMENCOEE4RjcxN0VFMEVEQkMzMkIxREY0OEYzOTFGQ0I0QTgwRjlGN0I1MUY5Ci06MTUzNDE3MDA3RDZFOTJGQ0QyOEFGNTczNzkyQ0ZFRDQ5OTkzNEEyMTg5RjZBMkRDOUJCRAotOjE1MzQyQzAwODQ5RDlBNjJGOTc0MTI2NzlFQ0RGREEwNzE3RUU2NTE5MjhGRDEzQzI2MDYKLToxNTM0NDEwMEExN0IzMjRCMUE0RTFGQzhCQTgxODc4MTY3QjNFRTk5NzlFNkMzQzZGN0NCCi06MTUzNDU2MDAzMTI5NkRBQkZDOEM3RUZENTU4RDY0MjU5QzE5NDg1QTdDRjhFRjBEQ0VFQwotOjE1MzQ2QjAwQkI0MTZFQjM3RTcyM0ZDOThGMEQyNDFGN0QxQ0RFOUM3Q0I1NTc0RjM4MzYKLToxNTM0ODAwMDQ4MUUxRDExREIyNzVGRDU4Qzg0QTNDRjY4OTVGNzFCNkZERjQ0RkI4OEM3Ci06MTUzNDk1MDA1QjczOTUyRUUzMkE2NDIyQTIzRkY2NTc2NTJBMjMxRjI3MzdBRTRDQzdFMAotOjE1MzRBQTAwMjdGNjc3MkRGOUQ2RDQ3RkQ2MDc3NEM4RDIwMkI1MkZENDkxREM0NkY4REEKLToxNTM0QkYwMERGOTFGQzE4OEM3MkJCREY3NjNFNzI3QTJBMUZERkVGQjNBRTBBOUNFRDMxCi06MTUzNEQ0MDAwOTk0QzMyRUI0N0U5MUNBREMwNkJCRjkxOTY4REM0NjM0NEZBNjU2MkZFMQotOjE1MzRFOTAwM0MxNTUyN0YxMEFGMEI3NTM3MzVGMTNFQUI4OEQxREMyODdEOUY1NjI0MzQKLToxNTM0RkUwMDNDNEM3RENCOUExOUIyQTY2Mzk5MjhERkE3Q0I5OTY4MUZFQzFDQkI1QzJBCi06MTUzNTEzMDBENTE0REU2NkM5OTk4QjFCOEI2OTRFRTNBODU0Nzg1OUIwOEIwODc5RERFMwotOjE1MzUyODAwRDkxNTUyNEIyM0ExNzAzMTk1M0Q1NDc1NEY2MzQ1NDZBNjMxQjM1NjJGQjcKLToxNTM1M0QwMENGMDQ3NUMxRDNBMjc2N0YzQkE0MzlDNzY5RkU5ODZFMzI2QzdCRDREMEZECi06MTUzNTUyMDAwMUUxMzJCRkQ0NDVGMjY3NEQ0ODc0MTM0Q0QxQUY4QzMyRkRBMTdFNTcwNgotOjE1MzU2NzAwMTJGQjg4RkY5QUJGMzMyQjFDQ0I2RUQ1QkYyOUI3RjQzMDZBQUQ3RTJENTUKLToxNTM1N0MwMDQ4RkQ1QTkzMDJCOURGMkIwQjQxM0U5NzA5MzY0REQ5NDA0OUJGMzBCQThCCi06MTUzNTkxMDA2MDdDNDA1RDYwREQ1OUUwQTM3MTFDNjMzMTRCQkY2NDk0MDk1N0Q1NUZEQwotOjE1MzVBNjAwNTc5NzdFOTY5MTRDQ0VEODg0MjZCMURGMzRGQTg0NkI2QTY5QjVCMzAxRjgKLToxNTM1QkIwMDcyNjQ4NDY0RjYwQTYxNThENTkzREQ0QTM5RTYxOEQ0NkZBMjlGMTRERDQ5Ci06MTUzNUQwMDBBRjczRkIzNDRDREEzMUZBMDBGQkVGMjEyRUNCQzE3NjBDQjkxNzkyRkM5RgotOjE1MzVFNTAwOERCN0ZENUYyODE3QjVFN0RDODM2NjlBOEZGMjNGOUNDRDA2NjQyQUJGN0IKLToxNTM1RkEwMEQxQ0E5RkRCRjY5RjI1N0ZGQjFGNEY0REU1N0RBN0ZDQTczQzBERUMzRjk4Ci06MTUzNjBGMDA0OUI1NjZGOTJFODI1OUI2RTI1MEJGMUU1ODI4N0YzMjk0NUYxRkY4NEJGNQotOjE1MzYyNDAwREM4NjREMTFDREE5NUVEMjU5RTY4NUEzM0U2QUU3Qzk5ODczNTk0NUU2REQKLToxNTM2MzkwMEEwOEVGRTE0QkM4QTdERjUzMjkyMTlEQTE2RjQyRThEOTAzQzg2MzFGMTk0Ci06MTUzNjRFMDA0QjRFOURDQjYwOERDRjY4MjE1QkVFREFGNDdFRjYwM0U1MkVDRkJCRDkxRAotOjE1MzY2MzAwMEY5NEJCOUE2NjkxQkIxQ0U3OEVBODkwQkQyMDZGRDlGMjU3NEVFRThBQUIKLToxNTM2NzgwMDBDMzdFMjhDQkI2RjI1Q0VCQUJGQUUzNUREOUNERTFGRjIzRTkzNjhEQjk3Ci06MTUzNjhEMDA1NkZENjg2MzMxRDdDOTlFRDAzQ0VDNjRBM0VGRDRGRjIyNTg0RTZBOEIxRAotOjE1MzZBMjAwMzM0QjcyNzg3MDREMzhEQjZEM0NDMDA2RDEwNEUxRTlERUNDMUM5M0JFQjYKLToxNTM2QjcwMDM4MkI2Mzg2RUI2MkYyQjg3QTM3QTFBMTAwNkUyQjBDN0UwODBCNDA4NUNECi06MTUzNkNDMDA2NDg2REYwOTFBQUYzRTA4OEYyNDNCODQxRDZERDdENDFCRUY2NDVEQzBENgotOjE1MzZFMTAwMjc3MDU2NkZFMUIwRTYzRDEzODcxNUIzRTAxMDY5NEVCRkYzMkY4QjQ3MDgKLToxNTM2RjYwMDNGRTQ1N0MyRTNBMkMwODlDRUNCQzA2Mzc0N0Y1RkVDRjczM0FFOTVCNDlBCi06MTUzNzBCMDA3MDY1RjNGRkVERENGMkNDRjREMTAzRkExQUQ2QTdERDRGRjM5REVGRkY1OAotOjE1MzcyMDAwQUM3N0E5MkM5RjFBQTU1MTRDRjMwQTI0QTc0QTk3MEM5RkQ1NEU0NUU4RkQKLToxNTM3MzUwMDUzNDhCRjM0QjZCMUNCNUE5OUYwODY3QUM3Q0E2QkVBMjE2QTg3MzQxRjkxCi06MTUzNzRBMDA2RkMwMUFCODU0NjZBODk4RkJCMkY0MDFDRDM1N0U5MERFMDdCNTNCNTM5NQotOjE1Mzc1RjAwNjI4Mzk3RTY4MDVFRjZCQUVBM0Q3NTQ1MTVGOEJEMTVBM0RDQkUxNEI3OUQKLToxNTM3NzQwMEFGRjQ0MzhDMUI3MTZENjBGQzA3RTEzQjI4REUxRDE0MkYzMERFMTNCMjFECi06MTUzNzg5MDA2RDNGNDk5NDA2NkQ1NEE2MzhCNjNGNkMzRkMxMUZFREFCMzI3MzZGNDg4OQotOjE1Mzc5RTAwOUEyOEU0MzRFNzM2QTdDRTVFRTE2RDBBRjc2OTA1MzI3Nzg2QTZFQzU3NzcKLToxNTM3QjMwMDVERTFGRDQzRjBENUQyNTA3RUY5RjJBQjgxNjk2RUU5RDVDQTY5NkVFOEU5Ci06MTUzN0M4MDA1QkNEQTdCMkU2NzNCOEJBRjNFMDNBOTkwNzU3NzcxRTVDMjcyREI4RkVBMQotOjE1MzdERDAwODRFMDcyRTZDMTc1MzIwRkFFMjVBMTk5NzZCNTgyMTY0RkU3RTBDQUY4RkMKLToxNTM3RjIwMEE3QzM5NTU5MzRDRDBEOUVBOUEwQjFCNTMxODMzRTkwREYxMUM5RjhEQzAwCi06MTUzODA3MDA0NzAwRUY4QzExMURDNjFBRTcxMUNGQ0MzRjQ1N0MyNjNGNjMyODM3NjlCOQotOjE1MzgxQzAwOUU5RTdFNUUwRjczRkI4NjVEN0RGMTkyNDQzQkRDREJGODVENTVDN0ZBN0UKLToxNTM4MzEwMEEwMEY1NTcwODY2MDkxQkJGQTFERTdCRUNENzk3Mjg0QUZERDNDQUYwNzY2Ci06MTUzODQ2MDBFNTQ3MUJDREI4OTdCNUVCMkI4QTk2NzkxRTc4ODVFNjI5QkZENDVERjI5QQotOjE1Mzg1QjAwRjdGQUVCRTVGRjYxQzQ3RjM3OTM5RjdBNDYzREQwN0Y0Q0FERDdDQzZGMzQKLToxNTM4NzAwMENDRjM3QjQ2Mjc1Njk4Rjk4QzUyQkUzRTJCQ0YxQjJCMzYzNkRFQ0RGRTg2Ci06MTUzODg1MDBBNjgxQ0ZEM0YzRTIyMjJERjJDODRGNzc4RUUyRUM3OEYyOTIxMjk0RkZDNAotOjE1Mzg5QTAwNjIyOUZDMjFCRkQxMzRFRUNGRjBGRDBDNjRCODY4NEYwQUYzMjNBNDJEMzMKLToxNTM4QUYwMEM2OTkwRkUyNUQ5QzI3QUNEOEZGM0NFNzYzRjRBRkEyOTU3RkU5QjRFRkE2Ci06MTUzOEM0MDBGOTIxODdGOURENTcyQ0NGMEREMTVCNzc3MEJENzY5REU3RUY3ODZFOEZFQgotOjE1MzhEOTAwQ0E3MTRDRjM3NjFGQzlGRjQ2RTQwNTQ1OEEyNEQ0NzJDMjNGM0ZERjI5NTMKLToxNTM4RUUwMDk5MzZGRjZGRjcyNzk5MjcyOTI0RDdBQkQ4NTc2N0QyNEUyRTE3NDlGRTk5Ci06MTUzOTAzMDBCODYyQ0I0NTVDNDY0MkQ4Qzc5MDhGNkNEOUM4OTI5MzY2OTU4RjIwMUJFQwotOjE1MzkxODAwNDE0NjBBNzMxQjMwMzkxOTQ3RDNDRjk5MzI4RTU5OEVDQ0NBRTVERjE5NUQKLToxNTM5MkQwMEYzMjBFQjkyRENFNDkyNzcxQjIzRDdCMkFFRTI5NDk2MkMyNkI4QzM5MTRECi06MTUzOTQyMDA0NDgzQkQ3NjUxNEU3MjE2RTIyNEFGODE2NkREM0FBQjE1REJCNzVGMzNCOAotOjE1Mzk1NzAwRTVBRUYxMUZGMzcwMURFMTQxQzIwRkQyQjNENDU1NUQ1ODMwNDFFM0JCRDMKLToxNTM5NkMwMDQ2NkQyMUE5MTVBNjEyNzEyRjk1MjNBNThFRjVBMTlGMDRERjIxNEZDQzFECi06MTUzOTgxMDBERkMxN0ZCNUYyQUJGREU2QkM3RTI2NUZGN0YyRkU2NTNFQzlDNURFNTNENQotOjE1Mzk5NjAwN0I0OTI2MTlEM0MwODMxNTA0NkJFQjFGRjNFNTVGQUI4RTU0Qjc3OTI5NTgKLToxNTM5QUIwMDY3N0JFNkNEQUNCRjk2RTRERDZEQkYzNTY1NTZCRTE3NDFGMDlENzlEM0E1Ci06MTUzOUMwMDA0QzUzMTYzMENGNkZCOUFDRkRERkQxRjlDQzRENzMyOUY3QzgzQ0QzOERCNAotOjE1MzlENTAwRjNBM0RCMURDQzdEODZGRUU2RkNCMEQ2QjI4RjYyRUEzODM5NTM0MjNCNEMKLToxNTM5RUEwMEYzMzU2OUY2RDk2MkNGNEY4OTRGNEUzNUFCQUI2ODNFRTZFQzFBNTQ3QkQ2Ci06MTUzOUZGMDBEMzgzNEFBNUVDNkM1OTI4N0ZGQTczNTgwQkU2NjlBNDNBMzU3NzFFMzkxNgotOjE1M0ExNDAwNUE0RDdDMjRGNDg4QjE2QUREMjk2MTVENTlFODc5RTM1MDVEOTg1REVGQ0QKLToxNTNBMjkwMEQyQjZGQzE0OTc1MENEOUMwRjREMkY3RjU1QkM2RUU5M0ZBQjlDNUJGNDU5Ci06MTUzQTNFMDBDNzgyOUQzNUYzNTk4OTI0MkQ1NkExMkYwRTVEMEREODQzNzI0QTdGQ0I3MwotOjE1M0E1MzAwRjU3QkVGNEFCRERGMEFEREJGQzAzNzQzRThDM0I4NEUxRkI3NjExMTFEMjMKLToxNTNBNjgwMDM2RDY1MjNDQkIzQ0Y4Qjc5MjdCRUFDRTAxM0U0NzJGOTYwMjREOURBNzY2Ci06MTUzQTdEMDAwM0IwQUY1NERCRjk1RTAwRjkzNjk4N0E3MkU1QUNDNDEzMUJBNEIxNzM0RQotOjE1M0E5MjAwODk3QUE3MkMzNDYzMkZENTEzQUIzNjZFOTBCRkY4Q0QyRURERDRBQjE1OTkKLToxNTNBQTcwMDdCMkU1QUYzMkJBN0I0NDNGRDE1ODVDMTNFNjgyRkUyNTBCREIwMzcyRDFCCi06MTUzQUJDMDA0M0Y3OEZGQ0M0RDhBMDMxMDY3RkZBN0VBMzkwQjkyRjVCRTk4QUM4N0Q5OAotOjE1M0FEMTAwOTVGQ0YxMUUyMjFBQzM1RUQ2OThDMzNDQjNEQjBCOUFGQjI2NjE0Nzk2RTQKLToxNTNBRTYwMDE1OERDMDJFRTczNTREQkFGMDhDMDJCREVDNzI5Qzc1OTM4RTY5MkVDRkU3Ci06MTUzQUZCMDAxMTc1MUREMTc2OUUyQ0I2MTc2NTA2MzQ5Q0YzQThBMDdFMzQ5MDQxRkM0MAotOjE1M0IxMDAwQkQzQjMwQzYwOTk2RURDMEJCNTJBRDRCMjU4Rjc5NzYwOEI2NzVFNkYyQjMKLToxNTNCMjUwMDNDODdGQjcxMUY5M0NCOENFMzJCNEY4OTRCODU5MTVCRDNCMjY4MTFEN0RDCi06MTUzQjNBMDBEN0Q2MDk2RjYxQkY3OTc2MTZGQTU5QjA5QjBBM0Q5NDhDMUY3N0MzMjRBQQotOjE1M0I0RjAwNzJGNzMxODhGMjc1NjMzM0QxNEQyNEJDNzhBODJEQzdFODlCQ0RCMjFGMEYKLToxNTNCNjQwMDFCOENCOUI0NThFNkM3NDdDNTJCNURFQTdCM0UzQkRGOEE1Q0JFNDkyQkNBCi06MTUzQjc5MDBERjk4NjUzQjdCMEZGNTJENjM0NThDOUYxOTY2RTlCOEMxRjc5M0E0QjBFMgotOjE1M0I4RTAwMjY1NDM2NzU4QTk5NUFDMzk1ODExRkQxMkFEM0M0Q0IyRkNGNEM5MkZCNTQKLToxNTNCQTMwMDRDQTc5NDQ5NTE5RUIxNEVBQ0IzRUY1OUIwNDlFMTdENUJFNTk2Q0U4QTIzCi06MTUzQkI4MDAwQzZDMTg1Q0VFMTRFNUFGMTk2MzAxOTMzRjZBMjg0RDZEMjZERDVGNEYyQQotOjE1M0JDRDAwRTlDMzk0NUZFQjNDRTYwRTUyN0ExM0I2M0ZFOTAzNkNCMEIzQkMwQTczNjEKLToxNTNCRTIwMDI4NjY5RjVCOEU3NDQ2MzJFRjE4N0IxNjQ0OTUwOENGNTNFOThDOTI5QjhGCi06MTUzQkY3MDBFMjFGNUQ0REVGMThFNTVENDg3M0RBRkIzMzg3OEM0OEU2RTlCRUI2OENEOAotOjE1M0MwQzAwREUxRkE1MzdGNkE4QTNGNDNENEVFMTBBOTU5NUY2NUFCNkM0NTk4QUUzNjUKLToxNTNDMjEwMDAwRjY0QjYxRjNCMTMzOTMzMjFFQTE3QzYzMDQ5QjBGRkM0QUI4QUFBN0I1Ci06MTUzQzM2MDBCNzhCREVCMEQxMkI1Mzc4MDU3REFGQTYzQzdDRjRBRUExRjlEQTI2RkExRAotOjE1M0M0QjAwOUU5ODA3REUyNjVDOTE1RjFCRjk4OUQ0RDc1QzI0QkY2MEMwQTQ0NzZDRDkKLToxNTNDNjAwMDg2NEQ3MkU3OTVCODRBN0M1N0UyOTVDNUU1MDU3OUY0MTIwMDhGM0M2NEU1Ci06MTUzQzc1MDA2MDREMzUyODBGNTE1RjM3NjRDQzQ2NEZGMzNDNTM1ODhCM0E1OEM5REREOAotOjE1M0M4QTAwQTk4N0MyNjgzNzg1Q0RCMjE2RTUzQUFENzU3QTM5QkY0M0E4Q0IzMDc1NkMKLToxNTNDOUYwMDFEODQxRTNCOEYxNDk1NTlENTM3QzhDRkI1MDgwQkUyRUE5NDdEQTAwODk1Ci06MTUzQ0I0MDBDNTBCNkI4Q0YyRUIwMTVFN0NCNUI5QkU2REUyRUYzMTA2RDZBOUI4MTc4RAotOjE1M0NDOTAwNjFCMURDQkU5NDZERkQ1REI3RjIxQkM2RUM3Q0Q4RDYyRTJERjg3MzZCMEUKLToxNTNDREUwMEZGNkJFQkEwQjY4NUJFN0I2NDY3QkIyQjA3NEZCM0JFMTBFMzEwQzI3RUFECi06MTUzQ0YzMDA2M0VBQzlEN0RCRkQxM0Y5NDU3RjBFNUREMzY1Q0I1RDA0NkI4Qzk5NzA1OAotOjE1M0QwODAwREJGNEU2NzcyQTVBRTkwMjZDRjk3MkI2QjU5OUU3NkZFQjhCMjMwREU1NEYKLToxNTNEMUQwMDU1NTJDQTVBNzkxOEYyMkEwQURDOEEyRkI0NkY5RjMwNzU5RTQzOUE3NDI0Ci06MTUzRDMyMDA1MDFENDc3Mjc1M0M3NzAxNzUzQ0EyQUU4MTQ5RDQ2RjBFRUI5MzE3MDA3QwotOjE1M0Q0NzAwMzA2QzVGOTlGQjU3RjJDRjI4MUFGRDIzRjQ4RkQyM0Y0NkZGMkRGNDhGRDUKLToxNTNENUMwMEQzNUZBNzdGOEFGRUEzRjQxRkZGOTkxOTk3NkRFRDM2RUI2QTlFRjlFMDE4Ci06MTUzRDcxMDA2RTdEODY3Qjc0ODYzQjNEQzMzRDM5QzMyREJEMzZERDFEOUNFMThFQ0VGMAotOjE1M0Q4NjAwNzA2Rjk5RTFENjY3Qjg0NzVGQ0IzQjkzNDJGODY5MTNBNkRCQjc4ODgwQTUKLToxNTNEOUIwMDc2QkVEMTlDNURCMDQ5QUE5N0JGRUJCODVBQ0FDRjM2NUJGOTU0OEU3NEE2Ci06MTUzREIwMDA2MjZENjg0RDZDNDNEODdGNzI1OEFGQkQwODNBNERFMTREMjFGNzI2RkE0OQotOjE1M0RDNTAwNkZBMzdGOTJGRTdERjQxRkExRkYwOUZBOUZBMUZGNjVGQTRGRDBGRkM2MTMKLToxNTNEREEwMDQ1MzMyRTNCMzZDQ0YxOTZCMkU5NEY2RUUwNERDRjczMDM2RkYxM0MzN0NECi06MTUzREVGMDBGMEI2MjVDRjBEQkNDNUYyRENDMDVCMzRDRjBEQkM0NUYyRENDMDVCMzA4NAotOjE1M0UwNDAwQ0YwREJDQzlGOUU1QkYzNjY1N0Y5Mzk3NEY2RTdGNzNDQTAwNkY0MzNGRkQKLToxNTNFMTkwMDVBN0M2MkMzM0RCNjdEMDQ4RUIzRDlFQzdGMTA3RTNEMkMwRkJGMzNFM0M1Ci06MTUzRTJFMDBGQzMzQzNEMUY3OEM5MUZDNDJCMjk0N0U3QTBFNzM0MzU3QjY1ODE2NUI5MgotOjE1M0U0MzAwRkEwNEU2NzZEMTM3RjUzMzJEMUUxQTIzOEJFNTQ1OUZCRDQ4RTM2MjA1QjUKLToxNTNFNTgwMDdEODM4RUEyQjQ0QkRENUM0NjdERDY1QzU2RjIxOEFCNjk4OUNDMzVGQkZGCi06MTUzRTZEMDBCNDA3RTgzQjNDRDdFQ0NCMkE1OUNENzI1QkZGNDk4NjlENzJEQ0ZCNDU4MgotOjE1M0U4MjAwNzkwMDY3OTNBNTM0N0U1M0ZBODk1MkM4MEUyRjRFRDlFOTIwMTlGMTUyQTgKLToxNTNFOTcwMDU1MTc4RENCODcyMTIzRTg5MzJCOUNDQjRGNTMxQ0I5NkNGNkYxQzkxRUM5Ci06MTUzRUFDMDBFN0IwMzc4RkYxNjg5Mjk5MzYzQUVDNzgxRTJBNzdBNzY1OTc4MEU0OURFOQotOjE1M0VDMTAwRTU5NzI5MkYzNzk3RjdBN0Y3NjMxNTA0RUY3NjA5RTMyMUU0OEJEREZBODEKLToxNTNFRDYwMDlFMThDRUE1QkRBOEVGODgxQ0U2RjU3NzdGQzZEOTJFQzk3NTNBRkE3QzJBCi06MTUzRUVCMDA5QzExMkE1Qjc5MDA2QkI5REE5NjM5RDg5RjFBRDQ5OUZFQTJFRTE3ODYyMQotOjE1M0YwMDAwRDUxNkQ2Q0RFMzc3QkI4NzE1NjE0MTEzOERBRDgzNDYwREQ1NEQyNDM5MjkKLToxNTNGMTUwMDk3REIyNjhGRUVENTJFQ0VDNTM4QTY3NzRBNjU0OTlFQzc5ODg3NjQ0ODZGCi06MTUzRjJBMDA0QUUzOTI1RkQ0NDUxQThCRERBNTU4NTcxRUE0QkVGQzQ1MDM3OEFFOTFGQQotOjE1M0YzRjAwNENGOTAzQjBBNjNERDNFNUJCOTEzOUFDRTQzNEU1OTc5QTgzNzFBNjQ2OUIKLToxNTNGNTQwMDRGRjBCMUE5OTY4RjREMzgwRjJCMkMwODcyN0IwQTk3NkY2NkREQzVGMUIxCi06MTUzRjY5MDBBRTE2NjdCNDU2OTVFNTZBRkQ4RDE1QzJGMkNEOTRFNkNDNUM1MzI2QjIzRAotOjE1M0Y3RTAwRjFFMEI1NzQwRkE3RjQ3NzY1M0Q0RUJDMjlBNTc3NzJCQjdFQzg1RkJBOTYKLToxNTNGOTMwMEYwMjkwNUU3OEMwMEIzMzczMkI4NTQyNDU5NDVBNDNDMjcyOUNGNzY5Mjk3Ci06MTUzRkE4MDBBOTcwOEU0OUU0QkFEODdDMUM4NjJENDkwMzc5QTBCRDhCQjE2MUMzMjNBRQotOjE1M0ZCRDAwOUJGN0JBNjZCOTFFRkY4QjlBOUZGQTdDNTFGRTlFODFGOEI4RkI5NzY0MTkKLToxNTNGRDIwMEIwMEQxMzA1MjQzRkUzQ0VDN0JDRkJBNzEyOTRDN0RGQzU4OEY3NjJCMDJBCi06MTUzRkU3MDBCNTYxREE3NUZGQ0Y2Q0IwQzU0MzZFOEMzM0MwNjVBNDk4QjlERjI2OUU4NAotOjE1M0ZGQzAwN0Q4Qjc1QjVEOEIwOUIzODE5RTE3RDEzRjJFMDY3N0VEODkyMTYxQkVFNTkKLToxNTQwMTEwMEVCMDQzN0Y0NUQ4OTBFMjVCMDIzMDNERTEwMDkwNzE3NkY2NERERjZCRDE5Ci06MTU0MDI2MDAwNUY5NzUwQUU0RDVDOTFFNkY1MDJGQUVCNzQwRkQxREUwNzI4RUQzOUM2QwotOjE1NDAzQjAwMjMzQUE2RjEzQTQ4ODNGRDM0RjdBMDdBRUY5RUIyNzMxQ0VCRDI3QURENTMKLToxNTQwNTAwMENDQkQ4NjYwQjVEMzdDMkVEMkREMDI5RDhCOUYxQ0Y5RTU2MThGNUM2RjhECi06MTU0MDY1MDBGOEI5QUVCMjRBNkQ3NkI1NjFDMzJFQ0E4N0Y5QkMwRERGMThFMzI1MEJFNAotOjE1NDA3QTAwNDc2QjJEMzg2RDNENEUwQjk3N0VFQzE1RDc1Mzk4MzcyNjJFRjcxNTRDNUMKLToxNTQwOEYwMEI1MERDOTVEQTM5QUY3RUJGNkYxRjI4QzUzNDNDQjU5MzgwQzFEOENBQzVECi06MTU0MEE0MDBCOTY3OTZDRDdFRUI1NDk4RkMxMjNBRUU0NjI5NEIzRkE5OTY1REI4NDc2NQotOjE1NDBCOTAwOTE0RUFENTQyQjY1NDcyQkQ3Qzk0RUVGODY0RTk0REI5RDNGNkU1QTcwREMKLToxNTQwQ0UwMDM2QjAyNTdDNUMxRTc1MzFGNzE1QUFFMzJGODhGN0Q4RDZFNzc5NUU4OEZCCi06MTU0MEUzMDBFRjQyNUYxRjFFRTJGN0FFRjBGMzRCQURGNUZDREMwRUM5RTFGQTc3RTNDMAotOjE1NDBGODAwODMyRDM4RDMwM0ZDM0U4RDdCMEI0OUE2QjVGMEVFRjU2NjlDMkRGMzIxRUUKLToxNTQxMEQwMEFGNjc0RUVBRDcxRjdDNjlGOTJGQzg4RDNBOEI5OUUxRDlGOThENzA2NDg1Ci06MTU0MTIyMDBGMjlCQzkzRjlFQ0M3MUZENDBDNkQ5MUU2ODFERTZFNUExOUQ5OUY0OTQ2RgotOjE1NDEzNzAwMzk0RUVERkU1QTZDNUQ4MkI1MTg4NEVCOTVFMzgzNjFCQkJFNTE2MTNBNUYKLToxNTQxNEMwMDVGNDJDRkU2NjY0QzY4MDFEQzM2REVERTFDMUZFMjdEODAyNzQ2N0Q4Mjk5Ci06MTU0MTYxMDA1NUNFMkYyODhGOEY1QUE3Q0E4QzczNzlCMDc4M0EyRkI2QkQ5RDc1QUZBOQotOjE1NDE3NjAwMjYzQTdBNjI3OTc1OTFCRkE3NDM5RjMyNTcxNzlBQzM5OEY1QUZDREQ1NTYKLToxNTQxOEIwMDA1NzA4OEFEOUZFNjc1RTE3ODhBMEQ3RTIwOUU5QzUyOEQ2QUFEOTM2NEM2Ci06MTU0MUEwMDA1MTVGRDdBOUZENUM2NzE1NzNBMzAxODdENTRGMTAwRUE4NEY3N0U3RUVFMgotOjE1NDFCNTAwNEM0ODc3NjlFN0ZFNjhFQjBGRDdGMzNBNDExRkRDNEVGQjA4QTUwM0JENDQKLToxNTQxQ0EwMEZCMjg0RDdFM0ZCM0VEN0Q5MzVGM0RGMjYxNUQ4RTBENjk1RjhGMEM4NzMyCi06MTU0MURGMDA1MDM2Nzg1MURBM0U2NjlFOEI0QzBGRDM3Q0ExMUJGQjlENTY3RDg3NzQwOQotOjE1NDFGNDAwQkJBRDg4OTkyMzg2RTQxRTU2Q0JBOENGM0Q0ODczMkI0RjA2RkQ4QTY2ODUKLToxNTQyMDkwMEQ1RkZDNDU0RkQ4OTJGRTZCNzlFRTRGNTlGNEY3NEIzRTg5QjFCNDM4QTZCCi06MTU0MjFFMDBEMURGRjFGNkEwQzFERTdGQUUzRERDODQwRDlGRjBCMTY5RURFMUI3RTNDRAotOjE1NDIzMzAwQzdCODVEMUZFMEFDRTEyMUQzNUUwMUNBNzk4RUVENkQyMTVFMzZEQjQ5QjcKLToxNTQyNDgwMDZCQjdDOUM3MDQ2QjRGMUM2N0YwRjVDRTAzQjhCMzIxN0E3MjA2QkQ3NTA4Ci06MTU0MjVEMDA5M0RFNTU2M0NCMEQ3MjdCNjI0Mzc5NzQzREE2MjNDRDE0NUQ4N0FDN0FEQgotOjE1NDI3MjAwMjU3OUJERDBFNzk0QjVFRUU1NzU1QTk4MTI5NzgzRjc2RDVBRTZGODk3NDMKLToxNTQyODcwMEZDQzQxNEVFMEE0OUU4M0RENEZFQ0M3QjQyQ0M3QUZDMzVGMUE3Q0Q4QjI2Ci06MTU0MjlDMDA1RTM2RDY1MjRBRTUwMzk2MUIwNENCNDJFMkJENjM0NUQzNzlFRkRDRkYwMAotOjE1NDJCMTAwMjZCRTkzRjNFMDhCMTE3Q0IxM0NGODY0MUIzRUIzNUZFMkY4NkNFREU2QzkKLToxNTQyQzYwMEYwRTVGNzBCRjFFQkE2Q0UwM0RFNjJDQ0JDMDc1ODhGMjRCNjk0RTY4RDIyCi06MTU0MkRCMDAzOUYxNzc2RDVFQ0FDRDVEQkQyQ0RDQ0I3MTBCNUIyQzdEOTNEOTkyMUM0NAotOjE1NDJGMDAwRUY5MTZDRjMyQjlDNTU3ODVFQkM0NzhBOTlGMzZGNkZFNEIwRkEzMkE1OEMKLToxNTQzMDUwMEYxNTc4QkVENjUxN0ZBMTQ4N0MwQ0FFNjIxMkM3RDRDOTcyRUE0MTREQ0YzCi06MTU0MzFBMDBGMTcwOTQ2MDk1MzBFNjEwRkY2QzA2QUZCQTIwNzc2QTVBMjA3MEEyNTNDNAotOjE1NDMyRjAwMjYxOTI5RkU2NDZGRkIwRUY4MjdERjQxMUZCRUMzNzVFRTI0RDdEQjk4ODcKLToxNTQzNDQwMEE4REFCQjhDQTVDNzc0MjMyOEI0MjM5RkNBQzQ1RUQ4OUNGM0NEQzdGRDE2Ci06MTU0MzU5MDA2OEU0OUZDMDdBQjVCNEQ3MTAyOTNGRUNDRDczMzc5NTJCRjIzREMxQkRBMgotOjE1NDM2RTAwMDY0Rjg3QjJGNEJERDA3RjlFODdCQjk1QkJDQzM0M0JFMjM0QTdDN0JBMDMKLToxNTQzODMwMDg4NkJBRDA2M0QwRTNGRDdBMUIzRTZGNDEyQkY0RjYwNENERkQ5QTYyOTlECi06MTU0Mzk4MDAwNUVCQUVBQkYxNkNENkRCRkI3OTRENDE5RDQ1NEE1Mzk5MzhCMjAxRjBDNAotOjE1NDNBRDAwNjNFQzA0MkM4MENENEY3NTY5MjIxOEZDMTc0RTI4RjM2MzU0RDdCM0RGMkMKLToxNTQzQzIwMDU2QkQ0Q0EzM0UzQ0E1N0MxRkUzODI5NUE3Nzg3NjQwMjUxOUQ4OEI3NDQ2Ci06MTU0M0Q3MDA3NkREN0IyOEZGRTRCRUUzRkMxRTY2RjAwQjhGMUIzREI2QzNCNUZCMURBRgotOjE1NDNFQzAwMzUwM0Q4QTg0RUE4MEJCQjNFQTA4MTJFQzAwM0QzNEY2QUMwNjcyM0Q0NEUKLToxNTQ0MDEwMDVDMjhEQ0M2QzVFNTFDMUVDQ0IyNzI3OEMwN0E2RERBQzQ0M0UwODc2MkUzCi06MTU0NDE2MDA0QjcyMUQ3NDI0ODZCNTJFRjJFRjQ1N0IyMTlDQzAwRjZCMUIxODgzNEQxQgotOjE1NDQyQjAwNzg0RjEyMEU4RTI4QzhCRjYwRERFRkQ1RUQxQzBGNDc5NDMyQUExRjcwRjkKLToxNTQ0NDAwMDIwRTE1QzE1RDVEQjg1M0I4M0E4MkNEODRDMEU1MkY5OTU4MTg5NEVEQkU5Ci06MTU0NDU1MDAxRUIyNjk5RjI3QUVFOUM0ODM3QjE2MjQ5NUI3RDg4NEI2MjhDOEZFQjJDMgotOjE1NDQ2QTAwNDYxNjNGOTdCM0Q3RjkxN0RDMUUzMkI3OUJENEM2RDcwODk2RjQ5QjY3RUUKLToxNTQ0N0YwMDVCOTMzQzVEMjRCMzBCNzc1NkI4RTk4RDdENjAyM0Y2RUUxNDlGRTMzQzBFCi06MTU0NDk0MDAyM0Q2QUFDMEEzRjU5ODRCNDM5NzM2RDhBNEU5MzdCODlFNjYzRjhEQjk0OAotOjE1NDRBOTAwRTNGMTVBNjdCQkUwMEFBQjYyM0NBNDBFMTBBQzU1Q0EyOEVFQjlENDc1RDYKLToxNTQ0QkUwMEY5NDAyQjlGOUY1MjFDODlGQTBFOEZGQ0M1MTY5N0ZDQjUxNjQ5RkVEMjZCCi06MTU0NEQzMDA3MjMxMkE2M0JDMUVCRjRBRjIzMERFOUQ5ODRCNDU1RkU0MzY5NUZEQ0QyNAotOjE1NDRFODAwQjI2MUU2MEY5OTcxNzAzQzQ4NjFGNTk0QkU5NkQyRDc1MDdBRjg1NUM4RjMKLToxNTQ0RkQwMDVGNkFCMUYzMjA3RTZBRjE1MEI4OEJDMkFGQUVGODFBQ0ZDRkMzRTc2NkQyCi06MTU0NTEyMDBCRkRCNjFDN0Q5ODI3MjA4MjY1RkYzQTQ5OUI3NkVDMjBEMUM4NUQxMzZBQwotOjE1NDUyNzAwMDhDRTdBRjlENTU2QjEzOTY4NjQyODFDRUIwNUFEMzQ5RjE2OTIyMTU1ODMKLToxNTQ1M0MwMDhBNjMwRkQ4OEM4RkZDODgwN0ZDMjJFNTgzNzhGQzdDMDIwRUE0QzdDQzMzCi06MTU0NTUxMDBGQjgwRDA4NjlCOTgzNUJGMDZDRjRCNDM1NjM5MjM5REIwMjk1MkNFNkQ0NQotOjE1NDU2NjAwNEY5ODdFOTgzM0MxOEZFQjFCOUE2NzMxNkU5OTJGMDk4MjQ5Q0Y5QzNGRDQKLToxNTQ1N0IwMEU1NUY2MUNGN0ZCODVFMkE5NUNGRUYzODRCMTk1QkRFQkQ3NUNFNjU5RUNECi06MTU0NTkwMDA3RDFERDExMTg2RkUwNzc3MkNGOEFERkVDNjlGRkU4RUVBQkJGMDFEMDUyMQotOjE1NDVBNTAwRjJBQUFGRjU5ODc5QUYxMDg1RjkzMEY3NjdDNzMxQkU2QkFGRkNCNjgwRTMKLToxNTQ1QkEwMDU1OEMxRjZGREM0MkUzOUVDNzlBNjc5ODNBQjBBNjlDODMzQjA5NUNGMTNFCi06MTU0NUNGMDAyMzRCRTc5M0VDRTk0M0JFQzExMTEzOEU1QzNGOTlFNEYwRjkyMjg5MzBDQQotOjE1NDVFNDAwQjc2RjQyNkVFNDU5MUUxOTZBQUNDOENCMzMzNzc3QTEzRTk3QTdCN0ZBMjAKLToxNTQ1RjkwMENGREY1QUZDOEM3QTYwNkU0N0IwNzlBRkYyMzU5RDlBQTkzNEY5RTc2OTMyCi06MTU0NjBFMDBGOUZERTc0RjY5RkYzODRCQkFDMzMzRDIxMUJGRUJCM0FEMjc0NTMyODdCRQotOjE1NDYyMzAwQjRGRjM5NEJGQUNEMUYyMUZEQjU1OUQyODU2RjBCRUYyMTZENjI5Njc0N0YKLToxNTQ2MzgwMEVGQjFEQjk3MzdGOUZFOENGRDI3QUNFRkU0RjMxRkQ2RkNERjlEQkVCRTIyCi06MTU0NjREMDAzMTMzNUNGQUMzODc4N0M3NkYxN0ZFN0YzQkZGMTlFMTlFN0NGRUZGQjAwOAotOjE1NDY2MjAwRjU4MUZGMUZGRTRGMEE5N0YyRjBFRjlERDkyRkZEM0YwM0JGQzUxRkQxOTgKLToxNTQ2NzcwMDhGOTcxRUVENkI5RTI4NzM1OUVDQ0JEQzQ2NTM2RDY3QjcxNDdCNjQxNTQxCi06MTU0NjhDMDAzNTQ1NEZEOUEzQUE0NkUxQjgyQkRBNzNFRjZFMTVFRDE0RTNBNEE3NkNDNgotOjE1NDZBMTAwOTMzQTY3RjU2RTU1OTYxRkQ3RTZEQ0RCQTVGQUQ2Njk4QTQ3QTg1NjdEQzUKLToxNTQ2QjYwMEE1RDU2QTgyRTQxNkFCNEQ2RkI4NDE2M0IzNTQ1NkFCMjJCRjdGNkE1RTlDCi06MTU0NkNCMDA4N0VFRDMxNEVDMTEwQkVCMzA3Nzg5NjlEMEE4MTNFNTgyRjZBRjUzOUY2OQotOjE1NDZFMDAwRUNGNzU0QUJDNUVCRUFENUU3RUVBQjUzQUFENkQ1MjkwMUNGMjM2QTc3NEYKLToxNTQ2RjUwMEMxQTcxNERDQzVCODQ4OENEOTczMTUxRkUyOEJDMjI3NTRCRUY2QjBCQUJGCi06MTU0NzBBMDA4QkY3MURFODQzQUE0QTEzMEFGNDEzRUQ3MDJGMEZBRjUzOUQ2NTcxMkU3QQotOjE1NDcxRjAwREY1NTNEMTA1N0Y5RkUxMjY0RTQ1OTYwNTg2NUMxNTA0MjMwMUMyMjE4MEQKLToxNTQ3MzQwMEZDNzlFNUEzREM0QTgyMDFGMTc4QkU5NDdGN0VEOTM3QUM3QzI3RjNGMkNFCi06MTU0NzQ5MDBDRDY2NUZDOTdBNjBFQjIwQzREQUQ3MzMxNjQwREVGMTgyOTgwNjdDNjQ0RQotOjE1NDc1RTAwOTk5OUQ3REQ4Q0NEOUI0RkI4RjE1MDk5RUVCNTc1ODRBMzZBNjU5MUE3NDUKLToxNTQ3NzMwMDVFQURGODhDRDhFRTY0NUQxRDU1N0YyNUI2MUY5QTlCRTAzNEMwQkE0ODI1Ci06MTU0Nzg4MDA5MEUwQzAxRURDNUREQzc2REExNEVDNUVBRTA3ODMzREI4RjgxM0JDNkVBOQotOjE1NDc5RDAwMDREMzM5MEJBNjMxRDRERDczQkY1QUI1NkZCRDJBOTREQUIwNjU2RkRBMDEKLToxNTQ3QjIwMEIwQjUxMDZDRTU5RTZBRUUxRjI3MDFEMUE2OTdCQkI0NUVGNTcwOTg3NkExCi06MTU0N0M3MDAyQjhCNEExM0VBRkU5RDdCNzJCQzAwM0NGRjIxOUJCNTYwNjBCQzlFQjAyNgotOjE1NDdEQzAwMDk2NkVFMzc0RjNFODE3MkQzMTYxQ0I4MUZFQzBDN0RDRkQ1NEMxOENBOTEKLToxNTQ3RjEwMEY2RDVBODY1NTQxRUVBRDY2RTlENEQ4MUQyMjZDNzRCRDExNDVFQUE4ODUxCi06MTU0ODA2MDA3NzRBRDZCNkFBRkU3NTYxMEVDRkFFODJERDRBMzFFMUE1QzQ5MzUwMEIzNQotOjE1NDgxQjAwNTlBMjYzOEZDNTlCOEI3OUREQTdDQTlEQTBCMjc0MEEyQjIzN0MxMUREQzQKLToxNTQ4MzAwMEJEMzYwQ0EwN0Q1NURCRkQwQTY0QTFBQTc1RjcyQjMzRTk0RjhEQThBQzhFCi06MTU0ODQ1MDA5OEVGMUI0Q0I1QTdBQTMzMDMzQzlFNzBCRTVFRjUzRjEwNTM0NUY2Qjg0NAotOjE1NDg1QTAwM0E4N0UyM0UyN0IwODBEM0ZBMzZFOEJCNjQxREMxNDlGQzUyNTIxQTU2RDAKLToxNTQ4NkYwMEI1MUYzNTJCODdDRTM2MkIyNUU3RDdBQTdFOERGQ0Y2QUQ1NkI1Q0ZBRjhBCi06MTU0ODg0MDAyMURFNUZBMzgwMDdGQzg0RDNBQUI1MjYyRUM0OThEMDJFQjM0RDlDQjdFNAotOjE1NDg5OTAwNDk0RUYzMzk4NTg3NTQ0RkFDMDA3N0VCRjhEQ0Q4QUJBOTZDRUI5QzIzNzQKLToxNTQ4QUUwMDNDQUM3QUM0NTVBQTY3MjU5NTc3RUY2M0FBNjdGNTFBNzU2RkMxMkEwNUYyCi06MTU0OEMzMDBGQTFFRTJDQUE5Rjg0NTAxRjMxQzE4OEY5RjA4OTlGMTVGRkVBQUVBMzkyNAotOjE1NDhEODAwRERBQ0VFREQxOTUyOUMzNEVFOTZGREU4MTFBNUVBMzMwNUVEQjBCREVEQjQKLToxNTQ4RUQwMDhBODczQURDRTNDRDFEMDc2MTBGNEQwQkE5NTVFNzFGNTI4NTczQ0RBQTJFCi06MTU0OTAyMDA0NjcxMDVENzE0MkRCNkEyOEQwN0Y4QjlCMTBEQjAwNUU0RUFBMjc0QTczMQotOjE1NDkxNzAwOUEzQkY4NUNBRjg5QjUxNzk2MDUzQjhBQ0E5QTNBQUE5MkVCOTU1REQ0NzMKLToxNTQ5MkMwMDM3QzhFNERGNDNFRkJGNDQ5RkYzRjcxQjU1NEY0RkIzMEFCOTVBOTYxRjYzCi06MTU0OTQxMDA4NjZDRTdGMjI0QkVBQTBBNkIxRjU3NzlEOENCQ0QxNDFFNTJGNzEyQ0VEQgotOjE1NDk1NjAwNDA3RkYwMzhFNjI0QzVGRjUxNjhBRjNBNEYzOEQ0QkE1NEZGRjlBRkFBM0IKLToxNTQ5NkIwMDI1RTc3NjczMUVEODRGM0MzMDg3Njg1RjFDRDEzQUYyRkIyNUQwMURCNDY5Ci06MTU0OTgwMDBFMzNBRjUxNjREQzE5M0Y3MTIyQ0VEODA5RkYwOENCQjQ5RDdEMTc3QTJENwotOjE1NDk5NTAwNjBCMzMyODdDQTAxRkNERDNCQ0RFRjU1MzdCMzdFRjQ0QkI2MUI3MTY5RkYKLToxNTQ5QUEwMDZDRDgzMDkwQzUxQThFQzlEQjA2NERBRDgwM0ZGNDdCMzRFNzlBNjdGM0E2Ci06MTU0OUJGMDBENTM2OEFDM0NGNDcxMDBDOUI2N0U4MDc5N0ZEQTg0MkE5M0E1NzRFQjhBQQotOjE1NDlENDAwMkQ1NzY3RTNBMzM3RDkxNDFGRkQ5QTk5N0MwNDFBMTQxMzFGMDUzQzlCMkUKLToxNTQ5RTkwMDM5NUU5RUIzNzgwOTdDRTREN0M4NkYwNjJGRUQ4RUZGRjlDNkUyQzAyNkFDCi06MTU0OUZFMDBBMjRGQUM3MzM3N0I3OEUzOUM0MEI0NTNGMDNDQTZEQUVFOTJDOEMzMUJEMgotOjE1NEExMzAwNDFBNzM5NURFQjNCRDhEOUY2MEVGQjVENzVDREMxRUY3MDJBOEVBRkVGMjUKLToxNTRBMjgwMDI4MTk2RkVGMTBEQzQ0RjM0RjU0NkI0RUEyQzM0REEyM0RGMDc3MzdBNzg1Ci06MTU0QTNEMDA4NUEzQkQ0NERCNDE3NDc4OENFOEIwODdGN0U5RjlCNDI4QjA2ODkxMzBGQQotOjE1NEE1MjAwRUY4RUYyMDlBRTRGNTBEOUQxMEQ2NzM4NURDMDM3RDEwRDYzMzNFODQyNDIKLToxNTRBNjcwMDM0RjEzRTYwRDE4NUZBNURFRkZBM0NCQURDOTk0Nzk3QjdCOENFRUY1NDE4Ci06MTU0QTdDMDBEQkRFNDlFREJBMzc4RjRFRENGRTM4RjEwMEZDQjc1QkI0QkE4MDNCRkYyRgotOjE1NEE5MTAwMkNEQTZDRkE5OEY0Qjg5NDQ3OEZCRkIzRTg4MTM2RURCNzY4NzEwQjFENDAKLToxNTRBQTYwMDg4MzZGOUI0Mjg4QTdDNjU2MzYxNjRGRDQ2QjY4REI1N0JDNkJGRDIzMTk3Ci06MTU0QUJCMDA0N0RBRDQ1MUM0RkVDREM2RTJGOEJGRURGMDhDM0ZDQ0RENTU3RkM1REJFRAotOjE1NEFEMDAwQUJEN0MzQzgxRDc5OUNFMzVEREM1RUFEMzlBOEVGQkQ1OTE0RDU4QTZEQTUKLToxNTRBRTUwMEJDNTMzQjJERjFFQ0E0RkVFRjVGQTkyNTZCOUY5Qzg2RjdFMkQ5RjA5RTNFCi06MTU0QUZBMDA1QzBDOUFFN0UxM0RDNkYxNkVENzM3MUZGRkQ0RTc3QkVGQjVGMDhGMzVDMQotOjE1NEIwRjAwMTFCNDEzMUJGRkRFM0NGQzNCRjhEQTg2ODlERjVFMEJCRkE1RThBNzI4MEEKLToxNTRCMjQwMEFDOTJFNjVBRjk2REMwNEVGRjI2MUYxNzRDOUEyMTFERThBNjU4NzQzMDgxCi06MTU0QjM5MDA3MTFFOUUwNkNCQjcwOENGOUU5NEQwRkUzMkJEMTNENEY3MTQ1MjFFQjhEMgotOjE1NEI0RTAwRkZGREQwMTcxRjUxQUJENkI1MkE1MkMxNTJBNUE4RTAxRTA1M0NFQ0ExMjEKLToxNTRCNjMwMEJFODc5RDZERUUzOEY0NTMwQTNCQkY1NkYxMTY3QzVFNzExNzdDQzEwQzc1Ci06MTU0Qjc4MDAxMzU2NzVCMEZCRDY3NEVDOEEzOURBMDFENzYyRTA4NENBMjYxRTI5MkJDQwotOjE1NEI4RDAwOTQxRDdDOEM4NDNGRUNCOUQ4NzMxNDk0MEZCQkE3MDVGNkQ4NkQ4RDFGQTIKLToxNTRCQTIwMDg4MDc1RDdGQzBGNTVBMzZFQkEzMzhCOUI2RkYzMkI1N0Q4QzVEOTc2OENFCi06MTU0QkI3MDAzQTg5RjUxMkM4MDczNEQ2Rjk0RTVCRjFCRjRGREY1NUQ3NDRCQ0JEMjdCNgotOjE1NEJDQzAwNzg1RTQ5NzVCRjYzRTgxMTdFQzY1MjMwRUY2MkE2OTEyNUVCOEQwQzNERjEKLToxNTRCRTEwMDZBMzA4REVCODhDMURGMzdCNURFNUFGQzdGMDBFODcxQUVEMDM4QTAwMDM3Ci06MDE0QkY2MDAwMEJFCi06MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc3VuaS5jIGIvZHJpdmVycy9hdG0vc3VuaS5jCmluZGV4IGIxZDA2M2MuLjZkZDNmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3N1bmkuYworKysgYi9kcml2ZXJzL2F0bS9zdW5pLmMKQEAgLTEsOCArMSwxNCBAQAotLyogZHJpdmVycy9hdG0vc3VuaS5jIC0gUE1DIFBNNTM0NiBTVU5JIChQSFkpIGRyaXZlciAqLworLyoKKyAqIGRyaXZlcnMvYXRtL3N1bmkuYyAtIFMvVU5JIFBIWSBkcml2ZXIKKyAqCisgKiBTdXBwb3J0cyB0aGUgZm9sbG93aW5nOgorICogCVBNQyBQTTUzNDYgUy9VTkkgTElURQorICogCVBNQyBQTTUzNTAgUy9VTkkgMTU1IFVMVFJBCisgKiAJUE1DIFBNNTM1NSBTL1VOSSA2MjIKKyAqLwogIAogLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KIAotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjksMTUgKzM1LDYgQEAKICNkZWZpbmUgRFBSSU5USyhmb3JtYXQsYXJncy4uLikKICNlbmRpZgogCi0KLXN0cnVjdCBzdW5pX3ByaXYgewotCXN0cnVjdCBrX3NvbmV0X3N0YXRzIHNvbmV0X3N0YXRzOyAvKiBsaW5rIGRpYWdub3N0aWNzICovCi0JaW50IGxvb3BfbW9kZTsJCQkvKiBsb29wYmFjayBtb2RlICovCi0Jc3RydWN0IGF0bV9kZXYgKmRldjsJCS8qIGRldmljZSBiYWNrLXBvaW50ZXIgKi8KLQlzdHJ1Y3Qgc3VuaV9wcml2ICpuZXh0OwkJLyogbmV4dCBTVU5JICovCi19OwotCi0KICNkZWZpbmUgUFJJVihkZXYpICgoc3RydWN0IHN1bmlfcHJpdiAqKSBkZXYtPnBoeV9kYXRhKQogCiAjZGVmaW5lIFBVVCh2YWwscmVnKSBkZXYtPm9wcy0+cGh5X3B1dChkZXYsdmFsLFNVTklfIyNyZWcpCkBAIC0xNTUsMjUgKzE1MiwxMDUgQEAKIHN0YXRpYyBpbnQgc2V0X2xvb3BiYWNrKHN0cnVjdCBhdG1fZGV2ICpkZXYsaW50IG1vZGUpCiB7CiAJdW5zaWduZWQgY2hhciBjb250cm9sOworCWludCByZWcsIGRsZSwgbGxlOwogCi0JY29udHJvbCA9IEdFVChNQ1QpICYgfihTVU5JX01DVF9ETEUgfCBTVU5JX01DVF9MTEUpOworCWlmIChQUklWKGRldiktPnR5cGUgPT0gU1VOSV9NUklfVFlQRV9QTTUzNTUpIHsKKwkJcmVnID0gU1VOSV9NQ007CisJCWRsZSA9IFNVTklfTUNNX0RMRTsKKwkJbGxlID0gU1VOSV9NQ01fTExFOworCX0gZWxzZSB7CisJCXJlZyA9IFNVTklfTUNUOworCQlkbGUgPSBTVU5JX01DVF9ETEU7CisJCWxsZSA9IFNVTklfTUNUX0xMRTsKKwl9CisKKwljb250cm9sID0gZGV2LT5vcHMtPnBoeV9nZXQoZGV2LCByZWcpICYgfihkbGUgfCBsbGUpOwogCXN3aXRjaCAobW9kZSkgewogCQljYXNlIEFUTV9MTV9OT05FOgogCQkJYnJlYWs7CiAJCWNhc2UgQVRNX0xNX0xPQ19QSFk6Ci0JCQljb250cm9sIHw9IFNVTklfTUNUX0RMRTsKKwkJCWNvbnRyb2wgfD0gZGxlOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRNX0xNX1JNVF9QSFk6Ci0JCQljb250cm9sIHw9IFNVTklfTUNUX0xMRTsKKwkJCWNvbnRyb2wgfD0gbGxlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JUFVUKGNvbnRyb2wsTUNUKTsKKwkgZGV2LT5vcHMtPnBoeV9wdXQoZGV2LCBjb250cm9sLCByZWcpOwogCVBSSVYoZGV2KS0+bG9vcF9tb2RlID0gbW9kZTsKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFNPTkVUIHZzLiBTREggQ29uZmlndXJhdGlvbgorICoKKyAqIFowSU5TIChyZWdpc3RlciAweDA2KTogMCBmb3IgU09ORVQsIDEgZm9yIFNESAorICogRU5TUyAocmVnaXN0ZXIgMHgzRCk6IDAgZm9yIFNPTkVULCAxIGZvciBTREgKKyAqIExFTjE2IChyZWdpc3RlciAweDI4KTogMCBmb3IgU09ORVQsIDEgZm9yIFNESCAobi9hIGZvciBTL1VOSSAxNTUgUVVBRCkKKyAqIExFTjE2IChyZWdpc3RlciAweDUwKTogMCBmb3IgU09ORVQsIDEgZm9yIFNESCAobi9hIGZvciBTL1VOSSAxNTUgUVVBRCkKKyAqIFNbMTowXSAocmVnaXN0ZXIgMHg0Nik6IDAwIGZvciBTT05FVCwgMTAgZm9yIFNESAorICovCisKK3N0YXRpYyBpbnQgc2V0X3NvbmV0KHN0cnVjdCBhdG1fZGV2ICpkZXYpCit7CisJaWYgKFBSSVYoZGV2KS0+dHlwZSA9PSBTVU5JX01SSV9UWVBFX1BNNTM1NSkgeworCQlQVVQoR0VUKFJQT1BfUkMpICYgflNVTklfUlBPUF9SQ19FTlNTLCBSUE9QX1JDKTsKKwkJUFVUKEdFVChTU1RCX0NUUkwpICYgflNVTklfU1NUQl9DVFJMX0xFTjE2LCBTU1RCX0NUUkwpOworCQlQVVQoR0VUKFNQVEJfQ1RSTCkgJiB+U1VOSV9TUFRCX0NUUkxfTEVOMTYsIFNQVEJfQ1RSTCk7CisJfQorCisJUkVHX0NIQU5HRShTVU5JX1RQT1BfQVBNX1MsIFNVTklfVFBPUF9BUE1fU19TSElGVCwKKwkJICAgU1VOSV9UUE9QX1NfU09ORVQsIFRQT1BfQVBNKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9zZGgoc3RydWN0IGF0bV9kZXYgKmRldikKK3sKKwlpZiAoUFJJVihkZXYpLT50eXBlID09IFNVTklfTVJJX1RZUEVfUE01MzU1KSB7CisJCVBVVChHRVQoUlBPUF9SQykgfCBTVU5JX1JQT1BfUkNfRU5TUywgUlBPUF9SQyk7CisJCVBVVChHRVQoU1NUQl9DVFJMKSB8IFNVTklfU1NUQl9DVFJMX0xFTjE2LCBTU1RCX0NUUkwpOworCQlQVVQoR0VUKFNQVEJfQ1RSTCkgfCBTVU5JX1NQVEJfQ1RSTF9MRU4xNiwgU1BUQl9DVFJMKTsKKwl9CisKKwlSRUdfQ0hBTkdFKFNVTklfVFBPUF9BUE1fUywgU1VOSV9UUE9QX0FQTV9TX1NISUZULAorCQkgICBTVU5JX1RQT1BfU19TREgsIFRQT1BfQVBNKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZ2V0X2ZyYW1pbmcoc3RydWN0IGF0bV9kZXYgKmRldiwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlpbnQgZnJhbWluZzsKKwl1bnNpZ25lZCBjaGFyIHM7CisKKworCXMgPSAoR0VUKFRQT1BfQVBNKSAmIFNVTklfVFBPUF9BUE1fUykgPj4gU1VOSV9UUE9QX0FQTV9TX1NISUZUOworCWlmIChzID09IFNVTklfVFBPUF9TX1NPTkVUKQorCQlmcmFtaW5nID0gU09ORVRfRlJBTUVfU09ORVQ7CisJZWxzZQorCQlmcmFtaW5nID0gU09ORVRfRlJBTUVfU0RIOworCisJcmV0dXJuIHB1dF91c2VyKGZyYW1pbmcsIChpbnQgX191c2VyICopIGFyZykgPyAtRUZBVUxUIDogMDsKK30KKworc3RhdGljIGludCBzZXRfZnJhbWluZyhzdHJ1Y3QgYXRtX2RldiAqZGV2LCB2b2lkIF9fdXNlciAqYXJnKQoreworCWludCBtb2RlOworCisJaWYgKGdldF91c2VyKG1vZGUsIChpbnQgX191c2VyICopIGFyZykpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKG1vZGUgPT0gU09ORVRfRlJBTUVfU09ORVQpCisJCXJldHVybiBzZXRfc29uZXQoZGV2KTsKKwllbHNlIGlmIChtb2RlID09IFNPTkVUX0ZSQU1FX1NESCkKKwkJcmV0dXJuIHNldF9zZGgoZGV2KTsKKworCXJldHVybiAtRUlOVkFMOworfQorCiAKIHN0YXRpYyBpbnQgc3VuaV9pb2N0bChzdHJ1Y3QgYXRtX2RldiAqZGV2LHVuc2lnbmVkIGludCBjbWQsdm9pZCBfX3VzZXIgKmFyZykKIHsKQEAgLTE4OCwxNCArMjY1LDE2IEBACiAJCWNhc2UgU09ORVRfR0VURElBRzoKIAkJCXJldHVybiBnZXRfZGlhZyhkZXYsYXJnKTsKIAkJY2FzZSBTT05FVF9TRVRGUkFNSU5HOgotCQkJaWYgKChpbnQpKHVuc2lnbmVkIGxvbmcpYXJnICE9IFNPTkVUX0ZSQU1FX1NPTkVUKSByZXR1cm4gLUVJTlZBTDsKLQkJCXJldHVybiAwOworCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJCXJldHVybiAtRVBFUk07CisJCQlyZXR1cm4gc2V0X2ZyYW1pbmcoZGV2LCBhcmcpOwogCQljYXNlIFNPTkVUX0dFVEZSQU1JTkc6Ci0JCQlyZXR1cm4gcHV0X3VzZXIoU09ORVRfRlJBTUVfU09ORVQsKGludCBfX3VzZXIgKilhcmcpID8KLQkJCSAgICAtRUZBVUxUIDogMDsKKwkJCXJldHVybiBnZXRfZnJhbWluZyhkZXYsIGFyZyk7CiAJCWNhc2UgU09ORVRfR0VURlJTRU5TRToKIAkJCXJldHVybiAtRUlOVkFMOwogCQljYXNlIEFUTV9TRVRMT09QOgorCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJCXJldHVybiAtRVBFUk07CiAJCQlyZXR1cm4gc2V0X2xvb3BiYWNrKGRldiwoaW50KSh1bnNpZ25lZCBsb25nKWFyZyk7CiAJCWNhc2UgQVRNX0dFVExPT1A6CiAJCQlyZXR1cm4gcHV0X3VzZXIoUFJJVihkZXYpLT5sb29wX21vZGUsKGludCBfX3VzZXIgKilhcmcpID8KQEAgLTIyOSwxMCArMzA4LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBmaXJzdDsKIAotCWlmICghKGRldi0+cGh5X2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3VuaV9wcml2KSxHRlBfS0VSTkVMKSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JUFJJVihkZXYpLT5kZXYgPSBkZXY7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN1bmlzX2xvY2ssZmxhZ3MpOwogCWZpcnN0ID0gIXN1bmlzOwogCVBSSVYoZGV2KS0+bmV4dCA9IHN1bmlzOwpAQCAtMjkzLDE2ICszNjgsMjEgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIG1yaTsKIAorCWlmICghKGRldi0+cGh5X2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3VuaV9wcml2KSxHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCVBSSVYoZGV2KS0+ZGV2ID0gZGV2OworCiAJbXJpID0gR0VUKE1SSSk7IC8qIHJlc2V0IFNVTkkgKi8KKwlQUklWKGRldiktPnR5cGUgPSAobXJpICYgU1VOSV9NUklfVFlQRSkgPj4gU1VOSV9NUklfVFlQRV9TSElGVDsKIAlQVVQobXJpIHwgU1VOSV9NUklfUkVTRVQsTVJJKTsKIAlQVVQobXJpLE1SSSk7CiAJUFVUKChHRVQoTVQpICYgU1VOSV9NVF9EUzI3XzUzKSxNVCk7IC8qIGRpc2FibGUgYWxsIHRlc3RzICovCi0JUkVHX0NIQU5HRShTVU5JX1RQT1BfQVBNX1MsU1VOSV9UUE9QX0FQTV9TX1NISUZULFNVTklfVFBPUF9TX1NPTkVULAotCSAgICBUUE9QX0FQTSk7IC8qIHVzZSBTT05FVCAqLworICAgICAgICBzZXRfc29uZXQoZGV2KTsKIAlSRUdfQ0hBTkdFKFNVTklfVEFDUF9JVUNIUF9DTFAsMCxTVU5JX1RBQ1BfSVVDSFBfQ0xQLAogCSAgICBUQUNQX0lVQ0hQKTsgLyogaWRsZSBjZWxscyAqLwogCVBVVChTVU5JX0lETEVfUEFUVEVSTixUQUNQX0lVQ1BPUCk7CiAJZGV2LT5waHkgPSAmc3VuaV9vcHM7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc3VuaS5oIGIvZHJpdmVycy9hdG0vc3VuaS5oCmluZGV4IGQxNGM4MzUuLjdlM2U2NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3N1bmkuaAorKysgYi9kcml2ZXJzL2F0bS9zdW5pLmgKQEAgLTEsMTQgKzEsMTUgQEAKLS8qIGRyaXZlcnMvYXRtL3N1bmkuaCAtIFBNQyBQTTUzNDYgU1VOSSAoUEhZKSBkZWNsYXJhdGlvbnMgKi8KKy8qCisgKiBkcml2ZXJzL2F0bS9zdW5pLmggLSBTL1VOSSBQSFkgZHJpdmVyCisgKi8KICAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCi0gCiAKICNpZm5kZWYgRFJJVkVSX0FUTV9TVU5JX0gKICNkZWZpbmUgRFJJVkVSX0FUTV9TVU5JX0gKIAogI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgotCisjaW5jbHVkZSA8bGludXgvc29uZXQuaD4KIAogLyogU1VOSSByZWdpc3RlcnMgKi8KIApAQCAtMzksNyArNDAsOCBAQAogI2RlZmluZSBTVU5JX1JMT1BfTEZNCQkweDFGCS8qIFJMT1AgTGluZSBGRUJFIE1TQiAqLwogI2RlZmluZSBTVU5JX1RMT1BfQ1RSTAkJMHgyMAkvKiBUTE9QIENvbnRyb2wgKi8KICNkZWZpbmUgU1VOSV9UTE9QX0RJQUcJCTB4MjEJLyogVExPUCBEaWFnbm9zdGljICovCi0JCQkgICAgIC8qIDB4MjItMHgyRiByZXNlcnZlZCAqLworCQkJICAgICAvKiAweDIyLTB4MjcgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgU1VOSV9TU1RCX0NUUkwJCTB4MjgKICNkZWZpbmUgU1VOSV9SUE9QX1NDCQkweDMwCS8qIFJQT1AgU3RhdHVzL0NvbnRyb2wgKi8KICNkZWZpbmUgU1VOSV9SUE9QX0lTCQkweDMxCS8qIFJQT1AgSW50ZXJydXB0IFN0YXR1cyAqLwogCQkJICAgICAvKiAweDMyIHJlc2VydmVkICovCkBAIC01Miw2ICs1NCw3IEBACiAjZGVmaW5lIFNVTklfUlBPUF9QRk0JCTB4M0IJLyogUlBPUCBQYXRoIEZFQkUgTVNCICovCiAJCQkgICAgIC8qIDB4M0MgcmVzZXJ2ZWQgKi8KICNkZWZpbmUgU1VOSV9SUE9QX1BCQwkJMHgzRAkvKiBSUE9QIFBhdGggQklQLTggQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBTVU5JX1JQT1BfUkMJCTB4M0QJLyogUlBPUCBSaW5nIENvbnRyb2wgKFBNNTM1NSkgKi8KIAkJCSAgICAgLyogMHgzRS0weDNGIHJlc2VydmVkICovCiAjZGVmaW5lIFNVTklfVFBPUF9DRAkJMHg0MAkvKiBUUE9QIENvbnRyb2wvRGlhZ25vc3RpYyAqLwogI2RlZmluZSBTVU5JX1RQT1BfUEMJCTB4NDEJLyogVFBPUCBQb2ludGVyIENvbnRyb2wgKi8KQEAgLTgyLDcgKzg1LDggQEAKICNkZWZpbmUgU1VOSV9UQUNQX1RDQwkJMHg2NQkvKiBUQUNQIFRyYW5zbWl0IENlbGwgQ291bnRlciAqLwogI2RlZmluZSBTVU5JX1RBQ1BfVENDTQkJMHg2NgkvKiBUQUNQIFRyYW5zbWl0IENlbGwgQ291bnRlciBNU0IgKi8KICNkZWZpbmUgU1VOSV9UQUNQX0NGRwkJMHg2NwkvKiBUQUNQIENvbmZpZ3VyYXRpb24gKi8KLQkJCSAgICAgLyogMHg2OC0weDdGIHJlc2VydmVkICovCisjZGVmaW5lIFNVTklfU1BUQl9DVFJMCQkweDY4CS8qIFNQVEIgQ29udHJvbCAqLworCQkJICAgICAvKiAweDY5LTB4N0YgcmVzZXJ2ZWQgKi8KICNkZWZpbmUJU1VOSV9NVAkJCTB4ODAJLyogTWFzdGVyIFRlc3QgKi8KIAkJCSAgICAgLyogMHg4MS0weEZGIHJlc2VydmVkICovCiAKQEAgLTk0LDkgKzk4LDE4IEBACiAjZGVmaW5lIFNVTklfTVJJX0lEX1NISUZUIAkwCiAjZGVmaW5lIFNVTklfTVJJX1RZUEUJCTB4NzAJLyogUiwgU1VOSSB0eXBlIChsaXRlIGlzIDAxMSkgKi8KICNkZWZpbmUgU1VOSV9NUklfVFlQRV9TSElGVCAJNAorI2RlZmluZSBTVU5JX01SSV9UWVBFX1BNNTM0NgkweDMJLyogUy9VTkkgMTU1IExJVEUgKi8KKyNkZWZpbmUgU1VOSV9NUklfVFlQRV9QTTUzNDcJMHg0CS8qIFMvVU5JIDE1NSBQTFVTICovCisjZGVmaW5lIFNVTklfTVJJX1RZUEVfUE01MzUwCTB4NwkvKiBTL1VOSSAxNTUgVUxUUkEgKi8KKyNkZWZpbmUgU1VOSV9NUklfVFlQRV9QTTUzNTUJMHgxCS8qIFMvVU5JIDYyMiAqLwogI2RlZmluZSBTVU5JX01SSV9SRVNFVAkJMHg4MAkvKiBSVywgcmVzZXQgJiBwb3dlciBkb3duIGNoaXAKIAkJCQkJICAgMDogbm9ybWFsIG9wZXJhdGlvbgogCQkJCQkgICAxOiByZXNldCAmIGxvdyBwb3dlciAqLworCisvKiBNQ00gaXMgcmVnIDB4NCAqLworI2RlZmluZSBTVU5JX01DTV9MTEUJCTB4MjAJLyogbGluZSBsb29wYmFjayAoUE01MzU1KSAqLworI2RlZmluZSBTVU5JX01DTV9ETEUJCTB4MTAJLyogZGlhZ25vc3RpYyBsb29wYmFjayAoUE01MzU1KSAqLworCiAvKiBNQ1QgaXMgcmVnIDUgKi8KICNkZWZpbmUgU1VOSV9NQ1RfTE9PUFQJCTB4MDEJLyogUlcsIHRpbWluZyBzb3VyY2UsIDA6IGZyb20KIAkJCQkJICAgVFJDTEsrLy0gKi8KQEAgLTE0NCw2ICsxNTcsMTIgQEAKIC8qIFRMT1BfRElBRyBpcyByZWcgMHgyMSAqLwogI2RlZmluZSBTVU5JX1RMT1BfRElBR19EQklQCTB4MDEJLyogaW5zZXJ0IGxpbmUgQklQIGVyciAoY29udGludW91c2x5KSAqLwogCisvKiBTU1RCX0NUUkwgaXMgcmVnIDB4MjggKi8KKyNkZWZpbmUgU1VOSV9TU1RCX0NUUkxfTEVOMTYJMHgwMQkvKiBwYXRoIHRyYWNlIG1lc3NhZ2UgbGVuZ3RoIGJpdCAqLworCisvKiBSUE9QX1JDIGlzIHJlZyAweDNEIChQTTUzNTUpICovCisjZGVmaW5lIFNVTklfUlBPUF9SQ19FTlNTCTB4NDAJLyogZW5hYmxlIHNpemUgYml0ICovCisKIC8qIFRQT1BfRElBRyBpcyByZWcgMHg0MCAqLwogI2RlZmluZSBTVU5JX1RQT1BfRElBR19QQUlTCTB4MDEJLyogaW5zZXJ0IFNUUyBwYXRoIGFsYXJtIGluZCAoY29udCkgKi8KICNkZWZpbmUgU1VOSV9UUE9QX0RJQUdfREIzCTB4MDIJLyogaW5zZXJ0IHBhdGggQklQIGVyciAoY29udGludW91c2x5KSAqLwpAQCAtMTkxLDYgKzIxMCw5IEBACiAJCQkJCSAgIHBhdHRlcm4gKi8KICNkZWZpbmUgU1VOSV9UQUNQX0lVQ0hQX0dGQ19TSElGVCA0CiAKKy8qIFNQVEJfQ1RSTCBpcyByZWcgMHg2OCAqLworI2RlZmluZSBTVU5JX1NQVEJfQ1RSTF9MRU4xNgkweDAxCS8qIHBhdGggdHJhY2UgbWVzc2FnZSBsZW5ndGggKi8KKwogLyogTVQgaXMgcmVnIDB4ODAgKi8KICNkZWZpbmUgU1VOSV9NVF9ISVpJTwkJMHgwMQkvKiBSVywgYWxsIGJ1dCBkYXRhIGJ1cyAmIE1QIGludGVyZmFjZQogCQkJCQkgICB0cmktc3RhdGUgKi8KQEAgLTIwNSw2ICsyMjcsMTQgQEAKIAogCiAjaWZkZWYgX19LRVJORUxfXworc3RydWN0IHN1bmlfcHJpdiB7CisJc3RydWN0IGtfc29uZXRfc3RhdHMgc29uZXRfc3RhdHM7CS8qIGxpbmsgZGlhZ25vc3RpY3MgKi8KKwlpbnQgbG9vcF9tb2RlOwkJCQkvKiBsb29wYmFjayBtb2RlICovCisJaW50IHR5cGU7CQkJCS8qIHBoeSB0eXBlICovCisJc3RydWN0IGF0bV9kZXYgKmRldjsJCQkvKiBkZXZpY2UgYmFjay1wb2ludGVyICovCisJc3RydWN0IHN1bmlfcHJpdiAqbmV4dDsJCQkvKiBuZXh0IFNVTkkgKi8KK307CisKIGludCBzdW5pX2luaXQoc3RydWN0IGF0bV9kZXYgKmRldik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL0tjb25maWcgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwppbmRleCBkNDc0ODJmLi42MzE4ZjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwpAQCAtMjcsOCArMjcsOSBAQAogCSAgSWYgdW5zdXJlIHNheSBZIGhlcmUuCiAKIGNvbmZpZyBGV19MT0FERVIKLQl0cmlzdGF0ZSAiVXNlcnNwYWNlIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVXNlcnNwYWNlIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIEhPVFBMVUcKKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBpcyBwcm92aWRlZCBmb3IgdGhlIGNhc2Ugd2hlcmUgbm8gaW4ta2VybmVsLXRyZWUgbW9kdWxlcwogCSAgcmVxdWlyZSB1c2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0LCBidXQgYSBtb2R1bGUgYnVpbHQgb3V0c2lkZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKaW5kZXggMmM5YWU0My4uMzFkYzBjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Jhc2UuaAorKysgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oCkBAIC0zNiw2ICszNiwzMyBAQAogfTsKICNkZWZpbmUgdG9fZHJpdmVyKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRyaXZlcl9wcml2YXRlLCBrb2JqKQogCisKKy8qKgorICogc3RydWN0IGNsYXNzX3ByaXZhdGUgLSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgcHJpdmF0ZSB0byB0aGUgZHJpdmVyIGNvcmUgcG9ydGlvbnMgb2YgdGhlIGNsYXNzIHN0cnVjdHVyZS4KKyAqCisgKiBAY2xhc3Nfc3Vic3lzIC0gdGhlIHN0cnVjdCBrc2V0IHRoYXQgZGVmaW5lcyB0aGlzIGNsYXNzLiAgVGhpcyBpcyB0aGUgbWFpbiBrb2JqZWN0CisgKiBAY2xhc3NfZGV2aWNlcyAtIGxpc3Qgb2YgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjbGFzcworICogQGNsYXNzX2ludGVyZmFjZXMgLSBsaXN0IG9mIGNsYXNzX2ludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2xhc3MKKyAqIEBjbGFzc19kaXJzIC0gImdsdWUiIGRpcmVjdG9yeSBmb3IgdmlydHVhbCBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYXNzCisgKiBAY2xhc3NfbXV0ZXggLSBtdXRleCB0byBwcm90ZWN0IHRoZSBjaGlsZHJlbiwgZGV2aWNlcywgYW5kIGludGVyZmFjZXMgbGlzdHMuCisgKiBAY2xhc3MgLSBwb2ludGVyIGJhY2sgdG8gdGhlIHN0cnVjdCBjbGFzcyB0aGF0IHRoaXMgc3RydWN0dXJlIGlzIGFzc29jaWF0ZWQKKyAqIHdpdGguCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIG9uZSB0aGF0IGlzIHRoZSBhY3R1YWwga29iamVjdCBhbGxvd2luZyBzdHJ1Y3QKKyAqIGNsYXNzIHRvIGJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHNhZmVseS4gIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGUgZHJpdmVyCisgKiBjb3JlIHNob3VsZCBldmVyIHRvdWNoIHRoZXNlIGZpZWxkcy4KKyAqLworc3RydWN0IGNsYXNzX3ByaXZhdGUgeworCXN0cnVjdCBrc2V0IGNsYXNzX3N1YnN5czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsYXNzX2RldmljZXM7CisJc3RydWN0IGxpc3RfaGVhZCBjbGFzc19pbnRlcmZhY2VzOworCXN0cnVjdCBrc2V0IGNsYXNzX2RpcnM7CisJc3RydWN0IG11dGV4IGNsYXNzX211dGV4OworCXN0cnVjdCBjbGFzcyAqY2xhc3M7Cit9OworI2RlZmluZSB0b19jbGFzcyhvYmopCVwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgY2xhc3NfcHJpdmF0ZSwgY2xhc3Nfc3Vic3lzLmtvYmopCisKIC8qIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBkZXZpY2VzX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGJ1c2VzX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCmluZGV4IGUwODVhZjAuLjgzOWQyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCkBAIC0xOCwyMCArMTgsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgImJhc2UuaCIKIAogI2RlZmluZSB0b19jbGFzc19hdHRyKF9hdHRyKSBjb250YWluZXJfb2YoX2F0dHIsIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUsIGF0dHIpCi0jZGVmaW5lIHRvX2NsYXNzKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGNsYXNzLCBzdWJzeXMua29iaikKIAogc3RhdGljIHNzaXplX3QgY2xhc3NfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJICAgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICpjbGFzc19hdHRyID0gdG9fY2xhc3NfYXR0cihhdHRyKTsKLQlzdHJ1Y3QgY2xhc3MgKmRjID0gdG9fY2xhc3Moa29iaik7CisJc3RydWN0IGNsYXNzX3ByaXZhdGUgKmNwID0gdG9fY2xhc3Moa29iaik7CiAJc3NpemVfdCByZXQgPSAtRUlPOwogCiAJaWYgKGNsYXNzX2F0dHItPnNob3cpCi0JCXJldCA9IGNsYXNzX2F0dHItPnNob3coZGMsIGJ1Zik7CisJCXJldCA9IGNsYXNzX2F0dHItPnNob3coY3AtPmNsYXNzLCBidWYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM5LDE3ICszOSwxOCBAQAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIgPSB0b19jbGFzc19hdHRyKGF0dHIpOwotCXN0cnVjdCBjbGFzcyAqZGMgPSB0b19jbGFzcyhrb2JqKTsKKwlzdHJ1Y3QgY2xhc3NfcHJpdmF0ZSAqY3AgPSB0b19jbGFzcyhrb2JqKTsKIAlzc2l6ZV90IHJldCA9IC1FSU87CiAKIAlpZiAoY2xhc3NfYXR0ci0+c3RvcmUpCi0JCXJldCA9IGNsYXNzX2F0dHItPnN0b3JlKGRjLCBidWYsIGNvdW50KTsKKwkJcmV0ID0gY2xhc3NfYXR0ci0+c3RvcmUoY3AtPmNsYXNzLCBidWYsIGNvdW50KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBjbGFzc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewotCXN0cnVjdCBjbGFzcyAqY2xhc3MgPSB0b19jbGFzcyhrb2JqKTsKKwlzdHJ1Y3QgY2xhc3NfcHJpdmF0ZSAqY3AgPSB0b19jbGFzcyhrb2JqKTsKKwlzdHJ1Y3QgY2xhc3MgKmNsYXNzID0gY3AtPmNsYXNzOwogCiAJcHJfZGVidWcoImNsYXNzICclcyc6IHJlbGVhc2UuXG4iLCBjbGFzcy0+bmFtZSk7CiAKQEAgLTcwLDcgKzcxLDcgQEAKIAkucmVsZWFzZQk9IGNsYXNzX3JlbGVhc2UsCiB9OwogCi0vKiBIb3RwbHVnIGV2ZW50cyBmb3IgY2xhc3NlcyBnbyB0byB0aGUgY2xhc3Nfb2JqIHN1YnN5cyAqLworLyogSG90cGx1ZyBldmVudHMgZm9yIGNsYXNzZXMgZ28gdG8gdGhlIGNsYXNzIGNsYXNzX3N1YnN5cyAqLwogc3RhdGljIHN0cnVjdCBrc2V0ICpjbGFzc19rc2V0OwogCiAKQEAgLTc4LDcgKzc5LDggQEAKIHsKIAlpbnQgZXJyb3I7CiAJaWYgKGNscykKLQkJZXJyb3IgPSBzeXNmc19jcmVhdGVfZmlsZSgmY2xzLT5zdWJzeXMua29iaiwgJmF0dHItPmF0dHIpOworCQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZjbHMtPnAtPmNsYXNzX3N1YnN5cy5rb2JqLAorCQkJCQkgICZhdHRyLT5hdHRyKTsKIAllbHNlCiAJCWVycm9yID0gLUVJTlZBTDsKIAlyZXR1cm4gZXJyb3I7CkBAIC04NywyMSArODksMjAgQEAKIHZvaWQgY2xhc3NfcmVtb3ZlX2ZpbGUoc3RydWN0IGNsYXNzICpjbHMsIGNvbnN0IHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaWYgKGNscykKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNscy0+c3Vic3lzLmtvYmosICZhdHRyLT5hdHRyKTsKKwkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNscy0+cC0+Y2xhc3Nfc3Vic3lzLmtvYmosICZhdHRyLT5hdHRyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqY2xhc3NfZ2V0KHN0cnVjdCBjbGFzcyAqY2xzKQogewogCWlmIChjbHMpCi0JCXJldHVybiBjb250YWluZXJfb2Yoa3NldF9nZXQoJmNscy0+c3Vic3lzKSwKLQkJCQkgICAgc3RydWN0IGNsYXNzLCBzdWJzeXMpOwotCXJldHVybiBOVUxMOworCQlrc2V0X2dldCgmY2xzLT5wLT5jbGFzc19zdWJzeXMpOworCXJldHVybiBjbHM7CiB9CiAKIHN0YXRpYyB2b2lkIGNsYXNzX3B1dChzdHJ1Y3QgY2xhc3MgKmNscykKIHsKIAlpZiAoY2xzKQotCQlrc2V0X3B1dCgmY2xzLT5zdWJzeXMpOworCQlrc2V0X3B1dCgmY2xzLT5wLT5jbGFzc19zdWJzeXMpOwogfQogCiBzdGF0aWMgaW50IGFkZF9jbGFzc19hdHRycyhzdHJ1Y3QgY2xhc3MgKmNscykKQEAgLTEzNCw0MiArMTM1LDU3IEBACiAJfQogfQogCi1pbnQgY2xhc3NfcmVnaXN0ZXIoc3RydWN0IGNsYXNzICpjbHMpCitpbnQgX19jbGFzc19yZWdpc3RlcihzdHJ1Y3QgY2xhc3MgKmNscywgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiB7CisJc3RydWN0IGNsYXNzX3ByaXZhdGUgKmNwOwogCWludCBlcnJvcjsKIAogCXByX2RlYnVnKCJkZXZpY2UgY2xhc3MgJyVzJzogcmVnaXN0ZXJpbmdcbiIsIGNscy0+bmFtZSk7CiAKLQlJTklUX0xJU1RfSEVBRCgmY2xzLT5kZXZpY2VzKTsKLQlJTklUX0xJU1RfSEVBRCgmY2xzLT5pbnRlcmZhY2VzKTsKLQlrc2V0X2luaXQoJmNscy0+Y2xhc3NfZGlycyk7Ci0JaW5pdF9NVVRFWCgmY2xzLT5zZW0pOwotCWVycm9yID0ga29iamVjdF9zZXRfbmFtZSgmY2xzLT5zdWJzeXMua29iaiwgIiVzIiwgY2xzLT5uYW1lKTsKLQlpZiAoZXJyb3IpCisJY3AgPSBremFsbG9jKHNpemVvZigqY3ApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVOT01FTTsKKwlJTklUX0xJU1RfSEVBRCgmY3AtPmNsYXNzX2RldmljZXMpOworCUlOSVRfTElTVF9IRUFEKCZjcC0+Y2xhc3NfaW50ZXJmYWNlcyk7CisJa3NldF9pbml0KCZjcC0+Y2xhc3NfZGlycyk7CisJX19tdXRleF9pbml0KCZjcC0+Y2xhc3NfbXV0ZXgsICJzdHJ1Y3QgY2xhc3MgbXV0ZXgiLCBrZXkpOworCWVycm9yID0ga29iamVjdF9zZXRfbmFtZSgmY3AtPmNsYXNzX3N1YnN5cy5rb2JqLCAiJXMiLCBjbHMtPm5hbWUpOworCWlmIChlcnJvcikgeworCQlrZnJlZShjcCk7CiAJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKiBzZXQgdGhlIGRlZmF1bHQgL3N5cy9kZXYgZGlyZWN0b3J5IGZvciBkZXZpY2VzIG9mIHRoaXMgY2xhc3MgKi8KKwlpZiAoIWNscy0+ZGV2X2tvYmopCisJCWNscy0+ZGV2X2tvYmogPSBzeXNmc19kZXZfY2hhcl9rb2JqOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlNfREVQUkVDQVRFRCkgJiYgZGVmaW5lZChDT05GSUdfQkxPQ0spCiAJLyogbGV0IHRoZSBibG9jayBjbGFzcyBkaXJlY3Rvcnkgc2hvdyB1cCBpbiB0aGUgcm9vdCBvZiBzeXNmcyAqLwogCWlmIChjbHMgIT0gJmJsb2NrX2NsYXNzKQotCQljbHMtPnN1YnN5cy5rb2JqLmtzZXQgPSBjbGFzc19rc2V0OworCQljcC0+Y2xhc3Nfc3Vic3lzLmtvYmoua3NldCA9IGNsYXNzX2tzZXQ7CiAjZWxzZQotCWNscy0+c3Vic3lzLmtvYmoua3NldCA9IGNsYXNzX2tzZXQ7CisJY3AtPmNsYXNzX3N1YnN5cy5rb2JqLmtzZXQgPSBjbGFzc19rc2V0OwogI2VuZGlmCi0JY2xzLT5zdWJzeXMua29iai5rdHlwZSA9ICZjbGFzc19rdHlwZTsKKwljcC0+Y2xhc3Nfc3Vic3lzLmtvYmoua3R5cGUgPSAmY2xhc3Nfa3R5cGU7CisJY3AtPmNsYXNzID0gY2xzOworCWNscy0+cCA9IGNwOwogCi0JZXJyb3IgPSBrc2V0X3JlZ2lzdGVyKCZjbHMtPnN1YnN5cyk7Ci0JaWYgKCFlcnJvcikgewotCQllcnJvciA9IGFkZF9jbGFzc19hdHRycyhjbGFzc19nZXQoY2xzKSk7Ci0JCWNsYXNzX3B1dChjbHMpOworCWVycm9yID0ga3NldF9yZWdpc3RlcigmY3AtPmNsYXNzX3N1YnN5cyk7CisJaWYgKGVycm9yKSB7CisJCWtmcmVlKGNwKTsKKwkJcmV0dXJuIGVycm9yOwogCX0KKwllcnJvciA9IGFkZF9jbGFzc19hdHRycyhjbGFzc19nZXQoY2xzKSk7CisJY2xhc3NfcHV0KGNscyk7CiAJcmV0dXJuIGVycm9yOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoX19jbGFzc19yZWdpc3Rlcik7CiAKIHZvaWQgY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3QgY2xhc3MgKmNscykKIHsKIAlwcl9kZWJ1ZygiZGV2aWNlIGNsYXNzICclcyc6IHVucmVnaXN0ZXJpbmdcbiIsIGNscy0+bmFtZSk7CiAJcmVtb3ZlX2NsYXNzX2F0dHJzKGNscyk7Ci0Ja3NldF91bnJlZ2lzdGVyKCZjbHMtPnN1YnN5cyk7CisJa3NldF91bnJlZ2lzdGVyKCZjbHMtPnAtPmNsYXNzX3N1YnN5cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsYXNzX2NyZWF0ZV9yZWxlYXNlKHN0cnVjdCBjbGFzcyAqY2xzKQpAQCAtMTg5LDcgKzIwNSw4IEBACiAgKiBOb3RlLCB0aGUgcG9pbnRlciBjcmVhdGVkIGhlcmUgaXMgdG8gYmUgZGVzdHJveWVkIHdoZW4gZmluaXNoZWQgYnkKICAqIG1ha2luZyBhIGNhbGwgdG8gY2xhc3NfZGVzdHJveSgpLgogICovCi1zdHJ1Y3QgY2xhc3MgKmNsYXNzX2NyZWF0ZShzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbmFtZSkKK3N0cnVjdCBjbGFzcyAqX19jbGFzc19jcmVhdGUoc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQogewogCXN0cnVjdCBjbGFzcyAqY2xzOwogCWludCByZXR2YWw7CkBAIC0yMDQsNyArMjIxLDcgQEAKIAljbHMtPm93bmVyID0gb3duZXI7CiAJY2xzLT5jbGFzc19yZWxlYXNlID0gY2xhc3NfY3JlYXRlX3JlbGVhc2U7CiAKLQlyZXR2YWwgPSBjbGFzc19yZWdpc3RlcihjbHMpOworCXJldHZhbCA9IF9fY2xhc3NfcmVnaXN0ZXIoY2xzLCBrZXkpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTIxNCw2ICsyMzEsNyBAQAogCWtmcmVlKGNscyk7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fY2xhc3NfY3JlYXRlKTsKIAogLyoqCiAgKiBjbGFzc19kZXN0cm95IC0gZGVzdHJveXMgYSBzdHJ1Y3QgY2xhc3Mgc3RydWN0dXJlCkBAIC0yNTIsMzkgKzI3MCw0NCBAQAogLyoqCiAgKiBjbGFzc19mb3JfZWFjaF9kZXZpY2UgLSBkZXZpY2UgaXRlcmF0b3IKICAqIEBjbGFzczogdGhlIGNsYXNzIHdlJ3JlIGl0ZXJhdGluZworICogQHN0YXJ0OiB0aGUgZGV2aWNlIHRvIHN0YXJ0IHdpdGggaW4gdGhlIGxpc3QsIGlmIGFueS4KICAqIEBkYXRhOiBkYXRhIGZvciB0aGUgY2FsbGJhY2sKICAqIEBmbjogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGRldmljZQogICoKICAqIEl0ZXJhdGUgb3ZlciBAY2xhc3MncyBsaXN0IG9mIGRldmljZXMsIGFuZCBjYWxsIEBmbiBmb3IgZWFjaCwKLSAqIHBhc3NpbmcgaXQgQGRhdGEuCisgKiBwYXNzaW5nIGl0IEBkYXRhLiAgSWYgQHN0YXJ0IGlzIHNldCwgdGhlIGxpc3QgaXRlcmF0aW9uIHdpbGwgc3RhcnQKKyAqIHRoZXJlLCBvdGhlcndpc2UgaWYgaXQgaXMgTlVMTCwgdGhlIGl0ZXJhdGlvbiBzdGFydHMgYXQgdGhlCisgKiBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuCiAgKgogICogV2UgY2hlY2sgdGhlIHJldHVybiBvZiBAZm4gZWFjaCB0aW1lLiBJZiBpdCByZXR1cm5zIGFueXRoaW5nCiAgKiBvdGhlciB0aGFuIDAsIHdlIGJyZWFrIG91dCBhbmQgcmV0dXJuIHRoYXQgdmFsdWUuCiAgKgotICogTm90ZSwgd2UgaG9sZCBjbGFzcy0+c2VtIGluIHRoaXMgZnVuY3Rpb24sIHNvIGl0IGNhbiBub3QgYmUKKyAqIE5vdGUsIHdlIGhvbGQgY2xhc3MtPmNsYXNzX211dGV4IGluIHRoaXMgZnVuY3Rpb24sIHNvIGl0IGNhbiBub3QgYmUKICAqIHJlLWFjcXVpcmVkIGluIEBmbiwgb3RoZXJ3aXNlIGl0IHdpbGwgc2VsZi1kZWFkbG9ja2luZy4gRm9yCiAgKiBleGFtcGxlLCBjYWxscyB0byBhZGQgb3IgcmVtb3ZlIGNsYXNzIG1lbWJlcnMgd291bGQgYmUgdmVyYm90ZW4uCiAgKi8KLWludCBjbGFzc19mb3JfZWFjaF9kZXZpY2Uoc3RydWN0IGNsYXNzICpjbGFzcywgdm9pZCAqZGF0YSwKLQkJCSAgIGludCAoKmZuKShzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKikpCitpbnQgY2xhc3NfZm9yX2VhY2hfZGV2aWNlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIHN0cnVjdCBkZXZpY2UgKnN0YXJ0LAorCQkJICB2b2lkICpkYXRhLCBpbnQgKCpmbikoc3RydWN0IGRldmljZSAqLCB2b2lkICopKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKCFjbGFzcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZG93bigmY2xhc3MtPnNlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjbGFzcy0+ZGV2aWNlcywgbm9kZSkgeworCW11dGV4X2xvY2soJmNsYXNzLT5wLT5jbGFzc19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjbGFzcy0+cC0+Y2xhc3NfZGV2aWNlcywgbm9kZSkgeworCQlpZiAoc3RhcnQpIHsKKwkJCWlmIChzdGFydCA9PSBkZXYpCisJCQkJc3RhcnQgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KIAkJZGV2ID0gZ2V0X2RldmljZShkZXYpOwotCQlpZiAoZGV2KSB7Ci0JCQllcnJvciA9IGZuKGRldiwgZGF0YSk7Ci0JCQlwdXRfZGV2aWNlKGRldik7Ci0JCX0gZWxzZQotCQkJZXJyb3IgPSAtRU5PREVWOworCQllcnJvciA9IGZuKGRldiwgZGF0YSk7CisJCXB1dF9kZXZpY2UoZGV2KTsKIAkJaWYgKGVycm9yKQogCQkJYnJlYWs7CiAJfQotCXVwKCZjbGFzcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNsYXNzLT5wLT5jbGFzc19tdXRleCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yOTMsNiArMzE2LDcgQEAKIC8qKgogICogY2xhc3NfZmluZF9kZXZpY2UgLSBkZXZpY2UgaXRlcmF0b3IgZm9yIGxvY2F0aW5nIGEgcGFydGljdWxhciBkZXZpY2UKICAqIEBjbGFzczogdGhlIGNsYXNzIHdlJ3JlIGl0ZXJhdGluZworICogQHN0YXJ0OiBEZXZpY2UgdG8gYmVnaW4gd2l0aAogICogQGRhdGE6IGRhdGEgZm9yIHRoZSBtYXRjaCBmdW5jdGlvbgogICogQG1hdGNoOiBmdW5jdGlvbiB0byBjaGVjayBkZXZpY2UKICAqCkBAIC0zMDYsMTIgKzMzMCwxMyBAQAogICoKICAqIE5vdGUsIHlvdSB3aWxsIG5lZWQgdG8gZHJvcCB0aGUgcmVmZXJlbmNlIHdpdGggcHV0X2RldmljZSgpIGFmdGVyIHVzZS4KICAqCi0gKiBXZSBob2xkIGNsYXNzLT5zZW0gaW4gdGhpcyBmdW5jdGlvbiwgc28gaXQgY2FuIG5vdCBiZQorICogV2UgaG9sZCBjbGFzcy0+Y2xhc3NfbXV0ZXggaW4gdGhpcyBmdW5jdGlvbiwgc28gaXQgY2FuIG5vdCBiZQogICogcmUtYWNxdWlyZWQgaW4gQG1hdGNoLCBvdGhlcndpc2UgaXQgd2lsbCBzZWxmLWRlYWRsb2NraW5nLiBGb3IKICAqIGV4YW1wbGUsIGNhbGxzIHRvIGFkZCBvciByZW1vdmUgY2xhc3MgbWVtYmVycyB3b3VsZCBiZSB2ZXJib3Rlbi4KICAqLwotc3RydWN0IGRldmljZSAqY2xhc3NfZmluZF9kZXZpY2Uoc3RydWN0IGNsYXNzICpjbGFzcywgdm9pZCAqZGF0YSwKLQkJCQkgICBpbnQgKCptYXRjaCkoc3RydWN0IGRldmljZSAqLCB2b2lkICopKQorc3RydWN0IGRldmljZSAqY2xhc3NfZmluZF9kZXZpY2Uoc3RydWN0IGNsYXNzICpjbGFzcywgc3RydWN0IGRldmljZSAqc3RhcnQsCisJCQkJIHZvaWQgKmRhdGEsCisJCQkJIGludCAoKm1hdGNoKShzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKikpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCWludCBmb3VuZCA9IDA7CkBAIC0zMTksMTkgKzM0NCwyMSBAQAogCWlmICghY2xhc3MpCiAJCXJldHVybiBOVUxMOwogCi0JZG93bigmY2xhc3MtPnNlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjbGFzcy0+ZGV2aWNlcywgbm9kZSkgeworCW11dGV4X2xvY2soJmNsYXNzLT5wLT5jbGFzc19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjbGFzcy0+cC0+Y2xhc3NfZGV2aWNlcywgbm9kZSkgeworCQlpZiAoc3RhcnQpIHsKKwkJCWlmIChzdGFydCA9PSBkZXYpCisJCQkJc3RhcnQgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KIAkJZGV2ID0gZ2V0X2RldmljZShkZXYpOwotCQlpZiAoZGV2KSB7Ci0JCQlpZiAobWF0Y2goZGV2LCBkYXRhKSkgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZQotCQkJCXB1dF9kZXZpY2UoZGV2KTsKLQkJfSBlbHNlCisJCWlmIChtYXRjaChkZXYsIGRhdGEpKSB7CisJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKKwkJfSBlbHNlCisJCQlwdXRfZGV2aWNlKGRldik7CiAJfQotCXVwKCZjbGFzcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNsYXNzLT5wLT5jbGFzc19tdXRleCk7CiAKIAlyZXR1cm4gZm91bmQgPyBkZXYgOiBOVUxMOwogfQpAQCAtMzQ5LDEzICszNzYsMTMgQEAKIAlpZiAoIXBhcmVudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZwYXJlbnQtPnNlbSk7Ci0JbGlzdF9hZGRfdGFpbCgmY2xhc3NfaW50Zi0+bm9kZSwgJnBhcmVudC0+aW50ZXJmYWNlcyk7CisJbXV0ZXhfbG9jaygmcGFyZW50LT5wLT5jbGFzc19tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmY2xhc3NfaW50Zi0+bm9kZSwgJnBhcmVudC0+cC0+Y2xhc3NfaW50ZXJmYWNlcyk7CiAJaWYgKGNsYXNzX2ludGYtPmFkZF9kZXYpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZwYXJlbnQtPmRldmljZXMsIG5vZGUpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmcGFyZW50LT5wLT5jbGFzc19kZXZpY2VzLCBub2RlKQogCQkJY2xhc3NfaW50Zi0+YWRkX2RldihkZXYsIGNsYXNzX2ludGYpOwogCX0KLQl1cCgmcGFyZW50LT5zZW0pOworCW11dGV4X3VubG9jaygmcGFyZW50LT5wLT5jbGFzc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM2OCwxMyArMzk1LDEzIEBACiAJaWYgKCFwYXJlbnQpCiAJCXJldHVybjsKIAotCWRvd24oJnBhcmVudC0+c2VtKTsKKwltdXRleF9sb2NrKCZwYXJlbnQtPnAtPmNsYXNzX211dGV4KTsKIAlsaXN0X2RlbF9pbml0KCZjbGFzc19pbnRmLT5ub2RlKTsKIAlpZiAoY2xhc3NfaW50Zi0+cmVtb3ZlX2RldikgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnBhcmVudC0+ZGV2aWNlcywgbm9kZSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZwYXJlbnQtPnAtPmNsYXNzX2RldmljZXMsIG5vZGUpCiAJCQljbGFzc19pbnRmLT5yZW1vdmVfZGV2KGRldiwgY2xhc3NfaW50Zik7CiAJfQotCXVwKCZwYXJlbnQtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPnAtPmNsYXNzX211dGV4KTsKIAogCWNsYXNzX3B1dChwYXJlbnQpOwogfQpAQCAtMzg5LDkgKzQxNiw3IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGNsYXNzX2NyZWF0ZV9maWxlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNsYXNzX3JlbW92ZV9maWxlKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGNsYXNzX3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNsYXNzX3VucmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTF9HUEwoY2xhc3NfY3JlYXRlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNsYXNzX2Rlc3Ryb3kpOwogCiBFWFBPUlRfU1lNQk9MX0dQTChjbGFzc19pbnRlcmZhY2VfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggZWUwYTUxYS4uN2Q1YzYzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC0yMSwxMiArMjEsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgImJhc2UuaCIKICNpbmNsdWRlICJwb3dlci9wb3dlci5oIgogCiBpbnQgKCpwbGF0Zm9ybV9ub3RpZnkpKHN0cnVjdCBkZXZpY2UgKmRldikgPSBOVUxMOwogaW50ICgqcGxhdGZvcm1fbm90aWZ5X3JlbW92ZSkoc3RydWN0IGRldmljZSAqZGV2KSA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGtvYmplY3QgKmRldl9rb2JqOworc3RydWN0IGtvYmplY3QgKnN5c2ZzX2Rldl9jaGFyX2tvYmo7CitzdHJ1Y3Qga29iamVjdCAqc3lzZnNfZGV2X2Jsb2NrX2tvYmo7CiAKICNpZmRlZiBDT05GSUdfQkxPQ0sKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9pc19ub3RfcGFydGl0aW9uKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTU0OCw3ICs1NTIsNyBAQAogewogCS8qIGNsYXNzIGRldmljZXMgd2l0aG91dCBhIHBhcmVudCBsaXZlIGluIC9zeXMvY2xhc3MvPGNsYXNzbmFtZT4vICovCiAJaWYgKGRldi0+Y2xhc3MgJiYgKCFwYXJlbnQgfHwgcGFyZW50LT5jbGFzcyAhPSBkZXYtPmNsYXNzKSkKLQkJcmV0dXJuICZkZXYtPmNsYXNzLT5zdWJzeXMua29iajsKKwkJcmV0dXJuICZkZXYtPmNsYXNzLT5wLT5jbGFzc19zdWJzeXMua29iajsKIAkvKiBhbGwgb3RoZXIgZGV2aWNlcyBrZWVwIHRoZWlyIHBhcmVudCAqLwogCWVsc2UgaWYgKHBhcmVudCkKIAkJcmV0dXJuICZwYXJlbnQtPmtvYmo7CkBAIC01OTQsMTMgKzU5OCwxMyBAQAogCQkJcGFyZW50X2tvYmogPSAmcGFyZW50LT5rb2JqOwogCiAJCS8qIGZpbmQgb3VyIGNsYXNzLWRpcmVjdG9yeSBhdCB0aGUgcGFyZW50IGFuZCByZWZlcmVuY2UgaXQgKi8KLQkJc3Bpbl9sb2NrKCZkZXYtPmNsYXNzLT5jbGFzc19kaXJzLmxpc3RfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoaywgJmRldi0+Y2xhc3MtPmNsYXNzX2RpcnMubGlzdCwgZW50cnkpCisJCXNwaW5fbG9jaygmZGV2LT5jbGFzcy0+cC0+Y2xhc3NfZGlycy5saXN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGssICZkZXYtPmNsYXNzLT5wLT5jbGFzc19kaXJzLmxpc3QsIGVudHJ5KQogCQkJaWYgKGstPnBhcmVudCA9PSBwYXJlbnRfa29iaikgewogCQkJCWtvYmogPSBrb2JqZWN0X2dldChrKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJc3Bpbl91bmxvY2soJmRldi0+Y2xhc3MtPmNsYXNzX2RpcnMubGlzdF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+Y2xhc3MtPnAtPmNsYXNzX2RpcnMubGlzdF9sb2NrKTsKIAkJaWYgKGtvYmopCiAJCQlyZXR1cm4ga29iajsKIApAQCAtNjA4LDcgKzYxMiw3IEBACiAJCWsgPSBrb2JqZWN0X2NyZWF0ZSgpOwogCQlpZiAoIWspCiAJCQlyZXR1cm4gTlVMTDsKLQkJay0+a3NldCA9ICZkZXYtPmNsYXNzLT5jbGFzc19kaXJzOworCQlrLT5rc2V0ID0gJmRldi0+Y2xhc3MtPnAtPmNsYXNzX2RpcnM7CiAJCXJldHZhbCA9IGtvYmplY3RfYWRkKGssIHBhcmVudF9rb2JqLCAiJXMiLCBkZXYtPmNsYXNzLT5uYW1lKTsKIAkJaWYgKHJldHZhbCA8IDApIHsKIAkJCWtvYmplY3RfcHV0KGspOwpAQCAtNjI3LDcgKzYzMSw3IEBACiB7CiAJLyogc2VlIGlmIHdlIGxpdmUgaW4gYSAiZ2x1ZSIgZGlyZWN0b3J5ICovCiAJaWYgKCFnbHVlX2RpciB8fCAhZGV2LT5jbGFzcyB8fAotCSAgICBnbHVlX2Rpci0+a3NldCAhPSAmZGV2LT5jbGFzcy0+Y2xhc3NfZGlycykKKwkgICAgZ2x1ZV9kaXItPmtzZXQgIT0gJmRldi0+Y2xhc3MtPnAtPmNsYXNzX2RpcnMpCiAJCXJldHVybjsKIAogCWtvYmplY3RfcHV0KGdsdWVfZGlyKTsKQEAgLTY1NCwxNyArNjU4LDE4IEBACiAJaWYgKCFkZXYtPmNsYXNzKQogCQlyZXR1cm4gMDsKIAotCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+a29iaiwgJmRldi0+Y2xhc3MtPnN1YnN5cy5rb2JqLAorCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+a29iaiwKKwkJCQkgICZkZXYtPmNsYXNzLT5wLT5jbGFzc19zdWJzeXMua29iaiwKIAkJCQkgICJzdWJzeXN0ZW0iKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQKIAkvKiBzdGFja2VkIGNsYXNzIGRldmljZXMgbmVlZCBhIHN5bWxpbmsgaW4gdGhlIGNsYXNzIGRpcmVjdG9yeSAqLwotCWlmIChkZXYtPmtvYmoucGFyZW50ICE9ICZkZXYtPmNsYXNzLT5zdWJzeXMua29iaiAmJgorCWlmIChkZXYtPmtvYmoucGFyZW50ICE9ICZkZXYtPmNsYXNzLT5wLT5jbGFzc19zdWJzeXMua29iaiAmJgogCSAgICBkZXZpY2VfaXNfbm90X3BhcnRpdGlvbihkZXYpKSB7Ci0JCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+Y2xhc3MtPnN1YnN5cy5rb2JqLCAmZGV2LT5rb2JqLAotCQkJCQkgIGRldi0+YnVzX2lkKTsKKwkJZXJyb3IgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2LT5jbGFzcy0+cC0+Y2xhc3Nfc3Vic3lzLmtvYmosCisJCQkJCSAgJmRldi0+a29iaiwgZGV2LT5idXNfaWQpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF9zdWJzeXM7CiAJfQpAQCAtNzAxLDEzICs3MDYsMTQgQEAKIAlpZiAoZGV2LT5wYXJlbnQgJiYgZGV2aWNlX2lzX25vdF9wYXJ0aXRpb24oZGV2KSkKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+a29iaiwgImRldmljZSIpOwogb3V0X2J1c2lkOgotCWlmIChkZXYtPmtvYmoucGFyZW50ICE9ICZkZXYtPmNsYXNzLT5zdWJzeXMua29iaiAmJgorCWlmIChkZXYtPmtvYmoucGFyZW50ICE9ICZkZXYtPmNsYXNzLT5wLT5jbGFzc19zdWJzeXMua29iaiAmJgogCSAgICBkZXZpY2VfaXNfbm90X3BhcnRpdGlvbihkZXYpKQotCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5jbGFzcy0+c3Vic3lzLmtvYmosIGRldi0+YnVzX2lkKTsKKwkJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+Y2xhc3MtPnAtPmNsYXNzX3N1YnN5cy5rb2JqLAorCQkJCSAgZGV2LT5idXNfaWQpOwogI2Vsc2UKIAkvKiBsaW5rIGluIHRoZSBjbGFzcyBkaXJlY3RvcnkgcG9pbnRpbmcgdG8gdGhlIGRldmljZSAqLwotCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+Y2xhc3MtPnN1YnN5cy5rb2JqLCAmZGV2LT5rb2JqLAotCQkJCSAgZGV2LT5idXNfaWQpOworCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+Y2xhc3MtPnAtPmNsYXNzX3N1YnN5cy5rb2JqLAorCQkJCSAgJmRldi0+a29iaiwgZGV2LT5idXNfaWQpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfc3Vic3lzOwogCkBAIC03MjAsNyArNzI2LDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2J1c2lkOgotCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmNsYXNzLT5zdWJzeXMua29iaiwgZGV2LT5idXNfaWQpOworCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19zdWJzeXMua29iaiwgZGV2LT5idXNfaWQpOwogI2VuZGlmCiAKIG91dF9zdWJzeXM6CkBAIC03NDYsMTQgKzc1MiwxNSBAQAogCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5rb2JqLCAiZGV2aWNlIik7CiAJfQogCi0JaWYgKGRldi0+a29iai5wYXJlbnQgIT0gJmRldi0+Y2xhc3MtPnN1YnN5cy5rb2JqICYmCisJaWYgKGRldi0+a29iai5wYXJlbnQgIT0gJmRldi0+Y2xhc3MtPnAtPmNsYXNzX3N1YnN5cy5rb2JqICYmCiAJICAgIGRldmljZV9pc19ub3RfcGFydGl0aW9uKGRldikpCi0JCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmNsYXNzLT5zdWJzeXMua29iaiwgZGV2LT5idXNfaWQpOworCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5jbGFzcy0+cC0+Y2xhc3Nfc3Vic3lzLmtvYmosCisJCQkJICBkZXYtPmJ1c19pZCk7CiAjZWxzZQogCWlmIChkZXYtPnBhcmVudCAmJiBkZXZpY2VfaXNfbm90X3BhcnRpdGlvbihkZXYpKQogCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5rb2JqLCAiZGV2aWNlIik7CiAKLQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5jbGFzcy0+c3Vic3lzLmtvYmosIGRldi0+YnVzX2lkKTsKKwlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5jbGFzcy0+cC0+Y2xhc3Nfc3Vic3lzLmtvYmosIGRldi0+YnVzX2lkKTsKICNlbmRpZgogCiAJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+a29iaiwgInN1YnN5c3RlbSIpOwpAQCAtNzc2LDYgKzc4Myw1NCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X3NldF9uYW1lKTsKIAogLyoqCisgKiBkZXZpY2VfdG9fZGV2X2tvYmogLSBzZWxlY3QgYSAvc3lzL2Rldi8gZGlyZWN0b3J5IGZvciB0aGUgZGV2aWNlCisgKiBAZGV2OiBkZXZpY2UKKyAqCisgKiBCeSBkZWZhdWx0IHdlIHNlbGVjdCBjaGFyLyBmb3IgbmV3IGVudHJpZXMuICBTZXR0aW5nIGNsYXNzLT5kZXZfb2JqCisgKiB0byBOVUxMIHByZXZlbnRzIGFuIGVudHJ5IGZyb20gYmVpbmcgY3JlYXRlZC4gIGNsYXNzLT5kZXZfa29iaiBtdXN0CisgKiBiZSBzZXQgKG9yIGNsZWFyZWQpIGJlZm9yZSBhbnkgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZCB0byB0aGUgY2xhc3MKKyAqIG90aGVyd2lzZSBkZXZpY2VfY3JlYXRlX3N5c19kZXZfZW50cnkoKSBhbmQKKyAqIGRldmljZV9yZW1vdmVfc3lzX2Rldl9lbnRyeSgpIHdpbGwgZGlzYWdyZWUgYWJvdXQgdGhlIHRoZSBwcmVzZW5jZQorICogb2YgdGhlIGxpbmsuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqZGV2aWNlX3RvX2Rldl9rb2JqKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qga29iamVjdCAqa29iajsKKworCWlmIChkZXYtPmNsYXNzKQorCQlrb2JqID0gZGV2LT5jbGFzcy0+ZGV2X2tvYmo7CisJZWxzZQorCQlrb2JqID0gc3lzZnNfZGV2X2NoYXJfa29iajsKKworCXJldHVybiBrb2JqOworfQorCitzdGF0aWMgaW50IGRldmljZV9jcmVhdGVfc3lzX2Rldl9lbnRyeShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGtvYmplY3QgKmtvYmogPSBkZXZpY2VfdG9fZGV2X2tvYmooZGV2KTsKKwlpbnQgZXJyb3IgPSAwOworCWNoYXIgZGV2dF9zdHJbMTVdOworCisJaWYgKGtvYmopIHsKKwkJZm9ybWF0X2Rldl90KGRldnRfc3RyLCBkZXYtPmRldnQpOworCQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9saW5rKGtvYmosICZkZXYtPmtvYmosIGRldnRfc3RyKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZV9yZW1vdmVfc3lzX2Rldl9lbnRyeShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGtvYmplY3QgKmtvYmogPSBkZXZpY2VfdG9fZGV2X2tvYmooZGV2KTsKKwljaGFyIGRldnRfc3RyWzE1XTsKKworCWlmIChrb2JqKSB7CisJCWZvcm1hdF9kZXZfdChkZXZ0X3N0ciwgZGV2LT5kZXZ0KTsKKwkJc3lzZnNfcmVtb3ZlX2xpbmsoa29iaiwgZGV2dF9zdHIpOworCX0KK30KKworLyoqCiAgKiBkZXZpY2VfYWRkIC0gYWRkIGRldmljZSB0byBkZXZpY2UgaGllcmFyY2h5LgogICogQGRldjogZGV2aWNlLgogICoKQEAgLTgyOSw2ICs4ODQsMTAgQEAKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2dF9hdHRyKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byB1ZXZlbnRhdHRyRXJyb3I7CisKKwkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX3N5c19kZXZfZW50cnkoZGV2KTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBkZXZ0YXR0ckVycm9yOwogCX0KIAogCWVycm9yID0gZGV2aWNlX2FkZF9jbGFzc19zeW1saW5rcyhkZXYpOwpAQCAtODQ5LDE1ICs5MDgsMTYgQEAKIAkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfcGFyZW50LCAmcGFyZW50LT5rbGlzdF9jaGlsZHJlbik7CiAKIAlpZiAoZGV2LT5jbGFzcykgewotCQlkb3duKCZkZXYtPmNsYXNzLT5zZW0pOworCQltdXRleF9sb2NrKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19tdXRleCk7CiAJCS8qIHRpZSB0aGUgY2xhc3MgdG8gdGhlIGRldmljZSAqLwotCQlsaXN0X2FkZF90YWlsKCZkZXYtPm5vZGUsICZkZXYtPmNsYXNzLT5kZXZpY2VzKTsKKwkJbGlzdF9hZGRfdGFpbCgmZGV2LT5ub2RlLCAmZGV2LT5jbGFzcy0+cC0+Y2xhc3NfZGV2aWNlcyk7CiAKIAkJLyogbm90aWZ5IGFueSBpbnRlcmZhY2VzIHRoYXQgdGhlIGRldmljZSBpcyBoZXJlICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xhc3NfaW50ZiwgJmRldi0+Y2xhc3MtPmludGVyZmFjZXMsIG5vZGUpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xhc3NfaW50ZiwKKwkJCQkgICAgJmRldi0+Y2xhc3MtPnAtPmNsYXNzX2ludGVyZmFjZXMsIG5vZGUpCiAJCQlpZiAoY2xhc3NfaW50Zi0+YWRkX2RldikKIAkJCQljbGFzc19pbnRmLT5hZGRfZGV2KGRldiwgY2xhc3NfaW50Zik7Ci0JCXVwKCZkZXYtPmNsYXNzLT5zZW0pOworCQltdXRleF91bmxvY2soJmRldi0+Y2xhc3MtPnAtPmNsYXNzX211dGV4KTsKIAl9CiAgRG9uZToKIAlwdXRfZGV2aWNlKGRldik7CkBAIC04NzMsNiArOTMzLDkgQEAKIAlkZXZpY2VfcmVtb3ZlX2NsYXNzX3N5bWxpbmtzKGRldik7CiAgU3ltbGlua0Vycm9yOgogCWlmIChNQUpPUihkZXYtPmRldnQpKQorCQlkZXZpY2VfcmVtb3ZlX3N5c19kZXZfZW50cnkoZGV2KTsKKyBkZXZ0YXR0ckVycm9yOgorCWlmIChNQUpPUihkZXYtPmRldnQpKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2dF9hdHRyKTsKICB1ZXZlbnRhdHRyRXJyb3I6CiAJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnVldmVudF9hdHRyKTsKQEAgLTk0OCwxOSArMTAxMSwyMiBAQAogCWRldmljZV9wbV9yZW1vdmUoZGV2KTsKIAlpZiAocGFyZW50KQogCQlrbGlzdF9kZWwoJmRldi0+a25vZGVfcGFyZW50KTsKLQlpZiAoTUFKT1IoZGV2LT5kZXZ0KSkKKwlpZiAoTUFKT1IoZGV2LT5kZXZ0KSkgeworCQlkZXZpY2VfcmVtb3ZlX3N5c19kZXZfZW50cnkoZGV2KTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldnRfYXR0cik7CisJfQogCWlmIChkZXYtPmNsYXNzKSB7CiAJCWRldmljZV9yZW1vdmVfY2xhc3Nfc3ltbGlua3MoZGV2KTsKIAotCQlkb3duKCZkZXYtPmNsYXNzLT5zZW0pOworCQltdXRleF9sb2NrKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19tdXRleCk7CiAJCS8qIG5vdGlmeSBhbnkgaW50ZXJmYWNlcyB0aGF0IHRoZSBkZXZpY2UgaXMgbm93IGdvbmUgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGFzc19pbnRmLCAmZGV2LT5jbGFzcy0+aW50ZXJmYWNlcywgbm9kZSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGFzc19pbnRmLAorCQkJCSAgICAmZGV2LT5jbGFzcy0+cC0+Y2xhc3NfaW50ZXJmYWNlcywgbm9kZSkKIAkJCWlmIChjbGFzc19pbnRmLT5yZW1vdmVfZGV2KQogCQkJCWNsYXNzX2ludGYtPnJlbW92ZV9kZXYoZGV2LCBjbGFzc19pbnRmKTsKIAkJLyogcmVtb3ZlIHRoZSBkZXZpY2UgZnJvbSB0aGUgY2xhc3MgbGlzdCAqLwogCQlsaXN0X2RlbF9pbml0KCZkZXYtPm5vZGUpOwotCQl1cCgmZGV2LT5jbGFzcy0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19tdXRleCk7CiAJfQogCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZ1ZXZlbnRfYXR0cik7CiAJZGV2aWNlX3JlbW92ZV9hdHRycyhkZXYpOwpAQCAtMTA3NCw3ICsxMTQwLDI1IEBACiAJZGV2aWNlc19rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgiZGV2aWNlcyIsICZkZXZpY2VfdWV2ZW50X29wcywgTlVMTCk7CiAJaWYgKCFkZXZpY2VzX2tzZXQpCiAJCXJldHVybiAtRU5PTUVNOworCWRldl9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiZGV2IiwgTlVMTCk7CisJaWYgKCFkZXZfa29iaikKKwkJZ290byBkZXZfa29ial9lcnI7CisJc3lzZnNfZGV2X2Jsb2NrX2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJibG9jayIsIGRldl9rb2JqKTsKKwlpZiAoIXN5c2ZzX2Rldl9ibG9ja19rb2JqKQorCQlnb3RvIGJsb2NrX2tvYmpfZXJyOworCXN5c2ZzX2Rldl9jaGFyX2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJjaGFyIiwgZGV2X2tvYmopOworCWlmICghc3lzZnNfZGV2X2NoYXJfa29iaikKKwkJZ290byBjaGFyX2tvYmpfZXJyOworCiAJcmV0dXJuIDA7CisKKyBjaGFyX2tvYmpfZXJyOgorCWtvYmplY3RfcHV0KHN5c2ZzX2Rldl9ibG9ja19rb2JqKTsKKyBibG9ja19rb2JqX2VycjoKKwlrb2JqZWN0X3B1dChkZXZfa29iaik7CisgZGV2X2tvYmpfZXJyOgorCWtzZXRfdW5yZWdpc3RlcihkZXZpY2VzX2tzZXQpOworCXJldHVybiAtRU5PTUVNOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfZm9yX2VhY2hfY2hpbGQpOwpAQCAtMTE1OCw3ICsxMjQyLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9jcmVhdGVfdmFyZ3MpOwogCiAvKioKLSAqIGRldmljZV9jcmVhdGVfZHJ2ZGF0YSAtIGNyZWF0ZXMgYSBkZXZpY2UgYW5kIHJlZ2lzdGVycyBpdCB3aXRoIHN5c2ZzCisgKiBkZXZpY2VfY3JlYXRlIC0gY3JlYXRlcyBhIGRldmljZSBhbmQgcmVnaXN0ZXJzIGl0IHdpdGggc3lzZnMKICAqIEBjbGFzczogcG9pbnRlciB0byB0aGUgc3RydWN0IGNsYXNzIHRoYXQgdGhpcyBkZXZpY2Ugc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdG8KICAqIEBwYXJlbnQ6IHBvaW50ZXIgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgZGV2aWNlIG9mIHRoaXMgbmV3IGRldmljZSwgaWYgYW55CiAgKiBAZGV2dDogdGhlIGRldl90IGZvciB0aGUgY2hhciBkZXZpY2UgdG8gYmUgYWRkZWQKQEAgLTExNzksMTEgKzEyNjMsOCBAQAogICogTm90ZTogdGhlIHN0cnVjdCBjbGFzcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGhhdmUgcHJldmlvdXNseQogICogYmVlbiBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIGNsYXNzX2NyZWF0ZSgpLgogICovCi1zdHJ1Y3QgZGV2aWNlICpkZXZpY2VfY3JlYXRlX2RydmRhdGEoc3RydWN0IGNsYXNzICpjbGFzcywKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKLQkJCQkgICAgIGRldl90IGRldnQsCi0JCQkJICAgICB2b2lkICpkcnZkYXRhLAotCQkJCSAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCitzdHJ1Y3QgZGV2aWNlICpkZXZpY2VfY3JlYXRlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKKwkJCSAgICAgZGV2X3QgZGV2dCwgdm9pZCAqZHJ2ZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCB2YXJnczsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0xMTkzLDQwICsxMjc0LDYgQEAKIAl2YV9lbmQodmFyZ3MpOwogCXJldHVybiBkZXY7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfY3JlYXRlX2RydmRhdGEpOwotCi0vKioKLSAqIGRldmljZV9jcmVhdGUgLSBjcmVhdGVzIGEgZGV2aWNlIGFuZCByZWdpc3RlcnMgaXQgd2l0aCBzeXNmcwotICogQGNsYXNzOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xhc3MgdGhhdCB0aGlzIGRldmljZSBzaG91bGQgYmUgcmVnaXN0ZXJlZCB0bwotICogQHBhcmVudDogcG9pbnRlciB0byB0aGUgcGFyZW50IHN0cnVjdCBkZXZpY2Ugb2YgdGhpcyBuZXcgZGV2aWNlLCBpZiBhbnkKLSAqIEBkZXZ0OiB0aGUgZGV2X3QgZm9yIHRoZSBjaGFyIGRldmljZSB0byBiZSBhZGRlZAotICogQGZtdDogc3RyaW5nIGZvciB0aGUgZGV2aWNlJ3MgbmFtZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgY2hhciBkZXZpY2UgY2xhc3Nlcy4gIEEgc3RydWN0IGRldmljZQotICogd2lsbCBiZSBjcmVhdGVkIGluIHN5c2ZzLCByZWdpc3RlcmVkIHRvIHRoZSBzcGVjaWZpZWQgY2xhc3MuCi0gKgotICogQSAiZGV2IiBmaWxlIHdpbGwgYmUgY3JlYXRlZCwgc2hvd2luZyB0aGUgZGV2X3QgZm9yIHRoZSBkZXZpY2UsIGlmCi0gKiB0aGUgZGV2X3QgaXMgbm90IDAsMC4KLSAqIElmIGEgcG9pbnRlciB0byBhIHBhcmVudCBzdHJ1Y3QgZGV2aWNlIGlzIHBhc3NlZCBpbiwgdGhlIG5ld2x5IGNyZWF0ZWQKLSAqIHN0cnVjdCBkZXZpY2Ugd2lsbCBiZSBhIGNoaWxkIG9mIHRoYXQgZGV2aWNlIGluIHN5c2ZzLgotICogVGhlIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBkZXZpY2Ugd2lsbCBiZSByZXR1cm5lZCBmcm9tIHRoZSBjYWxsLgotICogQW55IGZ1cnRoZXIgc3lzZnMgZmlsZXMgdGhhdCBtaWdodCBiZSByZXF1aXJlZCBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGlzCi0gKiBwb2ludGVyLgotICoKLSAqIE5vdGU6IHRoZSBzdHJ1Y3QgY2xhc3MgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBoYXZlIHByZXZpb3VzbHkKLSAqIGJlZW4gY3JlYXRlZCB3aXRoIGEgY2FsbCB0byBjbGFzc19jcmVhdGUoKS4KLSAqLwotc3RydWN0IGRldmljZSAqZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCi0JCQkgICAgIGRldl90IGRldnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgdmFyZ3M7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCi0JdmFfc3RhcnQodmFyZ3MsIGZtdCk7Ci0JZGV2ID0gZGV2aWNlX2NyZWF0ZV92YXJncyhjbGFzcywgcGFyZW50LCBkZXZ0LCBOVUxMLCBmbXQsIHZhcmdzKTsKLQl2YV9lbmQodmFyZ3MpOwotCXJldHVybiBkZXY7Ci19CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfY3JlYXRlKTsKIAogc3RhdGljIGludCBfX21hdGNoX2RldnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQpAQCAtMTI0OCw3ICsxMjk1LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBjbGFzc19maW5kX2RldmljZShjbGFzcywgJmRldnQsIF9fbWF0Y2hfZGV2dCk7CisJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoY2xhc3MsIE5VTEwsICZkZXZ0LCBfX21hdGNoX2RldnQpOwogCWlmIChkZXYpIHsKIAkJcHV0X2RldmljZShkZXYpOwogCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwpAQCAtMTI5OCw4ICsxMzQ1LDkgQEAKIAlpZiAob2xkX2NsYXNzX25hbWUpIHsKIAkJbmV3X2NsYXNzX25hbWUgPSBtYWtlX2NsYXNzX25hbWUoZGV2LT5jbGFzcy0+bmFtZSwgJmRldi0+a29iaik7CiAJCWlmIChuZXdfY2xhc3NfbmFtZSkgewotCQkJZXJyb3IgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2LT5wYXJlbnQtPmtvYmosCi0JCQkJCQkgICZkZXYtPmtvYmosIG5ld19jbGFzc19uYW1lKTsKKwkJCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmtfbm93YXJuKCZkZXYtPnBhcmVudC0+a29iaiwKKwkJCQkJCQkgJmRldi0+a29iaiwKKwkJCQkJCQkgbmV3X2NsYXNzX25hbWUpOwogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gb3V0OwogCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+cGFyZW50LT5rb2JqLCBvbGRfY2xhc3NfbmFtZSk7CkBAIC0xMzA3LDExICsxMzU1LDEyIEBACiAJfQogI2Vsc2UKIAlpZiAoZGV2LT5jbGFzcykgewotCQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXYtPmNsYXNzLT5zdWJzeXMua29iaiwgJmRldi0+a29iaiwKLQkJCQkJICBkZXYtPmJ1c19pZCk7CisJCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmtfbm93YXJuKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19zdWJzeXMua29iaiwKKwkJCQkJCSAmZGV2LT5rb2JqLCBkZXYtPmJ1c19pZCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwotCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5jbGFzcy0+c3Vic3lzLmtvYmosIG9sZF9kZXZpY2VfbmFtZSk7CisJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19zdWJzeXMua29iaiwKKwkJCQkgIG9sZF9kZXZpY2VfbmFtZSk7CiAJfQogI2VuZGlmCiAKQEAgLTE0NDcsNCArMTQ5Niw3IEBACiAJCQlkZXYtPmRyaXZlci0+c2h1dGRvd24oZGV2KTsKIAkJfQogCX0KKwlrb2JqZWN0X3B1dChzeXNmc19kZXZfY2hhcl9rb2JqKTsKKwlrb2JqZWN0X3B1dChzeXNmc19kZXZfYmxvY2tfa29iaik7CisJa29iamVjdF9wdXQoZGV2X2tvYmopOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NwdS5jIGIvZHJpdmVycy9iYXNlL2NwdS5jCmluZGV4IGUzOGRmZWQuLjY0ZjVkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jcHUuYworKysgYi9kcml2ZXJzL2Jhc2UvY3B1LmMKQEAgLTIxLDE1ICsyMSwxNiBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzeXNfZGV2aWNlICosIGNwdV9zeXNfZGV2aWNlcyk7CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLXN0YXRpYyBzc2l6ZV90IHNob3dfb25saW5lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfb25saW5lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBjcHUgKmNwdSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcHUsIHN5c2Rldik7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISFjcHVfb25saW5lKGNwdS0+c3lzZGV2LmlkKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IF9fcmVmIHN0b3JlX29ubGluZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgX19yZWYgc3RvcmVfb25saW5lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY3B1ICpjcHUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgY3B1LCBzeXNkZXYpOwogCXNzaXplX3QgcmV0OwpAQCAtODAsNyArODEsOCBAQAogI2lmZGVmIENPTkZJR19LRVhFQwogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfY3Jhc2hfbm90ZXMoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19jcmFzaF9ub3RlcyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCiB7CiAJc3RydWN0IGNwdSAqY3B1ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGNwdSwgc3lzZGV2KTsKIAlzc2l6ZV90IHJjOwpAQCAtMTE5LDE0ICsxMjEsMTQgQEAKIHsJCQkJCQkJCQlcCiAJcmV0dXJuIHByaW50X2NwdXNfbWFwKGJ1ZiwgJmNwdV8jI3R5cGUjI19tYXApOwkJCVwKIH0JCQkJCQkJCQlcCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSBhdHRyXyMjdHlwZSMjX21hcCA9IAkJCVwKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSBhdHRyXyMjdHlwZSMjX21hcCA9IAkJXAogCV9TWVNERVZfQ0xBU1NfQVRUUih0eXBlLCAwNDQ0LCBwcmludF9jcHVzXyMjdHlwZSwgTlVMTCkKIAogcHJpbnRfY3B1c19mdW5jKG9ubGluZSk7CiBwcmludF9jcHVzX2Z1bmMocG9zc2libGUpOwogcHJpbnRfY3B1c19mdW5jKHByZXNlbnQpOwogCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqY3B1X3N0YXRlX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqY3B1X3N0YXRlX2F0dHJbXSA9IHsKIAkmYXR0cl9vbmxpbmVfbWFwLAogCSZhdHRyX3Bvc3NpYmxlX21hcCwKIAkmYXR0cl9wcmVzZW50X21hcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwppbmRleCA5MzdlODI1Li40ZDRlMGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKKysrIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCkBAIC05Miw3ICs5Miw4IEBACiAgKiB1c2VzLgogICovCiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfbWVtX3BoeXNfaW5kZXgoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19tZW1fcGh5c19pbmRleChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0gPQogCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWVtb3J5X2Jsb2NrLCBzeXNkZXYpOwpAQCAtMTAyLDcgKzEwMyw4IEBACiAvKgogICogb25saW5lLCBvZmZsaW5lLCBnb2luZyBvZmZsaW5lLCBldGMuCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfbWVtX3N0YXRlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfbWVtX3N0YXRlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSA9CiAJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtZW1vcnlfYmxvY2ssIHN5c2Rldik7CkBAIC0yMTcsNyArMjE5LDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXN0b3JlX21lbV9zdGF0ZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0b3JlX21lbV9zdGF0ZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtOwogCXVuc2lnbmVkIGludCBwaHlzX3NlY3Rpb25fbnI7CkBAIC0yNDgsNyArMjUxLDggQEAKICAqIHMudC4gaWYgSSBvZmZsaW5lIGFsbCBvZiB0aGVzZSBzZWN0aW9ucyBJIGNhbiB0aGVuCiAgKiByZW1vdmUgdGhlIHBoeXNpY2FsIGRldmljZT8KICAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19waHlzX2RldmljZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3BoeXNfZGV2aWNlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0gPQogCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWVtb3J5X2Jsb2NrLCBzeXNkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggMGY4NjdhMC4uNTExNmI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC0zNiwxMSArMzYsMTMgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW5saW5lIHNzaXplX3Qgbm9kZV9yZWFkX2NwdW1hc2soc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIGlubGluZSBzc2l6ZV90IG5vZGVfcmVhZF9jcHVtYXNrKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gbm9kZV9yZWFkX2NwdW1hcChkZXYsIDAsIGJ1Zik7CiB9Ci1zdGF0aWMgaW5saW5lIHNzaXplX3Qgbm9kZV9yZWFkX2NwdWxpc3Qoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIGlubGluZSBzc2l6ZV90IG5vZGVfcmVhZF9jcHVsaXN0KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gbm9kZV9yZWFkX2NwdW1hcChkZXYsIDEsIGJ1Zik7CiB9CkBAIC00OSw3ICs1MSw4IEBACiBzdGF0aWMgU1lTREVWX0FUVFIoY3B1bGlzdCwgU19JUlVHTywgbm9kZV9yZWFkX2NwdWxpc3QsIE5VTEwpOwogCiAjZGVmaW5lIEsoeCkgKCh4KSA8PCAoUEFHRV9TSElGVCAtIDEwKSkKLXN0YXRpYyBzc2l6ZV90IG5vZGVfcmVhZF9tZW1pbmZvKHN0cnVjdCBzeXNfZGV2aWNlICogZGV2LCBjaGFyICogYnVmKQorc3RhdGljIHNzaXplX3Qgbm9kZV9yZWFkX21lbWluZm8oc3RydWN0IHN5c19kZXZpY2UgKiBkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqIGJ1ZikKIHsKIAlpbnQgbjsKIAlpbnQgbmlkID0gZGV2LT5pZDsKQEAgLTExMiw3ICsxMTUsOCBAQAogI3VuZGVmIEsKIHN0YXRpYyBTWVNERVZfQVRUUihtZW1pbmZvLCBTX0lSVUdPLCBub2RlX3JlYWRfbWVtaW5mbywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IG5vZGVfcmVhZF9udW1hc3RhdChzdHJ1Y3Qgc3lzX2RldmljZSAqIGRldiwgY2hhciAqIGJ1ZikKK3N0YXRpYyBzc2l6ZV90IG5vZGVfcmVhZF9udW1hc3RhdChzdHJ1Y3Qgc3lzX2RldmljZSAqIGRldiwKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqIGJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsCiAJCSAgICAgICAibnVtYV9oaXQgJWx1XG4iCkBAIC0xMzAsNyArMTM0LDggQEAKIH0KIHN0YXRpYyBTWVNERVZfQVRUUihudW1hc3RhdCwgU19JUlVHTywgbm9kZV9yZWFkX251bWFzdGF0LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgbm9kZV9yZWFkX2Rpc3RhbmNlKHN0cnVjdCBzeXNfZGV2aWNlICogZGV2LCBjaGFyICogYnVmKQorc3RhdGljIHNzaXplX3Qgbm9kZV9yZWFkX2Rpc3RhbmNlKHN0cnVjdCBzeXNfZGV2aWNlICogZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCiB7CiAJaW50IG5pZCA9IGRldi0+aWQ7CiAJaW50IGxlbiA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvdHJhY2UuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci90cmFjZS5jCmluZGV4IDliMWIyMGIuLjJhYTZlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci90cmFjZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci90cmFjZS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJc3RydWN0IGRldmljZSAqIGRldiA9IHRvX2RldmljZShlbnRyeSk7CiAJCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9zdHJpbmcoREVWU0VFRCwgZGV2LT5idXNfaWQsIERFVkhBU0gpOwogCQlpZiAoaGFzaCA9PSB2YWx1ZSkgewotCQkJcHJpbnRrKCIgIGhhc2ggbWF0Y2hlcyBkZXZpY2UgJXNcbiIsIGRldi0+YnVzX2lkKTsKKwkJCWRldl9pbmZvKGRldiwgImhhc2ggbWF0Y2hlc1xuIik7CiAJCQltYXRjaCsrOwogCQl9CiAJCWVudHJ5ID0gZW50cnktPnByZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvc3lzLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKaW5kZXggMzU4YmIwYi4uNDBmYzE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9zeXMuYwpAQCAtMzYsNyArMzYsNyBAQAogCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogc3lzZGV2X2F0dHIgPSB0b19zeXNkZXZfYXR0cihhdHRyKTsKIAogCWlmIChzeXNkZXZfYXR0ci0+c2hvdykKLQkJcmV0dXJuIHN5c2Rldl9hdHRyLT5zaG93KHN5c2RldiwgYnVmZmVyKTsKKwkJcmV0dXJuIHN5c2Rldl9hdHRyLT5zaG93KHN5c2Rldiwgc3lzZGV2X2F0dHIsIGJ1ZmZlcik7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqIHN5c2Rldl9hdHRyID0gdG9fc3lzZGV2X2F0dHIoYXR0cik7CiAKIAlpZiAoc3lzZGV2X2F0dHItPnN0b3JlKQotCQlyZXR1cm4gc3lzZGV2X2F0dHItPnN0b3JlKHN5c2RldiwgYnVmZmVyLCBjb3VudCk7CisJCXJldHVybiBzeXNkZXZfYXR0ci0+c3RvcmUoc3lzZGV2LCBzeXNkZXZfYXR0ciwgYnVmZmVyLCBjb3VudCk7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTEzMCw4ICsxMzAsOCBAQAogCiBpbnQgc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHMpCiB7Ci0JcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5c2RldiBjbGFzcyAnJXMnXG4iLAotCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOworCXByX2RlYnVnKCJSZWdpc3RlcmluZyBzeXNkZXYgY2xhc3MgJyVzJ1xuIiwgY2xzLT5uYW1lKTsKKwogCUlOSVRfTElTVF9IRUFEKCZjbHMtPmRyaXZlcnMpOwogCW1lbXNldCgmY2xzLT5rc2V0LmtvYmosIDB4MDAsIHNpemVvZihzdHJ1Y3Qga29iamVjdCkpOwogCWNscy0+a3NldC5rb2JqLnBhcmVudCA9ICZzeXN0ZW1fa3NldC0+a29iajsKQEAgLTI0MSw3ICsyNDEsOCBAQAogCWlmICghY2xzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXByX2RlYnVnKCJSZWdpc3RlcmluZyBzeXMgZGV2aWNlICclcydcbiIsIGtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSk7CisJcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5cyBkZXZpY2Ugb2YgY2xhc3MgJyVzJ1xuIiwKKwkJIGtvYmplY3RfbmFtZSgmY2xzLT5rc2V0LmtvYmopKTsKIAogCS8qIGluaXRpYWxpemUgdGhlIGtvYmplY3QgdG8gMCwgaW4gY2FzZSBpdCBoYWQgcHJldmlvdXNseSBiZWVuIHVzZWQgKi8KIAltZW1zZXQoJnN5c2Rldi0+a29iaiwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBrb2JqZWN0KSk7CkBAIC0yNTcsNiArMjU4LDkgQEAKIAlpZiAoIWVycm9yKSB7CiAJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OwogCisJCXByX2RlYnVnKCJSZWdpc3RlcmluZyBzeXMgZGV2aWNlICclcydcbiIsCisJCQkga29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopKTsKKwogCQltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAkJLyogR2VuZXJpYyBub3RpZmljYXRpb24gaXMgaW1wbGljaXQsIGJlY2F1c2UgaXQncyB0aGF0CiAJCSAqIGNvZGUgdGhhdCBzaG91bGQgaGF2ZSBjYWxsZWQgdXMuCkBAIC0yNjksNiArMjczLDcgQEAKIAkJfQogCQltdXRleF91bmxvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwogCX0KKwogCWtvYmplY3RfdWV2ZW50KCZzeXNkZXYtPmtvYmosIEtPQkpfQUREKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC00NzQsMyArNDc5LDUyIEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2Rldl9yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MX0dQTChzeXNkZXZfdW5yZWdpc3Rlcik7CisKKyNkZWZpbmUgdG9fZXh0X2F0dHIoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBzeXNkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0cikKKworc3NpemVfdCBzeXNkZXZfc3RvcmVfdWxvbmcoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwKKwkJCSAgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3lzZGV2X2V4dF9hdHRyaWJ1dGUgKmVhID0gdG9fZXh0X2F0dHIoYXR0cik7CisJY2hhciAqZW5kOworCXVuc2lnbmVkIGxvbmcgbmV3ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kLCAwKTsKKwlpZiAoZW5kID09IGJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisJKih1bnNpZ25lZCBsb25nICopKGVhLT52YXIpID0gbmV3OworCXJldHVybiBlbmQgLSBidWY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeXNkZXZfc3RvcmVfdWxvbmcpOworCitzc2l6ZV90IHN5c2Rldl9zaG93X3Vsb25nKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsCisJCQkgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHN5c2Rldl9leHRfYXR0cmlidXRlICplYSA9IHRvX2V4dF9hdHRyKGF0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVseFxuIiwgKih1bnNpZ25lZCBsb25nICopKGVhLT52YXIpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2Rldl9zaG93X3Vsb25nKTsKKworc3NpemVfdCBzeXNkZXZfc3RvcmVfaW50KHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsCisJCQkgICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHN5c2Rldl9leHRfYXR0cmlidXRlICplYSA9IHRvX2V4dF9hdHRyKGF0dHIpOworCWNoYXIgKmVuZDsKKwlsb25nIG5ldyA9IHNpbXBsZV9zdHJ0b2woYnVmLCAmZW5kLCAwKTsKKwlpZiAoZW5kID09IGJ1ZiB8fCBuZXcgPiBJTlRfTUFYIHx8IG5ldyA8IElOVF9NSU4pCisJCXJldHVybiAtRUlOVkFMOworCSooaW50ICopKGVhLT52YXIpID0gbmV3OworCXJldHVybiBlbmQgLSBidWY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeXNkZXZfc3RvcmVfaW50KTsKKworc3NpemVfdCBzeXNkZXZfc2hvd19pbnQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwKKwkJCSAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3lzZGV2X2V4dF9hdHRyaWJ1dGUgKmVhID0gdG9fZXh0X2F0dHIoYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsICooaW50ICopKGVhLT52YXIpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2Rldl9zaG93X2ludCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jIGIvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMKaW5kZXggM2Y2ZDliMC4uMTk5Y2Q5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMKKysrIGIvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMKQEAgLTM0LDcgKzM0LDggQEAKIHN0YXRpYyBTWVNERVZfQVRUUihfbmFtZSwgMDQ0NCwgc2hvd18jI19uYW1lLCBOVUxMKQogCiAjZGVmaW5lIGRlZmluZV9pZF9zaG93X2Z1bmMobmFtZSkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQlcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAkJXAorCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCiB7CQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7CQkJCVwKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdG9wb2xvZ3lfIyNuYW1lKGNwdSkpOwlcCkBAIC01OSwxNCArNjAsMTcgQEAKIAogI2lmZGVmIGFyY2hfcHJvdmlkZXNfdG9wb2xvZ3lfcG9pbnRlcnMKICNkZWZpbmUgZGVmaW5lX3NpYmxpbmdzX3Nob3dfbWFwKG5hbWUpCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCQkJXAorCQkJICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKIAl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsJCQkJCVwKIAlyZXR1cm4gc2hvd19jcHVtYXAoMCwgJih0b3BvbG9neV8jI25hbWUoY3B1KSksIGJ1Zik7CQlcCiB9CiAKICNkZWZpbmUgZGVmaW5lX3NpYmxpbmdzX3Nob3dfbGlzdChuYW1lKQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUjI19saXN0KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUjI19saXN0KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCQlcCisJCQkJICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkJCSAgY2hhciAqYnVmKQkJCQlcCiB7CQkJCQkJCQkJXAogCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOwkJCQkJXAogCXJldHVybiBzaG93X2NwdW1hcCgxLCAmKHRvcG9sb2d5XyMjbmFtZShjcHUpKSwgYnVmKTsJCVwKQEAgLTc0LDcgKzc4LDggQEAKIAogI2Vsc2UKICNkZWZpbmUgZGVmaW5lX3NpYmxpbmdzX3Nob3dfbWFwKG5hbWUpCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCQkJXAorCQkJICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKIAl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsJCQkJCVwKIAljcHVtYXNrX3QgbWFzayA9IHRvcG9sb2d5XyMjbmFtZShjcHUpOwkJCQlcCkBAIC04Miw3ICs4Nyw5IEBACiB9CiAKICNkZWZpbmUgZGVmaW5lX3NpYmxpbmdzX3Nob3dfbGlzdChuYW1lKQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUjI19saXN0KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUjI19saXN0KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCQlcCisJCQkJICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkJCSAgY2hhciAqYnVmKQkJCQlcCiB7CQkJCQkJCQkJXAogCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOwkJCQkJXAogCWNwdW1hc2tfdCBtYXNrID0gdG9wb2xvZ3lfIyNuYW1lKGNwdSk7CQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNoci5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMKaW5kZXggZDFkZTY4YS4uYzA0NDQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMKQEAgLTI3Nyw4ICsyNzcsOSBAQAogCQlyZXR1cm4gUFRSX0VSUihhb2VfY2xhc3MpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFyZGV2cyk7ICsraSkKLQkJZGV2aWNlX2NyZWF0ZShhb2VfY2xhc3MsIE5VTEwsCi0JCQkgICAgICBNS0RFVihBT0VfTUFKT1IsIGNoYXJkZXZzW2ldLm1pbm9yKSwgY2hhcmRldnNbaV0ubmFtZSk7CisJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShhb2VfY2xhc3MsIE5VTEwsCisJCQkJICAgICAgTUtERVYoQU9FX01BSk9SLCBjaGFyZGV2c1tpXS5taW5vciksCisJCQkJICAgICAgTlVMTCwgY2hhcmRldnNbaV0ubmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggNDI0OTk1MC4uNDlmMjc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE4ODAsMTEgKzE4ODAsMTEgQEAKIAogCWlmICghTUFDSF9JU19BVEFSSSkKIAkJLyogQW1pZ2EsIE1hYywgLi4uIGRvbid0IGhhdmUgQXRhcmktY29tcGF0aWJsZSBmbG9wcHkgOi0pICovCi0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKE1BQ0hfSVNfSEFERVMpCiAJCS8qIEhhZGVzIGRvZXNuJ3QgaGF2ZSBBdGFyaS1jb21wYXRpYmxlIGZsb3BweSAqLwotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChyZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCJmZCIpKQogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGcuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BnLmMKaW5kZXggOWQ5MjYzNi4uZDczMWNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGcuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZy5jCkBAIC02ODYsOCArNjg2LDkgQEAKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgUEdfVU5JVFM7IHVuaXQrKykgewogCQlzdHJ1Y3QgcGcgKmRldiA9ICZkZXZpY2VzW3VuaXRdOwogCQlpZiAoZGV2LT5wcmVzZW50KQotCQkJZGV2aWNlX2NyZWF0ZShwZ19jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIHVuaXQpLAotCQkJCSAgICAgICJwZyV1IiwgdW5pdCk7CisJCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEocGdfY2xhc3MsIE5VTEwsCisJCQkJCSAgICAgIE1LREVWKG1ham9yLCB1bml0KSwgTlVMTCwKKwkJCQkJICAgICAgInBnJXUiLCB1bml0KTsKIAl9CiAJZXJyID0gMDsKIAlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3B0LmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jCmluZGV4IDVjNzRjMzUuLjY3M2I4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3B0LmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcHQuYwpAQCAtOTc5LDEwICs5NzksMTIgQEAKIAogCWZvciAodW5pdCA9IDA7IHVuaXQgPCBQVF9VTklUUzsgdW5pdCsrKQogCQlpZiAocHRbdW5pdF0ucHJlc2VudCkgewotCQkJZGV2aWNlX2NyZWF0ZShwdF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIHVuaXQpLAotCQkJCSAgICAgICJwdCVkIiwgdW5pdCk7Ci0JCQlkZXZpY2VfY3JlYXRlKHB0X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgdW5pdCArIDEyOCksCi0JCQkJICAgICAgInB0JWRuIiwgdW5pdCk7CisJCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEocHRfY2xhc3MsIE5VTEwsCisJCQkJCSAgICAgIE1LREVWKG1ham9yLCB1bml0KSwgTlVMTCwKKwkJCQkJICAgICAgInB0JWQiLCB1bml0KTsKKwkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShwdF9jbGFzcywgTlVMTCwKKwkJCQkJICAgICAgTUtERVYobWFqb3IsIHVuaXQgKyAxMjgpLCBOVUxMLAorCQkJCQkgICAgICAicHQlZG4iLCB1bml0KTsKIAkJfQogCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCmluZGV4IDQ1YmVlOTEuLjE1OGVlZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCkBAIC0zMDMsNyArMzAzLDkgQEAKIHN0YXRpYyB2b2lkIHBrdF9zeXNmc19kZXZfbmV3KHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQpCiB7CiAJaWYgKGNsYXNzX3BrdGNkdmQpIHsKLQkJcGQtPmRldiA9IGRldmljZV9jcmVhdGUoY2xhc3NfcGt0Y2R2ZCwgTlVMTCwgcGQtPnBrdF9kZXYsICIlcyIsIHBkLT5uYW1lKTsKKwkJcGQtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShjbGFzc19wa3RjZHZkLCBOVUxMLAorCQkJCQkJcGQtPnBrdF9kZXYsIE5VTEwsCisJCQkJCQkiJXMiLCBwZC0+bmFtZSk7CiAJCWlmIChJU19FUlIocGQtPmRldikpCiAJCQlwZC0+ZGV2ID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZwppbmRleCAwNzU1OThlLi5hMjM1Y2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKQEAgLTcxLDYgKzcxLDcgQEAKIGNvbmZpZyBCVF9IQ0lVQVJUX0JDU1AKIAlib29sICJCQ1NQIHByb3RvY29sIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCVF9IQ0lVQVJUCisJc2VsZWN0IEJJVFJFVkVSU0UKIAloZWxwCiAJICBCQ1NQIChCbHVlQ29yZSBTZXJpYWwgUHJvdG9jb2wpIGlzIHNlcmlhbCBwcm90b2NvbCBmb3IgY29tbXVuaWNhdGlvbiAKIAkgIGJldHdlZW4gQmx1ZXRvb3RoIGRldmljZSBhbmQgaG9zdC4gVGhpcyBwcm90b2NvbCBpcyByZXF1aXJlZCBmb3Igbm9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNzcC5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2Jjc3AuYwppbmRleCA2OTZmNzUyLi40ZDM3YmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNzcC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY3NwLmMKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgpAQCAtMTI0LDI3ICsxMjYsNiBAQAogCSpjcmMgPSByZWc7CiB9CiAKLS8qCi0gICBHZXQgcmV2ZXJzZSBvZiBnZW5lcmF0ZWQgY3JjCi0KLSAgIEltcGxlbWVudGF0aW9uIG5vdGUKLSAgICAgICAgVGhlIGNyYyBnZW5lcmF0b3IgKGJjc3BfY3JjX2luaXQoKSBhbmQgYmNzcF9jcmNfdXBkYXRlKCkpCi0gICAgICAgIGNyZWF0ZXMgYSByZXZlcnNlZCBjcmMsIHNvIGl0IG5lZWRzIHRvIGJlIHN3YXBwZWQgYmFjayBiZWZvcmUKLSAgICAgICAgYmVpbmcgcGFzc2VkIG9uLgotKi8KLXN0YXRpYyB1MTYgYmNzcF9jcmNfcmV2ZXJzZSh1MTYgY3JjKQotewotCXUxNiBiLCByZXY7Ci0KLQlmb3IgKGIgPSAwLCByZXYgPSAwOyBiIDwgMTY7IGIrKykgewotCQlyZXYgPSByZXYgPDwgMTsKLQkJcmV2IHw9IChjcmMgJiAxKTsKLQkJY3JjID0gY3JjID4+IDE7Ci0JfQotCi0JcmV0dXJuIChyZXYpOwotfQotCiAvKiAtLS0tIEJDU1AgY29yZSAtLS0tICovCiAKIHN0YXRpYyB2b2lkIGJjc3Bfc2xpcF9tc2dkZWxpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMjM1LDEwICsyMTYsMTAgQEAKIAl9CiAKIAlpZiAoaGNpZXh0biAmJiBjaGFuID09IDUpIHsKLQkJc3RydWN0IGhjaV9jb21tYW5kX2hkciAqaGRyID0gKHN0cnVjdCBoY2lfY29tbWFuZF9oZHIgKikgZGF0YTsKKwkJX19sZTE2IG9wY29kZSA9ICgoc3RydWN0IGhjaV9jb21tYW5kX2hkciAqKWRhdGEpLT5vcGNvZGU7CiAKIAkJLyogVmVuZG9yIHNwZWNpZmljIGNvbW1hbmRzICovCi0JCWlmIChoY2lfb3Bjb2RlX29nZihfX2xlMTZfdG9fY3B1KGhkci0+b3Bjb2RlKSkgPT0gMHgzZikgeworCQlpZiAoaGNpX29wY29kZV9vZ2YoX19sZTE2X3RvX2NwdShvcGNvZGUpKSA9PSAweDNmKSB7CiAJCQl1OCBkZXNjID0gKihkYXRhICsgSENJX0NPTU1BTkRfSERSX1NJWkUpOwogCQkJaWYgKChkZXNjICYgMHhmMCkgPT0gMHhjMCkgewogCQkJCWRhdGEgKz0gSENJX0NPTU1BTkRfSERSX1NJWkUgKyAxOwpAQCAtMjk2LDcgKzI3Nyw3IEBACiAKIAkvKiBQdXQgQ1JDICovCiAJaWYgKGJjc3AtPnVzZV9jcmMpIHsKLQkJYmNzcF90eG1zZ19jcmMgPSBiY3NwX2NyY19yZXZlcnNlKGJjc3BfdHhtc2dfY3JjKTsKKwkJYmNzcF90eG1zZ19jcmMgPSBiaXRyZXYxNihiY3NwX3R4bXNnX2NyYyk7CiAJCWJjc3Bfc2xpcF9vbmVfYnl0ZShuc2tiLCAodTgpICgoYmNzcF90eG1zZ19jcmMgPj4gOCkgJiAweDAwZmYpKTsKIAkJYmNzcF9zbGlwX29uZV9ieXRlKG5za2IsICh1OCkgKGJjc3BfdHhtc2dfY3JjICYgMHgwMGZmKSk7CiAJfQpAQCAtNTY2LDYgKzU0NywxMSBAQAogCWJjc3AtPnJ4X3NrYiA9IE5VTEw7CiB9CiAKK3N0YXRpYyB1MTYgYnNjcF9nZXRfY3JjKHN0cnVjdCBiY3NwX3N0cnVjdCAqYmNzcCkKK3sKKwlyZXR1cm4gZ2V0X3VuYWxpZ25lZF9iZTE2KCZiY3NwLT5yeF9za2ItPmRhdGFbYmNzcC0+cnhfc2tiLT5sZW4gLSAyXSk7Cit9CisKIC8qIFJlY3YgZGF0YSAqLwogc3RhdGljIGludCBiY3NwX3JlY3Yoc3RydWN0IGhjaV91YXJ0ICpodSwgdm9pZCAqZGF0YSwgaW50IGNvdW50KQogewpAQCAtNjI0LDE0ICs2MTAsMTAgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWNhc2UgQkNTUF9XNF9DUkM6Ci0JCQlpZiAoYmNzcF9jcmNfcmV2ZXJzZShiY3NwLT5tZXNzYWdlX2NyYykgIT0KLQkJCQkJKGJjc3AtPnJ4X3NrYi0+ZGF0YVtiY3NwLT5yeF9za2ItPmxlbiAtIDJdIDw8IDgpICsKLQkJCQkJYmNzcC0+cnhfc2tiLT5kYXRhW2Jjc3AtPnJ4X3NrYi0+bGVuIC0gMV0pIHsKLQorCQkJaWYgKGJpdHJldjE2KGJjc3AtPm1lc3NhZ2VfY3JjKSAhPSBic2NwX2dldF9jcmMoYmNzcCkpIHsKIAkJCQlCVF9FUlIgKCJDaGVja3N1bSBmYWlsZWQ6IGNvbXB1dGVkICUwNHggcmVjZWl2ZWQgJTA0eCIsCi0JCQkJCWJjc3BfY3JjX3JldmVyc2UoYmNzcC0+bWVzc2FnZV9jcmMpLAotCQkJCQkoYmNzcC0+cnhfc2tiLT4gZGF0YVtiY3NwLT5yeF9za2ItPmxlbiAtIDJdIDw8IDgpICsKLQkJCQkJYmNzcC0+cnhfc2tiLT5kYXRhW2Jjc3AtPnJ4X3NrYi0+bGVuIC0gMV0pOworCQkJCQliaXRyZXYxNihiY3NwLT5tZXNzYWdlX2NyYyksCisJCQkJCWJzY3BfZ2V0X2NyYyhiY3NwKSk7CiAKIAkJCQlrZnJlZV9za2IoYmNzcC0+cnhfc2tiKTsKIAkJCQliY3NwLT5yeF9zdGF0ZSA9IEJDU1BfVzRfUEtUX0RFTElNSVRFUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKaW5kZXggZTVjZDg1Ni4uNjlkZjE4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKQEAgLTI4Miw4ICsyODIsOCBAQAogCS8qIEZJWE1FOiB3aHkgaXMgdGhpcyBuZWVkZWQuIE5vdGUgZG9uJ3QgdXNlIGxkaXNjX3JlZiBoZXJlIGFzIHRoZQogCSAgIG9wZW4gcGF0aCBpcyBiZWZvcmUgdGhlIGxkaXNjIGlzIHJlZmVyZW5jYWJsZSAqLwogCi0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCWlmICh0dHktPmxkaXNjLm9wcy0+Zmx1c2hfYnVmZmVyKQorCQl0dHktPmxkaXNjLm9wcy0+Zmx1c2hfYnVmZmVyKHR0eSk7CiAJdHR5X2RyaXZlcl9mbHVzaF9idWZmZXIodHR5KTsKIAogCXJldHVybiAwOwpAQCAtNTE0LDcgKzUxNCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGhjaV91YXJ0X2luaXQodm9pZCkKIHsKLQlzdGF0aWMgc3RydWN0IHR0eV9sZGlzYyBoY2lfdWFydF9sZGlzYzsKKwlzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgaGNpX3VhcnRfbGRpc2M7CiAJaW50IGVycjsKIAogCUJUX0lORk8oIkhDSSBVQVJUIGRyaXZlciB2ZXIgJXMiLCBWRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggNjUwZTZiNC4uZTBiYmJmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTMwMCwxNiArMzAwLDYgQEAKIAkgIGFuZCBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGtlcm5lbCBsb2FkYWJsZSBtb2R1bGUgd2hpY2ggd2lsbCBiZQogCSAgY2FsbGVkIHNwZWNpYWxpeC4KIAotY29uZmlnIFNQRUNJQUxJWF9SVFNDVFMKLQlib29sICJTcGVjaWFsaXggRFRSL1JUUyBwaW4gaXMgUlRTIgotCWRlcGVuZHMgb24gU1BFQ0lBTElYCi0JaGVscAotCSAgVGhlIFNwZWNpYWxpeCBJTzgrIGNhcmQgY2FuIG9ubHkgc3VwcG9ydCBlaXRoZXIgUlRTIG9yIERUUi4gSWYgeW91Ci0JICBzYXkgTiBoZXJlLCB0aGUgZHJpdmVyIHdpbGwgdXNlIHRoZSBwaW4gYXMgIkRUUiIgd2hlbiB0aGUgdHR5IGlzIGluCi0JICBzb2Z0d2FyZSBoYW5kc2hha2UgbW9kZS4gIElmIHlvdSBzYXkgWSBoZXJlIG9yIGhhcmR3YXJlIGhhbmRzaGFrZSBpcwotCSAgb24sIGl0IHdpbGwgYWx3YXlzIGJlIFJUUy4gIFJlYWQgdGhlIGZpbGUKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc3BlY2lhbGl4LnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KIGNvbmZpZyBTWAogCXRyaXN0YXRlICJTcGVjaWFsaXggU1ggKGFuZCBTSSkgY2FyZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIChQQ0kgfHwgRUlTQSB8fCBJU0EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggMGUwZDEyYS4uZGM1YTMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKICMKIEZPTlRNQVBGSUxFID0gY3A0MzcudW5pCiAKLW9iai15CSArPSBtZW0ubyByYW5kb20ubyB0dHlfaW8ubyBuX3R0eS5vIHR0eV9pb2N0bC5vCitvYmoteQkgKz0gbWVtLm8gcmFuZG9tLm8gdHR5X2lvLm8gbl90dHkubyB0dHlfaW9jdGwubyB0dHlfbGRpc2MubyAKIAogb2JqLSQoQ09ORklHX0xFR0FDWV9QVFlTKQkrPSBwdHkubwogb2JqLSQoQ09ORklHX1VOSVg5OF9QVFlTKQkrPSBwdHkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jIGIvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCmluZGV4IDM3NDU3ZTUuLjM1MzBmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYworKysgYi9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKQEAgLTEyNDgsNyArMTI0OCw3IEBACiAvKgogICogcnNfYnJlYWsoKSAtLS0gcm91dGluZSB3aGljaCB0dXJucyB0aGUgYnJlYWsgaGFuZGxpbmcgb24gb3Igb2ZmCiAgKi8KLXN0YXRpYyB2b2lkIHJzX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyBpbnQgcnNfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogewogCXN0cnVjdCBhc3luY19zdHJ1Y3QgKiBpbmZvID0gKHN0cnVjdCBhc3luY19zdHJ1Y3QgKil0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMjYzLDYgKzEyNjMsNyBAQAogCSAgY3VzdG9tLmFka2NvbiA9IEFDX1VBUlRCUks7CiAJbWIoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwppbmRleCA2YmZmOWQ4Li5mZTZkNzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYworKysgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwpAQCAtNzYyLDcgKzc2Miw3IEBACiAvKgogICogVGhpcyBpcyB1c2VkIHRvIGxvb2sgdXAgdGhlIGRpdmlzb3Igc3BlZWRzIGFuZCB0aGUgdGltZW91dHMKICAqIFdlJ3JlIG5vcm1hbGx5IGxpbWl0ZWQgdG8gMTUgZGlzdGluY3QgYmF1ZCByYXRlcy4gIFRoZSBleHRyYQotICogYXJlIGFjY2Vzc2VkIHZpYSBzZXR0aW5ncyBpbiBpbmZvLT5mbGFncy4KKyAqIGFyZSBhY2Nlc3NlZCB2aWEgc2V0dGluZ3MgaW4gaW5mby0+cG9ydC5mbGFncy4KICAqICAgICAgMCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKICAqICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBISSAgICAgICAgICAgIFZISQpAQCAtMTAwMyw3ICsxMDAzLDcgQEAKIAljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV94aXIpOwogCiAJLyogaWYgdGhlcmUgaXMgbm93aGVyZSB0byBwdXQgdGhlIGRhdGEsIGRpc2NhcmQgaXQgKi8KLQlpZiAoaW5mby0+dHR5ID09IE5VTEwpIHsKKwlpZiAoaW5mby0+cG9ydC50dHkgPT0gTlVMTCkgewogCQlpZiAoKHJlYWRiKGJhc2VfYWRkciArIChDeVJJVlIgPDwgaW5kZXgpKSAmIEN5SVZSTWFzaykgPT0KIAkJCQlDeUlWUlJ4RXgpIHsJLyogZXhjZXB0aW9uICovCiAJCQlkYXRhID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PCBpbmRleCkpOwpAQCAtMTAxNSw3ICsxMDE1LDcgQEAKIAkJZ290byBlbmQ7CiAJfQogCS8qIHRoZXJlIGlzIGFuIG9wZW4gcG9ydCBmb3IgdGhpcyBkYXRhICovCi0JdHR5ID0gaW5mby0+dHR5OworCXR0eSA9IGluZm8tPnBvcnQudHR5OwogCWlmICgocmVhZGIoYmFzZV9hZGRyICsgKEN5UklWUiA8PCBpbmRleCkpICYgQ3lJVlJNYXNrKSA9PQogCQkJQ3lJVlJSeEV4KSB7CS8qIGV4Y2VwdGlvbiAqLwogCQlkYXRhID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PCBpbmRleCkpOwpAQCAtMTA0MSw3ICsxMDQxLDcgQEAKIAkJCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwKIAkJCQkJCQlpbmRleCkpLCBUVFlfQlJFQUspOwogCQkJCQlpbmZvLT5pY291bnQucngrKzsKLQkJCQkJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfU0FLKQorCQkJCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NBSykKIAkJCQkJCWRvX1NBSyh0dHkpOwogCQkJCX0gZWxzZSBpZiAoZGF0YSAmIEN5RlJBTUUpIHsKIAkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LApAQCAtMTE0NSw3ICsxMTQ1LDcgQEAKIAkJZ290byBlbmQ7CiAJfQogCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWwgKyBjaGlwICogNF07Ci0JaWYgKGluZm8tPnR0eSA9PSBOVUxMKSB7CisJaWYgKGluZm8tPnBvcnQudHR5ID09IE5VTEwpIHsKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAogCQkJICByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiB+Q3lUeFJkeSk7CiAJCWdvdG8gZW5kOwpAQCAtMTE5MCwxMyArMTE5MCwxMyBAQAogCQkJfQogCQkJZ290byBkb25lOwogCQl9Ci0JCWlmIChpbmZvLT54bWl0X2J1ZiA9PSBOVUxMKSB7CisJCWlmIChpbmZvLT5wb3J0LnhtaXRfYnVmID09IE5VTEwpIHsKIAkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKIAkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgogCQkJCQl+Q3lUeFJkeSk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KLQkJaWYgKGluZm8tPnR0eS0+c3RvcHBlZCB8fCBpbmZvLT50dHktPmh3X3N0b3BwZWQpIHsKKwkJaWYgKGluZm8tPnBvcnQudHR5LT5zdG9wcGVkIHx8IGluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkKSB7CiAJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCiAJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKIAkJCQkJfkN5VHhSZHkpOwpAQCAtMTIxMSw3ICsxMjExLDcgQEAKIAkJICogY2hhcmFjdGVyLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIG1heSBub3QgYmUgcm9vbQogCQkgKiBmb3IgdGhlIHR3byBjaGFycyBuZWVkZWQgdG8gc2VuZCBhIE5VTEwuKQogCQkgKi8KLQkJb3V0Y2ggPSBpbmZvLT54bWl0X2J1ZltpbmZvLT54bWl0X3RhaWxdOworCQlvdXRjaCA9IGluZm8tPnBvcnQueG1pdF9idWZbaW5mby0+eG1pdF90YWlsXTsKIAkJaWYgKG91dGNoKSB7CiAJCQlpbmZvLT54bWl0X2NudC0tOwogCQkJaW5mby0+eG1pdF90YWlsID0gKGluZm8tPnhtaXRfdGFpbCArIDEpICYKQEAgLTEyMzIsNyArMTIzMiw3IEBACiAJfQogCiBkb25lOgotCXR0eV93YWtldXAoaW5mby0+dHR5KTsKKwl0dHlfd2FrZXVwKGluZm8tPnBvcnQudHR5KTsKIGVuZDoKIAkvKiBlbmQgb2Ygc2VydmljZSAqLwogCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lUSVIgPDwgaW5kZXgpLCBzYXZlX3hpciAmIDB4M2YpOwpAQCAtMTI1Niw3ICsxMjU2LDcgQEAKIAltZG1fY2hhbmdlID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5TUlTUiA8PCBpbmRleCkpOwogCW1kbV9zdGF0dXMgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpOwogCi0JaWYgKCFpbmZvLT50dHkpCisJaWYgKCFpbmZvLT5wb3J0LnR0eSkKIAkJZ290byBlbmQ7CiAKIAlpZiAobWRtX2NoYW5nZSAmIEN5QU5ZX0RFTFRBKSB7CkBAIC0xMjczLDI5ICsxMjczLDI5IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwogCX0KIAotCWlmICgobWRtX2NoYW5nZSAmIEN5RENEKSAmJiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkpIHsKKwlpZiAoKG1kbV9jaGFuZ2UgJiBDeURDRCkgJiYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkpIHsKIAkJaWYgKCEobWRtX3N0YXR1cyAmIEN5RENEKSkgewotCQkJdHR5X2hhbmd1cChpbmZvLT50dHkpOwotCQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CisJCQl0dHlfaGFuZ3VwKGluZm8tPnBvcnQudHR5KTsKKwkJCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCX0KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKIAl9Ci0JaWYgKChtZG1fY2hhbmdlICYgQ3lDVFMpICYmIChpbmZvLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSkgewotCQlpZiAoaW5mby0+dHR5LT5od19zdG9wcGVkKSB7CisJaWYgKChtZG1fY2hhbmdlICYgQ3lDVFMpICYmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpKSB7CisJCWlmIChpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCkgewogCQkJaWYgKG1kbV9zdGF0dXMgJiBDeUNUUykgewogCQkJCS8qIGN5X3N0YXJ0IGlzbid0IHVzZWQKIAkJCQkgICBiZWNhdXNlLi4uICEhISAqLwotCQkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQkJaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQgPSAwOwogCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKIAkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpIHwKIAkJCQkJCUN5VHhSZHkpOwotCQkJCXR0eV93YWtldXAoaW5mby0+dHR5KTsKKwkJCQl0dHlfd2FrZXVwKGluZm8tPnBvcnQudHR5KTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICghKG1kbV9zdGF0dXMgJiBDeUNUUykpIHsKIAkJCQkvKiBjeV9zdG9wIGlzbid0IHVzZWQKIAkJCQkgICBiZWNhdXNlIC4uLiAhISEgKi8KLQkJCQlpbmZvLT50dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCWluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkID0gMTsKIAkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCiAJCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCiAJCQkJCQl+Q3lUeFJkeSk7CkBAIC0xNDQ5LDcgKzE0NDksNyBAQAogCQlzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmwpCiB7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gaW5mby0+Y2FyZDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBpbnQgY2hhcl9jb3VudDsKIAlpbnQgbGVuOwogI2lmZGVmIEJMT0NLTU9WRQpAQCAtMTU0Miw3ICsxNTQyLDcgQEAKIAkJc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsKQogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9IGluZm8tPmNhcmQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJdTggZGF0YTsKIAl1bnNpZ25lZCBpbnQgY2hhcl9jb3VudDsKICNpZmRlZiBCTE9DS01PVkUKQEAgLTE1ODUsNyArMTU4NSw3IEBACiAKIAkJCW1lbWNweV90b2lvKChjaGFyICopKGNpbmZvLT5iYXNlX2FkZHIgKyB0eF9idWZhZGRyICsKIAkJCQkJdHhfcHV0KSwKLQkJCQkJJmluZm8tPnhtaXRfYnVmW2luZm8tPnhtaXRfdGFpbF0sCisJCQkJCSZpbmZvLT5wb3J0LnhtaXRfYnVmW2luZm8tPnhtaXRfdGFpbF0sCiAJCQkJCXNtYWxsX2NvdW50KTsKIAogCQkJdHhfcHV0ID0gKHR4X3B1dCArIHNtYWxsX2NvdW50KSAmICh0eF9idWZzaXplIC0gMSk7CkBAIC0xNTk3LDcgKzE1OTcsNyBAQAogCQl9CiAjZWxzZQogCQl3aGlsZSAoaW5mby0+eG1pdF9jbnQgJiYgY2hhcl9jb3VudCkgewotCQkJZGF0YSA9IGluZm8tPnhtaXRfYnVmW2luZm8tPnhtaXRfdGFpbF07CisJCQlkYXRhID0gaW5mby0+cG9ydC54bWl0X2J1ZltpbmZvLT54bWl0X3RhaWxdOwogCQkJaW5mby0+eG1pdF9jbnQtLTsKIAkJCWluZm8tPnhtaXRfdGFpbCA9IChpbmZvLT54bWl0X3RhaWwgKyAxKSAmCiAJCQkJCShTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CkBAIC0xNjQyLDcgKzE2NDIsNyBAQAogCQlzcGVjaWFsX2NvdW50ID0gMDsKIAkJZGVsdGFfY291bnQgPSAwOwogCQlpbmZvID0gJmNpbmZvLT5wb3J0c1tjaGFubmVsXTsKLQkJdHR5ID0gaW5mby0+dHR5OworCQl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAkJaWYgKHR0eSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKQEAgLTE2NjgsMTUgKzE2NjgsMTUgQEAKIAkJY2FzZSBDX0NNX01EQ0Q6CiAJCQlpbmZvLT5pY291bnQuZGNkKys7CiAJCQlkZWx0YV9jb3VudCsrOwotCQkJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpIHsKKwkJCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpIHsKIAkJCQlpZiAoKGZ3X3ZlciA+IDI0MSA/ICgodV9sb25nKSBwYXJhbSkgOgogCQkJCQkJcmVhZGwoJmNoX2N0cmwtPnJzX3N0YXR1cykpICYKIAkJCQkJCUNfUlNfRENEKSB7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAJCQkJfSBlbHNlIHsKLQkJCQkJdHR5X2hhbmd1cChpbmZvLT50dHkpOwotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7Ci0JCQkJCWluZm8tPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCQkJCQl0dHlfaGFuZ3VwKGluZm8tPnBvcnQudHR5KTsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CisJCQkJCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CkBAIC0xODE0LDcgKzE4MTQsNyBAQAogCiAJCWZvciAocG9ydCA9IDA7IHBvcnQgPCBjaW5mby0+bnBvcnRzOyBwb3J0KyspIHsKIAkJCWluZm8gPSAmY2luZm8tPnBvcnRzW3BvcnRdOwotCQkJdHR5ID0gaW5mby0+dHR5OworCQkJdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJCQlidWZfY3RybCA9ICYoemZ3X2N0cmwtPmJ1Zl9jdHJsW3BvcnRdKTsKIAogCQkJaWYgKCFpbmZvLT50aHJvdHRsZSkKQEAgLTE4NTMsMjIgKzE4NTMsMjIgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAotCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewogCQlmcmVlX3BhZ2UocGFnZSk7CiAJCWdvdG8gZXJyb3V0OwogCX0KIAogCWlmICghaW5mby0+dHlwZSkgewotCQlpZiAoaW5mby0+dHR5KQotCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwkJaWYgKGluZm8tPnBvcnQudHR5KQorCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCQlmcmVlX3BhZ2UocGFnZSk7CiAJCWdvdG8gZXJyb3V0OwogCX0KIAotCWlmIChpbmZvLT54bWl0X2J1ZikKKwlpZiAoaW5mby0+cG9ydC54bWl0X2J1ZikKIAkJZnJlZV9wYWdlKHBhZ2UpOwogCWVsc2UKLQkJaW5mby0+eG1pdF9idWYgPSAodW5zaWduZWQgY2hhciAqKXBhZ2U7CisJCWluZm8tPnBvcnQueG1pdF9idWYgPSAodW5zaWduZWQgY2hhciAqKXBhZ2U7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIApAQCAtMTkwOSwxMCArMTkwOSwxMCBAQAogCiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKIAkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5UnhEYXRhKTsKLQkJaW5mby0+ZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CisJCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CiAKLQkJaWYgKGluZm8tPnR0eSkKLQkJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwkJaWYgKGluZm8tPnBvcnQudHR5KQorCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAJCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKIAkJaW5mby0+YnJlYWtvbiA9IGluZm8tPmJyZWFrb2ZmID0gMDsKIAkJbWVtc2V0KChjaGFyICopJmluZm8tPmlkbGVfc3RhdHMsIDAsIHNpemVvZihpbmZvLT5pZGxlX3N0YXRzKSk7CkBAIC0xOTk0LDkgKzE5OTQsOSBAQAogCiAJCS8qIGVuYWJsZSBzZW5kLCByZWN2LCBtb2RlbSAhISEgKi8KIAotCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKLQkJaWYgKGluZm8tPnR0eSkKLQkJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKKwkJaWYgKGluZm8tPnBvcnQudHR5KQorCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAJCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKIAkJaW5mby0+YnJlYWtvbiA9IGluZm8tPmJyZWFrb2ZmID0gMDsKIAkJbWVtc2V0KChjaGFyICopJmluZm8tPmlkbGVfc3RhdHMsIDAsIHNpemVvZihpbmZvLT5pZGxlX3N0YXRzKSk7CkBAIC0yMDY1LDcgKzIwNjUsNyBAQAogCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwogCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKIAotCWlmICghKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQorCWlmICghKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCiAJCXJldHVybjsKIAogCWNhcmQgPSBpbmZvLT5jYXJkOwpAQCAtMjA4NywxNCArMjA4NywxNCBAQAogCQkvKiBDbGVhciBkZWx0YV9tc3Jfd2FpdCBxdWV1ZSB0byBhdm9pZCBtZW0gbGVha3MuICovCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwogCi0JCWlmIChpbmZvLT54bWl0X2J1ZikgeworCQlpZiAoaW5mby0+cG9ydC54bWl0X2J1ZikgewogCQkJdW5zaWduZWQgY2hhciAqdGVtcDsKLQkJCXRlbXAgPSBpbmZvLT54bWl0X2J1ZjsKLQkJCWluZm8tPnhtaXRfYnVmID0gTlVMTDsKKwkJCXRlbXAgPSBpbmZvLT5wb3J0LnhtaXRfYnVmOworCQkJaW5mby0+cG9ydC54bWl0X2J1ZiA9IE5VTEw7CiAJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGVtcCk7CiAJCX0KIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOwotCQlpZiAoIWluZm8tPnR0eSB8fCAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKSB7CisJCWlmICghaW5mby0+cG9ydC50dHkgfHwgKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKSB7CiAJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLCB+Q3lSVFMpOwogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwgfkN5RFRSKTsKICNpZmRlZiBDWV9ERUJVR19EVFIKQEAgLTIxMDgsOSArMjEwOCw5IEBACiAJCS8qIGl0IG1heSBiZSBhcHByb3ByaWF0ZSB0byBjbGVhciBfWE1JVCBhdAogCQkgICBzb21lIGxhdGVyIGRhdGUgKGFmdGVyIHRlc3RpbmcpISEhICovCiAKLQkJaWYgKGluZm8tPnR0eSkKLQkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7Ci0JCWluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKKwkJaWYgKGluZm8tPnBvcnQudHR5KQorCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOworCQlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKQEAgLTIxMzYsMTQgKzIxMzYsMTQgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKLQkJaWYgKGluZm8tPnhtaXRfYnVmKSB7CisJCWlmIChpbmZvLT5wb3J0LnhtaXRfYnVmKSB7CiAJCQl1bnNpZ25lZCBjaGFyICp0ZW1wOwotCQkJdGVtcCA9IGluZm8tPnhtaXRfYnVmOwotCQkJaW5mby0+eG1pdF9idWYgPSBOVUxMOworCQkJdGVtcCA9IGluZm8tPnBvcnQueG1pdF9idWY7CisJCQlpbmZvLT5wb3J0LnhtaXRfYnVmID0gTlVMTDsKIAkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0ZW1wKTsKIAkJfQogCi0JCWlmICghaW5mby0+dHR5IHx8IChpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpIHsKKwkJaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpIHsKIAkJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAogCQkJCShfX3UzMikocmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCkgJgogCQkJCQl+KENfUlNfUlRTIHwgQ19SU19EVFIpKSk7CkBAIC0yMTU4LDkgKzIxNTgsOSBAQAogI2VuZGlmCiAJCX0KIAotCQlpZiAoaW5mby0+dHR5KQotCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKLQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOworCQlpZiAoaW5mby0+cG9ydC50dHkpCisJCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CisJCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCX0KQEAgLTIxOTQsMTAgKzIxOTQsMTAgQEAKIAkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgY2xvc2VkLCB0aGVuIGJsb2NrCiAJICogdW50aWwgaXQncyBkb25lLCBhbmQgdGhlbiB0cnkgYWdhaW4uCiAJICovCi0JaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykpIHsKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGluZm8tPmNsb3NlX3dhaXQsCi0JCQkJIShpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpKTsKLQkJcmV0dXJuIChpbmZvLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8gLUVBR0FJTjogLUVSRVNUQVJUU1lTOworCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGluZm8tPnBvcnQuY2xvc2Vfd2FpdCwKKwkJCQkhKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSk7CisJCXJldHVybiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8gLUVBR0FJTjogLUVSRVNUQVJUU1lTOwogCX0KIAogCS8qCkBAIC0yMjA2LDMyICsyMjA2LDMyIEBACiAJICovCiAJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKIAkJCQkJKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgewotCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCXJldHVybiAwOwogCX0KIAogCS8qCiAJICogQmxvY2sgd2FpdGluZyBmb3IgdGhlIGNhcnJpZXIgZGV0ZWN0IGFuZCB0aGUgbGluZSB0byBiZWNvbWUKIAkgKiBmcmVlIChpLmUuLCBub3QgaW4gdXNlIGJ5IHRoZSBjYWxsb3V0KS4gIFdoaWxlIHdlIGFyZSBpbgotCSAqIHRoaXMgbG9vcCwgaW5mby0+Y291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKKwkgKiB0aGlzIGxvb3AsIGluZm8tPnBvcnQuY291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKIAkgKiBjeV9jbG9zZSgpIGtub3dzIHdoZW4gdG8gZnJlZSB0aGluZ3MuICBXZSByZXN0b3JlIGl0IHVwb24KIAkgKiBleGl0LCBlaXRoZXIgbm9ybWFsIG9yIGFibm9ybWFsLgogCSAqLwogCXJldHZhbCA9IDA7Ci0JYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogI2lmZGVmIENZX0RFQlVHX09QRU4KIAlwcmludGsoS0VSTl9ERUJVRyAiY3ljIGJsb2NrX3RpbF9yZWFkeSBiZWZvcmUgYmxvY2s6IHR0eUMlZCwgIgotCQkiY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworCQkiY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+cG9ydC5jb3VudCk7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwogCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJaW5mby0+Y291bnQtLTsKKwkJaW5mby0+cG9ydC5jb3VudC0tOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKICNpZmRlZiBDWV9ERUJVR19DT1VOVAogCXByaW50ayhLRVJOX0RFQlVHICJjeWMgYmxvY2tfdGlsX3JlYWR5OiAoJWQpOiBkZWNyZW1lbnRpbmcgY291bnQgdG8gIgotCQkiJWRcbiIsIGN1cnJlbnQtPnBpZCwgaW5mby0+Y291bnQpOworCQkiJWRcbiIsIGN1cnJlbnQtPnBpZCwgaW5mby0+cG9ydC5jb3VudCk7CiAjZW5kaWYKLQlpbmZvLT5ibG9ja2VkX29wZW4rKzsKKwlpbmZvLT5wb3J0LmJsb2NrZWRfb3BlbisrOwogCiAJaWYgKCFJU19DWUNfWigqY2luZm8pKSB7CiAJCWNoaXAgPSBjaGFubmVsID4+IDI7CkBAIC0yMjYwLDggKzIyNjAsOCBAQAogCiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKLQkJCQkJIShpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewotCQkJCXJldHZhbCA9ICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/CisJCQkJCSEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgeworCQkJCXJldHZhbCA9ICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8KIAkJCQkJICAtRUFHQUlOIDogLUVSRVNUQVJUU1lTKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTIyNjksNyArMjI2OSw3IEBACiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCiAJCQkJICAodV9jaGFyKSBjaGFubmVsKTsKLQkJCWlmICghKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYgKENfQ0xPQ0FMKHR0eSkgfHwKKwkJCWlmICghKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJiAoQ19DTE9DQUwodHR5KSB8fAogCQkJCQkocmVhZGIoYmFzZV9hZGRyICsKIAkJCQkJCShDeU1TVlIxIDw8IGluZGV4KSkgJiBDeURDRCkpKSB7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwpAQCAtMjI4NCw3ICsyMjg0LDcgQEAKICNpZmRlZiBDWV9ERUJVR19PUEVOCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIGJsb2NrX3RpbF9yZWFkeSBibG9ja2luZzogIgogCQkJCSJ0dHlDJWQsIGNvdW50ID0gJWRcbiIsCi0JCQkJaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworCQkJCWluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOwogI2VuZGlmCiAJCQlzY2hlZHVsZSgpOwogCQl9CkBAIC0yMjk4LDcgKzIyOTgsNyBAQAogCQlmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKIAkJaWYgKCFJU1pMT0FERUQoKmNpbmZvKSkgewogCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPnBvcnQub3Blbl93YWl0LCAmd2FpdCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0yMzI3LDEyICsyMzI3LDEyIEBACiAKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAotCQkJCQkhKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7Ci0JCQkJcmV0dmFsID0gKChpbmZvLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8KKwkJCQkJIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7CisJCQkJcmV0dmFsID0gKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPwogCQkJCQkgIC1FQUdBSU4gOiAtRVJFU1RBUlRTWVMpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJiAoQ19DTE9DQUwodHR5KSB8fAorCQkJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmIChDX0NMT0NBTCh0dHkpIHx8CiAJCQkJCShyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19zdGF0dXMpICYKIAkJCQkJCUNfUlNfRENEKSkpIHsKIAkJCQlicmVhazsKQEAgLTIzNDQsMjggKzIzNDQsMjggQEAKICNpZmRlZiBDWV9ERUJVR19PUEVOCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIGJsb2NrX3RpbF9yZWFkeSBibG9ja2luZzogIgogCQkJCSJ0dHlDJWQsIGNvdW50ID0gJWRcbiIsCi0JCQkJaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworCQkJCWluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOwogI2VuZGlmCiAJCQlzY2hlZHVsZSgpOwogCQl9CiAJfQogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPnBvcnQub3Blbl93YWl0LCAmd2FpdCk7CiAJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKSB7Ci0JCWluZm8tPmNvdW50Kys7CisJCWluZm8tPnBvcnQuY291bnQrKzsKICNpZmRlZiBDWV9ERUJVR19DT1VOVAogCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmJsb2NrX3RpbF9yZWFkeSAoJWQpOiBpbmNyZW1lbnRpbmcgIgotCQkJImNvdW50IHRvICVkXG4iLCBjdXJyZW50LT5waWQsIGluZm8tPmNvdW50KTsKKwkJCSJjb3VudCB0byAlZFxuIiwgY3VycmVudC0+cGlkLCBpbmZvLT5wb3J0LmNvdW50KTsKICNlbmRpZgogCX0KLQlpbmZvLT5ibG9ja2VkX29wZW4tLTsKKwlpbmZvLT5wb3J0LmJsb2NrZWRfb3Blbi0tOwogI2lmZGVmIENZX0RFQlVHX09QRU4KIAlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmJsb2NrX3RpbF9yZWFkeSBhZnRlciBibG9ja2luZzogdHR5QyVkLCAiCi0JCSJjb3VudCA9ICVkXG4iLCBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7CisJCSJjb3VudCA9ICVkXG4iLCBpbmZvLT5saW5lLCBpbmZvLT5wb3J0LmNvdW50KTsKICNlbmRpZgogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7Ci0JaW5mby0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKKwlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJcmV0dXJuIDA7CiB9CQkJCS8qIGJsb2NrX3RpbF9yZWFkeSAqLwogCkBAIC0yNDU2LDI3ICsyNDU2LDI3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9vcGVuIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CiAjZW5kaWYKIAl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKLQlpbmZvLT50dHkgPSB0dHk7CisJaW5mby0+cG9ydC50dHkgPSB0dHk7CiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9vcGVuIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAjaWZkZWYgQ1lfREVCVUdfT1BFTgogCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfb3BlbiB0dHlDJWQsIGNvdW50ID0gJWRcbiIsIGluZm8tPmxpbmUsCi0JCQlpbmZvLT5jb3VudCk7CisJCQlpbmZvLT5wb3J0LmNvdW50KTsKICNlbmRpZgotCWluZm8tPmNvdW50Kys7CisJaW5mby0+cG9ydC5jb3VudCsrOwogI2lmZGVmIENZX0RFQlVHX0NPVU5UCiAJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9vcGVuICglZCk6IGluY3JlbWVudGluZyBjb3VudCB0byAlZFxuIiwKLQkJY3VycmVudC0+cGlkLCBpbmZvLT5jb3VudCk7CisJCWN1cnJlbnQtPnBpZCwgaW5mby0+cG9ydC5jb3VudCk7CiAjZW5kaWYKIAogCS8qCiAJICogSWYgdGhlIHBvcnQgaXMgdGhlIG1pZGRsZSBvZiBjbG9zaW5nLCBiYWlsIG91dCBub3cKIAkgKi8KLQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSkgewotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaW5mby0+Y2xvc2Vfd2FpdCwKLQkJCQkhKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykpOwotCQlyZXR1cm4gKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPyAtRUFHQUlOOiAtRVJFU1RBUlRTWVM7CisJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSkgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaW5mby0+cG9ydC5jbG9zZV93YWl0LAorCQkJCSEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpKTsKKwkJcmV0dXJuIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPyAtRUFHQUlOOiAtRVJFU1RBUlRTWVM7CiAJfQogCiAJLyoKQEAgLTI2NDEsOSArMjY0MSw5IEBACiAJfQogI2lmZGVmIENZX0RFQlVHX09QRU4KIAlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X2Nsb3NlIHR0eUMlZCwgY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwKLQkJaW5mby0+Y291bnQpOworCQlpbmZvLT5wb3J0LmNvdW50KTsKICNlbmRpZgotCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAoaW5mby0+Y291bnQgIT0gMSkpIHsKKwlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKGluZm8tPnBvcnQuY291bnQgIT0gMSkpIHsKIAkJLyoKIAkJICogVWgsIG9oLiAgdHR5LT5jb3VudCBpcyAxLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0dHkKIAkJICogc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQuICBJbmZvLT5jb3VudCBzaG91bGQgYWx3YXlzCkBAIC0yNjUyLDI0ICsyNjUyLDI0IEBACiAJCSAqIHNlcmlhbCBwb3J0IHdvbid0IGJlIHNodXRkb3duLgogCQkgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJjeWM6Y3lfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsgIgotCQkJInR0eS0+Y291bnQgaXMgMSwgaW5mby0+Y291bnQgaXMgJWRcbiIsIGluZm8tPmNvdW50KTsKLQkJaW5mby0+Y291bnQgPSAxOworCQkJInR0eS0+Y291bnQgaXMgMSwgaW5mby0+cG9ydC5jb3VudCBpcyAlZFxuIiwgaW5mby0+cG9ydC5jb3VudCk7CisJCWluZm8tPnBvcnQuY291bnQgPSAxOwogCX0KICNpZmRlZiBDWV9ERUJVR19DT1VOVAogCXByaW50ayhLRVJOX0RFQlVHICAiY3ljOmN5X2Nsb3NlIGF0ICglZCk6IGRlY3JlbWVudGluZyBjb3VudCB0byAlZFxuIiwKLQkJY3VycmVudC0+cGlkLCBpbmZvLT5jb3VudCAtIDEpOworCQljdXJyZW50LT5waWQsIGluZm8tPnBvcnQuY291bnQgLSAxKTsKICNlbmRpZgotCWlmICgtLWluZm8tPmNvdW50IDwgMCkgeworCWlmICgtLWluZm8tPnBvcnQuY291bnQgPCAwKSB7CiAjaWZkZWYgQ1lfREVCVUdfQ09VTlQKIAkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeWNfY2xvc2Ugc2V0dGluZyBjb3VudCB0byAwXG4iKTsKICNlbmRpZgotCQlpbmZvLT5jb3VudCA9IDA7CisJCWluZm8tPnBvcnQuY291bnQgPSAwOwogCX0KLQlpZiAoaW5mby0+Y291bnQpIHsKKwlpZiAoaW5mby0+cG9ydC5jb3VudCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KLQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOworCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0xPU0lORzsKIAogCS8qCiAJICogTm93IHdlIHdhaXQgZm9yIHRoZSB0cmFuc21pdCBidWZmZXIgdG8gY2xlYXI7IGFuZCB3ZSBub3RpZnkKQEAgLTI2NzcsOCArMjY3Nyw4IEBACiAJICovCiAJdHR5LT5jbG9zaW5nID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQlpZiAoaW5mby0+Y2xvc2luZ193YWl0ICE9IENZX0NMT1NJTkdfV0FJVF9OT05FKQotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgaW5mby0+Y2xvc2luZ193YWl0KTsKKwlpZiAoaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQgIT0gQ1lfQ0xPU0lOR19XQUlUX05PTkUpCisJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKQEAgLTI2OTIsNyArMjY5Miw3IEBACiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAogCQkJICByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiB+Q3lSeERhdGEpOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgeworCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCQkvKiBXYWl0aW5nIGZvciBvbi1ib2FyZCBidWZmZXJzIHRvIGJlIGVtcHR5IGJlZm9yZQogCQkJICAgY2xvc2luZyB0aGUgcG9ydCAqLwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CkBAIC0yNzMxLDE4ICsyNzMxLDE4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJdHR5LT5jbG9zaW5nID0gMDsKLQlpbmZvLT50dHkgPSBOVUxMOwotCWlmIChpbmZvLT5ibG9ja2VkX29wZW4pIHsKKwlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CisJaWYgKGluZm8tPnBvcnQuYmxvY2tlZF9vcGVuKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpIHsKKwkJaWYgKGluZm8tPnBvcnQuY2xvc2VfZGVsYXkpIHsKIAkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MKLQkJCQkJCShpbmZvLT5jbG9zZV9kZWxheSkpOworCQkJCQkJKGluZm8tPnBvcnQuY2xvc2VfZGVsYXkpKTsKIAkJfQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQotCWluZm8tPmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRSB8IEFTWU5DX0NMT1NJTkcpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+Y2xvc2Vfd2FpdCk7CisJaW5mby0+cG9ydC5mbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkUgfCBBU1lOQ19DTE9TSU5HKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQuY2xvc2Vfd2FpdCk7CiAKICNpZmRlZiBDWV9ERUJVR19PVEhFUgogCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfY2xvc2UgZG9uZVxuIik7CkBAIC0yNzc3LDcgKzI3NzcsNyBAQAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfd3JpdGUiKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIWluZm8tPnhtaXRfYnVmKQorCWlmICghaW5mby0+cG9ydC54bWl0X2J1ZikKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CkBAIC0yNzg4LDcgKzI3ODgsNyBAQAogCQlpZiAoYyA8PSAwKQogCQkJYnJlYWs7CiAKLQkJbWVtY3B5KGluZm8tPnhtaXRfYnVmICsgaW5mby0+eG1pdF9oZWFkLCBidWYsIGMpOworCQltZW1jcHkoaW5mby0+cG9ydC54bWl0X2J1ZiArIGluZm8tPnhtaXRfaGVhZCwgYnVmLCBjKTsKIAkJaW5mby0+eG1pdF9oZWFkID0gKGluZm8tPnhtaXRfaGVhZCArIGMpICYKIAkJCShTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CiAJCWluZm8tPnhtaXRfY250ICs9IGM7CkBAIC0yODI2LDcgKzI4MjYsNyBAQAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfcHV0X2NoYXIiKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIWluZm8tPnhtaXRfYnVmKQorCWlmICghaW5mby0+cG9ydC54bWl0X2J1ZikKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CkBAIC0yODM1LDcgKzI4MzUsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpbmZvLT54bWl0X2J1ZltpbmZvLT54bWl0X2hlYWQrK10gPSBjaDsKKwlpbmZvLT5wb3J0LnhtaXRfYnVmW2luZm8tPnhtaXRfaGVhZCsrXSA9IGNoOwogCWluZm8tPnhtaXRfaGVhZCAmPSBTRVJJQUxfWE1JVF9TSVpFIC0gMTsKIAlpbmZvLT54bWl0X2NudCsrOwogCWluZm8tPmlkbGVfc3RhdHMueG1pdF9ieXRlcysrOwpAQCAtMjg2MCw3ICsyODYwLDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGluZm8tPnhtaXRfY250IDw9IDAgfHwgdHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCB8fAotCQkJIWluZm8tPnhtaXRfYnVmKQorCQkJIWluZm8tPnBvcnQueG1pdF9idWYpCiAJCXJldHVybjsKIAogCXN0YXJ0X3htaXQoaW5mbyk7CkBAIC0yOTg4LDI3ICsyOTg4LDI3IEBACiAJaW50IGJhdWQsIGJhdWRfcmF0ZSA9IDA7CiAJaW50IGk7CiAKLQlpZiAoIWluZm8tPnR0eSB8fCAhaW5mby0+dHR5LT50ZXJtaW9zKQorCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQogCQlyZXR1cm47CiAKIAlpZiAoaW5mby0+bGluZSA9PSAtMSkKIAkJcmV0dXJuOwogCi0JY2ZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0JaWZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJY2ZsYWcgPSBpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlpZmxhZyA9IGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2lmbGFnOwogCiAJLyoKIAkgKiBTZXQgdXAgdGhlIHR0eS0+YWx0X3NwZWVkIGtsdWRnZQogCSAqLwotCWlmIChpbmZvLT50dHkpIHsKLQkJaWYgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCi0JCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDU3NjAwOwotCQlpZiAoKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCi0JCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDExNTIwMDsKLQkJaWYgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQotCQkJaW5mby0+dHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7Ci0JCWlmICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1dBUlApCi0JCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKKwlpZiAoaW5mby0+cG9ydC50dHkpIHsKKwkJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKKwkJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSA1NzYwMDsKKwkJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCisJCQlpbmZvLT5wb3J0LnR0eS0+YWx0X3NwZWVkID0gMTE1MjAwOworCQlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1NISSkKKwkJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7CisJCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKKwkJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSA0NjA4MDA7CiAJfQogCiAJY2FyZCA9IGluZm8tPmNhcmQ7CkBAIC0zMDIwLDggKzMwMjAsOCBAQAogCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKIAogCQkvKiBiYXVkIHJhdGUgKi8KLQkJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKGluZm8tPnR0eSk7Ci0JCWlmIChiYXVkID09IDM4NDAwICYmIChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PQorCQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHkpOworCQlpZiAoYmF1ZCA9PSAzODQwMCAmJiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PQogCQkJCUFTWU5DX1NQRF9DVVNUKSB7CiAJCQlpZiAoaW5mby0+Y3VzdG9tX2Rpdmlzb3IpCiAJCQkJYmF1ZF9yYXRlID0gaW5mby0+YmF1ZCAvIGluZm8tPmN1c3RvbV9kaXZpc29yOwpAQCAtMzAzOCw3ICszMDM4LDcgQEAKIAkJaWYgKGkgPT0gMjApCiAJCQlpID0gMTk7CS8qIENEMTQwMF9NQVhfU1BFRUQgKi8KIAotCQlpZiAoYmF1ZCA9PSAzODQwMCAmJiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0KKwkJaWYgKGJhdWQgPT0gMzg0MDAgJiYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0KIAkJCQlBU1lOQ19TUERfQ1VTVCkgewogCQkJY3l5X2JhdWRfY2FsYyhpbmZvLCBiYXVkX3JhdGUpOwogCQl9IGVsc2UgewpAQCAtMzA1OSw3ICszMDU5LDcgQEAKIAkJCS8qIGdldCBpdCByaWdodCBmb3IgMTM0LjUgYmF1ZCAqLwogCQkJaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSAqIEhaICogMzAgLyAyNjkpICsKIAkJCQkJMjsKLQkJfSBlbHNlIGlmIChiYXVkID09IDM4NDAwICYmIChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PQorCQl9IGVsc2UgaWYgKGJhdWQgPT0gMzg0MDAgJiYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0KIAkJCQlBU1lOQ19TUERfQ1VTVCkgewogCQkJaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSAqIEhaICogMTUgLwogCQkJCQliYXVkX3JhdGUpICsgMjsKQEAgLTMxMDgsMTYgKzMxMDgsMTYgQEAKIAogCQkvKiBDVFMgZmxvdyBjb250cm9sIGZsYWcgKi8KIAkJaWYgKGNmbGFnICYgQ1JUU0NUUykgewotCQkJaW5mby0+ZmxhZ3MgfD0gQVNZTkNfQ1RTX0ZMT1c7CisJCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOwogCQkJaW5mby0+Y29yMiB8PSBDeUN0c0FFOwogCQl9IGVsc2UgewotCQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NUU19GTE9XOworCQkJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfQ1RTX0ZMT1c7CiAJCQlpbmZvLT5jb3IyICY9IH5DeUN0c0FFOwogCQl9CiAJCWlmIChjZmxhZyAmIENMT0NBTCkKLQkJCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DSEVDS19DRDsKKwkJCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwogCQllbHNlCi0JCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKKwkJCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0hFQ0tfQ0Q7CiAKIAkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJICAgIFRoZSBoYXJkd2FyZSBvcHRpb24sIEN5UnRzQU8sIHByZXNlbnRzIFJUUyB3aGVuCkBAIC0zMTQ2LDggKzMxNDYsOCBAQAogCQkvKiBzZXQgbGluZSBjaGFyYWN0ZXJpc3RpY3MgIGFjY29yZGluZyBjb25maWd1cmF0aW9uICovCiAKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNDSFIxIDw8IGluZGV4KSwKLQkJCSAgU1RBUlRfQ0hBUihpbmZvLT50dHkpKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNDSFIyIDw8IGluZGV4KSwgU1RPUF9DSEFSKGluZm8tPnR0eSkpOworCQkJICBTVEFSVF9DSEFSKGluZm8tPnBvcnQudHR5KSk7CisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTQ0hSMiA8PCBpbmRleCksIFNUT1BfQ0hBUihpbmZvLT5wb3J0LnR0eSkpOwogCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SMSA8PCBpbmRleCksIGluZm8tPmNvcjEpOwogCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SMiA8PCBpbmRleCksIGluZm8tPmNvcjIpOwogCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SMyA8PCBpbmRleCksIGluZm8tPmNvcjMpOwpAQCAtMzE2Myw3ICszMTYzLDcgQEAKIAkJCShpbmZvLT5kZWZhdWx0X3RpbWVvdXQgPyBpbmZvLT5kZWZhdWx0X3RpbWVvdXQgOiAweDAyKSk7CiAJCS8qIDEwbXMgcnggdGltZW91dCAqLwogCi0JCWlmIChDX0NMT0NBTChpbmZvLT50dHkpKSB7CisJCWlmIChDX0NMT0NBTChpbmZvLT5wb3J0LnR0eSkpIHsKIAkJCS8qIHdpdGhvdXQgbW9kZW0gaW50ciAqLwogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAogCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5TWRtQ2gpOwpAQCAtMzIyNiw4ICszMjI2LDggQEAKICNlbmRpZgogCQl9CiAKLQkJaWYgKGluZm8tPnR0eSkKLQkJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwkJaWYgKGluZm8tPnBvcnQudHR5KQorCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJfSBlbHNlIHsKQEAgLTMyNTAsOCArMzI1MCw4IEBACiAJCWJ1Zl9jdHJsID0gJnpmd19jdHJsLT5idWZfY3RybFtjaGFubmVsXTsKIAogCQkvKiBiYXVkIHJhdGUgKi8KLQkJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKGluZm8tPnR0eSk7Ci0JCWlmIChiYXVkID09IDM4NDAwICYmIChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PQorCQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHkpOworCQlpZiAoYmF1ZCA9PSAzODQwMCAmJiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PQogCQkJCUFTWU5DX1NQRF9DVVNUKSB7CiAJCQlpZiAoaW5mby0+Y3VzdG9tX2Rpdmlzb3IpCiAJCQkJYmF1ZF9yYXRlID0gaW5mby0+YmF1ZCAvIGluZm8tPmN1c3RvbV9kaXZpc29yOwpAQCAtMzI2Niw3ICszMjY2LDcgQEAKIAkJCS8qIGdldCBpdCByaWdodCBmb3IgMTM0LjUgYmF1ZCAqLwogCQkJaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSAqIEhaICogMzAgLyAyNjkpICsKIAkJCQkJMjsKLQkJfSBlbHNlIGlmIChiYXVkID09IDM4NDAwICYmIChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PQorCQl9IGVsc2UgaWYgKGJhdWQgPT0gMzg0MDAgJiYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0KIAkJCQlBU1lOQ19TUERfQ1VTVCkgewogCQkJaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSAqIEhaICogMTUgLwogCQkJCQliYXVkX3JhdGUpICsgMjsKQEAgLTMzMTgsNyArMzMxOCw3IEBACiAJCX0KIAkJLyogQXMgdGhlIEhXIGZsb3cgY29udHJvbCBpcyBkb25lIGluIGZpcm13YXJlLCB0aGUgZHJpdmVyCiAJCSAgIGRvZXNuJ3QgbmVlZCB0byBjYXJlIGFib3V0IGl0ICovCi0JCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKKwkJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfQ1RTX0ZMT1c7CiAKIAkJLyogWE9OL1hPRkYvWEFOWSBmbG93IGNvbnRyb2wgZmxhZ3MgKi8KIAkJc3dfZmxvdyA9IDA7CkBAIC0zMzM3LDkgKzMzMzcsOSBAQAogCiAJCS8qIENEIHNlbnNpdGl2aXR5ICovCiAJCWlmIChjZmxhZyAmIENMT0NBTCkKLQkJCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DSEVDS19DRDsKKwkJCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwogCQllbHNlCi0JCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKKwkJCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0hFQ0tfQ0Q7CiAKIAkJaWYgKGJhdWQgPT0gMCkgewkvKiBiYXVkIHJhdGUgaXMgemVybywgdHVybiBvZmYgbGluZSAqLwogCQkJY3lfd3JpdGVsKCZjaF9jdHJsLT5yc19jb250cm9sLApAQCAtMzM2MSw4ICszMzYxLDggQEAKIAkJCQkid2FzICV4XG4iLCBpbmZvLT5saW5lLCByZXR2YWwpOwogCQl9CiAKLQkJaWYgKGluZm8tPnR0eSkKLQkJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwkJaWYgKGluZm8tPnBvcnQudHR5KQorCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAJfQogfQkJCQkvKiBzZXRfbGluZV9jaGFyICovCiAKQEAgLTMzODEsOSArMzM4MSw5IEBACiAJdG1wLnBvcnQgPSAoaW5mby0+Y2FyZCAtIGN5X2NhcmQpICogMHgxMDAgKyBpbmZvLT5saW5lIC0KIAkJY2luZm8tPmZpcnN0X2xpbmU7CiAJdG1wLmlycSA9IGNpbmZvLT5pcnE7Ci0JdG1wLmZsYWdzID0gaW5mby0+ZmxhZ3M7Ci0JdG1wLmNsb3NlX2RlbGF5ID0gaW5mby0+Y2xvc2VfZGVsYXk7Ci0JdG1wLmNsb3Npbmdfd2FpdCA9IGluZm8tPmNsb3Npbmdfd2FpdDsKKwl0bXAuZmxhZ3MgPSBpbmZvLT5wb3J0LmZsYWdzOworCXRtcC5jbG9zZV9kZWxheSA9IGluZm8tPnBvcnQuY2xvc2VfZGVsYXk7CisJdG1wLmNsb3Npbmdfd2FpdCA9IGluZm8tPnBvcnQuY2xvc2luZ193YWl0OwogCXRtcC5iYXVkX2Jhc2UgPSBpbmZvLT5iYXVkOwogCXRtcC5jdXN0b21fZGl2aXNvciA9IGluZm8tPmN1c3RvbV9kaXZpc29yOwogCXRtcC5odWI2ID0gMDsJCS8qISEhICovCkBAIC0zNDAyLDEzICszNDAyLDEzIEBACiAJb2xkX2luZm8gPSAqaW5mbzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewotCQlpZiAobmV3X3NlcmlhbC5jbG9zZV9kZWxheSAhPSBpbmZvLT5jbG9zZV9kZWxheSB8fAorCQlpZiAobmV3X3NlcmlhbC5jbG9zZV9kZWxheSAhPSBpbmZvLT5wb3J0LmNsb3NlX2RlbGF5IHx8CiAJCQkJbmV3X3NlcmlhbC5iYXVkX2Jhc2UgIT0gaW5mby0+YmF1ZCB8fAogCQkJCShuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfRkxBR1MgJgogCQkJCQl+QVNZTkNfVVNSX01BU0spICE9Ci0JCQkJKGluZm8tPmZsYWdzICYgQVNZTkNfRkxBR1MgJiB+QVNZTkNfVVNSX01BU0spKQorCQkJCShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfRkxBR1MgJiB+QVNZTkNfVVNSX01BU0spKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJaW5mby0+ZmxhZ3MgPSAoaW5mby0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKKwkJaW5mby0+cG9ydC5mbGFncyA9IChpbmZvLT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CiAJCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19VU1JfTUFTSyk7CiAJCWluZm8tPmJhdWQgPSBuZXdfc2VyaWFsLmJhdWRfYmFzZTsKIAkJaW5mby0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOwpAQCAtMzQyMiwxMyArMzQyMiwxMyBAQAogCiAJaW5mby0+YmF1ZCA9IG5ld19zZXJpYWwuYmF1ZF9iYXNlOwogCWluZm8tPmN1c3RvbV9kaXZpc29yID0gbmV3X3NlcmlhbC5jdXN0b21fZGl2aXNvcjsKLQlpbmZvLT5mbGFncyA9IChpbmZvLT5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAorCWluZm8tPnBvcnQuZmxhZ3MgPSAoaW5mby0+cG9ydC5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAogCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19GTEFHUyk7Ci0JaW5mby0+Y2xvc2VfZGVsYXkgPSBuZXdfc2VyaWFsLmNsb3NlX2RlbGF5ICogSFogLyAxMDA7Ci0JaW5mby0+Y2xvc2luZ193YWl0ID0gbmV3X3NlcmlhbC5jbG9zaW5nX3dhaXQgKiBIWiAvIDEwMDsKKwlpbmZvLT5wb3J0LmNsb3NlX2RlbGF5ID0gbmV3X3NlcmlhbC5jbG9zZV9kZWxheSAqIEhaIC8gMTAwOworCWluZm8tPnBvcnQuY2xvc2luZ193YWl0ID0gbmV3X3NlcmlhbC5jbG9zaW5nX3dhaXQgKiBIWiAvIDEwMDsKIAogY2hlY2tfYW5kX2V4aXQ6Ci0JaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKKwlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCXNldF9saW5lX2NoYXIoaW5mbyk7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7CkBAIC0zNzAwLDE0ICszNzAwLDE1IEBACiAvKgogICogY3lfYnJlYWsoKSAtLS0gcm91dGluZSB3aGljaCB0dXJucyB0aGUgYnJlYWsgaGFuZGxpbmcgb24gb3Igb2ZmCiAgKi8KLXN0YXRpYyB2b2lkIGN5X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyBpbnQgY3lfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogewogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWwgPSAwOwogCiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9icmVhayIpKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7CiAKQEAgLTM3MzYsOCArMzczNyw2IEBACiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQlpbnQgcmV0dmFsOwotCiAJCWlmIChicmVha19zdGF0ZSA9PSAtMSkgewogCQkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZChjYXJkLAogCQkJCWluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lLApAQCAtMzc1OCw2ICszNzU3LDcgQEAKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOwogfQkJCQkvKiBjeV9icmVhayAqLwogCiBzdGF0aWMgaW50IGdldF9tb25faW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKQEAgLTM5NzEsMTEgKzM5NzEsMTEgQEAKIAkJYnJlYWs7CiAjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAJY2FzZSBDWVNFVFdBSVQ6Ci0JCWluZm8tPmNsb3Npbmdfd2FpdCA9ICh1bnNpZ25lZCBzaG9ydClhcmcgKiBIWiAvIDEwMDsKKwkJaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQgPSAodW5zaWduZWQgc2hvcnQpYXJnICogSFogLyAxMDA7CiAJCXJldF92YWwgPSAwOwogCQlicmVhazsKIAljYXNlIENZR0VUV0FJVDoKLQkJcmV0X3ZhbCA9IGluZm8tPmNsb3Npbmdfd2FpdCAvIChIWiAvIDEwMCk7CisJCXJldF92YWwgPSBpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCAvIChIWiAvIDEwMCk7CiAJCWJyZWFrOwogCWNhc2UgVElPQ0dTRVJJQUw6CiAJCXJldF92YWwgPSBnZXRfc2VyaWFsX2luZm8oaW5mbywgYXJncCk7CkBAIC00MDk3LDcgKzQwOTcsNyBAQAogCSAqLwogCWlmICghKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSAmJgogCSAgICAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKICNlbmRpZgogfQkJCQkvKiBjeV9zZXRfdGVybWlvcyAqLwogCkBAIC00MzI2LDE0ICs0MzI2LDE0IEBACiAKIAljeV9mbHVzaF9idWZmZXIodHR5KTsKIAlzaHV0ZG93bihpbmZvKTsKLQlpbmZvLT5jb3VudCA9IDA7CisJaW5mby0+cG9ydC5jb3VudCA9IDA7CiAjaWZkZWYgQ1lfREVCVUdfQ09VTlQKIAlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X2hhbmd1cCAoJWQpOiBzZXR0aW5nIGNvdW50IHRvIDBcbiIsCiAJCWN1cnJlbnQtPnBpZCk7CiAjZW5kaWYKLQlpbmZvLT50dHkgPSBOVUxMOwotCWluZm8tPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CisJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKIH0JCQkJLyogY3lfaGFuZ3VwICovCiAKIC8qCkBAIC00Mzc2LDE1ICs0Mzc2LDE0IEBACiAJZm9yIChwb3J0ID0gY2luZm8tPmZpcnN0X2xpbmU7IHBvcnQgPCBjaW5mby0+Zmlyc3RfbGluZSArIG5wb3J0czsKIAkJCXBvcnQrKykgewogCQlpbmZvID0gJmNpbmZvLT5wb3J0c1twb3J0IC0gY2luZm8tPmZpcnN0X2xpbmVdOworCQl0dHlfcG9ydF9pbml0KCZpbmZvLT5wb3J0KTsKIAkJaW5mby0+bWFnaWMgPSBDWUNMQURFU19NQUdJQzsKIAkJaW5mby0+Y2FyZCA9IGNpbmZvOwogCQlpbmZvLT5saW5lID0gcG9ydDsKLQkJaW5mby0+ZmxhZ3MgPSBTVERfQ09NX0ZMQUdTOwotCQlpbmZvLT5jbG9zaW5nX3dhaXQgPSBDTE9TSU5HX1dBSVRfREVMQVk7Ci0JCWluZm8tPmNsb3NlX2RlbGF5ID0gNSAqIEhaIC8gMTA7CiAKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+b3Blbl93YWl0KTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7CisJCWluZm8tPnBvcnQuY2xvc2luZ193YWl0ID0gQ0xPU0lOR19XQUlUX0RFTEFZOworCQlpbmZvLT5wb3J0LmNsb3NlX2RlbGF5ID0gNSAqIEhaIC8gMTA7CisJCWluZm8tPnBvcnQuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTOwogCQlpbml0X2NvbXBsZXRpb24oJmluZm8tPnNodXRkb3duX3dhaXQpOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CiAKQEAgLTUyMzcsNyArNTIzNiw3IEBACiAJCWZvciAoaiA9IDA7IGogPCBjeV9jYXJkW2ldLm5wb3J0czsgaisrKSB7CiAJCQlpbmZvID0gJmN5X2NhcmRbaV0ucG9ydHNbal07CiAKLQkJCWlmIChpbmZvLT5jb3VudCkKKwkJCWlmIChpbmZvLT5wb3J0LmNvdW50KQogCQkJCXNpemUgPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUzZCAlOGx1ICUxMGx1ICU4bHUgIgogCQkJCQkiJTEwbHUgJThsdSAlOWx1ICU2bGRcbiIsIGluZm8tPmxpbmUsCiAJCQkJCShjdXJfamlmcyAtIGluZm8tPmlkbGVfc3RhdHMuaW5fdXNlKSAvCkBAIC01MjQ2LDcgKzUyNDUsOCBAQAogCQkJCQlIWiwgaW5mby0+aWRsZV9zdGF0cy5yZWN2X2J5dGVzLAogCQkJCQkoY3VyX2ppZnMgLSBpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfaWRsZSkvCiAJCQkJCUhaLCBpbmZvLT5pZGxlX3N0YXRzLm92ZXJydW5zLAotCQkJCQkobG9uZylpbmZvLT50dHktPmxkaXNjLm51bSk7CisJCQkJCS8qIEZJWE1FOiBkb3VibGUgY2hlY2sgbG9ja2luZyAqLworCQkJCQkobG9uZylpbmZvLT5wb3J0LnR0eS0+bGRpc2Mub3BzLT5udW0pOwogCQkJZWxzZQogCQkJCXNpemUgPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUzZCAlOGx1ICUxMGx1ICU4bHUgIgogCQkJCQkiJTEwbHUgJThsdSAlOWx1ICU2bGRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHNwNTZrLmMgYi9kcml2ZXJzL2NoYXIvZHNwNTZrLmMKaW5kZXggYjlhMzBjMy4uMzNjNDY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RzcDU2ay5jCisrKyBiL2RyaXZlcnMvY2hhci9kc3A1NmsuYwpAQCAtNTAwLDcgKzUwMCw4IEBACiAJCWVyciA9IFBUUl9FUlIoZHNwNTZrX2NsYXNzKTsKIAkJZ290byBvdXRfY2hyZGV2OwogCX0KLQlkZXZpY2VfY3JlYXRlKGRzcDU2a19jbGFzcywgTlVMTCwgTUtERVYoRFNQNTZLX01BSk9SLCAwKSwgImRzcDU2ayIpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShkc3A1NmtfY2xhc3MsIE5VTEwsIE1LREVWKERTUDU2S19NQUpPUiwgMCksCisJCQkgICAgICBOVUxMLCAiZHNwNTZrIik7CiAKIAlwcmludGsoYmFubmVyKTsKIAlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lcGNhLmMgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCmluZGV4IDYwYTRkZjcuLjQ1NmU0ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lcGNhLmMKKysrIGIvZHJpdmVycy9jaGFyL2VwY2EuYwpAQCAtMTg0LDkgKzE4NCw4IEBACiBzdGF0aWMgdm9pZCBwY19zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIHBjX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQgcGNfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXN0YXRpYyB2b2lkIGRpZ2lfc2VuZF9icmVhayhzdHJ1Y3QgY2hhbm5lbCAqY2gsIGludCBtc2VjKTsKK3N0YXRpYyBpbnQgcGNfc2VuZF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbXNlYyk7CiBzdGF0aWMgdm9pZCBzZXR1cF9lbXB0eV9ldmVudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgY2hhbm5lbCAqY2gpOwotc3RhdGljIHZvaWQgZXBjYV9zZXR1cChjaGFyICosIGludCAqKTsKIAogc3RhdGljIGludCBwY193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCk7CiBzdGF0aWMgaW50IHBjX2luaXQodm9pZCk7CkBAIC00MzIsNyArNDMxLDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwY2FfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChjaC0+Y291bnQtLSA+IDEpICB7CisJCWlmIChjaC0+cG9ydC5jb3VudC0tID4gMSkgIHsKIAkJCS8qIEJlZ2luIGNoYW5uZWwgaXMgb3BlbiBtb3JlIHRoYW4gb25jZSAqLwogCQkJLyoKIAkJCSAqIFJldHVybiB3aXRob3V0IGRvaW5nIGFueXRoaW5nLiBTb21lb25lIG1pZ2h0IHN0aWxsCkBAIC00NDIsMTkgKzQ0MSwxOSBAQAogCQkJcmV0dXJuOwogCQl9CiAJCS8qIFBvcnQgb3BlbiBvbmx5IG9uY2UgZ28gYWhlYWQgd2l0aCBzaHV0ZG93biAmIHJlc2V0ICovCi0JCUJVR19PTihjaC0+Y291bnQgPCAwKTsKKwkJQlVHX09OKGNoLT5wb3J0LmNvdW50IDwgMCk7CiAKIAkJLyoKIAkJICogTGV0IHRoZSByZXN0IG9mIHRoZSBkcml2ZXIga25vdyB0aGUgY2hhbm5lbCBpcyBiZWluZyBjbG9zZWQuCiAJCSAqIFRoaXMgYmVjb21lcyBpbXBvcnRhbnQgaWYgYW4gb3BlbiBpcyBhdHRlbXB0ZWQgYmVmb3JlIGNsb3NlCiAJCSAqIGlzIGZpbmlzaGVkLgogCQkgKi8KLQkJY2gtPmFzeW5jZmxhZ3MgfD0gQVNZTkNfQ0xPU0lORzsKKwkJY2gtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0xPU0lORzsKIAkJdHR5LT5jbG9zaW5nID0gMTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcGNhX2xvY2ssIGZsYWdzKTsKIAotCQlpZiAoY2gtPmFzeW5jZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgIHsKKwkJaWYgKGNoLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpICB7CiAJCQkvKiBTZXR1cCBhbiBldmVudCB0byBpbmRpY2F0ZSB3aGVuIHRoZQogCQkJICAgdHJhbnNtaXQgYnVmZmVyIGVtcHRpZXMgKi8KIAkJCXNldHVwX2VtcHR5X2V2ZW50KHR0eSwgY2gpOwpAQCAtNDY5LDE3ICs0NjgsMTcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmVwY2FfbG9jaywgZmxhZ3MpOwogCQl0dHktPmNsb3NpbmcgPSAwOwogCQljaC0+ZXZlbnQgPSAwOwotCQljaC0+dHR5ID0gTlVMTDsKKwkJY2gtPnBvcnQudHR5ID0gTlVMTDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXBjYV9sb2NrLCBmbGFncyk7CiAKLQkJaWYgKGNoLT5ibG9ja2VkX29wZW4pIHsKKwkJaWYgKGNoLT5wb3J0LmJsb2NrZWRfb3BlbikgewogCQkJaWYgKGNoLT5jbG9zZV9kZWxheSkKIAkJCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKGNoLT5jbG9zZV9kZWxheSkpOwotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaC0+b3Blbl93YWl0KTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPnBvcnQub3Blbl93YWl0KTsKIAkJfQotCQljaC0+YXN5bmNmbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkUgfCBBU1lOQ19JTklUSUFMSVpFRCB8CisJCWNoLT5wb3J0LmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRSB8IEFTWU5DX0lOSVRJQUxJWkVEIHwKIAkJCQkJQVNZTkNfQ0xPU0lORyk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPmNsb3NlX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoLT5wb3J0LmNsb3NlX3dhaXQpOwogCX0KIH0KIApAQCAtNDg5LDcgKzQ4OCw3IEBACiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYzsKIAotCWlmICghKGNoLT5hc3luY2ZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQorCWlmICghKGNoLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXBjYV9sb2NrLCBmbGFncyk7CkBAIC01MDQsNyArNTAzLDcgQEAKIAkgKi8KIAlpZiAoYmMpCiAJCXdyaXRlYigwLCAmYmMtPmlkYXRhKTsKLQl0dHkgPSBjaC0+dHR5OworCXR0eSA9IGNoLT5wb3J0LnR0eTsKIAogCS8qIElmIHdlJ3JlIGEgbW9kZW0gY29udHJvbCBkZXZpY2UgYW5kIEhVUENMIGlzIG9uLCBkcm9wIFJUUyAmIERUUi4gKi8KIAlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpICB7CkBAIC01MTgsNyArNTE3LDcgQEAKIAkgKiB3aWxsIGhhdmUgdG8gcmVpbml0aWFsaXplZC4gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGlzLgogCSAqLwogCS8qIFByZXZlbnQgZnV0dXJlIERpZ2kgcHJvZ3JhbW1lZCBpbnRlcnJ1cHRzIGZyb20gY29taW5nIGFjdGl2ZSAqLwotCWNoLT5hc3luY2ZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKKwljaC0+cG9ydC5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXBjYV9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTUzOCwxMiArNTM3LDEyIEBACiAJCXNodXRkb3duKGNoKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZXBjYV9sb2NrLCBmbGFncyk7Ci0JCWNoLT50dHkgICA9IE5VTEw7CisJCWNoLT5wb3J0LnR0eSAgID0gTlVMTDsKIAkJY2gtPmV2ZW50ID0gMDsKLQkJY2gtPmNvdW50ID0gMDsKLQkJY2gtPmFzeW5jZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFIHwgQVNZTkNfSU5JVElBTElaRUQpOworCQljaC0+cG9ydC5jb3VudCA9IDA7CisJCWNoLT5wb3J0LmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRSB8IEFTWU5DX0lOSVRJQUxJWkVEKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXBjYV9sb2NrLCBmbGFncyk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPnBvcnQub3Blbl93YWl0KTsKIAl9CiB9CiAKQEAgLTc5NSw3ICs3OTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkgewotCQlpZiAoY2gtPmFzeW5jZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQorCQlpZiAoY2gtPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQogCQkJcmV0dmFsID0gLUVBR0FJTjsKIAkJZWxzZQogCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwpAQCAtODA2LDEwICs4MDUsMTAgQEAKIAkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgY2xvc2VkLCB0aGVuIGJsb2NrIHVudGlsCiAJICogaXQncyBkb25lLCBhbmQgdGhlbiB0cnkgYWdhaW4uCiAJICovCi0JaWYgKGNoLT5hc3luY2ZsYWdzICYgQVNZTkNfQ0xPU0lORykgewotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZjaC0+Y2xvc2Vfd2FpdCk7CisJaWYgKGNoLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZjaC0+cG9ydC5jbG9zZV93YWl0KTsKIAotCQlpZiAoY2gtPmFzeW5jZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQorCQlpZiAoY2gtPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCWVsc2UKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CkBAIC04MjAsNyArODE5LDcgQEAKIAkJICogSWYgbm9uLWJsb2NraW5nIG1vZGUgaXMgc2V0LCB0aGVuIG1ha2UgdGhlIGNoZWNrIHVwIGZyb250CiAJCSAqIGFuZCB0aGVuIGV4aXQuCiAJCSAqLwotCQljaC0+YXN5bmNmbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCQljaC0+cG9ydC5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKQEAgLTgyOCwyNCArODI3LDI0IEBACiAJLyogQmxvY2sgd2FpdGluZyBmb3IgdGhlIGNhcnJpZXIgZGV0ZWN0IGFuZCB0aGUgbGluZSB0byBiZWNvbWUgZnJlZSAqLwogCiAJcmV0dmFsID0gMDsKLQlhZGRfd2FpdF9xdWV1ZSgmY2gtPm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZjaC0+cG9ydC5vcGVuX3dhaXQsICZ3YWl0KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlcGNhX2xvY2ssIGZsYWdzKTsKIAkvKiBXZSBkZWMgY291bnQgc28gdGhhdCBwY19jbG9zZSB3aWxsIGtub3cgd2hlbiB0byBmcmVlIHRoaW5ncyAqLwogCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJY2gtPmNvdW50LS07Ci0JY2gtPmJsb2NrZWRfb3BlbisrOworCQljaC0+cG9ydC5jb3VudC0tOworCWNoLT5wb3J0LmJsb2NrZWRfb3BlbisrOwogCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8Ci0JCQkJIShjaC0+YXN5bmNmbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewotCQkJaWYgKGNoLT5hc3luY2ZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwkJCQkhKGNoLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7CisJCQlpZiAoY2gtPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQogCQkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQllbHNlCiAJCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCEoY2gtPmFzeW5jZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgorCQlpZiAoIShjaC0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmCiAJCQkgIChkb19jbG9jYWwgfHwgKGNoLT5pbW9kZW0gJiBjaC0+ZGNkKSkpCiAJCQlicmVhazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC04NjQsMTcgKzg2MywxNyBAQAogCX0KIAogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2gtPm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZjaC0+cG9ydC5vcGVuX3dhaXQsICZ3YWl0KTsKIAlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpCi0JCWNoLT5jb3VudCsrOwotCWNoLT5ibG9ja2VkX29wZW4tLTsKKwkJY2gtPnBvcnQuY291bnQrKzsKKwljaC0+cG9ydC5ibG9ja2VkX29wZW4tLTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwY2FfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCWNoLT5hc3luY2ZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CisJY2gtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTMzLDcgKzkzMiw3IEBACiAJICogbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgZG8gbm90IHdpc2ggdG8gZmx1c2ggYW5kIHNodXRkb3duIHRoZSBjaGFubmVsCiAJICogdW50aWwgdGhlIGxhc3QgYXBwIGhvbGRpbmcgdGhlIGNoYW5uZWwgb3BlbiwgY2xvc2VzIGl0LgogCSAqLwotCWNoLT5jb3VudCsrOworCWNoLT5wb3J0LmNvdW50Kys7CiAJLyoKIAkgKiBTZXQgYSBrZXJuZWwgc3RydWN0dXJlcyBwb2ludGVyIHRvIG91ciBsb2NhbCBjaGFubmVsIHN0cnVjdHVyZS4gVGhpcwogCSAqIHdheSB3ZSBjYW4gZ2V0IHRvIGl0IHdoZW4gcGFzc2VkIG9ubHkgYSB0dHkgc3RydWN0LgpAQCAtOTU3LDE0ICs5NTYsMTQgQEAKIAl3cml0ZXcoaGVhZCwgJmJjLT5yb3V0KTsKIAogCS8qIFNldCB0aGUgY2hhbm5lbHMgYXNzb2NpYXRlZCB0dHkgc3RydWN0dXJlICovCi0JY2gtPnR0eSA9IHR0eTsKKwljaC0+cG9ydC50dHkgPSB0dHk7CiAKIAkvKgogCSAqIFRoZSBiZWxvdyByb3V0aW5lIGdlbmVyYWxseSBzZXRzIHVwIHBhcml0eSwgYmF1ZCwgZmxvdyBjb250cm9sCiAJICogaXNzdWVzLCBldGMuLi4uIEl0IGVmZmVjdCBib3RoIGNvbnRyb2wgZmxhZ3MgYW5kIGlucHV0IGZsYWdzLgogCSAqLwogCWVwY2FwYXJhbSh0dHksIGNoKTsKLQljaC0+YXN5bmNmbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKKwljaC0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAltZW1vZmYoY2gpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwY2FfbG9jaywgZmxhZ3MpOwogCkBAIC05NzYsNyArOTc1LDcgQEAKIAkgKiB3YWl0aW5nIGZvciB0aGUgbGluZS4uLgogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZlcGNhX2xvY2ssIGZsYWdzKTsKLQljaC0+dHR5ID0gdHR5OworCWNoLT5wb3J0LnR0eSA9IHR0eTsKIAlnbG9iYWx3aW5vbihjaCk7CiAJLyogRW5hYmxlIERpZ2kgRGF0YSBldmVudHMgKi8KIAl3cml0ZWIoMSwgJmJjLT5pZGF0YSk7CkBAIC0xMDE3LDggKzEwMTYsOCBAQAogCQl9CiAJCWNoID0gY2FyZF9wdHJbY3JkXTsKIAkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgYmQtPm51bXBvcnRzOyBjb3VudCsrLCBjaCsrKSB7Ci0JCQlpZiAoY2ggJiYgY2gtPnR0eSkKLQkJCQl0dHlfaGFuZ3VwKGNoLT50dHkpOworCQkJaWYgKGNoICYmIGNoLT5wb3J0LnR0eSkKKwkJCQl0dHlfaGFuZ3VwKGNoLT5wb3J0LnR0eSk7CiAJCX0KIAl9CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZlcGNhX2RyaXZlcik7CkBAIC0xMDQwLDYgKzEwMzksNyBAQAogCS50aHJvdHRsZSA9IHBjX3Rocm90dGxlLAogCS51bnRocm90dGxlID0gcGNfdW50aHJvdHRsZSwKIAkuaGFuZ3VwID0gcGNfaGFuZ3VwLAorCS5icmVha19jdGwgPSBwY19zZW5kX2JyZWFrCiB9OwogCiBzdGF0aWMgaW50IGluZm9fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTExMzIsNyArMTEzMiw3IEBACiAJcGNfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19sZmxhZyA9IDA7CiAJcGNfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOwogCXBjX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDsKLQlwY19kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKKwlwY19kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfSEFSRFdBUkVfQlJFQUs7CiAJdHR5X3NldF9vcGVyYXRpb25zKHBjX2RyaXZlciwgJnBjX29wcyk7CiAKIAlwY19pbmZvLT5vd25lciA9IFRISVNfTU9EVUxFOwpAQCAtMTQyNyw3ICsxNDI3LDcgQEAKIAkJY2gtPmJvYXJkbnVtICAgPSBjcmQ7CiAJCWNoLT5jaGFubmVsbnVtID0gaTsKIAkJY2gtPm1hZ2ljICAgICAgPSBFUENBX01BR0lDOwotCQljaC0+dHR5ICAgICAgICA9IE5VTEw7CisJCWNoLT5wb3J0LnR0eSAgICAgICAgPSBOVUxMOwogCiAJCWlmIChzaHJpbmttZW0pIHsKIAkJCWZlcGNtZChjaCwgU0VUQlVGRkVSLCAzMiwgMCwgMCwgMCk7CkBAIC0xNTEwLDEwICsxNTEwLDEwIEBACiAJCWNoLT5mZXBzdG9wY2EgPSAwOwogCiAJCWNoLT5jbG9zZV9kZWxheSA9IDUwOwotCQljaC0+Y291bnQgPSAwOwotCQljaC0+YmxvY2tlZF9vcGVuID0gMDsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2gtPm9wZW5fd2FpdCk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoLT5jbG9zZV93YWl0KTsKKwkJY2gtPnBvcnQuY291bnQgPSAwOworCQljaC0+cG9ydC5ibG9ja2VkX29wZW4gPSAwOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaC0+cG9ydC5vcGVuX3dhaXQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaC0+cG9ydC5jbG9zZV93YWl0KTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcGNhX2xvY2ssIGZsYWdzKTsKIAl9CkBAIC0xNjMzLDE1ICsxNjMzLDE1IEBACiAJCWlmIChldmVudCAmIE1PREVNQ0hHX0lORCkgewogCQkJLyogQSBtb2RlbSBzaWduYWwgY2hhbmdlIGhhcyBiZWVuIGluZGljYXRlZCAqLwogCQkJY2gtPmltb2RlbSA9IG1zdGF0OwotCQkJaWYgKGNoLT5hc3luY2ZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpIHsKKwkJCWlmIChjaC0+cG9ydC5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7CiAJCQkJLyogV2UgYXJlIG5vdyByZWNlaXZpbmcgZGNkICovCiAJCQkJaWYgKG1zdGF0ICYgY2gtPmRjZCkKLQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaC0+b3Blbl93YWl0KTsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaC0+cG9ydC5vcGVuX3dhaXQpOwogCQkJCWVsc2UJLyogTm8gZGNkOyBoYW5ndXAgKi8KIAkJCQkJcGNfc2NoZWRfZXZlbnQoY2gsIEVQQ0FfRVZFTlRfSEFOR1VQKTsKIAkJCX0KIAkJfQotCQl0dHkgPSBjaC0+dHR5OworCQl0dHkgPSBjaC0+cG9ydC50dHk7CiAJCWlmICh0dHkpIHsKIAkJCWlmIChldmVudCAmIEJSRUFLX0lORCkgewogCQkJCS8qIEEgYnJlYWsgaGFzIGJlZW4gaW5kaWNhdGVkICovCkBAIC0xODgwLDkgKzE4ODAsOSBAQAogCQkgKiB0aGF0IHRoZSBkcml2ZXIgd2lsbCB3YWl0IG9uIGNhcnJpZXIgZGV0ZWN0LgogCQkgKi8KIAkJaWYgKHRzLT5jX2NmbGFnICYgQ0xPQ0FMKQotCQkJY2gtPmFzeW5jZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOworCQkJY2gtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwogCQllbHNlCi0JCQljaC0+YXN5bmNmbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKKwkJCWNoLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOwogCQltdmFsID0gY2gtPm1fZHRyIHwgY2gtPm1fcnRzOwogCX0gLyogRW5kIENCQVVEIG5vdCBkZXRlY3RlZCAqLwogCWlmbGFnID0gdGVybWlvczJkaWdpX2koY2gsIHRzLT5jX2lmbGFnKTsKQEAgLTE5NzIsNyArMTk3Miw3IEBACiAJZ2xvYmFsd2lub24oY2gpOwogCWlmIChjaC0+c3RhdHVzZmxhZ3MgJiBSWFNUT1BQRUQpCiAJCXJldHVybjsKLQl0dHkgPSBjaC0+dHR5OworCXR0eSA9IGNoLT5wb3J0LnR0eTsKIAlpZiAodHR5KQogCQl0cyA9IHR0eS0+dGVybWlvczsKIAliYyA9IGNoLT5icmRjaGFuOwpAQCAtMjAzMiw3ICsyMDMyLDcgQEAKIAlnbG9iYWx3aW5vbihjaCk7CiAJd3JpdGV3KHRhaWwsICZiYy0+cm91dCk7CiAJLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBnbG9iYWwgZGF0YSAqLwotCXR0eV9zY2hlZHVsZV9mbGlwKGNoLT50dHkpOworCXR0eV9zY2hlZHVsZV9mbGlwKGNoLT5wb3J0LnR0eSk7CiB9CiAKIHN0YXRpYyBpbnQgaW5mb19pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKQEAgLTIxNzcsNyArMjE3Nyw2IEBACiAJCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRpZ2lmbG93X3QgZGZsb3c7Ci0JaW50IHJldHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBtZmxhZywgbXN0YXQ7CiAJdW5zaWduZWQgY2hhciBzdGFydGMsIHN0b3BjOwpAQCAtMjE4OSwzNyArMjE4OCw3IEBACiAJCWJjID0gY2gtPmJyZGNoYW47CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKgotCSAqIEZvciBQT1NJWCBjb21wbGlhbmNlIHdlIG5lZWQgdG8gYWRkIG1vcmUgaW9jdGxzLiBTZWUgdHR5X2lvY3RsLmMgaW4KLQkgKiAvdXNyL3NyYy9saW51eC9kcml2ZXJzL2NoYXIgZm9yIGEgZ29vZCBleGFtcGxlLiBJbiBwYXJ0aWN1bGFyIHRoaW5rCi0JICogYWJvdXQgYWRkaW5nIFRDU0VUQUYsIFRDU0VUQVcsIFRDU0VUQSwgVENTRVRTRiwgVENTRVRTVywgVENTRVRTLgotCSAqLwogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUQ1NCUks6CS8qIFNWSUQgdmVyc2lvbjogbm9uLXplcm8gYXJnIC0tPiBubyBicmVhayAqLwotCQlyZXR2YWwgPSB0dHlfY2hlY2tfY2hhbmdlKHR0eSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlyZXR1cm4gcmV0dmFsOwotCQkvKiBTZXR1cCBhbiBldmVudCB0byBpbmRpY2F0ZSB3aGVuIHRoZSB0cmFuc21pdAotCQkgICBidWZmZXIgZW1wdGllcyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZXBjYV9sb2NrLCBmbGFncyk7Ci0JCXNldHVwX2VtcHR5X2V2ZW50KHR0eSwgY2gpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcGNhX2xvY2ssIGZsYWdzKTsKLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwotCQlpZiAoIWFyZykKLQkJCWRpZ2lfc2VuZF9icmVhayhjaCwgSFogLyA0KTsgICAgLyogMS80IHNlY29uZCAqLwotCQlyZXR1cm4gMDsKLQljYXNlIFRDU0JSS1A6CS8qIHN1cHBvcnQgZm9yIFBPU0lYIHRjc2VuZGJyZWFrKCkgKi8KLQkJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwotCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKLQkJLyogU2V0dXAgYW4gZXZlbnQgdG8gaW5kaWNhdGUgd2hlbiB0aGUgdHJhbnNtaXQgYnVmZmVyCi0JCSAgIGVtcHRpZXMgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmVwY2FfbG9jaywgZmxhZ3MpOwotCQlzZXR1cF9lbXB0eV9ldmVudCh0dHksIGNoKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXBjYV9sb2NrLCBmbGFncyk7Ci0JCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCAwKTsKLQkJZGlnaV9zZW5kX2JyZWFrKGNoLCBhcmcgPyBhcmcqKEhaLzEwKSA6IEhaLzQpOwotCQlyZXR1cm4gMDsKIAljYXNlIFRJT0NNT0RHOgogCQltZmxhZyA9IHBjX3Rpb2NtZ2V0KHR0eSwgZmlsZSk7CiAJCWlmIChwdXRfdXNlcihtZmxhZywgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJncCkpCkBAIC0yMjYyLDggKzIyMzEsOCBAQAogCQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwogCQl9IGVsc2UgewogCQkJLyogbGRpc2MgbG9jayBhbHJlYWR5IGhlbGQgaW4gaW9jdGwgKi8KLQkJCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCQkJaWYgKHR0eS0+bGRpc2Mub3BzLT5mbHVzaF9idWZmZXIpCisJCQkJdHR5LT5sZGlzYy5vcHMtPmZsdXNoX2J1ZmZlcih0dHkpOwogCQl9CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJLyogRmFsbCBUaHJ1ICovCkBAIC0yMzc2LDcgKzIzNDUsNyBAQAogCiAJCWlmICghKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSAmJgogCQkJICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaC0+b3Blbl93YWl0KTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPnBvcnQub3Blbl93YWl0KTsKIAogCX0gLyogRW5kIGlmIGNoYW5uZWwgdmFsaWQgKi8KIH0KQEAgLTIzODYsMTMgKzIzNTUsMTMgQEAKIAlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNoYW5uZWwsIHRxdWV1ZSk7CiAJLyogQ2FsbGVkIGluIHJlc3BvbnNlIHRvIGEgbW9kZW0gY2hhbmdlIGV2ZW50ICovCiAJaWYgKGNoICYmIGNoLT5tYWdpYyA9PSBFUENBX01BR0lDKSB7Ci0JCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBjaC0+dHR5OworCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gY2gtPnBvcnQudHR5OwogCiAJCWlmICh0dHkgJiYgdHR5LT5kcml2ZXJfZGF0YSkgewogCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChFUENBX0VWRU5UX0hBTkdVUCwgJmNoLT5ldmVudCkpIHsKIAkJCQl0dHlfaGFuZ3VwKHR0eSk7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaC0+b3Blbl93YWl0KTsKLQkJCQljaC0+YXN5bmNmbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoLT5wb3J0Lm9wZW5fd2FpdCk7CisJCQkJY2gtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCQl9CiAJCX0KIAl9CkBAIC0yNTA1LDEwICsyNDc0LDE0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBkaWdpX3NlbmRfYnJlYWsoc3RydWN0IGNoYW5uZWwgKmNoLCBpbnQgbXNlYykKK3N0YXRpYyBpbnQgcGNfc2VuZF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbXNlYykKIHsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKG1zZWMgPT0gLTEpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZlcGNhX2xvY2ssIGZsYWdzKTsKIAlnbG9iYWx3aW5vbihjaCk7CiAJLyoKQEAgLTI1MjEsNiArMjQ5NCw3IEBACiAJZmVwY21kKGNoLCBTRU5EQlJFQUssIG1zZWMsIDAsIDEwLCAwKTsKIAltZW1vZmYoY2gpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwY2FfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOwogfQogCiAvKiBDYWxsZXIgTVVTVCBob2xkIHRoZSBsb2NrICovCkBAIC0yNTM4LDcgKzI1MTIsOCBAQAogCW1lbW9mZihjaCk7CiB9CiAKLXN0YXRpYyB2b2lkIGVwY2Ffc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIHZvaWQgX19pbml0IGVwY2Ffc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpCiB7CiAJc3RydWN0IGJvYXJkX2luZm8gYm9hcmQ7CiAJaW50ICAgICAgICAgICAgICAgaW5kZXgsIGxvb3AsIGxhc3Q7CkBAIC0yNzkyLDYgKzI3NjcsMTcgQEAKIAludW1fY2FyZHMrKzsKIH0KIAorc3RhdGljIGludCBfX2luaXQgZXBjYV9yZWFsX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpbnQgaW50c1sxMV07CisKKwllcGNhX3NldHVwKGdldF9vcHRpb25zKHN0ciwgMTEsIGludHMpLCBpbnRzKTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiZGlnaWVwY2EiLCBlcGNhX3JlYWxfc2V0dXApOworI2VuZGlmCisKIGVudW0gZXBpY19ib2FyZF90eXBlcyB7CiAJYnJkX3hyID0gMCwKIAlicmRfeGVtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuaCBiL2RyaXZlcnMvY2hhci9lcGNhLmgKaW5kZXggM2M3N2MwMi4uZDQxNGJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuaAorKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5oCkBAIC04NCw2ICs4NCw3IEBACiBzdHJ1Y3QgY2hhbm5lbCAKIHsKIAlsb25nICAgbWFnaWM7CisJc3RydWN0IHR0eV9wb3J0IHBvcnQ7CiAJdW5zaWduZWQgY2hhciBib2FyZG51bTsKIAl1bnNpZ25lZCBjaGFyIGNoYW5uZWxudW07CiAJdW5zaWduZWQgY2hhciBvbW9kZW07ICAgICAgICAgLyogRkVQIG91dHB1dCBtb2RlbSBzdGF0dXMgICAgICovCkBAIC0xMTcsMTAgKzExOCw3IEBACiAJdW5zaWduZWQgc2hvcnQgcnhidWZoZWFkOwogCXVuc2lnbmVkIHNob3J0IHJ4YnVmc2l6ZTsKIAlpbnQgICAgY2xvc2VfZGVsYXk7Ci0JaW50ICAgIGNvdW50OwotCWludCAgICBibG9ja2VkX29wZW47CiAJdW5zaWduZWQgbG9uZyAgZXZlbnQ7Ci0JaW50ICAgIGFzeW5jZmxhZ3M7CiAJdWludCAgIGRldjsKIAl1bnNpZ25lZCBsb25nICBzdGF0dXNmbGFnczsKIAl1bnNpZ25lZCBsb25nICBjX2lmbGFnOwpAQCAtMTMyLDkgKzEzMCw2IEBACiAJc3RydWN0IGJvYXJkX2luZm8gICAgICAgICAgICpib2FyZDsKIAlzdHJ1Y3QgYm9hcmRfY2hhbgkgICAgX19pb21lbSAqYnJkY2hhbjsKIAlzdHJ1Y3QgZGlnaV9zdHJ1Y3QgICAgICAgICAgZGlnaWV4dDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAgICAgICAgICAgKnR0eTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgICAgb3Blbl93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICAgICBjbG9zZV93YWl0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICB0cXVldWU7CiAJc3RydWN0IGdsb2JhbF9kYXRhIAkgICAgX19pb21lbSAqbWFpbGJveDsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZXNwLmMgYi9kcml2ZXJzL2NoYXIvZXNwLmMKaW5kZXggODQ4NDBiYS4uN2YwNzdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VzcC5jCisrKyBiL2RyaXZlcnMvY2hhci9lc3AuYwpAQCAtMTI4LDkgKzEyOCw5IEBACiAKICNpZiBkZWZpbmVkKE1PRFVMRSkgJiYgZGVmaW5lZChTRVJJQUxfREVCVUdfTUNPVU5UKQogI2RlZmluZSBEQkdfQ05UKHMpIHByaW50ayhLRVJOX0RFQlVHICIoJXMpOiBbJXhdIHJlZmM9JWQsIHNlcmM9JWQsIHR0eWM9JWQgLT4gJXNcbiIsIFwKLQkJCQl0dHktPm5hbWUsIGluZm8tPmZsYWdzLCBcCisJCQkJdHR5LT5uYW1lLCBpbmZvLT5wb3J0LmZsYWdzLCBcCiAJCQkJc2VyaWFsX2RyaXZlci5yZWZjb3VudCwgXAotCQkJCWluZm8tPmNvdW50LCB0dHktPmNvdW50LCBzKQorCQkJCWluZm8tPnBvcnQuY291bnQsIHR0eS0+Y291bnQsIHMpCiAjZWxzZQogI2RlZmluZSBEQkdfQ05UKHMpCiAjZW5kaWYKQEAgLTE3MiwxMyArMTcyLDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNlcmlhbF9pbihzdHJ1Y3QgZXNwX3N0cnVjdCAqaW5mbywgaW50IG9mZnNldCkKIHsKLQlyZXR1cm4gaW5iKGluZm8tPnBvcnQgKyBvZmZzZXQpOworCXJldHVybiBpbmIoaW5mby0+aW9fcG9ydCArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXJpYWxfb3V0KHN0cnVjdCBlc3Bfc3RydWN0ICppbmZvLCBpbnQgb2Zmc2V0LAogCQkJICAgICAgdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKLQlvdXRiKHZhbHVlLCBpbmZvLT5wb3J0K29mZnNldCk7CisJb3V0Yih2YWx1ZSwgaW5mby0+aW9fcG9ydCtvZmZzZXQpOwogfQogCiAvKgpAQCAtMjczLDcgKzI3Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWNlaXZlX2NoYXJzX3BpbyhzdHJ1Y3QgZXNwX3N0cnVjdCAqaW5mbywgaW50IG51bV9ieXRlcykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAlpbnQgaTsKIAlzdHJ1Y3QgZXNwX3Bpb19idWZmZXIgKnBpb19idWY7CiAJc3RydWN0IGVzcF9waW9fYnVmZmVyICplcnJfYnVmOwpAQCAtMjk1LDcgKzI5NSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2J5dGVzIC0gMTsgaSArPSAyKSB7CiAJCSooKHVuc2lnbmVkIHNob3J0ICopKHBpb19idWYtPmRhdGEgKyBpKSkgPQotCQkJaW53KGluZm8tPnBvcnQgKyBVQVJUX0VTSV9SWCk7CisJCQlpbncoaW5mby0+aW9fcG9ydCArIFVBUlRfRVNJX1JYKTsKIAkJZXJyX2J1Zi0+ZGF0YVtpXSA9IHNlcmlhbF9pbihpbmZvLCBVQVJUX0VTSV9SV1MpOwogCQllcnJfYnVmLT5kYXRhW2kgKyAxXSA9IChlcnJfYnVmLT5kYXRhW2ldID4+IDMpICYgc3RhdHVzX21hc2s7CiAJCWVycl9idWYtPmRhdGFbaV0gJj0gc3RhdHVzX21hc2s7CkBAIC0zMDgsNyArMzA4LDcgQEAKIAl9CiAKIAkvKiBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBzdGlsbCBvayBzaW5jZSBpbnRlcnJ1cHRzIHdlcmUgZW5hYmxlZCAqLwotCXR0eSA9IGluZm8tPnR0eTsKKwl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAogCWlmICghdHR5KSB7CiAJCXJlbGVhc2VfcGlvX2J1ZmZlcihwaW9fYnVmKTsKQEAgLTMyNSw3ICszMjUsNyBAQAogCiAJCQlpZiAoZXJyX2J1Zi0+ZGF0YVtpXSAmIDB4MDQpIHsKIAkJCQlmbGFnID0gVFRZX0JSRUFLOwotCQkJCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX1NBSykKKwkJCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NBSykKIAkJCQkJZG9fU0FLKHR0eSk7CiAJCQl9IGVsc2UgaWYgKGVycl9idWYtPmRhdGFbaV0gJiAweDAyKQogCQkJCWZsYWcgPSBUVFlfRlJBTUU7CkBAIC0zNzAsNyArMzcwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWNlaXZlX2NoYXJzX2RtYV9kb25lKHN0cnVjdCBlc3Bfc3RydWN0ICppbmZvLAogCQkJCQkgICAgaW50IHN0YXR1cykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAlpbnQgbnVtX2J5dGVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM5Niw3ICszOTYsNyBAQAogCQkJaWYgKHN0YXR1cyAmIDB4MTApIHsKIAkJCQlzdGF0ZmxhZyA9IFRUWV9CUkVBSzsKIAkJCQkoaW5mby0+aWNvdW50LmJyaykrKzsKLQkJCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TQUspCisJCQkJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TQUspCiAJCQkJCWRvX1NBSyh0dHkpOwogCQkJfSBlbHNlIGlmIChzdGF0dXMgJiAweDA4KSB7CiAJCQkJc3RhdGZsYWcgPSBUVFlfRlJBTUU7CkBAIC00NTEsNyArNDUxLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgc3BhY2VfYXZhaWwgLSAxOyBpICs9IDIpIHsKIAkJCW91dHcoKigodW5zaWduZWQgc2hvcnQgKikocGlvX2J1Zi0+ZGF0YSArIGkpKSwKLQkJCSAgICAgaW5mby0+cG9ydCArIFVBUlRfRVNJX1RYKTsKKwkJCSAgICAgaW5mby0+aW9fcG9ydCArIFVBUlRfRVNJX1RYKTsKIAkJfQogCiAJCWlmIChzcGFjZV9hdmFpbCAmIDB4MDAwMSkKQEAgLTQ3MCw4ICs0NzAsOCBAQAogCX0KIAogCWlmIChpbmZvLT54bWl0X2NudCA8IFdBS0VVUF9DSEFSUykgewotCQlpZiAoaW5mby0+dHR5KQotCQkJdHR5X3dha2V1cChpbmZvLT50dHkpOworCQlpZiAoaW5mby0+cG9ydC50dHkpCisJCQl0dHlfd2FrZXVwKGluZm8tPnBvcnQudHR5KTsKIAogI2lmZGVmIFNFUklBTF9ERUJVR19JTlRSCiAJCXByaW50aygiVEhSRS4uLiIpOwpAQCAtNTA3LDggKzUwNyw4IEBACiAJaW5mby0+eG1pdF90YWlsID0gKGluZm8tPnhtaXRfdGFpbCArIGRtYV9ieXRlcykgJiAoRVNQX1hNSVRfU0laRSAtIDEpOwogCiAJaWYgKGluZm8tPnhtaXRfY250IDwgV0FLRVVQX0NIQVJTKSB7Ci0JCWlmIChpbmZvLT50dHkpCi0JCQl0dHlfd2FrZXVwKGluZm8tPnR0eSk7CisJCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJCXR0eV93YWtldXAoaW5mby0+cG9ydC50dHkpOwogCiAjaWZkZWYgU0VSSUFMX0RFQlVHX0lOVFIKIAkJcHJpbnRrKCJUSFJFLi4uIik7CkBAIC01NzUsMTggKzU3NSwxOCBAQAogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKIAl9CiAKLQlpZiAoKGluZm8tPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpICYmIChzdGF0dXMgJiBVQVJUX01TUl9ERENEKSkgeworCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSAmJiAoc3RhdHVzICYgVUFSVF9NU1JfRERDRCkpIHsKICNpZiAoZGVmaW5lZChTRVJJQUxfREVCVUdfT1BFTikgfHwgZGVmaW5lZChTRVJJQUxfREVCVUdfSU5UUikpCiAJCXByaW50aygidHR5cyVkIENEIG5vdyAlcy4uLiIsIGluZm8tPmxpbmUsCiAJCSAgICAgICAoc3RhdHVzICYgVUFSVF9NU1JfRENEKSA/ICJvbiIgOiAib2ZmIik7CiAjZW5kaWYKIAkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0RDRCkKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwogCQllbHNlIHsKICNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTgogCQkJcHJpbnRrKCJzY2hlZHVsaW5nIGhhbmd1cC4uLiIpOwogI2VuZGlmCi0JCQl0dHlfaGFuZ3VwKGluZm8tPnR0eSk7CisJCQl0dHlfaGFuZ3VwKGluZm8tPnBvcnQudHR5KTsKIAkJfQogCX0KIH0KQEAgLTYwOSw3ICs2MDksNyBAQAogCiAJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAotCWlmICghaW5mby0+dHR5KSB7CisJaWYgKCFpbmZvLT5wb3J0LnR0eSkgewogCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CkBAIC02NDcsNyArNjQ3LDcgQEAKIAkJbnVtX2J5dGVzID0gc2VyaWFsX2luKGluZm8sIFVBUlRfRVNJX1NUQVQxKSA8PCA4OwogCQludW1fYnl0ZXMgfD0gc2VyaWFsX2luKGluZm8sIFVBUlRfRVNJX1NUQVQyKTsKIAotCQludW1fYnl0ZXMgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbShpbmZvLT50dHksIG51bV9ieXRlcyk7CisJCW51bV9ieXRlcyA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKGluZm8tPnBvcnQudHR5LCBudW1fYnl0ZXMpOwogCiAJCWlmIChudW1fYnl0ZXMpIHsKIAkJCWlmIChkbWFfYnl0ZXMgfHwKQEAgLTY2MSw3ICs2NjEsNyBAQAogCiAJaWYgKCEoaW5mby0+c3RhdF9mbGFncyAmIChFU1BfU1RBVF9ETUFfUlggfCBFU1BfU1RBVF9ETUFfVFgpKSAmJgogCSAgICAoc2NyYXRjaCAmIDB4MDIpICYmIChpbmZvLT5JRVIgJiBVQVJUX0lFUl9USFJJKSkgewotCQlpZiAoKGluZm8tPnhtaXRfY250IDw9IDApIHx8IGluZm8tPnR0eS0+c3RvcHBlZCkgeworCQlpZiAoKGluZm8tPnhtaXRfY250IDw9IDApIHx8IGluZm8tPnBvcnQudHR5LT5zdG9wcGVkKSB7CiAJCQlpbmZvLT5JRVIgJj0gflVBUlRfSUVSX1RIUkk7CiAJCQlzZXJpYWxfb3V0KGluZm8sIFVBUlRfRVNJX0NNRDEsIEVTSV9TRVRfU1JWX01BU0spOwogCQkJc2VyaWFsX291dChpbmZvLCBVQVJUX0VTSV9DTUQyLCBpbmZvLT5JRVIpOwpAQCAtNzgyLDcgKzc4Miw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpCisJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKIAkJZ290byBvdXQ7CiAKIAlpZiAoIWluZm8tPnhtaXRfYnVmKSB7CkBAIC04MDYsNyArODA2LDcgQEAKIAludW1fY2hhcnMgfD0gc2VyaWFsX2luKGluZm8sIFVBUlRfRVNJX1NUQVQyKTsKIAogCXdoaWxlIChudW1fY2hhcnMgPiAxKSB7Ci0JCWludyhpbmZvLT5wb3J0ICsgVUFSVF9FU0lfUlgpOworCQlpbncoaW5mby0+aW9fcG9ydCArIFVBUlRfRVNJX1JYKTsKIAkJbnVtX2NoYXJzIC09IDI7CiAJfQogCkBAIC04MzQsOSArODM0LDkgQEAKIAogCWlmIChyZXR2YWwpIHsKIAkJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJCWlmIChpbmZvLT50dHkpCisJCQlpZiAoaW5mby0+cG9ydC50dHkpCiAJCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsCi0JCQkJCSZpbmZvLT50dHktPmZsYWdzKTsKKwkJCQkJJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAJCQlyZXR2YWwgPSAwOwogCQl9CiAJCWdvdG8gb3V0X3VubG9ja2VkOwpAQCAtODc0LDMwICs4NzQsMzAgQEAKIAlzZXJpYWxfb3V0KGluZm8sIFVBUlRfRVNJX0NNRDEsIEVTSV9TRVRfU1JWX01BU0spOwogCXNlcmlhbF9vdXQoaW5mbywgVUFSVF9FU0lfQ01EMiwgaW5mby0+SUVSKTsKIAotCWlmIChpbmZvLT50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIFNldCB1cCB0aGUgdHR5LT5hbHRfc3BlZWQga2x1ZGdlCiAJICovCi0JaWYgKGluZm8tPnR0eSkgewotCQlpZiAoKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKLQkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gNTc2MDA7Ci0JCWlmICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKLQkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gMTE1MjAwOwotCQlpZiAoKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9TSEkpCi0JCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDIzMDQwMDsKLQkJaWYgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKLQkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gNDYwODAwOworCWlmIChpbmZvLT5wb3J0LnR0eSkgeworCQlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0hJKQorCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDU3NjAwOworCQlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKKwkJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSAxMTUyMDA7CisJCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQorCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDIzMDQwMDsKKwkJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9XQVJQKQorCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKIAl9CiAKIAkvKgogCSAqIHNldCB0aGUgc3BlZWQgb2YgdGhlIHNlcmlhbCBwb3J0CiAJICovCiAJY2hhbmdlX3NwZWVkKGluZm8pOwotCWluZm8tPmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOworCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CiAJcmV0dXJuIDA7CiAKIG91dDoKQEAgLTkxNCw3ICs5MTQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcJZmxhZ3MsIGY7CiAKLQlpZiAoIShpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKKwlpZiAoIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQogCQlyZXR1cm47CiAKICNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTgpAQCAtOTUxLDcgKzk1MSw3IEBACiAKIAkJd2hpbGUgKGN1cnJlbnRfcG9ydCkgewogCQkJaWYgKChjdXJyZW50X3BvcnQgIT0gaW5mbykgJiYKLQkJCSAgICAoY3VycmVudF9wb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKKwkJCSAgICAoY3VycmVudF9wb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQogCQkJCWJyZWFrOwogCiAJCQljdXJyZW50X3BvcnQgPSBjdXJyZW50X3BvcnQtPm5leHRfcG9ydDsKQEAgLTk3NCw3ICs5NzQsNyBAQAogCXNlcmlhbF9vdXQoaW5mbywgVUFSVF9FU0lfQ01EMSwgRVNJX1NFVF9TUlZfTUFTSyk7CiAJc2VyaWFsX291dChpbmZvLCBVQVJUX0VTSV9DTUQyLCAweDAwKTsKIAotCWlmICghaW5mby0+dHR5IHx8IChpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpCisJaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpCiAJCWluZm8tPk1DUiAmPSB+KFVBUlRfTUNSX0RUUnxVQVJUX01DUl9SVFMpOwogCiAJaW5mby0+TUNSICY9IH5VQVJUX01DUl9PVVQyOwpAQCAtOTgyLDEwICs5ODIsMTAgQEAKIAlzZXJpYWxfb3V0KGluZm8sIFVBUlRfRVNJX0NNRDIsIFVBUlRfTUNSKTsKIAlzZXJpYWxfb3V0KGluZm8sIFVBUlRfRVNJX0NNRDIsIGluZm8tPk1DUik7CiAKLQlpZiAoaW5mby0+dHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCi0JaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOworCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTAwMiwxMCArMTAwMiwxMCBAQAogCXVuc2lnbmVkIGNoYXIgZmxvdzEgPSAwLCBmbG93MiA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghaW5mby0+dHR5IHx8ICFpbmZvLT50dHktPnRlcm1pb3MpCisJaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAhaW5mby0+cG9ydC50dHktPnRlcm1pb3MpCiAJCXJldHVybjsKLQljZmxhZyA9IGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKLQlwb3J0ID0gaW5mby0+cG9ydDsKKwljZmxhZyA9IGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCXBvcnQgPSBpbmZvLT5pb19wb3J0OwogCiAJLyogYnl0ZSBzaXplIGFuZCBwYXJpdHkgKi8KIAlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKQEAgLTEwMjksOSArMTAyOSw5IEBACiAJaWYgKGNmbGFnICYgQ01TUEFSKQogCQljdmFsIHw9IFVBUlRfTENSX1NQQVI7CiAjZW5kaWYKLQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+dHR5KTsKKwliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHkpOwogCWlmIChiYXVkID09IDM4NDAwICYmCi0JCSgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpKQorCQkoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpKQogCQlxdW90ID0gaW5mby0+Y3VzdG9tX2Rpdmlzb3I7CiAJZWxzZSB7CiAJCWlmIChiYXVkID09IDEzNCkgLyogU3BlY2lhbCBjYXNlIHNpbmNlIDEzNCBpcyByZWFsbHkgMTM0LjUgKi8KQEAgLTEwNDYsNDkgKzEwNDYsNDkgQEAKIAlpZiAoYmF1ZCkgewogCQkvKiBBY3R1YWwgcmF0ZSAqLwogCQliYXVkID0gQkFTRV9CQVVEL3F1b3Q7Ci0JCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKGluZm8tPnR0eSwgYmF1ZCwgYmF1ZCk7CisJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKGluZm8tPnBvcnQudHR5LCBiYXVkLCBiYXVkKTsKIAl9CiAJaW5mby0+dGltZW91dCA9ICgoMTAyNCAqIEhaICogYml0cyAqIHF1b3QpIC8gQkFTRV9CQVVEKSArIChIWiAvIDUwKTsKIAogCS8qIENUUyBmbG93IGNvbnRyb2wgZmxhZyBhbmQgbW9kZW0gc3RhdHVzIGludGVycnVwdHMgKi8KIAkvKiBpbmZvLT5JRVIgJj0gflVBUlRfSUVSX01TSTsgKi8KIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0JCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOworCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOwogCQkvKiBpbmZvLT5JRVIgfD0gVUFSVF9JRVJfTVNJOyAqLwogCQlmbG93MSA9IDB4MDQ7CiAJCWZsb3cyID0gMHgxMDsKIAl9IGVsc2UKLQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NUU19GTE9XOworCQlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKIAlpZiAoY2ZsYWcgJiBDTE9DQUwpCi0JCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DSEVDS19DRDsKKwkJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfQ0hFQ0tfQ0Q7CiAJZWxzZQotCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKKwkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKIAogCS8qCiAJICogU2V0IHVwIHBhcml0eSBjaGVjayBmbGFnCiAJICovCiAJaW5mby0+cmVhZF9zdGF0dXNfbWFzayA9IFVBUlRfTFNSX09FIHwgVUFSVF9MU1JfVEhSRSB8IFVBUlRfTFNSX0RSOwotCWlmIChJX0lOUENLKGluZm8tPnR0eSkpCisJaWYgKElfSU5QQ0soaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX0ZFIHwgVUFSVF9MU1JfUEU7Ci0JaWYgKElfQlJLSU5UKGluZm8tPnR0eSkgfHwgSV9QQVJNUksoaW5mby0+dHR5KSkKKwlpZiAoSV9CUktJTlQoaW5mby0+cG9ydC50dHkpIHx8IElfUEFSTVJLKGluZm8tPnBvcnQudHR5KSkKIAkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayB8PSBVQVJUX0xTUl9CSTsKIAogCWluZm8tPmlnbm9yZV9zdGF0dXNfbWFzayA9IDA7CiAjaWYgMAogCS8qIFRoaXMgc2hvdWxkIGJlIHNhZmUsIGJ1dCBmb3Igc29tZSBicm9rZW4gYml0cyBvZiBoYXJkd2FyZS4uLiAqLwotCWlmIChJX0lHTlBBUihpbmZvLT50dHkpKSB7CisJaWYgKElfSUdOUEFSKGluZm8tPnBvcnQudHR5KSkgewogCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVUFSVF9MU1JfUEUgfCBVQVJUX0xTUl9GRTsKIAkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayB8PSBVQVJUX0xTUl9QRSB8IFVBUlRfTFNSX0ZFOwogCX0KICNlbmRpZgotCWlmIChJX0lHTkJSSyhpbmZvLT50dHkpKSB7CisJaWYgKElfSUdOQlJLKGluZm8tPnBvcnQudHR5KSkgewogCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVUFSVF9MU1JfQkk7CiAJCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9MU1JfQkk7CiAJCS8qCiAJCSAqIElmIHdlJ3JlIGlnbm9yZSBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsIGlnbm9yZQogCQkgKiBvdmVycnVucyB0b28uICAoRm9yIHJlYWwgcmF3IHN1cHBvcnQpLgogCQkgKi8KLQkJaWYgKElfSUdOUEFSKGluZm8tPnR0eSkpIHsKKwkJaWYgKElfSUdOUEFSKGluZm8tPnBvcnQudHR5KSkgewogCQkJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX09FIHwgXAogCQkJCVVBUlRfTFNSX1BFIHwgVUFSVF9MU1JfRkU7CiAJCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX09FIHwgXApAQCAtMTA5Niw3ICsxMDk2LDcgQEAKIAkJfQogCX0KIAotCWlmIChJX0lYT0ZGKGluZm8tPnR0eSkpCisJaWYgKElfSVhPRkYoaW5mby0+cG9ydC50dHkpKQogCQlmbG93MSB8PSAweDgxOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKQEAgLTExMTYsMTAgKzExMTYsMTAgQEAKIAlzZXJpYWxfb3V0KGluZm8sIFVBUlRfRVNJX0NNRDIsIGZsb3cyKTsKIAogCS8qIHNldCBmbG93IGNvbnRyb2wgY2hhcmFjdGVycyAoWE9OL1hPRkYgb25seSkgKi8KLQlpZiAoSV9JWE9GRihpbmZvLT50dHkpKSB7CisJaWYgKElfSVhPRkYoaW5mby0+cG9ydC50dHkpKSB7CiAJCXNlcmlhbF9vdXQoaW5mbywgVUFSVF9FU0lfQ01EMSwgRVNJX1NFVF9GTE9XX0NIQVJTKTsKLQkJc2VyaWFsX291dChpbmZvLCBVQVJUX0VTSV9DTUQyLCBTVEFSVF9DSEFSKGluZm8tPnR0eSkpOwotCQlzZXJpYWxfb3V0KGluZm8sIFVBUlRfRVNJX0NNRDIsIFNUT1BfQ0hBUihpbmZvLT50dHkpKTsKKwkJc2VyaWFsX291dChpbmZvLCBVQVJUX0VTSV9DTUQyLCBTVEFSVF9DSEFSKGluZm8tPnBvcnQudHR5KSk7CisJCXNlcmlhbF9vdXQoaW5mbywgVUFSVF9FU0lfQ01EMiwgU1RPUF9DSEFSKGluZm8tPnBvcnQudHR5KSk7CiAJCXNlcmlhbF9vdXQoaW5mbywgVUFSVF9FU0lfQ01EMiwgMHgxMCk7CiAJCXNlcmlhbF9vdXQoaW5mbywgVUFSVF9FU0lfQ01EMiwgMHgyMSk7CiAJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewpAQCAtMTM1NSw5ICsxMzU1LDkgQEAKIAltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwogCXRtcC50eXBlID0gUE9SVF8xNjU1MEE7CiAJdG1wLmxpbmUgPSBpbmZvLT5saW5lOwotCXRtcC5wb3J0ID0gaW5mby0+cG9ydDsKKwl0bXAucG9ydCA9IGluZm8tPmlvX3BvcnQ7CiAJdG1wLmlycSA9IGluZm8tPmlycTsKLQl0bXAuZmxhZ3MgPSBpbmZvLT5mbGFnczsKKwl0bXAuZmxhZ3MgPSBpbmZvLT5wb3J0LmZsYWdzOwogCXRtcC54bWl0X2ZpZm9fc2l6ZSA9IDEwMjQ7CiAJdG1wLmJhdWRfYmFzZSA9IEJBU0VfQkFVRDsKIAl0bXAuY2xvc2VfZGVsYXkgPSBpbmZvLT5jbG9zZV9kZWxheTsKQEAgLTE0MDcsNyArMTQwNyw3IEBACiAKIAlpZiAoKG5ld19zZXJpYWwudHlwZSAhPSBQT1JUXzE2NTUwQSkgfHwKIAkgICAgKG5ld19zZXJpYWwuaHViNikgfHwKLQkgICAgKGluZm8tPnBvcnQgIT0gbmV3X3NlcmlhbC5wb3J0KSB8fAorCSAgICAoaW5mby0+aW9fcG9ydCAhPSBuZXdfc2VyaWFsLnBvcnQpIHx8CiAJICAgIChuZXdfc2VyaWFsLmJhdWRfYmFzZSAhPSBCQVNFX0JBVUQpIHx8CiAJICAgIChuZXdfc2VyaWFsLmlycSA+IDE1KSB8fAogCSAgICAobmV3X3NlcmlhbC5pcnEgPCAyKSB8fApAQCAtMTQyNSw5ICsxNDI1LDkgQEAKIAkJaWYgKGNoYW5nZV9pcnEgfHwKIAkJICAgIChuZXdfc2VyaWFsLmNsb3NlX2RlbGF5ICE9IGluZm8tPmNsb3NlX2RlbGF5KSB8fAogCQkgICAgKChuZXdfc2VyaWFsLmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSAhPQotCQkgICAgIChpbmZvLT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQorCQkgICAgIChpbmZvLT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpCiAJCQlyZXR1cm4gLUVQRVJNOwotCQlpbmZvLT5mbGFncyA9ICgoaW5mby0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKKwkJaW5mby0+cG9ydC5mbGFncyA9ICgoaW5mby0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgfAogCQkJICAgICAgIChuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfVVNSX01BU0spKTsKIAkJaW5mby0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOwogCX0gZWxzZSB7CkBAIC0xNDQxLDkgKzE0NDEsOSBAQAogCQkJCWlmICgoY3VycmVudF9hc3luYy0+bGluZSA+PSBpbmZvLT5saW5lKSAmJgogCQkJCSAgICAoY3VycmVudF9hc3luYy0+bGluZSA8IChpbmZvLT5saW5lICsgOCkpKSB7CiAJCQkJCWlmIChjdXJyZW50X2FzeW5jID09IGluZm8pIHsKLQkJCQkJCWlmIChjdXJyZW50X2FzeW5jLT5jb3VudCA+IDEpCisJCQkJCQlpZiAoY3VycmVudF9hc3luYy0+cG9ydC5jb3VudCA+IDEpCiAJCQkJCQkJcmV0dXJuIC1FQlVTWTsKLQkJCQkJfSBlbHNlIGlmIChjdXJyZW50X2FzeW5jLT5jb3VudCkKKwkJCQkJfSBlbHNlIGlmIChjdXJyZW50X2FzeW5jLT5wb3J0LmNvdW50KQogCQkJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCQl9CiAKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAJCSAqIEF0IHRoaXMgcG9pbnQsIHdlIHN0YXJ0IG1ha2luZyBjaGFuZ2VzLi4uLi4KIAkJICovCiAKLQkJaW5mby0+ZmxhZ3MgPSAoKGluZm8tPmZsYWdzICYgfkFTWU5DX0ZMQUdTKSB8CisJCWluZm8tPnBvcnQuZmxhZ3MgPSAoKGluZm8tPnBvcnQuZmxhZ3MgJiB+QVNZTkNfRkxBR1MpIHwKIAkJCSAgICAgICAobmV3X3NlcmlhbC5mbGFncyAmIEFTWU5DX0ZMQUdTKSk7CiAJCWluZm8tPmN1c3RvbV9kaXZpc29yID0gbmV3X3NlcmlhbC5jdXN0b21fZGl2aXNvcjsKIAkJaW5mby0+Y2xvc2VfZGVsYXkgPSBuZXdfc2VyaWFsLmNsb3NlX2RlbGF5ICogSFovMTAwOwpAQCAtMTQ4NywxOCArMTQ4NywxOCBAQAogCQl9CiAJfQogCi0JaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKLQkJaWYgKCgob2xkX2luZm8uZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgIT0KLQkJICAgICAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpIHx8CisJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgeworCQlpZiAoKChvbGRfaW5mby5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spICE9CisJCSAgICAgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpIHx8CiAJCSAgICAob2xkX2luZm8uY3VzdG9tX2Rpdmlzb3IgIT0gaW5mby0+Y3VzdG9tX2Rpdmlzb3IpKSB7Ci0JCQlpZiAoKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKLQkJCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDU3NjAwOwotCQkJaWYgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfVkhJKQotCQkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gMTE1MjAwOwotCQkJaWYgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQotCQkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gMjMwNDAwOwotCQkJaWYgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKLQkJCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKKwkJCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCisJCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDU3NjAwOworCQkJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCisJCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDExNTIwMDsKKwkJCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQorCQkJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7CisJCQlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1dBUlApCisJCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKIAkJCWNoYW5nZV9zcGVlZChpbmZvKTsKIAkJfQogCX0gZWxzZQpAQCAtMTU1NCw5ICsxNTU0LDkgQEAKIAogCQkJd2hpbGUgKGN1cnJlbnRfYXN5bmMpIHsKIAkJCQlpZiAoY3VycmVudF9hc3luYyA9PSBpbmZvKSB7Ci0JCQkJCWlmIChjdXJyZW50X2FzeW5jLT5jb3VudCA+IDEpCisJCQkJCWlmIChjdXJyZW50X2FzeW5jLT5wb3J0LmNvdW50ID4gMSkKIAkJCQkJCXJldHVybiAtRUJVU1k7Ci0JCQkJfSBlbHNlIGlmIChjdXJyZW50X2FzeW5jLT5jb3VudCkKKwkJCQl9IGVsc2UgaWYgKGN1cnJlbnRfYXN5bmMtPnBvcnQuY291bnQpCiAJCQkJCXJldHVybiAtRUJVU1k7CiAKIAkJCQljdXJyZW50X2FzeW5jID0gY3VycmVudF9hc3luYy0+bmV4dF9wb3J0OwpAQCAtMTU3OCw3ICsxNTc4LDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAkJfSBlbHNlIHsKIAkJCS8qIERNQSBtb2RlIHRvIFBJTyBtb2RlIG9ubHkgKi8KLQkJCWlmIChpbmZvLT5jb3VudCA+IDEpCisJCQlpZiAoaW5mby0+cG9ydC5jb3VudCA+IDEpCiAJCQkJcmV0dXJuIC1FQlVTWTsKIAogCQkJc2h1dGRvd24oaW5mbyk7CkBAIC0xNjM0LDcgKzE2MzQsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJfQogCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCisJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJcmV0dmFsID0gc3RhcnR1cChpbmZvKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0xNzI1LDEzICsxNzI1LDEzIEBACiAvKgogICogcnNfYnJlYWsoKSAtLS0gcm91dGluZSB3aGljaCB0dXJucyB0aGUgYnJlYWsgaGFuZGxpbmcgb24gb3Igb2ZmCiAgKi8KLXN0YXRpYyB2b2lkIGVzcF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCitzdGF0aWMgaW50IGVzcF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IGVzcF9zdHJ1Y3QgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImVzcF9icmVhayIpKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGJyZWFrX3N0YXRlID09IC0xKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CkBAIC0xNzQ3LDYgKzE3NDcsNyBAQAogCQlzZXJpYWxfb3V0KGluZm8sIFVBUlRfRVNJX0NNRDIsIDB4MDApOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJzX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMTkxNyw5ICsxOTE4LDkgQEAKIAogI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCiAJcHJpbnRrKEtFUk5fREVCVUcgInJzX2Nsb3NlIHR0eXMlZCwgY291bnQgPSAlZFxuIiwKLQkJCQkJCWluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKKwkJCQkJCWluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOwogI2VuZGlmCi0JaWYgKHR0eS0+Y291bnQgPT0gMSAmJiBpbmZvLT5jb3VudCAhPSAxKSB7CisJaWYgKHR0eS0+Y291bnQgPT0gMSAmJiBpbmZvLT5wb3J0LmNvdW50ICE9IDEpIHsKIAkJLyoKIAkJICogVWgsIG9oLiAgdHR5LT5jb3VudCBpcyAxLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0dHkKIAkJICogc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQuICBJbmZvLT5jb3VudCBzaG91bGQgYWx3YXlzCkBAIC0xOTI3LDE5ICsxOTI4LDE5IEBACiAJCSAqIG9uZSwgd2UndmUgZ290IHJlYWwgcHJvYmxlbXMsIHNpbmNlIGl0IG1lYW5zIHRoZQogCQkgKiBzZXJpYWwgcG9ydCB3b24ndCBiZSBzaHV0ZG93bi4KIAkJICovCi0JCXByaW50ayhLRVJOX0RFQlVHICJyc19jbG9zZTogYmFkIHNlcmlhbCBwb3J0IGNvdW50OyB0dHktPmNvdW50IGlzIDEsIGluZm8tPmNvdW50IGlzICVkXG4iLCBpbmZvLT5jb3VudCk7Ci0JCWluZm8tPmNvdW50ID0gMTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJzX2Nsb3NlOiBiYWQgc2VyaWFsIHBvcnQgY291bnQ7IHR0eS0+Y291bnQgaXMgMSwgaW5mby0+cG9ydC5jb3VudCBpcyAlZFxuIiwgaW5mby0+cG9ydC5jb3VudCk7CisJCWluZm8tPnBvcnQuY291bnQgPSAxOwogCX0KLQlpZiAoLS1pbmZvLT5jb3VudCA8IDApIHsKKwlpZiAoLS1pbmZvLT5wb3J0LmNvdW50IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInJzX2Nsb3NlOiBiYWQgc2VyaWFsIHBvcnQgY291bnQgZm9yIHR0eXMlZDogJWRcbiIsCi0JCSAgICAgICBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7Ci0JCWluZm8tPmNvdW50ID0gMDsKKwkJICAgICAgIGluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOworCQlpbmZvLT5wb3J0LmNvdW50ID0gMDsKIAl9Ci0JaWYgKGluZm8tPmNvdW50KSB7CisJaWYgKGluZm8tPnBvcnQuY291bnQpIHsKIAkJREJHX0NOVCgiYmVmb3JlIERFQy0yIik7CiAJCWdvdG8gb3V0OwogCX0KLQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOworCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0xPU0lORzsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAkvKgpAQCAtMTk1OCw3ICsxOTU5LDcgQEAKIAkvKiBpbmZvLT5JRVIgJj0gflVBUlRfSUVSX1JMU0k7ICovCiAJaW5mby0+SUVSICY9IH5VQVJUX0lFUl9SREk7CiAJaW5mby0+cmVhZF9zdGF0dXNfbWFzayAmPSB+VUFSVF9MU1JfRFI7Ci0JaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKKwlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAkJc2VyaWFsX291dChpbmZvLCBVQVJUX0VTSV9DTUQxLCBFU0lfU0VUX1NSVl9NQVNLKTsKQEAgLTE5ODEsMTUgKzE5ODIsMTUgQEAKIAlyc19mbHVzaF9idWZmZXIodHR5KTsKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAl0dHktPmNsb3NpbmcgPSAwOwotCWluZm8tPnR0eSA9IE5VTEw7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOwogCi0JaWYgKGluZm8tPmJsb2NrZWRfb3BlbikgeworCWlmIChpbmZvLT5wb3J0LmJsb2NrZWRfb3BlbikgewogCQlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpCiAJCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKGluZm8tPmNsb3NlX2RlbGF5KSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAJfQotCWluZm8tPmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRXxBU1lOQ19DTE9TSU5HKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmNsb3NlX3dhaXQpOworCWluZm8tPnBvcnQuZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEFTWU5DX0NMT1NJTkcpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5jbG9zZV93YWl0KTsKIAlyZXR1cm47CiAKIG91dDoKQEAgLTIwNDcsMTAgKzIwNDgsMTAgQEAKIAogCXJzX2ZsdXNoX2J1ZmZlcih0dHkpOwogCXNodXRkb3duKGluZm8pOwotCWluZm8tPmNvdW50ID0gMDsKLQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQlpbmZvLT50dHkgPSBOVUxMOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwlpbmZvLT5wb3J0LmNvdW50ID0gMDsKKwlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKIH0KIAogLyoKQEAgLTIwNzEsMTEgKzIwNzIsMTEgQEAKIAkgKiB1bnRpbCBpdCdzIGRvbmUsIGFuZCB0aGVuIHRyeSBhZ2Fpbi4KIAkgKi8KIAlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAotCSAgICAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSkgewotCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKQotCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmaW5mby0+Y2xvc2Vfd2FpdCk7CisJICAgIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykpIHsKKwkJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKQorCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmaW5mby0+cG9ydC5jbG9zZV93YWl0KTsKICNpZmRlZiBTRVJJQUxfRE9fUkVTVEFSVAotCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQorCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJZWxzZQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKQEAgLTIwOTAsNyArMjA5MSw3IEBACiAJICovCiAJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKIAkgICAgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgewotCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjEwMCwyMCArMjEwMSwyMCBAQAogCS8qCiAJICogQmxvY2sgd2FpdGluZyBmb3IgdGhlIGNhcnJpZXIgZGV0ZWN0IGFuZCB0aGUgbGluZSB0byBiZWNvbWUKIAkgKiBmcmVlIChpLmUuLCBub3QgaW4gdXNlIGJ5IHRoZSBjYWxsb3V0KS4gIFdoaWxlIHdlIGFyZSBpbgotCSAqIHRoaXMgbG9vcCwgaW5mby0+Y291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKKwkgKiB0aGlzIGxvb3AsIGluZm8tPnBvcnQuY291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKIAkgKiByc19jbG9zZSgpIGtub3dzIHdoZW4gdG8gZnJlZSB0aGluZ3MuICBXZSByZXN0b3JlIGl0IHVwb24KIAkgKiBleGl0LCBlaXRoZXIgbm9ybWFsIG9yIGFibm9ybWFsLgogCSAqLwogCXJldHZhbCA9IDA7Ci0JYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCiAJcHJpbnRrKEtFUk5fREVCVUcgImJsb2NrX3RpbF9yZWFkeSBiZWZvcmUgYmxvY2s6IHR0eXMlZCwgY291bnQgPSAlZFxuIiwKLQkgICAgICAgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworCSAgICAgICBpbmZvLT5saW5lLCBpbmZvLT5wb3J0LmNvdW50KTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKQotCQlpbmZvLT5jb3VudC0tOwotCWluZm8tPmJsb2NrZWRfb3BlbisrOworCQlpbmZvLT5wb3J0LmNvdW50LS07CisJaW5mby0+cG9ydC5ibG9ja2VkX29wZW4rKzsKIAl3aGlsZSAoMSkgewogCQlpZiAoKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSkgewogCQkJdW5zaWduZWQgaW50IHNjcmF0Y2g7CkBAIC0yMTI4LDkgKzIxMjksOSBAQAogCQl9CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8Ci0JCSAgICAhKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7CisJCSAgICAhKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKICNpZmRlZiBTRVJJQUxfRE9fUkVTVEFSVAotCQkJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwkJCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKIAkJCQlyZXR2YWwgPSAtRUFHQUlOOwogCQkJZWxzZQogCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKQEAgLTIxNDQsNyArMjE0NSw3IEBACiAJCWlmIChzZXJpYWxfaW4oaW5mbywgVUFSVF9FU0lfU1RBVDIpICYgVUFSVF9NU1JfRENEKQogCQkJZG9fY2xvY2FsID0gMTsKIAotCQlpZiAoIShpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmCisJCWlmICghKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgogCQkgICAgKGRvX2Nsb2NhbCkpCiAJCQlicmVhazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC0yMTUzLDI1ICsyMTU0LDI1IEBACiAJCX0KICNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTgogCQlwcmludGsoS0VSTl9ERUJVRyAiYmxvY2tfdGlsX3JlYWR5IGJsb2NraW5nOiB0dHlzJWQsIGNvdW50ID0gJWRcbiIsCi0JCSAgICAgICBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7CisJCSAgICAgICBpbmZvLT5saW5lLCBpbmZvLT5wb3J0LmNvdW50KTsKICNlbmRpZgogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJCXNjaGVkdWxlKCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJaW5mby0+Y291bnQrKzsKLQlpbmZvLT5ibG9ja2VkX29wZW4tLTsKKwkJaW5mby0+cG9ydC5jb3VudCsrOworCWluZm8tPnBvcnQuYmxvY2tlZF9vcGVuLS07CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCiAJcHJpbnRrKEtFUk5fREVCVUcgImJsb2NrX3RpbF9yZWFkeSBhZnRlciBibG9ja2luZzogdHR5cyVkLCBjb3VudCA9ICVkXG4iLAotCSAgICAgICBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7CisJICAgICAgIGluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOwogI2VuZGlmCiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLQlpbmZvLT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIwNCwxMiArMjIwNSwxMiBAQAogCX0KIAogI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCi0JcHJpbnRrKEtFUk5fREVCVUcgImVzcF9vcGVuICVzLCBjb3VudCA9ICVkXG4iLCB0dHktPm5hbWUsIGluZm8tPmNvdW50KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZXNwX29wZW4gJXMsIGNvdW50ID0gJWRcbiIsIHR0eS0+bmFtZSwgaW5mby0+cG9ydC5jb3VudCk7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOwotCWluZm8tPmNvdW50Kys7CisJaW5mby0+cG9ydC5jb3VudCsrOwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBpbmZvOwotCWluZm8tPnR0eSA9IHR0eTsKKwlpbmZvLT5wb3J0LnR0eSA9IHR0eTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIApAQCAtMjI2Myw3ICsyMjY0LDcgQEAKIAlpbnQgcG9ydF9kZXRlY3RlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghcmVxdWVzdF9yZWdpb24oaW5mby0+cG9ydCwgUkVHSU9OX1NJWkUsICJlc3Agc2VyaWFsIikpCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbmZvLT5pb19wb3J0LCBSRUdJT05fU0laRSwgImVzcCBzZXJpYWwiKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOwpAQCAtMjMwMCw3ICsyMzAxLDcgQEAKIAkJfQogCX0KIAlpZiAoIXBvcnRfZGV0ZWN0ZWQpCi0JCXJlbGVhc2VfcmVnaW9uKGluZm8tPnBvcnQsIFJFR0lPTl9TSVpFKTsKKwkJcmVsZWFzZV9yZWdpb24oaW5mby0+aW9fcG9ydCwgUkVHSU9OX1NJWkUpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAocG9ydF9kZXRlY3RlZCk7CkBAIC0yNDE0LDcgKzI0MTUsNyBAQAogCW9mZnNldCA9IDA7CiAKIAlkbyB7Ci0JCWluZm8tPnBvcnQgPSBlc3BbaV0gKyBvZmZzZXQ7CisJCWluZm8tPmlvX3BvcnQgPSBlc3BbaV0gKyBvZmZzZXQ7CiAJCWluZm8tPmlycSA9IGlycVtpXTsKIAkJaW5mby0+bGluZSA9IChpICogOCkgKyAob2Zmc2V0IC8gOCk7CiAKQEAgLTI0MjUsOSArMjQyNiw5IEBACiAJCX0KIAogCQlpbmZvLT5jdXN0b21fZGl2aXNvciA9IChkaXZpc29yW2ldID4+IChvZmZzZXQgLyAyKSkgJiAweGY7Ci0JCWluZm8tPmZsYWdzID0gU1REX0NPTV9GTEFHUzsKKwkJaW5mby0+cG9ydC5mbGFncyA9IFNURF9DT01fRkxBR1M7CiAJCWlmIChpbmZvLT5jdXN0b21fZGl2aXNvcikKLQkJCWluZm8tPmZsYWdzIHw9IEFTWU5DX1NQRF9DVVNUOworCQkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19TUERfQ1VTVDsKIAkJaW5mby0+bWFnaWMgPSBFU1BfTUFHSUM7CiAJCWluZm8tPmNsb3NlX2RlbGF5ID0gNSpIWi8xMDsKIAkJaW5mby0+Y2xvc2luZ193YWl0ID0gMzAqSFo7CkBAIC0yNDM2LDEzICsyNDM3LDEzIEBACiAJCWluZm8tPmNvbmZpZy5mbG93X29mZiA9IGZsb3dfb2ZmOwogCQlpbmZvLT5jb25maWcucGlvX3RocmVzaG9sZCA9IHBpb190aHJlc2hvbGQ7CiAJCWluZm8tPm5leHRfcG9ydCA9IHBvcnRzOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jbG9zZV93YWl0KTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5wb3J0LmNsb3NlX3dhaXQpOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmJyZWFrX3dhaXQpOwogCQlwb3J0cyA9IGluZm87CiAJCXByaW50ayhLRVJOX0lORk8gInR0eVAlZCBhdCAweCUwNHggKGlycSA9ICVkKSBpcyBhbiBFU1AgIiwKLQkJCWluZm8tPmxpbmUsIGluZm8tPnBvcnQsIGluZm8tPmlycSk7CisJCQlpbmZvLT5saW5lLCBpbmZvLT5pb19wb3J0LCBpbmZvLT5pcnEpOwogCiAJCWlmIChpbmZvLT5saW5lICUgOCkgewogCQkJcHJpbnRrKCJzZWNvbmRhcnkgcG9ydFxuIik7CkBAIC0yNDk4LDggKzI0OTksOCBAQAogCXB1dF90dHlfZHJpdmVyKGVzcF9kcml2ZXIpOwogCiAJd2hpbGUgKHBvcnRzKSB7Ci0JCWlmIChwb3J0cy0+cG9ydCkKLQkJCXJlbGVhc2VfcmVnaW9uKHBvcnRzLT5wb3J0LCBSRUdJT05fU0laRSk7CisJCWlmIChwb3J0cy0+aW9fcG9ydCkKKwkJCXJlbGVhc2VfcmVnaW9uKHBvcnRzLT5pb19wb3J0LCBSRUdJT05fU0laRSk7CiAJCXRlbXBfYXN5bmMgPSBwb3J0cy0+bmV4dF9wb3J0OwogCQlrZnJlZShwb3J0cyk7CiAJCXBvcnRzID0gdGVtcF9hc3luYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jIGIvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKaW5kZXggMjUyZjczZS4uMTlkM2FmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAogCWlmICghcG9ydCkgcmV0dXJuIDA7CiAKLQlpZiAoISAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHJldHVybiAwOworCWlmICghIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSByZXR1cm4gMDsKIAogCS8qIFRha2UgYSBsb2NrIG9uIHRoZSBzZXJpYWwgdHJhbm1pdCBidWZmZXIhICovCiAJbXV0ZXhfbG9jaygmIHBvcnQtPnBvcnRfd3JpdGVfbXV0ZXgpOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAKIAlpZiAoIXBvcnQpIHJldHVybiAwOwogCi0JaWYgKCEgKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQorCWlmICghIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQogCQlyZXR1cm4gMDsKIAogCS8qIGdldCBleGNsdXNpdmUgIndyaXRlIiBhY2Nlc3MgdG8gdGhpcyBwb3J0IChwcm9ibGVtIDMpICovCkBAIC0xNDEsMTMgKzE0MSwxMyBAQAogCW11dGV4X3VubG9jaygmIHBvcnQtPnBvcnRfd3JpdGVfbXV0ZXgpOwogCiAJZ3NfZHByaW50ayAoR1NfREVCVUdfV1JJVEUsICJ3cml0ZTogaW50ZXJydXB0cyBhcmUgJXNcbiIsIAotCSAgICAgICAgICAgIChwb3J0LT5mbGFncyAmIEdTX1RYX0lOVEVOKT8iZW5hYmxlZCI6ICJkaXNhYmxlZCIpOyAKKwkgICAgICAgICAgICAocG9ydC0+cG9ydC5mbGFncyAmIEdTX1RYX0lOVEVOKT8iZW5hYmxlZCI6ICJkaXNhYmxlZCIpOwogCiAJaWYgKHBvcnQtPnhtaXRfY250ICYmIAogCSAgICAhdHR5LT5zdG9wcGVkICYmIAogCSAgICAhdHR5LT5od19zdG9wcGVkICYmCi0JICAgICEocG9ydC0+ZmxhZ3MgJiBHU19UWF9JTlRFTikpIHsKLQkJcG9ydC0+ZmxhZ3MgfD0gR1NfVFhfSU5URU47CisJICAgICEocG9ydC0+cG9ydC5mbGFncyAmIEdTX1RYX0lOVEVOKSkgeworCQlwb3J0LT5wb3J0LmZsYWdzIHw9IEdTX1RYX0lOVEVOOwogCQlwb3J0LT5yZC0+ZW5hYmxlX3R4X2ludGVycnVwdHMgKHBvcnQpOwogCX0KIAlmdW5jX2V4aXQgKCk7CkBAIC0yMDgsNyArMjA4LDcgQEAKIAlnc19kcHJpbnRrIChHU19ERUJVR19GTFVTSCwgInBvcnQ9JXAuXG4iLCBwb3J0KTsKIAlpZiAocG9ydCkgewogCQlnc19kcHJpbnRrIChHU19ERUJVR19GTFVTSCwgInhtaXRfY250PSV4LCB4bWl0X2J1Zj0lcCwgdHR5PSVwLlxuIiwgCi0JCXBvcnQtPnhtaXRfY250LCBwb3J0LT54bWl0X2J1ZiwgcG9ydC0+dHR5KTsKKwkJcG9ydC0+eG1pdF9jbnQsIHBvcnQtPnhtaXRfYnVmLCBwb3J0LT5wb3J0LnR0eSk7CiAJfQogCiAJaWYgKCFwb3J0IHx8IHBvcnQtPnhtaXRfY250IDwgMCB8fCAhcG9ydC0+eG1pdF9idWYpIHsKQEAgLTIxNyw3ICsyMTcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsgIC8qIFRoaXMgaXMgYW4gZXJyb3Igd2hpY2ggd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlLiAqLwogCX0KIAotCXJjaWIgPSBnc19yZWFsX2NoYXJzX2luX2J1ZmZlcihwb3J0LT50dHkpOworCXJjaWIgPSBnc19yZWFsX2NoYXJzX2luX2J1ZmZlcihwb3J0LT5wb3J0LnR0eSk7CiAKIAlpZihyY2liIDw9IDApIHsKIAkJZ3NfZHByaW50ayAoR1NfREVCVUdfRkxVU0gsICJub3RoaW5nIHRvIHdhaXQgZm9yLlxuIik7CkBAIC0yMzYsNyArMjM2LDcgQEAKIAogCS8qIHRoZSBleHByZXNzaW9uIGlzIGFjdHVhbGx5IGppZmZpZXMgPCBlbmRfamlmZmllcywgYnV0IHRoYXQgd29uJ3QKIAkgICB3b3JrIGFyb3VuZCB0aGUgd3JhcGFyb3VuZC4gVHJpY2t5IGVoPyAqLwotCXdoaWxlICgoY2hhcnNsZWZ0ID0gZ3NfcmVhbF9jaGFyc19pbl9idWZmZXIgKHBvcnQtPnR0eSkpICYmCisJd2hpbGUgKChjaGFyc2xlZnQgPSBnc19yZWFsX2NoYXJzX2luX2J1ZmZlciAocG9ydC0+cG9ydC50dHkpKSAmJgogCSAgICAgICAgdGltZV9hZnRlciAoZW5kX2ppZmZpZXMsIGppZmZpZXMpKSB7CiAJCS8qIFVuaXRzIGNoZWNrOiAKIAkJICAgY2hhcnMgKiAoYml0cy9jaGFyKSAqIChqaWZmaWVzIC9zZWMpIC8gKGJpdHMvc2VjKSA9IGppZmZpZXMhCkBAIC0zMDksNyArMzA5LDcgQEAKIAl9CiAKIAkvKiBCZWF0cyBtZSAtLSBSRVcgKi8KLQlwb3J0LT5mbGFncyB8PSBHU19UWF9JTlRFTjsKKwlwb3J0LT5wb3J0LmZsYWdzIHw9IEdTX1RYX0lOVEVOOwogCXBvcnQtPnJkLT5lbmFibGVfdHhfaW50ZXJydXB0cyAocG9ydCk7CiAJZnVuY19leGl0ICgpOwogfQpAQCAtMzI5LDggKzMyOSw4IEBACiAKIAlpZiAocG9ydC0+eG1pdF9jbnQgJiYgCiAJICAgIHBvcnQtPnhtaXRfYnVmICYmIAotCSAgICAocG9ydC0+ZmxhZ3MgJiBHU19UWF9JTlRFTikgKSB7Ci0JCXBvcnQtPmZsYWdzICY9IH5HU19UWF9JTlRFTjsKKwkgICAgKHBvcnQtPnBvcnQuZmxhZ3MgJiBHU19UWF9JTlRFTikgKSB7CisJCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfkdTX1RYX0lOVEVOOwogCQlwb3J0LT5yZC0+ZGlzYWJsZV90eF9pbnRlcnJ1cHRzIChwb3J0KTsKIAl9CiAJZnVuY19leGl0ICgpOwpAQCAtMzQ5LDggKzM0OSw4IEBACiAKIAlpZiAocG9ydC0+eG1pdF9jbnQgJiYgCiAJICAgIHBvcnQtPnhtaXRfYnVmICYmIAotCSAgICAhKHBvcnQtPmZsYWdzICYgR1NfVFhfSU5URU4pICkgewotCQlwb3J0LT5mbGFncyB8PSBHU19UWF9JTlRFTjsKKwkgICAgIShwb3J0LT5wb3J0LmZsYWdzICYgR1NfVFhfSU5URU4pICkgeworCQlwb3J0LT5wb3J0LmZsYWdzIHw9IEdTX1RYX0lOVEVOOwogCQlwb3J0LT5yZC0+ZW5hYmxlX3R4X2ludGVycnVwdHMgKHBvcnQpOwogCX0KIAlmdW5jX2V4aXQgKCk7CkBAIC0zNjUsNyArMzY1LDcgQEAKIAkKIAlpZiAoIXBvcnQpIHJldHVybjsKIAkKLQlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKKwlpZiAoIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKQEAgLTM3NSwxMiArMzc1LDEyIEBACiAJCXBvcnQtPnhtaXRfYnVmID0gTlVMTDsKIAl9CiAKLQlpZiAocG9ydC0+dHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnBvcnQtPnR0eS0+ZmxhZ3MpOworCWlmIChwb3J0LT5wb3J0LnR0eSkKKwkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZwb3J0LT5wb3J0LnR0eS0+ZmxhZ3MpOwogCiAJcG9ydC0+cmQtPnNodXRkb3duX3BvcnQgKHBvcnQpOwogCi0JcG9ydC0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOworCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAKIAlmdW5jX2V4aXQoKTsKQEAgLTM5NiwxNiArMzk2LDE2IEBACiAJaWYgKCF0dHkpIHJldHVybjsKIAogCXBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAoIXR0eSkgCiAJCXJldHVybjsKIAogCWdzX3NodXRkb3duX3BvcnQgKHBvcnQpOwotCXBvcnQtPmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRXxHU19BQ1RJVkUpOwotCXBvcnQtPnR0eSA9IE5VTEw7Ci0JcG9ydC0+Y291bnQgPSAwOworCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEdTX0FDVElWRSk7CisJcG9ydC0+cG9ydC50dHkgPSBOVUxMOworCXBvcnQtPnBvcnQuY291bnQgPSAwOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQpOwogCWZ1bmNfZXhpdCAoKTsKIH0KIApAQCAtNDI0LDcgKzQyNCw3IEBACiAKIAlpZiAoIXBvcnQpIHJldHVybiAwOwogCi0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCiAJaWYgKCF0dHkpIHJldHVybiAwOwogCkBAIC00MzMsOSArNDMzLDkgQEAKIAkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgY2xvc2VkLCB0aGVuIGJsb2NrCiAJICogdW50aWwgaXQncyBkb25lLCBhbmQgdGhlbiB0cnkgYWdhaW4uCiAJICovCi0JaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgcG9ydC0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB7Ci0JCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBvcnQtPmNsb3NlX3dhaXQpOwotCQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQorCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBvcnQtPnBvcnQuY2xvc2Vfd2FpdCk7CisJCWlmIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKIAkJCXJldHVybiAtRUFHQUlOOwogCQllbHNlCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJICovCiAJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKIAkgICAgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgewotCQlwb3J0LT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCQlwb3J0LT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDYxLDM0ICs0NjEsMzQgQEAKIAkvKgogCSAqIEJsb2NrIHdhaXRpbmcgZm9yIHRoZSBjYXJyaWVyIGRldGVjdCBhbmQgdGhlIGxpbmUgdG8gYmVjb21lCiAJICogZnJlZSAoaS5lLiwgbm90IGluIHVzZSBieSB0aGUgY2FsbG91dCkuICBXaGlsZSB3ZSBhcmUgaW4KLQkgKiB0aGlzIGxvb3AsIHBvcnQtPmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0CisJICogdGhpcyBsb29wLCBwb3J0LT5wb3J0LmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0CiAJICogcnNfY2xvc2UoKSBrbm93cyB3aGVuIHRvIGZyZWUgdGhpbmdzLiAgV2UgcmVzdG9yZSBpdCB1cG9uCiAJICogZXhpdCwgZWl0aGVyIG5vcm1hbCBvciBhYm5vcm1hbC4KIAkgKi8KIAlyZXR2YWwgPSAwOwogCi0JYWRkX3dhaXRfcXVldWUoJnBvcnQtPm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCiAJZ3NfZHByaW50ayAoR1NfREVCVUdfQlRSLCAiYWZ0ZXIgYWRkIHdhaXRxLlxuIik7IAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkgewotCQlwb3J0LT5jb3VudC0tOworCQlwb3J0LT5wb3J0LmNvdW50LS07CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0JcG9ydC0+YmxvY2tlZF9vcGVuKys7CisJcG9ydC0+cG9ydC5ibG9ja2VkX29wZW4rKzsKIAl3aGlsZSAoMSkgewogCQlDRCA9IHBvcnQtPnJkLT5nZXRfQ0QgKHBvcnQpOwogCQlnc19kcHJpbnRrIChHU19ERUJVR19CVFIsICJDRCBpcyBub3cgJWQuXG4iLCBDRCk7CiAJCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAotCQkgICAgIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewotCQkJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwkJICAgICEocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgeworCQkJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQogCQkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQllbHNlCiAJCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCEocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgorCQlpZiAoIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYKIAkJICAgIChkb19jbG9jYWwgfHwgQ0QpKQogCQkJYnJlYWs7CiAJCWdzX2RwcmludGsgKEdTX0RFQlVHX0JUUiwgInNpZ25hbF9wZW5kaW5nIGlzIG5vdzogJWQgKCVseClcbiIsIApAQCAtNTAwLDE3ICs1MDAsMTcgQEAKIAkJc2NoZWR1bGUoKTsKIAl9CiAJZ3NfZHByaW50ayAoR1NfREVCVUdfQlRSLCAiR290IG91dCBvZiB0aGUgbG9vcC4gKCVkKVxuIiwKLQkJICAgIHBvcnQtPmJsb2NrZWRfb3Blbik7CisJCSAgICBwb3J0LT5wb3J0LmJsb2NrZWRfb3Blbik7CiAJc2V0X2N1cnJlbnRfc3RhdGUgKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnBvcnQtPm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkgewotCQlwb3J0LT5jb3VudCsrOworCQlwb3J0LT5wb3J0LmNvdW50Kys7CiAJfQotCXBvcnQtPmJsb2NrZWRfb3Blbi0tOworCXBvcnQtPnBvcnQuYmxvY2tlZF9vcGVuLS07CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXBvcnQtPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CisJcG9ydC0+cG9ydC5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCWZ1bmNfZXhpdCAoKTsKIAlyZXR1cm4gMDsKIH0JCQkgCkBAIC01MjksMTAgKzUyOSwxMCBAQAogCiAJaWYgKCFwb3J0KSByZXR1cm47CiAKLQlpZiAoIXBvcnQtPnR0eSkgeworCWlmICghcG9ydC0+cG9ydC50dHkpIHsKIAkJLyogVGhpcyBzZWVtcyB0byBoYXBwZW4gd2hlbiB0aGlzIGlzIGNhbGxlZCBmcm9tIHZoYW5ndXAuICovCi0JCWdzX2RwcmludGsgKEdTX0RFQlVHX0NMT1NFLCAiZ3M6IE9kZDogcG9ydC0+dHR5IGlzIE5VTExcbiIpOwotCQlwb3J0LT50dHkgPSB0dHk7CisJCWdzX2RwcmludGsgKEdTX0RFQlVHX0NMT1NFLCAiZ3M6IE9kZDogcG9ydC0+cG9ydC50dHkgaXMgTlVMTFxuIik7CisJCXBvcnQtPnBvcnQudHR5ID0gdHR5OwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwpAQCAtNTQ1LDIzICs1NDUsMjMgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAocG9ydC0+Y291bnQgIT0gMSkpIHsKKwlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKHBvcnQtPnBvcnQuY291bnQgIT0gMSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJnczogZ3NfY2xvc2UgcG9ydCAlcDogYmFkIHBvcnQgY291bnQ7IgotCQkgICAgICAgIiB0dHktPmNvdW50IGlzIDEsIHBvcnQgY291bnQgaXMgJWRcbiIsIHBvcnQsIHBvcnQtPmNvdW50KTsKLQkJcG9ydC0+Y291bnQgPSAxOworCQkgICAgICAgIiB0dHktPmNvdW50IGlzIDEsIHBvcnQgY291bnQgaXMgJWRcbiIsIHBvcnQsIHBvcnQtPnBvcnQuY291bnQpOworCQlwb3J0LT5wb3J0LmNvdW50ID0gMTsKIAl9Ci0JaWYgKC0tcG9ydC0+Y291bnQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ3M6IGdzX2Nsb3NlIHBvcnQgJXA6IGJhZCBwb3J0IGNvdW50OiAlZFxuIiwgcG9ydCwgcG9ydC0+Y291bnQpOwotCQlwb3J0LT5jb3VudCA9IDA7CisJaWYgKC0tcG9ydC0+cG9ydC5jb3VudCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnczogZ3NfY2xvc2UgcG9ydCAlcDogYmFkIHBvcnQgY291bnQ6ICVkXG4iLCBwb3J0LCBwb3J0LT5wb3J0LmNvdW50KTsKKwkJcG9ydC0+cG9ydC5jb3VudCA9IDA7CiAJfQogCi0JaWYgKHBvcnQtPmNvdW50KSB7Ci0JCWdzX2RwcmludGsoR1NfREVCVUdfQ0xPU0UsICJnc19jbG9zZSBwb3J0ICVwOiBjb3VudDogJWRcbiIsIHBvcnQsIHBvcnQtPmNvdW50KTsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCkgeworCQlnc19kcHJpbnRrKEdTX0RFQlVHX0NMT1NFLCAiZ3NfY2xvc2UgcG9ydCAlcDogY291bnQ6ICVkXG4iLCBwb3J0LCBwb3J0LT5wb3J0LmNvdW50KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJZnVuY19leGl0ICgpOwogCQlyZXR1cm47CiAJfQotCXBvcnQtPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CisJcG9ydC0+cG9ydC5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOwogCiAJLyoKIAkgKiBOb3cgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0IGJ1ZmZlciB0byBjbGVhcjsgYW5kIHdlIG5vdGlmeSAKQEAgLTU4NSw3ICs1ODUsNyBAQAogCWlmIChwb3J0LT5jbG9zaW5nX3dhaXQgIT0gQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUpCiAJCWdzX3dhaXRfdHhfZmx1c2hlZCAocG9ydCwgcG9ydC0+Y2xvc2luZ193YWl0KTsKIAotCXBvcnQtPmZsYWdzICY9IH5HU19BQ1RJVkU7CisJcG9ydC0+cG9ydC5mbGFncyAmPSB+R1NfQUNUSVZFOwogCiAJZ3NfZmx1c2hfYnVmZmVyKHR0eSk7CiAKQEAgLTU5NSwxOCArNTk1LDE4IEBACiAJcG9ydC0+ZXZlbnQgPSAwOwogCXBvcnQtPnJkLT5jbG9zZSAocG9ydCk7CiAJcG9ydC0+cmQtPnNodXRkb3duX3BvcnQgKHBvcnQpOwotCXBvcnQtPnR0eSA9IE5VTEw7CisJcG9ydC0+cG9ydC50dHkgPSBOVUxMOwogCi0JaWYgKHBvcnQtPmJsb2NrZWRfb3BlbikgeworCWlmIChwb3J0LT5wb3J0LmJsb2NrZWRfb3BlbikgewogCQlpZiAocG9ydC0+Y2xvc2VfZGVsYXkpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKHBvcnQtPmNsb3NlX2RlbGF5KSk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJfQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQpOwogCX0KLQlwb3J0LT5mbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkV8QVNZTkNfQ0xPU0lORyB8IEFTWU5DX0lOSVRJQUxJWkVEKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmNsb3NlX3dhaXQpOworCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEFTWU5DX0NMT1NJTkcgfCBBU1lOQ19JTklUSUFMSVpFRCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0LmNsb3NlX3dhaXQpOwogCiAJZnVuY19leGl0ICgpOwogfQpAQCAtNjI2LDEwICs2MjYsMTAgQEAKIAlwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAogCWlmICghcG9ydCkgcmV0dXJuOwotCWlmICghcG9ydC0+dHR5KSB7CisJaWYgKCFwb3J0LT5wb3J0LnR0eSkgewogCQkvKiBUaGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuIHRoaXMgaXMgY2FsbGVkIGFmdGVyIGdzX2Nsb3NlLiAqLwotCQlnc19kcHJpbnRrIChHU19ERUJVR19URVJNSU9TLCAiZ3M6IE9kZDogcG9ydC0+dHR5IGlzIE5VTExcbiIpOwotCQlwb3J0LT50dHkgPSB0dHk7CisJCWdzX2RwcmludGsgKEdTX0RFQlVHX1RFUk1JT1MsICJnczogT2RkOiBwb3J0LT5wb3J0LnR0eSBpcyBOVUxMXG4iKTsKKwkJcG9ydC0+cG9ydC50dHkgPSB0dHk7CiAJfQogCiAKQEAgLTY1MSwxNSArNjUxLDE1IEBACiAJYmF1ZHJhdGUgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCiAJaWYgKCh0aW9zcC0+Y19jZmxhZyAmIENCQVVEKSA9PSBCMzg0MDApIHsKLQkJaWYgKCAgICAgKHBvcnQtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKKwkJaWYgKCAgICAgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0hJKQogCQkJYmF1ZHJhdGUgPSA1NzYwMDsKLQkJZWxzZSBpZiAoKHBvcnQtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCisJCWVsc2UgaWYgKChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCiAJCQliYXVkcmF0ZSA9IDExNTIwMDsKLQkJZWxzZSBpZiAoKHBvcnQtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9TSEkpCisJCWVsc2UgaWYgKChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9TSEkpCiAJCQliYXVkcmF0ZSA9IDIzMDQwMDsKLQkJZWxzZSBpZiAoKHBvcnQtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9XQVJQKQorCQllbHNlIGlmICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKIAkJCWJhdWRyYXRlID0gNDYwODAwOwotCQllbHNlIGlmICgocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpCisJCWVsc2UgaWYgKChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9DVVNUKQogCQkJYmF1ZHJhdGUgPSAocG9ydC0+YmF1ZF9iYXNlIC8gcG9ydC0+Y3VzdG9tX2Rpdmlzb3IpOwogCX0KIApAQCAtNzE1LDcgKzcxNSw3IEBACiAKIAlmdW5jX2VudGVyICgpOwogCi0JaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKKwlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCWZ1bmNfZXhpdCAoKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzM3LDE1ICs3MzcsMTUgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJnBvcnQtPmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0JaWYgKHBvcnQtPnR0eSkgCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZwb3J0LT50dHktPmZsYWdzKTsKKwlpZiAocG9ydC0+cG9ydC50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZwb3J0LT5wb3J0LnR0eS0+ZmxhZ3MpOwogCW11dGV4X2luaXQoJnBvcnQtPnBvcnRfd3JpdGVfbXV0ZXgpOwogCXBvcnQtPnhtaXRfY250ID0gcG9ydC0+eG1pdF9oZWFkID0gcG9ydC0+eG1pdF90YWlsID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwotCWdzX3NldF90ZXJtaW9zKHBvcnQtPnR0eSwgTlVMTCk7CisJZ3Nfc2V0X3Rlcm1pb3MocG9ydC0+cG9ydC50dHksIE5VTEwpOwogCXNwaW5fbG9ja19pcnFzYXZlICgmcG9ydC0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQlwb3J0LT5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKLQlwb3J0LT5mbGFncyAmPSB+R1NfVFhfSU5URU47CisJcG9ydC0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKKwlwb3J0LT5wb3J0LmZsYWdzICY9IH5HU19UWF9JTlRFTjsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJZnVuY19leGl0ICgpOwpAQCAtNzY0LDExICs3NjQsMTEgQEAKIAkJaWYgKChzaW8uYmF1ZF9iYXNlICE9IHBvcnQtPmJhdWRfYmFzZSkgfHwKIAkJICAgIChzaW8uY2xvc2VfZGVsYXkgIT0gcG9ydC0+Y2xvc2VfZGVsYXkpIHx8CiAJCSAgICAoKHNpby5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgIT0KLQkJICAgICAocG9ydC0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spKSkKKwkJICAgICAocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQogCQkJcmV0dXJuKC1FUEVSTSk7CiAJfSAKIAotCXBvcnQtPmZsYWdzID0gKHBvcnQtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CisJcG9ydC0+cG9ydC5mbGFncyA9IChwb3J0LT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CiAJCShzaW8uZmxhZ3MgJiBBU1lOQ19VU1JfTUFTSyk7CiAgIAogCXBvcnQtPmJhdWRfYmFzZSA9IHNpby5iYXVkX2Jhc2U7CkBAIC03NzYsNyArNzc2LDcgQEAKIAlwb3J0LT5jbG9zaW5nX3dhaXQgPSBzaW8uY2xvc2luZ193YWl0OwogCXBvcnQtPmN1c3RvbV9kaXZpc29yID0gc2lvLmN1c3RvbV9kaXZpc29yOwogCi0JZ3Nfc2V0X3Rlcm1pb3MgKHBvcnQtPnR0eSwgTlVMTCk7CisJZ3Nfc2V0X3Rlcm1pb3MgKHBvcnQtPnBvcnQudHR5LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzkzLDcgKzc5Myw3IEBACiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgICAgc2lvOwogCiAJbWVtc2V0KCZzaW8sIDAsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkpOwotCXNpby5mbGFncyA9IHBvcnQtPmZsYWdzOworCXNpby5mbGFncyA9IHBvcnQtPnBvcnQuZmxhZ3M7CiAJc2lvLmJhdWRfYmFzZSA9IHBvcnQtPmJhdWRfYmFzZTsKIAlzaW8uY2xvc2VfZGVsYXkgPSBwb3J0LT5jbG9zZV9kZWxheTsKIAlzaW8uY2xvc2luZ193YWl0ID0gcG9ydC0+Y2xvc2luZ193YWl0OwpAQCAtODIxLDEwICs4MjEsMTAgQEAKIHsKIAlmdW5jX2VudGVyICgpOwogCi0JdHR5X2luc2VydF9mbGlwX2NoYXIocG9ydC0+dHR5LCAwLCBUVFlfQlJFQUspOwotCXR0eV9zY2hlZHVsZV9mbGlwKHBvcnQtPnR0eSk7Ci0JaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfU0FLKSB7Ci0JCWRvX1NBSyAocG9ydC0+dHR5KTsKKwl0dHlfaW5zZXJ0X2ZsaXBfY2hhcihwb3J0LT5wb3J0LnR0eSwgMCwgVFRZX0JSRUFLKTsKKwl0dHlfc2NoZWR1bGVfZmxpcChwb3J0LT5wb3J0LnR0eSk7CisJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TQUspIHsKKwkJZG9fU0FLIChwb3J0LT5wb3J0LnR0eSk7CiAJfQogCiAJZnVuY19leGl0ICgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IGVmZDBiNGQuLjg4MjJlY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTU5LDYgKzU5LDE5IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBIV19SQU5ET01fTjJSTkcKKwl0cmlzdGF0ZSAiTmlhZ2FyYTIgUmFuZG9tIE51bWJlciBHZW5lcmF0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhXX1JBTkRPTSAmJiBTUEFSQzY0CisJZGVmYXVsdCBIV19SQU5ET00KKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwtc2lkZSBzdXBwb3J0IGZvciB0aGUgUmFuZG9tIE51bWJlcgorCSAgR2VuZXJhdG9yIGhhcmR3YXJlIGZvdW5kIG9uIE5pYWdhcmEyIGNwdXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG4yLXJuZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIEhXX1JBTkRPTV9WSUEKIAl0cmlzdGF0ZSAiVklBIEhXIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBIV19SQU5ET00gJiYgWDg2XzMyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQppbmRleCBiNDk0MGRkLi5iNmVmZmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKQEAgLTcsNiArNyw4IEBACiBvYmotJChDT05GSUdfSFdfUkFORE9NX0lOVEVMKSArPSBpbnRlbC1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9BTUQpICs9IGFtZC1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9HRU9ERSkgKz0gZ2VvZGUtcm5nLm8KK29iai0kKENPTkZJR19IV19SQU5ET01fTjJSTkcpICs9IG4yLXJuZy5vCituMi1ybmcteSA6PSBuMi1kcnYubyBuMi1hc20ubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9WSUEpICs9IHZpYS1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9JWFA0WFgpICs9IGl4cDR4eC1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9PTUFQKSArPSBvbWFwLXJuZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24yLWFzbS5TIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjZlYjVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1hc20uUwpAQCAtMCwwICsxLDc5IEBACisvKiBuMi1hc20uUzogTmlhZ2FyYTIgUk5HIGh5cGVydmlzb3IgY2FsbCBhc3NlbWJsZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgIm4ycm5nLmgiCisKKwkudGV4dAorCitFTlRSWShzdW40dl9ybmdfZ2V0X2RpYWdfY3RsKQorCW1vdglIVl9GQVNUX1JOR19HRVRfRElBR19DVEwsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgbm9wCitFTkRQUk9DKHN1bjR2X3JuZ19nZXRfZGlhZ19jdGwpCisKK0VOVFJZKHN1bjR2X3JuZ19jdGxfcmVhZF92MSkKKwltb3YJJW8xLCAlbzMKKwltb3YJJW8yLCAlbzQKKwltb3YJSFZfRkFTVF9STkdfQ1RMX1JFQUQsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslbzNdCisJcmV0bAorCSBzdHgJJW8yLCBbJW80XQorRU5EUFJPQyhzdW40dl9ybmdfY3RsX3JlYWRfdjEpCisKK0VOVFJZKHN1bjR2X3JuZ19jdGxfcmVhZF92MikKKwlzYXZlCSVzcCwgLTE5MiwgJXNwCisJbW92CSVpMCwgJW8wCisJbW92CSVpMSwgJW8xCisJbW92CUhWX0ZBU1RfUk5HX0NUTF9SRUFELCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlzdHgJJW8xLCBbJWkyXQorCXN0eAklbzIsIFslaTNdCisJc3R4CSVvMywgWyVpNF0KKwlzdHgJJW80LCBbJWk1XQorCXJldAorCXJlc3RvcmUJJWcwLCAlbzAsICVvMAorRU5EUFJPQyhzdW40dl9ybmdfY3RsX3JlYWRfdjIpCisKK0VOVFJZKHN1bjR2X3JuZ19jdGxfd3JpdGVfdjEpCisJbW92CSVvMywgJW80CisJbW92CUhWX0ZBU1RfUk5HX0NUTF9XUklURSwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBzdHgJJW8xLCBbJW80XQorRU5EUFJPQyhzdW40dl9ybmdfY3RsX3dyaXRlX3YxKQorCitFTlRSWShzdW40dl9ybmdfY3RsX3dyaXRlX3YyKQorCW1vdglIVl9GQVNUX1JOR19DVExfV1JJVEUsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgbm9wCitFTkRQUk9DKHN1bjR2X3JuZ19jdGxfd3JpdGVfdjIpCisKK0VOVFJZKHN1bjR2X3JuZ19kYXRhX3JlYWRfZGlhZ192MSkKKwltb3YJJW8yLCAlbzQKKwltb3YJSFZfRkFTVF9STkdfREFUQV9SRUFEX0RJQUcsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgc3R4CSVvMSwgWyVvNF0KK0VORFBST0Moc3VuNHZfcm5nX2RhdGFfcmVhZF9kaWFnX3YxKQorCitFTlRSWShzdW40dl9ybmdfZGF0YV9yZWFkX2RpYWdfdjIpCisJbW92CSVvMywgJW80CisJbW92CUhWX0ZBU1RfUk5HX0RBVEFfUkVBRF9ESUFHLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIHN0eAklbzEsIFslbzRdCitFTkRQUk9DKHN1bjR2X3JuZ19kYXRhX3JlYWRfZGlhZ192MikKKworRU5UUlkoc3VuNHZfcm5nX2RhdGFfcmVhZCkKKwltb3YJJW8xLCAlbzQKKwltb3YJSFZfRkFTVF9STkdfREFUQV9SRUFELCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIHN0eAklbzEsIFslbzRdCitFTkRQUk9DKHN1bjR2X3JuZ19kYXRhX3JlYWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24yLWRydi5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjIwZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1kcnYuYwpAQCAtMCwwICsxLDc3MSBAQAorLyogbjItZHJ2LmM6IE5pYWdhcmEtMiBSTkcgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9od19yYW5kb20uaD4KKworI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorCisjaW5jbHVkZSAibjJybmcuaCIKKworI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJuMnJuZyIKKyNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMC4xIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1heSAxNSwgMjAwOCIKKworc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorCURSVl9NT0RVTEVfTkFNRSAiLmM6diIgRFJWX01PRFVMRV9WRVJTSU9OICIgKCIgRFJWX01PRFVMRV9SRUxEQVRFICIpXG4iOworCitNT0RVTEVfQVVUSE9SKCJEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5pYWdhcmEyIFJORyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9NT0RVTEVfVkVSU0lPTik7CisKKy8qIFRoZSBOaWFnYXJhMiBSTkcgcHJvdmlkZXMgYSA2NC1iaXQgcmVhZC1vbmx5IHJhbmRvbSBudW1iZXIKKyAqIHJlZ2lzdGVyLCBwbHVzIGEgY29udHJvbCByZWdpc3Rlci4gIEFjY2VzcyB0byB0aGUgUk5HIGlzCisgKiB2aXJ0dWFsaXplZCB0aHJvdWdoIHRoZSBoeXBlcnZpc29yIHNvIHRoYXQgYm90aCBndWVzdHMgYW5kIGNvbnRyb2wKKyAqIG5vZGVzIGNhbiBhY2Nlc3MgdGhlIGRldmljZS4KKyAqCisgKiBUaGUgZW50cm9weSBzb3VyY2UgY29uc2lzdHMgb2YgcmF3IGVudHJvcHkgc291cmNlcywgZWFjaAorICogY29uc3RydWN0ZWQgZnJvbSBhIHZvbHRhZ2UgY29udHJvbGxlZCBvc2NpbGxhdG9yIHdob3NlIHBoYXNlIGlzCisgKiBqaXR0ZXJlZCBieSB0aGVybWFsIG5vaXNlIHNvdXJjZXMuCisgKgorICogVGhlIG9zY2lsbGF0b3IgaW4gZWFjaCBvZiB0aGUgdGhyZWUgcmF3IGVudHJvcHkgc291cmNlcyBydW4gYXQKKyAqIGRpZmZlcmVudCBmcmVxdWVuY2llcy4gIE5vcm1hbGx5LCBhbGwgdGhyZWUgZ2VuZXJhdG9yIG91dHB1dHMgYXJlCisgKiBnYXRoZXJlZCwgeG9yZWQgdG9nZXRoZXIsIGFuZCBmZWQgaW50byBhIENSQyBjaXJjdWl0LCB0aGUgb3V0cHV0IG9mCisgKiB3aGljaCBpcyB0aGUgNjQtYml0IHJlYWQtb25seSByZWdpc3Rlci4KKyAqCisgKiBTb21lIHRpbWUgaXMgbmVjZXNzYXJ5IGZvciBhbGwgdGhlIG5lY2Vzc2FyeSBlbnRyb3B5IHRvIGJ1aWxkIHVwCisgKiBzdWNoIHRoYXQgYSBmdWxsIDY0LWJpdHMgb2YgZW50cm9weSBhcmUgYXZhaWxhYmxlIGluIHRoZSByZWdpc3Rlci4KKyAqIEluIG5vcm1hbCBvcGVyYXRpbmcgbW9kZSAoUk5HX0NUTF9MRlNSIGlzIHNldCksIHRoZSBjaGlwIGltcGxlbWVudHMKKyAqIGFuIGludGVybG9jayB3aGljaCBibG9ja3MgcmVnaXN0ZXIgcmVhZHMgdW50aWwgc3VmZmljaWVudCBlbnRyb3B5CisgKiBpcyBhdmFpbGFibGUuCisgKgorICogQSBjb250cm9sIHJlZ2lzdGVyIGlzIHByb3ZpZGVkIGZvciBhZGp1c3RpbmcgdmFyaW91cyBhc3BlY3RzIG9mIFJORworICogb3BlcmF0aW9uLCBhbmQgdG8gZW5hYmxlIGRpYWdub3N0aWMgbW9kZXMuICBFYWNoIG9mIHRoZSB0aHJlZSByYXcKKyAqIGVudHJvcHkgc291cmNlcyBoYXMgYW4gZW5hYmxlIGJpdCAoUk5HX0NUTF9FU3sxLDIsM30pLiAgQWxzbworICogcHJvdmlkZWQgYXJlIGZpZWxkcyBmb3IgY29udHJvbGxpbmcgdGhlIG1pbmltdW0gdGltZSBpbiBjeWNsZXMKKyAqIGJldHdlZW4gcmVhZCBhY2Nlc3NlcyB0byB0aGUgcmVnaXN0ZXIgKFJOR19DVExfV0FJVCwgdGhpcyBjb250cm9scworICogdGhlIGludGVybG9jayBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaCkuCisgKgorICogVGhlIHN0YW5kYXJkIHNldHRpbmcgaXMgdG8gaGF2ZSB0aGUgbW9kZSBiaXQgKFJOR19DVExfTEZTUikgc2V0LAorICogYWxsIHRocmVlIGVudHJvcHkgc291cmNlcyBlbmFibGVkLCBhbmQgdGhlIGludGVybG9jayB0aW1lIHNldAorICogYXBwcm9wcmlhdGVseS4KKyAqCisgKiBUaGUgQ1JDIHBvbHlub21pYWwgdXNlZCBieSB0aGUgY2hpcCBpczoKKyAqCisgKiBQKFgpID0geDY0ICsgeDYxICsgeDU3ICsgeDU2ICsgeDUyICsgeDUxICsgeDUwICsgeDQ4ICsgeDQ3ICsgeDQ2ICsKKyAqICAgICAgICB4NDMgKyB4NDIgKyB4NDEgKyB4MzkgKyB4MzggKyB4MzcgKyB4MzUgKyB4MzIgKyB4MjggKyB4MjUgKworICogICAgICAgIHgyMiArIHgyMSArIHgxNyArIHgxNSArIHgxMyArIHgxMiArIHgxMSArIHg3ICsgeDUgKyB4ICsgMQorICoKKyAqIFRoZSBSTkdfQ1RMX1ZDTyB2YWx1ZSBvZiBlYWNoIG5vaXNlIGNlbGwgbXVzdCBiZSBwcm9ncmFtbWVkCisgKiBzZXBlcmF0ZWx5LiAgVGhpcyBpcyB3aHkgNCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcyBtdXN0IGJlIHByb3ZpZGVkCisgKiB0byB0aGUgaHlwZXJ2aXNvci4gIER1cmluZyBhIHdyaXRlLCB0aGUgaHlwZXJ2aXNvciB3cml0ZXMgdGhlbSBhbGwsCisgKiBvbmUgYXQgYSB0aW1lLCB0byB0aGUgYWN0dWFsIFJOR19DVEwgcmVnaXN0ZXIuICBUaGUgZmlyc3QgdGhyZWUKKyAqIHZhbHVlcyBhcmUgdXNlZCB0byBzZXR1cCB0aGUgZGVzaXJlZCBSTkdfQ1RMX1ZDTyBmb3IgZWFjaCBlbnRyb3B5CisgKiBzb3VyY2UsIGZvciBleGFtcGxlOgorICoKKyAqCWNvbnRyb2wgMDogKDEgPDwgUk5HX0NUTF9WQ09fU0hJRlQpIHwgUk5HX0NUTF9FUzEKKyAqCWNvbnRyb2wgMTogKDIgPDwgUk5HX0NUTF9WQ09fU0hJRlQpIHwgUk5HX0NUTF9FUzIKKyAqCWNvbnRyb2wgMjogKDMgPDwgUk5HX0NUTF9WQ09fU0hJRlQpIHwgUk5HX0NUTF9FUzMKKyAqCisgKiBBbmQgdGhlbiB0aGUgZm91cnRoIHZhbHVlIHNldHMgdGhlIGZpbmFsIGNoaXAgc3RhdGUgYW5kIGVuYWJsZXMKKyAqIGRlc2lyZWQuCisgKi8KKworc3RhdGljIGludCBuMnJuZ19odl9lcnJfdHJhbnModW5zaWduZWQgbG9uZyBodl9lcnIpCit7CisJc3dpdGNoIChodl9lcnIpIHsKKwljYXNlIEhWX0VPSzoKKwkJcmV0dXJuIDA7CisJY2FzZSBIVl9FV09VTERCTE9DSzoKKwkJcmV0dXJuIC1FQUdBSU47CisJY2FzZSBIVl9FTk9BQ0NFU1M6CisJCXJldHVybiAtRVBFUk07CisJY2FzZSBIVl9FSU86CisJCXJldHVybiAtRUlPOworCWNhc2UgSFZfRUJVU1k6CisJCXJldHVybiAtRUJVU1k7CisJY2FzZSBIVl9FQkFEQUxJR046CisJY2FzZSBIVl9FTk9SQUREUjoKKwkJcmV0dXJuIC1FRkFVTFQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuMnJuZ19nZW5lcmljX3JlYWRfY29udHJvbF92Mih1bnNpZ25lZCBsb25nIHJhLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyB1bml0KQoreworCXVuc2lnbmVkIGxvbmcgaHZfZXJyLCBzdGF0ZSwgdGlja3MsIHdhdGNoZG9nX2RlbHRhLCB3YXRjaGRvZ19zdGF0dXM7CisJaW50IGJsb2NrID0gMCwgYnVzeSA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlodl9lcnIgPSBzdW40dl9ybmdfY3RsX3JlYWRfdjIocmEsIHVuaXQsICZzdGF0ZSwKKwkJCQkJICAgICAgICZ0aWNrcywKKwkJCQkJICAgICAgICZ3YXRjaGRvZ19kZWx0YSwKKwkJCQkJICAgICAgICZ3YXRjaGRvZ19zdGF0dXMpOworCQlpZiAoaHZfZXJyID09IEhWX0VPSykKKwkJCWJyZWFrOworCisJCWlmIChodl9lcnIgPT0gSFZfRUJVU1kpIHsKKwkJCWlmICgrK2J1c3kgPj0gTjJSTkdfQlVTWV9MSU1JVCkKKwkJCQlicmVhazsKKworCQkJdWRlbGF5KDEpOworCQl9IGVsc2UgaWYgKGh2X2VyciA9PSBIVl9FV09VTERCTE9DSykgeworCQkJaWYgKCsrYmxvY2sgPj0gTjJSTkdfQkxPQ0tfTElNSVQpCisJCQkJYnJlYWs7CisKKwkJCV9fZGVsYXkodGlja3MpOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBodl9lcnI7Cit9CisKKy8qIEluIG11bHRpLXNvY2tldCBzaXR1YXRpb25zLCB0aGUgaHlwZXJ2aXNvciBtaWdodCBuZWVkIHRvCisgKiBxdWV1ZSB1cCB0aGUgUk5HIGNvbnRyb2wgcmVnaXN0ZXIgd3JpdGUgaWYgaXQncyBmb3IgYSB1bml0CisgKiB0aGF0IGlzIG9uIGEgY3B1IHNvY2tldCBvdGhlciB0aGFuIHRoZSBvbmUgd2UgYXJlIGV4ZWN1dGluZyBvbi4KKyAqCisgKiBXZSBwb2xsIGhlcmUgd2FpdGluZyBmb3IgYSBzdWNjZXNzZnVsIHJlYWQgb2YgdGhhdCBjb250cm9sCisgKiByZWdpc3RlciB0byBtYWtlIHN1cmUgdGhlIHdyaXRlIGhhcyBiZWVuIGFjdHVhbGx5IHBlcmZvcm1lZC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbjJybmdfY29udHJvbF9zZXR0bGVfdjIoc3RydWN0IG4ycm5nICpucCwgaW50IHVuaXQpCit7CisJdW5zaWduZWQgbG9uZyByYSA9IF9fcGEoJm5wLT5zY3JhdGNoX2NvbnRyb2xbMF0pOworCisJcmV0dXJuIG4ycm5nX2dlbmVyaWNfcmVhZF9jb250cm9sX3YyKHJhLCB1bml0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbjJybmdfd3JpdGVfY3RsX29uZShzdHJ1Y3QgbjJybmcgKm5wLCBpbnQgdW5pdCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgc3RhdGUsCisJCQkJCSB1bnNpZ25lZCBsb25nIGNvbnRyb2xfcmEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHdhdGNoZG9nX3RpbWVvdXQsCisJCQkJCSB1bnNpZ25lZCBsb25nICp0aWNrcykKK3sKKwl1bnNpZ25lZCBsb25nIGh2X2VycjsKKworCWlmIChucC0+aHZhcGlfbWFqb3IgPT0gMSkgeworCQlodl9lcnIgPSBzdW40dl9ybmdfY3RsX3dyaXRlX3YxKGNvbnRyb2xfcmEsIHN0YXRlLAorCQkJCQkJd2F0Y2hkb2dfdGltZW91dCwgdGlja3MpOworCX0gZWxzZSB7CisJCWh2X2VyciA9IHN1bjR2X3JuZ19jdGxfd3JpdGVfdjIoY29udHJvbF9yYSwgc3RhdGUsCisJCQkJCQl3YXRjaGRvZ190aW1lb3V0LCB1bml0KTsKKwkJaWYgKGh2X2VyciA9PSBIVl9FT0spCisJCQlodl9lcnIgPSBuMnJuZ19jb250cm9sX3NldHRsZV92MihucCwgdW5pdCk7CisJCSp0aWNrcyA9IE4yUk5HX0FDQ1VNX0NZQ0xFU19ERUZBVUxUOworCX0KKworCXJldHVybiBodl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgbjJybmdfZ2VuZXJpY19yZWFkX2RhdGEodW5zaWduZWQgbG9uZyBkYXRhX3JhKQoreworCXVuc2lnbmVkIGxvbmcgdGlja3MsIGh2X2VycjsKKwlpbnQgYmxvY2sgPSAwLCBoY2hlY2sgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaHZfZXJyID0gc3VuNHZfcm5nX2RhdGFfcmVhZChkYXRhX3JhLCAmdGlja3MpOworCQlpZiAoaHZfZXJyID09IEhWX0VPSykKKwkJCXJldHVybiAwOworCisJCWlmIChodl9lcnIgPT0gSFZfRVdPVUxEQkxPQ0spIHsKKwkJCWlmICgrK2Jsb2NrID49IE4yUk5HX0JMT0NLX0xJTUlUKQorCQkJCXJldHVybiAtRVdPVUxEQkxPQ0s7CisJCQlfX2RlbGF5KHRpY2tzKTsKKwkJfSBlbHNlIGlmIChodl9lcnIgPT0gSFZfRU5PQUNDRVNTKSB7CisJCQlyZXR1cm4gLUVQRVJNOworCQl9IGVsc2UgaWYgKGh2X2VyciA9PSBIVl9FSU8pIHsKKwkJCWlmICgrK2hjaGVjayA+PSBOMlJOR19IQ0hFQ0tfTElNSVQpCisJCQkJcmV0dXJuIC1FSU87CisJCQl1ZGVsYXkoMTAwMDApOworCQl9IGVsc2UKKwkJCXJldHVybiAtRU5PREVWOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbjJybmdfcmVhZF9kaWFnX2RhdGFfb25lKHN0cnVjdCBuMnJuZyAqbnAsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdW5pdCwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhX3JhLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICp0aWNrcykKK3sKKwl1bnNpZ25lZCBsb25nIGh2X2VycjsKKworCWlmIChucC0+aHZhcGlfbWFqb3IgPT0gMSkgeworCQlodl9lcnIgPSBzdW40dl9ybmdfZGF0YV9yZWFkX2RpYWdfdjEoZGF0YV9yYSwgZGF0YV9sZW4sIHRpY2tzKTsKKwl9IGVsc2UgeworCQlodl9lcnIgPSBzdW40dl9ybmdfZGF0YV9yZWFkX2RpYWdfdjIoZGF0YV9yYSwgZGF0YV9sZW4sCisJCQkJCQkgICAgIHVuaXQsIHRpY2tzKTsKKwkJaWYgKCEqdGlja3MpCisJCQkqdGlja3MgPSBOMlJOR19BQ0NVTV9DWUNMRVNfREVGQVVMVDsKKwl9CisJcmV0dXJuIGh2X2VycjsKK30KKworc3RhdGljIGludCBuMnJuZ19nZW5lcmljX3JlYWRfZGlhZ19kYXRhKHN0cnVjdCBuMnJuZyAqbnAsCisJCQkJCXVuc2lnbmVkIGxvbmcgdW5pdCwKKwkJCQkJdW5zaWduZWQgbG9uZyBkYXRhX3JhLAorCQkJCQl1bnNpZ25lZCBsb25nIGRhdGFfbGVuKQoreworCXVuc2lnbmVkIGxvbmcgdGlja3MsIGh2X2VycjsKKwlpbnQgYmxvY2sgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaHZfZXJyID0gbjJybmdfcmVhZF9kaWFnX2RhdGFfb25lKG5wLCB1bml0LAorCQkJCQkJICBkYXRhX3JhLCBkYXRhX2xlbiwKKwkJCQkJCSAgJnRpY2tzKTsKKwkJaWYgKGh2X2VyciA9PSBIVl9FT0spCisJCQlyZXR1cm4gMDsKKworCQlpZiAoaHZfZXJyID09IEhWX0VXT1VMREJMT0NLKSB7CisJCQlpZiAoKytibG9jayA+PSBOMlJOR19CTE9DS19MSU1JVCkKKwkJCQlyZXR1cm4gLUVXT1VMREJMT0NLOworCQkJX19kZWxheSh0aWNrcyk7CisJCX0gZWxzZSBpZiAoaHZfZXJyID09IEhWX0VOT0FDQ0VTUykgeworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfSBlbHNlIGlmIChodl9lcnIgPT0gSFZfRUlPKSB7CisJCQlyZXR1cm4gLUVJTzsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9Cit9CisKKworc3RhdGljIGludCBuMnJuZ19nZW5lcmljX3dyaXRlX2NvbnRyb2woc3RydWN0IG4ycm5nICpucCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjb250cm9sX3JhLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVuaXQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyBodl9lcnIsIHRpY2tzOworCWludCBibG9jayA9IDAsIGJ1c3kgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaHZfZXJyID0gbjJybmdfd3JpdGVfY3RsX29uZShucCwgdW5pdCwgc3RhdGUsIGNvbnRyb2xfcmEsCisJCQkJCSAgICAgbnAtPndkX3RpbWVvLCAmdGlja3MpOworCQlpZiAoaHZfZXJyID09IEhWX0VPSykKKwkJCXJldHVybiAwOworCisJCWlmIChodl9lcnIgPT0gSFZfRVdPVUxEQkxPQ0spIHsKKwkJCWlmICgrK2Jsb2NrID49IE4yUk5HX0JMT0NLX0xJTUlUKQorCQkJCXJldHVybiAtRVdPVUxEQkxPQ0s7CisJCQlfX2RlbGF5KHRpY2tzKTsKKwkJfSBlbHNlIGlmIChodl9lcnIgPT0gSFZfRUJVU1kpIHsKKwkJCWlmICgrK2J1c3kgPj0gTjJSTkdfQlVTWV9MSU1JVCkKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJdWRlbGF5KDEpOworCQl9IGVsc2UKKwkJCXJldHVybiAtRU5PREVWOworCX0KK30KKworLyogSnVzdCB0cnkgdG8gc2VlIGlmIHdlIGNhbiBzdWNjZXNzZnVsbHkgYWNjZXNzIHRoZSBjb250cm9sIHJlZ2lzdGVyCisgKiBvZiB0aGUgUk5HIG9uIHRoZSBkb21haW4gb24gd2hpY2ggd2UgYXJlIGN1cnJlbnRseSBleGVjdXRpbmcuCisgKi8KK3N0YXRpYyBpbnQgbjJybmdfdHJ5X3JlYWRfY3RsKHN0cnVjdCBuMnJuZyAqbnApCit7CisJdW5zaWduZWQgbG9uZyBodl9lcnI7CisJdW5zaWduZWQgbG9uZyB4OworCisJaWYgKG5wLT5odmFwaV9tYWpvciA9PSAxKSB7CisJCWh2X2VyciA9IHN1bjR2X3JuZ19nZXRfZGlhZ19jdGwoKTsKKwl9IGVsc2UgeworCQkvKiBXZSBwdXJwb3NlZnVsbHkgZ2l2ZSBpbnZhbGlkIGFyZ3VtZW50cywgSFZfTk9BQ0NFU1MKKwkJICogaXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIGVycm9ycyB3ZSdkIGdldCBmcm9tCisJCSAqIHRoZXNlIG90aGVyIGNhc2VzLCBhbmQgdGhhdCdzIHRoZSBlcnJvciB3ZSBhcmUKKwkJICogdHJ1bHkgaW50ZXJlc3RlZCBpbi4KKwkJICovCisJCWh2X2VyciA9IHN1bjR2X3JuZ19jdGxfcmVhZF92MigwVUwsIH4wVUwsICZ4LCAmeCwgJngsICZ4KTsKKwkJc3dpdGNoIChodl9lcnIpIHsKKwkJY2FzZSBIVl9FV09VTERCTE9DSzoKKwkJY2FzZSBIVl9FTk9BQ0NFU1M6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWh2X2VyciA9IEhWX0VPSzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIG4ycm5nX2h2X2Vycl90cmFucyhodl9lcnIpOworfQorCisjZGVmaW5lIENPTlRST0xfREVGQVVMVF9CQVNFCQlcCisJKCgyIDw8IFJOR19DVExfQVNFTF9TSElGVCkgfAlcCisJIChOMlJOR19BQ0NVTV9DWUNMRVNfREVGQVVMVCA8PCBSTkdfQ1RMX1dBSVRfU0hJRlQpIHwJXAorCSBSTkdfQ1RMX0xGU1IpCisKKyNkZWZpbmUgQ09OVFJPTF9ERUZBVUxUXzAJCVwKKwkoQ09OVFJPTF9ERUZBVUxUX0JBU0UgfAkJXAorCSAoMSA8PCBSTkdfQ1RMX1ZDT19TSElGVCkgfAlcCisJIFJOR19DVExfRVMxKQorI2RlZmluZSBDT05UUk9MX0RFRkFVTFRfMQkJXAorCShDT05UUk9MX0RFRkFVTFRfQkFTRSB8CQlcCisJICgyIDw8IFJOR19DVExfVkNPX1NISUZUKSB8CVwKKwkgUk5HX0NUTF9FUzIpCisjZGVmaW5lIENPTlRST0xfREVGQVVMVF8yCQlcCisJKENPTlRST0xfREVGQVVMVF9CQVNFIHwJCVwKKwkgKDMgPDwgUk5HX0NUTF9WQ09fU0hJRlQpIHwJXAorCSBSTkdfQ1RMX0VTMykKKyNkZWZpbmUgQ09OVFJPTF9ERUZBVUxUXzMJCVwKKwkoQ09OVFJPTF9ERUZBVUxUX0JBU0UgfAkJXAorCSBSTkdfQ1RMX0VTMSB8IFJOR19DVExfRVMyIHwgUk5HX0NUTF9FUzMpCisKK3N0YXRpYyB2b2lkIG4ycm5nX2NvbnRyb2xfc3dzdGF0ZV9pbml0KHN0cnVjdCBuMnJuZyAqbnApCit7CisJaW50IGk7CisKKwlucC0+ZmxhZ3MgfD0gTjJSTkdfRkxBR19DT05UUk9MOworCisJbnAtPmhlYWx0aF9jaGVja19zZWMgPSBOMlJOR19IRUFMVEhfQ0hFQ0tfU0VDX0RFRkFVTFQ7CisJbnAtPmFjY3VtX2N5Y2xlcyA9IE4yUk5HX0FDQ1VNX0NZQ0xFU19ERUZBVUxUOworCW5wLT53ZF90aW1lbyA9IE4yUk5HX1dEX1RJTUVPX0RFRkFVTFQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV91bml0czsgaSsrKSB7CisJCXN0cnVjdCBuMnJuZ191bml0ICp1cCA9ICZucC0+dW5pdHNbaV07CisKKwkJdXAtPmNvbnRyb2xbMF0gPSBDT05UUk9MX0RFRkFVTFRfMDsKKwkJdXAtPmNvbnRyb2xbMV0gPSBDT05UUk9MX0RFRkFVTFRfMTsKKwkJdXAtPmNvbnRyb2xbMl0gPSBDT05UUk9MX0RFRkFVTFRfMjsKKwkJdXAtPmNvbnRyb2xbM10gPSBDT05UUk9MX0RFRkFVTFRfMzsKKwl9CisKKwlucC0+aHZfc3RhdGUgPSBIVl9STkdfU1RBVEVfVU5DT05GSUdVUkVEOworfQorCitzdGF0aWMgaW50IG4ycm5nX2dyYWJfZGlhZ19jb250cm9sKHN0cnVjdCBuMnJuZyAqbnApCit7CisJaW50IGksIGJ1c3lfY291bnQsIGVyciA9IC1FTk9ERVY7CisKKwlidXN5X2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJZXJyID0gbjJybmdfdHJ5X3JlYWRfY3RsKG5wKTsKKwkJaWYgKGVyciAhPSAtRUFHQUlOKQorCQkJYnJlYWs7CisKKwkJaWYgKCsrYnVzeV9jb3VudCA+IDEwMCkgeworCQkJZGV2X2VycigmbnAtPm9wLT5kZXYsCisJCQkJIkdyYWIgZGlhZyBjb250cm9sIHRpbWVvdXQuXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJdWRlbGF5KDEpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbjJybmdfaW5pdF9jb250cm9sKHN0cnVjdCBuMnJuZyAqbnApCit7CisJaW50IGVyciA9IG4ycm5nX2dyYWJfZGlhZ19jb250cm9sKG5wKTsKKworCS8qIE5vdCBpbiB0aGUgY29udHJvbCBkb21haW4sIHRoYXQncyBPSyB3ZSBhcmUgb25seSBhIGNvbnN1bWVyCisJICogb2YgdGhlIFJORyBkYXRhLCB3ZSBkb24ndCBzZXR1cCBhbmQgcHJvZ3JhbSBpdC4KKwkgKi8KKwlpZiAoZXJyID09IC1FUEVSTSkKKwkJcmV0dXJuIDA7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW4ycm5nX2NvbnRyb2xfc3dzdGF0ZV9pbml0KG5wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG4ycm5nX2RhdGFfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdTMyICpkYXRhKQoreworCXN0cnVjdCBuMnJuZyAqbnAgPSAoc3RydWN0IG4ycm5nICopIHJuZy0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHJhID0gX19wYSgmbnAtPnRlc3RfZGF0YSk7CisJaW50IGxlbjsKKworCWlmICghKG5wLT5mbGFncyAmIE4yUk5HX0ZMQUdfUkVBRFkpKSB7CisJCWxlbiA9IDA7CisJfSBlbHNlIGlmIChucC0+ZmxhZ3MgJiBOMlJOR19GTEFHX0JVRkZFUl9WQUxJRCkgeworCQlucC0+ZmxhZ3MgJj0gfk4yUk5HX0ZMQUdfQlVGRkVSX1ZBTElEOworCQkqZGF0YSA9IG5wLT5idWZmZXI7CisJCWxlbiA9IDQ7CisJfSBlbHNlIHsKKwkJaW50IGVyciA9IG4ycm5nX2dlbmVyaWNfcmVhZF9kYXRhKHJhKTsKKwkJaWYgKCFlcnIpIHsKKwkJCW5wLT5idWZmZXIgPSBucC0+dGVzdF9kYXRhID4+IDMyOworCQkJKmRhdGEgPSBucC0+dGVzdF9kYXRhICYgMHhmZmZmZmZmZjsKKwkJCWxlbiA9IDQ7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZucC0+b3AtPmRldiwgIlJORyBlcnJvciwgcmVzdGVzdGluZ1xuIik7CisJCQlucC0+ZmxhZ3MgJj0gfk4yUk5HX0ZMQUdfUkVBRFk7CisJCQlpZiAoIShucC0+ZmxhZ3MgJiBOMlJOR19GTEFHX1NIVVRET1dOKSkKKwkJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm5wLT53b3JrLCAwKTsKKwkJCWxlbiA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKiBPbiBhIGd1ZXN0IG5vZGUsIGp1c3QgbWFrZSBzdXJlIHdlIGNhbiByZWFkIHJhbmRvbSBkYXRhIHByb3Blcmx5LgorICogSWYgYSBjb250cm9sIG5vZGUgcmVib290cyBvciByZWxvYWRzIGl0J3MgbjJybmcgZHJpdmVyLCB0aGlzIHdvbid0CisgKiB3b3JrIGR1cmluZyB0aGF0IHRpbWUuICBTbyB3ZSBoYXZlIHRvIGtlZXAgcHJvYmluZyB1bnRpbCB0aGUgZGV2aWNlCisgKiBiZWNvbWVzIHVzYWJsZS4KKyAqLworc3RhdGljIGludCBuMnJuZ19ndWVzdF9jaGVjayhzdHJ1Y3QgbjJybmcgKm5wKQoreworCXVuc2lnbmVkIGxvbmcgcmEgPSBfX3BhKCZucC0+dGVzdF9kYXRhKTsKKworCXJldHVybiBuMnJuZ19nZW5lcmljX3JlYWRfZGF0YShyYSk7Cit9CisKK3N0YXRpYyBpbnQgbjJybmdfZW50cm9weV9kaWFnX3JlYWQoc3RydWN0IG4ycm5nICpucCwgdW5zaWduZWQgbG9uZyB1bml0LAorCQkJCSAgIHU2NCAqcHJlX2NvbnRyb2wsIHU2NCBwcmVfc3RhdGUsCisJCQkJICAgdTY0ICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbiwKKwkJCQkgICB1NjQgKnBvc3RfY29udHJvbCwgdTY0IHBvc3Rfc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwb3N0X2N0bF9yYSA9IF9fcGEocG9zdF9jb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIHByZV9jdGxfcmEgPSBfX3BhKHByZV9jb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGJ1ZmZlcl9yYSA9IF9fcGEoYnVmZmVyKTsKKwlpbnQgZXJyOworCisJZXJyID0gbjJybmdfZ2VuZXJpY193cml0ZV9jb250cm9sKG5wLCBwcmVfY3RsX3JhLCB1bml0LCBwcmVfc3RhdGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBuMnJuZ19nZW5lcmljX3JlYWRfZGlhZ19kYXRhKG5wLCB1bml0LAorCQkJCQkgICBidWZmZXJfcmEsIGJ1Zl9sZW4pOworCisJKHZvaWQpIG4ycm5nX2dlbmVyaWNfd3JpdGVfY29udHJvbChucCwgcG9zdF9jdGxfcmEsIHVuaXQsCisJCQkJCSAgIHBvc3Rfc3RhdGUpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHU2NCBhZHZhbmNlX3BvbHlub21pYWwodTY0IHBvbHksIHU2NCB2YWwsIGludCBjb3VudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWludCBoaWdoYml0X3NldCA9ICgoczY0KXZhbCA8IDApOworCisJCXZhbCA8PD0gMTsKKwkJaWYgKGhpZ2hiaXRfc2V0KQorCQkJdmFsIF49IHBvbHk7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBuMnJuZ190ZXN0X2J1ZmZlcl9maW5kKHN0cnVjdCBuMnJuZyAqbnAsIHU2NCB2YWwpCit7CisJaW50IGksIGNvdW50ID0gMDsKKworCS8qIFB1cnBvc2VmdWxseSBza2lwIG92ZXIgdGhlIGZpcnN0IHdvcmQuICAqLworCWZvciAoaSA9IDE7IGkgPCBTRUxGVEVTVF9CVUZGRVJfV09SRFM7IGkrKykgeworCQlpZiAobnAtPnRlc3RfYnVmZmVyW2ldID09IHZhbCkKKwkJCWNvdW50Kys7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgbjJybmdfZHVtcF90ZXN0X2J1ZmZlcihzdHJ1Y3QgbjJybmcgKm5wKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNFTEZURVNUX0JVRkZFUl9XT1JEUzsgaSsrKQorCQlkZXZfZXJyKCZucC0+b3AtPmRldiwgIlRlc3QgYnVmZmVyIHNsb3QgJWQgWzB4JTAxNmx4XVxuIiwKKwkJCWksIG5wLT50ZXN0X2J1ZmZlcltpXSk7Cit9CisKK3N0YXRpYyBpbnQgbjJybmdfY2hlY2tfc2VsZnRlc3RfYnVmZmVyKHN0cnVjdCBuMnJuZyAqbnAsIHVuc2lnbmVkIGxvbmcgdW5pdCkKK3sKKwl1NjQgdmFsID0gU0VMRlRFU1RfVkFMOworCWludCBlcnIsIG1hdGNoZXMsIGxpbWl0OworCisJbWF0Y2hlcyA9IDA7CisJZm9yIChsaW1pdCA9IDA7IGxpbWl0IDwgU0VMRlRFU1RfTE9PUFNfTUFYOyBsaW1pdCsrKSB7CisJCW1hdGNoZXMgKz0gbjJybmdfdGVzdF9idWZmZXJfZmluZChucCwgdmFsKTsKKwkJaWYgKG1hdGNoZXMgPj0gU0VMRlRFU1RfTUFUQ0hfR09BTCkKKwkJCWJyZWFrOworCQl2YWwgPSBhZHZhbmNlX3BvbHlub21pYWwoU0VMRlRFU1RfUE9MWSwgdmFsLCAxKTsKKwl9CisKKwllcnIgPSAwOworCWlmIChsaW1pdCA+PSBTRUxGVEVTVF9MT09QU19NQVgpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZGV2X2VycigmbnAtPm9wLT5kZXYsICJTZWxmdGVzdCBmYWlsZWQgb24gdW5pdCAlbHVcbiIsIHVuaXQpOworCQluMnJuZ19kdW1wX3Rlc3RfYnVmZmVyKG5wKTsKKwl9IGVsc2UKKwkJZGV2X2luZm8oJm5wLT5vcC0+ZGV2LCAiU2VsZnRlc3QgcGFzc2VkIG9uIHVuaXQgJWx1XG4iLCB1bml0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbjJybmdfY29udHJvbF9zZWxmdGVzdChzdHJ1Y3QgbjJybmcgKm5wLCB1bnNpZ25lZCBsb25nIHVuaXQpCit7CisJaW50IGVycjsKKworCW5wLT50ZXN0X2NvbnRyb2xbMF0gPSAoMHgyIDw8IFJOR19DVExfQVNFTF9TSElGVCk7CisJbnAtPnRlc3RfY29udHJvbFsxXSA9ICgweDIgPDwgUk5HX0NUTF9BU0VMX1NISUZUKTsKKwlucC0+dGVzdF9jb250cm9sWzJdID0gKDB4MiA8PCBSTkdfQ1RMX0FTRUxfU0hJRlQpOworCW5wLT50ZXN0X2NvbnRyb2xbM10gPSAoKDB4MiA8PCBSTkdfQ1RMX0FTRUxfU0hJRlQpIHwKKwkJCSAgICAgICBSTkdfQ1RMX0xGU1IgfAorCQkJICAgICAgICgoU0VMRlRFU1RfVElDS1MgLSAyKSA8PCBSTkdfQ1RMX1dBSVRfU0hJRlQpKTsKKworCisJZXJyID0gbjJybmdfZW50cm9weV9kaWFnX3JlYWQobnAsIHVuaXQsIG5wLT50ZXN0X2NvbnRyb2wsCisJCQkJICAgICAgSFZfUk5HX1NUQVRFX0hFQUxUSENIRUNLLAorCQkJCSAgICAgIG5wLT50ZXN0X2J1ZmZlciwKKwkJCQkgICAgICBzaXplb2YobnAtPnRlc3RfYnVmZmVyKSwKKwkJCQkgICAgICAmbnAtPnVuaXRzW3VuaXRdLmNvbnRyb2xbMF0sCisJCQkJICAgICAgbnAtPmh2X3N0YXRlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIG4ycm5nX2NoZWNrX3NlbGZ0ZXN0X2J1ZmZlcihucCwgdW5pdCk7Cit9CisKK3N0YXRpYyBpbnQgbjJybmdfY29udHJvbF9jaGVjayhzdHJ1Y3QgbjJybmcgKm5wKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fdW5pdHM7IGkrKykgeworCQlpbnQgZXJyID0gbjJybmdfY29udHJvbF9zZWxmdGVzdChucCwgaSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogVGhlIHNhbml0eSBjaGVja3MgcGFzc2VkLCBpbnN0YWxsIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIGludG8gdGhlCisgKiBjaGlwLCBpdCdzIHJlYWR5IHRvIHVzZS4KKyAqLworc3RhdGljIGludCBuMnJuZ19jb250cm9sX2NvbmZpZ3VyZV91bml0cyhzdHJ1Y3QgbjJybmcgKm5wKQoreworCWludCB1bml0LCBlcnI7CisKKwllcnIgPSAwOworCWZvciAodW5pdCA9IDA7IHVuaXQgPCBucC0+bnVtX3VuaXRzOyB1bml0KyspIHsKKwkJc3RydWN0IG4ycm5nX3VuaXQgKnVwID0gJm5wLT51bml0c1t1bml0XTsKKwkJdW5zaWduZWQgbG9uZyBjdGxfcmEgPSBfX3BhKCZ1cC0+Y29udHJvbFswXSk7CisJCWludCBlc3JjOworCQl1NjQgYmFzZTsKKworCQliYXNlID0gKChucC0+YWNjdW1fY3ljbGVzIDw8IFJOR19DVExfV0FJVF9TSElGVCkgfAorCQkJKDIgPDwgUk5HX0NUTF9BU0VMX1NISUZUKSB8CisJCQlSTkdfQ1RMX0xGU1IpOworCisJCS8qIFhYWCBUaGlzIGlzbid0IHRoZSBiZXN0LiAgV2Ugc2hvdWxkIGZldGNoIGEgYnVuY2gKKwkJICogWFhYIG9mIHdvcmRzIHVzaW5nIGVhY2ggZW50cm9weSBzb3VyY2UgY29tYmluZWQgWFhYCisJCSAqIHdpdGggZWFjaCBWQ08gc2V0dGluZywgYW5kIHNlZSB3aGljaCBjb21iaW5hdGlvbnMKKwkJICogWFhYIGdpdmUgdGhlIGJlc3QgcmFuZG9tIGRhdGEuCisJCSAqLworCQlmb3IgKGVzcmMgPSAwOyBlc3JjIDwgMzsgZXNyYysrKQorCQkJdXAtPmNvbnRyb2xbZXNyY10gPSBiYXNlIHwKKwkJCQkoZXNyYyA8PCBSTkdfQ1RMX1ZDT19TSElGVCkgfAorCQkJCShSTkdfQ1RMX0VTMSA8PCBlc3JjKTsKKworCQl1cC0+Y29udHJvbFszXSA9IGJhc2UgfAorCQkJKFJOR19DVExfRVMxIHwgUk5HX0NUTF9FUzIgfCBSTkdfQ1RMX0VTMyk7CisKKwkJZXJyID0gbjJybmdfZ2VuZXJpY193cml0ZV9jb250cm9sKG5wLCBjdGxfcmEsIHVuaXQsCisJCQkJCQkgIEhWX1JOR19TVEFURV9DT05GSUdVUkVEKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIG4ycm5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBuMnJuZyAqbnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG4ycm5nLCB3b3JrLndvcmspOworCWludCBlcnIgPSAwOworCisJaWYgKCEobnAtPmZsYWdzICYgTjJSTkdfRkxBR19DT05UUk9MKSkgeworCQllcnIgPSBuMnJuZ19ndWVzdF9jaGVjayhucCk7CisJfSBlbHNlIHsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJCWVyciA9IG4ycm5nX2NvbnRyb2xfY2hlY2sobnApOworCQlwcmVlbXB0X2VuYWJsZSgpOworCisJCWlmICghZXJyKQorCQkJZXJyID0gbjJybmdfY29udHJvbF9jb25maWd1cmVfdW5pdHMobnApOworCX0KKworCWlmICghZXJyKSB7CisJCW5wLT5mbGFncyB8PSBOMlJOR19GTEFHX1JFQURZOworCQlkZXZfaW5mbygmbnAtPm9wLT5kZXYsICJSTkcgcmVhZHlcbiIpOworCX0KKworCWlmIChlcnIgJiYgIShucC0+ZmxhZ3MgJiBOMlJOR19GTEFHX1NIVVRET1dOKSkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZucC0+d29yaywgSFogKiAyKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IG4ycm5nX2RyaXZlcl92ZXJzaW9uKHZvaWQpCit7CisJc3RhdGljIGludCBuMnJuZ192ZXJzaW9uX3ByaW50ZWQ7CisKKwlpZiAobjJybmdfdmVyc2lvbl9wcmludGVkKysgPT0gMCkKKwkJcHJfaW5mbygiJXMiLCB2ZXJzaW9uKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbjJybmdfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCisJCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCWludCB2aWN0b3JpYV9mYWxscyA9IChtYXRjaC0+ZGF0YSAhPSBOVUxMKTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3QgbjJybmcgKm5wOworCisJbjJybmdfZHJpdmVyX3ZlcnNpb24oKTsKKworCW5wID0ga3phbGxvYyhzaXplb2YoKm5wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFucCkKKwkJZ290byBvdXQ7CisJbnAtPm9wID0gb3A7CisKKwlJTklUX0RFTEFZRURfV09SSygmbnAtPndvcmssIG4ycm5nX3dvcmspOworCisJaWYgKHZpY3RvcmlhX2ZhbGxzKQorCQlucC0+ZmxhZ3MgfD0gTjJSTkdfRkxBR19WRjsKKworCWVyciA9IC1FTk9ERVY7CisJbnAtPmh2YXBpX21ham9yID0gMjsKKwlpZiAoc3VuNHZfaHZhcGlfcmVnaXN0ZXIoSFZfR1JQX1JORywKKwkJCQkgbnAtPmh2YXBpX21ham9yLAorCQkJCSAmbnAtPmh2YXBpX21pbm9yKSkgeworCQlucC0+aHZhcGlfbWFqb3IgPSAxOworCQlpZiAoc3VuNHZfaHZhcGlfcmVnaXN0ZXIoSFZfR1JQX1JORywKKwkJCQkJIG5wLT5odmFwaV9tYWpvciwKKwkJCQkJICZucC0+aHZhcGlfbWlub3IpKSB7CisJCQlkZXZfZXJyKCZvcC0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIHN1aXRhYmxlICIKKwkJCQkiSFZBUEkgdmVyc2lvbi5cbiIpOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCX0KKworCWlmIChucC0+ZmxhZ3MgJiBOMlJOR19GTEFHX1ZGKSB7CisJCWlmIChucC0+aHZhcGlfbWFqb3IgPCAyKSB7CisJCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVkYgUk5HIHJlcXVpcmVzIEhWQVBJIG1ham9yICIKKwkJCQkidmVyc2lvbiAyIG9yIGxhdGVyLCBnb3QgJWx1XG4iLAorCQkJCW5wLT5odmFwaV9tYWpvcik7CisJCQlnb3RvIG91dF9odmFwaV91bnJlZ2lzdGVyOworCQl9CisJCW5wLT5udW1fdW5pdHMgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQob3AtPm5vZGUsCisJCQkJCQkgICAgICAicm5nLSN1bml0cyIsIDApOworCQlpZiAoIW5wLT5udW1fdW5pdHMpIHsKKwkJCWRldl9lcnIoJm9wLT5kZXYsICJWRiBSTkcgbGFja3Mgcm5nLSN1bml0cyBwcm9wZXJ0eVxuIik7CisJCQlnb3RvIG91dF9odmFwaV91bnJlZ2lzdGVyOworCQl9CisJfSBlbHNlCisJCW5wLT5udW1fdW5pdHMgPSAxOworCisJZGV2X2luZm8oJm9wLT5kZXYsICJSZWdpc3RlcmVkIFJORyBIVkFQSSBtYWpvciAlbHUgbWlub3IgJWx1XG4iLAorCQkgbnAtPmh2YXBpX21ham9yLCBucC0+aHZhcGlfbWlub3IpOworCisJbnAtPnVuaXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG4ycm5nX3VuaXQpICogbnAtPm51bV91bml0cywKKwkJCSAgICBHRlBfS0VSTkVMKTsKKwllcnIgPSAtRU5PTUVNOworCWlmICghbnAtPnVuaXRzKQorCQlnb3RvIG91dF9odmFwaV91bnJlZ2lzdGVyOworCisJZXJyID0gbjJybmdfaW5pdF9jb250cm9sKG5wKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX3VuaXRzOworCisJZGV2X2luZm8oJm9wLT5kZXYsICJGb3VuZCAlcyBSTkcsIHVuaXRzOiAlZFxuIiwKKwkJICgobnAtPmZsYWdzICYgTjJSTkdfRkxBR19WRikgPworCQkgICJWaWN0b3JpYSBGYWxscyIgOiAiTmlhZ2FyYTIiKSwKKwkJIG5wLT5udW1fdW5pdHMpOworCisJbnAtPmh3cm5nLm5hbWUgPSAibjJybmciOworCW5wLT5od3JuZy5kYXRhX3JlYWQgPSBuMnJuZ19kYXRhX3JlYWQ7CisJbnAtPmh3cm5nLnByaXYgPSAodW5zaWduZWQgbG9uZykgbnA7CisKKwllcnIgPSBod3JuZ19yZWdpc3RlcigmbnAtPmh3cm5nKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX3VuaXRzOworCisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBucCk7CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm5wLT53b3JrLCAwKTsKKworCXJldHVybiAwOworCitvdXRfZnJlZV91bml0czoKKwlrZnJlZShucC0+dW5pdHMpOworCW5wLT51bml0cyA9IE5VTEw7CisKK291dF9odmFwaV91bnJlZ2lzdGVyOgorCXN1bjR2X2h2YXBpX3VucmVnaXN0ZXIoSFZfR1JQX1JORyk7CisKK291dF9mcmVlOgorCWtmcmVlKG5wKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBuMnJuZ19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCit7CisJc3RydWN0IG4ycm5nICpucCA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CisKKwlucC0+ZmxhZ3MgfD0gTjJSTkdfRkxBR19TSFVURE9XTjsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbnAtPndvcmspOworCisJaHdybmdfdW5yZWdpc3RlcigmbnAtPmh3cm5nKTsKKworCXN1bjR2X2h2YXBpX3VucmVnaXN0ZXIoSFZfR1JQX1JORyk7CisKKwlrZnJlZShucC0+dW5pdHMpOworCW5wLT51bml0cyA9IE5VTEw7CisKKwlrZnJlZShucCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG4ycm5nX21hdGNoW10gPSB7CisJeworCQkubmFtZQkJPSAicmFuZG9tLW51bWJlci1nZW5lcmF0b3IiLAorCQkuY29tcGF0aWJsZQk9ICJTVU5XLG4yLXJuZyIsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJyYW5kb20tbnVtYmVyLWdlbmVyYXRvciIsCisJCS5jb21wYXRpYmxlCT0gIlNVTlcsdmYtcm5nIiwKKwkJLmRhdGEJCT0gKHZvaWQgKikgMSwKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG4ycm5nX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbjJybmdfZHJpdmVyID0geworCS5uYW1lCQk9ICJuMnJuZyIsCisJLm1hdGNoX3RhYmxlCT0gbjJybmdfbWF0Y2gsCisJLnByb2JlCQk9IG4ycm5nX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobjJybmdfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG4ycm5nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZuMnJuZ19kcml2ZXIsICZvZl9idXNfdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuMnJuZ19leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJm4ycm5nX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG4ycm5nX2luaXQpOworbW9kdWxlX2V4aXQobjJybmdfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24ycm5nLmggYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24ycm5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiODFlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vbjJybmcuaApAQCAtMCwwICsxLDExOCBAQAorLyogbjJybmcuaDogTmlhZ2FyYTIgUk5HIGRlZmluZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKyAqLworCisjaWZuZGVmIF9OMlJOR19ICisjZGVmaW5lIF9OMlJOR19ICisKKyNkZWZpbmUgUk5HX0NUTF9XQUlUICAgICAgIDB4MDAwMDAwMDAwMWZmZmUwMFVMTCAvKiBNaW5pbXVtIHdhaXQgdGltZSAgICAgICAqLworI2RlZmluZSBSTkdfQ1RMX1dBSVRfU0hJRlQgOQorI2RlZmluZSBSTkdfQ1RMX0JZUEFTUyAgICAgMHgwMDAwMDAwMDAwMDAwMTAwVUxMIC8qIFZDTyB2b2x0YWdlIHNvdXJjZSAgICAgICovCisjZGVmaW5lIFJOR19DVExfVkNPICAgICAgICAweDAwMDAwMDAwMDAwMDAwYzBVTEwgLyogVkNPIHJhdGUgY29udHJvbCAgICAgICAgKi8KKyNkZWZpbmUgUk5HX0NUTF9WQ09fU0hJRlQgIDYKKyNkZWZpbmUgUk5HX0NUTF9BU0VMICAgICAgIDB4MDAwMDAwMDAwMDAwMDAzMFVMTCAvKiBBbmFsb2cgTVVYIHNlbGVjdCAgICAgICAqLworI2RlZmluZSBSTkdfQ1RMX0FTRUxfU0hJRlQgNAorI2RlZmluZSBSTkdfQ1RMX0xGU1IgICAgICAgMHgwMDAwMDAwMDAwMDAwMDA4VUxMIC8qIFVzZSBMRlNSIG9yIHBsYWluIHNoaWZ0ICovCisjZGVmaW5lIFJOR19DVExfRVMzICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDRVTEwgLyogRW5hYmxlIGVudHJvcHkgc291cmNlIDMgKi8KKyNkZWZpbmUgUk5HX0NUTF9FUzIgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMlVMTCAvKiBFbmFibGUgZW50cm9weSBzb3VyY2UgMiAqLworI2RlZmluZSBSTkdfQ1RMX0VTMSAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxVUxMIC8qIEVuYWJsZSBlbnRyb3B5IHNvdXJjZSAxICovCisKKyNkZWZpbmUgSFZfRkFTVF9STkdfR0VUX0RJQUdfQ1RMCTB4MTMwCisjZGVmaW5lIEhWX0ZBU1RfUk5HX0NUTF9SRUFECQkweDEzMQorI2RlZmluZSBIVl9GQVNUX1JOR19DVExfV1JJVEUJCTB4MTMyCisjZGVmaW5lIEhWX0ZBU1RfUk5HX0RBVEFfUkVBRF9ESUFHCTB4MTMzCisjZGVmaW5lIEhWX0ZBU1RfUk5HX0RBVEFfUkVBRAkJMHgxMzQKKworI2RlZmluZSBIVl9STkdfU1RBVEVfVU5DT05GSUdVUkVECTAKKyNkZWZpbmUgSFZfUk5HX1NUQVRFX0NPTkZJR1VSRUQJCTEKKyNkZWZpbmUgSFZfUk5HX1NUQVRFX0hFQUxUSENIRUNLCTIKKyNkZWZpbmUgSFZfUk5HX1NUQVRFX0VSUk9SCQkzCisKKyNkZWZpbmUgSFZfUk5HX05VTV9DT05UUk9MCQk0CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9ybmdfZ2V0X2RpYWdfY3RsKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfcm5nX2N0bF9yZWFkX3YxKHVuc2lnbmVkIGxvbmcgY3RsX3JlZ3NfcmEsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnN0YXRlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nICp0aWNrX2RlbHRhKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3JuZ19jdGxfcmVhZF92Mih1bnNpZ25lZCBsb25nIGN0bF9yZWdzX3JhLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHVuaXQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnN0YXRlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nICp0aWNrX2RlbHRhLAorCQkJCQkgICB1bnNpZ25lZCBsb25nICp3YXRjaGRvZywKKwkJCQkJICAgdW5zaWduZWQgbG9uZyAqd3JpdGVfc3RhdHVzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3JuZ19jdGxfd3JpdGVfdjEodW5zaWduZWQgbG9uZyBjdGxfcmVnc19yYSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhdGUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHdyaXRlX3RpbWVvdXQsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICp0aWNrX2RlbHRhKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3JuZ19jdGxfd3JpdGVfdjIodW5zaWduZWQgbG9uZyBjdGxfcmVnc19yYSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhdGUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHdyaXRlX3RpbWVvdXQsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHVuaXQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfcm5nX2RhdGFfcmVhZF9kaWFnX3YxKHVuc2lnbmVkIGxvbmcgZGF0YV9yYSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJCSB1bnNpZ25lZCBsb25nICp0aWNrX2RlbHRhKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3JuZ19kYXRhX3JlYWRfZGlhZ192Mih1bnNpZ25lZCBsb25nIGRhdGFfcmEsCisJCQkJCQkgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJCQkgdW5zaWduZWQgbG9uZyB1bml0LAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgKnRpY2tfZGVsdGEpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfcm5nX2RhdGFfcmVhZCh1bnNpZ25lZCBsb25nIGRhdGFfcmEsCisJCQkJCSB1bnNpZ25lZCBsb25nICp0aWNrX2RlbHRhKTsKKworc3RydWN0IG4ycm5nX3VuaXQgeworCXU2NAkJCWNvbnRyb2xbSFZfUk5HX05VTV9DT05UUk9MXTsKK307CisKK3N0cnVjdCBuMnJuZyB7CisJc3RydWN0IG9mX2RldmljZQkqb3A7CisKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyNkZWZpbmUgTjJSTkdfRkxBR19WRgkJMHgwMDAwMDAwMSAvKiBWaWN0b3JpYSBGYWxscyBSTkcsIGVsc2UgTjIgKi8KKyNkZWZpbmUgTjJSTkdfRkxBR19DT05UUk9MCTB4MDAwMDAwMDIgLyogT3BlcmF0aW5nIGluIGNvbnRyb2wgZG9tYWluICovCisjZGVmaW5lIE4yUk5HX0ZMQUdfUkVBRFkJMHgwMDAwMDAwOCAvKiBSZWFkeSBmb3IgaHctcm5nIGxheWVyICAgICAgKi8KKyNkZWZpbmUgTjJSTkdfRkxBR19TSFVURE9XTgkweDAwMDAwMDEwIC8qIERyaXZlciB1bnJlZ2lzdGVyaW5nICAgICAgICAqLworI2RlZmluZSBOMlJOR19GTEFHX0JVRkZFUl9WQUxJRAkweDAwMDAwMDIwIC8qIHUzMiBidWZmZXIgaG9sZHMgdmFsaWQgZGF0YSAqLworCisJaW50CQkJbnVtX3VuaXRzOworCXN0cnVjdCBuMnJuZ191bml0CSp1bml0czsKKworCXN0cnVjdCBod3JuZwkJaHdybmc7CisJdTMyCQkJYnVmZmVyOworCisJLyogUmVnaXN0ZXJlZCBoeXBlcnZpc29yIGdyb3VwIEFQSSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbi4gICovCisJdW5zaWduZWQgbG9uZwkJaHZhcGlfbWFqb3I7CisJdW5zaWduZWQgbG9uZwkJaHZhcGlfbWlub3I7CisKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXdvcms7CisKKwl1bnNpZ25lZCBsb25nCQlodl9zdGF0ZTsgLyogSFZfUk5HX1NUQVRFX2ZvbyAqLworCisJdW5zaWduZWQgbG9uZwkJaGVhbHRoX2NoZWNrX3NlYzsKKwl1bnNpZ25lZCBsb25nCQlhY2N1bV9jeWNsZXM7CisJdW5zaWduZWQgbG9uZwkJd2RfdGltZW87CisjZGVmaW5lIE4yUk5HX0hFQUxUSF9DSEVDS19TRUNfREVGQVVMVAkwCisjZGVmaW5lIE4yUk5HX0FDQ1VNX0NZQ0xFU19ERUZBVUxUCTIwNDgKKyNkZWZpbmUgTjJSTkdfV0RfVElNRU9fREVGQVVMVAkJMAorCisJdTY0CQkJc2NyYXRjaF9jb250cm9sW0hWX1JOR19OVU1fQ09OVFJPTF07CisKKyNkZWZpbmUgU0VMRlRFU1RfVElDS1MJCTM4ODU5CisjZGVmaW5lIFNFTEZURVNUX1ZBTAkJKCh1NjQpMHhCODgyMEM3QkQzODdFMzJDKQorI2RlZmluZSBTRUxGVEVTVF9QT0xZCQkoKHU2NCkweDIzMURDRUU5MTI2MkI4QTMpCisjZGVmaW5lIFNFTEZURVNUX01BVENIX0dPQUwJNgorI2RlZmluZSBTRUxGVEVTVF9MT09QU19NQVgJNDAwMDAKKyNkZWZpbmUgU0VMRlRFU1RfQlVGRkVSX1dPUkRTCTgKKworCXU2NAkJCXRlc3RfZGF0YTsKKwl1NjQJCQl0ZXN0X2NvbnRyb2xbSFZfUk5HX05VTV9DT05UUk9MXTsKKwl1NjQJCQl0ZXN0X2J1ZmZlcltTRUxGVEVTVF9CVUZGRVJfV09SRFNdOworfTsKKworI2RlZmluZSBOMlJOR19CTE9DS19MSU1JVAk2MDAwMAorI2RlZmluZSBOMlJOR19CVVNZX0xJTUlUCTEwMAorI2RlZmluZSBOMlJOR19IQ0hFQ0tfTElNSVQJMTAwCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qIF9OMlJOR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyL2kybGliLmMgYi9kcml2ZXJzL2NoYXIvaXAyL2kybGliLmMKaW5kZXggOTM4ODc5Yy4uMDA2MWUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi9pMmxpYi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvaTJsaWIuYwpAQCAtODY4LDExICs4NjgsMTEgQEAKIAkJYW1vdW50VG9Nb3ZlID0gY291bnQ7CiAJfQogCS8vIE1vdmUgdGhlIGZpcnN0IGJsb2NrCi0JcENoLT5wVFRZLT5sZGlzYy5yZWNlaXZlX2J1ZiggcENoLT5wVFRZLCAKKwlwQ2gtPnBUVFktPmxkaXNjLm9wcy0+cmVjZWl2ZV9idWYoIHBDaC0+cFRUWSwKIAkJICYocENoLT5JYnVmW3N0cmlwSW5kZXhdKSwgTlVMTCwgYW1vdW50VG9Nb3ZlICk7CiAJLy8gSWYgd2UgbmVlZGVkIHRvIHdyYXAsIGRvIHRoZSBzZWNvbmQgZGF0YSBtb3ZlCiAJaWYgKGNvdW50ID4gYW1vdW50VG9Nb3ZlKSB7Ci0JCXBDaC0+cFRUWS0+bGRpc2MucmVjZWl2ZV9idWYoIHBDaC0+cFRUWSwgCisJCXBDaC0+cFRUWS0+bGRpc2Mub3BzLT5yZWNlaXZlX2J1ZiggcENoLT5wVFRZLAogCQkgcENoLT5JYnVmLCBOVUxMLCBjb3VudCAtIGFtb3VudFRvTW92ZSApOwogCX0KIAkvLyBCdW1wIGFuZCB3cmFwIHRoZSBzdHJpcEluZGV4IGFsbCBhdCBvbmNlIGJ5IHRoZSBhbW91bnQgb2YgZGF0YSByZWFkLiBUaGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCmluZGV4IDlhMjM5NGMuLjljYjQ4ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCkBAIC03MTgsMTIgKzcxOCwxMiBAQAogCQkJfQogCiAJCQlpZiAoIE5VTEwgIT0gKCBwQiA9IGkyQm9hcmRQdHJUYWJsZVtpXSApICkgewotCQkJCWRldmljZV9jcmVhdGUoaXAyX2NsYXNzLCBOVUxMLAotCQkJCQkJTUtERVYoSVAyX0lQTF9NQUpPUiwgNCAqIGkpLAotCQkJCQkJImlwbCVkIiwgaSk7Ci0JCQkJZGV2aWNlX2NyZWF0ZShpcDJfY2xhc3MsIE5VTEwsCi0JCQkJCQlNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSArIDEpLAotCQkJCQkJInN0YXQlZCIsIGkpOworCQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpcDJfY2xhc3MsIE5VTEwsCisJCQkJCQkgICAgICBNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSksCisJCQkJCQkgICAgICBOVUxMLCAiaXBsJWQiLCBpKTsKKwkJCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaXAyX2NsYXNzLCBOVUxMLAorCQkJCQkJICAgICAgTUtERVYoSVAyX0lQTF9NQUpPUiwgNCAqIGkgKyAxKSwKKwkJCQkJCSAgICAgIE5VTEwsICJzdGF0JWQiLCBpKTsKIAogCQkJICAgIGZvciAoIGJveCA9IDA7IGJveCA8IEFCU19NQVhfQk9YRVM7ICsrYm94ICkKIAkJCSAgICB7CkBAIC0xMjg5LDExICsxMjg5LDEyIEBACiAvLyBjb2RlIGR1cGxpY2F0ZWQgZnJvbSBuX3R0eSAobGRpc2MpCiBzdGF0aWMgaW5saW5lIHZvaWQgIGlzaWcoaW50IHNpZywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGZsdXNoKQogeworCS8qIEZJWE1FOiBUaGlzIGlzIGNvbXBsZXRlbHkgYm9ndXMgKi8KIAlpZiAodHR5LT5wZ3JwKQogCQlraWxsX3BncnAodHR5LT5wZ3JwLCBzaWcsIDEpOwogCWlmIChmbHVzaCB8fCAhTF9OT0ZMU0godHR5KSkgewotCQlpZiAoIHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyICkgIAotCQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwkJaWYgKCB0dHktPmxkaXNjLm9wcy0+Zmx1c2hfYnVmZmVyICkgIAorCQkJdHR5LT5sZGlzYy5vcHMtPmZsdXNoX2J1ZmZlcih0dHkpOwogCQlpMklucHV0Rmx1c2goIHR0eS0+ZHJpdmVyX2RhdGEgKTsKIAl9CiB9CkBAIC0xMzQyLDcgKzEzNDMsNyBAQAogCQl9CiAJCXRtcCA9IHBDaC0+cFRUWS0+cmVhbF9yYXc7CiAJCXBDaC0+cFRUWS0+cmVhbF9yYXcgPSAwOwotCQlwQ2gtPnBUVFktPmxkaXNjLnJlY2VpdmVfYnVmKCBwQ2gtPnBUVFksICZicmtjLCAmYnJrZiwgMSApOworCQlwQ2gtPnBUVFktPmxkaXNjLT5vcHMucmVjZWl2ZV9idWYoIHBDaC0+cFRUWSwgJmJya2MsICZicmtmLCAxICk7CiAJCXBDaC0+cFRUWS0+cmVhbF9yYXcgPSB0bXA7CiAJfQogI2VuZGlmIC8qIE5FVkVSX0hBUFBFTlNfQVNfU0VUVVBfWFhYICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jCmluZGV4IGMxMWE0MDQuLjY0ZTFjMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jCkBAIC04NzEsNyArODcxLDcgQEAKIAllbnRyeS0+ZGV2ID0gZGV2OwogCiAJbXV0ZXhfbG9jaygmcmVnX2xpc3RfbXV0ZXgpOwotCWRldmljZV9jcmVhdGUoaXBtaV9jbGFzcywgZGV2aWNlLCBkZXYsICJpcG1pJWQiLCBpZl9udW0pOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpcG1pX2NsYXNzLCBkZXZpY2UsIGRldiwgTlVMTCwgImlwbWklZCIsIGlmX251bSk7CiAJbGlzdF9hZGQoJmVudHJ5LT5saW5rLCAmcmVnX2xpc3QpOwogCW11dGV4X3VubG9jaygmcmVnX2xpc3RfbXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jIGIvZHJpdmVycy9jaGFyL2lzaWNvbS5jCmluZGV4IDRmM2NlZmEuLjhmN2NjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc2ljb20uYworKysgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKQEAgLTE5OCwxNyArMTk4LDEwIEBACiAKIHN0cnVjdAlpc2lfcG9ydCB7CiAJdW5zaWduZWQgc2hvcnQJCW1hZ2ljOwotCXVuc2lnbmVkIGludAkJZmxhZ3M7Ci0JaW50CQkJY291bnQ7Ci0JaW50CQkJYmxvY2tlZF9vcGVuOwotCWludAkJCWNsb3NlX2RlbGF5OworCXN0cnVjdCB0dHlfcG9ydAkJcG9ydDsKIAl1MTYJCQljaGFubmVsOwogCXUxNgkJCXN0YXR1czsKLQl1MTYJCQljbG9zaW5nX3dhaXQ7CiAJc3RydWN0IGlzaV9ib2FyZAkqY2FyZDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAJKnR0eTsKLQl3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90CW9wZW5fd2FpdDsKIAl1bnNpZ25lZCBjaGFyCQkqeG1pdF9idWY7CiAJaW50CQkJeG1pdF9oZWFkOwogCWludAkJCXhtaXRfdGFpbDsKQEAgLTQzMCwxMSArNDIzLDExIEBACiAKIAlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwb3J0KyspIHsKIAkJLyogcG9ydCBub3QgYWN0aXZlIG9yIHR4IGRpc2FibGVkIHRvIGZvcmNlIGZsb3cgY29udHJvbCAqLwotCQlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB8fAorCQlpZiAoIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHx8CiAJCQkJIShwb3J0LT5zdGF0dXMgJiBJU0lfVFhPSykpCiAJCQljb250aW51ZTsKIAotCQl0dHkgPSBwb3J0LT50dHk7CisJCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCiAJCWlmICh0dHkgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwpAQCAtNDU4LDcgKzQ1MSw3IEBACiAJCQlpZiAocmVzaWR1ZSA9PSBZRVMpIHsKIAkJCQlyZXNpZHVlID0gTk87CiAJCQkJaWYgKGNudCA+IDApIHsKLQkJCQkJd3JkIHw9IChwb3J0LT54bWl0X2J1Zltwb3J0LT54bWl0X3RhaWxdCisJCQkJCXdyZCB8PSAocG9ydC0+cG9ydC54bWl0X2J1Zltwb3J0LT54bWl0X3RhaWxdCiAJCQkJCQkJCQk8PCA4KTsKIAkJCQkJcG9ydC0+eG1pdF90YWlsID0gKHBvcnQtPnhtaXRfdGFpbCArIDEpCiAJCQkJCQkmIChTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CkBAIC00NzQsMTQgKzQ2NywxNCBAQAogCQkJaWYgKGNudCA8PSAwKQogCQkJCWJyZWFrOwogCQkJd29yZF9jb3VudCA9IGNudCA+PiAxOwotCQkJb3V0c3coYmFzZSwgcG9ydC0+eG1pdF9idWYrcG9ydC0+eG1pdF90YWlsLCB3b3JkX2NvdW50KTsKKwkJCW91dHN3KGJhc2UsIHBvcnQtPnBvcnQueG1pdF9idWYrcG9ydC0+eG1pdF90YWlsLCB3b3JkX2NvdW50KTsKIAkJCXBvcnQtPnhtaXRfdGFpbCA9IChwb3J0LT54bWl0X3RhaWwKIAkJCQkrICh3b3JkX2NvdW50IDw8IDEpKSAmIChTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CiAJCQl0eGNvdW50IC09ICh3b3JkX2NvdW50IDw8IDEpOwogCQkJcG9ydC0+eG1pdF9jbnQgLT0gKHdvcmRfY291bnQgPDwgMSk7CiAJCQlpZiAoY250ICYgMHgwMDAxKSB7CiAJCQkJcmVzaWR1ZSA9IFlFUzsKLQkJCQl3cmQgPSBwb3J0LT54bWl0X2J1Zltwb3J0LT54bWl0X3RhaWxdOworCQkJCXdyZCA9IHBvcnQtPnBvcnQueG1pdF9idWZbcG9ydC0+eG1pdF90YWlsXTsKIAkJCQlwb3J0LT54bWl0X3RhaWwgPSAocG9ydC0+eG1pdF90YWlsICsgMSkKIAkJCQkJJiAoU0VSSUFMX1hNSVRfU0laRSAtIDEpOwogCQkJCXBvcnQtPnhtaXRfY250LS07CkBAIC01NDgsMTMgKzU0MSwxMyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCXBvcnQgPSBjYXJkLT5wb3J0cyArIGNoYW5uZWw7Ci0JaWYgKCEocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKKwlpZiAoIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7CiAJCW91dHcoMHgwMDAwLCBiYXNlKzB4MDQpOyAvKiBlbmFibGUgaW50ZXJydXB0cyAqLwogCQlzcGluX3VubG9jaygmY2FyZC0+Y2FyZF9sb2NrKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAodHR5ID09IE5VTEwpIHsKIAkJd29yZF9jb3VudCA9IGJ5dGVfY291bnQgPj4gMTsKIAkJd2hpbGUgKGJ5dGVfY291bnQgPiAxKSB7CkBAIC01NzIsNyArNTY1LDcgQEAKIAkJaGVhZGVyID0gaW53KGJhc2UpOwogCQlzd2l0Y2ggKGhlYWRlciAmIDB4ZmYpIHsKIAkJY2FzZSAwOgkvKiBDaGFuZ2UgaW4gRUlBIHNpZ25hbHMgKi8KLQkJCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7CisJCQlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7CiAJCQkJaWYgKHBvcnQtPnN0YXR1cyAmIElTSV9EQ0QpIHsKIAkJCQkJaWYgKCEoaGVhZGVyICYgSVNJX0RDRCkpIHsKIAkJCQkJLyogQ2FycmllciBoYXMgYmVlbiBsb3N0ICAqLwpAQCAtNTg1LDcgKzU3OCw3IEBACiAJCQkJLyogQ2FycmllciBoYXMgYmVlbiBkZXRlY3RlZCAqLwogCQkJCQlwcl9kYmcoImludGVycnVwdDogRENELT5oaWdoLlxuIik7CiAJCQkJCXBvcnQtPnN0YXR1cyB8PSBJU0lfRENEOwotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQpOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGhlYWRlciAmIElTSV9EQ0QpCkBAIC01OTQsMTcgKzU4NywxNyBAQAogCQkJCQlwb3J0LT5zdGF0dXMgJj0gfklTSV9EQ0Q7CiAJCQl9CiAKLQkJCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSB7Ci0JCQkJaWYgKHBvcnQtPnR0eS0+aHdfc3RvcHBlZCkgeworCQkJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykgeworCQkJCWlmIChwb3J0LT5wb3J0LnR0eS0+aHdfc3RvcHBlZCkgewogCQkJCQlpZiAoaGVhZGVyICYgSVNJX0NUUykgewotCQkJCQkJcG9ydC0+dHR5LT5od19zdG9wcGVkID0gMDsKKwkJCQkJCXBvcnQtPnBvcnQudHR5LT5od19zdG9wcGVkID0gMDsKIAkJCQkJCS8qIHN0YXJ0IHR4IGluZyAqLwogCQkJCQkJcG9ydC0+c3RhdHVzIHw9IChJU0lfVFhPSwogCQkJCQkJCXwgSVNJX0NUUyk7CiAJCQkJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKCEoaGVhZGVyICYgSVNJX0NUUykpIHsKLQkJCQkJcG9ydC0+dHR5LT5od19zdG9wcGVkID0gMTsKKwkJCQkJcG9ydC0+cG9ydC50dHktPmh3X3N0b3BwZWQgPSAxOwogCQkJCQkvKiBzdG9wIHR4IGluZyAqLwogCQkJCQlwb3J0LT5zdGF0dXMgJj0gfihJU0lfVFhPSyB8IElTSV9DVFMpOwogCQkJCX0KQEAgLTYyOSw3ICs2MjIsNyBAQAogCiAJCWNhc2UgMToJLyogUmVjZWl2ZWQgQnJlYWsgISEhICovCiAJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9CUkVBSyk7Ci0JCQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TQUspCisJCQlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NBSykKIAkJCQlkb19TQUsodHR5KTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCQlicmVhazsKQEAgLTY4MSw3ICs2NzQsNyBAQAogCQlzaGlmdF9jb3VudCA9IGNhcmQtPnNoaWZ0X2NvdW50OwogCXVuc2lnbmVkIGNoYXIgZmxvd19jdHJsOwogCi0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCiAJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC02OTcsNyArNjkwLDcgQEAKIAogCQkvKiAxLDIsMyw0ID0+IDU3LjYsIDExNS4yLCAyMzAsIDQ2MCBrYnBzIHJlc3AuICovCiAJCWlmIChiYXVkIDwgMSB8fCBiYXVkID4gNCkKLQkJCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q0JBVURFWDsKKwkJCXBvcnQtPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICY9IH5DQkFVREVYOwogCQllbHNlCiAJCQliYXVkICs9IDE1OwogCX0KQEAgLTcwOCwxMyArNzAxLDEzIEBACiAJCSAqICB0aGUgJ3NldHNlcmlhbCcgdXRpbGl0eS4KIAkJICovCiAKLQkJaWYgKChwb3J0LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCisJCWlmICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCiAJCQliYXVkKys7IC8qICA1Ny42IEticHMgKi8KLQkJaWYgKChwb3J0LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfVkhJKQorCQlpZiAoKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKIAkJCWJhdWQgKz0gMjsgLyogIDExNSAgS2JwcyAqLwotCQlpZiAoKHBvcnQtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9TSEkpCisJCWlmICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQogCQkJYmF1ZCArPSAzOyAvKiAyMzAga2JwcyovCi0JCWlmICgocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1dBUlApCisJCWlmICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKIAkJCWJhdWQgKz0gNDsgLyogNDYwIGticHMqLwogCX0KIAlpZiAobGludXhiX3RvX2lzaWJbYmF1ZF0gPT0gLTEpIHsKQEAgLTc1NCwxNSArNzQ3LDE1IEBACiAJCUludGVycnVwdFRoZUNhcmQoYmFzZSk7CiAJfQogCWlmIChDX0NMT0NBTCh0dHkpKQotCQlwb3J0LT5mbGFncyAmPSB+QVNZTkNfQ0hFQ0tfQ0Q7CisJCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwogCWVsc2UKLQkJcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfQ0hFQ0tfQ0Q7CisJCXBvcnQtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0hFQ0tfQ0Q7CiAKIAkvKiBmbG93IGNvbnRyb2wgc2V0dGluZ3MgLi4uKi8KIAlmbG93X2N0cmwgPSAwOwotCXBvcnQtPmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKKwlwb3J0LT5wb3J0LmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKIAlpZiAoQ19DUlRTQ1RTKHR0eSkpIHsKLQkJcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfQ1RTX0ZMT1c7CisJCXBvcnQtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ1RTX0ZMT1c7CiAJCWZsb3dfY3RybCB8PSBJU0lDT01fQ1RTUlRTOwogCX0KIAlpZiAoSV9JWE9OKHR0eSkpCkBAIC04MDksMjMgKzgwMiwxNSBAQAogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBwb3J0LT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKKwlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQogCQlyZXR1cm4gMDsKLQlpZiAoIXBvcnQtPnhtaXRfYnVmKSB7Ci0JCS8qIFJlbGllcyBvbiBCS0wgKi8KLQkJdW5zaWduZWQgbG9uZyBwYWdlICA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKHBhZ2UgPT0gMCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAocG9ydC0+eG1pdF9idWYpCi0JCQlmcmVlX3BhZ2UocGFnZSk7Ci0JCWVsc2UKLQkJCXBvcnQtPnhtaXRfYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcGFnZTsKLQl9CisJaWYgKHR0eV9wb3J0X2FsbG9jX3htaXRfYnVmKCZwb3J0LT5wb3J0KSA8IDApCisJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCWlmIChwb3J0LT50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZwb3J0LT50dHktPmZsYWdzKTsKLQlpZiAocG9ydC0+Y291bnQgPT0gMSkKKwlpZiAocG9ydC0+cG9ydC50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZwb3J0LT5wb3J0LnR0eS0+ZmxhZ3MpOworCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDEpCiAJCWNhcmQtPmNvdW50Kys7CiAKIAlwb3J0LT54bWl0X2NudCA9IHBvcnQtPnhtaXRfaGVhZCA9IHBvcnQtPnhtaXRfdGFpbCA9IDA7CkBAIC04MzksNyArODI0LDcgQEAKIAl9CiAKIAlpc2ljb21fY29uZmlnX3BvcnQocG9ydCk7Ci0JcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CisJcG9ydC0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtODU1LDEwICs4NDAsMTAgQEAKIAogCS8qIGJsb2NrIGlmIHBvcnQgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY2xvc2VkICovCiAKLQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBwb3J0LT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpIHsKKwlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykgewogCQlwcl9kYmcoImJsb2NrX3RpbF9yZWFkeTogY2xvc2UgaW4gcHJvZ3Jlc3MuXG4iKTsKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcG9ydC0+Y2xvc2Vfd2FpdCk7Ci0JCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpCisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBvcnQtPnBvcnQuY2xvc2Vfd2FpdCk7CisJCWlmIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKIAkJCXJldHVybiAtRUFHQUlOOwogCQllbHNlCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwpAQCAtODY5LDcgKzg1NCw3IEBACiAJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKIAkJCSh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKIAkJcHJfZGJnKCJibG9ja190aWxfcmVhZHk6IG5vbi1ibG9jayBtb2RlLlxuIik7Ci0JCXBvcnQtPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CisJCXBvcnQtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC04NzksMjYgKzg2NCwyNiBAQAogCS8qIGJsb2NrIHdhaXRpbmcgZm9yIERDRCB0byBiZSBhc3NlcnRlZCwgYW5kIHdoaWxlCiAJCQkJCQljYWxsb3V0IGRldiBpcyBidXN5ICovCiAJcmV0dmFsID0gMDsKLQlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+b3Blbl93YWl0LCAmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJnBvcnQtPnBvcnQub3Blbl93YWl0LCAmd2FpdCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKQotCQlwb3J0LT5jb3VudC0tOwotCXBvcnQtPmJsb2NrZWRfb3BlbisrOworCQlwb3J0LT5wb3J0LmNvdW50LS07CisJcG9ydC0+cG9ydC5ibG9ja2VkX29wZW4rKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCXdoaWxlICgxKSB7CiAJCXJhaXNlX2R0cl9ydHMocG9ydCk7CiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewotCQkJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7CisJCQlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpCiAJCQkJcmV0dmFsID0gLUVBR0FJTjsKIAkJCWVsc2UKIAkJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmCisJCWlmICghKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgogCQkJCShkb19jbG9jYWwgfHwgKHBvcnQtPnN0YXR1cyAmIElTSV9EQ0QpKSkgewogCQkJYnJlYWs7CiAJCX0KQEAgLTkwOSwxNSArODk0LDE1IEBACiAJCXNjaGVkdWxlKCk7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnBvcnQtPm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpCi0JCXBvcnQtPmNvdW50Kys7Ci0JcG9ydC0+YmxvY2tlZF9vcGVuLS07CisJCXBvcnQtPnBvcnQuY291bnQrKzsKKwlwb3J0LT5wb3J0LmJsb2NrZWRfb3Blbi0tOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7Ci0JcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKKwlwb3J0LT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk0Nyw5ICs5MzIsOSBAQAogCiAJaXNpY29tX3NldHVwX2JvYXJkKGNhcmQpOwogCi0JcG9ydC0+Y291bnQrKzsKKwlwb3J0LT5wb3J0LmNvdW50Kys7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IHBvcnQ7Ci0JcG9ydC0+dHR5ID0gdHR5OworCXBvcnQtPnBvcnQudHR5ID0gdHR5OwogCWVycm9yID0gaXNpY29tX3NldHVwX3BvcnQocG9ydCk7CiAJaWYgKGVycm9yID09IDApCiAJCWVycm9yID0gYmxvY2tfdGlsX3JlYWR5KHR0eSwgZmlscCwgcG9ydCk7CkBAIC05NzAsMTggKzk1NSwxNSBAQAogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBwb3J0LT5jYXJkOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKLQl0dHkgPSBwb3J0LT50dHk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAKLQlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKKwlpZiAoIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQogCQlyZXR1cm47CiAKLQlpZiAocG9ydC0+eG1pdF9idWYpIHsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwb3J0LT54bWl0X2J1Zik7Ci0JCXBvcnQtPnhtaXRfYnVmID0gTlVMTDsKLQl9Ci0JcG9ydC0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOworCXR0eV9wb3J0X2ZyZWVfeG1pdF9idWYoJnBvcnQtPnBvcnQpOworCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCS8qIDNyZCBPY3RvYmVyIDIwMDAgOiBWaW5heWFrIFAgUmlzYnVkICovCi0JcG9ydC0+dHR5ID0gTlVMTDsKKwlwb3J0LT5wb3J0LnR0eSA9IE5VTEw7CiAKIAkvKkZpeCBkb25lIGJ5IEFuaWwgLlMgb24gMzAtMDQtMjAwMQogCXJlbW90ZSBsb2dpbiB0aHJvdWdoIGlzaSBwb3J0IGhhcyBkdHIgdG9nZ2xlIHByb2JsZW0KQEAgLTEwNDYsMzMgKzEwMjgsMzMgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh0dHktPmNvdW50ID09IDEgJiYgcG9ydC0+Y291bnQgIT0gMSkgeworCWlmICh0dHktPmNvdW50ID09IDEgJiYgcG9ydC0+cG9ydC5jb3VudCAhPSAxKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIklTSUNPTTooMHglbHgpIGlzaWNvbV9jbG9zZTogYmFkIHBvcnQgIgogCQkJImNvdW50IHR0eS0+Y291bnQgPSAxIHBvcnQgY291bnQgPSAlZC5cbiIsCi0JCQljYXJkLT5iYXNlLCBwb3J0LT5jb3VudCk7Ci0JCXBvcnQtPmNvdW50ID0gMTsKKwkJCWNhcmQtPmJhc2UsIHBvcnQtPnBvcnQuY291bnQpOworCQlwb3J0LT5wb3J0LmNvdW50ID0gMTsKIAl9Ci0JaWYgKC0tcG9ydC0+Y291bnQgPCAwKSB7CisJaWYgKC0tcG9ydC0+cG9ydC5jb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiSVNJQ09NOigweCVseCkgaXNpY29tX2Nsb3NlOiBiYWQgcG9ydCAiCiAJCQkiY291bnQgZm9yIGNoYW5uZWwlZCA9ICVkIiwgY2FyZC0+YmFzZSwgcG9ydC0+Y2hhbm5lbCwKLQkJCXBvcnQtPmNvdW50KTsKLQkJcG9ydC0+Y291bnQgPSAwOworCQkJcG9ydC0+cG9ydC5jb3VudCk7CisJCXBvcnQtPnBvcnQuY291bnQgPSAwOwogCX0KIAotCWlmIChwb3J0LT5jb3VudCkgeworCWlmIChwb3J0LT5wb3J0LmNvdW50KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQotCXBvcnQtPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CisJcG9ydC0+cG9ydC5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOwogCXR0eS0+Y2xvc2luZyA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKLQlpZiAocG9ydC0+Y2xvc2luZ193YWl0ICE9IEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FKQotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgcG9ydC0+Y2xvc2luZ193YWl0KTsKKwlpZiAocG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQgIT0gQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUpCisJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBwb3J0LT5wb3J0LmNsb3Npbmdfd2FpdCk7CiAJLyogaW5kaWNhdGUgdG8gdGhlIGNhcmQgdGhhdCBubyBtb3JlIGRhdGEgY2FuIGJlIHJlY2VpdmVkCiAJICAgb24gdGhpcyBwb3J0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewogCQljYXJkLT5wb3J0X3N0YXR1cyAmPSB+KDEgPDwgcG9ydC0+Y2hhbm5lbCk7CiAJCW91dHcoY2FyZC0+cG9ydF9zdGF0dXMsIGNhcmQtPmJhc2UgKyAweDAyKTsKIAl9CkBAIC0xMDg1LDE4ICsxMDY3LDE4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCXR0eS0+Y2xvc2luZyA9IDA7CiAKLQlpZiAocG9ydC0+YmxvY2tlZF9vcGVuKSB7CisJaWYgKHBvcnQtPnBvcnQuYmxvY2tlZF9vcGVuKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQlpZiAocG9ydC0+Y2xvc2VfZGVsYXkpIHsKKwkJaWYgKHBvcnQtPnBvcnQuY2xvc2VfZGVsYXkpIHsKIAkJCXByX2RiZygic2NoZWR1bGluZyB1bnRpbCB0aW1lIG91dC5cbiIpOwogCQkJbXNsZWVwX2ludGVycnVwdGlibGUoCi0JCQkJamlmZmllc190b19tc2Vjcyhwb3J0LT5jbG9zZV9kZWxheSkpOworCQkJCWppZmZpZXNfdG9fbXNlY3MocG9ydC0+cG9ydC5jbG9zZV9kZWxheSkpOwogCQl9CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnQub3Blbl93YWl0KTsKIAl9Ci0JcG9ydC0+ZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFIHwgQVNZTkNfQ0xPU0lORyk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5jbG9zZV93YWl0KTsKKwlwb3J0LT5wb3J0LmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRSB8IEFTWU5DX0NMT1NJTkcpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5jbG9zZV93YWl0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTExMiw5ICsxMDk0LDYgQEAKIAlpZiAoaXNpY29tX3BhcmFub2lhX2NoZWNrKHBvcnQsIHR0eS0+bmFtZSwgImlzaWNvbV93cml0ZSIpKQogCQlyZXR1cm4gMDsKIAotCWlmICghcG9ydC0+eG1pdF9idWYpCi0JCXJldHVybiAwOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJd2hpbGUgKDEpIHsKQEAgLTExMjMsNyArMTEwMiw3IEBACiAJCWlmIChjbnQgPD0gMCkKIAkJCWJyZWFrOwogCi0JCW1lbWNweShwb3J0LT54bWl0X2J1ZiArIHBvcnQtPnhtaXRfaGVhZCwgYnVmLCBjbnQpOworCQltZW1jcHkocG9ydC0+cG9ydC54bWl0X2J1ZiArIHBvcnQtPnhtaXRfaGVhZCwgYnVmLCBjbnQpOwogCQlwb3J0LT54bWl0X2hlYWQgPSAocG9ydC0+eG1pdF9oZWFkICsgY250KSAmIChTRVJJQUxfWE1JVF9TSVpFCiAJCQktIDEpOwogCQlwb3J0LT54bWl0X2NudCArPSBjbnQ7CkBAIC0xMTQ3LDE2ICsxMTI2LDEzIEBACiAJaWYgKGlzaWNvbV9wYXJhbm9pYV9jaGVjayhwb3J0LCB0dHktPm5hbWUsICJpc2ljb21fcHV0X2NoYXIiKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIXBvcnQtPnhtaXRfYnVmKQotCQlyZXR1cm4gMDsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAlpZiAocG9ydC0+eG1pdF9jbnQgPj0gU0VSSUFMX1hNSVRfU0laRSAtIDEpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0KIAotCXBvcnQtPnhtaXRfYnVmW3BvcnQtPnhtaXRfaGVhZCsrXSA9IGNoOworCXBvcnQtPnBvcnQueG1pdF9idWZbcG9ydC0+eG1pdF9oZWFkKytdID0gY2g7CiAJcG9ydC0+eG1pdF9oZWFkICY9IChTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CiAJcG9ydC0+eG1pdF9jbnQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKQEAgLTExNzIsNyArMTE0OCw3IEBACiAJCXJldHVybjsKIAogCWlmIChwb3J0LT54bWl0X2NudCA8PSAwIHx8IHR0eS0+c3RvcHBlZCB8fCB0dHktPmh3X3N0b3BwZWQgfHwKLQkJCSFwb3J0LT54bWl0X2J1ZikKKwkJCSFwb3J0LT5wb3J0LnhtaXRfYnVmKQogCQlyZXR1cm47CiAKIAkvKiB0aGlzIHRlbGxzIHRoZSB0cmFuc21pdHRlciB0byBjb25zaWRlciB0aGlzIHBvcnQgZm9yCkBAIC0xMjA1LDE0ICsxMTgxLDE3IEBACiB9CiAKIC8qIGlvY3RsIGV0IGFsbCAqLwotc3RhdGljIGlubGluZSB2b2lkIGlzaWNvbV9zZW5kX2JyZWFrKHN0cnVjdCBpc2lfcG9ydCAqcG9ydCwKLQl1bnNpZ25lZCBsb25nIGxlbmd0aCkKK3N0YXRpYyBpbnQgaXNpY29tX3NlbmRfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGxlbmd0aCkKIHsKKwlzdHJ1Y3QgaXNpX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBwb3J0LT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGNhcmQtPmJhc2U7CiAKKwlpZiAobGVuZ3RoID09IC0xKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAoIWxvY2tfY2FyZChjYXJkKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCW91dHcoMHg4MDAwIHwgKChwb3J0LT5jaGFubmVsKSA8PCAoY2FyZC0+c2hpZnRfY291bnQpKSB8IDB4MywgYmFzZSk7CiAJb3V0dygobGVuZ3RoICYgMHhmZikgPDwgOCB8IDB4MDAsIGJhc2UpOwpAQCAtMTIyMCw2ICsxMTk5LDcgQEAKIAlJbnRlcnJ1cHRUaGVDYXJkKGJhc2UpOwogCiAJdW5sb2NrX2NhcmQoY2FyZCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXNpY29tX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTI3NCwyMyArMTI1NCwyMyBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAotCXJlY29uZmlnX3BvcnQgPSAoKHBvcnQtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spICE9CisJcmVjb25maWdfcG9ydCA9ICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSAhPQogCQkobmV3aW5mby5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSk7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJaWYgKChuZXdpbmZvLmNsb3NlX2RlbGF5ICE9IHBvcnQtPmNsb3NlX2RlbGF5KSB8fAotCQkJCShuZXdpbmZvLmNsb3Npbmdfd2FpdCAhPSBwb3J0LT5jbG9zaW5nX3dhaXQpIHx8CisJCWlmICgobmV3aW5mby5jbG9zZV9kZWxheSAhPSBwb3J0LT5wb3J0LmNsb3NlX2RlbGF5KSB8fAorCQkJCShuZXdpbmZvLmNsb3Npbmdfd2FpdCAhPSBwb3J0LT5wb3J0LmNsb3Npbmdfd2FpdCkgfHwKIAkJCQkoKG5ld2luZm8uZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9Ci0JCQkJKHBvcnQtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpIHsKKwkJCQkocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKSB7CiAJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCXBvcnQtPmZsYWdzID0gKChwb3J0LT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgfAorCQlwb3J0LT5wb3J0LmZsYWdzID0gKChwb3J0LT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CiAJCQkJKG5ld2luZm8uZmxhZ3MgJiBBU1lOQ19VU1JfTUFTSykpOwogCX0gZWxzZSB7Ci0JCXBvcnQtPmNsb3NlX2RlbGF5ID0gbmV3aW5mby5jbG9zZV9kZWxheTsKLQkJcG9ydC0+Y2xvc2luZ193YWl0ID0gbmV3aW5mby5jbG9zaW5nX3dhaXQ7Ci0JCXBvcnQtPmZsYWdzID0gKChwb3J0LT5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAorCQlwb3J0LT5wb3J0LmNsb3NlX2RlbGF5ID0gbmV3aW5mby5jbG9zZV9kZWxheTsKKwkJcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQgPSBuZXdpbmZvLmNsb3Npbmdfd2FpdDsKKwkJcG9ydC0+cG9ydC5mbGFncyA9ICgocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAogCQkJCShuZXdpbmZvLmZsYWdzICYgQVNZTkNfRkxBR1MpKTsKIAl9CiAJaWYgKHJlY29uZmlnX3BvcnQpIHsKQEAgLTEzMTQsMTAgKzEyOTQsMTAgQEAKIAlvdXRfaW5mby5saW5lID0gcG9ydCAtIGlzaV9wb3J0czsKIAlvdXRfaW5mby5wb3J0ID0gcG9ydC0+Y2FyZC0+YmFzZTsKIAlvdXRfaW5mby5pcnEgPSBwb3J0LT5jYXJkLT5pcnE7Ci0Jb3V0X2luZm8uZmxhZ3MgPSBwb3J0LT5mbGFnczsKKwlvdXRfaW5mby5mbGFncyA9IHBvcnQtPnBvcnQuZmxhZ3M7CiAvKglvdXRfaW5mby5iYXVkX2Jhc2UgPSA/ICovCi0Jb3V0X2luZm8uY2xvc2VfZGVsYXkgPSBwb3J0LT5jbG9zZV9kZWxheTsKLQlvdXRfaW5mby5jbG9zaW5nX3dhaXQgPSBwb3J0LT5jbG9zaW5nX3dhaXQ7CisJb3V0X2luZm8uY2xvc2VfZGVsYXkgPSBwb3J0LT5wb3J0LmNsb3NlX2RlbGF5OworCW91dF9pbmZvLmNsb3Npbmdfd2FpdCA9IHBvcnQtPnBvcnQuY2xvc2luZ193YWl0OwogCXVubG9ja19rZXJuZWwoKTsKIAlpZiAoY29weV90b191c2VyKGluZm8sICZvdXRfaW5mbywgc2l6ZW9mKG91dF9pbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTMyOSwyOCArMTMwOSwxMSBAQAogewogCXN0cnVjdCBpc2lfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0JaW50IHJldHZhbDsKIAogCWlmIChpc2ljb21fcGFyYW5vaWFfY2hlY2socG9ydCwgdHR5LT5uYW1lLCAiaXNpY29tX2lvY3RsIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFRDU0JSSzoKLQkJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwotCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwotCQlpZiAoIWFyZykKLQkJCWlzaWNvbV9zZW5kX2JyZWFrKHBvcnQsIEhaLzQpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVENTQlJLUDoKLQkJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwotCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwotCQlpc2ljb21fc2VuZF9icmVhayhwb3J0LCBhcmcgPyBhcmcgKiAoSFovMTApIDogSFovNCk7Ci0JCXJldHVybiAwOwogCWNhc2UgVElPQ0dTRVJJQUw6CiAJCXJldHVybiBpc2ljb21fZ2V0X3NlcmlhbF9pbmZvKHBvcnQsIGFyZ3ApOwogCkBAIC0xNDU0LDEwICsxNDE3LDEwIEBACiAJaXNpY29tX3NodXRkb3duX3BvcnQocG9ydCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKLQlwb3J0LT5jb3VudCA9IDA7Ci0JcG9ydC0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JcG9ydC0+dHR5ID0gTlVMTDsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJcG9ydC0+cG9ydC5jb3VudCA9IDA7CisJcG9ydC0+cG9ydC5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKKwlwb3J0LT5wb3J0LnR0eSA9IE5VTEw7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCk7CiB9CiAKIApAQCAtMTQ4Myw2ICsxNDQ2LDcgQEAKIAkuZmx1c2hfYnVmZmVyCQk9IGlzaWNvbV9mbHVzaF9idWZmZXIsCiAJLnRpb2NtZ2V0CQk9IGlzaWNvbV90aW9jbWdldCwKIAkudGlvY21zZXQJCT0gaXNpY29tX3Rpb2Ntc2V0LAorCS5icmVha19jdGwJCT0gaXNpY29tX3NlbmRfYnJlYWssCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCByZXNldF9jYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMTczNiw2ICsxNzAwLDEyIEBACiAJaWYgKGNhcmRfY291bnQgPj0gQk9BUkRfQ09VTlQpCiAJCWdvdG8gZXJyOwogCisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIklTSSBQQ0kgQ2FyZChEZXZpY2UgSUQgMHgleClcbiIsIGVudC0+ZGV2aWNlKTsKIAogCS8qIGFsbG90IHRoZSBmaXJzdCBlbXB0eSBzbG90IGluIHRoZSBhcnJheSAqLwpAQCAtMTc5MCw2ICsxNzYwLDcgQEAKIGVycmRlYzoKIAlib2FyZC0+YmFzZSA9IDA7CiAJY2FyZF9jb3VudC0tOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIGVycjoKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTgwNiw2ICsxNzc3LDcgQEAKIAlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMyk7CiAJYm9hcmQtPmJhc2UgPSAwOwogCWNhcmRfY291bnQtLTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGlzaWNvbV9pbml0KHZvaWQpCkBAIC0xODE4LDE0ICsxNzkwLDEzIEBACiAJCWlzaV9jYXJkW2lkeF0ucG9ydHMgPSBwb3J0OwogCQlzcGluX2xvY2tfaW5pdCgmaXNpX2NhcmRbaWR4XS5jYXJkX2xvY2spOwogCQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMTY7IGNoYW5uZWwrKywgcG9ydCsrKSB7CisJCQl0dHlfcG9ydF9pbml0KCZwb3J0LT5wb3J0KTsKIAkJCXBvcnQtPm1hZ2ljID0gSVNJQ09NX01BR0lDOwogCQkJcG9ydC0+Y2FyZCA9ICZpc2lfY2FyZFtpZHhdOwogCQkJcG9ydC0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0JCQlwb3J0LT5jbG9zZV9kZWxheSA9IDUwICogSFovMTAwOwotCQkJcG9ydC0+Y2xvc2luZ193YWl0ID0gMzAwMCAqIEhaLzEwMDsKKwkJCXBvcnQtPnBvcnQuY2xvc2VfZGVsYXkgPSA1MCAqIEhaLzEwMDsKKwkJCXBvcnQtPnBvcnQuY2xvc2luZ193YWl0ID0gMzAwMCAqIEhaLzEwMDsKIAkJCXBvcnQtPnN0YXR1cyA9IDA7Ci0JCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5vcGVuX3dhaXQpOwotCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+Y2xvc2Vfd2FpdCk7CiAJCQkvKiAgLiAuIC4gICovCiAJCX0KIAkJaXNpX2NhcmRbaWR4XS5iYXNlID0gMDsKQEAgLTE4NDksNyArMTgyMCw3IEBACiAJaXNpY29tX25vcm1hbC0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcJPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfAogCQlDTE9DQUw7CiAJaXNpY29tX25vcm1hbC0+ZmxhZ3MJCQk9IFRUWV9EUklWRVJfUkVBTF9SQVcgfAotCQlUVFlfRFJJVkVSX0RZTkFNSUNfREVWOworCQlUVFlfRFJJVkVSX0RZTkFNSUNfREVWIHwgVFRZX0RSSVZFUl9IQVJEV0FSRV9CUkVBSzsKIAl0dHlfc2V0X29wZXJhdGlvbnMoaXNpY29tX25vcm1hbCwgJmlzaWNvbV9vcHMpOwogCiAJcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihpc2ljb21fbm9ybWFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYyBiL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYwppbmRleCA3YzhiNjJmLi44NDNhMmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCkBAIC01OTgsNyArNTk4LDcgQEAKIHN0YXRpYyBpbnQJc3RsaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyB2b2lkCXN0bGlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIGludAlzdGxpX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKLXN0YXRpYyB2b2lkCXN0bGlfcHV0Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKTsKK3N0YXRpYyBpbnQJc3RsaV9wdXRjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOwogc3RhdGljIHZvaWQJc3RsaV9mbHVzaGNoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludAlzdGxpX3dyaXRlcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyBpbnQJc3RsaV9jaGFyc2luYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpAQCAtNjA5LDcgKzYwOSw3IEBACiBzdGF0aWMgdm9pZAlzdGxpX3N0b3Aoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZAlzdGxpX3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQJc3RsaV9mbHVzaGJ1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXN0YXRpYyB2b2lkCXN0bGlfYnJlYWtjdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKTsKK3N0YXRpYyBpbnQJc3RsaV9icmVha2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpOwogc3RhdGljIHZvaWQJc3RsaV93YWl0dW50aWxzZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KTsKIHN0YXRpYyB2b2lkCXN0bGlfc2VuZHhjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOwogc3RhdGljIHZvaWQJc3RsaV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CkBAIC03MzUsOCArNzM1LDggQEAKIAlmb3IgKGogPSAwOyBqIDwgU1RMX01BWFBPUlRTOyBqKyspIHsKIAkJcG9ydHAgPSBicmRwLT5wb3J0c1tqXTsKIAkJaWYgKHBvcnRwICE9IE5VTEwpIHsKLQkJCWlmIChwb3J0cC0+dHR5ICE9IE5VTEwpCi0JCQkJdHR5X2hhbmd1cChwb3J0cC0+dHR5KTsKKwkJCWlmIChwb3J0cC0+cG9ydC50dHkgIT0gTlVMTCkKKwkJCQl0dHlfaGFuZ3VwKHBvcnRwLT5wb3J0LnR0eSk7CiAJCQlrZnJlZShwb3J0cCk7CiAJCX0KIAl9CkBAIC04MTEsOSArODExLDkgQEAKICAqCVRoZSBzbGVlcCBoZXJlIGRvZXMgbm90IG5lZWQgaW50ZXJydXB0IHByb3RlY3Rpb24gc2luY2UgdGhlIHdha2V1cAogICoJZm9yIGl0IGlzIGRvbmUgd2l0aCB0aGUgc2FtZSBjb250ZXh0LgogICovCi0JaWYgKHBvcnRwLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpIHsKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcG9ydHAtPmNsb3NlX3dhaXQpOwotCQlpZiAocG9ydHAtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwlpZiAocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBvcnRwLT5wb3J0LmNsb3NlX3dhaXQpOworCQlpZiAocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQpAQCAtODI0LDE5ICs4MjQsMTkgQEAKICAqCXJlcXVpcmVzIHNldmVyYWwgY29tbWFuZHMgdG8gdGhlIGJvYXJkIHdlIHdpbGwgbmVlZCB0byB3YWl0IGZvciBhbnkKICAqCW90aGVyIG9wZW4gdGhhdCBpcyBhbHJlYWR5IGluaXRpYWxpemluZyB0aGUgcG9ydC4KICAqLwotCXBvcnRwLT50dHkgPSB0dHk7CisJcG9ydHAtPnBvcnQudHR5ID0gdHR5OwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0cDsKLQlwb3J0cC0+cmVmY291bnQrKzsKKwlwb3J0cC0+cG9ydC5jb3VudCsrOwogCiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBvcnRwLT5yYXdfd2FpdCwKIAkJCSF0ZXN0X2JpdChTVF9JTklUSUFMSVpJTkcsICZwb3J0cC0+c3RhdGUpKTsKIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlpZiAoKHBvcnRwLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSA9PSAwKSB7CisJaWYgKChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSA9PSAwKSB7CiAJCXNldF9iaXQoU1RfSU5JVElBTElaSU5HLCAmcG9ydHAtPnN0YXRlKTsKIAkJaWYgKChyYyA9IHN0bGlfaW5pdG9wZW4oYnJkcCwgcG9ydHApKSA+PSAwKSB7Ci0JCQlwb3J0cC0+ZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CisJCQlwb3J0cC0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAkJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAkJfQogCQljbGVhcl9iaXQoU1RfSU5JVElBTElaSU5HLCAmcG9ydHAtPnN0YXRlKTsKQEAgLTg1MSw5ICs4NTEsOSBAQAogICoJVGhlIHNsZWVwIGhlcmUgZG9lcyBub3QgbmVlZCBpbnRlcnJ1cHQgcHJvdGVjdGlvbiBzaW5jZSB0aGUgd2FrZXVwCiAgKglmb3IgaXQgaXMgZG9uZSB3aXRoIHRoZSBzYW1lIGNvbnRleHQuCiAgKi8KLQlpZiAocG9ydHAtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgewotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwb3J0cC0+Y2xvc2Vfd2FpdCk7Ci0JCWlmIChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQorCWlmIChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcG9ydHAtPnBvcnQuY2xvc2Vfd2FpdCk7CisJCWlmIChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAl9CkBAIC04NjcsNyArODY3LDcgQEAKIAkJaWYgKChyYyA9IHN0bGlfd2FpdGNhcnJpZXIoYnJkcCwgcG9ydHAsIGZpbHApKSAhPSAwKQogCQkJcmV0dXJuIHJjOwogCX0KLQlwb3J0cC0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKKwlwb3J0cC0+cG9ydC5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCXJldHVybiAwOwogfQogCkBAIC04ODgsMTQgKzg4OCwxNCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGxpX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKHBvcnRwLT5yZWZjb3VudCAhPSAxKSkKLQkJcG9ydHAtPnJlZmNvdW50ID0gMTsKLQlpZiAocG9ydHAtPnJlZmNvdW50LS0gPiAxKSB7CisJaWYgKCh0dHktPmNvdW50ID09IDEpICYmIChwb3J0cC0+cG9ydC5jb3VudCAhPSAxKSkKKwkJcG9ydHAtPnBvcnQuY291bnQgPSAxOworCWlmIChwb3J0cC0+cG9ydC5jb3VudC0tID4gMSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGxpX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAotCXBvcnRwLT5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOworCXBvcnRwLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CiAKIC8qCiAgKglNYXkgd2FudCB0byB3YWl0IGZvciBkYXRhIHRvIGRyYWluIGJlZm9yZSBjbG9zaW5nLiBUaGUgQlVTWSBmbGFnCkBAIC05MTEsNyArOTExLDcgQEAKIAlpZiAocG9ydHAtPmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkKIAkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIHBvcnRwLT5jbG9zaW5nX3dhaXQpOwogCi0JcG9ydHAtPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKKwlwb3J0cC0+cG9ydC5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwogCXN0bGlfcmF3Y2xvc2UoYnJkcCwgcG9ydHAsIDAsIDApOwogCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkgewpAQCAtOTI1LDIyICs5MjUsMjEgQEAKIAljbGVhcl9iaXQoU1RfVFhCVVNZLCAmcG9ydHAtPnN0YXRlKTsKIAljbGVhcl9iaXQoU1RfUlhTVE9QLCAmcG9ydHAtPnN0YXRlKTsKIAlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKSh0dHkpOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCXNldF9iaXQoU1RfRE9GTFVTSFJYLCAmcG9ydHAtPnN0YXRlKTsKIAlzdGxpX2ZsdXNoYnVmZmVyKHR0eSk7CiAKIAl0dHktPmNsb3NpbmcgPSAwOwotCXBvcnRwLT50dHkgPSBOVUxMOworCXBvcnRwLT5wb3J0LnR0eSA9IE5VTEw7CiAKIAlpZiAocG9ydHAtPm9wZW53YWl0Y250KSB7CiAJCWlmIChwb3J0cC0+Y2xvc2VfZGVsYXkpCiAJCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKHBvcnRwLT5jbG9zZV9kZWxheSkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5wb3J0Lm9wZW5fd2FpdCk7CiAJfQogCi0JcG9ydHAtPmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRXxBU1lOQ19DTE9TSU5HKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5jbG9zZV93YWl0KTsKKwlwb3J0cC0+cG9ydC5mbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkV8QVNZTkNfQ0xPU0lORyk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+cG9ydC5jbG9zZV93YWl0KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTcwLDcgKzk2OSw3IEBACiAJICAgIHNpemVvZihhc3lub3RpZnlfdCksIDApKSA8IDApCiAJCXJldHVybiByYzsKIAotCXR0eSA9IHBvcnRwLT50dHk7CisJdHR5ID0gcG9ydHAtPnBvcnQudHR5OwogCWlmICh0dHkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJc3RsaV9ta2FzeXBvcnQocG9ydHAsICZhcG9ydCwgdHR5LT50ZXJtaW9zKTsKQEAgLTExNjksNyArMTE2OCw3IEBACiAKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHBvcnRwLT50dHkgPT0gTlVMTCkKKwlpZiAocG9ydHAtPnBvcnQudHR5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCWlmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTE3Nyw3ICsxMTc2LDcgQEAKIAlpZiAoYnJkcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0bGlfbWthc3lwb3J0KHBvcnRwLCAmYXBvcnQsIHBvcnRwLT50dHktPnRlcm1pb3MpOworCXN0bGlfbWthc3lwb3J0KHBvcnRwLCAmYXBvcnQsIHBvcnRwLT5wb3J0LnR0eS0+dGVybWlvcyk7CiAJcmV0dXJuKHN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9TRVRQT1JULCAmYXBvcnQsIHNpemVvZihhc3lwb3J0X3QpLCAwKSk7CiB9CiAKQEAgLTExOTYsMTMgKzExOTUsMTMgQEAKIAlyYyA9IDA7CiAJZG9jbG9jYWwgPSAwOwogCi0JaWYgKHBvcnRwLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpCisJaWYgKHBvcnRwLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKIAkJZG9jbG9jYWwrKzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdGxpX2xvY2ssIGZsYWdzKTsKIAlwb3J0cC0+b3BlbndhaXRjbnQrKzsKIAlpZiAoISB0dHlfaHVuZ191cF9wKGZpbHApKQotCQlwb3J0cC0+cmVmY291bnQtLTsKKwkJcG9ydHAtPnBvcnQuY291bnQtLTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGxpX2xvY2ssIGZsYWdzKTsKIAogCWZvciAoOzspIHsKQEAgLTEyMTEsMTQgKzEyMTAsMTQgQEAKIAkJICAgICZwb3J0cC0+YXNpZywgc2l6ZW9mKGFzeXNpZ3NfdCksIDApKSA8IDApCiAJCQlicmVhazsKIAkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKLQkJICAgICgocG9ydHAtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpID09IDApKSB7Ci0JCQlpZiAocG9ydHAtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwkJICAgICgocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgPT0gMCkpIHsKKwkJCWlmIChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpCiAJCQkJcmMgPSAtRUJVU1k7CiAJCQllbHNlCiAJCQkJcmMgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoKChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSA9PSAwKSAmJgorCQlpZiAoKChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpID09IDApICYmCiAJCSAgICAoZG9jbG9jYWwgfHwgKHBvcnRwLT5zaWdzICYgVElPQ01fQ0QpKSkgewogCQkJYnJlYWs7CiAJCX0KQEAgLTEyMjYsMTIgKzEyMjUsMTIgQEAKIAkJCXJjID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcG9ydHAtPm9wZW5fd2FpdCk7CisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBvcnRwLT5wb3J0Lm9wZW5fd2FpdCk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN0bGlfbG9jaywgZmxhZ3MpOwogCWlmICghIHR0eV9odW5nX3VwX3AoZmlscCkpCi0JCXBvcnRwLT5yZWZjb3VudCsrOworCQlwb3J0cC0+cG9ydC5jb3VudCsrOwogCXBvcnRwLT5vcGVud2FpdGNudC0tOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0bGlfbG9jaywgZmxhZ3MpOwogCkBAIC0xMzMzLDcgKzEzMzIsNyBAQAogICoJZmlyc3QgdGhlbSBkbyB0aGUgbmV3IHBvcnRzLgogICovCiAKLXN0YXRpYyB2b2lkIHN0bGlfcHV0Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQorc3RhdGljIGludCBzdGxpX3B1dGNoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKIHsKIAlpZiAodHR5ICE9IHN0bGlfdHhjb29rdHR5KSB7CiAJCWlmIChzdGxpX3R4Y29va3R0eSAhPSBOVUxMKQpAQCAtMTM0Miw2ICsxMzQxLDcgQEAKIAl9CiAKIAlzdGxpX3R4Y29va2J1ZltzdGxpX3R4Y29va3NpemUrK10gPSBjaDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAKIAlzaW8udHlwZSA9IFBPUlRfVU5LTk9XTjsKIAlzaW8ubGluZSA9IHBvcnRwLT5wb3J0bnI7CiAJc2lvLmlycSA9IDA7Ci0Jc2lvLmZsYWdzID0gcG9ydHAtPmZsYWdzOworCXNpby5mbGFncyA9IHBvcnRwLT5wb3J0LmZsYWdzOwogCXNpby5iYXVkX2Jhc2UgPSBwb3J0cC0+YmF1ZF9iYXNlOwogCXNpby5jbG9zZV9kZWxheSA9IHBvcnRwLT5jbG9zZV9kZWxheTsKIAlzaW8uY2xvc2luZ193YWl0ID0gcG9ydHAtPmNsb3Npbmdfd2FpdDsKQEAgLTE1ODMsMTEgKzE1ODMsMTEgQEAKIAkJaWYgKChzaW8uYmF1ZF9iYXNlICE9IHBvcnRwLT5iYXVkX2Jhc2UpIHx8CiAJCSAgICAoc2lvLmNsb3NlX2RlbGF5ICE9IHBvcnRwLT5jbG9zZV9kZWxheSkgfHwKIAkJICAgICgoc2lvLmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSAhPQotCQkgICAgKHBvcnRwLT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQorCQkgICAgKHBvcnRwLT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCX0gCiAKLQlwb3J0cC0+ZmxhZ3MgPSAocG9ydHAtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CisJcG9ydHAtPnBvcnQuZmxhZ3MgPSAocG9ydHAtPnBvcnQuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKIAkJKHNpby5mbGFncyAmIEFTWU5DX1VTUl9NQVNLKTsKIAlwb3J0cC0+YmF1ZF9iYXNlID0gc2lvLmJhdWRfYmFzZTsKIAlwb3J0cC0+Y2xvc2VfZGVsYXkgPSBzaW8uY2xvc2VfZGVsYXk7CkBAIC0xNjYwLDcgKzE2NjAsNiBAQAogewogCXN0cnVjdCBzdGxpcG9ydCAqcG9ydHA7CiAJc3RydWN0IHN0bGlicmQgKmJyZHA7Ci0JdW5zaWduZWQgaW50IGl2YWw7CiAJaW50IHJjOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCkBAIC0xNzUxLDcgKzE3NTAsNyBAQAogCWlmICgob2xkLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYgKCh0aW9zcC0+Y19jZmxhZyAmIENSVFNDVFMpID09IDApKQogCQl0dHktPmh3X3N0b3BwZWQgPSAwOwogCWlmICgoKG9sZC0+Y19jZmxhZyAmIENMT0NBTCkgPT0gMCkgJiYgKHRpb3NwLT5jX2NmbGFnICYgQ0xPQ0FMKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+b3Blbl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+cG9ydC5vcGVuX3dhaXQpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODM0LDcgKzE4MzMsNyBAQAogCWlmIChicmRwID09IE5VTEwpCiAJCXJldHVybjsKIAotCXBvcnRwLT5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CisJcG9ydHAtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCiAJaWYgKCF0ZXN0X2JpdChTVF9DTE9TSU5HLCAmcG9ydHAtPnN0YXRlKSkKIAkJc3RsaV9yYXdjbG9zZShicmRwLCBwb3J0cCwgMCwgMCk7CkBAIC0xODU1LDEyICsxODU0LDEyIEBACiAJY2xlYXJfYml0KFNUX1RYQlVTWSwgJnBvcnRwLT5zdGF0ZSk7CiAJY2xlYXJfYml0KFNUX1JYU1RPUCwgJnBvcnRwLT5zdGF0ZSk7CiAJc2V0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKLQlwb3J0cC0+dHR5ID0gTlVMTDsKLQlwb3J0cC0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JcG9ydHAtPnJlZmNvdW50ID0gMDsKKwlwb3J0cC0+cG9ydC50dHkgPSBOVUxMOworCXBvcnRwLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCXBvcnRwLT5wb3J0LmNvdW50ID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGxpX2xvY2ssIGZsYWdzKTsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydHAtPm9wZW5fd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+cG9ydC5vcGVuX3dhaXQpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTA5LDcgKzE5MDgsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bGlfYnJlYWtjdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKQorc3RhdGljIGludCBzdGxpX2JyZWFrY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc3RsaWJyZAkqYnJkcDsKIAlzdHJ1Y3Qgc3RsaXBvcnQJKnBvcnRwOwpAQCAtMTkxNywxNSArMTkxNiwxNiBAQAogCiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCWlmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwogCWlmIChicmRwID09IE5VTEwpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhcmcgPSAoc3RhdGUgPT0gLTEpID8gQlJFQUtPTiA6IEJSRUFLT0ZGOwogCXN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9CUkVBSywgJmFyZywgc2l6ZW9mKGxvbmcpLCAwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjE4OCw3ICsyMTg4LDcgQEAKIAogCWlmICh0ZXN0X2JpdChTVF9SWFNUT1AsICZwb3J0cC0+c3RhdGUpKQogCQlyZXR1cm47Ci0JdHR5ID0gcG9ydHAtPnR0eTsKKwl0dHkgPSBwb3J0cC0+cG9ydC50dHk7CiAJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAKQEAgLTIzNjIsNyArMjM2Miw3IEBACiAJaWYgKGFwLT5ub3RpZnkpIHsKIAkJbnQgPSBhcC0+Y2hhbmdlZDsKIAkJYXAtPm5vdGlmeSA9IDA7Ci0JCXR0eSA9IHBvcnRwLT50dHk7CisJCXR0eSA9IHBvcnRwLT5wb3J0LnR0eTsKIAogCQlpZiAobnQuc2lnbmFsICYgU0dfRENEKSB7CiAJCQlvbGRzaWdzID0gcG9ydHAtPnNpZ3M7CkBAIC0yMzcwLDEwICsyMzcwLDEwIEBACiAJCQljbGVhcl9iaXQoU1RfR0VUU0lHUywgJnBvcnRwLT5zdGF0ZSk7CiAJCQlpZiAoKHBvcnRwLT5zaWdzICYgVElPQ01fQ0QpICYmCiAJCQkgICAgKChvbGRzaWdzICYgVElPQ01fQ0QpID09IDApKQotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydHAtPm9wZW5fd2FpdCk7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+cG9ydC5vcGVuX3dhaXQpOwogCQkJaWYgKChvbGRzaWdzICYgVElPQ01fQ0QpICYmCiAJCQkgICAgKChwb3J0cC0+c2lncyAmIFRJT0NNX0NEKSA9PSAwKSkgewotCQkJCWlmIChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkgeworCQkJCWlmIChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7CiAJCQkJCWlmICh0dHkpCiAJCQkJCQl0dHlfaGFuZ3VwKHR0eSk7CiAJCQkJfQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAKIAkJaWYgKChudC5kYXRhICYgRFRfUlhCUkVBSykgJiYgKHBvcnRwLT5yeG1hcmttc2sgJiBCUktJTlQpKSB7CiAJCQlpZiAodHR5ICE9IE5VTEwpIHsKIAkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9CUkVBSyk7Ci0JCQkJaWYgKHBvcnRwLT5mbGFncyAmIEFTWU5DX1NBSykgeworCQkJCWlmIChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX1NBSykgewogCQkJCQlkb19TQUsodHR5KTsKIAkJCQkJRUJSREVOQUJMRShicmRwKTsKIAkJCQl9CkBAIC0yNTQyLDE3ICsyNTQyLDE3IEBACiAvKgogICoJU3RhcnQgb2YgYnkgc2V0dGluZyB0aGUgYmF1ZCwgY2hhciBzaXplLCBwYXJpdHkgYW5kIHN0b3AgYml0IGluZm8uCiAgKi8KLQlwcC0+YmF1ZG91dCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnRwLT50dHkpOworCXBwLT5iYXVkb3V0ID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydHAtPnBvcnQudHR5KTsKIAlpZiAoKHRpb3NwLT5jX2NmbGFnICYgQ0JBVUQpID09IEIzODQwMCkgewotCQlpZiAoKHBvcnRwLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCisJCWlmICgocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0hJKQogCQkJcHAtPmJhdWRvdXQgPSA1NzYwMDsKLQkJZWxzZSBpZiAoKHBvcnRwLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfVkhJKQorCQllbHNlIGlmICgocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKIAkJCXBwLT5iYXVkb3V0ID0gMTE1MjAwOwotCQllbHNlIGlmICgocG9ydHAtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9TSEkpCisJCWVsc2UgaWYgKChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQogCQkJcHAtPmJhdWRvdXQgPSAyMzA0MDA7Ci0JCWVsc2UgaWYgKChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1dBUlApCisJCWVsc2UgaWYgKChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKIAkJCXBwLT5iYXVkb3V0ID0gNDYwODAwOwotCQllbHNlIGlmICgocG9ydHAtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9DVVNUKQorCQllbHNlIGlmICgocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpCiAJCQlwcC0+YmF1ZG91dCA9IChwb3J0cC0+YmF1ZF9iYXNlIC8gcG9ydHAtPmN1c3RvbV9kaXZpc29yKTsKIAl9CiAJaWYgKHBwLT5iYXVkb3V0ID4gU1RMX01BWEJBVUQpCkBAIC0yNjI1LDkgKzI2MjUsOSBAQAogICoJU2V0IHVwIGNsb2NhbCBwcm9jZXNzaW5nIGFzIHJlcXVpcmVkLgogICovCiAJaWYgKHRpb3NwLT5jX2NmbGFnICYgQ0xPQ0FMKQotCQlwb3J0cC0+ZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOworCQlwb3J0cC0+cG9ydC5mbGFncyAmPSB+QVNZTkNfQ0hFQ0tfQ0Q7CiAJZWxzZQotCQlwb3J0cC0+ZmxhZ3MgfD0gQVNZTkNfQ0hFQ0tfQ0Q7CisJCXBvcnRwLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOwogCiAvKgogICoJVHJhbnNmZXIgYW55IHBlcnNpc3RlbnQgZmxhZ3MgaW50byB0aGUgYXN5cG9ydCBzdHJ1Y3R1cmUuCkBAIC0yNzAzLDggKzI3MDMsOCBAQAogCQlwb3J0cC0+YmF1ZF9iYXNlID0gU1RMX0JBVURCQVNFOwogCQlwb3J0cC0+Y2xvc2VfZGVsYXkgPSBTVExfQ0xPU0VERUxBWTsKIAkJcG9ydHAtPmNsb3Npbmdfd2FpdCA9IDMwICogSFo7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnRwLT5vcGVuX3dhaXQpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0cC0+Y2xvc2Vfd2FpdCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnRwLT5wb3J0Lm9wZW5fd2FpdCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnRwLT5wb3J0LmNsb3NlX3dhaXQpOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0cC0+cmF3X3dhaXQpOwogCQlwYW5lbHBvcnQrKzsKIAkJaWYgKHBhbmVscG9ydCA+PSBicmRwLT5wYW5lbHNbcGFuZWxucl0pIHsKQEAgLTQyNDYsMTggKzQyNDYsMTggQEAKIAlzdGxpX2NvbXN0YXRzLnBhbmVsID0gcG9ydHAtPnBhbmVsbnI7CiAJc3RsaV9jb21zdGF0cy5wb3J0ID0gcG9ydHAtPnBvcnRucjsKIAlzdGxpX2NvbXN0YXRzLnN0YXRlID0gcG9ydHAtPnN0YXRlOwotCXN0bGlfY29tc3RhdHMuZmxhZ3MgPSBwb3J0cC0+ZmxhZ3M7CisJc3RsaV9jb21zdGF0cy5mbGFncyA9IHBvcnRwLT5wb3J0LmZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7Ci0JaWYgKHBvcnRwLT50dHkgIT0gTlVMTCkgewotCQlpZiAocG9ydHAtPnR0eS0+ZHJpdmVyX2RhdGEgPT0gcG9ydHApIHsKLQkJCXN0bGlfY29tc3RhdHMudHR5c3RhdGUgPSBwb3J0cC0+dHR5LT5mbGFnczsKKwlpZiAocG9ydHAtPnBvcnQudHR5ICE9IE5VTEwpIHsKKwkJaWYgKHBvcnRwLT5wb3J0LnR0eS0+ZHJpdmVyX2RhdGEgPT0gcG9ydHApIHsKKwkJCXN0bGlfY29tc3RhdHMudHR5c3RhdGUgPSBwb3J0cC0+cG9ydC50dHktPmZsYWdzOwogCQkJc3RsaV9jb21zdGF0cy5yeGJ1ZmZlcmVkID0gLTE7Ci0JCQlpZiAocG9ydHAtPnR0eS0+dGVybWlvcyAhPSBOVUxMKSB7Ci0JCQkJc3RsaV9jb21zdGF0cy5jZmxhZ3MgPSBwb3J0cC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCQkJCXN0bGlfY29tc3RhdHMuaWZsYWdzID0gcG9ydHAtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKLQkJCQlzdGxpX2NvbXN0YXRzLm9mbGFncyA9IHBvcnRwLT50dHktPnRlcm1pb3MtPmNfb2ZsYWc7Ci0JCQkJc3RsaV9jb21zdGF0cy5sZmxhZ3MgPSBwb3J0cC0+dHR5LT50ZXJtaW9zLT5jX2xmbGFnOworCQkJaWYgKHBvcnRwLT5wb3J0LnR0eS0+dGVybWlvcyAhPSBOVUxMKSB7CisJCQkJc3RsaV9jb21zdGF0cy5jZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJCQkJc3RsaV9jb21zdGF0cy5pZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJCQkJc3RsaV9jb21zdGF0cy5vZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfb2ZsYWc7CisJCQkJc3RsaV9jb21zdGF0cy5sZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfbGZsYWc7CiAJCQl9CiAJCX0KIAl9CkBAIC00NTk5LDggKzQ1OTksOSBAQAogCiAJaXN0YWxsaW9uX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAic3RhbGlvbWVtIik7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZShpc3RhbGxpb25fY2xhc3MsIE5VTEwsIE1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSksCi0JCQkgICAgICAic3RhbGlvbWVtJWQiLCBpKTsKKwkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGlzdGFsbGlvbl9jbGFzcywgTlVMTCwKKwkJCQkgICAgICBNS0RFVihTVExfU0lPTUVNTUFKT1IsIGkpLAorCQkJCSAgICAgIE5VTEwsICJzdGFsaW9tZW0lZCIsIGkpOwogCiAJcmV0dXJuIDA7CiBlcnJfZGVpbml0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwppbmRleCBkOWEwYTUzLi43YjNhMjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwpAQCAtNDYsNiArNDYsOCBAQAogCiBleHRlcm4gdm9pZCBjdHJsX2FsdF9kZWwodm9pZCk7CiAKKyNkZWZpbmUgdG9faGFuZGxlX2gobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBpbnB1dF9oYW5kbGUsIGhfbm9kZSkKKwogLyoKICAqIEV4cG9ydGVkIGZ1bmN0aW9ucy92YXJpYWJsZXMKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2xwLmMgYi9kcml2ZXJzL2NoYXIvbHAuYwppbmRleCA3MWFiYjRjLi4zZjI3MTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbHAuYworKysgYi9kcml2ZXJzL2NoYXIvbHAuYwpAQCAtODEzLDcgKzgxMyw4IEBACiAJaWYgKHJlc2V0KQogCQlscF9yZXNldChucik7CiAKLQlkZXZpY2VfY3JlYXRlKGxwX2NsYXNzLCBwb3J0LT5kZXYsIE1LREVWKExQX01BSk9SLCBuciksICJscCVkIiwgbnIpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShscF9jbGFzcywgcG9ydC0+ZGV2LCBNS0RFVihMUF9NQUpPUiwgbnIpLCBOVUxMLAorCQkJICAgICAgImxwJWQiLCBucik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJscCVkOiB1c2luZyAlcyAoJXMpLlxuIiwgbnIsIHBvcnQtPm5hbWUsIAogCSAgICAgICAocG9ydC0+aXJxID09IFBBUlBPUlRfSVJRX05PTkUpPyJwb2xsaW5nIjoiaW50ZXJydXB0LWRyaXZlbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IDA3MGUyMmUuLmMyZGJhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTgwLDcgKzgwLDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX05PTlBST01JU0NfREVWTUVNCisjaWZkZWYgQ09ORklHX1NUUklDVF9ERVZNRU0KIHN0YXRpYyBpbmxpbmUgaW50IHJhbmdlX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl1NjQgZnJvbSA9ICgodTY0KXBmbikgPDwgUEFHRV9TSElGVDsKQEAgLTk4OSw5ICs5ODksOSBAQAogCiAJbWVtX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAibWVtIik7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2bGlzdCk7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZShtZW1fY2xhc3MsIE5VTEwsCi0JCQkgICAgICBNS0RFVihNRU1fTUFKT1IsIGRldmxpc3RbaV0ubWlub3IpLAotCQkJICAgICAgZGV2bGlzdFtpXS5uYW1lKTsKKwkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG1lbV9jbGFzcywgTlVMTCwKKwkJCQkgICAgICBNS0RFVihNRU1fTUFKT1IsIGRldmxpc3RbaV0ubWlub3IpLAorCQkJCSAgICAgIE5VTEwsIGRldmxpc3RbaV0ubmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9taXNjLmMgYi9kcml2ZXJzL2NoYXIvbWlzYy5jCmluZGV4IDZlMTU2M2MuLjk5OWFhNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9taXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL21pc2MuYwpAQCAtMjE3LDggKzIxNyw4IEBACiAJCW1pc2NfbWlub3JzW21pc2MtPm1pbm9yID4+IDNdIHw9IDEgPDwgKG1pc2MtPm1pbm9yICYgNyk7CiAJZGV2ID0gTUtERVYoTUlTQ19NQUpPUiwgbWlzYy0+bWlub3IpOwogCi0JbWlzYy0+dGhpc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKG1pc2NfY2xhc3MsIG1pc2MtPnBhcmVudCwgZGV2LAotCQkJCQkgICIlcyIsIG1pc2MtPm5hbWUpOworCW1pc2MtPnRoaXNfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG1pc2NfY2xhc3MsIG1pc2MtPnBhcmVudCwKKwkJCQkJCSAgZGV2LCBOVUxMLCAiJXMiLCBtaXNjLT5uYW1lKTsKIAlpZiAoSVNfRVJSKG1pc2MtPnRoaXNfZGV2aWNlKSkgewogCQllcnIgPSBQVFJfRVJSKG1pc2MtPnRoaXNfZGV2aWNlKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW10aW1lci5jIGIvZHJpdmVycy9jaGFyL21tdGltZXIuYwppbmRleCAxOTI5NjFmLi45MTg3MTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbW10aW1lci5jCisrKyBiL2RyaXZlcnMvY2hhci9tbXRpbWVyLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CkBAIC01Nyw4ICs1OCw4IEBACiAKICNkZWZpbmUgcnRjX3RpbWUoKSAgICAgICAgICAgICAgKCpSVENfQ09VTlRFUl9BRERSKQogCi1zdGF0aWMgaW50IG1tdGltZXJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGxvbmcgbW10aW1lcl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgbW10aW1lcl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKIC8qCkBAIC02Nyw5ICs2OCw5IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtbXRpbWVyX2ZlbXRvcGVyaW9kID0gMDsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW10aW1lcl9mb3BzID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5tbWFwID0JCW1tdGltZXJfbW1hcCwKLQkuaW9jdGwgPQltbXRpbWVyX2lvY3RsLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5tbWFwID0JbW10aW1lcl9tbWFwLAorCS51bmxvY2tlZF9pb2N0bCA9IG1tdGltZXJfaW9jdGwsCiB9OwogCiAvKgpAQCAtMzM5LDcgKzM0MCw2IEBACiAKIC8qKgogICogbW10aW1lcl9pb2N0bCAtIGlvY3RsIGludGVyZmFjZSBmb3IgL2Rldi9tbXRpbWVyCi0gKiBAaW5vZGU6IGlub2RlIG9mIHRoZSBkZXZpY2UKICAqIEBmaWxlOiBmaWxlIHN0cnVjdHVyZSBmb3IgdGhlIGRldmljZQogICogQGNtZDogY29tbWFuZCB0byBleGVjdXRlCiAgKiBAYXJnOiBvcHRpb25hbCBhcmd1bWVudCB0byBjb21tYW5kCkBAIC0zNjUsMTEgKzM2NSwxMyBAQAogICogJU1NVElNRVJfR0VUQ09VTlRFUiAtIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUgaW4gdGhlIGNvdW50ZXIgYW5kIHBsYWNlcyBpdAogICogaW4gdGhlIGFkZHJlc3Mgc3BlY2lmaWVkIGJ5IEBhcmcuCiAgKi8KLXN0YXRpYyBpbnQgbW10aW1lcl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIG1tdGltZXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0ID0gMDsKIAorCWxvY2tfa2VybmVsKCk7CisKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgTU1USU1FUl9HRVRPRkZTRVQ6CS8qIG9mZnNldCBvZiB0aGUgY291bnRlciAqLwogCQkvKgpAQCAtMzg0LDE1ICszODYsMTQgQEAKIAljYXNlIE1NVElNRVJfR0VUUkVTOiAvKiByZXNvbHV0aW9uIG9mIHRoZSBjbG9jayBpbiAxMF4tMTUgcyAqLwogCQlpZihjb3B5X3RvX3VzZXIoKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnLAogCQkJCSZtbXRpbWVyX2ZlbXRvcGVyaW9kLCBzaXplb2YodW5zaWduZWQgbG9uZykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKIAogCWNhc2UgTU1USU1FUl9HRVRGUkVROiAvKiBmcmVxdWVuY3kgaW4gSHogKi8KIAkJaWYoY29weV90b191c2VyKCh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZywKIAkJCQkmc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kLAogCQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0ID0gMDsKKwkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCiAJY2FzZSBNTVRJTUVSX0dFVEJJVFM6IC8qIG51bWJlciBvZiBiaXRzIGluIHRoZSBjbG9jayAqLwpAQCAtNDA2LDEzICs0MDcsMTMgQEAKIAljYXNlIE1NVElNRVJfR0VUQ09VTlRFUjoKIAkJaWYoY29weV90b191c2VyKCh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZywKIAkJCQlSVENfQ09VTlRFUl9BRERSLCBzaXplb2YodW5zaWduZWQgbG9uZykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXQgPSAtRU5PU1lTOworCQlyZXQgPSAtRU5PVFRZOwogCQlicmVhazsKIAl9Ci0KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21veGEuYyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKaW5kZXggZTIxMzQ2ZC4uZDNkNzg2NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tb3hhLmMKKysrIGIvZHJpdmVycy9jaGFyL21veGEuYwpAQCAtMTMwLDE3ICsxMzAsMTMgQEAKIH07CiAKIHN0cnVjdCBtb3hhX3BvcnQgeworCXN0cnVjdCB0dHlfcG9ydCBwb3J0OwogCXN0cnVjdCBtb3hhX2JvYXJkX2NvbmYgKmJvYXJkOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdm9pZCBfX2lvbWVtICp0YWJsZUFkZHI7CiAKIAlpbnQgdHlwZTsKLQlpbnQgY2xvc2VfZGVsYXk7Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCWludCBhc3luY2ZsYWdzOwogCWludCBjZmxhZzsKIAl1bnNpZ25lZCBsb25nIHN0YXR1c2ZsYWdzOwotCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIAogCXU4IERDRFN0YXRlOwogCXU4IGxpbmVDdHJsOwpAQCAtMzQ4LDEwICszNDQsMTAgQEAKIAkJCQlpZiAoc3RhdHVzICYgNCkKIAkJCQkJdG1wLmRjZCA9IDE7CiAKLQkJCQlpZiAoIXAtPnR0eSB8fCAhcC0+dHR5LT50ZXJtaW9zKQorCQkJCWlmICghcC0+cG9ydC50dHkgfHwgIXAtPnBvcnQudHR5LT50ZXJtaW9zKQogCQkJCQl0bXAuY2ZsYWcgPSBwLT5jZmxhZzsKIAkJCQllbHNlCi0JCQkJCXRtcC5jZmxhZyA9IHAtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJCQkJdG1wLmNmbGFnID0gcC0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiBjb3B5OgogCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnbSwgJnRtcCwgc2l6ZW9mKHRtcCkpKSB7CiAJCQkJCW11dGV4X3VubG9jaygmbW94YV9vcGVubG9jayk7CkBAIC0zNzgsMTIgKzM3NCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG1veGFfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgbW94YV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKQogewogCXN0cnVjdCBtb3hhX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJbW94YWZ1bmMocG9ydC0+dGFibGVBZGRyLCBzdGF0ZSA/IEZDX1NlbmRCcmVhayA6IEZDX1N0b3BCcmVhaywKIAkJCU1hZ2ljX2NvZGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIG1veGFfb3BzID0gewpAQCAtODI1LDEwICs4MjIsOSBAQAogCX0KIAogCWZvciAoaSA9IDAsIHAgPSBicmQtPnBvcnRzOyBpIDwgTUFYX1BPUlRTX1BFUl9CT0FSRDsgaSsrLCBwKyspIHsKKwkJdHR5X3BvcnRfaW5pdCgmcC0+cG9ydCk7CiAJCXAtPnR5cGUgPSBQT1JUXzE2NTUwQTsKLQkJcC0+Y2xvc2VfZGVsYXkgPSA1ICogSFogLyAxMDsKIAkJcC0+Y2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgQ0xPQ0FMIHwgSFVQQ0w7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnAtPm9wZW5fd2FpdCk7CiAJfQogCiAJc3dpdGNoIChicmQtPmJvYXJkVHlwZSkgewpAQCAtODg0LDEyICs4ODAsMTIgQEAKIAogCS8qIHBjaSBob3QtdW4tcGx1ZyBzdXBwb3J0ICovCiAJZm9yIChhID0gMDsgYSA8IGJyZC0+bnVtUG9ydHM7IGErKykKLQkJaWYgKGJyZC0+cG9ydHNbYV0uYXN5bmNmbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQotCQkJdHR5X2hhbmd1cChicmQtPnBvcnRzW2FdLnR0eSk7CisJCWlmIChicmQtPnBvcnRzW2FdLnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKKwkJCXR0eV9oYW5ndXAoYnJkLT5wb3J0c1thXS5wb3J0LnR0eSk7CiAJd2hpbGUgKDEpIHsKIAkJb3BlbmVkID0gMDsKIAkJZm9yIChhID0gMDsgYSA8IGJyZC0+bnVtUG9ydHM7IGErKykKLQkJCWlmIChicmQtPnBvcnRzW2FdLmFzeW5jZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKKwkJCWlmIChicmQtPnBvcnRzW2FdLnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKIAkJCQlvcGVuZWQrKzsKIAkJbXV0ZXhfdW5sb2NrKCZtb3hhX29wZW5sb2NrKTsKIAkJaWYgKCFvcGVuZWQpCkBAIC0xMTA0LDkgKzExMDAsOSBAQAogewogCW1veGFfc2h1dF9kb3duKGNoKTsKIAlNb3hhUG9ydEZsdXNoRGF0YShjaCwgMik7Ci0JY2gtPmFzeW5jZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JY2gtPnR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCWNoLT50dHkgPSBOVUxMOworCWNoLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCWNoLT5wb3J0LnR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWNoLT5wb3J0LnR0eSA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgbW94YV9ibG9ja190aWxsX3JlYWR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwLApAQCAtMTExNyw3ICsxMTEzLDcgQEAKIAl1OCBkY2Q7CiAKIAl3aGlsZSAoMSkgewotCQlwcmVwYXJlX3RvX3dhaXQoJmNoLT5vcGVuX3dhaXQsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQlwcmVwYXJlX3RvX3dhaXQoJmNoLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKSB7CiAjaWZkZWYgU0VSSUFMX0RPX1JFU1RBUlQKIAkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKQEAgLTExMzgsNyArMTEzNCw3IEBACiAJCX0KIAkJc2NoZWR1bGUoKTsKIAl9Ci0JZmluaXNoX3dhaXQoJmNoLT5vcGVuX3dhaXQsICZ3YWl0KTsKKwlmaW5pc2hfd2FpdCgmY2gtPnBvcnQub3Blbl93YWl0LCAmd2FpdCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTE2MywxNiArMTE1OSwxNiBAQAogCX0KIAogCWNoID0gJmJyZC0+cG9ydHNbcG9ydCAlIE1BWF9QT1JUU19QRVJfQk9BUkRdOwotCWNoLT5jb3VudCsrOworCWNoLT5wb3J0LmNvdW50Kys7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IGNoOwotCWNoLT50dHkgPSB0dHk7Ci0JaWYgKCEoY2gtPmFzeW5jZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKKwljaC0+cG9ydC50dHkgPSB0dHk7CisJaWYgKCEoY2gtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKIAkJY2gtPnN0YXR1c2ZsYWdzID0gMDsKIAkJbW94YV9zZXRfdHR5X3BhcmFtKHR0eSwgdHR5LT50ZXJtaW9zKTsKIAkJTW94YVBvcnRMaW5lQ3RybChjaCwgMSwgMSk7CiAJCU1veGFQb3J0RW5hYmxlKGNoKTsKIAkJTW94YVNldEZpZm8oY2gsIGNoLT50eXBlID09IFBPUlRfMTY1NTBBKTsKLQkJY2gtPmFzeW5jZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CisJCWNoLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwogCX0KIAltdXRleF91bmxvY2soJm1veGFfb3BlbmxvY2spOwogCkBAIC0xMTgxLDExICsxMTc3LDExIEBACiAJCXJldHZhbCA9IG1veGFfYmxvY2tfdGlsbF9yZWFkeSh0dHksIGZpbHAsIGNoKTsKIAltdXRleF9sb2NrKCZtb3hhX29wZW5sb2NrKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWlmIChjaC0+Y291bnQpIC8qIDAgbWVhbnMgYWxyZWFkeSBodW5nIHVwLi4uICovCi0JCQlpZiAoLS1jaC0+Y291bnQgPT0gMCkKKwkJaWYgKGNoLT5wb3J0LmNvdW50KSAvKiAwIG1lYW5zIGFscmVhZHkgaHVuZyB1cC4uLiAqLworCQkJaWYgKC0tY2gtPnBvcnQuY291bnQgPT0gMCkKIAkJCQltb3hhX2Nsb3NlX3BvcnQoY2gpOwogCX0gZWxzZQotCQljaC0+YXN5bmNmbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCQljaC0+cG9ydC5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCW11dGV4X3VubG9jaygmbW94YV9vcGVubG9jayk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTIwNCwyMSArMTIwMCwyMSBAQAogCWNoID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoY2ggPT0gTlVMTCkKIAkJZ290byB1bmxvY2s7Ci0JaWYgKHR0eS0+Y291bnQgPT0gMSAmJiBjaC0+Y291bnQgIT0gMSkgeworCWlmICh0dHktPmNvdW50ID09IDEgJiYgY2gtPnBvcnQuY291bnQgIT0gMSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtb3hhX2Nsb3NlOiBiYWQgc2VyaWFsIHBvcnQgY291bnQ7ICIKLQkJCSJ0dHktPmNvdW50IGlzIDEsIGNoLT5jb3VudCBpcyAlZFxuIiwgY2gtPmNvdW50KTsKLQkJY2gtPmNvdW50ID0gMTsKKwkJCSJ0dHktPmNvdW50IGlzIDEsIGNoLT5wb3J0LmNvdW50IGlzICVkXG4iLCBjaC0+cG9ydC5jb3VudCk7CisJCWNoLT5wb3J0LmNvdW50ID0gMTsKIAl9Ci0JaWYgKC0tY2gtPmNvdW50IDwgMCkgeworCWlmICgtLWNoLT5wb3J0LmNvdW50IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtb3hhX2Nsb3NlOiBiYWQgc2VyaWFsIHBvcnQgY291bnQsICIKIAkJCSJkZXZpY2U9JXNcbiIsIHR0eS0+bmFtZSk7Ci0JCWNoLT5jb3VudCA9IDA7CisJCWNoLT5wb3J0LmNvdW50ID0gMDsKIAl9Ci0JaWYgKGNoLT5jb3VudCkKKwlpZiAoY2gtPnBvcnQuY291bnQpCiAJCWdvdG8gdW5sb2NrOwogCiAJY2gtPmNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCWlmIChjaC0+YXN5bmNmbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJaWYgKGNoLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKIAkJbW94YV9zZXR1cF9lbXB0eV9ldmVudCh0dHkpOwogCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMzAgKiBIWik7CS8qIDMwIHNlY29uZHMgdGltZW91dCAqLwogCX0KQEAgLTEzNzQsNyArMTM3MCw3IEBACiAJCXJldHVybjsKIAltb3hhX3NldF90dHlfcGFyYW0odHR5LCBvbGRfdGVybWlvcyk7CiAJaWYgKCEob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpICYmIENfQ0xPQ0FMKHR0eSkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPnBvcnQub3Blbl93YWl0KTsKIH0KIAogc3RhdGljIHZvaWQgbW94YV9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0xNDEyLDIwICsxNDA4LDIwIEBACiAJCW11dGV4X3VubG9jaygmbW94YV9vcGVubG9jayk7CiAJCXJldHVybjsKIAl9Ci0JY2gtPmNvdW50ID0gMDsKKwljaC0+cG9ydC5jb3VudCA9IDA7CiAJbW94YV9jbG9zZV9wb3J0KGNoKTsKIAltdXRleF91bmxvY2soJm1veGFfb3BlbmxvY2spOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaC0+b3Blbl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoLT5wb3J0Lm9wZW5fd2FpdCk7CiB9CiAKIHN0YXRpYyB2b2lkIG1veGFfbmV3X2RjZHN0YXRlKHN0cnVjdCBtb3hhX3BvcnQgKnAsIHU4IGRjZCkKIHsKIAlkY2QgPSAhIWRjZDsKIAotCWlmIChkY2QgIT0gcC0+RENEU3RhdGUgJiYgcC0+dHR5ICYmIENfQ0xPQ0FMKHAtPnR0eSkpIHsKKwlpZiAoZGNkICE9IHAtPkRDRFN0YXRlICYmIHAtPnBvcnQudHR5ICYmIENfQ0xPQ0FMKHAtPnBvcnQudHR5KSkgewogCQlpZiAoIWRjZCkKLQkJCXR0eV9oYW5ndXAocC0+dHR5KTsKKwkJCXR0eV9oYW5ndXAocC0+cG9ydC50dHkpOwogCX0KIAlwLT5EQ0RTdGF0ZSA9IGRjZDsKIH0KQEAgLTE0MzMsOSArMTQyOSw5IEBACiBzdGF0aWMgaW50IG1veGFfcG9sbF9wb3J0KHN0cnVjdCBtb3hhX3BvcnQgKnAsIHVuc2lnbmVkIGludCBoYW5kbGUsCiAJCXUxNiBfX2lvbWVtICppcCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcC0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwLT5wb3J0LnR0eTsKIAl2b2lkIF9faW9tZW0gKm9mc0FkZHI7Ci0JdW5zaWduZWQgaW50IGluaXRlZCA9IHAtPmFzeW5jZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRDsKKwl1bnNpZ25lZCBpbnQgaW5pdGVkID0gcC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEOwogCXUxNiBpbnRyOwogCiAJaWYgKHR0eSkgewpAQCAtMTU2Niw5ICsxNTYyLDkgQEAKIAogc3RhdGljIHZvaWQgbW94YV9zaHV0X2Rvd24oc3RydWN0IG1veGFfcG9ydCAqY2gpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnRwID0gY2gtPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHAgPSBjaC0+cG9ydC50dHk7CiAKLQlpZiAoIShjaC0+YXN5bmNmbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKKwlpZiAoIShjaC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJcmV0dXJuOwogCiAJTW94YVBvcnREaXNhYmxlKGNoKTsKQEAgLTE1ODAsNyArMTU3Niw3IEBACiAJCU1veGFQb3J0TGluZUN0cmwoY2gsIDAsIDApOwogCiAJc3Bpbl9sb2NrX2JoKCZtb3hhX2xvY2spOwotCWNoLT5hc3luY2ZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKKwljaC0+cG9ydC5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CiAJc3Bpbl91bmxvY2tfYmgoJm1veGFfbG9jayk7CiB9CiAKQEAgLTE5NzUsNyArMTk3MSw3IEBACiAJYyA9IChoZWFkID4gdGFpbCkgPyAoaGVhZCAtIHRhaWwgLSAxKSA6IChoZWFkIC0gdGFpbCArIHR4X21hc2spOwogCWlmIChjID4gbGVuKQogCQljID0gbGVuOwotCW1veGFMb2cudHhjbnRbcG9ydC0+dHR5LT5pbmRleF0gKz0gYzsKKwltb3hhTG9nLnR4Y250W3BvcnQtPnBvcnQudHR5LT5pbmRleF0gKz0gYzsKIAl0b3RhbCA9IGM7CiAJaWYgKHNwYWdlID09IGVwYWdlKSB7CiAJCWJ1ZmhlYWQgPSByZWFkdyhvZnNBZGRyICsgT2ZzX3R4Yik7CkBAIC0yMDE3LDcgKzIwMTMsNyBAQAogCiBzdGF0aWMgaW50IE1veGFQb3J0UmVhZERhdGEoc3RydWN0IG1veGFfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBjaGFyICpkc3Q7CiAJdm9pZCBfX2lvbWVtICpiYXNlQWRkciwgKm9mc0FkZHIsICpvZnM7CiAJdW5zaWduZWQgaW50IGNvdW50LCBsZW4sIHRvdGFsOwpAQCAtMjEyNCwxMCArMjEyMCwxMCBAQAogewogCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcCA9IHsKIAkJLnR5cGUgPSBpbmZvLT50eXBlLAotCQkubGluZSA9IGluZm8tPnR0eS0+aW5kZXgsCi0JCS5mbGFncyA9IGluZm8tPmFzeW5jZmxhZ3MsCisJCS5saW5lID0gaW5mby0+cG9ydC50dHktPmluZGV4LAorCQkuZmxhZ3MgPSBpbmZvLT5wb3J0LmZsYWdzLAogCQkuYmF1ZF9iYXNlID0gOTIxNjAwLAotCQkuY2xvc2VfZGVsYXkgPSBpbmZvLT5jbG9zZV9kZWxheQorCQkuY2xvc2VfZGVsYXkgPSBpbmZvLT5wb3J0LmNsb3NlX2RlbGF5CiAJfTsKIAlyZXR1cm4gY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZigqcmV0aW5mbykpID8gLUVGQVVMVCA6IDA7CiB9CkBAIC0yMTQ4LDEzICsyMTQ0LDEzIEBACiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkJaWYgKCgobmV3X3NlcmlhbC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgIT0KLQkJICAgICAoaW5mby0+YXN5bmNmbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQorCQkgICAgIChpbmZvLT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCX0gZWxzZQotCQlpbmZvLT5jbG9zZV9kZWxheSA9IG5ld19zZXJpYWwuY2xvc2VfZGVsYXkgKiBIWiAvIDEwMDsKKwkJaW5mby0+cG9ydC5jbG9zZV9kZWxheSA9IG5ld19zZXJpYWwuY2xvc2VfZGVsYXkgKiBIWiAvIDEwMDsKIAogCW5ld19zZXJpYWwuZmxhZ3MgPSAobmV3X3NlcmlhbC5mbGFncyAmIH5BU1lOQ19GTEFHUyk7Ci0JbmV3X3NlcmlhbC5mbGFncyB8PSAoaW5mby0+YXN5bmNmbGFncyAmIEFTWU5DX0ZMQUdTKTsKKwluZXdfc2VyaWFsLmZsYWdzIHw9IChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfRkxBR1MpOwogCiAJTW94YVNldEZpZm8oaW5mbywgbmV3X3NlcmlhbC50eXBlID09IFBPUlRfMTY1NTBBKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL214c2VyLmMgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwppbmRleCA0YjgxYTg1Li40Yzc1NmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXhzZXIuYworKysgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwpAQCAtNDcsNyArNDcsNyBAQAogCiAjaW5jbHVkZSAibXhzZXIuaCIKIAotI2RlZmluZQlNWFNFUl9WRVJTSU9OCSIyLjAuMyIJCS8qIDEuMTEgKi8KKyNkZWZpbmUJTVhTRVJfVkVSU0lPTgkiMi4wLjQiCQkvKiAxLjEyICovCiAjZGVmaW5lCU1YU0VSTUFKT1IJIDE3NAogI2RlZmluZQlNWFNFUkNVTUFKT1IJIDE3NQogCkBAIC03MSwxMiArNzEsMTMgQEAKICNkZWZpbmUgVUFSVF9NQ1JfQUZFCQkweDIwCiAjZGVmaW5lIFVBUlRfTFNSX1NQRUNJQUwJMHgxRQogCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUE9TMTA0VUwJMHgxMDQ0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0IxMDgJMHgxMDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1AxMDJVRgkweDEwMjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DQjExNAkweDExNDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DUDExNFVMCTB4MTE0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NCMTM0SQkweDEzNDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DUDEzOFUJMHgxMzgwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfUE9TMTA0VUwJMHgxMDQ0CiAKIAogI2RlZmluZSBDMTY4X0FTSUNfSUQgICAgMQpAQCAtMTQyLDcgKzE0Myw4IEBACiAJeyAiQ0ItMTM0SSBzZXJpZXMiLAk0LCB9LAogCXsgIkNQLTEzOFUgc2VyaWVzIiwJOCwgfSwKIAl7ICJQT1MtMTA0VUwgc2VyaWVzIiwJNCwgfSwKLQl7ICJDUC0xMTRVTCBzZXJpZXMiLAk0LCB9CisJeyAiQ1AtMTE0VUwgc2VyaWVzIiwJNCwgfSwKKy8qMzAqLwl7ICJDUC0xMDJVRiBzZXJpZXMiLAkyLCB9CiB9OwogCiAvKiBkcml2ZXJfZGF0YSBjb3JyZXNwb25kIHRvIHRoZSBsaW5lcyBpbiB0aGUgc3RydWN0dXJlIGFib3ZlCkBAIC0xNzIsNiArMTc0LDcgQEAKIAl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfQ1AxMzhVKSwJLmRyaXZlcl9kYXRhID0gMjcgfSwKIAl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfUE9TMTA0VUwpLAkuZHJpdmVyX2RhdGEgPSAyOCB9LAogCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9DUDExNFVMKSwJLmRyaXZlcl9kYXRhID0gMjkgfSwKKwl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfQ1AxMDJVRiksCS5kcml2ZXJfZGF0YSA9IDMwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG14c2VyX3BjaWJyZHMpOwpAQCAtMjIyLDggKzIyNSw4IEBACiBzdHJ1Y3QgbXhzZXJfYm9hcmQ7CiAKIHN0cnVjdCBteHNlcl9wb3J0IHsKKwlzdHJ1Y3QgdHR5X3BvcnQgcG9ydDsKIAlzdHJ1Y3QgbXhzZXJfYm9hcmQgKmJvYXJkOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKIAl1bnNpZ25lZCBsb25nIGlvYWRkcjsKIAl1bnNpZ25lZCBsb25nIG9wbW9kZV9pb2FkZHI7CkBAIC0yMzQsNyArMjM3LDYgQEAKIAlpbnQgcnhfbG93X3dhdGVyOwogCWludCBiYXVkX2Jhc2U7CQkvKiBtYXguIHNwZWVkICovCiAJaW50IHR5cGU7CQkvKiBVQVJUIHR5cGUgKi8KLQlpbnQgZmxhZ3M7CQkvKiBkZWZpbmVkIGluIHR0eS5oICovCiAKIAlpbnQgeF9jaGFyOwkJLyogeG9uL3hvZmYgY2hhcmFjdGVyICovCiAJaW50IElFUjsJCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KQEAgLTI0NCwyMCArMjQ2LDE0IEBACiAJdW5zaWduZWQgY2hhciBsZGlzY19zdG9wX3J4OwogCiAJaW50IGN1c3RvbV9kaXZpc29yOwotCWludCBjbG9zZV9kZWxheTsKLQl1bnNpZ25lZCBzaG9ydCBjbG9zaW5nX3dhaXQ7CiAJdW5zaWduZWQgY2hhciBlcnJfc2hhZG93OwotCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CiAKLQlpbnQgY291bnQ7CQkvKiAjIG9mIGZkIG9uIGRldmljZSAqLwotCWludCBibG9ja2VkX29wZW47CS8qICMgb2YgYmxvY2tlZCBvcGVucyAqLwogCXN0cnVjdCBhc3luY19pY291bnQgaWNvdW50OyAvKiBrZXJuZWwgY291bnRlcnMgZm9yIDQgaW5wdXQgaW50ZXJydXB0cyAqLwogCWludCB0aW1lb3V0OwogCiAJaW50IHJlYWRfc3RhdHVzX21hc2s7CiAJaW50IGlnbm9yZV9zdGF0dXNfbWFzazsKIAlpbnQgeG1pdF9maWZvX3NpemU7Ci0JdW5zaWduZWQgY2hhciAqeG1pdF9idWY7CiAJaW50IHhtaXRfaGVhZDsKIAlpbnQgeG1pdF90YWlsOwogCWludCB4bWl0X2NudDsKQEAgLTI2Nyw3ICsyNjMsNiBAQAogCXN0cnVjdCBteHNlcl9tb24gbW9uX2RhdGE7CiAKIAlzcGlubG9ja190IHNsb2NrOwotCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsKIH07CiAKQEAgLTU3NSw3ICs1NzAsNyBAQAogCSAqLwogCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8CiAJCQl0ZXN0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKSkgewotCQlwb3J0LT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCQlwb3J0LT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTg1LDMyICs1ODAsMzIgQEAKIAkvKgogCSAqIEJsb2NrIHdhaXRpbmcgZm9yIHRoZSBjYXJyaWVyIGRldGVjdCBhbmQgdGhlIGxpbmUgdG8gYmVjb21lCiAJICogZnJlZSAoaS5lLiwgbm90IGluIHVzZSBieSB0aGUgY2FsbG91dCkuICBXaGlsZSB3ZSBhcmUgaW4KLQkgKiB0aGlzIGxvb3AsIHBvcnQtPmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0CisJICogdGhpcyBsb29wLCBwb3J0LT5wb3J0LmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0CiAJICogbXhzZXJfY2xvc2UoKSBrbm93cyB3aGVuIHRvIGZyZWUgdGhpbmdzLiAgV2UgcmVzdG9yZSBpdCB1cG9uCiAJICogZXhpdCwgZWl0aGVyIG5vcm1hbCBvciBhYm5vcm1hbC4KIAkgKi8KIAlyZXR2YWwgPSAwOwotCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT5vcGVuX3dhaXQsICZ3YWl0KTsKKwlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQsICZ3YWl0KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5zbG9jaywgZmxhZ3MpOwogCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJcG9ydC0+Y291bnQtLTsKKwkJcG9ydC0+cG9ydC5jb3VudC0tOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnNsb2NrLCBmbGFncyk7Ci0JcG9ydC0+YmxvY2tlZF9vcGVuKys7CisJcG9ydC0+cG9ydC5ibG9ja2VkX29wZW4rKzsKIAl3aGlsZSAoMSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+c2xvY2ssIGZsYWdzKTsKIAkJb3V0YihpbmIocG9ydC0+aW9hZGRyICsgVUFSVF9NQ1IpIHwKIAkJCVVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUywgcG9ydC0+aW9hZGRyICsgVUFSVF9NQ1IpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5zbG9jaywgZmxhZ3MpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAhKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7Ci0JCQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQorCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAhKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKKwkJCWlmIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKIAkJCQlyZXR2YWwgPSAtRUFHQUlOOwogCQkJZWxzZQogCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmICghKHBvcnQtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYKKwkJaWYgKCEocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmCiAJCQkJKGRvX2Nsb2NhbCB8fAogCQkJCShpbmIocG9ydC0+aW9hZGRyICsgVUFSVF9NU1IpICYgVUFSVF9NU1JfRENEKSkpCiAJCQlicmVhazsKQEAgLTYyMSwxMyArNjE2LDEzIEBACiAJCXNjaGVkdWxlKCk7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnBvcnQtPm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJcG9ydC0+Y291bnQrKzsKLQlwb3J0LT5ibG9ja2VkX29wZW4tLTsKKwkJcG9ydC0+cG9ydC5jb3VudCsrOworCXBvcnQtPnBvcnQuYmxvY2tlZF9vcGVuLS07CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLQlwb3J0LT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCXBvcnQtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjM2LDcgKzYzMSw3IEBACiAJaW50IHF1b3QgPSAwLCBiYXVkOwogCXVuc2lnbmVkIGNoYXIgY3ZhbDsKIAotCWlmICghaW5mby0+dHR5IHx8ICFpbmZvLT50dHktPnRlcm1pb3MpCisJaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAhaW5mby0+cG9ydC50dHktPnRlcm1pb3MpCiAJCXJldHVybiAtMTsKIAogCWlmICghKGluZm8tPmlvYWRkcikpCkBAIC02NDcsMTMgKzY0MiwxMyBAQAogCiAJaWYgKG5ld3NwZCA9PSAxMzQpIHsKIAkJcXVvdCA9IDIgKiBpbmZvLT5iYXVkX2Jhc2UgLyAyNjk7Ci0JCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKGluZm8tPnR0eSwgMTM0LCAxMzQpOworCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShpbmZvLT5wb3J0LnR0eSwgMTM0LCAxMzQpOwogCX0gZWxzZSBpZiAobmV3c3BkKSB7CiAJCXF1b3QgPSBpbmZvLT5iYXVkX2Jhc2UgLyBuZXdzcGQ7CiAJCWlmIChxdW90ID09IDApCiAJCQlxdW90ID0gMTsKIAkJYmF1ZCA9IGluZm8tPmJhdWRfYmFzZS9xdW90OwotCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShpbmZvLT50dHksIGJhdWQsIGJhdWQpOworCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShpbmZvLT5wb3J0LnR0eSwgYmF1ZCwgYmF1ZCk7CiAJfSBlbHNlIHsKIAkJcXVvdCA9IDA7CiAJfQpAQCAtNjc5LDcgKzY3NCw3IEBACiAJb3V0YihjdmFsLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUik7CS8qIHJlc2V0IERMQUIgKi8KIAogI2lmZGVmIEJPVEhFUgotCWlmIChDX0JBVUQoaW5mby0+dHR5KSA9PSBCT1RIRVIpIHsKKwlpZiAoQ19CQVVEKGluZm8tPnBvcnQudHR5KSA9PSBCT1RIRVIpIHsKIAkJcXVvdCA9IGluZm8tPmJhdWRfYmFzZSAlIG5ld3NwZDsKIAkJcXVvdCAqPSA4OwogCQlpZiAocXVvdCAlIG5ld3NwZCA+IG5ld3NwZCAvIDIpIHsKQEAgLTcwNywxNCArNzAyLDE0IEBACiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgY2hhciBzdGF0dXM7CiAKLQlpZiAoIWluZm8tPnR0eSB8fCAhaW5mby0+dHR5LT50ZXJtaW9zKQorCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQogCQlyZXR1cm4gcmV0OwotCWNmbGFnID0gaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJaWYgKCEoaW5mby0+aW9hZGRyKSkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChteHNlcl9zZXRfYmF1ZF9tZXRob2RbaW5mby0+dHR5LT5pbmRleF0gPT0gMCkKLQkJbXhzZXJfc2V0X2JhdWQoaW5mbywgdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+dHR5KSk7CisJaWYgKG14c2VyX3NldF9iYXVkX21ldGhvZFtpbmZvLT5wb3J0LnR0eS0+aW5kZXhdID09IDApCisJCW14c2VyX3NldF9iYXVkKGluZm8sIHR0eV9nZXRfYmF1ZF9yYXRlKGluZm8tPnBvcnQudHR5KSk7CiAKIAkvKiBieXRlIHNpemUgYW5kIHBhcml0eSAqLwogCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewpAQCAtNzc3LDE1ICs3NzIsMTUgQEAKIAlpbmZvLT5JRVIgJj0gflVBUlRfSUVSX01TSTsKIAlpbmZvLT5NQ1IgJj0gflVBUlRfTUNSX0FGRTsKIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0JCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOworCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOwogCQlpbmZvLT5JRVIgfD0gVUFSVF9JRVJfTVNJOwogCQlpZiAoKGluZm8tPnR5cGUgPT0gUE9SVF8xNjU1MEEpIHx8IChpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKSkgewogCQkJaW5mby0+TUNSIHw9IFVBUlRfTUNSX0FGRTsKIAkJfSBlbHNlIHsKIAkJCXN0YXR1cyA9IGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX01TUik7Ci0JCQlpZiAoaW5mby0+dHR5LT5od19zdG9wcGVkKSB7CisJCQlpZiAoaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQpIHsKIAkJCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfQ1RTKSB7Ci0JCQkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQkJCWluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkID0gMDsKIAkJCQkJaWYgKGluZm8tPnR5cGUgIT0gUE9SVF8xNjU1MEEgJiYKIAkJCQkJCQkhaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykgewogCQkJCQkJb3V0YihpbmZvLT5JRVIgJiB+VUFSVF9JRVJfVEhSSSwKQEAgLTc5NSwxMSArNzkwLDExIEBACiAJCQkJCQlvdXRiKGluZm8tPklFUiwgaW5mby0+aW9hZGRyICsKIAkJCQkJCQkJVUFSVF9JRVIpOwogCQkJCQl9Ci0JCQkJCXR0eV93YWtldXAoaW5mby0+dHR5KTsKKwkJCQkJdHR5X3dha2V1cChpbmZvLT5wb3J0LnR0eSk7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlpZiAoIShzdGF0dXMgJiBVQVJUX01TUl9DVFMpKSB7Ci0JCQkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCQkJCWluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkID0gMTsKIAkJCQkJaWYgKChpbmZvLT50eXBlICE9IFBPUlRfMTY1NTBBKSAmJgogCQkJCQkJCSghaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykpIHsKIAkJCQkJCWluZm8tPklFUiAmPSB+VUFSVF9JRVJfVEhSSTsKQEAgLTgxMCwxMyArODA1LDEzIEBACiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfQ1RTX0ZMT1c7CisJCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0NUU19GTE9XOwogCX0KIAlvdXRiKGluZm8tPk1DUiwgaW5mby0+aW9hZGRyICsgVUFSVF9NQ1IpOwogCWlmIChjZmxhZyAmIENMT0NBTCkgewotCQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfQ0hFQ0tfQ0Q7CisJCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwogCX0gZWxzZSB7Ci0JCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOworCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOwogCQlpbmZvLT5JRVIgfD0gVUFSVF9JRVJfTVNJOwogCX0KIAlvdXRiKGluZm8tPklFUiwgaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpOwpAQCAtODI1LDIxICs4MjAsMjEgQEAKIAkgKiBTZXQgdXAgcGFyaXR5IGNoZWNrIGZsYWcKIAkgKi8KIAlpbmZvLT5yZWFkX3N0YXR1c19tYXNrID0gVUFSVF9MU1JfT0UgfCBVQVJUX0xTUl9USFJFIHwgVUFSVF9MU1JfRFI7Ci0JaWYgKElfSU5QQ0soaW5mby0+dHR5KSkKKwlpZiAoSV9JTlBDSyhpbmZvLT5wb3J0LnR0eSkpCiAJCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9MU1JfRkUgfCBVQVJUX0xTUl9QRTsKLQlpZiAoSV9CUktJTlQoaW5mby0+dHR5KSB8fCBJX1BBUk1SSyhpbmZvLT50dHkpKQorCWlmIChJX0JSS0lOVChpbmZvLT5wb3J0LnR0eSkgfHwgSV9QQVJNUksoaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX0JJOwogCiAJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKIAotCWlmIChJX0lHTkJSSyhpbmZvLT50dHkpKSB7CisJaWYgKElfSUdOQlJLKGluZm8tPnBvcnQudHR5KSkgewogCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVUFSVF9MU1JfQkk7CiAJCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9MU1JfQkk7CiAJCS8qCiAJCSAqIElmIHdlJ3JlIGlnbm9yZSBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsIGlnbm9yZQogCQkgKiBvdmVycnVucyB0b28uICAoRm9yIHJlYWwgcmF3IHN1cHBvcnQpLgogCQkgKi8KLQkJaWYgKElfSUdOUEFSKGluZm8tPnR0eSkpIHsKKwkJaWYgKElfSUdOUEFSKGluZm8tPnBvcnQudHR5KSkgewogCQkJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrIHw9CiAJCQkJCQlVQVJUX0xTUl9PRSB8CiAJCQkJCQlVQVJUX0xTUl9QRSB8CkBAIC04NTEsMTYgKzg0NiwxNiBAQAogCQl9CiAJfQogCWlmIChpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKSB7Ci0JCW14c2VyX3NldF9tdXN0X3hvbjFfdmFsdWUoaW5mby0+aW9hZGRyLCBTVEFSVF9DSEFSKGluZm8tPnR0eSkpOwotCQlteHNlcl9zZXRfbXVzdF94b2ZmMV92YWx1ZShpbmZvLT5pb2FkZHIsIFNUT1BfQ0hBUihpbmZvLT50dHkpKTsKLQkJaWYgKElfSVhPTihpbmZvLT50dHkpKSB7CisJCW14c2VyX3NldF9tdXN0X3hvbjFfdmFsdWUoaW5mby0+aW9hZGRyLCBTVEFSVF9DSEFSKGluZm8tPnBvcnQudHR5KSk7CisJCW14c2VyX3NldF9tdXN0X3hvZmYxX3ZhbHVlKGluZm8tPmlvYWRkciwgU1RPUF9DSEFSKGluZm8tPnBvcnQudHR5KSk7CisJCWlmIChJX0lYT04oaW5mby0+cG9ydC50dHkpKSB7CiAJCQlteHNlcl9lbmFibGVfbXVzdF9yeF9zb2Z0d2FyZV9mbG93X2NvbnRyb2woCiAJCQkJCWluZm8tPmlvYWRkcik7CiAJCX0gZWxzZSB7CiAJCQlteHNlcl9kaXNhYmxlX211c3Rfcnhfc29mdHdhcmVfZmxvd19jb250cm9sKAogCQkJCQlpbmZvLT5pb2FkZHIpOwogCQl9Ci0JCWlmIChJX0lYT0ZGKGluZm8tPnR0eSkpIHsKKwkJaWYgKElfSVhPRkYoaW5mby0+cG9ydC50dHkpKSB7CiAJCQlteHNlcl9lbmFibGVfbXVzdF90eF9zb2Z0d2FyZV9mbG93X2NvbnRyb2woCiAJCQkJCWluZm8tPmlvYWRkcik7CiAJCX0gZWxzZSB7CkBAIC04OTAsMTUgKzg4NSwxNSBAQAogCXBvcnQtPm1vbl9kYXRhLm1vZGVtX3N0YXR1cyA9IHN0YXR1czsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmRlbHRhX21zcl93YWl0KTsKIAotCWlmICgocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkgJiYgKHN0YXR1cyAmIFVBUlRfTVNSX0REQ0QpKSB7CisJaWYgKChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpICYmIChzdGF0dXMgJiBVQVJUX01TUl9ERENEKSkgewogCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRENEKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCk7CiAJfQogCi0JaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpIHsKLQkJaWYgKHBvcnQtPnR0eS0+aHdfc3RvcHBlZCkgeworCWlmIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpIHsKKwkJaWYgKHBvcnQtPnBvcnQudHR5LT5od19zdG9wcGVkKSB7CiAJCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfQ1RTKSB7Ci0JCQkJcG9ydC0+dHR5LT5od19zdG9wcGVkID0gMDsKKwkJCQlwb3J0LT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDA7CiAKIAkJCQlpZiAoKHBvcnQtPnR5cGUgIT0gUE9SVF8xNjU1MEEpICYmCiAJCQkJCQkoIXBvcnQtPmJvYXJkLT5jaGlwX2ZsYWcpKSB7CkBAIC05MDgsMTEgKzkwMywxMSBAQAogCQkJCQlvdXRiKHBvcnQtPklFUiwgcG9ydC0+aW9hZGRyICsKIAkJCQkJCQlVQVJUX0lFUik7CiAJCQkJfQotCQkJCXR0eV93YWtldXAocG9ydC0+dHR5KTsKKwkJCQl0dHlfd2FrZXVwKHBvcnQtPnBvcnQudHR5KTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICghKHN0YXR1cyAmIFVBUlRfTVNSX0NUUykpIHsKLQkJCQlwb3J0LT50dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCXBvcnQtPnBvcnQudHR5LT5od19zdG9wcGVkID0gMTsKIAkJCQlpZiAocG9ydC0+dHlwZSAhPSBQT1JUXzE2NTUwQSAmJgogCQkJCQkJIXBvcnQtPmJvYXJkLT5jaGlwX2ZsYWcpIHsKIAkJCQkJcG9ydC0+SUVSICY9IH5VQVJUX0lFUl9USFJJOwpAQCAtOTM1LDIzICs5MzAsMjMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCi0JaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKKwlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCWZyZWVfcGFnZShwYWdlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFpbmZvLT5pb2FkZHIgfHwgIWluZm8tPnR5cGUpIHsKLQkJaWYgKGluZm8tPnR0eSkKLQkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisJCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKIAkJZnJlZV9wYWdlKHBhZ2UpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKGluZm8tPnhtaXRfYnVmKQorCWlmIChpbmZvLT5wb3J0LnhtaXRfYnVmKQogCQlmcmVlX3BhZ2UocGFnZSk7CiAJZWxzZQotCQlpbmZvLT54bWl0X2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHBhZ2U7CisJCWluZm8tPnBvcnQueG1pdF9idWYgPSAodW5zaWduZWQgY2hhciAqKSBwYWdlOwogCiAJLyoKIAkgKiBDbGVhciB0aGUgRklGTyBidWZmZXJzIGFuZCBkaXNhYmxlIHRoZW0KQEAgLTk3Myw4ICs5NjgsOCBAQAogCWlmIChpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9MU1IpID09IDB4ZmYpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKIAkJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJCWlmIChpbmZvLT50dHkpCi0JCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwkJCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEwMTIsMTUgKzEwMDcsMTUgQEAKIAkodm9pZCkgaW5iKGluZm8tPmlvYWRkciArIFVBUlRfSUlSKTsKIAkodm9pZCkgaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTVNSKTsKIAotCWlmIChpbmZvLT50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKIAogCS8qCiAJICogYW5kIHNldCB0aGUgc3BlZWQgb2YgdGhlIHNlcmlhbCBwb3J0CiAJICovCiAJbXhzZXJfY2hhbmdlX3NwZWVkKGluZm8sIE5VTEwpOwotCWluZm8tPmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOworCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMTAzNCw3ICsxMDI5LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCisJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CkBAIC0xMDQ4LDE1ICsxMDQzLDE1IEBACiAJLyoKIAkgKiBGcmVlIHRoZSBJUlEsIGlmIG5lY2Vzc2FyeQogCSAqLwotCWlmIChpbmZvLT54bWl0X2J1ZikgewotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGluZm8tPnhtaXRfYnVmKTsKLQkJaW5mby0+eG1pdF9idWYgPSBOVUxMOworCWlmIChpbmZvLT5wb3J0LnhtaXRfYnVmKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaW5mby0+cG9ydC54bWl0X2J1Zik7CisJCWluZm8tPnBvcnQueG1pdF9idWYgPSBOVUxMOwogCX0KIAogCWluZm8tPklFUiA9IDA7CiAJb3V0YigweDAwLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0lFUik7CiAKLQlpZiAoIWluZm8tPnR0eSB8fCAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKQorCWlmICghaW5mby0+cG9ydC50dHkgfHwgKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKQogCQlpbmZvLT5NQ1IgJj0gfihVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9SVFMpOwogCW91dGIoaW5mby0+TUNSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX01DUik7CiAKQEAgLTEwNzIsMTAgKzEwNjcsMTAgQEAKIAkvKiByZWFkIGRhdGEgcG9ydCB0byByZXNldCB0aGluZ3MgKi8KIAkodm9pZCkgaW5iKGluZm8tPmlvYWRkciArIFVBUlRfUlgpOwogCi0JaWYgKGluZm8tPnR0eSkKLQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKIAotCWluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKKwlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKIAogCWlmIChpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKQogCQlTRVRfTU9YQV9NVVNUX05PX1NPRlRXQVJFX0ZMT1dfQ09OVFJPTChpbmZvLT5pb2FkZHIpOwpAQCAtMTEwNSwxMiArMTEwMCwxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXR0eS0+ZHJpdmVyX2RhdGEgPSBpbmZvOwotCWluZm8tPnR0eSA9IHR0eTsKKwlpbmZvLT5wb3J0LnR0eSA9IHR0eTsKIAkvKgogCSAqIFN0YXJ0IHVwIHNlcmlhbCBwb3J0CiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7Ci0JaW5mby0+Y291bnQrKzsKKwlpbmZvLT5wb3J0LmNvdW50Kys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKIAlyZXR2YWwgPSBteHNlcl9zdGFydHVwKGluZm8pOwogCWlmIChyZXR2YWwpCkBAIC0xMTcwLDQyICsxMTY1LDQyIEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKCh0dHktPmNvdW50ID09IDEpICYmIChpbmZvLT5jb3VudCAhPSAxKSkgeworCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAoaW5mby0+cG9ydC5jb3VudCAhPSAxKSkgewogCQkvKgogCQkgKiBVaCwgb2guICB0dHktPmNvdW50IGlzIDEsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHR0eQotCQkgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4gIEluZm8tPmNvdW50IHNob3VsZCBhbHdheXMKKwkJICogc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQuICBJbmZvLT5wb3J0LmNvdW50IHNob3VsZCBhbHdheXMKIAkJICogYmUgb25lIGluIHRoZXNlIGNvbmRpdGlvbnMuICBJZiBpdCdzIGdyZWF0ZXIgdGhhbgogCQkgKiBvbmUsIHdlJ3ZlIGdvdCByZWFsIHByb2JsZW1zLCBzaW5jZSBpdCBtZWFucyB0aGUKIAkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCiAJCSAqLwogCQlwcmludGsoS0VSTl9FUlIgIm14c2VyX2Nsb3NlOiBiYWQgc2VyaWFsIHBvcnQgY291bnQ7ICIKLQkJCSJ0dHktPmNvdW50IGlzIDEsIGluZm8tPmNvdW50IGlzICVkXG4iLCBpbmZvLT5jb3VudCk7Ci0JCWluZm8tPmNvdW50ID0gMTsKKwkJCSJ0dHktPmNvdW50IGlzIDEsIGluZm8tPnBvcnQuY291bnQgaXMgJWRcbiIsIGluZm8tPnBvcnQuY291bnQpOworCQlpbmZvLT5wb3J0LmNvdW50ID0gMTsKIAl9Ci0JaWYgKC0taW5mby0+Y291bnQgPCAwKSB7CisJaWYgKC0taW5mby0+cG9ydC5jb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJteHNlcl9jbG9zZTogYmFkIHNlcmlhbCBwb3J0IGNvdW50IGZvciAiCi0JCQkidHR5cyVkOiAlZFxuIiwgdHR5LT5pbmRleCwgaW5mby0+Y291bnQpOwotCQlpbmZvLT5jb3VudCA9IDA7CisJCQkidHR5cyVkOiAlZFxuIiwgdHR5LT5pbmRleCwgaW5mby0+cG9ydC5jb3VudCk7CisJCWluZm8tPnBvcnQuY291bnQgPSAwOwogCX0KLQlpZiAoaW5mby0+Y291bnQpIHsKKwlpZiAoaW5mby0+cG9ydC5jb3VudCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQotCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CisJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBTYXZlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSwgc2luY2UgdGhpcyBwb3J0IG1heSBoYXZlCiAJICogc2VwYXJhdGUgdGVybWlvcyBmb3IgY2FsbG91dCBhbmQgZGlhbGluLgogCSAqLwotCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX05PUk1BTF9BQ1RJVkUpCisJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19OT1JNQUxfQUNUSVZFKQogCQlpbmZvLT5ub3JtYWxfdGVybWlvcyA9ICp0dHktPnRlcm1pb3M7CiAJLyoKIAkgKiBOb3cgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0IGJ1ZmZlciB0byBjbGVhcjsgYW5kIHdlIG5vdGlmeQogCSAqIHRoZSBsaW5lIGRpc2NpcGxpbmUgdG8gb25seSBwcm9jZXNzIFhPTi9YT0ZGIGNoYXJhY3RlcnMuCiAJICovCiAJdHR5LT5jbG9zaW5nID0gMTsKLQlpZiAoaW5mby0+Y2xvc2luZ193YWl0ICE9IEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FKQotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgaW5mby0+Y2xvc2luZ193YWl0KTsKKwlpZiAoaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQgIT0gQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUpCisJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCk7CiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50IHdlIHN0b3AgYWNjZXB0aW5nIGlucHV0LiAgVG8gZG8gdGhpcywgd2UKIAkgKiBkaXNhYmxlIHRoZSByZWNlaXZlIGxpbmUgc3RhdHVzIGludGVycnVwdHMsIGFuZCB0ZWxsIHRoZQpAQCAtMTIxNiw3ICsxMjExLDcgQEAKIAlpZiAoaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykKIAkJaW5mby0+SUVSICY9IH5NT1hBX01VU1RfUkVDVl9JU1I7CiAKLQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgeworCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKIAkJb3V0YihpbmZvLT5JRVIsIGluZm8tPmlvYWRkciArIFVBUlRfSUVSKTsKIAkJLyoKIAkJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKQEAgLTEyMzYsMTUgKzEyMzEsMTQgQEAKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JaW5mby0+ZXZlbnQgPSAwOwotCWluZm8tPnR0eSA9IE5VTEw7Ci0JaWYgKGluZm8tPmJsb2NrZWRfb3BlbikgewotCQlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpCi0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoaW5mby0+Y2xvc2VfZGVsYXkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOworCWlmIChpbmZvLT5wb3J0LmJsb2NrZWRfb3BlbikgeworCQlpZiAoaW5mby0+cG9ydC5jbG9zZV9kZWxheSkKKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShpbmZvLT5wb3J0LmNsb3NlX2RlbGF5KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAJfQogCi0JaW5mby0+ZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFIHwgQVNZTkNfQ0xPU0lORyk7CisJaW5mby0+cG9ydC5mbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkUgfCBBU1lOQ19DTE9TSU5HKTsKIH0KIAogc3RhdGljIGludCBteHNlcl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKQEAgLTEyNTMsNyArMTI0Nyw3IEBACiAJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWluZm8tPnhtaXRfYnVmKQorCWlmICghaW5mby0+cG9ydC54bWl0X2J1ZikKIAkJcmV0dXJuIDA7CiAKIAl3aGlsZSAoMSkgewpAQCAtMTI2Miw3ICsxMjU2LDcgQEAKIAkJaWYgKGMgPD0gMCkKIAkJCWJyZWFrOwogCi0JCW1lbWNweShpbmZvLT54bWl0X2J1ZiArIGluZm8tPnhtaXRfaGVhZCwgYnVmLCBjKTsKKwkJbWVtY3B5KGluZm8tPnBvcnQueG1pdF9idWYgKyBpbmZvLT54bWl0X2hlYWQsIGJ1ZiwgYyk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCQlpbmZvLT54bWl0X2hlYWQgPSAoaW5mby0+eG1pdF9oZWFkICsgYykgJgogCQkJCSAgKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKQEAgLTEyOTQsMTQgKzEyODgsMTQgQEAKIAlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghaW5mby0+eG1pdF9idWYpCisJaWYgKCFpbmZvLT5wb3J0LnhtaXRfYnVmKQogCQlyZXR1cm4gMDsKIAogCWlmIChpbmZvLT54bWl0X2NudCA+PSBTRVJJQUxfWE1JVF9TSVpFIC0gMSkKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKLQlpbmZvLT54bWl0X2J1ZltpbmZvLT54bWl0X2hlYWQrK10gPSBjaDsKKwlpbmZvLT5wb3J0LnhtaXRfYnVmW2luZm8tPnhtaXRfaGVhZCsrXSA9IGNoOwogCWluZm8tPnhtaXRfaGVhZCAmPSBTRVJJQUxfWE1JVF9TSVpFIC0gMTsKIAlpbmZvLT54bWl0X2NudCsrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CkBAIC0xMzI3LDcgKzEzMjEsNyBAQAogCiAJaWYgKGluZm8tPnhtaXRfY250IDw9IDAgfHwKIAkJCXR0eS0+c3RvcHBlZCB8fAotCQkJIWluZm8tPnhtaXRfYnVmIHx8CisJCQkhaW5mby0+cG9ydC54bWl0X2J1ZiB8fAogCQkJKHR0eS0+aHdfc3RvcHBlZCAmJgogCQkJIChpbmZvLT50eXBlICE9IFBPUlRfMTY1NTBBKSAmJgogCQkJICghaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykKQEAgLTEzNzAsMTMgKzEzNjQsMTMgQEAKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXAgPSB7CiAJCS50eXBlID0gaW5mby0+dHlwZSwKLQkJLmxpbmUgPSBpbmZvLT50dHktPmluZGV4LAorCQkubGluZSA9IGluZm8tPnBvcnQudHR5LT5pbmRleCwKIAkJLnBvcnQgPSBpbmZvLT5pb2FkZHIsCiAJCS5pcnEgPSBpbmZvLT5ib2FyZC0+aXJxLAotCQkuZmxhZ3MgPSBpbmZvLT5mbGFncywKKwkJLmZsYWdzID0gaW5mby0+cG9ydC5mbGFncywKIAkJLmJhdWRfYmFzZSA9IGluZm8tPmJhdWRfYmFzZSwKLQkJLmNsb3NlX2RlbGF5ID0gaW5mby0+Y2xvc2VfZGVsYXksCi0JCS5jbG9zaW5nX3dhaXQgPSBpbmZvLT5jbG9zaW5nX3dhaXQsCisJCS5jbG9zZV9kZWxheSA9IGluZm8tPnBvcnQuY2xvc2VfZGVsYXksCisJCS5jbG9zaW5nX3dhaXQgPSBpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCwKIAkJLmN1c3RvbV9kaXZpc29yID0gaW5mby0+Y3VzdG9tX2Rpdmlzb3IsCiAJCS5odWI2ID0gMAogCX07CkBAIC0xNDAzLDMzICsxMzk3LDMyIEBACiAJCQluZXdfc2VyaWFsLnBvcnQgIT0gaW5mby0+aW9hZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZsYWdzID0gaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSzsKKwlmbGFncyA9IGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewogCQlpZiAoKG5ld19zZXJpYWwuYmF1ZF9iYXNlICE9IGluZm8tPmJhdWRfYmFzZSkgfHwKLQkJCQkobmV3X3NlcmlhbC5jbG9zZV9kZWxheSAhPSBpbmZvLT5jbG9zZV9kZWxheSkgfHwKLQkJCQkoKG5ld19zZXJpYWwuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9IChpbmZvLT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQorCQkJCShuZXdfc2VyaWFsLmNsb3NlX2RlbGF5ICE9IGluZm8tPnBvcnQuY2xvc2VfZGVsYXkpIHx8CisJCQkJKChuZXdfc2VyaWFsLmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSAhPSAoaW5mby0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJaW5mby0+ZmxhZ3MgPSAoKGluZm8tPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CisJCWluZm8tPnBvcnQuZmxhZ3MgPSAoKGluZm8tPnBvcnQuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKIAkJCQkobmV3X3NlcmlhbC5mbGFncyAmIEFTWU5DX1VTUl9NQVNLKSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogT0ssIHBhc3QgdGhpcyBwb2ludCwgYWxsIHRoZSBlcnJvciBjaGVja2luZyBoYXMgYmVlbiBkb25lLgogCQkgKiBBdCB0aGlzIHBvaW50LCB3ZSBzdGFydCBtYWtpbmcgY2hhbmdlcy4uLi4uCiAJCSAqLwotCQlpbmZvLT5mbGFncyA9ICgoaW5mby0+ZmxhZ3MgJiB+QVNZTkNfRkxBR1MpIHwKKwkJaW5mby0+cG9ydC5mbGFncyA9ICgoaW5mby0+cG9ydC5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAogCQkJCShuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfRkxBR1MpKTsKLQkJaW5mby0+Y2xvc2VfZGVsYXkgPSBuZXdfc2VyaWFsLmNsb3NlX2RlbGF5ICogSFogLyAxMDA7Ci0JCWluZm8tPmNsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0ICogSFogLyAxMDA7Ci0JCWluZm8tPnR0eS0+bG93X2xhdGVuY3kgPQotCQkJCShpbmZvLT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOwotCQlpbmZvLT50dHktPmxvd19sYXRlbmN5ID0gMDsKLQkJaWYgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfQ1VTVCAmJgorCQlpbmZvLT5wb3J0LmNsb3NlX2RlbGF5ID0gbmV3X3NlcmlhbC5jbG9zZV9kZWxheSAqIEhaIC8gMTAwOworCQlpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0ICogSFogLyAxMDA7CisJCWluZm8tPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9CisJCQkJKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKKwkJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9DVVNUICYmCiAJCQkJKG5ld19zZXJpYWwuYmF1ZF9iYXNlICE9IGluZm8tPmJhdWRfYmFzZSB8fAogCQkJCW5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3IgIT0KIAkJCQlpbmZvLT5jdXN0b21fZGl2aXNvcikpIHsKIAkJCWJhdWQgPSBuZXdfc2VyaWFsLmJhdWRfYmFzZSAvIG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7Ci0JCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShpbmZvLT50dHksIGJhdWQsIGJhdWQpOworCQkJdHR5X2VuY29kZV9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHksIGJhdWQsIGJhdWQpOwogCQl9CiAJfQogCkBAIC0xNDM3LDggKzE0MzAsOCBAQAogCiAJcHJvY2Vzc190eHJ4X2ZpZm8oaW5mbyk7CiAKLQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewotCQlpZiAoZmxhZ3MgIT0gKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spKSB7CisJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgeworCQlpZiAoZmxhZ3MgIT0gKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgc2xfZmxhZ3MpOwogCQkJbXhzZXJfY2hhbmdlX3NwZWVkKGluZm8sIE5VTEwpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIHNsX2ZsYWdzKTsKQEAgLTE0NzMsMjcgKzE0NjYsNiBAQAogCXJldHVybiBwdXRfdXNlcihyZXN1bHQsIHZhbHVlKTsKIH0KIAotLyoKLSAqIFRoaXMgcm91dGluZSBzZW5kcyBhIGJyZWFrIGNoYXJhY3RlciBvdXQgdGhlIHNlcmlhbCBwb3J0LgotICovCi1zdGF0aWMgdm9pZCBteHNlcl9zZW5kX2JyZWFrKHN0cnVjdCBteHNlcl9wb3J0ICppbmZvLCBpbnQgZHVyYXRpb24pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghaW5mby0+aW9hZGRyKQotCQlyZXR1cm47Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKLQlvdXRiKGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUikgfCBVQVJUX0xDUl9TQkMsCi0JCWluZm8tPmlvYWRkciArIFVBUlRfTENSKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwotCXNjaGVkdWxlX3RpbWVvdXQoZHVyYXRpb24pOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwotCW91dGIoaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTENSKSAmIH5VQVJUX0xDUl9TQkMsCi0JCWluZm8tPmlvYWRkciArIFVBUlRfTENSKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwotfQotCiBzdGF0aWMgaW50IG14c2VyX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTE2OTMsMTIgKzE2NjUsMTIgQEAKIAkJCQkJY29udGludWU7CiAJCQkJfQogCi0JCQkJaWYgKCFwb3J0LT50dHkgfHwgIXBvcnQtPnR0eS0+dGVybWlvcykKKwkJCQlpZiAoIXBvcnQtPnBvcnQudHR5IHx8ICFwb3J0LT5wb3J0LnR0eS0+dGVybWlvcykKIAkJCQkJR01TdGF0dXNbaV0uY2ZsYWcgPQogCQkJCQkJcG9ydC0+bm9ybWFsX3Rlcm1pb3MuY19jZmxhZzsKIAkJCQllbHNlCiAJCQkJCUdNU3RhdHVzW2ldLmNmbGFnID0KLQkJCQkJCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJCQkJCXBvcnQtPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCiAJCQkJc3RhdHVzID0gaW5iKHBvcnQtPmlvYWRkciArIFVBUlRfTVNSKTsKIAkJCQlpZiAoc3RhdHVzICYgMHg4MCAvKlVBUlRfTVNSX0RDRCAqLyApCkBAIC0xNzU1LDE0ICsxNzI3LDE0IEBACiAJCQkJbW9uX2RhdGFfZXh0Lm1vZGVtX3N0YXR1c1tpXSA9CiAJCQkJCXBvcnQtPm1vbl9kYXRhLm1vZGVtX3N0YXR1czsKIAkJCQltb25fZGF0YV9leHQuYmF1ZHJhdGVbaV0gPQotCQkJCQl0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCQkJCQl0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT5wb3J0LnR0eSk7CiAKLQkJCQlpZiAoIXBvcnQtPnR0eSB8fCAhcG9ydC0+dHR5LT50ZXJtaW9zKSB7CisJCQkJaWYgKCFwb3J0LT5wb3J0LnR0eSB8fCAhcG9ydC0+cG9ydC50dHktPnRlcm1pb3MpIHsKIAkJCQkJY2ZsYWcgPSBwb3J0LT5ub3JtYWxfdGVybWlvcy5jX2NmbGFnOwogCQkJCQlpZmxhZyA9IHBvcnQtPm5vcm1hbF90ZXJtaW9zLmNfaWZsYWc7CiAJCQkJfSBlbHNlIHsKLQkJCQkJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0JCQkJCWlmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCQkJCQljZmxhZyA9IHBvcnQtPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCQkJCQlpZmxhZyA9IHBvcnQtPnBvcnQudHR5LT50ZXJtaW9zLT5jX2lmbGFnOwogCQkJCX0KIAogCQkJCW1vbl9kYXRhX2V4dC5kYXRhYml0c1tpXSA9IGNmbGFnICYgQ1NJWkU7CkBAIC0xODgxLDIxICsxODUzLDYgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVENTQlJLOgkJLyogU1ZJRCB2ZXJzaW9uOiBub24temVybyBhcmcgLS0+IG5vIGJyZWFrICovCi0JCXJldHZhbCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKLQkJaWYgKHJldHZhbCkKLQkJCXJldHVybiByZXR2YWw7Ci0JCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCAwKTsKLQkJaWYgKCFhcmcpCi0JCQlteHNlcl9zZW5kX2JyZWFrKGluZm8sIEhaIC8gNCk7CS8qIDEvNCBzZWNvbmQgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSBUQ1NCUktQOgkJLyogc3VwcG9ydCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLwotCQlyZXR2YWwgPSB0dHlfY2hlY2tfY2hhbmdlKHR0eSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlyZXR1cm4gcmV0dmFsOwotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7Ci0JCW14c2VyX3NlbmRfYnJlYWsoaW5mbywgYXJnID8gYXJnICogKEhaIC8gMTApIDogSFogLyA0KTsKLQkJcmV0dXJuIDA7CiAJY2FzZSBUSU9DR1NFUklBTDoKIAkJbG9ja19rZXJuZWwoKTsKIAkJcmV0dmFsID0gbXhzZXJfZ2V0X3NlcmlhbF9pbmZvKGluZm8sIGFyZ3ApOwpAQCAtMTk4OSw3ICsxOTQ2LDcgQEAKIAkJZWxzZQogCQkJaW5mby0+bW9uX2RhdGEuaG9sZF9yZWFzb24gfD0gTlBQSV9OT1RJRllfWE9GRlhFTlQ7CiAKLQkJaWYgKGluZm8tPnR0eS0+aHdfc3RvcHBlZCkKKwkJaWYgKGluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkKQogCQkJaW5mby0+bW9uX2RhdGEuaG9sZF9yZWFzb24gfD0gTlBQSV9OT1RJRllfQ1RTSE9MRDsKIAkJZWxzZQogCQkJaW5mby0+bW9uX2RhdGEuaG9sZF9yZWFzb24gJj0gfk5QUElfTk9USUZZX0NUU0hPTEQ7CkBAIC0yMDM4LDcgKzE5OTUsNyBAQAogCQl9CiAJfQogCi0JaWYgKGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKKwlpZiAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7CiAJCWluZm8tPk1DUiAmPSB+VUFSVF9NQ1JfUlRTOwogCQlvdXRiKGluZm8tPk1DUiwgaW5mby0+aW9hZGRyICsgVUFSVF9NQ1IpOwogCX0KQEAgLTIwNzUsNyArMjAzMiw3IEBACiAJCX0KIAl9CiAKLQlpZiAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgeworCWlmIChpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKIAkJaW5mby0+TUNSIHw9IFVBUlRfTUNSX1JUUzsKIAkJb3V0YihpbmZvLT5NQ1IsIGluZm8tPmlvYWRkciArIFVBUlRfTUNSKTsKIAl9CkBAIC0yMTA2LDcgKzIwNjMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKLQlpZiAoaW5mby0+eG1pdF9jbnQgJiYgaW5mby0+eG1pdF9idWYpIHsKKwlpZiAoaW5mby0+eG1pdF9jbnQgJiYgaW5mby0+cG9ydC54bWl0X2J1ZikgewogCQlvdXRiKGluZm8tPklFUiAmIH5VQVJUX0lFUl9USFJJLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0lFUik7CiAJCWluZm8tPklFUiB8PSBVQVJUX0lFUl9USFJJOwogCQlvdXRiKGluZm8tPklFUiwgaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpOwpAQCAtMjIxOSwxNyArMjE3NiwxNiBAQAogCiAJbXhzZXJfZmx1c2hfYnVmZmVyKHR0eSk7CiAJbXhzZXJfc2h1dGRvd24oaW5mbyk7Ci0JaW5mby0+ZXZlbnQgPSAwOwotCWluZm8tPmNvdW50ID0gMDsKLQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQlpbmZvLT50dHkgPSBOVUxMOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwlpbmZvLT5wb3J0LmNvdW50ID0gMDsKKwlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKIH0KIAogLyoKICAqIG14c2VyX3JzX2JyZWFrKCkgLS0tIHJvdXRpbmUgd2hpY2ggdHVybnMgdGhlIGJyZWFrIGhhbmRsaW5nIG9uIG9yIG9mZgogICovCi1zdGF0aWMgdm9pZCBteHNlcl9yc19icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCitzdGF0aWMgaW50IG14c2VyX3JzX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKIAlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIyNDIsMTEgKzIxOTgsMTIgQEAKIAkJb3V0YihpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9MQ1IpICYgflVBUlRfTENSX1NCQywKIAkJCWluZm8tPmlvYWRkciArIFVBUlRfTENSKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBteHNlcl9yZWNlaXZlX2NoYXJzKHN0cnVjdCBteHNlcl9wb3J0ICpwb3J0LCBpbnQgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBjaGFyIGNoLCBnZGw7CiAJaW50IGlnbm9yZWQgPSAwOwogCWludCBjbnQgPSAwOwpAQCAtMjMwMiw3ICsyMjU5LDcgQEAKIAkJCQkJZmxhZyA9IFRUWV9CUkVBSzsKIAkJCQkJcG9ydC0+aWNvdW50LmJyaysrOwogCi0JCQkJCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX1NBSykKKwkJCQkJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TQUspCiAJCQkJCQlkb19TQUsodHR5KTsKIAkJCQl9IGVsc2UgaWYgKCpzdGF0dXMgJiBVQVJUX0xTUl9QRSkgewogCQkJCQlmbGFnID0gVFRZX1BBUklUWTsKQEAgLTIzMzMsNyArMjI5MCw3IEBACiAJfSB3aGlsZSAoKnN0YXR1cyAmIFVBUlRfTFNSX0RSKTsKIAogZW5kX2ludHI6Ci0JbXh2YXJfbG9nLnJ4Y250W3BvcnQtPnR0eS0+aW5kZXhdICs9IGNudDsKKwlteHZhcl9sb2cucnhjbnRbcG9ydC0+cG9ydC50dHktPmluZGV4XSArPSBjbnQ7CiAJcG9ydC0+bW9uX2RhdGEucnhjbnQgKz0gY250OwogCXBvcnQtPm1vbl9kYXRhLnVwX3J4Y250ICs9IGNudDsKIApAQCAtMjM1NCwxOCArMjMxMSwxOCBAQAogCWlmIChwb3J0LT54X2NoYXIpIHsKIAkJb3V0Yihwb3J0LT54X2NoYXIsIHBvcnQtPmlvYWRkciArIFVBUlRfVFgpOwogCQlwb3J0LT54X2NoYXIgPSAwOwotCQlteHZhcl9sb2cudHhjbnRbcG9ydC0+dHR5LT5pbmRleF0rKzsKKwkJbXh2YXJfbG9nLnR4Y250W3BvcnQtPnBvcnQudHR5LT5pbmRleF0rKzsKIAkJcG9ydC0+bW9uX2RhdGEudHhjbnQrKzsKIAkJcG9ydC0+bW9uX2RhdGEudXBfdHhjbnQrKzsKIAkJcG9ydC0+aWNvdW50LnR4Kys7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAocG9ydC0+eG1pdF9idWYgPT0gTlVMTCkKKwlpZiAocG9ydC0+cG9ydC54bWl0X2J1ZiA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlpZiAoKHBvcnQtPnhtaXRfY250IDw9IDApIHx8IHBvcnQtPnR0eS0+c3RvcHBlZCB8fAotCQkJKHBvcnQtPnR0eS0+aHdfc3RvcHBlZCAmJgorCWlmICgocG9ydC0+eG1pdF9jbnQgPD0gMCkgfHwgcG9ydC0+cG9ydC50dHktPnN0b3BwZWQgfHwKKwkJCShwb3J0LT5wb3J0LnR0eS0+aHdfc3RvcHBlZCAmJgogCQkJKHBvcnQtPnR5cGUgIT0gUE9SVF8xNjU1MEEpICYmCiAJCQkoIXBvcnQtPmJvYXJkLT5jaGlwX2ZsYWcpKSkgewogCQlwb3J0LT5JRVIgJj0gflVBUlRfSUVSX1RIUkk7CkBAIC0yMzc2LDIwICsyMzMzLDIwIEBACiAJY250ID0gcG9ydC0+eG1pdF9jbnQ7CiAJY291bnQgPSBwb3J0LT54bWl0X2ZpZm9fc2l6ZTsKIAlkbyB7Ci0JCW91dGIocG9ydC0+eG1pdF9idWZbcG9ydC0+eG1pdF90YWlsKytdLAorCQlvdXRiKHBvcnQtPnBvcnQueG1pdF9idWZbcG9ydC0+eG1pdF90YWlsKytdLAogCQkJcG9ydC0+aW9hZGRyICsgVUFSVF9UWCk7CiAJCXBvcnQtPnhtaXRfdGFpbCA9IHBvcnQtPnhtaXRfdGFpbCAmIChTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CiAJCWlmICgtLXBvcnQtPnhtaXRfY250IDw9IDApCiAJCQlicmVhazsKIAl9IHdoaWxlICgtLWNvdW50ID4gMCk7Ci0JbXh2YXJfbG9nLnR4Y250W3BvcnQtPnR0eS0+aW5kZXhdICs9IChjbnQgLSBwb3J0LT54bWl0X2NudCk7CisJbXh2YXJfbG9nLnR4Y250W3BvcnQtPnBvcnQudHR5LT5pbmRleF0gKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKIAogCXBvcnQtPm1vbl9kYXRhLnR4Y250ICs9IChjbnQgLSBwb3J0LT54bWl0X2NudCk7CiAJcG9ydC0+bW9uX2RhdGEudXBfdHhjbnQgKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKIAlwb3J0LT5pY291bnQudHggKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKIAogCWlmIChwb3J0LT54bWl0X2NudCA8IFdBS0VVUF9DSEFSUykKLQkJdHR5X3dha2V1cChwb3J0LT50dHkpOworCQl0dHlfd2FrZXVwKHBvcnQtPnBvcnQudHR5KTsKIAogCWlmIChwb3J0LT54bWl0X2NudCA8PSAwKSB7CiAJCXBvcnQtPklFUiAmPSB+VUFSVF9JRVJfVEhSSTsKQEAgLTI0NDAsOSArMjM5Nyw5IEBACiAJCQkJaWYgKGlpciAmIFVBUlRfSUlSX05PX0lOVCkKIAkJCQkJYnJlYWs7CiAJCQkJaWlyICY9IE1PWEFfTVVTVF9JSVJfTUFTSzsKLQkJCQlpZiAoIXBvcnQtPnR0eSB8fAotCQkJCQkJKHBvcnQtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgfHwKLQkJCQkJCSEocG9ydC0+ZmxhZ3MgJgorCQkJCWlmICghcG9ydC0+cG9ydC50dHkgfHwKKwkJCQkJCShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykgfHwKKwkJCQkJCSEocG9ydC0+cG9ydC5mbGFncyAmCiAJCQkJCQkJQVNZTkNfSU5JVElBTElaRUQpKSB7CiAJCQkJCXN0YXR1cyA9IGluYihwb3J0LT5pb2FkZHIgKyBVQVJUX0xTUik7CiAJCQkJCW91dGIoMHgyNywgcG9ydC0+aW9hZGRyICsgVUFSVF9GQ1IpOwpAQCAtMjU1MCw2ICsyNTA3LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBicmQtPmluZm8tPm5wb3J0czsgaSsrKSB7CiAJCWluZm8gPSAmYnJkLT5wb3J0c1tpXTsKKwkJdHR5X3BvcnRfaW5pdCgmaW5mby0+cG9ydCk7CiAJCWluZm8tPmJvYXJkID0gYnJkOwogCQlpbmZvLT5zdG9wX3J4ID0gMDsKIAkJaW5mby0+bGRpc2Nfc3RvcF9yeCA9IDA7CkBAIC0yNTU4LDE2ICsyNTE2LDE1IEBACiAJCWlmIChicmQtPmNoaXBfZmxhZyAhPSBNT1hBX09USEVSX1VBUlQpCiAJCQlteHNlcl9lbmFibGVfbXVzdF9lbmNoYW5jZV9tb2RlKGluZm8tPmlvYWRkcik7CiAKLQkJaW5mby0+ZmxhZ3MgPSBBU1lOQ19TSEFSRV9JUlE7CisJCWluZm8tPnBvcnQuZmxhZ3MgPSBBU1lOQ19TSEFSRV9JUlE7CiAJCWluZm8tPnR5cGUgPSBicmQtPnVhcnRfdHlwZTsKIAogCQlwcm9jZXNzX3R4cnhfZmlmbyhpbmZvKTsKIAogCQlpbmZvLT5jdXN0b21fZGl2aXNvciA9IGluZm8tPmJhdWRfYmFzZSAqIDE2OwotCQlpbmZvLT5jbG9zZV9kZWxheSA9IDUgKiBIWiAvIDEwOwotCQlpbmZvLT5jbG9zaW5nX3dhaXQgPSAzMCAqIEhaOworCQlpbmZvLT5wb3J0LmNsb3NlX2RlbGF5ID0gNSAqIEhaIC8gMTA7CisJCWluZm8tPnBvcnQuY2xvc2luZ193YWl0ID0gMzAgKiBIWjsKIAkJaW5mby0+bm9ybWFsX3Rlcm1pb3MgPSBteHZhcl9zZHJpdmVyLT5pbml0X3Rlcm1pb3M7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPm9wZW5fd2FpdCk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKIAkJbWVtc2V0KCZpbmZvLT5tb25fZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBteHNlcl9tb24pKTsKIAkJaW5mby0+ZXJyX3NoYWRvdyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbl9oZGxjLmMgYi9kcml2ZXJzL2NoYXIvbl9oZGxjLmMKaW5kZXggYTM1YmZkNy4uNjllYzYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25faGRsYy5jCisrKyBiL2RyaXZlcnMvY2hhci9uX2hkbGMuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAjZGVmaW5lIHR0eTJuX2hkbGModHR5KQkoKHN0cnVjdCBuX2hkbGMgKikgKCh0dHkpLT5kaXNjX2RhdGEpKQogI2RlZmluZSBuX2hkbGMydHR5KG5faGRsYykJKChuX2hkbGMpLT50dHkpCiAKLXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjIG5faGRsY19sZGlzYyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBuX2hkbGNfbGRpc2MgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5tYWdpYwkJPSBUVFlfTERJU0NfTUFHSUMsCiAJLm5hbWUJCT0gImhkbGMiLApAQCAtMzQyLDggKzM0Miw4IEBACiAjZW5kaWYKIAkKIAkvKiBGbHVzaCBhbnkgcGVuZGluZyBjaGFyYWN0ZXJzIGluIHRoZSBkcml2ZXIgYW5kIGRpc2NpcGxpbmUuICovCi0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCWlmICh0dHktPmxkaXNjLm9wcy0+Zmx1c2hfYnVmZmVyKQorCQl0dHktPmxkaXNjLm9wcy0+Zmx1c2hfYnVmZmVyKHR0eSk7CiAKIAl0dHlfZHJpdmVyX2ZsdXNoX2J1ZmZlcih0dHkpOwogCQkKQEAgLTY3Nyw2ICs2NzcsMTAgQEAKIAkvKiBBbGxvY2F0ZSB0cmFuc21pdCBidWZmZXIgKi8KIAkvKiBzbGVlcCB1bnRpbCB0cmFuc21pdCBidWZmZXIgYXZhaWxhYmxlICovCQkKIAl3aGlsZSAoISh0YnVmID0gbl9oZGxjX2J1Zl9nZXQoJm5faGRsYy0+dHhfZnJlZV9idWZfbGlzdCkpKSB7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJZXJyb3IgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KIAkJc2NoZWR1bGUoKTsKIAkJCQogCQluX2hkbGMgPSB0dHkybl9oZGxjICh0dHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fcjM5NjQuYyBiL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMKaW5kZXggOTAyMTY5MC4uYWUzNzdhYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMKKysrIGIvZHJpdmVycy9jaGFyL25fcjM5NjQuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiBzdGF0aWMgdm9pZCByMzk2NF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKIAkJY2hhciAqZnAsIGludCBjb3VudCk7CiAKLXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjIHR0eV9sZGlzY19OX1IzOTY0ID0geworc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHR0eV9sZGlzY19OX1IzOTY0ID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5tYWdpYyA9IFRUWV9MRElTQ19NQUdJQywKIAkubmFtZSA9ICJSMzk2NCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbl90dHkuYyBiL2RyaXZlcnMvY2hhci9uX3R0eS5jCmluZGV4IDgwOTYzODkuLjcwOGMyYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9uX3R0eS5jCkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdHJ1Y3QgdHR5X2xkaXNjIHR0eV9sZGlzY19OX1RUWSA9IHsKK3N0cnVjdCB0dHlfbGRpc2Nfb3BzIHR0eV9sZGlzY19OX1RUWSA9IHsKIAkubWFnaWMgICAgICAgICAgID0gVFRZX0xESVNDX01BR0lDLAogCS5uYW1lICAgICAgICAgICAgPSAibl90dHkiLAogCS5vcGVuICAgICAgICAgICAgPSBuX3R0eV9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL252cmFtLmMgYi9kcml2ZXJzL2NoYXIvbnZyYW0uYwppbmRleCAxOTdjZDdhLi4zOWY2MzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbnZyYW0uYworKysgYi9kcml2ZXJzL2NoYXIvbnZyYW0uYwpAQCAtMTA3LDcgKzEwNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNDQ0LDcgKzQ0Myw3IEBACiAKIAkvKiBGaXJzdCB0ZXN0IHdoZXRoZXIgdGhlIGRyaXZlciBzaG91bGQgaW5pdCBhdCBhbGwgKi8KIAlpZiAoIUNIRUNLX0RSSVZFUl9JTklUKCkpCi0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRU5PREVWOwogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmbnZyYW1fZGV2KTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCBlNGE0ZmJkLi5mMDcwYWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTE4OTYsNyArMTg5Niw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZShjbW1fY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgImNtbSVkIiwgaSk7CisJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNtbV9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIGkpLCBOVUxMLCAiY21tJWQiLCBpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKaW5kZXggNjE4MWY4YS4uMGI1OTM0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCkBAIC02NTMsNyArNjUzLDggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlKGNteF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIGkpLCAiY214JWQiLCBpKTsKKwlkZXZpY2VfY3JlYXRlX2RydmRhdGEoY214X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksIE5VTEwsCisJCQkgICAgICAiY214JWQiLCBpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IDFkZDBlOTkuLmQxZmNlYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTUxNCw4ICs1MTQsOCBAQAogCQlyZXR1cm47CiAJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CiAJaWYgKGxkKSB7Ci0JCWlmIChsZC0+cmVjZWl2ZV9idWYpCi0JCQlsZC0+cmVjZWl2ZV9idWYodHR5LCBkYXRhLCBmbGFncywgY291bnQpOworCQlpZiAobGQtPm9wcy0+cmVjZWl2ZV9idWYpCisJCQlsZC0+b3BzLT5yZWNlaXZlX2J1Zih0dHksIGRhdGEsIGZsYWdzLCBjb3VudCk7CiAJCXR0eV9sZGlzY19kZXJlZihsZCk7CiAJfQogfQpAQCAtMjIzMCw3ICsyMjMwLDcgQEAKICAqIEFyZ3VtZW50czoJCXR0eQkJcG9pbnRlciB0byB0dHkgaW5zdGFuY2UgZGF0YQogICoJCQlicmVha19zdGF0ZQktMT1zZXQgYnJlYWsgY29uZGl0aW9uLCAwPWNsZWFyCiAgKi8KLXN0YXRpYyB2b2lkIG1nc2xwY19icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCitzdGF0aWMgaW50IG1nc2xwY19icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJTUdTTFBDX0lORk8gKiBpbmZvID0gKE1HU0xQQ19JTkZPICopdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjI0MCw3ICsyMjQwLDcgQEAKIAkJCSBfX0ZJTEVfXyxfX0xJTkVfXywgaW5mby0+ZGV2aWNlX25hbWUsIGJyZWFrX3N0YXRlKTsKIAogCWlmIChtZ3NscGNfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAibWdzbHBjX2JyZWFrIikpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jayxmbGFncyk7CiAgCWlmIChicmVha19zdGF0ZSA9PSAtMSkKQEAgLTIyNDgsNiArMjI0OCw3IEBACiAJZWxzZQogCQljbGVhcl9yZWdfYml0cyhpbmZvLCBDSEErREFGTywgQklUNik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CisJcmV0dXJuIDA7CiB9CiAKIC8qIFNlcnZpY2UgYW4gSU9DVEwgcmVxdWVzdApAQCAtMzg4Niw5ICszODg3LDggQEAKIAkJZnJhbWVzaXplID0gMDsKICNpZiBTWU5DTElOS19HRU5FUklDX0hETEMKIAkJewotCQkJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhpbmZvLT5uZXRkZXYpOwotCQkJc3RhdHMtPnJ4X2Vycm9ycysrOwotCQkJc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJaW5mby0+bmV0ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWluZm8tPm5ldGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCX0KICNlbmRpZgogCX0gZWxzZQpAQCAtNDE0NCw3ICs0MTQ0LDYgQEAKIHN0YXRpYyBpbnQgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJTUdTTFBDX0lORk8gKmluZm8gPSBkZXZfdG9fcG9ydChkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCkBAIC00MTU5LDggKzQxNTgsOCBAQAogCWluZm8tPnR4X3B1dCA9IGluZm8tPnR4X2NvdW50ID0gc2tiLT5sZW47CiAKIAkvKiB1cGRhdGUgbmV0d29yayBzdGF0aXN0aWNzICovCi0Jc3RhdHMtPnR4X3BhY2tldHMrKzsKLQlzdGF0cy0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCS8qIGRvbmUgd2l0aCBzb2NrZXQgYnVmZmVyLCBzbyBmcmVlIGl0ICovCiAJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtNDM3NiwxNCArNDM3NSwxMyBAQAogc3RhdGljIHZvaWQgaGRsY2Rldl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJTUdTTFBDX0lORk8gKmluZm8gPSBkZXZfdG9fcG9ydChkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCiAJCXByaW50aygiaGRsY2Rldl90eF90aW1lb3V0KCVzKVxuIixkZXYtPm5hbWUpOwogCi0Jc3RhdHMtPnR4X2Vycm9ycysrOwotCXN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOwogCXR4X3N0b3AoaW5mbyk7CkBAIC00NDE2LDI3ICs0NDE0LDI2IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPm5ldGRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCJoZGxjZGV2X3J4KCVzKVxuIixkZXYtPm5hbWUpOwogCiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IGNhbid0IGFsbG9jIHNrYiwgZHJvcHBpbmcgcGFja2V0XG4iLCBkZXYtPm5hbWUpOwotCQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAotCW1lbWNweShza2JfcHV0KHNrYiwgc2l6ZSksYnVmLHNpemUpOworCW1lbWNweShza2JfcHV0KHNrYiwgc2l6ZSksIGJ1Ziwgc2l6ZSk7CiAKLQlza2ItPnByb3RvY29sID0gaGRsY190eXBlX3RyYW5zKHNrYiwgaW5mby0+bmV0ZGV2KTsKKwlza2ItPnByb3RvY29sID0gaGRsY190eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IHNpemU7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJbmV0aWZfcngoc2tiKTsKIAotCWluZm8tPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcHBkZXYuYyBiL2RyaXZlcnMvY2hhci9wcGRldi5jCmluZGV4IGY2ZTZhY2EuLjdhZjdhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wcGRldi5jCisrKyBiL2RyaXZlcnMvY2hhci9wcGRldi5jCkBAIC03NTIsOCArNzUyLDkgQEAKIAogc3RhdGljIHZvaWQgcHBfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQogewotCWRldmljZV9jcmVhdGUocHBkZXZfY2xhc3MsIHBvcnQtPmRldiwgTUtERVYoUFBfTUFKT1IsIHBvcnQtPm51bWJlciksCi0JCQkicGFycG9ydCVkIiwgcG9ydC0+bnVtYmVyKTsKKwlkZXZpY2VfY3JlYXRlX2RydmRhdGEocHBkZXZfY2xhc3MsIHBvcnQtPmRldiwKKwkJCSAgICAgIE1LREVWKFBQX01BSk9SLCBwb3J0LT5udW1iZXIpLAorCQkJICAgICAgTlVMTCwgInBhcnBvcnQlZCIsIHBvcnQtPm51bWJlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHBwX2RldGFjaChzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wdHkuYyBiL2RyaXZlcnMvY2hhci9wdHkuYwppbmRleCAwYTA1YzAzLi43NmIyNzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL3B0eS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAljID0gdG8tPnJlY2VpdmVfcm9vbTsKIAlpZiAoYyA+IGNvdW50KQogCQljID0gY291bnQ7Ci0JdG8tPmxkaXNjLnJlY2VpdmVfYnVmKHRvLCBidWYsIE5VTEwsIGMpOworCXRvLT5sZGlzYy5vcHMtPnJlY2VpdmVfYnVmKHRvLCBidWYsIE5VTEwsIGMpOwogCQogCXJldHVybiBjOwogfQpAQCAtMTQ5LDExICsxNDksMTEgQEAKIAlpbnQgY291bnQ7CiAKIAkvKiBXZSBzaG91bGQgZ2V0IHRoZSBsaW5lIGRpc2NpcGxpbmUgbG9jayBmb3IgInR0eS0+bGluayIgKi8KLQlpZiAoIXRvIHx8ICF0by0+bGRpc2MuY2hhcnNfaW5fYnVmZmVyKQorCWlmICghdG8gfHwgIXRvLT5sZGlzYy5vcHMtPmNoYXJzX2luX2J1ZmZlcikKIAkJcmV0dXJuIDA7CiAKIAkvKiBUaGUgbGRpc2MgbXVzdCByZXBvcnQgMCBpZiBubyBjaGFyYWN0ZXJzIGF2YWlsYWJsZSB0byBiZSByZWFkICovCi0JY291bnQgPSB0by0+bGRpc2MuY2hhcnNfaW5fYnVmZmVyKHRvKTsKKwljb3VudCA9IHRvLT5sZGlzYy5vcHMtPmNoYXJzX2luX2J1ZmZlcih0byk7CiAKIAlpZiAodHR5LT5kcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfU0xBVkUpIHJldHVybiBjb3VudDsKIApAQCAtMTg2LDggKzE4Niw4IEBACiAJaWYgKCF0bykKIAkJcmV0dXJuOwogCQotCWlmICh0by0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0by0+bGRpc2MuZmx1c2hfYnVmZmVyKHRvKTsKKwlpZiAodG8tPmxkaXNjLm9wcy0+Zmx1c2hfYnVmZmVyKQorCQl0by0+bGRpc2Mub3BzLT5mbHVzaF9idWZmZXIodG8pOwogCQogCWlmICh0by0+cGFja2V0KSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmN0cmxfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jhdy5jIGIvZHJpdmVycy9jaGFyL3Jhdy5jCmluZGV4IDUwNWZjYmUuLjQ3YjhjZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYXcuYworKysgYi9kcml2ZXJzL2NoYXIvcmF3LmMKQEAgLTEzMSw4ICsxMzEsOCBAQAogc3RhdGljIHZvaWQgYmluZF9kZXZpY2Uoc3RydWN0IHJhd19jb25maWdfcmVxdWVzdCAqcnEpCiB7CiAJZGV2aWNlX2Rlc3Ryb3kocmF3X2NsYXNzLCBNS0RFVihSQVdfTUFKT1IsIHJxLT5yYXdfbWlub3IpKTsKLQlkZXZpY2VfY3JlYXRlKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCBycS0+cmF3X21pbm9yKSwKLQkJICAgICAgInJhdyVkIiwgcnEtPnJhd19taW5vcik7CisJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCBycS0+cmF3X21pbm9yKSwKKwkJCSAgICAgIE5VTEwsICJyYXclZCIsIHJxLT5yYXdfbWlub3IpOwogfQogCiAvKgpAQCAtMjgzLDcgKzI4Myw4IEBACiAJCXJldCA9IFBUUl9FUlIocmF3X2NsYXNzKTsKIAkJZ290byBlcnJvcl9yZWdpb247CiAJfQotCWRldmljZV9jcmVhdGUocmF3X2NsYXNzLCBOVUxMLCBNS0RFVihSQVdfTUFKT1IsIDApLCAicmF3Y3RsIik7CisJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCAwKSwgTlVMTCwKKwkJCSAgICAgICJyYXdjdGwiKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2NpcnJ1cy5oIGIvZHJpdmVycy9jaGFyL3Jpby9jaXJydXMuaAppbmRleCBhMDNhNTM4Li41YWI1MTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2NpcnJ1cy5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vY2lycnVzLmgKQEAgLTM1LDkgKzM1LDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZm5kZWYgX2NpcnJ1c19oCi0jaWZuZGVmIGxpbnQKLS8qIHN0YXRpYyBjaGFyKiBfY2lycnVzX2hfc2NjcyA9ICJAKCMpY2lycnVzLmgJMS4xNiI7ICovCi0jZW5kaWYKICNkZWZpbmUgX2NpcnJ1c19oIDEKIAogLyogQml0IGZpZWxkcyBmb3IgcGFydGljdWxhciByZWdpc3RlcnMgc2hhcmVkIHdpdGggZHJpdmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2NtZGJsay5oIGIvZHJpdmVycy9jaGFyL3Jpby9jbWRibGsuaAppbmRleCBjNDZiMmZkLi45ZWQ0Zjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2NtZGJsay5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vY21kYmxrLmgKQEAgLTMzLDEyICszMyw2IEBACiAjaWZuZGVmIF9fcmlvX2NtZGJsa19oX18KICNkZWZpbmUgX19yaW9fY21kYmxrX2hfXwogCi0jaWZkZWYgU0NDU19MQUJFTFMKLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgKl9jbWRibGtfaF9zY2NzXyA9ICJAKCMpY21kYmxrLmgJMS4yIjsKLSNlbmRpZgotI2VuZGlmCi0KIC8qCiAqKiB0aGUgc3RydWN0dXJlIG9mIGEgY29tbWFuZCBibG9jaywgdXNlZCB0byBxdWV1ZSBjb21tYW5kcyBkZXN0aW5lZCBmb3IKICoqIGEgcnVwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9jbWRwa3QuaCBiL2RyaXZlcnMvY2hhci9yaW8vY21kcGt0LmgKaW5kZXggMzU3YWU1Ny4uYzFlN2EyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9jbWRwa3QuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2NtZHBrdC5oCkBAIC0zMiwxMiArMzIsNiBAQAogI2lmbmRlZiBfX3Jpb19jbWRwa3RfaF9fCiAjZGVmaW5lIF9fcmlvX2NtZHBrdF9oX18KIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyICpfY21kcGt0X2hfc2Njc18gPSAiQCgjKWNtZHBrdC5oCTEuMiI7Ci0jZW5kaWYKLSNlbmRpZgotCiAvKgogKiogb3ZlcmxheXMgZm9yIHRoZSBkYXRhIGFyZWEgb2YgYSBwYWNrZXQuIFVzZWQgaW4gYm90aCBkaXJlY3Rpb25zCiAqKiAodG8gYnVpbGQgYSBwYWNrZXQgdG8gc2VuZCwgYW5kIHRvIGludGVycHJldCBhIHBhY2tldCB0aGF0IGFycml2ZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2RhZW1vbi5oIGIvZHJpdmVycy9jaGFyL3Jpby9kYWVtb24uaAppbmRleCA2ZTYzZjhiLi40YWY5MDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2RhZW1vbi5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vZGFlbW9uLmgKQEAgLTMzLDEyICszMyw2IEBACiAjaWZuZGVmCV9fcmlvX2RhZW1vbl9oX18KICNkZWZpbmUJX19yaW9fZGFlbW9uX2hfXwogCi0jaWZkZWYgU0NDU19MQUJFTFMKLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgKl9kYWVtb25faF9zY2NzXyA9ICJAKCMpZGFlbW9uLmgJMS4zIjsKLSNlbmRpZgotI2VuZGlmCi0KIAogLyoKICoqIHN0cnVjdHVyZXMgdXNlZCBvbiAvZGV2L3JpbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9lcnJvcnMuaCBiL2RyaXZlcnMvY2hhci9yaW8vZXJyb3JzLmgKaW5kZXggMWQwZDg5MS4uYmRiMDUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9lcnJvcnMuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2Vycm9ycy5oCkBAIC0zMywxMiArMzMsNiBAQAogI2lmbmRlZglfX3Jpb19lcnJvcnNfaF9fCiAjZGVmaW5lCV9fcmlvX2Vycm9yc19oX18KIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyICpfZXJyb3JzX2hfc2Njc18gPSAiQCgjKWVycm9ycy5oCTEuMiI7Ci0jZW5kaWYKLSNlbmRpZgotCiAvKgogKiogZXJyb3IgY29kZXMKICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2Z1bmMuaCBiL2RyaXZlcnMvY2hhci9yaW8vZnVuYy5oCmluZGV4IDllNzI4M2IuLjA3OGQ0NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vZnVuYy5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vZnVuYy5oCkBAIC0zNSwxMiArMzUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAKLSNpZmRlZiBTQ0NTX0xBQkVMUwotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciAqX2Z1bmNfaF9zY2NzXyA9ICJAKCMpZnVuYy5oCTEuMyI7Ci0jZW5kaWYKLSNlbmRpZgotCiAvKiByaW9ib290LmMgKi8KIGludCBSSU9Cb290Q29kZVJUQShzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IERvd25Mb2FkICopOwogaW50IFJJT0Jvb3RDb2RlSE9TVChzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IERvd25Mb2FkICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9tYXAuaCBiL2RyaXZlcnMvY2hhci9yaW8vbWFwLmgKaW5kZXggYmRiY2QwOS4uODM2Njk3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9tYXAuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL21hcC5oCkBAIC0zMywxMCArMzMsNiBAQAogI2lmbmRlZiBfX3Jpb19tYXBfaF9fCiAjZGVmaW5lIF9fcmlvX21hcF9oX18KIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX21hcF9oX3NjY3NfID0gIkAoIyltYXAuaAkxLjIiOwotI2VuZGlmCi0KIC8qCiAqKiBtYXBwaW5nIHN0cnVjdHVyZSBwYXNzZWQgdG8gYW5kIGZyb20gdGhlIGNvbmZpZy5yaW8gcHJvZ3JhbSB0bwogKiogZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHRvcG9sb2d5IG9mIHRoZSB3b3JsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9wYXJhbS5oIGIvZHJpdmVycy9jaGFyL3Jpby9wYXJhbS5oCmluZGV4IDY3NWMyMDAuLjdlOWI2MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcGFyYW0uaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3BhcmFtLmgKQEAgLTMzLDExICszMyw2IEBACiAjaWZuZGVmIF9fcmlvX3BhcmFtX2hfXwogI2RlZmluZSBfX3Jpb19wYXJhbV9oX18KIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3BhcmFtX2hfc2Njc18gPSAiQCgjKXBhcmFtLmgJMS4yIjsKLSNlbmRpZgotCi0KIC8qCiAqKiB0aGUgcGFyYW0gY29tbWFuZCBibG9jaywgYXMgdXNlZCBpbiBPUEVOIGFuZCBQQVJBTSBjYWxscy4KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Bhcm1tYXAuaCBiL2RyaXZlcnMvY2hhci9yaW8vcGFybW1hcC5oCmluZGV4IDk3NjRlZjguLmFjYzhmYTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Bhcm1tYXAuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Bhcm1tYXAuaApAQCAtMzcsMTMgKzM3LDYgQEAKICNpZm5kZWYgX3Bhcm1hcF9oCiAjZGVmaW5lIF9wYXJtYXBfaAogCi0KLSNpZmRlZiBTQ0NTX0xBQkVMUwotI2lmbmRlZiBsaW50Ci0vKiBzdGF0aWMgY2hhciAqX3Jpb19wYXJtbWFwX2hfc2NjcyA9ICJAKCMpcGFybW1hcC5oCTEuNCI7ICovCi0jZW5kaWYKLSNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCBQQVJNX01BUCBQQVJNX01BUDsKIAogc3RydWN0IFBBUk1fTUFQIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcGNpLmggYi9kcml2ZXJzL2NoYXIvcmlvL3BjaS5oCmluZGV4IDFlYmE5MTEuLjYwMzJmOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcGNpLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9wY2kuaApAQCAtMzMsMTAgKzMzLDYgQEAKICNpZm5kZWYgX19yaW9fcGNpX2hfXwogI2RlZmluZQlfX3Jpb19wY2lfaF9fCiAKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9wY2lfaF9zY2NzXyA9ICJAKCMpcGNpLmgJMS4yIjsKLSNlbmRpZgotCiAvKgogKiogUENJIHN0dWZmCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9wcm90c3RzLmggYi9kcml2ZXJzL2NoYXIvcmlvL3Byb3RzdHMuaAppbmRleCA2OWZjNGJjLi44YWI3OTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Byb3RzdHMuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Byb3RzdHMuaApAQCAtMzcsMTMgKzM3LDYgQEAKICNpZm5kZWYgX3Byb3RzdHNfaAogI2RlZmluZSBfcHJvdHN0c19oIDEKIAotCi0jaWZkZWYgU0NDU19MQUJFTFMKLSNpZm5kZWYgbGludAotLyogc3RhdGljIGNoYXIgKl9yaW9fcHJvdHN0c19oX3NjY3MgPSAiQCgjKXByb3RzdHMuaAkxLjQiOyAqLwotI2VuZGlmCi0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEFDSyBiaXQuIExhc3QgUGFja2V0IHJlY2VpdmVkIE9LLiBTZXQgYnkKICAqIHJ4cGt0IHRvIGluZGljYXRlIHRoYXQgdGhlIFBhY2tldCBoYXMgYmVlbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKaW5kZXggNDEyNzc3Yy4uMGNkZmVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCkBAIC0yNSwxMSArMjUsNiBAQAogICogICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksCiAgKiAgICAgIFVTQS4KICAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5OgotICogJExvZzogcmlvLmMsdiAkCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMDcvMTEgMTA6MTM6NTQgIHdvbGZmCi0gKiBJbml0aWFsIHJldmlzaW9uCi0gKgogICogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNDM2LDcgKzQzMSw3IEBACiB7CiAJZnVuY19lbnRlcigpOwogCi0JLyogIHBvcnQtPmdzLmZsYWdzICY9IH5HU19UWF9JTlRFTjsgKi8KKwkvKiAgcG9ydC0+Z3MucG9ydC5mbGFncyAmPSB+R1NfVFhfSU5URU47ICovCiAKIAlmdW5jX2V4aXQoKTsKIH0KQEAgLTQ2MCw3ICs0NTUsNyBAQAogCSAqIEluIGdlbmVyYWwgd2UgY2Fubm90IGNvdW50IG9uICJ0eCBlbXB0eSIgaW50ZXJydXB0cywgYWx0aG91Z2gKIAkgKiB0aGUgaW50ZXJydXB0IHJvdXRpbmUgc2VlbXMgdG8gYmUgYWJsZSB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlLgogCSAqLwotCVBvcnRQLT5ncy5mbGFncyAmPSB+R1NfVFhfSU5URU47CisJUG9ydFAtPmdzLnBvcnQuZmxhZ3MgJj0gfkdTX1RYX0lOVEVOOwogCiAJZnVuY19leGl0KCk7CiB9CkBAIC01MTUsNyArNTEwLDcgQEAKIAlmdW5jX2VudGVyKCk7CiAKIAlQb3J0UCA9IChzdHJ1Y3QgUG9ydCAqKSBwdHI7Ci0JUG9ydFAtPmdzLnR0eSA9IE5VTEw7CisJUG9ydFAtPmdzLnBvcnQudHR5ID0gTlVMTDsKIAlmdW5jX2V4aXQoKTsKIH0KIApAQCAtNTM0LDcgKzUyOSw3IEBACiAJZnVuY19lbnRlcigpOwogCiAJUG9ydFAgPSAoc3RydWN0IFBvcnQgKikgcHRyOwotCVBvcnRQLT5ncy50dHkgPSBOVUxMOworCVBvcnRQLT5ncy5wb3J0LnR0eSA9IE5VTEw7CiAKIAlmdW5jX2V4aXQoKTsKIH0KQEAgLTU1NCwxMiArNTQ5LDEyIEBACiAKIAlyaW90Y2xvc2UocHRyKTsKIAotCWlmIChQb3J0UC0+Z3MuY291bnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HIHBvcnQgY291bnQ6JWRcbiIsIFBvcnRQLT5ncy5jb3VudCk7Ci0JCVBvcnRQLT5ncy5jb3VudCA9IDA7CisJaWYgKFBvcnRQLT5ncy5wb3J0LmNvdW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyBwb3J0IGNvdW50OiVkXG4iLCBQb3J0UC0+Z3MucG9ydC5jb3VudCk7CisJCVBvcnRQLT5ncy5wb3J0LmNvdW50ID0gMDsKIAl9CiAKLQlQb3J0UC0+Z3MudHR5ID0gTlVMTDsKKwlQb3J0UC0+Z3MucG9ydC50dHkgPSBOVUxMOwogCWZ1bmNfZXhpdCgpOwogfQogCkBAIC04NTQsOCArODQ5LDggQEAKIAkJLyoKIAkJICogSW5pdGlhbGl6aW5nIHdhaXQgcXVldWUKIAkJICovCi0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPmdzLm9wZW5fd2FpdCk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPmdzLmNsb3NlX3dhaXQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5ncy5wb3J0Lm9wZW5fd2FpdCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPmdzLnBvcnQuY2xvc2Vfd2FpdCk7CiAJfQogI2Vsc2UKIAkvKiBXZSBjb3VsZCBwb3N0cG9uZSBpbml0aWFsaXppbmcgdGhlbSB0byB3aGVuIHRoZXkgYXJlIGNvbmZpZ3VyZWQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2JvYXJkLmggYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2JvYXJkLmgKaW5kZXggODIyYzA3MS4uMjUyMjMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9ib2FyZC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9hcmQuaApAQCAtMjksMTIgKzI5LDYgQEAKIC8qCQkJCQkJCQkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIEhpc3RvcnkuLi4KLQotMS4wLjAJMjYvMDQvOTkgTlBWCUNyZWF0aW9uLgotCi0qLwotCiAjaWZuZGVmCV9yaW9ib2FyZF9oCQkvKiBJZiBSSU9CT0FSRC5IIG5vdCBhbHJlYWR5IGRlZmluZWQgKi8KICNkZWZpbmUJX3Jpb2JvYXJkX2ggICAgMQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYwppbmRleCA3Yjk2ZTA4Li4wMWYyNjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKQEAgLTMwLDkgKzMwLDYgQEAKICoqCiAqKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9jbWRfY19zY2NzXyA9ICJAKCMpcmlvY21kLmMJMS4yIjsKLSNlbmRpZgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDg3LDEyICs0ODQsMTIgQEAKIAkJCQkgKiogSWYgdGhlIGRldmljZSBpcyBhIG1vZGVtLCB0aGVuIGNoZWNrIHRoZSBtb2RlbQogCQkJCSAqKiBjYXJyaWVyLgogCQkJCSAqLwotCQkJCWlmIChQb3J0UC0+Z3MudHR5ID09IE5VTEwpCisJCQkJaWYgKFBvcnRQLT5ncy5wb3J0LnR0eSA9PSBOVUxMKQogCQkJCQlicmVhazsKLQkJCQlpZiAoUG9ydFAtPmdzLnR0eS0+dGVybWlvcyA9PSBOVUxMKQorCQkJCWlmIChQb3J0UC0+Z3MucG9ydC50dHktPnRlcm1pb3MgPT0gTlVMTCkKIAkJCQkJYnJlYWs7CiAKLQkJCQlpZiAoIShQb3J0UC0+Z3MudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSAmJiAoKFBvcnRQLT5TdGF0ZSAmIChSSU9fTU9QRU4gfCBSSU9fV09QRU4pKSkpIHsKKwkJCQlpZiAoIShQb3J0UC0+Z3MucG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpICYmICgoUG9ydFAtPlN0YXRlICYgKFJJT19NT1BFTiB8IFJJT19XT1BFTikpKSkgewogCiAJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJJcyB0aGVyZSBhIENhcnJpZXI/XG4iKTsKIAkJCQkJLyoKQEAgLTUwOSw3ICs1MDYsNyBAQAogCQkJCQkJCSAqKiB3YWtldXAgYW55b25lIGluIFdPUEVOCiAJCQkJCQkJICovCiAJCQkJCQkJaWYgKFBvcnRQLT5TdGF0ZSAmIChQT1JUX0lTT1BFTiB8IFJJT19XT1BFTikpCi0JCQkJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmUG9ydFAtPmdzLm9wZW5fd2FpdCk7CisJCQkJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmUG9ydFAtPmdzLnBvcnQub3Blbl93YWl0KTsKIAkJCQkJCX0KIAkJCQkJfSBlbHNlIHsKIAkJCQkJCS8qCkBAIC01MTcsNyArNTE0LDcgQEAKIAkJCQkJCSAqLwogCQkJCQkJaWYgKFBvcnRQLT5TdGF0ZSAmIFJJT19DQVJSX09OKSB7CiAJCQkJCQkJaWYgKFBvcnRQLT5TdGF0ZSAmIChQT1JUX0lTT1BFTiB8IFJJT19XT1BFTiB8IFJJT19NT1BFTikpCi0JCQkJCQkJCXR0eV9oYW5ndXAoUG9ydFAtPmdzLnR0eSk7CisJCQkJCQkJCXR0eV9oYW5ndXAoUG9ydFAtPmdzLnBvcnQudHR5KTsKIAkJCQkJCQlQb3J0UC0+U3RhdGUgJj0gflJJT19DQVJSX09OOwogCQkJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJDYXJyaXJlciBqdXN0IHdlbnQgZG93blxuIik7CiAJCQkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY3RybC5jCmluZGV4IGQ2NWNlYjkuLmVlY2VlMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvY3RybC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY3RybC5jCkBAIC0yOSwxMCArMjksNiBAQAogKioKICoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3Jpb2N0cmxfY19zY2NzXyA9ICJAKCMpcmlvY3RybC5jCTEuMyI7Ci0jZW5kaWYKLQogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9kcnZyLmggYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2RydnIuaAppbmRleCAzY2ZmZTI3Li4wOTA3ZTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2RydnIuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2RydnIuaApAQCAtMzUsMTAgKzM1LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgkJLyogZm9yIEhaICovCiAKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9kcnZyX2hfc2Njc18gPSAiQCgjKXJpb2RydnIuaAkxLjMiOwotI2VuZGlmCi0KICNkZWZpbmUgTUVNRFVNUF9TSVpFCTMyCiAjZGVmaW5lCU1PRF9ESVNBQkxFCShSSU9fTk9SRUFEfFJJT19OT1dSSVRFfFJJT19OT1hQUklOVCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pbmZvLmggYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luZm8uaAppbmRleCA4ZGU3OTY2Li40MmZmMWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luZm8uaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luZm8uaApAQCAtMzMsMTAgKzMzLDYgQEAKICNpZm5kZWYgX19yaW9pbmZvX2gKICNkZWZpbmUgX19yaW9pbmZvX2gKIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3Jpb2luZm9faF9zY2NzXyA9ICJAKCMpcmlvaW5mby5oCTEuMiI7Ci0jZW5kaWYKLQogLyoKICoqIEhvc3QgY2FyZCBkYXRhIHN0cnVjdHVyZQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW5pdC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMKaW5kZXggYWRkMTcxOC4uYmUwYmE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMKQEAgLTI5LDkgKzI5LDYgQEAKICoqCiAqKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9pbml0X2Nfc2Njc18gPSAiQCgjKXJpb2luaXQuYwkxLjMiOwotI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2ludHIuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jCmluZGV4IGVhMjE2ODYuLjcxZjg3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jCkBAIC0yOSwxMCArMjksNiBAQAogKioKICoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3Jpb2ludHJfY19zY2NzXyA9ICJAKCMpcmlvaW50ci5jCTEuMiI7Ci0jZW5kaWYKLQogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMTA2LDcgKzEwMiw3IEBACiAKIAlQb3J0UCA9IChzdHJ1Y3QgUG9ydCAqKSBlbjsKIAlwID0gKHN0cnVjdCByaW9faW5mbyAqKSBQb3J0UC0+cDsKLQl0dHkgPSBQb3J0UC0+Z3MudHR5OworCXR0eSA9IFBvcnRQLT5ncy5wb3J0LnR0eTsKIAogCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJ0eCBwb3J0ICVkOiAlZCBjaGFycyBxdWV1ZWQuXG4iLCBQb3J0UC0+UG9ydE51bSwgUG9ydFAtPmdzLnhtaXRfY250KTsKQEAgLTE2Miw3ICsxNTgsNyBAQAogCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCiAJaWYgKFBvcnRQLT5ncy54bWl0X2NudCA8PSAoUG9ydFAtPmdzLndha2V1cF9jaGFycyArIDIgKiBQS1RfTUFYX0RBVEFfTEVOKSkKLQkJdHR5X3dha2V1cChQb3J0UC0+Z3MudHR5KTsKKwkJdHR5X3dha2V1cChQb3J0UC0+Z3MucG9ydC50dHkpOwogCiB9CiAKQEAgLTI0NSw3ICsyNDEsNyBAQAogCQkJICoqIGZpbmQgY29ycmVzcG9uZGluZyB0dHkgc3RydWN0dXJlLiBUaGUgcHJvY2VzcyBvZiBtYXBwaW5nCiAJCQkgKiogdGhlIHBvcnRzIHB1dHMgdGhlc2UgaGVyZS4KIAkJCSAqLwotCQkJdHR5UCA9IFBvcnRQLT5ncy50dHk7CisJCQl0dHlQID0gUG9ydFAtPmdzLnBvcnQudHR5OwogCiAJCQkvKgogCQkJICoqIExvY2sgdGhlIHBvcnQgYmVmb3JlIHdlIGJlZ2luIHdvcmtpbmcgb24gaXQuCkBAIC0zMzksNyArMzM1LDcgQEAKIAkJCSAqKiBmaW5kIGNvcnJlc3BvbmRpbmcgdHR5IHN0cnVjdHVyZS4gVGhlIHByb2Nlc3Mgb2YgbWFwcGluZwogCQkJICoqIHRoZSBwb3J0cyBwdXRzIHRoZXNlIGhlcmUuCiAJCQkgKi8KLQkJCXR0eVAgPSBQb3J0UC0+Z3MudHR5OworCQkJdHR5UCA9IFBvcnRQLT5ncy5wb3J0LnR0eTsKIAkJCS8qIElmIHR0eVAgaXMgTlVMTCwgdGhlIHBvcnQgaXMgZ2V0dGluZyBjbG9zZWQuIEZvcmdldCBhYm91dCBpdC4gKi8KIAkJCWlmICghdHR5UCkgewogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAibm8gdHR5LCBzbyBza2lwcGluZy5cbiIpOwpAQCAtNTQ2LDcgKzU0Miw3IEBACiAKIAlpbnRDb3VudCsrOwogCi0JVHR5UCA9IFBvcnRQLT5ncy50dHk7CisJVHR5UCA9IFBvcnRQLT5ncy5wb3J0LnR0eTsKIAlpZiAoIVR0eVApIHsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJSSU9SZWNlaXZlOiB0dHkgaXMgbnVsbC4gXG4iKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9wYXJhbS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9wYXJhbS5jCmluZGV4IDQ4MTBiODQuLmQ2ODdjMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcGFyYW0uYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3BhcmFtLmMKQEAgLTMwLDEwICszMCw2IEBACiAqKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3Jpb3BhcmFtX2Nfc2Njc18gPSAiQCgjKXJpb3BhcmFtLmMJMS4zIjsKLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xNjQsNyArMTYwLDcgQEAKIAogCWZ1bmNfZW50ZXIoKTsKIAotCVR0eVAgPSBQb3J0UC0+Z3MudHR5OworCVR0eVAgPSBQb3J0UC0+Z3MucG9ydC50dHk7CiAKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICJSSU9QYXJhbTogUG9ydDolZCBjbWQ6JWQgTW9kZW06JWQgU2xlZXBGbGFnOiVkIE1hcHBlZDogJWQsIHR0eT0lcFxuIiwgUG9ydFAtPlBvcnROdW0sIGNtZCwgTW9kZW0sIFNsZWVwRmxhZywgUG9ydFAtPk1hcHBlZCwgVHR5UCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYwppbmRleCA3YTlkZjdkLi43MDZjMmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3JvdXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9yb3V0ZS5jCkBAIC0yOSw5ICsyOSw2IEBACiAqKgogKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCi0jaWZkZWYgU0NDU19MQUJFTFMKLXN0YXRpYyBjaGFyICpfcmlvcm91dGVfY19zY2NzXyA9ICJAKCMpcmlvcm91dGUuYwkxLjMiOwotI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3NwYWNlLmggYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3NwYWNlLmgKaW5kZXggNTM0ZjFmNS4uZmZiMzFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9zcGFjZS5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvc3BhY2UuaApAQCAtMzMsMTAgKzMzLDYgQEAKICNpZm5kZWYgX19yaW9fcmlvc3BhY2VfaF9fCiAjZGVmaW5lIF9fcmlvX3Jpb3NwYWNlX2hfXwogCi0jaWZkZWYgU0NDU19MQUJFTFMKLXN0YXRpYyBjaGFyICpfcmlvc3BhY2VfaF9zY2NzXyA9ICJAKCMpcmlvc3BhY2UuaAkxLjIiOwotI2VuZGlmCi0KICNkZWZpbmUJUklPX0xPQ0FUT1JfTEVOCTE2CiAjZGVmaW5lCU1BWF9SSU9fQk9BUkRTCTQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW90YWJsZS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90YWJsZS5jCmluZGV4IDJiMjQ0ODguLjNkMTU4MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdGFibGUuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMKQEAgLTI5LDkgKzI5LDYgQEAKICoqCiAqKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW90YWJsZV9jX3NjY3NfID0gIkAoIylyaW90YWJsZS5jCTEuMiI7Ci0jZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCmluZGV4IGM5OTM1NDguLjJmYjQ5ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwpAQCAtMjksMTAgKzI5LDYgQEAKICoqCiAqKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW90dHlfY19zY2NzXyA9ICJAKCMpcmlvdHR5LmMJMS4zIjsKLSNlbmRpZgotCiAKICNkZWZpbmUgX19FWFBMSUNJVF9ERUZfSF9fCiAKQEAgLTE0NCwxNCArMTQwLDE0IEBACiAKIAl0dHktPmRyaXZlcl9kYXRhID0gUG9ydFA7CiAKLQlQb3J0UC0+Z3MudHR5ID0gdHR5OwotCVBvcnRQLT5ncy5jb3VudCsrOworCVBvcnRQLT5ncy5wb3J0LnR0eSA9IHR0eTsKKwlQb3J0UC0+Z3MucG9ydC5jb3VudCsrOwogCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIiVkIGJ5dGVzIGluIHR4IGJ1ZmZlclxuIiwgUG9ydFAtPmdzLnhtaXRfY250KTsKIAogCXJldHZhbCA9IGdzX2luaXRfcG9ydCgmUG9ydFAtPmdzKTsKIAlpZiAocmV0dmFsKSB7Ci0JCVBvcnRQLT5ncy5jb3VudC0tOworCQlQb3J0UC0+Z3MucG9ydC5jb3VudC0tOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAkvKgpAQCAtMjk3LDcgKzI5Myw3IEBACiAJICoqIGluc2VydCB0ZXN0IGZvciBjYXJyaWVyIGhlcmUuIC0tID8/PwogCSAqKiBJIGFscmVhZHkgc2VlIHRoYXQgdGVzdCBoZXJlLiBXaGF0J3MgdGhlIGRlYWw/IC0tIFJFVwogCSAqLwotCWlmICgoUG9ydFAtPmdzLnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgfHwKKwlpZiAoKFBvcnRQLT5ncy5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgfHwKIAkJCShQb3J0UC0+TW9kZW1TdGF0ZSAmIFJJT0NfTVNWUjFfQ0QpKSB7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJvcGVuKCVkKSBNb2RlbSBjYXJyIG9uXG4iLCBTeXNQb3J0KTsKIAkJLyoKQEAgLTMwNSwxNiArMzAxLDE2IEBACiAJCSAgIHdha2V1cCgoY2FkZHJfdCkgJnRwLT50bS5jX2NhbnEpOwogCQkgKi8KIAkJUG9ydFAtPlN0YXRlIHw9IFJJT19DQVJSX09OOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJlBvcnRQLT5ncy5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJlBvcnRQLT5ncy5wb3J0Lm9wZW5fd2FpdCk7CiAJfSBlbHNlIHsJLyogbm8gY2FycmllciAtIHdhaXQgZm9yIERDRCAqLwogCQkJLyoKLQkJICAgd2hpbGUgKCEoUG9ydFAtPmdzLnR0eS0+dGVybWlvcy0+Y19zdGF0ZSAmIENBUlJfT04pICYmCisJCSAgIHdoaWxlICghKFBvcnRQLT5ncy5wb3J0LnR0eS0+dGVybWlvcy0+Y19zdGF0ZSAmIENBUlJfT04pICYmCiAJCSAgICEoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmICFwLT5SSU9IYWx0ZWQgKQogCQkgKi8KIAkJd2hpbGUgKCEoUG9ydFAtPlN0YXRlICYgUklPX0NBUlJfT04pICYmICEoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmICFwLT5SSU9IYWx0ZWQpIHsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAib3BlbiglZCkgc2xlZXBpbmcgZm9yIGNhcnIgb25cbiIsIFN5c1BvcnQpOwogCQkJLyoKLQkJCSAgIFBvcnRQLT5ncy50dHktPnRlcm1pb3MtPmNfc3RhdGUgfD0gV09QRU47CisJCQkgICBQb3J0UC0+Z3MucG9ydC50dHktPnRlcm1pb3MtPmNfc3RhdGUgfD0gV09QRU47CiAJCQkgKi8KIAkJCVBvcnRQLT5TdGF0ZSB8PSBSSU9fV09QRU47CiAJCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKQEAgLTM4NCw3ICszODAsNyBAQAogCS8qIFBvcnRQID0gcC0+UklPUG9ydHBbU3lzUG9ydF07ICovCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIlBvcnQgaXMgYXQgYWRkcmVzcyAlcFxuIiwgUG9ydFApOwogCS8qIHRwID0gUG9ydFAtPlR0eVA7ICovLyogR2V0IHR0eSAqLwotCXR0eSA9IFBvcnRQLT5ncy50dHk7CisJdHR5ID0gUG9ydFAtPmdzLnBvcnQudHR5OwogCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJUVFkgaXMgYXQgYWRkcmVzcyAlcFxuIiwgdHR5KTsKIAogCWlmIChQb3J0UC0+Z3MuY2xvc2luZ193YWl0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yb3V0ZS5oIGIvZHJpdmVycy9jaGFyL3Jpby9yb3V0ZS5oCmluZGV4IDc2OTc0NGUuLjIwZWQ3M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcm91dGUuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3JvdXRlLmgKQEAgLTM3LDEyICszNyw2IEBACiAjaWZuZGVmIF9yb3V0ZV9oCiAjZGVmaW5lIF9yb3V0ZV9oCiAKLSNpZmRlZiBTQ0NTX0xBQkVMUwotI2lmbmRlZiBsaW50Ci0vKiBzdGF0aWMgY2hhciAqX3Jpb19yb3V0ZV9oX3NjY3MgPSAiQCgjKXJvdXRlLmgJMS4zIjsgKi8KLSNlbmRpZgotI2VuZGlmCi0KICNkZWZpbmUgTUFYX0xJTktTIDQKICNkZWZpbmUgTUFYX05PREVTIDE3CQkvKiBNYXhpbXVtIG5vZGVzIGluIGEgc3VibmV0ICovCiAjZGVmaW5lIE5PREVfQllURVMgKChNQVhfTk9ERVMgLyA4KSArIDEpCS8qIE51bWJlciBvZiBieXRlcyBuZWVkZWQgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3VuaXhydXAuaCBiL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oCmluZGV4IDQ2YmQ1MzIuLjdhYmYwY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oCkBAIC0zMywxMCArMzMsNiBAQAogI2lmbmRlZiBfX3Jpb191bml4cnVwX2hfXwogI2RlZmluZSBfX3Jpb191bml4cnVwX2hfXwogCi0jaWZkZWYgU0NDU19MQUJFTFMKLXN0YXRpYyBjaGFyICpfdW5peHJ1cF9oX3NjY3NfID0gIkAoIyl1bml4cnVwLmgJMS4yIjsKLSNlbmRpZgotCiAvKgogKiogICAgVW5peFJ1cCBkYXRhIHN0cnVjdHVyZS4gVGhpcyBjb250YWlucyBwb2ludGVycyB0byBhY3R1YWwgUlVQcyBvbiB0aGUKICoqICAgIGhvc3QgY2FyZCwgYW5kIGFsbCB0aGUgY29tbWFuZC9ib290IGNvbnRyb2wgc3R1ZmYuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jIGIvZHJpdmVycy9jaGFyL3Jpc2NvbTguYwppbmRleCBmMDczYzcxLi4yYzZjOGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaXNjb204LmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCWNoYW5uZWwgPSByY19pbihicCwgQ0QxODBfR0lDUikgPj4gR0lDUl9DSEFOX09GRjsKIAlpZiAoY2hhbm5lbCA8IENEMTgwX05DSCkgIHsKIAkJcG9ydCA9ICZyY19wb3J0W2JvYXJkX05vKGJwKSAqIFJDX05QT1JUICsgY2hhbm5lbF07Ci0JCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQorCQlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQogCQkJcmV0dXJuIHBvcnQ7CiAJfQogCXByaW50ayhLRVJOX0VSUiAicmMlZDogJXMgaW50ZXJydXB0IGZyb20gaW52YWxpZCBwb3J0ICVkXG4iLApAQCAtMzQxLDcgKzM0MSw3IEBACiAJaWYgKHBvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCiAjaWZkZWYgUkNfUkVQT1JUX09WRVJSVU4KIAlzdGF0dXMgPSByY19pbihicCwgQ0QxODBfUkNTUik7CkBAIC0zNjQsNyArMzY0LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAicmMlZDogcG9ydCAlZDogSGFuZGxpbmcgYnJlYWsuLi5cbiIsCiAJCSAgICAgICBib2FyZF9ObyhicCksIHBvcnRfTm8ocG9ydCkpOwogCQlmbGFnID0gVFRZX0JSRUFLOwotCQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TQUspCisJCWlmIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfU0FLKQogCQkJZG9fU0FLKHR0eSk7CiAKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIFJDU1JfUEUpCkBAIC0zOTIsNyArMzkyLDcgQEAKIAlpZiAocG9ydCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT50dHk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAKIAljb3VudCA9IHJjX2luKGJwLCBDRDE4MF9SRENSKTsKIApAQCAtNDIyLDcgKzQyMiw3IEBACiAJaWYgKHBvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCiAJaWYgKHBvcnQtPklFUiAmIElFUl9UWEVNUFRZKSB7CiAJCS8qIEZJRk8gZHJhaW5lZCAqLwpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAKIAljb3VudCA9IENEMTgwX05GSUZPOwogCWRvIHsKLQkJcmNfb3V0KGJwLCBDRDE4MF9URFIsIHBvcnQtPnhtaXRfYnVmW3BvcnQtPnhtaXRfdGFpbCsrXSk7CisJCXJjX291dChicCwgQ0QxODBfVERSLCBwb3J0LT5wb3J0LnhtaXRfYnVmW3BvcnQtPnhtaXRfdGFpbCsrXSk7CiAJCXBvcnQtPnhtaXRfdGFpbCA9IHBvcnQtPnhtaXRfdGFpbCAmIChTRVJJQUxfWE1JVF9TSVpFLTEpOwogCQlpZiAoLS1wb3J0LT54bWl0X2NudCA8PSAwKQogCQkJYnJlYWs7CkBAIC00OTIsMTIgKzQ5MiwxMiBAQAogCWlmIChwb3J0ID09IE5VTEwpCiAJCXJldHVybjsKIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAogCW1jciA9IHJjX2luKGJwLCBDRDE4MF9NQ1IpOwogCWlmIChtY3IgJiBNQ1JfQ0RDSEcpIHsKIAkJaWYgKHJjX2luKGJwLCBDRDE4MF9NU1ZSKSAmIE1TVlJfQ0QpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnQub3Blbl93YWl0KTsKIAkJZWxzZQogCQkJdHR5X2hhbmd1cCh0dHkpOwogCX0KQEAgLTYzMiwxNSArNjMyLDEyIEBACiAgKi8KIHN0YXRpYyB2b2lkIHJjX2NoYW5nZV9zcGVlZChzdHJ1Y3QgcmlzY29tX2JvYXJkICpicCwgc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnBvcnQudHR5OwogCXVuc2lnbmVkIGxvbmcgYmF1ZDsKIAlsb25nIHRtcDsKIAl1bnNpZ25lZCBjaGFyIGNvcjEgPSAwLCBjb3IzID0gMDsKIAl1bnNpZ25lZCBjaGFyIG1jb3IxID0gMCwgbWNvcjIgPSAwOwogCi0JaWYgKHR0eSA9PSBOVUxMIHx8IHR0eS0+dGVybWlvcyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KIAlwb3J0LT5JRVIgID0gMDsKIAlwb3J0LT5DT1IyID0gMDsKIAlwb3J0LT5NU1ZSID0gTVNWUl9SVFM7CkBAIC03ODYsMzkgKzc4MywzMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKKwlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQogCQlyZXR1cm4gMDsKIAotCWlmICghcG9ydC0+eG1pdF9idWYpIHsKLQkJLyogV2UgbWF5IHNsZWVwIGluIGdldF96ZXJvZWRfcGFnZSgpICovCi0JCXVuc2lnbmVkIGxvbmcgdG1wID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAodG1wID09IDApCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJaWYgKHBvcnQtPnhtaXRfYnVmKQotCQkJZnJlZV9wYWdlKHRtcCk7Ci0JCWVsc2UKLQkJCXBvcnQtPnhtaXRfYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgdG1wOwotCX0KKwlpZiAodHR5X3BvcnRfYWxsb2NfeG1pdF9idWYoJnBvcnQtPnBvcnQpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKIAotCWlmIChwb3J0LT50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZwb3J0LT50dHktPmZsYWdzKTsKLQlpZiAocG9ydC0+Y291bnQgPT0gMSkKKwljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmcG9ydC0+cG9ydC50dHktPmZsYWdzKTsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCA9PSAxKQogCQlicC0+Y291bnQrKzsKIAlwb3J0LT54bWl0X2NudCA9IHBvcnQtPnhtaXRfaGVhZCA9IHBvcnQtPnhtaXRfdGFpbCA9IDA7CiAJcmNfY2hhbmdlX3NwZWVkKGJwLCBwb3J0KTsKLQlwb3J0LT5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKKwlwb3J0LT5wb3J0LmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCi1zdGF0aWMgdm9pZCByY19zaHV0ZG93bl9wb3J0KHN0cnVjdCByaXNjb21fYm9hcmQgKmJwLCBzdHJ1Y3QgcmlzY29tX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCByY19zaHV0ZG93bl9wb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgcmlzY29tX2JvYXJkICpicCwgc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0KLQlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKKwlpZiAoIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQogCQlyZXR1cm47CiAKICNpZmRlZiBSQ19SRVBPUlRfT1ZFUlJVTgpAQCAtODM2LDE0ICs4MjQsOCBAQAogCQlwcmludGsoIl0uXG4iKTsKIAl9CiAjZW5kaWYKLQlpZiAocG9ydC0+eG1pdF9idWYpICB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcG9ydC0+eG1pdF9idWYpOwotCQlwb3J0LT54bWl0X2J1ZiA9IE5VTEw7Ci0JfQotCi0JdHR5ID0gcG9ydC0+dHR5OwotCi0JaWYgKHR0eSA9PSBOVUxMIHx8IENfSFVQQ0wodHR5KSkgeworCXR0eV9wb3J0X2ZyZWVfeG1pdF9idWYoJnBvcnQtPnBvcnQpOworCWlmIChDX0hVUENMKHR0eSkpIHsKIAkJLyogRHJvcCBEVFIgKi8KIAkJYnAtPkRUUiB8PSAoMXUgPDwgcG9ydF9Obyhwb3J0KSk7CiAJCXJjX291dChicCwgUkNfRFRSLCBicC0+RFRSKTsKQEAgLTg1OCw5ICs4NDAsOCBAQAogCXBvcnQtPklFUiA9IDA7CiAJcmNfb3V0KGJwLCBDRDE4MF9JRVIsIHBvcnQtPklFUik7CiAKLQlpZiAodHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwotCXBvcnQtPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKKwlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOworCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCiAJaWYgKC0tYnAtPmNvdW50IDwgMCkgIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicmMlZDogcmNfc2h1dGRvd25fcG9ydDogIgpAQCAtODkwLDkgKzg3MSw5IEBACiAJICogSWYgdGhlIGRldmljZSBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIGNsb3NlZCwgdGhlbiBibG9jawogCSAqIHVudGlsIGl0J3MgZG9uZSwgYW5kIHRoZW4gdHJ5IGFnYWluLgogCSAqLwotCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IHBvcnQtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgewotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwb3J0LT5jbG9zZV93YWl0KTsKLQkJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwb3J0LT5wb3J0LmNsb3NlX3dhaXQpOworCQlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJZWxzZQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKQEAgLTkwNCw3ICs4ODUsNyBAQAogCSAqLwogCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8CiAJICAgICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKLQkJcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKKwkJcG9ydC0+cG9ydC5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTkxOSwxNiArOTAwLDE2IEBACiAJICogZXhpdCwgZWl0aGVyIG5vcm1hbCBvciBhYm5vcm1hbC4KIAkgKi8KIAlyZXR2YWwgPSAwOwotCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT5vcGVuX3dhaXQsICZ3YWl0KTsKKwlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQsICZ3YWl0KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZyaXNjb21fbG9jaywgZmxhZ3MpOwogCiAJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKQotCQlwb3J0LT5jb3VudC0tOworCQlwb3J0LT5wb3J0LmNvdW50LS07CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaXNjb21fbG9jaywgZmxhZ3MpOwogCi0JcG9ydC0+YmxvY2tlZF9vcGVuKys7CisJcG9ydC0+cG9ydC5ibG9ja2VkX29wZW4rKzsKIAl3aGlsZSAoMSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKIApAQCAtOTQyLDE0ICs5MjMsMTQgQEAKIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAotCQkgICAgIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewotCQkJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwkJICAgICEocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgeworCQkJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQogCQkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQllbHNlCiAJCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCEocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgorCQlpZiAoIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYKIAkJICAgIChkb19jbG9jYWwgfHwgQ0QpKQogCQkJYnJlYWs7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtOTU5LDE0ICs5NDAsMTQgQEAKIAkJc2NoZWR1bGUoKTsKIAl9CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT5vcGVuX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQsICZ3YWl0KTsKIAlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpCi0JCXBvcnQtPmNvdW50Kys7Ci0JcG9ydC0+YmxvY2tlZF9vcGVuLS07CisJCXBvcnQtPnBvcnQuY291bnQrKzsKKwlwb3J0LT5wb3J0LmJsb2NrZWRfb3Blbi0tOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKLQlwb3J0LT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCXBvcnQtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTkwLDkgKzk3MSw5IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlwb3J0LT5jb3VudCsrOworCXBvcnQtPnBvcnQuY291bnQrKzsKIAl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKLQlwb3J0LT50dHkgPSB0dHk7CisJcG9ydC0+cG9ydC50dHkgPSB0dHk7CiAKIAllcnJvciA9IHJjX3NldHVwX3BvcnQoYnAsIHBvcnQpOwogCWlmIChlcnJvciA9PSAwKQpAQCAtMTAzMSwyOCArMTAxMiwyOCBAQAogCQlnb3RvIG91dDsKIAogCWJwID0gcG9ydF9Cb2FyZChwb3J0KTsKLQlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKHBvcnQtPmNvdW50ICE9IDEpKSAgeworCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAocG9ydC0+cG9ydC5jb3VudCAhPSAxKSkgIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicmMlZDogcmNfY2xvc2U6IGJhZCBwb3J0IGNvdW50OyIKIAkJICAgICAgICIgdHR5LT5jb3VudCBpcyAxLCBwb3J0IGNvdW50IGlzICVkXG4iLAotCQkgICAgICAgYm9hcmRfTm8oYnApLCBwb3J0LT5jb3VudCk7Ci0JCXBvcnQtPmNvdW50ID0gMTsKKwkJICAgICAgIGJvYXJkX05vKGJwKSwgcG9ydC0+cG9ydC5jb3VudCk7CisJCXBvcnQtPnBvcnQuY291bnQgPSAxOwogCX0KLQlpZiAoLS1wb3J0LT5jb3VudCA8IDApICB7CisJaWYgKC0tcG9ydC0+cG9ydC5jb3VudCA8IDApICB7CiAJCXByaW50ayhLRVJOX0lORk8gInJjJWQ6IHJjX2Nsb3NlOiBiYWQgcG9ydCBjb3VudCAiCiAJCQkJICJmb3IgdHR5JWQ6ICVkXG4iLAotCQkgICAgICAgYm9hcmRfTm8oYnApLCBwb3J0X05vKHBvcnQpLCBwb3J0LT5jb3VudCk7Ci0JCXBvcnQtPmNvdW50ID0gMDsKKwkJICAgICAgIGJvYXJkX05vKGJwKSwgcG9ydF9Obyhwb3J0KSwgcG9ydC0+cG9ydC5jb3VudCk7CisJCXBvcnQtPnBvcnQuY291bnQgPSAwOwogCX0KLQlpZiAocG9ydC0+Y291bnQpCisJaWYgKHBvcnQtPnBvcnQuY291bnQpCiAJCWdvdG8gb3V0OwotCXBvcnQtPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CisJcG9ydC0+cG9ydC5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOwogCS8qCiAJICogTm93IHdlIHdhaXQgZm9yIHRoZSB0cmFuc21pdCBidWZmZXIgdG8gY2xlYXI7IGFuZCB3ZSBub3RpZnkKIAkgKiB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIG9ubHkgcHJvY2VzcyBYT04vWE9GRiBjaGFyYWN0ZXJzLgogCSAqLwogCXR0eS0+Y2xvc2luZyA9IDE7Ci0JaWYgKHBvcnQtPmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkKLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIHBvcnQtPmNsb3Npbmdfd2FpdCk7CisJaWYgKHBvcnQtPnBvcnQuY2xvc2luZ193YWl0ICE9IEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FKQorCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQpOwogCS8qCiAJICogQXQgdGhpcyBwb2ludCB3ZSBzdG9wIGFjY2VwdGluZyBpbnB1dC4gIFRvIGRvIHRoaXMsIHdlCiAJICogZGlzYWJsZSB0aGUgcmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHRzLCBhbmQgdGVsbCB0aGUKQEAgLTEwNjAsNyArMTA0MSw3IEBACiAJICogbGluZSBzdGF0dXMgcmVnaXN0ZXIuCiAJICovCiAJcG9ydC0+SUVSICY9IH5JRVJfUlhEOwotCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewogCQlwb3J0LT5JRVIgJj0gfklFUl9UWFJEWTsKIAkJcG9ydC0+SUVSIHw9IElFUl9UWEVNUFRZOwogCQlyY19vdXQoYnAsIENEMTgwX0NBUiwgcG9ydF9Obyhwb3J0KSk7CkBAIC0xMDc3LDE5ICsxMDU4LDE5IEBACiAJCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmNfc2h1dGRvd25fcG9ydChicCwgcG9ydCk7CisJcmNfc2h1dGRvd25fcG9ydCh0dHksIGJwLCBwb3J0KTsKIAlyY19mbHVzaF9idWZmZXIodHR5KTsKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JcG9ydC0+dHR5ID0gTlVMTDsKLQlpZiAocG9ydC0+YmxvY2tlZF9vcGVuKSB7Ci0JCWlmIChwb3J0LT5jbG9zZV9kZWxheSkKLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MocG9ydC0+Y2xvc2VfZGVsYXkpKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsKKwlpZiAocG9ydC0+cG9ydC5ibG9ja2VkX29wZW4pIHsKKwkJaWYgKHBvcnQtPnBvcnQuY2xvc2VfZGVsYXkpCisJCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKHBvcnQtPnBvcnQuY2xvc2VfZGVsYXkpKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCk7CiAJfQotCXBvcnQtPmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRXxBU1lOQ19DTE9TSU5HKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmNsb3NlX3dhaXQpOworCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEFTWU5DX0NMT1NJTkcpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5jbG9zZV93YWl0KTsKIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7CkBAIC0xMTA4LDkgKzEwODksNiBAQAogCiAJYnAgPSBwb3J0X0JvYXJkKHBvcnQpOwogCi0JaWYgKCF0dHkgfHwgIXBvcnQtPnhtaXRfYnVmKQotCQlyZXR1cm4gMDsKLQogCXdoaWxlICgxKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyaXNjb21fbG9jaywgZmxhZ3MpOwogCkBAIC0xMTE5LDcgKzEwOTcsNyBAQAogCQlpZiAoYyA8PSAwKQogCQkJYnJlYWs7CS8qIGxvY2sgY29udGludWVzIHRvIGJlIGhlbGQgKi8KIAotCQltZW1jcHkocG9ydC0+eG1pdF9idWYgKyBwb3J0LT54bWl0X2hlYWQsIGJ1ZiwgYyk7CisJCW1lbWNweShwb3J0LT5wb3J0LnhtaXRfYnVmICsgcG9ydC0+eG1pdF9oZWFkLCBidWYsIGMpOwogCQlwb3J0LT54bWl0X2hlYWQgPSAocG9ydC0+eG1pdF9oZWFkICsgYykgJiAoU0VSSUFMX1hNSVRfU0laRS0xKTsKIAkJcG9ydC0+eG1pdF9jbnQgKz0gYzsKIApAQCAtMTE1MSwxNSArMTEyOSwxMiBAQAogCWlmIChyY19wYXJhbm9pYV9jaGVjayhwb3J0LCB0dHktPm5hbWUsICJyY19wdXRfY2hhciIpKQogCQlyZXR1cm4gMDsKIAotCWlmICghdHR5IHx8ICFwb3J0LT54bWl0X2J1ZikKLQkJcmV0dXJuIDA7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKIAogCWlmIChwb3J0LT54bWl0X2NudCA+PSBTRVJJQUxfWE1JVF9TSVpFIC0gMSkKIAkJZ290byBvdXQ7CiAKLQlwb3J0LT54bWl0X2J1Zltwb3J0LT54bWl0X2hlYWQrK10gPSBjaDsKKwlwb3J0LT5wb3J0LnhtaXRfYnVmW3BvcnQtPnhtaXRfaGVhZCsrXSA9IGNoOwogCXBvcnQtPnhtaXRfaGVhZCAmPSBTRVJJQUxfWE1JVF9TSVpFIC0gMTsKIAlwb3J0LT54bWl0X2NudCsrOwogCXJldCA9IDE7CkBAIC0xMTc3LDggKzExNTIsNyBAQAogCWlmIChyY19wYXJhbm9pYV9jaGVjayhwb3J0LCB0dHktPm5hbWUsICJyY19mbHVzaF9jaGFycyIpKQogCQlyZXR1cm47CiAKLQlpZiAocG9ydC0+eG1pdF9jbnQgPD0gMCB8fCB0dHktPnN0b3BwZWQgfHwgdHR5LT5od19zdG9wcGVkIHx8Ci0JICAgICFwb3J0LT54bWl0X2J1ZikKKwlpZiAocG9ydC0+eG1pdF9jbnQgPD0gMCB8fCB0dHktPnN0b3BwZWQgfHwgdHR5LT5od19zdG9wcGVkKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKQEAgLTEyNzYsMTEgKzEyNTAsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmNfc2VuZF9icmVhayhzdHJ1Y3QgcmlzY29tX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQorc3RhdGljIGludCByY19zZW5kX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBsZW5ndGgpCiB7CisJc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0ID0gKHN0cnVjdCByaXNjb21fcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHJpc2NvbV9ib2FyZCAqYnAgPSBwb3J0X0JvYXJkKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAobGVuZ3RoID09IDAgfHwgbGVuZ3RoID09IC0xKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKIAogCXBvcnQtPmJyZWFrX2xlbmd0aCA9IFJJU0NPTV9UUFMgLyBIWiAqIGxlbmd0aDsKQEAgLTEyOTQsNiArMTI3Miw3IEBACiAJcmNfd2FpdF9DQ1IoYnApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByY19zZXRfc2VyaWFsX2luZm8oc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0LApAQCAtMTMxNywyMiArMTI5NiwyMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgogCi0JY2hhbmdlX3NwZWVkID0gKChwb3J0LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSAhPQorCWNoYW5nZV9zcGVlZCA9ICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSAhPQogCQkJKHRtcC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSk7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJaWYgKCh0bXAuY2xvc2VfZGVsYXkgIT0gcG9ydC0+Y2xvc2VfZGVsYXkpIHx8Ci0JCSAgICAodG1wLmNsb3Npbmdfd2FpdCAhPSBwb3J0LT5jbG9zaW5nX3dhaXQpIHx8CisJCWlmICgodG1wLmNsb3NlX2RlbGF5ICE9IHBvcnQtPnBvcnQuY2xvc2VfZGVsYXkpIHx8CisJCSAgICAodG1wLmNsb3Npbmdfd2FpdCAhPSBwb3J0LT5wb3J0LmNsb3Npbmdfd2FpdCkgfHwKIAkJICAgICgodG1wLmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSAhPQotCQkgICAgIChwb3J0LT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQorCQkgICAgIChwb3J0LT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpCiAJCQlyZXR1cm4gLUVQRVJNOwotCQlwb3J0LT5mbGFncyA9ICgocG9ydC0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKKwkJcG9ydC0+cG9ydC5mbGFncyA9ICgocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgfAogCQkJICAgICAgICh0bXAuZmxhZ3MgJiBBU1lOQ19VU1JfTUFTSykpOwogCX0gZWxzZSAgewotCQlwb3J0LT5mbGFncyA9ICgocG9ydC0+ZmxhZ3MgJiB+QVNZTkNfRkxBR1MpIHwKKwkJcG9ydC0+cG9ydC5mbGFncyA9ICgocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAogCQkJICAgICAgICh0bXAuZmxhZ3MgJiBBU1lOQ19GTEFHUykpOwotCQlwb3J0LT5jbG9zZV9kZWxheSA9IHRtcC5jbG9zZV9kZWxheTsKLQkJcG9ydC0+Y2xvc2luZ193YWl0ID0gdG1wLmNsb3Npbmdfd2FpdDsKKwkJcG9ydC0+cG9ydC5jbG9zZV9kZWxheSA9IHRtcC5jbG9zZV9kZWxheTsKKwkJcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQgPSB0bXAuY2xvc2luZ193YWl0OwogCX0KIAlpZiAoY2hhbmdlX3NwZWVkKSAgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTM1NSwxMCArMTMzNCwxMCBAQAogCXRtcC5saW5lID0gcG9ydCAtIHJjX3BvcnQ7CiAJdG1wLnBvcnQgPSBicC0+YmFzZTsKIAl0bXAuaXJxICA9IGJwLT5pcnE7Ci0JdG1wLmZsYWdzID0gcG9ydC0+ZmxhZ3M7CisJdG1wLmZsYWdzID0gcG9ydC0+cG9ydC5mbGFnczsKIAl0bXAuYmF1ZF9iYXNlID0gKFJDX09TQ0ZSRVEgKyBDRDE4MF9UUEMvMikgLyBDRDE4MF9UUEM7Ci0JdG1wLmNsb3NlX2RlbGF5ID0gcG9ydC0+Y2xvc2VfZGVsYXkgKiBIWi8xMDA7Ci0JdG1wLmNsb3Npbmdfd2FpdCA9IHBvcnQtPmNsb3Npbmdfd2FpdCAqIEhaLzEwMDsKKwl0bXAuY2xvc2VfZGVsYXkgPSBwb3J0LT5wb3J0LmNsb3NlX2RlbGF5ICogSFovMTAwOworCXRtcC5jbG9zaW5nX3dhaXQgPSBwb3J0LT5wb3J0LmNsb3Npbmdfd2FpdCAqIEhaLzEwMDsKIAl0bXAueG1pdF9maWZvX3NpemUgPSBDRDE4MF9ORklGTzsKIAlyZXR1cm4gY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZih0bXApKSA/IC1FRkFVTFQgOiAwOwogfQpAQCAtMTM2OCwyNyArMTM0NywxMiBAQAogewogCXN0cnVjdCByaXNjb21fcG9ydCAqcG9ydCA9IChzdHJ1Y3QgcmlzY29tX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCWludCByZXR2YWwgPSAwOworCWludCByZXR2YWw7CiAKIAlpZiAocmNfcGFyYW5vaWFfY2hlY2socG9ydCwgdHR5LT5uYW1lLCAicmNfaW9jdGwiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVENTQlJLOgkvKiBTVklEIHZlcnNpb246IG5vbi16ZXJvIGFyZyAtLT4gbm8gYnJlYWsgKi8KLQkJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwotCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwotCQlpZiAoIWFyZykKLQkJCXJjX3NlbmRfYnJlYWsocG9ydCwgSFovNCk7CS8qIDEvNCBzZWNvbmQgKi8KLQkJYnJlYWs7Ci0JY2FzZSBUQ1NCUktQOgkvKiBzdXBwb3J0IGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCi0JCXJldHZhbCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKLQkJaWYgKHJldHZhbCkKLQkJCXJldHVybiByZXR2YWw7Ci0JCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCAwKTsKLQkJcmNfc2VuZF9icmVhayhwb3J0LCBhcmcgPyBhcmcqKEhaLzEwKSA6IEhaLzQpOwotCQlicmVhazsKIAljYXNlIFRJT0NHU0VSSUFMOgogCQlsb2NrX2tlcm5lbCgpOwogCQlyZXR2YWwgPSByY19nZXRfc2VyaWFsX2luZm8ocG9ydCwgYXJncCk7CkBAIC0xNDgwLDcgKzE0NDQsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7CiAKLQlpZiAocG9ydC0+eG1pdF9jbnQgJiYgcG9ydC0+eG1pdF9idWYgJiYgIShwb3J0LT5JRVIgJiBJRVJfVFhSRFkpKSB7CisJaWYgKHBvcnQtPnhtaXRfY250ICYmIHBvcnQtPnBvcnQueG1pdF9idWYgJiYgIShwb3J0LT5JRVIgJiBJRVJfVFhSRFkpKSB7CiAJCXBvcnQtPklFUiB8PSBJRVJfVFhSRFk7CiAJCXJjX291dChicCwgQ0QxODBfQ0FSLCBwb3J0X05vKHBvcnQpKTsKIAkJcmNfb3V0KGJwLCBDRDE4MF9JRVIsIHBvcnQtPklFUik7CkBAIC0xNDk4LDExICsxNDYyLDExIEBACiAKIAlicCA9IHBvcnRfQm9hcmQocG9ydCk7CiAKLQlyY19zaHV0ZG93bl9wb3J0KGJwLCBwb3J0KTsKLQlwb3J0LT5jb3VudCA9IDA7Ci0JcG9ydC0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JcG9ydC0+dHR5ID0gTlVMTDsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJcmNfc2h1dGRvd25fcG9ydCh0dHksIGJwLCBwb3J0KTsKKwlwb3J0LT5wb3J0LmNvdW50ID0gMDsKKwlwb3J0LT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnQub3Blbl93YWl0KTsKIH0KIAogc3RhdGljIHZvaWQgcmNfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTE1NDMsNiArMTUwNyw3IEBACiAJLmhhbmd1cCA9IHJjX2hhbmd1cCwKIAkudGlvY21nZXQgPSByY190aW9jbWdldCwKIAkudGlvY21zZXQgPSByY190aW9jbXNldCwKKwkuYnJlYWtfY3RsID0gcmNfc2VuZF9icmVhaywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJjX2luaXRfZHJpdmVycyh2b2lkKQpAQCAtMTU2NCw3ICsxNTI5LDcgQEAKIAkJQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwogCXJpc2NvbV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDk2MDA7CiAJcmlzY29tX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDsKLQlyaXNjb21fZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVc7CisJcmlzY29tX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9IQVJEV0FSRV9CUkVBSzsKIAl0dHlfc2V0X29wZXJhdGlvbnMocmlzY29tX2RyaXZlciwgJnJpc2NvbV9vcHMpOwogCWVycm9yID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihyaXNjb21fZHJpdmVyKTsKIAlpZiAoZXJyb3IgIT0gMCkgewpAQCAtMTU3NSwxMSArMTU0MCw4IEBACiAJfQogCW1lbXNldChyY19wb3J0LCAwLCBzaXplb2YocmNfcG9ydCkpOwogCWZvciAoaSA9IDA7IGkgPCBSQ19OUE9SVCAqIFJDX05CT0FSRDsgaSsrKSAgeworCQl0dHlfcG9ydF9pbml0KCZyY19wb3J0W2ldLnBvcnQpOwogCQlyY19wb3J0W2ldLm1hZ2ljID0gUklTQ09NOF9NQUdJQzsKLQkJcmNfcG9ydFtpXS5jbG9zZV9kZWxheSA9IDUwICogSFogLyAxMDA7Ci0JCXJjX3BvcnRbaV0uY2xvc2luZ193YWl0ID0gMzAwMCAqIEhaIC8gMTAwOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyY19wb3J0W2ldLm9wZW5fd2FpdCk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJjX3BvcnRbaV0uY2xvc2Vfd2FpdCk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpc2NvbTguaCBiL2RyaXZlcnMvY2hhci9yaXNjb204LmgKaW5kZXggY2RmZGY0My4uYzk4NzZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpc2NvbTguaAorKysgYi9kcml2ZXJzL2NoYXIvcmlzY29tOC5oCkBAIC02NiwyMyArNjYsMTUgQEAKIAkKIHN0cnVjdCByaXNjb21fcG9ydCB7CiAJaW50CQkJbWFnaWM7CisJc3RydWN0CQkJdHR5X3BvcnQgcG9ydDsKIAlpbnQJCQliYXVkX2Jhc2U7Ci0JaW50CQkJZmxhZ3M7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgCSogdHR5OwotCWludAkJCWNvdW50OwotCWludAkJCWJsb2NrZWRfb3BlbjsKIAlpbnQJCQl0aW1lb3V0OwotCWludAkJCWNsb3NlX2RlbGF5OwotCXVuc2lnbmVkIGNoYXIgCQkqIHhtaXRfYnVmOwogCWludAkJCWN1c3RvbV9kaXZpc29yOwogCWludAkJCXhtaXRfaGVhZDsKIAlpbnQJCQl4bWl0X3RhaWw7CiAJaW50CQkJeG1pdF9jbnQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90CWNsb3NlX3dhaXQ7CiAJc2hvcnQJCQl3YWtldXBfY2hhcnM7CiAJc2hvcnQJCQlicmVha19sZW5ndGg7Ci0JdW5zaWduZWQgc2hvcnQJCWNsb3Npbmdfd2FpdDsKIAl1bnNpZ25lZCBjaGFyCQltYXJrX21hc2s7CiAJdW5zaWduZWQgY2hhcgkJSUVSOwogCXVuc2lnbmVkIGNoYXIJCU1TVlI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcm9ja2V0LmMgYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKaW5kZXggNzQzZGM4MC4uNTg0ZDc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JvY2tldC5jCisrKyBiL2RyaXZlcnMvY2hhci9yb2NrZXQuYwpAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CkBAIC04MSw3ICs4Miw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpAQCAtNDM0LDE1ICs0MzUsMTUgQEAKICNlbmRpZgogCWlmICghaW5mbykKIAkJcmV0dXJuOwotCWlmICghaW5mby0+dHR5KSB7CisJaWYgKCFpbmZvLT5wb3J0LnR0eSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJycDogV0FSTklORyAlcyBjYWxsZWQgd2l0aCAiCi0JCQkJImluZm8tPnR0eT09TlVMTFxuIiwgX19mdW5jX18pOworCQkJCSJpbmZvLT5wb3J0LnR0eT09TlVMTFxuIiwgX19mdW5jX18pOwogCQljbGVhcl9iaXQoKGluZm8tPmFpb3AgKiA4KSArIGluZm8tPmNoYW4sICh2b2lkICopICZ4bWl0X2ZsYWdzW2luZm8tPmJvYXJkXSk7CiAJCXJldHVybjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKLQl0dHkgPSBpbmZvLT50dHk7CisJdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJaW5mby0+eG1pdF9maWZvX3Jvb20gPSBUWEZJRk9fU0laRSAtIHNHZXRUeENudChjcCk7CiAKIAkvKiAgTG9vcCBzZW5kaW5nIGRhdGEgdG8gRklGTyB1bnRpbCBkb25lIG9yIEZJRk8gZnVsbCAqLwpAQCAtNTAyLDEzICs1MDMsMTMgQEAKIAkJCQkiaW5mby0+ZmxhZ3MgJiBOT1RfSU5JVFxuIik7CiAJCXJldHVybjsKIAl9Ci0JaWYgKCFpbmZvLT50dHkpIHsKKwlpZiAoIWluZm8tPnBvcnQudHR5KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJwOiBXQVJOSU5HOiBycF9oYW5kbGVfcG9ydCBjYWxsZWQgd2l0aCAiCi0JCQkJImluZm8tPnR0eT09TlVMTFxuIik7CisJCQkJImluZm8tPnBvcnQudHR5PT1OVUxMXG4iKTsKIAkJcmV0dXJuOwogCX0KIAljcCA9ICZpbmZvLT5jaGFubmVsOwotCXR0eSA9IGluZm8tPnR0eTsKKwl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAogCUludE1hc2sgPSBzR2V0Q2hhbkludElEKGNwKSAmIGluZm8tPmludG1hc2s7CiAjaWZkZWYgUk9DS0VUX0RFQlVHX0lOVFIKQEAgLTUzMCw3ICs1MzEsNyBAQAogCQkJdHR5X2hhbmd1cCh0dHkpOwogCQl9CiAJCWluZm8tPmNkX3N0YXR1cyA9IChDaGFuU3RhdHVzICYgQ0RfQUNUKSA/IDEgOiAwOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwogCX0KICNpZmRlZiBST0NLRVRfREVCVUdfSU5UUgogCWlmIChJbnRNYXNrICYgREVMVEFfQ1RTKSB7CS8qIENUUyBjaGFuZ2UgKi8KQEAgLTY0OCw5ICs2NDksOSBAQAogCWluZm8tPmJvYXJkID0gYm9hcmQ7CiAJaW5mby0+YWlvcCA9IGFpb3A7CiAJaW5mby0+Y2hhbiA9IGNoYW47Ci0JaW5mby0+Y2xvc2luZ193YWl0ID0gMzAwMDsKLQlpbmZvLT5jbG9zZV9kZWxheSA9IDUwOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPm9wZW5fd2FpdCk7CisJaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQgPSAzMDAwOworCWluZm8tPnBvcnQuY2xvc2VfZGVsYXkgPSA1MDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAJaW5pdF9jb21wbGV0aW9uKCZpbmZvLT5jbG9zZV93YWl0KTsKIAlpbmZvLT5mbGFncyAmPSB+Uk9DS0VUX01PREVfTUFTSzsKIAlzd2l0Y2ggKHBjMTA0W2JvYXJkXVtsaW5lXSkgewpAQCAtNzE3LDcgKzcxOCw3IEBACiAJdW5zaWduZWQgcm9ja2V0TW9kZTsKIAlpbnQgYml0cywgYmF1ZCwgZGl2aXNvcjsKIAlDSEFOTkVMX3QgKmNwOwotCXN0cnVjdCBrdGVybWlvcyAqdCA9IGluZm8tPnR0eS0+dGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnQgPSBpbmZvLT5wb3J0LnR0eS0+dGVybWlvczsKIAogCWNwID0gJmluZm8tPmNoYW5uZWw7CiAJY2ZsYWcgPSB0LT5jX2NmbGFnOwpAQCAtNzUwLDcgKzc1MSw3IEBACiAJfQogCiAJLyogYmF1ZCByYXRlICovCi0JYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKGluZm8tPnR0eSk7CisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKGluZm8tPnBvcnQudHR5KTsKIAlpZiAoIWJhdWQpCiAJCWJhdWQgPSA5NjAwOwogCWRpdmlzb3IgPSAoKHJwX2JhdWRfYmFzZVtpbmZvLT5ib2FyZF0gKyAoYmF1ZCA+PiAxKSkgLyBiYXVkKSAtIDE7CkBAIC03NjgsNyArNzY5LDcgQEAKIAlzU2V0QmF1ZChjcCwgZGl2aXNvcik7CiAKIAkvKiBGSVhNRTogU2hvdWxkIHJlYWxseSBiYWNrIGNvbXB1dGUgYSBiYXVkIHJhdGUgZnJvbSB0aGUgZGl2aXNvciAqLwotCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKGluZm8tPnR0eSwgYmF1ZCwgYmF1ZCk7CisJdHR5X2VuY29kZV9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHksIGJhdWQsIGJhdWQpOwogCiAJaWYgKGNmbGFnICYgQ1JUU0NUUykgewogCQlpbmZvLT5pbnRtYXNrIHw9IERFTFRBX0NUUzsKQEAgLTc5MywxNSArNzk0LDE1IEBACiAJICogSGFuZGxlIHNvZnR3YXJlIGZsb3cgY29udHJvbCBpbiB0aGUgYm9hcmQKIAkgKi8KICNpZmRlZiBST0NLRVRfU09GVF9GTE9XCi0JaWYgKElfSVhPTihpbmZvLT50dHkpKSB7CisJaWYgKElfSVhPTihpbmZvLT5wb3J0LnR0eSkpIHsKIAkJc0VuVHhTb2Z0Rmxvd0N0bChjcCk7Ci0JCWlmIChJX0lYQU5ZKGluZm8tPnR0eSkpIHsKKwkJaWYgKElfSVhBTlkoaW5mby0+cG9ydC50dHkpKSB7CiAJCQlzRW5JWEFOWShjcCk7CiAJCX0gZWxzZSB7CiAJCQlzRGlzSVhBTlkoY3ApOwogCQl9Ci0JCXNTZXRUeFhPTkNoYXIoY3AsIFNUQVJUX0NIQVIoaW5mby0+dHR5KSk7Ci0JCXNTZXRUeFhPRkZDaGFyKGNwLCBTVE9QX0NIQVIoaW5mby0+dHR5KSk7CisJCXNTZXRUeFhPTkNoYXIoY3AsIFNUQVJUX0NIQVIoaW5mby0+cG9ydC50dHkpKTsKKwkJc1NldFR4WE9GRkNoYXIoY3AsIFNUT1BfQ0hBUihpbmZvLT5wb3J0LnR0eSkpOwogCX0gZWxzZSB7CiAJCXNEaXNUeFNvZnRGbG93Q3RsKGNwKTsKIAkJc0Rpc0lYQU5ZKGNwKTsKQEAgLTgxMywyNCArODE0LDI0IEBACiAJICogU2V0IHVwIGlnbm9yZS9yZWFkIG1hc2sgd29yZHMKIAkgKi8KIAlpbmZvLT5yZWFkX3N0YXR1c19tYXNrID0gU1RNUkNWUk9WUkggfCAweEZGOwotCWlmIChJX0lOUENLKGluZm8tPnR0eSkpCisJaWYgKElfSU5QQ0soaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrIHw9IFNUTUZSQU1FSCB8IFNUTVBBUklUWUg7Ci0JaWYgKElfQlJLSU5UKGluZm8tPnR0eSkgfHwgSV9QQVJNUksoaW5mby0+dHR5KSkKKwlpZiAoSV9CUktJTlQoaW5mby0+cG9ydC50dHkpIHx8IElfUEFSTVJLKGluZm8tPnBvcnQudHR5KSkKIAkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayB8PSBTVE1CUkVBS0g7CiAKIAkvKgogCSAqIENoYXJhY3RlcnMgdG8gaWdub3JlCiAJICovCiAJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKLQlpZiAoSV9JR05QQVIoaW5mby0+dHR5KSkKKwlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gU1RNRlJBTUVIIHwgU1RNUEFSSVRZSDsKLQlpZiAoSV9JR05CUksoaW5mby0+dHR5KSkgeworCWlmIChJX0lHTkJSSyhpbmZvLT5wb3J0LnR0eSkpIHsKIAkJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFNUTUJSRUFLSDsKIAkJLyoKIAkJICogSWYgd2UncmUgaWdub3JpbmcgcGFyaXR5IGFuZCBicmVhayBpbmRpY2F0b3JzLAogCQkgKiBpZ25vcmUgb3ZlcnJ1bnMgdG9vLiAgKEZvciByZWFsIHJhdyBzdXBwb3J0KS4KIAkJICovCi0JCWlmIChJX0lHTlBBUihpbmZvLT50dHkpKQorCQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQogCQkJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFNUTVJDVlJPVlJIOwogCX0KIApAQCAtODYzLDcgKzg2NCw3IEBACiAJfQogfQogCi0vKiAgaW5mby0+Y291bnQgaXMgY29uc2lkZXJlZCBjcml0aWNhbCwgcHJvdGVjdGVkIGJ5IHNwaW5sb2Nrcy4gICovCisvKiAgaW5mby0+cG9ydC5jb3VudCBpcyBjb25zaWRlcmVkIGNyaXRpY2FsLCBwcm90ZWN0ZWQgYnkgc3BpbmxvY2tzLiAgKi8KIHN0YXRpYyBpbnQgYmxvY2tfdGlsX3JlYWR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJICAgc3RydWN0IHJfcG9ydCAqaW5mbykKIHsKQEAgLTg5NywxMyArODk4LDEzIEBACiAKIAkvKgogCSAqIEJsb2NrIHdhaXRpbmcgZm9yIHRoZSBjYXJyaWVyIGRldGVjdCBhbmQgdGhlIGxpbmUgdG8gYmVjb21lIGZyZWUuICBXaGlsZSB3ZSBhcmUgaW4KLQkgKiB0aGlzIGxvb3AsIGluZm8tPmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0IHJwX2Nsb3NlKCkga25vd3Mgd2hlbiB0byBmcmVlIHRoaW5ncy4gIAorCSAqIHRoaXMgbG9vcCwgaW5mby0+cG9ydC5jb3VudCBpcyBkcm9wcGVkIGJ5IG9uZSwgc28gdGhhdCBycF9jbG9zZSgpIGtub3dzIHdoZW4gdG8gZnJlZSB0aGluZ3MuCiAgICAgICAgICAqIFdlIHJlc3RvcmUgaXQgdXBvbiBleGl0LCBlaXRoZXIgbm9ybWFsIG9yIGFibm9ybWFsLgogCSAqLwogCXJldHZhbCA9IDA7Ci0JYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogI2lmZGVmIFJPQ0tFVF9ERUJVR19PUEVOCi0JcHJpbnRrKEtFUk5fSU5GTyAiYmxvY2tfdGlsX3JlYWR5IGJlZm9yZSBibG9jazogdHR5UiVkLCBjb3VudCA9ICVkXG4iLCBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiYmxvY2tfdGlsX3JlYWR5IGJlZm9yZSBibG9jazogdHR5UiVkLCBjb3VudCA9ICVkXG4iLCBpbmZvLT5saW5lLCBpbmZvLT5wb3J0LmNvdW50KTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCkBAIC05MTIsMTAgKzkxMywxMCBAQAogI2Vsc2UKIAlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpIHsKIAkJZXh0cmFfY291bnQgPSAxOwotCQlpbmZvLT5jb3VudC0tOworCQlpbmZvLT5wb3J0LmNvdW50LS07CiAJfQogI2VuZGlmCi0JaW5mby0+YmxvY2tlZF9vcGVuKys7CisJaW5mby0+cG9ydC5ibG9ja2VkX29wZW4rKzsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CiAKQEAgLTk0MCwyNCArOTQxLDI0IEBACiAJCX0KICNpZmRlZiBST0NLRVRfREVCVUdfT1BFTgogCQlwcmludGsoS0VSTl9JTkZPICJibG9ja190aWxfcmVhZHkgYmxvY2tpbmc6IHR0eVIlZCwgY291bnQgPSAlZCwgZmxhZ3M9MHglMHhcbiIsCi0JCSAgICAgaW5mby0+bGluZSwgaW5mby0+Y291bnQsIGluZm8tPmZsYWdzKTsKKwkJICAgICBpbmZvLT5saW5lLCBpbmZvLT5wb3J0LmNvdW50LCBpbmZvLT5mbGFncyk7CiAjZW5kaWYKIAkJc2NoZWR1bGUoKTsJLyogIERvbid0IGhvbGQgc3BpbmxvY2sgaGVyZSwgd2lsbCBoYW5nIFBDICovCiAJfQogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPnBvcnQub3Blbl93YWl0LCAmd2FpdCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKIAogCWlmIChleHRyYV9jb3VudCkKLQkJaW5mby0+Y291bnQrKzsKLQlpbmZvLT5ibG9ja2VkX29wZW4tLTsKKwkJaW5mby0+cG9ydC5jb3VudCsrOworCWluZm8tPnBvcnQuYmxvY2tlZF9vcGVuLS07CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCiAjaWZkZWYgUk9DS0VUX0RFQlVHX09QRU4KIAlwcmludGsoS0VSTl9JTkZPICJibG9ja190aWxfcmVhZHkgYWZ0ZXIgYmxvY2tpbmc6IHR0eVIlZCwgY291bnQgPSAlZFxuIiwKLQkgICAgICAgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworCSAgICAgICBpbmZvLT5saW5lLCBpbmZvLT5wb3J0LmNvdW50KTsKICNlbmRpZgogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CkBAIC0xMDAxLDkgKzEwMDIsOSBAQAogCQlpbmZvLT54bWl0X2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHBhZ2U7CiAKIAl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKLQlpbmZvLT50dHkgPSB0dHk7CisJaW5mby0+cG9ydC50dHkgPSB0dHk7CiAKLQlpZiAoaW5mby0+Y291bnQrKyA9PSAwKSB7CisJaWYgKGluZm8tPnBvcnQuY291bnQrKyA9PSAwKSB7CiAJCWF0b21pY19pbmMoJnJwX251bV9wb3J0c19vcGVuKTsKIAogI2lmZGVmIFJPQ0tFVF9ERUJVR19PUEVOCkBAIC0xMDEyLDcgKzEwMTMsNyBAQAogI2VuZGlmCiAJfQogI2lmZGVmIFJPQ0tFVF9ERUJVR19PUEVOCi0JcHJpbnRrKEtFUk5fSU5GTyAicnBfb3BlbiB0dHlSJWQsIGNvdW50PSVkXG4iLCBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7CisJcHJpbnRrKEtFUk5fSU5GTyAicnBfb3BlbiB0dHlSJWQsIGNvdW50PSVkXG4iLCBpbmZvLT5saW5lLCBpbmZvLT5wb3J0LmNvdW50KTsKICNlbmRpZgogCiAJLyoKQEAgLTEwNDgsMTMgKzEwNDksMTMgQEAKIAkJICogU2V0IHVwIHRoZSB0dHktPmFsdF9zcGVlZCBrbHVkZ2UKIAkJICovCiAJCWlmICgoaW5mby0+ZmxhZ3MgJiBST0NLRVRfU1BEX01BU0spID09IFJPQ0tFVF9TUERfSEkpCi0JCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDU3NjAwOworCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDU3NjAwOwogCQlpZiAoKGluZm8tPmZsYWdzICYgUk9DS0VUX1NQRF9NQVNLKSA9PSBST0NLRVRfU1BEX1ZISSkKLQkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gMTE1MjAwOworCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDExNTIwMDsKIAkJaWYgKChpbmZvLT5mbGFncyAmIFJPQ0tFVF9TUERfTUFTSykgPT0gUk9DS0VUX1NQRF9TSEkpCi0JCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDIzMDQwMDsKKwkJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7CiAJCWlmICgoaW5mby0+ZmxhZ3MgJiBST0NLRVRfU1BEX01BU0spID09IFJPQ0tFVF9TUERfV0FSUCkKLQkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gNDYwODAwOworCQkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKIAogCQljb25maWd1cmVfcl9wb3J0KGluZm8sIE5VTEwpOwogCQlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpIHsKQEAgLTEwNzYsNyArMTA3Nyw3IEBACiB9CiAKIC8qCi0gKiAgRXhjZXB0aW9uIGhhbmRsZXIgdGhhdCBjbG9zZXMgYSBzZXJpYWwgcG9ydC4gaW5mby0+Y291bnQgaXMgY29uc2lkZXJlZCBjcml0aWNhbC4gCisgKiAgRXhjZXB0aW9uIGhhbmRsZXIgdGhhdCBjbG9zZXMgYSBzZXJpYWwgcG9ydC4gaW5mby0+cG9ydC5jb3VudCBpcyBjb25zaWRlcmVkIGNyaXRpY2FsLgogICovCiBzdGF0aWMgdm9pZCBycF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKQEAgLTEwODksMTQgKzEwOTAsMTQgQEAKIAkJcmV0dXJuOwogCiAjaWZkZWYgUk9DS0VUX0RFQlVHX09QRU4KLQlwcmludGsoS0VSTl9JTkZPICJycF9jbG9zZSB0dHlSJWQsIGNvdW50ID0gJWRcbiIsIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKKwlwcmludGsoS0VSTl9JTkZPICJycF9jbG9zZSB0dHlSJWQsIGNvdW50ID0gJWRcbiIsIGluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOwogI2VuZGlmCiAKIAlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkKIAkJcmV0dXJuOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCi0JaWYgKCh0dHktPmNvdW50ID09IDEpICYmIChpbmZvLT5jb3VudCAhPSAxKSkgeworCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAoaW5mby0+cG9ydC5jb3VudCAhPSAxKSkgewogCQkvKgogCQkgKiBVaCwgb2guICB0dHktPmNvdW50IGlzIDEsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHR0eQogCQkgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4gIEluZm8tPmNvdW50IHNob3VsZCBhbHdheXMKQEAgLTExMDUsMTUgKzExMDYsMTUgQEAKIAkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCiAJCSAqLwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJycF9jbG9zZTogYmFkIHNlcmlhbCBwb3J0IGNvdW50OyAiCi0JCQkidHR5LT5jb3VudCBpcyAxLCBpbmZvLT5jb3VudCBpcyAlZFxuIiwgaW5mby0+Y291bnQpOwotCQlpbmZvLT5jb3VudCA9IDE7CisJCQkidHR5LT5jb3VudCBpcyAxLCBpbmZvLT5wb3J0LmNvdW50IGlzICVkXG4iLCBpbmZvLT5wb3J0LmNvdW50KTsKKwkJaW5mby0+cG9ydC5jb3VudCA9IDE7CiAJfQotCWlmICgtLWluZm8tPmNvdW50IDwgMCkgeworCWlmICgtLWluZm8tPnBvcnQuY291bnQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJwX2Nsb3NlOiBiYWQgc2VyaWFsIHBvcnQgY291bnQgZm9yICIKLQkJCQkidHR5UiVkOiAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOwotCQlpbmZvLT5jb3VudCA9IDA7CisJCQkJInR0eVIlZDogJWRcbiIsIGluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOworCQlpbmZvLT5wb3J0LmNvdW50ID0gMDsKIAl9Ci0JaWYgKGluZm8tPmNvdW50KSB7CisJaWYgKGluZm8tPnBvcnQuY291bnQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTExMzcsOCArMTEzOCw4IEBACiAJLyoKIAkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXQgYnVmZmVyIHRvIGNsZWFyCiAJICovCi0JaWYgKGluZm8tPmNsb3Npbmdfd2FpdCAhPSBST0NLRVRfQ0xPU0lOR19XQUlUX05PTkUpCi0JCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT5jbG9zaW5nX3dhaXQpOworCWlmIChpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCAhPSBST0NLRVRfQ0xPU0lOR19XQUlUX05PTkUpCisJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCk7CiAJLyoKIAkgKiBCZWZvcmUgd2UgZHJvcCBEVFIsIG1ha2Ugc3VyZSB0aGUgVUFSVCB0cmFuc21pdHRlcgogCSAqIGhhcyBjb21wbGV0ZWx5IGRyYWluZWQ7IHRoaXMgaXMgZXNwZWNpYWxseQpAQCAtMTE2NywxMSArMTE2OCwxMSBAQAogCiAJY2xlYXJfYml0KChpbmZvLT5haW9wICogOCkgKyBpbmZvLT5jaGFuLCAodm9pZCAqKSAmeG1pdF9mbGFnc1tpbmZvLT5ib2FyZF0pOwogCi0JaWYgKGluZm8tPmJsb2NrZWRfb3BlbikgewotCQlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpIHsKLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MoaW5mby0+Y2xvc2VfZGVsYXkpKTsKKwlpZiAoaW5mby0+cG9ydC5ibG9ja2VkX29wZW4pIHsKKwkJaWYgKGluZm8tPnBvcnQuY2xvc2VfZGVsYXkpIHsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MoaW5mby0+cG9ydC5jbG9zZV9kZWxheSkpOwogCQl9Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAJfSBlbHNlIHsKIAkJaWYgKGluZm8tPnhtaXRfYnVmKSB7CiAJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGluZm8tPnhtaXRfYnVmKTsKQEAgLTEyMzUsMTMgKzEyMzYsMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHJwX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyBpbnQgcnBfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogewogCXN0cnVjdCByX3BvcnQgKmluZm8gPSAoc3RydWN0IHJfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocm9ja2V0X3BhcmFub2lhX2NoZWNrKGluZm8sICJycF9icmVhayIpKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CiAJaWYgKGJyZWFrX3N0YXRlID09IC0xKQpAQCAtMTI0OSw2ICsxMjUwLDcgQEAKIAllbHNlCiAJCXNDbHJCcmVhaygmaW5mby0+Y2hhbm5lbCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTEzMjcsOCArMTMyOSw4IEBACiAJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZiAodG1wKSk7CiAJdG1wLmxpbmUgPSBpbmZvLT5saW5lOwogCXRtcC5mbGFncyA9IGluZm8tPmZsYWdzOwotCXRtcC5jbG9zZV9kZWxheSA9IGluZm8tPmNsb3NlX2RlbGF5OwotCXRtcC5jbG9zaW5nX3dhaXQgPSBpbmZvLT5jbG9zaW5nX3dhaXQ7CisJdG1wLmNsb3NlX2RlbGF5ID0gaW5mby0+cG9ydC5jbG9zZV9kZWxheTsKKwl0bXAuY2xvc2luZ193YWl0ID0gaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQ7CiAJdG1wLnBvcnQgPSByY2t0cHRfaW9fYWRkclsoaW5mby0+bGluZSA+PiA1KSAmIDNdOwogCiAJaWYgKGNvcHlfdG9fdXNlcihyZXRpbmZvLCAmdG1wLCBzaXplb2YgKCpyZXRpbmZvKSkpCkBAIC0xMzUzLDE3ICsxMzU1LDE3IEBACiAJfQogCiAJaW5mby0+ZmxhZ3MgPSAoKGluZm8tPmZsYWdzICYgflJPQ0tFVF9GTEFHUykgfCAobmV3X3NlcmlhbC5mbGFncyAmIFJPQ0tFVF9GTEFHUykpOwotCWluZm8tPmNsb3NlX2RlbGF5ID0gbmV3X3NlcmlhbC5jbG9zZV9kZWxheTsKLQlpbmZvLT5jbG9zaW5nX3dhaXQgPSBuZXdfc2VyaWFsLmNsb3Npbmdfd2FpdDsKKwlpbmZvLT5wb3J0LmNsb3NlX2RlbGF5ID0gbmV3X3NlcmlhbC5jbG9zZV9kZWxheTsKKwlpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0OwogCiAJaWYgKChpbmZvLT5mbGFncyAmIFJPQ0tFVF9TUERfTUFTSykgPT0gUk9DS0VUX1NQRF9ISSkKLQkJaW5mby0+dHR5LT5hbHRfc3BlZWQgPSA1NzYwMDsKKwkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDU3NjAwOwogCWlmICgoaW5mby0+ZmxhZ3MgJiBST0NLRVRfU1BEX01BU0spID09IFJPQ0tFVF9TUERfVkhJKQotCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDExNTIwMDsKKwkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDExNTIwMDsKIAlpZiAoKGluZm8tPmZsYWdzICYgUk9DS0VUX1NQRF9NQVNLKSA9PSBST0NLRVRfU1BEX1NISSkKLQkJaW5mby0+dHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7CisJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7CiAJaWYgKChpbmZvLT5mbGFncyAmIFJPQ0tFVF9TUERfTUFTSykgPT0gUk9DS0VUX1NQRF9XQVJQKQotCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKKwkJaW5mby0+cG9ydC50dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKIAogCWNvbmZpZ3VyZV9yX3BvcnQoaW5mbywgTlVMTCk7CiAJcmV0dXJuIDA7CkBAIC0xNjM2LDEzICsxNjM4LDEzIEBACiAJcnBfZmx1c2hfYnVmZmVyKHR0eSk7CiAJaWYgKGluZm8tPmZsYWdzICYgUk9DS0VUX0NMT1NJTkcpCiAJCXJldHVybjsKLQlpZiAoaW5mby0+Y291bnQpIAorCWlmIChpbmZvLT5wb3J0LmNvdW50KQogCQlhdG9taWNfZGVjKCZycF9udW1fcG9ydHNfb3Blbik7CiAJY2xlYXJfYml0KChpbmZvLT5haW9wICogOCkgKyBpbmZvLT5jaGFuLCAodm9pZCAqKSAmeG1pdF9mbGFnc1tpbmZvLT5ib2FyZF0pOwogCi0JaW5mby0+Y291bnQgPSAwOworCWluZm8tPnBvcnQuY291bnQgPSAwOwogCWluZm8tPmZsYWdzICY9IH5ST0NLRVRfTk9STUFMX0FDVElWRTsKLQlpbmZvLT50dHkgPSBOVUxMOworCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKIAogCWNwID0gJmluZm8tPmNoYW5uZWw7CiAJc0Rpc1J4RklGTyhjcCk7CkBAIC0xNjUzLDcgKzE2NTUsNyBAQAogCXNDbHJUeFhPRkYoY3ApOwogCWluZm8tPmZsYWdzICY9IH5ST0NLRVRfSU5JVElBTElaRUQ7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiB9CiAKIC8qCkBAIC0xNzYyLDcgKzE3NjQsNyBAQAogCiAJLyogIFdyaXRlIHJlbWFpbmluZyBkYXRhIGludG8gdGhlIHBvcnQncyB4bWl0X2J1ZiAqLwogCXdoaWxlICgxKSB7Ci0JCWlmICghaW5mby0+dHR5KQkJLyogU2VlbWluZ2x5IG9ibGlnYXRvcnkgY2hlY2suLi4gKi8KKwkJaWYgKCFpbmZvLT5wb3J0LnR0eSkJCS8qIFNlZW1pbmdseSBvYmxpZ2F0b3J5IGNoZWNrLi4uICovCiAJCQlnb3RvIGVuZDsKIAkJYyA9IG1pbihjb3VudCwgWE1JVF9CVUZfU0laRSAtIGluZm8tPnhtaXRfY250IC0gMSk7CiAJCWMgPSBtaW4oYywgWE1JVF9CVUZfU0laRSAtIGluZm8tPnhtaXRfaGVhZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcm9ja2V0LmggYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmgKaW5kZXggYWU2YjA0Zi4uYThiMDkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JvY2tldC5oCisrKyBiL2RyaXZlcnMvY2hhci9yb2NrZXQuaApAQCAtNjQsOCArNjQsOCBAQAogLyoKICAqIEZvciBjbG9zaW5nX3dhaXQgYW5kIGNsb3Npbmdfd2FpdDIKICAqLwotI2RlZmluZSBST0NLRVRfQ0xPU0lOR19XQUlUX05PTkUJNjU1MzUKLSNkZWZpbmUgUk9DS0VUX0NMT1NJTkdfV0FJVF9JTkYJCTAKKyNkZWZpbmUgUk9DS0VUX0NMT1NJTkdfV0FJVF9OT05FCUFTWU5DX0NMT1NJTkdfV0FJVF9OT05FCisjZGVmaW5lIFJPQ0tFVF9DTE9TSU5HX1dBSVRfSU5GCQlBU1lOQ19DTE9TSU5HX1dBSVRfSU5GCiAKIC8qCiAgKiBSb2NrZXRwb3J0IGlvY3RscyAtLSAiUlAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcm9ja2V0X2ludC5oIGIvZHJpdmVycy9jaGFyL3JvY2tldF9pbnQuaAppbmRleCAxNDNjYzQzLi4yMWYzZmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcm9ja2V0X2ludC5oCisrKyBiL2RyaXZlcnMvY2hhci9yb2NrZXRfaW50LmgKQEAgLTExMjUsMTggKzExMjUsMTQgQEAKIAogc3RydWN0IHJfcG9ydCB7CiAJaW50IG1hZ2ljOworCXN0cnVjdCB0dHlfcG9ydCBwb3J0OwogCWludCBsaW5lOwotCWludCBmbGFnczsKLQlpbnQgY291bnQ7Ci0JaW50IGJsb2NrZWRfb3BlbjsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBmbGFnczsJCS8qIERvbid0IHlldCBtYXRjaCB0aGUgQVNZXyBmbGFncyEhICovCiAJdW5zaWduZWQgaW50IGJvYXJkOjM7CiAJdW5zaWduZWQgaW50IGFpb3A6MjsKIAl1bnNpZ25lZCBpbnQgY2hhbjozOwogCUNPTlRST0xMRVJfdCAqY3RscDsKIAlDSEFOTkVMX3QgY2hhbm5lbDsKLQlpbnQgY2xvc2luZ193YWl0OwotCWludCBjbG9zZV9kZWxheTsKIAlpbnQgaW50bWFzazsKIAlpbnQgeG1pdF9maWZvX3Jvb207CS8qIHJvb20gaW4geG1pdCBmaWZvICovCiAJdW5zaWduZWQgY2hhciAqeG1pdF9idWY7CkBAIC0xMTQ4LDggKzExNDQsNyBAQAogCWludCByZWFkX3N0YXR1c19tYXNrOwogCWludCBjcHM7CiAKLQl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY2xvc2Vfd2FpdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjbG9zZV93YWl0OwkvKiBOb3QgeWV0IG1hdGNoaW5nIHRoZSBjb3JlICovCiAJc3BpbmxvY2tfdCBzbG9jazsKIAlzdHJ1Y3QgbXV0ZXggd3JpdGVfbXR4OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zZWxlY3Rpb24uYyBiL2RyaXZlcnMvY2hhci9zZWxlY3Rpb24uYwppbmRleCBkNjNmNWNjLi4yOTc4YTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc2VsZWN0aW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3NlbGVjdGlvbi5jCkBAIC0zMjcsNyArMzI3LDggQEAKIAkJfQogCQljb3VudCA9IHNlbF9idWZmZXJfbHRoIC0gcGFzdGVkOwogCQljb3VudCA9IG1pbihjb3VudCwgdHR5LT5yZWNlaXZlX3Jvb20pOwotCQl0dHktPmxkaXNjLnJlY2VpdmVfYnVmKHR0eSwgc2VsX2J1ZmZlciArIHBhc3RlZCwgTlVMTCwgY291bnQpOworCQl0dHktPmxkaXNjLm9wcy0+cmVjZWl2ZV9idWYodHR5LCBzZWxfYnVmZmVyICsgcGFzdGVkLAorCQkJCQkJCQlOVUxMLCBjb3VudCk7CiAJCXBhc3RlZCArPSBjb3VudDsKIAl9CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnZjLT5wYXN0ZV93YWl0LCAmd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc25zYy5jIGIvZHJpdmVycy9jaGFyL3Nuc2MuYwppbmRleCAwYjc5OWFjLi4zY2U2MGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc25zYy5jCisrKyBiL2RyaXZlcnMvY2hhci9zbnNjLmMKQEAgLTQ0NCw3ICs0NDQsOCBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlkZXZpY2VfY3JlYXRlKHNuc2NfY2xhc3MsIE5VTEwsIGRldiwgIiVzIiwgZGV2bmFtZSk7CisJCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoc25zY19jbGFzcywgTlVMTCwgZGV2LCBOVUxMLAorCQkJCQkgICAgICAiJXMiLCBkZXZuYW1lKTsKIAogCQkJaWE2NF9zbl9pcnRyX2ludHJfZW5hYmxlKHNjZC0+c2NkX25hc2lkLAogCQkJCQkJIDAgLyppZ25vcmVkICovICwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYyBiL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYwppbmRleCAyZWU0ZDk4Li4yNDJmZDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKKysrIGIvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTkyLDcgKzkyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInNwZWNpYWxpeF9pbzguaCIKICNpbmNsdWRlICJjZDE4NjUuaCIKQEAgLTExMCw5ICsxMTAsMTAgQEAKIAogc3RhdGljIGludCBzeF9kZWJ1ZzsKIHN0YXRpYyBpbnQgc3hfcnhmaWZvID0gU1BFQ0lBTElYX1JYRklGTzsKK3N0YXRpYyBpbnQgc3hfcnRzY3RzOwogCiAjaWZkZWYgREVCVUcKLSNkZWZpbmUgZHByaW50ayhmLCBzdHIuLi4pIGlmIChzeF9kZWJ1ZyAmIGYpIHByaW50ayAoc3RyKQorI2RlZmluZSBkcHJpbnRrKGYsIHN0ci4uLikgaWYgKHN4X2RlYnVnICYgZikgcHJpbnRrKHN0cikKICNlbHNlCiAjZGVmaW5lIGRwcmludGsoZiwgc3RyLi4uKSAvKiBub3RoaW5nICovCiAjZW5kaWYKQEAgLTEzMSwxMCArMTMyLDggQEAKICNkZWZpbmUgU1hfREVCVUdfRklGTyAgICAweDA4MDAKIAogCi0jZGVmaW5lIGZ1bmNfZW50ZXIoKSBkcHJpbnRrIChTWF9ERUJVR19GTE9XLCAiaW84OiBlbnRlciAlc1xuIixfX2Z1bmNfXykKLSNkZWZpbmUgZnVuY19leGl0KCkgIGRwcmludGsgKFNYX0RFQlVHX0ZMT1csICJpbzg6IGV4aXQgICVzXG4iLCBfX2Z1bmNfXykKLQotI2RlZmluZSBqaWZmaWVzX2Zyb21fbXMoYSkgKCgoKGEpICogSFopLzEwMDApKzEpCisjZGVmaW5lIGZ1bmNfZW50ZXIoKSBkcHJpbnRrKFNYX0RFQlVHX0ZMT1csICJpbzg6IGVudGVyICVzXG4iLCBfX2Z1bmNfXykKKyNkZWZpbmUgZnVuY19leGl0KCkgIGRwcmludGsoU1hfREVCVUdfRkxPVywgImlvODogZXhpdCAgJXNcbiIsIF9fZnVuY19fKQogCiAKIC8qIENvbmZpZ3VyYWJsZSBvcHRpb25zOiAqLwpAQCAtMTQyLDE3ICsxNDEsNiBAQAogLyogQW0gSSBwYXJhbm9pZCBvciBub3QgPyA7LSkgKi8KICNkZWZpbmUgU1BFQ0lBTElYX1BBUkFOT0lBX0NIRUNLCiAKLS8qIERvIEkgdHJ1c3QgdGhlIElSUSBmcm9tIHRoZSBjYXJkPyAoZW5hYmVsaW5nIGl0IGRvZXNuJ3Qgc2VlbSB0byBoZWxwKQotICAgV2hlbiB0aGUgSVJRIHJvdXRpbmUgbGVhdmVzIHRoZSBjaGlwIGluIGEgc3RhdGUgdGhhdCBpcyBrZWVwcyBvbgotICAgcmVxdWlyaW5nIGF0dGVudGlvbiwgdGhlIHRpbWVyIGRvZXNuJ3QgaGVscCBlaXRoZXIuICovCi0jdW5kZWYgU1BFQ0lBTElYX1RJTUVSCi0KLSNpZmRlZiBTUEVDSUFMSVhfVElNRVIKLXN0YXRpYyBpbnQgc3hfcG9sbCA9IEhaOwotI2VuZGlmCi0KLQotCiAvKgogICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBtb3N0bHkgZm9yIHRlc3RpbmcgcHVycG9zZXMuIEJ1dCBpZiB5b3UgbmVlZAogICogc29tZSBuaWNlIHJlcG9ydGluZyBpbiB5b3VyIHN5c2xvZywgeW91IGNhbiBkZWZpbmUgdGhlbSBhbHNvLgpAQCAtMTYyLDE2ICsxNTAsNiBAQAogCiAKIAotI2lmZGVmIENPTkZJR19TUEVDSUFMSVhfUlRTQ1RTCi0jZGVmaW5lIFNYX0NSVFNDVFMoYmxhKSAxCi0jZWxzZQotI2RlZmluZSBTWF9DUlRTQ1RTKHR0eSkgQ19DUlRTQ1RTKHR0eSkKLSNlbmRpZgotCi0KLS8qIFVzZWQgdG8gYmUgb3V0YiAoMHhmZiwgMHg4MCk7ICovCi0jZGVmaW5lIHNob3J0X3BhdXNlKCkgdWRlbGF5ICgxKQotCiAKICNkZWZpbmUgU1BFQ0lBTElYX0xFR0FMX0ZMQUdTIFwKIAkoQVNZTkNfSFVQX05PVElGWSAgIHwgQVNZTkNfU0FLICAgICAgICAgIHwgQVNZTkNfU1BMSVRfVEVSTUlPUyAgIHwgXApAQCAtMTkwLDIxICsxNjgsMTQgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgc3hfcG9ydFtTWF9OQk9BUkQgKiBTWF9OUE9SVF07CiAKIAotI2lmZGVmIFNQRUNJQUxJWF9USU1FUgotc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IG1pc3NlZF9pcnFfdGltZXI7Ci1zdGF0aWMgaXJxcmV0dXJuX3Qgc3hfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKiBkZXZfaWQpOwotI2VuZGlmCi0KLQotCi1zdGF0aWMgaW5saW5lIGludCBzeF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgY29uc3QgKiBwb3J0LAorc3RhdGljIGludCBzeF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgY29uc3QgKnBvcnQsCiAJCQkJICAgIGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJvdXRpbmUpCiB7CiAjaWZkZWYgU1BFQ0lBTElYX1BBUkFOT0lBX0NIRUNLCi0Jc3RhdGljIGNvbnN0IGNoYXIgKmJhZG1hZ2ljID0KLQkJS0VSTl9FUlIgInN4OiBXYXJuaW5nOiBiYWQgc3BlY2lhbGl4IHBvcnQgbWFnaWMgbnVtYmVyIGZvciBkZXZpY2UgJXMgaW4gJXNcbiI7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmJhZGluZm8gPQotCQlLRVJOX0VSUiAic3g6IFdhcm5pbmc6IG51bGwgc3BlY2lhbGl4IHBvcnQgZm9yIGRldmljZSAlcyBpbiAlc1xuIjsKKwlzdGF0aWMgY29uc3QgY2hhciAqYmFkbWFnaWMgPSBLRVJOX0VSUgorCSAgInN4OiBXYXJuaW5nOiBiYWQgc3BlY2lhbGl4IHBvcnQgbWFnaWMgbnVtYmVyIGZvciBkZXZpY2UgJXMgaW4gJXNcbiI7CisJc3RhdGljIGNvbnN0IGNoYXIgKmJhZGluZm8gPSBLRVJOX0VSUgorCSAgInN4OiBXYXJuaW5nOiBudWxsIHNwZWNpYWxpeCBwb3J0IGZvciBkZXZpY2UgJXMgaW4gJXNcbiI7CiAKIAlpZiAoIXBvcnQpIHsKIAkJcHJpbnRrKGJhZGluZm8sIG5hbWUsIHJvdXRpbmUpOwpAQCAtMjI2LDY2ICsxOTcsNjkgQEAKICAqLwogCiAvKiBHZXQgYm9hcmQgbnVtYmVyIGZyb20gcG9pbnRlciAqLwotc3RhdGljIGlubGluZSBpbnQgYm9hcmRfTm8gKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKiBicCkKK3N0YXRpYyBpbmxpbmUgaW50IGJvYXJkX05vKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwKQogewogCXJldHVybiBicCAtIHN4X2JvYXJkOwogfQogCiAKIC8qIEdldCBwb3J0IG51bWJlciBmcm9tIHBvaW50ZXIgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBvcnRfTm8gKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCBjb25zdCAqIHBvcnQpCitzdGF0aWMgaW5saW5lIGludCBwb3J0X05vKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCBjb25zdCAqcG9ydCkKIHsKIAlyZXR1cm4gU1hfUE9SVChwb3J0IC0gc3hfcG9ydCk7CiB9CiAKIAogLyogR2V0IHBvaW50ZXIgdG8gYm9hcmQgZnJvbSBwb2ludGVyIHRvIHBvcnQgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqIHBvcnRfQm9hcmQoc3RydWN0IHNwZWNpYWxpeF9wb3J0IGNvbnN0ICogcG9ydCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqcG9ydF9Cb2FyZCgKKwkJCQkJc3RydWN0IHNwZWNpYWxpeF9wb3J0IGNvbnN0ICpwb3J0KQogewogCXJldHVybiAmc3hfYm9hcmRbU1hfQk9BUkQocG9ydCAtIHN4X3BvcnQpXTsKIH0KIAogCiAvKiBJbnB1dCBCeXRlIGZyb20gQ0wgQ0QxODZ4IHJlZ2lzdGVyICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3hfaW4oc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAgKiBicCwgdW5zaWduZWQgc2hvcnQgcmVnKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHN4X2luKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwLAorCQkJCQkJCXVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAlicC0+cmVnID0gcmVnIHwgMHg4MDsKLQlvdXRiIChyZWcgfCAweDgwLCBicC0+YmFzZSArIFNYX0FERFJfUkVHKTsKLQlyZXR1cm4gaW5iICAoYnAtPmJhc2UgKyBTWF9EQVRBX1JFRyk7CisJb3V0YihyZWcgfCAweDgwLCBicC0+YmFzZSArIFNYX0FERFJfUkVHKTsKKwlyZXR1cm4gaW5iKGJwLT5iYXNlICsgU1hfREFUQV9SRUcpOwogfQogCiAKIC8qIE91dHB1dCBCeXRlIHRvIENMIENEMTg2eCByZWdpc3RlciAqLwotc3RhdGljIGlubGluZSB2b2lkIHN4X291dChzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICAqIGJwLCB1bnNpZ25lZCBzaG9ydCByZWcsCitzdGF0aWMgaW5saW5lIHZvaWQgc3hfb3V0KHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwLCB1bnNpZ25lZCBzaG9ydCByZWcsCiAJCQkgIHVuc2lnbmVkIGNoYXIgdmFsKQogewogCWJwLT5yZWcgPSByZWcgfCAweDgwOwotCW91dGIgKHJlZyB8IDB4ODAsIGJwLT5iYXNlICsgU1hfQUREUl9SRUcpOwotCW91dGIgKHZhbCwgYnAtPmJhc2UgKyBTWF9EQVRBX1JFRyk7CisJb3V0YihyZWcgfCAweDgwLCBicC0+YmFzZSArIFNYX0FERFJfUkVHKTsKKwlvdXRiKHZhbCwgYnAtPmJhc2UgKyBTWF9EQVRBX1JFRyk7CiB9CiAKIAogLyogSW5wdXQgQnl0ZSBmcm9tIENMIENEMTg2eCByZWdpc3RlciAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHN4X2luX29mZihzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICAqIGJwLCB1bnNpZ25lZCBzaG9ydCByZWcpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3hfaW5fb2ZmKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwLAorCQkJCXVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAlicC0+cmVnID0gcmVnOwotCW91dGIgKHJlZywgYnAtPmJhc2UgKyBTWF9BRERSX1JFRyk7Ci0JcmV0dXJuIGluYiAgKGJwLT5iYXNlICsgU1hfREFUQV9SRUcpOworCW91dGIocmVnLCBicC0+YmFzZSArIFNYX0FERFJfUkVHKTsKKwlyZXR1cm4gaW5iKGJwLT5iYXNlICsgU1hfREFUQV9SRUcpOwogfQogCiAKIC8qIE91dHB1dCBCeXRlIHRvIENMIENEMTg2eCByZWdpc3RlciAqLwotc3RhdGljIGlubGluZSB2b2lkIHN4X291dF9vZmYoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAgKiBicCwgdW5zaWduZWQgc2hvcnQgcmVnLAotCQkJICB1bnNpZ25lZCBjaGFyIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeF9vdXRfb2ZmKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgICpicCwKKwkJCQl1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQogewogCWJwLT5yZWcgPSByZWc7Ci0Jb3V0YiAocmVnLCBicC0+YmFzZSArIFNYX0FERFJfUkVHKTsKLQlvdXRiICh2YWwsIGJwLT5iYXNlICsgU1hfREFUQV9SRUcpOworCW91dGIocmVnLCBicC0+YmFzZSArIFNYX0FERFJfUkVHKTsKKwlvdXRiKHZhbCwgYnAtPmJhc2UgKyBTWF9EQVRBX1JFRyk7CiB9CiAKIAogLyogV2FpdCBmb3IgQ2hhbm5lbCBDb21tYW5kIFJlZ2lzdGVyIHJlYWR5ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc3hfd2FpdF9DQ1Ioc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAgKiBicCkKK3N0YXRpYyB2b2lkIHN4X3dhaXRfQ0NSKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgICpicCkKIHsKIAl1bnNpZ25lZCBsb25nIGRlbGF5LCBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIGNjcjsKQEAgLTI5Niw3ICsyNzAsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwogCQlpZiAoIWNjcikKIAkJCXJldHVybjsKLQkJdWRlbGF5ICgxKTsKKwkJdWRlbGF5KDEpOwogCX0KIAogCXByaW50ayhLRVJOX0VSUiAic3glZDogVGltZW91dCB3YWl0aW5nIGZvciBDQ1IuXG4iLCBib2FyZF9ObyhicCkpOwpAQCAtMzA0LDcgKzI3OCw3IEBACiAKIAogLyogV2FpdCBmb3IgQ2hhbm5lbCBDb21tYW5kIFJlZ2lzdGVyIHJlYWR5ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc3hfd2FpdF9DQ1Jfb2ZmKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgICogYnApCitzdGF0aWMgdm9pZCBzeF93YWl0X0NDUl9vZmYoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAgKmJwKQogewogCXVuc2lnbmVkIGxvbmcgZGVsYXk7CiAJdW5zaWduZWQgY2hhciBjcnI7CkBAIC0zMTYsNyArMjkwLDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKCFjcnIpCiAJCQlyZXR1cm47Ci0JCXVkZWxheSAoMSk7CisJCXVkZWxheSgxKTsKIAl9CiAKIAlwcmludGsoS0VSTl9FUlIgInN4JWQ6IFRpbWVvdXQgd2FpdGluZyBmb3IgQ0NSLlxuIiwgYm9hcmRfTm8oYnApKTsKQEAgLTMyNyw3ICszMDEsNyBAQAogICogIHNwZWNpYWxpeCBJTzgrIElPIHJhbmdlIGZ1bmN0aW9ucy4KICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBzeF9yZXF1ZXN0X2lvX3JhbmdlKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKiBicCkKK3N0YXRpYyBpbnQgc3hfcmVxdWVzdF9pb19yYW5nZShzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCkKIHsKIAlyZXR1cm4gcmVxdWVzdF9yZWdpb24oYnAtPmJhc2UsCiAJCWJwLT5mbGFncyAmIFNYX0JPQVJEX0lTX1BDSSA/IFNYX1BDSV9JT19TUEFDRSA6IFNYX0lPX1NQQUNFLApAQCAtMzM1LDE1ICszMDksMTUgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3hfcmVsZWFzZV9pb19yYW5nZShzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICogYnApCitzdGF0aWMgdm9pZCBzeF9yZWxlYXNlX2lvX3JhbmdlKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwKQogewotCXJlbGVhc2VfcmVnaW9uKGJwLT5iYXNlLAotCSAgICAgICAgICAgICAgIGJwLT5mbGFncyZTWF9CT0FSRF9JU19QQ0k/U1hfUENJX0lPX1NQQUNFOlNYX0lPX1NQQUNFKTsKKwlyZWxlYXNlX3JlZ2lvbihicC0+YmFzZSwgYnAtPmZsYWdzICYgU1hfQk9BUkRfSVNfUENJID8KKwkJCQkJU1hfUENJX0lPX1NQQUNFIDogU1hfSU9fU1BBQ0UpOwogfQogCiAKIC8qIFNldCB0aGUgSVJRIHVzaW5nIHRoZSBSVFMgbGluZXMgdGhhdCBydW4gdG8gdGhlIFBBTCBvbiB0aGUgYm9hcmQuLi4uICovCi1zdGF0aWMgaW50IHN4X3NldF9pcnEgKCBzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCkKK3N0YXRpYyBpbnQgc3hfc2V0X2lycShzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCkKIHsKIAlpbnQgdmlycTsKIAlpbnQgaTsKQEAgLTM1MywxNSArMzI3LDI0IEBACiAJCXJldHVybiAxOwogCXN3aXRjaCAoYnAtPmlycSkgewogCS8qIEluIHRoZSBzYW1lIG9yZGVyIGFzIGluIHRoZSBkb2NzLi4uICovCi0JY2FzZSAxNTogdmlycSA9IDA7YnJlYWs7Ci0JY2FzZSAxMjogdmlycSA9IDE7YnJlYWs7Ci0JY2FzZSAxMTogdmlycSA9IDI7YnJlYWs7Ci0JY2FzZSA5OiAgdmlycSA9IDM7YnJlYWs7Ci0JZGVmYXVsdDogcHJpbnRrIChLRVJOX0VSUiAiU3BlY2xpYWxpeDogY2Fubm90IHNldCBpcnEgdG8gJWQuXG4iLCBicC0+aXJxKTsKLQkgICAgICAgICByZXR1cm4gMDsKKwljYXNlIDE1OgorCQl2aXJxID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJdmlycSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTE6CisJCXZpcnEgPSAyOworCQlicmVhazsKKwljYXNlIDk6CisJCXZpcnEgPSAzOworCQlicmVhazsKKwlkZWZhdWx0OnByaW50ayhLRVJOX0VSUgorCQkJICAgICJTcGVjbGlhbGl4OiBjYW5ub3Qgc2V0IGlycSB0byAlZC5cbiIsIGJwLT5pcnEpOworCQlyZXR1cm4gMDsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpPTA7aTwyO2krKykgeworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJc3hfb3V0KGJwLCBDRDE4NnhfQ0FSLCBpKTsKIAkJc3hfb3V0KGJwLCBDRDE4NnhfTVNWUlRTLCAoKHZpcnEgPj4gaSkgJiAweDEpPyBNU1ZSX1JUUzowKTsKIAl9CkBAIC0zNzEsNyArMzU0LDcgQEAKIAogCiAvKiBSZXNldCBhbmQgc2V0dXAgQ0QxODZ4IGNoaXAgKi8KLXN0YXRpYyBpbnQgc3hfaW5pdF9DRDE4Nngoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAgKiBicCkKK3N0YXRpYyBpbnQgc3hfaW5pdF9DRDE4Nngoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAgKmJwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNjYWxlcjsKQEAgLTM5MCw3ICszNzMsNyBAQAogCXN4X291dF9vZmYoYnAsIENEMTg2eF9QSUxSMiwgU1hfQUNLX1RJTlQpOyAgICAgIC8qIFByaW8gZm9yIHRyYW5zbWl0dGVyIGludHIgKi8KIAlzeF9vdXRfb2ZmKGJwLCBDRDE4NnhfUElMUjMsIFNYX0FDS19SSU5UKTsgICAgICAvKiBQcmlvIGZvciByZWNlaXZlciBpbnRyICAgICovCiAJLyogU2V0IFJlZ0Fja0VuICovCi0Jc3hfb3V0X29mZihicCwgQ0QxODZ4X1NSQ1IsIHN4X2luIChicCwgQ0QxODZ4X1NSQ1IpIHwgU1JDUl9SRUdBQ0tFTik7CisJc3hfb3V0X29mZihicCwgQ0QxODZ4X1NSQ1IsIHN4X2luKGJwLCBDRDE4NnhfU1JDUikgfCBTUkNSX1JFR0FDS0VOKTsKIAogCS8qIFNldHRpbmcgdXAgcHJlc2NhbGVyLiBXZSBuZWVkIDQgdGlja3MgcGVyIDEgbXMgKi8KIAlzY2FsZXIgPSAgU1hfT1NDRlJFUS9TUEVDSUFMSVhfVFBTOwpAQCAtMzk5LDkgKzM4Miw5IEBACiAJc3hfb3V0X29mZihicCwgQ0QxODZ4X1BQUkwsIHNjYWxlciAmIDB4ZmYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIXN4X3NldF9pcnEgKGJwKSkgeworCWlmICghc3hfc2V0X2lycShicCkpIHsKIAkJLyogRmlndXJlIG91dCBob3cgdG8gcGFzcyB0aGlzIGFsb25nLi4uICovCi0JCXByaW50ayAoS0VSTl9FUlIgIkNhbm5vdCBzZXQgaXJxIHRvICVkLlxuIiwgYnAtPmlycSk7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHNldCBpcnEgdG8gJWQuXG4iLCBicC0+aXJxKTsKIAkJcnYgPSAwOwogCX0KIApAQCAtNDEwLDE2ICszOTMsMTYgQEAKIH0KIAogCi1zdGF0aWMgaW50IHJlYWRfY3Jvc3NfYnl0ZSAoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnAsIGludCByZWcsIGludCBiaXQpCitzdGF0aWMgaW50IHJlYWRfY3Jvc3NfYnl0ZShzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCwgaW50IHJlZywgaW50IGJpdCkKIHsKIAlpbnQgaTsKIAlpbnQgdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpPTAsIHQ9MDtpPDg7aSsrKSB7Ci0JCXN4X291dF9vZmYgKGJwLCBDRDE4NnhfQ0FSLCBpKTsKLQkJaWYgKHN4X2luX29mZiAoYnAsIHJlZykgJiBiaXQpCisJZm9yIChpID0gMCwgdCA9IDA7IGkgPCA4OyBpKyspIHsKKwkJc3hfb3V0X29mZihicCwgQ0QxODZ4X0NBUiwgaSk7CisJCWlmIChzeF9pbl9vZmYoYnAsIHJlZykgJiBiaXQpCiAJCQl0IHw9IDEgPDwgaTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKQEAgLTQyOCwzNyArNDExLDEwIEBACiB9CiAKIAotI2lmZGVmIFNQRUNJQUxJWF9USU1FUgotdm9pZCBtaXNzZWRfaXJxICh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciBpcnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICAqYnAgPSAoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqKWRhdGE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKLQlpcnEgPSBzeF9pbiAoKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKilkYXRhLCBDRDE4NnhfU1JTUikgJgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNSU1JfUlJFUWludCB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JTUl9UUkVRaW50IHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlNSX01SRVFpbnQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGlycSkgewotCQlwcmludGsgKEtFUk5fSU5GTyAiTWlzc2VkIGludGVycnVwdC4uLiBDYWxsaW5nIGludCBmcm9tIHRpbWVyLiBcbiIpOwotCQlzeF9pbnRlcnJ1cHQgKC0xLCBicCk7Ci0JfQotCW1vZF90aW1lcigmbWlzc2VkX2lycV90aW1lciwgamlmZmllcyArIHN4X3BvbGwpOwotfQotI2VuZGlmCi0KLQotCiAvKiBNYWluIHByb2Jpbmcgcm91dGluZSwgYWxzbyBzZXRzIGlycS4gKi8KIHN0YXRpYyBpbnQgc3hfcHJvYmUoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnApCiB7CiAJdW5zaWduZWQgY2hhciB2YWwxLCB2YWwyOwotI2lmIDAKLQlpbnQgaXJxcyA9IDA7Ci0JaW50IHJldHJpZXM7Ci0jZW5kaWYKIAlpbnQgcmV2OwogCWludCBjaGlwOwogCkBAIC00NzEsMTcgKzQyNywxOCBAQAogCiAJLyogQXJlIHRoZSBJL08gcG9ydHMgaGVyZSA/ICovCiAJc3hfb3V0X29mZihicCwgQ0QxODZ4X1BQUkwsIDB4NWEpOwotCXNob3J0X3BhdXNlICgpOworCXVkZWxheSgxKTsKIAl2YWwxID0gc3hfaW5fb2ZmKGJwLCBDRDE4NnhfUFBSTCk7CiAKIAlzeF9vdXRfb2ZmKGJwLCBDRDE4NnhfUFBSTCwgMHhhNSk7Ci0Jc2hvcnRfcGF1c2UgKCk7CisJdWRlbGF5KDEpOwogCXZhbDIgPSBzeF9pbl9vZmYoYnAsIENEMTg2eF9QUFJMKTsKIAogCi0JaWYgKCh2YWwxICE9IDB4NWEpIHx8ICh2YWwyICE9IDB4YTUpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInN4JWQ6IHNwZWNpYWxpeCBJTzgrIEJvYXJkIGF0IDB4JTAzeCBub3QgZm91bmQuXG4iLAotCQkgICAgICAgYm9hcmRfTm8oYnApLCBicC0+YmFzZSk7CisJaWYgKHZhbDEgIT0gMHg1YSB8fCB2YWwyICE9IDB4YTUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJInN4JWQ6IHNwZWNpYWxpeCBJTzgrIEJvYXJkIGF0IDB4JTAzeCBub3QgZm91bmQuXG4iLAorCQkJCQkJYm9hcmRfTm8oYnApLCBicC0+YmFzZSk7CiAJCXN4X3JlbGVhc2VfaW9fcmFuZ2UoYnApOwogCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuIDE7CkBAIC00ODksMTAgKzQ0NiwxMSBAQAogCiAJLyogQ2hlY2sgdGhlIERTUiBsaW5lcyB0aGF0IFNwZWNpYWxpeCB1c2VzIGFzIGJvYXJkCiAJICAgaWRlbnRpZmljYXRpb24gKi8KLQl2YWwxID0gcmVhZF9jcm9zc19ieXRlIChicCwgQ0QxODZ4X01TVlIsIE1TVlJfRFNSKTsKLQl2YWwyID0gcmVhZF9jcm9zc19ieXRlIChicCwgQ0QxODZ4X01TVlIsIE1TVlJfUlRTKTsKLQlkcHJpbnRrIChTWF9ERUJVR19JTklULCAic3glZDogRFNSIGxpbmVzIGFyZTogJTAyeCwgcnRzIGxpbmVzIGFyZTogJTAyeFxuIiwKLQkgICAgICAgIGJvYXJkX05vKGJwKSwgIHZhbDEsIHZhbDIpOworCXZhbDEgPSByZWFkX2Nyb3NzX2J5dGUoYnAsIENEMTg2eF9NU1ZSLCBNU1ZSX0RTUik7CisJdmFsMiA9IHJlYWRfY3Jvc3NfYnl0ZShicCwgQ0QxODZ4X01TVlIsIE1TVlJfUlRTKTsKKwlkcHJpbnRrKFNYX0RFQlVHX0lOSVQsCisJCQkic3glZDogRFNSIGxpbmVzIGFyZTogJTAyeCwgcnRzIGxpbmVzIGFyZTogJTAyeFxuIiwKKwkJCQkJYm9hcmRfTm8oYnApLCB2YWwxLCB2YWwyKTsKIAogCS8qIFRoZXkgbWFuYWdlZCB0byBzd2l0Y2ggdGhlIGJpdCBvcmRlciBiZXR3ZWVuIHRoZSBkb2NzIGFuZAogCSAgIHRoZSBJTzgrIGNhcmQuIFRoZSBuZXcgUENJIGNhcmQgbm93IGNvbmZvcm1zIHRvIG9sZCBkb2NzLgpAQCAtNTAwLDcgKzQ1OCw4IEBACiAJICAgb2xkIGNhcmQuICovCiAJdmFsMiA9IChicC0+ZmxhZ3MgJiBTWF9CT0FSRF9JU19QQ0kpPzB4NGQgOiAweGIyOwogCWlmICh2YWwxICE9IHZhbDIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAic3glZDogc3BlY2lhbGl4IElPOCsgSUQgJTAyeCBhdCAweCUwM3ggbm90IGZvdW5kICglMDJ4KS5cbiIsCisJCXByaW50ayhLRVJOX0lORk8KKwkJICAic3glZDogc3BlY2lhbGl4IElPOCsgSUQgJTAyeCBhdCAweCUwM3ggbm90IGZvdW5kICglMDJ4KS5cbiIsCiAJCSAgICAgICBib2FyZF9ObyhicCksIHZhbDIsIGJwLT5iYXNlLCB2YWwxKTsKIAkJc3hfcmVsZWFzZV9pb19yYW5nZShicCk7CiAJCWZ1bmNfZXhpdCgpOwpAQCAtNTA4LDQ3ICs0NjcsNiBAQAogCX0KIAogCi0jaWYgMAotCS8qIEl0J3MgdGltZSB0byBmaW5kIElSUSBmb3IgdGhpcyBib2FyZCAqLwotCWZvciAocmV0cmllcyA9IDA7IHJldHJpZXMgPCA1ICYmIGlycXMgPD0gMDsgcmV0cmllcysrKSB7Ci0JCWlycXMgPSBwcm9iZV9pcnFfb24oKTsKLQkJc3hfaW5pdF9DRDE4NngoYnApOwkgICAgICAgCQkvKiBSZXNldCBDRDE4NnggY2hpcCAgICAgICAqLwotCQlzeF9vdXQoYnAsIENEMTg2eF9DQVIsIDIpOyAgICAgICAgICAgICAgIC8qIFNlbGVjdCBwb3J0IDIgICAgICAgICAgKi8KLQkJc3hfd2FpdF9DQ1IoYnApOwotCQlzeF9vdXQoYnAsIENEMTg2eF9DQ1IsIENDUl9UWEVOKTsgICAgICAgIC8qIEVuYWJsZSB0cmFuc21pdHRlciAgICAgKi8KLQkJc3hfb3V0KGJwLCBDRDE4NnhfSUVSLCBJRVJfVFhSRFkpOyAgICAgICAvKiBFbmFibGUgdHggZW1wdHkgaW50ciAgICovCi0JCW1zbGVlcCg1MCk7Ci0JCWlycXMgPSBwcm9iZV9pcnFfb2ZmKGlycXMpOwotCi0JCWRwcmludGsgKFNYX0RFQlVHX0lOSVQsICJTUlNSID0gJTAyeCwgIiwgc3hfaW4oYnAsIENEMTg2eF9TUlNSKSk7Ci0JCWRwcmludGsgKFNYX0RFQlVHX0lOSVQsICJUUkFSID0gJTAyeCwgIiwgc3hfaW4oYnAsIENEMTg2eF9UUkFSKSk7Ci0JCWRwcmludGsgKFNYX0RFQlVHX0lOSVQsICJHSVZSID0gJTAyeCwgIiwgc3hfaW4oYnAsIENEMTg2eF9HSVZSKSk7Ci0JCWRwcmludGsgKFNYX0RFQlVHX0lOSVQsICJHSUNSID0gJTAyeCwgIiwgc3hfaW4oYnAsIENEMTg2eF9HSUNSKSk7Ci0JCWRwcmludGsgKFNYX0RFQlVHX0lOSVQsICJcbiIpOwotCi0JCS8qIFJlc2V0IENEMTg2eCBhZ2FpbiAgICAgICovCi0JCWlmICghc3hfaW5pdF9DRDE4NngoYnApKSB7Ci0JCQkvKiBIbW1tLiBUaGlzIGlzIGRlYWQgY29kZSBhbnl3YXkuICovCi0JCX0KLQotCQlkcHJpbnRrIChTWF9ERUJVR19JTklUICJ2YWwxID0gJTAyeCwgdmFsMiA9ICUwMngsIHZhbDMgPSAlMDJ4LlxuIiwKLQkJICAgICAgICB2YWwxLCB2YWwyLCB2YWwzKTsKLQotCX0KLQotI2lmIDAKLQlpZiAoaXJxcyA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic3glZDogQ2FuJ3QgZmluZCBJUlEgZm9yIHNwZWNpYWxpeCBJTzgrIGJvYXJkIGF0IDB4JTAzeC5cbiIsCi0JCSAgICAgICBib2FyZF9ObyhicCksIGJwLT5iYXNlKTsKLQkJc3hfcmVsZWFzZV9pb19yYW5nZShicCk7Ci0JCWZ1bmNfZXhpdCgpOwotCQlyZXR1cm4gMTsKLQl9Ci0jZW5kaWYKLQlwcmludGsgKEtFUk5fSU5GTyAiU3RhcnRlZCB3aXRoIGlycT0lZCwgYnV0IG5vdyBoYXZlIGlycT0lZC5cbiIsIGJwLT5pcnEsIGlycXMpOwotCWlmIChpcnFzID4gMCkKLQkJYnAtPmlycSA9IGlycXM7Ci0jZW5kaWYKIAkvKiBSZXNldCBDRDE4NnggYWdhaW4gICovCiAJaWYgKCFzeF9pbml0X0NEMTg2eChicCkpIHsKIAkJc3hfcmVsZWFzZV9pb19yYW5nZShicCk7CkBAIC01NjAsNyArNDc4LDcgQEAKIAlicC0+ZmxhZ3MgfD0gU1hfQk9BUkRfUFJFU0VOVDsKIAogCS8qIENoaXAgICAgICAgICAgIHJldmNvZGUgICBwa2d0eXBlCi0JICAgICAgICAgICAgICAgICAgR0ZSQ1IgICAgIFNSQ1IgYml0IDcKKwkJCSAgR0ZSQ1IgICAgIFNSQ1IgYml0IDcKIAkgICBDRDE4MCByZXYgQiAgICAweDgxICAgICAgMAogCSAgIENEMTgwIHJldiBDICAgIDB4ODIgICAgICAwCiAJICAgQ0QxODY0IHJldiBBICAgMHg4MiAgICAgIDEKQEAgLTU3MCwyNCArNDg4LDMyIEBACiAJICovCiAKIAlzd2l0Y2ggKHN4X2luX29mZihicCwgQ0QxODZ4X0dGUkNSKSkgewotCWNhc2UgMHg4MjpjaGlwID0gMTg2NDtyZXY9J0EnO2JyZWFrOwotCWNhc2UgMHg4MzpjaGlwID0gMTg2NTtyZXY9J0EnO2JyZWFrOwotCWNhc2UgMHg4NDpjaGlwID0gMTg2NTtyZXY9J0InO2JyZWFrOwotCWNhc2UgMHg4NTpjaGlwID0gMTg2NTtyZXY9J0MnO2JyZWFrOyAvKiBEb2VzIG5vdCBleGlzdCBhdCB0aGlzIHRpbWUgKi8KLQlkZWZhdWx0OmNoaXA9LTE7cmV2PSd4JzsKKwljYXNlIDB4ODI6CisJCWNoaXAgPSAxODY0OworCQlyZXYgPSAnQSc7CisJCWJyZWFrOworCWNhc2UgMHg4MzoKKwkJY2hpcCA9IDE4NjU7CisJCXJldiA9ICdBJzsKKwkJYnJlYWs7CisJY2FzZSAweDg0OgorCQljaGlwID0gMTg2NTsKKwkJcmV2ID0gJ0InOworCQlicmVhazsKKwljYXNlIDB4ODU6CisJCWNoaXAgPSAxODY1OworCQlyZXYgPSAnQyc7CisJCWJyZWFrOyAvKiBEb2VzIG5vdCBleGlzdCBhdCB0aGlzIHRpbWUgKi8KKwlkZWZhdWx0OgorCQljaGlwID0gLTE7CisJCXJldiA9ICd4JzsKIAl9CiAKLQlkcHJpbnRrIChTWF9ERUJVR19JTklULCAiIEdGQ1IgPSAweCUwMnhcbiIsIHN4X2luX29mZihicCwgQ0QxODZ4X0dGUkNSKSApOworCWRwcmludGsoU1hfREVCVUdfSU5JVCwgIiBHRkNSID0gMHglMDJ4XG4iLCBzeF9pbl9vZmYoYnAsIENEMTg2eF9HRlJDUikpOwogCi0jaWZkZWYgU1BFQ0lBTElYX1RJTUVSCi0Jc2V0dXBfdGltZXIoJm1pc3NlZF9pcnFfdGltZXIsIG1pc3NlZF9pcnEsICh1bnNpZ25lZCBsb25nKWJwKTsKLQltb2RfdGltZXIoJm1pc3NlZF9pcnFfdGltZXIsIGppZmZpZXMgKyBzeF9wb2xsKTsKLSNlbmRpZgotCi0JcHJpbnRrKEtFUk5fSU5GTyJzeCVkOiBzcGVjaWFsaXggSU84KyBib2FyZCBkZXRlY3RlZCBhdCAweCUwM3gsIElSUSAlZCwgQ0QlZCBSZXYuICVjLlxuIiwKLQkgICAgICAgYm9hcmRfTm8oYnApLAotCSAgICAgICBicC0+YmFzZSwgYnAtPmlycSwKLQkgICAgICAgY2hpcCwgcmV2KTsKKwlwcmludGsoS0VSTl9JTkZPCisgICAgInN4JWQ6IHNwZWNpYWxpeCBJTzgrIGJvYXJkIGRldGVjdGVkIGF0IDB4JTAzeCwgSVJRICVkLCBDRCVkIFJldi4gJWMuXG4iLAorCQkJCWJvYXJkX05vKGJwKSwgYnAtPmJhc2UsIGJwLT5pcnEsIGNoaXAsIHJldik7CiAKIAlmdW5jX2V4aXQoKTsKIAlyZXR1cm4gMDsKQEAgLTU5OCwyMCArNTI0LDIyIEBACiAgKiAgSW50ZXJydXB0IHByb2Nlc3Npbmcgcm91dGluZXMuCiAgKiAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqIHN4X2dldF9wb3J0KHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKiBicCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKiB3aGF0KQorc3RhdGljIHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqc3hfZ2V0X3BvcnQoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnAsCisJCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGNvbnN0ICp3aGF0KQogewogCXVuc2lnbmVkIGNoYXIgY2hhbm5lbDsKLQlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKiBwb3J0ID0gTlVMTDsKKwlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQgPSBOVUxMOwogCiAJY2hhbm5lbCA9IHN4X2luKGJwLCBDRDE4NnhfR0lDUikgPj4gR0lDUl9DSEFOX09GRjsKLQlkcHJpbnRrIChTWF9ERUJVR19DSEFOLCAiY2hhbm5lbDogJWRcbiIsIGNoYW5uZWwpOworCWRwcmludGsoU1hfREVCVUdfQ0hBTiwgImNoYW5uZWw6ICVkXG4iLCBjaGFubmVsKTsKIAlpZiAoY2hhbm5lbCA8IENEMTg2eF9OQ0gpIHsKIAkJcG9ydCA9ICZzeF9wb3J0W2JvYXJkX05vKGJwKSAqIFNYX05QT1JUICsgY2hhbm5lbF07Ci0JCWRwcmludGsgKFNYX0RFQlVHX0NIQU4sICJwb3J0OiAlZCAlcCBmbGFnczogMHgleFxuIixib2FyZF9ObyhicCkgKiBTWF9OUE9SVCArIGNoYW5uZWwsICBwb3J0LCBwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKTsKKwkJZHByaW50ayhTWF9ERUJVR19DSEFOLCAicG9ydDogJWQgJXAgZmxhZ3M6IDB4JWx4XG4iLAorCQkJYm9hcmRfTm8oYnApICogU1hfTlBPUlQgKyBjaGFubmVsLCAgcG9ydCwKKwkJCXBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCk7CiAKLQkJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKLQkJCWRwcmludGsgKFNYX0RFQlVHX0NIQU4sICJwb3J0OiAlZCAlcFxuIiwgY2hhbm5lbCwgcG9ydCk7CisJCWlmIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKKwkJCWRwcmludGsoU1hfREVCVUdfQ0hBTiwgInBvcnQ6ICVkICVwXG4iLCBjaGFubmVsLCBwb3J0KTsKIAkJCWZ1bmNfZXhpdCgpOwogCQkJcmV0dXJuIHBvcnQ7CiAJCX0KQEAgLTYyMiw3ICs1NTAsNyBAQAogfQogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzeF9yZWNlaXZlX2V4YyhzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICogYnApCitzdGF0aWMgdm9pZCBzeF9yZWNlaXZlX2V4YyhzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCkKIHsKIAlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKQEAgLTYzMywyNyArNTYxLDI5IEBACiAKIAlwb3J0ID0gc3hfZ2V0X3BvcnQoYnAsICJSZWNlaXZlIik7CiAJaWYgKCFwb3J0KSB7Ci0JCWRwcmludGsgKFNYX0RFQlVHX1JYLCAiSG1tLCBjb3VsZG4ndCBmaW5kIHBvcnQuXG4iKTsKKwkJZHByaW50ayhTWF9ERUJVR19SWCwgIkhtbSwgY291bGRuJ3QgZmluZCBwb3J0LlxuIik7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm47CiAJfQotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAogCXN0YXR1cyA9IHN4X2luKGJwLCBDRDE4NnhfUkNTUik7CiAKLQlkcHJpbnRrIChTWF9ERUJVR19SWCwgInN0YXR1czogMHgleFxuIiwgc3RhdHVzKTsKKwlkcHJpbnRrKFNYX0RFQlVHX1JYLCAic3RhdHVzOiAweCV4XG4iLCBzdGF0dXMpOwogCWlmIChzdGF0dXMgJiBSQ1NSX09FKSB7CiAJCXBvcnQtPm92ZXJydW4rKzsKLQkJZHByaW50ayhTWF9ERUJVR19GSUZPLCAic3glZDogcG9ydCAlZDogT3ZlcnJ1bi4gVG90YWwgJWxkIG92ZXJydW5zLlxuIiwKLQkJICAgICAgIGJvYXJkX05vKGJwKSwgcG9ydF9Obyhwb3J0KSwgcG9ydC0+b3ZlcnJ1bik7CisJCWRwcmludGsoU1hfREVCVUdfRklGTywKKwkJCSJzeCVkOiBwb3J0ICVkOiBPdmVycnVuLiBUb3RhbCAlbGQgb3ZlcnJ1bnMuXG4iLAorCQkJCWJvYXJkX05vKGJwKSwgcG9ydF9Obyhwb3J0KSwgcG9ydC0+b3ZlcnJ1bik7CiAJfQogCXN0YXR1cyAmPSBwb3J0LT5tYXJrX21hc2s7CiAKIAkvKiBUaGlzIGZsaXAgYnVmZmVyIGNoZWNrIG5lZWRzIHRvIGJlIGJlbG93IHRoZSByZWFkaW5nIG9mIHRoZQogCSAgIHN0YXR1cyByZWdpc3RlciB0byByZXNldCB0aGUgY2hpcCdzIElSUS4uLi4gKi8KIAlpZiAodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCAxKSA9PSAwKSB7Ci0JCWRwcmludGsoU1hfREVCVUdfRklGTywgInN4JWQ6IHBvcnQgJWQ6IFdvcmtpbmcgYXJvdW5kIGZsaXAgYnVmZmVyIG92ZXJmbG93LlxuIiwKLQkJICAgICAgIGJvYXJkX05vKGJwKSwgcG9ydF9Obyhwb3J0KSk7CisJCWRwcmludGsoU1hfREVCVUdfRklGTywKKwkJICAgICJzeCVkOiBwb3J0ICVkOiBXb3JraW5nIGFyb3VuZCBmbGlwIGJ1ZmZlciBvdmVyZmxvdy5cbiIsCisJCQkJCWJvYXJkX05vKGJwKSwgcG9ydF9Obyhwb3J0KSk7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm47CiAJfQpAQCAtNjY0LDggKzU5NCw5IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKHN0YXR1cyAmIFJDU1JfVE9VVCkgewotCQlwcmludGsoS0VSTl9JTkZPICJzeCVkOiBwb3J0ICVkOiBSZWNlaXZlciB0aW1lb3V0LiBIYXJkd2FyZSBwcm9ibGVtcyA/XG4iLAotCQkgICAgICAgYm9hcmRfTm8oYnApLCBwb3J0X05vKHBvcnQpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgInN4JWQ6IHBvcnQgJWQ6IFJlY2VpdmVyIHRpbWVvdXQuIEhhcmR3YXJlIHByb2JsZW1zID9cbiIsCisJCQkJCWJvYXJkX05vKGJwKSwgcG9ydF9Obyhwb3J0KSk7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm47CiAKQEAgLTY3Myw3ICs2MDQsNyBAQAogCQlkcHJpbnRrKFNYX0RFQlVHX1JYLCAic3glZDogcG9ydCAlZDogSGFuZGxpbmcgYnJlYWsuLi5cbiIsCiAJCSAgICAgICBib2FyZF9ObyhicCksIHBvcnRfTm8ocG9ydCkpOwogCQlmbGFnID0gVFRZX0JSRUFLOwotCQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TQUspCisJCWlmIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfU0FLKQogCQkJZG9fU0FLKHR0eSk7CiAKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIFJDU1JfUEUpCkBAIC02ODgsMTMgKzYxOSwxMyBAQAogCWVsc2UKIAkJZmxhZyA9IFRUWV9OT1JNQUw7CiAKLQlpZih0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGFnKSkKKwlpZiAodHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgZmxhZykpCiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJZnVuY19leGl0KCk7CiB9CiAKIAotc3RhdGljIGlubGluZSB2b2lkIHN4X3JlY2VpdmUoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqIGJwKQorc3RhdGljIHZvaWQgc3hfcmVjZWl2ZShzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCkKIHsKIAlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKQEAgLTcwMiwxNSArNjMzLDE2IEBACiAKIAlmdW5jX2VudGVyKCk7CiAKLQlpZiAoIShwb3J0ID0gc3hfZ2V0X3BvcnQoYnAsICJSZWNlaXZlIikpKSB7Ci0JCWRwcmludGsgKFNYX0RFQlVHX1JYLCAiSG1tLCBjb3VsZG4ndCBmaW5kIHBvcnQuXG4iKTsKKwlwb3J0ID0gc3hfZ2V0X3BvcnQoYnAsICJSZWNlaXZlIik7CisJaWYgKHBvcnQgPT0gTlVMTCkgeworCQlkcHJpbnRrKFNYX0RFQlVHX1JYLCAiSG1tLCBjb3VsZG4ndCBmaW5kIHBvcnQuXG4iKTsKIAkJZnVuY19leGl0KCk7CiAJCXJldHVybjsKIAl9Ci0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCiAJY291bnQgPSBzeF9pbihicCwgQ0QxODZ4X1JEQ1IpOwotCWRwcmludGsgKFNYX0RFQlVHX1JYLCAicG9ydDogJXA6IGNvdW50OiAlZFxuIiwgcG9ydCwgY291bnQpOworCWRwcmludGsoU1hfREVCVUdfUlgsICJwb3J0OiAlcDogY291bnQ6ICVkXG4iLCBwb3J0LCBjb3VudCk7CiAJcG9ydC0+aGl0c1tjb3VudCA+IDggPyA5IDogY291bnRdKys7CiAKIAl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGNvdW50KTsKQEAgLTcyMiwxOSArNjU0LDIwIEBACiB9CiAKIAotc3RhdGljIGlubGluZSB2b2lkIHN4X3RyYW5zbWl0KHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKiBicCkKK3N0YXRpYyB2b2lkIHN4X3RyYW5zbWl0KHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwKQogewogCXN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXVuc2lnbmVkIGNoYXIgY291bnQ7CiAKIAlmdW5jX2VudGVyKCk7Ci0JaWYgKCEocG9ydCA9IHN4X2dldF9wb3J0KGJwLCAiVHJhbnNtaXQiKSkpIHsKKwlwb3J0ID0gc3hfZ2V0X3BvcnQoYnAsICJUcmFuc21pdCIpOworCWlmIChwb3J0ID09IE5VTEwpIHsKIAkJZnVuY19leGl0KCk7CiAJCXJldHVybjsKIAl9Ci0JZHByaW50ayAoU1hfREVCVUdfVFgsICJwb3J0OiAlcFxuIiwgcG9ydCk7Ci0JdHR5ID0gcG9ydC0+dHR5OworCWRwcmludGsoU1hfREVCVUdfVFgsICJwb3J0OiAlcFxuIiwgcG9ydCk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAKIAlpZiAocG9ydC0+SUVSICYgSUVSX1RYRU1QVFkpIHsKIAkJLyogRklGTyBkcmFpbmVkICovCkBAIC03NjUsNyArNjk4LDggQEAKIAkJCXN4X291dChicCwgQ0QxODZ4X1REUiwgQ0QxODZ4X0NfRVNDKTsKIAkJCXN4X291dChicCwgQ0QxODZ4X1REUiwgQ0QxODZ4X0NfREVMQVkpOwogCQkJc3hfb3V0KGJwLCBDRDE4NnhfVERSLCBjb3VudCk7Ci0JCQlpZiAoIShwb3J0LT5icmVha19sZW5ndGggLT0gY291bnQpKQorCQkJcG9ydC0+YnJlYWtfbGVuZ3RoIC09IGNvdW50OworCQkJaWYgKHBvcnQtPmJyZWFrX2xlbmd0aCA9PSAwKQogCQkJCXBvcnQtPmJyZWFrX2xlbmd0aC0tOwogCQl9IGVsc2UgewogCQkJc3hfb3V0KGJwLCBDRDE4NnhfVERSLCBDRDE4NnhfQ19FU0MpOwpAQCAtNzk0LDM2ICs3MjgsMzYgQEAKIAkJc3hfb3V0KGJwLCBDRDE4NnhfSUVSLCBwb3J0LT5JRVIpOwogCX0KIAlpZiAocG9ydC0+eG1pdF9jbnQgPD0gcG9ydC0+d2FrZXVwX2NoYXJzKQotIAkJdHR5X3dha2V1cCh0dHkpOworCQl0dHlfd2FrZXVwKHR0eSk7CiAKIAlmdW5jX2V4aXQoKTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3hfY2hlY2tfbW9kZW0oc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqIGJwKQorc3RhdGljIHZvaWQgc3hfY2hlY2tfbW9kZW0oc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnApCiB7CiAJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0OwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgY2hhciBtY3I7CiAJaW50IG1zdnJfY2Q7CiAKLQlkcHJpbnRrIChTWF9ERUJVR19TSUdOQUxTLCAiTW9kZW0gaW50ci4gIik7Ci0JaWYgKCEocG9ydCA9IHN4X2dldF9wb3J0KGJwLCAiTW9kZW0iKSkpCisJZHByaW50ayhTWF9ERUJVR19TSUdOQUxTLCAiTW9kZW0gaW50ci4gIik7CisJcG9ydCA9IHN4X2dldF9wb3J0KGJwLCAiTW9kZW0iKTsKKwlpZiAocG9ydCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT50dHk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAKIAltY3IgPSBzeF9pbihicCwgQ0QxODZ4X01DUik7Ci0JcHJpbnRrICgibWNyID0gJTAyeC5cbiIsIG1jcik7CiAKIAlpZiAoKG1jciAmIE1DUl9DRENIRykpIHsKLQkJZHByaW50ayAoU1hfREVCVUdfU0lHTkFMUywgIkNEIGp1c3QgY2hhbmdlZC4uLiAiKTsKKwkJZHByaW50ayhTWF9ERUJVR19TSUdOQUxTLCAiQ0QganVzdCBjaGFuZ2VkLi4uICIpOwogCQltc3ZyX2NkID0gc3hfaW4oYnAsIENEMTg2eF9NU1ZSKSAmIE1TVlJfQ0Q7CiAJCWlmIChtc3ZyX2NkKSB7Ci0JCQlkcHJpbnRrIChTWF9ERUJVR19TSUdOQUxTLCAiV2FraW5nIHVwIGd1eXMgaW4gb3Blbi5cbiIpOwotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCQkJZHByaW50ayhTWF9ERUJVR19TSUdOQUxTLCAiV2FraW5nIHVwIGd1eXMgaW4gb3Blbi5cbiIpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCk7CiAJCX0gZWxzZSB7Ci0JCQlkcHJpbnRrIChTWF9ERUJVR19TSUdOQUxTLCAiU2VuZGluZyBIVVAuXG4iKTsKKwkJCWRwcmludGsoU1hfREVCVUdfU0lHTkFMUywgIlNlbmRpbmcgSFVQLlxuIik7CiAJCQl0dHlfaGFuZ3VwKHR0eSk7CiAJCX0KIAl9CkBAIC04NzQsOSArODA4LDEyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAotCWRwcmludGsgKFNYX0RFQlVHX0ZMT1csICJlbnRlciAlcyBwb3J0ICVkIHJvb206ICVsZFxuIiwgX19mdW5jX18sIHBvcnRfTm8oc3hfZ2V0X3BvcnQoYnAsICJJTlQiKSksIFNFUklBTF9YTUlUX1NJWkUgLSBzeF9nZXRfcG9ydChicCwgIklUTiIpLT54bWl0X2NudCAtIDEpOworCWRwcmludGsoU1hfREVCVUdfRkxPVywgImVudGVyICVzIHBvcnQgJWQgcm9vbTogJWxkXG4iLCBfX2Z1bmNfXywKKwkJcG9ydF9ObyhzeF9nZXRfcG9ydChicCwgIklOVCIpKSwKKwkJU0VSSUFMX1hNSVRfU0laRSAtIHN4X2dldF9wb3J0KGJwLCAiSVROIiktPnhtaXRfY250IC0gMSk7CiAJaWYgKCEoYnAtPmZsYWdzICYgU1hfQk9BUkRfQUNUSVZFKSkgewotCQlkcHJpbnRrIChTWF9ERUJVR19JUlEsICJzeDogRmFsc2UgaW50ZXJydXB0LiBpcnEgJWQuXG4iLCBicC0+aXJxKTsKKwkJZHByaW50ayhTWF9ERUJVR19JUlEsICJzeDogRmFsc2UgaW50ZXJydXB0LiBpcnEgJWQuXG4iLAorCQkJCQkJCQlicC0+aXJxKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAkJZnVuY19leGl0KCk7CiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTg4NCwxMCArODIxLDExIEBACiAKIAlzYXZlZF9yZWcgPSBicC0+cmVnOwogCi0Jd2hpbGUgKCgrK2xvb3AgPCAxNikgJiYgKHN0YXR1cyA9IChzeF9pbihicCwgQ0QxODZ4X1NSU1IpICYKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTUlNSX1JSRVFpbnQgfAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JTUl9UUkVRaW50IHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlNSX01SRVFpbnQpKSkpIHsKKwl3aGlsZSAoKytsb29wIDwgMTYpIHsKKwkJc3RhdHVzID0gc3hfaW4oYnAsIENEMTg2eF9TUlNSKSAmCisJCQkJKFNSU1JfUlJFUWludCB8IFNSU1JfVFJFUWludCB8IFNSU1JfTVJFUWludCk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCWJyZWFrOwogCQlpZiAoc3RhdHVzICYgU1JTUl9SUkVRaW50KSB7CiAJCQlhY2sgPSBzeF9pbihicCwgQ0QxODZ4X1JSQVIpOwogCkBAIC04OTYsOCArODM0LDkgQEAKIAkJCWVsc2UgaWYgKGFjayA9PSAoU1hfSUQgfCBHSVZSX0lUX1JFWEMpKQogCQkJCXN4X3JlY2VpdmVfZXhjKGJwKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoS0VSTl9FUlIgInN4JWQ6IHN0YXR1czogMHgleCBCYWQgcmVjZWl2ZSBhY2sgMHglMDJ4LlxuIiwKLQkJCQkgICAgICAgYm9hcmRfTm8oYnApLCBzdGF0dXMsIGFjayk7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJInN4JWQ6IHN0YXR1czogMHgleCBCYWQgcmVjZWl2ZSBhY2sgMHglMDJ4LlxuIiwKKwkJCQkJCWJvYXJkX05vKGJwKSwgc3RhdHVzLCBhY2spOwogCiAJCX0gZWxzZSBpZiAoc3RhdHVzICYgU1JTUl9UUkVRaW50KSB7CiAJCQlhY2sgPSBzeF9pbihicCwgQ0QxODZ4X1RSQVIpOwpAQCAtOTA2LDE0ICs4NDUsMTYgQEAKIAkJCQlzeF90cmFuc21pdChicCk7CiAJCQllbHNlCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzeCVkOiBzdGF0dXM6IDB4JXggQmFkIHRyYW5zbWl0IGFjayAweCUwMnguIHBvcnQ6ICVkXG4iLAotCQkJCSAgICAgICBib2FyZF9ObyhicCksIHN0YXR1cywgYWNrLCBwb3J0X05vIChzeF9nZXRfcG9ydCAoYnAsICJJbnQiKSkpOworCQkJCQlib2FyZF9ObyhicCksIHN0YXR1cywgYWNrLAorCQkJCQlwb3J0X05vKHN4X2dldF9wb3J0KGJwLCAiSW50IikpKTsKIAkJfSBlbHNlIGlmIChzdGF0dXMgJiBTUlNSX01SRVFpbnQpIHsKIAkJCWFjayA9IHN4X2luKGJwLCBDRDE4NnhfTVJBUik7CiAKIAkJCWlmIChhY2sgPT0gKFNYX0lEIHwgR0lWUl9JVF9NT0RFTSkpCiAJCQkJc3hfY2hlY2tfbW9kZW0oYnApOwogCQkJZWxzZQotCQkJCXByaW50ayhLRVJOX0VSUiAic3glZDogc3RhdHVzOiAweCV4IEJhZCBtb2RlbSBhY2sgMHglMDJ4LlxuIiwKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICJzeCVkOiBzdGF0dXM6IDB4JXggQmFkIG1vZGVtIGFjayAweCUwMnguXG4iLAogCQkJCSAgICAgICBib2FyZF9ObyhicCksIHN0YXR1cywgYWNrKTsKIAogCQl9CkBAIC05MjEsNyArODYyLDcgQEAKIAkJc3hfb3V0KGJwLCBDRDE4NnhfRU9JUiwgMCk7ICAgLyogTWFyayBlbmQgb2YgaW50ZXJydXB0ICovCiAJfQogCWJwLT5yZWcgPSBzYXZlZF9yZWc7Ci0Jb3V0YiAoYnAtPnJlZywgYnAtPmJhc2UgKyBTWF9BRERSX1JFRyk7CisJb3V0YihicC0+cmVnLCBicC0+YmFzZSArIFNYX0FERFJfUkVHKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwogCWZ1bmNfZXhpdCgpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTkzMiwzNiArODczLDI2IEBACiAgKiAgUm91dGluZXMgZm9yIG9wZW4gJiBjbG9zZSBwcm9jZXNzaW5nLgogICovCiAKLXN0YXRpYyB2b2lkIHR1cm5faW50c19vZmYgKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwKQorc3RhdGljIHZvaWQgdHVybl9pbnRzX29mZihzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZnVuY19lbnRlcigpOwotCWlmIChicC0+ZmxhZ3MgJiBTWF9CT0FSRF9JU19QQ0kpIHsKLQkJLyogVGhpcyB3YXMgaW50ZW5kZWQgZm9yIGVuYWJlbGluZyB0aGUgaW50ZXJydXB0IG9uIHRoZQotCQkgKiBQQ0kgY2FyZC4gSG93ZXZlciBpdCBzZWVtcyB0aGF0IGl0J3MgYWxyZWFkeSBlbmFibGVkCi0JCSAqIGFuZCBhcyBQQ0kgaW50ZXJydXB0cyBjYW4gYmUgc2hhcmVkLCB0aGVyZSBpcyBubyByZWFsCi0JCSAqIHJlYXNvbiB0byBoYXZlIHRvIHR1cm4gaXQgb2ZmLiAqLwotCX0KLQogCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwotCSh2b2lkKSBzeF9pbl9vZmYgKGJwLCAwKTsgLyogVHVybiBvZmYgaW50ZXJydXB0cy4gKi8KKwkodm9pZCkgc3hfaW5fb2ZmKGJwLCAwKTsgLyogVHVybiBvZmYgaW50ZXJydXB0cy4gKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwogCiAJZnVuY19leGl0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHR1cm5faW50c19vbiAoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnApCitzdGF0aWMgdm9pZCB0dXJuX2ludHNfb24oc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWZ1bmNfZW50ZXIoKTsKIAotCWlmIChicC0+ZmxhZ3MgJiBTWF9CT0FSRF9JU19QQ0kpIHsKLQkJLyogcGxheSB3aXRoIHRoZSBQQ0kgY2hpcC4gU2VlIGNvbW1lbnQgYWJvdmUuICovCi0JfQogCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwotCSh2b2lkKSBzeF9pbiAoYnAsIDApOyAvKiBUdXJuIE9OIGludGVycnVwdHMuICovCisJKHZvaWQpIHN4X2luKGJwLCAwKTsgLyogVHVybiBPTiBpbnRlcnJ1cHRzLiAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CiAKIAlmdW5jX2V4aXQoKTsKQEAgLTk2OSw3ICs5MDAsNyBAQAogCiAKIC8qIENhbGxlZCB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHN4X3NldHVwX2JvYXJkKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKiBicCkKK3N0YXRpYyBpbnQgc3hfc2V0dXBfYm9hcmQoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnApCiB7CiAJaW50IGVycm9yOwogCkBAIC05NzcsMTQgKzkwOCwxNiBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChicC0+ZmxhZ3MgJiBTWF9CT0FSRF9JU19QQ0kpCi0JCWVycm9yID0gcmVxdWVzdF9pcnEoYnAtPmlycSwgc3hfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsICJzcGVjaWFsaXggSU84KyIsIGJwKTsKKwkJZXJyb3IgPSByZXF1ZXN0X2lycShicC0+aXJxLCBzeF9pbnRlcnJ1cHQsCisJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsICJzcGVjaWFsaXggSU84KyIsIGJwKTsKIAllbHNlCi0JCWVycm9yID0gcmVxdWVzdF9pcnEoYnAtPmlycSwgc3hfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAic3BlY2lhbGl4IElPOCsiLCBicCk7CisJCWVycm9yID0gcmVxdWVzdF9pcnEoYnAtPmlycSwgc3hfaW50ZXJydXB0LAorCQkJSVJRRl9ESVNBQkxFRCwgInNwZWNpYWxpeCBJTzgrIiwgYnApOwogCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQl0dXJuX2ludHNfb24gKGJwKTsKKwl0dXJuX2ludHNfb24oYnApOwogCWJwLT5mbGFncyB8PSBTWF9CT0FSRF9BQ1RJVkU7CiAKIAlyZXR1cm4gMDsKQEAgLTk5Miw3ICs5MjUsNyBAQAogCiAKIC8qIENhbGxlZCB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzeF9zaHV0ZG93bl9ib2FyZChzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCkKK3N0YXRpYyB2b2lkIHN4X3NodXRkb3duX2JvYXJkKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwKQogewogCWZ1bmNfZW50ZXIoKTsKIApAQCAtMTAwMywyMiArOTM2LDI2IEBACiAKIAlicC0+ZmxhZ3MgJj0gflNYX0JPQVJEX0FDVElWRTsKIAotCWRwcmludGsgKFNYX0RFQlVHX0lSUSwgIkZyZWVpbmcgSVJRJWQgZm9yIGJvYXJkICVkLlxuIiwKLQkJIGJwLT5pcnEsIGJvYXJkX05vIChicCkpOworCWRwcmludGsoU1hfREVCVUdfSVJRLCAiRnJlZWluZyBJUlElZCBmb3IgYm9hcmQgJWQuXG4iLAorCQkgYnAtPmlycSwgYm9hcmRfTm8oYnApKTsKIAlmcmVlX2lycShicC0+aXJxLCBicCk7Ci0KLQl0dXJuX2ludHNfb2ZmIChicCk7Ci0KLQorCXR1cm5faW50c19vZmYoYnApOwogCWZ1bmNfZXhpdCgpOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHN4X2NydHNjdHMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpZiAoc3hfcnRzY3RzKQorCQlyZXR1cm4gQ19DUlRTQ1RTKHR0eSk7CisJcmV0dXJuIDE7Cit9CiAKIC8qCiAgKiBTZXR0aW5nIHVwIHBvcnQgY2hhcmFjdGVyaXN0aWNzLgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzCiAgKi8KLXN0YXRpYyB2b2lkIHN4X2NoYW5nZV9zcGVlZChzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCwgc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgc3hfY2hhbmdlX3NwZWVkKHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwLAorCQkJCQkJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgbG9uZyBiYXVkOwpAQCAtMTAzMCw3ICs5NjcsOCBAQAogCiAJZnVuY19lbnRlcigpOwogCi0JaWYgKCEodHR5ID0gcG9ydC0+dHR5KSB8fCAhdHR5LT50ZXJtaW9zKSB7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJaWYgKCF0dHkgfHwgIXR0eS0+dGVybWlvcykgewogCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEwNDMsMzggKzk4MSwzNiBAQAogCiAJLyogVGhlIFNwZWNpYWxpeCBib2FyZCBkb2Vucyd0IGltcGxlbWVudCB0aGUgUlRTIGxpbmVzLgogCSAgIFRoZXkgYXJlIHVzZWQgdG8gc2V0IHRoZSBJUlEgbGV2ZWwuIERvbid0IHRvdWNoIHRoZW0uICovCi0JaWYgKFNYX0NSVFNDVFModHR5KSkKKwlpZiAoc3hfY3J0c2N0cyh0dHkpKQogCQlwb3J0LT5NU1ZSID0gTVNWUl9EVFIgfCAoc3hfaW4oYnAsIENEMTg2eF9NU1ZSKSAmIE1TVlJfUlRTKTsKIAllbHNlCiAJCXBvcnQtPk1TVlIgPSAgKHN4X2luKGJwLCBDRDE4NnhfTVNWUikgJiBNU1ZSX1JUUyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKLQlkcHJpbnRrIChTWF9ERUJVR19URVJNSU9TLCAic3g6IGdvdCBNU1ZSPSUwMnguXG4iLCBwb3J0LT5NU1ZSKTsKKwlkcHJpbnRrKFNYX0RFQlVHX1RFUk1JT1MsICJzeDogZ290IE1TVlI9JTAyeC5cbiIsIHBvcnQtPk1TVlIpOwogCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCiAJaWYgKGJhdWQgPT0gMzg0MDApIHsKLQkJaWYgKChwb3J0LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCisJCWlmICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCiAJCQliYXVkID0gNTc2MDA7Ci0JCWlmICgocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKKwkJaWYgKChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCiAJCQliYXVkID0gMTE1MjAwOwogCX0KIAogCWlmICghYmF1ZCkgewogCQkvKiBEcm9wIERUUiAmIGV4aXQgKi8KLQkJZHByaW50ayAoU1hfREVCVUdfVEVSTUlPUywgIkRyb3BwaW5nIERUUi4uLiAgSG1tLi4uLlxuIik7Ci0JCWlmICghU1hfQ1JUU0NUUyAodHR5KSkgewotCQkJcG9ydCAtPiBNU1ZSICY9IH4gTVNWUl9EVFI7CisJCWRwcmludGsoU1hfREVCVUdfVEVSTUlPUywgIkRyb3BwaW5nIERUUi4uLiAgSG1tLi4uLlxuIik7CisJCWlmICghc3hfY3J0c2N0cyh0dHkpKSB7CisJCQlwb3J0LT5NU1ZSICY9IH5NU1ZSX0RUUjsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwotCQkJc3hfb3V0KGJwLCBDRDE4NnhfTVNWUiwgcG9ydC0+TVNWUiApOworCQkJc3hfb3V0KGJwLCBDRDE4NnhfTVNWUiwgcG9ydC0+TVNWUik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwotCQl9Ci0JCWVsc2UKLQkJCWRwcmludGsgKFNYX0RFQlVHX1RFUk1JT1MsICJDYW4ndCBkcm9wIERUUjogbm8gRFRSLlxuIik7CisJCX0gZWxzZQorCQkJZHByaW50ayhTWF9ERUJVR19URVJNSU9TLCAiQ2FuJ3QgZHJvcCBEVFI6IG5vIERUUi5cbiIpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJLyogU2V0IERUUiBvbiAqLwotCQlpZiAoIVNYX0NSVFNDVFMgKHR0eSkpIHsKLQkJCXBvcnQgLT5NU1ZSIHw9IE1TVlJfRFRSOwotCQl9CisJCWlmICghc3hfY3J0c2N0cyh0dHkpKQorCQkJcG9ydC0+TVNWUiB8PSBNU1ZSX0RUUjsKIAl9CiAKIAkvKgpAQCAtMTA4MywyOCArMTAxOSwyNyBAQAogCiAJLyogU2V0IGJhdWQgcmF0ZSBmb3IgcG9ydCAqLwogCXRtcCA9IHBvcnQtPmN1c3RvbV9kaXZpc29yIDsKLQlpZiAoIHRtcCApCi0JCXByaW50ayAoS0VSTl9JTkZPICJzeCVkOiBVc2luZyBjdXN0b20gYmF1ZCByYXRlIGRpdmlzb3IgJWxkLiBcbiIKLQkJICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYW4gdW50ZXN0ZWQgb3B0aW9uLCBwbGVhc2UgYmUgY2FyZWZ1bGwuXG4iLAotCQkgICAgICAgICAgICAgICAgICBwb3J0X05vIChwb3J0KSwgdG1wKTsKKwlpZiAodG1wKQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkic3glZDogVXNpbmcgY3VzdG9tIGJhdWQgcmF0ZSBkaXZpc29yICVsZC4gXG4iCisJCQkiVGhpcyBpcyBhbiB1bnRlc3RlZCBvcHRpb24sIHBsZWFzZSBiZSBjYXJlZnVsLlxuIiwKKwkJCQkJCQlwb3J0X05vKHBvcnQpLCB0bXApOwogCWVsc2UKLQkJdG1wID0gKCgoU1hfT1NDRlJFUSArIGJhdWQvMikgLyBiYXVkICsKLQkJICAgICAgICAgQ0QxODZ4X1RQQy8yKSAvIENEMTg2eF9UUEMpOworCQl0bXAgPSAoKChTWF9PU0NGUkVRICsgYmF1ZC8yKSAvIGJhdWQgKyBDRDE4NnhfVFBDLzIpIC8KKwkJCQkJCQkJQ0QxODZ4X1RQQyk7CiAKLQlpZiAoKHRtcCA8IDB4MTApICYmIHRpbWVfYmVmb3JlKGFnYWluLCBqaWZmaWVzKSkgeworCWlmICh0bXAgPCAweDEwICYmIHRpbWVfYmVmb3JlKGFnYWluLCBqaWZmaWVzKSkgewogCQlhZ2FpbiA9IGppZmZpZXMgKyBIWiAqIDYwOwogCQkvKiBQYWdlIDQ4IG9mIHZlcnNpb24gMi4wIG9mIHRoZSBDTC1DRDE4NjUgZGF0YWJvb2sgKi8KIAkJaWYgKHRtcCA+PSAxMikgewotCQkJcHJpbnRrIChLRVJOX0lORk8gInN4JWQ6IEJhdWQgcmF0ZSBkaXZpc29yIGlzICVsZC4gXG4iCi0JCQkgICAgICAgICJQZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpcyBwb3NzaWJsZS5cbiIKLQkJCSAgICAgICAgIlJlYWQgc3BlY2lhbGl4LnR4dCBmb3IgbW9yZSBpbmZvLlxuIiwKLQkJCSAgICAgICAgcG9ydF9ObyAocG9ydCksIHRtcCk7CisJCQlwcmludGsoS0VSTl9JTkZPICJzeCVkOiBCYXVkIHJhdGUgZGl2aXNvciBpcyAlbGQuIFxuIgorCQkJCSJQZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpcyBwb3NzaWJsZS5cbiIKKwkJCQkiUmVhZCBzcGVjaWFsaXgudHh0IGZvciBtb3JlIGluZm8uXG4iLAorCQkJCQkJcG9ydF9Obyhwb3J0KSwgdG1wKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPICJzeCVkOiBCYXVkIHJhdGUgZGl2aXNvciBpcyAlbGQuIFxuIgotCQkJICAgICAgICAiV2FybmluZzogb3ZlcnN0cmVzc2luZyBDaXJydXMgY2hpcC4gIgotCQkJICAgICAgICAiVGhpcyBtaWdodCBub3Qgd29yay5cbiIKLQkJCSAgICAgICAgIlJlYWQgc3BlY2lhbGl4LnR4dCBmb3IgbW9yZSBpbmZvLlxuIiwKLQkJCSAgICAgICAgcG9ydF9ObyAocG9ydCksIHRtcCk7CisJCQlwcmludGsoS0VSTl9JTkZPICJzeCVkOiBCYXVkIHJhdGUgZGl2aXNvciBpcyAlbGQuIFxuIgorCQkiV2FybmluZzogb3ZlcnN0cmVzc2luZyBDaXJydXMgY2hpcC4gVGhpcyBtaWdodCBub3Qgd29yay5cbiIKKwkJIlJlYWQgc3BlY2lhbGl4LnR4dCBmb3IgbW9yZSBpbmZvLlxuIiwgcG9ydF9Obyhwb3J0KSwgdG1wKTsKIAkJfQogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKQEAgLTExMTQsNyArMTA0OSw4IEBACiAJc3hfb3V0KGJwLCBDRDE4NnhfVEJQUkwsIHRtcCAmIDB4ZmYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CiAJaWYgKHBvcnQtPmN1c3RvbV9kaXZpc29yKQotCQliYXVkID0gKFNYX09TQ0ZSRVEgKyBwb3J0LT5jdXN0b21fZGl2aXNvci8yKSAvIHBvcnQtPmN1c3RvbV9kaXZpc29yOworCQliYXVkID0gKFNYX09TQ0ZSRVEgKyBwb3J0LT5jdXN0b21fZGl2aXNvci8yKSAvCisJCQkJCQkJcG9ydC0+Y3VzdG9tX2Rpdmlzb3I7CiAJYmF1ZCA9IChiYXVkICsgNSkgLyAxMDsJCS8qIEVzdGltYXRlZCBDUFMgKi8KIAogCS8qIFR3byB0aW1lciB0aWNrcyBzZWVtcyBlbm91Z2ggdG8gd2FrZXVwIHNvbWV0aGluZyBsaWtlIFNMSVAgZHJpdmVyICovCkBAIC0xMTI5LDE2ICsxMDY1LDE2IEBACiAJc3hfb3V0KGJwLCBDRDE4NnhfUlRQUiwgdG1wKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwogCXN3aXRjaCAoQ19DU0laRSh0dHkpKSB7Ci0JIGNhc2UgQ1M1OgorCWNhc2UgQ1M1OgogCQljb3IxIHw9IENPUjFfNUJJVFM7CiAJCWJyZWFrOwotCSBjYXNlIENTNjoKKwljYXNlIENTNjoKIAkJY29yMSB8PSBDT1IxXzZCSVRTOwogCQlicmVhazsKLQkgY2FzZSBDUzc6CisJY2FzZSBDUzc6CiAJCWNvcjEgfD0gQ09SMV83QklUUzsKIAkJYnJlYWs7Ci0JIGNhc2UgQ1M4OgorCWNhc2UgQ1M4OgogCQljb3IxIHw9IENPUjFfOEJJVFM7CiAJCWJyZWFrOwogCX0KQEAgLTExNzUsNyArMTExMSw4IEBACiAJCW1jb3IxIHw9IE1DT1IxX0RTUlpEIHwgTUNPUjFfQ1RTWkQ7CiAJCW1jb3IyIHw9IE1DT1IyX0RTUk9EIHwgTUNPUjJfQ1RTT0Q7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwotCQl0dHktPmh3X3N0b3BwZWQgPSAhKHN4X2luKGJwLCBDRDE4NnhfTVNWUikgJiAoTVNWUl9DVFN8TVNWUl9EU1IpKTsKKwkJdHR5LT5od19zdG9wcGVkID0gIShzeF9pbihicCwgQ0QxODZ4X01TVlIpICYKKwkJCQkJCQkoTVNWUl9DVFN8TVNWUl9EU1IpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKICNlbHNlCiAJCXBvcnQtPkNPUjIgfD0gQ09SMl9DVFNBRTsKQEAgLTEyMTksNyArMTE1Niw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CiAJc3hfb3V0KGJwLCBDRDE4NnhfQ0NSLCBDQ1JfQ09SQ0hHMSB8IENDUl9DT1JDSEcyIHwgQ0NSX0NPUkNIRzMpOwogCS8qIFNldHRpbmcgdXAgbW9kZW0gb3B0aW9uIHJlZ2lzdGVycyAqLwotCWRwcmludGsgKFNYX0RFQlVHX1RFUk1JT1MsICJNY29yMSA9ICUwMngsIG1jb3IyID0gJTAyeC5cbiIsIG1jb3IxLCBtY29yMik7CisJZHByaW50ayhTWF9ERUJVR19URVJNSU9TLCAiTWNvcjEgPSAlMDJ4LCBtY29yMiA9ICUwMnguXG4iLAorCQkJCQkJCQltY29yMSwgbWNvcjIpOwogCXN4X291dChicCwgQ0QxODZ4X01DT1IxLCBtY29yMSk7CiAJc3hfb3V0KGJwLCBDRDE4NnhfTUNPUjIsIG1jb3IyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwpAQCAtMTIzOCwxMyArMTE3NiwxNCBAQAogCiAKIC8qIE11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkICovCi1zdGF0aWMgaW50IHN4X3NldHVwX3BvcnQoc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnAsIHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgc3hfc2V0dXBfcG9ydChzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCwKKwkJCQkJCXN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqcG9ydCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZnVuY19lbnRlcigpOwogCi0JaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKKwlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjUzLDcgKzExOTIsOCBAQAogCQkvKiBXZSBtYXkgc2xlZXAgaW4gZ2V0X3plcm9lZF9wYWdlKCkgKi8KIAkJdW5zaWduZWQgbG9uZyB0bXA7CiAKLQkJaWYgKCEodG1wID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpKSkgeworCQl0bXAgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICh0bXAgPT0gMEwpIHsKIAkJCWZ1bmNfZXhpdCgpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTEyNjgsMTIgKzEyMDgsMTIgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocG9ydC0+dHR5KQotCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmcG9ydC0+dHR5LT5mbGFncyk7CisJaWYgKHBvcnQtPnBvcnQudHR5KQorCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmcG9ydC0+cG9ydC50dHktPmZsYWdzKTsKIAogCXBvcnQtPnhtaXRfY250ID0gcG9ydC0+eG1pdF9oZWFkID0gcG9ydC0+eG1pdF90YWlsID0gMDsKIAlzeF9jaGFuZ2Vfc3BlZWQoYnAsIHBvcnQpOwotCXBvcnQtPmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOworCXBvcnQtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyODQsNyArMTIyNCw4IEBACiAKIAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCi1zdGF0aWMgdm9pZCBzeF9zaHV0ZG93bl9wb3J0KHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwLCBzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBzeF9zaHV0ZG93bl9wb3J0KHN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwLAorCQkJCQkJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaW50IGk7CkBAIC0xMjkyLDE3ICsxMjMzLDE3IEBACiAKIAlmdW5jX2VudGVyKCk7CiAKLQlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgeworCWlmICghKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKIAkJZnVuY19leGl0KCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoc3hfZGVidWcgJiBTWF9ERUJVR19GSUZPKSB7Ci0JCWRwcmludGsoU1hfREVCVUdfRklGTywgInN4JWQ6IHBvcnQgJWQ6ICVsZCBvdmVycnVucywgRklGTyBoaXRzIFsgIiwKLQkJCWJvYXJkX05vKGJwKSwgcG9ydF9Obyhwb3J0KSwgcG9ydC0+b3ZlcnJ1bik7Ci0JCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWRwcmludGsoU1hfREVCVUdfRklGTywKKwkJCSJzeCVkOiBwb3J0ICVkOiAlbGQgb3ZlcnJ1bnMsIEZJRk8gaGl0cyBbICIsCisJCQkJYm9hcmRfTm8oYnApLCBwb3J0X05vKHBvcnQpLCBwb3J0LT5vdmVycnVuKTsKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJCQlkcHJpbnRrKFNYX0RFQlVHX0ZJRk8sICIlbGQgIiwgcG9ydC0+aGl0c1tpXSk7Ci0JCX0KIAkJZHByaW50ayhTWF9ERUJVR19GSUZPLCAiXS5cbiIpOwogCX0KIApAQCAtMTMxNSw3ICsxMjU2LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAlzeF9vdXQoYnAsIENEMTg2eF9DQVIsIHBvcnRfTm8ocG9ydCkpOwogCi0JaWYgKCEodHR5ID0gcG9ydC0+dHR5KSB8fCBDX0hVUENMKHR0eSkpIHsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwlpZiAodHR5ID09IE5VTEwgfHwgQ19IVVBDTCh0dHkpKSB7CiAJCS8qIERyb3AgRFRSICovCiAJCXN4X291dChicCwgQ0QxODZ4X01TVkRUUiwgMCk7CiAJfQpAQCAtMTMzMCw3ICsxMjcyLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwogCWlmICh0dHkpCiAJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7Ci0JcG9ydC0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOworCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCiAJaWYgKCFicC0+Y291bnQpCiAJCXN4X3NodXRkb3duX2JvYXJkKGJwKTsKQEAgLTEzMzgsOCArMTI4MCw4IEBACiB9CiAKIAotc3RhdGljIGludCBibG9ja190aWxfcmVhZHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBibG9ja190aWxfcmVhZHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCQlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQpCiB7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgIGN1cnJlbnQpOwogCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwID0gcG9ydF9Cb2FyZChwb3J0KTsKQEAgLTEzNTQsOSArMTI5Niw5IEBACiAJICogSWYgdGhlIGRldmljZSBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIGNsb3NlZCwgdGhlbiBibG9jawogCSAqIHVudGlsIGl0J3MgZG9uZSwgYW5kIHRoZW4gdHJ5IGFnYWluLgogCSAqLwotCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IHBvcnQtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgewotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwb3J0LT5jbG9zZV93YWl0KTsKLQkJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgeworCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBvcnQtPnBvcnQuY2xvc2Vfd2FpdCk7CisJCWlmIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgewogCQkJZnVuY19leGl0KCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfSBlbHNlIHsKQEAgLTEzNzEsNyArMTMxMyw3IEBACiAJICovCiAJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKIAkgICAgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgewotCQlwb3J0LT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCQlwb3J0LT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMzg3LDM3ICsxMzI5LDM2IEBACiAJICogZXhpdCwgZWl0aGVyIG5vcm1hbCBvciBhYm5vcm1hbC4KIAkgKi8KIAlyZXR2YWwgPSAwOwotCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT5vcGVuX3dhaXQsICZ3YWl0KTsKKwlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQsICZ3YWl0KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkgewotCQlwb3J0LT5jb3VudC0tOwotCX0KKwlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpCisJCXBvcnQtPnBvcnQuY291bnQtLTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JcG9ydC0+YmxvY2tlZF9vcGVuKys7CisJcG9ydC0+cG9ydC5ibG9ja2VkX29wZW4rKzsKIAl3aGlsZSAoMSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAkJc3hfb3V0KGJwLCBDRDE4NnhfQ0FSLCBwb3J0X05vKHBvcnQpKTsKIAkJQ0QgPSBzeF9pbihicCwgQ0QxODZ4X01TVlIpICYgTVNWUl9DRDsKLQkJaWYgKFNYX0NSVFNDVFMgKHR0eSkpIHsKKwkJaWYgKHN4X2NydHNjdHModHR5KSkgewogCQkJLyogQWN0aXZhdGUgUlRTICovCiAJCQlwb3J0LT5NU1ZSIHw9IE1TVlJfRFRSOwkJLyogV1RGPyAqLwotCQkJc3hfb3V0IChicCwgQ0QxODZ4X01TVlIsIHBvcnQtPk1TVlIpOworCQkJc3hfb3V0KGJwLCBDRDE4NnhfTVNWUiwgcG9ydC0+TVNWUik7CiAJCX0gZWxzZSB7CiAJCQkvKiBBY3RpdmF0ZSBEVFIgKi8KIAkJCXBvcnQtPk1TVlIgfD0gTVNWUl9EVFI7Ci0JCQlzeF9vdXQgKGJwLCBDRDE4NnhfTVNWUiwgcG9ydC0+TVNWUik7CisJCQlzeF9vdXQoYnAsIENEMTg2eF9NU1ZSLCBwb3J0LT5NU1ZSKTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAotCQkgICAgIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewotCQkJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwkJICAgICEocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgeworCQkJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQogCQkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQllbHNlCiAJCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCEocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgorCQlpZiAoIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYKIAkJICAgIChkb19jbG9jYWwgfHwgQ0QpKQogCQkJYnJlYWs7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtMTQyOCwzMCArMTM2OSwyOSBAQAogCX0KIAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnBvcnQtPm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKSB7Ci0JCXBvcnQtPmNvdW50Kys7Ci0JfQotCXBvcnQtPmJsb2NrZWRfb3Blbi0tOworCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKKwkJcG9ydC0+cG9ydC5jb3VudCsrOworCXBvcnQtPnBvcnQuYmxvY2tlZF9vcGVuLS07CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCWlmIChyZXR2YWwpIHsKIAkJZnVuY19leGl0KCk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKKwlwb3J0LT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJZnVuY19leGl0KCk7CiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCBzeF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgaW50IHN4X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaW50IGJvYXJkOwogCWludCBlcnJvcjsKLQlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKiBwb3J0OwotCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKiBicDsKKwlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQ7CisJc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnA7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTQ2OCwzNCArMTQwOCwzOCBAQAogCXBvcnQgPSBzeF9wb3J0ICsgYm9hcmQgKiBTWF9OUE9SVCArIFNYX1BPUlQodHR5LT5pbmRleCk7CiAJcG9ydC0+b3ZlcnJ1biA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0JCXBvcnQtPmhpdHNbaV09MDsKKwkJcG9ydC0+aGl0c1tpXSA9IDA7CiAKLQlkcHJpbnRrIChTWF9ERUJVR19PUEVOLCAiQm9hcmQgPSAlZCwgYnAgPSAlcCwgcG9ydCA9ICVwLCBwb3J0bm8gPSAlZC5cbiIsCi0JICAgICAgICBib2FyZCwgYnAsIHBvcnQsIFNYX1BPUlQodHR5LT5pbmRleCkpOworCWRwcmludGsoU1hfREVCVUdfT1BFTiwKKwkJCSJCb2FyZCA9ICVkLCBicCA9ICVwLCBwb3J0ID0gJXAsIHBvcnRubyA9ICVkLlxuIiwKKwkJCQkgYm9hcmQsIGJwLCBwb3J0LCBTWF9QT1JUKHR0eS0+aW5kZXgpKTsKIAogCWlmIChzeF9wYXJhbm9pYV9jaGVjayhwb3J0LCB0dHktPm5hbWUsICJzeF9vcGVuIikpIHsKIAkJZnVuY19lbnRlcigpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoKGVycm9yID0gc3hfc2V0dXBfYm9hcmQoYnApKSkgeworCWVycm9yID0gc3hfc2V0dXBfYm9hcmQoYnApOworCWlmIChlcnJvcikgewogCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwotCXBvcnQtPmNvdW50Kys7CisJcG9ydC0+cG9ydC5jb3VudCsrOwogCWJwLT5jb3VudCsrOwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0OwotCXBvcnQtPnR0eSA9IHR0eTsKKwlwb3J0LT5wb3J0LnR0eSA9IHR0eTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKChlcnJvciA9IHN4X3NldHVwX3BvcnQoYnAsIHBvcnQpKSkgeworCWVycm9yID0gc3hfc2V0dXBfcG9ydChicCwgcG9ydCk7CisJaWYgKGVycm9yKSB7CiAJCWZ1bmNfZW50ZXIoKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlmICgoZXJyb3IgPSBibG9ja190aWxfcmVhZHkodHR5LCBmaWxwLCBwb3J0KSkpIHsKKwllcnJvciA9IGJsb2NrX3RpbF9yZWFkeSh0dHksIGZpbHAsIHBvcnQpOworCWlmIChlcnJvcikgewogCQlmdW5jX2VudGVyKCk7CiAJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0xNTA4LDcgKzE0NTIsNyBAQAogewogCXN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAgKiBicDsKKwlzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICAqYnA7CiAKIAlmdW5jX2VudGVyKCk7CiAKQEAgLTE1MjYsOSArMTQ3MCw5IEBACiAJZnVuY19leGl0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHN4X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgdm9pZCBzeF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQgPSAoc3RydWN0IHNwZWNpYWxpeF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0ID0gKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CkBAIC0xNTQ3LDE1ICsxNDkxLDE1IEBACiAJfQogCiAJYnAgPSBwb3J0X0JvYXJkKHBvcnQpOwotCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAocG9ydC0+Y291bnQgIT0gMSkpIHsKKwlpZiAodHR5LT5jb3VudCA9PSAxICYmIHBvcnQtPnBvcnQuY291bnQgIT0gMSkgewogCQlwcmludGsoS0VSTl9FUlIgInN4JWQ6IHN4X2Nsb3NlOiBiYWQgcG9ydCBjb3VudDsiCiAJCSAgICAgICAiIHR0eS0+Y291bnQgaXMgMSwgcG9ydCBjb3VudCBpcyAlZFxuIiwKLQkJICAgICAgIGJvYXJkX05vKGJwKSwgcG9ydC0+Y291bnQpOwotCQlwb3J0LT5jb3VudCA9IDE7CisJCSAgICAgICBib2FyZF9ObyhicCksIHBvcnQtPnBvcnQuY291bnQpOworCQlwb3J0LT5wb3J0LmNvdW50ID0gMTsKIAl9CiAKLQlpZiAocG9ydC0+Y291bnQgPiAxKSB7Ci0JCXBvcnQtPmNvdW50LS07CisJaWYgKHBvcnQtPnBvcnQuY291bnQgPiAxKSB7CisJCXBvcnQtPnBvcnQuY291bnQtLTsKIAkJYnAtPmNvdW50LS07CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtMTU2MywyNiArMTUwNywyNSBAQAogCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuOwogCX0KLQlwb3J0LT5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOworCXBvcnQtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0xPU0lORzsKIAkvKgogCSAqIE5vdyB3ZSB3YWl0IGZvciB0aGUgdHJhbnNtaXQgYnVmZmVyIHRvIGNsZWFyOyBhbmQgd2Ugbm90aWZ5CiAJICogdGhlIGxpbmUgZGlzY2lwbGluZSB0byBvbmx5IHByb2Nlc3MgWE9OL1hPRkYgY2hhcmFjdGVycy4KIAkgKi8KIAl0dHktPmNsb3NpbmcgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQlkcHJpbnRrIChTWF9ERUJVR19PUEVOLCAiQ2xvc2luZ1xuIik7Ci0JaWYgKHBvcnQtPmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkgewotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgcG9ydC0+Y2xvc2luZ193YWl0KTsKLQl9CisJZHByaW50ayhTWF9ERUJVR19PUEVOLCAiQ2xvc2luZ1xuIik7CisJaWYgKHBvcnQtPnBvcnQuY2xvc2luZ193YWl0ICE9IEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FKQorCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQpOwogCS8qCiAJICogQXQgdGhpcyBwb2ludCB3ZSBzdG9wIGFjY2VwdGluZyBpbnB1dC4gIFRvIGRvIHRoaXMsIHdlCiAJICogZGlzYWJsZSB0aGUgcmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHRzLCBhbmQgdGVsbCB0aGUKIAkgKiBpbnRlcnJ1cHQgZHJpdmVyIHRvIHN0b3AgY2hlY2tpbmcgdGhlIGRhdGEgcmVhZHkgYml0IGluIHRoZQogCSAqIGxpbmUgc3RhdHVzIHJlZ2lzdGVyLgogCSAqLwotCWRwcmludGsgKFNYX0RFQlVHX09QRU4sICJDbG9zZWRcbiIpOworCWRwcmludGsoU1hfREVCVUdfT1BFTiwgIkNsb3NlZFxuIik7CiAJcG9ydC0+SUVSICY9IH5JRVJfUlhEOwotCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewogCQlwb3J0LT5JRVIgJj0gfklFUl9UWFJEWTsKIAkJcG9ydC0+SUVSIHw9IElFUl9UWEVNUFRZOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKQEAgLTE1OTUsMTEgKzE1MzgsMTEgQEAKIAkJICogaW1wb3J0YW50IGlmIHRoZXJlIGlzIGEgdHJhbnNtaXQgRklGTyEKIAkJICovCiAJCXRpbWVvdXQgPSBqaWZmaWVzK0haOwotCQl3aGlsZShwb3J0LT5JRVIgJiBJRVJfVFhFTVBUWSkgewotCQkJc2V0X2N1cnJlbnRfc3RhdGUgKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXdoaWxlIChwb3J0LT5JRVIgJiBJRVJfVFhFTVBUWSkgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MocG9ydC0+dGltZW91dCkpOwogCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyAiVGltZW91dCB3YWl0aW5nIGZvciBjbG9zZVxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiVGltZW91dCB3YWl0aW5nIGZvciBjbG9zZVxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTE2MDcsMTQgKzE1NTAsMTYgQEAKIAl9CiAKIAlpZiAoLS1icC0+Y291bnQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic3glZDogc3hfc2h1dGRvd25fcG9ydDogYmFkIGJvYXJkIGNvdW50OiAlZCBwb3J0OiAlZFxuIiwKLQkJICAgICAgIGJvYXJkX05vKGJwKSwgYnAtPmNvdW50LCB0dHktPmluZGV4KTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAic3glZDogc3hfc2h1dGRvd25fcG9ydDogYmFkIGJvYXJkIGNvdW50OiAlZCBwb3J0OiAlZFxuIiwKKwkJCQlib2FyZF9ObyhicCksIGJwLT5jb3VudCwgdHR5LT5pbmRleCk7CiAJCWJwLT5jb3VudCA9IDA7CiAJfQotCWlmICgtLXBvcnQtPmNvdW50IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInN4JWQ6IHN4X2Nsb3NlOiBiYWQgcG9ydCBjb3VudCBmb3IgdHR5JWQ6ICVkXG4iLAotCQkgICAgICAgYm9hcmRfTm8oYnApLCBwb3J0X05vKHBvcnQpLCBwb3J0LT5jb3VudCk7Ci0JCXBvcnQtPmNvdW50ID0gMDsKKwlpZiAoLS1wb3J0LT5wb3J0LmNvdW50IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJzeCVkOiBzeF9jbG9zZTogYmFkIHBvcnQgY291bnQgZm9yIHR0eSVkOiAlZFxuIiwKKwkJCQlib2FyZF9ObyhicCksIHBvcnRfTm8ocG9ydCksIHBvcnQtPnBvcnQuY291bnQpOworCQlwb3J0LT5wb3J0LmNvdW50ID0gMDsKIAl9CiAKIAlzeF9zaHV0ZG93bl9wb3J0KGJwLCBwb3J0KTsKQEAgLTE2MjIsMjMgKzE1NjcsMjMgQEAKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JcG9ydC0+dHR5ID0gTlVMTDsKKwlwb3J0LT5wb3J0LnR0eSA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCWlmIChwb3J0LT5ibG9ja2VkX29wZW4pIHsKLQkJaWYgKHBvcnQtPmNsb3NlX2RlbGF5KSB7Ci0JCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKHBvcnQtPmNsb3NlX2RlbGF5KSk7Ci0JCX0KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCWlmIChwb3J0LT5wb3J0LmJsb2NrZWRfb3BlbikgeworCQlpZiAocG9ydC0+cG9ydC5jbG9zZV9kZWxheSkKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKAorCQkJCWppZmZpZXNfdG9fbXNlY3MocG9ydC0+cG9ydC5jbG9zZV9kZWxheSkpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnQub3Blbl93YWl0KTsKIAl9Ci0JcG9ydC0+ZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEFTWU5DX0NMT1NJTkcpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+Y2xvc2Vfd2FpdCk7CisJcG9ydC0+cG9ydC5mbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkV8QVNZTkNfQ0xPU0lORyk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0LmNsb3NlX3dhaXQpOwogCiAJZnVuY19leGl0KCk7CiB9CiAKIAotc3RhdGljIGludCBzeF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCitzdGF0aWMgaW50IHN4X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwOwpAQCAtMTY5MCwxMSArMTYzNSwxMSBAQAogfQogCiAKLXN0YXRpYyBpbnQgc3hfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHVuc2lnbmVkIGNoYXIgY2gpCitzdGF0aWMgaW50IHN4X3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpCiB7CiAJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0ID0gKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICAqIGJwOworCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgICpicDsKIAogCWZ1bmNfZW50ZXIoKTsKIApAQCAtMTcwMiw3ICsxNjQ3LDcgQEAKIAkJZnVuY19leGl0KCk7CiAJCXJldHVybiAwOwogCX0KLQlkcHJpbnRrIChTWF9ERUJVR19UWCwgImNoZWNrIHR0eTogJXAgJXBcbiIsIHR0eSwgcG9ydC0+eG1pdF9idWYpOworCWRwcmludGsoU1hfREVCVUdfVFgsICJjaGVjayB0dHk6ICVwICVwXG4iLCB0dHksIHBvcnQtPnhtaXRfYnVmKTsKIAlpZiAoIXBvcnQtPnhtaXRfYnVmKSB7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm4gMDsKQEAgLTE3MTAsMTQgKzE2NTUsMTUgQEAKIAlicCA9IHBvcnRfQm9hcmQocG9ydCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAotCWRwcmludGsgKFNYX0RFQlVHX1RYLCAieG1pdF9jbnQ6ICVkIHhtaXRfYnVmOiAlcFxuIiwgcG9ydC0+eG1pdF9jbnQsIHBvcnQtPnhtaXRfYnVmKTsKLQlpZiAoKHBvcnQtPnhtaXRfY250ID49IFNFUklBTF9YTUlUX1NJWkUgLSAxKSB8fCAoIXBvcnQtPnhtaXRfYnVmKSkgeworCWRwcmludGsoU1hfREVCVUdfVFgsICJ4bWl0X2NudDogJWQgeG1pdF9idWY6ICVwXG4iLAorCQkJCQlwb3J0LT54bWl0X2NudCwgcG9ydC0+eG1pdF9idWYpOworCWlmIChwb3J0LT54bWl0X2NudCA+PSBTRVJJQUxfWE1JVF9TSVpFIC0gMSB8fCAhcG9ydC0+eG1pdF9idWYpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCQlkcHJpbnRrIChTWF9ERUJVR19UWCwgIkV4aXQgc2l6ZVxuIik7CisJCWRwcmludGsoU1hfREVCVUdfVFgsICJFeGl0IHNpemVcbiIpOwogCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuIDA7CiAJfQotCWRwcmludGsgKFNYX0RFQlVHX1RYLCAiSGFuZGxlIHhtaXQ6ICVwICVwXG4iLCBwb3J0LCBwb3J0LT54bWl0X2J1Zik7CisJZHByaW50ayhTWF9ERUJVR19UWCwgIkhhbmRsZSB4bWl0OiAlcCAlcFxuIiwgcG9ydCwgcG9ydC0+eG1pdF9idWYpOwogCXBvcnQtPnhtaXRfYnVmW3BvcnQtPnhtaXRfaGVhZCsrXSA9IGNoOwogCXBvcnQtPnhtaXRfaGVhZCAmPSBTRVJJQUxfWE1JVF9TSVpFIC0gMTsKIAlwb3J0LT54bWl0X2NudCsrOwpAQCAtMTcyOCwxMSArMTY3NCwxMSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHN4X2ZsdXNoX2NoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQorc3RhdGljIHZvaWQgc3hfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQgPSAoc3RydWN0IHNwZWNpYWxpeF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgICogYnAgPSBwb3J0X0JvYXJkKHBvcnQpOworCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgICpicCA9IHBvcnRfQm9hcmQocG9ydCk7CiAKIAlmdW5jX2VudGVyKCk7CiAKQEAgLTE3NTUsNyArMTcwMSw3IEBACiB9CiAKIAotc3RhdGljIGludCBzeF93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQorc3RhdGljIGludCBzeF93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0ID0gKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJaW50CXJldDsKQEAgLTE3OTAsMTIgKzE3MzYsMTAgQEAKIAlyZXR1cm4gcG9ydC0+eG1pdF9jbnQ7CiB9CiAKLQotCiBzdGF0aWMgaW50IHN4X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKiBicDsKKwlzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicDsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xODA4LDI1ICsxNzUyLDIzIEBACiAJfQogCiAJYnAgPSBwb3J0X0JvYXJkKHBvcnQpOwotCXNwaW5fbG9ja19pcnFzYXZlICgmYnAtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAlzeF9vdXQoYnAsIENEMTg2eF9DQVIsIHBvcnRfTm8ocG9ydCkpOwogCXN0YXR1cyA9IHN4X2luKGJwLCBDRDE4NnhfTVNWUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKLQlkcHJpbnRrIChTWF9ERUJVR19JTklULCAiR290IG1zdnJbJWRdID0gJTAyeCwgY2FyID0gJWQuXG4iLAotCQlwb3J0X05vKHBvcnQpLCBzdGF0dXMsIHN4X2luIChicCwgQ0QxODZ4X0NBUikpOwotCWRwcmludGsgKFNYX0RFQlVHX0lOSVQsICJzeF9wb3J0ID0gJXAsIHBvcnQgPSAlcFxuIiwgc3hfcG9ydCwgcG9ydCk7Ci0JaWYgKFNYX0NSVFNDVFMocG9ydC0+dHR5KSkgewotCQlyZXN1bHQgID0gLyogICAoc3RhdHVzICYgTVNWUl9SVFMpID8gKi8gVElPQ01fRFRSIC8qIDogMCkgKi8KLQkJICAgICAgICAgIHwgICAoKHN0YXR1cyAmIE1TVlJfRFRSKSA/IFRJT0NNX1JUUyA6IDApCi0JCSAgICAgICAgICB8ICAgKChzdGF0dXMgJiBNU1ZSX0NEKSAgPyBUSU9DTV9DQVIgOiAwKQotCQkgICAgICAgICAgfC8qICgoc3RhdHVzICYgTVNWUl9EU1IpID8gKi8gVElPQ01fRFNSIC8qIDogMCkgKi8KLQkJICAgICAgICAgIHwgICAoKHN0YXR1cyAmIE1TVlJfQ1RTKSA/IFRJT0NNX0NUUyA6IDApOworCWRwcmludGsoU1hfREVCVUdfSU5JVCwgIkdvdCBtc3ZyWyVkXSA9ICUwMngsIGNhciA9ICVkLlxuIiwKKwkJCXBvcnRfTm8ocG9ydCksIHN0YXR1cywgc3hfaW4oYnAsIENEMTg2eF9DQVIpKTsKKwlkcHJpbnRrKFNYX0RFQlVHX0lOSVQsICJzeF9wb3J0ID0gJXAsIHBvcnQgPSAlcFxuIiwgc3hfcG9ydCwgcG9ydCk7CisJaWYgKHN4X2NydHNjdHMocG9ydC0+cG9ydC50dHkpKSB7CisJCXJlc3VsdCAgPSBUSU9DTV9EVFIgfCBUSU9DTV9EU1IKKwkJCSAgfCAgICgoc3RhdHVzICYgTVNWUl9EVFIpID8gVElPQ01fUlRTIDogMCkKKwkJCSAgfCAgICgoc3RhdHVzICYgTVNWUl9DRCkgID8gVElPQ01fQ0FSIDogMCkKKwkJCSAgfCAgICgoc3RhdHVzICYgTVNWUl9DVFMpID8gVElPQ01fQ1RTIDogMCk7CiAJfSBlbHNlIHsKLQkJcmVzdWx0ICA9IC8qICAgKHN0YXR1cyAmIE1TVlJfUlRTKSA/ICovIFRJT0NNX1JUUyAvKiA6IDApICovCi0JCSAgICAgICAgICB8ICAgKChzdGF0dXMgJiBNU1ZSX0RUUikgPyBUSU9DTV9EVFIgOiAwKQotCQkgICAgICAgICAgfCAgICgoc3RhdHVzICYgTVNWUl9DRCkgID8gVElPQ01fQ0FSIDogMCkKLQkJICAgICAgICAgIHwvKiAoKHN0YXR1cyAmIE1TVlJfRFNSKSA/ICovIFRJT0NNX0RTUiAvKiA6IDApICovCi0JCSAgICAgICAgICB8ICAgKChzdGF0dXMgJiBNU1ZSX0NUUykgPyBUSU9DTV9DVFMgOiAwKTsKKwkJcmVzdWx0ICA9IFRJT0NNX1JUUyB8IFRJT0NNX0RTUgorCQkJICB8ICAgKChzdGF0dXMgJiBNU1ZSX0RUUikgPyBUSU9DTV9EVFIgOiAwKQorCQkJICB8ICAgKChzdGF0dXMgJiBNU1ZSX0NEKSAgPyBUSU9DTV9DQVIgOiAwKQorCQkJICB8ICAgKChzdGF0dXMgJiBNU1ZSX0NUUykgPyBUSU9DTV9DVFMgOiAwKTsKIAl9CiAKIAlmdW5jX2V4aXQoKTsKQEAgLTE4NTIsMjQgKzE3OTQsMTQgQEAKIAlicCA9IHBvcnRfQm9hcmQocG9ydCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotICAgLyoJaWYgKHNldCAmIFRJT0NNX1JUUykKLQkJcG9ydC0+TVNWUiB8PSBNU1ZSX1JUUzsgKi8KLSAgIC8qICAgaWYgKHNldCAmIFRJT0NNX0RUUikKLQkJcG9ydC0+TVNWUiB8PSBNU1ZSX0RUUjsgKi8KLQotCWlmIChTWF9DUlRTQ1RTKHBvcnQtPnR0eSkpIHsKKwlpZiAoc3hfY3J0c2N0cyhwb3J0LT5wb3J0LnR0eSkpIHsKIAkJaWYgKHNldCAmIFRJT0NNX1JUUykKIAkJCXBvcnQtPk1TVlIgfD0gTVNWUl9EVFI7CiAJfSBlbHNlIHsKIAkJaWYgKHNldCAmIFRJT0NNX0RUUikKIAkJCXBvcnQtPk1TVlIgfD0gTVNWUl9EVFI7CiAJfQotCi0gIC8qCWlmIChjbGVhciAmIFRJT0NNX1JUUykKLQkJcG9ydC0+TVNWUiAmPSB+TVNWUl9SVFM7ICovCi0gIC8qICAgIGlmIChjbGVhciAmIFRJT0NNX0RUUikKLQkJcG9ydC0+TVNWUiAmPSB+TVNWUl9EVFI7ICovCi0JaWYgKFNYX0NSVFNDVFMocG9ydC0+dHR5KSkgeworCWlmIChzeF9jcnRzY3RzKHBvcnQtPnBvcnQudHR5KSkgewogCQlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCiAJCQlwb3J0LT5NU1ZSICY9IH5NU1ZSX0RUUjsKIAl9IGVsc2UgewpAQCAtMTg4NiwxNCArMTgxOCwxNyBAQAogfQogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzeF9zZW5kX2JyZWFrKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqIHBvcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQorc3RhdGljIGludCBzeF9zZW5kX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBsZW5ndGgpCiB7CisJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0ID0gKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnAgPSBwb3J0X0JvYXJkKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlmdW5jX2VudGVyKCk7CisJaWYgKGxlbmd0aCA9PSAwIHx8IGxlbmd0aCA9PSAtMSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAlwb3J0LT5icmVha19sZW5ndGggPSBTUEVDSUFMSVhfVFBTIC8gSFogKiBsZW5ndGg7CiAJcG9ydC0+Q09SMiB8PSBDT1IyX0VUQzsKIAlwb3J0LT5JRVIgIHw9IElFUl9UWFJEWTsKQEAgLTE5MDIsNyArMTgzNyw3IEBACiAJc3hfb3V0KGJwLCBDRDE4NnhfQ09SMiwgcG9ydC0+Q09SMik7CiAJc3hfb3V0KGJwLCBDRDE4NnhfSUVSLCBwb3J0LT5JRVIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJc3hfd2FpdF9DQ1IoYnApOwogCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwogCXN4X291dChicCwgQ0QxODZ4X0NDUiwgQ0NSX0NPUkNIRzIpOwpAQCAtMTkxMCwxMSArMTg0NSwxMiBAQAogCXN4X3dhaXRfQ0NSKGJwKTsKIAogCWZ1bmNfZXhpdCgpOworCXJldHVybiAwOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgaW50IHN4X3NldF9zZXJpYWxfaW5mbyhzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKiBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqIG5ld2luZm8pCitzdGF0aWMgaW50IHN4X3NldF9zZXJpYWxfaW5mbyhzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqbmV3aW5mbykKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CiAJc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnAgPSBwb3J0X0JvYXJkKHBvcnQpOwpAQCAtMTkyOSwzOSArMTg2NSwzOSBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAotCWNoYW5nZV9zcGVlZCA9ICgocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgIT0KKwljaGFuZ2Vfc3BlZWQgPSAoKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgIT0KIAkJCSh0bXAuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpOwogCWNoYW5nZV9zcGVlZCB8PSAodG1wLmN1c3RvbV9kaXZpc29yICE9IHBvcnQtPmN1c3RvbV9kaXZpc29yKTsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewotCQlpZiAoKHRtcC5jbG9zZV9kZWxheSAhPSBwb3J0LT5jbG9zZV9kZWxheSkgfHwKLQkJICAgICh0bXAuY2xvc2luZ193YWl0ICE9IHBvcnQtPmNsb3Npbmdfd2FpdCkgfHwKKwkJaWYgKCh0bXAuY2xvc2VfZGVsYXkgIT0gcG9ydC0+cG9ydC5jbG9zZV9kZWxheSkgfHwKKwkJICAgICh0bXAuY2xvc2luZ193YWl0ICE9IHBvcnQtPnBvcnQuY2xvc2luZ193YWl0KSB8fAogCQkgICAgKCh0bXAuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9Ci0JCSAgICAgKHBvcnQtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpIHsKKwkJICAgICAocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKSB7CiAJCQlmdW5jX2V4aXQoKTsKIAkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KLQkJcG9ydC0+ZmxhZ3MgPSAoKHBvcnQtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8Ci0JCSAgICAgICAgICAgICAgICAgICh0bXAuZmxhZ3MgJiBBU1lOQ19VU1JfTUFTSykpOworCQlwb3J0LT5wb3J0LmZsYWdzID0gKChwb3J0LT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CisJCQkJCQkodG1wLmZsYWdzICYgQVNZTkNfVVNSX01BU0spKTsKIAkJcG9ydC0+Y3VzdG9tX2Rpdmlzb3IgPSB0bXAuY3VzdG9tX2Rpdmlzb3I7CiAJfSBlbHNlIHsKLQkJcG9ydC0+ZmxhZ3MgPSAoKHBvcnQtPmZsYWdzICYgfkFTWU5DX0ZMQUdTKSB8Ci0JCSAgICAgICAgICAgICAgICAgICh0bXAuZmxhZ3MgJiBBU1lOQ19GTEFHUykpOwotCQlwb3J0LT5jbG9zZV9kZWxheSA9IHRtcC5jbG9zZV9kZWxheTsKLQkJcG9ydC0+Y2xvc2luZ193YWl0ID0gdG1wLmNsb3Npbmdfd2FpdDsKKwkJcG9ydC0+cG9ydC5mbGFncyA9ICgocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAorCQkJCQkJKHRtcC5mbGFncyAmIEFTWU5DX0ZMQUdTKSk7CisJCXBvcnQtPnBvcnQuY2xvc2VfZGVsYXkgPSB0bXAuY2xvc2VfZGVsYXk7CisJCXBvcnQtPnBvcnQuY2xvc2luZ193YWl0ID0gdG1wLmNsb3Npbmdfd2FpdDsKIAkJcG9ydC0+Y3VzdG9tX2Rpdmlzb3IgPSB0bXAuY3VzdG9tX2Rpdmlzb3I7CiAJfQotCWlmIChjaGFuZ2Vfc3BlZWQpIHsKKwlpZiAoY2hhbmdlX3NwZWVkKQogCQlzeF9jaGFuZ2Vfc3BlZWQoYnAsIHBvcnQpOwotCX0KKwogCWZ1bmNfZXhpdCgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGludCBzeF9nZXRfc2VyaWFsX2luZm8oc3RydWN0IHNwZWNpYWxpeF9wb3J0ICogcG9ydCwKK3N0YXRpYyBpbnQgc3hfZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqcG9ydCwKIAkJCQkgICAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CkBAIC0xOTc1LDEwICsxOTExLDEwIEBACiAJdG1wLmxpbmUgPSBwb3J0IC0gc3hfcG9ydDsKIAl0bXAucG9ydCA9IGJwLT5iYXNlOwogCXRtcC5pcnEgID0gYnAtPmlycTsKLQl0bXAuZmxhZ3MgPSBwb3J0LT5mbGFnczsKKwl0bXAuZmxhZ3MgPSBwb3J0LT5wb3J0LmZsYWdzOwogCXRtcC5iYXVkX2Jhc2UgPSAoU1hfT1NDRlJFUSArIENEMTg2eF9UUEMvMikgLyBDRDE4NnhfVFBDOwotCXRtcC5jbG9zZV9kZWxheSA9IHBvcnQtPmNsb3NlX2RlbGF5ICogSFovMTAwOwotCXRtcC5jbG9zaW5nX3dhaXQgPSBwb3J0LT5jbG9zaW5nX3dhaXQgKiBIWi8xMDA7CisJdG1wLmNsb3NlX2RlbGF5ID0gcG9ydC0+cG9ydC5jbG9zZV9kZWxheSAqIEhaLzEwMDsKKwl0bXAuY2xvc2luZ193YWl0ID0gcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQgKiBIWi8xMDA7CiAJdG1wLmN1c3RvbV9kaXZpc29yID0gIHBvcnQtPmN1c3RvbV9kaXZpc29yOwogCXRtcC54bWl0X2ZpZm9fc2l6ZSA9IENEMTg2eF9ORklGTzsKIAl1bmxvY2tfa2VybmVsKCk7CkBAIC0xOTkyLDExICsxOTI4LDEwIEBACiB9CiAKIAotc3RhdGljIGludCBzeF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwLAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgc3hfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0ID0gKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JaW50IHJldHZhbDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAogCWZ1bmNfZW50ZXIoKTsKQEAgLTIwMDcsMzQgKzE5NDIsMTQgQEAKIAl9CiAKIAlzd2l0Y2ggKGNtZCkgewotCSBjYXNlIFRDU0JSSzoJLyogU1ZJRCB2ZXJzaW9uOiBub24temVybyBhcmcgLS0+IG5vIGJyZWFrICovCi0JCXJldHZhbCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKLQkJaWYgKHJldHZhbCkgewotCQkJZnVuY19leGl0KCk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCAwKTsKLQkJaWYgKCFhcmcpCi0JCQlzeF9zZW5kX2JyZWFrKHBvcnQsIEhaLzQpOwkvKiAxLzQgc2Vjb25kICovCi0JCXJldHVybiAwOwotCSBjYXNlIFRDU0JSS1A6CS8qIHN1cHBvcnQgZm9yIFBPU0lYIHRjc2VuZGJyZWFrKCkgKi8KLQkJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlmdW5jX2V4aXQoKTsKLQkJCXJldHVybiByZXR2YWw7Ci0JCX0KLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwotCQlzeF9zZW5kX2JyZWFrKHBvcnQsIGFyZyA/IGFyZyooSFovMTApIDogSFovNCk7CisJY2FzZSBUSU9DR1NFUklBTDoKIAkJZnVuY19leGl0KCk7Ci0JCXJldHVybiAwOwotCSBjYXNlIFRJT0NHU0VSSUFMOgotCQkgZnVuY19leGl0KCk7CiAJCXJldHVybiBzeF9nZXRfc2VyaWFsX2luZm8ocG9ydCwgYXJncCk7Ci0JIGNhc2UgVElPQ1NTRVJJQUw6Ci0JCSBmdW5jX2V4aXQoKTsKKwljYXNlIFRJT0NTU0VSSUFMOgorCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuIHN4X3NldF9zZXJpYWxfaW5mbyhwb3J0LCBhcmdwKTsKLQkgZGVmYXVsdDoKLQkJIGZ1bmNfZXhpdCgpOworCWRlZmF1bHQ6CisJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIAlmdW5jX2V4aXQoKTsKQEAgLTIwNDIsNyArMTk1Nyw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgc3hfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCitzdGF0aWMgdm9pZCBzeF90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwOwpAQCAtMjA1OCwxNSArMTk3MywxNiBAQAogCWJwID0gcG9ydF9Cb2FyZChwb3J0KTsKIAogCS8qIFVzZSBEVFIgaW5zdGVhZCBvZiBSVFMgISAqLwotCWlmIChTWF9DUlRTQ1RTICh0dHkpKQorCWlmIChzeF9jcnRzY3RzKHR0eSkpCiAJCXBvcnQtPk1TVlIgJj0gfk1TVlJfRFRSOwogCWVsc2UgewogCQkvKiBBdWNoISEhIEkgdGhpbmsgdGhlIHN5c3RlbSBzaG91bGRuJ3QgY2FsbCB0aGlzIHRoZW4uICovCiAJCS8qIE9yIG1heWJlIHdlJ3JlIHN1cHBvc2VkIChhbGxvd2VkPykgdG8gZG8gb3VyIHNpZGUgb2YgaHcKIAkJICAgaGFuZHNoYWtlIGFueXdheSwgZXZlbiB3aGVuIGhhcmR3YXJlIGhhbmRzaGFrZSBpcyBvZmYuCiAJCSAgIFdoZW4geW91IHNlZSB0aGlzIGluIHlvdXIgbG9ncywgcGxlYXNlIHJlcG9ydC4uLi4gKi8KLQkJcHJpbnRrIChLRVJOX0VSUiAic3glZDogTmVlZCB0byB0aHJvdHRsZSwgYnV0IGNhbid0IChoYXJkd2FyZSBocyBpcyBvZmYpXG4iLAotCSAgICAgICAgICAgICAgICAgcG9ydF9ObyAocG9ydCkpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgInN4JWQ6IE5lZWQgdG8gdGhyb3R0bGUsIGJ1dCBjYW4ndCAoaGFyZHdhcmUgaHMgaXMgb2ZmKVxuIiwKKwkJCQkJCQlwb3J0X05vKHBvcnQpKTsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CiAJc3hfb3V0KGJwLCBDRDE4NnhfQ0FSLCBwb3J0X05vKHBvcnQpKTsKQEAgLTIwODYsNyArMjAwMiw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgc3hfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3N0YXRpYyB2b2lkIHN4X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQgPSAoc3RydWN0IHNwZWNpYWxpeF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicDsKQEAgLTIxMDMsOSArMjAxOSw5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCS8qIFhYWFggVXNlIERUUiBJTlNURUFEPz8/PyAqLwotCWlmIChTWF9DUlRTQ1RTKHR0eSkpIHsKKwlpZiAoc3hfY3J0c2N0cyh0dHkpKQogCQlwb3J0LT5NU1ZSIHw9IE1TVlJfRFRSOwotCX0gLyogRWxzZSBjbGF1c2U6IHNlZSByZW1hcmsgaW4gInN4X3Rocm90dGxlIi4uLiAqLworCS8qIEVsc2UgY2xhdXNlOiBzZWUgcmVtYXJrIGluICJzeF90aHJvdHRsZSIuLi4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAlzeF9vdXQoYnAsIENEMTg2eF9DQVIsIHBvcnRfTm8ocG9ydCkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CkBAIC0yMTI3LDcgKzIwNDMsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHN4X3N0b3Aoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCitzdGF0aWMgdm9pZCBzeF9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0ID0gKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAqYnA7CkBAIC0yMTU0LDcgKzIwNzAsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHN4X3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQorc3RhdGljIHZvaWQgc3hfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQgPSAoc3RydWN0IHNwZWNpYWxpeF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicDsKQEAgLTIxODIsNyArMjA5OCw3IEBACiAJZnVuY19leGl0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHN4X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3N0YXRpYyB2b2lkIHN4X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwOwpAQCAtMjE5OSwzNSArMjExNSwzMyBAQAogCiAJc3hfc2h1dGRvd25fcG9ydChicCwgcG9ydCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQlicC0+Y291bnQgLT0gcG9ydC0+Y291bnQ7CisJYnAtPmNvdW50IC09IHBvcnQtPnBvcnQuY291bnQ7CiAJaWYgKGJwLT5jb3VudCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzeCVkOiBzeF9oYW5ndXA6IGJhZCBib2FyZCBjb3VudDogJWQgcG9ydDogJWRcbiIsCi0JCQlib2FyZF9ObyhicCksIGJwLT5jb3VudCwgdHR5LT5pbmRleCk7CisJCXByaW50ayhLRVJOX0VSUgorCQkJInN4JWQ6IHN4X2hhbmd1cDogYmFkIGJvYXJkIGNvdW50OiAlZCBwb3J0OiAlZFxuIiwKKwkJCQkJYm9hcmRfTm8oYnApLCBicC0+Y291bnQsIHR0eS0+aW5kZXgpOwogCQlicC0+Y291bnQgPSAwOwogCX0KLQlwb3J0LT5jb3VudCA9IDA7Ci0JcG9ydC0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JcG9ydC0+dHR5ID0gTlVMTDsKKwlwb3J0LT5wb3J0LmNvdW50ID0gMDsKKwlwb3J0LT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQpOwogCiAJZnVuY19leGl0KCk7CiB9CiAKIAotc3RhdGljIHZvaWQgc3hfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBrdGVybWlvcyAqIG9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgc3hfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3Qgc3BlY2lhbGl4X3BvcnQgKnBvcnQgPSAoc3RydWN0IHNwZWNpYWxpeF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgICogYnA7CisJc3RydWN0IHNwZWNpYWxpeF9ib2FyZCAgKmJwOwogCiAJaWYgKHN4X3BhcmFub2lhX2NoZWNrKHBvcnQsIHR0eS0+bmFtZSwgInN4X3NldF90ZXJtaW9zIikpCiAJCXJldHVybjsKIAotCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiYKLQkgICAgdHR5LT50ZXJtaW9zLT5jX2lmbGFnID09IG9sZF90ZXJtaW9zLT5jX2lmbGFnKQotCQlyZXR1cm47Ci0KIAlicCA9IHBvcnRfQm9hcmQocG9ydCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAlzeF9jaGFuZ2Vfc3BlZWQocG9ydF9Cb2FyZChwb3J0KSwgcG9ydCk7CkBAIC0yMjU4LDYgKzIxNzIsNyBAQAogCS5oYW5ndXAgPSBzeF9oYW5ndXAsCiAJLnRpb2NtZ2V0ID0gc3hfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0gc3hfdGlvY21zZXQsCisJLmJyZWFrX2N0bCA9IHN4X3NlbmRfYnJlYWssCiB9OwogCiBzdGF0aWMgaW50IHN4X2luaXRfZHJpdmVycyh2b2lkKQpAQCAtMjI4NCwyMyArMjE5OSwyMyBAQAogCQlCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CiAJc3BlY2lhbGl4X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKIAlzcGVjaWFsaXhfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSA5NjAwOwotCXNwZWNpYWxpeF9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKKwlzcGVjaWFsaXhfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfAorCQkJCQkJVFRZX0RSSVZFUl9IQVJEV0FSRV9CUkVBSzsKIAl0dHlfc2V0X29wZXJhdGlvbnMoc3BlY2lhbGl4X2RyaXZlciwgJnN4X29wcyk7CiAKLQlpZiAoKGVycm9yID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihzcGVjaWFsaXhfZHJpdmVyKSkpIHsKKwllcnJvciA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoc3BlY2lhbGl4X2RyaXZlcik7CisJaWYgKGVycm9yKSB7CiAJCXB1dF90dHlfZHJpdmVyKHNwZWNpYWxpeF9kcml2ZXIpOwotCQlwcmludGsoS0VSTl9FUlIgInN4OiBDb3VsZG4ndCByZWdpc3RlciBzcGVjaWFsaXggSU84KyBkcml2ZXIsIGVycm9yID0gJWRcbiIsCi0JCSAgICAgICBlcnJvcik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICJzeDogQ291bGRuJ3QgcmVnaXN0ZXIgc3BlY2lhbGl4IElPOCsgZHJpdmVyLCBlcnJvciA9ICVkXG4iLAorCQkJCQkJCQllcnJvcik7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm4gMTsKIAl9CiAJbWVtc2V0KHN4X3BvcnQsIDAsIHNpemVvZihzeF9wb3J0KSk7CiAJZm9yIChpID0gMDsgaSA8IFNYX05QT1JUICogU1hfTkJPQVJEOyBpKyspIHsKIAkJc3hfcG9ydFtpXS5tYWdpYyA9IFNQRUNJQUxJWF9NQUdJQzsKLQkJc3hfcG9ydFtpXS5jbG9zZV9kZWxheSA9IDUwICogSFovMTAwOwotCQlzeF9wb3J0W2ldLmNsb3Npbmdfd2FpdCA9IDMwMDAgKiBIWi8xMDA7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN4X3BvcnRbaV0ub3Blbl93YWl0KTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmc3hfcG9ydFtpXS5jbG9zZV93YWl0KTsKKwkJdHR5X3BvcnRfaW5pdCgmc3hfcG9ydFtpXS5wb3J0KTsKIAkJc3Bpbl9sb2NrX2luaXQoJnN4X3BvcnRbaV0ubG9jayk7CiAJfQogCkBAIC0yMzI5LDExICsyMjQ0LDExIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJzeDogU3BlY2lhbGl4IElPOCsgZHJpdmVyIHYiIFZFUlNJT04gIiwgKGMpIFIuRS5Xb2xmZiAxOTk3LzE5OTguXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPICJzeDogZGVyaXZlZCBmcm9tIHdvcmsgKGMpIEQuR29yb2RjaGFuaW4gMTk5NC0xOTk2LlxuIik7Ci0jaWZkZWYgQ09ORklHX1NQRUNJQUxJWF9SVFNDVFMKLQlwcmludGsgKEtFUk5fSU5GTyAic3g6IERUUi9SVFMgcGluIGlzIGFsd2F5cyBSVFMuXG4iKTsKLSNlbHNlCi0JcHJpbnRrIChLRVJOX0lORk8gInN4OiBEVFIvUlRTIHBpbiBpcyBSVFMgd2hlbiBDUlRTQ1RTIGlzIG9uLlxuIik7Ci0jZW5kaWYKKwlpZiAoc3hfcnRzY3RzKQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkic3g6IERUUi9SVFMgcGluIGlzIFJUUyB3aGVuIENSVFNDVFMgaXMgb24uXG4iKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0lORk8gInN4OiBEVFIvUlRTIHBpbiBpcyBhbHdheXMgUlRTLlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1hfTkJPQVJEOyBpKyspCiAJCXNwaW5fbG9ja19pbml0KCZzeF9ib2FyZFtpXS5sb2NrKTsKQEAgLTIzNTEsMjcgKzIyNjYsMjcgQEAKIAl7CiAJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKIAotCQlpPTA7CisJCWkgPSAwOwogCQl3aGlsZSAoaSA8IFNYX05CT0FSRCkgewogCQkJaWYgKHN4X2JvYXJkW2ldLmZsYWdzICYgU1hfQk9BUkRfUFJFU0VOVCkgewogCQkJCWkrKzsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCXBkZXYgPSBwY2lfZ2V0X2RldmljZSAoUENJX1ZFTkRPUl9JRF9TUEVDSUFMSVgsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfREVWSUNFX0lEX1NQRUNJQUxJWF9JTzgsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBwZGV2KTsKLQkJCWlmICghcGRldikgYnJlYWs7CisJCQlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TUEVDSUFMSVgsCisJCQkJCVBDSV9ERVZJQ0VfSURfU1BFQ0lBTElYX0lPOCwgcGRldik7CisJCQlpZiAoIXBkZXYpCisJCQkJYnJlYWs7CiAKIAkJCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKIAkJCQljb250aW51ZTsKIAogCQkJc3hfYm9hcmRbaV0uaXJxID0gcGRldi0+aXJxOwogCi0JCQlzeF9ib2FyZFtpXS5iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAyKTsKKwkJCXN4X2JvYXJkW2ldLmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CiAKIAkJCXN4X2JvYXJkW2ldLmZsYWdzIHw9IFNYX0JPQVJEX0lTX1BDSTsKIAkJCWlmICghc3hfcHJvYmUoJnN4X2JvYXJkW2ldKSkKLQkJCQlmb3VuZCArKzsKKwkJCQlmb3VuZCsrOwogCQl9CiAJCS8qIE1heSBleGl0IHBjaV9nZXQgc2VxdWVuY2UgZWFybHkgd2l0aCBsb3RzIG9mIGJvYXJkcyAqLwogCQlpZiAocGRldiAhPSBOVUxMKQpAQCAtMjM5MSwxNiArMjMwNiwxMyBAQAogfQogCiBzdGF0aWMgaW50IGlvYmFzZVtTWF9OQk9BUkRdICA9IHswLH07Ci0KLXN0YXRpYyBpbnQgaXJxIFtTWF9OQk9BUkRdID0gezAsfTsKK3N0YXRpYyBpbnQgaXJxW1NYX05CT0FSRF0gPSB7MCx9OwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW9iYXNlLCBpbnQsIE5VTEwsIDApOwogbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwKTsKIG1vZHVsZV9wYXJhbShzeF9kZWJ1ZywgaW50LCAwKTsKK21vZHVsZV9wYXJhbShzeF9ydHNjdHMsIGludCwgMCk7CiBtb2R1bGVfcGFyYW0oc3hfcnhmaWZvLCBpbnQsIDApOwotI2lmZGVmIFNQRUNJQUxJWF9USU1FUgotbW9kdWxlX3BhcmFtKHN4X3BvbGwsIGludCwgMCk7Ci0jZW5kaWYKIAogLyoKICAqIFlvdSBjYW4gc2V0dXAgdXAgdG8gNCBib2FyZHMuCkBAIC0yNDE4LDEwICsyMzMwLDEwIEBACiAJZnVuY19lbnRlcigpOwogCiAJaWYgKGlvYmFzZVswXSB8fCBpb2Jhc2VbMV0gfHwgaW9iYXNlWzJdIHx8IGlvYmFzZVszXSkgewotCQlmb3IoaSA9IDA7IGkgPCBTWF9OQk9BUkQ7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgU1hfTkJPQVJEOyBpKyspIHsKIAkJCXN4X2JvYXJkW2ldLmJhc2UgPSBpb2Jhc2VbaV07CiAJCQlzeF9ib2FyZFtpXS5pcnEgPSBpcnFbaV07Ci0JCQlzeF9ib2FyZFtpXS5jb3VudD0gMDsKKwkJCXN4X2JvYXJkW2ldLmNvdW50ID0gMDsKIAkJfQogCX0KIApAQCAtMjQ0MCwxMCArMjM1Miw2IEBACiAJZm9yIChpID0gMDsgaSA8IFNYX05CT0FSRDsgaSsrKQogCQlpZiAoc3hfYm9hcmRbaV0uZmxhZ3MgJiBTWF9CT0FSRF9QUkVTRU5UKQogCQkJc3hfcmVsZWFzZV9pb19yYW5nZSgmc3hfYm9hcmRbaV0pOwotI2lmZGVmIFNQRUNJQUxJWF9USU1FUgotCWRlbF90aW1lcl9zeW5jKCZtaXNzZWRfaXJxX3RpbWVyKTsKLSNlbmRpZgotCiAJZnVuY19leGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zcGVjaWFsaXhfaW84LmggYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4X2lvOC5oCmluZGV4IDNmMmY4NWIuLmM2MzAwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zcGVjaWFsaXhfaW84LmgKKysrIGIvZHJpdmVycy9jaGFyL3NwZWNpYWxpeF9pbzguaApAQCAtMTA3LDIzICsxMDcsMTcgQEAKIAogc3RydWN0IHNwZWNpYWxpeF9wb3J0IHsKIAlpbnQJCQltYWdpYzsKKwlzdHJ1Y3QgdHR5X3BvcnQJCXBvcnQ7CiAJaW50CQkJYmF1ZF9iYXNlOwogCWludAkJCWZsYWdzOwotCXN0cnVjdCB0dHlfc3RydWN0IAkqIHR0eTsKLQlpbnQJCQljb3VudDsKLQlpbnQJCQlibG9ja2VkX29wZW47CiAJaW50CQkJdGltZW91dDsKLQlpbnQJCQljbG9zZV9kZWxheTsKIAl1bnNpZ25lZCBjaGFyIAkJKiB4bWl0X2J1ZjsKIAlpbnQJCQljdXN0b21fZGl2aXNvcjsKIAlpbnQJCQl4bWl0X2hlYWQ7CiAJaW50CQkJeG1pdF90YWlsOwogCWludAkJCXhtaXRfY250OwotCXdhaXRfcXVldWVfaGVhZF90CW9wZW5fd2FpdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OwogCXNob3J0CQkJd2FrZXVwX2NoYXJzOwogCXNob3J0CQkJYnJlYWtfbGVuZ3RoOwotCXVuc2lnbmVkIHNob3J0CQljbG9zaW5nX3dhaXQ7CiAJdW5zaWduZWQgY2hhcgkJbWFya19tYXNrOwogCXVuc2lnbmVkIGNoYXIJCUlFUjsKIAl1bnNpZ25lZCBjaGFyCQlNU1ZSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwppbmRleCBkMTdiZTEwLi5iOTc2MjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwpAQCAtNjEzLDE3ICs2MTMsMTcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgb2xkc2lncyA9IHBvcnRwLT5zaWdzOwogCi0JaWYgKCFwb3J0cC0+dHR5KQorCWlmICghcG9ydHAtPnBvcnQudHR5KQogCQlyZXR1cm47CiAKIAlwb3J0cC0+c2lncyA9IHN0bF9nZXRzaWduYWxzKHBvcnRwKTsKIAogCWlmICgocG9ydHAtPnNpZ3MgJiBUSU9DTV9DRCkgJiYgKChvbGRzaWdzICYgVElPQ01fQ0QpID09IDApKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5wb3J0Lm9wZW5fd2FpdCk7CiAKIAlpZiAoKG9sZHNpZ3MgJiBUSU9DTV9DRCkgJiYgKChwb3J0cC0+c2lncyAmIFRJT0NNX0NEKSA9PSAwKSkKLQkJaWYgKHBvcnRwLT5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKQotCQkJdHR5X2hhbmd1cChwb3J0cC0+dHR5KTsKKwkJaWYgKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpCisJCQl0dHlfaGFuZ3VwKHBvcnRwLT5wb3J0LnR0eSk7CiB9CiAKIC8qCkBAIC03MzQsMTEgKzczNCwxMSBAQAogICoJT24gdGhlIGZpcnN0IG9wZW4gb2YgdGhlIGRldmljZSBzZXR1cCB0aGUgcG9ydCBoYXJkd2FyZSwgYW5kCiAgKglpbml0aWFsaXplIHRoZSBwZXIgcG9ydCBkYXRhIHN0cnVjdHVyZS4KICAqLwotCXBvcnRwLT50dHkgPSB0dHk7CisJcG9ydHAtPnBvcnQudHR5ID0gdHR5OwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0cDsKLQlwb3J0cC0+cmVmY291bnQrKzsKKwlwb3J0cC0+cG9ydC5jb3VudCsrOwogCi0JaWYgKChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgPT0gMCkgeworCWlmICgocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgPT0gMCkgewogCQlpZiAoIXBvcnRwLT50eC5idWYpIHsKIAkJCXBvcnRwLT50eC5idWYgPSBrbWFsbG9jKFNUTF9UWEJVRlNJWkUsIEdGUF9LRVJORUwpOwogCQkJaWYgKCFwb3J0cC0+dHguYnVmKQpAQCAtNzUyLDcgKzc1Miw3IEBACiAJCXN0bF9lbmFibGVyeHR4KHBvcnRwLCAxLCAxKTsKIAkJc3RsX3N0YXJ0cnh0eChwb3J0cCwgMSwgMCk7CiAJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKLQkJcG9ydHAtPmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOworCQlwb3J0cC0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAl9CiAKIC8qCkBAIC03NjEsOSArNzYxLDkgQEAKICAqCVRoZSBzbGVlcCBoZXJlIGRvZXMgbm90IG5lZWQgaW50ZXJydXB0IHByb3RlY3Rpb24gc2luY2UgdGhlIHdha2V1cAogICoJZm9yIGl0IGlzIGRvbmUgd2l0aCB0aGUgc2FtZSBjb250ZXh0LgogICovCi0JaWYgKHBvcnRwLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpIHsKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcG9ydHAtPmNsb3NlX3dhaXQpOwotCQlpZiAocG9ydHAtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwlpZiAocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBvcnRwLT5wb3J0LmNsb3NlX3dhaXQpOworCQlpZiAocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQpAQCAtNzc3LDcgKzc3Nyw3IEBACiAJCWlmICgocmMgPSBzdGxfd2FpdGNhcnJpZXIocG9ydHAsIGZpbHApKSAhPSAwKQogCQkJcmV0dXJuIHJjOwogCi0JcG9ydHAtPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CisJcG9ydHAtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAogCXJldHVybiAwOwogfQpAQCAtODAxLDI1ICs4MDEsMjUgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdGFsbGlvbl9sb2NrLCBmbGFncyk7CiAKLQlpZiAocG9ydHAtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKKwlpZiAocG9ydHAtPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKQogCQlkb2Nsb2NhbCsrOwogCiAJcG9ydHAtPm9wZW53YWl0Y250Kys7CiAJaWYgKCEgdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJcG9ydHAtPnJlZmNvdW50LS07CisJCXBvcnRwLT5wb3J0LmNvdW50LS07CiAKIAlmb3IgKDs7KSB7CiAJCS8qIFRha2VzIGJyZF9sb2NrIGludGVybmFsbHkgKi8KIAkJc3RsX3NldHNpZ25hbHMocG9ydHAsIDEsIDEpOwogCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAotCQkgICAgKChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgPT0gMCkpIHsKLQkJCWlmIChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQorCQkgICAgKChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSA9PSAwKSkgeworCQkJaWYgKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKIAkJCQlyYyA9IC1FQlVTWTsKIAkJCWVsc2UKIAkJCQlyYyA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmICgoKHBvcnRwLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpID09IDApICYmCisJCWlmICgoKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykgPT0gMCkgJiYKIAkJICAgIChkb2Nsb2NhbCB8fCAocG9ydHAtPnNpZ3MgJiBUSU9DTV9DRCkpKQogCQkJYnJlYWs7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtODI3LDExICs4MjcsMTEgQEAKIAkJCWJyZWFrOwogCQl9CiAJCS8qIEZJWE1FICovCi0JCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBvcnRwLT5vcGVuX3dhaXQpOworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwb3J0cC0+cG9ydC5vcGVuX3dhaXQpOwogCX0KIAogCWlmICghIHR0eV9odW5nX3VwX3AoZmlscCkpCi0JCXBvcnRwLT5yZWZjb3VudCsrOworCQlwb3J0cC0+cG9ydC5jb3VudCsrOwogCXBvcnRwLT5vcGVud2FpdGNudC0tOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YWxsaW9uX2xvY2ssIGZsYWdzKTsKIApAQCAtOTA0LDE1ICs5MDQsMTUgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhbGxpb25fbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQotCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAocG9ydHAtPnJlZmNvdW50ICE9IDEpKQotCQlwb3J0cC0+cmVmY291bnQgPSAxOwotCWlmIChwb3J0cC0+cmVmY291bnQtLSA+IDEpIHsKKwlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKHBvcnRwLT5wb3J0LmNvdW50ICE9IDEpKQorCQlwb3J0cC0+cG9ydC5jb3VudCA9IDE7CisJaWYgKHBvcnRwLT5wb3J0LmNvdW50LS0gPiAxKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YWxsaW9uX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAotCXBvcnRwLT5yZWZjb3VudCA9IDA7Ci0JcG9ydHAtPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CisJcG9ydHAtPnBvcnQuY291bnQgPSAwOworCXBvcnRwLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CiAKIC8qCiAgKglNYXkgd2FudCB0byB3YWl0IGZvciBhbnkgZGF0YSB0byBkcmFpbiBiZWZvcmUgY2xvc2luZy4gVGhlIEJVU1kKQEAgLTkzMCw3ICs5MzAsNyBAQAogCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhbGxpb25fbG9jaywgZmxhZ3MpOwotCXBvcnRwLT5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CisJcG9ydHAtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YWxsaW9uX2xvY2ssIGZsYWdzKTsKIAogCXN0bF9kaXNhYmxlaW50cnMocG9ydHApOwpAQCAtOTQ5LDE2ICs5NDksMTYgQEAKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JcG9ydHAtPnR0eSA9IE5VTEw7CisJcG9ydHAtPnBvcnQudHR5ID0gTlVMTDsKIAogCWlmIChwb3J0cC0+b3BlbndhaXRjbnQpIHsKIAkJaWYgKHBvcnRwLT5jbG9zZV9kZWxheSkKIAkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MocG9ydHAtPmNsb3NlX2RlbGF5KSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydHAtPm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydHAtPnBvcnQub3Blbl93YWl0KTsKIAl9CiAKLQlwb3J0cC0+ZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEFTWU5DX0NMT1NJTkcpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydHAtPmNsb3NlX3dhaXQpOworCXBvcnRwLT5wb3J0LmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRXxBU1lOQ19DTE9TSU5HKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5wb3J0LmNsb3NlX3dhaXQpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bF9wdXRjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpCitzdGF0aWMgaW50IHN0bF9wdXRjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpCiB7CiAJc3RydWN0IHN0bHBvcnQJKnBvcnRwOwogCXVuc2lnbmVkIGludAlsZW47CkBAIC0xMDM0LDEyICsxMDM0LDEyIEBACiAJcHJfZGVidWcoInN0bF9wdXRjaGFyKHR0eT0lcCxjaD0leClcbiIsIHR0eSwgY2gpOwogCiAJaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocG9ydHAtPnR4LmJ1ZiA9PSBOVUxMKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCiAJaGVhZCA9IHBvcnRwLT50eC5oZWFkOwogCXRhaWwgPSBwb3J0cC0+dHgudGFpbDsKQEAgLTEwNTMsNiArMTA1Myw3IEBACiAJCQloZWFkID0gcG9ydHAtPnR4LmJ1ZjsKIAl9CQogCXBvcnRwLT50eC5oZWFkID0gaGVhZDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTE1Myw3ICsxMTU0LDcgQEAKIAltZW1zZXQoJnNpbywgMCwgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSk7CiAJc2lvLmxpbmUgPSBwb3J0cC0+cG9ydG5yOwogCXNpby5wb3J0ID0gcG9ydHAtPmlvYWRkcjsKLQlzaW8uZmxhZ3MgPSBwb3J0cC0+ZmxhZ3M7CisJc2lvLmZsYWdzID0gcG9ydHAtPnBvcnQuZmxhZ3M7CiAJc2lvLmJhdWRfYmFzZSA9IHBvcnRwLT5iYXVkX2Jhc2U7CiAJc2lvLmNsb3NlX2RlbGF5ID0gcG9ydHAtPmNsb3NlX2RlbGF5OwogCXNpby5jbG9zaW5nX3dhaXQgPSBwb3J0cC0+Y2xvc2luZ193YWl0OwpAQCAtMTE5NCwxNyArMTE5NSwxNyBAQAogCQlpZiAoKHNpby5iYXVkX2Jhc2UgIT0gcG9ydHAtPmJhdWRfYmFzZSkgfHwKIAkJICAgIChzaW8uY2xvc2VfZGVsYXkgIT0gcG9ydHAtPmNsb3NlX2RlbGF5KSB8fAogCQkgICAgKChzaW8uZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9Ci0JCSAgICAocG9ydHAtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpCisJCSAgICAocG9ydHAtPnBvcnQuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spKSkKIAkJCXJldHVybiAtRVBFUk07CiAJfSAKIAotCXBvcnRwLT5mbGFncyA9IChwb3J0cC0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKKwlwb3J0cC0+cG9ydC5mbGFncyA9IChwb3J0cC0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgfAogCQkoc2lvLmZsYWdzICYgQVNZTkNfVVNSX01BU0spOwogCXBvcnRwLT5iYXVkX2Jhc2UgPSBzaW8uYmF1ZF9iYXNlOwogCXBvcnRwLT5jbG9zZV9kZWxheSA9IHNpby5jbG9zZV9kZWxheTsKIAlwb3J0cC0+Y2xvc2luZ193YWl0ID0gc2lvLmNsb3Npbmdfd2FpdDsKIAlwb3J0cC0+Y3VzdG9tX2Rpdmlzb3IgPSBzaW8uY3VzdG9tX2Rpdmlzb3I7Ci0Jc3RsX3NldHBvcnQocG9ydHAsIHBvcnRwLT50dHktPnRlcm1pb3MpOworCXN0bF9zZXRwb3J0KHBvcnRwLCBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzUzLDcgKzEzNTQsNyBAQAogCQlzdGxfc3RhcnQodHR5KTsKIAl9CiAJaWYgKCgob2xkLT5jX2NmbGFnICYgQ0xPQ0FMKSA9PSAwKSAmJiAodGlvc3AtPmNfY2ZsYWcgJiBDTE9DQUwpKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5wb3J0Lm9wZW5fd2FpdCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0MzgsNyArMTQzOSw3IEBACiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAotCXBvcnRwLT5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CisJcG9ydHAtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCXN0bF9kaXNhYmxlaW50cnMocG9ydHApOwogCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkKIAkJc3RsX3NldHNpZ25hbHMocG9ydHAsIDAsIDApOwpAQCAtMTQ1MiwyNyArMTQ1MywyOCBAQAogCQlwb3J0cC0+dHguaGVhZCA9IE5VTEw7CiAJCXBvcnRwLT50eC50YWlsID0gTlVMTDsKIAl9Ci0JcG9ydHAtPnR0eSA9IE5VTEw7Ci0JcG9ydHAtPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwotCXBvcnRwLT5yZWZjb3VudCA9IDA7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+b3Blbl93YWl0KTsKKwlwb3J0cC0+cG9ydC50dHkgPSBOVUxMOworCXBvcnRwLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCXBvcnRwLT5wb3J0LmNvdW50ID0gMDsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5wb3J0Lm9wZW5fd2FpdCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgc3RsX2JyZWFrY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgc3RsX2JyZWFrY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAKIAlwcl9kZWJ1Zygic3RsX2JyZWFrY3RsKHR0eT0lcCxzdGF0ZT0lZClcbiIsIHR0eSwgc3RhdGUpOwogCiAJaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0bF9zZW5kYnJlYWsocG9ydHAsICgoc3RhdGUgPT0gLTEpID8gMSA6IDIpKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTgxNCw4ICsxODE2LDggQEAKIAkJcG9ydHAtPmJhdWRfYmFzZSA9IFNUTF9CQVVEQkFTRTsKIAkJcG9ydHAtPmNsb3NlX2RlbGF5ID0gU1RMX0NMT1NFREVMQVk7CiAJCXBvcnRwLT5jbG9zaW5nX3dhaXQgPSAzMCAqIEhaOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0cC0+b3Blbl93YWl0KTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydHAtPmNsb3NlX3dhaXQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0cC0+cG9ydC5vcGVuX3dhaXQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0cC0+cG9ydC5jbG9zZV93YWl0KTsKIAkJcG9ydHAtPnN0YXRzLmJyZCA9IHBvcnRwLT5icmRucjsKIAkJcG9ydHAtPnN0YXRzLnBhbmVsID0gcG9ydHAtPnBhbmVsbnI7CiAJCXBvcnRwLT5zdGF0cy5wb3J0ID0gcG9ydHAtPnBvcnRucjsKQEAgLTE4NDAsOCArMTg0Miw4IEBACiAJCQlwb3J0cCA9IHBhbmVscC0+cG9ydHNba107CiAJCQlpZiAocG9ydHAgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKLQkJCWlmIChwb3J0cC0+dHR5ICE9IE5VTEwpCi0JCQkJc3RsX2hhbmd1cChwb3J0cC0+dHR5KTsKKwkJCWlmIChwb3J0cC0+cG9ydC50dHkgIT0gTlVMTCkKKwkJCQlzdGxfaGFuZ3VwKHBvcnRwLT5wb3J0LnR0eSk7CiAJCQlrZnJlZShwb3J0cC0+dHguYnVmKTsKIAkJCWtmcmVlKHBvcnRwKTsKIAkJfQpAQCAtMjUxMyw3ICsyNTE1LDcgQEAKIAl9CiAKIAlwb3J0cC0+c3RhdHMuc3RhdGUgPSBwb3J0cC0+aXN0YXRlOwotCXBvcnRwLT5zdGF0cy5mbGFncyA9IHBvcnRwLT5mbGFnczsKKwlwb3J0cC0+c3RhdHMuZmxhZ3MgPSBwb3J0cC0+cG9ydC5mbGFnczsKIAlwb3J0cC0+c3RhdHMuaHdpZCA9IHBvcnRwLT5od2lkOwogCiAJcG9ydHAtPnN0YXRzLnR0eXN0YXRlID0gMDsKQEAgLTI1MjQsMTYgKzI1MjYsMTYgQEAKIAlwb3J0cC0+c3RhdHMucnhidWZmZXJlZCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhbGxpb25fbG9jaywgZmxhZ3MpOwotCWlmIChwb3J0cC0+dHR5ICE9IE5VTEwpCi0JCWlmIChwb3J0cC0+dHR5LT5kcml2ZXJfZGF0YSA9PSBwb3J0cCkgewotCQkJcG9ydHAtPnN0YXRzLnR0eXN0YXRlID0gcG9ydHAtPnR0eS0+ZmxhZ3M7CisJaWYgKHBvcnRwLT5wb3J0LnR0eSAhPSBOVUxMKQorCQlpZiAocG9ydHAtPnBvcnQudHR5LT5kcml2ZXJfZGF0YSA9PSBwb3J0cCkgeworCQkJcG9ydHAtPnN0YXRzLnR0eXN0YXRlID0gcG9ydHAtPnBvcnQudHR5LT5mbGFnczsKIAkJCS8qIE5vIGxvbmdlciBhdmFpbGFibGUgYXMgYSBzdGF0aXN0aWMgKi8KLQkJCXBvcnRwLT5zdGF0cy5yeGJ1ZmZlcmVkID0gMTsgLypwb3J0cC0+dHR5LT5mbGlwLmNvdW50OyAqLwotCQkJaWYgKHBvcnRwLT50dHktPnRlcm1pb3MgIT0gTlVMTCkgewotCQkJCXBvcnRwLT5zdGF0cy5jZmxhZ3MgPSBwb3J0cC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCQkJCXBvcnRwLT5zdGF0cy5pZmxhZ3MgPSBwb3J0cC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOwotCQkJCXBvcnRwLT5zdGF0cy5vZmxhZ3MgPSBwb3J0cC0+dHR5LT50ZXJtaW9zLT5jX29mbGFnOwotCQkJCXBvcnRwLT5zdGF0cy5sZmxhZ3MgPSBwb3J0cC0+dHR5LT50ZXJtaW9zLT5jX2xmbGFnOworCQkJcG9ydHAtPnN0YXRzLnJ4YnVmZmVyZWQgPSAxOyAvKnBvcnRwLT5wb3J0LnR0eS0+ZmxpcC5jb3VudDsgKi8KKwkJCWlmIChwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MgIT0gTlVMTCkgeworCQkJCXBvcnRwLT5zdGF0cy5jZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJCQkJcG9ydHAtPnN0YXRzLmlmbGFncyA9IHBvcnRwLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwkJCQlwb3J0cC0+c3RhdHMub2ZsYWdzID0gcG9ydHAtPnBvcnQudHR5LT50ZXJtaW9zLT5jX29mbGFnOworCQkJCXBvcnRwLT5zdGF0cy5sZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfbGZsYWc7CiAJCQl9CiAJCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGFsbGlvbl9sb2NrLCBmbGFncyk7CkBAIC0yOTM5LDE1ICsyOTQxLDE1IEBACiAJfQogCWJhdWRyYXRlID0gc3RsX2JhdWRyYXRlc1tiYXVkcmF0ZV07CiAJaWYgKCh0aW9zcC0+Y19jZmxhZyAmIENCQVVEKSA9PSBCMzg0MDApIHsKLQkJaWYgKChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0hJKQorCQlpZiAoKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKIAkJCWJhdWRyYXRlID0gNTc2MDA7Ci0JCWVsc2UgaWYgKChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKKwkJZWxzZSBpZiAoKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCiAJCQliYXVkcmF0ZSA9IDExNTIwMDsKLQkJZWxzZSBpZiAoKHBvcnRwLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQorCQllbHNlIGlmICgocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1NISSkKIAkJCWJhdWRyYXRlID0gMjMwNDAwOwotCQllbHNlIGlmICgocG9ydHAtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9XQVJQKQorCQllbHNlIGlmICgocG9ydHAtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1dBUlApCiAJCQliYXVkcmF0ZSA9IDQ2MDgwMDsKLQkJZWxzZSBpZiAoKHBvcnRwLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfQ1VTVCkKKwkJZWxzZSBpZiAoKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9DVVNUKQogCQkJYmF1ZHJhdGUgPSAocG9ydHAtPmJhdWRfYmFzZSAvIHBvcnRwLT5jdXN0b21fZGl2aXNvcik7CiAJfQogCWlmIChiYXVkcmF0ZSA+IFNUTF9DRDE0MDBNQVhCQVVEKQpAQCAtMjk2OSw5ICsyOTcxLDkgQEAKIAkJbWNvcjEgfD0gTUNPUjFfRENEOwogCQltY29yMiB8PSBNQ09SMl9EQ0Q7CiAJCXNyZXJvbiB8PSBTUkVSX01PREVNOwotCQlwb3J0cC0+ZmxhZ3MgfD0gQVNZTkNfQ0hFQ0tfQ0Q7CisJCXBvcnRwLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOwogCX0gZWxzZQotCQlwb3J0cC0+ZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOworCQlwb3J0cC0+cG9ydC5mbGFncyAmPSB+QVNZTkNfQ0hFQ0tfQ0Q7CiAKIC8qCiAgKglTZXR1cCBjZDE0MDAgZW5oYW5jZWQgbW9kZXMgaWYgd2UgY2FuLiBJbiBwYXJ0aWN1bGFyIHdlIHdhbnQgdG8KQEAgLTMyNDIsNyArMzI0NCw3IEBACiAKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXR0eSA9IHBvcnRwLT50dHk7CisJdHR5ID0gcG9ydHAtPnBvcnQudHR5OwogCWlmICh0dHkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCkBAIC0zMzA0LDcgKzMzMDYsNyBAQAogCiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQl0dHkgPSBwb3J0cC0+dHR5OworCXR0eSA9IHBvcnRwLT5wb3J0LnR0eTsKIAlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIApAQCAtMzUwMyw4ICszNTA1LDggQEAKIAlpZiAoKGxlbiA9PSAwKSB8fCAoKGxlbiA8IFNUTF9UWEJVRkxPVykgJiYKIAkgICAgKHRlc3RfYml0KEFTWUlfVFhMT1csICZwb3J0cC0+aXN0YXRlKSA9PSAwKSkpIHsKIAkJc2V0X2JpdChBU1lJX1RYTE9XLCAmcG9ydHAtPmlzdGF0ZSk7Ci0JCWlmIChwb3J0cC0+dHR5KQotCQkJdHR5X3dha2V1cChwb3J0cC0+dHR5KTsKKwkJaWYgKHBvcnRwLT5wb3J0LnR0eSkKKwkJCXR0eV93YWtldXAocG9ydHAtPnBvcnQudHR5KTsKIAl9CiAKIAlpZiAobGVuID09IDApIHsKQEAgLTM1NjgsNyArMzU3MCw3IEBACiAJCXJldHVybjsKIAl9CiAJcG9ydHAgPSBwYW5lbHAtPnBvcnRzWyhpb2FjayA+PiAzKV07Ci0JdHR5ID0gcG9ydHAtPnR0eTsKKwl0dHkgPSBwb3J0cC0+cG9ydC50dHk7CiAKIAlpZiAoKGlvYWNrICYgQUNLX1RZUE1BU0spID09IEFDS19UWVBSWEdPT0QpIHsKIAkJb3V0YigoUkRDUiArIHBvcnRwLT51YXJ0YWRkciksIGlvYWRkcik7CkBAIC0zNjEzLDcgKzM2MTUsNyBAQAogCQkJaWYgKHBvcnRwLT5yeG1hcmttc2sgJiBzdGF0dXMpIHsKIAkJCQlpZiAoc3RhdHVzICYgU1RfQlJFQUspIHsKIAkJCQkJc3RhdHVzID0gVFRZX0JSRUFLOwotCQkJCQlpZiAocG9ydHAtPmZsYWdzICYgQVNZTkNfU0FLKSB7CisJCQkJCWlmIChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX1NBSykgewogCQkJCQkJZG9fU0FLKHR0eSk7CiAJCQkJCQlCUkRFTkFCTEUocG9ydHAtPmJyZG5yLCBwb3J0cC0+cGFnZW5yKTsKIAkJCQkJfQpAQCAtMzg5OSwxNSArMzkwMSwxNSBAQAogCX0KIAliYXVkcmF0ZSA9IHN0bF9iYXVkcmF0ZXNbYmF1ZHJhdGVdOwogCWlmICgodGlvc3AtPmNfY2ZsYWcgJiBDQkFVRCkgPT0gQjM4NDAwKSB7Ci0JCWlmICgocG9ydHAtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKKwkJaWYgKChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCiAJCQliYXVkcmF0ZSA9IDU3NjAwOwotCQllbHNlIGlmICgocG9ydHAtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCisJCWVsc2UgaWYgKChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfVkhJKQogCQkJYmF1ZHJhdGUgPSAxMTUyMDA7Ci0JCWVsc2UgaWYgKChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1NISSkKKwkJZWxzZSBpZiAoKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9TSEkpCiAJCQliYXVkcmF0ZSA9IDIzMDQwMDsKLQkJZWxzZSBpZiAoKHBvcnRwLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKKwkJZWxzZSBpZiAoKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9XQVJQKQogCQkJYmF1ZHJhdGUgPSA0NjA4MDA7Ci0JCWVsc2UgaWYgKChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpCisJCWVsc2UgaWYgKChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfQ1VTVCkKIAkJCWJhdWRyYXRlID0gKHBvcnRwLT5iYXVkX2Jhc2UgLyBwb3J0cC0+Y3VzdG9tX2Rpdmlzb3IpOwogCX0KIAlpZiAoYmF1ZHJhdGUgPiBTVExfU0MyNjE5OE1BWEJBVUQpCkBAIC0zOTIyLDExICszOTI0LDExIEBACiAgKglDaGVjayB3aGF0IGZvcm0gb2YgbW9kZW0gc2lnbmFsaW5nIGlzIHJlcXVpcmVkIGFuZCBzZXQgaXQgdXAuCiAgKi8KIAlpZiAodGlvc3AtPmNfY2ZsYWcgJiBDTE9DQUwpIHsKLQkJcG9ydHAtPmZsYWdzICY9IH5BU1lOQ19DSEVDS19DRDsKKwkJcG9ydHAtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwogCX0gZWxzZSB7CiAJCWlvcHIgfD0gSU9QUl9EQ0RDT1M7CiAJCWltcm9uIHw9IElSX0lPUE9SVDsKLQkJcG9ydHAtPmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOworCQlwb3J0cC0+cG9ydC5mbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKIAl9CiAKIC8qCkBAIC00MTc0LDcgKzQxNzYsNyBAQAogCiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQl0dHkgPSBwb3J0cC0+dHR5OworCXR0eSA9IHBvcnRwLT5wb3J0LnR0eTsKIAlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIApAQCAtNDI0Myw3ICs0MjQ1LDcgQEAKIAogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JdHR5ID0gcG9ydHAtPnR0eTsKKwl0dHkgPSBwb3J0cC0+cG9ydC50dHk7CiAJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAKQEAgLTQ0MjEsOCArNDQyMyw4IEBACiAJaWYgKChsZW4gPT0gMCkgfHwgKChsZW4gPCBTVExfVFhCVUZMT1cpICYmCiAJICAgICh0ZXN0X2JpdChBU1lJX1RYTE9XLCAmcG9ydHAtPmlzdGF0ZSkgPT0gMCkpKSB7CiAJCXNldF9iaXQoQVNZSV9UWExPVywgJnBvcnRwLT5pc3RhdGUpOwotCQlpZiAocG9ydHAtPnR0eSkKLQkJCXR0eV93YWtldXAocG9ydHAtPnR0eSk7CisJCWlmIChwb3J0cC0+cG9ydC50dHkpCisJCQl0dHlfd2FrZXVwKHBvcnRwLT5wb3J0LnR0eSk7CiAJfQogCiAJaWYgKGxlbiA9PSAwKSB7CkBAIC00NDc1LDcgKzQ0NzcsNyBAQAogCiAJcHJfZGVidWcoInN0bF9zYzI2MTk4cnhpc3IocG9ydHA9JXAsaWFjaz0leClcbiIsIHBvcnRwLCBpYWNrKTsKIAotCXR0eSA9IHBvcnRwLT50dHk7CisJdHR5ID0gcG9ydHAtPnBvcnQudHR5OwogCWlvYWRkciA9IHBvcnRwLT5pb2FkZHI7CiAJb3V0YihHSUJDUiwgKGlvYWRkciArIFhQX0FERFIpKTsKIAlsZW4gPSBpbmIoaW9hZGRyICsgWFBfREFUQSkgKyAxOwpAQCAtNDUyNyw3ICs0NTI5LDcgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwogCXVuc2lnbmVkIGludAkJaW9hZGRyOwogCi0JdHR5ID0gcG9ydHAtPnR0eTsKKwl0dHkgPSBwb3J0cC0+cG9ydC50dHk7CiAJaW9hZGRyID0gcG9ydHAtPmlvYWRkcjsKIAogCWlmIChzdGF0dXMgJiBTUl9SWFBBUklUWSkKQEAgLTQ1NDQsNyArNDU0Niw3IEBACiAJCWlmIChwb3J0cC0+cnhtYXJrbXNrICYgc3RhdHVzKSB7CiAJCQlpZiAoc3RhdHVzICYgU1JfUlhCUkVBSykgewogCQkJCXN0YXR1cyA9IFRUWV9CUkVBSzsKLQkJCQlpZiAocG9ydHAtPmZsYWdzICYgQVNZTkNfU0FLKSB7CisJCQkJaWYgKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfU0FLKSB7CiAJCQkJCWRvX1NBSyh0dHkpOwogCQkJCQlCUkRFTkFCTEUocG9ydHAtPmJyZG5yLCBwb3J0cC0+cGFnZW5yKTsKIAkJCQl9CkBAIC00NzUzLDggKzQ3NTUsOCBAQAogCWlmIChJU19FUlIoc3RhbGxpb25fY2xhc3MpKQogCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gY3JlYXRlIGNsYXNzXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlkZXZpY2VfY3JlYXRlKHN0YWxsaW9uX2NsYXNzLCBOVUxMLCBNS0RFVihTVExfU0lPTUVNTUFKT1IsIGkpLAotCQkJICAgICAgInN0YWxpb21lbSVkIiwgaSk7CisJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShzdGFsbGlvbl9jbGFzcywgTlVMTCwgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSwKKwkJCQkgICAgICBOVUxMLCAic3RhbGlvbWVtJWQiLCBpKTsKIAogCXJldHVybiAwOwogZXJyX3VucnR0eToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeC5jIGIvZHJpdmVycy9jaGFyL3N4LmMKaW5kZXggYjFhN2E4Yy4uMjE2MjQzOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeC5jCkBAIC0xLDQgKzEsMyBAQAotCiAvKiBzeC5jIC0tIGRyaXZlciBmb3IgdGhlIFNwZWNpYWxpeCBTWCBzZXJpZXMgY2FyZHMuIAogICoKICAqICBUaGlzIGRyaXZlciB3aWxsIGFsc28gc3VwcG9ydCB0aGUgb2xkZXIgU0ksIGFuZCBYSU8gY2FyZHMuCkBAIC05MzAsNyArOTI5LDcgQEAKIAogCWZ1bmNfZW50ZXIyKCk7CiAKLQlpZiAoIXBvcnQtPmdzLnR0eSkKKwlpZiAoIXBvcnQtPmdzLnBvcnQudHR5KQogCQlyZXR1cm4gMDsKIAogCS8qIFdoYXQgaXMgdGhpcyBkb2luZyBoZXJlPyAtLSBSRVcKQEAgLTk0MSwxOSArOTQwLDE5IEBACiAKIAlzeF9zZXRfYmF1ZChwb3J0KTsKIAotI2RlZmluZSBDRkxBRyBwb3J0LT5ncy50dHktPnRlcm1pb3MtPmNfY2ZsYWcKKyNkZWZpbmUgQ0ZMQUcgcG9ydC0+Z3MucG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcKIAlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfbXIxLAotCQkJKENfUEFSRU5CKHBvcnQtPmdzLnR0eSkgPyBNUjFfV0lUSCA6IE1SMV9OT05FKSB8Ci0JCQkoQ19QQVJPREQocG9ydC0+Z3MudHR5KSA/IE1SMV9PREQgOiBNUjFfRVZFTikgfAotCQkJKENfQ1JUU0NUUyhwb3J0LT5ncy50dHkpID8gTVIxX1JUU19SWEZMT1cgOiAwKSB8CisJCQkoQ19QQVJFTkIocG9ydC0+Z3MucG9ydC50dHkpID8gTVIxX1dJVEggOiBNUjFfTk9ORSkgfAorCQkJKENfUEFST0REKHBvcnQtPmdzLnBvcnQudHR5KSA/IE1SMV9PREQgOiBNUjFfRVZFTikgfAorCQkJKENfQ1JUU0NUUyhwb3J0LT5ncy5wb3J0LnR0eSkgPyBNUjFfUlRTX1JYRkxPVyA6IDApIHwKIAkJCSgoKENGTEFHICYgQ1NJWkUpID09IENTOCkgPyBNUjFfOF9CSVRTIDogMCkgfAogCQkJKCgoQ0ZMQUcgJiBDU0laRSkgPT0gQ1M3KSA/IE1SMV83X0JJVFMgOiAwKSB8CiAJCQkoKChDRkxBRyAmIENTSVpFKSA9PSBDUzYpID8gTVIxXzZfQklUUyA6IDApIHwKIAkJCSgoKENGTEFHICYgQ1NJWkUpID09IENTNSkgPyBNUjFfNV9CSVRTIDogMCkpOwogCiAJc3hfd3JpdGVfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX21yMiwKLQkJCShDX0NSVFNDVFMocG9ydC0+Z3MudHR5KSA/IE1SMl9DVFNfVFhGTE9XIDogMCkgfAotCQkJKENfQ1NUT1BCKHBvcnQtPmdzLnR0eSkgPyBNUjJfMl9TVE9QIDoKKwkJCShDX0NSVFNDVFMocG9ydC0+Z3MucG9ydC50dHkpID8gTVIyX0NUU19UWEZMT1cgOiAwKSB8CisJCQkoQ19DU1RPUEIocG9ydC0+Z3MucG9ydC50dHkpID8gTVIyXzJfU1RPUCA6CiAJCQlNUjJfMV9TVE9QKSk7CiAKIAlzd2l0Y2ggKENGTEFHICYgQ1NJWkUpIHsKQEAgLTk3Niw0NCArOTc1LDQ0IEBACiAJfQogCiAJc3hfd3JpdGVfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX3BydGNsLAotCQkJKElfSVhPTihwb3J0LT5ncy50dHkpID8gU1BfVFhFTiA6IDApIHwKLQkJCShJX0lYT0ZGKHBvcnQtPmdzLnR0eSkgPyBTUF9SWEVOIDogMCkgfAotCQkJKElfSVhBTlkocG9ydC0+Z3MudHR5KSA/IFNQX1RBTlkgOiAwKSB8IFNQX0RDRU4pOworCQkJKElfSVhPTihwb3J0LT5ncy5wb3J0LnR0eSkgPyBTUF9UWEVOIDogMCkgfAorCQkJKElfSVhPRkYocG9ydC0+Z3MucG9ydC50dHkpID8gU1BfUlhFTiA6IDApIHwKKwkJCShJX0lYQU5ZKHBvcnQtPmdzLnBvcnQudHR5KSA/IFNQX1RBTlkgOiAwKSB8IFNQX0RDRU4pOwogCiAJc3hfd3JpdGVfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX2JyZWFrLAotCQkJKElfSUdOQlJLKHBvcnQtPmdzLnR0eSkgPyBCUl9JR04gOiAwIHwKLQkJCUlfQlJLSU5UKHBvcnQtPmdzLnR0eSkgPyBCUl9JTlQgOiAwKSk7CisJCQkoSV9JR05CUksocG9ydC0+Z3MucG9ydC50dHkpID8gQlJfSUdOIDogMCB8CisJCQlJX0JSS0lOVChwb3J0LT5ncy5wb3J0LnR0eSkgPyBCUl9JTlQgOiAwKSk7CiAKLQlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfdHhvbiwgU1RBUlRfQ0hBUihwb3J0LT5ncy50dHkpKTsKLQlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfcnhvbiwgU1RBUlRfQ0hBUihwb3J0LT5ncy50dHkpKTsKLQlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfdHhvZmYsIFNUT1BfQ0hBUihwb3J0LT5ncy50dHkpKTsKLQlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfcnhvZmYsIFNUT1BfQ0hBUihwb3J0LT5ncy50dHkpKTsKKwlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfdHhvbiwgU1RBUlRfQ0hBUihwb3J0LT5ncy5wb3J0LnR0eSkpOworCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9yeG9uLCBTVEFSVF9DSEFSKHBvcnQtPmdzLnBvcnQudHR5KSk7CisJc3hfd3JpdGVfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX3R4b2ZmLCBTVE9QX0NIQVIocG9ydC0+Z3MucG9ydC50dHkpKTsKKwlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfcnhvZmYsIFNUT1BfQ0hBUihwb3J0LT5ncy5wb3J0LnR0eSkpOwogCiAJc3hfcmVjb25maWd1cmVfcG9ydChwb3J0KTsKIAogCS8qIFRlbGwgbGluZSBkaXNjaXBsaW5lIHdoZXRoZXIgd2Ugd2lsbCBkbyBpbnB1dCBjb29raW5nICovCi0JaWYgKElfT1RIRVIocG9ydC0+Z3MudHR5KSkgewotCQljbGVhcl9iaXQoVFRZX0hXX0NPT0tfSU4sICZwb3J0LT5ncy50dHktPmZsYWdzKTsKKwlpZiAoSV9PVEhFUihwb3J0LT5ncy5wb3J0LnR0eSkpIHsKKwkJY2xlYXJfYml0KFRUWV9IV19DT09LX0lOLCAmcG9ydC0+Z3MucG9ydC50dHktPmZsYWdzKTsKIAl9IGVsc2UgewotCQlzZXRfYml0KFRUWV9IV19DT09LX0lOLCAmcG9ydC0+Z3MudHR5LT5mbGFncyk7CisJCXNldF9iaXQoVFRZX0hXX0NPT0tfSU4sICZwb3J0LT5ncy5wb3J0LnR0eS0+ZmxhZ3MpOwogCX0KIAlzeF9kcHJpbnRrKFNYX0RFQlVHX1RFUk1JT1MsICJpZmxhZ3M6ICV4KCVkKSAiLAotCQkJKHVuc2lnbmVkIGludClwb3J0LT5ncy50dHktPnRlcm1pb3MtPmNfaWZsYWcsCi0JCQlJX09USEVSKHBvcnQtPmdzLnR0eSkpOworCQkJKHVuc2lnbmVkIGludClwb3J0LT5ncy5wb3J0LnR0eS0+dGVybWlvcy0+Y19pZmxhZywKKwkJCUlfT1RIRVIocG9ydC0+Z3MucG9ydC50dHkpKTsKIAogLyogVGVsbCBsaW5lIGRpc2NpcGxpbmUgd2hldGhlciB3ZSB3aWxsIGRvIG91dHB1dCBjb29raW5nLgogICogSWYgT1BPU1QgaXMgc2V0IGFuZCBubyBvdGhlciBvdXRwdXQgZmxhZ3MgYXJlIHNldCB0aGVuIHdlIGNhbiBkbyBvdXRwdXQKICAqIHByb2Nlc3NpbmcuICBFdmVuIGlmIG9ubHkgKm9uZSogb3RoZXIgZmxhZyBpbiB0aGUgT19PVEhFUiBncm91cCBpcyBzZXQKICAqIHdlIGRvIGNvb2tpbmcgaW4gc29mdHdhcmUuCiAgKi8KLQlpZiAoT19PUE9TVChwb3J0LT5ncy50dHkpICYmICFPX09USEVSKHBvcnQtPmdzLnR0eSkpIHsKLQkJc2V0X2JpdChUVFlfSFdfQ09PS19PVVQsICZwb3J0LT5ncy50dHktPmZsYWdzKTsKKwlpZiAoT19PUE9TVChwb3J0LT5ncy5wb3J0LnR0eSkgJiYgIU9fT1RIRVIocG9ydC0+Z3MucG9ydC50dHkpKSB7CisJCXNldF9iaXQoVFRZX0hXX0NPT0tfT1VULCAmcG9ydC0+Z3MucG9ydC50dHktPmZsYWdzKTsKIAl9IGVsc2UgewotCQljbGVhcl9iaXQoVFRZX0hXX0NPT0tfT1VULCAmcG9ydC0+Z3MudHR5LT5mbGFncyk7CisJCWNsZWFyX2JpdChUVFlfSFdfQ09PS19PVVQsICZwb3J0LT5ncy5wb3J0LnR0eS0+ZmxhZ3MpOwogCX0KIAlzeF9kcHJpbnRrKFNYX0RFQlVHX1RFUk1JT1MsICJvZmxhZ3M6ICV4KCVkKVxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpcG9ydC0+Z3MudHR5LT50ZXJtaW9zLT5jX29mbGFnLAotCQkJT19PVEhFUihwb3J0LT5ncy50dHkpKTsKKwkJCSh1bnNpZ25lZCBpbnQpcG9ydC0+Z3MucG9ydC50dHktPnRlcm1pb3MtPmNfb2ZsYWcsCisJCQlPX09USEVSKHBvcnQtPmdzLnBvcnQudHR5KSk7CiAJLyogcG9ydC0+Y19kY2QgPSBzeF9nZXRfQ0QgKHBvcnQpOyAqLwogCWZ1bmNfZXhpdCgpOwogCXJldHVybiAwOwpAQCAtMTEwMiw4ICsxMTAxLDggQEAKIAkJc3hfZGlzYWJsZV90eF9pbnRlcnJ1cHRzKHBvcnQpOwogCX0KIAotCWlmICgocG9ydC0+Z3MueG1pdF9jbnQgPD0gcG9ydC0+Z3Mud2FrZXVwX2NoYXJzKSAmJiBwb3J0LT5ncy50dHkpIHsKLQkJdHR5X3dha2V1cChwb3J0LT5ncy50dHkpOworCWlmICgocG9ydC0+Z3MueG1pdF9jbnQgPD0gcG9ydC0+Z3Mud2FrZXVwX2NoYXJzKSAmJiBwb3J0LT5ncy5wb3J0LnR0eSkgeworCQl0dHlfd2FrZXVwKHBvcnQtPmdzLnBvcnQudHR5KTsKIAkJc3hfZHByaW50ayhTWF9ERUJVR19UUkFOU01JVCwgIldha2luZyB1cC4uLi4gbGRpc2MgKCVkKS4uLi5cbiIsCiAJCQkJcG9ydC0+Z3Mud2FrZXVwX2NoYXJzKTsKIAl9CkBAIC0xMTI2LDcgKzExMjUsNyBAQAogCXVuc2lnbmVkIGNoYXIgKnJwOwogCiAJZnVuY19lbnRlcjIoKTsKLQl0dHkgPSBwb3J0LT5ncy50dHk7CisJdHR5ID0gcG9ydC0+Z3MucG9ydC50dHk7CiAJd2hpbGUgKDEpIHsKIAkJcnhfb3AgPSBzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9yeG9wb3MpOwogCQljID0gKHN4X3JlYWRfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX3J4aXBvcykgLSByeF9vcCkgJiAweGZmOwpAQCAtMTIxMSwxMiArMTIxMCwxMiBAQAogCQkJCS8qIERDRCB3ZW50IFVQICovCiAJCQkJaWYgKChzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9oc3RhdCkgIT0KIAkJCQkJCUhTX0lETEVfQ0xPU0VEKSAmJgotCQkJCQkJIShwb3J0LT5ncy50dHktPnRlcm1pb3MtPgorCQkJCQkJIShwb3J0LT5ncy5wb3J0LnR0eS0+dGVybWlvcy0+CiAJCQkJCQkJY19jZmxhZyAmIENMT0NBTCkpIHsKIAkJCQkJLyogQXJlIHdlIGJsb2NraW5nIGluIG9wZW4/ICovCiAJCQkJCXN4X2RwcmludGsoU1hfREVCVUdfTU9ERU1TSUdOQUxTLCAiRENEICIKIAkJCQkJCSJhY3RpdmUsIHVuYmxvY2tpbmcgb3BlblxuIik7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+Z3MuCisJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+Z3MucG9ydC4KIAkJCQkJCQlvcGVuX3dhaXQpOwogCQkJCX0gZWxzZSB7CiAJCQkJCXN4X2RwcmludGsoU1hfREVCVUdfTU9ERU1TSUdOQUxTLCAiRENEICIKQEAgLTEyMjQsMTAgKzEyMjMsMTAgQEAKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCS8qIERDRCB3ZW50IGRvd24hICovCi0JCQkJaWYgKCEocG9ydC0+Z3MudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSl7CisJCQkJaWYgKCEocG9ydC0+Z3MucG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpKXsKIAkJCQkJc3hfZHByaW50ayhTWF9ERUJVR19NT0RFTVNJR05BTFMsICJEQ0QgIgogCQkJCQkJImRyb3BwZWQuIGhhbmdpbmcgdXAuLi4uXG4iKTsKLQkJCQkJdHR5X2hhbmd1cChwb3J0LT5ncy50dHkpOworCQkJCQl0dHlfaGFuZ3VwKHBvcnQtPmdzLnBvcnQudHR5KTsKIAkJCQl9IGVsc2UgewogCQkJCQlzeF9kcHJpbnRrKFNYX0RFQlVHX01PREVNU0lHTkFMUywgIkRDRCAiCiAJCQkJCQkiZHJvcHBlZC4gaWdub3JpbmcuXG4iKTsKQEAgLTEzMjUsNyArMTMyNCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYm9hcmQtPm5wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSAmYm9hcmQtPnBvcnRzW2ldOwotCQlpZiAocG9ydC0+Z3MuZmxhZ3MgJiBHU19BQ1RJVkUpIHsKKwkJaWYgKHBvcnQtPmdzLnBvcnQuZmxhZ3MgJiBHU19BQ1RJVkUpIHsKIAkJCWlmIChzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9zdGF0ZSkpIHsKIAkJCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0lOVEVSUlVQVFMsICJQb3J0ICVkOiAiCiAJCQkJCQkibW9kZW0gc2lnbmFsIGNoYW5nZT8uLi4gXG4iLGkpOwpAQCAtMTMzNCw3ICsxMzMzLDcgQEAKIAkJCWlmIChwb3J0LT5ncy54bWl0X2NudCkgewogCQkJCXN4X3RyYW5zbWl0X2NoYXJzKHBvcnQpOwogCQkJfQotCQkJaWYgKCEocG9ydC0+Z3MuZmxhZ3MgJiBTWF9SWF9USFJPVFRMRSkpIHsKKwkJCWlmICghKHBvcnQtPmdzLnBvcnQuZmxhZ3MgJiBTWF9SWF9USFJPVFRMRSkpIHsKIAkJCQlzeF9yZWNlaXZlX2NoYXJzKHBvcnQpOwogCQkJfQogCQl9CkBAIC0xMzczLDcgKzEzNzIsNyBAQAogCXN0cnVjdCBzeF9wb3J0ICpwb3J0ID0gcHRyOwogCWZ1bmNfZW50ZXIyKCk7CiAKLQlwb3J0LT5ncy5mbGFncyAmPSB+R1NfVFhfSU5URU47CisJcG9ydC0+Z3MucG9ydC5mbGFncyAmPSB+R1NfVFhfSU5URU47CiAKIAlmdW5jX2V4aXQoKTsKIH0KQEAgLTEzOTQsNyArMTM5Myw3IEBACiAKIAkvKiBYWFggTXVzdCBiZSAiSElHSF9XQVRFUiIgZm9yIFNJIGNhcmQgYWNjb3JkaW5nIHRvIGRvYy4gKi8KIAlpZiAoZGF0YV9pbl9idWZmZXIgPCBMT1dfV0FURVIpCi0JCXBvcnQtPmdzLmZsYWdzICY9IH5HU19UWF9JTlRFTjsKKwkJcG9ydC0+Z3MucG9ydC5mbGFncyAmPSB+R1NfVFhfSU5URU47CiAKIAlmdW5jX2V4aXQoKTsKIH0KQEAgLTE0NDIsOCArMTQ0MSw4IEBACiAKIAlmdW5jX2VudGVyKCk7CiAKLQlwb3J0LT5ncy5mbGFncyAmPSB+R1NfQUNUSVZFOwotCWlmIChwb3J0LT5ncy50dHkgJiYgKHBvcnQtPmdzLnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSkgeworCXBvcnQtPmdzLnBvcnQuZmxhZ3MgJj0gfkdTX0FDVElWRTsKKwlpZiAocG9ydC0+Z3MucG9ydC50dHkgJiYgKHBvcnQtPmdzLnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKSB7CiAJCXN4X3NldHNpZ25hbHMocG9ydCwgMCwgMCk7CiAJCXN4X3JlY29uZmlndXJlX3BvcnQocG9ydCk7CiAJfQpAQCAtMTQ4NSw4ICsxNDg0LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+Z3MuZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAogCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0OwotCXBvcnQtPmdzLnR0eSA9IHR0eTsKLQlwb3J0LT5ncy5jb3VudCsrOworCXBvcnQtPmdzLnBvcnQudHR5ID0gdHR5OworCXBvcnQtPmdzLnBvcnQuY291bnQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5ncy5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCiAJc3hfZHByaW50ayhTWF9ERUJVR19PUEVOLCAic3RhcnRpbmcgcG9ydFxuIik7CkBAIC0xNDk3LDEyICsxNDk2LDEyIEBACiAJcmV0dmFsID0gZ3NfaW5pdF9wb3J0KCZwb3J0LT5ncyk7CiAJc3hfZHByaW50ayhTWF9ERUJVR19PUEVOLCAiZG9uZSBnc19pbml0XG4iKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXBvcnQtPmdzLmNvdW50LS07CisJCXBvcnQtPmdzLnBvcnQuY291bnQtLTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlwb3J0LT5ncy5mbGFncyB8PSBHU19BQ1RJVkU7Ci0JaWYgKHBvcnQtPmdzLmNvdW50IDw9IDEpCisJcG9ydC0+Z3MucG9ydC5mbGFncyB8PSBHU19BQ1RJVkU7CisJaWYgKHBvcnQtPmdzLnBvcnQuY291bnQgPD0gMSkKIAkJc3hfc2V0c2lnbmFscyhwb3J0LCAxLCAxKTsKIAogI2lmIDAKQEAgLTE1MTMsMTIgKzE1MTIsMTIgQEAKIAkJbXlfaGRfaW8ocG9ydC0+Ym9hcmQtPmJhc2UgKyBwb3J0LT5jaF9iYXNlLCBzaXplb2YoKnBvcnQpKTsKICNlbmRpZgogCi0JaWYgKHBvcnQtPmdzLmNvdW50IDw9IDEpIHsKKwlpZiAocG9ydC0+Z3MucG9ydC5jb3VudCA8PSAxKSB7CiAJCWlmIChzeF9zZW5kX2NvbW1hbmQocG9ydCwgSFNfTE9QRU4sIC0xLCBIU19JRExFX09QRU4pICE9IDEpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAic3g6IENhcmQgZGlkbid0IHJlc3BvbmQgdG8gTE9QRU4gIgogCQkJCQkiY29tbWFuZC5cbiIpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmdzLmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0JCQlwb3J0LT5ncy5jb3VudC0tOworCQkJcG9ydC0+Z3MucG9ydC5jb3VudC0tOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+Z3MuZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CkBAIC0xNTI2LDExICsxNTI1LDExIEBACiAKIAlyZXR2YWwgPSBnc19ibG9ja190aWxfcmVhZHkocG9ydCwgZmlscCk7CiAJc3hfZHByaW50ayhTWF9ERUJVR19PUEVOLCAiQmxvY2sgdGlsIHJlYWR5IHJldHVybmVkICVkLiBDb3VudD0lZFxuIiwKLQkJCXJldHZhbCwgcG9ydC0+Z3MuY291bnQpOworCQkJcmV0dmFsLCBwb3J0LT5ncy5wb3J0LmNvdW50KTsKIAogCWlmIChyZXR2YWwpIHsKIC8qCi0gKiBEb24ndCBsb3dlciBncy5jb3VudCBoZXJlIGJlY2F1c2Ugc3hfY2xvc2UoKSB3aWxsIGJlIGNhbGxlZCBsYXRlcgorICogRG9uJ3QgbG93ZXIgZ3MucG9ydC5jb3VudCBoZXJlIGJlY2F1c2Ugc3hfY2xvc2UoKSB3aWxsIGJlIGNhbGxlZCBsYXRlcgogICovCiAKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTE1NzEsMTQgKzE1NzAsMTQgQEAKIAl9CiAKIAlzeF9kcHJpbnRrKFNYX0RFQlVHX0NMT1NFLCAid2FpdGVkICVkIGppZmZpZXMgZm9yIGNsb3NlLiBjb3VudD0lZFxuIiwKLQkJCTUgKiBIWiAtIHRvIC0gMSwgcG9ydC0+Z3MuY291bnQpOworCQkJNSAqIEhaIC0gdG8gLSAxLCBwb3J0LT5ncy5wb3J0LmNvdW50KTsKIAotCWlmIChwb3J0LT5ncy5jb3VudCkgeworCWlmIChwb3J0LT5ncy5wb3J0LmNvdW50KSB7CiAJCXN4X2RwcmludGsoU1hfREVCVUdfQ0xPU0UsICJXQVJOSU5HIHBvcnQgY291bnQ6JWRcbiIsCi0JCQkJcG9ydC0+Z3MuY291bnQpOworCQkJCXBvcnQtPmdzLnBvcnQuY291bnQpOwogCQkvKnByaW50aygiJXMgU0VUVElORyBwb3J0IGNvdW50IHRvIHplcm86ICVwIGNvdW50OiAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgcG9ydCwgcG9ydC0+Z3MuY291bnQpOwotCQlwb3J0LT5ncy5jb3VudCA9IDA7Ki8KKwkJCQlfX2Z1bmNfXywgcG9ydCwgcG9ydC0+Z3MucG9ydC5jb3VudCk7CisJCXBvcnQtPmdzLnBvcnQuY291bnQgPSAwOyovCiAJfQogCiAJZnVuY19leGl0KCk7CkBAIC0xODQxLDcgKzE4NDAsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgc3hfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGZsYWcpCitzdGF0aWMgaW50IHN4X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBmbGFnKQogewogCXN0cnVjdCBzeF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcnY7CkBAIC0xODU4LDYgKzE4NTcsNyBAQAogCQkJcmVhZF9zeF9ieXRlKHBvcnQtPmJvYXJkLCBDSEFOX09GRlNFVChwb3J0LCBoaV9oc3RhdCkpKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJZnVuY19leGl0KCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3hfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xOTM5LDcgKzE5MzksNyBAQAogCSAqIGNvbnRyb2wgdGhlbiB0aHJvdHRsZSB0aGUgcG9ydC4KIAkgKi8KIAlpZiAoKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHx8IChJX0lYT0ZGKHR0eSkpKSB7Ci0JCXBvcnQtPmdzLmZsYWdzIHw9IFNYX1JYX1RIUk9UVExFOworCQlwb3J0LT5ncy5wb3J0LmZsYWdzIHw9IFNYX1JYX1RIUk9UVExFOwogCX0KIAlmdW5jX2V4aXQoKTsKIH0KQEAgLTE5NTMsNyArMTk1Myw3IEBACiAJICogdGhpcyBwb3J0IGluIGNhc2Ugd2UgZGlzYWJsZWQgZmxvdyBjb250cm9sIHdoaWxlIHRoZSBwb3J0CiAJICogd2FzIHRocm90dGxlZAogCSAqLwotCXBvcnQtPmdzLmZsYWdzICY9IH5TWF9SWF9USFJPVFRMRTsKKwlwb3J0LT5ncy5wb3J0LmZsYWdzICY9IH5TWF9SWF9USFJPVFRMRTsKIAlmdW5jX2V4aXQoKTsKIAlyZXR1cm47CiB9CkBAIC0yMzk2LDYgKzIzOTYsNyBAQAogCQlib2FyZC0+cG9ydHMgPSBwb3J0OwogCQlmb3IgKGogPSAwOyBqIDwgYm9hcmRzW2ldLm5wb3J0czsgaisrKSB7CiAJCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0lOSVQsICJpbml0aW5nIHBvcnQgJWRcbiIsIGopOworCQkJdHR5X3BvcnRfaW5pdCgmcG9ydC0+Z3MucG9ydCk7CiAJCQlwb3J0LT5ncy5tYWdpYyA9IFNYX01BR0lDOwogCQkJcG9ydC0+Z3MuY2xvc2VfZGVsYXkgPSBIWiAvIDI7CiAJCQlwb3J0LT5ncy5jbG9zaW5nX3dhaXQgPSAzMCAqIEhaOwpAQCAtMjQwOCw5ICsyNDA5LDYgQEAKIAkJCS8qCiAJCQkgKiBJbml0aWFsaXppbmcgd2FpdCBxdWV1ZQogCQkJICovCi0JCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5ncy5vcGVuX3dhaXQpOwotCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+Z3MuY2xvc2Vfd2FpdCk7Ci0KIAkJCXBvcnQrKzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKaW5kZXggYWM1MDgwZC4uZWY2NzA2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKQEAgLTE4MCwxOSArMTgwLDE0IEBACiAgCiBzdHJ1Y3QgbWdzbF9zdHJ1Y3QgewogCWludAkJCW1hZ2ljOwotCWludAkJCWZsYWdzOwotCWludAkJCWNvdW50OwkJLyogY291bnQgb2Ygb3BlbnMgKi8KKwlzdHJ1Y3QgdHR5X3BvcnQJCXBvcnQ7CiAJaW50CQkJbGluZTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICBod192ZXJzaW9uOwotCXVuc2lnbmVkIHNob3J0CQljbG9zZV9kZWxheTsKLQl1bnNpZ25lZCBzaG9ydAkJY2xvc2luZ193YWl0OwkvKiB0aW1lIHRvIHdhaXQgYmVmb3JlIGNsb3NpbmcgKi8KIAkKIAlzdHJ1Y3QgbWdzbF9pY291bnQJaWNvdW50OwogCQotCXN0cnVjdCB0dHlfc3RydWN0IAkqdHR5OwogCWludAkJCXRpbWVvdXQ7CiAJaW50CQkJeF9jaGFyOwkJLyogeG9uL3hvZmYgY2hhcmFjdGVyICovCi0JaW50CQkJYmxvY2tlZF9vcGVuOwkvKiAjIG9mIGJsb2NrZWQgb3BlbnMgKi8KIAl1MTYJCQlyZWFkX3N0YXR1c19tYXNrOwogCXUxNgkJCWlnbm9yZV9zdGF0dXNfbWFzazsJCiAJdW5zaWduZWQgY2hhciAJCSp4bWl0X2J1ZjsKQEAgLTIwMCw5ICsxOTUsNiBAQAogCWludAkJCXhtaXRfdGFpbDsKIAlpbnQJCQl4bWl0X2NudDsKIAkKLQl3YWl0X3F1ZXVlX2hlYWRfdAlvcGVuX3dhaXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsKLQkKIAl3YWl0X3F1ZXVlX2hlYWRfdAlzdGF0dXNfZXZlbnRfd2FpdF9xOwogCXdhaXRfcXVldWVfaGVhZF90CWV2ZW50X3dhaXRfcTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0eF90aW1lcjsJLyogSERMQyB0cmFuc21pdCB0aW1lb3V0IHRpbWVyICovCkBAIC05NzUsOCArOTY3LDggQEAKIAkJcmV0dXJuOwogCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCWlmIChsZCkgewotCQlpZiAobGQtPnJlY2VpdmVfYnVmKQotCQkJbGQtPnJlY2VpdmVfYnVmKHR0eSwgZGF0YSwgZmxhZ3MsIGNvdW50KTsKKwkJaWYgKGxkLT5vcHMtPnJlY2VpdmVfYnVmKQorCQkJbGQtPm9wcy0+cmVjZWl2ZV9idWYodHR5LCBkYXRhLCBmbGFncywgY291bnQpOwogCQl0dHlfbGRpc2NfZGVyZWYobGQpOwogCX0KIH0KQEAgLTExMzQsNyArMTEyNiw3IEBACiAKIHN0YXRpYyB2b2lkIG1nc2xfYmhfdHJhbnNtaXQoc3RydWN0IG1nc2xfc3RydWN0ICppbmZvKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCiAJaWYgKCBkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9CSCApCkBAIC0xMjc2LDcgKzEyNjgsNyBAQAogCWVsc2UgCiAjZW5kaWYKIAl7Ci0JCWlmIChpbmZvLT50dHktPnN0b3BwZWQgfHwgaW5mby0+dHR5LT5od19zdG9wcGVkKSB7CisJCWlmIChpbmZvLT5wb3J0LnR0eS0+c3RvcHBlZCB8fCBpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCkgewogCQkJdXNjX3N0b3BfdHJhbnNtaXR0ZXIoaW5mbyk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTEzNTcsMjkgKzEzNDksMjkgQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5zdGF0dXNfZXZlbnRfd2FpdF9xKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5ldmVudF93YWl0X3EpOwogCi0JCWlmICggKGluZm8tPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpICYmIAorCQlpZiAoIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpICYmIAogCQkgICAgIChzdGF0dXMgJiBNSVNDU1RBVFVTX0RDRF9MQVRDSEVEKSApIHsKIAkJCWlmICggZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSVNSICkKIAkJCQlwcmludGsoIiVzIENEIG5vdyAlcy4uLiIsIGluZm8tPmRldmljZV9uYW1lLAogCQkJCSAgICAgICAoc3RhdHVzICYgTUlTQ1NUQVRVU19EQ0QpID8gIm9uIiA6ICJvZmYiKTsKIAkJCWlmIChzdGF0dXMgJiBNSVNDU1RBVFVTX0RDRCkKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAJCQllbHNlIHsKIAkJCQlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lTUiApCiAJCQkJCXByaW50aygiZG9pbmcgc2VyaWFsIGhhbmd1cC4uLiIpOwotCQkJCWlmIChpbmZvLT50dHkpCi0JCQkJCXR0eV9oYW5ndXAoaW5mby0+dHR5KTsKKwkJCQlpZiAoaW5mby0+cG9ydC50dHkpCisJCQkJCXR0eV9oYW5ndXAoaW5mby0+cG9ydC50dHkpOwogCQkJfQogCQl9CiAJCi0JCWlmICggKGluZm8tPmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpICYmIAorCQlpZiAoIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpICYmIAogCQkgICAgIChzdGF0dXMgJiBNSVNDU1RBVFVTX0NUU19MQVRDSEVEKSApIHsKLQkJCWlmIChpbmZvLT50dHktPmh3X3N0b3BwZWQpIHsKKwkJCWlmIChpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCkgewogCQkJCWlmIChzdGF0dXMgJiBNSVNDU1RBVFVTX0NUUykgewogCQkJCQlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lTUiApCiAJCQkJCQlwcmludGsoIkNUUyB0eCBzdGFydC4uLiIpOwotCQkJCQlpZiAoaW5mby0+dHR5KQotCQkJCQkJaW5mby0+dHR5LT5od19zdG9wcGVkID0gMDsKKwkJCQkJaWYgKGluZm8tPnBvcnQudHR5KQorCQkJCQkJaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQgPSAwOwogCQkJCQl1c2Nfc3RhcnRfdHJhbnNtaXR0ZXIoaW5mbyk7CiAJCQkJCWluZm8tPnBlbmRpbmdfYmggfD0gQkhfVFJBTlNNSVQ7CiAJCQkJCXJldHVybjsKQEAgLTEzODgsOCArMTM4MCw4IEBACiAJCQkJaWYgKCEoc3RhdHVzICYgTUlTQ1NUQVRVU19DVFMpKSB7CiAJCQkJCWlmICggZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSVNSICkKIAkJCQkJCXByaW50aygiQ1RTIHR4IHN0b3AuLi4iKTsKLQkJCQkJaWYgKGluZm8tPnR0eSkKLQkJCQkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCQkJCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJCQkJCWluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkID0gMTsKIAkJCQkJdXNjX3N0b3BfdHJhbnNtaXR0ZXIoaW5mbyk7CiAJCQkJfQogCQkJfQpAQCAtMTQyMyw3ICsxNDE1LDcgQEAKIAkJCQogCXVzY19DbGVhcklycVBlbmRpbmdCaXRzKCBpbmZvLCBUUkFOU01JVF9EQVRBICk7CiAJCi0JaWYgKGluZm8tPnR0eS0+c3RvcHBlZCB8fCBpbmZvLT50dHktPmh3X3N0b3BwZWQpIHsKKwlpZiAoaW5mby0+cG9ydC50dHktPnN0b3BwZWQgfHwgaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQpIHsKIAkJdXNjX3N0b3BfdHJhbnNtaXR0ZXIoaW5mbyk7CiAJCXJldHVybjsKIAl9CkBAIC0xNDUzLDcgKzE0NDUsNyBAQAogCXUxNiBzdGF0dXM7CiAJaW50IHdvcmsgPSAwOwogCXVuc2lnbmVkIGNoYXIgRGF0YUJ5dGU7Ci0gCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CisgCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKICAJc3RydWN0CW1nc2xfaWNvdW50ICppY291bnQgPSAmaW5mby0+aWNvdW50OwogCQogCWlmICggZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSVNSICkJCkBAIC0xNTE0LDcgKzE1MDYsNyBAQAogCQkKIAkJCWlmIChzdGF0dXMgJiBSWFNUQVRVU19CUkVBS19SRUNFSVZFRCkgewogCQkJCWZsYWcgPSBUVFlfQlJFQUs7Ci0JCQkJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfU0FLKQorCQkJCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU0FLKQogCQkJCQlkb19TQUsodHR5KTsKIAkJCX0gZWxzZSBpZiAoc3RhdHVzICYgUlhTVEFUVVNfUEFSSVRZX0VSUk9SKQogCQkJCWZsYWcgPSBUVFlfUEFSSVRZOwpAQCAtMTc3MSw3ICsxNzYzLDcgQEAKIAlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8gKQogCQlwcmludGsoIiVzKCVkKTptZ3NsX3N0YXJ0dXAoJXMpXG4iLF9fRklMRV9fLF9fTElORV9fLGluZm8tPmRldmljZV9uYW1lKTsKIAkJCi0JaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpCisJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKIAkJcmV0dXJuIDA7CiAJCiAJaWYgKCFpbmZvLT54bWl0X2J1ZikgewpAQCAtMTc5OCw4ICsxNzkwLDggQEAKIAkJcmV0dmFsID0gbWdzbF9hZGFwdGVyX3Rlc3QoaW5mbyk7CiAJCQogCWlmICggcmV0dmFsICkgewotICAJCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmIGluZm8tPnR0eSkKLQkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisgIAkJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikgJiYgaW5mby0+cG9ydC50dHkpCisJCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAJCW1nc2xfcmVsZWFzZV9yZXNvdXJjZXMoaW5mbyk7CiAgIAkJcmV0dXJuIHJldHZhbDsKICAgCX0KQEAgLTE4MDcsMTAgKzE3OTksMTAgQEAKIAkvKiBwcm9ncmFtIGhhcmR3YXJlIGZvciBjdXJyZW50IHBhcmFtZXRlcnMgKi8KIAltZ3NsX2NoYW5nZV9wYXJhbXMoaW5mbyk7CiAJCi0JaWYgKGluZm8tPnR0eSkKLQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAKLQlpbmZvLT5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKKwlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwogCQogCXJldHVybiAwOwogCQpAQCAtMTgyNyw3ICsxODE5LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQotCWlmICghKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQorCWlmICghKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCiAJCXJldHVybjsKIAogCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQpAQCAtMTg2NCw3ICsxODU2LDcgQEAKIAkvKiBvbiB0aGUgSVNBIGFkYXB0ZXIuIFRoaXMgaGFzIG5vIGVmZmVjdCBmb3IgdGhlIFBDSSBhZGFwdGVyICovCiAJdXNjX091dFJlZyhpbmZvLCBQQ1IsICh1MTYpKCh1c2NfSW5SZWcoaW5mbywgUENSKSB8IEJJVDEzKSB8IEJJVDEyKSk7CiAJCi0gCWlmICghaW5mby0+dHR5IHx8IGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSB7CisgCWlmICghaW5mby0+cG9ydC50dHkgfHwgaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkgewogIAkJaW5mby0+c2VyaWFsX3NpZ25hbHMgJj0gfihTZXJpYWxTaWduYWxfRFRSICsgU2VyaWFsU2lnbmFsX1JUUyk7CiAJCXVzY19zZXRfc2VyaWFsX3NpZ25hbHMoaW5mbyk7CiAJfQpAQCAtMTg3MywxMCArMTg2NSwxMCBAQAogCiAJbWdzbF9yZWxlYXNlX3Jlc291cmNlcyhpbmZvKTsJCiAJCi0JaWYgKGluZm8tPnR0eSkKLQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKIAotCWluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKKwlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKIAkKIH0JLyogZW5kIG9mIHNodXRkb3duKCkgKi8KIApAQCAtMTkwOCw3ICsxOTAwLDcgQEAKIAl1c2NfRW5hYmxlSW50ZXJydXB0cyhpbmZvLCBJT19QSU4pOwogCXVzY19nZXRfc2VyaWFsX3NpZ25hbHMoaW5mbyk7CiAJCQotCWlmIChpbmZvLT5uZXRjb3VudCB8fCBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUkVBRCkKKwlpZiAoaW5mby0+bmV0Y291bnQgfHwgaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUkVBRCkKIAkJdXNjX3N0YXJ0X3JlY2VpdmVyKGluZm8pOwogCQkKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5pcnFfc3BpbmxvY2ssZmxhZ3MpOwpAQCAtMTkyMSwxNCArMTkxMywxNCBAQAogCXVuc2lnbmVkIGNmbGFnOwogCWludCBiaXRzX3Blcl9jaGFyOwogCi0JaWYgKCFpbmZvLT50dHkgfHwgIWluZm8tPnR0eS0+dGVybWlvcykKKwlpZiAoIWluZm8tPnBvcnQudHR5IHx8ICFpbmZvLT5wb3J0LnR0eS0+dGVybWlvcykKIAkJcmV0dXJuOwogCQkKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCIlcyglZCk6bWdzbF9jaGFuZ2VfcGFyYW1zKCVzKVxuIiwKIAkJCSBfX0ZJTEVfXyxfX0xJTkVfXywgaW5mby0+ZGV2aWNlX25hbWUgKTsKIAkJCSAKLQljZmxhZyA9IGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwljZmxhZyA9IGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCiAJLyogaWYgQjAgcmF0ZSAoaGFuZ3VwKSBzcGVjaWZpZWQgdGhlbiBuZWdhdGUgRFRSIGFuZCBSVFMgKi8KIAkvKiBvdGhlcndpc2UgYXNzZXJ0IERUUiBhbmQgUlRTICovCkBAIC0xOTc2LDcgKzE5NjgsNyBAQAogCSAqIGN1cnJlbnQgZGF0YSByYXRlLgogCSAqLwogCWlmIChpbmZvLT5wYXJhbXMuZGF0YV9yYXRlIDw9IDQ2MDgwMCkKLQkJaW5mby0+cGFyYW1zLmRhdGFfcmF0ZSA9IHR0eV9nZXRfYmF1ZF9yYXRlKGluZm8tPnR0eSk7CisJCWluZm8tPnBhcmFtcy5kYXRhX3JhdGUgPSB0dHlfZ2V0X2JhdWRfcmF0ZShpbmZvLT5wb3J0LnR0eSk7CiAJCiAJaWYgKCBpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICkgewogCQlpbmZvLT50aW1lb3V0ID0gKDMyKkhaKmJpdHNfcGVyX2NoYXIpIC8gCkBAIC0xOTg1LDMxICsxOTc3LDMxIEBACiAJaW5mby0+dGltZW91dCArPSBIWi81MDsJCS8qIEFkZCAuMDIgc2Vjb25kcyBvZiBzbG9wICovCiAKIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQotCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DVFNfRkxPVzsKKwkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19DVFNfRkxPVzsKIAllbHNlCi0JCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKKwkJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfQ1RTX0ZMT1c7CiAJCQogCWlmIChjZmxhZyAmIENMT0NBTCkKLQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOworCQlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19DSEVDS19DRDsKIAllbHNlCi0JCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOworCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOwogCiAJLyogcHJvY2VzcyB0dHkgaW5wdXQgY29udHJvbCBmbGFncyAqLwogCQogCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgPSBSWFNUQVRVU19PVkVSUlVOOwotCWlmIChJX0lOUENLKGluZm8tPnR0eSkpCisJaWYgKElfSU5QQ0soaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrIHw9IFJYU1RBVFVTX1BBUklUWV9FUlJPUiB8IFJYU1RBVFVTX0ZSQU1JTkdfRVJST1I7Ci0gCWlmIChJX0JSS0lOVChpbmZvLT50dHkpIHx8IElfUEFSTVJLKGluZm8tPnR0eSkpCisgCWlmIChJX0JSS0lOVChpbmZvLT5wb3J0LnR0eSkgfHwgSV9QQVJNUksoaW5mby0+cG9ydC50dHkpKQogIAkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayB8PSBSWFNUQVRVU19CUkVBS19SRUNFSVZFRDsKIAkKLQlpZiAoSV9JR05QQVIoaW5mby0+dHR5KSkKKwlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gUlhTVEFUVVNfUEFSSVRZX0VSUk9SIHwgUlhTVEFUVVNfRlJBTUlOR19FUlJPUjsKLQlpZiAoSV9JR05CUksoaW5mby0+dHR5KSkgeworCWlmIChJX0lHTkJSSyhpbmZvLT5wb3J0LnR0eSkpIHsKIAkJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFJYU1RBVFVTX0JSRUFLX1JFQ0VJVkVEOwogCQkvKiBJZiBpZ25vcmluZyBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsIGlnbm9yZSAKIAkJICogb3ZlcnJ1bnMgdG9vLiAgKEZvciByZWFsIHJhdyBzdXBwb3J0KS4KIAkJICovCi0JCWlmIChJX0lHTlBBUihpbmZvLT50dHkpKQorCQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQogCQkJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFJYU1RBVFVTX09WRVJSVU47CiAJfQogCkBAIC0yOTA1LDkgKzI4OTcsOSBAQAogICoKICAqIEFyZ3VtZW50czoJCXR0eQkJcG9pbnRlciB0byB0dHkgaW5zdGFuY2UgZGF0YQogICoJCQlicmVha19zdGF0ZQktMT1zZXQgYnJlYWsgY29uZGl0aW9uLCAwPWNsZWFyCi0gKiBSZXR1cm4gVmFsdWU6CU5vbmUKKyAqIFJldHVybiBWYWx1ZToJZXJyb3IgY29kZQogICovCi1zdGF0aWMgdm9pZCBtZ3NsX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyBpbnQgbWdzbF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IG1nc2xfc3RydWN0ICogaW5mbyA9IChzdHJ1Y3QgbWdzbF9zdHJ1Y3QgKil0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yOTE3LDcgKzI5MDksNyBAQAogCQkJIF9fRklMRV9fLF9fTElORV9fLCBpbmZvLT5kZXZpY2VfbmFtZSwgYnJlYWtfc3RhdGUpOwogCQkJIAogCWlmIChtZ3NsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1nc2xfYnJlYWsiKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5pcnFfc3BpbmxvY2ssZmxhZ3MpOwogIAlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpCkBAIC0yOTI1LDYgKzI5MTcsNyBAQAogCWVsc2UgCiAJCXVzY19PdXRSZWcoaW5mbyxJT0NSLCh1MTYpKHVzY19JblJlZyhpbmZvLElPQ1IpICYgfkJJVDcpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5pcnFfc3BpbmxvY2ssZmxhZ3MpOworCXJldHVybiAwOwogCQogfQkvKiBlbmQgb2YgbWdzbF9icmVhaygpICovCiAKQEAgLTMxMTMsMzIgKzMxMDYsMzIgQEAKIAkKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCIlcyglZCk6bWdzbF9jbG9zZSglcykgZW50cnksIGNvdW50PSVkXG4iLAotCQkJIF9fRklMRV9fLF9fTElORV9fLCBpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+Y291bnQpOworCQkJIF9fRklMRV9fLF9fTElORV9fLCBpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cG9ydC5jb3VudCk7CiAJCQkgCi0JaWYgKCFpbmZvLT5jb3VudCkKKwlpZiAoIWluZm8tPnBvcnQuY291bnQpCiAJCXJldHVybjsKIAogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKQogCQlnb3RvIGNsZWFudXA7CiAJCQkKLQlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKGluZm8tPmNvdW50ICE9IDEpKSB7CisJaWYgKCh0dHktPmNvdW50ID09IDEpICYmIChpbmZvLT5wb3J0LmNvdW50ICE9IDEpKSB7CiAJCS8qCiAJCSAqIHR0eS0+Y291bnQgaXMgMSBhbmQgdGhlIHR0eSBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4KLQkJICogaW5mby0+Y291bnQgc2hvdWxkIGJlIG9uZSBpbiB0aGlzIGNhc2UuCisJCSAqIGluZm8tPnBvcnQuY291bnQgc2hvdWxkIGJlIG9uZSBpbiB0aGlzIGNhc2UuCiAJCSAqIGlmIGl0J3Mgbm90LCBjb3JyZWN0IGl0IHNvIHRoYXQgdGhlIHBvcnQgaXMgc2h1dGRvd24uCiAJCSAqLwogCQlwcmludGsoIm1nc2xfY2xvc2U6IGJhZCByZWZjb3VudDsgdHR5LT5jb3VudCBpcyAxLCAiCi0JCSAgICAgICAiaW5mby0+Y291bnQgaXMgJWRcbiIsIGluZm8tPmNvdW50KTsKLQkJaW5mby0+Y291bnQgPSAxOworCQkgICAgICAgImluZm8tPnBvcnQuY291bnQgaXMgJWRcbiIsIGluZm8tPnBvcnQuY291bnQpOworCQlpbmZvLT5wb3J0LmNvdW50ID0gMTsKIAl9CiAJCi0JaW5mby0+Y291bnQtLTsKKwlpbmZvLT5wb3J0LmNvdW50LS07CiAJCiAJLyogaWYgYXQgbGVhc3Qgb25lIG9wZW4gcmVtYWluaW5nLCBsZWF2ZSBoYXJkd2FyZSBhY3RpdmUgKi8KLQlpZiAoaW5mby0+Y291bnQpCisJaWYgKGluZm8tPnBvcnQuY291bnQpCiAJCWdvdG8gY2xlYW51cDsKIAkKLQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOworCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0xPU0lORzsKIAkKIAkvKiBzZXQgdHR5LT5jbG9zaW5nIHRvIG5vdGlmeSBsaW5lIGRpc2NpcGxpbmUgdG8gCiAJICogb25seSBwcm9jZXNzIFhPTi9YT0ZGIGNoYXJhY3RlcnMuIE9ubHkgdGhlIE5fVFRZCkBAIC0zMTQ4LDE0ICszMTQxLDE0IEBACiAJCiAJLyogd2FpdCBmb3IgdHJhbnNtaXQgZGF0YSB0byBjbGVhciBhbGwgbGF5ZXJzICovCiAJCi0JaWYgKGluZm8tPmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkgeworCWlmIChpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkgewogCQlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJCXByaW50aygiJXMoJWQpOm1nc2xfY2xvc2UoJXMpIGNhbGxpbmcgdHR5X3dhaXRfdW50aWxfc2VudFxuIiwKIAkJCQkgX19GSUxFX18sX19MSU5FX18sIGluZm8tPmRldmljZV9uYW1lICk7Ci0JCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT5jbG9zaW5nX3dhaXQpOworCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQpOwogCX0KIAkJCi0gCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQorIAlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQogIAkJbWdzbF93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT50aW1lb3V0KTsKIAogCW1nc2xfZmx1c2hfYnVmZmVyKHR0eSk7CkBAIC0zMTY1LDIzICszMTU4LDIzIEBACiAJc2h1dGRvd24oaW5mbyk7CiAJCiAJdHR5LT5jbG9zaW5nID0gMDsKLQlpbmZvLT50dHkgPSBOVUxMOworCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKIAkKLQlpZiAoaW5mby0+YmxvY2tlZF9vcGVuKSB7Ci0JCWlmIChpbmZvLT5jbG9zZV9kZWxheSkgewotCQkJbXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2VjcyhpbmZvLT5jbG9zZV9kZWxheSkpOworCWlmIChpbmZvLT5wb3J0LmJsb2NrZWRfb3BlbikgeworCQlpZiAoaW5mby0+cG9ydC5jbG9zZV9kZWxheSkgeworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2VjcyhpbmZvLT5wb3J0LmNsb3NlX2RlbGF5KSk7CiAJCX0KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKIAl9CiAJCi0JaW5mby0+ZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEFTWU5DX0NMT1NJTkcpOworCWluZm8tPnBvcnQuZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEFTWU5DX0NMT1NJTkcpOwogCQkJIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+Y2xvc2Vfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0LmNsb3NlX3dhaXQpOwogCQogY2xlYW51cDoJCQkKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCIlcyglZCk6bWdzbF9jbG9zZSglcykgZXhpdCwgY291bnQ9JWRcbiIsIF9fRklMRV9fLF9fTElORV9fLAotCQkJdHR5LT5kcml2ZXItPm5hbWUsIGluZm8tPmNvdW50KTsKKwkJCXR0eS0+ZHJpdmVyLT5uYW1lLCBpbmZvLT5wb3J0LmNvdW50KTsKIAkJCQogfQkvKiBlbmQgb2YgbWdzbF9jbG9zZSgpICovCiAKQEAgLTMyMTEsNyArMzIwNCw3IEBACiAJaWYgKG1nc2xfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAibWdzbF93YWl0X3VudGlsX3NlbnQiKSkKIAkJcmV0dXJuOwogCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCisJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJZ290byBleGl0OwogCSAKIAlvcmlnX2ppZmZpZXMgPSBqaWZmaWVzOwpAQCAtMzI4MywxMSArMzI3NiwxMSBAQAogCW1nc2xfZmx1c2hfYnVmZmVyKHR0eSk7CiAJc2h1dGRvd24oaW5mbyk7CiAJCi0JaW5mby0+Y291bnQgPSAwOwkKLQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQlpbmZvLT50dHkgPSBOVUxMOworCWluZm8tPnBvcnQuY291bnQgPSAwOwkKKwlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKIAkKIH0JLyogZW5kIG9mIG1nc2xfaGFuZ3VwKCkgKi8KIApAQCAtMzMxOSw3ICszMzEyLDcgQEAKIAogCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyB8fCB0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSl7CiAJCS8qIG5vbmJsb2NrIG1vZGUgaXMgc2V0IG9yIHBvcnQgaXMgbm90IGVuYWJsZWQgKi8KLQkJaW5mby0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKKwkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTMzMjgsMjUgKzMzMjEsMjUgQEAKIAogCS8qIFdhaXQgZm9yIGNhcnJpZXIgZGV0ZWN0IGFuZCB0aGUgbGluZSB0byBiZWNvbWUKIAkgKiBmcmVlIChpLmUuLCBub3QgaW4gdXNlIGJ5IHRoZSBjYWxsb3V0KS4gIFdoaWxlIHdlIGFyZSBpbgotCSAqIHRoaXMgbG9vcCwgaW5mby0+Y291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKKwkgKiB0aGlzIGxvb3AsIGluZm8tPnBvcnQuY291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKIAkgKiBtZ3NsX2Nsb3NlKCkga25vd3Mgd2hlbiB0byBmcmVlIHRoaW5ncy4gIFdlIHJlc3RvcmUgaXQgdXBvbgogCSAqIGV4aXQsIGVpdGhlciBub3JtYWwgb3IgYWJub3JtYWwuCiAJICovCiAJIAogCXJldHZhbCA9IDA7Ci0JYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCQogCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCQlwcmludGsoIiVzKCVkKTpibG9ja190aWxfcmVhZHkgYmVmb3JlIGJsb2NrIG9uICVzIGNvdW50PSVkXG4iLAotCQkJIF9fRklMRV9fLF9fTElORV9fLCB0dHktPmRyaXZlci0+bmFtZSwgaW5mby0+Y291bnQgKTsKKwkJCSBfX0ZJTEVfXyxfX0xJTkVfXywgdHR5LT5kcml2ZXItPm5hbWUsIGluZm8tPnBvcnQuY291bnQgKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5pcnFfc3BpbmxvY2ssIGZsYWdzKTsKIAlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpIHsKIAkJZXh0cmFfY291bnQgPSB0cnVlOwotCQlpbmZvLT5jb3VudC0tOworCQlpbmZvLT5wb3J0LmNvdW50LS07CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmlycV9zcGlubG9jaywgZmxhZ3MpOwotCWluZm8tPmJsb2NrZWRfb3BlbisrOworCWluZm8tPnBvcnQuYmxvY2tlZF9vcGVuKys7CiAJCiAJd2hpbGUgKDEpIHsKIAkJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSB7CkBAIC0zMzU4LDggKzMzNTEsOCBAQAogCQkKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCi0JCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8ICEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpewotCQkJcmV0dmFsID0gKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPworCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAhKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpeworCQkJcmV0dmFsID0gKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/CiAJCQkJCS1FQUdBSU4gOiAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQpAQCAtMzM2OCw3ICszMzYxLDcgQEAKIAkgCXVzY19nZXRfc2VyaWFsX3NpZ25hbHMoaW5mbyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmlycV9zcGlubG9jayxmbGFncyk7CiAJCQotIAkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgorIAkJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmCiAgCQkgICAgKGRvX2Nsb2NhbCB8fCAoaW5mby0+c2VyaWFsX3NpZ25hbHMgJiBTZXJpYWxTaWduYWxfRENEKSkgKSB7CiAgCQkJYnJlYWs7CiAJCX0KQEAgLTMzODAsMjQgKzMzNzMsMjQgQEAKIAkJCiAJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCQkJcHJpbnRrKCIlcyglZCk6YmxvY2tfdGlsX3JlYWR5IGJsb2NraW5nIG9uICVzIGNvdW50PSVkXG4iLAotCQkJCSBfX0ZJTEVfXyxfX0xJTkVfXywgdHR5LT5kcml2ZXItPm5hbWUsIGluZm8tPmNvdW50ICk7CisJCQkJIF9fRklMRV9fLF9fTElORV9fLCB0dHktPmRyaXZlci0+bmFtZSwgaW5mby0+cG9ydC5jb3VudCApOwogCQkJCSAKIAkJc2NoZWR1bGUoKTsKIAl9CiAJCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPnBvcnQub3Blbl93YWl0LCAmd2FpdCk7CiAJCiAJaWYgKGV4dHJhX2NvdW50KQotCQlpbmZvLT5jb3VudCsrOwotCWluZm8tPmJsb2NrZWRfb3Blbi0tOworCQlpbmZvLT5wb3J0LmNvdW50Kys7CisJaW5mby0+cG9ydC5ibG9ja2VkX29wZW4tLTsKIAkKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCIlcyglZCk6YmxvY2tfdGlsX3JlYWR5IGFmdGVyIGJsb2NraW5nIG9uICVzIGNvdW50PSVkXG4iLAotCQkJIF9fRklMRV9fLF9fTElORV9fLCB0dHktPmRyaXZlci0+bmFtZSwgaW5mby0+Y291bnQgKTsKKwkJCSBfX0ZJTEVfXyxfX0xJTkVfXywgdHR5LT5kcml2ZXItPm5hbWUsIGluZm8tPnBvcnQuY291bnQgKTsKIAkJCSAKIAlpZiAoIXJldHZhbCkKLQkJaW5mby0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKKwkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCQkKIAlyZXR1cm4gcmV0dmFsOwogCQpAQCAtMzQzNSwyMiArMzQyOCwyMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAkKIAl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKLQlpbmZvLT50dHkgPSB0dHk7CisJaW5mby0+cG9ydC50dHkgPSB0dHk7CiAJCQogCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCQlwcmludGsoIiVzKCVkKTptZ3NsX29wZW4oJXMpLCBvbGQgcmVmIGNvdW50ID0gJWRcbiIsCi0JCQkgX19GSUxFX18sX19MSU5FX18sdHR5LT5kcml2ZXItPm5hbWUsIGluZm8tPmNvdW50KTsKKwkJCSBfX0ZJTEVfXyxfX0xJTkVfXyx0dHktPmRyaXZlci0+bmFtZSwgaW5mby0+cG9ydC5jb3VudCk7CiAKIAkvKiBJZiBwb3J0IGlzIGNsb3NpbmcsIHNpZ25hbCBjYWxsZXIgdG8gdHJ5IGFnYWluICovCi0JaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKXsKLQkJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykKLQkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmluZm8tPmNsb3NlX3dhaXQpOwotCQlyZXR2YWwgPSAoKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPworCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKXsKKwkJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKQorCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmaW5mby0+cG9ydC5jbG9zZV93YWl0KTsKKwkJcmV0dmFsID0gKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPwogCQkJLUVBR0FJTiA6IC1FUkVTVEFSVFNZUyk7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAJCi0JaW5mby0+dHR5LT5sb3dfbGF0ZW5jeSA9IChpbmZvLT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOworCWluZm8tPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bmV0bG9jaywgZmxhZ3MpOwogCWlmIChpbmZvLT5uZXRjb3VudCkgewpAQCAtMzQ1OCwxMCArMzQ1MSwxMCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5uZXRsb2NrLCBmbGFncyk7CiAJCWdvdG8gY2xlYW51cDsKIAl9Ci0JaW5mby0+Y291bnQrKzsKKwlpbmZvLT5wb3J0LmNvdW50Kys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bmV0bG9jaywgZmxhZ3MpOwogCi0JaWYgKGluZm8tPmNvdW50ID09IDEpIHsKKwlpZiAoaW5mby0+cG9ydC5jb3VudCA9PSAxKSB7CiAJCS8qIDFzdCBvcGVuIG9uIHRoaXMgZGV2aWNlLCBpbml0IGhhcmR3YXJlICovCiAJCXJldHZhbCA9IHN0YXJ0dXAoaW5mbyk7CiAJCWlmIChyZXR2YWwgPCAwKQpAQCAtMzQ4NCw5ICszNDc3LDkgQEAKIGNsZWFudXA6CQkJCiAJaWYgKHJldHZhbCkgewogCQlpZiAodHR5LT5jb3VudCA9PSAxKQotCQkJaW5mby0+dHR5ID0gTlVMTDsgLyogdHR5IGxheWVyIHdpbGwgcmVsZWFzZSB0dHkgc3RydWN0ICovCi0JCWlmKGluZm8tPmNvdW50KQotCQkJaW5mby0+Y291bnQtLTsKKwkJCWluZm8tPnBvcnQudHR5ID0gTlVMTDsgLyogdHR5IGxheWVyIHdpbGwgcmVsZWFzZSB0dHkgc3RydWN0ICovCisJCWlmKGluZm8tPnBvcnQuY291bnQpCisJCQlpbmZvLT5wb3J0LmNvdW50LS07CiAJfQogCQogCXJldHVybiByZXR2YWw7CkBAIC00MzMyLDEzICs0MzI1LDEyIEBACiAJaWYgKCFpbmZvKSB7CiAJCXByaW50aygiRXJyb3IgY2FuJ3QgYWxsb2NhdGUgZGV2aWNlIGluc3RhbmNlIGRhdGFcbiIpOwogCX0gZWxzZSB7CisJCXR0eV9wb3J0X2luaXQoJmluZm8tPnBvcnQpOwogCQlpbmZvLT5tYWdpYyA9IE1HU0xfTUFHSUM7CiAJCUlOSVRfV09SSygmaW5mby0+dGFzaywgbWdzbF9iaF9oYW5kbGVyKTsKIAkJaW5mby0+bWF4X2ZyYW1lX3NpemUgPSA0MDk2OwotCQlpbmZvLT5jbG9zZV9kZWxheSA9IDUqSFovMTA7Ci0JCWluZm8tPmNsb3Npbmdfd2FpdCA9IDMwKkhaOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jbG9zZV93YWl0KTsKKwkJaW5mby0+cG9ydC5jbG9zZV9kZWxheSA9IDUqSFovMTA7CisJCWluZm8tPnBvcnQuY2xvc2luZ193YWl0ID0gMzAqSFo7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPnN0YXR1c19ldmVudF93YWl0X3EpOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5ldmVudF93YWl0X3EpOwogCQlzcGluX2xvY2tfaW5pdCgmaW5mby0+aXJxX3NwaW5sb2NrKTsKQEAgLTY1NzUsNyArNjU2Nyw3IEBACiAJdW5zaWduZWQgaW50IGZyYW1lc2l6ZSA9IDA7CiAJYm9vbCBSZXR1cm5Db2RlID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAlib29sIHJldHVybl9mcmFtZSA9IGZhbHNlOwogCQogCS8qCkBAIC02NjQwLDkgKzY2MzIsOCBAQAogCQlmcmFtZXNpemUgPSAwOwogI2lmIFNZTkNMSU5LX0dFTkVSSUNfSERMQwogCQl7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGluZm8tPm5ldGRldik7Ci0JCQlzdGF0cy0+cnhfZXJyb3JzKys7Ci0JCQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzKys7CisJCQlpbmZvLT5uZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJaW5mby0+bmV0ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJfQogI2VuZGlmCiAJfSBlbHNlCkBAIC02Nzc0LDcgKzY3NjUsNyBAQAogCXVuc2lnbmVkIGludCBmcmFtZXNpemUgPSAwOwogCWJvb2wgUmV0dXJuQ29kZSA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAKIAkvKgogIAkgKiBjdXJyZW50X3J4X2J1ZmZlciBwb2ludHMgdG8gdGhlIDFzdCBidWZmZXIgb2YgdGhlIG5leHQgYXZhaWxhYmxlCkBAIC03NzExLDcgKzc3MDIsNyBAQAogCXVuc2lnbmVkIHNob3J0IG5ld19jcmN0eXBlOwogCiAJLyogcmV0dXJuIGVycm9yIGlmIFRUWSBpbnRlcmZhY2Ugb3BlbiAqLwotCWlmIChpbmZvLT5jb3VudCkKKwlpZiAoaW5mby0+cG9ydC5jb3VudCkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXN3aXRjaCAoZW5jb2RpbmcpCkBAIC03NzUzLDcgKzc3NDQsNiBAQAogc3RhdGljIGludCBoZGxjZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWdzbF9zdHJ1Y3QgKmluZm8gPSBkZXZfdG9fcG9ydChkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCkBAIC03NzY3LDggKzc3NTcsOCBAQAogCW1nc2xfbG9hZF90eF9kbWFfYnVmZmVyKGluZm8sIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCiAJLyogdXBkYXRlIG5ldHdvcmsgc3RhdGlzdGljcyAqLwotCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAkvKiBkb25lIHdpdGggc29ja2V0IGJ1ZmZlciwgc28gZnJlZSBpdCAqLwogCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTc4MDgsNyArNzc5OCw3IEBACiAKIAkvKiBhcmJpdHJhdGUgYmV0d2VlbiBuZXR3b3JrIGFuZCB0dHkgb3BlbnMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bmV0bG9jaywgZmxhZ3MpOwotCWlmIChpbmZvLT5jb3VudCAhPSAwIHx8IGluZm8tPm5ldGNvdW50ICE9IDApIHsKKwlpZiAoaW5mby0+cG9ydC5jb3VudCAhPSAwIHx8IGluZm8tPm5ldGNvdW50ICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGhkbGNfb3BlbiByZXR1cm5pbmcgYnVzeVxuIiwgZGV2LT5uYW1lKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bmV0bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtNzg5NCw3ICs3ODg0LDcgQEAKIAkJcHJpbnRrKCIlczpoZGxjZGV2X2lvY3RsKCVzKVxuIixfX0ZJTEVfXyxkZXYtPm5hbWUpOwogCiAJLyogcmV0dXJuIGVycm9yIGlmIFRUWSBpbnRlcmZhY2Ugb3BlbiAqLwotCWlmIChpbmZvLT5jb3VudCkKKwlpZiAoaW5mby0+cG9ydC5jb3VudCkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChjbWQgIT0gU0lPQ1dBTkRFVikKQEAgLTc5ODQsMTQgKzc5NzQsMTMgQEAKIHN0YXRpYyB2b2lkIGhkbGNkZXZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtZ3NsX3N0cnVjdCAqaW5mbyA9IGRldl90b19wb3J0KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCJoZGxjZGV2X3R4X3RpbWVvdXQoJXMpXG4iLGRldi0+bmFtZSk7CiAKLQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0Jc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+aXJxX3NwaW5sb2NrLGZsYWdzKTsKIAl1c2Nfc3RvcF90cmFuc21pdHRlcihpbmZvKTsKQEAgLTgwMjQsMjcgKzgwMTMsMjcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+bmV0ZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMoZGV2KTsKIAogCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQotCQlwcmludGsoImhkbGNkZXZfcngoJXMpXG4iLGRldi0+bmFtZSk7CisJCXByaW50aygiaGRsY2Rldl9yeCglcylcbiIsIGRldi0+bmFtZSk7CiAKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogY2FuJ3QgYWxsb2Mgc2tiLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IGNhbid0IGFsbG9jIHNrYiwgZHJvcHBpbmcgcGFja2V0XG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAKLQltZW1jcHkoc2tiX3B1dChza2IsIHNpemUpLGJ1ZixzaXplKTsKKwltZW1jcHkoc2tiX3B1dChza2IsIHNpemUpLCBidWYsIHNpemUpOwogCi0Jc2tiLT5wcm90b2NvbCA9IGhkbGNfdHlwZV90cmFucyhza2IsIGluZm8tPm5ldGRldik7CisJc2tiLT5wcm90b2NvbCA9IGhkbGNfdHlwZV90cmFucyhza2IsIGRldik7CiAKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBzaXplOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCW5ldGlmX3J4KHNrYik7CiAKLQlpbmZvLT5uZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwppbmRleCA1NWMxNjUzLi4zZTkwNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiBzdGF0aWMgaW50ICBjaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCB0aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CiBzdGF0aWMgdm9pZCB1bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKLXN0YXRpYyB2b2lkIHNldF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpOworc3RhdGljIGludCBzZXRfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKIAogLyoKICAqIGdlbmVyaWMgSERMQyBzdXBwb3J0IGFuZCBjYWxsYmFja3MKQEAgLTIxNCw2ICsyMTQsNyBAQAogCWNoYXIgKmJ1ZjsgICAgICAgICAgLyogdmlydHVhbCAgYWRkcmVzcyBvZiBkYXRhIGJ1ZmZlciAqLwogICAgIAl1bnNpZ25lZCBpbnQgcGRlc2M7IC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyBkZXNjcmlwdG9yICovCiAJZG1hX2FkZHJfdCBidWZfZG1hX2FkZHI7CisJdW5zaWduZWQgc2hvcnQgYnVmX2NvdW50OwogfTsKIAogI2RlZmluZSBzZXRfZGVzY19idWZmZXIoYSxiKSAoYSkucGJ1ZiA9IGNwdV90b19sZTMyKCh1bnNpZ25lZCBpbnQpKGIpKQpAQCAtMjQ0LDExICsyNDUsMTEgQEAKICAqLwogc3RydWN0IHNsZ3RfaW5mbyB7CiAJdm9pZCAqaWZfcHRyOwkJLyogR2VuZXJhbCBwdXJwb3NlIHBvaW50ZXIgKHVzZWQgYnkgU1BQUCkgKi8KKwlzdHJ1Y3QgdHR5X3BvcnQgcG9ydDsKIAogCXN0cnVjdCBzbGd0X2luZm8gKm5leHRfZGV2aWNlOwkvKiBkZXZpY2UgbGlzdCBsaW5rICovCiAKIAlpbnQgbWFnaWM7Ci0JaW50IGZsYWdzOwogCiAJY2hhciBkZXZpY2VfbmFtZVsyNV07CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CkBAIC0yNjAsMjMgKzI2MSwxNSBAQAogCS8qIGFycmF5IG9mIHBvaW50ZXJzIHRvIHBvcnQgY29udGV4dHMgb24gdGhpcyBhZGFwdGVyICovCiAJc3RydWN0IHNsZ3RfaW5mbyAqcG9ydF9hcnJheVtTTEdUX01BWF9QT1JUU107CiAKLQlpbnQJCQljb3VudDsJCS8qIGNvdW50IG9mIG9wZW5zICovCiAJaW50CQkJbGluZTsJCS8qIHR0eSBsaW5lIGluc3RhbmNlIG51bWJlciAqLwotCXVuc2lnbmVkIHNob3J0CQljbG9zZV9kZWxheTsKLQl1bnNpZ25lZCBzaG9ydAkJY2xvc2luZ193YWl0OwkvKiB0aW1lIHRvIHdhaXQgYmVmb3JlIGNsb3NpbmcgKi8KIAogCXN0cnVjdCBtZ3NsX2ljb3VudAlpY291bnQ7CiAKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAJKnR0eTsKIAlpbnQJCQl0aW1lb3V0OwogCWludAkJCXhfY2hhcjsJCS8qIHhvbi94b2ZmIGNoYXJhY3RlciAqLwotCWludAkJCWJsb2NrZWRfb3BlbjsJLyogIyBvZiBibG9ja2VkIG9wZW5zICovCiAJdW5zaWduZWQgaW50CQlyZWFkX3N0YXR1c19tYXNrOwogCXVuc2lnbmVkIGludCAJCWlnbm9yZV9zdGF0dXNfbWFzazsKIAotCXdhaXRfcXVldWVfaGVhZF90CW9wZW5fd2FpdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OwotCiAJd2FpdF9xdWV1ZV9oZWFkX3QJc3RhdHVzX2V2ZW50X3dhaXRfcTsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlldmVudF93YWl0X3E7CiAJc3RydWN0IHRpbWVyX2xpc3QJdHhfdGltZXI7CkBAIC0zMTAsNyArMzAzLDcgQEAKIAl1MzIgaWRsZV9tb2RlOwogCXUzMiBtYXhfZnJhbWVfc2l6ZTsgICAgICAgLyogYXMgc2V0IGJ5IGRldmljZSBjb25maWcgKi8KIAotCXVuc2lnbmVkIGludCByYXdfcnhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcmJ1Zl9maWxsX2xldmVsOwogCXVuc2lnbmVkIGludCBpZl9tb2RlOwogCiAJLyogZGV2aWNlIHN0YXR1cyAqLwpAQCAtNDc0LDYgKzQ2Nyw3IEBACiBzdGF0aWMgdm9pZCB0eF9zdG9wKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOwogc3RhdGljIHZvaWQgdHhfc2V0X2lkbGUoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZyZWVfdGJ1Zl9jb3VudChzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGJ1Zl9ieXRlcyhzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIHJlc2V0X3RidWZzKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOwogc3RhdGljIHZvaWQgdGRtYV9yZXNldChzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIHRkbWFfc3RhcnQoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyk7CkBAIC01MjEsNyArNTE1LDcgQEAKIHN0YXRpYyBpbnQgIHRpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyBpbnQgIHRpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7Ci1zdGF0aWMgdm9pZCBzZXRfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgc2V0X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSk7CiBzdGF0aWMgaW50ICBnZXRfaW50ZXJmYWNlKHN0cnVjdCBzbGd0X2luZm8gKmluZm8sIGludCBfX3VzZXIgKmlmX21vZGUpOwogc3RhdGljIGludCAgc2V0X2ludGVyZmFjZShzdHJ1Y3Qgc2xndF9pbmZvICppbmZvLCBpbnQgaWZfbW9kZSk7CiBzdGF0aWMgaW50ICBzZXRfZ3BpbyhzdHJ1Y3Qgc2xndF9pbmZvICppbmZvLCBzdHJ1Y3QgZ3Bpb19kZXNjIF9fdXNlciAqZ3Bpbyk7CkBAIC02NDEsOCArNjM1LDggQEAKIAkJcmV0dXJuOwogCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCWlmIChsZCkgewotCQlpZiAobGQtPnJlY2VpdmVfYnVmKQotCQkJbGQtPnJlY2VpdmVfYnVmKHR0eSwgZGF0YSwgZmxhZ3MsIGNvdW50KTsKKwkJaWYgKGxkLT5vcHMtPnJlY2VpdmVfYnVmKQorCQkJbGQtPm9wcy0+cmVjZWl2ZV9idWYodHR5LCBkYXRhLCBmbGFncywgY291bnQpOwogCQl0dHlfbGRpc2NfZGVyZWYobGQpOwogCX0KIH0KQEAgLTY3MiwyMCArNjY2LDIwIEBACiAJfQogCiAJdHR5LT5kcml2ZXJfZGF0YSA9IGluZm87Ci0JaW5mby0+dHR5ID0gdHR5OworCWluZm8tPnBvcnQudHR5ID0gdHR5OwogCi0JREJHSU5GTygoIiVzIG9wZW4sIG9sZCByZWYgY291bnQgPSAlZFxuIiwgaW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPmNvdW50KSk7CisJREJHSU5GTygoIiVzIG9wZW4sIG9sZCByZWYgY291bnQgPSAlZFxuIiwgaW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnBvcnQuY291bnQpKTsKIAogCS8qIElmIHBvcnQgaXMgY2xvc2luZywgc2lnbmFsIGNhbGxlciB0byB0cnkgYWdhaW4gKi8KLQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpewotCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKQotCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmaW5mby0+Y2xvc2Vfd2FpdCk7Ci0JCXJldHZhbCA9ICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/CisJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpeworCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpCisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5wb3J0LmNsb3NlX3dhaXQpOworCQlyZXR2YWwgPSAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/CiAJCQktRUFHQUlOIDogLUVSRVNUQVJUU1lTKTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCWluZm8tPnR0eS0+bG93X2xhdGVuY3kgPSAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKKwlpbmZvLT5wb3J0LnR0eS0+bG93X2xhdGVuY3kgPSAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPm5ldGxvY2ssIGZsYWdzKTsKIAlpZiAoaW5mby0+bmV0Y291bnQpIHsKQEAgLTY5MywxMCArNjg3LDEwIEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPm5ldGxvY2ssIGZsYWdzKTsKIAkJZ290byBjbGVhbnVwOwogCX0KLQlpbmZvLT5jb3VudCsrOworCWluZm8tPnBvcnQuY291bnQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5uZXRsb2NrLCBmbGFncyk7CiAKLQlpZiAoaW5mby0+Y291bnQgPT0gMSkgeworCWlmIChpbmZvLT5wb3J0LmNvdW50ID09IDEpIHsKIAkJLyogMXN0IG9wZW4gb24gdGhpcyBkZXZpY2UsIGluaXQgaGFyZHdhcmUgKi8KIAkJcmV0dmFsID0gc3RhcnR1cChpbmZvKTsKIAkJaWYgKHJldHZhbCA8IDApCkBAIC03MTQsOSArNzA4LDkgQEAKIGNsZWFudXA6CiAJaWYgKHJldHZhbCkgewogCQlpZiAodHR5LT5jb3VudCA9PSAxKQotCQkJaW5mby0+dHR5ID0gTlVMTDsgLyogdHR5IGxheWVyIHdpbGwgcmVsZWFzZSB0dHkgc3RydWN0ICovCi0JCWlmKGluZm8tPmNvdW50KQotCQkJaW5mby0+Y291bnQtLTsKKwkJCWluZm8tPnBvcnQudHR5ID0gTlVMTDsgLyogdHR5IGxheWVyIHdpbGwgcmVsZWFzZSB0dHkgc3RydWN0ICovCisJCWlmKGluZm8tPnBvcnQuY291bnQpCisJCQlpbmZvLT5wb3J0LmNvdW50LS07CiAJfQogCiAJREJHSU5GTygoIiVzIG9wZW4gcmM9JWRcbiIsIGluZm8tPmRldmljZV9uYW1lLCByZXR2YWwpKTsKQEAgLTcyOSwzMiArNzIzLDMyIEBACiAKIAlpZiAoc2FuaXR5X2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImNsb3NlIikpCiAJCXJldHVybjsKLQlEQkdJTkZPKCgiJXMgY2xvc2UgZW50cnksIGNvdW50PSVkXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+Y291bnQpKTsKKwlEQkdJTkZPKCgiJXMgY2xvc2UgZW50cnksIGNvdW50PSVkXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cG9ydC5jb3VudCkpOwogCi0JaWYgKCFpbmZvLT5jb3VudCkKKwlpZiAoIWluZm8tPnBvcnQuY291bnQpCiAJCXJldHVybjsKIAogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKGluZm8tPmNvdW50ICE9IDEpKSB7CisJaWYgKCh0dHktPmNvdW50ID09IDEpICYmIChpbmZvLT5wb3J0LmNvdW50ICE9IDEpKSB7CiAJCS8qCiAJCSAqIHR0eS0+Y291bnQgaXMgMSBhbmQgdGhlIHR0eSBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4KLQkJICogaW5mby0+Y291bnQgc2hvdWxkIGJlIG9uZSBpbiB0aGlzIGNhc2UuCisJCSAqIGluZm8tPnBvcnQuY291bnQgc2hvdWxkIGJlIG9uZSBpbiB0aGlzIGNhc2UuCiAJCSAqIGlmIGl0J3Mgbm90LCBjb3JyZWN0IGl0IHNvIHRoYXQgdGhlIHBvcnQgaXMgc2h1dGRvd24uCiAJCSAqLwogCQlEQkdFUlIoKCIlcyBjbG9zZTogYmFkIHJlZmNvdW50OyB0dHktPmNvdW50PTEsICIKLQkJICAgICAgICJpbmZvLT5jb3VudD0lZFxuIiwgaW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPmNvdW50KSk7Ci0JCWluZm8tPmNvdW50ID0gMTsKKwkJICAgICAgICJpbmZvLT5wb3J0LmNvdW50PSVkXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cG9ydC5jb3VudCkpOworCQlpbmZvLT5wb3J0LmNvdW50ID0gMTsKIAl9CiAKLQlpbmZvLT5jb3VudC0tOworCWluZm8tPnBvcnQuY291bnQtLTsKIAogCS8qIGlmIGF0IGxlYXN0IG9uZSBvcGVuIHJlbWFpbmluZywgbGVhdmUgaGFyZHdhcmUgYWN0aXZlICovCi0JaWYgKGluZm8tPmNvdW50KQorCWlmIChpbmZvLT5wb3J0LmNvdW50KQogCQlnb3RvIGNsZWFudXA7CiAKLQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOworCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfQ0xPU0lORzsKIAogCS8qIHNldCB0dHktPmNsb3NpbmcgdG8gbm90aWZ5IGxpbmUgZGlzY2lwbGluZSB0bwogCSAqIG9ubHkgcHJvY2VzcyBYT04vWE9GRiBjaGFyYWN0ZXJzLiBPbmx5IHRoZSBOX1RUWQpAQCAtNzY0LDEyICs3NTgsMTIgQEAKIAogCS8qIHdhaXQgZm9yIHRyYW5zbWl0IGRhdGEgdG8gY2xlYXIgYWxsIGxheWVycyAqLwogCi0JaWYgKGluZm8tPmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkgeworCWlmIChpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkgewogCQlEQkdJTkZPKCgiJXMgY2FsbCB0dHlfd2FpdF91bnRpbF9zZW50XG4iLCBpbmZvLT5kZXZpY2VfbmFtZSkpOwotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgaW5mby0+Y2xvc2luZ193YWl0KTsKKwkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIGluZm8tPnBvcnQuY2xvc2luZ193YWl0KTsKIAl9CiAKLSAJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpCisgCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpCiAgCQl3YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT50aW1lb3V0KTsKIAlmbHVzaF9idWZmZXIodHR5KTsKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKQEAgLTc3NywyMSArNzcxLDIxIEBACiAJc2h1dGRvd24oaW5mbyk7CiAKIAl0dHktPmNsb3NpbmcgPSAwOwotCWluZm8tPnR0eSA9IE5VTEw7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOwogCi0JaWYgKGluZm8tPmJsb2NrZWRfb3BlbikgewotCQlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpIHsKLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MoaW5mby0+Y2xvc2VfZGVsYXkpKTsKKwlpZiAoaW5mby0+cG9ydC5ibG9ja2VkX29wZW4pIHsKKwkJaWYgKGluZm8tPnBvcnQuY2xvc2VfZGVsYXkpIHsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MoaW5mby0+cG9ydC5jbG9zZV9kZWxheSkpOwogCQl9Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAJfQogCi0JaW5mby0+ZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEFTWU5DX0NMT1NJTkcpOworCWluZm8tPnBvcnQuZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFfEFTWU5DX0NMT1NJTkcpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5jbG9zZV93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQuY2xvc2Vfd2FpdCk7CiAKIGNsZWFudXA6Ci0JREJHSU5GTygoIiVzIGNsb3NlIGV4aXQsIGNvdW50PSVkXG4iLCB0dHktPmRyaXZlci0+bmFtZSwgaW5mby0+Y291bnQpKTsKKwlEQkdJTkZPKCgiJXMgY2xvc2UgZXhpdCwgY291bnQ9JWRcbiIsIHR0eS0+ZHJpdmVyLT5uYW1lLCBpbmZvLT5wb3J0LmNvdW50KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGhhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtODA1LDExICs3OTksMTEgQEAKIAlmbHVzaF9idWZmZXIodHR5KTsKIAlzaHV0ZG93bihpbmZvKTsKIAotCWluZm8tPmNvdW50ID0gMDsKLQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQlpbmZvLT50dHkgPSBOVUxMOworCWluZm8tPnBvcnQuY291bnQgPSAwOworCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQpAQCAtODU3LDYgKzg1MSw3IEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgYnVmc19uZWVkZWQ7CiAKIAlpZiAoc2FuaXR5X2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIndyaXRlIikpCiAJCWdvdG8gY2xlYW51cDsKQEAgLTg3MywyNSArODY4LDE2IEBACiAJaWYgKCFjb3VudCkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9SQVcgfHwKLQkgICAgaW5mby0+cGFyYW1zLm1vZGUgPT0gTUdTTF9NT0RFX01PTk9TWU5DIHx8Ci0JICAgIGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9CSVNZTkMpIHsKLQkJdW5zaWduZWQgaW50IGJ1ZnNfbmVlZGVkID0gKGNvdW50L0RNQUJVRlNJWkUpOwotCQl1bnNpZ25lZCBpbnQgYnVmc19mcmVlID0gZnJlZV90YnVmX2NvdW50KGluZm8pOwotCQlpZiAoY291bnQgJSBETUFCVUZTSVpFKQotCQkJKytidWZzX25lZWRlZDsKLQkJaWYgKGJ1ZnNfbmVlZGVkID4gYnVmc19mcmVlKQotCQkJZ290byBjbGVhbnVwOwotCX0gZWxzZSB7Ci0JCWlmIChpbmZvLT50eF9hY3RpdmUpCi0JCQlnb3RvIGNsZWFudXA7Ci0JCWlmIChpbmZvLT50eF9jb3VudCkgewotCQkJLyogc2VuZCBhY2N1bXVsYXRlZCBkYXRhIGZyb20gc2VuZF9jaGFyKCkgY2FsbHMgKi8KLQkJCS8qIGFzIGZyYW1lIGFuZCB3YWl0IGJlZm9yZSBhY2NlcHRpbmcgbW9yZSBkYXRhLiAqLwotCQkJdHhfbG9hZChpbmZvLCBpbmZvLT50eF9idWYsIGluZm8tPnR4X2NvdW50KTsKLQkJCWdvdG8gc3RhcnQ7Ci0JCX0KKwlpZiAoIWluZm8tPnR4X2FjdGl2ZSAmJiBpbmZvLT50eF9jb3VudCkgeworCQkvKiBzZW5kIGFjY3VtdWxhdGVkIGRhdGEgZnJvbSBzZW5kX2NoYXIoKSAqLworCQl0eF9sb2FkKGluZm8sIGluZm8tPnR4X2J1ZiwgaW5mby0+dHhfY291bnQpOworCQlnb3RvIHN0YXJ0OwogCX0KKwlidWZzX25lZWRlZCA9IChjb3VudC9ETUFCVUZTSVpFKTsKKwlpZiAoY291bnQgJSBETUFCVUZTSVpFKQorCQkrK2J1ZnNfbmVlZGVkOworCWlmIChidWZzX25lZWRlZCA+IGZyZWVfdGJ1Zl9jb3VudChpbmZvKSkKKwkJZ290byBjbGVhbnVwOwogCiAJcmV0ID0gaW5mby0+dHhfY291bnQgPSBjb3VudDsKIAl0eF9sb2FkKGluZm8sIGJ1ZiwgY291bnQpOwpAQCAtOTU5LDcgKzk0NSw3IEBACiAJaWYgKHNhbml0eV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJ3YWl0X3VudGlsX3NlbnQiKSkKIAkJcmV0dXJuOwogCURCR0lORk8oKCIlcyB3YWl0X3VudGlsX3NlbnQgZW50cnlcbiIsIGluZm8tPmRldmljZV9uYW1lKSk7Ci0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCisJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJZ290byBleGl0OwogCiAJb3JpZ19qaWZmaWVzID0gamlmZmllczsKQEAgLTE0MDQsMTAgKzEzOTAsMTIgQEAKIHN0YXRpYyBpbnQgY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IGNvdW50OwogCWlmIChzYW5pdHlfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY2hhcnNfaW5fYnVmZmVyIikpCiAJCXJldHVybiAwOwotCURCR0lORk8oKCIlcyBjaGFyc19pbl9idWZmZXIoKT0lZFxuIiwgaW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnR4X2NvdW50KSk7Ci0JcmV0dXJuIGluZm8tPnR4X2NvdW50OworCWNvdW50ID0gdGJ1Zl9ieXRlcyhpbmZvKTsKKwlEQkdJTkZPKCgiJXMgY2hhcnNfaW5fYnVmZmVyKCk9JWRcbiIsIGluZm8tPmRldmljZV9uYW1lLCBjb3VudCkpOworCXJldHVybiBjb3VudDsKIH0KIAogLyoKQEAgLTE0NjAsMTQgKzE0NDgsMTQgQEAKICAqIHNldCBvciBjbGVhciB0cmFuc21pdCBicmVhayBjb25kaXRpb24KICAqIGJyZWFrX3N0YXRlCS0xPXNldCBicmVhayBjb25kaXRpb24sIDA9Y2xlYXIKICAqLwotc3RhdGljIHZvaWQgc2V0X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyBpbnQgc2V0X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKIAlzdHJ1Y3Qgc2xndF9pbmZvICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHNhbml0eV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJzZXRfYnJlYWsiKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVJTlZBTDsKIAlEQkdJTkZPKCgiJXMgc2V0X2JyZWFrKCVkKVxuIiwgaW5mby0+ZGV2aWNlX25hbWUsIGJyZWFrX3N0YXRlKSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jayxmbGFncyk7CkBAIC0xNDc4LDYgKzE0NjYsNyBAQAogCQl2YWx1ZSAmPSB+QklUNjsKIAl3cl9yZWcxNihpbmZvLCBUQ1IsIHZhbHVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKKwlyZXR1cm4gMDsKIH0KIAogI2lmIFNZTkNMSU5LX0dFTkVSSUNfSERMQwpAQCAtMTUwMCw3ICsxNDg5LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBuZXdfY3JjdHlwZTsKIAogCS8qIHJldHVybiBlcnJvciBpZiBUVFkgaW50ZXJmYWNlIG9wZW4gKi8KLQlpZiAoaW5mby0+Y291bnQpCisJaWYgKGluZm8tPnBvcnQuY291bnQpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlEQkdJTkZPKCgiJXMgaGRsY2Rldl9hdHRhY2hcbiIsIGluZm8tPmRldmljZV9uYW1lKSk7CkBAIC0xNTQ0LDcgKzE1MzMsNiBAQAogc3RhdGljIGludCBoZGxjZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2xndF9pbmZvICppbmZvID0gZGV2X3RvX3BvcnQoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCURCR0lORk8oKCIlcyBoZGxjX3htaXRcbiIsIGRldi0+bmFtZSkpOwpAQCAtMTU1Nyw4ICsxNTQ1LDggQEAKIAl0eF9sb2FkKGluZm8sIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCiAJLyogdXBkYXRlIG5ldHdvcmsgc3RhdGlzdGljcyAqLwotCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAkvKiBkb25lIHdpdGggc29ja2V0IGJ1ZmZlciwgc28gZnJlZSBpdCAqLwogCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTE2MDAsNyArMTU4OCw3IEBACiAKIAkvKiBhcmJpdHJhdGUgYmV0d2VlbiBuZXR3b3JrIGFuZCB0dHkgb3BlbnMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bmV0bG9jaywgZmxhZ3MpOwotCWlmIChpbmZvLT5jb3VudCAhPSAwIHx8IGluZm8tPm5ldGNvdW50ICE9IDApIHsKKwlpZiAoaW5mby0+cG9ydC5jb3VudCAhPSAwIHx8IGluZm8tPm5ldGNvdW50ICE9IDApIHsKIAkJREJHSU5GTygoIiVzIGhkbGNfb3BlbiBidXN5XG4iLCBkZXYtPm5hbWUpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bmV0bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTY4NSw3ICsxNjczLDcgQEAKIAlEQkdJTkZPKCgiJXMgaGRsY2Rldl9pb2N0bFxuIiwgZGV2LT5uYW1lKSk7CiAKIAkvKiByZXR1cm4gZXJyb3IgaWYgVFRZIGludGVyZmFjZSBvcGVuICovCi0JaWYgKGluZm8tPmNvdW50KQorCWlmIChpbmZvLT5wb3J0LmNvdW50KQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGNtZCAhPSBTSU9DV0FOREVWKQpAQCAtMTc3NSwxMyArMTc2MywxMiBAQAogc3RhdGljIHZvaWQgaGRsY2Rldl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyA9IGRldl90b19wb3J0KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlEQkdJTkZPKCgiJXMgaGRsY2Rldl90eF90aW1lb3V0XG4iLCBkZXYtPm5hbWUpKTsKIAotCXN0YXRzLT50eF9lcnJvcnMrKzsKLQlzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLGZsYWdzKTsKIAl0eF9zdG9wKGluZm8pOwpAQCAtMTgxNCwyNiArMTgwMSwyNSBAQAogewogCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5uZXRkZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhkZXYpOwogCiAJREJHSU5GTygoIiVzIGhkbGNkZXZfcnhcbiIsIGRldi0+bmFtZSkpOwogCiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCURCR0VSUigoIiVzOiBjYW4ndCBhbGxvYyBza2IsIGRyb3AgcGFja2V0XG4iLCBkZXYtPm5hbWUpKTsKLQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAKLQltZW1jcHkoc2tiX3B1dChza2IsIHNpemUpLGJ1ZixzaXplKTsKKwltZW1jcHkoc2tiX3B1dChza2IsIHNpemUpLCBidWYsIHNpemUpOwogCi0Jc2tiLT5wcm90b2NvbCA9IGhkbGNfdHlwZV90cmFucyhza2IsIGluZm8tPm5ldGRldik7CisJc2tiLT5wcm90b2NvbCA9IGhkbGNfdHlwZV90cmFucyhza2IsIGRldik7CiAKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBzaXplOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCW5ldGlmX3J4KHNrYik7CiAKLQlpbmZvLT5uZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKIC8qKgpAQCAtMTkwNiw3ICsxODkyLDcgQEAKICAqLwogc3RhdGljIHZvaWQgcnhfYXN5bmMoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbykKIHsKLSAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKyAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwogIAlzdHJ1Y3QgbWdzbF9pY291bnQgKmljb3VudCA9ICZpbmZvLT5pY291bnQ7CiAJdW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7CiAJdW5zaWduZWQgY2hhciAqcDsKQEAgLTIwNTcsNyArMjA0Myw3IEBACiAKIHN0YXRpYyB2b2lkIGJoX3RyYW5zbWl0KHN0cnVjdCBzbGd0X2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAKIAlEQkdCSCgoIiVzIGJoX3RyYW5zbWl0XG4iLCBpbmZvLT5kZXZpY2VfbmFtZSkpOwogCWlmICh0dHkpCkBAIC0yMTAzLDE3ICsyMDg5LDE3IEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5ldmVudF93YWl0X3EpOwogCWluZm8tPnBlbmRpbmdfYmggfD0gQkhfU1RBVFVTOwogCi0JaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpIHsKLQkJaWYgKGluZm8tPnR0eSkgewotCQkJaWYgKGluZm8tPnR0eS0+aHdfc3RvcHBlZCkgeworCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpIHsKKwkJaWYgKGluZm8tPnBvcnQudHR5KSB7CisJCQlpZiAoaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQpIHsKIAkJCQlpZiAoaW5mby0+c2lnbmFscyAmIFNlcmlhbFNpZ25hbF9DVFMpIHsKLQkJIAkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCSAJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDA7CiAJCQkJCWluZm8tPnBlbmRpbmdfYmggfD0gQkhfVFJBTlNNSVQ7CiAJCQkJCXJldHVybjsKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWlmICghKGluZm8tPnNpZ25hbHMgJiBTZXJpYWxTaWduYWxfQ1RTKSkKLQkJIAkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCSAJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQl9CiAJCX0KIAl9CkBAIC0yMTQ2LDEyICsyMTMyLDEyIEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5ldmVudF93YWl0X3EpOwogCWluZm8tPnBlbmRpbmdfYmggfD0gQkhfU1RBVFVTOwogCi0JaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpIHsKKwlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7CiAJCWlmIChpbmZvLT5zaWduYWxzICYgU2VyaWFsU2lnbmFsX0RDRCkKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwogCQllbHNlIHsKLQkJCWlmIChpbmZvLT50dHkpCi0JCQkJdHR5X2hhbmd1cChpbmZvLT50dHkpOworCQkJaWYgKGluZm8tPnBvcnQudHR5KQorCQkJCXR0eV9oYW5ndXAoaW5mby0+cG9ydC50dHkpOwogCQl9CiAJfQogfQpAQCAtMjE5NCwxMiArMjE4MCwxMiBAQAogCQlpZiAoKHN0YXR1cyAmIElSUV9SWEJSRUFLKSAmJiAoc3RhdHVzICYgUlhCUkVBSykpIHsKIAkJCWluZm8tPmljb3VudC5icmsrKzsKIAkJCS8qIHByb2Nlc3MgYnJlYWsgZGV0ZWN0aW9uIGlmIHR0eSBjb250cm9sIGFsbG93cyAqLwotCQkJaWYgKGluZm8tPnR0eSkgeworCQkJaWYgKGluZm8tPnBvcnQudHR5KSB7CiAJCQkJaWYgKCEoc3RhdHVzICYgaW5mby0+aWdub3JlX3N0YXR1c19tYXNrKSkgewogCQkJCQlpZiAoaW5mby0+cmVhZF9zdGF0dXNfbWFzayAmIE1BU0tfQlJFQUspIHsKLQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKGluZm8tPnR0eSwgMCwgVFRZX0JSRUFLKTsKLQkJCQkJCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX1NBSykKLQkJCQkJCQlkb19TQUsoaW5mby0+dHR5KTsKKwkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKGluZm8tPnBvcnQudHR5LCAwLCBUVFlfQlJFQUspOworCQkJCQkJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TQUspCisJCQkJCQkJZG9fU0FLKGluZm8tPnBvcnQudHR5KTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTIzMTksNyArMjMwNSw3IEBACiAJCWVsc2UKICNlbmRpZgogCQl7Ci0JCQlpZiAoaW5mby0+dHR5ICYmIChpbmZvLT50dHktPnN0b3BwZWQgfHwgaW5mby0+dHR5LT5od19zdG9wcGVkKSkgeworCQkJaWYgKGluZm8tPnBvcnQudHR5ICYmIChpbmZvLT5wb3J0LnR0eS0+c3RvcHBlZCB8fCBpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCkpIHsKIAkJCQl0eF9zdG9wKGluZm8pOwogCQkJCXJldHVybjsKIAkJCX0KQEAgLTIzOTUsNyArMjM4MSw3IEBACiAJZm9yKGk9MDsgaSA8IGluZm8tPnBvcnRfY291bnQgOyBpKyspIHsKIAkJc3RydWN0IHNsZ3RfaW5mbyAqcG9ydCA9IGluZm8tPnBvcnRfYXJyYXlbaV07CiAKLQkJaWYgKHBvcnQgJiYgKHBvcnQtPmNvdW50IHx8IHBvcnQtPm5ldGNvdW50KSAmJgorCQlpZiAocG9ydCAmJiAocG9ydC0+cG9ydC5jb3VudCB8fCBwb3J0LT5uZXRjb3VudCkgJiYKIAkJICAgIHBvcnQtPnBlbmRpbmdfYmggJiYgIXBvcnQtPmJoX3J1bm5pbmcgJiYKIAkJICAgICFwb3J0LT5iaF9yZXF1ZXN0ZWQpIHsKIAkJCURCR0lTUigoIiVzIGJoIHF1ZXVlZFxuIiwgcG9ydC0+ZGV2aWNlX25hbWUpKTsKQEAgLTI0MTQsNyArMjQwMCw3IEBACiB7CiAJREJHSU5GTygoIiVzIHN0YXJ0dXBcbiIsIGluZm8tPmRldmljZV9uYW1lKSk7CiAKLQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKKwlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQogCQlyZXR1cm4gMDsKIAogCWlmICghaW5mby0+dHhfYnVmKSB7CkBAIC0yNDMyLDEwICsyNDE4LDEwIEBACiAJLyogcHJvZ3JhbSBoYXJkd2FyZSBmb3IgY3VycmVudCBwYXJhbWV0ZXJzICovCiAJY2hhbmdlX3BhcmFtcyhpbmZvKTsKIAotCWlmIChpbmZvLT50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCi0JaW5mby0+ZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CisJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAogCXJldHVybiAwOwogfQpAQCAtMjQ0Nyw3ICsyNDMzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCisJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJcmV0dXJuOwogCiAJREJHSU5GTygoIiVzIHNodXRkb3duXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSkpOwpAQCAtMjQ3MCw3ICsyNDU2LDcgQEAKIAogCXNsZ3RfaXJxX29mZihpbmZvLCBJUlFfQUxMIHwgSVJRX01BU1RFUik7CiAKLSAJaWYgKCFpbmZvLT50dHkgfHwgaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpIHsKKyAJaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCBpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSB7CiAgCQlpbmZvLT5zaWduYWxzICY9IH4oU2VyaWFsU2lnbmFsX0RUUiArIFNlcmlhbFNpZ25hbF9SVFMpOwogCQlzZXRfc2lnbmFscyhpbmZvKTsKIAl9CkBAIC0yNDc5LDEwICsyNDY1LDEwIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKIAotCWlmIChpbmZvLT50dHkpCi0JCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisJaWYgKGluZm8tPnBvcnQudHR5KQorCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAKLQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CisJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CiB9CiAKIHN0YXRpYyB2b2lkIHByb2dyYW1faHcoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbykKQEAgLTI1MTEsNyArMjQ5Nyw3IEBACiAJZ2V0X3NpZ25hbHMoaW5mbyk7CiAKIAlpZiAoaW5mby0+bmV0Y291bnQgfHwKLQkgICAgKGluZm8tPnR0eSAmJiBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUkVBRCkpCisJICAgIChpbmZvLT5wb3J0LnR0eSAmJiBpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSRUFEKSkKIAkJcnhfc3RhcnQoaW5mbyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKQEAgLTI1MjUsMTEgKzI1MTEsMTEgQEAKIAl1bnNpZ25lZCBjZmxhZzsKIAlpbnQgYml0c19wZXJfY2hhcjsKIAotCWlmICghaW5mby0+dHR5IHx8ICFpbmZvLT50dHktPnRlcm1pb3MpCisJaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAhaW5mby0+cG9ydC50dHktPnRlcm1pb3MpCiAJCXJldHVybjsKIAlEQkdJTkZPKCgiJXMgY2hhbmdlX3BhcmFtc1xuIiwgaW5mby0+ZGV2aWNlX25hbWUpKTsKIAotCWNmbGFnID0gaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAKIAkvKiBpZiBCMCByYXRlIChoYW5ndXApIHNwZWNpZmllZCB0aGVuIG5lZ2F0ZSBEVFIgYW5kIFJUUyAqLwogCS8qIG90aGVyd2lzZSBhc3NlcnQgRFRSIGFuZCBSVFMgKi8KQEAgLTI1NjEsNyArMjU0Nyw3IEBACiAJYml0c19wZXJfY2hhciA9IGluZm8tPnBhcmFtcy5kYXRhX2JpdHMgKwogCQkJaW5mby0+cGFyYW1zLnN0b3BfYml0cyArIDE7CiAKLQlpbmZvLT5wYXJhbXMuZGF0YV9yYXRlID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+dHR5KTsKKwlpbmZvLT5wYXJhbXMuZGF0YV9yYXRlID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHkpOwogCiAJaWYgKGluZm8tPnBhcmFtcy5kYXRhX3JhdGUpIHsKIAkJaW5mby0+dGltZW91dCA9ICgzMipIWipiaXRzX3Blcl9jaGFyKSAvCkBAIC0yNTcwLDMwICsyNTU2LDMwIEBACiAJaW5mby0+dGltZW91dCArPSBIWi81MDsJCS8qIEFkZCAuMDIgc2Vjb25kcyBvZiBzbG9wICovCiAKIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQotCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DVFNfRkxPVzsKKwkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19DVFNfRkxPVzsKIAllbHNlCi0JCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKKwkJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfQ1RTX0ZMT1c7CiAKIAlpZiAoY2ZsYWcgJiBDTE9DQUwpCi0JCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DSEVDS19DRDsKKwkJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfQ0hFQ0tfQ0Q7CiAJZWxzZQotCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKKwkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKIAogCS8qIHByb2Nlc3MgdHR5IGlucHV0IGNvbnRyb2wgZmxhZ3MgKi8KIAogCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgPSBJUlFfUlhPVkVSOwotCWlmIChJX0lOUENLKGluZm8tPnR0eSkpCisJaWYgKElfSU5QQ0soaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrIHw9IE1BU0tfUEFSSVRZIHwgTUFTS19GUkFNSU5HOwotIAlpZiAoSV9CUktJTlQoaW5mby0+dHR5KSB8fCBJX1BBUk1SSyhpbmZvLT50dHkpKQorIAlpZiAoSV9CUktJTlQoaW5mby0+cG9ydC50dHkpIHx8IElfUEFSTVJLKGluZm8tPnBvcnQudHR5KSkKICAJCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgfD0gTUFTS19CUkVBSzsKLQlpZiAoSV9JR05QQVIoaW5mby0+dHR5KSkKKwlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gTUFTS19QQVJJVFkgfCBNQVNLX0ZSQU1JTkc7Ci0JaWYgKElfSUdOQlJLKGluZm8tPnR0eSkpIHsKKwlpZiAoSV9JR05CUksoaW5mby0+cG9ydC50dHkpKSB7CiAJCWluZm8tPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBNQVNLX0JSRUFLOwogCQkvKiBJZiBpZ25vcmluZyBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsIGlnbm9yZQogCQkgKiBvdmVycnVucyB0b28uICAoRm9yIHJlYWwgcmF3IHN1cHBvcnQpLgogCQkgKi8KLQkJaWYgKElfSUdOUEFSKGluZm8tPnR0eSkpCisJCWlmIChJX0lHTlBBUihpbmZvLT5wb3J0LnR0eSkpCiAJCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gTUFTS19PVkVSUlVOOwogCX0KIApAQCAtMjY5MCw4ICsyNjc2LDMxIEBACiBzdGF0aWMgaW50IHJ4X2VuYWJsZShzdHJ1Y3Qgc2xndF9pbmZvICppbmZvLCBpbnQgZW5hYmxlKQogewogIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCURCR0lORk8oKCIlcyByeF9lbmFibGUoJWQpXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSwgZW5hYmxlKSk7CisJdW5zaWduZWQgaW50IHJidWZfZmlsbF9sZXZlbDsKKwlEQkdJTkZPKCgiJXMgcnhfZW5hYmxlKCUwOHgpXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSwgZW5hYmxlKSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOworCS8qCisJICogZW5hYmxlWzMxLi4xNl0gPSByZWNlaXZlIERNQSBidWZmZXIgZmlsbCBsZXZlbAorCSAqIDAgPSBub29wIChsZWF2ZSBmaWxsIGxldmVsIHVuY2hhbmdlZCkKKwkgKiBmaWxsIGxldmVsIG11c3QgYmUgbXVsdGlwbGUgb2YgNCBhbmQgPD0gYnVmZmVyIHNpemUKKwkgKi8KKwlyYnVmX2ZpbGxfbGV2ZWwgPSAoKHVuc2lnbmVkIGludCllbmFibGUpID4+IDE2OworCWlmIChyYnVmX2ZpbGxfbGV2ZWwpIHsKKwkJaWYgKChyYnVmX2ZpbGxfbGV2ZWwgPiBETUFCVUZTSVpFKSB8fCAocmJ1Zl9maWxsX2xldmVsICUgNCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWluZm8tPnJidWZfZmlsbF9sZXZlbCA9IHJidWZfZmlsbF9sZXZlbDsKKwkJcnhfc3RvcChpbmZvKTsgLyogcmVzdGFydCByZWNlaXZlciB0byB1c2UgbmV3IGZpbGwgbGV2ZWwgKi8KKwl9CisKKwkvKgorCSAqIGVuYWJsZVsxLi4wXSA9IHJlY2VpdmVyIGVuYWJsZSBjb21tYW5kCisJICogMCA9IGRpc2FibGUKKwkgKiAxID0gZW5hYmxlCisJICogMiA9IGVuYWJsZSBvciBmb3JjZSBodW50IG1vZGUgaWYgYWxyZWFkeSBlbmFibGVkCisJICovCisJZW5hYmxlICY9IDM7CiAJaWYgKGVuYWJsZSkgewogCQlpZiAoIWluZm8tPnJ4X2VuYWJsZWQpCiAJCQlyeF9zdGFydChpbmZvKTsKQEAgLTMxNDQsNyArMzE1Myw3IEBACiAKIAlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sgfHwgdHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpewogCQkvKiBub25ibG9jayBtb2RlIGlzIHNldCBvciBwb3J0IGlzIG5vdCBlbmFibGVkICovCi0JCWluZm8tPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CisJCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMTUzLDIxICszMTYyLDIxIEBACiAKIAkvKiBXYWl0IGZvciBjYXJyaWVyIGRldGVjdCBhbmQgdGhlIGxpbmUgdG8gYmVjb21lCiAJICogZnJlZSAoaS5lLiwgbm90IGluIHVzZSBieSB0aGUgY2FsbG91dCkuICBXaGlsZSB3ZSBhcmUgaW4KLQkgKiB0aGlzIGxvb3AsIGluZm8tPmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0CisJICogdGhpcyBsb29wLCBpbmZvLT5wb3J0LmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0CiAJICogY2xvc2UoKSBrbm93cyB3aGVuIHRvIGZyZWUgdGhpbmdzLiAgV2UgcmVzdG9yZSBpdCB1cG9uCiAJICogZXhpdCwgZWl0aGVyIG5vcm1hbCBvciBhYm5vcm1hbC4KIAkgKi8KIAogCXJldHZhbCA9IDA7Ci0JYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpIHsKIAkJZXh0cmFfY291bnQgPSB0cnVlOwotCQlpbmZvLT5jb3VudC0tOworCQlpbmZvLT5wb3J0LmNvdW50LS07CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKLQlpbmZvLT5ibG9ja2VkX29wZW4rKzsKKwlpbmZvLT5wb3J0LmJsb2NrZWRfb3BlbisrOwogCiAJd2hpbGUgKDEpIHsKIAkJaWYgKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkpIHsKQEAgLTMxNzksOCArMzE4OCw4IEBACiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAhKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKXsKLQkJCXJldHZhbCA9IChpbmZvLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8KKwkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKXsKKwkJCXJldHZhbCA9IChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPwogCQkJCQktRUFHQUlOIDogLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KQEAgLTMxODksNyArMzE5OCw3IEBACiAJIAlnZXRfc2lnbmFscyhpbmZvKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CiAKLSAJCWlmICghKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYKKyAJCWlmICghKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgogIAkJICAgIChkb19jbG9jYWwgfHwgKGluZm8tPnNpZ25hbHMgJiBTZXJpYWxTaWduYWxfRENEKSkgKSB7CiAgCQkJYnJlYWs7CiAJCX0KQEAgLTMyMDQsMTQgKzMyMTMsMTQgQEAKIAl9CiAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5vcGVuX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQsICZ3YWl0KTsKIAogCWlmIChleHRyYV9jb3VudCkKLQkJaW5mby0+Y291bnQrKzsKLQlpbmZvLT5ibG9ja2VkX29wZW4tLTsKKwkJaW5mby0+cG9ydC5jb3VudCsrOworCWluZm8tPnBvcnQuYmxvY2tlZF9vcGVuLS07CiAKIAlpZiAoIXJldHZhbCkKLQkJaW5mby0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKKwkJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCiAJREJHSU5GTygoIiVzIGJsb2NrX3RpbF9yZWFkeSByZWFkeSwgcmM9JWRcbiIsIHR0eS0+ZHJpdmVyLT5uYW1lLCByZXR2YWwpKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMzQ1NCwxNCArMzQ2MywxMyBAQAogCQlEQkdFUlIoKCIlcyBkZXZpY2UgYWxsb2MgZmFpbGVkIGFkYXB0ZXI9JWQgcG9ydD0lZFxuIiwKIAkJCWRyaXZlcl9uYW1lLCBhZGFwdGVyX251bSwgcG9ydF9udW0pKTsKIAl9IGVsc2UgeworCQl0dHlfcG9ydF9pbml0KCZpbmZvLT5wb3J0KTsKIAkJaW5mby0+bWFnaWMgPSBNR1NMX01BR0lDOwogCQlJTklUX1dPUksoJmluZm8tPnRhc2ssIGJoX2hhbmRsZXIpOwogCQlpbmZvLT5tYXhfZnJhbWVfc2l6ZSA9IDQwOTY7Ci0JCWluZm8tPnJhd19yeF9zaXplID0gRE1BQlVGU0laRTsKLQkJaW5mby0+Y2xvc2VfZGVsYXkgPSA1KkhaLzEwOwotCQlpbmZvLT5jbG9zaW5nX3dhaXQgPSAzMCpIWjsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+b3Blbl93YWl0KTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7CisJCWluZm8tPnJidWZfZmlsbF9sZXZlbCA9IERNQUJVRlNJWkU7CisJCWluZm8tPnBvcnQuY2xvc2VfZGVsYXkgPSA1KkhaLzEwOworCQlpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCA9IDMwKkhaOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5zdGF0dXNfZXZlbnRfd2FpdF9xKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+ZXZlbnRfd2FpdF9xKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmluZm8tPm5ldGxvY2spOwpAQCAtMzk0NiwxNSArMzk1NCw3IEBACiAKIAkvKiBzZXQgMXN0IGRlc2NyaXB0b3IgYWRkcmVzcyAqLwogCXdyX3JlZzMyKGluZm8sIFREREFSLCBpbmZvLT50YnVmc1tpbmZvLT50YnVmX3N0YXJ0XS5wZGVzYyk7Ci0Jc3dpdGNoKGluZm8tPnBhcmFtcy5tb2RlKSB7Ci0JY2FzZSBNR1NMX01PREVfUkFXOgotCWNhc2UgTUdTTF9NT0RFX01PTk9TWU5DOgotCWNhc2UgTUdTTF9NT0RFX0JJU1lOQzoKLQkJd3JfcmVnMzIoaW5mbywgVERDU1IsIEJJVDIgKyBCSVQwKTsgLyogSVJRICsgRE1BIGVuYWJsZSAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl3cl9yZWczMihpbmZvLCBURENTUiwgQklUMCk7IC8qIERNQSBlbmFibGUgKi8KLQl9CisJd3JfcmVnMzIoaW5mbywgVERDU1IsIEJJVDIgKyBCSVQwKTsgLyogSVJRICsgRE1BIGVuYWJsZSAqLwogfQogCiBzdGF0aWMgdm9pZCB0eF9zdG9wKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pCkBAIC00MTU3LDcgKzQxNTcsNyBAQAogCSAqIDAxICAgICAgZW5hYmxlCiAJICogMDAgICAgICBhdXRvLUNUUyBlbmFibGUKIAkgKi8KLQl2YWwgPSAwOworCXZhbCA9IEJJVDI7CiAKIAlzd2l0Y2goaW5mby0+cGFyYW1zLm1vZGUpIHsKIAljYXNlIE1HU0xfTU9ERV9NT05PU1lOQzogdmFsIHw9IEJJVDE0ICsgQklUMTM7IGJyZWFrOwpAQCAtNDQzMCw2ICs0NDMwLDggQEAKIAkJYnJlYWs7CiAJfQogCisJaWYgKGluZm8tPmlmX21vZGUgJiBNR1NMX0lOVEVSRkFDRV9NU0JfRklSU1QpCisJCXZhbCB8PSBCSVQ0OwogCWlmIChpbmZvLT5zaWduYWxzICYgU2VyaWFsU2lnbmFsX0RUUikKIAkJdmFsIHw9IEJJVDM7CiAJaWYgKGluZm8tPnNpZ25hbHMgJiBTZXJpYWxTaWduYWxfUlRTKQpAQCAtNDQ2OCwxNiArNDQ3MCw3IEBACiAJd2hpbGUoIWRvbmUpIHsKIAkJLyogcmVzZXQgY3VycmVudCBidWZmZXIgZm9yIHJldXNlICovCiAJCWluZm8tPnJidWZzW2ldLnN0YXR1cyA9IDA7Ci0JCXN3aXRjaChpbmZvLT5wYXJhbXMubW9kZSkgewotCQljYXNlIE1HU0xfTU9ERV9SQVc6Ci0JCWNhc2UgTUdTTF9NT0RFX01PTk9TWU5DOgotCQljYXNlIE1HU0xfTU9ERV9CSVNZTkM6Ci0JCQlzZXRfZGVzY19jb3VudChpbmZvLT5yYnVmc1tpXSwgaW5mby0+cmF3X3J4X3NpemUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzZXRfZGVzY19jb3VudChpbmZvLT5yYnVmc1tpXSwgRE1BQlVGU0laRSk7Ci0JCX0KLQorCQlzZXRfZGVzY19jb3VudChpbmZvLT5yYnVmc1tpXSwgaW5mby0+cmJ1Zl9maWxsX2xldmVsKTsKIAkJaWYgKGkgPT0gbGFzdCkKIAkJCWRvbmUgPSAxOwogCQlpZiAoKytpID09IGluZm8tPnJidWZfY291bnQpCkBAIC00NTA1LDcgKzQ0OTgsNyBAQAogCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgZnJhbWVzaXplID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwogCXVuc2lnbmVkIGNoYXIgYWRkcl9maWVsZCA9IDB4ZmY7CiAJdW5zaWduZWQgaW50IGNyY19zaXplID0gMDsKIApAQCAtNDU3NywxNSArNDU3MCwxNCBAQAogCiAjaWYgU1lOQ0xJTktfR0VORVJJQ19IRExDCiAJaWYgKGZyYW1lc2l6ZSA9PSAwKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMoaW5mby0+bmV0ZGV2KTsKLQkJc3RhdHMtPnJ4X2Vycm9ycysrOwotCQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzKys7CisJCWluZm8tPm5ldGRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWluZm8tPm5ldGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJfQogI2VuZGlmCiAKIAlEQkdCSCgoIiVzIHJ4IGZyYW1lIHN0YXR1cz0lMDRYIHNpemU9JWRcbiIsCiAJCWluZm8tPmRldmljZV9uYW1lLCBzdGF0dXMsIGZyYW1lc2l6ZSkpOwotCURCR0RBVEEoaW5mbywgaW5mby0+cmJ1ZnNbc3RhcnRdLmJ1ZiwgbWluX3QoaW50LCBmcmFtZXNpemUsIERNQUJVRlNJWkUpLCAicngiKTsKKwlEQkdEQVRBKGluZm8sIGluZm8tPnJidWZzW3N0YXJ0XS5idWYsIG1pbl90KGludCwgZnJhbWVzaXplLCBpbmZvLT5yYnVmX2ZpbGxfbGV2ZWwpLCAicngiKTsKIAogCWlmIChmcmFtZXNpemUpIHsKIAkJaWYgKCEoaW5mby0+cGFyYW1zLmNyY190eXBlICYgSERMQ19DUkNfUkVUVVJOX0VYKSkgewpAQCAtNDYwNSw3ICs0NTk3LDcgQEAKIAkJCWluZm8tPmljb3VudC5yeG9rKys7CiAKIAkJCXdoaWxlKGNvcHlfY291bnQpIHsKLQkJCQlpbnQgcGFydGlhbF9jb3VudCA9IG1pbihjb3B5X2NvdW50LCBETUFCVUZTSVpFKTsKKwkJCQlpbnQgcGFydGlhbF9jb3VudCA9IG1pbl90KGludCwgY29weV9jb3VudCwgaW5mby0+cmJ1Zl9maWxsX2xldmVsKTsKIAkJCQltZW1jcHkocCwgaW5mby0+cmJ1ZnNbaV0uYnVmLCBwYXJ0aWFsX2NvdW50KTsKIAkJCQlwICs9IHBhcnRpYWxfY291bnQ7CiAJCQkJY29weV9jb3VudCAtPSBwYXJ0aWFsX2NvdW50OwpAQCAtNDY1Niw3ICs0NjQ4LDcgQEAKIAlEQkdEQVRBKGluZm8sIGluZm8tPnJidWZzW2ldLmJ1ZiwgY291bnQsICJyeCIpOwogCURCR0lORk8oKCJyeF9nZXRfYnVmIHNpemU9JWRcbiIsIGNvdW50KSk7CiAJaWYgKGNvdW50KQotCQlsZGlzY19yZWNlaXZlX2J1ZihpbmZvLT50dHksIGluZm8tPnJidWZzW2ldLmJ1ZiwKKwkJbGRpc2NfcmVjZWl2ZV9idWYoaW5mby0+cG9ydC50dHksIGluZm8tPnJidWZzW2ldLmJ1ZiwKIAkJCQkgIGluZm8tPmZsYWdfYnVmLCBjb3VudCk7CiAJZnJlZV9yYnVmcyhpbmZvLCBpLCBpKTsKIAlyZXR1cm4gdHJ1ZTsKQEAgLTQ2OTcsNiArNDY4OSw1NiBAQAogfQogCiAvKgorICogcmV0dXJuIG51bWJlciBvZiBieXRlcyBpbiB1bnNlbnQgdHJhbnNtaXQgRE1BIGJ1ZmZlcnMKKyAqIGFuZCB0aGUgc2VyaWFsIGNvbnRyb2xsZXIgdHggRklGTworICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRidWZfYnl0ZXMoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgdG90YWxfY291bnQgPSAwOworCXVuc2lnbmVkIGludCBpID0gaW5mby0+dGJ1Zl9jdXJyZW50OworCXVuc2lnbmVkIGludCByZWdfdmFsdWU7CisJdW5zaWduZWQgaW50IGNvdW50OworCXVuc2lnbmVkIGludCBhY3RpdmVfYnVmX2NvdW50ID0gMDsKKworCS8qCisJICogQWRkIGRlc2NyaXB0b3IgY291bnRzIGZvciBhbGwgdHggRE1BIGJ1ZmZlcnMuCisJICogSWYgY291bnQgaXMgemVybyAoY2xlYXJlZCBieSBETUEgY29udHJvbGxlciBhZnRlciByZWFkKSwKKwkgKiB0aGUgYnVmZmVyIGlzIGNvbXBsZXRlIG9yIGlzIGFjdGl2ZWx5IGJlaW5nIHJlYWQgZnJvbS4KKwkgKgorCSAqIFJlY29yZCBidWZfY291bnQgb2YgbGFzdCBidWZmZXIgd2l0aCB6ZXJvIGNvdW50IHN0YXJ0aW5nCisJICogZnJvbSBjdXJyZW50IHJpbmcgcG9zaXRpb24uIGJ1Zl9jb3VudCBpcyBtaXJyb3IKKwkgKiBjb3B5IG9mIGNvdW50IGFuZCBpcyBub3QgY2xlYXJlZCBieSBzZXJpYWwgY29udHJvbGxlci4KKwkgKiBJZiBETUEgY29udHJvbGxlciBpcyBhY3RpdmUsIHRoYXQgYnVmZmVyIGlzIGFjdGl2ZWx5CisJICogYmVpbmcgcmVhZCBzbyBhZGQgdG8gdG90YWwuCisJICovCisJZG8geworCQljb3VudCA9IGRlc2NfY291bnQoaW5mby0+dGJ1ZnNbaV0pOworCQlpZiAoY291bnQpCisJCQl0b3RhbF9jb3VudCArPSBjb3VudDsKKwkJZWxzZSBpZiAoIXRvdGFsX2NvdW50KQorCQkJYWN0aXZlX2J1Zl9jb3VudCA9IGluZm8tPnRidWZzW2ldLmJ1Zl9jb3VudDsKKwkJaWYgKCsraSA9PSBpbmZvLT50YnVmX2NvdW50KQorCQkJaSA9IDA7CisJfSB3aGlsZSAoaSAhPSBpbmZvLT50YnVmX2N1cnJlbnQpOworCisJLyogcmVhZCB0eCBETUEgc3RhdHVzIHJlZ2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmRfcmVnMzIoaW5mbywgVERDU1IpOworCisJLyogaWYgdHggRE1BIGFjdGl2ZSwgbGFzdCB6ZXJvIGNvdW50IGJ1ZmZlciBpcyBpbiB1c2UgKi8KKwlpZiAocmVnX3ZhbHVlICYgQklUMCkKKwkJdG90YWxfY291bnQgKz0gYWN0aXZlX2J1Zl9jb3VudDsKKworCS8qIGFkZCB0eCBGSUZPIGNvdW50ID0gcmVnX3ZhbHVlWzE1Li44XSAqLworCXRvdGFsX2NvdW50ICs9IChyZWdfdmFsdWUgPj4gOCkgJiAweGZmOworCisJLyogaWYgdHJhbnNtaXR0ZXIgYWN0aXZlIGFkZCBvbmUgYnl0ZSBmb3Igc2hpZnQgcmVnaXN0ZXIgKi8KKwlpZiAoaW5mby0+dHhfYWN0aXZlKQorCQl0b3RhbF9jb3VudCsrOworCisJcmV0dXJuIHRvdGFsX2NvdW50OworfQorCisvKgogICogbG9hZCB0cmFuc21pdCBETUEgYnVmZmVyKHMpIHdpdGggZGF0YQogICovCiBzdGF0aWMgdm9pZCB0eF9sb2FkKHN0cnVjdCBzbGd0X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCkBAIC00NzM0LDYgKzQ3NzYsNyBAQAogCQkJc2V0X2Rlc2NfZW9mKCpkLCAwKTsKIAogCQlzZXRfZGVzY19jb3VudCgqZCwgY291bnQpOworCQlkLT5idWZfY291bnQgPSBjb3VudDsKIAl9CiAKIAlpbmZvLT50YnVmX2N1cnJlbnQgPSBpOwpAQCAtNDc2NSwxMSArNDgwOCwxMSBAQAogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCB0dHlfc3RydWN0ICpvbGR0dHkgPSBpbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKm9sZHR0eSA9IGluZm8tPnBvcnQudHR5OwogCXUzMiBzcGVlZCA9IGluZm8tPnBhcmFtcy5kYXRhX3JhdGU7CiAKIAlpbmZvLT5wYXJhbXMuZGF0YV9yYXRlID0gOTIxNjAwOwotCWluZm8tPnR0eSA9IE5VTEw7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAlhc3luY19tb2RlKGluZm8pOwpAQCAtNDc5Nyw3ICs0ODQwLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKIAogCWluZm8tPnBhcmFtcy5kYXRhX3JhdGUgPSBzcGVlZDsKLQlpbmZvLT50dHkgPSBvbGR0dHk7CisJaW5mby0+cG9ydC50dHkgPSBvbGR0dHk7CiAKIAlpbmZvLT5pbml0X2Vycm9yID0gaW5mby0+aXJxX29jY3VycmVkID8gMCA6IERpYWdTdGF0dXNfSXJxRmFpbHVyZTsKIAlyZXR1cm4gaW5mby0+aXJxX29jY3VycmVkID8gMCA6IC1FTk9ERVY7CkBAIC00ODM3LDcgKzQ4ODAsNyBAQAogCWludCByYyA9IC1FTk9ERVY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXN0cnVjdCB0dHlfc3RydWN0ICpvbGR0dHkgPSBpbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKm9sZHR0eSA9IGluZm8tPnBvcnQudHR5OwogCU1HU0xfUEFSQU1TIHBhcmFtczsKIAogCW1lbWNweSgmcGFyYW1zLCAmaW5mby0+cGFyYW1zLCBzaXplb2YocGFyYW1zKSk7CkBAIC00ODQ1LDcgKzQ4ODgsNyBAQAogCWluZm8tPnBhcmFtcy5tb2RlID0gTUdTTF9NT0RFX0FTWU5DOwogCWluZm8tPnBhcmFtcy5kYXRhX3JhdGUgPSA5MjE2MDA7CiAJaW5mby0+cGFyYW1zLmxvb3BiYWNrID0gMTsKLQlpbmZvLT50dHkgPSBOVUxMOworCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKIAogCS8qIGJ1aWxkIGFuZCBzZW5kIHRyYW5zbWl0IGZyYW1lICovCiAJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgVEVTVEZSQU1FU0laRTsgKytjb3VudCkKQEAgLTQ4ODMsNyArNDkyNiw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CiAKIAltZW1jcHkoJmluZm8tPnBhcmFtcywgJnBhcmFtcywgc2l6ZW9mKGluZm8tPnBhcmFtcykpOwotCWluZm8tPnR0eSA9IG9sZHR0eTsKKwlpbmZvLT5wb3J0LnR0eSA9IG9sZHR0eTsKIAogCWluZm8tPmluaXRfZXJyb3IgPSByYyA/IERpYWdTdGF0dXNfRG1hRmFpbHVyZSA6IDA7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKaW5kZXggYmVjNTQ4NjYuLmMwNDkwY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwpAQCAtMTUxLDE4ICsxNTEsMTUgQEAKIHR5cGVkZWYgc3RydWN0IF9zeW5jbGlua21wX2luZm8gewogCXZvaWQgKmlmX3B0cjsJCQkJLyogR2VuZXJhbCBwdXJwb3NlIHBvaW50ZXIgKHVzZWQgYnkgU1BQUCkgKi8KIAlpbnQJCQltYWdpYzsKLQlpbnQJCQlmbGFnczsKLQlpbnQJCQljb3VudDsJCS8qIGNvdW50IG9mIG9wZW5zICovCisJc3RydWN0IHR0eV9wb3J0CQlwb3J0OwogCWludAkJCWxpbmU7CiAJdW5zaWduZWQgc2hvcnQJCWNsb3NlX2RlbGF5OwogCXVuc2lnbmVkIHNob3J0CQljbG9zaW5nX3dhaXQ7CS8qIHRpbWUgdG8gd2FpdCBiZWZvcmUgY2xvc2luZyAqLwogCiAJc3RydWN0IG1nc2xfaWNvdW50CWljb3VudDsKIAotCXN0cnVjdCB0dHlfc3RydWN0IAkqdHR5OwogCWludAkJCXRpbWVvdXQ7CiAJaW50CQkJeF9jaGFyOwkJLyogeG9uL3hvZmYgY2hhcmFjdGVyICovCi0JaW50CQkJYmxvY2tlZF9vcGVuOwkvKiAjIG9mIGJsb2NrZWQgb3BlbnMgKi8KIAl1MTYJCQlyZWFkX3N0YXR1c19tYXNrMTsgIC8qIGJyZWFrIGRldGVjdGlvbiAoU1IxIGluZGljYXRpb25zKSAqLwogCXUxNgkJCXJlYWRfc3RhdHVzX21hc2syOyAgLyogcGFyaXR5L2ZyYW1pbmcvb3ZlcnVuIChTUjIgaW5kaWNhdGlvbnMpICovCiAJdW5zaWduZWQgY2hhciAJCWlnbm9yZV9zdGF0dXNfbWFzazE7ICAvKiBicmVhayBkZXRlY3Rpb24gKFNSMSBpbmRpY2F0aW9ucykgKi8KQEAgLTE3Miw5ICsxNjksNiBAQAogCWludAkJCXR4X2dldDsKIAlpbnQJCQl0eF9jb3VudDsKIAotCXdhaXRfcXVldWVfaGVhZF90CW9wZW5fd2FpdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OwotCiAJd2FpdF9xdWV1ZV9oZWFkX3QJc3RhdHVzX2V2ZW50X3dhaXRfcTsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlldmVudF93YWl0X3E7CiAJc3RydWN0IHRpbWVyX2xpc3QJdHhfdGltZXI7CS8qIEhETEMgdHJhbnNtaXQgdGltZW91dCB0aW1lciAqLwpAQCAtNDYyLDEzICs0NTYsMTMgQEAKICAqIC50ZXh0IHNlY3Rpb24gYWRkcmVzcyBhbmQgYnJlYWtwb2ludCBvbiBtb2R1bGUgbG9hZC4KICAqIFRoaXMgaXMgdXNlZnVsIGZvciB1c2Ugd2l0aCBnZGIgYW5kIGFkZC1zeW1ib2wtZmlsZSBjb21tYW5kLgogICovCi1zdGF0aWMgaW50IGJyZWFrX29uX2xvYWQ9MDsKK3N0YXRpYyBpbnQgYnJlYWtfb25fbG9hZCA9IDA7CiAKIC8qCiAgKiBEcml2ZXIgbWFqb3IgbnVtYmVyLCBkZWZhdWx0cyB0byB6ZXJvIHRvIGdldCBhdXRvCiAgKiBhc3NpZ25lZCBtYWpvciBudW1iZXIuIE1heSBiZSBmb3JjZWQgYXMgbW9kdWxlIHBhcmFtZXRlci4KICAqLwotc3RhdGljIGludCB0dHltYWpvcj0wOworc3RhdGljIGludCB0dHltYWpvciA9IDA7CiAKIC8qCiAgKiBBcnJheSBvZiB1c2VyIHNwZWNpZmllZCBvcHRpb25zIGZvciBJU0EgYWRhcHRlcnMuCkBAIC01MzMsNyArNTI3LDcgQEAKIHN0YXRpYyBpbnQgIGNoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIHRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKIHN0YXRpYyB2b2lkIHVudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwotc3RhdGljIHZvaWQgc2V0X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSk7CitzdGF0aWMgaW50IHNldF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpOwogCiAjaWYgU1lOQ0xJTktfR0VORVJJQ19IRExDCiAjZGVmaW5lIGRldl90b19wb3J0KEQpIChkZXZfdG9faGRsYyhEKS0+cHJpdikKQEAgLTU1OCw3ICs1NTIsNyBAQAogc3RhdGljIGludCAgdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIGludCAgdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKLXN0YXRpYyB2b2lkIHNldF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpOworc3RhdGljIGludCAgc2V0X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSk7CiAKIHN0YXRpYyB2b2lkIGFkZF9kZXZpY2UoU0xNUF9JTkZPICppbmZvKTsKIHN0YXRpYyB2b2lkIGRldmljZV9pbml0KGludCBhZGFwdGVyX251bSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpOwpAQCAtNzEyLDggKzcwNiw4IEBACiAJCXJldHVybjsKIAlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKIAlpZiAobGQpIHsKLQkJaWYgKGxkLT5yZWNlaXZlX2J1ZikKLQkJCWxkLT5yZWNlaXZlX2J1Zih0dHksIGRhdGEsIGZsYWdzLCBjb3VudCk7CisJCWlmIChsZC0+b3BzLT5yZWNlaXZlX2J1ZikKKwkJCWxkLT5vcHMtPnJlY2VpdmVfYnVmKHR0eSwgZGF0YSwgZmxhZ3MsIGNvdW50KTsKIAkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAl9CiB9CkBAIC03NDcsMjIgKzc0MSwyMiBAQAogCX0KIAogCXR0eS0+ZHJpdmVyX2RhdGEgPSBpbmZvOwotCWluZm8tPnR0eSA9IHR0eTsKKwlpbmZvLT5wb3J0LnR0eSA9IHR0eTsKIAogCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCQlwcmludGsoIiVzKCVkKTolcyBvcGVuKCksIG9sZCByZWYgY291bnQgPSAlZFxuIiwKLQkJCSBfX0ZJTEVfXyxfX0xJTkVfXyx0dHktPmRyaXZlci0+bmFtZSwgaW5mby0+Y291bnQpOworCQkJIF9fRklMRV9fLF9fTElORV9fLHR0eS0+ZHJpdmVyLT5uYW1lLCBpbmZvLT5wb3J0LmNvdW50KTsKIAogCS8qIElmIHBvcnQgaXMgY2xvc2luZywgc2lnbmFsIGNhbGxlciB0byB0cnkgYWdhaW4gKi8KLQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpewotCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKQotCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmaW5mby0+Y2xvc2Vfd2FpdCk7Ci0JCXJldHZhbCA9ICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/CisJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpeworCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpCisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5wb3J0LmNsb3NlX3dhaXQpOworCQlyZXR2YWwgPSAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/CiAJCQktRUFHQUlOIDogLUVSRVNUQVJUU1lTKTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCWluZm8tPnR0eS0+bG93X2xhdGVuY3kgPSAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKKwlpbmZvLT5wb3J0LnR0eS0+bG93X2xhdGVuY3kgPSAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPm5ldGxvY2ssIGZsYWdzKTsKIAlpZiAoaW5mby0+bmV0Y291bnQpIHsKQEAgLTc3MCwxMCArNzY0LDEwIEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPm5ldGxvY2ssIGZsYWdzKTsKIAkJZ290byBjbGVhbnVwOwogCX0KLQlpbmZvLT5jb3VudCsrOworCWluZm8tPnBvcnQuY291bnQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5uZXRsb2NrLCBmbGFncyk7CiAKLQlpZiAoaW5mby0+Y291bnQgPT0gMSkgeworCWlmIChpbmZvLT5wb3J0LmNvdW50ID09IDEpIHsKIAkJLyogMXN0IG9wZW4gb24gdGhpcyBkZXZpY2UsIGluaXQgaGFyZHdhcmUgKi8KIAkJcmV0dmFsID0gc3RhcnR1cChpbmZvKTsKIAkJaWYgKHJldHZhbCA8IDApCkBAIC03OTYsOSArNzkwLDkgQEAKIGNsZWFudXA6CiAJaWYgKHJldHZhbCkgewogCQlpZiAodHR5LT5jb3VudCA9PSAxKQotCQkJaW5mby0+dHR5ID0gTlVMTDsgLyogdHR5IGxheWVyIHdpbGwgcmVsZWFzZSB0dHkgc3RydWN0ICovCi0JCWlmKGluZm8tPmNvdW50KQotCQkJaW5mby0+Y291bnQtLTsKKwkJCWluZm8tPnBvcnQudHR5ID0gTlVMTDsgLyogdHR5IGxheWVyIHdpbGwgcmVsZWFzZSB0dHkgc3RydWN0ICovCisJCWlmKGluZm8tPnBvcnQuY291bnQpCisJCQlpbmZvLT5wb3J0LmNvdW50LS07CiAJfQogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTgxNiwzMyArODEwLDMzIEBACiAKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCIlcyglZCk6JXMgY2xvc2UoKSBlbnRyeSwgY291bnQ9JWRcbiIsCi0JCQkgX19GSUxFX18sX19MSU5FX18sIGluZm8tPmRldmljZV9uYW1lLCBpbmZvLT5jb3VudCk7CisJCQkgX19GSUxFX18sX19MSU5FX18sIGluZm8tPmRldmljZV9uYW1lLCBpbmZvLT5wb3J0LmNvdW50KTsKIAotCWlmICghaW5mby0+Y291bnQpCisJaWYgKCFpbmZvLT5wb3J0LmNvdW50KQogCQlyZXR1cm47CiAKIAlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKCh0dHktPmNvdW50ID09IDEpICYmIChpbmZvLT5jb3VudCAhPSAxKSkgeworCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAoaW5mby0+cG9ydC5jb3VudCAhPSAxKSkgewogCQkvKgogCQkgKiB0dHktPmNvdW50IGlzIDEgYW5kIHRoZSB0dHkgc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQuCi0JCSAqIGluZm8tPmNvdW50IHNob3VsZCBiZSBvbmUgaW4gdGhpcyBjYXNlLgorCQkgKiBpbmZvLT5wb3J0LmNvdW50IHNob3VsZCBiZSBvbmUgaW4gdGhpcyBjYXNlLgogCQkgKiBpZiBpdCdzIG5vdCwgY29ycmVjdCBpdCBzbyB0aGF0IHRoZSBwb3J0IGlzIHNodXRkb3duLgogCQkgKi8KIAkJcHJpbnRrKCIlcyglZCk6JXMgY2xvc2U6IGJhZCByZWZjb3VudDsgdHR5LT5jb3VudCBpcyAxLCAiCi0JCSAgICAgICAiaW5mby0+Y291bnQgaXMgJWRcbiIsCi0JCQkgX19GSUxFX18sX19MSU5FX18sIGluZm8tPmRldmljZV9uYW1lLCBpbmZvLT5jb3VudCk7Ci0JCWluZm8tPmNvdW50ID0gMTsKKwkJICAgICAgICJpbmZvLT5wb3J0LmNvdW50IGlzICVkXG4iLAorCQkJIF9fRklMRV9fLF9fTElORV9fLCBpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cG9ydC5jb3VudCk7CisJCWluZm8tPnBvcnQuY291bnQgPSAxOwogCX0KIAotCWluZm8tPmNvdW50LS07CisJaW5mby0+cG9ydC5jb3VudC0tOwogCiAJLyogaWYgYXQgbGVhc3Qgb25lIG9wZW4gcmVtYWluaW5nLCBsZWF2ZSBoYXJkd2FyZSBhY3RpdmUgKi8KLQlpZiAoaW5mby0+Y291bnQpCisJaWYgKGluZm8tPnBvcnQuY291bnQpCiAJCWdvdG8gY2xlYW51cDsKIAotCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CisJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOwogCiAJLyogc2V0IHR0eS0+Y2xvc2luZyB0byBub3RpZnkgbGluZSBkaXNjaXBsaW5lIHRvCiAJICogb25seSBwcm9jZXNzIFhPTi9YT0ZGIGNoYXJhY3RlcnMuIE9ubHkgdGhlIE5fVFRZCkBAIC04NTIsMTQgKzg0NiwxNCBAQAogCiAJLyogd2FpdCBmb3IgdHJhbnNtaXQgZGF0YSB0byBjbGVhciBhbGwgbGF5ZXJzICovCiAKLQlpZiAoaW5mby0+Y2xvc2luZ193YWl0ICE9IEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FKSB7CisJaWYgKGluZm8tPnBvcnQuY2xvc2luZ193YWl0ICE9IEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FKSB7CiAJCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCQkJcHJpbnRrKCIlcyglZCk6JXMgY2xvc2UoKSBjYWxsaW5nIHR0eV93YWl0X3VudGlsX3NlbnRcbiIsCiAJCQkJIF9fRklMRV9fLF9fTElORV9fLCBpbmZvLT5kZXZpY2VfbmFtZSApOwotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgaW5mby0+Y2xvc2luZ193YWl0KTsKKwkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIGluZm8tPnBvcnQuY2xvc2luZ193YWl0KTsKIAl9CiAKLSAJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpCisgCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpCiAgCQl3YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT50aW1lb3V0KTsKIAogCWZsdXNoX2J1ZmZlcih0dHkpOwpAQCAtODY5LDIzICs4NjMsMjMgQEAKIAlzaHV0ZG93bihpbmZvKTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JaW5mby0+dHR5ID0gTlVMTDsKKwlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CiAKLQlpZiAoaW5mby0+YmxvY2tlZF9vcGVuKSB7Ci0JCWlmIChpbmZvLT5jbG9zZV9kZWxheSkgewotCQkJbXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2VjcyhpbmZvLT5jbG9zZV9kZWxheSkpOworCWlmIChpbmZvLT5wb3J0LmJsb2NrZWRfb3BlbikgeworCQlpZiAoaW5mby0+cG9ydC5jbG9zZV9kZWxheSkgeworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2VjcyhpbmZvLT5wb3J0LmNsb3NlX2RlbGF5KSk7CiAJCX0KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKIAl9CiAKLQlpbmZvLT5mbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkV8QVNZTkNfQ0xPU0lORyk7CisJaW5mby0+cG9ydC5mbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkV8QVNZTkNfQ0xPU0lORyk7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmNsb3NlX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5jbG9zZV93YWl0KTsKIAogY2xlYW51cDoKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCIlcyglZCk6JXMgY2xvc2UoKSBleGl0LCBjb3VudD0lZFxuIiwgX19GSUxFX18sX19MSU5FX18sCi0JCQl0dHktPmRyaXZlci0+bmFtZSwgaW5mby0+Y291bnQpOworCQkJdHR5LT5kcml2ZXItPm5hbWUsIGluZm8tPnBvcnQuY291bnQpOwogfQogCiAvKiBDYWxsZWQgYnkgdHR5X2hhbmd1cCgpIHdoZW4gYSBoYW5ndXAgaXMgc2lnbmFsZWQuCkBAIC05MDUsMTEgKzg5OSwxMSBAQAogCWZsdXNoX2J1ZmZlcih0dHkpOwogCXNodXRkb3duKGluZm8pOwogCi0JaW5mby0+Y291bnQgPSAwOwotCWluZm8tPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwotCWluZm8tPnR0eSA9IE5VTEw7CisJaW5mby0+cG9ydC5jb3VudCA9IDA7CisJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKKwlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiB9CiAKIC8qIFNldCBuZXcgdGVybWlvcyBzZXR0aW5ncwpAQCAtMTEyMyw3ICsxMTE3LDcgQEAKIAogCWxvY2tfa2VybmVsKCk7CiAKLQlpZiAoIShpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKKwlpZiAoIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQogCQlnb3RvIGV4aXQ7CiAKIAlvcmlnX2ppZmZpZXMgPSBqaWZmaWVzOwpAQCAtMTU5Myw3ICsxNTg3LDcgQEAKIC8qIHNldCBvciBjbGVhciB0cmFuc21pdCBicmVhayBjb25kaXRpb24KICAqIGJyZWFrX3N0YXRlCS0xPXNldCBicmVhayBjb25kaXRpb24sIDA9Y2xlYXIKICAqLwotc3RhdGljIHZvaWQgc2V0X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyBpbnQgc2V0X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIFJlZ1ZhbHVlOwogCVNMTVBfSU5GTyAqIGluZm8gPSAoU0xNUF9JTkZPICopdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTE2MDQsNyArMTU5OCw3IEBACiAJCQkgX19GSUxFX18sX19MSU5FX18sIGluZm8tPmRldmljZV9uYW1lLCBicmVha19zdGF0ZSk7CiAKIAlpZiAoc2FuaXR5X2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgInNldF9icmVhayIpKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOwogCVJlZ1ZhbHVlID0gcmVhZF9yZWcoaW5mbywgQ1RMKTsKQEAgLTE2MTQsNiArMTYwOCw3IEBACiAJCVJlZ1ZhbHVlICY9IH5CSVQzOwogCXdyaXRlX3JlZyhpbmZvLCBDVEwsIFJlZ1ZhbHVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKKwlyZXR1cm4gMDsKIH0KIAogI2lmIFNZTkNMSU5LX0dFTkVSSUNfSERMQwpAQCAtMTYzNiw3ICsxNjMxLDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBuZXdfY3JjdHlwZTsKIAogCS8qIHJldHVybiBlcnJvciBpZiBUVFkgaW50ZXJmYWNlIG9wZW4gKi8KLQlpZiAoaW5mby0+Y291bnQpCisJaWYgKGluZm8tPnBvcnQuY291bnQpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlzd2l0Y2ggKGVuY29kaW5nKQpAQCAtMTY3OCw3ICsxNjczLDYgQEAKIHN0YXRpYyBpbnQgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJU0xNUF9JTkZPICppbmZvID0gZGV2X3RvX3BvcnQoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQpAQCAtMTY5Miw4ICsxNjg2LDggQEAKIAl0eF9sb2FkX2RtYV9idWZmZXIoaW5mbywgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKIAkvKiB1cGRhdGUgbmV0d29yayBzdGF0aXN0aWNzICovCi0Jc3RhdHMtPnR4X3BhY2tldHMrKzsKLQlzdGF0cy0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCS8qIGRvbmUgd2l0aCBzb2NrZXQgYnVmZmVyLCBzbyBmcmVlIGl0ICovCiAJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTczMyw3ICsxNzI3LDcgQEAKIAogCS8qIGFyYml0cmF0ZSBiZXR3ZWVuIG5ldHdvcmsgYW5kIHR0eSBvcGVucyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5uZXRsb2NrLCBmbGFncyk7Ci0JaWYgKGluZm8tPmNvdW50ICE9IDAgfHwgaW5mby0+bmV0Y291bnQgIT0gMCkgeworCWlmIChpbmZvLT5wb3J0LmNvdW50ICE9IDAgfHwgaW5mby0+bmV0Y291bnQgIT0gMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaGRsY19vcGVuIHJldHVybmluZyBidXN5XG4iLCBkZXYtPm5hbWUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5uZXRsb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0xODE5LDcgKzE4MTMsNyBAQAogCQlwcmludGsoIiVzOmhkbGNkZXZfaW9jdGwoJXMpXG4iLF9fRklMRV9fLGRldi0+bmFtZSk7CiAKIAkvKiByZXR1cm4gZXJyb3IgaWYgVFRZIGludGVyZmFjZSBvcGVuICovCi0JaWYgKGluZm8tPmNvdW50KQorCWlmIChpbmZvLT5wb3J0LmNvdW50KQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGNtZCAhPSBTSU9DV0FOREVWKQpAQCAtMTkwOSwxNCArMTkwMywxMyBAQAogc3RhdGljIHZvaWQgaGRsY2Rldl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJU0xNUF9JTkZPICppbmZvID0gZGV2X3RvX3BvcnQoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCQlwcmludGsoImhkbGNkZXZfdHhfdGltZW91dCglcylcbiIsZGV2LT5uYW1lKTsKIAotCXN0YXRzLT50eF9lcnJvcnMrKzsKLQlzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLGZsYWdzKTsKIAl0eF9zdG9wKGluZm8pOwpAQCAtMTk0OSwyNyArMTk0MiwyNyBAQAogewogCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5uZXRkZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhkZXYpOwogCiAJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCiAJCXByaW50aygiaGRsY2Rldl9yeCglcylcbiIsZGV2LT5uYW1lKTsKIAogCWlmIChza2IgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBjYW4ndCBhbGxvYyBza2IsIGRyb3BwaW5nIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKLQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogY2FuJ3QgYWxsb2Mgc2tiLCBkcm9wcGluZyBwYWNrZXRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAotCW1lbWNweShza2JfcHV0KHNrYiwgc2l6ZSksYnVmLHNpemUpOworCW1lbWNweShza2JfcHV0KHNrYiwgc2l6ZSksIGJ1Ziwgc2l6ZSk7CiAKLQlza2ItPnByb3RvY29sID0gaGRsY190eXBlX3RyYW5zKHNrYiwgaW5mby0+bmV0ZGV2KTsKKwlza2ItPnByb3RvY29sID0gaGRsY190eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IHNpemU7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJbmV0aWZfcngoc2tiKTsKIAotCWluZm8tPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAogLyoqCkBAIC0yMTI4LDcgKzIxMjEsNyBAQAogCiBzdGF0aWMgdm9pZCBiaF90cmFuc21pdChTTE1QX0lORk8gKmluZm8pCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAKIAlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0JIICkKIAkJcHJpbnRrKCAiJXMoJWQpOiVzIGJoX3RyYW5zbWl0KCkgZW50cnlcbiIsCkBAIC0yMTc4LDcgKzIxNzEsNyBAQAogCiBzdGF0aWMgdm9pZCBpc3JfcnhpbnQoU0xNUF9JTkZPICogaW5mbykKIHsKLSAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKyAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwogIAlzdHJ1Y3QJbWdzbF9pY291bnQgKmljb3VudCA9ICZpbmZvLT5pY291bnQ7CiAJdW5zaWduZWQgY2hhciBzdGF0dXMgPSByZWFkX3JlZyhpbmZvLCBTUjEpICYgaW5mby0+aWUxX3ZhbHVlICYgKEZMR0QgKyBJRExEICsgQ0RDRCArIEJSS0QpOwogCXVuc2lnbmVkIGNoYXIgc3RhdHVzMiA9IHJlYWRfcmVnKGluZm8sIFNSMikgJiBpbmZvLT5pZTJfdmFsdWUgJiBPVlJOOwpAQCAtMjIwNSw3ICsyMTk4LDcgQEAKIAkJCQlpZiAoIShzdGF0dXMgJiBpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sxKSkgewogCQkJCQlpZiAoaW5mby0+cmVhZF9zdGF0dXNfbWFzazEgJiBCUktEKSB7CiAJCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9CUkVBSyk7Ci0JCQkJCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TQUspCisJCQkJCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NBSykKIAkJCQkJCQlkb19TQUsodHR5KTsKIAkJCQkJfQogCQkJCX0KQEAgLTIyMzksNyArMjIzMiw3IEBACiB7CiAJdTE2IHN0YXR1czsKIAl1bnNpZ25lZCBjaGFyIERhdGFCeXRlOwotIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAgCXN0cnVjdAltZ3NsX2ljb3VudCAqaWNvdW50ID0gJmluZm8tPmljb3VudDsKIAogCWlmICggZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSVNSICkKQEAgLTIzNTIsNyArMjM0NSw3IEBACiAJCWVsc2UKICNlbmRpZgogCQl7Ci0JCQlpZiAoaW5mby0+dHR5ICYmIChpbmZvLT50dHktPnN0b3BwZWQgfHwgaW5mby0+dHR5LT5od19zdG9wcGVkKSkgeworCQkJaWYgKGluZm8tPnBvcnQudHR5ICYmIChpbmZvLT5wb3J0LnR0eS0+c3RvcHBlZCB8fCBpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCkpIHsKIAkJCQl0eF9zdG9wKGluZm8pOwogCQkJCXJldHVybjsKIAkJCX0KQEAgLTI0MDcsNyArMjQwMCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoaW5mby0+dHR5ICYmIChpbmZvLT50dHktPnN0b3BwZWQgfHwgaW5mby0+dHR5LT5od19zdG9wcGVkKSkgeworCWlmIChpbmZvLT5wb3J0LnR0eSAmJiAoaW5mby0+cG9ydC50dHktPnN0b3BwZWQgfHwgaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQpKSB7CiAJCXR4X3N0b3AoaW5mbyk7CiAJCXJldHVybjsKIAl9CkBAIC0yNTU0LDI5ICsyNTQ3LDI5IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+c3RhdHVzX2V2ZW50X3dhaXRfcSk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZXZlbnRfd2FpdF9xKTsKIAotCQlpZiAoIChpbmZvLT5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSAmJgorCQlpZiAoIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpICYmCiAJCSAgICAgKHN0YXR1cyAmIE1JU0NTVEFUVVNfRENEX0xBVENIRUQpICkgewogCQkJaWYgKCBkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JU1IgKQogCQkJCXByaW50aygiJXMgQ0Qgbm93ICVzLi4uIiwgaW5mby0+ZGV2aWNlX25hbWUsCiAJCQkJICAgICAgIChzdGF0dXMgJiBTZXJpYWxTaWduYWxfRENEKSA/ICJvbiIgOiAib2ZmIik7CiAJCQlpZiAoc3RhdHVzICYgU2VyaWFsU2lnbmFsX0RDRCkKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAJCQllbHNlIHsKIAkJCQlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lTUiApCiAJCQkJCXByaW50aygiZG9pbmcgc2VyaWFsIGhhbmd1cC4uLiIpOwotCQkJCWlmIChpbmZvLT50dHkpCi0JCQkJCXR0eV9oYW5ndXAoaW5mby0+dHR5KTsKKwkJCQlpZiAoaW5mby0+cG9ydC50dHkpCisJCQkJCXR0eV9oYW5ndXAoaW5mby0+cG9ydC50dHkpOwogCQkJfQogCQl9CiAKLQkJaWYgKCAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykgJiYKKwkJaWYgKCAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSAmJgogCQkgICAgIChzdGF0dXMgJiBNSVNDU1RBVFVTX0NUU19MQVRDSEVEKSApIHsKLQkJCWlmICggaW5mby0+dHR5ICkgewotCQkJCWlmIChpbmZvLT50dHktPmh3X3N0b3BwZWQpIHsKKwkJCWlmICggaW5mby0+cG9ydC50dHkgKSB7CisJCQkJaWYgKGluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkKSB7CiAJCQkJCWlmIChzdGF0dXMgJiBTZXJpYWxTaWduYWxfQ1RTKSB7CiAJCQkJCQlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lTUiApCiAJCQkJCQkJcHJpbnRrKCJDVFMgdHggc3RhcnQuLi4iKTsKLQkJCSAJCQlpbmZvLT50dHktPmh3X3N0b3BwZWQgPSAwOworCQkJIAkJCWluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkID0gMDsKIAkJCQkJCXR4X3N0YXJ0KGluZm8pOwogCQkJCQkJaW5mby0+cGVuZGluZ19iaCB8PSBCSF9UUkFOU01JVDsKIAkJCQkJCXJldHVybjsKQEAgLTI1ODUsNyArMjU3OCw3IEBACiAJCQkJCWlmICghKHN0YXR1cyAmIFNlcmlhbFNpZ25hbF9DVFMpKSB7CiAJCQkJCQlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lTUiApCiAJCQkJCQkJcHJpbnRrKCJDVFMgdHggc3RvcC4uLiIpOwotCQkJIAkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCQkgCQkJaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQgPSAxOwogCQkJCQkJdHhfc3RvcChpbmZvKTsKIAkJCQkJfQogCQkJCX0KQEAgLTI3MDEsNyArMjY5NCw3IEBACiAJCSAqIGRvIG5vdCByZXF1ZXN0IGJvdHRvbSBoYWxmIHByb2Nlc3NpbmcgaWYgdGhlCiAJCSAqIGRldmljZSBpcyBub3Qgb3BlbiBpbiBhIG5vcm1hbCBtb2RlLgogCQkgKi8KLQkJaWYgKCBwb3J0ICYmIChwb3J0LT5jb3VudCB8fCBwb3J0LT5uZXRjb3VudCkgJiYKKwkJaWYgKCBwb3J0ICYmIChwb3J0LT5wb3J0LmNvdW50IHx8IHBvcnQtPm5ldGNvdW50KSAmJgogCQkgICAgIHBvcnQtPnBlbmRpbmdfYmggJiYgIXBvcnQtPmJoX3J1bm5pbmcgJiYKIAkJICAgICAhcG9ydC0+YmhfcmVxdWVzdGVkICkgewogCQkJaWYgKCBkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JU1IgKQpAQCAtMjcyNyw3ICsyNzIwLDcgQEAKIAlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8gKQogCQlwcmludGsoIiVzKCVkKTolcyB0eF9yZWxlYXNldXAoKVxuIixfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSk7CiAKLQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKKwlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQogCQlyZXR1cm4gMDsKIAogCWlmICghaW5mby0+dHhfYnVmKSB7CkBAIC0yNzUwLDEwICsyNzQzLDEwIEBACiAKIAltb2RfdGltZXIoJmluZm8tPnN0YXR1c190aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKIAotCWlmIChpbmZvLT50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCi0JaW5mby0+ZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7CisJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAogCXJldHVybiAwOwogfQpAQCAtMjc2NCw3ICsyNzU3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCisJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJcmV0dXJuOwogCiAJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCkBAIC0yNzg2LDE3ICsyNzc5LDE3IEBACiAKIAlyZXNldF9wb3J0KGluZm8pOwogCi0gCWlmICghaW5mby0+dHR5IHx8IGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSB7CisgCWlmICghaW5mby0+cG9ydC50dHkgfHwgaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkgewogIAkJaW5mby0+c2VyaWFsX3NpZ25hbHMgJj0gfihTZXJpYWxTaWduYWxfRFRSICsgU2VyaWFsU2lnbmFsX1JUUyk7CiAJCXNldF9zaWduYWxzKGluZm8pOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssZmxhZ3MpOwogCi0JaWYgKGluZm8tPnR0eSkKLQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKIAotCWluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKKwlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKIH0KIAogc3RhdGljIHZvaWQgcHJvZ3JhbV9odyhTTE1QX0lORk8gKmluZm8pCkBAIC0yODI3LDcgKzI4MjAsNyBAQAogCiAJZ2V0X3NpZ25hbHMoaW5mbyk7CiAKLQlpZiAoaW5mby0+bmV0Y291bnQgfHwgKGluZm8tPnR0eSAmJiBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUkVBRCkgKQorCWlmIChpbmZvLT5uZXRjb3VudCB8fCAoaW5mby0+cG9ydC50dHkgJiYgaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUkVBRCkgKQogCQlyeF9zdGFydChpbmZvKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssZmxhZ3MpOwpAQCAtMjg0MCwxNCArMjgzMywxNCBAQAogCXVuc2lnbmVkIGNmbGFnOwogCWludCBiaXRzX3Blcl9jaGFyOwogCi0JaWYgKCFpbmZvLT50dHkgfHwgIWluZm8tPnR0eS0+dGVybWlvcykKKwlpZiAoIWluZm8tPnBvcnQudHR5IHx8ICFpbmZvLT5wb3J0LnR0eS0+dGVybWlvcykKIAkJcmV0dXJuOwogCiAJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCiAJCXByaW50aygiJXMoJWQpOiVzIGNoYW5nZV9wYXJhbXMoKVxuIiwKIAkJCSBfX0ZJTEVfXyxfX0xJTkVfXywgaW5mby0+ZGV2aWNlX25hbWUgKTsKIAotCWNmbGFnID0gaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAKIAkvKiBpZiBCMCByYXRlIChoYW5ndXApIHNwZWNpZmllZCB0aGVuIG5lZ2F0ZSBEVFIgYW5kIFJUUyAqLwogCS8qIG90aGVyd2lzZSBhc3NlcnQgRFRSIGFuZCBSVFMgKi8KQEAgLTI4OTUsNyArMjg4OCw3IEBACiAJICogY3VycmVudCBkYXRhIHJhdGUuCiAJICovCiAJaWYgKGluZm8tPnBhcmFtcy5kYXRhX3JhdGUgPD0gNDYwODAwKSB7Ci0JCWluZm8tPnBhcmFtcy5kYXRhX3JhdGUgPSB0dHlfZ2V0X2JhdWRfcmF0ZShpbmZvLT50dHkpOworCQlpbmZvLT5wYXJhbXMuZGF0YV9yYXRlID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHkpOwogCX0KIAogCWlmICggaW5mby0+cGFyYW1zLmRhdGFfcmF0ZSApIHsKQEAgLTI5MDUsMzAgKzI4OTgsMzAgQEAKIAlpbmZvLT50aW1lb3V0ICs9IEhaLzUwOwkJLyogQWRkIC4wMiBzZWNvbmRzIG9mIHNsb3AgKi8KIAogCWlmIChjZmxhZyAmIENSVFNDVFMpCi0JCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOworCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOwogCWVsc2UKLQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NUU19GTE9XOworCQlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKIAogCWlmIChjZmxhZyAmIENMT0NBTCkKLQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOworCQlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19DSEVDS19DRDsKIAllbHNlCi0JCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOworCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOwogCiAJLyogcHJvY2VzcyB0dHkgaW5wdXQgY29udHJvbCBmbGFncyAqLwogCiAJaW5mby0+cmVhZF9zdGF0dXNfbWFzazIgPSBPVlJOOwotCWlmIChJX0lOUENLKGluZm8tPnR0eSkpCisJaWYgKElfSU5QQ0soaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrMiB8PSBQRSB8IEZSTUU7Ci0gCWlmIChJX0JSS0lOVChpbmZvLT50dHkpIHx8IElfUEFSTVJLKGluZm8tPnR0eSkpCisgCWlmIChJX0JSS0lOVChpbmZvLT5wb3J0LnR0eSkgfHwgSV9QQVJNUksoaW5mby0+cG9ydC50dHkpKQogIAkJaW5mby0+cmVhZF9zdGF0dXNfbWFzazEgfD0gQlJLRDsKLQlpZiAoSV9JR05QQVIoaW5mby0+dHR5KSkKKwlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2syIHw9IFBFIHwgRlJNRTsKLQlpZiAoSV9JR05CUksoaW5mby0+dHR5KSkgeworCWlmIChJX0lHTkJSSyhpbmZvLT5wb3J0LnR0eSkpIHsKIAkJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrMSB8PSBCUktEOwogCQkvKiBJZiBpZ25vcmluZyBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsIGlnbm9yZQogCQkgKiBvdmVycnVucyB0b28uICAoRm9yIHJlYWwgcmF3IHN1cHBvcnQpLgogCQkgKi8KLQkJaWYgKElfSUdOUEFSKGluZm8tPnR0eSkpCisJCWlmIChJX0lHTlBBUihpbmZvLT5wb3J0LnR0eSkpCiAJCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2syIHw9IE9WUk47CiAJfQogCkBAIC0zMzQ4LDcgKzMzNDEsNyBAQAogCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyB8fCB0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSl7CiAJCS8qIG5vbmJsb2NrIG1vZGUgaXMgc2V0IG9yIHBvcnQgaXMgbm90IGVuYWJsZWQgKi8KIAkJLyoganVzdCB2ZXJpZnkgdGhhdCBjYWxsb3V0IGRldmljZSBpcyBub3QgYWN0aXZlICovCi0JCWluZm8tPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CisJCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMzU3LDI1ICszMzUwLDI1IEBACiAKIAkvKiBXYWl0IGZvciBjYXJyaWVyIGRldGVjdCBhbmQgdGhlIGxpbmUgdG8gYmVjb21lCiAJICogZnJlZSAoaS5lLiwgbm90IGluIHVzZSBieSB0aGUgY2FsbG91dCkuICBXaGlsZSB3ZSBhcmUgaW4KLQkgKiB0aGlzIGxvb3AsIGluZm8tPmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0CisJICogdGhpcyBsb29wLCBpbmZvLT5wb3J0LmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0CiAJICogY2xvc2UoKSBrbm93cyB3aGVuIHRvIGZyZWUgdGhpbmdzLiAgV2UgcmVzdG9yZSBpdCB1cG9uCiAJICogZXhpdCwgZWl0aGVyIG5vcm1hbCBvciBhYm5vcm1hbC4KIAkgKi8KIAogCXJldHZhbCA9IDA7Ci0JYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCiAJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCiAJCXByaW50aygiJXMoJWQpOiVzIGJsb2NrX3RpbF9yZWFkeSgpIGJlZm9yZSBibG9jaywgY291bnQ9JWRcbiIsCi0JCQkgX19GSUxFX18sX19MSU5FX18sIHR0eS0+ZHJpdmVyLT5uYW1lLCBpbmZvLT5jb3VudCApOworCQkJIF9fRklMRV9fLF9fTElORV9fLCB0dHktPmRyaXZlci0+bmFtZSwgaW5mby0+cG9ydC5jb3VudCApOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpIHsKIAkJZXh0cmFfY291bnQgPSB0cnVlOwotCQlpbmZvLT5jb3VudC0tOworCQlpbmZvLT5wb3J0LmNvdW50LS07CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKLQlpbmZvLT5ibG9ja2VkX29wZW4rKzsKKwlpbmZvLT5wb3J0LmJsb2NrZWRfb3BlbisrOwogCiAJd2hpbGUgKDEpIHsKIAkJaWYgKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkpIHsKQEAgLTMzODcsOCArMzM4MCw4IEBACiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAhKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKXsKLQkJCXJldHZhbCA9IChpbmZvLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8KKwkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKXsKKwkJCXJldHZhbCA9IChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPwogCQkJCQktRUFHQUlOIDogLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KQEAgLTMzOTcsNyArMzM5MCw3IEBACiAJIAlnZXRfc2lnbmFscyhpbmZvKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CiAKLSAJCWlmICghKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYKKyAJCWlmICghKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgogIAkJICAgIChkb19jbG9jYWwgfHwgKGluZm8tPnNlcmlhbF9zaWduYWxzICYgU2VyaWFsU2lnbmFsX0RDRCkpICkgewogIAkJCWJyZWFrOwogCQl9CkBAIC0zNDA5LDI0ICszNDAyLDI0IEBACiAKIAkJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCiAJCQlwcmludGsoIiVzKCVkKTolcyBibG9ja190aWxfcmVhZHkoKSBjb3VudD0lZFxuIiwKLQkJCQkgX19GSUxFX18sX19MSU5FX18sIHR0eS0+ZHJpdmVyLT5uYW1lLCBpbmZvLT5jb3VudCApOworCQkJCSBfX0ZJTEVfXyxfX0xJTkVfXywgdHR5LT5kcml2ZXItPm5hbWUsIGluZm8tPnBvcnQuY291bnQgKTsKIAogCQlzY2hlZHVsZSgpOwogCX0KIAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCiAJaWYgKGV4dHJhX2NvdW50KQotCQlpbmZvLT5jb3VudCsrOwotCWluZm8tPmJsb2NrZWRfb3Blbi0tOworCQlpbmZvLT5wb3J0LmNvdW50Kys7CisJaW5mby0+cG9ydC5ibG9ja2VkX29wZW4tLTsKIAogCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCQlwcmludGsoIiVzKCVkKTolcyBibG9ja190aWxfcmVhZHkoKSBhZnRlciwgY291bnQ9JWRcbiIsCi0JCQkgX19GSUxFX18sX19MSU5FX18sIHR0eS0+ZHJpdmVyLT5uYW1lLCBpbmZvLT5jb3VudCApOworCQkJIF9fRklMRV9fLF9fTElORV9fLCB0dHktPmRyaXZlci0+bmFtZSwgaW5mby0+cG9ydC5jb3VudCApOwogCiAJaWYgKCFyZXR2YWwpCi0JCWluZm8tPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CisJCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0zODA4LDEzICszODAxLDEyIEBACiAJCXByaW50aygiJXMoJWQpIEVycm9yIGNhbid0IGFsbG9jYXRlIGRldmljZSBpbnN0YW5jZSBkYXRhIGZvciBhZGFwdGVyICVkLCBwb3J0ICVkXG4iLAogCQkJX19GSUxFX18sX19MSU5FX18sIGFkYXB0ZXJfbnVtLCBwb3J0X251bSk7CiAJfSBlbHNlIHsKKwkJdHR5X3BvcnRfaW5pdCgmaW5mby0+cG9ydCk7CiAJCWluZm8tPm1hZ2ljID0gTUdTTF9NQUdJQzsKIAkJSU5JVF9XT1JLKCZpbmZvLT50YXNrLCBiaF9oYW5kbGVyKTsKIAkJaW5mby0+bWF4X2ZyYW1lX3NpemUgPSA0MDk2OwotCQlpbmZvLT5jbG9zZV9kZWxheSA9IDUqSFovMTA7Ci0JCWluZm8tPmNsb3Npbmdfd2FpdCA9IDMwKkhaOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jbG9zZV93YWl0KTsKKwkJaW5mby0+cG9ydC5jbG9zZV9kZWxheSA9IDUqSFovMTA7CisJCWluZm8tPnBvcnQuY2xvc2luZ193YWl0ID0gMzAqSFo7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPnN0YXR1c19ldmVudF93YWl0X3EpOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5ldmVudF93YWl0X3EpOwogCQlzcGluX2xvY2tfaW5pdCgmaW5mby0+bmV0bG9jayk7CkBAIC00ODg1LDcgKzQ4NzcsNyBAQAogCXVuc2lnbmVkIGludCBmcmFtZXNpemUgPSAwOwogCWJvb2wgUmV0dXJuQ29kZSA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBhZGRyX2ZpZWxkID0gMHhmZjsKICAgIAlTQ0FERVNDICpkZXNjOwogCVNDQURFU0NfRVggKmRlc2NfZXg7CkBAIC00OTgzLDkgKzQ5NzUsOCBAQAogCQlmcmFtZXNpemUgPSAwOwogI2lmIFNZTkNMSU5LX0dFTkVSSUNfSERMQwogCQl7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGluZm8tPm5ldGRldik7Ci0JCQlzdGF0cy0+cnhfZXJyb3JzKys7Ci0JCQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzKys7CisJCQlpbmZvLT5uZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJaW5mby0+bmV0ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJfQogI2VuZGlmCiAJfQpAQCAtNTI5MywxMSArNTI4NCwxMSBAQAogCWJvb2wgcmMgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3RydWN0IHR0eV9zdHJ1Y3QgKm9sZHR0eSA9IGluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqb2xkdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJdTMyIHNwZWVkID0gaW5mby0+cGFyYW1zLmNsb2NrX3NwZWVkOwogCiAJaW5mby0+cGFyYW1zLmNsb2NrX3NwZWVkID0gMzY4NjQwMDsKLQlpbmZvLT50dHkgPSBOVUxMOworCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKIAogCS8qIGFzc3VtZSBmYWlsdXJlICovCiAJaW5mby0+aW5pdF9lcnJvciA9IERpYWdTdGF0dXNfRG1hRmFpbHVyZTsKQEAgLTUzNDEsNyArNTMzMiw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CiAKIAlpbmZvLT5wYXJhbXMuY2xvY2tfc3BlZWQgPSBzcGVlZDsKLQlpbmZvLT50dHkgPSBvbGR0dHk7CisJaW5mby0+cG9ydC50dHkgPSBvbGR0dHk7CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggMDQ3YTE3My4uZmE0OGRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtOTUsOCArOTUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rYmRfa2Vybi5oPgpAQCAtNjU1LDQ3OCArNjU2LDYgQEAKIAogCiAvKioKLSAqCXR0eV9zZXRfdGVybWlvc19sZGlzYwkJLQlzZXQgbGRpc2MgZmllbGQKLSAqCUB0dHk6IHR0eSBzdHJ1Y3R1cmUKLSAqCUBudW06IGxpbmUgZGlzY2lwbGluZSBudW1iZXIKLSAqCi0gKglUaGlzIGlzIHByb2JhYmx5IG92ZXJraWxsIGZvciByZWFsIHdvcmxkIHByb2Nlc3NvcnMgYnV0Ci0gKgl0aGV5IGFyZSBub3Qgb24gaG90IHBhdGhzIHNvIGEgbGl0dGxlIGRpc2NpcGxpbmUgd29uJ3QgZG8KLSAqCWFueSBoYXJtLgotICoKLSAqCUxvY2tpbmc6IHRha2VzIHRlcm1pb3NfbXV0ZXgKLSAqLwotCi1zdGF0aWMgdm9pZCB0dHlfc2V0X3Rlcm1pb3NfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IG51bSkKLXsKLQltdXRleF9sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOwotCXR0eS0+dGVybWlvcy0+Y19saW5lID0gbnVtOwotCW11dGV4X3VubG9jaygmdHR5LT50ZXJtaW9zX211dGV4KTsKLX0KLQotLyoKLSAqCVRoaXMgZ3VhcmRzIHRoZSByZWZjb3VudGVkIGxpbmUgZGlzY2lwbGluZSBsaXN0cy4gVGhlIGxvY2sKLSAqCW11c3QgYmUgdGFrZW4gd2l0aCBpcnFzIG9mZiBiZWNhdXNlIHRoZXJlIGFyZSBoYW5ndXAgcGF0aAotICoJY2FsbGVycyB3aG8gd2lsbCBkbyBsZGlzYyBsb29rdXBzIGFuZCBjYW5ub3Qgc2xlZXAuCi0gKi8KLQotc3RhdGljIERFRklORV9TUElOTE9DSyh0dHlfbGRpc2NfbG9jayk7Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodHR5X2xkaXNjX3dhaXQpOwotLyogTGluZSBkaXNjIGRpc3BhdGNoIHRhYmxlICovCi1zdGF0aWMgc3RydWN0IHR0eV9sZGlzYyB0dHlfbGRpc2NzW05SX0xESVNDU107Ci0KLS8qKgotICoJdHR5X3JlZ2lzdGVyX2xkaXNjCS0JaW5zdGFsbCBhIGxpbmUgZGlzY2lwbGluZQotICoJQGRpc2M6IGxkaXNjIG51bWJlcgotICoJQG5ld19sZGlzYzogcG9pbnRlciB0byB0aGUgbGRpc2Mgb2JqZWN0Ci0gKgotICoJSW5zdGFsbHMgYSBuZXcgbGluZSBkaXNjaXBsaW5lIGludG8gdGhlIGtlcm5lbC4gVGhlIGRpc2NpcGxpbmUKLSAqCWlzIHNldCB1cCBhcyB1bnJlZmVyZW5jZWQgYW5kIHRoZW4gbWFkZSBhdmFpbGFibGUgdG8gdGhlIGtlcm5lbAotICoJZnJvbSB0aGlzIHBvaW50IG9ud2FyZHMuCi0gKgotICoJTG9ja2luZzoKLSAqCQl0YWtlcyB0dHlfbGRpc2NfbG9jayB0byBndWFyZCBhZ2FpbnN0IGxkaXNjIHJhY2VzCi0gKi8KLQotaW50IHR0eV9yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYywgc3RydWN0IHR0eV9sZGlzYyAqbmV3X2xkaXNjKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoZGlzYyA8IE5fVFRZIHx8IGRpc2MgPj0gTlJfTERJU0NTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCXR0eV9sZGlzY3NbZGlzY10gPSAqbmV3X2xkaXNjOwotCXR0eV9sZGlzY3NbZGlzY10ubnVtID0gZGlzYzsKLQl0dHlfbGRpc2NzW2Rpc2NdLmZsYWdzIHw9IExESVNDX0ZMQUdfREVGSU5FRDsKLQl0dHlfbGRpc2NzW2Rpc2NdLnJlZmNvdW50ID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wodHR5X3JlZ2lzdGVyX2xkaXNjKTsKLQotLyoqCi0gKgl0dHlfdW5yZWdpc3Rlcl9sZGlzYwktCXVubG9hZCBhIGxpbmUgZGlzY2lwbGluZQotICoJQGRpc2M6IGxkaXNjIG51bWJlcgotICoJQG5ld19sZGlzYzogcG9pbnRlciB0byB0aGUgbGRpc2Mgb2JqZWN0Ci0gKgotICoJUmVtb3ZlIGEgbGluZSBkaXNjaXBsaW5lIGZyb20gdGhlIGtlcm5lbCBwcm92aWRpbmcgaXQgaXMgbm90Ci0gKgljdXJyZW50bHkgaW4gdXNlLgotICoKLSAqCUxvY2tpbmc6Ci0gKgkJdGFrZXMgdHR5X2xkaXNjX2xvY2sgdG8gZ3VhcmQgYWdhaW5zdCBsZGlzYyByYWNlcwotICovCi0KLWludCB0dHlfdW5yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0JaWYgKGRpc2MgPCBOX1RUWSB8fCBkaXNjID49IE5SX0xESVNDUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKLQlpZiAodHR5X2xkaXNjc1tkaXNjXS5yZWZjb3VudCkKLQkJcmV0ID0gLUVCVVNZOwotCWVsc2UKLQkJdHR5X2xkaXNjc1tkaXNjXS5mbGFncyAmPSB+TERJU0NfRkxBR19ERUZJTkVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTCh0dHlfdW5yZWdpc3Rlcl9sZGlzYyk7Ci0KLS8qKgotICoJdHR5X2xkaXNjX2dldAkJLQl0YWtlIGEgcmVmZXJlbmNlIHRvIGFuIGxkaXNjCi0gKglAZGlzYzogbGRpc2MgbnVtYmVyCi0gKgotICoJVGFrZXMgYSByZWZlcmVuY2UgdG8gYSBsaW5lIGRpc2NpcGxpbmUuIERlYWxzIHdpdGggcmVmY291bnRzIGFuZAotICoJbW9kdWxlIGxvY2tpbmcgY291bnRzLiBSZXR1cm5zIE5VTEwgaWYgdGhlIGRpc2NpcGxpbmUgaXMgbm90IGF2YWlsYWJsZS4KLSAqCVJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkaXNjaXBsaW5lIGFuZCBidW1wcyB0aGUgcmVmIGNvdW50IGlmIGl0IGlzCi0gKglhdmFpbGFibGUKLSAqCi0gKglMb2NraW5nOgotICoJCXRha2VzIHR0eV9sZGlzY19sb2NrIHRvIGd1YXJkIGFnYWluc3QgbGRpc2MgcmFjZXMKLSAqLwotCi1zdHJ1Y3QgdHR5X2xkaXNjICp0dHlfbGRpc2NfZ2V0KGludCBkaXNjKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHR0eV9sZGlzYyAqbGQ7Ci0KLQlpZiAoZGlzYyA8IE5fVFRZIHx8IGRpc2MgPj0gTlJfTERJU0NTKQotCQlyZXR1cm4gTlVMTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCi0JbGQgPSAmdHR5X2xkaXNjc1tkaXNjXTsKLQkvKiBDaGVjayB0aGUgZW50cnkgaXMgZGVmaW5lZCAqLwotCWlmIChsZC0+ZmxhZ3MgJiBMRElTQ19GTEFHX0RFRklORUQpIHsKLQkJLyogSWYgdGhlIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCB3ZSBjYW4ndCB1c2UgaXQgKi8KLQkJaWYgKCF0cnlfbW9kdWxlX2dldChsZC0+b3duZXIpKQotCQkJbGQgPSBOVUxMOwotCQllbHNlIC8qIGxvY2sgaXQgKi8KLQkJCWxkLT5yZWZjb3VudCsrOwotCX0gZWxzZQotCQlsZCA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gbGQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19nZXQpOwotCi0vKioKLSAqCXR0eV9sZGlzY19wdXQJCS0JZHJvcCBsZGlzYyByZWZlcmVuY2UKLSAqCUBkaXNjOiBsZGlzYyBudW1iZXIKLSAqCi0gKglEcm9wIGEgcmVmZXJlbmNlIHRvIGEgbGluZSBkaXNjaXBsaW5lLiBNYW5hZ2UgcmVmY291bnRzIGFuZAotICoJbW9kdWxlIHVzYWdlIGNvdW50cwotICoKLSAqCUxvY2tpbmc6Ci0gKgkJdGFrZXMgdHR5X2xkaXNjX2xvY2sgdG8gZ3VhcmQgYWdhaW5zdCBsZGlzYyByYWNlcwotICovCi0KLXZvaWQgdHR5X2xkaXNjX3B1dChpbnQgZGlzYykKLXsKLQlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JQlVHX09OKGRpc2MgPCBOX1RUWSB8fCBkaXNjID49IE5SX0xESVNDUyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKLQlsZCA9ICZ0dHlfbGRpc2NzW2Rpc2NdOwotCUJVR19PTihsZC0+cmVmY291bnQgPT0gMCk7Ci0JbGQtPnJlZmNvdW50LS07Ci0JbW9kdWxlX3B1dChsZC0+b3duZXIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19wdXQpOwotCi0vKioKLSAqCXR0eV9sZGlzY19hc3NpZ24JLQlzZXQgbGRpc2Mgb24gYSB0dHkKLSAqCUB0dHk6IHR0eSB0byBhc3NpZ24KLSAqCUBsZDogbGluZSBkaXNjaXBsaW5lCi0gKgotICoJSW5zdGFsbCBhbiBpbnN0YW5jZSBvZiBhIGxpbmUgZGlzY2lwbGluZSBpbnRvIGEgdHR5IHN0cnVjdHVyZS4gVGhlCi0gKglsZGlzYyBtdXN0IGhhdmUgYSByZWZlcmVuY2UgY291bnQgYWJvdmUgemVybyB0byBlbnN1cmUgaXQgcmVtYWlucy8KLSAqCVRoZSB0dHkgaW5zdGFuY2UgcmVmY291bnQgc3RhcnRzIGF0IHplcm8uCi0gKgotICoJTG9ja2luZzoKLSAqCQlDYWxsZXIgbXVzdCBob2xkIHJlZmVyZW5jZXMKLSAqLwotCi1zdGF0aWMgdm9pZCB0dHlfbGRpc2NfYXNzaWduKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfbGRpc2MgKmxkKQotewotCXR0eS0+bGRpc2MgPSAqbGQ7Ci0JdHR5LT5sZGlzYy5yZWZjb3VudCA9IDA7Ci19Ci0KLS8qKgotICoJdHR5X2xkaXNjX3RyeQkJLQlpbnRlcm5hbCBoZWxwZXIKLSAqCUB0dHk6IHRoZSB0dHkKLSAqCi0gKglNYWtlIGEgc2luZ2xlIGF0dGVtcHQgdG8gZ3JhYiBhbmQgYnVtcCB0aGUgcmVmY291bnQgb24KLSAqCXRoZSB0dHkgbGRpc2MuIFJldHVybiAwIG9uIGZhaWx1cmUgb3IgMSBvbiBzdWNjZXNzLiBUaGlzIGlzCi0gKgl1c2VkIHRvIGltcGxlbWVudCBib3RoIHRoZSB3YWl0aW5nIGFuZCBub24gd2FpdGluZyB2ZXJzaW9ucwotICoJb2YgdHR5X2xkaXNjX3JlZgotICoKLSAqCUxvY2tpbmc6IHRha2VzIHR0eV9sZGlzY19sb2NrCi0gKi8KLQotc3RhdGljIGludCB0dHlfbGRpc2NfdHJ5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCWxkID0gJnR0eS0+bGRpc2M7Ci0JaWYgKHRlc3RfYml0KFRUWV9MRElTQywgJnR0eS0+ZmxhZ3MpKSB7Ci0JCWxkLT5yZWZjb3VudCsrOwotCQlyZXQgPSAxOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICoJdHR5X2xkaXNjX3JlZl93YWl0CS0Jd2FpdCBmb3IgdGhlIHR0eSBsZGlzYwotICoJQHR0eTogdHR5IGRldmljZQotICoKLSAqCURlcmVmZXJlbmNlIHRoZSBsaW5lIGRpc2NpcGxpbmUgZm9yIHRoZSB0ZXJtaW5hbCBhbmQgdGFrZSBhCi0gKglyZWZlcmVuY2UgdG8gaXQuIElmIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXMgaW4gZmx1eCB0aGVuCi0gKgl3YWl0IHBhdGllbnRseSB1bnRpbCBpdCBjaGFuZ2VzLgotICoKLSAqCU5vdGU6IE11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGFuIElSUS90aW1lciBjb250ZXh0LiBUaGUgY2FsbGVyCi0gKgltdXN0IGFsc28gYmUgY2FyZWZ1bCBub3QgdG8gaG9sZCBvdGhlciBsb2NrcyB0aGF0IHdpbGwgZGVhZGxvY2sKLSAqCWFnYWluc3QgYSBkaXNjaXBsaW5lIGNoYW5nZSwgc3VjaCBhcyBhbiBleGlzdGluZyBsZGlzYyByZWZlcmVuY2UKLSAqCSh3aGljaCB3ZSBjaGVjayBmb3IpCi0gKgotICoJTG9ja2luZzogY2FsbCBmdW5jdGlvbnMgdGFrZSB0dHlfbGRpc2NfbG9jawotICovCi0KLXN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCS8qIHdhaXRfZXZlbnQgaXMgYSBtYWNybyAqLwotCXdhaXRfZXZlbnQodHR5X2xkaXNjX3dhaXQsIHR0eV9sZGlzY190cnkodHR5KSk7Ci0JaWYgKHR0eS0+bGRpc2MucmVmY291bnQgPT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJ0dHlfbGRpc2NfcmVmX3dhaXRcbiIpOwotCXJldHVybiAmdHR5LT5sZGlzYzsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3JlZl93YWl0KTsKLQotLyoqCi0gKgl0dHlfbGRpc2NfcmVmCQktCWdldCB0aGUgdHR5IGxkaXNjCi0gKglAdHR5OiB0dHkgZGV2aWNlCi0gKgotICoJRGVyZWZlcmVuY2UgdGhlIGxpbmUgZGlzY2lwbGluZSBmb3IgdGhlIHRlcm1pbmFsIGFuZCB0YWtlIGEKLSAqCXJlZmVyZW5jZSB0byBpdC4gSWYgdGhlIGxpbmUgZGlzY2lwbGluZSBpcyBpbiBmbHV4IHRoZW4KLSAqCXJldHVybiBOVUxMLiBDYW4gYmUgY2FsbGVkIGZyb20gSVJRIGFuZCB0aW1lciBmdW5jdGlvbnMuCi0gKgotICoJTG9ja2luZzogY2FsbGVkIGZ1bmN0aW9ucyB0YWtlIHR0eV9sZGlzY19sb2NrCi0gKi8KLQotc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWlmICh0dHlfbGRpc2NfdHJ5KHR0eSkpCi0JCXJldHVybiAmdHR5LT5sZGlzYzsKLQlyZXR1cm4gTlVMTDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3JlZik7Ci0KLS8qKgotICoJdHR5X2xkaXNjX2RlcmVmCQktCWZyZWUgYSB0dHkgbGRpc2MgcmVmZXJlbmNlCi0gKglAbGQ6IHJlZmVyZW5jZSB0byBmcmVlIHVwCi0gKgotICoJVW5kb2VzIHRoZSBlZmZlY3Qgb2YgdHR5X2xkaXNjX3JlZiBvciB0dHlfbGRpc2NfcmVmX3dhaXQuIE1heQotICoJYmUgY2FsbGVkIGluIElSUSBjb250ZXh0LgotICoKLSAqCUxvY2tpbmc6IHRha2VzIHR0eV9sZGlzY19sb2NrCi0gKi8KLQotdm9pZCB0dHlfbGRpc2NfZGVyZWYoc3RydWN0IHR0eV9sZGlzYyAqbGQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCUJVR19PTihsZCA9PSBOVUxMKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCWlmIChsZC0+cmVmY291bnQgPT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJ0dHlfbGRpc2NfZGVyZWY6IG5vIHJlZmVyZW5jZXMuXG4iKTsKLQllbHNlCi0JCWxkLT5yZWZjb3VudC0tOwotCWlmIChsZC0+cmVmY291bnQgPT0gMCkKLQkJd2FrZV91cCgmdHR5X2xkaXNjX3dhaXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19kZXJlZik7Ci0KLS8qKgotICoJdHR5X2xkaXNjX2VuYWJsZQktCWFsbG93IGxkaXNjIHVzZQotICoJQHR0eTogdGVybWluYWwgdG8gYWN0aXZhdGUgbGRpc2Mgb24KLSAqCi0gKglTZXQgdGhlIFRUWV9MRElTQyBmbGFnIHdoZW4gdGhlIGxpbmUgZGlzY2lwbGluZSBjYW4gYmUgY2FsbGVkCi0gKglhZ2Fpbi4gRG8gbmVjZXNzYXJ5IHdha2V1cHMgZm9yIGV4aXN0aW5nIHNsZWVwZXJzLgotICoKLSAqCU5vdGU6IG5vYm9keSBzaG91bGQgc2V0IHRoaXMgYml0IGV4Y2VwdCB2aWEgdGhpcyBmdW5jdGlvbi4gQ2xlYXJpbmcKLSAqCWRpcmVjdGx5IGlzIGFsbG93ZWQuCi0gKi8KLQotc3RhdGljIHZvaWQgdHR5X2xkaXNjX2VuYWJsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXNldF9iaXQoVFRZX0xESVNDLCAmdHR5LT5mbGFncyk7Ci0Jd2FrZV91cCgmdHR5X2xkaXNjX3dhaXQpOwotfQotCi0vKioKLSAqCXR0eV9zZXRfbGRpc2MJCS0Jc2V0IGxpbmUgZGlzY2lwbGluZQotICoJQHR0eTogdGhlIHRlcm1pbmFsIHRvIHNldAotICoJQGxkaXNjOiB0aGUgbGluZSBkaXNjaXBsaW5lCi0gKgotICoJU2V0IHRoZSBkaXNjaXBsaW5lIG9mIGEgdHR5IGxpbmUuIE11c3QgYmUgY2FsbGVkIGZyb20gYSBwcm9jZXNzCi0gKgljb250ZXh0LgotICoKLSAqCUxvY2tpbmc6IHRha2VzIHR0eV9sZGlzY19sb2NrLgotICoJCSBjYWxsZWQgZnVuY3Rpb25zIHRha2UgdGVybWlvc19tdXRleAotICovCi0KLXN0YXRpYyBpbnQgdHR5X3NldF9sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbGRpc2MpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHR0eV9sZGlzYyBvX2xkaXNjOwotCWNoYXIgYnVmWzY0XTsKLQlpbnQgd29yazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwotCXN0cnVjdCB0dHlfc3RydWN0ICpvX3R0eTsKLQotCWlmICgobGRpc2MgPCBOX1RUWSkgfHwgKGxkaXNjID49IE5SX0xESVNDUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi1yZXN0YXJ0OgotCi0JbGQgPSB0dHlfbGRpc2NfZ2V0KGxkaXNjKTsKLQkvKiBFZHVhcmRvIEJsYW5jbyA8ZWpic0Bjcy5jcy5jb20udXk+ICovCi0JLyogQ3lydXMgRHVyZ2luIDxjaWRlckBzcGVha2Vhc3kub3JnPiAqLwotCWlmIChsZCA9PSBOVUxMKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJ0dHktbGRpc2MtJWQiLCBsZGlzYyk7Ci0JCWxkID0gdHR5X2xkaXNjX2dldChsZGlzYyk7Ci0JfQotCWlmIChsZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JICoJUHJvYmxlbTogV2hhdCBkbyB3ZSBkbyBpZiB0aGlzIGJsb2NrcyA/Ci0JICovCi0KLQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7Ci0KLQlpZiAodHR5LT5sZGlzYy5udW0gPT0gbGRpc2MpIHsKLQkJdHR5X2xkaXNjX3B1dChsZGlzYyk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICoJTm8gbW9yZSBpbnB1dCBwbGVhc2UsIHdlIGFyZSBzd2l0Y2hpbmcuIFRoZSBuZXcgbGRpc2MKLQkgKgl3aWxsIHVwZGF0ZSB0aGlzIHZhbHVlIGluIHRoZSBsZGlzYyBvcGVuIGZ1bmN0aW9uCi0JICovCi0KLQl0dHktPnJlY2VpdmVfcm9vbSA9IDA7Ci0KLQlvX2xkaXNjID0gdHR5LT5sZGlzYzsKLQlvX3R0eSA9IHR0eS0+bGluazsKLQotCS8qCi0JICoJTWFrZSBzdXJlIHdlIGRvbid0IGNoYW5nZSB3aGlsZSBzb21lb25lIGhvbGRzIGEKLQkgKglyZWZlcmVuY2UgdG8gdGhlIGxpbmUgZGlzY2lwbGluZS4gVGhlIFRUWV9MRElTQyBiaXQKLQkgKglwcmV2ZW50cyBhbnlvbmUgdGFraW5nIGEgcmVmZXJlbmNlIG9uY2UgaXQgaXMgY2xlYXIuCi0JICoJV2UgbmVlZCB0aGUgbG9jayB0byBhdm9pZCByYWNpbmcgcmVmZXJlbmNlIHRha2Vycy4KLQkgKi8KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCWlmICh0dHktPmxkaXNjLnJlZmNvdW50IHx8IChvX3R0eSAmJiBvX3R0eS0+bGRpc2MucmVmY291bnQpKSB7Ci0JCWlmICh0dHktPmxkaXNjLnJlZmNvdW50KSB7Ci0JCQkvKiBGcmVlIHRoZSBuZXcgbGRpc2Mgd2UgZ3JhYmJlZC4gTXVzdCBkcm9wIHRoZSBsb2NrCi0JCQkgICBmaXJzdC4gKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Ci0JCQl0dHlfbGRpc2NfcHV0KGxkaXNjKTsKLQkJCS8qCi0JCQkgKiBUaGVyZSBhcmUgc2V2ZXJhbCByZWFzb25zIHdlIG1heSBiZSBidXN5LCBpbmNsdWRpbmcKLQkJCSAqIHJhbmRvbSBtb21lbnRhcnkgSS9PIHRyYWZmaWMuIFdlIG11c3QgdGhlcmVmb3JlCi0JCQkgKiByZXRyeS4gV2UgY291bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBibG9ja2luZyBvcHMKLQkJCSAqIGFuZCByZXRyaWVzIGlmIHdlIG1hZGUgdHR5X2xkaXNjX3dhaXQoKSBzbWFydGVyLgotCQkJICogVGhhdCBpcyB1cCBmb3IgZGlzY3Vzc2lvbi4KLQkJCSAqLwotCQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh0dHlfbGRpc2Nfd2FpdCwgdHR5LT5sZGlzYy5yZWZjb3VudCA9PSAwKSA8IDApCi0JCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJCWdvdG8gcmVzdGFydDsKLQkJfQotCQlpZiAob190dHkgJiYgb190dHktPmxkaXNjLnJlZmNvdW50KSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCQkJdHR5X2xkaXNjX3B1dChsZGlzYyk7Ci0JCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHR0eV9sZGlzY193YWl0LCBvX3R0eS0+bGRpc2MucmVmY291bnQgPT0gMCkgPCAwKQotCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCQlnb3RvIHJlc3RhcnQ7Ci0JCX0KLQl9Ci0JLyoKLQkgKglJZiB0aGUgVFRZX0xESVNDIGJpdCBpcyBzZXQsIHRoZW4gd2UgYXJlIHJhY2luZyBhZ2FpbnN0Ci0JICoJYW5vdGhlciBsZGlzYyBjaGFuZ2UKLQkgKi8KLQlpZiAoIXRlc3RfYml0KFRUWV9MRElTQywgJnR0eS0+ZmxhZ3MpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Ci0JCXR0eV9sZGlzY19wdXQobGRpc2MpOwotCQlsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpOwotCQl0dHlfbGRpc2NfZGVyZWYobGQpOwotCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCi0JY2xlYXJfYml0KFRUWV9MRElTQywgJnR0eS0+ZmxhZ3MpOwotCWlmIChvX3R0eSkKLQkJY2xlYXJfYml0KFRUWV9MRElTQywgJm9fdHR5LT5mbGFncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICoJRnJvbSB0aGlzIHBvaW50IG9uIHdlIGtub3cgbm9ib2R5IGhhcyBhbiBsZGlzYwotCSAqCXVzYWdlIHJlZmVyZW5jZSwgbm9yIGNhbiB0aGV5IG9idGFpbiBvbmUgdW50aWwKLQkgKgl3ZSBzYXkgc28gbGF0ZXIgb24uCi0JICovCi0KLQl3b3JrID0gY2FuY2VsX2RlbGF5ZWRfd29yaygmdHR5LT5idWYud29yayk7Ci0JLyoKLQkgKiBXYWl0IGZvciAtPmhhbmd1cF93b3JrIGFuZCAtPmJ1Zi53b3JrIGhhbmRsZXJzIHRvIHRlcm1pbmF0ZQotCSAqLwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JLyogU2h1dGRvd24gdGhlIGN1cnJlbnQgZGlzY2lwbGluZS4gKi8KLQlpZiAodHR5LT5sZGlzYy5jbG9zZSkKLQkJKHR0eS0+bGRpc2MuY2xvc2UpKHR0eSk7Ci0KLQkvKiBOb3cgc2V0IHVwIHRoZSBuZXcgbGluZSBkaXNjaXBsaW5lLiAqLwotCXR0eV9sZGlzY19hc3NpZ24odHR5LCBsZCk7Ci0JdHR5X3NldF90ZXJtaW9zX2xkaXNjKHR0eSwgbGRpc2MpOwotCWlmICh0dHktPmxkaXNjLm9wZW4pCi0JCXJldHZhbCA9ICh0dHktPmxkaXNjLm9wZW4pKHR0eSk7Ci0JaWYgKHJldHZhbCA8IDApIHsKLQkJdHR5X2xkaXNjX3B1dChsZGlzYyk7Ci0JCS8qIFRoZXJlIGlzIGFuIG91dHN0YW5kaW5nIHJlZmVyZW5jZSBoZXJlIHNvIHRoaXMgaXMgc2FmZSAqLwotCQl0dHlfbGRpc2NfYXNzaWduKHR0eSwgdHR5X2xkaXNjX2dldChvX2xkaXNjLm51bSkpOwotCQl0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCB0dHktPmxkaXNjLm51bSk7Ci0JCWlmICh0dHktPmxkaXNjLm9wZW4gJiYgKHR0eS0+bGRpc2Mub3Blbih0dHkpIDwgMCkpIHsKLQkJCXR0eV9sZGlzY19wdXQob19sZGlzYy5udW0pOwotCQkJLyogVGhpcyBkcml2ZXIgaXMgYWx3YXlzIHByZXNlbnQgKi8KLQkJCXR0eV9sZGlzY19hc3NpZ24odHR5LCB0dHlfbGRpc2NfZ2V0KE5fVFRZKSk7Ci0JCQl0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBOX1RUWSk7Ci0JCQlpZiAodHR5LT5sZGlzYy5vcGVuKSB7Ci0JCQkJaW50IHIgPSB0dHktPmxkaXNjLm9wZW4odHR5KTsKLQotCQkJCWlmIChyIDwgMCkKLQkJCQkJcGFuaWMoIkNvdWxkbid0IG9wZW4gTl9UVFkgbGRpc2MgZm9yICIKLQkJCQkJICAgICAgIiVzIC0tLSBlcnJvciAlZC4iLAotCQkJCQkgICAgICB0dHlfbmFtZSh0dHksIGJ1ZiksIHIpOwotCQkJfQotCQl9Ci0JfQotCS8qIEF0IHRoaXMgcG9pbnQgd2UgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgbmV3IGxkaXNjIGFuZCBhCi0JICAgYSByZWZlcmVuY2UgdG8gdGhlIG9sZCBsZGlzYy4gSWYgd2UgZW5kZWQgdXAgZmxpcHBpbmcgYmFjawotCSAgIHRvIHRoZSBleGlzdGluZyBsZGlzYyB3ZSBoYXZlIHR3byByZWZlcmVuY2VzIHRvIGl0ICovCi0KLQlpZiAodHR5LT5sZGlzYy5udW0gIT0gb19sZGlzYy5udW0gJiYgdHR5LT5vcHMtPnNldF9sZGlzYykKLQkJdHR5LT5vcHMtPnNldF9sZGlzYyh0dHkpOwotCi0JdHR5X2xkaXNjX3B1dChvX2xkaXNjLm51bSk7Ci0KLQkvKgotCSAqCUFsbG93IGxkaXNjIHJlZmVyZW5jaW5nIHRvIG9jY3VyIGFzIHNvb24gYXMgdGhlIGRyaXZlcgotCSAqCWxkaXNjIGNhbGxiYWNrIGNvbXBsZXRlcy4KLQkgKi8KLQotCXR0eV9sZGlzY19lbmFibGUodHR5KTsKLQlpZiAob190dHkpCi0JCXR0eV9sZGlzY19lbmFibGUob190dHkpOwotCi0JLyogUmVzdGFydCBpdCBpbiBjYXNlIG5vIGNoYXJhY3RlcnMga2ljayBpdCBvZmYuIFNhZmUgaWYKLQkgICBhbHJlYWR5IHJ1bm5pbmcgKi8KLQlpZiAod29yaykKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrLCAxKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKioKICAqCWdldF90dHlfZHJpdmVyCQktCWZpbmQgZGV2aWNlIG9mIGEgdHR5CiAgKglAZGV2X3Q6IGRldmljZSBpZGVudGlmaWVyCiAgKglAaW5kZXg6IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0dHkKQEAgLTEzMzUsOCArODY0LDggQEAKIAlpZiAodGVzdF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJnR0eS0+ZmxhZ3MpKSB7CiAJCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCQlpZiAobGQpIHsKLQkJCWlmIChsZC0+d3JpdGVfd2FrZXVwKQotCQkJCWxkLT53cml0ZV93YWtldXAodHR5KTsKKwkJCWlmIChsZC0+b3BzLT53cml0ZV93YWtldXApCisJCQkJbGQtPm9wcy0+d3JpdGVfd2FrZXVwKHR0eSk7CiAJCQl0dHlfbGRpc2NfZGVyZWYobGQpOwogCQl9CiAJfQpAQCAtMTM1Nyw4ICs4ODYsOCBAQAogewogCXN0cnVjdCB0dHlfbGRpc2MgKmxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCWlmIChsZCkgewotCQlpZiAobGQtPmZsdXNoX2J1ZmZlcikKLQkJCWxkLT5mbHVzaF9idWZmZXIodHR5KTsKKwkJaWYgKGxkLT5vcHMtPmZsdXNoX2J1ZmZlcikKKwkJCWxkLT5vcHMtPmZsdXNoX2J1ZmZlcih0dHkpOwogCQl0dHlfbGRpc2NfZGVyZWYobGQpOwogCX0KIAl0dHlfYnVmZmVyX2ZsdXNoKHR0eSk7CkBAIC0xNDQ5LDE0ICs5NzgsMTQgQEAKIAlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKIAlpZiAobGQgIT0gTlVMTCkgewogCQkvKiBXZSBtYXkgaGF2ZSBubyBsaW5lIGRpc2NpcGxpbmUgYXQgdGhpcyBwb2ludCAqLwotCQlpZiAobGQtPmZsdXNoX2J1ZmZlcikKLQkJCWxkLT5mbHVzaF9idWZmZXIodHR5KTsKKwkJaWYgKGxkLT5vcHMtPmZsdXNoX2J1ZmZlcikKKwkJCWxkLT5vcHMtPmZsdXNoX2J1ZmZlcih0dHkpOwogCQl0dHlfZHJpdmVyX2ZsdXNoX2J1ZmZlcih0dHkpOwogCQlpZiAoKHRlc3RfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKSkgJiYKLQkJICAgIGxkLT53cml0ZV93YWtldXApCi0JCQlsZC0+d3JpdGVfd2FrZXVwKHR0eSk7Ci0JCWlmIChsZC0+aGFuZ3VwKQotCQkJbGQtPmhhbmd1cCh0dHkpOworCQkgICAgbGQtPm9wcy0+d3JpdGVfd2FrZXVwKQorCQkJbGQtPm9wcy0+d3JpdGVfd2FrZXVwKHR0eSk7CisJCWlmIChsZC0+b3BzLT5oYW5ndXApCisJCQlsZC0+b3BzLT5oYW5ndXAodHR5KTsKIAl9CiAJLyoKIAkgKiBGSVhNRTogT25jZSB3ZSB0cnVzdCB0aGUgTERJU0MgY29kZSBiZXR0ZXIgd2UgY2FuIHdhaXQgaGVyZSBmb3IKQEAgLTE4MjUsOCArMTM1NCw4IEBACiAJLyogV2Ugd2FudCB0byB3YWl0IGZvciB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIHNvcnQgb3V0IGluIHRoaXMKIAkgICBzaXR1YXRpb24gKi8KIAlsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpOwotCWlmIChsZC0+cmVhZCkKLQkJaSA9IChsZC0+cmVhZCkodHR5LCBmaWxlLCBidWYsIGNvdW50KTsKKwlpZiAobGQtPm9wcy0+cmVhZCkKKwkJaSA9IChsZC0+b3BzLT5yZWFkKSh0dHksIGZpbGUsIGJ1ZiwgY291bnQpOwogCWVsc2UKIAkJaSA9IC1FSU87CiAJdHR5X2xkaXNjX2RlcmVmKGxkKTsKQEAgLTE5NzgsMTAgKzE1MDcsMTAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ0dHkgZHJpdmVyICVzIGxhY2tzIGEgd3JpdGVfcm9vbSBtZXRob2QuXG4iLAogCQkJdHR5LT5kcml2ZXItPm5hbWUpOwogCWxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7Ci0JaWYgKCFsZC0+d3JpdGUpCisJaWYgKCFsZC0+b3BzLT53cml0ZSkKIAkJcmV0ID0gLUVJTzsKIAllbHNlCi0JCXJldCA9IGRvX3R0eV93cml0ZShsZC0+d3JpdGUsIHR0eSwgZmlsZSwgYnVmLCBjb3VudCk7CisJCXJldCA9IGRvX3R0eV93cml0ZShsZC0+b3BzLT53cml0ZSwgdHR5LCBmaWxlLCBidWYsIGNvdW50KTsKIAl0dHlfbGRpc2NfZGVyZWYobGQpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMDA3LDYgKzE1MzYsNDIgQEAKIAlyZXR1cm4gdHR5X3dyaXRlKGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOwogfQogCit2b2lkIHR0eV9wb3J0X2luaXQoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQoreworCW1lbXNldChwb3J0LCAwLCBzaXplb2YoKnBvcnQpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5vcGVuX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPmNsb3NlX3dhaXQpOworCW11dGV4X2luaXQoJnBvcnQtPm11dGV4KTsKKwlwb3J0LT5jbG9zZV9kZWxheSA9ICg1MCAqIEhaKSAvIDEwMDsKKwlwb3J0LT5jbG9zaW5nX3dhaXQgPSAoMzAwMCAqIEhaKSAvIDEwMDsKK30KK0VYUE9SVF9TWU1CT0wodHR5X3BvcnRfaW5pdCk7CisKK2ludCB0dHlfcG9ydF9hbGxvY194bWl0X2J1ZihzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCit7CisJLyogV2UgbWF5IHNsZWVwIGluIGdldF96ZXJvZWRfcGFnZSgpICovCisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCWlmIChwb3J0LT54bWl0X2J1ZiA9PSBOVUxMKQorCQlwb3J0LT54bWl0X2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCWlmIChwb3J0LT54bWl0X2J1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodHR5X3BvcnRfYWxsb2NfeG1pdF9idWYpOworCit2b2lkIHR0eV9wb3J0X2ZyZWVfeG1pdF9idWYoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQoreworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKKwlpZiAocG9ydC0+eG1pdF9idWYgIT0gTlVMTCkgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcG9ydC0+eG1pdF9idWYpOworCQlwb3J0LT54bWl0X2J1ZiA9IE5VTEw7CisJfQorCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTCh0dHlfcG9ydF9mcmVlX3htaXRfYnVmKTsKKworCiBzdGF0aWMgY2hhciBwdHljaGFyW10gPSAicHFyc3R1dnd4eXphYmNkZSI7CiAKIC8qKgpAQCAtMjIyNSwyMiArMTc5MCwxMSBAQAogCSAqIHRvIGRlY3JlbWVudCB0aGUgdXNlIGNvdW50cywgYXMgcmVsZWFzZV90dHkgZG9lc24ndCBjYXJlLgogCSAqLwogCi0JaWYgKHR0eS0+bGRpc2Mub3BlbikgewotCQlyZXR2YWwgPSAodHR5LT5sZGlzYy5vcGVuKSh0dHkpOwotCQlpZiAocmV0dmFsKQotCQkJZ290byByZWxlYXNlX21lbV9vdXQ7Ci0JfQotCWlmIChvX3R0eSAmJiBvX3R0eS0+bGRpc2Mub3BlbikgewotCQlyZXR2YWwgPSAob190dHktPmxkaXNjLm9wZW4pKG9fdHR5KTsKLQkJaWYgKHJldHZhbCkgewotCQkJaWYgKHR0eS0+bGRpc2MuY2xvc2UpCi0JCQkJKHR0eS0+bGRpc2MuY2xvc2UpKHR0eSk7Ci0JCQlnb3RvIHJlbGVhc2VfbWVtX291dDsKLQkJfQotCQl0dHlfbGRpc2NfZW5hYmxlKG9fdHR5KTsKLQl9Ci0JdHR5X2xkaXNjX2VuYWJsZSh0dHkpOwotCWdvdG8gc3VjY2VzczsKKwlyZXR2YWwgPSB0dHlfbGRpc2Nfc2V0dXAodHR5LCBvX3R0eSk7CisKKwlpZiAocmV0dmFsKQorCQlnb3RvIHJlbGVhc2VfbWVtX291dDsKKwkgZ290byBzdWNjZXNzOwogCiAJLyoKIAkgKiBUaGlzIGZhc3Qgb3BlbiBjYW4gYmUgdXNlZCBpZiB0aGUgdHR5IGlzIGFscmVhZHkgb3Blbi4KQEAgLTIzODIsNyArMTkzNiw2IEBACiAJaW50CWRldnB0czsKIAlpbnQJaWR4OwogCWNoYXIJYnVmWzY0XTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdHR5ID0gKHN0cnVjdCB0dHlfc3RydWN0ICopZmlscC0+cHJpdmF0ZV9kYXRhOwogCWlmICh0dHlfcGFyYW5vaWFfY2hlY2sodHR5LCBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLApAQCAtMjU4NCw1NSArMjEzNyw5IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImZyZWVpbmcgdHR5IHN0cnVjdHVyZS4uLiIpOwogI2VuZGlmCiAJLyoKLQkgKiBQcmV2ZW50IGZsdXNoX3RvX2xkaXNjKCkgZnJvbSByZXNjaGVkdWxpbmcgdGhlIHdvcmsgZm9yIGxhdGVyLiAgVGhlbgotCSAqIGtpbGwgYW55IGRlbGF5ZWQgd29yay4gQXMgdGhpcyBpcyB0aGUgZmluYWwgY2xvc2UgaXQgZG9lcyBub3QKLQkgKiByYWNlIHdpdGggdGhlIHNldF9sZGlzYyBjb2RlIHBhdGguCisJICogQXNrIHRoZSBsaW5lIGRpc2NpcGxpbmUgY29kZSB0byByZWxlYXNlIGl0cyBzdHJ1Y3R1cmVzCiAJICovCi0JY2xlYXJfYml0KFRUWV9MRElTQywgJnR0eS0+ZmxhZ3MpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmspOwotCi0JLyoKLQkgKiBXYWl0IGZvciAtPmhhbmd1cF93b3JrIGFuZCAtPmJ1Zi53b3JrIGhhbmRsZXJzIHRvIHRlcm1pbmF0ZQotCSAqLwotCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQotCS8qCi0JICogV2FpdCBmb3IgYW55IHNob3J0IHRlcm0gdXNlcnMgKHdlIGtub3cgdGhleSBhcmUganVzdCBkcml2ZXIKLQkgKiBzaWRlIHdhaXRlcnMgYXMgdGhlIGZpbGUgaXMgY2xvc2luZyBzbyB1c2VyIGNvdW50IG9uIHRoZSBmaWxlCi0JICogc2lkZSBpcyB6ZXJvLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCXdoaWxlICh0dHktPmxkaXNjLnJlZmNvdW50KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Ci0JCXdhaXRfZXZlbnQodHR5X2xkaXNjX3dhaXQsIHR0eS0+bGRpc2MucmVmY291bnQgPT0gMCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwotCS8qCi0JICogU2h1dGRvd24gdGhlIGN1cnJlbnQgbGluZSBkaXNjaXBsaW5lLCBhbmQgcmVzZXQgaXQgdG8gTl9UVFkuCi0JICogTi5CLiB3aHkgcmVzZXQgbGRpc2Mgd2hlbiB3ZSdyZSByZWxlYXNpbmcgdGhlIG1lbW9yeT8/Ci0JICoKLQkgKiBGSVhNRTogdGhpcyBNVVNUIGdldCBmaXhlZCBmb3IgdGhlIG5ldyByZWZsb2NraW5nCi0JICovCi0JaWYgKHR0eS0+bGRpc2MuY2xvc2UpCi0JCSh0dHktPmxkaXNjLmNsb3NlKSh0dHkpOwotCXR0eV9sZGlzY19wdXQodHR5LT5sZGlzYy5udW0pOwotCi0JLyoKLQkgKglTd2l0Y2ggdGhlIGxpbmUgZGlzY2lwbGluZSBiYWNrCi0JICovCi0JdHR5X2xkaXNjX2Fzc2lnbih0dHksIHR0eV9sZGlzY19nZXQoTl9UVFkpKTsKLQl0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBOX1RUWSk7Ci0JaWYgKG9fdHR5KSB7Ci0JCS8qIEZJWE1FOiBjb3VsZCBvX3R0eSBiZSBpbiBzZXRsZGlzYyBoZXJlID8gKi8KLQkJY2xlYXJfYml0KFRUWV9MRElTQywgJm9fdHR5LT5mbGFncyk7Ci0JCWlmIChvX3R0eS0+bGRpc2MuY2xvc2UpCi0JCQkob190dHktPmxkaXNjLmNsb3NlKShvX3R0eSk7Ci0JCXR0eV9sZGlzY19wdXQob190dHktPmxkaXNjLm51bSk7Ci0JCXR0eV9sZGlzY19hc3NpZ24ob190dHksIHR0eV9sZGlzY19nZXQoTl9UVFkpKTsKLQkJdHR5X3NldF90ZXJtaW9zX2xkaXNjKG9fdHR5LCBOX1RUWSk7Ci0JfQorCXR0eV9sZGlzY19yZWxlYXNlKHR0eSwgb190dHkpOwogCS8qCiAJICogVGhlIHJlbGVhc2VfdHR5IGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgdGhlIGRldGFpbHMgb2YgY2xlYXJpbmcKIAkgKiB0aGUgc2xvdHMgYW5kIHByZXNlcnZpbmcgdGhlIHRlcm1pb3Mgc3RydWN0dXJlLgpAQCAtMjg5OSw4ICsyNDA2LDggQEAKIAkJcmV0dXJuIDA7CiAKIAlsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpOwotCWlmIChsZC0+cG9sbCkKLQkJcmV0ID0gKGxkLT5wb2xsKSh0dHksIGZpbHAsIHdhaXQpOworCWlmIChsZC0+b3BzLT5wb2xsKQorCQlyZXQgPSAobGQtPm9wcy0+cG9sbCkodHR5LCBmaWxwLCB3YWl0KTsKIAl0dHlfbGRpc2NfZGVyZWYobGQpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yOTc0LDcgKzI0ODEsNyBAQAogCWlmIChnZXRfdXNlcihjaCwgcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCWxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7Ci0JbGQtPnJlY2VpdmVfYnVmKHR0eSwgJmNoLCAmbWJ6LCAxKTsKKwlsZC0+b3BzLT5yZWNlaXZlX2J1Zih0dHksICZjaCwgJm1ieiwgMSk7CiAJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNDIsMTYgKzI4NDksMjkgQEAKIAogc3RhdGljIGludCBzZW5kX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGludCBkdXJhdGlvbikKIHsKLQlpZiAodHR5X3dyaXRlX2xvY2sodHR5LCAwKSA8IDApCi0JCXJldHVybiAtRUlOVFI7Ci0JdHR5LT5vcHMtPmJyZWFrX2N0bCh0dHksIC0xKTsKLQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQltc2xlZXBfaW50ZXJydXB0aWJsZShkdXJhdGlvbik7Ci0JdHR5LT5vcHMtPmJyZWFrX2N0bCh0dHksIDApOwotCXR0eV93cml0ZV91bmxvY2sodHR5KTsKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCXJldHVybiAtRUlOVFI7Ci0JcmV0dXJuIDA7CisJaW50IHJldHZhbDsKKworCWlmICh0dHktPm9wcy0+YnJlYWtfY3RsID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHR0eS0+ZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfSEFSRFdBUkVfQlJFQUspCisJCXJldHZhbCA9IHR0eS0+b3BzLT5icmVha19jdGwodHR5LCBkdXJhdGlvbik7CisJZWxzZSB7CisJCS8qIERvIHRoZSB3b3JrIG91cnNlbHZlcyAqLworCQlpZiAodHR5X3dyaXRlX2xvY2sodHR5LCAwKSA8IDApCisJCQlyZXR1cm4gLUVJTlRSOworCQlyZXR2YWwgPSB0dHktPm9wcy0+YnJlYWtfY3RsKHR0eSwgLTEpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQltc2xlZXBfaW50ZXJydXB0aWJsZShkdXJhdGlvbik7CisJCXJldHZhbCA9IHR0eS0+b3BzLT5icmVha19jdGwodHR5LCAwKTsKK291dDoKKwkJdHR5X3dyaXRlX3VubG9jayh0dHkpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR2YWwgPSAtRUlOVFI7CisJfQorCXJldHVybiByZXR2YWw7CiB9CiAKIC8qKgpAQCAtMzM5NSwzNSArMjkxNSwzMSBAQAogc3RhdGljIGludCB0dHlfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJICAgICB1bnNpZ25lZCBfX3VzZXIgKnApCiB7Ci0JaW50IHJldHZhbCA9IC1FSU5WQUw7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBpbnQgc2V0LCBjbGVhciwgdmFsOwogCi0JaWYgKHR0eS0+b3BzLT50aW9jbXNldCkgewotCQl1bnNpZ25lZCBpbnQgc2V0LCBjbGVhciwgdmFsOworCWlmICh0dHktPm9wcy0+dGlvY21zZXQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJcmV0dmFsID0gZ2V0X3VzZXIodmFsLCBwKTsKLQkJaWYgKHJldHZhbCkKLQkJCXJldHVybiByZXR2YWw7Ci0KLQkJc2V0ID0gY2xlYXIgPSAwOwotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFRJT0NNQklTOgotCQkJc2V0ID0gdmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgVElPQ01CSUM6Ci0JCQljbGVhciA9IHZhbDsKLQkJCWJyZWFrOwotCQljYXNlIFRJT0NNU0VUOgotCQkJc2V0ID0gdmFsOwotCQkJY2xlYXIgPSB+dmFsOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzZXQgJj0gVElPQ01fRFRSfFRJT0NNX1JUU3xUSU9DTV9PVVQxfFRJT0NNX09VVDJ8VElPQ01fTE9PUDsKLQkJY2xlYXIgJj0gVElPQ01fRFRSfFRJT0NNX1JUU3xUSU9DTV9PVVQxfFRJT0NNX09VVDJ8VElPQ01fTE9PUDsKLQotCQlyZXR2YWwgPSB0dHktPm9wcy0+dGlvY21zZXQodHR5LCBmaWxlLCBzZXQsIGNsZWFyKTsKKwlyZXR2YWwgPSBnZXRfdXNlcih2YWwsIHApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJc2V0ID0gY2xlYXIgPSAwOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DTUJJUzoKKwkJc2V0ID0gdmFsOworCQlicmVhazsKKwljYXNlIFRJT0NNQklDOgorCQljbGVhciA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSBUSU9DTVNFVDoKKwkJc2V0ID0gdmFsOworCQljbGVhciA9IH52YWw7CisJCWJyZWFrOwogCX0KLQlyZXR1cm4gcmV0dmFsOworCXNldCAmPSBUSU9DTV9EVFJ8VElPQ01fUlRTfFRJT0NNX09VVDF8VElPQ01fT1VUMnxUSU9DTV9MT09QOworCWNsZWFyICY9IFRJT0NNX0RUUnxUSU9DTV9SVFN8VElPQ01fT1VUMXxUSU9DTV9PVVQyfFRJT0NNX0xPT1A7CisJcmV0dXJuIHR0eS0+b3BzLT50aW9jbXNldCh0dHksIGZpbGUsIHNldCwgY2xlYXIpOwogfQogCiAvKgpAQCAtMzQ0NiwzNiArMjk2Miw2IEBACiAJICAgIHR0eS0+ZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX01BU1RFUikKIAkJcmVhbF90dHkgPSB0dHktPmxpbms7CiAKLQkvKgotCSAqIEJyZWFrIGhhbmRsaW5nIGJ5IGRyaXZlcgotCSAqLwotCi0JcmV0dmFsID0gLUVJTlZBTDsKLQotCWlmICghdHR5LT5vcHMtPmJyZWFrX2N0bCkgewotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFRJT0NTQlJLOgotCQljYXNlIFRJT0NDQlJLOgotCQkJaWYgKHR0eS0+b3BzLT5pb2N0bCkKLQkJCQlyZXR2YWwgPSB0dHktPm9wcy0+aW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7Ci0JCQlpZiAocmV0dmFsICE9IC1FSU5WQUwgJiYgcmV0dmFsICE9IC1FTk9JT0NUTENNRCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0dHk6IGRyaXZlciAlcyBuZWVkcyB1cGRhdGluZyB0byB1c2UgYnJlYWtfY3RsXG4iLCB0dHktPmRyaXZlci0+bmFtZSk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCi0JCS8qIFRoZXNlIHR3byBpb2N0bCdzIGFsd2F5cyByZXR1cm4gc3VjY2VzczsgZXZlbiBpZiAqLwotCQkvKiB0aGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLiAqLwotCQljYXNlIFRDU0JSSzoKLQkJY2FzZSBUQ1NCUktQOgotCQkJaWYgKCF0dHktPm9wcy0+aW9jdGwpCi0JCQkJcmV0dXJuIDA7Ci0JCQlyZXR2YWwgPSB0dHktPm9wcy0+aW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7Ci0JCQlpZiAocmV0dmFsICE9IC1FSU5WQUwgJiYgcmV0dmFsICE9IC1FTk9JT0NUTENNRCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0dHk6IGRyaXZlciAlcyBuZWVkcyB1cGRhdGluZyB0byB1c2UgYnJlYWtfY3RsXG4iLCB0dHktPmRyaXZlci0+bmFtZSk7Ci0JCQlpZiAocmV0dmFsID09IC1FTk9JT0NUTENNRCkKLQkJCQlyZXR2YWwgPSAwOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCX0KIAogCS8qCiAJICogRmFjdG9yIG91dCBzb21lIGNvbW1vbiBwcmVwIHdvcmsKQEAgLTM0OTcsNiArMjk4Myw5IEBACiAJCWJyZWFrOwogCX0KIAorCS8qCisJICoJTm93IGRvIHRoZSBzdHVmZi4KKwkgKi8KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVElPQ1NUSToKIAkJcmV0dXJuIHRpb2NzdGkodHR5LCBwKTsKQEAgLTM1MjgsNyArMzAxNyw3IEBACiAJY2FzZSBUSU9DR1NJRDoKIAkJcmV0dXJuIHRpb2Nnc2lkKHR0eSwgcmVhbF90dHksIHApOwogCWNhc2UgVElPQ0dFVEQ6Ci0JCXJldHVybiBwdXRfdXNlcih0dHktPmxkaXNjLm51bSwgKGludCBfX3VzZXIgKilwKTsKKwkJcmV0dXJuIHB1dF91c2VyKHR0eS0+bGRpc2Mub3BzLT5udW0sIChpbnQgX191c2VyICopcCk7CiAJY2FzZSBUSU9DU0VURDoKIAkJcmV0dXJuIHRpb2NzZXRkKHR0eSwgcCk7CiAjaWZkZWYgQ09ORklHX1ZUCkBAIC0zNTQwLDEyICszMDI5LDExIEBACiAJICovCiAJY2FzZSBUSU9DU0JSSzoJLyogVHVybiBicmVhayBvbiwgdW5jb25kaXRpb25hbGx5ICovCiAJCWlmICh0dHktPm9wcy0+YnJlYWtfY3RsKQotCQkJdHR5LT5vcHMtPmJyZWFrX2N0bCh0dHksIC0xKTsKKwkJCXJldHVybiB0dHktPm9wcy0+YnJlYWtfY3RsKHR0eSwgLTEpOwogCQlyZXR1cm4gMDsKLQogCWNhc2UgVElPQ0NCUks6CS8qIFR1cm4gYnJlYWsgb2ZmLCB1bmNvbmRpdGlvbmFsbHkgKi8KIAkJaWYgKHR0eS0+b3BzLT5icmVha19jdGwpCi0JCQl0dHktPm9wcy0+YnJlYWtfY3RsKHR0eSwgMCk7CisJCQlyZXR1cm4gdHR5LT5vcHMtPmJyZWFrX2N0bCh0dHksIDApOwogCQlyZXR1cm4gMDsKIAljYXNlIFRDU0JSSzogICAvKiBTVklEIHZlcnNpb246IG5vbi16ZXJvIGFyZyAtLT4gbm8gYnJlYWsgKi8KIAkJLyogbm9uLXplcm8gYXJnIG1lYW5zIHdhaXQgZm9yIGFsbCBvdXRwdXQgZGF0YQpAQCAtMzU4MSw4ICszMDY5LDggQEAKIAl9CiAJbGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTsKIAlyZXR2YWwgPSAtRUlOVkFMOwotCWlmIChsZC0+aW9jdGwpIHsKLQkJcmV0dmFsID0gbGQtPmlvY3RsKHR0eSwgZmlsZSwgY21kLCBhcmcpOworCWlmIChsZC0+b3BzLT5pb2N0bCkgeworCQlyZXR2YWwgPSBsZC0+b3BzLT5pb2N0bCh0dHksIGZpbGUsIGNtZCwgYXJnKTsKIAkJaWYgKHJldHZhbCA9PSAtRU5PSU9DVExDTUQpCiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCX0KQEAgLTM2MDksOCArMzA5Nyw4IEBACiAJfQogCiAJbGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTsKLQlpZiAobGQtPmNvbXBhdF9pb2N0bCkKLQkJcmV0dmFsID0gbGQtPmNvbXBhdF9pb2N0bCh0dHksIGZpbGUsIGNtZCwgYXJnKTsKKwlpZiAobGQtPm9wcy0+Y29tcGF0X2lvY3RsKQorCQlyZXR2YWwgPSBsZC0+b3BzLT5jb21wYXRfaW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7CiAJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0zNzgyLDcgKzMyNzAsOCBAQAogCQkJZmxhZ19idWYgPSBoZWFkLT5mbGFnX2J1Zl9wdHIgKyBoZWFkLT5yZWFkOwogCQkJaGVhZC0+cmVhZCArPSBjb3VudDsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQkJCWRpc2MtPnJlY2VpdmVfYnVmKHR0eSwgY2hhcl9idWYsIGZsYWdfYnVmLCBjb3VudCk7CisJCQlkaXNjLT5vcHMtPnJlY2VpdmVfYnVmKHR0eSwgY2hhcl9idWYsCisJCQkJCQkJZmxhZ19idWYsIGNvdW50KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAJCX0KIAkJLyogUmVzdG9yZSB0aGUgcXVldWUgaGVhZCAqLwpAQCAtMzg0NSw3ICszMzM0LDcgQEAKIHsKIAltZW1zZXQodHR5LCAwLCBzaXplb2Yoc3RydWN0IHR0eV9zdHJ1Y3QpKTsKIAl0dHktPm1hZ2ljID0gVFRZX01BR0lDOwotCXR0eV9sZGlzY19hc3NpZ24odHR5LCB0dHlfbGRpc2NfZ2V0KE5fVFRZKSk7CisJdHR5X2xkaXNjX2luaXQodHR5KTsKIAl0dHktPnNlc3Npb24gPSBOVUxMOwogCXR0eS0+cGdycCA9IE5VTEw7CiAJdHR5LT5vdmVycnVuX3RpbWUgPSBqaWZmaWVzOwpAQCAtMzkyMyw3ICszNDEyLDcgQEAKIAllbHNlCiAJCXR0eV9saW5lX25hbWUoZHJpdmVyLCBpbmRleCwgbmFtZSk7CiAKLQlyZXR1cm4gZGV2aWNlX2NyZWF0ZSh0dHlfY2xhc3MsIGRldmljZSwgZGV2LCBuYW1lKTsKKwlyZXR1cm4gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHR0eV9jbGFzcywgZGV2aWNlLCBkZXYsIE5VTEwsIG5hbWUpOwogfQogCiAvKioKQEAgLTQxNTgsNyArMzY0Nyw3IEBACiAJaW5pdGNhbGxfdCAqY2FsbDsKIAogCS8qIFNldHVwIHRoZSBkZWZhdWx0IFRUWSBsaW5lIGRpc2NpcGxpbmUuICovCi0JKHZvaWQpIHR0eV9yZWdpc3Rlcl9sZGlzYyhOX1RUWSwgJnR0eV9sZGlzY19OX1RUWSk7CisJdHR5X2xkaXNjX2JlZ2luKCk7CiAKIAkvKgogCSAqIHNldCB1cCB0aGUgY29uc29sZSBkZXZpY2Ugc28gdGhhdCBsYXRlciBib290IHNlcXVlbmNlcyBjYW4KQEAgLTQyMDEsMjAgKzM2OTAsMjIgQEAKIAlpZiAoY2Rldl9hZGQoJnR0eV9jZGV2LCBNS0RFVihUVFlBVVhfTUFKT1IsIDApLCAxKSB8fAogCSAgICByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKFRUWUFVWF9NQUpPUiwgMCksIDEsICIvZGV2L3R0eSIpIDwgMCkKIAkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIC9kZXYvdHR5IGRyaXZlclxuIik7Ci0JZGV2aWNlX2NyZWF0ZSh0dHlfY2xhc3MsIE5VTEwsIE1LREVWKFRUWUFVWF9NQUpPUiwgMCksICJ0dHkiKTsKKwlkZXZpY2VfY3JlYXRlX2RydmRhdGEodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDApLCBOVUxMLAorCQkJICAgICAgInR0eSIpOwogCiAJY2Rldl9pbml0KCZjb25zb2xlX2NkZXYsICZjb25zb2xlX2ZvcHMpOwogCWlmIChjZGV2X2FkZCgmY29uc29sZV9jZGV2LCBNS0RFVihUVFlBVVhfTUFKT1IsIDEpLCAxKSB8fAogCSAgICByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKFRUWUFVWF9NQUpPUiwgMSksIDEsICIvZGV2L2NvbnNvbGUiKSA8IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciAvZGV2L2NvbnNvbGUgZHJpdmVyXG4iKTsKLQlkZXZpY2VfY3JlYXRlKHR0eV9jbGFzcywgTlVMTCwgTUtERVYoVFRZQVVYX01BSk9SLCAxKSwgImNvbnNvbGUiKTsKKwlkZXZpY2VfY3JlYXRlX2RydmRhdGEodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDEpLCBOVUxMLAorCQkJICAgICAgImNvbnNvbGUiKTsKIAogI2lmZGVmIENPTkZJR19VTklYOThfUFRZUwogCWNkZXZfaW5pdCgmcHRteF9jZGV2LCAmcHRteF9mb3BzKTsKIAlpZiAoY2Rldl9hZGQoJnB0bXhfY2RldiwgTUtERVYoVFRZQVVYX01BSk9SLCAyKSwgMSkgfHwKIAkgICAgcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihUVFlBVVhfTUFKT1IsIDIpLCAxLCAiL2Rldi9wdG14IikgPCAwKQogCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgL2Rldi9wdG14IGRyaXZlclxuIik7Ci0JZGV2aWNlX2NyZWF0ZSh0dHlfY2xhc3MsIE5VTEwsIE1LREVWKFRUWUFVWF9NQUpPUiwgMiksICJwdG14Iik7CisJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHR0eV9jbGFzcywgTlVMTCwgTUtERVYoVFRZQVVYX01BSk9SLCAyKSwgTlVMTCwgInB0bXgiKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1ZUCkBAIC00MjIyLDcgKzM3MTMsNyBAQAogCWlmIChjZGV2X2FkZCgmdmMwX2NkZXYsIE1LREVWKFRUWV9NQUpPUiwgMCksIDEpIHx8CiAJICAgIHJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoVFRZX01BSk9SLCAwKSwgMSwgIi9kZXYvdmMvMCIpIDwgMCkKIAkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIC9kZXYvdHR5MCBkcml2ZXJcbiIpOwotCWRldmljZV9jcmVhdGUodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlfTUFKT1IsIDApLCAidHR5MCIpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YSh0dHlfY2xhc3MsIE5VTEwsIE1LREVWKFRUWV9NQUpPUiwgMCksIE5VTEwsICJ0dHkwIik7CiAKIAl2dHlfaW5pdCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMKaW5kZXggOGY4MTEzOS4uZWE5ZmM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYwpAQCAtNDkxLDggKzQ5MSw4IEBACiAKIAlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKIAlpZiAobGQgIT0gTlVMTCkgewotCQlpZiAobGQtPnNldF90ZXJtaW9zKQotCQkJKGxkLT5zZXRfdGVybWlvcykodHR5LCAmb2xkX3Rlcm1pb3MpOworCQlpZiAobGQtPm9wcy0+c2V0X3Rlcm1pb3MpCisJCQkobGQtPm9wcy0+c2V0X3Rlcm1pb3MpKHR0eSwgJm9sZF90ZXJtaW9zKTsKIAkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOwpAQCAtNTUyLDggKzU1Miw4IEBACiAJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CiAKIAlpZiAobGQgIT0gTlVMTCkgewotCQlpZiAoKG9wdCAmIFRFUk1JT1NfRkxVU0gpICYmIGxkLT5mbHVzaF9idWZmZXIpCi0JCQlsZC0+Zmx1c2hfYnVmZmVyKHR0eSk7CisJCWlmICgob3B0ICYgVEVSTUlPU19GTFVTSCkgJiYgbGQtPm9wcy0+Zmx1c2hfYnVmZmVyKQorCQkJbGQtPm9wcy0+Zmx1c2hfYnVmZmVyKHR0eSk7CiAJCXR0eV9sZGlzY19kZXJlZihsZCk7CiAJfQogCkBAIC05NTksMTIgKzk1OSwxMiBAQAogCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCXN3aXRjaCAoYXJnKSB7CiAJY2FzZSBUQ0lGTFVTSDoKLQkJaWYgKGxkICYmIGxkLT5mbHVzaF9idWZmZXIpCi0JCQlsZC0+Zmx1c2hfYnVmZmVyKHR0eSk7CisJCWlmIChsZCAmJiBsZC0+b3BzLT5mbHVzaF9idWZmZXIpCisJCQlsZC0+b3BzLT5mbHVzaF9idWZmZXIodHR5KTsKIAkJYnJlYWs7CiAJY2FzZSBUQ0lPRkxVU0g6Ci0JCWlmIChsZCAmJiBsZC0+Zmx1c2hfYnVmZmVyKQotCQkJbGQtPmZsdXNoX2J1ZmZlcih0dHkpOworCQlpZiAobGQgJiYgbGQtPm9wcy0+Zmx1c2hfYnVmZmVyKQorCQkJbGQtPm9wcy0+Zmx1c2hfYnVmZmVyKHR0eSk7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgVENPRkxVU0g6CiAJCXR0eV9kcml2ZXJfZmx1c2hfYnVmZmVyKHR0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQxY2JkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwpAQCAtMCwwICsxLDcxNCBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZwdHNfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmR0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgva2QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSA8bGludXgva2JkX2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisjaW5jbHVkZSA8bGludXgvc2VsZWN0aW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgorCisvKgorICoJVGhpcyBndWFyZHMgdGhlIHJlZmNvdW50ZWQgbGluZSBkaXNjaXBsaW5lIGxpc3RzLiBUaGUgbG9jaworICoJbXVzdCBiZSB0YWtlbiB3aXRoIGlycXMgb2ZmIGJlY2F1c2UgdGhlcmUgYXJlIGhhbmd1cCBwYXRoCisgKgljYWxsZXJzIHdobyB3aWxsIGRvIGxkaXNjIGxvb2t1cHMgYW5kIGNhbm5vdCBzbGVlcC4KKyAqLworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHR0eV9sZGlzY19sb2NrKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh0dHlfbGRpc2Nfd2FpdCk7CisvKiBMaW5lIGRpc2MgZGlzcGF0Y2ggdGFibGUgKi8KK3N0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyAqdHR5X2xkaXNjc1tOUl9MRElTQ1NdOworCisvKioKKyAqCXR0eV9yZWdpc3Rlcl9sZGlzYwktCWluc3RhbGwgYSBsaW5lIGRpc2NpcGxpbmUKKyAqCUBkaXNjOiBsZGlzYyBudW1iZXIKKyAqCUBuZXdfbGRpc2M6IHBvaW50ZXIgdG8gdGhlIGxkaXNjIG9iamVjdAorICoKKyAqCUluc3RhbGxzIGEgbmV3IGxpbmUgZGlzY2lwbGluZSBpbnRvIHRoZSBrZXJuZWwuIFRoZSBkaXNjaXBsaW5lCisgKglpcyBzZXQgdXAgYXMgdW5yZWZlcmVuY2VkIGFuZCB0aGVuIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBrZXJuZWwKKyAqCWZyb20gdGhpcyBwb2ludCBvbndhcmRzLgorICoKKyAqCUxvY2tpbmc6CisgKgkJdGFrZXMgdHR5X2xkaXNjX2xvY2sgdG8gZ3VhcmQgYWdhaW5zdCBsZGlzYyByYWNlcworICovCisKK2ludCB0dHlfcmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MsIHN0cnVjdCB0dHlfbGRpc2Nfb3BzICpuZXdfbGRpc2MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkaXNjIDwgTl9UVFkgfHwgZGlzYyA+PSBOUl9MRElTQ1MpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7CisJdHR5X2xkaXNjc1tkaXNjXSA9IG5ld19sZGlzYzsKKwluZXdfbGRpc2MtPm51bSA9IGRpc2M7CisJbmV3X2xkaXNjLT5yZWZjb3VudCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHR0eV9yZWdpc3Rlcl9sZGlzYyk7CisKKy8qKgorICoJdHR5X3VucmVnaXN0ZXJfbGRpc2MJLQl1bmxvYWQgYSBsaW5lIGRpc2NpcGxpbmUKKyAqCUBkaXNjOiBsZGlzYyBudW1iZXIKKyAqCUBuZXdfbGRpc2M6IHBvaW50ZXIgdG8gdGhlIGxkaXNjIG9iamVjdAorICoKKyAqCVJlbW92ZSBhIGxpbmUgZGlzY2lwbGluZSBmcm9tIHRoZSBrZXJuZWwgcHJvdmlkaW5nIGl0IGlzIG5vdAorICoJY3VycmVudGx5IGluIHVzZS4KKyAqCisgKglMb2NraW5nOgorICoJCXRha2VzIHR0eV9sZGlzY19sb2NrIHRvIGd1YXJkIGFnYWluc3QgbGRpc2MgcmFjZXMKKyAqLworCitpbnQgdHR5X3VucmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkaXNjIDwgTl9UVFkgfHwgZGlzYyA+PSBOUl9MRElTQ1MpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7CisJaWYgKHR0eV9sZGlzY3NbZGlzY10tPnJlZmNvdW50KQorCQlyZXQgPSAtRUJVU1k7CisJZWxzZQorCQl0dHlfbGRpc2NzW2Rpc2NdID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodHR5X3VucmVnaXN0ZXJfbGRpc2MpOworCisKKy8qKgorICoJdHR5X2xkaXNjX3RyeV9nZXQJLQl0cnkgYW5kIHJlZmVyZW5jZSBhbiBsZGlzYworICoJQGRpc2M6IGxkaXNjIG51bWJlcgorICoJQGxkOiB0dHkgbGRpc2Mgc3RydWN0dXJlIHRvIGNvbXBsZXRlCisgKgorICoJQXR0ZW1wdCB0byBvcGVuIGFuZCBsb2NrIGEgbGluZSBkaXNjaXBsaW5lIGludG8gcGxhY2UuIFJldHVybgorICoJdGhlIGxpbmUgZGlzY2lwbGluZSByZWZjb3VudGVkIGFuZCBhc3NpZ25lZCBpbiBsZC4gT24gYW4gZXJyb3IKKyAqCXJlcG9ydCB0aGUgZXJyb3IgY29kZSBiYWNrCisgKi8KKworc3RhdGljIGludCB0dHlfbGRpc2NfdHJ5X2dldChpbnQgZGlzYywgc3RydWN0IHR0eV9sZGlzYyAqbGQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdHR5X2xkaXNjX29wcyAqbGRvcHM7CisJaW50IGVyciA9IC1FSU5WQUw7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7CisJbGQtPm9wcyA9IE5VTEw7CisJbGRvcHMgPSB0dHlfbGRpc2NzW2Rpc2NdOworCS8qIENoZWNrIHRoZSBlbnRyeSBpcyBkZWZpbmVkICovCisJaWYgKGxkb3BzKSB7CisJCS8qIElmIHRoZSBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQgd2UgY2FuJ3QgdXNlIGl0ICovCisJCWlmICghdHJ5X21vZHVsZV9nZXQobGRvcHMtPm93bmVyKSkKKwkJCWVyciA9IC1FQUdBSU47CisJCWVsc2UgeworCQkJLyogbG9jayBpdCAqLworCQkJbGRvcHMtPnJlZmNvdW50Kys7CisJCQlsZC0+b3BzID0gbGRvcHM7CisJCQllcnIgPSAwOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKgl0dHlfbGRpc2NfZ2V0CQktCXRha2UgYSByZWZlcmVuY2UgdG8gYW4gbGRpc2MKKyAqCUBkaXNjOiBsZGlzYyBudW1iZXIKKyAqCUBsZDogdHR5IGxpbmUgZGlzY2lwbGluZSBzdHJ1Y3R1cmUgdG8gdXNlCisgKgorICoJVGFrZXMgYSByZWZlcmVuY2UgdG8gYSBsaW5lIGRpc2NpcGxpbmUuIERlYWxzIHdpdGggcmVmY291bnRzIGFuZAorICoJbW9kdWxlIGxvY2tpbmcgY291bnRzLiBSZXR1cm5zIE5VTEwgaWYgdGhlIGRpc2NpcGxpbmUgaXMgbm90IGF2YWlsYWJsZS4KKyAqCVJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkaXNjaXBsaW5lIGFuZCBidW1wcyB0aGUgcmVmIGNvdW50IGlmIGl0IGlzCisgKglhdmFpbGFibGUKKyAqCisgKglMb2NraW5nOgorICoJCXRha2VzIHR0eV9sZGlzY19sb2NrIHRvIGd1YXJkIGFnYWluc3QgbGRpc2MgcmFjZXMKKyAqLworCitzdGF0aWMgaW50IHR0eV9sZGlzY19nZXQoaW50IGRpc2MsIHN0cnVjdCB0dHlfbGRpc2MgKmxkKQoreworCWludCBlcnI7CisKKwlpZiAoZGlzYyA8IE5fVFRZIHx8IGRpc2MgPj0gTlJfTERJU0NTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcnIgPSB0dHlfbGRpc2NfdHJ5X2dldChkaXNjLCBsZCk7CisJaWYgKGVyciA9PSAtRUFHQUlOKSB7CisJCXJlcXVlc3RfbW9kdWxlKCJ0dHktbGRpc2MtJWQiLCBkaXNjKTsKKwkJZXJyID0gdHR5X2xkaXNjX3RyeV9nZXQoZGlzYywgbGQpOworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqCXR0eV9sZGlzY19wdXQJCS0JZHJvcCBsZGlzYyByZWZlcmVuY2UKKyAqCUBkaXNjOiBsZGlzYyBudW1iZXIKKyAqCisgKglEcm9wIGEgcmVmZXJlbmNlIHRvIGEgbGluZSBkaXNjaXBsaW5lLiBNYW5hZ2UgcmVmY291bnRzIGFuZAorICoJbW9kdWxlIHVzYWdlIGNvdW50cworICoKKyAqCUxvY2tpbmc6CisgKgkJdGFrZXMgdHR5X2xkaXNjX2xvY2sgdG8gZ3VhcmQgYWdhaW5zdCBsZGlzYyByYWNlcworICovCisKK3N0YXRpYyB2b2lkIHR0eV9sZGlzY19wdXQoc3RydWN0IHR0eV9sZGlzY19vcHMgKmxkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGRpc2MgPSBsZC0+bnVtOworCisJQlVHX09OKGRpc2MgPCBOX1RUWSB8fCBkaXNjID49IE5SX0xESVNDUyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwlsZCA9IHR0eV9sZGlzY3NbZGlzY107CisJQlVHX09OKGxkLT5yZWZjb3VudCA9PSAwKTsKKwlsZC0+cmVmY291bnQtLTsKKwltb2R1bGVfcHV0KGxkLT5vd25lcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgKiB0dHlfbGRpc2NzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXJldHVybiAoKnBvcyA8IE5SX0xESVNDUykgPyBwb3MgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqIHR0eV9sZGlzY3Nfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlyZXR1cm4gKCpwb3MgPCBOUl9MRElTQ1MpID8gcG9zIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgdHR5X2xkaXNjc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyBpbnQgdHR5X2xkaXNjc19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJaW50IGkgPSAqKGxvZmZfdCAqKXY7CisJc3RydWN0IHR0eV9sZGlzYyBsZDsKKwkKKwlpZiAodHR5X2xkaXNjX2dldChpLCAmbGQpIDwgMCkKKwkJcmV0dXJuIDA7CisJc2VxX3ByaW50ZihtLCAiJS0xMHMgJTJkXG4iLCBsZC5vcHMtPm5hbWUgPyBsZC5vcHMtPm5hbWUgOiAiPz8/IiwgaSk7CisJdHR5X2xkaXNjX3B1dChsZC5vcHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHR0eV9sZGlzY3Nfc2VxX29wcyA9IHsKKwkuc3RhcnQJPSB0dHlfbGRpc2NzX3NlcV9zdGFydCwKKwkubmV4dAk9IHR0eV9sZGlzY3Nfc2VxX25leHQsCisJLnN0b3AJPSB0dHlfbGRpc2NzX3NlcV9zdG9wLAorCS5zaG93CT0gdHR5X2xkaXNjc19zZXFfc2hvdywKK307CisKK3N0YXRpYyBpbnQgcHJvY190dHlfbGRpc2NzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZ0dHlfbGRpc2NzX3NlcV9vcHMpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR0eV9sZGlzY3NfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBwcm9jX3R0eV9sZGlzY3Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworLyoqCisgKgl0dHlfbGRpc2NfYXNzaWduCS0Jc2V0IGxkaXNjIG9uIGEgdHR5CisgKglAdHR5OiB0dHkgdG8gYXNzaWduCisgKglAbGQ6IGxpbmUgZGlzY2lwbGluZQorICoKKyAqCUluc3RhbGwgYW4gaW5zdGFuY2Ugb2YgYSBsaW5lIGRpc2NpcGxpbmUgaW50byBhIHR0eSBzdHJ1Y3R1cmUuIFRoZQorICoJbGRpc2MgbXVzdCBoYXZlIGEgcmVmZXJlbmNlIGNvdW50IGFib3ZlIHplcm8gdG8gZW5zdXJlIGl0IHJlbWFpbnMvCisgKglUaGUgdHR5IGluc3RhbmNlIHJlZmNvdW50IHN0YXJ0cyBhdCB6ZXJvLgorICoKKyAqCUxvY2tpbmc6CisgKgkJQ2FsbGVyIG11c3QgaG9sZCByZWZlcmVuY2VzCisgKi8KKworc3RhdGljIHZvaWQgdHR5X2xkaXNjX2Fzc2lnbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X2xkaXNjICpsZCkKK3sKKwlsZC0+cmVmY291bnQgPSAwOworCXR0eS0+bGRpc2MgPSAqbGQ7Cit9CisKKy8qKgorICoJdHR5X2xkaXNjX3RyeQkJLQlpbnRlcm5hbCBoZWxwZXIKKyAqCUB0dHk6IHRoZSB0dHkKKyAqCisgKglNYWtlIGEgc2luZ2xlIGF0dGVtcHQgdG8gZ3JhYiBhbmQgYnVtcCB0aGUgcmVmY291bnQgb24KKyAqCXRoZSB0dHkgbGRpc2MuIFJldHVybiAwIG9uIGZhaWx1cmUgb3IgMSBvbiBzdWNjZXNzLiBUaGlzIGlzCisgKgl1c2VkIHRvIGltcGxlbWVudCBib3RoIHRoZSB3YWl0aW5nIGFuZCBub24gd2FpdGluZyB2ZXJzaW9ucworICoJb2YgdHR5X2xkaXNjX3JlZgorICoKKyAqCUxvY2tpbmc6IHRha2VzIHR0eV9sZGlzY19sb2NrCisgKi8KKworc3RhdGljIGludCB0dHlfbGRpc2NfdHJ5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCWxkID0gJnR0eS0+bGRpc2M7CisJaWYgKHRlc3RfYml0KFRUWV9MRElTQywgJnR0eS0+ZmxhZ3MpKSB7CisJCWxkLT5yZWZjb3VudCsrOworCQlyZXQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJdHR5X2xkaXNjX3JlZl93YWl0CS0Jd2FpdCBmb3IgdGhlIHR0eSBsZGlzYworICoJQHR0eTogdHR5IGRldmljZQorICoKKyAqCURlcmVmZXJlbmNlIHRoZSBsaW5lIGRpc2NpcGxpbmUgZm9yIHRoZSB0ZXJtaW5hbCBhbmQgdGFrZSBhCisgKglyZWZlcmVuY2UgdG8gaXQuIElmIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXMgaW4gZmx1eCB0aGVuCisgKgl3YWl0IHBhdGllbnRseSB1bnRpbCBpdCBjaGFuZ2VzLgorICoKKyAqCU5vdGU6IE11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGFuIElSUS90aW1lciBjb250ZXh0LiBUaGUgY2FsbGVyCisgKgltdXN0IGFsc28gYmUgY2FyZWZ1bCBub3QgdG8gaG9sZCBvdGhlciBsb2NrcyB0aGF0IHdpbGwgZGVhZGxvY2sKKyAqCWFnYWluc3QgYSBkaXNjaXBsaW5lIGNoYW5nZSwgc3VjaCBhcyBhbiBleGlzdGluZyBsZGlzYyByZWZlcmVuY2UKKyAqCSh3aGljaCB3ZSBjaGVjayBmb3IpCisgKgorICoJTG9ja2luZzogY2FsbCBmdW5jdGlvbnMgdGFrZSB0dHlfbGRpc2NfbG9jaworICovCisKK3N0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCS8qIHdhaXRfZXZlbnQgaXMgYSBtYWNybyAqLworCXdhaXRfZXZlbnQodHR5X2xkaXNjX3dhaXQsIHR0eV9sZGlzY190cnkodHR5KSk7CisJaWYgKHR0eS0+bGRpc2MucmVmY291bnQgPT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJ0dHlfbGRpc2NfcmVmX3dhaXRcbiIpOworCXJldHVybiAmdHR5LT5sZGlzYzsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3JlZl93YWl0KTsKKworLyoqCisgKgl0dHlfbGRpc2NfcmVmCQktCWdldCB0aGUgdHR5IGxkaXNjCisgKglAdHR5OiB0dHkgZGV2aWNlCisgKgorICoJRGVyZWZlcmVuY2UgdGhlIGxpbmUgZGlzY2lwbGluZSBmb3IgdGhlIHRlcm1pbmFsIGFuZCB0YWtlIGEKKyAqCXJlZmVyZW5jZSB0byBpdC4gSWYgdGhlIGxpbmUgZGlzY2lwbGluZSBpcyBpbiBmbHV4IHRoZW4KKyAqCXJldHVybiBOVUxMLiBDYW4gYmUgY2FsbGVkIGZyb20gSVJRIGFuZCB0aW1lciBmdW5jdGlvbnMuCisgKgorICoJTG9ja2luZzogY2FsbGVkIGZ1bmN0aW9ucyB0YWtlIHR0eV9sZGlzY19sb2NrCisgKi8KKworc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWlmICh0dHlfbGRpc2NfdHJ5KHR0eSkpCisJCXJldHVybiAmdHR5LT5sZGlzYzsKKwlyZXR1cm4gTlVMTDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3JlZik7CisKKy8qKgorICoJdHR5X2xkaXNjX2RlcmVmCQktCWZyZWUgYSB0dHkgbGRpc2MgcmVmZXJlbmNlCisgKglAbGQ6IHJlZmVyZW5jZSB0byBmcmVlIHVwCisgKgorICoJVW5kb2VzIHRoZSBlZmZlY3Qgb2YgdHR5X2xkaXNjX3JlZiBvciB0dHlfbGRpc2NfcmVmX3dhaXQuIE1heQorICoJYmUgY2FsbGVkIGluIElSUSBjb250ZXh0LgorICoKKyAqCUxvY2tpbmc6IHRha2VzIHR0eV9sZGlzY19sb2NrCisgKi8KKwordm9pZCB0dHlfbGRpc2NfZGVyZWYoc3RydWN0IHR0eV9sZGlzYyAqbGQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUJVR19PTihsZCA9PSBOVUxMKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCWlmIChsZC0+cmVmY291bnQgPT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJ0dHlfbGRpc2NfZGVyZWY6IG5vIHJlZmVyZW5jZXMuXG4iKTsKKwllbHNlCisJCWxkLT5yZWZjb3VudC0tOworCWlmIChsZC0+cmVmY291bnQgPT0gMCkKKwkJd2FrZV91cCgmdHR5X2xkaXNjX3dhaXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19kZXJlZik7CisKKy8qKgorICoJdHR5X2xkaXNjX2VuYWJsZQktCWFsbG93IGxkaXNjIHVzZQorICoJQHR0eTogdGVybWluYWwgdG8gYWN0aXZhdGUgbGRpc2Mgb24KKyAqCisgKglTZXQgdGhlIFRUWV9MRElTQyBmbGFnIHdoZW4gdGhlIGxpbmUgZGlzY2lwbGluZSBjYW4gYmUgY2FsbGVkCisgKglhZ2Fpbi4gRG8gbmVjZXNzYXJ5IHdha2V1cHMgZm9yIGV4aXN0aW5nIHNsZWVwZXJzLgorICoKKyAqCU5vdGU6IG5vYm9keSBzaG91bGQgc2V0IHRoaXMgYml0IGV4Y2VwdCB2aWEgdGhpcyBmdW5jdGlvbi4gQ2xlYXJpbmcKKyAqCWRpcmVjdGx5IGlzIGFsbG93ZWQuCisgKi8KKwordm9pZCB0dHlfbGRpc2NfZW5hYmxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc2V0X2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKTsKKwl3YWtlX3VwKCZ0dHlfbGRpc2Nfd2FpdCk7Cit9CisKKy8qKgorICoJdHR5X3NldF90ZXJtaW9zX2xkaXNjCQktCXNldCBsZGlzYyBmaWVsZAorICoJQHR0eTogdHR5IHN0cnVjdHVyZQorICoJQG51bTogbGluZSBkaXNjaXBsaW5lIG51bWJlcgorICoKKyAqCVRoaXMgaXMgcHJvYmFibHkgb3ZlcmtpbGwgZm9yIHJlYWwgd29ybGQgcHJvY2Vzc29ycyBidXQKKyAqCXRoZXkgYXJlIG5vdCBvbiBob3QgcGF0aHMgc28gYSBsaXR0bGUgZGlzY2lwbGluZSB3b24ndCBkbworICoJYW55IGhhcm0uCisgKgorICoJTG9ja2luZzogdGFrZXMgdGVybWlvc19tdXRleAorICovCisKK3N0YXRpYyB2b2lkIHR0eV9zZXRfdGVybWlvc19sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbnVtKQoreworCW11dGV4X2xvY2soJnR0eS0+dGVybWlvc19tdXRleCk7CisJdHR5LT50ZXJtaW9zLT5jX2xpbmUgPSBudW07CisJbXV0ZXhfdW5sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOworfQorCisKKy8qKgorICoJdHR5X2xkaXNjX3Jlc3RvcmUJLQloZWxwZXIgZm9yIHR0eSBsZGlzYyBjaGFuZ2UKKyAqCUB0dHk6IHR0eSB0byByZWNvdmVyCisgKglAb2xkOiBwcmV2aW91cyBsZGlzYworICoKKyAqCVJlc3RvcmUgdGhlIHByZXZpb3VzIGxpbmUgZGlzY2lwbGluZSBvciBOX1RUWSB3aGVuIGEgbGluZSBkaXNjaXBsaW5lCisgKgljaGFuZ2UgZmFpbHMgZHVlIHRvIGFuIG9wZW4gZXJyb3IKKyAqLworCitzdGF0aWMgdm9pZCB0dHlfbGRpc2NfcmVzdG9yZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X2xkaXNjICpvbGQpCit7CisJY2hhciBidWZbNjRdOworCXN0cnVjdCB0dHlfbGRpc2MgbmV3X2xkaXNjOworCisJLyogVGhlcmUgaXMgYW4gb3V0c3RhbmRpbmcgcmVmZXJlbmNlIGhlcmUgc28gdGhpcyBpcyBzYWZlICovCisJdHR5X2xkaXNjX2dldChvbGQtPm9wcy0+bnVtLCBvbGQpOworCXR0eV9sZGlzY19hc3NpZ24odHR5LCBvbGQpOworCXR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIG9sZC0+b3BzLT5udW0pOworCWlmIChvbGQtPm9wcy0+b3BlbiAmJiAob2xkLT5vcHMtPm9wZW4odHR5KSA8IDApKSB7CisJCXR0eV9sZGlzY19wdXQob2xkLT5vcHMpOworCQkvKiBUaGlzIGRyaXZlciBpcyBhbHdheXMgcHJlc2VudCAqLworCQlpZiAodHR5X2xkaXNjX2dldChOX1RUWSwgJm5ld19sZGlzYykgPCAwKQorCQkJcGFuaWMoIm5fdHR5OiBnZXQiKTsKKwkJdHR5X2xkaXNjX2Fzc2lnbih0dHksICZuZXdfbGRpc2MpOworCQl0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBOX1RUWSk7CisJCWlmIChuZXdfbGRpc2Mub3BzLT5vcGVuKSB7CisJCQlpbnQgciA9IG5ld19sZGlzYy5vcHMtPm9wZW4odHR5KTsKKwkJCQlpZiAociA8IDApCisJCQkJcGFuaWMoIkNvdWxkbid0IG9wZW4gTl9UVFkgbGRpc2MgZm9yICIKKwkJCQkgICAgICAiJXMgLS0tIGVycm9yICVkLiIsCisJCQkJICAgICAgdHR5X25hbWUodHR5LCBidWYpLCByKTsKKwkJfQorCX0KK30KKworLyoqCisgKgl0dHlfc2V0X2xkaXNjCQktCXNldCBsaW5lIGRpc2NpcGxpbmUKKyAqCUB0dHk6IHRoZSB0ZXJtaW5hbCB0byBzZXQKKyAqCUBsZGlzYzogdGhlIGxpbmUgZGlzY2lwbGluZQorICoKKyAqCVNldCB0aGUgZGlzY2lwbGluZSBvZiBhIHR0eSBsaW5lLiBNdXN0IGJlIGNhbGxlZCBmcm9tIGEgcHJvY2VzcworICoJY29udGV4dC4KKyAqCisgKglMb2NraW5nOiB0YWtlcyB0dHlfbGRpc2NfbG9jay4KKyAqCQkgY2FsbGVkIGZ1bmN0aW9ucyB0YWtlIHRlcm1pb3NfbXV0ZXgKKyAqLworCitpbnQgdHR5X3NldF9sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbGRpc2MpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdHR5X2xkaXNjIG9fbGRpc2MsIG5ld19sZGlzYzsKKwlpbnQgd29yazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0dHlfc3RydWN0ICpvX3R0eTsKKworcmVzdGFydDoKKwkvKiBUaGlzIGlzIGEgYml0IHVnbHkgZm9yIG5vdyBidXQgbWVhbnMgd2UgY2FuIGJyZWFrIHRoZSAnbGRpc2MKKwkgICBpcyBwYXJ0IG9mIHRoZSB0dHkgc3RydWN0JyBhc3N1bXB0aW9uIGxhdGVyICovCisJcmV0dmFsID0gdHR5X2xkaXNjX2dldChsZGlzYywgJm5ld19sZGlzYyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qCisJICoJUHJvYmxlbTogV2hhdCBkbyB3ZSBkbyBpZiB0aGlzIGJsb2NrcyA/CisJICovCisKKwl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7CisKKwlpZiAodHR5LT5sZGlzYy5vcHMtPm51bSA9PSBsZGlzYykgeworCQl0dHlfbGRpc2NfcHV0KG5ld19sZGlzYy5vcHMpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqCU5vIG1vcmUgaW5wdXQgcGxlYXNlLCB3ZSBhcmUgc3dpdGNoaW5nLiBUaGUgbmV3IGxkaXNjCisJICoJd2lsbCB1cGRhdGUgdGhpcyB2YWx1ZSBpbiB0aGUgbGRpc2Mgb3BlbiBmdW5jdGlvbgorCSAqLworCisJdHR5LT5yZWNlaXZlX3Jvb20gPSAwOworCisJb19sZGlzYyA9IHR0eS0+bGRpc2M7CisJb190dHkgPSB0dHktPmxpbms7CisKKwkvKgorCSAqCU1ha2Ugc3VyZSB3ZSBkb24ndCBjaGFuZ2Ugd2hpbGUgc29tZW9uZSBob2xkcyBhCisJICoJcmVmZXJlbmNlIHRvIHRoZSBsaW5lIGRpc2NpcGxpbmUuIFRoZSBUVFlfTERJU0MgYml0CisJICoJcHJldmVudHMgYW55b25lIHRha2luZyBhIHJlZmVyZW5jZSBvbmNlIGl0IGlzIGNsZWFyLgorCSAqCVdlIG5lZWQgdGhlIGxvY2sgdG8gYXZvaWQgcmFjaW5nIHJlZmVyZW5jZSB0YWtlcnMuCisJICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwlpZiAodHR5LT5sZGlzYy5yZWZjb3VudCB8fCAob190dHkgJiYgb190dHktPmxkaXNjLnJlZmNvdW50KSkgeworCQlpZiAodHR5LT5sZGlzYy5yZWZjb3VudCkgeworCQkJLyogRnJlZSB0aGUgbmV3IGxkaXNjIHdlIGdyYWJiZWQuIE11c3QgZHJvcCB0aGUgbG9jaworCQkJICAgZmlyc3QuICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCQkJdHR5X2xkaXNjX3B1dChvX2xkaXNjLm9wcyk7CisJCQkvKgorCQkJICogVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucyB3ZSBtYXkgYmUgYnVzeSwgaW5jbHVkaW5nCisJCQkgKiByYW5kb20gbW9tZW50YXJ5IEkvTyB0cmFmZmljLiBXZSBtdXN0IHRoZXJlZm9yZQorCQkJICogcmV0cnkuIFdlIGNvdWxkIGRpc3Rpbmd1aXNoIGJldHdlZW4gYmxvY2tpbmcgb3BzCisJCQkgKiBhbmQgcmV0cmllcyBpZiB3ZSBtYWRlIHR0eV9sZGlzY193YWl0KCkgc21hcnRlci4KKwkJCSAqIFRoYXQgaXMgdXAgZm9yIGRpc2N1c3Npb24uCisJCQkgKi8KKwkJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodHR5X2xkaXNjX3dhaXQsIHR0eS0+bGRpc2MucmVmY291bnQgPT0gMCkgPCAwKQorCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKwkJaWYgKG9fdHR5ICYmIG9fdHR5LT5sZGlzYy5yZWZjb3VudCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwkJCXR0eV9sZGlzY19wdXQob190dHktPmxkaXNjLm9wcyk7CisJCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHR0eV9sZGlzY193YWl0LCBvX3R0eS0+bGRpc2MucmVmY291bnQgPT0gMCkgPCAwKQorCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKwl9CisJLyoKKwkgKglJZiB0aGUgVFRZX0xESVNDIGJpdCBpcyBzZXQsIHRoZW4gd2UgYXJlIHJhY2luZyBhZ2FpbnN0CisJICoJYW5vdGhlciBsZGlzYyBjaGFuZ2UKKwkgKi8KKwlpZiAoIXRlc3RfYml0KFRUWV9MRElTQywgJnR0eS0+ZmxhZ3MpKSB7CisJCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCQl0dHlfbGRpc2NfcHV0KG5ld19sZGlzYy5vcHMpOworCQlsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpOworCQl0dHlfbGRpc2NfZGVyZWYobGQpOworCQlnb3RvIHJlc3RhcnQ7CisJfQorCisJY2xlYXJfYml0KFRUWV9MRElTQywgJnR0eS0+ZmxhZ3MpOworCWlmIChvX3R0eSkKKwkJY2xlYXJfYml0KFRUWV9MRElTQywgJm9fdHR5LT5mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwkKKwkvKgorCSAqCUZyb20gdGhpcyBwb2ludCBvbiB3ZSBrbm93IG5vYm9keSBoYXMgYW4gbGRpc2MKKwkgKgl1c2FnZSByZWZlcmVuY2UsIG5vciBjYW4gdGhleSBvYnRhaW4gb25lIHVudGlsCisJICoJd2Ugc2F5IHNvIGxhdGVyIG9uLgorCSAqLworCisJd29yayA9IGNhbmNlbF9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmspOworCS8qCisJICogV2FpdCBmb3IgLT5oYW5ndXBfd29yayBhbmQgLT5idWYud29yayBoYW5kbGVycyB0byB0ZXJtaW5hdGUKKwkgKiBNVVNUIE5PVCBob2xkIGxvY2tzIGhlcmUuCisJICovCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkvKiBTaHV0ZG93biB0aGUgY3VycmVudCBkaXNjaXBsaW5lLiAqLworCWlmIChvX2xkaXNjLm9wcy0+Y2xvc2UpCisJCShvX2xkaXNjLm9wcy0+Y2xvc2UpKHR0eSk7CisKKwkvKiBOb3cgc2V0IHVwIHRoZSBuZXcgbGluZSBkaXNjaXBsaW5lLiAqLworCXR0eV9sZGlzY19hc3NpZ24odHR5LCAmbmV3X2xkaXNjKTsKKwl0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBsZGlzYyk7CisJaWYgKG5ld19sZGlzYy5vcHMtPm9wZW4pCisJCXJldHZhbCA9IChuZXdfbGRpc2Mub3BzLT5vcGVuKSh0dHkpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXR0eV9sZGlzY19wdXQobmV3X2xkaXNjLm9wcyk7CisJCXR0eV9sZGlzY19yZXN0b3JlKHR0eSwgJm9fbGRpc2MpOworCX0KKwkvKiBBdCB0aGlzIHBvaW50IHdlIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIG5ldyBsZGlzYyBhbmQgYQorCSAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvbGQgbGRpc2MuIElmIHdlIGVuZGVkIHVwIGZsaXBwaW5nIGJhY2sKKwkgICB0byB0aGUgZXhpc3RpbmcgbGRpc2Mgd2UgaGF2ZSB0d28gcmVmZXJlbmNlcyB0byBpdCAqLworCisJaWYgKHR0eS0+bGRpc2Mub3BzLT5udW0gIT0gb19sZGlzYy5vcHMtPm51bSAmJiB0dHktPm9wcy0+c2V0X2xkaXNjKQorCQl0dHktPm9wcy0+c2V0X2xkaXNjKHR0eSk7CisKKwl0dHlfbGRpc2NfcHV0KG9fbGRpc2Mub3BzKTsKKworCS8qCisJICoJQWxsb3cgbGRpc2MgcmVmZXJlbmNpbmcgdG8gb2NjdXIgYXMgc29vbiBhcyB0aGUgZHJpdmVyCisJICoJbGRpc2MgY2FsbGJhY2sgY29tcGxldGVzLgorCSAqLworCisJdHR5X2xkaXNjX2VuYWJsZSh0dHkpOworCWlmIChvX3R0eSkKKwkJdHR5X2xkaXNjX2VuYWJsZShvX3R0eSk7CisKKwkvKiBSZXN0YXJ0IGl0IGluIGNhc2Ugbm8gY2hhcmFjdGVycyBraWNrIGl0IG9mZi4gU2FmZSBpZgorCSAgIGFscmVhZHkgcnVubmluZyAqLworCWlmICh3b3JrKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoqCisgKgl0dHlfbGRpc2Nfc2V0dXAJCQktCW9wZW4gbGluZSBkaXNjaXBsaW5lCisgKglAdHR5OiB0dHkgYmVpbmcgc2h1dCBkb3duCisgKglAb190dHk6IHBhaXIgdHR5IGZvciBwdHkvdHR5IHBhaXJzCisgKgorICoJQ2FsbGVkIGR1cmluZyB0aGUgaW5pdGlhbCBvcGVuIG9mIGEgdHR5L3B0eSBwYWlyIGluIG9yZGVyIHRvIHNldCB1cCB0aGUKKyAqCWxpbmUgZGlzY3BsaW5lcyBhbmQgYmluZCB0aGVtIHRvIHRoZSB0dHkuCisgKi8KKworaW50IHR0eV9sZGlzY19zZXR1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqb190dHkpCit7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQgPSAmdHR5LT5sZGlzYzsKKwlpbnQgcmV0dmFsOworCisJaWYgKGxkLT5vcHMtPm9wZW4pIHsKKwkJcmV0dmFsID0gKGxkLT5vcHMtPm9wZW4pKHR0eSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAob190dHkgJiYgb190dHktPmxkaXNjLm9wcy0+b3BlbikgeworCQlyZXR2YWwgPSAob190dHktPmxkaXNjLm9wcy0+b3Blbikob190dHkpOworCQlpZiAocmV0dmFsKSB7CisJCQlpZiAobGQtPm9wcy0+Y2xvc2UpCisJCQkJKGxkLT5vcHMtPmNsb3NlKSh0dHkpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQl0dHlfbGRpc2NfZW5hYmxlKG9fdHR5KTsKKwl9CisJdHR5X2xkaXNjX2VuYWJsZSh0dHkpOworCXJldHVybiAwOworfQorCisvKioKKyAqCXR0eV9sZGlzY19yZWxlYXNlCQktCXJlbGVhc2UgbGluZSBkaXNjaXBsaW5lCisgKglAdHR5OiB0dHkgYmVpbmcgc2h1dCBkb3duCisgKglAb190dHk6IHBhaXIgdHR5IGZvciBwdHkvdHR5IHBhaXJzCisgKgorICoJQ2FsbGVkIGR1cmluZyB0aGUgZmluYWwgY2xvc2Ugb2YgYSB0dHkvcHR5IHBhaXIgaW4gb3JkZXIgdG8gc2h1dCBkb3duIHRoZQorICoJbGluZSBkaXNjcGxpbmUgbGF5ZXIuCisgKi8KKwordm9pZCB0dHlfbGRpc2NfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqb190dHkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdHR5X2xkaXNjIGxkOworCS8qCisJICogUHJldmVudCBmbHVzaF90b19sZGlzYygpIGZyb20gcmVzY2hlZHVsaW5nIHRoZSB3b3JrIGZvciBsYXRlci4gIFRoZW4KKwkgKiBraWxsIGFueSBkZWxheWVkIHdvcmsuIEFzIHRoaXMgaXMgdGhlIGZpbmFsIGNsb3NlIGl0IGRvZXMgbm90CisJICogcmFjZSB3aXRoIHRoZSBzZXRfbGRpc2MgY29kZSBwYXRoLgorCSAqLworCWNsZWFyX2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKKworCS8qCisJICogV2FpdCBmb3IgLT5oYW5ndXBfd29yayBhbmQgLT5idWYud29yayBoYW5kbGVycyB0byB0ZXJtaW5hdGUKKwkgKi8KKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKgorCSAqIFdhaXQgZm9yIGFueSBzaG9ydCB0ZXJtIHVzZXJzICh3ZSBrbm93IHRoZXkgYXJlIGp1c3QgZHJpdmVyCisJICogc2lkZSB3YWl0ZXJzIGFzIHRoZSBmaWxlIGlzIGNsb3Npbmcgc28gdXNlciBjb3VudCBvbiB0aGUgZmlsZQorCSAqIHNpZGUgaXMgemVyby4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAodHR5LT5sZGlzYy5yZWZjb3VudCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCQl3YWl0X2V2ZW50KHR0eV9sZGlzY193YWl0LCB0dHktPmxkaXNjLnJlZmNvdW50ID09IDApOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFNodXRkb3duIHRoZSBjdXJyZW50IGxpbmUgZGlzY2lwbGluZSwgYW5kIHJlc2V0IGl0IHRvIE5fVFRZLgorCSAqCisJICogRklYTUU6IHRoaXMgTVVTVCBnZXQgZml4ZWQgZm9yIHRoZSBuZXcgcmVmbG9ja2luZworCSAqLworCWlmICh0dHktPmxkaXNjLm9wcy0+Y2xvc2UpCisJCSh0dHktPmxkaXNjLm9wcy0+Y2xvc2UpKHR0eSk7CisJdHR5X2xkaXNjX3B1dCh0dHktPmxkaXNjLm9wcyk7CisKKwkvKgorCSAqCVN3aXRjaCB0aGUgbGluZSBkaXNjaXBsaW5lIGJhY2sKKwkgKi8KKwlXQVJOX09OKHR0eV9sZGlzY19nZXQoTl9UVFksICZsZCkpOworCXR0eV9sZGlzY19hc3NpZ24odHR5LCAmbGQpOworCXR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIE5fVFRZKTsKKwlpZiAob190dHkpIHsKKwkJLyogRklYTUU6IGNvdWxkIG9fdHR5IGJlIGluIHNldGxkaXNjIGhlcmUgPyAqLworCQljbGVhcl9iaXQoVFRZX0xESVNDLCAmb190dHktPmZsYWdzKTsKKwkJaWYgKG9fdHR5LT5sZGlzYy5vcHMtPmNsb3NlKQorCQkJKG9fdHR5LT5sZGlzYy5vcHMtPmNsb3NlKShvX3R0eSk7CisJCXR0eV9sZGlzY19wdXQob190dHktPmxkaXNjLm9wcyk7CisJCVdBUk5fT04odHR5X2xkaXNjX2dldChOX1RUWSwgJmxkKSk7CisJCXR0eV9sZGlzY19hc3NpZ24ob190dHksICZsZCk7CisJCXR0eV9zZXRfdGVybWlvc19sZGlzYyhvX3R0eSwgTl9UVFkpOworCX0KK30KKworLyoqCisgKgl0dHlfbGRpc2NfaW5pdAkJLQlsZGlzYyBzZXR1cCBmb3IgbmV3IHR0eQorICoJQHR0eTogdHR5IGJlaW5nIGFsbG9jYXRlZAorICoKKyAqCVNldCB1cCB0aGUgbGluZSBkaXNjaXBsaW5lIG9iamVjdHMgZm9yIGEgbmV3bHkgYWxsb2NhdGVkIHR0eS4gTm90ZSB0aGF0CisgKgl0aGUgdHR5IHN0cnVjdHVyZSBpcyBub3QgY29tcGxldGVseSBzZXQgdXAgd2hlbiB0aGlzIGNhbGwgaXMgbWFkZS4KKyAqLworCit2b2lkIHR0eV9sZGlzY19pbml0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHR0eV9sZGlzYyBsZDsKKwlpZiAodHR5X2xkaXNjX2dldChOX1RUWSwgJmxkKSA8IDApCisJCXBhbmljKCJuX3R0eTogaW5pdF90dHkiKTsKKwl0dHlfbGRpc2NfYXNzaWduKHR0eSwgJmxkKTsKK30KKwordm9pZCB0dHlfbGRpc2NfYmVnaW4odm9pZCkKK3sKKwkvKiBTZXR1cCB0aGUgZGVmYXVsdCBUVFkgbGluZSBkaXNjaXBsaW5lLiAqLworCSh2b2lkKSB0dHlfcmVnaXN0ZXJfbGRpc2MoTl9UVFksICZ0dHlfbGRpc2NfTl9UVFkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jIGIvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCmluZGV4IGVlYmZhZDIuLmMyYWU1MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYworKysgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKQEAgLTQ4MSwxMCArNDgxLDEwIEBACiAKIHZvaWQgdmNzX21ha2Vfc3lzZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSwKLQkJCSJ2Y3MldSIsIHR0eS0+aW5kZXggKyAxKTsKLQlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpLAotCQkJInZjc2EldSIsIHR0eS0+aW5kZXggKyAxKTsKKwlkZXZpY2VfY3JlYXRlX2RydmRhdGEodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEpLAorCQkJICAgICAgTlVMTCwgInZjcyV1IiwgdHR5LT5pbmRleCArIDEpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMTI5KSwKKwkJCSAgICAgIE5VTEwsICJ2Y3NhJXUiLCB0dHktPmluZGV4ICsgMSk7CiB9CiAKIHZvaWQgdmNzX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJCXBhbmljKCJ1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciB2Y3MgZGV2aWNlIiwgVkNTX01BSk9SKTsKIAl2Y19jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInZjIik7CiAKLQlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIDApLCAidmNzIik7Ci0JZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCAxMjgpLCAidmNzYSIpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCAwKSwgTlVMTCwgInZjcyIpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCAxMjgpLCBOVUxMLCAidmNzYSIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYyBiL2RyaXZlcnMvY2hhci92aW90YXBlLmMKaW5kZXggZTVkYTk4ZC4uN2E3MGE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jCkBAIC04ODYsMTAgKzg4NiwxMCBAQAogCXN0YXRlW2ldLmN1cl9wYXJ0ID0gMDsKIAlmb3IgKGogPSAwOyBqIDwgTUFYX1BBUlRJVElPTlM7ICsraikKIAkJc3RhdGVbaV0ucGFydF9zdGF0X3J3aVtqXSA9IFZJT1RfSURMRTsKLQlkZXZpY2VfY3JlYXRlKHRhcGVfY2xhc3MsIE5VTEwsIE1LREVWKFZJT1RBUEVfTUFKT1IsIGkpLAotCQkJImlzZXJpZXMhdnQlZCIsIGkpOwotCWRldmljZV9jcmVhdGUodGFwZV9jbGFzcywgTlVMTCwgTUtERVYoVklPVEFQRV9NQUpPUiwgaSB8IDB4ODApLAotCQkJImlzZXJpZXMhbnZ0JWQiLCBpKTsKKwlkZXZpY2VfY3JlYXRlX2RydmRhdGEodGFwZV9jbGFzcywgTlVMTCwgTUtERVYoVklPVEFQRV9NQUpPUiwgaSksCisJCQkgICAgICBOVUxMLCAiaXNlcmllcyF2dCVkIiwgaSk7CisJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHRhcGVfY2xhc3MsIE5VTEwsIE1LREVWKFZJT1RBUEVfTUFKT1IsIGkgfCAweDgwKSwKKwkJCSAgICAgIE5VTEwsICJpc2VyaWVzIW52dCVkIiwgaSk7CiAJcHJpbnRrKFZJT1RBUEVfS0VSTl9JTkZPICJ0YXBlIGlzZXJpZXMvdnQlZCBpcyBpU2VyaWVzICIKIAkJCSJyZXNvdXJjZSAlMTAuMTBzIHR5cGUgJTQuNHMsIG1vZGVsICUzLjNzXG4iLAogCQkJaSwgdmlvdGFwZV91bml0aW5mb1tpXS5yc3JjbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMgYi9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jCmluZGV4IGYxN2FjMDQuLjY5YzVhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYwpAQCAtODUsNyArODUsNyBAQAogc3RhdGljIGlycXJldHVybl90IHNjY19zdGF0X2ludChpbnQgaXJxLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBzY2Nfc3Bjb25kX2ludChpbnQgaXJxLCB2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkIHNjY19zZXRzaWduYWxzKHN0cnVjdCBzY2NfcG9ydCAqcG9ydCwgaW50IGR0ciwgaW50IHJ0cyk7Ci1zdGF0aWMgdm9pZCBzY2NfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSk7CitzdGF0aWMgaW50IHNjY19icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKIAogc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpzY2NfZHJpdmVyOwogCkBAIC05NDIsNyArOTQyLDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBzY2NfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyBpbnQgc2NjX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IHNjY19wb3J0ICpwb3J0ID0gKHN0cnVjdCBzY2NfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKQEAgLTk1Miw2ICs5NTIsNyBAQAogCVNDQ21vZChUWF9DVFJMX1JFRywgflRDUl9TRU5EX0JSRUFLLCAKIAkJCWJyZWFrX3N0YXRlID8gVENSX1NFTkRfQlJFQUsgOiAwKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCA5MzVmMWMyLi5lMzJhMDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtMzQyNSw5ICszNDI1LDEwIEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnI7CiAKLQljb25fZHJpdmVyLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHZ0Y29uc29sZV9jbGFzcywgTlVMTCwKLQkJCQkJTUtERVYoMCwgY29uX2RyaXZlci0+bm9kZSksCi0JCQkJCSJ2dGNvbiVpIiwgY29uX2RyaXZlci0+bm9kZSk7CisJY29uX2RyaXZlci0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHZ0Y29uc29sZV9jbGFzcywgTlVMTCwKKwkJCQkJCU1LREVWKDAsIGNvbl9kcml2ZXItPm5vZGUpLAorCQkJCQkJTlVMTCwgInZ0Y29uJWkiLAorCQkJCQkJY29uX2RyaXZlci0+bm9kZSk7CiAKIAlpZiAoSVNfRVJSKGNvbl9kcml2ZXItPmRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGNyZWF0ZSBkZXZpY2UgZm9yICVzOyAiCkBAIC0zNTM1LDkgKzM1MzYsMTAgQEAKIAkJc3RydWN0IGNvbl9kcml2ZXIgKmNvbiA9ICZyZWdpc3RlcmVkX2Nvbl9kcml2ZXJbaV07CiAKIAkJaWYgKGNvbi0+Y29uICYmICFjb24tPmRldikgewotCQkJY29uLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHZ0Y29uc29sZV9jbGFzcywgTlVMTCwKLQkJCQkJCSBNS0RFVigwLCBjb24tPm5vZGUpLAotCQkJCQkJICJ2dGNvbiVpIiwgY29uLT5ub2RlKTsKKwkJCWNvbi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHZ0Y29uc29sZV9jbGFzcywgTlVMTCwKKwkJCQkJCQkgTUtERVYoMCwgY29uLT5ub2RlKSwKKwkJCQkJCQkgTlVMTCwgInZ0Y29uJWkiLAorCQkJCQkJCSBjb24tPm5vZGUpOwogCiAJCQlpZiAoSVNfRVJSKGNvbi0+ZGV2KSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBjcmVhdGUgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCmluZGV4IDFlMWI4MWUuLjUxOTY2Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYworKysgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKQEAgLTY1OCw4ICs2NTgsOSBAQAogCQlkZXZfZXJyKGRldiwgImNkZXZfYWRkKCkgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsZWQzOwogCX0KLQkvKiAgZGV2ZnNfbWtfY2RldihkZXZ0LCBTX0lGQ0hSfFNfSVJVR098U19JV1VHTywgRFJJVkVSX05BTUUpOyAqLwotCWRldmljZV9jcmVhdGUoaWNhcF9jbGFzcywgZGV2LCBkZXZ0LCAiJXMlZCIsIERSSVZFUl9OQU1FLCBpZCk7CisKKwlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaWNhcF9jbGFzcywgZGV2LCBkZXZ0LCBOVUxMLAorCQkJICAgICAgIiVzJWQiLCBEUklWRVJfTkFNRSwgaWQpOwogCXJldHVybiAwOwkJLyogc3VjY2VzcyAqLwogCiAgZmFpbGVkMzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDFkNDE0OTYuLjhkNmEzZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMzgsMTAgKzM4LDEwIEBACiAgKiBhbHNvIHByb3RlY3RzIHRoZSBjcHVmcmVxX2NwdV9kYXRhIGFycmF5LgogICovCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyICpjcHVmcmVxX2RyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmNwdWZyZXFfY3B1X2RhdGFbTlJfQ1BVU107CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICosIGNwdWZyZXFfY3B1X2RhdGEpOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogLyogVGhpcyBvbmUga2VlcHMgdHJhY2sgb2YgdGhlIHByZXZpb3VzbHkgc2V0IGdvdmVybm9yIG9mIGEgcmVtb3ZlZCBDUFUgKi8KLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqY3B1ZnJlcV9jcHVfZ292ZXJub3JbTlJfQ1BVU107CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKiwgY3B1ZnJlcV9jcHVfZ292ZXJub3IpOwogI2VuZGlmCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwdWZyZXFfZHJpdmVyX2xvY2spOwogCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChjcHUgPj0gTlJfQ1BVUykKKwlpZiAoY3B1ID49IG5yX2NwdV9pZHMpCiAJCWdvdG8gZXJyX291dDsKIAogCS8qIGdldCB0aGUgY3B1ZnJlcSBkcml2ZXIgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogCiAKIAkvKiBnZXQgdGhlIENQVSAqLwotCWRhdGEgPSBjcHVmcmVxX2NwdV9kYXRhW2NwdV07CisJZGF0YSA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVfZGF0YSwgY3B1KTsKIAogCWlmICghZGF0YSkKIAkJZ290byBlcnJfb3V0X3B1dF9tb2R1bGU7CkBAIC0zMjcsNyArMzI3LDcgQEAKIAlkcHJpbnRrKCJub3RpZmljYXRpb24gJXUgb2YgZnJlcXVlbmN5IHRyYW5zaXRpb24gdG8gJXUga0h6XG4iLAogCQlzdGF0ZSwgZnJlcXMtPm5ldyk7CiAKLQlwb2xpY3kgPSBjcHVmcmVxX2NwdV9kYXRhW2ZyZXFzLT5jcHVdOworCXBvbGljeSA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVfZGF0YSwgZnJlcXMtPmNwdSk7CiAJc3dpdGNoIChzdGF0ZSkgewogCiAJY2FzZSBDUFVGUkVRX1BSRUNIQU5HRToKQEAgLTU4OSw3ICs1ODksNyBAQAogCXNzaXplX3QgaSA9IDA7CiAJdW5zaWduZWQgaW50IGNwdTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbWFzaykgewogCQlpZiAoaSkKIAkJCWkgKz0gc2NucHJpbnRmKCZidWZbaV0sIChQQUdFX1NJWkUgLSBpIC0gMiksICIgIik7CiAJCWkgKz0gc2NucHJpbnRmKCZidWZbaV0sIChQQUdFX1NJWkUgLSBpIC0gMiksICIldSIsIGNwdSk7CkBAIC04MjgsMTQgKzgyOCwxNCBAQAogI2lmZGVmIENPTkZJR19TTVAKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWlmIChjcHVmcmVxX2NwdV9nb3Zlcm5vcltjcHVdKXsKLQkJcG9saWN5LT5nb3Zlcm5vciA9IGNwdWZyZXFfY3B1X2dvdmVybm9yW2NwdV07CisJaWYgKHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSkpIHsKKwkJcG9saWN5LT5nb3Zlcm5vciA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSk7CiAJCWRwcmludGsoIlJlc3RvcmluZyBnb3Zlcm5vciAlcyBmb3IgY3B1ICVkXG4iLAogCQkgICAgICAgcG9saWN5LT5nb3Zlcm5vci0+bmFtZSwgY3B1KTsKIAl9CiAjZW5kaWYKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGosIHBvbGljeS0+Y3B1cykgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGosIHBvbGljeS0+Y3B1cykgewogCQlpZiAoY3B1ID09IGopCiAJCQljb250aW51ZTsKIApAQCAtODU0LDcgKzg1NCw3IEBACiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAJCQltYW5hZ2VkX3BvbGljeS0+Y3B1cyA9IHBvbGljeS0+Y3B1czsKLQkJCWNwdWZyZXFfY3B1X2RhdGFbY3B1XSA9IG1hbmFnZWRfcG9saWN5OworCQkJcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBjcHUpID0gbWFuYWdlZF9wb2xpY3k7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAKIAkJCWRwcmludGsoIkNQVSBhbHJlYWR5IG1hbmFnZWQsIGFkZGluZyBsaW5rXG4iKTsKQEAgLTg5OCwxNCArODk4LDE0IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhqLCBwb2xpY3ktPmNwdXMpIHsKLQkJY3B1ZnJlcV9jcHVfZGF0YVtqXSA9IHBvbGljeTsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihqLCBwb2xpY3ktPmNwdXMpIHsKKwkJcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBqKSA9IHBvbGljeTsKIAkJcGVyX2NwdShwb2xpY3lfY3B1LCBqKSA9IHBvbGljeS0+Y3B1OwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAKIAkvKiBzeW1saW5rIGFmZmVjdGVkIENQVXMgKi8KLQlmb3JfZWFjaF9jcHVfbWFzayhqLCBwb2xpY3ktPmNwdXMpIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihqLCBwb2xpY3ktPmNwdXMpIHsKIAkJaWYgKGogPT0gY3B1KQogCQkJY29udGludWU7CiAJCWlmICghY3B1X29ubGluZShqKSkKQEAgLTk0NSw4ICs5NDUsOCBAQAogCiBlcnJfb3V0X3VucmVnaXN0ZXI6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhqLCBwb2xpY3ktPmNwdXMpCi0JCWNwdWZyZXFfY3B1X2RhdGFbal0gPSBOVUxMOworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGosIHBvbGljeS0+Y3B1cykKKwkJcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBqKSA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwogCiAJa29iamVjdF9wdXQoJnBvbGljeS0+a29iaik7CkBAIC05ODksNyArOTg5LDcgQEAKIAlkcHJpbnRrKCJ1bnJlZ2lzdGVyaW5nIENQVSAldVxuIiwgY3B1KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7Ci0JZGF0YSA9IGNwdWZyZXFfY3B1X2RhdGFbY3B1XTsKKwlkYXRhID0gcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBjcHUpOwogCiAJaWYgKCFkYXRhKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQAogCQl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQljcHVmcmVxX2NwdV9kYXRhW2NwdV0gPSBOVUxMOworCXBlcl9jcHUoY3B1ZnJlcV9jcHVfZGF0YSwgY3B1KSA9IE5VTEw7CiAKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTEwMTksMzEgKzEwMTksMzEgQEAKICNpZmRlZiBDT05GSUdfU01QCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQljcHVmcmVxX2NwdV9nb3Zlcm5vcltjcHVdID0gZGF0YS0+Z292ZXJub3I7CisJcGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgY3B1KSA9IGRhdGEtPmdvdmVybm9yOwogI2VuZGlmCiAKIAkvKiBpZiB3ZSBoYXZlIG90aGVyIENQVXMgc3RpbGwgcmVnaXN0ZXJlZCwgd2UgbmVlZCB0byB1bmxpbmsgdGhlbSwKIAkgKiBvciBlbHNlIHdhaXRfZm9yX2NvbXBsZXRpb24gYmVsb3cgd2lsbCBsb2NrIHVwLiBDbGVhbiB0aGUKLQkgKiBjcHVmcmVxX2NwdV9kYXRhW10gd2hpbGUgaG9sZGluZyB0aGUgbG9jaywgYW5kIHJlbW92ZSB0aGUgc3lzZnMKLQkgKiBsaW5rcyBhZnRlcndhcmRzLgorCSAqIHBlcl9jcHUoY3B1ZnJlcV9jcHVfZGF0YSkgd2hpbGUgaG9sZGluZyB0aGUgbG9jaywgYW5kIHJlbW92ZQorCSAqIHRoZSBzeXNmcyBsaW5rcyBhZnRlcndhcmRzLgogCSAqLwogCWlmICh1bmxpa2VseShjcHVzX3dlaWdodChkYXRhLT5jcHVzKSA+IDEpKSB7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrKGosIGRhdGEtPmNwdXMpIHsKKwkJZm9yX2VhY2hfY3B1X21hc2tfbnIoaiwgZGF0YS0+Y3B1cykgewogCQkJaWYgKGogPT0gY3B1KQogCQkJCWNvbnRpbnVlOwotCQkJY3B1ZnJlcV9jcHVfZGF0YVtqXSA9IE5VTEw7CisJCQlwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIGopID0gTlVMTDsKIAkJfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAogCWlmICh1bmxpa2VseShjcHVzX3dlaWdodChkYXRhLT5jcHVzKSA+IDEpKSB7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrKGosIGRhdGEtPmNwdXMpIHsKKwkJZm9yX2VhY2hfY3B1X21hc2tfbnIoaiwgZGF0YS0+Y3B1cykgewogCQkJaWYgKGogPT0gY3B1KQogCQkJCWNvbnRpbnVlOwogCQkJZHByaW50aygicmVtb3ZpbmcgbGluayBmb3IgY3B1ICV1XG4iLCBqKTsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQkJCWNwdWZyZXFfY3B1X2dvdmVybm9yW2pdID0gZGF0YS0+Z292ZXJub3I7CisJCQlwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBqKSA9IGRhdGEtPmdvdmVybm9yOwogI2VuZGlmCiAJCQljcHVfc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGopOwogCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmNwdV9zeXNfZGV2LT5rb2JqLCAiY3B1ZnJlcSIpOwpAQCAtMTE1Myw3ICsxMTUzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBjcHVmcmVxX2NwdV9kYXRhW2NwdV07CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIGNwdSk7CiAJdW5zaWduZWQgaW50IHJldF9mcmVxID0gMDsKIAogCWlmICghY3B1ZnJlcV9kcml2ZXItPmdldCkKQEAgLTE4MjIsMTYgKzE4MjIsMTkgQEAKIAljcHVmcmVxX2RyaXZlciA9IGRyaXZlcl9kYXRhOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAotCXJldCA9IHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsJmNwdWZyZXFfc3lzZGV2X2RyaXZlcik7CisJcmV0ID0gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywKKwkJCQkJJmNwdWZyZXFfc3lzZGV2X2RyaXZlcik7CiAKIAlpZiAoKCFyZXQpICYmICEoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9TVElDS1kpKSB7CiAJCWludCBpOwogCQlyZXQgPSAtRU5PREVWOwogCiAJCS8qIGNoZWNrIGZvciBhdCBsZWFzdCBvbmUgd29ya2luZyBDUFUgKi8KLQkJZm9yIChpPTA7IGk8TlJfQ1BVUzsgaSsrKQotCQkJaWYgKGNwdWZyZXFfY3B1X2RhdGFbaV0pCisJCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzOyBpKyspCisJCQlpZiAoY3B1X3Bvc3NpYmxlKGkpICYmIHBlcl9jcHUoY3B1ZnJlcV9jcHVfZGF0YSwgaSkpIHsKIAkJCQlyZXQgPSAwOworCQkJCWJyZWFrOworCQkJfQogCiAJCS8qIGlmIGFsbCAtPmluaXQoKSBjYWxscyBmYWlsZWQsIHVucmVnaXN0ZXIgKi8KIAkJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwppbmRleCA1ZDNhMDRiLi5mZTU2NWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJCQlyZXR1cm4gcmM7CiAJCX0KIAotCQlmb3JfZWFjaF9jcHVfbWFzayhqLCBwb2xpY3ktPmNwdXMpIHsKKwkJZm9yX2VhY2hfY3B1X21hc2tfbnIoaiwgcG9saWN5LT5jcHVzKSB7CiAJCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87CiAJCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKIAkJCWpfZGJzX2luZm8tPmN1cl9wb2xpY3kgPSBwb2xpY3k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCBkMmFmMjBkLi4zMzg1NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTM2Nyw3ICszNjcsNyBAQAogCiAJLyogR2V0IElkbGUgVGltZSAqLwogCWlkbGVfdGlja3MgPSBVSU5UX01BWDsKLQlmb3JfZWFjaF9jcHVfbWFzayhqLCBwb2xpY3ktPmNwdXMpIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihqLCBwb2xpY3ktPmNwdXMpIHsKIAkJY3B1dGltZTY0X3QgdG90YWxfaWRsZV90aWNrczsKIAkJdW5zaWduZWQgaW50IHRtcF9pZGxlX3RpY2tzOwogCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87CkBAIC01MjEsNyArNTIxLDcgQEAKIAkJCXJldHVybiByYzsKIAkJfQogCi0JCWZvcl9lYWNoX2NwdV9tYXNrKGosIHBvbGljeS0+Y3B1cykgeworCQlmb3JfZWFjaF9jcHVfbWFza19ucihqLCBwb2xpY3ktPmNwdXMpIHsKIAkJCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqal9kYnNfaW5mbzsKIAkJCWpfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOwogCQkJal9kYnNfaW5mby0+Y3VyX3BvbGljeSA9IHBvbGljeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCmluZGV4IGFlNzBkNjMuLmMwZmY5N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwpAQCAtNDMsNyArNDMsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IGNwdWZyZXFfc3RhdHMgKmNwdWZyZXFfc3RhdHNfdGFibGVbTlJfQ1BVU107CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWZyZXFfc3RhdHMgKiwgY3B1ZnJlcV9zdGF0c190YWJsZSk7CiAKIHN0cnVjdCBjcHVmcmVxX3N0YXRzX2F0dHJpYnV0ZSB7CiAJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwpAQCAtNTgsNyArNTgsNyBAQAogCiAJY3VyX3RpbWUgPSBnZXRfamlmZmllc182NCgpOwogCXNwaW5fbG9jaygmY3B1ZnJlcV9zdGF0c19sb2NrKTsKLQlzdGF0ID0gY3B1ZnJlcV9zdGF0c190YWJsZVtjcHVdOworCXN0YXQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIGNwdSk7CiAJaWYgKHN0YXQtPnRpbWVfaW5fc3RhdGUpCiAJCXN0YXQtPnRpbWVfaW5fc3RhdGVbc3RhdC0+bGFzdF9pbmRleF0gPQogCQkJY3B1dGltZTY0X2FkZChzdGF0LT50aW1lX2luX3N0YXRlW3N0YXQtPmxhc3RfaW5kZXhdLApAQCAtNzEsMTEgKzcxLDExIEBACiBzdGF0aWMgc3NpemVfdAogc2hvd190b3RhbF90cmFucyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0ID0gY3B1ZnJlcV9zdGF0c190YWJsZVtwb2xpY3ktPmNwdV07CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIHBvbGljeS0+Y3B1KTsKIAlpZiAoIXN0YXQpCiAJCXJldHVybiAwOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAotCQkJY3B1ZnJlcV9zdGF0c190YWJsZVtzdGF0LT5jcHVdLT50b3RhbF90cmFucyk7CisJCQlwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIHN0YXQtPmNwdSktPnRvdGFsX3RyYW5zKTsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTgzLDcgKzgzLDcgQEAKIHsKIAlzc2l6ZV90IGxlbiA9IDA7CiAJaW50IGk7Ci0Jc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBjcHVmcmVxX3N0YXRzX3RhYmxlW3BvbGljeS0+Y3B1XTsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCA9IHBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgcG9saWN5LT5jcHUpOwogCWlmICghc3RhdCkKIAkJcmV0dXJuIDA7CiAJY3B1ZnJlcV9zdGF0c191cGRhdGUoc3RhdC0+Y3B1KTsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCXNzaXplX3QgbGVuID0gMDsKIAlpbnQgaSwgajsKIAotCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0ID0gY3B1ZnJlcV9zdGF0c190YWJsZVtwb2xpY3ktPmNwdV07CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIHBvbGljeS0+Y3B1KTsKIAlpZiAoIXN0YXQpCiAJCXJldHVybiAwOwogCWNwdWZyZXFfc3RhdHNfdXBkYXRlKHN0YXQtPmNwdSk7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAogc3RhdGljIHZvaWQgY3B1ZnJlcV9zdGF0c19mcmVlX3RhYmxlKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBjcHVmcmVxX3N0YXRzX3RhYmxlW2NwdV07CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIGNwdSk7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoY3B1KTsKIAlpZiAocG9saWN5ICYmIHBvbGljeS0+Y3B1ID09IGNwdSkKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwb2xpY3ktPmtvYmosICZzdGF0c19hdHRyX2dyb3VwKTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQlrZnJlZShzdGF0LT50aW1lX2luX3N0YXRlKTsKIAkJa2ZyZWUoc3RhdCk7CiAJfQotCWNwdWZyZXFfc3RhdHNfdGFibGVbY3B1XSA9IE5VTEw7CisJcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpID0gTlVMTDsKIAlpZiAocG9saWN5KQogCQljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKIH0KQEAgLTE5Miw3ICsxOTIsNyBAQAogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqZGF0YTsKIAl1bnNpZ25lZCBpbnQgYWxsb2Nfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7Ci0JaWYgKGNwdWZyZXFfc3RhdHNfdGFibGVbY3B1XSkKKwlpZiAocGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpKQogCQlyZXR1cm4gLUVCVVNZOwogCWlmICgoc3RhdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3N0YXRzKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJCWdvdG8gZXJyb3Jfb3V0OwogCiAJc3RhdC0+Y3B1ID0gY3B1OwotCWNwdWZyZXFfc3RhdHNfdGFibGVbY3B1XSA9IHN0YXQ7CisJcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpID0gc3RhdDsKIAogCWZvciAoaT0wOyB0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgZnJlcSA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKQEAgLTI1MSw3ICsyNTEsNyBAQAogCWNwdWZyZXFfY3B1X3B1dChkYXRhKTsKIGVycm9yX2dldF9mYWlsOgogCWtmcmVlKHN0YXQpOwotCWNwdWZyZXFfc3RhdHNfdGFibGVbY3B1XSA9IE5VTEw7CisJcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yODQsNyArMjg0LDcgQEAKIAlpZiAodmFsICE9IENQVUZSRVFfUE9TVENIQU5HRSkKIAkJcmV0dXJuIDA7CiAKLQlzdGF0ID0gY3B1ZnJlcV9zdGF0c190YWJsZVtmcmVxLT5jcHVdOworCXN0YXQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIGZyZXEtPmNwdSk7CiAJaWYgKCFzdGF0KQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYwppbmRleCBjYjJhYzAxLi4zMjI0NGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYwpAQCAtMzAsMTYgKzMwLDE4IEBACiAvKioKICAqIEEgZmV3IHZhbHVlcyBuZWVkZWQgYnkgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vcgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50CWNwdV9tYXhfZnJlcVtOUl9DUFVTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQJY3B1X21pbl9mcmVxW05SX0NQVVNdOwotc3RhdGljIHVuc2lnbmVkIGludAljcHVfY3VyX2ZyZXFbTlJfQ1BVU107IC8qIGN1cnJlbnQgQ1BVIGZyZXEgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQJY3B1X3NldF9mcmVxW05SX0NQVVNdOyAvKiBDUFUgZnJlcSBkZXNpcmVkIGJ5IHVzZXJzcGFjZSAqLwotc3RhdGljIHVuc2lnbmVkIGludAljcHVfaXNfbWFuYWdlZFtOUl9DUFVTXTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGNwdV9tYXhfZnJlcSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBjcHVfbWluX2ZyZXEpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgY3B1X2N1cl9mcmVxKTsgLyogY3VycmVudCBDUFUgZnJlcSAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgY3B1X3NldF9mcmVxKTsgLyogQ1BVIGZyZXEgZGVzaXJlZCBieQorCQkJCQkJCXVzZXJzcGFjZSAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgY3B1X2lzX21hbmFnZWQpOwogCiBzdGF0aWMgREVGSU5FX01VVEVYCSh1c2Vyc3BhY2VfbXV0ZXgpOwogc3RhdGljIGludCBjcHVzX3VzaW5nX3VzZXJzcGFjZV9nb3Zlcm5vcjsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19HT1ZFUk5PUiwgInVzZXJzcGFjZSIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIFwKKwljcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0dPVkVSTk9SLCAidXNlcnNwYWNlIiwgbXNnKQogCiAvKiBrZWVwIHRyYWNrIG9mIGZyZXF1ZW5jeSB0cmFuc2l0aW9ucyAqLwogc3RhdGljIGludApAQCAtNDgsMTIgKzUwLDEyIEBACiB7CiAgICAgICAgIHN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKIAotCWlmICghY3B1X2lzX21hbmFnZWRbZnJlcS0+Y3B1XSkKKwlpZiAoIXBlcl9jcHUoY3B1X2lzX21hbmFnZWQsIGZyZXEtPmNwdSkpCiAJCXJldHVybiAwOwogCiAJZHByaW50aygic2F2aW5nIGNwdV9jdXJfZnJlcSBvZiBjcHUgJXUgdG8gYmUgJXUga0h6XG4iLAogCQkJZnJlcS0+Y3B1LCBmcmVxLT5uZXcpOwotCWNwdV9jdXJfZnJlcVtmcmVxLT5jcHVdID0gZnJlcS0+bmV3OworCXBlcl9jcHUoY3B1X2N1cl9mcmVxLCBmcmVxLT5jcHUpID0gZnJlcS0+bmV3OwogCiAgICAgICAgIHJldHVybiAwOwogfQpAQCAtNzcsMTUgKzc5LDE1IEBACiAJZHByaW50aygiY3B1ZnJlcV9zZXQgZm9yIGNwdSAldSwgZnJlcSAldSBrSHpcbiIsIHBvbGljeS0+Y3B1LCBmcmVxKTsKIAogCW11dGV4X2xvY2soJnVzZXJzcGFjZV9tdXRleCk7Ci0JaWYgKCFjcHVfaXNfbWFuYWdlZFtwb2xpY3ktPmNwdV0pCisJaWYgKCFwZXJfY3B1KGNwdV9pc19tYW5hZ2VkLCBwb2xpY3ktPmNwdSkpCiAJCWdvdG8gZXJyOwogCi0JY3B1X3NldF9mcmVxW3BvbGljeS0+Y3B1XSA9IGZyZXE7CisJcGVyX2NwdShjcHVfc2V0X2ZyZXEsIHBvbGljeS0+Y3B1KSA9IGZyZXE7CiAKLQlpZiAoZnJlcSA8IGNwdV9taW5fZnJlcVtwb2xpY3ktPmNwdV0pCi0JCWZyZXEgPSBjcHVfbWluX2ZyZXFbcG9saWN5LT5jcHVdOwotCWlmIChmcmVxID4gY3B1X21heF9mcmVxW3BvbGljeS0+Y3B1XSkKLQkJZnJlcSA9IGNwdV9tYXhfZnJlcVtwb2xpY3ktPmNwdV07CisJaWYgKGZyZXEgPCBwZXJfY3B1KGNwdV9taW5fZnJlcSwgcG9saWN5LT5jcHUpKQorCQlmcmVxID0gcGVyX2NwdShjcHVfbWluX2ZyZXEsIHBvbGljeS0+Y3B1KTsKKwlpZiAoZnJlcSA+IHBlcl9jcHUoY3B1X21heF9mcmVxLCBwb2xpY3ktPmNwdSkpCisJCWZyZXEgPSBwZXJfY3B1KGNwdV9tYXhfZnJlcSwgcG9saWN5LT5jcHUpOwogCiAJLyoKIAkgKiBXZSdyZSBzYWZlIGZyb20gY29uY3VycmVudCBjYWxscyB0byAtPnRhcmdldCgpIGhlcmUKQEAgLTEwNCw3ICsxMDYsNyBAQAogCiBzdGF0aWMgc3NpemVfdCBzaG93X3NwZWVkKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGNwdV9jdXJfZnJlcVtwb2xpY3ktPmNwdV0pOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwZXJfY3B1KGNwdV9jdXJfZnJlcSwgcG9saWN5LT5jcHUpKTsKIH0KIAogc3RhdGljIGludCBjcHVmcmVxX2dvdmVybm9yX3VzZXJzcGFjZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKQEAgLTEyNywxMiArMTI5LDE3IEBACiAJCX0KIAkJY3B1c191c2luZ191c2Vyc3BhY2VfZ292ZXJub3IrKzsKIAotCQljcHVfaXNfbWFuYWdlZFtjcHVdID0gMTsKLQkJY3B1X21pbl9mcmVxW2NwdV0gPSBwb2xpY3ktPm1pbjsKLQkJY3B1X21heF9mcmVxW2NwdV0gPSBwb2xpY3ktPm1heDsKLQkJY3B1X2N1cl9mcmVxW2NwdV0gPSBwb2xpY3ktPmN1cjsKLQkJY3B1X3NldF9mcmVxW2NwdV0gPSBwb2xpY3ktPmN1cjsKLQkJZHByaW50aygibWFuYWdpbmcgY3B1ICV1IHN0YXJ0ZWQgKCV1IC0gJXUga0h6LCBjdXJyZW50bHkgJXUga0h6KVxuIiwgY3B1LCBjcHVfbWluX2ZyZXFbY3B1XSwgY3B1X21heF9mcmVxW2NwdV0sIGNwdV9jdXJfZnJlcVtjcHVdKTsKKwkJcGVyX2NwdShjcHVfaXNfbWFuYWdlZCwgY3B1KSA9IDE7CisJCXBlcl9jcHUoY3B1X21pbl9mcmVxLCBjcHUpID0gcG9saWN5LT5taW47CisJCXBlcl9jcHUoY3B1X21heF9mcmVxLCBjcHUpID0gcG9saWN5LT5tYXg7CisJCXBlcl9jcHUoY3B1X2N1cl9mcmVxLCBjcHUpID0gcG9saWN5LT5jdXI7CisJCXBlcl9jcHUoY3B1X3NldF9mcmVxLCBjcHUpID0gcG9saWN5LT5jdXI7CisJCWRwcmludGsoIm1hbmFnaW5nIGNwdSAldSBzdGFydGVkICIKKwkJCSIoJXUgLSAldSBrSHosIGN1cnJlbnRseSAldSBrSHopXG4iLAorCQkJCWNwdSwKKwkJCQlwZXJfY3B1KGNwdV9taW5fZnJlcSwgY3B1KSwKKwkJCQlwZXJfY3B1KGNwdV9tYXhfZnJlcSwgY3B1KSwKKwkJCQlwZXJfY3B1KGNwdV9jdXJfZnJlcSwgY3B1KSk7CiAKIAkJbXV0ZXhfdW5sb2NrKCZ1c2Vyc3BhY2VfbXV0ZXgpOwogCQlicmVhazsKQEAgLTE0NSwzNCArMTUyLDM0IEBACiAJCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CiAJCX0KIAotCQljcHVfaXNfbWFuYWdlZFtjcHVdID0gMDsKLQkJY3B1X21pbl9mcmVxW2NwdV0gPSAwOwotCQljcHVfbWF4X2ZyZXFbY3B1XSA9IDA7Ci0JCWNwdV9zZXRfZnJlcVtjcHVdID0gMDsKKwkJcGVyX2NwdShjcHVfaXNfbWFuYWdlZCwgY3B1KSA9IDA7CisJCXBlcl9jcHUoY3B1X21pbl9mcmVxLCBjcHUpID0gMDsKKwkJcGVyX2NwdShjcHVfbWF4X2ZyZXEsIGNwdSkgPSAwOworCQlwZXJfY3B1KGNwdV9zZXRfZnJlcSwgY3B1KSA9IDA7CiAJCWRwcmludGsoIm1hbmFnaW5nIGNwdSAldSBzdG9wcGVkXG4iLCBjcHUpOwogCQltdXRleF91bmxvY2soJnVzZXJzcGFjZV9tdXRleCk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVRlJFUV9HT1ZfTElNSVRTOgogCQltdXRleF9sb2NrKCZ1c2Vyc3BhY2VfbXV0ZXgpOwotCQlkcHJpbnRrKCJsaW1pdCBldmVudCBmb3IgY3B1ICV1OiAldSAtICV1IGtIeiwiCisJCWRwcmludGsoImxpbWl0IGV2ZW50IGZvciBjcHUgJXU6ICV1IC0gJXUga0h6LCAiCiAJCQkiY3VycmVudGx5ICV1IGtIeiwgbGFzdCBzZXQgdG8gJXUga0h6XG4iLAogCQkJY3B1LCBwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgsCi0JCQljcHVfY3VyX2ZyZXFbY3B1XSwgY3B1X3NldF9mcmVxW2NwdV0pOwotCQlpZiAocG9saWN5LT5tYXggPCBjcHVfc2V0X2ZyZXFbY3B1XSkgeworCQkJcGVyX2NwdShjcHVfY3VyX2ZyZXEsIGNwdSksCisJCQlwZXJfY3B1KGNwdV9zZXRfZnJlcSwgY3B1KSk7CisJCWlmIChwb2xpY3ktPm1heCA8IHBlcl9jcHUoY3B1X3NldF9mcmVxLCBjcHUpKSB7CiAJCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIHBvbGljeS0+bWF4LAogCQkJCQkJQ1BVRlJFUV9SRUxBVElPTl9IKTsKLQkJfQotCQllbHNlIGlmIChwb2xpY3ktPm1pbiA+IGNwdV9zZXRfZnJlcVtjcHVdKSB7CisJCX0gZWxzZSBpZiAocG9saWN5LT5taW4gPiBwZXJfY3B1KGNwdV9zZXRfZnJlcSwgY3B1KSkgewogCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCBwb2xpY3ktPm1pbiwKIAkJCQkJCUNQVUZSRVFfUkVMQVRJT05fTCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIGNwdV9zZXRfZnJlcVtjcHVdLAorCQl9IGVsc2UgeworCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LAorCQkJCQkJcGVyX2NwdShjcHVfc2V0X2ZyZXEsIGNwdSksCiAJCQkJCQlDUFVGUkVRX1JFTEFUSU9OX0wpOwogCQl9Ci0JCWNwdV9taW5fZnJlcVtjcHVdID0gcG9saWN5LT5taW47Ci0JCWNwdV9tYXhfZnJlcVtjcHVdID0gcG9saWN5LT5tYXg7Ci0JCWNwdV9jdXJfZnJlcVtjcHVdID0gcG9saWN5LT5jdXI7CisJCXBlcl9jcHUoY3B1X21pbl9mcmVxLCBjcHUpID0gcG9saWN5LT5taW47CisJCXBlcl9jcHUoY3B1X21heF9mcmVxLCBjcHUpID0gcG9saWN5LT5tYXg7CisJCXBlcl9jcHUoY3B1X2N1cl9mcmVxLCBjcHUpID0gcG9saWN5LT5jdXI7CiAJCW11dGV4X3VubG9jaygmdXNlcnNwYWNlX211dGV4KTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKaW5kZXggYjY0YzZiYy4uOTA3MWQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnNob3dfdGFibGVbTlJfQ1BVU107CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICosIHNob3dfdGFibGUpOwogLyoqCiAgKiBzaG93X2F2YWlsYWJsZV9mcmVxcyAtIHNob3cgYXZhaWxhYmxlIGZyZXF1ZW5jaWVzIGZvciB0aGUgc3BlY2lmaWVkIENQVQogICovCkBAIC0xODUsMTAgKzE4NSwxMCBAQAogCXNzaXplX3QgY291bnQgPSAwOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGU7CiAKLQlpZiAoIXNob3dfdGFibGVbY3B1XSkKKwlpZiAoIXBlcl9jcHUoc2hvd190YWJsZSwgY3B1KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQl0YWJsZSA9IHNob3dfdGFibGVbY3B1XTsKKwl0YWJsZSA9IHBlcl9jcHUoc2hvd190YWJsZSwgY3B1KTsKIAogCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCWlmICh0YWJsZVtpXS5mcmVxdWVuY3kgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQpAQCAtMjE3LDIwICsyMTcsMjAgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1KQogewogCWRwcmludGsoInNldHRpbmcgc2hvd190YWJsZSBmb3IgY3B1ICV1IHRvICVwXG4iLCBjcHUsIHRhYmxlKTsKLQlzaG93X3RhYmxlW2NwdV0gPSB0YWJsZTsKKwlwZXJfY3B1KHNob3dfdGFibGUsIGNwdSkgPSB0YWJsZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKTsKIAogdm9pZCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cih1bnNpZ25lZCBpbnQgY3B1KQogewogCWRwcmludGsoImNsZWFyaW5nIHNob3dfdGFibGUgZm9yIGNwdSAldVxuIiwgY3B1KTsKLQlzaG93X3RhYmxlW2NwdV0gPSBOVUxMOworCXBlcl9jcHUoc2hvd190YWJsZSwgY3B1KSA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cik7CiAKIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JcmV0dXJuIHNob3dfdGFibGVbY3B1XTsKKwlyZXR1cm4gcGVyX2NwdShzaG93X3RhYmxlLCBjcHUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMgYi9kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYwppbmRleCBlOTQ5NjE4Li4zMWEwZTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYwpAQCAtMjEsNyArMjEsOCBAQAogfQogX19zZXR1cCgiY3B1aWRsZV9zeXNmc19zd2l0Y2giLCBjcHVpZGxlX3N5c2ZzX3NldHVwKTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19hdmFpbGFibGVfZ292ZXJub3JzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXZhaWxhYmxlX2dvdmVybm9ycyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXNzaXplX3QgaSA9IDA7CiAJc3RydWN0IGNwdWlkbGVfZ292ZXJub3IgKnRtcDsKQEAgLTM5LDcgKzQwLDggQEAKIAlyZXR1cm4gaTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19jdXJyZW50X2RyaXZlcihzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2N1cnJlbnRfZHJpdmVyKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3NpemVfdCByZXQ7CiAKQEAgLTUzLDcgKzU1LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2N1cnJlbnRfZ292ZXJub3Ioc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19jdXJyZW50X2dvdmVybm9yKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXNzaXplX3QgcmV0OwogCkBAIC02OCw2ICs3MSw3IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2N1cnJlbnRfZ292ZXJub3Ioc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAljaGFyIGdvdl9uYW1lW0NQVUlETEVfTkFNRV9MRU5dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kY2EvZGNhLWNvcmUuYyBiL2RyaXZlcnMvZGNhL2RjYS1jb3JlLmMKaW5kZXggYmY1YjkyZi4uZWMyNDlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kY2EvZGNhLWNvcmUuYworKysgYi9kcml2ZXJzL2RjYS9kY2EtY29yZS5jCkBAIC0yOCwxMyArMjgsMjkgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kY2EuaD4KIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworI2RlZmluZSBEQ0FfVkVSU0lPTiAiMS40IgogCi0vKiBGb3Igbm93IHdlJ3JlIGFzc3VtaW5nIGEgc2luZ2xlLCBnbG9iYWwsIERDQSBwcm92aWRlciBmb3IgdGhlIHN5c3RlbS4gKi8KK01PRFVMRV9WRVJTSU9OKERDQV9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIik7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGNhX2xvY2spOwogCi1zdGF0aWMgc3RydWN0IGRjYV9wcm92aWRlciAqZ2xvYmFsX2RjYSA9IE5VTEw7CitzdGF0aWMgTElTVF9IRUFEKGRjYV9wcm92aWRlcnMpOworCitzdGF0aWMgc3RydWN0IGRjYV9wcm92aWRlciAqZGNhX2ZpbmRfcHJvdmlkZXJfYnlfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGNhX3Byb3ZpZGVyICpkY2EsICpyZXQgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2EsICZkY2FfcHJvdmlkZXJzLCBub2RlKSB7CisJCWlmICgoIWRldikgfHwgKGRjYS0+b3BzLT5kZXZfbWFuYWdlZChkY2EsIGRldikpKSB7CisJCQlyZXQgPSBkY2E7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CiAKIC8qKgogICogZGNhX2FkZF9yZXF1ZXN0ZXIgLSBhZGQgYSBkY2EgY2xpZW50IHRvIHRoZSBsaXN0CkBAIC00MiwyNSArNTgsMzkgQEAKICAqLwogaW50IGRjYV9hZGRfcmVxdWVzdGVyKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpbnQgZXJyLCBzbG90OworCXN0cnVjdCBkY2FfcHJvdmlkZXIgKmRjYTsKKwlpbnQgZXJyLCBzbG90ID0gLUVOT0RFVjsKIAotCWlmICghZ2xvYmFsX2RjYSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRUZBVUxUOwogCiAJc3Bpbl9sb2NrKCZkY2FfbG9jayk7Ci0Jc2xvdCA9IGdsb2JhbF9kY2EtPm9wcy0+YWRkX3JlcXVlc3RlcihnbG9iYWxfZGNhLCBkZXYpOwotCXNwaW5fdW5sb2NrKCZkY2FfbG9jayk7Ci0JaWYgKHNsb3QgPCAwKQotCQlyZXR1cm4gc2xvdDsKIAotCWVyciA9IGRjYV9zeXNmc19hZGRfcmVxKGdsb2JhbF9kY2EsIGRldiwgc2xvdCk7CisJLyogY2hlY2sgaWYgdGhlIHJlcXVlc3RlciBoYXMgbm90IGJlZW4gYWRkZWQgYWxyZWFkeSAqLworCWRjYSA9IGRjYV9maW5kX3Byb3ZpZGVyX2J5X2RldihkZXYpOworCWlmIChkY2EpIHsKKwkJc3Bpbl91bmxvY2soJmRjYV9sb2NrKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2EsICZkY2FfcHJvdmlkZXJzLCBub2RlKSB7CisJCXNsb3QgPSBkY2EtPm9wcy0+YWRkX3JlcXVlc3RlcihkY2EsIGRldik7CisJCWlmIChzbG90ID49IDApCisJCQlicmVhazsKKwl9CisJaWYgKHNsb3QgPCAwKSB7CisJCXNwaW5fdW5sb2NrKCZkY2FfbG9jayk7CisJCXJldHVybiBzbG90OworCX0KKworCWVyciA9IGRjYV9zeXNmc19hZGRfcmVxKGRjYSwgZGV2LCBzbG90KTsKIAlpZiAoZXJyKSB7Ci0JCXNwaW5fbG9jaygmZGNhX2xvY2spOwotCQlnbG9iYWxfZGNhLT5vcHMtPnJlbW92ZV9yZXF1ZXN0ZXIoZ2xvYmFsX2RjYSwgZGV2KTsKKwkJZGNhLT5vcHMtPnJlbW92ZV9yZXF1ZXN0ZXIoZGNhLCBkZXYpOwogCQlzcGluX3VubG9jaygmZGNhX2xvY2spOwogCQlyZXR1cm4gZXJyOwogCX0KIAorCXNwaW5fdW5sb2NrKCZkY2FfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkY2FfYWRkX3JlcXVlc3Rlcik7CkBAIC03MSwzMCArMTAxLDc4IEBACiAgKi8KIGludCBkY2FfcmVtb3ZlX3JlcXVlc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRjYV9wcm92aWRlciAqZGNhOwogCWludCBzbG90OwotCWlmICghZ2xvYmFsX2RjYSkKLQkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlzcGluX2xvY2soJmRjYV9sb2NrKTsKLQlzbG90ID0gZ2xvYmFsX2RjYS0+b3BzLT5yZW1vdmVfcmVxdWVzdGVyKGdsb2JhbF9kY2EsIGRldik7Ci0Jc3Bpbl91bmxvY2soJmRjYV9sb2NrKTsKLQlpZiAoc2xvdCA8IDApCisJZGNhID0gZGNhX2ZpbmRfcHJvdmlkZXJfYnlfZGV2KGRldik7CisJaWYgKCFkY2EpIHsKKwkJc3Bpbl91bmxvY2soJmRjYV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXNsb3QgPSBkY2EtPm9wcy0+cmVtb3ZlX3JlcXVlc3RlcihkY2EsIGRldik7CisJaWYgKHNsb3QgPCAwKSB7CisJCXNwaW5fdW5sb2NrKCZkY2FfbG9jayk7CiAJCXJldHVybiBzbG90OworCX0KIAotCWRjYV9zeXNmc19yZW1vdmVfcmVxKGdsb2JhbF9kY2EsIHNsb3QpOworCWRjYV9zeXNmc19yZW1vdmVfcmVxKGRjYSwgc2xvdCk7CisKKwlzcGluX3VubG9jaygmZGNhX2xvY2spOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGNhX3JlbW92ZV9yZXF1ZXN0ZXIpOwogCiAvKioKLSAqIGRjYV9nZXRfdGFnIC0gcmV0dXJuIHRoZSBkY2EgdGFnIGZvciB0aGUgZ2l2ZW4gY3B1CisgKiBkY2FfY29tbW9uX2dldF90YWcgLSByZXR1cm4gdGhlIGRjYSB0YWcgKHNlcnZlcyBib3RoIG5ldyBhbmQgb2xkIGFwaSkKKyAqIEBkZXYgLSB0aGUgZGV2aWNlIHRoYXQgd2FudHMgZGNhIHNlcnZpY2UKKyAqIEBjcHUgLSB0aGUgY3B1aWQgYXMgcmV0dXJuZWQgYnkgZ2V0X2NwdSgpCisgKi8KK3U4IGRjYV9jb21tb25fZ2V0X3RhZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBjcHUpCit7CisJc3RydWN0IGRjYV9wcm92aWRlciAqZGNhOworCXU4IHRhZzsKKworCXNwaW5fbG9jaygmZGNhX2xvY2spOworCisJZGNhID0gZGNhX2ZpbmRfcHJvdmlkZXJfYnlfZGV2KGRldik7CisJaWYgKCFkY2EpIHsKKwkJc3Bpbl91bmxvY2soJmRjYV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXRhZyA9IGRjYS0+b3BzLT5nZXRfdGFnKGRjYSwgZGV2LCBjcHUpOworCisJc3Bpbl91bmxvY2soJmRjYV9sb2NrKTsKKwlyZXR1cm4gdGFnOworfQorCisvKioKKyAqIGRjYTNfZ2V0X3RhZyAtIHJldHVybiB0aGUgZGNhIHRhZyB0byB0aGUgcmVxdWVzdGVyIGRldmljZQorICogICAgICAgICAgICAgICAgZm9yIHRoZSBnaXZlbiBjcHUgKG5ldyBhcGkpCisgKiBAZGV2IC0gdGhlIGRldmljZSB0aGF0IHdhbnRzIGRjYSBzZXJ2aWNlCisgKiBAY3B1IC0gdGhlIGNwdWlkIGFzIHJldHVybmVkIGJ5IGdldF9jcHUoKQorICovCit1OCBkY2EzX2dldF90YWcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgY3B1KQoreworCWlmICghZGV2KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBkY2FfY29tbW9uX2dldF90YWcoZGV2LCBjcHUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGNhM19nZXRfdGFnKTsKKworLyoqCisgKiBkY2FfZ2V0X3RhZyAtIHJldHVybiB0aGUgZGNhIHRhZyBmb3IgdGhlIGdpdmVuIGNwdSAob2xkIGFwaSkKICAqIEBjcHUgLSB0aGUgY3B1aWQgYXMgcmV0dXJuZWQgYnkgZ2V0X2NwdSgpCiAgKi8KIHU4IGRjYV9nZXRfdGFnKGludCBjcHUpCiB7Ci0JaWYgKCFnbG9iYWxfZGNhKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gZ2xvYmFsX2RjYS0+b3BzLT5nZXRfdGFnKGdsb2JhbF9kY2EsIGNwdSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKKworCXJldHVybiBkY2FfY29tbW9uX2dldF90YWcoZGV2LCBjcHUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGNhX2dldF90YWcpOwogCkBAIC0xNDAsMTIgKzIxOCwxMCBAQAogewogCWludCBlcnI7CiAKLQlpZiAoZ2xvYmFsX2RjYSkKLQkJcmV0dXJuIC1FRVhJU1Q7CiAJZXJyID0gZGNhX3N5c2ZzX2FkZF9wcm92aWRlcihkY2EsIGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQlnbG9iYWxfZGNhID0gZGNhOworCWxpc3RfYWRkKCZkY2EtPm5vZGUsICZkY2FfcHJvdmlkZXJzKTsKIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZkY2FfcHJvdmlkZXJfY2hhaW4sCiAJCQkJICAgICBEQ0FfUFJPVklERVJfQURELCBOVUxMKTsKIAlyZXR1cm4gMDsKQEAgLTE1OCwxMSArMjM0LDkgQEAKICAqLwogdm9pZCB1bnJlZ2lzdGVyX2RjYV9wcm92aWRlcihzdHJ1Y3QgZGNhX3Byb3ZpZGVyICpkY2EpCiB7Ci0JaWYgKCFnbG9iYWxfZGNhKQotCQlyZXR1cm47CiAJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZGNhX3Byb3ZpZGVyX2NoYWluLAogCQkJCSAgICAgRENBX1BST1ZJREVSX1JFTU9WRSwgTlVMTCk7Ci0JZ2xvYmFsX2RjYSA9IE5VTEw7CisJbGlzdF9kZWwoJmRjYS0+bm9kZSk7CiAJZGNhX3N5c2ZzX3JlbW92ZV9wcm92aWRlcihkY2EpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kY2FfcHJvdmlkZXIpOwpAQCAtMTg3LDYgKzI2MSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGRjYV9pbml0KHZvaWQpCiB7CisJcHJpbnRrKEtFUk5fRVJSICJkY2Egc2VydmljZSBzdGFydGVkLCB2ZXJzaW9uICVzXG4iLCBEQ0FfVkVSU0lPTik7CiAJcmV0dXJuIGRjYV9zeXNmc19pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGNhL2RjYS1zeXNmcy5jIGIvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMKaW5kZXggMDExMzI4Zi4uN2FmNGI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMKQEAgLTEzLDkgKzEzLDExIEBACiBpbnQgZGNhX3N5c2ZzX2FkZF9yZXEoc3RydWN0IGRjYV9wcm92aWRlciAqZGNhLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQogewogCXN0cnVjdCBkZXZpY2UgKmNkOworCXN0YXRpYyBpbnQgcmVxX2NvdW50OwogCi0JY2QgPSBkZXZpY2VfY3JlYXRlKGRjYV9jbGFzcywgZGNhLT5jZCwgTUtERVYoMCwgc2xvdCArIDEpLAotCQkJICAgInJlcXVlc3RlciVkIiwgc2xvdCk7CisJY2QgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoZGNhX2NsYXNzLCBkY2EtPmNkLAorCQkJCSAgIE1LREVWKDAsIHNsb3QgKyAxKSwgTlVMTCwKKwkJCQkgICAicmVxdWVzdGVyJWQiLCByZXFfY291bnQrKyk7CiAJaWYgKElTX0VSUihjZCkpCiAJCXJldHVybiBQVFJfRVJSKGNkKTsKIAlyZXR1cm4gMDsKQEAgLTQ2LDcgKzQ4LDggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQljZCA9IGRldmljZV9jcmVhdGUoZGNhX2NsYXNzLCBkZXYsIE1LREVWKDAsIDApLCAiZGNhJWQiLCBkY2EtPmlkKTsKKwljZCA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShkY2FfY2xhc3MsIGRldiwgTUtERVYoMCwgMCksIE5VTEwsCisJCQkJICAgImRjYSVkIiwgZGNhLT5pZCk7CiAJaWYgKElTX0VSUihjZCkpIHsKIAkJc3Bpbl9sb2NrKCZkY2FfaWRyX2xvY2spOwogCQlpZHJfcmVtb3ZlKCZkY2FfaWRyLCBkY2EtPmlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlvL2Rpby1kcml2ZXIuYyBiL2RyaXZlcnMvZGlvL2Rpby1kcml2ZXIuYwppbmRleCA4Y2Q4NTA3Li45YzBjOWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Rpby9kaW8tZHJpdmVyLmMKKysrIGIvZHJpdmVycy9kaW8vZGlvLWRyaXZlci5jCkBAIC0xMTksMTkgKzExOSw3IEBACiAJaWYgKCFpZHMpCiAJCXJldHVybiAwOwogCi0Jd2hpbGUgKGlkcy0+aWQpIHsKLQkJaWYgKGlkcy0+aWQgPT0gRElPX1dJTERDQVJEKQotCQkJcmV0dXJuIDE7Ci0JCWlmIChESU9fTkVFRFNTRUNJRChpZHMtPmlkICYgMHhmZikpIHsKLQkJCWlmIChpZHMtPmlkID09IGQtPmlkKQotCQkJCXJldHVybiAxOwotCQl9IGVsc2UgewotCQkJaWYgKChpZHMtPmlkICYgMHhmZikgPT0gKGQtPmlkICYgMHhmZikpCi0JCQkJcmV0dXJuIDE7Ci0JCX0KLQkJaWRzKys7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBkaW9fbWF0Y2hfZGV2aWNlKGlkcywgZCkgPyAxIDogMDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCA2MjM5YzNkLi5jZDMwMzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTQsMTMgKzQsMTQgQEAKIAogbWVudWNvbmZpZyBETUFERVZJQ0VTCiAJYm9vbCAiRE1BIEVuZ2luZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gKFBDSSAmJiBYODYpIHx8IEFSQ0hfSU9QMzJYIHx8IEFSQ0hfSU9QMzNYIHx8IEFSQ0hfSU9QMTNYWCB8fCBQUEMKLQlkZXBlbmRzIG9uICFISUdITUVNNjRHCisJZGVwZW5kcyBvbiAhSElHSE1FTTY0RyAmJiBIQVNfRE1BCiAJaGVscAogCSAgRE1BIGVuZ2luZXMgY2FuIGRvIGFzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycyB3aXRob3V0CiAJICBpbnZvbHZpbmcgdGhlIGhvc3QgQ1BVLiAgQ3VycmVudGx5LCB0aGlzIGZyYW1ld29yayBjYW4gYmUKIAkgIHVzZWQgdG8gb2ZmbG9hZCBtZW1vcnkgY29waWVzIGluIHRoZSBuZXR3b3JrIHN0YWNrIGFuZAotCSAgUkFJRCBvcGVyYXRpb25zIGluIHRoZSBNRCBkcml2ZXIuCisJICBSQUlEIG9wZXJhdGlvbnMgaW4gdGhlIE1EIGRyaXZlci4gIFRoaXMgbWVudSBvbmx5IHByZXNlbnRzCisJICBETUEgRGV2aWNlIGRyaXZlcnMgc3VwcG9ydGVkIGJ5IHRoZSBjb25maWd1cmVkIGFyY2gsIGl0IG1heQorCSAgYmUgZW1wdHkgaW4gc29tZSBjYXNlcy4KIAogaWYgRE1BREVWSUNFUwogCkBAIC0zNyw2ICszOCwxNSBAQAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgSW50ZWwoUikgSU9QIFNlcmllcyBSQUlEIGVuZ2luZXMuCiAKK2NvbmZpZyBEV19ETUFDCisJdHJpc3RhdGUgIlN5bm9wc3lzIERlc2lnbldhcmUgQUhCIERNQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVZSMzIKKwlzZWxlY3QgRE1BX0VOR0lORQorCWRlZmF1bHQgeSBpZiBDUFVfQVQzMkFQNzAwMAorCWhlbHAKKwkgIFN1cHBvcnQgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgQUhCIERNQSBjb250cm9sbGVyLiAgVGhpcworCSAgY2FuIGJlIGludGVncmF0ZWQgaW4gY2hpcHMgc3VjaCBhcyB0aGUgQXRtZWwgQVQzMmFwNzAwMC4KKwogY29uZmlnIEZTTF9ETUEKIAlib29sICJGcmVlc2NhbGUgTVBDODV4eC9NUEM4M3h4IERNQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUFBDCkBAIC00Niw2ICs1NiwxNCBAQAogCSAgTVBDODU2MC80MCwgTVBDODU1NSwgTVBDODU0OCBhbmQgTVBDODY0MSBwcm9jZXNzb3JzLgogCSAgVGhlIE1QQzgzNDksIE1QQzgzNjAgaXMgYWxzbyBzdXBwb3J0ZWQuCiAKK2NvbmZpZyBNVl9YT1IKKwlib29sICJNYXJ2ZWxsIFhPUiBlbmdpbmUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBMQVRfT1JJT04KKwlzZWxlY3QgQVNZTkNfQ09SRQorCXNlbGVjdCBETUFfRU5HSU5FCisJLS0taGVscC0tLQorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIFhPUiBlbmdpbmUuCisKIGNvbmZpZyBETUFfRU5HSU5FCiAJYm9vbAogCkBAIC01NSwxMCArNzMsMTkgQEAKIGNvbmZpZyBORVRfRE1BCiAJYm9vbCAiTmV0d29yazogVENQIHJlY2VpdmUgY29weSBvZmZsb2FkIgogCWRlcGVuZHMgb24gRE1BX0VOR0lORSAmJiBORVQKKwlkZWZhdWx0IChJTlRFTF9JT0FURE1BIHx8IEZTTF9ETUEpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgRE1BIGVuZ2luZXMgaW4gdGhlIG5ldHdvcmsgc3RhY2sgdG8KIAkgIG9mZmxvYWQgcmVjZWl2ZSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgZnJlZWluZyBDUFUgY3ljbGVzLgotCSAgU2luY2UgdGhpcyBpcyB0aGUgbWFpbiB1c2VyIG9mIHRoZSBETUEgZW5naW5lLCBpdCBzaG91bGQgYmUgZW5hYmxlZDsKLQkgIHNheSBZIGhlcmUuCisKKwkgIFNheSBZIGhlcmUgaWYgeW91IGVuYWJsZWQgSU5URUxfSU9BVERNQSBvciBGU0xfRE1BLCBvdGhlcndpc2UKKwkgIHNheSBOLgorCitjb25maWcgRE1BVEVTVAorCXRyaXN0YXRlICJETUEgVGVzdCBjbGllbnQiCisJZGVwZW5kcyBvbiBETUFfRU5HSU5FCisJaGVscAorCSAgU2ltcGxlIERNQSB0ZXN0IGNsaWVudC4gU2F5IE4gdW5sZXNzIHlvdSdyZSBkZWJ1Z2dpbmcgYQorCSAgRE1BIERldmljZSBkcml2ZXIuCiAKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4IGM4MDM2ZDkuLjE0ZjU5NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCkBAIC0xLDYgKzEsOSBAQAogb2JqLSQoQ09ORklHX0RNQV9FTkdJTkUpICs9IGRtYWVuZ2luZS5vCiBvYmotJChDT05GSUdfTkVUX0RNQSkgKz0gaW92bG9jay5vCitvYmotJChDT05GSUdfRE1BVEVTVCkgKz0gZG1hdGVzdC5vCiBvYmotJChDT05GSUdfSU5URUxfSU9BVERNQSkgKz0gaW9hdGRtYS5vCiBpb2F0ZG1hLW9ianMgOj0gaW9hdC5vIGlvYXRfZG1hLm8gaW9hdF9kY2Eubwogb2JqLSQoQ09ORklHX0lOVEVMX0lPUF9BRE1BKSArPSBpb3AtYWRtYS5vCiBvYmotJChDT05GSUdfRlNMX0RNQSkgKz0gZnNsZG1hLm8KK29iai0kKENPTkZJR19NVl9YT1IpICs9IG12X3hvci5vCitvYmotJChDT05GSUdfRFdfRE1BQykgKz0gZHdfZG1hYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCmluZGV4IDk3YjMyOWUuLmRjMDAzYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCisrKyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCkBAIC0xNjksMTIgKzE2OSwxOCBAQAogCWVudW0gZG1hX3N0YXRlX2NsaWVudCBhY2s7CiAKIAkvKiBGaW5kIGEgY2hhbm5lbCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCAmZG1hX2RldmljZV9saXN0LCBnbG9iYWxfbm9kZSkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmRtYV9kZXZpY2VfbGlzdCwgZ2xvYmFsX25vZGUpIHsKKwkJLyogRG9lcyB0aGUgY2xpZW50IHJlcXVpcmUgYSBzcGVjaWZpYyBETUEgY29udHJvbGxlcj8gKi8KKwkJaWYgKGNsaWVudC0+c2xhdmUgJiYgY2xpZW50LT5zbGF2ZS0+ZG1hX2RldgorCQkJCSYmIGNsaWVudC0+c2xhdmUtPmRtYV9kZXYgIT0gZGV2aWNlLT5kZXYpCisJCQljb250aW51ZTsKKwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZkZXZpY2UtPmNoYW5uZWxzLCBkZXZpY2Vfbm9kZSkgewogCQkJaWYgKCFkbWFfY2hhbl9zYXRpc2ZpZXNfbWFzayhjaGFuLCBjbGllbnQtPmNhcF9tYXNrKSkKIAkJCQljb250aW51ZTsKIAotCQkJZGVzYyA9IGNoYW4tPmRldmljZS0+ZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzKGNoYW4pOworCQkJZGVzYyA9IGNoYW4tPmRldmljZS0+ZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzKAorCQkJCQljaGFuLCBjbGllbnQpOwogCQkJaWYgKGRlc2MgPj0gMCkgewogCQkJCWFjayA9IGNsaWVudC0+ZXZlbnRfY2FsbGJhY2soY2xpZW50LAogCQkJCQkJY2hhbiwKQEAgLTE4MywxMiArMTg5LDE0IEBACiAJCQkJLyogd2UgYXJlIGRvbmUgb25jZSB0aGlzIGNsaWVudCByZWplY3RzCiAJCQkJICogYW4gYXZhaWxhYmxlIHJlc291cmNlCiAJCQkJICovCi0JCQkJaWYgKGFjayA9PSBETUFfQUNLKQorCQkJCWlmIChhY2sgPT0gRE1BX0FDSykgewogCQkJCQlkbWFfY2hhbl9nZXQoY2hhbik7Ci0JCQkJZWxzZSBpZiAoYWNrID09IERNQV9OQUspCisJCQkJCWNoYW4tPmNsaWVudF9jb3VudCsrOworCQkJCX0gZWxzZSBpZiAoYWNrID09IERNQV9OQUspCiAJCQkJCXJldHVybjsKIAkJCX0KIAkJfQorCX0KIH0KIAogZW51bSBkbWFfc3RhdHVzIGRtYV9zeW5jX3dhaXQoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfY29va2llX3QgY29va2llKQpAQCAtMjcyLDggKzI4MCwxMCBAQAogCQkvKiBjbGllbnQgd2FzIGhvbGRpbmcgcmVzb3VyY2VzIGZvciB0aGlzIGNoYW5uZWwgc28KIAkJICogZnJlZSBpdAogCQkgKi8KLQkJaWYgKGFjayA9PSBETUFfQUNLKQorCQlpZiAoYWNrID09IERNQV9BQ0spIHsKIAkJCWRtYV9jaGFuX3B1dChjaGFuKTsKKwkJCWNoYW4tPmNsaWVudF9jb3VudC0tOworCQl9CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkbWFfbGlzdF9tdXRleCk7CkBAIC0yODUsNiArMjk1LDEwIEBACiAgKi8KIHZvaWQgZG1hX2FzeW5jX2NsaWVudF9yZWdpc3RlcihzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50KQogeworCS8qIHZhbGlkYXRlIGNsaWVudCBkYXRhICovCisJQlVHX09OKGRtYV9oYXNfY2FwKERNQV9TTEFWRSwgY2xpZW50LT5jYXBfbWFzaykgJiYKKwkJIWNsaWVudC0+c2xhdmUpOworCiAJbXV0ZXhfbG9jaygmZG1hX2xpc3RfbXV0ZXgpOwogCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+Z2xvYmFsX25vZGUsICZkbWFfY2xpZW50X2xpc3QpOwogCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOwpAQCAtMzEzLDggKzMyNywxMCBAQAogCQkJYWNrID0gY2xpZW50LT5ldmVudF9jYWxsYmFjayhjbGllbnQsIGNoYW4sCiAJCQkJRE1BX1JFU09VUkNFX1JFTU9WRUQpOwogCi0JCQlpZiAoYWNrID09IERNQV9BQ0spCisJCQlpZiAoYWNrID09IERNQV9BQ0spIHsKIAkJCQlkbWFfY2hhbl9wdXQoY2hhbik7CisJCQkJY2hhbi0+Y2xpZW50X2NvdW50LS07CisJCQl9CiAJCX0KIAogCWxpc3RfZGVsKCZjbGllbnQtPmdsb2JhbF9ub2RlKTsKQEAgLTM1OSw2ICszNzUsMTAgQEAKIAkJIWRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX21lbXNldCk7CiAJQlVHX09OKGRtYV9oYXNfY2FwKERNQV9JTlRFUlJVUFQsIGRldmljZS0+Y2FwX21hc2spICYmCiAJCSFkZXZpY2UtPmRldmljZV9wcmVwX2RtYV9pbnRlcnJ1cHQpOworCUJVR19PTihkbWFfaGFzX2NhcChETUFfU0xBVkUsIGRldmljZS0+Y2FwX21hc2spICYmCisJCSFkZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKTsKKwlCVUdfT04oZG1hX2hhc19jYXAoRE1BX1NMQVZFLCBkZXZpY2UtPmNhcF9tYXNrKSAmJgorCQkhZGV2aWNlLT5kZXZpY2VfdGVybWluYXRlX2FsbCk7CiAKIAlCVUdfT04oIWRldmljZS0+ZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzKTsKIAlCVUdfT04oIWRldmljZS0+ZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMpOwpAQCAtMzc4LDcgKzM5OCw3IEBACiAKIAkJY2hhbi0+Y2hhbl9pZCA9IGNoYW5jbnQrKzsKIAkJY2hhbi0+ZGV2LmNsYXNzID0gJmRtYV9kZXZjbGFzczsKLQkJY2hhbi0+ZGV2LnBhcmVudCA9IE5VTEw7CisJCWNoYW4tPmRldi5wYXJlbnQgPSBkZXZpY2UtPmRldjsKIAkJc25wcmludGYoY2hhbi0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJkbWElZGNoYW4lZCIsCiAJCSAgICAgICAgIGRldmljZS0+ZGV2X2lkLCBjaGFuLT5jaGFuX2lkKTsKIApAQCAtMzk0LDYgKzQxNCw3IEBACiAJCWtyZWZfZ2V0KCZkZXZpY2UtPnJlZmNvdW50KTsKIAkJa3JlZl9nZXQoJmRldmljZS0+cmVmY291bnQpOwogCQlrcmVmX2luaXQoJmNoYW4tPnJlZmNvdW50KTsKKwkJY2hhbi0+Y2xpZW50X2NvdW50ID0gMDsKIAkJY2hhbi0+c2xvd19yZWYgPSAwOwogCQlJTklUX1JDVV9IRUFEKCZjaGFuLT5yY3UpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDhkMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogRE1BIEVuZ2luZSB0ZXN0IG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGVzdF9idWZfc2l6ZSA9IDE2Mzg0OworbW9kdWxlX3BhcmFtKHRlc3RfYnVmX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh0ZXN0X2J1Zl9zaXplLCAiU2l6ZSBvZiB0aGUgbWVtY3B5IHRlc3QgYnVmZmVyIik7CisKK3N0YXRpYyBjaGFyIHRlc3RfY2hhbm5lbFtCVVNfSURfU0laRV07Cittb2R1bGVfcGFyYW1fc3RyaW5nKGNoYW5uZWwsIHRlc3RfY2hhbm5lbCwgc2l6ZW9mKHRlc3RfY2hhbm5lbCksIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhjaGFubmVsLCAiQnVzIElEIG9mIHRoZSBjaGFubmVsIHRvIHRlc3QgKGRlZmF1bHQ6IGFueSkiKTsKKworc3RhdGljIGNoYXIgdGVzdF9kZXZpY2VbQlVTX0lEX1NJWkVdOworbW9kdWxlX3BhcmFtX3N0cmluZyhkZXZpY2UsIHRlc3RfZGV2aWNlLCBzaXplb2YodGVzdF9kZXZpY2UpLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZGV2aWNlLCAiQnVzIElEIG9mIHRoZSBETUEgRW5naW5lIHRvIHRlc3QgKGRlZmF1bHQ6IGFueSkiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCB0aHJlYWRzX3Blcl9jaGFuID0gMTsKK21vZHVsZV9wYXJhbSh0aHJlYWRzX3Blcl9jaGFuLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModGhyZWFkc19wZXJfY2hhbiwKKwkJIk51bWJlciBvZiB0aHJlYWRzIHRvIHN0YXJ0IHBlciBjaGFubmVsIChkZWZhdWx0OiAxKSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IG1heF9jaGFubmVsczsKK21vZHVsZV9wYXJhbShtYXhfY2hhbm5lbHMsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhucl9jaGFubmVscywKKwkJIk1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHVzZSAoZGVmYXVsdDogYWxsKSIpOworCisvKgorICogSW5pdGlhbGl6YXRpb24gcGF0dGVybnMuIEFsbCBieXRlcyBpbiB0aGUgc291cmNlIGJ1ZmZlciBoYXMgYml0IDcKKyAqIHNldCwgYWxsIGJ5dGVzIGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgaGFzIGJpdCA3IGNsZWFyZWQuCisgKgorICogQml0IDYgaXMgc2V0IGZvciBhbGwgYnl0ZXMgd2hpY2ggYXJlIHRvIGJlIGNvcGllZCBieSB0aGUgRE1BCisgKiBlbmdpbmUuIEJpdCA1IGlzIHNldCBmb3IgYWxsIGJ5dGVzIHdoaWNoIGFyZSB0byBiZSBvdmVyd3JpdHRlbiBieQorICogdGhlIERNQSBlbmdpbmUuCisgKgorICogVGhlIHJlbWFpbmluZyBiaXRzIGFyZSB0aGUgaW52ZXJzZSBvZiBhIGNvdW50ZXIgd2hpY2ggaW5jcmVtZW50cyBieQorICogb25lIGZvciBlYWNoIGJ5dGUgYWRkcmVzcy4KKyAqLworI2RlZmluZSBQQVRURVJOX1NSQwkJMHg4MAorI2RlZmluZSBQQVRURVJOX0RTVAkJMHgwMAorI2RlZmluZSBQQVRURVJOX0NPUFkJCTB4NDAKKyNkZWZpbmUgUEFUVEVSTl9PVkVSV1JJVEUJMHgyMAorI2RlZmluZSBQQVRURVJOX0NPVU5UX01BU0sJMHgxZgorCitzdHJ1Y3QgZG1hdGVzdF90aHJlYWQgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CisJc3RydWN0IGRtYV9jaGFuCQkqY2hhbjsKKwl1OAkJCSpzcmNidWY7CisJdTgJCQkqZHN0YnVmOworfTsKKworc3RydWN0IGRtYXRlc3RfY2hhbiB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBkbWFfY2hhbgkJKmNoYW47CisJc3RydWN0IGxpc3RfaGVhZAl0aHJlYWRzOworfTsKKworLyoKKyAqIFRoZXNlIGFyZSBwcm90ZWN0ZWQgYnkgZG1hX2xpc3RfbXV0ZXggc2luY2UgdGhleSdyZSBvbmx5IHVzZWQgYnkKKyAqIHRoZSBETUEgY2xpZW50IGV2ZW50IGNhbGxiYWNrCisgKi8KK3N0YXRpYyBMSVNUX0hFQUQoZG1hdGVzdF9jaGFubmVscyk7CitzdGF0aWMgdW5zaWduZWQgaW50IG5yX2NoYW5uZWxzOworCitzdGF0aWMgYm9vbCBkbWF0ZXN0X21hdGNoX2NoYW5uZWwoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCWlmICh0ZXN0X2NoYW5uZWxbMF0gPT0gJ1wwJykKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIHN0cmNtcChjaGFuLT5kZXYuYnVzX2lkLCB0ZXN0X2NoYW5uZWwpID09IDA7Cit9CisKK3N0YXRpYyBib29sIGRtYXRlc3RfbWF0Y2hfZGV2aWNlKHN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UpCit7CisJaWYgKHRlc3RfZGV2aWNlWzBdID09ICdcMCcpCisJCXJldHVybiB0cnVlOworCXJldHVybiBzdHJjbXAoZGV2aWNlLT5kZXYtPmJ1c19pZCwgdGVzdF9kZXZpY2UpID09IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRtYXRlc3RfcmFuZG9tKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBidWY7CisKKwlnZXRfcmFuZG9tX2J5dGVzKCZidWYsIHNpemVvZihidWYpKTsKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZCBkbWF0ZXN0X2luaXRfc3JjYnVmKHU4ICpidWYsIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzdGFydDsgaSsrKQorCQlidWZbaV0gPSBQQVRURVJOX1NSQyB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKKwkJYnVmW2ldID0gUEFUVEVSTl9TUkMgfCBQQVRURVJOX0NPUFkKKwkJCXwgKH5pICYgUEFUVEVSTl9DT1VOVF9NQVNLKTs7CisJZm9yICggOyBpIDwgdGVzdF9idWZfc2l6ZTsgaSsrKQorCQlidWZbaV0gPSBQQVRURVJOX1NSQyB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYXRlc3RfaW5pdF9kc3RidWYodTggKmJ1ZiwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN0YXJ0OyBpKyspCisJCWJ1ZltpXSA9IFBBVFRFUk5fRFNUIHwgKH5pICYgUEFUVEVSTl9DT1VOVF9NQVNLKTsKKwlmb3IgKCA7IGkgPCBzdGFydCArIGxlbjsgaSsrKQorCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8IFBBVFRFUk5fT1ZFUldSSVRFCisJCQl8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJZm9yICggOyBpIDwgdGVzdF9idWZfc2l6ZTsgaSsrKQorCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYXRlc3RfbWlzbWF0Y2godTggYWN0dWFsLCB1OCBwYXR0ZXJuLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCXVuc2lnbmVkIGludCBjb3VudGVyLCBib29sIGlzX3NyY2J1ZikKK3sKKwl1OAkJZGlmZiA9IGFjdHVhbCBeIHBhdHRlcm47CisJdTgJCWV4cGVjdGVkID0gcGF0dGVybiB8ICh+Y291bnRlciAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJY29uc3QgY2hhcgkqdGhyZWFkX25hbWUgPSBjdXJyZW50LT5jb21tOworCisJaWYgKGlzX3NyY2J1ZikKKwkJcHJfd2FybmluZygiJXM6IHNyY2J1ZlsweCV4XSBvdmVyd3JpdHRlbiEiCisJCQkJIiBFeHBlY3RlZCAlMDJ4LCBnb3QgJTAyeFxuIiwKKwkJCQl0aHJlYWRfbmFtZSwgaW5kZXgsIGV4cGVjdGVkLCBhY3R1YWwpOworCWVsc2UgaWYgKChwYXR0ZXJuICYgUEFUVEVSTl9DT1BZKQorCQkJJiYgKGRpZmYgJiAoUEFUVEVSTl9DT1BZIHwgUEFUVEVSTl9PVkVSV1JJVEUpKSkKKwkJcHJfd2FybmluZygiJXM6IGRzdGJ1ZlsweCV4XSBub3QgY29waWVkISIKKwkJCQkiIEV4cGVjdGVkICUwMngsIGdvdCAlMDJ4XG4iLAorCQkJCXRocmVhZF9uYW1lLCBpbmRleCwgZXhwZWN0ZWQsIGFjdHVhbCk7CisJZWxzZSBpZiAoZGlmZiAmIFBBVFRFUk5fU1JDKQorCQlwcl93YXJuaW5nKCIlczogZHN0YnVmWzB4JXhdIHdhcyBjb3BpZWQhIgorCQkJCSIgRXhwZWN0ZWQgJTAyeCwgZ290ICUwMnhcbiIsCisJCQkJdGhyZWFkX25hbWUsIGluZGV4LCBleHBlY3RlZCwgYWN0dWFsKTsKKwllbHNlCisJCXByX3dhcm5pbmcoIiVzOiBkc3RidWZbMHgleF0gbWlzbWF0Y2ghIgorCQkJCSIgRXhwZWN0ZWQgJTAyeCwgZ290ICUwMnhcbiIsCisJCQkJdGhyZWFkX25hbWUsIGluZGV4LCBleHBlY3RlZCwgYWN0dWFsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkbWF0ZXN0X3ZlcmlmeSh1OCAqYnVmLCB1bnNpZ25lZCBpbnQgc3RhcnQsCisJCXVuc2lnbmVkIGludCBlbmQsIHVuc2lnbmVkIGludCBjb3VudGVyLCB1OCBwYXR0ZXJuLAorCQlib29sIGlzX3NyY2J1ZikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgZXJyb3JfY291bnQgPSAwOworCXU4IGFjdHVhbDsKKworCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKKwkJYWN0dWFsID0gYnVmW2ldOworCQlpZiAoYWN0dWFsICE9IChwYXR0ZXJuIHwgKH5jb3VudGVyICYgUEFUVEVSTl9DT1VOVF9NQVNLKSkpIHsKKwkJCWlmIChlcnJvcl9jb3VudCA8IDMyKQorCQkJCWRtYXRlc3RfbWlzbWF0Y2goYWN0dWFsLCBwYXR0ZXJuLCBpLCBjb3VudGVyLAorCQkJCQkJaXNfc3JjYnVmKTsKKwkJCWVycm9yX2NvdW50Kys7CisJCX0KKwkJY291bnRlcisrOworCX0KKworCWlmIChlcnJvcl9jb3VudCA+IDMyKQorCQlwcl93YXJuaW5nKCIlczogJXUgZXJyb3JzIHN1cHByZXNzZWRcbiIsCisJCQljdXJyZW50LT5jb21tLCBlcnJvcl9jb3VudCAtIDMyKTsKKworCXJldHVybiBlcnJvcl9jb3VudDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSB0ZXN0cyBETUEgdHJhbnNmZXJzIG9mIHZhcmlvdXMgbGVuZ3RocyBhbmQKKyAqIG9mZnNldHMgdW50aWwgaXQgaXMgdG9sZCB0byBleGl0IGJ5IGt0aHJlYWRfc3RvcCgpLiBUaGVyZSBtYXkgYmUKKyAqIG11bHRpcGxlIHRocmVhZHMgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGluIHBhcmFsbGVsIGZvciBhIHNpbmdsZQorICogY2hhbm5lbCwgYW5kIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBjaGFubmVscyBiZWluZyB0ZXN0ZWQgaW4KKyAqIHBhcmFsbGVsLgorICoKKyAqIEJlZm9yZSBlYWNoIHRlc3QsIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGJ1ZmZlciBpcyBpbml0aWFsaXplZAorICogd2l0aCBhIGtub3duIHBhdHRlcm4uIFRoaXMgcGF0dGVybiBpcyBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uCisgKiB3aGV0aGVyIGl0J3MgaW4gYW4gYXJlYSB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBjb3BpZWQgb3IKKyAqIG92ZXJ3cml0dGVuLCBhbmQgZGlmZmVyZW50IGluIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGJ1ZmZlcnMuCisgKiBTbyBpZiB0aGUgRE1BIGVuZ2luZSBkb2Vzbid0IGNvcHkgZXhhY3RseSB3aGF0IHdlIHRlbGwgaXQgdG8gY29weSwKKyAqIHdlJ2xsIG5vdGljZS4KKyAqLworc3RhdGljIGludCBkbWF0ZXN0X2Z1bmModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZG1hdGVzdF90aHJlYWQJKnRocmVhZCA9IGRhdGE7CisJc3RydWN0IGRtYV9jaGFuCQkqY2hhbjsKKwljb25zdCBjaGFyCQkqdGhyZWFkX25hbWU7CisJdW5zaWduZWQgaW50CQlzcmNfb2ZmLCBkc3Rfb2ZmLCBsZW47CisJdW5zaWduZWQgaW50CQllcnJvcl9jb3VudDsKKwl1bnNpZ25lZCBpbnQJCWZhaWxlZF90ZXN0cyA9IDA7CisJdW5zaWduZWQgaW50CQl0b3RhbF90ZXN0cyA9IDA7CisJZG1hX2Nvb2tpZV90CQljb29raWU7CisJZW51bSBkbWFfc3RhdHVzCQlzdGF0dXM7CisJaW50CQkJcmV0OworCisJdGhyZWFkX25hbWUgPSBjdXJyZW50LT5jb21tOworCisJcmV0ID0gLUVOT01FTTsKKwl0aHJlYWQtPnNyY2J1ZiA9IGttYWxsb2ModGVzdF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0aHJlYWQtPnNyY2J1ZikKKwkJZ290byBlcnJfc3JjYnVmOworCXRocmVhZC0+ZHN0YnVmID0ga21hbGxvYyh0ZXN0X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRocmVhZC0+ZHN0YnVmKQorCQlnb3RvIGVycl9kc3RidWY7CisKKwlzbXBfcm1iKCk7CisJY2hhbiA9IHRocmVhZC0+Y2hhbjsKKwlkbWFfY2hhbl9nZXQoY2hhbik7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQl0b3RhbF90ZXN0cysrOworCisJCWxlbiA9IGRtYXRlc3RfcmFuZG9tKCkgJSB0ZXN0X2J1Zl9zaXplICsgMTsKKwkJc3JjX29mZiA9IGRtYXRlc3RfcmFuZG9tKCkgJSAodGVzdF9idWZfc2l6ZSAtIGxlbiArIDEpOworCQlkc3Rfb2ZmID0gZG1hdGVzdF9yYW5kb20oKSAlICh0ZXN0X2J1Zl9zaXplIC0gbGVuICsgMSk7CisKKwkJZG1hdGVzdF9pbml0X3NyY2J1Zih0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiwgbGVuKTsKKwkJZG1hdGVzdF9pbml0X2RzdGJ1Zih0aHJlYWQtPmRzdGJ1ZiwgZHN0X29mZiwgbGVuKTsKKworCQljb29raWUgPSBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19idWYoY2hhbiwKKwkJCQl0aHJlYWQtPmRzdGJ1ZiArIGRzdF9vZmYsCisJCQkJdGhyZWFkLT5zcmNidWYgKyBzcmNfb2ZmLAorCQkJCWxlbik7CisJCWlmIChkbWFfc3VibWl0X2Vycm9yKGNvb2tpZSkpIHsKKwkJCXByX3dhcm5pbmcoIiVzOiAjJXU6IHN1Ym1pdCBlcnJvciAlZCB3aXRoIHNyY19vZmY9MHgleCAiCisJCQkJCSJkc3Rfb2ZmPTB4JXggbGVuPTB4JXhcbiIsCisJCQkJCXRocmVhZF9uYW1lLCB0b3RhbF90ZXN0cyAtIDEsIGNvb2tpZSwKKwkJCQkJc3JjX29mZiwgZHN0X29mZiwgbGVuKTsKKwkJCW1zbGVlcCgxMDApOworCQkJZmFpbGVkX3Rlc3RzKys7CisJCQljb250aW51ZTsKKwkJfQorCQlkbWFfYXN5bmNfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbik7CisKKwkJZG8geworCQkJbXNsZWVwKDEpOworCQkJc3RhdHVzID0gZG1hX2FzeW5jX21lbWNweV9jb21wbGV0ZSgKKwkJCQkJY2hhbiwgY29va2llLCBOVUxMLCBOVUxMKTsKKwkJfSB3aGlsZSAoc3RhdHVzID09IERNQV9JTl9QUk9HUkVTUyk7CisKKwkJaWYgKHN0YXR1cyA9PSBETUFfRVJST1IpIHsKKwkJCXByX3dhcm5pbmcoIiVzOiAjJXU6IGVycm9yIGR1cmluZyBjb3B5XG4iLAorCQkJCQl0aHJlYWRfbmFtZSwgdG90YWxfdGVzdHMgLSAxKTsKKwkJCWZhaWxlZF90ZXN0cysrOworCQkJY29udGludWU7CisJCX0KKworCQllcnJvcl9jb3VudCA9IDA7CisKKwkJcHJfZGVidWcoIiVzOiB2ZXJpZnlpbmcgc291cmNlIGJ1ZmZlci4uLlxuIiwgdGhyZWFkX25hbWUpOworCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY2J1ZiwgMCwgc3JjX29mZiwKKwkJCQkwLCBQQVRURVJOX1NSQywgdHJ1ZSk7CisJCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+c3JjYnVmLCBzcmNfb2ZmLAorCQkJCXNyY19vZmYgKyBsZW4sIHNyY19vZmYsCisJCQkJUEFUVEVSTl9TUkMgfCBQQVRURVJOX0NPUFksIHRydWUpOworCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiArIGxlbiwKKwkJCQl0ZXN0X2J1Zl9zaXplLCBzcmNfb2ZmICsgbGVuLAorCQkJCVBBVFRFUk5fU1JDLCB0cnVlKTsKKworCQlwcl9kZWJ1ZygiJXM6IHZlcmlmeWluZyBkZXN0IGJ1ZmZlci4uLlxuIiwKKwkJCQl0aHJlYWQtPnRhc2stPmNvbW0pOworCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPmRzdGJ1ZiwgMCwgZHN0X29mZiwKKwkJCQkwLCBQQVRURVJOX0RTVCwgZmFsc2UpOworCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPmRzdGJ1ZiwgZHN0X29mZiwKKwkJCQlkc3Rfb2ZmICsgbGVuLCBzcmNfb2ZmLAorCQkJCVBBVFRFUk5fU1JDIHwgUEFUVEVSTl9DT1BZLCBmYWxzZSk7CisJCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0YnVmLCBkc3Rfb2ZmICsgbGVuLAorCQkJCXRlc3RfYnVmX3NpemUsIGRzdF9vZmYgKyBsZW4sCisJCQkJUEFUVEVSTl9EU1QsIGZhbHNlKTsKKworCQlpZiAoZXJyb3JfY291bnQpIHsKKwkJCXByX3dhcm5pbmcoIiVzOiAjJXU6ICV1IGVycm9ycyB3aXRoICIKKwkJCQkic3JjX29mZj0weCV4IGRzdF9vZmY9MHgleCBsZW49MHgleFxuIiwKKwkJCQl0aHJlYWRfbmFtZSwgdG90YWxfdGVzdHMgLSAxLCBlcnJvcl9jb3VudCwKKwkJCQlzcmNfb2ZmLCBkc3Rfb2ZmLCBsZW4pOworCQkJZmFpbGVkX3Rlc3RzKys7CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6ICMldTogTm8gZXJyb3JzIHdpdGggIgorCQkJCSJzcmNfb2ZmPTB4JXggZHN0X29mZj0weCV4IGxlbj0weCV4XG4iLAorCQkJCXRocmVhZF9uYW1lLCB0b3RhbF90ZXN0cyAtIDEsCisJCQkJc3JjX29mZiwgZHN0X29mZiwgbGVuKTsKKwkJfQorCX0KKworCXJldCA9IDA7CisJZG1hX2NoYW5fcHV0KGNoYW4pOworCWtmcmVlKHRocmVhZC0+ZHN0YnVmKTsKK2Vycl9kc3RidWY6CisJa2ZyZWUodGhyZWFkLT5zcmNidWYpOworZXJyX3NyY2J1ZjoKKwlwcl9ub3RpY2UoIiVzOiB0ZXJtaW5hdGluZyBhZnRlciAldSB0ZXN0cywgJXUgZmFpbHVyZXMgKHN0YXR1cyAlZClcbiIsCisJCQl0aHJlYWRfbmFtZSwgdG90YWxfdGVzdHMsIGZhaWxlZF90ZXN0cywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkbWF0ZXN0X2NsZWFudXBfY2hhbm5lbChzdHJ1Y3QgZG1hdGVzdF9jaGFuICpkdGMpCit7CisJc3RydWN0IGRtYXRlc3RfdGhyZWFkCSp0aHJlYWQ7CisJc3RydWN0IGRtYXRlc3RfdGhyZWFkCSpfdGhyZWFkOworCWludAkJCXJldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aHJlYWQsIF90aHJlYWQsICZkdGMtPnRocmVhZHMsIG5vZGUpIHsKKwkJcmV0ID0ga3RocmVhZF9zdG9wKHRocmVhZC0+dGFzayk7CisJCXByX2RlYnVnKCJkbWF0ZXN0OiB0aHJlYWQgJXMgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iLAorCQkJCXRocmVhZC0+dGFzay0+Y29tbSwgcmV0KTsKKwkJbGlzdF9kZWwoJnRocmVhZC0+bm9kZSk7CisJCWtmcmVlKHRocmVhZCk7CisJfQorCWtmcmVlKGR0Yyk7Cit9CisKK3N0YXRpYyBlbnVtIGRtYV9zdGF0ZV9jbGllbnQgZG1hdGVzdF9hZGRfY2hhbm5lbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGRtYXRlc3RfY2hhbgkqZHRjOworCXN0cnVjdCBkbWF0ZXN0X3RocmVhZAkqdGhyZWFkOworCXVuc2lnbmVkIGludAkJaTsKKworCWR0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWF0ZXN0X2NoYW4pLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWR0YykgeworCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBObyBtZW1vcnkgZm9yICVzXG4iLCBjaGFuLT5kZXYuYnVzX2lkKTsKKwkJcmV0dXJuIERNQV9OQUs7CisJfQorCisJZHRjLT5jaGFuID0gY2hhbjsKKwlJTklUX0xJU1RfSEVBRCgmZHRjLT50aHJlYWRzKTsKKworCWZvciAoaSA9IDA7IGkgPCB0aHJlYWRzX3Blcl9jaGFuOyBpKyspIHsKKwkJdGhyZWFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtYXRlc3RfdGhyZWFkKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGhyZWFkKSB7CisJCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBObyBtZW1vcnkgZm9yICVzLXRlc3QldVxuIiwKKwkJCQkJY2hhbi0+ZGV2LmJ1c19pZCwgaSk7CisJCQlicmVhazsKKwkJfQorCQl0aHJlYWQtPmNoYW4gPSBkdGMtPmNoYW47CisJCXNtcF93bWIoKTsKKwkJdGhyZWFkLT50YXNrID0ga3RocmVhZF9ydW4oZG1hdGVzdF9mdW5jLCB0aHJlYWQsICIlcy10ZXN0JXUiLAorCQkJCWNoYW4tPmRldi5idXNfaWQsIGkpOworCQlpZiAoSVNfRVJSKHRocmVhZC0+dGFzaykpIHsKKwkJCXByX3dhcm5pbmcoImRtYXRlc3Q6IEZhaWxlZCB0byBydW4gdGhyZWFkICVzLXRlc3QldVxuIiwKKwkJCQkJY2hhbi0+ZGV2LmJ1c19pZCwgaSk7CisJCQlrZnJlZSh0aHJlYWQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzcmNidWYgYW5kIGRzdGJ1ZiBhcmUgYWxsb2NhdGVkIGJ5IHRoZSB0aHJlYWQgaXRzZWxmICovCisKKwkJbGlzdF9hZGRfdGFpbCgmdGhyZWFkLT5ub2RlLCAmZHRjLT50aHJlYWRzKTsKKwl9CisKKwlwcl9pbmZvKCJkbWF0ZXN0OiBTdGFydGVkICV1IHRocmVhZHMgdXNpbmcgJXNcbiIsIGksIGNoYW4tPmRldi5idXNfaWQpOworCisJbGlzdF9hZGRfdGFpbCgmZHRjLT5ub2RlLCAmZG1hdGVzdF9jaGFubmVscyk7CisJbnJfY2hhbm5lbHMrKzsKKworCXJldHVybiBETUFfQUNLOworfQorCitzdGF0aWMgZW51bSBkbWFfc3RhdGVfY2xpZW50IGRtYXRlc3RfcmVtb3ZlX2NoYW5uZWwoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBkbWF0ZXN0X2NoYW4JKmR0YywgKl9kdGM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHRjLCBfZHRjLCAmZG1hdGVzdF9jaGFubmVscywgbm9kZSkgeworCQlpZiAoZHRjLT5jaGFuID09IGNoYW4pIHsKKwkJCWxpc3RfZGVsKCZkdGMtPm5vZGUpOworCQkJZG1hdGVzdF9jbGVhbnVwX2NoYW5uZWwoZHRjKTsKKwkJCXByX2RlYnVnKCJkbWF0ZXN0OiBsb3N0IGNoYW5uZWwgJXNcbiIsCisJCQkJCWNoYW4tPmRldi5idXNfaWQpOworCQkJcmV0dXJuIERNQV9BQ0s7CisJCX0KKwl9CisKKwlyZXR1cm4gRE1BX0RVUDsKK30KKworLyoKKyAqIFN0YXJ0IHRlc3RpbmcgdGhyZWFkcyBhcyBuZXcgY2hhbm5lbHMgYXJlIGFzc2lnbmVkIHRvIHVzLCBhbmQga2lsbAorICogdGhlbSB3aGVuIHRoZSBjaGFubmVscyBnbyBhd2F5LgorICoKKyAqIFdoZW4gd2UgdW5yZWdpc3RlciB0aGUgY2xpZW50LCBhbGwgY2hhbm5lbHMgYXJlIHJlbW92ZWQgc28gdGhpcworICogd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBjbGVhbmluZyB0aGluZ3MgdXAgd2hlbiB0aGUgbW9kdWxlIGlzCisgKiB1bmxvYWRlZC4KKyAqLworc3RhdGljIGVudW0gZG1hX3N0YXRlX2NsaWVudAorZG1hdGVzdF9ldmVudChzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCWVudW0gZG1hX3N0YXRlIHN0YXRlKQoreworCWVudW0gZG1hX3N0YXRlX2NsaWVudAlhY2sgPSBETUFfTkFLOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRE1BX1JFU09VUkNFX0FWQUlMQUJMRToKKwkJaWYgKCFkbWF0ZXN0X21hdGNoX2NoYW5uZWwoY2hhbikKKwkJCQl8fCAhZG1hdGVzdF9tYXRjaF9kZXZpY2UoY2hhbi0+ZGV2aWNlKSkKKwkJCWFjayA9IERNQV9EVVA7CisJCWVsc2UgaWYgKG1heF9jaGFubmVscyAmJiBucl9jaGFubmVscyA+PSBtYXhfY2hhbm5lbHMpCisJCQlhY2sgPSBETUFfTkFLOworCQllbHNlCisJCQlhY2sgPSBkbWF0ZXN0X2FkZF9jaGFubmVsKGNoYW4pOworCQlicmVhazsKKworCWNhc2UgRE1BX1JFU09VUkNFX1JFTU9WRUQ6CisJCWFjayA9IGRtYXRlc3RfcmVtb3ZlX2NoYW5uZWwoY2hhbik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJfaW5mbygiZG1hdGVzdDogVW5oYW5kbGVkIGV2ZW50ICV1ICglcylcbiIsCisJCQkJc3RhdGUsIGNoYW4tPmRldi5idXNfaWQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYWNrOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9jbGllbnQgZG1hdGVzdF9jbGllbnQgPSB7CisJLmV2ZW50X2NhbGxiYWNrCT0gZG1hdGVzdF9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRtYXRlc3RfaW5pdCh2b2lkKQoreworCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGRtYXRlc3RfY2xpZW50LmNhcF9tYXNrKTsKKwlkbWFfYXN5bmNfY2xpZW50X3JlZ2lzdGVyKCZkbWF0ZXN0X2NsaWVudCk7CisJZG1hX2FzeW5jX2NsaWVudF9jaGFuX3JlcXVlc3QoJmRtYXRlc3RfY2xpZW50KTsKKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoZG1hdGVzdF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGRtYXRlc3RfZXhpdCh2b2lkKQoreworCWRtYV9hc3luY19jbGllbnRfdW5yZWdpc3RlcigmZG1hdGVzdF9jbGllbnQpOworfQorbW9kdWxlX2V4aXQoZG1hdGVzdF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMgYi9kcml2ZXJzL2RtYS9kd19kbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkZjkxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwpAQCAtMCwwICsxLDExMjIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIERNQSBDb250cm9sbGVyIChha2EgRE1BQ0Egb24KKyAqIEFWUjMyIHN5c3RlbXMuKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImR3X2RtYWNfcmVncy5oIgorCisvKgorICogVGhpcyBzdXBwb3J0cyB0aGUgU3lub3BzeXMgIkRlc2lnbldhcmUgQUhCIENlbnRyYWwgRE1BIENvbnRyb2xsZXIiLAorICogKERXX2FoYl9kbWFjKSB3aGljaCBpcyB1c2VkIHdpdGggdmFyaW91cyBBTUJBIDIuMCBzeXN0ZW1zIChub3QgYWxsCisgKiBvZiB3aGljaCB1c2UgQVJNIGFueSBtb3JlKS4gIFNlZSB0aGUgIkRhdGFib29rIiBmcm9tIFN5bm9wc3lzIGZvcgorICogaW5mb3JtYXRpb24gYmV5b25kIHdoYXQgbGljZW5zZWVzIHByb2JhYmx5IHByb3ZpZGUuCisgKgorICogVGhlIGRyaXZlciBoYXMgY3VycmVudGx5IGJlZW4gdGVzdGVkIG9ubHkgd2l0aCB0aGUgQXRtZWwgQVQzMkFQNzAwMCwKKyAqIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgZGVzY3JpcHRvciB3cml0ZWJhY2suCisgKi8KKworLyogTk9URTogIERNUytTTVMgaXMgc3lzdGVtLXNwZWNpZmljLiBXZSBzaG91bGQgZ2V0IHRoaXMgaW5mb3JtYXRpb24KKyAqIGZyb20gdGhlIHBsYXRmb3JtIGNvZGUgc29tZWhvdy4KKyAqLworI2RlZmluZSBEV0NfREVGQVVMVF9DVExMTwkoRFdDX0NUTExfRFNUX01TSVpFKDApCQlcCisJCQkJfCBEV0NfQ1RMTF9TUkNfTVNJWkUoMCkJCVwKKwkJCQl8IERXQ19DVExMX0RNUygwKQkJXAorCQkJCXwgRFdDX0NUTExfU01TKDEpCQlcCisJCQkJfCBEV0NfQ1RMTF9MTFBfRF9FTgkJXAorCQkJCXwgRFdDX0NUTExfTExQX1NfRU4pCisKKy8qCisgKiBUaGlzIGlzIGNvbmZpZ3VyYXRpb24tZGVwZW5kZW50IGFuZCB1c3VhbGx5IGEgZnVubnkgc2l6ZSBsaWtlIDQwOTUuCisgKiBMZXQncyByb3VuZCBpdCBkb3duIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mIHR3by4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBhIHRyYW5zZmVyIGNvdW50LCBpLmUuIGlmIHdlIHRyYW5zZmVyIDMyLWJpdAorICogd29yZHMsIHdlIGNhbiBkbyA4MTkyIGJ5dGVzIHBlciBkZXNjcmlwdG9yLgorICoKKyAqIFRoaXMgcGFyYW1ldGVyIGlzIGFsc28gc3lzdGVtLXNwZWNpZmljLgorICovCisjZGVmaW5lIERXQ19NQVhfQ09VTlQJMjA0OFUKKworLyoKKyAqIE51bWJlciBvZiBkZXNjcmlwdG9ycyB0byBhbGxvY2F0ZSBmb3IgZWFjaCBjaGFubmVsLiBUaGlzIHNob3VsZCBiZQorICogbWFkZSBjb25maWd1cmFibGUgc29tZWhvdzsgcHJlZmVyYWJseSwgdGhlIGNsaWVudHMgKGF0IGxlYXN0IHRoZQorICogb25lcyB1c2luZyBzbGF2ZSB0cmFuc2ZlcnMpIHNob3VsZCBiZSBhYmxlIHRvIGdpdmUgdXMgYSBoaW50LgorICovCisjZGVmaW5lIE5SX0RFU0NTX1BFUl9DSEFOTkVMCTY0CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBCZWNhdXNlIHdlJ3JlIG5vdCByZWx5aW5nIG9uIHdyaXRlYmFjayBmcm9tIHRoZSBjb250cm9sbGVyIChpdCBtYXkgbm90CisgKiBldmVuIGJlIGNvbmZpZ3VyZWQgaW50byB0aGUgY29yZSEpIHdlIGRvbid0IG5lZWQgdG8gdXNlIGRtYV9wb29sLiAgVGhlc2UKKyAqIGRlc2NyaXB0b3JzIC0tIGFuZCBhc3NvY2lhdGVkIGRhdGEgLS0gYXJlIGNhY2hlYWJsZS4gIFdlIGRvIG5lZWQgdG8gbWFrZQorICogc3VyZSB0aGVpciBkY2FjaGUgZW50cmllcyBhcmUgd3JpdHRlbiBiYWNrIGJlZm9yZSBoYW5kaW5nIHRoZW0gb2ZmIHRvCisgKiB0aGUgY29udHJvbGxlciwgdGhvdWdoLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgZHdfZGVzYyAqZHdjX2ZpcnN0X2FjdGl2ZShzdHJ1Y3QgZHdfZG1hX2NoYW4gKmR3YykKK3sKKwlyZXR1cm4gbGlzdF9lbnRyeShkd2MtPmFjdGl2ZV9saXN0Lm5leHQsIHN0cnVjdCBkd19kZXNjLCBkZXNjX25vZGUpOworfQorCitzdGF0aWMgc3RydWN0IGR3X2Rlc2MgKmR3Y19maXJzdF9xdWV1ZWQoc3RydWN0IGR3X2RtYV9jaGFuICpkd2MpCit7CisJcmV0dXJuIGxpc3RfZW50cnkoZHdjLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgZHdfZGVzYywgZGVzY19ub2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBkd19kZXNjICpkd2NfZGVzY19nZXQoc3RydWN0IGR3X2RtYV9jaGFuICpkd2MpCit7CisJc3RydWN0IGR3X2Rlc2MgKmRlc2MsICpfZGVzYzsKKwlzdHJ1Y3QgZHdfZGVzYyAqcmV0ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmR3Yy0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmZHdjLT5mcmVlX2xpc3QsIGRlc2Nfbm9kZSkgeworCQlpZiAoYXN5bmNfdHhfdGVzdF9hY2soJmRlc2MtPnR4ZCkpIHsKKwkJCWxpc3RfZGVsKCZkZXNjLT5kZXNjX25vZGUpOworCQkJcmV0ID0gZGVzYzsKKwkJCWJyZWFrOworCQl9CisJCWRldl9kYmcoJmR3Yy0+Y2hhbi5kZXYsICJkZXNjICVwIG5vdCBBQ0tlZFxuIiwgZGVzYyk7CisJCWkrKzsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisKKwlkZXZfdmRiZygmZHdjLT5jaGFuLmRldiwgInNjYW5uZWQgJXUgZGVzY3JpcHRvcnMgb24gZnJlZWxpc3RcbiIsIGkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHdjX3N5bmNfZGVzY19mb3JfY3B1KHN0cnVjdCBkd19kbWFfY2hhbiAqZHdjLCBzdHJ1Y3QgZHdfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgZHdfZGVzYwkqY2hpbGQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZGVzYy0+dHhkLnR4X2xpc3QsIGRlc2Nfbm9kZSkKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZHdjLT5jaGFuLmRldi5wYXJlbnQsCisJCQkJY2hpbGQtPnR4ZC5waHlzLCBzaXplb2YoY2hpbGQtPmxsaSksCisJCQkJRE1BX1RPX0RFVklDRSk7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZHdjLT5jaGFuLmRldi5wYXJlbnQsCisJCQlkZXNjLT50eGQucGh5cywgc2l6ZW9mKGRlc2MtPmxsaSksCisJCQlETUFfVE9fREVWSUNFKTsKK30KKworLyoKKyAqIE1vdmUgYSBkZXNjcmlwdG9yLCBpbmNsdWRpbmcgYW55IGNoaWxkcmVuLCB0byB0aGUgZnJlZSBsaXN0LgorICogYGRlc2MnIG11c3Qgbm90IGJlIG9uIGFueSBsaXN0cy4KKyAqLworc3RhdGljIHZvaWQgZHdjX2Rlc2NfcHV0KHN0cnVjdCBkd19kbWFfY2hhbiAqZHdjLCBzdHJ1Y3QgZHdfZGVzYyAqZGVzYykKK3sKKwlpZiAoZGVzYykgeworCQlzdHJ1Y3QgZHdfZGVzYyAqY2hpbGQ7CisKKwkJZHdjX3N5bmNfZGVzY19mb3JfY3B1KGR3YywgZGVzYyk7CisKKwkJc3Bpbl9sb2NrX2JoKCZkd2MtPmxvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZGVzYy0+dHhkLnR4X2xpc3QsIGRlc2Nfbm9kZSkKKwkJCWRldl92ZGJnKCZkd2MtPmNoYW4uZGV2LAorCQkJCQkibW92aW5nIGNoaWxkIGRlc2MgJXAgdG8gZnJlZWxpc3RcbiIsCisJCQkJCWNoaWxkKTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmZGVzYy0+dHhkLnR4X2xpc3QsICZkd2MtPmZyZWVfbGlzdCk7CisJCWRldl92ZGJnKCZkd2MtPmNoYW4uZGV2LCAibW92aW5nIGRlc2MgJXAgdG8gZnJlZWxpc3RcbiIsIGRlc2MpOworCQlsaXN0X2FkZCgmZGVzYy0+ZGVzY19ub2RlLCAmZHdjLT5mcmVlX2xpc3QpOworCQlzcGluX3VubG9ja19iaCgmZHdjLT5sb2NrKTsKKwl9Cit9CisKKy8qIENhbGxlZCB3aXRoIGR3Yy0+bG9jayBoZWxkIGFuZCBiaCBkaXNhYmxlZCAqLworc3RhdGljIGRtYV9jb29raWVfdAorZHdjX2Fzc2lnbl9jb29raWUoc3RydWN0IGR3X2RtYV9jaGFuICpkd2MsIHN0cnVjdCBkd19kZXNjICpkZXNjKQoreworCWRtYV9jb29raWVfdCBjb29raWUgPSBkd2MtPmNoYW4uY29va2llOworCisJaWYgKCsrY29va2llIDwgMCkKKwkJY29va2llID0gMTsKKworCWR3Yy0+Y2hhbi5jb29raWUgPSBjb29raWU7CisJZGVzYy0+dHhkLmNvb2tpZSA9IGNvb2tpZTsKKworCXJldHVybiBjb29raWU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIENhbGxlZCB3aXRoIGR3Yy0+bG9jayBoZWxkIGFuZCBiaCBkaXNhYmxlZCAqLworc3RhdGljIHZvaWQgZHdjX2Rvc3RhcnQoc3RydWN0IGR3X2RtYV9jaGFuICpkd2MsIHN0cnVjdCBkd19kZXNjICpmaXJzdCkKK3sKKwlzdHJ1Y3QgZHdfZG1hCSpkdyA9IHRvX2R3X2RtYShkd2MtPmNoYW4uZGV2aWNlKTsKKworCS8qIEFTU0VSVDogIGNoYW5uZWwgaXMgaWRsZSAqLworCWlmIChkbWFfcmVhZGwoZHcsIENIX0VOKSAmIGR3Yy0+bWFzaykgeworCQlkZXZfZXJyKCZkd2MtPmNoYW4uZGV2LAorCQkJIkJVRzogQXR0ZW1wdGVkIHRvIHN0YXJ0IG5vbi1pZGxlIGNoYW5uZWxcbiIpOworCQlkZXZfZXJyKCZkd2MtPmNoYW4uZGV2LAorCQkJIiAgU0FSOiAweCV4IERBUjogMHgleCBMTFA6IDB4JXggQ1RMOiAweCV4OiUwOHhcbiIsCisJCQljaGFubmVsX3JlYWRsKGR3YywgU0FSKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBEQVIpLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIExMUCksCisJCQljaGFubmVsX3JlYWRsKGR3YywgQ1RMX0hJKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBDVExfTE8pKTsKKworCQkvKiBUaGUgdGFza2xldCB3aWxsIGhvcGVmdWxseSBhZHZhbmNlIHRoZSBxdWV1ZS4uLiAqLworCQlyZXR1cm47CisJfQorCisJY2hhbm5lbF93cml0ZWwoZHdjLCBMTFAsIGZpcnN0LT50eGQucGh5cyk7CisJY2hhbm5lbF93cml0ZWwoZHdjLCBDVExfTE8sCisJCQlEV0NfQ1RMTF9MTFBfRF9FTiB8IERXQ19DVExMX0xMUF9TX0VOKTsKKwljaGFubmVsX3dyaXRlbChkd2MsIENUTF9ISSwgMCk7CisJY2hhbm5lbF9zZXRfYml0KGR3LCBDSF9FTiwgZHdjLT5tYXNrKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK2R3Y19kZXNjcmlwdG9yX2NvbXBsZXRlKHN0cnVjdCBkd19kbWFfY2hhbiAqZHdjLCBzdHJ1Y3QgZHdfZGVzYyAqZGVzYykKK3sKKwlkbWFfYXN5bmNfdHhfY2FsbGJhY2sJCWNhbGxiYWNrOworCXZvaWQJCQkJKnBhcmFtOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkqdHhkID0gJmRlc2MtPnR4ZDsKKworCWRldl92ZGJnKCZkd2MtPmNoYW4uZGV2LCAiZGVzY3JpcHRvciAldSBjb21wbGV0ZVxuIiwgdHhkLT5jb29raWUpOworCisJZHdjLT5jb21wbGV0ZWQgPSB0eGQtPmNvb2tpZTsKKwljYWxsYmFjayA9IHR4ZC0+Y2FsbGJhY2s7CisJcGFyYW0gPSB0eGQtPmNhbGxiYWNrX3BhcmFtOworCisJZHdjX3N5bmNfZGVzY19mb3JfY3B1KGR3YywgZGVzYyk7CisJbGlzdF9zcGxpY2VfaW5pdCgmdHhkLT50eF9saXN0LCAmZHdjLT5mcmVlX2xpc3QpOworCWxpc3RfbW92ZSgmZGVzYy0+ZGVzY19ub2RlLCAmZHdjLT5mcmVlX2xpc3QpOworCisJLyoKKwkgKiBXZSB1c2UgZG1hX3VubWFwX3BhZ2UoKSByZWdhcmRsZXNzIG9mIGhvdyB0aGUgYnVmZmVycyB3ZXJlCisJICogbWFwcGVkIGJlZm9yZSB0aGV5IHdlcmUgc3VibWl0dGVkLi4uCisJICovCisJaWYgKCEodHhkLT5mbGFncyAmIERNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVApKQorCQlkbWFfdW5tYXBfcGFnZShkd2MtPmNoYW4uZGV2LnBhcmVudCwgZGVzYy0+bGxpLmRhciwgZGVzYy0+bGVuLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisJaWYgKCEodHhkLT5mbGFncyAmIERNQV9DT01QTF9TS0lQX1NSQ19VTk1BUCkpCisJCWRtYV91bm1hcF9wYWdlKGR3Yy0+Y2hhbi5kZXYucGFyZW50LCBkZXNjLT5sbGkuc2FyLCBkZXNjLT5sZW4sCisJCQkJRE1BX1RPX0RFVklDRSk7CisKKwkvKgorCSAqIFRoZSBBUEkgcmVxdWlyZXMgdGhhdCBubyBzdWJtaXNzaW9ucyBhcmUgZG9uZSBmcm9tIGEKKwkgKiBjYWxsYmFjaywgc28gd2UgZG9uJ3QgbmVlZCB0byBkcm9wIHRoZSBsb2NrIGhlcmUKKwkgKi8KKwlpZiAoY2FsbGJhY2spCisJCWNhbGxiYWNrKHBhcmFtKTsKK30KKworc3RhdGljIHZvaWQgZHdjX2NvbXBsZXRlX2FsbChzdHJ1Y3QgZHdfZG1hICpkdywgc3RydWN0IGR3X2RtYV9jaGFuICpkd2MpCit7CisJc3RydWN0IGR3X2Rlc2MgKmRlc2MsICpfZGVzYzsKKwlMSVNUX0hFQUQobGlzdCk7CisKKwlpZiAoZG1hX3JlYWRsKGR3LCBDSF9FTikgJiBkd2MtPm1hc2spIHsKKwkJZGV2X2VycigmZHdjLT5jaGFuLmRldiwKKwkJCSJCVUc6IFhGRVIgYml0IHNldCwgYnV0IGNoYW5uZWwgbm90IGlkbGUhXG4iKTsKKworCQkvKiBUcnkgdG8gY29udGludWUgYWZ0ZXIgcmVzZXR0aW5nIHRoZSBjaGFubmVsLi4uICovCisJCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBDSF9FTiwgZHdjLT5tYXNrKTsKKwkJd2hpbGUgKGRtYV9yZWFkbChkdywgQ0hfRU4pICYgZHdjLT5tYXNrKQorCQkJY3B1X3JlbGF4KCk7CisJfQorCisJLyoKKwkgKiBTdWJtaXQgcXVldWVkIGRlc2NyaXB0b3JzIEFTQVAsIGkuZS4gYmVmb3JlIHdlIGdvIHRocm91Z2gKKwkgKiB0aGUgY29tcGxldGVkIG9uZXMuCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZkd2MtPnF1ZXVlKSkKKwkJZHdjX2Rvc3RhcnQoZHdjLCBkd2NfZmlyc3RfcXVldWVkKGR3YykpOworCWxpc3Rfc3BsaWNlX2luaXQoJmR3Yy0+YWN0aXZlX2xpc3QsICZsaXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZkd2MtPnF1ZXVlLCAmZHdjLT5hY3RpdmVfbGlzdCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZsaXN0LCBkZXNjX25vZGUpCisJCWR3Y19kZXNjcmlwdG9yX2NvbXBsZXRlKGR3YywgZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3Y19zY2FuX2Rlc2NyaXB0b3JzKHN0cnVjdCBkd19kbWEgKmR3LCBzdHJ1Y3QgZHdfZG1hX2NoYW4gKmR3YykKK3sKKwlkbWFfYWRkcl90IGxscDsKKwlzdHJ1Y3QgZHdfZGVzYyAqZGVzYywgKl9kZXNjOworCXN0cnVjdCBkd19kZXNjICpjaGlsZDsKKwl1MzIgc3RhdHVzX3hmZXI7CisKKwkvKgorCSAqIENsZWFyIGJsb2NrIGludGVycnVwdCBmbGFnIGJlZm9yZSBzY2FubmluZyBzbyB0aGF0IHdlIGRvbid0CisJICogbWlzcyBhbnksIGFuZCByZWFkIExMUCBiZWZvcmUgUkFXX1hGRVIgdG8gZW5zdXJlIGl0IGlzCisJICogdmFsaWQgaWYgd2UgZGVjaWRlIHRvIHNjYW4gdGhlIGxpc3QuCisJICovCisJZG1hX3dyaXRlbChkdywgQ0xFQVIuQkxPQ0ssIGR3Yy0+bWFzayk7CisJbGxwID0gY2hhbm5lbF9yZWFkbChkd2MsIExMUCk7CisJc3RhdHVzX3hmZXIgPSBkbWFfcmVhZGwoZHcsIFJBVy5YRkVSKTsKKworCWlmIChzdGF0dXNfeGZlciAmIGR3Yy0+bWFzaykgeworCQkvKiBFdmVyeXRoaW5nIHdlJ3ZlIHN1Ym1pdHRlZCBpcyBkb25lICovCisJCWRtYV93cml0ZWwoZHcsIENMRUFSLlhGRVIsIGR3Yy0+bWFzayk7CisJCWR3Y19jb21wbGV0ZV9hbGwoZHcsIGR3Yyk7CisJCXJldHVybjsKKwl9CisKKwlkZXZfdmRiZygmZHdjLT5jaGFuLmRldiwgInNjYW5fZGVzY3JpcHRvcnM6IGxscD0weCV4XG4iLCBsbHApOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmZHdjLT5hY3RpdmVfbGlzdCwgZGVzY19ub2RlKSB7CisJCWlmIChkZXNjLT5sbGkubGxwID09IGxscCkKKwkJCS8qIFRoaXMgb25lIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLworCQkJcmV0dXJuOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZkZXNjLT50eGQudHhfbGlzdCwgZGVzY19ub2RlKQorCQkJaWYgKGNoaWxkLT5sbGkubGxwID09IGxscCkKKwkJCQkvKiBDdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi8KKwkJCQlyZXR1cm47CisKKwkJLyoKKwkJICogTm8gZGVzY3JpcHRvcnMgc28gZmFyIHNlZW0gdG8gYmUgaW4gcHJvZ3Jlc3MsIGkuZS4KKwkJICogdGhpcyBvbmUgbXVzdCBiZSBkb25lLgorCQkgKi8KKwkJZHdjX2Rlc2NyaXB0b3JfY29tcGxldGUoZHdjLCBkZXNjKTsKKwl9CisKKwlkZXZfZXJyKCZkd2MtPmNoYW4uZGV2LAorCQkiQlVHOiBBbGwgZGVzY3JpcHRvcnMgZG9uZSwgYnV0IGNoYW5uZWwgbm90IGlkbGUhXG4iKTsKKworCS8qIFRyeSB0byBjb250aW51ZSBhZnRlciByZXNldHRpbmcgdGhlIGNoYW5uZWwuLi4gKi8KKwljaGFubmVsX2NsZWFyX2JpdChkdywgQ0hfRU4sIGR3Yy0+bWFzayk7CisJd2hpbGUgKGRtYV9yZWFkbChkdywgQ0hfRU4pICYgZHdjLT5tYXNrKQorCQljcHVfcmVsYXgoKTsKKworCWlmICghbGlzdF9lbXB0eSgmZHdjLT5xdWV1ZSkpIHsKKwkJZHdjX2Rvc3RhcnQoZHdjLCBkd2NfZmlyc3RfcXVldWVkKGR3YykpOworCQlsaXN0X3NwbGljZV9pbml0KCZkd2MtPnF1ZXVlLCAmZHdjLT5hY3RpdmVfbGlzdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkd2NfZHVtcF9sbGkoc3RydWN0IGR3X2RtYV9jaGFuICpkd2MsIHN0cnVjdCBkd19sbGkgKmxsaSkKK3sKKwlkZXZfcHJpbnRrKEtFUk5fQ1JJVCwgJmR3Yy0+Y2hhbi5kZXYsCisJCQkiICBkZXNjOiBzMHgleCBkMHgleCBsMHgleCBjMHgleDoleFxuIiwKKwkJCWxsaS0+c2FyLCBsbGktPmRhciwgbGxpLT5sbHAsCisJCQlsbGktPmN0bGhpLCBsbGktPmN0bGxvKTsKK30KKworc3RhdGljIHZvaWQgZHdjX2hhbmRsZV9lcnJvcihzdHJ1Y3QgZHdfZG1hICpkdywgc3RydWN0IGR3X2RtYV9jaGFuICpkd2MpCit7CisJc3RydWN0IGR3X2Rlc2MgKmJhZF9kZXNjOworCXN0cnVjdCBkd19kZXNjICpjaGlsZDsKKworCWR3Y19zY2FuX2Rlc2NyaXB0b3JzKGR3LCBkd2MpOworCisJLyoKKwkgKiBUaGUgZGVzY3JpcHRvciBjdXJyZW50bHkgYXQgdGhlIGhlYWQgb2YgdGhlIGFjdGl2ZSBsaXN0IGlzCisJICogYm9ya2VkLiBTaW5jZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gcmVwb3J0IGVycm9ycywgd2UnbGwKKwkgKiBqdXN0IGhhdmUgdG8gc2NyZWFtIGxvdWRseSBhbmQgdHJ5IHRvIGNhcnJ5IG9uLgorCSAqLworCWJhZF9kZXNjID0gZHdjX2ZpcnN0X2FjdGl2ZShkd2MpOworCWxpc3RfZGVsX2luaXQoJmJhZF9kZXNjLT5kZXNjX25vZGUpOworCWxpc3Rfc3BsaWNlX2luaXQoJmR3Yy0+cXVldWUsIGR3Yy0+YWN0aXZlX2xpc3QucHJldik7CisKKwkvKiBDbGVhciB0aGUgZXJyb3IgZmxhZyBhbmQgdHJ5IHRvIHJlc3RhcnQgdGhlIGNvbnRyb2xsZXIgKi8KKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5FUlJPUiwgZHdjLT5tYXNrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmR3Yy0+YWN0aXZlX2xpc3QpKQorCQlkd2NfZG9zdGFydChkd2MsIGR3Y19maXJzdF9hY3RpdmUoZHdjKSk7CisKKwkvKgorCSAqIEtFUk5fQ1JJVElDQUwgbWF5IHNlZW0gaGFyc2gsIGJ1dCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucworCSAqIHdoZW4gc29tZW9uZSBzdWJtaXRzIGEgYmFkIHBoeXNpY2FsIGFkZHJlc3MgaW4gYQorCSAqIGRlc2NyaXB0b3IsIHdlIHNob3VsZCBjb25zaWRlciBvdXJzZWx2ZXMgbHVja3kgdGhhdCB0aGUKKwkgKiBjb250cm9sbGVyIGZsYWdnZWQgYW4gZXJyb3IgaW5zdGVhZCBvZiBzY3JpYmJsaW5nIG92ZXIKKwkgKiByYW5kb20gbWVtb3J5IGxvY2F0aW9ucy4KKwkgKi8KKwlkZXZfcHJpbnRrKEtFUk5fQ1JJVCwgJmR3Yy0+Y2hhbi5kZXYsCisJCQkiQmFkIGRlc2NyaXB0b3Igc3VibWl0dGVkIGZvciBETUEhXG4iKTsKKwlkZXZfcHJpbnRrKEtFUk5fQ1JJVCwgJmR3Yy0+Y2hhbi5kZXYsCisJCQkiICBjb29raWU6ICVkXG4iLCBiYWRfZGVzYy0+dHhkLmNvb2tpZSk7CisJZHdjX2R1bXBfbGxpKGR3YywgJmJhZF9kZXNjLT5sbGkpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZiYWRfZGVzYy0+dHhkLnR4X2xpc3QsIGRlc2Nfbm9kZSkKKwkJZHdjX2R1bXBfbGxpKGR3YywgJmNoaWxkLT5sbGkpOworCisJLyogUHJldGVuZCB0aGUgZGVzY3JpcHRvciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovCisJZHdjX2Rlc2NyaXB0b3JfY29tcGxldGUoZHdjLCBiYWRfZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X2RtYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZHdfZG1hICpkdyA9IChzdHJ1Y3QgZHdfZG1hICopZGF0YTsKKwlzdHJ1Y3QgZHdfZG1hX2NoYW4gKmR3YzsKKwl1MzIgc3RhdHVzX2Jsb2NrOworCXUzMiBzdGF0dXNfeGZlcjsKKwl1MzIgc3RhdHVzX2VycjsKKwlpbnQgaTsKKworCXN0YXR1c19ibG9jayA9IGRtYV9yZWFkbChkdywgUkFXLkJMT0NLKTsKKwlzdGF0dXNfeGZlciA9IGRtYV9yZWFkbChkdywgUkFXLkJMT0NLKTsKKwlzdGF0dXNfZXJyID0gZG1hX3JlYWRsKGR3LCBSQVcuRVJST1IpOworCisJZGV2X3ZkYmcoZHctPmRtYS5kZXYsICJ0YXNrbGV0OiBzdGF0dXNfYmxvY2s9JXggc3RhdHVzX2Vycj0leFxuIiwKKwkJCXN0YXR1c19ibG9jaywgc3RhdHVzX2Vycik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHctPmRtYS5jaGFuY250OyBpKyspIHsKKwkJZHdjID0gJmR3LT5jaGFuW2ldOworCQlzcGluX2xvY2soJmR3Yy0+bG9jayk7CisJCWlmIChzdGF0dXNfZXJyICYgKDEgPDwgaSkpCisJCQlkd2NfaGFuZGxlX2Vycm9yKGR3LCBkd2MpOworCQllbHNlIGlmICgoc3RhdHVzX2Jsb2NrIHwgc3RhdHVzX3hmZXIpICYgKDEgPDwgaSkpCisJCQlkd2Nfc2Nhbl9kZXNjcmlwdG9ycyhkdywgZHdjKTsKKwkJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7CisJfQorCisJLyoKKwkgKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gQmxvY2sgQ29tcGxldGUgaW50ZXJydXB0cyBhcmUgb25seQorCSAqIGVuYWJsZWQgaWYgdGhlIElOVF9FTiBiaXQgaW4gdGhlIGRlc2NyaXB0b3IgaXMgc2V0LiBUaGlzCisJICogd2lsbCB0cmlnZ2VyIGEgc2NhbiBiZWZvcmUgdGhlIHdob2xlIGxpc3QgaXMgZG9uZS4KKwkgKi8KKwljaGFubmVsX3NldF9iaXQoZHcsIE1BU0suWEZFUiwgZHctPmFsbF9jaGFuX21hc2spOworCWNoYW5uZWxfc2V0X2JpdChkdywgTUFTSy5CTE9DSywgZHctPmFsbF9jaGFuX21hc2spOworCWNoYW5uZWxfc2V0X2JpdChkdywgTUFTSy5FUlJPUiwgZHctPmFsbF9jaGFuX21hc2spOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZHdfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGR3X2RtYSAqZHcgPSBkZXZfaWQ7CisJdTMyIHN0YXR1czsKKworCWRldl92ZGJnKGR3LT5kbWEuZGV2LCAiaW50ZXJydXB0OiBzdGF0dXM9MHgleFxuIiwKKwkJCWRtYV9yZWFkbChkdywgU1RBVFVTX0lOVCkpOworCisJLyoKKwkgKiBKdXN0IGRpc2FibGUgdGhlIGludGVycnVwdHMuIFdlJ2xsIHR1cm4gdGhlbSBiYWNrIG9uIGluIHRoZQorCSAqIHNvZnRpcnEgaGFuZGxlci4KKwkgKi8KKwljaGFubmVsX2NsZWFyX2JpdChkdywgTUFTSy5YRkVSLCBkdy0+YWxsX2NoYW5fbWFzayk7CisJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIE1BU0suQkxPQ0ssIGR3LT5hbGxfY2hhbl9tYXNrKTsKKwljaGFubmVsX2NsZWFyX2JpdChkdywgTUFTSy5FUlJPUiwgZHctPmFsbF9jaGFuX21hc2spOworCisJc3RhdHVzID0gZG1hX3JlYWRsKGR3LCBTVEFUVVNfSU5UKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoZHctPmRtYS5kZXYsCisJCQkiQlVHOiBVbmV4cGVjdGVkIGludGVycnVwdHMgcGVuZGluZzogMHgleFxuIiwKKwkJCXN0YXR1cyk7CisKKwkJLyogVHJ5IHRvIHJlY292ZXIgKi8KKwkJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIE1BU0suWEZFUiwgKDEgPDwgOCkgLSAxKTsKKwkJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIE1BU0suQkxPQ0ssICgxIDw8IDgpIC0gMSk7CisJCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBNQVNLLlNSQ19UUkFOLCAoMSA8PCA4KSAtIDEpOworCQljaGFubmVsX2NsZWFyX2JpdChkdywgTUFTSy5EU1RfVFJBTiwgKDEgPDwgOCkgLSAxKTsKKwkJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIE1BU0suRVJST1IsICgxIDw8IDgpIC0gMSk7CisJfQorCisJdGFza2xldF9zY2hlZHVsZSgmZHctPnRhc2tsZXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgZG1hX2Nvb2tpZV90IGR3Y190eF9zdWJtaXQoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCkKK3sKKwlzdHJ1Y3QgZHdfZGVzYwkJKmRlc2MgPSB0eGRfdG9fZHdfZGVzYyh0eCk7CisJc3RydWN0IGR3X2RtYV9jaGFuCSpkd2MgPSB0b19kd19kbWFfY2hhbih0eC0+Y2hhbik7CisJZG1hX2Nvb2tpZV90CQljb29raWU7CisKKwlzcGluX2xvY2tfYmgoJmR3Yy0+bG9jayk7CisJY29va2llID0gZHdjX2Fzc2lnbl9jb29raWUoZHdjLCBkZXNjKTsKKworCS8qCisJICogUkVWSVNJVDogV2Ugc2hvdWxkIGF0dGVtcHQgdG8gY2hhaW4gYXMgbWFueSBkZXNjcmlwdG9ycyBhcworCSAqIHBvc3NpYmxlLCBwZXJoYXBzIGV2ZW4gYXBwZW5kaW5nIHRvIHRob3NlIGFscmVhZHkgc3VibWl0dGVkCisJICogZm9yIERNQS4gQnV0IHRoaXMgaXMgaGFyZCB0byBkbyBpbiBhIHJhY2UtZnJlZSBtYW5uZXIuCisJICovCisJaWYgKGxpc3RfZW1wdHkoJmR3Yy0+YWN0aXZlX2xpc3QpKSB7CisJCWRldl92ZGJnKCZ0eC0+Y2hhbi0+ZGV2LCAidHhfc3VibWl0OiBzdGFydGVkICV1XG4iLAorCQkJCWRlc2MtPnR4ZC5jb29raWUpOworCQlkd2NfZG9zdGFydChkd2MsIGRlc2MpOworCQlsaXN0X2FkZF90YWlsKCZkZXNjLT5kZXNjX25vZGUsICZkd2MtPmFjdGl2ZV9saXN0KTsKKwl9IGVsc2UgeworCQlkZXZfdmRiZygmdHgtPmNoYW4tPmRldiwgInR4X3N1Ym1pdDogcXVldWVkICV1XG4iLAorCQkJCWRlc2MtPnR4ZC5jb29raWUpOworCisJCWxpc3RfYWRkX3RhaWwoJmRlc2MtPmRlc2Nfbm9kZSwgJmR3Yy0+cXVldWUpOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZkd2MtPmxvY2spOworCisJcmV0dXJuIGNvb2tpZTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCitkd2NfcHJlcF9kbWFfbWVtY3B5KHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkZXN0LCBkbWFfYWRkcl90IHNyYywKKwkJc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZHdfZG1hX2NoYW4JKmR3YyA9IHRvX2R3X2RtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBkd19kZXNjCQkqZGVzYzsKKwlzdHJ1Y3QgZHdfZGVzYwkJKmZpcnN0OworCXN0cnVjdCBkd19kZXNjCQkqcHJldjsKKwlzaXplX3QJCQl4ZmVyX2NvdW50OworCXNpemVfdAkJCW9mZnNldDsKKwl1bnNpZ25lZCBpbnQJCXNyY193aWR0aDsKKwl1bnNpZ25lZCBpbnQJCWRzdF93aWR0aDsKKwl1MzIJCQljdGxsbzsKKworCWRldl92ZGJnKCZjaGFuLT5kZXYsICJwcmVwX2RtYV9tZW1jcHkgZDB4JXggczB4JXggbDB4JXp4IGYweCVseFxuIiwKKwkJCWRlc3QsIHNyYywgbGVuLCBmbGFncyk7CisKKwlpZiAodW5saWtlbHkoIWxlbikpIHsKKwkJZGV2X2RiZygmY2hhbi0+ZGV2LCAicHJlcF9kbWFfbWVtY3B5OiBsZW5ndGggaXMgemVybyFcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFdlIGNhbiBiZSBhIGxvdCBtb3JlIGNsZXZlciBoZXJlLCBidXQgdGhpcyBzaG91bGQgdGFrZSBjYXJlCisJICogb2YgdGhlIG1vc3QgY29tbW9uIG9wdGltaXphdGlvbi4KKwkgKi8KKwlpZiAoISgoc3JjIHwgZGVzdCAgfCBsZW4pICYgMykpCisJCXNyY193aWR0aCA9IGRzdF93aWR0aCA9IDI7CisJZWxzZSBpZiAoISgoc3JjIHwgZGVzdCB8IGxlbikgJiAxKSkKKwkJc3JjX3dpZHRoID0gZHN0X3dpZHRoID0gMTsKKwllbHNlCisJCXNyY193aWR0aCA9IGRzdF93aWR0aCA9IDA7CisKKwljdGxsbyA9IERXQ19ERUZBVUxUX0NUTExPCisJCQl8IERXQ19DVExMX0RTVF9XSURUSChkc3Rfd2lkdGgpCisJCQl8IERXQ19DVExMX1NSQ19XSURUSChzcmNfd2lkdGgpCisJCQl8IERXQ19DVExMX0RTVF9JTkMKKwkJCXwgRFdDX0NUTExfU1JDX0lOQworCQkJfCBEV0NfQ1RMTF9GQ19NMk07CisJcHJldiA9IGZpcnN0ID0gTlVMTDsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbGVuOyBvZmZzZXQgKz0geGZlcl9jb3VudCA8PCBzcmNfd2lkdGgpIHsKKwkJeGZlcl9jb3VudCA9IG1pbl90KHNpemVfdCwgKGxlbiAtIG9mZnNldCkgPj4gc3JjX3dpZHRoLAorCQkJCURXQ19NQVhfQ09VTlQpOworCisJCWRlc2MgPSBkd2NfZGVzY19nZXQoZHdjKTsKKwkJaWYgKCFkZXNjKQorCQkJZ290byBlcnJfZGVzY19nZXQ7CisKKwkJZGVzYy0+bGxpLnNhciA9IHNyYyArIG9mZnNldDsKKwkJZGVzYy0+bGxpLmRhciA9IGRlc3QgKyBvZmZzZXQ7CisJCWRlc2MtPmxsaS5jdGxsbyA9IGN0bGxvOworCQlkZXNjLT5sbGkuY3RsaGkgPSB4ZmVyX2NvdW50OworCisJCWlmICghZmlyc3QpIHsKKwkJCWZpcnN0ID0gZGVzYzsKKwkJfSBlbHNlIHsKKwkJCXByZXYtPmxsaS5sbHAgPSBkZXNjLT50eGQucGh5czsKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNoYW4tPmRldi5wYXJlbnQsCisJCQkJCXByZXYtPnR4ZC5waHlzLCBzaXplb2YocHJldi0+bGxpKSwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJCQlsaXN0X2FkZF90YWlsKCZkZXNjLT5kZXNjX25vZGUsCisJCQkJCSZmaXJzdC0+dHhkLnR4X2xpc3QpOworCQl9CisJCXByZXYgPSBkZXNjOworCX0KKworCisJaWYgKGZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBUKQorCQkvKiBUcmlnZ2VyIGludGVycnVwdCBhZnRlciBsYXN0IGJsb2NrICovCisJCXByZXYtPmxsaS5jdGxsbyB8PSBEV0NfQ1RMTF9JTlRfRU47CisKKwlwcmV2LT5sbGkubGxwID0gMDsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShjaGFuLT5kZXYucGFyZW50LAorCQkJcHJldi0+dHhkLnBoeXMsIHNpemVvZihwcmV2LT5sbGkpLAorCQkJRE1BX1RPX0RFVklDRSk7CisKKwlmaXJzdC0+dHhkLmZsYWdzID0gZmxhZ3M7CisJZmlyc3QtPmxlbiA9IGxlbjsKKworCXJldHVybiAmZmlyc3QtPnR4ZDsKKworZXJyX2Rlc2NfZ2V0OgorCWR3Y19kZXNjX3B1dChkd2MsIGZpcnN0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCitkd2NfcHJlcF9zbGF2ZV9zZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQl1bnNpZ25lZCBpbnQgc2dfbGVuLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGR3X2RtYV9jaGFuCSpkd2MgPSB0b19kd19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCSpkd3MgPSBkd2MtPmR3czsKKwlzdHJ1Y3QgZHdfZGVzYwkJKnByZXY7CisJc3RydWN0IGR3X2Rlc2MJCSpmaXJzdDsKKwl1MzIJCQljdGxsbzsKKwlkbWFfYWRkcl90CQlyZWc7CisJdW5zaWduZWQgaW50CQlyZWdfd2lkdGg7CisJdW5zaWduZWQgaW50CQltZW1fd2lkdGg7CisJdW5zaWduZWQgaW50CQlpOworCXN0cnVjdCBzY2F0dGVybGlzdAkqc2c7CisJc2l6ZV90CQkJdG90YWxfbGVuID0gMDsKKworCWRldl92ZGJnKCZjaGFuLT5kZXYsICJwcmVwX2RtYV9zbGF2ZVxuIik7CisKKwlpZiAodW5saWtlbHkoIWR3cyB8fCAhc2dfbGVuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZWdfd2lkdGggPSBkd3MtPnNsYXZlLnJlZ193aWR0aDsKKwlwcmV2ID0gZmlyc3QgPSBOVUxMOworCisJc2dfbGVuID0gZG1hX21hcF9zZyhjaGFuLT5kZXYucGFyZW50LCBzZ2wsIHNnX2xlbiwgZGlyZWN0aW9uKTsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQljdGxsbyA9IChEV0NfREVGQVVMVF9DVExMTworCQkJCXwgRFdDX0NUTExfRFNUX1dJRFRIKHJlZ193aWR0aCkKKwkJCQl8IERXQ19DVExMX0RTVF9GSVgKKwkJCQl8IERXQ19DVExMX1NSQ19JTkMKKwkJCQl8IERXQ19DVExMX0ZDX00yUCk7CisJCXJlZyA9IGR3cy0+c2xhdmUudHhfcmVnOworCQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19sZW4sIGkpIHsKKwkJCXN0cnVjdCBkd19kZXNjCSpkZXNjOworCQkJdTMyCQlsZW47CisJCQl1MzIJCW1lbTsKKworCQkJZGVzYyA9IGR3Y19kZXNjX2dldChkd2MpOworCQkJaWYgKCFkZXNjKSB7CisJCQkJZGV2X2VycigmY2hhbi0+ZGV2LAorCQkJCQkibm90IGVub3VnaCBkZXNjcmlwdG9ycyBhdmFpbGFibGVcbiIpOworCQkJCWdvdG8gZXJyX2Rlc2NfZ2V0OworCQkJfQorCisJCQltZW0gPSBzZ19waHlzKHNnKTsKKwkJCWxlbiA9IHNnX2RtYV9sZW4oc2cpOworCQkJbWVtX3dpZHRoID0gMjsKKwkJCWlmICh1bmxpa2VseShtZW0gJiAzIHx8IGxlbiAmIDMpKQorCQkJCW1lbV93aWR0aCA9IDA7CisKKwkJCWRlc2MtPmxsaS5zYXIgPSBtZW07CisJCQlkZXNjLT5sbGkuZGFyID0gcmVnOworCQkJZGVzYy0+bGxpLmN0bGxvID0gY3RsbG8gfCBEV0NfQ1RMTF9TUkNfV0lEVEgobWVtX3dpZHRoKTsKKwkJCWRlc2MtPmxsaS5jdGxoaSA9IGxlbiA+PiBtZW1fd2lkdGg7CisKKwkJCWlmICghZmlyc3QpIHsKKwkJCQlmaXJzdCA9IGRlc2M7CisJCQl9IGVsc2UgeworCQkJCXByZXYtPmxsaS5sbHAgPSBkZXNjLT50eGQucGh5czsKKwkJCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShjaGFuLT5kZXYucGFyZW50LAorCQkJCQkJcHJldi0+dHhkLnBoeXMsCisJCQkJCQlzaXplb2YocHJldi0+bGxpKSwKKwkJCQkJCURNQV9UT19ERVZJQ0UpOworCQkJCWxpc3RfYWRkX3RhaWwoJmRlc2MtPmRlc2Nfbm9kZSwKKwkJCQkJCSZmaXJzdC0+dHhkLnR4X2xpc3QpOworCQkJfQorCQkJcHJldiA9IGRlc2M7CisJCQl0b3RhbF9sZW4gKz0gbGVuOworCQl9CisJCWJyZWFrOworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQljdGxsbyA9IChEV0NfREVGQVVMVF9DVExMTworCQkJCXwgRFdDX0NUTExfU1JDX1dJRFRIKHJlZ193aWR0aCkKKwkJCQl8IERXQ19DVExMX0RTVF9JTkMKKwkJCQl8IERXQ19DVExMX1NSQ19GSVgKKwkJCQl8IERXQ19DVExMX0ZDX1AyTSk7CisKKwkJcmVnID0gZHdzLT5zbGF2ZS5yeF9yZWc7CisJCWZvcl9lYWNoX3NnKHNnbCwgc2csIHNnX2xlbiwgaSkgeworCQkJc3RydWN0IGR3X2Rlc2MJKmRlc2M7CisJCQl1MzIJCWxlbjsKKwkJCXUzMgkJbWVtOworCisJCQlkZXNjID0gZHdjX2Rlc2NfZ2V0KGR3Yyk7CisJCQlpZiAoIWRlc2MpIHsKKwkJCQlkZXZfZXJyKCZjaGFuLT5kZXYsCisJCQkJCSJub3QgZW5vdWdoIGRlc2NyaXB0b3JzIGF2YWlsYWJsZVxuIik7CisJCQkJZ290byBlcnJfZGVzY19nZXQ7CisJCQl9CisKKwkJCW1lbSA9IHNnX3BoeXMoc2cpOworCQkJbGVuID0gc2dfZG1hX2xlbihzZyk7CisJCQltZW1fd2lkdGggPSAyOworCQkJaWYgKHVubGlrZWx5KG1lbSAmIDMgfHwgbGVuICYgMykpCisJCQkJbWVtX3dpZHRoID0gMDsKKworCQkJZGVzYy0+bGxpLnNhciA9IHJlZzsKKwkJCWRlc2MtPmxsaS5kYXIgPSBtZW07CisJCQlkZXNjLT5sbGkuY3RsbG8gPSBjdGxsbyB8IERXQ19DVExMX0RTVF9XSURUSChtZW1fd2lkdGgpOworCQkJZGVzYy0+bGxpLmN0bGhpID0gbGVuID4+IHJlZ193aWR0aDsKKworCQkJaWYgKCFmaXJzdCkgeworCQkJCWZpcnN0ID0gZGVzYzsKKwkJCX0gZWxzZSB7CisJCQkJcHJldi0+bGxpLmxscCA9IGRlc2MtPnR4ZC5waHlzOworCQkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNoYW4tPmRldi5wYXJlbnQsCisJCQkJCQlwcmV2LT50eGQucGh5cywKKwkJCQkJCXNpemVvZihwcmV2LT5sbGkpLAorCQkJCQkJRE1BX1RPX0RFVklDRSk7CisJCQkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+ZGVzY19ub2RlLAorCQkJCQkJJmZpcnN0LT50eGQudHhfbGlzdCk7CisJCQl9CisJCQlwcmV2ID0gZGVzYzsKKwkJCXRvdGFsX2xlbiArPSBsZW47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBUKQorCQkvKiBUcmlnZ2VyIGludGVycnVwdCBhZnRlciBsYXN0IGJsb2NrICovCisJCXByZXYtPmxsaS5jdGxsbyB8PSBEV0NfQ1RMTF9JTlRfRU47CisKKwlwcmV2LT5sbGkubGxwID0gMDsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShjaGFuLT5kZXYucGFyZW50LAorCQkJcHJldi0+dHhkLnBoeXMsIHNpemVvZihwcmV2LT5sbGkpLAorCQkJRE1BX1RPX0RFVklDRSk7CisKKwlmaXJzdC0+bGVuID0gdG90YWxfbGVuOworCisJcmV0dXJuICZmaXJzdC0+dHhkOworCitlcnJfZGVzY19nZXQ6CisJZHdjX2Rlc2NfcHV0KGR3YywgZmlyc3QpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkd2NfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuCSpkd2MgPSB0b19kd19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZHdfZG1hCQkqZHcgPSB0b19kd19kbWEoY2hhbi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgZHdfZGVzYwkJKmRlc2MsICpfZGVzYzsKKwlMSVNUX0hFQUQobGlzdCk7CisKKwkvKgorCSAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBzb21ldGhpbmcgd2VudCB3cm9uZyBlbHNld2hlcmUsIHNvCisJICogd2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIGRhdGEuIEp1c3QgZGlzYWJsZSB0aGUKKwkgKiBjaGFubmVsLiBXZSBzdGlsbCBoYXZlIHRvIHBvbGwgdGhlIGNoYW5uZWwgZW5hYmxlIGJpdCBkdWUKKwkgKiB0byBBSEIvSFNCIGxpbWl0YXRpb25zLgorCSAqLworCXNwaW5fbG9ja19iaCgmZHdjLT5sb2NrKTsKKworCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBDSF9FTiwgZHdjLT5tYXNrKTsKKworCXdoaWxlIChkbWFfcmVhZGwoZHcsIENIX0VOKSAmIGR3Yy0+bWFzaykKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBhY3RpdmVfbGlzdCBlbnRyaWVzIHdpbGwgZW5kIHVwIGJlZm9yZSBxdWV1ZWQgZW50cmllcyAqLworCWxpc3Rfc3BsaWNlX2luaXQoJmR3Yy0+cXVldWUsICZsaXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZkd2MtPmFjdGl2ZV9saXN0LCAmbGlzdCk7CisKKwlzcGluX3VubG9ja19iaCgmZHdjLT5sb2NrKTsKKworCS8qIEZsdXNoIGFsbCBwZW5kaW5nIGFuZCBxdWV1ZWQgZGVzY3JpcHRvcnMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZsaXN0LCBkZXNjX25vZGUpCisJCWR3Y19kZXNjcmlwdG9yX2NvbXBsZXRlKGR3YywgZGVzYyk7Cit9CisKK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMKK2R3Y19pc190eF9jb21wbGV0ZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCWRtYV9jb29raWVfdCBjb29raWUsCisJCWRtYV9jb29raWVfdCAqZG9uZSwgZG1hX2Nvb2tpZV90ICp1c2VkKQoreworCXN0cnVjdCBkd19kbWFfY2hhbgkqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJZG1hX2Nvb2tpZV90CQlsYXN0X3VzZWQ7CisJZG1hX2Nvb2tpZV90CQlsYXN0X2NvbXBsZXRlOworCWludAkJCXJldDsKKworCWxhc3RfY29tcGxldGUgPSBkd2MtPmNvbXBsZXRlZDsKKwlsYXN0X3VzZWQgPSBjaGFuLT5jb29raWU7CisKKwlyZXQgPSBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQpOworCWlmIChyZXQgIT0gRE1BX1NVQ0NFU1MpIHsKKwkJZHdjX3NjYW5fZGVzY3JpcHRvcnModG9fZHdfZG1hKGNoYW4tPmRldmljZSksIGR3Yyk7CisKKwkJbGFzdF9jb21wbGV0ZSA9IGR3Yy0+Y29tcGxldGVkOworCQlsYXN0X3VzZWQgPSBjaGFuLT5jb29raWU7CisKKwkJcmV0ID0gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgbGFzdF9jb21wbGV0ZSwgbGFzdF91c2VkKTsKKwl9CisKKwlpZiAoZG9uZSkKKwkJKmRvbmUgPSBsYXN0X2NvbXBsZXRlOworCWlmICh1c2VkKQorCQkqdXNlZCA9IGxhc3RfdXNlZDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3Y19pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZHdfZG1hX2NoYW4JKmR3YyA9IHRvX2R3X2RtYV9jaGFuKGNoYW4pOworCisJc3Bpbl9sb2NrX2JoKCZkd2MtPmxvY2spOworCWlmICghbGlzdF9lbXB0eSgmZHdjLT5xdWV1ZSkpCisJCWR3Y19zY2FuX2Rlc2NyaXB0b3JzKHRvX2R3X2RtYShjaGFuLT5kZXZpY2UpLCBkd2MpOworCXNwaW5fdW5sb2NrX2JoKCZkd2MtPmxvY2spOworfQorCitzdGF0aWMgaW50IGR3Y19hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCXN0cnVjdCBkbWFfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGR3X2RtYV9jaGFuCSpkd2MgPSB0b19kd19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZHdfZG1hCQkqZHcgPSB0b19kd19kbWEoY2hhbi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgZHdfZGVzYwkJKmRlc2M7CisJc3RydWN0IGRtYV9zbGF2ZQkqc2xhdmU7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQkqZHdzOworCWludAkJCWk7CisJdTMyCQkJY2ZnaGk7CisJdTMyCQkJY2ZnbG87CisKKwlkZXZfdmRiZygmY2hhbi0+ZGV2LCAiYWxsb2NfY2hhbl9yZXNvdXJjZXNcbiIpOworCisJLyogQ2hhbm5lbHMgZG9pbmcgc2xhdmUgRE1BIGNhbiBvbmx5IGhhbmRsZSBvbmUgY2xpZW50LiAqLworCWlmIChkd2MtPmR3cyB8fCBjbGllbnQtPnNsYXZlKSB7CisJCWlmIChjaGFuLT5jbGllbnRfY291bnQpCisJCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIEFTU0VSVDogIGNoYW5uZWwgaXMgaWRsZSAqLworCWlmIChkbWFfcmVhZGwoZHcsIENIX0VOKSAmIGR3Yy0+bWFzaykgeworCQlkZXZfZGJnKCZjaGFuLT5kZXYsICJETUEgY2hhbm5lbCBub3QgaWRsZT9cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkd2MtPmNvbXBsZXRlZCA9IGNoYW4tPmNvb2tpZSA9IDE7CisKKwljZmdoaSA9IERXQ19DRkdIX0ZJRk9fTU9ERTsKKwljZmdsbyA9IDA7CisKKwlzbGF2ZSA9IGNsaWVudC0+c2xhdmU7CisJaWYgKHNsYXZlKSB7CisJCS8qCisJCSAqIFdlIG5lZWQgY29udHJvbGxlci1zcGVjaWZpYyBkYXRhIHRvIHNldCB1cCBzbGF2ZQorCQkgKiB0cmFuc2ZlcnMuCisJCSAqLworCQlCVUdfT04oIXNsYXZlLT5kbWFfZGV2IHx8IHNsYXZlLT5kbWFfZGV2ICE9IGR3LT5kbWEuZGV2KTsKKworCQlkd3MgPSBjb250YWluZXJfb2Yoc2xhdmUsIHN0cnVjdCBkd19kbWFfc2xhdmUsIHNsYXZlKTsKKworCQlkd2MtPmR3cyA9IGR3czsKKwkJY2ZnaGkgPSBkd3MtPmNmZ19oaTsKKwkJY2ZnbG8gPSBkd3MtPmNmZ19sbzsKKwl9IGVsc2UgeworCQlkd2MtPmR3cyA9IE5VTEw7CisJfQorCisJY2hhbm5lbF93cml0ZWwoZHdjLCBDRkdfTE8sIGNmZ2xvKTsKKwljaGFubmVsX3dyaXRlbChkd2MsIENGR19ISSwgY2ZnaGkpOworCisJLyoKKwkgKiBOT1RFOiBzb21lIGNvbnRyb2xsZXJzIG1heSBoYXZlIGFkZGl0aW9uYWwgZmVhdHVyZXMgdGhhdCB3ZQorCSAqIG5lZWQgdG8gaW5pdGlhbGl6ZSBoZXJlLCBsaWtlICJzY2F0dGVyLWdhdGhlciIgKHdoaWNoCisJICogZG9lc24ndCBtZWFuIHdoYXQgeW91IHRoaW5rIGl0IG1lYW5zKSwgYW5kIHN0YXR1cyB3cml0ZWJhY2suCisJICovCisKKwlzcGluX2xvY2tfYmgoJmR3Yy0+bG9jayk7CisJaSA9IGR3Yy0+ZGVzY3NfYWxsb2NhdGVkOworCXdoaWxlIChkd2MtPmRlc2NzX2FsbG9jYXRlZCA8IE5SX0RFU0NTX1BFUl9DSEFOTkVMKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkd2MtPmxvY2spOworCisJCWRlc2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHdfZGVzYyksIEdGUF9LRVJORUwpOworCQlpZiAoIWRlc2MpIHsKKwkJCWRldl9pbmZvKCZjaGFuLT5kZXYsCisJCQkJIm9ubHkgYWxsb2NhdGVkICVkIGRlc2NyaXB0b3JzXG4iLCBpKTsKKwkJCXNwaW5fbG9ja19iaCgmZHdjLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmZGVzYy0+dHhkLCBjaGFuKTsKKwkJZGVzYy0+dHhkLnR4X3N1Ym1pdCA9IGR3Y190eF9zdWJtaXQ7CisJCWRlc2MtPnR4ZC5mbGFncyA9IERNQV9DVFJMX0FDSzsKKwkJSU5JVF9MSVNUX0hFQUQoJmRlc2MtPnR4ZC50eF9saXN0KTsKKwkJZGVzYy0+dHhkLnBoeXMgPSBkbWFfbWFwX3NpbmdsZShjaGFuLT5kZXYucGFyZW50LCAmZGVzYy0+bGxpLAorCQkJCXNpemVvZihkZXNjLT5sbGkpLCBETUFfVE9fREVWSUNFKTsKKwkJZHdjX2Rlc2NfcHV0KGR3YywgZGVzYyk7CisKKwkJc3Bpbl9sb2NrX2JoKCZkd2MtPmxvY2spOworCQlpID0gKytkd2MtPmRlc2NzX2FsbG9jYXRlZDsKKwl9CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCWNoYW5uZWxfc2V0X2JpdChkdywgTUFTSy5YRkVSLCBkd2MtPm1hc2spOworCWNoYW5uZWxfc2V0X2JpdChkdywgTUFTSy5CTE9DSywgZHdjLT5tYXNrKTsKKwljaGFubmVsX3NldF9iaXQoZHcsIE1BU0suRVJST1IsIGR3Yy0+bWFzayk7CisKKwlzcGluX3VubG9ja19iaCgmZHdjLT5sb2NrKTsKKworCWRldl9kYmcoJmNoYW4tPmRldiwKKwkJImFsbG9jX2NoYW5fcmVzb3VyY2VzIGFsbG9jYXRlZCAlZCBkZXNjcmlwdG9yc1xuIiwgaSk7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgZHdjX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBkd19kbWFfY2hhbgkqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGR3X2RtYQkJKmR3ID0gdG9fZHdfZG1hKGNoYW4tPmRldmljZSk7CisJc3RydWN0IGR3X2Rlc2MJCSpkZXNjLCAqX2Rlc2M7CisJTElTVF9IRUFEKGxpc3QpOworCisJZGV2X2RiZygmY2hhbi0+ZGV2LCAiZnJlZV9jaGFuX3Jlc291cmNlcyAoZGVzY3MgYWxsb2NhdGVkPSV1KVxuIiwKKwkJCWR3Yy0+ZGVzY3NfYWxsb2NhdGVkKTsKKworCS8qIEFTU0VSVDogIGNoYW5uZWwgaXMgaWRsZSAqLworCUJVR19PTighbGlzdF9lbXB0eSgmZHdjLT5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZHdjLT5xdWV1ZSkpOworCUJVR19PTihkbWFfcmVhZGwodG9fZHdfZG1hKGNoYW4tPmRldmljZSksIENIX0VOKSAmIGR3Yy0+bWFzayk7CisKKwlzcGluX2xvY2tfYmgoJmR3Yy0+bG9jayk7CisJbGlzdF9zcGxpY2VfaW5pdCgmZHdjLT5mcmVlX2xpc3QsICZsaXN0KTsKKwlkd2MtPmRlc2NzX2FsbG9jYXRlZCA9IDA7CisJZHdjLT5kd3MgPSBOVUxMOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIE1BU0suWEZFUiwgZHdjLT5tYXNrKTsKKwljaGFubmVsX2NsZWFyX2JpdChkdywgTUFTSy5CTE9DSywgZHdjLT5tYXNrKTsKKwljaGFubmVsX2NsZWFyX2JpdChkdywgTUFTSy5FUlJPUiwgZHdjLT5tYXNrKTsKKworCXNwaW5fdW5sb2NrX2JoKCZkd2MtPmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmbGlzdCwgZGVzY19ub2RlKSB7CisJCWRldl92ZGJnKCZjaGFuLT5kZXYsICIgIGZyZWVpbmcgZGVzY3JpcHRvciAlcFxuIiwgZGVzYyk7CisJCWRtYV91bm1hcF9zaW5nbGUoY2hhbi0+ZGV2LnBhcmVudCwgZGVzYy0+dHhkLnBoeXMsCisJCQkJc2l6ZW9mKGRlc2MtPmxsaSksIERNQV9UT19ERVZJQ0UpOworCQlrZnJlZShkZXNjKTsKKwl9CisKKwlkZXZfdmRiZygmY2hhbi0+ZGV2LCAiZnJlZV9jaGFuX3Jlc291cmNlcyBkb25lXG4iKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZHdfZG1hX29mZihzdHJ1Y3QgZHdfZG1hICpkdykKK3sKKwlkbWFfd3JpdGVsKGR3LCBDRkcsIDApOworCisJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIE1BU0suWEZFUiwgZHctPmFsbF9jaGFuX21hc2spOworCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBNQVNLLkJMT0NLLCBkdy0+YWxsX2NoYW5fbWFzayk7CisJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIE1BU0suU1JDX1RSQU4sIGR3LT5hbGxfY2hhbl9tYXNrKTsKKwljaGFubmVsX2NsZWFyX2JpdChkdywgTUFTSy5EU1RfVFJBTiwgZHctPmFsbF9jaGFuX21hc2spOworCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBNQVNLLkVSUk9SLCBkdy0+YWxsX2NoYW5fbWFzayk7CisKKwl3aGlsZSAoZG1hX3JlYWRsKGR3LCBDRkcpICYgRFdfQ0ZHX0RNQV9FTikKKwkJY3B1X3JlbGF4KCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGR3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGR3X2RtYV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSppbzsKKwlzdHJ1Y3QgZHdfZG1hCQkqZHc7CisJc2l6ZV90CQkJc2l6ZTsKKwlpbnQJCQlpcnE7CisJaW50CQkJZXJyOworCWludAkJCWk7CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEgfHwgcGRhdGEtPm5yX2NoYW5uZWxzID4gRFdfRE1BX01BWF9OUl9DSEFOTkVMUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFpbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZHdfZG1hKTsKKwlzaXplICs9IHBkYXRhLT5ucl9jaGFubmVscyAqIHNpemVvZihzdHJ1Y3QgZHdfZG1hX2NoYW4pOworCWR3ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWR3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGlvLT5zdGFydCwgRFdfUkVHTEVOLCBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2tmcmVlOworCX0KKworCW1lbXNldChkdywgMCwgc2l6ZW9mICpkdyk7CisKKwlkdy0+cmVncyA9IGlvcmVtYXAoaW8tPnN0YXJ0LCBEV19SRUdMRU4pOworCWlmICghZHctPnJlZ3MpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsZWFzZV9yOworCX0KKworCWR3LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJoY2xrIik7CisJaWYgKElTX0VSUihkdy0+Y2xrKSkgeworCQllcnIgPSBQVFJfRVJSKGR3LT5jbGspOworCQlnb3RvIGVycl9jbGs7CisJfQorCWNsa19lbmFibGUoZHctPmNsayk7CisKKwkvKiBmb3JjZSBkbWEgb2ZmLCBqdXN0IGluIGNhc2UgKi8KKwlkd19kbWFfb2ZmKGR3KTsKKworCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgZHdfZG1hX2ludGVycnVwdCwgMCwgImR3X2RtYWMiLCBkdyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfaXJxOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHcpOworCisJdGFza2xldF9pbml0KCZkdy0+dGFza2xldCwgZHdfZG1hX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWR3KTsKKworCWR3LT5hbGxfY2hhbl9tYXNrID0gKDEgPDwgcGRhdGEtPm5yX2NoYW5uZWxzKSAtIDE7CisKKwlJTklUX0xJU1RfSEVBRCgmZHctPmRtYS5jaGFubmVscyk7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5ucl9jaGFubmVsczsgaSsrLCBkdy0+ZG1hLmNoYW5jbnQrKykgeworCQlzdHJ1Y3QgZHdfZG1hX2NoYW4JKmR3YyA9ICZkdy0+Y2hhbltpXTsKKworCQlkd2MtPmNoYW4uZGV2aWNlID0gJmR3LT5kbWE7CisJCWR3Yy0+Y2hhbi5jb29raWUgPSBkd2MtPmNvbXBsZXRlZCA9IDE7CisJCWR3Yy0+Y2hhbi5jaGFuX2lkID0gaTsKKwkJbGlzdF9hZGRfdGFpbCgmZHdjLT5jaGFuLmRldmljZV9ub2RlLCAmZHctPmRtYS5jaGFubmVscyk7CisKKwkJZHdjLT5jaF9yZWdzID0gJl9fZHdfcmVncyhkdyktPkNIQU5baV07CisJCXNwaW5fbG9ja19pbml0KCZkd2MtPmxvY2spOworCQlkd2MtPm1hc2sgPSAxIDw8IGk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJmR3Yy0+YWN0aXZlX2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmZHdjLT5xdWV1ZSk7CisJCUlOSVRfTElTVF9IRUFEKCZkd2MtPmZyZWVfbGlzdCk7CisKKwkJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCX0KKworCS8qIENsZWFyL2Rpc2FibGUgYWxsIGludGVycnVwdHMgb24gYWxsIGNoYW5uZWxzLiAqLworCWRtYV93cml0ZWwoZHcsIENMRUFSLlhGRVIsIGR3LT5hbGxfY2hhbl9tYXNrKTsKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5CTE9DSywgZHctPmFsbF9jaGFuX21hc2spOworCWRtYV93cml0ZWwoZHcsIENMRUFSLlNSQ19UUkFOLCBkdy0+YWxsX2NoYW5fbWFzayk7CisJZG1hX3dyaXRlbChkdywgQ0xFQVIuRFNUX1RSQU4sIGR3LT5hbGxfY2hhbl9tYXNrKTsKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5FUlJPUiwgZHctPmFsbF9jaGFuX21hc2spOworCisJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIE1BU0suWEZFUiwgZHctPmFsbF9jaGFuX21hc2spOworCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBNQVNLLkJMT0NLLCBkdy0+YWxsX2NoYW5fbWFzayk7CisJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIE1BU0suU1JDX1RSQU4sIGR3LT5hbGxfY2hhbl9tYXNrKTsKKwljaGFubmVsX2NsZWFyX2JpdChkdywgTUFTSy5EU1RfVFJBTiwgZHctPmFsbF9jaGFuX21hc2spOworCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBNQVNLLkVSUk9SLCBkdy0+YWxsX2NoYW5fbWFzayk7CisKKwlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBkdy0+ZG1hLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIGR3LT5kbWEuY2FwX21hc2spOworCWR3LT5kbWEuZGV2ID0gJnBkZXYtPmRldjsKKwlkdy0+ZG1hLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IGR3Y19hbGxvY19jaGFuX3Jlc291cmNlczsKKwlkdy0+ZG1hLmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0gZHdjX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisKKwlkdy0+ZG1hLmRldmljZV9wcmVwX2RtYV9tZW1jcHkgPSBkd2NfcHJlcF9kbWFfbWVtY3B5OworCisJZHctPmRtYS5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IGR3Y19wcmVwX3NsYXZlX3NnOworCWR3LT5kbWEuZGV2aWNlX3Rlcm1pbmF0ZV9hbGwgPSBkd2NfdGVybWluYXRlX2FsbDsKKworCWR3LT5kbWEuZGV2aWNlX2lzX3R4X2NvbXBsZXRlID0gZHdjX2lzX3R4X2NvbXBsZXRlOworCWR3LT5kbWEuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBkd2NfaXNzdWVfcGVuZGluZzsKKworCWRtYV93cml0ZWwoZHcsIENGRywgRFdfQ0ZHX0RNQV9FTik7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogRGVzaWduV2FyZSBETUEgQ29udHJvbGxlciwgJWQgY2hhbm5lbHNcbiIsCisJCQlwZGV2LT5kZXYuYnVzX2lkLCBkdy0+ZG1hLmNoYW5jbnQpOworCisJZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmZHctPmRtYSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2lycToKKwljbGtfZGlzYWJsZShkdy0+Y2xrKTsKKwljbGtfcHV0KGR3LT5jbGspOworZXJyX2NsazoKKwlpb3VubWFwKGR3LT5yZWdzKTsKKwlkdy0+cmVncyA9IE5VTEw7CitlcnJfcmVsZWFzZV9yOgorCXJlbGVhc2VfcmVzb3VyY2UoaW8pOworZXJyX2tmcmVlOgorCWtmcmVlKGR3KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBkd19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfZG1hCQkqZHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHdfZG1hX2NoYW4JKmR3YywgKl9kd2M7CisJc3RydWN0IHJlc291cmNlCQkqaW87CisKKwlkd19kbWFfb2ZmKGR3KTsKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmR3LT5kbWEpOworCisJZnJlZV9pcnEocGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwgZHcpOworCXRhc2tsZXRfa2lsbCgmZHctPnRhc2tsZXQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGR3YywgX2R3YywgJmR3LT5kbWEuY2hhbm5lbHMsCisJCQljaGFuLmRldmljZV9ub2RlKSB7CisJCWxpc3RfZGVsKCZkd2MtPmNoYW4uZGV2aWNlX25vZGUpOworCQljaGFubmVsX2NsZWFyX2JpdChkdywgQ0hfRU4sIGR3Yy0+bWFzayk7CisJfQorCisJY2xrX2Rpc2FibGUoZHctPmNsayk7CisJY2xrX3B1dChkdy0+Y2xrKTsKKworCWlvdW5tYXAoZHctPnJlZ3MpOworCWR3LT5yZWdzID0gTlVMTDsKKworCWlvID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaW8tPnN0YXJ0LCBEV19SRUdMRU4pOworCisJa2ZyZWUoZHcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR3X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGR3X2RtYQkqZHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWR3X2RtYV9vZmYocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworCWNsa19kaXNhYmxlKGR3LT5jbGspOworfQorCitzdGF0aWMgaW50IGR3X3N1c3BlbmRfbGF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgZHdfZG1hCSpkdyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHdfZG1hX29mZihwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJY2xrX2Rpc2FibGUoZHctPmNsayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfcmVzdW1lX2Vhcmx5KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGR3X2RtYQkqZHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNsa19lbmFibGUoZHctPmNsayk7CisJZG1hX3dyaXRlbChkdywgQ0ZHLCBEV19DRkdfRE1BX0VOKTsKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2V4aXRfcChkd19yZW1vdmUpLAorCS5zaHV0ZG93bgk9IGR3X3NodXRkb3duLAorCS5zdXNwZW5kX2xhdGUJPSBkd19zdXNwZW5kX2xhdGUsCisJLnJlc3VtZV9lYXJseQk9IGR3X3Jlc3VtZV9lYXJseSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJkd19kbWFjIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZHdfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmR3X2RyaXZlciwgZHdfcHJvYmUpOworfQorbW9kdWxlX2luaXQoZHdfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkd19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmR3X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkd19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTeW5vcHN5cyBEZXNpZ25XYXJlIERNQSBDb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSGFhdmFyZCBTa2lubmVtb2VuIDxoYWF2YXJkLnNraW5uZW1vZW5AYXRtZWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHdfZG1hY19yZWdzLmggYi9kcml2ZXJzL2RtYS9kd19kbWFjX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGZkZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hY19yZWdzLmgKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIEFIQiBETUEgQ29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgorCisjZGVmaW5lIERXX0RNQV9NQVhfTlJfQ0hBTk5FTFMJOAorCisvKgorICogUmVkZWZpbmUgdGhpcyBtYWNybyB0byBoYW5kbGUgZGlmZmVyZW5jZXMgYmV0d2VlbiAzMi0gYW5kIDY0LWJpdAorICogYWRkcmVzc2luZywgYmlnIHZzLiBsaXR0bGUgZW5kaWFuLCBldGMuCisgKi8KKyNkZWZpbmUgRFdfUkVHKG5hbWUpCQl1MzIgbmFtZTsgdTMyIF9fcGFkXyMjbmFtZQorCisvKiBIYXJkd2FyZSByZWdpc3RlciBkZWZpbml0aW9ucy4gKi8KK3N0cnVjdCBkd19kbWFfY2hhbl9yZWdzIHsKKwlEV19SRUcoU0FSKTsJCS8qIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCisJRFdfUkVHKERBUik7CQkvKiBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovCisJRFdfUkVHKExMUCk7CQkvKiBMaW5rZWQgTGlzdCBQb2ludGVyICovCisJdTMyCUNUTF9MTzsJCS8qIENvbnRyb2wgUmVnaXN0ZXIgTG93ICovCisJdTMyCUNUTF9ISTsJCS8qIENvbnRyb2wgUmVnaXN0ZXIgSGlnaCAqLworCURXX1JFRyhTU1RBVCk7CisJRFdfUkVHKERTVEFUKTsKKwlEV19SRUcoU1NUQVRBUik7CisJRFdfUkVHKERTVEFUQVIpOworCXUzMglDRkdfTE87CQkvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIExvdyAqLworCXUzMglDRkdfSEk7CQkvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIEhpZ2ggKi8KKwlEV19SRUcoU0dSKTsKKwlEV19SRUcoRFNSKTsKK307CisKK3N0cnVjdCBkd19kbWFfaXJxX3JlZ3MgeworCURXX1JFRyhYRkVSKTsKKwlEV19SRUcoQkxPQ0spOworCURXX1JFRyhTUkNfVFJBTik7CisJRFdfUkVHKERTVF9UUkFOKTsKKwlEV19SRUcoRVJST1IpOworfTsKKworc3RydWN0IGR3X2RtYV9yZWdzIHsKKwkvKiBwZXItY2hhbm5lbCByZWdpc3RlcnMgKi8KKwlzdHJ1Y3QgZHdfZG1hX2NoYW5fcmVncwlDSEFOW0RXX0RNQV9NQVhfTlJfQ0hBTk5FTFNdOworCisJLyogaXJxIGhhbmRsaW5nICovCisJc3RydWN0IGR3X2RtYV9pcnFfcmVncwlSQVc7CQkvKiByICovCisJc3RydWN0IGR3X2RtYV9pcnFfcmVncwlTVEFUVVM7CQkvKiByIChyYXcgJiBtYXNrKSAqLworCXN0cnVjdCBkd19kbWFfaXJxX3JlZ3MJTUFTSzsJCS8qIHJ3IChzZXQgPSBpcnEgZW5hYmxlZCkgKi8KKwlzdHJ1Y3QgZHdfZG1hX2lycV9yZWdzCUNMRUFSOwkJLyogdyAoYWNrLCBhZmZlY3RzICJyYXciKSAqLworCisJRFdfUkVHKFNUQVRVU19JTlQpOwkJCS8qIHIgKi8KKworCS8qIHNvZnR3YXJlIGhhbmRzaGFraW5nICovCisJRFdfUkVHKFJFUV9TUkMpOworCURXX1JFRyhSRVFfRFNUKTsKKwlEV19SRUcoU0dMX1JFUV9TUkMpOworCURXX1JFRyhTR0xfUkVRX0RTVCk7CisJRFdfUkVHKExBU1RfU1JDKTsKKwlEV19SRUcoTEFTVF9EU1QpOworCisJLyogbWlzY2VsbGFuZW91cyAqLworCURXX1JFRyhDRkcpOworCURXX1JFRyhDSF9FTik7CisJRFdfUkVHKElEKTsKKwlEV19SRUcoVEVTVCk7CisKKwkvKiBvcHRpb25hbCBlbmNvZGVkIHBhcmFtcywgMHgzYzguLjB4MyAqLworfTsKKworLyogQml0ZmllbGRzIGluIENUTF9MTyAqLworI2RlZmluZSBEV0NfQ1RMTF9JTlRfRU4JCSgxIDw8IDApCS8qIGlycXMgZW5hYmxlZD8gKi8KKyNkZWZpbmUgRFdDX0NUTExfRFNUX1dJRFRIKG4pCSgobik8PDEpCS8qIGJ5dGVzIHBlciBlbGVtZW50ICovCisjZGVmaW5lIERXQ19DVExMX1NSQ19XSURUSChuKQkoKG4pPDw0KQorI2RlZmluZSBEV0NfQ1RMTF9EU1RfSU5DCSgwPDw3KQkJLyogREFSIHVwZGF0ZS9ub3QgKi8KKyNkZWZpbmUgRFdDX0NUTExfRFNUX0RFQwkoMTw8NykKKyNkZWZpbmUgRFdDX0NUTExfRFNUX0ZJWAkoMjw8NykKKyNkZWZpbmUgRFdDX0NUTExfU1JDX0lOQwkoMDw8NykJCS8qIFNBUiB1cGRhdGUvbm90ICovCisjZGVmaW5lIERXQ19DVExMX1NSQ19ERUMJKDE8PDkpCisjZGVmaW5lIERXQ19DVExMX1NSQ19GSVgJKDI8PDkpCisjZGVmaW5lIERXQ19DVExMX0RTVF9NU0laRShuKQkoKG4pPDwxMSkJLyogYnVyc3QsICNlbGVtZW50cyAqLworI2RlZmluZSBEV0NfQ1RMTF9TUkNfTVNJWkUobikJKChuKTw8MTQpCisjZGVmaW5lIERXQ19DVExMX1NfR0FUSF9FTgkoMSA8PCAxNykJLyogc3JjIGdhdGhlciwgIUZJWCAqLworI2RlZmluZSBEV0NfQ1RMTF9EX1NDQVRfRU4JKDEgPDwgMTgpCS8qIGRzdCBzY2F0dGVyLCAhRklYICovCisjZGVmaW5lIERXQ19DVExMX0ZDX00yTQkJKDAgPDwgMjApCS8qIG1lbS10by1tZW0gKi8KKyNkZWZpbmUgRFdDX0NUTExfRkNfTTJQCQkoMSA8PCAyMCkJLyogbWVtLXRvLXBlcmlwaCAqLworI2RlZmluZSBEV0NfQ1RMTF9GQ19QMk0JCSgyIDw8IDIwKQkvKiBwZXJpcGgtdG8tbWVtICovCisjZGVmaW5lIERXQ19DVExMX0ZDX1AyUAkJKDMgPDwgMjApCS8qIHBlcmlwaC10by1wZXJpcGggKi8KKy8qIHBsdXMgNCB0cmFuc2ZlciB0eXBlcyBmb3IgcGVyaXBoZXJhbC1hcy1mbG93LWNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRFdDX0NUTExfRE1TKG4pCQkoKG4pPDwyMykJLyogZHN0IG1hc3RlciBzZWxlY3QgKi8KKyNkZWZpbmUgRFdDX0NUTExfU01TKG4pCQkoKG4pPDwyNSkJLyogc3JjIG1hc3RlciBzZWxlY3QgKi8KKyNkZWZpbmUgRFdDX0NUTExfTExQX0RfRU4JKDEgPDwgMjcpCS8qIGRlc3QgYmxvY2sgY2hhaW4gKi8KKyNkZWZpbmUgRFdDX0NUTExfTExQX1NfRU4JKDEgPDwgMjgpCS8qIHNyYyBibG9jayBjaGFpbiAqLworCisvKiBCaXRmaWVsZHMgaW4gQ1RMX0hJICovCisjZGVmaW5lIERXQ19DVExIX0RPTkUJCTB4MDAwMDEwMDAKKyNkZWZpbmUgRFdDX0NUTEhfQkxPQ0tfVFNfTUFTSwkweDAwMDAwZmZmCisKKy8qIEJpdGZpZWxkcyBpbiBDRkdfTE8uIFBsYXRmb3JtLWNvbmZpZ3VyYWJsZSBiaXRzIGFyZSBpbiA8bGludXgvZHdfZG1hYy5oPiAqLworI2RlZmluZSBEV0NfQ0ZHTF9DSF9TVVNQCSgxIDw8IDgpCS8qIHBhdXNlIHhmZXIgKi8KKyNkZWZpbmUgRFdDX0NGR0xfRklGT19FTVBUWQkoMSA8PCA5KQkvKiBwYXVzZSB4ZmVyICovCisjZGVmaW5lIERXQ19DRkdMX0hTX0RTVAkJKDEgPDwgMTApCS8qIGhhbmRzaGFrZSB3L2RzdCAqLworI2RlZmluZSBEV0NfQ0ZHTF9IU19TUkMJCSgxIDw8IDExKQkvKiBoYW5kc2hha2Ugdy9zcmMgKi8KKyNkZWZpbmUgRFdDX0NGR0xfTUFYX0JVUlNUKHgpCSgoeCkgPDwgMjApCisjZGVmaW5lIERXQ19DRkdMX1JFTE9BRF9TQVIJKDEgPDwgMzApCisjZGVmaW5lIERXQ19DRkdMX1JFTE9BRF9EQVIJKDEgPDwgMzEpCisKKy8qIEJpdGZpZWxkcyBpbiBDRkdfSEkuIFBsYXRmb3JtLWNvbmZpZ3VyYWJsZSBiaXRzIGFyZSBpbiA8bGludXgvZHdfZG1hYy5oPiAqLworI2RlZmluZSBEV0NfQ0ZHSF9EU19VUERfRU4JKDEgPDwgNSkKKyNkZWZpbmUgRFdDX0NGR0hfU1NfVVBEX0VOCSgxIDw8IDYpCisKKy8qIEJpdGZpZWxkcyBpbiBTR1IgKi8KKyNkZWZpbmUgRFdDX1NHUl9TR0koeCkJCSgoeCkgPDwgMCkKKyNkZWZpbmUgRFdDX1NHUl9TR0MoeCkJCSgoeCkgPDwgMjApCisKKy8qIEJpdGZpZWxkcyBpbiBEU1IgKi8KKyNkZWZpbmUgRFdDX0RTUl9EU0koeCkJCSgoeCkgPDwgMCkKKyNkZWZpbmUgRFdDX0RTUl9EU0MoeCkJCSgoeCkgPDwgMjApCisKKy8qIEJpdGZpZWxkcyBpbiBDRkcgKi8KKyNkZWZpbmUgRFdfQ0ZHX0RNQV9FTgkJKDEgPDwgMCkKKworI2RlZmluZSBEV19SRUdMRU4JCTB4NDAwCisKK3N0cnVjdCBkd19kbWFfY2hhbiB7CisJc3RydWN0IGRtYV9jaGFuCQljaGFuOworCXZvaWQgX19pb21lbQkJKmNoX3JlZ3M7CisJdTgJCQltYXNrOworCisJc3BpbmxvY2tfdAkJbG9jazsKKworCS8qIHRoZXNlIG90aGVyIGVsZW1lbnRzIGFyZSBhbGwgcHJvdGVjdGVkIGJ5IGxvY2sgKi8KKwlkbWFfY29va2llX3QJCWNvbXBsZXRlZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CisJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CisKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCSpkd3M7CisKKwl1bnNpZ25lZCBpbnQJCWRlc2NzX2FsbG9jYXRlZDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X2RtYV9jaGFuX3JlZ3MgX19pb21lbSAqCitfX2R3Y19yZWdzKHN0cnVjdCBkd19kbWFfY2hhbiAqZHdjKQoreworCXJldHVybiBkd2MtPmNoX3JlZ3M7Cit9CisKKyNkZWZpbmUgY2hhbm5lbF9yZWFkbChkd2MsIG5hbWUpIFwKKwlfX3Jhd19yZWFkbCgmKF9fZHdjX3JlZ3MoZHdjKS0+bmFtZSkpCisjZGVmaW5lIGNoYW5uZWxfd3JpdGVsKGR3YywgbmFtZSwgdmFsKSBcCisJX19yYXdfd3JpdGVsKCh2YWwpLCAmKF9fZHdjX3JlZ3MoZHdjKS0+bmFtZSkpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X2RtYV9jaGFuICp0b19kd19kbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZHdfZG1hX2NoYW4sIGNoYW4pOworfQorCisKK3N0cnVjdCBkd19kbWEgeworCXN0cnVjdCBkbWFfZGV2aWNlCWRtYTsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0YXNrbGV0OworCXN0cnVjdCBjbGsJCSpjbGs7CisKKwl1OAkJCWFsbF9jaGFuX21hc2s7CisKKwlzdHJ1Y3QgZHdfZG1hX2NoYW4JY2hhblswXTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X2RtYV9yZWdzIF9faW9tZW0gKl9fZHdfcmVncyhzdHJ1Y3QgZHdfZG1hICpkdykKK3sKKwlyZXR1cm4gZHctPnJlZ3M7Cit9CisKKyNkZWZpbmUgZG1hX3JlYWRsKGR3LCBuYW1lKSBcCisJX19yYXdfcmVhZGwoJihfX2R3X3JlZ3MoZHcpLT5uYW1lKSkKKyNkZWZpbmUgZG1hX3dyaXRlbChkdywgbmFtZSwgdmFsKSBcCisJX19yYXdfd3JpdGVsKCh2YWwpLCAmKF9fZHdfcmVncyhkdyktPm5hbWUpKQorCisjZGVmaW5lIGNoYW5uZWxfc2V0X2JpdChkdywgcmVnLCBtYXNrKSBcCisJZG1hX3dyaXRlbChkdywgcmVnLCAoKG1hc2spIDw8IDgpIHwgKG1hc2spKQorI2RlZmluZSBjaGFubmVsX2NsZWFyX2JpdChkdywgcmVnLCBtYXNrKSBcCisJZG1hX3dyaXRlbChkdywgcmVnLCAoKG1hc2spIDw8IDgpIHwgMCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHdfZG1hICp0b19kd19kbWEoc3RydWN0IGRtYV9kZXZpY2UgKmRkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZGV2LCBzdHJ1Y3QgZHdfZG1hLCBkbWEpOworfQorCisvKiBMTEkgPT0gTGlua2VkIExpc3QgSXRlbTsgYS5rLmEuIERNQSBibG9jayBkZXNjcmlwdG9yICovCitzdHJ1Y3QgZHdfbGxpIHsKKwkvKiB2YWx1ZXMgdGhhdCBhcmUgbm90IGNoYW5nZWQgYnkgaGFyZHdhcmUgKi8KKwlkbWFfYWRkcl90CXNhcjsKKwlkbWFfYWRkcl90CWRhcjsKKwlkbWFfYWRkcl90CWxscDsJCS8qIGNoYWluIHRvIG5leHQgbGxpICovCisJdTMyCQljdGxsbzsKKwkvKiB2YWx1ZXMgdGhhdCBtYXkgZ2V0IHdyaXR0ZW4gYmFjazogKi8KKwl1MzIJCWN0bGhpOworCS8qIHNzdGF0IGFuZCBkc3RhdCBjYW4gc25hcHNob3QgcGVyaXBoZXJhbCByZWdpc3RlciBzdGF0ZS4KKwkgKiBzaWxpY29uIGNvbmZpZyBtYXkgZGlzY2FyZCBlaXRoZXIgb3IgYm90aC4uLgorCSAqLworCXUzMgkJc3N0YXQ7CisJdTMyCQlkc3RhdDsKK307CisKK3N0cnVjdCBkd19kZXNjIHsKKwkvKiBGSVJTVCB2YWx1ZXMgdGhlIGhhcmR3YXJlIHVzZXMgKi8KKwlzdHJ1Y3QgZHdfbGxpCQkJbGxpOworCisJLyogVEhFTiB2YWx1ZXMgZm9yIGRyaXZlciBob3VzZWtlZXBpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQlkZXNjX25vZGU7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yCXR4ZDsKKwlzaXplX3QJCQkJbGVuOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHdfZGVzYyAqCit0eGRfdG9fZHdfZGVzYyhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHR4ZCwgc3RydWN0IGR3X2Rlc2MsIHR4ZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2xkbWEuYyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCmluZGV4IDA1NGVhYmYuLmMwMDU5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCkBAIC0zNjYsNyArMzY2LDggQEAKICAqCiAgKiBSZXR1cm4gLSBUaGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGFsbG9jYXRlZC4KICAqLwotc3RhdGljIGludCBmc2xfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3N0YXRpYyBpbnQgZnNsX2RtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJCXN0cnVjdCBkbWFfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKIAlMSVNUX0hFQUQodG1wX2xpc3QpOwpAQCAtODA5LDggKzgxMCw3IEBACiAJaWYgKCFzcmMpIHsKIAkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LAogCQkJCSJzZWxmdGVzdDogQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgdGVzdCFcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZGVzdCA9IHNyYyArIHRlc3Rfc2l6ZTsKQEAgLTgyMCw3ICs4MjAsNyBAQAogCiAJY2hhbiA9ICZmc2xfY2hhbi0+Y29tbW9uOwogCi0JaWYgKGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoY2hhbikgPCAxKSB7CisJaWYgKGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoY2hhbiwgTlVMTCkgPCAxKSB7CiAJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwKIAkJCQkic2VsZnRlc3Q6IENhbm5vdCBhbGxvYyByZXNvdXJjZXMgZm9yIERNQVxuIik7CiAJCWVyciA9IC1FTk9ERVY7CkBAIC04NDIsMTMgKzg0MiwxMyBAQAogCWlmIChmc2xfZG1hX2lzX2NvbXBsZXRlKGNoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0gRE1BX1NVQ0NFU1MpIHsKIAkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAic2VsZnRlc3Q6IFRpbWUgb3V0IVxuIik7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfcmVzb3VyY2VzOwogCX0KIAogCS8qIFRlc3QgZnJlZSBhbmQgcmUtYWxsb2MgY2hhbm5lbCByZXNvdXJjZXMgKi8KIAlmc2xfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoY2hhbik7CiAKLQlpZiAoZnNsX2RtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhjaGFuKSA8IDEpIHsKKwlpZiAoZnNsX2RtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhjaGFuLCBOVUxMKSA8IDEpIHsKIAkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LAogCQkJCSJzZWxmdGVzdDogQ2Fubm90IGFsbG9jIHJlc291cmNlcyBmb3IgRE1BXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKQEAgLTkyNyw4ICs5MjcsNyBAQAogCWlmICghbmV3X2ZzbF9jaGFuKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gZnJlZSBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgIgogCQkJCSJkbWEgY2hhbm5lbHMhXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnI7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCS8qIGdldCBkbWEgY2hhbm5lbCByZWdpc3RlciBiYXNlICovCkBAIC05MzYsNyArOTM1LDcgQEAKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiQ2FuJ3QgZ2V0ICVzIHByb3BlcnR5ICdyZWcnXG4iLAogCQkJCWRldi0+bm9kZS0+ZnVsbF9uYW1lKTsKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX25vX3JlZzsKIAl9CiAKIAluZXdfZnNsX2NoYW4tPmZlYXR1cmUgPSAqKHUzMiAqKW1hdGNoLT5kYXRhOwpAQCAtOTU4LDcgKzk1Nyw3IEBACiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiVGhlcmUgaXMgbm8gJWQgY2hhbm5lbCFcbiIsCiAJCQkJbmV3X2ZzbF9jaGFuLT5pZCk7CiAJCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9ub19jaGFuOwogCX0KIAlmZGV2LT5jaGFuW25ld19mc2xfY2hhbi0+aWRdID0gbmV3X2ZzbF9jaGFuOwogCXRhc2tsZXRfaW5pdCgmbmV3X2ZzbF9jaGFuLT50YXNrbGV0LCBkbWFfZG9fdGFza2xldCwKQEAgLTk5NywyMyArOTk2LDI2IEBACiAJCWlmIChlcnIpIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRE1BIGNoYW5uZWwgJXMgcmVxdWVzdF9pcnEgZXJyb3IgIgogCQkJCSJ3aXRoIHJldHVybiAlZFxuIiwgZGV2LT5ub2RlLT5mdWxsX25hbWUsIGVycik7Ci0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX25vX2lycTsKIAkJfQogCX0KIAogCWVyciA9IGZzbF9kbWFfc2VsZl90ZXN0KG5ld19mc2xfY2hhbik7CiAJaWYgKGVycikKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX3NlbGZfdGVzdDsKIAogCWRldl9pbmZvKCZkZXYtPmRldiwgIiMlZCAoJXMpLCBpcnEgJWRcbiIsIG5ld19mc2xfY2hhbi0+aWQsCiAJCQkJbWF0Y2gtPmNvbXBhdGlibGUsIG5ld19mc2xfY2hhbi0+aXJxKTsKIAogCXJldHVybiAwOwotZXJyOgotCWRtYV9oYWx0KG5ld19mc2xfY2hhbik7Ci0JaW91bm1hcChuZXdfZnNsX2NoYW4tPnJlZ19iYXNlKTsKKworZXJyX3NlbGZfdGVzdDoKIAlmcmVlX2lycShuZXdfZnNsX2NoYW4tPmlycSwgbmV3X2ZzbF9jaGFuKTsKK2Vycl9ub19pcnE6CiAJbGlzdF9kZWwoJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKK2Vycl9ub19jaGFuOgorCWlvdW5tYXAobmV3X2ZzbF9jaGFuLT5yZWdfYmFzZSk7CitlcnJfbm9fcmVnOgogCWtmcmVlKG5ld19mc2xfY2hhbik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTEwNTQsOCArMTA1Niw3IEBACiAJZmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmc2xfZG1hX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghZmRldikgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIGVub3VnaCBtZW1vcnkgZm9yICdwcml2J1xuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZmRldi0+ZGV2ID0gJmRldi0+ZGV2OwogCUlOSVRfTElTVF9IRUFEKCZmZGV2LT5jb21tb24uY2hhbm5lbHMpOwpAQCAtMTA2NSw3ICsxMDY2LDcgQEAKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiQ2FuJ3QgZ2V0ICVzIHByb3BlcnR5ICdyZWcnXG4iLAogCQkJCWRldi0+bm9kZS0+ZnVsbF9uYW1lKTsKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX25vX3JlZzsKIAl9CiAKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJQcm9iZSB0aGUgRnJlZXNjYWxlIERNQSBkcml2ZXIgZm9yICVzICIKQEAgLTExMDMsNiArMTEwNCw3IEBACiAKIGVycjoKIAlpb3VubWFwKGZkZXYtPnJlZ19iYXNlKTsKK2Vycl9ub19yZWc6CiAJa2ZyZWUoZmRldik7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQuYyBiL2RyaXZlcnMvZG1hL2lvYXQuYwppbmRleCAxNmUwZmQ4Li45YjE2YTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0LmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdC5jCkBAIC00Nyw2ICs0NywxNiBAQAogCiAJLyogSS9PQVQgdjIgcGxhdGZvcm1zICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9TTkIpIH0sCisKKwkvKiBJL09BVCB2MyBwbGF0Zm9ybXMgKi8KKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1RCRzApIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9UQkcxKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfVEJHMikgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1RCRzMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9UQkc0KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfVEJHNSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1RCRzYpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9UQkc3KSB9LAogCXsgMCwgfQogfTsKIApAQCAtODMsNiArOTMsMTEgQEAKIAkJaWYgKGRldmljZS0+ZG1hICYmIGlvYXRfZGNhX2VuYWJsZWQpCiAJCQlkZXZpY2UtPmRjYSA9IGlvYXQyX2RjYV9pbml0KHBkZXYsIGlvYmFzZSk7CiAJCWJyZWFrOworCWNhc2UgSU9BVF9WRVJfM18wOgorCQlkZXZpY2UtPmRtYSA9IGlvYXRfZG1hX3Byb2JlKHBkZXYsIGlvYmFzZSk7CisJCWlmIChkZXZpY2UtPmRtYSAmJiBpb2F0X2RjYV9lbmFibGVkKQorCQkJZGV2aWNlLT5kY2EgPSBpb2F0M19kY2FfaW5pdChwZGV2LCBpb2Jhc2UpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PREVWOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXRfZGNhLmMgYi9kcml2ZXJzL2RtYS9pb2F0X2RjYS5jCmluZGV4IDllOTIyNzYuLjZjZjYyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXRfZGNhLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdF9kY2EuYwpAQCAtMzcsMTIgKzM3LDE4IEBACiAjaW5jbHVkZSAiaW9hdGRtYV9yZWdpc3RlcnMuaCIKIAogLyoKLSAqIEJpdCAxNiBvZiBhIHRhZyBtYXAgZW50cnkgaXMgdGhlICJ2YWxpZCIgYml0LCBpZiBpdCBpcyBzZXQgdGhlbiBiaXRzIDA6MTUKKyAqIEJpdCA3IG9mIGEgdGFnIG1hcCBlbnRyeSBpcyB0aGUgInZhbGlkIiBiaXQsIGlmIGl0IGlzIHNldCB0aGVuIGJpdHMgMDo2CiAgKiBjb250YWluIHRoZSBiaXQgbnVtYmVyIG9mIHRoZSBBUElDIElEIHRvIG1hcCBpbnRvIHRoZSBEQ0EgdGFnLiAgSWYgdGhlIHZhbGlkCiAgKiBiaXQgaXMgbm90IHNldCwgdGhlbiB0aGUgdmFsdWUgbXVzdCBiZSAwIG9yIDEgYW5kIGRlZmluZXMgdGhlIGJpdCBpbiB0aGUgdGFnLgogICovCiAjZGVmaW5lIERDQV9UQUdfTUFQX1ZBTElEIDB4ODAKIAorI2RlZmluZSBEQ0EzX1RBR19NQVBfQklUX1RPX0lOViAweDgwCisjZGVmaW5lIERDQTNfVEFHX01BUF9CSVRfVE9fU0VMIDB4NDAKKyNkZWZpbmUgRENBM19UQUdfTUFQX0xJVEVSQUxfVkFMIDB4MQorCisjZGVmaW5lIERDQV9UQUdfTUFQX01BU0sgMHhERgorCiAvKgogICogIkxlZ2FjeSIgRENBIHN5c3RlbXMgZG8gbm90IGltcGxlbWVudCB0aGUgRENBIHJlZ2lzdGVyIHNldCBpbiB0aGUKICAqIEkvT0FUIGRldmljZS4gIFNvZnR3YXJlIG5lZWRzIGRpcmVjdCBzdXBwb3J0IGZvciB0aGVpciB0YWcgbWFwcGluZ3MuCkBAIC05NSw2ICsxMDEsNyBAQAogfTsKIAogI2RlZmluZSBJT0FUX0RDQV9NQVhfUkVRIDYKKyNkZWZpbmUgSU9BVDNfRENBX01BWF9SRVEgMgogCiBzdHJ1Y3QgaW9hdF9kY2FfcHJpdiB7CiAJdm9pZCBfX2lvbWVtCQkqaW9iYXNlOwpAQCAtMTcxLDcgKzE3OCw5IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyB1OCBpb2F0X2RjYV9nZXRfdGFnKHN0cnVjdCBkY2FfcHJvdmlkZXIgKmRjYSwgaW50IGNwdSkKK3N0YXRpYyB1OCBpb2F0X2RjYV9nZXRfdGFnKHN0cnVjdCBkY2FfcHJvdmlkZXIgKmRjYSwKKwkJCSAgIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIGludCBjcHUpCiB7CiAJc3RydWN0IGlvYXRfZGNhX3ByaXYgKmlvYXRkY2EgPSBkY2FfcHJpdihkY2EpOwogCWludCBpLCBhcGljX2lkLCBiaXQsIHZhbHVlOwpAQCAtMTkzLDEwICsyMDIsMjYgQEAKIAlyZXR1cm4gdGFnOwogfQogCitzdGF0aWMgaW50IGlvYXRfZGNhX2Rldl9tYW5hZ2VkKHN0cnVjdCBkY2FfcHJvdmlkZXIgKmRjYSwKKwkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlvYXRfZGNhX3ByaXYgKmlvYXRkY2EgPSBkY2FfcHJpdihkY2EpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCWludCBpOworCisJcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgaW9hdGRjYS0+bWF4X3JlcXVlc3RlcnM7IGkrKykgeworCQlpZiAoaW9hdGRjYS0+cmVxX3Nsb3RzW2ldLnBkZXYgPT0gcGRldikKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkY2Ffb3BzIGlvYXRfZGNhX29wcyA9IHsKIAkuYWRkX3JlcXVlc3RlcgkJPSBpb2F0X2RjYV9hZGRfcmVxdWVzdGVyLAogCS5yZW1vdmVfcmVxdWVzdGVyCT0gaW9hdF9kY2FfcmVtb3ZlX3JlcXVlc3RlciwKIAkuZ2V0X3RhZwkJPSBpb2F0X2RjYV9nZXRfdGFnLAorCS5kZXZfbWFuYWdlZAkJPSBpb2F0X2RjYV9kZXZfbWFuYWdlZCwKIH07CiAKIApAQCAtMjA3LDYgKzIzMiw4IEBACiAJdTggKnRhZ19tYXAgPSBOVUxMOwogCWludCBpOwogCWludCBlcnI7CisJdTggdmVyc2lvbjsKKwl1OCBtYXhfcmVxdWVzdGVyczsKIAogCWlmICghc3lzdGVtX2hhc19kY2FfZW5hYmxlZChwZGV2KSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMzcsMTUgKzI2NCwyMCBAQAogCWlmICh0YWdfbWFwID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCisJdmVyc2lvbiA9IHJlYWRiKGlvYmFzZSArIElPQVRfVkVSX09GRlNFVCk7CisJaWYgKHZlcnNpb24gPT0gSU9BVF9WRVJfM18wKQorCQltYXhfcmVxdWVzdGVycyA9IElPQVQzX0RDQV9NQVhfUkVROworCWVsc2UKKwkJbWF4X3JlcXVlc3RlcnMgPSBJT0FUX0RDQV9NQVhfUkVROworCiAJZGNhID0gYWxsb2NfZGNhX3Byb3ZpZGVyKCZpb2F0X2RjYV9vcHMsCiAJCQlzaXplb2YoKmlvYXRkY2EpICsKLQkJCShzaXplb2Yoc3RydWN0IGlvYXRfZGNhX3Nsb3QpICogSU9BVF9EQ0FfTUFYX1JFUSkpOworCQkJKHNpemVvZihzdHJ1Y3QgaW9hdF9kY2Ffc2xvdCkgKiBtYXhfcmVxdWVzdGVycykpOwogCWlmICghZGNhKQogCQlyZXR1cm4gTlVMTDsKIAogCWlvYXRkY2EgPSBkY2FfcHJpdihkY2EpOwotCWlvYXRkY2EtPm1heF9yZXF1ZXN0ZXJzID0gSU9BVF9EQ0FfTUFYX1JFUTsKLQorCWlvYXRkY2EtPm1heF9yZXF1ZXN0ZXJzID0gbWF4X3JlcXVlc3RlcnM7CiAJaW9hdGRjYS0+ZGNhX2Jhc2UgPSBpb2Jhc2UgKyAweDU0OwogCiAJLyogY29weSBvdmVyIHRoZSBBUElDIElEIHRvIERDQSB0YWcgbWFwcGluZyAqLwpAQCAtMzIzLDExICszNTUsMTMgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIHU4IGlvYXQyX2RjYV9nZXRfdGFnKHN0cnVjdCBkY2FfcHJvdmlkZXIgKmRjYSwgaW50IGNwdSkKK3N0YXRpYyB1OCBpb2F0Ml9kY2FfZ2V0X3RhZyhzdHJ1Y3QgZGNhX3Byb3ZpZGVyICpkY2EsCisJCQkgICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIGludCBjcHUpCiB7CiAJdTggdGFnOwogCi0JdGFnID0gaW9hdF9kY2FfZ2V0X3RhZyhkY2EsIGNwdSk7CisJdGFnID0gaW9hdF9kY2FfZ2V0X3RhZyhkY2EsIGRldiwgY3B1KTsKIAl0YWcgPSAofnRhZykgJiAweDFGOwogCXJldHVybiB0YWc7CiB9CkBAIC0zMzYsNiArMzcwLDcgQEAKIAkuYWRkX3JlcXVlc3RlcgkJPSBpb2F0Ml9kY2FfYWRkX3JlcXVlc3RlciwKIAkucmVtb3ZlX3JlcXVlc3Rlcgk9IGlvYXQyX2RjYV9yZW1vdmVfcmVxdWVzdGVyLAogCS5nZXRfdGFnCQk9IGlvYXQyX2RjYV9nZXRfdGFnLAorCS5kZXZfbWFuYWdlZAkJPSBpb2F0X2RjYV9kZXZfbWFuYWdlZCwKIH07CiAKIHN0YXRpYyBpbnQgaW9hdDJfZGNhX2NvdW50X2RjYV9zbG90cyh2b2lkIF9faW9tZW0gKmlvYmFzZSwgdTE2IGRjYV9vZmZzZXQpCkBAIC00MjUsMyArNDYwLDE5OCBAQAogCiAJcmV0dXJuIGRjYTsKIH0KKworc3RhdGljIGludCBpb2F0M19kY2FfYWRkX3JlcXVlc3RlcihzdHJ1Y3QgZGNhX3Byb3ZpZGVyICpkY2EsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaW9hdF9kY2FfcHJpdiAqaW9hdGRjYSA9IGRjYV9wcml2KGRjYSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJaW50IGk7CisJdTE2IGlkOworCXUxNiBnbG9iYWxfcmVxX3RhYmxlOworCisJLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIFBDSS1FeHByZXNzICovCisJaWYgKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpCisJCXJldHVybiAtRU5PREVWOworCXBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJaWQgPSBkY2FpZF9mcm9tX3BjaWRldihwZGV2KTsKKworCWlmIChpb2F0ZGNhLT5yZXF1ZXN0ZXJfY291bnQgPT0gaW9hdGRjYS0+bWF4X3JlcXVlc3RlcnMpCisJCXJldHVybiAtRU5PREVWOworCisJZm9yIChpID0gMDsgaSA8IGlvYXRkY2EtPm1heF9yZXF1ZXN0ZXJzOyBpKyspIHsKKwkJaWYgKGlvYXRkY2EtPnJlcV9zbG90c1tpXS5wZGV2ID09IE5VTEwpIHsKKwkJCS8qIGZvdW5kIGFuIGVtcHR5IHNsb3QgKi8KKwkJCWlvYXRkY2EtPnJlcXVlc3Rlcl9jb3VudCsrOworCQkJaW9hdGRjYS0+cmVxX3Nsb3RzW2ldLnBkZXYgPSBwZGV2OworCQkJaW9hdGRjYS0+cmVxX3Nsb3RzW2ldLnJpZCA9IGlkOworCQkJZ2xvYmFsX3JlcV90YWJsZSA9CisJCQkgICAgICByZWFkdyhpb2F0ZGNhLT5kY2FfYmFzZSArIElPQVQzX0RDQV9HUkVRSURfT0ZGU0VUKTsKKwkJCXdyaXRlbChpZCB8IElPQVRfRENBX0dSRVFJRF9WQUxJRCwKKwkJCSAgICAgICBpb2F0ZGNhLT5pb2Jhc2UgKyBnbG9iYWxfcmVxX3RhYmxlICsgKGkgKiA0KSk7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwkvKiBFcnJvciwgaW9hdGRtYS0+cmVxdWVzdGVyX2NvdW50IGlzIG91dCBvZiB3aGFjayAqLworCXJldHVybiAtRUZBVUxUOworfQorCitzdGF0aWMgaW50IGlvYXQzX2RjYV9yZW1vdmVfcmVxdWVzdGVyKHN0cnVjdCBkY2FfcHJvdmlkZXIgKmRjYSwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlvYXRfZGNhX3ByaXYgKmlvYXRkY2EgPSBkY2FfcHJpdihkY2EpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCWludCBpOworCXUxNiBnbG9iYWxfcmVxX3RhYmxlOworCisJLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIFBDSS1FeHByZXNzICovCisJaWYgKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpCisJCXJldHVybiAtRU5PREVWOworCXBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW9hdGRjYS0+bWF4X3JlcXVlc3RlcnM7IGkrKykgeworCQlpZiAoaW9hdGRjYS0+cmVxX3Nsb3RzW2ldLnBkZXYgPT0gcGRldikgeworCQkJZ2xvYmFsX3JlcV90YWJsZSA9CisJCQkgICAgICByZWFkdyhpb2F0ZGNhLT5kY2FfYmFzZSArIElPQVQzX0RDQV9HUkVRSURfT0ZGU0VUKTsKKwkJCXdyaXRlbCgwLCBpb2F0ZGNhLT5pb2Jhc2UgKyBnbG9iYWxfcmVxX3RhYmxlICsgKGkgKiA0KSk7CisJCQlpb2F0ZGNhLT5yZXFfc2xvdHNbaV0ucGRldiA9IE5VTEw7CisJCQlpb2F0ZGNhLT5yZXFfc2xvdHNbaV0ucmlkID0gMDsKKwkJCWlvYXRkY2EtPnJlcXVlc3Rlcl9jb3VudC0tOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB1OCBpb2F0M19kY2FfZ2V0X3RhZyhzdHJ1Y3QgZGNhX3Byb3ZpZGVyICpkY2EsCisJCQkgICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIGludCBjcHUpCit7CisJdTggdGFnOworCisJc3RydWN0IGlvYXRfZGNhX3ByaXYgKmlvYXRkY2EgPSBkY2FfcHJpdihkY2EpOworCWludCBpLCBhcGljX2lkLCBiaXQsIHZhbHVlOworCXU4IGVudHJ5OworCisJdGFnID0gMDsKKwlhcGljX2lkID0gY3B1X3BoeXNpY2FsX2lkKGNwdSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSU9BVF9UQUdfTUFQX0xFTjsgaSsrKSB7CisJCWVudHJ5ID0gaW9hdGRjYS0+dGFnX21hcFtpXTsKKwkJaWYgKGVudHJ5ICYgRENBM19UQUdfTUFQX0JJVF9UT19TRUwpIHsKKwkJCWJpdCA9IGVudHJ5ICYKKwkJCQl+KERDQTNfVEFHX01BUF9CSVRfVE9fU0VMIHwgRENBM19UQUdfTUFQX0JJVF9UT19JTlYpOworCQkJdmFsdWUgPSAoYXBpY19pZCAmICgxIDw8IGJpdCkpID8gMSA6IDA7CisJCX0gZWxzZSBpZiAoZW50cnkgJiBEQ0EzX1RBR19NQVBfQklUX1RPX0lOVikgeworCQkJYml0ID0gZW50cnkgJiB+RENBM19UQUdfTUFQX0JJVF9UT19JTlY7CisJCQl2YWx1ZSA9IChhcGljX2lkICYgKDEgPDwgYml0KSkgPyAwIDogMTsKKwkJfSBlbHNlIHsKKwkJCXZhbHVlID0gKGVudHJ5ICYgRENBM19UQUdfTUFQX0xJVEVSQUxfVkFMKSA/IDEgOiAwOworCQl9CisJCXRhZyB8PSAodmFsdWUgPDwgaSk7CisJfQorCisJcmV0dXJuIHRhZzsKK30KKworc3RhdGljIHN0cnVjdCBkY2Ffb3BzIGlvYXQzX2RjYV9vcHMgPSB7CisJLmFkZF9yZXF1ZXN0ZXIJCT0gaW9hdDNfZGNhX2FkZF9yZXF1ZXN0ZXIsCisJLnJlbW92ZV9yZXF1ZXN0ZXIJPSBpb2F0M19kY2FfcmVtb3ZlX3JlcXVlc3RlciwKKwkuZ2V0X3RhZwkJPSBpb2F0M19kY2FfZ2V0X3RhZywKKwkuZGV2X21hbmFnZWQJCT0gaW9hdF9kY2FfZGV2X21hbmFnZWQsCit9OworCitzdGF0aWMgaW50IGlvYXQzX2RjYV9jb3VudF9kY2Ffc2xvdHModm9pZCAqaW9iYXNlLCB1MTYgZGNhX29mZnNldCkKK3sKKwlpbnQgc2xvdHMgPSAwOworCXUzMiByZXE7CisJdTE2IGdsb2JhbF9yZXFfdGFibGU7CisKKwlnbG9iYWxfcmVxX3RhYmxlID0gcmVhZHcoaW9iYXNlICsgZGNhX29mZnNldCArIElPQVQzX0RDQV9HUkVRSURfT0ZGU0VUKTsKKwlpZiAoZ2xvYmFsX3JlcV90YWJsZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWRvIHsKKwkJcmVxID0gcmVhZGwoaW9iYXNlICsgZ2xvYmFsX3JlcV90YWJsZSArIChzbG90cyAqIHNpemVvZih1MzIpKSk7CisJCXNsb3RzKys7CisJfSB3aGlsZSAoKHJlcSAmIElPQVRfRENBX0dSRVFJRF9MQVNUSUQpID09IDApOworCisJcmV0dXJuIHNsb3RzOworfQorCitzdHJ1Y3QgZGNhX3Byb3ZpZGVyICppb2F0M19kY2FfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCBfX2lvbWVtICppb2Jhc2UpCit7CisJc3RydWN0IGRjYV9wcm92aWRlciAqZGNhOworCXN0cnVjdCBpb2F0X2RjYV9wcml2ICppb2F0ZGNhOworCWludCBzbG90czsKKwlpbnQgaTsKKwlpbnQgZXJyOworCXUxNiBkY2Ffb2Zmc2V0OworCXUxNiBjc2lfZnNiX2NvbnRyb2w7CisJdTE2IHBjaWVfY29udHJvbDsKKwl1OCBiaXQ7CisKKwl1bmlvbiB7CisJCXU2NCBmdWxsOworCQlzdHJ1Y3QgeworCQkJdTMyIGxvdzsKKwkJCXUzMiBoaWdoOworCQl9OworCX0gdGFnX21hcDsKKworCWlmICghc3lzdGVtX2hhc19kY2FfZW5hYmxlZChwZGV2KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkY2Ffb2Zmc2V0ID0gcmVhZHcoaW9iYXNlICsgSU9BVF9EQ0FPRkZTRVRfT0ZGU0VUKTsKKwlpZiAoZGNhX29mZnNldCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXNsb3RzID0gaW9hdDNfZGNhX2NvdW50X2RjYV9zbG90cyhpb2Jhc2UsIGRjYV9vZmZzZXQpOworCWlmIChzbG90cyA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWRjYSA9IGFsbG9jX2RjYV9wcm92aWRlcigmaW9hdDNfZGNhX29wcywKKwkJCQkgc2l6ZW9mKCppb2F0ZGNhKQorCQkJCSAgICAgICsgKHNpemVvZihzdHJ1Y3QgaW9hdF9kY2Ffc2xvdCkgKiBzbG90cykpOworCWlmICghZGNhKQorCQlyZXR1cm4gTlVMTDsKKworCWlvYXRkY2EgPSBkY2FfcHJpdihkY2EpOworCWlvYXRkY2EtPmlvYmFzZSA9IGlvYmFzZTsKKwlpb2F0ZGNhLT5kY2FfYmFzZSA9IGlvYmFzZSArIGRjYV9vZmZzZXQ7CisJaW9hdGRjYS0+bWF4X3JlcXVlc3RlcnMgPSBzbG90czsKKworCS8qIHNvbWUgYmlvcyBtaWdodCBub3Qga25vdyB0byB0dXJuIHRoZXNlIG9uICovCisJY3NpX2ZzYl9jb250cm9sID0gcmVhZHcoaW9hdGRjYS0+ZGNhX2Jhc2UgKyBJT0FUM19DU0lfQ09OVFJPTF9PRkZTRVQpOworCWlmICgoY3NpX2ZzYl9jb250cm9sICYgSU9BVDNfQ1NJX0NPTlRST0xfUFJFRkVUQ0gpID09IDApIHsKKwkJY3NpX2ZzYl9jb250cm9sIHw9IElPQVQzX0NTSV9DT05UUk9MX1BSRUZFVENIOworCQl3cml0ZXcoY3NpX2ZzYl9jb250cm9sLAorCQkgICAgICAgaW9hdGRjYS0+ZGNhX2Jhc2UgKyBJT0FUM19DU0lfQ09OVFJPTF9PRkZTRVQpOworCX0KKwlwY2llX2NvbnRyb2wgPSByZWFkdyhpb2F0ZGNhLT5kY2FfYmFzZSArIElPQVQzX1BDSV9DT05UUk9MX09GRlNFVCk7CisJaWYgKChwY2llX2NvbnRyb2wgJiBJT0FUM19QQ0lfQ09OVFJPTF9NRU1XUikgPT0gMCkgeworCQlwY2llX2NvbnRyb2wgfD0gSU9BVDNfUENJX0NPTlRST0xfTUVNV1I7CisJCXdyaXRldyhwY2llX2NvbnRyb2wsCisJCSAgICAgICBpb2F0ZGNhLT5kY2FfYmFzZSArIElPQVQzX1BDSV9DT05UUk9MX09GRlNFVCk7CisJfQorCisKKwkvKiBUT0RPIHZlcnNpb24sIGNvbXBhdGliaWxpdHkgYW5kIGNvbmZpZ3VyYXRpb24gY2hlY2tzICovCisKKwkvKiBjb3B5IG91dCB0aGUgQVBJQyB0byBEQ0EgdGFnIG1hcCAqLworCXRhZ19tYXAubG93ID0KKwkJcmVhZGwoaW9hdGRjYS0+ZGNhX2Jhc2UgKyBJT0FUM19BUElDSURfVEFHX01BUF9PRkZTRVRfTE9XKTsKKwl0YWdfbWFwLmhpZ2ggPQorCQlyZWFkbChpb2F0ZGNhLT5kY2FfYmFzZSArIElPQVQzX0FQSUNJRF9UQUdfTUFQX09GRlNFVF9ISUdIKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWJpdCA9IHRhZ19tYXAuZnVsbCA+PiAoOCAqIGkpOworCQlpb2F0ZGNhLT50YWdfbWFwW2ldID0gYml0ICYgRENBX1RBR19NQVBfTUFTSzsKKwl9CisKKwllcnIgPSByZWdpc3Rlcl9kY2FfcHJvdmlkZXIoZGNhLCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWZyZWVfZGNhX3Byb3ZpZGVyKGRjYSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBkY2E7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jIGIvZHJpdmVycy9kbWEvaW9hdF9kbWEuYwppbmRleCAzMThlOGEyLi5hNTIxNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSAiaW9hdGRtYS5oIgogI2luY2x1ZGUgImlvYXRkbWFfcmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSAiaW9hdGRtYV9ody5oIgpAQCAtNDEsMTEgKzQyLDIzIEBACiAjZGVmaW5lIHRvX2lvYXRfZGVzYyhsaCkgY29udGFpbmVyX29mKGxoLCBzdHJ1Y3QgaW9hdF9kZXNjX3N3LCBub2RlKQogI2RlZmluZSB0eF90b19pb2F0X2Rlc2ModHgpIGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGlvYXRfZGVzY19zdywgYXN5bmNfdHgpCiAKKyNkZWZpbmUgY2hhbl9udW0oY2gpICgoaW50KSgoY2gpLT5yZWdfYmFzZSAtIChjaCktPmRldmljZS0+cmVnX2Jhc2UpIC8gMHg4MCkKIHN0YXRpYyBpbnQgaW9hdF9wZW5kaW5nX2xldmVsID0gNDsKIG1vZHVsZV9wYXJhbShpb2F0X3BlbmRpbmdfbGV2ZWwsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlvYXRfcGVuZGluZ19sZXZlbCwKIAkJICJoaWdoLXdhdGVyIG1hcmsgZm9yIHB1c2hpbmcgaW9hdCBkZXNjcmlwdG9ycyAoZGVmYXVsdDogNCkiKTsKIAorI2RlZmluZSBSRVNFVF9ERUxBWSAgbXNlY3NfdG9famlmZmllcygxMDApCisjZGVmaW5lIFdBVENIRE9HX0RFTEFZICByb3VuZF9qaWZmaWVzKG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpCitzdGF0aWMgdm9pZCBpb2F0X2RtYV9jaGFuX3Jlc2V0X3BhcnQyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgdm9pZCBpb2F0X2RtYV9jaGFuX3dhdGNoZG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKy8qCisgKiB3b3JrYXJvdW5kIGZvciBJT0FUIHZlci4zLjAgbnVsbCBkZXNjcmlwdG9yIGlzc3VlCisgKiAoY2hhbm5lbCByZXR1cm5zIGVycm9yIHdoZW4gc2l6ZSBpcyAwKQorICovCisjZGVmaW5lIE5VTExfREVTQ19CVUZGRVJfU0laRSAxCisKIC8qIGludGVybmFsIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgaW9hdF9kbWFfc3RhcnRfbnVsbF9kZXNjKHN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4pOwogc3RhdGljIHZvaWQgaW9hdF9kbWFfbWVtY3B5X2NsZWFudXAoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbik7CkBAIC0xMjIsNiArMTM1LDM4IEBACiAJaW50IGk7CiAJc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbjsKIAorCS8qCisJICogSU9BVCB2ZXIuMyB3b3JrYXJvdW5kcworCSAqLworCWlmIChkZXZpY2UtPnZlcnNpb24gPT0gSU9BVF9WRVJfM18wKSB7CisJCXUzMiBjaGFuX2Vycl9tYXNrOworCQl1MTYgZGV2X2lkOworCQl1MzIgZG1hdW5jZXJyc3RzOworCisJCS8qCisJCSAqIFdyaXRlIENIQU5FUlJNU0tfSU5UIHdpdGggM0UwN2ggdG8gbWFzayBvdXQgdGhlIGVycm9ycworCQkgKiB0aGF0IGNhbiBjYXVzZSBzdGFiaWxpdHkgaXNzdWVzIGZvciBJT0FUIHZlci4zCisJCSAqLworCQljaGFuX2Vycl9tYXNrID0gMHgzRTA3OworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldmljZS0+cGRldiwKKwkJCUlPQVRfUENJX0NIQU5FUlJNQVNLX0lOVF9PRkZTRVQsCisJCQljaGFuX2Vycl9tYXNrKTsKKworCQkvKgorCQkgKiBDbGVhciBETUFVTkNFUlJTVFMgQ2ZnLVJlZyBQYXJpdHkgRXJyb3Igc3RhdHVzIGJpdAorCQkgKiAod29ya2Fyb3VuZCBmb3Igc3B1cmlvdXMgY29uZmlnIHBhcml0eSBlcnJvciBhZnRlciByZXN0YXJ0KQorCQkgKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2aWNlLT5wZGV2LAorCQkJSU9BVF9QQ0lfREVWSUNFX0lEX09GRlNFVCwKKwkJCSZkZXZfaWQpOworCQlpZiAoZGV2X2lkID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9UQkcwKSB7CisJCQlkbWF1bmNlcnJzdHMgPSAweDEwOworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZpY2UtPnBkZXYsCisJCQkJSU9BVF9QQ0lfRE1BVU5DRVJSU1RTX09GRlNFVCwKKwkJCQlkbWF1bmNlcnJzdHMpOworCQl9CisJfQorCiAJZGV2aWNlLT5jb21tb24uY2hhbmNudCA9IHJlYWRiKGRldmljZS0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5DTlRfT0ZGU0VUKTsKIAl4ZmVyY2FwX3NjYWxlID0gcmVhZGIoZGV2aWNlLT5yZWdfYmFzZSArIElPQVRfWEZFUkNBUF9PRkZTRVQpOwogCXhmZXJjYXAgPSAoeGZlcmNhcF9zY2FsZSA9PSAwID8gLTEgOiAoMVVMIDw8IHhmZXJjYXBfc2NhbGUpKTsKQEAgLTEzNyw2ICsxODIsNyBAQAogCQlpb2F0X2NoYW4tPnJlZ19iYXNlID0gZGV2aWNlLT5yZWdfYmFzZSArICgweDgwICogKGkgKyAxKSk7CiAJCWlvYXRfY2hhbi0+eGZlcmNhcCA9IHhmZXJjYXA7CiAJCWlvYXRfY2hhbi0+ZGVzY2NvdW50ID0gMDsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJmlvYXRfY2hhbi0+d29yaywgaW9hdF9kbWFfY2hhbl9yZXNldF9wYXJ0Mik7CiAJCWlmIChpb2F0X2NoYW4tPmRldmljZS0+dmVyc2lvbiAhPSBJT0FUX1ZFUl8xXzIpIHsKIAkJCXdyaXRlbChJT0FUX0RDQUNUUkxfQ01QTF9XUklURV9FTkFCTEUKIAkJCQkJfCBJT0FUX0RNQV9EQ0FfQU5ZX0NQVSwKQEAgLTE3NSw3ICsyMjEsNyBAQAogewogCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4gPSB0b19pb2F0X2NoYW4oY2hhbik7CiAKLQlpZiAoaW9hdF9jaGFuLT5wZW5kaW5nICE9IDApIHsKKwlpZiAoaW9hdF9jaGFuLT5wZW5kaW5nID4gMCkgewogCQlzcGluX2xvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKIAkJX19pb2F0MV9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcoaW9hdF9jaGFuKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKQEAgLTE5NCwxMyArMjQwLDIyOCBAQAogewogCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4gPSB0b19pb2F0X2NoYW4oY2hhbik7CiAKLQlpZiAoaW9hdF9jaGFuLT5wZW5kaW5nICE9IDApIHsKKwlpZiAoaW9hdF9jaGFuLT5wZW5kaW5nID4gMCkgewogCQlzcGluX2xvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKIAkJX19pb2F0Ml9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcoaW9hdF9jaGFuKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKIAl9CiB9CiAKKworLyoqCisgKiBpb2F0X2RtYV9jaGFuX3Jlc2V0X3BhcnQyIC0gcmVpbml0IHRoZSBjaGFubmVsIGFmdGVyIGEgcmVzZXQKKyAqLworc3RhdGljIHZvaWQgaW9hdF9kbWFfY2hhbl9yZXNldF9wYXJ0MihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9hdF9kbWFfY2hhbiwgd29yay53b3JrKTsKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpkZXNjOworCisJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmNsZWFudXBfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisKKwlpb2F0X2NoYW4tPmNvbXBsZXRpb25fdmlydC0+bG93ID0gMDsKKwlpb2F0X2NoYW4tPmNvbXBsZXRpb25fdmlydC0+aGlnaCA9IDA7CisJaW9hdF9jaGFuLT5wZW5kaW5nID0gMDsKKworCS8qCisJICogY291bnQgdGhlIGRlc2NyaXB0b3JzIHdhaXRpbmcsIGFuZCBiZSBzdXJlIHRvIGRvIGl0CisJICogcmlnaHQgZm9yIGJvdGggdGhlIENCMSBsaW5lIGFuZCB0aGUgQ0IyIHJpbmcKKwkgKi8KKwlpb2F0X2NoYW4tPmRtYWNvdW50ID0gMDsKKwlpZiAoaW9hdF9jaGFuLT51c2VkX2Rlc2MucHJldikgeworCQlkZXNjID0gdG9faW9hdF9kZXNjKGlvYXRfY2hhbi0+dXNlZF9kZXNjLnByZXYpOworCQlkbyB7CisJCQlpb2F0X2NoYW4tPmRtYWNvdW50Kys7CisJCQlkZXNjID0gdG9faW9hdF9kZXNjKGRlc2MtPm5vZGUubmV4dCk7CisJCX0gd2hpbGUgKCZkZXNjLT5ub2RlICE9IGlvYXRfY2hhbi0+dXNlZF9kZXNjLm5leHQpOworCX0KKworCS8qCisJICogd3JpdGUgdGhlIG5ldyBzdGFydGluZyBkZXNjcmlwdG9yIGFkZHJlc3MKKwkgKiB0aGlzIHB1dHMgY2hhbm5lbCBlbmdpbmUgaW50byBBUk1FRCBzdGF0ZQorCSAqLworCWRlc2MgPSB0b19pb2F0X2Rlc2MoaW9hdF9jaGFuLT51c2VkX2Rlc2MucHJldik7CisJc3dpdGNoIChpb2F0X2NoYW4tPmRldmljZS0+dmVyc2lvbikgeworCWNhc2UgSU9BVF9WRVJfMV8yOgorCQl3cml0ZWwoKCh1NjQpIGRlc2MtPmFzeW5jX3R4LnBoeXMpICYgMHgwMDAwMDAwMEZGRkZGRkZGLAorCQkgICAgICAgaW9hdF9jaGFuLT5yZWdfYmFzZSArIElPQVQxX0NIQUlOQUREUl9PRkZTRVRfTE9XKTsKKwkJd3JpdGVsKCgodTY0KSBkZXNjLT5hc3luY190eC5waHlzKSA+PiAzMiwKKwkJICAgICAgIGlvYXRfY2hhbi0+cmVnX2Jhc2UgKyBJT0FUMV9DSEFJTkFERFJfT0ZGU0VUX0hJR0gpOworCisJCXdyaXRlYihJT0FUX0NIQU5DTURfU1RBUlQsIGlvYXRfY2hhbi0+cmVnX2Jhc2UKKwkJCSsgSU9BVF9DSEFOQ01EX09GRlNFVChpb2F0X2NoYW4tPmRldmljZS0+dmVyc2lvbikpOworCQlicmVhazsKKwljYXNlIElPQVRfVkVSXzJfMDoKKwkJd3JpdGVsKCgodTY0KSBkZXNjLT5hc3luY190eC5waHlzKSAmIDB4MDAwMDAwMDBGRkZGRkZGRiwKKwkJICAgICAgIGlvYXRfY2hhbi0+cmVnX2Jhc2UgKyBJT0FUMl9DSEFJTkFERFJfT0ZGU0VUX0xPVyk7CisJCXdyaXRlbCgoKHU2NCkgZGVzYy0+YXN5bmNfdHgucGh5cykgPj4gMzIsCisJCSAgICAgICBpb2F0X2NoYW4tPnJlZ19iYXNlICsgSU9BVDJfQ0hBSU5BRERSX09GRlNFVF9ISUdIKTsKKworCQkvKiB0ZWxsIHRoZSBlbmdpbmUgdG8gZ28gd2l0aCB3aGF0J3MgbGVmdCB0byBiZSBkb25lICovCisJCXdyaXRldyhpb2F0X2NoYW4tPmRtYWNvdW50LAorCQkgICAgICAgaW9hdF9jaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTl9ETUFDT1VOVF9PRkZTRVQpOworCisJCWJyZWFrOworCX0KKwlkZXZfZXJyKCZpb2F0X2NoYW4tPmRldmljZS0+cGRldi0+ZGV2LAorCQkiY2hhbiVkIHJlc2V0IC0gJWQgZGVzY3Mgd2FpdGluZywgJWQgdG90YWwgZGVzY1xuIiwKKwkJY2hhbl9udW0oaW9hdF9jaGFuKSwgaW9hdF9jaGFuLT5kbWFjb3VudCwgaW9hdF9jaGFuLT5kZXNjY291bnQpOworCisJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmaW9hdF9jaGFuLT5jbGVhbnVwX2xvY2spOworfQorCisvKioKKyAqIGlvYXRfZG1hX3Jlc2V0X2NoYW5uZWwgLSByZXN0YXJ0IGEgY2hhbm5lbAorICogQGlvYXRfY2hhbjogSU9BVCBETUEgY2hhbm5lbCBoYW5kbGUKKyAqLworc3RhdGljIHZvaWQgaW9hdF9kbWFfcmVzZXRfY2hhbm5lbChzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuKQoreworCXUzMiBjaGFuc3RzLCBjaGFuZXJyOworCisJaWYgKCFpb2F0X2NoYW4tPnVzZWRfZGVzYy5wcmV2KQorCQlyZXR1cm47CisKKwljaGFuZXJyID0gcmVhZGwoaW9hdF9jaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOworCWNoYW5zdHMgPSAoaW9hdF9jaGFuLT5jb21wbGV0aW9uX3ZpcnQtPmxvdworCQkJCQkmIElPQVRfQ0hBTlNUU19ETUFfVFJBTlNGRVJfU1RBVFVTKTsKKwlpZiAoY2hhbmVycikgeworCQlkZXZfZXJyKCZpb2F0X2NoYW4tPmRldmljZS0+cGRldi0+ZGV2LAorCQkJImNoYW4lZCwgQ0hBTlNUUyA9IDB4JTA4eCBDSEFORVJSID0gMHglMDR4LCBjbGVhcmluZ1xuIiwKKwkJCWNoYW5fbnVtKGlvYXRfY2hhbiksIGNoYW5zdHMsIGNoYW5lcnIpOworCQl3cml0ZWwoY2hhbmVyciwgaW9hdF9jaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOworCX0KKworCS8qCisJICogd2hhY2sgaXQgdXBzaWRlIHRoZSBoZWFkIHdpdGggYSByZXNldAorCSAqIGFuZCB3YWl0IGZvciB0aGluZ3MgdG8gc2V0dGxlIG91dC4KKwkgKiBmb3JjZSB0aGUgcGVuZGluZyBjb3VudCB0byBhIHJlYWxseSBiaWcgbmVnYXRpdmUKKwkgKiB0byBtYWtlIHN1cmUgbm8gb25lIGZvcmNlcyBhbiBpc3N1ZV9wZW5kaW5nCisJICogd2hpbGUgd2UncmUgd2FpdGluZy4KKwkgKi8KKworCXNwaW5fbG9ja19iaCgmaW9hdF9jaGFuLT5kZXNjX2xvY2spOworCWlvYXRfY2hhbi0+cGVuZGluZyA9IElOVF9NSU47CisJd3JpdGViKElPQVRfQ0hBTkNNRF9SRVNFVCwKKwkgICAgICAgaW9hdF9jaGFuLT5yZWdfYmFzZQorCSAgICAgICArIElPQVRfQ0hBTkNNRF9PRkZTRVQoaW9hdF9jaGFuLT5kZXZpY2UtPnZlcnNpb24pKTsKKwlzcGluX3VubG9ja19iaCgmaW9hdF9jaGFuLT5kZXNjX2xvY2spOworCisJLyogc2NoZWR1bGUgdGhlIDJuZCBoYWxmIGluc3RlYWQgb2Ygc2xlZXBpbmcgYSBsb25nIHRpbWUgKi8KKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlvYXRfY2hhbi0+d29yaywgUkVTRVRfREVMQVkpOworfQorCisvKioKKyAqIGlvYXRfZG1hX2NoYW5fd2F0Y2hkb2cgLSB3YXRjaCBmb3Igc3R1Y2sgY2hhbm5lbHMKKyAqLworc3RhdGljIHZvaWQgaW9hdF9kbWFfY2hhbl93YXRjaGRvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGlvYXRkbWFfZGV2aWNlICpkZXZpY2UgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlvYXRkbWFfZGV2aWNlLCB3b3JrLndvcmspOworCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW47CisJaW50IGk7CisKKwl1bmlvbiB7CisJCXU2NCBmdWxsOworCQlzdHJ1Y3QgeworCQkJdTMyIGxvdzsKKwkJCXUzMiBoaWdoOworCQl9OworCX0gY29tcGxldGlvbl9odzsKKwl1bnNpZ25lZCBsb25nIGNvbXBsX2Rlc2NfYWRkcl9odzsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZpY2UtPmNvbW1vbi5jaGFuY250OyBpKyspIHsKKwkJaW9hdF9jaGFuID0gaW9hdF9sb29rdXBfY2hhbl9ieV9pbmRleChkZXZpY2UsIGkpOworCisJCWlmIChpb2F0X2NoYW4tPmRldmljZS0+dmVyc2lvbiA9PSBJT0FUX1ZFUl8xXzIKKwkJCS8qIGhhdmUgd2Ugc3RhcnRlZCBwcm9jZXNzaW5nIGFueXRoaW5nIHlldCAqLworCQkgICAgJiYgaW9hdF9jaGFuLT5sYXN0X2NvbXBsZXRpb24KKwkJCS8qIGhhdmUgd2UgY29tcGxldGVkIGFueSBzaW5jZSBsYXN0IHdhdGNoZG9nIGN5Y2xlPyAqLworCQkgICAgJiYgKGlvYXRfY2hhbi0+bGFzdF9jb21wbGV0aW9uID09CisJCQkJaW9hdF9jaGFuLT53YXRjaGRvZ19jb21wbGV0aW9uKQorCQkJLyogaGFzIFRDUCBzdHVjayBvbiBvbmUgY29va2llIHNpbmNlIGxhc3Qgd2F0Y2hkb2c/ICovCisJCSAgICAmJiAoaW9hdF9jaGFuLT53YXRjaGRvZ190Y3BfY29va2llID09CisJCQkJaW9hdF9jaGFuLT53YXRjaGRvZ19sYXN0X3RjcF9jb29raWUpCisJCSAgICAmJiAoaW9hdF9jaGFuLT53YXRjaGRvZ190Y3BfY29va2llICE9CisJCQkJaW9hdF9jaGFuLT5jb21wbGV0ZWRfY29va2llKQorCQkJLyogaXMgdGhlcmUgc29tZXRoaW5nIGluIHRoZSBjaGFpbiB0byBiZSBwcm9jZXNzZWQ/ICovCisJCQkvKiBDQjEgY2hhaW4gYWx3YXlzIGhhcyBhdCBsZWFzdCB0aGUgbGFzdCBvbmUgcHJvY2Vzc2VkICovCisJCSAgICAmJiAoaW9hdF9jaGFuLT51c2VkX2Rlc2MucHJldiAhPSBpb2F0X2NoYW4tPnVzZWRfZGVzYy5uZXh0KQorCQkgICAgJiYgaW9hdF9jaGFuLT5wZW5kaW5nID09IDApIHsKKworCQkJLyoKKwkJCSAqIGNoZWNrIENIQU5TVFMgcmVnaXN0ZXIgZm9yIGNvbXBsZXRlZAorCQkJICogZGVzY3JpcHRvciBhZGRyZXNzLgorCQkJICogaWYgaXQgaXMgZGlmZmVyZW50IHRoYW4gY29tcGxldGlvbiB3cml0ZWJhY2ssCisJCQkgKiBpdCBpcyBub3QgemVybworCQkJICogYW5kIGl0IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHdhdGNoZG9nCisJCQkgKiAgICAgd2UgY2FuIGFzc3VtZSB0aGF0IGNoYW5uZWwKKwkJCSAqICAgICBpcyBzdGlsbCB3b3JraW5nIGNvcnJlY3RseQorCQkJICogICAgIGFuZCB0aGUgcHJvYmxlbSBpcyBpbiBjb21wbGV0aW9uIHdyaXRlYmFjay4KKwkJCSAqICAgICB1cGRhdGUgY29tcGxldGlvbiB3cml0ZWJhY2sKKwkJCSAqICAgICB3aXRoIGFjdHVhbCBDSEFOU1RTIHZhbHVlCisJCQkgKiBlbHNlCisJCQkgKiAgICAgdHJ5IHJlc2V0dGluZyB0aGUgY2hhbm5lbAorCQkJICovCisKKwkJCWNvbXBsZXRpb25faHcubG93ID0gcmVhZGwoaW9hdF9jaGFuLT5yZWdfYmFzZSArCisJCQkJSU9BVF9DSEFOU1RTX09GRlNFVF9MT1coaW9hdF9jaGFuLT5kZXZpY2UtPnZlcnNpb24pKTsKKwkJCWNvbXBsZXRpb25faHcuaGlnaCA9IHJlYWRsKGlvYXRfY2hhbi0+cmVnX2Jhc2UgKworCQkJCUlPQVRfQ0hBTlNUU19PRkZTRVRfSElHSChpb2F0X2NoYW4tPmRldmljZS0+dmVyc2lvbikpOworI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQorCQkJY29tcGxfZGVzY19hZGRyX2h3ID0KKwkJCQljb21wbGV0aW9uX2h3LmZ1bGwKKwkJCQkmIElPQVRfQ0hBTlNUU19DT01QTEVURURfREVTQ1JJUFRPUl9BRERSOworI2Vsc2UKKwkJCWNvbXBsX2Rlc2NfYWRkcl9odyA9CisJCQkJY29tcGxldGlvbl9ody5sb3cgJiBJT0FUX0xPV19DT01QTEVUSU9OX01BU0s7CisjZW5kaWYKKworCQkJaWYgKChjb21wbF9kZXNjX2FkZHJfaHcgIT0gMCkKKwkJCSAgICYmIChjb21wbF9kZXNjX2FkZHJfaHcgIT0gaW9hdF9jaGFuLT53YXRjaGRvZ19jb21wbGV0aW9uKQorCQkJICAgJiYgKGNvbXBsX2Rlc2NfYWRkcl9odyAhPSBpb2F0X2NoYW4tPmxhc3RfY29tcGxfZGVzY19hZGRyX2h3KSkgeworCQkJCWlvYXRfY2hhbi0+bGFzdF9jb21wbF9kZXNjX2FkZHJfaHcgPSBjb21wbF9kZXNjX2FkZHJfaHc7CisJCQkJaW9hdF9jaGFuLT5jb21wbGV0aW9uX3ZpcnQtPmxvdyA9IGNvbXBsZXRpb25faHcubG93OworCQkJCWlvYXRfY2hhbi0+Y29tcGxldGlvbl92aXJ0LT5oaWdoID0gY29tcGxldGlvbl9ody5oaWdoOworCQkJfSBlbHNlIHsKKwkJCQlpb2F0X2RtYV9yZXNldF9jaGFubmVsKGlvYXRfY2hhbik7CisJCQkJaW9hdF9jaGFuLT53YXRjaGRvZ19jb21wbGV0aW9uID0gMDsKKwkJCQlpb2F0X2NoYW4tPmxhc3RfY29tcGxfZGVzY19hZGRyX2h3ID0gMDsKKwkJCX0KKworCQkvKgorCQkgKiBmb3IgdmVyc2lvbiAyLjAgaWYgdGhlcmUgYXJlIGRlc2NyaXB0b3JzIHlldCB0byBiZSBwcm9jZXNzZWQKKwkJICogYW5kIHRoZSBsYXN0IGNvbXBsZXRlZCBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB3YXRjaGRvZworCQkgKiAgICAgIGlmIHRoZXkgaGF2ZW4ndCBoaXQgdGhlIHBlbmRpbmcgbGV2ZWwKKwkJICogICAgICAgICAgaXNzdWUgdGhlIHBlbmRpbmcgdG8gcHVzaCB0aGVtIHRocm91Z2gKKwkJICogICAgICBlbHNlCisJCSAqICAgICAgICAgIHRyeSByZXNldHRpbmcgdGhlIGNoYW5uZWwKKwkJICovCisJCX0gZWxzZSBpZiAoaW9hdF9jaGFuLT5kZXZpY2UtPnZlcnNpb24gPT0gSU9BVF9WRVJfMl8wCisJCSAgICAmJiBpb2F0X2NoYW4tPnVzZWRfZGVzYy5wcmV2CisJCSAgICAmJiBpb2F0X2NoYW4tPmxhc3RfY29tcGxldGlvbgorCQkgICAgJiYgaW9hdF9jaGFuLT5sYXN0X2NvbXBsZXRpb24gPT0gaW9hdF9jaGFuLT53YXRjaGRvZ19jb21wbGV0aW9uKSB7CisKKwkJCWlmIChpb2F0X2NoYW4tPnBlbmRpbmcgPCBpb2F0X3BlbmRpbmdfbGV2ZWwpCisJCQkJaW9hdDJfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKCZpb2F0X2NoYW4tPmNvbW1vbik7CisJCQllbHNlIHsKKwkJCQlpb2F0X2RtYV9yZXNldF9jaGFubmVsKGlvYXRfY2hhbik7CisJCQkJaW9hdF9jaGFuLT53YXRjaGRvZ19jb21wbGV0aW9uID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlvYXRfY2hhbi0+bGFzdF9jb21wbF9kZXNjX2FkZHJfaHcgPSAwOworCQkJaW9hdF9jaGFuLT53YXRjaGRvZ19jb21wbGV0aW9uCisJCQkJCT0gaW9hdF9jaGFuLT5sYXN0X2NvbXBsZXRpb247CisJCX0KKworCQlpb2F0X2NoYW4tPndhdGNoZG9nX2xhc3RfdGNwX2Nvb2tpZSA9CisJCQlpb2F0X2NoYW4tPndhdGNoZG9nX3RjcF9jb29raWU7CisJfQorCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIFdBVENIRE9HX0RFTEFZKTsKK30KKwogc3RhdGljIGRtYV9jb29raWVfdCBpb2F0MV90eF9zdWJtaXQoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCkKIHsKIAlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKHR4LT5jaGFuKTsKQEAgLTI1MCw2ICs1MTEsMTMgQEAKIAkJcHJldiA9IG5ldzsKIAl9IHdoaWxlIChsZW4gJiYgKG5ldyA9IGlvYXQxX2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbikpKTsKIAorCWlmICghbmV3KSB7CisJCWRldl9lcnIoJmlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LT5kZXYsCisJCQkidHggc3VibWl0IGZhaWxlZFxuIik7CisJCXNwaW5fdW5sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCWh3LT5jdGwgPSBJT0FUX0RNQV9ERVNDUklQVE9SX0NUTF9DUF9TVFM7CiAJaWYgKG5ldy0+YXN5bmNfdHguY2FsbGJhY2spIHsKIAkJaHctPmN0bCB8PSBJT0FUX0RNQV9ERVNDUklQVE9SX0NUTF9JTlRfR047CkBAIC0zMzUsNyArNjAzLDE0IEBACiAJCWRlc2NfY291bnQrKzsKIAl9IHdoaWxlIChsZW4gJiYgKG5ldyA9IGlvYXQyX2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbikpKTsKIAotCWh3LT5jdGwgPSBJT0FUX0RNQV9ERVNDUklQVE9SX0NUTF9DUF9TVFM7CisJaWYgKCFuZXcpIHsKKwkJZGV2X2VycigmaW9hdF9jaGFuLT5kZXZpY2UtPnBkZXYtPmRldiwKKwkJCSJ0eCBzdWJtaXQgZmFpbGVkXG4iKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaHctPmN0bCB8PSBJT0FUX0RNQV9ERVNDUklQVE9SX0NUTF9DUF9TVFM7CiAJaWYgKG5ldy0+YXN5bmNfdHguY2FsbGJhY2spIHsKIAkJaHctPmN0bCB8PSBJT0FUX0RNQV9ERVNDUklQVE9SX0NUTF9JTlRfR047CiAJCWlmIChmaXJzdCAhPSBuZXcpIHsKQEAgLTQwNiw2ICs2ODEsNyBAQAogCQlkZXNjX3N3LT5hc3luY190eC50eF9zdWJtaXQgPSBpb2F0MV90eF9zdWJtaXQ7CiAJCWJyZWFrOwogCWNhc2UgSU9BVF9WRVJfMl8wOgorCWNhc2UgSU9BVF9WRVJfM18wOgogCQlkZXNjX3N3LT5hc3luY190eC50eF9zdWJtaXQgPSBpb2F0Ml90eF9zdWJtaXQ7CiAJCWJyZWFrOwogCX0KQEAgLTQ1Miw3ICs3MjgsOCBAQAogICogaW9hdF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMgLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIGRlc2NyaXB0b3JzCiAgKiBAY2hhbjogdGhlIGNoYW5uZWwgdG8gYmUgZmlsbGVkIG91dAogICovCi1zdGF0aWMgaW50IGlvYXRfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3N0YXRpYyBpbnQgaW9hdF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJCQkgc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOwogCXN0cnVjdCBpb2F0X2Rlc2Nfc3cgKmRlc2M7CkBAIC01NTUsNiArODMyLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIElPQVRfVkVSXzJfMDoKKwljYXNlIElPQVRfVkVSXzNfMDoKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLAogCQkJCQkgaW9hdF9jaGFuLT5mcmVlX2Rlc2MubmV4dCwgbm9kZSkgewogCQkJbGlzdF9kZWwoJmRlc2MtPm5vZGUpOwpAQCAtNTg1LDYgKzg2MywxMCBAQAogCWlvYXRfY2hhbi0+bGFzdF9jb21wbGV0aW9uID0gaW9hdF9jaGFuLT5jb21wbGV0aW9uX2FkZHIgPSAwOwogCWlvYXRfY2hhbi0+cGVuZGluZyA9IDA7CiAJaW9hdF9jaGFuLT5kbWFjb3VudCA9IDA7CisJaW9hdF9jaGFuLT53YXRjaGRvZ19jb21wbGV0aW9uID0gMDsKKwlpb2F0X2NoYW4tPmxhc3RfY29tcGxfZGVzY19hZGRyX2h3ID0gMDsKKwlpb2F0X2NoYW4tPndhdGNoZG9nX3RjcF9jb29raWUgPQorCQlpb2F0X2NoYW4tPndhdGNoZG9nX2xhc3RfdGNwX2Nvb2tpZSA9IDA7CiB9CiAKIC8qKgpAQCAtNjQwLDcgKzkyMiw4IEBACiAKIAkJLyogc2V0IHVwIHRoZSBub29wIGRlc2NyaXB0b3IgKi8KIAkJbm9vcF9kZXNjID0gdG9faW9hdF9kZXNjKGlvYXRfY2hhbi0+dXNlZF9kZXNjLm5leHQpOwotCQlub29wX2Rlc2MtPmh3LT5zaXplID0gMDsKKwkJLyogc2V0IHNpemUgdG8gbm9uLXplcm8gdmFsdWUgKGNoYW5uZWwgcmV0dXJucyBlcnJvciB3aGVuIHNpemUgaXMgMCkgKi8KKwkJbm9vcF9kZXNjLT5ody0+c2l6ZSA9IE5VTExfREVTQ19CVUZGRVJfU0laRTsKIAkJbm9vcF9kZXNjLT5ody0+Y3RsID0gSU9BVF9ETUFfREVTQ1JJUFRPUl9OVUw7CiAJCW5vb3BfZGVzYy0+aHctPnNyY19hZGRyID0gMDsKIAkJbm9vcF9kZXNjLT5ody0+ZHN0X2FkZHIgPSAwOwpAQCAtNjkwLDYgKzk3Myw3IEBACiAJCXJldHVybiBpb2F0MV9kbWFfZ2V0X25leHRfZGVzY3JpcHRvcihpb2F0X2NoYW4pOwogCQlicmVhazsKIAljYXNlIElPQVRfVkVSXzJfMDoKKwljYXNlIElPQVRfVkVSXzNfMDoKIAkJcmV0dXJuIGlvYXQyX2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbik7CiAJCWJyZWFrOwogCX0KQEAgLTcxNiw4ICsxMDAwLDEyIEBACiAJCW5ldy0+c3JjID0gZG1hX3NyYzsKIAkJbmV3LT5hc3luY190eC5mbGFncyA9IGZsYWdzOwogCQlyZXR1cm4gJm5ldy0+YXN5bmNfdHg7Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJZGV2X2VycigmaW9hdF9jaGFuLT5kZXZpY2UtPnBkZXYtPmRldiwKKwkJCSJjaGFuJWQgLSBnZXRfbmV4dF9kZXNjIGZhaWxlZDogJWQgZGVzY3Mgd2FpdGluZywgJWQgdG90YWwgZGVzY1xuIiwKKwkJCWNoYW5fbnVtKGlvYXRfY2hhbiksIGlvYXRfY2hhbi0+ZG1hY291bnQsIGlvYXRfY2hhbi0+ZGVzY2NvdW50KTsKIAkJcmV0dXJuIE5VTEw7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICppb2F0Ml9kbWFfcHJlcF9tZW1jcHkoCkBAIC03NDQsOCArMTAzMiwxMyBAQAogCQluZXctPnNyYyA9IGRtYV9zcmM7CiAJCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKIAkJcmV0dXJuICZuZXctPmFzeW5jX3R4OwotCX0gZWxzZQorCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisJCWRldl9lcnIoJmlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LT5kZXYsCisJCQkiY2hhbiVkIC0gZ2V0X25leHRfZGVzYyBmYWlsZWQ6ICVkIGRlc2NzIHdhaXRpbmcsICVkIHRvdGFsIGRlc2NcbiIsCisJCQljaGFuX251bShpb2F0X2NoYW4pLCBpb2F0X2NoYW4tPmRtYWNvdW50LCBpb2F0X2NoYW4tPmRlc2Njb3VudCk7CiAJCXJldHVybiBOVUxMOworCX0KIH0KIAogc3RhdGljIHZvaWQgaW9hdF9kbWFfY2xlYW51cF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTc1Niw2ICsxMDQ5LDI3IEBACiAJICAgICAgIGNoYW4tPnJlZ19iYXNlICsgSU9BVF9DSEFOQ1RSTF9PRkZTRVQpOwogfQogCitzdGF0aWMgdm9pZAoraW9hdF9kbWFfdW5tYXAoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbiwgc3RydWN0IGlvYXRfZGVzY19zdyAqZGVzYykKK3sKKwkvKgorCSAqIHllcyB3ZSBhcmUgdW5tYXBwaW5nIGJvdGggX3BhZ2UgYW5kIF9zaW5nbGUKKwkgKiBhbGxvYydkIHJlZ2lvbnMgd2l0aCB1bm1hcF9wYWdlLiBJcyB0aGlzCisJICogKnJlYWxseSogdGhhdCBiYWQ/CisJICovCisJaWYgKCEoZGVzYy0+YXN5bmNfdHguZmxhZ3MgJiBETUFfQ09NUExfU0tJUF9ERVNUX1VOTUFQKSkKKwkJcGNpX3VubWFwX3BhZ2UoaW9hdF9jaGFuLT5kZXZpY2UtPnBkZXYsCisJCQkJcGNpX3VubWFwX2FkZHIoZGVzYywgZHN0KSwKKwkJCQlwY2lfdW5tYXBfbGVuKGRlc2MsIGxlbiksCisJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKworCWlmICghKGRlc2MtPmFzeW5jX3R4LmZsYWdzICYgRE1BX0NPTVBMX1NLSVBfU1JDX1VOTUFQKSkKKwkJcGNpX3VubWFwX3BhZ2UoaW9hdF9jaGFuLT5kZXZpY2UtPnBkZXYsCisJCQkJcGNpX3VubWFwX2FkZHIoZGVzYywgc3JjKSwKKwkJCQlwY2lfdW5tYXBfbGVuKGRlc2MsIGxlbiksCisJCQkJUENJX0RNQV9UT0RFVklDRSk7Cit9CisKIC8qKgogICogaW9hdF9kbWFfbWVtY3B5X2NsZWFudXAgLSBjbGVhbnVwIHVwIGZpbmlzaGVkIGRlc2NyaXB0b3JzCiAgKiBAY2hhbjogaW9hdCBjaGFubmVsIHRvIGJlIGNsZWFuZWQgdXAKQEAgLTc5OSwxMSArMTExMywyNyBAQAogCiAJaWYgKHBoeXNfY29tcGxldGUgPT0gaW9hdF9jaGFuLT5sYXN0X2NvbXBsZXRpb24pIHsKIAkJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+Y2xlYW51cF9sb2NrKTsKKwkJLyoKKwkJICogcGVyaGFwcyB3ZSdyZSBzdHVjayBzbyBoYXJkIHRoYXQgdGhlIHdhdGNoZG9nIGNhbid0IGdvIG9mZj8KKwkJICogdHJ5IHRvIGNhdGNoIGl0IGFmdGVyIDIgc2Vjb25kcworCQkgKi8KKwkJaWYgKGlvYXRfY2hhbi0+ZGV2aWNlLT52ZXJzaW9uICE9IElPQVRfVkVSXzNfMCkgeworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCQkgICAgICAgaW9hdF9jaGFuLT5sYXN0X2NvbXBsZXRpb25fdGltZSArIEhaKldBVENIRE9HX0RFTEFZKSkgeworCQkJCWlvYXRfZG1hX2NoYW5fd2F0Y2hkb2coJihpb2F0X2NoYW4tPmRldmljZS0+d29yay53b3JrKSk7CisJCQkJaW9hdF9jaGFuLT5sYXN0X2NvbXBsZXRpb25fdGltZSA9IGppZmZpZXM7CisJCQl9CisJCX0KKwkJcmV0dXJuOworCX0KKwlpb2F0X2NoYW4tPmxhc3RfY29tcGxldGlvbl90aW1lID0gamlmZmllczsKKworCWNvb2tpZSA9IDA7CisJaWYgKCFzcGluX3RyeWxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKSkgeworCQlzcGluX3VubG9ja19iaCgmaW9hdF9jaGFuLT5jbGVhbnVwX2xvY2spOwogCQlyZXR1cm47CiAJfQogCi0JY29va2llID0gMDsKLQlzcGluX2xvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKIAlzd2l0Y2ggKGlvYXRfY2hhbi0+ZGV2aWNlLT52ZXJzaW9uKSB7CiAJY2FzZSBJT0FUX1ZFUl8xXzI6CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywKQEAgLTgxNiwyMSArMTE0Niw3IEBACiAJCQkgKi8KIAkJCWlmIChkZXNjLT5hc3luY190eC5jb29raWUpIHsKIAkJCQljb29raWUgPSBkZXNjLT5hc3luY190eC5jb29raWU7Ci0KLQkJCQkvKgotCQkJCSAqIHllcyB3ZSBhcmUgdW5tYXBwaW5nIGJvdGggX3BhZ2UgYW5kIF9zaW5nbGUKLQkJCQkgKiBhbGxvYydkIHJlZ2lvbnMgd2l0aCB1bm1hcF9wYWdlLiBJcyB0aGlzCi0JCQkJICogKnJlYWxseSogdGhhdCBiYWQ/Ci0JCQkJICovCi0JCQkJcGNpX3VubWFwX3BhZ2UoaW9hdF9jaGFuLT5kZXZpY2UtPnBkZXYsCi0JCQkJCQlwY2lfdW5tYXBfYWRkcihkZXNjLCBkc3QpLAotCQkJCQkJcGNpX3VubWFwX2xlbihkZXNjLCBsZW4pLAotCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCQlwY2lfdW5tYXBfcGFnZShpb2F0X2NoYW4tPmRldmljZS0+cGRldiwKLQkJCQkJCXBjaV91bm1hcF9hZGRyKGRlc2MsIHNyYyksCi0JCQkJCQlwY2lfdW5tYXBfbGVuKGRlc2MsIGxlbiksCi0JCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQorCQkJCWlvYXRfZG1hX3VubWFwKGlvYXRfY2hhbiwgZGVzYyk7CiAJCQkJaWYgKGRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrKSB7CiAJCQkJCWRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrKGRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrX3BhcmFtKTsKIAkJCQkJZGVzYy0+YXN5bmNfdHguY2FsbGJhY2sgPSBOVUxMOwpAQCAtODYyLDYgKzExNzgsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgSU9BVF9WRVJfMl8wOgorCWNhc2UgSU9BVF9WRVJfM18wOgogCQkvKiBoYXMgc29tZSBvdGhlciB0aHJlYWQgaGFzIGFscmVhZHkgY2xlYW5lZCB1cD8gKi8KIAkJaWYgKGlvYXRfY2hhbi0+dXNlZF9kZXNjLnByZXYgPT0gTlVMTCkKIAkJCWJyZWFrOwpAQCAtODg5LDE2ICsxMjA2LDcgQEAKIAkJCQlpZiAoZGVzYy0+YXN5bmNfdHguY29va2llKSB7CiAJCQkJCWNvb2tpZSA9IGRlc2MtPmFzeW5jX3R4LmNvb2tpZTsKIAkJCQkJZGVzYy0+YXN5bmNfdHguY29va2llID0gMDsKLQotCQkJCQlwY2lfdW5tYXBfcGFnZShpb2F0X2NoYW4tPmRldmljZS0+cGRldiwKLQkJCQkJCSAgICAgIHBjaV91bm1hcF9hZGRyKGRlc2MsIGRzdCksCi0JCQkJCQkgICAgICBwY2lfdW5tYXBfbGVuKGRlc2MsIGxlbiksCi0JCQkJCQkgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJCQlwY2lfdW5tYXBfcGFnZShpb2F0X2NoYW4tPmRldmljZS0+cGRldiwKLQkJCQkJCSAgICAgIHBjaV91bm1hcF9hZGRyKGRlc2MsIHNyYyksCi0JCQkJCQkgICAgICBwY2lfdW5tYXBfbGVuKGRlc2MsIGxlbiksCi0JCQkJCQkgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQorCQkJCQlpb2F0X2RtYV91bm1hcChpb2F0X2NoYW4sIGRlc2MpOwogCQkJCQlpZiAoZGVzYy0+YXN5bmNfdHguY2FsbGJhY2spIHsKIAkJCQkJCWRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrKGRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrX3BhcmFtKTsKIAkJCQkJCWRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrID0gTlVMTDsKQEAgLTk0Myw2ICsxMjUxLDcgQEAKIAogCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKIAlsYXN0X2NvbXBsZXRlID0gaW9hdF9jaGFuLT5jb21wbGV0ZWRfY29va2llOworCWlvYXRfY2hhbi0+d2F0Y2hkb2dfdGNwX2Nvb2tpZSA9IGNvb2tpZTsKIAogCWlmIChkb25lKQogCQkqZG9uZSA9IGxhc3RfY29tcGxldGU7CkBAIC05NzMsMTAgKzEyODIsMTkgQEAKIAlzcGluX2xvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKIAogCWRlc2MgPSBpb2F0X2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbik7CisKKwlpZiAoIWRlc2MpIHsKKwkJZGV2X2VycigmaW9hdF9jaGFuLT5kZXZpY2UtPnBkZXYtPmRldiwKKwkJCSJVbmFibGUgdG8gc3RhcnQgbnVsbCBkZXNjIC0gZ2V0IG5leHQgZGVzYyBmYWlsZWRcbiIpOworCQlzcGluX3VubG9ja19iaCgmaW9hdF9jaGFuLT5kZXNjX2xvY2spOworCQlyZXR1cm47CisJfQorCiAJZGVzYy0+aHctPmN0bCA9IElPQVRfRE1BX0RFU0NSSVBUT1JfTlVMCiAJCQkJfCBJT0FUX0RNQV9ERVNDUklQVE9SX0NUTF9JTlRfR04KIAkJCQl8IElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0NQX1NUUzsKLQlkZXNjLT5ody0+c2l6ZSA9IDA7CisJLyogc2V0IHNpemUgdG8gbm9uLXplcm8gdmFsdWUgKGNoYW5uZWwgcmV0dXJucyBlcnJvciB3aGVuIHNpemUgaXMgMCkgKi8KKwlkZXNjLT5ody0+c2l6ZSA9IE5VTExfREVTQ19CVUZGRVJfU0laRTsKIAlkZXNjLT5ody0+c3JjX2FkZHIgPSAwOwogCWRlc2MtPmh3LT5kc3RfYWRkciA9IDA7CiAJYXN5bmNfdHhfYWNrKCZkZXNjLT5hc3luY190eCk7CkBAIC05OTQsNiArMTMxMiw3IEBACiAJCQkrIElPQVRfQ0hBTkNNRF9PRkZTRVQoaW9hdF9jaGFuLT5kZXZpY2UtPnZlcnNpb24pKTsKIAkJYnJlYWs7CiAJY2FzZSBJT0FUX1ZFUl8yXzA6CisJY2FzZSBJT0FUX1ZFUl8zXzA6CiAJCXdyaXRlbCgoKHU2NCkgZGVzYy0+YXN5bmNfdHgucGh5cykgJiAweDAwMDAwMDAwRkZGRkZGRkYsCiAJCSAgICAgICBpb2F0X2NoYW4tPnJlZ19iYXNlICsgSU9BVDJfQ0hBSU5BRERSX09GRlNFVF9MT1cpOwogCQl3cml0ZWwoKCh1NjQpIGRlc2MtPmFzeW5jX3R4LnBoeXMpID4+IDMyLApAQCAtMTA0OSw3ICsxMzY4LDcgQEAKIAlkbWFfY2hhbiA9IGNvbnRhaW5lcl9vZihkZXZpY2UtPmNvbW1vbi5jaGFubmVscy5uZXh0LAogCQkJCXN0cnVjdCBkbWFfY2hhbiwKIAkJCQlkZXZpY2Vfbm9kZSk7Ci0JaWYgKGRldmljZS0+Y29tbW9uLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyhkbWFfY2hhbikgPCAxKSB7CisJaWYgKGRldmljZS0+Y29tbW9uLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyhkbWFfY2hhbiwgTlVMTCkgPCAxKSB7CiAJCWRldl9lcnIoJmRldmljZS0+cGRldi0+ZGV2LAogCQkJInNlbGZ0ZXN0IGNhbm5vdCBhbGxvY2F0ZSBjaGFuIHJlc291cmNlXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKQEAgLTEzMTIsNiArMTYzMSw3IEBACiAJCQkJCQlpb2F0MV9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmc7CiAJCWJyZWFrOwogCWNhc2UgSU9BVF9WRVJfMl8wOgorCWNhc2UgSU9BVF9WRVJfM18wOgogCQlkZXZpY2UtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gaW9hdDJfZG1hX3ByZXBfbWVtY3B5OwogCQlkZXZpY2UtPmNvbW1vbi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9CiAJCQkJCQlpb2F0Ml9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmc7CkBAIC0xMzMxLDggKzE2NTEsMTYgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zZWxmX3Rlc3Q7CiAKKwlpb2F0X3NldF90Y3BfY29weV9icmVhayhkZXZpY2UpOworCiAJZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmZGV2aWNlLT5jb21tb24pOwogCisJaWYgKGRldmljZS0+dmVyc2lvbiAhPSBJT0FUX1ZFUl8zXzApIHsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJmRldmljZS0+d29yaywgaW9hdF9kbWFfY2hhbl93YXRjaGRvZyk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLAorCQkJCSAgICAgIFdBVENIRE9HX0RFTEFZKTsKKwl9CisKIAlyZXR1cm4gZGV2aWNlOwogCiBlcnJfc2VsZl90ZXN0OgpAQCAtMTM2NSw2ICsxNjkzLDEwIEBACiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXZpY2UtPnBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXZpY2UtPnBkZXYpOwogCisJaWYgKGRldmljZS0+dmVyc2lvbiAhPSBJT0FUX1ZFUl8zXzApIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrKTsKKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgX2NoYW4sCiAJCQkJICZkZXZpY2UtPmNvbW1vbi5jaGFubmVscywgZGV2aWNlX25vZGUpIHsKIAkJaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdGRtYS5oIGIvZHJpdmVycy9kbWEvaW9hdGRtYS5oCmluZGV4IGYyYzdmZWQuLmEzMzA2ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXRkbWEuaAorKysgYi9kcml2ZXJzL2RtYS9pb2F0ZG1hLmgKQEAgLTI3LDggKzI3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgogCi0jZGVmaW5lIElPQVRfRE1BX1ZFUlNJT04gICIyLjA0IgorI2RlZmluZSBJT0FUX0RNQV9WRVJTSU9OICAiMy4zMCIKIAogZW51bSBpb2F0X2ludGVycnVwdCB7CiAJbm9uZSA9IDAsCkBAIC00MCw2ICs0MSw3IEBACiAKICNkZWZpbmUgSU9BVF9MT1dfQ09NUExFVElPTl9NQVNLCTB4ZmZmZmZmYzAKICNkZWZpbmUgSU9BVF9ETUFfRENBX0FOWV9DUFUJCX4wCisjZGVmaW5lIElPQVRfV0FUQ0hET0dfUEVSSU9ECQkoMiAqIEhaKQogCiAKIC8qKgpAQCAtNjIsNiArNjQsNyBAQAogCXN0cnVjdCBkbWFfZGV2aWNlIGNvbW1vbjsKIAl1OCB2ZXJzaW9uOwogCWVudW0gaW9hdF9pbnRlcnJ1cHQgaXJxX21vZGU7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1s0XTsKIAlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaWR4WzRdOwogfTsKQEAgLTc1LDYgKzc4LDcgQEAKIAogCWRtYV9jb29raWVfdCBjb21wbGV0ZWRfY29va2llOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9jb21wbGV0aW9uOworCXVuc2lnbmVkIGxvbmcgbGFzdF9jb21wbGV0aW9uX3RpbWU7CiAKIAlzaXplX3QgeGZlcmNhcDsJLyogWEZFUkNBUCByZWdpc3RlciB2YWx1ZSBleHBhbmRlZCBvdXQgKi8KIApAQCAtODIsNiArODYsMTAgQEAKIAlzcGlubG9ja190IGRlc2NfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfZGVzYzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHVzZWRfZGVzYzsKKwl1bnNpZ25lZCBsb25nIHdhdGNoZG9nX2NvbXBsZXRpb247CisJaW50IHdhdGNoZG9nX3RjcF9jb29raWU7CisJdTMyIHdhdGNoZG9nX2xhc3RfdGNwX2Nvb2tpZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAKIAlpbnQgcGVuZGluZzsKIAlpbnQgZG1hY291bnQ7CkBAIC05OCw2ICsxMDYsNyBAQAogCQkJdTMyIGhpZ2g7CiAJCX07CiAJfSAqY29tcGxldGlvbl92aXJ0OworCXVuc2lnbmVkIGxvbmcgbGFzdF9jb21wbF9kZXNjX2FkZHJfaHc7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGNsZWFudXBfdGFzazsKIH07CiAKQEAgLTEyMSwxNyArMTMwLDM0IEBACiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yIGFzeW5jX3R4OwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIGlvYXRfc2V0X3RjcF9jb3B5X2JyZWFrKHN0cnVjdCBpb2F0ZG1hX2RldmljZSAqZGV2KQoreworCSNpZmRlZiBDT05GSUdfTkVUX0RNQQorCXN3aXRjaCAoZGV2LT52ZXJzaW9uKSB7CisJY2FzZSBJT0FUX1ZFUl8xXzI6CisJY2FzZSBJT0FUX1ZFUl8zXzA6CisJCXN5c2N0bF90Y3BfZG1hX2NvcHlicmVhayA9IDQwOTY7CisJCWJyZWFrOworCWNhc2UgSU9BVF9WRVJfMl8wOgorCQlzeXNjdGxfdGNwX2RtYV9jb3B5YnJlYWsgPSAyMDQ4OworCQlicmVhazsKKwl9CisJI2VuZGlmCit9CisKICNpZiBkZWZpbmVkKENPTkZJR19JTlRFTF9JT0FURE1BKSB8fCBkZWZpbmVkKENPTkZJR19JTlRFTF9JT0FURE1BX01PRFVMRSkKIHN0cnVjdCBpb2F0ZG1hX2RldmljZSAqaW9hdF9kbWFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgICAgdm9pZCBfX2lvbWVtICppb2Jhc2UpOwogdm9pZCBpb2F0X2RtYV9yZW1vdmUoc3RydWN0IGlvYXRkbWFfZGV2aWNlICpkZXZpY2UpOwogc3RydWN0IGRjYV9wcm92aWRlciAqaW9hdF9kY2FfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCBfX2lvbWVtICppb2Jhc2UpOwogc3RydWN0IGRjYV9wcm92aWRlciAqaW9hdDJfZGNhX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqaW9iYXNlKTsKK3N0cnVjdCBkY2FfcHJvdmlkZXIgKmlvYXQzX2RjYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKmlvYmFzZSk7CiAjZWxzZQogI2RlZmluZSBpb2F0X2RtYV9wcm9iZShwZGV2LCBpb2Jhc2UpICAgIE5VTEwKICNkZWZpbmUgaW9hdF9kbWFfcmVtb3ZlKGRldmljZSkgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGlvYXRfZGNhX2luaXQocGRldiwgaW9iYXNlKQlOVUxMCiAjZGVmaW5lIGlvYXQyX2RjYV9pbml0KHBkZXYsIGlvYmFzZSkJTlVMTAorI2RlZmluZSBpb2F0M19kY2FfaW5pdChwZGV2LCBpb2Jhc2UpCU5VTEwKICNlbmRpZgogCiAjZW5kaWYgLyogSU9BVERNQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX2h3LmggYi9kcml2ZXJzL2RtYS9pb2F0ZG1hX2h3LmgKaW5kZXggZGQ0NzBmYS4uZjFhZTJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdGRtYV9ody5oCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRkbWFfaHcuaApAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBJT0FUX1BDSV9TSUQgICAgICAgICAgICAweDgwODYKICNkZWZpbmUgSU9BVF9WRVJfMV8yICAgICAgICAgICAgMHgxMiAgICAvKiBWZXJzaW9uIDEuMiAqLwogI2RlZmluZSBJT0FUX1ZFUl8yXzAgICAgICAgICAgICAweDIwICAgIC8qIFZlcnNpb24gMi4wICovCisjZGVmaW5lIElPQVRfVkVSXzNfMCAgICAgICAgICAgIDB4MzAgICAgLyogVmVyc2lvbiAzLjAgKi8KIAogc3RydWN0IGlvYXRfZG1hX2Rlc2NyaXB0b3IgewogCXVpbnQzMl90CXNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX3JlZ2lzdGVycy5oIGIvZHJpdmVycy9kbWEvaW9hdGRtYV9yZWdpc3RlcnMuaAppbmRleCA5ODMyZDdlLi44MjdjYjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX3JlZ2lzdGVycy5oCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRkbWFfcmVnaXN0ZXJzLmgKQEAgLTI1LDYgKzI1LDEwIEBACiAjZGVmaW5lIElPQVRfUENJX0RNQUNUUkxfRE1BX0VOCQkJMHgwMDAwMDAwMQogI2RlZmluZSBJT0FUX1BDSV9ETUFDVFJMX01TSV9FTgkJCTB4MDAwMDAwMDIKIAorI2RlZmluZSBJT0FUX1BDSV9ERVZJQ0VfSURfT0ZGU0VUCQkweDAyCisjZGVmaW5lIElPQVRfUENJX0RNQVVOQ0VSUlNUU19PRkZTRVQJCTB4MTQ4CisjZGVmaW5lIElPQVRfUENJX0NIQU5FUlJNQVNLX0lOVF9PRkZTRVQJCTB4MTg0CisKIC8qIE1NSU8gRGV2aWNlIFJlZ2lzdGVycyAqLwogI2RlZmluZSBJT0FUX0NIQU5DTlRfT0ZGU0VUCQkJMHgwMAkvKiAgOC1iaXQgKi8KIApAQCAtMTQ5LDcgKzE1MywyMyBAQAogI2RlZmluZSBJT0FUX0RDQV9HUkVRSURfVkFMSUQgICAgICAgMHgyMDAwMDAwMAogI2RlZmluZSBJT0FUX0RDQV9HUkVRSURfTEFTVElEICAgICAgMHg4MDAwMDAwMAogCisjZGVmaW5lIElPQVQzX0NTSV9DQVBBQklMSVRZX09GRlNFVCAweDA4CisjZGVmaW5lIElPQVQzX0NTSV9DQVBBQklMSVRZX1BSRUZFVENIICAgIDB4MQogCisjZGVmaW5lIElPQVQzX1BDSV9DQVBBQklMSVRZX09GRlNFVCAweDBBCisjZGVmaW5lIElPQVQzX1BDSV9DQVBBQklMSVRZX01FTVdSICAweDEKKworI2RlZmluZSBJT0FUM19DU0lfQ09OVFJPTF9PRkZTRVQgICAgMHgwQworI2RlZmluZSBJT0FUM19DU0lfQ09OVFJPTF9QUkVGRVRDSCAgMHgxCisKKyNkZWZpbmUgSU9BVDNfUENJX0NPTlRST0xfT0ZGU0VUICAgIDB4MEUKKyNkZWZpbmUgSU9BVDNfUENJX0NPTlRST0xfTUVNV1IgICAgIDB4MQorCisjZGVmaW5lIElPQVQzX0FQSUNJRF9UQUdfTUFQX09GRlNFVCAweDEwCisjZGVmaW5lIElPQVQzX0FQSUNJRF9UQUdfTUFQX09GRlNFVF9MT1cgIDB4MTAKKyNkZWZpbmUgSU9BVDNfQVBJQ0lEX1RBR19NQVBfT0ZGU0VUX0hJR0ggMHgxNAorCisjZGVmaW5lIElPQVQzX0RDQV9HUkVRSURfT0ZGU0VUICAgICAweDAyCiAKICNkZWZpbmUgSU9BVDFfQ0hBSU5BRERSX09GRlNFVAkJMHgwQwkvKiA2NC1iaXQgRGVzY3JpcHRvciBDaGFpbiBBZGRyZXNzIFJlZ2lzdGVyICovCiAjZGVmaW5lIElPQVQyX0NIQUlOQUREUl9PRkZTRVQJCTB4MTAJLyogNjQtYml0IERlc2NyaXB0b3IgQ2hhaW4gQWRkcmVzcyBSZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYyBiL2RyaXZlcnMvZG1hL2lvcC1hZG1hLmMKaW5kZXggMGVjMGY0My4uODViZmViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb3AtYWRtYS5jCkBAIC04MiwxNyArODIsMjQgQEAKIAkJCXN0cnVjdCBkZXZpY2UgKmRldiA9CiAJCQkJJmlvcF9jaGFuLT5kZXZpY2UtPnBkZXYtPmRldjsKIAkJCXUzMiBsZW4gPSB1bm1hcC0+dW5tYXBfbGVuOwotCQkJdTMyIHNyY19jbnQgPSB1bm1hcC0+dW5tYXBfc3JjX2NudDsKLQkJCWRtYV9hZGRyX3QgYWRkciA9IGlvcF9kZXNjX2dldF9kZXN0X2FkZHIodW5tYXAsCi0JCQkJaW9wX2NoYW4pOworCQkJZW51bSBkbWFfY3RybF9mbGFncyBmbGFncyA9IGRlc2MtPmFzeW5jX3R4LmZsYWdzOworCQkJdTMyIHNyY19jbnQ7CisJCQlkbWFfYWRkcl90IGFkZHI7CiAKLQkJCWRtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwotCQkJd2hpbGUgKHNyY19jbnQtLSkgewotCQkJCWFkZHIgPSBpb3BfZGVzY19nZXRfc3JjX2FkZHIodW5tYXAsCi0JCQkJCQkJaW9wX2NoYW4sCi0JCQkJCQkJc3JjX2NudCk7Ci0JCQkJZG1hX3VubWFwX3BhZ2UoZGV2LCBhZGRyLCBsZW4sCi0JCQkJCURNQV9UT19ERVZJQ0UpOworCQkJaWYgKCEoZmxhZ3MgJiBETUFfQ09NUExfU0tJUF9ERVNUX1VOTUFQKSkgeworCQkJCWFkZHIgPSBpb3BfZGVzY19nZXRfZGVzdF9hZGRyKHVubWFwLCBpb3BfY2hhbik7CisJCQkJZG1hX3VubWFwX3BhZ2UoZGV2LCBhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJCQl9CisKKwkJCWlmICghKGZsYWdzICYgRE1BX0NPTVBMX1NLSVBfU1JDX1VOTUFQKSkgeworCQkJCXNyY19jbnQgPSB1bm1hcC0+dW5tYXBfc3JjX2NudDsKKwkJCQl3aGlsZSAoc3JjX2NudC0tKSB7CisJCQkJCWFkZHIgPSBpb3BfZGVzY19nZXRfc3JjX2FkZHIodW5tYXAsCisJCQkJCQkJCSAgICAgaW9wX2NoYW4sCisJCQkJCQkJCSAgICAgc3JjX2NudCk7CisJCQkJCWRtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgbGVuLAorCQkJCQkJICAgICAgIERNQV9UT19ERVZJQ0UpOworCQkJCX0KIAkJCX0KIAkJCWRlc2MtPmdyb3VwX2hlYWQgPSBOVUxMOwogCQl9CkBAIC0zNjYsOCArMzczLDggQEAKIAlpZiAoIXJldHJ5KyspCiAJCWdvdG8gcmV0cnk7CiAKLQkvKiB0cnkgdG8gZnJlZSBzb21lIHNsb3RzIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzICovCi0JdGFza2xldF9zY2hlZHVsZSgmaW9wX2NoYW4tPmlycV90YXNrbGV0KTsKKwkvKiBwZXJmb3JtIGRpcmVjdCByZWNsYWltIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzICovCisJX19pb3BfYWRtYV9zbG90X2NsZWFudXAoaW9wX2NoYW4pOwogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00NDMsOCArNDUwLDE4IEBACiBzdGF0aWMgdm9pZCBpb3BfY2hhbl9zdGFydF9udWxsX21lbWNweShzdHJ1Y3QgaW9wX2FkbWFfY2hhbiAqaW9wX2NoYW4pOwogc3RhdGljIHZvaWQgaW9wX2NoYW5fc3RhcnRfbnVsbF94b3Ioc3RydWN0IGlvcF9hZG1hX2NoYW4gKmlvcF9jaGFuKTsKIAotLyogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBkZXNjcmlwdG9ycyAqLwotc3RhdGljIGludCBpb3BfYWRtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCisvKioKKyAqIGlvcF9hZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzIC0gIHJldHVybnMgdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgZGVzY3JpcHRvcnMKKyAqIEBjaGFuIC0gYWxsb2NhdGUgZGVzY3JpcHRvciByZXNvdXJjZXMgZm9yIHRoaXMgY2hhbm5lbAorICogQGNsaWVudCAtIGN1cnJlbnQgY2xpZW50IHJlcXVlc3RpbmcgdGhlIGNoYW5uZWwgYmUgcmVhZHkgZm9yIHJlcXVlc3RzCisgKgorICogTm90ZTogV2Uga2VlcCB0aGUgc2xvdHMgZm9yIDEgb3BlcmF0aW9uIG9uIGlvcF9jaGFuLT5jaGFpbiBhdCBhbGwgdGltZXMuICBUbworICogYXZvaWQgZGVhZGxvY2ssIHZpYSBhc3luY194b3IsIG51bV9kZXNjc19pbl9wb29sIG11c3QgYXQgYSBtaW5pbXVtIGJlCisgKiBncmVhdGVyIHRoYW4gMnggdGhlIG51bWJlciBzbG90cyBuZWVkZWQgdG8gc2F0aXNmeSBhIGRldmljZS0+bWF4X3hvcgorICogcmVxdWVzdC4KKyAqICovCitzdGF0aWMgaW50IGlvcF9hZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCQkJIHN0cnVjdCBkbWFfY2xpZW50ICpjbGllbnQpCiB7CiAJY2hhciAqaHdfZGVzYzsKIAlpbnQgaWR4OwpAQCAtODM4LDcgKzg1NSw3IEBACiAJZG1hX2NoYW4gPSBjb250YWluZXJfb2YoZGV2aWNlLT5jb21tb24uY2hhbm5lbHMubmV4dCwKIAkJCQlzdHJ1Y3QgZG1hX2NoYW4sCiAJCQkJZGV2aWNlX25vZGUpOwotCWlmIChpb3BfYWRtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhkbWFfY2hhbikgPCAxKSB7CisJaWYgKGlvcF9hZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKGRtYV9jaGFuLCBOVUxMKSA8IDEpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTM2LDcgKzk1Myw3IEBACiAJZG1hX2NoYW4gPSBjb250YWluZXJfb2YoZGV2aWNlLT5jb21tb24uY2hhbm5lbHMubmV4dCwKIAkJCQlzdHJ1Y3QgZG1hX2NoYW4sCiAJCQkJZGV2aWNlX25vZGUpOwotCWlmIChpb3BfYWRtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhkbWFfY2hhbikgPCAxKSB7CisJaWYgKGlvcF9hZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKGRtYV9jaGFuLCBOVUxMKSA8IDEpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTM4Nyw2ICsxNDA0LDggQEAKIAlzcGluX3VubG9ja19iaCgmaW9wX2NoYW4tPmxvY2spOwogfQogCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmlvcC1hZG1hIik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlvcF9hZG1hX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaW9wX2FkbWFfcHJvYmUsCiAJLnJlbW92ZQkJPSBpb3BfYWRtYV9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tdl94b3IuYyBiL2RyaXZlcnMvZG1hL212X3hvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZTQ0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9tdl94b3IuYwpAQCAtMCwwICsxLDEzNzUgQEAKKy8qCisgKiBvZmZsb2FkIGVuZ2luZSBkcml2ZXIgZm9yIHRoZSBNYXJ2ZWxsIFhPUiBlbmdpbmUKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYXN5bmNfdHguaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1vcmlvbi9tdl94b3IuaD4KKyNpbmNsdWRlICJtdl94b3IuaCIKKworc3RhdGljIHZvaWQgbXZfeG9yX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKKworI2RlZmluZSB0b19tdl94b3JfY2hhbihjaGFuKQkJXAorCWNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgbXZfeG9yX2NoYW4sIGNvbW1vbikKKworI2RlZmluZSB0b19tdl94b3JfZGV2aWNlKGRldikJCVwKKwljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbXZfeG9yX2RldmljZSwgY29tbW9uKQorCisjZGVmaW5lIHRvX212X3hvcl9zbG90KHR4KQkJXAorCWNvbnRhaW5lcl9vZih0eCwgc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QsIGFzeW5jX3R4KQorCitzdGF0aWMgdm9pZCBtdl9kZXNjX2luaXQoc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKmRlc2MsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IG12X3hvcl9kZXNjICpod19kZXNjID0gZGVzYy0+aHdfZGVzYzsKKworCWh3X2Rlc2MtPnN0YXR1cyA9ICgxIDw8IDMxKTsKKwlod19kZXNjLT5waHlfbmV4dF9kZXNjID0gMDsKKwlod19kZXNjLT5kZXNjX2NvbW1hbmQgPSAoMSA8PCAzMSk7Cit9CisKK3N0YXRpYyB1MzIgbXZfZGVzY19nZXRfZGVzdF9hZGRyKHN0cnVjdCBtdl94b3JfZGVzY19zbG90ICpkZXNjKQoreworCXN0cnVjdCBtdl94b3JfZGVzYyAqaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisJcmV0dXJuIGh3X2Rlc2MtPnBoeV9kZXN0X2FkZHI7Cit9CisKK3N0YXRpYyB1MzIgbXZfZGVzY19nZXRfc3JjX2FkZHIoc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKmRlc2MsCisJCQkJaW50IHNyY19pZHgpCit7CisJc3RydWN0IG12X3hvcl9kZXNjICpod19kZXNjID0gZGVzYy0+aHdfZGVzYzsKKwlyZXR1cm4gaHdfZGVzYy0+cGh5X3NyY19hZGRyW3NyY19pZHhdOworfQorCisKK3N0YXRpYyB2b2lkIG12X2Rlc2Nfc2V0X2J5dGVfY291bnQoc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKmRlc2MsCisJCQkJICAgdTMyIGJ5dGVfY291bnQpCit7CisJc3RydWN0IG12X3hvcl9kZXNjICpod19kZXNjID0gZGVzYy0+aHdfZGVzYzsKKwlod19kZXNjLT5ieXRlX2NvdW50ID0gYnl0ZV9jb3VudDsKK30KKworc3RhdGljIHZvaWQgbXZfZGVzY19zZXRfbmV4dF9kZXNjKHN0cnVjdCBtdl94b3JfZGVzY19zbG90ICpkZXNjLAorCQkJCSAgdTMyIG5leHRfZGVzY19hZGRyKQoreworCXN0cnVjdCBtdl94b3JfZGVzYyAqaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisJQlVHX09OKGh3X2Rlc2MtPnBoeV9uZXh0X2Rlc2MpOworCWh3X2Rlc2MtPnBoeV9uZXh0X2Rlc2MgPSBuZXh0X2Rlc2NfYWRkcjsKK30KKworc3RhdGljIHZvaWQgbXZfZGVzY19jbGVhcl9uZXh0X2Rlc2Moc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKmRlc2MpCit7CisJc3RydWN0IG12X3hvcl9kZXNjICpod19kZXNjID0gZGVzYy0+aHdfZGVzYzsKKwlod19kZXNjLT5waHlfbmV4dF9kZXNjID0gMDsKK30KKworc3RhdGljIHZvaWQgbXZfZGVzY19zZXRfYmxvY2tfZmlsbF92YWwoc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKmRlc2MsIHUzMiB2YWwpCit7CisJZGVzYy0+dmFsdWUgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIG12X2Rlc2Nfc2V0X2Rlc3RfYWRkcihzdHJ1Y3QgbXZfeG9yX2Rlc2Nfc2xvdCAqZGVzYywKKwkJCQkgIGRtYV9hZGRyX3QgYWRkcikKK3sKKwlzdHJ1Y3QgbXZfeG9yX2Rlc2MgKmh3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCWh3X2Rlc2MtPnBoeV9kZXN0X2FkZHIgPSBhZGRyOworfQorCitzdGF0aWMgaW50IG12X2NoYW5fbWVtc2V0X3Nsb3RfY291bnQoc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBtdl9jaGFuX21lbWNweV9zbG90X2NvdW50KGMpIG12X2NoYW5fbWVtc2V0X3Nsb3RfY291bnQoYykKKworc3RhdGljIHZvaWQgbXZfZGVzY19zZXRfc3JjX2FkZHIoc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKmRlc2MsCisJCQkJIGludCBpbmRleCwgZG1hX2FkZHJfdCBhZGRyKQoreworCXN0cnVjdCBtdl94b3JfZGVzYyAqaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisJaHdfZGVzYy0+cGh5X3NyY19hZGRyW2luZGV4XSA9IGFkZHI7CisJaWYgKGRlc2MtPnR5cGUgPT0gRE1BX1hPUikKKwkJaHdfZGVzYy0+ZGVzY19jb21tYW5kIHw9ICgxIDw8IGluZGV4KTsKK30KKworc3RhdGljIHUzMiBtdl9jaGFuX2dldF9jdXJyZW50X2Rlc2Moc3RydWN0IG12X3hvcl9jaGFuICpjaGFuKQoreworCXJldHVybiBfX3Jhd19yZWFkbChYT1JfQ1VSUl9ERVNDKGNoYW4pKTsKK30KKworc3RhdGljIHZvaWQgbXZfY2hhbl9zZXRfbmV4dF9kZXNjcmlwdG9yKHN0cnVjdCBtdl94b3JfY2hhbiAqY2hhbiwKKwkJCQkJdTMyIG5leHRfZGVzY19hZGRyKQoreworCV9fcmF3X3dyaXRlbChuZXh0X2Rlc2NfYWRkciwgWE9SX05FWFRfREVTQyhjaGFuKSk7Cit9CisKK3N0YXRpYyB2b2lkIG12X2NoYW5fc2V0X2Rlc3RfcG9pbnRlcihzdHJ1Y3QgbXZfeG9yX2NoYW4gKmNoYW4sIHUzMiBkZXNjX2FkZHIpCit7CisJX19yYXdfd3JpdGVsKGRlc2NfYWRkciwgWE9SX0RFU1RfUE9JTlRFUihjaGFuKSk7Cit9CisKK3N0YXRpYyB2b2lkIG12X2NoYW5fc2V0X2Jsb2NrX3NpemUoc3RydWN0IG12X3hvcl9jaGFuICpjaGFuLCB1MzIgYmxvY2tfc2l6ZSkKK3sKKwlfX3Jhd193cml0ZWwoYmxvY2tfc2l6ZSwgWE9SX0JMT0NLX1NJWkUoY2hhbikpOworfQorCitzdGF0aWMgdm9pZCBtdl9jaGFuX3NldF92YWx1ZShzdHJ1Y3QgbXZfeG9yX2NoYW4gKmNoYW4sIHUzMiB2YWx1ZSkKK3sKKwlfX3Jhd193cml0ZWwodmFsdWUsIFhPUl9JTklUX1ZBTFVFX0xPVyhjaGFuKSk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBYT1JfSU5JVF9WQUxVRV9ISUdIKGNoYW4pKTsKK30KKworc3RhdGljIHZvaWQgbXZfY2hhbl91bm1hc2tfaW50ZXJydXB0cyhzdHJ1Y3QgbXZfeG9yX2NoYW4gKmNoYW4pCit7CisJdTMyIHZhbCA9IF9fcmF3X3JlYWRsKFhPUl9JTlRSX01BU0soY2hhbikpOworCXZhbCB8PSBYT1JfSU5UUl9NQVNLX1ZBTFVFIDw8IChjaGFuLT5pZHggKiAxNik7CisJX19yYXdfd3JpdGVsKHZhbCwgWE9SX0lOVFJfTUFTSyhjaGFuKSk7Cit9CisKK3N0YXRpYyB1MzIgbXZfY2hhbl9nZXRfaW50cl9jYXVzZShzdHJ1Y3QgbXZfeG9yX2NoYW4gKmNoYW4pCit7CisJdTMyIGludHJfY2F1c2UgPSBfX3Jhd19yZWFkbChYT1JfSU5UUl9DQVVTRShjaGFuKSk7CisJaW50cl9jYXVzZSA9IChpbnRyX2NhdXNlID4+IChjaGFuLT5pZHggKiAxNikpICYgMHhGRkZGOworCXJldHVybiBpbnRyX2NhdXNlOworfQorCitzdGF0aWMgaW50IG12X2lzX2Vycl9pbnRyKHUzMiBpbnRyX2NhdXNlKQoreworCWlmIChpbnRyX2NhdXNlICYgKCgxPDw0KXwoMTw8NSl8KDE8PDYpfCgxPDw3KXwoMTw8OCl8KDE8PDkpKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXZfeG9yX2RldmljZV9jbGVhcl9lb2NfY2F1c2Uoc3RydWN0IG12X3hvcl9jaGFuICpjaGFuKQoreworCXUzMiB2YWwgPSAoMSA8PCAoMSArIChjaGFuLT5pZHggKiAxNikpKTsKKwlkZXZfZGJnKGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzLCB2YWwgMHglMDh4XG4iLCBfX2Z1bmNfXywgdmFsKTsKKwlfX3Jhd193cml0ZWwodmFsLCBYT1JfSU5UUl9DQVVTRShjaGFuKSk7Cit9CisKK3N0YXRpYyB2b2lkIG12X3hvcl9kZXZpY2VfY2xlYXJfZXJyX3N0YXR1cyhzdHJ1Y3QgbXZfeG9yX2NoYW4gKmNoYW4pCit7CisJdTMyIHZhbCA9IDB4RkZGRjAwMDAgPj4gKGNoYW4tPmlkeCAqIDE2KTsKKwlfX3Jhd193cml0ZWwodmFsLCBYT1JfSU5UUl9DQVVTRShjaGFuKSk7Cit9CisKK3N0YXRpYyBpbnQgbXZfY2FuX2NoYWluKHN0cnVjdCBtdl94b3JfZGVzY19zbG90ICpkZXNjKQoreworCXN0cnVjdCBtdl94b3JfZGVzY19zbG90ICpjaGFpbl9vbGRfdGFpbCA9IGxpc3RfZW50cnkoCisJCWRlc2MtPmNoYWluX25vZGUucHJldiwgc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QsIGNoYWluX25vZGUpOworCisJaWYgKGNoYWluX29sZF90YWlsLT50eXBlICE9IGRlc2MtPnR5cGUpCisJCXJldHVybiAwOworCWlmIChkZXNjLT50eXBlID09IERNQV9NRU1TRVQpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG12X3NldF9tb2RlKHN0cnVjdCBtdl94b3JfY2hhbiAqY2hhbiwKKwkJCSAgICAgICBlbnVtIGRtYV90cmFuc2FjdGlvbl90eXBlIHR5cGUpCit7CisJdTMyIG9wX21vZGU7CisJdTMyIGNvbmZpZyA9IF9fcmF3X3JlYWRsKFhPUl9DT05GSUcoY2hhbikpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBETUFfWE9SOgorCQlvcF9tb2RlID0gWE9SX09QRVJBVElPTl9NT0RFX1hPUjsKKwkJYnJlYWs7CisJY2FzZSBETUFfTUVNQ1BZOgorCQlvcF9tb2RlID0gWE9SX09QRVJBVElPTl9NT0RFX01FTUNQWTsKKwkJYnJlYWs7CisJY2FzZSBETUFfTUVNU0VUOgorCQlvcF9tb2RlID0gWE9SX09QRVJBVElPTl9NT0RFX01FTVNFVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAorCQkJICAgImVycm9yOiB1bnN1cHBvcnRlZCBvcGVyYXRpb24gJWQuXG4iLAorCQkJICAgdHlwZSk7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJY29uZmlnICY9IH4weDc7CisJY29uZmlnIHw9IG9wX21vZGU7CisJX19yYXdfd3JpdGVsKGNvbmZpZywgWE9SX0NPTkZJRyhjaGFuKSk7CisJY2hhbi0+Y3VycmVudF90eXBlID0gdHlwZTsKK30KKworc3RhdGljIHZvaWQgbXZfY2hhbl9hY3RpdmF0ZShzdHJ1Y3QgbXZfeG9yX2NoYW4gKmNoYW4pCit7CisJdTMyIGFjdGl2YXRpb247CisKKwlkZXZfZGJnKGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiBhY3RpdmF0ZSBjaGFuLlxuIik7CisJYWN0aXZhdGlvbiA9IF9fcmF3X3JlYWRsKFhPUl9BQ1RJVkFUSU9OKGNoYW4pKTsKKwlhY3RpdmF0aW9uIHw9IDB4MTsKKwlfX3Jhd193cml0ZWwoYWN0aXZhdGlvbiwgWE9SX0FDVElWQVRJT04oY2hhbikpOworfQorCitzdGF0aWMgY2hhciBtdl9jaGFuX2lzX2J1c3koc3RydWN0IG12X3hvcl9jaGFuICpjaGFuKQoreworCXUzMiBzdGF0ZSA9IF9fcmF3X3JlYWRsKFhPUl9BQ1RJVkFUSU9OKGNoYW4pKTsKKworCXN0YXRlID0gKHN0YXRlID4+IDQpICYgMHgzOworCisJcmV0dXJuIChzdGF0ZSA9PSAxKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IG12X2NoYW5feG9yX3Nsb3RfY291bnQoc2l6ZV90IGxlbiwgaW50IHNyY19jbnQpCit7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogbXZfeG9yX2ZyZWVfc2xvdHMgLSBmbGFncyBkZXNjcmlwdG9yIHNsb3RzIGZvciByZXVzZQorICogQHNsb3Q6IFNsb3QgdG8gZnJlZQorICogQ2FsbGVyIG11c3QgaG9sZCAmbXZfY2hhbi0+bG9jayB3aGlsZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgbXZfeG9yX2ZyZWVfc2xvdHMoc3RydWN0IG12X3hvcl9jaGFuICptdl9jaGFuLAorCQkJICAgICAgc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKnNsb3QpCit7CisJZGV2X2RiZyhtdl9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICIlcyAlZCBzbG90ICVwXG4iLAorCQlfX2Z1bmNfXywgX19MSU5FX18sIHNsb3QpOworCisJc2xvdC0+c2xvdHNfcGVyX29wID0gMDsKKworfQorCisvKgorICogbXZfeG9yX3N0YXJ0X25ld19jaGFpbiAtIHByb2dyYW0gdGhlIGVuZ2luZSB0byBvcGVyYXRlIG9uIG5ldyBjaGFpbiBoZWFkZWQgYnkKKyAqIHN3X2Rlc2MKKyAqIENhbGxlciBtdXN0IGhvbGQgJm12X2NoYW4tPmxvY2sgd2hpbGUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIG12X3hvcl9zdGFydF9uZXdfY2hhaW4oc3RydWN0IG12X3hvcl9jaGFuICptdl9jaGFuLAorCQkJCSAgIHN0cnVjdCBtdl94b3JfZGVzY19zbG90ICpzd19kZXNjKQoreworCWRldl9kYmcobXZfY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LCAiJXMgJWQ6IHN3X2Rlc2MgJXBcbiIsCisJCV9fZnVuY19fLCBfX0xJTkVfXywgc3dfZGVzYyk7CisJaWYgKHN3X2Rlc2MtPnR5cGUgIT0gbXZfY2hhbi0+Y3VycmVudF90eXBlKQorCQltdl9zZXRfbW9kZShtdl9jaGFuLCBzd19kZXNjLT50eXBlKTsKKworCWlmIChzd19kZXNjLT50eXBlID09IERNQV9NRU1TRVQpIHsKKwkJLyogZm9yIG1lbXNldCByZXF1ZXN0cyB3ZSBuZWVkIHRvIHByb2dyYW0gdGhlIGVuZ2luZSwgbm8KKwkJICogZGVzY3JpcHRvcnMgdXNlZC4KKwkJICovCisJCXN0cnVjdCBtdl94b3JfZGVzYyAqaHdfZGVzYyA9IHN3X2Rlc2MtPmh3X2Rlc2M7CisJCW12X2NoYW5fc2V0X2Rlc3RfcG9pbnRlcihtdl9jaGFuLCBod19kZXNjLT5waHlfZGVzdF9hZGRyKTsKKwkJbXZfY2hhbl9zZXRfYmxvY2tfc2l6ZShtdl9jaGFuLCBzd19kZXNjLT51bm1hcF9sZW4pOworCQltdl9jaGFuX3NldF92YWx1ZShtdl9jaGFuLCBzd19kZXNjLT52YWx1ZSk7CisJfSBlbHNlIHsKKwkJLyogc2V0IHRoZSBoYXJkd2FyZSBjaGFpbiAqLworCQltdl9jaGFuX3NldF9uZXh0X2Rlc2NyaXB0b3IobXZfY2hhbiwgc3dfZGVzYy0+YXN5bmNfdHgucGh5cyk7CisJfQorCW12X2NoYW4tPnBlbmRpbmcgKz0gc3dfZGVzYy0+c2xvdF9jbnQ7CisJbXZfeG9yX2lzc3VlX3BlbmRpbmcoJm12X2NoYW4tPmNvbW1vbik7Cit9CisKK3N0YXRpYyBkbWFfY29va2llX3QKK212X3hvcl9ydW5fdHhfY29tcGxldGVfYWN0aW9ucyhzdHJ1Y3QgbXZfeG9yX2Rlc2Nfc2xvdCAqZGVzYywKKwlzdHJ1Y3QgbXZfeG9yX2NoYW4gKm12X2NoYW4sIGRtYV9jb29raWVfdCBjb29raWUpCit7CisJQlVHX09OKGRlc2MtPmFzeW5jX3R4LmNvb2tpZSA8IDApOworCisJaWYgKGRlc2MtPmFzeW5jX3R4LmNvb2tpZSA+IDApIHsKKwkJY29va2llID0gZGVzYy0+YXN5bmNfdHguY29va2llOworCisJCS8qIGNhbGwgdGhlIGNhbGxiYWNrIChtdXN0IG5vdCBzbGVlcCBvciBzdWJtaXQgbmV3CisJCSAqIG9wZXJhdGlvbnMgdG8gdGhpcyBjaGFubmVsKQorCQkgKi8KKwkJaWYgKGRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrKQorCQkJZGVzYy0+YXN5bmNfdHguY2FsbGJhY2soCisJCQkJZGVzYy0+YXN5bmNfdHguY2FsbGJhY2tfcGFyYW0pOworCisJCS8qIHVubWFwIGRtYSBhZGRyZXNzZXMKKwkJICogKHVubWFwX3NpbmdsZSB2cyB1bm1hcF9wYWdlPykKKwkJICovCisJCWlmIChkZXNjLT5ncm91cF9oZWFkICYmIGRlc2MtPnVubWFwX2xlbikgeworCQkJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKnVubWFwID0gZGVzYy0+Z3JvdXBfaGVhZDsKKwkJCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQkJJm12X2NoYW4tPmRldmljZS0+cGRldi0+ZGV2OworCQkJdTMyIGxlbiA9IHVubWFwLT51bm1hcF9sZW47CisJCQllbnVtIGRtYV9jdHJsX2ZsYWdzIGZsYWdzID0gZGVzYy0+YXN5bmNfdHguZmxhZ3M7CisJCQl1MzIgc3JjX2NudDsKKwkJCWRtYV9hZGRyX3QgYWRkcjsKKworCQkJaWYgKCEoZmxhZ3MgJiBETUFfQ09NUExfU0tJUF9ERVNUX1VOTUFQKSkgeworCQkJCWFkZHIgPSBtdl9kZXNjX2dldF9kZXN0X2FkZHIodW5tYXApOworCQkJCWRtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCQkJfQorCisJCQlpZiAoIShmbGFncyAmIERNQV9DT01QTF9TS0lQX1NSQ19VTk1BUCkpIHsKKwkJCQlzcmNfY250ID0gdW5tYXAtPnVubWFwX3NyY19jbnQ7CisJCQkJd2hpbGUgKHNyY19jbnQtLSkgeworCQkJCQlhZGRyID0gbXZfZGVzY19nZXRfc3JjX2FkZHIodW5tYXAsCisJCQkJCQkJCSAgICBzcmNfY250KTsKKwkJCQkJZG1hX3VubWFwX3BhZ2UoZGV2LCBhZGRyLCBsZW4sCisJCQkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCQkJfQorCQkJfQorCQkJZGVzYy0+Z3JvdXBfaGVhZCA9IE5VTEw7CisJCX0KKwl9CisKKwkvKiBydW4gZGVwZW5kZW50IG9wZXJhdGlvbnMgKi8KKwlhc3luY190eF9ydW5fZGVwZW5kZW5jaWVzKCZkZXNjLT5hc3luY190eCk7CisKKwlyZXR1cm4gY29va2llOworfQorCitzdGF0aWMgaW50Cittdl94b3JfY2xlYW5fY29tcGxldGVkX3Nsb3RzKHN0cnVjdCBtdl94b3JfY2hhbiAqbXZfY2hhbikKK3sKKwlzdHJ1Y3QgbXZfeG9yX2Rlc2Nfc2xvdCAqaXRlciwgKl9pdGVyOworCisJZGV2X2RiZyhtdl9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICIlcyAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgX2l0ZXIsICZtdl9jaGFuLT5jb21wbGV0ZWRfc2xvdHMsCisJCQkJIGNvbXBsZXRlZF9ub2RlKSB7CisKKwkJaWYgKGFzeW5jX3R4X3Rlc3RfYWNrKCZpdGVyLT5hc3luY190eCkpIHsKKwkJCWxpc3RfZGVsKCZpdGVyLT5jb21wbGV0ZWRfbm9kZSk7CisJCQltdl94b3JfZnJlZV9zbG90cyhtdl9jaGFuLCBpdGVyKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbXZfeG9yX2NsZWFuX3Nsb3Qoc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKmRlc2MsCisJc3RydWN0IG12X3hvcl9jaGFuICptdl9jaGFuKQoreworCWRldl9kYmcobXZfY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LCAiJXMgJWQ6IGRlc2MgJXAgZmxhZ3MgJWRcbiIsCisJCV9fZnVuY19fLCBfX0xJTkVfXywgZGVzYywgZGVzYy0+YXN5bmNfdHguZmxhZ3MpOworCWxpc3RfZGVsKCZkZXNjLT5jaGFpbl9ub2RlKTsKKwkvKiB0aGUgY2xpZW50IGlzIGFsbG93ZWQgdG8gYXR0YWNoIGRlcGVuZGVudCBvcGVyYXRpb25zCisJICogdW50aWwgJ2FjaycgaXMgc2V0CisJICovCisJaWYgKCFhc3luY190eF90ZXN0X2FjaygmZGVzYy0+YXN5bmNfdHgpKSB7CisJCS8qIG1vdmUgdGhpcyBzbG90IHRvIHRoZSBjb21wbGV0ZWRfc2xvdHMgKi8KKwkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+Y29tcGxldGVkX25vZGUsICZtdl9jaGFuLT5jb21wbGV0ZWRfc2xvdHMpOworCQlyZXR1cm4gMDsKKwl9CisKKwltdl94b3JfZnJlZV9zbG90cyhtdl9jaGFuLCBkZXNjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19tdl94b3Jfc2xvdF9jbGVhbnVwKHN0cnVjdCBtdl94b3JfY2hhbiAqbXZfY2hhbikKK3sKKwlzdHJ1Y3QgbXZfeG9yX2Rlc2Nfc2xvdCAqaXRlciwgKl9pdGVyOworCWRtYV9jb29raWVfdCBjb29raWUgPSAwOworCWludCBidXN5ID0gbXZfY2hhbl9pc19idXN5KG12X2NoYW4pOworCXUzMiBjdXJyZW50X2Rlc2MgPSBtdl9jaGFuX2dldF9jdXJyZW50X2Rlc2MobXZfY2hhbik7CisJaW50IHNlZW5fY3VycmVudCA9IDA7CisKKwlkZXZfZGJnKG12X2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCWRldl9kYmcobXZfY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LCAiY3VycmVudF9kZXNjICV4XG4iLCBjdXJyZW50X2Rlc2MpOworCW12X3hvcl9jbGVhbl9jb21wbGV0ZWRfc2xvdHMobXZfY2hhbik7CisKKwkvKiBmcmVlIGNvbXBsZXRlZCBzbG90cyBmcm9tIHRoZSBjaGFpbiBzdGFydGluZyB3aXRoCisJICogdGhlIG9sZGVzdCBkZXNjcmlwdG9yCisJICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgX2l0ZXIsICZtdl9jaGFuLT5jaGFpbiwKKwkJCQkJY2hhaW5fbm9kZSkgeworCQlwcmVmZXRjaChfaXRlcik7CisJCXByZWZldGNoKCZfaXRlci0+YXN5bmNfdHgpOworCisJCS8qIGRvIG5vdCBhZHZhbmNlIHBhc3QgdGhlIGN1cnJlbnQgZGVzY3JpcHRvciBsb2FkZWQgaW50byB0aGUKKwkJICogaGFyZHdhcmUgY2hhbm5lbCwgc3Vic2VxdWVudCBkZXNjcmlwdG9ycyBhcmUgZWl0aGVyIGluCisJCSAqIHByb2Nlc3Mgb3IgaGF2ZSBub3QgYmVlbiBzdWJtaXR0ZWQKKwkJICovCisJCWlmIChzZWVuX2N1cnJlbnQpCisJCQlicmVhazsKKworCQkvKiBzdG9wIHRoZSBzZWFyY2ggaWYgd2UgcmVhY2ggdGhlIGN1cnJlbnQgZGVzY3JpcHRvciBhbmQgdGhlCisJCSAqIGNoYW5uZWwgaXMgYnVzeQorCQkgKi8KKwkJaWYgKGl0ZXItPmFzeW5jX3R4LnBoeXMgPT0gY3VycmVudF9kZXNjKSB7CisJCQlzZWVuX2N1cnJlbnQgPSAxOworCQkJaWYgKGJ1c3kpCisJCQkJYnJlYWs7CisJCX0KKworCQljb29raWUgPSBtdl94b3JfcnVuX3R4X2NvbXBsZXRlX2FjdGlvbnMoaXRlciwgbXZfY2hhbiwgY29va2llKTsKKworCQlpZiAobXZfeG9yX2NsZWFuX3Nsb3QoaXRlciwgbXZfY2hhbikpCisJCQlicmVhazsKKwl9CisKKwlpZiAoKGJ1c3kgPT0gMCkgJiYgIWxpc3RfZW1wdHkoJm12X2NoYW4tPmNoYWluKSkgeworCQlzdHJ1Y3QgbXZfeG9yX2Rlc2Nfc2xvdCAqY2hhaW5faGVhZDsKKwkJY2hhaW5faGVhZCA9IGxpc3RfZW50cnkobXZfY2hhbi0+Y2hhaW4ubmV4dCwKKwkJCQkJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QsCisJCQkJCWNoYWluX25vZGUpOworCisJCW12X3hvcl9zdGFydF9uZXdfY2hhaW4obXZfY2hhbiwgY2hhaW5faGVhZCk7CisJfQorCisJaWYgKGNvb2tpZSA+IDApCisJCW12X2NoYW4tPmNvbXBsZXRlZF9jb29raWUgPSBjb29raWU7Cit9CisKK3N0YXRpYyB2b2lkCittdl94b3Jfc2xvdF9jbGVhbnVwKHN0cnVjdCBtdl94b3JfY2hhbiAqbXZfY2hhbikKK3sKKwlzcGluX2xvY2tfYmgoJm12X2NoYW4tPmxvY2spOworCV9fbXZfeG9yX3Nsb3RfY2xlYW51cChtdl9jaGFuKTsKKwlzcGluX3VubG9ja19iaCgmbXZfY2hhbi0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG12X3hvcl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbXZfeG9yX2NoYW4gKmNoYW4gPSAoc3RydWN0IG12X3hvcl9jaGFuICopIGRhdGE7CisJX19tdl94b3Jfc2xvdF9jbGVhbnVwKGNoYW4pOworfQorCitzdGF0aWMgc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKgorbXZfeG9yX2FsbG9jX3Nsb3RzKHN0cnVjdCBtdl94b3JfY2hhbiAqbXZfY2hhbiwgaW50IG51bV9zbG90cywKKwkJICAgIGludCBzbG90c19wZXJfb3ApCit7CisJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKml0ZXIsICpfaXRlciwgKmFsbG9jX3N0YXJ0ID0gTlVMTDsKKwlMSVNUX0hFQUQoY2hhaW4pOworCWludCBzbG90c19mb3VuZCwgcmV0cnkgPSAwOworCisJLyogc3RhcnQgc2VhcmNoIGZyb20gdGhlIGxhc3QgYWxsb2NhdGVkIGRlc2NydGlwdG9yCisJICogaWYgYSBjb250aWd1b3VzIGFsbG9jYXRpb24gY2FuIG5vdCBiZSBmb3VuZCBzdGFydCBzZWFyY2hpbmcKKwkgKiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QKKwkgKi8KK3JldHJ5OgorCXNsb3RzX2ZvdW5kID0gMDsKKwlpZiAocmV0cnkgPT0gMCkKKwkJaXRlciA9IG12X2NoYW4tPmxhc3RfdXNlZDsKKwllbHNlCisJCWl0ZXIgPSBsaXN0X2VudHJ5KCZtdl9jaGFuLT5hbGxfc2xvdHMsCisJCQlzdHJ1Y3QgbXZfeG9yX2Rlc2Nfc2xvdCwKKwkJCXNsb3Rfbm9kZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfY29udGludWUoCisJCWl0ZXIsIF9pdGVyLCAmbXZfY2hhbi0+YWxsX3Nsb3RzLCBzbG90X25vZGUpIHsKKwkJcHJlZmV0Y2goX2l0ZXIpOworCQlwcmVmZXRjaCgmX2l0ZXItPmFzeW5jX3R4KTsKKwkJaWYgKGl0ZXItPnNsb3RzX3Blcl9vcCkgeworCQkJLyogZ2l2ZSB1cCBhZnRlciBmaW5kaW5nIHRoZSBmaXJzdCBidXN5IHNsb3QKKwkJCSAqIG9uIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsaXN0CisJCQkgKi8KKwkJCWlmIChyZXRyeSkKKwkJCQlicmVhazsKKworCQkJc2xvdHNfZm91bmQgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBzdGFydCB0aGUgYWxsb2NhdGlvbiBpZiB0aGUgc2xvdCBpcyBjb3JyZWN0bHkgYWxpZ25lZCAqLworCQlpZiAoIXNsb3RzX2ZvdW5kKyspCisJCQlhbGxvY19zdGFydCA9IGl0ZXI7CisKKwkJaWYgKHNsb3RzX2ZvdW5kID09IG51bV9zbG90cykgeworCQkJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKmFsbG9jX3RhaWwgPSBOVUxMOworCQkJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKmxhc3RfdXNlZCA9IE5VTEw7CisJCQlpdGVyID0gYWxsb2Nfc3RhcnQ7CisJCQl3aGlsZSAobnVtX3Nsb3RzKSB7CisJCQkJaW50IGk7CisKKwkJCQkvKiBwcmUtYWNrIGFsbCBidXQgdGhlIGxhc3QgZGVzY3JpcHRvciAqLworCQkJCWFzeW5jX3R4X2FjaygmaXRlci0+YXN5bmNfdHgpOworCisJCQkJbGlzdF9hZGRfdGFpbCgmaXRlci0+Y2hhaW5fbm9kZSwgJmNoYWluKTsKKwkJCQlhbGxvY190YWlsID0gaXRlcjsKKwkJCQlpdGVyLT5hc3luY190eC5jb29raWUgPSAwOworCQkJCWl0ZXItPnNsb3RfY250ID0gbnVtX3Nsb3RzOworCQkJCWl0ZXItPnhvcl9jaGVja19yZXN1bHQgPSBOVUxMOworCQkJCWZvciAoaSA9IDA7IGkgPCBzbG90c19wZXJfb3A7IGkrKykgeworCQkJCQlpdGVyLT5zbG90c19wZXJfb3AgPSBzbG90c19wZXJfb3AgLSBpOworCQkJCQlsYXN0X3VzZWQgPSBpdGVyOworCQkJCQlpdGVyID0gbGlzdF9lbnRyeShpdGVyLT5zbG90X25vZGUubmV4dCwKKwkJCQkJCXN0cnVjdCBtdl94b3JfZGVzY19zbG90LAorCQkJCQkJc2xvdF9ub2RlKTsKKwkJCQl9CisJCQkJbnVtX3Nsb3RzIC09IHNsb3RzX3Blcl9vcDsKKwkJCX0KKwkJCWFsbG9jX3RhaWwtPmdyb3VwX2hlYWQgPSBhbGxvY19zdGFydDsKKwkJCWFsbG9jX3RhaWwtPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKKwkJCWxpc3Rfc3BsaWNlKCZjaGFpbiwgJmFsbG9jX3RhaWwtPmFzeW5jX3R4LnR4X2xpc3QpOworCQkJbXZfY2hhbi0+bGFzdF91c2VkID0gbGFzdF91c2VkOworCQkJbXZfZGVzY19jbGVhcl9uZXh0X2Rlc2MoYWxsb2Nfc3RhcnQpOworCQkJbXZfZGVzY19jbGVhcl9uZXh0X2Rlc2MoYWxsb2NfdGFpbCk7CisJCQlyZXR1cm4gYWxsb2NfdGFpbDsKKwkJfQorCX0KKwlpZiAoIXJldHJ5KyspCisJCWdvdG8gcmV0cnk7CisKKwkvKiB0cnkgdG8gZnJlZSBzb21lIHNsb3RzIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzICovCisJdGFza2xldF9zY2hlZHVsZSgmbXZfY2hhbi0+aXJxX3Rhc2tsZXQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBkbWFfY29va2llX3QKK212X2Rlc2NfYXNzaWduX2Nvb2tpZShzdHJ1Y3QgbXZfeG9yX2NoYW4gKm12X2NoYW4sCisJCSAgICAgIHN0cnVjdCBtdl94b3JfZGVzY19zbG90ICpkZXNjKQoreworCWRtYV9jb29raWVfdCBjb29raWUgPSBtdl9jaGFuLT5jb21tb24uY29va2llOworCisJaWYgKCsrY29va2llIDwgMCkKKwkJY29va2llID0gMTsKKwltdl9jaGFuLT5jb21tb24uY29va2llID0gZGVzYy0+YXN5bmNfdHguY29va2llID0gY29va2llOworCXJldHVybiBjb29raWU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogRE1BIGVuZ2luZSBBUEkgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgZG1hX2Nvb2tpZV90Cittdl94b3JfdHhfc3VibWl0KHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCit7CisJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKnN3X2Rlc2MgPSB0b19tdl94b3Jfc2xvdCh0eCk7CisJc3RydWN0IG12X3hvcl9jaGFuICptdl9jaGFuID0gdG9fbXZfeG9yX2NoYW4odHgtPmNoYW4pOworCXN0cnVjdCBtdl94b3JfZGVzY19zbG90ICpncnBfc3RhcnQsICpvbGRfY2hhaW5fdGFpbDsKKwlkbWFfY29va2llX3QgY29va2llOworCWludCBuZXdfaHdfY2hhaW4gPSAxOworCisJZGV2X2RiZyhtdl9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSIlcyBzd19kZXNjICVwOiBhc3luY190eCAlcFxuIiwKKwkJX19mdW5jX18sIHN3X2Rlc2MsICZzd19kZXNjLT5hc3luY190eCk7CisKKwlncnBfc3RhcnQgPSBzd19kZXNjLT5ncm91cF9oZWFkOworCisJc3Bpbl9sb2NrX2JoKCZtdl9jaGFuLT5sb2NrKTsKKwljb29raWUgPSBtdl9kZXNjX2Fzc2lnbl9jb29raWUobXZfY2hhbiwgc3dfZGVzYyk7CisKKwlpZiAobGlzdF9lbXB0eSgmbXZfY2hhbi0+Y2hhaW4pKQorCQlsaXN0X3NwbGljZV9pbml0KCZzd19kZXNjLT5hc3luY190eC50eF9saXN0LCAmbXZfY2hhbi0+Y2hhaW4pOworCWVsc2UgeworCQluZXdfaHdfY2hhaW4gPSAwOworCisJCW9sZF9jaGFpbl90YWlsID0gbGlzdF9lbnRyeShtdl9jaGFuLT5jaGFpbi5wcmV2LAorCQkJCQkgICAgc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QsCisJCQkJCSAgICBjaGFpbl9ub2RlKTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmZ3JwX3N0YXJ0LT5hc3luY190eC50eF9saXN0LAorCQkJCSAmb2xkX2NoYWluX3RhaWwtPmNoYWluX25vZGUpOworCisJCWlmICghbXZfY2FuX2NoYWluKGdycF9zdGFydCkpCisJCQlnb3RvIHN1Ym1pdF9kb25lOworCisJCWRldl9kYmcobXZfY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LCAiQXBwZW5kIHRvIGxhc3QgZGVzYyAleFxuIiwKKwkJCW9sZF9jaGFpbl90YWlsLT5hc3luY190eC5waHlzKTsKKworCQkvKiBmaXggdXAgdGhlIGhhcmR3YXJlIGNoYWluICovCisJCW12X2Rlc2Nfc2V0X25leHRfZGVzYyhvbGRfY2hhaW5fdGFpbCwgZ3JwX3N0YXJ0LT5hc3luY190eC5waHlzKTsKKworCQkvKiBpZiB0aGUgY2hhbm5lbCBpcyBub3QgYnVzeSAqLworCQlpZiAoIW12X2NoYW5faXNfYnVzeShtdl9jaGFuKSkgeworCQkJdTMyIGN1cnJlbnRfZGVzYyA9IG12X2NoYW5fZ2V0X2N1cnJlbnRfZGVzYyhtdl9jaGFuKTsKKwkJCS8qCisJCQkgKiBhbmQgdGhlIGN1cnJlbiBkZXNjIGlzIHRoZSBlbmQgb2YgdGhlIGNoYWluIGJlZm9yZQorCQkJICogdGhlIGFwcGVuZCwgdGhlbiB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBjaGFubmVsCisJCQkgKi8KKwkJCWlmIChjdXJyZW50X2Rlc2MgPT0gb2xkX2NoYWluX3RhaWwtPmFzeW5jX3R4LnBoeXMpCisJCQkJbmV3X2h3X2NoYWluID0gMTsKKwkJfQorCX0KKworCWlmIChuZXdfaHdfY2hhaW4pCisJCW12X3hvcl9zdGFydF9uZXdfY2hhaW4obXZfY2hhbiwgZ3JwX3N0YXJ0KTsKKworc3VibWl0X2RvbmU6CisJc3Bpbl91bmxvY2tfYmgoJm12X2NoYW4tPmxvY2spOworCisJcmV0dXJuIGNvb2tpZTsKK30KKworLyogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBkZXNjcmlwdG9ycyAqLworc3RhdGljIGludCBtdl94b3JfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJCSAgICAgICBzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50KQoreworCWNoYXIgKmh3X2Rlc2M7CisJaW50IGlkeDsKKwlzdHJ1Y3QgbXZfeG9yX2NoYW4gKm12X2NoYW4gPSB0b19tdl94b3JfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgbXZfeG9yX2Rlc2Nfc2xvdCAqc2xvdCA9IE5VTEw7CisJc3RydWN0IG12X3hvcl9wbGF0Zm9ybV9kYXRhICpwbGF0X2RhdGEgPQorCQltdl9jaGFuLT5kZXZpY2UtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBudW1fZGVzY3NfaW5fcG9vbCA9IHBsYXRfZGF0YS0+cG9vbF9zaXplL01WX1hPUl9TTE9UX1NJWkU7CisKKwkvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yIHNsb3RzICovCisJaWR4ID0gbXZfY2hhbi0+c2xvdHNfYWxsb2NhdGVkOworCXdoaWxlIChpZHggPCBudW1fZGVzY3NfaW5fcG9vbCkgeworCQlzbG90ID0ga3phbGxvYyhzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzbG90KSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJNViBYT1IgQ2hhbm5lbCBvbmx5IGluaXRpYWxpemVkIgorCQkJCSIgJWQgZGVzY3JpcHRvciBzbG90cyIsIGlkeCk7CisJCQlicmVhazsKKwkJfQorCQlod19kZXNjID0gKGNoYXIgKikgbXZfY2hhbi0+ZGV2aWNlLT5kbWFfZGVzY19wb29sX3ZpcnQ7CisJCXNsb3QtPmh3X2Rlc2MgPSAodm9pZCAqKSAmaHdfZGVzY1tpZHggKiBNVl9YT1JfU0xPVF9TSVpFXTsKKworCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZzbG90LT5hc3luY190eCwgY2hhbik7CisJCXNsb3QtPmFzeW5jX3R4LnR4X3N1Ym1pdCA9IG12X3hvcl90eF9zdWJtaXQ7CisJCUlOSVRfTElTVF9IRUFEKCZzbG90LT5jaGFpbl9ub2RlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnNsb3QtPnNsb3Rfbm9kZSk7CisJCUlOSVRfTElTVF9IRUFEKCZzbG90LT5hc3luY190eC50eF9saXN0KTsKKwkJaHdfZGVzYyA9IChjaGFyICopIG12X2NoYW4tPmRldmljZS0+ZG1hX2Rlc2NfcG9vbDsKKwkJc2xvdC0+YXN5bmNfdHgucGh5cyA9CisJCQkoZG1hX2FkZHJfdCkgJmh3X2Rlc2NbaWR4ICogTVZfWE9SX1NMT1RfU0laRV07CisJCXNsb3QtPmlkeCA9IGlkeCsrOworCisJCXNwaW5fbG9ja19iaCgmbXZfY2hhbi0+bG9jayk7CisJCW12X2NoYW4tPnNsb3RzX2FsbG9jYXRlZCA9IGlkeDsKKwkJbGlzdF9hZGRfdGFpbCgmc2xvdC0+c2xvdF9ub2RlLCAmbXZfY2hhbi0+YWxsX3Nsb3RzKTsKKwkJc3Bpbl91bmxvY2tfYmgoJm12X2NoYW4tPmxvY2spOworCX0KKworCWlmIChtdl9jaGFuLT5zbG90c19hbGxvY2F0ZWQgJiYgIW12X2NoYW4tPmxhc3RfdXNlZCkKKwkJbXZfY2hhbi0+bGFzdF91c2VkID0gbGlzdF9lbnRyeShtdl9jaGFuLT5hbGxfc2xvdHMubmV4dCwKKwkJCQkJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QsCisJCQkJCXNsb3Rfbm9kZSk7CisKKwlkZXZfZGJnKG12X2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJImFsbG9jYXRlZCAlZCBkZXNjcmlwdG9yIHNsb3RzIGxhc3RfdXNlZDogJXBcbiIsCisJCW12X2NoYW4tPnNsb3RzX2FsbG9jYXRlZCwgbXZfY2hhbi0+bGFzdF91c2VkKTsKKworCXJldHVybiBtdl9jaGFuLT5zbG90c19hbGxvY2F0ZWQgPyA6IC1FTk9NRU07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgorbXZfeG9yX3ByZXBfZG1hX21lbWNweShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZGVzdCwgZG1hX2FkZHJfdCBzcmMsCisJCXNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IG12X3hvcl9jaGFuICptdl9jaGFuID0gdG9fbXZfeG9yX2NoYW4oY2hhbik7CisJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKnN3X2Rlc2MsICpncnBfc3RhcnQ7CisJaW50IHNsb3RfY250OworCisJZGV2X2RiZyhtdl9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSIlcyBkZXN0OiAleCBzcmMgJXggbGVuOiAldSBmbGFnczogJWxkXG4iLAorCQlfX2Z1bmNfXywgZGVzdCwgc3JjLCBsZW4sIGZsYWdzKTsKKwlpZiAodW5saWtlbHkobGVuIDwgTVZfWE9SX01JTl9CWVRFX0NPVU5UKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlCVUdfT04odW5saWtlbHkobGVuID4gTVZfWE9SX01BWF9CWVRFX0NPVU5UKSk7CisKKwlzcGluX2xvY2tfYmgoJm12X2NoYW4tPmxvY2spOworCXNsb3RfY250ID0gbXZfY2hhbl9tZW1jcHlfc2xvdF9jb3VudChsZW4pOworCXN3X2Rlc2MgPSBtdl94b3JfYWxsb2Nfc2xvdHMobXZfY2hhbiwgc2xvdF9jbnQsIDEpOworCWlmIChzd19kZXNjKSB7CisJCXN3X2Rlc2MtPnR5cGUgPSBETUFfTUVNQ1BZOworCQlzd19kZXNjLT5hc3luY190eC5mbGFncyA9IGZsYWdzOworCQlncnBfc3RhcnQgPSBzd19kZXNjLT5ncm91cF9oZWFkOworCQltdl9kZXNjX2luaXQoZ3JwX3N0YXJ0LCBmbGFncyk7CisJCW12X2Rlc2Nfc2V0X2J5dGVfY291bnQoZ3JwX3N0YXJ0LCBsZW4pOworCQltdl9kZXNjX3NldF9kZXN0X2FkZHIoc3dfZGVzYy0+Z3JvdXBfaGVhZCwgZGVzdCk7CisJCW12X2Rlc2Nfc2V0X3NyY19hZGRyKGdycF9zdGFydCwgMCwgc3JjKTsKKwkJc3dfZGVzYy0+dW5tYXBfc3JjX2NudCA9IDE7CisJCXN3X2Rlc2MtPnVubWFwX2xlbiA9IGxlbjsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJm12X2NoYW4tPmxvY2spOworCisJZGV2X2RiZyhtdl9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSIlcyBzd19kZXNjICVwIGFzeW5jX3R4ICVwXG4iLAorCQlfX2Z1bmNfXywgc3dfZGVzYywgc3dfZGVzYyA/ICZzd19kZXNjLT5hc3luY190eCA6IDApOworCisJcmV0dXJuIHN3X2Rlc2MgPyAmc3dfZGVzYy0+YXN5bmNfdHggOiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKK212X3hvcl9wcmVwX2RtYV9tZW1zZXQoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRlc3QsIGludCB2YWx1ZSwKKwkJICAgICAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IG12X3hvcl9jaGFuICptdl9jaGFuID0gdG9fbXZfeG9yX2NoYW4oY2hhbik7CisJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKnN3X2Rlc2MsICpncnBfc3RhcnQ7CisJaW50IHNsb3RfY250OworCisJZGV2X2RiZyhtdl9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSIlcyBkZXN0OiAleCBsZW46ICV1IGZsYWdzOiAlbGRcbiIsCisJCV9fZnVuY19fLCBkZXN0LCBsZW4sIGZsYWdzKTsKKwlpZiAodW5saWtlbHkobGVuIDwgTVZfWE9SX01JTl9CWVRFX0NPVU5UKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlCVUdfT04odW5saWtlbHkobGVuID4gTVZfWE9SX01BWF9CWVRFX0NPVU5UKSk7CisKKwlzcGluX2xvY2tfYmgoJm12X2NoYW4tPmxvY2spOworCXNsb3RfY250ID0gbXZfY2hhbl9tZW1zZXRfc2xvdF9jb3VudChsZW4pOworCXN3X2Rlc2MgPSBtdl94b3JfYWxsb2Nfc2xvdHMobXZfY2hhbiwgc2xvdF9jbnQsIDEpOworCWlmIChzd19kZXNjKSB7CisJCXN3X2Rlc2MtPnR5cGUgPSBETUFfTUVNU0VUOworCQlzd19kZXNjLT5hc3luY190eC5mbGFncyA9IGZsYWdzOworCQlncnBfc3RhcnQgPSBzd19kZXNjLT5ncm91cF9oZWFkOworCQltdl9kZXNjX2luaXQoZ3JwX3N0YXJ0LCBmbGFncyk7CisJCW12X2Rlc2Nfc2V0X2J5dGVfY291bnQoZ3JwX3N0YXJ0LCBsZW4pOworCQltdl9kZXNjX3NldF9kZXN0X2FkZHIoc3dfZGVzYy0+Z3JvdXBfaGVhZCwgZGVzdCk7CisJCW12X2Rlc2Nfc2V0X2Jsb2NrX2ZpbGxfdmFsKGdycF9zdGFydCwgdmFsdWUpOworCQlzd19kZXNjLT51bm1hcF9zcmNfY250ID0gMTsKKwkJc3dfZGVzYy0+dW5tYXBfbGVuID0gbGVuOworCX0KKwlzcGluX3VubG9ja19iaCgmbXZfY2hhbi0+bG9jayk7CisJZGV2X2RiZyhtdl9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSIlcyBzd19kZXNjICVwIGFzeW5jX3R4ICVwIFxuIiwKKwkJX19mdW5jX18sIHN3X2Rlc2MsICZzd19kZXNjLT5hc3luY190eCk7CisJcmV0dXJuIHN3X2Rlc2MgPyAmc3dfZGVzYy0+YXN5bmNfdHggOiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKK212X3hvcl9wcmVwX2RtYV94b3Ioc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRlc3QsIGRtYV9hZGRyX3QgKnNyYywKKwkJICAgIHVuc2lnbmVkIGludCBzcmNfY250LCBzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBtdl94b3JfY2hhbiAqbXZfY2hhbiA9IHRvX212X3hvcl9jaGFuKGNoYW4pOworCXN0cnVjdCBtdl94b3JfZGVzY19zbG90ICpzd19kZXNjLCAqZ3JwX3N0YXJ0OworCWludCBzbG90X2NudDsKKworCWlmICh1bmxpa2VseShsZW4gPCBNVl9YT1JfTUlOX0JZVEVfQ09VTlQpKQorCQlyZXR1cm4gTlVMTDsKKworCUJVR19PTih1bmxpa2VseShsZW4gPiBNVl9YT1JfTUFYX0JZVEVfQ09VTlQpKTsKKworCWRldl9kYmcobXZfY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAorCQkiJXMgc3JjX2NudDogJWQgbGVuOiBkZXN0ICV4ICV1IGZsYWdzOiAlbGRcbiIsCisJCV9fZnVuY19fLCBzcmNfY250LCBsZW4sIGRlc3QsIGZsYWdzKTsKKworCXNwaW5fbG9ja19iaCgmbXZfY2hhbi0+bG9jayk7CisJc2xvdF9jbnQgPSBtdl9jaGFuX3hvcl9zbG90X2NvdW50KGxlbiwgc3JjX2NudCk7CisJc3dfZGVzYyA9IG12X3hvcl9hbGxvY19zbG90cyhtdl9jaGFuLCBzbG90X2NudCwgMSk7CisJaWYgKHN3X2Rlc2MpIHsKKwkJc3dfZGVzYy0+dHlwZSA9IERNQV9YT1I7CisJCXN3X2Rlc2MtPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJCWdycF9zdGFydCA9IHN3X2Rlc2MtPmdyb3VwX2hlYWQ7CisJCW12X2Rlc2NfaW5pdChncnBfc3RhcnQsIGZsYWdzKTsKKwkJLyogdGhlIGJ5dGUgY291bnQgZmllbGQgaXMgdGhlIHNhbWUgYXMgaW4gbWVtY3B5IGRlc2MqLworCQltdl9kZXNjX3NldF9ieXRlX2NvdW50KGdycF9zdGFydCwgbGVuKTsKKwkJbXZfZGVzY19zZXRfZGVzdF9hZGRyKHN3X2Rlc2MtPmdyb3VwX2hlYWQsIGRlc3QpOworCQlzd19kZXNjLT51bm1hcF9zcmNfY250ID0gc3JjX2NudDsKKwkJc3dfZGVzYy0+dW5tYXBfbGVuID0gbGVuOworCQl3aGlsZSAoc3JjX2NudC0tKQorCQkJbXZfZGVzY19zZXRfc3JjX2FkZHIoZ3JwX3N0YXJ0LCBzcmNfY250LCBzcmNbc3JjX2NudF0pOworCX0KKwlzcGluX3VubG9ja19iaCgmbXZfY2hhbi0+bG9jayk7CisJZGV2X2RiZyhtdl9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSIlcyBzd19kZXNjICVwIGFzeW5jX3R4ICVwIFxuIiwKKwkJX19mdW5jX18sIHN3X2Rlc2MsICZzd19kZXNjLT5hc3luY190eCk7CisJcmV0dXJuIHN3X2Rlc2MgPyAmc3dfZGVzYy0+YXN5bmNfdHggOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBtdl94b3JfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IG12X3hvcl9jaGFuICptdl9jaGFuID0gdG9fbXZfeG9yX2NoYW4oY2hhbik7CisJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QgKml0ZXIsICpfaXRlcjsKKwlpbnQgaW5fdXNlX2Rlc2NzID0gMDsKKworCW12X3hvcl9zbG90X2NsZWFudXAobXZfY2hhbik7CisKKwlzcGluX2xvY2tfYmgoJm12X2NoYW4tPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdGVyLCBfaXRlciwgJm12X2NoYW4tPmNoYWluLAorCQkJCQljaGFpbl9ub2RlKSB7CisJCWluX3VzZV9kZXNjcysrOworCQlsaXN0X2RlbCgmaXRlci0+Y2hhaW5fbm9kZSk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdGVyLCBfaXRlciwgJm12X2NoYW4tPmNvbXBsZXRlZF9zbG90cywKKwkJCQkgY29tcGxldGVkX25vZGUpIHsKKwkJaW5fdXNlX2Rlc2NzKys7CisJCWxpc3RfZGVsKCZpdGVyLT5jb21wbGV0ZWRfbm9kZSk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKAorCQlpdGVyLCBfaXRlciwgJm12X2NoYW4tPmFsbF9zbG90cywgc2xvdF9ub2RlKSB7CisJCWxpc3RfZGVsKCZpdGVyLT5zbG90X25vZGUpOworCQlrZnJlZShpdGVyKTsKKwkJbXZfY2hhbi0+c2xvdHNfYWxsb2NhdGVkLS07CisJfQorCW12X2NoYW4tPmxhc3RfdXNlZCA9IE5VTEw7CisKKwlkZXZfZGJnKG12X2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzIHNsb3RzX2FsbG9jYXRlZCAlZFxuIiwKKwkJX19mdW5jX18sIG12X2NoYW4tPnNsb3RzX2FsbG9jYXRlZCk7CisJc3Bpbl91bmxvY2tfYmgoJm12X2NoYW4tPmxvY2spOworCisJaWYgKGluX3VzZV9kZXNjcykKKwkJZGV2X2Vycihtdl9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCQkiZnJlZWluZyAlZCBpbiB1c2UgZGVzY3JpcHRvcnMhXG4iLCBpbl91c2VfZGVzY3MpOworfQorCisvKioKKyAqIG12X3hvcl9pc19jb21wbGV0ZSAtIHBvbGwgdGhlIHN0YXR1cyBvZiBhbiBYT1IgdHJhbnNhY3Rpb24KKyAqIEBjaGFuOiBYT1IgY2hhbm5lbCBoYW5kbGUKKyAqIEBjb29raWU6IFhPUiB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgKi8KK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMgbXZfeG9yX2lzX2NvbXBsZXRlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCQkJICBkbWFfY29va2llX3QgY29va2llLAorCQkJCQkgIGRtYV9jb29raWVfdCAqZG9uZSwKKwkJCQkJICBkbWFfY29va2llX3QgKnVzZWQpCit7CisJc3RydWN0IG12X3hvcl9jaGFuICptdl9jaGFuID0gdG9fbXZfeG9yX2NoYW4oY2hhbik7CisJZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKKwlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZTsKKwllbnVtIGRtYV9zdGF0dXMgcmV0OworCisJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOworCWxhc3RfY29tcGxldGUgPSBtdl9jaGFuLT5jb21wbGV0ZWRfY29va2llOworCW12X2NoYW4tPmlzX2NvbXBsZXRlX2Nvb2tpZSA9IGNvb2tpZTsKKwlpZiAoZG9uZSkKKwkJKmRvbmUgPSBsYXN0X2NvbXBsZXRlOworCWlmICh1c2VkKQorCQkqdXNlZCA9IGxhc3RfdXNlZDsKKworCXJldCA9IGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIGxhc3RfY29tcGxldGUsIGxhc3RfdXNlZCk7CisJaWYgKHJldCA9PSBETUFfU1VDQ0VTUykgeworCQltdl94b3JfY2xlYW5fY29tcGxldGVkX3Nsb3RzKG12X2NoYW4pOworCQlyZXR1cm4gcmV0OworCX0KKwltdl94b3Jfc2xvdF9jbGVhbnVwKG12X2NoYW4pOworCisJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOworCWxhc3RfY29tcGxldGUgPSBtdl9jaGFuLT5jb21wbGV0ZWRfY29va2llOworCisJaWYgKGRvbmUpCisJCSpkb25lID0gbGFzdF9jb21wbGV0ZTsKKwlpZiAodXNlZCkKKwkJKnVzZWQgPSBsYXN0X3VzZWQ7CisKKwlyZXR1cm4gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgbGFzdF9jb21wbGV0ZSwgbGFzdF91c2VkKTsKK30KKworc3RhdGljIHZvaWQgbXZfZHVtcF94b3JfcmVncyhzdHJ1Y3QgbXZfeG9yX2NoYW4gKmNoYW4pCit7CisJdTMyIHZhbDsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFhPUl9DT05GSUcoY2hhbikpOworCWRldl9wcmludGsoS0VSTl9FUlIsIGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJICAgImNvbmZpZyAgICAgICAweCUwOHguXG4iLCB2YWwpOworCisJdmFsID0gX19yYXdfcmVhZGwoWE9SX0FDVElWQVRJT04oY2hhbikpOworCWRldl9wcmludGsoS0VSTl9FUlIsIGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJICAgImFjdGl2YXRpb24gICAweCUwOHguXG4iLCB2YWwpOworCisJdmFsID0gX19yYXdfcmVhZGwoWE9SX0lOVFJfQ0FVU0UoY2hhbikpOworCWRldl9wcmludGsoS0VSTl9FUlIsIGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJICAgImludHIgY2F1c2UgICAweCUwOHguXG4iLCB2YWwpOworCisJdmFsID0gX19yYXdfcmVhZGwoWE9SX0lOVFJfTUFTSyhjaGFuKSk7CisJZGV2X3ByaW50ayhLRVJOX0VSUiwgY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAorCQkgICAiaW50ciBtYXNrICAgIDB4JTA4eC5cbiIsIHZhbCk7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChYT1JfRVJST1JfQ0FVU0UoY2hhbikpOworCWRldl9wcmludGsoS0VSTl9FUlIsIGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJICAgImVycm9yIGNhdXNlICAweCUwOHguXG4iLCB2YWwpOworCisJdmFsID0gX19yYXdfcmVhZGwoWE9SX0VSUk9SX0FERFIoY2hhbikpOworCWRldl9wcmludGsoS0VSTl9FUlIsIGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJICAgImVycm9yIGFkZHIgICAweCUwOHguXG4iLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBtdl94b3JfZXJyX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBtdl94b3JfY2hhbiAqY2hhbiwKKwkJCQkJIHUzMiBpbnRyX2NhdXNlKQoreworCWlmIChpbnRyX2NhdXNlICYgKDEgPDwgNCkpIHsKKwkgICAgIGRldl9kYmcoY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAorCQkgICAgICJpZ25vcmUgdGhpcyBlcnJvclxuIik7CisJICAgICByZXR1cm47CisJfQorCisJZGV2X3ByaW50ayhLRVJOX0VSUiwgY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAorCQkgICAiZXJyb3Igb24gY2hhbiAlZC4gaW50ciBjYXVzZSAweCUwOHguXG4iLAorCQkgICBjaGFuLT5pZHgsIGludHJfY2F1c2UpOworCisJbXZfZHVtcF94b3JfcmVncyhjaGFuKTsKKwlCVUcoKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG12X3hvcl9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdl94b3JfY2hhbiAqY2hhbiA9IGRhdGE7CisJdTMyIGludHJfY2F1c2UgPSBtdl9jaGFuX2dldF9pbnRyX2NhdXNlKGNoYW4pOworCisJZGV2X2RiZyhjaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICJpbnRyIGNhdXNlICV4XG4iLCBpbnRyX2NhdXNlKTsKKworCWlmIChtdl9pc19lcnJfaW50cihpbnRyX2NhdXNlKSkKKwkJbXZfeG9yX2Vycl9pbnRlcnJ1cHRfaGFuZGxlcihjaGFuLCBpbnRyX2NhdXNlKTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJmNoYW4tPmlycV90YXNrbGV0KTsKKworCW12X3hvcl9kZXZpY2VfY2xlYXJfZW9jX2NhdXNlKGNoYW4pOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdl94b3JfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IG12X3hvcl9jaGFuICptdl9jaGFuID0gdG9fbXZfeG9yX2NoYW4oY2hhbik7CisKKwlpZiAobXZfY2hhbi0+cGVuZGluZyA+PSBNVl9YT1JfVEhSRVNIT0xEKSB7CisJCW12X2NoYW4tPnBlbmRpbmcgPSAwOworCQltdl9jaGFuX2FjdGl2YXRlKG12X2NoYW4pOworCX0KK30KKworLyoKKyAqIFBlcmZvcm0gYSB0cmFuc2FjdGlvbiB0byB2ZXJpZnkgdGhlIEhXIHdvcmtzLgorICovCisjZGVmaW5lIE1WX1hPUl9URVNUX1NJWkUgMjAwMAorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtdl94b3JfbWVtY3B5X3NlbGZfdGVzdChzdHJ1Y3QgbXZfeG9yX2RldmljZSAqZGV2aWNlKQoreworCWludCBpOworCXZvaWQgKnNyYywgKmRlc3Q7CisJZG1hX2FkZHJfdCBzcmNfZG1hLCBkZXN0X2RtYTsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuOworCWRtYV9jb29raWVfdCBjb29raWU7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgbXZfeG9yX2NoYW4gKm12X2NoYW47CisKKwlzcmMgPSBrbWFsbG9jKHNpemVvZih1OCkgKiBNVl9YT1JfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNyYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXN0ID0ga3phbGxvYyhzaXplb2YodTgpICogTVZfWE9SX1RFU1RfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXN0KSB7CisJCWtmcmVlKHNyYyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEZpbGwgaW4gc3JjIGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBNVl9YT1JfVEVTVF9TSVpFOyBpKyspCisJCSgodTggKikgc3JjKVtpXSA9ICh1OClpOworCisJLyogU3RhcnQgY29weSwgdXNpbmcgZmlyc3QgRE1BIGNoYW5uZWwgKi8KKwlkbWFfY2hhbiA9IGNvbnRhaW5lcl9vZihkZXZpY2UtPmNvbW1vbi5jaGFubmVscy5uZXh0LAorCQkJCXN0cnVjdCBkbWFfY2hhbiwKKwkJCQlkZXZpY2Vfbm9kZSk7CisJaWYgKG12X3hvcl9hbGxvY19jaGFuX3Jlc291cmNlcyhkbWFfY2hhbiwgTlVMTCkgPCAxKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWRlc3RfZG1hID0gZG1hX21hcF9zaW5nbGUoZG1hX2NoYW4tPmRldmljZS0+ZGV2LCBkZXN0LAorCQkJCSAgTVZfWE9SX1RFU1RfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKworCXNyY19kbWEgPSBkbWFfbWFwX3NpbmdsZShkbWFfY2hhbi0+ZGV2aWNlLT5kZXYsIHNyYywKKwkJCQkgTVZfWE9SX1RFU1RfU0laRSwgRE1BX1RPX0RFVklDRSk7CisKKwl0eCA9IG12X3hvcl9wcmVwX2RtYV9tZW1jcHkoZG1hX2NoYW4sIGRlc3RfZG1hLCBzcmNfZG1hLAorCQkJCSAgICBNVl9YT1JfVEVTVF9TSVpFLCAwKTsKKwljb29raWUgPSBtdl94b3JfdHhfc3VibWl0KHR4KTsKKwltdl94b3JfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7CisJYXN5bmNfdHhfYWNrKHR4KTsKKwltc2xlZXAoMSk7CisKKwlpZiAobXZfeG9yX2lzX2NvbXBsZXRlKGRtYV9jaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpICE9CisJICAgIERNQV9TVUNDRVNTKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsIGRtYV9jaGFuLT5kZXZpY2UtPmRldiwKKwkJCSAgICJTZWxmLXRlc3QgY29weSB0aW1lZCBvdXQsIGRpc2FibGluZ1xuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9yZXNvdXJjZXM7CisJfQorCisJbXZfY2hhbiA9IHRvX212X3hvcl9jaGFuKGRtYV9jaGFuKTsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmbXZfY2hhbi0+ZGV2aWNlLT5wZGV2LT5kZXYsIGRlc3RfZG1hLAorCQkJCU1WX1hPUl9URVNUX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKG1lbWNtcChzcmMsIGRlc3QsIE1WX1hPUl9URVNUX1NJWkUpKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsIGRtYV9jaGFuLT5kZXZpY2UtPmRldiwKKwkJCSAgICJTZWxmLXRlc3QgY29weSBmYWlsZWQgY29tcGFyZSwgZGlzYWJsaW5nXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3Jlc291cmNlczsKKwl9CisKK2ZyZWVfcmVzb3VyY2VzOgorCW12X3hvcl9mcmVlX2NoYW5fcmVzb3VyY2VzKGRtYV9jaGFuKTsKK291dDoKKwlrZnJlZShzcmMpOworCWtmcmVlKGRlc3QpOworCXJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgTVZfWE9SX05VTV9TUkNfVEVTVCA0IC8qIG11c3QgYmUgPD0gMTUgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0Cittdl94b3JfeG9yX3NlbGZfdGVzdChzdHJ1Y3QgbXZfeG9yX2RldmljZSAqZGV2aWNlKQoreworCWludCBpLCBzcmNfaWR4OworCXN0cnVjdCBwYWdlICpkZXN0OworCXN0cnVjdCBwYWdlICp4b3Jfc3Jjc1tNVl9YT1JfTlVNX1NSQ19URVNUXTsKKwlkbWFfYWRkcl90IGRtYV9zcmNzW01WX1hPUl9OVU1fU1JDX1RFU1RdOworCWRtYV9hZGRyX3QgZGVzdF9kbWE7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuOworCWRtYV9jb29raWVfdCBjb29raWU7CisJdTggY21wX2J5dGUgPSAwOworCXUzMiBjbXBfd29yZDsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgbXZfeG9yX2NoYW4gKm12X2NoYW47CisKKwlmb3IgKHNyY19pZHggPSAwOyBzcmNfaWR4IDwgTVZfWE9SX05VTV9TUkNfVEVTVDsgc3JjX2lkeCsrKSB7CisJCXhvcl9zcmNzW3NyY19pZHhdID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCF4b3Jfc3Jjc1tzcmNfaWR4XSkKKwkJCXdoaWxlIChzcmNfaWR4LS0pIHsKKwkJCQlfX2ZyZWVfcGFnZSh4b3Jfc3Jjc1tzcmNfaWR4XSk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJfQorCisJZGVzdCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXN0KQorCQl3aGlsZSAoc3JjX2lkeC0tKSB7CisJCQlfX2ZyZWVfcGFnZSh4b3Jfc3Jjc1tzcmNfaWR4XSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJLyogRmlsbCBpbiBzcmMgYnVmZmVycyAqLworCWZvciAoc3JjX2lkeCA9IDA7IHNyY19pZHggPCBNVl9YT1JfTlVNX1NSQ19URVNUOyBzcmNfaWR4KyspIHsKKwkJdTggKnB0ciA9IHBhZ2VfYWRkcmVzcyh4b3Jfc3Jjc1tzcmNfaWR4XSk7CisJCWZvciAoaSA9IDA7IGkgPCBQQUdFX1NJWkU7IGkrKykKKwkJCXB0cltpXSA9ICgxIDw8IHNyY19pZHgpOworCX0KKworCWZvciAoc3JjX2lkeCA9IDA7IHNyY19pZHggPCBNVl9YT1JfTlVNX1NSQ19URVNUOyBzcmNfaWR4KyspCisJCWNtcF9ieXRlIF49ICh1OCkgKDEgPDwgc3JjX2lkeCk7CisKKwljbXBfd29yZCA9IChjbXBfYnl0ZSA8PCAyNCkgfCAoY21wX2J5dGUgPDwgMTYpIHwKKwkJKGNtcF9ieXRlIDw8IDgpIHwgY21wX2J5dGU7CisKKwltZW1zZXQocGFnZV9hZGRyZXNzKGRlc3QpLCAwLCBQQUdFX1NJWkUpOworCisJZG1hX2NoYW4gPSBjb250YWluZXJfb2YoZGV2aWNlLT5jb21tb24uY2hhbm5lbHMubmV4dCwKKwkJCQlzdHJ1Y3QgZG1hX2NoYW4sCisJCQkJZGV2aWNlX25vZGUpOworCWlmIChtdl94b3JfYWxsb2NfY2hhbl9yZXNvdXJjZXMoZG1hX2NoYW4sIE5VTEwpIDwgMSkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB0ZXN0IHhvciAqLworCWRlc3RfZG1hID0gZG1hX21hcF9wYWdlKGRtYV9jaGFuLT5kZXZpY2UtPmRldiwgZGVzdCwgMCwgUEFHRV9TSVpFLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVZfWE9SX05VTV9TUkNfVEVTVDsgaSsrKQorCQlkbWFfc3Jjc1tpXSA9IGRtYV9tYXBfcGFnZShkbWFfY2hhbi0+ZGV2aWNlLT5kZXYsIHhvcl9zcmNzW2ldLAorCQkJCQkgICAwLCBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCisJdHggPSBtdl94b3JfcHJlcF9kbWFfeG9yKGRtYV9jaGFuLCBkZXN0X2RtYSwgZG1hX3NyY3MsCisJCQkJIE1WX1hPUl9OVU1fU1JDX1RFU1QsIFBBR0VfU0laRSwgMCk7CisKKwljb29raWUgPSBtdl94b3JfdHhfc3VibWl0KHR4KTsKKwltdl94b3JfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7CisJYXN5bmNfdHhfYWNrKHR4KTsKKwltc2xlZXAoOCk7CisKKwlpZiAobXZfeG9yX2lzX2NvbXBsZXRlKGRtYV9jaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpICE9CisJICAgIERNQV9TVUNDRVNTKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsIGRtYV9jaGFuLT5kZXZpY2UtPmRldiwKKwkJCSAgICJTZWxmLXRlc3QgeG9yIHRpbWVkIG91dCwgZGlzYWJsaW5nXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3Jlc291cmNlczsKKwl9CisKKwltdl9jaGFuID0gdG9fbXZfeG9yX2NoYW4oZG1hX2NoYW4pOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZtdl9jaGFuLT5kZXZpY2UtPnBkZXYtPmRldiwgZGVzdF9kbWEsCisJCQkJUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCWZvciAoaSA9IDA7IGkgPCAoUEFHRV9TSVpFIC8gc2l6ZW9mKHUzMikpOyBpKyspIHsKKwkJdTMyICpwdHIgPSBwYWdlX2FkZHJlc3MoZGVzdCk7CisJCWlmIChwdHJbaV0gIT0gY21wX3dvcmQpIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsIGRtYV9jaGFuLT5kZXZpY2UtPmRldiwKKwkJCQkgICAiU2VsZi10ZXN0IHhvciBmYWlsZWQgY29tcGFyZSwgZGlzYWJsaW5nLiIKKwkJCQkgICAiIGluZGV4ICVkLCBkYXRhICV4LCBleHBlY3RlZCAleFxuIiwgaSwKKwkJCQkgICBwdHJbaV0sIGNtcF93b3JkKTsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIGZyZWVfcmVzb3VyY2VzOworCQl9CisJfQorCitmcmVlX3Jlc291cmNlczoKKwltdl94b3JfZnJlZV9jaGFuX3Jlc291cmNlcyhkbWFfY2hhbik7CitvdXQ6CisJc3JjX2lkeCA9IE1WX1hPUl9OVU1fU1JDX1RFU1Q7CisJd2hpbGUgKHNyY19pZHgtLSkKKwkJX19mcmVlX3BhZ2UoeG9yX3NyY3Nbc3JjX2lkeF0pOworCV9fZnJlZV9wYWdlKGRlc3QpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG12X3hvcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdl94b3JfZGV2aWNlICpkZXZpY2UgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgKl9jaGFuOworCXN0cnVjdCBtdl94b3JfY2hhbiAqbXZfY2hhbjsKKwlzdHJ1Y3QgbXZfeG9yX3BsYXRmb3JtX2RhdGEgKnBsYXRfZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmRldmljZS0+Y29tbW9uKTsKKworCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldiwgcGxhdF9kYXRhLT5wb29sX3NpemUsCisJCQlkZXZpY2UtPmRtYV9kZXNjX3Bvb2xfdmlydCwgZGV2aWNlLT5kbWFfZGVzY19wb29sKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwgJmRldmljZS0+Y29tbW9uLmNoYW5uZWxzLAorCQkJCWRldmljZV9ub2RlKSB7CisJCW12X2NoYW4gPSB0b19tdl94b3JfY2hhbihjaGFuKTsKKwkJbGlzdF9kZWwoJmNoYW4tPmRldmljZV9ub2RlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbXZfeG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisJaW50IGlycTsKKwlzdHJ1Y3QgbXZfeG9yX2RldmljZSAqYWRldjsKKwlzdHJ1Y3QgbXZfeG9yX2NoYW4gKm12X2NoYW47CisJc3RydWN0IGRtYV9kZXZpY2UgKmRtYV9kZXY7CisJc3RydWN0IG12X3hvcl9wbGF0Zm9ybV9kYXRhICpwbGF0X2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCisJYWRldiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmFkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZG1hX2RldiA9ICZhZGV2LT5jb21tb247CisKKwkvKiBhbGxvY2F0ZSBjb2hlcmVudCBtZW1vcnkgZm9yIGhhcmR3YXJlIGRlc2NyaXB0b3JzCisJICogbm90ZTogd3JpdGVjb21iaW5lIGdpdmVzIHNsaWdodGx5IGJldHRlciBwZXJmb3JtYW5jZSwgYnV0CisJICogcmVxdWlyZXMgdGhhdCB3ZSBleHBsaWNpdGx5IGZsdXNoIHRoZSB3cml0ZXMKKwkgKi8KKwlhZGV2LT5kbWFfZGVzY19wb29sX3ZpcnQgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKCZwZGV2LT5kZXYsCisJCQkJCQkJICBwbGF0X2RhdGEtPnBvb2xfc2l6ZSwKKwkJCQkJCQkgICZhZGV2LT5kbWFfZGVzY19wb29sLAorCQkJCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGV2LT5kbWFfZGVzY19wb29sX3ZpcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJYWRldi0+aWQgPSBwbGF0X2RhdGEtPmh3X2lkOworCisJLyogZGlzY292ZXIgdHJhbnNhY3Rpb24gY2FwYWJpbGl0ZXMgZnJvbSB0aGUgcGxhdGZvcm0gZGF0YSAqLworCWRtYV9kZXYtPmNhcF9tYXNrID0gcGxhdF9kYXRhLT5jYXBfbWFzazsKKwlhZGV2LT5wZGV2ID0gcGRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGV2KTsKKworCWFkZXYtPnNoYXJlZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBsYXRfZGF0YS0+c2hhcmVkKTsKKworCUlOSVRfTElTVF9IRUFEKCZkbWFfZGV2LT5jaGFubmVscyk7CisKKwkvKiBzZXQgYmFzZSByb3V0aW5lcyAqLworCWRtYV9kZXYtPmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IG12X3hvcl9hbGxvY19jaGFuX3Jlc291cmNlczsKKwlkbWFfZGV2LT5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9IG12X3hvcl9mcmVlX2NoYW5fcmVzb3VyY2VzOworCWRtYV9kZXYtPmRldmljZV9pc190eF9jb21wbGV0ZSA9IG12X3hvcl9pc19jb21wbGV0ZTsKKwlkbWFfZGV2LT5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IG12X3hvcl9pc3N1ZV9wZW5kaW5nOworCWRtYV9kZXYtPmRldiA9ICZwZGV2LT5kZXY7CisKKwkvKiBzZXQgcHJlcCByb3V0aW5lcyBiYXNlZCBvbiBjYXBhYmlsaXR5ICovCisJaWYgKGRtYV9oYXNfY2FwKERNQV9NRU1DUFksIGRtYV9kZXYtPmNhcF9tYXNrKSkKKwkJZG1hX2Rldi0+ZGV2aWNlX3ByZXBfZG1hX21lbWNweSA9IG12X3hvcl9wcmVwX2RtYV9tZW1jcHk7CisJaWYgKGRtYV9oYXNfY2FwKERNQV9NRU1TRVQsIGRtYV9kZXYtPmNhcF9tYXNrKSkKKwkJZG1hX2Rldi0+ZGV2aWNlX3ByZXBfZG1hX21lbXNldCA9IG12X3hvcl9wcmVwX2RtYV9tZW1zZXQ7CisJaWYgKGRtYV9oYXNfY2FwKERNQV9YT1IsIGRtYV9kZXYtPmNhcF9tYXNrKSkgeworCQlkbWFfZGV2LT5tYXhfeG9yID0gODsgICAgICAgICAgICAgICAgICA7CisJCWRtYV9kZXYtPmRldmljZV9wcmVwX2RtYV94b3IgPSBtdl94b3JfcHJlcF9kbWFfeG9yOworCX0KKworCW12X2NoYW4gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCptdl9jaGFuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdl9jaGFuKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfZG1hOworCX0KKwltdl9jaGFuLT5kZXZpY2UgPSBhZGV2OworCW12X2NoYW4tPmlkeCA9IHBsYXRfZGF0YS0+aHdfaWQ7CisJbXZfY2hhbi0+bW1yX2Jhc2UgPSBhZGV2LT5zaGFyZWQtPnhvcl9iYXNlOworCisJaWYgKCFtdl9jaGFuLT5tbXJfYmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2RtYTsKKwl9CisJdGFza2xldF9pbml0KCZtdl9jaGFuLT5pcnFfdGFza2xldCwgbXZfeG9yX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKQorCQkgICAgIG12X2NoYW4pOworCisJLyogY2xlYXIgZXJyb3JzIGJlZm9yZSBlbmFibGluZyBpbnRlcnJ1cHRzICovCisJbXZfeG9yX2RldmljZV9jbGVhcl9lcnJfc3RhdHVzKG12X2NoYW4pOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlyZXQgPSBpcnE7CisJCWdvdG8gZXJyX2ZyZWVfZG1hOworCX0KKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwKKwkJCSAgICAgICBtdl94b3JfaW50ZXJydXB0X2hhbmRsZXIsCisJCQkgICAgICAgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIG12X2NoYW4pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWVfZG1hOworCisJbXZfY2hhbl91bm1hc2tfaW50ZXJydXB0cyhtdl9jaGFuKTsKKworCW12X3NldF9tb2RlKG12X2NoYW4sIERNQV9NRU1DUFkpOworCisJc3Bpbl9sb2NrX2luaXQoJm12X2NoYW4tPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZtdl9jaGFuLT5jaGFpbik7CisJSU5JVF9MSVNUX0hFQUQoJm12X2NoYW4tPmNvbXBsZXRlZF9zbG90cyk7CisJSU5JVF9MSVNUX0hFQUQoJm12X2NoYW4tPmFsbF9zbG90cyk7CisJSU5JVF9SQ1VfSEVBRCgmbXZfY2hhbi0+Y29tbW9uLnJjdSk7CisJbXZfY2hhbi0+Y29tbW9uLmRldmljZSA9IGRtYV9kZXY7CisKKwlsaXN0X2FkZF90YWlsKCZtdl9jaGFuLT5jb21tb24uZGV2aWNlX25vZGUsICZkbWFfZGV2LT5jaGFubmVscyk7CisKKwlpZiAoZG1hX2hhc19jYXAoRE1BX01FTUNQWSwgZG1hX2Rldi0+Y2FwX21hc2spKSB7CisJCXJldCA9IG12X3hvcl9tZW1jcHlfc2VsZl90ZXN0KGFkZXYpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJtZW1jcHkgc2VsZiB0ZXN0IHJldHVybmVkICVkXG4iLCByZXQpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZnJlZV9kbWE7CisJfQorCisJaWYgKGRtYV9oYXNfY2FwKERNQV9YT1IsIGRtYV9kZXYtPmNhcF9tYXNrKSkgeworCQlyZXQgPSBtdl94b3JfeG9yX3NlbGZfdGVzdChhZGV2KTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAieG9yIHNlbGYgdGVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2ZyZWVfZG1hOworCX0KKworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LCAiTWFydmVsbCBYT1I6ICIKKwkgICIoICVzJXMlcyVzKVxuIiwKKwkgIGRtYV9oYXNfY2FwKERNQV9YT1IsIGRtYV9kZXYtPmNhcF9tYXNrKSA/ICJ4b3IgIiA6ICIiLAorCSAgZG1hX2hhc19jYXAoRE1BX01FTVNFVCwgZG1hX2Rldi0+Y2FwX21hc2spICA/ICJmaWxsICIgOiAiIiwKKwkgIGRtYV9oYXNfY2FwKERNQV9NRU1DUFksIGRtYV9kZXYtPmNhcF9tYXNrKSA/ICJjcHkgIiA6ICIiLAorCSAgZG1hX2hhc19jYXAoRE1BX0lOVEVSUlVQVCwgZG1hX2Rldi0+Y2FwX21hc2spID8gImludHIgIiA6ICIiKTsKKworCWRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoZG1hX2Rldik7CisJZ290byBvdXQ7CisKKyBlcnJfZnJlZV9kbWE6CisJZG1hX2ZyZWVfY29oZXJlbnQoJmFkZXYtPnBkZXYtPmRldiwgcGxhdF9kYXRhLT5wb29sX3NpemUsCisJCQlhZGV2LT5kbWFfZGVzY19wb29sX3ZpcnQsIGFkZXYtPmRtYV9kZXNjX3Bvb2wpOworIG91dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorbXZfeG9yX2NvbmZfbWJ1c193aW5kb3dzKHN0cnVjdCBtdl94b3Jfc2hhcmVkX3ByaXZhdGUgKm1zcCwKKwkJCSBzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvICpkcmFtKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IG1zcC0+eG9yX2Jhc2U7CisJdTMyIHdpbl9lbmFibGUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQl3cml0ZWwoMCwgYmFzZSArIFdJTkRPV19CQVNFKGkpKTsKKwkJd3JpdGVsKDAsIGJhc2UgKyBXSU5ET1dfU0laRShpKSk7CisJCWlmIChpIDwgNCkKKwkJCXdyaXRlbCgwLCBiYXNlICsgV0lORE9XX1JFTUFQX0hJR0goaSkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkcmFtLT5udW1fY3M7IGkrKykgeworCQlzdHJ1Y3QgbWJ1c19kcmFtX3dpbmRvdyAqY3MgPSBkcmFtLT5jcyArIGk7CisKKwkJd3JpdGVsKChjcy0+YmFzZSAmIDB4ZmZmZjAwMDApIHwKKwkJICAgICAgIChjcy0+bWJ1c19hdHRyIDw8IDgpIHwKKwkJICAgICAgIGRyYW0tPm1idXNfZHJhbV90YXJnZXRfaWQsIGJhc2UgKyBXSU5ET1dfQkFTRShpKSk7CisJCXdyaXRlbCgoY3MtPnNpemUgLSAxKSAmIDB4ZmZmZjAwMDAsIGJhc2UgKyBXSU5ET1dfU0laRShpKSk7CisKKwkJd2luX2VuYWJsZSB8PSAoMSA8PCBpKTsKKwkJd2luX2VuYWJsZSB8PSAzIDw8ICgxNiArICgyICogaSkpOworCX0KKworCXdyaXRlbCh3aW5fZW5hYmxlLCBiYXNlICsgV0lORE9XX0JBUl9FTkFCTEUoMCkpOworCXdyaXRlbCh3aW5fZW5hYmxlLCBiYXNlICsgV0lORE9XX0JBUl9FTkFCTEUoMSkpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdl94b3JfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdl94b3JfcHJvYmUsCisJLnJlbW92ZQkJPSBtdl94b3JfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBNVl9YT1JfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBtdl94b3Jfc2hhcmVkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG12X3hvcl9wbGF0Zm9ybV9zaGFyZWRfZGF0YSAqbXNkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG12X3hvcl9zaGFyZWRfcHJpdmF0ZSAqbXNwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnBkZXYtPmRldiwgIk1hcnZlbGwgc2hhcmVkIFhPUiBkcml2ZXJcbiIpOworCisJbXNwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbXNwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc3ApCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltc3AtPnhvcl9iYXNlID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQkJICAgICByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIW1zcC0+eG9yX2Jhc2UpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1zcC0+eG9yX2hpZ2hfYmFzZSA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJCQkgIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghbXNwLT54b3JfaGlnaF9iYXNlKQorCQlyZXR1cm4gLUVCVVNZOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbXNwKTsKKworCS8qCisJICogKFJlLSlwcm9ncmFtIE1CVVMgcmVtYXBwaW5nIHdpbmRvd3MgaWYgd2UgYXJlIGFza2VkIHRvLgorCSAqLworCWlmIChtc2QgIT0gTlVMTCAmJiBtc2QtPmRyYW0gIT0gTlVMTCkKKwkJbXZfeG9yX2NvbmZfbWJ1c193aW5kb3dzKG1zcCwgbXNkLT5kcmFtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12X3hvcl9zaGFyZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12X3hvcl9zaGFyZWRfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdl94b3Jfc2hhcmVkX3Byb2JlLAorCS5yZW1vdmUJCT0gbXZfeG9yX3NoYXJlZF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9IE1WX1hPUl9TSEFSRURfTkFNRSwKKwl9LAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBtdl94b3JfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdl94b3Jfc2hhcmVkX2RyaXZlcik7CisJaWYgKCFyYykgeworCQlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXZfeG9yX2RyaXZlcik7CisJCWlmIChyYykKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdl94b3Jfc2hhcmVkX2RyaXZlcik7CisJfQorCXJldHVybiByYzsKK30KK21vZHVsZV9pbml0KG12X3hvcl9pbml0KTsKKworLyogaXQncyBjdXJyZW50bHkgdW5zYWZlIHRvIHVubG9hZCB0aGlzIG1vZHVsZSAqLworI2lmIDAKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdl94b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdl94b3JfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXZfeG9yX3NoYXJlZF9kcml2ZXIpOworCXJldHVybjsKK30KKworbW9kdWxlX2V4aXQobXZfeG9yX2V4aXQpOworI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIlNhZWVkIEJpc2hhcmEgPHNhZWVkQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJETUEgZW5naW5lIGRyaXZlciBmb3IgTWFydmVsbCdzIFhPUiBlbmdpbmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL212X3hvci5oIGIvZHJpdmVycy9kbWEvbXZfeG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjYWZlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9tdl94b3IuaApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgTVZfWE9SX0gKKyNkZWZpbmUgTVZfWE9SX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2RlZmluZSBVU0VfVElNRVIKKyNkZWZpbmUgTVZfWE9SX1NMT1RfU0laRQkJNjQKKyNkZWZpbmUgTVZfWE9SX1RIUkVTSE9MRAkJMQorCisjZGVmaW5lIFhPUl9PUEVSQVRJT05fTU9ERV9YT1IJCTAKKyNkZWZpbmUgWE9SX09QRVJBVElPTl9NT0RFX01FTUNQWQkyCisjZGVmaW5lIFhPUl9PUEVSQVRJT05fTU9ERV9NRU1TRVQJNAorCisjZGVmaW5lIFhPUl9DVVJSX0RFU0MoY2hhbikJKGNoYW4tPm1tcl9iYXNlICsgMHgyMTAgKyAoY2hhbi0+aWR4ICogNCkpCisjZGVmaW5lIFhPUl9ORVhUX0RFU0MoY2hhbikJKGNoYW4tPm1tcl9iYXNlICsgMHgyMDAgKyAoY2hhbi0+aWR4ICogNCkpCisjZGVmaW5lIFhPUl9CWVRFX0NPVU5UKGNoYW4pCShjaGFuLT5tbXJfYmFzZSArIDB4MjIwICsgKGNoYW4tPmlkeCAqIDQpKQorI2RlZmluZSBYT1JfREVTVF9QT0lOVEVSKGNoYW4pCShjaGFuLT5tbXJfYmFzZSArIDB4MkIwICsgKGNoYW4tPmlkeCAqIDQpKQorI2RlZmluZSBYT1JfQkxPQ0tfU0laRShjaGFuKQkoY2hhbi0+bW1yX2Jhc2UgKyAweDJDMCArIChjaGFuLT5pZHggKiA0KSkKKyNkZWZpbmUgWE9SX0lOSVRfVkFMVUVfTE9XKGNoYW4pCShjaGFuLT5tbXJfYmFzZSArIDB4MkUwKQorI2RlZmluZSBYT1JfSU5JVF9WQUxVRV9ISUdIKGNoYW4pCShjaGFuLT5tbXJfYmFzZSArIDB4MkU0KQorCisjZGVmaW5lIFhPUl9DT05GSUcoY2hhbikJKGNoYW4tPm1tcl9iYXNlICsgMHgxMCArIChjaGFuLT5pZHggKiA0KSkKKyNkZWZpbmUgWE9SX0FDVElWQVRJT04oY2hhbikJKGNoYW4tPm1tcl9iYXNlICsgMHgyMCArIChjaGFuLT5pZHggKiA0KSkKKyNkZWZpbmUgWE9SX0lOVFJfQ0FVU0UoY2hhbikJKGNoYW4tPm1tcl9iYXNlICsgMHgzMCkKKyNkZWZpbmUgWE9SX0lOVFJfTUFTSyhjaGFuKQkoY2hhbi0+bW1yX2Jhc2UgKyAweDQwKQorI2RlZmluZSBYT1JfRVJST1JfQ0FVU0UoY2hhbikJKGNoYW4tPm1tcl9iYXNlICsgMHg1MCkKKyNkZWZpbmUgWE9SX0VSUk9SX0FERFIoY2hhbikJKGNoYW4tPm1tcl9iYXNlICsgMHg2MCkKKyNkZWZpbmUgWE9SX0lOVFJfTUFTS19WQUxVRQkweDNGNQorCisjZGVmaW5lIFdJTkRPV19CQVNFKHcpCQkoMHgyNTAgKyAoKHcpIDw8IDIpKQorI2RlZmluZSBXSU5ET1dfU0laRSh3KQkJKDB4MjcwICsgKCh3KSA8PCAyKSkKKyNkZWZpbmUgV0lORE9XX1JFTUFQX0hJR0godykJKDB4MjkwICsgKCh3KSA8PCAyKSkKKyNkZWZpbmUgV0lORE9XX0JBUl9FTkFCTEUoY2hhbikJKDB4MjQwICsgKChjaGFuKSA8PCAyKSkKKworc3RydWN0IG12X3hvcl9zaGFyZWRfcHJpdmF0ZSB7CisJdm9pZCBfX2lvbWVtCSp4b3JfYmFzZTsKKwl2b2lkIF9faW9tZW0JKnhvcl9oaWdoX2Jhc2U7Cit9OworCisKKy8qKgorICogc3RydWN0IG12X3hvcl9kZXZpY2UgLSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIFhPUiBkZXZpY2UKKyAqIEBwZGV2OiBQbGF0Zm9ybSBkZXZpY2UKKyAqIEBpZDogSFcgWE9SIERldmljZSBzZWxlY3RvcgorICogQGRtYV9kZXNjX3Bvb2w6IGJhc2Ugb2YgRE1BIGRlc2NyaXB0b3IgcmVnaW9uIChETUEgYWRkcmVzcykKKyAqIEBkbWFfZGVzY19wb29sX3ZpcnQ6IGJhc2Ugb2YgRE1BIGRlc2NyaXB0b3IgcmVnaW9uIChDUFUgYWRkcmVzcykKKyAqIEBjb21tb246IGVtYmVkZGVkIHN0cnVjdCBkbWFfZGV2aWNlCisgKi8KK3N0cnVjdCBtdl94b3JfZGV2aWNlIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKKwlpbnQJCQkJaWQ7CisJZG1hX2FkZHJfdAkJCWRtYV9kZXNjX3Bvb2w7CisJdm9pZAkJCQkqZG1hX2Rlc2NfcG9vbF92aXJ0OworCXN0cnVjdCBkbWFfZGV2aWNlCQljb21tb247CisJc3RydWN0IG12X3hvcl9zaGFyZWRfcHJpdmF0ZQkqc2hhcmVkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXZfeG9yX2NoYW4gLSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIFhPUiBjaGFubmVsCisgKiBAcGVuZGluZzogYWxsb3dzIGJhdGNoaW5nIG9mIGhhcmR3YXJlIG9wZXJhdGlvbnMKKyAqIEBjb21wbGV0ZWRfY29va2llOiBpZGVudGlmaWVyIGZvciB0aGUgbW9zdCByZWNlbnRseSBjb21wbGV0ZWQgb3BlcmF0aW9uCisgKiBAbG9jazogc2VyaWFsaXplcyBlbnF1ZXVlL2RlcXVldWUgb3BlcmF0aW9ucyB0byB0aGUgZGVzY3JpcHRvcnMgcG9vbAorICogQG1tcl9iYXNlOiBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVyIGJhc2UKKyAqIEBpZHg6IHRoZSBpbmRleCBvZiB0aGUgeG9yIGNoYW5uZWwKKyAqIEBjaGFpbjogZGV2aWNlIGNoYWluIHZpZXcgb2YgdGhlIGRlc2NyaXB0b3JzCisgKiBAY29tcGxldGVkX3Nsb3RzOiBzbG90cyBjb21wbGV0ZWQgYnkgSFcgYnV0IHN0aWxsIG5lZWQgdG8gYmUgYWNrZWQKKyAqIEBkZXZpY2U6IHBhcmVudCBkZXZpY2UKKyAqIEBjb21tb246IGNvbW1vbiBkbWFlbmdpbmUgY2hhbm5lbCBvYmplY3QgbWVtYmVycworICogQGxhc3RfdXNlZDogcGxhY2UgaG9sZGVyIGZvciBhbGxvY2F0aW9uIHRvIGNvbnRpbnVlIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYKKyAqIEBhbGxfc2xvdHM6IGNvbXBsZXRlIGRvbWFpbiBvZiBzbG90cyB1c2FibGUgYnkgdGhlIGNoYW5uZWwKKyAqIEBzbG90c19hbGxvY2F0ZWQ6IHJlY29yZHMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBkZXNjcmlwdG9yIHNsb3QgcG9vbAorICogQGlycV90YXNrbGV0OiBib3R0b20gaGFsZiB3aGVyZSBtdl94b3Jfc2xvdF9jbGVhbnVwIHJ1bnMKKyAqLworc3RydWN0IG12X3hvcl9jaGFuIHsKKwlpbnQJCQlwZW5kaW5nOworCWRtYV9jb29raWVfdAkJY29tcGxldGVkX2Nvb2tpZTsKKwlzcGlubG9ja190CQlsb2NrOyAvKiBwcm90ZWN0cyB0aGUgZGVzY3JpcHRvciBzbG90IHBvb2wgKi8KKwl2b2lkIF9faW9tZW0JCSptbXJfYmFzZTsKKwl1bnNpZ25lZCBpbnQJCWlkeDsKKwllbnVtIGRtYV90cmFuc2FjdGlvbl90eXBlCWN1cnJlbnRfdHlwZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNoYWluOworCXN0cnVjdCBsaXN0X2hlYWQJY29tcGxldGVkX3Nsb3RzOworCXN0cnVjdCBtdl94b3JfZGV2aWNlCSpkZXZpY2U7CisJc3RydWN0IGRtYV9jaGFuCQljb21tb247CisJc3RydWN0IG12X3hvcl9kZXNjX3Nsb3QJKmxhc3RfdXNlZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFsbF9zbG90czsKKwlpbnQJCQlzbG90c19hbGxvY2F0ZWQ7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWlycV90YXNrbGV0OworI2lmZGVmIFVTRV9USU1FUgorCXVuc2lnbmVkIGxvbmcJCWNsZWFudXBfdGltZTsKKwl1MzIJCQljdXJyZW50X29uX2xhc3RfY2xlYW51cDsKKwlkbWFfY29va2llX3QJCWlzX2NvbXBsZXRlX2Nvb2tpZTsKKyNlbmRpZgorfTsKKworLyoqCisgKiBzdHJ1Y3QgbXZfeG9yX2Rlc2Nfc2xvdCAtIHNvZnR3YXJlIGRlc2NyaXB0b3IKKyAqIEBzbG90X25vZGU6IG5vZGUgb24gdGhlIG12X3hvcl9jaGFuLmFsbF9zbG90cyBsaXN0CisgKiBAY2hhaW5fbm9kZTogbm9kZSBvbiB0aGUgbXZfeG9yX2NoYW4uY2hhaW4gbGlzdAorICogQGNvbXBsZXRlZF9ub2RlOiBub2RlIG9uIHRoZSBtdl94b3JfY2hhbi5jb21wbGV0ZWRfc2xvdHMgbGlzdAorICogQGh3X2Rlc2M6IHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgaGFyZHdhcmUgZGVzY3JpcHRvciBjaGFpbgorICogQHBoeXM6IGhhcmR3YXJlIGFkZHJlc3Mgb2YgdGhlIGhhcmR3YXJlIGRlc2NyaXB0b3IgY2hhaW4KKyAqIEBncm91cF9oZWFkOiBmaXJzdCBvcGVyYXRpb24gaW4gYSB0cmFuc2FjdGlvbgorICogQHNsb3RfY250OiB0b3RhbCBzbG90cyB1c2VkIGluIGFuIHRyYW5zYWN0aW9uIChncm91cCBvZiBvcGVyYXRpb25zKQorICogQHNsb3RzX3Blcl9vcDogbnVtYmVyIG9mIHNsb3RzIHBlciBvcGVyYXRpb24KKyAqIEBpZHg6IHBvb2wgaW5kZXgKKyAqIEB1bm1hcF9zcmNfY250OiBudW1iZXIgb2YgeG9yIHNvdXJjZXMKKyAqIEB1bm1hcF9sZW46IHRyYW5zYWN0aW9uIGJ5dGVjb3VudAorICogQGFzeW5jX3R4OiBzdXBwb3J0IGZvciB0aGUgYXN5bmNfdHggYXBpCisgKiBAZ3JvdXBfbGlzdDogbGlzdCBvZiBzbG90cyB0aGF0IG1ha2UgdXAgYSBtdWx0aS1kZXNjcmlwdG9yIHRyYW5zYWN0aW9uCisgKglmb3IgZXhhbXBsZSB0cmFuc2ZlciBsZW5ndGhzIGxhcmdlciB0aGFuIHRoZSBzdXBwb3J0ZWQgaHcgbWF4CisgKiBAeG9yX2NoZWNrX3Jlc3VsdDogcmVzdWx0IG9mIHplcm8gc3VtCisgKiBAY3JjMzJfcmVzdWx0OiByZXN1bHQgY3JjIGNhbGN1bGF0aW9uCisgKi8KK3N0cnVjdCBtdl94b3JfZGVzY19zbG90IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNsb3Rfbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNoYWluX25vZGU7CisJc3RydWN0IGxpc3RfaGVhZAljb21wbGV0ZWRfbm9kZTsKKwllbnVtIGRtYV90cmFuc2FjdGlvbl90eXBlCXR5cGU7CisJdm9pZAkJCSpod19kZXNjOworCXN0cnVjdCBtdl94b3JfZGVzY19zbG90CSpncm91cF9oZWFkOworCXUxNgkJCXNsb3RfY250OworCXUxNgkJCXNsb3RzX3Blcl9vcDsKKwl1MTYJCQlpZHg7CisJdTE2CQkJdW5tYXBfc3JjX2NudDsKKwl1MzIJCQl2YWx1ZTsKKwlzaXplX3QJCQl1bm1hcF9sZW47CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yCWFzeW5jX3R4OworCXVuaW9uIHsKKwkJdTMyCQkqeG9yX2NoZWNrX3Jlc3VsdDsKKwkJdTMyCQkqY3JjMzJfcmVzdWx0OworCX07CisjaWZkZWYgVVNFX1RJTUVSCisJdW5zaWduZWQgbG9uZwkJYXJyaXZhbF90aW1lOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVvdXQ7CisjZW5kaWYKK307CisKKy8qIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBYT1IgZGVzY3JpcHRvciBzaXplIDY0Ynl0ZXMJKi8KK3N0cnVjdCBtdl94b3JfZGVzYyB7CisJdTMyIHN0YXR1czsJCS8qIGRlc2NyaXB0b3IgZXhlY3V0aW9uIHN0YXR1cyAqLworCXUzMiBjcmMzMl9yZXN1bHQ7CS8qIHJlc3VsdCBvZiBDUkMtMzIgY2FsY3VsYXRpb24gKi8KKwl1MzIgZGVzY19jb21tYW5kOwkvKiB0eXBlIG9mIG9wZXJhdGlvbiB0byBiZSBjYXJyaWVkIG91dCAqLworCXUzMiBwaHlfbmV4dF9kZXNjOwkvKiBuZXh0IGRlc2NyaXB0b3IgYWRkcmVzcyBwb2ludGVyICovCisJdTMyIGJ5dGVfY291bnQ7CQkvKiBzaXplIG9mIHNyYy9kc3QgYmxvY2tzIGluIGJ5dGVzICovCisJdTMyIHBoeV9kZXN0X2FkZHI7CS8qIGRlc3RpbmF0aW9uIGJsb2NrIGFkZHJlc3MgKi8KKwl1MzIgcGh5X3NyY19hZGRyWzhdOwkvKiBzb3VyY2UgYmxvY2sgYWRkcmVzc2VzICovCisJdTMyIHJlc2VydmVkMDsKKwl1MzIgcmVzZXJ2ZWQxOworfTsKKworI2RlZmluZSB0b19tdl9zd19kZXNjKGFkZHJfaHdfZGVzYykJCVwKKwljb250YWluZXJfb2YoYWRkcl9od19kZXNjLCBzdHJ1Y3QgbXZfeG9yX2Rlc2Nfc2xvdCwgaHdfZGVzYykKKworI2RlZmluZSBtdl9od19kZXNjX3Nsb3RfaWR4KGh3X2Rlc2MsIGlkeCkJXAorCSgodm9pZCAqKSgoKHVuc2lnbmVkIGxvbmcpaHdfZGVzYykgKyAoKGlkeCkgPDwgNSkpKQorCisjZGVmaW5lIE1WX1hPUl9NSU5fQllURV9DT1VOVAkoMTI4KQorI2RlZmluZSBYT1JfTUFYX0JZVEVfQ09VTlQJKCgxNiAqIDEwMjQgKiAxMDI0KSAtIDEpCisjZGVmaW5lIE1WX1hPUl9NQVhfQllURV9DT1VOVAlYT1JfTUFYX0JZVEVfQ09VTlQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYwppbmRleCBiNTQxMTJmLi4wZTAyNGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCkBAIC0zMyw3ICszMyw3IEBACiB7CiAJc3RydWN0IGNlbGxfZWRhY19wcml2CQkqcHJpdiA9IG1jaS0+cHZ0X2luZm87CiAJc3RydWN0IGNzcm93X2luZm8JCSpjc3JvdyA9ICZtY2ktPmNzcm93c1swXTsKLQl1bnNpZ25lZCBsb25nCQkJYWRkcmVzcywgcGZuLCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZwkJCWFkZHJlc3MsIHBmbiwgb2Zmc2V0LCBzeW5kcm9tZTsKIAogCWRldl9kYmcobWNpLT5kZXYsICJFQ0MgQ0UgZXJyIG9uIG5vZGUgJWQsIGNoYW5uZWwgJWQsIGFyID0gMHglMDE2bHhcbiIsCiAJCXByaXYtPm5vZGUsIGNoYW4sIGFyKTsKQEAgLTQ0LDEwICs0NCwxMSBAQAogCQlhZGRyZXNzID0gKGFkZHJlc3MgPDwgMSkgfCBjaGFuOwogCXBmbiA9IGFkZHJlc3MgPj4gUEFHRV9TSElGVDsKIAlvZmZzZXQgPSBhZGRyZXNzICYgflBBR0VfTUFTSzsKKwlzeW5kcm9tZSA9IChhciAmIDB4MDAwMDAwMDAxZmUwMDAwMHVsKSA+PiAyMTsKIAogCS8qIFRPRE86IERlY29kaW5nIG9mIHRoZSBlcnJvciBhZGRyZXNzcyAqLwogCWVkYWNfbWNfaGFuZGxlX2NlKG1jaSwgY3Nyb3ctPmZpcnN0X3BhZ2UgKyBwZm4sIG9mZnNldCwKLQkJCSAgMCwgMCwgY2hhbiwgIiIpOworCQkJICBzeW5kcm9tZSwgMCwgY2hhbiwgIiIpOwogfQogCiBzdGF0aWMgdm9pZCBjZWxsX2VkYWNfY291bnRfdWUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBpbnQgY2hhbiwgdTY0IGFyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9laXNhL01ha2VmaWxlIGIvZHJpdmVycy9laXNhL01ha2VmaWxlCmluZGV4IDcwYWJmOTNmLi41MzY5Y2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Vpc2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9laXNhL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQAogCiAKICMgVWdseSBoYWNrIHRvIGdldCBERVZJQ0VfTkFNRV9TSVpFIHZhbHVlLi4uCi1ERVZJQ0VfTkFNRV9TSVpFID0kKHNoZWxsIGF3ayAnJCQxPT0iXCNkZWZpbmUiICYmICQkMj09IkRFVklDRV9OQU1FX1NJWkUiIHtwcmludCAkJDMtMX0nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kZXZpY2UuaCkKK0RFVklDRV9OQU1FX1NJWkUgPSA1MAogCiAkKG9iaikvZWlzYS1idXMubzogJChvYmopL2Rldmxpc3QuaAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYyBiL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jCmluZGV4IDY1ZGNmMDQuLmM5NTBiZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jCisrKyBiL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jCkBAIC0yMiw3ICsyMiw3IEBACiAKIHN0cnVjdCBlaXNhX2RldmljZV9pbmZvIHsKIAlzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgaWQ7Ci0JY2hhciBuYW1lW0RFVklDRV9OQU1FX1NJWkVdOworCWNoYXIgbmFtZVs1MF07CiB9OwogCiAjaWZkZWYgQ09ORklHX0VJU0FfTkFNRVMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJaWYgKCFzdHJjbXAgKGVkZXYtPmlkLnNpZywgZWlzYV90YWJsZVtpXS5pZC5zaWcpKSB7CiAJCQlzdHJsY3B5IChlZGV2LT5wcmV0dHlfbmFtZSwKIAkJCQkgZWlzYV90YWJsZVtpXS5uYW1lLAotCQkJCSBERVZJQ0VfTkFNRV9TSVpFKTsKKwkJCQkgc2l6ZW9mKGVkZXYtPnByZXR0eV9uYW1lKSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jIGIvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYwppbmRleCAyNTkxOGY3Li4wYjYyNGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMKQEAgLTI1NCw2ICsyNTQsNyBAQAogc3RhdGljIGludCBzbWlfcmVxdWVzdChzdHJ1Y3Qgc21pX2NtZCAqc21pX2NtZCkKIHsKIAljcHVtYXNrX3Qgb2xkX21hc2s7CisJY3B1bWFza19vZl9jcHVfcHRyKG5ld19tYXNrLCAwKTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChzbWlfY21kLT5tYWdpYyAhPSBTTUlfQ01EX01BR0lDKSB7CkBAIC0yNjQsNyArMjY1LDcgQEAKIAogCS8qIFNNSSByZXF1aXJlcyBDUFUgMCAqLwogCW9sZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdSgwKSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbmV3X21hc2spOwogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gMCkgewogCQlkZXZfZGJnKCZkY2RiYXNfcGRldi0+ZGV2LCAiJXM6IGZhaWxlZCB0byBnZXQgQ1BVIDBcbiIsCiAJCQlfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IDAwOGMzOGIuLmZjZWQxOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC00NSw3ICs0NSw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBwY2E5NTN4LgogCiBjb25maWcgR1BJT19QQ0Y4NTdYCi0JdHJpc3RhdGUgIlBDRjg1N3gsIFBDQTg1N3gsIGFuZCBQQ0E5Njd4IEkyQyBHUElPIGV4cGFuZGVycyIKKwl0cmlzdGF0ZSAiUENGODU3eCwgUENBezg1LDk2fTd4LCBhbmQgTUFYNzMyWzg5XSBJMkMgR1BJTyBleHBhbmRlcnMiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBTYXkgeWVzIGhlcmUgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gbW9zdCAicXVhc2ktYmlkaXJlY3Rpb25hbCIgSTJDCkBAIC01NCw3ICs1NCw4IEBACiAJICBzb21lIG9mIHRoZW0uICBDb21wYXRpYmxlIG1vZGVscyBpbmNsdWRlOgogCiAJICA4IGJpdHM6ICAgcGNmODU3NCwgcGNmODU3NGEsIHBjYTg1NzQsIHBjYTg1NzRhLAotCSAgICAgICAgICAgIHBjYTk2NzAsIHBjYTk2NzIsIHBjYTk2NzQsIHBjYTk2NzRhCisJICAgICAgICAgICAgcGNhOTY3MCwgcGNhOTY3MiwgcGNhOTY3NCwgcGNhOTY3NGEsCisJICAJICAgIG1heDczMjgsIG1heDczMjkKIAogCSAgMTYgYml0czogIHBjZjg1NzUsIHBjZjg1NzVjLCBwY2E4NTc1LAogCSAgICAgICAgICAgIHBjYTk2NzEsIHBjYTk2NzMsIHBjYTk2NzUKQEAgLTY5LDYgKzcwLDEyIEBACiAKIGNvbW1lbnQgIlNQSSBHUElPIGV4cGFuZGVyczoiCiAKK2NvbmZpZyBHUElPX01BWDczMDEKKwl0cmlzdGF0ZSAiTWF4aW0gTUFYNzMwMSBHUElPIGV4cGFuZGVyIgorCWRlcGVuZHMgb24gU1BJX01BU1RFUgorCWhlbHAKKwkgIGdwaW8gZHJpdmVyIGZvciBNYXhpbSBNQVg3MzAxIFNQSSBHUElPIGV4cGFuZGVyLgorCiBjb25maWcgR1BJT19NQ1AyM1MwOAogCXRyaXN0YXRlICJNaWNyb2NoaXAgTUNQMjNTMDggSS9PIGV4cGFuZGVyIgogCWRlcGVuZHMgb24gU1BJX01BU1RFUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL01ha2VmaWxlIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCmluZGV4IGZkZGU5OTIuLjE2ZTc5NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIG9iai0kKENPTkZJR19IQVZFX0dQSU9fTElCKQkrPSBncGlvbGliLm8KIAorb2JqLSQoQ09ORklHX0dQSU9fTUFYNzMwMSkJKz0gbWF4NzMwMS5vCiBvYmotJChDT05GSUdfR1BJT19NQ1AyM1MwOCkJKz0gbWNwMjNzMDgubwogb2JqLSQoQ09ORklHX0dQSU9fUENBOTUzWCkJKz0gcGNhOTUzeC5vCiBvYmotJChDT05GSUdfR1BJT19QQ0Y4NTdYKQkrPSBwY2Y4NTd4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMgYi9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Yzc5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jCkBAIC0wLDAgKzEsMzM5IEBACisvKioKKyAqIGRyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSnVlcmdlbiBCZWlzZXJ0LCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDA4IEd1ZW5uYWRpIExpYWtob3ZldHNraSwgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoZSBNYXhpbSdzIE1BWDczMDEgZGV2aWNlIGlzIGFuIFNQSSBkcml2ZW4gR1BJTyBleHBhbmRlci4gVGhlcmUgYXJlCisgKiAyOCBHUElPcy4gOCBvZiB0aGVtIGNhbiB0cmlnZ2VyIGFuIGludGVycnVwdC4gU2VlIGRhdGFzaGVldCBmb3IgbW9yZQorICogZGV0YWlscworICogTm90ZToKKyAqIC0gRElOIG11c3QgYmUgc3RhYmxlIGF0IHRoZSByaXNpbmcgZWRnZSBvZiBjbG9jay4KKyAqIC0gd2hlbiB3cml0aW5nOgorICogICAtIGFsd2F5cyBjbG9jayBpbiAxNiBjbG9ja3MgYXQgb25jZQorICogICAtIGF0IERJTjogRDE1IGZpcnN0LCBEMCBsYXN0CisgKiAgIC0gRDAuLkQ3ID0gZGF0YWJ5dGUsIEQ4Li5EMTQgPSBjb21tYW5kYnl0ZQorICogICAtIEQxNSA9IGxvdyAtPiB3cml0ZSBjb21tYW5kCisgKiAtIHdoZW4gcmVhZGluZworICogICAtIGFsd2F5cyBjbG9jayBpbiAxNiBjbG9ja3MgYXQgb25jZQorICogICAtIGF0IERJTjogRDE1IGZpcnN0LCBEMCBsYXN0CisgKiAgIC0gRDAuLkQ3ID0gZHVtbXksIEQ4Li5EMTQgPSByZWdpc3RlciBhZGRyZXNzCisgKiAgIC0gRDE1ID0gaGlnaCAtPiByZWFkIGNvbW1hbmQKKyAqICAgLSByYWlzZSBDUyBhbmQgYXNzZXJ0IGl0IGFnYWluCisgKiAgIC0gYWx3YXlzIGNsb2NrIGluIDE2IGNsb2NrcyBhdCBvbmNlCisgKiAgIC0gYXQgRE9VVDogRDE1IGZpcnN0LCBEMCBsYXN0CisgKiAgIC0gRDAuLkQ3IGNvbnRhaW5zIHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IGN5Y2xlCisgKgorICogVGhlIGRyaXZlciBleHBvcnRzIGEgc3RhbmRhcmQgZ3Bpb2NoaXAgaW50ZXJmYWNlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbWF4NzMwMS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAibWF4NzMwMSIKKworLyoKKyAqIFBpbiBjb25maWd1cmF0aW9ucywgc2VlIE1BWDczMDEgZGF0YXNoZWV0IHBhZ2UgNgorICovCisjZGVmaW5lIFBJTl9DT05GSUdfTUFTSyAweDAzCisjZGVmaW5lIFBJTl9DT05GSUdfSU5fUFVMTFVQIDB4MDMKKyNkZWZpbmUgUElOX0NPTkZJR19JTl9XT19QVUxMVVAgMHgwMgorI2RlZmluZSBQSU5fQ09ORklHX09VVCAweDAxCisKKyNkZWZpbmUgUElOX05VTUJFUiAyOAorCisKKy8qCisgKiBTb21lIHJlZ2lzdGVycyBtdXN0IGJlIHJlYWQgYmFjayB0byBtb2RpZnkuCisgKiBUbyBzYXZlIHRpbWUgd2UgY2FjaGUgdGhlbSBoZXJlIGluIG1lbW9yeQorICovCitzdHJ1Y3QgbWF4NzMwMSB7CisJc3RydWN0IG11dGV4CWxvY2s7CisJdTgJCXBvcnRfY29uZmlnWzhdOwkvKiBmaWVsZCAwIGlzIHVudXNlZCAqLworCXUzMgkJb3V0X2xldmVsOwkvKiBjYWNoZWQgb3V0cHV0IGxldmVscyAqLworCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOworfTsKKworLyoqCisgKiBtYXg3MzAxX3dyaXRlIC0gV3JpdGUgYSBuZXcgcmVnaXN0ZXIgY29udGVudAorICogQHNwaTogVGhlIFNQSSBkZXZpY2UKKyAqIEByZWc6IFJlZ2lzdGVyIG9mZnNldAorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBBIHdyaXRlIHRvIHRoZSBNQVg3MzAxIG1lYW5zIG9uZSBtZXNzYWdlIHdpdGggb25lIHRyYW5zZmVyCisgKgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IG1heDczMDFfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1MTYgd29yZCA9ICgocmVnICYgMHg3RikgPDwgOCkgfCAodmFsICYgMHhGRik7CisJcmV0dXJuIHNwaV93cml0ZShzcGksIChjb25zdCB1OCAqKSZ3b3JkLCBzaXplb2Yod29yZCkpOworfQorCisvKioKKyAqIG1heDczMDFfcmVhZCAtIFJlYWQgYmFjayByZWdpc3RlciBjb250ZW50CisgKiBAc3BpOiBUaGUgU1BJIGRldmljZQorICogQHJlZzogUmVnaXN0ZXIgb2Zmc2V0CisgKgorICogQSByZWFkIGZyb20gdGhlIE1BWDczMDEgbWVhbnMgdHdvIHRyYW5zZmVyczsgaGVyZSwgb25lIG1lc3NhZ2UgZWFjaAorICoKKyAqIFJldHVybnMgcG9zaXRpdmUgOCBiaXQgdmFsdWUgZnJvbSBkZXZpY2UgaWYgc3VjY2Vzc2Z1bCBvciBhCisgKiBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IG1heDczMDFfcmVhZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCWludCByZXQ7CisJdTE2IHdvcmQ7CisKKwl3b3JkID0gMHg4MDAwIHwgKHJlZyA8PCA4KTsKKwlyZXQgPSBzcGlfd3JpdGUoc3BpLCAoY29uc3QgdTggKikmd29yZCwgc2l6ZW9mKHdvcmQpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogVGhpcyByZWxpZXMgb24gdGhlIGZhY3QsIHRoYXQgYSB0cmFuc2ZlciB3aXRoIE5VTEwgdHhfYnVmIHNoaWZ0cyBvdXQKKwkgKiB6ZXJvIGJ5dGVzICg9Tk9PUCBmb3IgTUFYNzMwMSkKKwkgKi8KKwlyZXQgPSBzcGlfcmVhZChzcGksICh1OCAqKSZ3b3JkLCBzaXplb2Yod29yZCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHdvcmQgJiAweGZmOworfQorCitzdGF0aWMgaW50IG1heDczMDFfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbWF4NzMwMSAqdHMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1heDczMDEsIGNoaXApOworCXU4ICpjb25maWc7CisJaW50IHJldDsKKworCS8qIEZpcnN0IDQgcGlucyBhcmUgdW51c2VkIGluIHRoZSBjb250cm9sbGVyICovCisJb2Zmc2V0ICs9IDQ7CisKKwljb25maWcgPSAmdHMtPnBvcnRfY29uZmlnW29mZnNldCA+PiAyXTsKKworCW11dGV4X2xvY2soJnRzLT5sb2NrKTsKKworCS8qIFN0YW5kYXJkIEdQSU8gQVBJIGRvZXNuJ3Qgc3VwcG9ydCBwdWxsLXVwcywgaGFzIHRvIGJlIGV4dGVuZGVkLgorCSAqIEhhcmQtY29kaW5nIG5vIHBvbGx1cCBmb3Igbm93LiAqLworCSpjb25maWcgPSAoKmNvbmZpZyAmIH4oMyA8PCAob2Zmc2V0ICYgMykpKSB8ICgxIDw8IChvZmZzZXQgJiAzKSk7CisKKwlyZXQgPSBtYXg3MzAxX3dyaXRlKHRzLT5zcGksIDB4MDggKyAob2Zmc2V0ID4+IDIpLCAqY29uZmlnKTsKKworCW11dGV4X3VubG9jaygmdHMtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX21heDczMDFfc2V0KHN0cnVjdCBtYXg3MzAxICp0cywgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJaWYgKHZhbHVlKSB7CisJCXRzLT5vdXRfbGV2ZWwgfD0gMSA8PCBvZmZzZXQ7CisJCXJldHVybiBtYXg3MzAxX3dyaXRlKHRzLT5zcGksIDB4MjAgKyBvZmZzZXQsIDB4MDEpOworCX0gZWxzZSB7CisJCXRzLT5vdXRfbGV2ZWwgJj0gfigxIDw8IG9mZnNldCk7CisJCXJldHVybiBtYXg3MzAxX3dyaXRlKHRzLT5zcGksIDB4MjAgKyBvZmZzZXQsIDB4MDApOworCX0KK30KKworc3RhdGljIGludCBtYXg3MzAxX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCSAgICBpbnQgdmFsdWUpCit7CisJc3RydWN0IG1heDczMDEgKnRzID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtYXg3MzAxLCBjaGlwKTsKKwl1OCAqY29uZmlnOworCWludCByZXQ7CisKKwkvKiBGaXJzdCA0IHBpbnMgYXJlIHVudXNlZCBpbiB0aGUgY29udHJvbGxlciAqLworCW9mZnNldCArPSA0OworCisJY29uZmlnID0gJnRzLT5wb3J0X2NvbmZpZ1tvZmZzZXQgPj4gMl07CisKKwltdXRleF9sb2NrKCZ0cy0+bG9jayk7CisKKwkqY29uZmlnID0gKCpjb25maWcgJiB+KDMgPDwgKG9mZnNldCAmIDMpKSkgfCAoMSA8PCAob2Zmc2V0ICYgMykpOworCisJcmV0ID0gX19tYXg3MzAxX3NldCh0cywgb2Zmc2V0LCB2YWx1ZSk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gbWF4NzMwMV93cml0ZSh0cy0+c3BpLCAweDA4ICsgKG9mZnNldCA+PiAyKSwgKmNvbmZpZyk7CisKKwltdXRleF91bmxvY2soJnRzLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWF4NzMwMV9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBtYXg3MzAxICp0cyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWF4NzMwMSwgY2hpcCk7CisJaW50IGNvbmZpZywgbGV2ZWwgPSAtRUlOVkFMOworCisJLyogRmlyc3QgNCBwaW5zIGFyZSB1bnVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgKi8KKwlvZmZzZXQgKz0gNDsKKworCW11dGV4X2xvY2soJnRzLT5sb2NrKTsKKworCWNvbmZpZyA9ICh0cy0+cG9ydF9jb25maWdbb2Zmc2V0ID4+IDJdID4+ICgob2Zmc2V0ICYgMykgKiAyKSkgJiAzOworCisJc3dpdGNoIChjb25maWcpIHsKKwljYXNlIDE6CisJCS8qIE91dHB1dDogcmV0dXJuIGNhY2hlZCBsZXZlbCAqLworCQlsZXZlbCA9ICAhISh0cy0+b3V0X2xldmVsICYgKDEgPDwgb2Zmc2V0KSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwljYXNlIDM6CisJCS8qIElucHV0OiByZWFkIG91dCAqLworCQlsZXZlbCA9IG1heDczMDFfcmVhZCh0cy0+c3BpLCAweDIwICsgb2Zmc2V0KSAmIDB4MDE7CisJfQorCW11dGV4X3VubG9jaygmdHMtPmxvY2spOworCisJcmV0dXJuIGxldmVsOworfQorCitzdGF0aWMgdm9pZCBtYXg3MzAxX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbWF4NzMwMSAqdHMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1heDczMDEsIGNoaXApOworCisJLyogRmlyc3QgNCBwaW5zIGFyZSB1bnVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgKi8KKwlvZmZzZXQgKz0gNDsKKworCW11dGV4X2xvY2soJnRzLT5sb2NrKTsKKworCV9fbWF4NzMwMV9zZXQodHMsIG9mZnNldCwgdmFsdWUpOworCisJbXV0ZXhfdW5sb2NrKCZ0cy0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDczMDFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbWF4NzMwMSAqdHM7CisJc3RydWN0IG1heDczMDFfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJaW50IGksIHJldDsKKworCXBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+YmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIGJpdHNfcGVyX3dvcmQgY2Fubm90IGJlIGNvbmZpZ3VyZWQgaW4gcGxhdGZvcm0gZGF0YQorCSAqLworCXNwaS0+Yml0c19wZXJfd29yZCA9IDE2OworCisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXg3MzAxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZ0cy0+bG9jayk7CisKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCB0cyk7CisKKwkvKiBQb3dlciB1cCB0aGUgY2hpcCBhbmQgZGlzYWJsZSBJUlEgb3V0cHV0ICovCisJbWF4NzMwMV93cml0ZShzcGksIDB4MDQsIDB4MDEpOworCisJdHMtPnNwaSA9IHNwaTsKKworCXRzLT5jaGlwLmxhYmVsID0gRFJJVkVSX05BTUUsCisKKwl0cy0+Y2hpcC5kaXJlY3Rpb25faW5wdXQgPSBtYXg3MzAxX2RpcmVjdGlvbl9pbnB1dDsKKwl0cy0+Y2hpcC5nZXQgPSBtYXg3MzAxX2dldDsKKwl0cy0+Y2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gbWF4NzMwMV9kaXJlY3Rpb25fb3V0cHV0OworCXRzLT5jaGlwLnNldCA9IG1heDczMDFfc2V0OworCisJdHMtPmNoaXAuYmFzZSA9IHBkYXRhLT5iYXNlOworCXRzLT5jaGlwLm5ncGlvID0gUElOX05VTUJFUjsKKwl0cy0+Y2hpcC5jYW5fc2xlZXAgPSAxOworCXRzLT5jaGlwLmRldiA9ICZzcGktPmRldjsKKwl0cy0+Y2hpcC5vd25lciA9IFRISVNfTU9EVUxFOworCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZ0cy0+Y2hpcCk7CisJaWYgKHJldCkKKwkJZ290byBleGl0X2Rlc3Ryb3k7CisKKwkvKgorCSAqIHRyaXN0YXRlIGFsbCBwaW5zIGluIGhhcmR3YXJlIGFuZCBjYWNoZSB0aGUKKwkgKiByZWdpc3RlciB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7CisJCWludCBqOworCQkvKiAweEFBIG1lYW5zIGlucHV0IHdpdGggaW50ZXJuYWwgcHVsbHVwIGRpc2FibGVkICovCisJCW1heDczMDFfd3JpdGUoc3BpLCAweDA4ICsgaSwgMHhBQSk7CisJCXRzLT5wb3J0X2NvbmZpZ1tpXSA9IDB4QUE7CisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCWludCBpZHggPSB0cy0+Y2hpcC5iYXNlICsgKGkgLSAxKSAqIDQgKyBqOworCQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoaWR4KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBleGl0X3JlbW92ZTsKKwkJCWdwaW9fZnJlZShpZHgpOworCQl9CisJfQorCXJldHVybiByZXQ7CisKK2V4aXRfcmVtb3ZlOgorCWdwaW9jaGlwX3JlbW92ZSgmdHMtPmNoaXApOworZXhpdF9kZXN0cm95OgorCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOworCW11dGV4X2Rlc3Ryb3koJnRzLT5sb2NrKTsKKwlrZnJlZSh0cyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXg3MzAxX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBtYXg3MzAxICp0czsKKwlpbnQgcmV0OworCisJdHMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKwlpZiAodHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBOVUxMKTsKKworCS8qIFBvd2VyIGRvd24gdGhlIGNoaXAgYW5kIGRpc2FibGUgSVJRIG91dHB1dCAqLworCW1heDczMDFfd3JpdGUoc3BpLCAweDA0LCAweDAwKTsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmdHMtPmNoaXApOworCWlmICghcmV0KSB7CisJCW11dGV4X2Rlc3Ryb3koJnRzLT5sb2NrKTsKKwkJa2ZyZWUodHMpOworCX0gZWxzZQorCQlkZXZfZXJyKCZzcGktPmRldiwgIkZhaWxlZCB0byByZW1vdmUgdGhlIEdQSU8gY29udHJvbGxlcjogJWRcbiIsCisJCQlyZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG1heDczMDFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbWF4NzMwMV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1heDczMDFfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1heDczMDFfaW5pdCh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZtYXg3MzAxX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYXg3MzAxX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJm1heDczMDFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobWF4NzMwMV9pbml0KTsKK21vZHVsZV9leGl0KG1heDczMDFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkp1ZXJnZW4gQmVpc2VydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNQVg3MzAxIFNQSSBiYXNlZCBHUElPLUV4cGFuZGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vcGNmODU3eC5jIGIvZHJpdmVycy9ncGlvL3BjZjg1N3guYwppbmRleCBhYTZjYzhiLi5kMjVkMzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGNmODU3eC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMKQEAgLTM3LDYgKzM3LDggQEAKIAl7ICJwY2E5NjcxIiwgMTYgfSwKIAl7ICJwY2E5NjczIiwgMTYgfSwKIAl7ICJwY2E5Njc1IiwgMTYgfSwKKwl7ICJtYXg3MzI4IiwgOCB9LAorCXsgIm1heDczMjkiLCA4IH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHBjZjg1N3hfaWQpOwpAQCAtNTYsNiArNTgsNyBAQAogc3RydWN0IHBjZjg1N3ggewogCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OworCXN0cnVjdCBtdXRleAkJbG9jazsJCS8qIHByb3RlY3QgJ291dCcgKi8KIAl1bnNpZ25lZAkJb3V0OwkJLyogc29mdHdhcmUgbGF0Y2ggKi8KIH07CiAKQEAgLTY2LDkgKzY5LDE0IEBACiBzdGF0aWMgaW50IHBjZjg1N3hfaW5wdXQ4KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlzdHJ1Y3QgcGNmODU3eAkqZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGNmODU3eCwgY2hpcCk7CisJaW50CQlzdGF0dXM7CiAKKwltdXRleF9sb2NrKCZncGlvLT5sb2NrKTsKIAlncGlvLT5vdXQgfD0gKDEgPDwgb2Zmc2V0KTsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGUoZ3Bpby0+Y2xpZW50LCBncGlvLT5vdXQpOworCXN0YXR1cyA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGdwaW8tPmNsaWVudCwgZ3Bpby0+b3V0KTsKKwltdXRleF91bmxvY2soJmdwaW8tPmxvY2spOworCisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBwY2Y4NTd4X2dldDgoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQpAQCAtODQsMTIgKzkyLDE3IEBACiB7CiAJc3RydWN0IHBjZjg1N3gJKmdwaW8gPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBjZjg1N3gsIGNoaXApOwogCXVuc2lnbmVkCWJpdCA9IDEgPDwgb2Zmc2V0OworCWludAkJc3RhdHVzOwogCisJbXV0ZXhfbG9jaygmZ3Bpby0+bG9jayk7CiAJaWYgKHZhbHVlKQogCQlncGlvLT5vdXQgfD0gYml0OwogCWVsc2UKIAkJZ3Bpby0+b3V0ICY9IH5iaXQ7Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlKGdwaW8tPmNsaWVudCwgZ3Bpby0+b3V0KTsKKwlzdGF0dXMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShncGlvLT5jbGllbnQsIGdwaW8tPm91dCk7CisJbXV0ZXhfdW5sb2NrKCZncGlvLT5sb2NrKTsKKworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIHBjZjg1N3hfc2V0OChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKQEAgLTEyNCw5ICsxMzcsMTQgQEAKIHN0YXRpYyBpbnQgcGNmODU3eF9pbnB1dDE2KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlzdHJ1Y3QgcGNmODU3eAkqZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGNmODU3eCwgY2hpcCk7CisJaW50CQlzdGF0dXM7CiAKKwltdXRleF9sb2NrKCZncGlvLT5sb2NrKTsKIAlncGlvLT5vdXQgfD0gKDEgPDwgb2Zmc2V0KTsKLQlyZXR1cm4gaTJjX3dyaXRlX2xlMTYoZ3Bpby0+Y2xpZW50LCBncGlvLT5vdXQpOworCXN0YXR1cyA9IGkyY193cml0ZV9sZTE2KGdwaW8tPmNsaWVudCwgZ3Bpby0+b3V0KTsKKwltdXRleF91bmxvY2soJmdwaW8tPmxvY2spOworCisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBwY2Y4NTd4X2dldDE2KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTE0MiwxMiArMTYwLDE3IEBACiB7CiAJc3RydWN0IHBjZjg1N3gJKmdwaW8gPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBjZjg1N3gsIGNoaXApOwogCXVuc2lnbmVkCWJpdCA9IDEgPDwgb2Zmc2V0OworCWludAkJc3RhdHVzOwogCisJbXV0ZXhfbG9jaygmZ3Bpby0+bG9jayk7CiAJaWYgKHZhbHVlKQogCQlncGlvLT5vdXQgfD0gYml0OwogCWVsc2UKIAkJZ3Bpby0+b3V0ICY9IH5iaXQ7Ci0JcmV0dXJuIGkyY193cml0ZV9sZTE2KGdwaW8tPmNsaWVudCwgZ3Bpby0+b3V0KTsKKwlzdGF0dXMgPSBpMmNfd3JpdGVfbGUxNihncGlvLT5jbGllbnQsIGdwaW8tPm91dCk7CisJbXV0ZXhfdW5sb2NrKCZncGlvLT5sb2NrKTsKKworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIHBjZjg1N3hfc2V0MTYoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCkBAIC0xNzMsNiArMTk2LDggQEAKIAlpZiAoIWdwaW8pCiAJCXJldHVybiAtRU5PTUVNOwogCisJbXV0ZXhfaW5pdCgmZ3Bpby0+bG9jayk7CisKIAlncGlvLT5jaGlwLmJhc2UgPSBwZGF0YS0+Z3Bpb19iYXNlOwogCWdwaW8tPmNoaXAuY2FuX3NsZWVwID0gMTsKIAlncGlvLT5jaGlwLm93bmVyID0gVEhJU19NT0RVTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCBmNDNkNmQzLi40MjZhYzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTc4MCw3ICs3ODAsNyBAQAogICovCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGltcGxlbWVudChfX3U4ICpyZXBvcnQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbiwgX191MzIgdmFsdWUpCiB7Ci0JX19sZTY0IHg7CisJdTY0IHg7CiAJdTY0IG0gPSAoMVVMTCA8PCBuKSAtIDE7CiAKIAlpZiAobiA+IDMyKQpAQCAtNzk2LDEwICs3OTYsMTAgQEAKIAlyZXBvcnQgKz0gb2Zmc2V0ID4+IDM7CiAJb2Zmc2V0ICY9IDc7CiAKLQl4ID0gZ2V0X3VuYWxpZ25lZCgoX19sZTY0ICopcmVwb3J0KTsKLQl4ICY9IGNwdV90b19sZTY0KH4obSA8PCBvZmZzZXQpKTsKLQl4IHw9IGNwdV90b19sZTY0KCgodTY0KSB2YWx1ZSkgPDwgb2Zmc2V0KTsKLQlwdXRfdW5hbGlnbmVkKHgsIChfX2xlNjQgKikgcmVwb3J0KTsKKwl4ID0gZ2V0X3VuYWxpZ25lZF9sZTY0KHJlcG9ydCk7CisJeCAmPSB+KG0gPDwgb2Zmc2V0KTsKKwl4IHw9ICgodTY0KXZhbHVlKSA8PCBvZmZzZXQ7CisJcHV0X3VuYWxpZ25lZF9sZTY0KHgsIHJlcG9ydCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQtcXVpcmtzLmMKaW5kZXggNGMyMDUyYy4uMTZmZWVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC1xdWlya3MuYwpAQCAtODksNiArODksMjkgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBxdWlya19neXJhdGlvbl9yZW1vdGUoc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9MT0dJVkVORE9SKQorCQlyZXR1cm4gMDsKKworCXNldF9iaXQoRVZfUkVQLCBpbnB1dC0+ZXZiaXQpOworCXN3aXRjaCh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJCS8qIFJlcG9ydGVkIG9uIEd5cmF0aW9uIE1DRSBSZW1vdGUgKi8KKwkJY2FzZSAweDAwZDogbWFwX2tleV9jbGVhcihLRVlfSE9NRSk7CQlicmVhazsKKwkJY2FzZSAweDAyNDogbWFwX2tleV9jbGVhcihLRVlfRFZEKTsJCWJyZWFrOworCQljYXNlIDB4MDI1OiBtYXBfa2V5X2NsZWFyKEtFWV9QVlIpOwkJYnJlYWs7CisJCWNhc2UgMHgwNDY6IG1hcF9rZXlfY2xlYXIoS0VZX01FRElBKTsJCWJyZWFrOworCQljYXNlIDB4MDQ3OiBtYXBfa2V5X2NsZWFyKEtFWV9NUDMpOwkJYnJlYWs7CisJCWNhc2UgMHgwNDk6IG1hcF9rZXlfY2xlYXIoS0VZX0NBTUVSQSk7CQlicmVhazsKKwkJY2FzZSAweDA0YTogbWFwX2tleV9jbGVhcihLRVlfVklERU8pOwkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBxdWlya19jaGljb255X3RhY3RpY2FsX3BhZChzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKIHsKQEAgLTMwMyw2ICszMjYsOSBAQAogI2RlZmluZSBWRU5ET1JfSURfRVpLRVkJCQkJMHgwNTE4CiAjZGVmaW5lIERFVklDRV9JRF9CVENfODE5MwkJCTB4MDAwMgogCisjZGVmaW5lIFZFTkRPUl9JRF9HWVJBVElPTgkJCTB4MGMxNgorI2RlZmluZSBERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFCQkweDAwMDIKKwogI2RlZmluZSBWRU5ET1JfSURfTE9HSVRFQ0gJCQkweDA0NmQKICNkZWZpbmUgREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSCQkweGMxMDEKICNkZWZpbmUgREVWSUNFX0lEX1M1MTBfUkVDRUlWRVIJCQkweGM1MGMKQEAgLTMzNyw2ICszNjMsOCBAQAogCiAJeyBWRU5ET1JfSURfRVpLRVksIERFVklDRV9JRF9CVENfODE5MywgcXVpcmtfYnRjXzgxOTMgfSwKIAorCXsgVkVORE9SX0lEX0dZUkFUSU9OLCBERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFLCBxdWlya19neXJhdGlvbl9yZW1vdGUgfSwKKwogCXsgVkVORE9SX0lEX0xPR0lURUNILCBERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIsIHF1aXJrX2xvZ2l0ZWNoX3VsdHJheF9yZW1vdGUgfSwKIAl7IFZFTkRPUl9JRF9MT0dJVEVDSCwgREVWSUNFX0lEX1M1MTBfUkVDRUlWRVIsIHF1aXJrX2xvZ2l0ZWNoX3dpcmVsZXNzIH0sCiAJeyBWRU5ET1JfSURfTE9HSVRFQ0gsIERFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIsIHF1aXJrX2xvZ2l0ZWNoX3dpcmVsZXNzIH0sCkBAIC00MzgsNiArNDY2LDE4IEBACiAJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgUkVMX1dIRUVMLCAtdmFsdWUpOwogCQlyZXR1cm4gMTsKIAl9CisKKwkvKiBHeXJhdGlvbiBNQ0UgcmVtb3RlICJTbGVlcCIga2V5ICovCisJaWYgKGhpZC0+dmVuZG9yID09IFZFTkRPUl9JRF9HWVJBVElPTiAmJgorCSAgICBoaWQtPnByb2R1Y3QgPT0gREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URSAmJgorCSAgICAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSA9PSBISURfVVBfR0VOREVTSyAmJgorCSAgICAodXNhZ2UtPmhpZCAmIDB4ZmYpID09IDB4ODIpIHsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwgMSk7CisJCWlucHV0X3N5bmMoaW5wdXQpOworCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlLCAwKTsKKwkJaW5wdXRfc3luYyhpbnB1dCk7CisJCXJldHVybiAxOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCA1YzUyYTIwLi4xYjJlOGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtMTAwLDYgKzEwMCw4IEBACiAJeyBLRVlfRjIsICAgICAgIEtFWV9CUklHSFRORVNTVVAsICAgQVBQTEVfRkxBR19GS0VZIH0sCiAJeyBLRVlfRjMsICAgICAgIEtFWV9GTl9GNSwgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sIC8qIEV4cG9z6SAqLwogCXsgS0VZX0Y0LCAgICAgICBLRVlfRk5fRjQsICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LCAvKiBEYXNoYm9hcmQgKi8KKwl7IEtFWV9GNSwgICAgICAgS0VZX0tCRElMTFVNRE9XTiwgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GNiwgICAgICAgS0VZX0tCRElMTFVNVVAsICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKIAl7IEtFWV9GNywgICAgICAgS0VZX1BSRVZJT1VTU09ORywgICBBUFBMRV9GTEFHX0ZLRVkgfSwKIAl7IEtFWV9GOCwgICAgICAgS0VZX1BMQVlQQVVTRSwgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKIAl7IEtFWV9GOSwgICAgICAgS0VZX05FWFRTT05HLCAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKQEAgLTYxMiw2ICs2MTQsNyBAQAogCQkJCWNhc2UgMHgwYjY6IG1hcF9rZXlfY2xlYXIoS0VZX1BSRVZJT1VTU09ORyk7CWJyZWFrOwogCQkJCWNhc2UgMHgwYjc6IG1hcF9rZXlfY2xlYXIoS0VZX1NUT1BDRCk7CQlicmVhazsKIAkJCQljYXNlIDB4MGI4OiBtYXBfa2V5X2NsZWFyKEtFWV9FSkVDVENEKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwYmM6IG1hcF9rZXlfY2xlYXIoS0VZX01FRElBX1JFUEVBVCk7CWJyZWFrOwogCiAJCQkJY2FzZSAweDBjZDogbWFwX2tleV9jbGVhcihLRVlfUExBWVBBVVNFKTsJYnJlYWs7CiAJCQkgICAgICAgIGNhc2UgMHgwZTA6IG1hcF9hYnNfY2xlYXIoQUJTX1ZPTFVNRSk7CQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKaW5kZXggMmZkZTZjNi4uYzQwZjA0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkcmF3LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKQEAgLTEwNSw2ICsxMDUsNyBAQAogc3RhdGljIHNzaXplX3QgaGlkcmF3X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJLyogRklYTUU6IFdoYXQgc3RvcHMgaGlkcmF3X3RhYmxlIGdvaW5nIE5VTEwgKi8KIAlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2ID0gaGlkcmF3X3RhYmxlW21pbm9yXS0+aGlkOwogCV9fdTggKmJ1ZjsKIAlpbnQgcmV0ID0gMDsKQEAgLTIxMSwzOCArMjEyLDQzIEBACiAJCQlrZnJlZShsaXN0LT5oaWRyYXcpOwogCX0KIAorCWtmcmVlKGxpc3QpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGlkcmF3X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGhpZHJhd19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCWxvbmcgcmV0ID0gMDsKKwkvKiBGSVhNRTogV2hhdCBzdG9wcyBoaWRyYXdfdGFibGUgZ29pbmcgTlVMTCAqLwogCXN0cnVjdCBoaWRyYXcgKmRldiA9IGhpZHJhd190YWJsZVttaW5vcl07CiAJdm9pZCBfX3VzZXIgKnVzZXJfYXJnID0gKHZvaWQgX191c2VyKikgYXJnOwogCisJbG9ja19rZXJuZWwoKTsKIAlzd2l0Y2ggKGNtZCkgewogCQljYXNlIEhJRElPQ0dSREVTQ1NJWkU6CiAJCQlpZiAocHV0X3VzZXIoZGV2LT5oaWQtPnJzaXplLCAoaW50IF9fdXNlciAqKWFyZykpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CiAKIAkJY2FzZSBISURJT0NHUkRFU0M6CiAJCQl7CiAJCQkJX191MzIgbGVuOwogCiAJCQkJaWYgKGdldF91c2VyKGxlbiwgKGludCBfX3VzZXIgKilhcmcpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJCWlmIChsZW4gPiBISURfTUFYX0RFU0NSSVBUT1JfU0laRSAtIDEpCi0JCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZyArIG9mZnNldG9mKAotCQkJCQkJCQlzdHJ1Y3QgaGlkcmF3X3JlcG9ydF9kZXNjcmlwdG9yLAotCQkJCQkJCQl2YWx1ZVswXSksCi0JCQkJCQkJZGV2LT5oaWQtPnJkZXNjLAotCQkJCQkJCW1pbihkZXYtPmhpZC0+cnNpemUsIGxlbikpKQotCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJcmV0dXJuIDA7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZWxzZSBpZiAobGVuID4gSElEX01BWF9ERVNDUklQVE9SX1NJWkUgLSAxKQorCQkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWVsc2UgaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZyArIG9mZnNldG9mKAorCQkJCQlzdHJ1Y3QgaGlkcmF3X3JlcG9ydF9kZXNjcmlwdG9yLAorCQkJCQl2YWx1ZVswXSksCisJCQkJCWRldi0+aGlkLT5yZGVzYywKKwkJCQkJbWluKGRldi0+aGlkLT5yc2l6ZSwgbGVuKSkpCisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgSElESU9DR1JBV0lORk86CiAJCQl7CkBAIC0yNTIsMTUgKzI1OCwxMyBAQAogCQkJCWRpbmZvLnZlbmRvciA9IGRldi0+aGlkLT52ZW5kb3I7CiAJCQkJZGluZm8ucHJvZHVjdCA9IGRldi0+aGlkLT5wcm9kdWN0OwogCQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZkaW5mbywgc2l6ZW9mKGRpbmZvKSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCi0JCQkJcmV0dXJuIDA7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CiAJCQl9CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FTUVSRyAiaGlkcmF3OiB1bnN1cHBvcnRlZCBpb2N0bCgpICV4XG4iLAotCQkJCQljbWQpOworCQkJcmV0ID0gLUVOT1RUWTsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGlkcmF3X29wcyA9IHsKQEAgLTI3MCw3ICsyNzQsNyBAQAogCS5wb2xsID0gICAgICAgICBoaWRyYXdfcG9sbCwKIAkub3BlbiA9ICAgICAgICAgaGlkcmF3X29wZW4sCiAJLnJlbGVhc2UgPSAgICAgIGhpZHJhd19yZWxlYXNlLAotCS5pb2N0bCA9ICAgICAgICBoaWRyYXdfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gaGlkcmF3X2lvY3RsLAogfTsKIAogdm9pZCBoaWRyYXdfcmVwb3J0X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHU4ICpkYXRhLCBpbnQgbGVuKQpAQCAtMzIyLDggKzMyNiw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWRldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShoaWRyYXdfY2xhc3MsIE5VTEwsIE1LREVWKGhpZHJhd19tYWpvciwgbWlub3IpLAotCQkJCSIlcyVkIiwgImhpZHJhdyIsIG1pbm9yKTsKKwlkZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShoaWRyYXdfY2xhc3MsIE5VTEwsCisJCQkJCSBNS0RFVihoaWRyYXdfbWFqb3IsIG1pbm9yKSwgTlVMTCwKKwkJCQkJICIlcyVkIiwgImhpZHJhdyIsIG1pbm9yKTsKIAogCWlmIChJU19FUlIoZGV2LT5kZXYpKSB7CiAJCXNwaW5fbG9jaygmbWlub3JzX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCAwMTQyN2M1Li4yN2ZlNGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCWRldl9kYmcoJnVzYmhpZC0+aW50Zi0+ZGV2LCAicmVzZXR0aW5nIGRldmljZVxuIik7CiAJCXJjID0gcmNfbG9jayA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoaGlkX3RvX3VzYl9kZXYoaGlkKSwgdXNiaGlkLT5pbnRmKTsKIAkJaWYgKHJjX2xvY2sgPj0gMCkgewotCQkJcmMgPSB1c2JfcmVzZXRfY29tcG9zaXRlX2RldmljZShoaWRfdG9fdXNiX2RldihoaWQpLCB1c2JoaWQtPmludGYpOworCQkJcmMgPSB1c2JfcmVzZXRfZGV2aWNlKGhpZF90b191c2JfZGV2KGhpZCkpOwogCQkJaWYgKHJjX2xvY2spCiAJCQkJdXNiX3VubG9ja19kZXZpY2UoaGlkX3RvX3VzYl9kZXYoaGlkKSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IDFkZjgzMmEuLjYxZTc4YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtNjksMTIgKzY5LDE4IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0FOU0kJMHgwMjIwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTwkweDAyMjEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTCTB4MDIyMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfQU5TSQkweDAyMjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0lTTwkweDAyMjQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0pJUwkweDAyMjUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0FOU0kgICAgMHgwMjI5CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9JU08gICAgIDB4MDIyYQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSklTICAgICAweDAyMmIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSAgMHgwMjJjCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0lTTyAgIDB4MDIyZAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMgICAweDAyMmUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9BTlNJCTB4MDIzMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0lTTwkweDAyMzEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9KSVMJMHgwMjMyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fVFBfT05MWQkweDAzMGEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIxX1RQX09OTFkJMHgwMzBiCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNAkweDgyNDIKQEAgLTI0MSw2ICsyNDcsOCBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01BQ0hJTkVURVNUCTB4MjA0MAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gJCTB4MDQ2ZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0xYMwkweGMwNDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9WMTUwCTB4YzA0NwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSCTB4YzEwMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTlkgIDB4YzExMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMiAweGMxMTEKQEAgLTMxNCw2ICszMjIsNyBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1M1MTBfUkVDRUlWRVJfMgkweGM1MTcKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9DT1JETEVTU19ERVNLVE9QX0xYNTAwCTB4YzUxMgogI2RlZmluZSBVU0JfREVWSUNFX0lEX01YMzAwMF9SRUNFSVZFUgkweGM1MTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fREVTS1RPUAkweGM3MDQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fRURHRQkweGM3MTQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fTUlOSQkweGM3MWYKIApAQCAtNDQzLDcgKzQ1Miw4IEBACiAJeyBVU0JfVkVORE9SX0lEX05FQywgVVNCX0RFVklDRV9JRF9ORUNfVVNCX0dBTUVfUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAJeyBVU0JfVkVORE9SX0lEX1NBSVRFSywgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAJeyBVU0JfVkVORE9SX0lEX1RPUE1BWCwgVVNCX0RFVklDRV9JRF9UT1BNQVhfQ09CUkFQQUQsIEhJRF9RVUlSS19CQURQQUQgfSwKLQkKKworCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9ESU5PVk9fREVTS1RPUCwgSElEX1FVSVJLX0RVUExJQ0FURV9VU0FHRVMgfSwKIAl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfRElOT1ZPX0VER0UsIEhJRF9RVUlSS19EVVBMSUNBVEVfVVNBR0VTIH0sCiAJeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0RJTk9WT19NSU5JLCBISURfUVVJUktfRFVQTElDQVRFX1VTQUdFUyB9LAogCkBAIC01OTMsNiArNjAzLDggQEAKIAogCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FTElURV9LQkQsIEhJRF9RVUlSS19MT0dJVEVDSF9JR05PUkVfRE9VQkxFRF9XSEVFTCB8IEhJRF9RVUlSS19MT0dJVEVDSF9FWFBBTkRFRF9LRVlNQVAgfSwKIAl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfQ09SRExFU1NfREVTS1RPUF9MWDUwMCwgSElEX1FVSVJLX0xPR0lURUNIX0lHTk9SRV9ET1VCTEVEX1dIRUVMIHwgSElEX1FVSVJLX0xPR0lURUNIX0VYUEFOREVEX0tFWU1BUCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9MWDMsIEhJRF9RVUlSS19JTlZFUlRfSFdIRUVMIH0sCisJeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1YxNTAsIEhJRF9RVUlSS19JTlZFUlRfSFdIRUVMIH0sCiAKIAl7IFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX01TX05FNEssIEhJRF9RVUlSS19NSUNST1NPRlRfS0VZUyB9LAogCXsgVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfTEs2SywgSElEX1FVSVJLX01JQ1JPU09GVF9LRVlTIH0sCkBAIC02NDIsNiArNjU0LDEyIEBACiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19JU08sIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMsIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfSwKKwl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19BTlNJLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCisJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfSVNPLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0FQUExFX0lTT19LRVlCT0FSRCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0pJUywgSElEX1FVSVJLX0FQUExFX0hBU19GTiB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9BTlNJLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCisJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0lTTywgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzJfSklTLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX1RQX09OTFksIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjFfVFBfT05MWSwgSElEX1FVSVJLX0FQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0UgfSwKIApAQCAtMTEyOCw3ICsxMTQ2LDcgQEAKIAkJCSAmJiByZGVzY1s1NTddID09IDB4MTkKIAkJCSAmJiByZGVzY1s1NTldID09IDB4MjkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRml4aW5nIHVwIE1pY3Jvc29mdCBXaXJlbGVzcyBSZWNlaXZlciBNb2RlbCAxMDI4IHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKLQkJcmRlc2NbMjg0XSA9IHJkZXNjWzMwNF0gPSByZGVzY1s1NThdID0gMHgzNTsKKwkJcmRlc2NbMjg0XSA9IHJkZXNjWzMwNF0gPSByZGVzY1s1NTddID0gMHgzNTsKIAkJcmRlc2NbMzUyXSA9IDB4MzY7CiAJCXJkZXNjWzI4Nl0gPSByZGVzY1szNTVdID0gMHg0NjsKIAkJcmRlc2NbMzA2XSA9IHJkZXNjWzU1OV0gPSAweDQ1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IDk1Y2MxOTIuLjg0MmU5ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTQwNiw2ICs0MDYsNyBAQAogCXVyZWZfbXVsdGkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZl9tdWx0aSksIEdGUF9LRVJORUwpOwogCWlmICghdXJlZl9tdWx0aSkKIAkJcmV0dXJuIC1FTk9NRU07CisJbG9ja19rZXJuZWwoKTsKIAl1cmVmID0gJnVyZWZfbXVsdGktPnVyZWY7CiAJaWYgKGNtZCA9PSBISURJT0NHVVNBR0VTIHx8IGNtZCA9PSBISURJT0NTVVNBR0VTKSB7CiAJCWlmIChjb3B5X2Zyb21fdXNlcih1cmVmX211bHRpLCB1c2VyX2FyZywKQEAgLTUwMSwxMiArNTAyLDE1IEBACiAJCX0KIAogZ29vZHJldHVybjoKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlrZnJlZSh1cmVmX211bHRpKTsKIAkJcmV0dXJuIDA7CiBmYXVsdDoKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlrZnJlZSh1cmVmX211bHRpKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiBpbnZhbDoKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlrZnJlZSh1cmVmX211bHRpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTQwLDcgKzU0NCw3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGludCBoaWRkZXZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgaGlkZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGhpZGRldiAqaGlkZGV2ID0gbGlzdC0+aGlkZGV2OwpAQCAtNTU1LDcgKzU1OSwxMCBAQAogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCXZvaWQgX191c2VyICp1c2VyX2FyZyA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgaTsKKwkKKwkvKiBDYWxsZWQgd2l0aG91dCBCS0wgYnkgY29tcGF0IG1ldGhvZHMgc28gbm8gQktMIHRha2VuICovCiAKKwkvKiBGSVhNRTogV2hvIG9yIHdoYXQgc3RvcCB0aGlzIHJhY2luZyB3aXRoIGEgZGlzY29ubmVjdCA/PyAqLwogCWlmICghaGlkZGV2LT5leGlzdCkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTc1Niw4ICs3NjMsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIHN0YXRpYyBsb25nIGhpZGRldl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCXJldHVybiBoaWRkZXZfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKKwlyZXR1cm4gaGlkZGV2X2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKIH0KICNlbmRpZgogCkBAIC03NjgsNyArNzc0LDcgQEAKIAkucG9sbCA9CQloaWRkZXZfcG9sbCwKIAkub3BlbiA9CQloaWRkZXZfb3BlbiwKIAkucmVsZWFzZSA9CWhpZGRldl9yZWxlYXNlLAotCS5pb2N0bCA9CWhpZGRldl9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPQloaWRkZXZfaW9jdGwsCiAJLmZhc3luYyA9CWhpZGRldl9mYXN5bmMsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSBoaWRkZXZfY29tcGF0X2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jCmluZGV4IDNjZDQ2ZDIuLjBjYWFhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JrYmQuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNia2JkLmMKQEAgLTQzLDcgKzQzLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5TRSk7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHVzYl9rYmRfa2V5Y29kZVsyNTZdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdXNiX2tiZF9rZXljb2RlWzI1Nl0gPSB7CiAJICAwLCAgMCwgIDAsICAwLCAzMCwgNDgsIDQ2LCAzMiwgMTgsIDMzLCAzNCwgMzUsIDIzLCAzNiwgMzcsIDM4LAogCSA1MCwgNDksIDI0LCAyNSwgMTYsIDE5LCAzMSwgMjAsIDIyLCA0NywgMTcsIDQ1LCAyMSwgNDQsICAyLCAgMywKIAkgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAyOCwgIDEsIDE0LCAxNSwgNTcsIDEyLCAxMywgMjYsCkBAIC0yMzMsMTQgKzIzMyw2IEBACiAJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLSNpZmRlZiBDT05GSUdfVVNCX0hJRAotCWlmICh1c2JoaWRfbG9va3VwX3F1aXJrKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpCi0JCQkmIEhJRF9RVUlSS19JR05PUkUpIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotI2VuZGlmCi0KIAlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CiAJbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2Jtb3VzZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKaW5kZXggNzAzZTlkMC4uMzU2ODllZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKQEAgLTEyOSwxNCArMTI5LDYgQEAKIAlpZiAoIXVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotI2lmZGVmIENPTkZJR19VU0JfSElECi0JaWYgKHVzYmhpZF9sb29rdXBfcXVpcmsobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkKLQkJCSYgKEhJRF9RVUlSS19JR05PUkV8SElEX1FVSVJLX0lHTk9SRV9NT1VTRSkpIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotI2VuZGlmCi0KIAlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CiAJbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCA1MGYyMjY5Li5hNGQ5MmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC01ODEsNiArNTgxLDggQEAKIAkvKiBpbml0aWFsaXplIHRoZSBpbnB1dCBjbGFzcyAqLwogCWlkZXYgPSBoZGFwc19pZGV2LT5pbnB1dDsKIAlpZGV2LT5uYW1lID0gImhkYXBzIjsKKwlpZGV2LT5waHlzID0gImlzYTE2MDAvaW5wdXQwIjsKKwlpZGV2LT5pZC5idXN0eXBlID0gQlVTX0lTQTsKIAlpZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAlpZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0FCUyk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaWRldiwgQUJTX1gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2h3bW9uLmMgYi9kcml2ZXJzL2h3bW9uL2h3bW9uLmMKaW5kZXggM2RiMjg0NS4uNzMyMWE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vaHdtb24uYwpAQCAtNTUsNyArNTUsOCBAQAogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCiAJaWQgPSBpZCAmIE1BWF9JRF9NQVNLOwotCWh3ZGV2ID0gZGV2aWNlX2NyZWF0ZShod21vbl9jbGFzcywgZGV2LCBNS0RFVigwLDApLCBIV01PTl9JRF9GT1JNQVQsIGlkKTsKKwlod2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShod21vbl9jbGFzcywgZGV2LCBNS0RFVigwLCAwKSwgTlVMTCwKKwkJCQkgICAgICBIV01PTl9JRF9GT1JNQVQsIGlkKTsKIAogCWlmIChJU19FUlIoaHdkZXYpKSB7CiAJCXNwaW5fbG9jaygmaWRyX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggNzYwOGRmOC4uN2JmMzhjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC03MjIsNyArNzIyLDggQEAKIAogCUlOSVRfTElTVF9IRUFEKCZkcml2ZXItPmNsaWVudHMpOwogCS8qIFdhbGsgdGhlIGFkYXB0ZXJzIHRoYXQgYXJlIGFscmVhZHkgcHJlc2VudCAqLwotCWNsYXNzX2Zvcl9lYWNoX2RldmljZSgmaTJjX2FkYXB0ZXJfY2xhc3MsIGRyaXZlciwgX19hdHRhY2hfYWRhcHRlcik7CisJY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZpMmNfYWRhcHRlcl9jbGFzcywgTlVMTCwgZHJpdmVyLAorCQkJICAgICAgX19hdHRhY2hfYWRhcHRlcik7CiAKIAltdXRleF91bmxvY2soJmNvcmVfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC03ODIsNyArNzgzLDggQEAKIHsKIAltdXRleF9sb2NrKCZjb3JlX2xvY2spOwogCi0JY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZpMmNfYWRhcHRlcl9jbGFzcywgZHJpdmVyLCBfX2RldGFjaF9hZGFwdGVyKTsKKwljbGFzc19mb3JfZWFjaF9kZXZpY2UoJmkyY19hZGFwdGVyX2NsYXNzLCBOVUxMLCBkcml2ZXIsCisJCQkgICAgICBfX2RldGFjaF9hZGFwdGVyKTsKIAogCWRyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXItPmRyaXZlcik7CiAJcHJfZGVidWcoImkyYy1jb3JlOiBkcml2ZXIgWyVzXSB1bnJlZ2lzdGVyZWRcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWRldi5jIGIvZHJpdmVycy9pMmMvaTJjLWRldi5jCmluZGV4IDg2NzI3ZmEuLjlkNTVjNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1kZXYuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKQEAgLTUyMSw5ICs1MjEsOSBAQAogCQlyZXR1cm4gUFRSX0VSUihpMmNfZGV2KTsKIAogCS8qIHJlZ2lzdGVyIHRoaXMgaTJjIGRldmljZSB3aXRoIHRoZSBkcml2ZXIgY29yZSAqLwotCWkyY19kZXYtPmRldiA9IGRldmljZV9jcmVhdGUoaTJjX2Rldl9jbGFzcywgJmFkYXAtPmRldiwKLQkJCQkgICAgIE1LREVWKEkyQ19NQUpPUiwgYWRhcC0+bnIpLAotCQkJCSAgICAgImkyYy0lZCIsIGFkYXAtPm5yKTsKKwlpMmNfZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoaTJjX2Rldl9jbGFzcywgJmFkYXAtPmRldiwKKwkJCQkJICAgICBNS0RFVihJMkNfTUFKT1IsIGFkYXAtPm5yKSwKKwkJCQkJICAgICBOVUxMLCAiaTJjLSVkIiwgYWRhcC0+bnIpOwogCWlmIChJU19FUlIoaTJjX2Rldi0+ZGV2KSkgewogCQlyZXMgPSBQVFJfRVJSKGkyY19kZXYtPmRldik7CiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9LY29uZmlnIGIvZHJpdmVycy9pZGUvS2NvbmZpZwppbmRleCAxNWIwOWI4Li4wNGQ5YzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWRlL0tjb25maWcKQEAgLTUxMCw2ICs1MTAsNyBAQAogCiBjb25maWcgQkxLX0RFVl9DWTgyQzY5MwogCXRyaXN0YXRlICJDWTgyQzY5MyBjaGlwc2V0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBTFBIQQogCXNlbGVjdCBJREVfVElNSU5HUwogCXNlbGVjdCBCTEtfREVWX0lERURNQV9QQ0kKIAloZWxwCkBAIC01NDgsNiArNTQ5LDcgQEAKIAogY29uZmlnIEJMS19ERVZfSFBUMzRYCiAJdHJpc3RhdGUgIkhQVDM0WCBjaGlwc2V0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBCUk9LRU4KIAlzZWxlY3QgQkxLX0RFVl9JREVETUFfUENJCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyB1cCB0byA0IG1vcmUgRUlERSBkZXZpY2VzIHNoYXJpbmcgYSBzaW5nbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FybS9pY3NpZGUuYyBiL2RyaXZlcnMvaWRlL2FybS9pY3NpZGUuYwppbmRleCA1MmY1OGM4Li5mNTc1ZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vaWNzaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jCkBAIC03Miw3ICs3Miw3IEBACiAJdm9pZCBfX2lvbWVtICppb2NfYmFzZTsKIAl1bnNpZ25lZCBpbnQgc2VsOwogCXVuc2lnbmVkIGludCB0eXBlOwotCWlkZV9od2lmX3QgKmh3aWZbMl07CisJc3RydWN0IGlkZV9ob3N0ICpob3N0OwogfTsKIAogI2RlZmluZSBJQ1NfVFlQRV9BM0lOCTAKQEAgLTM3NSwxMiArMzc1LDE0IEBACiAKIHN0YXRpYyB2b2lkIGljc2lkZV9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCiAJcHJpbnRrKEtFUk5fRVJSICIlczogRE1BIHRpbWVvdXQgb2NjdXJyZWQ6ICIsIGRyaXZlLT5uYW1lKTsKIAogCWlmIChpY3NpZGVfZG1hX3Rlc3RfaXJxKGRyaXZlKSkKIAkJcmV0dXJuOwogCi0JaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAiRE1BIHRpbWVvdXQiLCBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpKTsKKwlpZGVfZHVtcF9zdGF0dXMoZHJpdmUsICJETUEgdGltZW91dCIsIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOwogCiAJaWNzaWRlX2RtYV9lbmQoZHJpdmUpOwogfQpAQCAtNDQwLDEwICs0NDIsMTAgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBpY3NpZGVfcmVnaXN0ZXJfdjUoc3RydWN0IGljc2lkZV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKIAl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0JaHdfcmVnc190IGh3OworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKKwlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CisJaW50IHJldDsKIAogCWJhc2UgPSBlY2FyZG1faW9tYXAoZWMsIEVDQVJEX1JFU19NRU1DLCAwLCAwKTsKIAlpZiAoIWJhc2UpCkBAIC00NjMsMjIgKzQ2NSwyMyBAQAogCiAJaWNzaWRlX3NldHVwX3BvcnRzKCZodywgYmFzZSwgJmljc2lkZV9jYXJkaW5mb192NSwgZWMpOwogCi0JaHdpZiA9IGlkZV9maW5kX3BvcnQoKTsKLQlpZiAoIWh3aWYpCisJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKE5VTEwsIGh3cyk7CisJaWYgKGhvc3QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7Ci0JZGVmYXVsdF9od2lmX21taW9wcyhod2lmKTsKLQotCXN0YXRlLT5od2lmWzBdID0gaHdpZjsKKwlzdGF0ZS0+aG9zdCA9IGhvc3Q7CiAKIAllY2FyZF9zZXRfZHJ2ZGF0YShlYywgc3RhdGUpOwogCi0JaWR4WzBdID0gaHdpZi0+aW5kZXg7Ci0KLQlpZGVfZGV2aWNlX2FkZChpZHgsIE5VTEwpOworCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsIE5VTEwsIGh3cyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKIAogCXJldHVybiAwOworZXJyX2ZyZWU6CisJaWRlX2hvc3RfZnJlZShob3N0KTsKKwllY2FyZF9zZXRfZHJ2ZGF0YShlYywgTlVMTCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGljc2lkZV92Nl9wb3J0X2luZm8gX19pbml0ZGF0YSA9IHsKQEAgLTQ5MywxMyArNDk2LDEyIEBACiBzdGF0aWMgaW50IF9faW5pdAogaWNzaWRlX3JlZ2lzdGVyX3Y2KHN0cnVjdCBpY3NpZGVfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjKQogewotCWlkZV9od2lmX3QgKmh3aWYsICptYXRlOwogCXZvaWQgX19pb21lbSAqaW9jX2Jhc2UsICplYXNpX2Jhc2U7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0OwogCXVuc2lnbmVkIGludCBzZWwgPSAwOwogCWludCByZXQ7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJaHdfcmVnc190IGh3WzJdLCAqaHdzW10gPSB7ICZod1swXSwgTlVMTCwgTlVMTCwgTlVMTCB9OwogCXN0cnVjdCBpZGVfcG9ydF9pbmZvIGQgPSBpY3NpZGVfdjZfcG9ydF9pbmZvOwotCWh3X3JlZ3NfdCBod1syXTsKIAogCWlvY19iYXNlID0gZWNhcmRtX2lvbWFwKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCwgMCwgMCk7CiAJaWYgKCFpb2NfYmFzZSkgewpAQCAtNTM4LDI4ICs1NDAsMTEgQEAKIAlpY3NpZGVfc2V0dXBfcG9ydHMoJmh3WzBdLCBlYXNpX2Jhc2UsICZpY3NpZGVfY2FyZGluZm9fdjZfMSwgZWMpOwogCWljc2lkZV9zZXR1cF9wb3J0cygmaHdbMV0sIGVhc2lfYmFzZSwgJmljc2lkZV9jYXJkaW5mb192Nl8yLCBlYyk7CiAKLQkvKgotCSAqIEZpbmQgYW5kIHJlZ2lzdGVyIHRoZSBpbnRlcmZhY2VzLgotCSAqLwotCWh3aWYgPSBpZGVfZmluZF9wb3J0KCk7Ci0JaWYgKGh3aWYgPT0gTlVMTCkKKwlob3N0ID0gaWRlX2hvc3RfYWxsb2MoJmQsIGh3cyk7CisJaWYgKGhvc3QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZod1swXSk7Ci0JZGVmYXVsdF9od2lmX21taW9wcyhod2lmKTsKLQotCWlkeFswXSA9IGh3aWYtPmluZGV4OwotCi0JbWF0ZSA9IGlkZV9maW5kX3BvcnQoKTsKLQlpZiAobWF0ZSkgewotCQlpZGVfaW5pdF9wb3J0X2h3KG1hdGUsICZod1sxXSk7Ci0JCWRlZmF1bHRfaHdpZl9tbWlvcHMobWF0ZSk7Ci0KLQkJaWR4WzFdID0gbWF0ZS0+aW5kZXg7Ci0JfQotCi0Jc3RhdGUtPmh3aWZbMF0gICAgPSBod2lmOwotCXN0YXRlLT5od2lmWzFdICAgID0gbWF0ZTsKKwlzdGF0ZS0+aG9zdCA9IGhvc3Q7CiAKIAllY2FyZF9zZXRfZHJ2ZGF0YShlYywgc3RhdGUpOwogCkBAIC01NjksMTEgKzU1NCwxNyBAQAogCQlkLmRtYV9vcHMgPSBOVUxMOwogCX0KIAotCWlkZV9kZXZpY2VfYWRkKGlkeCwgJmQpOworCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsIE5VTEwsIGh3cyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKIAogCXJldHVybiAwOwotCi0gb3V0OgorZXJyX2ZyZWU6CisJaWRlX2hvc3RfZnJlZShob3N0KTsKKwlpZiAoZC5kbWFfb3BzKQorCQlmcmVlX2RtYShlYy0+ZG1hKTsKKwllY2FyZF9zZXRfZHJ2ZGF0YShlYywgTlVMTCk7CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL2lkZV9hcm0uYyBiL2RyaXZlcnMvaWRlL2FybS9pZGVfYXJtLmMKaW5kZXggMmYzMTFkYS4uMTc2NTMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXJtL2lkZV9hcm0uYworKysgYi9kcml2ZXJzL2lkZS9hcm0vaWRlX2FybS5jCkBAIC0yOCwxMCArMjgsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpZGVfYXJtX2luaXQodm9pZCkKIHsKLQlpZGVfaHdpZl90ICpod2lmOwotCWh3X3JlZ3NfdCBodzsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBJREVfQVJNX0lPLCBjdGwgPSBJREVfQVJNX0lPICsgMHgyMDY7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihiYXNlLCA4LCBEUlZfTkFNRSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSS9PIHJlc291cmNlIDB4JWxYLTB4JWxYIG5vdCBmcmVlLlxuIiwKQEAgLTUxLDE1ICs0OSw3IEBACiAJaHcuaXJxID0gSURFX0FSTV9JUlE7CiAJaHcuY2hpcHNldCA9IGlkZV9nZW5lcmljOwogCi0JaHdpZiA9IGlkZV9maW5kX3BvcnQoKTsKLQlpZiAoaHdpZikgewotCQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7Ci0JCWlkeFswXSA9IGh3aWYtPmluZGV4OwotCi0JCWlkZV9kZXZpY2VfYWRkKGlkeCwgTlVMTCk7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOwogfQogCiBtb2R1bGVfaW5pdChpZGVfYXJtX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL3BhbG1fYmszNzEwLmMgYi9kcml2ZXJzL2lkZS9hcm0vcGFsbV9iazM3MTAuYwppbmRleCBjNzliODViLi42NWJiNGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vcGFsbV9iazM3MTAuYworKysgYi9kcml2ZXJzL2lkZS9hcm0vcGFsbV9iazM3MTAuYwpAQCAtMzE2LDE1ICszMTYsMTQgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBhbG1fYmszNzEwX2luaXRfZG1hKGlkZV9od2lmX3QgKmh3aWYsCiAJCQkJCSAgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCiB7Ci0JdW5zaWduZWQgbG9uZyBiYXNlID0KLQkJaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyIC0gSURFX1BBTE1fQVRBX1BSSV9SRUdfT0ZGU0VUOwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiICAgICVzOiBNTUlPLURNQVxuIiwgaHdpZi0+bmFtZSk7CiAKIAlpZiAoaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUoaHdpZikpCiAJCXJldHVybiAtMTsKIAotCWlkZV9zZXR1cF9kbWEoaHdpZiwgYmFzZSk7CisJaHdpZi0+ZG1hX2Jhc2UgPSBod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIgLSBJREVfUEFMTV9BVEFfUFJJX1JFR19PRkZTRVQ7CisKKwlod2lmLT5kbWFfb3BzID0gJnNmZl9kbWFfb3BzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNDgsMTEgKzM0NywxMCBAQAogewogCXN0cnVjdCBjbGsgKmNsazsKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgKmlycTsKLQlpZGVfaHdpZl90ICpod2lmOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKIAl1bnNpZ25lZCBsb25nIGJhc2UsIHJhdGU7Ci0JaW50IGk7Ci0JaHdfcmVnc190IGh3OwotCXU4IGlkeFs0XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCWludCBpLCByYzsKKwlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKIAljbGsgPSBjbGtfZ2V0KE5VTEwsICJJREVDTEsiKTsKIAlpZiAoSVNfRVJSKGNsaykpCkBAIC0zOTQsMjQgKzM5MiwxNCBAQAogCWh3LmlycSA9IGlycS0+c3RhcnQ7CiAJaHcuY2hpcHNldCA9IGlkZV9wYWxtMzcxMDsKIAotCWh3aWYgPSBpZGVfZmluZF9wb3J0KCk7Ci0JaWYgKGh3aWYgPT0gTlVMTCkKKwlyYyA9IGlkZV9ob3N0X2FkZCgmcGFsbV9iazM3MTBfcG9ydF9pbmZvLCBod3MsIE5VTEwpOworCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlpID0gaHdpZi0+aW5kZXg7Ci0KLQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7Ci0KLQlkZWZhdWx0X2h3aWZfbW1pb3BzKGh3aWYpOwotCi0JaWR4WzBdID0gaTsKLQotCWlkZV9kZXZpY2VfYWRkKGlkeCwgJnBhbG1fYmszNzEwX3BvcnRfaW5mbyk7Ci0KIAlyZXR1cm4gMDsKIG91dDoKIAlwcmludGsoS0VSTl9XQVJOSU5HICJQYWxtIENoaXAgQkszNzEwIElERSBSZWdpc3RlciBGYWlsXG4iKTsKLQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL3JhcGlkZS5jIGIvZHJpdmVycy9pZGUvYXJtL3JhcGlkZS5jCmluZGV4IDQzMDU3ZTAuLjJiZGQ4YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FybS9yYXBpZGUuYworKysgYi9kcml2ZXJzL2lkZS9hcm0vcmFwaWRlLmMKQEAgLTMyLDExICszMiwxMCBAQAogc3RhdGljIGludCBfX2RldmluaXQKIHJhcGlkZV9wcm9iZShzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLCBjb25zdCBzdHJ1Y3QgZWNhcmRfaWQgKmlkKQogewotCWlkZV9od2lmX3QgKmh3aWY7CiAJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKIAlpbnQgcmV0OwotCXU4IGlkeFs0XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotCWh3X3JlZ3NfdCBodzsKKwlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKIAlyZXQgPSBlY2FyZF9yZXF1ZXN0X3Jlc291cmNlcyhlYyk7CiAJaWYgKHJldCkKQEAgLTUzLDIwICs1MiwxMSBAQAogCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAlody5kZXYgPSAmZWMtPmRldjsKIAotCWh3aWYgPSBpZGVfZmluZF9wb3J0KCk7Ci0JaWYgKGh3aWYgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PRU5UOworCXJldCA9IGlkZV9ob3N0X2FkZCgmcmFwaWRlX3BvcnRfaW5mbywgaHdzLCAmaG9zdCk7CisJaWYgKHJldCkKIAkJZ290byByZWxlYXNlOwotCX0KIAotCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKLQlkZWZhdWx0X2h3aWZfbW1pb3BzKGh3aWYpOwotCi0JaWR4WzBdID0gaHdpZi0+aW5kZXg7Ci0KLQlpZGVfZGV2aWNlX2FkZChpZHgsICZyYXBpZGVfcG9ydF9pbmZvKTsKLQotCWVjYXJkX3NldF9kcnZkYXRhKGVjLCBod2lmKTsKKwllY2FyZF9zZXRfZHJ2ZGF0YShlYywgaG9zdCk7CiAJZ290byBvdXQ7CiAKICByZWxlYXNlOgpAQCAtNzcsMTEgKzY3LDExIEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCByYXBpZGVfcmVtb3ZlKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGVjYXJkX2dldF9kcnZkYXRhKGVjKTsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBlY2FyZF9nZXRfZHJ2ZGF0YShlYyk7CiAKIAllY2FyZF9zZXRfZHJ2ZGF0YShlYywgTlVMTCk7CiAKLQlpZGVfdW5yZWdpc3Rlcihod2lmKTsKKwlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7CiAKIAllY2FyZF9yZWxlYXNlX3Jlc291cmNlcyhlYyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYyBiL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jCmluZGV4IDIwZmFkNmQuLmJkZTdhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jCisrKyBiL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jCkBAIC0xMDAsNiArMTAwLDggQEAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCiAJb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJCXRmLT5mZWF0dXJlID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCkBAIC0xNTMsNiArMTU1LDIxIEBACiAJbW1fb3V0c3coZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGg4MzAwX3RwX29wcyA9IHsKKwkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCisJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKKwkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS5yZWFkX3NmZl9kbWFfc3RhdHVzCT0gaWRlX3JlYWRfc2ZmX2RtYV9zdGF0dXMsCisKKwkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IGg4MzAwX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gaDgzMDBfdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IGg4MzAwX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGg4MzAwX291dHB1dF9kYXRhLAorfTsKKwogI2RlZmluZSBIODMwMF9JREVfR0FQICgyKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHdfc2V0dXAoaHdfcmVnc190ICpodykKQEAgLTE2NywyNyArMTg0LDE0IEBACiAJaHctPmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGh3aWZfc2V0dXAoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlkZWZhdWx0X2h3aWZfaW9wcyhod2lmKTsKLQotCWh3aWYtPnRmX2xvYWQgPSBoODMwMF90Zl9sb2FkOwotCWh3aWYtPnRmX3JlYWQgPSBoODMwMF90Zl9yZWFkOwotCi0JaHdpZi0+aW5wdXRfZGF0YSAgPSBoODMwMF9pbnB1dF9kYXRhOwotCWh3aWYtPm91dHB1dF9kYXRhID0gaDgzMDBfb3V0cHV0X2RhdGE7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBoODMwMF9wb3J0X2luZm8gPSB7CisJLnRwX29wcwkJCT0gJmg4MzAwX3RwX29wcywKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fSU9fMzJCSVQgfCBJREVfSEZMQUdfTk9fRE1BLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaDgzMDBfaWRlX2luaXQodm9pZCkKIHsKLQlod19yZWdzX3QgaHc7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKLQlpbnQgaW5kZXg7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBIOC8zMDAgZ2VuZXJpYyBJREUgaW50ZXJmYWNlXG4iKTsKIApAQCAtMjAwLDE5ICsyMDQsNyBAQAogCiAJaHdfc2V0dXAoJmh3KTsKIAotCWh3aWYgPSBpZGVfZmluZF9wb3J0X3Nsb3QoJmg4MzAwX3BvcnRfaW5mbyk7Ci0JaWYgKGh3aWYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlpbmRleCA9IGh3aWYtPmluZGV4OwotCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKLQlod2lmX3NldHVwKGh3aWYpOwotCi0JaWR4WzBdID0gaW5kZXg7Ci0KLQlpZGVfZGV2aWNlX2FkZChpZHgsICZoODMwMF9wb3J0X2luZm8pOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlkZV9ob3N0X2FkZCgmaDgzMDBfcG9ydF9pbmZvLCBod3MsIE5VTEwpOwogCiBvdXRfYnVzeToKIAlwcmludGsoS0VSTl9FUlIgImlkZS1oODMwMDogSURFIEkvRiByZXNvdXJjZSBhbHJlYWR5IHVzZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKaW5kZXggMjgwMjAzMS4uYWRmMDRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKQEAgLTIyLDYgKzIyLDggQEAKIAl2b2lkICgqaW9fYnVmZmVycykoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqLCB1bnNpZ25lZCwgaW50KSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+aHdncm91cC0+cnE7CisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAl4ZmVyX2Z1bmNfdCAqeGZlcmZ1bmM7CiAJdW5zaWduZWQgaW50IHRlbXA7CiAJdTE2IGJjb3VudDsKQEAgLTMwLDEyICszMiwxMiBAQAogCWRlYnVnX2xvZygiRW50ZXIgJXMgLSBpbnRlcnJ1cHQgaGFuZGxlclxuIiwgX19mdW5jX18pOwogCiAJaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfVElNRURPVVQpIHsKLQkJcGMtPmNhbGxiYWNrKGRyaXZlKTsKKwkJZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAogCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KLQlzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKKwlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAogCWlmIChwYy0+ZmxhZ3MgJiBQQ19GTEFHX0RNQV9JTl9QUk9HUkVTUykgewogCQlpZiAoaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSkgfHwKQEAgLTYzLDggKzY1LDkgQEAKIAkJbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7CiAKIAkJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiAhc2NzaSAmJgotCQkgICAgKHN0YXQgJiBFUlJfU1RBVCkgJiYgcGMtPmNbMF0gPT0gUkVRVUVTVF9TRU5TRSkKKwkJICAgIChzdGF0ICYgRVJSX1NUQVQpICYmIHJxLT5jbWRbMF0gPT0gUkVRVUVTVF9TRU5TRSkKIAkJCXN0YXQgJj0gfkVSUl9TVEFUOworCiAJCWlmICgoc3RhdCAmIEVSUl9TVEFUKSB8fCAocGMtPmZsYWdzICYgUENfRkxBR19ETUFfRVJST1IpKSB7CiAJCQkvKiBFcnJvciBkZXRlY3RlZCAqLwogCQkJZGVidWdfbG9nKCIlczogSS9PIGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7CkBAIC03NSwxNiArNzgsMTcgQEAKIAkJCQkJZ290byBjbWRfZmluaXNoZWQ7CiAJCQl9CiAKLQkJCWlmIChwYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CisJCQlpZiAocnEtPmNtZFswXSA9PSBSRVFVRVNUX1NFTlNFKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSS9PIGVycm9yIGluIHJlcXVlc3Qgc2Vuc2UiCiAJCQkJCQkiIGNvbW1hbmRcbiIsIGRyaXZlLT5uYW1lKTsKIAkJCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAkJCX0KIAotCQkJZGVidWdfbG9nKCJbY21kICV4XTogY2hlY2sgY29uZGl0aW9uXG4iLCBwYy0+Y1swXSk7CisJCQlkZWJ1Z19sb2coIltjbWQgJXhdOiBjaGVjayBjb25kaXRpb25cbiIsIHJxLT5jbWRbMF0pOwogCiAJCQkvKiBSZXRyeSBvcGVyYXRpb24gKi8KIAkJCXJldHJ5X3BjKGRyaXZlKTsKKwogCQkJLyogcXVldWVkLCBidXQgbm90IHN0YXJ0ZWQgKi8KIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQpAQCAtOTUsOCArOTksMTAgQEAKIAkJCWRzY19oYW5kbGUoZHJpdmUpOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9CisKIAkJLyogQ29tbWFuZCBmaW5pc2hlZCAtIENhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uICovCi0JCXBjLT5jYWxsYmFjayhkcml2ZSk7CisJCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSk7CisKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIApAQCAtMTA3LDE2ICsxMTMsMTUgQEAKIAkJaWRlX2RtYV9vZmYoZHJpdmUpOwogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAl9Ci0JLyogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgb24gdGhpcyBpbnRlcnJ1cHQuICovCi0JYmNvdW50ID0gKGh3aWYtPklOQihod2lmLT5pb19wb3J0cy5sYmFoX2FkZHIpIDw8IDgpIHwKLQkJICBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHMubGJhbV9hZGRyKTsKIAotCWlyZWFzb24gPSBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHMubnNlY3RfYWRkcik7CisJLyogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgb24gdGhpcyBpbnRlcnJ1cHQuICovCisJaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGRyaXZlLCAmYmNvdW50LCAmaXJlYXNvbik7CiAKIAlpZiAoaXJlYXNvbiAmIENEKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvRCAhPSAwIGluICVzXG4iLCBkcml2ZS0+bmFtZSwgX19mdW5jX18pOwogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAl9CisKIAlpZiAoKChpcmVhc29uICYgSU8pID09IElPKSA9PSAhIShwYy0+ZmxhZ3MgJiBQQ19GTEFHX1dSSVRJTkcpKSB7CiAJCS8qIEhvcGVmdWxseSwgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZSAqLwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXZSB3YW50ZWQgdG8gJXMsIGJ1dCB0aGUgZGV2aWNlIHdhbnRzIHVzICIKQEAgLTEyNSw2ICsxMzAsNyBAQAogCQkJCShpcmVhc29uICYgSU8pID8gIlJlYWQiIDogIldyaXRlIik7CiAJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOwogCX0KKwogCWlmICghKHBjLT5mbGFncyAmIFBDX0ZMQUdfV1JJVElORykpIHsKIAkJLyogUmVhZGluZyAtIENoZWNrIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgKi8KIAkJdGVtcCA9IHBjLT54ZmVycmVkICsgYmNvdW50OwpAQCAtMTQyLDcgKzE0OCw3IEBACiAJCQkJCWlmIChwYy0+c2cpCiAJCQkJCQlpb19idWZmZXJzKGRyaXZlLCBwYywgdGVtcCwgMCk7CiAJCQkJCWVsc2UKLQkJCQkJCWh3aWYtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsCisJCQkJCQl0cF9vcHMtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsCiAJCQkJCQkJcGMtPmN1cl9wb3MsIHRlbXApOwogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0cmFuc2ZlcnJlZCAlZCBvZiAiCiAJCQkJCQkJIiVkIGJ5dGVzXG4iLApAQCAtMTU5LDkgKzE2NSw5IEBACiAJCQlkZWJ1Z19sb2coIlRoZSBkZXZpY2Ugd2FudHMgdG8gc2VuZCB1cyBtb3JlIGRhdGEgdGhhbiAiCiAJCQkJICAiZXhwZWN0ZWQgLSBhbGxvd2luZyB0cmFuc2ZlclxuIik7CiAJCX0KLQkJeGZlcmZ1bmMgPSBod2lmLT5pbnB1dF9kYXRhOworCQl4ZmVyZnVuYyA9IHRwX29wcy0+aW5wdXRfZGF0YTsKIAl9IGVsc2UKLQkJeGZlcmZ1bmMgPSBod2lmLT5vdXRwdXRfZGF0YTsKKwkJeGZlcmZ1bmMgPSB0cF9vcHMtPm91dHB1dF9kYXRhOwogCiAJaWYgKChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSAmJiAhc2NzaSAmJiAhcGMtPmJ1ZikgfHwKIAkgICAgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiAhc2NzaSAmJiBwYy0+YmgpIHx8CkBAIC0xNzUsNyArMTgxLDcgQEAKIAlwYy0+Y3VyX3BvcyArPSBiY291bnQ7CiAKIAlkZWJ1Z19sb2coIltjbWQgJXhdIHRyYW5zZmVycmVkICVkIGJ5dGVzIG9uIHRoYXQgaW50ci5cbiIsCi0JCSAgcGMtPmNbMF0sIGJjb3VudCk7CisJCSAgcnEtPmNtZFswXSwgYmNvdW50KTsKIAogCS8qIEFuZCBzZXQgdGhlIGludGVycnVwdCBoYW5kbGVyIGFnYWluICovCiAJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0LCBleHBpcnkpOwpAQCAtMTgzLDE2ICsxODksMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9wY19pbnRyKTsKIAorc3RhdGljIHU4IGlkZV9yZWFkX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV90YXNrX3QgdGFzazsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX05TRUNUOworCisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCisJcmV0dXJuIHRhc2sudGYubnNlY3QgJiAzOworfQorCiBzdGF0aWMgdTggaWRlX3dhaXRfaXJlYXNvbihpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGlyZWFzb24pCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWludCByZXRyaWVzID0gMTAwOwogCiAJd2hpbGUgKHJldHJpZXMtLSAmJiAoKGlyZWFzb24gJiBDRCkgPT0gMCB8fCAoaXJlYXNvbiAmIElPKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogKElPLENvRCAhPSAoMCwxKSB3aGlsZSBpc3N1aW5nICIKIAkJCQkiYSBwYWNrZXQgY29tbWFuZCwgcmV0cnlpbmdcbiIsIGRyaXZlLT5uYW1lKTsKIAkJdWRlbGF5KDEwMCk7Ci0JCWlyZWFzb24gPSBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHMubnNlY3RfYWRkcik7CisJCWlyZWFzb24gPSBpZGVfcmVhZF9pcmVhc29uKGRyaXZlKTsKIAkJaWYgKHJldHJpZXMgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogKElPLENvRCAhPSAoMCwxKSB3aGlsZSBpc3N1aW5nICIKIAkJCQkJImEgcGFja2V0IGNvbW1hbmQsIGlnbm9yaW5nXG4iLApAQCAtMjEwLDYgKzIyNyw3IEBACiAJCQkJaWRlX2V4cGlyeV90ICpleHBpcnkpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPmh3Z3JvdXAtPnJxOwogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7CiAJdTggaXJlYXNvbjsKIApAQCAtMjE5LDcgKzIzNyw3IEBACiAJCXJldHVybiBzdGFydHN0b3A7CiAJfQogCi0JaXJlYXNvbiA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0cy5uc2VjdF9hZGRyKTsKKwlpcmVhc29uID0gaWRlX3JlYWRfaXJlYXNvbihkcml2ZSk7CiAJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiAhZHJpdmUtPnNjc2kpCiAJCWlyZWFzb24gPSBpZGVfd2FpdF9pcmVhc29uKGRyaXZlLCBpcmVhc29uKTsKIApAQCAtMjM5LDggKzI1Nyw4IEBACiAJfQogCiAJLyogU2VuZCB0aGUgYWN0dWFsIHBhY2tldCAqLwotCWlmICgocGMtPmZsYWdzICYgUENfRkxBR19aSVBfRFJJVkUpID09IDApCi0JCWh3aWYtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBwYy0+YywgMTIpOworCWlmICgoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1pJUF9EUklWRSkgPT0gMCkKKwkJaHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YShkcml2ZSwgTlVMTCwgcnEtPmNtZCwgMTIpOwogCiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQpAQCAtMjg0LDcgKzMwMiw3IEBACiAJCQkgICBiY291bnQsIGRtYSk7CiAKIAkvKiBJc3N1ZSB0aGUgcGFja2V0IGNvbW1hbmQgKi8KLQlpZiAocGMtPmZsYWdzICYgUENfRkxBR19EUlFfSU5URVJSVVBUKSB7CisJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19EUlFfSU5URVJSVVBUKSB7CiAJCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIFdJTl9QQUNLRVRDTUQsIGhhbmRsZXIsCiAJCQkJICAgIHRpbWVvdXQsIE5VTEwpOwogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IDZlMjlkZDUuLjRlNzNhZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC04NSwxMCArODUsOCBAQAogLyogTWFyayB0aGF0IHdlJ3ZlIHNlZW4gYSBtZWRpYSBjaGFuZ2UgYW5kIGludmFsaWRhdGUgb3VyIGludGVybmFsIGJ1ZmZlcnMuICovCiBzdGF0aWMgdm9pZCBjZHJvbV9zYXdfbWVkaWFfY2hhbmdlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlzdHJ1Y3QgY2Ryb21faW5mbyAqY2QgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0KLQljZC0+Y2RfZmxhZ3MgfD0gSURFX0NEX0ZMQUdfTUVESUFfQ0hBTkdFRDsKLQljZC0+Y2RfZmxhZ3MgJj0gfklERV9DRF9GTEFHX1RPQ19WQUxJRDsKKwlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX01FRElBX0NIQU5HRUQ7CisJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfVE9DX1ZBTElEOwogfQogCiBzdGF0aWMgaW50IGNkcm9tX2xvZ19zZW5zZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKQEAgLTI4MCwxMSArMjc4LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgY2Ryb21fZGVjb2RlX3N0YXR1cyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBnb29kX3N0YXQsIGludCAqc3RhdF9yZXQpCiB7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5od2dyb3VwLT5ycTsKIAlpbnQgc3RhdCwgZXJyLCBzZW5zZV9rZXk7CiAKIAkvKiBjaGVjayBmb3IgZXJyb3JzICovCi0Jc3RhdCA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKIAlpZiAoc3RhdF9yZXQpCiAJCSpzdGF0X3JldCA9IHN0YXQ7CkBAIC01MjgsNyArNTI3LDcgQEAKIAlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIElERV9URkxBR19PVVRfTlNFQ1QgfCBJREVfVEZMQUdfT1VUX0xCQUwsCiAJCQkgICB4ZmVybGVuLCBpbmZvLT5kbWEpOwogCi0JaWYgKGluZm8tPmNkX2ZsYWdzICYgSURFX0NEX0ZMQUdfRFJRX0lOVEVSUlVQVCkgeworCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCkgewogCQkvKiB3YWl0aW5nIGZvciBDREIgaW50ZXJydXB0LCBub3QgRE1BIHlldC4gKi8KIAkJaWYgKGluZm8tPmRtYSkKIAkJCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwpAQCAtNTYwLDcgKzU1OSw3IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaWRlX3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsKIAotCWlmIChpbmZvLT5jZF9mbGFncyAmIElERV9DRF9GTEFHX0RSUV9JTlRFUlJVUFQpIHsKKwlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQpIHsKIAkJLyoKIAkJICogSGVyZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBhZnRlciByZWNlaXZpbmcgYW4gaW50ZXJydXB0CiAJCSAqIGZyb20gdGhlIGRldmljZS4gIERSUSBzaG91bGQgaG93IGJlIHNldC4KQEAgLTU4OSw3ICs1ODgsNyBAQAogCQljbWRfbGVuID0gQVRBUElfTUlOX0NEQl9CWVRFUzsKIAogCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIGRldmljZSAqLwotCWh3aWYtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBycS0+Y21kLCBjbWRfbGVuKTsKKwlod2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBycS0+Y21kLCBjbWRfbGVuKTsKIAogCS8qIHN0YXJ0IHRoZSBETUEgaWYgbmVlZCBiZSAqLwogCWlmIChpbmZvLT5kbWEpCkBAIC02MDYsNiArNjA1LDggQEAKIHN0YXRpYyBpbnQgaWRlX2NkX2NoZWNrX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCQkJaW50IGxlbiwgaW50IGlyZWFzb24sIGludCBydykKIHsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisKIAkvKgogCSAqIGlyZWFzb24gPT0gMDogdGhlIGRyaXZlIHdhbnRzIHRvIHJlY2VpdmUgZGF0YSBmcm9tIHVzCiAJICogaXJlYXNvbiA9PSAyOiB0aGUgZHJpdmUgaXMgZXhwZWN0aW5nIHRvIHRyYW5zZmVyIGRhdGEgdG8gdXMKQEAgLTYyNCw3ICs2MjUsNyBAQAogCQkgKiBTb21lIGRyaXZlcyAoQVNVUykgc2VlbSB0byB0ZWxsIHVzIHRoYXQgc3RhdHVzIGluZm8gaXMKIAkJICogYXZhaWxhYmxlLiAgSnVzdCBnZXQgaXQgYW5kIGlnbm9yZS4KIAkJICovCi0JCSh2b2lkKWlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJCSh2b2lkKWh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCS8qIGRyaXZlIHdhbnRzIGEgY29tbWFuZCBwYWNrZXQsIG9yIGludmFsaWQgaXJlYXNvbi4uLiAqLwpAQCAtNjQ1LDIwICs2NDYsMTggQEAKICAqLwogc3RhdGljIGludCBpZGVfY2RfY2hlY2tfdHJhbnNmZXJfc2l6ZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBsZW4pCiB7Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmNkID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCiAJaWYgKChsZW4gJSBTRUNUT1JfU0laRSkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogQmFkIHRyYW5zZmVyIHNpemUgJWRcbiIsCiAJCQlkcml2ZS0+bmFtZSwgX19mdW5jX18sIGxlbik7CiAKLQlpZiAoY2QtPmNkX2ZsYWdzICYgSURFX0NEX0ZMQUdfTElNSVRfTkZSQU1FUykKKwlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0xJTUlUX05GUkFNRVMpCiAJCXByaW50ayhLRVJOX0VSUiAiICBUaGlzIGRyaXZlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgIgogCQkJCSJ0aGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlclxuIik7CiAJZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiICBUcnlpbmcgdG8gbGltaXQgdHJhbnNmZXIgc2l6ZXNcbiIpOwotCQljZC0+Y2RfZmxhZ3MgfD0gSURFX0NEX0ZMQUdfTElNSVRfTkZSQU1FUzsKKwkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19MSU1JVF9ORlJBTUVTOwogCX0KIAogCXJldHVybiAxOwpAQCAtNzM1LDcgKzczNCw3IEBACiAJaWYgKGNkcm9tX2RlY29kZV9zdGF0dXMoZHJpdmUsIDAsICZzdGF0KSkKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCi0JaW5mby0+Y2RfZmxhZ3MgfD0gSURFX0NEX0ZMQUdfU0VFS0lORzsKKwlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX1NFRUtJTkc7CiAKIAlpZiAocmV0cnkgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBpbmZvLT5zdGFydF9zZWVrICsgSURFQ0RfU0VFS19USU1FUikpIHsKIAkJaWYgKC0tcmV0cnkgPT0gMCkKQEAgLTg5MiwxMCArODkxLDExIEBACiAJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOwogCXhmZXJfZnVuY190ICp4ZmVyZnVuYzsKIAlpZGVfZXhwaXJ5X3QgKmV4cGlyeSA9IE5VTEw7Ci0JaW50IGRtYV9lcnJvciA9IDAsIGRtYSwgc3RhdCwgaXJlYXNvbiwgbGVuLCB0aGlzbGVuLCB1cHRvZGF0ZSA9IDA7CisJaW50IGRtYV9lcnJvciA9IDAsIGRtYSwgc3RhdCwgdGhpc2xlbiwgdXB0b2RhdGUgPSAwOwogCWludCB3cml0ZSA9IChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpID8gMSA6IDA7CiAJdW5zaWduZWQgaW50IHRpbWVvdXQ7Ci0JdTggbG93Y3lsLCBoaWdoY3lsOworCXUxNiBsZW47CisJdTggaXJlYXNvbjsKIAogCS8qIGNoZWNrIGZvciBlcnJvcnMgKi8KIAlkbWEgPSBpbmZvLT5kbWE7CkBAIC05MjMsMTIgKzkyMyw3IEBACiAJCWdvdG8gZW5kX3JlcXVlc3Q7CiAJfQogCi0JLyogb2sgd2UgZmFsbCB0byBwaW8gOi8gKi8KLQlpcmVhc29uID0gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzLm5zZWN0X2FkZHIpICYgMHgzOwotCWxvd2N5bCAgPSBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHMubGJhbV9hZGRyKTsKLQloaWdoY3lsID0gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzLmxiYWhfYWRkcik7Ci0KLQlsZW4gPSBsb3djeWwgKyAoMjU2ICogaGlnaGN5bCk7CisJaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGRyaXZlLCAmbGVuLCAmaXJlYXNvbik7CiAKIAl0aGlzbGVuID0gYmxrX2ZzX3JlcXVlc3QocnEpID8gbGVuIDogcnEtPmRhdGFfbGVuOwogCWlmICh0aGlzbGVuID4gbGVuKQpAQCAtOTkxLDEwICs5ODYsMTAgQEAKIAogCWlmIChpcmVhc29uID09IDApIHsKIAkJd3JpdGUgPSAxOwotCQl4ZmVyZnVuYyA9IGh3aWYtPm91dHB1dF9kYXRhOworCQl4ZmVyZnVuYyA9IGh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGE7CiAJfSBlbHNlIHsKIAkJd3JpdGUgPSAwOwotCQl4ZmVyZnVuYyA9IGh3aWYtPmlucHV0X2RhdGE7CisJCXhmZXJmdW5jID0gaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhOwogCX0KIAogCS8qIHRyYW5zZmVyIGRhdGEgKi8KQEAgLTExOTgsOSArMTE5MywxMCBAQAogCWludCB4ZmVybGVuOwogCiAJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewotCQlpZiAoaW5mby0+Y2RfZmxhZ3MgJiBJREVfQ0RfRkxBR19TRUVLSU5HKSB7CisJCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfU0VFS0lORykgeworCQkJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCQkJdW5zaWduZWQgbG9uZyBlbGFwc2VkID0gamlmZmllcyAtIGluZm8tPnN0YXJ0X3NlZWs7Ci0JCQlpbnQgc3RhdCA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJCQlpbnQgc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKIAkJCWlmICgoc3RhdCAmIFNFRUtfU1RBVCkgIT0gU0VFS19TVEFUKSB7CiAJCQkJaWYgKGVsYXBzZWQgPCBJREVDRF9TRUVLX1RJTUVPVVQpIHsKQEAgLTEyMTEsNyArMTIwNyw3IEBACiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRFNDIHRpbWVvdXRcbiIsCiAJCQkJCQlkcml2ZS0+bmFtZSk7CiAJCQl9Ci0JCQlpbmZvLT5jZF9mbGFncyAmPSB+SURFX0NEX0ZMQUdfU0VFS0lORzsKKwkJCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX1NFRUtJTkc7CiAJCX0KIAkJaWYgKHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEICYmCiAJCSAgICBJREVfTEFSR0VfU0VFSyhpbmZvLT5sYXN0X2Jsb2NrLCBibG9jaywKQEAgLTEyODgsNyArMTI4NCw3IEBACiAJICovCiAJY21kWzddID0gY2RpLT5zYW55b19zbG90ICUgMzsKIAotCXJldHVybiBpZGVfY2RfcXVldWVfcGMoZHJpdmUsIGNtZCwgMCwgTlVMTCwgMCwgc2Vuc2UsIDAsIFJFUV9RVUlFVCk7CisJcmV0dXJuIGlkZV9jZF9xdWV1ZV9wYyhkcml2ZSwgY21kLCAwLCBOVUxMLCBOVUxMLCBzZW5zZSwgMCwgUkVRX1FVSUVUKTsKIH0KIAogc3RhdGljIGludCBjZHJvbV9yZWFkX2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyAqY2FwYWNpdHksCkBAIC0xMjk2LDggKzEyOTIsOCBAQAogCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0X3NlbnNlICpzZW5zZSkKIHsKIAlzdHJ1Y3QgewotCQlfX3UzMiBsYmE7Ci0JCV9fdTMyIGJsb2NrbGVuOworCQlfX2JlMzIgbGJhOworCQlfX2JlMzIgYmxvY2tsZW47CiAJfSBjYXBidWY7CiAKIAlpbnQgc3RhdDsKQEAgLTEzNjksNyArMTM2NSw3IEBACiAJICovCiAJKHZvaWQpIGNkcm9tX2NoZWNrX3N0YXR1cyhkcml2ZSwgc2Vuc2UpOwogCi0JaWYgKGluZm8tPmNkX2ZsYWdzICYgSURFX0NEX0ZMQUdfVE9DX1ZBTElEKQorCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfVE9DX1ZBTElEKQogCQlyZXR1cm4gMDsKIAogCS8qIHRyeSB0byBnZXQgdGhlIHRvdGFsIGNkcm9tIGNhcGFjaXR5IGFuZCBzZWN0b3Igc2l6ZSAqLwpAQCAtMTM5MSw3ICsxMzg3LDcgQEAKIAlpZiAoc3RhdCkKIAkJcmV0dXJuIHN0YXQ7CiAKLQlpZiAoaW5mby0+Y2RfZmxhZ3MgJiBJREVfQ0RfRkxBR19UT0NUUkFDS1NfQVNfQkNEKSB7CisJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19UT0NUUkFDS1NfQVNfQkNEKSB7CiAJCXRvYy0+aGRyLmZpcnN0X3RyYWNrID0gQkNEMkJJTih0b2MtPmhkci5maXJzdF90cmFjayk7CiAJCXRvYy0+aGRyLmxhc3RfdHJhY2sgID0gQkNEMkJJTih0b2MtPmhkci5sYXN0X3RyYWNrKTsKIAl9CkBAIC0xNDMyLDcgKzE0MjgsNyBAQAogCQlpZiAoc3RhdCkKIAkJCXJldHVybiBzdGF0OwogCi0JCWlmIChpbmZvLT5jZF9mbGFncyAmIElERV9DRF9GTEFHX1RPQ1RSQUNLU19BU19CQ0QpIHsKKwkJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19UT0NUUkFDS1NfQVNfQkNEKSB7CiAJCQl0b2MtPmhkci5maXJzdF90cmFjayA9ICh1OClCSU4yQkNEKENEUk9NX0xFQURPVVQpOwogCQkJdG9jLT5oZHIubGFzdF90cmFjayA9ICh1OClCSU4yQkNEKENEUk9NX0xFQURPVVQpOwogCQl9IGVsc2UgewpAQCAtMTQ0NiwxNCArMTQ0MiwxNCBAQAogCiAJdG9jLT5oZHIudG9jX2xlbmd0aCA9IGJlMTZfdG9fY3B1KHRvYy0+aGRyLnRvY19sZW5ndGgpOwogCi0JaWYgKGluZm8tPmNkX2ZsYWdzICYgSURFX0NEX0ZMQUdfVE9DVFJBQ0tTX0FTX0JDRCkgeworCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfVE9DVFJBQ0tTX0FTX0JDRCkgewogCQl0b2MtPmhkci5maXJzdF90cmFjayA9IEJDRDJCSU4odG9jLT5oZHIuZmlyc3RfdHJhY2spOwogCQl0b2MtPmhkci5sYXN0X3RyYWNrICA9IEJDRDJCSU4odG9jLT5oZHIubGFzdF90cmFjayk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8PSBudHJhY2tzOyBpKyspIHsKLQkJaWYgKGluZm8tPmNkX2ZsYWdzICYgSURFX0NEX0ZMQUdfVE9DQUREUl9BU19CQ0QpIHsKLQkJCWlmIChpbmZvLT5jZF9mbGFncyAmIElERV9DRF9GTEFHX1RPQ1RSQUNLU19BU19CQ0QpCisJCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfVE9DQUREUl9BU19CQ0QpIHsKKwkJCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfVE9DVFJBQ0tTX0FTX0JDRCkKIAkJCQl0b2MtPmVudFtpXS50cmFjayA9IEJDRDJCSU4odG9jLT5lbnRbaV0udHJhY2spOwogCQkJbXNmX2Zyb21fYmNkKCZ0b2MtPmVudFtpXS5hZGRyLm1zZik7CiAJCX0KQEAgLTE0NzYsNyArMTQ3Miw3IEBACiAJCXRvYy0+bGFzdF9zZXNzaW9uX2xiYSA9IG1zZl90b19sYmEoMCwgMiwgMCk7IC8qIDBtIDJzIDBmICovCiAJfQogCi0JaWYgKGluZm8tPmNkX2ZsYWdzICYgSURFX0NEX0ZMQUdfVE9DQUREUl9BU19CQ0QpIHsKKwlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1RPQ0FERFJfQVNfQkNEKSB7CiAJCS8qIHJlLXJlYWQgbXVsdGlzZXNzaW9uIGluZm9ybWF0aW9uIHVzaW5nIE1TRiBmb3JtYXQgKi8KIAkJc3RhdCA9IGNkcm9tX3JlYWRfdG9jZW50cnkoZHJpdmUsIDAsIDEsIDEsIChjaGFyICopJm1zX3RtcCwKIAkJCQkJICAgc2l6ZW9mKG1zX3RtcCksIHNlbnNlKTsKQEAgLTE1MDAsNyArMTQ5Niw3IEBACiAJfQogCiAJLyogUmVtZW1iZXIgdGhhdCB3ZSd2ZSByZWFkIHRoaXMgc3R1ZmYuICovCi0JaW5mby0+Y2RfZmxhZ3MgfD0gSURFX0NEX0ZMQUdfVE9DX1ZBTElEOworCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfVE9DX1ZBTElEOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTEyLDcgKzE1MDgsNyBAQAogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJaW50IHN0YXQsIGF0dGVtcHRzID0gMywgc2l6ZSA9IEFUQVBJX0NBUEFCSUxJVElFU19QQUdFX1NJWkU7CiAKLQlpZiAoKGluZm8tPmNkX2ZsYWdzICYgSURFX0NEX0ZMQUdfRlVMTF9DQVBTX1BBR0UpID09IDApCisJaWYgKChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRlVMTF9DQVBTX1BBR0UpID09IDApCiAJCXNpemUgLT0gQVRBUElfQ0FQQUJJTElUSUVTX1BBR0VfUEFEX1NJWkU7CiAKIAlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmLCBzaXplLCBDR0NfREFUQV9VTktOT1dOKTsKQEAgLTE1MzAsMTUgKzE1MjYsMTIgQEAKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqY2QgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJdTE2IGN1cnNwZWVkLCBtYXhzcGVlZDsKIAotCWN1cnNwZWVkID0gKih1MTYgKikmYnVmWzggKyAxNF07Ci0JbWF4c3BlZWQgPSAqKHUxNiAqKSZidWZbOCArICA4XTsKLQotCWlmIChjZC0+Y2RfZmxhZ3MgJiBJREVfQ0RfRkxBR19MRV9TUEVFRF9GSUVMRFMpIHsKLQkJY3Vyc3BlZWQgPSBsZTE2X3RvX2NwdShjdXJzcGVlZCk7Ci0JCW1heHNwZWVkID0gbGUxNl90b19jcHUobWF4c3BlZWQpOworCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTEVfU1BFRURfRklFTERTKSB7CisJCWN1cnNwZWVkID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikmYnVmWzggKyAxNF0pOworCQltYXhzcGVlZCA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1Zls4ICsgOF0pOwogCX0gZWxzZSB7Ci0JCWN1cnNwZWVkID0gYmUxNl90b19jcHUoY3Vyc3BlZWQpOwotCQltYXhzcGVlZCA9IGJlMTZfdG9fY3B1KG1heHNwZWVkKTsKKwkJY3Vyc3BlZWQgPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZidWZbOCArIDE0XSk7CisJCW1heHNwZWVkID0gYmUxNl90b19jcHVwKChfX2JlMTYgKikmYnVmWzggKyA4XSk7CiAJfQogCiAJY2QtPmN1cnJlbnRfc3BlZWQgPSAoY3Vyc3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKQEAgLTE1NzksNyArMTU3Miw3IEBACiAJZGV2aW5mby0+aGFuZGxlID0gZHJpdmU7CiAJc3RyY3B5KGRldmluZm8tPm5hbWUsIGRyaXZlLT5uYW1lKTsKIAotCWlmIChpbmZvLT5jZF9mbGFncyAmIElERV9DRF9GTEFHX05PX1NQRUVEX1NFTEVDVCkKKwlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX05PX1NQRUVEX1NFTEVDVCkKIAkJZGV2aW5mby0+bWFzayB8PSBDRENfU0VMRUNUX1NQRUVEOwogCiAJZGV2aW5mby0+ZGlzayA9IGluZm8tPmRpc2s7CkBAIC0xNjA1LDggKzE1OTgsOCBAQAogCQlyZXR1cm4gbnNsb3RzOwogCX0KIAotCWlmIChjZC0+Y2RfZmxhZ3MgJiBJREVfQ0RfRkxBR19QUkVfQVRBUEkxMikgewotCQljZC0+Y2RfZmxhZ3MgJj0gfklERV9DRF9GTEFHX05PX0VKRUNUOworCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfUFJFX0FUQVBJMTIpIHsKKwkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfTk9fRUpFQ1Q7CiAJCWNkaS0+bWFzayAmPSB+Q0RDX1BMQVlfQVVESU87CiAJCXJldHVybiBuc2xvdHM7CiAJfQpAQCAtMTYyNCw5ICsxNjE3LDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoKGJ1Zls4ICsgNl0gJiAweDAxKSA9PSAwKQotCQljZC0+Y2RfZmxhZ3MgfD0gSURFX0NEX0ZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CiAJaWYgKGJ1Zls4ICsgNl0gJiAweDA4KQotCQljZC0+Y2RfZmxhZ3MgJj0gfklERV9DRF9GTEFHX05PX0VKRUNUOworCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19OT19FSkVDVDsKIAlpZiAoYnVmWzggKyAzXSAmIDB4MDEpCiAJCWNkaS0+bWFzayAmPSB+Q0RDX0NEX1I7CiAJaWYgKGJ1Zls4ICsgM10gJiAweDAyKQpAQCAtMTYzNyw3ICsxNjMwLDcgQEAKIAkJY2RpLT5tYXNrICY9IH4oQ0RDX0RWRF9SQU0gfCBDRENfUkFNKTsKIAlpZiAoYnVmWzggKyAzXSAmIDB4MTApCiAJCWNkaS0+bWFzayAmPSB+Q0RDX0RWRF9SOwotCWlmICgoYnVmWzggKyA0XSAmIDB4MDEpIHx8IChjZC0+Y2RfZmxhZ3MgJiBJREVfQ0RfRkxBR19QTEFZX0FVRElPX09LKSkKKwlpZiAoKGJ1Zls4ICsgNF0gJiAweDAxKSB8fCAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1BMQVlfQVVESU9fT0spKQogCQljZGktPm1hc2sgJj0gfkNEQ19QTEFZX0FVRElPOwogCiAJbWVjaHR5cGUgPSBidWZbOCArIDZdID4+IDU7CkBAIC0xNjc5LDcgKzE2NzIsNyBAQAogCWVsc2UKIAkJcHJpbnRrKEtFUk5fQ09OVCAiIGRyaXZlIik7CiAKLQlwcmludGsoS0VSTl9DT05UICIsICVka0IgQ2FjaGVcbiIsIGJlMTZfdG9fY3B1KCoodTE2ICopJmJ1Zls4ICsgMTJdKSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiLCAlZGtCIENhY2hlXG4iLCBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZidWZbOCArIDEyXSkpOwogCiAJcmV0dXJuIG5zbG90czsKIH0KQEAgLTE4MDIsNDMgKzE3OTUsNDMgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjZF9saXN0X2VudHJ5IGlkZV9jZF9xdWlya3NfbGlzdFtdID0gewogCS8qIExpbWl0IHRyYW5zZmVyIHNpemUgcGVyIGludGVycnVwdC4gKi8KLQl7ICJTQU1TVU5HIENELVJPTSBTQ1ItMjQzMCIsIE5VTEwsICAgSURFX0NEX0ZMQUdfTElNSVRfTkZSQU1FUwkgICAgfSwKLQl7ICJTQU1TVU5HIENELVJPTSBTQ1ItMjQzMiIsIE5VTEwsICAgSURFX0NEX0ZMQUdfTElNSVRfTkZSQU1FUwkgICAgfSwKKwl7ICJTQU1TVU5HIENELVJPTSBTQ1ItMjQzMCIsIE5VTEwsICAgSURFX0FGTEFHX0xJTUlUX05GUkFNRVMJICAgICB9LAorCXsgIlNBTVNVTkcgQ0QtUk9NIFNDUi0yNDMyIiwgTlVMTCwgICBJREVfQUZMQUdfTElNSVRfTkZSQU1FUwkgICAgIH0sCiAJLyogU0NSLTMyMzEgZG9lc24ndCBzdXBwb3J0IHRoZSBTRVRfQ0RfU1BFRUQgY29tbWFuZC4gKi8KLQl7ICJTQU1TVU5HIENELVJPTSBTQ1ItMzIzMSIsIE5VTEwsICAgSURFX0NEX0ZMQUdfTk9fU1BFRURfU0VMRUNUICAgIH0sCisJeyAiU0FNU1VORyBDRC1ST00gU0NSLTMyMzEiLCBOVUxMLCAgIElERV9BRkxBR19OT19TUEVFRF9TRUxFQ1QJICAgICB9LAogCS8qIE9sZCBORUMyNjAgKG5vdCBSKSB3YXMgcmVsZWFzZWQgYmVmb3JlIEFUQVBJIDEuMiBzcGVjLiAqLwotCXsgIk5FQyBDRC1ST00gRFJJVkU6MjYwIiwgICAgIjEuMDEiLCBJREVfQ0RfRkxBR19UT0NBRERSX0FTX0JDRCB8Ci0JCQkJCSAgICAgSURFX0NEX0ZMQUdfUFJFX0FUQVBJMTIsCSAgICB9LAorCXsgIk5FQyBDRC1ST00gRFJJVkU6MjYwIiwgICAgIjEuMDEiLCBJREVfQUZMQUdfVE9DQUREUl9BU19CQ0QgfAorCQkJCQkgICAgIElERV9BRkxBR19QUkVfQVRBUEkxMiwJICAgICB9LAogCS8qIFZlcnRvcyAzMDAsIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZSBsaWtlIHRvIHRhbGsgQkNELiAqLwotCXsgIlYwMDNTMERTIiwJCSAgICAgTlVMTCwgICBJREVfQ0RfRkxBR19WRVJUT1NfMzAwX1NTRCwgICAgfSwKKwl7ICJWMDAzUzBEUyIsCQkgICAgIE5VTEwsICAgSURFX0FGTEFHX1ZFUlRPU18zMDBfU1NELAkgICAgIH0sCiAJLyogVmVydG9zIDYwMCBFU0QuICovCi0JeyAiVjAwNkUwRFMiLAkJICAgICBOVUxMLCAgIElERV9DRF9GTEFHX1ZFUlRPU182MDBfRVNELCAgICB9LAorCXsgIlYwMDZFMERTIiwJCSAgICAgTlVMTCwgICBJREVfQUZMQUdfVkVSVE9TXzYwMF9FU0QsCSAgICAgfSwKIAkvKgogCSAqIFNhbnlvIDMgQ0QgY2hhbmdlciB1c2VzIGEgbm9uLXN0YW5kYXJkIGNvbW1hbmQgZm9yIENEIGNoYW5naW5nCiAJICogKGJ5IGRlZmF1bHQgc3RhbmRhcmQgQVRBUEkgc3VwcG9ydCBmb3IgQ0QgY2hhbmdlcnMgaXMgdXNlZCkuCiAJICovCi0JeyAiQ0QtUk9NIENEUi1DMyBHIiwJICAgICBOVUxMLCAgIElERV9DRF9GTEFHX1NBTllPXzNDRAkgICAgfSwKLQl7ICJDRC1ST00gQ0RSLUMzRyIsCSAgICAgTlVMTCwgICBJREVfQ0RfRkxBR19TQU5ZT18zQ0QJICAgIH0sCi0JeyAiQ0QtUk9NIENEUl9DMzYiLAkgICAgIE5VTEwsICAgSURFX0NEX0ZMQUdfU0FOWU9fM0NECSAgICB9LAorCXsgIkNELVJPTSBDRFItQzMgRyIsCSAgICAgTlVMTCwgICBJREVfQUZMQUdfU0FOWU9fM0NECSAgICAgfSwKKwl7ICJDRC1ST00gQ0RSLUMzRyIsCSAgICAgTlVMTCwgICBJREVfQUZMQUdfU0FOWU9fM0NECSAgICAgfSwKKwl7ICJDRC1ST00gQ0RSX0MzNiIsCSAgICAgTlVMTCwgICBJREVfQUZMQUdfU0FOWU9fM0NECSAgICAgfSwKIAkvKiBTdGluZ3JheSA4WCBDRC1ST00uICovCi0JeyAiU1RJTkdSQVkgODQyMiBJREUgOFggQ0QtUk9NIDctMjctOTUiLCBOVUxMLCBJREVfQ0RfRkxBR19QUkVfQVRBUEkxMn0sCisJeyAiU1RJTkdSQVkgODQyMiBJREUgOFggQ0QtUk9NIDctMjctOTUiLCBOVUxMLCBJREVfQUZMQUdfUFJFX0FUQVBJMTIgfSwKIAkvKgogCSAqIEFDRVIgNTBYIENELVJPTSBhbmQgV1BJIDMyWCBDRC1ST00gcmVxdWlyZSB0aGUgZnVsbCBzcGVjIGxlbmd0aAogCSAqIG1vZGUgc2Vuc2UgcGFnZSBjYXBhYmlsaXRpZXMgc2l6ZSwgYnV0IG9sZGVyIGRyaXZlcyBicmVhay4KIAkgKi8KLQl7ICJBVEFQSSBDRCBST00gRFJJVkUgNTBYIE1BWCIsCU5VTEwsCUlERV9DRF9GTEFHX0ZVTExfQ0FQU19QQUdFICB9LAotCXsgIldQSSBDRFMtMzJYIiwJCU5VTEwsCUlERV9DRF9GTEFHX0ZVTExfQ0FQU19QQUdFICB9LAorCXsgIkFUQVBJIENEIFJPTSBEUklWRSA1MFggTUFYIiwJTlVMTCwJSURFX0FGTEFHX0ZVTExfQ0FQU19QQUdFICAgICB9LAorCXsgIldQSSBDRFMtMzJYIiwJCU5VTEwsCUlERV9BRkxBR19GVUxMX0NBUFNfUEFHRSAgICAgfSwKIAkvKiBBQ0VSL0FPcGVuIDI0WCBDRC1ST00gaGFzIHRoZSBzcGVlZCBmaWVsZHMgYnl0ZS1zd2FwcGVkLiAqLwotCXsgIiIsCQkJICAgICAiMjQxTiIsIElERV9DRF9GTEFHX0xFX1NQRUVEX0ZJRUxEUyAgICB9LAorCXsgIiIsCQkJICAgICAiMjQxTiIsIElERV9BRkxBR19MRV9TUEVFRF9GSUVMRFMgICAgICAgfSwKIAkvKgogCSAqIFNvbWUgZHJpdmVzIHVzZWQgYnkgQXBwbGUgZG9uJ3QgYWR2ZXJ0aXNlIGF1ZGlvIHBsYXkKIAkgKiBidXQgdGhleSBkbyBzdXBwb3J0IHJlYWRpbmcgVE9DICYgYXVkaW8gZGF0YXMuCiAJICovCi0JeyAiTUFUU0hJVEFEVkQtUk9NIFNSLTgxODciLCBOVUxMLCAgIElERV9DRF9GTEFHX1BMQVlfQVVESU9fT0sJICAgIH0sCi0JeyAiTUFUU0hJVEFEVkQtUk9NIFNSLTgxODYiLCBOVUxMLCAgIElERV9DRF9GTEFHX1BMQVlfQVVESU9fT0sJICAgIH0sCi0JeyAiTUFUU0hJVEFEVkQtUk9NIFNSLTgxNzYiLCBOVUxMLCAgIElERV9DRF9GTEFHX1BMQVlfQVVESU9fT0sJICAgIH0sCi0JeyAiTUFUU0hJVEFEVkQtUk9NIFNSLTgxNzQiLCBOVUxMLCAgIElERV9DRF9GTEFHX1BMQVlfQVVESU9fT0sJICAgIH0sCi0JeyAiT3B0aWFyYyBEVkQgUlcgQUQtNTIwMEEiLCBOVUxMLCAgIElERV9DRF9GTEFHX1BMQVlfQVVESU9fT0sgICAgICB9LAorCXsgIk1BVFNISVRBRFZELVJPTSBTUi04MTg3IiwgTlVMTCwgICBJREVfQUZMQUdfUExBWV9BVURJT19PSwkgICAgIH0sCisJeyAiTUFUU0hJVEFEVkQtUk9NIFNSLTgxODYiLCBOVUxMLCAgIElERV9BRkxBR19QTEFZX0FVRElPX09LCSAgICAgfSwKKwl7ICJNQVRTSElUQURWRC1ST00gU1ItODE3NiIsIE5VTEwsICAgSURFX0FGTEFHX1BMQVlfQVVESU9fT0sJICAgICB9LAorCXsgIk1BVFNISVRBRFZELVJPTSBTUi04MTc0IiwgTlVMTCwgICBJREVfQUZMQUdfUExBWV9BVURJT19PSwkgICAgIH0sCisJeyAiT3B0aWFyYyBEVkQgUlcgQUQtNTIwMEEiLCBOVUxMLCAgIElERV9BRkxBR19QTEFZX0FVRElPX09LCSAgICAgfSwKIAl7IE5VTEwsIE5VTEwsIDAgfQogfTsKIApAQCAtMTg3MywyMCArMTg2NiwyMCBAQAogCiAJZHJpdmUtPnNwZWNpYWwuYWxsCT0gMDsKIAotCWNkLT5jZF9mbGFncyA9IElERV9DRF9GTEFHX01FRElBX0NIQU5HRUQgfCBJREVfQ0RfRkxBR19OT19FSkVDVCB8CisJZHJpdmUtPmF0YXBpX2ZsYWdzID0gSURFX0FGTEFHX01FRElBX0NIQU5HRUQgfCBJREVfQUZMQUdfTk9fRUpFQ1QgfAogCQkgICAgICAgaWRlX2NkX2ZsYWdzKGlkKTsKIAogCWlmICgoaWQtPmNvbmZpZyAmIDB4MDA2MCkgPT0gMHgyMCkKLQkJY2QtPmNkX2ZsYWdzIHw9IElERV9DRF9GTEFHX0RSUV9JTlRFUlJVUFQ7CisJCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVDsKIAotCWlmICgoY2QtPmNkX2ZsYWdzICYgSURFX0NEX0ZMQUdfVkVSVE9TXzMwMF9TU0QpICYmCisJaWYgKChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfVkVSVE9TXzMwMF9TU0QpICYmCiAJICAgIGlkLT5md19yZXZbNF0gPT0gJzEnICYmIGlkLT5md19yZXZbNl0gPD0gJzInKQotCQljZC0+Y2RfZmxhZ3MgfD0gKElERV9DRF9GTEFHX1RPQ1RSQUNLU19BU19CQ0QgfAotCQkJCSBJREVfQ0RfRkxBR19UT0NBRERSX0FTX0JDRCk7Ci0JZWxzZSBpZiAoKGNkLT5jZF9mbGFncyAmIElERV9DRF9GTEFHX1ZFUlRPU182MDBfRVNEKSAmJgorCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gKElERV9BRkxBR19UT0NUUkFDS1NfQVNfQkNEIHwKKwkJCQkgICAgIElERV9BRkxBR19UT0NBRERSX0FTX0JDRCk7CisJZWxzZSBpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19WRVJUT1NfNjAwX0VTRCkgJiYKIAkJIGlkLT5md19yZXZbNF0gPT0gJzEnICYmIGlkLT5md19yZXZbNl0gPD0gJzInKQotCQljZC0+Y2RfZmxhZ3MgfD0gSURFX0NEX0ZMQUdfVE9DVFJBQ0tTX0FTX0JDRDsKLQllbHNlIGlmIChjZC0+Y2RfZmxhZ3MgJiBJREVfQ0RfRkxBR19TQU5ZT18zQ0QpCisJCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfVE9DVFJBQ0tTX0FTX0JDRDsKKwllbHNlIGlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfU0FOWU9fM0NEKQogCQkvKiAzID0+IHVzZSBDRCBpbiBzbG90IDAgKi8KIAkJY2RpLT5zYW55b19zbG90ID0gMzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmggYi9kcml2ZXJzL2lkZS9pZGUtY2QuaAppbmRleCBmZTBlYTM2Li42MWE0NTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuaAorKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuaApAQCAtMjcsNDIgKzI3LDYgQEAKICNkZWZpbmUgQVRBUElfQ0FQQUJJTElUSUVTX1BBR0VfU0laRQkJKDggKyAyMCkKICNkZWZpbmUgQVRBUElfQ0FQQUJJTElUSUVTX1BBR0VfUEFEX1NJWkUJNAogCi1lbnVtIHsKLQkvKiBEZXZpY2Ugc2VuZHMgYW4gaW50ZXJydXB0IHdoZW4gcmVhZHkgZm9yIGEgcGFja2V0IGNvbW1hbmQuICovCi0JSURFX0NEX0ZMQUdfRFJRX0lOVEVSUlVQVAk9ICgxIDw8IDApLAotCS8qIERyaXZlIGNhbm5vdCBsb2NrIHRoZSBkb29yLiAqLwotCUlERV9DRF9GTEFHX05PX0RPT1JMT0NLCQk9ICgxIDw8IDEpLAotCS8qIERyaXZlIGNhbm5vdCBlamVjdCB0aGUgZGlzYy4gKi8KLQlJREVfQ0RfRkxBR19OT19FSkVDVAkJPSAoMSA8PCAyKSwKLQkvKiBEcml2ZSBpcyBhIHByZSBBVEFQSSAxLjIgZHJpdmUuICovCi0JSURFX0NEX0ZMQUdfUFJFX0FUQVBJMTIJCT0gKDEgPDwgMyksCi0JLyogVE9DIGFkZHJlc3NlcyBhcmUgaW4gQkNELiAqLwotCUlERV9DRF9GTEFHX1RPQ0FERFJfQVNfQkNECT0gKDEgPDwgNCksCi0JLyogVE9DIHRyYWNrIG51bWJlcnMgYXJlIGluIEJDRC4gKi8KLQlJREVfQ0RfRkxBR19UT0NUUkFDS1NfQVNfQkNECT0gKDEgPDwgNSksCi0JLyoKLQkgKiBEcml2ZSBkb2VzIG5vdCBwcm92aWRlIGRhdGEgaW4gbXVsdGlwbGVzIG9mIFNFQ1RPUl9TSVpFCi0JICogd2hlbiBtb3JlIHRoYW4gb25lIGludGVycnVwdCBpcyBuZWVkZWQuCi0JICovCi0JSURFX0NEX0ZMQUdfTElNSVRfTkZSQU1FUwk9ICgxIDw8IDYpLAotCS8qIFNlZWtpbmcgaW4gcHJvZ3Jlc3MuICovCi0JSURFX0NEX0ZMQUdfU0VFS0lORwkJPSAoMSA8PCA3KSwKLQkvKiBEcml2ZXIgaGFzIG5vdGljZWQgYSBtZWRpYSBjaGFuZ2UuICovCi0JSURFX0NEX0ZMQUdfTUVESUFfQ0hBTkdFRAk9ICgxIDw8IDgpLAotCS8qIFNhdmVkIFRPQyBpbmZvcm1hdGlvbiBpcyBjdXJyZW50LiAqLwotCUlERV9DRF9GTEFHX1RPQ19WQUxJRAkJPSAoMSA8PCA5KSwKLQkvKiBXZSB0aGluayB0aGF0IHRoZSBkcml2ZSBkb29yIGlzIGxvY2tlZC4gKi8KLQlJREVfQ0RfRkxBR19ET09SX0xPQ0tFRAkJPSAoMSA8PCAxMCksCi0JLyogU0VUX0NEX1NQRUVEIGNvbW1hbmQgaXMgdW5zdXBwb3J0ZWQuICovCi0JSURFX0NEX0ZMQUdfTk9fU1BFRURfU0VMRUNUCT0gKDEgPDwgMTEpLAotCUlERV9DRF9GTEFHX1ZFUlRPU18zMDBfU1NECT0gKDEgPDwgMTIpLAotCUlERV9DRF9GTEFHX1ZFUlRPU182MDBfRVNECT0gKDEgPDwgMTMpLAotCUlERV9DRF9GTEFHX1NBTllPXzNDRAkJPSAoMSA8PCAxNCksCi0JSURFX0NEX0ZMQUdfRlVMTF9DQVBTX1BBR0UJPSAoMSA8PCAxNSksCi0JSURFX0NEX0ZMQUdfUExBWV9BVURJT19PSwk9ICgxIDw8IDE2KSwKLQlJREVfQ0RfRkxBR19MRV9TUEVFRF9GSUVMRFMJPSAoMSA8PCAxNyksCi19OwotCiAvKiBTdHJ1Y3R1cmUgb2YgYSBNU0YgY2Ryb20gYWRkcmVzcy4gKi8KIHN0cnVjdCBhdGFwaV9tc2YgewogCWJ5dGUgcmVzZXJ2ZWQ7CkBAIC0xMjgsOCArOTIsNiBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF9ibG9jazsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3NlZWs7CiAKLQl1bnNpZ25lZCBpbnQgY2RfZmxhZ3M7Ci0KIAl1OCBtYXhfc3BlZWQ7CQkvKiBNYXggc3BlZWQgb2YgdGhlIGRyaXZlLiAqLwogCXU4IGN1cnJlbnRfc3BlZWQ7CS8qIEN1cnJlbnQgc3BlZWQgb2YgdGhlIGRyaXZlLiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCmluZGV4IDI0ZDAwMmEuLjc0MjMxYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCkBAIC0yNywxMCArMjcsOSBAQAogdm9pZCBpZGVfY2Ryb21fcmVsZWFzZV9yZWFsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKQogewogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGNkaS0+aGFuZGxlOwotCXN0cnVjdCBjZHJvbV9pbmZvICpjZCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAogCWlmICghY2RpLT51c2VfY291bnQpCi0JCWNkLT5jZF9mbGFncyAmPSB+SURFX0NEX0ZMQUdfVE9DX1ZBTElEOworCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19UT0NfVkFMSUQ7CiB9CiAKIC8qCkBAIC04MywxMyArODIsMTIgQEAKIAkJCQkgICAgICAgaW50IHNsb3RfbnIpCiB7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gY2RpLT5oYW5kbGU7Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmNkID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCWludCByZXR2YWw7CiAKIAlpZiAoc2xvdF9uciA9PSBDRFNMX0NVUlJFTlQpIHsKIAkJKHZvaWQpIGNkcm9tX2NoZWNrX3N0YXR1cyhkcml2ZSwgTlVMTCk7Ci0JCXJldHZhbCA9IChjZC0+Y2RfZmxhZ3MgJiBJREVfQ0RfRkxBR19NRURJQV9DSEFOR0VEKSA/IDEgOiAwOwotCQljZC0+Y2RfZmxhZ3MgJj0gfklERV9DRF9GTEFHX01FRElBX0NIQU5HRUQ7CisJCXJldHZhbCA9IChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRCkgPyAxIDogMDsKKwkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfTUVESUFfQ0hBTkdFRDsKIAkJcmV0dXJuIHJldHZhbDsKIAl9IGVsc2UgewogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwNywxMSArMTA1LDExIEBACiAJY2hhciBsb2VqID0gMHgwMjsKIAl1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CiAKLQlpZiAoKGNkLT5jZF9mbGFncyAmIElERV9DRF9GTEFHX05PX0VKRUNUKSAmJiAhZWplY3RmbGFnKQorCWlmICgoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX05PX0VKRUNUKSAmJiAhZWplY3RmbGFnKQogCQlyZXR1cm4gLUVEUklWRV9DQU5UX0RPX1RISVM7CiAKIAkvKiByZWxvYWQgZmFpbHMgb24gc29tZSBkcml2ZXMsIGlmIHRoZSB0cmF5IGlzIGxvY2tlZCAqLwotCWlmICgoY2QtPmNkX2ZsYWdzICYgSURFX0NEX0ZMQUdfRE9PUl9MT0NLRUQpICYmIGVqZWN0ZmxhZykKKwlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19ET09SX0xPQ0tFRCkgJiYgZWplY3RmbGFnKQogCQlyZXR1cm4gMDsKIAogCS8qIG9ubHkgdGVsbCBkcml2ZSB0byBjbG9zZSB0cmF5IGlmIG9wZW4sIGlmIGl0IGNhbiBkbyB0aGF0ICovCkBAIC0xMjMsNyArMTIxLDcgQEAKIAljbWRbMF0gPSBHUENNRF9TVEFSVF9TVE9QX1VOSVQ7CiAJY21kWzRdID0gbG9laiB8IChlamVjdGZsYWcgIT0gMCk7CiAKLQlyZXR1cm4gaWRlX2NkX3F1ZXVlX3BjKGRyaXZlLCBjbWQsIDAsIE5VTEwsIDAsIHNlbnNlLCAwLCAwKTsKKwlyZXR1cm4gaWRlX2NkX3F1ZXVlX3BjKGRyaXZlLCBjbWQsIDAsIE5VTEwsIE5VTEwsIHNlbnNlLCAwLCAwKTsKIH0KIAogLyogTG9jayB0aGUgZG9vciBpZiBMT0NLRkxBRyBpcyBub256ZXJvOyB1bmxvY2sgaXQgb3RoZXJ3aXNlLiAqLwpAQCAtMTMxLDcgKzEyOSw2IEBACiBpbnQgaWRlX2NkX2xvY2tkb29yKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGxvY2tmbGFnLAogCQkgICAgc3RydWN0IHJlcXVlc3Rfc2Vuc2UgKnNlbnNlKQogewotCXN0cnVjdCBjZHJvbV9pbmZvICpjZCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBteV9zZW5zZTsKIAlpbnQgc3RhdDsKIApAQCAtMTM5LDcgKzEzNiw3IEBACiAJCXNlbnNlID0gJm15X3NlbnNlOwogCiAJLyogSWYgdGhlIGRyaXZlIGNhbm5vdCBsb2NrIHRoZSBkb29yLCBqdXN0IHByZXRlbmQuICovCi0JaWYgKGNkLT5jZF9mbGFncyAmIElERV9DRF9GTEFHX05PX0RPT1JMT0NLKSB7CisJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19OT19ET09STE9DSykgewogCQlzdGF0ID0gMDsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CkBAIC0xNDksNyArMTQ2LDcgQEAKIAkJY21kWzBdID0gR1BDTURfUFJFVkVOVF9BTExPV19NRURJVU1fUkVNT1ZBTDsKIAkJY21kWzRdID0gbG9ja2ZsYWcgPyAxIDogMDsKIAotCQlzdGF0ID0gaWRlX2NkX3F1ZXVlX3BjKGRyaXZlLCBjbWQsIDAsIE5VTEwsIDAsCisJCXN0YXQgPSBpZGVfY2RfcXVldWVfcGMoZHJpdmUsIGNtZCwgMCwgTlVMTCwgTlVMTCwKIAkJCQkgICAgICAgc2Vuc2UsIDAsIDApOwogCX0KIApAQCAtMTYwLDcgKzE1Nyw3IEBACiAJICAgIChzZW5zZS0+YXNjID09IDB4MjQgfHwgc2Vuc2UtPmFzYyA9PSAweDIwKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkb29yIGxvY2tpbmcgbm90IHN1cHBvcnRlZFxuIiwKIAkJCWRyaXZlLT5uYW1lKTsKLQkJY2QtPmNkX2ZsYWdzIHw9IElERV9DRF9GTEFHX05PX0RPT1JMT0NLOworCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX05PX0RPT1JMT0NLOwogCQlzdGF0ID0gMDsKIAl9CiAKQEAgLTE3MCw5ICsxNjcsOSBAQAogCiAJaWYgKHN0YXQgPT0gMCkgewogCQlpZiAobG9ja2ZsYWcpCi0JCQljZC0+Y2RfZmxhZ3MgfD0gSURFX0NEX0ZMQUdfRE9PUl9MT0NLRUQ7CisJCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0RPT1JfTE9DS0VEOwogCQllbHNlCi0JCQljZC0+Y2RfZmxhZ3MgJj0gfklERV9DRF9GTEFHX0RPT1JfTE9DS0VEOworCQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfRE9PUl9MT0NLRUQ7CiAJfQogCiAJcmV0dXJuIHN0YXQ7CkBAIC0yMzEsNyArMjI4LDcgQEAKIAkJY21kWzVdID0gc3BlZWQgJiAweGZmOwogCX0KIAotCXN0YXQgPSBpZGVfY2RfcXVldWVfcGMoZHJpdmUsIGNtZCwgMCwgTlVMTCwgMCwgJnNlbnNlLCAwLCAwKTsKKwlzdGF0ID0gaWRlX2NkX3F1ZXVlX3BjKGRyaXZlLCBjbWQsIDAsIE5VTEwsIE5VTEwsICZzZW5zZSwgMCwgMCk7CiAKIAlpZiAoIWlkZV9jZHJvbV9nZXRfY2FwYWJpbGl0aWVzKGRyaXZlLCBidWYpKSB7CiAJCWlkZV9jZHJvbV91cGRhdGVfc3BlZWQoZHJpdmUsIGJ1Zik7CkBAIC0yNTAsNyArMjQ3LDcgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZTsKIAlpbnQgcmV0OwogCi0JaWYgKChpbmZvLT5jZF9mbGFncyAmIElERV9DRF9GTEFHX1RPQ19WQUxJRCkgPT0gMCB8fCAhaW5mby0+dG9jKSB7CisJaWYgKChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfVE9DX1ZBTElEKSA9PSAwIHx8ICFpbmZvLT50b2MpIHsKIAkJcmV0ID0gaWRlX2NkX3JlYWRfdG9jKGRyaXZlLCAmc2Vuc2UpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTMwOCw3ICszMDUsNyBAQAogCSAqIEEgcmVzZXQgd2lsbCB1bmxvY2sgdGhlIGRvb3IuIElmIGl0IHdhcyBwcmV2aW91c2x5IGxvY2tlZCwKIAkgKiBsb2NrIGl0IGFnYWluLgogCSAqLwotCWlmIChjZC0+Y2RfZmxhZ3MgJiBJREVfQ0RfRkxBR19ET09SX0xPQ0tFRCkKKwlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RPT1JfTE9DS0VEKQogCQkodm9pZClpZGVfY2RfbG9ja2Rvb3IoZHJpdmUsIDEsICZzZW5zZSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzI0LDcgKzMyMSw3IEBACiAJLyoKIAkgKiBkb24ndCBzZXJ2ZSBjYWNoZWQgZGF0YSwgaWYgdGhlIHRvYyBpc24ndCB2YWxpZAogCSAqLwotCWlmICgoaW5mby0+Y2RfZmxhZ3MgJiBJREVfQ0RfRkxBR19UT0NfVkFMSUQpID09IDApCisJaWYgKChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfVE9DX1ZBTElEKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIENoZWNrIHZhbGlkaXR5IG9mIHJlcXVlc3RlZCB0cmFjayBudW1iZXIuICovCkBAIC0zNzQsNyArMzcxLDcgQEAKIAlsYmFfdG9fbXNmKGxiYV9zdGFydCwgICAmY21kWzNdLCAmY21kWzRdLCAmY21kWzVdKTsKIAlsYmFfdG9fbXNmKGxiYV9lbmQgLSAxLCAmY21kWzZdLCAmY21kWzddLCAmY21kWzhdKTsKIAotCXJldHVybiBpZGVfY2RfcXVldWVfcGMoZHJpdmUsIGNtZCwgMCwgTlVMTCwgMCwgJnNlbnNlLCAwLCAwKTsKKwlyZXR1cm4gaWRlX2NkX3F1ZXVlX3BjKGRyaXZlLCBjbWQsIDAsIE5VTEwsIE5VTEwsICZzZW5zZSwgMCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgaWRlX2NkX3JlYWRfdG9jaGRyKGlkZV9kcml2ZV90ICpkcml2ZSwgdm9pZCAqYXJnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKaW5kZXggM2EyZTgwMi4uZGY1ZmU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAl3cml0ZSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgPyAxIDogMDsKIAogCWlmIChkbWEpCi0JCWluZGV4ID0gZHJpdmUtPnZkbWEgPyA0IDogODsKKwkJaW5kZXggPSA4OwogCWVsc2UKIAkJaW5kZXggPSBkcml2ZS0+bXVsdF9jb3VudCA/IDAgOiA0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKaW5kZXggN2VlNDRmOC4uYmU5OWQ0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwpAQCAtMTAwLDEwICsxMDAsMTEgQEAKICAKIGlkZV9zdGFydHN0b3BfdCBpZGVfZG1hX2ludHIgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggc3RhdCA9IDAsIGRtYV9zdGF0ID0gMDsKIAotCWRtYV9zdGF0ID0gZHJpdmUtPmh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOwotCXN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCWRtYV9zdGF0ID0gaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKIAlpZiAoT0tfU1RBVChzdGF0LERSSVZFX1JFQURZLGRyaXZlLT5iYWRfd3N0YXR8RFJRX1NUQVQpKSB7CiAJCWlmICghZG1hX3N0YXQpIHsKQEAgLTMzNCw3ICszMzUsNyBAQAogc3RhdGljIGludCBkbWFfdGltZXJfZXhwaXJ5IChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXU4IGRtYV9zdGF0CQk9IGh3aWYtPklOQihod2lmLT5kbWFfc3RhdHVzKTsKKwl1OCBkbWFfc3RhdAkJPSBod2lmLT50cF9vcHMtPnJlYWRfc2ZmX2RtYV9zdGF0dXMoaHdpZik7CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZG1hX3RpbWVyX2V4cGlyeTogZG1hIHN0YXR1cyA9PSAweCUwMnhcbiIsCiAJCWRyaXZlLT5uYW1lLCBkbWFfc3RhdCk7CkBAIC0zNjksMTQgKzM3MCwxOCBAQAogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAl1OCB1bml0CQkJPSAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKTsKLQl1OCBkbWFfc3RhdAkJPSBod2lmLT5JTkIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJdTggZG1hX3N0YXQJCT0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOwogCiAJaWYgKG9uKQogCQlkbWFfc3RhdCB8PSAoMSA8PCAoNSArIHVuaXQpKTsKIAllbHNlCiAJCWRtYV9zdGF0ICY9IH4oMSA8PCAoNSArIHVuaXQpKTsKIAotCWh3aWYtPk9VVEIoZG1hX3N0YXQsIGh3aWYtPmRtYV9zdGF0dXMpOworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXdyaXRlYihkbWFfc3RhdCwKKwkJICAgICAgICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUykpOworCWVsc2UKKwkJb3V0YihkbWFfc3RhdCwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfaG9zdF9zZXQpOwpAQCAtNDQ5LDYgKzQ1NCw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKIAl1bnNpZ25lZCBpbnQgcmVhZGluZzsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKIAl1OCBkbWFfc3RhdDsKIAogCWlmIChycV9kYXRhX2RpcihycSkpCkBAIC00NzAsMTMgKzQ3NiwyMSBAQAogCQlvdXRsKGh3aWYtPmRtYXRhYmxlX2RtYSwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1RBQkxFX09GUyk7CiAKIAkvKiBzcGVjaWZ5IHIvdyAqLwotCWh3aWYtPk9VVEIocmVhZGluZywgaHdpZi0+ZG1hX2NvbW1hbmQpOworCWlmIChtbWlvKQorCQl3cml0ZWIocmVhZGluZywgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7CisJZWxzZQorCQlvdXRiKHJlYWRpbmcsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwogCi0JLyogcmVhZCBkbWFfc3RhdHVzIGZvciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KLQlkbWFfc3RhdCA9IGh3aWYtPklOQihod2lmLT5kbWFfc3RhdHVzKTsKKwkvKiByZWFkIERNQSBzdGF0dXMgZm9yIElOVFIgJiBFUlJPUiBmbGFncyAqLworCWRtYV9zdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOwogCiAJLyogY2xlYXIgSU5UUiAmIEVSUk9SIGZsYWdzICovCi0JaHdpZi0+T1VUQihkbWFfc3RhdHw2LCBod2lmLT5kbWFfc3RhdHVzKTsKKwlpZiAobW1pbykKKwkJd3JpdGViKGRtYV9zdGF0IHwgNiwKKwkJICAgICAgICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUykpOworCWVsc2UKKwkJb3V0YihkbWFfc3RhdCB8IDYsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOworCiAJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7CiAJcmV0dXJuIDA7CiB9CkBAIC00OTIsMTYgKzUwNiwyNCBAQAogCiB2b2lkIGlkZV9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQl1OCBkbWFfY21kCQk9IGh3aWYtPklOQihod2lmLT5kbWFfY29tbWFuZCk7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IGRtYV9jbWQ7CiAKIAkvKiBOb3RlIHRoYXQgdGhpcyBpcyBkb25lICphZnRlciogdGhlIGNtZCBoYXMKIAkgKiBiZWVuIGlzc3VlZCB0byB0aGUgZHJpdmUsIGFzIHBlciB0aGUgQk0tSURFIHNwZWMuCiAJICogVGhlIFByb21pc2UgVWx0cmEzMyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdoZW4KIAkgKiB3ZSBkbyB0aGlzIHBhcnQgYmVmb3JlIGlzc3VpbmcgdGhlIGRyaXZlIGNtZC4KIAkgKi8KLQkvKiBzdGFydCBETUEgKi8KLQlod2lmLT5PVVRCKGRtYV9jbWR8MSwgaHdpZi0+ZG1hX2NvbW1hbmQpOworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pIHsKKwkJZG1hX2NtZCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOworCQkvKiBzdGFydCBETUEgKi8KKwkJd3JpdGViKGRtYV9jbWQgfCAxLAorCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7CisJfSBlbHNlIHsKKwkJZG1hX2NtZCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKKwkJb3V0YihkbWFfY21kIHwgMSwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisJfQorCiAJaHdpZi0+ZG1hID0gMTsKIAl3bWIoKTsKIH0KQEAgLTUxMSwxOCArNTMzLDMzIEBACiAvKiByZXR1cm5zIDEgb24gZXJyb3IsIDAgb3RoZXJ3aXNlICovCiBpbnQgX19pZGVfZG1hX2VuZCAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CiAJdTggZG1hX3N0YXQgPSAwLCBkbWFfY21kID0gMDsKIAogCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwotCS8qIGdldCBkbWFfY29tbWFuZCBtb2RlICovCi0JZG1hX2NtZCA9IGh3aWYtPklOQihod2lmLT5kbWFfY29tbWFuZCk7Ci0JLyogc3RvcCBETUEgKi8KLQlod2lmLT5PVVRCKGRtYV9jbWQmfjEsIGh3aWYtPmRtYV9jb21tYW5kKTsKKworCWlmIChtbWlvKSB7CisJCS8qIGdldCBETUEgY29tbWFuZCBtb2RlICovCisJCWRtYV9jbWQgPSByZWFkYigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKKwkJLyogc3RvcCBETUEgKi8KKwkJd3JpdGViKGRtYV9jbWQgJiB+MSwKKwkJICAgICAgICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOworCX0gZWxzZSB7CisJCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisJCW91dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKKwl9CisKIAkvKiBnZXQgRE1BIHN0YXR1cyAqLwotCWRtYV9zdGF0ID0gaHdpZi0+SU5CKGh3aWYtPmRtYV9zdGF0dXMpOwotCS8qIGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwotCWh3aWYtPk9VVEIoZG1hX3N0YXR8NiwgaHdpZi0+ZG1hX3N0YXR1cyk7CisJZG1hX3N0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc2ZmX2RtYV9zdGF0dXMoaHdpZik7CisKKwlpZiAobW1pbykKKwkJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCisJCXdyaXRlYihkbWFfc3RhdCB8IDYsCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKTsKKwllbHNlCisJCW91dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKKwogCS8qIHB1cmdlIERNQSBtYXBwaW5ncyAqLwogCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKIAkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCkBAIC01MzcsNyArNTc0LDcgQEAKIGludCBpZGVfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdTggZG1hX3N0YXQJCT0gaHdpZi0+SU5CKGh3aWYtPmRtYV9zdGF0dXMpOworCXU4IGRtYV9zdGF0CQk9IGh3aWYtPnRwX29wcy0+cmVhZF9zZmZfZG1hX3N0YXR1cyhod2lmKTsKIAogCS8qIHJldHVybiAxIGlmIElOVFIgYXNzZXJ0ZWQgKi8KIAlpZiAoKGRtYV9zdGF0ICYgNCkgPT0gNCkKQEAgLTcxOSw5ICs3NTYsOCBAQAogc3RhdGljIGludCBpZGVfZG1hX2NoZWNrKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaW50IHZkbWEgPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19WRE1BKT8gMSA6IDA7CiAKLQlpZiAoIXZkbWEgJiYgaWRlX3R1bmVfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3R1bmVfZG1hKGRyaXZlKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBUT0RPOiBhbHdheXMgZG8gUElPIGZhbGxiYWNrICovCkBAIC03MzAsNyArNzY2LDcgQEAKIAogCWlkZV9zZXRfbWF4X3Bpbyhkcml2ZSk7CiAKLQlyZXR1cm4gdmRtYSA/IDAgOiAtMTsKKwlyZXR1cm4gLTE7CiB9CiAKIGludCBpZGVfaWRfZG1hX2J1ZyhpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC04NDIsNyArODc4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZmZfZG1hX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZmZfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAogCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKQEAgLTg1MiwxOCArODg4LDUgQEAKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKIH07Ci0KLXZvaWQgaWRlX3NldHVwX2RtYShpZGVfaHdpZl90ICpod2lmLCB1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0JaHdpZi0+ZG1hX2Jhc2UgPSBiYXNlOwotCi0JaWYgKCFod2lmLT5kbWFfY29tbWFuZCkKLQkJaHdpZi0+ZG1hX2NvbW1hbmQJPSBod2lmLT5kbWFfYmFzZSArIDA7Ci0JaWYgKCFod2lmLT5kbWFfc3RhdHVzKQotCQlod2lmLT5kbWFfc3RhdHVzCT0gaHdpZi0+ZG1hX2Jhc2UgKyAyOwotCi0JaHdpZi0+ZG1hX29wcyA9ICZzZmZfZG1hX29wczsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldHVwX2RtYSk7CitFWFBPUlRfU1lNQk9MX0dQTChzZmZfZG1hX29wcyk7CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCmluZGV4IDAxMWQ3MjAuLjNkOGU2ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKQEAgLTEyNSwyNiArMTI1LDEwIEBACiAJaW50IHdwOwogCS8qIFN1cHBvcnRzIGZvcm1hdCBwcm9ncmVzcyByZXBvcnQgKi8KIAlpbnQgc3JmcDsKLQkvKiBTdGF0dXMvQWN0aW9uIGZsYWdzICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKIH0gaWRlZmxvcHB5X2Zsb3BweV90OwogCiAjZGVmaW5lIElERUZMT1BQWV9USUNLU19ERUxBWQlIWi8yMAkvKiBkZWZhdWx0IGRlbGF5IGZvciBaSVAgMTAwICg1MG1zKSAqLwogCi0vKiBGbG9wcHkgZmxhZyBiaXRzIHZhbHVlcy4gKi8KLWVudW0gewotCS8qIERSUSBpbnRlcnJ1cHQgZGV2aWNlICovCi0JSURFRkxPUFBZX0ZMQUdfRFJRX0lOVEVSUlVQVAkJPSAoMSA8PAkwKSwKLQkvKiBNZWRpYSBtYXkgaGF2ZSBjaGFuZ2VkICovCi0JSURFRkxPUFBZX0ZMQUdfTUVESUFfQ0hBTkdFRAkJPSAoMSA8PCAxKSwKLQkvKiBGb3JtYXQgaW4gcHJvZ3Jlc3MgKi8KLQlJREVGTE9QUFlfRkxBR19GT1JNQVRfSU5fUFJPR1JFU1MJPSAoMSA8PCAyKSwKLQkvKiBBdm9pZCBjb21tYW5kcyBub3Qgc3VwcG9ydGVkIGluIENsaWsgZHJpdmUgKi8KLQlJREVGTE9QUFlfRkxBR19DTElLX0RSSVZFCQk9ICgxIDw8IDMpLAotCS8qIFJlcXVpcmVzIEJIIGFsZ29yaXRobSBmb3IgcGFja2V0cyAqLwotCUlERUZMT1BQWV9GTEFHX1pJUF9EUklWRQkJPSAoMSA8PCA0KSwKLX07Ci0KIC8qIERlZmluZXMgZm9yIHRoZSBNT0RFIFNFTlNFIGNvbW1hbmQgKi8KICNkZWZpbmUgTU9ERV9TRU5TRV9DVVJSRU5UCQkweDAwCiAjZGVmaW5lIE1PREVfU0VOU0VfQ0hBTkdFQUJMRQkJMHgwMQpAQCAtMjQ3LDkgKzIzMSw5IEBACiAKIAkJZGF0YSA9IGJ2ZWNfa21hcF9pcnEoYnZlYywgJmZsYWdzKTsKIAkJaWYgKGRpcmVjdGlvbikKLQkJCWh3aWYtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBkYXRhLCBjb3VudCk7CisJCQlod2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBkYXRhLCBjb3VudCk7CiAJCWVsc2UKLQkJCWh3aWYtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsIGRhdGEsIGNvdW50KTsKKwkJCWh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgTlVMTCwgZGF0YSwgY291bnQpOwogCQlidmVjX2t1bm1hcF9pcnEoZGF0YSwgJmZsYWdzKTsKIAogCQliY291bnQgLT0gY291bnQ7CkBAIC0yOTEsNiArMjc1LDcgQEAKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwogCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1BSRUVNUFQ7CiAJcnEtPnJxX2Rpc2sgPSBmbG9wcHktPmRpc2s7CisJbWVtY3B5KHJxLT5jbWQsIHBjLT5jLCAxMik7CiAJaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgcnEpOwogfQogCkBAIC0zNTQsNyArMzM5LDYgQEAKIAltZW1zZXQocGMsIDAsIHNpemVvZigqcGMpKTsKIAlwYy0+YnVmID0gcGMtPnBjX2J1ZjsKIAlwYy0+YnVmX3NpemUgPSBJREVGTE9QUFlfUENfQlVGRkVSX1NJWkU7Ci0JcGMtPmNhbGxiYWNrID0gaWRlX2Zsb3BweV9jYWxsYmFjazsKIH0KIAogc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKQEAgLTQwMiw3ICszODYsNyBAQAogCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCiAJLyogU2VuZCB0aGUgYWN0dWFsIHBhY2tldCAqLwotCWRyaXZlLT5od2lmLT5vdXRwdXRfZGF0YShkcml2ZSwgTlVMTCwgZmxvcHB5LT5wYy0+YywgMTIpOworCWRyaXZlLT5od2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBmbG9wcHktPnBjLT5jLCAxMik7CiAKIAkvKiBUaW1lb3V0IGZvciB0aGUgcGFja2V0IGNvbW1hbmQgKi8KIAlyZXR1cm4gSURFRkxPUFBZX1dBSVRfQ01EOwpAQCAtNDI5LDcgKzQxMyw3IEBACiAJICogNDAgYW5kIDUwbXNlYyB3b3JrIHdlbGwuIGlkZWZsb3BweV9wY19pbnRyIHdpbGwgbm90IGJlIGFjdHVhbGx5CiAJICogdXNlZCB1bnRpbCBhZnRlciB0aGUgcGFja2V0IGlzIG1vdmVkIGluIGFib3V0IDUwIG1zZWMuCiAJICovCi0JaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfWklQX0RSSVZFKSB7CisJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19aSVBfRFJJVkUpIHsKIAkJdGltZW91dCA9IGZsb3BweS0+dGlja3M7CiAJCWV4cGlyeSA9ICZpZGVmbG9wcHlfdHJhbnNmZXJfcGM7CiAJfSBlbHNlIHsKQEAgLTQ3NCw3ICs0NTgsNyBAQAogCQlwYy0+ZXJyb3IgPSBJREVGTE9QUFlfRVJST1JfR0VORVJBTDsKIAogCQlmbG9wcHktPmZhaWxlZF9wYyA9IE5VTEw7Ci0JCXBjLT5jYWxsYmFjayhkcml2ZSk7CisJCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTU3NCw2ICs1NTgsOCBAQAogCXB1dF91bmFsaWduZWQoY3B1X3RvX2JlMTYoYmxvY2tzKSwgKHVuc2lnbmVkIHNob3J0ICopJnBjLT5jWzddKTsKIAlwdXRfdW5hbGlnbmVkKGNwdV90b19iZTMyKGJsb2NrKSwgKHVuc2lnbmVkIGludCAqKSAmcGMtPmNbMl0pOwogCisJbWVtY3B5KHJxLT5jbWQsIHBjLT5jLCAxMik7CisKIAlwYy0+cnEgPSBycTsKIAlwYy0+Yl9jb3VudCA9IGNtZCA9PSBSRUFEID8gMCA6IHJxLT5iaW8tPmJpX3NpemU7CiAJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUlcpCkBAIC02NDcsMTIgKzYzMyw2IEBACiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKLQlpZiAoZmxvcHB5LT5mbGFncyAmIElERUZMT1BQWV9GTEFHX0RSUV9JTlRFUlJVUFQpCi0JCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RSUV9JTlRFUlJVUFQ7Ci0KLQlpZiAoZmxvcHB5LT5mbGFncyAmIElERUZMT1BQWV9GTEFHX1pJUF9EUklWRSkKLQkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfWklQX0RSSVZFOwotCiAJcGMtPnJxID0gcnE7CiAKIAlyZXR1cm4gaWRlZmxvcHB5X2lzc3VlX3BjKGRyaXZlLCBwYyk7CkBAIC02NzEsNiArNjUxLDcgQEAKIAlycSA9IGJsa19nZXRfcmVxdWVzdChkcml2ZS0+cXVldWUsIFJFQUQsIF9fR0ZQX1dBSVQpOwogCXJxLT5idWZmZXIgPSAoY2hhciAqKSBwYzsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOworCW1lbWNweShycS0+Y21kLCBwYy0+YywgMTIpOwogCWVycm9yID0gYmxrX2V4ZWN1dGVfcnEoZHJpdmUtPnF1ZXVlLCBmbG9wcHktPmRpc2ssIHJxLCAwKTsKIAlibGtfcHV0X3JlcXVlc3QocnEpOwogCkBAIC03OTUsNyArNzc2LDcgQEAKIAkJc3dpdGNoIChwYy5idWZbZGVzY19zdGFydCArIDRdICYgMHgwMykgewogCQkvKiBDbGlrISBkcml2ZSByZXR1cm5zIHRoaXMgaW5zdGVhZCBvZiBDQVBBQ0lUWV9DVVJSRU5UICovCiAJCWNhc2UgQ0FQQUNJVFlfVU5GT1JNQVRURUQ6Ci0JCQlpZiAoIShmbG9wcHktPmZsYWdzICYgSURFRkxPUFBZX0ZMQUdfQ0xJS19EUklWRSkpCisJCQlpZiAoIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfQ0xJS19EUklWRSkpCiAJCQkJLyoKIAkJCQkgKiBJZiBpdCBpcyBub3QgYSBjbGlrIGRyaXZlLCBicmVhayBvdXQKIAkJCQkgKiAobWFpbnRhaW5zIHByZXZpb3VzIGRyaXZlciBiZWhhdmlvdXIpCkBAIC04NDEsNyArODIyLDcgQEAKIAl9CiAKIAkvKiBDbGlrISBkaXNrIGRvZXMgbm90IHN1cHBvcnQgZ2V0X2ZsZXhpYmxlX2Rpc2tfcGFnZSAqLwotCWlmICghKGZsb3BweS0+ZmxhZ3MgJiBJREVGTE9QUFlfRkxBR19DTElLX0RSSVZFKSkKKwlpZiAoIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfQ0xJS19EUklWRSkpCiAJCSh2b2lkKSBpZGVfZmxvcHB5X2dldF9mbGV4aWJsZV9kaXNrX3BhZ2UoZHJpdmUpOwogCiAJc2V0X2NhcGFjaXR5KGZsb3BweS0+ZGlzaywgZmxvcHB5LT5ibG9ja3MgKiBmbG9wcHktPmJzX2ZhY3Rvcik7CkBAIC05NDksMTEgKzkzMCwxMiBAQAogCiAJCS8qIEVsc2UgYXNzdW1lIGZvcm1hdF91bml0IGhhcyBmaW5pc2hlZCwgYW5kIHdlJ3JlIGF0IDB4MTAwMDAgKi8KIAl9IGVsc2UgeworCQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXU4IHN0YXQ7CiAKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKKwkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCQlwcm9ncmVzc19pbmRpY2F0aW9uID0gKChzdGF0ICYgU0VFS19TVEFUKSA9PSAwKSA/IDAgOiAweDEwMDAwOwpAQCAtMTAzOSw5ICsxMDIxLDEwIEBACiAKIAkqKCh1MTYgKikgJmdjdykgPSBkcml2ZS0+aWQtPmNvbmZpZzsKIAlmbG9wcHktPnBjID0gZmxvcHB5LT5wY19zdGFjazsKKwlkcml2ZS0+cGNfY2FsbGJhY2sgPSBpZGVfZmxvcHB5X2NhbGxiYWNrOwogCiAJaWYgKCgoZ2N3WzBdICYgMHg2MCkgPj4gNSkgPT0gMSkKLQkJZmxvcHB5LT5mbGFncyB8PSBJREVGTE9QUFlfRkxBR19EUlFfSU5URVJSVVBUOworCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQ7CiAJLyoKIAkgKiBXZSB1c2VkIHRvIGNoZWNrIHJldmlzaW9ucyBoZXJlLiBBdCB0aGlzIHBvaW50IGhvd2V2ZXIgSSdtIGdpdmluZyB1cC4KIAkgKiBKdXN0IGFzc3VtZSB0aGV5IGFyZSBhbGwgYnJva2VuLCBpdHMgZWFzaWVyLgpAQCAtMTA1Miw3ICsxMDM1LDcgQEAKIAkgKiB3ZSdsbCBsZWF2ZSB0aGUgbGltaXRhdGlvbiBiZWxvdyBmb3IgdGhlIDIuMi54IHRyZWUuCiAJICovCiAJaWYgKCFzdHJuY21wKGRyaXZlLT5pZC0+bW9kZWwsICJJT01FR0EgWklQIDEwMCBBVEFQSSIsIDIwKSkgewotCQlmbG9wcHktPmZsYWdzIHw9IElERUZMT1BQWV9GTEFHX1pJUF9EUklWRTsKKwkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19aSVBfRFJJVkU7CiAJCS8qIFRoaXMgdmFsdWUgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSAvcHJvYy9pZGUvaGR4L3NldHRpbmdzICovCiAJCWZsb3BweS0+dGlja3MgPSBJREVGTE9QUFlfVElDS1NfREVMQVk7CiAJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIDY0KTsKQEAgLTEwNjQsNyArMTA0Nyw3IEBACiAJICovCiAJaWYgKHN0cm5jbXAoZHJpdmUtPmlkLT5tb2RlbCwgIklPTUVHQSBDbGlrISIsIDExKSA9PSAwKSB7CiAJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIDY0KTsKLQkJZmxvcHB5LT5mbGFncyB8PSBJREVGTE9QUFlfRkxBR19DTElLX0RSSVZFOworCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0NMSUtfRFJJVkU7CiAJfQogCiAJKHZvaWQpIGlkZV9mbG9wcHlfZ2V0X2NhcGFjaXR5KGRyaXZlKTsKQEAgLTExNTMsNyArMTEzNiw3IEBACiAJZmxvcHB5LT5vcGVuZXJzKys7CiAKIAlpZiAoZmxvcHB5LT5vcGVuZXJzID09IDEpIHsKLQkJZmxvcHB5LT5mbGFncyAmPSB+SURFRkxPUFBZX0ZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CiAJCS8qIEp1c3QgaW4gY2FzZSAqLwogCiAJCWlkZWZsb3BweV9pbml0X3BjKCZwYyk7CkBAIC0xMTgwLDE0ICsxMTYzLDE0IEBACiAJCQlyZXQgPSAtRVJPRlM7CiAJCQlnb3RvIG91dF9wdXRfZmxvcHB5OwogCQl9Ci0JCWZsb3BweS0+ZmxhZ3MgfD0gSURFRkxPUFBZX0ZMQUdfTUVESUFfQ0hBTkdFRDsKKwkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19NRURJQV9DSEFOR0VEOwogCQkvKiBJT01FR0EgQ2xpayEgZHJpdmVzIGRvIG5vdCBzdXBwb3J0IGxvY2svdW5sb2NrIGNvbW1hbmRzICovCi0JCWlmICghKGZsb3BweS0+ZmxhZ3MgJiBJREVGTE9QUFlfRkxBR19DTElLX0RSSVZFKSkgeworCQlpZiAoIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfQ0xJS19EUklWRSkpIHsKIAkJCWlkZWZsb3BweV9jcmVhdGVfcHJldmVudF9jbWQoJnBjLCAxKTsKIAkJCSh2b2lkKSBpZGVmbG9wcHlfcXVldWVfcGNfdGFpbChkcml2ZSwgJnBjKTsKIAkJfQogCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKLQl9IGVsc2UgaWYgKGZsb3BweS0+ZmxhZ3MgJiBJREVGTE9QUFlfRkxBR19GT1JNQVRfSU5fUFJPR1JFU1MpIHsKKwl9IGVsc2UgaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1MpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF9wdXRfZmxvcHB5OwogCX0KQEAgLTEyMTAsMTIgKzExOTMsMTIgQEAKIAogCWlmIChmbG9wcHktPm9wZW5lcnMgPT0gMSkgewogCQkvKiBJT01FR0EgQ2xpayEgZHJpdmVzIGRvIG5vdCBzdXBwb3J0IGxvY2svdW5sb2NrIGNvbW1hbmRzICovCi0JCWlmICghKGZsb3BweS0+ZmxhZ3MgJiBJREVGTE9QUFlfRkxBR19DTElLX0RSSVZFKSkgeworCQlpZiAoIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfQ0xJS19EUklWRSkpIHsKIAkJCWlkZWZsb3BweV9jcmVhdGVfcHJldmVudF9jbWQoJnBjLCAwKTsKIAkJCSh2b2lkKSBpZGVmbG9wcHlfcXVldWVfcGNfdGFpbChkcml2ZSwgJnBjKTsKIAkJfQogCi0JCWZsb3BweS0+ZmxhZ3MgJj0gfklERUZMT1BQWV9GTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOwogCX0KIAogCWZsb3BweS0+b3BlbmVycy0tOwpAQCAtMTIzNiwxNSArMTIxOSwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlkZV9mbG9wcHlfbG9ja2Rvb3IoaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHksCi0JCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLCB1bnNpZ25lZCBsb25nIGFyZywgdW5zaWduZWQgaW50IGNtZCkKK3N0YXRpYyBpbnQgaWRlX2Zsb3BweV9sb2NrZG9vcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnLCB1bnNpZ25lZCBpbnQgY21kKQogeworCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCiAJaWYgKGZsb3BweS0+b3BlbmVycyA+IDEpCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBUaGUgSU9NRUdBIENsaWshIERyaXZlIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGNvbW1hbmQgLQogCSAqIG5vIHJvb20gZm9yIGFuIGVqZWN0IG1lY2hhbmlzbSAqLwotCWlmICghKGZsb3BweS0+ZmxhZ3MgJiBJREVGTE9QUFlfRkxBR19DTElLX0RSSVZFKSkgeworCWlmICghKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19DTElLX0RSSVZFKSkgewogCQlpbnQgcHJldmVudCA9IGFyZyA/IDEgOiAwOwogCiAJCWlmIChjbWQgPT0gQ0RST01FSkVDVCkKQEAgLTEyNjUsMTYgKzEyNTAsMTcgQEAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9mb3JtYXRfdW5pdChpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSwKIAkJCQkgIGludCBfX3VzZXIgKmFyZykKIHsKLQlpbnQgYmxvY2tzLCBsZW5ndGgsIGZsYWdzLCBlcnIgPSAwOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gZmxvcHB5LT5kcml2ZTsKKwlpbnQgYmxvY2tzLCBsZW5ndGgsIGZsYWdzLCBlcnIgPSAwOwogCiAJaWYgKGZsb3BweS0+b3BlbmVycyA+IDEpIHsKIAkJLyogRG9uJ3QgZm9ybWF0IGlmIHNvbWVvbmUgaXMgdXNpbmcgdGhlIGRpc2sgKi8KLQkJZmxvcHB5LT5mbGFncyAmPSB+SURFRkxPUFBZX0ZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JZmxvcHB5LT5mbGFncyB8PSBJREVGTE9QUFlfRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CisJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CiAKIAkvKgogCSAqIFNlbmQgQVRBUElfRk9STUFUX1VOSVQgdG8gdGhlIGRyaXZlLgpAQCAtMTI5OCwxNSArMTI4NCwxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkodm9pZCkgaWRlZmxvcHB5X2dldF9zZnJwX2JpdChmbG9wcHktPmRyaXZlKTsKKwkodm9pZCkgaWRlZmxvcHB5X2dldF9zZnJwX2JpdChkcml2ZSk7CiAJaWRlZmxvcHB5X2NyZWF0ZV9mb3JtYXRfdW5pdF9jbWQoJnBjLCBibG9ja3MsIGxlbmd0aCwgZmxhZ3MpOwogCi0JaWYgKGlkZWZsb3BweV9xdWV1ZV9wY190YWlsKGZsb3BweS0+ZHJpdmUsICZwYykpCisJaWYgKGlkZWZsb3BweV9xdWV1ZV9wY190YWlsKGRyaXZlLCAmcGMpKQogCQllcnIgPSAtRUlPOwogCiBvdXQ6CiAJaWYgKGVycikKLQkJZmxvcHB5LT5mbGFncyAmPSB+SURFRkxPUFBZX0ZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTMyNSw3ICsxMzExLDcgQEAKIAljYXNlIENEUk9NRUpFQ1Q6CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQ0RST01fTE9DS0RPT1I6Ci0JCXJldHVybiBpZGVfZmxvcHB5X2xvY2tkb29yKGZsb3BweSwgJnBjLCBhcmcsIGNtZCk7CisJCXJldHVybiBpZGVfZmxvcHB5X2xvY2tkb29yKGRyaXZlLCAmcGMsIGFyZywgY21kKTsKIAljYXNlIElERUZMT1BQWV9JT0NUTF9GT1JNQVRfU1VQUE9SVEVEOgogCQlyZXR1cm4gMDsKIAljYXNlIElERUZMT1BQWV9JT0NUTF9GT1JNQVRfR0VUX0NBUEFDSVRZOgpAQCAtMTM2Niw4ICsxMzUyLDggQEAKIAkJZHJpdmUtPmF0dGFjaCA9IDA7CiAJCXJldHVybiAwOwogCX0KLQlyZXQgPSAhIShmbG9wcHktPmZsYWdzICYgSURFRkxPUFBZX0ZMQUdfTUVESUFfQ0hBTkdFRCk7Ci0JZmxvcHB5LT5mbGFncyAmPSB+SURFRkxPUFBZX0ZMQUdfTUVESUFfQ0hBTkdFRDsKKwlyZXQgPSAhIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRCk7CisJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfTUVESUFfQ0hBTkdFRDsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jIGIvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYwppbmRleCAyZDkyMjE0Li4zMWQ5OGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKQEAgLTI4LDI5ICsyOCwyMSBAQAogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9hZGQoc3RydWN0IGNsYXNzICpjbHMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKIAl1bnNpZ25lZCBpbnQgYmFzZSwgY3RsOwotCWludCBpcnE7Ci0JaHdfcmVnc190IGh3OwotCXU4IGlkeFtdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJaW50IGlycSwgcmM7CisJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCiAJaWYgKHNzY2FuZihidWYsICIleDoleDolZCIsICZiYXNlLCAmY3RsLCAmaXJxKSAhPSAzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWh3aWYgPSBpZGVfZmluZF9wb3J0KCk7Ci0JaWYgKGh3aWYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCBiYXNlLCBjdGwpOwogCWh3LmlycSA9IGlycTsKIAlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiAKLQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7Ci0KLQlpZHhbMF0gPSBod2lmLT5pbmRleDsKLQotCWlkZV9kZXZpY2VfYWRkKGlkeCwgTlVMTCk7CisJcmMgPSBpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCXJldHVybiBuOwogfTsKQEAgLTkwLDE4ICs4MiwxOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpZGVfZ2VuZXJpY19pbml0KHZvaWQpCiB7Ci0JdTggaWR4W01BWF9IV0lGU107Ci0JaW50IGk7CisJaHdfcmVnc190IGh3W01BWF9IV0lGU10sICpod3NbTUFYX0hXSUZTXTsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CisJdW5zaWduZWQgbG9uZyBpb19hZGRyOworCWludCBpLCByYzsKIAogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogcGxlYXNlIHVzZSBcInByb2JlX21hc2s9MHgzZlwiIG1vZHVsZSAiCiAJCQkgInBhcmFtZXRlciBmb3IgcHJvYmluZyBhbGwgbGVnYWN5IElTQSBJREUgcG9ydHNcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7Ci0JCWlkZV9od2lmX3QgKmh3aWY7Ci0JCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IGlkZV9kZWZhdWx0X2lvX2Jhc2UoaSk7Ci0JCWh3X3JlZ3NfdCBodzsKKwkJaW9fYWRkciA9IGlkZV9kZWZhdWx0X2lvX2Jhc2UoaSk7CiAKLQkJaWR4W2ldID0gMHhmZjsKKwkJaHdzW2ldID0gTlVMTDsKIAogCQlpZiAoKHByb2JlX21hc2sgJiAoMSA8PCBpKSkgJiYgaW9fYWRkcikgewogCQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb19hZGRyLCA4LCBEUlZfTkFNRSkpIHsKQEAgLTExOSwzMyArMTExLDQyIEBACiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBTa2lwIHByb2JpbmcgaWYgdGhlIGNvcnJlc3BvbmRpbmcKLQkJCSAqIHNsb3QgaXMgYWxyZWFkeSBvY2N1cGllZC4KLQkJCSAqLwotCQkJaHdpZiA9IGlkZV9maW5kX3BvcnQoKTsKLQkJCWlmIChod2lmID09IE5VTEwgfHwgaHdpZi0+aW5kZXggIT0gaSkgewotCQkJCWlkeFtpXSA9IDB4ZmY7Ci0JCQkJY29udGludWU7Ci0JCQl9CisJCQltZW1zZXQoJmh3W2ldLCAwLCBzaXplb2YoaHdbaV0pKTsKKwkJCWlkZV9zdGRfaW5pdF9wb3J0cygmaHdbaV0sIGlvX2FkZHIsIGlvX2FkZHIgKyAweDIwNik7CisJCQlod1tpXS5pcnEgPSBpZGVfZGVmYXVsdF9pcnEoaW9fYWRkcik7CisJCQlod1tpXS5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiAKLQkJCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwotCQkJaWRlX3N0ZF9pbml0X3BvcnRzKCZodywgaW9fYWRkciwgaW9fYWRkciArIDB4MjA2KTsKLQkJCWh3LmlycSA9IGlkZV9kZWZhdWx0X2lycShpb19hZGRyKTsKLQkJCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKLQkJCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKLQotCQkJaWR4W2ldID0gaTsKKwkJCWh3c1tpXSA9ICZod1tpXTsKIAkJfQogCX0KIAotCWlkZV9kZXZpY2VfYWRkX2FsbChpZHgsIE5VTEwpOworCWhvc3QgPSBpZGVfaG9zdF9hbGxvY19hbGwoTlVMTCwgaHdzKTsKKwlpZiAoaG9zdCA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJcmMgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBOVUxMLCBod3MpOworCWlmIChyYykKKwkJZ290byBlcnJfZnJlZTsKIAogCWlmIChpZGVfZ2VuZXJpY19zeXNmc19pbml0KCkpCiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gY3JlYXRlIGlkZV9nZW5lcmljICIKIAkJCQkJICJjbGFzc1xuIik7CiAKIAlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCWlkZV9ob3N0X2ZyZWUoaG9zdCk7CitlcnI6CisJZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CisJCWlmIChod3NbaV0gPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlvX2FkZHIgPSBod3NbaV0tPmlvX3BvcnRzLmRhdGFfYWRkcjsKKwkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciArIDB4MjA2LCAxKTsKKwkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciwgOCk7CisJfQorCXJldHVybiByYzsKIH0KIAogbW9kdWxlX2luaXQoaWRlX2dlbmVyaWNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IDY2MWI3NWEuLmE4OTZhMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC0zMzAsNyArMzMwLDcgQEAKIAkJCXRmLT5lcnJvciA9IGVycjsKIAkJCXRmLT5zdGF0dXMgPSBzdGF0OwogCi0JCQlkcml2ZS0+aHdpZi0+dGZfcmVhZChkcml2ZSwgdGFzayk7CisJCQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCB0YXNrKTsKIAogCQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0RZTikKIAkJCQlrZnJlZSh0YXNrKTsKQEAgLTM4MSw4ICszODEsNyBAQAogCQlpZiAoZXJyID09IEFCUlRfRVJSKSB7CiAJCQlpZiAoZHJpdmUtPnNlbGVjdC5iLmxiYSAmJgogCQkJICAgIC8qIHNvbWUgbmV3ZXIgZHJpdmVzIGRvbid0IHN1cHBvcnQgV0lOX1NQRUNJRlkgKi8KLQkJCSAgICBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKSA9PQotCQkJCVdJTl9TUEVDSUZZKQorCQkJICAgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgPT0gV0lOX1NQRUNJRlkpCiAJCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9IGVsc2UgaWYgKChlcnIgJiBCQURfQ1JDKSA9PSBCQURfQ1JDKSB7CiAJCQkvKiBVRE1BIGNyYyBlcnJvciwganVzdCByZXRyeSB0aGUgb3BlcmF0aW9uICovCkBAIC00MDgsNyArNDA3LDcgQEAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAotCWlmIChpZGVfcmVhZF9zdGF0dXMoZHJpdmUpICYgKEJVU1lfU1RBVCB8IERSUV9TVEFUKSkKKwlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChCVVNZX1NUQVQgfCBEUlFfU1RBVCkpCiAJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CiAKIAlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKQEAgLTQzNSwxMCArNDM0LDkgQEAKIAkJLyogYWRkIGRlY29kaW5nIGVycm9yIHN0dWZmICovCiAJfQogCi0JaWYgKGlkZV9yZWFkX3N0YXR1cyhkcml2ZSkgJiAoQlVTWV9TVEFUIHwgRFJRX1NUQVQpKQorCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEJVU1lfU1RBVCB8IERSUV9TVEFUKSkKIAkJLyogZm9yY2UgYW4gYWJvcnQgKi8KLQkJaHdpZi0+T1VUQlNZTkMoaHdpZiwgV0lOX0lETEVJTU1FRElBVEUsCi0JCQkgICAgICAgaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKKwkJaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgV0lOX0lETEVJTU1FRElBVEUpOwogCiAJaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7CiAJCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7CkBAIC03MTIsNyArNzEwLDggQEAKICNpZmRlZiBERUJVRwogIAlwcmludGsoIiVzOiBEUklWRV9DTUQgKG51bGwpXG4iLCBkcml2ZS0+bmFtZSk7CiAjZW5kaWYKLQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgaWRlX3JlYWRfc3RhdHVzKGRyaXZlKSwgaWRlX3JlYWRfZXJyb3IoZHJpdmUpKTsKKwlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSwKKwkJCSAgaWRlX3JlYWRfZXJyb3IoZHJpdmUpKTsKIAogIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CkBAIC03NDcsMTYgKzc0NiwxNyBAQAogCQkgKiB0aGUgYnVzIG1heSBiZSBicm9rZW4gZW5vdWdoIHRvIHdhbGsgb24gb3VyIHRvZXMgYXQgdGhpcwogCQkgKiBwb2ludC4KIAkJICovCisJCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAkJaW50IHJjOwogI2lmZGVmIERFQlVHX1BNCiAJCXByaW50aygiJXM6IFdha2V1cCByZXF1ZXN0IGluaXRlZCwgd2FpdGluZyBmb3IgIUJTWS4uLlxuIiwgZHJpdmUtPm5hbWUpOwogI2VuZGlmCi0JCXJjID0gaWRlX3dhaXRfbm90X2J1c3koSFdJRihkcml2ZSksIDM1MDAwKTsKKwkJcmMgPSBpZGVfd2FpdF9ub3RfYnVzeShod2lmLCAzNTAwMCk7CiAJCWlmIChyYykKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBidXMgbm90IHJlYWR5IG9uIHdha2V1cFxuIiwgZHJpdmUtPm5hbWUpOwogCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCQlpZGVfc2V0X2lycShkcml2ZSwgMSk7Ci0JCXJjID0gaWRlX3dhaXRfbm90X2J1c3koSFdJRihkcml2ZSksIDEwMDAwMCk7CisJCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKKwkJcmMgPSBpZGVfd2FpdF9ub3RfYnVzeShod2lmLCAxMDAwMDApOwogCQlpZiAocmMpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmUgbm90IHJlYWR5IG9uIHdha2V1cFxuIiwgZHJpdmUtPm5hbWUpOwogCX0KQEAgLTEwNDIsNyArMTA0Miw3IEBACiAJCQkgKiBxdWlya19saXN0IG1heSBub3QgbGlrZSBpbnRyIHNldHVwcy9jbGVhbnVwcwogCQkJICovCiAJCQlpZiAoZHJpdmUtPnF1aXJrX2xpc3QgIT0gMSkKLQkJCQlpZGVfc2V0X2lycShkcml2ZSwgMCk7CisJCQkJaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwogCQl9CiAJCWh3Z3JvdXAtPmh3aWYgPSBod2lmOwogCQlod2dyb3VwLT5kcml2ZSA9IGRyaXZlOwpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7CiAJCSh2b2lkKWh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOwogCQlyZXQgPSBpZGVfZXJyb3IoZHJpdmUsICJkbWEgdGltZW91dCBlcnJvciIsCi0JCQkJaWRlX3JlYWRfc3RhdHVzKGRyaXZlKSk7CisJCQkJaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IHJldHJ5XG4iLCBkcml2ZS0+bmFtZSk7CiAJCWh3aWYtPmRtYV9vcHMtPmRtYV90aW1lb3V0KGRyaXZlKTsKQEAgLTEyNjcsNyArMTI2Nyw3IEBACiAJCQkJfSBlbHNlCiAJCQkJCXN0YXJ0c3RvcCA9CiAJCQkJCWlkZV9lcnJvcihkcml2ZSwgImlycSB0aW1lb3V0IiwKLQkJCQkJCSAgaWRlX3JlYWRfc3RhdHVzKGRyaXZlKSk7CisJCQkJCQkgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOwogCQkJfQogCQkJZHJpdmUtPnNlcnZpY2VfdGltZSA9IGppZmZpZXMgLSBkcml2ZS0+c2VydmljZV9zdGFydDsKIAkJCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKQEAgLTEzMjMsNyArMTMyMyw4IEBACiAJICovCiAJZG8gewogCQlpZiAoaHdpZi0+aXJxID09IGlycSkgewotCQkJc3RhdCA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7CisJCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKwogCQkJaWYgKCFPS19TVEFUKHN0YXQsIFJFQURZX1NUQVQsIEJBRF9TVEFUKSkgewogCQkJCS8qIFRyeSB0byBub3QgZmxvb2QgdGhlIGNvbnNvbGUgd2l0aCBtc2dzICovCiAJCQkJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9tc2d0aW1lLCBjb3VudDsKQEAgLTE0MTMsNyArMTQxNCw3IEBACiAJCQkgKiBXaGFjayB0aGUgc3RhdHVzIHJlZ2lzdGVyLCBqdXN0IGluIGNhc2UKIAkJCSAqIHdlIGhhdmUgYSBsZWZ0b3ZlciBwZW5kaW5nIElSUS4KIAkJCSAqLwotCQkJKHZvaWQpIGh3aWYtPklOQihod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7CisJCQkodm9pZClod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERVBDSSAqLwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CkBAIC0xNTE5LDYgKzE1MjAsNyBAQAogCiB2b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCwgdTggZG1hKQogeworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlpZGVfdGFza190IHRhc2s7CiAKIAltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CkBAIC0xNTI5LDkgKzE1MzEsOSBAQAogCXRhc2sudGYubGJhaCAgICA9IChiY291bnQgPj4gOCkgJiAweGZmOwogCiAJaWRlX3RmX2R1bXAoZHJpdmUtPm5hbWUsICZ0YXNrLnRmKTsKLQlpZGVfc2V0X2lycShkcml2ZSwgMSk7CisJaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOwogCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQlkcml2ZS0+aHdpZi0+dGZfbG9hZChkcml2ZSwgJnRhc2spOworCWh3aWYtPnRwX29wcy0+dGZfbG9hZChkcml2ZSwgJnRhc2spOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcGt0Y21kX3RmX2xvYWQpOwpAQCAtMTU0Myw5ICsxNTQ1LDkgQEAKIAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCWlmICh3cml0ZSkKLQkJCWh3aWYtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBidWYsIG1pbig0LCBsZW4pKTsKKwkJCWh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGEoZHJpdmUsIE5VTEwsIGJ1ZiwgbWluKDQsIGxlbikpOwogCQllbHNlCi0JCQlod2lmLT5pbnB1dF9kYXRhKGRyaXZlLCBOVUxMLCBidWYsIG1pbig0LCBsZW4pKTsKKwkJCWh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgTlVMTCwgYnVmLCBtaW4oNCwgbGVuKSk7CiAJCWxlbiAtPSA0OwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCmluZGV4IDQ0YWFlYzIuLjA3ZGE1ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwpAQCAtNDIsMTggKzQyLDYgQEAKIAlvdXRiKHZhbCwgcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9vdXRic3luYyhpZGVfaHdpZl90ICpod2lmLCB1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0Jb3V0YihhZGRyLCBwb3J0KTsKLX0KLQotdm9pZCBkZWZhdWx0X2h3aWZfaW9wcyAoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlod2lmLT5PVVRCCT0gaWRlX291dGI7Ci0JaHdpZi0+T1VUQlNZTkMJPSBpZGVfb3V0YnN5bmM7Ci0JaHdpZi0+SU5CCT0gaWRlX2luYjsKLX0KLQogLyoKICAqCU1NSU8gb3BlcmF0aW9ucywgdHlwaWNhbGx5IHVzZWQgZm9yIFNBVEEgY29udHJvbGxlcnMKICAqLwpAQCAtNjgsMzEgKzU2LDE5IEBACiAJd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopIHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfbW1fb3V0YnN5bmMoaWRlX2h3aWZfdCAqaHdpZiwgdTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7Ci19Ci0KLXZvaWQgZGVmYXVsdF9od2lmX21taW9wcyAoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlod2lmLT5PVVRCCT0gaWRlX21tX291dGI7Ci0JLyogTW9zdCBzeXN0ZW1zIHdpbGwgbmVlZCB0byBvdmVycmlkZSBPVVRCU1lOQywgYWxhcyBob3dldmVyCi0JICAgdGhpcyBvbmUgaXMgY29udHJvbGxlciBzcGVjaWZpYyEgKi8KLQlod2lmLT5PVVRCU1lOQwk9IGlkZV9tbV9vdXRic3luYzsKLQlod2lmLT5JTkIJPSBpZGVfbW1faW5iOwotfQotCi1FWFBPUlRfU1lNQk9MKGRlZmF1bHRfaHdpZl9tbWlvcHMpOwotCiB2b2lkIFNFTEVDVF9EUklWRSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCWlkZV90YXNrX3QgdGFzazsKIAogCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+c2VsZWN0cHJvYykKIAkJcG9ydF9vcHMtPnNlbGVjdHByb2MoZHJpdmUpOwogCi0JaHdpZi0+T1VUQihkcml2ZS0+c2VsZWN0LmFsbCwgaHdpZi0+aW9fcG9ydHMuZGV2aWNlX2FkZHIpOworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9ERVZJQ0U7CisKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7CiB9CiAKIHZvaWQgU0VMRUNUX01BU0soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbWFzaykKQEAgLTEwMyw3ICs3OSw2MSBAQAogCQlwb3J0X29wcy0+bWFza3Byb2MoZHJpdmUsIG1hc2spOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit2b2lkIGlkZV9leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqaHdpZiwgdTggY21kKQoreworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXdyaXRlYihjbWQsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOworCWVsc2UKKwkJb3V0YihjbWQsIGh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZXhlY19jb21tYW5kKTsKKwordTggaWRlX3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7CisJZWxzZQorCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX3N0YXR1cyk7CisKK3U4IGlkZV9yZWFkX2FsdHN0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWVsc2UKKwkJcmV0dXJuIGluYihod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9hbHRzdGF0dXMpOworCit1OCBpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKTsKKwllbHNlCisJCXJldHVybiBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cyk7CisKK3ZvaWQgaWRlX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQoreworCXU4IGN0bCA9IEFUQV9ERVZDVExfT0JTOworCisJaWYgKG9uID09IDQpIHsgLyogaGFjayBmb3IgU1JTVCAqLworCQljdGwgfD0gNDsKKwkJb24gJj0gfjQ7CisJfQorCisJY3RsIHw9IG9uID8gMCA6IDI7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQl3cml0ZWIoY3RsLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWVsc2UKKwkJb3V0YihjdGwsIGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfaXJxKTsKKwordm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwpAQCAtMTU1LDggKzE4NSw5IEBACiAJCXRmX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QuYWxsLAogCQkJIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfbG9hZCk7CiAKLXN0YXRpYyB2b2lkIGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3ZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKQEAgLTE4OCw2ICsyMTksOCBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwkJdGYtPmZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKQEAgLTIxNCw2ICsyNDcsNyBAQAogCQkJdGYtPmhvYl9sYmFoICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9yZWFkKTsKIAogLyoKICAqIFNvbWUgbG9jYWxidXMgRUlERSBpbnRlcmZhY2VzIHJlcXVpcmUgYSBzcGVjaWFsIGFjY2VzcyBzZXF1ZW5jZQpAQCAtMjM2LDggKzI3MCw4IEBACiAgKiBzbyBpZiBhbiBvZGQgbGVuIGlzIHNwZWNpZmllZCwgYmUgc3VyZSB0aGF0IHRoZXJlJ3MgYXQgbGVhc3Qgb25lCiAgKiBleHRyYSBieXRlIGFsbG9jYXRlZCBmb3IgdGhlIGJ1ZmZlci4KICAqLwotc3RhdGljIHZvaWQgYXRhX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit2b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCisJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKQEAgLTI3NywxMiArMzExLDEzIEBACiAJCQlpbnN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5wdXRfZGF0YSk7CiAKIC8qCiAgKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICp0byogdGhlIElERSBpbnRlcmZhY2UKICAqLwotc3RhdGljIHZvaWQgYXRhX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKK3ZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCisJCSAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CkBAIC0zMjAsMTUgKzM1NSw1MCBAQAogCQkJb3V0c3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9vdXRwdXRfZGF0YSk7CiAKLXZvaWQgZGVmYXVsdF9od2lmX3RyYW5zcG9ydChpZGVfaHdpZl90ICpod2lmKQordTggaWRlX3JlYWRfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWh3aWYtPnRmX2xvYWQJICA9IGlkZV90Zl9sb2FkOwotCWh3aWYtPnRmX3JlYWQJICA9IGlkZV90Zl9yZWFkOworCWlkZV90YXNrX3QgdGFzazsKIAotCWh3aWYtPmlucHV0X2RhdGEgID0gYXRhX2lucHV0X2RhdGE7Ci0JaHdpZi0+b3V0cHV0X2RhdGEgPSBhdGFfb3V0cHV0X2RhdGE7CisJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fRkVBVFVSRTsKKworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKworCXJldHVybiB0YXNrLnRmLmVycm9yOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfZXJyb3IpOworCit2b2lkIGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbihpZGVfZHJpdmVfdCAqZHJpdmUsIHUxNiAqYmNvdW50LCB1OCAqaXJlYXNvbikKK3sKKwlpZGVfdGFza190IHRhc2s7CisKKwltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkFIIHwgSURFX1RGTEFHX0lOX0xCQU0gfAorCQkJSURFX1RGTEFHX0lOX05TRUNUOworCisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCisJKmJjb3VudCA9ICh0YXNrLnRmLmxiYWggPDwgOCkgfCB0YXNrLnRmLmxiYW07CisJKmlyZWFzb24gPSB0YXNrLnRmLm5zZWN0ICYgMzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbik7CisKK2NvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLnJlYWRfc2ZmX2RtYV9zdGF0dXMJPSBpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cywKKworCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAorCisJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKKwkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAorfTsKIAogdm9pZCBpZGVfZml4X2RyaXZlaWQgKHN0cnVjdCBoZF9kcml2ZWlkICppZCkKIHsKQEAgLTQ4MywxMCArNTUzLDEwIEBACiAJICogYWJvdXQgcG9zc2libGUgaXNhLXBucCBhbmQgcGNpLXBucCBpc3N1ZXMgeWV0LgogCSAqLwogCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkcikKLQkJc3RhdCA9IGlkZV9yZWFkX2FsdHN0YXR1cyhkcml2ZSk7CisJCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfYWx0c3RhdHVzKGh3aWYpOwogCWVsc2UKIAkJLyogTm90ZTogdGhpcyBtYXkgY2xlYXIgYSBwZW5kaW5nIElSUSEhICovCi0JCXN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAogCWlmIChzdGF0ICYgQlVTWV9TVEFUKQogCQkvKiBkcml2ZSBidXN5OiAgZGVmaW5pdGVseSBub3QgaW50ZXJydXB0aW5nICovCkBAIC01MTEsMjQgKzU4MSwyNiBAQAogICovCiBzdGF0aWMgaW50IF9faWRlX3dhaXRfc3RhdChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsIHU4IGJhZCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1OCAqcnN0YXQpCiB7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAl1OCBzdGF0OwogCiAJdWRlbGF5KDEpOwkvKiBzcGVjIGFsbG93cyBkcml2ZSA0MDBucyB0byBhc3NlcnQgIkJVU1kiICovCi0Jc3RhdCA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKIAlpZiAoc3RhdCAmIEJVU1lfU1RBVCkgewogCQlsb2NhbF9pcnFfc2V0KGZsYWdzKTsKIAkJdGltZW91dCArPSBqaWZmaWVzOwotCQl3aGlsZSAoKHN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpKSAmIEJVU1lfU1RBVCkgeworCQl3aGlsZSAoKHN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpKSAmIEJVU1lfU1RBVCkgewogCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKIAkJCQkvKgogCQkJCSAqIE9uZSBsYXN0IHJlYWQgYWZ0ZXIgdGhlIHRpbWVvdXQgaW4gY2FzZQogCQkJCSAqIGhlYXZ5IGludGVycnVwdCBsb2FkIG1hZGUgdXMgbm90IG1ha2UgYW55CiAJCQkJICogcHJvZ3Jlc3MgZHVyaW5nIHRoZSB0aW1lb3V0Li4KIAkJCQkgKi8KLQkJCQlzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKKwkJCQlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAkJCQlpZiAoIShzdGF0ICYgQlVTWV9TVEFUKSkKIAkJCQkJYnJlYWs7CiAKQEAgLTU0OCw3ICs2MjAsNyBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCXVkZWxheSgxKTsKLQkJc3RhdCA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJCWlmIChPS19TVEFUKHN0YXQsIGdvb2QsIGJhZCkpIHsKIAkJCSpyc3RhdCA9IHN0YXQ7CkBAIC02NzQsNiArNzQ2LDcgQEAKIGludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCXN0cnVjdCBoZF9kcml2ZWlkICppZDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGZsYWdzOwogCXU4IHN0YXQ7CkBAIC02ODQsOSArNzU3LDkgQEAKIAkgKi8KIAogCVNFTEVDVF9NQVNLKGRyaXZlLCAxKTsKLQlpZGVfc2V0X2lycShkcml2ZSwgMCk7CisJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwogCW1zbGVlcCg1MCk7Ci0JaHdpZi0+T1VUQlNZTkMoaHdpZiwgV0lOX0lERU5USUZZLCBod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOworCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIFdJTl9JREVOVElGWSk7CiAJdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKIAlkbyB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CkBAIC02OTUsMTEgKzc2OCwxMSBAQAogCQl9CiAKIAkJbXNsZWVwKDUwKTsJLyogZ2l2ZSBkcml2ZSBhIGJyZWF0aGVyICovCi0JCXN0YXQgPSBpZGVfcmVhZF9hbHRzdGF0dXMoZHJpdmUpOworCQlzdGF0ID0gdHBfb3BzLT5yZWFkX2FsdHN0YXR1cyhod2lmKTsKIAl9IHdoaWxlIChzdGF0ICYgQlVTWV9TVEFUKTsKIAogCW1zbGVlcCg1MCk7CS8qIHdhaXQgZm9yIElSUSBhbmQgRFJRX1NUQVQgKi8KLQlzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKKwlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAogCWlmICghT0tfU1RBVChzdGF0LCBEUlFfU1RBVCwgQkFEX1JfU1RBVCkpIHsKIAkJU0VMRUNUX01BU0soZHJpdmUsIDApOwpAQCAtNzEzLDggKzc4Niw4IEBACiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQotCWh3aWYtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsIGlkLCBTRUNUT1JfU0laRSk7Ci0JKHZvaWQpaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsJLyogY2xlYXIgZHJpdmUgSVJRICovCisJdHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBOVUxMLCBpZCwgU0VDVE9SX1NJWkUpOworCSh2b2lkKXRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CS8qIGNsZWFyIGRyaXZlIElSUSAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJaWRlX2ZpeF9kcml2ZWlkKGlkKTsKQEAgLTczNSw5ICs4MDgsMTAgQEAKIGludCBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJaW50IGVycm9yID0gMDsKIAl1OCBzdGF0OworCWlkZV90YXNrX3QgdGFzazsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQogCWlmIChod2lmLT5kbWFfb3BzKQkvKiBjaGVjayBpZiBob3N0IHN1cHBvcnRzIERNQSAqLwpAQCAtNzcwLDEyICs4NDQsMTkgQEAKIAlTRUxFQ1RfRFJJVkUoZHJpdmUpOwogCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKIAl1ZGVsYXkoMSk7Ci0JaWRlX3NldF9pcnEoZHJpdmUsIDApOwotCWh3aWYtPk9VVEIoc3BlZWQsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlod2lmLT5PVVRCKFNFVEZFQVRVUkVTX1hGRVIsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWh3aWYtPk9VVEJTWU5DKGh3aWYsIFdJTl9TRVRGRUFUVVJFUywgaW9fcG9ydHMtPmNvbW1hbmRfYWRkcik7CisJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOworCisJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCBJREVfVEZMQUdfT1VUX05TRUNUOworCXRhc2sudGYuZmVhdHVyZSA9IFNFVEZFQVRVUkVTX1hGRVI7CisJdGFzay50Zi5uc2VjdCAgID0gc3BlZWQ7CisKKwl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKKworCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIFdJTl9TRVRGRUFUVVJFUyk7CisKIAlpZiAoZHJpdmUtPnF1aXJrX2xpc3QgPT0gMikKLQkJaWRlX3NldF9pcnEoZHJpdmUsIDEpOworCQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7CiAKIAllcnJvciA9IF9faWRlX3dhaXRfc3RhdChkcml2ZSwgZHJpdmUtPnJlYWR5X3N0YXQsCiAJCQkJQlVTWV9TVEFUfERSUV9TVEFUfEVSUl9TVEFULApAQCAtNzk2LDggKzg3Nyw3IEBACiAKICBza2lwOgogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQotCWlmICgoc3BlZWQgPj0gWEZFUl9TV19ETUFfMCB8fCAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19WRE1BKSkgJiYKLQkgICAgZHJpdmUtPnVzaW5nX2RtYSkKKwlpZiAoc3BlZWQgPj0gWEZFUl9TV19ETUFfMCAmJiBkcml2ZS0+dXNpbmdfZG1hKQogCQlod2lmLT5kbWFfb3BzLT5kbWFfaG9zdF9zZXQoZHJpdmUsIDEpOwogCWVsc2UgaWYgKGh3aWYtPmRtYV9vcHMpCS8qIGNoZWNrIGlmIGhvc3Qgc3VwcG9ydHMgRE1BICovCiAJCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwpAQCAtODgxLDcgKzk2MSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKIAlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKLQlod2lmLT5PVVRCU1lOQyhod2lmLCBjbWQsIGh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7CisJaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgY21kKTsKIAkvKgogCSAqIERyaXZlIHRha2VzIDQwMG5TIHRvIHJlc3BvbmQsIHdlIG11c3QgYXZvaWQgdGhlIElSUSBiZWluZwogCSAqIHNlcnZpY2VkIGJlZm9yZSB0aGF0LgpAQCAtODk5LDcgKzk3OSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwotCWh3aWYtPk9VVEJTWU5DKGh3aWYsIFdJTl9QQUNLRVRDTUQsIGh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7CisJaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgV0lOX1BBQ0tFVENNRCk7CiAJbmRlbGF5KDQwMCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTkyNCwxMiArMTAwNCwxMyBAQAogICovCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGF0YXBpX3Jlc2V0X3BvbGxmdW5jIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3Z3JvdXBfdCAqaHdncm91cAk9IEhXR1JPVVAoZHJpdmUpOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpZGVfaHdncm91cF90ICpod2dyb3VwID0gaHdpZi0+aHdncm91cDsKIAl1OCBzdGF0OwogCiAJU0VMRUNUX0RSSVZFKGRyaXZlKTsKIAl1ZGVsYXkgKDEwKTsKLQlzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKKwlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAogCWlmIChPS19TVEFUKHN0YXQsIDAsIEJVU1lfU1RBVCkpCiAJCXByaW50aygiJXM6IEFUQVBJIHJlc2V0IGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7CkBAIC05NzUsNyArMTA1Niw3IEBACiAJCX0KIAl9CiAKLQl0bXAgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCXRtcCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKIAlpZiAoIU9LX1NUQVQodG1wLCAwLCBCVVNZX1NUQVQpKSB7CiAJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2dyb3VwLT5wb2xsX3RpbWVvdXQpKSB7CkBAIC0xMDg5LDggKzExNzAsOCBAQAogCWlkZV9od2lmX3QgKmh3aWY7CiAJaWRlX2h3Z3JvdXBfdCAqaHdncm91cDsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0czsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzOwogCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzOwotCXU4IGN0bDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwogCWh3aWYgPSBIV0lGKGRyaXZlKTsKQEAgLTEwOTgsNiArMTE3OSw4IEBACiAKIAlpb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKIAorCXRwX29wcyA9IGh3aWYtPnRwX29wczsKKwogCS8qIFdlIG11c3Qgbm90IHJlc2V0IHdpdGggcnVubmluZyBoYW5kbGVycyAqLwogCUJVR19PTihod2dyb3VwLT5oYW5kbGVyICE9IE5VTEwpOwogCkBAIC0xMTA2LDcgKzExODksNyBAQAogCQlwcmVfcmVzZXQoZHJpdmUpOwogCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwogCQl1ZGVsYXkgKDIwKTsKLQkJaHdpZi0+T1VUQlNZTkMoaHdpZiwgV0lOX1NSU1QsIGlvX3BvcnRzLT5jb21tYW5kX2FkZHIpOworCQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBXSU5fU1JTVCk7CiAJCW5kZWxheSg0MDApOwogCQlod2dyb3VwLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CiAJCWh3Z3JvdXAtPnBvbGxpbmcgPSAxOwpAQCAtMTEzNSwxNiArMTIxOCwxNSBAQAogCSAqIGltbWVkaWF0ZSBpbnRlcnJ1cHQgZHVlIHRvIHRoZSBlZGdlIHRyYW5zaXRpb24gaXQgcHJvZHVjZXMuCiAJICogVGhpcyBzaW5nbGUgaW50ZXJydXB0IGdpdmVzIHVzIGEgImZhc3QgcG9sbCIgZm9yIGRyaXZlcyB0aGF0CiAJICogcmVjb3ZlciBmcm9tIHJlc2V0IHZlcnkgcXVpY2tseSwgc2F2aW5nIHVzIHRoZSBmaXJzdCA1MG1zIHdhaXQgdGltZS4KKwkgKgorCSAqIFRPRE86IGFkZCAtPnNvZnRyZXNldCBtZXRob2QgYW5kIHN0b3AgYWJ1c2luZyAtPnNldF9pcnEKIAkgKi8KIAkvKiBzZXQgU1JTVCBhbmQgbklFTiAqLwotCWh3aWYtPk9VVEJTWU5DKGh3aWYsIEFUQV9ERVZDVExfT0JTIHwgNiwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwl0cF9vcHMtPnNldF9pcnEoaHdpZiwgNCk7CiAJLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCiAJdWRlbGF5KDEwKTsKLQlpZiAoZHJpdmUtPnF1aXJrX2xpc3QgPT0gMikKLQkJY3RsID0gQVRBX0RFVkNUTF9PQlM7CQkvKiBjbGVhciBTUlNUIGFuZCBuSUVOICovCi0JZWxzZQotCQljdGwgPSBBVEFfREVWQ1RMX09CUyB8IDI7CS8qIGNsZWFyIFNSU1QsIGxlYXZlIG5JRU4gKi8KLQlod2lmLT5PVVRCU1lOQyhod2lmLCBjdGwsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisJLyogY2xlYXIgU1JTVCwgbGVhdmUgbklFTiAodW5sZXNzIGRldmljZSBpcyBvbiB0aGUgcXVpcmsgbGlzdCkgKi8KKwl0cF9vcHMtPnNldF9pcnEoaHdpZiwgZHJpdmUtPnF1aXJrX2xpc3QgPT0gMik7CiAJLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCiAJdWRlbGF5KDEwKTsKIAlod2dyb3VwLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CkBAIC0xMTg5LDcgKzEyNzEsNyBAQAogCQkgKiBhYm91dCBsb2NraW5nIGlzc3VlcyAoMi41IHdvcmsgPykuCiAJCSAqLwogCQltZGVsYXkoMSk7Ci0JCXN0YXQgPSBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOworCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAkJaWYgKChzdGF0ICYgQlVTWV9TVEFUKSA9PSAwKQogCQkJcmV0dXJuIDA7CiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKaW5kZXggMTNhZjcyZi4uOTdmZWZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwpAQCAtMjY2LDIyICsyNjYsMTEgQEAKIAogCXJhdGUgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHJhdGUpOwogCisJQlVHX09OKHJhdGUgPCBYRkVSX1BJT18wKTsKKwogCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT181KQogCQlyZXR1cm4gaWRlX3NldF9waW9fbW9kZShkcml2ZSwgcmF0ZSk7CiAKLQkvKgotCSAqIFRPRE86IHRyYW5zZmVyIG1vZGVzIDB4MDAtMHgwNyBwYXNzZWQgZnJvbSB0aGUgdXNlci1zcGFjZSBhcmUKLQkgKiBjdXJyZW50bHkgaGFuZGxlZCBoZXJlIHdoaWNoIG5lZWRzIGZpeGluZyAocGxlYXNlIG5vdGUgdGhhdCBzdWNoCi0JICogY2FzZSBjb3VsZCBoYXBwZW4gaWZmIHRoZSB0cmFuc2ZlciBtb2RlIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9uCi0JICogdGhlIGRldmljZSBieSBpZGUtcHJvYy5jOjpzZXRfeGZlcl9yYXRlKCkpLgotCSAqLwotCWlmIChyYXRlIDwgWEZFUl9QSU9fMCkgewotCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9TRVRfRE1BX01PREUpCi0JCQlyZXR1cm4gaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgcmF0ZSk7Ci0JCWVsc2UKLQkJCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCByYXRlKTsKLQl9Ci0KIAlyZXR1cm4gaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgcmF0ZSk7CiB9CiAKQEAgLTMzNiw3ICszMjUsNyBAQAogCWVsc2UKIAkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkEgfCBJREVfVEZMQUdfSU5fREVWSUNFOwogCi0JZHJpdmUtPmh3aWYtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CiAKIAlpZiAobGJhNDggfHwgKHRmLT5kZXZpY2UgJiBBVEFfTEJBKSkKIAkJcHJpbnRrKCIsIExCQXNlY3Q9JWxsdSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcG5wLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG5wLmMKaW5kZXggMDNmMmVmNS4uYmFjOWIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBucC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wbnAuYwpAQCAtMjksOSArMjksMTAgQEAKIAogc3RhdGljIGludCBpZGVwbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKIHsKLQlod19yZWdzX3QgaHc7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBiYXNlLCBjdGw7CisJaW50IHJjOworCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIAogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogZ2VuZXJpYyBQblAgSURFIGludGVyZmFjZVxuIik7CiAKQEAgLTU5LDMxICs2MCwyNSBAQAogCWh3LmlycSA9IHBucF9pcnEoZGV2LCAwKTsKIAlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiAKLQlod2lmID0gaWRlX2ZpbmRfcG9ydCgpOwotCWlmIChod2lmKSB7Ci0JCXU4IGluZGV4ID0gaHdpZi0+aW5kZXg7Ci0JCXU4IGlkeFs0XSA9IHsgaW5kZXgsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKwlyYyA9IGlkZV9ob3N0X2FkZChOVUxMLCBod3MsICZob3N0KTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OwogCi0JCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKKwlwbnBfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAotCQlwbnBfc2V0X2RydmRhdGEoZGV2LCBod2lmKTsKLQotCQlpZGVfZGV2aWNlX2FkZChpZHgsIE5VTEwpOwotCi0JCXJldHVybiAwOwotCX0KLQorCXJldHVybiAwOworb3V0OgogCXJlbGVhc2VfcmVnaW9uKGN0bCwgMSk7CiAJcmVsZWFzZV9yZWdpb24oYmFzZSwgOCk7CiAKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBpZGVwbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IHBucF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBucF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWRlX3VucmVnaXN0ZXIoaHdpZik7CisJaWRlX2hvc3RfcmVtb3ZlKGhvc3QpOwogCiAJcmVsZWFzZV9yZWdpb24ocG5wX3BvcnRfc3RhcnQoZGV2LCAxKSwgMSk7CiAJcmVsZWFzZV9yZWdpb24ocG5wX3BvcnRfc3RhcnQoZGV2LCAwKSwgOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDIzNWViZGIuLjRhYTc2YzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMzksOCArMzksNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0YXRpYyBpZGVfaHdpZl90IGlkZV9od2lmc1tNQVhfSFdJRlNdOyAvKiBtYXN0ZXIgZGF0YSByZXBvc2l0b3J5ICovCi0KIC8qKgogICoJZ2VuZXJpY19pZAkJLQlhZGQgYSBnZW5lcmljIGRyaXZlIGlkCiAgKglAZHJpdmU6CWRyaXZlIHRvIG1ha2UgYW4gSUQgYmxvY2sgZm9yCkBAIC0xMjYsNyArMTI0LDcgQEAKIAogCWlkID0gZHJpdmUtPmlkOwogCS8qIHJlYWQgNTEyIGJ5dGVzIG9mIGlkIGluZm8gKi8KLQlod2lmLT5pbnB1dF9kYXRhKGRyaXZlLCBOVUxMLCBpZCwgU0VDVE9SX1NJWkUpOworCWh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgTlVMTCwgaWQsIFNFQ1RPUl9TSVpFKTsKIAogCWRyaXZlLT5pZF9yZWFkID0gMTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0yNjcsNiArMjY1LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAlpbnQgdXNlX2FsdHN0YXR1cyA9IDAsIHJjOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAl1OCBzID0gMCwgYSA9IDA7CkBAIC0yNzUsOCArMjc0LDggQEAKIAltc2xlZXAoNTApOwogCiAJaWYgKGlvX3BvcnRzLT5jdGxfYWRkcikgewotCQlhID0gaWRlX3JlYWRfYWx0c3RhdHVzKGRyaXZlKTsKLQkJcyA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJCWEgPSB0cF9vcHMtPnJlYWRfYWx0c3RhdHVzKGh3aWYpOworCQlzID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAkJaWYgKChhIF4gcykgJiB+SU5ERVhfU1RBVCkKIAkJCS8qIGFuY2llbnQgU2VhZ2F0ZSBkcml2ZXMsIGJyb2tlbiBpbnRlcmZhY2VzICovCiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogcHJvYmluZyB3aXRoIFNUQVRVUygweCUwMngpICIKQEAgLTI5MCwxMiArMjg5LDE4IEBACiAJLyogc2V0IGZlYXR1cmVzIHJlZ2lzdGVyIGZvciBhdGFwaQogCSAqIGlkZW50aWZ5IGNvbW1hbmQgdG8gYmUgc3VyZSBvZiByZXBseQogCSAqLwotCWlmICgoY21kID09IFdJTl9QSURFTlRJRlkpKQotCQkvKiBkaXNhYmxlIGRtYSAmIG92ZXJsYXAgKi8KLQkJaHdpZi0+T1VUQigwLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAoY21kID09IFdJTl9QSURFTlRJRlkpIHsKKwkJaWRlX3Rhc2tfdCB0YXNrOworCisJCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwkJLyogZGlzYWJsZSBETUEgJiBvdmVybGFwICovCisJCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkU7CisKKwkJdHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7CisJfQogCiAJLyogYXNrIGRyaXZlIGZvciBJRCAqLwotCWh3aWYtPk9VVEJTWU5DKGh3aWYsIGNtZCwgaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKKwl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBjbWQpOwogCiAJdGltZW91dCA9ICgoY21kID09IFdJTl9JREVOVElGWSkgPyBXQUlUX1dPUlNUQ0FTRSA6IFdBSVRfUElERU5USUZZKSAvIDI7CiAJdGltZW91dCArPSBqaWZmaWVzOwpAQCAtMzA2LDEzICszMTEsMTMgQEAKIAkJfQogCQkvKiBnaXZlIGRyaXZlIGEgYnJlYXRoZXIgKi8KIAkJbXNsZWVwKDUwKTsKLQkJcyA9IHVzZV9hbHRzdGF0dXMgPyBpZGVfcmVhZF9hbHRzdGF0dXMoZHJpdmUpCi0JCQkJICA6IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJCXMgPSB1c2VfYWx0c3RhdHVzID8gdHBfb3BzLT5yZWFkX2FsdHN0YXR1cyhod2lmKQorCQkJCSAgOiB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCX0gd2hpbGUgKHMgJiBCVVNZX1NUQVQpOwogCiAJLyogd2FpdCBmb3IgSVJRIGFuZCBEUlFfU1RBVCAqLwogCW1zbGVlcCg1MCk7Ci0JcyA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJcyA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKIAlpZiAoT0tfU1RBVChzLCBEUlFfU1RBVCwgQkFEX1JfU1RBVCkpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMyNCw3ICszMjksNyBAQAogCQkvKiBkcml2ZSByZXNwb25kZWQgd2l0aCBJRCAqLwogCQlyYyA9IDA7CiAJCS8qIGNsZWFyIGRyaXZlIElSUSAqLwotCQkodm9pZClpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCQkodm9pZCl0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfSBlbHNlIHsKIAkJLyogZHJpdmUgcmVmdXNlZCBJRCAqLwpAQCAtMzQ2LDYgKzM1MSw3IEBACiBzdGF0aWMgaW50IHRyeV90b19pZGVudGlmeSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJaW50IHJldHZhbDsKIAlpbnQgYXV0b3Byb2JlID0gMDsKIAl1bnNpZ25lZCBsb25nIGNvb2tpZSA9IDA7CkBAIC0zNjEsNyArMzY3LDcgQEAKIAkJCWF1dG9wcm9iZSA9IDE7CiAJCQljb29raWUgPSBwcm9iZV9pcnFfb24oKTsKIAkJfQotCQlpZGVfc2V0X2lycShkcml2ZSwgYXV0b3Byb2JlKTsKKwkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIGF1dG9wcm9iZSk7CiAJfQogCiAJcmV0dmFsID0gYWN0dWFsX3RyeV90b19pZGVudGlmeShkcml2ZSwgY21kKTsKQEAgLTM2OSw5ICszNzUsOSBAQAogCWlmIChhdXRvcHJvYmUpIHsKIAkJaW50IGlycTsKIAotCQlpZGVfc2V0X2lycShkcml2ZSwgMCk7CisJCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKIAkJLyogY2xlYXIgZHJpdmUgSVJRICovCi0JCSh2b2lkKWlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJCSh2b2lkKXRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAJCXVkZWxheSg1KTsKIAkJaXJxID0gcHJvYmVfaXJxX29mZihjb29raWUpOwogCQlpZiAoIWh3aWYtPmlycSkgewpAQCAtMzk2LDcgKzQwMiw3IEBACiAKIAlkbyB7CiAJCW1zbGVlcCg1MCk7Ci0JCXN0YXQgPSBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOworCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAkJaWYgKChzdGF0ICYgQlVTWV9TVEFUKSA9PSAwKQogCQkJcmV0dXJuIDA7CiAJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwpAQCAtNDA0LDYgKzQxMCwxOCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdTggaWRlX3JlYWRfZGV2aWNlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfdGFza190IHRhc2s7CisKKwltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9ERVZJQ0U7CisKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CisKKwlyZXR1cm4gdGFzay50Zi5kZXZpY2U7Cit9CisKIC8qKgogICoJZG9fcHJvYmUJCS0JcHJvYmUgYW4gSURFIGRldmljZQogICoJQGRyaXZlOiBkcml2ZSB0byBwcm9iZQpAQCAtNDI4LDcgKzQ0Niw3IEBACiBzdGF0aWMgaW50IGRvX3Byb2JlIChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAlpbnQgcmM7CiAJdTggc3RhdDsKIApAQCAtNDQ5LDggKzQ2Nyw4IEBACiAJbXNsZWVwKDUwKTsKIAlTRUxFQ1RfRFJJVkUoZHJpdmUpOwogCW1zbGVlcCg1MCk7Ci0JaWYgKGh3aWYtPklOQihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpICE9IGRyaXZlLT5zZWxlY3QuYWxsICYmCi0JICAgICFkcml2ZS0+cHJlc2VudCkgeworCisJaWYgKGlkZV9yZWFkX2RldmljZShkcml2ZSkgIT0gZHJpdmUtPnNlbGVjdC5hbGwgJiYgIWRyaXZlLT5wcmVzZW50KSB7CiAJCWlmIChkcml2ZS0+c2VsZWN0LmIudW5pdCAhPSAwKSB7CiAJCQkvKiBleGl0IHdpdGggZHJpdmUwIHNlbGVjdGVkICovCiAJCQlTRUxFQ1RfRFJJVkUoJmh3aWYtPmRyaXZlc1swXSk7CkBAIC00NjEsNyArNDc5LDcgQEAKIAkJcmV0dXJuIDM7CiAJfQogCi0Jc3RhdCA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKIAlpZiAoT0tfU1RBVChzdGF0LCBSRUFEWV9TVEFULCBCVVNZX1NUQVQpIHx8CiAJICAgIGRyaXZlLT5wcmVzZW50IHx8IGNtZCA9PSBXSU5fUElERU5USUZZKSB7CkBAIC00NzEsNyArNDg5LDcgQEAKIAkJCXJjID0gdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLGNtZCk7CiAJCX0KIAotCQlzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKKwkJc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKIAkJaWYgKHN0YXQgPT0gKEJVU1lfU1RBVCB8IFJFQURZX1NUQVQpKQogCQkJcmV0dXJuIDQ7CkBAIC00ODIsMTMgKzUwMCwxMyBAQAogCQkJbXNsZWVwKDUwKTsKIAkJCVNFTEVDVF9EUklWRShkcml2ZSk7CiAJCQltc2xlZXAoNTApOwotCQkJaHdpZi0+T1VUQlNZTkMoaHdpZiwgV0lOX1NSU1QsIGlvX3BvcnRzLT5jb21tYW5kX2FkZHIpOworCQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgV0lOX1NSU1QpOwogCQkJKHZvaWQpaWRlX2J1c3lfc2xlZXAoaHdpZik7CiAJCQlyYyA9IHRyeV90b19pZGVudGlmeShkcml2ZSwgY21kKTsKIAkJfQogCiAJCS8qIGVuc3VyZSBkcml2ZSBJUlEgaXMgY2xlYXIgKi8KLQkJc3RhdCA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJCWlmIChyYyA9PSAxKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gcmVzcG9uc2UgKHN0YXR1cyA9IDB4JTAyeClcbiIsCkBAIC01MDIsNyArNTIwLDcgQEAKIAkJU0VMRUNUX0RSSVZFKCZod2lmLT5kcml2ZXNbMF0pOwogCQltc2xlZXAoNTApOwogCQkvKiBlbnN1cmUgZHJpdmUgaXJxIGlzIGNsZWFyICovCi0JCSh2b2lkKWlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJCSh2b2lkKXRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAJfQogCXJldHVybiByYzsKIH0KQEAgLTUxMywxMiArNTMxLDEzIEBACiBzdGF0aWMgdm9pZCBlbmFibGVfbmVzdCAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCXU4IHN0YXQ7CiAKIAlwcmludGsoIiVzOiBlbmFibGluZyAlcyAtLSAiLCBod2lmLT5uYW1lLCBkcml2ZS0+aWQtPm1vZGVsKTsKIAlTRUxFQ1RfRFJJVkUoZHJpdmUpOwogCW1zbGVlcCg1MCk7Ci0JaHdpZi0+T1VUQlNZTkMoaHdpZiwgRVhBQllURV9FTkFCTEVfTkVTVCwgaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKKwl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBFWEFCWVRFX0VOQUJMRV9ORVNUKTsKIAogCWlmIChpZGVfYnVzeV9zbGVlcChod2lmKSkgewogCQlwcmludGsoS0VSTl9DT05UICJmYWlsZWQgKHRpbWVvdXQpXG4iKTsKQEAgLTUyNyw3ICs1NDYsNyBAQAogCiAJbXNsZWVwKDUwKTsKIAotCXN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKCFPS19TVEFUKHN0YXQsIDAsIEJBRF9TVEFUKSkKIAkJcHJpbnRrKEtFUk5fQ09OVCAiZmFpbGVkIChzdGF0dXMgPSAweCUwMngpXG4iLCBzdGF0KTsKQEAgLTYxOSw3ICs2MzgsNyBAQAogCXJldHVybiBkcml2ZS0+cHJlc2VudDsKIH0KIAotc3RhdGljIHZvaWQgaHdpZl9yZWxlYXNlX2RldiAoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgaHdpZl9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGNvbnRhaW5lcl9vZihkZXYsIGlkZV9od2lmX3QsIGdlbmRldik7CiAKQEAgLTcwOSw3ICs3MjgsNyBAQAogCQkvKiBJZ25vcmUgZGlza3MgdGhhdCB3ZSB3aWxsIG5vdCBwcm9iZSBmb3IgbGF0ZXIuICovCiAJCWlmICghZHJpdmUtPm5vcHJvYmUgfHwgZHJpdmUtPnByZXNlbnQpIHsKIAkJCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JCQlpZGVfc2V0X2lycShkcml2ZSwgMSk7CisJCQlod2lmLT50cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7CiAJCQltZGVsYXkoMik7CiAJCQlyYyA9IGlkZV93YWl0X25vdF9idXN5KGh3aWYsIDM1MDAwKTsKIAkJCWlmIChyYykKQEAgLTk3MSw2ICs5OTAsNDUgQEAKIAltdXRleF91bmxvY2soJmlkZV9jZmdfbXR4KTsKIH0KIAorc3RhdGljIGlkZV9od2lmX3QgKmlkZV9wb3J0c1tNQVhfSFdJRlNdOworCit2b2lkIGlkZV9yZW1vdmVfcG9ydF9mcm9tX2h3Z3JvdXAoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlpZGVfaHdncm91cF90ICpod2dyb3VwID0gaHdpZi0+aHdncm91cDsKKworCWlkZV9wb3J0c1tod2lmLT5pbmRleF0gPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOworCS8qCisJICogUmVtb3ZlIHVzIGZyb20gdGhlIGh3Z3JvdXAsIGFuZCBmcmVlCisJICogdGhlIGh3Z3JvdXAgaWYgd2Ugd2VyZSB0aGUgb25seSBtZW1iZXIKKwkgKi8KKwlpZiAoaHdpZi0+bmV4dCA9PSBod2lmKSB7CisJCUJVR19PTihod2dyb3VwLT5od2lmICE9IGh3aWYpOworCQlrZnJlZShod2dyb3VwKTsKKwl9IGVsc2UgeworCQkvKiBUaGVyZSBpcyBhbm90aGVyIGludGVyZmFjZSBpbiBod2dyb3VwLgorCQkgKiBVbmxpbmsgdXMsIGFuZCBzZXQgaHdncm91cC0+ZHJpdmUgYW5kIC0+aHdpZiB0bworCQkgKiBzb21ldGhpbmcgc2FuZS4KKwkJICovCisJCWlkZV9od2lmX3QgKmcgPSBod2dyb3VwLT5od2lmOworCisJCXdoaWxlIChnLT5uZXh0ICE9IGh3aWYpCisJCQlnID0gZy0+bmV4dDsKKwkJZy0+bmV4dCA9IGh3aWYtPm5leHQ7CisJCWlmIChod2dyb3VwLT5od2lmID09IGh3aWYpIHsKKwkJCS8qIENob3NlIGEgcmFuZG9tIGh3aWYgZm9yIGh3Z3JvdXAtPmh3aWYuCisJCQkgKiBJdCdzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSBhcmUgbm8gZHJpdmVzCisJCQkgKiBsZWZ0IGluIHRoZSBod2dyb3VwLgorCQkJICovCisJCQlCVUdfT04oaHdncm91cC0+ZHJpdmUgIT0gTlVMTCk7CisJCQlod2dyb3VwLT5od2lmID0gZzsKKwkJfQorCQlCVUdfT04oaHdncm91cC0+aHdpZiA9PSBod2lmKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7Cit9CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgc2V0cyB1cCB0aGUgaXJxIGZvciBhbiBpZGUgaW50ZXJmYWNlLCBhbmQgY3JlYXRlcyBhIG5ldwogICogaHdncm91cCBmb3IgdGhlIGlycS9od2lmIGlmIG5vbmUgd2FzIHByZXZpb3VzbHkgYXNzaWduZWQuCkBAIC05OTgsOCArMTA1Niw5IEBACiAJICogR3JvdXAgdXAgd2l0aCBhbnkgb3RoZXIgaHdpZnMgdGhhdCBzaGFyZSBvdXIgaXJxKHMpLgogCSAqLwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9IV0lGUzsgaW5kZXgrKykgewotCQlpZGVfaHdpZl90ICpoID0gJmlkZV9od2lmc1tpbmRleF07Ci0JCWlmIChoLT5od2dyb3VwKSB7ICAvKiBzY2FuIG9ubHkgaW5pdGlhbGl6ZWQgaHdpZidzICovCisJCWlkZV9od2lmX3QgKmggPSBpZGVfcG9ydHNbaW5kZXhdOworCisJCWlmIChoICYmIGgtPmh3Z3JvdXApIHsgIC8qIHNjYW4gb25seSBpbml0aWFsaXplZCBwb3J0cyAqLwogCQkJaWYgKGh3aWYtPmlycSA9PSBoLT5pcnEpIHsKIAkJCQlod2lmLT5zaGFyaW5nX2lycSA9IGgtPnNoYXJpbmdfaXJxID0gMTsKIAkJCQlpZiAoaHdpZi0+Y2hpcHNldCAhPSBpZGVfcGNpIHx8CkBAIC0xMDUzLDYgKzExMTIsOCBAQAogCQlod2dyb3VwLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGh3Z3JvdXA7CiAJfQogCisJaWRlX3BvcnRzW2h3aWYtPmluZGV4XSA9IGh3aWY7CisKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBpcnEsIGlmIG5vdCBhbHJlYWR5IG9idGFpbmVkIGZvciBhbm90aGVyIGh3aWYKIAkgKi8KQEAgLTEwNjYsOCArMTEyNyw3IEBACiAJCQlzYSA9IElSUUZfU0hBUkVEOwogCiAJCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIpCi0JCQkvKiBjbGVhciBuSUVOICovCi0JCQlod2lmLT5PVVRCU1lOQyhod2lmLCBBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwkJCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKIAogCQlpZiAocmVxdWVzdF9pcnEoaHdpZi0+aXJxLCZpZGVfaW50cixzYSxod2lmLT5uYW1lLGh3Z3JvdXApKQogCSAgICAgICAJCWdvdG8gb3V0X3VubGluazsKQEAgLTEzNDUsNiArMTQwNSw5IEBACiAJaHdpZi0+aG9zdF9mbGFncyB8PSBkLT5ob3N0X2ZsYWdzOwogCWh3aWYtPnBpb19tYXNrID0gZC0+cGlvX21hc2s7CiAKKwlpZiAoZC0+dHBfb3BzKQorCQlod2lmLT50cF9vcHMgPSBkLT50cF9vcHM7CisKIAkvKiAtPnNldF9waW9fbW9kZSBmb3IgRFRDMjI3OCBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBwb3J0IDAgKi8KIAlpZiAoaHdpZi0+Y2hpcHNldCAhPSBpZGVfZHRjMjI3OCB8fCBod2lmLT5jaGFubmVsID09IDApCiAJCWh3aWYtPnBvcnRfb3BzID0gZC0+cG9ydF9vcHM7CkBAIC0xMzYzLDYgKzE0MjYsNyBAQAogCiAJCWlmIChyYyA8IDApIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBETUEgZGlzYWJsZWRcbiIsIGh3aWYtPm5hbWUpOworCQkJaHdpZi0+ZG1hX2Jhc2UgPSAwOwogCQkJaHdpZi0+c3dkbWFfbWFzayA9IDA7CiAJCQlod2lmLT5td2RtYV9tYXNrID0gMDsKIAkJCWh3aWYtPnVsdHJhX21hc2sgPSAwOwpAQCAtMTQ0NiwxOCArMTUxMCwyMCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBpZGVfaW5kZXhlczsKKwogLyoqCi0gKglpZGVfZmluZF9wb3J0X3Nsb3QJLQlmaW5kIGZyZWUgaWRlX2h3aWZzW10gc2xvdAorICoJaWRlX2ZpbmRfcG9ydF9zbG90CS0JZmluZCBmcmVlIHBvcnQgc2xvdAogICoJQGQ6IElERSBwb3J0IGluZm8KICAqCi0gKglSZXR1cm4gdGhlIG5ldyBod2lmLiAgSWYgd2UgYXJlIG91dCBvZiBmcmVlIHNsb3RzIHJldHVybiBOVUxMLgorICoJUmV0dXJuIHRoZSBuZXcgcG9ydCBzbG90IGluZGV4IG9yIC1FTk9FTlQgaWYgd2UgYXJlIG91dCBvZiBmcmVlIHNsb3RzLgogICovCiAKLWlkZV9od2lmX3QgKmlkZV9maW5kX3BvcnRfc2xvdChjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKK3N0YXRpYyBpbnQgaWRlX2ZpbmRfcG9ydF9zbG90KGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQogewotCWlkZV9od2lmX3QgKmh3aWY7Ci0JaW50IGk7CisJaW50IGlkeCA9IC1FTk9FTlQ7CiAJdTggYm9vdGFibGUgPSAoZCAmJiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT05fQk9PVEFCTEUpKSA/IDAgOiAxOworCXU4IGkgPSAoZCAmJiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19RRF8yTkRfUE9SVCkpID8gMSA6IDA7OwogCiAJLyoKIAkgKiBDbGFpbSBhbiB1bmFzc2lnbmVkIHNsb3QuCkBAIC0xNDY5LDUxICsxNTM1LDEwNiBAQAogCSAqIFVubGVzcyB0aGVyZSBpcyBhIGJvb3RhYmxlIGNhcmQgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIHN0YW5kYXJkCiAJICogcG9ydHMgMHgxZjAvMHgxNzAgKHRoZSBpZGUwL2lkZTEgZGVmYXVsdHMpLgogCSAqLwotCWlmIChib290YWJsZSkgewotCQlpID0gKGQgJiYgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUURfMk5EX1BPUlQpKSA/IDEgOiAwOwotCi0JCWZvciAoOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKLQkJCWh3aWYgPSAmaWRlX2h3aWZzW2ldOwotCQkJaWYgKGh3aWYtPmNoaXBzZXQgPT0gaWRlX3Vua25vd24pCi0JCQkJZ290byBvdXRfZm91bmQ7Ci0JCX0KKwltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7CisJaWYgKE1BWF9IV0lGUyA9PSAxKSB7CisJCWlmIChpZGVfaW5kZXhlcyA9PSAwICYmIGkgPT0gMCkKKwkJCWlkeCA9IDE7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMjsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7Ci0JCQlod2lmID0gJmlkZV9od2lmc1tpXTsKLQkJCWlmIChod2lmLT5jaGlwc2V0ID09IGlkZV91bmtub3duKQotCQkJCWdvdG8gb3V0X2ZvdW5kOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCAyICYmIGkgPCBNQVhfSFdJRlM7IGkrKykgewotCQkJaHdpZiA9ICZpZGVfaHdpZnNbaV07Ci0JCQlpZiAoaHdpZi0+Y2hpcHNldCA9PSBpZGVfdW5rbm93bikKLQkJCQlnb3RvIG91dF9mb3VuZDsKKwkJaWYgKGJvb3RhYmxlKSB7CisJCQlpZiAoKGlkZV9pbmRleGVzIHwgaSkgIT0gKDEgPDwgTUFYX0hXSUZTKSAtIDEpCisJCQkJaWR4ID0gZmZ6KGlkZV9pbmRleGVzIHwgaSk7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlkZV9pbmRleGVzIHwgMykgIT0gKDEgPDwgTUFYX0hXSUZTKSAtIDEpCisJCQkJaWR4ID0gZmZ6KGlkZV9pbmRleGVzIHwgMyk7CisJCQllbHNlIGlmICgoaWRlX2luZGV4ZXMgJiAzKSAhPSAzKQorCQkJCWlkeCA9IGZmeihpZGVfaW5kZXhlcyk7CiAJCX0KIAl9CisJaWYgKGlkeCA+PSAwKQorCQlpZGVfaW5kZXhlcyB8PSAoMSA8PCBpZHgpOworCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlczogbm8gZnJlZSBzbG90IGZvciBpbnRlcmZhY2VcbiIsCi0JCQlkID8gZC0+bmFtZSA6ICJpZGUiKTsKLQotCXJldHVybiBOVUxMOwotCi1vdXRfZm91bmQ6Ci0JaWRlX2luaXRfcG9ydF9kYXRhKGh3aWYsIGkpOwotCXJldHVybiBod2lmOworCXJldHVybiBpZHg7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZmluZF9wb3J0X3Nsb3QpOwogCi1pbnQgaWRlX2RldmljZV9hZGRfYWxsKHU4ICppZHgsIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQorc3RhdGljIHZvaWQgaWRlX2ZyZWVfcG9ydF9zbG90KGludCBpZHgpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiwgKm1hdGUgPSBOVUxMOwotCWludCBpLCByYyA9IDA7CisJbXV0ZXhfbG9jaygmaWRlX2NmZ19tdHgpOworCWlkZV9pbmRleGVzICY9IH4oMSA8PCBpZHgpOworCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOworfQorCitzdHJ1Y3QgaWRlX2hvc3QgKmlkZV9ob3N0X2FsbG9jX2FsbChjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKKwkJCQkgICAgaHdfcmVnc190ICoqaHdzKQoreworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKKwlpbnQgaTsKKworCWhvc3QgPSBremFsbG9jKHNpemVvZigqaG9zdCksIEdGUF9LRVJORUwpOworCWlmIChob3N0ID09IE5VTEwpCisJCXJldHVybiBOVUxMOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7Ci0JCWlmIChpZHhbaV0gPT0gMHhmZikgeworCQlpZGVfaHdpZl90ICpod2lmOworCQlpbnQgaWR4OworCisJCWlmIChod3NbaV0gPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWh3aWYgPSBremFsbG9jKHNpemVvZigqaHdpZiksIEdGUF9LRVJORUwpOworCQlpZiAoaHdpZiA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWR4ID0gaWRlX2ZpbmRfcG9ydF9zbG90KGQpOworCQlpZiAoaWR4IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gZnJlZSBzbG90IGZvciBpbnRlcmZhY2VcbiIsCisJCQkJCWQgPyBkLT5uYW1lIDogImlkZSIpOworCQkJa2ZyZWUoaHdpZik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlkZV9pbml0X3BvcnRfZGF0YShod2lmLCBpZHgpOworCisJCWhvc3QtPnBvcnRzW2ldID0gaHdpZjsKKwkJaG9zdC0+bl9wb3J0cysrOworCX0KKworCWlmIChob3N0LT5uX3BvcnRzID09IDApIHsKKwkJa2ZyZWUoaG9zdCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBob3N0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2hvc3RfYWxsb2NfYWxsKTsKKworc3RydWN0IGlkZV9ob3N0ICppZGVfaG9zdF9hbGxvYyhjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwgaHdfcmVnc190ICoqaHdzKQoreworCWh3X3JlZ3NfdCAqaHdzX2FsbFtNQVhfSFdJRlNdOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKQorCQlod3NfYWxsW2ldID0gKGkgPCA0KSA/IGh3c1tpXSA6IE5VTEw7CisKKwlyZXR1cm4gaWRlX2hvc3RfYWxsb2NfYWxsKGQsIGh3c19hbGwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2hvc3RfYWxsb2MpOworCitpbnQgaWRlX2hvc3RfcmVnaXN0ZXIoc3RydWN0IGlkZV9ob3N0ICpob3N0LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKKwkJICAgICAgaHdfcmVnc190ICoqaHdzKQoreworCWlkZV9od2lmX3QgKmh3aWYsICptYXRlID0gTlVMTDsKKwlpbnQgaSwgaiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKKwkJaHdpZiA9IGhvc3QtPnBvcnRzW2ldOworCisJCWlmIChod2lmID09IE5VTEwpIHsKIAkJCW1hdGUgPSBOVUxMOwogCQkJY29udGludWU7CiAJCX0KIAotCQlod2lmID0gJmlkZV9od2lmc1tpZHhbaV1dOwotCisJCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgaHdzW2ldKTsKIAkJaWRlX3BvcnRfYXBwbHlfcGFyYW1zKGh3aWYpOwogCiAJCWlmIChkID09IE5VTEwpIHsKQEAgLTE1MzQsMTAgKzE2NTUsMTAgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKLQkJaWYgKGlkeFtpXSA9PSAweGZmKQotCQkJY29udGludWU7CisJCWh3aWYgPSBob3N0LT5wb3J0c1tpXTsKIAotCQlod2lmID0gJmlkZV9od2lmc1tpZHhbaV1dOworCQlpZiAoaHdpZiA9PSBOVUxMKQorCQkJY29udGludWU7CiAKIAkJaWYgKGlkZV9wcm9iZV9wb3J0KGh3aWYpID09IDApCiAJCQlod2lmLT5wcmVzZW50ID0gMTsKQEAgLTE1NTEsMTkgKzE2NzIsMjAgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKLQkJaWYgKGlkeFtpXSA9PSAweGZmKQotCQkJY29udGludWU7CisJCWh3aWYgPSBob3N0LT5wb3J0c1tpXTsKIAotCQlod2lmID0gJmlkZV9od2lmc1tpZHhbaV1dOworCQlpZiAoaHdpZiA9PSBOVUxMKQorCQkJY29udGludWU7CiAKIAkJaWYgKGh3aWZfaW5pdChod2lmKSA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgSURFICIKIAkJCQkJICJpbnRlcmZhY2VcbiIsIGh3aWYtPm5hbWUpOwogCQkJaHdpZi0+cHJlc2VudCA9IDA7Ci0JCQlyYyA9IC0xOwogCQkJY29udGludWU7CiAJCX0KIAorCQlqKys7CisKIAkJaWYgKGh3aWYtPnByZXNlbnQpCiAJCQlpZGVfcG9ydF9zZXR1cF9kZXZpY2VzKGh3aWYpOwogCkBAIC0xNTc0LDEwICsxNjk2LDEwIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7Ci0JCWlmIChpZHhbaV0gPT0gMHhmZikKLQkJCWNvbnRpbnVlOworCQlod2lmID0gaG9zdC0+cG9ydHNbaV07CiAKLQkJaHdpZiA9ICZpZGVfaHdpZnNbaWR4W2ldXTsKKwkJaWYgKGh3aWYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwogCiAJCWlmIChod2lmLT5jaGlwc2V0ID09IGlkZV91bmtub3duKQogCQkJaHdpZi0+Y2hpcHNldCA9IGlkZV9nZW5lcmljOwpAQCAtMTU4NywxMCArMTcwOSwxMCBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgewotCQlpZiAoaWR4W2ldID09IDB4ZmYpCi0JCQljb250aW51ZTsKKwkJaHdpZiA9IGhvc3QtPnBvcnRzW2ldOwogCi0JCWh3aWYgPSAmaWRlX2h3aWZzW2lkeFtpXV07CisJCWlmIChod2lmID09IE5VTEwpCisJCQljb250aW51ZTsKIAogCQlpZGVfc3lzZnNfcmVnaXN0ZXJfcG9ydChod2lmKTsKIAkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKQEAgLTE1OTksMjEgKzE3MjEsNjQgQEAKIAkJCWlkZV9wcm9jX3BvcnRfcmVnaXN0ZXJfZGV2aWNlcyhod2lmKTsKIAl9CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIGogPyAwIDogLTE7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZGV2aWNlX2FkZF9hbGwpOworRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2hvc3RfcmVnaXN0ZXIpOwogCi1pbnQgaWRlX2RldmljZV9hZGQodTggaWR4WzRdLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKK2ludCBpZGVfaG9zdF9hZGQoY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsIGh3X3JlZ3NfdCAqKmh3cywKKwkJIHN0cnVjdCBpZGVfaG9zdCAqKmhvc3RwKQogewotCXU4IGlkeF9hbGxbTUFYX0hXSUZTXTsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CisJaW50IHJjOworCisJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKGQsIGh3cyk7CisJaWYgKGhvc3QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYyA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsIGQsIGh3cyk7CisJaWYgKHJjKSB7CisJCWlkZV9ob3N0X2ZyZWUoaG9zdCk7CisJCXJldHVybiByYzsKKwl9CisKKwlpZiAoaG9zdHApCisJCSpob3N0cCA9IGhvc3Q7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9ob3N0X2FkZCk7CisKK3ZvaWQgaWRlX2hvc3RfZnJlZShzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QpCit7CisJaWRlX2h3aWZfdCAqaHdpZjsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykKLQkJaWR4X2FsbFtpXSA9IChpIDwgNCkgPyBpZHhbaV0gOiAweGZmOworCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgeworCQlod2lmID0gaG9zdC0+cG9ydHNbaV07CiAKLQlyZXR1cm4gaWRlX2RldmljZV9hZGRfYWxsKGlkeF9hbGwsIGQpOworCQlpZiAoaHdpZiA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWRlX2ZyZWVfcG9ydF9zbG90KGh3aWYtPmluZGV4KTsKKwkJa2ZyZWUoaHdpZik7CisJfQorCisJa2ZyZWUoaG9zdCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZGV2aWNlX2FkZCk7CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfaG9zdF9mcmVlKTsKKwordm9pZCBpZGVfaG9zdF9yZW1vdmUoc3RydWN0IGlkZV9ob3N0ICpob3N0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CisJCWlmIChob3N0LT5wb3J0c1tpXSkKKwkJCWlkZV91bnJlZ2lzdGVyKGhvc3QtPnBvcnRzW2ldKTsKKwl9CisKKwlpZGVfaG9zdF9mcmVlKGhvc3QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2hvc3RfcmVtb3ZlKTsKIAogdm9pZCBpZGVfcG9ydF9zY2FuKGlkZV9od2lmX3QgKmh3aWYpCiB7CkBAIC0xNjM0LDExICsxNzk5LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcG9ydF9zY2FuKTsKIAotc3RhdGljIHZvaWQgaWRlX2xlZ2FjeV9pbml0X29uZSh1OCAqaWR4LCBod19yZWdzX3QgKmh3LCB1OCBwb3J0X25vLAotCQkJCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkLAorc3RhdGljIHZvaWQgaWRlX2xlZ2FjeV9pbml0X29uZShod19yZWdzX3QgKipod3MsIGh3X3JlZ3NfdCAqaHcsCisJCQkJdTggcG9ydF9ubywgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCiAJCQkJdW5zaWduZWQgbG9uZyBjb25maWcpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKIAl1bnNpZ25lZCBsb25nIGJhc2UsIGN0bDsKIAlpbnQgaXJxOwogCkBAIC0xNjY4LDMzICsxODMyLDI1IEBACiAJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBiYXNlLCBjdGwpOwogCWh3LT5pcnEgPSBpcnE7CiAJaHctPmNoaXBzZXQgPSBkLT5jaGlwc2V0OworCWh3LT5jb25maWcgPSBjb25maWc7CiAKLQlod2lmID0gaWRlX2ZpbmRfcG9ydF9zbG90KGQpOwotCWlmIChod2lmKSB7Ci0JCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgaHcpOwotCQlpZiAoY29uZmlnKQotCQkJaHdpZi0+Y29uZmlnX2RhdGEgPSBjb25maWc7Ci0JCWlkeFtwb3J0X25vXSA9IGh3aWYtPmluZGV4OwotCX0KKwlod3NbcG9ydF9ub10gPSBodzsKIH0KIAogaW50IGlkZV9sZWdhY3lfZGV2aWNlX2FkZChjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwgdW5zaWduZWQgbG9uZyBjb25maWcpCiB7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0JaHdfcmVnc190IGh3WzJdOworCWh3X3JlZ3NfdCBod1syXSwgKmh3c1tdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAogCWlmICgoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19RRF8yTkRfUE9SVCkgPT0gMCkKLQkJaWRlX2xlZ2FjeV9pbml0X29uZShpZHgsICZod1swXSwgMCwgZCwgY29uZmlnKTsKLQlpZGVfbGVnYWN5X2luaXRfb25lKGlkeCwgJmh3WzFdLCAxLCBkLCBjb25maWcpOworCQlpZGVfbGVnYWN5X2luaXRfb25lKGh3cywgJmh3WzBdLCAwLCBkLCBjb25maWcpOworCWlkZV9sZWdhY3lfaW5pdF9vbmUoaHdzLCAmaHdbMV0sIDEsIGQsIGNvbmZpZyk7CiAKLQlpZiAoaWR4WzBdID09IDB4ZmYgJiYgaWR4WzFdID09IDB4ZmYgJiYKKwlpZiAoaHdzWzBdID09IE5VTEwgJiYgaHdzWzFdID09IE5VTEwgJiYKIAkgICAgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0lOR0xFKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlpZGVfZGV2aWNlX2FkZChpZHgsIGQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlkZV9ob3N0X2FkZChkLCBod3MsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2xlZ2FjeV9kZXZpY2VfYWRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCmluZGV4IDhhZjg4YmYuLjE1MWM5MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJaWRlX3Rhc2tfdCB0YXNrOwogCWludCBlcnI7CiAKLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiA3MCkKKwlpZiAoYXJnIDwgWEZFUl9QSU9fMCB8fCBhcmcgPiBYRkVSX1VETUFfNikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CkBAIC0zNTcsNyArMzU3LDcgQEAKIAogCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CiAKLQlpZiAoIWVyciAmJiBhcmcpIHsKKwlpZiAoIWVycikgewogCQlpZGVfc2V0X3hmZXJfcmF0ZShkcml2ZSwgKHU4KSBhcmcpOwogCQlpZGVfZHJpdmVpZF91cGRhdGUoZHJpdmUpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IGI3MTFhYjkuLjY5NjJjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMTk1LDIzICsxOTUsNiBAQAogI2RlZmluZSBJREVUQVBFX0JMT0NLX0RFU0NSSVBUT1IJMAogI2RlZmluZSBJREVUQVBFX0NBUEFCSUxJVElFU19QQUdFCTB4MmEKIAotLyogVGFwZSBmbGFnIGJpdHMgdmFsdWVzLiAqLwotZW51bSB7Ci0JSURFVEFQRV9GTEFHX0lHTk9SRV9EU0MJCT0gKDEgPDwgMCksCi0JLyogMCBXaGVuIHRoZSB0YXBlIHBvc2l0aW9uIGlzIHVua25vd24gKi8KLQlJREVUQVBFX0ZMQUdfQUREUkVTU19WQUxJRAk9ICgxIDw8CTEpLAotCS8qIERldmljZSBhbHJlYWR5IG9wZW5lZCAqLwotCUlERVRBUEVfRkxBR19CVVNZCQk9ICgxIDw8IDIpLAotCS8qIEF0dGVtcHQgdG8gYXV0by1kZXRlY3QgdGhlIGN1cnJlbnQgdXNlciBibG9jayBzaXplICovCi0JSURFVEFQRV9GTEFHX0RFVEVDVF9CUwkJPSAoMSA8PCAzKSwKLQkvKiBDdXJyZW50bHkgb24gYSBmaWxlbWFyayAqLwotCUlERVRBUEVfRkxBR19GSUxFTUFSSwkJPSAoMSA8PCA0KSwKLQkvKiBEUlEgaW50ZXJydXB0IGRldmljZSAqLwotCUlERVRBUEVfRkxBR19EUlFfSU5URVJSVVBUCT0gKDEgPDwgNSksCi0JLyogMCA9IG5vIHRhcGUgaXMgbG9hZGVkLCBzbyB3ZSBkb24ndCByZXdpbmQgYWZ0ZXIgZWplY3RpbmcgKi8KLQlJREVUQVBFX0ZMQUdfTUVESVVNX1BSRVNFTlQJPSAoMSA8PCA2KSwKLX07Ci0KIC8qCiAgKiBNb3N0IG9mIG91ciBnbG9iYWwgZGF0YSB3aGljaCB3ZSBuZWVkIHRvIHNhdmUgZXZlbiBhcyB3ZSBsZWF2ZSB0aGUgZHJpdmVyIGR1ZQogICogdG8gYW4gaW50ZXJydXB0IG9yIGEgdGltZXIgZXZlbnQgaXMgc3RvcmVkIGluIHRoZSBzdHJ1Y3QgZGVmaW5lZCBiZWxvdy4KQEAgLTMxMiw4ICsyOTUsNiBAQAogCS8qIFdhc3RlZCBzcGFjZSBpbiBlYWNoIHN0YWdlICovCiAJaW50IGV4Y2Vzc19iaF9zaXplOwogCi0JLyogU3RhdHVzL0FjdGlvbiBmbGFnczogbG9uZyBmb3Igc2V0X2JpdCAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLyogcHJvdGVjdHMgdGhlIGlkZS10YXBlIHF1ZXVlICovCiAJc3BpbmxvY2tfdCBsb2NrOwogCkBAIC0zOTgsNyArMzc5LDcgQEAKIAkJY291bnQgPSBtaW4oCiAJCQkodW5zaWduZWQgaW50KShiaC0+Yl9zaXplIC0gYXRvbWljX3JlYWQoJmJoLT5iX2NvdW50KSksCiAJCQliY291bnQpOwotCQlkcml2ZS0+aHdpZi0+aW5wdXRfZGF0YShkcml2ZSwgTlVMTCwgYmgtPmJfZGF0YSArCisJCWRyaXZlLT5od2lmLT50cF9vcHMtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsIGJoLT5iX2RhdGEgKwogCQkJCQlhdG9taWNfcmVhZCgmYmgtPmJfY291bnQpLCBjb3VudCk7CiAJCWJjb3VudCAtPSBjb3VudDsKIAkJYXRvbWljX2FkZChjb3VudCwgJmJoLT5iX2NvdW50KTsKQEAgLTQyNCw3ICs0MDUsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWNvdW50ID0gbWluKCh1bnNpZ25lZCBpbnQpcGMtPmJfY291bnQsICh1bnNpZ25lZCBpbnQpYmNvdW50KTsKLQkJZHJpdmUtPmh3aWYtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBwYy0+Yl9kYXRhLCBjb3VudCk7CisJCWRyaXZlLT5od2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBwYy0+Yl9kYXRhLCBjb3VudCk7CiAJCWJjb3VudCAtPSBjb3VudDsKIAkJcGMtPmJfZGF0YSArPSBjb3VudDsKIAkJcGMtPmJfY291bnQgLT0gY291bnQ7CkBAIC01ODUsNyArNTY2LDYgQEAKIAkJYmggPSBiaC0+Yl9yZXFuZXh0OwogCQlrZnJlZShwcmV2X2JoKTsKIAl9Ci0Ja2ZyZWUodGFwZS0+bWVyZ2VfYmgpOwogfQogCiBzdGF0aWMgaW50IGlkZXRhcGVfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0cykKQEAgLTY2NSw3ICs2NDUsNyBAQAogCQlpZiAocmVhZHBvc1swXSAmIDB4NCkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiaWRlLXRhcGU6IEJsb2NrIGxvY2F0aW9uIGlzIHVua25vd24iCiAJCQkJCSAidG8gdGhlIHRhcGVcbiIpOwotCQkJY2xlYXJfYml0KElERVRBUEVfRkxBR19BRERSRVNTX1ZBTElELCAmdGFwZS0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KElERV9BRkxBR19BRERSRVNTX1ZBTElELCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAkJCXVwdG9kYXRlID0gMDsKIAkJfSBlbHNlIHsKIAkJCWRlYnVnX2xvZyhEQkdfU0VOU0UsICJCbG9jayBMb2NhdGlvbiAtICV1XG4iLApAQCAtNjczLDcgKzY1Myw3IEBACiAKIAkJCXRhcGUtPnBhcnRpdGlvbiA9IHJlYWRwb3NbMV07CiAJCQl0YXBlLT5maXJzdF9mcmFtZSA9IGJlMzJfdG9fY3B1KCoodTMyICopJnJlYWRwb3NbNF0pOwotCQkJc2V0X2JpdChJREVUQVBFX0ZMQUdfQUREUkVTU19WQUxJRCwgJnRhcGUtPmZsYWdzKTsKKwkJCXNldF9iaXQoSURFX0FGTEFHX0FERFJFU1NfVkFMSUQsICZkcml2ZS0+YXRhcGlfZmxhZ3MpOwogCQl9CiAJfQogCkBAIC02OTAsNyArNjcwLDYgQEAKIAlwYy0+YnVmX3NpemUgPSBJREVUQVBFX1BDX0JVRkZFUl9TSVpFOwogCXBjLT5iaCA9IE5VTEw7CiAJcGMtPmJfZGF0YSA9IE5VTEw7Ci0JcGMtPmNhbGxiYWNrID0gaWRlX3RhcGVfY2FsbGJhY2s7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZXRhcGVfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQpAQCAtNzA1LDcgKzY4NCw3IEBACiB7CiAJYmxrX3JxX2luaXQoTlVMTCwgcnEpOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7Ci0JcnEtPmNtZFswXSA9IGNtZDsKKwlycS0+Y21kWzEzXSA9IGNtZDsKIH0KIAogLyoKQEAgLTczMiw2ICs3MTEsNyBAQAogCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1BSRUVNUFQ7CiAJcnEtPmJ1ZmZlciA9IChjaGFyICopIHBjOwogCXJxLT5ycV9kaXNrID0gdGFwZS0+ZGlzazsKKwltZW1jcHkocnEtPmNtZCwgcGMtPmMsIDEyKTsKIAlpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCBycSk7CiB9CiAKQEAgLTc0Miw3ICs3MjIsNiBAQAogICovCiBzdGF0aWMgdm9pZCBpZGV0YXBlX3JldHJ5X3BjKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAKQEAgLTc1MCw3ICs3MjksNyBAQAogCXBjID0gaWRldGFwZV9uZXh0X3BjX3N0b3JhZ2UoZHJpdmUpOwogCXJxID0gaWRldGFwZV9uZXh0X3JxX3N0b3JhZ2UoZHJpdmUpOwogCWlkZXRhcGVfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKHBjKTsKLQlzZXRfYml0KElERVRBUEVfRkxBR19JR05PUkVfRFNDLCAmdGFwZS0+ZmxhZ3MpOworCXNldF9iaXQoSURFX0FGTEFHX0lHTk9SRV9EU0MsICZkcml2ZS0+YXRhcGlfZmxhZ3MpOwogCWlkZXRhcGVfcXVldWVfcGNfaGVhZChkcml2ZSwgcGMsIHJxKTsKIH0KIApAQCAtODg3LDcgKzg2Niw3IEBACiAJCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0dFTkVSQUw7CiAJCX0KIAkJdGFwZS0+ZmFpbGVkX3BjID0gTlVMTDsKLQkJcGMtPmNhbGxiYWNrKGRyaXZlKTsKKwkJZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAlkZWJ1Z19sb2coREJHX1NFTlNFLCAiUmV0cnkgIyVkLCBjbWQgPSAlMDJYXG4iLCBwYy0+cmV0cmllcywgcGMtPmNbMF0pOwpAQCAtOTI3LDExICs5MDYsMTIgQEAKIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGV0YXBlX21lZGlhX2FjY2Vzc19maW5pc2hlZChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gdGFwZS0+cGM7CiAJdTggc3RhdDsKIAotCXN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKHN0YXQgJiBTRUVLX1NUQVQpIHsKIAkJaWYgKHN0YXQgJiBFUlJfU1RBVCkgewpAQCAtOTQ4LDE0ICs5MjgsMTcgQEAKIAkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9HRU5FUkFMOwogCQl0YXBlLT5mYWlsZWRfcGMgPSBOVUxMOwogCX0KLQlwYy0+Y2FsbGJhY2soZHJpdmUpOworCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSk7CiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCiBzdGF0aWMgdm9pZCBpZGVfdGFwZV9jcmVhdGVfcndfY21kKGlkZXRhcGVfdGFwZV90ICp0YXBlLAotCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgdW5zaWduZWQgaW50IGxlbmd0aCwKLQkJc3RydWN0IGlkZXRhcGVfYmggKmJoLCB1OCBvcGNvZGUpCisJCQkJICAgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICB1OCBvcGNvZGUpCiB7CisJc3RydWN0IGlkZXRhcGVfYmggKmJoID0gKHN0cnVjdCBpZGV0YXBlX2JoICopcnEtPnNwZWNpYWw7CisJdW5zaWduZWQgaW50IGxlbmd0aCA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7CisKIAlpZGV0YXBlX2luaXRfcGMocGMpOwogCXB1dF91bmFsaWduZWQoY3B1X3RvX2JlMzIobGVuZ3RoKSwgKHVuc2lnbmVkIGludCAqKSAmcGMtPmNbMV0pOwogCXBjLT5jWzFdID0gMTsKQEAgLTk3NSwxMSArOTU4LDE0IEBACiAJCXBjLT5iX2RhdGEgPSBiaC0+Yl9kYXRhOwogCQlwYy0+Yl9jb3VudCA9IGF0b21pY19yZWFkKCZiaC0+Yl9jb3VudCk7CiAJfQorCisJbWVtY3B5KHJxLT5jbWQsIHBjLT5jLCAxMik7CiB9CiAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRldGFwZV9kb19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCQkJICBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IGJsb2NrKQogeworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IE5VTEw7CiAJc3RydWN0IHJlcXVlc3QgKnBvc3Rwb25lZF9ycSA9IHRhcGUtPnBvc3Rwb25lZF9ycTsKQEAgLTEwMTcsMTcgKzEwMDMsMTcgQEAKIAkgKiBJZiB0aGUgdGFwZSBpcyBzdGlsbCBidXN5LCBwb3N0cG9uZSBvdXIgcmVxdWVzdCBhbmQgc2VydmljZQogCSAqIHRoZSBvdGhlciBkZXZpY2UgbWVhbndoaWxlLgogCSAqLwotCXN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCi0JaWYgKCFkcml2ZS0+ZHNjX292ZXJsYXAgJiYgIShycS0+Y21kWzBdICYgUkVRX0lERVRBUEVfUEMyKSkKLQkJc2V0X2JpdChJREVUQVBFX0ZMQUdfSUdOT1JFX0RTQywgJnRhcGUtPmZsYWdzKTsKKwlpZiAoIWRyaXZlLT5kc2Nfb3ZlcmxhcCAmJiAhKHJxLT5jbWRbMTNdICYgUkVRX0lERVRBUEVfUEMyKSkKKwkJc2V0X2JpdChJREVfQUZMQUdfSUdOT1JFX0RTQywgJmRyaXZlLT5hdGFwaV9mbGFncyk7CiAKIAlpZiAoZHJpdmUtPnBvc3RfcmVzZXQgPT0gMSkgewotCQlzZXRfYml0KElERVRBUEVfRkxBR19JR05PUkVfRFNDLCAmdGFwZS0+ZmxhZ3MpOworCQlzZXRfYml0KElERV9BRkxBR19JR05PUkVfRFNDLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAkJZHJpdmUtPnBvc3RfcmVzZXQgPSAwOwogCX0KIAotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KElERVRBUEVfRkxBR19JR05PUkVfRFNDLCAmdGFwZS0+ZmxhZ3MpICYmCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSURFX0FGTEFHX0lHTk9SRV9EU0MsICZkcml2ZS0+YXRhcGlfZmxhZ3MpICYmCiAJICAgIChzdGF0ICYgU0VFS19TVEFUKSA9PSAwKSB7CiAJCWlmIChwb3N0cG9uZWRfcnEgPT0gTlVMTCkgewogCQkJdGFwZS0+ZHNjX3BvbGxpbmdfc3RhcnQgPSBqaWZmaWVzOwpAQCAtMTAzNiw3ICsxMDIyLDcgQEAKIAkJfSBlbHNlIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRhcGUtPmRzY190aW1lb3V0KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogJXM6IERTQyB0aW1lb3V0XG4iLAogCQkJCXRhcGUtPm5hbWUpOwotCQkJaWYgKHJxLT5jbWRbMF0gJiBSRVFfSURFVEFQRV9QQzIpIHsKKwkJCWlmIChycS0+Y21kWzEzXSAmIFJFUV9JREVUQVBFX1BDMikgewogCQkJCWlkZXRhcGVfbWVkaWFfYWNjZXNzX2ZpbmlzaGVkKGRyaXZlKTsKIAkJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCQl9IGVsc2UgewpAQCAtMTA0OSwzNSArMTAzNSwyOSBAQAogCQlpZGV0YXBlX3Bvc3Rwb25lX3JlcXVlc3QoZHJpdmUpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQotCWlmIChycS0+Y21kWzBdICYgUkVRX0lERVRBUEVfUkVBRCkgeworCWlmIChycS0+Y21kWzEzXSAmIFJFUV9JREVUQVBFX1JFQUQpIHsKIAkJcGMgPSBpZGV0YXBlX25leHRfcGNfc3RvcmFnZShkcml2ZSk7Ci0JCWlkZV90YXBlX2NyZWF0ZV9yd19jbWQodGFwZSwgcGMsIHJxLT5jdXJyZW50X25yX3NlY3RvcnMsCi0JCQkJCShzdHJ1Y3QgaWRldGFwZV9iaCAqKXJxLT5zcGVjaWFsLAotCQkJCQlSRUFEXzYpOworCQlpZGVfdGFwZV9jcmVhdGVfcndfY21kKHRhcGUsIHBjLCBycSwgUkVBRF82KTsKIAkJZ290byBvdXQ7CiAJfQotCWlmIChycS0+Y21kWzBdICYgUkVRX0lERVRBUEVfV1JJVEUpIHsKKwlpZiAocnEtPmNtZFsxM10gJiBSRVFfSURFVEFQRV9XUklURSkgewogCQlwYyA9IGlkZXRhcGVfbmV4dF9wY19zdG9yYWdlKGRyaXZlKTsKLQkJaWRlX3RhcGVfY3JlYXRlX3J3X2NtZCh0YXBlLCBwYywgcnEtPmN1cnJlbnRfbnJfc2VjdG9ycywKLQkJCQkJIChzdHJ1Y3QgaWRldGFwZV9iaCAqKXJxLT5zcGVjaWFsLAotCQkJCQkgV1JJVEVfNik7CisJCWlkZV90YXBlX2NyZWF0ZV9yd19jbWQodGFwZSwgcGMsIHJxLCBXUklURV82KTsKIAkJZ290byBvdXQ7CiAJfQotCWlmIChycS0+Y21kWzBdICYgUkVRX0lERVRBUEVfUEMxKSB7CisJaWYgKHJxLT5jbWRbMTNdICYgUkVRX0lERVRBUEVfUEMxKSB7CiAJCXBjID0gKHN0cnVjdCBpZGVfYXRhcGlfcGMgKikgcnEtPmJ1ZmZlcjsKLQkJcnEtPmNtZFswXSAmPSB+KFJFUV9JREVUQVBFX1BDMSk7Ci0JCXJxLT5jbWRbMF0gfD0gUkVRX0lERVRBUEVfUEMyOworCQlycS0+Y21kWzEzXSAmPSB+KFJFUV9JREVUQVBFX1BDMSk7CisJCXJxLT5jbWRbMTNdIHw9IFJFUV9JREVUQVBFX1BDMjsKIAkJZ290byBvdXQ7CiAJfQotCWlmIChycS0+Y21kWzBdICYgUkVRX0lERVRBUEVfUEMyKSB7CisJaWYgKHJxLT5jbWRbMTNdICYgUkVRX0lERVRBUEVfUEMyKSB7CiAJCWlkZXRhcGVfbWVkaWFfYWNjZXNzX2ZpbmlzaGVkKGRyaXZlKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAlCVUcoKTsKLW91dDoKLQlpZiAodGVzdF9iaXQoSURFVEFQRV9GTEFHX0RSUV9JTlRFUlJVUFQsICZ0YXBlLT5mbGFncykpCi0JCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RSUV9JTlRFUlJVUFQ7CiAKK291dDoKIAlyZXR1cm4gaWRldGFwZV9pc3N1ZV9wYyhkcml2ZSwgcGMpOwogfQogCkBAIC0xMjgxLDggKzEyNjEsOSBAQAogCiAJcnEgPSBibGtfZ2V0X3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBSRUFELCBfX0dGUF9XQUlUKTsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwotCXJxLT5jbWRbMF0gPSBSRVFfSURFVEFQRV9QQzE7CisJcnEtPmNtZFsxM10gPSBSRVFfSURFVEFQRV9QQzE7CiAJcnEtPmJ1ZmZlciA9IChjaGFyICopcGM7CisJbWVtY3B5KHJxLT5jbWQsIHBjLT5jLCAxMik7CiAJZXJyb3IgPSBibGtfZXhlY3V0ZV9ycShkcml2ZS0+cXVldWUsIHRhcGUtPmRpc2ssIHJxLCAwKTsKIAlibGtfcHV0X3JlcXVlc3QocnEpOwogCXJldHVybiBlcnJvcjsKQEAgLTEzMDQsNyArMTI4NSw3IEBACiAJaW50IGxvYWRfYXR0ZW1wdGVkID0gMDsKIAogCS8qIFdhaXQgZm9yIHRoZSB0YXBlIHRvIGJlY29tZSByZWFkeSAqLwotCXNldF9iaXQoSURFVEFQRV9GTEFHX01FRElVTV9QUkVTRU5ULCAmdGFwZS0+ZmxhZ3MpOworCXNldF9iaXQoSURFX0FGTEFHX01FRElVTV9QUkVTRU5ULCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAl0aW1lb3V0ICs9IGppZmZpZXM7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCWlkZXRhcGVfY3JlYXRlX3Rlc3RfdW5pdF9yZWFkeV9jbWQoJnBjKTsKQEAgLTEzOTcsNyArMTM3OCw3IEBACiAJaWYgKHRhcGUtPmNocmRldl9kaXIgIT0gSURFVEFQRV9ESVJfUkVBRCkKIAkJcmV0dXJuOwogCi0JY2xlYXJfYml0KElERVRBUEVfRkxBR19GSUxFTUFSSywgJnRhcGUtPmZsYWdzKTsKKwljbGVhcl9iaXQoSURFX0FGTEFHX0ZJTEVNQVJLLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAl0YXBlLT5tZXJnZV9iaF9zaXplID0gMDsKIAlpZiAodGFwZS0+bWVyZ2VfYmggIT0gTlVMTCkgewogCQlpZGVfdGFwZV9rZnJlZV9idWZmZXIodGFwZSk7CkBAIC0xNDY1LDcgKzE0NDYsNyBAQAogCiAJcnEgPSBibGtfZ2V0X3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBSRUFELCBfX0dGUF9XQUlUKTsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwotCXJxLT5jbWRbMF0gPSBjbWQ7CisJcnEtPmNtZFsxM10gPSBjbWQ7CiAJcnEtPnJxX2Rpc2sgPSB0YXBlLT5kaXNrOwogCXJxLT5zcGVjaWFsID0gKHZvaWQgKiliaDsKIAlycS0+c2VjdG9yID0gdGFwZS0+Zmlyc3RfZnJhbWU7CkBAIC0xNjM2LDcgKzE2MTcsNyBAQAogCWRlYnVnX2xvZyhEQkdfUFJPQ1MsICJFbnRlciAlcywgJWQgYmxvY2tzXG4iLCBfX2Z1bmNfXywgYmxvY2tzKTsKIAogCS8qIElmIHdlIGFyZSBhdCBhIGZpbGVtYXJrLCByZXR1cm4gYSByZWFkIGxlbmd0aCBvZiAwICovCi0JaWYgKHRlc3RfYml0KElERVRBUEVfRkxBR19GSUxFTUFSSywgJnRhcGUtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoSURFX0FGTEFHX0ZJTEVNQVJLLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAlpZGV0YXBlX2luaXRfcmVhZChkcml2ZSk7CkBAIC0xNzQ2LDcgKzE3MjcsNyBAQAogCiAJaWYgKHRhcGUtPmNocmRldl9kaXIgPT0gSURFVEFQRV9ESVJfUkVBRCkgewogCQl0YXBlLT5tZXJnZV9iaF9zaXplID0gMDsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJREVUQVBFX0ZMQUdfRklMRU1BUkssICZ0YXBlLT5mbGFncykpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSURFX0FGTEFHX0ZJTEVNQVJLLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKSkKIAkJCSsrY291bnQ7CiAJCWlkZV90YXBlX2Rpc2NhcmRfbWVyZ2VfYnVmZmVyKGRyaXZlLCAwKTsKIAl9CkBAIC0xODAxLDcgKzE3ODIsNyBAQAogCWRlYnVnX2xvZyhEQkdfQ0hSREVWLCAiRW50ZXIgJXMsIGNvdW50ICVaZFxuIiwgX19mdW5jX18sIGNvdW50KTsKIAogCWlmICh0YXBlLT5jaHJkZXZfZGlyICE9IElERVRBUEVfRElSX1JFQUQpIHsKLQkJaWYgKHRlc3RfYml0KElERVRBUEVfRkxBR19ERVRFQ1RfQlMsICZ0YXBlLT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChJREVfQUZMQUdfREVURUNUX0JTLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKSkKIAkJCWlmIChjb3VudCA+IHRhcGUtPmJsa19zaXplICYmCiAJCQkgICAgKGNvdW50ICUgdGFwZS0+YmxrX3NpemUpID09IDApCiAJCQkJdGFwZS0+dXNlcl9ic19mYWN0b3IgPSBjb3VudCAvIHRhcGUtPmJsa19zaXplOwpAQCAtMTg0MSw3ICsxODIyLDcgQEAKIAkJdGFwZS0+bWVyZ2VfYmhfc2l6ZSA9IGJ5dGVzX3JlYWQtdGVtcDsKIAl9CiBmaW5pc2g6Ci0JaWYgKCFhY3R1YWxseV9yZWFkICYmIHRlc3RfYml0KElERVRBUEVfRkxBR19GSUxFTUFSSywgJnRhcGUtPmZsYWdzKSkgeworCWlmICghYWN0dWFsbHlfcmVhZCAmJiB0ZXN0X2JpdChJREVfQUZMQUdfRklMRU1BUkssICZkcml2ZS0+YXRhcGlfZmxhZ3MpKSB7CiAJCWRlYnVnX2xvZyhEQkdfU0VOU0UsICIlczogc3BhY2luZyBvdmVyIGZpbGVtYXJrXG4iLCB0YXBlLT5uYW1lKTsKIAogCQlpZGV0YXBlX3NwYWNlX292ZXJfZmlsZW1hcmtzKGRyaXZlLCBNVEZTRiwgMSk7CkBAIC0yMDI3LDcgKzIwMDgsNyBAQAogCQkJCQkgICAgICAhSURFVEFQRV9MVV9MT0FEX01BU0spOwogCQlyZXR2YWwgPSBpZGV0YXBlX3F1ZXVlX3BjX3RhaWwoZHJpdmUsICZwYyk7CiAJCWlmICghcmV0dmFsKQotCQkJY2xlYXJfYml0KElERVRBUEVfRkxBR19NRURJVU1fUFJFU0VOVCwgJnRhcGUtPmZsYWdzKTsKKwkJCWNsZWFyX2JpdChJREVfQUZMQUdfTUVESVVNX1BSRVNFTlQsICZkcml2ZS0+YXRhcGlfZmxhZ3MpOwogCQlyZXR1cm4gcmV0dmFsOwogCWNhc2UgTVROT1A6CiAJCWlkZV90YXBlX2Rpc2NhcmRfbWVyZ2VfYnVmZmVyKGRyaXZlLCAwKTsKQEAgLTIwNTAsOSArMjAzMSw5IEBACiAJCQkgICAgbXRfY291bnQgJSB0YXBlLT5ibGtfc2l6ZSkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCXRhcGUtPnVzZXJfYnNfZmFjdG9yID0gbXRfY291bnQgLyB0YXBlLT5ibGtfc2l6ZTsKLQkJCWNsZWFyX2JpdChJREVUQVBFX0ZMQUdfREVURUNUX0JTLCAmdGFwZS0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KElERV9BRkxBR19ERVRFQ1RfQlMsICZkcml2ZS0+YXRhcGlfZmxhZ3MpOwogCQl9IGVsc2UKLQkJCXNldF9iaXQoSURFVEFQRV9GTEFHX0RFVEVDVF9CUywgJnRhcGUtPmZsYWdzKTsKKwkJCXNldF9iaXQoSURFX0FGTEFHX0RFVEVDVF9CUywgJmRyaXZlLT5hdGFwaV9mbGFncyk7CiAJCXJldHVybiAwOwogCWNhc2UgTVRTRUVLOgogCQlpZGVfdGFwZV9kaXNjYXJkX21lcmdlX2J1ZmZlcihkcml2ZSwgMCk7CkBAIC0yMjAyLDIwICsyMTgzLDIwIEBACiAKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSB0YXBlOwogCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoSURFVEFQRV9GTEFHX0JVU1ksICZ0YXBlLT5mbGFncykpIHsKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChJREVfQUZMQUdfQlVTWSwgJmRyaXZlLT5hdGFwaV9mbGFncykpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIG91dF9wdXRfdGFwZTsKIAl9CiAKIAlyZXR2YWwgPSBpZGV0YXBlX3dhaXRfcmVhZHkoZHJpdmUsIDYwICogSFopOwogCWlmIChyZXR2YWwpIHsKLQkJY2xlYXJfYml0KElERVRBUEVfRkxBR19CVVNZLCAmdGFwZS0+ZmxhZ3MpOworCQljbGVhcl9iaXQoSURFX0FGTEFHX0JVU1ksICZkcml2ZS0+YXRhcGlfZmxhZ3MpOwogCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiAlczogZHJpdmUgbm90IHJlYWR5XG4iLCB0YXBlLT5uYW1lKTsKIAkJZ290byBvdXRfcHV0X3RhcGU7CiAJfQogCiAJaWRldGFwZV9yZWFkX3Bvc2l0aW9uKGRyaXZlKTsKLQlpZiAoIXRlc3RfYml0KElERVRBUEVfRkxBR19BRERSRVNTX1ZBTElELCAmdGFwZS0+ZmxhZ3MpKQorCWlmICghdGVzdF9iaXQoSURFX0FGTEFHX0FERFJFU1NfVkFMSUQsICZkcml2ZS0+YXRhcGlfZmxhZ3MpKQogCQkodm9pZClpZGV0YXBlX3Jld2luZF90YXBlKGRyaXZlKTsKIAogCS8qIFJlYWQgYmxvY2sgc2l6ZSBhbmQgd3JpdGUgcHJvdGVjdCBzdGF0dXMgZnJvbSBkcml2ZS4gKi8KQEAgLTIyMzEsNyArMjIxMiw3IEBACiAJaWYgKHRhcGUtPndyaXRlX3Byb3QpIHsKIAkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSB8fAogCQkgICAgKGZpbHAtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRXUikgewotCQkJY2xlYXJfYml0KElERVRBUEVfRkxBR19CVVNZLCAmdGFwZS0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KElERV9BRkxBR19CVVNZLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAkJCXJldHZhbCA9IC1FUk9GUzsKIAkJCWdvdG8gb3V0X3B1dF90YXBlOwogCQl9CkBAIC0yMjkxLDcgKzIyNzIsNyBAQAogCQkJaWRlX3RhcGVfZGlzY2FyZF9tZXJnZV9idWZmZXIoZHJpdmUsIDEpOwogCX0KIAotCWlmIChtaW5vciA8IDEyOCAmJiB0ZXN0X2JpdChJREVUQVBFX0ZMQUdfTUVESVVNX1BSRVNFTlQsICZ0YXBlLT5mbGFncykpCisJaWYgKG1pbm9yIDwgMTI4ICYmIHRlc3RfYml0KElERV9BRkxBR19NRURJVU1fUFJFU0VOVCwgJmRyaXZlLT5hdGFwaV9mbGFncykpCiAJCSh2b2lkKSBpZGV0YXBlX3Jld2luZF90YXBlKGRyaXZlKTsKIAlpZiAodGFwZS0+Y2hyZGV2X2RpciA9PSBJREVUQVBFX0RJUl9OT05FKSB7CiAJCWlmICh0YXBlLT5kb29yX2xvY2tlZCA9PSBET09SX0xPQ0tFRCkgewpAQCAtMjMwMSw3ICsyMjgyLDcgQEAKIAkJCX0KIAkJfQogCX0KLQljbGVhcl9iaXQoSURFVEFQRV9GTEFHX0JVU1ksICZ0YXBlLT5mbGFncyk7CisJY2xlYXJfYml0KElERV9BRkxBR19CVVNZLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAlpZGVfdGFwZV9wdXQodGFwZSk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwpAQCAtMjQ2NCw2ICsyNDQ1LDggQEAKIAl1OCBnY3dbMl07CiAJdTE2ICpjdGwgPSAodTE2ICopJnRhcGUtPmNhcHNbMTJdOwogCisJZHJpdmUtPnBjX2NhbGxiYWNrID0gaWRlX3RhcGVfY2FsbGJhY2s7CisKIAlzcGluX2xvY2tfaW5pdCgmdGFwZS0+bG9jayk7CiAJZHJpdmUtPmRzY19vdmVybGFwID0gMTsKIAlpZiAoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fRFNDKSB7CkBAIC0yNDg0LDcgKzI0NjcsNyBAQAogCiAJLyogQ29tbWFuZCBwYWNrZXQgRFJRIHR5cGUgKi8KIAlpZiAoKChnY3dbMF0gJiAweDYwKSA+PiA1KSA9PSAxKQotCQlzZXRfYml0KElERVRBUEVfRkxBR19EUlFfSU5URVJSVVBULCAmdGFwZS0+ZmxhZ3MpOworCQlzZXRfYml0KElERV9BRkxBR19EUlFfSU5URVJSVVBULCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAogCWlkZXRhcGVfZ2V0X2lucXVpcnlfcmVzdWx0cyhkcml2ZSk7CiAJaWRldGFwZV9nZXRfbW9kZV9zZW5zZV9yZXN1bHRzKGRyaXZlKTsKQEAgLTI2OTcsMTAgKzI2ODAsMTIgQEAKIAogCWlkZXRhcGVfc2V0dXAoZHJpdmUsIHRhcGUsIG1pbm9yKTsKIAotCWRldmljZV9jcmVhdGUoaWRldGFwZV9zeXNmc19jbGFzcywgJmRyaXZlLT5nZW5kZXYsCi0JCSAgICAgIE1LREVWKElERVRBUEVfTUFKT1IsIG1pbm9yKSwgIiVzIiwgdGFwZS0+bmFtZSk7Ci0JZGV2aWNlX2NyZWF0ZShpZGV0YXBlX3N5c2ZzX2NsYXNzLCAmZHJpdmUtPmdlbmRldiwKLQkJCU1LREVWKElERVRBUEVfTUFKT1IsIG1pbm9yICsgMTI4KSwgIm4lcyIsIHRhcGUtPm5hbWUpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpZGV0YXBlX3N5c2ZzX2NsYXNzLCAmZHJpdmUtPmdlbmRldiwKKwkJCSAgICAgIE1LREVWKElERVRBUEVfTUFKT1IsIG1pbm9yKSwgTlVMTCwKKwkJCSAgICAgICIlcyIsIHRhcGUtPm5hbWUpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpZGV0YXBlX3N5c2ZzX2NsYXNzLCAmZHJpdmUtPmdlbmRldiwKKwkJCSAgICAgIE1LREVWKElERVRBUEVfTUFKT1IsIG1pbm9yICsgMTI4KSwgTlVMTCwKKwkJCSAgICAgICJuJXMiLCB0YXBlLT5uYW1lKTsKIAogCWctPmZvcHMgPSAmaWRldGFwZV9ibG9ja19vcHM7CiAJaWRlX3JlZ2lzdGVyX3JlZ2lvbihnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKaW5kZXggMWZiZGI3NC4uYWVkZGJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKQEAgLTY0LDYgKzY0LDcgQEAKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CiAJaWRlX2hhbmRsZXJfdCAqaGFuZGxlciA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAljb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgKmRtYV9vcHMgPSBod2lmLT5kbWFfb3BzOwogCiAJaWYgKHRhc2stPmRhdGFfcGhhc2UgPT0gVEFTS0ZJTEVfTVVMVElfSU4gfHwKQEAgLTgwLDE1ICs4MSwxNSBAQAogCiAJaWYgKCh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLKSA9PSAwKSB7CiAJCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCB0Zik7Ci0JCWlkZV9zZXRfaXJxKGRyaXZlLCAxKTsKKwkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOwogCQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JCWh3aWYtPnRmX2xvYWQoZHJpdmUsIHRhc2spOworCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsIHRhc2spOwogCX0KIAogCXN3aXRjaCAodGFzay0+ZGF0YV9waGFzZSkgewogCWNhc2UgVEFTS0ZJTEVfTVVMVElfT1VUOgogCWNhc2UgVEFTS0ZJTEVfT1VUOgotCQlod2lmLT5PVVRCU1lOQyhod2lmLCB0Zi0+Y29tbWFuZCwgaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKKwkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgdGYtPmNvbW1hbmQpOwogCQluZGVsYXkoNDAwKTsJLyogRklYTUUgKi8KIAkJcmV0dXJuIHByZV90YXNrX291dF9pbnRyKGRyaXZlLCB0YXNrLT5ycSk7CiAJY2FzZSBUQVNLRklMRV9NVUxUSV9JTjoKQEAgLTEyNCw3ICsxMjUsOCBAQAogICovCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHNldF9tdWx0bW9kZV9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQl1OCBzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKIAlpZiAoT0tfU1RBVChzdGF0LCBSRUFEWV9TVEFULCBCQURfU1RBVCkpCiAJCWRyaXZlLT5tdWx0X2NvdW50ID0gZHJpdmUtPm11bHRfcmVxOwpAQCAtMTQxLDExICsxNDMsMTYgQEAKICAqLwogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBzZXRfZ2VvbWV0cnlfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWludCByZXRyaWVzID0gNTsKIAl1OCBzdGF0OwogCi0Jd2hpbGUgKCgoc3RhdCA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSkpICYgQlVTWV9TVEFUKSAmJiByZXRyaWVzLS0pCisJd2hpbGUgKDEpIHsKKwkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CisJCWlmICgoc3RhdCAmIEJVU1lfU1RBVCkgPT0gMCB8fCByZXRyaWVzLS0gPT0gMCkKKwkJCWJyZWFrOwogCQl1ZGVsYXkoMTApOworCX07CiAKIAlpZiAoT0tfU1RBVChzdGF0LCBSRUFEWV9TVEFULCBCQURfU1RBVCkpCiAJCXJldHVybiBpZGVfc3RvcHBlZDsKQEAgLTE2Miw3ICsxNjksOCBAQAogICovCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHJlY2FsX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXU4IHN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAogCWlmICghT0tfU1RBVChzdGF0LCBSRUFEWV9TVEFULCBCQURfU1RBVCkpCiAJCXJldHVybiBpZGVfZXJyb3IoZHJpdmUsICJyZWNhbF9pbnRyIiwgc3RhdCk7CkBAIC0xNzQsMTEgKzE4MiwxMiBAQAogICovCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfbm9fZGF0YV9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfdGFza190ICphcmdzCT0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFsOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpZGVfdGFza190ICphcmdzID0gaHdpZi0+aHdncm91cC0+cnEtPnNwZWNpYWw7CiAJdTggc3RhdDsKIAogCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwotCXN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKCFPS19TVEFUKHN0YXQsIFJFQURZX1NUQVQsIEJBRF9TVEFUKSkKIAkJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgInRhc2tfbm9fZGF0YV9pbnRyIiwgc3RhdCk7CkBAIC0xOTIsNiArMjAxLDcgQEAKIAogc3RhdGljIHU4IHdhaXRfZHJpdmVfbm90X2J1c3koaWRlX2RyaXZlX3QgKmRyaXZlKQogeworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlpbnQgcmV0cmllczsKIAl1OCBzdGF0OwogCkBAIC0yMDAsNyArMjEwLDcgQEAKIAkgKiB0YWtlIHVwIHRvIDYgbXMgb24gc29tZSBBVEFQSSBkZXZpY2VzLCBzbyB3ZSB3aWxsIHdhaXQgbWF4IDEwIG1zLgogCSAqLwogCWZvciAocmV0cmllcyA9IDA7IHJldHJpZXMgPCAxMDAwOyByZXRyaWVzKyspIHsKLQkJc3RhdCA9IGlkZV9yZWFkX3N0YXR1cyhkcml2ZSk7CisJCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJCWlmIChzdGF0ICYgQlVTWV9TVEFUKQogCQkJdWRlbGF5KDEwKTsKQEAgLTI1NSw5ICsyNjUsOSBAQAogCiAJLyogZG8gdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyICovCiAJaWYgKHdyaXRlKQotCQlod2lmLT5vdXRwdXRfZGF0YShkcml2ZSwgcnEsIGJ1ZiwgU0VDVE9SX1NJWkUpOworCQlod2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBycSwgYnVmLCBTRUNUT1JfU0laRSk7CiAJZWxzZQotCQlod2lmLT5pbnB1dF9kYXRhKGRyaXZlLCBycSwgYnVmLCBTRUNUT1JfU0laRSk7CisJCWh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgcnEsIGJ1ZiwgU0VDVE9SX1NJWkUpOwogCiAJa3VubWFwX2F0b21pYyhidWYsIEtNX0JJT19TUkNfSVJRKTsKICNpZmRlZiBDT05GSUdfSElHSE1FTQpAQCAtMzgzLDggKzM5Myw4IEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5faW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKLQl1OCBzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5od2dyb3VwLT5ycTsKKwl1OCBzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAogCS8qIEVycm9yPyAqLwogCWlmIChzdGF0ICYgRVJSX1NUQVQpCkBAIC00MTgsNyArNDI4LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOwotCXU4IHN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOworCXU4IHN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKCFPS19TVEFUKHN0YXQsIERSSVZFX1JFQURZLCBkcml2ZS0+YmFkX3dzdGF0KSkKIAkJcmV0dXJuIHRhc2tfZXJyb3IoZHJpdmUsIHJxLCBfX2Z1bmNfXywgc3RhdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS5jCmluZGV4IGQ0YTZiMTAuLjYwZjBjYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OAkgICAgTGludXMgVG9ydmFsZHMgJiBhdXRob3JzIChzZWUgYmVsb3cpCi0gKiAgQ29weXJpZmh0IChDKSAyMDAzLTIwMDUsIDIwMDcgICBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUsIDIwMDcgICBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CiAgKi8KIAogLyoKQEAgLTEwMSw4ICsxMDEsNyBAQAogCiAJaW5pdF9jb21wbGV0aW9uKCZod2lmLT5nZW5kZXZfcmVsX2NvbXApOwogCi0JZGVmYXVsdF9od2lmX2lvcHMoaHdpZik7Ci0JZGVmYXVsdF9od2lmX3RyYW5zcG9ydChod2lmKTsKKwlod2lmLT50cF9vcHMgPSAmZGVmYXVsdF90cF9vcHM7CiAKIAlpZGVfcG9ydF9pbml0X2RldmljZXNfZGF0YShod2lmKTsKIH0KQEAgLTEzNCw0MSArMTMzLDYgQEAKIAl9CiB9CiAKLXZvaWQgaWRlX3JlbW92ZV9wb3J0X2Zyb21faHdncm91cChpZGVfaHdpZl90ICpod2lmKQotewotCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBod2lmLT5od2dyb3VwOwotCi0Jc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOwotCS8qCi0JICogUmVtb3ZlIHVzIGZyb20gdGhlIGh3Z3JvdXAsIGFuZCBmcmVlCi0JICogdGhlIGh3Z3JvdXAgaWYgd2Ugd2VyZSB0aGUgb25seSBtZW1iZXIKLQkgKi8KLQlpZiAoaHdpZi0+bmV4dCA9PSBod2lmKSB7Ci0JCUJVR19PTihod2dyb3VwLT5od2lmICE9IGh3aWYpOwotCQlrZnJlZShod2dyb3VwKTsKLQl9IGVsc2UgewotCQkvKiBUaGVyZSBpcyBhbm90aGVyIGludGVyZmFjZSBpbiBod2dyb3VwLgotCQkgKiBVbmxpbmsgdXMsIGFuZCBzZXQgaHdncm91cC0+ZHJpdmUgYW5kIC0+aHdpZiB0bwotCQkgKiBzb21ldGhpbmcgc2FuZS4KLQkJICovCi0JCWlkZV9od2lmX3QgKmcgPSBod2dyb3VwLT5od2lmOwotCi0JCXdoaWxlIChnLT5uZXh0ICE9IGh3aWYpCi0JCQlnID0gZy0+bmV4dDsKLQkJZy0+bmV4dCA9IGh3aWYtPm5leHQ7Ci0JCWlmIChod2dyb3VwLT5od2lmID09IGh3aWYpIHsKLQkJCS8qIENob3NlIGEgcmFuZG9tIGh3aWYgZm9yIGh3Z3JvdXAtPmh3aWYuCi0JCQkgKiBJdCdzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSBhcmUgbm8gZHJpdmVzCi0JCQkgKiBsZWZ0IGluIHRoZSBod2dyb3VwLgotCQkJICovCi0JCQlCVUdfT04oaHdncm91cC0+ZHJpdmUgIT0gTlVMTCk7Ci0JCQlod2dyb3VwLT5od2lmID0gZzsKLQkJfQotCQlCVUdfT04oaHdncm91cC0+aHdpZiA9PSBod2lmKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7Ci19Ci0KIC8qIENhbGxlZCB3aXRoIGlkZV9sb2NrIGhlbGQuICovCiBzdGF0aWMgdm9pZCBfX2lkZV9wb3J0X3VucmVnaXN0ZXJfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKQogewpAQCAtMjY5LDE2ICsyMzMsOSBAQAogCWlmIChod2lmLT5kbWFfYmFzZSkKIAkJaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShod2lmKTsKIAotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKLQkvKiByZXN0b3JlIGh3aWYgZGF0YSB0byBwcmlzdGluZSBzdGF0dXMgKi8KLQlpZGVfaW5pdF9wb3J0X2RhdGEoaHdpZiwgaHdpZi0+aW5kZXgpOwotCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOwotCiAJbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CiB9CiAKLUVYUE9SVF9TWU1CT0woaWRlX3VucmVnaXN0ZXIpOwotCiB2b2lkIGlkZV9pbml0X3BvcnRfaHcoaWRlX2h3aWZfdCAqaHdpZiwgaHdfcmVnc190ICpodykKIHsKIAltZW1jcHkoJmh3aWYtPmlvX3BvcnRzLCAmaHctPmlvX3BvcnRzLCBzaXplb2YoaHdpZi0+aW9fcG9ydHMpKTsKQEAgLTI4Nyw4ICsyNDQsOCBAQAogCWh3aWYtPmRldiA9IGh3LT5kZXY7CiAJaHdpZi0+Z2VuZGV2LnBhcmVudCA9IGh3LT5wYXJlbnQgPyBody0+cGFyZW50IDogaHctPmRldjsKIAlod2lmLT5hY2tfaW50ciA9IGh3LT5hY2tfaW50cjsKKwlod2lmLT5jb25maWdfZGF0YSA9IGh3LT5jb25maWc7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5pdF9wb3J0X2h3KTsKIAogLyoKICAqCUxvY2tzIGZvciBJREUgc2V0dGluZyBmdW5jdGlvbmFsaXR5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvYnVkZGhhLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvYnVkZGhhLmMKaW5kZXggMDQ5N2U3Zi4uN2MyYWZhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2J1ZGRoYS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9idWRkaGEuYwpAQCAtMzcsNiArMzcsOCBAQAogI2RlZmluZSBDQVRXRUFTRUxfTlVNX0hXSUZTCTMKICNkZWZpbmUgWFNVUkZfTlVNX0hXSUZTICAgICAgICAgMgogCisjZGVmaW5lIE1BWF9OVU1fSFdJRlMJCTMKKwogICAgIC8qCiAgICAgICogIEJhc2VzIG9mIHRoZSBJREUgaW50ZXJmYWNlcyAocmVsYXRpdmUgdG8gdGhlIGJvYXJkIGFkZHJlc3MpCiAgICAgICovCkBAIC0xNDgsMTggKzE1MCwxNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBidWRkaGFfaW5pdCh2b2lkKQogewotCWh3X3JlZ3NfdCBodzsKLQlpZGVfaHdpZl90ICpod2lmOwotCWludCBpOwotCiAJc3RydWN0IHpvcnJvX2RldiAqeiA9IE5VTEw7CiAJdV9sb25nIGJ1ZGRoYV9ib2FyZCA9IDA7CiAJQnVkZGhhVHlwZSB0eXBlOwotCWludCBidWRkaGFfbnVtX2h3aWZzOworCWludCBidWRkaGFfbnVtX2h3aWZzLCBpOwogCiAJd2hpbGUgKCh6ID0gem9ycm9fZmluZF9kZXZpY2UoWk9SUk9fV0lMRENBUkQsIHopKSkgewogCQl1bnNpZ25lZCBsb25nIGJvYXJkOwotCQl1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKwkJaHdfcmVnc190IGh3W01BWF9OVU1fSFdJRlNdLCAqaHdzW10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIAogCQlpZiAoei0+aWQgPT0gWk9SUk9fUFJPRF9JTkRJVklEVUFMX0NPTVBVVEVSU19CVURESEEpIHsKIAkJCWJ1ZGRoYV9udW1faHdpZnMgPSBCVURESEFfTlVNX0hXSUZTOwpAQCAtMjIxLDE5ICsyMTksMTMgQEAKIAkJCQlhY2tfaW50ciA9IHhzdXJmX2Fja19pbnRyOwogCQkJfQogCi0JCQlidWRkaGFfc2V0dXBfcG9ydHMoJmh3LCBiYXNlLCBjdGwsIGlycV9wb3J0LCBhY2tfaW50cik7CisJCQlidWRkaGFfc2V0dXBfcG9ydHMoJmh3W2ldLCBiYXNlLCBjdGwsIGlycV9wb3J0LAorCQkJCQkgICBhY2tfaW50cik7CiAKLQkJCWh3aWYgPSBpZGVfZmluZF9wb3J0KCk7Ci0JCQlpZiAoaHdpZikgewotCQkJCXU4IGluZGV4ID0gaHdpZi0+aW5kZXg7Ci0KLQkJCQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7Ci0KLQkJCQlpZHhbaV0gPSBpbmRleDsKLQkJCX0KKwkJCWh3c1tpXSA9ICZod1tpXTsKIAkJfQogCi0JCWlkZV9kZXZpY2VfYWRkKGlkeCwgTlVMTCk7CisJCWlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2ZhbGNvbmlkZS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2ZhbGNvbmlkZS5jCmluZGV4IDEyOWE4MTIuLjcyNGY5NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9mYWxjb25pZGUuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvZmFsY29uaWRlLmMKQEAgLTY2LDYgKzY2LDI3IEBACiAJb3V0c3dfc3dhcHcoZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCisvKiBBdGFyaSBoYXMgYSBieXRlLXN3YXBwZWQgSURFIGludGVyZmFjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGZhbGNvbmlkZV90cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkucmVhZF9zZmZfZG1hX3N0YXR1cwk9IGlkZV9yZWFkX3NmZl9kbWFfc3RhdHVzLAorCisJLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCisKKwkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKKwkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IGZhbGNvbmlkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQkJPSBmYWxjb25pZGVfb3V0cHV0X2RhdGEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gZmFsY29uaWRlX3BvcnRfaW5mbyA9IHsKKwkudHBfb3BzCQkJPSAmZmFsY29uaWRlX3RwX29wcywKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGZhbGNvbmlkZV9zZXR1cF9wb3J0cyhod19yZWdzX3QgKmh3KQogewogCWludCBpOwpAQCAtOTEsMTEgKzExMiwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBmYWxjb25pZGVfaW5pdCh2b2lkKQogewotCWh3X3JlZ3NfdCBodzsKLQlpZGVfaHdpZl90ICpod2lmOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKKwlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CisJaW50IHJjOwogCiAJaWYgKCFNQUNIX0lTX0FUQVJJIHx8ICFBVEFSSUhXX1BSRVNFTlQoSURFKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PREVWOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaWRlOiBGYWxjb24gSURFIGNvbnRyb2xsZXJcbiIpOwogCkBAIC0xMDYsMjMgKzEyOCwyNSBAQAogCiAJZmFsY29uaWRlX3NldHVwX3BvcnRzKCZodyk7CiAKLQlod2lmID0gaWRlX2ZpbmRfcG9ydCgpOwotCWlmIChod2lmKSB7Ci0JCXU4IGluZGV4ID0gaHdpZi0+aW5kZXg7Ci0JCXU4IGlkeFs0XSA9IHsgaW5kZXgsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQotCQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7Ci0KLQkJLyogQXRhcmkgaGFzIGEgYnl0ZS1zd2FwcGVkIElERSBpbnRlcmZhY2UgKi8KLQkJaHdpZi0+aW5wdXRfZGF0YSAgPSBmYWxjb25pZGVfaW5wdXRfZGF0YTsKLQkJaHdpZi0+b3V0cHV0X2RhdGEgPSBmYWxjb25pZGVfb3V0cHV0X2RhdGE7Ci0KLQkJaWRlX2dldF9sb2NrKE5VTEwsIE5VTEwpOwotCQlpZGVfZGV2aWNlX2FkZChpZHgsIE5VTEwpOwotCQlpZGVfcmVsZWFzZV9sb2NrKCk7CisJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKCZmYWxjb25pZGVfcG9ydF9pbmZvLCBod3MpOworCWlmIChob3N0ID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKIAl9CiAKKwlpZGVfZ2V0X2xvY2soTlVMTCwgTlVMTCk7CisJcmMgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCAmZmFsY29uaWRlX3BvcnRfaW5mbywgaHdzKTsKKwlpZGVfcmVsZWFzZV9sb2NrKCk7CisKKwlpZiAocmMpCisJCWdvdG8gZXJyX2ZyZWU7CisKIAlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCWlkZV9ob3N0X2ZyZWUoaG9zdCk7CitlcnI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKEFUQV9IRF9CQVNFLCAweDQwKTsKKwlyZXR1cm4gcmM7CiB9CiAKIG1vZHVsZV9pbml0KGZhbGNvbmlkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9nYXlsZS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKaW5kZXggN2U3NGIyMC4uZGQ1YzQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKQEAgLTMxLDYgKzMxLDggQEAKICNkZWZpbmUgR0FZTEVfQkFTRV80MDAwCTB4ZGQyMDIwCS8qIEE0MDAwL0E0MDAwVCAqLwogI2RlZmluZSBHQVlMRV9CQVNFXzEyMDAJMHhkYTAwMDAJLyogQTEyMDAvQTYwMCBhbmQgRS1NYXRyaXggNTMwICovCiAKKyNkZWZpbmUgR0FZTEVfSURFUkVHX1NJWkUJMHgyMDAwCisKICAgICAvKgogICAgICAqICBPZmZzZXRzIGZyb20gb25lIG9mIHRoZSBhYm92ZSBiYXNlcwogICAgICAqLwpAQCAtNTYsMTMgKzU4LDExIEBACiAjZGVmaW5lIEdBWUxFX05VTV9IV0lGUwkJMQogI2RlZmluZSBHQVlMRV9OVU1fUFJPQkVfSFdJRlMJR0FZTEVfTlVNX0hXSUZTCiAjZGVmaW5lIEdBWUxFX0hBU19DT05UUk9MX1JFRwkxCi0jZGVmaW5lIEdBWUxFX0lERVJFR19TSVpFCTB4MjAwMAogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfSURFRE9VQkxFUiAqLwogI2RlZmluZSBHQVlMRV9OVU1fSFdJRlMJCTIKICNkZWZpbmUgR0FZTEVfTlVNX1BST0JFX0hXSUZTCShpZGVfZG91YmxlciA/IEdBWUxFX05VTV9IV0lGUyA6IFwKIAkJCQkJICAgICAgIEdBWUxFX05VTV9IV0lGUy0xKQogI2RlZmluZSBHQVlMRV9IQVNfQ09OVFJPTF9SRUcJKCFpZGVfZG91YmxlcikKLSNkZWZpbmUgR0FZTEVfSURFUkVHX1NJWkUJKGlkZV9kb3VibGVyID8gMHgxMDAwIDogMHgyMDAwKQogCiBzdGF0aWMgaW50IGlkZV9kb3VibGVyOwogbW9kdWxlX3BhcmFtX25hbWVkKGRvdWJsZXIsIGlkZV9kb3VibGVyLCBib29sLCAwKTsKQEAgLTEyNCw4ICsxMjQsMTEgQEAKIAogc3RhdGljIGludCBfX2luaXQgZ2F5bGVfaW5pdCh2b2lkKQogeworICAgIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlLCByZXNfc3RhcnQsIHJlc19uOworICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgY3RybHBvcnQsIGlycXBvcnQ7CisgICAgaWRlX2Fja19pbnRyX3QgKmFja19pbnRyOwogICAgIGludCBhNDAwMCwgaTsKLSAgICB1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKyAgICBod19yZWdzX3QgaHdbR0FZTEVfTlVNX0hXSUZTXSwgKmh3c1tdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKICAgICBpZiAoIU1BQ0hfSVNfQU1JR0EpCiAJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNDgsMTMgKzE1MSw2IEBACiAjZW5kaWYKIAkJCSAiIik7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgR0FZTEVfTlVNX1BST0JFX0hXSUZTOyBpKyspIHsKLQl1bnNpZ25lZCBsb25nIGJhc2UsIGN0cmxwb3J0LCBpcnFwb3J0OwotCWlkZV9hY2tfaW50cl90ICphY2tfaW50cjsKLQlod19yZWdzX3QgaHc7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKLQl1bnNpZ25lZCBsb25nIHBoeXNfYmFzZSwgcmVzX3N0YXJ0LCByZXNfbjsKLQogCWlmIChhNDAwMCkgewogCSAgICBwaHlzX2Jhc2UgPSBHQVlMRV9CQVNFXzQwMDA7CiAJICAgIGlycXBvcnQgPSAodW5zaWduZWQgbG9uZylaVFdPX1ZBRERSKEdBWUxFX0lSUV80MDAwKTsKQEAgLTE2OCwzMyArMTY0LDIyIEBACiAgKiBGSVhNRTogd2Ugbm93IGhhdmUgc2VsZWN0YWJsZSBtb2RlcyBiZXR3ZWVuIG1taW8gdi9zIGlvbWlvCiAgKi8KIAotCXBoeXNfYmFzZSArPSBpKkdBWUxFX05FWFRfUE9SVDsKLQogCXJlc19zdGFydCA9ICgodW5zaWduZWQgbG9uZylwaHlzX2Jhc2UpICYgfihHQVlMRV9ORVhUX1BPUlQtMSk7CiAJcmVzX24gPSBHQVlMRV9JREVSRUdfU0laRTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlc19zdGFydCwgcmVzX24sICJJREUiKSkKLQkgICAgY29udGludWU7CisJCXJldHVybiAtRUJVU1k7CiAKLQliYXNlID0gKHVuc2lnbmVkIGxvbmcpWlRXT19WQUREUihwaHlzX2Jhc2UpOworICAgIGZvciAoaSA9IDA7IGkgPCBHQVlMRV9OVU1fUFJPQkVfSFdJRlM7IGkrKykgeworCWJhc2UgPSAodW5zaWduZWQgbG9uZylaVFdPX1ZBRERSKHBoeXNfYmFzZSArIGkgKiBHQVlMRV9ORVhUX1BPUlQpOwogCWN0cmxwb3J0ID0gR0FZTEVfSEFTX0NPTlRST0xfUkVHID8gKGJhc2UgKyBHQVlMRV9DT05UUk9MKSA6IDA7CiAKLQlnYXlsZV9zZXR1cF9wb3J0cygmaHcsIGJhc2UsIGN0cmxwb3J0LCBpcnFwb3J0LCBhY2tfaW50cik7CisJZ2F5bGVfc2V0dXBfcG9ydHMoJmh3W2ldLCBiYXNlLCBjdHJscG9ydCwgaXJxcG9ydCwgYWNrX2ludHIpOwogCi0JaHdpZiA9IGlkZV9maW5kX3BvcnQoKTsKLQlpZiAoaHdpZikgewotCSAgICB1OCBpbmRleCA9IGh3aWYtPmluZGV4OwotCi0JICAgIGlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKLQotCSAgICBpZHhbaV0gPSBpbmRleDsKLQl9IGVsc2UKLQkgICAgcmVsZWFzZV9tZW1fcmVnaW9uKHJlc19zdGFydCwgcmVzX24pOworCWh3c1tpXSA9ICZod1tpXTsKICAgICB9CiAKLSAgICBpZGVfZGV2aWNlX2FkZChpZHgsIE5VTEwpOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOwogfQogCiBtb2R1bGVfaW5pdChnYXlsZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtNGRyaXZlcy5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS00ZHJpdmVzLmMKaW5kZXggODljOGZmMC4uYzc2ZDU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS00ZHJpdmVzLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS00ZHJpdmVzLmMKQEAgLTI4LDEwICsyOCw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlkZV80ZHJpdmVzX2luaXQodm9pZCkKIHsKLQlpZGVfaHdpZl90ICpod2lmLCAqbWF0ZTsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSAweDFmMCwgY3RsID0gMHgzZjY7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0JaHdfcmVnc190IGh3OworCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsICZodywgTlVMTCwgTlVMTCB9OwogCiAJaWYgKHByb2JlXzRkcml2ZXMgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01NSwyMSArNTMsNyBAQAogCWh3LmlycSA9IDE0OwogCWh3LmNoaXBzZXQgPSBpZGVfNGRyaXZlczsKIAotCWh3aWYgPSBpZGVfZmluZF9wb3J0KCk7Ci0JaWYgKGh3aWYpIHsKLQkJaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHcpOwotCQlpZHhbMF0gPSBod2lmLT5pbmRleDsKLQl9Ci0KLQltYXRlID0gaWRlX2ZpbmRfcG9ydCgpOwotCWlmIChtYXRlKSB7Ci0JCWlkZV9pbml0X3BvcnRfaHcobWF0ZSwgJmh3KTsKLQkJaWR4WzFdID0gbWF0ZS0+aW5kZXg7Ci0JfQotCi0JaWRlX2RldmljZV9hZGQoaWR4LCAmaWRlXzRkcml2ZXNfcG9ydF9pbmZvKTsKLQotCXJldHVybiAwOworCXJldHVybiBpZGVfaG9zdF9hZGQoJmlkZV80ZHJpdmVzX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKIH0KIAogbW9kdWxlX2luaXQoaWRlXzRkcml2ZXNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKaW5kZXggMjdiMWUwYi4uMjFiZmFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwpAQCAtNzQsNyArNzQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBpZGVfaW5mb190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7Ci0JaWRlX2h3aWZfdAkJKmh3aWY7CisJc3RydWN0IGlkZV9ob3N0CQkqaG9zdDsKICAgICBpbnQJCW5kZXY7CiAgICAgZGV2X25vZGVfdAlub2RlOwogfSBpZGVfaW5mb190OwpAQCAtMTMyLDcgKzEzMiw3IEBACiBzdGF0aWMgdm9pZCBpZGVfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGlkZV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotICAgIGlkZV9od2lmX3QgKmh3aWYgPSBpbmZvLT5od2lmOworICAgIGlkZV9od2lmX3QgKmh3aWYgPSBpbmZvLT5ob3N0LT5wb3J0c1swXTsKICAgICB1bnNpZ25lZCBsb25nIGRhdGFfYWRkciwgY3RsX2FkZHI7CiAKICAgICBERUJVRygwLCAiaWRlX2RldGFjaCgweCVwKVxuIiwgbGluayk7CkBAIC0xNTcsMTMgKzE1NywxMyBAQAogCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19OT19ETUEsCiB9OwogCi1zdGF0aWMgaWRlX2h3aWZfdCAqaWRlY3NfcmVnaXN0ZXIodW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBjdGwsCitzdGF0aWMgc3RydWN0IGlkZV9ob3N0ICppZGVjc19yZWdpc3Rlcih1bnNpZ25lZCBsb25nIGlvLCB1bnNpZ25lZCBsb25nIGN0bCwKIAkJCQl1bnNpZ25lZCBsb25nIGlycSwgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSkKIHsKKyAgICBzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CiAgICAgaWRlX2h3aWZfdCAqaHdpZjsKLSAgICBod19yZWdzX3QgaHc7Ci0gICAgaW50IGk7Ci0gICAgdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisgICAgaW50IGksIHJjOworICAgIGh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIAogICAgIGlmICghcmVxdWVzdF9yZWdpb24oaW8sIDgsIERSVl9OQU1FKSkgewogCXByaW50ayhLRVJOX0VSUiAiJXM6IEkvTyByZXNvdXJjZSAweCVsWC0weCVsWCBub3QgZnJlZS5cbiIsCkBAIC0xODQsMzAgKzE4NCwyNCBAQAogICAgIGh3LmNoaXBzZXQgPSBpZGVfcGNpOwogICAgIGh3LmRldiA9ICZoYW5kbGUtPmRldjsKIAotICAgIGh3aWYgPSBpZGVfZmluZF9wb3J0KCk7Ci0gICAgaWYgKGh3aWYgPT0gTlVMTCkKKyAgICByYyA9IGlkZV9ob3N0X2FkZCgmaWRlY3NfcG9ydF9pbmZvLCBod3MsICZob3N0KTsKKyAgICBpZiAocmMpCiAJZ290byBvdXRfcmVsZWFzZTsKIAotICAgIGkgPSBod2lmLT5pbmRleDsKLQotICAgIGlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKLQotICAgIGlkeFswXSA9IGk7Ci0KLSAgICBpZGVfZGV2aWNlX2FkZChpZHgsICZpZGVjc19wb3J0X2luZm8pOworICAgIGh3aWYgPSBob3N0LT5wb3J0c1swXTsKIAogICAgIGlmIChod2lmLT5wcmVzZW50KQotCXJldHVybiBod2lmOworCXJldHVybiBob3N0OwogCiAgICAgLyogcmV0cnkgcmVnaXN0cmF0aW9uIGluIGNhc2UgZGV2aWNlIGlzIHN0aWxsIHNwaW5uaW5nIHVwICovCiAgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKIAltc2xlZXAoMTAwKTsKIAlpZGVfcG9ydF9zY2FuKGh3aWYpOwogCWlmIChod2lmLT5wcmVzZW50KQotCSAgICByZXR1cm4gaHdpZjsKKwkgICAgcmV0dXJuIGhvc3Q7CiAgICAgfQogCi0gICAgcmV0dXJuIGh3aWY7CisgICAgcmV0dXJuIGhvc3Q7CiAKIG91dF9yZWxlYXNlOgogICAgIHJlbGVhc2VfcmVnaW9uKGN0bCwgMSk7CkBAIC0yMzksNyArMjMzLDcgQEAKICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmc7CiAgICAgaW50IHBhc3MsIGxhc3RfcmV0ID0gMCwgbGFzdF9mbiA9IDAsIGlzX2ttZSA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyBpb19iYXNlLCBjdGxfYmFzZTsKLSAgICBpZGVfaHdpZl90ICpod2lmOworICAgIHN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKIAogICAgIERFQlVHKDAsICJpZGVfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIApAQCAtMzM0LDIxICszMjgsMjEgQEAKICAgICBpZiAoaXNfa21lKQogCW91dGIoMHg4MSwgY3RsX2Jhc2UrMSk7CiAKLSAgICAgaHdpZiA9IGlkZWNzX3JlZ2lzdGVyKGlvX2Jhc2UsIGN0bF9iYXNlLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGxpbmspOwotICAgICBpZiAoaHdpZiA9PSBOVUxMICYmIGxpbmstPmlvLk51bVBvcnRzMSA9PSAweDIwKSB7CisgICAgIGhvc3QgPSBpZGVjc19yZWdpc3Rlcihpb19iYXNlLCBjdGxfYmFzZSwgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBsaW5rKTsKKyAgICAgaWYgKGhvc3QgPT0gTlVMTCAmJiBsaW5rLT5pby5OdW1Qb3J0czEgPT0gMHgyMCkgewogCSAgICBvdXRiKDB4MDIsIGN0bF9iYXNlICsgMHgxMCk7Ci0JICAgIGh3aWYgPSBpZGVjc19yZWdpc3Rlcihpb19iYXNlICsgMHgxMCwgY3RsX2Jhc2UgKyAweDEwLAorCSAgICBob3N0ID0gaWRlY3NfcmVnaXN0ZXIoaW9fYmFzZSArIDB4MTAsIGN0bF9iYXNlICsgMHgxMCwKIAkJCQkgIGxpbmstPmlycS5Bc3NpZ25lZElSUSwgbGluayk7CiAgICAgfQogCi0gICAgaWYgKGh3aWYgPT0gTlVMTCkKKyAgICBpZiAoaG9zdCA9PSBOVUxMKQogCWdvdG8gZmFpbGVkOwogCiAgICAgaW5mby0+bmRldiA9IDE7Ci0gICAgc3ByaW50ZihpbmZvLT5ub2RlLmRldl9uYW1lLCAiaGQlYyIsICdhJyArIGh3aWYtPmluZGV4ICogMik7Ci0gICAgaW5mby0+bm9kZS5tYWpvciA9IGh3aWYtPm1ham9yOworICAgIHNwcmludGYoaW5mby0+bm9kZS5kZXZfbmFtZSwgImhkJWMiLCAnYScgKyBob3N0LT5wb3J0c1swXS0+aW5kZXggKiAyKTsKKyAgICBpbmZvLT5ub2RlLm1ham9yID0gaG9zdC0+cG9ydHNbMF0tPm1ham9yOwogICAgIGluZm8tPm5vZGUubWlub3IgPSAwOwotICAgIGluZm8tPmh3aWYgPSBod2lmOworICAgIGluZm8tPmhvc3QgPSBob3N0OwogICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CiAgICAgcHJpbnRrKEtFUk5fSU5GTyAiaWRlLWNzOiAlczogVnBwID0gJWQuJWRcbiIsCiAJICAgaW5mby0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5WcHAgLyAxMCwgbGluay0+Y29uZi5WcHAgJSAxMCk7CkBAIC0zNzksMTUgKzM3MywxNSBAQAogc3RhdGljIHZvaWQgaWRlX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgaWRlX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7Ci0gICAgaWRlX2h3aWZfdCAqaHdpZiA9IGluZm8tPmh3aWY7CisgICAgc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gaW5mby0+aG9zdDsKIAogICAgIERFQlVHKDAsICJpZGVfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKLSAgICBpZiAoaW5mby0+bmRldikgeworICAgIGlmIChpbmZvLT5uZGV2KQogCS8qIEZJWE1FOiBpZiB0aGlzIGZhaWxzIHdlIG5lZWQgdG8gcXVldWUgdGhlIGNsZWFudXAgc29tZWhvdwogCSAgIC0tIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHJlcXVpcmVkIFBDTUNJQSBtYWdpYyAqLwotCWlkZV91bnJlZ2lzdGVyKGh3aWYpOwotICAgIH0KKwlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7CisKICAgICBpbmZvLT5uZGV2ID0gMDsKIAogICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGVfcGxhdGZvcm0uYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGVfcGxhdGZvcm0uYwppbmRleCBhMjQ5NTYyLi4wNTFiNGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZV9wbGF0Zm9ybS5jCkBAIC01MiwxMiArNTIsMTAgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19iYXNlLCAqcmVzX2FsdCwgKnJlc19pcnE7CiAJdm9pZCBfX2lvbWVtICpiYXNlLCAqYWx0X2Jhc2U7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKIAlzdHJ1Y3QgcGF0YV9wbGF0Zm9ybV9pbmZvICpwZGF0YTsKLQl1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgbW1pbyA9IDA7Ci0JaHdfcmVnc190IGh3OworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKKwlpbnQgcmV0ID0gMCwgbW1pbyA9IDA7CisJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCXN0cnVjdCBpZGVfcG9ydF9pbmZvIGQgPSBwbGF0Zm9ybV9pZGVfcG9ydF9pbmZvOwogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKQEAgLTk0LDI4ICs5MiwxOCBAQAogCQkJcmVzX2FsdC0+c3RhcnQsIHJlc19hbHQtPmVuZCAtIHJlc19hbHQtPnN0YXJ0ICsgMSk7CiAJfQogCi0JaHdpZiA9IGlkZV9maW5kX3BvcnQoKTsKLQlpZiAoIWh3aWYpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCiAJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CiAJcGxhdF9pZGVfc2V0dXBfcG9ydHMoJmh3LCBiYXNlLCBhbHRfYmFzZSwgcGRhdGEsIHJlc19pcnEtPnN0YXJ0KTsKIAlody5kZXYgPSAmcGRldi0+ZGV2OwogCi0JaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHcpOwotCi0JaWYgKG1taW8pIHsKKwlpZiAobW1pbykKIAkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19NTUlPOwotCQlkZWZhdWx0X2h3aWZfbW1pb3BzKGh3aWYpOwotCX0KIAotCWlkeFswXSA9IGh3aWYtPmluZGV4OworCXJldCA9IGlkZV9ob3N0X2FkZCgmZCwgaHdzLCAmaG9zdCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CiAKLQlpZGVfZGV2aWNlX2FkZChpZHgsICZkKTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGh3aWYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEyNSw5ICsxMTMsOSBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBwbGF0X2lkZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gcGRldi0+ZGV2LmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAotCWlkZV91bnJlZ2lzdGVyKGh3aWYpOworCWlkZV9ob3N0X3JlbW92ZShob3N0KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jCmluZGV4IDBhNjE5NWIuLmEwYmIxNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvbWFjaWRlLmMKQEAgLTkxLDExICs5MSwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBtYWNpZGVfaW5pdCh2b2lkKQogewotCWlkZV9od2lmX3QgKmh3aWY7CiAJaWRlX2Fja19pbnRyX3QgKmFja19pbnRyOwogCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAlpbnQgaXJxOwotCWh3X3JlZ3NfdCBodzsKKwlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKIAlpZiAoIU1BQ0hfSVNfTUFDKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEyNSwxNyArMTI0LDcgQEAKIAogCW1hY2lkZV9zZXR1cF9wb3J0cygmaHcsIGJhc2UsIGlycSwgYWNrX2ludHIpOwogCi0JaHdpZiA9IGlkZV9maW5kX3BvcnQoKTsKLQlpZiAoaHdpZikgewotCQl1OCBpbmRleCA9IGh3aWYtPmluZGV4OwotCQl1OCBpZHhbNF0gPSB7IGluZGV4LCAweGZmLCAweGZmLCAweGZmIH07Ci0KLQkJaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHcpOwotCi0JCWlkZV9kZXZpY2VfYWRkKGlkeCwgTlVMTCk7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOwogfQogCiBtb2R1bGVfaW5pdChtYWNpZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvcTQwaWRlLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvcTQwaWRlLmMKaW5kZXggOWMyYjlkMC4uNGFiZDhmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L3E0MGlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9xNDBpZGUuYwpAQCAtOTYsNiArOTYsMjcgQEAKIAlvdXRzd19zd2FwdyhkYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CiB9CiAKKy8qIFE0MCBoYXMgYSBieXRlLXN3YXBwZWQgSURFIGludGVyZmFjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIHE0MGlkZV90cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkucmVhZF9zZmZfZG1hX3N0YXR1cwk9IGlkZV9yZWFkX3NmZl9kbWFfc3RhdHVzLAorCisJLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCisKKwkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKKwkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IHE0MGlkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQkJPSBxNDBpZGVfb3V0cHV0X2RhdGEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gcTQwaWRlX3BvcnRfaW5mbyA9IHsKKwkudHBfb3BzCQkJPSAmcTQwaWRlX3RwX29wcywKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogLyogCiAgKiB0aGUgc3RhdGljIGFycmF5IGlzIG5lZWRlZCB0byBoYXZlIHRoZSBuYW1lIHJlcG9ydGVkIGluIC9wcm9jL2lvcG9ydHMsCiAgKiBod2lmLT5uYW1lIHVuZm9ydHVuYXRlbHkgaXNuJ3QgYXZhaWxhYmxlIHlldApAQCAtMTExLDkgKzEzMiw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBxNDBpZGVfaW5pdCh2b2lkKQogewogICAgIGludCBpOwotICAgIGlkZV9od2lmX3QgKmh3aWY7Ci0gICAgY29uc3QgY2hhciAqbmFtZTsKLSAgICB1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKyAgICBod19yZWdzX3QgaHdbUTQwSURFX05VTV9IV0lGU10sICpod3NbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OwogCiAgICAgaWYgKCFNQUNIX0lTX1E0MCkKICAgICAgIHJldHVybiAtRU5PREVWOwpAQCAtMTIxLDkgKzE0MCw4IEBACiAgICAgcHJpbnRrKEtFUk5fSU5GTyAiaWRlOiBRNDAgSURFIGNvbnRyb2xsZXJcbiIpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFE0MElERV9OVU1fSFdJRlM7IGkrKykgewotCWh3X3JlZ3NfdCBodzsKKwljb25zdCBjaGFyICpuYW1lID0gcTQwX2lkZV9uYW1lc1tpXTsKIAotCW5hbWUgPSBxNDBfaWRlX25hbWVzW2ldOwogCWlmICghcmVxdWVzdF9yZWdpb24ocGNpZGVfYmFzZXNbaV0sIDgsIG5hbWUpKSB7CiAJCXByaW50aygiY291bGQgbm90IHJlc2VydmUgcG9ydHMgJWx4LSVseCBmb3IgJXNcbiIsCiAJCSAgICAgICBwY2lkZV9iYXNlc1tpXSxwY2lkZV9iYXNlc1tpXSs4LG5hbWUpOwpAQCAtMTM1LDI2ICsxNTMsMTMgQEAKIAkJcmVsZWFzZV9yZWdpb24ocGNpZGVfYmFzZXNbaV0sIDgpOwogCQljb250aW51ZTsKIAl9Ci0JcTQwX2lkZV9zZXR1cF9wb3J0cygmaHcsIHBjaWRlX2Jhc2VzW2ldLAotCQkJTlVMTCwKLS8vCQkJbTY4a2lkZV9pb3BzLAorCXE0MF9pZGVfc2V0dXBfcG9ydHMoJmh3W2ldLCBwY2lkZV9iYXNlc1tpXSwgTlVMTCwKIAkJCXE0MGlkZV9kZWZhdWx0X2lycShwY2lkZV9iYXNlc1tpXSkpOwogCi0JaHdpZiA9IGlkZV9maW5kX3BvcnQoKTsKLQlpZiAoaHdpZikgewotCQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7Ci0KLQkJLyogUTQwIGhhcyBhIGJ5dGUtc3dhcHBlZCBJREUgaW50ZXJmYWNlICovCi0JCWh3aWYtPmlucHV0X2RhdGEgID0gcTQwaWRlX2lucHV0X2RhdGE7Ci0JCWh3aWYtPm91dHB1dF9kYXRhID0gcTQwaWRlX291dHB1dF9kYXRhOwotCi0JCWlkeFtpXSA9IGh3aWYtPmluZGV4OwotCX0KKwlod3NbaV0gPSAmaHdbaV07CiAgICAgfQogCi0gICAgaWRlX2RldmljZV9hZGQoaWR4LCBOVUxMKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBpZGVfaG9zdF9hZGQoJnE0MGlkZV9wb3J0X2luZm8sIGh3cywgTlVMTCk7CiB9CiAKIG1vZHVsZV9pbml0KHE0MGlkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL21pcHMvYXUxeHh4LWlkZS5jIGIvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKaW5kZXggNDhkNTdjYS4uMTFiN2Y2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKQEAgLTUxOSw2ICs1MTksMjMgQEAKIAkqYXRhX3JlZ3MgPSBhaHdpZi0+cmVnYmFzZSArICgxNCA8PCBJREVfUkVHX1NISUZUKTsKIH0KIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfUElPX0RCRE1BCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgYXUxeHh4X3RwX29wcyA9IHsKKwkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCisJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKKwkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS5yZWFkX3NmZl9kbWFfc3RhdHVzCT0gaWRlX3JlYWRfc2ZmX2RtYV9zdGF0dXMsCisKKwkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gYXUxeHh4X2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGF1MXh4eF9vdXRwdXRfZGF0YSwKK307CisjZW5kaWYKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgYXUxeHh4X3BvcnRfb3BzID0gewogCS5zZXRfcGlvX21vZGUJCT0gYXUxeHh4X3NldF9waW9fbW9kZSwKIAkuc2V0X2RtYV9tb2RlCQk9IGF1aWRlX3NldF9kbWFfbW9kZSwKQEAgLTUyNiw2ICs1NDMsOSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gYXUxeHh4X3BvcnRfaW5mbyA9IHsKIAkuaW5pdF9kbWEJCT0gYXVpZGVfZGRtYV9pbml0LAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfUElPX0RCRE1BCisJLnRwX29wcwkJCT0gJmF1MXh4eF90cF9vcHMsCisjZW5kaWYKIAkucG9ydF9vcHMJCT0gJmF1MXh4eF9wb3J0X29wcywKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BCiAJLmRtYV9vcHMJCT0gJmF1MXh4eF9kbWFfb3BzLApAQCAtNTQzLDExICs1NjMsMTAgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CiAJaW50IHJldCA9IDA7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0JaHdfcmVnc190IGh3OworCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQSkKIAljaGFyICptb2RlID0gIk1XRE1BMiI7CkBAIC01ODQsMzYgKzYwMywxOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlod2lmID0gaWRlX2ZpbmRfcG9ydCgpOwotCWlmIChod2lmID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CiAJYXVpZGVfc2V0dXBfcG9ydHMoJmh3LCBhaHdpZik7CiAJaHcuaXJxID0gYWh3aWYtPmlycTsKIAlody5kZXYgPSBkZXY7CiAJaHcuY2hpcHNldCA9IGlkZV9hdTF4eHg7CiAKLQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7CisJcmV0ID0gaWRlX2hvc3RfYWRkKCZhdTF4eHhfcG9ydF9pbmZvLCBod3MsICZob3N0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAotCS8qIElmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBERE1BIGFzc2lzdGVkIGNvcGllcywKLQkgICB0aGVuIHNldCB1cCBhIGZldyBsb2NhbCBJL08gZnVuY3Rpb24gZW50cnkgcG9pbnRzIAotCSovCisJYXVpZGVfaHdpZi5od2lmID0gaG9zdC0+cG9ydHNbMF07CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX1BJT19EQkRNQQkKLQlod2lmLT5pbnB1dF9kYXRhICA9IGF1MXh4eF9pbnB1dF9kYXRhOwotCWh3aWYtPm91dHB1dF9kYXRhID0gYXUxeHh4X291dHB1dF9kYXRhOwotI2VuZGlmCi0KLQlhdWlkZV9od2lmLmh3aWYgICAgICAgICAgICAgICAgID0gaHdpZjsKLQotCWlkeFswXSA9IGh3aWYtPmluZGV4OwotCi0JaWRlX2RldmljZV9hZGQoaWR4LCAmYXUxeHh4X3BvcnRfaW5mbyk7Ci0KLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBod2lmKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAogCXByaW50ayhLRVJOX0lORk8gIkF1MXh4eCBJREUoYnVpbHRpbikgY29uZmlndXJlZCBmb3IgJXNcbiIsIG1vZGUgKTsKIApAQCAtNjI1LDEwICs2MjcsMTAgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCV9hdWlkZV9od2lmICphaHdpZiA9ICZhdWlkZV9od2lmOwogCi0JaWRlX3VucmVnaXN0ZXIoaHdpZik7CisJaWRlX2hvc3RfcmVtb3ZlKGhvc3QpOwogCiAJaW91bm1hcCgodm9pZCAqKWFod2lmLT5yZWdiYXNlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbWlwcy9zd2FybS5jIGIvZHJpdmVycy9pZGUvbWlwcy9zd2FybS5jCmluZGV4IDlmMTIxMmMuLmJhZGY3OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL21pcHMvc3dhcm0uYworKysgYi9kcml2ZXJzL2lkZS9taXBzL3N3YXJtLmMKQEAgLTcyLDEyICs3MiwxMSBAQAogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2FybV9pZGVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewotCWlkZV9od2lmX3QgKmh3aWY7CiAJdTggX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CiAJcGh5c190IG9mZnNldCwgc2l6ZTsKLQlod19yZWdzX3QgaHc7Ci0JaW50IGk7Ci0JdTggaWR4W10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKwlpbnQgaSwgcmM7CisJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCiAJaWYgKCFTSUJZVEVfSEFWRV9JREUpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTE2LDI2ICsxMTUsMTcgQEAKIAlody5pcnEgPSBLX0lOVF9HQl9JREU7CiAJaHcuY2hpcHNldCA9IGlkZV9nZW5lcmljOwogCi0JaHdpZiA9IGlkZV9maW5kX3BvcnRfc2xvdCgmc3dhcm1fcG9ydF9pbmZvKTsKLQlpZiAoaHdpZiA9PSBOVUxMKQorCXJjID0gaWRlX2hvc3RfYWRkKCZzd2FybV9wb3J0X2luZm8sIGh3cywgJmhvc3QpOworCWlmIChyYykKIAkJZ290byBlcnI7CiAKLQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7Ci0KLQkvKiBTZXR1cCBNTUlPIG9wcy4gKi8KLQlkZWZhdWx0X2h3aWZfbW1pb3BzKGh3aWYpOwotCi0JaWR4WzBdID0gaHdpZi0+aW5kZXg7Ci0KLQlpZGVfZGV2aWNlX2FkZChpZHgsICZzd2FybV9wb3J0X2luZm8pOwotCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaHdpZik7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAKIAlyZXR1cm4gMDsKIGVycjoKIAlyZWxlYXNlX3Jlc291cmNlKCZzd2FybV9pZGVfcmVzb3VyY2UpOwogCWlvdW5tYXAoYmFzZSk7Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc3dhcm1faWRlX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCmluZGV4IGFlN2E0MzIuLmZiYzQzZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYwpAQCAtMTk1LDcgKzE5NSw2IEBACiAJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NFUklBTElaRSB8CiAJCQkJICBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwKIAkJCQkgIElERV9IRkxBR19OT19EU0MgfAotCQkJCSAgSURFX0hGTEFHX0FCVVNFX1NFVF9ETUFfTU9ERSB8CiAJCQkJICBJREVfSEZMQUdfT0ZGX0JPQVJELAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLApAQCAtMjA1LDcgKzIwNCw2IEBACiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfYWVjNjJ4eCwKIAkJLnBvcnRfb3BzCT0gJmF0cDg2eF9wb3J0X29wcywKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwgSURFX0hGTEFHX05PX0FVVE9ETUEgfAotCQkJCSAgSURFX0hGTEFHX0FCVVNFX1NFVF9ETUFfTU9ERSB8CiAJCQkJICBJREVfSEZMQUdfT0ZGX0JPQVJELAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLApAQCAtMjE2LDcgKzIxNCw2IEBACiAJCS5lbmFibGViaXRzCT0ge3sweDRhLDB4MDIsMHgwMn0sIHsweDRhLDB4MDQsMHgwNH19LAogCQkucG9ydF9vcHMJPSAmYXRwODZ4X3BvcnRfb3BzLAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19OT19BVEFQSV9ETUEgfAotCQkJCSAgSURFX0hGTEFHX0FCVVNFX1NFVF9ETUFfTU9ERSB8CiAJCQkJICBJREVfSEZMQUdfTk9OX0JPT1RBQkxFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLApAQCAtMjI2LDcgKzIyMyw2IEBACiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfYWVjNjJ4eCwKIAkJLnBvcnRfb3BzCT0gJmF0cDg2eF9wb3J0X29wcywKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwKLQkJCQkgIElERV9IRkxBR19BQlVTRV9TRVRfRE1BX01PREUgfAogCQkJCSAgSURFX0hGTEFHX09GRl9CT0FSRCwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKQEAgLTIzNyw3ICsyMzMsNiBAQAogCQkuZW5hYmxlYml0cwk9IHt7MHg0YSwweDAyLDB4MDJ9LCB7MHg0YSwweDA0LDB4MDR9fSwKIAkJLnBvcnRfb3BzCT0gJmF0cDg2eF9wb3J0X29wcywKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwKLQkJCQkgIElERV9IRkxBR19BQlVTRV9TRVRfRE1BX01PREUgfAogCQkJCSAgSURFX0hGTEFHX09GRl9CT0FSRCwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jIGIvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMKaW5kZXggODBkMTljMC4uNWVmNzgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMKQEAgLTQ3MSw3ICs0NzEsMTUgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGlkZV9wY2lfZG1hX2Jhc2UoaHdpZiwgZCk7CiAKLQlpZiAoYmFzZSA9PSAwIHx8IGlkZV9wY2lfc2V0X21hc3RlcihkZXYsIGQtPm5hbWUpIDwgMCkKKwlpZiAoYmFzZSA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwlod2lmLT5kbWFfYmFzZSA9IGJhc2U7CisKKwlpZiAoaWRlX3BjaV9jaGVja19zaW1wbGV4KGh3aWYsIGQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGlkZV9wY2lfc2V0X21hc3RlcihkZXYsIGQtPm5hbWUpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKCFod2lmLT5jaGFubmVsKQpAQCAtNDgzLDcgKzQ5MSw3IEBACiAJaWYgKGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGh3aWYpKQogCQlyZXR1cm4gLTE7CiAKLQlpZGVfc2V0dXBfZG1hKGh3aWYsIGJhc2UpOworCWh3aWYtPmRtYV9vcHMgPSAmc2ZmX2RtYV9vcHM7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCmluZGV4IDBiZmNkZDAuLmVmN2Q5NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYwpAQCAtMjE4LDcgKzIxOCw2IEBACiAKICNkZWZpbmUgSURFX0hGTEFHU19BTUQgXAogCShJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVCB8IFwKLQkgSURFX0hGTEFHX0FCVVNFX1NFVF9ETUFfTU9ERSB8IFwKIAkgSURFX0hGTEFHX1BPU1RfU0VUX01PREUgfCBcCiAJIElERV9IRkxBR19JT18zMkJJVCB8IFwKIAkgSURFX0hGTEFHX1VOTUFTS19JUlFTKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jCmluZGV4IDFhZDFlMjMuLmU2YzYyMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMKQEAgLTE4MSwxMSArMTgxLDYgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY21kNjQwX2xvY2spOwogCiAvKgotICogVGhlc2UgYXJlIGluaXRpYWxpemVkIHRvIHBvaW50IGF0IHRoZSBkZXZpY2VzIHdlIGNvbnRyb2wKLSAqLwotc3RhdGljIGlkZV9od2lmX3QgICpjbWRfaHdpZjAsICpjbWRfaHdpZjE7Ci0KLS8qCiAgKiBJbnRlcmZhY2UgdG8gYWNjZXNzIGNtZDY0MHggcmVnaXN0ZXJzCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY21kNjQwX2tleTsKQEAgLTcxNyw4ICs3MTIsNyBAQAogCWludCBzZWNvbmRfcG9ydF9jbWQ2NDAgPSAwLCByYzsKIAljb25zdCBjaGFyICpidXNfdHlwZSwgKnBvcnQyOwogCXU4IGIsIGNmcjsKLQl1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQlod19yZWdzX3QgaHdbMl07CisJaHdfcmVnc190IGh3WzJdLCAqaHdzW10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIAogCWlmIChjbWQ2NDBfdmxiICYmIHByb2JlX2Zvcl9jbWQ2NDBfdmxiKCkpIHsKIAkJYnVzX3R5cGUgPSAiVkxCIjsKQEAgLTc4MSwxNSArNzc1LDEwIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiY21kNjQwOiBidWdneSBjbWQ2NDAlYyBpbnRlcmZhY2Ugb24gJXMsIGNvbmZpZz0weCUwMngiCiAJCQkgIlxuIiwgJ2EnICsgY21kNjQwX2NoaXBfdmVyc2lvbiAtIDEsIGJ1c190eXBlLCBjZnIpOwogCi0JY21kX2h3aWYwID0gaWRlX2ZpbmRfcG9ydCgpOwotCiAJLyoKIAkgKiBJbml0aWFsaXplIGRhdGEgZm9yIHByaW1hcnkgcG9ydAogCSAqLwotCWlmIChjbWRfaHdpZjApIHsKLQkJaWRlX2luaXRfcG9ydF9odyhjbWRfaHdpZjAsICZod1swXSk7Ci0JCWlkeFswXSA9IGNtZF9od2lmMC0+aW5kZXg7Ci0JfQorCWh3c1swXSA9ICZod1swXTsKIAogCS8qCiAJICogRW5zdXJlIGNvbXBhdGliaWxpdHkgYnkgYWx3YXlzIHVzaW5nIHRoZSBzbG93ZXN0IHRpbWluZ3MKQEAgLTgyOSwxMyArODE4LDkgQEAKIAkvKgogCSAqIEluaXRpYWxpemUgZGF0YSBmb3Igc2Vjb25kYXJ5IGNtZDY0MCBwb3J0LCBpZiBlbmFibGVkCiAJICovCi0JaWYgKHNlY29uZF9wb3J0X2NtZDY0MCkgewotCQljbWRfaHdpZjEgPSBpZGVfZmluZF9wb3J0KCk7Ci0JCWlmIChjbWRfaHdpZjEpIHsKLQkJCWlkZV9pbml0X3BvcnRfaHcoY21kX2h3aWYxLCAmaHdbMV0pOwotCQkJaWR4WzFdID0gY21kX2h3aWYxLT5pbmRleDsKLQkJfQotCX0KKwlpZiAoc2Vjb25kX3BvcnRfY21kNjQwKQorCQlod3NbMV0gPSAmaHdbMV07CisKIAlwcmludGsoS0VSTl9JTkZPICJjbWQ2NDA6ICVzc2VyaWFsaXplZCwgc2Vjb25kYXJ5IGludGVyZmFjZSAlc1xuIiwKIAkJCSBzZWNvbmRfcG9ydF9jbWQ2NDAgPyAiIiA6ICJub3QgIiwgcG9ydDIpOwogCkBAIC04NDMsOSArODI4LDcgQEAKIAljbWQ2NDBfZHVtcF9yZWdzKCk7CiAjZW5kaWYKIAotCWlkZV9kZXZpY2VfYWRkKGlkeCwgJmNtZDY0MF9wb3J0X2luZm8pOwotCi0JcmV0dXJuIDE7CisJcmV0dXJuIGlkZV9ob3N0X2FkZCgmY21kNjQwX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKIH0KIAogbW9kdWxlX3BhcmFtX25hbWVkKHByb2JlX3ZsYiwgY21kNjQwX3ZsYiwgYm9vbCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMKaW5kZXggY2ZhNzg0Yi4uY2U1OGJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJdW5zaWduZWQgbG9uZyBiYXNlCT0gaHdpZi0+ZG1hX2Jhc2UgLSAoaHdpZi0+Y2hhbm5lbCAqIDgpOwogCXU4IGlycV9tYXNrCQk9IGh3aWYtPmNoYW5uZWwgPyBNUkRNT0RFX0lOVFJfQ0gxIDoKIAkJCQkJCSAgTVJETU9ERV9JTlRSX0NIMDsKLQl1OCBkbWFfc3RhdAkJPSBpbmIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJdTggZG1hX3N0YXQJCT0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogCXU4IG1yZG1vZGUJCT0gaW5iKGJhc2UgKyAxKTsKIAogI2lmZGVmIERFQlVHCkBAIC0yODYsNyArMjg2LDcgQEAKIAlpbnQgaXJxX3JlZwkJPSBod2lmLT5jaGFubmVsID8gQVJUVElNMjMgOiBDRlI7CiAJdTggIGlycV9tYXNrCQk9IGh3aWYtPmNoYW5uZWwgPyBBUlRUSU0yM19JTlRSX0NIMSA6CiAJCQkJCQkgIENGUl9JTlRSX0NIMDsKLQl1OCAgZG1hX3N0YXQJCT0gaW5iKGh3aWYtPmRtYV9zdGF0dXMpOworCXU4ICBkbWFfc3RhdAkJPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CiAJdTggIGlycV9zdGF0CQk9IDA7CiAKIAkodm9pZCkgcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBpcnFfcmVnLCAmaXJxX3N0YXQpOwpAQCAtMzE3LDEzICszMTcsMTMgQEAKIAogCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwogCS8qIGdldCBETUEgc3RhdHVzICovCi0JZG1hX3N0YXQgPSBpbmIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJZG1hX3N0YXQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CiAJLyogcmVhZCBETUEgY29tbWFuZCBzdGF0ZSAqLwotCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2NvbW1hbmQpOworCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAJLyogc3RvcCBETUEgKi8KLQlvdXRiKGRtYV9jbWQgJiB+MSwgaHdpZi0+ZG1hX2NvbW1hbmQpOworCW91dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKIAkvKiBjbGVhciB0aGUgSU5UUiAmIEVSUk9SIGJpdHMgKi8KLQlvdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX3N0YXR1cyk7CisJb3V0YihkbWFfc3RhdCB8IDYsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogCS8qIGFuZCBmcmVlIGFueSBETUEgcmVzb3VyY2VzICovCiAJaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwogCS8qIHZlcmlmeSBnb29kIERNQSBzdGF0dXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYwppbmRleCA5OTJiMWNmLi5iMDNkOGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jCkBAIC02Miw4ICs2Miw2IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJaW50IGNvbnRyb2xsZXIgPSBkcml2ZS0+ZG4gPiAxID8gMSA6IDA7CiAKLQkvKiBGSVhNRTogaWYgRE1BID0gMSBkbyB3ZSBuZWVkIHRvIHNldCB0aGUgRE1BIGJpdCBoZXJlID8gKi8KLQogCS8qIDhiaXQgQ0FUL0NSVCAtIDhiaXQgY29tbWFuZCB0aW1pbmcgZm9yIGNoYW5uZWwgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg2MiArIGNvbnRyb2xsZXIsIAogCQkoY3M1NTIwX3Bpb19jbG9ja3NbcGlvXS5yZWNvdmVyeSA8PCA0KSB8CkBAIC04OSw0NiArODcsMTcgQEAKIAljczU1MjBfc2V0X3Bpb19tb2RlKGRyaXZlLCAwKTsKIH0KIAotLyoKLSAqCVdlIHdyYXAgdGhlIERNQSBhY3RpdmF0ZSB0byBzZXQgdGhlIHZkbWEgZmxhZy4gVGhpcyBpcyBuZWVkZWQKLSAqCXNvIHRoYXQgdGhlIElERSBETUEgbGF5ZXIgaXNzdWVzIFBJTyBub3QgRE1BIGNvbW1hbmRzIG92ZXIgdGhlCi0gKglETUEgY2hhbm5lbAotICoKLSAqCUFUQVBJIGlzIGhhcmRlciBzbyBkaXNhYmxlIGl0IGZvciBub3cgdXNpbmcgSURFX0hGTEFHX05PX0FUQVBJX0RNQQotICovCi0KLXN0YXRpYyB2b2lkIGNzNTUyMF9kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgb24pCi17Ci0JZHJpdmUtPnZkbWEgPSBvbjsKLQlpZGVfZG1hX2hvc3Rfc2V0KGRyaXZlLCBvbik7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGNzNTUyMF9wb3J0X29wcyA9IHsKIAkuc2V0X3Bpb19tb2RlCQk9IGNzNTUyMF9zZXRfcGlvX21vZGUsCiAJLnNldF9kbWFfbW9kZQkJPSBjczU1MjBfc2V0X2RtYV9tb2RlLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBjczU1MjBfZG1hX29wcyA9IHsKLQkuZG1hX2hvc3Rfc2V0CQk9IGNzNTUyMF9kbWFfaG9zdF9zZXQsCi0JLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKLQkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCi0JLmRtYV9lbmQJCT0gX19pZGVfZG1hX2VuZCwKLQkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCi0JLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCi19OwotCi0vKiBGSVhNRTogVkRNQSBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IGNhdXNlZCBzeXN0ZW0gaGFuZ3MgKi8KICNkZWZpbmUgREVDTEFSRV9DU19ERVYobmFtZV9zdHIpCQkJCVwKIAl7CQkJCQkJCVwKIAkJLm5hbWUJCT0gbmFtZV9zdHIsCQkJXAogCQkucG9ydF9vcHMJPSAmY3M1NTIwX3BvcnRfb3BzLAkJXAotCQkuZG1hX29wcwk9ICZjczU1MjBfZG1hX29wcywJCVwKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfSVNBX1BPUlRTIHwJCVwKLQkJCQkgIElERV9IRkxBR19DUzU1MjAgfAkJXAotCQkJCSAgSURFX0hGTEFHX05PX0FUQVBJX0RNQSB8CVwKLQkJCQkgIElERV9IRkxBR19BQlVTRV9TRVRfRE1BX01PREUsIFwKKwkJCQkgIElERV9IRkxBR19DUzU1MjAsCQlcCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAkJCVwKIAl9CiAKQEAgLTE0Niw3ICsxMTUsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgY3M1NTIwX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCA9ICZjeXJpeF9jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdOwotCXU4IGlkeFs0XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCWh3X3JlZ3NfdCBod1s0XSwgKmh3c1tdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKIAlpZGVfc2V0dXBfcGNpX25vaXNlKGRldiwgZCk7CiAKQEAgLTE2OCwxMSArMTM3LDkgQEAKIAkgKglkbyBhbGwgdGhlIGRldmljZSBzZXR1cCBmb3IgdXMKIAkgKi8KIAotCWlkZV9wY2lfc2V0dXBfcG9ydHMoZGV2LCBkLCAxNCwgJmlkeFswXSk7CisJaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsIDE0LCAmaHdbMF0sICZod3NbMF0pOwogCi0JaWRlX2RldmljZV9hZGQoaWR4LCBkKTsKLQotCXJldHVybiAwOworCXJldHVybiBpZGVfaG9zdF9hZGQoZCwgaHdzLCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNzNTUyMF9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMKaW5kZXggZGM5N2M0OC4uNTQwNGZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MzUuYwpAQCAtMTcxLDggKzE3MSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gY3M1NTM1X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSAiQ1M1NTM1IiwKIAkucG9ydF9vcHMJPSAmY3M1NTM1X3BvcnRfb3BzLAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSB8IElERV9IRkxBR19QT1NUX1NFVF9NT0RFIHwKLQkJCSAgSURFX0hGTEFHX0FCVVNFX1NFVF9ETUFfTU9ERSwKKwkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUgfCBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSwKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYwppbmRleCAwMTA2ZTJhLi5mODRiZmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jCkBAIC01NiwxMSArNTYsMTAgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBkZWxraW5fY2JfcHJvYmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBiYXNlOwotCWh3X3JlZ3NfdCBodzsKLQlpZGVfaHdpZl90ICpod2lmID0gTlVMTDsKIAlpbnQgaSwgcmM7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogCWlmIChyYykgewpAQCAtODcsMzQgKzg2LDI2IEBACiAJaHcuZGV2ID0gJmRldi0+ZGV2OwogCWh3LmNoaXBzZXQgPSBpZGVfcGNpOwkJLyogdGhpcyBlbmFibGVzIElSUSBzaGFyaW5nICovCiAKLQlod2lmID0gaWRlX2ZpbmRfcG9ydCgpOwotCWlmIChod2lmID09IE5VTEwpCisJcmMgPSBpZGVfaG9zdF9hZGQoJmRlbGtpbl9jYl9wb3J0X2luZm8sIGh3cywgJmhvc3QpOworCWlmIChyYykKIAkJZ290byBvdXRfZGlzYWJsZTsKIAotCWkgPSBod2lmLT5pbmRleDsKLQotCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKLQotCWlkeFswXSA9IGk7Ci0KLQlpZGVfZGV2aWNlX2FkZChpZHgsICZkZWxraW5fY2JfcG9ydF9pbmZvKTsKLQotCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGh3aWYpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOwogCiAJcmV0dXJuIDA7CiAKIG91dF9kaXNhYmxlOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkCiBkZWxraW5fY2JfcmVtb3ZlIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlkZV91bnJlZ2lzdGVyKGh3aWYpOworCWlkZV9ob3N0X3JlbW92ZShob3N0KTsKIAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYwppbmRleCA4NGMzNmMxLi45ZTFkMWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCkBAIC0xMjMsNyArMTIzLDYgQEAKICNkZWZpbmUgSURFX0hGTEFHU19IUFQzNFggXAogCShJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwgXAogCSBJREVfSEZMQUdfTk9fRFNDIHwgXAotCSBJREVfSEZMQUdfQUJVU0VfU0VUX0RNQV9NT0RFIHwgXAogCSBJREVfSEZMQUdfTk9fQVVUT0RNQSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGhwdDM0eF9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKaW5kZXggMzk3YzZjYi4uMWYxMTM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYwpAQCAtODAxLDkgKzgwMSw5IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlZCBieXRlcyBpbiBGSUZPXG4iLCBkcml2ZS0+bmFtZSwgYmZpZm8gJiAweDFmZik7CiAKIAkvKiBnZXQgRE1BIGNvbW1hbmQgbW9kZSAqLwotCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2NvbW1hbmQpOworCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAJLyogc3RvcCBETUEgKi8KLQlvdXRiKGRtYV9jbWQgJiB+MHgxLCBod2lmLT5kbWFfY29tbWFuZCk7CisJb3V0YihkbWFfY21kICYgfjB4MSwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAJaHB0MzcwX2NsZWFyX2VuZ2luZShkcml2ZSk7CiB9CiAKQEAgLTgxOCwxMiArODE4LDEyIEBACiBzdGF0aWMgaW50IGhwdDM3MF9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdTggIGRtYV9zdGF0CQk9IGluYihod2lmLT5kbWFfc3RhdHVzKTsKKwl1OCAgZG1hX3N0YXQJCT0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogCiAJaWYgKGRtYV9zdGF0ICYgMHgwMSkgewogCQkvKiB3YWl0IGEgbGl0dGxlICovCiAJCXVkZWxheSgyMCk7Ci0JCWRtYV9zdGF0ID0gaW5iKGh3aWYtPmRtYV9zdGF0dXMpOworCQlkbWFfc3RhdCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKIAkJaWYgKGRtYV9zdGF0ICYgMHgwMSkKIAkJCWhwdDM3MF9pcnFfdGltZW91dChkcml2ZSk7CiAJfQpAQCAtODUwLDcgKzg1MCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWRtYV9zdGF0ID0gaW5iKGh3aWYtPmRtYV9zdGF0dXMpOworCWRtYV9zdGF0ID0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogCS8qIHJldHVybiAxIGlmIElOVFIgYXNzZXJ0ZWQgKi8KIAlpZiAoZG1hX3N0YXQgJiA0KQogCQlyZXR1cm4gMTsKQEAgLTEzMjAsNyArMTMyMCwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGJhc2UgPSBpZGVfcGNpX2RtYV9iYXNlKGh3aWYsIGQpOwogCXU4IGRtYV9vbGQsIGRtYV9uZXcsIG1hc3RlcmRtYSA9IDAsIHNsYXZlZG1hID0gMDsKIAotCWlmIChiYXNlID09IDAgfHwgaWRlX3BjaV9zZXRfbWFzdGVyKGRldiwgZC0+bmFtZSkgPCAwKQorCWlmIChiYXNlID09IDApCisJCXJldHVybiAtMTsKKworCWh3aWYtPmRtYV9iYXNlID0gYmFzZTsKKworCWlmIChpZGVfcGNpX2NoZWNrX3NpbXBsZXgoaHdpZiwgZCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaWRlX3BjaV9zZXRfbWFzdGVyKGRldiwgZC0+bmFtZSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlkbWFfb2xkID0gaW5iKGJhc2UgKyAyKTsKQEAgLTEzNDYsNyArMTM1NCw3IEBACiAJaWYgKGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGh3aWYpKQogCQlyZXR1cm4gLTE7CiAKLQlpZGVfc2V0dXBfZG1hKGh3aWYsIGJhc2UpOworCWh3aWYtPmRtYV9vcHMgPSAmc2ZmX2RtYV9vcHM7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MDEsNyArMTQwOSw2IEBACiAKICNkZWZpbmUgSURFX0hGTEFHU19IUFQzWFggXAogCShJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwgXAotCSBJREVfSEZMQUdfQUJVU0VfU0VUX0RNQV9NT0RFIHwgXAogCSBJREVfSEZMQUdfT0ZGX0JPQVJEKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBocHQzeHhfcG9ydF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jIGIvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYwppbmRleCA0NWJhNzFhLi41Y2QyYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMKQEAgLTI4LDEwICsyOCw2IEBACiAgKi8KICNpbmNsdWRlIDxhc20vc3VwZXJpby5oPgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcmlvX2lkZV9zdGF0dXNbMl07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcmlvX2lkZV9zZWxlY3RbMl07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcmlvX2lkZV9kbWFfc3RhdHVzWzJdOwotCiAjZGVmaW5lIFNVUEVSSU9fSURFX01BWF9SRVRSSUVTIDI1CiAKIC8qIEJlY2F1c2Ugb2YgYSBkZWZlY3QgaW4gU3VwZXIgSS9PLCBhbGwgcmVhZHMgb2YgdGhlIFBDSSBETUEgc3RhdHVzIApAQCAtNDAsMjcgKzM2LDI4IEBACiAgKi8KIHN0YXRpYyB1OCBzdXBlcmlvX2lkZV9pbmIgKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlpZiAocG9ydCA9PSBzdXBlcmlvX2lkZV9zdGF0dXNbMF0gfHwKLQkgICAgcG9ydCA9PSBzdXBlcmlvX2lkZV9zdGF0dXNbMV0gfHwKLQkgICAgcG9ydCA9PSBzdXBlcmlvX2lkZV9zZWxlY3RbMF0gfHwKLQkgICAgcG9ydCA9PSBzdXBlcmlvX2lkZV9zZWxlY3RbMV0gfHwKLQkgICAgcG9ydCA9PSBzdXBlcmlvX2lkZV9kbWFfc3RhdHVzWzBdIHx8Ci0JICAgIHBvcnQgPT0gc3VwZXJpb19pZGVfZG1hX3N0YXR1c1sxXSkgewotCQl1OCB0bXA7Ci0JCWludCByZXRyaWVzID0gU1VQRVJJT19JREVfTUFYX1JFVFJJRVM7CisJdTggdG1wOworCWludCByZXRyaWVzID0gU1VQRVJJT19JREVfTUFYX1JFVFJJRVM7CiAKLQkJLyogcHJpbnRrKCIgWyByZWFkaW5nIHBvcnQgMHgleCB3aXRoIHJldHJ5IF0gIiwgcG9ydCk7ICovCisJLyogcHJpbnRrKCIgWyByZWFkaW5nIHBvcnQgMHgleCB3aXRoIHJldHJ5IF0gIiwgcG9ydCk7ICovCiAKLQkJZG8gewotCQkJdG1wID0gaW5iKHBvcnQpOwotCQkJaWYgKHRtcCA9PSAwKQotCQkJCXVkZWxheSg1MCk7Ci0JCX0gd2hpbGUgKHRtcCA9PSAwICYmIHJldHJpZXMtLSA+IDApOworCWRvIHsKKwkJdG1wID0gaW5iKHBvcnQpOworCQlpZiAodG1wID09IDApCisJCQl1ZGVsYXkoNTApOworCX0gd2hpbGUgKHRtcCA9PSAwICYmIHJldHJpZXMtLSA+IDApOwogCi0JCXJldHVybiB0bXA7Ci0JfQorCXJldHVybiB0bXA7Cit9CiAKLQlyZXR1cm4gaW5iKHBvcnQpOworc3RhdGljIHU4IHN1cGVyaW9fcmVhZF9zdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlyZXR1cm4gc3VwZXJpb19pZGVfaW5iKGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKK30KKworc3RhdGljIHU4IHN1cGVyaW9fcmVhZF9zZmZfZG1hX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCXJldHVybiBzdXBlcmlvX2lkZV9pbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CiB9CiAKIHN0YXRpYyB2b2lkIHN1cGVyaW9fdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCkBAIC03OCw2ICs3NSw4IEBACiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwogCW91dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAorCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCQl0Zi0+ZmVhdHVyZSA9IGluYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCiAJCXRmLT5uc2VjdCAgPSBpbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQpAQCAtMTA1LDM2ICsxMDQsMzIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzdXBlcmlvX2lkZV9pbml0X2lvcHMgKHN0cnVjdCBod2lmX3MgKmh3aWYpCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgc3VwZXJpb190cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBzdXBlcmlvX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLnJlYWRfc2ZmX2RtYV9zdGF0dXMJPSBzdXBlcmlvX3JlYWRfc2ZmX2RtYV9zdGF0dXMsCisKKwkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IHN1cGVyaW9fdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IGlkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQkJPSBpZGVfb3V0cHV0X2RhdGEsCit9OworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc3VwZXJpb19pbml0X2lvcHMoc3RydWN0IGh3aWZfcyAqaHdpZikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQl1MzIgYmFzZSwgZG1hYmFzZTsKKwl1MzIgZG1hX3N0YXQ7CiAJdTggcG9ydCA9IGh3aWYtPmNoYW5uZWwsIHRtcDsKIAotCWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgcG9ydCAqIDIpICYgfjM7Ci0JZG1hYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KSAmIH4zOwotCi0Jc3VwZXJpb19pZGVfc3RhdHVzW3BvcnRdID0gYmFzZSArIDc7Ci0Jc3VwZXJpb19pZGVfc2VsZWN0W3BvcnRdID0gYmFzZSArIDY7Ci0Jc3VwZXJpb19pZGVfZG1hX3N0YXR1c1twb3J0XSA9IGRtYWJhc2UgKyAoIXBvcnQgPyAyIDogMHhhKTsKKwlkbWFfc3RhdCA9IChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCkgJiB+MykgKyAoIXBvcnQgPyAyIDogMHhhKTsKIAogCS8qIENsZWFyIGVycm9yL2ludGVycnVwdCwgZW5hYmxlIGRtYSAqLwotCXRtcCA9IHN1cGVyaW9faWRlX2luYihzdXBlcmlvX2lkZV9kbWFfc3RhdHVzW3BvcnRdKTsKLQlvdXRiKHRtcCB8IDB4NjYsIHN1cGVyaW9faWRlX2RtYV9zdGF0dXNbcG9ydF0pOwotCi0JaHdpZi0+dGZfcmVhZCA9IHN1cGVyaW9fdGZfcmVhZDsKLQotCS8qIFdlIG5lZWQgdG8gb3ZlcnJpZGUgaW5iIHRvIHdvcmthcm91bmQgYSBTdXBlcklPIGVycmF0YSAqLwotCWh3aWYtPklOQiA9IHN1cGVyaW9faWRlX2luYjsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaW9wc19uczg3NDE1KGlkZV9od2lmX3QgKmh3aWYpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQotCWlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSAweEUpCi0JCS8qIEJ1aWx0LWluIC0gYXNzdW1lIGl0J3MgdW5kZXIgc3VwZXJpby4gKi8KLQkJc3VwZXJpb19pZGVfaW5pdF9pb3BzKGh3aWYpOworCXRtcCA9IHN1cGVyaW9faWRlX2luYihkbWFfc3RhdCk7CisJb3V0Yih0bXAgfCAweDY2LCBkbWFfc3RhdCk7CiB9CiAjZW5kaWYKIApAQCAtMjAwLDE0ICsxOTUsMTQgQEAKIAl1OCBkbWFfc3RhdCA9IDAsIGRtYV9jbWQgPSAwOwogCiAJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7Ci0JZG1hX3N0YXQgPSBod2lmLT5JTkIoaHdpZi0+ZG1hX3N0YXR1cyk7Ci0JLyogZ2V0IGRtYSBjb21tYW5kIG1vZGUgKi8KLQlkbWFfY21kID0gaHdpZi0+SU5CKGh3aWYtPmRtYV9jb21tYW5kKTsKKwlkbWFfc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zZmZfZG1hX3N0YXR1cyhod2lmKTsKKwkvKiBnZXQgRE1BIGNvbW1hbmQgbW9kZSAqLworCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAJLyogc3RvcCBETUEgKi8KLQlvdXRiKGRtYV9jbWQgJiB+MSwgaHdpZi0+ZG1hX2NvbW1hbmQpOworCW91dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKIAkvKiBmcm9tIEVSUkFUQTogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCi0JZG1hX2NtZCA9IGh3aWYtPklOQihod2lmLT5kbWFfY29tbWFuZCk7Ci0Jb3V0YihkbWFfY21kIHwgNiwgaHdpZi0+ZG1hX2NvbW1hbmQpOworCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisJb3V0YihkbWFfY21kIHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAJLyogYW5kIGZyZWUgYW55IERNQSByZXNvdXJjZXMgKi8KIAlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CiAJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwpAQCAtMjc2LDcgKzI3MSw3IEBACiAJCW91dGIoOCwgaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwogCQlkbyB7CiAJCQl1ZGVsYXkoNTApOwotCQkJc3RhdCA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7CisJCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKICAgICAgICAgICAgICAgICAJaWYgKHN0YXQgPT0gMHhmZikKICAgICAgICAgICAgICAgICAgICAgICAgIAlicmVhazsKICAgICAgICAgCX0gd2hpbGUgKChzdGF0ICYgQlVTWV9TVEFUKSAmJiAtLXRpbWVvdXQpOwpAQCAtMjkxLDcgKzI4Niw3IEBACiAJaWYgKCFod2lmLT5kbWFfYmFzZSkKIAkJcmV0dXJuOwogCi0Jb3V0YigweDYwLCBod2lmLT5kbWFfc3RhdHVzKTsKKwlvdXRiKDB4NjAsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBuczg3NDE1X3BvcnRfb3BzID0gewpAQCAtMzExLDkgKzMwNiw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBuczg3NDE1X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSAiTlM4NzQxNSIsCi0jaWZkZWYgQ09ORklHX1NVUEVSSU8KLQkuaW5pdF9pb3BzCT0gaW5pdF9pb3BzX25zODc0MTUsCi0jZW5kaWYKIAkuaW5pdF9od2lmCT0gaW5pdF9od2lmX25zODc0MTUsCiAJLnBvcnRfb3BzCT0gJm5zODc0MTVfcG9ydF9vcHMsCiAJLmRtYV9vcHMJPSAmbnM4NzQxNV9kbWFfb3BzLApAQCAtMzIzLDcgKzMxNSwxNiBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuczg3NDE1X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCAmbnM4NzQxNV9jaGlwc2V0KTsKKwlzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBkID0gbnM4NzQxNV9jaGlwc2V0OworCisjaWZkZWYgQ09ORklHX1NVUEVSSU8KKwlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gMHhFKSB7CisJCS8qIEJ1aWx0LWluIC0gYXNzdW1lIGl0J3MgdW5kZXIgc3VwZXJpby4gKi8KKwkJZC5pbml0X2lvcHMgPSBzdXBlcmlvX2luaXRfaW9wczsKKwkJZC50cF9vcHMgPSAmc3VwZXJpb190cF9vcHM7CisJfQorI2VuZGlmCisJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgJmQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbnM4NzQxNV9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKaW5kZXggZmNhODllZC4uZTU0ZGM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXVuc2lnbmVkIGxvbmcgaGlnaF8xNgk9IGh3aWYtPmV4dHJhX2Jhc2UgLSAxNjsKLQl1OCBkbWFfc3RhdAkJPSBpbmIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJdTggZG1hX3N0YXQJCT0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogCXU4IHNjMWQJCQk9IGluYihoaWdoXzE2ICsgMHgwMDFkKTsKIAogCWlmIChod2lmLT5jaGFubmVsKSB7CkBAIC0zMTIsNyArMzEyLDYgQEAKIAogI2RlZmluZSBJREVfSEZMQUdTX1BEQzIwMlhYIFwKIAkoSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8gfCBcCi0JIElERV9IRkxBR19BQlVTRV9TRVRfRE1BX01PREUgfCBcCiAJIElERV9IRkxBR19PRkZfQk9BUkQpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHBkYzIwMjQ2X3BvcnRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYyBiL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMKaW5kZXggZjA0NzM4ZC4uMGNlNDFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCkBAIC0yMjcsOSArMjI3LDkgQEAKIAl1OCBkbWFfc3RhdDsKIAogCS8qIGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwotCWRtYV9zdGF0ID0gaW5iKGh3aWYtPmRtYV9zdGF0dXMpOworCWRtYV9zdGF0ID0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogCS8qIFNob3VsZCB3ZSBmb3JjZSB0aGUgYml0IGFzIHdlbGwgPyAqLwotCW91dGIoZG1hX3N0YXQsIGh3aWYtPmRtYV9zdGF0dXMpOworCW91dGIoZG1hX3N0YXQsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogfQogCiBzdHJ1Y3QgaWNoX2xhcHRvcCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYyBiL2RyaXZlcnMvaWRlL3BjaS9zY2NfcGF0YS5jCmluZGV4IDc4OWM2NmQuLjk0YTdhYjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYwpAQCAtNjUsNyArNjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNjY19wb3J0cyB7CiAJdW5zaWduZWQgbG9uZyBjdGwsIGRtYTsKLQlpZGVfaHdpZl90ICpod2lmOyAgLyogZm9yIHJlbW92aW5nIHBvcnQgZnJvbSBzeXN0ZW0gKi8KKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CS8qIGZvciByZW1vdmluZyBwb3J0IGZyb20gc3lzdGVtICovCiB9IHNjY19wb3J0c1tNQVhfSFdJRlNdOwogCiAvKiBQSU8gdHJhbnNmZXIgbW9kZSAgdGFibGUgKi8KQEAgLTEyNiw2ICsxMjYsNDYgQEAKIAlyZXR1cm4gKHU4KWRhdGE7CiB9CiAKK3N0YXRpYyB2b2lkIHNjY19leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqaHdpZiwgdTggY21kKQoreworCW91dF9iZTMyKCh2b2lkICopaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyLCBjbWQpOworCWVpZWlvKCk7CisJaW5fYmUzMigodm9pZCAqKShod2lmLT5kbWFfYmFzZSArIDB4MDFjKSk7CisJZWllaW8oKTsKK30KKworc3RhdGljIHU4IHNjY19yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCXJldHVybiAodTgpaW5fYmUzMigodm9pZCAqKWh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKK30KKworc3RhdGljIHU4IHNjY19yZWFkX2FsdHN0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCXJldHVybiAodTgpaW5fYmUzMigodm9pZCAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KKworc3RhdGljIHU4IHNjY19yZWFkX3NmZl9kbWFfc3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJcmV0dXJuICh1OClpbl9iZTMyKCh2b2lkICopKGh3aWYtPmRtYV9iYXNlICsgNCkpOworfQorCitzdGF0aWMgdm9pZCBzY2Nfc2V0X2lycShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pCit7CisJdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7CisKKwlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCisJCWN0bCB8PSA0OworCQlvbiAmPSB+NDsKKwl9CisKKwljdGwgfD0gb24gPyAwIDogMjsKKworCW91dF9iZTMyKCh2b2lkICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIsIGN0bCk7CisJZWllaW8oKTsKKwlpbl9iZTMyKCh2b2lkICopKGh3aWYtPmRtYV9iYXNlICsgMHgwMWMpKTsKKwllaWVpbygpOworfQorCiBzdGF0aWMgdm9pZCBzY2NfaWRlX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCiB7CiAJdTE2ICpwdHIgPSAodTE2ICopYWRkcjsKQEAgLTE0OCwxNCArMTg4LDYgQEAKIAlvdXRfYmUzMigodm9pZCopcG9ydCwgYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNjY19pZGVfb3V0YnN5bmMoaWRlX2h3aWZfdCAqaHdpZiwgdTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCW91dF9iZTMyKCh2b2lkKilwb3J0LCBhZGRyKTsKLQllaWVpbygpOwotCWluX2JlMzIoKHZvaWQqKShod2lmLT5kbWFfYmFzZSArIDB4MDFjKSk7Ci0JZWllaW8oKTsKLX0KLQogc3RhdGljIHZvaWQKIHNjY19pZGVfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCiB7CkBAIC0yNjEsMTQgKzI5MywxNCBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1OCB1bml0ID0gKGRyaXZlLT5zZWxlY3QuYi51bml0ICYgMHgwMSk7Ci0JdTggZG1hX3N0YXQgPSBzY2NfaWRlX2luYihod2lmLT5kbWFfc3RhdHVzKTsKKwl1OCBkbWFfc3RhdCA9IHNjY19pZGVfaW5iKGh3aWYtPmRtYV9iYXNlICsgNCk7CiAKIAlpZiAob24pCiAJCWRtYV9zdGF0IHw9ICgxIDw8ICg1ICsgdW5pdCkpOwogCWVsc2UKIAkJZG1hX3N0YXQgJj0gfigxIDw8ICg1ICsgdW5pdCkpOwogCi0Jc2NjX2lkZV9vdXRiKGRtYV9zdGF0LCBod2lmLT5kbWFfc3RhdHVzKTsKKwlzY2NfaWRlX291dGIoZG1hX3N0YXQsIGh3aWYtPmRtYV9iYXNlICsgNCk7CiB9CiAKIC8qKgpAQCAtMzA0LDEzICszMzYsMTMgQEAKIAlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgOCksIGh3aWYtPmRtYXRhYmxlX2RtYSk7CiAKIAkvKiBzcGVjaWZ5IHIvdyAqLwotCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfY29tbWFuZCwgcmVhZGluZyk7CisJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9iYXNlLCByZWFkaW5nKTsKIAotCS8qIHJlYWQgZG1hX3N0YXR1cyBmb3IgSU5UUiAmIEVSUk9SIGZsYWdzICovCi0JZG1hX3N0YXQgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfc3RhdHVzKTsKKwkvKiByZWFkIERNQSBzdGF0dXMgZm9yIElOVFIgJiBFUlJPUiBmbGFncyAqLworCWRtYV9zdGF0ID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgNCkpOwogCiAJLyogY2xlYXIgSU5UUiAmIEVSUk9SIGZsYWdzICovCi0Jb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9zdGF0dXMsIGRtYV9zdGF0fDYpOworCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyA0KSwgZG1hX3N0YXQgfCA2KTsKIAlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMxOCwxMCArMzUwLDEwIEBACiBzdGF0aWMgdm9pZCBzY2NfZG1hX3N0YXJ0KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggZG1hX2NtZCA9IHNjY19pZGVfaW5iKGh3aWYtPmRtYV9jb21tYW5kKTsKKwl1OCBkbWFfY21kID0gc2NjX2lkZV9pbmIoaHdpZi0+ZG1hX2Jhc2UpOwogCiAJLyogc3RhcnQgRE1BICovCi0Jc2NjX2lkZV9vdXRiKGRtYV9jbWQgfCAxLCBod2lmLT5kbWFfY29tbWFuZCk7CisJc2NjX2lkZV9vdXRiKGRtYV9jbWQgfCAxLCBod2lmLT5kbWFfYmFzZSk7CiAJaHdpZi0+ZG1hID0gMTsKIAl3bWIoKTsKIH0KQEAgLTMzMywxMyArMzY1LDEzIEBACiAKIAlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAkvKiBnZXQgRE1BIGNvbW1hbmQgbW9kZSAqLwotCWRtYV9jbWQgPSBzY2NfaWRlX2luYihod2lmLT5kbWFfY29tbWFuZCk7CisJZG1hX2NtZCA9IHNjY19pZGVfaW5iKGh3aWYtPmRtYV9iYXNlKTsKIAkvKiBzdG9wIERNQSAqLwotCXNjY19pZGVfb3V0YihkbWFfY21kICYgfjEsIGh3aWYtPmRtYV9jb21tYW5kKTsKKwlzY2NfaWRlX291dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfYmFzZSk7CiAJLyogZ2V0IERNQSBzdGF0dXMgKi8KLQlkbWFfc3RhdCA9IHNjY19pZGVfaW5iKGh3aWYtPmRtYV9zdGF0dXMpOworCWRtYV9zdGF0ID0gc2NjX2lkZV9pbmIoaHdpZi0+ZG1hX2Jhc2UgKyA0KTsKIAkvKiBjbGVhciB0aGUgSU5UUiAmIEVSUk9SIGJpdHMgKi8KLQlzY2NfaWRlX291dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfc3RhdHVzKTsKKwlzY2NfaWRlX291dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfYmFzZSArIDQpOwogCS8qIHB1cmdlIERNQSBtYXBwaW5ncyAqLwogCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKIAkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCkBAIC0zNTksNiArMzkxLDcgQEAKIHN0YXRpYyBpbnQgc2NjX2RtYV9lbmQoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKKwl2b2lkIF9faW9tZW0gKmRtYV9iYXNlID0gKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9iYXNlOwogCXVuc2lnbmVkIGxvbmcgaW50c3RzX3BvcnQgPSBod2lmLT5kbWFfYmFzZSArIDB4MDE0OwogCXUzMiByZWc7CiAJaW50IGRtYV9zdGF0LCBkYXRhX2xvc3MgPSAwOwpAQCAtMzk3LDcgKzQzMCw3IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogU0VSUk9SXG4iLCBTQ0NfUEFUQV9OQU1FKTsKIAkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX1NFUlJPUnxJTlRTVFNfQk1TSU5UKTsKIAotCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9jb21tYW5kLCBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfY29tbWFuZCkgJiB+UUNIQ0RfSU9TX1NTKTsKKwkJCW91dF9iZTMyKGRtYV9iYXNlLCBpbl9iZTMyKGRtYV9iYXNlKSAmIH5RQ0hDRF9JT1NfU1MpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNDEyLDcgKzQ0NSw3IEBACiAKIAkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX1BSRVJSfElOVFNUU19CTVNJTlQpOwogCi0JCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2NvbW1hbmQsIGluX2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9jb21tYW5kKSAmIH5RQ0hDRF9JT1NfU1MpOworCQkJb3V0X2JlMzIoZG1hX2Jhc2UsIGluX2JlMzIoZG1hX2Jhc2UpICYgflFDSENEX0lPU19TUyk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC00MjAsMTIgKzQ1MywxMiBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlc3BvbnNlIEVycm9yXG4iLCBTQ0NfUEFUQV9OQU1FKTsKIAkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX1JFUlJ8SU5UU1RTX0JNU0lOVCk7CiAKLQkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfY29tbWFuZCwgaW5fYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2NvbW1hbmQpICYgflFDSENEX0lPU19TUyk7CisJCQlvdXRfYmUzMihkbWFfYmFzZSwgaW5fYmUzMihkbWFfYmFzZSkgJiB+UUNIQ0RfSU9TX1NTKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKHJlZyAmIElOVFNUU19JQ0VSUikgewotCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9jb21tYW5kLCBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfY29tbWFuZCkgJiB+UUNIQ0RfSU9TX1NTKTsKKwkJCW91dF9iZTMyKGRtYV9iYXNlLCBpbl9iZTMyKGRtYV9iYXNlKSAmIH5RQ0hDRF9JT1NfU1MpOwogCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSWxsZWdhbCBDb25maWd1cmF0aW9uXG4iLCBTQ0NfUEFUQV9OQU1FKTsKIAkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX0lDRVJSfElOVFNUU19CTVNJTlQpOwpAQCAtNTUzLDE0ICs1ODYsOSBAQAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0cyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCWlkZV9od2lmX3QgKmh3aWYgPSBOVUxMOwotCWh3X3JlZ3NfdCBodzsKLQl1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQlpbnQgaTsKLQotCWh3aWYgPSBpZGVfZmluZF9wb3J0X3Nsb3QoZCk7Ci0JaWYgKGh3aWYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJc3RydWN0IGlkZV9ob3N0ICpob3N0OworCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlpbnQgaSwgcmM7CiAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAlmb3IgKGkgPSAwOyBpIDw9IDg7IGkrKykKQEAgLTU2OCwxMSArNTk2LDEyIEBACiAJaHcuaXJxID0gZGV2LT5pcnE7CiAJaHcuZGV2ID0gJmRldi0+ZGV2OwogCWh3LmNoaXBzZXQgPSBpZGVfcGNpOwotCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKIAotCWlkeFswXSA9IGh3aWYtPmluZGV4OworCXJjID0gaWRlX2hvc3RfYWRkKGQsIGh3cywgJmhvc3QpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCi0JaWRlX2RldmljZV9hZGQoaWR4LCBkKTsKKwlwb3J0cy0+aG9zdCA9IGhvc3Q7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcwMSw2ICs3MzAsOCBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAlzY2NfaWRlX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAorCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCQl0Zi0+ZmVhdHVyZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKQEAgLTc3NCwxNiArODA1LDYgQEAKIAogCWlkZV9zZXRfaHdpZmRhdGEoaHdpZiwgcG9ydHMpOwogCi0JaHdpZi0+dGZfbG9hZCA9IHNjY190Zl9sb2FkOwotCWh3aWYtPnRmX3JlYWQgPSBzY2NfdGZfcmVhZDsKLQotCWh3aWYtPmlucHV0X2RhdGEgID0gc2NjX2lucHV0X2RhdGE7Ci0JaHdpZi0+b3V0cHV0X2RhdGEgPSBzY2Nfb3V0cHV0X2RhdGE7Ci0KLQlod2lmLT5JTkIgPSBzY2NfaWRlX2luYjsKLQlod2lmLT5PVVRCID0gc2NjX2lkZV9vdXRiOwotCWh3aWYtPk9VVEJTWU5DID0gc2NjX2lkZV9vdXRic3luYzsKLQogCWh3aWYtPmRtYV9iYXNlID0gZG1hX2Jhc2U7CiAJaHdpZi0+Y29uZmlnX2RhdGEgPSBwb3J0cy0+Y3RsOwogfQpAQCAtODI0LDExICs4NDUsNiBAQAogewogCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKIAotCXBvcnRzLT5od2lmID0gaHdpZjsKLQotCWh3aWYtPmRtYV9jb21tYW5kID0gaHdpZi0+ZG1hX2Jhc2U7Ci0JaHdpZi0+ZG1hX3N0YXR1cyA9IGh3aWYtPmRtYV9iYXNlICsgMHgwNDsKLQogCS8qIFBURVJBREQgKi8KIAlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgMHgwMTgpLCBod2lmLT5kbWF0YWJsZV9kbWEpOwogCkBAIC04MzgsNiArODU0LDIxIEBACiAJCWh3aWYtPnVsdHJhX21hc2sgPSBBVEFfVURNQTU7IC8qIDEwME1IeiAqLwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgc2NjX3RwX29wcyA9IHsKKwkuZXhlY19jb21tYW5kCQk9IHNjY19leGVjX2NvbW1hbmQsCisJLnJlYWRfc3RhdHVzCQk9IHNjY19yZWFkX3N0YXR1cywKKwkucmVhZF9hbHRzdGF0dXMJCT0gc2NjX3JlYWRfYWx0c3RhdHVzLAorCS5yZWFkX3NmZl9kbWFfc3RhdHVzCT0gc2NjX3JlYWRfc2ZmX2RtYV9zdGF0dXMsCisKKwkuc2V0X2lycQkJPSBzY2Nfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IHNjY190Zl9sb2FkLAorCS50Zl9yZWFkCQk9IHNjY190Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gc2NjX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IHNjY19vdXRwdXRfZGF0YSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHNjY19wb3J0X29wcyA9IHsKIAkuc2V0X3Bpb19tb2RlCQk9IHNjY19zZXRfcGlvX21vZGUsCiAJLnNldF9kbWFfbW9kZQkJPSBzY2Nfc2V0X2RtYV9tb2RlLApAQCAtODYxLDYgKzg5Miw3IEBACiAgICAgICAubmFtZQkJPSBuYW1lX3N0ciwJCQlcCiAgICAgICAuaW5pdF9pb3BzCT0gaW5pdF9pb3BzX3NjYywJCVwKICAgICAgIC5pbml0X2h3aWYJPSBpbml0X2h3aWZfc2NjLAkJXAorICAgICAgLnRwX29wcwkJPSAmc2NjX3RwX29wcywJCVwKICAgICAgIC5wb3J0X29wcwkJPSAmc2NjX3BvcnRfb3BzLAkJXAogICAgICAgLmRtYV9vcHMJCT0gJnNjY19kbWFfb3BzLAkJCVwKICAgICAgIC5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwJCVwKQEAgLTg5NSw3ICs5MjcsOCBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IHNjY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0cyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCWlkZV9od2lmX3QgKmh3aWYgPSBwb3J0cy0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwb3J0cy0+aG9zdDsKKwlpZGVfaHdpZl90ICpod2lmID0gaG9zdC0+cG9ydHNbMF07CiAKIAlpZiAoaHdpZi0+ZG1hdGFibGVfY3B1KSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBQUkRfRU5UUklFUyAqIFBSRF9CWVRFUywKQEAgLTkwMyw3ICs5MzYsNyBAQAogCQlod2lmLT5kbWF0YWJsZV9jcHUgPSBOVUxMOwogCX0KIAotCWlkZV91bnJlZ2lzdGVyKGh3aWYpOworCWlkZV9ob3N0X3JlbW92ZShob3N0KTsKIAogCWlvdW5tYXAoKHZvaWQqKXBvcnRzLT5kbWEpOwogCWlvdW5tYXAoKHZvaWQqKXBvcnRzLT5jdGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYwppbmRleCBhMWZiMjA4Li4xMjdjY2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYwpAQCAtMzQ5LDkgKzM0OSw3IEBACiAJLmNhYmxlX2RldGVjdAkJPSBzdndrc19jYWJsZV9kZXRlY3QsCiB9OwogCi0jZGVmaW5lIElERV9IRkxBR1NfU1ZXS1MgXAotCShJREVfSEZMQUdfTEVHQUNZX0lSUVMgfCBcCi0JIElERV9IRkxBR19BQlVTRV9TRVRfRE1BX01PREUpCisjZGVmaW5lIElERV9IRkxBR1NfU1ZXS1MgSURFX0hGTEFHX0xFR0FDWV9JUlFTCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzZXJ2ZXJ3b3Jrc19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewkvKiAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwppbmRleCBjNzlmZjViLi40MmVlZjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTggc2dpaW9jNF9JTkIodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgdTggc2dpaW9jNF9yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICopOwogCiBzdGF0aWMgaW50CiBzZ2lpb2M0X2NsZWFyaXJxKGlkZV9kcml2ZV90ICogZHJpdmUpCkBAIC0xNDEsMTggKzE0MSwxOSBAQAogCWludHJfcmVnID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKW90aGVyX2lyKTsKIAlpZiAoaW50cl9yZWcgJiAweDAzKSB7IC8qIFZhbGlkIElPQzQtSURFIGludGVycnVwdCAqLwogCQkvKgotCQkgKiBVc2luZyBzZ2lpb2M0X0lOQiB0byByZWFkIHRoZSBTdGF0dXMgcmVnaXN0ZXIgaGFzIGEgc2lkZQotCQkgKiBlZmZlY3Qgb2YgY2xlYXJpbmcgdGhlIGludGVycnVwdC4gIFRoZSBmaXJzdCByZWFkIHNob3VsZAorCQkgKiBVc2luZyBzZ2lpb2M0X3JlYWRfc3RhdHVzIHRvIHJlYWQgdGhlIFN0YXR1cyByZWdpc3RlciBoYXMgYQorCQkgKiBzaWRlIGVmZmVjdCBvZiBjbGVhcmluZyB0aGUgaW50ZXJydXB0LiAgVGhlIGZpcnN0IHJlYWQgc2hvdWxkCiAJCSAqIGNsZWFyIGl0IGlmIGl0IGlzIHNldC4gIFRoZSBzZWNvbmQgcmVhZCBzaG91bGQgcmV0dXJuCiAJCSAqIGEgImNsZWFyIiBzdGF0dXMgaWYgaXQgZ290IGNsZWFyZWQuICBJZiBub3QsIHRoZW4gc3BpbgogCQkgKiBmb3IgYSBiaXQgdHJ5aW5nIHRvIGNsZWFyIGl0LgogCQkgKi8KLQkJdTggc3RhdCA9IHNnaWlvYzRfSU5CKGlvX3BvcnRzLT5zdGF0dXNfYWRkcik7CisJCXU4IHN0YXQgPSBzZ2lpb2M0X3JlYWRfc3RhdHVzKGh3aWYpOwogCQlpbnQgY291bnQgPSAwOwotCQlzdGF0ID0gc2dpaW9jNF9JTkIoaW9fcG9ydHMtPnN0YXR1c19hZGRyKTsKKworCQlzdGF0ID0gc2dpaW9jNF9yZWFkX3N0YXR1cyhod2lmKTsKIAkJd2hpbGUgKChzdGF0ICYgMHg4MCkgJiYgKGNvdW50KysgPCAxMDApKSB7CiAJCQl1ZGVsYXkoMSk7Ci0JCQlzdGF0ID0gc2dpaW9jNF9JTkIoaW9fcG9ydHMtPnN0YXR1c19hZGRyKTsKKwkJCXN0YXQgPSBzZ2lpb2M0X3JlYWRfc3RhdHVzKGh3aWYpOwogCQl9CiAKIAkJaWYgKGludHJfcmVnICYgMHgwMikgewpAQCAtMzA0LDkgKzMwNSw5IEBACiAJaWRlX2RtYV9sb3N0X2lycShkcml2ZSk7CiB9CiAKLXN0YXRpYyB1OAotc2dpaW9jNF9JTkIodW5zaWduZWQgbG9uZyBwb3J0KQorc3RhdGljIHU4IHNnaWlvYzRfcmVhZF9zdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKIHsKKwl1bnNpZ25lZCBsb25nIHBvcnQgPSBod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcjsKIAl1OCByZWcgPSAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7CiAKIAlpZiAoKHBvcnQgJiAweEZGRikgPT0gMHgxMUMpIHsJLyogU3RhdHVzIHJlZ2lzdGVyIG9mIElPQzQgKi8KQEAgLTU0OSw2ICs1NTAsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIHNnaWlvYzRfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gc2dpaW9jNF9yZWFkX3N0YXR1cywKKwkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS5yZWFkX3NmZl9kbWFfc3RhdHVzCT0gaWRlX3JlYWRfc2ZmX2RtYV9zdGF0dXMsCisKKwkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHNnaWlvYzRfcG9ydF9vcHMgPSB7CiAJLnNldF9kbWFfbW9kZQkJPSBzZ2lpb2M0X3NldF9kbWFfbW9kZSwKIAkvKiByZXNldCBETUEgZW5naW5lLCBjbGVhciBJUlFzICovCkBAIC01NzEsNiArNTg3LDcgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmNoaXBzZXQJCT0gaWRlX3BjaSwKIAkuaW5pdF9kbWEJCT0gaWRlX2RtYV9zZ2lpb2M0LAorCS50cF9vcHMJCQk9ICZzZ2lpb2M0X3RwX29wcywKIAkucG9ydF9vcHMJCT0gJnNnaWlvYzRfcG9ydF9vcHMsCiAJLmRtYV9vcHMJCT0gJnNnaWlvYzRfZG1hX29wcywKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTywKQEAgLTU4MywxMCArNjAwLDEwIEBACiAJdW5zaWduZWQgbG9uZyBjbWRfYmFzZSwgaXJxcG9ydDsKIAl1bnNpZ25lZCBsb25nIGJhcjAsIGNtZF9waHlzX2Jhc2UsIGN0bDsKIAl2b2lkIF9faW9tZW0gKnZpcnRfYmFzZTsKLQlpZGVfaHdpZl90ICpod2lmOwotCXU4IGlkeFs0XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotCWh3X3JlZ3NfdCBodzsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CisJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCXN0cnVjdCBpZGVfcG9ydF9pbmZvIGQgPSBzZ2lpb2M0X3BvcnRfaW5mbzsKKwlpbnQgcmM7CiAKIAkvKiAgR2V0IHRoZSBDbWRCbGsgYW5kIEN0cmxCbGsgQmFzZSBSZWdpc3RlcnMgKi8KIAliYXIwID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CkBAIC02MTgsMzAgKzYzNSwyNiBAQAogCWh3LmNoaXBzZXQgPSBpZGVfcGNpOwogCWh3LmRldiA9ICZkZXYtPmRldjsKIAotCWh3aWYgPSBpZGVfZmluZF9wb3J0X3Nsb3QoJmQpOwotCWlmIChod2lmID09IE5VTEwpCi0JCWdvdG8gZXJyOwotCi0JaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHcpOwotCi0JLyogVGhlIElPQzQgdXNlcyBNTUlPIHJhdGhlciB0aGFuIFBvcnQgSU8uICovCi0JZGVmYXVsdF9od2lmX21taW9wcyhod2lmKTsKLQogCS8qIEluaXRpYWxpemluZyBjaGlwc2V0IElSUSBSZWdpc3RlcnMgKi8KIAl3cml0ZWwoMHgwMywgKHZvaWQgX19pb21lbSAqKShpcnFwb3J0ICsgSU9DNF9JTlRSX1NFVCAqIDQpKTsKIAotCWh3aWYtPklOQiA9ICZzZ2lpb2M0X0lOQjsKKwlob3N0ID0gaWRlX2hvc3RfYWxsb2MoJmQsIGh3cyk7CisJaWYgKGhvc3QgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KIAotCWlkeFswXSA9IGh3aWYtPmluZGV4OwotCi0JaWYgKGlkZV9kZXZpY2VfYWRkKGlkeCwgJmQpKQotCQlyZXR1cm4gLUVJTzsKKwlyYyA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsICZkLCBod3MpOworCWlmIChyYykKKwkJZ290byBlcnJfZnJlZTsKIAogCXJldHVybiAwOworZXJyX2ZyZWU6CisJaWRlX2hvc3RfZnJlZShob3N0KTsKIGVycjoKIAlyZWxlYXNlX21lbV9yZWdpb24oY21kX3BoeXNfYmFzZSwgSU9DNF9DTURfQ1RMX0JMS19TSVpFKTsKIAlpb3VubWFwKHZpcnRfYmFzZSk7Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKaW5kZXggNmU5ZDc2NS4uNTk2NWEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHIJPSBzaWltYWdlX3NlbHJlZyhod2lmLCAxKTsKIAogCS8qIHJldHVybiAxIGlmIElOVFIgYXNzZXJ0ZWQgKi8KLQlpZiAoaHdpZi0+SU5CKGh3aWYtPmRtYV9zdGF0dXMpICYgNCkKKwlpZiAoaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpICYgNCkKIAkJcmV0dXJuIDE7CiAKIAkvKiByZXR1cm4gMSBpZiBEZXZpY2UgSU5UUiBhc3NlcnRlZCAqLwpAQCAtMzgyLDcgKzM4Miw3IEBACiAJfQogCiAJLyogcmV0dXJuIDEgaWYgSU5UUiBhc3NlcnRlZCAqLwotCWlmIChyZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX3N0YXR1cykgJiAweDA0KQorCWlmIChyZWFkYigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKSAmIDQpCiAJCXJldHVybiAxOwogCiAJLyogcmV0dXJuIDEgaWYgRGV2aWNlIElOVFIgYXNzZXJ0ZWQgKi8KQEAgLTYwMSw3ICs2MDEsNyBAQAogCSAqCUZpbGwgaW4gdGhlIGJhc2ljIGh3aWYgYml0cwogCSAqLwogCWh3aWYtPmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX01NSU87Ci0JZGVmYXVsdF9od2lmX21taW9wcyhod2lmKTsKKwogCWh3aWYtPmh3aWZfZGF0YQk9IGFkZHI7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMgYi9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYwppbmRleCA2ZWZiZGUyLi5mODJhNjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYwpAQCAtMTU3LDkgKzE1Nyw5IEBACiAJICogV2FzIERNQSBlbmFibGVkPyAgSWYgc28sIGRpc2FibGUgaXQgLSB3ZSdyZSByZXNldHRpbmcgdGhlCiAJICogaG9zdC4gIFRoZSBJREUgbGF5ZXIgd2lsbCBiZSBoYW5kbGluZyB0aGUgZHJpdmUgZm9yIHVzLgogCSAqLwotCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2NvbW1hbmQpOworCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAJaWYgKGRtYV9jbWQgJiAxKSB7Ci0JCW91dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfY29tbWFuZCk7CisJCW91dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKIAkJcHJpbnRrKCJzbDgyYzEwNTogRE1BIHdhcyBlbmFibGVkXG4iKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jIGIvZHJpdmVycy9pZGUvcGNpL3RjODZjMDAxLmMKaW5kZXggOWI0YjI3YS4uNDc3ZTE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3RjODZjMDAxLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3RjODZjMDAxLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJaWRlX2V4cGlyeV90ICpleHBpcnkJPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwogCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAJPSBIV0dST1VQKGRyaXZlKTsKLQl1OCBkbWFfc3RhdAkJPSBpbmIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJdTggZG1hX3N0YXQJCT0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogCiAJLyogUmVzdG9yZSBhIGhpZ2hlciBsZXZlbCBkcml2ZXIncyBleHBpcnkgaGFuZGxlciBmaXJzdC4gKi8KIAlod2dyb3VwLT5leHBpcnkJPSBleHBpcnk7CkBAIC03MSwyMSArNzEsMjQgQEAKIAlpZiAoKGRtYV9zdGF0ICYgNSkgPT0gMSkgewkvKiBETUEgYWN0aXZlIGFuZCBubyBpbnRlcnJ1cHQgKi8KIAkJdW5zaWduZWQgbG9uZyBzY19iYXNlCT0gaHdpZi0+Y29uZmlnX2RhdGE7CiAJCXVuc2lnbmVkIGxvbmcgdHdjcl9wb3J0CT0gc2NfYmFzZSArIChkcml2ZS0+ZG4gPyAweDA2IDogMHgwNCk7Ci0JCXU4IGRtYV9jbWQJCT0gaW5iKGh3aWYtPmRtYV9jb21tYW5kKTsKKwkJdTggZG1hX2NtZAkJPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSBpbnRlcnJ1cHQgcG9zc2libHkgc3R1Y2ssICIKIAkJICAgICAgICJhdHRlbXB0aW5nIHJlY292ZXJ5Li4uXG4iLCBkcml2ZS0+bmFtZSk7CiAKIAkJLyogU3RvcCBETUEgKi8KLQkJb3V0YihkbWFfY21kICYgfjB4MDEsIGh3aWYtPmRtYV9jb21tYW5kKTsKKwkJb3V0YihkbWFfY21kICYgfjB4MDEsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwogCiAJCS8qIFNldHVwIHRoZSBkdW1teSBETUEgdHJhbnNmZXIgKi8KIAkJb3V0dygwLCBzY19iYXNlICsgMHgwYSk7CS8qIFNlY3RvciBDb3VudCAqLwogCQlvdXR3KDAsIHR3Y3JfcG9ydCk7CS8qIFRyYW5zZmVyIFdvcmQgQ291bnQgMSBvciAyICovCiAKIAkJLyogU3RhcnQgdGhlIGR1bW15IERNQSB0cmFuc2ZlciAqLwotCQlvdXRiKDB4MDAsIGh3aWYtPmRtYV9jb21tYW5kKTsgLyogY2xlYXIgUl9PUl9XQ1RSIGZvciB3cml0ZSAqLwotCQlvdXRiKDB4MDEsIGh3aWYtPmRtYV9jb21tYW5kKTsgLyogc2V0IFNUQVJUX1NUT1BCTSAqLworCisJCS8qIGNsZWFyIFJfT1JfV0NUUiBmb3Igd3JpdGUgKi8KKwkJb3V0YigweDAwLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKKwkJLyogc2V0IFNUQVJUX1NUT1BCTSAqLworCQlvdXRiKDB4MDEsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwogCiAJCS8qCiAJCSAqIElmIGFuIGludGVycnVwdCB3YXMgcGVuZGluZywgaXQgc2hvdWxkIGNvbWUgdGhydSBzaG9ydGx5LgpAQCAtMjAzLDggKzIwNiw3IEBACiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl90Yzg2YzAwMSwKIAkucG9ydF9vcHMJPSAmdGM4NmMwMDFfcG9ydF9vcHMsCiAJLmRtYV9vcHMJPSAmdGM4NmMwMDFfZG1hX29wcywKLQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUgfCBJREVfSEZMQUdfT0ZGX0JPQVJEIHwKLQkJCSAgSURFX0hGTEFHX0FCVVNFX1NFVF9ETUFfTU9ERSwKKwkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUgfCBJREVfSEZMQUdfT0ZGX0JPQVJELAogCS5waW9fbWFzawk9IEFUQV9QSU80LAogCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jCmluZGV4IGU0NzM4NGMuLjA5ZGM0ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMKQEAgLTQyNSw3ICs0MjUsNiBAQAogCS5lbmFibGViaXRzCT0geyB7IDB4NDAsIDB4MDIsIDB4MDIgfSwgeyAweDQwLCAweDAxLCAweDAxIH0gfSwKIAkucG9ydF9vcHMJPSAmdmlhX3BvcnRfb3BzLAogCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1BJT19OT19CTEFDS0xJU1QgfAotCQkJICBJREVfSEZMQUdfQUJVU0VfU0VUX0RNQV9NT0RFIHwKIAkJCSAgSURFX0hGTEFHX1BPU1RfU0VUX01PREUgfAogCQkJICBJREVfSEZMQUdfSU9fMzJCSVQsCiAJLnBpb19tYXNrCT0gQVRBX1BJTzUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jIGIvZHJpdmVycy9pZGUvcHBjL3BtYWMuYwppbmRleCA5M2ZiOTA2Li5jNTIxYmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKQEAgLTQ4LDYgKzQ4LDggQEAKICNpbmNsdWRlIDxhc20vbWVkaWFiYXkuaD4KICNlbmRpZgogCisjZGVmaW5lIERSVl9OQU1FICJpZGUtcG1hYyIKKwogI3VuZGVmIElERV9QTUFDX0RFQlVHCiAKICNkZWZpbmUgRE1BX1dBSVRfVElNRU9VVAk1MApAQCAtNDI0LDcgKzQyNiw5IEBACiBzdGF0aWMgdm9pZAogcG1hY19pZGVfc2VsZWN0cHJvYyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JcG1hY19pZGVfaHdpZl90KiBwbWlmID0gKHBtYWNfaWRlX2h3aWZfdCAqKUhXSUYoZHJpdmUpLT5od2lmX2RhdGE7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CisJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAKIAlpZiAocG1pZiA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC00NDQsNyArNDQ4LDkgQEAKIHN0YXRpYyB2b2lkCiBwbWFjX2lkZV9rYXVhaV9zZWxlY3Rwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlwbWFjX2lkZV9od2lmX3QqIHBtaWYgPSAocG1hY19pZGVfaHdpZl90ICopSFdJRihkcml2ZSktPmh3aWZfZGF0YTsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KKwkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAogCWlmIChwbWlmID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTQ2NSw3ICs0NzEsOSBAQAogc3RhdGljIHZvaWQKIHBtYWNfaWRlX2RvX3VwZGF0ZV90aW1pbmdzKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlwbWFjX2lkZV9od2lmX3QqIHBtaWYgPSAocG1hY19pZGVfaHdpZl90ICopSFdJRihkcml2ZSktPmh3aWZfZGF0YTsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KKwkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAogCWlmIChwbWlmID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTQ3OCwxMiArNDg2LDI2IEBACiAJCXBtYWNfaWRlX3NlbGVjdHByb2MoZHJpdmUpOwogfQogCi1zdGF0aWMgdm9pZCBwbWFjX291dGJzeW5jKGlkZV9od2lmX3QgKmh3aWYsIHU4IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCitzdGF0aWMgdm9pZCBwbWFjX2V4ZWNfY29tbWFuZChpZGVfaHdpZl90ICpod2lmLCB1OCBjbWQpCiB7Ci0JdTMyIHRtcDsKLQkKLQl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7Ci0JdG1wID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIKKwl3cml0ZWIoY21kLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKKwkodm9pZClyZWFkbCgodm9pZCBfX2lvbWVtICopKGh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcgorCQkJCSAgICAgKyBJREVfVElNSU5HX0NPTkZJRykpOworfQorCitzdGF0aWMgdm9pZCBwbWFjX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQoreworCXU4IGN0bCA9IEFUQV9ERVZDVExfT0JTOworCisJaWYgKG9uID09IDQpIHsgLyogaGFjayBmb3IgU1JTVCAqLworCQljdGwgfD0gNDsKKwkJb24gJj0gfjQ7CisJfQorCisJY3RsIHw9IG9uID8gMCA6IDI7CisKKwl3cml0ZWIoY3RsLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCSh2b2lkKXJlYWRsKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyCiAJCQkJICAgICArIElERV9USU1JTkdfQ09ORklHKSk7CiB9CiAKQEAgLTQ5MywxMSArNTE1LDEzIEBACiBzdGF0aWMgdm9pZAogcG1hY19pZGVfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQogeworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQorCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwogCXN0cnVjdCBpZGVfdGltaW5nICp0aW0gPSBpZGVfdGltaW5nX2ZpbmRfbW9kZShYRkVSX1BJT18wICsgcGlvKTsKIAl1MzIgKnRpbWluZ3MsIHQ7CiAJdW5zaWduZWQgYWNjZXNzVGlja3MsIHJlY1RpY2tzOwogCXVuc2lnbmVkIGFjY2Vzc1RpbWUsIHJlY1RpbWU7Ci0JcG1hY19pZGVfaHdpZl90KiBwbWlmID0gKHBtYWNfaWRlX2h3aWZfdCAqKUhXSUYoZHJpdmUpLT5od2lmX2RhdGE7CiAJdW5zaWduZWQgaW50IGN5Y2xlX3RpbWU7CiAKIAlpZiAocG1pZiA9PSBOVUxMKQpAQCAtNzc4LDkgKzgwMiwxMSBAQAogCiBzdGF0aWMgdm9pZCBwbWFjX2lkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKIHsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KKwkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAlpbnQgdW5pdCA9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOwogCWludCByZXQgPSAwOwotCXBtYWNfaWRlX2h3aWZfdCogcG1pZiA9IChwbWFjX2lkZV9od2lmX3QgKilIV0lGKGRyaXZlKS0+aHdpZl9kYXRhOwogCXUzMiAqdGltaW5ncywgKnRpbWluZ3MyLCB0bFsyXTsKIAogCXRpbWluZ3MgPSAmcG1pZi0+dGltaW5nc1t1bml0XTsKQEAgLTg1MiwxMSArODc4LDggQEAKIC8qIFN1c3BlbmQgY2FsbCBiYWNrLCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoZSBjaGlsZCBkZXZpY2VzCiAgKiBoYXZlIGFjdHVhbGx5IGJlZW4gc3VzcGVuZGVkCiAgKi8KLXN0YXRpYyBpbnQKLXBtYWNfaWRlX2RvX3N1c3BlbmQoaWRlX2h3aWZfdCAqaHdpZikKK3N0YXRpYyBpbnQgcG1hY19pZGVfZG9fc3VzcGVuZChwbWFjX2lkZV9od2lmX3QgKnBtaWYpCiB7Ci0JcG1hY19pZGVfaHdpZl90ICpwbWlmID0gKHBtYWNfaWRlX2h3aWZfdCAqKWh3aWYtPmh3aWZfZGF0YTsKLQkKIAkvKiBXZSBjbGVhciB0aGUgdGltaW5ncyAqLwogCXBtaWYtPnRpbWluZ3NbMF0gPSAwOwogCXBtaWYtPnRpbWluZ3NbMV0gPSAwOwpAQCAtODg0LDExICs5MDcsOCBAQAogLyogUmVzdW1lIGNhbGwgYmFjaywgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGNoaWxkIGRldmljZXMKICAqIGFyZSByZXN1bWVkCiAgKi8KLXN0YXRpYyBpbnQKLXBtYWNfaWRlX2RvX3Jlc3VtZShpZGVfaHdpZl90ICpod2lmKQorc3RhdGljIGludCBwbWFjX2lkZV9kb19yZXN1bWUocG1hY19pZGVfaHdpZl90ICpwbWlmKQogewotCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9IChwbWFjX2lkZV9od2lmX3QgKilod2lmLT5od2lmX2RhdGE7Ci0JCiAJLyogSGFyZCByZXNldCAmIHJlLWVuYWJsZSBjb250cm9sbGVyIChkbyB3ZSByZWFsbHkgbmVlZCB0byByZXNldCA/IC1CZW5IKSAqLwogCWlmICghcG1pZi0+bWVkaWFiYXkpIHsKIAkJcHBjX21kLmZlYXR1cmVfY2FsbChQTUFDX0ZUUl9JREVfUkVTRVQsIHBtaWYtPm5vZGUsIHBtaWYtPmFhcGxfYnVzX2lkLCAxKTsKQEAgLTkxNiw3ICs5MzYsOCBAQAogCiBzdGF0aWMgdTggcG1hY19pZGVfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JcG1hY19pZGVfaHdpZl90ICpwbWlmID0gKHBtYWNfaWRlX2h3aWZfdCAqKWlkZV9nZXRfaHdpZmRhdGEoaHdpZik7CisJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KKwkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcG1pZi0+bm9kZTsKIAljb25zdCBjaGFyICpjYWJsZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNhYmxlLXR5cGUiLCBOVUxMKTsKIApAQCAtOTM2LDcgKzk1Nyw0MCBAQAogCXJldHVybiBBVEFfQ0JMX1BBVEE0MDsKIH0KIAorc3RhdGljIHZvaWQgcG1hY19pZGVfaW5pdF9kZXYoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQorCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOworCisJaWYgKHBtaWYtPm1lZGlhYmF5KSB7CisjaWZkZWYgQ09ORklHX1BNQUNfTUVESUFCQVkKKwkJaWYgKGNoZWNrX21lZGlhX2JheV9ieV9iYXNlKHBtaWYtPnJlZ2Jhc2UsIE1CX0NEKSA9PSAwKSB7CisJCQlkcml2ZS0+bm9wcm9iZSA9IDA7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlkcml2ZS0+bm9wcm9iZSA9IDE7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgcG1hY190cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBwbWFjX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLnJlYWRfc2ZmX2RtYV9zdGF0dXMJPSBpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cywKKworCS5zZXRfaXJxCQk9IHBtYWNfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHBtYWNfaWRlX2F0YTZfcG9ydF9vcHMgPSB7CisJLmluaXRfZGV2CQk9IHBtYWNfaWRlX2luaXRfZGV2LAogCS5zZXRfcGlvX21vZGUJCT0gcG1hY19pZGVfc2V0X3Bpb19tb2RlLAogCS5zZXRfZG1hX21vZGUJCT0gcG1hY19pZGVfc2V0X2RtYV9tb2RlLAogCS5zZWxlY3Rwcm9jCQk9IHBtYWNfaWRlX2thdWFpX3NlbGVjdHByb2MsCkBAIC05NDQsNiArOTk4LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHBtYWNfaWRlX2F0YTRfcG9ydF9vcHMgPSB7CisJLmluaXRfZGV2CQk9IHBtYWNfaWRlX2luaXRfZGV2LAogCS5zZXRfcGlvX21vZGUJCT0gcG1hY19pZGVfc2V0X3Bpb19tb2RlLAogCS5zZXRfZG1hX21vZGUJCT0gcG1hY19pZGVfc2V0X2RtYV9tb2RlLAogCS5zZWxlY3Rwcm9jCQk9IHBtYWNfaWRlX3NlbGVjdHByb2MsCkBAIC05NTEsNiArMTAwNiw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBwbWFjX2lkZV9wb3J0X29wcyA9IHsKKwkuaW5pdF9kZXYJCT0gcG1hY19pZGVfaW5pdF9kZXYsCiAJLnNldF9waW9fbW9kZQkJPSBwbWFjX2lkZV9zZXRfcGlvX21vZGUsCiAJLnNldF9kbWFfbW9kZQkJPSBwbWFjX2lkZV9zZXRfZG1hX21vZGUsCiAJLnNlbGVjdHByb2MJCT0gcG1hY19pZGVfc2VsZWN0cHJvYywKQEAgLTk1OSwxMiArMTAxNSwxNCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBwbWFjX2RtYV9vcHM7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBwbWFjX3BvcnRfaW5mbyA9IHsKKwkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmluaXRfZG1hCQk9IHBtYWNfaWRlX2luaXRfZG1hLAogCS5jaGlwc2V0CQk9IGlkZV9wbWFjLAorCS50cF9vcHMJCQk9ICZwbWFjX3RwX29wcywKKwkucG9ydF9vcHMJCT0gJnBtYWNfaWRlX3BvcnRfb3BzLAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQV9QTUFDCiAJLmRtYV9vcHMJCT0gJnBtYWNfZG1hX29wcywKICNlbmRpZgotCS5wb3J0X29wcwkJPSAmcG1hY19pZGVfcG9ydF9vcHMsCiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX1NFVF9QSU9fTU9ERV9LRUVQX0RNQSB8CiAJCQkJICBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSB8CiAJCQkJICBJREVfSEZMQUdfTU1JTyB8CkBAIC05NzcsMTMgKzEwMzUsMTUgQEAKICAqIFNldHVwLCByZWdpc3RlciAmIHByb2JlIGFuIElERSBjaGFubmVsIGRyaXZlbiBieSB0aGlzIGRyaXZlciwgdGhpcyBpcwogICogY2FsbGVkIGJ5IG9uZSBvZiB0aGUgMiBwcm9iZSBmdW5jdGlvbnMgKG1hY2lvIG9yIFBDSSkuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1wbWFjX2lkZV9zZXR1cF9kZXZpY2UocG1hY19pZGVfaHdpZl90ICpwbWlmLCBpZGVfaHdpZl90ICpod2lmLCBod19yZWdzX3QgKmh3KQorc3RhdGljIGludCBfX2RldmluaXQgcG1hY19pZGVfc2V0dXBfZGV2aWNlKHBtYWNfaWRlX2h3aWZfdCAqcG1pZiwgaHdfcmVnc190ICpodykKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcG1pZi0+bm9kZTsKIAljb25zdCBpbnQgKmJpZHA7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJc3RydWN0IGlkZV9ob3N0ICpob3N0OworCWlkZV9od2lmX3QgKmh3aWY7CisJaHdfcmVnc190ICpod3NbXSA9IHsgaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIAlzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBkID0gcG1hY19wb3J0X2luZm87CisJaW50IHJjOwogCiAJcG1pZi0+YnJva2VuX2RtYSA9IHBtaWYtPmJyb2tlbl9kbWFfd2FybiA9IDA7CiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAic2hhc3RhLWF0YSIpKSB7CkBAIC0xMDU0LDMxICsxMTE0LDE2IEBACiAJCW1zbGVlcChqaWZmaWVzX3RvX21zZWNzKElERV9XQUtFVVBfREVMQVkpKTsKIAl9CiAKLQkvKiBTZXR1cCBNTUlPIG9wcyAqLwotCWRlZmF1bHRfaHdpZl9tbWlvcHMoaHdpZik7Ci0gICAgICAgCWh3aWYtPk9VVEJTWU5DID0gcG1hY19vdXRic3luYzsKKwlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IEZvdW5kIEFwcGxlICVzIGNvbnRyb2xsZXIgKCVzKSwgIgorCQkJICJidXMgSUQgJWQlcywgaXJxICVkXG4iLCBtb2RlbF9uYW1lW3BtaWYtPmtpbmRdLAorCQkJIHBtaWYtPm1kZXYgPyAibWFjaW8iIDogIlBDSSIsIHBtaWYtPmFhcGxfYnVzX2lkLAorCQkJIHBtaWYtPm1lZGlhYmF5ID8gIiAobWVkaWFiYXkpIiA6ICIiLCBody0+aXJxKTsKIAotCWh3aWYtPmh3aWZfZGF0YSA9IHBtaWY7Ci0JaWRlX2luaXRfcG9ydF9odyhod2lmLCBodyk7CisJcmMgPSBpZGVfaG9zdF9hZGQoJmQsIGh3cywgJmhvc3QpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiaWRlJWQ6IEZvdW5kIEFwcGxlICVzIGNvbnRyb2xsZXIsIGJ1cyBJRCAlZCVzLCBpcnEgJWRcbiIsCi0JICAgICAgIGh3aWYtPmluZGV4LCBtb2RlbF9uYW1lW3BtaWYtPmtpbmRdLCBwbWlmLT5hYXBsX2J1c19pZCwKLQkgICAgICAgcG1pZi0+bWVkaWFiYXkgPyAiIChtZWRpYWJheSkiIDogIiIsIGh3aWYtPmlycSk7Ci0KLQlpZiAocG1pZi0+bWVkaWFiYXkpIHsKLSNpZmRlZiBDT05GSUdfUE1BQ19NRURJQUJBWQotCQlpZiAoY2hlY2tfbWVkaWFfYmF5X2J5X2Jhc2UocG1pZi0+cmVnYmFzZSwgTUJfQ0QpKSB7Ci0jZWxzZQotCQlpZiAoMSkgewotI2VuZGlmCi0JCQlod2lmLT5kcml2ZXNbMF0ubm9wcm9iZSA9IDE7Ci0JCQlod2lmLT5kcml2ZXNbMV0ubm9wcm9iZSA9IDE7Ci0JCX0KLQl9Ci0KLQlpZHhbMF0gPSBod2lmLT5pbmRleDsKLQotCWlkZV9kZXZpY2VfYWRkKGlkeCwgJmQpOworCWh3aWYgPSBob3N0LT5wb3J0c1swXTsKIAogCXJldHVybiAwOwogfQpAQCAtMTEwMSw3ICsxMTQ2LDYgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJdW5zaWduZWQgbG9uZyByZWdiYXNlOwotCWlkZV9od2lmX3QgKmh3aWY7CiAJcG1hY19pZGVfaHdpZl90ICpwbWlmOwogCWludCBpcnEsIHJjOwogCWh3X3JlZ3NfdCBodzsKQEAgLTExMTAsMTQgKzExNTQsNiBAQAogCWlmIChwbWlmID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaHdpZiA9IGlkZV9maW5kX3BvcnQoKTsKLQlpZiAoaHdpZiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaWRlLXBtYWM6IE1hY0lPIGludGVyZmFjZSBhdHRhY2ggd2l0aCBubyBzbG90XG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICIgICAgICAgICAgJXNcbiIsIG1kZXYtPm9mZGV2Lm5vZGUtPmZ1bGxfbmFtZSk7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBvdXRfZnJlZV9wbWlmOwotCX0KLQogCWlmIChtYWNpb19yZXNvdXJjZV9jb3VudChtZGV2KSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlkZS1wbWFjOiBubyBhZGRyZXNzIGZvciAlc1xuIiwKIAkJCQkgICAgbWRldi0+b2ZkZXYubm9kZS0+ZnVsbF9uYW1lKTsKQEAgLTExNjQsNyArMTIwMCw3IEBACiAJfSBlbHNlCiAJCXBtaWYtPmRtYV9yZWdzID0gTlVMTDsKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUFfUE1BQyAqLwotCWRldl9zZXRfZHJ2ZGF0YSgmbWRldi0+b2ZkZXYuZGV2LCBod2lmKTsKKwlkZXZfc2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldiwgcG1pZik7CiAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAlwbWFjX2lkZV9pbml0X3BvcnRzKCZodywgcG1pZi0+cmVnYmFzZSk7CkBAIC0xMTcyLDcgKzEyMDgsNyBAQAogCWh3LmRldiA9ICZtZGV2LT5idXMtPnBkZXYtPmRldjsKIAlody5wYXJlbnQgPSAmbWRldi0+b2ZkZXYuZGV2OwogCi0JcmMgPSBwbWFjX2lkZV9zZXR1cF9kZXZpY2UocG1pZiwgaHdpZiwgJmh3KTsKKwlyYyA9IHBtYWNfaWRlX3NldHVwX2RldmljZShwbWlmLCAmaHcpOwogCWlmIChyYyAhPSAwKSB7CiAJCS8qIFRoZSBpbnRlZmFjZSBpcyByZWxlYXNlZCB0byB0aGUgY29tbW9uIElERSBsYXllciAqLwogCQlkZXZfc2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldiwgTlVMTCk7CkBAIC0xMTk1LDEyICsxMjMxLDEzIEBACiBzdGF0aWMgaW50CiBwbWFjX2lkZV9tYWNpb19zdXNwZW5kKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCWlkZV9od2lmX3QJKmh3aWYgPSAoaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YSgmbWRldi0+b2ZkZXYuZGV2KTsKLQlpbnQJCXJjID0gMDsKKwlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQorCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKCZtZGV2LT5vZmRldi5kZXYpOworCWludCByYyA9IDA7CiAKIAlpZiAobWVzZy5ldmVudCAhPSBtZGV2LT5vZmRldi5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQKIAkJCSYmIChtZXNnLmV2ZW50ICYgUE1fRVZFTlRfU0xFRVApKSB7Ci0JCXJjID0gcG1hY19pZGVfZG9fc3VzcGVuZChod2lmKTsKKwkJcmMgPSBwbWFjX2lkZV9kb19zdXNwZW5kKHBtaWYpOwogCQlpZiAocmMgPT0gMCkKIAkJCW1kZXYtPm9mZGV2LmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1lc2c7CiAJfQpAQCAtMTIxMSwxMSArMTI0OCwxMiBAQAogc3RhdGljIGludAogcG1hY19pZGVfbWFjaW9fcmVzdW1lKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYpCiB7Ci0JaWRlX2h3aWZfdAkqaHdpZiA9IChpZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKCZtZGV2LT5vZmRldi5kZXYpOwotCWludAkJcmMgPSAwOwotCQorCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CisJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldik7CisJaW50IHJjID0gMDsKKwogCWlmIChtZGV2LT5vZmRldi5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfT04pIHsKLQkJcmMgPSBwbWFjX2lkZV9kb19yZXN1bWUoaHdpZik7CisJCXJjID0gcG1hY19pZGVfZG9fcmVzdW1lKHBtaWYpOwogCQlpZiAocmMgPT0gMCkKIAkJCW1kZXYtPm9mZGV2LmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJfQpAQCAtMTIyOSw3ICsxMjY3LDYgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBwbWFjX2lkZV9wY2lfYXR0YWNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZjsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CkBAIC0xMjQ3LDE0ICsxMjg0LDYgQEAKIAlpZiAocG1pZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWh3aWYgPSBpZGVfZmluZF9wb3J0KCk7Ci0JaWYgKGh3aWYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImlkZS1wbWFjOiBQQ0kgaW50ZXJmYWNlIGF0dGFjaCB3aXRoIG5vIHNsb3RcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIiAgICAgICAgICAlc1xuIiwgbnAtPmZ1bGxfbmFtZSk7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBvdXRfZnJlZV9wbWlmOwotCX0KLQogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpZGUtcG1hYzogQ2FuJ3QgZW5hYmxlIFBDSSBkZXZpY2UgZm9yICIKIAkJCQkgICAgIiVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKQEAgLTEyODQsMTQgKzEzMTMsMTQgQEAKIAlwbWlmLT5rYXVhaV9mY3IgPSBiYXNlOwogCXBtaWYtPmlycSA9IHBkZXYtPmlycTsKIAotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBod2lmKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcG1pZik7CiAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAlwbWFjX2lkZV9pbml0X3BvcnRzKCZodywgcG1pZi0+cmVnYmFzZSk7CiAJaHcuaXJxID0gcGRldi0+aXJxOwogCWh3LmRldiA9ICZwZGV2LT5kZXY7CiAKLQlyYyA9IHBtYWNfaWRlX3NldHVwX2RldmljZShwbWlmLCBod2lmLCAmaHcpOworCXJjID0gcG1hY19pZGVfc2V0dXBfZGV2aWNlKHBtaWYsICZodyk7CiAJaWYgKHJjICE9IDApIHsKIAkJLyogVGhlIGludGVmYWNlIGlzIHJlbGVhc2VkIHRvIHRoZSBjb21tb24gSURFIGxheWVyICovCiAJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKQEAgLTEzMTAsMTIgKzEzMzksMTIgQEAKIHN0YXRpYyBpbnQKIHBtYWNfaWRlX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlpZGVfaHdpZl90CSpod2lmID0gKGlkZV9od2lmX3QgKilwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JaW50CQlyYyA9IDA7Ci0JCisJcG1hY19pZGVfaHdpZl90ICpwbWlmID0gKHBtYWNfaWRlX2h3aWZfdCAqKXBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmMgPSAwOworCiAJaWYgKG1lc2cuZXZlbnQgIT0gcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50CiAJCQkmJiAobWVzZy5ldmVudCAmIFBNX0VWRU5UX1NMRUVQKSkgewotCQlyYyA9IHBtYWNfaWRlX2RvX3N1c3BlbmQoaHdpZik7CisJCXJjID0gcG1hY19pZGVfZG9fc3VzcGVuZChwbWlmKTsKIAkJaWYgKHJjID09IDApCiAJCQlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBtZXNnOwogCX0KQEAgLTEzMjYsMTEgKzEzNTUsMTEgQEAKIHN0YXRpYyBpbnQKIHBtYWNfaWRlX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JaWRlX2h3aWZfdAkqaHdpZiA9IChpZGVfaHdpZl90ICopcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWludAkJcmMgPSAwOwotCQorCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9IChwbWFjX2lkZV9od2lmX3QgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJjID0gMDsKKwogCWlmIChwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfT04pIHsKLQkJcmMgPSBwbWFjX2lkZV9kb19yZXN1bWUoaHdpZik7CisJCXJjID0gcG1hY19pZGVfZG9fcmVzdW1lKHBtaWYpOwogCQlpZiAocmMgPT0gMCkKIAkJCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJfQpAQCAtMTQyMSwxMCArMTQ1MCwxMSBAQAogc3RhdGljIGludAogcG1hY19pZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CisJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAJc3RydWN0IGRiZG1hX2NtZCAqdGFibGU7CiAJaW50IGksIGNvdW50ID0gMDsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7Ci0JcG1hY19pZGVfaHdpZl90KiBwbWlmID0gKHBtYWNfaWRlX2h3aWZfdCAqKWh3aWYtPmh3aWZfZGF0YTsKIAl2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfcmVncyBfX2lvbWVtICpkbWEgPSBwbWlmLT5kbWFfcmVnczsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCB3ciA9IChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpOwpAQCAtMTUyMCw3ICsxNTUwLDggQEAKIHBtYWNfaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCXBtYWNfaWRlX2h3aWZfdCogcG1pZiA9IChwbWFjX2lkZV9od2lmX3QgKilod2lmLT5od2lmX2RhdGE7CisJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KKwkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7CiAJdTggdW5pdCA9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOwogCXU4IGF0YTQ7CkBAIC0xNTYwLDcgKzE1OTEsOSBAQAogc3RhdGljIHZvaWQKIHBtYWNfaWRlX2RtYV9zdGFydChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JcG1hY19pZGVfaHdpZl90KiBwbWlmID0gKHBtYWNfaWRlX2h3aWZfdCAqKUhXSUYoZHJpdmUpLT5od2lmX2RhdGE7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CisJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqZG1hOwogCiAJZG1hID0gcG1pZi0+ZG1hX3JlZ3M7CkBAIC0xNTc2LDcgKzE2MDksOSBAQAogc3RhdGljIGludAogcG1hY19pZGVfZG1hX2VuZCAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXBtYWNfaWRlX2h3aWZfdCogcG1pZiA9IChwbWFjX2lkZV9od2lmX3QgKilIV0lGKGRyaXZlKS0+aHdpZl9kYXRhOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQorCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYTsKIAl1MzIgZHN0YXQ7CiAJCkBAIC0xNjA0LDcgKzE2MzksOSBAQAogc3RhdGljIGludAogcG1hY19pZGVfZG1hX3Rlc3RfaXJxIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JcG1hY19pZGVfaHdpZl90KiBwbWlmID0gKHBtYWNfaWRlX2h3aWZfdCAqKUhXSUYoZHJpdmUpLT5od2lmX2RhdGE7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CisJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqZG1hOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzLCB0aW1lb3V0OwogCkBAIC0xNjY0LDcgKzE3MDEsOSBAQAogc3RhdGljIHZvaWQKIHBtYWNfaWRlX2RtYV9sb3N0X2lycSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXBtYWNfaWRlX2h3aWZfdCogcG1pZiA9IChwbWFjX2lkZV9od2lmX3QgKilIV0lGKGRyaXZlKS0+aHdpZl9kYXRhOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQorCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYTsKIAl1bnNpZ25lZCBsb25nIHN0YXR1czsKIApAQCAtMTY5NCw3ICsxNzMzLDggQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBtYWNfaWRlX2luaXRfZG1hKGlkZV9od2lmX3QgKmh3aWYsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQogewotCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9IChwbWFjX2lkZV9od2lmX3QgKilod2lmLT5od2lmX2RhdGE7CisJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KKwkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCiAJLyogV2Ugd29uJ3QgbmVlZCBwY2lfZGV2IGlmIHdlIHN3aXRjaCB0byBnZW5lcmljIGNvbnNpc3RlbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggNjVmYzA4Yi4uYjE1Y2FkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTczLDE1ICs3MywxMiBAQAogICoJQGQ6IElERSBwb3J0IGluZm8KICAqCiAgKglGZXRjaCB0aGUgRE1BIEJ1cy1NYXN0ZXItSS9PLUJhc2UtQWRkcmVzcyAoQk1JQkEpIGZyb20gUENJIHNwYWNlLgotICoJV2hlcmUgYSBkZXZpY2UgaGFzIGEgcGFydG5lciB0aGF0IGlzIGFscmVhZHkgaW4gRE1BIG1vZGUgd2UgY2hlY2sKLSAqCWFuZCBlbmZvcmNlIElERSBzaW1wbGV4IHJ1bGVzLgogICovCiAKIHVuc2lnbmVkIGxvbmcgaWRlX3BjaV9kbWFfYmFzZShpZGVfaHdpZl90ICpod2lmLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSAwOwotCXU4IGRtYV9zdGF0ID0gMDsKIAogCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCiAJCXJldHVybiBod2lmLT5kbWFfYmFzZTsKQEAgLTEwMiwxMSArOTksMTkgQEAKIAlpZiAoaHdpZi0+Y2hhbm5lbCkKIAkJZG1hX2Jhc2UgKz0gODsKIAotCWlmIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0NTNTUyMCkKKwlyZXR1cm4gZG1hX2Jhc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcGNpX2RtYV9iYXNlKTsKKworaW50IGlkZV9wY2lfY2hlY2tfc2ltcGxleChpZGVfaHdpZl90ICpod2lmLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKK3sKKwl1OCBkbWFfc3RhdDsKKworCWlmIChkLT5ob3N0X2ZsYWdzICYgKElERV9IRkxBR19NTUlPIHwgSURFX0hGTEFHX0NTNTUyMCkpCiAJCWdvdG8gb3V0OwogCiAJaWYgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQ0xFQVJfU0lNUExFWCkgewotCQlpZGVfcGNpX2NsZWFyX3NpbXBsZXgoZG1hX2Jhc2UsIGQtPm5hbWUpOworCQlpZGVfcGNpX2NsZWFyX3NpbXBsZXgoaHdpZi0+ZG1hX2Jhc2UsIGQtPm5hbWUpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEyMCwxNSArMTI1LDE1IEBACiAJICogd2UgdHVuZSB0aGUgZHJpdmUgdGhlbiB0cnkgdG8gZ3JhYiBETUEgb3duZXJzaGlwIGlmIHdlIHdhbnQgdG8gYmUKIAkgKiB0aGUgRE1BIGVuZC4gIFRoaXMgaGFzIHRvIGJlIGJlY29tZSBkeW5hbWljIHRvIGhhbmRsZSBob3QtcGx1Zy4KIAkgKi8KLQlkbWFfc3RhdCA9IGh3aWYtPklOQihkbWFfYmFzZSArIDIpOworCWRtYV9zdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOwogCWlmICgoZG1hX3N0YXQgJiAweDgwKSAmJiBod2lmLT5tYXRlICYmIGh3aWYtPm1hdGUtPmRtYV9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzaW1wbGV4IGRldmljZTogRE1BIGRpc2FibGVkXG4iLCBkLT5uYW1lKTsKLQkJZG1hX2Jhc2UgPSAwOworCQlyZXR1cm4gLTE7CiAJfQogb3V0OgotCXJldHVybiBkbWFfYmFzZTsKKwlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9wY2lfZG1hX2Jhc2UpOworRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3BjaV9jaGVja19zaW1wbGV4KTsKIAogLyoKICAqIFNldCB1cCBCTS1ETUEgY2FwYWJpbGl0eSAoUG5QIEJJT1Mgc2hvdWxkIGhhdmUgZG9uZSB0aGlzKQpAQCAtMjg0LDMzICsyODksMzEgQEAKIH0KIAogLyoqCi0gKglpZGVfaHdpZl9jb25maWd1cmUJLQljb25maWd1cmUgYW4gSURFIGludGVyZmFjZQorICoJaWRlX2h3X2NvbmZpZ3VyZQktCWNvbmZpZ3VyZSBhIGh3X3JlZ3NfdCBpbnN0YW5jZQogICoJQGRldjogUENJIGRldmljZSBob2xkaW5nIGludGVyZmFjZQogICoJQGQ6IElERSBwb3J0IGluZm8KICAqCUBwb3J0OiBwb3J0IG51bWJlcgogICoJQGlycTogUENJIElSUQorICoJQGh3OiBod19yZWdzX3QgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIHBvcnQKICAqCiAgKglQZXJmb3JtIHRoZSBpbml0aWFsIHNldCB1cCBmb3IgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBzdHJ1Y3R1cmUuIFRoaXMKICAqCWlzIGRvbmUgcGVyIGludGVyZmFjZSBwb3J0IHJhdGhlciB0aGFuIHBlciBQQ0kgZGV2aWNlLiBUaGVyZSBtYXkgYmUKICAqCW1vcmUgdGhhbiBvbmUgcG9ydCBwZXIgZGV2aWNlLgogICoKLSAqCVJldHVybnMgdGhlIG5ldyBoYXJkd2FyZSBpbnRlcmZhY2Ugc3RydWN0dXJlLCBvciBOVUxMIG9uIGEgZmFpbHVyZQorICoJUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZS4KICAqLwogCi1zdGF0aWMgaWRlX2h3aWZfdCAqaWRlX2h3aWZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IHBvcnQsIGludCBpcnEpCitzdGF0aWMgaW50IGlkZV9od19jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCisJCQkgICAgdW5zaWduZWQgaW50IHBvcnQsIGludCBpcnEsIGh3X3JlZ3NfdCAqaHcpCiB7CiAJdW5zaWduZWQgbG9uZyBjdGwgPSAwLCBiYXNlID0gMDsKLQlpZGVfaHdpZl90ICpod2lmOwotCXN0cnVjdCBod19yZWdzX3MgaHc7CiAKIAlpZiAoKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfSVNBX1BPUlRTKSA9PSAwKSB7CiAJCWlmIChpZGVfcGNpX2NoZWNrX2lvbWVtKGRldiwgZCwgMiAqIHBvcnQpIHx8CiAJCSAgICBpZGVfcGNpX2NoZWNrX2lvbWVtKGRldiwgZCwgMiAqIHBvcnQgKyAxKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSS9PIGJhc2VyZWdzIChCSU9TKSBhcmUgcmVwb3J0ZWQgIgogCQkJCQkiYXMgTUVNIGZvciBwb3J0ICVkIVxuIiwgZC0+bmFtZSwgcG9ydCk7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJY3RsICA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDIqcG9ydCsxKTsKQEAgLTMyNCwyMiArMzI3LDE2IEBACiAJaWYgKCFiYXNlIHx8ICFjdGwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIFBDSSBCQVJzIGZvciBwb3J0ICVkLCBza2lwcGluZ1xuIiwKIAkJCQlkLT5uYW1lLCBwb3J0KTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWh3aWYgPSBpZGVfZmluZF9wb3J0X3Nsb3QoZCk7Ci0JaWYgKGh3aWYgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KGh3LCAwLCBzaXplb2YoKmh3KSk7CisJaHctPmlycSA9IGlycTsKKwlody0+ZGV2ID0gJmRldi0+ZGV2OworCWh3LT5jaGlwc2V0ID0gZC0+Y2hpcHNldCA/IGQtPmNoaXBzZXQgOiBpZGVfcGNpOworCWlkZV9zdGRfaW5pdF9wb3J0cyhodywgYmFzZSwgY3RsIHwgMik7CiAKLQltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQlody5pcnEgPSBpcnE7Ci0JaHcuZGV2ID0gJmRldi0+ZGV2OwotCWh3LmNoaXBzZXQgPSBkLT5jaGlwc2V0ID8gZC0+Y2hpcHNldCA6IGlkZV9wY2k7Ci0JaWRlX3N0ZF9pbml0X3BvcnRzKCZodywgYmFzZSwgY3RsIHwgMik7Ci0KLQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7Ci0KLQlyZXR1cm4gaHdpZjsKKwlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0kKQEAgLTM2Miw3ICszNTksMTUgQEAKIAkgICAgIChkZXYtPmNsYXNzICYgMHg4MCkpKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGlkZV9wY2lfZG1hX2Jhc2UoaHdpZiwgZCk7CiAKLQkJaWYgKGJhc2UgPT0gMCB8fCBpZGVfcGNpX3NldF9tYXN0ZXIoZGV2LCBkLT5uYW1lKSA8IDApCisJCWlmIChiYXNlID09IDApCisJCQlyZXR1cm4gLTE7CisKKwkJaHdpZi0+ZG1hX2Jhc2UgPSBiYXNlOworCisJCWlmIChpZGVfcGNpX2NoZWNrX3NpbXBsZXgoaHdpZiwgZCkgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChpZGVfcGNpX3NldF9tYXN0ZXIoZGV2LCBkLT5uYW1lKSA8IDApCiAJCQlyZXR1cm4gLTE7CiAKIAkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKQEAgLTM3Niw3ICszODEsNyBAQAogCQlpZiAoaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUoaHdpZikpCiAJCQlyZXR1cm4gLTE7CiAKLQkJaWRlX3NldHVwX2RtYShod2lmLCBiYXNlKTsKKwkJaHdpZi0+ZG1hX29wcyA9ICZzZmZfZG1hX29wczsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQyOSw3ICs0MzQsOCBAQAogICoJQGRldjogUENJIGRldmljZQogICoJQGQ6IElERSBwb3J0IGluZm8KICAqCUBwY2lpcnE6IElSUSBsaW5lCi0gKglAaWR4OiBBVEEgaW5kZXggdGFibGUgdG8gdXBkYXRlCisgKglAaHc6IGh3X3JlZ3NfdCBpbnN0YW5jZXMgY29ycmVzcG9uZGluZyB0byB0aGlzIFBDSSBJREUgZGV2aWNlCisgKglAaHdzOiBod19yZWdzX3QgcG9pbnRlcnMgdGFibGUgdG8gdXBkYXRlCiAgKgogICoJU2NhbiB0aGUgaW50ZXJmYWNlcyBhdHRhY2hlZCB0byB0aGlzIGRldmljZSBhbmQgZG8gYW55CiAgKgluZWNlc3NhcnkgcGVyIHBvcnQgc2V0dXAuIEF0dGFjaCB0aGUgZGV2aWNlcyBhbmQgYXNrIHRoZQpAQCAtNDQwLDEwICs0NDYsMTAgQEAKICAqCXdoZXJlIHRoZSBjaGlwc2V0IHNldHVwIGlzIG5vdCB0aGUgZGVmYXVsdCBQQ0kgSURFIG9uZS4KICAqLwogCi12b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsIGludCBwY2lpcnEsIHU4ICppZHgpCit2b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCisJCQkgaW50IHBjaWlycSwgaHdfcmVnc190ICpodywgaHdfcmVnc190ICoqaHdzKQogewogCWludCBjaGFubmVscyA9IChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NJTkdMRSkgPyAxIDogMiwgcG9ydDsKLQlpZGVfaHdpZl90ICpod2lmOwogCXU4IHRtcDsKIAogCS8qCkBAIC00NTksMTEgKzQ2NSwxMCBAQAogCQkJY29udGludWU7CS8qIHBvcnQgbm90IGVuYWJsZWQgKi8KIAkJfQogCi0JCWh3aWYgPSBpZGVfaHdpZl9jb25maWd1cmUoZGV2LCBkLCBwb3J0LCBwY2lpcnEpOwotCQlpZiAoaHdpZiA9PSBOVUxMKQorCQlpZiAoaWRlX2h3X2NvbmZpZ3VyZShkZXYsIGQsIHBvcnQsIHBjaWlycSwgaHcgKyBwb3J0KSkKIAkJCWNvbnRpbnVlOwogCi0JCSooaWR4ICsgcG9ydCkgPSBod2lmLT5pbmRleDsKKwkJKihod3MgKyBwb3J0KSA9IGh3ICsgcG9ydDsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcGNpX3NldHVwX3BvcnRzKTsKQEAgLTQ4MCw3ICs0ODUsNyBAQAogICovCiBzdGF0aWMgaW50IGRvX2lkZV9zZXR1cF9wY2lfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCi0JCQkJICAgdTggKmlkeCwgdTggbm9pc3kpCisJCQkJICAgdTggbm9pc3kpCiB7CiAJaW50IHRyaWVkX2NvbmZpZyA9IDA7CiAJaW50IHBjaWlycSwgcmV0OwpAQCAtNTI5LDIyICs1MzQsMjQgQEAKIAkJCQlkLT5uYW1lLCBwY2lpcnEpOwogCX0KIAotCS8qIEZJWE1FOiBzaWxlbnQgZmFpbHVyZSBjYW4gaGFwcGVuICovCi0KLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgcGNpaXJxLCBpZHgpOworCXJldCA9IHBjaWlycTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgaWRlX3NldHVwX3BjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCiB7Ci0JdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJaHdfcmVnc190IGh3WzRdLCAqaHdzW10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZG9faWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkLCAmaWR4WzBdLCAxKTsKKwlyZXQgPSBkb19pZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQsIDEpOwogCi0JaWYgKHJldCA+PSAwKQotCQlpZGVfZGV2aWNlX2FkZChpZHgsIGQpOworCWlmIChyZXQgPj0gMCkgeworCQkvKiBGSVhNRTogc2lsZW50IGZhaWx1cmUgY2FuIGhhcHBlbiAqLworCQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgcmV0LCAmaHdbMF0sICZod3NbMF0pOworCisJCXJldCA9IGlkZV9ob3N0X2FkZChkLCBod3MsIE5VTEwpOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC01NTUsMTkgKzU2MiwyMyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2W10gPSB7IGRldjEsIGRldjIgfTsKIAlpbnQgcmV0LCBpOwotCXU4IGlkeFs0XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCWh3X3JlZ3NfdCBod1s0XSwgKmh3c1tdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCXJldCA9IGRvX2lkZV9zZXR1cF9wY2lfZGV2aWNlKHBkZXZbaV0sIGQsICZpZHhbaSoyXSwgIWkpOworCQlyZXQgPSBkb19pZGVfc2V0dXBfcGNpX2RldmljZShwZGV2W2ldLCBkLCAhaSk7CisKIAkJLyoKIAkJICogRklYTUU6IE1vbSwgbW9tLCB0aGV5IHN0b2xlIG1lIHRoZSBoZWxwZXIgZnVuY3Rpb24gdG8gdW5kbwogCQkgKiBkb19pZGVfc2V0dXBfcGNpX2RldmljZSgpIG9uIHRoZSBmaXJzdCBkZXZpY2UhCiAJCSAqLwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OworCisJCS8qIEZJWE1FOiBzaWxlbnQgZmFpbHVyZSBjYW4gaGFwcGVuICovCisJCWlkZV9wY2lfc2V0dXBfcG9ydHMocGRldltpXSwgZCwgcmV0LCAmaHdbaSoyXSwgJmh3c1tpKjJdKTsKIAl9CiAKLQlpZGVfZGV2aWNlX2FkZChpZHgsIGQpOworCXJldCA9IGlkZV9ob3N0X2FkZChkLCBod3MsIE5VTEwpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwppbmRleCA5ZDE5YWVjLi5iNmViMmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKQEAgLTIyOTYsOSArMjI5NiwxMCBAQAogCiAJb2hjaSA9IChzdHJ1Y3QgdGlfb2hjaSAqKWhvc3QtPmhvc3RkYXRhOwogCi0JZGV2aWNlX2NyZWF0ZShocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLCBNS0RFVigKLQkJSUVFRTEzOTRfTUFKT1IsCUlFRUUxMzk0X01JTk9SX0JMT0NLX0RWMTM5NCAqIDE2ICsgKGlkPDwyKSksCi0JCSJkdjEzOTQtJWQiLCBpZCk7CisJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGhwc2JfcHJvdG9jb2xfY2xhc3MsIE5VTEwsCisJCQkgICAgICBNS0RFVihJRUVFMTM5NF9NQUpPUiwKKwkJCQkgICAgSUVFRTEzOTRfTUlOT1JfQkxPQ0tfRFYxMzk0ICogMTYgKyAoaWQ8PDIpKSwgTlVMTCwKKwkJCSAgICAgICJkdjEzOTQtJWQiLCBpZCk7CiAKIAlkdjEzOTRfaW5pdChvaGNpLCBEVjEzOTRfTlRTQywgTU9ERV9SRUNFSVZFKTsKIAlkdjEzOTRfaW5pdChvaGNpLCBEVjEzOTRfTlRTQywgTU9ERV9UUkFOU01JVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCmluZGV4IDA1NzEwYzcuLjk5NGEyMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCkBAIC03NTQsNyArNzU0LDggQEAKIAkgKi8KIAltdXRleF9sb2NrKCZub2RlbWdyX3NlcmlhbGl6ZV9yZW1vdmVfdWRzKTsKIAlmb3IgKDs7KSB7Ci0JCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBuZSwgX19tYXRjaF9uZSk7CisJCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwKKwkJCQkJX19tYXRjaF9uZSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCXVkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCB1bml0X2Rldik7CkBAIC05MDEsNyArOTAyLDggQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IG5vZGVfZW50cnkgKm5lOwogCi0JZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJm5vZGVtZ3JfbmVfY2xhc3MsICZndWlkLCBfX21hdGNoX25lX2d1aWQpOworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX25lX2NsYXNzLCBOVUxMLCAmZ3VpZCwKKwkJCQlfX21hdGNoX25lX2d1aWQpOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKIAluZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LCBub2RlX2Rldik7CkBAIC05NDAsNyArOTQyLDggQEAKIAlwYXJhbS5ob3N0ID0gaG9zdDsKIAlwYXJhbS5ub2RlaWQgPSBub2RlaWQ7CiAKLQlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgJnBhcmFtLCBfX21hdGNoX25lX25vZGVpZCk7CisJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJm5vZGVtZ3JfbmVfY2xhc3MsIE5VTEwsICZwYXJhbSwKKwkJCQlfX21hdGNoX25lX25vZGVpZCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwogCW5lID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5vZGVfZW50cnksIG5vZGVfZGV2KTsKQEAgLTE0NTMsNyArMTQ1Niw4IEBACiAJbmUtPmluX2xpbWJvID0gMTsKIAlXQVJOX09OKGRldmljZV9jcmVhdGVfZmlsZSgmbmUtPmRldmljZSwgJmRldl9hdHRyX25lX2luX2xpbWJvKSk7CiAKLQljbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIG5lLCBfX25vZGVtZ3JfZHJpdmVyX3N1c3BlbmQpOworCWNsYXNzX2Zvcl9lYWNoX2RldmljZSgmbm9kZW1ncl91ZF9jbGFzcywgTlVMTCwgbmUsCisJCQkgICAgICBfX25vZGVtZ3JfZHJpdmVyX3N1c3BlbmQpOwogfQogCiAKQEAgLTE0NjIsNyArMTQ2Niw4IEBACiAJbmUtPmluX2xpbWJvID0gMDsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm5lLT5kZXZpY2UsICZkZXZfYXR0cl9uZV9pbl9saW1ibyk7CiAKLQljbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIG5lLCBfX25vZGVtZ3JfZHJpdmVyX3Jlc3VtZSk7CisJY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwKKwkJCSAgICAgIF9fbm9kZW1ncl9kcml2ZXJfcmVzdW1lKTsKIAlIUFNCX0RFQlVHKCJOb2RlIHJlc3VtZWQ6IElEOkJVU1siIE5PREVfQlVTX0ZNVCAiXSAgR1VJRFslMDE2THhdIiwKIAkJICAgTk9ERV9CVVNfQVJHUyhuZS0+aG9zdCwgbmUtPm5vZGVpZCksICh1bnNpZ25lZCBsb25nIGxvbmcpbmUtPmd1aWQpOwogfQpAQCAtMTQ5OCw3ICsxNTAzLDggQEAKIAogc3RhdGljIHZvaWQgbm9kZW1ncl91cGRhdGVfcGRydihzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCiB7Ci0JY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBuZSwgX19ub2RlbWdyX3VwZGF0ZV9wZHJ2KTsKKwljbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIE5VTEwsIG5lLAorCQkJICAgICAgX19ub2RlbWdyX3VwZGF0ZV9wZHJ2KTsKIH0KIAogCkBAIC0xNTkxLDcgKzE1OTcsOCBAQAogCSAqIHdoaWxlIHByb2JlcyBhcmUgdGltZS1jb25zdW1pbmcuIChXZWxsLCB0aG9zZSBwcm9iZXMgbmVlZCBzb21lCiAJICogaW1wcm92ZW1lbnQuLi4pICovCiAKLQljbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfbmVfY2xhc3MsICZwYXJhbSwgX19ub2RlbWdyX25vZGVfcHJvYmUpOworCWNsYXNzX2Zvcl9lYWNoX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgTlVMTCwgJnBhcmFtLAorCQkJICAgICAgX19ub2RlbWdyX25vZGVfcHJvYmUpOwogCiAJLyogSWYgd2UgaGFkIGEgYnVzIHJlc2V0IHdoaWxlIHdlIHdlcmUgc2Nhbm5pbmcgdGhlIGJ1cywgaXQgaXMKIAkgKiBwb3NzaWJsZSB0aGF0IHdlIGRpZCBub3QgcHJvYmUgYWxsIG5vZGVzLiAgSW4gdGhhdCBjYXNlLCB3ZQpAQCAtMTgyNiw3ICsxODMzLDcgQEAKIAogCWhpcC5jYiA9IGNiOwogCWhpcC5kYXRhID0gZGF0YTsKLQllcnJvciA9IGNsYXNzX2Zvcl9lYWNoX2RldmljZSgmaHBzYl9ob3N0X2NsYXNzLCAmaGlwLAorCWVycm9yID0gY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZocHNiX2hvc3RfY2xhc3MsIE5VTEwsICZoaXAsCiAJCQkJICAgICAgX19ub2RlbWdyX2Zvcl9lYWNoX2hvc3QpOwogCiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwppbmRleCA5NmYyODQ3Li42ZmE5ZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwpAQCAtMzAxMCwxMCArMzAxMCwxMCBAQAogCWhwc2JfcmVnaXN0ZXJfaGlnaGxldmVsKCZyYXcxMzk0X2hpZ2hsZXZlbCk7CiAKIAlpZiAoSVNfRVJSCi0JICAgIChkZXZpY2VfY3JlYXRlKAorCSAgICAoZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKAogCSAgICAgIGhwc2JfcHJvdG9jb2xfY2xhc3MsIE5VTEwsCiAJICAgICAgTUtERVYoSUVFRTEzOTRfTUFKT1IsIElFRUUxMzk0X01JTk9SX0JMT0NLX1JBVzEzOTQgKiAxNiksCi0JICAgICAgUkFXMTM5NF9ERVZJQ0VfTkFNRSkpKSB7CisJICAgICAgTlVMTCwgUkFXMTM5NF9ERVZJQ0VfTkFNRSkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0X3VucmVnOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCmluZGV4IDA2OWI5ZjYuLjI1ZGI2ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwpAQCAtMTM0MSw5ICsxMzQxLDkgQEAKIAlocHNiX3NldF9ob3N0aW5mb19rZXkoJnZpZGVvMTM5NF9oaWdobGV2ZWwsIGhvc3QsIG9oY2ktPmhvc3QtPmlkKTsKIAogCW1pbm9yID0gSUVFRTEzOTRfTUlOT1JfQkxPQ0tfVklERU8xMzk0ICogMTYgKyBvaGNpLT5ob3N0LT5pZDsKLQlkZXZpY2VfY3JlYXRlKGhwc2JfcHJvdG9jb2xfY2xhc3MsIE5VTEwsCi0JCSAgICAgIE1LREVWKElFRUUxMzk0X01BSk9SLCBtaW5vciksCi0JCSAgICAgICIlcy0lZCIsIFZJREVPMTM5NF9EUklWRVJfTkFNRSwgb2hjaS0+aG9zdC0+aWQpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAorCQkJICAgICAgTUtERVYoSUVFRTEzOTRfTUFKT1IsIG1pbm9yKSwgTlVMTCwKKwkJCSAgICAgICIlcy0lZCIsIFZJREVPMTM5NF9EUklWRVJfTkFNRSwgb2hjaS0+aG9zdC0+aWQpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IDU1NzM4ZWUuLjkyMmQzNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KIAogI2luY2x1ZGUgPHJkbWEvaWJfY2FjaGUuaD4KICNpbmNsdWRlIDxyZG1hL2liX2NtLmg+CkBAIC0xNjIsOCArMTYzLDggQEAKIAogc3RydWN0IGNtX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTsKLQlzdHJ1Y3Qga29iamVjdCBkZXZfb2JqOworCXN0cnVjdCBpYl9kZXZpY2UgKmliX2RldmljZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiAJdTggYWNrX2RlbGF5OwogCXN0cnVjdCBjbV9wb3J0ICpwb3J0WzBdOwogfTsKQEAgLTMzOSw3ICszNDAsNyBAQAogewogCWF2LT5wb3J0ID0gcG9ydDsKIAlhdi0+cGtleV9pbmRleCA9IHdjLT5wa2V5X2luZGV4OwotCWliX2luaXRfYWhfZnJvbV93Yyhwb3J0LT5jbV9kZXYtPmRldmljZSwgcG9ydC0+cG9ydF9udW0sIHdjLAorCWliX2luaXRfYWhfZnJvbV93Yyhwb3J0LT5jbV9kZXYtPmliX2RldmljZSwgcG9ydC0+cG9ydF9udW0sIHdjLAogCQkJICAgZ3JoLCAmYXYtPmFoX2F0dHIpOwogfQogCkBAIC0zNTMsNyArMzU0LDcgQEAKIAogCXJlYWRfbG9ja19pcnFzYXZlKCZjbS5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY21fZGV2LCAmY20uZGV2aWNlX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFpYl9maW5kX2NhY2hlZF9naWQoY21fZGV2LT5kZXZpY2UsICZwYXRoLT5zZ2lkLAorCQlpZiAoIWliX2ZpbmRfY2FjaGVkX2dpZChjbV9kZXYtPmliX2RldmljZSwgJnBhdGgtPnNnaWQsCiAJCQkJCSZwLCBOVUxMKSkgewogCQkJcG9ydCA9IGNtX2Rldi0+cG9ydFtwLTFdOwogCQkJYnJlYWs7CkBAIC0zNjQsMTMgKzM2NSwxMyBAQAogCWlmICghcG9ydCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBpYl9maW5kX2NhY2hlZF9wa2V5KGNtX2Rldi0+ZGV2aWNlLCBwb3J0LT5wb3J0X251bSwKKwlyZXQgPSBpYl9maW5kX2NhY2hlZF9wa2V5KGNtX2Rldi0+aWJfZGV2aWNlLCBwb3J0LT5wb3J0X251bSwKIAkJCQkgIGJlMTZfdG9fY3B1KHBhdGgtPnBrZXkpLCAmYXYtPnBrZXlfaW5kZXgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlhdi0+cG9ydCA9IHBvcnQ7Ci0JaWJfaW5pdF9haF9mcm9tX3BhdGgoY21fZGV2LT5kZXZpY2UsIHBvcnQtPnBvcnRfbnVtLCBwYXRoLAorCWliX2luaXRfYWhfZnJvbV9wYXRoKGNtX2Rldi0+aWJfZGV2aWNlLCBwb3J0LT5wb3J0X251bSwgcGF0aCwKIAkJCSAgICAgJmF2LT5haF9hdHRyKTsKIAlhdi0+dGltZW91dCA9IHBhdGgtPnBhY2tldF9saWZlX3RpbWUgKyAxOwogCXJldHVybiAwOwpAQCAtMTUxNSw3ICsxNTE2LDcgQEAKIAogCXJlcV9tc2cgPSAoc3RydWN0IGNtX3JlcV9tc2cgKil3b3JrLT5tYWRfcmVjdl93Yy0+cmVjdl9idWYubWFkOwogCi0JY21faWQgPSBpYl9jcmVhdGVfY21faWQod29yay0+cG9ydC0+Y21fZGV2LT5kZXZpY2UsIE5VTEwsIE5VTEwpOworCWNtX2lkID0gaWJfY3JlYXRlX2NtX2lkKHdvcmstPnBvcnQtPmNtX2Rldi0+aWJfZGV2aWNlLCBOVUxMLCBOVUxMKTsKIAlpZiAoSVNfRVJSKGNtX2lkKSkKIAkJcmV0dXJuIFBUUl9FUlIoY21faWQpOwogCkBAIC0xNTUwLDcgKzE1NTEsNyBAQAogCWNtX2Zvcm1hdF9wYXRoc19mcm9tX3JlcShyZXFfbXNnLCAmd29yay0+cGF0aFswXSwgJndvcmstPnBhdGhbMV0pOwogCXJldCA9IGNtX2luaXRfYXZfYnlfcGF0aCgmd29yay0+cGF0aFswXSwgJmNtX2lkX3ByaXYtPmF2KTsKIAlpZiAocmV0KSB7Ci0JCWliX2dldF9jYWNoZWRfZ2lkKHdvcmstPnBvcnQtPmNtX2Rldi0+ZGV2aWNlLAorCQlpYl9nZXRfY2FjaGVkX2dpZCh3b3JrLT5wb3J0LT5jbV9kZXYtPmliX2RldmljZSwKIAkJCQkgIHdvcmstPnBvcnQtPnBvcnRfbnVtLCAwLCAmd29yay0+cGF0aFswXS5zZ2lkKTsKIAkJaWJfc2VuZF9jbV9yZWooY21faWQsIElCX0NNX1JFSl9JTlZBTElEX0dJRCwKIAkJCSAgICAgICAmd29yay0+cGF0aFswXS5zZ2lkLCBzaXplb2Ygd29yay0+cGF0aFswXS5zZ2lkLApAQCAtMjk1MCw3ICsyOTUxLDcgQEAKIAlzdHJ1Y3QgY21fc2lkcl9yZXFfbXNnICpzaWRyX3JlcV9tc2c7CiAJc3RydWN0IGliX3djICp3YzsKIAotCWNtX2lkID0gaWJfY3JlYXRlX2NtX2lkKHdvcmstPnBvcnQtPmNtX2Rldi0+ZGV2aWNlLCBOVUxMLCBOVUxMKTsKKwljbV9pZCA9IGliX2NyZWF0ZV9jbV9pZCh3b3JrLT5wb3J0LT5jbV9kZXYtPmliX2RldmljZSwgTlVMTCwgTlVMTCk7CiAJaWYgKElTX0VSUihjbV9pZCkpCiAJCXJldHVybiBQVFJfRVJSKGNtX2lkKTsKIAljbV9pZF9wcml2ID0gY29udGFpbmVyX29mKGNtX2lkLCBzdHJ1Y3QgY21faWRfcHJpdmF0ZSwgaWQpOwpAQCAtMzU3OCw3ICszNTc5LDcgQEAKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgYXR0cjsKIAotCWlmIChpYl9xdWVyeV9kZXZpY2UoY21fZGV2LT5kZXZpY2UsICZhdHRyKSkKKwlpZiAoaWJfcXVlcnlfZGV2aWNlKGNtX2Rldi0+aWJfZGV2aWNlLCAmYXR0cikpCiAJCWNtX2Rldi0+YWNrX2RlbGF5ID0gMDsgLyogYWNrcyB3aWxsIHJlbHkgb24gcGFja2V0IGxpZmUgdGltZSAqLwogCWVsc2UKIAkJY21fZGV2LT5hY2tfZGVsYXkgPSBhdHRyLmxvY2FsX2NhX2Fja19kZWxheTsKQEAgLTM2MTgsMTggKzM2MTksNiBAQAogCS5yZWxlYXNlID0gY21fcmVsZWFzZV9wb3J0X29iagogfTsKIAotc3RhdGljIHZvaWQgY21fcmVsZWFzZV9kZXZfb2JqKHN0cnVjdCBrb2JqZWN0ICpvYmopCi17Ci0Jc3RydWN0IGNtX2RldmljZSAqY21fZGV2OwotCi0JY21fZGV2ID0gY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGNtX2RldmljZSwgZGV2X29iaik7Ci0Ja2ZyZWUoY21fZGV2KTsKLX0KLQotc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgY21fZGV2X29ial90eXBlID0gewotCS5yZWxlYXNlID0gY21fcmVsZWFzZV9kZXZfb2JqCi19OwotCiBzdHJ1Y3QgY2xhc3MgY21fY2xhc3MgPSB7CiAJLm5hbWUgICAgPSAiaW5maW5pYmFuZF9jbSIsCiB9OwpAQCAtMzY0MCw3ICszNjI5LDcgQEAKIAlpbnQgaSwgcmV0OwogCiAJcmV0ID0ga29iamVjdF9pbml0X2FuZF9hZGQoJnBvcnQtPnBvcnRfb2JqLCAmY21fcG9ydF9vYmpfdHlwZSwKLQkJCQkgICAmcG9ydC0+Y21fZGV2LT5kZXZfb2JqLAorCQkJCSAgICZwb3J0LT5jbV9kZXYtPmRldmljZS0+a29iaiwKIAkJCQkgICAiJWQiLCBwb3J0LT5wb3J0X251bSk7CiAJaWYgKHJldCkgewogCQlrZnJlZShwb3J0KTsKQEAgLTM2NzYsNyArMzY2NSw3IEBACiAJa29iamVjdF9wdXQoJnBvcnQtPnBvcnRfb2JqKTsKIH0KIAotc3RhdGljIHZvaWQgY21fYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBjbV9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldmljZSkKIHsKIAlzdHJ1Y3QgY21fZGV2aWNlICpjbV9kZXY7CiAJc3RydWN0IGNtX3BvcnQgKnBvcnQ7CkBAIC0zNjkxLDI2ICszNjgwLDI3IEBACiAJaW50IHJldDsKIAl1OCBpOwogCi0JaWYgKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGRldmljZS0+bm9kZV90eXBlKSAhPSBSRE1BX1RSQU5TUE9SVF9JQikKKwlpZiAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWJfZGV2aWNlLT5ub2RlX3R5cGUpICE9IFJETUFfVFJBTlNQT1JUX0lCKQogCQlyZXR1cm47CiAKIAljbV9kZXYgPSBremFsbG9jKHNpemVvZigqY21fZGV2KSArIHNpemVvZigqcG9ydCkgKgotCQkJIGRldmljZS0+cGh5c19wb3J0X2NudCwgR0ZQX0tFUk5FTCk7CisJCQkgaWJfZGV2aWNlLT5waHlzX3BvcnRfY250LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNtX2RldikKIAkJcmV0dXJuOwogCi0JY21fZGV2LT5kZXZpY2UgPSBkZXZpY2U7CisJY21fZGV2LT5pYl9kZXZpY2UgPSBpYl9kZXZpY2U7CiAJY21fZ2V0X2Fja19kZWxheShjbV9kZXYpOwogCi0JcmV0ID0ga29iamVjdF9pbml0X2FuZF9hZGQoJmNtX2Rldi0+ZGV2X29iaiwgJmNtX2Rldl9vYmpfdHlwZSwKLQkJCQkgICAmY21fY2xhc3Muc3Vic3lzLmtvYmosICIlcyIsIGRldmljZS0+bmFtZSk7Ci0JaWYgKHJldCkgeworCWNtX2Rldi0+ZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKCZjbV9jbGFzcywgJmliX2RldmljZS0+ZGV2LAorCQkJCQkgICAgICAgTUtERVYoMCwgMCksIE5VTEwsCisJCQkJCSAgICAgICAiJXMiLCBpYl9kZXZpY2UtPm5hbWUpOworCWlmICghY21fZGV2LT5kZXZpY2UpIHsKIAkJa2ZyZWUoY21fZGV2KTsKIAkJcmV0dXJuOwogCX0KIAogCXNldF9iaXQoSUJfTUdNVF9NRVRIT0RfU0VORCwgcmVnX3JlcS5tZXRob2RfbWFzayk7Ci0JZm9yIChpID0gMTsgaSA8PSBkZXZpY2UtPnBoeXNfcG9ydF9jbnQ7IGkrKykgeworCWZvciAoaSA9IDE7IGkgPD0gaWJfZGV2aWNlLT5waHlzX3BvcnRfY250OyBpKyspIHsKIAkJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mICpwb3J0LCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwb3J0KQogCQkJZ290byBlcnJvcjE7CkBAIC0zNzIzLDcgKzM3MTMsNyBAQAogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcjE7CiAKLQkJcG9ydC0+bWFkX2FnZW50ID0gaWJfcmVnaXN0ZXJfbWFkX2FnZW50KGRldmljZSwgaSwKKwkJcG9ydC0+bWFkX2FnZW50ID0gaWJfcmVnaXN0ZXJfbWFkX2FnZW50KGliX2RldmljZSwgaSwKIAkJCQkJCQlJQl9RUFRfR1NJLAogCQkJCQkJCSZyZWdfcmVxLAogCQkJCQkJCTAsCkBAIC0zNzMzLDExICszNzIzLDExIEBACiAJCWlmIChJU19FUlIocG9ydC0+bWFkX2FnZW50KSkKIAkJCWdvdG8gZXJyb3IyOwogCi0JCXJldCA9IGliX21vZGlmeV9wb3J0KGRldmljZSwgaSwgMCwgJnBvcnRfbW9kaWZ5KTsKKwkJcmV0ID0gaWJfbW9kaWZ5X3BvcnQoaWJfZGV2aWNlLCBpLCAwLCAmcG9ydF9tb2RpZnkpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcjM7CiAJfQotCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZjbV9jbGllbnQsIGNtX2Rldik7CisJaWJfc2V0X2NsaWVudF9kYXRhKGliX2RldmljZSwgJmNtX2NsaWVudCwgY21fZGV2KTsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY20uZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZjbV9kZXYtPmxpc3QsICZjbS5kZXZpY2VfbGlzdCk7CkBAIC0zNzUzLDE0ICszNzQzLDE0IEBACiAJcG9ydF9tb2RpZnkuY2xyX3BvcnRfY2FwX21hc2sgPSBJQl9QT1JUX0NNX1NVUDsKIAl3aGlsZSAoLS1pKSB7CiAJCXBvcnQgPSBjbV9kZXYtPnBvcnRbaS0xXTsKLQkJaWJfbW9kaWZ5X3BvcnQoZGV2aWNlLCBwb3J0LT5wb3J0X251bSwgMCwgJnBvcnRfbW9kaWZ5KTsKKwkJaWJfbW9kaWZ5X3BvcnQoaWJfZGV2aWNlLCBwb3J0LT5wb3J0X251bSwgMCwgJnBvcnRfbW9kaWZ5KTsKIAkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQocG9ydC0+bWFkX2FnZW50KTsKIAkJY21fcmVtb3ZlX3BvcnRfZnMocG9ydCk7CiAJfQotCWtvYmplY3RfcHV0KCZjbV9kZXYtPmRldl9vYmopOworCWRldmljZV91bnJlZ2lzdGVyKGNtX2Rldi0+ZGV2aWNlKTsKIH0KIAotc3RhdGljIHZvaWQgY21fcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBjbV9yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldmljZSkKIHsKIAlzdHJ1Y3QgY21fZGV2aWNlICpjbV9kZXY7CiAJc3RydWN0IGNtX3BvcnQgKnBvcnQ7CkBAIC0zNzcwLDcgKzM3NjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQljbV9kZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmY21fY2xpZW50KTsKKwljbV9kZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWJfZGV2aWNlLCAmY21fY2xpZW50KTsKIAlpZiAoIWNtX2RldikKIAkJcmV0dXJuOwogCkBAIC0zNzc4LDE0ICszNzY4LDE0IEBACiAJbGlzdF9kZWwoJmNtX2Rldi0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNtLmRldmljZV9sb2NrLCBmbGFncyk7CiAKLQlmb3IgKGkgPSAxOyBpIDw9IGRldmljZS0+cGh5c19wb3J0X2NudDsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8PSBpYl9kZXZpY2UtPnBoeXNfcG9ydF9jbnQ7IGkrKykgewogCQlwb3J0ID0gY21fZGV2LT5wb3J0W2ktMV07Ci0JCWliX21vZGlmeV9wb3J0KGRldmljZSwgcG9ydC0+cG9ydF9udW0sIDAsICZwb3J0X21vZGlmeSk7CisJCWliX21vZGlmeV9wb3J0KGliX2RldmljZSwgcG9ydC0+cG9ydF9udW0sIDAsICZwb3J0X21vZGlmeSk7CiAJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KHBvcnQtPm1hZF9hZ2VudCk7CiAJCWZsdXNoX3dvcmtxdWV1ZShjbS53cSk7CiAJCWNtX3JlbW92ZV9wb3J0X2ZzKHBvcnQpOwogCX0KLQlrb2JqZWN0X3B1dCgmY21fZGV2LT5kZXZfb2JqKTsKKwlkZXZpY2VfdW5yZWdpc3RlcihjbV9kZXYtPmRldmljZSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGliX2NtX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jCmluZGV4IDA3OTJkOTMuLjdhNjRhYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYwpAQCAtNjQ2LDggKzY0Niw4IEBACiAJCWVoY2FfZG1wKCZjcHVfb25saW5lX21hcCwgc2l6ZW9mKGNwdW1hc2tfdCksICIiKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5sYXN0X2NwdV9sb2NrLCBmbGFncyk7Ci0JY3B1ID0gbmV4dF9jcHUocG9vbC0+bGFzdF9jcHUsIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1ID09IE5SX0NQVVMpCisJY3B1ID0gbmV4dF9jcHVfbnIocG9vbC0+bGFzdF9jcHUsIGNwdV9vbmxpbmVfbWFwKTsKKwlpZiAoY3B1ID49IG5yX2NwdV9pZHMpCiAJCWNwdSA9IGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7CiAJcG9vbC0+bGFzdF9jcHUgPSBjcHU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGFzdF9jcHVfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwppbmRleCAzNWYzMDFjLi41NmMwZWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwpAQCAtMjQ1NSw3ICsyNDU1LDcgQEAKIAkJZ290byBlcnJfY2RldjsKIAl9CiAKLQlkZXZpY2UgPSBkZXZpY2VfY3JlYXRlKGlwYXRoX2NsYXNzLCBOVUxMLCBkZXYsIG5hbWUpOworCWRldmljZSA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShpcGF0aF9jbGFzcywgTlVMTCwgZGV2LCBOVUxMLCBuYW1lKTsKIAogCWlmIChJU19FUlIoZGV2aWNlKSkgewogCQlyZXQgPSBQVFJfRVJSKGRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCAxZmNjOWE4Li44OTUwZTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTc2OSw3ICs3NjksNyBAQAogCWlwb2liX21jYXN0X3N0b3BfdGhyZWFkKGRldiwgMCk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JbmV0aWZfdHhfbG9jayhkZXYpOworCW5ldGlmX2FkZHJfbG9jayhkZXYpOwogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKIAkvKgpAQCAtODQ2LDcgKzg0Niw3IEBACiAJfQogCiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCW5ldGlmX3R4X3VubG9jayhkZXYpOworCW5ldGlmX2FkZHJfdW5sb2NrKGRldik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogV2UgaGF2ZSB0byBjYW5jZWwgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2sgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZidWcuYyBiL2RyaXZlcnMvaW5wdXQvZXZidWcuYwppbmRleCBjMjFmMmYxLi4wMzUzNjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2YnVnLmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmJ1Zy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogZXZidWcuYyx2IDEuMTAgMjAwMS8wOS8yNSAxMDoxMjowNyB2b2p0ZWNoIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIFZvanRlY2ggUGF2bGlrCiAgKi8KIApAQCAtNDEsNyArMzksNyBAQAogc3RhdGljIHZvaWQgZXZidWdfZXZlbnQoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAiZXZidWcuYzogRXZlbnQuIERldjogJXMsIFR5cGU6ICVkLCBDb2RlOiAlZCwgVmFsdWU6ICVkXG4iLAotCQloYW5kbGUtPmRldi0+cGh5cywgdHlwZSwgY29kZSwgdmFsdWUpOworCQloYW5kbGUtPmRldi0+ZGV2LmJ1c19pZCwgdHlwZSwgY29kZSwgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IGV2YnVnX2Nvbm5lY3Qoc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKQEAgLTY2LDcgKzY0LDEwIEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGVycl91bnJlZ2lzdGVyX2hhbmRsZTsKIAotCXByaW50ayhLRVJOX0RFQlVHICJldmJ1Zy5jOiBDb25uZWN0ZWQgZGV2aWNlOiBcIiVzXCIsICVzXG4iLCBkZXYtPm5hbWUsIGRldi0+cGh5cyk7CisJcHJpbnRrKEtFUk5fREVCVUcgImV2YnVnLmM6IENvbm5lY3RlZCBkZXZpY2U6ICVzICglcyBhdCAlcylcbiIsCisJCWRldi0+ZGV2LmJ1c19pZCwKKwkJZGV2LT5uYW1lID86ICJ1bmtub3duIiwKKwkJZGV2LT5waHlzID86ICJ1bmtub3duIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtNzksNyArODAsOCBAQAogCiBzdGF0aWMgdm9pZCBldmJ1Z19kaXNjb25uZWN0KHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSkKIHsKLQlwcmludGsoS0VSTl9ERUJVRyAiZXZidWcuYzogRGlzY29ubmVjdGVkIGRldmljZTogJXNcbiIsIGhhbmRsZS0+ZGV2LT5waHlzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZXZidWcuYzogRGlzY29ubmVjdGVkIGRldmljZTogJXNcbiIsCisJCWhhbmRsZS0+ZGV2LT5kZXYuYnVzX2lkKTsKIAogCWlucHV0X2Nsb3NlX2RldmljZShoYW5kbGUpOwogCWlucHV0X3VucmVnaXN0ZXJfaGFuZGxlKGhhbmRsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggYjMyOTg0Yi4uMmQ2NTQxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtMzAwLDYgKzMwMCwzNSBAQAogCV9fczMyIHZhbHVlOwogfTsKIAorc3RydWN0IGZmX3BlcmlvZGljX2VmZmVjdF9jb21wYXQgeworCV9fdTE2IHdhdmVmb3JtOworCV9fdTE2IHBlcmlvZDsKKwlfX3MxNiBtYWduaXR1ZGU7CisJX19zMTYgb2Zmc2V0OworCV9fdTE2IHBoYXNlOworCisJc3RydWN0IGZmX2VudmVsb3BlIGVudmVsb3BlOworCisJX191MzIgY3VzdG9tX2xlbjsKKwljb21wYXRfdXB0cl90IGN1c3RvbV9kYXRhOworfTsKKworc3RydWN0IGZmX2VmZmVjdF9jb21wYXQgeworCV9fdTE2IHR5cGU7CisJX19zMTYgaWQ7CisJX191MTYgZGlyZWN0aW9uOworCXN0cnVjdCBmZl90cmlnZ2VyIHRyaWdnZXI7CisJc3RydWN0IGZmX3JlcGxheSByZXBsYXk7CisKKwl1bmlvbiB7CisJCXN0cnVjdCBmZl9jb25zdGFudF9lZmZlY3QgY29uc3RhbnQ7CisJCXN0cnVjdCBmZl9yYW1wX2VmZmVjdCByYW1wOworCQlzdHJ1Y3QgZmZfcGVyaW9kaWNfZWZmZWN0X2NvbXBhdCBwZXJpb2RpYzsKKwkJc3RydWN0IGZmX2NvbmRpdGlvbl9lZmZlY3QgY29uZGl0aW9uWzJdOyAvKiBPbmUgZm9yIGVhY2ggYXhpcyAqLworCQlzdHJ1Y3QgZmZfcnVtYmxlX2VmZmVjdCBydW1ibGU7CisJfSB1OworfTsKKwogLyogTm90ZSB0byB0aGUgYXV0aG9yIG9mIHRoaXMgY29kZTogZGlkIGl0IGV2ZXIgb2NjdXIgdG8KICAgIHlvdSB3aHkgdGhlIGlmZGVmcyBhcmUgbmVlZGVkPyBUaGluayBhYm91dCBpdCBhZ2Fpbi4gLUFLICovCiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtMzY4LDYgKzM5Nyw0MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGV2ZGV2X2ZmX2VmZmVjdF9mcm9tX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisJCQkJICAgICBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJaWYgKENPTVBBVF9URVNUKSB7CisJCXN0cnVjdCBmZl9lZmZlY3RfY29tcGF0ICpjb21wYXRfZWZmZWN0OworCisJCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZmZfZWZmZWN0X2NvbXBhdCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKgorCQkgKiBJdCBzbyBoYXBwZW5zIHRoYXQgdGhlIHBvaW50ZXIgd2hpY2ggbmVlZHMgdG8gYmUgY2hhbmdlZAorCQkgKiBpcyB0aGUgbGFzdCBmaWVsZCBpbiB0aGUgc3RydWN0dXJlLCBzbyB3ZSBjYW4gY29weSB0aGUKKwkJICogd2hvbGUgdGhpbmcgYW5kIHJlcGxhY2UganVzdCB0aGUgcG9pbnRlci4KKwkJICovCisKKwkJY29tcGF0X2VmZmVjdCA9IChzdHJ1Y3QgZmZfZWZmZWN0X2NvbXBhdCAqKWVmZmVjdDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoY29tcGF0X2VmZmVjdCwgYnVmZmVyLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgZmZfZWZmZWN0X2NvbXBhdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGNvbXBhdF9lZmZlY3QtPnR5cGUgPT0gRkZfUEVSSU9ESUMgJiYKKwkJICAgIGNvbXBhdF9lZmZlY3QtPnUucGVyaW9kaWMud2F2ZWZvcm0gPT0gRkZfQ1VTVE9NKQorCQkJZWZmZWN0LT51LnBlcmlvZGljLmN1c3RvbV9kYXRhID0KKwkJCQljb21wYXRfcHRyKGNvbXBhdF9lZmZlY3QtPnUucGVyaW9kaWMuY3VzdG9tX2RhdGEpOworCX0gZWxzZSB7CisJCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZmZfZWZmZWN0KSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjb3B5X2Zyb21fdXNlcihlZmZlY3QsIGJ1ZmZlciwgc2l6ZW9mKHN0cnVjdCBmZl9lZmZlY3QpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBldmRldl9ldmVudF9zaXplKHZvaWQpCkBAIC0zOTMsNiArNDU4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXZkZXZfZmZfZWZmZWN0X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGZmX2VmZmVjdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGVmZmVjdCwgYnVmZmVyLCBzaXplb2Yoc3RydWN0IGZmX2VmZmVjdCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogCiBzdGF0aWMgc3NpemVfdCBldmRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKQEAgLTYzMywxNyArNzEwLDYgQEAKIAogCQlyZXR1cm4gaW5wdXRfc2V0X2tleWNvZGUoZGV2LCB0LCB2KTsKIAotCWNhc2UgRVZJT0NTRkY6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmZWZmZWN0LCBwLCBzaXplb2YoZWZmZWN0KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQllcnJvciA9IGlucHV0X2ZmX3VwbG9hZChkZXYsICZlZmZlY3QsIGZpbGUpOwotCi0JCWlmIChwdXRfdXNlcihlZmZlY3QuaWQsICYoKChzdHJ1Y3QgZmZfZWZmZWN0IF9fdXNlciAqKXApLT5pZCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJcmV0dXJuIGVycm9yOwotCiAJY2FzZSBFVklPQ1JNRkY6CiAJCXJldHVybiBpbnB1dF9mZl9lcmFzZShkZXYsIChpbnQpKHVuc2lnbmVkIGxvbmcpIHAsIGZpbGUpOwogCkBAIC03MzMsNiArNzk5LDE5IEBACiAKIAkJaWYgKF9JT0NfRElSKGNtZCkgPT0gX0lPQ19XUklURSkgewogCisJCQlpZiAoX0lPQ19OUihjbWQpID09IF9JT0NfTlIoRVZJT0NTRkYpKSB7CisKKwkJCQlpZiAoZXZkZXZfZmZfZWZmZWN0X2Zyb21fdXNlcihwLCBfSU9DX1NJWkUoY21kKSwgJmVmZmVjdCkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCisJCQkJZXJyb3IgPSBpbnB1dF9mZl91cGxvYWQoZGV2LCAmZWZmZWN0LCBmaWxlKTsKKworCQkJCWlmIChwdXRfdXNlcihlZmZlY3QuaWQsICYoKChzdHJ1Y3QgZmZfZWZmZWN0IF9fdXNlciAqKXApLT5pZCkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJCXJldHVybiBlcnJvcjsKKwkJCX0KKwogCQkJaWYgKChfSU9DX05SKGNtZCkgJiB+QUJTX01BWCkgPT0gX0lPQ19OUihFVklPQ1NBQlMoMCkpKSB7CiAKIAkJCQl0ID0gX0lPQ19OUihjbWQpICYgQUJTX01BWDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKaW5kZXggZDIyNmQ5My4uNjc5MGU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKQEAgLTI0Nyw5ICsyNDcsOSBAQAogCQkgKiBpbiBzOCwgdGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZSBnZW5lcmljCiAJCSAqLwogCQllZmZlY3QtPnUucmFtcC5zdGFydF9sZXZlbCA9Ci0JCQltYXgobWluKGVmZmVjdC0+dS5yYW1wLnN0YXJ0X2xldmVsICsgeCwgMHg3ZiksIC0weDgwKTsKKwkJCWNsYW1wX3ZhbChlZmZlY3QtPnUucmFtcC5zdGFydF9sZXZlbCArIHgsIC0weDgwLCAweDdmKTsKIAkJZWZmZWN0LT51LnJhbXAuZW5kX2xldmVsID0KLQkJCW1heChtaW4oZWZmZWN0LT51LnJhbXAuZW5kX2xldmVsICsgeSwgMHg3ZiksIC0weDgwKTsKKwkJCWNsYW1wX3ZhbChlZmZlY3QtPnUucmFtcC5lbmRfbGV2ZWwgKyB5LCAtMHg4MCwgMHg3Zik7CiAJCWJyZWFrOwogCiAJY2FzZSBGRl9SVU1CTEU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2VtdTEwazEtZ3AuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jCmluZGV4IDk3OTNhYzMuLmIwNDkzMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogZW11MTBrMS1ncC5jLHYgMS44IDIwMDIvMDEvMjIgMjA6NDA6NDYgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDEgVm9qdGVjaCBQYXZsaWsKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKaW5kZXggYzU2MDBhYy4uMDc4ZTRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwpAQCAtMzYsNyArMzYsNiBAQAogRVhQT1JUX1NZTUJPTChnYW1lcG9ydF91bnJlZ2lzdGVyX2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MKGdhbWVwb3J0X29wZW4pOwogRVhQT1JUX1NZTUJPTChnYW1lcG9ydF9jbG9zZSk7Ci1FWFBPUlRfU1lNQk9MKGdhbWVwb3J0X3Jlc2Nhbik7CiBFWFBPUlRfU1lNQk9MKGdhbWVwb3J0X3NldF9waHlzKTsKIEVYUE9SVF9TWU1CT0woZ2FtZXBvcnRfc3RhcnRfcG9sbGluZyk7CiBFWFBPUlRfU1lNQk9MKGdhbWVwb3J0X3N0b3BfcG9sbGluZyk7CkBAIC0yMzAsOCArMjI5LDYgQEAKICAqLwogCiBlbnVtIGdhbWVwb3J0X2V2ZW50X3R5cGUgewotCUdBTUVQT1JUX1JFU0NBTiwKLQlHQU1FUE9SVF9SRUNPTk5FQ1QsCiAJR0FNRVBPUlRfUkVHSVNURVJfUE9SVCwKIAlHQU1FUE9SVF9SRUdJU1RFUl9EUklWRVIsCiB9OwpAQCAtMzY1LDE1ICszNjIsNiBAQAogCQkJCWdhbWVwb3J0X2FkZF9wb3J0KGV2ZW50LT5vYmplY3QpOwogCQkJCWJyZWFrOwogCi0JCQljYXNlIEdBTUVQT1JUX1JFQ09OTkVDVDoKLQkJCQlnYW1lcG9ydF9yZWNvbm5lY3RfcG9ydChldmVudC0+b2JqZWN0KTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBHQU1FUE9SVF9SRVNDQU46Ci0JCQkJZ2FtZXBvcnRfZGlzY29ubmVjdF9wb3J0KGV2ZW50LT5vYmplY3QpOwotCQkJCWdhbWVwb3J0X2ZpbmRfZHJpdmVyKGV2ZW50LT5vYmplY3QpOwotCQkJCWJyZWFrOwotCiAJCQljYXNlIEdBTUVQT1JUX1JFR0lTVEVSX0RSSVZFUjoKIAkJCQlnYW1lcG9ydF9hZGRfZHJpdmVyKGV2ZW50LT5vYmplY3QpOwogCQkJCWJyZWFrOwpAQCAtNjUxLDE2ICs2MzksNiBAQAogCWRldmljZV9yZWxlYXNlX2RyaXZlcigmZ2FtZXBvcnQtPmRldik7CiB9CiAKLXZvaWQgZ2FtZXBvcnRfcmVzY2FuKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCi17Ci0JZ2FtZXBvcnRfcXVldWVfZXZlbnQoZ2FtZXBvcnQsIE5VTEwsIEdBTUVQT1JUX1JFU0NBTik7Ci19Ci0KLXZvaWQgZ2FtZXBvcnRfcmVjb25uZWN0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCi17Ci0JZ2FtZXBvcnRfcXVldWVfZXZlbnQoZ2FtZXBvcnQsIE5VTEwsIEdBTUVQT1JUX1JFQ09OTkVDVCk7Ci19Ci0KIC8qCiAgKiBTdWJtaXRzIHJlZ2lzdGVyIHJlcXVlc3QgdG8ga2dhbWVwb3J0ZCBmb3Igc3Vic2VxdWVudCBleGVjdXRpb24uCiAgKiBOb3RlIHRoYXQgcG9ydCByZWdpc3RyYXRpb24gaXMgYWx3YXlzIGFzeW5jaHJvbm91cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbGlnaHRuaW5nLmMgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2xpZ2h0bmluZy5jCmluZGV4IDZiNGQ0NTYuLjA2YWQzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbGlnaHRuaW5nLmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9saWdodG5pbmcuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IGxpZ2h0bmluZy5jLHYgMS4yMCAyMDAyLzAxLzIyIDIwOjQxOjMxIHZvanRlY2ggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L25zNTU4LmMgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L25zNTU4LmMKaW5kZXggN2I3YTU0Ni4uMmIyODJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9uczU1OC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IG5zNTU4LmMsdiAxLjQzIDIwMDIvMDEvMjQgMTk6MjM6MjEgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpawogICogIENvcHlyaWdodCAoYykgMTk5OSBCcmlhbiBHZXJzdAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggNDA4ZGYwYi4uYzEzY2VkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmICh0eXBlICE9IEVWX1NZTikKKwlpZiAoZGlzcG9zaXRpb24gIT0gSU5QVVRfSUdOT1JFX0VWRU5UICYmIHR5cGUgIT0gRVZfU1lOKQogCQlkZXYtPnN5bmMgPSAwOwogCiAJaWYgKChkaXNwb3NpdGlvbiAmIElOUFVUX1BBU1NfVE9fREVWSUNFKSAmJiBkZXYtPmV2ZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYTNkLmMKaW5kZXggNTJiYTE2Zi4uOTI0OThkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogYTNkLmMsdiAxLjIxIDIwMDIvMDEvMjIgMjA6MTE6NTAgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBWb2p0ZWNoIFBhdmxpawogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW1pam95LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jCmluZGV4IGRlYjlmODIuLjA1MDIyZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW1pam95LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbWlqb3kuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IGFtaWpveS5jLHYgMS4xMyAyMDAyLzAxLzIyIDIwOjI2OjMyIHZvanRlY2ggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMKaW5kZXggNTU2NDZhNi4uNjM5Yjk3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9jb2JyYS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svY29icmEuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IGNvYnJhLmMsdiAxLjE5IDIwMDIvMDEvMjIgMjA6MjY6NTIgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpawogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2RiOS5jCmluZGV4IDk2MGU1MDEuLjUyMzk1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9kYjkuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IGRiOS5jLHYgMS4xMyAyMDAyLzA0LzA3IDIwOjEzOjM3IHZvanRlY2ggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqCiAgKiAgQmFzZWQgb24gdGhlIHdvcmsgb2Y6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2Yyay5jCmluZGV4IDFmNjMwMmMuLmNiNmVlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2Yyay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2Yyay5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogZ2Yyay5jLHYgMS4xOSAyMDAyLzAxLzIyIDIwOjI3OjQzIHZvanRlY2ggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXAuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcC5jCmluZGV4IGZkMzg1M2EuLjY4NGUwN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogZ3JpcC5jLHYgMS4yMSAyMDAyLzAxLzIyIDIwOjI3OjU3IHZvanRlY2ggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcF9tcC5jCmluZGV4IGM1N2UyMWQuLjgyNzk0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcF9tcC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcF9tcC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogZ3JpcF9tcC5jLHYgMS45IDIwMDIvMDcvMjAgMTk6Mjg6NDUgYm9ubmxhbmQgRXhwICQKLSAqCiAgKiAgRHJpdmVyIGZvciB0aGUgR3JhdmlzIEdyaXAgTXVsdGlwb3J0LCBhIGdhbWVwYWQgImh1YiIgdGhhdAogICogIGNvbm5lY3RzIHVwIHRvIGZvdXIgOS1waW4gZGlnaXRhbCBnYW1lcGFkcy9qb3lzdGlja3MuCiAgKiAgRHJpdmVyIHRlc3RlZCBvbiBTTVAgYW5kIFVQIGtlcm5lbCB2ZXJzaW9ucyAyLjQuMTgtNCBhbmQgMi40LjE4LTUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2d1aWxsZW1vdC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ndWlsbGVtb3QuYwppbmRleCBhYTZiZmIzLi4yNWVjM2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2d1aWxsZW1vdC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3VpbGxlbW90LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogJElkOiBndWlsbGVtb3QuYyx2IDEuMTAgMjAwMi8wMS8yMiAyMDoyODoxMiB2b2p0ZWNoIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMjAwMSBWb2p0ZWNoIFBhdmxpawogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLWZmLmMKaW5kZXggZjJhNDM4MS4uNzgzOWI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLWZmLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLWZmLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogJElkOiBpZm9yY2UtZmYuYyx2IDEuOSAyMDAyLzAyLzAyIDE5OjI4OjM1IGpkZW5ldXggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PgogICogIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLCAyMDA3IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAZ21haWwuY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCmluZGV4IGEyNTE3ZmEuLjYxZWU2ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IGlmb3JjZS1tYWluLmMsdiAxLjE5IDIwMDIvMDcvMDcgMTA6MjI6NTAgamRlbmV1eCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsIDIwMDcgSm9oYW5uIERlbmV1eCA8am9oYW5uLmRlbmV1eEBnbWFpbC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXBhY2tldHMuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1wYWNrZXRzLmMKaW5kZXggNDVjNDkzOS4uMDE1YjUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXBhY2tldHMuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogaWZvcmNlLXBhY2tldHMuYyx2IDEuMTYgMjAwMi8wNy8wNyAxMDoyMjo1MCBqZGVuZXV4IEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwgMjAwNyBKb2hhbm4gRGVuZXV4IDxqb2hhbm4uZGVuZXV4QGdtYWlsLmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2Utc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1zZXJpby5jCmluZGV4IDdiNGJjMTkuLjQ2ZDUwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1zZXJpby5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogaWZvcmNlLXNlcmlvLmMsdiAxLjQgMjAwMi8wMS8yOCAyMjo0NTowMCBqZGVuZXV4IEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSm9oYW5uIERlbmV1eCA8am9oYW5uLmRlbmV1eEBnbWFpbC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCmluZGV4IDdmYjNjZjguLjg1MWNjNDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCkBAIC0xLDYgKzEsNCBAQAogIC8qCi0gKiAkSWQ6IGlmb3JjZS11c2IuYyx2IDEuMTYgMjAwMi8wNi8wOSAxMTowODowNCBqZGVuZXV4IEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwgMjAwNyBKb2hhbm4gRGVuZXV4IDxqb2hhbm4uZGVuZXV4QGdtYWlsLmNvbT4KICAqCkBAIC04OSwxMCArODcsMTAgQEAKIAljYXNlIC1FU0hVVERPV046CiAJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCiAJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAotCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCSAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJZGJnKCIlcyAtIHVyYiBoYXMgc3RhdHVzIG9mOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gdXJiIGhhcyBzdGF0dXMgb2Y6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTAzLDcgKzEwMSw3IEBACiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHN0YXR1cykKIAkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJICAgICBfX2Z1bmNfXywgc3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgaWZvcmNlX3VzYl9vdXQoc3RydWN0IHVyYiAqdXJiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLmggYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAppbmRleCBhOTY0YTdjLi5mMmQ5MWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAorKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IGlmb3JjZS5oLHYgMS4xMyAyMDAyLzA3LzA3IDEwOjIyOjUwIGpkZW5ldXggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PgogICogIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLCAyMDA3IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAZ21haWwuY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYwppbmRleCBiYzhlYTk1Li44YzMyOTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2ludGVyYWN0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pbnRlcmFjdC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogaW50ZXJhY3QuYyx2IDEuMTYgMjAwMi8wMS8yMiAyMDoyODoyNSB2b2p0ZWNoIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMjAwMSBWb2p0ZWNoIFBhdmxpawogICoKICAqICBCYXNlZCBvbiB0aGUgd29yayBvZjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svam95ZHVtcC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9qb3lkdW1wLmMKaW5kZXggODhlYzVhOTEuLjJhMWI4MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svam95ZHVtcC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svam95ZHVtcC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogam95ZHVtcC5jLHYgMS4xIDIwMDIvMDEvMjMgMDY6NTY6MTYganNpbW1vbnMgRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hZ2VsbGFuLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hZ2VsbGFuLmMKaW5kZXggNTRlNjc2OS4uNDBlNDA3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYWdlbGxhbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFnZWxsYW4uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IG1hZ2VsbGFuLmMsdiAxLjE2IDIwMDIvMDEvMjIgMjA6Mjg6Mzkgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpawogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2ViYWxsLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlYmFsbC5jCmluZGV4IGQ0MDg3ZmQuLjBjZDliMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2ViYWxsLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zcGFjZWJhbGwuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IHNwYWNlYmFsbC5jLHYgMS4xNyAyMDAyLzAxLzIyIDIwOjI5OjAzIHZvanRlY2ggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqCiAgKiAgQmFzZWQgb24gdGhlIHdvcmsgb2Y6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlb3JiLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlb3JiLmMKaW5kZXggZjdjZTQwMC4uYTY5NGJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zcGFjZW9yYi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2VvcmIuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IHNwYWNlb3JiLmMsdiAxLjE1IDIwMDIvMDEvMjIgMjA6Mjk6MTkgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpawogICoKICAqICBCYXNlZCBvbiB0aGUgd29yayBvZjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3Rpbmdlci5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zdGluZ2VyLmMKaW5kZXggYmFhMTBiMi4uZTBkYjlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zdGluZ2VyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zdGluZ2VyLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogJElkOiBzdGluZ2VyLmMsdiAxLjEwIDIwMDIvMDEvMjIgMjA6Mjk6MzEgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpawogICogIENvcHlyaWdodCAoYykgMjAwMCBNYXJrIEZsZXRjaGVyCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdG1kYy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKaW5kZXggMGZlZWI4YS4uNjBjMzdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogJElkOiB0bWRjLmMsdiAxLjMxIDIwMDIvMDEvMjIgMjA6Mjk6NTIgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBWb2p0ZWNoIFBhdmxpawogICoKICAqICAgQmFzZWQgb24gdGhlIHdvcmsgb2Y6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCmluZGV4IDk4OTQ4M2YuLmI2Zjg1OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogdHVyYm9ncmFmeC5jLHYgMS4xNCAyMDAyLzAxLzIyIDIwOjMwOjM5IHZvanRlY2ggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqCiAgKiAgQmFzZWQgb24gdGhlIHdvcmsgb2Y6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R3aWRqb3kuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHdpZGpveS5jCmluZGV4IDEwODVjODQuLjNmNGVjNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHdpZGpveS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHdpZGpveS5jCkBAIC0xLDggKzEsNCBAQAogLyoKLSAqICRJZDogdHdpZGpveS5jLHYgMS41IDIwMDIvMDEvMjIgMjA6MzE6NTMgdm9qdGVjaCBFeHAgJAotICoKLSAqICBkZXJpdmVkIGZyb20gQ1ZTLUlEICJzdGluZ2VyLmMsdiAxLjUgMjAwMS8wNS8yOSAxMjo1NzoxOCB2b2p0ZWNoIEV4cCIKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAxIEFybmR0IFNjaG9lbmV3YWxkCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAgTWFyayBGbGV0Y2hlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay93YXJyaW9yLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3dhcnJpb3IuYwppbmRleCBlOTI4YjZlLi5mNzJjODNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3dhcnJpb3IuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3dhcnJpb3IuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IHdhcnJpb3IuYyx2IDEuMTQgMjAwMi8wMS8yMiAyMDozMjoxMCB2b2p0ZWNoIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIFZvanRlY2ggUGF2bGlrCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwppbmRleCBiMjllM2FmLi44N2QzZTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwpAQCAtNDE4LDExICs0MTgsMTEgQEAKIAljYXNlIC1FU0hVVERPV046CiAJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCiAJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAotCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgogCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtNDQxLDcgKzQ0MSw3IEBACiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKIAkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJICAgICBfX2Z1bmNfXywgcmV0dmFsKTsKIH0KIAogc3RhdGljIHZvaWQgeHBhZF9idWxrX291dChzdHJ1Y3QgdXJiICp1cmIpCkBAIC00NzcsMTEgKzQ3NywxMSBAQAogCQljYXNlIC1FU0hVVERPV046CiAJCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwogCQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCi0JCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQkJcmV0dXJuOwogCQlkZWZhdWx0OgogCQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAotCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTQ4OSw3ICs0ODksNyBAQAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKIAkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCSAgICBfX2Z1bmNfXywgcmV0dmFsKTsKIH0KIAogc3RhdGljIGludCB4cGFkX2luaXRfb3V0cHV0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FtaWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hbWlrYmQuYwppbmRleCA4MWJmNzU2Li4zNTE0OWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FtaWtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYW1pa2JkLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogJElkOiBhbWlrYmQuYyx2IDEuMTMgMjAwMi8wMi8wMSAxNjowMjoyNCB2b2p0ZWNoIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrCiAgKgogICogIEJhc2VkIG9uIHRoZSB3b3JrIG9mOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGFrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRha2JkLmMKaW5kZXggNGU5MjEwMC4uMTgzOTE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGFrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0YWtiZC5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAlpbnQgaSwgZXJyb3I7CiAKIAlpZiAoIU1BQ0hfSVNfQVRBUkkgfHwgIUFUQVJJSFdfUFJFU0VOVChTVF9NRlApKQotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvLyBuZWVkIHRvIGluaXQgY29yZSBkcml2ZXIgaWYgbm90IGFscmVhZHkgZG9uZSBzbwogCWlmIChhdGFyaV9rZXliX2luaXQoKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCBhZjU4YTZmLi5iMWNlMTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC02OCw3ICs2OCw3IEBACiAgKiBhcmUgbG9hZGFibGUgdmlhIGFuIHVzZXJsYW5kIHV0aWxpdHkuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgYXRrYmRfc2V0Ml9rZXljb2RlWzUxMl0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYXRrYmRfc2V0Ml9rZXljb2RlWzUxMl0gPSB7CiAKICNpZmRlZiBDT05GSUdfS0VZQk9BUkRfQVRLQkRfSFBfS0VZQ09ERVMKIApAQCAtOTksNyArOTksNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBhdGtiZF9zZXQzX2tleWNvZGVbNTEyXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhdGtiZF9zZXQzX2tleWNvZGVbNTEyXSA9IHsKIAogCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgNTksICAxLDEzOCwxMjgsMTI5LDEzMCwgMTUsIDQxLCA2MCwKIAkxMzEsIDI5LCA0MiwgODYsIDU4LCAxNiwgIDIsIDYxLDEzMywgNTYsIDQ0LCAzMSwgMzAsIDE3LCAgMywgNjIsCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkxNDgsMTQ5LDE0NywxNDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGF0a2JkX3VueGxhdGVfdGFibGVbMTI4XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhdGtiZF91bnhsYXRlX3RhYmxlWzEyOF0gPSB7CiAgICAgICAgICAgMCwxMTgsIDIyLCAzMCwgMzgsIDM3LCA0NiwgNTQsIDYxLCA2MiwgNzAsIDY5LCA3OCwgODUsMTAyLCAxMywKICAgICAgICAgIDIxLCAyOSwgMzYsIDQ1LCA0NCwgNTMsIDYwLCA2NywgNjgsIDc3LCA4NCwgOTEsIDkwLCAyMCwgMjgsIDI3LAogICAgICAgICAgMzUsIDQzLCA1MiwgNTEsIDU5LCA2NiwgNzUsIDc2LCA4MiwgMTQsIDE4LCA5MywgMjYsIDM0LCAzMywgNDIsCkBAIC0xNjEsNyArMTYxLDcgQEAKICNkZWZpbmUgQVRLQkRfU0NSX0xFRlQJCTI0OQogI2RlZmluZSBBVEtCRF9TQ1JfUklHSFQJCTI0OAogCi0jZGVmaW5lIEFUS0JEX1NQRUNJQUwJCTI0OAorI2RlZmluZSBBVEtCRF9TUEVDSUFMCQlBVEtCRF9TQ1JfUklHSFQKIAogI2RlZmluZSBBVEtCRF9MRURfRVZFTlRfQklUCTAKICNkZWZpbmUgQVRLQkRfUkVQX0VWRU5UX0JJVAkxCkBAIC0xNzMsNyArMTczLDcgQEAKICNkZWZpbmUgQVRLQkRfWExfSEFOR0VVTAkweDEwCiAjZGVmaW5lIEFUS0JEX1hMX0hBTkpBCQkweDIwCiAKLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdW5zaWduZWQgY2hhciBrZXljb2RlOwogCXVuc2lnbmVkIGNoYXIgc2V0MjsKIH0gYXRrYmRfc2Nyb2xsX2tleXNbXSA9IHsKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWNoYXIgcGh5c1szMl07CiAKIAl1bnNpZ25lZCBzaG9ydCBpZDsKLQl1bnNpZ25lZCBjaGFyIGtleWNvZGVbNTEyXTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2RlWzUxMl07CiAJREVDTEFSRV9CSVRNQVAoZm9yY2VfcmVsZWFzZV9tYXNrLCA1MTIpOwogCXVuc2lnbmVkIGNoYXIgc2V0OwogCXVuc2lnbmVkIGNoYXIgdHJhbnNsYXRlZDsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCXVuc2lnbmVkIGludCBjb2RlID0gZGF0YTsKIAlpbnQgc2Nyb2xsID0gMCwgaHNjcm9sbCA9IDAsIGNsaWNrID0gLTE7CiAJaW50IHZhbHVlOwotCXVuc2lnbmVkIGNoYXIga2V5Y29kZTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2RlOwogCiAjaWZkZWYgQVRLQkRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiYXRrYmQuYzogUmVjZWl2ZWQgJTAyeCBmbGFncyAlMDJ4XG4iLCBkYXRhLCBmbGFncyk7CkBAIC04NTEsNiArODUxLDIzIEBACiB9CiAKIC8qCisgKiBQZXJmb3JtIGZpeHVwIGZvciBIUCBzeXN0ZW0gdGhhdCBkb2Vzbid0IGdlbmVyYXRlIHJlbGVhc2UKKyAqIGZvciBpdHMgdmlkZW8gc3dpdGNoCisgKi8KK3N0YXRpYyB2b2lkIGF0a2JkX2hwX2tleW1hcF9maXh1cChzdHJ1Y3QgYXRrYmQgKmF0a2JkKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBmb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CisJCTB4OTQsCisJfTsKKwlpbnQgaTsKKworCWlmIChhdGtiZC0+c2V0ID09IDIpCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcmNlZF9yZWxlYXNlX2tleXMpOyBpKyspCisJCQlfX3NldF9iaXQoZm9yY2VkX3JlbGVhc2Vfa2V5c1tpXSwKKwkJCQkJYXRrYmQtPmZvcmNlX3JlbGVhc2VfbWFzayk7Cit9CisKKy8qCiAgKiBhdGtiZF9zZXRfa2V5Y29kZV90YWJsZSgpIGluaXRpYWxpemVzIGtleWJvYXJkJ3Mga2V5Y29kZSB0YWJsZQogICogYWNjb3JkaW5nIHRvIHRoZSBzZWxlY3RlZCBzY2FuY29kZSBzZXQKICAqLwpAQCAtOTYxLDE2ICs5NzgsMTYgQEAKIAkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9SRUwpOwogCQlpbnB1dF9kZXYtPnJlbGJpdFswXSA9IEJJVF9NQVNLKFJFTF9XSEVFTCkgfAogCQkJQklUX01BU0soUkVMX0hXSEVFTCk7Ci0JCXNldF9iaXQoQlROX01JRERMRSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX01JRERMRSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCX0KIAogCWlucHV0X2Rldi0+a2V5Y29kZSA9IGF0a2JkLT5rZXljb2RlOwotCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcik7CisJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CiAJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShhdGtiZF9zZXQyX2tleWNvZGUpOwogCiAJZm9yIChpID0gMDsgaSA8IDUxMjsgaSsrKQogCQlpZiAoYXRrYmQtPmtleWNvZGVbaV0gJiYgYXRrYmQtPmtleWNvZGVbaV0gPCBBVEtCRF9TUEVDSUFMKQotCQkJc2V0X2JpdChhdGtiZC0+a2V5Y29kZVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQkJX19zZXRfYml0KGF0a2JkLT5rZXljb2RlW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CiB9CiAKIC8qCkBAIC0xNDUyLDYgKzE0NjksMTUgQEAKIAkJLmNhbGxiYWNrID0gYXRrYmRfc2V0dXBfZml4dXAsCiAJCS5kcml2ZXJfZGF0YSA9IGF0a2JkX2xhdGl0dWRlX2tleW1hcF9maXh1cCwKIAl9LAorCXsKKwkJLmlkZW50ID0gIkhQIDIxMzMiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJIUCAyMTMzIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZpeHVwLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF9rZXltYXBfZml4dXAsCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCmluZGV4IGJiZDAwYzMuLmJlNTg3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwpAQCAtMjYsMjMgKzI2LDU0IEBACiAKICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogCitzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSB7CisJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKK3N0cnVjdCBncGlvX2tleXNfZHJ2ZGF0YSB7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgZGF0YVswXTsKK307CisKK3N0YXRpYyB2b2lkIGdwaW9fa2V5c19yZXBvcnRfZXZlbnQoc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiwKKwkJCQkgICBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwl1bnNpZ25lZCBpbnQgdHlwZSA9IGJ1dHRvbi0+dHlwZSA/OiBFVl9LRVk7CisJaW50IHN0YXRlID0gKGdwaW9fZ2V0X3ZhbHVlKGJ1dHRvbi0+Z3BpbykgPyAxIDogMCkgXiBidXR0b24tPmFjdGl2ZV9sb3c7CisKKwlpbnB1dF9ldmVudChpbnB1dCwgdHlwZSwgYnV0dG9uLT5jb2RlLCAhIXN0YXRlKTsKKwlpbnB1dF9zeW5jKGlucHV0KTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19jaGVja19idXR0b24odW5zaWduZWQgbG9uZyBfZGF0YSkKK3sKKwlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqZGF0YSA9IChzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqKV9kYXRhOworCisJZ3Bpb19rZXlzX3JlcG9ydF9ldmVudChkYXRhLT5idXR0b24sIGRhdGEtPmlucHV0KTsKK30KKwogc3RhdGljIGlycXJldHVybl90IGdwaW9fa2V5c19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCWludCBpOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXZfaWQ7CiAJc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGdwaW9fa2V5c19kcnZkYXRhICpkZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7CiAJCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpidXR0b24gPSAmcGRhdGEtPmJ1dHRvbnNbaV07Ci0JCWludCBncGlvID0gYnV0dG9uLT5ncGlvOwogCi0JCWlmIChpcnEgPT0gZ3Bpb190b19pcnEoZ3BpbykpIHsKLQkJCXVuc2lnbmVkIGludCB0eXBlID0gYnV0dG9uLT50eXBlID86IEVWX0tFWTsKLQkJCWludCBzdGF0ZSA9IChncGlvX2dldF92YWx1ZShncGlvKSA/IDEgOiAwKSBeIGJ1dHRvbi0+YWN0aXZlX2xvdzsKKwkJaWYgKGlycSA9PSBncGlvX3RvX2lycShidXR0b24tPmdwaW8pKSB7CisJCQlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqYmRhdGEgPSAmZGRhdGEtPmRhdGFbaV07CiAKLQkJCWlucHV0X2V2ZW50KGlucHV0LCB0eXBlLCBidXR0b24tPmNvZGUsICEhc3RhdGUpOwotCQkJaW5wdXRfc3luYyhpbnB1dCk7CisJCQlpZiAoYnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCkKKwkJCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKKwkJCQkJICBqaWZmaWVzICsKKwkJCQkJICBtc2Vjc190b19qaWZmaWVzKGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpKTsKKwkJCWVsc2UKKwkJCQlncGlvX2tleXNfcmVwb3J0X2V2ZW50KGJ1dHRvbiwgYmRhdGEtPmlucHV0KTsKKwogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQl9CiAJfQpAQCAtNTMsMTcgKzg0LDIxIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBncGlvX2tleXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGdwaW9fa2V5c19kcnZkYXRhICpkZGF0YTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAlpbnQgaSwgZXJyb3I7CiAJaW50IHdha2V1cCA9IDA7CiAKKwlkZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBncGlvX2tleXNfZHJ2ZGF0YSkgKworCQkJcGRhdGEtPm5idXR0b25zICogc2l6ZW9mKHN0cnVjdCBncGlvX2J1dHRvbl9kYXRhKSwKKwkJCUdGUF9LRVJORUwpOwogCWlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpbnB1dCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFkZGF0YSB8fCAhaW5wdXQpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwxOworCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlucHV0KTsKLQotCWlucHV0LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGRhdGEpOwogCiAJaW5wdXQtPm5hbWUgPSBwZGV2LT5uYW1lOwogCWlucHV0LT5waHlzID0gImdwaW8ta2V5cy9pbnB1dDAiOwpAQCAtNzQsMTYgKzEwOSwyMyBAQAogCWlucHV0LT5pZC5wcm9kdWN0ID0gMHgwMDAxOwogCWlucHV0LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCisJZGRhdGEtPmlucHV0ID0gaW5wdXQ7CisKIAlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5idXR0b25zOyBpKyspIHsKIAkJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiA9ICZwZGF0YS0+YnV0dG9uc1tpXTsKKwkJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhID0gJmRkYXRhLT5kYXRhW2ldOwogCQlpbnQgaXJxOwogCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGJ1dHRvbi0+dHlwZSA/OiBFVl9LRVk7CiAKKwkJYmRhdGEtPmlucHV0ID0gaW5wdXQ7CisJCXNldHVwX3RpbWVyKCZiZGF0YS0+dGltZXIsCisJCQkgICAgZ3Bpb19jaGVja19idXR0b24sICh1bnNpZ25lZCBsb25nKWJkYXRhKTsKKwogCQllcnJvciA9IGdwaW9fcmVxdWVzdChidXR0b24tPmdwaW8sIGJ1dHRvbi0+ZGVzYyA/OiAiZ3Bpb19rZXlzIik7CiAJCWlmIChlcnJvciA8IDApIHsKIAkJCXByX2VycigiZ3Bpby1rZXlzOiBmYWlsZWQgdG8gcmVxdWVzdCBHUElPICVkLCIKIAkJCQkiIGVycm9yICVkXG4iLCBidXR0b24tPmdwaW8sIGVycm9yKTsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gZmFpbDI7CiAJCX0KIAogCQllcnJvciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGJ1dHRvbi0+Z3Bpbyk7CkBAIC05Miw3ICsxMzQsNyBAQAogCQkJCSIgZGlyZWN0aW9uIGZvciBHUElPICVkLCBlcnJvciAlZFxuIiwKIAkJCQlidXR0b24tPmdwaW8sIGVycm9yKTsKIAkJCWdwaW9fZnJlZShidXR0b24tPmdwaW8pOwotCQkJZ290byBmYWlsOworCQkJZ290byBmYWlsMjsKIAkJfQogCiAJCWlycSA9IGdwaW9fdG9faXJxKGJ1dHRvbi0+Z3Bpbyk7CkBAIC0xMDIsNyArMTQ0LDcgQEAKIAkJCQkiIGZvciBHUElPICVkLCBlcnJvciAlZFxuIiwKIAkJCQlidXR0b24tPmdwaW8sIGVycm9yKTsKIAkJCWdwaW9fZnJlZShidXR0b24tPmdwaW8pOwotCQkJZ290byBmYWlsOworCQkJZ290byBmYWlsMjsKIAkJfQogCiAJCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLApAQCAtMTE0LDcgKzE1Niw3IEBACiAJCQlwcl9lcnIoImdwaW8ta2V5czogVW5hYmxlIHRvIGNsYWltIGlycSAlZDsgZXJyb3IgJWRcbiIsCiAJCQkJaXJxLCBlcnJvcik7CiAJCQlncGlvX2ZyZWUoYnV0dG9uLT5ncGlvKTsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gZmFpbDI7CiAJCX0KIAogCQlpZiAoYnV0dG9uLT53YWtldXApCkBAIC0xMjcsMjEgKzE2OSwyNSBAQAogCWlmIChlcnJvcikgewogCQlwcl9lcnIoImdwaW8ta2V5czogVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZSwgIgogCQkJImVycm9yOiAlZFxuIiwgZXJyb3IpOwotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDI7CiAJfQogCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIHdha2V1cCk7CiAKIAlyZXR1cm4gMDsKIAotIGZhaWw6CisgZmFpbDI6CiAJd2hpbGUgKC0taSA+PSAwKSB7CiAJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pLCBwZGV2KTsKKwkJaWYgKHBkYXRhLT5idXR0b25zW2ldLmRlYm91bmNlX2ludGVydmFsKQorCQkJZGVsX3RpbWVyX3N5bmMoJmRkYXRhLT5kYXRhW2ldLnRpbWVyKTsKIAkJZ3Bpb19mcmVlKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pOwogCX0KIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworIGZhaWwxOgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwlrZnJlZShkZGF0YSk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xNDksNyArMTk1LDggQEAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGdwaW9fa2V5c19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgKmRkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBkZGF0YS0+aW5wdXQ7CiAJaW50IGk7CiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMCk7CkBAIC0xNTcsNiArMjA0LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5idXR0b25zOyBpKyspIHsKIAkJaW50IGlycSA9IGdwaW9fdG9faXJxKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pOwogCQlmcmVlX2lycShpcnEsIHBkZXYpOworCQlpZiAocGRhdGEtPmJ1dHRvbnNbaV0uZGVib3VuY2VfaW50ZXJ2YWwpCisJCQlkZWxfdGltZXJfc3luYygmZGRhdGEtPmRhdGFbaV0udGltZXIpOwogCQlncGlvX2ZyZWUocGRhdGEtPmJ1dHRvbnNbaV0uZ3Bpbyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xra2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xra2JkLmMKaW5kZXggMzJlMmMyNi4uNDczMGVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sa2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbGtrYmQuYwpAQCAtNTM4LDExICs1MzgsMTEgQEAKIAkJCXN3aXRjaCAoY29kZSkgewogCQkJCWNhc2UgU05EX0NMSUNLOgogCQkJCQlpZiAodmFsdWUgPT0gMCkgewotCQkJCQkJREJHICgiJXM6IERlYWN0aXZhdGluZyBrZXkgY2xpY2tzXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCQkJREJHICgiJXM6IERlYWN0aXZhdGluZyBrZXkgY2xpY2tzXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9ESVNBQkxFX0tFWUNMSUNLKTsKIAkJCQkJCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0RJU0FCTEVfQ1RSQ0xJQ0spOwogCQkJCQl9IGVsc2UgewotCQkJCQkJREJHICgiJXM6IEFjdGl2YXRpbmcga2V5IGNsaWNrc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJCURCRyAoIiVzOiBBY3RpdmF0aW5nIGtleSBjbGlja3NcbiIsIF9fZnVuY19fKTsKIAkJCQkJCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9LRVlDTElDSyk7CiAJCQkJCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIHZvbHVtZV90b19odyAobGstPmtleWNsaWNrX3ZvbHVtZSkpOwogCQkJCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfRU5BQkxFX0NUUkNMSUNLKTsKQEAgLTU2MCw3ICs1NjAsNyBAQAogCiAJCWRlZmF1bHQ6CiAJCQlwcmludGsgKEtFUk5fRVJSICIlcyAoKTogR290IHVua25vd24gdHlwZSAlZCwgY29kZSAlZCwgdmFsdWUgJWRcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgdHlwZSwgY29kZSwgdmFsdWUpOworCQkJCQlfX2Z1bmNfXywgdHlwZSwgY29kZSwgdmFsdWUpOwogCX0KIAogCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvcHhhMjd4X2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKaW5kZXggNDU3NjdlNy4uNmYxNTE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKQEAgLTEwNSw2ICsxMDUsOCBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAl2b2lkIF9faW9tZW0gKm1taW9fYmFzZTsKIAorCWludCBpcnE7CisKIAkvKiBtYXRyaXgga2V5IGNvZGUgbWFwICovCiAJdW5zaWduZWQgaW50IG1hdHJpeF9rZXljb2Rlc1tNQVhfTUFUUklYX0tFWV9OVU1dOwogCkBAIC0zOTIsNiArMzk0LDEwIEBACiAJc3RydWN0IHB4YTI3eF9rZXlwYWQgKmtleXBhZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJY2xrX2Rpc2FibGUoa2V5cGFkLT5jbGspOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCQllbmFibGVfaXJxX3dha2Uoa2V5cGFkLT5pcnEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwMCw2ICs0MDYsOSBAQAogCXN0cnVjdCBweGEyN3hfa2V5cGFkICprZXlwYWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBrZXlwYWQtPmlucHV0X2RldjsKIAorCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJZGlzYWJsZV9pcnFfd2FrZShrZXlwYWQtPmlycSk7CisKIAltdXRleF9sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKIAogCWlmIChpbnB1dF9kZXYtPnVzZXJzKSB7CkBAIC01MDksNiArNTE4LDggQEAKIAkJZ290byBmYWlsZWRfZnJlZV9kZXY7CiAJfQogCisJa2V5cGFkLT5pcnEgPSBpcnE7CisKIAkvKiBSZWdpc3RlciB0aGUgaW5wdXQgZGV2aWNlICovCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKIAlpZiAoZXJyb3IpIHsKQEAgLTUxNiw2ICs1MjcsOCBAQAogCQlnb3RvIGZhaWxlZF9mcmVlX2lycTsKIAl9CiAKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisKIAlyZXR1cm4gMDsKIAogZmFpbGVkX2ZyZWVfaXJxOgpAQCAtNTM5LDcgKzU1Miw3IEBACiAJc3RydWN0IHB4YTI3eF9rZXlwYWQgKmtleXBhZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCi0JZnJlZV9pcnEocGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwgcGRldik7CisJZnJlZV9pcnEoa2V5cGFkLT5pcnEsIHBkZXYpOwogCiAJY2xrX2Rpc2FibGUoa2V5cGFkLT5jbGspOwogCWNsa19wdXQoa2V5cGFkLT5jbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKaW5kZXggYmUwZjVkMS4uOWZjZTZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogc3Vua2JkLmMsdiAxLjE0IDIwMDEvMDkvMjUgMTA6MTI6MDcgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpawogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdG9zYWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90b3Nha2JkLmMKaW5kZXggOTRlNDQ0Yi4uYjEyYjdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90b3Nha2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90b3Nha2JkLmMKQEAgLTIxNSw4ICsyMTUsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdG9zYWtiZC0+bG9jaywgZmxhZ3MpOwotCVBHU1IxID0gKFBHU1IxICYgflRPU0FfR1BJT19MT1dfU1RST0JFX0JJVCk7Ci0JUEdTUjIgPSAoUEdTUjIgJiB+VE9TQV9HUElPX0hJR0hfU1RST0JFX0JJVCk7CiAJdG9zYWtiZC0+c3VzcGVuZGVkID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0b3Nha2JkLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQveHRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQveHRrYmQuYwppbmRleCAxNTJhMmMwLi4zN2IwMWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3h0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC94dGtiZC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogeHRrYmQuYyx2IDEuMTEgMjAwMS8wOS8yNSAxMDoxMjowNyB2b2p0ZWNoIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIFZvanRlY2ggUGF2bGlrCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCA0MzI2OTlkLi5lOTliNzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtMTg5LDYgKzE4OSwxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdWlucHV0LgogCitjb25maWcgSU5QVVRfU0dJX0JUTlMKKwl0cmlzdGF0ZSAiU0dJIEluZHkvTzIgdm9sdW1lIGJ1dHRvbiBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBTR0lfSVAyMiB8fCBTR0lfSVAzMgorCXNlbGVjdCBJTlBVVF9QT0xMREVWCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IFNHSSBJbmR5L08yIHZvbHVtZSBidXR0b24gaW50ZXJmYWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZ2lfYnRucy4KKwogY29uZmlnIEhQX1NEQ19SVEMKIAl0cmlzdGF0ZSAiSFAgU0RDIFJlYWwgVGltZSBDbG9jayIKIAlkZXBlbmRzIG9uIEdTQyB8fCBIUDMwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCmluZGV4IGViZDM5ZjIuLmY0ODAwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKQEAgLTE5LDMgKzE5LDQgQEAKIG9iai0kKENPTkZJR19IUF9TRENfUlRDKQkJKz0gaHBfc2RjX3J0Yy5vCiBvYmotJChDT05GSUdfSU5QVVRfVUlOUFVUKQkJKz0gdWlucHV0Lm8KIG9iai0kKENPTkZJR19JTlBVVF9BUEFORUwpCQkrPSBhcGFuZWwubworb2JqLSQoQ09ORklHX0lOUFVUX1NHSV9CVE5TKQkJKz0gc2dpX2J0bnMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlLmMKaW5kZXggZjNiODZjMi4uZGViZmMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZS5jCkBAIC0zMzAsNyArMzMwLDcgQEAKIAlhdGlfcmVtb3RlLT5pcnFfdXJiLT5kZXYgPSBhdGlfcmVtb3RlLT51ZGV2OwogCWlmICh1c2Jfc3VibWl0X3VyYihhdGlfcmVtb3RlLT5pcnFfdXJiLCBHRlBfS0VSTkVMKSkgewogCQlkZXZfZXJyKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwKLQkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTM1Niw3ICszNTYsNyBAQAogCiAJaWYgKHVyYi0+c3RhdHVzKSB7CiAJCWRldl9kYmcoJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAiJXM6IHN0YXR1cyAlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQkJX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjAxLDE3ICs2MDEsMTcgQEAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCQlkZXZfZGJnKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgIiVzOiB1cmIgZXJyb3Igc3RhdHVzLCB1bmxpbms/IFxuIiwKLQkJCV9fRlVOQ1RJT05fXyk7CisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgkJLyogZXJyb3IgKi8KIAkJZGV2X2RiZygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICIlczogTm9uemVybyB1cmIgc3RhdHVzICVkXG4iLAotCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCQlfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCX0KIAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKIAkJZGV2X2VycigmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICIlczogdXNiX3N1Ym1pdF91cmIoKT0lZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJCV9fZnVuY19fLCByZXR2YWwpOwogfQogCiAvKgpAQCAtNzM0LDcgKzczNCw3IEBACiAJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpZiAoaWZhY2VfaG9zdC0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDIpIHsKLQkJZXJyKCIlczogVW5leHBlY3RlZCBkZXNjLmJOdW1FbmRwb2ludHNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IFVuZXhwZWN0ZWQgZGVzYy5iTnVtRW5kcG9pbnRzXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNzQyLDExICs3NDIsMTEgQEAKIAllbmRwb2ludF9vdXQgPSAmaWZhY2VfaG9zdC0+ZW5kcG9pbnRbMV0uZGVzYzsKIAogCWlmICghdXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludF9pbikpIHsKLQkJZXJyKCIlczogVW5leHBlY3RlZCBlbmRwb2ludF9pblxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogVW5leHBlY3RlZCBlbmRwb2ludF9pblxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKGxlMTZfdG9fY3B1KGVuZHBvaW50X2luLT53TWF4UGFja2V0U2l6ZSkgPT0gMCkgewotCQllcnIoIiVzOiBlbmRwb2ludF9pbiBtZXNzYWdlIHNpemU9PTA/IFxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogZW5kcG9pbnRfaW4gbWVzc2FnZSBzaXplPT0wPyBcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC04MTQsNyArODE0LDcgQEAKIAlhdGlfcmVtb3RlID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAlpZiAoIWF0aV9yZW1vdGUpIHsKLQkJd2FybigiJXMgLSBudWxsIGRldmljZT9cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzIC0gbnVsbCBkZXZpY2U/XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlMi5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMKaW5kZXggZjI3MDliOC4uYTdmYWJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMKQEAgLTEzNywxNCArMTM3LDE0IEBACiAJciA9IHVzYl9zdWJtaXRfdXJiKGFyMi0+dXJiWzBdLCBHRlBfS0VSTkVMKTsKIAlpZiAocikgewogCQlkZXZfZXJyKCZhcjItPmludGZbMF0tPmRldiwKLQkJCSIlczogdXNiX3N1Ym1pdF91cmIoKSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHIpOworCQkJIiVzOiB1c2Jfc3VibWl0X3VyYigpID0gJWRcbiIsIF9fZnVuY19fLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCXIgPSB1c2Jfc3VibWl0X3VyYihhcjItPnVyYlsxXSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHIpIHsKIAkJdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzBdKTsKIAkJZGV2X2VycigmYXIyLT5pbnRmWzFdLT5kZXYsCi0JCQkiJXM6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19GVU5DVElPTl9fLCByKTsKKwkJCSIlczogdXNiX3N1Ym1pdF91cmIoKSA9ICVkXG4iLCBfX2Z1bmNfXywgcik7CiAJCXJldHVybiByOwogCX0KIApAQCAtMjk0LDE3ICsyOTQsMTcgQEAKIAljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJZGV2X2RiZygmYXIyLT5pbnRmWzBdLT5kZXYsCi0JCQkiJXMoKTogdXJiIHN0YXR1cyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJCSIlcygpOiB1cmIgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZhcjItPmludGZbMF0tPmRldiwKLQkJCSIlcygpOiB1cmIgc3RhdHVzID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAl9CiAKIAlyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocikKIAkJZGV2X2VycigmYXIyLT5pbnRmWzBdLT5kZXYsCi0JCQkiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHIpOworCQkJIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOwogfQogCiBzdGF0aWMgdm9pZCBhdGlfcmVtb3RlMl9jb21wbGV0ZV9rZXkoc3RydWN0IHVyYiAqdXJiKQpAQCAtMzIxLDE3ICszMjEsMTcgQEAKIAljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJZGV2X2RiZygmYXIyLT5pbnRmWzFdLT5kZXYsCi0JCQkiJXMoKTogdXJiIHN0YXR1cyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJCSIlcygpOiB1cmIgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZhcjItPmludGZbMV0tPmRldiwKLQkJCSIlcygpOiB1cmIgc3RhdHVzID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAl9CiAKIAlyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocikKIAkJZGV2X2VycigmYXIyLT5pbnRmWzFdLT5kZXYsCi0JCQkiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHIpOworCQkJIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOwogfQogCiBzdGF0aWMgaW50IGF0aV9yZW1vdGUyX2lucHV0X2luaXQoc3RydWN0IGF0aV9yZW1vdGUyICphcjIpCkBAIC00MzgsNyArNDM4LDcgQEAKIAkJCSAgICBjaGFubmVsLCAweDAsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKIAlpZiAocikgewogCQlkZXZfZXJyKCZhcjItPnVkZXYtPmRldiwgIiVzIC0gZmFpbGVkIHRvIHNldCBjaGFubmVsIGR1ZSB0byBlcnJvcjogJWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIHIpOworCQkJX19mdW5jX18sIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9rZXlzcGFuX3JlbW90ZS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKaW5kZXggOTUyOTM4YS4uODZhZmRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCWlmIChkZXYtPmRhdGEucG9zID49IGRldi0+ZGF0YS5sZW4pIHsKIAkJZGV2X2RiZygmZGV2LT51ZGV2LT5kZXYsCiAJCQkiJXMgLSBFcnJvciByYW4gb3V0IG9mIGRhdGEuIHBvczogJWQsIGxlbjogJWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGRldi0+ZGF0YS5wb3MsIGRldi0+ZGF0YS5sZW4pOworCQkJX19mdW5jX18sIGRldi0+ZGF0YS5wb3MsIGRldi0+ZGF0YS5sZW4pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNjcsNyArMjY3LDcgQEAKIAkJCQlyZW1vdGUtPmRhdGEudGVzdGVyID0gcmVtb3RlLT5kYXRhLnRlc3RlciA+PiA2OwogCQkJCXJlbW90ZS0+ZGF0YS5iaXRzX2xlZnQgLT0gNjsKIAkJCX0gZWxzZSB7Ci0JCQkJZXJyKCIlcyAtIFVua25vd24gc2VxdWVuY2UgZm91bmQgaW4gc3lzdGVtIGRhdGEuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWVycigiJXMgLSBVbmtub3duIHNlcXVlbmNlIGZvdW5kIGluIHN5c3RlbSBkYXRhLlxuIiwgX19mdW5jX18pOwogCQkJCXJlbW90ZS0+c3RhZ2UgPSAwOwogCQkJCXJldHVybjsKIAkJCX0KQEAgLTI4Niw3ICsyODYsNyBAQAogCQkJCXJlbW90ZS0+ZGF0YS50ZXN0ZXIgPSByZW1vdGUtPmRhdGEudGVzdGVyID4+IDY7CiAJCQkJcmVtb3RlLT5kYXRhLmJpdHNfbGVmdCAtPSA2OwogCQkJfSBlbHNlIHsKLQkJCQllcnIoIiVzIC0gVW5rbm93biBzZXF1ZW5jZSBmb3VuZCBpbiBidXR0b24gZGF0YS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJZXJyKCIlcyAtIFVua25vd24gc2VxdWVuY2UgZm91bmQgaW4gYnV0dG9uIGRhdGEuXG4iLCBfX2Z1bmNfXyk7CiAJCQkJcmVtb3RlLT5zdGFnZSA9IDA7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtMzAyLDcgKzMwMiw3IEBACiAJCQlyZW1vdGUtPmRhdGEudGVzdGVyID0gcmVtb3RlLT5kYXRhLnRlc3RlciA+PiA2OwogCQkJcmVtb3RlLT5kYXRhLmJpdHNfbGVmdCAtPSA2OwogCQl9IGVsc2UgewotCQkJZXJyKCIlcyAtIEVycm9yIGluIG1lc3NhZ2UsIGludmFsaWQgdG9nZ2xlLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWVycigiJXMgLSBFcnJvciBpbiBtZXNzYWdlLCBpbnZhbGlkIHRvZ2dsZS5cbiIsIF9fZnVuY19fKTsKIAkJCXJlbW90ZS0+c3RhZ2UgPSAwOwogCQkJcmV0dXJuOwogCQl9CkBAIC0zMTcsNyArMzE3LDcgQEAKIAogCQlkZXZfZGJnKCZyZW1vdGUtPnVkZXYtPmRldiwKIAkJCSIlcyBmb3VuZCB2YWxpZCBtZXNzYWdlOiBzeXN0ZW06ICVkLCBidXR0b246ICVkLCB0b2dnbGU6ICVkXG4iLAotCQkJX19GVU5DVElPTl9fLCBtZXNzYWdlLnN5c3RlbSwgbWVzc2FnZS5idXR0b24sIG1lc3NhZ2UudG9nZ2xlKTsKKwkJCV9fZnVuY19fLCBtZXNzYWdlLnN5c3RlbSwgbWVzc2FnZS5idXR0b24sIG1lc3NhZ2UudG9nZ2xlKTsKIAogCQlpZiAobWVzc2FnZS50b2dnbGUgIT0gcmVtb3RlLT50b2dnbGUpIHsKIAkJCWtleXNwYW5fcmVwb3J0X2J1dHRvbihyZW1vdGUsIG1lc3NhZ2UuYnV0dG9uLCAxKTsKQEAgLTM0MSw3ICszNDEsNyBAQAogCQkJCSAweDExLCAweDQwLCAweDU2MDEsIDB4MCwgTlVMTCwgMCwgMCk7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzIC0gZmFpbGVkIHRvIHNldCBiaXQgcmF0ZSBkdWUgdG8gZXJyb3I6ICVkXG4iLAotCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkJX19mdW5jX18sIHJldHZhbCk7CiAJCXJldHVybihyZXR2YWwpOwogCX0KIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCQkJIDB4NDQsIDB4NDAsIDB4MCwgMHgwLCBOVUxMLCAwLCAwKTsKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9kYmcoJmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgdG8gc2V0IHJlc3VtZSBzZW5zaXRpdml0eSBkdWUgdG8gZXJyb3I6ICVkXG4iLAotCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkJX19mdW5jX18sIHJldHZhbCk7CiAJCXJldHVybihyZXR2YWwpOwogCX0KIApAQCAtMzU3LDExICszNTcsMTEgQEAKIAkJCQkgMHgyMiwgMHg0MCwgMHgwLCAweDAsIE5VTEwsIDAsIDApOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2RiZygmZGV2LT5kZXYsICIlcyAtIGZhaWxlZCB0byB0dXJuIHJlY2VpdmUgb24gZHVlIHRvIGVycm9yOiAlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJCV9fZnVuY19fLCByZXR2YWwpOwogCQlyZXR1cm4ocmV0dmFsKTsKIAl9CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzIC0gU2V0dXAgY29tcGxldGUuXG4iLCBfX0ZVTkNUSU9OX18pOworCWRldl9kYmcoJmRldi0+ZGV2LCAiJXMgLSBTZXR1cCBjb21wbGV0ZS5cbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4ocmV0dmFsKTsKIH0KIApAQCAtMzk3LDcgKzM5Nyw3IEBACiByZXN1Ym1pdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0OiAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQ6ICVkIiwgX19mdW5jX18sIHJldHZhbCk7CiB9CiAKIHN0YXRpYyBpbnQga2V5c3Bhbl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9wb3dlcm1hdGUuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9wb3dlcm1hdGUuYwppbmRleCA3YTdiOGM3Li5hNTNjNDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvcG93ZXJtYXRlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3Bvd2VybWF0ZS5jCkBAIC05NiwxMCArOTYsMTAgQEAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0xMTIsNyArMTEyLDcgQEAKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsKQogCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkgICAgIF9fZnVuY19fLCByZXR2YWwpOwogfQogCiAvKiBEZWNpZGUgaWYgd2UgbmVlZCB0byBpc3N1ZSBhIGNvbnRyb2wgbWVzc2FnZSBhbmQgZG8gc28uIE11c3QgYmUgY2FsbGVkIHdpdGggcG0tPmxvY2sgdGFrZW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9zZ2lfYnRucy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3NnaV9idG5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyMzhmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9zZ2lfYnRucy5jCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogIFNHSSBWb2x1bWUgQnV0dG9uIGludGVyZmFjZSBkcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0LXBvbGxkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2lmZGVmIENPTkZJR19TR0lfSVAyMgorI2luY2x1ZGUgPGFzbS9zZ2kvaW9jLmg+CisKK3N0YXRpYyBpbmxpbmUgdTggYnV0dG9uX3N0YXR1cyh2b2lkKQoreworCXU4IHN0YXR1czsKKworCXN0YXR1cyA9IHJlYWRiKCZzZ2lvYy0+cGFuZWwpIF4gMHhhMDsKKwlyZXR1cm4gKChzdGF0dXMgJiAweDgwKSA+PiA2KSB8ICgoc3RhdHVzICYgMHgyMCkgPj4gNSk7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TR0lfSVAzMgorI2luY2x1ZGUgPGFzbS9pcDMyL21hY2UuaD4KKworc3RhdGljIGlubGluZSB1OCBidXR0b25fc3RhdHVzKHZvaWQpCit7CisJdTY0IHN0YXR1czsKKworCXN0YXR1cyA9IHJlYWRxKCZtYWNlLT5wZXJpZi5hdWRpby5jb250cm9sKTsKKwl3cml0ZXEoc3RhdHVzICYgfigzVSA8PCAyMyksICZtYWNlLT5wZXJpZi5hdWRpby5jb250cm9sKTsKKworCXJldHVybiAoc3RhdHVzID4+IDIzKSAmIDM7Cit9CisjZW5kaWYKKworI2RlZmluZSBCVVRUT05TX1BPTExfSU5URVJWQUwJMzAJLyogbXNlYyAqLworI2RlZmluZSBCVVRUT05TX0NPVU5UX1RIUkVTSE9MRAkzCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzZ2lfbWFwW10gPSB7CisJS0VZX1ZPTFVNRURPV04sCisJS0VZX1ZPTFVNRVVQCit9OworCitzdHJ1Y3QgYnV0dG9uc19kZXYgeworCXN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldjsKKwl1bnNpZ25lZCBzaG9ydCBrZXltYXBbQVJSQVlfU0laRShzZ2lfbWFwKV07CisJaW50IGNvdW50W0FSUkFZX1NJWkUoc2dpX21hcCldOworfTsKKworc3RhdGljIHZvaWQgaGFuZGxlX2J1dHRvbnMoc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgYnV0dG9uc19kZXYgKmJkZXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBkZXYtPmlucHV0OworCXU4IHN0YXR1czsKKwlpbnQgaTsKKworCXN0YXR1cyA9IGJ1dHRvbl9zdGF0dXMoKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJkZXYtPmtleW1hcCk7IGkrKykgeworCQlpZiAoc3RhdHVzICYgKDFVIDw8IGkpKSB7CisJCQlpZiAoKytiZGV2LT5jb3VudFtpXSA9PSBCVVRUT05TX0NPVU5UX1RIUkVTSE9MRCkgeworCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOLCBpKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBiZGV2LT5rZXltYXBbaV0sIDEpOworCQkJCWlucHV0X3N5bmMoaW5wdXQpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGJkZXYtPmNvdW50W2ldID49IEJVVFRPTlNfQ09VTlRfVEhSRVNIT0xEKSB7CisJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX01TQywgTVNDX1NDQU4sIGkpOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIGJkZXYtPmtleW1hcFtpXSwgMCk7CisJCQkJaW5wdXRfc3luYyhpbnB1dCk7CisJCQl9CisJCQliZGV2LT5jb3VudFtpXSA9IDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNnaV9idXR0b25zX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJ1dHRvbnNfZGV2ICpiZGV2OworCXN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlpbnQgZXJyb3IsIGk7CisKKwliZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ1dHRvbnNfZGV2KSwgR0ZQX0tFUk5FTCk7CisJcG9sbF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9wb2xsZWRfZGV2aWNlKCk7CisJaWYgKCFiZGV2IHx8ICFwb2xsX2RldikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCW1lbWNweShiZGV2LT5rZXltYXAsIHNnaV9tYXAsIHNpemVvZihiZGV2LT5rZXltYXApKTsKKworCXBvbGxfZGV2LT5wcml2YXRlID0gYmRldjsKKwlwb2xsX2Rldi0+cG9sbCA9IGhhbmRsZV9idXR0b25zOworCXBvbGxfZGV2LT5wb2xsX2ludGVydmFsID0gQlVUVE9OU19QT0xMX0lOVEVSVkFMOworCisJaW5wdXQgPSBwb2xsX2Rldi0+aW5wdXQ7CisJaW5wdXQtPm5hbWUgPSAiU0dJIGJ1dHRvbnMiOworCWlucHV0LT5waHlzID0gInNnaS9pbnB1dDAiOworCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJaW5wdXQtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJaW5wdXQtPmtleWNvZGUgPSBiZGV2LT5rZXltYXA7CisJaW5wdXQtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGJkZXYtPmtleW1hcCk7CisJaW5wdXQtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKworCWlucHV0X3NldF9jYXBhYmlsaXR5KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOKTsKKwlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNnaV9tYXApOyBpKyspCisJCV9fc2V0X2JpdChiZGV2LT5rZXltYXBbaV0sIGlucHV0LT5rZXliaXQpOworCV9fY2xlYXJfYml0KEtFWV9SRVNFUlZFRCwgaW5wdXQtPmtleWJpdCk7CisKKwliZGV2LT5wb2xsX2RldiA9IHBvbGxfZGV2OworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBiZGV2KTsKKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfcG9sbGVkX2RldmljZShwb2xsX2Rldik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9mcmVlX21lbTsKKworCXJldHVybiAwOworCisgZXJyX2ZyZWVfbWVtOgorCWlucHV0X2ZyZWVfcG9sbGVkX2RldmljZShwb2xsX2Rldik7CisJa2ZyZWUoYmRldik7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc2dpX2J1dHRvbnNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgYnV0dG9uc19kZXYgKmJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlucHV0X3VucmVnaXN0ZXJfcG9sbGVkX2RldmljZShiZGV2LT5wb2xsX2Rldik7CisJaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKGJkZXYtPnBvbGxfZGV2KTsKKwlrZnJlZShiZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZ2lfYnV0dG9uc19kcml2ZXIgPSB7CisJLnByb2JlCT0gc2dpX2J1dHRvbnNfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHNnaV9idXR0b25zX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAic2dpYnRucyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZ2lfYnV0dG9uc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2dpX2J1dHRvbnNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNnaV9idXR0b25zX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2dpX2J1dHRvbnNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2dpX2J1dHRvbnNfaW5pdCk7Cittb2R1bGVfZXhpdChzZ2lfYnV0dG9uc19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCA3MjE3NmYzZC4uZmUyNjhiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwpAQCAtMTE4Niw3ICsxMTg2LDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgc2V0dXBfaW5wdXRfZGV2KHZvaWQpCiB7Ci0JY29uc3Qgc3RydWN0IGtleV9lbnRyeSAqa2V5OworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGVycm9yOwogCkBAIC0xMjE5LDYgKzEyMTksMjMgQEAKIAkJCQlzZXRfYml0KGtleS0+c3cuY29kZSwgaW5wdXRfZGV2LT5zd2JpdCk7CiAJCQkJYnJlYWs7CiAKKwkJCS8qIGlmIHdpZmkgb3IgYmx1ZXRvb3RoIGFyZSBub3QgYXZhaWxhYmxlLCBjcmVhdGUgbm9ybWFsIGtleXMgKi8KKwkJCWNhc2UgS0VfV0lGSToKKwkJCQlpZiAoIWhhdmVfd2lmaSkgeworCQkJCQlrZXktPnR5cGUgPSBLRV9LRVk7CisJCQkJCWtleS0+a2V5Y29kZSA9IEtFWV9XTEFOOworCQkJCQlrZXktLTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgS0VfQkxVRVRPT1RIOgorCQkJCWlmICghaGF2ZV9ibHVldG9vdGgpIHsKKwkJCQkJa2V5LT50eXBlID0gS0VfS0VZOworCQkJCQlrZXktPmtleWNvZGUgPSBLRVlfQkxVRVRPT1RIOworCQkJCQlrZXktLTsKKwkJCQl9CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCmluZGV4IDQ2Mjc5ZWYuLmZhY2VmZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYwpAQCAtMTE5LDYgKzExOSw4IEBACiAJdTggbGNkTWFwW0FSUkFZX1NJWkUobGNkTWFwKV07CS8qIHN0YXRlIG9mIExDRCwgTEVEIC4uLiAqLwogCWludCBrZXlfY29kZTsJCQkvKiBsYXN0IHJlcG9ydGVkIGtleQkgKi8KIAorCXVuc2lnbmVkIGludCBzaHV0ZG93bjoxOworCiAJaW50CXN0YXRfaXg7CiAJdW5pb24gewogCQlzdHJ1Y3QgeWxkX3N0YXR1cyBzOwpAQCAtNDI0LDEwICs0MjYsMTAgQEAKIHN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLT5jb250ZXh0OwotCWludCByZXQ7CisJaW50IHJldCwgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKLQlpZiAodXJiLT5zdGF0dXMpCi0JCWVycigiJXMgLSB1cmIgc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJaWYgKHN0YXR1cykKKwkJZXJyKCIlcyAtIHVyYiBzdGF0dXMgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCXN3aXRjaCAoeWxkLT5pcnFfZGF0YS0+Y21kKSB7CiAJY2FzZSBDTURfS0VZUFJFU1M6CkBAIC00NDcsMzMgKzQ0OSwzOCBAQAogCiAJeWVhbGlua19kb19pZGxlX3Rhc2tzKHlsZCk7CiAKLQlyZXQgPSB1c2Jfc3VibWl0X3VyYih5bGQtPnVyYl9jdGwsIEdGUF9BVE9NSUMpOwotCWlmIChyZXQpCi0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWQiLCBfX0ZVTkNUSU9OX18sIHJldCk7CisJaWYgKCF5bGQtPnNodXRkb3duKSB7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC0+dXJiX2N0bCwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXQgJiYgcmV0ICE9IC1FUEVSTSkKKwkJCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWQiLCBfX2Z1bmNfXywgcmV0KTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLT5jb250ZXh0OwotCWludCByZXQ7CisJaW50IHJldCA9IDAsIHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCi0JaWYgKHVyYi0+c3RhdHVzKQotCQllcnIoIiVzIC0gdXJiIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCWlmIChzdGF0dXMpCisJCWVycigiJXMgLSB1cmIgc3RhdHVzICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAKIAlzd2l0Y2ggKHlsZC0+Y3RsX2RhdGEtPmNtZCkgewogCWNhc2UgQ01EX0tFWVBSRVNTOgogCWNhc2UgQ01EX1NDQU5DT0RFOgogCQkvKiBhc2sgZm9yIGEgcmVzcG9uc2UgKi8KLQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLT51cmJfaXJxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCF5bGQtPnNodXRkb3duKQorCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLT51cmJfaXJxLCBHRlBfQVRPTUlDKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogc2VuZCBuZXcgY29tbWFuZCAqLwogCQl5ZWFsaW5rX2RvX2lkbGVfdGFza3MoeWxkKTsKLQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLT51cmJfY3RsLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCF5bGQtPnNodXRkb3duKQorCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLT51cmJfY3RsLCBHRlBfQVRPTUlDKTsKKwkJYnJlYWs7CiAJfQogCi0JaWYgKHJldCkKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZCIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRVBFUk0pCisJCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWQiLCBfX2Z1bmNfXywgcmV0KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTUwNSw3ICs1MTIsNyBAQAogCXN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgaSwgcmV0OwogCi0JZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCS8qIGZvcmNlIHVwZGF0ZXMgdG8gZGV2aWNlICovCiAJZm9yIChpID0gMDsgaTxzaXplb2YoeWxkLT5tYXN0ZXIpOyBpKyspCkBAIC01MjEsNyArNTI4LDcgQEAKIAl5bGQtPmN0bF9kYXRhLT5zdW0JPSAweDEwMC1DTURfSU5JVC0xMDsKIAlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC0+dXJiX2N0bCwgR0ZQX0tFUk5FTCkpICE9IDApIHsKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICAgX19GVU5DVElPTl9fLCByZXQpOworCQkgICAgIF9fZnVuY19fLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gMDsKQEAgLTUzMSw4ICs1MzgsMTggQEAKIHsKIAlzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKKwl5bGQtPnNodXRkb3duID0gMTsKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgZmxhZyBpcyBzZWVuIGJ5IG90aGVyIENQVXMgYmVmb3JlIHdlIHN0YXJ0CisJICoga2lsbGluZyBVUkJzIHNvIG5ldyBVUkJzIHdvbid0IGJlIHN1Ym1pdHRlZAorCSAqLworCXNtcF93bWIoKTsKKwogCXVzYl9raWxsX3VyYih5bGQtPnVyYl9jdGwpOwogCXVzYl9raWxsX3VyYih5bGQtPnVyYl9pcnEpOworCisJeWxkLT5zaHV0ZG93biA9IDA7CisJc21wX3dtYigpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtODA5LDkgKzgyNiw2IEBACiAJaWYgKHlsZCA9PSBOVUxMKQogCQlyZXR1cm4gZXJyOwogCi0JdXNiX2tpbGxfdXJiKHlsZC0+dXJiX2lycSk7CS8qIHBhcmFtZXRlciB2YWxpZGF0aW9uIGluIGNvcmUvdXJiICovCi0JdXNiX2tpbGxfdXJiKHlsZC0+dXJiX2N0bCk7CS8qIHBhcmFtZXRlciB2YWxpZGF0aW9uIGluIGNvcmUvdXJiICovCi0KICAgICAgICAgaWYgKHlsZC0+aWRldikgewogCQlpZiAoZXJyKQogCQkJaW5wdXRfZnJlZV9kZXZpY2UoeWxkLT5pZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYXBwbGV0b3VjaC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMKaW5kZXggY2U2ZmRlYy4uMWY0MWFlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMKQEAgLTIsMTIgKzIsMTMgQEAKICAqIEFwcGxlIFVTQiBUb3VjaHBhZCAoZm9yIHBvc3QtRmVicnVhcnkgMjAwNSBQb3dlckJvb2tzIGFuZCBNYWNCb29rcykgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSAgICAgIEpvaGFubmVzIEJlcmcgKGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBKb2hhbm5lcyBCZXJnIChqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0KQogICogQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgU3RlbGlhbiBQb3AgKHN0ZWxpYW5AcG9waWVzLm5ldCkKICAqIENvcHlyaWdodCAoQykgMjAwNSAgICAgIEZyYW5rIEFybm9sZCAoZnJhbmtAc2Npcm9jY28tNXYtdHVyYm8uZGUpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICBQZXRlciBPc3Rlcmx1bmQgKHBldGVybzJAdGVsaWEuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgTWljaGFlbCBIYW5zZWxtYW5uIChsaW51eC1rZXJuZWxAaGFuc21pLmNoKQogICogQ29weXJpZ2h0IChDKSAyMDA2ICAgICAgTmljb2xhcyBCb2ljaGF0IChuaWNvbGFzQGJvaWNoYXQuY2gpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTdmVuIEFuZGVycyAoYW5kZXJzQGFuZHVyYXMuZGUpCiAgKgogICogVGhhbmtzIHRvIEFsZXggSGFycGVyIDxiYXNpbGlza0Bmb29ib3gubmV0PiBmb3IgaGlzIGlucHV0cy4KICAqCkBAIC0zNCw3NyArMzUsNjQgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KIAotLyogQXBwbGUgaGFzIHBvd2VyYm9va3Mgd2hpY2ggaGF2ZSB0aGUga2V5Ym9hcmQgd2l0aCBkaWZmZXJlbnQgUHJvZHVjdCBJRHMgKi8KLSNkZWZpbmUgQVBQTEVfVkVORE9SX0lECQkweDA1QUMKKy8qIFR5cGUgb2YgdG91Y2hwYWQgKi8KK2VudW0gYXRwX3RvdWNocGFkX3R5cGUgeworCUFUUF9GT1VOVEFJTiwKKwlBVFBfR0VZU0VSMSwKKwlBVFBfR0VZU0VSMiwKKwlBVFBfR0VZU0VSMywKKwlBVFBfR0VZU0VSNAorfTsKIAotLyogVGhlc2UgbmFtZXMgY29tZSBmcm9tIEluZm8ucGxpc3QgaW4gQXBwbGVVU0JUcmFja3BhZC5rZXh0ICovCi0jZGVmaW5lIEZPVU5UQUlOX0FOU0lfUFJPRFVDVF9JRAkweDAyMEUKLSNkZWZpbmUgRk9VTlRBSU5fSVNPX1BST0RVQ1RfSUQJCTB4MDIwRgotCi0jZGVmaW5lIEZPVU5UQUlOX1RQX09OTFlfUFJPRFVDVF9JRAkweDAzMEEKLQotI2RlZmluZSBHRVlTRVIxX1RQX09OTFlfUFJPRFVDVF9JRAkweDAzMEIKLQotI2RlZmluZSBHRVlTRVJfQU5TSV9QUk9EVUNUX0lECQkweDAyMTQKLSNkZWZpbmUgR0VZU0VSX0lTT19QUk9EVUNUX0lECQkweDAyMTUKLSNkZWZpbmUgR0VZU0VSX0pJU19QUk9EVUNUX0lECQkweDAyMTYKLQotLyogTWFjQm9vayBkZXZpY2VzICovCi0jZGVmaW5lIEdFWVNFUjNfQU5TSV9QUk9EVUNUX0lECQkweDAyMTcKLSNkZWZpbmUgR0VZU0VSM19JU09fUFJPRFVDVF9JRAkJMHgwMjE4Ci0jZGVmaW5lIEdFWVNFUjNfSklTX1BST0RVQ1RfSUQJCTB4MDIxOQotCi0vKgotICogR2V5c2VyIElWOiBzYW1lIGFzIEdleXNlciBJSUkgYWNjb3JkaW5nIHRvIEluZm8ucGxpc3QgaW4gQXBwbGVVU0JUcmFja3BhZC5rZXh0Ci0gKiAtPiBzYW1lIElPQ2xhc3MgKEFwcGxlVVNCR3JJSUlUcmFja3BhZCksIHNhbWUgYWNjZWxlcmF0aW9uIHRhYmxlcwotICovCi0jZGVmaW5lIEdFWVNFUjRfQU5TSV9QUk9EVUNUX0lECTB4MDIxQQotI2RlZmluZSBHRVlTRVI0X0lTT19QUk9EVUNUX0lECTB4MDIxQgotI2RlZmluZSBHRVlTRVI0X0pJU19QUk9EVUNUX0lECTB4MDIxQwotCi0jZGVmaW5lIEdFWVNFUjRfSEZfQU5TSV9QUk9EVUNUX0lECTB4MDIyOQotI2RlZmluZSBHRVlTRVI0X0hGX0lTT19QUk9EVUNUX0lECTB4MDIyQQotI2RlZmluZSBHRVlTRVI0X0hGX0pJU19QUk9EVUNUX0lECTB4MDIyQgotCi0jZGVmaW5lIEFUUF9ERVZJQ0UocHJvZCkJCQkJCVwKKyNkZWZpbmUgQVRQX0RFVklDRShwcm9kLCB0eXBlKQkJCQkJXAorewkJCQkJCQkJXAogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwJCVwKIAkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwJCVwKIAkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1BST1RPQ09MLAlcCi0JLmlkVmVuZG9yID0gQVBQTEVfVkVORE9SX0lELAkJCQlcCisJLmlkVmVuZG9yID0gMHgwNWFjLCAvKiBBcHBsZSAqLwkJCQlcCiAJLmlkUHJvZHVjdCA9IChwcm9kKSwJCQkJCVwKIAkuYkludGVyZmFjZUNsYXNzID0gMHgwMywJCQkJXAotCS5iSW50ZXJmYWNlUHJvdG9jb2wgPSAweDAyCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9IDB4MDIsCQkJCVwKKwkuZHJpdmVyX2luZm8gPSBBVFBfICMjIHR5cGUsCQkJCVwKK30KIAotLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworLyoKKyAqIFRhYmxlIG9mIGRldmljZXMgKFByb2R1Y3QgSURzKSB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlci4KKyAqIChUaGUgbmFtZXMgY29tZSBmcm9tIEluZm8ucGxpc3QgaW4gQXBwbGVVU0JUcmFja3BhZC5rZXh0LAorICogIEFjY29yZGluZyB0byBJbmZvLnBsaXN0IEdleXNlciBJViBpcyB0aGUgc2FtZSBhcyBHZXlzZXIgSUlJLikKKyAqLworCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXRwX3RhYmxlIFtdID0gewotCXsgQVRQX0RFVklDRShGT1VOVEFJTl9BTlNJX1BST0RVQ1RfSUQpIH0sCi0JeyBBVFBfREVWSUNFKEZPVU5UQUlOX0lTT19QUk9EVUNUX0lEKSB9LAotCXsgQVRQX0RFVklDRShGT1VOVEFJTl9UUF9PTkxZX1BST0RVQ1RfSUQpIH0sCi0JeyBBVFBfREVWSUNFKEdFWVNFUjFfVFBfT05MWV9QUk9EVUNUX0lEKSB9LAorCS8qIFBvd2VyQm9va3MgRmViIDIwMDUsIGlCb29rcyBHNCAqLworCUFUUF9ERVZJQ0UoMHgwMjBlLCBGT1VOVEFJTiksCS8qIEZPVU5UQUlOIEFOU0kgKi8KKwlBVFBfREVWSUNFKDB4MDIwZiwgRk9VTlRBSU4pLAkvKiBGT1VOVEFJTiBJU08gKi8KKwlBVFBfREVWSUNFKDB4MDMwYSwgRk9VTlRBSU4pLAkvKiBGT1VOVEFJTiBUUCBPTkxZICovCisJQVRQX0RFVklDRSgweDAzMGIsIEdFWVNFUjEpLAkvKiBHRVlTRVIgMSBUUCBPTkxZICovCiAKIAkvKiBQb3dlckJvb2tzIE9jdCAyMDA1ICovCi0JeyBBVFBfREVWSUNFKEdFWVNFUl9BTlNJX1BST0RVQ1RfSUQpIH0sCi0JeyBBVFBfREVWSUNFKEdFWVNFUl9JU09fUFJPRFVDVF9JRCkgfSwKLQl7IEFUUF9ERVZJQ0UoR0VZU0VSX0pJU19QUk9EVUNUX0lEKSB9LAorCUFUUF9ERVZJQ0UoMHgwMjE0LCBHRVlTRVIyKSwJLyogR0VZU0VSIDIgQU5TSSAqLworCUFUUF9ERVZJQ0UoMHgwMjE1LCBHRVlTRVIyKSwJLyogR0VZU0VSIDIgSVNPICovCisJQVRQX0RFVklDRSgweDAyMTYsIEdFWVNFUjIpLAkvKiBHRVlTRVIgMiBKSVMgKi8KIAogCS8qIENvcmUgRHVvIE1hY0Jvb2sgJiBNYWNCb29rIFBybyAqLwotCXsgQVRQX0RFVklDRShHRVlTRVIzX0FOU0lfUFJPRFVDVF9JRCkgfSwKLQl7IEFUUF9ERVZJQ0UoR0VZU0VSM19JU09fUFJPRFVDVF9JRCkgfSwKLQl7IEFUUF9ERVZJQ0UoR0VZU0VSM19KSVNfUFJPRFVDVF9JRCkgfSwKKwlBVFBfREVWSUNFKDB4MDIxNywgR0VZU0VSMyksCS8qIEdFWVNFUiAzIEFOU0kgKi8KKwlBVFBfREVWSUNFKDB4MDIxOCwgR0VZU0VSMyksCS8qIEdFWVNFUiAzIElTTyAqLworCUFUUF9ERVZJQ0UoMHgwMjE5LCBHRVlTRVIzKSwJLyogR0VZU0VSIDMgSklTICovCiAKIAkvKiBDb3JlMiBEdW8gTWFjQm9vayAmIE1hY0Jvb2sgUHJvICovCi0JeyBBVFBfREVWSUNFKEdFWVNFUjRfQU5TSV9QUk9EVUNUX0lEKSB9LAotCXsgQVRQX0RFVklDRShHRVlTRVI0X0lTT19QUk9EVUNUX0lEKSB9LAotCXsgQVRQX0RFVklDRShHRVlTRVI0X0pJU19QUk9EVUNUX0lEKSB9LAorCUFUUF9ERVZJQ0UoMHgwMjFhLCBHRVlTRVI0KSwJLyogR0VZU0VSIDQgQU5TSSAqLworCUFUUF9ERVZJQ0UoMHgwMjFiLCBHRVlTRVI0KSwJLyogR0VZU0VSIDQgSVNPICovCisJQVRQX0RFVklDRSgweDAyMWMsIEdFWVNFUjQpLAkvKiBHRVlTRVIgNCBKSVMgKi8KIAotCXsgQVRQX0RFVklDRShHRVlTRVI0X0hGX0FOU0lfUFJPRFVDVF9JRCkgfSwKLQl7IEFUUF9ERVZJQ0UoR0VZU0VSNF9IRl9JU09fUFJPRFVDVF9JRCkgfSwKLQl7IEFUUF9ERVZJQ0UoR0VZU0VSNF9IRl9KSVNfUFJPRFVDVF9JRCkgfSwKKwkvKiBDb3JlMiBEdW8gTWFjQm9vazMsMSAqLworCUFUUF9ERVZJQ0UoMHgwMjI5LCBHRVlTRVI0KSwJLyogR0VZU0VSIDQgSEYgQU5TSSAqLworCUFUUF9ERVZJQ0UoMHgwMjJhLCBHRVlTRVI0KSwJLyogR0VZU0VSIDQgSEYgSVNPICovCisJQVRQX0RFVklDRSgweDAyMmIsIEdFWVNFUjQpLAkvKiBHRVlTRVIgNCBIRiBKSVMgKi8KIAogCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJeyB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBhdHBfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGF0cF90YWJsZSk7CiAKIC8qCiAgKiBudW1iZXIgb2Ygc2Vuc29ycy4gTm90ZSB0aGF0IG9ubHkgMTYgaW5zdGVhZCBvZiAyNiBYIChob3Jpem9udGFsKQpAQCAtMTI0LDkgKzExMiwxMyBAQAogICogV2UgdHJ5IHRvIGtlZXAgdGhlIHRvdWNocGFkIGFzcGVjdCByYXRpbyB3aGlsZSBzdGlsbCBkb2luZyBvbmx5IHNpbXBsZQogICogYXJpdGhtZXRpY3MuCiAgKiBUaGUgZmFjdG9ycyBiZWxvdyBnaXZlIGNvb3JkaW5hdGVzIGxpa2U6Ci0gKgkwIDw9IHggPCAgOTYwIG9uIDEyIiBhbmQgMTUiIFBvd2VyYm9va3MKLSAqCTAgPD0geCA8IDE2MDAgb24gMTciIFBvd2VyYm9va3MKLSAqCTAgPD0geSA8ICA2NDYKKyAqCisgKiAgICAgIDAgPD0geCA8ICA5NjAgb24gMTIiIGFuZCAxNSIgUG93ZXJib29rcworICogICAgICAwIDw9IHggPCAxNjAwIG9uIDE3IiBQb3dlcmJvb2tzIGFuZCAxNyIgTWFjQm9vayBQcm8KKyAqICAgICAgMCA8PSB4IDwgMTIxNiBvbiBNYWNCb29rcyBhbmQgMTUiIE1hY0Jvb2sgUHJvCisgKgorICogICAgICAwIDw9IHkgPCAgNjQ2IG9uIGFsbCBQb3dlcmJvb2tzCisgKiAgICAgIDAgPD0geSA8ICA3NzQgb24gYWxsIE1hY0Jvb2tzCiAgKi8KICNkZWZpbmUgQVRQX1hGQUNUCTY0CiAjZGVmaW5lIEFUUF9ZRkFDVAk0MwpAQCAtMTQ3LDQzICsxMzksNDYgQEAKIC8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCiBzdHJ1Y3QgYXRwIHsKIAljaGFyCQkJcGh5c1s2NF07Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKgl1ZGV2OwkJLyogdXNiIGRldmljZSAqLwotCXN0cnVjdCB1cmIgKgkJdXJiOwkJLyogdXNiIHJlcXVlc3QgYmxvY2sgKi8KLQlzaWduZWQgY2hhciAqCQlkYXRhOwkJLyogdHJhbnNmZXJyZWQgZGF0YSAqLwotCXN0cnVjdCBpbnB1dF9kZXYgKglpbnB1dDsJCS8qIGlucHV0IGRldiAqLwotCXVuc2lnbmVkIGNoYXIJCW9wZW47CQkvKiBub24temVybyBpZiBvcGVuZWQgKi8KLQl1bnNpZ25lZCBjaGFyCQl2YWxpZDsJCS8qIGFyZSB0aGUgc2Vuc29ycyB2YWxpZCA/ICovCi0JdW5zaWduZWQgY2hhcgkJc2l6ZV9kZXRlY3RfZG9uZTsKLQl1bnNpZ25lZCBjaGFyCQlvdmVyZmxvd3dhcm47CS8qIG92ZXJmbG93IHdhcm5pbmcgcHJpbnRlZD8gKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsJCS8qIHVzYiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXJiCQkqdXJiOwkJLyogdXNiIHJlcXVlc3QgYmxvY2sgKi8KKwlzaWduZWQgY2hhcgkJKmRhdGE7CQkvKiB0cmFuc2ZlcnJlZCBkYXRhICovCisJc3RydWN0IGlucHV0X2RldgkqaW5wdXQ7CQkvKiBpbnB1dCBkZXYgKi8KKwllbnVtIGF0cF90b3VjaHBhZF90eXBlCXR5cGU7CQkvKiB0eXBlIG9mIHRvdWNocGFkICovCisJYm9vbAkJCW9wZW47CisJYm9vbAkJCXZhbGlkOwkJLyogYXJlIHRoZSBzYW1wbGVzIHZhbGlkPyAqLworCWJvb2wJCQlzaXplX2RldGVjdF9kb25lOworCWJvb2wJCQlvdmVyZmxvd193YXJuZWQ7CiAJaW50CQkJeF9vbGQ7CQkvKiBsYXN0IHJlcG9ydGVkIHgveSwgKi8KIAlpbnQJCQl5X29sZDsJCS8qIHVzZWQgZm9yIHNtb290aGluZyAqLwotCQkJCQkJLyogY3VycmVudCB2YWx1ZSBvZiB0aGUgc2Vuc29ycyAqLwogCXNpZ25lZCBjaGFyCQl4eV9jdXJbQVRQX1hTRU5TT1JTICsgQVRQX1lTRU5TT1JTXTsKLQkJCQkJCS8qIGxhc3QgdmFsdWUgb2YgdGhlIHNlbnNvcnMgKi8KIAlzaWduZWQgY2hhcgkJeHlfb2xkW0FUUF9YU0VOU09SUyArIEFUUF9ZU0VOU09SU107Ci0JCQkJCQkvKiBhY2N1bXVsYXRlZCBzZW5zb3JzICovCiAJaW50CQkJeHlfYWNjW0FUUF9YU0VOU09SUyArIEFUUF9ZU0VOU09SU107Ci0JaW50CQkJZGF0YWxlbjsJLyogc2l6ZSBvZiBhbiBVU0IgdXJiIHRyYW5zZmVyICovCi0JaW50CQkJaWRsZWNvdW50OyAgICAgIC8qIG51bWJlciBvZiBlbXB0eSBwYWNrZXRzICovCi0Jc3RydWN0IHdvcmtfc3RydWN0ICAgICAgd29yazsKKwlpbnQJCQlkYXRhbGVuOwkvKiBzaXplIG9mIFVTQiB0cmFuc2ZlciAqLworCWludAkJCWlkbGVjb3VudDsJLyogbnVtYmVyIG9mIGVtcHR5IHBhY2tldHMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CiAKICNkZWZpbmUgZGJnX2R1bXAobXNnLCB0YWIpIFwKIAlpZiAoZGVidWcgPiAxKSB7CQkJCQkJXAotCQlpbnQgaTsJCQkJCQkJXAotCQlwcmludGsoImFwcGxldG91Y2g6ICVzICVsbGQiLCBtc2csIChsb25nIGxvbmcpamlmZmllcyk7IFwKLQkJZm9yIChpID0gMDsgaSA8IEFUUF9YU0VOU09SUyArIEFUUF9ZU0VOU09SUzsgaSsrKQlcCi0JCQlwcmludGsoIiAlMDJ4IiwgdGFiW2ldKTsJCQlcCisJCWludCBfX2k7CQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAiYXBwbGV0b3VjaDogJXMiLCBtc2cpOwkJXAorCQlmb3IgKF9faSA9IDA7IF9faSA8IEFUUF9YU0VOU09SUyArIEFUUF9ZU0VOU09SUzsgX19pKyspCVwKKwkJCXByaW50aygiICUwMngiLCB0YWJbX19pXSk7CQkJXAogCQlwcmludGsoIlxuIik7CQkJCQkJXAogCX0KIAogI2RlZmluZSBkcHJpbnRrKGZvcm1hdCwgYS4uLikJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhKTsJCVwKKwkJaWYgKGRlYnVnKQkJCQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhKTsJCQlcCiAJfSB3aGlsZSAoMCkKIAotTU9EVUxFX0FVVEhPUigiSm9oYW5uZXMgQmVyZywgU3RlbGlhbiBQb3AsIEZyYW5rIEFybm9sZCwgTWljaGFlbCBIYW5zZWxtYW5uIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFwcGxlIFBvd2VyQm9va3MgVVNCIHRvdWNocGFkIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSm9oYW5uZXMgQmVyZyIpOworTU9EVUxFX0FVVEhPUigiU3RlbGlhbiBQb3AiKTsKK01PRFVMRV9BVVRIT1IoIkZyYW5rIEFybm9sZCIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIYW5zZWxtYW5uIik7CitNT0RVTEVfQVVUSE9SKCJTdmVuIEFuZGVycyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBcHBsZSBQb3dlckJvb2sgYW5kIE1hY0Jvb2sgVVNCIHRvdWNocGFkIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKgpAQCAtMTkxLDQ2ICsxODYsMTQgQEAKICAqLwogc3RhdGljIGludCB0aHJlc2hvbGQgPSBBVFBfVEhSRVNIT0xEOwogbW9kdWxlX3BhcmFtKHRocmVzaG9sZCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModGhyZXNob2xkLCAiRGlzY2FyZHMgYW55IGNoYW5nZSBpbiBkYXRhIGZyb20gYSBzZW5zb3IgKHRyYWNrcGFkIGhhcyBodW5kcmVkcyBvZiB0aGVzZSBzZW5zb3JzKSBsZXNzIHRoYW4gdGhpcyB2YWx1ZSIpOworTU9EVUxFX1BBUk1fREVTQyh0aHJlc2hvbGQsICJEaXNjYXJkIGFueSBjaGFuZ2UgaW4gZGF0YSBmcm9tIGEgc2Vuc29yIgorCQkJICAgICIgKHRoZSB0cmFja3BhZCBoYXMgbWFueSBvZiB0aGVzZSBzZW5zb3JzKSIKKwkJCSAgICAiIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiIpOwogCi1zdGF0aWMgaW50IGRlYnVnID0gMTsKK3N0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGUgZGVidWdnaW5nIG91dHB1dCIpOwogCi1zdGF0aWMgaW5saW5lIGludCBhdHBfaXNfZm91bnRhaW4oc3RydWN0IGF0cCAqZGV2KQotewotCXUxNiBwcm9kdWN0SWQgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKLQotCXJldHVybiBwcm9kdWN0SWQgPT0gRk9VTlRBSU5fQU5TSV9QUk9EVUNUX0lEIHx8Ci0JICAgICAgIHByb2R1Y3RJZCA9PSBGT1VOVEFJTl9JU09fUFJPRFVDVF9JRCB8fAotCSAgICAgICBwcm9kdWN0SWQgPT0gRk9VTlRBSU5fVFBfT05MWV9QUk9EVUNUX0lEOwotfQotCi0vKiBDaGVja3MgaWYgdGhlIGRldmljZSBhIEdleXNlciAyIChBTlNJLCBJU08sIEpJUykgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0cF9pc19nZXlzZXJfMihzdHJ1Y3QgYXRwICpkZXYpCi17Ci0JdTE2IHByb2R1Y3RJZCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCi0JcmV0dXJuIChwcm9kdWN0SWQgPT0gR0VZU0VSX0FOU0lfUFJPRFVDVF9JRCkgfHwKLQkJKHByb2R1Y3RJZCA9PSBHRVlTRVJfSVNPX1BST0RVQ1RfSUQpIHx8Ci0JCShwcm9kdWN0SWQgPT0gR0VZU0VSX0pJU19QUk9EVUNUX0lEKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXRwX2lzX2dleXNlcl8zKHN0cnVjdCBhdHAgKmRldikKLXsKLQl1MTYgcHJvZHVjdElkID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0KLQlyZXR1cm4gKHByb2R1Y3RJZCA9PSBHRVlTRVIzX0FOU0lfUFJPRFVDVF9JRCkgfHwKLQkJKHByb2R1Y3RJZCA9PSBHRVlTRVIzX0lTT19QUk9EVUNUX0lEKSB8fAotCQkocHJvZHVjdElkID09IEdFWVNFUjNfSklTX1BST0RVQ1RfSUQpIHx8Ci0JCShwcm9kdWN0SWQgPT0gR0VZU0VSNF9BTlNJX1BST0RVQ1RfSUQpIHx8Ci0JCShwcm9kdWN0SWQgPT0gR0VZU0VSNF9JU09fUFJPRFVDVF9JRCkgfHwKLQkJKHByb2R1Y3RJZCA9PSBHRVlTRVI0X0pJU19QUk9EVUNUX0lEKSB8fAotCQkocHJvZHVjdElkID09IEdFWVNFUjRfSEZfQU5TSV9QUk9EVUNUX0lEKSB8fAotCQkocHJvZHVjdElkID09IEdFWVNFUjRfSEZfSVNPX1BST0RVQ1RfSUQpIHx8Ci0JCShwcm9kdWN0SWQgPT0gR0VZU0VSNF9IRl9KSVNfUFJPRFVDVF9JRCk7Ci19Ci0KIC8qCiAgKiBCeSBkZWZhdWx0IG5ld2VyIEdleXNlciBkZXZpY2VzIHNlbmQgc3RhbmRhcmQgVVNCIEhJRCBtb3VzZQogICogcGFja2V0cyAoUmVwb3J0IElEIDIpLiBUaGlzIGNvZGUgY2hhbmdlcyBkZXZpY2UgbW9kZSwgc28gaXQKQEAgLTI0MCw2ICsyMDMsNyBAQAogewogCWNoYXIgZGF0YVs4XTsKIAlpbnQgc2l6ZTsKKwlpbnQgaTsKIAogCXNpemUgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAogCQkJQVRQX0dFWVNFUl9NT0RFX1JFQURfUkVRVUVTVF9JRCwKQEAgLTI0OCw4ICsyMTIsMTEgQEAKIAkJCUFUUF9HRVlTRVJfTU9ERV9SRVFVRVNUX0lOREVYLCAmZGF0YSwgOCwgNTAwMCk7CiAKIAlpZiAoc2l6ZSAhPSA4KSB7Ci0JCWVycigiQ291bGQgbm90IGRvIG1vZGUgcmVhZCByZXF1ZXN0IGZyb20gZGV2aWNlIgotCQkgICAgIiAoR2V5c2VyIFJhdyBtb2RlKSIpOworCQlkcHJpbnRrKCJhdHBfZ2V5c2VyX2luaXQ6IHJlYWQgZXJyb3JcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJZHByaW50aygiYXBwbGV0b3VjaFslZF06ICVkXG4iLCBpLCBkYXRhW2ldKTsKKworCQllcnIoIkZhaWxlZCB0byByZWFkIG1vZGUgZnJvbSBkZXZpY2UuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjYzLDggKzIzMCwxMSBAQAogCQkJQVRQX0dFWVNFUl9NT0RFX1JFUVVFU1RfSU5ERVgsICZkYXRhLCA4LCA1MDAwKTsKIAogCWlmIChzaXplICE9IDgpIHsKLQkJZXJyKCJDb3VsZCBub3QgZG8gbW9kZSB3cml0ZSByZXF1ZXN0IHRvIGRldmljZSIKLQkJICAgICIgKEdleXNlciBSYXcgbW9kZSkiKTsKKwkJZHByaW50aygiYXRwX2dleXNlcl9pbml0OiB3cml0ZSBlcnJvclxuIik7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlkcHJpbnRrKCJhcHBsZXRvdWNoWyVkXTogJWRcbiIsIGksIGRhdGFbaV0pOworCisJCWVycigiRmFpbGVkIHRvIHJlcXVlc3QgZ2V5c2VyIHJhdyBtb2RlIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI4MCwxNSArMjUwLDE1IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBkZXYtPnVkZXY7CiAJaW50IHJldHZhbDsKIAorCWRwcmludGsoImFwcGxldG91Y2g6IHB1dHRpbmcgYXBwbGV0b3VjaCB0byBzbGVlcCAocmVpbml0KVxuIik7CiAJZGV2LT5pZGxlY291bnQgPSAwOwogCiAJYXRwX2dleXNlcl9pbml0KHVkZXYpOwogCiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Ci0JfQorCWlmIChyZXR2YWwpCisJCWVycigiYXRwX3JlaW5pdDogdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggZXJyb3IgJWQiLAorCQkgICAgcmV0dmFsKTsKIH0KIAogc3RhdGljIGludCBhdHBfY2FsY3VsYXRlX2FicyhpbnQgKnh5X3NlbnNvcnMsIGludCBuYl9zZW5zb3JzLCBpbnQgZmFjdCwKQEAgLTMyMyw3ICsyOTMsOCBAQAogCQkgKgogCQkgKiAtIEphc29uIFBhcmVraCA8amFzb25wYXJla2hAZ21haWwuY29tPgogCQkgKi8KLQkJaWYgKGkgPCAxIHx8ICghaXNfaW5jcmVhc2luZyAmJiB4eV9zZW5zb3JzW2kgLSAxXSA8IHh5X3NlbnNvcnNbaV0pKSB7CisJCWlmIChpIDwgMSB8fAorCQkgICAgKCFpc19pbmNyZWFzaW5nICYmIHh5X3NlbnNvcnNbaSAtIDFdIDwgeHlfc2Vuc29yc1tpXSkpIHsKIAkJCSgqZmluZ2VycykrKzsKIAkJCWlzX2luY3JlYXNpbmcgPSAxOwogCQl9IGVsc2UgaWYgKGkgPiAwICYmIHh5X3NlbnNvcnNbaSAtIDFdID49IHh5X3NlbnNvcnNbaV0pIHsKQEAgLTMzMSwxMSArMzAyLDExIEBACiAJCX0KIAogCQkvKgotCQkgKiBTdWJ0cmFjdHMgdGhyZXNob2xkIHNvIGEgaGlnaCBzZW5zb3IgdGhhdCBqdXN0IHBhc3NlcyB0aGUgdGhyZXNob2xkCi0JCSAqIHdvbid0IHNrZXcgdGhlIGNhbGN1bGF0ZWQgYWJzb2x1dGUgY29vcmRpbmF0ZS4gIEZpeGVzIGFuIGlzc3VlCi0JCSAqIHdoZXJlIHNsb3dseSBtb3ZpbmcgdGhlIG1vdXNlIHdvdWxkIG9jY2Fzc2lvbmFseSBqdW1wIGEgbnVtYmVyIG9mCi0JCSAqIHBpeGVscyAobGV0IG1lIHJlc3RhdGUtLXNsb3dseSBtb3ZpbmcgdGhlIG1vdXNlIG1ha2VzIHRoaXMgaXNzdWUKLQkJICogbW9zdCBhcHBhcmVudCkuCisJCSAqIFN1YnRyYWN0cyB0aHJlc2hvbGQgc28gYSBoaWdoIHNlbnNvciB0aGF0IGp1c3QgcGFzc2VzIHRoZQorCQkgKiB0aHJlc2hvbGQgd29uJ3Qgc2tldyB0aGUgY2FsY3VsYXRlZCBhYnNvbHV0ZSBjb29yZGluYXRlLgorCQkgKiBGaXhlcyBhbiBpc3N1ZSB3aGVyZSBzbG93bHkgbW92aW5nIHRoZSBtb3VzZSB3b3VsZAorCQkgKiBvY2Nhc2lvbmFsbHkganVtcCBhIG51bWJlciBvZiBwaXhlbHMgKHNsb3dseSBtb3ZpbmcgdGhlCisJCSAqIGZpbmdlciBtYWtlcyB0aGlzIGlzc3VlIG1vc3QgYXBwYXJlbnQuKQogCQkgKi8KIAkJcGN1bSArPSAoeHlfc2Vuc29yc1tpXSAtIHRocmVzaG9sZCkgKiBpOwogCQlwc3VtICs9ICh4eV9zZW5zb3JzW2ldIC0gdGhyZXNob2xkKTsKQEAgLTM1Niw3ICszMjcsNyBAQAogCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX1RSSVBMRVRBUCwgZmluZ2VycyA+IDIpOwogfQogCi1zdGF0aWMgdm9pZCBhdHBfY29tcGxldGUoc3RydWN0IHVyYiogdXJiKQorc3RhdGljIHZvaWQgYXRwX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlpbnQgeCwgeSwgeF96LCB5X3osIHhfZiwgeV9mOwogCWludCByZXR2YWwsIGksIGo7CkBAIC0zNjgsMjIgKzMzOSwyMiBAQAogCQkvKiBzdWNjZXNzICovCiAJCWJyZWFrOwogCWNhc2UgLUVPVkVSRkxPVzoKLQkJaWYoIWRldi0+b3ZlcmZsb3d3YXJuKSB7CisJCWlmICghZGV2LT5vdmVyZmxvd193YXJuZWQpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImFwcGxldG91Y2g6IE9WRVJGTE9XIHdpdGggZGF0YSAiCiAJCQkJImxlbmd0aCAlZCwgYWN0dWFsIGxlbmd0aCBpcyAlZFxuIiwKIAkJCQlkZXYtPmRhdGFsZW4sIGRldi0+dXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJCWRldi0+b3ZlcmZsb3d3YXJuID0gMTsKKwkJCWRldi0+b3ZlcmZsb3dfd2FybmVkID0gdHJ1ZTsKIAkJfQogCWNhc2UgLUVDT05OUkVTRVQ6CiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogVGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCJhdHBfY29tcGxldGU6IHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisJCSAgICB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgotCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCJhdHBfY29tcGxldGU6IG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkgICAgdXJiLT5zdGF0dXMpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0zOTYsNyArMzY3LDcgQEAKIAl9CiAKIAkvKiByZW9yZGVyIHRoZSBzZW5zb3JzIHZhbHVlcyAqLwotCWlmIChhdHBfaXNfZ2V5c2VyXzMoZGV2KSkgeworCWlmIChkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjMgfHwgZGV2LT50eXBlID09IEFUUF9HRVlTRVI0KSB7CiAJCW1lbXNldChkZXYtPnh5X2N1ciwgMCwgc2l6ZW9mKGRldi0+eHlfY3VyKSk7CiAKIAkJLyoKQEAgLTQxNSw3ICszODYsNyBAQAogCQkJZGV2LT54eV9jdXJbQVRQX1hTRU5TT1JTICsgaV0gPSBkZXYtPmRhdGFbaiArIDFdOwogCQkJZGV2LT54eV9jdXJbQVRQX1hTRU5TT1JTICsgaSArIDFdID0gZGV2LT5kYXRhW2ogKyAyXTsKIAkJfQotCX0gZWxzZSBpZiAoYXRwX2lzX2dleXNlcl8yKGRldikpIHsKKwl9IGVsc2UgaWYgKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMikgewogCQltZW1zZXQoZGV2LT54eV9jdXIsIDAsIHNpemVvZihkZXYtPnh5X2N1cikpOwogCiAJCS8qCkBAIC00MzgsNyArNDA5LDcgQEAKIAl9IGVsc2UgewogCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCQkvKiBYIHZhbHVlcyAqLwotCQkJZGV2LT54eV9jdXJbaSAgICAgXSA9IGRldi0+ZGF0YVs1ICogaSArICAyXTsKKwkJCWRldi0+eHlfY3VyW2kgKyAgMF0gPSBkZXYtPmRhdGFbNSAqIGkgKyAgMl07CiAJCQlkZXYtPnh5X2N1cltpICsgIDhdID0gZGV2LT5kYXRhWzUgKiBpICsgIDRdOwogCQkJZGV2LT54eV9jdXJbaSArIDE2XSA9IGRldi0+ZGF0YVs1ICogaSArIDQyXTsKIAkJCWlmIChpIDwgMikKQEAgLTQ1NCwyMSArNDI1LDIyIEBACiAKIAlpZiAoIWRldi0+dmFsaWQpIHsKIAkJLyogZmlyc3Qgc2FtcGxlICovCi0JCWRldi0+dmFsaWQgPSAxOworCQlkZXYtPnZhbGlkID0gdHJ1ZTsKIAkJZGV2LT54X29sZCA9IGRldi0+eV9vbGQgPSAtMTsKIAkJbWVtY3B5KGRldi0+eHlfb2xkLCBkZXYtPnh5X2N1ciwgc2l6ZW9mKGRldi0+eHlfb2xkKSk7CiAKIAkJaWYgKGRldi0+c2l6ZV9kZXRlY3RfZG9uZSB8fAotCQkgICAgYXRwX2lzX2dleXNlcl8zKGRldikpIC8qIE5vIDE3IiBNYWNib29rcyAoeWV0KSAqLworCQkgICAgZGV2LT50eXBlID09IEFUUF9HRVlTRVIzKSAvKiBObyAxNyIgTWFjYm9va3MgKHlldCkgKi8KIAkJCWdvdG8gZXhpdDsKIAogCQkvKiAxNyIgUG93ZXJib29rcyBoYXZlIGV4dHJhIFggc2Vuc29ycyAqLwotCQlmb3IgKGkgPSAoYXRwX2lzX2dleXNlcl8yKGRldikgPyAxNSA6IDE2KTsgaSA8IEFUUF9YU0VOU09SUzsgaSsrKSB7CisJCWZvciAoaSA9IChkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjIgPyAxNSA6IDE2KTsKKwkJICAgICBpIDwgQVRQX1hTRU5TT1JTOyBpKyspIHsKIAkJCWlmICghZGV2LT54eV9jdXJbaV0pCiAJCQkJY29udGludWU7CiAKIAkJCXByaW50ayhLRVJOX0lORk8gImFwcGxldG91Y2g6IDE3XCIgbW9kZWwgZGV0ZWN0ZWQuXG4iKTsKLQkJCWlmIChhdHBfaXNfZ2V5c2VyXzIoZGV2KSkKKwkJCWlmIChkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjIpCiAJCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LT5pbnB1dCwgQUJTX1gsIDAsCiAJCQkJCQkgICAgICgyMCAtIDEpICoKIAkJCQkJCSAgICAgQVRQX1hGQUNUIC0gMSwKQEAgLTU0OCwxMSArNTIwLDE1IEBACiAJICogc2V2ZXJhbCBodW5kcmVkIHRpbWVzIGEgc2Vjb25kLiBSZS1pbml0aWFsaXphdGlvbiBkb2VzIG5vdAogCSAqIHdvcmsgb24gRm91bnRhaW4gdG91Y2hwYWRzLgogCSAqLwotCWlmICghYXRwX2lzX2ZvdW50YWluKGRldikpIHsKKwlpZiAoZGV2LT50eXBlICE9IEFUUF9GT1VOVEFJTikgeworCQkvKgorCQkgKiBCdXR0b24gbXVzdCBub3QgYmUgcHJlc3NlZCB3aGVuIGVudGVyaW5nIHN1c3BlbmQsCisJCSAqIG90aGVyd2lzZSB3ZSB3aWxsIG5ldmVyIHJlbGVhc2UgdGhlIGJ1dHRvbi4KKwkJICovCiAJCWlmICgheCAmJiAheSAmJiAha2V5KSB7CiAJCQlkZXYtPmlkbGVjb3VudCsrOwogCQkJaWYgKGRldi0+aWRsZWNvdW50ID09IDEwKSB7Ci0JCQkJZGV2LT52YWxpZCA9IDA7CisJCQkJZGV2LT52YWxpZCA9IGZhbHNlOwogCQkJCXNjaGVkdWxlX3dvcmsoJmRldi0+d29yayk7CiAJCQkJLyogRG9uJ3QgcmVzdWJtaXQgdXJiIGhlcmUsIHdhaXQgZm9yIHJlaW5pdCAqLwogCQkJCXJldHVybjsKQEAgLTU2MSwxMiArNTM3LDExIEBACiAJCQlkZXYtPmlkbGVjb3VudCA9IDA7CiAJfQogCi1leGl0OgorIGV4aXQ6CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Ci0JfQorCWlmIChyZXR2YWwpCisJCWVycigiYXRwX2NvbXBsZXRlOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgcmV0dmFsKTsKIH0KIAogc3RhdGljIGludCBhdHBfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKQEAgLTU5Myw3ICs1NjgsNyBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LT51ZGV2OwogCi0JaWYgKCFhdHBfaXNfZm91bnRhaW4oZGV2KSkgeworCWlmIChkZXYtPnR5cGUgIT0gQVRQX0ZPVU5UQUlOKSB7CiAJCS8qIHN3aXRjaCB0byByYXcgc2Vuc29yIG1vZGUgKi8KIAkJaWYgKGF0cF9nZXlzZXJfaW5pdCh1ZGV2KSkKIAkJCXJldHVybiAtRUlPOwpAQCAtNjA0LDcgKzU3OSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBhdHBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgYXRwICpkZXY7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwpAQCAtNjQwLDEzICs2MTYsMTIgQEAKIAogCWRldi0+dWRldiA9IHVkZXY7CiAJZGV2LT5pbnB1dCA9IGlucHV0X2RldjsKLQlkZXYtPm92ZXJmbG93d2FybiA9IDA7Ci0JaWYgKGF0cF9pc19nZXlzZXJfMyhkZXYpKQotCQlkZXYtPmRhdGFsZW4gPSA2NDsKLQllbHNlIGlmIChhdHBfaXNfZ2V5c2VyXzIoZGV2KSkKLQkJZGV2LT5kYXRhbGVuID0gNjQ7Ci0JZWxzZQorCWRldi0+dHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKKwlkZXYtPm92ZXJmbG93X3dhcm5lZCA9IGZhbHNlOworCWlmIChkZXYtPnR5cGUgPT0gQVRQX0ZPVU5UQUlOIHx8IGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMSkKIAkJZGV2LT5kYXRhbGVuID0gODE7CisJZWxzZQorCQlkZXYtPmRhdGFsZW4gPSA2NDsKIAogCWRldi0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldi0+dXJiKQpAQCAtNjgwLDcgKzY1NSw3IEBACiAKIAlzZXRfYml0KEVWX0FCUywgaW5wdXRfZGV2LT5ldmJpdCk7CiAKLQlpZiAoYXRwX2lzX2dleXNlcl8zKGRldikpIHsKKwlpZiAoZGV2LT50eXBlID09IEFUUF9HRVlTRVIzIHx8IGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSNCkgewogCQkvKgogCQkgKiBNYWNCb29rIGhhdmUgMjAgWCBzZW5zb3JzLCAxMCBZIHNlbnNvcnMKIAkJICovCkBAIC02ODgsNyArNjYzLDcgQEAKIAkJCQkgICAgICgoMjAgLSAxKSAqIEFUUF9YRkFDVCkgLSAxLCBBVFBfRlVaWiwgMCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDAsCiAJCQkJICAgICAoKDEwIC0gMSkgKiBBVFBfWUZBQ1QpIC0gMSwgQVRQX0ZVWlosIDApOwotCX0gZWxzZSBpZiAoYXRwX2lzX2dleXNlcl8yKGRldikpIHsKKwl9IGVsc2UgaWYgKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMikgewogCQkvKgogCQkgKiBPY3QgMjAwNSAxNSIgUG93ZXJCb29rcyBoYXZlIDE1IFggc2Vuc29ycywgMTciIGFyZSBkZXRlY3RlZAogCQkgKiBsYXRlci4KQEAgLTcwMyw5ICs2NzgsMTEgQEAKIAkJICogMTciIG1vZGVscyBhcmUgZGV0ZWN0ZWQgbGF0ZXIuCiAJCSAqLwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAwLAotCQkJCSAgICAgKDE2IC0gMSkgKiBBVFBfWEZBQ1QgLSAxLCBBVFBfRlVaWiwgMCk7CisJCQkJICAgICAoMTYgLSAxKSAqIEFUUF9YRkFDVCAtIDEsCisJCQkJICAgICBBVFBfRlVaWiwgMCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDAsCi0JCQkJICAgICAoQVRQX1lTRU5TT1JTIC0gMSkgKiBBVFBfWUZBQ1QgLSAxLCBBVFBfRlVaWiwgMCk7CisJCQkJICAgICAoQVRQX1lTRU5TT1JTIC0gMSkgKiBBVFBfWUZBQ1QgLSAxLAorCQkJCSAgICAgQVRQX0ZVWlosIDApOwogCX0KIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgMCwgQVRQX1BSRVNTVVJFLCAwLCAwKTsKIApAQCAtNzc0LDcgKzc1MSw3IEBACiAJc3RydWN0IGF0cCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKIAl1c2Jfa2lsbF91cmIoZGV2LT51cmIpOwotCWRldi0+dmFsaWQgPSAwOworCWRldi0+dmFsaWQgPSBmYWxzZTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hdGFyaW1vdXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2F0YXJpbW91c2UuYwppbmRleCA5OGEzNTYxLi5hZGY0NWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2F0YXJpbW91c2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2F0YXJpbW91c2UuYwpAQCAtNTcsMTUgKzU3LDEyIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkF0YXJpIG1vdXNlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgaW50IG1vdXNlX3RocmVzaG9sZFsyXSA9IHsyLDJ9Oworc3RhdGljIGludCBtb3VzZV90aHJlc2hvbGRbMl0gPSB7MiwgMn07Cittb2R1bGVfcGFyYW1fYXJyYXkobW91c2VfdGhyZXNob2xkLCBpbnQsIE5VTEwsIDApOwogCi0jaWZkZWYgX19NT0RVTEVfXwotTU9EVUxFX1BBUk0obW91c2VfdGhyZXNob2xkLCAiMmkiKTsKLSNlbmRpZgogI2lmZGVmIEZJWEVEX0FUQVJJX0pPWVNUSUNLCiBleHRlcm4gaW50IGF0YXJpX21vdXNlX2J1dHRvbnM7CiAjZW5kaWYKLXN0YXRpYyBpbnQgYXRhbW91c2VfdXNlZCA9IDA7CiAKIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2ICphdGFtb3VzZV9kZXY7CiAKQEAgLTk3LDkgKzk0LDYgQEAKIAogc3RhdGljIGludCBhdGFtb3VzZV9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKLQlpZiAoYXRhbW91c2VfdXNlZCsrKQotCQlyZXR1cm4gMDsKLQogI2lmZGVmIEZJWEVEX0FUQVJJX0pPWVNUSUNLCiAJYXRhcmlfbW91c2VfYnV0dG9ucyA9IDA7CiAjZW5kaWYKQEAgLTEwNywyMyArMTAxLDI0IEBACiAJaWtiZF9tb3VzZV90aHJlc2gobW91c2VfdGhyZXNob2xkWzBdLCBtb3VzZV90aHJlc2hvbGRbMV0pOwogCWlrYmRfbW91c2VfcmVsX3BvcygpOwogCWF0YXJpX2lucHV0X21vdXNlX2ludGVycnVwdF9ob29rID0gYXRhbW91c2VfaW50ZXJydXB0OworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGF0YW1vdXNlX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKLQlpZiAoIS0tYXRhbW91c2VfdXNlZCkgewotCQlpa2JkX21vdXNlX2Rpc2FibGUoKTsKLQkJYXRhcmlfbW91c2VfaW50ZXJydXB0X2hvb2sgPSBOVUxMOwotCX0KKwlpa2JkX21vdXNlX2Rpc2FibGUoKTsKKwlhdGFyaV9tb3VzZV9pbnRlcnJ1cHRfaG9vayA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGF0YW1vdXNlX2luaXQodm9pZCkKIHsKKwlpbnQgZXJyb3I7CisKIAlpZiAoIU1BQ0hfSVNfQVRBUkkgfHwgIUFUQVJJSFdfUFJFU0VOVChTVF9NRlApKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghKGF0YXJpX2tleWJfaW5pdCgpKSkKKwlpZiAoIWF0YXJpX2tleWJfaW5pdCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWF0YW1vdXNlX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwpAQCAtMTQxLDEyICsxMzYsMTQgQEAKIAlhdGFtb3VzZV9kZXYtPnJlbGJpdFswXSA9IEJJVF9NQVNLKFJFTF9YKSB8IEJJVF9NQVNLKFJFTF9ZKTsKIAlhdGFtb3VzZV9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTEVGVCldID0gQklUX01BU0soQlROX0xFRlQpIHwKIAkJQklUX01BU0soQlROX01JRERMRSkgfCBCSVRfTUFTSyhCVE5fUklHSFQpOworCiAJYXRhbW91c2VfZGV2LT5vcGVuID0gYXRhbW91c2Vfb3BlbjsKIAlhdGFtb3VzZV9kZXYtPmNsb3NlID0gYXRhbW91c2VfY2xvc2U7CiAKLQlpZiAoaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGF0YW1vdXNlX2RldikpIHsKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhdGFtb3VzZV9kZXYpOworCWlmIChlcnJvcikgewogCQlpbnB1dF9mcmVlX2RldmljZShhdGFtb3VzZV9kZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hpbF9wdHIuYwppbmRleCAyN2Y4OGZiLi5lNTMyYzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2hpbF9wdHIuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hpbF9wdHIuYwpAQCAtMjQ3LDE5ICsyNDcsMjQgQEAKIAogc3RhdGljIGludCBoaWxfcHRyX2Nvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJpdmVyKQogewotCXN0cnVjdCBoaWxfcHRyCSAqcHRyOwotCWNvbnN0IGNoYXIJICp0eHQ7Ci0JdW5zaWduZWQgaW50CSBpLCBuYXhzZXRzLCBidG50eXBlOwotCXVpbnQ4X3QJCSBkaWQsICppZGQ7CisJc3RydWN0IGhpbF9wdHIJKnB0cjsKKwljb25zdCBjaGFyCSp0eHQ7CisJdW5zaWduZWQgaW50CWksIG5heHNldHMsIGJ0bnR5cGU7CisJdWludDhfdAkJZGlkLCAqaWRkOworCWludAkJZXJyb3I7CiAKLQlpZiAoIShwdHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlsX3B0ciksIEdGUF9LRVJORUwpKSkKKwlwdHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlsX3B0ciksIEdGUF9LRVJORUwpOworCWlmICghcHRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXB0ci0+ZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFwdHItPmRldikKKwlpZiAoIXB0ci0+ZGV2KSB7CisJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBiYWlsMDsKKwl9CiAKLQlpZiAoc2VyaW9fb3BlbihzZXJpbywgZHJpdmVyKSkKKwllcnJvciA9IHNlcmlvX29wZW4oc2VyaW8sIGRyaXZlcik7CisJaWYgKGVycm9yKQogCQlnb3RvIGJhaWwxOwogCiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIHB0cik7CkBAIC0yOTcsNiArMzAyLDcgQEAKIAlkaWQgPSBwdHItPmlkZFswXTsKIAlpZGQgPSBwdHItPmlkZCArIDE7CiAJdHh0ID0gInVua25vd24iOworCiAJaWYgKChkaWQgJiBISUxfSUREX0RJRF9UWVBFX01BU0spID09IEhJTF9JRERfRElEX1RZUEVfUkVMKSB7CiAJCXB0ci0+ZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX1JFTCk7CiAJCXR4dCA9ICJyZWxhdGl2ZSI7CkBAIC0zMDYsOCArMzEyLDExIEBACiAJCXB0ci0+ZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0FCUyk7CiAJCXR4dCA9ICJhYnNvbHV0ZSI7CiAJfQotCWlmICghcHRyLT5kZXYtPmV2Yml0WzBdKQorCisJaWYgKCFwdHItPmRldi0+ZXZiaXRbMF0pIHsKKwkJZXJyb3IgPSAtRU5PREVWOwogCQlnb3RvIGJhaWwyOworCX0KIAogCXB0ci0+bmJ0biA9IEhJTF9JRERfTlVNX0JVVFRPTlMoaWRkKTsKIAlpZiAocHRyLT5uYnRuKQpAQCAtMzgwLDEzICszODksMTkgQEAKIAlwdHItPmRldi0+aWQudmVyc2lvbgk9IDB4MDEwMDsgLyogVE9ETzogZ2V0IGZyb20gcHRyLT5yc2MgKi8KIAlwdHItPmRldi0+ZGV2LnBhcmVudAk9ICZzZXJpby0+ZGV2OwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHB0ci0+ZGV2KTsKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShwdHItPmRldik7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKKwkJZ290byBiYWlsMjsKKwl9CisKIAlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogJXMgKCVzKSwgSUQ6ICVkXG4iLAogCQlwdHItPmRldi0+bmFtZSwKIAkJKGJ0bnR5cGUgPT0gQlROX01PVVNFKSA/ICJISUwgbW91c2UiOiJISUwgdGFibGV0IG9yIHRvdWNocGFkIiwKIAkJZGlkKTsKIAogCXJldHVybiAwOworCiAgYmFpbDI6CiAJc2VyaW9fY2xvc2Uoc2VyaW8pOwogIGJhaWwxOgpAQCAtMzk0LDcgKzQwOSw3IEBACiAgYmFpbDA6CiAJa2ZyZWUocHRyKTsKIAlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7Ci0JcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgc3RydWN0IHNlcmlvX2RldmljZV9pZCBoaWxfcHRyX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9pbnBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaW5wb3J0LmMKaW5kZXggMDZjMzVmYy4uMzgyN2EyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9pbnBvcnQuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2lucG9ydC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogaW5wb3J0LmMsdiAxLjExIDIwMDEvMDkvMjUgMTA6MTI6MDcgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpawogICoKICAqICBCYXNlZCBvbiB0aGUgd29yayBvZjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naWJtLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2libS5jCmluZGV4IDllYTg5NTUuLmUyNDEzMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naWJtLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpYm0uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IGxvZ2libS5jLHYgMS4xMSAyMDAxLzA5LzI1IDEwOjEyOjA3IHZvanRlY2ggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqCiAgKiAgQmFzZWQgb24gdGhlIHdvcmsgb2Y6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BjMTEwcGFkLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BjMTEwcGFkLmMKaW5kZXggNjFjZmY4My4uZmQwOWM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wYzExMHBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcGMxMTBwYWQuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IHBjMTEwcGFkLmMsdiAxLjEyIDIwMDEvMDkvMjUgMTA6MTI6MDcgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpawogICoKICAqICBCYXNlZCBvbiB0aGUgd29yayBvZjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VybW91c2UuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VybW91c2UuYwppbmRleCBlZDkxN2JmLi4xN2ZmMTM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zZXJtb3VzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VybW91c2UuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IHNlcm1vdXNlLmMsdiAxLjE3IDIwMDIvMDMvMTMgMTA6MDM6NDMgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpawogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwppbmRleCBlYzRiNjYxLi4yN2Q3MGQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwpAQCAtMTkwLDQgKzE5MCwxNCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2VyaW9fcmF3LgogCitjb25maWcgU0VSSU9fWElMSU5YX1hQU19QUzIKKwl0cmlzdGF0ZSAiWGlsaW54IFhQUyBQUy8yIENvbnRyb2xsZXIgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBQQworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFhQUyBQUy8yIElQIGZyb20gdGhlIFhpbGlueCBFREsgb24KKwkgIFBvd2VyUEMgcGxhdGZvcm0uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHhpbGlueF9wczIuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZQppbmRleCAzOGI4ODY4Li45YjZjODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGUKQEAgLTIxLDMgKzIxLDQgQEAKIG9iai0kKENPTkZJR19TRVJJT19NQUNFUFMyKQkrPSBtYWNlcHMyLm8KIG9iai0kKENPTkZJR19TRVJJT19MSUJQUzIpCSs9IGxpYnBzMi5vCiBvYmotJChDT05GSUdfU0VSSU9fUkFXKQkJKz0gc2VyaW9fcmF3Lm8KK29iai0kKENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMikJKz0geGlsaW54X3BzMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMKaW5kZXggMGQzNTAxOC4uZDEzODBmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vY3Q4MmM3MTAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAkSWQ6IGN0ODJjNzEwLmMsdiAxLjExIDIwMDEvMDkvMjUgMTA6MTI6MDcgdm9qdGVjaCBFeHAgJAotICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpawogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaGlsX21sYy5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxjLmMKaW5kZXggOTNhMWE2Yi4uMzc1ODZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxjLmMKQEAgLTc2LDcgKzc2LDcgQEAKIHN0YXRpYyBpbnQJCQloaWxfbWxjc19wcm9iZTsKIAogc3RhdGljIHZvaWQgaGlsX21sY3NfcHJvY2Vzcyh1bnNpZ25lZCBsb25nIHVudXNlZCk7Ci1ERUNMQVJFX1RBU0tMRVRfRElTQUJMRUQoaGlsX21sY3NfdGFza2xldCwgaGlsX21sY3NfcHJvY2VzcywgMCk7CitzdGF0aWMgREVDTEFSRV9UQVNLTEVUX0RJU0FCTEVEKGhpbF9tbGNzX3Rhc2tsZXQsIGhpbF9tbGNzX3Byb2Nlc3MsIDApOwogCiAKIC8qICNkZWZpbmUgSElMX01MQ19ERUJVRyAqLwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAjZGVmaW5lIE9VVF9MQVNUKHBhY2spIFwKIHsgSElMU0VfT1VUX0xBU1QsCXsgLnBhY2tldCA9IHBhY2sgfSwgMCwgMCwgMCwgMCB9LAogCi1jb25zdCBzdHJ1Y3QgaGlsc2Vfbm9kZSBoaWxfbWxjX3NlW0hJTFNFTl9FTkRdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWxzZV9ub2RlIGhpbF9tbGNfc2VbSElMU0VOX0VORF0gPSB7CiAKIAkvKiAwICBISUxTRU5fU1RBUlQgKi8KIAlGVU5DKGhpbHNlX2luaXRfbGN2LCAwLAlISUxTRU5fTkVYVCwJSElMU0VOX1NMRUVQLAkwKQpAQCAtNzg0LDcgKzc4NCw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIEtlZXBhbGl2ZSB0aW1lciB0YXNrICoqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBoaWxfbWxjc190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBoaWxfbWxjc190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJaGlsX21sY3NfcHJvYmUgPSAxOwogCXRhc2tsZXRfc2NoZWR1bGUoJmhpbF9tbGNzX3Rhc2tsZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGMuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjLmMKaW5kZXggZWRmZWRkOS4uN2IyMzNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGMuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkYy5jCkBAIC0xMDUsNiArMTA1LDEwIEBACiBFWFBPUlRfU1lNQk9MKGhwX3NkY19lbnF1ZXVlX3RyYW5zYWN0aW9uKTsKIEVYUE9SVF9TWU1CT0woaHBfc2RjX2RlcXVldWVfdHJhbnNhY3Rpb24pOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGhwX3NkY19kaXNhYmxlZDsKK21vZHVsZV9wYXJhbV9uYW1lZChub19ocHNkYywgaHBfc2RjX2Rpc2FibGVkLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9faHBzZGMsICJEbyBub3QgZW5hYmxlIEhQIFNEQyBkcml2ZXIuIik7CisKIHN0YXRpYyBocF9pODA0Ml9zZGMJaHBfc2RjOwkvKiBBbGwgZHJpdmVyIHN0YXRlIGlzIGtlcHQgaW4gaGVyZS4gKi8KIAogLyoqKioqKioqKioqKioqKiBwcmltaXRpdmVzIGZvciB1c2UgaW4gYW55IGNvbnRleHQgKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTgwLDYgKzk4NCwxMSBAQAogCXVuc2lnbmVkIGNoYXIgaTsKICNlbmRpZgogCisJaWYgKGhwX3NkY19kaXNhYmxlZCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiSFAgU0RDIGRyaXZlciBkaXNhYmxlZCBieSBub19ocHNkYz0xLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCWhwX3NkYy5kZXYgPSBOVUxMOwogCWhwX3NkYy5kZXZfZXJyID0gMDsKICNpZiBkZWZpbmVkKF9faHBwYV9fKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGNfbWxjLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkY19tbGMuYwppbmRleCA1ODczOThmLi5iNTg3ZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkY19tbGMuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkY19tbGMuYwpAQCAtNTAsNyArNTAsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJHbHVlIGZvciBvbmJvYXJkIEhJTCBNTEMgaW4gSFAtUEFSSVNDIG1hY2hpbmVzIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiAKLXN0cnVjdCBocF9zZGNfbWxjX3ByaXZfcyB7CitzdGF0aWMgc3RydWN0IGhwX3NkY19tbGNfcHJpdl9zIHsKIAlpbnQgZW10ZXN0bW9kZTsKIAlocF9zZGNfdHJhbnNhY3Rpb24gdHJhbnM7CiAJdTggdHNlcVsxNl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAppbmRleCA3OGViNzg0Li5mZTczMmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKQEAgLTYzLDEzICs2MywyMiBAQAogCW91dGIodmFsLCBJODA0Ml9DT01NQU5EX1JFRyk7CiB9CiAKLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaWZkZWYgQ09ORklHX1g4NgogCiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIGk4MDQyX2RtaV9ub2xvb3BfdGFibGVbXSA9IHsKIAl7CiAJCS8qIEFVWCBMT09QIGNvbW1hbmQgZG9lcyBub3QgcmFpc2UgQVVYIElSUSAqLworCQkuaWRlbnQgPSAiQXJpbWEtUmlvd29ya3MgSERBTUIiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiUklPV09SS1MiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkhEQU1CIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFUlNJT04sICJSZXYgRSIpLAorCQl9LAorCX0sCisJeworCQkvKiBBVVggTE9PUCBjb21tYW5kIGRvZXMgbm90IHJhaXNlIEFVWCBJUlEgKi8KIAkJLmlkZW50ID0gIkFTVVMgUDY1VVA1IiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSU5DLiIpLApAQCAtMTE4LDYgKzEyNywxNCBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICJWUzIwMDVSMiIpLAogCQl9LAogCX0sCisJeworCQkuaWRlbnQgPSAiTWVkaW9uIE1BTSAyMDcwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJOb3RlYm9vayIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNQU0gMjA3MCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICI1YSIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCkBAIC0yOTEsMTcgKzMwOCwzNiBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIzMDAwIE4xMDAiKSwKIAkJfSwKIAl9LAorCXsKKwkJLmlkZW50ID0gIkFjZXIgQXNwaXJlIDEzNjAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQXNwaXJlIDEzNjAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkdlcmljb20gQmVsbGFnaW8iLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkdlcmljb20iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjM0QVM2IiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKLQotCisjaWZkZWYgQ09ORklHX1BOUAorc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgaTgwNDJfZG1pX25vcG5wX3RhYmxlW10gPSB7CisJeworCQkuaWRlbnQgPSAiSW50ZWwgTUJPIERlc2t0b3AgRDg0NVBFU1YiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkQ4NDVQRVNWIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkludGVsIENvcnBvcmF0aW9uIiksCisJCX0sCisJfSwKKwl7IH0KK307CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODYKLQotI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgotCiAvKgogICogU29tZSBXaXN0cm9uIGJhc2VkIGxhcHRvcHMgbmVlZCB1cyB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGUgJ0RyaXRlawogICoga2V5Ym9hcmQgZXh0ZW5zaW9uJyB0byBtYWtlIHRoZWlyIGV4dHJhIGtleXMgc3RhcnQgZ2VuZXJhdGluZyBzY2FuY29kZXMuCkBAIC0zMzEsNiArMzY3LDEzIEBACiAJCX0sCiAJfSwKIAl7CisJCS5pZGVudCA9ICJBY2VyIEFzcGlyZSA1NzIwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFzcGlyZSA1NzIwIiksCisJCX0sCisJfSwKKwl7CiAJCS5pZGVudCA9ICJBY2VyIEFzcGlyZSA5MTEwIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCkBAIC0zNTYsNyArMzk5LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19YODYgKi8KIAotCiAjaWZkZWYgQ09ORklHX1BOUAogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogCkBAIC00NjYsNiArNTA4LDExIEBACiAJaW50IHBucF9kYXRhX2J1c3RlZCA9IDA7CiAJaW50IGVycjsKIAorI2lmZGVmIENPTkZJR19YODYKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShpODA0Ml9kbWlfbm9wbnBfdGFibGUpKQorCQlpODA0Ml9ub3BucCA9IDE7CisjZW5kaWYKKwogCWlmIChpODA0Ml9ub3BucCkgewogCQlwcmludGsoS0VSTl9JTkZPICJpODA0MjogUE5QIGRldGVjdGlvbiBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAwOwpAQCAtNTkxLDE1ICs2MzgsMTMgQEAKICAgICAgICAgaTgwNDJfcmVzZXQgPSAxOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaWZkZWYgQ09ORklHX1g4NgogCWlmIChkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9ub2xvb3BfdGFibGUpKQogCQlpODA0Ml9ub2xvb3AgPSAxOwogCiAJaWYgKGRtaV9jaGVja19zeXN0ZW0oaTgwNDJfZG1pX25vbXV4X3RhYmxlKSkKIAkJaTgwNDJfbm9tdXggPSAxOwotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2CiAJaWYgKGRtaV9jaGVja19zeXN0ZW0oaTgwNDJfZG1pX2RyaXRla190YWJsZSkpCiAJCWk4MDQyX2RyaXRlayA9IDE7CiAjZW5kaWYgLyogQ09ORklHX1g4NiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKaW5kZXggYjgxOTIzOS4uMmIzMDRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCkBAIC0yNiwxNSArMjYsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQUy8yIGRyaXZlciBsaWJyYXJ5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLS8qIFdvcmsgc3RydWN0dXJlIHRvIHNjaGVkdWxlIGV4ZWN1dGlvbiBvZiBhIGNvbW1hbmQgKi8KLXN0cnVjdCBwczJ3b3JrIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3QgcHMyZGV2ICpwczJkZXY7Ci0JaW50IGNvbW1hbmQ7Ci0JdW5zaWduZWQgY2hhciBwYXJhbVswXTsKLX07Ci0KLQogLyoKICAqIHBzMl9zZW5kYnl0ZSgpIHNlbmRzIGEgYnl0ZSB0byB0aGUgZGV2aWNlIGFuZCB3YWl0cyBmb3IgYWNrbm93bGVkZ2UuCiAgKiBJdCBkb2Vzbid0IGhhbmRsZSByZXRyYW5zbWlzc2lvbiwgdGhvdWdoIGl0IGNvdWxkIC0gYmVjYXVzZSBpZiB0aGVyZQpAQCAtMjQ2LDQ5ICsyMzcsNiBAQAogRVhQT1JUX1NZTUJPTChwczJfY29tbWFuZCk7CiAKIC8qCi0gKiBwczJfZXhlY3V0ZV9zY2hlZHVsZWRfY29tbWFuZCgpIHNlbmRzIGEgY29tbWFuZCwgcHJldmlvdXNseSBzY2hlZHVsZWQgYnkKLSAqIHBzMl9zY2hlZHVsZV9jb21tYW5kKCksIHRvIGEgUFMvMiBkZXZpY2UgKGtleWJvYXJkLCBtb3VzZSwgZXRjLikKLSAqLwotCi1zdGF0aWMgdm9pZCBwczJfZXhlY3V0ZV9zY2hlZHVsZWRfY29tbWFuZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHBzMndvcmsgKnBzMndvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBzMndvcmssIHdvcmspOwotCi0JcHMyX2NvbW1hbmQocHMyd29yay0+cHMyZGV2LCBwczJ3b3JrLT5wYXJhbSwgcHMyd29yay0+Y29tbWFuZCk7Ci0Ja2ZyZWUocHMyd29yayk7Ci19Ci0KLS8qCi0gKiBwczJfc2NoZWR1bGVfY29tbWFuZCgpIGFsbG93cyB0byBzY2hlZHVsZSBkZWxheWVkIGV4ZWN1dGlvbiBvZiBhIFBTLzIKLSAqIGNvbW1hbmQgYW5kIGNhbiBiZSB1c2VkIHRvIGlzc3VlIGEgY29tbWFuZCBmcm9tIGFuIGludGVycnVwdCBvciBzb2Z0aXJxCi0gKiBjb250ZXh0LgotICovCi0KLWludCBwczJfc2NoZWR1bGVfY29tbWFuZChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgKnBhcmFtLCBpbnQgY29tbWFuZCkKLXsKLQlzdHJ1Y3QgcHMyd29yayAqcHMyd29yazsKLQlpbnQgc2VuZCA9IChjb21tYW5kID4+IDEyKSAmIDB4ZjsKLQlpbnQgcmVjZWl2ZSA9IChjb21tYW5kID4+IDgpICYgMHhmOwotCi0JaWYgKCEocHMyd29yayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwczJ3b3JrKSArIG1heChzZW5kLCByZWNlaXZlKSwgR0ZQX0FUT01JQykpKQotCQlyZXR1cm4gLTE7Ci0KLQltZW1zZXQocHMyd29yaywgMCwgc2l6ZW9mKHN0cnVjdCBwczJ3b3JrKSk7Ci0JcHMyd29yay0+cHMyZGV2ID0gcHMyZGV2OwotCXBzMndvcmstPmNvbW1hbmQgPSBjb21tYW5kOwotCW1lbWNweShwczJ3b3JrLT5wYXJhbSwgcGFyYW0sIHNlbmQpOwotCUlOSVRfV09SSygmcHMyd29yay0+d29yaywgcHMyX2V4ZWN1dGVfc2NoZWR1bGVkX2NvbW1hbmQpOwotCi0JaWYgKCFzY2hlZHVsZV93b3JrKCZwczJ3b3JrLT53b3JrKSkgewotCQlrZnJlZShwczJ3b3JrKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChwczJfc2NoZWR1bGVfY29tbWFuZCk7Ci0KLS8qCiAgKiBwczJfaW5pdCgpIGluaXRpYWxpemVzIHBzMmRldiBzdHJ1Y3R1cmUKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3E0MGtiZC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9xNDBrYmQuYwppbmRleCBkOTYyYThkLi5lMzZhMDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3E0MGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcTQwa2JkLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogJElkOiBxNDBrYmQuYyx2IDEuMTIgMjAwMi8wMi8wMiAyMjoyNjo0NCB2b2p0ZWNoIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrCiAgKgogICogIEJhc2VkIG9uIHRoZSB3b3JrIG9mOgpAQCAtNDksNyArNDcsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJRNDAgUFMvMiBrZXlib2FyZCBjb250cm9sbGVyIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1ERUZJTkVfU1BJTkxPQ0socTQwa2JkX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhxNDBrYmRfbG9jayk7CiBzdGF0aWMgc3RydWN0IHNlcmlvICpxNDBrYmRfcG9ydDsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpxNDBrYmRfZGV2aWNlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYwppbmRleCAzNGM1OWQ5Li4xNTY3Yjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogJElkOiBycGNrYmQuYyx2IDEuNyAyMDAxLzA5LzI1IDEwOjEyOjA3IHZvanRlY2ggRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqICBDb3B5cmlnaHQgKGMpIDIwMDIgUnVzc2VsbCBLaW5nCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwppbmRleCA3ZjUyOTM4Li43OGYyYWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCkBAIC0zMzEsOSArMzMxLDEwIEBACiB9CiAKIC8qCi0gKiBSZW1vdmUgYWxsIGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBzdWJtaXR0ZWQgZm9yIGEgZ2l2ZW4gc2VyaW8gcG9ydC4KKyAqIFJlbW92ZSBhbGwgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIHN1Ym1pdHRlZCBmb3IgYSBnaXZlbgorICogb2JqZWN0LCBiZSBpdCBzZXJpbyBwb3J0IG9yIGRyaXZlci4KICAqLwotc3RhdGljIHZvaWQgc2VyaW9fcmVtb3ZlX3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBzZXJpbyAqc2VyaW8pCitzdGF0aWMgdm9pZCBzZXJpb19yZW1vdmVfcGVuZGluZ19ldmVudHModm9pZCAqb2JqZWN0KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OwogCXN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQ7CkBAIC0zNDMsNyArMzQ0LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmc2VyaW9fZXZlbnRfbGlzdCkgewogCQlldmVudCA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IHNlcmlvX2V2ZW50LCBub2RlKTsKLQkJaWYgKGV2ZW50LT5vYmplY3QgPT0gc2VyaW8pIHsKKwkJaWYgKGV2ZW50LT5vYmplY3QgPT0gb2JqZWN0KSB7CiAJCQlsaXN0X2RlbF9pbml0KG5vZGUpOwogCQkJc2VyaW9fZnJlZV9ldmVudChldmVudCk7CiAJCX0KQEAgLTgzNyw3ICs4MzgsOSBAQAogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAKIAltdXRleF9sb2NrKCZzZXJpb19tdXRleCk7CisKIAlkcnYtPm1hbnVhbF9iaW5kID0gMTsJLyogc28gc2VyaW9fZmluZF9kcml2ZXIgaWdub3JlcyBpdCAqLworCXNlcmlvX3JlbW92ZV9wZW5kaW5nX2V2ZW50cyhkcnYpOwogCiBzdGFydF9vdmVyOgogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VyaW8sICZzZXJpb19saXN0LCBub2RlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCmluZGV4IDdmZjcxYmEuLmI5Njk0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCkBAIC0yMTYsNyArMjE2LDcgQEAKICAqIFRoZSBsaW5lIGRpc2NpcGxpbmUgc3RydWN0dXJlLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjIHNlcnBvcnRfbGRpc2MgPSB7CitzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2VycG9ydF9sZGlzYyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiaW5wdXQiLAogCS5vcGVuID0JCXNlcnBvcnRfbGRpc2Nfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8veGlsaW54X3BzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby94aWxpbnhfcHMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkMDQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8veGlsaW54X3BzMi5jCkBAIC0wLDAgKzEsMzgwIEBACisvKgorICogWGlsaW54IFhQUyBQUy8yIGRldmljZSBkcml2ZXIKKyAqCisgKiAoYykgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAoYykgMjAwOCBYaWxpbngsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUJCSJ4aWxpbnhfcHMyIgorCisvKiBSZWdpc3RlciBvZmZzZXRzIGZvciB0aGUgeHBzMiBkZXZpY2UgKi8KKyNkZWZpbmUgWFBTMl9TUlNUX09GRlNFVAkweDAwMDAwMDAwIC8qIFNvZnR3YXJlIFJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIFhQUzJfU1RBVFVTX09GRlNFVAkweDAwMDAwMDA0IC8qIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBYUFMyX1JYX0RBVEFfT0ZGU0VUCTB4MDAwMDAwMDggLyogUmVjZWl2ZSBEYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFhQUzJfVFhfREFUQV9PRkZTRVQJMHgwMDAwMDAwQyAvKiBUcmFuc21pdCBEYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFhQUzJfR0lFUl9PRkZTRVQJMHgwMDAwMDAyQyAvKiBHbG9iYWwgSW50ZXJydXB0IEVuYWJsZSByZWcgKi8KKyNkZWZpbmUgWFBTMl9JUElTUl9PRkZTRVQJMHgwMDAwMDAzMCAvKiBJbnRlcnJ1cHQgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFhQUzJfSVBJRVJfT0ZGU0VUCTB4MDAwMDAwMzggLyogSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlciAqLworCisvKiBSZXNldCBSZWdpc3RlciBCaXQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWFBTMl9TUlNUX1JFU0VUCQkweDAwMDAwMDBBIC8qIFNvZnR3YXJlIFJlc2V0ICAqLworCisvKiBTdGF0dXMgUmVnaXN0ZXIgQml0IFBvc2l0aW9ucyAqLworI2RlZmluZSBYUFMyX1NUQVRVU19SWF9GVUxMCTB4MDAwMDAwMDEgLyogUmVjZWl2ZSBGdWxsICAqLworI2RlZmluZSBYUFMyX1NUQVRVU19UWF9GVUxMCTB4MDAwMDAwMDIgLyogVHJhbnNtaXQgRnVsbCAgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciBJU1IvSUVSIHJlZ2lzdGVycy4gQm90aCB0aGUgcmVnaXN0ZXJzIGhhdmUgdGhlIHNhbWUgYml0CisgKiBkZWZpbml0aW9ucyBhbmQgYXJlIG9ubHkgZGVmaW5lZCBvbmNlLiAqLworI2RlZmluZSBYUFMyX0lQSVhSX1dEVF9UT1VUCTB4MDAwMDAwMDEgLyogV2F0Y2hkb2cgVGltZW91dCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWFBTMl9JUElYUl9UWF9OT0FDSwkweDAwMDAwMDAyIC8qIFRyYW5zbWl0IE5vIEFDSyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWFBTMl9JUElYUl9UWF9BQ0sJMHgwMDAwMDAwNCAvKiBUcmFuc21pdCBBQ0sgKERhdGEpIEludGVycnVwdCAqLworI2RlZmluZSBYUFMyX0lQSVhSX1JYX09WRgkweDAwMDAwMDA4IC8qIFJlY2VpdmUgT3ZlcmZsb3cgSW50ZXJydXB0ICovCisjZGVmaW5lIFhQUzJfSVBJWFJfUlhfRVJSCTB4MDAwMDAwMTAgLyogUmVjZWl2ZSBFcnJvciBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWFBTMl9JUElYUl9SWF9GVUxMCTB4MDAwMDAwMjAgLyogUmVjZWl2ZSBEYXRhIEludGVycnVwdCAqLworCisvKiBNYXNrIGZvciBhbGwgdGhlIFRyYW5zbWl0IEludGVycnVwdHMgKi8KKyNkZWZpbmUgWFBTMl9JUElYUl9UWF9BTEwJKFhQUzJfSVBJWFJfVFhfTk9BQ0sgfCBYUFMyX0lQSVhSX1RYX0FDSykKKworLyogTWFzayBmb3IgYWxsIHRoZSBSZWNlaXZlIEludGVycnVwdHMgKi8KKyNkZWZpbmUgWFBTMl9JUElYUl9SWF9BTEwJKFhQUzJfSVBJWFJfUlhfT1ZGIHwgWFBTMl9JUElYUl9SWF9FUlIgfCAgXAorCQkJCQlYUFMyX0lQSVhSX1JYX0ZVTEwpCisKKy8qIE1hc2sgZm9yIGFsbCB0aGUgSW50ZXJydXB0cyAqLworI2RlZmluZSBYUFMyX0lQSVhSX0FMTAkJKFhQUzJfSVBJWFJfVFhfQUxMIHwgWFBTMl9JUElYUl9SWF9BTEwgfCAgXAorCQkJCQlYUFMyX0lQSVhSX1dEVF9UT1VUKQorCisvKiBHbG9iYWwgSW50ZXJydXB0IEVuYWJsZSBtYXNrICovCisjZGVmaW5lIFhQUzJfR0lFUl9HSUVfTUFTSwkweDgwMDAwMDAwCisKK3N0cnVjdCB4cHMyZGF0YSB7CisJaW50IGlycTsKKwl1MzIgcGh5c19hZGRyOworCXUzMiByZW1hcF9zaXplOworCXNwaW5sb2NrX3QgbG9jazsKKwl1OCByeGI7CQkJCS8qIFJ4IGJ1ZmZlciAqLworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzOwkvKiB2aXJ0LiBhZGRyZXNzIG9mIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgaW50IGRmbDsKKwlzdHJ1Y3Qgc2VyaW8gc2VyaW87CQkvKiBzZXJpbyAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFhQUyBQUy8yIGRhdGEgdHJhbnNtaXNzaW9uIGNhbGxzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogeHBzMl9yZWN2KCkgd2lsbCBhdHRlbXB0IHRvIHJlY2VpdmUgYSBieXRlIG9mIGRhdGEgZnJvbSB0aGUgUFMvMiBwb3J0LgorICovCitzdGF0aWMgaW50IHhwczJfcmVjdihzdHJ1Y3QgeHBzMmRhdGEgKmRydmRhdGEsIHU4ICpieXRlKQoreworCXUzMiBzcjsKKwlpbnQgc3RhdHVzID0gLTE7CisKKwkvKiBJZiB0aGVyZSBpcyBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgUFMvMiByZWNlaXZlciwgcmVhZCBpdCAqLworCXNyID0gaW5fYmUzMihkcnZkYXRhLT5iYXNlX2FkZHJlc3MgKyBYUFMyX1NUQVRVU19PRkZTRVQpOworCWlmIChzciAmIFhQUzJfU1RBVFVTX1JYX0ZVTEwpIHsKKwkJKmJ5dGUgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkcmVzcyArIFhQUzJfUlhfREFUQV9PRkZTRVQpOworCQlzdGF0dXMgPSAwOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnRlcnJ1cHQgaGFuZGxlciAqLworLyoqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB4cHMyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHhwczJkYXRhICpkcnZkYXRhID0gZGV2X2lkOworCXUzMiBpbnRyX3NyOworCXU4IGM7CisJaW50IHN0YXR1czsKKworCS8qIEdldCB0aGUgUFMvMiBpbnRlcnJ1cHRzIGFuZCBjbGVhciB0aGVtICovCisJaW50cl9zciA9IGluX2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyZXNzICsgWFBTMl9JUElTUl9PRkZTRVQpOworCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkcmVzcyArIFhQUzJfSVBJU1JfT0ZGU0VULCBpbnRyX3NyKTsKKworCS8qIENoZWNrIHdoaWNoIGludGVycnVwdCBpcyBhY3RpdmUgKi8KKwlpZiAoaW50cl9zciAmIFhQUzJfSVBJWFJfUlhfT1ZGKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVjZWl2ZSBvdmVycnVuIGVycm9yXG4iLAorCQkJZHJ2ZGF0YS0+c2VyaW8ubmFtZSk7CisKKwlpZiAoaW50cl9zciAmIFhQUzJfSVBJWFJfUlhfRVJSKQorCQlkcnZkYXRhLT5kZmwgfD0gU0VSSU9fUEFSSVRZOworCisJaWYgKGludHJfc3IgJiAoWFBTMl9JUElYUl9UWF9OT0FDSyB8IFhQUzJfSVBJWFJfV0RUX1RPVVQpKQorCQlkcnZkYXRhLT5kZmwgfD0gU0VSSU9fVElNRU9VVDsKKworCWlmIChpbnRyX3NyICYgWFBTMl9JUElYUl9SWF9GVUxMKSB7CisJCXN0YXR1cyA9IHhwczJfcmVjdihkcnZkYXRhLCAmZHJ2ZGF0YS0+cnhiKTsKKworCQkvKiBFcnJvciwgaWYgYSBieXRlIGlzIG5vdCByZWNlaXZlZCAqLworCQlpZiAoc3RhdHVzKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiJXM6IHdyb25nIHJjdmQgYnl0ZSBjb3VudCAoJWQpXG4iLAorCQkJCWRydmRhdGEtPnNlcmlvLm5hbWUsIHN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQljID0gZHJ2ZGF0YS0+cnhiOworCQkJc2VyaW9faW50ZXJydXB0KCZkcnZkYXRhLT5zZXJpbywgYywgZHJ2ZGF0YS0+ZGZsKTsKKwkJCWRydmRhdGEtPmRmbCA9IDA7CisJCX0KKwl9CisKKwlpZiAoaW50cl9zciAmIFhQUzJfSVBJWFJfVFhfQUNLKQorCQlkcnZkYXRhLT5kZmwgPSAwOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioqKioqKioqKioqKioqKioqKi8KKy8qIHNlcmlvIGNhbGxiYWNrcyAqLworLyoqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzeHBzMl93cml0ZSgpIHNlbmRzIGEgYnl0ZSBvdXQgdGhyb3VnaCB0aGUgUFMvMiBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQgc3hwczJfd3JpdGUoc3RydWN0IHNlcmlvICpwc2VyaW8sIHVuc2lnbmVkIGNoYXIgYykKK3sKKwlzdHJ1Y3QgeHBzMmRhdGEgKmRydmRhdGEgPSBwc2VyaW8tPnBvcnRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzcjsKKwlpbnQgc3RhdHVzID0gLTE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2ZGF0YS0+bG9jaywgZmxhZ3MpOworCisJLyogSWYgdGhlIFBTLzIgdHJhbnNtaXR0ZXIgaXMgZW1wdHkgc2VuZCBhIGJ5dGUgb2YgZGF0YSAqLworCXNyID0gaW5fYmUzMihkcnZkYXRhLT5iYXNlX2FkZHJlc3MgKyBYUFMyX1NUQVRVU19PRkZTRVQpOworCWlmICghKHNyICYgWFBTMl9TVEFUVVNfVFhfRlVMTCkpIHsKKwkJb3V0X2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyZXNzICsgWFBTMl9UWF9EQVRBX09GRlNFVCwgYyk7CisJCXN0YXR1cyA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2ZGF0YS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHN4cHMyX29wZW4oKSBpcyBjYWxsZWQgd2hlbiBhIHBvcnQgaXMgb3BlbiBieSB0aGUgaGlnaGVyIGxheWVyLgorICovCitzdGF0aWMgaW50IHN4cHMyX29wZW4oc3RydWN0IHNlcmlvICpwc2VyaW8pCit7CisJc3RydWN0IHhwczJkYXRhICpkcnZkYXRhID0gcHNlcmlvLT5wb3J0X2RhdGE7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRydmRhdGEtPmlycSwgJnhwczJfaW50ZXJydXB0LCAwLAorCQkJCURSSVZFUl9OQU1FLCBkcnZkYXRhKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzOiBDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHQgJWRcbiIsCisJCQlkcnZkYXRhLT5zZXJpby5uYW1lLCBkcnZkYXRhLT5pcnEpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIHN0YXJ0IHJlY2VwdGlvbiBieSBlbmFibGluZyB0aGUgaW50ZXJydXB0cyAqLworCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkcmVzcyArIFhQUzJfR0lFUl9PRkZTRVQsIFhQUzJfR0lFUl9HSUVfTUFTSyk7CisJb3V0X2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyZXNzICsgWFBTMl9JUElFUl9PRkZTRVQsIFhQUzJfSVBJWFJfUlhfQUxMKTsKKwkodm9pZCl4cHMyX3JlY3YoZHJ2ZGF0YSwgJmRydmRhdGEtPnJ4Yik7CisKKwlyZXR1cm4gMDsJCS8qIHN1Y2Nlc3MgKi8KK30KKworLyoKKyAqIHN4cHMyX2Nsb3NlKCkgZnJlZXMgdGhlIGludGVycnVwdC4KKyAqLworc3RhdGljIHZvaWQgc3hwczJfY2xvc2Uoc3RydWN0IHNlcmlvICpwc2VyaW8pCit7CisJc3RydWN0IHhwczJkYXRhICpkcnZkYXRhID0gcHNlcmlvLT5wb3J0X2RhdGE7CisKKwkvKiBEaXNhYmxlIHRoZSBQUzIgaW50ZXJydXB0cyAqLworCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkcmVzcyArIFhQUzJfR0lFUl9PRkZTRVQsIDB4MDApOworCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkcmVzcyArIFhQUzJfSVBJRVJfT0ZGU0VULCAweDAwKTsKKwlmcmVlX2lycShkcnZkYXRhLT5pcnEsIGRydmRhdGEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqLworLyogRGV2aWNlIHNldHVwIGNvZGUgKi8KKy8qKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgeHBzMl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVnc19yZXMsCisJCSAgICAgIHN0cnVjdCByZXNvdXJjZSAqaXJxX3JlcykKK3sKKwlzdHJ1Y3QgeHBzMmRhdGEgKmRydmRhdGE7CisJc3RydWN0IHNlcmlvICpzZXJpbzsKKwl1bnNpZ25lZCBsb25nIHJlbWFwX3NpemU7CisJaW50IHJldHZhbDsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghcmVnc19yZXMgfHwgIWlycV9yZXMpIHsKKwkJZGV2X2VycihkZXYsICJJTyByZXNvdXJjZShzKSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcnZkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHhwczJkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcnZkYXRhKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgZGV2aWNlIHByaXZhdGUgcmVjb3JkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2X3NldF9kcnZkYXRhKGRldiwgZHJ2ZGF0YSk7CisKKwlzcGluX2xvY2tfaW5pdCgmZHJ2ZGF0YS0+bG9jayk7CisJZHJ2ZGF0YS0+aXJxID0gaXJxX3Jlcy0+c3RhcnQ7CisKKwlyZW1hcF9zaXplID0gcmVnc19yZXMtPmVuZCAtIHJlZ3NfcmVzLT5zdGFydCArIDE7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVnc19yZXMtPnN0YXJ0LCByZW1hcF9zaXplLCBEUklWRVJfTkFNRSkpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBsb2NrIG1lbW9yeSByZWdpb24gYXQgMHglMDhYXG4iLAorCQkJKHVuc2lnbmVkIGludClyZWdzX3Jlcy0+c3RhcnQpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZmFpbGVkMTsKKwl9CisKKwkvKiBGaWxsIGluIGNvbmZpZ3VyYXRpb24gZGF0YSBhbmQgYWRkIHRoZW0gdG8gdGhlIGxpc3QgKi8KKwlkcnZkYXRhLT5waHlzX2FkZHIgPSByZWdzX3Jlcy0+c3RhcnQ7CisJZHJ2ZGF0YS0+cmVtYXBfc2l6ZSA9IHJlbWFwX3NpemU7CisJZHJ2ZGF0YS0+YmFzZV9hZGRyZXNzID0gaW9yZW1hcChyZWdzX3Jlcy0+c3RhcnQsIHJlbWFwX3NpemUpOworCWlmIChkcnZkYXRhLT5iYXNlX2FkZHJlc3MgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGlvcmVtYXAgbWVtb3J5IGF0IDB4JTA4WFxuIiwKKwkJCSh1bnNpZ25lZCBpbnQpcmVnc19yZXMtPnN0YXJ0KTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBmYWlsZWQyOworCX0KKworCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzLCBqdXN0IGluIGNhc2UgKi8KKwlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHJlc3MgKyBYUFMyX0lQSUVSX09GRlNFVCwgMCk7CisKKwkvKiBSZXNldCB0aGUgUFMyIGRldmljZSBhbmQgYWJvcnQgYW55IGN1cnJlbnQgdHJhbnNhY3Rpb24sIHRvIG1ha2Ugc3VyZQorCSAqIHdlIGhhdmUgdGhlIFBTMiBpbiBhIGdvb2Qgc3RhdGUgKi8KKwlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHJlc3MgKyBYUFMyX1NSU1RfT0ZGU0VULCBYUFMyX1NSU1RfUkVTRVQpOworCisJZGV2X2luZm8oZGV2LCAiWGlsaW54IFBTMiBhdCAweCUwOFggbWFwcGVkIHRvIDB4JTA4WCwgaXJxPSVkXG4iLAorCQlkcnZkYXRhLT5waHlzX2FkZHIsICh1MzIpZHJ2ZGF0YS0+YmFzZV9hZGRyZXNzLCBkcnZkYXRhLT5pcnEpOworCisJc2VyaW8gPSAmZHJ2ZGF0YS0+c2VyaW87CisJc2VyaW8tPmlkLnR5cGUgPSBTRVJJT184MDQyOworCXNlcmlvLT53cml0ZSA9IHN4cHMyX3dyaXRlOworCXNlcmlvLT5vcGVuID0gc3hwczJfb3BlbjsKKwlzZXJpby0+Y2xvc2UgPSBzeHBzMl9jbG9zZTsKKwlzZXJpby0+cG9ydF9kYXRhID0gZHJ2ZGF0YTsKKwlzZXJpby0+ZGV2LnBhcmVudCA9IGRldjsKKwlzbnByaW50ZihzZXJpby0+bmFtZSwgc2l6ZW9mKHNlcmlvLT5uYW1lKSwKKwkJICJYaWxpbnggWFBTIFBTLzIgYXQgJTA4WCIsIGRydmRhdGEtPnBoeXNfYWRkcik7CisJc25wcmludGYoc2VyaW8tPnBoeXMsIHNpemVvZihzZXJpby0+cGh5cyksCisJCSAieGlsaW54cHMyL3NlcmlvIGF0ICUwOFgiLCBkcnZkYXRhLT5waHlzX2FkZHIpOworCXNlcmlvX3JlZ2lzdGVyX3BvcnQoc2VyaW8pOworCisJcmV0dXJuIDA7CQkvKiBzdWNjZXNzICovCisKK2ZhaWxlZDI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlZ3NfcmVzLT5zdGFydCwgcmVtYXBfc2l6ZSk7CitmYWlsZWQxOgorCWtmcmVlKGRydmRhdGEpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE9GIFBsYXRmb3JtIEJ1cyBTdXBwb3J0ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB4cHMyX29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBjb25zdCBzdHJ1Y3QKKwkJCQkgICBvZl9kZXZpY2VfaWQgKiBtYXRjaCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2Ugcl9pcnE7IC8qIEludGVycnVwdCByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgcmVzb3VyY2Ugcl9tZW07IC8qIElPIG1lbSByZXNvdXJjZXMgKi8KKwlpbnQgcmMgPSAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRGV2aWNlIFRyZWUgUHJvYmluZyBcJyVzXCdcbiIsCisJCQlvZmRldi0+bm9kZS0+bmFtZSk7CisKKwkvKiBHZXQgaW9zcGFjZSBmb3IgdGhlIGRldmljZSAqLworCXJjID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShvZmRldi0+bm9kZSwgMCwgJnJfbWVtKTsKKwlpZiAocmMpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImludmFsaWQgYWRkcmVzc1xuIik7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBHZXQgSVJRIGZvciB0aGUgZGV2aWNlICovCisJcmMgPSBvZl9pcnFfdG9fcmVzb3VyY2Uob2ZkZXYtPm5vZGUsIDAsICZyX2lycSk7CisJaWYgKHJjID09IE5PX0lSUSkgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAibm8gSVJRIGZvdW5kXG4iKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiB4cHMyX3NldHVwKCZvZmRldi0+ZGV2LCAmcl9tZW0sICZyX2lycSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHhwczJfb2ZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZfZGV2LT5kZXY7CisJc3RydWN0IHhwczJkYXRhICpkcnZkYXRhOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJ2ZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KCZkcnZkYXRhLT5zZXJpbyk7CisJaW91bm1hcChkcnZkYXRhLT5iYXNlX2FkZHJlc3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihkcnZkYXRhLT5waHlzX2FkZHIsIGRydmRhdGEtPnJlbWFwX3NpemUpOworCWtmcmVlKGRydmRhdGEpOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsJCS8qIHN1Y2Nlc3MgKi8KK30KKworLyogTWF0Y2ggdGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi8KK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhwczJfb2ZfbWF0Y2hbXSBfX2RldmluaXRkYXRhID0geworCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtcHMyLTEuMDAuYSIsIH0sCisJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhwczJfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciB4cHMyX29mX2RyaXZlciA9IHsKKwkubmFtZQkJPSBEUklWRVJfTkFNRSwKKwkubWF0Y2hfdGFibGUJPSB4cHMyX29mX21hdGNoLAorCS5wcm9iZQkJPSB4cHMyX29mX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoeHBzMl9vZl9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHBzMl9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmeHBzMl9vZl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHBzMl9jbGVhbnVwKHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnhwczJfb2ZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoeHBzMl9pbml0KTsKK21vZHVsZV9leGl0KHhwczJfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIlhpbGlueCwgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggWFBTIFBTLzIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FjZWNhZC5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMKaW5kZXggYjk3M2QwZS4uNTcwZTBlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMKQEAgLTczLDEwICs3MywxMCBAQAogCQljYXNlIC1FTk9FTlQ6CiAJCWNhc2UgLUVTSFVURE9XTjoKIAkJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJCXJldHVybjsKIAkJZGVmYXVsdDoKLQkJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCQlnb3RvIHJlc3VibWl0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYwppbmRleCA1NWMxMTM0Li44ZjAzN2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYwpAQCAtNDQ5LDEyICs0NDksMTIgQEAKIAljYXNlIC1FU0hVVERPV046CiAJCS8qIFRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCiAJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAotCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCSAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAKIAlkZWZhdWx0OgogCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJICAgIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTgxMyw3ICs4MTMsNyBAQAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCAhPSAwKSB7CiAJCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkgICAgX19mdW5jX18sIHJldHZhbCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMKaW5kZXggMWU3NDhlNC4uYjliN2E5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYwpAQCAtODYzLDcgKzg2Myw3IEBACiAJZ3Rjby0+dXJiaW5mbyA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFndGNvLT51cmJpbmZvKSB7CiAJCWVycigiRmFpbGVkIHRvIGFsbG9jYXRlIFVSQiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mcmVlX2J1ZjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9rYnRhYi5jCmluZGV4IGYyM2Y1YTkuLmQ4OTExMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQva2J0YWIuYwpAQCAtNTYsMTAgKzU2LDEwIEBACiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6Ci0JCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtODgsNyArODgsNyBAQAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCiAJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJICAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCSAgICAgX19mdW5jX18sIHJldHZhbCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrYnRhYl9pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tLmggYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oCmluZGV4IDcwNjYxOWQuLmNhNjJlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tLmgKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaApAQCAtMTA1LDcgKzEwNSw3IEBACiAJc3RydWN0IHVyYiAqaXJxOwogCXN0cnVjdCB3YWNvbV93YWMgKiB3YWNvbV93YWM7CiAJc3RydWN0IG11dGV4IGxvY2s7Ci0JaW50IG9wZW46MTsKKwl1bnNpZ25lZCBpbnQgb3BlbjoxOwogCWNoYXIgcGh5c1szMl07CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCmluZGV4IDcxY2MwYzEuLjVmYmM0NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCkBAIC01NiwxMCArNTYsMTAgQEAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC03NCw3ICs3NCw3IEBACiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKIAkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJICAgICBfX2Z1bmNfXywgcmV0dmFsKTsKIH0KIAogdm9pZCB3YWNvbV9yZXBvcnRfa2V5KHZvaWQgKndjb21ibywgdW5zaWduZWQgaW50IGtleV90eXBlLCBpbnQga2V5X2RhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCmluZGV4IDE5MjUxM2UuLmJmM2Q5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCkBAIC01Niw3ICs1Niw3IEBACiBzdGF0aWMgaW50IHdhY29tX3BsX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgdm9pZCAqd2NvbWJvKQogewogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKLQlpbnQgcHJveCwgaWQsIHByZXNzdXJlOworCWludCBwcm94LCBwcmVzc3VyZTsKIAogCWlmIChkYXRhWzBdICE9IDIpIHsKIAkJZGJnKCJ3YWNvbV9wbF9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZCIsIGRhdGFbMF0pOwpAQCAtNjUsNyArNjUsNyBAQAogCiAJcHJveCA9IGRhdGFbMV0gJiAweDQwOwogCi0JaWQgPSBFUkFTRVJfREVWSUNFX0lEOworCXdhY29tLT5pZFswXSA9IEVSQVNFUl9ERVZJQ0VfSUQ7CiAJaWYgKHByb3gpIHsKIAogCQlwcmVzc3VyZSA9IChzaWduZWQgY2hhcikoKGRhdGFbN10gPDwgMSkgfCAoKGRhdGFbNF0gPj4gMikgJiAxKSk7CkBAIC05OSwxMCArOTksMTAgQEAKIAkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX1JVQkJFUikgewogCQkJLyogVW5rbm93biB0b29sIHNlbGVjdGVkIGRlZmF1bHQgdG8gcGVuIHRvb2wgKi8KIAkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfUEVOOwotCQkJaWQgPSBTVFlMVVNfREVWSUNFX0lEOworCQkJd2Fjb20tPmlkWzBdID0gU1RZTFVTX0RFVklDRV9JRDsKIAkJfQogCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMV0sIHByb3gpOyAvKiByZXBvcnQgaW4gcHJveGltaXR5IGZvciB0b29sICovCi0JCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgaWQpOyAvKiByZXBvcnQgdG9vbCBpZCAqLworCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIHdhY29tLT5pZFswXSk7IC8qIHJlcG9ydCB0b29sIGlkICovCiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWCwgZGF0YVszXSB8IChkYXRhWzJdIDw8IDcpIHwgKChkYXRhWzFdICYgMHgwMykgPDwgMTQpKTsKIAkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCBkYXRhWzZdIHwgKGRhdGFbNV0gPDwgNykgfCAoKGRhdGFbNF0gJiAweDAzKSA8PCAxNCkpOwogCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7CkBAIC0xMjcsNyArMTI3LDYgQEAKIHN0YXRpYyBpbnQgd2Fjb21fcHR1X2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgdm9pZCAqd2NvbWJvKQogewogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKLQlpbnQgaWQ7CiAKIAlpZiAoZGF0YVswXSAhPSAyKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIndhY29tX3B0dV9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgZGF0YVswXSk7CkBAIC0xMzcsMTMgKzEzNiwxMyBAQAogCWlmIChkYXRhWzFdICYgMHgwNCkgewogCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPT0xfUlVCQkVSLCBkYXRhWzFdICYgMHgyMCk7CiAJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fVE9VQ0gsIGRhdGFbMV0gJiAweDA4KTsKLQkJaWQgPSBFUkFTRVJfREVWSUNFX0lEOworCQl3YWNvbS0+aWRbMF0gPSBFUkFTRVJfREVWSUNFX0lEOwogCX0gZWxzZSB7CiAJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fVE9PTF9QRU4sIGRhdGFbMV0gJiAweDIwKTsKIAkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDEpOwotCQlpZCA9IFNUWUxVU19ERVZJQ0VfSUQ7CisJCXdhY29tLT5pZFswXSA9IFNUWUxVU19ERVZJQ0VfSUQ7CiAJfQotCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgaWQpOyAvKiByZXBvcnQgdG9vbCBpZCAqLworCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgd2Fjb20tPmlkWzBdKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KIAl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzJdKSk7CiAJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCB3YWNvbV9sZTE2X3RvX2NwdSgmZGF0YVs0XSkpOwogCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfUFJFU1NVUkUsIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzZdKSk7CkBAIC0xNTUsMjcgKzE1NCwyNiBAQAogc3RhdGljIGludCB3YWNvbV9ncmFwaGlyZV9pcnEoc3RydWN0IHdhY29tX3dhYyAqd2Fjb20sIHZvaWQgKndjb21ibykKIHsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7Ci0JaW50IHgsIHksIGlkLCBydzsKKwlpbnQgeCwgeSwgcnc7CiAKIAlpZiAoZGF0YVswXSAhPSAyKSB7CiAJCWRiZygid2Fjb21fZ3JhcGhpcmVfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWQiLCBkYXRhWzBdKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWQgPSBTVFlMVVNfREVWSUNFX0lEOwotCWlmICgoZGF0YVsxXSAmIDB4ODApICYmICgoZGF0YVsxXSAmIDB4MDcpIHx8IGRhdGFbMl0gfHwgZGF0YVszXSB8fCBkYXRhWzRdCi0JCQl8fCBkYXRhWzVdIHx8IGRhdGFbNl0gfHwgKGRhdGFbN10gJiAweDA3KSkpIHsKKwlpZiAoZGF0YVsxXSAmIDB4ODApIHsKIAkJLyogaW4gcHJveCBhbmQgbm90IGEgcGFkIGRhdGEgKi8KIAogCQlzd2l0Y2ggKChkYXRhWzFdID4+IDUpICYgMykgewogCiAJCQljYXNlIDA6CS8qIFBlbiAqLwogCQkJCXdhY29tLT50b29sWzBdID0gQlROX1RPT0xfUEVOOworCQkJCXdhY29tLT5pZFswXSA9IFNUWUxVU19ERVZJQ0VfSUQ7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgMTogLyogUnViYmVyICovCiAJCQkJd2Fjb20tPnRvb2xbMF0gPSBCVE5fVE9PTF9SVUJCRVI7Ci0JCQkJaWQgPSBFUkFTRVJfREVWSUNFX0lEOworCQkJCXdhY29tLT5pZFswXSA9IEVSQVNFUl9ERVZJQ0VfSUQ7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgMjogLyogTW91c2Ugd2l0aCB3aGVlbCAqLwpAQCAtMTkwLDcgKzE4OCw3IEBACiAKIAkJCWNhc2UgMzogLyogTW91c2Ugd2l0aG91dCB3aGVlbCAqLwogCQkJCXdhY29tLT50b29sWzBdID0gQlROX1RPT0xfTU9VU0U7Ci0JCQkJaWQgPSBDVVJTT1JfREVWSUNFX0lEOworCQkJCXdhY29tLT5pZFswXSA9IENVUlNPUl9ERVZJQ0VfSUQ7CiAJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9MRUZULCBkYXRhWzFdICYgMHgwMSk7CiAJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9SSUdIVCwgZGF0YVsxXSAmIDB4MDIpOwogCQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fRzQgfHwKQEAgLTIxMCw5ICsyMDgsOSBAQAogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9TVFlMVVMsIGRhdGFbMV0gJiAweDAyKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU1RZTFVTMiwgZGF0YVsxXSAmIDB4MDQpOwogCQl9Ci0JCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgaWQpOyAvKiByZXBvcnQgdG9vbCBpZCAqLworCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIHdhY29tLT5pZFswXSk7IC8qIHJlcG9ydCB0b29sIGlkICovCiAJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCB3YWNvbS0+dG9vbFswXSwgMSk7Ci0JfSBlbHNlIGlmICghKGRhdGFbMV0gJiAweDkwKSkgeworCX0gZWxzZSBpZiAod2Fjb20tPmlkWzBdKSB7CiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWCwgMCk7CiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWSwgMCk7CiAJCWlmICh3YWNvbS0+dG9vbFswXSA9PSBCVE5fVE9PTF9NT1VTRSkgewpAQCAtMjI1LDYgKzIyMyw3IEBACiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1NUWUxVUywgMCk7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1NUWUxVUzIsIDApOwogCQl9CisJCXdhY29tLT5pZFswXSA9IDA7CiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgMCk7IC8qIHJlc2V0IHRvb2wgaWQgKi8KIAkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sWzBdLCAwKTsKIAl9CkBAIC0yMzQsMTMgKzIzMywxMyBAQAogCSAgICBjYXNlIFdBQ09NX0c0OgogCQlpZiAoZGF0YVs3XSAmIDB4ZjgpIHsKIAkJCXdhY29tX2lucHV0X3N5bmMod2NvbWJvKTsgLyogc3luYyBsYXN0IGV2ZW50ICovCi0JCQl3YWNvbS0+aWRbMV0gPSAxOworCQkJd2Fjb20tPmlkWzFdID0gUEFEX0RFVklDRV9JRDsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fMCwgKGRhdGFbN10gJiAweDQwKSk7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzQsIChkYXRhWzddICYgMHg4MCkpOwogCQkJcncgPSAoKGRhdGFbN10gJiAweDE4KSA+PiAzKSAtICgoZGF0YVs3XSAmIDB4MjApID4+IDMpOwogCQkJd2Fjb21fcmVwb3J0X3JlbCh3Y29tYm8sIFJFTF9XSEVFTCwgcncpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT09MX0ZJTkdFUiwgMHhmMCk7Ci0JCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIFBBRF9ERVZJQ0VfSUQpOworCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19NSVNDLCB3YWNvbS0+aWRbMV0pOwogCQkJd2Fjb21faW5wdXRfZXZlbnQod2NvbWJvLCBFVl9NU0MsIE1TQ19TRVJJQUwsIDB4ZjApOwogCQl9IGVsc2UgaWYgKHdhY29tLT5pZFsxXSkgewogCQkJd2Fjb21faW5wdXRfc3luYyh3Y29tYm8pOyAvKiBzeW5jIGxhc3QgZXZlbnQgKi8KQEAgLTI1NSwxNCArMjU0LDE0IEBACiAJICAgIGNhc2UgV0FDT01fTU86CiAJCWlmICgoZGF0YVs3XSAmIDB4ZjgpIHx8IChkYXRhWzhdICYgMHhmZikpIHsKIAkJCXdhY29tX2lucHV0X3N5bmMod2NvbWJvKTsgLyogc3luYyBsYXN0IGV2ZW50ICovCi0JCQl3YWNvbS0+aWRbMV0gPSAxOworCQkJd2Fjb20tPmlkWzFdID0gUEFEX0RFVklDRV9JRDsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fMCwgKGRhdGFbN10gJiAweDA4KSk7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzEsIChkYXRhWzddICYgMHgyMCkpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl80LCAoZGF0YVs3XSAmIDB4MTApKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fNSwgKGRhdGFbN10gJiAweDQwKSk7CiAJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1dIRUVMLCAoZGF0YVs4XSAmIDB4N2YpKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fVE9PTF9GSU5HRVIsIDB4ZjApOwotCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19NSVNDLCBQQURfREVWSUNFX0lEKTsKKwkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgd2Fjb20tPmlkWzFdKTsKIAkJCXdhY29tX2lucHV0X2V2ZW50KHdjb21ibywgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGYwKTsKIAkJfSBlbHNlIGlmICh3YWNvbS0+aWRbMV0pIHsKIAkJCXdhY29tX2lucHV0X3N5bmMod2NvbWJvKTsgLyogc3luYyBsYXN0IGV2ZW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKaW5kZXggNTY1ZWM3MS4uZTU3MzY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwpAQCAtMTAzLDYgKzEwMywxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbXRvdWNoLgogCitjb25maWcgVE9VQ0hTQ1JFRU5fSU5FWElPCisJdHJpc3RhdGUgImlOZXhpbyBzZXJpYWwgdG91Y2hzY3JlZW5zIgorCXNlbGVjdCBTRVJJTworCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gaU5leGlvIHNlcmlhbCB0b3VjaHNjcmVlbiBjb25uZWN0ZWQgdG8KKwkgIHlvdXIgc3lzdGVtLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbmV4aW8uCisKIGNvbmZpZyBUT1VDSFNDUkVFTl9NSzcxMgogCXRyaXN0YXRlICJJQ1MgTWljcm9DbG9jayBNSzcxMiB0b3VjaHNjcmVlbiIKIAloZWxwCkBAIC0xMzQsNiArMTQ2LDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBqb3JuYWRhNzIwX3RzLgogCitjb25maWcgVE9VQ0hTQ1JFRU5fSFRDUEVOCisJdHJpc3RhdGUgIkhUQyBTaGlmdCBYOTUwMCB0b3VjaHNjcmVlbiIKKwlkZXBlbmRzIG9uIElTQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gSFRDIFNoaWZ0IFVNUEMgYWxzbyBrbm93biBhcyBIVEMgWDk1MDAKKwkgIENsaW8gLyBTaGFuZ3JpbGEgYW5kIHdhbnQgdG8gc3VwcG9ydCB0aGUgYnVpbHQtaW4gdG91Y2hzY3JlZW4uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGh0Y3Blbi4KKwogY29uZmlnIFRPVUNIU0NSRUVOX1BFTk1PVU5UCiAJdHJpc3RhdGUgIlBlbm1vdW50IHNlcmlhbCB0b3VjaHNjcmVlbiIKIAlzZWxlY3QgU0VSSU8KQEAgLTE0Niw2ICsxNzAsMTcgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBlbm1vdW50LgogCitjb25maWcgVE9VQ0hTQ1JFRU5fTUlHT1IKKwl0cmlzdGF0ZSAiUmVuZXNhcyBNSUdPLVIgdG91Y2hzY3JlZW4iCisJZGVwZW5kcyBvbiBTSF9NSUdPUiAmJiBJMkMKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBNSUdPLVIgdG91Y2hzY3JlZW4gc3VwcG9ydC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWlnb3JfdHMuCisKIGNvbmZpZyBUT1VDSFNDUkVFTl9UT1VDSFJJR0hUCiAJdHJpc3RhdGUgIlRvdWNocmlnaHQgc2VyaWFsIHRvdWNoc2NyZWVuIgogCXNlbGVjdCBTRVJJTwpAQCAtMzE2LDQgKzM1MSwxNSBAQAogCWJvb2wgIkdvVG9wIFN1cGVyX1EyL0dvZ29QZW4vUGVuUG93ZXIgdGFibGV0IGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQogCitjb25maWcgVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMworCXRyaXN0YXRlICJTYWhhcmEgVG91Y2hJVC0yMTMgdG91Y2hzY3JlZW4iCisJc2VsZWN0IFNFUklPCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFNhaGFyYSBUb3VjaElULTIxMyBUYWJsZXQgUEMuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRvdWNoaXQyMTMuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQppbmRleCAzYzA5NmQ3Li4zOWE4MDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUKQEAgLTEyLDEyICsxMiwxNiBAQAogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFKQkJKz0gZ3VuemUubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0VMTykJCSs9IGVsby5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSkJKz0gZnVqaXRzdV90cy5vCitvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPKQkrPSBpbmV4aW8ubworb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX01JR09SKQkJKz0gbWlnb3JfdHMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCkJKz0gbXRvdWNoLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMikJCSs9IG1rNzEyLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9IUDYwMCkJCSs9IGhwNjgwX3RzX2lucHV0Lm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9IUDdYWCkJCSs9IGpvcm5hZGE3MjBfdHMubworb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0hUQ1BFTikJKz0gaHRjcGVuLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFKQkrPSB1c2J0b3VjaHNjcmVlbi5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQpCSs9IHBlbm1vdW50Lm8KK29iai0kKENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzKQkrPSB0b3VjaGl0MjEzLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUKQkrPSB0b3VjaHJpZ2h0Lm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTikJKz0gdG91Y2h3aW4ubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDApCSs9IHVjYjE0MDBfdHMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ndW56ZS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ndW56ZS5jCmluZGV4IGE0OGExNTguLmE1NGY5MGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2d1bnplLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ndW56ZS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogZ3VuemUuYyx2IDEuMTIgMjAwMS8wOS8yNSAxMDoxMjowNyB2b2p0ZWNoIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jCmluZGV4IDI4YWUxNWUuLjRmODYwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogJElkOiBoMzYwMF90c19pbnB1dC5jLHYgMS40IDIwMDIvMDEvMjMgMDY6Mzk6MzcganNpbW1vbnMgRXhwICQKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAxICJDcmF6eSIgSmFtZXMgU2ltbW9ucyBqc2ltbW9uc0B0cmFuc3ZpcnR1YWwuY29tCiAgKgogICogIFNwb25zb3JlZCBieSBUcmFuc3ZpcnR1YWwgVGVjaG5vbG9neS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHRjcGVuLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2h0Y3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODExZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2h0Y3Blbi5jCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogSFRDIFNoaWZ0IHRvdWNoc2NyZWVuIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQYXUgT2xpdmEgRm9yYSA8cG9mQGVzbGFjay5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorCitNT0RVTEVfQVVUSE9SKCJQYXUgT2xpdmEgRm9yYSA8cGF1QGVzbGFjay5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkhUQyBTaGlmdCB0b3VjaHNjcmVlbiBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBIVENQRU5fUE9SVF9JUlFfQ0xFQVIJMHgwNjgKKyNkZWZpbmUgSFRDUEVOX1BPUlRfSU5JVAkweDA2YworI2RlZmluZSBIVENQRU5fUE9SVF9JTkRFWAkweDAyNTAKKyNkZWZpbmUgSFRDUEVOX1BPUlRfREFUQQkweDAyNTEKKyNkZWZpbmUgSFRDUEVOX0lSUQkJMworCisjZGVmaW5lIERFVklDRV9FTkFCTEUJCTB4YTIKKyNkZWZpbmUgREVWSUNFX0RJU0FCTEUJCTB4YTMKKworI2RlZmluZSBYX0lOREVYCQkJMworI2RlZmluZSBZX0lOREVYCQkJNQorI2RlZmluZSBUT1VDSF9JTkRFWAkJMHhiCisjZGVmaW5lIExTQl9YWV9JTkRFWAkJMHhjCisjZGVmaW5lIFhfQVhJU19NQVgJCTIwNDAKKyNkZWZpbmUgWV9BWElTX01BWAkJMjA0MAorCitzdGF0aWMgaW50IGludmVydF94OworbW9kdWxlX3BhcmFtKGludmVydF94LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW52ZXJ0X3gsICJJZiBzZXQsIFggYXhpcyBpcyBpbnZlcnRlZCIpOworc3RhdGljIGludCBpbnZlcnRfeTsKK21vZHVsZV9wYXJhbShpbnZlcnRfeSwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGludmVydF95LCAiSWYgc2V0LCBZIGF4aXMgaXMgaW52ZXJ0ZWQiKTsKKworc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIHBucF9pZHNbXSA9IHsKKwl7IC5pZCA9ICJQTlAwY2MwIiB9LAorCXsgLmlkID0gIiIgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBwbnBfaWRzKTsKKworc3RhdGljIGlycXJldHVybl90IGh0Y3Blbl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmh0Y3Blbl9kZXYgPSBoYW5kbGU7CisJdW5zaWduZWQgc2hvcnQgeCwgeSwgeHk7CisKKwkvKiAwID0gcHJlc3M7IDEgPSByZWxlYXNlICovCisJb3V0Yl9wKFRPVUNIX0lOREVYLCBIVENQRU5fUE9SVF9JTkRFWCk7CisKKwlpZiAoaW5iX3AoSFRDUEVOX1BPUlRfREFUQSkpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShodGNwZW5fZGV2LCBCVE5fVE9VQ0gsIDApOworCX0gZWxzZSB7CisJCW91dGJfcChYX0lOREVYLCBIVENQRU5fUE9SVF9JTkRFWCk7CisJCXggPSBpbmJfcChIVENQRU5fUE9SVF9EQVRBKTsKKworCQlvdXRiX3AoWV9JTkRFWCwgSFRDUEVOX1BPUlRfSU5ERVgpOworCQl5ID0gaW5iX3AoSFRDUEVOX1BPUlRfREFUQSk7CisKKwkJb3V0Yl9wKExTQl9YWV9JTkRFWCwgSFRDUEVOX1BPUlRfSU5ERVgpOworCQl4eSA9IGluYl9wKEhUQ1BFTl9QT1JUX0RBVEEpOworCisJCS8qIGdldCBoaWdoIHJlc29sdXRpb24gdmFsdWUgb2YgWCBhbmQgWSB1c2luZyBMU0IgKi8KKwkJeCA9IFhfQVhJU19NQVggLSAoKHggKiA4KSArICgoeHkgPj4gNCkgJiAweGYpKTsKKwkJeSA9ICh5ICogOCkgKyAoeHkgJiAweGYpOworCQlpZiAoaW52ZXJ0X3gpCisJCQl4ID0gWF9BWElTX01BWCAtIHg7CisJCWlmIChpbnZlcnRfeSkKKwkJCXkgPSBZX0FYSVNfTUFYIC0geTsKKworCQlpZiAoeCAhPSBYX0FYSVNfTUFYICYmIHggIT0gMCkgeworCQkJaW5wdXRfcmVwb3J0X2tleShodGNwZW5fZGV2LCBCVE5fVE9VQ0gsIDEpOworCQkJaW5wdXRfcmVwb3J0X2FicyhodGNwZW5fZGV2LCBBQlNfWCwgeCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGh0Y3Blbl9kZXYsIEFCU19ZLCB5KTsKKwkJfQorCX0KKworCWlucHV0X3N5bmMoaHRjcGVuX2Rldik7CisKKwlpbmJfcChIVENQRU5fUE9SVF9JUlFfQ0xFQVIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGh0Y3Blbl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlvdXRiX3AoREVWSUNFX0VOQUJMRSwgSFRDUEVOX1BPUlRfSU5JVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaHRjcGVuX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlvdXRiX3AoREVWSUNFX0RJU0FCTEUsIEhUQ1BFTl9QT1JUX0lOSVQpOworCXN5bmNocm9uaXplX2lycShIVENQRU5fSVJRKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRjcGVuX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpodGNwZW5fZGV2OworCWludCBlcnIgPSAtRUJVU1k7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKEhUQ1BFTl9QT1JUX0lSUV9DTEVBUiwgMSwgImh0Y3BlbiIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaHRjcGVuOiB1bmFibGUgdG8gZ2V0IElPIHJlZ2lvbiAweCV4XG4iLAorCQkJSFRDUEVOX1BPUlRfSVJRX0NMRUFSKTsKKwkJZ290byByZXF1ZXN0X3JlZ2lvbjFfZmFpbGVkOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24oSFRDUEVOX1BPUlRfSU5JVCwgMSwgImh0Y3BlbiIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaHRjcGVuOiB1bmFibGUgdG8gZ2V0IElPIHJlZ2lvbiAweCV4XG4iLAorCQkJSFRDUEVOX1BPUlRfSU5JVCk7CisJCWdvdG8gcmVxdWVzdF9yZWdpb24yX2ZhaWxlZDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKEhUQ1BFTl9QT1JUX0lOREVYLCAyLCAiaHRjcGVuIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJodGNwZW46IHVuYWJsZSB0byBnZXQgSU8gcmVnaW9uIDB4JXhcbiIsCisJCQlIVENQRU5fUE9SVF9JTkRFWCk7CisJCWdvdG8gcmVxdWVzdF9yZWdpb24zX2ZhaWxlZDsKKwl9CisKKwlodGNwZW5fZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFodGNwZW5fZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiaHRjcGVuOiBjYW4ndCBhbGxvY2F0ZSBkZXZpY2VcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGlucHV0X2FsbG9jX2ZhaWxlZDsKKwl9CisKKwlodGNwZW5fZGV2LT5uYW1lID0gIkhUQyBTaGlmdCBFQyBUb3VjaFNjcmVlbiI7CisJaHRjcGVuX2Rldi0+aWQuYnVzdHlwZSA9IEJVU19JU0E7CisKKwlodGNwZW5fZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0FCUykgfCBCSVRfTUFTSyhFVl9LRVkpOworCWh0Y3Blbl9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fVE9VQ0gpXSA9IEJJVF9NQVNLKEJUTl9UT1VDSCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaHRjcGVuX2RldiwgQUJTX1gsIDAsIFhfQVhJU19NQVgsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGh0Y3Blbl9kZXYsIEFCU19ZLCAwLCBZX0FYSVNfTUFYLCAwLCAwKTsKKworCWh0Y3Blbl9kZXYtPm9wZW4gPSBodGNwZW5fb3BlbjsKKwlodGNwZW5fZGV2LT5jbG9zZSA9IGh0Y3Blbl9jbG9zZTsKKworCWVyciA9IHJlcXVlc3RfaXJxKEhUQ1BFTl9JUlEsIGh0Y3Blbl9pbnRlcnJ1cHQsIDAsICJodGNwZW4iLAorCQkJaHRjcGVuX2Rldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgImh0Y3BlbjogaXJxIGJ1c3lcbiIpOworCQlnb3RvIHJlcXVlc3RfaXJxX2ZhaWxlZDsKKwl9CisKKwlpbmJfcChIVENQRU5fUE9SVF9JUlFfQ0xFQVIpOworCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGh0Y3Blbl9kZXYpOworCWlmIChlcnIpCisJCWdvdG8gaW5wdXRfcmVnaXN0ZXJfZmFpbGVkOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgaHRjcGVuX2Rldik7CisKKwlyZXR1cm4gMDsKKworIGlucHV0X3JlZ2lzdGVyX2ZhaWxlZDoKKwlmcmVlX2lycShIVENQRU5fSVJRLCBodGNwZW5fZGV2KTsKKyByZXF1ZXN0X2lycV9mYWlsZWQ6CisJaW5wdXRfZnJlZV9kZXZpY2UoaHRjcGVuX2Rldik7CisgaW5wdXRfYWxsb2NfZmFpbGVkOgorCXJlbGVhc2VfcmVnaW9uKEhUQ1BFTl9QT1JUX0lOREVYLCAyKTsKKyByZXF1ZXN0X3JlZ2lvbjNfZmFpbGVkOgorCXJlbGVhc2VfcmVnaW9uKEhUQ1BFTl9QT1JUX0lOSVQsIDEpOworIHJlcXVlc3RfcmVnaW9uMl9mYWlsZWQ6CisJcmVsZWFzZV9yZWdpb24oSFRDUEVOX1BPUlRfSVJRX0NMRUFSLCAxKTsKKyByZXF1ZXN0X3JlZ2lvbjFfZmFpbGVkOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGh0Y3Blbl9pc2FfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmh0Y3Blbl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGh0Y3Blbl9kZXYpOworCisJZnJlZV9pcnEoSFRDUEVOX0lSUSwgaHRjcGVuX2Rldik7CisKKwlyZWxlYXNlX3JlZ2lvbihIVENQRU5fUE9SVF9JTkRFWCwgMik7CisJcmVsZWFzZV9yZWdpb24oSFRDUEVOX1BPUlRfSU5JVCwgMSk7CisJcmVsZWFzZV9yZWdpb24oSFRDUEVOX1BPUlRfSVJRX0NMRUFSLCAxKTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaHRjcGVuX2lzYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4sCisJCQkJcG1fbWVzc2FnZV90IHN0YXRlKQoreworCW91dGJfcChERVZJQ0VfRElTQUJMRSwgSFRDUEVOX1BPUlRfSU5JVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBodGNwZW5faXNhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKQoreworCW91dGJfcChERVZJQ0VfRU5BQkxFLCBIVENQRU5fUE9SVF9JTklUKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBodGNwZW5faXNhX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gaHRjcGVuX2lzYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGh0Y3Blbl9pc2FfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IGh0Y3Blbl9pc2Ffc3VzcGVuZCwKKwkucmVzdW1lCQk9IGh0Y3Blbl9pc2FfcmVzdW1lLAorI2VuZGlmCisJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gImh0Y3BlbiIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgaHRjc2hpZnRfZG1pX3RhYmxlW10gPSB7CisJeworCQkuaWRlbnQgPSAiU2hpZnQiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhpZ2ggVGVjaCBDb21wdXRlciBDb3JwIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlNoaWZ0IiksCisJCX0sCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGh0Y3Blbl9pc2FfaW5pdCh2b2lkKQoreworCWlmICghZG1pX2NoZWNrX3N5c3RlbShodGNzaGlmdF9kbWlfdGFibGUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZodGNwZW5faXNhX2RyaXZlciwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBodGNwZW5faXNhX2V4aXQodm9pZCkKK3sKKwlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJmh0Y3Blbl9pc2FfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaHRjcGVuX2lzYV9pbml0KTsKK21vZHVsZV9leGl0KGh0Y3Blbl9pc2FfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2luZXhpby5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9pbmV4aW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTJhZGUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9pbmV4aW8uYwpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIGlOZXhpbyBzZXJpYWwgdG91Y2hzY3JlZW4gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFJpY2hhcmQgTGVtb24KKyAqIEJhc2VkIG9uIHRoZSBtdG91Y2ggZHJpdmVyIChjKSBWb2p0ZWNoIFBhdmxpayBhbmQgRGFuIFN0cmVldG1hbgorICoKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogMjAwOC8wNi8xOSBSaWNoYXJkIExlbW9uIDxyaWNoYXJkQGNvZGVsZW1vbi5jb20+CisgKiAgIENvcGllZCBtdG91Y2guYyBhbmQgZWRpdGVkIGZvciBpTmV4aW8gcHJvdG9jb2wKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2RlZmluZSBEUklWRVJfREVTQwkiaU5leGlvIHNlcmlhbCB0b3VjaHNjcmVlbiBkcml2ZXIiCisKK01PRFVMRV9BVVRIT1IoIlJpY2hhcmQgTGVtb24gPHJpY2hhcmRAY29kZWxlbW9uLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBEZWZpbml0aW9ucyAmIGdsb2JhbCBhcnJheXMuCisgKi8KKworI2RlZmluZSBJTkVYSU9fRk9STUFUX1RPVUNIX0JJVCAweDAxCisjZGVmaW5lIElORVhJT19GT1JNQVRfTEVOR1RIIDUKKyNkZWZpbmUgSU5FWElPX1JFU1BPTlNFX0JFR0lOX0JZVEUgMHg4MAorCisvKiB0b2RvOiBjaGVjayBzcGVjcyBmb3IgbWF4IGxlbmd0aCBvZiBhbGwgcmVzcG9uc2VzICovCisjZGVmaW5lIElORVhJT19NQVhfTEVOR1RIIDE2CisKKyNkZWZpbmUgSU5FWElPX01JTl9YQyAwCisjZGVmaW5lIElORVhJT19NQVhfWEMgMHgzZmZmCisjZGVmaW5lIElORVhJT19NSU5fWUMgMAorI2RlZmluZSBJTkVYSU9fTUFYX1lDIDB4M2ZmZgorCisjZGVmaW5lIElORVhJT19HRVRfWEMoZGF0YSkgKCgoZGF0YVsxXSk8PDcpIHwgZGF0YVsyXSkKKyNkZWZpbmUgSU5FWElPX0dFVF9ZQyhkYXRhKSAoKChkYXRhWzNdKTw8NykgfCBkYXRhWzRdKQorI2RlZmluZSBJTkVYSU9fR0VUX1RPVUNIRUQoZGF0YSkgKElORVhJT19GT1JNQVRfVE9VQ0hfQklUICYgZGF0YVswXSkKKworLyoKKyAqIFBlci10b3VjaHNjcmVlbiBkYXRhLgorICovCisKK3N0cnVjdCBpbmV4aW8geworCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKKwlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOworCWludCBpZHg7CisJdW5zaWduZWQgY2hhciBkYXRhW0lORVhJT19NQVhfTEVOR1RIXTsKKwljaGFyIHBoeXNbMzJdOworfTsKKworc3RhdGljIHZvaWQgaW5leGlvX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgaW5leGlvICpwaW5leGlvKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBpbmV4aW8tPmRldjsKKworCWlmIChJTkVYSU9fRk9STUFUX0xFTkdUSCA9PSArK3BpbmV4aW8tPmlkeCkgeworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIElORVhJT19HRVRfWEMocGluZXhpby0+ZGF0YSkpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIElORVhJT19HRVRfWUMocGluZXhpby0+ZGF0YSkpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBJTkVYSU9fR0VUX1RPVUNIRUQocGluZXhpby0+ZGF0YSkpOworCQlpbnB1dF9zeW5jKGRldik7CisKKwkJcGluZXhpby0+aWR4ID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbmV4aW9faW50ZXJydXB0KHN0cnVjdCBzZXJpbyAqc2VyaW8sCisJCXVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBpbmV4aW8qIHBpbmV4aW8gPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CisKKwlwaW5leGlvLT5kYXRhW3BpbmV4aW8tPmlkeF0gPSBkYXRhOworCisJaWYgKElORVhJT19SRVNQT05TRV9CRUdJTl9CWVRFJnBpbmV4aW8tPmRhdGFbMF0pCisJCWluZXhpb19wcm9jZXNzX2RhdGEocGluZXhpbyk7CisJZWxzZQorCQlwcmludGsoS0VSTl9ERUJVRyAiaW5leGlvLmM6IHVua25vd24vdW5zeW5jaHJvbml6ZWQgZGF0YSBmcm9tIGRldmljZSwgYnl0ZSAleFxuIixwaW5leGlvLT5kYXRhWzBdKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIGluZXhpb19kaXNjb25uZWN0KCkgaXMgdGhlIG9wcG9zaXRlIG9mIGluZXhpb19jb25uZWN0KCkKKyAqLworCitzdGF0aWMgdm9pZCBpbmV4aW9fZGlzY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCXN0cnVjdCBpbmV4aW8qIHBpbmV4aW8gPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CisKKwlpbnB1dF9nZXRfZGV2aWNlKHBpbmV4aW8tPmRldik7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UocGluZXhpby0+ZGV2KTsKKwlzZXJpb19jbG9zZShzZXJpbyk7CisJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOworCWlucHV0X3B1dF9kZXZpY2UocGluZXhpby0+ZGV2KTsKKwlrZnJlZShwaW5leGlvKTsKK30KKworLyoKKyAqIGluZXhpb19jb25uZWN0KCkgaXMgdGhlIHJvdXRpbmUgdGhhdCBpcyBjYWxsZWQgd2hlbiBzb21lb25lIGFkZHMgYQorICogbmV3IHNlcmlvIGRldmljZSB0aGF0IHN1cHBvcnRzIGlOZXhpbyBwcm90b2NvbCBhbmQgcmVnaXN0ZXJzIGl0IGFzCisgKiBhbiBpbnB1dCBkZXZpY2UuIFRoaXMgaXMgdXN1YWxseSBhY2NvbXBsaXNoZWQgdXNpbmcgaW5wdXRhdHRhY2guCisgKi8KKworc3RhdGljIGludCBpbmV4aW9fY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpCit7CisJc3RydWN0IGluZXhpbyAqcGluZXhpbzsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IGVycjsKKworCXBpbmV4aW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW5leGlvKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFwaW5leGlvIHx8ICFpbnB1dF9kZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsMTsKKwl9CisKKwlwaW5leGlvLT5zZXJpbyA9IHNlcmlvOworCXBpbmV4aW8tPmRldiA9IGlucHV0X2RldjsKKwlzbnByaW50ZihwaW5leGlvLT5waHlzLCBzaXplb2YocGluZXhpby0+cGh5cyksICIlcy9pbnB1dDAiLCBzZXJpby0+cGh5cyk7CisKKwlpbnB1dF9kZXYtPm5hbWUgPSAiaU5leGlvIFNlcmlhbCBUb3VjaFNjcmVlbiI7CisJaW5wdXRfZGV2LT5waHlzID0gcGluZXhpby0+cGh5czsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfUlMyMzI7CisJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBTRVJJT19JTkVYSU87CisJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gMDsKKwlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAwMDE7CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnNlcmlvLT5kZXY7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9UT1VDSCldID0gQklUX01BU0soQlROX1RPVUNIKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhwaW5leGlvLT5kZXYsIEFCU19YLCBJTkVYSU9fTUlOX1hDLCBJTkVYSU9fTUFYX1hDLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhwaW5leGlvLT5kZXYsIEFCU19ZLCBJTkVYSU9fTUlOX1lDLCBJTkVYSU9fTUFYX1lDLCAwLCAwKTsKKworCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBwaW5leGlvKTsKKworCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CisJaWYgKGVycikKKwkJZ290byBmYWlsMjsKKworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShwaW5leGlvLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CisKKwlyZXR1cm4gMDsKKworIGZhaWwzOglzZXJpb19jbG9zZShzZXJpbyk7CisgZmFpbDI6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZShwaW5leGlvKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVGhlIHNlcmlvIGRyaXZlciBzdHJ1Y3R1cmUuCisgKi8KKworc3RhdGljIHN0cnVjdCBzZXJpb19kZXZpY2VfaWQgaW5leGlvX3NlcmlvX2lkc1tdID0geworCXsKKwkJLnR5cGUJPSBTRVJJT19SUzIzMiwKKwkJLnByb3RvCT0gU0VSSU9fSU5FWElPLAorCQkuaWQJPSBTRVJJT19BTlksCisJCS5leHRyYQk9IFNFUklPX0FOWSwKKwl9LAorCXsgMCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHNlcmlvLCBpbmV4aW9fc2VyaW9faWRzKTsKKworc3RhdGljIHN0cnVjdCBzZXJpb19kcml2ZXIgaW5leGlvX2RydiA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiaW5leGlvIiwKKwl9LAorCS5kZXNjcmlwdGlvbgk9IERSSVZFUl9ERVNDLAorCS5pZF90YWJsZQk9IGluZXhpb19zZXJpb19pZHMsCisJLmludGVycnVwdAk9IGluZXhpb19pbnRlcnJ1cHQsCisJLmNvbm5lY3QJPSBpbmV4aW9fY29ubmVjdCwKKwkuZGlzY29ubmVjdAk9IGluZXhpb19kaXNjb25uZWN0LAorfTsKKworLyoKKyAqIFRoZSBmdW5jdGlvbnMgZm9yIGluc2VydGluZy9yZW1vdmluZyB1cyBhcyBhIG1vZHVsZS4KKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBpbmV4aW9faW5pdCh2b2lkKQoreworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJmluZXhpb19kcnYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaW5leGlvX2V4aXQodm9pZCkKK3sKKwlzZXJpb191bnJlZ2lzdGVyX2RyaXZlcigmaW5leGlvX2Rydik7Cit9CisKK21vZHVsZV9pbml0KGluZXhpb19pbml0KTsKK21vZHVsZV9leGl0KGluZXhpb19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWlnb3JfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWlnb3JfdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWNkOTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9taWdvcl90cy5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogVG91Y2ggU2NyZWVuIGRyaXZlciBmb3IgUmVuZXNhcyBNSUdPLVIgUGxhdGZvcm0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFnbnVzIERhbW0KKyAqIENvcHlyaWdodCAoYykgMjAwNyBVamp3YWwgUGFuZGUgPHVqandhbEBrZW5hdGkuY29tPiwKKyAqICBLZW5hdGkgVGVjaG5vbG9naWVzIFB2dCBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VICBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNkZWZpbmUgRVZFTlRfUEVORE9XTiAxCisjZGVmaW5lIEVWRU5UX1JFUEVBVCAgMgorI2RlZmluZSBFVkVOVF9QRU5VUCAgIDMKKworc3RydWN0IG1pZ29yX3RzX3ByaXYgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCWludCBpcnE7Cit9OworCitzdGF0aWMgY29uc3QgdV9pbnQ4X3QgbWlnb3JfdHNfZW5hX3NlcVsxN10gPSB7IDB4MzMsIDB4MjIsIDB4MTEsCisJCQkJCSAgICAgICAweDAxLCAweDA2LCAweDA3LCB9Oworc3RhdGljIGNvbnN0IHVfaW50OF90IG1pZ29yX3RzX2Rpc19zZXFbMTddID0geyB9OworCitzdGF0aWMgdm9pZCBtaWdvcl90c19wb3NjaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1pZ29yX3RzX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgc3RydWN0IG1pZ29yX3RzX3ByaXYsCisJCQkJCQkgIHdvcmsud29yayk7CisJdW5zaWduZWQgc2hvcnQgeHBvcywgeXBvczsKKwl1bnNpZ25lZCBjaGFyIGV2ZW50OworCXVfaW50OF90IGJ1ZlsxNl07CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisKKwkvKiBTZXQgSW5kZXggMCAqLworCWJ1ZlswXSA9IDA7CisJaWYgKGkyY19tYXN0ZXJfc2VuZChwcml2LT5jbGllbnQsIGJ1ZiwgMSkgIT0gMSkgeworCQlkZXZfZXJyKCZwcml2LT5jbGllbnQtPmRldiwgIlVuYWJsZSB0byB3cml0ZSBpMmMgaW5kZXhcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBOb3cgZG8gUGFnZSBSZWFkICovCisJaWYgKGkyY19tYXN0ZXJfcmVjdihwcml2LT5jbGllbnQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IHNpemVvZihidWYpKSB7CisJCWRldl9lcnIoJnByaXYtPmNsaWVudC0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgaTJjIHBhZ2VcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwl5cG9zID0gKChidWZbOV0gJiAweDAzKSA8PCA4IHwgYnVmWzhdKTsKKwl4cG9zID0gKChidWZbMTFdICYgMHgwMykgPDwgOCB8IGJ1ZlsxMF0pOworCWV2ZW50ID0gYnVmWzEyXTsKKworCWlmIChldmVudCA9PSBFVkVOVF9QRU5ET1dOIHx8IGV2ZW50ID09IEVWRU5UX1JFUEVBVCkgeworCQlpbnB1dF9yZXBvcnRfa2V5KHByaXYtPmlucHV0LCBCVE5fVE9VQ0gsIDEpOworCQlpbnB1dF9yZXBvcnRfYWJzKHByaXYtPmlucHV0LCBBQlNfWCwgeXBvcyk7IC8qWC1ZIHN3YXAqLworCQlpbnB1dF9yZXBvcnRfYWJzKHByaXYtPmlucHV0LCBBQlNfWSwgeHBvcyk7CisJCWlucHV0X3N5bmMocHJpdi0+aW5wdXQpOworCX0gZWxzZSBpZiAoZXZlbnQgPT0gRVZFTlRfUEVOVVApIHsKKwkJaW5wdXRfcmVwb3J0X2tleShwcml2LT5pbnB1dCwgQlROX1RPVUNILCAwKTsKKwkJaW5wdXRfc3luYyhwcml2LT5pbnB1dCk7CisJfQorIG91dDoKKwllbmFibGVfaXJxKHByaXYtPmlycSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtaWdvcl90c19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtaWdvcl90c19wcml2ICpwcml2ID0gZGV2X2lkOworCisJLyogdGhlIHRvdWNoIHNjcmVlbiBjb250cm9sbGVyIGNoaXAgaXMgaG9va2VkIHVwIHRvIHRoZSBjcHUKKwkgKiB1c2luZyBpMmMgYW5kIGEgc2luZ2xlIGludGVycnVwdCBsaW5lLiB0aGUgaW50ZXJydXB0IGxpbmUKKwkgKiBpcyBwdWxsZWQgbG93IHdoZW5ldmVyIHNvbWVvbmUgdGFwcyB0aGUgc2NyZWVuLiB0byBkZWFzc2VydAorCSAqIHRoZSBpbnRlcnJ1cHQgbGluZSB3ZSBuZWVkIHRvIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgYnkKKwkgKiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGNvbnRyb2xsZXIgb3ZlciB0aGUgc2xvdyBpMmMgYnVzLgorCSAqCisJICogd2UgY2FuJ3QgYWNrbm93bGVkZ2UgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBzaW5jZSB0aGUgaTJjCisJICogYnVzIGNvbnRyb2xsZXIgbWF5IHNsZWVwLCBzbyB3ZSBqdXN0IGRpc2FibGUgdGhlIGludGVycnVwdAorCSAqIGhlcmUgYW5kIGhhbmRsZSB0aGUgYWNrbm93bGVkZ2UgdXNpbmcgZGVsYXllZCB3b3JrLgorCSAqLworCisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT53b3JrLCBIWiAvIDIwKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCitzdGF0aWMgaW50IG1pZ29yX3RzX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBtaWdvcl90c19wcml2ICpwcml2ID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcHJpdi0+Y2xpZW50OworCWludCBjb3VudDsKKworCS8qIGVuYWJsZSBjb250cm9sbGVyICovCisJY291bnQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBtaWdvcl90c19lbmFfc2VxLAorCQkJCXNpemVvZihtaWdvcl90c19lbmFfc2VxKSk7CisJaWYgKGNvdW50ICE9IHNpemVvZihtaWdvcl90c19lbmFfc2VxKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlVuYWJsZSB0byBlbmFibGUgdG91Y2hzY3JlZW4uXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWlnb3JfdHNfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBtaWdvcl90c19wcml2ICpwcml2ID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcHJpdi0+Y2xpZW50OworCisJZGlzYWJsZV9pcnEocHJpdi0+aXJxKTsKKworCS8qIGNhbmNlbCBwZW5kaW5nIHdvcmsgYW5kIHdhaXQgZm9yIG1pZ29yX3RzX3Bvc2NoZWNrKCkgdG8gZmluaXNoICovCisJaWYgKGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+d29yaykpIHsKKwkJLyoKKwkJICogaWYgbWlnb3JfdHNfcG9zY2hlY2sgd2FzIGNhbmNlbGVkIHdlIG5lZWQgdG8gZW5hYmxlIElSUQorCQkgKiBoZXJlIHRvIGJhbGFuY2UgZGlzYWJsZSBkb25lIGluIG1pZ29yX3RzX2lzci4KKwkJICovCisJCWVuYWJsZV9pcnEocHJpdi0+aXJxKTsKKwl9CisKKwkvKiBkaXNhYmxlIGNvbnRyb2xsZXIgKi8KKwlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBtaWdvcl90c19kaXNfc2VxLCBzaXplb2YobWlnb3JfdHNfZGlzX3NlcSkpOworCisJZW5hYmxlX2lycShwcml2LT5pcnEpOworfQorCitzdGF0aWMgaW50IG1pZ29yX3RzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZHApCit7CisJc3RydWN0IG1pZ29yX3RzX3ByaXYgKnByaXY7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJaW50IGVycm9yOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRyaXZlciBkYXRhXG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycjA7CisJfQorCisJZGV2X3NldF9kcnZkYXRhKCZjbGllbnQtPmRldiwgcHJpdik7CisKKwlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXQpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlLlxuIik7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBlcnIxOworCX0KKworCWlucHV0LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCWlucHV0LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOworCisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19YLCA5NSwgOTU1LCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1ksIDg1LCA5MzUsIDAsIDApOworCisJaW5wdXQtPm5hbWUgPSBjbGllbnQtPmRyaXZlcl9uYW1lOworCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKwlpbnB1dC0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKKworCWlucHV0LT5vcGVuID0gbWlnb3JfdHNfb3BlbjsKKwlpbnB1dC0+Y2xvc2UgPSBtaWdvcl90c19jbG9zZTsKKworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0LCBwcml2KTsKKworCXByaXYtPmNsaWVudCA9IGNsaWVudDsKKwlwcml2LT5pbnB1dCA9IGlucHV0OworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT53b3JrLCBtaWdvcl90c19wb3NjaGVjayk7CisJcHJpdi0+aXJxID0gY2xpZW50LT5pcnE7CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycjE7CisKKwllcnJvciA9IHJlcXVlc3RfaXJxKHByaXYtPmlycSwgbWlnb3JfdHNfaXNyLCBJUlFGX1RSSUdHRVJfTE9XLAorCQkJICAgIGNsaWVudC0+ZHJpdmVyX25hbWUsIHByaXYpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IHRvdWNoc2NyZWVuIElSUS5cbiIpOworCQlnb3RvIGVycjI7CisJfQorCisJcmV0dXJuIDA7CisKKyBlcnIyOgorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpbnB1dCA9IE5VTEw7IC8qIHNvIHdlIGRvbnQgdHJ5IHRvIGZyZWUgaXQgYmVsb3cgKi8KKyBlcnIxOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwlrZnJlZShwcml2KTsKKyBlcnIwOgorCWRldl9zZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYsIE5VTEwpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBtaWdvcl90c19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbWlnb3JfdHNfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYpOworCisJZnJlZV9pcnEocHJpdi0+aXJxLCBwcml2KTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShwcml2LT5pbnB1dCk7CisJa2ZyZWUocHJpdik7CisKKwlkZXZfc2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWlnb3JfdHNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1pZ29yX3RzIiwKKwl9LAorCS5wcm9iZSA9IG1pZ29yX3RzX3Byb2JlLAorCS5yZW1vdmUgPSBtaWdvcl90c19yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtaWdvcl90c19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtaWdvcl90c19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWlnb3JfdHNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtaWdvcl90c19kcml2ZXIpOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIk1pZ29SIFRvdWNoc2NyZWVuIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFnbnVzIERhbW0gPGRhbW1Ab3BlbnNvdXJjZS5zZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQobWlnb3JfdHNfaW5pdCk7Cittb2R1bGVfZXhpdChtaWdvcl90c19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG91Y2hpdDIxMy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90b3VjaGl0MjEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyOTdiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG91Y2hpdDIxMy5jCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogU2FoYXJhIFRvdWNoSVQtMjEzIHNlcmlhbCB0b3VjaHNjcmVlbiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBDbGF1ZGlvIE5pZWRlciA8cHJpdmF0ZUBjbGF1ZGlvLmNoPgorICoKKyAqIEJhc2VkIG9uIFRvdWNocmlnaHQgZHJpdmVyIChkcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RvdWNocmlnaHQuYykKKyAqIENvcHlyaWdodCAoYykgMjAwNiBSaWNrIEtvY2ggPG4xZ3BAaG90bWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVm9qdGVjaCBQYXZsaWsKKyAqIGFuZCBEYW4gU3RyZWV0bWFuIDxkZHN0cmVldEBpZWVlLm9yZz4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2RlZmluZSBEUklWRVJfREVTQwkiU2FoYXJhIFRvdWNoSVQtMjEzIHNlcmlhbCB0b3VjaHNjcmVlbiBkcml2ZXIiCisKK01PRFVMRV9BVVRIT1IoIkNsYXVkaW8gTmllZGVyIDxwcml2YXRlQGNsYXVkaW8uY2g+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogRGVmaW5pdGlvbnMgJiBnbG9iYWwgYXJyYXlzLgorICovCisKKy8qCisgKiBEYXRhIGlzIHJlY2VpdmVkIHRocm91Z2ggQ09NMSBhdCA5NjAwYml0L3MsOGJpdCxubyBwYXJpdHkgaW4gcGFja2V0cworICogb2YgNSBieXRlIGVhY2guCisgKgorICogICArLS0tLS0tLS0rICAgKy0tLS0tLS0tKyAgICstLS0tLS0tLSsgICArLS0tLS0tLS0rICAgKy0tLS0tLS0tKworICogICB8MTAwMDAwMHB8ICAgfDB4eHh4eHh4fCAgIHwweHh4eHh4eHwgICB8MHl5eXl5eXl8ICAgfDB5eXl5eXl5fAorICogICArLS0tLS0tLS0rICAgKy0tLS0tLS0tKyAgICstLS0tLS0tLSsgICArLS0tLS0tLS0rICAgKy0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgIE1TQiAgICAgICAgICBMU0IgICAgICAgICAgTVNCICAgICAgICAgIExTQgorICoKKyAqIFRoZSB2YWx1ZSBvZiBwIGlzIDEgYXMgbG9uZyBhcyB0aGUgc2NyZWVuIGlzIHRvdWNoZWQgYW5kIDAgd2hlbgorICogcmVwb3J0aW5nIHRoZSBsb2NhdGlvbiB3aGVyZSB0b3VjaGluZyBzdG9wcGVkLCBlLmcuIHdoZXJlIHRoZSBwZW4gd2FzCisgKiBsaWZ0ZWQgZnJvbSB0aGUgc2NyZWVuLgorICoKKyAqIFdoZW4gaG9sZGluZyB0aGUgc2NyZWVuIGluIGxhbmRzY2FwZSBtb2RlIGFzIHRoZSBCSU9TIHRleHQgb3V0cHV0IGlzCisgKiBwcmVzZW50ZWQsIHggaXMgdGhlIGhvcml6b250YWwgYXhpcyB3aXRoIHZhbHVlcyBncm93aW5nIGZyb20gbGVmdCB0bworICogcmlnaHQgYW5kIHkgaXMgdGhlIHZlcnRpY2FsIGF4aXMgd2l0aCB2YWx1ZXMgZ3Jvd2luZyBmcm9tIHRvcCB0bworICogYm90dG9tLgorICoKKyAqIFdoZW4gaG9sZGluZyB0aGUgc2NyZWVuIGluIHBvcnRyYWl0IG1vZGUgd2l0aCB0aGUgU2FoYXJhIGxvZ28gaW4gaXRzCisgKiBjb3JyZWN0IHBvc2l0aW9uLCB4IGlzdCB0aGUgdmVydGljYWwgYXhpcyB3aXRoIHZhbHVlcyBncm93aW5nIGZyb20KKyAqIHRvcCB0byBib3R0b20gYW5kIHkgaXMgdGhlIGhvcml6b250YWwgYXhpcyB3aXRoIHZhbHVlcyBncm93aW5nIGZyb20KKyAqIHJpZ2h0IHRvIGxlZnQuCisgKi8KKworI2RlZmluZSBUMjEzX0ZPUk1BVF9UT1VDSF9CSVQJMHgwMQorI2RlZmluZSBUMjEzX0ZPUk1BVF9TVEFUVVNfQllURQkweDgwCisjZGVmaW5lIFQyMTNfRk9STUFUX1NUQVRVU19NQVNLCX5UMjEzX0ZPUk1BVF9UT1VDSF9CSVQKKworLyoKKyAqIE9uIG15IFNhaGFyYSBUb3VjaC1JVCAyMTMgSSBoYXZlIG9ic2VydmVkIHggdmFsdWVzIGZyb20gMCB0byAweDdmMAorICogYW5kIHkgdmFsdWVzIGZyb20gMHgxZCB0byAweDdlOSwgc28gdGhlIGFjdHVhbCBtZWFzdXJlbWVudCBpcworICogcHJvYmFibHkgZG9uZSB3aXRoIGFuIDExIGJpdCBwcmVjaXNpb24uCisgKi8KKyNkZWZpbmUgVDIxM19NSU5fWEMgMAorI2RlZmluZSBUMjEzX01BWF9YQyAweDA3ZmYKKyNkZWZpbmUgVDIxM19NSU5fWUMgMAorI2RlZmluZSBUMjEzX01BWF9ZQyAweDA3ZmYKKworLyoKKyAqIFBlci10b3VjaHNjcmVlbiBkYXRhLgorICovCisKK3N0cnVjdCB0b3VjaGl0MjEzIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CisJc3RydWN0IHNlcmlvICpzZXJpbzsKKwlpbnQgaWR4OworCXVuc2lnbmVkIGNoYXIgY3N1bTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbNV07CisJY2hhciBwaHlzWzMyXTsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0b3VjaGl0MjEzX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLAorCQl1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgdG91Y2hpdDIxMyAqdG91Y2hpdDIxMyA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB0b3VjaGl0MjEzLT5kZXY7CisKKwl0b3VjaGl0MjEzLT5kYXRhW3RvdWNoaXQyMTMtPmlkeF0gPSBkYXRhOworCisJc3dpdGNoICh0b3VjaGl0MjEzLT5pZHgrKykgeworCWNhc2UgMDoKKwkJaWYgKCh0b3VjaGl0MjEzLT5kYXRhWzBdICYgVDIxM19GT1JNQVRfU1RBVFVTX01BU0spICE9CisJCQkJVDIxM19GT1JNQVRfU1RBVFVTX0JZVEUpIHsKKwkJCXByX2RlYnVnKCJ1bnN5bmNocm9uaXplZCBkYXRhOiAweCUwMnhcbiIsIGRhdGEpOworCQkJdG91Y2hpdDIxMy0+aWR4ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgNDoKKwkJdG91Y2hpdDIxMy0+aWR4ID0gMDsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLAorCQkJKHRvdWNoaXQyMTMtPmRhdGFbMV0gPDwgNykgfCB0b3VjaGl0MjEzLT5kYXRhWzJdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLAorCQkJKHRvdWNoaXQyMTMtPmRhdGFbM10gPDwgNykgfCB0b3VjaGl0MjEzLT5kYXRhWzRdKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwKKwkJCXRvdWNoaXQyMTMtPmRhdGFbMF0gJiBUMjEzX0ZPUk1BVF9UT1VDSF9CSVQpOworCQlpbnB1dF9zeW5jKGRldik7CisJCWJyZWFrOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIHRvdWNoaXQyMTNfZGlzY29ubmVjdCgpIGlzIHRoZSBvcHBvc2l0ZSBvZiB0b3VjaGl0MjEzX2Nvbm5lY3QoKQorICovCisKK3N0YXRpYyB2b2lkIHRvdWNoaXQyMTNfZGlzY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCXN0cnVjdCB0b3VjaGl0MjEzICp0b3VjaGl0MjEzID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOworCisJaW5wdXRfZ2V0X2RldmljZSh0b3VjaGl0MjEzLT5kZXYpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHRvdWNoaXQyMTMtPmRldik7CisJc2VyaW9fY2xvc2Uoc2VyaW8pOworCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKwlpbnB1dF9wdXRfZGV2aWNlKHRvdWNoaXQyMTMtPmRldik7CisJa2ZyZWUodG91Y2hpdDIxMyk7Cit9CisKKy8qCisgKiB0b3VjaGl0MjEzX2Nvbm5lY3QoKSBpcyB0aGUgcm91dGluZSB0aGF0IGlzIGNhbGxlZCB3aGVuIHNvbWVvbmUgYWRkcyBhCisgKiBuZXcgc2VyaW8gZGV2aWNlIHRoYXQgc3VwcG9ydHMgdGhlIFRvdWNocmlnaHQgcHJvdG9jb2wgYW5kIHJlZ2lzdGVycyBpdCBhcworICogYW4gaW5wdXQgZGV2aWNlLgorICovCisKK3N0YXRpYyBpbnQgdG91Y2hpdDIxM19jb25uZWN0KHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgdG91Y2hpdDIxMyAqdG91Y2hpdDIxMzsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IGVycjsKKworCXRvdWNoaXQyMTMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdG91Y2hpdDIxMyksIEdGUF9LRVJORUwpOworCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghdG91Y2hpdDIxMyB8fCAhaW5wdXRfZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDE7CisJfQorCisJdG91Y2hpdDIxMy0+c2VyaW8gPSBzZXJpbzsKKwl0b3VjaGl0MjEzLT5kZXYgPSBpbnB1dF9kZXY7CisJc25wcmludGYodG91Y2hpdDIxMy0+cGh5cywgc2l6ZW9mKHRvdWNoaXQyMTMtPnBoeXMpLAorCQkgIiVzL2lucHV0MCIsIHNlcmlvLT5waHlzKTsKKworCWlucHV0X2Rldi0+bmFtZSA9ICJTYWhhcmEgVG91Y2gtaVQyMTMgU2VyaWFsIFRvdWNoU2NyZWVuIjsKKwlpbnB1dF9kZXYtPnBoeXMgPSB0b3VjaGl0MjEzLT5waHlzOworCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19SUzIzMjsKKwlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IFNFUklPX1RPVUNISVQyMTM7CisJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gMDsKKwlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnNlcmlvLT5kZXY7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9UT1VDSCldID0gQklUX01BU0soQlROX1RPVUNIKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyh0b3VjaGl0MjEzLT5kZXYsIEFCU19YLAorCQkJICAgICBUMjEzX01JTl9YQywgVDIxM19NQVhfWEMsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoaXQyMTMtPmRldiwgQUJTX1ksCisJCQkgICAgIFQyMTNfTUlOX1lDLCBUMjEzX01BWF9ZQywgMCwgMCk7CisKKwlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgdG91Y2hpdDIxMyk7CisKKwllcnIgPSBzZXJpb19vcGVuKHNlcmlvLCBkcnYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDI7CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodG91Y2hpdDIxMy0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwzOworCisJcmV0dXJuIDA7CisKKyBmYWlsMzoJc2VyaW9fY2xvc2Uoc2VyaW8pOworIGZhaWwyOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CisgZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUodG91Y2hpdDIxMyk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoZSBzZXJpbyBkcml2ZXIgc3RydWN0dXJlLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgc2VyaW9fZGV2aWNlX2lkIHRvdWNoaXQyMTNfc2VyaW9faWRzW10gPSB7CisJeworCQkudHlwZQk9IFNFUklPX1JTMjMyLAorCQkucHJvdG8JPSBTRVJJT19UT1VDSElUMjEzLAorCQkuaWQJPSBTRVJJT19BTlksCisJCS5leHRyYQk9IFNFUklPX0FOWSwKKwl9LAorCXsgMCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHNlcmlvLCB0b3VjaGl0MjEzX3NlcmlvX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3Qgc2VyaW9fZHJpdmVyIHRvdWNoaXQyMTNfZHJ2ID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ0b3VjaGl0MjEzIiwKKwl9LAorCS5kZXNjcmlwdGlvbgk9IERSSVZFUl9ERVNDLAorCS5pZF90YWJsZQk9IHRvdWNoaXQyMTNfc2VyaW9faWRzLAorCS5pbnRlcnJ1cHQJPSB0b3VjaGl0MjEzX2ludGVycnVwdCwKKwkuY29ubmVjdAk9IHRvdWNoaXQyMTNfY29ubmVjdCwKKwkuZGlzY29ubmVjdAk9IHRvdWNoaXQyMTNfZGlzY29ubmVjdCwKK307CisKKy8qCisgKiBUaGUgZnVuY3Rpb25zIGZvciBpbnNlcnRpbmcvcmVtb3ZpbmcgdXMgYXMgYSBtb2R1bGUuCisgKi8KKworc3RhdGljIGludCBfX2luaXQgdG91Y2hpdDIxM19pbml0KHZvaWQpCit7CisJcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmdG91Y2hpdDIxM19kcnYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG91Y2hpdDIxM19leGl0KHZvaWQpCit7CisJc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJnRvdWNoaXQyMTNfZHJ2KTsKK30KKworbW9kdWxlX2luaXQodG91Y2hpdDIxM19pbml0KTsKK21vZHVsZV9leGl0KHRvdWNoaXQyMTNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMKaW5kZXggM2EwYThjYS4uZmRkNjQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KIAogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkidjAuNiIKQEAgLTEwMSw3ICsxMDIsNyBAQAogCiAvKiBkZXZpY2UgdHlwZXMgKi8KIGVudW0gewotCURFVlRQWUVfRFVNTVkgPSAtMSwKKwlERVZUWVBFX0lHTk9SRSA9IC0xLAogCURFVlRZUEVfRUdBTEFYLAogCURFVlRZUEVfUEFOSklULAogCURFVlRZUEVfM00sCkBAIC0xMTUsOCArMTE2LDIxIEBACiAJREVWVFlQRV9HT1RPUCwKIH07CiAKKyNkZWZpbmUgVVNCX0RFVklDRV9ISURfQ0xBU1ModmVuZCwgcHJvZCkgXAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIFwKKwkJfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgXAorCS5pZFZlbmRvciA9ICh2ZW5kKSwgXAorCS5pZFByb2R1Y3QgPSAocHJvZCksIFwKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0lOVEVSRkFDRV9DTEFTU19ISUQsIFwKKwkuYkludGVyZmFjZVByb3RvY29sID0gVVNCX0lOVEVSRkFDRV9QUk9UT0NPTF9NT1VTRQorCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidG91Y2hfZGV2aWNlc1tdID0gewogI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUdBTEFYCisJLyogaWdub3JlIHRoZSBISUQgY2FwYWJsZSBkZXZpY2VzLCBoYW5kbGVkIGJ5IHVzYmhpZCAqLworCXtVU0JfREVWSUNFX0hJRF9DTEFTUygweDBlZWYsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfSUdOT1JFfSwKKwl7VVNCX0RFVklDRV9ISURfQ0xBU1MoMHgwZWVmLCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0lHTk9SRX0sCisKKwkvKiBub3JtYWwgZGV2aWNlIElEcyAqLwogCXtVU0JfREVWSUNFKDB4MzgyMywgMHgwMDAxKSwgLmRyaXZlcl9pbmZvID0gREVWVFlQRV9FR0FMQVh9LAogCXtVU0JfREVWSUNFKDB4MzgyMywgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gREVWVFlQRV9FR0FMQVh9LAogCXtVU0JfREVWSUNFKDB4MDEyMywgMHgwMDAxKSwgLmRyaXZlcl9pbmZvID0gREVWVFlQRV9FR0FMQVh9LApAQCAtMjYyLDcgKzI3Niw3IEBACiAJICAgICAgICAgICAgICAgICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwogCWRiZygiJXMgLSB1c2JfY29udHJvbF9tc2cgLSBNVE9VQ0hVU0JfUkVTRVQgLSBieXRlc3xlcnI6ICVkIiwKLQkgICAgX19GVU5DVElPTl9fLCByZXQpOworCSAgICBfX2Z1bmNfXywgcmV0KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAltc2xlZXAoMTUwKTsKQEAgLTI3Myw3ICsyODcsNyBAQAogCQkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCQkgICAgICAxLCAxLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CiAJCWRiZygiJXMgLSB1c2JfY29udHJvbF9tc2cgLSBNVE9VQ0hVU0JfQVNZTkNfUkVQT1JUIC0gYnl0ZXN8ZXJyOiAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHJldCk7CisJCSAgICBfX2Z1bmNfXywgcmV0KTsKIAkJaWYgKHJldCA+PSAwKQogCQkJYnJlYWs7CiAJCWlmIChyZXQgIT0gLUVQSVBFKQpAQCAtNzkzLDE4ICs4MDcsMTggQEAKIAljYXNlIC1FVElNRToKIAkJLyogdGhpcyB1cmIgaXMgdGltaW5nIG91dCAqLwogCQlkYmcoIiVzIC0gdXJiIHRpbWVkIG91dCAtIHdhcyB0aGUgZGV2aWNlIHVucGx1Z2dlZD8iLAotCQkgICAgX19GVU5DVElPTl9fKTsKKwkJICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCWNhc2UgLUVDT05OUkVTRVQ6CiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KIAkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJICAgIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgogCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJICAgIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTgxNCw3ICs4MjgsNyBAQAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKIAkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdDogJWQiLAotCQkgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkgICAgX19mdW5jX18sIHJldHZhbCk7CiB9CiAKIHN0YXRpYyBpbnQgdXNidG91Y2hfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKQEAgLTg1Nyw2ICs4NzEsMTAgQEAKIAlzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gKnR5cGU7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKKwkvKiBzb21lIGRldmljZXMgYXJlIGlnbm9yZWQgKi8KKwlpZiAoaWQtPmRyaXZlcl9pbmZvID09IERFVlRZUEVfSUdOT1JFKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwogCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKIApAQCAtODgzLDcgKzkwMSw3IEBACiAKIAl1c2J0b3VjaC0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVzYnRvdWNoLT5pcnEpIHsKLQkJZGJnKCIlcyAtIHVzYl9hbGxvY191cmIgZmFpbGVkOiB1c2J0b3VjaC0+aXJxIiwgX19GVU5DVElPTl9fKTsKKwkJZGJnKCIlcyAtIHVzYl9hbGxvY191cmIgZmFpbGVkOiB1c2J0b3VjaC0+aXJxIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9mcmVlX2J1ZmZlcnM7CiAJfQogCkBAIC05MzksMTQgKzk1NywxNCBAQAogCWlmICh0eXBlLT5pbml0KSB7CiAJCWVyciA9IHR5cGUtPmluaXQodXNidG91Y2gpOwogCQlpZiAoZXJyKSB7Ci0JCQlkYmcoIiVzIC0gdHlwZS0+aW5pdCgpIGZhaWxlZCwgZXJyOiAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCWRiZygiJXMgLSB0eXBlLT5pbml0KCkgZmFpbGVkLCBlcnI6ICVkIiwgX19mdW5jX18sIGVycik7CiAJCQlnb3RvIG91dF9mcmVlX2J1ZmZlcnM7CiAJCX0KIAl9CiAKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodXNidG91Y2gtPmlucHV0KTsKIAlpZiAoZXJyKSB7Ci0JCWRiZygiJXMgLSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkLCBlcnI6ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlkYmcoIiVzIC0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZCwgZXJyOiAlZCIsIF9fZnVuY19fLCBlcnIpOwogCQlnb3RvIG91dF9mcmVlX2J1ZmZlcnM7CiAJfQogCkBAIC05NjYsMTIgKzk4NCwxMiBAQAogewogCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAotCWRiZygiJXMgLSBjYWxsZWQiLCBfX0ZVTkNUSU9OX18pOworCWRiZygiJXMgLSBjYWxsZWQiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIXVzYnRvdWNoKQogCQlyZXR1cm47CiAKLQlkYmcoIiVzIC0gdXNidG91Y2ggaXMgaW5pdGlhbGl6ZWQsIGNsZWFuaW5nIHVwIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzIC0gdXNidG91Y2ggaXMgaW5pdGlhbGl6ZWQsIGNsZWFuaW5nIHVwIiwgX19mdW5jX18pOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJdXNiX2tpbGxfdXJiKHVzYnRvdWNoLT5pcnEpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHVzYnRvdWNoLT5pbnB1dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMi5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTIuYwppbmRleCAwYjZlNGNmLi40YzVkODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEyLmMKQEAgLTE2OCw2ICsxNjgsMTggQEAKIAkJCTY0MDAwIC8gcnB1KTsKIAl9CiAKKwkvKiBXTTk3MTIgZml2ZSB3aXJlICovCisJaWYgKGZpdmVfd2lyZSkgeworCQlkaWcyIHw9IFdNOTcxMl80NVc7CisJCWRldl9kYmcod20tPmRldiwgInNldHRpbmcgNS13aXJlIHRvdWNoc2NyZWVuIG1vZGUuIik7CisKKwkJaWYgKHBpbCkgeworCQkJZGV2X3dhcm4od20tPmRldiwgInByZXNzdXJlIG1lYXN1cmVtZW50IGlzIG5vdCAiCisJCQkJICJzdXBwb3J0ZWQgaW4gNS13aXJlIG1vZGVcbiIpOworCQkJcGlsID0gMDsKKwkJfQorCX0KKwogCS8qIHRvdWNocGFuZWwgcHJlc3N1cmUgY3VycmVudCovCiAJaWYgKHBpbCA9PSAyKSB7CiAJCWRpZzIgfD0gV005NzEyX1BJTDsKQEAgLTE3OSwxMiArMTkxLDYgQEAKIAlpZiAoIXBpbCkKIAkJcHJlc3N1cmUgPSAwOwogCi0JLyogV005NzEyIGZpdmUgd2lyZSAqLwotCWlmIChmaXZlX3dpcmUpIHsKLQkJZGlnMiB8PSBXTTk3MTJfNDVXOwotCQlkZXZfZGJnKHdtLT5kZXYsICJzZXR0aW5nIDUtd2lyZSB0b3VjaHNjcmVlbiBtb2RlLiIpOwotCX0KLQogCS8qIHBvbGxpbmcgbW9kZSBzYW1wbGUgc2V0dGxpbmcgZGVsYXkgKi8KIAlpZiAoZGVsYXkgPCAwIHx8IGRlbGF5ID4gMTUpIHsKIAkJZGV2X2RiZyh3bS0+ZGV2LCAic3VwcGxpZWQgZGVsYXkgb3V0IG9mIHJhbmdlLiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCmluZGV4IDIwOTUxNTMuLjg3MWIwY2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC00NjYsNyArNDY2LDcgQEAKIAlsZCA9IHR0eV9sZGlzY19yZWYobXAtPnR0eSk7CiAJaWYgKGxkID09IE5VTEwpCiAJCXJldHVybiAtMTsKLQlpZiAobGQtPnJlY2VpdmVfYnVmID09IE5VTEwpIHsKKwlpZiAobGQtPm9wcy0+cmVjZWl2ZV9idWYgPT0gTlVMTCkgewogI2lmIGRlZmluZWQoX0RFQlVHX0RBVEFGTE9XKSB8fCBkZWZpbmVkKF9ERUJVR19UVFlGVU5DUykKIAkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IGxkaXNjIGhhcyBubyByZWNlaXZlX2J1ZiBmdW5jdGlvblxuIik7CiAjZW5kaWYKQEAgLTUwMSw3ICs1MDEsNyBAQAogCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBEQVRBX0IzX1JFU1AgJXUgbGVuPSVkID0+IGxkaXNjXG4iLAogCQkJCWRhdGFoYW5kbGUsIHNrYi0+bGVuKTsKICNlbmRpZgotCWxkLT5yZWNlaXZlX2J1ZihtcC0+dHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKKwlsZC0+b3BzLT5yZWNlaXZlX2J1ZihtcC0+dHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAl0dHlfbGRpc2NfZGVyZWYobGQpOwogCXJldHVybiAwOwpAQCAtMTMwMiwxMSArMTMwMiwxMiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGNhcGluY190dHlfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgY2FwaW5jX3R0eV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKQogewogI2lmZGVmIF9ERUJVR19UVFlGVU5DUwogCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X2JyZWFrX2N0bCglZClcbiIsIHN0YXRlKTsKICNlbmRpZgorCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjYXBpbmNfdHR5X2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtMTU1Miw3ICsxNTUzLDggQEAKIAkJcmV0dXJuIFBUUl9FUlIoY2FwaV9jbGFzcyk7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZShjYXBpX2NsYXNzLCBOVUxMLCBNS0RFVihjYXBpX21ham9yLCAwKSwgImNhcGkiKTsKKwlkZXZpY2VfY3JlYXRlX2RydmRhdGEoY2FwaV9jbGFzcywgTlVMTCwgTUtERVYoY2FwaV9tYWpvciwgMCksIE5VTEwsCisJCQkgICAgICAiY2FwaSIpOwogCiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCiAJaWYgKGNhcGluY190dHlfaW5pdCgpIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKaW5kZXggNDVkMWVlOS4uNWU4OWZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCkBAIC03NjYsNyArNzY2LDcgQEAKIAljc19wdXQoY3MpOwogfQogCi1zdGF0aWMgc3RydWN0IHR0eV9sZGlzYyBnaWdhc2V0X2xkaXNjID0geworc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIGdpZ2FzZXRfbGRpc2MgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5tYWdpYwkJPSBUVFlfTERJU0NfTUFHSUMsCiAJLm5hbWUJCT0gInNlcl9naWdhc2V0IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYwppbmRleCBlZjFhMzAwLi5iYjkwNGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCkBAIC0yODcsNyArMjg3LDcgQEAKIAkJICAgQkVXQVJFISBUaGlzIGNodW5rIG9mIGNvZGUgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGhhcmR3YXJlCiAJCSAgIGludGVycnVwdCBoYW5kbGVyLiBJIGhvcGUgaXQgaXMgdHJ1ZS4gLS1BTksKIAkJICovCi0JCXFkaXNjX3Jlc2V0KGxwLT5uZXRkZXYtPmRldi0+cWRpc2MpOworCQlxZGlzY19yZXNldF9hbGxfdHgobHAtPm5ldGRldi0+ZGV2KTsKIAl9CiAJbHAtPmRpYWxzdGF0ZSA9IDA7CiAJZGV2LT5yeF9uZXRkZXZbaXNkbl9kYzJtaW5vcihscC0+aXNkbl9kZXZpY2UsIGxwLT5pc2RuX2NoYW5uZWwpXSA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hZGIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCmluZGV4IGU1ZDQ0NjguLmNhZTUyNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCkBAIC04NjIsNyArODYyLDggQEAKIAlhZGJfZGV2X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiYWRiIik7CiAJaWYgKElTX0VSUihhZGJfZGV2X2NsYXNzKSkKIAkJcmV0dXJuOwotCWRldmljZV9jcmVhdGUoYWRiX2Rldl9jbGFzcywgTlVMTCwgTUtERVYoQURCX01BSk9SLCAwKSwgImFkYiIpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShhZGJfZGV2X2NsYXNzLCBOVUxMLCBNS0RFVihBREJfTUFKT1IsIDApLCBOVUxMLAorCQkJICAgICAgImFkYiIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhZGJfcGZkZXYpOwogCXBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYWRiX3BmZHJ2LCBhZGJfZHVtbXlfcHJvYmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMgYi9kcml2ZXJzL21hY2ludG9zaC9hZGJoaWQuYwppbmRleCA1OWVhNTIwLi41Mzk2YzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9hZGJoaWQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9hZGJoaWQuYwpAQCAtMjE5LDExICsyMTksMTMgQEAKIAlpbnQgZmxhZ3M7CiB9OwogCi0jZGVmaW5lIEZMQUdfRk5fS0VZX1BSRVNTRUQJMHgwMDAwMDAwMQotI2RlZmluZSBGTEFHX1BPV0VSX0ZST01fRk4JMHgwMDAwMDAwMgotI2RlZmluZSBGTEFHX0VNVV9GV0RFTF9ET1dOCTB4MDAwMDAwMDQKLSNkZWZpbmUgRkxBR19DQVBTTE9DS19UUkFOU0xBVEUJMHgwMDAwMDAwOAotI2RlZmluZSBGTEFHX0NBUFNMT0NLX0RPV04JMHgwMDAwMDAxMAorI2RlZmluZSBGTEFHX0ZOX0tFWV9QUkVTU0VECQkweDAwMDAwMDAxCisjZGVmaW5lIEZMQUdfUE9XRVJfRlJPTV9GTgkJMHgwMDAwMDAwMgorI2RlZmluZSBGTEFHX0VNVV9GV0RFTF9ET1dOCQkweDAwMDAwMDA0CisjZGVmaW5lIEZMQUdfQ0FQU0xPQ0tfVFJBTlNMQVRFCQkweDAwMDAwMDA4CisjZGVmaW5lIEZMQUdfQ0FQU0xPQ0tfRE9XTgkJMHgwMDAwMDAxMAorI2RlZmluZSBGTEFHX0NBUFNMT0NLX0lHTk9SRV9ORVhUCTB4MDAwMDAwMjAKKyNkZWZpbmUgRkxBR19QT1dFUl9LRVlfUFJFU1NFRAkJMHgwMDAwMDA0MAogCiBzdGF0aWMgc3RydWN0IGFkYmhpZCAqYWRiaGlkWzE2XTsKIApAQCAtMjkxLDExICsyOTMsMjAgQEAKIAkJaWYgKGtleWNvZGUgPT0gQURCX0tFWV9DQVBTTE9DSyAmJiAhdXBfZmxhZykgewogCQkJLyogS2V5IHByZXNzZWQsIHR1cm5pbmcgb24gdGhlIENhcHNMb2NrIExFRC4KIAkJCSAqIFRoZSBuZXh0IDB4ZmYgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHJlbGVhc2UuICovCi0JCQlhaGlkLT5mbGFncyB8PSBGTEFHX0NBUFNMT0NLX1RSQU5TTEFURQorCQkJaWYgKGFoaWQtPmZsYWdzICYgRkxBR19DQVBTTE9DS19JR05PUkVfTkVYVCkgeworCQkJCS8qIFRocm93IGF3YXkgdGhpcyBrZXkgZXZlbnQgaWYgaXQgaGFwcGVucworCQkJCSAqIGp1c3QgYWZ0ZXIgcmVzdW1lLiAqLworCQkJCWFoaWQtPmZsYWdzICY9IH5GTEFHX0NBUFNMT0NLX0lHTk9SRV9ORVhUOworCQkJCXJldHVybjsKKwkJCX0gZWxzZSB7CisJCQkJYWhpZC0+ZmxhZ3MgfD0gRkxBR19DQVBTTE9DS19UUkFOU0xBVEUKIAkJCQkJfCBGTEFHX0NBUFNMT0NLX0RPV047Ci0JCX0gZWxzZSBpZiAoc2NhbmNvZGUgPT0gMHhmZikgeworCQkJfQorCQl9IGVsc2UgaWYgKHNjYW5jb2RlID09IDB4ZmYgJiYKKwkJCSAgICEoYWhpZC0+ZmxhZ3MgJiBGTEFHX1BPV0VSX0tFWV9QUkVTU0VEKSkgewogCQkJLyogU2NhbmNvZGUgMHhmZiB1c3VhbGx5IHNpZ25pZmllcyB0aGF0IHRoZSBjYXBzbG9jawotCQkJICoga2V5IHdhcyBlaXRoZXIgcHJlc3NlZCBvciByZWxlYXNlZC4gKi8KKwkJCSAqIGtleSB3YXMgZWl0aGVyIHByZXNzZWQgb3IgcmVsZWFzZWQsIG9yIHRoYXQgdGhlCisJCQkgKiBwb3dlciBidXR0b24gd2FzIHJlbGVhc2VkLiAqLwogCQkJaWYgKGFoaWQtPmZsYWdzICYgRkxBR19DQVBTTE9DS19UUkFOU0xBVEUpIHsKIAkJCQlrZXljb2RlID0gQURCX0tFWV9DQVBTTE9DSzsKIAkJCQlpZiAoYWhpZC0+ZmxhZ3MgJiBGTEFHX0NBUFNMT0NLX0RPV04pIHsKQEAgLTMwOSw3ICszMjAsNyBAQAogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiU3B1cmlvdXMgY2FwcyBsb2NrIGV2ZW50ICIKLQkJCQkJCSIoc2NhbmNvZGUgMHhmZikuIik7CisJCQkJCQkgIihzY2FuY29kZSAweGZmKS5cbiIpOwogCQkJfQogCQl9CiAJfQpAQCAtMzM2LDYgKzM0NywxMiBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgQURCX0tFWV9QT1dFUjoKKwkJLyogS2VlcCB0cmFjayBvZiB0aGUgcG93ZXIga2V5IHN0YXRlICovCisJCWlmICh1cF9mbGFnKQorCQkJYWhpZC0+ZmxhZ3MgJj0gfkZMQUdfUE9XRVJfS0VZX1BSRVNTRUQ7CisJCWVsc2UKKwkJCWFoaWQtPmZsYWdzIHw9IEZMQUdfUE9XRVJfS0VZX1BSRVNTRUQ7CisKIAkJLyogRm4gKyBDb21tYW5kIHdpbGwgcHJvZHVjZSBhIGJvZ3VzICJwb3dlciIga2V5Y29kZSAqLwogCQlpZiAoYWhpZC0+ZmxhZ3MgJiBGTEFHX0ZOX0tFWV9QUkVTU0VEKSB7CiAJCQlrZXljb2RlID0gQURCX0tFWV9DTUQ7CkBAIC02ODEsNiArNjk4LDIxIEBACiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgdm9pZAorYWRiaGlkX2tiZF9jYXBzbG9ja19yZW1lbWJlcih2b2lkKQoreworCXN0cnVjdCBhZGJoaWQgKmFoaWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgMTY7IGkrKykgeworCQlhaGlkID0gYWRiaGlkW2ldOworCisJCWlmIChhaGlkICYmIGFoaWQtPmlkID09IEFEQl9LRVlCT0FSRCkKKwkJCWlmIChhaGlkLT5mbGFncyAmIEZMQUdfQ0FQU0xPQ0tfVFJBTlNMQVRFKQorCQkJCWFoaWQtPmZsYWdzIHw9IEZMQUdfQ0FQU0xPQ0tfSUdOT1JFX05FWFQ7CisJfQorfQorCiBzdGF0aWMgaW50CiBhZGJfbWVzc2FnZV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp4KQogewpAQCAtNjk3LDggKzcyOSwxNyBAQAogCQl9CiAKIAkJLyogU3RvcCBwZW5kaW5nIGxlZCByZXF1ZXN0cyAqLwotCQl3aGlsZShsZWRzX3JlcV9wZW5kaW5nKQorCQl3aGlsZSAobGVkc19yZXFfcGVuZGluZykKIAkJCWFkYl9wb2xsKCk7CisKKwkJLyogQWZ0ZXIgcmVzdW1lLCBhbmQgaWYgdGhlIGNhcHNsb2NrIExFRCBpcyBvbiwgdGhlIFBNVSB3aWxsCisJCSAqIHNlbmQgYSAiY2Fwc2xvY2sgZG93biIga2V5IGV2ZW50LiBUaGlzIGNvbmZ1c2VzIHRoZQorCQkgKiByZXN0b3JlX2NhcHNsb2NrX2V2ZW50cyBsb2dpYy4gUmVtZW1iZXIgaWYgdGhlIGNhcHNsb2NrCisJCSAqIExFRCB3YXMgb24gYmVmb3JlIHN1c3BlbmQgc28gdGhlIHVud2FudGVkIGtleSBldmVudCBjYW4KKwkJICogYmUgaWdub3JlZCBhZnRlciByZXN1bWUuICovCisJCWlmIChyZXN0b3JlX2NhcHNsb2NrX2V2ZW50cykKKwkJCWFkYmhpZF9rYmRfY2Fwc2xvY2tfcmVtZW1iZXIoKTsKKwogCQlicmVhazsKIAogCWNhc2UgQURCX01TR19QT1NUX1JFU0VUOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tY2EvbWNhLWJ1cy5jIGIvZHJpdmVycy9tY2EvbWNhLWJ1cy5jCmluZGV4IDY3YjhlOTQuLmVmMmRiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWNhL21jYS1idXMuYworKysgYi9kcml2ZXJzL21jYS9tY2EtYnVzLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAogc3RydWN0IG1jYV9kZXZpY2VfaW5mbyB7CiAJc2hvcnQgcG9zX2lkOwkJLyogdGhlIDIgYnl0ZSBwb3MgaWQgZm9yIHRoaXMgY2FyZCAqLwotCWNoYXIgbmFtZVtERVZJQ0VfTkFNRV9TSVpFXTsKKwljaGFyIG5hbWVbNTBdOwogfTsKIAogc3RhdGljIGludCBtY2FfYnVzX21hdGNoIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCBiMjY5MjdjLi42MjFhMjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCQkgICAgfHwgdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJY29udGludWU7CiAKLQkJdGFyZ2V0ID0gKHJkZXYtPnNiX29mZnNldCA8PCAxKSArIG9mZnNldCArIGluZGV4ICogKFBBR0VfU0laRS81MTIpOworCQl0YXJnZXQgPSByZGV2LT5zYl9zdGFydCArIG9mZnNldCArIGluZGV4ICogKFBBR0VfU0laRS81MTIpOwogCiAJCWlmIChzeW5jX3BhZ2VfaW8ocmRldi0+YmRldiwgdGFyZ2V0LCBQQUdFX1NJWkUsIHBhZ2UsIFJFQUQpKSB7CiAJCQlwYWdlLT5pbmRleCA9IGluZGV4OwpAQCAtMjQxLDEwICsyNDEsMTAgQEAKIHN0YXRpYyBpbnQgd3JpdGVfc2JfcGFnZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgd2FpdCkKIHsKIAltZGtfcmRldl90ICpyZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAltZGRldl90ICptZGRldiA9IGJpdG1hcC0+bWRkZXY7CiAKLQlyZGV2X2Zvcl9lYWNoKHJkZXYsIHRtcCwgbWRkZXYpCisJcmN1X3JlYWRfbG9jaygpOworCXJkZXZfZm9yX2VhY2hfcmN1KHJkZXYsIG1kZGV2KQogCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKQogCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJaW50IHNpemUgPSBQQUdFX1NJWkU7CkBAIC0yNjAsMzIgKzI2MCwzNyBAQAogCQkJCSAgICArIChsb25nKShwYWdlLT5pbmRleCAqIChQQUdFX1NJWkUvNTEyKSkKIAkJCQkgICAgKyBzaXplLzUxMiA+IDApCiAJCQkJCS8qIGJpdG1hcCBydW5zIGluIHRvIG1ldGFkYXRhICovCi0JCQkJCXJldHVybiAtRUlOVkFMOworCQkJCQlnb3RvIGJhZF9hbGlnbm1lbnQ7CiAJCQkJaWYgKHJkZXYtPmRhdGFfb2Zmc2V0ICsgbWRkZXYtPnNpemUqMgotCQkJCSAgICA+IHJkZXYtPnNiX29mZnNldCoyICsgYml0bWFwLT5vZmZzZXQpCisJCQkJICAgID4gcmRldi0+c2Jfc3RhcnQgKyBiaXRtYXAtPm9mZnNldCkKIAkJCQkJLyogZGF0YSBydW5zIGluIHRvIGJpdG1hcCAqLwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0gZWxzZSBpZiAocmRldi0+c2Jfb2Zmc2V0KjIgPCByZGV2LT5kYXRhX29mZnNldCkgeworCQkJCQlnb3RvIGJhZF9hbGlnbm1lbnQ7CisJCQl9IGVsc2UgaWYgKHJkZXYtPnNiX3N0YXJ0IDwgcmRldi0+ZGF0YV9vZmZzZXQpIHsKIAkJCQkvKiBNRVRBREFUQSBCSVRNQVAgREFUQSAqLwotCQkJCWlmIChyZGV2LT5zYl9vZmZzZXQqMgorCQkJCWlmIChyZGV2LT5zYl9zdGFydAogCQkJCSAgICArIGJpdG1hcC0+b2Zmc2V0CiAJCQkJICAgICsgcGFnZS0+aW5kZXgqKFBBR0VfU0laRS81MTIpICsgc2l6ZS81MTIKIAkJCQkgICAgPiByZGV2LT5kYXRhX29mZnNldCkKIAkJCQkJLyogYml0bWFwIHJ1bnMgaW4gdG8gZGF0YSAqLwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkJZ290byBiYWRfYWxpZ25tZW50OwogCQkJfSBlbHNlIHsKIAkJCQkvKiBEQVRBIE1FVEFEQVRBIEJJVE1BUCAtIG5vIHByb2JsZW1zICovCiAJCQl9CiAJCQltZF9zdXBlcl93cml0ZShtZGRldiwgcmRldiwKLQkJCQkgICAgICAgKHJkZXYtPnNiX29mZnNldDw8MSkgKyBiaXRtYXAtPm9mZnNldAorCQkJCSAgICAgICByZGV2LT5zYl9zdGFydCArIGJpdG1hcC0+b2Zmc2V0CiAJCQkJICAgICAgICsgcGFnZS0+aW5kZXggKiAoUEFHRV9TSVpFLzUxMiksCiAJCQkJICAgICAgIHNpemUsCiAJCQkJICAgICAgIHBhZ2UpOwogCQl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAod2FpdCkKIAkJbWRfc3VwZXJfd2FpdChtZGRldik7CiAJcmV0dXJuIDA7CisKKyBiYWRfYWxpZ25tZW50OgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdm9pZCBiaXRtYXBfZmlsZV9raWNrKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCk7CkBAIC00NTQsOCArNDU5LDExIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CiAJc2IgPSAoYml0bWFwX3N1cGVyX3QgKilrbWFwX2F0b21pYyhiaXRtYXAtPnNiX3BhZ2UsIEtNX1VTRVIwKTsKIAlzYi0+ZXZlbnRzID0gY3B1X3RvX2xlNjQoYml0bWFwLT5tZGRldi0+ZXZlbnRzKTsKLQlpZiAoIWJpdG1hcC0+bWRkZXYtPmRlZ3JhZGVkKQotCQlzYi0+ZXZlbnRzX2NsZWFyZWQgPSBjcHVfdG9fbGU2NChiaXRtYXAtPm1kZGV2LT5ldmVudHMpOworCWlmIChiaXRtYXAtPm1kZGV2LT5ldmVudHMgPCBiaXRtYXAtPmV2ZW50c19jbGVhcmVkKSB7CisJCS8qIHJvY2tpbmcgYmFjayB0byByZWFkLW9ubHkgKi8KKwkJYml0bWFwLT5ldmVudHNfY2xlYXJlZCA9IGJpdG1hcC0+bWRkZXYtPmV2ZW50czsKKwkJc2ItPmV2ZW50c19jbGVhcmVkID0gY3B1X3RvX2xlNjQoYml0bWFwLT5ldmVudHNfY2xlYXJlZCk7CisJfQogCWt1bm1hcF9hdG9taWMoc2IsIEtNX1VTRVIwKTsKIAl3cml0ZV9wYWdlKGJpdG1hcCwgYml0bWFwLT5zYl9wYWdlLCAxKTsKIH0KQEAgLTEwODUsOSArMTA5MywxOSBAQAogCQkJfSBlbHNlCiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CiAJCQlsYXN0cGFnZSA9IHBhZ2U7Ci0vKgotCQkJcHJpbnRrKCJiaXRtYXAgY2xlYW4gYXQgcGFnZSAlbHVcbiIsIGopOwotKi8KKworCQkJLyogV2UgYXJlIHBvc3NpYmx5IGdvaW5nIHRvIGNsZWFyIHNvbWUgYml0cywgc28gbWFrZQorCQkJICogc3VyZSB0aGF0IGV2ZW50c19jbGVhcmVkIGlzIHVwLXRvLWRhdGUuCisJCQkgKi8KKwkJCWlmIChiaXRtYXAtPm5lZWRfc3luYykgeworCQkJCWJpdG1hcF9zdXBlcl90ICpzYjsKKwkJCQliaXRtYXAtPm5lZWRfc3luYyA9IDA7CisJCQkJc2IgPSBrbWFwX2F0b21pYyhiaXRtYXAtPnNiX3BhZ2UsIEtNX1VTRVIwKTsKKwkJCQlzYi0+ZXZlbnRzX2NsZWFyZWQgPQorCQkJCQljcHVfdG9fbGU2NChiaXRtYXAtPmV2ZW50c19jbGVhcmVkKTsKKwkJCQlrdW5tYXBfYXRvbWljKHNiLCBLTV9VU0VSMCk7CisJCQkJd3JpdGVfcGFnZShiaXRtYXAsIGJpdG1hcC0+c2JfcGFnZSwgMSk7CisJCQl9CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CiAJCQljbGVhcl9wYWdlX2F0dHIoYml0bWFwLCBwYWdlLCBCSVRNQVBfUEFHRV9DTEVBTik7CiAJCX0KQEAgLTEyNTcsNiArMTI3NSwxMiBAQAogCQkJcmV0dXJuOwogCQl9CiAKKwkJaWYgKHN1Y2Nlc3MgJiYKKwkJICAgIGJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPCBiaXRtYXAtPm1kZGV2LT5ldmVudHMpIHsKKwkJCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBiaXRtYXAtPm1kZGV2LT5ldmVudHM7CisJCQliaXRtYXAtPm5lZWRfc3luYyA9IDE7CisJCX0KKwogCQlpZiAoIXN1Y2Nlc3MgJiYgISAoKmJtYyAmIE5FRURFRF9NQVNLKSkKIAkJCSpibWMgfD0gTkVFREVEX01BU0s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwppbmRleCBhYjZhNjFkLi4xMzk1NjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMKKysrIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCkBAIC0xMjE2LDkgKzEyMTYsMjQgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBjcnlwdF9tZXJnZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJ2ZWNfbWVyZ2VfZGF0YSAqYnZtLAorCQkgICAgICAgc3RydWN0IGJpb192ZWMgKmJpb3ZlYywgaW50IG1heF9zaXplKQoreworCXN0cnVjdCBjcnlwdF9jb25maWcgKmNjID0gdGktPnByaXZhdGU7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShjYy0+ZGV2LT5iZGV2KTsKKworCWlmICghcS0+bWVyZ2VfYnZlY19mbikKKwkJcmV0dXJuIG1heF9zaXplOworCisJYnZtLT5iaV9iZGV2ID0gY2MtPmRldi0+YmRldjsKKwlidm0tPmJpX3NlY3RvciA9IGNjLT5zdGFydCArIGJ2bS0+Ymlfc2VjdG9yIC0gdGktPmJlZ2luOworCisJcmV0dXJuIG1pbihtYXhfc2l6ZSwgcS0+bWVyZ2VfYnZlY19mbihxLCBidm0sIGJpb3ZlYykpOworfQorCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIGNyeXB0X3RhcmdldCA9IHsKIAkubmFtZSAgID0gImNyeXB0IiwKLQkudmVyc2lvbj0gezEsIDUsIDB9LAorCS52ZXJzaW9uPSB7MSwgNiwgMH0sCiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogCS5jdHIgICAgPSBjcnlwdF9jdHIsCiAJLmR0ciAgICA9IGNyeXB0X2R0ciwKQEAgLTEyMjgsNiArMTI0Myw3IEBACiAJLnByZXJlc3VtZSA9IGNyeXB0X3ByZXJlc3VtZSwKIAkucmVzdW1lID0gY3J5cHRfcmVzdW1lLAogCS5tZXNzYWdlID0gY3J5cHRfbWVzc2FnZSwKKwkubWVyZ2UgID0gY3J5cHRfbWVyZ2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkbV9jcnlwdF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxpbmVhci5jIGIvZHJpdmVycy9tZC9kbS1saW5lYXIuYwppbmRleCAxNzc1M2Q4Li42NDQ5YmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxpbmVhci5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbGluZWFyLmMKQEAgLTY5LDEzICs2OSwyNSBAQAogCWtmcmVlKGxjKTsKIH0KIAorc3RhdGljIHNlY3Rvcl90IGxpbmVhcl9tYXBfc2VjdG9yKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzZWN0b3JfdCBiaV9zZWN0b3IpCit7CisJc3RydWN0IGxpbmVhcl9jICpsYyA9IHRpLT5wcml2YXRlOworCisJcmV0dXJuIGxjLT5zdGFydCArIChiaV9zZWN0b3IgLSB0aS0+YmVnaW4pOworfQorCitzdGF0aWMgdm9pZCBsaW5lYXJfbWFwX2JpbyhzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvKQoreworCXN0cnVjdCBsaW5lYXJfYyAqbGMgPSB0aS0+cHJpdmF0ZTsKKworCWJpby0+YmlfYmRldiA9IGxjLT5kZXYtPmJkZXY7CisJYmlvLT5iaV9zZWN0b3IgPSBsaW5lYXJfbWFwX3NlY3Rvcih0aSwgYmlvLT5iaV9zZWN0b3IpOworfQorCiBzdGF0aWMgaW50IGxpbmVhcl9tYXAoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBiaW8gKmJpbywKIAkJICAgICAgdW5pb24gbWFwX2luZm8gKm1hcF9jb250ZXh0KQogewotCXN0cnVjdCBsaW5lYXJfYyAqbGMgPSAoc3RydWN0IGxpbmVhcl9jICopIHRpLT5wcml2YXRlOwotCi0JYmlvLT5iaV9iZGV2ID0gbGMtPmRldi0+YmRldjsKLQliaW8tPmJpX3NlY3RvciA9IGxjLT5zdGFydCArIChiaW8tPmJpX3NlY3RvciAtIHRpLT5iZWdpbik7CisJbGluZWFyX21hcF9iaW8odGksIGJpbyk7CiAKIAlyZXR1cm4gRE1fTUFQSU9fUkVNQVBQRUQ7CiB9CkBAIC0xMTQsMTUgKzEyNiwzMSBAQAogCXJldHVybiBibGtkZXZfZHJpdmVyX2lvY3RsKGJkZXYtPmJkX2lub2RlLCAmZmFrZV9maWxlLCBiZGV2LT5iZF9kaXNrLCBjbWQsIGFyZyk7CiB9CiAKK3N0YXRpYyBpbnQgbGluZWFyX21lcmdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYnZlY19tZXJnZV9kYXRhICpidm0sCisJCQlzdHJ1Y3QgYmlvX3ZlYyAqYmlvdmVjLCBpbnQgbWF4X3NpemUpCit7CisJc3RydWN0IGxpbmVhcl9jICpsYyA9IHRpLT5wcml2YXRlOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUobGMtPmRldi0+YmRldik7CisKKwlpZiAoIXEtPm1lcmdlX2J2ZWNfZm4pCisJCXJldHVybiBtYXhfc2l6ZTsKKworCWJ2bS0+YmlfYmRldiA9IGxjLT5kZXYtPmJkZXY7CisJYnZtLT5iaV9zZWN0b3IgPSBsaW5lYXJfbWFwX3NlY3Rvcih0aSwgYnZtLT5iaV9zZWN0b3IpOworCisJcmV0dXJuIG1pbihtYXhfc2l6ZSwgcS0+bWVyZ2VfYnZlY19mbihxLCBidm0sIGJpb3ZlYykpOworfQorCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIGxpbmVhcl90YXJnZXQgPSB7CiAJLm5hbWUgICA9ICJsaW5lYXIiLAotCS52ZXJzaW9uPSB7MSwgMCwgMn0sCisJLnZlcnNpb249IHsxLCAwLCAzfSwKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmN0ciAgICA9IGxpbmVhcl9jdHIsCiAJLmR0ciAgICA9IGxpbmVhcl9kdHIsCiAJLm1hcCAgICA9IGxpbmVhcl9tYXAsCiAJLnN0YXR1cyA9IGxpbmVhcl9zdGF0dXMsCiAJLmlvY3RsICA9IGxpbmVhcl9pb2N0bCwKKwkubWVyZ2UgID0gbGluZWFyX21lcmdlLAogfTsKIAogaW50IF9faW5pdCBkbV9saW5lYXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2cuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKaW5kZXggNjdhNmYzMS4uNWI0ODQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2cuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy5jCkBAIC04MzEsNyArODMxLDcgQEAKIAkuc3RhdHVzID0gZGlza19zdGF0dXMsCiB9OwogCi1pbnQgX19pbml0IGRtX2RpcnR5X2xvZ19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBkbV9kaXJ0eV9sb2dfaW5pdCh2b2lkKQogewogCWludCByOwogCkBAIC04NDgsNyArODQ4LDcgQEAKIAlyZXR1cm4gcjsKIH0KIAotdm9pZCBfX2V4aXQgZG1fZGlydHlfbG9nX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBkbV9kaXJ0eV9sb2dfZXhpdCh2b2lkKQogewogCWRtX2RpcnR5X2xvZ190eXBlX3VucmVnaXN0ZXIoJl9kaXNrX3R5cGUpOwogCWRtX2RpcnR5X2xvZ190eXBlX3VucmVnaXN0ZXIoJl9jb3JlX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCmluZGV4IDlmNzMwMmQuLmZlYTk2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYworKysgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKQEAgLTUyNSw4ICs1MjUsMTAgQEAKIAl9CiAKIAlyID0gcmVhZF9wYXJhbShfcGFyYW1zLCBzaGlmdChhcyksICZwc19hcmdjLCAmdGktPmVycm9yKTsKLQlpZiAocikKKwlpZiAocikgeworCQlkbV9wdXRfcGF0aF9zZWxlY3Rvcihwc3QpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyID0gcHN0LT5jcmVhdGUoJnBnLT5wcywgcHNfYXJnYywgYXMtPmFyZ3YpOwogCWlmIChyKSB7CkBAIC02MjMsOCArNjI1LDEwIEBACiAJCXN0cnVjdCBwZ3BhdGggKnBncGF0aDsKIAkJc3RydWN0IGFyZ19zZXQgcGF0aF9hcmdzOwogCi0JCWlmIChhcy0+YXJnYyA8IG5yX3BhcmFtcykKKwkJaWYgKGFzLT5hcmdjIDwgbnJfcGFyYW1zKSB7CisJCQl0aS0+ZXJyb3IgPSAibm90IGVub3VnaCBwYXRoIHBhcmFtZXRlcnMiOwogCQkJZ290byBiYWQ7CisJCX0KIAogCQlwYXRoX2FyZ3MuYXJnYyA9IG5yX3BhcmFtczsKIAkJcGF0aF9hcmdzLmFyZ3YgPSBhcy0+YXJndjsKQEAgLTg2Nyw3ICs4NzEsNyBAQAogCWlmIChwZ3BhdGgtPnBhdGguaXNfYWN0aXZlKQogCQlnb3RvIG91dDsKIAotCWlmICghcGdwYXRoLT5wZy0+cHMudHlwZSkgeworCWlmICghcGdwYXRoLT5wZy0+cHMudHlwZS0+cmVpbnN0YXRlX3BhdGgpIHsKIAkJRE1XQVJOKCJSZWluc3RhdGUgcGF0aCBub3Qgc3VwcG9ydGVkIGJ5IHBhdGggc2VsZWN0b3IgJXMiLAogCQkgICAgICAgcGdwYXRoLT5wZy0+cHMudHlwZS0+bmFtZSk7CiAJCXIgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmMgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwppbmRleCAxYmE4YTQ3Li42ZTU1MjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwpAQCAtNDAsNiArNDAsMTEgQEAKICAqLwogI2RlZmluZSBTTkFQU0hPVF9QQUdFUyAoKCgxVUwgPDwgMjApID4+IFBBR0VfU0hJRlQpID8gOiAxKQogCisvKgorICogVGhlIHNpemUgb2YgdGhlIG1lbXBvb2wgdXNlZCB0byB0cmFjayBjaHVua3MgaW4gdXNlLgorICovCisjZGVmaW5lIE1JTl9JT1MgMjU2CisKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa3NuYXBkOwogc3RhdGljIHZvaWQgZmx1c2hfcXVldWVkX2Jpb3Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIApAQCAtOTEsNyArOTYsNjMgQEAKICAqLwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleGNlcHRpb25fY2FjaGU7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlbmRpbmdfY2FjaGU7Ci1zdGF0aWMgbWVtcG9vbF90ICpwZW5kaW5nX3Bvb2w7CisKK3N0cnVjdCBkbV9zbmFwX3RyYWNrZWRfY2h1bmsgeworCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CisJY2h1bmtfdCBjaHVuazsKK307CisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdHJhY2tlZF9jaHVua19jYWNoZTsKKworc3RhdGljIHN0cnVjdCBkbV9zbmFwX3RyYWNrZWRfY2h1bmsgKnRyYWNrX2NodW5rKHN0cnVjdCBkbV9zbmFwc2hvdCAqcywKKwkJCQkJCSBjaHVua190IGNodW5rKQoreworCXN0cnVjdCBkbV9zbmFwX3RyYWNrZWRfY2h1bmsgKmMgPSBtZW1wb29sX2FsbG9jKHMtPnRyYWNrZWRfY2h1bmtfcG9vbCwKKwkJCQkJCQlHRlBfTk9JTyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWMtPmNodW5rID0gY2h1bms7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+dHJhY2tlZF9jaHVua19sb2NrLCBmbGFncyk7CisJaGxpc3RfYWRkX2hlYWQoJmMtPm5vZGUsCisJCSAgICAgICAmcy0+dHJhY2tlZF9jaHVua19oYXNoW0RNX1RSQUNLRURfQ0hVTktfSEFTSChjaHVuayldKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT50cmFja2VkX2NodW5rX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBjOworfQorCitzdGF0aWMgdm9pZCBzdG9wX3RyYWNraW5nX2NodW5rKHN0cnVjdCBkbV9zbmFwc2hvdCAqcywKKwkJCQlzdHJ1Y3QgZG1fc25hcF90cmFja2VkX2NodW5rICpjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+dHJhY2tlZF9jaHVua19sb2NrLCBmbGFncyk7CisJaGxpc3RfZGVsKCZjLT5ub2RlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT50cmFja2VkX2NodW5rX2xvY2ssIGZsYWdzKTsKKworCW1lbXBvb2xfZnJlZShjLCBzLT50cmFja2VkX2NodW5rX3Bvb2wpOworfQorCitzdGF0aWMgaW50IF9fY2h1bmtfaXNfdHJhY2tlZChzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIGNodW5rX3QgY2h1bmspCit7CisJc3RydWN0IGRtX3NuYXBfdHJhY2tlZF9jaHVuayAqYzsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaG47CisJaW50IGZvdW5kID0gMDsKKworCXNwaW5fbG9ja19pcnEoJnMtPnRyYWNrZWRfY2h1bmtfbG9jayk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShjLCBobiwKKwkgICAgJnMtPnRyYWNrZWRfY2h1bmtfaGFzaFtETV9UUkFDS0VEX0NIVU5LX0hBU0goY2h1bmspXSwgbm9kZSkgeworCQlpZiAoYy0+Y2h1bmsgPT0gY2h1bmspIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZzLT50cmFja2VkX2NodW5rX2xvY2spOworCisJcmV0dXJuIGZvdW5kOworfQogCiAvKgogICogT25lIG9mIHRoZXNlIHBlciByZWdpc3RlcmVkIG9yaWdpbiwgaGVsZCBpbiB0aGUgc25hcHNob3Rfb3JpZ2lucyBoYXNoCkBAIC0zMDIsMTQgKzM2MywxOSBAQAogCWttZW1fY2FjaGVfZnJlZShleGNlcHRpb25fY2FjaGUsIGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKmFsbG9jX3BlbmRpbmdfZXhjZXB0aW9uKHZvaWQpCitzdGF0aWMgc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKmFsbG9jX3BlbmRpbmdfZXhjZXB0aW9uKHN0cnVjdCBkbV9zbmFwc2hvdCAqcykKIHsKLQlyZXR1cm4gbWVtcG9vbF9hbGxvYyhwZW5kaW5nX3Bvb2wsIEdGUF9OT0lPKTsKKwlzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqcGUgPSBtZW1wb29sX2FsbG9jKHMtPnBlbmRpbmdfcG9vbCwKKwkJCQkJCQkgICAgIEdGUF9OT0lPKTsKKworCXBlLT5zbmFwID0gczsKKworCXJldHVybiBwZTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqcGUpCiB7Ci0JbWVtcG9vbF9mcmVlKHBlLCBwZW5kaW5nX3Bvb2wpOworCW1lbXBvb2xfZnJlZShwZSwgcGUtPnNuYXAtPnBlbmRpbmdfcG9vbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGluc2VydF9jb21wbGV0ZWRfZXhjZXB0aW9uKHN0cnVjdCBkbV9zbmFwc2hvdCAqcywKQEAgLTQ4Miw2ICs1NDgsNyBAQAogc3RhdGljIGludCBzbmFwc2hvdF9jdHIoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnM7CisJaW50IGk7CiAJaW50IHIgPSAtRUlOVkFMOwogCWNoYXIgcGVyc2lzdGVudDsKIAljaGFyICpvcmlnaW5fcGF0aDsKQEAgLTU2NCwxMSArNjMxLDMwIEBACiAJCWdvdG8gYmFkNTsKIAl9CiAKKwlzLT5wZW5kaW5nX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woTUlOX0lPUywgcGVuZGluZ19jYWNoZSk7CisJaWYgKCFzLT5wZW5kaW5nX3Bvb2wpIHsKKwkJdGktPmVycm9yID0gIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1wb29sIGZvciBwZW5kaW5nIGV4Y2VwdGlvbnMiOworCQlnb3RvIGJhZDY7CisJfQorCisJcy0+dHJhY2tlZF9jaHVua19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKE1JTl9JT1MsCisJCQkJCQkJIHRyYWNrZWRfY2h1bmtfY2FjaGUpOworCWlmICghcy0+dHJhY2tlZF9jaHVua19wb29sKSB7CisJCXRpLT5lcnJvciA9ICJDb3VsZCBub3QgYWxsb2NhdGUgdHJhY2tlZF9jaHVuayBtZW1wb29sIGZvciAiCisJCQkgICAgInRyYWNraW5nIHJlYWRzIjsKKwkJZ290byBiYWRfdHJhY2tlZF9jaHVua19wb29sOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBETV9UUkFDS0VEX0NIVU5LX0hBU0hfU0laRTsgaSsrKQorCQlJTklUX0hMSVNUX0hFQUQoJnMtPnRyYWNrZWRfY2h1bmtfaGFzaFtpXSk7CisKKwlzcGluX2xvY2tfaW5pdCgmcy0+dHJhY2tlZF9jaHVua19sb2NrKTsKKwogCS8qIE1ldGFkYXRhIG11c3Qgb25seSBiZSBsb2FkZWQgaW50byBvbmUgdGFibGUgYXQgb25jZSAqLwogCXIgPSBzLT5zdG9yZS5yZWFkX21ldGFkYXRhKCZzLT5zdG9yZSk7CiAJaWYgKHIgPCAwKSB7CiAJCXRpLT5lcnJvciA9ICJGYWlsZWQgdG8gcmVhZCBzbmFwc2hvdCBtZXRhZGF0YSI7Ci0JCWdvdG8gYmFkNjsKKwkJZ290byBiYWRfbG9hZF9hbmRfcmVnaXN0ZXI7CiAJfSBlbHNlIGlmIChyID4gMCkgewogCQlzLT52YWxpZCA9IDA7CiAJCURNV0FSTigiU25hcHNob3QgaXMgbWFya2VkIGludmFsaWQuIik7CkBAIC01ODIsNyArNjY4LDcgQEAKIAlpZiAocmVnaXN0ZXJfc25hcHNob3QocykpIHsKIAkJciA9IC1FSU5WQUw7CiAJCXRpLT5lcnJvciA9ICJDYW5ub3QgcmVnaXN0ZXIgc25hcHNob3Qgb3JpZ2luIjsKLQkJZ290byBiYWQ2OworCQlnb3RvIGJhZF9sb2FkX2FuZF9yZWdpc3RlcjsKIAl9CiAKIAl0aS0+cHJpdmF0ZSA9IHM7CkBAIC01OTAsNiArNjc2LDEyIEBACiAKIAlyZXR1cm4gMDsKIAorIGJhZF9sb2FkX2FuZF9yZWdpc3RlcjoKKwltZW1wb29sX2Rlc3Ryb3kocy0+dHJhY2tlZF9jaHVua19wb29sKTsKKworIGJhZF90cmFja2VkX2NodW5rX3Bvb2w6CisJbWVtcG9vbF9kZXN0cm95KHMtPnBlbmRpbmdfcG9vbCk7CisKICBiYWQ2OgogCWRtX2tjb3B5ZF9jbGllbnRfZGVzdHJveShzLT5rY29weWRfY2xpZW50KTsKIApAQCAtNjI0LDYgKzcxNiw5IEBACiAKIHN0YXRpYyB2b2lkIHNuYXBzaG90X2R0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKIHsKKyNpZmRlZiBDT05GSUdfRE1fREVCVUcKKwlpbnQgaTsKKyNlbmRpZgogCXN0cnVjdCBkbV9zbmFwc2hvdCAqcyA9IHRpLT5wcml2YXRlOwogCiAJZmx1c2hfd29ya3F1ZXVlKGtzbmFwZCk7CkBAIC02MzIsOCArNzI3LDE3IEBACiAJLyogQWZ0ZXIgdGhpcyByZXR1cm5zIHRoZXJlIGNhbiBiZSBubyBuZXcga2NvcHlkIGpvYnMuICovCiAJdW5yZWdpc3Rlcl9zbmFwc2hvdChzKTsKIAorI2lmZGVmIENPTkZJR19ETV9ERUJVRworCWZvciAoaSA9IDA7IGkgPCBETV9UUkFDS0VEX0NIVU5LX0hBU0hfU0laRTsgaSsrKQorCQlCVUdfT04oIWhsaXN0X2VtcHR5KCZzLT50cmFja2VkX2NodW5rX2hhc2hbaV0pKTsKKyNlbmRpZgorCisJbWVtcG9vbF9kZXN0cm95KHMtPnRyYWNrZWRfY2h1bmtfcG9vbCk7CisKIAlfX2ZyZWVfZXhjZXB0aW9ucyhzKTsKIAorCW1lbXBvb2xfZGVzdHJveShzLT5wZW5kaW5nX3Bvb2wpOworCiAJZG1fcHV0X2RldmljZSh0aSwgcy0+b3JpZ2luKTsKIAlkbV9wdXRfZGV2aWNlKHRpLCBzLT5jb3cpOwogCkBAIC03NzIsNiArODc2LDEzIEBACiAJfQogCiAJLyoKKwkgKiBDaGVjayBmb3IgY29uZmxpY3RpbmcgcmVhZHMuIFRoaXMgaXMgZXh0cmVtZWx5IGltcHJvYmFibGUsCisJICogc28geWllbGQoKSBpcyBzdWZmaWNpZW50IGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIHdhaXQgcXVldWUuCisJICovCisJd2hpbGUgKF9fY2h1bmtfaXNfdHJhY2tlZChzLCBwZS0+ZS5vbGRfY2h1bmspKQorCQl5aWVsZCgpOworCisJLyoKIAkgKiBBZGQgYSBwcm9wZXIgZXhjZXB0aW9uLCBhbmQgcmVtb3ZlIHRoZQogCSAqIGluLWZsaWdodCBleGNlcHRpb24gZnJvbSB0aGUgbGlzdC4KIAkgKi8KQEAgLTg3Myw3ICs5ODQsNyBAQAogCSAqIHRvIGhvbGQgdGhlIGxvY2sgd2hpbGUgd2UgZG8gdGhpcy4KIAkgKi8KIAl1cF93cml0ZSgmcy0+bG9jayk7Ci0JcGUgPSBhbGxvY19wZW5kaW5nX2V4Y2VwdGlvbigpOworCXBlID0gYWxsb2NfcGVuZGluZ19leGNlcHRpb24ocyk7CiAJZG93bl93cml0ZSgmcy0+bG9jayk7CiAKIAlpZiAoIXMtPnZhbGlkKSB7CkBAIC04OTMsNyArMTAwNCw2IEBACiAJYmlvX2xpc3RfaW5pdCgmcGUtPnNuYXBzaG90X2Jpb3MpOwogCXBlLT5wcmltYXJ5X3BlID0gTlVMTDsKIAlhdG9taWNfc2V0KCZwZS0+cmVmX2NvdW50LCAwKTsKLQlwZS0+c25hcCA9IHM7CiAJcGUtPnN0YXJ0ZWQgPSAwOwogCiAJaWYgKHMtPnN0b3JlLnByZXBhcmVfZXhjZXB0aW9uKCZzLT5zdG9yZSwgJnBlLT5lKSkgewpAQCAtOTc0LDE0ICsxMDg0LDEwIEBACiAJCQlzdGFydF9jb3B5KHBlKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JfSBlbHNlCi0JCS8qCi0JCSAqIEZJWE1FOiB0aGlzIHJlYWQgcGF0aCBzY2FyZXMgbWUgYmVjYXVzZSB3ZQotCQkgKiBhbHdheXMgdXNlIHRoZSBvcmlnaW4gd2hlbiB3ZSBoYXZlIGEgcGVuZGluZwotCQkgKiBleGNlcHRpb24uICBIb3dldmVyIEkgY2FuJ3QgdGhpbmsgb2YgYQotCQkgKiBzaXR1YXRpb24gd2hlcmUgdGhpcyBpcyB3cm9uZyAtIGVqdC4KLQkJICovCisJfSBlbHNlIHsKIAkJYmlvLT5iaV9iZGV2ID0gcy0+b3JpZ2luLT5iZGV2OworCQltYXBfY29udGV4dC0+cHRyID0gdHJhY2tfY2h1bmsocywgY2h1bmspOworCX0KIAogIG91dF91bmxvY2s6CiAJdXBfd3JpdGUoJnMtPmxvY2spOwpAQCAtOTg5LDYgKzEwOTUsMTggQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGludCBzbmFwc2hvdF9lbmRfaW8oc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBiaW8gKmJpbywKKwkJCSAgIGludCBlcnJvciwgdW5pb24gbWFwX2luZm8gKm1hcF9jb250ZXh0KQoreworCXN0cnVjdCBkbV9zbmFwc2hvdCAqcyA9IHRpLT5wcml2YXRlOworCXN0cnVjdCBkbV9zbmFwX3RyYWNrZWRfY2h1bmsgKmMgPSBtYXBfY29udGV4dC0+cHRyOworCisJaWYgKGMpCisJCXN0b3BfdHJhY2tpbmdfY2h1bmsocywgYyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgc25hcHNob3RfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKQogewogCXN0cnVjdCBkbV9zbmFwc2hvdCAqcyA9IHRpLT5wcml2YXRlOwpAQCAtMTI2Niw2ICsxMzg0LDcgQEAKIAkuY3RyICAgICA9IHNuYXBzaG90X2N0ciwKIAkuZHRyICAgICA9IHNuYXBzaG90X2R0ciwKIAkubWFwICAgICA9IHNuYXBzaG90X21hcCwKKwkuZW5kX2lvICA9IHNuYXBzaG90X2VuZF9pbywKIAkucmVzdW1lICA9IHNuYXBzaG90X3Jlc3VtZSwKIAkuc3RhdHVzICA9IHNuYXBzaG90X3N0YXR1cywKIH07CkBAIC0xMzA2LDkgKzE0MjUsOSBAQAogCQlnb3RvIGJhZDQ7CiAJfQogCi0JcGVuZGluZ19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKDEyOCwgcGVuZGluZ19jYWNoZSk7Ci0JaWYgKCFwZW5kaW5nX3Bvb2wpIHsKLQkJRE1FUlIoIkNvdWxkbid0IGNyZWF0ZSBwZW5kaW5nIHBvb2wuIik7CisJdHJhY2tlZF9jaHVua19jYWNoZSA9IEtNRU1fQ0FDSEUoZG1fc25hcF90cmFja2VkX2NodW5rLCAwKTsKKwlpZiAoIXRyYWNrZWRfY2h1bmtfY2FjaGUpIHsKKwkJRE1FUlIoIkNvdWxkbid0IGNyZWF0ZSBjYWNoZSB0byB0cmFjayBjaHVua3MgaW4gdXNlLiIpOwogCQlyID0gLUVOT01FTTsKIAkJZ290byBiYWQ1OwogCX0KQEAgLTEzMTcsMTMgKzE0MzYsMTMgQEAKIAlpZiAoIWtzbmFwZCkgewogCQlETUVSUigiRmFpbGVkIHRvIGNyZWF0ZSBrc25hcGQgd29ya3F1ZXVlLiIpOwogCQlyID0gLUVOT01FTTsKLQkJZ290byBiYWQ2OworCQlnb3RvIGJhZF9wZW5kaW5nX3Bvb2w7CiAJfQogCiAJcmV0dXJuIDA7CiAKLSAgICAgIGJhZDY6Ci0JbWVtcG9vbF9kZXN0cm95KHBlbmRpbmdfcG9vbCk7CisgICAgICBiYWRfcGVuZGluZ19wb29sOgorCWttZW1fY2FjaGVfZGVzdHJveSh0cmFja2VkX2NodW5rX2NhY2hlKTsKICAgICAgIGJhZDU6CiAJa21lbV9jYWNoZV9kZXN0cm95KHBlbmRpbmdfY2FjaGUpOwogICAgICAgYmFkNDoKQEAgLTEzNTIsOSArMTQ3MSw5IEBACiAJCURNRVJSKCJvcmlnaW4gdW5yZWdpc3RlciBmYWlsZWQgJWQiLCByKTsKIAogCWV4aXRfb3JpZ2luX2hhc2goKTsKLQltZW1wb29sX2Rlc3Ryb3kocGVuZGluZ19wb29sKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocGVuZGluZ19jYWNoZSk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGV4Y2VwdGlvbl9jYWNoZSk7CisJa21lbV9jYWNoZV9kZXN0cm95KHRyYWNrZWRfY2h1bmtfY2FjaGUpOwogfQogCiAvKiBNb2R1bGUgaG9va3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5oIGIvZHJpdmVycy9tZC9kbS1zbmFwLmgKaW5kZXggMjRmOWZiNy4uMjkyYzE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmgKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLmgKQEAgLTEzMCw2ICsxMzAsMTAgQEAKIAl2b2lkICpjb250ZXh0OwogfTsKIAorI2RlZmluZSBETV9UUkFDS0VEX0NIVU5LX0hBU0hfU0laRQkxNgorI2RlZmluZSBETV9UUkFDS0VEX0NIVU5LX0hBU0goeCkJKCh1bnNpZ25lZCBsb25nKSh4KSAmIFwKKwkJCQkJIChETV9UUkFDS0VEX0NIVU5LX0hBU0hfU0laRSAtIDEpKQorCiBzdHJ1Y3QgZG1fc25hcHNob3QgewogCXN0cnVjdCByd19zZW1hcGhvcmUgbG9jazsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aTsKQEAgLTE1Nyw2ICsxNjEsOCBAQAogCS8qIFRoZSBsYXN0IHBlcmNlbnRhZ2Ugd2Ugbm90aWZpZWQgKi8KIAlpbnQgbGFzdF9wZXJjZW50OwogCisJbWVtcG9vbF90ICpwZW5kaW5nX3Bvb2w7CisKIAlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlIHBlbmRpbmc7CiAJc3RydWN0IGV4Y2VwdGlvbl90YWJsZSBjb21wbGV0ZTsKIApAQCAtMTc0LDYgKzE4MCwxMSBAQAogCS8qIFF1ZXVlIG9mIHNuYXBzaG90IHdyaXRlcyBmb3Iga3NuYXBkIHRvIGZsdXNoICovCiAJc3RydWN0IGJpb19saXN0IHF1ZXVlZF9iaW9zOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBxdWV1ZWRfYmlvc193b3JrOworCisJLyogQ2h1bmtzIHdpdGggb3V0c3RhbmRpbmcgcmVhZHMgKi8KKwltZW1wb29sX3QgKnRyYWNrZWRfY2h1bmtfcG9vbDsKKwlzcGlubG9ja190IHRyYWNrZWRfY2h1bmtfbG9jazsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCB0cmFja2VkX2NodW5rX2hhc2hbRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkVdOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwppbmRleCA5NDExNmVhLi43OThlNDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMKKysrIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCkBAIC01MDYsMTQgKzUwNiwxMyBAQAogCXJzLT5tYXhfc2VjdG9ycyA9CiAJCW1pbl9ub3RfemVybyhycy0+bWF4X3NlY3RvcnMsIHEtPm1heF9zZWN0b3JzKTsKIAotCS8qIEZJWE1FOiBEZXZpY2UtTWFwcGVyIG9uIHRvcCBvZiBSQUlELTAgYnJlYWtzIGJlY2F1c2UgRE0KLQkgKiAgICAgICAgY3VycmVudGx5IGRvZXNuJ3QgaG9ub3IgTUQncyBtZXJnZV9idmVjX2ZuIHJvdXRpbmUuCi0JICogICAgICAgIEluIHRoaXMgY2FzZSwgd2UnbGwgZm9yY2UgRE0gdG8gdXNlIFBBR0VfU0laRSBvcgotCSAqICAgICAgICBzbWFsbGVyIEkvTywganVzdCB0byBiZSBzYWZlLiBBIGJldHRlciBmaXggaXMgaW4gdGhlCi0JICogICAgICAgIHdvcmtzLCBidXQgYWRkIHRoaXMgZm9yIHRoZSB0aW1lIGJlaW5nIHNvIGl0IHdpbGwgYXQKLQkgKiAgICAgICAgbGVhc3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisJLyoKKwkgKiBDaGVjayBpZiBtZXJnZSBmbiBpcyBzdXBwb3J0ZWQuCisJICogSWYgbm90IHdlJ2xsIGZvcmNlIERNIHRvIHVzZSBQQUdFX1NJWkUgb3IKKwkgKiBzbWFsbGVyIEkvTywganVzdCB0byBiZSBzYWZlLgogCSAqLwotCWlmIChxLT5tZXJnZV9idmVjX2ZuKQorCisJaWYgKHEtPm1lcmdlX2J2ZWNfZm4gJiYgIXRpLT50eXBlLT5tZXJnZSkKIAkJcnMtPm1heF9zZWN0b3JzID0KIAkJCW1pbl9ub3RfemVybyhycy0+bWF4X3NlY3RvcnMsCiAJCQkJICAgICAodW5zaWduZWQgaW50KSAoUEFHRV9TSVpFID4+IDkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCAzNzIzNjliLi5iY2E0NDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC0zNyw4ICszNyw4IEBACiBzdHJ1Y3QgZG1faW8gewogCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZDsKIAlpbnQgZXJyb3I7Ci0Jc3RydWN0IGJpbyAqYmlvOwogCWF0b21pY190IGlvX2NvdW50OworCXN0cnVjdCBiaW8gKmJpbzsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CiB9OwogCkBAIC04MjksNiArODI5LDQ5IEBACiAgKiBDUlVEIEVORAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgaW50IGRtX21lcmdlX2J2ZWMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkgc3RydWN0IGJ2ZWNfbWVyZ2VfZGF0YSAqYnZtLAorCQkJIHN0cnVjdCBiaW9fdmVjICpiaW92ZWMpCit7CisJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gcS0+cXVldWVkYXRhOworCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKKwlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aTsKKwlzZWN0b3JfdCBtYXhfc2VjdG9yczsKKwlpbnQgbWF4X3NpemU7CisKKwlpZiAodW5saWtlbHkoIW1hcCkpCisJCXJldHVybiAwOworCisJdGkgPSBkbV90YWJsZV9maW5kX3RhcmdldChtYXAsIGJ2bS0+Ymlfc2VjdG9yKTsKKworCS8qCisJICogRmluZCBtYXhpbXVtIGFtb3VudCBvZiBJL08gdGhhdCB3b24ndCBuZWVkIHNwbGl0dGluZworCSAqLworCW1heF9zZWN0b3JzID0gbWluKG1heF9pb19sZW4obWQsIGJ2bS0+Ymlfc2VjdG9yLCB0aSksCisJCQkgIChzZWN0b3JfdCkgQklPX01BWF9TRUNUT1JTKTsKKwltYXhfc2l6ZSA9IChtYXhfc2VjdG9ycyA8PCBTRUNUT1JfU0hJRlQpIC0gYnZtLT5iaV9zaXplOworCWlmIChtYXhfc2l6ZSA8IDApCisJCW1heF9zaXplID0gMDsKKworCS8qCisJICogbWVyZ2VfYnZlY19mbigpIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzCisJICogaXQgY2FuIGFjY2VwdCBhdCB0aGlzIG9mZnNldAorCSAqIG1heCBpcyBwcmVjb21wdXRlZCBtYXhpbWFsIGlvIHNpemUKKwkgKi8KKwlpZiAobWF4X3NpemUgJiYgdGktPnR5cGUtPm1lcmdlKQorCQltYXhfc2l6ZSA9IHRpLT50eXBlLT5tZXJnZSh0aSwgYnZtLCBiaW92ZWMsIG1heF9zaXplKTsKKworCS8qCisJICogQWx3YXlzIGFsbG93IGFuIGVudGlyZSBmaXJzdCBwYWdlCisJICovCisJaWYgKG1heF9zaXplIDw9IGJpb3ZlYy0+YnZfbGVuICYmICEoYnZtLT5iaV9zaXplID4+IFNFQ1RPUl9TSElGVCkpCisJCW1heF9zaXplID0gYmlvdmVjLT5idl9sZW47CisKKwlkbV90YWJsZV9wdXQobWFwKTsKKworCXJldHVybiBtYXhfc2l6ZTsKK30KKwogLyoKICAqIFRoZSByZXF1ZXN0IGZ1bmN0aW9uIHRoYXQganVzdCByZW1hcHMgdGhlIGJpbyBidWlsdCB1cCBieQogICogZG1fbWVyZ2VfYnZlYy4KQEAgLTEwMzIsNiArMTA3NSw3IEBACiAJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChtZC0+cXVldWUsIGRtX3JlcXVlc3QpOwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQobWQtPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CiAJbWQtPnF1ZXVlLT51bnBsdWdfZm4gPSBkbV91bnBsdWdfYWxsOworCWJsa19xdWV1ZV9tZXJnZV9idmVjKG1kLT5xdWV1ZSwgZG1fbWVyZ2VfYnZlYyk7CiAKIAltZC0+aW9fcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fSU9TLCBfaW9fY2FjaGUpOwogCWlmICghbWQtPmlvX3Bvb2wpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmggYi9kcml2ZXJzL21kL2RtLmgKaW5kZXggOGMwM2I2My4uMWU1OWEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5oCisrKyBiL2RyaXZlcnMvbWQvZG0uaApAQCAtMTAwLDEyICsxMDAsNiBAQAogCiB2b2lkIGRtX2tvYmplY3RfdWV2ZW50KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7CiAKLS8qCi0gKiBEaXJ0eSBsb2cKLSAqLwotaW50IGRtX2RpcnR5X2xvZ19pbml0KHZvaWQpOwotdm9pZCBkbV9kaXJ0eV9sb2dfZXhpdCh2b2lkKTsKLQogaW50IGRtX2tjb3B5ZF9pbml0KHZvaWQpOwogdm9pZCBkbV9rY29weWRfZXhpdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9mYXVsdHkuYyBiL2RyaXZlcnMvbWQvZmF1bHR5LmMKaW5kZXggZDEwN2RkYy4uMjY4NTQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9mYXVsdHkuYworKysgYi9kcml2ZXJzL21kL2ZhdWx0eS5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIAlyZGV2X2Zvcl9lYWNoKHJkZXYsIHRtcCwgbWRkZXYpCiAJCWNvbmYtPnJkZXYgPSByZGV2OwogCi0JbWRkZXYtPmFycmF5X3NpemUgPSBtZGRldi0+c2l6ZTsKKwltZGRldi0+YXJyYXlfc2VjdG9ycyA9IG1kZGV2LT5zaXplICogMjsKIAltZGRldi0+cHJpdmF0ZSA9IGNvbmY7CiAKIAlyZWNvbmZpZyhtZGRldiwgbWRkZXYtPmxheW91dCwgLTEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggNmE4NjZkNy4uYjFlZWJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0xMjIsMTMgKzEyMiwxMyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWNudCA9IDA7Ci0JY29uZi0+YXJyYXlfc2l6ZSA9IDA7CisJY29uZi0+YXJyYXlfc2VjdG9ycyA9IDA7CiAKIAlyZGV2X2Zvcl9lYWNoKHJkZXYsIHRtcCwgbWRkZXYpIHsKIAkJaW50IGogPSByZGV2LT5yYWlkX2Rpc2s7CiAJCWRldl9pbmZvX3QgKmRpc2sgPSBjb25mLT5kaXNrcyArIGo7CiAKLQkJaWYgKGogPCAwIHx8IGogPiByYWlkX2Rpc2tzIHx8IGRpc2stPnJkZXYpIHsKKwkJaWYgKGogPCAwIHx8IGogPj0gcmFpZF9kaXNrcyB8fCBkaXNrLT5yZGV2KSB7CiAJCQlwcmludGsoImxpbmVhcjogZGlzayBudW1iZXJpbmcgcHJvYmxlbS4gQWJvcnRpbmchXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJZGlzay0+c2l6ZSA9IHJkZXYtPnNpemU7Ci0JCWNvbmYtPmFycmF5X3NpemUgKz0gcmRldi0+c2l6ZTsKKwkJY29uZi0+YXJyYXlfc2VjdG9ycyArPSByZGV2LT5zaXplICogMjsKIAogCQljbnQrKzsKIAl9CkBAIC0xNTUsNyArMTU1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbWluX3NwYWNpbmcgPSBjb25mLT5hcnJheV9zaXplOworCW1pbl9zcGFjaW5nID0gY29uZi0+YXJyYXlfc2VjdG9ycyAvIDI7CiAJc2VjdG9yX2RpdihtaW5fc3BhY2luZywgUEFHRV9TSVpFL3NpemVvZihzdHJ1Y3QgZGV2X2luZm8gKikpOwogCiAJLyogbWluX3NwYWNpbmcgaXMgdGhlIG1pbmltdW0gc3BhY2luZyB0aGF0IHdpbGwgZml0IHRoZSBoYXNoCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkgKiB0aGF0IGlzIGxhcmdlciB0aGFuIG1pbl9zcGFjaW5nIGFzIHVzZSB0aGUgc2l6ZSBvZiB0aGF0IGFzCiAJICogdGhlIGFjdHVhbCBzcGFjaW5nCiAJICovCi0JY29uZi0+aGFzaF9zcGFjaW5nID0gY29uZi0+YXJyYXlfc2l6ZTsKKwljb25mLT5oYXNoX3NwYWNpbmcgPSBjb25mLT5hcnJheV9zZWN0b3JzIC8gMjsKIAlmb3IgKGk9MDsgaSA8IGNudC0xIDsgaSsrKSB7CiAJCXNlY3Rvcl90IHN6ID0gMDsKIAkJaW50IGo7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJdW5zaWduZWQgcm91bmQ7CiAJCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAotCQlzeiA9IGNvbmYtPmFycmF5X3NpemUgPj4gY29uZi0+cHJlc2hpZnQ7CisJCXN6ID0gY29uZi0+YXJyYXlfc2VjdG9ycyA+PiAoY29uZi0+cHJlc2hpZnQgKyAxKTsKIAkJc3ogKz0gMTsgLyogZm9yY2Ugcm91bmQtdXAgKi8KIAkJYmFzZSA9IGNvbmYtPmhhc2hfc3BhY2luZyA+PiBjb25mLT5wcmVzaGlmdDsKIAkJcm91bmQgPSBzZWN0b3JfZGl2KHN6LCBiYXNlKTsKQEAgLTIyMSw3ICsyMjEsNyBAQAogCWN1cnJfb2Zmc2V0ID0gMDsKIAlpID0gMDsKIAlmb3IgKGN1cnJfb2Zmc2V0ID0gMDsKLQkgICAgIGN1cnJfb2Zmc2V0IDwgY29uZi0+YXJyYXlfc2l6ZTsKKwkgICAgIGN1cnJfb2Zmc2V0IDwgY29uZi0+YXJyYXlfc2VjdG9ycyAvIDI7CiAJICAgICBjdXJyX29mZnNldCArPSBjb25mLT5oYXNoX3NwYWNpbmcpIHsKIAogCQl3aGlsZSAoaSA8IHJhaWRfZGlza3MtMSAmJgpAQCAtMjU4LDcgKzI1OCw3IEBACiAJaWYgKCFjb25mKQogCQlyZXR1cm4gMTsKIAltZGRldi0+cHJpdmF0ZSA9IGNvbmY7Ci0JbWRkZXYtPmFycmF5X3NpemUgPSBjb25mLT5hcnJheV9zaXplOworCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gY29uZi0+YXJyYXlfc2VjdG9yczsKIAogCWJsa19xdWV1ZV9tZXJnZV9idmVjKG1kZGV2LT5xdWV1ZSwgbGluZWFyX21lcmdlYWJsZV9idmVjKTsKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IGxpbmVhcl91bnBsdWc7CkBAIC0yOTIsOCArMjkyLDggQEAKIAluZXdjb25mLT5wcmV2ID0gbWRkZXZfdG9fY29uZihtZGRldik7CiAJbWRkZXYtPnByaXZhdGUgPSBuZXdjb25mOwogCW1kZGV2LT5yYWlkX2Rpc2tzKys7Ci0JbWRkZXYtPmFycmF5X3NpemUgPSBuZXdjb25mLT5hcnJheV9zaXplOwotCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NpemUgPDwgMSk7CisJbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBuZXdjb25mLT5hcnJheV9zZWN0b3JzOworCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggMjU4MGFjMS4uYzJmZjc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMTY5LDcgKzE2OSw2IEBACiB7CiAJYXRvbWljX2luYygmbWRfZXZlbnRfY291bnQpOwogCXdha2VfdXAoJm1kX2V2ZW50X3dhaXRlcnMpOwotCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2FjdGlvbiIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWRfbmV3X2V2ZW50KTsKIApAQCAtMjc0LDEwICsyNzMsMTIgQEAKIAlJTklUX0xJU1RfSEVBRCgmbmV3LT5hbGxfbWRkZXZzKTsKIAlpbml0X3RpbWVyKCZuZXctPnNhZmVtb2RlX3RpbWVyKTsKIAlhdG9taWNfc2V0KCZuZXctPmFjdGl2ZSwgMSk7CisJYXRvbWljX3NldCgmbmV3LT5vcGVuZXJzLCAwKTsKIAlzcGluX2xvY2tfaW5pdCgmbmV3LT53cml0ZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuZXctPnNiX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5ldy0+cmVjb3Zlcnlfd2FpdCk7CiAJbmV3LT5yZXNoYXBlX3Bvc2l0aW9uID0gTWF4U2VjdG9yOworCW5ldy0+cmVzeW5jX21pbiA9IDA7CiAJbmV3LT5yZXN5bmNfbWF4ID0gTWF4U2VjdG9yOwogCW5ldy0+bGV2ZWwgPSBMRVZFTF9OT05FOwogCkBAIC0zNDcsMjEgKzM0OCwyMCBAQAogCXJldHVybiBOVUxMOwogfQogCisvKiByZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgc3VwZXIgYmxvY2sgaW4gNTEyYnl0ZSBzZWN0b3JzICovCiBzdGF0aWMgaW5saW5lIHNlY3Rvcl90IGNhbGNfZGV2X3Nib2Zmc2V0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiB7Ci0Jc2VjdG9yX3Qgc2l6ZSA9IGJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gQkxPQ0tfU0laRV9CSVRTOwotCXJldHVybiBNRF9ORVdfU0laRV9CTE9DS1Moc2l6ZSk7CisJc2VjdG9yX3QgbnVtX3NlY3RvcnMgPSBiZGV2LT5iZF9pbm9kZS0+aV9zaXplIC8gNTEyOworCXJldHVybiBNRF9ORVdfU0laRV9TRUNUT1JTKG51bV9zZWN0b3JzKTsKIH0KIAotc3RhdGljIHNlY3Rvcl90IGNhbGNfZGV2X3NpemUobWRrX3JkZXZfdCAqcmRldiwgdW5zaWduZWQgY2h1bmtfc2l6ZSkKK3N0YXRpYyBzZWN0b3JfdCBjYWxjX251bV9zZWN0b3JzKG1ka19yZGV2X3QgKnJkZXYsIHVuc2lnbmVkIGNodW5rX3NpemUpCiB7Ci0Jc2VjdG9yX3Qgc2l6ZTsKLQotCXNpemUgPSByZGV2LT5zYl9vZmZzZXQ7CisJc2VjdG9yX3QgbnVtX3NlY3RvcnMgPSByZGV2LT5zYl9zdGFydDsKIAogCWlmIChjaHVua19zaXplKQotCQlzaXplICY9IH4oKHNlY3Rvcl90KWNodW5rX3NpemUvMTAyNCAtIDEpOwotCXJldHVybiBzaXplOworCQludW1fc2VjdG9ycyAmPSB+KChzZWN0b3JfdCljaHVua19zaXplLzUxMiAtIDEpOworCXJldHVybiBudW1fc2VjdG9yczsKIH0KIAogc3RhdGljIGludCBhbGxvY19kaXNrX3NiKG1ka19yZGV2X3QgKiByZGV2KQpAQCAtMzcyLDcgKzM3Miw3IEBACiAJcmRldi0+c2JfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZGV2LT5zYl9wYWdlKSB7CiAJCXByaW50ayhLRVJOX0FMRVJUICJtZDogb3V0IG9mIG1lbW9yeS5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zODQsNyArMzg0LDcgQEAKIAkJcHV0X3BhZ2UocmRldi0+c2JfcGFnZSk7CiAJCXJkZXYtPnNiX2xvYWRlZCA9IDA7CiAJCXJkZXYtPnNiX3BhZ2UgPSBOVUxMOwotCQlyZGV2LT5zYl9vZmZzZXQgPSAwOworCQlyZGV2LT5zYl9zdGFydCA9IDA7CiAJCXJkZXYtPnNpemUgPSAwOwogCX0KIH0KQEAgLTUzMCw3ICs1MzAsNyBAQAogCQlyZXR1cm4gMDsKIAogCi0JaWYgKCFzeW5jX3BhZ2VfaW8ocmRldi0+YmRldiwgcmRldi0+c2Jfb2Zmc2V0PDwxLCBzaXplLCByZGV2LT5zYl9wYWdlLCBSRUFEKSkKKwlpZiAoIXN5bmNfcGFnZV9pbyhyZGV2LT5iZGV2LCByZGV2LT5zYl9zdGFydCwgc2l6ZSwgcmRldi0+c2JfcGFnZSwgUkVBRCkpCiAJCWdvdG8gZmFpbDsKIAlyZGV2LT5zYl9sb2FkZWQgPSAxOwogCXJldHVybiAwOwpAQCAtNTQzLDE3ICs1NDMsMTIgQEAKIAogc3RhdGljIGludCB1dWlkX2VxdWFsKG1kcF9zdXBlcl90ICpzYjEsIG1kcF9zdXBlcl90ICpzYjIpCiB7Ci0JaWYgKAkoc2IxLT5zZXRfdXVpZDAgPT0gc2IyLT5zZXRfdXVpZDApICYmCi0JCShzYjEtPnNldF91dWlkMSA9PSBzYjItPnNldF91dWlkMSkgJiYKLQkJKHNiMS0+c2V0X3V1aWQyID09IHNiMi0+c2V0X3V1aWQyKSAmJgotCQkoc2IxLT5zZXRfdXVpZDMgPT0gc2IyLT5zZXRfdXVpZDMpKQotCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIAlzYjEtPnNldF91dWlkMCA9PSBzYjItPnNldF91dWlkMCAmJgorCQlzYjEtPnNldF91dWlkMSA9PSBzYjItPnNldF91dWlkMSAmJgorCQlzYjEtPnNldF91dWlkMiA9PSBzYjItPnNldF91dWlkMiAmJgorCQlzYjEtPnNldF91dWlkMyA9PSBzYjItPnNldF91dWlkMzsKIH0KIAotCiBzdGF0aWMgaW50IHNiX2VxdWFsKG1kcF9zdXBlcl90ICpzYjEsIG1kcF9zdXBlcl90ICpzYjIpCiB7CiAJaW50IHJldDsKQEAgLTU2NCw3ICs1NTksNyBAQAogCiAJaWYgKCF0bXAxIHx8ICF0bXAyKSB7CiAJCXJldCA9IDA7Ci0JCXByaW50ayhLRVJOX0lORk8gIm1kLmM6IHNiMSBpcyBub3QgZXF1YWwgdG8gc2IyIVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIm1kLmMgc2JfZXF1YWwoKTogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSFcbiIpOwogCQlnb3RvIGFib3J0OwogCX0KIApAQCAtNTc3LDExICs1NzIsNyBAQAogCXRtcDEtPm5yX2Rpc2tzID0gMDsKIAl0bXAyLT5ucl9kaXNrcyA9IDA7CiAKLQlpZiAobWVtY21wKHRtcDEsIHRtcDIsIE1EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMgKiA0KSkKLQkJcmV0ID0gMDsKLQllbHNlCi0JCXJldCA9IDE7Ci0KKwlyZXQgPSAobWVtY21wKHRtcDEsIHRtcDIsIE1EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMgKiA0KSA9PSAwKTsKIGFib3J0OgogCWtmcmVlKHRtcDEpOwogCWtmcmVlKHRtcDIpOwpAQCAtNjU4LDExICs2NDksMTQgQEAKICAqLwogCiBzdHJ1Y3Qgc3VwZXJfdHlwZSAgewotCWNoYXIgCQkqbmFtZTsKLQlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKLQlpbnQJCSgqbG9hZF9zdXBlcikobWRrX3JkZXZfdCAqcmRldiwgbWRrX3JkZXZfdCAqcmVmZGV2LCBpbnQgbWlub3JfdmVyc2lvbik7Ci0JaW50CQkoKnZhbGlkYXRlX3N1cGVyKShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7Ci0Jdm9pZAkJKCpzeW5jX3N1cGVyKShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7CisJY2hhcgkJICAgICpuYW1lOworCXN0cnVjdCBtb2R1bGUJICAgICpvd25lcjsKKwlpbnQJCSAgICAoKmxvYWRfc3VwZXIpKG1ka19yZGV2X3QgKnJkZXYsIG1ka19yZGV2X3QgKnJlZmRldiwKKwkJCQkJICBpbnQgbWlub3JfdmVyc2lvbik7CisJaW50CQkgICAgKCp2YWxpZGF0ZV9zdXBlcikobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpOworCXZvaWQJCSAgICAoKnN5bmNfc3VwZXIpKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgICgqcmRldl9zaXplX2NoYW5nZSkobWRrX3JkZXZfdCAqcmRldiwKKwkJCQkJCXNlY3Rvcl90IG51bV9zZWN0b3JzKTsKIH07CiAKIC8qCkBAIC02NzMsMTYgKzY2NywxNCBAQAogCWNoYXIgYltCREVWTkFNRV9TSVpFXSwgYjJbQkRFVk5BTUVfU0laRV07CiAJbWRwX3N1cGVyX3QgKnNiOwogCWludCByZXQ7Ci0Jc2VjdG9yX3Qgc2Jfb2Zmc2V0OwogCiAJLyoKLQkgKiBDYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdXBlcmJsb2NrLAorCSAqIENhbGN1bGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHN1cGVyYmxvY2sgKDUxMmJ5dGUgc2VjdG9ycyksCiAJICogaXQncyBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLgogCSAqCiAJICogSXQgYWxzbyBoYXBwZW5zIHRvIGJlIGEgbXVsdGlwbGUgb2YgNEtiLgogCSAqLwotCXNiX29mZnNldCA9IGNhbGNfZGV2X3Nib2Zmc2V0KHJkZXYtPmJkZXYpOwotCXJkZXYtPnNiX29mZnNldCA9IHNiX29mZnNldDsKKwlyZGV2LT5zYl9zdGFydCA9IGNhbGNfZGV2X3Nib2Zmc2V0KHJkZXYtPmJkZXYpOwogCiAJcmV0ID0gcmVhZF9kaXNrX3NiKHJkZXYsIE1EX1NCX0JZVEVTKTsKIAlpZiAocmV0KSByZXR1cm4gcmV0OwpAQCAtNzU5LDcgKzc1MSw3IEBACiAJCWVsc2UgCiAJCQlyZXQgPSAwOwogCX0KLQlyZGV2LT5zaXplID0gY2FsY19kZXZfc2l6ZShyZGV2LCBzYi0+Y2h1bmtfc2l6ZSk7CisJcmRldi0+c2l6ZSA9IGNhbGNfbnVtX3NlY3RvcnMocmRldiwgc2ItPmNodW5rX3NpemUpIC8gMjsKIAogCWlmIChyZGV2LT5zaXplIDwgc2ItPnNpemUgJiYgc2ItPmxldmVsID4gMSkKIAkJLyogInRoaXMgY2Fubm90IHBvc3NpYmx5IGhhcHBlbiIgLi4uICovCkBAIC0xMDA0LDYgKzk5NiwyNiBAQAogfQogCiAvKgorICogcmRldl9zaXplX2NoYW5nZSBmb3IgMC45MC4wCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcKK3N1cGVyXzkwX3JkZXZfc2l6ZV9jaGFuZ2UobWRrX3JkZXZfdCAqcmRldiwgc2VjdG9yX3QgbnVtX3NlY3RvcnMpCit7CisJaWYgKG51bV9zZWN0b3JzICYmIG51bV9zZWN0b3JzIDwgcmRldi0+bWRkZXYtPnNpemUgKiAyKQorCQlyZXR1cm4gMDsgLyogY29tcG9uZW50IG11c3QgZml0IGRldmljZSAqLworCWlmIChyZGV2LT5tZGRldi0+Yml0bWFwX29mZnNldCkKKwkJcmV0dXJuIDA7IC8qIGNhbid0IG1vdmUgYml0bWFwICovCisJcmRldi0+c2Jfc3RhcnQgPSBjYWxjX2Rldl9zYm9mZnNldChyZGV2LT5iZGV2KTsKKwlpZiAoIW51bV9zZWN0b3JzIHx8IG51bV9zZWN0b3JzID4gcmRldi0+c2Jfc3RhcnQpCisJCW51bV9zZWN0b3JzID0gcmRldi0+c2Jfc3RhcnQ7CisJbWRfc3VwZXJfd3JpdGUocmRldi0+bWRkZXYsIHJkZXYsIHJkZXYtPnNiX3N0YXJ0LCByZGV2LT5zYl9zaXplLAorCQkgICAgICAgcmRldi0+c2JfcGFnZSk7CisJbWRfc3VwZXJfd2FpdChyZGV2LT5tZGRldik7CisJcmV0dXJuIG51bV9zZWN0b3JzIC8gMjsgLyoga0IgZm9yIHN5c2ZzICovCit9CisKKworLyoKICAqIHZlcnNpb24gMSBzdXBlcmJsb2NrCiAgKi8KIApAQCAtMTAzNCwxMiArMTA0NiwxMiBAQAogewogCXN0cnVjdCBtZHBfc3VwZXJibG9ja18xICpzYjsKIAlpbnQgcmV0OwotCXNlY3Rvcl90IHNiX29mZnNldDsKKwlzZWN0b3JfdCBzYl9zdGFydDsKIAljaGFyIGJbQkRFVk5BTUVfU0laRV0sIGIyW0JERVZOQU1FX1NJWkVdOwogCWludCBibWFzazsKIAogCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3VwZXJibG9jay4KKwkgKiBDYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdXBlcmJsb2NrIGluIDUxMmJ5dGUgc2VjdG9ycy4KIAkgKiBJdCBpcyBhbHdheXMgYWxpZ25lZCB0byBhIDRLIGJvdW5kYXJ5IGFuZAogCSAqIGRlcGVkaW5nIG9uIG1pbm9yX3ZlcnNpb24sIGl0IGNhbiBiZToKIAkgKiAwOiBBdCBsZWFzdCA4SywgYnV0IGxlc3MgdGhhbiAxMkssIGZyb20gZW5kIG9mIGRldmljZQpAQCAtMTA0OCwyMiArMTA2MCwyMCBAQAogCSAqLwogCXN3aXRjaChtaW5vcl92ZXJzaW9uKSB7CiAJY2FzZSAwOgotCQlzYl9vZmZzZXQgPSByZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDk7Ci0JCXNiX29mZnNldCAtPSA4KjI7Ci0JCXNiX29mZnNldCAmPSB+KHNlY3Rvcl90KSg0KjItMSk7Ci0JCS8qIGNvbnZlcnQgZnJvbSBzZWN0b3JzIHRvIEsgKi8KLQkJc2Jfb2Zmc2V0IC89IDI7CisJCXNiX3N0YXJ0ID0gcmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5OworCQlzYl9zdGFydCAtPSA4KjI7CisJCXNiX3N0YXJ0ICY9IH4oc2VjdG9yX3QpKDQqMi0xKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQlzYl9vZmZzZXQgPSAwOworCQlzYl9zdGFydCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJc2Jfb2Zmc2V0ID0gNDsKKwkJc2Jfc3RhcnQgPSA4OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmRldi0+c2Jfb2Zmc2V0ID0gc2Jfb2Zmc2V0OworCXJkZXYtPnNiX3N0YXJ0ID0gc2Jfc3RhcnQ7CiAKIAkvKiBzdXBlcmJsb2NrIGlzIHJhcmVseSBsYXJnZXIgdGhhbiAxSywgYnV0IGl0IGNhbiBiZSBsYXJnZXIsCiAJICogYW5kIGl0IGlzIHNhZmUgdG8gcmVhZCA0aywgc28gd2UgZG8gdGhhdApAQCAtMTA3Nyw3ICsxMDg3LDcgQEAKIAlpZiAoc2ItPm1hZ2ljICE9IGNwdV90b19sZTMyKE1EX1NCX01BR0lDKSB8fAogCSAgICBzYi0+bWFqb3JfdmVyc2lvbiAhPSBjcHVfdG9fbGUzMigxKSB8fAogCSAgICBsZTMyX3RvX2NwdShzYi0+bWF4X2RldikgPiAoNDA5Ni0yNTYpLzIgfHwKLQkgICAgbGU2NF90b19jcHUoc2ItPnN1cGVyX29mZnNldCkgIT0gKHJkZXYtPnNiX29mZnNldDw8MSkgfHwKKwkgICAgbGU2NF90b19jcHUoc2ItPnN1cGVyX29mZnNldCkgIT0gcmRldi0+c2Jfc3RhcnQgfHwKIAkgICAgKGxlMzJfdG9fY3B1KHNiLT5mZWF0dXJlX21hcCkgJiB+TURfRkVBVFVSRV9BTEwpICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMTEzLDcgKzExMjMsNyBAQAogCQlyZGV2LT5zYl9zaXplID0gKHJkZXYtPnNiX3NpemUgfCBibWFzaykgKyAxOwogCiAJaWYgKG1pbm9yX3ZlcnNpb24KLQkgICAgJiYgcmRldi0+ZGF0YV9vZmZzZXQgPCBzYl9vZmZzZXQgKyAocmRldi0+c2Jfc2l6ZS81MTIpKQorCSAgICAmJiByZGV2LT5kYXRhX29mZnNldCA8IHNiX3N0YXJ0ICsgKHJkZXYtPnNiX3NpemUvNTEyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoc2ItPmxldmVsID09IGNwdV90b19sZTMyKExFVkVMX01VTFRJUEFUSCkpCkBAIC0xMTQ5LDcgKzExNTksNyBAQAogCWlmIChtaW5vcl92ZXJzaW9uKQogCQlyZGV2LT5zaXplID0gKChyZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplPj45KSAtIGxlNjRfdG9fY3B1KHNiLT5kYXRhX29mZnNldCkpIC8gMjsKIAllbHNlCi0JCXJkZXYtPnNpemUgPSByZGV2LT5zYl9vZmZzZXQ7CisJCXJkZXYtPnNpemUgPSByZGV2LT5zYl9zdGFydCAvIDI7CiAJaWYgKHJkZXYtPnNpemUgPCBsZTY0X3RvX2NwdShzYi0+ZGF0YV9zaXplKS8yKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZGV2LT5zaXplID0gbGU2NF90b19jcHUoc2ItPmRhdGFfc2l6ZSkvMjsKQEAgLTEzMjgsMzUgKzEzMzgsNzQgQEAKIAlzYi0+c2JfY3N1bSA9IGNhbGNfc2JfMV9jc3VtKHNiKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZworc3VwZXJfMV9yZGV2X3NpemVfY2hhbmdlKG1ka19yZGV2X3QgKnJkZXYsIHNlY3Rvcl90IG51bV9zZWN0b3JzKQoreworCXN0cnVjdCBtZHBfc3VwZXJibG9ja18xICpzYjsKKwlzZWN0b3JfdCBtYXhfc2VjdG9yczsKKwlpZiAobnVtX3NlY3RvcnMgJiYgbnVtX3NlY3RvcnMgPCByZGV2LT5tZGRldi0+c2l6ZSAqIDIpCisJCXJldHVybiAwOyAvKiBjb21wb25lbnQgbXVzdCBmaXQgZGV2aWNlICovCisJaWYgKHJkZXYtPnNiX3N0YXJ0IDwgcmRldi0+ZGF0YV9vZmZzZXQpIHsKKwkJLyogbWlub3IgdmVyc2lvbnMgMSBhbmQgMjsgc3VwZXJibG9jayBiZWZvcmUgZGF0YSAqLworCQltYXhfc2VjdG9ycyA9IHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gOTsKKwkJbWF4X3NlY3RvcnMgLT0gcmRldi0+ZGF0YV9vZmZzZXQ7CisJCWlmICghbnVtX3NlY3RvcnMgfHwgbnVtX3NlY3RvcnMgPiBtYXhfc2VjdG9ycykKKwkJCW51bV9zZWN0b3JzID0gbWF4X3NlY3RvcnM7CisJfSBlbHNlIGlmIChyZGV2LT5tZGRldi0+Yml0bWFwX29mZnNldCkgeworCQkvKiBtaW5vciB2ZXJzaW9uIDAgd2l0aCBiaXRtYXAgd2UgY2FuJ3QgbW92ZSAqLworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKiBtaW5vciB2ZXJzaW9uIDA7IHN1cGVyYmxvY2sgYWZ0ZXIgZGF0YSAqLworCQlzZWN0b3JfdCBzYl9zdGFydDsKKwkJc2Jfc3RhcnQgPSAocmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5KSAtIDgqMjsKKwkJc2Jfc3RhcnQgJj0gfihzZWN0b3JfdCkoNCoyIC0gMSk7CisJCW1heF9zZWN0b3JzID0gcmRldi0+c2l6ZSAqIDIgKyBzYl9zdGFydCAtIHJkZXYtPnNiX3N0YXJ0OworCQlpZiAoIW51bV9zZWN0b3JzIHx8IG51bV9zZWN0b3JzID4gbWF4X3NlY3RvcnMpCisJCQludW1fc2VjdG9ycyA9IG1heF9zZWN0b3JzOworCQlyZGV2LT5zYl9zdGFydCA9IHNiX3N0YXJ0OworCX0KKwlzYiA9IChzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfMSAqKSBwYWdlX2FkZHJlc3MocmRldi0+c2JfcGFnZSk7CisJc2ItPmRhdGFfc2l6ZSA9IGNwdV90b19sZTY0KG51bV9zZWN0b3JzKTsKKwlzYi0+c3VwZXJfb2Zmc2V0ID0gcmRldi0+c2Jfc3RhcnQ7CisJc2ItPnNiX2NzdW0gPSBjYWxjX3NiXzFfY3N1bShzYik7CisJbWRfc3VwZXJfd3JpdGUocmRldi0+bWRkZXYsIHJkZXYsIHJkZXYtPnNiX3N0YXJ0LCByZGV2LT5zYl9zaXplLAorCQkgICAgICAgcmRldi0+c2JfcGFnZSk7CisJbWRfc3VwZXJfd2FpdChyZGV2LT5tZGRldik7CisJcmV0dXJuIG51bV9zZWN0b3JzIC8gMjsgLyoga0IgZm9yIHN5c2ZzICovCit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfdHlwZSBzdXBlcl90eXBlc1tdID0gewogCVswXSA9IHsKIAkJLm5hbWUJPSAiMC45MC4wIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCS5sb2FkX3N1cGVyCT0gc3VwZXJfOTBfbG9hZCwKLQkJLnZhbGlkYXRlX3N1cGVyCT0gc3VwZXJfOTBfdmFsaWRhdGUsCi0JCS5zeW5jX3N1cGVyCT0gc3VwZXJfOTBfc3luYywKKwkJLmxvYWRfc3VwZXIJICAgID0gc3VwZXJfOTBfbG9hZCwKKwkJLnZhbGlkYXRlX3N1cGVyCSAgICA9IHN1cGVyXzkwX3ZhbGlkYXRlLAorCQkuc3luY19zdXBlcgkgICAgPSBzdXBlcl85MF9zeW5jLAorCQkucmRldl9zaXplX2NoYW5nZSAgID0gc3VwZXJfOTBfcmRldl9zaXplX2NoYW5nZSwKIAl9LAogCVsxXSA9IHsKIAkJLm5hbWUJPSAibWQtMSIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubG9hZF9zdXBlcgk9IHN1cGVyXzFfbG9hZCwKLQkJLnZhbGlkYXRlX3N1cGVyCT0gc3VwZXJfMV92YWxpZGF0ZSwKLQkJLnN5bmNfc3VwZXIJPSBzdXBlcl8xX3N5bmMsCisJCS5sb2FkX3N1cGVyCSAgICA9IHN1cGVyXzFfbG9hZCwKKwkJLnZhbGlkYXRlX3N1cGVyCSAgICA9IHN1cGVyXzFfdmFsaWRhdGUsCisJCS5zeW5jX3N1cGVyCSAgICA9IHN1cGVyXzFfc3luYywKKwkJLnJkZXZfc2l6ZV9jaGFuZ2UgICA9IHN1cGVyXzFfcmRldl9zaXplX2NoYW5nZSwKIAl9LAogfTsKIAogc3RhdGljIGludCBtYXRjaF9tZGRldl91bml0cyhtZGRldl90ICptZGRldjEsIG1kZGV2X3QgKm1kZGV2MikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICp0bXAyOwogCW1ka19yZGV2X3QgKnJkZXYsICpyZGV2MjsKIAotCXJkZXZfZm9yX2VhY2gocmRldiwgdG1wLCBtZGRldjEpCi0JCXJkZXZfZm9yX2VhY2gocmRldjIsIHRtcDIsIG1kZGV2MikKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmRldl9mb3JfZWFjaF9yY3UocmRldiwgbWRkZXYxKQorCQlyZGV2X2Zvcl9lYWNoX3JjdShyZGV2MiwgbWRkZXYyKQogCQkJaWYgKHJkZXYtPmJkZXYtPmJkX2NvbnRhaW5zID09Ci0JCQkgICAgcmRldjItPmJkZXYtPmJkX2NvbnRhaW5zKQorCQkJICAgIHJkZXYyLT5iZGV2LT5iZF9jb250YWlucykgeworCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCXJldHVybiAxOwotCisJCQl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MjMsNyArMTQ3Miw3IEBACiAJCWtvYmplY3RfZGVsKCZyZGV2LT5rb2JqKTsKIAkJZ290byBmYWlsOwogCX0KLQlsaXN0X2FkZCgmcmRldi0+c2FtZV9zZXQsICZtZGRldi0+ZGlza3MpOworCWxpc3RfYWRkX3JjdSgmcmRldi0+c2FtZV9zZXQsICZtZGRldi0+ZGlza3MpOwogCWJkX2NsYWltX2J5X2Rpc2socmRldi0+YmRldiwgcmRldi0+YmRldi0+YmRfaG9sZGVyLCBtZGRldi0+Z2VuZGlzayk7CiAJcmV0dXJuIDA7CiAKQEAgLTE0NDgsMTQgKzE0OTcsMTYgQEAKIAkJcmV0dXJuOwogCX0KIAliZF9yZWxlYXNlX2Zyb21fZGlzayhyZGV2LT5iZGV2LCByZGV2LT5tZGRldi0+Z2VuZGlzayk7Ci0JbGlzdF9kZWxfaW5pdCgmcmRldi0+c2FtZV9zZXQpOworCWxpc3RfZGVsX3JjdSgmcmRldi0+c2FtZV9zZXQpOwogCXByaW50ayhLRVJOX0lORk8gIm1kOiB1bmJpbmQ8JXM+XG4iLCBiZGV2bmFtZShyZGV2LT5iZGV2LGIpKTsKIAlyZGV2LT5tZGRldiA9IE5VTEw7CiAJc3lzZnNfcmVtb3ZlX2xpbmsoJnJkZXYtPmtvYmosICJibG9jayIpOwogCiAJLyogV2UgbmVlZCB0byBkZWxheSB0aGlzLCBvdGhlcndpc2Ugd2UgY2FuIGRlYWRsb2NrIHdoZW4KLQkgKiB3cml0aW5nIHRvICdyZW1vdmUnIHRvICJkZXYvc3RhdGUiCisJICogd3JpdGluZyB0byAncmVtb3ZlJyB0byAiZGV2L3N0YXRlIi4gIFdlIGFsc28gbmVlZAorCSAqIHRvIGRlbGF5IGl0IGR1ZSB0byByY3UgdXNhZ2UuCiAJICovCisJc3luY2hyb25pemVfcmN1KCk7CiAJSU5JVF9XT1JLKCZyZGV2LT5kZWxfd29yaywgbWRfZGVsYXllZF9kZWxldGUpOwogCWtvYmplY3RfZ2V0KCZyZGV2LT5rb2JqKTsKIAlzY2hlZHVsZV93b3JrKCZyZGV2LT5kZWxfd29yayk7CkBAIC0xNTExLDcgKzE1NjIsNiBAQAogCWlmIChyZGV2LT5tZGRldikKIAkJTURfQlVHKCk7CiAJZnJlZV9kaXNrX3NiKHJkZXYpOwotCWxpc3RfZGVsX2luaXQoJnJkZXYtPnNhbWVfc2V0KTsKICNpZm5kZWYgTU9EVUxFCiAJaWYgKHRlc3RfYml0KEF1dG9EZXRlY3RlZCwgJnJkZXYtPmZsYWdzKSkKIAkJbWRfYXV0b2RldGVjdF9kZXYocmRldi0+YmRldi0+YmRfZGV2KTsKQEAgLTE3NTgsMTEgKzE4MDgsMTEgQEAKIAkJZHByaW50aygiJXMgIiwgYmRldm5hbWUocmRldi0+YmRldixiKSk7CiAJCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQltZF9zdXBlcl93cml0ZShtZGRldixyZGV2LAotCQkJCSAgICAgICByZGV2LT5zYl9vZmZzZXQ8PDEsIHJkZXYtPnNiX3NpemUsCisJCQkJICAgICAgIHJkZXYtPnNiX3N0YXJ0LCByZGV2LT5zYl9zaXplLAogCQkJCSAgICAgICByZGV2LT5zYl9wYWdlKTsKIAkJCWRwcmludGsoS0VSTl9JTkZPICIod3JpdGUpICVzJ3Mgc2Igb2Zmc2V0OiAlbGx1XG4iLAogCQkJCWJkZXZuYW1lKHJkZXYtPmJkZXYsYiksCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zYl9vZmZzZXQpOworCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2Jfc3RhcnQpOwogCQkJcmRldi0+c2JfZXZlbnRzID0gbWRkZXYtPmV2ZW50czsKIAogCQl9IGVsc2UKQEAgLTE3ODcsNyArMTgzNyw3IEBACiAKIH0KIAotLyogd29yZHMgd3JpdHRlbiB0byBzeXNmcyBmaWxlcyBtYXksIG9yIG15IG5vdCwgYmUgXG4gdGVybWluYXRlZC4KKy8qIHdvcmRzIHdyaXR0ZW4gdG8gc3lzZnMgZmlsZXMgbWF5LCBvciBtYXkgbm90LCBiZSBcbiB0ZXJtaW5hdGVkLgogICogV2Ugd2FudCB0byBhY2NlcHQgd2l0aCBjYXNlLiBGb3IgdGhpcyB3ZSB1c2UgY21kX21hdGNoLgogICovCiBzdGF0aWMgaW50IGNtZF9tYXRjaChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnN0cikKQEAgLTE4ODYsNiArMTkzNiw4IEBACiAKIAkJZXJyID0gMDsKIAl9CisJaWYgKCFlcnIpCisJCXN5c2ZzX25vdGlmeSgmcmRldi0+a29iaiwgTlVMTCwgInN0YXRlIik7CiAJcmV0dXJuIGVyciA/IGVyciA6IGxlbjsKIH0KIHN0YXRpYyBzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSByZGV2X3N0YXRlID0KQEAgLTE5MzEsNyArMTk4Myw3IEBACiAJCXNsb3QgPSAtMTsKIAllbHNlIGlmIChlPT1idWYgfHwgKCplICYmICplIT0gJ1xuJykpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChyZGV2LT5tZGRldi0+cGVycykgeworCWlmIChyZGV2LT5tZGRldi0+cGVycyAmJiBzbG90ID09IC0xKSB7CiAJCS8qIFNldHRpbmcgJ3Nsb3QnIG9uIGFuIGFjdGl2ZSBhcnJheSByZXF1aXJlcyBhbHNvCiAJCSAqIHVwZGF0aW5nIHRoZSAncmQlZCcgbGluaywgYW5kIGNvbW11bmljYXRpbmcKIAkJICogd2l0aCB0aGUgcGVyc29uYWxpdHkgd2l0aCAtPmhvdF8qX2Rpc2suCkBAIC0xOTM5LDggKzE5OTEsNiBAQAogCQkgKiBmYWlsZWQvc3BhcmUgZGV2aWNlcy4gIFRoaXMgbm9ybWFsbHkgaGFwcGVucyBhdXRvbWF0aWNhbGx5LAogCQkgKiBidXQgbm90IHdoZW4gdGhlIG1ldGFkYXRhIGlzIGV4dGVybmFsbHkgbWFuYWdlZC4KIAkJICovCi0JCWlmIChzbG90ICE9IC0xKQotCQkJcmV0dXJuIC1FQlVTWTsKIAkJaWYgKHJkZXYtPnJhaWRfZGlzayA9PSAtMSkKIAkJCXJldHVybiAtRUVYSVNUOwogCQkvKiBwZXJzb25hbGl0eSBkb2VzIGFsbCBuZWVkZWQgY2hlY2tzICovCkBAIC0xOTU0LDYgKzIwMDQsNDMgQEAKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJnJkZXYtPm1kZGV2LT5rb2JqLCBubSk7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmcmRldi0+bWRkZXYtPnJlY292ZXJ5KTsKIAkJbWRfd2FrZXVwX3RocmVhZChyZGV2LT5tZGRldi0+dGhyZWFkKTsKKwl9IGVsc2UgaWYgKHJkZXYtPm1kZGV2LT5wZXJzKSB7CisJCW1ka19yZGV2X3QgKnJkZXYyOworCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJCS8qIEFjdGl2YXRpbmcgYSBzcGFyZSAuLiBvciBwb3NzaWJseSByZWFjdGl2YXRpbmcKKwkJICogaWYgd2UgZXZlcnkgZ2V0IGJpdG1hcHMgd29ya2luZyBoZXJlLgorCQkgKi8KKworCQlpZiAocmRldi0+cmFpZF9kaXNrICE9IC0xKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlpZiAocmRldi0+bWRkZXYtPnBlcnMtPmhvdF9hZGRfZGlzayA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmRldl9mb3JfZWFjaChyZGV2MiwgdG1wLCByZGV2LT5tZGRldikKKwkJCWlmIChyZGV2Mi0+cmFpZF9kaXNrID09IHNsb3QpCisJCQkJcmV0dXJuIC1FRVhJU1Q7CisKKwkJcmRldi0+cmFpZF9kaXNrID0gc2xvdDsKKwkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCisJCQlyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgPSBzbG90OworCQllbHNlCisJCQlyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgPSAtMTsKKwkJZXJyID0gcmRldi0+bWRkZXYtPnBlcnMtPgorCQkJaG90X2FkZF9kaXNrKHJkZXYtPm1kZGV2LCByZGV2KTsKKwkJaWYgKGVycikgeworCQkJcmRldi0+cmFpZF9kaXNrID0gLTE7CisJCQlyZXR1cm4gZXJyOworCQl9IGVsc2UKKwkJCXN5c2ZzX25vdGlmeSgmcmRldi0+a29iaiwgTlVMTCwgInN0YXRlIik7CisJCXNwcmludGYobm0sICJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKKwkJaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZyZGV2LT5tZGRldi0+a29iaiwgJnJkZXYtPmtvYmosIG5tKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAibWQ6IGNhbm5vdCByZWdpc3RlciAiCisJCQkgICAgICAgIiVzIGZvciAlc1xuIiwKKwkJCSAgICAgICBubSwgbWRuYW1lKHJkZXYtPm1kZGV2KSk7CisKKwkJLyogZG9uJ3Qgd2FrZXVwIGFueW9uZSwgbGVhdmUgdGhhdCB0byB1c2Vyc3BhY2UuICovCiAJfSBlbHNlIHsKIAkJaWYgKHNsb3QgPj0gcmRldi0+bWRkZXYtPnJhaWRfZGlza3MpCiAJCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTE5NjIsNiArMjA0OSw3IEBACiAJCWNsZWFyX2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7CiAJCWNsZWFyX2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKTsKIAkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCQlzeXNmc19ub3RpZnkoJnJkZXYtPmtvYmosIE5VTEwsICJzdGF0ZSIpOwogCX0KIAlyZXR1cm4gbGVuOwogfQpAQCAtMTk4Myw3ICsyMDcxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZiwgJmUsIDEwKTsKIAlpZiAoZT09YnVmIHx8ICgqZSAmJiAqZSAhPSAnXG4nKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHJkZXYtPm1kZGV2LT5wZXJzKQorCWlmIChyZGV2LT5tZGRldi0+cGVycyAmJiByZGV2LT5yYWlkX2Rpc2sgPj0gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAocmRldi0+c2l6ZSAmJiByZGV2LT5tZGRldi0+ZXh0ZXJuYWwpCiAJCS8qIE11c3Qgc2V0IG9mZnNldCBiZWZvcmUgc2l6ZSwgc28gb3ZlcmxhcCBjaGVja3MKQEAgLTIwMTUsMTcgKzIxMDMsMzAgQEAKIHN0YXRpYyBzc2l6ZV90CiByZGV2X3NpemVfc3RvcmUobWRrX3JkZXZfdCAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotCWNoYXIgKmU7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNpemUgPSBzaW1wbGVfc3RydG91bGwoYnVmLCAmZSwgMTApOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBvbGRzaXplID0gcmRldi0+c2l6ZTsKIAltZGRldl90ICpteV9tZGRldiA9IHJkZXYtPm1kZGV2OwogCi0JaWYgKGU9PWJ1ZiB8fCAoKmUgJiYgKmUgIT0gJ1xuJykpCisJaWYgKHN0cmljdF9zdHJ0b3VsbChidWYsIDEwLCAmc2l6ZSkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAobXlfbWRkZXYtPnBlcnMpCi0JCXJldHVybiAtRUJVU1k7CisJaWYgKHNpemUgPCBteV9tZGRldi0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG15X21kZGV2LT5wZXJzICYmIHJkZXYtPnJhaWRfZGlzayA+PSAwKSB7CisJCWlmIChteV9tZGRldi0+cGVyc2lzdGVudCkgeworCQkJc2l6ZSA9IHN1cGVyX3R5cGVzW215X21kZGV2LT5tYWpvcl92ZXJzaW9uXS4KKwkJCQlyZGV2X3NpemVfY2hhbmdlKHJkZXYsIHNpemUgKiAyKTsKKwkJCWlmICghc2l6ZSkKKwkJCQlyZXR1cm4gLUVCVVNZOworCQl9IGVsc2UgaWYgKCFzaXplKSB7CisJCQlzaXplID0gKHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gMTApOworCQkJc2l6ZSAtPSByZGV2LT5kYXRhX29mZnNldC8yOworCQl9CisJCWlmIChzaXplIDwgbXlfbWRkZXYtPnNpemUpCisJCQlyZXR1cm4gLUVJTlZBTDsgLyogY29tcG9uZW50IG11c3QgZml0IGRldmljZSAqLworCX0KKwogCXJkZXYtPnNpemUgPSBzaXplOwotCWlmIChzaXplID4gb2xkc2l6ZSAmJiByZGV2LT5tZGRldi0+ZXh0ZXJuYWwpIHsKKwlpZiAoc2l6ZSA+IG9sZHNpemUgJiYgbXlfbWRkZXYtPmV4dGVybmFsKSB7CiAJCS8qIG5lZWQgdG8gY2hlY2sgdGhhdCBhbGwgb3RoZXIgcmRldnMgd2l0aCB0aGUgc2FtZSAtPmJkZXYKIAkJICogZG8gbm90IG92ZXJsYXAuICBXZSBuZWVkIHRvIHVubG9jayB0aGUgbWRkZXYgdG8gYXZvaWQKIAkJICogYSBkZWFkbG9jay4gIFdlIGhhdmUgYWxyZWFkeSBjaGFuZ2VkIHJkZXYtPnNpemUsIGFuZCBpZgpAQCAtMjA0NCw4ICsyMTQ1LDkgQEAKIAkJCQlpZiAodGVzdF9iaXQoQWxsUmVzZXJ2ZWQsICZyZGV2Mi0+ZmxhZ3MpIHx8CiAJCQkJICAgIChyZGV2LT5iZGV2ID09IHJkZXYyLT5iZGV2ICYmCiAJCQkJICAgICByZGV2ICE9IHJkZXYyICYmCi0JCQkJICAgICBvdmVybGFwcyhyZGV2LT5kYXRhX29mZnNldCwgcmRldi0+c2l6ZSwKLQkJCQkJICAgIHJkZXYyLT5kYXRhX29mZnNldCwgcmRldjItPnNpemUpKSkgeworCQkJCSAgICAgb3ZlcmxhcHMocmRldi0+ZGF0YV9vZmZzZXQsIHJkZXYtPnNpemUgKiAyLAorCQkJCQkgICAgICByZGV2Mi0+ZGF0YV9vZmZzZXQsCisJCQkJCSAgICAgIHJkZXYyLT5zaXplICogMikpKSB7CiAJCQkJCW92ZXJsYXAgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC0yMDY3LDggKzIxNjksNiBAQAogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KLQlpZiAoc2l6ZSA8IG15X21kZGV2LT5zaXplIHx8IG15X21kZGV2LT5zaXplID09IDApCi0JCW15X21kZGV2LT5zaXplID0gc2l6ZTsKIAlyZXR1cm4gbGVuOwogfQogCkBAIC0yNTEyLDcgKzI2MTIsNyBAQAogICogICAgIFdoZW4gd3JpdHRlbiwgZG9lc24ndCB0ZWFyIGRvd24gYXJyYXksIGJ1dCBqdXN0IHN0b3BzIGl0CiAgKiBzdXNwZW5kZWQgKG5vdCBzdXBwb3J0ZWQgeWV0KQogICogICAgIEFsbCBJTyByZXF1ZXN0cyB3aWxsIGJsb2NrLiBUaGUgYXJyYXkgY2FuIGJlIHJlY29uZmlndXJlZC4KLSAqICAgICBXcml0aW5nIHRoaXMsIGlmIGFjY2VwdGVkLCB3aWxsIGJsb2NrIHVudGlsIGFycmF5IGlzIHF1aWVzc2VudAorICogICAgIFdyaXRpbmcgdGhpcywgaWYgYWNjZXB0ZWQsIHdpbGwgYmxvY2sgdW50aWwgYXJyYXkgaXMgcXVpZXNjZW50CiAgKiByZWFkb25seQogICogICAgIG5vIHJlc3luYyBjYW4gaGFwcGVuLiAgbm8gc3VwZXJibG9ja3MgZ2V0IHdyaXR0ZW4uCiAgKiAgICAgd3JpdGUgcmVxdWVzdHMgZmFpbApAQCAtMjU4NSw3ICsyNjg1LDcgQEAKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIGFycmF5X3N0YXRlc1tzdF0pOwogfQogCi1zdGF0aWMgaW50IGRvX21kX3N0b3AobWRkZXZfdCAqIG1kZGV2LCBpbnQgcm8pOworc3RhdGljIGludCBkb19tZF9zdG9wKG1kZGV2X3QgKiBtZGRldiwgaW50IHJvLCBpbnQgaXNfb3Blbik7CiBzdGF0aWMgaW50IGRvX21kX3J1bihtZGRldl90ICogbWRkZXYpOwogc3RhdGljIGludCByZXN0YXJ0X2FycmF5KG1kZGV2X3QgKm1kZGV2KTsKIApAQCAtMjU5OSwxNiArMjY5OSwxNiBAQAogCQlicmVhazsKIAljYXNlIGNsZWFyOgogCQkvKiBzdG9wcGluZyBhbiBhY3RpdmUgYXJyYXkgKi8KLQkJaWYgKGF0b21pY19yZWFkKCZtZGRldi0+YWN0aXZlKSA+IDEpCisJCWlmIChhdG9taWNfcmVhZCgmbWRkZXYtPm9wZW5lcnMpID4gMCkKIAkJCXJldHVybiAtRUJVU1k7Ci0JCWVyciA9IGRvX21kX3N0b3AobWRkZXYsIDApOworCQllcnIgPSBkb19tZF9zdG9wKG1kZGV2LCAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBpbmFjdGl2ZToKIAkJLyogc3RvcHBpbmcgYW4gYWN0aXZlIGFycmF5ICovCiAJCWlmIChtZGRldi0+cGVycykgewotCQkJaWYgKGF0b21pY19yZWFkKCZtZGRldi0+YWN0aXZlKSA+IDEpCisJCQlpZiAoYXRvbWljX3JlYWQoJm1kZGV2LT5vcGVuZXJzKSA+IDApCiAJCQkJcmV0dXJuIC1FQlVTWTsKLQkJCWVyciA9IGRvX21kX3N0b3AobWRkZXYsIDIpOworCQkJZXJyID0gZG9fbWRfc3RvcChtZGRldiwgMiwgMCk7CiAJCX0gZWxzZQogCQkJZXJyID0gMDsgLyogYWxyZWFkeSBpbmFjdGl2ZSAqLwogCQlicmVhazsKQEAgLTI2MTYsNyArMjcxNiw3IEBACiAJCWJyZWFrOyAvKiBub3Qgc3VwcG9ydGVkIHlldCAqLwogCWNhc2UgcmVhZG9ubHk6CiAJCWlmIChtZGRldi0+cGVycykKLQkJCWVyciA9IGRvX21kX3N0b3AobWRkZXYsIDEpOworCQkJZXJyID0gZG9fbWRfc3RvcChtZGRldiwgMSwgMCk7CiAJCWVsc2UgewogCQkJbWRkZXYtPnJvID0gMTsKIAkJCXNldF9kaXNrX3JvKG1kZGV2LT5nZW5kaXNrLCAxKTsKQEAgLTI2MjYsNyArMjcyNiw3IEBACiAJY2FzZSByZWFkX2F1dG86CiAJCWlmIChtZGRldi0+cGVycykgewogCQkJaWYgKG1kZGV2LT5ybyAhPSAxKQotCQkJCWVyciA9IGRvX21kX3N0b3AobWRkZXYsIDEpOworCQkJCWVyciA9IGRvX21kX3N0b3AobWRkZXYsIDEsIDApOwogCQkJZWxzZQogCQkJCWVyciA9IHJlc3RhcnRfYXJyYXkobWRkZXYpOwogCQkJaWYgKGVyciA9PSAwKSB7CkBAIC0yNjgxLDggKzI3ODEsMTAgQEAKIAl9CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQllbHNlCisJZWxzZSB7CisJCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJhcnJheV9zdGF0ZSIpOwogCQlyZXR1cm4gbGVuOworCX0KIH0KIHN0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfYXJyYXlfc3RhdGUgPQogX19BVFRSKGFycmF5X3N0YXRlLCBTX0lSVUdPfFNfSVdVU1IsIGFycmF5X3N0YXRlX3Nob3csIGFycmF5X3N0YXRlX3N0b3JlKTsKQEAgLTI3ODUsNyArMjg4Nyw3IEBACiAJcmV0dXJuIHNwcmludGYocGFnZSwgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPnNpemUpOwogfQogCi1zdGF0aWMgaW50IHVwZGF0ZV9zaXplKG1kZGV2X3QgKm1kZGV2LCB1bnNpZ25lZCBsb25nIHNpemUpOworc3RhdGljIGludCB1cGRhdGVfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3QgbnVtX3NlY3RvcnMpOwogCiBzdGF0aWMgc3NpemVfdAogc2l6ZV9zdG9yZShtZGRldl90ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQpAQCAtMjgwMiw3ICsyOTA0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobWRkZXYtPnBlcnMpIHsKLQkJZXJyID0gdXBkYXRlX3NpemUobWRkZXYsIHNpemUpOworCQllcnIgPSB1cGRhdGVfc2l6ZShtZGRldiwgc2l6ZSAqIDIpOwogCQltZF91cGRhdGVfc2IobWRkZXYsIDEpOwogCX0gZWxzZSB7CiAJCWlmIChtZGRldi0+c2l6ZSA9PSAwIHx8CkBAIC0yODk5LDcgKzMwMDEsNyBAQAogCQkJCXR5cGUgPSAiY2hlY2siOwogCQkJZWxzZQogCQkJCXR5cGUgPSAicmVwYWlyIjsKLQkJfSBlbHNlCisJCX0gZWxzZSBpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVDT1ZFUiwgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCQl0eXBlID0gInJlY292ZXIiOwogCX0KIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIHR5cGUpOwpAQCAtMjkyMSwxNSArMzAyMywxOSBAQAogCX0gZWxzZSBpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSkgfHwKIAkJICAgdGVzdF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJcmV0dXJuIC1FQlVTWTsKLQllbHNlIGlmIChjbWRfbWF0Y2gocGFnZSwgInJlc3luYyIpIHx8IGNtZF9tYXRjaChwYWdlLCAicmVjb3ZlciIpKQorCWVsc2UgaWYgKGNtZF9tYXRjaChwYWdlLCAicmVzeW5jIikpCiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKLQllbHNlIGlmIChjbWRfbWF0Y2gocGFnZSwgInJlc2hhcGUiKSkgeworCWVsc2UgaWYgKGNtZF9tYXRjaChwYWdlLCAicmVjb3ZlciIpKSB7CisJCXNldF9iaXQoTURfUkVDT1ZFUllfUkVDT1ZFUiwgJm1kZGV2LT5yZWNvdmVyeSk7CisJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKKwl9IGVsc2UgaWYgKGNtZF9tYXRjaChwYWdlLCAicmVzaGFwZSIpKSB7CiAJCWludCBlcnI7CiAJCWlmIChtZGRldi0+cGVycy0+c3RhcnRfcmVzaGFwZSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWVyciA9IG1kZGV2LT5wZXJzLT5zdGFydF9yZXNoYXBlKG1kZGV2KTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CisJCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJkZWdyYWRlZCIpOwogCX0gZWxzZSB7CiAJCWlmIChjbWRfbWF0Y2gocGFnZSwgImNoZWNrIikpCiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCAmbWRkZXYtPnJlY292ZXJ5KTsKQEAgLTI5NDAsNiArMzA0Niw3IEBACiAJfQogCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2FjdGlvbiIpOwogCXJldHVybiBsZW47CiB9CiAKQEAgLTMwNDksMTEgKzMxNTYsMTEgQEAKIHN5bmNfc3BlZWRfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIHJlc3luYywgZHQsIGRiOwotCXJlc3luYyA9IChtZGRldi0+Y3Vycl9tYXJrX2NudCAtIGF0b21pY19yZWFkKCZtZGRldi0+cmVjb3ZlcnlfYWN0aXZlKSk7Ci0JZHQgPSAoKGppZmZpZXMgLSBtZGRldi0+cmVzeW5jX21hcmspIC8gSFopOworCXJlc3luYyA9IG1kZGV2LT5jdXJyX21hcmtfY250IC0gYXRvbWljX3JlYWQoJm1kZGV2LT5yZWNvdmVyeV9hY3RpdmUpOworCWR0ID0gKGppZmZpZXMgLSBtZGRldi0+cmVzeW5jX21hcmspIC8gSFo7CiAJaWYgKCFkdCkgZHQrKzsKLQlkYiA9IHJlc3luYyAtIChtZGRldi0+cmVzeW5jX21hcmtfY250KTsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWxkXG4iLCBkYi9kdC8yKTsgLyogSy9zZWMgKi8KKwlkYiA9IHJlc3luYyAtIG1kZGV2LT5yZXN5bmNfbWFya19jbnQ7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVsdVxuIiwgZGIvZHQvMik7IC8qIEsvc2VjICovCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfc3luY19zcGVlZCA9IF9fQVRUUl9STyhzeW5jX3NwZWVkKTsKQEAgLTMwNzUsNiArMzE4MiwzNiBAQAogc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9zeW5jX2NvbXBsZXRlZCA9IF9fQVRUUl9STyhzeW5jX2NvbXBsZXRlZCk7CiAKIHN0YXRpYyBzc2l6ZV90CittaW5fc3luY19zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQoreworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+cmVzeW5jX21pbik7Cit9CitzdGF0aWMgc3NpemVfdAorbWluX3N5bmNfc3RvcmUobWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbWluOworCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAxMCwgJm1pbikpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtaW4gPiBtZGRldi0+cmVzeW5jX21heCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JVTk5JTkcsICZtZGRldi0+cmVjb3ZlcnkpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogTXVzdCBiZSBhIG11bHRpcGxlIG9mIGNodW5rX3NpemUgKi8KKwlpZiAobWRkZXYtPmNodW5rX3NpemUpIHsKKwkJaWYgKG1pbiAmIChzZWN0b3JfdCkoKG1kZGV2LT5jaHVua19zaXplPj45KS0xKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwltZGRldi0+cmVzeW5jX21pbiA9IG1pbjsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfbWluX3N5bmMgPQorX19BVFRSKHN5bmNfbWluLCBTX0lSVUdPfFNfSVdVU1IsIG1pbl9zeW5jX3Nob3csIG1pbl9zeW5jX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QKIG1heF9zeW5jX3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCiB7CiAJaWYgKG1kZGV2LT5yZXN5bmNfbWF4ID09IE1heFNlY3RvcikKQEAgLTMwODksOSArMzIyNiwxMCBAQAogCWlmIChzdHJuY21wKGJ1ZiwgIm1heCIsIDMpID09IDApCiAJCW1kZGV2LT5yZXN5bmNfbWF4ID0gTWF4U2VjdG9yOwogCWVsc2UgewotCQljaGFyICplcDsKLQkJdW5zaWduZWQgbG9uZyBsb25nIG1heCA9IHNpbXBsZV9zdHJ0b3VsbChidWYsICZlcCwgMTApOwotCQlpZiAoZXAgPT0gYnVmIHx8ICgqZXAgIT0gMCAmJiAqZXAgIT0gJ1xuJykpCisJCXVuc2lnbmVkIGxvbmcgbG9uZyBtYXg7CisJCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAxMCwgJm1heCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG1heCA8IG1kZGV2LT5yZXN5bmNfbWluKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChtYXggPCBtZGRldi0+cmVzeW5jX21heCAmJgogCQkgICAgdGVzdF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSkpCkBAIC0zMjIyLDYgKzMzNjAsNyBAQAogCSZtZF9zeW5jX3NwZWVkLmF0dHIsCiAJJm1kX3N5bmNfZm9yY2VfcGFyYWxsZWwuYXR0ciwKIAkmbWRfc3luY19jb21wbGV0ZWQuYXR0ciwKKwkmbWRfbWluX3N5bmMuYXR0ciwKIAkmbWRfbWF4X3N5bmMuYXR0ciwKIAkmbWRfc3VzcGVuZF9sby5hdHRyLAogCSZtZF9zdXNwZW5kX2hpLmF0dHIsCkBAIC0zMzI2LDkgKzM0NjUsOSBAQAogCWRpc2stPnF1ZXVlID0gbWRkZXYtPnF1ZXVlOwogCWFkZF9kaXNrKGRpc2spOwogCW1kZGV2LT5nZW5kaXNrID0gZGlzazsKLQltdXRleF91bmxvY2soJmRpc2tzX211dGV4KTsKIAllcnJvciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZtZGRldi0+a29iaiwgJm1kX2t0eXBlLCAmZGlzay0+ZGV2LmtvYmosCiAJCQkJICAgICAiJXMiLCAibWQiKTsKKwltdXRleF91bmxvY2soJmRpc2tzX211dGV4KTsKIAlpZiAoZXJyb3IpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kOiBjYW5ub3QgcmVnaXN0ZXIgJXMvbWQgLSBuYW1lIGluIHVzZVxuIiwKIAkJICAgICAgIGRpc2stPmRpc2tfbmFtZSk7CkBAIC0zMzQxLDcgKzM0ODAsMTEgQEAKIHsKIAltZGRldl90ICptZGRldiA9IChtZGRldl90ICopIGRhdGE7CiAKLQltZGRldi0+c2FmZW1vZGUgPSAxOworCWlmICghYXRvbWljX3JlYWQoJm1kZGV2LT53cml0ZXNfcGVuZGluZykpIHsKKwkJbWRkZXYtPnNhZmVtb2RlID0gMTsKKwkJaWYgKG1kZGV2LT5leHRlcm5hbCkKKwkJCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJhcnJheV9zdGF0ZSIpOworCX0KIAltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogfQogCkBAIC0zNDMyLDIyICszNTc1LDIzIEBACiAJCSAqIFdlIGRvbid0IHdhbnQgdGhlIGRhdGEgdG8gb3ZlcmxhcCB0aGUgbWV0YWRhdGEsCiAJCSAqIEludGVybmFsIEJpdG1hcCBpc3N1ZXMgaGFzIGhhbmRsZWQgZWxzZXdoZXJlLgogCQkgKi8KLQkJaWYgKHJkZXYtPmRhdGFfb2Zmc2V0IDwgcmRldi0+c2Jfb2Zmc2V0KSB7CisJCWlmIChyZGV2LT5kYXRhX29mZnNldCA8IHJkZXYtPnNiX3N0YXJ0KSB7CiAJCQlpZiAobWRkZXYtPnNpemUgJiYKIAkJCSAgICByZGV2LT5kYXRhX29mZnNldCArIG1kZGV2LT5zaXplKjIKLQkJCSAgICA+IHJkZXYtPnNiX29mZnNldCoyKSB7CisJCQkgICAgPiByZGV2LT5zYl9zdGFydCkgewogCQkJCXByaW50aygibWQ6ICVzOiBkYXRhIG92ZXJsYXBzIG1ldGFkYXRhXG4iLAogCQkJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmIChyZGV2LT5zYl9vZmZzZXQqMiArIHJkZXYtPnNiX3NpemUvNTEyCisJCQlpZiAocmRldi0+c2Jfc3RhcnQgKyByZGV2LT5zYl9zaXplLzUxMgogCQkJICAgID4gcmRldi0+ZGF0YV9vZmZzZXQpIHsKIAkJCQlwcmludGsoIm1kOiAlczogbWV0YWRhdGEgb3ZlcmxhcHMgZGF0YVxuIiwKIAkJCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KKwkJc3lzZnNfbm90aWZ5KCZyZGV2LT5rb2JqLCBOVUxMLCAic3RhdGUiKTsKIAl9CiAKIAltZF9wcm9iZShtZGRldi0+dW5pdCwgTlVMTCwgTlVMTCk7CkBAIC0zNTE5LDcgKzM2NjMsOSBAQAogCQltZGRldi0+cm8gPSAyOyAvKiByZWFkLW9ubHksIGJ1dCBzd2l0Y2ggb24gZmlyc3Qgd3JpdGUgKi8KIAogCWVyciA9IG1kZGV2LT5wZXJzLT5ydW4obWRkZXYpOwotCWlmICghZXJyICYmIG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgIm1kOiBwZXJzLT5ydW4oKSBmYWlsZWQgLi4uXG4iKTsKKwllbHNlIGlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KSB7CiAJCWVyciA9IGJpdG1hcF9jcmVhdGUobWRkZXYpOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIGJpdG1hcCAoJWQpXG4iLApAQCAtMzUyOCw3ICszNjc0LDYgQEAKIAkJfQogCX0KIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibWQ6IHBlcnMtPnJ1bigpIGZhaWxlZCAuLi5cbiIpOwogCQltb2R1bGVfcHV0KG1kZGV2LT5wZXJzLT5vd25lcik7CiAJCW1kZGV2LT5wZXJzID0gTlVMTDsKIAkJYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwpAQCAtMzU2Myw3ICszNzA4LDcgQEAKIAlpZiAobWRkZXYtPmZsYWdzKQogCQltZF91cGRhdGVfc2IobWRkZXYsIDApOwogCi0Jc2V0X2NhcGFjaXR5KGRpc2ssIG1kZGV2LT5hcnJheV9zaXplPDwxKTsKKwlzZXRfY2FwYWNpdHkoZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCiAJLyogSWYgd2UgY2FsbCBibGtfcXVldWVfbWFrZV9yZXF1ZXN0IGhlcmUsIGl0IHdpbGwKIAkgKiByZS1pbml0aWFsaXNlIG1heF9zZWN0b3JzIGV0YyB3aGljaCBtYXkgaGF2ZSBiZWVuCkBAIC0zNjA4LDYgKzM3NTMsOSBAQAogCiAJbWRkZXYtPmNoYW5nZWQgPSAxOwogCW1kX25ld19ldmVudChtZGRldik7CisJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgImFycmF5X3N0YXRlIik7CisJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfYWN0aW9uIik7CisJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgImRlZ3JhZGVkIik7CiAJa29iamVjdF91ZXZlbnQoJm1kZGV2LT5nZW5kaXNrLT5kZXYua29iaiwgS09CSl9DSEFOR0UpOwogCXJldHVybiAwOwogfQpAQCAtMzYxNSwzOCArMzc2MywyNSBAQAogc3RhdGljIGludCByZXN0YXJ0X2FycmF5KG1kZGV2X3QgKm1kZGV2KQogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gbWRkZXYtPmdlbmRpc2s7Ci0JaW50IGVycjsKIAotCS8qCi0JICogQ29tcGxhaW4gaWYgaXQgaGFzIG5vIGRldmljZXMKLQkgKi8KLQllcnIgPSAtRU5YSU87CisJLyogQ29tcGxhaW4gaWYgaXQgaGFzIG5vIGRldmljZXMgKi8KIAlpZiAobGlzdF9lbXB0eSgmbWRkZXYtPmRpc2tzKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAobWRkZXYtPnBlcnMpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlpZiAoIW1kZGV2LT5ybykKLQkJCWdvdG8gb3V0OwotCi0JCW1kZGV2LT5zYWZlbW9kZSA9IDA7Ci0JCW1kZGV2LT5ybyA9IDA7Ci0JCXNldF9kaXNrX3JvKGRpc2ssIDApOwotCi0JCXByaW50ayhLRVJOX0lORk8gIm1kOiAlcyBzd2l0Y2hlZCB0byByZWFkLXdyaXRlIG1vZGUuXG4iLAotCQkJbWRuYW1lKG1kZGV2KSk7Ci0JCS8qCi0JCSAqIEtpY2sgcmVjb3Zlcnkgb3IgcmVzeW5jIGlmIG5lY2Vzc2FyeQotCQkgKi8KLQkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwotCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT5zeW5jX3RocmVhZCk7Ci0JCWVyciA9IDA7Ci0JfSBlbHNlCi0JCWVyciA9IC1FSU5WQUw7Ci0KLW91dDoKLQlyZXR1cm4gZXJyOworCQlyZXR1cm4gLUVOWElPOworCWlmICghbWRkZXYtPnBlcnMpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghbWRkZXYtPnJvKQorCQlyZXR1cm4gLUVCVVNZOworCW1kZGV2LT5zYWZlbW9kZSA9IDA7CisJbWRkZXYtPnJvID0gMDsKKwlzZXRfZGlza19ybyhkaXNrLCAwKTsKKwlwcmludGsoS0VSTl9JTkZPICJtZDogJXMgc3dpdGNoZWQgdG8gcmVhZC13cml0ZSBtb2RlLlxuIiwKKwkJbWRuYW1lKG1kZGV2KSk7CisJLyogS2ljayByZWNvdmVyeSBvciByZXN5bmMgaWYgbmVjZXNzYXJ5ICovCisJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOworCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CisJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+c3luY190aHJlYWQpOworCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJhcnJheV9zdGF0ZSIpOworCXJldHVybiAwOwogfQogCiAvKiBzaW1pbGFyIHRvIGRlbnlfd3JpdGVfYWNjZXNzLCBidXQgYWNjb3VudHMgZm9yIG91ciBob2xkaW5nIGEgcmVmZXJlbmNlCkBAIC0zNjgwLDE2ICszODE1LDE3IEBACiAgKiAgIDEgLSBzd2l0Y2ggdG8gcmVhZG9ubHkKICAqICAgMiAtIHN0b3AgYnV0IGRvIG5vdCBkaXNhc3NlbWJsZSBhcnJheQogICovCi1zdGF0aWMgaW50IGRvX21kX3N0b3AobWRkZXZfdCAqIG1kZGV2LCBpbnQgbW9kZSkKK3N0YXRpYyBpbnQgZG9fbWRfc3RvcChtZGRldl90ICogbWRkZXYsIGludCBtb2RlLCBpbnQgaXNfb3BlbikKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IG1kZGV2LT5nZW5kaXNrOwogCisJaWYgKGF0b21pY19yZWFkKCZtZGRldi0+b3BlbmVycykgPiBpc19vcGVuKSB7CisJCXByaW50aygibWQ6ICVzIHN0aWxsIGluIHVzZS5cbiIsbWRuYW1lKG1kZGV2KSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCiAJaWYgKG1kZGV2LT5wZXJzKSB7Ci0JCWlmIChhdG9taWNfcmVhZCgmbWRkZXYtPmFjdGl2ZSk+MikgewotCQkJcHJpbnRrKCJtZDogJXMgc3RpbGwgaW4gdXNlLlxuIixtZG5hbWUobWRkZXYpKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KIAogCQlpZiAobWRkZXYtPnN5bmNfdGhyZWFkKSB7CiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX0ZST1pFTiwgJm1kZGV2LT5yZWNvdmVyeSk7CkBAIC0zNzczLDEwICszOTA5LDExIEBACiAKIAkJZXhwb3J0X2FycmF5KG1kZGV2KTsKIAotCQltZGRldi0+YXJyYXlfc2l6ZSA9IDA7CisJCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gMDsKIAkJbWRkZXYtPnNpemUgPSAwOwogCQltZGRldi0+cmFpZF9kaXNrcyA9IDA7CiAJCW1kZGV2LT5yZWNvdmVyeV9jcCA9IDA7CisJCW1kZGV2LT5yZXN5bmNfbWluID0gMDsKIAkJbWRkZXYtPnJlc3luY19tYXggPSBNYXhTZWN0b3I7CiAJCW1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gTWF4U2VjdG9yOwogCQltZGRldi0+ZXh0ZXJuYWwgPSAwOwpAQCAtMzgxMSw2ICszOTQ4LDcgQEAKIAkJCW1kbmFtZShtZGRldikpOwogCWVyciA9IDA7CiAJbWRfbmV3X2V2ZW50KG1kZGV2KTsKKwlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAiYXJyYXlfc3RhdGUiKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzgzNiw3ICszOTc0LDcgQEAKIAllcnIgPSBkb19tZF9ydW4gKG1kZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kOiBkb19tZF9ydW4oKSByZXR1cm5lZCAlZFxuIiwgZXJyKTsKLQkJZG9fbWRfc3RvcCAobWRkZXYsIDApOworCQlkb19tZF9zdG9wIChtZGRldiwgMCwgMCk7CiAJfQogfQogCkBAIC0zOTI3LDggKzQwNjUsMTAgQEAKIAkJLyogb24gc3VjY2VzcywgY2FuZGlkYXRlcyB3aWxsIGJlIGVtcHR5LCBvbiBlcnJvcgogCQkgKiBpdCB3b24ndC4uLgogCQkgKi8KLQkJcmRldl9mb3JfZWFjaF9saXN0KHJkZXYsIHRtcCwgY2FuZGlkYXRlcykKKwkJcmRldl9mb3JfZWFjaF9saXN0KHJkZXYsIHRtcCwgY2FuZGlkYXRlcykgeworCQkJbGlzdF9kZWxfaW5pdCgmcmRldi0+c2FtZV9zZXQpOwogCQkJZXhwb3J0X3JkZXYocmRldik7CisJCX0KIAkJbWRkZXZfcHV0KG1kZGV2KTsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IC4uLiBhdXRvcnVuIERPTkUuXG4iKTsKQEAgLTQwMDksOSArNDE0OSwxMSBAQAogCWNoYXIgKnB0ciwgKmJ1ZiA9IE5VTEw7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQltZF9hbGxvd193cml0ZShtZGRldik7CisJaWYgKG1kX2FsbG93X3dyaXRlKG1kZGV2KSkKKwkJZmlsZSA9IGttYWxsb2Moc2l6ZW9mKCpmaWxlKSwgR0ZQX05PSU8pOworCWVsc2UKKwkJZmlsZSA9IGttYWxsb2Moc2l6ZW9mKCpmaWxlKSwgR0ZQX0tFUk5FTCk7CiAKLQlmaWxlID0ga21hbGxvYyhzaXplb2YoKmZpbGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwogCkBAIC00MDQ0LDE1ICs0MTg2LDEyIEBACiBzdGF0aWMgaW50IGdldF9kaXNrX2luZm8obWRkZXZfdCAqIG1kZGV2LCB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAltZHVfZGlza19pbmZvX3QgaW5mbzsKLQl1bnNpZ25lZCBpbnQgbnI7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgYXJnLCBzaXplb2YoaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW5yID0gaW5mby5udW1iZXI7Ci0KLQlyZGV2ID0gZmluZF9yZGV2X25yKG1kZGV2LCBucik7CisJcmRldiA9IGZpbmRfcmRldl9ucihtZGRldiwgaW5mby5udW1iZXIpOwogCWlmIChyZGV2KSB7CiAJCWluZm8ubWFqb3IgPSBNQUpPUihyZGV2LT5iZGV2LT5iZF9kZXYpOwogCQlpbmZvLm1pbm9yID0gTUlOT1IocmRldi0+YmRldi0+YmRfZGV2KTsKQEAgLTQxNzIsOCArNDMxMSwxMiBAQAogCQl9CiAJCWlmIChlcnIpCiAJCQlleHBvcnRfcmRldihyZGV2KTsKKwkJZWxzZQorCQkJc3lzZnNfbm90aWZ5KCZyZGV2LT5rb2JqLCBOVUxMLCAic3RhdGUiKTsKIAogCQltZF91cGRhdGVfc2IobWRkZXYsIDEpOworCQlpZiAobWRkZXYtPmRlZ3JhZGVkKQorCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9SRUNPVkVSLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCQlyZXR1cm4gZXJyOwpAQCAtNDIxMiwxMCArNDM1NSwxMCBAQAogCiAJCWlmICghbWRkZXYtPnBlcnNpc3RlbnQpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIm1kOiBub25wZXJzaXN0ZW50IHN1cGVyYmxvY2sgLi4uXG4iKTsKLQkJCXJkZXYtPnNiX29mZnNldCA9IHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gQkxPQ0tfU0laRV9CSVRTOworCQkJcmRldi0+c2Jfc3RhcnQgPSByZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplIC8gNTEyOwogCQl9IGVsc2UgCi0JCQlyZGV2LT5zYl9vZmZzZXQgPSBjYWxjX2Rldl9zYm9mZnNldChyZGV2LT5iZGV2KTsKLQkJcmRldi0+c2l6ZSA9IGNhbGNfZGV2X3NpemUocmRldiwgbWRkZXYtPmNodW5rX3NpemUpOworCQkJcmRldi0+c2Jfc3RhcnQgPSBjYWxjX2Rldl9zYm9mZnNldChyZGV2LT5iZGV2KTsKKwkJcmRldi0+c2l6ZSA9IGNhbGNfbnVtX3NlY3RvcnMocmRldiwgbWRkZXYtPmNodW5rX3NpemUpIC8gMjsKIAogCQllcnIgPSBiaW5kX3JkZXZfdG9fYXJyYXkocmRldiwgbWRkZXYpOwogCQlpZiAoZXJyKSB7CkBAIC00MjMyLDkgKzQzNzUsNiBAQAogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAltZGtfcmRldl90ICpyZGV2OwogCi0JaWYgKCFtZGRldi0+cGVycykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlyZGV2ID0gZmluZF9yZGV2KG1kZGV2LCBkZXYpOwogCWlmICghcmRldikKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTQyNTcsNyArNDM5Nyw2IEBACiB7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCWludCBlcnI7Ci0JdW5zaWduZWQgaW50IHNpemU7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAogCWlmICghbWRkZXYtPnBlcnMpCkBAIC00Mjg1LDEzICs0NDI0LDExIEBACiAJfQogCiAJaWYgKG1kZGV2LT5wZXJzaXN0ZW50KQotCQlyZGV2LT5zYl9vZmZzZXQgPSBjYWxjX2Rldl9zYm9mZnNldChyZGV2LT5iZGV2KTsKKwkJcmRldi0+c2Jfc3RhcnQgPSBjYWxjX2Rldl9zYm9mZnNldChyZGV2LT5iZGV2KTsKIAllbHNlCi0JCXJkZXYtPnNiX29mZnNldCA9Ci0JCQlyZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IEJMT0NLX1NJWkVfQklUUzsKKwkJcmRldi0+c2Jfc3RhcnQgPSByZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplIC8gNTEyOwogCi0Jc2l6ZSA9IGNhbGNfZGV2X3NpemUocmRldiwgbWRkZXYtPmNodW5rX3NpemUpOwotCXJkZXYtPnNpemUgPSBzaXplOworCXJkZXYtPnNpemUgPSBjYWxjX251bV9zZWN0b3JzKHJkZXYsIG1kZGV2LT5jaHVua19zaXplKSAvIDI7CiAKIAlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgCkBAIC00NDc2LDI0ICs0NjEzLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXBkYXRlX3NpemUobWRkZXZfdCAqbWRkZXYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyBpbnQgdXBkYXRlX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IG51bV9zZWN0b3JzKQogewogCW1ka19yZGV2X3QgKiByZGV2OwogCWludCBydjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0JaW50IGZpdCA9IChzaXplID09IDApOworCWludCBmaXQgPSAobnVtX3NlY3RvcnMgPT0gMCk7CiAKIAlpZiAobWRkZXYtPnBlcnMtPnJlc2l6ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBUaGUgInNpemUiIGlzIHRoZSBhbW91bnQgb2YgZWFjaCBkZXZpY2UgdGhhdCBpcyB1c2VkLgotCSAqIFRoaXMgY2FuIG9ubHkgbWFrZSBzZW5zZSBmb3IgYXJyYXlzIHdpdGggcmVkdW5kYW5jeS4KLQkgKiBsaW5lYXIgYW5kIHJhaWQwIGFsd2F5cyB1c2Ugd2hhdGV2ZXIgc3BhY2UgaXMgYXZhaWxhYmxlCi0JICogV2UgY2FuIG9ubHkgY29uc2lkZXIgY2hhbmdpbmcgdGhlIHNpemUgaWYgbm8gcmVzeW5jCi0JICogb3IgcmVjb25zdHJ1Y3Rpb24gaXMgaGFwcGVuaW5nLCBhbmQgaWYgdGhlIG5ldyBzaXplCi0JICogaXMgYWNjZXB0YWJsZS4gSXQgbXVzdCBmaXQgYmVmb3JlIHRoZSBzYl9vZmZzZXQgb3IsCi0JICogaWYgdGhhdCBpcyA8ZGF0YV9vZmZzZXQsIGl0IG11c3QgZml0IGJlZm9yZSB0aGUKLQkgKiBzaXplIG9mIGVhY2ggZGV2aWNlLgotCSAqIElmIHNpemUgaXMgemVybywgd2UgZmluZCB0aGUgbGFyZ2VzdCBzaXplIHRoYXQgZml0cy4KKwkvKiBUaGUgIm51bV9zZWN0b3JzIiBpcyB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgb2YgZWFjaCBkZXZpY2UgdGhhdAorCSAqIGlzIHVzZWQuICBUaGlzIGNhbiBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGFycmF5cyB3aXRoIHJlZHVuZGFuY3kuCisJICogbGluZWFyIGFuZCByYWlkMCBhbHdheXMgdXNlIHdoYXRldmVyIHNwYWNlIGlzIGF2YWlsYWJsZS4gV2UgY2FuIG9ubHkKKwkgKiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIG51bWJlciBpZiBubyByZXN5bmMgb3IgcmVjb25zdHJ1Y3Rpb24gaXMKKwkgKiBoYXBwZW5pbmcsIGFuZCBpZiB0aGUgbmV3IHNpemUgaXMgYWNjZXB0YWJsZS4gSXQgbXVzdCBmaXQgYmVmb3JlIHRoZQorCSAqIHNiX3N0YXJ0IG9yLCBpZiB0aGF0IGlzIDxkYXRhX29mZnNldCwgaXQgbXVzdCBmaXQgYmVmb3JlIHRoZSBzaXplCisJICogb2YgZWFjaCBkZXZpY2UuICBJZiBudW1fc2VjdG9ycyBpcyB6ZXJvLCB3ZSBmaW5kIHRoZSBsYXJnZXN0IHNpemUKKwkgKiB0aGF0IGZpdHMuCisKIAkgKi8KIAlpZiAobWRkZXYtPnN5bmNfdGhyZWFkKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtNDUwMSwxOSArNDYzOCwyMCBAQAogCQlzZWN0b3JfdCBhdmFpbDsKIAkJYXZhaWwgPSByZGV2LT5zaXplICogMjsKIAotCQlpZiAoZml0ICYmIChzaXplID09IDAgfHwgc2l6ZSA+IGF2YWlsLzIpKQotCQkJc2l6ZSA9IGF2YWlsLzI7Ci0JCWlmIChhdmFpbCA8ICgoc2VjdG9yX3Qpc2l6ZSA8PCAxKSkKKwkJaWYgKGZpdCAmJiAobnVtX3NlY3RvcnMgPT0gMCB8fCBudW1fc2VjdG9ycyA+IGF2YWlsKSkKKwkJCW51bV9zZWN0b3JzID0gYXZhaWw7CisJCWlmIChhdmFpbCA8IG51bV9zZWN0b3JzKQogCQkJcmV0dXJuIC1FTk9TUEM7CiAJfQotCXJ2ID0gbWRkZXYtPnBlcnMtPnJlc2l6ZShtZGRldiwgKHNlY3Rvcl90KXNpemUgKjIpOworCXJ2ID0gbWRkZXYtPnBlcnMtPnJlc2l6ZShtZGRldiwgbnVtX3NlY3RvcnMpOwogCWlmICghcnYpIHsKIAkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAogCQliZGV2ID0gYmRnZXRfZGlzayhtZGRldi0+Z2VuZGlzaywgMCk7CiAJCWlmIChiZGV2KSB7CiAJCQltdXRleF9sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7Ci0JCQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsIChsb2ZmX3QpbWRkZXYtPmFycmF5X3NpemUgPDwgMTApOworCQkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLAorCQkJCSAgICAgKGxvZmZfdCltZGRldi0+YXJyYXlfc2VjdG9ycyA8PCA5KTsKIAkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJYmRwdXQoYmRldik7CiAJCX0KQEAgLTQ1ODgsNyArNDcyNiw3IEBACiAJCQlyZXR1cm4gbWRkZXYtPnBlcnMtPnJlY29uZmlnKG1kZGV2LCBpbmZvLT5sYXlvdXQsIC0xKTsKIAl9CiAJaWYgKGluZm8tPnNpemUgPj0gMCAmJiBtZGRldi0+c2l6ZSAhPSBpbmZvLT5zaXplKQotCQlydiA9IHVwZGF0ZV9zaXplKG1kZGV2LCBpbmZvLT5zaXplKTsKKwkJcnYgPSB1cGRhdGVfc2l6ZShtZGRldiwgKHNlY3Rvcl90KWluZm8tPnNpemUgKiAyKTsKIAogCWlmIChtZGRldi0+cmFpZF9kaXNrcyAgICAhPSBpbmZvLT5yYWlkX2Rpc2tzKQogCQlydiA9IHVwZGF0ZV9yYWlkX2Rpc2tzKG1kZGV2LCBpbmZvLT5yYWlkX2Rpc2tzKTsKQEAgLTQ2NDEsNiArNDc3OSwxMiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogV2UgaGF2ZSBhIHByb2JsZW0gaGVyZSA6IHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGdpdmUgYSBDSFMKKyAqIHZpcnR1YWwgZ2VvbWV0cnkuIFdlIGN1cnJlbnRseSBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBhIDIgaGVhZHMKKyAqIDQgc2VjdG9ycyAod2l0aCBhIEJJRyBudW1iZXIgb2YgY3lsaW5kZXJzLi4uKS4gVGhpcyBkcml2ZXMKKyAqIGRvc2ZzIGp1c3QgbWFkLi4uIDstKQorICovCiBzdGF0aWMgaW50IG1kX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKIHsKIAltZGRldl90ICptZGRldiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKQEAgLTQ3ODUsMTkgKzQ5MjksMTMgQEAKIAkJCWdvdG8gZG9uZV91bmxvY2s7CiAKIAkJY2FzZSBTVE9QX0FSUkFZOgotCQkJZXJyID0gZG9fbWRfc3RvcCAobWRkZXYsIDApOworCQkJZXJyID0gZG9fbWRfc3RvcCAobWRkZXYsIDAsIDEpOwogCQkJZ290byBkb25lX3VubG9jazsKIAogCQljYXNlIFNUT1BfQVJSQVlfUk86Ci0JCQllcnIgPSBkb19tZF9zdG9wIChtZGRldiwgMSk7CisJCQllcnIgPSBkb19tZF9zdG9wIChtZGRldiwgMSwgMSk7CiAJCQlnb3RvIGRvbmVfdW5sb2NrOwogCi0JLyoKLQkgKiBXZSBoYXZlIGEgcHJvYmxlbSBoZXJlIDogdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZ2l2ZSBhIENIUwotCSAqIHZpcnR1YWwgZ2VvbWV0cnkuIFdlIGN1cnJlbnRseSBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBhIDIgaGVhZHMKLQkgKiA0IHNlY3RvcnMgKHdpdGggYSBCSUcgbnVtYmVyIG9mIGN5bGluZGVycy4uLikuIFRoaXMgZHJpdmVzCi0JICogZG9zZnMganVzdCBtYWQuLi4gOy0pCi0JICovCiAJfQogCiAJLyoKQEAgLTQ4MDcsMTMgKzQ5NDUsMTIgQEAKIAkgKiBoZXJlIGFuZCBoaXQgdGhlICdkZWZhdWx0JyBiZWxvdywgc28gb25seSBkaXNhbGxvdwogCSAqICdtZCcgaW9jdGxzLCBhbmQgc3dpdGNoIHRvIHJ3IG1vZGUgaWYgc3RhcnRlZCBhdXRvLXJlYWRvbmx5LgogCSAqLwotCWlmIChfSU9DX1RZUEUoY21kKSA9PSBNRF9NQUpPUiAmJgotCSAgICBtZGRldi0+cm8gJiYgbWRkZXYtPnBlcnMpIHsKKwlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gTURfTUFKT1IgJiYgbWRkZXYtPnJvICYmIG1kZGV2LT5wZXJzKSB7CiAJCWlmIChtZGRldi0+cm8gPT0gMikgewogCQkJbWRkZXYtPnJvID0gMDsKLQkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwotCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotCisJCQlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAiYXJyYXlfc3RhdGUiKTsKKwkJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJCX0gZWxzZSB7CiAJCQllcnIgPSAtRVJPRlM7CiAJCQlnb3RvIGFib3J0X3VubG9jazsKQEAgLTQ4ODMsNiArNTAyMCw3IEBACiAKIAllcnIgPSAwOwogCW1kZGV2X2dldChtZGRldik7CisJYXRvbWljX2luYygmbWRkZXYtPm9wZW5lcnMpOwogCW1kZGV2X3VubG9jayhtZGRldik7CiAKIAljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKQEAgLTQ4OTUsNiArNTAzMyw3IEBACiAgCW1kZGV2X3QgKm1kZGV2ID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJQlVHX09OKCFtZGRldik7CisJYXRvbWljX2RlYygmbWRkZXYtPm9wZW5lcnMpOwogCW1kZGV2X3B1dChtZGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTUwMjksNiArNTE2OCw5IEBACiAJaWYgKCFtZGRldi0+cGVycy0+ZXJyb3JfaGFuZGxlcikKIAkJcmV0dXJuOwogCW1kZGV2LT5wZXJzLT5lcnJvcl9oYW5kbGVyKG1kZGV2LHJkZXYpOworCWlmIChtZGRldi0+ZGVncmFkZWQpCisJCXNldF9iaXQoTURfUkVDT1ZFUllfUkVDT1ZFUiwgJm1kZGV2LT5yZWNvdmVyeSk7CisJc2V0X2JpdChTdGF0ZUNoYW5nZWQsICZyZGV2LT5mbGFncyk7CiAJc2V0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKQEAgLTUyNTgsMTAgKzU0MDAsMTEgQEAKIAkJaWYgKCFsaXN0X2VtcHR5KCZtZGRldi0+ZGlza3MpKSB7CiAJCQlpZiAobWRkZXYtPnBlcnMpCiAJCQkJc2VxX3ByaW50ZihzZXEsICJcbiAgICAgICVsbHUgYmxvY2tzIiwKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+YXJyYXlfc2l6ZSk7CisJCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgIG1kZGV2LT5hcnJheV9zZWN0b3JzIC8gMik7CiAJCQllbHNlCiAJCQkJc2VxX3ByaW50ZihzZXEsICJcbiAgICAgICVsbHUgYmxvY2tzIiwKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKKwkJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKIAkJfQogCQlpZiAobWRkZXYtPnBlcnNpc3RlbnQpIHsKIAkJCWlmIChtZGRldi0+bWFqb3JfdmVyc2lvbiAhPSAwIHx8CkBAIC01MzkxLDEyICs1NTM0LDEyIEBACiBzdGF0aWMgaW50IGlzX21kZGV2X2lkbGUobWRkZXZfdCAqbWRkZXYpCiB7CiAJbWRrX3JkZXZfdCAqIHJkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCWludCBpZGxlOwogCWxvbmcgY3Vycl9ldmVudHM7CiAKIAlpZGxlID0gMTsKLQlyZGV2X2Zvcl9lYWNoKHJkZXYsIHRtcCwgbWRkZXYpIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmRldl9mb3JfZWFjaF9yY3UocmRldiwgbWRkZXYpIHsKIAkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSByZGV2LT5iZGV2LT5iZF9jb250YWlucy0+YmRfZGlzazsKIAkJY3Vycl9ldmVudHMgPSBkaXNrX3N0YXRfcmVhZChkaXNrLCBzZWN0b3JzWzBdKSArIAogCQkJCWRpc2tfc3RhdF9yZWFkKGRpc2ssIHNlY3RvcnNbMV0pIC0gCkBAIC01NDI4LDYgKzU1NzEsNyBAQAogCQkJaWRsZSA9IDA7CiAJCX0KIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGlkbGU7CiB9CiAKQEAgLTU0NTEsNiArNTU5NSw3IEBACiAgKi8KIHZvaWQgbWRfd3JpdGVfc3RhcnQobWRkZXZfdCAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpKQogeworCWludCBkaWRfY2hhbmdlID0gMDsKIAlpZiAoYmlvX2RhdGFfZGlyKGJpKSAhPSBXUklURSkKIAkJcmV0dXJuOwogCkBAIC01NDYxLDYgKzU2MDYsNyBAQAogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnN5bmNfdGhyZWFkKTsKKwkJZGlkX2NoYW5nZSA9IDE7CiAJfQogCWF0b21pY19pbmMoJm1kZGV2LT53cml0ZXNfcGVuZGluZyk7CiAJaWYgKG1kZGV2LT5zYWZlbW9kZSA9PSAxKQpAQCAtNTQ3MSwxMCArNTYxNywxMiBAQAogCQkJbWRkZXYtPmluX3N5bmMgPSAwOwogCQkJc2V0X2JpdChNRF9DSEFOR0VfQ0xFQU4sICZtZGRldi0+ZmxhZ3MpOwogCQkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwkJCWRpZF9jaGFuZ2UgPSAxOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmbWRkZXYtPndyaXRlX2xvY2spOwotCQlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAiYXJyYXlfc3RhdGUiKTsKIAl9CisJaWYgKGRpZF9jaGFuZ2UpCisJCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJhcnJheV9zdGF0ZSIpOwogCXdhaXRfZXZlbnQobWRkZXYtPnNiX3dhaXQsCiAJCSAgICF0ZXN0X2JpdChNRF9DSEFOR0VfQ0xFQU4sICZtZGRldi0+ZmxhZ3MpICYmCiAJCSAgICF0ZXN0X2JpdChNRF9DSEFOR0VfUEVORElORywgJm1kZGV2LT5mbGFncykpOwpAQCAtNTQ5NSwxMyArNTY0MywxOCBAQAogICogbWF5IHByb2NlZWQgd2l0aG91dCBibG9ja2luZy4gIEl0IGlzIGltcG9ydGFudCB0byBjYWxsIHRoaXMgYmVmb3JlCiAgKiBhdHRlbXB0aW5nIGEgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uIHdoaWxlIGhvbGRpbmcgdGhlIG1kZGV2IGxvY2suCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG1kZGV2X2xvY2sgaGVsZC4KKyAqCisgKiBJbiB0aGUgLT5leHRlcm5hbCBjYXNlIE1EX0NIQU5HRV9DTEVBTiBjYW4gbm90IGJlIGNsZWFyZWQgdW50aWwgbWRkZXYtPmxvY2sKKyAqIGlzIGRyb3BwZWQsIHNvIHJldHVybiAtRUFHQUlOIGFmdGVyIG5vdGlmeWluZyB1c2Vyc3BhY2UuCiAgKi8KLXZvaWQgbWRfYWxsb3dfd3JpdGUobWRkZXZfdCAqbWRkZXYpCitpbnQgbWRfYWxsb3dfd3JpdGUobWRkZXZfdCAqbWRkZXYpCiB7CiAJaWYgKCFtZGRldi0+cGVycykKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAlpZiAobWRkZXYtPnJvKQotCQlyZXR1cm47CisJCXJldHVybiAwOworCWlmICghbWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCkKKwkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAJaWYgKG1kZGV2LT5pbl9zeW5jKSB7CkBAIC01NTEyLDE0ICs1NjY1LDE0IEBACiAJCQltZGRldi0+c2FmZW1vZGUgPSAxOwogCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAkJbWRfdXBkYXRlX3NiKG1kZGV2LCAwKTsKLQogCQlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAiYXJyYXlfc3RhdGUiKTsKLQkJLyogd2FpdCBmb3IgdGhlIGRpcnR5IHN0YXRlIHRvIGJlIHJlY29yZGVkIGluIHRoZSBtZXRhZGF0YSAqLwotCQl3YWl0X2V2ZW50KG1kZGV2LT5zYl93YWl0LAotCQkJICAgIXRlc3RfYml0KE1EX0NIQU5HRV9DTEVBTiwgJm1kZGV2LT5mbGFncykgJiYKLQkJCSAgICF0ZXN0X2JpdChNRF9DSEFOR0VfUEVORElORywgJm1kZGV2LT5mbGFncykpOwogCX0gZWxzZQogCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKKworCWlmICh0ZXN0X2JpdChNRF9DSEFOR0VfQ0xFQU4sICZtZGRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwllbHNlCisJCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWRfYWxsb3dfd3JpdGUpOwogCkBAIC01NjI1LDkgKzU3NzgsMTEgQEAKIAkJbWF4X3NlY3RvcnMgPSBtZGRldi0+cmVzeW5jX21heF9zZWN0b3JzOwogCQltZGRldi0+cmVzeW5jX21pc21hdGNoZXMgPSAwOwogCQkvKiB3ZSBkb24ndCB1c2UgdGhlIGNoZWNrcG9pbnQgaWYgdGhlcmUncyBhIGJpdG1hcCAqLwotCQlpZiAoIW1kZGV2LT5iaXRtYXAgJiYKLQkJICAgICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKQorCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJCWogPSBtZGRldi0+cmVzeW5jX21pbjsKKwkJZWxzZSBpZiAoIW1kZGV2LT5iaXRtYXApCiAJCQlqID0gbWRkZXYtPnJlY292ZXJ5X2NwOworCiAJfSBlbHNlIGlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVNIQVBFLCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJbWF4X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSA8PCAxOwogCWVsc2UgewpAQCAtNTc5Niw2ICs1OTUxLDcgQEAKIAogIHNraXA6CiAJbWRkZXYtPmN1cnJfcmVzeW5jID0gMDsKKwltZGRldi0+cmVzeW5jX21pbiA9IDA7CiAJbWRkZXYtPnJlc3luY19tYXggPSBNYXhTZWN0b3I7CiAJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfY29tcGxldGVkIik7CiAJd2FrZV91cCgmcmVzeW5jX3dhaXQpOwpAQCAtNTg0NSw3ICs2MDAxLDggQEAKIAkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPCAwCiAJCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IDA7Ci0JCQkJaWYgKG1kZGV2LT5wZXJzLT5ob3RfYWRkX2Rpc2sobWRkZXYscmRldikpIHsKKwkJCQlpZiAobWRkZXYtPnBlcnMtPgorCQkJCSAgICBob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKIAkJCQkJY2hhciBubVsyMF07CiAJCQkJCXNwcmludGYobm0sICJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKIAkJCQkJaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZtZGRldi0+a29iaiwKQEAgLTU5MjAsMjMgKzYwNzcsMzEgQEAKIAkJaW50IHNwYXJlcyA9IDA7CiAKIAkJaWYgKCFtZGRldi0+ZXh0ZXJuYWwpIHsKKwkJCWludCBkaWRfY2hhbmdlID0gMDsKIAkJCXNwaW5fbG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAkJCWlmIChtZGRldi0+c2FmZW1vZGUgJiYKIAkJCSAgICAhYXRvbWljX3JlYWQoJm1kZGV2LT53cml0ZXNfcGVuZGluZykgJiYKIAkJCSAgICAhbWRkZXYtPmluX3N5bmMgJiYKIAkJCSAgICBtZGRldi0+cmVjb3ZlcnlfY3AgPT0gTWF4U2VjdG9yKSB7CiAJCQkJbWRkZXYtPmluX3N5bmMgPSAxOworCQkJCWRpZF9jaGFuZ2UgPSAxOwogCQkJCWlmIChtZGRldi0+cGVyc2lzdGVudCkKIAkJCQkJc2V0X2JpdChNRF9DSEFOR0VfQ0xFQU4sICZtZGRldi0+ZmxhZ3MpOwogCQkJfQogCQkJaWYgKG1kZGV2LT5zYWZlbW9kZSA9PSAxKQogCQkJCW1kZGV2LT5zYWZlbW9kZSA9IDA7CiAJCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJCWlmIChkaWRfY2hhbmdlKQorCQkJCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJhcnJheV9zdGF0ZSIpOwogCQl9CiAKIAkJaWYgKG1kZGV2LT5mbGFncykKIAkJCW1kX3VwZGF0ZV9zYihtZGRldiwgMCk7CiAKKwkJcmRldl9mb3JfZWFjaChyZGV2LCBydG1wLCBtZGRldikKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU3RhdGVDaGFuZ2VkLCAmcmRldi0+ZmxhZ3MpKQorCQkJCXN5c2ZzX25vdGlmeSgmcmRldi0+a29iaiwgTlVMTCwgInN0YXRlIik7CisKIAogCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSkgJiYKIAkJICAgICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KSkgewpAQCAtNTk1MSw3ICs2MTE2LDkgQEAKIAkJCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSkpIHsKIAkJCQkvKiBzdWNjZXNzLi4uKi8KIAkJCQkvKiBhY3RpdmF0ZSBhbnkgc3BhcmVzICovCi0JCQkJbWRkZXYtPnBlcnMtPnNwYXJlX2FjdGl2ZShtZGRldik7CisJCQkJaWYgKG1kZGV2LT5wZXJzLT5zcGFyZV9hY3RpdmUobWRkZXYpKQorCQkJCQlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLAorCQkJCQkJICAgICAiZGVncmFkZWQiKTsKIAkJCX0KIAkJCW1kX3VwZGF0ZV9zYihtZGRldiwgMSk7CiAKQEAgLTU5NjUsMTMgKzYxMzIsMTggQEAKIAkJCW1kZGV2LT5yZWNvdmVyeSA9IDA7CiAJCQkvKiBmbGFnIHJlY292ZXJ5IG5lZWRlZCBqdXN0IHRvIGRvdWJsZSBjaGVjayAqLwogCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOworCQkJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfYWN0aW9uIik7CiAJCQltZF9uZXdfZXZlbnQobWRkZXYpOwogCQkJZ290byB1bmxvY2s7CiAJCX0KKwkJLyogU2V0IFJVTk5JTkcgYmVmb3JlIGNsZWFyaW5nIE5FRURFRCB0byBhdm9pZAorCQkgKiBhbnkgdHJhbnNpZW50cyBpbiB0aGUgdmFsdWUgb2YgInN5bmNfYWN0aW9uIi4KKwkJICovCisJCXNldF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSk7CisJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkvKiBDbGVhciBzb21lIGJpdHMgdGhhdCBkb24ndCBtZWFuIGFueXRoaW5nLCBidXQKIAkJICogbWlnaHQgYmUgbGVmdCBzZXQKIAkJICovCi0JCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KTsKIApAQCAtNTk4OSwxNyArNjE2MSwxOSBAQAogCQkJCS8qIENhbm5vdCBwcm9jZWVkICovCiAJCQkJZ290byB1bmxvY2s7CiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX1JFU0hBUEUsICZtZGRldi0+cmVjb3ZlcnkpOworCQkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX1JFQ09WRVIsICZtZGRldi0+cmVjb3ZlcnkpOwogCQl9IGVsc2UgaWYgKChzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYpKSkgewogCQkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJCXNldF9iaXQoTURfUkVDT1ZFUllfUkVDT1ZFUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCX0gZWxzZSBpZiAobWRkZXYtPnJlY292ZXJ5X2NwIDwgTWF4U2VjdG9yKSB7CiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpOworCQkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX1JFQ09WRVIsICZtZGRldi0+cmVjb3ZlcnkpOwogCQl9IGVsc2UgaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJCS8qIG5vdGhpbmcgdG8gYmUgZG9uZSAuLi4gKi8KIAkJCWdvdG8gdW5sb2NrOwogCiAJCWlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KSB7Ci0JCQlzZXRfYml0KE1EX1JFQ09WRVJZX1JVTk5JTkcsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJaWYgKHNwYXJlcyAmJiBtZGRldi0+Yml0bWFwICYmICEgbWRkZXYtPmJpdG1hcC0+ZmlsZSkgewogCQkJCS8qIFdlIGFyZSBhZGRpbmcgYSBkZXZpY2Ugb3IgZGV2aWNlcyB0byBhbiBhcnJheQogCQkJCSAqIHdoaWNoIGhhcyB0aGUgYml0bWFwIHN0b3JlZCBvbiBhbGwgZGV2aWNlcy4KQEAgLTYwMTgsOSArNjE5MiwxNiBAQAogCQkJCW1kZGV2LT5yZWNvdmVyeSA9IDA7CiAJCQl9IGVsc2UKIAkJCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT5zeW5jX3RocmVhZCk7CisJCQlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAic3luY19hY3Rpb24iKTsKIAkJCW1kX25ld19ldmVudChtZGRldik7CiAJCX0KIAl1bmxvY2s6CisJCWlmICghbWRkZXYtPnN5bmNfdGhyZWFkKSB7CisJCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSk7CisJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1EX1JFQ09WRVJZX1JFQ09WRVIsCisJCQkJCSAgICAgICAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJCQlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAic3luY19hY3Rpb24iKTsKKwkJfQogCQltZGRldl91bmxvY2sobWRkZXYpOwogCX0KIH0KQEAgLTYwNDcsNyArNjIyOCw3IEBACiAKIAkJZm9yX2VhY2hfbWRkZXYobWRkZXYsIHRtcCkKIAkJCWlmIChtZGRldl90cnlsb2NrKG1kZGV2KSkgewotCQkJCWRvX21kX3N0b3AgKG1kZGV2LCAxKTsKKwkJCQlkb19tZF9zdG9wIChtZGRldiwgMSwgMCk7CiAJCQkJbWRkZXZfdW5sb2NrKG1kZGV2KTsKIAkJCX0KIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IGU5NjgxMTYuLmM0Nzc5Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtMjgxLDEzICsyODEsMTggQEAKIHsKIAltdWx0aXBhdGhfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7Ci0JaW50IGZvdW5kID0gMDsKKwlpbnQgZXJyID0gLUVFWElTVDsKIAlpbnQgcGF0aDsKIAlzdHJ1Y3QgbXVsdGlwYXRoX2luZm8gKnA7CisJaW50IGZpcnN0ID0gMDsKKwlpbnQgbGFzdCA9IG1kZGV2LT5yYWlkX2Rpc2tzIC0gMTsKKworCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCkKKwkJZmlyc3QgPSBsYXN0ID0gcmRldi0+cmFpZF9kaXNrOwogCiAJcHJpbnRfbXVsdGlwYXRoX2NvbmYoY29uZik7CiAKLQlmb3IgKHBhdGg9MDsgcGF0aDxtZGRldi0+cmFpZF9kaXNrczsgcGF0aCsrKSAKKwlmb3IgKHBhdGggPSBmaXJzdDsgcGF0aCA8PSBsYXN0OyBwYXRoKyspCiAJCWlmICgocD1jb25mLT5tdWx0aXBhdGhzK3BhdGgpLT5yZGV2ID09IE5VTEwpIHsKIAkJCXEgPSByZGV2LT5iZGV2LT5iZF9kaXNrLT5xdWV1ZTsKIAkJCWJsa19xdWV1ZV9zdGFja19saW1pdHMobWRkZXYtPnF1ZXVlLCBxKTsKQEAgLTMwNywxMSArMzEyLDEzIEBACiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBwYXRoOwogCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHAtPnJkZXYsIHJkZXYpOwotCQkJZm91bmQgPSAxOworCQkJZXJyID0gMDsKKwkJCWJyZWFrOwogCQl9CiAKIAlwcmludF9tdWx0aXBhdGhfY29uZihjb25mKTsKLQlyZXR1cm4gZm91bmQ7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IG11bHRpcGF0aF9yZW1vdmVfZGlzayhtZGRldl90ICptZGRldiwgaW50IG51bWJlcikKQEAgLTQ5Nyw3ICs1MDQsNyBAQAogCS8qCiAJICogT2ssIGV2ZXJ5dGhpbmcgaXMganVzdCBmaW5lIG5vdwogCSAqLwotCW1kZGV2LT5hcnJheV9zaXplID0gbWRkZXYtPnNpemU7CisJbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSAqIDI7CiAKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IG11bHRpcGF0aF91bnBsdWc7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IG11bHRpcGF0aF9jb25nZXN0ZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQwLmMgYi9kcml2ZXJzL21kL3JhaWQwLmMKaW5kZXggYmNiYjgyNS4uMTgzNjEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDAuYwpAQCAtMjk1LDE2ICsyOTUsMTYgQEAKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCiAJLyogY2FsY3VsYXRlIGFycmF5IGRldmljZSBzaXplICovCi0JbWRkZXYtPmFycmF5X3NpemUgPSAwOworCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gMDsKIAlyZGV2X2Zvcl9lYWNoKHJkZXYsIHRtcCwgbWRkZXYpCi0JCW1kZGV2LT5hcnJheV9zaXplICs9IHJkZXYtPnNpemU7CisJCW1kZGV2LT5hcnJheV9zZWN0b3JzICs9IHJkZXYtPnNpemUgKiAyOwogCiAJcHJpbnRrKCJyYWlkMCA6IG1kX3NpemUgaXMgJWxsdSBibG9ja3MuXG4iLCAKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+YXJyYXlfc2l6ZSk7CisJCSh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPmFycmF5X3NlY3RvcnMgLyAyKTsKIAlwcmludGsoInJhaWQwIDogY29uZi0+aGFzaF9zcGFjaW5nIGlzICVsbHUgYmxvY2tzLlxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb25mLT5oYXNoX3NwYWNpbmcpOwogCXsKLQkJc2VjdG9yX3QgcyA9IG1kZGV2LT5hcnJheV9zaXplOworCQlzZWN0b3JfdCBzID0gbWRkZXYtPmFycmF5X3NlY3RvcnMgLyAyOwogCQlzZWN0b3JfdCBzcGFjZSA9IGNvbmYtPmhhc2hfc3BhY2luZzsKIAkJaW50IHJvdW5kOwogCQljb25mLT5wcmVzaGlmdCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggYzYxMGI5NC4uMDNhNWFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtMTEwMCwxMSArMTEwMCwxNiBAQAogc3RhdGljIGludCByYWlkMV9hZGRfZGlzayhtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldikKIHsKIAljb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKLQlpbnQgZm91bmQgPSAwOworCWludCBlcnIgPSAtRUVYSVNUOwogCWludCBtaXJyb3IgPSAwOwogCW1pcnJvcl9pbmZvX3QgKnA7CisJaW50IGZpcnN0ID0gMDsKKwlpbnQgbGFzdCA9IG1kZGV2LT5yYWlkX2Rpc2tzIC0gMTsKIAotCWZvciAobWlycm9yPTA7IG1pcnJvciA8IG1kZGV2LT5yYWlkX2Rpc2tzOyBtaXJyb3IrKykKKwlpZiAocmRldi0+cmFpZF9kaXNrID49IDApCisJCWZpcnN0ID0gbGFzdCA9IHJkZXYtPnJhaWRfZGlzazsKKworCWZvciAobWlycm9yID0gZmlyc3Q7IG1pcnJvciA8PSBsYXN0OyBtaXJyb3IrKykKIAkJaWYgKCAhKHA9Y29uZi0+bWlycm9ycyttaXJyb3IpLT5yZGV2KSB7CiAKIAkJCWJsa19xdWV1ZV9zdGFja19saW1pdHMobWRkZXYtPnF1ZXVlLApAQCAtMTExOSw3ICsxMTI0LDcgQEAKIAogCQkJcC0+aGVhZF9wb3NpdGlvbiA9IDA7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBtaXJyb3I7Ci0JCQlmb3VuZCA9IDE7CisJCQllcnIgPSAwOwogCQkJLyogQXMgYWxsIGRldmljZXMgYXJlIGVxdWl2YWxlbnQsIHdlIGRvbid0IG5lZWQgYSBmdWxsIHJlY292ZXJ5CiAJCQkgKiBpZiB0aGlzIHdhcyByZWNlbnRseSBhbnkgZHJpdmUgb2YgdGhlIGFycmF5CiAJCQkgKi8KQEAgLTExMzAsNyArMTEzNSw3IEBACiAJCX0KIAogCXByaW50X2NvbmYoY29uZik7Ci0JcmV0dXJuIGZvdW5kOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgcmFpZDFfcmVtb3ZlX2Rpc2sobWRkZXZfdCAqbWRkZXYsIGludCBudW1iZXIpCkBAIC0yMDM4LDcgKzIwNDMsNyBAQAogCS8qCiAJICogT2ssIGV2ZXJ5dGhpbmcgaXMganVzdCBmaW5lIG5vdwogCSAqLwotCW1kZGV2LT5hcnJheV9zaXplID0gbWRkZXYtPnNpemU7CisJbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSAqIDI7CiAKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IHJhaWQxX3VucGx1ZzsKIAltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gcmFpZDFfY29uZ2VzdGVkOwpAQCAtMjEwMCwxNCArMjEwNSwxNSBAQAogCSAqIGFueSBpbyBpbiB0aGUgcmVtb3ZlZCBzcGFjZSBjb21wbGV0ZXMsIGJ1dCBpdCBoYXJkbHkgc2VlbXMKIAkgKiB3b3J0aCBpdC4KIAkgKi8KLQltZGRldi0+YXJyYXlfc2l6ZSA9IHNlY3RvcnM+PjE7Ci0Jc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2l6ZSA8PCAxKTsKKwltZGRldi0+YXJyYXlfc2VjdG9ycyA9IHNlY3RvcnM7CisJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJbWRkZXYtPmNoYW5nZWQgPSAxOwotCWlmIChtZGRldi0+YXJyYXlfc2l6ZSA+IG1kZGV2LT5zaXplICYmIG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpIHsKKwlpZiAobWRkZXYtPmFycmF5X3NlY3RvcnMgLyAyID4gbWRkZXYtPnNpemUgJiYKKwkgICAgbWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikgewogCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+c2l6ZSA8PCAxOwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJfQotCW1kZGV2LT5zaXplID0gbWRkZXYtPmFycmF5X3NpemU7CisJbWRkZXYtPnNpemUgPSBtZGRldi0+YXJyYXlfc2VjdG9ycyAvIDI7CiAJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IHNlY3RvcnM7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTMxLDcgKzIxMzcsNyBAQAogCWNvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwogCWludCBjbnQsIHJhaWRfZGlza3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZCwgZDI7CisJaW50IGQsIGQyLCBlcnI7CiAKIAkvKiBDYW5ub3QgY2hhbmdlIGNodW5rX3NpemUsIGxheW91dCwgb3IgbGV2ZWwgKi8KIAlpZiAobWRkZXYtPmNodW5rX3NpemUgIT0gbWRkZXYtPm5ld19jaHVuayB8fApAQCAtMjE0Myw3ICsyMTQ5LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbWRfYWxsb3dfd3JpdGUobWRkZXYpOworCWVyciA9IG1kX2FsbG93X3dyaXRlKG1kZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzICsgbWRkZXYtPmRlbHRhX2Rpc2tzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCAyMmJiMmIxLi4xNTk1MzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTExMTQsMjQgKzExMTQsMzAgQEAKIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KQogewogCWNvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOwotCWludCBmb3VuZCA9IDA7CisJaW50IGVyciA9IC1FRVhJU1Q7CiAJaW50IG1pcnJvcjsKIAltaXJyb3JfaW5mb190ICpwOworCWludCBmaXJzdCA9IDA7CisJaW50IGxhc3QgPSBtZGRldi0+cmFpZF9kaXNrcyAtIDE7CiAKIAlpZiAobWRkZXYtPnJlY292ZXJ5X2NwIDwgTWF4U2VjdG9yKQogCQkvKiBvbmx5IGhvdC1hZGQgdG8gaW4tc3luYyBhcnJheXMsIGFzIHJlY292ZXJ5IGlzCiAJCSAqIHZlcnkgZGlmZmVyZW50IGZyb20gcmVzeW5jCiAJCSAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoIWVub3VnaChjb25mKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJkZXYtPnJhaWRfZGlzaykKKwkJZmlyc3QgPSBsYXN0ID0gcmRldi0+cmFpZF9kaXNrOwogCiAJaWYgKHJkZXYtPnNhdmVkX3JhaWRfZGlzayA+PSAwICYmCisJICAgIHJkZXYtPnNhdmVkX3JhaWRfZGlzayA+PSBmaXJzdCAmJgogCSAgICBjb25mLT5taXJyb3JzW3JkZXYtPnNhdmVkX3JhaWRfZGlza10ucmRldiA9PSBOVUxMKQogCQltaXJyb3IgPSByZGV2LT5zYXZlZF9yYWlkX2Rpc2s7CiAJZWxzZQotCQltaXJyb3IgPSAwOwotCWZvciAoIDsgbWlycm9yIDwgbWRkZXYtPnJhaWRfZGlza3M7IG1pcnJvcisrKQorCQltaXJyb3IgPSBmaXJzdDsKKwlmb3IgKCA7IG1pcnJvciA8PSBsYXN0IDsgbWlycm9yKyspCiAJCWlmICggIShwPWNvbmYtPm1pcnJvcnMrbWlycm9yKS0+cmRldikgewogCiAJCQlibGtfcXVldWVfc3RhY2tfbGltaXRzKG1kZGV2LT5xdWV1ZSwKQEAgLTExNDYsNyArMTE1Miw3IEBACiAKIAkJCXAtPmhlYWRfcG9zaXRpb24gPSAwOwogCQkJcmRldi0+cmFpZF9kaXNrID0gbWlycm9yOwotCQkJZm91bmQgPSAxOworCQkJZXJyID0gMDsKIAkJCWlmIChyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgIT0gbWlycm9yKQogCQkJCWNvbmYtPmZ1bGxzeW5jID0gMTsKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihwLT5yZGV2LCByZGV2KTsKQEAgLTExNTQsNyArMTE2MCw3IEBACiAJCX0KIAogCXByaW50X2NvbmYoY29uZik7Ci0JcmV0dXJuIGZvdW5kOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgcmFpZDEwX3JlbW92ZV9kaXNrKG1kZGV2X3QgKm1kZGV2LCBpbnQgbnVtYmVyKQpAQCAtMjE1OSw3ICsyMTY1LDcgQEAKIAkvKgogCSAqIE9rLCBldmVyeXRoaW5nIGlzIGp1c3QgZmluZSBub3cKIAkgKi8KLQltZGRldi0+YXJyYXlfc2l6ZSA9IHNpemUgPDwgKGNvbmYtPmNodW5rX3NoaWZ0LTEpOworCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gc2l6ZSA8PCBjb25mLT5jaHVua19zaGlmdDsKIAltZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID0gc2l6ZSA8PCBjb25mLT5jaHVua19zaGlmdDsKIAogCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gcmFpZDEwX3VucGx1ZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCA5Y2U3MTU0Li41NWU3YzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0xMTUsMTUgKzExNSwyMCBAQAogCQlyZXR1cm5fYmkgPSBiaS0+YmlfbmV4dDsKIAkJYmktPmJpX25leHQgPSBOVUxMOwogCQliaS0+Ymlfc2l6ZSA9IDA7Ci0JCWJpLT5iaV9lbmRfaW8oYmksCi0JCQkgICAgICB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaS0+YmlfZmxhZ3MpCi0JCQkgICAgICAgID8gMCA6IC1FSU8pOworCQliaW9fZW5kaW8oYmksIDApOwogCQliaSA9IHJldHVybl9iaTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X3JhaWQ1X2NvbmYgKHJhaWQ1X2NvbmZfdCAqY29uZik7CiAKK3N0YXRpYyBpbnQgc3RyaXBlX29wZXJhdGlvbnNfYWN0aXZlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCit7CisJcmV0dXJuIHNoLT5jaGVja19zdGF0ZSB8fCBzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgfHwKKwkgICAgICAgdGVzdF9iaXQoU1RSSVBFX0JJT0ZJTExfUlVOLCAmc2gtPnN0YXRlKSB8fAorCSAgICAgICB0ZXN0X2JpdChTVFJJUEVfQ09NUFVURV9SVU4sICZzaC0+c3RhdGUpOworfQorCiBzdGF0aWMgdm9pZCBfX3JlbGVhc2Vfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2gtPmNvdW50KSkgewpAQCAtMTQzLDcgKzE0OCw3IEBACiAJCQl9CiAJCQltZF93YWtldXBfdGhyZWFkKGNvbmYtPm1kZGV2LT50aHJlYWQpOwogCQl9IGVsc2UgewotCQkJQlVHX09OKHNoLT5vcHMucGVuZGluZyk7CisJCQlCVUdfT04oc3RyaXBlX29wZXJhdGlvbnNfYWN0aXZlKHNoKSk7CiAJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUUklQRV9QUkVSRUFEX0FDVElWRSwgJnNoLT5zdGF0ZSkpIHsKIAkJCQlhdG9taWNfZGVjKCZjb25mLT5wcmVyZWFkX2FjdGl2ZV9zdHJpcGVzKTsKIAkJCQlpZiAoYXRvbWljX3JlYWQoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpIDwgSU9fVEhSRVNIT0xEKQpAQCAtMjQ1LDcgKzI1MCw3IEBACiAKIAlCVUdfT04oYXRvbWljX3JlYWQoJnNoLT5jb3VudCkgIT0gMCk7CiAJQlVHX09OKHRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKTsKLQlCVUdfT04oc2gtPm9wcy5wZW5kaW5nIHx8IHNoLT5vcHMuYWNrIHx8IHNoLT5vcHMuY29tcGxldGUpOworCUJVR19PTihzdHJpcGVfb3BlcmF0aW9uc19hY3RpdmUoc2gpKTsKIAogCUNIRUNLX0RFVkxPQ0soKTsKIAlwcl9kZWJ1ZygiaW5pdF9zdHJpcGUgY2FsbGVkLCBzdHJpcGUgJWxsdVxuIiwKQEAgLTM0Niw2MiArMzUxLDE4IEBACiAJcmV0dXJuIHNoOwogfQogCi0vKiB0ZXN0X2FuZF9hY2tfb3AoKSBlbnN1cmVzIHRoYXQgd2Ugb25seSBkZXF1ZXVlIGFuIG9wZXJhdGlvbiBvbmNlICovCi0jZGVmaW5lIHRlc3RfYW5kX2Fja19vcChvcCwgcGVuZCkgXAotZG8gewkJCQkJCQlcCi0JaWYgKHRlc3RfYml0KG9wLCAmc2gtPm9wcy5wZW5kaW5nKSAmJgkJXAotCQkhdGVzdF9iaXQob3AsICZzaC0+b3BzLmNvbXBsZXRlKSkgewlcCi0JCWlmICh0ZXN0X2FuZF9zZXRfYml0KG9wLCAmc2gtPm9wcy5hY2spKSBcCi0JCQljbGVhcl9iaXQob3AsICZwZW5kKTsJCVwKLQkJZWxzZQkJCQkJXAotCQkJYWNrKys7CQkJCVwKLQl9IGVsc2UJCQkJCQlcCi0JCWNsZWFyX2JpdChvcCwgJnBlbmQpOwkJCVwKLX0gd2hpbGUgKDApCi0KLS8qIGZpbmQgbmV3IHdvcmsgdG8gcnVuLCBkbyBub3QgcmVzdWJtaXQgd29yayB0aGF0IGlzIGFscmVhZHkKLSAqIGluIGZsaWdodAotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc3RyaXBlX3dvcmsoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKLXsKLQl1bnNpZ25lZCBsb25nIHBlbmRpbmc7Ci0JaW50IGFjayA9IDA7Ci0KLQlwZW5kaW5nID0gc2gtPm9wcy5wZW5kaW5nOwotCi0JdGVzdF9hbmRfYWNrX29wKFNUUklQRV9PUF9CSU9GSUxMLCBwZW5kaW5nKTsKLQl0ZXN0X2FuZF9hY2tfb3AoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCBwZW5kaW5nKTsKLQl0ZXN0X2FuZF9hY2tfb3AoU1RSSVBFX09QX1BSRVhPUiwgcGVuZGluZyk7Ci0JdGVzdF9hbmRfYWNrX29wKFNUUklQRV9PUF9CSU9EUkFJTiwgcGVuZGluZyk7Ci0JdGVzdF9hbmRfYWNrX29wKFNUUklQRV9PUF9QT1NUWE9SLCBwZW5kaW5nKTsKLQl0ZXN0X2FuZF9hY2tfb3AoU1RSSVBFX09QX0NIRUNLLCBwZW5kaW5nKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUUklQRV9PUF9JTywgJnNoLT5vcHMucGVuZGluZykpCi0JCWFjaysrOwotCi0Jc2gtPm9wcy5jb3VudCAtPSBhY2s7Ci0JaWYgKHVubGlrZWx5KHNoLT5vcHMuY291bnQgPCAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgInBlbmRpbmc6ICUjbHggb3BzLnBlbmRpbmc6ICUjbHggb3BzLmFjazogJSNseCAiCi0JCQkib3BzLmNvbXBsZXRlOiAlI2x4XG4iLCBwZW5kaW5nLCBzaC0+b3BzLnBlbmRpbmcsCi0JCQlzaC0+b3BzLmFjaywgc2gtPm9wcy5jb21wbGV0ZSk7Ci0JCUJVRygpOwotCX0KLQotCXJldHVybiBwZW5kaW5nOwotfQotCiBzdGF0aWMgdm9pZAogcmFpZDVfZW5kX3JlYWRfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaSwgaW50IGVycm9yKTsKIHN0YXRpYyB2b2lkCiByYWlkNV9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaSwgaW50IGVycm9yKTsKIAotc3RhdGljIHZvaWQgb3BzX3J1bl9pbyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQorc3RhdGljIHZvaWQgb3BzX3J1bl9pbyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3Qgc3RyaXBlX2hlYWRfc3RhdGUgKnMpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgaSwgZGlza3MgPSBzaC0+ZGlza3M7CiAKIAltaWdodF9zbGVlcCgpOwogCi0Jc2V0X2JpdChTVFJJUEVfSU9fU1RBUlRFRCwgJnNoLT5zdGF0ZSk7CiAJZm9yIChpID0gZGlza3M7IGktLTsgKSB7CiAJCWludCBydzsKIAkJc3RydWN0IGJpbyAqYmk7CkBAIC00MzAsMTEgKzM5MSwxMSBAQAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAogCQlpZiAocmRldikgewotCQkJaWYgKHRlc3RfYml0KFNUUklQRV9TWU5DSU5HLCAmc2gtPnN0YXRlKSB8fAotCQkJCXRlc3RfYml0KFNUUklQRV9FWFBBTkRfU09VUkNFLCAmc2gtPnN0YXRlKSB8fAotCQkJCXRlc3RfYml0KFNUUklQRV9FWFBBTkRfUkVBRFksICZzaC0+c3RhdGUpKQorCQkJaWYgKHMtPnN5bmNpbmcgfHwgcy0+ZXhwYW5kaW5nIHx8IHMtPmV4cGFuZGVkKQogCQkJCW1kX3N5bmNfYWNjdChyZGV2LT5iZGV2LCBTVFJJUEVfU0VDVE9SUyk7CiAKKwkJCXNldF9iaXQoU1RSSVBFX0lPX1NUQVJURUQsICZzaC0+c3RhdGUpOworCiAJCQliaS0+YmlfYmRldiA9IHJkZXYtPmJkZXY7CiAJCQlwcl9kZWJ1ZygiJXM6IGZvciAlbGx1IHNjaGVkdWxlIG9wICVsZCBvbiBkaXNjICVkXG4iLAogCQkJCV9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IsCkBAIC01MjgsMzggKzQ4OSwzNCBAQAogCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IpOwogCiAJLyogY2xlYXIgY29tcGxldGVkIGJpb2ZpbGxzICovCisJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCWZvciAoaSA9IHNoLT5kaXNrczsgaS0tOyApIHsKIAkJc3RydWN0IHI1ZGV2ICpkZXYgPSAmc2gtPmRldltpXTsKIAogCQkvKiBhY2tub3dsZWRnZSBjb21wbGV0aW9uIG9mIGEgYmlvZmlsbCBvcGVyYXRpb24gKi8KIAkJLyogYW5kIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmVwbHkgdG8gYSByZWFkIHJlcXVlc3QsCiAJCSAqIG5ldyBSNV9XYW50ZmlsbCByZXF1ZXN0cyBhcmUgaGVsZCBvZmYgdW50aWwKLQkJICogIXRlc3RfYml0KFNUUklQRV9PUF9CSU9GSUxMLCAmc2gtPm9wcy5wZW5kaW5nKQorCQkgKiAhU1RSSVBFX0JJT0ZJTExfUlVOCiAJCSAqLwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFI1X1dhbnRmaWxsLCAmZGV2LT5mbGFncykpIHsKIAkJCXN0cnVjdCBiaW8gKnJiaSwgKnJiaTI7CiAKLQkJCS8qIFRoZSBhY2Nlc3MgdG8gZGV2LT5yZWFkIGlzIG91dHNpZGUgb2YgdGhlCi0JCQkgKiBzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayksIGJ1dCBpcyBwcm90ZWN0ZWQKLQkJCSAqIGJ5IHRoZSBTVFJJUEVfT1BfQklPRklMTCBwZW5kaW5nIGJpdAotCQkJICovCiAJCQlCVUdfT04oIWRldi0+cmVhZCk7CiAJCQlyYmkgPSBkZXYtPnJlYWQ7CiAJCQlkZXYtPnJlYWQgPSBOVUxMOwogCQkJd2hpbGUgKHJiaSAmJiByYmktPmJpX3NlY3RvciA8CiAJCQkJZGV2LT5zZWN0b3IgKyBTVFJJUEVfU0VDVE9SUykgewogCQkJCXJiaTIgPSByNV9uZXh0X2JpbyhyYmksIGRldi0+c2VjdG9yKTsKLQkJCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCQkJaWYgKC0tcmJpLT5iaV9waHlzX3NlZ21lbnRzID09IDApIHsKIAkJCQkJcmJpLT5iaV9uZXh0ID0gcmV0dXJuX2JpOwogCQkJCQlyZXR1cm5fYmkgPSByYmk7CiAJCQkJfQotCQkJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkJCXJiaSA9IHJiaTI7CiAJCQl9CiAJCX0KIAl9Ci0Jc2V0X2JpdChTVFJJUEVfT1BfQklPRklMTCwgJnNoLT5vcHMuY29tcGxldGUpOworCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOworCWNsZWFyX2JpdChTVFJJUEVfQklPRklMTF9SVU4sICZzaC0+c3RhdGUpOwogCiAJcmV0dXJuX2lvKHJldHVybl9iaSk7CiAKQEAgLTYxMCwxMyArNTY3LDE0IEBACiAJc2V0X2JpdChSNV9VUFRPREFURSwgJnRndC0+ZmxhZ3MpOwogCUJVR19PTighdGVzdF9iaXQoUjVfV2FudGNvbXB1dGUsICZ0Z3QtPmZsYWdzKSk7CiAJY2xlYXJfYml0KFI1X1dhbnRjb21wdXRlLCAmdGd0LT5mbGFncyk7Ci0Jc2V0X2JpdChTVFJJUEVfT1BfQ09NUFVURV9CTEssICZzaC0+b3BzLmNvbXBsZXRlKTsKKwljbGVhcl9iaXQoU1RSSVBFX0NPTVBVVEVfUlVOLCAmc2gtPnN0YXRlKTsKKwlpZiAoc2gtPmNoZWNrX3N0YXRlID09IGNoZWNrX3N0YXRlX2NvbXB1dGVfcnVuKQorCQlzaC0+Y2hlY2tfc3RhdGUgPSBjaGVja19zdGF0ZV9jb21wdXRlX3Jlc3VsdDsKIAlzZXRfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOwogCXJlbGVhc2Vfc3RyaXBlKHNoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCi1vcHNfcnVuX2NvbXB1dGU1KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHVuc2lnbmVkIGxvbmcgcGVuZGluZykKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKm9wc19ydW5fY29tcHV0ZTUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKIHsKIAkvKiBrZXJuZWwgc3RhY2sgc2l6ZSBsaW1pdHMgdGhlIHRvdGFsIG51bWJlciBvZiBkaXNrcyAqLwogCWludCBkaXNrcyA9IHNoLT5kaXNrczsKQEAgLTY0NiwxMCArNjA0LDYgQEAKIAkJCUFTWU5DX1RYX1hPUl9aRVJPX0RTVCwgTlVMTCwKIAkJCW9wc19jb21wbGV0ZV9jb21wdXRlNSwgc2gpOwogCi0JLyogYWNrIG5vdyBpZiBwb3N0eG9yIGlzIG5vdCBzZXQgdG8gYmUgcnVuICovCi0JaWYgKHR4ICYmICF0ZXN0X2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnBlbmRpbmcpKQotCQlhc3luY190eF9hY2sodHgpOwotCiAJcmV0dXJuIHR4OwogfQogCkBAIC02NTksOCArNjEzLDYgQEAKIAogCXByX2RlYnVnKCIlczogc3RyaXBlICVsbHVcbiIsIF9fZnVuY19fLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IpOwotCi0Jc2V0X2JpdChTVFJJUEVfT1BfUFJFWE9SLCAmc2gtPm9wcy5jb21wbGV0ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgpAQCAtNjgwLDcgKzYzMiw3IEBACiAJZm9yIChpID0gZGlza3M7IGktLTsgKSB7CiAJCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07CiAJCS8qIE9ubHkgcHJvY2VzcyBibG9ja3MgdGhhdCBhcmUga25vd24gdG8gYmUgdXB0b2RhdGUgKi8KLQkJaWYgKGRldi0+dG93cml0ZSAmJiB0ZXN0X2JpdChSNV9XYW50cHJleG9yLCAmZGV2LT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChSNV9XYW50ZHJhaW4sICZkZXYtPmZsYWdzKSkKIAkJCXhvcl9zcmNzW2NvdW50KytdID0gZGV2LT5wYWdlOwogCX0KIApAQCAtNjkyLDE2ICs2NDQsMTAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCi1vcHNfcnVuX2Jpb2RyYWluKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgsCi0JCSB1bnNpZ25lZCBsb25nIHBlbmRpbmcpCitvcHNfcnVuX2Jpb2RyYWluKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzOwotCWludCBwZF9pZHggPSBzaC0+cGRfaWR4LCBpOwotCi0JLyogY2hlY2sgaWYgcHJleG9yIGlzIGFjdGl2ZSB3aGljaCBtZWFucyBvbmx5IHByb2Nlc3MgYmxvY2tzCi0JICogdGhhdCBhcmUgcGFydCBvZiBhIHJlYWQtbW9kaWZ5LXdyaXRlIChXYW50cHJleG9yKQotCSAqLwotCWludCBwcmV4b3IgPSB0ZXN0X2JpdChTVFJJUEVfT1BfUFJFWE9SLCAmcGVuZGluZyk7CisJaW50IGk7CiAKIAlwcl9kZWJ1ZygiJXM6IHN0cmlwZSAlbGx1XG4iLCBfX2Z1bmNfXywKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yKTsKQEAgLTcwOSwyMCArNjU1LDggQEAKIAlmb3IgKGkgPSBkaXNrczsgaS0tOyApIHsKIAkJc3RydWN0IHI1ZGV2ICpkZXYgPSAmc2gtPmRldltpXTsKIAkJc3RydWN0IGJpbyAqY2hvc2VuOwotCQlpbnQgdG93cml0ZTsKIAotCQl0b3dyaXRlID0gMDsKLQkJaWYgKHByZXhvcikgeyAvKiBybXcgKi8KLQkJCWlmIChkZXYtPnRvd3JpdGUgJiYKLQkJCSAgICB0ZXN0X2JpdChSNV9XYW50cHJleG9yLCAmZGV2LT5mbGFncykpCi0JCQkJdG93cml0ZSA9IDE7Ci0JCX0gZWxzZSB7IC8qIHJjdyAqLwotCQkJaWYgKGkgIT0gcGRfaWR4ICYmIGRldi0+dG93cml0ZSAmJgotCQkJCXRlc3RfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpKQotCQkJCXRvd3JpdGUgPSAxOwotCQl9Ci0KLQkJaWYgKHRvd3JpdGUpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9XYW50ZHJhaW4sICZkZXYtPmZsYWdzKSkgewogCQkJc3RydWN0IGJpbyAqd2JpOwogCiAJCQlzcGluX2xvY2soJnNoLT5sb2NrKTsKQEAgLTc0NywxOCArNjgxLDYgQEAKIHN0YXRpYyB2b2lkIG9wc19jb21wbGV0ZV9wb3N0eG9yKHZvaWQgKnN0cmlwZV9oZWFkX3JlZikKIHsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoID0gc3RyaXBlX2hlYWRfcmVmOwotCi0JcHJfZGVidWcoIiVzOiBzdHJpcGUgJWxsdVxuIiwgX19mdW5jX18sCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3Rvcik7Ci0KLQlzZXRfYml0KFNUUklQRV9PUF9QT1NUWE9SLCAmc2gtPm9wcy5jb21wbGV0ZSk7Ci0Jc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKLQlyZWxlYXNlX3N0cmlwZShzaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9wc19jb21wbGV0ZV93cml0ZSh2b2lkICpzdHJpcGVfaGVhZF9yZWYpCi17Ci0Jc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IHN0cmlwZV9oZWFkX3JlZjsKIAlpbnQgZGlza3MgPSBzaC0+ZGlza3MsIGksIHBkX2lkeCA9IHNoLT5wZF9pZHg7CiAKIAlwcl9kZWJ1ZygiJXM6IHN0cmlwZSAlbGx1XG4iLCBfX2Z1bmNfXywKQEAgLTc3MCwxNiArNjkyLDIxIEBACiAJCQlzZXRfYml0KFI1X1VQVE9EQVRFLCAmZGV2LT5mbGFncyk7CiAJfQogCi0Jc2V0X2JpdChTVFJJUEVfT1BfQklPRFJBSU4sICZzaC0+b3BzLmNvbXBsZXRlKTsKLQlzZXRfYml0KFNUUklQRV9PUF9QT1NUWE9SLCAmc2gtPm9wcy5jb21wbGV0ZSk7CisJaWYgKHNoLT5yZWNvbnN0cnVjdF9zdGF0ZSA9PSByZWNvbnN0cnVjdF9zdGF0ZV9kcmFpbl9ydW4pCisJCXNoLT5yZWNvbnN0cnVjdF9zdGF0ZSA9IHJlY29uc3RydWN0X3N0YXRlX2RyYWluX3Jlc3VsdDsKKwllbHNlIGlmIChzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPT0gcmVjb25zdHJ1Y3Rfc3RhdGVfcHJleG9yX2RyYWluX3J1bikKKwkJc2gtPnJlY29uc3RydWN0X3N0YXRlID0gcmVjb25zdHJ1Y3Rfc3RhdGVfcHJleG9yX2RyYWluX3Jlc3VsdDsKKwllbHNlIHsKKwkJQlVHX09OKHNoLT5yZWNvbnN0cnVjdF9zdGF0ZSAhPSByZWNvbnN0cnVjdF9zdGF0ZV9ydW4pOworCQlzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPSByZWNvbnN0cnVjdF9zdGF0ZV9yZXN1bHQ7CisJfQogCiAJc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKIAlyZWxlYXNlX3N0cmlwZShzaCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1vcHNfcnVuX3Bvc3R4b3Ioc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCwKLQkJdW5zaWduZWQgbG9uZyBwZW5kaW5nKQorb3BzX3J1bl9wb3N0eG9yKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7CiAJLyoga2VybmVsIHN0YWNrIHNpemUgbGltaXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlza3MgKi8KIAlpbnQgZGlza3MgPSBzaC0+ZGlza3M7CkBAIC03ODcsOSArNzE0LDggQEAKIAogCWludCBjb3VudCA9IDAsIHBkX2lkeCA9IHNoLT5wZF9pZHgsIGk7CiAJc3RydWN0IHBhZ2UgKnhvcl9kZXN0OwotCWludCBwcmV4b3IgPSB0ZXN0X2JpdChTVFJJUEVfT1BfUFJFWE9SLCAmcGVuZGluZyk7CisJaW50IHByZXhvciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2FsbGJhY2s7CiAKIAlwcl9kZWJ1ZygiJXM6IHN0cmlwZSAlbGx1XG4iLCBfX2Z1bmNfXywKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yKTsKQEAgLTc5Nyw3ICs3MjMsOCBAQAogCS8qIGNoZWNrIGlmIHByZXhvciBpcyBhY3RpdmUgd2hpY2ggbWVhbnMgb25seSBwcm9jZXNzIGJsb2NrcwogCSAqIHRoYXQgYXJlIHBhcnQgb2YgYSByZWFkLW1vZGlmeS13cml0ZSAod3JpdHRlbikKIAkgKi8KLQlpZiAocHJleG9yKSB7CisJaWYgKHNoLT5yZWNvbnN0cnVjdF9zdGF0ZSA9PSByZWNvbnN0cnVjdF9zdGF0ZV9wcmV4b3JfZHJhaW5fcnVuKSB7CisJCXByZXhvciA9IDE7CiAJCXhvcl9kZXN0ID0geG9yX3NyY3NbY291bnQrK10gPSBzaC0+ZGV2W3BkX2lkeF0ucGFnZTsKIAkJZm9yIChpID0gZGlza3M7IGktLTsgKSB7CiAJCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2W2ldOwpAQCAtODEzLDEwICs3NDAsNiBAQAogCQl9CiAJfQogCi0JLyogY2hlY2sgd2hldGhlciB0aGlzIHBvc3R4b3IgaXMgcGFydCBvZiBhIHdyaXRlICovCi0JY2FsbGJhY2sgPSB0ZXN0X2JpdChTVFJJUEVfT1BfQklPRFJBSU4sICZwZW5kaW5nKSA/Ci0JCW9wc19jb21wbGV0ZV93cml0ZSA6IG9wc19jb21wbGV0ZV9wb3N0eG9yOwotCiAJLyogMS8gaWYgd2UgcHJleG9yJ2QgdGhlbiB0aGUgZGVzdCBpcyByZXVzZWQgYXMgYSBzb3VyY2UKIAkgKiAyLyBpZiB3ZSBkaWQgbm90IHByZXhvciB0aGVuIHdlIGFyZSByZWRvaW5nIHRoZSBwYXJpdHkKIAkgKiBzZXQgQVNZTkNfVFhfWE9SX0RST1BfRFNUIGFuZCBBU1lOQ19UWF9YT1JfWkVST19EU1QKQEAgLTgzMCwyNSArNzUzLDIwIEBACiAJaWYgKHVubGlrZWx5KGNvdW50ID09IDEpKSB7CiAJCWZsYWdzICY9IH4oQVNZTkNfVFhfWE9SX0RST1BfRFNUIHwgQVNZTkNfVFhfWE9SX1pFUk9fRFNUKTsKIAkJdHggPSBhc3luY19tZW1jcHkoeG9yX2Rlc3QsIHhvcl9zcmNzWzBdLCAwLCAwLCBTVFJJUEVfU0laRSwKLQkJCWZsYWdzLCB0eCwgY2FsbGJhY2ssIHNoKTsKKwkJCWZsYWdzLCB0eCwgb3BzX2NvbXBsZXRlX3Bvc3R4b3IsIHNoKTsKIAl9IGVsc2UKIAkJdHggPSBhc3luY194b3IoeG9yX2Rlc3QsIHhvcl9zcmNzLCAwLCBjb3VudCwgU1RSSVBFX1NJWkUsCi0JCQlmbGFncywgdHgsIGNhbGxiYWNrLCBzaCk7CisJCQlmbGFncywgdHgsIG9wc19jb21wbGV0ZV9wb3N0eG9yLCBzaCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9wc19jb21wbGV0ZV9jaGVjayh2b2lkICpzdHJpcGVfaGVhZF9yZWYpCiB7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IHN0cmlwZV9oZWFkX3JlZjsKLQlpbnQgcGRfaWR4ID0gc2gtPnBkX2lkeDsKIAogCXByX2RlYnVnKCIlczogc3RyaXBlICVsbHVcbiIsIF9fZnVuY19fLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IpOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTVFJJUEVfT1BfTU9EX0RNQV9DSEVDSywgJnNoLT5vcHMucGVuZGluZykgJiYKLQkJc2gtPm9wcy56ZXJvX3N1bV9yZXN1bHQgPT0gMCkKLQkJc2V0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbcGRfaWR4XS5mbGFncyk7Ci0KLQlzZXRfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMuY29tcGxldGUpOworCXNoLT5jaGVja19zdGF0ZSA9IGNoZWNrX3N0YXRlX2NoZWNrX3Jlc3VsdDsKIAlzZXRfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOwogCXJlbGVhc2Vfc3RyaXBlKHNoKTsKIH0KQEAgLTg3NSw0NiArNzkzLDQyIEBACiAJdHggPSBhc3luY194b3JfemVyb19zdW0oeG9yX2Rlc3QsIHhvcl9zcmNzLCAwLCBjb3VudCwgU1RSSVBFX1NJWkUsCiAJCSZzaC0+b3BzLnplcm9fc3VtX3Jlc3VsdCwgMCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAKLQlpZiAodHgpCi0JCXNldF9iaXQoU1RSSVBFX09QX01PRF9ETUFfQ0hFQ0ssICZzaC0+b3BzLnBlbmRpbmcpOwotCWVsc2UKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9NT0RfRE1BX0NIRUNLLCAmc2gtPm9wcy5wZW5kaW5nKTsKLQogCWF0b21pY19pbmMoJnNoLT5jb3VudCk7CiAJdHggPSBhc3luY190cmlnZ2VyX2NhbGxiYWNrKEFTWU5DX1RYX0RFUF9BQ0sgfCBBU1lOQ19UWF9BQ0ssIHR4LAogCQlvcHNfY29tcGxldGVfY2hlY2ssIHNoKTsKIH0KIAotc3RhdGljIHZvaWQgcmFpZDVfcnVuX29wcyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCB1bnNpZ25lZCBsb25nIHBlbmRpbmcpCitzdGF0aWMgdm9pZCByYWlkNV9ydW5fb3BzKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QpCiB7CiAJaW50IG92ZXJsYXBfY2xlYXIgPSAwLCBpLCBkaXNrcyA9IHNoLT5kaXNrczsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAotCWlmICh0ZXN0X2JpdChTVFJJUEVfT1BfQklPRklMTCwgJnBlbmRpbmcpKSB7CisJaWYgKHRlc3RfYml0KFNUUklQRV9PUF9CSU9GSUxMLCAmb3BzX3JlcXVlc3QpKSB7CiAJCW9wc19ydW5fYmlvZmlsbChzaCk7CiAJCW92ZXJsYXBfY2xlYXIrKzsKIAl9CiAKLQlpZiAodGVzdF9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmcGVuZGluZykpCi0JCXR4ID0gb3BzX3J1bl9jb21wdXRlNShzaCwgcGVuZGluZyk7CisJaWYgKHRlc3RfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJm9wc19yZXF1ZXN0KSkgeworCQl0eCA9IG9wc19ydW5fY29tcHV0ZTUoc2gpOworCQkvKiB0ZXJtaW5hdGUgdGhlIGNoYWluIGlmIHBvc3R4b3IgaXMgbm90IHNldCB0byBiZSBydW4gKi8KKwkJaWYgKHR4ICYmICF0ZXN0X2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJm9wc19yZXF1ZXN0KSkKKwkJCWFzeW5jX3R4X2Fjayh0eCk7CisJfQogCi0JaWYgKHRlc3RfYml0KFNUUklQRV9PUF9QUkVYT1IsICZwZW5kaW5nKSkKKwlpZiAodGVzdF9iaXQoU1RSSVBFX09QX1BSRVhPUiwgJm9wc19yZXF1ZXN0KSkKIAkJdHggPSBvcHNfcnVuX3ByZXhvcihzaCwgdHgpOwogCi0JaWYgKHRlc3RfYml0KFNUUklQRV9PUF9CSU9EUkFJTiwgJnBlbmRpbmcpKSB7Ci0JCXR4ID0gb3BzX3J1bl9iaW9kcmFpbihzaCwgdHgsIHBlbmRpbmcpOworCWlmICh0ZXN0X2JpdChTVFJJUEVfT1BfQklPRFJBSU4sICZvcHNfcmVxdWVzdCkpIHsKKwkJdHggPSBvcHNfcnVuX2Jpb2RyYWluKHNoLCB0eCk7CiAJCW92ZXJsYXBfY2xlYXIrKzsKIAl9CiAKLQlpZiAodGVzdF9iaXQoU1RSSVBFX09QX1BPU1RYT1IsICZwZW5kaW5nKSkKLQkJb3BzX3J1bl9wb3N0eG9yKHNoLCB0eCwgcGVuZGluZyk7CisJaWYgKHRlc3RfYml0KFNUUklQRV9PUF9QT1NUWE9SLCAmb3BzX3JlcXVlc3QpKQorCQlvcHNfcnVuX3Bvc3R4b3Ioc2gsIHR4KTsKIAotCWlmICh0ZXN0X2JpdChTVFJJUEVfT1BfQ0hFQ0ssICZwZW5kaW5nKSkKKwlpZiAodGVzdF9iaXQoU1RSSVBFX09QX0NIRUNLLCAmb3BzX3JlcXVlc3QpKQogCQlvcHNfcnVuX2NoZWNrKHNoKTsKIAotCWlmICh0ZXN0X2JpdChTVFJJUEVfT1BfSU8sICZwZW5kaW5nKSkKLQkJb3BzX3J1bl9pbyhzaCk7Ci0KIAlpZiAob3ZlcmxhcF9jbGVhcikKIAkJZm9yIChpID0gZGlza3M7IGktLTsgKSB7CiAJCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2W2ldOwpAQCAtOTk3LDE0ICs5MTEsMTYgQEAKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKm9zaCwgKm5zaDsKIAlMSVNUX0hFQUQobmV3c3RyaXBlcyk7CiAJc3RydWN0IGRpc2tfaW5mbyAqbmRpc2tzOwotCWludCBlcnIgPSAwOworCWludCBlcnI7CiAJc3RydWN0IGttZW1fY2FjaGUgKnNjOwogCWludCBpOwogCiAJaWYgKG5ld3NpemUgPD0gY29uZi0+cG9vbF9zaXplKQogCQlyZXR1cm4gMDsgLyogbmV2ZXIgYm90aGVyIHRvIHNocmluayAqLwogCi0JbWRfYWxsb3dfd3JpdGUoY29uZi0+bWRkZXYpOworCWVyciA9IG1kX2FsbG93X3dyaXRlKGNvbmYtPm1kZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJLyogU3RlcCAxICovCiAJc2MgPSBrbWVtX2NhY2hlX2NyZWF0ZShjb25mLT5jYWNoZV9uYW1lWzEtY29uZi0+YWN0aXZlX25hbWVdLApAQCAtMTcwMywxMSArMTYxOSwxMSBAQAogCX0KIH0KIAotc3RhdGljIGludAotaGFuZGxlX3dyaXRlX29wZXJhdGlvbnM1KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCByY3csIGludCBleHBhbmQpCitzdGF0aWMgdm9pZAorc2NoZWR1bGVfcmVjb25zdHJ1Y3Rpb241KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSAqcywKKwkJCSBpbnQgcmN3LCBpbnQgZXhwYW5kKQogewogCWludCBpLCBwZF9pZHggPSBzaC0+cGRfaWR4LCBkaXNrcyA9IHNoLT5kaXNrczsKLQlpbnQgbG9ja2VkID0gMDsKIAogCWlmIChyY3cpIHsKIAkJLyogaWYgd2UgYXJlIG5vdCBleHBhbmRpbmcgdGhpcyBpcyBhIHByb3BlciB3cml0ZSByZXF1ZXN0LCBhbmQKQEAgLTE3MTUsNTMgKzE2MzEsNDggQEAKIAkJICogc3RyaXBlIGNhY2hlCiAJCSAqLwogCQlpZiAoIWV4cGFuZCkgewotCQkJc2V0X2JpdChTVFJJUEVfT1BfQklPRFJBSU4sICZzaC0+b3BzLnBlbmRpbmcpOwotCQkJc2gtPm9wcy5jb3VudCsrOwotCQl9CisJCQlzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPSByZWNvbnN0cnVjdF9zdGF0ZV9kcmFpbl9ydW47CisJCQlzZXRfYml0KFNUUklQRV9PUF9CSU9EUkFJTiwgJnMtPm9wc19yZXF1ZXN0KTsKKwkJfSBlbHNlCisJCQlzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPSByZWNvbnN0cnVjdF9zdGF0ZV9ydW47CiAKLQkJc2V0X2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnNoLT5vcHMucGVuZGluZyk7Ci0JCXNoLT5vcHMuY291bnQrKzsKKwkJc2V0X2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnMtPm9wc19yZXF1ZXN0KTsKIAogCQlmb3IgKGkgPSBkaXNrczsgaS0tOyApIHsKIAkJCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07CiAKIAkJCWlmIChkZXYtPnRvd3JpdGUpIHsKIAkJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpOworCQkJCXNldF9iaXQoUjVfV2FudGRyYWluLCAmZGV2LT5mbGFncyk7CiAJCQkJaWYgKCFleHBhbmQpCiAJCQkJCWNsZWFyX2JpdChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpOwotCQkJCWxvY2tlZCsrOworCQkJCXMtPmxvY2tlZCsrOwogCQkJfQogCQl9Ci0JCWlmIChsb2NrZWQgKyAxID09IGRpc2tzKQorCQlpZiAocy0+bG9ja2VkICsgMSA9PSBkaXNrcykKIAkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChTVFJJUEVfRlVMTF9XUklURSwgJnNoLT5zdGF0ZSkpCiAJCQkJYXRvbWljX2luYygmc2gtPnJhaWRfY29uZi0+cGVuZGluZ19mdWxsX3dyaXRlcyk7CiAJfSBlbHNlIHsKIAkJQlVHX09OKCEodGVzdF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W3BkX2lkeF0uZmxhZ3MpIHx8CiAJCQl0ZXN0X2JpdChSNV9XYW50Y29tcHV0ZSwgJnNoLT5kZXZbcGRfaWR4XS5mbGFncykpKTsKIAotCQlzZXRfYml0KFNUUklQRV9PUF9QUkVYT1IsICZzaC0+b3BzLnBlbmRpbmcpOwotCQlzZXRfYml0KFNUUklQRV9PUF9CSU9EUkFJTiwgJnNoLT5vcHMucGVuZGluZyk7Ci0JCXNldF9iaXQoU1RSSVBFX09QX1BPU1RYT1IsICZzaC0+b3BzLnBlbmRpbmcpOwotCi0JCXNoLT5vcHMuY291bnQgKz0gMzsKKwkJc2gtPnJlY29uc3RydWN0X3N0YXRlID0gcmVjb25zdHJ1Y3Rfc3RhdGVfcHJleG9yX2RyYWluX3J1bjsKKwkJc2V0X2JpdChTVFJJUEVfT1BfUFJFWE9SLCAmcy0+b3BzX3JlcXVlc3QpOworCQlzZXRfYml0KFNUUklQRV9PUF9CSU9EUkFJTiwgJnMtPm9wc19yZXF1ZXN0KTsKKwkJc2V0X2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnMtPm9wc19yZXF1ZXN0KTsKIAogCQlmb3IgKGkgPSBkaXNrczsgaS0tOyApIHsKIAkJCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07CiAJCQlpZiAoaSA9PSBwZF9pZHgpCiAJCQkJY29udGludWU7CiAKLQkJCS8qIEZvciBhIHJlYWQtbW9kaWZ5IHdyaXRlIHRoZXJlIG1heSBiZSBibG9ja3MgdGhhdCBhcmUKLQkJCSAqIGxvY2tlZCBmb3IgcmVhZGluZyB3aGlsZSBvdGhlcnMgYXJlIHJlYWR5IHRvIGJlCi0JCQkgKiB3cml0dGVuIHNvIHdlIGRpc3Rpbmd1aXNoIHRoZXNlIGJsb2NrcyBieSB0aGUKLQkJCSAqIFI1X1dhbnRwcmV4b3IgYml0Ci0JCQkgKi8KIAkJCWlmIChkZXYtPnRvd3JpdGUgJiYKIAkJCSAgICAodGVzdF9iaXQoUjVfVVBUT0RBVEUsICZkZXYtPmZsYWdzKSB8fAotCQkJICAgIHRlc3RfYml0KFI1X1dhbnRjb21wdXRlLCAmZGV2LT5mbGFncykpKSB7Ci0JCQkJc2V0X2JpdChSNV9XYW50cHJleG9yLCAmZGV2LT5mbGFncyk7CisJCQkgICAgIHRlc3RfYml0KFI1X1dhbnRjb21wdXRlLCAmZGV2LT5mbGFncykpKSB7CisJCQkJc2V0X2JpdChSNV9XYW50ZHJhaW4sICZkZXYtPmZsYWdzKTsKIAkJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpOwogCQkJCWNsZWFyX2JpdChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpOwotCQkJCWxvY2tlZCsrOworCQkJCXMtPmxvY2tlZCsrOwogCQkJfQogCQl9CiAJfQpAQCAtMTc3MSwxMyArMTY4MiwxMSBAQAogCSAqLwogCXNldF9iaXQoUjVfTE9DS0VELCAmc2gtPmRldltwZF9pZHhdLmZsYWdzKTsKIAljbGVhcl9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W3BkX2lkeF0uZmxhZ3MpOwotCWxvY2tlZCsrOworCXMtPmxvY2tlZCsrOwogCi0JcHJfZGVidWcoIiVzOiBzdHJpcGUgJWxsdSBsb2NrZWQ6ICVkIHBlbmRpbmc6ICVseFxuIiwKKwlwcl9kZWJ1ZygiJXM6IHN0cmlwZSAlbGx1IGxvY2tlZDogJWQgb3BzX3JlcXVlc3Q6ICVseFxuIiwKIAkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwKLQkJbG9ja2VkLCBzaC0+b3BzLnBlbmRpbmcpOwotCi0JcmV0dXJuIGxvY2tlZDsKKwkJcy0+bG9ja2VkLCBzLT5vcHNfcmVxdWVzdCk7CiB9CiAKIC8qCkBAIC0xODc2LDcgKzE3ODUsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotaGFuZGxlX3JlcXVlc3RzX3RvX2ZhaWxlZF9hcnJheShyYWlkNV9jb25mX3QgKmNvbmYsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsCitoYW5kbGVfZmFpbGVkX3N0cmlwZShyYWlkNV9jb25mX3QgKmNvbmYsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsCiAJCQkJc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlICpzLCBpbnQgZGlza3MsCiAJCQkJc3RydWN0IGJpbyAqKnJldHVybl9iaSkKIHsKQEAgLTE5NjcsNDggKzE4NzYsMzggQEAKIAkJCW1kX3dha2V1cF90aHJlYWQoY29uZi0+bWRkZXYtPnRocmVhZCk7CiB9CiAKLS8qIF9faGFuZGxlX2lzc3VpbmdfbmV3X3JlYWRfcmVxdWVzdHM1IC0gcmV0dXJucyAwIGlmIHRoZXJlIGFyZSBubyBtb3JlIGRpc2tzCi0gKiB0byBwcm9jZXNzCisvKiBmZXRjaF9ibG9jazUgLSBjaGVja3MgdGhlIGdpdmVuIG1lbWJlciBkZXZpY2UgdG8gc2VlIGlmIGl0cyBkYXRhIG5lZWRzCisgKiB0byBiZSByZWFkIG9yIGNvbXB1dGVkIHRvIHNhdGlzZnkgYSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMSB3aGVuIG5vIG1vcmUgbWVtYmVyIGRldmljZXMgbmVlZCB0byBiZSBjaGVja2VkLCBvdGhlcndpc2UgcmV0dXJucworICogMCB0byB0ZWxsIHRoZSBsb29wIGluIGhhbmRsZV9zdHJpcGVfZmlsbDUgdG8gY29udGludWUKICAqLwotc3RhdGljIGludCBfX2hhbmRsZV9pc3N1aW5nX25ld19yZWFkX3JlcXVlc3RzNShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLAotCQkJc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlICpzLCBpbnQgZGlza19pZHgsIGludCBkaXNrcykKK3N0YXRpYyBpbnQgZmV0Y2hfYmxvY2s1KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSAqcywKKwkJCWludCBkaXNrX2lkeCwgaW50IGRpc2tzKQogewogCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbZGlza19pZHhdOwogCXN0cnVjdCByNWRldiAqZmFpbGVkX2RldiA9ICZzaC0+ZGV2W3MtPmZhaWxlZF9udW1dOwogCi0JLyogZG9uJ3Qgc2NoZWR1bGUgY29tcHV0ZSBvcGVyYXRpb25zIG9yIHJlYWRzIG9uIHRoZSBwYXJpdHkgYmxvY2sgd2hpbGUKLQkgKiBhIGNoZWNrIGlzIGluIGZsaWdodAotCSAqLwotCWlmICgoZGlza19pZHggPT0gc2gtPnBkX2lkeCkgJiYKLQkgICAgIHRlc3RfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMucGVuZGluZykpCi0JCXJldHVybiB+MDsKLQogCS8qIGlzIHRoZSBkYXRhIGluIHRoaXMgYmxvY2sgbmVlZGVkLCBhbmQgY2FuIHdlIGdldCBpdD8gKi8KIAlpZiAoIXRlc3RfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpICYmCi0JICAgICF0ZXN0X2JpdChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpICYmIChkZXYtPnRvcmVhZCB8fAotCSAgICAoZGV2LT50b3dyaXRlICYmICF0ZXN0X2JpdChSNV9PVkVSV1JJVEUsICZkZXYtPmZsYWdzKSkgfHwKLQkgICAgIHMtPnN5bmNpbmcgfHwgcy0+ZXhwYW5kaW5nIHx8IChzLT5mYWlsZWQgJiYKLQkgICAgIChmYWlsZWRfZGV2LT50b3JlYWQgfHwgKGZhaWxlZF9kZXYtPnRvd3JpdGUgJiYKLQkgICAgICF0ZXN0X2JpdChSNV9PVkVSV1JJVEUsICZmYWlsZWRfZGV2LT5mbGFncykKLQkgICAgICkpKSkpIHsKLQkJLyogMS8gV2Ugd291bGQgbGlrZSB0byBnZXQgdGhpcyBibG9jaywgcG9zc2libHkgYnkgY29tcHV0aW5nIGl0LAotCQkgKiBidXQgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8uCi0JCSAqCi0JCSAqIDIvIFNpbmNlIHBhcml0eSBjaGVjayBvcGVyYXRpb25zIHBvdGVudGlhbGx5IG1ha2UgdGhlIHBhcml0eQotCQkgKiBibG9jayAhdXB0b2RhdGUgaXQgd2lsbCBuZWVkIHRvIGJlIHJlZnJlc2hlZCBiZWZvcmUgYW55Ci0JCSAqIGNvbXB1dGUgb3BlcmF0aW9ucyBvbiBkYXRhIGRpc2tzIGFyZSBzY2hlZHVsZWQuCi0JCSAqCi0JCSAqIDMvIFdlIGhvbGQgb2ZmIHBhcml0eSBibG9jayByZS1yZWFkcyB1bnRpbCBjaGVjayBvcGVyYXRpb25zCi0JCSAqIGhhdmUgcXVpZXNjZWQuCisJICAgICF0ZXN0X2JpdChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpICYmCisJICAgIChkZXYtPnRvcmVhZCB8fAorCSAgICAgKGRldi0+dG93cml0ZSAmJiAhdGVzdF9iaXQoUjVfT1ZFUldSSVRFLCAmZGV2LT5mbGFncykpIHx8CisJICAgICBzLT5zeW5jaW5nIHx8IHMtPmV4cGFuZGluZyB8fAorCSAgICAgKHMtPmZhaWxlZCAmJgorCSAgICAgIChmYWlsZWRfZGV2LT50b3JlYWQgfHwKKwkgICAgICAgKGZhaWxlZF9kZXYtPnRvd3JpdGUgJiYKKwkJIXRlc3RfYml0KFI1X09WRVJXUklURSwgJmZhaWxlZF9kZXYtPmZsYWdzKSkpKSkpIHsKKwkJLyogV2Ugd291bGQgbGlrZSB0byBnZXQgdGhpcyBibG9jaywgcG9zc2libHkgYnkgY29tcHV0aW5nIGl0LAorCQkgKiBvdGhlcndpc2UgcmVhZCBpdCBpZiB0aGUgYmFja2luZyBkaXNrIGlzIGluc3luYwogCQkgKi8KIAkJaWYgKChzLT51cHRvZGF0ZSA9PSBkaXNrcyAtIDEpICYmCi0JCSAgICAocy0+ZmFpbGVkICYmIGRpc2tfaWR4ID09IHMtPmZhaWxlZF9udW0pICYmCi0JCSAgICAhdGVzdF9iaXQoU1RSSVBFX09QX0NIRUNLLCAmc2gtPm9wcy5wZW5kaW5nKSkgewotCQkJc2V0X2JpdChTVFJJUEVfT1BfQ09NUFVURV9CTEssICZzaC0+b3BzLnBlbmRpbmcpOworCQkgICAgKHMtPmZhaWxlZCAmJiBkaXNrX2lkeCA9PSBzLT5mYWlsZWRfbnVtKSkgeworCQkJc2V0X2JpdChTVFJJUEVfQ09NUFVURV9SVU4sICZzaC0+c3RhdGUpOworCQkJc2V0X2JpdChTVFJJUEVfT1BfQ09NUFVURV9CTEssICZzLT5vcHNfcmVxdWVzdCk7CiAJCQlzZXRfYml0KFI1X1dhbnRjb21wdXRlLCAmZGV2LT5mbGFncyk7CiAJCQlzaC0+b3BzLnRhcmdldCA9IGRpc2tfaWR4OwogCQkJcy0+cmVxX2NvbXB1dGUgPSAxOwotCQkJc2gtPm9wcy5jb3VudCsrOwogCQkJLyogQ2FyZWZ1bDogZnJvbSB0aGlzIHBvaW50IG9uICd1cHRvZGF0ZScgaXMgaW4gdGhlIGV5ZQogCQkJICogb2YgcmFpZDVfcnVuX29wcyB3aGljaCBzZXJ2aWNlcyAnY29tcHV0ZScgb3BlcmF0aW9ucwogCQkJICogYmVmb3JlIHdyaXRlcy4gUjVfV2FudGNvbXB1dGUgZmxhZ3MgYSBibG9jayB0aGF0IHdpbGwKQEAgLTIwMTYsNTMgKzE5MTUsNDAgQEAKIAkJCSAqIHN1YnNlcXVlbnQgb3BlcmF0aW9uLgogCQkJICovCiAJCQlzLT51cHRvZGF0ZSsrOwotCQkJcmV0dXJuIDA7IC8qIHVwdG9kYXRlICsgY29tcHV0ZSA9PSBkaXNrcyAqLworCQkJcmV0dXJuIDE7IC8qIHVwdG9kYXRlICsgY29tcHV0ZSA9PSBkaXNrcyAqLwogCQl9IGVsc2UgaWYgKHRlc3RfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpKSB7CiAJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpOwogCQkJc2V0X2JpdChSNV9XYW50cmVhZCwgJmRldi0+ZmxhZ3MpOwotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9PUF9JTywgJnNoLT5vcHMucGVuZGluZykpCi0JCQkJc2gtPm9wcy5jb3VudCsrOwogCQkJcy0+bG9ja2VkKys7CiAJCQlwcl9kZWJ1ZygiUmVhZGluZyBibG9jayAlZCAoc3luYz0lZClcbiIsIGRpc2tfaWR4LAogCQkJCXMtPnN5bmNpbmcpOwogCQl9CiAJfQogCi0JcmV0dXJuIH4wOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfaXNzdWluZ19uZXdfcmVhZF9yZXF1ZXN0czUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwKKy8qKgorICogaGFuZGxlX3N0cmlwZV9maWxsNSAtIHJlYWQgb3IgY29tcHV0ZSBkYXRhIHRvIHNhdGlzZnkgcGVuZGluZyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZV9maWxsNShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLAogCQkJc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlICpzLCBpbnQgZGlza3MpCiB7CiAJaW50IGk7CiAKLQkvKiBDbGVhciBjb21wbGV0ZWQgY29tcHV0ZSBvcGVyYXRpb25zLiAgUGFyaXR5IHJlY292ZXJ5Ci0JICogKFNUUklQRV9PUF9NT0RfUkVQQUlSX1BEKSBpbXBsaWVzIGEgd3JpdGUtYmFjayB3aGljaCBpcyBoYW5kbGVkCi0JICogbGF0ZXIgb24gaW4gdGhpcyByb3V0aW5lCi0JICovCi0JaWYgKHRlc3RfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJnNoLT5vcHMuY29tcGxldGUpICYmCi0JCSF0ZXN0X2JpdChTVFJJUEVfT1BfTU9EX1JFUEFJUl9QRCwgJnNoLT5vcHMucGVuZGluZykpIHsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJnNoLT5vcHMuY29tcGxldGUpOwotCQljbGVhcl9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmc2gtPm9wcy5hY2spOwotCQljbGVhcl9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmc2gtPm9wcy5wZW5kaW5nKTsKLQl9Ci0KIAkvKiBsb29rIGZvciBibG9ja3MgdG8gcmVhZC9jb21wdXRlLCBza2lwIHRoaXMgaWYgYSBjb21wdXRlCiAJICogaXMgYWxyZWFkeSBpbiBmbGlnaHQsIG9yIGlmIHRoZSBzdHJpcGUgY29udGVudHMgYXJlIGluIHRoZQogCSAqIG1pZHN0IG9mIGNoYW5naW5nIGR1ZSB0byBhIHdyaXRlCiAJICovCi0JaWYgKCF0ZXN0X2JpdChTVFJJUEVfT1BfQ09NUFVURV9CTEssICZzaC0+b3BzLnBlbmRpbmcpICYmCi0JCSF0ZXN0X2JpdChTVFJJUEVfT1BfUFJFWE9SLCAmc2gtPm9wcy5wZW5kaW5nKSAmJgotCQkhdGVzdF9iaXQoU1RSSVBFX09QX1BPU1RYT1IsICZzaC0+b3BzLnBlbmRpbmcpKSB7CisJaWYgKCF0ZXN0X2JpdChTVFJJUEVfQ09NUFVURV9SVU4sICZzaC0+c3RhdGUpICYmICFzaC0+Y2hlY2tfc3RhdGUgJiYKKwkgICAgIXNoLT5yZWNvbnN0cnVjdF9zdGF0ZSkKIAkJZm9yIChpID0gZGlza3M7IGktLTsgKQotCQkJaWYgKF9faGFuZGxlX2lzc3VpbmdfbmV3X3JlYWRfcmVxdWVzdHM1KAotCQkJCXNoLCBzLCBpLCBkaXNrcykgPT0gMCkKKwkJCWlmIChmZXRjaF9ibG9jazUoc2gsIHMsIGksIGRpc2tzKSkKIAkJCQlicmVhazsKLQl9CiAJc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX2lzc3VpbmdfbmV3X3JlYWRfcmVxdWVzdHM2KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlX2ZpbGw2KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsCiAJCQlzdHJ1Y3Qgc3RyaXBlX2hlYWRfc3RhdGUgKnMsIHN0cnVjdCByNl9zdGF0ZSAqcjZzLAogCQkJaW50IGRpc2tzKQogewpAQCAtMjEyMSwxMiArMjAwNywxMiBAQAogfQogCiAKLS8qIGhhbmRsZV9jb21wbGV0ZWRfd3JpdGVfcmVxdWVzdHMKKy8qIGhhbmRsZV9zdHJpcGVfY2xlYW5fZXZlbnQKICAqIGFueSB3cml0dGVuIGJsb2NrIG9uIGFuIHVwdG9kYXRlIG9yIGZhaWxlZCBkcml2ZSBjYW4gYmUgcmV0dXJuZWQuCiAgKiBOb3RlIHRoYXQgaWYgd2UgJ3dyb3RlJyB0byBhIGZhaWxlZCBkcml2ZSwgaXQgd2lsbCBiZSBVUFRPREFURSwgYnV0CiAgKiBuZXZlciBMT0NLRUQsIHNvIHdlIGRvbid0IG5lZWQgdG8gdGVzdCAnZmFpbGVkJyBkaXJlY3RseS4KICAqLwotc3RhdGljIHZvaWQgaGFuZGxlX2NvbXBsZXRlZF93cml0ZV9yZXF1ZXN0cyhyYWlkNV9jb25mX3QgKmNvbmYsCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlX2NsZWFuX2V2ZW50KHJhaWQ1X2NvbmZfdCAqY29uZiwKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgZGlza3MsIHN0cnVjdCBiaW8gKipyZXR1cm5fYmkpCiB7CiAJaW50IGk7CkBAIC0yMTcxLDcgKzIwNTcsNyBAQAogCQkJbWRfd2FrZXVwX3RocmVhZChjb25mLT5tZGRldi0+dGhyZWFkKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX2lzc3VpbmdfbmV3X3dyaXRlX3JlcXVlc3RzNShyYWlkNV9jb25mX3QgKmNvbmYsCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlX2RpcnR5aW5nNShyYWlkNV9jb25mX3QgKmNvbmYsCiAJCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsCXN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSAqcywgaW50IGRpc2tzKQogewogCWludCBybXcgPSAwLCByY3cgPSAwLCBpOwpAQCAtMjIxNSw5ICsyMTAxLDYgQEAKIAkJCQkJCSIlZCBmb3Igci1tLXdcbiIsIGkpOwogCQkJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpOwogCQkJCQlzZXRfYml0KFI1X1dhbnRyZWFkLCAmZGV2LT5mbGFncyk7Ci0JCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdCgKLQkJCQkJCVNUUklQRV9PUF9JTywgJnNoLT5vcHMucGVuZGluZykpCi0JCQkJCQlzaC0+b3BzLmNvdW50Kys7CiAJCQkJCXMtPmxvY2tlZCsrOwogCQkJCX0gZWxzZSB7CiAJCQkJCXNldF9iaXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUpOwpAQCAtMjI0MSw5ICsyMTI0LDYgQEAKIAkJCQkJCSIlZCBmb3IgUmVjb25zdHJ1Y3RcbiIsIGkpOwogCQkJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpOwogCQkJCQlzZXRfYml0KFI1X1dhbnRyZWFkLCAmZGV2LT5mbGFncyk7Ci0JCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdCgKLQkJCQkJCVNUUklQRV9PUF9JTywgJnNoLT5vcHMucGVuZGluZykpCi0JCQkJCQlzaC0+b3BzLmNvdW50Kys7CiAJCQkJCXMtPmxvY2tlZCsrOwogCQkJCX0gZWxzZSB7CiAJCQkJCXNldF9iaXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUpOwpAQCAtMjI2MSwxNCArMjE0MSwxMyBAQAogCSAqIHNpbXVsdGFuZW91c2x5LiAgSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UgdGhlbiBuZXcgd3JpdGVzIG5lZWQgdG8gYmUKIAkgKiBoZWxkIG9mZiB1bnRpbCB0aGUgY29tcHV0ZSBjb21wbGV0ZXMuCiAJICovCi0JaWYgKChzLT5yZXFfY29tcHV0ZSB8fAotCSAgICAhdGVzdF9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmc2gtPm9wcy5wZW5kaW5nKSkgJiYKLQkJKHMtPmxvY2tlZCA9PSAwICYmIChyY3cgPT0gMCB8fCBybXcgPT0gMCkgJiYKLQkJIXRlc3RfYml0KFNUUklQRV9CSVRfREVMQVksICZzaC0+c3RhdGUpKSkKLQkJcy0+bG9ja2VkICs9IGhhbmRsZV93cml0ZV9vcGVyYXRpb25zNShzaCwgcmN3ID09IDAsIDApOworCWlmICgocy0+cmVxX2NvbXB1dGUgfHwgIXRlc3RfYml0KFNUUklQRV9DT01QVVRFX1JVTiwgJnNoLT5zdGF0ZSkpICYmCisJICAgIChzLT5sb2NrZWQgPT0gMCAmJiAocmN3ID09IDAgfHwgcm13ID09IDApICYmCisJICAgICF0ZXN0X2JpdChTVFJJUEVfQklUX0RFTEFZLCAmc2gtPnN0YXRlKSkpCisJCXNjaGVkdWxlX3JlY29uc3RydWN0aW9uNShzaCwgcywgcmN3ID09IDAsIDApOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfaXNzdWluZ19uZXdfd3JpdGVfcmVxdWVzdHM2KHJhaWQ1X2NvbmZfdCAqY29uZiwKK3N0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGVfZGlydHlpbmc2KHJhaWQ1X2NvbmZfdCAqY29uZiwKIAkJc3RydWN0IHN0cmlwZV9oZWFkICpzaCwJc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlICpzLAogCQlzdHJ1Y3QgcjZfc3RhdGUgKnI2cywgaW50IGRpc2tzKQogewpAQCAtMjM3MSw5MiArMjI1MCw4NiBAQAogc3RhdGljIHZvaWQgaGFuZGxlX3Bhcml0eV9jaGVja3M1KHJhaWQ1X2NvbmZfdCAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCwKIAkJCQlzdHJ1Y3Qgc3RyaXBlX2hlYWRfc3RhdGUgKnMsIGludCBkaXNrcykKIHsKLQlpbnQgY2FuY2VsZWRfY2hlY2sgPSAwOworCXN0cnVjdCByNWRldiAqZGV2ID0gTlVMTDsKIAogCXNldF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSk7CiAKLQkvKiBjb21wbGV0ZSBhIGNoZWNrIG9wZXJhdGlvbiAqLwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1RSSVBFX09QX0NIRUNLLCAmc2gtPm9wcy5jb21wbGV0ZSkpIHsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMuYWNrKTsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMucGVuZGluZyk7CisJc3dpdGNoIChzaC0+Y2hlY2tfc3RhdGUpIHsKKwljYXNlIGNoZWNrX3N0YXRlX2lkbGU6CisJCS8qIHN0YXJ0IGEgbmV3IGNoZWNrIG9wZXJhdGlvbiBpZiB0aGVyZSBhcmUgbm8gZmFpbHVyZXMgKi8KIAkJaWYgKHMtPmZhaWxlZCA9PSAwKSB7Ci0JCQlpZiAoc2gtPm9wcy56ZXJvX3N1bV9yZXN1bHQgPT0gMCkKLQkJCQkvKiBwYXJpdHkgaXMgY29ycmVjdCAob24gZGlzYywKLQkJCQkgKiBub3QgaW4gYnVmZmVyIGFueSBtb3JlKQotCQkJCSAqLwotCQkJCXNldF9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSk7Ci0JCQllbHNlIHsKLQkJCQljb25mLT5tZGRldi0+cmVzeW5jX21pc21hdGNoZXMgKz0KLQkJCQkJU1RSSVBFX1NFQ1RPUlM7Ci0JCQkJaWYgKHRlc3RfYml0KAotCQkJCSAgICAgTURfUkVDT1ZFUllfQ0hFQ0ssICZjb25mLT5tZGRldi0+cmVjb3ZlcnkpKQotCQkJCQkvKiBkb24ndCB0cnkgdG8gcmVwYWlyISEgKi8KLQkJCQkJc2V0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKTsKLQkJCQllbHNlIHsKLQkJCQkJc2V0X2JpdChTVFJJUEVfT1BfQ09NUFVURV9CTEssCi0JCQkJCQkmc2gtPm9wcy5wZW5kaW5nKTsKLQkJCQkJc2V0X2JpdChTVFJJUEVfT1BfTU9EX1JFUEFJUl9QRCwKLQkJCQkJCSZzaC0+b3BzLnBlbmRpbmcpOwotCQkJCQlzZXRfYml0KFI1X1dhbnRjb21wdXRlLAotCQkJCQkJJnNoLT5kZXZbc2gtPnBkX2lkeF0uZmxhZ3MpOwotCQkJCQlzaC0+b3BzLnRhcmdldCA9IHNoLT5wZF9pZHg7Ci0JCQkJCXNoLT5vcHMuY291bnQrKzsKLQkJCQkJcy0+dXB0b2RhdGUrKzsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZQotCQkJY2FuY2VsZWRfY2hlY2sgPSAxOyAvKiBTVFJJUEVfSU5TWU5DIGlzIG5vdCBzZXQgKi8KLQl9Ci0KLQkvKiBzdGFydCBhIG5ldyBjaGVjayBvcGVyYXRpb24gaWYgdGhlcmUgYXJlIG5vIGZhaWx1cmVzLCB0aGUgc3RyaXBlIGlzCi0JICogbm90IGluc3luYywgYW5kIGEgcmVwYWlyIGlzIG5vdCBpbiBmbGlnaHQKLQkgKi8KLQlpZiAocy0+ZmFpbGVkID09IDAgJiYKLQkgICAgIXRlc3RfYml0KFNUUklQRV9JTlNZTkMsICZzaC0+c3RhdGUpICYmCi0JICAgICF0ZXN0X2JpdChTVFJJUEVfT1BfTU9EX1JFUEFJUl9QRCwgJnNoLT5vcHMucGVuZGluZykpIHsKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMucGVuZGluZykpIHsKIAkJCUJVR19PTihzLT51cHRvZGF0ZSAhPSBkaXNrcyk7CisJCQlzaC0+Y2hlY2tfc3RhdGUgPSBjaGVja19zdGF0ZV9ydW47CisJCQlzZXRfYml0KFNUUklQRV9PUF9DSEVDSywgJnMtPm9wc19yZXF1ZXN0KTsKIAkJCWNsZWFyX2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbc2gtPnBkX2lkeF0uZmxhZ3MpOwotCQkJc2gtPm9wcy5jb3VudCsrOwogCQkJcy0+dXB0b2RhdGUtLTsKKwkJCWJyZWFrOwogCQl9Ci0JfQotCi0JLyogY2hlY2sgaWYgd2UgY2FuIGNsZWFyIGEgcGFyaXR5IGRpc2sgcmVjb25zdHJ1Y3QgKi8KLQlpZiAodGVzdF9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmc2gtPm9wcy5jb21wbGV0ZSkgJiYKLQkgICAgdGVzdF9iaXQoU1RSSVBFX09QX01PRF9SRVBBSVJfUEQsICZzaC0+b3BzLnBlbmRpbmcpKSB7Ci0KLQkJY2xlYXJfYml0KFNUUklQRV9PUF9NT0RfUkVQQUlSX1BELCAmc2gtPm9wcy5wZW5kaW5nKTsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJnNoLT5vcHMuY29tcGxldGUpOwotCQljbGVhcl9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmc2gtPm9wcy5hY2spOwotCQljbGVhcl9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmc2gtPm9wcy5wZW5kaW5nKTsKLQl9Ci0KLQotCS8qIFdhaXQgZm9yIGNoZWNrIHBhcml0eSBhbmQgY29tcHV0ZSBibG9jayBvcGVyYXRpb25zIHRvIGNvbXBsZXRlCi0JICogYmVmb3JlIHdyaXRlLWJhY2suICBJZiBhIGZhaWx1cmUgb2NjdXJyZWQgd2hpbGUgdGhlIGNoZWNrIG9wZXJhdGlvbgotCSAqIHdhcyBpbiBmbGlnaHQgd2UgbmVlZCB0byBjeWNsZSB0aGlzIHN0cmlwZSB0aHJvdWdoIGhhbmRsZV9zdHJpcGUKLQkgKiBzaW5jZSB0aGUgcGFyaXR5IGJsb2NrIG1heSBub3QgYmUgdXB0b2RhdGUKLQkgKi8KLQlpZiAoIWNhbmNlbGVkX2NoZWNrICYmICF0ZXN0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKSAmJgotCSAgICAhdGVzdF9iaXQoU1RSSVBFX09QX0NIRUNLLCAmc2gtPm9wcy5wZW5kaW5nKSAmJgotCSAgICAhdGVzdF9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmc2gtPm9wcy5wZW5kaW5nKSkgewotCQlzdHJ1Y3QgcjVkZXYgKmRldjsKLQkJLyogZWl0aGVyIGZhaWxlZCBwYXJpdHkgY2hlY2ssIG9yIHJlY292ZXJ5IGlzIGhhcHBlbmluZyAqLwotCQlpZiAocy0+ZmFpbGVkID09IDApCi0JCQlzLT5mYWlsZWRfbnVtID0gc2gtPnBkX2lkeDsKIAkJZGV2ID0gJnNoLT5kZXZbcy0+ZmFpbGVkX251bV07CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgY2hlY2tfc3RhdGVfY29tcHV0ZV9yZXN1bHQ6CisJCXNoLT5jaGVja19zdGF0ZSA9IGNoZWNrX3N0YXRlX2lkbGU7CisJCWlmICghZGV2KQorCQkJZGV2ID0gJnNoLT5kZXZbc2gtPnBkX2lkeF07CisKKwkJLyogY2hlY2sgdGhhdCBhIHdyaXRlIGhhcyBub3QgbWFkZSB0aGUgc3RyaXBlIGluc3luYyAqLworCQlpZiAodGVzdF9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSkpCisJCQlicmVhazsKKworCQkvKiBlaXRoZXIgZmFpbGVkIHBhcml0eSBjaGVjaywgb3IgcmVjb3ZlcnkgaXMgaGFwcGVuaW5nICovCiAJCUJVR19PTighdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZkZXYtPmZsYWdzKSk7CiAJCUJVR19PTihzLT51cHRvZGF0ZSAhPSBkaXNrcyk7CiAKIAkJc2V0X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKTsKKwkJcy0+bG9ja2VkKys7CiAJCXNldF9iaXQoUjVfV2FudHdyaXRlLCAmZGV2LT5mbGFncyk7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChTVFJJUEVfT1BfSU8sICZzaC0+b3BzLnBlbmRpbmcpKQotCQkJc2gtPm9wcy5jb3VudCsrOwogCiAJCWNsZWFyX2JpdChTVFJJUEVfREVHUkFERUQsICZzaC0+c3RhdGUpOwotCQlzLT5sb2NrZWQrKzsKIAkJc2V0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBjaGVja19zdGF0ZV9ydW46CisJCWJyZWFrOyAvKiB3ZSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiB1cG9uIGNvbXBsZXRpb24gKi8KKwljYXNlIGNoZWNrX3N0YXRlX2NoZWNrX3Jlc3VsdDoKKwkJc2gtPmNoZWNrX3N0YXRlID0gY2hlY2tfc3RhdGVfaWRsZTsKKworCQkvKiBpZiBhIGZhaWx1cmUgb2NjdXJyZWQgZHVyaW5nIHRoZSBjaGVjayBvcGVyYXRpb24sIGxlYXZlCisJCSAqIFNUUklQRV9JTlNZTkMgbm90IHNldCBhbmQgbGV0IHRoZSBzdHJpcGUgYmUgaGFuZGxlZCBhZ2FpbgorCQkgKi8KKwkJaWYgKHMtPmZhaWxlZCkKKwkJCWJyZWFrOworCisJCS8qIGhhbmRsZSBhIHN1Y2Nlc3NmdWwgY2hlY2sgb3BlcmF0aW9uLCBpZiBwYXJpdHkgaXMgY29ycmVjdAorCQkgKiB3ZSBhcmUgZG9uZS4gIE90aGVyd2lzZSB1cGRhdGUgdGhlIG1pc21hdGNoIGNvdW50IGFuZCByZXBhaXIKKwkJICogcGFyaXR5IGlmICFNRF9SRUNPVkVSWV9DSEVDSworCQkgKi8KKwkJaWYgKHNoLT5vcHMuemVyb19zdW1fcmVzdWx0ID09IDApCisJCQkvKiBwYXJpdHkgaXMgY29ycmVjdCAob24gZGlzYywKKwkJCSAqIG5vdCBpbiBidWZmZXIgYW55IG1vcmUpCisJCQkgKi8KKwkJCXNldF9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSk7CisJCWVsc2UgeworCQkJY29uZi0+bWRkZXYtPnJlc3luY19taXNtYXRjaGVzICs9IFNUUklQRV9TRUNUT1JTOworCQkJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCAmY29uZi0+bWRkZXYtPnJlY292ZXJ5KSkKKwkJCQkvKiBkb24ndCB0cnkgdG8gcmVwYWlyISEgKi8KKwkJCQlzZXRfYml0KFNUUklQRV9JTlNZTkMsICZzaC0+c3RhdGUpOworCQkJZWxzZSB7CisJCQkJc2gtPmNoZWNrX3N0YXRlID0gY2hlY2tfc3RhdGVfY29tcHV0ZV9ydW47CisJCQkJc2V0X2JpdChTVFJJUEVfQ09NUFVURV9SVU4sICZzaC0+c3RhdGUpOworCQkJCXNldF9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmcy0+b3BzX3JlcXVlc3QpOworCQkJCXNldF9iaXQoUjVfV2FudGNvbXB1dGUsCisJCQkJCSZzaC0+ZGV2W3NoLT5wZF9pZHhdLmZsYWdzKTsKKwkJCQlzaC0+b3BzLnRhcmdldCA9IHNoLT5wZF9pZHg7CisJCQkJcy0+dXB0b2RhdGUrKzsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIGNoZWNrX3N0YXRlX2NvbXB1dGVfcnVuOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGNoZWNrX3N0YXRlOiAlZCBzZWN0b3I6ICVsbHVcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc2gtPmNoZWNrX3N0YXRlLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2gtPnNlY3Rvcik7CisJCUJVRygpOwogCX0KIH0KIApAQCAtMjY0MSwxNSArMjUxNCwxNCBAQAogCXN0cnVjdCBiaW8gKnJldHVybl9iaSA9IE5VTEw7CiAJc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlIHM7CiAJc3RydWN0IHI1ZGV2ICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBwZW5kaW5nID0gMDsKIAltZGtfcmRldl90ICpibG9ja2VkX3JkZXYgPSBOVUxMOwogCWludCBwcmV4b3I7CiAKIAltZW1zZXQoJnMsIDAsIHNpemVvZihzKSk7Ci0JcHJfZGVidWcoImhhbmRsaW5nIHN0cmlwZSAlbGx1LCBzdGF0ZT0lI2x4IGNudD0lZCwgcGRfaWR4PSVkICIKLQkJIm9wcz0lbHg6JWx4OiVseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yLCBzaC0+c3RhdGUsCi0JCWF0b21pY19yZWFkKCZzaC0+Y291bnQpLCBzaC0+cGRfaWR4LAotCQlzaC0+b3BzLnBlbmRpbmcsIHNoLT5vcHMuYWNrLCBzaC0+b3BzLmNvbXBsZXRlKTsKKwlwcl9kZWJ1ZygiaGFuZGxpbmcgc3RyaXBlICVsbHUsIHN0YXRlPSUjbHggY250PSVkLCBwZF9pZHg9JWQgY2hlY2s6JWQgIgorCQkgInJlY29uc3RydWN0OiVkXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IsIHNoLT5zdGF0ZSwKKwkJIGF0b21pY19yZWFkKCZzaC0+Y291bnQpLCBzaC0+cGRfaWR4LCBzaC0+Y2hlY2tfc3RhdGUsCisJCSBzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUpOwogCiAJc3Bpbl9sb2NrKCZzaC0+bG9jayk7CiAJY2xlYXJfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOwpAQCAtMjY1OCwxNSArMjUzMCw4IEBACiAJcy5zeW5jaW5nID0gdGVzdF9iaXQoU1RSSVBFX1NZTkNJTkcsICZzaC0+c3RhdGUpOwogCXMuZXhwYW5kaW5nID0gdGVzdF9iaXQoU1RSSVBFX0VYUEFORF9TT1VSQ0UsICZzaC0+c3RhdGUpOwogCXMuZXhwYW5kZWQgPSB0ZXN0X2JpdChTVFJJUEVfRVhQQU5EX1JFQURZLCAmc2gtPnN0YXRlKTsKKwogCS8qIE5vdyB0byBsb29rIGFyb3VuZCBhbmQgc2VlIHdoYXQgY2FuIGJlIGRvbmUgKi8KLQotCS8qIGNsZWFuLXVwIGNvbXBsZXRlZCBiaW9maWxsIG9wZXJhdGlvbnMgKi8KLQlpZiAodGVzdF9iaXQoU1RSSVBFX09QX0JJT0ZJTEwsICZzaC0+b3BzLmNvbXBsZXRlKSkgewotCQljbGVhcl9iaXQoU1RSSVBFX09QX0JJT0ZJTEwsICZzaC0+b3BzLnBlbmRpbmcpOwotCQljbGVhcl9iaXQoU1RSSVBFX09QX0JJT0ZJTEwsICZzaC0+b3BzLmFjayk7Ci0JCWNsZWFyX2JpdChTVFJJUEVfT1BfQklPRklMTCwgJnNoLT5vcHMuY29tcGxldGUpOwotCX0KLQogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGk9ZGlza3M7IGktLTsgKSB7CiAJCW1ka19yZGV2X3QgKnJkZXY7CkBAIC0yNjgwLDEwICsyNTQ1LDEwIEBACiAJCS8qIG1heWJlIHdlIGNhbiByZXF1ZXN0IGEgYmlvZmlsbCBvcGVyYXRpb24KIAkJICoKIAkJICogbmV3IHdhbnRmaWxsIHJlcXVlc3RzIGFyZSBvbmx5IHBlcm1pdHRlZCB3aGlsZQotCQkgKiBTVFJJUEVfT1BfQklPRklMTCBpcyBjbGVhcgorCQkgKiBvcHNfY29tcGxldGVfYmlvZmlsbCBpcyBndWFyYW50ZWVkIHRvIGJlIGluYWN0aXZlCiAJCSAqLwogCQlpZiAodGVzdF9iaXQoUjVfVVBUT0RBVEUsICZkZXYtPmZsYWdzKSAmJiBkZXYtPnRvcmVhZCAmJgotCQkJIXRlc3RfYml0KFNUUklQRV9PUF9CSU9GSUxMLCAmc2gtPm9wcy5wZW5kaW5nKSkKKwkJICAgICF0ZXN0X2JpdChTVFJJUEVfQklPRklMTF9SVU4sICZzaC0+c3RhdGUpKQogCQkJc2V0X2JpdChSNV9XYW50ZmlsbCwgJmRldi0+ZmxhZ3MpOwogCiAJCS8qIG5vdyBjb3VudCBzb21lIHRoaW5ncyAqLwpAQCAtMjcyNyw4ICsyNTkyLDEwIEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCWlmIChzLnRvX2ZpbGwgJiYgIXRlc3RfYW5kX3NldF9iaXQoU1RSSVBFX09QX0JJT0ZJTEwsICZzaC0+b3BzLnBlbmRpbmcpKQotCQlzaC0+b3BzLmNvdW50Kys7CisJaWYgKHMudG9fZmlsbCAmJiAhdGVzdF9iaXQoU1RSSVBFX0JJT0ZJTExfUlVOLCAmc2gtPnN0YXRlKSkgeworCQlzZXRfYml0KFNUUklQRV9PUF9CSU9GSUxMLCAmcy5vcHNfcmVxdWVzdCk7CisJCXNldF9iaXQoU1RSSVBFX0JJT0ZJTExfUlVOLCAmc2gtPnN0YXRlKTsKKwl9CiAKIAlwcl9kZWJ1ZygibG9ja2VkPSVkIHVwdG9kYXRlPSVkIHRvX3JlYWQ9JWQiCiAJCSIgdG9fd3JpdGU9JWQgZmFpbGVkPSVkIGZhaWxlZF9udW09JWRcbiIsCkBAIC0yNzM4LDggKzI2MDUsNyBAQAogCSAqIG5lZWQgdG8gYmUgZmFpbGVkCiAJICovCiAJaWYgKHMuZmFpbGVkID4gMSAmJiBzLnRvX3JlYWQrcy50b193cml0ZStzLndyaXR0ZW4pCi0JCWhhbmRsZV9yZXF1ZXN0c190b19mYWlsZWRfYXJyYXkoY29uZiwgc2gsICZzLCBkaXNrcywKLQkJCQkJCSZyZXR1cm5fYmkpOworCQloYW5kbGVfZmFpbGVkX3N0cmlwZShjb25mLCBzaCwgJnMsIGRpc2tzLCAmcmV0dXJuX2JpKTsKIAlpZiAocy5mYWlsZWQgPiAxICYmIHMuc3luY2luZykgewogCQltZF9kb25lX3N5bmMoY29uZi0+bWRkZXYsIFNUUklQRV9TRUNUT1JTLDApOwogCQljbGVhcl9iaXQoU1RSSVBFX1NZTkNJTkcsICZzaC0+c3RhdGUpOwpAQCAtMjc1NSw0OCArMjYyMSwyNSBAQAogCSAgICAgICAhdGVzdF9iaXQoUjVfTE9DS0VELCAmZGV2LT5mbGFncykgJiYKIAkgICAgICAgdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZkZXYtPmZsYWdzKSkgfHwKIAkgICAgICAgKHMuZmFpbGVkID09IDEgJiYgcy5mYWlsZWRfbnVtID09IHNoLT5wZF9pZHgpKSkKLQkJaGFuZGxlX2NvbXBsZXRlZF93cml0ZV9yZXF1ZXN0cyhjb25mLCBzaCwgZGlza3MsICZyZXR1cm5fYmkpOworCQloYW5kbGVfc3RyaXBlX2NsZWFuX2V2ZW50KGNvbmYsIHNoLCBkaXNrcywgJnJldHVybl9iaSk7CiAKIAkvKiBOb3cgd2UgbWlnaHQgY29uc2lkZXIgcmVhZGluZyBzb21lIGJsb2NrcywgZWl0aGVyIHRvIGNoZWNrL2dlbmVyYXRlCiAJICogcGFyaXR5LCBvciB0byBzYXRpc2Z5IHJlcXVlc3RzCiAJICogb3IgdG8gbG9hZCBhIGJsb2NrIHRoYXQgaXMgYmVpbmcgcGFydGlhbGx5IHdyaXR0ZW4uCiAJICovCiAJaWYgKHMudG9fcmVhZCB8fCBzLm5vbl9vdmVyd3JpdGUgfHwKLQkgICAgKHMuc3luY2luZyAmJiAocy51cHRvZGF0ZSArIHMuY29tcHV0ZSA8IGRpc2tzKSkgfHwgcy5leHBhbmRpbmcgfHwKLQkgICAgdGVzdF9iaXQoU1RSSVBFX09QX0NPTVBVVEVfQkxLLCAmc2gtPm9wcy5wZW5kaW5nKSkKLQkJaGFuZGxlX2lzc3VpbmdfbmV3X3JlYWRfcmVxdWVzdHM1KHNoLCAmcywgZGlza3MpOworCSAgICAocy5zeW5jaW5nICYmIChzLnVwdG9kYXRlICsgcy5jb21wdXRlIDwgZGlza3MpKSB8fCBzLmV4cGFuZGluZykKKwkJaGFuZGxlX3N0cmlwZV9maWxsNShzaCwgJnMsIGRpc2tzKTsKIAogCS8qIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgYW55IHdyaXRlIG9wZXJhdGlvbnMgaGF2ZSByZWNlbnRseQogCSAqIGNvbXBsZXRlZAogCSAqLwotCi0JLyogbGVhdmUgcHJleG9yIHNldCB1bnRpbCBwb3N0eG9yIGlzIGRvbmUsIGFsbG93cyB1cyB0byBkaXN0aW5ndWlzaAotCSAqIGEgcm13IGZyb20gYSByY3cgZHVyaW5nIGJpb2RyYWluCi0JICovCiAJcHJleG9yID0gMDsKLQlpZiAodGVzdF9iaXQoU1RSSVBFX09QX1BSRVhPUiwgJnNoLT5vcHMuY29tcGxldGUpICYmCi0JCXRlc3RfYml0KFNUUklQRV9PUF9QT1NUWE9SLCAmc2gtPm9wcy5jb21wbGV0ZSkpIHsKLQorCWlmIChzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPT0gcmVjb25zdHJ1Y3Rfc3RhdGVfcHJleG9yX2RyYWluX3Jlc3VsdCkKIAkJcHJleG9yID0gMTsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9QUkVYT1IsICZzaC0+b3BzLmNvbXBsZXRlKTsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9QUkVYT1IsICZzaC0+b3BzLmFjayk7Ci0JCWNsZWFyX2JpdChTVFJJUEVfT1BfUFJFWE9SLCAmc2gtPm9wcy5wZW5kaW5nKTsKLQotCQlmb3IgKGkgPSBkaXNrczsgaS0tOyApCi0JCQljbGVhcl9iaXQoUjVfV2FudHByZXhvciwgJnNoLT5kZXZbaV0uZmxhZ3MpOwotCX0KLQotCS8qIGlmIG9ubHkgUE9TVFhPUiBpcyBzZXQgdGhlbiB0aGlzIGlzIGFuICdleHBhbmQnIHBvc3R4b3IgKi8KLQlpZiAodGVzdF9iaXQoU1RSSVBFX09QX0JJT0RSQUlOLCAmc2gtPm9wcy5jb21wbGV0ZSkgJiYKLQkJdGVzdF9iaXQoU1RSSVBFX09QX1BPU1RYT1IsICZzaC0+b3BzLmNvbXBsZXRlKSkgewotCi0JCWNsZWFyX2JpdChTVFJJUEVfT1BfQklPRFJBSU4sICZzaC0+b3BzLmNvbXBsZXRlKTsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9CSU9EUkFJTiwgJnNoLT5vcHMuYWNrKTsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9CSU9EUkFJTiwgJnNoLT5vcHMucGVuZGluZyk7Ci0KLQkJY2xlYXJfYml0KFNUUklQRV9PUF9QT1NUWE9SLCAmc2gtPm9wcy5jb21wbGV0ZSk7Ci0JCWNsZWFyX2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnNoLT5vcHMuYWNrKTsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9QT1NUWE9SLCAmc2gtPm9wcy5wZW5kaW5nKTsKKwlpZiAoc2gtPnJlY29uc3RydWN0X3N0YXRlID09IHJlY29uc3RydWN0X3N0YXRlX2RyYWluX3Jlc3VsdCB8fAorCSAgICBzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPT0gcmVjb25zdHJ1Y3Rfc3RhdGVfcHJleG9yX2RyYWluX3Jlc3VsdCkgeworCQlzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPSByZWNvbnN0cnVjdF9zdGF0ZV9pZGxlOwogCiAJCS8qIEFsbCB0aGUgJ3dyaXR0ZW4nIGJ1ZmZlcnMgYW5kIHRoZSBwYXJpdHkgYmxvY2sgYXJlIHJlYWR5IHRvCiAJCSAqIGJlIHdyaXR0ZW4gYmFjayB0byBkaXNrCkBAIC0yODA4LDkgKzI2NTEsNiBAQAogCQkJCShpID09IHNoLT5wZF9pZHggfHwgZGV2LT53cml0dGVuKSkgewogCQkJCXByX2RlYnVnKCJXcml0aW5nIGJsb2NrICVkXG4iLCBpKTsKIAkJCQlzZXRfYml0KFI1X1dhbnR3cml0ZSwgJmRldi0+ZmxhZ3MpOwotCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdCgKLQkJCQkgICAgU1RSSVBFX09QX0lPLCAmc2gtPm9wcy5wZW5kaW5nKSkKLQkJCQkJc2gtPm9wcy5jb3VudCsrOwogCQkJCWlmIChwcmV4b3IpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmICghdGVzdF9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncykgfHwKQEAgLTI4MzIsMjAgKzI2NzIsMTggQEAKIAkgKiAyLyBBICdjaGVjaycgb3BlcmF0aW9uIGlzIGluIGZsaWdodCwgYXMgaXQgbWF5IGNsb2JiZXIgdGhlIHBhcml0eQogCSAqICAgIGJsb2NrLgogCSAqLwotCWlmIChzLnRvX3dyaXRlICYmICF0ZXN0X2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnNoLT5vcHMucGVuZGluZykgJiYKLQkJCSAgIXRlc3RfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMucGVuZGluZykpCi0JCWhhbmRsZV9pc3N1aW5nX25ld193cml0ZV9yZXF1ZXN0czUoY29uZiwgc2gsICZzLCBkaXNrcyk7CisJaWYgKHMudG9fd3JpdGUgJiYgIXNoLT5yZWNvbnN0cnVjdF9zdGF0ZSAmJiAhc2gtPmNoZWNrX3N0YXRlKQorCQloYW5kbGVfc3RyaXBlX2RpcnR5aW5nNShjb25mLCBzaCwgJnMsIGRpc2tzKTsKIAogCS8qIG1heWJlIHdlIG5lZWQgdG8gY2hlY2sgYW5kIHBvc3NpYmx5IGZpeCB0aGUgcGFyaXR5IGZvciB0aGlzIHN0cmlwZQogCSAqIEFueSByZWFkcyB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHNjaGVkdWxlZCwgc28gd2UganVzdCBzZWUgaWYgZW5vdWdoCiAJICogZGF0YSBpcyBhdmFpbGFibGUuICBUaGUgcGFyaXR5IGNoZWNrIGlzIGhlbGQgb2ZmIHdoaWxlIHBhcml0eQogCSAqIGRlcGVuZGVudCBvcGVyYXRpb25zIGFyZSBpbiBmbGlnaHQuCiAJICovCi0JaWYgKChzLnN5bmNpbmcgJiYgcy5sb2NrZWQgPT0gMCAmJgotCSAgICAgIXRlc3RfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJnNoLT5vcHMucGVuZGluZykgJiYKLQkgICAgICF0ZXN0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKSkgfHwKLQkgICAgICB0ZXN0X2JpdChTVFJJUEVfT1BfQ0hFQ0ssICZzaC0+b3BzLnBlbmRpbmcpIHx8Ci0JICAgICAgdGVzdF9iaXQoU1RSSVBFX09QX01PRF9SRVBBSVJfUEQsICZzaC0+b3BzLnBlbmRpbmcpKQorCWlmIChzaC0+Y2hlY2tfc3RhdGUgfHwKKwkgICAgKHMuc3luY2luZyAmJiBzLmxvY2tlZCA9PSAwICYmCisJICAgICAhdGVzdF9iaXQoU1RSSVBFX0NPTVBVVEVfUlVOLCAmc2gtPnN0YXRlKSAmJgorCSAgICAgIXRlc3RfYml0KFNUUklQRV9JTlNZTkMsICZzaC0+c3RhdGUpKSkKIAkJaGFuZGxlX3Bhcml0eV9jaGVja3M1KGNvbmYsIHNoLCAmcywgZGlza3MpOwogCiAJaWYgKHMuc3luY2luZyAmJiBzLmxvY2tlZCA9PSAwICYmIHRlc3RfYml0KFNUUklQRV9JTlNZTkMsICZzaC0+c3RhdGUpKSB7CkBAIC0yODY0LDUyICsyNzAyLDM1IEBACiAJCWRldiA9ICZzaC0+ZGV2W3MuZmFpbGVkX251bV07CiAJCWlmICghdGVzdF9iaXQoUjVfUmVXcml0ZSwgJmRldi0+ZmxhZ3MpKSB7CiAJCQlzZXRfYml0KFI1X1dhbnR3cml0ZSwgJmRldi0+ZmxhZ3MpOwotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9PUF9JTywgJnNoLT5vcHMucGVuZGluZykpCi0JCQkJc2gtPm9wcy5jb3VudCsrOwogCQkJc2V0X2JpdChSNV9SZVdyaXRlLCAmZGV2LT5mbGFncyk7CiAJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJmRldi0+ZmxhZ3MpOwogCQkJcy5sb2NrZWQrKzsKIAkJfSBlbHNlIHsKIAkJCS8qIGxldCdzIHJlYWQgaXQgYmFjayAqLwogCQkJc2V0X2JpdChSNV9XYW50cmVhZCwgJmRldi0+ZmxhZ3MpOwotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9PUF9JTywgJnNoLT5vcHMucGVuZGluZykpCi0JCQkJc2gtPm9wcy5jb3VudCsrOwogCQkJc2V0X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKTsKIAkJCXMubG9ja2VkKys7CiAJCX0KIAl9CiAKLQkvKiBGaW5pc2ggcG9zdHhvciBvcGVyYXRpb25zIGluaXRpYXRlZCBieSB0aGUgZXhwYW5zaW9uCi0JICogcHJvY2VzcwotCSAqLwotCWlmICh0ZXN0X2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnNoLT5vcHMuY29tcGxldGUpICYmCi0JCSF0ZXN0X2JpdChTVFJJUEVfT1BfQklPRFJBSU4sICZzaC0+b3BzLnBlbmRpbmcpKSB7Ci0KKwkvKiBGaW5pc2ggcmVjb25zdHJ1Y3Qgb3BlcmF0aW9ucyBpbml0aWF0ZWQgYnkgdGhlIGV4cGFuc2lvbiBwcm9jZXNzICovCisJaWYgKHNoLT5yZWNvbnN0cnVjdF9zdGF0ZSA9PSByZWNvbnN0cnVjdF9zdGF0ZV9yZXN1bHQpIHsKKwkJc2gtPnJlY29uc3RydWN0X3N0YXRlID0gcmVjb25zdHJ1Y3Rfc3RhdGVfaWRsZTsKIAkJY2xlYXJfYml0KFNUUklQRV9FWFBBTkRJTkcsICZzaC0+c3RhdGUpOwotCi0JCWNsZWFyX2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnNoLT5vcHMucGVuZGluZyk7Ci0JCWNsZWFyX2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnNoLT5vcHMuYWNrKTsKLQkJY2xlYXJfYml0KFNUUklQRV9PUF9QT1NUWE9SLCAmc2gtPm9wcy5jb21wbGV0ZSk7Ci0KLQkJZm9yIChpID0gY29uZi0+cmFpZF9kaXNrczsgaS0tOyApIHsKKwkJZm9yIChpID0gY29uZi0+cmFpZF9kaXNrczsgaS0tOyApCiAJCQlzZXRfYml0KFI1X1dhbnR3cml0ZSwgJnNoLT5kZXZbaV0uZmxhZ3MpOwogCQkJc2V0X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKTsKIAkJCXMubG9ja2VkKys7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU1RSSVBFX09QX0lPLCAmc2gtPm9wcy5wZW5kaW5nKSkKLQkJCQlzaC0+b3BzLmNvdW50Kys7Ci0JCX0KIAl9CiAKIAlpZiAocy5leHBhbmRlZCAmJiB0ZXN0X2JpdChTVFJJUEVfRVhQQU5ESU5HLCAmc2gtPnN0YXRlKSAmJgotCQkhdGVzdF9iaXQoU1RSSVBFX09QX1BPU1RYT1IsICZzaC0+b3BzLnBlbmRpbmcpKSB7CisJICAgICFzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUpIHsKIAkJLyogTmVlZCB0byB3cml0ZSBvdXQgYWxsIGJsb2NrcyBhZnRlciBjb21wdXRpbmcgcGFyaXR5ICovCiAJCXNoLT5kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7CiAJCXNoLT5wZF9pZHggPSBzdHJpcGVfdG9fcGRpZHgoc2gtPnNlY3RvciwgY29uZiwKIAkJCWNvbmYtPnJhaWRfZGlza3MpOwotCQlzLmxvY2tlZCArPSBoYW5kbGVfd3JpdGVfb3BlcmF0aW9uczUoc2gsIDEsIDEpOwotCX0gZWxzZSBpZiAocy5leHBhbmRlZCAmJgotCQkgICBzLmxvY2tlZCA9PSAwICYmCi0JCSF0ZXN0X2JpdChTVFJJUEVfT1BfUE9TVFhPUiwgJnNoLT5vcHMucGVuZGluZykpIHsKKwkJc2NoZWR1bGVfcmVjb25zdHJ1Y3Rpb241KHNoLCAmcywgMSwgMSk7CisJfSBlbHNlIGlmIChzLmV4cGFuZGVkICYmICFzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgJiYgcy5sb2NrZWQgPT0gMCkgewogCQljbGVhcl9iaXQoU1RSSVBFX0VYUEFORF9SRUFEWSwgJnNoLT5zdGF0ZSk7CiAJCWF0b21pY19kZWMoJmNvbmYtPnJlc2hhcGVfc3RyaXBlcyk7CiAJCXdha2VfdXAoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwpAQCAtMjkxNywxMiArMjczOCw5IEBACiAJfQogCiAJaWYgKHMuZXhwYW5kaW5nICYmIHMubG9ja2VkID09IDAgJiYKLQkgICAgIXRlc3RfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJnNoLT5vcHMucGVuZGluZykpCisJICAgICF0ZXN0X2JpdChTVFJJUEVfQ09NUFVURV9SVU4sICZzaC0+c3RhdGUpKQogCQloYW5kbGVfc3RyaXBlX2V4cGFuc2lvbihjb25mLCBzaCwgTlVMTCk7CiAKLQlpZiAoc2gtPm9wcy5jb3VudCkKLQkJcGVuZGluZyA9IGdldF9zdHJpcGVfd29yayhzaCk7Ci0KICB1bmxvY2s6CiAJc3Bpbl91bmxvY2soJnNoLT5sb2NrKTsKIApAQCAtMjkzMCwxMSArMjc0OCwxMiBAQAogCWlmICh1bmxpa2VseShibG9ja2VkX3JkZXYpKQogCQltZF93YWl0X2Zvcl9ibG9ja2VkX3JkZXYoYmxvY2tlZF9yZGV2LCBjb25mLT5tZGRldik7CiAKLQlpZiAocGVuZGluZykKLQkJcmFpZDVfcnVuX29wcyhzaCwgcGVuZGluZyk7CisJaWYgKHMub3BzX3JlcXVlc3QpCisJCXJhaWQ1X3J1bl9vcHMoc2gsIHMub3BzX3JlcXVlc3QpOworCisJb3BzX3J1bl9pbyhzaCwgJnMpOwogCiAJcmV0dXJuX2lvKHJldHVybl9iaSk7Ci0KIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZTYoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IHBhZ2UgKnRtcF9wYWdlKQpAQCAtMzA0Miw4ICsyODYxLDcgQEAKIAkgKiBtaWdodCBuZWVkIHRvIGJlIGZhaWxlZAogCSAqLwogCWlmIChzLmZhaWxlZCA+IDIgJiYgcy50b19yZWFkK3MudG9fd3JpdGUrcy53cml0dGVuKQotCQloYW5kbGVfcmVxdWVzdHNfdG9fZmFpbGVkX2FycmF5KGNvbmYsIHNoLCAmcywgZGlza3MsCi0JCQkJCQkmcmV0dXJuX2JpKTsKKwkJaGFuZGxlX2ZhaWxlZF9zdHJpcGUoY29uZiwgc2gsICZzLCBkaXNrcywgJnJldHVybl9iaSk7CiAJaWYgKHMuZmFpbGVkID4gMiAmJiBzLnN5bmNpbmcpIHsKIAkJbWRfZG9uZV9zeW5jKGNvbmYtPm1kZGV2LCBTVFJJUEVfU0VDVE9SUywwKTsKIAkJY2xlYXJfYml0KFNUUklQRV9TWU5DSU5HLCAmc2gtPnN0YXRlKTsKQEAgLTMwNjgsNyArMjg4Niw3IEBACiAJICAgICAoIHI2cy5xX2ZhaWxlZCB8fCAoKHRlc3RfYml0KFI1X0luc3luYywgJnFkZXYtPmZsYWdzKQogCQkJICAgICAmJiAhdGVzdF9iaXQoUjVfTE9DS0VELCAmcWRldi0+ZmxhZ3MpCiAJCQkgICAgICYmIHRlc3RfYml0KFI1X1VQVE9EQVRFLCAmcWRldi0+ZmxhZ3MpKSkpKQotCQloYW5kbGVfY29tcGxldGVkX3dyaXRlX3JlcXVlc3RzKGNvbmYsIHNoLCBkaXNrcywgJnJldHVybl9iaSk7CisJCWhhbmRsZV9zdHJpcGVfY2xlYW5fZXZlbnQoY29uZiwgc2gsIGRpc2tzLCAmcmV0dXJuX2JpKTsKIAogCS8qIE5vdyB3ZSBtaWdodCBjb25zaWRlciByZWFkaW5nIHNvbWUgYmxvY2tzLCBlaXRoZXIgdG8gY2hlY2svZ2VuZXJhdGUKIAkgKiBwYXJpdHksIG9yIHRvIHNhdGlzZnkgcmVxdWVzdHMKQEAgLTMwNzYsMTEgKzI4OTQsMTEgQEAKIAkgKi8KIAlpZiAocy50b19yZWFkIHx8IHMubm9uX292ZXJ3cml0ZSB8fCAocy50b193cml0ZSAmJiBzLmZhaWxlZCkgfHwKIAkgICAgKHMuc3luY2luZyAmJiAocy51cHRvZGF0ZSA8IGRpc2tzKSkgfHwgcy5leHBhbmRpbmcpCi0JCWhhbmRsZV9pc3N1aW5nX25ld19yZWFkX3JlcXVlc3RzNihzaCwgJnMsICZyNnMsIGRpc2tzKTsKKwkJaGFuZGxlX3N0cmlwZV9maWxsNihzaCwgJnMsICZyNnMsIGRpc2tzKTsKIAogCS8qIG5vdyB0byBjb25zaWRlciB3cml0aW5nIGFuZCB3aGF0IGVsc2UsIGlmIGFueXRoaW5nIHNob3VsZCBiZSByZWFkICovCiAJaWYgKHMudG9fd3JpdGUpCi0JCWhhbmRsZV9pc3N1aW5nX25ld193cml0ZV9yZXF1ZXN0czYoY29uZiwgc2gsICZzLCAmcjZzLCBkaXNrcyk7CisJCWhhbmRsZV9zdHJpcGVfZGlydHlpbmc2KGNvbmYsIHNoLCAmcywgJnI2cywgZGlza3MpOwogCiAJLyogbWF5YmUgd2UgbmVlZCB0byBjaGVjayBhbmQgcG9zc2libHkgZml4IHRoZSBwYXJpdHkgZm9yIHRoaXMgc3RyaXBlCiAJICogQW55IHJlYWRzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gc2NoZWR1bGVkLCBzbyB3ZSBqdXN0IHNlZSBpZiBlbm91Z2gKQEAgLTMxMzYsNyArMjk1NCw3IEBACiAJfQogCiAJaWYgKHMuZXhwYW5kaW5nICYmIHMubG9ja2VkID09IDAgJiYKLQkgICAgIXRlc3RfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJnNoLT5vcHMucGVuZGluZykpCisJICAgICF0ZXN0X2JpdChTVFJJUEVfQ09NUFVURV9SVU4sICZzaC0+c3RhdGUpKQogCQloYW5kbGVfc3RyaXBlX2V4cGFuc2lvbihjb25mLCBzaCwgJnI2cyk7CiAKICB1bmxvY2s6CkBAIC0zMTQ2LDY4ICsyOTY0LDkgQEAKIAlpZiAodW5saWtlbHkoYmxvY2tlZF9yZGV2KSkKIAkJbWRfd2FpdF9mb3JfYmxvY2tlZF9yZGV2KGJsb2NrZWRfcmRldiwgY29uZi0+bWRkZXYpOwogCisJb3BzX3J1bl9pbyhzaCwgJnMpOworCiAJcmV0dXJuX2lvKHJldHVybl9iaSk7Ci0KLQlmb3IgKGk9ZGlza3M7IGktLSA7KSB7Ci0JCWludCBydzsKLQkJc3RydWN0IGJpbyAqYmk7Ci0JCW1ka19yZGV2X3QgKnJkZXY7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUjVfV2FudHdyaXRlLCAmc2gtPmRldltpXS5mbGFncykpCi0JCQlydyA9IFdSSVRFOwotCQllbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUjVfV2FudHJlYWQsICZzaC0+ZGV2W2ldLmZsYWdzKSkKLQkJCXJ3ID0gUkVBRDsKLQkJZWxzZQotCQkJY29udGludWU7Ci0KLQkJc2V0X2JpdChTVFJJUEVfSU9fU1RBUlRFRCwgJnNoLT5zdGF0ZSk7Ci0KLQkJYmkgPSAmc2gtPmRldltpXS5yZXE7Ci0KLQkJYmktPmJpX3J3ID0gcnc7Ci0JCWlmIChydyA9PSBXUklURSkKLQkJCWJpLT5iaV9lbmRfaW8gPSByYWlkNV9lbmRfd3JpdGVfcmVxdWVzdDsKLQkJZWxzZQotCQkJYmktPmJpX2VuZF9pbyA9IHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Q7Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCQlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2ldLnJkZXYpOwotCQlpZiAocmRldiAmJiB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCi0JCQlyZGV2ID0gTlVMTDsKLQkJaWYgKHJkZXYpCi0JCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJaWYgKHJkZXYpIHsKLQkJCWlmIChzLnN5bmNpbmcgfHwgcy5leHBhbmRpbmcgfHwgcy5leHBhbmRlZCkKLQkJCQltZF9zeW5jX2FjY3QocmRldi0+YmRldiwgU1RSSVBFX1NFQ1RPUlMpOwotCi0JCQliaS0+YmlfYmRldiA9IHJkZXYtPmJkZXY7Ci0JCQlwcl9kZWJ1ZygiZm9yICVsbHUgc2NoZWR1bGUgb3AgJWxkIG9uIGRpc2MgJWRcbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yLCBiaS0+YmlfcncsIGkpOwotCQkJYXRvbWljX2luYygmc2gtPmNvdW50KTsKLQkJCWJpLT5iaV9zZWN0b3IgPSBzaC0+c2VjdG9yICsgcmRldi0+ZGF0YV9vZmZzZXQ7Ci0JCQliaS0+YmlfZmxhZ3MgPSAxIDw8IEJJT19VUFRPREFURTsKLQkJCWJpLT5iaV92Y250ID0gMTsKLQkJCWJpLT5iaV9tYXhfdmVjcyA9IDE7Ci0JCQliaS0+YmlfaWR4ID0gMDsKLQkJCWJpLT5iaV9pb192ZWMgPSAmc2gtPmRldltpXS52ZWM7Ci0JCQliaS0+YmlfaW9fdmVjWzBdLmJ2X2xlbiA9IFNUUklQRV9TSVpFOwotCQkJYmktPmJpX2lvX3ZlY1swXS5idl9vZmZzZXQgPSAwOwotCQkJYmktPmJpX3NpemUgPSBTVFJJUEVfU0laRTsKLQkJCWJpLT5iaV9uZXh0ID0gTlVMTDsKLQkJCWlmIChydyA9PSBXUklURSAmJgotCQkJICAgIHRlc3RfYml0KFI1X1JlV3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKSkKLQkJCQlhdG9taWNfYWRkKFNUUklQRV9TRUNUT1JTLCAmcmRldi0+Y29ycmVjdGVkX2Vycm9ycyk7Ci0JCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocncgPT0gV1JJVEUpCi0JCQkJc2V0X2JpdChTVFJJUEVfREVHUkFERUQsICZzaC0+c3RhdGUpOwotCQkJcHJfZGVidWcoInNraXAgb3AgJWxkIG9uIGRpc2MgJWQgZm9yIHNlY3RvciAlbGx1XG4iLAotCQkJCWJpLT5iaV9ydywgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yKTsKLQkJCWNsZWFyX2JpdChSNV9MT0NLRUQsICZzaC0+ZGV2W2ldLmZsYWdzKTsKLQkJCXNldF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSk7Ci0JCX0KLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IHBhZ2UgKnRtcF9wYWdlKQpAQCAtMzY5Nyw5ICszNDU2LDcgQEAKIAkJaWYgKCBydyA9PSBXUklURSApCiAJCQltZF93cml0ZV9lbmQobWRkZXYpOwogCi0JCWJpLT5iaV9lbmRfaW8oYmksCi0JCQkgICAgICB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaS0+YmlfZmxhZ3MpCi0JCQkgICAgICAgID8gMCA6IC1FSU8pOworCQliaW9fZW5kaW8oYmksIDApOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTM3ODUsNyArMzU0Miw3IEBACiAJCQkgICAgaiA9PSByYWlkNl9uZXh0X2Rpc2soc2gtPnBkX2lkeCwgc2gtPmRpc2tzKSkKIAkJCQljb250aW51ZTsKIAkJCXMgPSBjb21wdXRlX2Jsb2NrbnIoc2gsIGopOwotCQkJaWYgKHMgPCAobWRkZXYtPmFycmF5X3NpemU8PDEpKSB7CisJCQlpZiAocyA8IG1kZGV2LT5hcnJheV9zZWN0b3JzKSB7CiAJCQkJc2tpcHBlZCA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC00MDAyLDEyICszNzU5LDggQEAKIAlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJcmVtYWluaW5nID0gLS1yYWlkX2Jpby0+YmlfcGh5c19zZWdtZW50czsKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQlpZiAocmVtYWluaW5nID09IDApIHsKLQotCQlyYWlkX2Jpby0+YmlfZW5kX2lvKHJhaWRfYmlvLAotCQkJICAgICAgdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmcmFpZF9iaW8tPmJpX2ZsYWdzKQotCQkJICAgICAgICA/IDAgOiAtRUlPKTsKLQl9CisJaWYgKHJlbWFpbmluZyA9PSAwKQorCQliaW9fZW5kaW8ocmFpZF9iaW8sIDApOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjb25mLT5hY3RpdmVfYWxpZ25lZF9yZWFkcykpCiAJCXdha2VfdXAoJmNvbmYtPndhaXRfZm9yX3N0cmlwZSk7CiAJcmV0dXJuIGhhbmRsZWQ7CkBAIC00MDk0LDYgKzM4NDcsOCBAQAogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwogCXVuc2lnbmVkIGxvbmcgbmV3OworCWludCBlcnI7CisKIAlpZiAobGVuID49IFBBR0VfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFjb25mKQpAQCAtNDEwOSw3ICszODY0LDkgQEAKIAkJZWxzZQogCQkJYnJlYWs7CiAJfQotCW1kX2FsbG93X3dyaXRlKG1kZGV2KTsKKwllcnIgPSBtZF9hbGxvd193cml0ZShtZGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAl3aGlsZSAobmV3ID4gY29uZi0+bWF4X25yX3N0cmlwZXMpIHsKIAkJaWYgKGdyb3dfb25lX3N0cmlwZShjb25mKSkKIAkJCWNvbmYtPm1heF9ucl9zdHJpcGVzKys7CkBAIC00NDM0LDcgKzQxOTEsNyBAQAogCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZGF0YSA9IG1kZGV2OwogCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSByYWlkNV9jb25nZXN0ZWQ7CiAKLQltZGRldi0+YXJyYXlfc2l6ZSA9ICBtZGRldi0+c2l6ZSAqIChjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzIC0KKwltZGRldi0+YXJyYXlfc2VjdG9ycyA9IDIgKiBtZGRldi0+c2l6ZSAqIChjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzIC0KIAkJCQkJICAgIGNvbmYtPm1heF9kZWdyYWRlZCk7CiAKIAlibGtfcXVldWVfbWVyZ2VfYnZlYyhtZGRldi0+cXVldWUsIHJhaWQ1X21lcmdlYWJsZV9idmVjKTsKQEAgLTQ2MDksMzUgKzQzNjYsNDEgQEAKIHN0YXRpYyBpbnQgcmFpZDVfYWRkX2Rpc2sobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7Ci0JaW50IGZvdW5kID0gMDsKKwlpbnQgZXJyID0gLUVFWElTVDsKIAlpbnQgZGlzazsKIAlzdHJ1Y3QgZGlza19pbmZvICpwOworCWludCBmaXJzdCA9IDA7CisJaW50IGxhc3QgPSBjb25mLT5yYWlkX2Rpc2tzIC0gMTsKIAogCWlmIChtZGRldi0+ZGVncmFkZWQgPiBjb25mLT5tYXhfZGVncmFkZWQpCiAJCS8qIG5vIHBvaW50IGFkZGluZyBhIGRldmljZSAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmRldi0+cmFpZF9kaXNrID49IDApCisJCWZpcnN0ID0gbGFzdCA9IHJkZXYtPnJhaWRfZGlzazsKIAogCS8qCiAJICogZmluZCB0aGUgZGlzayAuLi4gYnV0IHByZWZlciByZGV2LT5zYXZlZF9yYWlkX2Rpc2sKIAkgKiBpZiBwb3NzaWJsZS4KIAkgKi8KIAlpZiAocmRldi0+c2F2ZWRfcmFpZF9kaXNrID49IDAgJiYKKwkgICAgcmRldi0+c2F2ZWRfcmFpZF9kaXNrID49IGZpcnN0ICYmCiAJICAgIGNvbmYtPmRpc2tzW3JkZXYtPnNhdmVkX3JhaWRfZGlza10ucmRldiA9PSBOVUxMKQogCQlkaXNrID0gcmRldi0+c2F2ZWRfcmFpZF9kaXNrOwogCWVsc2UKLQkJZGlzayA9IDA7Ci0JZm9yICggOyBkaXNrIDwgY29uZi0+cmFpZF9kaXNrczsgZGlzaysrKQorCQlkaXNrID0gZmlyc3Q7CisJZm9yICggOyBkaXNrIDw9IGxhc3QgOyBkaXNrKyspCiAJCWlmICgocD1jb25mLT5kaXNrcyArIGRpc2spLT5yZGV2ID09IE5VTEwpIHsKIAkJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQkJcmRldi0+cmFpZF9kaXNrID0gZGlzazsKLQkJCWZvdW5kID0gMTsKKwkJCWVyciA9IDA7CiAJCQlpZiAocmRldi0+c2F2ZWRfcmFpZF9kaXNrICE9IGRpc2spCiAJCQkJY29uZi0+ZnVsbHN5bmMgPSAxOwogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHAtPnJkZXYsIHJkZXYpOwogCQkJYnJlYWs7CiAJCX0KIAlwcmludF9yYWlkNV9jb25mKGNvbmYpOwotCXJldHVybiBmb3VuZDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHJhaWQ1X3Jlc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycykKQEAgLTQ2NTIsOCArNDQxNSw5IEBACiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CiAKIAlzZWN0b3JzICY9IH4oKHNlY3Rvcl90KW1kZGV2LT5jaHVua19zaXplLzUxMiAtIDEpOwotCW1kZGV2LT5hcnJheV9zaXplID0gKHNlY3RvcnMgKiAobWRkZXYtPnJhaWRfZGlza3MtY29uZi0+bWF4X2RlZ3JhZGVkKSk+PjE7Ci0Jc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2l6ZSA8PCAxKTsKKwltZGRldi0+YXJyYXlfc2VjdG9ycyA9IHNlY3RvcnMgKiAobWRkZXYtPnJhaWRfZGlza3MKKwkJCQkJICAtIGNvbmYtPm1heF9kZWdyYWRlZCk7CisJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJbWRkZXYtPmNoYW5nZWQgPSAxOwogCWlmIChzZWN0b3JzLzIgID4gbWRkZXYtPnNpemUgJiYgbWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikgewogCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+c2l6ZSA8PCAxOwpAQCAtNDczOCw3ICs0NTAyLDcgQEAKIAlyZGV2X2Zvcl9lYWNoKHJkZXYsIHJ0bXAsIG1kZGV2KQogCQlpZiAocmRldi0+cmFpZF9kaXNrIDwgMCAmJgogCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewotCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSkgeworCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CiAJCQkJY2hhciBubVsyMF07CiAJCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQkJCWFkZGVkX2RldmljZXMrKzsKQEAgLTQ3ODYsMTUgKzQ1NTAsMTYgQEAKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwogCiAJaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmY29uZi0+bWRkZXYtPnJlY292ZXJ5KSkgewotCQljb25mLT5tZGRldi0+YXJyYXlfc2l6ZSA9IGNvbmYtPm1kZGV2LT5zaXplICoKKwkJY29uZi0+bWRkZXYtPmFycmF5X3NlY3RvcnMgPSAyICogY29uZi0+bWRkZXYtPnNpemUgKgogCQkJKGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQpOwotCQlzZXRfY2FwYWNpdHkoY29uZi0+bWRkZXYtPmdlbmRpc2ssIGNvbmYtPm1kZGV2LT5hcnJheV9zaXplIDw8IDEpOworCQlzZXRfY2FwYWNpdHkoY29uZi0+bWRkZXYtPmdlbmRpc2ssIGNvbmYtPm1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAkJY29uZi0+bWRkZXYtPmNoYW5nZWQgPSAxOwogCiAJCWJkZXYgPSBiZGdldF9kaXNrKGNvbmYtPm1kZGV2LT5nZW5kaXNrLCAwKTsKIAkJaWYgKGJkZXYpIHsKIAkJCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKLQkJCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgKGxvZmZfdCljb25mLT5tZGRldi0+YXJyYXlfc2l6ZSA8PCAxMCk7CisJCQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsCisJCQkJICAgICAobG9mZl90KWNvbmYtPm1kZGV2LT5hcnJheV9zZWN0b3JzIDw8IDkpOwogCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7CiAJCQliZHB1dChiZGV2KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCmluZGV4IDdhNzgwM2IuLjkzZWEyMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKQEAgLTM4LDcgKzM4LDYgQEAKIAlib29sICJFbmFibGUgVmlkZW8gRm9yIExpbnV4IEFQSSAxIChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBWSURFT19WNEwyX0NPTU1PTgogCWRlZmF1bHQgVklERU9fREVWICYmIFZJREVPX1Y0TDJfQ09NTU9OCi0Jc2VsZWN0IFZJREVPX1Y0TDFfQ09NUEFUCiAJLS0taGVscC0tLQogCSAgRW5hYmxlcyBkcml2ZXJzIGJhc2VkIG9uIHRoZSBsZWdhY3kgVjRMMSBBUEkuCiAKQEAgLTQ5LDkgKzQ4LDkgQEAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdoZXRoZXIgdGhpcyBpcyByZXF1aXJlZCwgYW5zd2VyIFkuCiAKIGNvbmZpZyBWSURFT19WNEwxX0NPTVBBVAotCWJvb2wgIkVuYWJsZSBWaWRlbyBGb3IgTGludXggQVBJIDEgY29tcGF0aWJsZSBMYXllciIKKwlib29sICJFbmFibGUgVmlkZW8gRm9yIExpbnV4IEFQSSAxIGNvbXBhdGlibGUgTGF5ZXIiIGlmICFWSURFT19BTExPV19WNEwxCiAJZGVwZW5kcyBvbiBWSURFT19ERVYKLQlkZWZhdWx0IFZJREVPX0RFVgorCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZXMgYSBjb21wYXRpYmlsaXR5IEFQSSB1c2VkIGJ5IG1vc3QgVjRMMiBkZXZpY2VzIHRvIGFsbG93CiAJICBpdHMgdXNhZ2Ugd2l0aCBsZWdhY3kgYXBwbGljYXRpb25zIHRoYXQgc3VwcG9ydHMgb25seSBWNEwxIGFwaS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXItZnVuY3Rpb25zLmMKaW5kZXggMjY2NTA1Mi4uMTY3OTJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXItZnVuY3Rpb25zLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXItZnVuY3Rpb25zLmMKQEAgLTY2LDcgKzY2LDYgQEAKIAlpZiAoaXJfY29kZXMpCiAJCW1lbWNweShpci0+aXJfY29kZXMsIGlyX2NvZGVzLCBzaXplb2YoaXItPmlyX2NvZGVzKSk7CiAKLQogCWRldi0+a2V5Y29kZSAgICAgPSBpci0+aXJfY29kZXM7CiAJZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihJUl9LRVlUQUJfVFlQRSk7CiAJZGV2LT5rZXljb2RlbWF4ICA9IElSX0tFWVRBQl9TSVpFOwpAQCAtNzgsNiArNzcsNyBAQAogCWlmIChyZXBlYXQpCiAJCXNldF9iaXQoRVZfUkVQLCBkZXYtPmV2Yml0KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2lucHV0X2luaXQpOwogCiB2b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcikKIHsKQEAgLTg2LDYgKzg2LDcgQEAKIAkJaXJfaW5wdXRfa2V5X2V2ZW50KGRldixpcik7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfbm9rZXkpOwogCiB2b2lkIGlyX2lucHV0X2tleWRvd24oc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAogCQkgICAgICB1MzIgaXJfa2V5LCB1MzIgaXJfcmF3KQpAQCAtMTA0LDYgKzEwNSw3IEBACiAJCWlyX2lucHV0X2tleV9ldmVudChkZXYsaXIpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2lucHV0X2tleWRvd24pOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZXh0cmFjdCBtYXNrIGJpdHMgb3V0IG9mIGRhdGEgYW5kIHBhY2sgdGhlbSBpbnRvIHRoZSByZXN1bHQgKi8KQEAgLTEyMiw2ICsxMjQsNyBAQAogCiAJcmV0dXJuIHZhbHVlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfZXh0cmFjdF9iaXRzKTsKIAogc3RhdGljIGludCBpbmxpbmUgZ2V0Yml0KHUzMiAqc2FtcGxlcywgaW50IGJpdCkKIHsKQEAgLTE0Niw2ICsxNDksNyBAQAogCXByaW50aygiXG4iKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2R1bXBfc2FtcGxlcyk7CiAKIC8qIGRlY29kZSByYXcgc2FtcGxlcywgcHVsc2UgZGlzdGFuY2UgY29kaW5nIHVzZWQgYnkgTkVDIHJlbW90ZXMgKi8KIGludCBpcl9kZWNvZGVfcHVsc2VkaXN0YW5jZSh1MzIgKnNhbXBsZXMsIGludCBjb3VudCwgaW50IGxvdywgaW50IGhpZ2gpCkBAIC0yMTIsNiArMjE2LDcgQEAKIAogCXJldHVybiB2YWx1ZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2RlY29kZV9wdWxzZWRpc3RhbmNlKTsKIAogLyogZGVjb2RlIHJhdyBzYW1wbGVzLCBiaXBoYXNlIGNvZGluZywgdXNlZCBieSByYzUgZm9yIGV4YW1wbGUgKi8KIGludCBpcl9kZWNvZGVfYmlwaGFzZSh1MzIgKnNhbXBsZXMsIGludCBjb3VudCwgaW50IGxvdywgaW50IGhpZ2gpCkBAIC0yNTMsNiArMjU4LDcgQEAKIAl9CiAJcmV0dXJuIHZhbHVlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfZGVjb2RlX2JpcGhhc2UpOwogCiAvKiBSQzUgZGVjb2Rpbmcgc3R1ZmYsIG1vdmVkIGZyb20gYnR0di1pbnB1dC5jIHRvIHNoYXJlIGl0IHdpdGgKICAqIHNhYTcxMzQgKi8KQEAgLTM1Myw2ICszNTksNyBAQAogCQl9CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmM1X3RpbWVyX2VuZCk7CiAKIHZvaWQgaXJfcmM1X3RpbWVyX2tleXVwKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTM2MSwyMSArMzY4LDQgQEAKIAlkcHJpbnRrKDEsICJpci1jb21tb246IGtleSByZWxlYXNlZFxuIik7CiAJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwgJmlyLT5pcik7CiB9Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2lucHV0X2luaXQpOwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfbm9rZXkpOwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfa2V5ZG93bik7Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2V4dHJhY3RfYml0cyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9kdW1wX3NhbXBsZXMpOwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfZGVjb2RlX2JpcGhhc2UpOwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfZGVjb2RlX3B1bHNlZGlzdGFuY2UpOwotCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9yYzVfdGltZXJfZW5kKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX3JjNV90aW1lcl9rZXl1cCk7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCmluZGV4IDg5Yzc2NjAuLmQwMTk2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAogaW50IHNhYTcxNDZfcGd0YWJsZV9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3Qgc2FhNzE0Nl9wZ3RhYmxlICpwdCkKIHsKLQl1MzIgICAgICAgICAgKmNwdTsKKwlfX2xlMzIgICAgICAgKmNwdTsKIAlkbWFfYWRkcl90ICAgZG1hX2FkZHI7CiAKIAljcHUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2ksIFBBR0VfU0laRSwgJmRtYV9hZGRyKTsKQEAgLTI1MCw3ICsyNTAsNyBAQAogaW50IHNhYTcxNDZfcGd0YWJsZV9idWlsZF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IHNhYTcxNDZfcGd0YWJsZSAqcHQsCiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpsaXN0LCBpbnQgc2dsZW4gICkKIHsKLQl1MzIgKnB0ciwgZmlsbDsKKwlfX2xlMzIgKnB0ciwgZmlsbDsKIAlpbnQgbnJfcGFnZXMgPSAwOwogCWludCBpLHA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaGxwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2hscC5jCmluZGV4IDljOTA1MzkuLjA1YmRlOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaGxwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9obHAuYwpAQCAtMzM4LDcgKzMzOCw3IEBACiAJc3RydWN0IHNhYTcxNDZfdmlkZW9fZG1hICp2ZG1hMiwgdTMyKiBjbGlwX2Zvcm1hdCwgdTMyKiBhcmJ0cl9jdHJsLCBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CiAJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotCXUzMiAqY2xpcHBpbmcgPSB2di0+ZF9jbGlwcGluZy5jcHVfYWRkcjsKKwlfX2xlMzIgKmNsaXBwaW5nID0gdnYtPmRfY2xpcHBpbmcuY3B1X2FkZHI7CiAKIAlpbnQgd2lkdGggPSBmaC0+b3Yud2luLncud2lkdGg7CiAJaW50IGhlaWdodCA9ICBmaC0+b3Yud2luLncuaGVpZ2h0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMKaW5kZXggMzViMDFlYy4uYzExZGE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCkBAIC0yNCw3ICsyNCw3IEBACiAgICBzZW50IHRocm91Z2ggdGhlIHNhYTcxNDYuIGhhdmUgYSBsb29rIGF0IHRoZSBzcGVjaWZpY2F0aW9ucyBwLiAxMjIgZmYKICAgIHRvIHVuZGVyc3RhbmQgdGhpcy4gaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHUzMnMgdG8gc2VuZCwgb3IgLTEKICAgIGluIGNhc2Ugb2YgYW4gZXJyb3IuICovCi1zdGF0aWMgaW50IHNhYTcxNDZfaTJjX21zZ19wcmVwYXJlKGNvbnN0IHN0cnVjdCBpMmNfbXNnICptLCBpbnQgbnVtLCB1MzIgKm9wKQorc3RhdGljIGludCBzYWE3MTQ2X2kyY19tc2dfcHJlcGFyZShjb25zdCBzdHJ1Y3QgaTJjX21zZyAqbSwgaW50IG51bSwgX19sZTMyICpvcCkKIHsKIAlpbnQgaDEsIGgyOwogCWludCBpLCBqLCBhZGRyOwpAQCAtNDcsNyArNDcsNyBAQAogCX0KIAogCS8qIGJlIGNhcmVmdWw6IGNsZWFyIG91dCB0aGUgaTJjLW1lbSBmaXJzdCAqLwotCW1lbXNldChvcCwwLHNpemVvZih1MzIpKm1lbSk7CisJbWVtc2V0KG9wLDAsc2l6ZW9mKF9fbGUzMikqbWVtKTsKIAogCS8qIGxvb3AgdGhyb3VnaCBhbGwgbWVzc2FnZXMgKi8KIAlmb3IoaSA9IDA7IGkgPCBudW07IGkrKykgewpAQCAtNTcsMTYgKzU3LDE2IEBACiAJCSAgIHNvIHdlIGhhdmUgdG8gcGVyZm9ybSBhIHRyYW5zbGF0aW9uICovCiAJCWFkZHIgPSAobVtpXS5hZGRyKjIpICsgKCAoMCAhPSAobVtpXS5mbGFncyAmIEkyQ19NX1JEKSkgPyAxIDogMCk7CiAJCWgxID0gb3BfY291bnQvMzsgaDIgPSBvcF9jb3VudCUzOwotCQlvcFtoMV0gfD0gKAkgICAgKHU4KWFkZHIgPDwgKCgzLWgyKSo4KSk7Ci0JCW9wW2gxXSB8PSAoU0FBNzE0Nl9JMkNfU1RBUlQgPDwgKCgzLWgyKSoyKSk7CisJCW9wW2gxXSB8PSBjcHVfdG9fbGUzMigJICAgICh1OClhZGRyIDw8ICgoMy1oMikqOCkpOworCQlvcFtoMV0gfD0gY3B1X3RvX2xlMzIoU0FBNzE0Nl9JMkNfU1RBUlQgPDwgKCgzLWgyKSoyKSk7CiAJCW9wX2NvdW50Kys7CiAKIAkJLyogbG9vcCB0aHJvdWdoIGFsbCBieXRlcyBvZiBtZXNzYWdlIGkgKi8KIAkJZm9yKGogPSAwOyBqIDwgbVtpXS5sZW47IGorKykgewogCQkJLyogaW5zZXJ0IHRoZSBkYXRhIGJ5dGVzICovCiAJCQloMSA9IG9wX2NvdW50LzM7IGgyID0gb3BfY291bnQlMzsKLQkJCW9wW2gxXSB8PSAoICh1MzIpKCh1OCltW2ldLmJ1ZltqXSkgPDwgKCgzLWgyKSo4KSk7Ci0JCQlvcFtoMV0gfD0gKCAgICAgICBTQUE3MTQ2X0kyQ19DT05UIDw8ICgoMy1oMikqMikpOworCQkJb3BbaDFdIHw9IGNwdV90b19sZTMyKCAodTMyKSgodTgpbVtpXS5idWZbal0pIDw8ICgoMy1oMikqOCkpOworCQkJb3BbaDFdIHw9IGNwdV90b19sZTMyKCAgICAgICBTQUE3MTQ2X0kyQ19DT05UIDw8ICgoMy1oMikqMikpOwogCQkJb3BfY291bnQrKzsKIAkJfQogCkBAIC03NSw5ICs3NSw5IEBACiAJLyogaGF2ZSBhIGxvb2sgYXQgdGhlIGxhc3QgYnl0ZSBpbnNlcnRlZDoKIAkgIGlmIGl0IHdhczogLi4uQ09OVCBjaGFuZ2UgaXQgdG8gLi4uU1RPUCAqLwogCWgxID0gKG9wX2NvdW50LTEpLzM7IGgyID0gKG9wX2NvdW50LTEpJTM7Ci0JaWYgKCBTQUE3MTQ2X0kyQ19DT05UID09ICgweDMgJiAob3BbaDFdID4+ICgoMy1oMikqMikpKSApIHsKLQkJb3BbaDFdICY9IH4oMHgyIDw8ICgoMy1oMikqMikpOwotCQlvcFtoMV0gfD0gKFNBQTcxNDZfSTJDX1NUT1AgPDwgKCgzLWgyKSoyKSk7CisJaWYgKCBTQUE3MTQ2X0kyQ19DT05UID09ICgweDMgJiAobGUzMl90b19jcHUob3BbaDFdKSA+PiAoKDMtaDIpKjIpKSkgKSB7CisJCW9wW2gxXSAmPSB+Y3B1X3RvX2xlMzIoMHgyIDw8ICgoMy1oMikqMikpOworCQlvcFtoMV0gfD0gY3B1X3RvX2xlMzIoU0FBNzE0Nl9JMkNfU1RPUCA8PCAoKDMtaDIpKjIpKTsKIAl9CiAKIAkvKiByZXR1cm4gdGhlIG51bWJlciBvZiB1MzJzIHRvIHNlbmQgKi8KQEAgLTg4LDcgKzg4LDcgQEAKICAgIHdoaWNoIGJ5dGVzIHdlcmUgcmVhZCB0aHJvdWdoIHRoZSBhZGFwdGVyIGFuZCB3cml0ZSB0aGVtIGJhY2sgdG8gdGhlIGNvcnJlc3BvbmRpbmcKICAgIGkyYy1tZXNzYWdlLiBidXQgaW5zdGVhZCwgd2Ugc2ltcGx5IHdyaXRlIGJhY2sgYWxsIGJ5dGVzLgogICAgZml4bWU6IHRoaXMgY291bGQgYmUgaW1wcm92ZWQuICovCi1zdGF0aWMgaW50IHNhYTcxNDZfaTJjX21zZ19jbGVhbnVwKGNvbnN0IHN0cnVjdCBpMmNfbXNnICptLCBpbnQgbnVtLCB1MzIgKm9wKQorc3RhdGljIGludCBzYWE3MTQ2X2kyY19tc2dfY2xlYW51cChjb25zdCBzdHJ1Y3QgaTJjX21zZyAqbSwgaW50IG51bSwgX19sZTMyICpvcCkKIHsKIAlpbnQgaSwgajsKIAlpbnQgb3BfY291bnQgPSAwOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCS8qIGxvb3AgdGhyb2doIGFsbCBieXRlcyBvZiBtZXNzYWdlIGkgKi8KIAkJZm9yKGogPSAwOyBqIDwgbVtpXS5sZW47IGorKykgewogCQkJLyogd3JpdGUgYmFjayBhbGwgYnl0ZXMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gcmVhZCAqLwotCQkJbVtpXS5idWZbal0gPSAob3Bbb3BfY291bnQvM10gPj4gKCgzLShvcF9jb3VudCUzKSkqOCkpOworCQkJbVtpXS5idWZbal0gPSAobGUzMl90b19jcHUob3Bbb3BfY291bnQvM10pID4+ICgoMy0ob3BfY291bnQlMykpKjgpKTsKIAkJCW9wX2NvdW50Kys7CiAJCX0KIAl9CkBAIC0xNzQsNyArMTc0LDcgQEAKIC8qIHRoaXMgZnVuY3Rpb25zIHdyaXRlcyBvdXQgdGhlIGRhdGEtYnl0ZSAnZHdvcmQnIHRvIHRoZSBpMmMtZGV2aWNlLgogICAgaXQgcmV0dXJucyAwIGlmIG9rLCAtMSBpZiB0aGUgdHJhbnNmZXIgZmFpbGVkLCAtMiBpZiB0aGUgdHJhbnNmZXIKICAgIGZhaWxlZCBiYWRseSAoZS5nLiBhZGRyZXNzIGVycm9yKSAqLwotc3RhdGljIGludCBzYWE3MTQ2X2kyY193cml0ZW91dChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgdTMyKiBkd29yZCwgaW50IHNob3J0X2RlbGF5KQorc3RhdGljIGludCBzYWE3MTQ2X2kyY193cml0ZW91dChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgX19sZTMyICpkd29yZCwgaW50IHNob3J0X2RlbGF5KQogewogCXUzMiBzdGF0dXMgPSAwLCBtYzIgPSAwOwogCWludCB0cmlhbCA9IDA7CkBAIC0xODYsNyArMTg2LDcgQEAKIAlpZiggMCAhPSAoU0FBNzE0Nl9VU0VfSTJDX0lSUSAmIGRldi0+ZXh0LT5mbGFncykpIHsKIAogCQlzYWE3MTQ2X3dyaXRlKGRldiwgSTJDX1NUQVRVUywJIGRldi0+aTJjX2JpdHJhdGUpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgSTJDX1RSQU5TRkVSLCAqZHdvcmQpOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgSTJDX1RSQU5TRkVSLCBsZTMyX3RvX2NwdSgqZHdvcmQpKTsKIAogCQlkZXYtPmkyY19vcCA9IDE7CiAJCVNBQTcxNDZfSVNSX0NMRUFSKGRldiwgTUFTS18xNnxNQVNLXzE3KTsKQEAgLTIwOSw3ICsyMDksNyBAQAogCQlzdGF0dXMgPSBzYWE3MTQ2X3JlYWQoZGV2LCBJMkNfU1RBVFVTKTsKIAl9IGVsc2UgewogCQlzYWE3MTQ2X3dyaXRlKGRldiwgSTJDX1NUQVRVUywJIGRldi0+aTJjX2JpdHJhdGUpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgSTJDX1RSQU5TRkVSLCAqZHdvcmQpOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgSTJDX1RSQU5TRkVSLCBsZTMyX3RvX2NwdSgqZHdvcmQpKTsKIAkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgKE1BU0tfMDAgfCBNQVNLXzE2KSk7CiAKIAkJLyogZG8gbm90IHBvbGwgZm9yIGkyYy1zdGF0dXMgYmVmb3JlIHVwbG9hZCBpcyBjb21wbGV0ZSAqLwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJfQogCiAJLyogcmVhZCBiYWNrIGRhdGEsIGp1c3QgaW4gY2FzZSB3ZSB3ZXJlIHJlYWRpbmcgLi4uICovCi0JKmR3b3JkID0gc2FhNzE0Nl9yZWFkKGRldiwgSTJDX1RSQU5TRkVSKTsKKwkqZHdvcmQgPSBjcHVfdG9fbGUzMihzYWE3MTQ2X3JlYWQoZGV2LCBJMkNfVFJBTlNGRVIpKTsKIAogCURFQl9JMkMoKCJhZnRlcjogMHglMDh4XG4iLCpkd29yZCkpOwogCXJldHVybiAwOwpAQCAtMjkxLDcgKzI5MSw3IEBACiBzdGF0aWMgaW50IHNhYTcxNDZfaTJjX3RyYW5zZmVyKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSwgaW50IHJldHJpZXMpCiB7CiAJaW50IGkgPSAwLCBjb3VudCA9IDA7Ci0JdTMyKiBidWZmZXIgPSBkZXYtPmRfaTJjLmNwdV9hZGRyOworCV9fbGUzMiAqYnVmZmVyID0gZGV2LT5kX2kyYy5jcHVfYWRkcjsKIAlpbnQgZXJyID0gMDsKIAlpbnQgYWRkcmVzc19lcnIgPSAwOwogCWludCBzaG9ydF9kZWxheSA9IDA7CkBAIC0zNzYsNyArMzc2LDcgQEAKIAkvKiBhbm90aGVyIGJ1ZyBpbiByZXZpc2lvbiAwOiB0aGUgaTJjLXJlZ2lzdGVycyBnZXQgdXBsb2FkZWQgcmFuZG9tbHkgYnkgb3RoZXIKIAkgICB1cGxvYWRzLCBzbyB3ZSBiZXR0ZXIgY2xlYXIgdGhlbSBvdXQgYmVmb3JlIGNvbnRpbnVlaW5nICovCiAJaWYoIDAgPT0gZGV2LT5yZXZpc2lvbiApIHsKLQkJdTMyIHplcm8gPSAwOworCQlfX2xlMzIgemVybyA9IDA7CiAJCXNhYTcxNDZfaTJjX3Jlc2V0KGRldik7CiAJCWlmKCAwICE9IHNhYTcxNDZfaTJjX3dyaXRlb3V0KGRldiwgJnplcm8sIHNob3J0X2RlbGF5KSkgewogCQkJSU5GTygoInJldmlzaW9uIDAgZXJyb3IuIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwppbmRleCAzY2JjNmViLi5hNWU2Mjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCkBAIC02MDUsOCArNjA1LDggQEAKIAkJc3RydWN0IHNhYTcxNDZfcGd0YWJsZSAqcHQxID0gJmJ1Zi0+cHRbMF07CiAJCXN0cnVjdCBzYWE3MTQ2X3BndGFibGUgKnB0MiA9ICZidWYtPnB0WzFdOwogCQlzdHJ1Y3Qgc2FhNzE0Nl9wZ3RhYmxlICpwdDMgPSAmYnVmLT5wdFsyXTsKLQkJdTMyICAqcHRyMSwgKnB0cjIsICpwdHIzOwotCQl1MzIgZmlsbDsKKwkJX19sZTMyICAqcHRyMSwgKnB0cjIsICpwdHIzOworCQlfX2xlMzIgZmlsbDsKIAogCQlpbnQgc2l6ZSA9IGJ1Zi0+Zm10LT53aWR0aCpidWYtPmZtdC0+aGVpZ2h0OwogCQlpbnQgaSxwLG0xLG0yLG0zLG8xLG8yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwppbmRleCA4NTQ4Mjk2Li44NTBkNTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwpAQCAtMzQsNiArMzQsNyBAQAogbWVudWNvbmZpZyBNRURJQV9UVU5FUl9DVVNUT01JWkUKIAlib29sICJDdXN0b21pemUgYW5hbG9nIGFuZCBoeWJyaWQgdHVuZXIgbW9kdWxlcyB0byBidWlsZCIKIAlkZXBlbmRzIG9uIE1FRElBX1RVTkVSCisJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZGVzZWxlY3QgdHVuZXIgZHJpdmVycyB1bm5lY2Vzc2FyeQogCSAgZm9yIHRoZWlyIGhhcmR3YXJlIGZyb20gdGhlIGJ1aWxkLiBVc2UgdGhpcyBvcHRpb24gd2l0aCBjYXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLW1hcHMuYwppbmRleCA4M2U3NTYxLi5hYjE0Y2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1tYXBzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICAgIHRkYTE4MjcxLXRhYmxlcy5jIC0gZHJpdmVyIGZvciB0aGUgUGhpbGlwcyAvIE5YUCBUREExODI3MSBzaWxpY29uIHR1bmVyCisgICAgdGRhMTgyNzEtbWFwcy5jIC0gZHJpdmVyIGZvciB0aGUgUGhpbGlwcyAvIE5YUCBUREExODI3MSBzaWxpY29uIHR1bmVyCiAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYwppbmRleCAzMGViMDdiLi40ZGQxZDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgInR1bmVyLWkyYy5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC10eXBlcy5oIgpAQCAtMjkyLDEwICsyOTMsMTAgQEAKIAluYW1lW3NpemVvZihuYW1lKSAtIDFdID0gMDsKIAlwICs9IHNpemVvZihuYW1lKSAtIDE7CiAKLQlwcml2LT5maXJtX3ZlcnNpb24gPSBsZTE2X3RvX2NwdSgqKF9fdTE2ICopIHApOworCXByaXYtPmZpcm1fdmVyc2lvbiA9IGdldF91bmFsaWduZWRfbGUxNihwKTsKIAlwICs9IDI7CiAKLQluX2FycmF5ID0gbGUxNl90b19jcHUoKihfX3UxNiAqKSBwKTsKKwluX2FycmF5ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHApOwogCXAgKz0gMjsKIAogCXR1bmVyX2luZm8oIkxvYWRpbmcgJWQgZmlybXdhcmUgaW1hZ2VzIGZyb20gJXMsIHR5cGU6ICVzLCB2ZXIgJWQuJWRcbiIsCkBAIC0zMjQsMjYgKzMyNSwyNiBAQAogCQl9CiAKIAkJLyogQ2hlY2tzIGlmIHRoZXJlJ3MgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgKi8KLQkJaWYgKHAgKyBzaXplb2YodHlwZSkgKyBzaXplb2YoaWQpICsgc2l6ZW9mKHNpemUpID4gZW5kcCkgewotCQkJdHVuZXJfZXJyKCJGaXJtd2FyZSBoZWFkZXIgaXMgaW5jb21wbGV0ZSFcbiIpOwotCQkJZ290byBjb3JydXB0OwotCQl9CisJCWlmIChlbmRwIC0gcCA8IHNpemVvZih0eXBlKSArIHNpemVvZihpZCkgKyBzaXplb2Yoc2l6ZSkpCisJCQlnb3RvIGhlYWRlcjsKIAotCQl0eXBlID0gbGUzMl90b19jcHUoKihfX3UzMiAqKSBwKTsKKwkJdHlwZSA9IGdldF91bmFsaWduZWRfbGUzMihwKTsKIAkJcCArPSBzaXplb2YodHlwZSk7CiAKLQkJaWQgPSBsZTY0X3RvX2NwdSgqKHY0bDJfc3RkX2lkICopIHApOworCQlpZCA9IGdldF91bmFsaWduZWRfbGU2NChwKTsKIAkJcCArPSBzaXplb2YoaWQpOwogCiAJCWlmICh0eXBlICYgSEFTX0lGKSB7Ci0JCQlpbnRfZnJlcSA9IGxlMTZfdG9fY3B1KCooX191MTYgKikgcCk7CisJCQlpbnRfZnJlcSA9IGdldF91bmFsaWduZWRfbGUxNihwKTsKIAkJCXAgKz0gc2l6ZW9mKGludF9mcmVxKTsKKwkJCWlmIChlbmRwIC0gcCA8IHNpemVvZihzaXplKSkKKwkJCQlnb3RvIGhlYWRlcjsKIAkJfQogCi0JCXNpemUgPSBsZTMyX3RvX2NwdSgqKF9fdTMyICopIHApOworCQlzaXplID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHApOwogCQlwICs9IHNpemVvZihzaXplKTsKIAotCQlpZiAoKCFzaXplKSB8fCAoc2l6ZSArIHAgPiBlbmRwKSkgeworCQlpZiAoIXNpemUgfHwgc2l6ZSA+IGVuZHAgLSBwKSB7CiAJCQl0dW5lcl9lcnIoIkZpcm13YXJlIHR5cGUgIik7CiAJCQlkdW1wX2Zpcm1fdHlwZSh0eXBlKTsKIAkJCXByaW50aygiKCV4KSwgaWQgJWxseCBpcyBjb3JydXB0ZWQgIgpAQCAtMzgyLDYgKzM4Myw4IEBACiAKIAlnb3RvIGRvbmU7CiAKK2hlYWRlcjoKKwl0dW5lcl9lcnIoIkZpcm13YXJlIGhlYWRlciBpcyBpbmNvbXBsZXRlIVxuIik7CiBjb3JydXB0OgogCXJjID0gLUVJTlZBTDsKIAl0dW5lcl9lcnIoIkVycm9yOiBmaXJtd2FyZSBmaWxlIGlzIGNvcnJ1cHRlZCFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCmluZGV4IDQ4NzhkNjQuLjVmOTlkZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKQEAgLTM2LDYgKzM2LDEwIEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CiAKK3N0YXRpYyBpbnQgeGM1MDAwX2xvYWRfZndfb25fYXR0YWNoOworbW9kdWxlX3BhcmFtX25hbWVkKGluaXRfZncsIHhjNTAwMF9sb2FkX2Z3X29uX2F0dGFjaCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9mdywgIkxvYWQgZmlybXdhcmUgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbi4iKTsKKwogI2RlZmluZSBkcHJpbnRrKGxldmVsLGZtdCwgYXJnLi4uKSBpZiAoZGVidWcgPj0gbGV2ZWwpIFwKIAlwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQsICJ4YzUwMDAiLCAjIyBhcmcpCiAKQEAgLTk3Miw2ICs5NzYsOSBAQAogCiAJZmUtPnR1bmVyX3ByaXYgPSBwcml2OwogCisJaWYgKHhjNTAwMF9sb2FkX2Z3X29uX2F0dGFjaCkKKwkJeGM1MDAwX2luaXQoZmUpOworCiAJcmV0dXJuIGZlOwogfQogRVhQT1JUX1NZTUJPTCh4YzUwMDBfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCmluZGV4IDdiMjFiNDkuLjhiYzE0NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZwpAQCAtMjEsNiArMjEsNyBAQAogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9LY29uZmlnIgogCiBjb21tZW50ICJTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIChQQ0kgfHwgVVNCKSAmJiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKaW5kZXggYTdhZDA4NC4uZDZiYTRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKQEAgLTIsNCArMiw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIG11bHRpbWVkaWEgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLW9iai15ICAgICAgICA6PSBkdmItY29yZS8gZnJvbnRlbmRzLyB0dHBjaS8gdHR1c2ItZGVjLyB0dHVzYi1idWRnZXQvIGIyYzIvIGJ0OHh4LyBjaW5lcmd5VDIvIGR2Yi11c2IvIHBsdXRvMi8KK29iai15ICAgICAgICA6PSBkdmItY29yZS8gZnJvbnRlbmRzLyB0dHBjaS8gdHR1c2ItZGVjLyB0dHVzYi1idWRnZXQvIGIyYzIvIGJ0OHh4LyBjaW5lcmd5VDIvIGR2Yi11c2IvIHBsdXRvMi8gc2lhbm8vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguaAppbmRleCAzNzVmZDI4Li5kMTliNTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmgKQEAgLTEyOCw3ICsxMjgsNyBAQAogCWRtYV9hZGRyX3QgYnVmX2RtYTsKIAogCXUzMiByaXNjX3NpemU7Ci0JdTMyICpyaXNjX2NwdTsKKwlfX2xlMzIgKnJpc2NfY3B1OwogCWRtYV9hZGRyX3QgcmlzY19kbWE7CiAJdTMyIHJpc2NfcG9zOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kZW11eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZGVtdXguaAppbmRleCBiMGQzNDdkLi5lYjkxZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kZW11eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RlbXV4LmgKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXZvaWQqIHByaXY7ICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBwcml2YXRlIGRhdGEgb2YgdGhlIEFQSSBjbGllbnQgKi8KIAlpbnQgKCpvcGVuKSAoc3RydWN0IGRteF9kZW11eCogZGVtdXgpOwogCWludCAoKmNsb3NlKSAoc3RydWN0IGRteF9kZW11eCogZGVtdXgpOwotCWludCAoKndyaXRlKSAoc3RydWN0IGRteF9kZW11eCogZGVtdXgsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKKwlpbnQgKCp3cml0ZSkgKHN0cnVjdCBkbXhfZGVtdXgqIGRlbXV4LCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQpOwogCWludCAoKmFsbG9jYXRlX3RzX2ZlZWQpIChzdHJ1Y3QgZG14X2RlbXV4KiBkZW11eCwKIAkJCQkgc3RydWN0IGRteF90c19mZWVkKiogZmVlZCwKIAkJCQkgZG14X3RzX2NiIGNhbGxiYWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKaW5kZXggZGY1YmVmNi4uMWNmOWZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKQEAgLTk2LDcgKzk2LDcgQEAKIAkJaWYgKGF2YWlsID4gdG9kbykKIAkJCWF2YWlsID0gdG9kbzsKIAotCQlyZXQgPSBkdmJfcmluZ2J1ZmZlcl9yZWFkKHNyYywgKHU4ICopYnVmLCBhdmFpbCwgMSk7CisJCXJldCA9IGR2Yl9yaW5nYnVmZmVyX3JlYWRfdXNlcihzcmMsIGJ1ZiwgYXZhaWwpOwogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYwppbmRleCA1ODhmYmUxLi44ZTVkZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMKQEAgLTEzNTcsNyArMTM1Nyw3IEBACiAKIAkJaWR4ID0gZHZiX3JpbmdidWZmZXJfcGt0X25leHQoJmNhLT5zbG90X2luZm9bc2xvdF0ucnhfYnVmZmVyLCAtMSwgJmZyYWdsZW4pOwogCQl3aGlsZSAoaWR4ICE9IC0xKSB7Ci0JCQlkdmJfcmluZ2J1ZmZlcl9wa3RfcmVhZCgmY2EtPnNsb3RfaW5mb1tzbG90XS5yeF9idWZmZXIsIGlkeCwgMCwgaGRyLCAyLCAwKTsKKwkJCWR2Yl9yaW5nYnVmZmVyX3BrdF9yZWFkKCZjYS0+c2xvdF9pbmZvW3Nsb3RdLnJ4X2J1ZmZlciwgaWR4LCAwLCBoZHIsIDIpOwogCQkJaWYgKGNvbm5lY3Rpb25faWQgPT0gLTEpCiAJCQkJY29ubmVjdGlvbl9pZCA9IGhkclswXTsKIAkJCWlmICgoaGRyWzBdID09IGNvbm5lY3Rpb25faWQpICYmICgoaGRyWzFdICYgMHg4MCkgPT0gMCkpIHsKQEAgLTE0MzgsNyArMTQzOCw3IEBACiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAotCQlkdmJfcmluZ2J1ZmZlcl9wa3RfcmVhZCgmY2EtPnNsb3RfaW5mb1tzbG90XS5yeF9idWZmZXIsIGlkeCwgMCwgaGRyLCAyLCAwKTsKKwkJZHZiX3JpbmdidWZmZXJfcGt0X3JlYWQoJmNhLT5zbG90X2luZm9bc2xvdF0ucnhfYnVmZmVyLCBpZHgsIDAsIGhkciwgMik7CiAJCWlmIChjb25uZWN0aW9uX2lkID09IC0xKQogCQkJY29ubmVjdGlvbl9pZCA9IGhkclswXTsKIAkJaWYgKGhkclswXSA9PSBjb25uZWN0aW9uX2lkKSB7CkBAIC0xNDQ5LDggKzE0NDksOCBAQAogCQkJCQlmcmFnbGVuIC09IDI7CiAJCQkJfQogCi0JCQkJaWYgKChzdGF0dXMgPSBkdmJfcmluZ2J1ZmZlcl9wa3RfcmVhZCgmY2EtPnNsb3RfaW5mb1tzbG90XS5yeF9idWZmZXIsIGlkeCwgMiwKLQkJCQkJCQkJICAgICAgKHU4ICopYnVmICsgcGt0bGVuLCBmcmFnbGVuLCAxKSkgPCAwKSB7CisJCQkJaWYgKChzdGF0dXMgPSBkdmJfcmluZ2J1ZmZlcl9wa3RfcmVhZF91c2VyKCZjYS0+c2xvdF9pbmZvW3Nsb3RdLnJ4X2J1ZmZlciwgaWR4LCAyLAorCQkJCQkJCQkgICAgICBidWYgKyBwa3RsZW4sIGZyYWdsZW4pKSA8IDApIHsKIAkJCQkJZ290byBleGl0OwogCQkJCX0KIAkJCQlwa3RsZW4gKz0gZnJhZ2xlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKaW5kZXggOTM0ZTE1Zi4uZTJlY2EwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKQEAgLTEwNTYsMTYgKzEwNTYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdmJkbXhfd3JpdGUoc3RydWN0IGRteF9kZW11eCAqZGVtdXgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIGludCBkdmJkbXhfd3JpdGUoc3RydWN0IGRteF9kZW11eCAqZGVtdXgsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9IChzdHJ1Y3QgZHZiX2RlbXV4ICopZGVtdXg7CisJdm9pZCAqcDsKIAogCWlmICgoIWRlbXV4LT5mcm9udGVuZCkgfHwgKGRlbXV4LT5mcm9udGVuZC0+c291cmNlICE9IERNWF9NRU1PUllfRkUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmR2YmRlbXV4LT5tdXRleCkpCisJcCA9IGttYWxsb2MoY291bnQsIEdGUF9VU0VSKTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCWlmIChjb3B5X2Zyb21fdXNlcihwLCBidWYsIGNvdW50KSkgeworCQlrZnJlZShwKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmR2YmRlbXV4LT5tdXRleCkpIHsKKwkJa2ZyZWUocCk7CiAJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JZHZiX2RteF9zd2ZpbHRlcihkdmJkZW11eCwgKHU4ICopYnVmLCBjb3VudCk7CisJfQorCWR2Yl9kbXhfc3dmaWx0ZXIoZHZiZGVtdXgsIHAsIGNvdW50KTsKKwlrZnJlZShwKTsKIAltdXRleF91bmxvY2soJmR2YmRlbXV4LT5tdXRleCk7CiAKIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggYzIzMzRhZS4uYzkzMDE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtNjA2LDcgKzYwNiw3IEBACiAJCQlpZiAocHJpdi0+dWxlX2RiaXQpIHsKIAkJCQkvKiBTZXQgRC1iaXQgZm9yIENSQzMyIHZlcmlmaWNhdGlvbiwKIAkJCQkgKiBpZiBpdCB3YXMgc2V0IG9yaWdpbmFsbHkuICovCi0JCQkJdWxlbiB8PSAweDAwODA7CisJCQkJdWxlbiB8PSBodG9ucygweDgwMDApOwogCQkJfQogCiAJCQl1bGVfY3JjID0gaW92X2NyYzMyKHVsZV9jcmMsIGlvdiwgMyk7CkBAIC0xMTMzLDcgKzExMzMsNyBAQAogCiAJZHZiX25ldF9mZWVkX3N0b3AoZGV2KTsKIAlwcml2LT5yeF9tb2RlID0gUlhfTU9ERV9VTkk7Ci0JbmV0aWZfdHhfbG9ja19iaChkZXYpOworCW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlkcHJpbnRrKCIlczogcHJvbWlzY3VvdXMgbW9kZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTExNTgsNyArMTE1OCw3IEBACiAJCX0KIAl9CiAKLQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwogCWR2Yl9uZXRfZmVlZF9zdGFydChkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYwppbmRleCA4NzI5ODViLi41ODRiYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmMKQEAgLTEwNywzNSArMTA3LDQzIEBACiAJd2FrZV91cCgmcmJ1Zi0+cXVldWUpOwogfQogCi0KLQotc3NpemVfdCBkdmJfcmluZ2J1ZmZlcl9yZWFkKHN0cnVjdCBkdmJfcmluZ2J1ZmZlciAqcmJ1ZiwgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IHVzZXJtZW0pCitzc2l6ZV90IGR2Yl9yaW5nYnVmZmVyX3JlYWRfdXNlcihzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYsIHU4IF9fdXNlciAqYnVmLCBzaXplX3QgbGVuKQogewogCXNpemVfdCB0b2RvID0gbGVuOwogCXNpemVfdCBzcGxpdDsKIAogCXNwbGl0ID0gKHJidWYtPnByZWFkICsgbGVuID4gcmJ1Zi0+c2l6ZSkgPyByYnVmLT5zaXplIC0gcmJ1Zi0+cHJlYWQgOiAwOwogCWlmIChzcGxpdCA+IDApIHsKLQkJaWYgKCF1c2VybWVtKQotCQkJbWVtY3B5KGJ1ZiwgcmJ1Zi0+ZGF0YStyYnVmLT5wcmVhZCwgc3BsaXQpOwotCQllbHNlCi0JCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+ZGF0YStyYnVmLT5wcmVhZCwgc3BsaXQpKQotCQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+ZGF0YStyYnVmLT5wcmVhZCwgc3BsaXQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJ1ZiArPSBzcGxpdDsKIAkJdG9kbyAtPSBzcGxpdDsKIAkJcmJ1Zi0+cHJlYWQgPSAwOwogCX0KLQlpZiAoIXVzZXJtZW0pCi0JCW1lbWNweShidWYsIHJidWYtPmRhdGErcmJ1Zi0+cHJlYWQsIHRvZG8pOwotCWVsc2UKLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJidWYtPmRhdGErcmJ1Zi0+cHJlYWQsIHRvZG8pKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJidWYtPmRhdGErcmJ1Zi0+cHJlYWQsIHRvZG8pKQorCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJidWYtPnByZWFkID0gKHJidWYtPnByZWFkICsgdG9kbykgJSByYnVmLT5zaXplOwogCiAJcmV0dXJuIGxlbjsKIH0KIAordm9pZCBkdmJfcmluZ2J1ZmZlcl9yZWFkKHN0cnVjdCBkdmJfcmluZ2J1ZmZlciAqcmJ1ZiwgdTggKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3QgdG9kbyA9IGxlbjsKKwlzaXplX3Qgc3BsaXQ7CisKKwlzcGxpdCA9IChyYnVmLT5wcmVhZCArIGxlbiA+IHJidWYtPnNpemUpID8gcmJ1Zi0+c2l6ZSAtIHJidWYtPnByZWFkIDogMDsKKwlpZiAoc3BsaXQgPiAwKSB7CisJCW1lbWNweShidWYsIHJidWYtPmRhdGErcmJ1Zi0+cHJlYWQsIHNwbGl0KTsKKwkJYnVmICs9IHNwbGl0OworCQl0b2RvIC09IHNwbGl0OworCQlyYnVmLT5wcmVhZCA9IDA7CisJfQorCW1lbWNweShidWYsIHJidWYtPmRhdGErcmJ1Zi0+cHJlYWQsIHRvZG8pOworCisJcmJ1Zi0+cHJlYWQgPSAocmJ1Zi0+cHJlYWQgKyB0b2RvKSAlIHJidWYtPnNpemU7Cit9CiAKIAogc3NpemVfdCBkdmJfcmluZ2J1ZmZlcl93cml0ZShzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCkBAIC0xNzEsOCArMTc5LDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zc2l6ZV90IGR2Yl9yaW5nYnVmZmVyX3BrdF9yZWFkKHN0cnVjdCBkdmJfcmluZ2J1ZmZlciAqcmJ1Ziwgc2l6ZV90IGlkeCwKLQkJCQlpbnQgb2Zmc2V0LCB1OCogYnVmLCBzaXplX3QgbGVuLCBpbnQgdXNlcm1lbSkKK3NzaXplX3QgZHZiX3JpbmdidWZmZXJfcGt0X3JlYWRfdXNlcihzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYsIHNpemVfdCBpZHgsCisJCQkJaW50IG9mZnNldCwgdTggX191c2VyICpidWYsIHNpemVfdCBsZW4pCiB7CiAJc2l6ZV90IHRvZG87CiAJc2l6ZV90IHNwbGl0OwpAQCAtMTg3LDI0ICsxOTUsNDMgQEAKIAl0b2RvID0gbGVuOwogCXNwbGl0ID0gKChpZHggKyBsZW4pID4gcmJ1Zi0+c2l6ZSkgPyByYnVmLT5zaXplIC0gaWR4IDogMDsKIAlpZiAoc3BsaXQgPiAwKSB7Ci0JCWlmICghdXNlcm1lbSkKLQkJCW1lbWNweShidWYsIHJidWYtPmRhdGEraWR4LCBzcGxpdCk7Ci0JCWVsc2UKLQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCByYnVmLT5kYXRhK2lkeCwgc3BsaXQpKQotCQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+ZGF0YStpZHgsIHNwbGl0KSkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlidWYgKz0gc3BsaXQ7CiAJCXRvZG8gLT0gc3BsaXQ7CiAJCWlkeCA9IDA7CiAJfQotCWlmICghdXNlcm1lbSkKLQkJbWVtY3B5KGJ1ZiwgcmJ1Zi0+ZGF0YStpZHgsIHRvZG8pOwotCWVsc2UKLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJidWYtPmRhdGEraWR4LCB0b2RvKSkKLQkJCXJldHVybiAtRUZBVUxUOworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCByYnVmLT5kYXRhK2lkeCwgdG9kbykpCisJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIGxlbjsKIH0KIAorc3NpemVfdCBkdmJfcmluZ2J1ZmZlcl9wa3RfcmVhZChzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYsIHNpemVfdCBpZHgsCisJCQkJaW50IG9mZnNldCwgdTgqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3QgdG9kbzsKKwlzaXplX3Qgc3BsaXQ7CisJc2l6ZV90IHBrdGxlbjsKKworCXBrdGxlbiA9IHJidWYtPmRhdGFbaWR4XSA8PCA4OworCXBrdGxlbiB8PSByYnVmLT5kYXRhWyhpZHggKyAxKSAlIHJidWYtPnNpemVdOworCWlmIChvZmZzZXQgPiBwa3RsZW4pIHJldHVybiAtRUlOVkFMOworCWlmICgob2Zmc2V0ICsgbGVuKSA+IHBrdGxlbikgbGVuID0gcGt0bGVuIC0gb2Zmc2V0OworCisJaWR4ID0gKGlkeCArIERWQl9SSU5HQlVGRkVSX1BLVEhEUlNJWkUgKyBvZmZzZXQpICUgcmJ1Zi0+c2l6ZTsKKwl0b2RvID0gbGVuOworCXNwbGl0ID0gKChpZHggKyBsZW4pID4gcmJ1Zi0+c2l6ZSkgPyByYnVmLT5zaXplIC0gaWR4IDogMDsKKwlpZiAoc3BsaXQgPiAwKSB7CisJCW1lbWNweShidWYsIHJidWYtPmRhdGEraWR4LCBzcGxpdCk7CisJCWJ1ZiArPSBzcGxpdDsKKwkJdG9kbyAtPSBzcGxpdDsKKwkJaWR4ID0gMDsKKwl9CisJbWVtY3B5KGJ1ZiwgcmJ1Zi0+ZGF0YStpZHgsIHRvZG8pOworCXJldHVybiBsZW47Cit9CisKIHZvaWQgZHZiX3JpbmdidWZmZXJfcGt0X2Rpc3Bvc2Uoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpyYnVmLCBzaXplX3QgaWR4KQogewogCXNpemVfdCBwa3RsZW47CkBAIC0yNjYsNSArMjkzLDYgQEAKIEVYUE9SVF9TWU1CT0woZHZiX3JpbmdidWZmZXJfZnJlZSk7CiBFWFBPUlRfU1lNQk9MKGR2Yl9yaW5nYnVmZmVyX2F2YWlsKTsKIEVYUE9SVF9TWU1CT0woZHZiX3JpbmdidWZmZXJfZmx1c2hfc3BpbmxvY2tfd2FrZXVwKTsKK0VYUE9SVF9TWU1CT0woZHZiX3JpbmdidWZmZXJfcmVhZF91c2VyKTsKIEVYUE9SVF9TWU1CT0woZHZiX3JpbmdidWZmZXJfcmVhZCk7CiBFWFBPUlRfU1lNQk9MKGR2Yl9yaW5nYnVmZmVyX3dyaXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5oCmluZGV4IDg5MDgyNjIuLjQxZjA0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuaApAQCAtNjEsNyArNjEsNyBAQAogKiogICAgICoqKiByZWFkIG1pbi4gMTAwMCwgbWF4LiA8YnVmc2l6ZT4gYnl0ZXMgKioqCiAqKiAgICAgYXZhaWwgPSBkdmJfcmluZ2J1ZmZlcl9hdmFpbChyYnVmKTsKICoqICAgICBpZiAoYXZhaWwgPj0gMTAwMCkKLSoqICAgICAgICAgY291bnQgPSBkdmJfcmluZ2J1ZmZlcl9yZWFkKHJidWYsIGJ1ZmZlciwgbWluKGF2YWlsLCBidWZzaXplKSwgMCk7CisqKiAgICAgICAgIGNvdW50ID0gZHZiX3JpbmdidWZmZXJfcmVhZChyYnVmLCBidWZmZXIsIG1pbihhdmFpbCwgYnVmc2l6ZSkpOwogKiogICAgIGVsc2UKICoqICAgICAgICAgLi4uCiAqKgpAQCAtMTE0LDggKzExNCwxMCBAQAogKiogPHVzZXJtZW0+IHNwZWNpZmllcyB3aGV0aGVyIDxidWY+IHJlc2lkZXMgaW4gdXNlciBzcGFjZQogKiogcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgb3IgLUVGQVVMVAogKi8KLWV4dGVybiBzc2l6ZV90IGR2Yl9yaW5nYnVmZmVyX3JlYWQoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpyYnVmLCB1OCAqYnVmLAotCQkJCSAgIHNpemVfdCBsZW4sIGludCB1c2VybWVtKTsKK2V4dGVybiBzc2l6ZV90IGR2Yl9yaW5nYnVmZmVyX3JlYWRfdXNlcihzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYsCisJCQkJICAgdTggX191c2VyICpidWYsIHNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgZHZiX3JpbmdidWZmZXJfcmVhZChzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYsCisJCQkJICAgdTggKmJ1Ziwgc2l6ZV90IGxlbik7CiAKIAogLyogd3JpdGUgcm91dGluZXMgJiBtYWNyb3MgKi8KQEAgLTE1Nyw4ICsxNTksMTAgQEAKICAqIDx1c2VybWVtPiBTZXQgdG8gMSBpZiA8YnVmPiBpcyBpbiB1c2Vyc3BhY2UuCiAgKiByZXR1cm5zIE51bWJlciBvZiBieXRlcyByZWFkLCBvciAtRUZBVUxULgogICovCitleHRlcm4gc3NpemVfdCBkdmJfcmluZ2J1ZmZlcl9wa3RfcmVhZF91c2VyKHN0cnVjdCBkdmJfcmluZ2J1ZmZlciAqcmJ1Ziwgc2l6ZV90IGlkeCwKKwkJCQkgICAgICAgaW50IG9mZnNldCwgdTggX191c2VyICpidWYsIHNpemVfdCBsZW4pOwogZXh0ZXJuIHNzaXplX3QgZHZiX3JpbmdidWZmZXJfcGt0X3JlYWQoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpyYnVmLCBzaXplX3QgaWR4LAotCQkJCSAgICAgICBpbnQgb2Zmc2V0LCB1OCogYnVmLCBzaXplX3QgbGVuLCBpbnQgdXNlcm1lbSk7CisJCQkJICAgICAgIGludCBvZmZzZXQsIHU4ICpidWYsIHNpemVfdCBsZW4pOwogCiAvKioKICAqIERpc3Bvc2Ugb2YgYSBwYWNrZXQgaW4gdGhlIHJpbmcgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCBlMjA4YTYwLi5lNzEzMjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtMjMzLDkgKzIzMyw5IEBACiAKIAltdXRleF91bmxvY2soJmR2YmRldl9yZWdpc3Rlcl9sb2NrKTsKIAotCWNsc2RldiA9IGRldmljZV9jcmVhdGUoZHZiX2NsYXNzLCBhZGFwLT5kZXZpY2UsCisJY2xzZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGR2Yl9jbGFzcywgYWRhcC0+ZGV2aWNlLAogCQkJICAgICAgIE1LREVWKERWQl9NQUpPUiwgbnVtczJtaW5vcihhZGFwLT5udW0sIHR5cGUsIGlkKSksCi0JCQkgICAgICAgImR2YiVkLiVzJWQiLCBhZGFwLT5udW0sIGRuYW1lc1t0eXBlXSwgaWQpOworCQkJICAgICAgIE5VTEwsICJkdmIlZC4lcyVkIiwgYWRhcC0+bnVtLCBkbmFtZXNbdHlwZV0sIGlkKTsKIAlpZiAoSVNfRVJSKGNsc2RldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2UgZHZiJWQuJXMlZCAoJWxkKVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBhZGFwLT5udW0sIGRuYW1lc1t0eXBlXSwgaWQsIFBUUl9FUlIoY2xzZGV2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggZjAwYTBlYi4uYTU3N2MwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtNzYsNiArNzYsNyBAQAogCXNlbGVjdCBEVkJfRElCMzAwME1DCiAJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIyNjYgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9UVU5FUl9ESUIwMDcwCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVVNCMi4wLzEuMSBEVkIgcmVjZWl2ZXJzIGJhc2VkIG9uIHRoZSBEaUIwNzAwIFVTQiBicmlkZ2UuIFRoZQpAQCAtMTA3LDYgKzEwOCw4IEBACiAJc2VsZWN0IERWQl9NVDM1MiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBDb25leGFudCBVU0IyLjAgaHlicmlkIHJlZmVyZW5jZSBkZXNpZ24uCiAJICBDdXJyZW50bHksIG9ubHkgRFZCIGFuZCBBVFNDIG1vZGVzIGFyZSBzdXBwb3J0ZWQsIGFuYWxvZyBtb2RlCkBAIC0xMjAsNiArMTIzLDggQEAKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREExMDA0WCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgTVNJIE1lZ2EgU2t5IDU4MCBVU0IyLjAgRFZCLVQgcmVjZWl2ZXIuCiAJICBDdXJyZW50bHksIG9ubHkgZGV2aWNlcyB3aXRoIGEgcHJvZHVjdCBpZCBvZgpAQCAtMjQxLDMgKzI0NiwxMyBAQAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBkZWZhdWx0IHJlbW90ZSBjb250cm9sIGRlY29kaW5nIGZvciB0aGUKIAkgIEFmYXRlY2ggQUY5MDA1IGJhc2VkIHJlY2VpdmVyLgogCitjb25maWcgRFZCX1VTQl9BTllTRUUKKwl0cmlzdGF0ZSAiQW55c2VlIERWQi1UL0MgVVNCMi4wIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREExMDAyMyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQW55c2VlIEUzMCwgQW55c2VlIEUzMCBQbHVzIG9yCisJICBBbnlzZWUgRTMwIEMgUGx1cyBEVkIgVVNCMi4wIHJlY2VpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKaW5kZXggYzY1MTFhNi4uNDRjMTFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCkBAIC02MSw2ICs2MSw5IEBACiBkdmItdXNiLWFmOTAwNS1yZW1vdGUtb2JqcyA9IGFmOTAwNS1yZW1vdGUubwogb2JqLSQoQ09ORklHX0RWQl9VU0JfQUY5MDA1X1JFTU9URSkgKz0gZHZiLXVzYi1hZjkwMDUtcmVtb3RlLm8KIAorZHZiLXVzYi1hbnlzZWUtb2JqcyA9IGFueXNlZS5vCitvYmotJChDT05GSUdfRFZCX1VTQl9BTllTRUUpICs9IGR2Yi11c2ItYW55c2VlLm8KKwogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvIC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzLwogIyBkdWUgdG8gdHVuZXIteGMzMDI4CiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZmQ0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCkBAIC0wLDAgKzEsNTUzIEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFueXNlZSBFMzAgRFZCLUMgJiBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogVE9ETzoKKyAqIC0gYWRkIHNtYXJ0IGNhcmQgcmVhZGVyIHN1cHBvcnQgZm9yIENvbmRpdGlvbmFsIEFjY2VzcyAoQ0EpCisgKgorICogQ2FyZCByZWFkZXIgaW4gQW55c2VlIGlzIG5vdGhpbmcgbW9yZSB0aGFuIElTTyA3ODE2IGNhcmQgcmVhZGVyLgorICogVGhlcmUgaXMgbm8gaGFyZHdhcmUgQ0FNIGluIGFueSBBbnlzZWUgZGV2aWNlIHNvbGQuCisgKiBJbiBteSB1bmRlcnN0YW5kaW5nIGl0IHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBtYWtpbmcgb3duIG1vZHVsZQorICogZm9yIElTTyA3ODE2IGNhcmQgcmVhZGVyLCBsaWtlIGR2Yl9jYV9lbjUwMjIxIGlzIGltcGxlbWVudGVkLiBUaGlzCisgKiBtb2R1bGUgcmVnaXN0ZXJzIHNlcmlhbCBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBjb21tdW5pY2F0ZQorICogd2l0aCBhbnkgSVNPIDc4MTYgc21hcnQgY2FyZC4KKyAqCisgKiBBbnkgaGVscCBhY2NvcmRpbmcgdG8gaW1wbGVtZW50IHNlcmlhbCBzbWFydCBjYXJkIHJlYWRlciBzdXBwb3J0CisgKiBpcyBoaWdobHkgd2VsY29tZSEKKyAqLworCisjaW5jbHVkZSAiYW55c2VlLmgiCisjaW5jbHVkZSAidGRhMTAwMnguaCIKKyNpbmNsdWRlICJtdDM1Mi5oIgorI2luY2x1ZGUgIm10MzUyX3ByaXYuaCIKKyNpbmNsdWRlICJ6bDEwMzUzLmgiCisKKy8qIGRlYnVnICovCitzdGF0aWMgaW50IGR2Yl91c2JfYW55c2VlX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2FueXNlZV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworc3RydWN0IG11dGV4IGFueXNlZV91c2JfbXV0ZXg7CisKK3N0YXRpYyBpbnQgYW55c2VlX2N0cmxfbXNnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggKnNidWYsIHU4IHNsZW4sCisJdTggKnJidWYsIHU4IHJsZW4pCit7CisJc3RydWN0IGFueXNlZV9zdGF0ZSAqc3RhdGUgPSBkLT5wcml2OworCWludCBhY3RfbGVuLCByZXQ7CisJdTggYnVmWzY0XTsKKworCWlmIChzbGVuID4gc2l6ZW9mKGJ1ZikpCisJCXNsZW4gPSBzaXplb2YoYnVmKTsKKwltZW1jcHkoJmJ1ZlswXSwgc2J1Ziwgc2xlbik7CisJYnVmWzYwXSA9IHN0YXRlLT5zZXErKzsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFueXNlZV91c2JfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiBXZSBuZWVkIHJlY2VpdmUgb25lIG1lc3NhZ2UgbW9yZSBhZnRlciBkdmJfdXNiX2dlbmVyaWNfcncgZHVlCisJICAgdG8gd2VpcmQgdHJhbnNhY3Rpb24gZmxvdywgd2hpY2ggaXMgMSB4IHNlbmQgKyAyIHggcmVjZWl2ZS4gKi8KKwlyZXQgPSBkdmJfdXNiX2dlbmVyaWNfcncoZCwgYnVmLCBzaXplb2YoYnVmKSwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CisKKwlpZiAoIXJldCkgeworCQkvKiByZWNlaXZlIDJuZCBhbnN3ZXIgKi8KKwkJcmV0ID0gdXNiX2J1bGtfbXNnKGQtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LAorCQkJZC0+cHJvcHMuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQpLCBidWYsIHNpemVvZihidWYpLAorCQkJJmFjdF9sZW4sIDIwMDApOworCQlpZiAocmV0KQorCQkJZXJyKCIlczogcmVjdiBidWxrIG1lc3NhZ2UgZmFpbGVkOiAlZCIsIF9fZnVuY19fLCByZXQpOworCQllbHNlIHsKKwkJCWRlYl94ZmVyKCI8PDwgIik7CisJCQlkZWJ1Z19kdW1wKGJ1ZiwgYWN0X2xlbiwgZGViX3hmZXIpOworCQl9CisJfQorCisJLyogcmVhZCByZXF1ZXN0LCBjb3B5IHJldHVybmVkIGRhdGEgdG8gcmV0dXJuIGJ1ZiAqLworCWlmICghcmV0ICYmIHJidWYgJiYgcmxlbikKKwkJbWVtY3B5KHJidWYsIGJ1Ziwgcmxlbik7CisKKwltdXRleF91bmxvY2soJmFueXNlZV91c2JfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhbnlzZWVfcmVhZF9yZWcoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MTYgcmVnLCB1OCAqdmFsKQoreworCXU4IGJ1ZltdID0ge0NNRF9SRUdfUkVBRCwgcmVnID4+IDgsIHJlZyAmIDB4ZmYsIDB4MDF9OworCWludCByZXQ7CisJcmV0ID0gYW55c2VlX2N0cmxfbXNnKGQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIHZhbCwgMSk7CisJZGViX2luZm8oIiVzOiByZWc6JTA0eCB2YWw6JTAyeFxuIiwgX19mdW5jX18sIHJlZywgKnZhbCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhbnlzZWVfd3JpdGVfcmVnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IHJlZywgdTggdmFsKQoreworCXU4IGJ1ZltdID0ge0NNRF9SRUdfV1JJVEUsIHJlZyA+PiA4LCByZWcgJiAweGZmLCAweDAxLCB2YWx9OworCWRlYl9pbmZvKCIlczogcmVnOiUwNHggdmFsOiUwMnhcbiIsIF9fZnVuY19fLCByZWcsIHZhbCk7CisJcmV0dXJuIGFueXNlZV9jdHJsX21zZyhkLCBidWYsIHNpemVvZihidWYpLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCBhbnlzZWVfZ2V0X2h3X2luZm8oc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCAqaWQpCit7CisJdTggYnVmW10gPSB7Q01EX0dFVF9IV19JTkZPfTsKKwlyZXR1cm4gYW55c2VlX2N0cmxfbXNnKGQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGlkLCAzKTsKK30KKworc3RhdGljIGludCBhbnlzZWVfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCXU4IGJ1ZltdID0ge0NNRF9TVFJFQU1JTkdfQ1RSTCwgKHU4KW9ub2ZmLCAweDAwfTsKKwlkZWJfaW5mbygiJXM6IG9ub2ZmOiUwMnhcbiIsIF9fZnVuY19fLCBvbm9mZik7CisJcmV0dXJuIGFueXNlZV9jdHJsX21zZyhhZGFwLT5kZXYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGFueXNlZV9sZWRfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IG1vZGUsIHU4IGludGVydmFsKQoreworCXU4IGJ1ZltdID0ge0NNRF9MRURfQU5EX0lSX0NUUkwsIDB4MDEsIG1vZGUsIGludGVydmFsfTsKKwlkZWJfaW5mbygiJXM6IHN0YXRlOiUwMnggaW50ZXJ2YWw6JTAyeFxuIiwgX19mdW5jX18sIG1vZGUsIGludGVydmFsKTsKKwlyZXR1cm4gYW55c2VlX2N0cmxfbXNnKGQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGFueXNlZV9pcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggb25vZmYpCit7CisJdTggYnVmW10gPSB7Q01EX0xFRF9BTkRfSVJfQ1RSTCwgMHgwMiwgb25vZmZ9OworCWRlYl9pbmZvKCIlczogb25vZmY6JTAyeFxuIiwgX19mdW5jX18sIG9ub2ZmKTsKKwlyZXR1cm4gYW55c2VlX2N0cmxfbXNnKGQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGFueXNlZV9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlpbnQgcmV0OworCS8qIExFRCBsaWdodCAqLworCXJldCA9IGFueXNlZV9sZWRfY3RybChkLCAweDAxLCAweDAzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogZW5hYmxlIElSICovCisJcmV0ID0gYW55c2VlX2lyX2N0cmwoZCwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgYW55c2VlX21hc3Rlcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZywKKwlpbnQgbnVtKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IHJldCwgaW5jLCBpID0gMDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXdoaWxlIChpIDwgbnVtKSB7CisJCWlmIChudW0gPiBpICsgMSAmJiAobXNnW2krMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKwkJCXU4IGJ1Zls2XTsKKwkJCWJ1ZlswXSA9IENNRF9JMkNfUkVBRDsKKwkJCWJ1ZlsxXSA9IG1zZ1tpXS5hZGRyICsgMTsKKwkJCWJ1ZlsyXSA9IG1zZ1tpXS5idWZbMF07CisJCQlidWZbM10gPSAweDAwOworCQkJYnVmWzRdID0gMHgwMDsKKwkJCWJ1Zls1XSA9IDB4MDE7CisJCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCBzaXplb2YoYnVmKSwgbXNnW2krMV0uYnVmLAorCQkJCW1zZ1tpKzFdLmxlbik7CisJCQlpbmMgPSAyOworCQl9IGVsc2UgeworCQkJdTggYnVmWzQrbXNnW2ldLmxlbl07CisJCQlidWZbMF0gPSBDTURfSTJDX1dSSVRFOworCQkJYnVmWzFdID0gbXNnW2ldLmFkZHI7CisJCQlidWZbMl0gPSBtc2dbaV0ubGVuOworCQkJYnVmWzNdID0gMHgwMTsKKwkJCW1lbWNweSgmYnVmWzRdLCBtc2dbaV0uYnVmLCBtc2dbaV0ubGVuKTsKKwkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIHNpemVvZihidWYpLCBOVUxMLCAwKTsKKwkJCWluYyA9IDE7CisJCX0KKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaSArPSBpbmM7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB1MzIgYW55c2VlX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gYW55c2VlX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciAgID0gYW55c2VlX21hc3Rlcl94ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gYW55c2VlX2kyY19mdW5jLAorfTsKKworc3RhdGljIGludCBhbnlzZWVfbXQzNTJfZGVtb2RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdGF0aWMgdTggY2xvY2tfY29uZmlnIFtdICA9IHsgQ0xPQ0tfQ1RMLCAgMHgzOCwgMHgyOCB9OworCXN0YXRpYyB1OCByZXNldCBbXSAgICAgICAgID0geyBSRVNFVCwgICAgICAweDgwIH07CisJc3RhdGljIHU4IGFkY19jdGxfMV9jZmcgW10gPSB7IEFEQ19DVExfMSwgIDB4NDAgfTsKKwlzdGF0aWMgdTggYWdjX2NmZyBbXSAgICAgICA9IHsgQUdDX1RBUkdFVCwgMHgyOCwgMHgyMCB9OworCXN0YXRpYyB1OCBncHBfY3RsX2NmZyBbXSAgID0geyBHUFBfQ1RMLCAgICAweDMzIH07CisJc3RhdGljIHU4IGNhcHRfcmFuZ2VfY2ZnW10gPSB7IENBUFRfUkFOR0UsIDB4MzIgfTsKKworCW10MzUyX3dyaXRlKGZlLCBjbG9ja19jb25maWcsICAgc2l6ZW9mKGNsb2NrX2NvbmZpZykpOworCXVkZWxheSgyMDApOworCW10MzUyX3dyaXRlKGZlLCByZXNldCwgICAgICAgICAgc2l6ZW9mKHJlc2V0KSk7CisJbXQzNTJfd3JpdGUoZmUsIGFkY19jdGxfMV9jZmcsICBzaXplb2YoYWRjX2N0bF8xX2NmZykpOworCisJbXQzNTJfd3JpdGUoZmUsIGFnY19jZmcsICAgICAgICBzaXplb2YoYWdjX2NmZykpOworCW10MzUyX3dyaXRlKGZlLCBncHBfY3RsX2NmZywgICAgc2l6ZW9mKGdwcF9jdGxfY2ZnKSk7CisJbXQzNTJfd3JpdGUoZmUsIGNhcHRfcmFuZ2VfY2ZnLCBzaXplb2YoY2FwdF9yYW5nZV9jZmcpKTsKKworCXJldHVybiAwOworfQorCisvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwMjNfY29uZmlnIGFueXNlZV90ZGExMDAyM19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDFhLAorCS5pbnZlcnQgPSAwLAorCS54dGFsICAgPSAxNjAwMDAwMCwKKwkucGxsX20gID0gMTEsCisJLnBsbF9wICA9IDMsCisJLnBsbF9uICA9IDEsCisJLm91dHB1dF9tb2RlID0gVERBMTAwMjNfT1VUUFVUX01PREVfUEFSQUxMRUxfQywKKwkuZGVsdGFmID0gMHhmZWViLAorfTsKKworc3RhdGljIHN0cnVjdCBtdDM1Ml9jb25maWcgYW55c2VlX210MzUyX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MWUsCisJLmRlbW9kX2luaXQgICAgPSBhbnlzZWVfbXQzNTJfZGVtb2RfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgYW55c2VlX3psMTAzNTNfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgxZSwKKwkucGFyYWxsZWxfdHMgPSAxLAorfTsKKworc3RhdGljIGludCBhbnlzZWVfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYW55c2VlX3N0YXRlICpzdGF0ZSA9IGFkYXAtPmRldi0+cHJpdjsKKwl1OCBod19pbmZvWzNdOworCXU4IGlvX2Q7IC8qIElPIHBvcnQgRCAqLworCisJLyogY2hlY2sgd2hpY2ggaGFyZHdhcmUgd2UgaGF2ZQorCSAgIFdlIG11c3QgZG8gdGhpcyBjYWxsIHR3byB0aW1lcyB0byBnZXQgcmVsaWFibGUgdmFsdWVzIChodyBidWcpLiAqLworCXJldCA9IGFueXNlZV9nZXRfaHdfaW5mbyhhZGFwLT5kZXYsIGh3X2luZm8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gYW55c2VlX2dldF9od19pbmZvKGFkYXAtPmRldiwgaHdfaW5mbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIE1lYW5pbmcgb2YgdGhlc2UgaW5mbyBieXRlcyBhcmUgZ3Vlc3NlZC4gKi8KKwlpbmZvKCJmaXJtd2FyZSB2ZXJzaW9uOiVkLiVkLiVkIGhhcmR3YXJlIGlkOiVkIiwKKwkJMCwgaHdfaW5mb1sxXSwgaHdfaW5mb1syXSwgaHdfaW5mb1swXSk7CisKKwlyZXQgPSBhbnlzZWVfcmVhZF9yZWcoYWRhcC0+ZGV2LCAweGIwLCAmaW9fZCk7IC8qIElPIHBvcnQgRCAqLworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZGViX2luZm8oIiVzOiBJTyBwb3J0IEQ6JTAyeFxuIiwgX19mdW5jX18sIGlvX2QpOworCisJLyogU2VsZWN0IGRlbW9kIHVzaW5nIHRyaWFsIGFuZCBlcnJvciBtZXRob2QuICovCisKKwkvKiBUcnkgdG8gYXR0YWNoIGRlbW9kdWxhdG9yIGluIGZvbGxvd2luZyBvcmRlcjoKKwkgICAgICBtb2RlbCAgICAgIGRlbW9kICAgICBodyAgZmlybXdhcmUKKwkgICAxLiBFMzAgICAgICAgIE1UMzUyICAgICAwMiAgMC4yLjEKKwkgICAyLiBFMzAgICAgICAgIFpMMTAzNTMgICAwMiAgMC4yLjEKKwkgICAzLiBFMzAgUGx1cyAgIFpMMTAzNTMgICAwNiAgMC4xLjAKKwkgICA0LiBFMzBDIFBsdXMgIFREQTEwMDIzICAwYSAgMC4xLjAgICAgcmV2IDAuMgorCSAgIDQuIEUzMEMgUGx1cyAgVERBMTAwMjMgIDBmICAwLjEuMiAgICByZXYgMC40CisJKi8KKworCS8qIFphcmxpbmsgTVQzNTIgRFZCLVQgZGVtb2QgaW5zaWRlIG9mIFNhbXN1bmcgRE5PUzQwNFpIMTAyQSBOSU0gKi8KKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmYW55c2VlX210MzUyX2NvbmZpZywKKwkJCSAgICAgICZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKwlpZiAoYWRhcC0+ZmUgIT0gTlVMTCkgeworCQlzdGF0ZS0+dHVuZXIgPSBEVkJfUExMX1RIT01TT05fRFRUNzU3OTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogWmFybGluayBaTDEwMzUzIERWQi1UIGRlbW9kIGluc2lkZSBvZiBTYW1zdW5nIEROT1M0MDRaSDEwM0EgTklNICovCisJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLCAmYW55c2VlX3psMTAzNTNfY29uZmlnLAorCQkJICAgICAgJmFkYXAtPmRldi0+aTJjX2FkYXApOworCWlmIChhZGFwLT5mZSAhPSBOVUxMKSB7CisJCXN0YXRlLT50dW5lciA9IERWQl9QTExfVEhPTVNPTl9EVFQ3NTc5OworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBjb25uZWN0IGRlbW9kIG9uIElPIHBvcnQgRCBmb3IgVERBMTAwMjMgJiBaTDEwMzUzICovCisJcmV0ID0gYW55c2VlX3dyaXRlX3JlZyhhZGFwLT5kZXYsIDB4YjAsIDB4MjUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBaYXJsaW5rIFpMMTAzNTMgRFZCLVQgZGVtb2QgaW5zaWRlIG9mIFNhbXN1bmcgRE5PUzQwNFpIMTAzQSBOSU0gKi8KKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsICZhbnlzZWVfemwxMDM1M19jb25maWcsCisJCQkgICAgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisJaWYgKGFkYXAtPmZlICE9IE5VTEwpIHsKKwkJc3RhdGUtPnR1bmVyID0gRFZCX1BMTF9USE9NU09OX0RUVDc1Nzk7CisJCXJldHVybiAwOworCX0KKworCS8qIElPIHBvcnQgRSAtIEUzMEMgcmV2IDAuNCBib2FyZCByZXF1aXJlcyB0aGlzICovCisJcmV0ID0gYW55c2VlX3dyaXRlX3JlZyhhZGFwLT5kZXYsIDB4YjEsIDB4YTcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBQaGlsaXBzIFREQTEwMDIzIERWQi1DIGRlbW9kICovCisJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHRkYTEwMDIzX2F0dGFjaCwgJmFueXNlZV90ZGExMDAyM19jb25maWcsCisJCQkgICAgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMHg0OCk7CisJaWYgKGFkYXAtPmZlICE9IE5VTEwpIHsKKwkJc3RhdGUtPnR1bmVyID0gRFZCX1BMTF9TQU1TVU5HX0RUT1M0MDNJSDEwMkE7CisJCXJldHVybiAwOworCX0KKworCS8qIHJldHVybiBJTyBwb3J0IEQgdG8gaW5pdCB2YWx1ZSBmb3Igc2FmZSAqLworCXJldCA9IGFueXNlZV93cml0ZV9yZWcoYWRhcC0+ZGV2LCAweGIwLCBpb19kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZXJyKCJVbmtvd24gQW55c2VlIHZlcnNpb246ICUwMnggJTAyeCAlMDJ4LiAiXAorCSAgICAiUGxlYXNlIHJlcG9ydCB0aGUgPGxpbnV4LWR2YkBsaW51eHR2Lm9yZz4uIiwKKwkgICAgaHdfaW5mb1swXSwgaHdfaW5mb1sxXSwgaHdfaW5mb1syXSk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBhbnlzZWVfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGFueXNlZV9zdGF0ZSAqc3RhdGUgPSBhZGFwLT5kZXYtPnByaXY7CisJZGViX2luZm8oIiVzOiBcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoc3RhdGUtPnR1bmVyKSB7CisJY2FzZSBEVkJfUExMX1RIT01TT05fRFRUNzU3OToKKwkJLyogVGhvbXNvbiBkdHQ3NTc5IChub3Qgc3VyZSkgUExMIGluc2lkZSBvZjoKKwkJICAgU2Ftc3VuZyBETk9TNDA0WkgxMDJBIE5JTQorCQkgICBTYW1zdW5nIEROT1M0MDRaSDEwM0EgTklNICovCisJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweDYxLAorCQkJICAgTlVMTCwgRFZCX1BMTF9USE9NU09OX0RUVDc1NzkpOworCQlicmVhazsKKwljYXNlIERWQl9QTExfU0FNU1VOR19EVE9TNDAzSUgxMDJBOgorCQkvKiBVbmtub3duIFBMTCBpbnNpZGUgb2YgU2Ftc3VuZyBEVE9TNDAzSUgxMDJBIHR1bmVyIG1vZHVsZSAqLworCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBhZGFwLT5mZSwgMHhjMCwKKwkJCSAgICZhZGFwLT5kZXYtPmkyY19hZGFwLCBEVkJfUExMX1NBTVNVTkdfRFRPUzQwM0lIMTAyQSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFueXNlZV9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCit7CisJdTggYnVmW10gPSB7Q01EX0dFVF9JUl9DT0RFfTsKKwlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcCA9IGQtPnByb3BzLnJjX2tleV9tYXA7CisJdTggaXJjb2RlWzJdOworCWludCBpLCByZXQ7CisKKwlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCBzaXplb2YoYnVmKSwgJmlyY29kZVswXSwgMik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCSpldmVudCA9IDA7CisJKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOworCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CisJCWlmIChrZXltYXBbaV0uY3VzdG9tID09IGlyY29kZVswXSAmJgorCQkgICAga2V5bWFwW2ldLmRhdGEgPT0gaXJjb2RlWzFdKSB7CisJCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhbnlzZWVfcmNfa2V5c1tdID0geworCXsgMHgwMSwgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIDB4MDEsIEtFWV8xIH0sCisJeyAweDAxLCAweDAyLCBLRVlfMiB9LAorCXsgMHgwMSwgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDEsIDB4MDQsIEtFWV80IH0sCisJeyAweDAxLCAweDA1LCBLRVlfNSB9LAorCXsgMHgwMSwgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDEsIDB4MDcsIEtFWV83IH0sCisJeyAweDAxLCAweDA4LCBLRVlfOCB9LAorCXsgMHgwMSwgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MDEsIDB4MGEsIEtFWV9QT1dFUiB9LAorCXsgMHgwMSwgMHgwYiwgS0VZX0RPQ1VNRU5UUyB9LCAgICAvKiAqICovCisJeyAweDAxLCAweDE5LCBLRVlfRkFWT1JJVEVTIH0sCisJeyAweDAxLCAweDIwLCBLRVlfU0xFRVAgfSwKKwl7IDB4MDEsIDB4MjEsIEtFWV9NT0RFIH0sICAgICAgICAgLyogNDozIC8gMTY6OSBzZWxlY3QgKi8KKwl7IDB4MDEsIDB4MjIsIEtFWV9aT09NIH0sCisJeyAweDAxLCAweDQ3LCBLRVlfVEVYVCB9LAorCXsgMHgwMSwgMHgxNiwgS0VZX1RWIH0sICAgICAgICAgICAvKiBUViAvIHJhZGlvIHNlbGVjdCAqLworCXsgMHgwMSwgMHgxZSwgS0VZX0xBTkdVQUdFIH0sICAgICAvKiBTZWNvbmQgQXVkaW8gUHJvZ3JhbSAqLworCXsgMHgwMSwgMHgxYSwgS0VZX1NVQlRJVExFIH0sCisJeyAweDAxLCAweDFiLCBLRVlfQ0FNRVJBIH0sICAgICAgIC8qIHNjcmVlbnNob3QgKi8KKwl7IDB4MDEsIDB4NDIsIEtFWV9NVVRFIH0sCisJeyAweDAxLCAweDBlLCBLRVlfTUVOVSB9LAorCXsgMHgwMSwgMHgwZiwgS0VZX0VQRyB9LAorCXsgMHgwMSwgMHgxNywgS0VZX0lORk8gfSwKKwl7IDB4MDEsIDB4MTAsIEtFWV9FWElUIH0sCisJeyAweDAxLCAweDEzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDEsIDB4MTIsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAxLCAweDExLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAxLCAweDE0LCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDEsIDB4MTUsIEtFWV9PSyB9LAorCXsgMHgwMSwgMHgxZCwgS0VZX1JFRCB9LAorCXsgMHgwMSwgMHgxZiwgS0VZX0dSRUVOIH0sCisJeyAweDAxLCAweDFjLCBLRVlfWUVMTE9XIH0sCisJeyAweDAxLCAweDQ0LCBLRVlfQkxVRSB9LAorCXsgMHgwMSwgMHgwYywgS0VZX1NIVUZGTEUgfSwgICAgICAvKiBzbmFwc2hvdCAqLworCXsgMHgwMSwgMHg0OCwgS0VZX1NUT1AgfSwKKwl7IDB4MDEsIDB4NTAsIEtFWV9QTEFZIH0sCisJeyAweDAxLCAweDUxLCBLRVlfUEFVU0UgfSwKKwl7IDB4MDEsIDB4NDksIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDEsIDB4MTgsIEtFWV9QUkVWSU9VUyB9LCAgICAgLyogfDw8ICovCisJeyAweDAxLCAweDBkLCBLRVlfTkVYVCB9LCAgICAgICAgIC8qID4+fCAqLworCXsgMHgwMSwgMHgyNCwgS0VZX1BST0cxIH0sICAgICAgICAvKiBGMSAqLworCXsgMHgwMSwgMHgyNSwgS0VZX1BST0cyIH0sICAgICAgICAvKiBGMiAqLworfTsKKworLyogRFZCIFVTQiBEcml2ZXIgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBhbnlzZWVfcHJvcGVydGllczsKKworc3RhdGljIGludCBhbnlzZWVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKwlpbnQgcmV0OworCisJbXV0ZXhfaW5pdCgmYW55c2VlX3VzYl9tdXRleCk7CisKKwkvKiBUaGVyZSBpcyBvbmUgaW50ZXJmYWNlIHdpdGggdHdvIGFsdGVybmF0ZSBzZXR0aW5ncy4KKwkgICBBbHRlcm5hdGUgc2V0dGluZyAwIGlzIGZvciBidWxrIHRyYW5zZmVyLgorCSAgIEFsdGVybmF0ZSBzZXR0aW5nIDEgaXMgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVyLgorCSAgIFdlIHVzZSBidWxrIHRyYW5zZmVyIChhbHRlcm5hdGUgc2V0dGluZyAwKS4gKi8KKwlpZiAoaW50Zi0+bnVtX2FsdHNldHRpbmcgPCAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmFueXNlZV9wcm9wZXJ0aWVzLCBUSElTX01PRFVMRSwgJmQsCisJCWFkYXB0ZXJfbnIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaW50ZiwgMCk7CisJaWYgKGFsdCA9PSBOVUxMKSB7CisJCWRlYl9pbmZvKCIlczogbm8gYWx0IGZvdW5kIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LCBhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJYWx0LT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGQpCisJCXJldCA9IGFueXNlZV9pbml0KGQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFueXNlZV90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9DWVBSRVNTLCBVU0JfUElEX0FOWVNFRSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BTVQsICAgICBVU0JfUElEX0FOWVNFRSkgfSwKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFueXNlZV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBhbnlzZWVfcHJvcGVydGllcyA9IHsKKwkuY2FwcyAgICAgICAgICAgICA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisKKwkudXNiX2N0cmwgICAgICAgICA9IERFVklDRV9TUEVDSUZJQywKKworCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBhbnlzZWVfc3RhdGUpLAorCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gYW55c2VlX3N0cmVhbWluZ19jdHJsLAorCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBhbnlzZWVfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBhbnlzZWVfdHVuZXJfYXR0YWNoLAorCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS5jb3VudCA9IDgsCisJCQkJLmVuZHBvaW50ID0gMHg4MiwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDUxMiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCX0KKwl9LAorCisJLnJjX2tleV9tYXAgICAgICAgPSBhbnlzZWVfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoYW55c2VlX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gYW55c2VlX3JjX3F1ZXJ5LAorCS5yY19pbnRlcnZhbCAgICAgID0gMjAwLCAgLyogd2luZG93cyBkcml2ZXIgdXNlcyA1MDBtcyAqLworCisJLmkyY19hbGdvICAgICAgICAgPSAmYW55c2VlX2kyY19hbGdvLAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMSwKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeworCQkJLm5hbWUgPSAiQW55c2VlIERWQiBVU0IyLjAiLAorCQkJLmNvbGRfaWRzID0ge05VTEx9LAorCQkJLndhcm1faWRzID0geyZhbnlzZWVfdGFibGVbMF0sCisJCQkJICAgICAmYW55c2VlX3RhYmxlWzFdLCBOVUxMfSwKKwkJfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYW55c2VlX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9ICJkdmJfdXNiX2FueXNlZSIsCisJLnByb2JlICAgICAgPSBhbnlzZWVfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LAorCS5pZF90YWJsZSAgID0gYW55c2VlX3RhYmxlLAorfTsKKworLyogbW9kdWxlIHN0dWZmICovCitzdGF0aWMgaW50IF9faW5pdCBhbnlzZWVfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZhbnlzZWVfZHJpdmVyKTsKKwlpZiAocmV0KQorCQllcnIoIiVzOiB1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCBfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbnlzZWVfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmYW55c2VlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFueXNlZV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChhbnlzZWVfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIEFueXNlZSBFMzAgRFZCLUMgJiBEVkItVCBVU0IyLjAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYTAxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5oCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFueXNlZSBFMzAgRFZCLUMgJiBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogVE9ETzoKKyAqIC0gYWRkIHNtYXJ0IGNhcmQgcmVhZGVyIHN1cHBvcnQgZm9yIENvbmRpdGlvbmFsIEFjY2VzcyAoQ0EpCisgKgorICogQ2FyZCByZWFkZXIgaW4gQW55c2VlIGlzIG5vdGhpbmcgbW9yZSB0aGFuIElTTyA3ODE2IGNhcmQgcmVhZGVyLgorICogVGhlcmUgaXMgbm8gaGFyZHdhcmUgQ0FNIGluIGFueSBBbnlzZWUgZGV2aWNlIHNvbGQuCisgKiBJbiBteSB1bmRlcnN0YW5kaW5nIGl0IHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBtYWtpbmcgb3duIG1vZHVsZQorICogZm9yIElTTyA3ODE2IGNhcmQgcmVhZGVyLCBsaWtlIGR2Yl9jYV9lbjUwMjIxIGlzIGltcGxlbWVudGVkLiBUaGlzCisgKiBtb2R1bGUgcmVnaXN0ZXJzIHNlcmlhbCBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBjb21tdW5pY2F0ZQorICogd2l0aCBhbnkgSVNPIDc4MTYgc21hcnQgY2FyZC4KKyAqCisgKiBBbnkgaGVscCBhY2NvcmRpbmcgdG8gaW1wbGVtZW50IHNlcmlhbCBzbWFydCBjYXJkIHJlYWRlciBzdXBwb3J0CisgKiBpcyBoaWdobHkgd2VsY29tZSEKKyAqLworCisjaWZuZGVmIF9EVkJfVVNCX0FOWVNFRV9IXworI2RlZmluZSBfRFZCX1VTQl9BTllTRUVfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImFueXNlZSIKKyNpbmNsdWRlICJkdmItdXNiLmgiCisKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2FueXNlZV9kZWJ1ZywgMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3hmZXIoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2FueXNlZV9kZWJ1ZywgMHgwMiwgYXJncykKKyNkZWZpbmUgZGViX3JjKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2FueXNlZV9kZWJ1ZywgMHgwNCwgYXJncykKKyNkZWZpbmUgZGViX3JlZyhhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2FueXNlZV9kZWJ1ZywgMHgwOCwgYXJncykKKyNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2FueXNlZV9kZWJ1ZywgMHgxMCwgYXJncykKKyNkZWZpbmUgZGViX2Z3KGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2FueXNlZV9kZWJ1ZywgMHgyMCwgYXJncykKKworZW51bSBjbWQgeworCUNNRF9JMkNfUkVBRCAgICAgICAgICAgID0gMHgzMywKKwlDTURfSTJDX1dSSVRFICAgICAgICAgICA9IDB4MzEsCisJQ01EX1JFR19SRUFEICAgICAgICAgICAgPSAweGIwLAorCUNNRF9SRUdfV1JJVEUgICAgICAgICAgID0gMHhiMSwKKwlDTURfU1RSRUFNSU5HX0NUUkwgICAgICA9IDB4MTIsCisJQ01EX0xFRF9BTkRfSVJfQ1RSTCAgICAgPSAweDE2LAorCUNNRF9HRVRfSVJfQ09ERSAgICAgICAgID0gMHg0MSwKKwlDTURfR0VUX0hXX0lORk8gICAgICAgICA9IDB4MTksCisJQ01EX1NNQVJUQ0FSRCAgICAgICAgICAgPSAweDM0LAorfTsKKworc3RydWN0IGFueXNlZV9zdGF0ZSB7CisJdTggdHVuZXI7CisJdTggc2VxOworfTsKKworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVTQiBBUEkgZGVzY3JpcHRpb24gKHJldmVyc2UgZW5naW5lZXJlZCkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVHJhbnNhY3Rpb24gZmxvdzoKKz09PT09PT09PT09PT09PT09CitCVUxLWzAwMDAxXSA+Pj4gUkVRVUVTVCBQQUNLRVQgNjQgYnl0ZXMKK0JVTEtbMDAwODFdIDw8PCBSRVBMWSBQQUNLRVQgIzEgNjQgYnl0ZXMgKFBSRVZJT1VTIFRSQU5TQUNUSU9OIFJFUExZKQorQlVMS1swMDA4MV0gPDw8IFJFUExZIFBBQ0tFVCAjMiA2NCBieXRlcyAoQ1VSUkVOVCBUUkFOU0FDVElPTiBSRVBMWSkKKworR2VuZXJhbCByZXBseSBwYWNrZXQocykgYXJlIGFsd2F5cyB1c2VkIGlmIG5vdCBvd24gcmVwbHkgZGVmaW5lZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfCAwMC02MyB8IEdFTkVSQUwgUkVQTFkgUEFDS0VUICMxIChQUkVWSU9VUyBSRVBMWSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3wgICAgMDAgfCByZXBseSBkYXRhIChpZiBhbnkpIGZyb20gcHJldmlvdXMgdHJhbnNhY3Rpb24KK3wgICAgICAgfCBKdXN0IHNhbWUgcmVwbHkgcGFja2V0IGFzIHJldHVybmVkIGR1cmluZyBwcmV2aW91cyB0cmFuc2FjdGlvbi4KK3wgICAgICAgfCBOZWVkZWQgb25seSBpZiByZXBseSBpcyBtaXNzZWQgaW4gcHJldmlvdXMgdHJhbnNhY3Rpb24uCit8ICAgICAgIHwgSnVzdCBza2lwIG5vcm1hbGx5LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAwMS01OSB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgNjAgfCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IDYxLTYzIHwgZG9uJ3QgY2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8IDAwLTYzIHwgR0VORVJBTCBSRVBMWSBQQUNLRVQgIzIgKENVUlJFTlQgUkVQTFkpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8ICAgIDAwIHwgcmVwbHkgZGF0YSAoaWYgYW55KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAwMS01OSB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgNjAgfCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IDYxLTYzIHwgZG9uJ3QgY2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8IDAwLTYzIHwgSTJDIFdSSVRFIFJFUVVFU1QgUEFDS0VUCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8ICAgIDAwIHwgMHgzMSBJMkMgd3JpdGUgY29tbWFuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgICAwMSB8IGkyYyBhZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDAyIHwgZGF0YSBsZW5ndGgKK3wgICAgICAgfCAweDAyIChmb3IgdHlwaWNhbCBJMkMgcmVnIC8gdmFsIHBhaXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDAzIHwgMHgwMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAwNC0gICB8IGRhdGEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAtNTkgfCBkb24ndCBjYXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDYwIHwgcGFja2V0IHNlcXVlbmNlIG51bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCA2MS02MyB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfCAwMC02MyB8IEkyQyBSRUFEIFJFUVVFU1QgUEFDS0VUCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8ICAgIDAwIHwgMHgzMyBJMkMgcmVhZCBjb21tYW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDAxIHwgaTJjIGFkZHJlc3MgKyAxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDAyIHwgcmVnaXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgMDMgfCAweDAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDA0IHwgMHgwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgICAwNSB8IDB4MDEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgMDYtNTkgfCBkb24ndCBjYXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDYwIHwgcGFja2V0IHNlcXVlbmNlIG51bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCA2MS02MyB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfCAwMC02MyB8IFVTQiBDT05UUk9MTEVSIFJFR0lTVEVSIFdSSVRFIFJFUVVFU1QgUEFDS0VUCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8ICAgIDAwIHwgMHhiMSByZWdpc3RlciB3cml0ZSBjb21tYW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IDAxLTAyIHwgcmVnaXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgMDMgfCAweDAxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDA0IHwgdmFsdWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgMDUtNTkgfCBkb24ndCBjYXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDYwIHwgcGFja2V0IHNlcXVlbmNlIG51bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCA2MS02MyB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfCAwMC02MyB8IFVTQiBDT05UUk9MTEVSIFJFR0lTVEVSIFJFQUQgUkVRVUVTVCBQQUNLRVQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3wgICAgMDAgfCAweGIwIHJlZ2lzdGVyIHJlYWQgY29tbWFuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAwMS0wMiB8IHJlZ2lzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDAzIHwgMHgwMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAwNC01OSB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgNjAgfCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IDYxLTYzIHwgZG9uJ3QgY2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8IDAwLTYzIHwgTEVEIENPTlRST0wgUkVRVUVTVCBQQUNLRVQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3wgICAgMDAgfCAweDE2IExFRCBhbmQgSVIgY29udHJvbCBjb21tYW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDAxIHwgMHgwMSAoTEVEKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgICAwMyB8IDB4MDAgYmxpbmsKK3wgICAgICAgfCAweDAxIGxpZ2h0cyBjb250aW51b3VzbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgMDQgfCBibGluayBpbnRlcnZhbAorfCAgICAgICB8IDB4MDAgZmFzdGVzdCAobG9va3MgbGlrZSBMRUQgbGlnaHRzIGNvbnRpbnVvdXNseSkKK3wgICAgICAgfCAweGZmIHNsb3dlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgMDUtNTkgfCBkb24ndCBjYXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDYwIHwgcGFja2V0IHNlcXVlbmNlIG51bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCA2MS02MyB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfCAwMC02MyB8IElSIENPTlRST0wgUkVRVUVTVCBQQUNLRVQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3wgICAgMDAgfCAweDE2IExFRCBhbmQgSVIgY29udHJvbCBjb21tYW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDAxIHwgMHgwMiAoSVIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDAzIHwgMHgwMCBJUiBkaXNhYmxlZAorfCAgICAgICB8IDB4MDEgSVIgZW5hYmxlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAwNC01OSB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgNjAgfCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IDYxLTYzIHwgZG9uJ3QgY2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8IDAwLTYzIHwgU1RSRUFNSU5HIENPTlRST0wgUkVRVUVTVCBQQUNLRVQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3wgICAgMDAgfCAweDEyIHN0cmVhbWluZyBjb250cm9sIGNvbW1hbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgMDEgfCAweDAwIHN0cmVhbWluZyBkaXNhYmxlZAorfCAgICAgICB8IDB4MDEgc3RyZWFtaW5nIGVuYWJsZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgMDIgfCAweDAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IDAzLTU5IHwgZG9uJ3QgY2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgICA2MCB8IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgNjEtNjMgfCBkb24ndCBjYXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3wgMDAtNjMgfCBSRU1PVEUgQ09OVFJPTCBSRVFVRVNUIFBBQ0tFVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfCAgICAwMCB8IDB4NDEgcmVtb3RlIGNvbnRyb2wgY29tbWFuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAwMS01OSB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgNjAgfCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IDYxLTYzIHwgZG9uJ3QgY2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8IDAwLTYzIHwgUkVNT1RFIENPTlRST0wgUkVQTFkgUEFDS0VUCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8ICAgIDAwIHwgMHgwMCBjb2RlIG5vdCByZWNlaXZlZAorfCAgICAgICB8IDB4MDEgY29kZSByZWNlaXZlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgICAwMSB8IHJlbW90ZSBjb250cm9sIGNvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgMDItNTkgfCBkb24ndCBjYXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDYwIHwgcGFja2V0IHNlcXVlbmNlIG51bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCA2MS02MyB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfCAwMC02MyB8IEdFVCBIQVJEV0FSRSBJTkZPIFJFUVVFU1QgUEFDS0VUCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8ICAgIDAwIHwgMHgxOSBnZXQgaGFyZHdhcmUgaW5mbyBjb21tYW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IDAxLTU5IHwgZG9uJ3QgY2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgICA2MCB8IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgNjEtNjMgfCBkb24ndCBjYXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3wgMDAtNjMgfCBHRVQgSEFSRFdBUkUgSU5GTyBSRVBMWSBQQUNLRVQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3wgICAgMDAgfCBoYXJkd2FyZSBpZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAwMS0wMiB8IGZpcm13YXJlIHZlcnNpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgMDMtNTkgfCBkb24ndCBjYXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgIDYwIHwgcGFja2V0IHNlcXVlbmNlIG51bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCA2MS02MyB8IGRvbid0IGNhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfCAwMC02MyB8IFNNQVJUIENBUkQgUkVBREVSIFBBQ0tFVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfCAgICAwMCB8IDB4MzQgc21hcnQgY2FyZCByZWFkZXIgY29tbWFuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgICB4eCB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IHh4LTU5IHwgZG9uJ3QgY2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgICA2MCB8IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgNjEtNjMgfCBkb24ndCBjYXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F1NjYxMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hdTY2MTAuYwppbmRleCAyY2NiOTBmLi5lYjM0Y2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F1NjYxMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXU2NjEwLmMKQEAgLTEsMjQgKzEsMzEgQEAKLS8qIERWQiBVU0IgY29tcGxpYW50IGxpbnV4IGRyaXZlciBmb3IgU2lnbWF0ZWsgRFZCLTExMCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKy8qCisgKiBEVkIgVVNCIExpbnV4IGRyaXZlciBmb3IgQWxjb3IgTWljcm8gQVU2NjEwIERWQi1UIFVTQjIuMC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CiAgKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKglTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIHNlZSBEb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpbmNsdWRlICJhdTY2MTAuaCIKLQogI2luY2x1ZGUgInpsMTAzNTMuaCIKICNpbmNsdWRlICJxdDEwMTAuaCIKIAogLyogZGVidWcgKi8KIHN0YXRpYyBpbnQgZHZiX3VzYl9hdTY2MTBfZGVidWc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfYXU2NjEwX2RlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9cmMgKG9yLWFibGUpKS4iIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKLQorTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwiIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCiBzdGF0aWMgaW50IGF1NjYxMF91c2JfbXNnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggb3BlcmF0aW9uLCB1OCBhZGRyLApAQCAtNDIsOSArNDksOCBAQAogCX0KIAogCXJldCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZC0+dWRldiwgMCksIG9wZXJhdGlvbiwKLQkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUnxVU0JfRElSX0lOLCBhZGRyIDw8IDEsIGluZGV4LCB1c2JfYnVmLAotCQkJICAgICAgc2l6ZW9mKHVzYl9idWYpLCBBVTY2MTBfVVNCX1RJTUVPVVQpOwotCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1J8VVNCX0RJUl9JTiwgYWRkciA8PCAxLCBpbmRleCwKKwkJCSAgICAgIHVzYl9idWYsIHNpemVvZih1c2JfYnVmKSwgQVU2NjEwX1VTQl9USU1FT1VUKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTE2LDE1ICsxMjIsNiBAQAogfTsKIAogLyogQ2FsbGJhY2tzIGZvciBEVkIgVVNCICovCi1zdGF0aWMgaW50IGF1NjYxMF9pZGVudGlmeV9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKLQkJCQkgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzLAotCQkJCSBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKipkZXNjLAotCQkJCSBpbnQgKmNvbGQpCi17Ci0JKmNvbGQgPSAwOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGF1NjYxMF96bDEwMzUzX2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4MGYsCiAJLm5vX3R1bmVyID0gMSwKQEAgLTEzMywxMiArMTMwLDEyIEBACiAKIHN0YXRpYyBpbnQgYXU2NjEwX3psMTAzNTNfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsICZhdTY2MTBfemwxMDM1M19jb25maWcsCi0JCQkJICAgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKSB7Ci0JCXJldHVybiAwOwotCX0KKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsICZhdTY2MTBfemwxMDM1M19jb25maWcsCisJCSZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKwlpZiAoYWRhcC0+ZmUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBxdDEwMTBfY29uZmlnIGF1NjYxMF9xdDEwMTBfY29uZmlnID0gewpAQCAtMTcxLDcgKzE2OCw3IEBACiAJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBBVTY2MTBfQUxUU0VUVElORyk7CiAKIAkJaWYgKGFsdCA9PSBOVUxMKSB7Ci0JCQlkZWJfcmMoIm5vIGFsdCBmb3VuZCFcbiIpOworCQkJZGViX2luZm8oIiVzOiBubyBhbHQgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LCBhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlciwKQEAgLTE4MSwxOCArMTc4LDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXU2NjEwX3RhYmxlIFtdID0gewogCXsgVVNCX0RFVklDRShVU0JfVklEX0FMQ09SX01JQ1JPLCBVU0JfUElEX1NJR01BVEVLX0RWQl8xMTApIH0sCiAJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgYXU2NjEwX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhdTY2MTBfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgYXU2NjEwX3Byb3BlcnRpZXMgPSB7CiAJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCiAJLnVzYl9jdHJsID0gREVWSUNFX1NQRUNJRklDLAotCS5zaXplX29mX3ByaXYgICAgID0gMCwKLQkuaWRlbnRpZnlfc3RhdGUgICA9IGF1NjYxMF9pZGVudGlmeV9zdGF0ZSwKKworCS5zaXplX29mX3ByaXYgPSAwLAorCiAJLm51bV9hZGFwdGVycyA9IDEsCiAJLmFkYXB0ZXIgPSB7CiAJCXsKQEAgLTIwNiwyMCArMjA0LDIyIEBACiAJCQkJLnUgPSB7CiAJCQkJCS5pc29jID0gewogCQkJCQkJLmZyYW1lc3BlcnVyYiA9IDQwLAotCQkJCQkJLmZyYW1lc2l6ZSA9IDk0MiwgICAvKiBtYXhpbXVtIHBhY2tldCBzaXplICovCi0JCQkJCQkuaW50ZXJ2YWwgPSAxLjI1LCAgIC8qIDEyNSB1cyAqLworCQkJCQkJLmZyYW1lc2l6ZSA9IDk0MiwKKwkJCQkJCS5pbnRlcnZhbCA9IDEsCiAJCQkJCX0KIAkJCQl9CiAJCQl9LAogCQl9CiAJfSwKKwogCS5pMmNfYWxnbyA9ICZhdTY2MTBfaTJjX2FsZ28sCisKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CiAJCXsKLQkJCSJTaWdtYXRlayBEVkItMTEwIERWQi1UIFVTQjIuMCIsCi0JCQl7ICZhdTY2MTBfdGFibGVbMF0sIE5VTEwgfSwKLQkJCXsgTlVMTCB9LAorCQkJLm5hbWUgPSAiU2lnbWF0ZWsgRFZCLTExMCBEVkItVCBVU0IyLjAiLAorCQkJLmNvbGRfaWRzID0ge05VTEx9LAorCQkJLndhcm1faWRzID0geyZhdTY2MTBfdGFibGVbMF0sIE5VTEx9LAogCQl9LAogCX0KIH07CkBAIC0yMzYsMTIgKzIzNiwxMSBAQAogewogCWludCByZXQ7CiAKLQlpZiAoKHJldCA9IHVzYl9yZWdpc3RlcigmYXU2NjEwX2RyaXZlcikpKSB7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZhdTY2MTBfZHJpdmVyKTsKKwlpZiAocmV0KQogCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF1NjYxMF9tb2R1bGVfZXhpdCh2b2lkKQpAQCAtMjUwLDEwICsyNDksMTAgQEAKIAl1c2JfZGVyZWdpc3RlcigmYXU2NjEwX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9pbml0IChhdTY2MTBfbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQgKGF1NjYxMF9tb2R1bGVfZXhpdCk7Cittb2R1bGVfaW5pdChhdTY2MTBfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoYXU2NjEwX21vZHVsZV9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBTaWdtYXRlayBEVkItMTEwIERWQi1UIFVTQjIuMCAvIEFVNjYxMCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEFsY29yIE1pY3JvIEFVNjYxMCBEVkItVCBVU0IyLjAiKTsKIE1PRFVMRV9WRVJTSU9OKCIwLjEiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXU2NjEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F1NjYxMC5oCmluZGV4IDQxNjFiMDUuLjc4NDlhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXU2NjEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hdTY2MTAuaApAQCAtMSwxMCArMSwzMCBAQAorLyoKKyAqIERWQiBVU0IgTGludXggZHJpdmVyIGZvciBBbGNvciBNaWNybyBBVTY2MTAgRFZCLVQgVVNCMi4wLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCiAjaWZuZGVmIF9EVkJfVVNCX0FVNjYxMF9IXwogI2RlZmluZSBfRFZCX1VTQl9BVTY2MTBfSF8KIAogI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImF1NjYxMCIKICNpbmNsdWRlICJkdmItdXNiLmgiCiAKLSNkZWZpbmUgZGViX3JjKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2F1NjYxMF9kZWJ1ZywweDAxLGFyZ3MpCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2F1NjYxMF9kZWJ1ZywgMHgwMSwgYXJncykKIAogI2RlZmluZSBBVTY2MTBfUkVRX0kyQ19XUklURQkweDE0CiAjZGVmaW5lIEFVNjYxMF9SRVFfSTJDX1JFQUQJMHgxMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCmluZGV4IDAyODYxNTY3Li41NzhhZmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiemwxMDM1My5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgogI2luY2x1ZGUgInR1bmVyLXNpbXBsZS5oIgorI2luY2x1ZGUgIm14bDUwMDVzLmgiCiAKIC8qIGRlYnVnICovCiBzdGF0aWMgaW50IGR2Yl91c2JfY3h1c2JfZGVidWc7CkBAIC00Myw5ICs0NCw4IEBACiAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCi0jZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2N4dXNiX2RlYnVnLDB4MDEsYXJncykKLSNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSAgICBpZiAoZC0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBVU0JfVklEX01FRElPTikgXAotCQkJCWRwcmludGsoZHZiX3VzYl9jeHVzYl9kZWJ1ZywweDAxLGFyZ3MpCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2N4dXNiX2RlYnVnLCAweDAzLCBhcmdzKQorI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICAgIGRwcmludGsoZHZiX3VzYl9jeHVzYl9kZWJ1ZywgMHgwMiwgYXJncykKIAogc3RhdGljIGludCBjeHVzYl9jdHJsX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsCiAJCQkgIHU4IGNtZCwgdTggKndidWYsIGludCB3bGVuLCB1OCAqcmJ1ZiwgaW50IHJsZW4pCkBAIC0yMDIsNiArMjAyLDQ2IEBACiAJCXJldHVybiBjeHVzYl9jdHJsX21zZyhkLCBDTURfUE9XRVJfT0ZGLCAmYiwgMSwgTlVMTCwgMCk7CiB9CiAKK3N0YXRpYyBpbnQgY3h1c2JfYXZlcl9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQoreworCWludCByZXQ7CisJaWYgKCFvbm9mZikKKwkJcmV0dXJuIGN4dXNiX2N0cmxfbXNnKGQsIENNRF9QT1dFUl9PRkYsIE5VTEwsIDAsIE5VTEwsIDApOworCWlmIChkLT5zdGF0ZSA9PSBEVkJfVVNCX1NUQVRFX0lOSVQgJiYKKwkgICAgdXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwgMCwgMCkgPCAwKQorCQllcnIoInNldCBpbnRlcmZhY2UgZmFpbGVkIik7CisJZG87IHdoaWxlICghKHJldCA9IGN4dXNiX2N0cmxfbXNnKGQsIENNRF9QT1dFUl9PTiwgTlVMTCwgMCwgTlVMTCwgMCkpICYmCisJCSAgICEocmV0ID0gY3h1c2JfY3RybF9tc2coZCwgMHgxNSwgTlVMTCwgMCwgTlVMTCwgMCkpICYmCisJCSAgICEocmV0ID0gY3h1c2JfY3RybF9tc2coZCwgMHgxNywgTlVMTCwgMCwgTlVMTCwgMCkpICYmIDApOworCWlmICghcmV0KSB7CisJCS8qIEZJWE1FOiBXZSBkb24ndCBrbm93IHdoeSwgYnV0IHdlIG5lZWQgdG8gY29uZmlndXJlIHRoZQorCQkgKiBsZ2R0MzMwMyB3aXRoIHRoZSByZWdpc3RlciBzZXR0aW5ncyBiZWxvdyBvbiByZXN1bWUgKi8KKwkJaW50IGk7CisJCXU4IGJ1ZiwgYnVmc1tdID0geworCQkJMHgwZSwgMHgyLCAweDAwLCAweDdmLAorCQkJMHgwZSwgMHgyLCAweDAyLCAweGZlLAorCQkJMHgwZSwgMHgyLCAweDAyLCAweDAxLAorCQkJMHgwZSwgMHgyLCAweDAwLCAweDAzLAorCQkJMHgwZSwgMHgyLCAweDBkLCAweDQwLAorCQkJMHgwZSwgMHgyLCAweDBlLCAweDg3LAorCQkJMHgwZSwgMHgyLCAweDBmLCAweDhlLAorCQkJMHgwZSwgMHgyLCAweDEwLCAweDAxLAorCQkJMHgwZSwgMHgyLCAweDE0LCAweGQ3LAorCQkJMHgwZSwgMHgyLCAweDQ3LCAweDg4LAorCQl9OworCQltc2xlZXAoMjApOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1ZnMpL3NpemVvZih1OCk7IGkgKz0gNC9zaXplb2YodTgpKSB7CisJCQlyZXQgPSBjeHVzYl9jdHJsX21zZyhkLCBDTURfSTJDX1dSSVRFLAorCQkJCQkgICAgIGJ1ZnMraSwgNCwgJmJ1ZiwgMSk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQkJaWYgKGJ1ZiAhPSAweDgpCisJCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBjeHVzYl9ibHVlYmlyZF9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQogewogCXU4IGIgPSAwOwpAQCAtMjMzLDYgKzI3MywxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN4dXNiX2F2ZXJfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCWlmIChvbm9mZikKKwkJY3h1c2JfY3RybF9tc2coYWRhcC0+ZGV2LCBDTURfQVZFUl9TVFJFQU1fT04sIE5VTEwsIDAsIE5VTEwsIDApOworCWVsc2UKKwkJY3h1c2JfY3RybF9tc2coYWRhcC0+ZGV2LCBDTURfQVZFUl9TVFJFQU1fT0ZGLAorCQkJICAgICAgIE5VTEwsIDAsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGN4dXNiX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcCA9IGQtPnByb3BzLnJjX2tleV9tYXA7CkBAIC00MjMsNiArNDczLDEyIEBACiAJLmRlbW9kX2NoaXAgICAgPSBMR0RUMzMwMywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbGdkdDMzMHhfY29uZmlnIGN4dXNiX2F2ZXJfbGdkdDMzMDNfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzICAgICAgID0gMHgwZSwKKwkuZGVtb2RfY2hpcCAgICAgICAgICA9IExHRFQzMzAzLAorCS5jbG9ja19wb2xhcml0eV9mbGlwID0gMiwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbXQzNTJfY29uZmlnIGN4dXNiX2RlZTE2MDFfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHgwZiwKIAkuZGVtb2RfaW5pdCAgICA9IGN4dXNiX2RlZTE2MDFfZGVtb2RfaW5pdCwKQEAgLTQ1Myw2ICs1MDksMjQgQEAKIAkuZGVtb2RfaW5pdCA9IGN4dXNiX210MzUyX2RlbW9kX2luaXQsCiB9OwogCisvKiBGSVhNRTogbmVlZHMgdHdlYWtpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgbXhsNTAwNXNfY29uZmlnIGF2ZXJfYTg2OHJfdHVuZXIgPSB7CisJLmkyY19hZGRyZXNzICAgICA9IDB4NjMsCisJLmlmX2ZyZXEgICAgICAgICA9IDYwMDAwMDBVTCwKKwkueHRhbF9mcmVxICAgICAgID0gQ1JZU1RBTF9GUkVRXzE2MDAwMDAwSFosCisJLmFnY19tb2RlICAgICAgICA9IE1YTF9TSU5HTEVfQUdDLAorCS50cmFja2luZ19maWx0ZXIgPSBNWExfVEZfQywKKwkucnNzaV9lbmFibGUgICAgID0gTVhMX1JTU0lfRU5BQkxFLAorCS5jYXBfc2VsZWN0ICAgICAgPSBNWExfQ0FQX1NFTF9FTkFCTEUsCisJLmRpdl9vdXQgICAgICAgICA9IE1YTF9ESVZfT1VUXzQsCisJLmNsb2NrX291dCAgICAgICA9IE1YTF9DTE9DS19PVVRfRElTQUJMRSwKKwkub3V0cHV0X2xvYWQgICAgID0gTVhMNTAwNVNfSUZfT1VUUFVUX0xPQURfMjAwX09ITSwKKwkudG9wCQkgPSBNWEw1MDA1U19UT1BfMjVQMiwKKwkubW9kX21vZGUgICAgICAgID0gTVhMX0RJR0lUQUxfTU9ERSwKKwkuaWZfbW9kZSAgICAgICAgID0gTVhMX1pFUk9fSUYsCisJLkFnY01hc3RlckJ5dGUgICA9IDB4MDAsCit9OworCiAvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KIHN0YXRpYyBpbnQgY3h1c2JfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewpAQCAtNTMzLDYgKzYwNywxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN4dXNiX214bDUwMDNzX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWR2Yl9hdHRhY2gobXhsNTAwNXNfYXR0YWNoLCBhZGFwLT5mZSwKKwkJICAgJmFkYXAtPmRldi0+aTJjX2FkYXAsICZhdmVyX2E4NjhyX3R1bmVyKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjeHVzYl9jeDIyNzAyX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewogCXU4IGI7CkBAIC01NjIsNiArNjQzLDE2IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKK3N0YXRpYyBpbnQgY3h1c2JfYXZlcl9sZ2R0MzMwM19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLCAmY3h1c2JfYXZlcl9sZ2R0MzMwM19jb25maWcsCisJCQkgICAgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisJaWYgKGFkYXAtPmZlICE9IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKIHN0YXRpYyBpbnQgY3h1c2JfbXQzNTJfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJLyogdXNlZCBpbiBib3RoIGxnejIwMSBhbmQgdGg3NTc5ICovCkBAIC03MzYsNiArODI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9kdWFsZGlnNF9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX25hbm8yX3Byb3BlcnRpZXM7CiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfbmFubzJfbmVlZHNmaXJtd2FyZV9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2F2ZXJfYTg2OHJfcHJvcGVydGllczsKIAogc3RhdGljIGludCBjeHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTc1Niw3ICs4NDgsMTAgQEAKIAkJCQkgICAgIFRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAogCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwKIAkJCQkmY3h1c2JfYmx1ZWJpcmRfbmFubzJfbmVlZHNmaXJtd2FyZV9wcm9wZXJ0aWVzLAotCQkJCSAgICAgVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpKQorCQkJCSAgICAgVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpIHx8CisJICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmY3h1c2JfYXZlcl9hODY4cl9wcm9wZXJ0aWVzLAorCQkJCSAgICAgVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpIHx8CisJICAgIDApCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FSU5WQUw7CkBAIC03NzksNiArODc0LDcgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzQpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFZCX1RfTkFOT18yKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RWQl9UX05BTk9fMl9ORldfV0FSTSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BVkVSTUVESUEsIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSX0E4NjhSKSB9LAogCXt9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgY3h1c2JfdGFibGUpOwpAQCAtMTE4Miw2ICsxMjc4LDQ4IEBACiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2F2ZXJfYTg2OHJfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisKKwkudXNiX2N0cmwgICAgICAgICA9IENZUFJFU1NfRlgyLAorCisJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGN4dXNiX3N0YXRlKSwKKworCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CisJCQkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX2F2ZXJfc3RyZWFtaW5nX2N0cmwsCisJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX2F2ZXJfbGdkdDMzMDNfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9teGw1MDAzc190dW5lcl9hdHRhY2gsCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLmNvdW50ID0gNSwKKwkJCQkuZW5kcG9pbnQgPSAweDA0LAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gODE5MiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisKKwkJfSwKKwl9LAorCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfYXZlcl9wb3dlcl9jdHJsLAorCisJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7ICAgIkFWZXJNZWRpYSBBVmVyVFZIRCBWb2xhciAoQTg2OFIpIiwKKwkJCXsgTlVMTCB9LAorCQkJeyAmY3h1c2JfdGFibGVbMTZdLCBOVUxMIH0sCisJCX0sCisJfQorfTsKKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN4dXNiX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiZHZiX3VzYl9jeHVzYiIsCiAJLnByb2JlCQk9IGN4dXNiX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5oCmluZGV4IDQ3NjhhMmMuLjFhNTFlYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmgKQEAgLTIwLDYgKzIwLDkgQEAKICNkZWZpbmUgQ01EX1NUUkVBTUlOR19PTiAgMHgzNgogI2RlZmluZSBDTURfU1RSRUFNSU5HX09GRiAweDM3CiAKKyNkZWZpbmUgQ01EX0FWRVJfU1RSRUFNX09OICAweDE4CisjZGVmaW5lIENNRF9BVkVSX1NUUkVBTV9PRkYgMHgxOQorCiAjZGVmaW5lIENNRF9HRVRfSVJfQ09ERSAgIDB4NDcKIAogI2RlZmluZSBDTURfQU5BTE9HICAgICAgICAweDUwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCBjNGQ0MGZlLi4zZGQyMGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTExMTcsNiArMTExNyw3IEBACiAJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsCVVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9IVF9FWFBSRVNTKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLAlVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9YWFMpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfTEVBRFRFSywgICBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9TVEs3NzAwUF8yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0hBVVBQQVVHRSwgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9URF9TVElDS181MjAwOSkgfSwKIAl7IDAgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGliMDcwMF91c2JfaWRfdGFibGUpOwpAQCAtMTM3Miw3ICsxMzczLDcgQEAKIAkJCX0KIAkJfSwKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDIsCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMywKIAkJLmRldmljZXMgPSB7CiAJCQl7ICAgIkRpQmNvbSBTVEs3MDcwUEQgcmVmZXJlbmNlIGRlc2lnbiIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMTddLCBOVUxMIH0sCkBAIC0xMzgxLDYgKzEzODIsMTAgQEAKIAkJCXsgICAiUGlubmFjbGUgUENUViBEdWFsIERWQi1UIERpdmVyc2l0eSBTdGljayIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMThdLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJIYXVwcGF1Z2UgTm92YS1URCBTdGljayAoNTIwMDkpIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszNV0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKIAkJCX0KIAkJfQogCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWkyYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWkyYy5jCmluZGV4IDIzNDI4Y2QuLjMyNmY3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaTJjLmMKQEAgLTIwLDExICsyMCw3IEBACiAJfQogCiAJc3RybmNweShkLT5pMmNfYWRhcC5uYW1lLCBkLT5kZXNjLT5uYW1lLCBzaXplb2YoZC0+aTJjX2FkYXAubmFtZSkpOwotI2lmZGVmIEkyQ19BREFQX0NMQVNTX1RWX0RJR0lUQUwKLQlkLT5pMmNfYWRhcC5jbGFzcyA9IEkyQ19BREFQX0NMQVNTX1RWX0RJR0lUQUwsCi0jZWxzZQogCWQtPmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUwsCi0jZW5kaWYKIAlkLT5pMmNfYWRhcC5hbGdvICAgICAgPSBkLT5wcm9wcy5pMmNfYWxnbzsKIAlkLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBOVUxMOwogCWQtPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmZC0+dWRldi0+ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IDM0MjQ1ZDEuLmU1MjM4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNkZWZpbmUgVVNCX1ZJRF9BRkFURUNICQkJCTB4MTVhNAogI2RlZmluZSBVU0JfVklEX0FMQ09SX01JQ1JPCQkJMHgwNThmCiAjZGVmaW5lIFVTQl9WSURfQUxJTksJCQkJMHgwNWUzCisjZGVmaW5lIFVTQl9WSURfQU1UCQkJCTB4MWM3MwogI2RlZmluZSBVU0JfVklEX0FOQ0hPUgkJCQkweDA1NDcKICNkZWZpbmUgVVNCX1ZJRF9BTlNPTklDCQkJCTB4MTBiOQogI2RlZmluZSBVU0JfVklEX0FOVUJJU19FTEVDVFJPTklDCQkweDEwZmQKQEAgLTU3LDYgKzU4LDcgQEAKICNkZWZpbmUgVVNCX1BJRF9BRkFURUNIX0FGOTAwNQkJCQkweDkwMjAKICNkZWZpbmUgVVNCX1ZJRF9BTElOS19EVFUJCQkJMHhmMTcwCiAjZGVmaW5lIFVTQl9QSURfQU5TT05JQ19EVkJUX1VTQgkJCTB4NjAwMAorI2RlZmluZSBVU0JfUElEX0FOWVNFRQkJCQkJMHg4NjFmCiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0RWQlRfVVNCX0NPTEQJCQkweDAwMDEKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfRFZCVF9VU0JfV0FSTQkJCTB4MDAwMgogI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9EVkJUX1VTQjJfQ09MRAkJMHhhODAwCkBAIC0xMzIsOSArMTM0LDE1IEBACiAjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVF9TVElDS18zCQkweDcwNzAKICNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfTVlUVl9UCQkJMHg3MDgwCiAjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVERfU1RJQ0sJCQkweDk1ODAKKyNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9URF9TVElDS181MjAwOQkJMHg1MjAwCiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0VYUFJFU1MJCQkweGI1NjgKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVIJCQkJMHhhODA3CiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSXzIJCQkweGI4MDgKKyNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVJfQTg2OFIJCQkweGE4NjgKKyNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfTUNFX1VTQl9NMDM4CQkJMHgxMjI4CisjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0hZQlJJRF9VTFRSQV9VU0JfTTAzOVIJMHgwMDM5CisjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0hZQlJJRF9VTFRSQV9VU0JfTTAzOVJfQVRTQwkweDEwMzkKKyNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfSFlCUklEX1VMVFJBX1VTQl9NMDM5Ul9EVkJUCTB4MjAzOQogI2RlZmluZSBVU0JfUElEX1RFQ0hOT1RSRU5EX0NPTk5FQ1RfUzI0MDAgICAgICAgICAgICAgICAweDMwMDYKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX0RUX1hTX0RJVkVSU0lUWQkweDAwNWEKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX0hUX1VTQl9YRQkJMHgwMDU4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dsODYxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dsODYxLmMKaW5kZXggMDM3ZjdmZi4uNmY1OTZlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9nbDg2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ2w4NjEuYwpAQCAtMSw4ICsxLDggQEAKIC8qIERWQiBVU0IgY29tcGxpYW50IGxpbnV4IGRyaXZlciBmb3IgR0w4NjEgVVNCMi4wIGRldmljZXMuCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKglTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgogICoKICAqIHNlZSBEb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICovCkBAIC0xMyw5ICsxMyw5IEBACiAKIC8qIGRlYnVnICovCiBzdGF0aWMgaW50IGR2Yl91c2JfZ2w4NjFfZGVidWc7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsZHZiX3VzYl9nbDg2MV9kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPXJjIChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7Ci0KK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9nbDg2MV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPXJjIChvci1hYmxlKSkuIgorCURWQl9VU0JfREVCVUdfU1RBVFVTKTsKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCiBzdGF0aWMgaW50IGdsODYxX2kyY19tc2coc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCBhZGRyLApAQCAtNzAsNyArNzAsNyBAQAogCQkvKiB3cml0ZS9yZWFkIHJlcXVlc3QgKi8KIAkJaWYgKGkrMSA8IG51bSAmJiAobXNnW2krMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKIAkJCWlmIChnbDg2MV9pMmNfbXNnKGQsIG1zZ1tpXS5hZGRyLCBtc2dbaV0uYnVmLAotCQkJCQkgIG1zZ1tpXS5sZW4sIG1zZ1tpKzFdLmJ1ZiwgbXNnW2krMV0ubGVuKSA8IDApCisJCQkJbXNnW2ldLmxlbiwgbXNnW2krMV0uYnVmLCBtc2dbaSsxXS5sZW4pIDwgMCkKIAkJCQlicmVhazsKIAkJCWkrKzsKIAkJfSBlbHNlCkBAIC0xMDIsMTIgKzEwMiwxMyBAQAogCiBzdGF0aWMgaW50IGdsODYxX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLCAmZ2w4NjFfemwxMDM1M19jb25maWcsCi0JCQkJICAgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKSB7Ci0JCXJldHVybiAwOwotCX0KIAotCXJldHVybiAtRUlPOworCWFkYXAtPmZlID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwgJmdsODYxX3psMTAzNTNfY29uZmlnLAorCQkmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisJaWYgKGFkYXAtPmZlID09IE5VTEwpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcXQxMDEwX2NvbmZpZyBnbDg2MV9xdDEwMTBfY29uZmlnID0gewpAQCAtMTU2LDcgKzE1Nyw3IEBACiAJCXsgVVNCX0RFVklDRShVU0JfVklEX0FMSU5LLCBVU0JfVklEX0FMSU5LX0RUVSkgfSwKIAkJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgZ2w4NjFfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGdsODYxX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGdsODYxX3Byb3BlcnRpZXMgPSB7CiAJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLApAQCAtMTgwLDcgKzE4MSw3IEBACiAJCQkJfQogCQkJfQogCQl9LAotCX19LAorCX0gfSwKIAkuaTJjX2FsZ28gICAgICAgICA9ICZnbDg2MV9pMmNfYWxnbywKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKQEAgLTIxMCwxMiArMjExLDExIEBACiB7CiAJaW50IHJldDsKIAotCWlmICgocmV0ID0gdXNiX3JlZ2lzdGVyKCZnbDg2MV9kcml2ZXIpKSkgeworCXJldCA9IHVzYl9yZWdpc3RlcigmZ2w4NjFfZHJpdmVyKTsKKwlpZiAocmV0KQogCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdsODYxX21vZHVsZV9leGl0KHZvaWQpCkBAIC0yMjQsOCArMjI0LDggQEAKIAl1c2JfZGVyZWdpc3RlcigmZ2w4NjFfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQgKGdsODYxX21vZHVsZV9pbml0KTsKLW1vZHVsZV9leGl0IChnbDg2MV9tb2R1bGVfZXhpdCk7Cittb2R1bGVfaW5pdChnbDg2MV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChnbDg2MV9tb2R1bGVfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkNhcmwgTHVuZHF2aXN0IDxjb21hYnVnQGdtYWlsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIE1TSSBNZWdhIFNreSA1ODAgRFZCLVQgVVNCMi4wIC8gR0w4NjEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ2w4NjEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ2w4NjEuaAppbmRleCA3MmE1MWFmLi5jNTQ4NTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dsODYxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9nbDg2MS5oCkBAIC00LDcgKzQsNyBAQAogI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImdsODYxIgogI2luY2x1ZGUgImR2Yi11c2IuaCIKIAotI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfZ2w4NjFfZGVidWcsMHgwMSxhcmdzKQorI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfZ2w4NjFfZGVidWcsIDB4MDEsIGFyZ3MpCiAKICNkZWZpbmUgR0w4NjFfV1JJVEUJCTB4NDAKICNkZWZpbmUgR0w4NjFfUkVBRAkJMHhjMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5jCmluZGV4IDAzOTAwZDIuLmY3YjcxNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKLSNpbmNsdWRlICJkdmItcGxsLmgiCiAjaW5jbHVkZSAiYXU4NTIyLmgiCiAKIHN0cnVjdCBhdTg1MjJfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKaW5kZXggYTA1NDg5NC4uZWEwNTgxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCkBAIC0zNDMsNiArMzQzLDUyIEBACiAJfQogfTsKIAorc3RhdGljIHZvaWQgc2Ftc3VuZ19kdG9zNDAzaWgxMDJhX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggKmJ1ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBkdmJfcGxsX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gcHJpdi0+cGxsX2kyY19hZGRyZXNzLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gYnVmLAorCQkubGVuID0gNAorCX07CisJaW50IHJlc3VsdDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyZXN1bHQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnLCAxKTsKKwlpZiAocmVzdWx0ICE9IDEpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyY190cmFuc2ZlciBmYWlsZWQ6JWQiLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CisKKwlidWZbMl0gPSAweDllOworCWJ1ZlszXSA9IDB4OTA7CisKKwlyZXR1cm47Cit9CisKKy8qIHVua25vd24gcGxsIHVzZWQgaW4gU2Ftc3VuZyBEVE9TNDAzSUgxMDJBIERWQi1DIHR1bmVyICovCitzdGF0aWMgc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3NhbXN1bmdfZHRvczQwM2loMTAyYSA9IHsKKwkubmFtZSAgID0gIlNhbXN1bmcgRFRPUzQwM0lIMTAyQSIsCisJLm1pbiAgICA9ICA0NDI1MDAwMCwKKwkubWF4ICAgID0gODU4MDAwMDAwLAorCS5pZmZyZXEgPSAgMzYxMjUwMDAsCisJLmNvdW50ICA9IDgsCisJLnNldCAgICA9IHNhbXN1bmdfZHRvczQwM2loMTAyYV9zZXQsCisJLmVudHJpZXMgPSB7CisJCXsgMTM1MDAwMDAwLCA2MjUwMCwgMHhiZSwgMHgwMSB9LAorCQl7IDE3NzAwMDAwMCwgNjI1MDAsIDB4ZjYsIDB4MDEgfSwKKwkJeyAzNzAwMDAwMDAsIDYyNTAwLCAweGJlLCAweDAyIH0sCisJCXsgNDUwMDAwMDAwLCA2MjUwMCwgMHhmNiwgMHgwMiB9LAorCQl7IDQ2NjAwMDAwMCwgNjI1MDAsIDB4ZmUsIDB4MDIgfSwKKwkJeyA1MzgwMDAwMDAsIDYyNTAwLCAweGJlLCAweDA4IH0sCisJCXsgODI2MDAwMDAwLCA2MjUwMCwgMHhmNiwgMHgwOCB9LAorCQl7IDk5OTk5OTk5OSwgNjI1MDAsIDB4ZmUsIDB4MDggfSwKKwl9Cit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IGR2Yl9wbGxfZGVzYyAqcGxsX2xpc3RbXSA9IHsKQEAgLTM2MCw2ICs0MDYsNyBAQAogCVtEVkJfUExMX1NBTVNVTkdfVEJNVl0gICAgICAgICAgID0gJmR2Yl9wbGxfc2Ftc3VuZ190Ym12LAogCVtEVkJfUExMX1BISUxJUFNfU0QxODc4X1REQTgyNjFdID0gJmR2Yl9wbGxfcGhpbGlwc19zZDE4NzhfdGRhODI2MSwKIAlbRFZCX1BMTF9PUEVSQTFdICAgICAgICAgICAgICAgICA9ICZkdmJfcGxsX29wZXJhMSwKKwlbRFZCX1BMTF9TQU1TVU5HX0RUT1M0MDNJSDEwMkFdICA9ICZkdmJfcGxsX3NhbXN1bmdfZHRvczQwM2loMTAyYSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaAppbmRleCA4NzJjYTI5Li4wNTIzOWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgRFZCX1BMTF9TQU1TVU5HX1RCTVYgICAgICAgICAgIDExCiAjZGVmaW5lIERWQl9QTExfUEhJTElQU19TRDE4NzhfVERBODI2MSAxMgogI2RlZmluZSBEVkJfUExMX09QRVJBMSAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRFZCX1BMTF9TQU1TVU5HX0RUT1M0MDNJSDEwMkEgIDE0CiAKIC8qKgogICogQXR0YWNoIGEgZHZiLXBsbCB0byB0aGUgc3VwcGxpZWQgZnJvbnRlbmQgc3RydWN0dXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYwppbmRleCBmMDE5NWM4Li4wNTYzODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYwpAQCAtMjI2LDExICsyMjYsMTYgQEAKIAkJMHg0YywgMHgxNAogCX07CiAKLQlzdGF0aWMgdTggZmxpcF9sZ2R0MzMwM19pbml0X2RhdGFbXSA9IHsKKwlzdGF0aWMgdTggZmxpcF8xX2xnZHQzMzAzX2luaXRfZGF0YVtdID0gewogCQkweDRjLCAweDE0LAogCQkweDg3LCAweGYzCiAJfTsKIAorCXN0YXRpYyB1OCBmbGlwXzJfbGdkdDMzMDNfaW5pdF9kYXRhW10gPSB7CisJCTB4NGMsIDB4MTQsCisJCTB4ODcsIDB4ZGEKKwl9OworCiAJc3RydWN0IGxnZHQzMzB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWNoYXIgICpjaGlwX25hbWU7CiAJaW50ICAgIGVycjsKQEAgLTI0MywxMCArMjQ4LDE5IEBACiAJCWJyZWFrOwogCWNhc2UgTEdEVDMzMDM6CiAJCWNoaXBfbmFtZSA9ICJMR0RUMzMwMyI7Ci0JCWlmIChzdGF0ZS0+Y29uZmlnLT5jbG9ja19wb2xhcml0eV9mbGlwKSB7Ci0JCQllcnIgPSBpMmNfd3JpdGVfZGVtb2RfYnl0ZXMoc3RhdGUsIGZsaXBfbGdkdDMzMDNfaW5pdF9kYXRhLAotCQkJCQkJICAgIHNpemVvZihmbGlwX2xnZHQzMzAzX2luaXRfZGF0YSkpOwotCQl9IGVsc2UgeworCQlzd2l0Y2ggKHN0YXRlLT5jb25maWctPmNsb2NrX3BvbGFyaXR5X2ZsaXApIHsKKwkJY2FzZSAyOgorCQkJZXJyID0gaTJjX3dyaXRlX2RlbW9kX2J5dGVzKHN0YXRlLAorCQkJCQlmbGlwXzJfbGdkdDMzMDNfaW5pdF9kYXRhLAorCQkJCQlzaXplb2YoZmxpcF8yX2xnZHQzMzAzX2luaXRfZGF0YSkpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWVyciA9IGkyY193cml0ZV9kZW1vZF9ieXRlcyhzdGF0ZSwKKwkJCQkJZmxpcF8xX2xnZHQzMzAzX2luaXRfZGF0YSwKKwkJCQkJc2l6ZW9mKGZsaXBfMV9sZ2R0MzMwM19pbml0X2RhdGEpKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCWRlZmF1bHQ6CiAJCQllcnIgPSBpMmNfd3JpdGVfZGVtb2RfYnl0ZXMoc3RhdGUsIGxnZHQzMzAzX2luaXRfZGF0YSwKIAkJCQkJCSAgICBzaXplb2YobGdkdDMzMDNfaW5pdF9kYXRhKSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5jCmluZGV4IGI5OTllYzQuLjVkZGIyZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgotI2luY2x1ZGUgImR2Yi1wbGwuaCIKICNpbmNsdWRlICJzNWgxNDA5LmgiCiAKIHN0cnVjdCBzNWgxNDA5X3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5jCmluZGV4IGViNWJmYzkuLmNmZjM2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgotI2luY2x1ZGUgImR2Yi1wbGwuaCIKICNpbmNsdWRlICJzNWgxNDExLmgiCiAKIHN0cnVjdCBzNWgxNDExX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIzLmMKaW5kZXggYzZmZjViOC4uYTNjMzRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIzLmMKQEAgLTM4LDc1ICszOCwyOSBAQAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgInRkYTEwMDJ4LmgiCiAKKyNkZWZpbmUgUkVHMF9JTklUX1ZBTCAweDIzCiAKIHN0cnVjdCB0ZGExMDAyM19zdGF0ZSB7CiAJc3RydWN0IGkyY19hZGFwdGVyKiBpMmM7CiAJLyogY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLwotCWNvbnN0IHN0cnVjdCB0ZGExMDAyeF9jb25maWcqIGNvbmZpZzsKKwljb25zdCBzdHJ1Y3QgdGRhMTAwMjNfY29uZmlnICpjb25maWc7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIAogCXU4IHB3bTsKIAl1OCByZWcwOwotfTsKIAorCS8qIGNsb2NrIHNldHRpbmdzICovCisJdTMyIHh0YWw7CisJdTggcGxsX207CisJdTggcGxsX3A7CisJdTggcGxsX247CisJdTMyIHN5c2NsazsKK307CiAKICNkZWZpbmUgZHByaW50ayh4Li4uKQogCiBzdGF0aWMgaW50IHZlcmJvc2U7CiAKLSNkZWZpbmUgWFRBTCAgIDI4OTIwMDAwVUwKLSNkZWZpbmUgUExMX00gIDhVTAotI2RlZmluZSBQTExfUCAgNFVMCi0jZGVmaW5lIFBMTF9OICAxVUwKLSNkZWZpbmUgU1lTQ0xLIChYVEFMKlBMTF9NLyhQTExfTipQTExfUCkpICAvLyAtPiA1Nzg0MDAwMAotCi1zdGF0aWMgdTggdGRhMTAwMjNfaW5pdHRhYltdPXsKLQkvLyByZWcgbWFzayB2YWwKLQkweDJhLDB4ZmYsMHgwMiwgIC8vIFBMTDMsIEJ5cGFzcywgUG93ZXIgRG93bgotCTB4ZmYsMHg2NCwweDAwLCAgLy8gU2xlZXAgMTAwbXMKLQkweDJhLDB4ZmYsMHgwMywgIC8vIFBMTDMsIEJ5cGFzcywgUG93ZXIgRG93bgotCTB4ZmYsMHg2NCwweDAwLCAgLy8gU2xlZXAgMTAwbXMKLQkweDI4LDB4ZmYsUExMX00tMSwgIC8vIFBMTDEgTT04Ci0JMHgyOSwweGZmLCgoUExMX1AtMSk8PDYpfChQTExfTi0xKSwgIC8vIFBMTDIKLQkweDAwLDB4ZmYsMHgyMywgIC8vIEdQUiBGU0FNUExJTkc9MQotCTB4MmEsMHhmZiwweDA4LCAgLy8gUExMMyBQU0FDTEs9MQotCTB4ZmYsMHg2NCwweDAwLCAgLy8gU2xlZXAgMTAwbXMKLQkweDFmLDB4ZmYsMHgwMCwgIC8vIFJFU0VUCi0JMHhmZiwweDY0LDB4MDAsICAvLyBTbGVlcCAxMDBtcwotCTB4ZTYsMHgwYywweDA0LCAgLy8gUlNDRkdfSU5ECi0JMHgxMCwweGMwLDB4ODAsICAvLyBERUNEVkJDRkcxIFBCRVI9MQotCi0JMHgwZSwweGZmLDB4ODIsICAvLyBHQUlOMQotCTB4MDMsMHgwOCwweDA4LCAgLy8gQ0xLQ09ORiBEWU49MQotCTB4MmUsMHhiZiwweDMwLCAgLy8gQUdDQ09ORjIgVFJJQUdDPTAsUE9TQUdDPUVOQUdDSUY9MSBQUFdNVFVOPTAgUFBXTUlGPTAKLQkweDAxLDB4ZmYsMHgzMCwgIC8vIEFHQ1JFRgotCTB4MWUsMHg4NCwweDg0LCAgLy8gQ09OVFJPTCBTQUNMS19PTj0xCi0JMHgxYiwweGZmLDB4YzgsICAvLyBBREMgVFdPUz0xCi0JMHgzYiwweGZmLDB4ZmYsICAvLyBJRk1BWAotCTB4M2MsMHhmZiwweDAwLCAgLy8gSUZNSU4KLQkweDM0LDB4ZmYsMHgwMCwgIC8vIFBXTVJFRgotCTB4MzUsMHhmZiwweGZmLCAgLy8gVFVOTUFYCi0JMHgzNiwweGZmLDB4MDAsICAvLyBUVU5NSU4KLQkweDA2LDB4ZmYsMHg3ZiwgIC8vIEVRQ09ORjEgUE9TST03IEVOQURBUFQ9RU5FUVVBTD1ERkU9MSAgICAvLyAweDc3Ci0JMHgxYywweDMwLDB4MzAsICAvLyBFUUNPTkYyIFNURVBBTEdPPVNHTkFMR089MQotCTB4MzcsMHhmZiwweGY2LCAgLy8gREVMVEFGX0xTQgotCTB4MzgsMHhmZiwweGZmLCAgLy8gREVMVEFGX01TQgotCTB4MDIsMHhmZiwweDkzLCAgLy8gQUdDQ09ORjEgIElGUz0xIEtBR0NJRj0yIEtBR0NUVU49MwotCTB4MmQsMHhmZiwweGY2LCAgLy8gU1dFRVAgU1dQT1M9MSBTV0RZTj03IFNXU1RFUD0xIFNXTEVOPTIKLQkweDA0LDB4MTAsMHgwMCwgICAvLyBTV1JBTVA9MQotCTB4MTIsMHhmZiwweGExLCAgLy8gSU5UUDEgUE9DTEtQPTEgRkVMPTEgTUZTPTAKLQkweDJiLDB4MDEsMHhhMSwgIC8vIElOVFMxCi0JMHgyMCwweGZmLDB4MDQsICAvLyBJTlRQMiBTV0FQUD0/IE1TQkZJUlNUUD0/IElOVFBTRUw9PwotCTB4MmMsMHhmZiwweDBkLCAgLy8gSU5UUC9TIFRSSVA9MCBUUklTPTAKLQkweGM0LDB4ZmYsMHgwMCwKLQkweGMzLDB4MzAsMHgwMCwKLQkweGI1LDB4ZmYsMHgxOSwgIC8vIEVSQUdDX1RIRAotCTB4MDAsMHgwMywweDAxLCAgLy8gR1BSLCBDTEJTIHNvZnQgcmVzZXQKLQkweDAwLDB4MDMsMHgwMywgIC8vIEdQUiwgQ0xCUyBzb2Z0IHJlc2V0Ci0JMHhmZiwweDY0LDB4MDAsICAvLyBTbGVlcCAxMDBtcwotCTB4ZmYsMHhmZiwweGZmCi19OwotCiBzdGF0aWMgdTggdGRhMTAwMjNfcmVhZHJlZyAoc3RydWN0IHRkYTEwMDIzX3N0YXRlKiBzdGF0ZSwgdTggcmVnKQogewogCXU4IGIwIFtdID0geyByZWcgfTsKQEAgLTIxOSwzMCArMTczLDM0IEBACiAJczE2IFNGSUw9MDsKIAl1MTYgTkRFQyA9IDA7CiAKLQlpZiAoc3IgPCAodTMyKShTWVNDTEsvOTguNDApKSB7CisJLyogYXZvaWQgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBtdWx0aXBseWluZyBzeXNjbG9jIGFuZCBkaXZpZGVyCisJICAgYnkgMTAgKi8KKwl1MzIgc3lzY2xrX3hfMTAgPSBzdGF0ZS0+c3lzY2xrICogMTA7CisKKwlpZiAoc3IgPCAodTMyKShzeXNjbGtfeF8xMC85ODQpKSB7CiAJCU5ERUM9MzsKIAkJU0ZJTD0xOwotCX0gZWxzZSBpZiAoc3I8KHUzMikoU1lTQ0xLLzY0LjApKSB7CisJfSBlbHNlIGlmIChzciA8ICh1MzIpKHN5c2Nsa194XzEwLzY0MCkpIHsKIAkJTkRFQz0zOwogCQlTRklMPTA7Ci0JfSBlbHNlIGlmIChzcjwodTMyKShTWVNDTEsvNDkuMikpIHsKKwl9IGVsc2UgaWYgKHNyIDwgKHUzMikoc3lzY2xrX3hfMTAvNDkyKSkgewogCQlOREVDPTI7CiAJCVNGSUw9MTsKLQl9IGVsc2UgaWYgKHNyPCh1MzIpKFNZU0NMSy8zMi4wKSkgeworCX0gZWxzZSBpZiAoc3IgPCAodTMyKShzeXNjbGtfeF8xMC8zMjApKSB7CiAJCU5ERUM9MjsKIAkJU0ZJTD0wOwotCX0gZWxzZSBpZiAoc3I8KHUzMikoU1lTQ0xLLzI0LjYpKSB7CisJfSBlbHNlIGlmIChzciA8ICh1MzIpKHN5c2Nsa194XzEwLzI0NikpIHsKIAkJTkRFQz0xOwogCQlTRklMPTE7Ci0JfSBlbHNlIGlmIChzcjwodTMyKShTWVNDTEsvMTYuMCkpIHsKKwl9IGVsc2UgaWYgKHNyIDwgKHUzMikoc3lzY2xrX3hfMTAvMTYwKSkgewogCQlOREVDPTE7CiAJCVNGSUw9MDsKLQl9IGVsc2UgaWYgKHNyPCh1MzIpKFNZU0NMSy8xMi4zKSkgeworCX0gZWxzZSBpZiAoc3IgPCAodTMyKShzeXNjbGtfeF8xMC8xMjMpKSB7CiAJCU5ERUM9MDsKIAkJU0ZJTD0xOwogCX0KIAotCUJEUkk9U1lTQ0xLKjE2OworCUJEUkkgPSAoc3RhdGUtPnN5c2NsaykqMTY7CiAJQkRSST4+PU5ERUM7CiAJQkRSSSArPXNyLzI7CiAJQkRSSSAvPXNyOwpAQCAtMjU1LDExICsyMTMsMTIgQEAKIAogCQlCRFJYPTE8PCgyNCtOREVDKTsKIAkJQkRSWCo9c3I7Ci0JCWRvX2RpdihCRFJYLFNZU0NMSyk7IAkvLyBCRFJYLz1TWVNDTEs7CisJCWRvX2RpdihCRFJYLCBzdGF0ZS0+c3lzY2xrKTsgCS8qIEJEUlgvPVNZU0NMSzsgKi8KIAogCQlCRFI9KHMzMilCRFJYOwogCX0KLS8vCXByaW50aygiU3ltYm9scmF0ZSAlaSwgQkRSICVpIEJEUkkgJWksIE5ERUMgJWlcbiIsc3IsQkRSLEJEUkksTkRFQyk7CisJZHByaW50aygiU3ltYm9scmF0ZSAlaSwgQkRSICVpIEJEUkkgJWksIE5ERUMgJWlcbiIsCisJCXNyLCBCRFIsIEJEUkksIE5ERUMpOwogCXRkYTEwMDIzX3dyaXRlYml0IChzdGF0ZSwgMHgwMywgMHhjMCwgTkRFQzw8Nik7CiAJdGRhMTAwMjNfd3JpdGVyZWcgKHN0YXRlLCAweDBhLCBCRFImMjU1KTsKIAl0ZGExMDAyM193cml0ZXJlZyAoc3RhdGUsIDB4MGIsIChCRFI+PjgpJjI1NSk7CkBAIC0yNzIsOCArMjMxLDY3IEBACiBzdGF0aWMgaW50IHRkYTEwMDIzX2luaXQgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCB0ZGExMDAyM19zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCB0ZGExMDAyM19pbml0dGFiW10gPSB7CisvKiAgICAgICAgcmVnICBtYXNrIHZhbCAqLworLyogMDAwICovIDB4MmEsIDB4ZmYsIDB4MDIsICAvKiBQTEwzLCBCeXBhc3MsIFBvd2VyIERvd24gKi8KKy8qIDAwMyAqLyAweGZmLCAweDY0LCAweDAwLCAgLyogU2xlZXAgMTAwbXMgKi8KKy8qIDAwNiAqLyAweDJhLCAweGZmLCAweDAzLCAgLyogUExMMywgQnlwYXNzLCBQb3dlciBEb3duICovCisvKiAwMDkgKi8gMHhmZiwgMHg2NCwgMHgwMCwgIC8qIFNsZWVwIDEwMG1zICovCisJCQkgICAvKiBQTEwxICovCisvKiAwMTIgKi8gMHgyOCwgMHhmZiwgKHN0YXRlLT5wbGxfbS0xKSwKKwkJCSAgIC8qIFBMTDIgKi8KKy8qIDAxNSAqLyAweDI5LCAweGZmLCAoKHN0YXRlLT5wbGxfcC0xKTw8Nil8KHN0YXRlLT5wbGxfbi0xKSwKKwkJCSAgIC8qIEdQUiBGU0FNUExJTkc9MSAqLworLyogMDE4ICovIDB4MDAsIDB4ZmYsIFJFRzBfSU5JVF9WQUwsCisvKiAwMjEgKi8gMHgyYSwgMHhmZiwgMHgwOCwgIC8qIFBMTDMgUFNBQ0xLPTEgKi8KKy8qIDAyNCAqLyAweGZmLCAweDY0LCAweDAwLCAgLyogU2xlZXAgMTAwbXMgKi8KKy8qIDAyNyAqLyAweDFmLCAweGZmLCAweDAwLCAgLyogUkVTRVQgKi8KKy8qIDAzMCAqLyAweGZmLCAweDY0LCAweDAwLCAgLyogU2xlZXAgMTAwbXMgKi8KKy8qIDAzMyAqLyAweGU2LCAweDBjLCAweDA0LCAgLyogUlNDRkdfSU5EICovCisvKiAwMzYgKi8gMHgxMCwgMHhjMCwgMHg4MCwgIC8qIERFQ0RWQkNGRzEgUEJFUj0xICovCiAKLQlkcHJpbnRrKCJEVkI6IFREQTEwMDIzKCVkKTogaW5pdCBjaGlwXG4iLCBmZS0+YWRhcHRlci0+bnVtKTsKKy8qIDAzOSAqLyAweDBlLCAweGZmLCAweDgyLCAgLyogR0FJTjEgKi8KKy8qIDA0MiAqLyAweDAzLCAweDA4LCAweDA4LCAgLyogQ0xLQ09ORiBEWU49MSAqLworLyogMDQ1ICovIDB4MmUsIDB4YmYsIDB4MzAsICAvKiBBR0NDT05GMiBUUklBR0M9MCxQT1NBR0M9RU5BR0NJRj0xCisJCQkJICAgICAgIFBQV01UVU49MCBQUFdNSUY9MCAqLworLyogMDQ4ICovIDB4MDEsIDB4ZmYsIDB4MzAsICAvKiBBR0NSRUYgKi8KKy8qIDA1MSAqLyAweDFlLCAweDg0LCAweDg0LCAgLyogQ09OVFJPTCBTQUNMS19PTj0xICovCisvKiAwNTQgKi8gMHgxYiwgMHhmZiwgMHhjOCwgIC8qIEFEQyBUV09TPTEgKi8KKy8qIDA1NyAqLyAweDNiLCAweGZmLCAweGZmLCAgLyogSUZNQVggKi8KKy8qIDA2MCAqLyAweDNjLCAweGZmLCAweDAwLCAgLyogSUZNSU4gKi8KKy8qIDA2MyAqLyAweDM0LCAweGZmLCAweDAwLCAgLyogUFdNUkVGICovCisvKiAwNjYgKi8gMHgzNSwgMHhmZiwgMHhmZiwgIC8qIFRVTk1BWCAqLworLyogMDY5ICovIDB4MzYsIDB4ZmYsIDB4MDAsICAvKiBUVU5NSU4gKi8KKy8qIDA3MiAqLyAweDA2LCAweGZmLCAweDdmLCAgLyogRVFDT05GMSBQT1NJPTcgRU5BREFQVD1FTkVRVUFMPURGRT0xICovCisvKiAwNzUgKi8gMHgxYywgMHgzMCwgMHgzMCwgIC8qIEVRQ09ORjIgU1RFUEFMR089U0dOQUxHTz0xICovCisvKiAwNzggKi8gMHgzNywgMHhmZiwgMHhmNiwgIC8qIERFTFRBRl9MU0IgKi8KKy8qIDA4MSAqLyAweDM4LCAweGZmLCAweGZmLCAgLyogREVMVEFGX01TQiAqLworLyogMDg0ICovIDB4MDIsIDB4ZmYsIDB4OTMsICAvKiBBR0NDT05GMSAgSUZTPTEgS0FHQ0lGPTIgS0FHQ1RVTj0zICovCisvKiAwODcgKi8gMHgyZCwgMHhmZiwgMHhmNiwgIC8qIFNXRUVQIFNXUE9TPTEgU1dEWU49NyBTV1NURVA9MSBTV0xFTj0yICovCisvKiAwOTAgKi8gMHgwNCwgMHgxMCwgMHgwMCwgIC8qIFNXUkFNUD0xICovCisvKiAwOTMgKi8gMHgxMiwgMHhmZiwgVERBMTAwMjNfT1VUUFVUX01PREVfUEFSQUxMRUxfQiwgLyoKKwkJCQlJTlRQMSBQT0NMS1A9MSBGRUw9MSBNRlM9MCAqLworLyogMDk2ICovIDB4MmIsIDB4MDEsIDB4YTEsICAvKiBJTlRTMSAqLworLyogMDk5ICovIDB4MjAsIDB4ZmYsIDB4MDQsICAvKiBJTlRQMiBTV0FQUD0/IE1TQkZJUlNUUD0/IElOVFBTRUw9PyAqLworLyogMTAyICovIDB4MmMsIDB4ZmYsIDB4MGQsICAvKiBJTlRQL1MgVFJJUD0wIFRSSVM9MCAqLworLyogMTA1ICovIDB4YzQsIDB4ZmYsIDB4MDAsCisvKiAxMDggKi8gMHhjMywgMHgzMCwgMHgwMCwKKy8qIDExMSAqLyAweGI1LCAweGZmLCAweDE5LCAgLyogRVJBR0NfVEhEICovCisvKiAxMTQgKi8gMHgwMCwgMHgwMywgMHgwMSwgIC8qIEdQUiwgQ0xCUyBzb2Z0IHJlc2V0ICovCisvKiAxMTcgKi8gMHgwMCwgMHgwMywgMHgwMywgIC8qIEdQUiwgQ0xCUyBzb2Z0IHJlc2V0ICovCisvKiAxMjAgKi8gMHhmZiwgMHg2NCwgMHgwMCwgIC8qIFNsZWVwIDEwMG1zICovCisvKiAxMjMgKi8gMHhmZiwgMHhmZiwgMHhmZgorfTsKKwlkcHJpbnRrKCJEVkI6IFREQTEwMDIzKCVkKTogaW5pdCBjaGlwXG4iLCBmZS0+ZHZiLT5udW0pOworCisJLyogb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZXMgaWYgc2V0IGluIGNvbmZpZyAqLworCWlmIChzdGF0ZS0+Y29uZmlnLT5kZWx0YWYpIHsKKwkJdGRhMTAwMjNfaW5pdHRhYls4MF0gPSAoc3RhdGUtPmNvbmZpZy0+ZGVsdGFmICYgMHhmZik7CisJCXRkYTEwMDIzX2luaXR0YWJbODNdID0gKHN0YXRlLT5jb25maWctPmRlbHRhZiA+PiA4KTsKKwl9CisKKwlpZiAoc3RhdGUtPmNvbmZpZy0+b3V0cHV0X21vZGUpCisJCXRkYTEwMDIzX2luaXR0YWJbOTVdID0gc3RhdGUtPmNvbmZpZy0+b3V0cHV0X21vZGU7CiAKIAl0ZGExMDAyM193cml0ZXRhYihzdGF0ZSwgdGRhMTAwMjNfaW5pdHRhYik7CiAKQEAgLTQ2MCwxMiArNDc4LDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyB0ZGExMDAyM19vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIHRkYTEwMDIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgdGRhMTAwMnhfY29uZmlnKiBjb25maWcsCi0JCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYywKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnRkYTEwMDIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgdGRhMTAwMjNfY29uZmlnICpjb25maWcsCisJCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKIAkJCQkgICAgIHU4IHB3bSkKIHsKIAlzdHJ1Y3QgdGRhMTAwMjNfc3RhdGUqIHN0YXRlID0gTlVMTDsKLQlpbnQgaTsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCiAJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGRhMTAwMjNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKQEAgLTQ3NCwyMiArNDkxLDQwIEBACiAJLyogc2V0dXAgdGhlIHN0YXRlICovCiAJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKIAlzdGF0ZS0+aTJjID0gaTJjOwotCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJnRkYTEwMDIzX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7Ci0Jc3RhdGUtPnB3bSA9IHB3bTsKLQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUodGRhMTAwMjNfaW5pdHRhYik7aSs9MykgewotCQlpZiAodGRhMTAwMjNfaW5pdHRhYltpXSA9PSAweDAwKSB7Ci0JCQlzdGF0ZS0+cmVnMCA9IHRkYTEwMDIzX2luaXR0YWJbaSsyXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQogCi0JLy8gV2FrZXVwIGlmIGluIHN0YW5kYnkKKwkvKiB3YWtldXAgaWYgaW4gc3RhbmRieSAqLwogCXRkYTEwMDIzX3dyaXRlcmVnIChzdGF0ZSwgMHgwMCwgMHgzMyk7CiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCiAJaWYgKCh0ZGExMDAyM19yZWFkcmVnKHN0YXRlLCAweDFhKSAmIDB4ZjApICE9IDB4NzApIGdvdG8gZXJyb3I7CiAKIAkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCiAJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmdGRhMTAwMjNfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzdGF0ZS0+cHdtID0gcHdtOworCXN0YXRlLT5yZWcwID0gUkVHMF9JTklUX1ZBTDsKKwlpZiAoc3RhdGUtPmNvbmZpZy0+eHRhbCkgeworCQlzdGF0ZS0+eHRhbCAgPSBzdGF0ZS0+Y29uZmlnLT54dGFsOworCQlzdGF0ZS0+cGxsX20gPSBzdGF0ZS0+Y29uZmlnLT5wbGxfbTsKKwkJc3RhdGUtPnBsbF9wID0gc3RhdGUtPmNvbmZpZy0+cGxsX3A7CisJCXN0YXRlLT5wbGxfbiA9IHN0YXRlLT5jb25maWctPnBsbF9uOworCX0gZWxzZSB7CisJCS8qIHNldCBkZWZhdWx0IHZhbHVlcyBpZiBub3QgZGVmaW5lZCBpbiBjb25maWcgKi8KKwkJc3RhdGUtPnh0YWwgID0gMjg5MjAwMDA7CisJCXN0YXRlLT5wbGxfbSA9IDg7CisJCXN0YXRlLT5wbGxfcCA9IDQ7CisJCXN0YXRlLT5wbGxfbiA9IDE7CisJfQorCisJLyogY2FsYyBzeXNjbGsgKi8KKwlzdGF0ZS0+c3lzY2xrID0gKHN0YXRlLT54dGFsICogc3RhdGUtPnBsbF9tIC8gXAorCQkJKHN0YXRlLT5wbGxfbiAqIHN0YXRlLT5wbGxfcCkpOworCisJc3RhdGUtPmZyb250ZW5kLm9wcy5pbmZvLnN5bWJvbF9yYXRlX21pbiA9IChzdGF0ZS0+c3lzY2xrLzIpLzY0OworCXN0YXRlLT5mcm9udGVuZC5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXggPSAoc3RhdGUtPnN5c2Nsay8yKS80OworCisJZHByaW50aygiRFZCOiBUREExMDAyMyAlczogeHRhbDolZCBwbGxfbTolZCBwbGxfcDolZCBwbGxfbjolZFxuIiwKKwkJX19mdW5jX18sIHN0YXRlLT54dGFsLCBzdGF0ZS0+cGxsX20sIHN0YXRlLT5wbGxfcCwKKwkJc3RhdGUtPnBsbF9uKTsKKwogCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKQEAgLTUwNCwxMCArNTM5LDEwIEBACiAJCS5uYW1lID0gIlBoaWxpcHMgVERBMTAwMjMgRFZCLUMiLAogCQkudHlwZSA9IEZFX1FBTSwKIAkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDYyNTAwLAotCQkuZnJlcXVlbmN5X21pbiA9IDQ3MDAwMDAwLAorCQkuZnJlcXVlbmN5X21pbiA9ICA0NzAwMDAwMCwKIAkJLmZyZXF1ZW5jeV9tYXggPSA4NjIwMDAwMDAsCi0JCS5zeW1ib2xfcmF0ZV9taW4gPSAoU1lTQ0xLLzIpLzY0LCAgICAgLyogU0FDTEsvNjQgPT0gKFNZU0NMSy8yKS82NCAqLwotCQkuc3ltYm9sX3JhdGVfbWF4ID0gKFNZU0NMSy8yKS80LCAgICAgIC8qIFNBQ0xLLzQgKi8KKwkJLnN5bWJvbF9yYXRlX21pbiA9IDAsICAvKiBzZXQgaW4gdGRhMTAwMjNfYXR0YWNoICovCisJCS5zeW1ib2xfcmF0ZV9tYXggPSAwLCAgLyogc2V0IGluIHRkYTEwMDIzX2F0dGFjaCAqLwogCQkuY2FwcyA9IDB4NDAwIHwgLy9GRV9DQU5fUUFNXzQKIAkJCUZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzMyIHwgRkVfQ0FOX1FBTV82NCB8CiAJCQlGRV9DQU5fUUFNXzEyOCB8IEZFX0NBTl9RQU1fMjU2IHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyeC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDJ4LmgKaW5kZXggMWJjYzBkNC4uMDRkMTk0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDJ4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDJ4LmgKQEAgLTI2LDEzICsyNiwzNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLXN0cnVjdCB0ZGExMDAyeF9jb25maWcKLXsKK3N0cnVjdCB0ZGExMDAyeF9jb25maWcgewogCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCiAJdTggZGVtb2RfYWRkcmVzczsKIAl1OCBpbnZlcnQ7CiB9OwogCitlbnVtIHRkYTEwMDIzX291dHB1dF9tb2RlIHsKKwlUREExMDAyM19PVVRQVVRfTU9ERV9QQVJBTExFTF9BID0gMHhlMCwKKwlUREExMDAyM19PVVRQVVRfTU9ERV9QQVJBTExFTF9CID0gMHhhMSwKKwlUREExMDAyM19PVVRQVVRfTU9ERV9QQVJBTExFTF9DID0gMHhhMCwKKwlUREExMDAyM19PVVRQVVRfTU9ERV9TRVJJQUwsIC8qIFRPRE86IG5vdCBpbXBsZW1lbnRlZCAqLworfTsKKworc3RydWN0IHRkYTEwMDIzX2NvbmZpZyB7CisJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KKwl1OCBkZW1vZF9hZGRyZXNzOworCXU4IGludmVydDsKKworCS8qIGNsb2NrIHNldHRpbmdzICovCisJdTMyIHh0YWw7IC8qIGRlZmF1bHRzOiAyODkyMDAwMCAqLworCXU4IHBsbF9tOyAvKiBkZWZhdWx0czogOCAqLworCXU4IHBsbF9wOyAvKiBkZWZhdWx0czogNCAqLworCXU4IHBsbF9uOyAvKiBkZWZhdWx0czogMSAqLworCisJLyogTVBFRzIgVFMgb3V0cHV0IG1vZGUgKi8KKwl1OCBvdXRwdXRfbW9kZTsKKworCS8qIGlucHV0IGZyZXEgb2Zmc2V0ICsgYmFzZWJhbmQgY29udmVyc2lvbiB0eXBlICovCisJdTE2IGRlbHRhZjsKK307CisKICNpZiBkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwMjEpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwMjFfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogdGRhMTAwMjFfYXR0YWNoKGNvbnN0IHN0cnVjdCB0ZGExMDAyeF9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCB1OCBwd20pOwpAQCAtNDUsMTIgKzY5LDE1IEBACiB9CiAjZW5kaWYgLy8gQ09ORklHX0RWQl9UREExMDAyMQogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX1REQTEwMDIzKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1REQTEwMDIzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHRkYTEwMDIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgdGRhMTAwMnhfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYywgdTggcHdtKTsKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwMjMpIHx8IFwKKwkoZGVmaW5lZChDT05GSUdfRFZCX1REQTEwMDIzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnRkYTEwMDIzX2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgdGRhMTAwMjNfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IHB3bSk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB0ZGExMDAyM19hdHRhY2goY29uc3Qgc3RydWN0IHRkYTEwMDJ4X2NvbmZpZyogY29uZmlnLAotCQkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMsIHU4IHB3bSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqdGRhMTAwMjNfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCB0ZGExMDAyM19jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggcHdtKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCmluZGV4IDk2MGVkNTcuLjEzNjA0MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKQEAgLTIzNCw3ICsyMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBwbHV0b19zZXRfZG1hX2FkZHIoc3RydWN0IHBsdXRvICpwbHV0bykKIHsKLQlwbHV0b193cml0ZXJlZyhwbHV0bywgUkVHX1BDQVIsIGNwdV90b19sZTMyKHBsdXRvLT5kbWFfYWRkcikpOworCXBsdXRvX3dyaXRlcmVnKHBsdXRvLCBSRUdfUENBUiwgcGx1dG8tPmRtYV9hZGRyKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgcGx1dG9fZG1hX21hcChzdHJ1Y3QgcGx1dG8gKnBsdXRvKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4NjNmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL0tjb25maWcKQEAgLTAsMCArMSwyNiBAQAorIworIyBTaWFubyBNb2JpbGUgU2lsaWNvbiBEaWdpdGFsIFRWIGRldmljZSBjb25maWd1cmF0aW9uCisjCisKK2NvbmZpZyBEVkJfU0lBTk9fU01TMVhYWAorCXRyaXN0YXRlICJTaWFubyBTTVMxWFhYIFVTQiBkb25nbGUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFVTQgorCS0tLWhlbHAtLS0KKwkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgYSBVU0IgZG9uZ2xlIHdpdGggYSBTTVMxWFhYIGNoaXBzZXQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNtczF4eHguCisKK2NvbmZpZyBEVkJfU0lBTk9fU01TMVhYWF9TTVNfSURTCisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIFNpYW5vIE1vYmlsZSBTaWxpY29uIGRlZmF1bHQgVVNCIElEcyIKKwlkZXBlbmRzIG9uIERWQl9TSUFOT19TTVMxWFhYCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFVTQiBkb25nbGUgd2l0aCBhIFNNUzFYWFggY2hpcHNldAorCSAgdGhhdCB1c2VzIFNpYW5vIE1vYmlsZSBTaWxpY29uJ3MgZGVmYXVsdCB1c2IgdmlkOnBpZC4KKworCSAgQ2hvb3NlIE4gaGVyZSBpZiB5b3Ugd291bGQgcHJlZmVyIHRvIHVzZSBTaWFubydzIGV4dGVybmFsIGRyaXZlci4KKworCSAgRnVydGhlciBkb2N1bWVudGF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZSBmb3VuZCBvbiB0aGUgV1dXIGF0CisJICA8aHR0cDovL3d3dy5zaWFuby1tcy5jb20vPi4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTA3MzdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACitzbXMxeHh4LW9ianMgOj0gc21zY29yZWFwaS5vIHNtc3VzYi5vIHNtc2R2Yi5vIHNtcy1jYXJkcy5vCisKK29iai0kKENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCkgKz0gc21zMXh4eC5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCisKK0VYVFJBX0NGTEFHUyArPSAkKGV4dHJhLWNmbGFncy15KSAkKGV4dHJhLWNmbGFncy1tKQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YThhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICBDYXJkLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgdGhlIFNpYW5vIFNNUzF4eHggVVNCIGRvbmdsZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqCisgKiAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICogIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAic21zLWNhcmRzLmgiCisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIHNtc3VzYl9pZF90YWJsZVtdID0geworI2lmZGVmIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWF9TTVNfSURTCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMDEwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19TVEVMTEFSIH0sCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMTAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19TVEVMTEFSIH0sCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMjAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19OT1ZBX0EgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAyMDEpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX05PVkFfQiB9LAorCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDMwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fVkVHQSB9LAorI2VuZGlmCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxNzAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfQ0FUQU1PVU5UIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxODAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfT0tFTU9fQSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTgwMSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0IgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTgwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU5MCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNtc3VzYl9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3Qgc21zX2JvYXJkIHNtc19ib2FyZHNbXSA9IHsKKwlbU01TX0JPQVJEX1VOS05PV05dID0geworCQkubmFtZQk9ICJVbmtub3duIGJvYXJkIiwKKwl9LAorCVtTTVMxWFhYX0JPQVJEX1NJQU5PX1NURUxMQVJdID0geworCQkubmFtZQk9ICJTaWFubyBTdGVsbGFyIERpZ2l0YWwgUmVjZWl2ZXIiLAorCQkudHlwZQk9IFNNU19TVEVMTEFSLAorCQkuZndbREVWSUNFX01PREVfRFZCVF9CREFdID0gInNtczF4eHgtc3RlbGxhci1kdmJ0LTAxLmZ3IiwKKwl9LAorCVtTTVMxWFhYX0JPQVJEX1NJQU5PX05PVkFfQV0gPSB7CisJCS5uYW1lCT0gIlNpYW5vIE5vdmEgQSBEaWdpdGFsIFJlY2VpdmVyIiwKKwkJLnR5cGUJPSBTTVNfTk9WQV9BMCwKKwkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LW5vdmEtYS1kdmJ0LTAxLmZ3IiwKKwl9LAorCVtTTVMxWFhYX0JPQVJEX1NJQU5PX05PVkFfQl0gPSB7CisJCS5uYW1lCT0gIlNpYW5vIE5vdmEgQiBEaWdpdGFsIFJlY2VpdmVyIiwKKwkJLnR5cGUJPSBTTVNfTk9WQV9CMCwKKwkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LW5vdmEtYi1kdmJ0LTAxLmZ3IiwKKwl9LAorCVtTTVMxWFhYX0JPQVJEX1NJQU5PX1ZFR0FdID0geworCQkubmFtZQk9ICJTaWFubyBWZWdhIERpZ2l0YWwgUmVjZWl2ZXIiLAorCQkudHlwZQk9IFNNU19WRUdBLAorCX0sCisJW1NNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX0NBVEFNT1VOVF0gPSB7CisJCS5uYW1lCT0gIkhhdXBwYXVnZSBDYXRhbW91bnQiLAorCQkudHlwZQk9IFNNU19TVEVMTEFSLAorCQkuZndbREVWSUNFX01PREVfRFZCVF9CREFdID0gInNtczF4eHgtc3RlbGxhci1kdmJ0LTAxLmZ3IiwKKwl9LAorCVtTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19BXSA9IHsKKwkJLm5hbWUJPSAiSGF1cHBhdWdlIE9rZW1vLUEiLAorCQkudHlwZQk9IFNNU19OT1ZBX0EwLAorCQkuZndbREVWSUNFX01PREVfRFZCVF9CREFdID0gInNtczF4eHgtbm92YS1hLWR2YnQtMDEuZnciLAorCX0sCisJW1NNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0JdID0geworCQkubmFtZQk9ICJIYXVwcGF1Z2UgT2tlbW8tQiIsCisJCS50eXBlCT0gU01TX05PVkFfQjAsCisJCS5md1tERVZJQ0VfTU9ERV9EVkJUX0JEQV0gPSAic21zMXh4eC1ub3ZhLWItZHZidC0wMS5mdyIsCisJfSwKKwlbU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTV0gPSB7CisJCS5uYW1lCT0gIkhhdXBwYXVnZSBXaW5UVi1Ob3ZhLVQtTWluaVN0aWNrIiwKKwkJLnR5cGUJPSBTTVNfTk9WQV9CMCwKKwkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LWhjdy01NXh4eC1kdmJ0LTAxLmZ3IiwKKwl9LAorfTsKKworc3RydWN0IHNtc19ib2FyZCAqc21zX2dldF9ib2FyZChpbnQgaWQpCit7CisJQlVHX09OKGlkID49IEFSUkFZX1NJWkUoc21zX2JvYXJkcykpOworCisJcmV0dXJuICZzbXNfYm9hcmRzW2lkXTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2IzOWJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqICBDYXJkLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgdGhlIFNpYW5vIFNNUzF4eHggVVNCIGRvbmdsZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqCisgKiAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICogIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fU01TX0NBUkRTX0hfXworI2RlZmluZSBfX1NNU19DQVJEU19IX18KKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInNtc2NvcmVhcGkuaCIKKworI2RlZmluZSBTTVNfQk9BUkRfVU5LTk9XTiAwCisjZGVmaW5lIFNNUzFYWFhfQk9BUkRfU0lBTk9fU1RFTExBUiAxCisjZGVmaW5lIFNNUzFYWFhfQk9BUkRfU0lBTk9fTk9WQV9BICAyCisjZGVmaW5lIFNNUzFYWFhfQk9BUkRfU0lBTk9fTk9WQV9CICAzCisjZGVmaW5lIFNNUzFYWFhfQk9BUkRfU0lBTk9fVkVHQSAgICA0CisjZGVmaW5lIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX0NBVEFNT1VOVCA1CisjZGVmaW5lIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0EgNgorI2RlZmluZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19CIDcKKyNkZWZpbmUgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSA4CisKK3N0cnVjdCBzbXNfYm9hcmQgeworCWVudW0gc21zX2RldmljZV90eXBlX3N0IHR5cGU7CisJY2hhciAqbmFtZSwgKmZ3W0RFVklDRV9NT0RFX01BWF07Cit9OworCitzdHJ1Y3Qgc21zX2JvYXJkICpzbXNfZ2V0X2JvYXJkKGludCBpZCk7CisKK2V4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzbXN1c2JfaWRfdGFibGVbXTsKKworI2VuZGlmIC8qIF9fU01TX0NBUkRTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YjhlZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTAsMCArMSwxMjUxIEBACisvKgorICogIFNpYW5vIGNvcmUgQVBJIG1vZHVsZQorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBpbnRlcmZhY2UgdG8gc21zIGNvcmUgY29tcG9uZW50CisgKgorICogIGF1dGhvcjogQW5hdG9seSBHcmVlbmJsYXQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSwgMjAwNS0yMDA4IFNpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqCisgKiAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICogIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAic21zY29yZWFwaS5oIgorI2luY2x1ZGUgInNtcy1jYXJkcy5oIgorCitpbnQgc21zX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBzbXNfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnIGxldmVsIChpbmZvPTEsIGFkdj0yIChvci1hYmxlKSkiKTsKKworc3RydWN0IHNtc2NvcmVfZGV2aWNlX25vdGlmeWVlX3QgeworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisJaG90cGx1Z190IGhvdHBsdWc7Cit9OworCitzdHJ1Y3Qgc21zY29yZV9pZGxpc3RfdCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwlpbnQJCWlkOworCWludAkJZGF0YV90eXBlOworfTsKKworc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgeworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisJc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXY7CisJdm9pZAkJCSpjb250ZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgCWlkbGlzdDsKKwlvbnJlc3BvbnNlX3QJb25yZXNwb25zZV9oYW5kbGVyOworCW9ucmVtb3ZlX3QJCW9ucmVtb3ZlX2hhbmRsZXI7Cit9OworCitzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKworCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN1YmNsaWVudHM7CisJc3BpbmxvY2tfdAkJY2xpZW50c2xvY2s7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZmZlcnM7CisJc3BpbmxvY2tfdAkJYnVmZmVyc2xvY2s7CisJaW50CQkJCW51bV9idWZmZXJzOworCisJdm9pZAkJCSpjb21tb25fYnVmZmVyOworCWludAkJCQljb21tb25fYnVmZmVyX3NpemU7CisJZG1hX2FkZHJfdAkJY29tbW9uX2J1ZmZlcl9waHlzOworCisJdm9pZAkJCSpjb250ZXh0OworCXN0cnVjdCBkZXZpY2UJKmRldmljZTsKKworCWNoYXIJCQlkZXZwYXRoWzMyXTsKKwl1bnNpZ25lZCBsb25nCWRldmljZV9mbGFnczsKKworCXNldG1vZGVfdAkJc2V0bW9kZV9oYW5kbGVyOworCWRldGVjdG1vZGVfdAlkZXRlY3Rtb2RlX2hhbmRsZXI7CisJc2VuZHJlcXVlc3RfdAlzZW5kcmVxdWVzdF9oYW5kbGVyOworCXByZWxvYWRfdAkJcHJlbG9hZF9oYW5kbGVyOworCXBvc3Rsb2FkX3QJCXBvc3Rsb2FkX2hhbmRsZXI7CisKKwlpbnQJCQkJbW9kZSwgbW9kZXNfc3VwcG9ydGVkOworCisJc3RydWN0IGNvbXBsZXRpb24gdmVyc2lvbl9leF9kb25lLCBkYXRhX2Rvd25sb2FkX2RvbmUsIHRyaWdnZXJfZG9uZTsKKwlzdHJ1Y3QgY29tcGxldGlvbiBpbml0X2RldmljZV9kb25lLCByZWxvYWRfc3RhcnRfZG9uZSwgcmVzdW1lX2RvbmU7CisKKwlpbnQgYm9hcmRfaWQ7Cit9OworCit2b2lkIHNtc2NvcmVfc2V0X2JvYXJkX2lkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlLCBpbnQgaWQpCit7CisJY29yZS0+Ym9hcmRfaWQgPSBpZDsKK30KKworaW50IHNtc2NvcmVfZ2V0X2JvYXJkX2lkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlKQoreworCXJldHVybiBjb3JlLT5ib2FyZF9pZDsKK30KKworc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwljaGFyCQkJZGV2cGF0aFszMl07CisJaW50CQkJCW1vZGU7CisJZW51bSBzbXNfZGV2aWNlX3R5cGVfc3QJdHlwZTsKK307CisKK3N0cnVjdCBsaXN0X2hlYWQgZ19zbXNjb3JlX25vdGlmeWVlczsKK3N0cnVjdCBsaXN0X2hlYWQgZ19zbXNjb3JlX2RldmljZXM7CitzdHJ1Y3QgbXV0ZXggZ19zbXNjb3JlX2RldmljZXNsb2NrOworCitzdHJ1Y3QgbGlzdF9oZWFkIGdfc21zY29yZV9yZWdpc3RyeTsKK3N0cnVjdCBtdXRleCBnX3Ntc2NvcmVfcmVnaXN0cnlsb2NrOworCitzdGF0aWMgaW50IGRlZmF1bHRfbW9kZSA9IDQ7CisKK21vZHVsZV9wYXJhbShkZWZhdWx0X21vZGUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfbW9kZSwgImRlZmF1bHQgZmlybXdhcmUgaWQgKGRldmljZSBtb2RlKSIpOworCitzdGF0aWMgc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCAqc21zY29yZV9maW5kX3JlZ2lzdHJ5KGNoYXIgKmRldnBhdGgpCit7CisJc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCAqZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKKworCWttdXRleF9sb2NrKCZnX3Ntc2NvcmVfcmVnaXN0cnlsb2NrKTsKKwlmb3IgKG5leHQgPSBnX3Ntc2NvcmVfcmVnaXN0cnkubmV4dDsKKwkgICAgIG5leHQgIT0gJmdfc21zY29yZV9yZWdpc3RyeTsKKwkgICAgIG5leHQgPSBuZXh0LT5uZXh0KSB7CisJCWVudHJ5ID0gKHN0cnVjdCBzbXNjb3JlX3JlZ2lzdHJ5X2VudHJ5X3QgKikgbmV4dDsKKwkJaWYgKCFzdHJjbXAoZW50cnktPmRldnBhdGgsIGRldnBhdGgpKSB7CisJCQlrbXV0ZXhfdW5sb2NrKCZnX3Ntc2NvcmVfcmVnaXN0cnlsb2NrKTsKKwkJCXJldHVybiBlbnRyeTsKKwkJfQorCX0KKwllbnRyeSA9IChzdHJ1Y3Qgc21zY29yZV9yZWdpc3RyeV9lbnRyeV90ICopCisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc21zY29yZV9yZWdpc3RyeV9lbnRyeV90KSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoZW50cnkpIHsKKwkJZW50cnktPm1vZGUgPSBkZWZhdWx0X21vZGU7CisJCXN0cmNweShlbnRyeS0+ZGV2cGF0aCwgZGV2cGF0aCk7CisJCWxpc3RfYWRkKCZlbnRyeS0+ZW50cnksICZnX3Ntc2NvcmVfcmVnaXN0cnkpOworCX0gZWxzZQorCQlzbXNfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIHNtc2NvcmVfcmVnaXN0cnkuIik7CisJa211dGV4X3VubG9jaygmZ19zbXNjb3JlX3JlZ2lzdHJ5bG9jayk7CisJcmV0dXJuIGVudHJ5OworfQorCitpbnQgc21zY29yZV9yZWdpc3RyeV9nZXRtb2RlKGNoYXIgKmRldnBhdGgpCit7CisJc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCAqZW50cnk7CisKKwllbnRyeSA9IHNtc2NvcmVfZmluZF9yZWdpc3RyeShkZXZwYXRoKTsKKwlpZiAoZW50cnkpCisJCXJldHVybiBlbnRyeS0+bW9kZTsKKwllbHNlCisJCXNtc19lcnIoIk5vIHJlZ2lzdHJ5IGZvdW5kLiIpOworCisJcmV0dXJuIGRlZmF1bHRfbW9kZTsKK30KKworc3RhdGljIGVudW0gc21zX2RldmljZV90eXBlX3N0IHNtc2NvcmVfcmVnaXN0cnlfZ2V0dHlwZShjaGFyICpkZXZwYXRoKQoreworCXN0cnVjdCBzbXNjb3JlX3JlZ2lzdHJ5X2VudHJ5X3QgKmVudHJ5OworCisJZW50cnkgPSBzbXNjb3JlX2ZpbmRfcmVnaXN0cnkoZGV2cGF0aCk7CisJaWYgKGVudHJ5KQorCQlyZXR1cm4gZW50cnktPnR5cGU7CisJZWxzZQorCQlzbXNfZXJyKCJObyByZWdpc3RyeSBmb3VuZC4iKTsKKworCXJldHVybiAtMTsKK30KKwordm9pZCBzbXNjb3JlX3JlZ2lzdHJ5X3NldG1vZGUoY2hhciAqZGV2cGF0aCwgaW50IG1vZGUpCit7CisJc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCAqZW50cnk7CisKKwllbnRyeSA9IHNtc2NvcmVfZmluZF9yZWdpc3RyeShkZXZwYXRoKTsKKwlpZiAoZW50cnkpCisJCWVudHJ5LT5tb2RlID0gbW9kZTsKKwllbHNlCisJCXNtc19lcnIoIk5vIHJlZ2lzdHJ5IGZvdW5kLiIpOworfQorCitzdGF0aWMgdm9pZCBzbXNjb3JlX3JlZ2lzdHJ5X3NldHR5cGUoY2hhciAqZGV2cGF0aCwKKwkJCQkgICAgIGVudW0gc21zX2RldmljZV90eXBlX3N0IHR5cGUpCit7CisJc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCAqZW50cnk7CisKKwllbnRyeSA9IHNtc2NvcmVfZmluZF9yZWdpc3RyeShkZXZwYXRoKTsKKwlpZiAoZW50cnkpCisJCWVudHJ5LT50eXBlID0gdHlwZTsKKwllbHNlCisJCXNtc19lcnIoIk5vIHJlZ2lzdHJ5IGZvdW5kLiIpOworfQorCisKK3N0YXRpYyB2b2lkIGxpc3RfYWRkX2xvY2tlZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkgICAgc3BpbmxvY2tfdCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOworCisJbGlzdF9hZGQobmV3LCBoZWFkKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHJlZ2lzdGVyIGEgY2xpZW50IGNhbGxiYWNrIHRoYXQgY2FsbGVkIHdoZW4gZGV2aWNlIHBsdWdnZWQgaW4vdW5wbHVnZ2VkCisgKiBOT1RFOiBpZiBkZXZpY2VzIGV4aXN0IGNhbGxiYWNrIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmb3IgZWFjaCBkZXZpY2UKKyAqCisgKiBAcGFyYW0gaG90cGx1ZyBjYWxsYmFjaworICoKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCA8MCBvbiBlcnJvci4KKyAqLworaW50IHNtc2NvcmVfcmVnaXN0ZXJfaG90cGx1Zyhob3RwbHVnX3QgaG90cGx1ZykKK3sKKwlzdHJ1Y3Qgc21zY29yZV9kZXZpY2Vfbm90aWZ5ZWVfdCAqbm90aWZ5ZWU7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCwgKmZpcnN0OworCWludCByYyA9IDA7CisKKwlrbXV0ZXhfbG9jaygmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKKworCW5vdGlmeWVlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNtc2NvcmVfZGV2aWNlX25vdGlmeWVlX3QpLAorCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKG5vdGlmeWVlKSB7CisJCS8qIG5vdyBub3RpZnkgY2FsbGJhY2sgYWJvdXQgZXhpc3RpbmcgZGV2aWNlcyAqLworCQlmaXJzdCA9ICZnX3Ntc2NvcmVfZGV2aWNlczsKKwkJZm9yIChuZXh0ID0gZmlyc3QtPm5leHQ7CisJCSAgICAgbmV4dCAhPSBmaXJzdCAmJiAhcmM7CisJCSAgICAgbmV4dCA9IG5leHQtPm5leHQpIHsKKwkJCXN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2ID0KKwkJCQkoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKikgbmV4dDsKKwkJCXJjID0gaG90cGx1Zyhjb3JlZGV2LCBjb3JlZGV2LT5kZXZpY2UsIDEpOworCQl9CisKKwkJaWYgKHJjID49IDApIHsKKwkJCW5vdGlmeWVlLT5ob3RwbHVnID0gaG90cGx1ZzsKKwkJCWxpc3RfYWRkKCZub3RpZnllZS0+ZW50cnksICZnX3Ntc2NvcmVfbm90aWZ5ZWVzKTsKKwkJfSBlbHNlCisJCQlrZnJlZShub3RpZnllZSk7CisJfSBlbHNlCisJCXJjID0gLUVOT01FTTsKKworCWttdXRleF91bmxvY2soJmdfc21zY29yZV9kZXZpY2VzbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogdW5yZWdpc3RlciBhIGNsaWVudCBjYWxsYmFjayB0aGF0IGNhbGxlZCB3aGVuIGRldmljZSBwbHVnZ2VkIGluL3VucGx1Z2dlZAorICoKKyAqIEBwYXJhbSBob3RwbHVnIGNhbGxiYWNrCisgKgorICovCit2b2lkIHNtc2NvcmVfdW5yZWdpc3Rlcl9ob3RwbHVnKGhvdHBsdWdfdCBob3RwbHVnKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpmaXJzdDsKKworCWttdXRleF9sb2NrKCZnX3Ntc2NvcmVfZGV2aWNlc2xvY2spOworCisJZmlyc3QgPSAmZ19zbXNjb3JlX25vdGlmeWVlczsKKworCWZvciAobmV4dCA9IGZpcnN0LT5uZXh0OyBuZXh0ICE9IGZpcnN0OykgeworCQlzdHJ1Y3Qgc21zY29yZV9kZXZpY2Vfbm90aWZ5ZWVfdCAqbm90aWZ5ZWUgPQorCQkJKHN0cnVjdCBzbXNjb3JlX2RldmljZV9ub3RpZnllZV90ICopIG5leHQ7CisJCW5leHQgPSBuZXh0LT5uZXh0OworCisJCWlmIChub3RpZnllZS0+aG90cGx1ZyA9PSBob3RwbHVnKSB7CisJCQlsaXN0X2RlbCgmbm90aWZ5ZWUtPmVudHJ5KTsKKwkJCWtmcmVlKG5vdGlmeWVlKTsKKwkJfQorCX0KKworCWttdXRleF91bmxvY2soJmdfc21zY29yZV9kZXZpY2VzbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHNtc2NvcmVfbm90aWZ5X2NsaWVudHMoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpCit7CisJc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKmNsaWVudDsKKworCS8qIHRoZSBjbGllbnQgbXVzdCBjYWxsIHNtc2NvcmVfdW5yZWdpc3Rlcl9jbGllbnQgZnJvbSByZW1vdmUgaGFuZGxlciAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmY29yZWRldi0+Y2xpZW50cykpIHsKKwkJY2xpZW50ID0gKHN0cnVjdCBzbXNjb3JlX2NsaWVudF90ICopIGNvcmVkZXYtPmNsaWVudHMubmV4dDsKKwkJY2xpZW50LT5vbnJlbW92ZV9oYW5kbGVyKGNsaWVudC0+Y29udGV4dCk7CisJfQorfQorCitzdGF0aWMgaW50IHNtc2NvcmVfbm90aWZ5X2NhbGxiYWNrcyhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZSAqZGV2aWNlLCBpbnQgYXJyaXZhbCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0LCAqZmlyc3Q7CisJaW50IHJjID0gMDsKKworCS8qIG5vdGU6IG11c3QgYmUgY2FsbGVkIHVuZGVyIGdfZGV2aWNlc2xvY2sgKi8KKworCWZpcnN0ID0gJmdfc21zY29yZV9ub3RpZnllZXM7CisKKwlmb3IgKG5leHQgPSBmaXJzdC0+bmV4dDsgbmV4dCAhPSBmaXJzdDsgbmV4dCA9IG5leHQtPm5leHQpIHsKKwkJcmMgPSAoKHN0cnVjdCBzbXNjb3JlX2RldmljZV9ub3RpZnllZV90ICopIG5leHQpLT4KKwkJCQlob3RwbHVnKGNvcmVkZXYsIGRldmljZSwgYXJyaXZhbCk7CisJCWlmIChyYyA8IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QKK3Ntc2NvcmVfYnVmZmVyX3QgKnNtc2NvcmVfY3JlYXRlYnVmZmVyKHU4ICpidWZmZXIsIHZvaWQgKmNvbW1vbl9idWZmZXIsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgY29tbW9uX2J1ZmZlcl9waHlzKQoreworCXN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYiA9CisJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYikgeworCQlzbXNfaW5mbygia21hbGxvYyguLi4pIGZhaWxlZCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljYi0+cCA9IGJ1ZmZlcjsKKwljYi0+b2Zmc2V0X2luX2NvbW1vbiA9IGJ1ZmZlciAtICh1OCAqKSBjb21tb25fYnVmZmVyOworCWNiLT5waHlzID0gY29tbW9uX2J1ZmZlcl9waHlzICsgY2ItPm9mZnNldF9pbl9jb21tb247CisKKwlyZXR1cm4gY2I7Cit9CisKKy8qKgorICogY3JlYXRlcyBjb3JlZGV2IG9iamVjdCBmb3IgYSBkZXZpY2UsIHByZXBhcmVzIGJ1ZmZlcnMsCisgKiBjcmVhdGVzIGJ1ZmZlciBtYXBwaW5ncywgbm90aWZpZXMgcmVnaXN0ZXJlZCBob3RwbHVncyBhYm91dCBuZXcgZGV2aWNlLgorICoKKyAqIEBwYXJhbSBwYXJhbXMgZGV2aWNlIHBvaW50ZXIgdG8gc3RydWN0IHdpdGggZGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMKKyAqICAgICAgICAgICAgICAgYW5kIGhhbmRsZXJzCisgKiBAcGFyYW0gY29yZWRldiBwb2ludGVyIHRvIGEgdmFsdWUgdGhhdCByZWNlaXZlcyBjcmVhdGVkIGNvcmVkZXYgb2JqZWN0CisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGVycm9yLgorICovCitpbnQgc21zY29yZV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHNtc2RldmljZV9wYXJhbXNfdCAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICoqY29yZWRldikKK3sKKwlzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqZGV2OworCXU4ICpidWZmZXI7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCksIEdGUF9LRVJORUwpOworCWlmICghZGV2KSB7CisJCXNtc19pbmZvKCJremFsbG9jKC4uLikgZmFpbGVkIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGluaXQgbGlzdCBlbnRyeSBzbyBpdCBjb3VsZCBiZSBzYWZlIGluIHNtc2NvcmVfdW5yZWdpc3Rlcl9kZXZpY2UgKi8KKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5lbnRyeSk7CisKKwkvKiBpbml0IHF1ZXVlcyAqLworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmNsaWVudHMpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmJ1ZmZlcnMpOworCisJLyogaW5pdCBsb2NrcyAqLworCXNwaW5fbG9ja19pbml0KCZkZXYtPmNsaWVudHNsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5idWZmZXJzbG9jayk7CisKKwkvKiBpbml0IGNvbXBsZXRpb24gZXZlbnRzICovCisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPnZlcnNpb25fZXhfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmRhdGFfZG93bmxvYWRfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPnRyaWdnZXJfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmluaXRfZGV2aWNlX2RvbmUpOworCWluaXRfY29tcGxldGlvbigmZGV2LT5yZWxvYWRfc3RhcnRfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPnJlc3VtZV9kb25lKTsKKworCS8qIGFsbG9jIGNvbW1vbiBidWZmZXIgKi8KKwlkZXYtPmNvbW1vbl9idWZmZXJfc2l6ZSA9IHBhcmFtcy0+YnVmZmVyX3NpemUgKiBwYXJhbXMtPm51bV9idWZmZXJzOworCWRldi0+Y29tbW9uX2J1ZmZlciA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBkZXYtPmNvbW1vbl9idWZmZXJfc2l6ZSwKKwkJCQkJCSZkZXYtPmNvbW1vbl9idWZmZXJfcGh5cywKKwkJCQkJCUdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIWRldi0+Y29tbW9uX2J1ZmZlcikgeworCQlzbXNjb3JlX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHByZXBhcmUgZG1hIGJ1ZmZlcnMgKi8KKwlmb3IgKGJ1ZmZlciA9IGRldi0+Y29tbW9uX2J1ZmZlcjsKKwkgICAgIGRldi0+bnVtX2J1ZmZlcnMgPCBwYXJhbXMtPm51bV9idWZmZXJzOworCSAgICAgZGV2LT5udW1fYnVmZmVycysrLCBidWZmZXIgKz0gcGFyYW1zLT5idWZmZXJfc2l6ZSkgeworCQlzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IgPQorCQkJc21zY29yZV9jcmVhdGVidWZmZXIoYnVmZmVyLCBkZXYtPmNvbW1vbl9idWZmZXIsCisJCQkJCSAgICAgZGV2LT5jb21tb25fYnVmZmVyX3BoeXMpOworCQlpZiAoIWNiKSB7CisJCQlzbXNjb3JlX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXNtc2NvcmVfcHV0YnVmZmVyKGRldiwgY2IpOworCX0KKworCXNtc19pbmZvKCJhbGxvY2F0ZWQgJWQgYnVmZmVycyIsIGRldi0+bnVtX2J1ZmZlcnMpOworCisJZGV2LT5tb2RlID0gREVWSUNFX01PREVfTk9ORTsKKwlkZXYtPmNvbnRleHQgPSBwYXJhbXMtPmNvbnRleHQ7CisJZGV2LT5kZXZpY2UgPSBwYXJhbXMtPmRldmljZTsKKwlkZXYtPnNldG1vZGVfaGFuZGxlciA9IHBhcmFtcy0+c2V0bW9kZV9oYW5kbGVyOworCWRldi0+ZGV0ZWN0bW9kZV9oYW5kbGVyID0gcGFyYW1zLT5kZXRlY3Rtb2RlX2hhbmRsZXI7CisJZGV2LT5zZW5kcmVxdWVzdF9oYW5kbGVyID0gcGFyYW1zLT5zZW5kcmVxdWVzdF9oYW5kbGVyOworCWRldi0+cHJlbG9hZF9oYW5kbGVyID0gcGFyYW1zLT5wcmVsb2FkX2hhbmRsZXI7CisJZGV2LT5wb3N0bG9hZF9oYW5kbGVyID0gcGFyYW1zLT5wb3N0bG9hZF9oYW5kbGVyOworCisJZGV2LT5kZXZpY2VfZmxhZ3MgPSBwYXJhbXMtPmZsYWdzOworCXN0cmNweShkZXYtPmRldnBhdGgsIHBhcmFtcy0+ZGV2cGF0aCk7CisKKwlzbXNjb3JlX3JlZ2lzdHJ5X3NldHR5cGUoZGV2LT5kZXZwYXRoLCBwYXJhbXMtPmRldmljZV90eXBlKTsKKworCS8qIGFkZCBkZXZpY2UgdG8gZGV2aWNlcyBsaXN0ICovCisJa211dGV4X2xvY2soJmdfc21zY29yZV9kZXZpY2VzbG9jayk7CisJbGlzdF9hZGQoJmRldi0+ZW50cnksICZnX3Ntc2NvcmVfZGV2aWNlcyk7CisJa211dGV4X3VubG9jaygmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKKworCSpjb3JlZGV2ID0gZGV2OworCisJc21zX2luZm8oImRldmljZSAlcCBjcmVhdGVkIiwgZGV2KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHNldHMgaW5pdGlhbCBkZXZpY2UgbW9kZSBhbmQgbm90aWZpZXMgY2xpZW50IGhvdHBsdWdzIHRoYXQgZGV2aWNlIGlzIHJlYWR5CisgKgorICogQHBhcmFtIGNvcmVkZXYgcG9pbnRlciB0byBhIGNvcmVkZXYgb2JqZWN0IHJldHVybmVkIGJ5CisgKiAJCSAgc21zY29yZV9yZWdpc3Rlcl9kZXZpY2UKKyAqCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IuCisgKi8KK2ludCBzbXNjb3JlX3N0YXJ0X2RldmljZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldikKK3sKKwlpbnQgcmMgPSBzbXNjb3JlX3NldF9kZXZpY2VfbW9kZSgKKwkJCWNvcmVkZXYsIHNtc2NvcmVfcmVnaXN0cnlfZ2V0bW9kZShjb3JlZGV2LT5kZXZwYXRoKSk7CisJaWYgKHJjIDwgMCkgeworCQlzbXNfaW5mbygic2V0IGRldmljZSBtb2RlIGZhaWxlICwgcmMgJWQiLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlrbXV0ZXhfbG9jaygmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKKworCXJjID0gc21zY29yZV9ub3RpZnlfY2FsbGJhY2tzKGNvcmVkZXYsIGNvcmVkZXYtPmRldmljZSwgMSk7CisKKwlzbXNfaW5mbygiZGV2aWNlICVwIHN0YXJ0ZWQsIHJjICVkIiwgY29yZWRldiwgcmMpOworCisJa211dGV4X3VubG9jaygmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzbXNjb3JlX3NlbmRyZXF1ZXN0X2FuZF93YWl0KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbikKK3sKKwlpbnQgcmMgPSBjb3JlZGV2LT5zZW5kcmVxdWVzdF9oYW5kbGVyKGNvcmVkZXYtPmNvbnRleHQsIGJ1ZmZlciwgc2l6ZSk7CisJaWYgKHJjIDwgMCkgeworCQlzbXNfaW5mbygic2VuZHJlcXVlc3QgcmV0dXJuZWQgZXJyb3IgJWQiLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KGNvbXBsZXRpb24sCisJCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMDApKSA/CisJCQkJCQkwIDogLUVUSU1FOworfQorCitzdGF0aWMgaW50IHNtc2NvcmVfbG9hZF9maXJtd2FyZV9mYW1pbHkyKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJCQkgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgU21zRmlybXdhcmVfU1QgKmZpcm13YXJlID0gKHN0cnVjdCBTbXNGaXJtd2FyZV9TVCAqKSBidWZmZXI7CisJc3RydWN0IFNtc01zZ0hkcl9TVCAqbXNnOworCXUzMiBtZW1fYWRkcmVzcyA9IGZpcm13YXJlLT5TdGFydEFkZHJlc3M7CisJdTggKnBheWxvYWQgPSBmaXJtd2FyZS0+UGF5bG9hZDsKKwlpbnQgcmMgPSAwOworCisJc21zX2luZm8oImxvYWRpbmcgRlcgdG8gYWRkciAweCV4IHNpemUgJWQiLAorCQkgbWVtX2FkZHJlc3MsIGZpcm13YXJlLT5MZW5ndGgpOworCWlmIChjb3JlZGV2LT5wcmVsb2FkX2hhbmRsZXIpIHsKKwkJcmMgPSBjb3JlZGV2LT5wcmVsb2FkX2hhbmRsZXIoY29yZWRldi0+Y29udGV4dCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJfQorCisJLyogUEFHRV9TSVpFIGJ1ZmZlciBzaGFsbCBiZSBlbm91Z2ggYW5kIGRtYSBhbGlnbmVkICovCisJbXNnID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29yZWRldi0+bW9kZSAhPSBERVZJQ0VfTU9ERV9OT05FKSB7CisJCXNtc19kZWJ1Zygic2VuZGluZyByZWxvYWQgY29tbWFuZC4iKTsKKwkJU01TX0lOSVRfTVNHKG1zZywgTVNHX1NXX1JFTE9BRF9TVEFSVF9SRVEsCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgU21zTXNnSGRyX1NUKSk7CisJCXJjID0gc21zY29yZV9zZW5kcmVxdWVzdF9hbmRfd2FpdChjb3JlZGV2LCBtc2csCisJCQkJCQkgIG1zZy0+bXNnTGVuZ3RoLAorCQkJCQkJICAmY29yZWRldi0+cmVsb2FkX3N0YXJ0X2RvbmUpOworCQltZW1fYWRkcmVzcyA9ICoodTMyICopICZwYXlsb2FkWzIwXTsKKwl9CisKKwl3aGlsZSAoc2l6ZSAmJiByYyA+PSAwKSB7CisJCXN0cnVjdCBTbXNEYXRhRG93bmxvYWRfU1QgKkRhdGFNc2cgPQorCQkJKHN0cnVjdCBTbXNEYXRhRG93bmxvYWRfU1QgKikgbXNnOworCQlpbnQgcGF5bG9hZF9zaXplID0gbWluKChpbnQpIHNpemUsIFNNU19NQVhfUEFZTE9BRF9TSVpFKTsKKworCQlTTVNfSU5JVF9NU0cobXNnLCBNU0dfU01TX0RBVEFfRE9XTkxPQURfUkVRLAorCQkJICAgICAodTE2KShzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCkgKworCQkJCSAgICAgIHNpemVvZih1MzIpICsgcGF5bG9hZF9zaXplKSk7CisKKwkJRGF0YU1zZy0+TWVtQWRkciA9IG1lbV9hZGRyZXNzOworCQltZW1jcHkoRGF0YU1zZy0+UGF5bG9hZCwgcGF5bG9hZCwgcGF5bG9hZF9zaXplKTsKKworCQlpZiAoKGNvcmVkZXYtPmRldmljZV9mbGFncyAmIFNNU19ST01fTk9fUkVTUE9OU0UpICYmCisJCSAgICAoY29yZWRldi0+bW9kZSA9PSBERVZJQ0VfTU9ERV9OT05FKSkKKwkJCXJjID0gY29yZWRldi0+c2VuZHJlcXVlc3RfaGFuZGxlcigKKwkJCQljb3JlZGV2LT5jb250ZXh0LCBEYXRhTXNnLAorCQkJCURhdGFNc2ctPnhNc2dIZWFkZXIubXNnTGVuZ3RoKTsKKwkJZWxzZQorCQkJcmMgPSBzbXNjb3JlX3NlbmRyZXF1ZXN0X2FuZF93YWl0KAorCQkJCWNvcmVkZXYsIERhdGFNc2csCisJCQkJRGF0YU1zZy0+eE1zZ0hlYWRlci5tc2dMZW5ndGgsCisJCQkJJmNvcmVkZXYtPmRhdGFfZG93bmxvYWRfZG9uZSk7CisKKwkJcGF5bG9hZCArPSBwYXlsb2FkX3NpemU7CisJCXNpemUgLT0gcGF5bG9hZF9zaXplOworCQltZW1fYWRkcmVzcyArPSBwYXlsb2FkX3NpemU7CisJfQorCisJaWYgKHJjID49IDApIHsKKwkJaWYgKGNvcmVkZXYtPm1vZGUgPT0gREVWSUNFX01PREVfTk9ORSkgeworCQkJc3RydWN0IFNtc01zZ0RhdGFfU1QgKlRyaWdnZXJNc2cgPQorCQkJCShzdHJ1Y3QgU21zTXNnRGF0YV9TVCAqKSBtc2c7CisKKwkJCVNNU19JTklUX01TRyhtc2csIE1TR19TTVNfU1dET1dOTE9BRF9UUklHR0VSX1JFUSwKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgU21zTXNnSGRyX1NUKSArCisJCQkJICAgICBzaXplb2YodTMyKSAqIDUpOworCisJCQlUcmlnZ2VyTXNnLT5tc2dEYXRhWzBdID0gZmlybXdhcmUtPlN0YXJ0QWRkcmVzczsKKwkJCQkJCS8qIEVudHJ5IHBvaW50ICovCisJCQlUcmlnZ2VyTXNnLT5tc2dEYXRhWzFdID0gNTsgLyogUHJpb3JpdHkgKi8KKwkJCVRyaWdnZXJNc2ctPm1zZ0RhdGFbMl0gPSAweDIwMDsgLyogU3RhY2sgc2l6ZSAqLworCQkJVHJpZ2dlck1zZy0+bXNnRGF0YVszXSA9IDA7IC8qIFBhcmFtZXRlciAqLworCQkJVHJpZ2dlck1zZy0+bXNnRGF0YVs0XSA9IDQ7IC8qIFRhc2sgSUQgKi8KKworCQkJaWYgKGNvcmVkZXYtPmRldmljZV9mbGFncyAmIFNNU19ST01fTk9fUkVTUE9OU0UpIHsKKwkJCQlyYyA9IGNvcmVkZXYtPnNlbmRyZXF1ZXN0X2hhbmRsZXIoCisJCQkJCWNvcmVkZXYtPmNvbnRleHQsIFRyaWdnZXJNc2csCisJCQkJCVRyaWdnZXJNc2ctPnhNc2dIZWFkZXIubXNnTGVuZ3RoKTsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCX0gZWxzZQorCQkJCXJjID0gc21zY29yZV9zZW5kcmVxdWVzdF9hbmRfd2FpdCgKKwkJCQkJY29yZWRldiwgVHJpZ2dlck1zZywKKwkJCQkJVHJpZ2dlck1zZy0+eE1zZ0hlYWRlci5tc2dMZW5ndGgsCisJCQkJCSZjb3JlZGV2LT50cmlnZ2VyX2RvbmUpOworCQl9IGVsc2UgeworCQkJU01TX0lOSVRfTVNHKG1zZywgTVNHX1NXX1JFTE9BRF9FWEVDX1JFUSwKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgU21zTXNnSGRyX1NUKSk7CisKKwkJCXJjID0gY29yZWRldi0+c2VuZHJlcXVlc3RfaGFuZGxlcihjb3JlZGV2LT5jb250ZXh0LAorCQkJCQkJCSAgbXNnLCBtc2ctPm1zZ0xlbmd0aCk7CisJCX0KKwkJbXNsZWVwKDUwMCk7CisJfQorCisJc21zX2RlYnVnKCJyYz0lZCwgcG9zdGxvYWQ9JXAgIiwgcmMsCisJCSAgY29yZWRldi0+cG9zdGxvYWRfaGFuZGxlcik7CisKKwlrZnJlZShtc2cpOworCisJcmV0dXJuICgocmMgPj0gMCkgJiYgY29yZWRldi0+cG9zdGxvYWRfaGFuZGxlcikgPworCQljb3JlZGV2LT5wb3N0bG9hZF9oYW5kbGVyKGNvcmVkZXYtPmNvbnRleHQpIDoKKwkJcmM7Cit9CisKKy8qKgorICogbG9hZHMgc3BlY2lmaWVkIGZpcm13YXJlIGludG8gYSBidWZmZXIgYW5kIGNhbGxzIGRldmljZSBsb2FkZmlybXdhcmVfaGFuZGxlcgorICoKKyAqIEBwYXJhbSBjb3JlZGV2IHBvaW50ZXIgdG8gYSBjb3JlZGV2IG9iamVjdCByZXR1cm5lZCBieQorICogICAgICAgICAgICAgICAgc21zY29yZV9yZWdpc3Rlcl9kZXZpY2UKKyAqIEBwYXJhbSBmaWxlbmFtZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHNwZWNpZmllcyBmaXJtd2FyZSBmaWxlIG5hbWUKKyAqIEBwYXJhbSBsb2FkZmlybXdhcmVfaGFuZGxlciBkZXZpY2UgaGFuZGxlciB0aGF0IGxvYWRzIGZpcm13YXJlCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IHNtc2NvcmVfbG9hZF9maXJtd2FyZV9mcm9tX2ZpbGUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkJCSAgIGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgICBsb2FkZmlybXdhcmVfdCBsb2FkZmlybXdhcmVfaGFuZGxlcikKK3sKKwlpbnQgcmMgPSAtRU5PRU5UOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJdTggKmZ3X2J1ZmZlcjsKKworCWlmIChsb2FkZmlybXdhcmVfaGFuZGxlciA9PSBOVUxMICYmICEoY29yZWRldi0+ZGV2aWNlX2ZsYWdzICYKKwkJCQkJICAgICAgU01TX0RFVklDRV9GQU1JTFkyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlbmFtZSwgY29yZWRldi0+ZGV2aWNlKTsKKwlpZiAocmMgPCAwKSB7CisJCXNtc19pbmZvKCJmYWlsZWQgdG8gb3BlbiBcIiVzXCIiLCBmaWxlbmFtZSk7CisJCXJldHVybiByYzsKKwl9CisJc21zX2luZm8oInJlYWQgRlcgJXMsIHNpemU9JXpkIiwgZmlsZW5hbWUsIGZ3LT5zaXplKTsKKwlmd19idWZmZXIgPSBrbWFsbG9jKEFMSUdOKGZ3LT5zaXplLCBTTVNfQUxMT0NfQUxJR05NRU5UKSwKKwkJCSAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaWYgKGZ3X2J1ZmZlcikgeworCQltZW1jcHkoZndfYnVmZmVyLCBmdy0+ZGF0YSwgZnctPnNpemUpOworCisJCXJjID0gKGNvcmVkZXYtPmRldmljZV9mbGFncyAmIFNNU19ERVZJQ0VfRkFNSUxZMikgPworCQkgICAgICBzbXNjb3JlX2xvYWRfZmlybXdhcmVfZmFtaWx5Mihjb3JlZGV2LAorCQkJCQkJICAgIGZ3X2J1ZmZlciwKKwkJCQkJCSAgICBmdy0+c2l6ZSkgOgorCQkgICAgICBsb2FkZmlybXdhcmVfaGFuZGxlcihjb3JlZGV2LT5jb250ZXh0LAorCQkJCQkgICBmd19idWZmZXIsIGZ3LT5zaXplKTsKKworCQlrZnJlZShmd19idWZmZXIpOworCX0gZWxzZSB7CisJCXNtc19pbmZvKCJmYWlsZWQgdG8gYWxsb2NhdGUgZmlybXdhcmUgYnVmZmVyIik7CisJCXJjID0gLUVOT01FTTsKKwl9CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBub3RpZmllcyBhbGwgY2xpZW50cyByZWdpc3RlcmVkIHdpdGggdGhlIGRldmljZSwgbm90aWZpZXMgaG90cGx1Z3MsCisgKiBmcmVlcyBhbGwgYnVmZmVycyBhbmQgY29yZWRldiBvYmplY3QKKyAqCisgKiBAcGFyYW0gY29yZWRldiBwb2ludGVyIHRvIGEgY29yZWRldiBvYmplY3QgcmV0dXJuZWQgYnkKKyAqICAgICAgICAgICAgICAgIHNtc2NvcmVfcmVnaXN0ZXJfZGV2aWNlCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGVycm9yLgorICovCit2b2lkIHNtc2NvcmVfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpCit7CisJc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKmNiOworCWludCBudW1fYnVmZmVycyA9IDA7CisJaW50IHJldHJ5ID0gMDsKKworCWttdXRleF9sb2NrKCZnX3Ntc2NvcmVfZGV2aWNlc2xvY2spOworCisJc21zY29yZV9ub3RpZnlfY2xpZW50cyhjb3JlZGV2KTsKKwlzbXNjb3JlX25vdGlmeV9jYWxsYmFja3MoY29yZWRldiwgTlVMTCwgMCk7CisKKwkvKiBhdCB0aGlzIHBvaW50IGFsbCBidWZmZXJzIHNob3VsZCBiZSBiYWNrCisJICogb25yZXNwb25zZSBtdXN0IG5vIGxvbmdlciBiZSBjYWxsZWQgKi8KKworCXdoaWxlICgxKSB7CisJCXdoaWxlICgoY2IgPSBzbXNjb3JlX2dldGJ1ZmZlcihjb3JlZGV2KSkpIHsKKwkJCWtmcmVlKGNiKTsKKwkJCW51bV9idWZmZXJzKys7CisJCX0KKwkJaWYgKG51bV9idWZmZXJzID09IGNvcmVkZXYtPm51bV9idWZmZXJzKQorCQkJYnJlYWs7CisJCWlmICgrK3JldHJ5ID4gMTApIHsKKwkJCXNtc19pbmZvKCJleGl0aW5nIGFsdGhvdWdoICIKKwkJCQkgIm5vdCBhbGwgYnVmZmVycyByZWxlYXNlZC4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc21zX2luZm8oIndhaXRpbmcgZm9yICVkIGJ1ZmZlcihzKSIsCisJCQkgY29yZWRldi0+bnVtX2J1ZmZlcnMgLSBudW1fYnVmZmVycyk7CisJCW1zbGVlcCgxMDApOworCX0KKworCXNtc19pbmZvKCJmcmVlZCAlZCBidWZmZXJzIiwgbnVtX2J1ZmZlcnMpOworCisJaWYgKGNvcmVkZXYtPmNvbW1vbl9idWZmZXIpCisJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIGNvcmVkZXYtPmNvbW1vbl9idWZmZXJfc2l6ZSwKKwkJCQkgIGNvcmVkZXYtPmNvbW1vbl9idWZmZXIsCisJCQkJICBjb3JlZGV2LT5jb21tb25fYnVmZmVyX3BoeXMpOworCisJbGlzdF9kZWwoJmNvcmVkZXYtPmVudHJ5KTsKKwlrZnJlZShjb3JlZGV2KTsKKworCWttdXRleF91bmxvY2soJmdfc21zY29yZV9kZXZpY2VzbG9jayk7CisKKwlzbXNfaW5mbygiZGV2aWNlICVwIGRlc3Ryb3llZCIsIGNvcmVkZXYpOworfQorCitzdGF0aWMgaW50IHNtc2NvcmVfZGV0ZWN0X21vZGUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpCit7CisJdm9pZCAqYnVmZmVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCkgKyBTTVNfRE1BX0FMSUdOTUVOVCwKKwkJCSAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJc3RydWN0IFNtc01zZ0hkcl9TVCAqbXNnID0KKwkJKHN0cnVjdCBTbXNNc2dIZHJfU1QgKikgU01TX0FMSUdOX0FERFJFU1MoYnVmZmVyKTsKKwlpbnQgcmM7CisKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlTTVNfSU5JVF9NU0cobXNnLCBNU0dfU01TX0dFVF9WRVJTSU9OX0VYX1JFUSwKKwkJICAgICBzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCkpOworCisJcmMgPSBzbXNjb3JlX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNvcmVkZXYsIG1zZywgbXNnLT5tc2dMZW5ndGgsCisJCQkJCSAgJmNvcmVkZXYtPnZlcnNpb25fZXhfZG9uZSk7CisJaWYgKHJjID09IC1FVElNRSkgeworCQlzbXNfZXJyKCJNU0dfU01TX0dFVF9WRVJTSU9OX0VYX1JFUSBmYWlsZWQgZmlyc3QgdHJ5Iik7CisKKwkJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY29yZWRldi0+cmVzdW1lX2RvbmUsCisJCQkJCQltc2Vjc190b19qaWZmaWVzKDUwMDApKSkgeworCQkJcmMgPSBzbXNjb3JlX3NlbmRyZXF1ZXN0X2FuZF93YWl0KAorCQkJCWNvcmVkZXYsIG1zZywgbXNnLT5tc2dMZW5ndGgsCisJCQkJJmNvcmVkZXYtPnZlcnNpb25fZXhfZG9uZSk7CisJCQlpZiAocmMgPCAwKQorCQkJCXNtc19lcnIoIk1TR19TTVNfR0VUX1ZFUlNJT05fRVhfUkVRIGZhaWxlZCAiCisJCQkJCSJzZWNvbmQgdHJ5LCByYyAlZCIsIHJjKTsKKwkJfSBlbHNlCisJCQlyYyA9IC1FVElNRTsKKwl9CisKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgY2hhciAqc21zY29yZV9md19sa3VwW11bU01TX05VTV9PRl9ERVZJQ0VfVFlQRVNdID0geworCS8qU3RlbGxhcgkJTk9WQSBBMAkJTm92YSBCMAkJVkVHQSovCisJLypEVkJUKi8KKwl7Im5vbmUiLCAiZHZiX25vdmFfMTJtaHouaW5wIiwgImR2Yl9ub3ZhXzEybWh6X2IwLmlucCIsICJub25lIn0sCisJLypEVkJIKi8KKwl7Im5vbmUiLCAiZHZiX25vdmFfMTJtaHouaW5wIiwgImR2Yl9ub3ZhXzEybWh6X2IwLmlucCIsICJub25lIn0sCisJLypURE1CKi8KKwl7Im5vbmUiLCAidGRtYl9ub3ZhXzEybWh6LmlucCIsICJub25lIiwgIm5vbmUifSwKKwkvKkRBQklQKi8KKwl7Im5vbmUiLCAibm9uZSIsICJub25lIiwgIm5vbmUifSwKKwkvKkJEQSovCisJeyJub25lIiwgImR2Yl9ub3ZhXzEybWh6LmlucCIsICJkdmJfbm92YV8xMm1oel9iMC5pbnAiLCAibm9uZSJ9LAorCS8qSVNEQlQqLworCXsibm9uZSIsICJpc2RidF9ub3ZhXzEybWh6LmlucCIsICJkdmJfbm92YV8xMm1oei5pbnAiLCAibm9uZSJ9LAorCS8qSVNEQlRCREEqLworCXsibm9uZSIsICJpc2RidF9ub3ZhXzEybWh6LmlucCIsICJpc2RidF9ub3ZhXzEybWh6X2IwLmlucCIsICJub25lIn0sCisJLypDTU1CKi8KKwl7Im5vbmUiLCAibm9uZSIsICJub25lIiwgImNtbWJfdmVnYV8xMm1oei5pbnAifQorfTsKKworc3RhdGljIGlubGluZSBjaGFyICpzbXNfZ2V0X2Z3X25hbWUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkJICAgIGludCBtb2RlLCBlbnVtIHNtc19kZXZpY2VfdHlwZV9zdCB0eXBlKQoreworCWNoYXIgKipmdyA9IHNtc19nZXRfYm9hcmQoc21zY29yZV9nZXRfYm9hcmRfaWQoY29yZWRldikpLT5mdzsKKwlyZXR1cm4gKGZ3ICYmIGZ3W21vZGVdKSA/IGZ3W21vZGVdIDogc21zY29yZV9md19sa3VwW21vZGVdW3R5cGVdOworfQorCisvKioKKyAqIGNhbGxzIGRldmljZSBoYW5kbGVyIHRvIGNoYW5nZSBtb2RlIG9mIG9wZXJhdGlvbgorICogTk9URTogc3RlbGxhci91c2IgbWF5IGRpc2Nvbm5lY3Qgd2hlbiBjaGFuZ2luZyBtb2RlCisgKgorICogQHBhcmFtIGNvcmVkZXYgcG9pbnRlciB0byBhIGNvcmVkZXYgb2JqZWN0IHJldHVybmVkIGJ5CisgKiAgICAgICAgICAgICAgICBzbXNjb3JlX3JlZ2lzdGVyX2RldmljZQorICogQHBhcmFtIG1vZGUgcmVxdWVzdGVkIG1vZGUgb2Ygb3BlcmF0aW9uCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGVycm9yLgorICovCitpbnQgc21zY29yZV9zZXRfZGV2aWNlX21vZGUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBtb2RlKQoreworCXZvaWQgKmJ1ZmZlcjsKKwlpbnQgcmMgPSAwOworCWVudW0gc21zX2RldmljZV90eXBlX3N0IHR5cGU7CisKKwlzbXNfZGVidWcoInNldCBkZXZpY2UgbW9kZSB0byAlZCIsIG1vZGUpOworCWlmIChjb3JlZGV2LT5kZXZpY2VfZmxhZ3MgJiBTTVNfREVWSUNFX0ZBTUlMWTIpIHsKKwkJaWYgKG1vZGUgPCBERVZJQ0VfTU9ERV9EVkJUIHx8IG1vZGUgPiBERVZJQ0VfTU9ERV9SQVdfVFVORVIpIHsKKwkJCXNtc19lcnIoImludmFsaWQgbW9kZSBzcGVjaWZpZWQgJWQiLCBtb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc21zY29yZV9yZWdpc3RyeV9zZXRtb2RlKGNvcmVkZXYtPmRldnBhdGgsIG1vZGUpOworCisJCWlmICghKGNvcmVkZXYtPmRldmljZV9mbGFncyAmIFNNU19ERVZJQ0VfTk9UX1JFQURZKSkgeworCQkJcmMgPSBzbXNjb3JlX2RldGVjdF9tb2RlKGNvcmVkZXYpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCXNtc19lcnIoIm1vZGUgZGV0ZWN0IGZhaWxlZCAlZCIsIHJjKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCX0KKworCQlpZiAoY29yZWRldi0+bW9kZSA9PSBtb2RlKSB7CisJCQlzbXNfaW5mbygiZGV2aWNlIG1vZGUgJWQgYWxyZWFkeSBzZXQiLCBtb2RlKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKCEoY29yZWRldi0+bW9kZXNfc3VwcG9ydGVkICYgKDEgPDwgbW9kZSkpKSB7CisJCQljaGFyICpmd19maWxlbmFtZTsKKworCQkJdHlwZSA9IHNtc2NvcmVfcmVnaXN0cnlfZ2V0dHlwZShjb3JlZGV2LT5kZXZwYXRoKTsKKwkJCWZ3X2ZpbGVuYW1lID0gc21zX2dldF9md19uYW1lKGNvcmVkZXYsIG1vZGUsIHR5cGUpOworCisJCQlyYyA9IHNtc2NvcmVfbG9hZF9maXJtd2FyZV9mcm9tX2ZpbGUoY29yZWRldiwKKwkJCQkJCQkgICAgIGZ3X2ZpbGVuYW1lLCBOVUxMKTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlzbXNfd2FybigiZXJyb3IgJWQgbG9hZGluZyBmaXJtd2FyZTogJXMsICIKKwkJCQkJICJ0cnlpbmcgYWdhaW4gd2l0aCBkZWZhdWx0IGZpcm13YXJlIiwKKwkJCQkJIHJjLCBmd19maWxlbmFtZSk7CisKKwkJCQkvKiB0cnkgYWdhaW4gd2l0aCB0aGUgZGVmYXVsdCBmaXJtd2FyZSAqLworCQkJCWZ3X2ZpbGVuYW1lID0gc21zY29yZV9md19sa3VwW21vZGVdW3R5cGVdOworCQkJCXJjID0gc21zY29yZV9sb2FkX2Zpcm13YXJlX2Zyb21fZmlsZShjb3JlZGV2LAorCQkJCQkJCSAgICAgZndfZmlsZW5hbWUsIE5VTEwpOworCisJCQkJaWYgKHJjIDwgMCkgeworCQkJCQlzbXNfd2FybigiZXJyb3IgJWQgbG9hZGluZyAiCisJCQkJCQkgImZpcm13YXJlOiAlcyIsIHJjLAorCQkJCQkJIGZ3X2ZpbGVuYW1lKTsKKwkJCQkJcmV0dXJuIHJjOworCQkJCX0KKwkJCX0KKwkJCXNtc19sb2coImZpcm13YXJlIGRvd25sb2FkIHN1Y2Nlc3M6ICVzIiwgZndfZmlsZW5hbWUpOworCQl9IGVsc2UKKwkJCXNtc19pbmZvKCJtb2RlICVkIHN1cHBvcnRlZCBieSBydW5uaW5nICIKKwkJCQkgImZpcm13YXJlIiwgbW9kZSk7CisKKwkJYnVmZmVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IFNtc01zZ0RhdGFfU1QpICsKKwkJCQkgU01TX0RNQV9BTElHTk1FTlQsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwkJaWYgKGJ1ZmZlcikgeworCQkJc3RydWN0IFNtc01zZ0RhdGFfU1QgKm1zZyA9CisJCQkJKHN0cnVjdCBTbXNNc2dEYXRhX1NUICopCisJCQkJCVNNU19BTElHTl9BRERSRVNTKGJ1ZmZlcik7CisKKwkJCVNNU19JTklUX01TRygmbXNnLT54TXNnSGVhZGVyLCBNU0dfU01TX0lOSVRfREVWSUNFX1JFUSwKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgU21zTXNnRGF0YV9TVCkpOworCQkJbXNnLT5tc2dEYXRhWzBdID0gbW9kZTsKKworCQkJcmMgPSBzbXNjb3JlX3NlbmRyZXF1ZXN0X2FuZF93YWl0KAorCQkJCWNvcmVkZXYsIG1zZywgbXNnLT54TXNnSGVhZGVyLm1zZ0xlbmd0aCwKKwkJCQkmY29yZWRldi0+aW5pdF9kZXZpY2VfZG9uZSk7CisKKwkJCWtmcmVlKGJ1ZmZlcik7CisJCX0gZWxzZSB7CisJCQlzbXNfZXJyKCJDb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyIGZvciAiCisJCQkJImluaXQgZGV2aWNlIG1lc3NhZ2UuIik7CisJCQlyYyA9IC1FTk9NRU07CisJCX0KKwl9IGVsc2UgeworCQlpZiAobW9kZSA8IERFVklDRV9NT0RFX0RWQlQgfHwgbW9kZSA+IERFVklDRV9NT0RFX0RWQlRfQkRBKSB7CisJCQlzbXNfZXJyKCJpbnZhbGlkIG1vZGUgc3BlY2lmaWVkICVkIiwgbW9kZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXNtc2NvcmVfcmVnaXN0cnlfc2V0bW9kZShjb3JlZGV2LT5kZXZwYXRoLCBtb2RlKTsKKworCQlpZiAoY29yZWRldi0+ZGV0ZWN0bW9kZV9oYW5kbGVyKQorCQkJY29yZWRldi0+ZGV0ZWN0bW9kZV9oYW5kbGVyKGNvcmVkZXYtPmNvbnRleHQsCisJCQkJCQkgICAgJmNvcmVkZXYtPm1vZGUpOworCisJCWlmIChjb3JlZGV2LT5tb2RlICE9IG1vZGUgJiYgY29yZWRldi0+c2V0bW9kZV9oYW5kbGVyKQorCQkJcmMgPSBjb3JlZGV2LT5zZXRtb2RlX2hhbmRsZXIoY29yZWRldi0+Y29udGV4dCwgbW9kZSk7CisJfQorCisJaWYgKHJjID49IDApIHsKKwkJY29yZWRldi0+bW9kZSA9IG1vZGU7CisJCWNvcmVkZXYtPmRldmljZV9mbGFncyAmPSB+U01TX0RFVklDRV9OT1RfUkVBRFk7CisJfQorCisJaWYgKHJjICE9IDApCisJCXNtc19lcnIoInJldHVybiBlcnJvciBjb2RlICVkLiIsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogY2FsbHMgZGV2aWNlIGhhbmRsZXIgdG8gZ2V0IGN1cnJlbnQgbW9kZSBvZiBvcGVyYXRpb24KKyAqCisgKiBAcGFyYW0gY29yZWRldiBwb2ludGVyIHRvIGEgY29yZWRldiBvYmplY3QgcmV0dXJuZWQgYnkKKyAqICAgICAgICAgICAgICAgIHNtc2NvcmVfcmVnaXN0ZXJfZGV2aWNlCisgKgorICogQHJldHVybiBjdXJyZW50IG1vZGUKKyAqLworaW50IHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KQoreworCXJldHVybiBjb3JlZGV2LT5tb2RlOworfQorCisvKioKKyAqIGZpbmQgY2xpZW50IGJ5IHJlc3BvbnNlIGlkICYgdHlwZSB3aXRoaW4gdGhlIGNsaWVudHMgbGlzdC4KKyAqIHJldHVybiBjbGllbnQgaGFuZGxlIG9yIE5VTEwuCisgKgorICogQHBhcmFtIGNvcmVkZXYgcG9pbnRlciB0byBhIGNvcmVkZXYgb2JqZWN0IHJldHVybmVkIGJ5CisgKiAgICAgICAgICAgICAgICBzbXNjb3JlX3JlZ2lzdGVyX2RldmljZQorICogQHBhcmFtIGRhdGFfdHlwZSBjbGllbnQgZGF0YSB0eXBlIChTTVNfRE9OVF9DQVJFIGZvciBhbGwgdHlwZXMpCisgKiBAcGFyYW0gaWQgY2xpZW50IGlkIChTTVNfRE9OVF9DQVJFIGZvciBhbGwgaWQpCisgKgorICovCitzdGF0aWMgc3RydWN0CitzbXNjb3JlX2NsaWVudF90ICpzbXNjb3JlX2ZpbmRfY2xpZW50KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJCSAgICAgIGludCBkYXRhX3R5cGUsIGludCBpZCkKK3sKKwlzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdCAqY2xpZW50ID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0LCAqZmlyc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdGlkLCAqbmV4dGlkOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29yZWRldi0+Y2xpZW50c2xvY2ssIGZsYWdzKTsKKwlmaXJzdCA9ICZjb3JlZGV2LT5jbGllbnRzOworCWZvciAobmV4dCA9IGZpcnN0LT5uZXh0OworCSAgICAgKG5leHQgIT0gZmlyc3QpICYmICFjbGllbnQ7CisJICAgICBuZXh0ID0gbmV4dC0+bmV4dCkgeworCQlmaXJzdGlkID0gJigoc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKiluZXh0KS0+aWRsaXN0OworCQlmb3IgKG5leHRpZCA9IGZpcnN0aWQtPm5leHQ7CisJCSAgICAgbmV4dGlkICE9IGZpcnN0aWQ7CisJCSAgICAgbmV4dGlkID0gbmV4dGlkLT5uZXh0KSB7CisJCQlpZiAoKCgoc3RydWN0IHNtc2NvcmVfaWRsaXN0X3QgKiluZXh0aWQpLT5pZCA9PSBpZCkgJiYKKwkJCSAgICAoKChzdHJ1Y3Qgc21zY29yZV9pZGxpc3RfdCAqKW5leHRpZCktPmRhdGFfdHlwZSA9PSBkYXRhX3R5cGUgfHwKKwkJCSAgICAoKChzdHJ1Y3Qgc21zY29yZV9pZGxpc3RfdCAqKW5leHRpZCktPmRhdGFfdHlwZSA9PSAwKSkpIHsKKwkJCQljbGllbnQgPSAoc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKikgbmV4dDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlZGV2LT5jbGllbnRzbG9jaywgZmxhZ3MpOworCXJldHVybiBjbGllbnQ7Cit9CisKKy8qKgorICogZmluZCBjbGllbnQgYnkgcmVzcG9uc2UgaWQvdHlwZSwgY2FsbCBjbGllbnRzIG9ucmVzcG9uc2UgaGFuZGxlcgorICogcmV0dXJuIGJ1ZmZlciB0byBwb29sIG9uIGVycm9yCisgKgorICogQHBhcmFtIGNvcmVkZXYgcG9pbnRlciB0byBhIGNvcmVkZXYgb2JqZWN0IHJldHVybmVkIGJ5CisgKiAgICAgICAgICAgICAgICBzbXNjb3JlX3JlZ2lzdGVyX2RldmljZQorICogQHBhcmFtIGNiIHBvaW50ZXIgdG8gcmVzcG9uc2UgYnVmZmVyIGRlc2NyaXB0b3IKKyAqCisgKi8KK3ZvaWQgc21zY29yZV9vbnJlc3BvbnNlKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKmNiKQoreworCXN0cnVjdCBTbXNNc2dIZHJfU1QgKnBoZHIgPQorCQkoc3RydWN0IFNtc01zZ0hkcl9TVCAqKSgodTggKikgY2ItPnAgKyBjYi0+b2Zmc2V0KTsKKwlzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdCAqY2xpZW50ID0KKwkJc21zY29yZV9maW5kX2NsaWVudChjb3JlZGV2LCBwaGRyLT5tc2dUeXBlLCBwaGRyLT5tc2dEc3RJZCk7CisJaW50IHJjID0gLUVCVVNZOworCisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9zYW1wbGVfdGltZTsgLyogPSAwOyAqLworCXN0YXRpYyBpbnQgZGF0YV90b3RhbDsgLyogPSAwOyAqLworCXVuc2lnbmVkIGxvbmcgdGltZV9ub3cgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOworCisJaWYgKCFsYXN0X3NhbXBsZV90aW1lKQorCQlsYXN0X3NhbXBsZV90aW1lID0gdGltZV9ub3c7CisKKwlpZiAodGltZV9ub3cgLSBsYXN0X3NhbXBsZV90aW1lID4gMTAwMDApIHsKKwkJc21zX2RlYnVnKCJcbmRhdGEgcmF0ZSAlZCBieXRlcy9zZWNzIiwKKwkJCSAgKGludCkoKGRhdGFfdG90YWwgKiAxMDAwKSAvCisJCQkJKHRpbWVfbm93IC0gbGFzdF9zYW1wbGVfdGltZSkpKTsKKworCQlsYXN0X3NhbXBsZV90aW1lID0gdGltZV9ub3c7CisJCWRhdGFfdG90YWwgPSAwOworCX0KKworCWRhdGFfdG90YWwgKz0gY2ItPnNpemU7CisJLyogSWYgbm8gY2xpZW50IHJlZ2lzdGVyZWQgZm9yIHR5cGUgJiBpZCwKKwkgKiBjaGVjayBmb3IgY29udHJvbCBjbGllbnQgd2hlcmUgdHlwZSBpcyBub3QgcmVnaXN0ZXJlZCAqLworCWlmIChjbGllbnQpCisJCXJjID0gY2xpZW50LT5vbnJlc3BvbnNlX2hhbmRsZXIoY2xpZW50LT5jb250ZXh0LCBjYik7CisKKwlpZiAocmMgPCAwKSB7CisJCXN3aXRjaCAocGhkci0+bXNnVHlwZSkgeworCQljYXNlIE1TR19TTVNfR0VUX1ZFUlNJT05fRVhfUkVTOgorCQl7CisJCQlzdHJ1Y3QgU21zVmVyc2lvblJlc19TVCAqdmVyID0KKwkJCQkoc3RydWN0IFNtc1ZlcnNpb25SZXNfU1QgKikgcGhkcjsKKwkJCXNtc19kZWJ1ZygiTVNHX1NNU19HRVRfVkVSU0lPTl9FWF9SRVMgIgorCQkJCSAgImlkICVkIHByb3RzIDB4JXggdmVyICVkLiVkIiwKKwkJCQkgIHZlci0+RmlybXdhcmVJZCwgdmVyLT5TdXBwb3J0ZWRQcm90b2NvbHMsCisJCQkJICB2ZXItPlJvbVZlcnNpb25NYWpvciwgdmVyLT5Sb21WZXJzaW9uTWlub3IpOworCisJCQljb3JlZGV2LT5tb2RlID0gdmVyLT5GaXJtd2FyZUlkID09IDI1NSA/CisJCQkJREVWSUNFX01PREVfTk9ORSA6IHZlci0+RmlybXdhcmVJZDsKKwkJCWNvcmVkZXYtPm1vZGVzX3N1cHBvcnRlZCA9IHZlci0+U3VwcG9ydGVkUHJvdG9jb2xzOworCisJCQljb21wbGV0ZSgmY29yZWRldi0+dmVyc2lvbl9leF9kb25lKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgTVNHX1NNU19JTklUX0RFVklDRV9SRVM6CisJCQlzbXNfZGVidWcoIk1TR19TTVNfSU5JVF9ERVZJQ0VfUkVTIik7CisJCQljb21wbGV0ZSgmY29yZWRldi0+aW5pdF9kZXZpY2VfZG9uZSk7CisJCQlicmVhazsKKwkJY2FzZSBNU0dfU1dfUkVMT0FEX1NUQVJUX1JFUzoKKwkJCXNtc19kZWJ1ZygiTVNHX1NXX1JFTE9BRF9TVEFSVF9SRVMiKTsKKwkJCWNvbXBsZXRlKCZjb3JlZGV2LT5yZWxvYWRfc3RhcnRfZG9uZSk7CisJCQlicmVhazsKKwkJY2FzZSBNU0dfU01TX0RBVEFfRE9XTkxPQURfUkVTOgorCQkJY29tcGxldGUoJmNvcmVkZXYtPmRhdGFfZG93bmxvYWRfZG9uZSk7CisJCQlicmVhazsKKwkJY2FzZSBNU0dfU1dfUkVMT0FEX0VYRUNfUkVTOgorCQkJc21zX2RlYnVnKCJNU0dfU1dfUkVMT0FEX0VYRUNfUkVTIik7CisJCQlicmVhazsKKwkJY2FzZSBNU0dfU01TX1NXRE9XTkxPQURfVFJJR0dFUl9SRVM6CisJCQlzbXNfZGVidWcoIk1TR19TTVNfU1dET1dOTE9BRF9UUklHR0VSX1JFUyIpOworCQkJY29tcGxldGUoJmNvcmVkZXYtPnRyaWdnZXJfZG9uZSk7CisJCQlicmVhazsKKwkJY2FzZSBNU0dfU01TX1NMRUVQX1JFU1VNRV9DT01QX0lORDoKKwkJCWNvbXBsZXRlKCZjb3JlZGV2LT5yZXN1bWVfZG9uZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCXNtc2NvcmVfcHV0YnVmZmVyKGNvcmVkZXYsIGNiKTsKKwl9Cit9CisKKy8qKgorICogcmV0dXJuIHBvaW50ZXIgdG8gbmV4dCBmcmVlIGJ1ZmZlciBkZXNjcmlwdG9yIGZyb20gY29yZSBwb29sCisgKgorICogQHBhcmFtIGNvcmVkZXYgcG9pbnRlciB0byBhIGNvcmVkZXYgb2JqZWN0IHJldHVybmVkIGJ5CisgKiAgICAgICAgICAgICAgICBzbXNjb3JlX3JlZ2lzdGVyX2RldmljZQorICoKKyAqIEByZXR1cm4gcG9pbnRlciB0byBkZXNjcmlwdG9yIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZXJyb3IuCisgKi8KK3N0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpzbXNjb3JlX2dldGJ1ZmZlcihzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldikKK3sKKwlzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29yZWRldi0+YnVmZmVyc2xvY2ssIGZsYWdzKTsKKworCWlmICghbGlzdF9lbXB0eSgmY29yZWRldi0+YnVmZmVycykpIHsKKwkJY2IgPSAoc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKikgY29yZWRldi0+YnVmZmVycy5uZXh0OworCQlsaXN0X2RlbCgmY2ItPmVudHJ5KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlZGV2LT5idWZmZXJzbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNiOworfQorCisvKioKKyAqIHJldHVybiBidWZmZXIgZGVzY3JpcHRvciB0byBhIHBvb2wKKyAqCisgKiBAcGFyYW0gY29yZWRldiBwb2ludGVyIHRvIGEgY29yZWRldiBvYmplY3QgcmV0dXJuZWQgYnkKKyAqICAgICAgICAgICAgICAgIHNtc2NvcmVfcmVnaXN0ZXJfZGV2aWNlCisgKiBAcGFyYW0gY2IgcG9pbnRlciBidWZmZXIgZGVzY3JpcHRvcgorICoKKyAqLwordm9pZCBzbXNjb3JlX3B1dGJ1ZmZlcihzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKKwkJICAgICAgIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYikKK3sKKwlsaXN0X2FkZF9sb2NrZWQoJmNiLT5lbnRyeSwgJmNvcmVkZXYtPmJ1ZmZlcnMsICZjb3JlZGV2LT5idWZmZXJzbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc21zY29yZV92YWxpZGF0ZV9jbGllbnQoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkJICAgc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKmNsaWVudCwKKwkJCQkgICBpbnQgZGF0YV90eXBlLCBpbnQgaWQpCit7CisJc3RydWN0IHNtc2NvcmVfaWRsaXN0X3QgKmxpc3RlbnRyeTsKKwlzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdCAqcmVnaXN0ZXJlZF9jbGllbnQ7CisKKwlpZiAoIWNsaWVudCkgeworCQlzbXNfZXJyKCJiYWQgcGFyYW1ldGVyLiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmVnaXN0ZXJlZF9jbGllbnQgPSBzbXNjb3JlX2ZpbmRfY2xpZW50KGNvcmVkZXYsIGRhdGFfdHlwZSwgaWQpOworCWlmIChyZWdpc3RlcmVkX2NsaWVudCA9PSBjbGllbnQpCisJCXJldHVybiAwOworCisJaWYgKHJlZ2lzdGVyZWRfY2xpZW50KSB7CisJCXNtc19lcnIoIlRoZSBtc2cgSUQgYWxyZWFkeSByZWdpc3RlcmVkIHRvIGFub3RoZXIgY2xpZW50LiIpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisJbGlzdGVudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNtc2NvcmVfaWRsaXN0X3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxpc3RlbnRyeSkgeworCQlzbXNfZXJyKCJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNsaWVudCBpZC4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWxpc3RlbnRyeS0+aWQgPSBpZDsKKwlsaXN0ZW50cnktPmRhdGFfdHlwZSA9IGRhdGFfdHlwZTsKKwlsaXN0X2FkZF9sb2NrZWQoJmxpc3RlbnRyeS0+ZW50cnksICZjbGllbnQtPmlkbGlzdCwKKwkJCSZjb3JlZGV2LT5jbGllbnRzbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY3JlYXRlcyBzbXNjbGllbnQgb2JqZWN0LCBjaGVjayB0aGF0IGlkIGlzIHRha2VuIGJ5IGFub3RoZXIgY2xpZW50CisgKgorICogQHBhcmFtIGNvcmVkZXYgcG9pbnRlciB0byBhIGNvcmVkZXYgb2JqZWN0IGZyb20gY2xpZW50cyBob3RwbHVnCisgKiBAcGFyYW0gaW5pdGlhbF9pZCBhbGwgbWVzc2FnZXMgd2l0aCB0aGlzIGlkIHdvdWxkIGJlIHNlbnQgdG8gdGhpcyBjbGllbnQKKyAqIEBwYXJhbSBkYXRhX3R5cGUgYWxsIG1lc3NhZ2VzIG9mIHRoaXMgdHlwZSB3b3VsZCBiZSBzZW50IHRvIHRoaXMgY2xpZW50CisgKiBAcGFyYW0gb25yZXNwb25zZV9oYW5kbGVyIGNsaWVudCBoYW5kbGVyIHRoYXQgaXMgY2FsbGVkIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgaW5jb21pbmcgbWVzc2FnZXMKKyAqIEBwYXJhbSBvbnJlbW92ZV9oYW5kbGVyIGNsaWVudCBoYW5kbGVyIHRoYXQgaXMgY2FsbGVkIHdoZW4gZGV2aWNlIGlzIHJlbW92ZWQKKyAqIEBwYXJhbSBjb250ZXh0IGNsaWVudC1zcGVjaWZpYyBjb250ZXh0CisgKiBAcGFyYW0gY2xpZW50IHBvaW50ZXIgdG8gYSB2YWx1ZSB0aGF0IHJlY2VpdmVzIGNyZWF0ZWQgc21zY2xpZW50IG9iamVjdAorICoKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCA8MCBvbiBlcnJvci4KKyAqLworaW50IHNtc2NvcmVfcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJICAgIHN0cnVjdCBzbXNjbGllbnRfcGFyYW1zX3QgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdCAqKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdCAqbmV3Y2xpZW50OworCS8qIGNoZWNrIHRoYXQgbm8gb3RoZXIgY2hhbm5lbCB3aXRoIHNhbWUgcGFyYW1ldGVycyBleGlzdHMgKi8KKwlpZiAoc21zY29yZV9maW5kX2NsaWVudChjb3JlZGV2LCBwYXJhbXMtPmRhdGFfdHlwZSwKKwkJCQlwYXJhbXMtPmluaXRpYWxfaWQpKSB7CisJCXNtc19lcnIoIkNsaWVudCBhbHJlYWR5IGV4aXN0LiIpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwluZXdjbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdCksIEdGUF9LRVJORUwpOworCWlmICghbmV3Y2xpZW50KSB7CisJCXNtc19lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNsaWVudC4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJm5ld2NsaWVudC0+aWRsaXN0KTsKKwluZXdjbGllbnQtPmNvcmVkZXYgPSBjb3JlZGV2OworCW5ld2NsaWVudC0+b25yZXNwb25zZV9oYW5kbGVyID0gcGFyYW1zLT5vbnJlc3BvbnNlX2hhbmRsZXI7CisJbmV3Y2xpZW50LT5vbnJlbW92ZV9oYW5kbGVyID0gcGFyYW1zLT5vbnJlbW92ZV9oYW5kbGVyOworCW5ld2NsaWVudC0+Y29udGV4dCA9IHBhcmFtcy0+Y29udGV4dDsKKwlsaXN0X2FkZF9sb2NrZWQoJm5ld2NsaWVudC0+ZW50cnksICZjb3JlZGV2LT5jbGllbnRzLAorCQkJJmNvcmVkZXYtPmNsaWVudHNsb2NrKTsKKwlzbXNjb3JlX3ZhbGlkYXRlX2NsaWVudChjb3JlZGV2LCBuZXdjbGllbnQsIHBhcmFtcy0+ZGF0YV90eXBlLAorCQkJCXBhcmFtcy0+aW5pdGlhbF9pZCk7CisJKmNsaWVudCA9IG5ld2NsaWVudDsKKwlzbXNfZGVidWcoIiVwICVkICVkIiwgcGFyYW1zLT5jb250ZXh0LCBwYXJhbXMtPmRhdGFfdHlwZSwKKwkJICBwYXJhbXMtPmluaXRpYWxfaWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZnJlZXMgc21zY2xpZW50IG9iamVjdCBhbmQgYWxsIHN1YmNsaWVudHMgYXNzb2NpYXRlZCB3aXRoIGl0CisgKgorICogQHBhcmFtIGNsaWVudCBwb2ludGVyIHRvIHNtc2NsaWVudCBvYmplY3QgcmV0dXJuZWQgYnkKKyAqICAgICAgICAgICAgICAgc21zY29yZV9yZWdpc3Rlcl9jbGllbnQKKyAqCisgKi8KK3ZvaWQgc21zY29yZV91bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdCAqY2xpZW50KQoreworCXN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2ID0gY2xpZW50LT5jb3JlZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29yZWRldi0+Y2xpZW50c2xvY2ssIGZsYWdzKTsKKworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjbGllbnQtPmlkbGlzdCkpIHsKKwkJc3RydWN0IHNtc2NvcmVfaWRsaXN0X3QgKmlkZW50cnkgPQorCQkJKHN0cnVjdCBzbXNjb3JlX2lkbGlzdF90ICopIGNsaWVudC0+aWRsaXN0Lm5leHQ7CisJCWxpc3RfZGVsKCZpZGVudHJ5LT5lbnRyeSk7CisJCWtmcmVlKGlkZW50cnkpOworCX0KKworCXNtc19pbmZvKCIlcCIsIGNsaWVudC0+Y29udGV4dCk7CisKKwlsaXN0X2RlbCgmY2xpZW50LT5lbnRyeSk7CisJa2ZyZWUoY2xpZW50KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvcmVkZXYtPmNsaWVudHNsb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogdmVyaWZpZXMgdGhhdCBzb3VyY2UgaWQgaXMgbm90IHRha2VuIGJ5IGFub3RoZXIgY2xpZW50LAorICogY2FsbHMgZGV2aWNlIGhhbmRsZXIgdG8gc2VuZCByZXF1ZXN0cyB0byB0aGUgZGV2aWNlCisgKgorICogQHBhcmFtIGNsaWVudCBwb2ludGVyIHRvIHNtc2NsaWVudCBvYmplY3QgcmV0dXJuZWQgYnkKKyAqICAgICAgICAgICAgICAgc21zY29yZV9yZWdpc3Rlcl9jbGllbnQKKyAqIEBwYXJhbSBidWZmZXIgcG9pbnRlciB0byBhIHJlcXVlc3QgYnVmZmVyCisgKiBAcGFyYW0gc2l6ZSBzaXplIChpbiBieXRlcykgb2YgcmVxdWVzdCBidWZmZXIKKyAqCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IuCisgKi8KK2ludCBzbXNjbGllbnRfc2VuZHJlcXVlc3Qoc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKmNsaWVudCwKKwkJCSAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldjsKKwlzdHJ1Y3QgU21zTXNnSGRyX1NUICpwaGRyID0gKHN0cnVjdCBTbXNNc2dIZHJfU1QgKikgYnVmZmVyOworCWludCByYzsKKworCWlmIChjbGllbnQgPT0gTlVMTCkgeworCQlzbXNfZXJyKCJHb3QgTlVMTCBjbGllbnQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29yZWRldiA9IGNsaWVudC0+Y29yZWRldjsKKworCS8qIGNoZWNrIHRoYXQgbm8gb3RoZXIgY2hhbm5lbCB3aXRoIHNhbWUgaWQgZXhpc3RzICovCisJaWYgKGNvcmVkZXYgPT0gTlVMTCkgeworCQlzbXNfZXJyKCJHb3QgTlVMTCBjb3JlZGV2Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJjID0gc21zY29yZV92YWxpZGF0ZV9jbGllbnQoY2xpZW50LT5jb3JlZGV2LCBjbGllbnQsIDAsCisJCQkJICAgICBwaGRyLT5tc2dTcmNJZCk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIGNvcmVkZXYtPnNlbmRyZXF1ZXN0X2hhbmRsZXIoY29yZWRldi0+Y29udGV4dCwgYnVmZmVyLCBzaXplKTsKK30KKworCitpbnQgc21zY29yZV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByYyA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmZ19zbXNjb3JlX25vdGlmeWVlcyk7CisJSU5JVF9MSVNUX0hFQUQoJmdfc21zY29yZV9kZXZpY2VzKTsKKwlrbXV0ZXhfaW5pdCgmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZnX3Ntc2NvcmVfcmVnaXN0cnkpOworCWttdXRleF9pbml0KCZnX3Ntc2NvcmVfcmVnaXN0cnlsb2NrKTsKKworCS8qIFVTQiBSZWdpc3RlciAqLworCXJjID0gc21zdXNiX3JlZ2lzdGVyKCk7CisKKwkvKiBEVkIgUmVnaXN0ZXIgKi8KKwlyYyA9IHNtc2R2Yl9yZWdpc3RlcigpOworCisJc21zX2RlYnVnKCJyYyAlZCIsIHJjKTsKKworCXJldHVybiByYzsKK30KKwordm9pZCBzbXNjb3JlX21vZHVsZV9leGl0KHZvaWQpCit7CisKKwlrbXV0ZXhfbG9jaygmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmdfc21zY29yZV9ub3RpZnllZXMpKSB7CisJCXN0cnVjdCBzbXNjb3JlX2RldmljZV9ub3RpZnllZV90ICpub3RpZnllZSA9CisJCQkoc3RydWN0IHNtc2NvcmVfZGV2aWNlX25vdGlmeWVlX3QgKikKKwkJCQlnX3Ntc2NvcmVfbm90aWZ5ZWVzLm5leHQ7CisKKwkJbGlzdF9kZWwoJm5vdGlmeWVlLT5lbnRyeSk7CisJCWtmcmVlKG5vdGlmeWVlKTsKKwl9CisJa211dGV4X3VubG9jaygmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKKworCWttdXRleF9sb2NrKCZnX3Ntc2NvcmVfcmVnaXN0cnlsb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmdfc21zY29yZV9yZWdpc3RyeSkpIHsKKwkJc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCAqZW50cnkgPQorCQkJKHN0cnVjdCBzbXNjb3JlX3JlZ2lzdHJ5X2VudHJ5X3QgKikKKwkJCQlnX3Ntc2NvcmVfcmVnaXN0cnkubmV4dDsKKworCQlsaXN0X2RlbCgmZW50cnktPmVudHJ5KTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKwlrbXV0ZXhfdW5sb2NrKCZnX3Ntc2NvcmVfcmVnaXN0cnlsb2NrKTsKKworCS8qIERWQiBVblJlZ2lzdGVyICovCisJc21zZHZiX3VucmVnaXN0ZXIoKTsKKworCS8qIFVucmVnaXN0ZXIgVVNCICovCisJc21zdXNiX3VucmVnaXN0ZXIoKTsKKworCXNtc19kZWJ1ZygiIik7Cit9CisKK21vZHVsZV9pbml0KHNtc2NvcmVfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoc21zY29yZV9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgU2lhbm8gU01TMVhYWCBVU0IgZG9uZ2xlIik7CitNT0RVTEVfQVVUSE9SKCJTaWFubyBNb2JpbGUgU2lsaWNvbiwsLCAoZG9yb25jQHNpYW5vLW1zLmNvbSkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWY4ZjFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIFNpYW5vIFNNUzF4eHggVVNCIGRvbmdsZQorICoKKyAqICBhdXRob3I6IEFuYXRvbHkgR3JlZW5ibGF0CisgKgorICogIENvcHlyaWdodCAoYyksIDIwMDUtMjAwOCBTaWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKgorICogIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKKyAqICBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX3Ntc2NvcmVhcGlfaF9fCisjZGVmaW5lIF9fc21zY29yZWFwaV9oX18KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgImRteGRldi5oIgorI2luY2x1ZGUgImR2YmRldi5oIgorI2luY2x1ZGUgImR2Yl9kZW11eC5oIgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2RlZmluZSBrbXV0ZXhfaW5pdChfcF8pIG11dGV4X2luaXQoX3BfKQorI2RlZmluZSBrbXV0ZXhfbG9jayhfcF8pIG11dGV4X2xvY2soX3BfKQorI2RlZmluZSBrbXV0ZXhfdHJ5bG9jayhfcF8pIG11dGV4X3RyeWxvY2soX3BfKQorI2RlZmluZSBrbXV0ZXhfdW5sb2NrKF9wXykgbXV0ZXhfdW5sb2NrKF9wXykKKworI2lmbmRlZiBtaW4KKyNkZWZpbmUgbWluKGEsIGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgorCisjZGVmaW5lIFNNU19BTExPQ19BTElHTk1FTlQJCQkJCTEyOAorI2RlZmluZSBTTVNfRE1BX0FMSUdOTUVOVAkJCQkJMTYKKyNkZWZpbmUgU01TX0FMSUdOX0FERFJFU1MoYWRkcikgXAorCSgoKCh1aW50cHRyX3QpKGFkZHIpKSArIChTTVNfRE1BX0FMSUdOTUVOVC0xKSkgJiB+KFNNU19ETUFfQUxJR05NRU5ULTEpKQorCisjZGVmaW5lIFNNU19ERVZJQ0VfRkFNSUxZMgkJCQkJMQorI2RlZmluZSBTTVNfUk9NX05PX1JFU1BPTlNFCQkJCQkyCisjZGVmaW5lIFNNU19ERVZJQ0VfTk9UX1JFQURZCQkJCTB4ODAwMDAwMAorCitlbnVtIHNtc19kZXZpY2VfdHlwZV9zdCB7CisJU01TX1NURUxMQVIgPSAwLAorCVNNU19OT1ZBX0EwLAorCVNNU19OT1ZBX0IwLAorCVNNU19WRUdBLAorCVNNU19OVU1fT0ZfREVWSUNFX1RZUEVTCit9OworCitzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdDsKK3N0cnVjdCBzbXNjb3JlX2NsaWVudF90Oworc3RydWN0IHNtc2NvcmVfYnVmZmVyX3Q7CisKK3R5cGVkZWYgaW50ICgqaG90cGx1Z190KShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIGludCBhcnJpdmFsKTsKKwordHlwZWRlZiBpbnQgKCpzZXRtb2RlX3QpKHZvaWQgKmNvbnRleHQsIGludCBtb2RlKTsKK3R5cGVkZWYgdm9pZCAoKmRldGVjdG1vZGVfdCkodm9pZCAqY29udGV4dCwgaW50ICptb2RlKTsKK3R5cGVkZWYgaW50ICgqc2VuZHJlcXVlc3RfdCkodm9pZCAqY29udGV4dCwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Cit0eXBlZGVmIGludCAoKmxvYWRmaXJtd2FyZV90KSh2b2lkICpjb250ZXh0LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKK3R5cGVkZWYgaW50ICgqcHJlbG9hZF90KSh2b2lkICpjb250ZXh0KTsKK3R5cGVkZWYgaW50ICgqcG9zdGxvYWRfdCkodm9pZCAqY29udGV4dCk7CisKK3R5cGVkZWYgaW50ICgqb25yZXNwb25zZV90KSh2b2lkICpjb250ZXh0LCBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IpOwordHlwZWRlZiB2b2lkICgqb25yZW1vdmVfdCkodm9pZCAqY29udGV4dCk7CisKK3N0cnVjdCBzbXNjb3JlX2J1ZmZlcl90IHsKKwkvKiBwdWJsaWMgbWVtYmVycywgb25jZSBwYXNzZWQgdG8gY2xpZW50cyBjYW4gYmUgY2hhbmdlZCBmcmVlbHkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCWludAkJCQlzaXplOworCWludAkJCQlvZmZzZXQ7CisKKwkvKiBwcml2YXRlIG1lbWJlcnMsIHJlYWQtb25seSBmb3IgY2xpZW50cyAqLworCXZvaWQJCQkqcDsKKwlkbWFfYWRkcl90CQlwaHlzOworCXVuc2lnbmVkIGxvbmcJb2Zmc2V0X2luX2NvbW1vbjsKK307CisKK3N0cnVjdCBzbXNkZXZpY2VfcGFyYW1zX3QgeworCXN0cnVjdCBkZXZpY2UJKmRldmljZTsKKworCWludAkJCQlidWZmZXJfc2l6ZTsKKwlpbnQJCQkJbnVtX2J1ZmZlcnM7CisKKwljaGFyCQkJZGV2cGF0aFszMl07CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNldG1vZGVfdAkJc2V0bW9kZV9oYW5kbGVyOworCWRldGVjdG1vZGVfdAlkZXRlY3Rtb2RlX2hhbmRsZXI7CisJc2VuZHJlcXVlc3RfdAlzZW5kcmVxdWVzdF9oYW5kbGVyOworCXByZWxvYWRfdAkJcHJlbG9hZF9oYW5kbGVyOworCXBvc3Rsb2FkX3QJCXBvc3Rsb2FkX2hhbmRsZXI7CisKKwl2b2lkCQkJKmNvbnRleHQ7CisJZW51bSBzbXNfZGV2aWNlX3R5cGVfc3QgZGV2aWNlX3R5cGU7Cit9OworCitzdHJ1Y3Qgc21zY2xpZW50X3BhcmFtc190IHsKKwlpbnQJCQkJaW5pdGlhbF9pZDsKKwlpbnQJCQkJZGF0YV90eXBlOworCW9ucmVzcG9uc2VfdAlvbnJlc3BvbnNlX2hhbmRsZXI7CisJb25yZW1vdmVfdAkJb25yZW1vdmVfaGFuZGxlcjsKKworCXZvaWQJCQkqY29udGV4dDsKK307CisKKy8qIEdQSU8gZGVmaW5pdGlvbnMgZm9yIGFudGVubmEgZnJlcXVlbmN5IGRvbWFpbiBjb250cm9sIChTTVM4MDIxKSAqLworI2RlZmluZSBTTVNfQU5URU5OQV9HUElPXzAJCQkJCTEKKyNkZWZpbmUgU01TX0FOVEVOTkFfR1BJT18xCQkJCQkwCisKKyNkZWZpbmUgQldfOF9NSFoJCQkJCQkJMAorI2RlZmluZSBCV183X01IWgkJCQkJCQkxCisjZGVmaW5lIEJXXzZfTUhaCQkJCQkJCTIKKyNkZWZpbmUgQldfNV9NSFoJCQkJCQkJMworI2RlZmluZSBCV19JU0RCVF8xU0VHCQkJCQkJNAorI2RlZmluZSBCV19JU0RCVF8zU0VHCQkJCQkJNQorCisjZGVmaW5lIE1TR19IRFJfRkxBR19TUExJVF9NU0cJCQkJNAorCisjZGVmaW5lIE1BWF9HUElPX1BJTl9OVU1CRVIJCQkJCTMxCisKKyNkZWZpbmUgSElGX1RBU0sJCQkJCQkJMTEKKyNkZWZpbmUgU01TX0hPU1RfTElCCQkJCQkJMTUwCisjZGVmaW5lIERWQlRfQkRBX0NPTlRST0xfTVNHX0lECQkJCTIwMQorCisjZGVmaW5lIFNNU19NQVhfUEFZTE9BRF9TSVpFCQkJCTI0MAorI2RlZmluZSBTTVNfVFVORV9USU1FT1VUCQkJCQk1MDAKKworI2RlZmluZSBNU0dfU01TX0dQSU9fQ09ORklHX1JFUQkJCQk1MDcKKyNkZWZpbmUgTVNHX1NNU19HUElPX0NPTkZJR19SRVMJCQkJNTA4CisjZGVmaW5lIE1TR19TTVNfR1BJT19TRVRfTEVWRUxfUkVRCQkJNTA5CisjZGVmaW5lIE1TR19TTVNfR1BJT19TRVRfTEVWRUxfUkVTCQkJNTEwCisjZGVmaW5lIE1TR19TTVNfR1BJT19HRVRfTEVWRUxfUkVRCQkJNTExCisjZGVmaW5lIE1TR19TTVNfR1BJT19HRVRfTEVWRUxfUkVTCQkJNTEyCisjZGVmaW5lIE1TR19TTVNfUkZfVFVORV9SRVEJCQkJCTU2MQorI2RlZmluZSBNU0dfU01TX1JGX1RVTkVfUkVTCQkJCQk1NjIKKyNkZWZpbmUgTVNHX1NNU19JTklUX0RFVklDRV9SRVEJCQkJNTc4CisjZGVmaW5lIE1TR19TTVNfSU5JVF9ERVZJQ0VfUkVTCQkJCTU3OQorI2RlZmluZSBNU0dfU01TX0FERF9QSURfRklMVEVSX1JFUQkJCTYwMQorI2RlZmluZSBNU0dfU01TX0FERF9QSURfRklMVEVSX1JFUwkJCTYwMgorI2RlZmluZSBNU0dfU01TX1JFTU9WRV9QSURfRklMVEVSX1JFUQkJNjAzCisjZGVmaW5lIE1TR19TTVNfUkVNT1ZFX1BJRF9GSUxURVJfUkVTCQk2MDQKKyNkZWZpbmUgTVNHX1NNU19EQUJfQ0hBTk5FTAkJCQkJNjA3CisjZGVmaW5lIE1TR19TTVNfR0VUX1BJRF9GSUxURVJfTElTVF9SRVEJCTYwOAorI2RlZmluZSBNU0dfU01TX0dFVF9QSURfRklMVEVSX0xJU1RfUkVTCQk2MDkKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVEJCQk2MTUKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVMJCQk2MTYKKyNkZWZpbmUgTVNHX1NNU19TRVRfQU5URU5OQV9DT05GSUdfUkVRCQk2NTEKKyNkZWZpbmUgTVNHX1NNU19TRVRfQU5URU5OQV9DT05GSUdfUkVTCQk2NTIKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19FWF9SRVEJCTY1MworI2RlZmluZSBNU0dfU01TX0dFVF9TVEFUSVNUSUNTX0VYX1JFUwkJNjU0CisjZGVmaW5lIE1TR19TTVNfU0xFRVBfUkVTVU1FX0NPTVBfSU5ECQk2NTUKKyNkZWZpbmUgTVNHX1NNU19EQVRBX0RPV05MT0FEX1JFUQkJCTY2MAorI2RlZmluZSBNU0dfU01TX0RBVEFfRE9XTkxPQURfUkVTCQkJNjYxCisjZGVmaW5lIE1TR19TTVNfU1dET1dOTE9BRF9UUklHR0VSX1JFUQkJNjY0CisjZGVmaW5lIE1TR19TTVNfU1dET1dOTE9BRF9UUklHR0VSX1JFUwkJNjY1CisjZGVmaW5lIE1TR19TTVNfU1dET1dOTE9BRF9CQUNLRE9PUl9SRVEJCTY2NgorI2RlZmluZSBNU0dfU01TX1NXRE9XTkxPQURfQkFDS0RPT1JfUkVTCQk2NjcKKyNkZWZpbmUgTVNHX1NNU19HRVRfVkVSU0lPTl9FWF9SRVEJCQk2NjgKKyNkZWZpbmUgTVNHX1NNU19HRVRfVkVSU0lPTl9FWF9SRVMJCQk2NjkKKyNkZWZpbmUgTVNHX1NNU19TRVRfQ0xPQ0tfT1VUUFVUX1JFUQkJNjcwCisjZGVmaW5lIE1TR19TTVNfSTJDX1NFVF9GUkVRX1JFUQkJCTY4NQorI2RlZmluZSBNU0dfU01TX0dFTkVSSUNfSTJDX1JFUQkJCQk2ODcKKyNkZWZpbmUgTVNHX1NNU19HRU5FUklDX0kyQ19SRVMJCQkJNjg4CisjZGVmaW5lIE1TR19TTVNfRFZCVF9CREFfREFUQQkJCQk2OTMKKyNkZWZpbmUgTVNHX1NXX1JFTE9BRF9SRVEJCQkJCTY5NworI2RlZmluZSBNU0dfU01TX0RBVEFfTVNHCQkJCQk2OTkKKyNkZWZpbmUgTVNHX1NXX1JFTE9BRF9TVEFSVF9SRVEJCQkJNzAyCisjZGVmaW5lIE1TR19TV19SRUxPQURfU1RBUlRfUkVTCQkJCTcwMworI2RlZmluZSBNU0dfU1dfUkVMT0FEX0VYRUNfUkVRCQkJCTcwNAorI2RlZmluZSBNU0dfU1dfUkVMT0FEX0VYRUNfUkVTCQkJCTcwNQorI2RlZmluZSBNU0dfU01TX1NQSV9JTlRfTElORV9TRVRfUkVRCQk3MTAKKyNkZWZpbmUgTVNHX1NNU19JU0RCVF9UVU5FX1JFUQkJCQk3NzYKKyNkZWZpbmUgTVNHX1NNU19JU0RCVF9UVU5FX1JFUwkJCQk3NzcKKworI2RlZmluZSBTTVNfSU5JVF9NU0dfRVgocHRyLCB0eXBlLCBzcmMsIGRzdCwgbGVuKSBkbyB7IFwKKwkocHRyKS0+bXNnVHlwZSA9IHR5cGU7IChwdHIpLT5tc2dTcmNJZCA9IHNyYzsgKHB0ciktPm1zZ0RzdElkID0gZHN0OyBcCisJKHB0ciktPm1zZ0xlbmd0aCA9IGxlbjsgKHB0ciktPm1zZ0ZsYWdzID0gMDsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgU01TX0lOSVRfTVNHKHB0ciwgdHlwZSwgbGVuKSBcCisJU01TX0lOSVRfTVNHX0VYKHB0ciwgdHlwZSwgMCwgSElGX1RBU0ssIGxlbikKKworZW51bSBTTVNfREVWSUNFX01PREUgeworCURFVklDRV9NT0RFX05PTkUgPSAtMSwKKwlERVZJQ0VfTU9ERV9EVkJUID0gMCwKKwlERVZJQ0VfTU9ERV9EVkJILAorCURFVklDRV9NT0RFX0RBQl9URE1CLAorCURFVklDRV9NT0RFX0RBQl9URE1CX0RBQklQLAorCURFVklDRV9NT0RFX0RWQlRfQkRBLAorCURFVklDRV9NT0RFX0lTREJULAorCURFVklDRV9NT0RFX0lTREJUX0JEQSwKKwlERVZJQ0VfTU9ERV9DTU1CLAorCURFVklDRV9NT0RFX1JBV19UVU5FUiwKKwlERVZJQ0VfTU9ERV9NQVgsCit9OworCitzdHJ1Y3QgU21zTXNnSGRyX1NUIHsKKwl1MTYJbXNnVHlwZTsKKwl1OAltc2dTcmNJZDsKKwl1OAltc2dEc3RJZDsKKwl1MTYJbXNnTGVuZ3RoOyAvKiBMZW5ndGggb2YgZW50aXJlIG1lc3NhZ2UsIGluY2x1ZGluZyBoZWFkZXIgKi8KKwl1MTYJbXNnRmxhZ3M7Cit9OworCitzdHJ1Y3QgU21zTXNnRGF0YV9TVCB7CisJc3RydWN0IFNtc01zZ0hkcl9TVAl4TXNnSGVhZGVyOworCXUzMgkJCW1zZ0RhdGFbMV07Cit9OworCitzdHJ1Y3QgU21zRGF0YURvd25sb2FkX1NUIHsKKwlzdHJ1Y3QgU21zTXNnSGRyX1NUCXhNc2dIZWFkZXI7CisJdTMyCQkJTWVtQWRkcjsKKwl1OAkJCVBheWxvYWRbU01TX01BWF9QQVlMT0FEX1NJWkVdOworfTsKKworc3RydWN0IFNtc1ZlcnNpb25SZXNfU1QgeworCXN0cnVjdCBTbXNNc2dIZHJfU1QJeE1zZ0hlYWRlcjsKKworCXUxNgkJQ2hpcE1vZGVsOyAvKiBlLmcuIDB4MTEwMiBmb3IgU01TLTExMDIgIk5vdmEiICovCisJdTgJCVN0ZXA7IC8qIDAgLSBTdGVwIEEgKi8KKwl1OAkJTWV0YWxGaXg7IC8qIDAgLSBNZXRhbCAwICovCisKKwl1OAkJRmlybXdhcmVJZDsgLyogMHhGRiDvv70gUk9NLCBvdGhlcndpc2UgdGhlCisJCQkJICAgICAqIHZhbHVlIGluZGljYXRlZCBieQorCQkJCSAgICAgKiBTTVNIT1NUTElCX0RFVklDRV9NT0RFU19FICovCisJdTgJCVN1cHBvcnRlZFByb3RvY29sczsgLyogQml0d2lzZSBPUiBjb21iaW5hdGlvbiBvZgorCQkJCQkgICAgICogc3VwcG9ydGVkIHByb3RvY29scyAqLworCisJdTgJCVZlcnNpb25NYWpvcjsKKwl1OAkJVmVyc2lvbk1pbm9yOworCXU4CQlWZXJzaW9uUGF0Y2g7CisJdTgJCVZlcnNpb25GaWVsZFBhdGNoOworCisJdTgJCVJvbVZlcnNpb25NYWpvcjsKKwl1OAkJUm9tVmVyc2lvbk1pbm9yOworCXU4CQlSb21WZXJzaW9uUGF0Y2g7CisJdTgJCVJvbVZlcnNpb25GaWVsZFBhdGNoOworCisJdTgJCVRleHRMYWJlbFszNF07Cit9OworCitzdHJ1Y3QgU21zRmlybXdhcmVfU1QgeworCXUzMgkJCUNoZWNrU3VtOworCXUzMgkJCUxlbmd0aDsKKwl1MzIJCQlTdGFydEFkZHJlc3M7CisJdTgJCQlQYXlsb2FkWzFdOworfTsKKworc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TVCB7CisJdTMyIFJlc2VydmVkOyAvKiBSZXNlcnZlZCAqLworCisJLyogQ29tbW9uIHBhcmFtZXRlcnMgKi8KKwl1MzIgSXNSZkxvY2tlZDsgLyogMCAtIG5vdCBsb2NrZWQsIDEgLSBsb2NrZWQgKi8KKwl1MzIgSXNEZW1vZExvY2tlZDsgLyogMCAtIG5vdCBsb2NrZWQsIDEgLSBsb2NrZWQgKi8KKwl1MzIgSXNFeHRlcm5hbExOQU9uOyAvKiAwIC0gZXh0ZXJuYWwgTE5BIG9mZiwgMSAtIGV4dGVybmFsIExOQSBvbiAqLworCisJLyogUmVjZXB0aW9uIHF1YWxpdHkgKi8KKwlzMzIgIFNOUjsgLyogZEIgKi8KKwl1MzIgQkVSOyAvKiBQb3N0IFZpdGVyYmkgQkVSIFsxRS01XSAqLworCXUzMiBGSUJfQ1JDOwkvKiBDUkMgZXJyb3JzIHBlcmNlbnRhZ2UsIHZhbGlkIG9ubHkgZm9yIERBQiAqLworCXUzMiBUU19QRVI7IC8qIFRyYW5zcG9ydCBzdHJlYW0gUEVSLCAweEZGRkZGRkZGIGluZGljYXRlIE4vQSwKKwkJICAgICAqIHZhbGlkIG9ubHkgZm9yIERWQi1UL0ggKi8KKwl1MzIgTUZFUjsgLyogRFZCLUggZnJhbWUgZXJyb3IgcmF0ZSBpbiBwZXJjZW50YWdlLAorCQkgICAqIDB4RkZGRkZGRkYgaW5kaWNhdGUgTi9BLCB2YWxpZCBvbmx5IGZvciBEVkItSCAqLworCXMzMiAgUlNTSTsgLyogZEJtICovCisJczMyICBJbkJhbmRQd3I7IC8qIEluIGJhbmQgcG93ZXIgaW4gZEJNICovCisJczMyICBDYXJyaWVyT2Zmc2V0OyAvKiBDYXJyaWVyIE9mZnNldCBpbiBiaW4vMTAyNCAqLworCisJLyogVHJhbnNtaXNzaW9uIHBhcmFtZXRlcnMsIHZhbGlkIG9ubHkgZm9yIERWQi1UL0ggKi8KKwl1MzIgRnJlcXVlbmN5OyAvKiBGcmVxdWVuY3kgaW4gSHogKi8KKwl1MzIgQmFuZHdpZHRoOyAvKiBCYW5kd2lkdGggaW4gTUh6ICovCisJdTMyIFRyYW5zbWlzc2lvbk1vZGU7IC8qIFRyYW5zbWlzc2lvbiBNb2RlLCBmb3IgREFCIG1vZGVzIDEtNCwKKwkJCSAgICAgICAqIGZvciBEVkItVC9IIEZGVCBtb2RlIGNhcnJpZXJzIGluIEtpbG9zICovCisJdTMyIE1vZGVtU3RhdGU7IC8qIGZyb20gU01TX0R2Yk1vZGVtU3RhdGVfRVQgKi8KKwl1MzIgR3VhcmRJbnRlcnZhbDsgLyogR3VhcmQgSW50ZXJ2YWwsIDEgZGl2aWRlZCBieSB2YWx1ZSAqLworCXUzMiBDb2RlUmF0ZTsgLyogQ29kZSBSYXRlIGZyb20gU01TX0R2Yk1vZGVtU3RhdGVfRVQgKi8KKwl1MzIgTFBDb2RlUmF0ZTsgLyogTG93IFByaW9yaXR5IENvZGUgUmF0ZSBmcm9tIFNNU19EdmJNb2RlbVN0YXRlX0VUICovCisJdTMyIEhpZXJhcmNoeTsgLyogSGllcmFyY2h5IGZyb20gU01TX0hpZXJhcmNoeV9FVCAqLworCXUzMiBDb25zdGVsbGF0aW9uOyAvKiBDb25zdGVsbGF0aW9uIGZyb20gU01TX0NvbnN0ZWxsYXRpb25fRVQgKi8KKworCS8qIEJ1cnN0IHBhcmFtZXRlcnMsIHZhbGlkIG9ubHkgZm9yIERWQi1IICovCisJdTMyIEJ1cnN0U2l6ZTsgLyogQ3VycmVudCBidXJzdCBzaXplIGluIGJ5dGVzICovCisJdTMyIEJ1cnN0RHVyYXRpb247IC8qIEN1cnJlbnQgYnVyc3QgZHVyYXRpb24gaW4gbVNlYyAqLworCXUzMiBCdXJzdEN5Y2xlVGltZTsgLyogQ3VycmVudCBidXJzdCBjeWNsZSB0aW1lIGluIG1TZWMgKi8KKwl1MzIgQ2FsY3VsYXRlZEJ1cnN0Q3ljbGVUaW1lOyAvKiBDdXJyZW50IGJ1cnN0IGN5Y2xlIHRpbWUgaW4gbVNlYywKKwkJCQkgICAgICAgKiBhcyBjYWxjdWxhdGVkIGJ5IGRlbW9kdWxhdG9yICovCisJdTMyIE51bU9mUm93czsgLyogTnVtYmVyIG9mIHJvd3MgaW4gTVBFIHRhYmxlICovCisJdTMyIE51bU9mUGFkZENvbHM7IC8qIE51bWJlciBvZiBwYWRkaW5nIGNvbHVtbnMgaW4gTVBFIHRhYmxlICovCisJdTMyIE51bU9mUHVuY3RDb2xzOyAvKiBOdW1iZXIgb2YgcHVuY3R1cmluZyBjb2x1bW5zIGluIE1QRSB0YWJsZSAqLworCS8qIEJ1cnN0IHBhcmFtZXRlcnMgKi8KKwl1MzIgRXJyb3JUU1BhY2tldHM7IC8qIE51bWJlciBvZiBlcnJvbmVvdXMgdHJhbnNwb3J0LXN0cmVhbSBwYWNrZXRzICovCisJdTMyIFRvdGFsVFNQYWNrZXRzOyAvKiBUb3RhbCBudW1iZXIgb2YgdHJhbnNwb3J0LXN0cmVhbSBwYWNrZXRzICovCisJdTMyIE51bU9mVmFsaWRNcGVUbGJzOyAvKiBOdW1iZXIgb2YgTVBFIHRhYmxlcyB3aGljaCBkbyBub3QgaW5jbHVkZQorCQkJCSogZXJyb3JzIGFmdGVyIE1QRSBSUyBkZWNvZGluZyAqLworCXUzMiBOdW1PZkludmFsaWRNcGVUbGJzOyAvKiBOdW1iZXIgb2YgTVBFIHRhYmxlcyB3aGljaCBpbmNsdWRlIGVycm9ycworCQkJCSAgKiBhZnRlciBNUEUgUlMgZGVjb2RpbmcgKi8KKwl1MzIgTnVtT2ZDb3JyZWN0ZWRNcGVUbGJzOyAvKiBOdW1iZXIgb2YgTVBFIHRhYmxlcyB3aGljaCB3ZXJlIGNvcnJlY3RlZAorCQkJCSAgICAqIGJ5IE1QRSBSUyBkZWNvZGluZyAqLworCisJLyogQ29tbW9uIHBhcmFtcyAqLworCXUzMiBCRVJFcnJvckNvdW50OyAvKiBOdW1iZXIgb2YgZXJyb3Jub3VzIFNZTkMgYml0cy4gKi8KKwl1MzIgQkVSQml0Q291bnQ7IC8qIFRvdGFsIG51bWJlciBvZiBTWU5DIGJpdHMuICovCisKKwkvKiBJbnRlcmZhY2UgaW5mb3JtYXRpb24gKi8KKwl1MzIgU21zVG9Ib3N0VHhFcnJvcnM7IC8qIFRvdGFsIG51bWJlciBvZiB0cmFuc21pc3Npb24gZXJyb3JzLiAqLworCisJLyogREFCL1QtRE1CICovCisJdTMyIFByZUJFUjsgLyogREFCL1QtRE1CIG9ubHk6IFByZSBWaXRlcmJpIEJFUiBbMUUtNV0gKi8KKworCS8qIERWQi1IIFRQUyBwYXJhbWV0ZXJzICovCisJdTMyIENlbGxJZDsgLyogVFBTIENlbGwgSUQgaW4gYml0cyAxNS4uMCwgYml0cyAzMS4uMTYgemVybzsKKwkJICAgICAqIGlmIHNldCB0byAweEZGRkZGRkZGIGNlbGxfaWQgbm90IHlldCByZWNvdmVyZWQgKi8KKworfTsKKworc3RydWN0IFNtc01zZ1N0YXRpc3RpY3NJbmZvX1NUIHsKKwl1MzIgUmVxdWVzdFJlc3VsdDsKKworCXN0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfU1QgU3RhdDsKKworCS8qIFNwbGl0IHRoZSBjYWxjIG9mIHRoZSBTTlIgaW4gREFCICovCisJdTMyIFNpZ25hbDsgLyogZEIgKi8KKwl1MzIgTm9pc2U7IC8qIGRCICovCisKK307CisKKworc3RydWN0IHNtc2R2Yl9jbGllbnRfdCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKworCXN0cnVjdCBzbXNjb3JlX2RldmljZV90CSpjb3JlZGV2OworCXN0cnVjdCBzbXNjb3JlX2NsaWVudF90CSpzbXNjbGllbnQ7CisKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIJYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2RlbXV4CWRlbXV4OworCXN0cnVjdCBkbXhkZXYJCWRteGRldjsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kCWZyb250ZW5kOworCisJZmVfc3RhdHVzX3QJCWZlX3N0YXR1czsKKwlpbnQJCQlmZV9iZXIsIGZlX3NuciwgZmVfc2lnbmFsX3N0cmVuZ3RoOworCisJc3RydWN0IGNvbXBsZXRpb24JdHVuZV9kb25lLCBzdGF0X2RvbmU7CisKKwkvKiB0b2RvOiBzYXZlIGZyZXEvYmFuZCBpbnN0ZWFkIHdob2xlIHN0cnVjdCAqLworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBmZV9wYXJhbXM7CisKK307CisKK2V4dGVybiB2b2lkIHNtc2NvcmVfcmVnaXN0cnlfc2V0bW9kZShjaGFyICpkZXZwYXRoLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IHNtc2NvcmVfcmVnaXN0cnlfZ2V0bW9kZShjaGFyICpkZXZwYXRoKTsKKworZXh0ZXJuIGludCBzbXNjb3JlX3JlZ2lzdGVyX2hvdHBsdWcoaG90cGx1Z190IGhvdHBsdWcpOworZXh0ZXJuIHZvaWQgc21zY29yZV91bnJlZ2lzdGVyX2hvdHBsdWcoaG90cGx1Z190IGhvdHBsdWcpOworCitleHRlcm4gaW50IHNtc2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBzbXNkZXZpY2VfcGFyYW1zX3QgKnBhcmFtcywKKwkJCQkgICBzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqKmNvcmVkZXYpOworZXh0ZXJuIHZvaWQgc21zY29yZV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldik7CisKK2V4dGVybiBpbnQgc21zY29yZV9zdGFydF9kZXZpY2Uoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpOworZXh0ZXJuIGludCBzbXNjb3JlX2xvYWRfZmlybXdhcmUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkJIGNoYXIgKmZpbGVuYW1lLAorCQkJCSBsb2FkZmlybXdhcmVfdCBsb2FkZmlybXdhcmVfaGFuZGxlcik7CisKK2V4dGVybiBpbnQgc21zY29yZV9zZXRfZGV2aWNlX21vZGUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBtb2RlKTsKK2V4dGVybiBpbnQgc21zY29yZV9nZXRfZGV2aWNlX21vZGUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpOworCitleHRlcm4gaW50IHNtc2NvcmVfcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJCSAgICBzdHJ1Y3Qgc21zY2xpZW50X3BhcmFtc190ICpwYXJhbXMsCisJCQkJICAgIHN0cnVjdCBzbXNjb3JlX2NsaWVudF90ICoqY2xpZW50KTsKK2V4dGVybiB2b2lkIHNtc2NvcmVfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKmNsaWVudCk7CisKK2V4dGVybiBpbnQgc21zY2xpZW50X3NlbmRyZXF1ZXN0KHN0cnVjdCBzbXNjb3JlX2NsaWVudF90ICpjbGllbnQsCisJCQkJIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgc21zY29yZV9vbnJlc3BvbnNlKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJICAgICAgIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYik7CisKKworZXh0ZXJuCitzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqc21zY29yZV9nZXRidWZmZXIoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpOworZXh0ZXJuIHZvaWQgc21zY29yZV9wdXRidWZmZXIoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkgICAgICBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IpOworCit2b2lkIHNtc2NvcmVfc2V0X2JvYXJkX2lkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlLCBpbnQgaWQpOworaW50IHNtc2NvcmVfZ2V0X2JvYXJkX2lkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlKTsKKworLyogc21zZHZiLmMgKi8KK2ludCBzbXNkdmJfcmVnaXN0ZXIodm9pZCk7Cit2b2lkIHNtc2R2Yl91bnJlZ2lzdGVyKHZvaWQpOworCisvKiBzbXN1c2IuYyAqLworaW50IHNtc3VzYl9yZWdpc3Rlcih2b2lkKTsKK3ZvaWQgc21zdXNiX3VucmVnaXN0ZXIodm9pZCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitleHRlcm4gaW50IHNtc19kZWJ1ZzsKKworI2RlZmluZSBEQkdfSU5GTyAxCisjZGVmaW5lIERCR19BRFYgIDIKKworI2RlZmluZSBzbXNfcHJpbnRrKGtlcm4sIGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKGtlcm4gIiVzOiAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgIyNhcmcpCisKKyNkZWZpbmUgZHByaW50ayhrZXJuLCBsdmwsIGZtdCwgYXJnLi4uKSBkbyB7XAorCWlmIChzbXNfZGVidWcgJiBsdmwpIFwKKwkJc21zX3ByaW50ayhrZXJuLCBmbXQsICMjYXJnKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzbXNfbG9nKGZtdCwgYXJnLi4uKSBzbXNfcHJpbnRrKEtFUk5fSU5GTywgZm10LCAjI2FyZykKKyNkZWZpbmUgc21zX2VycihmbXQsIGFyZy4uLikgXAorCXNtc19wcmludGsoS0VSTl9FUlIsICJsaW5lOiAlZDogIiBmbXQsIF9fTElORV9fLCAjI2FyZykKKyNkZWZpbmUgc21zX3dhcm4oZm10LCBhcmcuLi4pICBzbXNfcHJpbnRrKEtFUk5fV0FSTklORywgZm10LCAjI2FyZykKKyNkZWZpbmUgc21zX2luZm8oZm10LCBhcmcuLi4pIFwKKwlkcHJpbnRrKEtFUk5fSU5GTywgREJHX0lORk8sIGZtdCwgIyNhcmcpCisjZGVmaW5lIHNtc19kZWJ1ZyhmbXQsIGFyZy4uLikgXAorCWRwcmludGsoS0VSTl9ERUJVRywgREJHX0FEViwgZm10LCAjI2FyZykKKworCisjZW5kaWYgLyogX19zbXNjb3JlYXBpX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjljMTg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgU2lhbm8gU01TMXh4eCBVU0IgZG9uZ2xlCisgKgorICogIGF1dGhvcjogQW5hdG9seSBHcmVlbmJsYXQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSwgMjAwNS0yMDA4IFNpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqCisgKiAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICogIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSAic21zY29yZWFwaS5oIgorI2luY2x1ZGUgInNtcy1jYXJkcy5oIgorCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworc3RydWN0IGxpc3RfaGVhZCBnX3Ntc2R2Yl9jbGllbnRzOworc3RydWN0IG11dGV4IGdfc21zZHZiX2NsaWVudHNsb2NrOworCitzdGF0aWMgaW50IHNtc2R2Yl9vbnJlc3BvbnNlKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYikKK3sKKwlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPSAoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqKSBjb250ZXh0OworCXN0cnVjdCBTbXNNc2dIZHJfU1QgKnBoZHIgPQorCQkoc3RydWN0IFNtc01zZ0hkcl9TVCAqKSgoKHU4ICopIGNiLT5wKSArIGNiLT5vZmZzZXQpOworCisJc3dpdGNoIChwaGRyLT5tc2dUeXBlKSB7CisJY2FzZSBNU0dfU01TX0RWQlRfQkRBX0RBVEE6CisJCWR2Yl9kbXhfc3dmaWx0ZXIoJmNsaWVudC0+ZGVtdXgsICh1OCAqKShwaGRyICsgMSksCisJCQkJIGNiLT5zaXplIC0gc2l6ZW9mKHN0cnVjdCBTbXNNc2dIZHJfU1QpKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TR19TTVNfUkZfVFVORV9SRVM6CisJCWNvbXBsZXRlKCZjbGllbnQtPnR1bmVfZG9uZSk7CisJCWJyZWFrOworCisJY2FzZSBNU0dfU01TX0dFVF9TVEFUSVNUSUNTX1JFUzoKKwl7CisJCXN0cnVjdCBTbXNNc2dTdGF0aXN0aWNzSW5mb19TVCAqcCA9CisJCQkoc3RydWN0IFNtc01zZ1N0YXRpc3RpY3NJbmZvX1NUICopKHBoZHIgKyAxKTsKKworCQlpZiAocC0+U3RhdC5Jc0RlbW9kTG9ja2VkKSB7CisJCQljbGllbnQtPmZlX3N0YXR1cyA9IEZFX0hBU19TSUdOQUwgfAorCQkJCQkgICAgRkVfSEFTX0NBUlJJRVIgfAorCQkJCQkgICAgRkVfSEFTX1ZJVEVSQkkgfAorCQkJCQkgICAgRkVfSEFTX1NZTkMgfAorCQkJCQkgICAgRkVfSEFTX0xPQ0s7CisKKwkJCWNsaWVudC0+ZmVfc25yID0gcC0+U3RhdC5TTlI7CisJCQljbGllbnQtPmZlX2JlciA9IHAtPlN0YXQuQkVSOworCisJCQlpZiAocC0+U3RhdC5JbkJhbmRQd3IgPCAtOTUpCisJCQkJY2xpZW50LT5mZV9zaWduYWxfc3RyZW5ndGggPSAwOworCQkJZWxzZSBpZiAocC0+U3RhdC5JbkJhbmRQd3IgPiAtMjkpCisJCQkJY2xpZW50LT5mZV9zaWduYWxfc3RyZW5ndGggPSAxMDA7CisJCQllbHNlCisJCQkJY2xpZW50LT5mZV9zaWduYWxfc3RyZW5ndGggPQorCQkJCQkocC0+U3RhdC5JbkJhbmRQd3IgKyA5NSkgKiAzIC8gMjsKKwkJfSBlbHNlIHsKKwkJCWNsaWVudC0+ZmVfc3RhdHVzID0gMDsKKwkJCWNsaWVudC0+ZmVfc25yID0KKwkJCWNsaWVudC0+ZmVfYmVyID0KKwkJCWNsaWVudC0+ZmVfc2lnbmFsX3N0cmVuZ3RoID0gMDsKKwkJfQorCisJCWNvbXBsZXRlKCZjbGllbnQtPnN0YXRfZG9uZSk7CisJCWJyZWFrOworCX0gfQorCisJc21zY29yZV9wdXRidWZmZXIoY2xpZW50LT5jb3JlZGV2LCBjYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc21zZHZiX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCkKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBjbGllbnRzbG9jayAqLworCisJbGlzdF9kZWwoJmNsaWVudC0+ZW50cnkpOworCisJc21zY29yZV91bnJlZ2lzdGVyX2NsaWVudChjbGllbnQtPnNtc2NsaWVudCk7CisJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoJmNsaWVudC0+ZnJvbnRlbmQpOworCWR2Yl9kbXhkZXZfcmVsZWFzZSgmY2xpZW50LT5kbXhkZXYpOworCWR2Yl9kbXhfcmVsZWFzZSgmY2xpZW50LT5kZW11eCk7CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmY2xpZW50LT5hZGFwdGVyKTsKKwlrZnJlZShjbGllbnQpOworfQorCitzdGF0aWMgdm9pZCBzbXNkdmJfb25yZW1vdmUodm9pZCAqY29udGV4dCkKK3sKKwlrbXV0ZXhfbG9jaygmZ19zbXNkdmJfY2xpZW50c2xvY2spOworCisJc21zZHZiX3VucmVnaXN0ZXJfY2xpZW50KChzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICopIGNvbnRleHQpOworCisJa211dGV4X3VubG9jaygmZ19zbXNkdmJfY2xpZW50c2xvY2spOworfQorCitzdGF0aWMgaW50IHNtc2R2Yl9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKK3sKKwlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPQorCQljb250YWluZXJfb2YoZmVlZC0+ZGVtdXgsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGRlbXV4KTsKKwlzdHJ1Y3QgU21zTXNnRGF0YV9TVCBQaWRNc2c7CisKKwlzbXNfZGVidWcoImFkZCBwaWQgJWQoJXgpIiwKKwkJICBmZWVkLT5waWQsIGZlZWQtPnBpZCk7CisKKwlQaWRNc2cueE1zZ0hlYWRlci5tc2dTcmNJZCA9IERWQlRfQkRBX0NPTlRST0xfTVNHX0lEOworCVBpZE1zZy54TXNnSGVhZGVyLm1zZ0RzdElkID0gSElGX1RBU0s7CisJUGlkTXNnLnhNc2dIZWFkZXIubXNnRmxhZ3MgPSAwOworCVBpZE1zZy54TXNnSGVhZGVyLm1zZ1R5cGUgID0gTVNHX1NNU19BRERfUElEX0ZJTFRFUl9SRVE7CisJUGlkTXNnLnhNc2dIZWFkZXIubXNnTGVuZ3RoID0gc2l6ZW9mKFBpZE1zZyk7CisJUGlkTXNnLm1zZ0RhdGFbMF0gPSBmZWVkLT5waWQ7CisKKwlyZXR1cm4gc21zY2xpZW50X3NlbmRyZXF1ZXN0KGNsaWVudC0+c21zY2xpZW50LAorCQkJCSAgICAgJlBpZE1zZywgc2l6ZW9mKFBpZE1zZykpOworfQorCitzdGF0aWMgaW50IHNtc2R2Yl9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQoreworCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCA9CisJCWNvbnRhaW5lcl9vZihmZWVkLT5kZW11eCwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZGVtdXgpOworCXN0cnVjdCBTbXNNc2dEYXRhX1NUIFBpZE1zZzsKKworCXNtc19kZWJ1ZygicmVtb3ZlIHBpZCAlZCgleCkiLAorCQkgIGZlZWQtPnBpZCwgZmVlZC0+cGlkKTsKKworCVBpZE1zZy54TXNnSGVhZGVyLm1zZ1NyY0lkID0gRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQ7CisJUGlkTXNnLnhNc2dIZWFkZXIubXNnRHN0SWQgPSBISUZfVEFTSzsKKwlQaWRNc2cueE1zZ0hlYWRlci5tc2dGbGFncyA9IDA7CisJUGlkTXNnLnhNc2dIZWFkZXIubXNnVHlwZSAgPSBNU0dfU01TX1JFTU9WRV9QSURfRklMVEVSX1JFUTsKKwlQaWRNc2cueE1zZ0hlYWRlci5tc2dMZW5ndGggPSBzaXplb2YoUGlkTXNnKTsKKwlQaWRNc2cubXNnRGF0YVswXSA9IGZlZWQtPnBpZDsKKworCXJldHVybiBzbXNjbGllbnRfc2VuZHJlcXVlc3QoY2xpZW50LT5zbXNjbGllbnQsCisJCQkJICAgICAmUGlkTXNnLCBzaXplb2YoUGlkTXNnKSk7Cit9CisKK3N0YXRpYyBpbnQgc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KHN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCwKKwkJCQkJdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCQkJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24pCit7CisJaW50IHJjID0gc21zY2xpZW50X3NlbmRyZXF1ZXN0KGNsaWVudC0+c21zY2xpZW50LCBidWZmZXIsIHNpemUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoY29tcGxldGlvbiwKKwkJCQkJICAgbXNlY3NfdG9famlmZmllcygyMDAwKSkgPworCQkJCQkJMCA6IC1FVElNRTsKK30KKworc3RhdGljIGludCBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3Qoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50KQoreworCXN0cnVjdCBTbXNNc2dIZHJfU1QgTXNnID0geyBNU0dfU01TX0dFVF9TVEFUSVNUSUNTX1JFUSwKKwkJCSAgICAgRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQsCisJCQkgICAgIEhJRl9UQVNLLCBzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCksIDAgfTsKKwlyZXR1cm4gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCSAgICZjbGllbnQtPnN0YXRfZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgc21zZHZiX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdCkKK3sKKwlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPQorCQljb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKKwlpbnQgcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKworCWlmICghcmMpCisJCSpzdGF0ID0gY2xpZW50LT5mZV9zdGF0dXM7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc21zZHZiX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPQorCQljb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKKwlpbnQgcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKworCWlmICghcmMpCisJCSpiZXIgPSBjbGllbnQtPmZlX2JlcjsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzbXNkdmJfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCit7CisJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KKwkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CisJaW50IHJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKKwlpZiAoIXJjKQorCQkqc3RyZW5ndGggPSBjbGllbnQtPmZlX3NpZ25hbF9zdHJlbmd0aDsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzbXNkdmJfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCA9CisJCWNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOworCWludCByYyA9IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChjbGllbnQpOworCisJaWYgKCFyYykKKwkJKnNuciA9IGNsaWVudC0+ZmVfc25yOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNtc2R2Yl9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQoreworCXNtc19kZWJ1ZygiIik7CisKKwl0dW5lLT5taW5fZGVsYXlfbXMgPSA0MDA7CisJdHVuZS0+c3RlcF9zaXplID0gMjUwMDAwOworCXR1bmUtPm1heF9kcmlmdCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc21zZHZiX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPQorCQljb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBTbXNNc2dIZHJfU1QJTXNnOworCQl1MzIJCURhdGFbM107CisJfSBNc2c7CisKKwlNc2cuTXNnLm1zZ1NyY0lkICA9IERWQlRfQkRBX0NPTlRST0xfTVNHX0lEOworCU1zZy5Nc2cubXNnRHN0SWQgID0gSElGX1RBU0s7CisJTXNnLk1zZy5tc2dGbGFncyAgPSAwOworCU1zZy5Nc2cubXNnVHlwZSAgID0gTVNHX1NNU19SRl9UVU5FX1JFUTsKKwlNc2cuTXNnLm1zZ0xlbmd0aCA9IHNpemVvZihNc2cpOworCU1zZy5EYXRhWzBdID0gZmVwLT5mcmVxdWVuY3k7CisJTXNnLkRhdGFbMl0gPSAxMjAwMDAwMDsKKworCXNtc19kZWJ1ZygiZnJlcSAlZCBiYW5kICVkIiwKKwkJICBmZXAtPmZyZXF1ZW5jeSwgZmVwLT51Lm9mZG0uYmFuZHdpZHRoKTsKKworCXN3aXRjaCAoZmVwLT51Lm9mZG0uYmFuZHdpZHRoKSB7CisJY2FzZSBCQU5EV0lEVEhfOF9NSFo6IE1zZy5EYXRhWzFdID0gQldfOF9NSFo7IGJyZWFrOworCWNhc2UgQkFORFdJRFRIXzdfTUhaOiBNc2cuRGF0YVsxXSA9IEJXXzdfTUhaOyBicmVhazsKKwljYXNlIEJBTkRXSURUSF82X01IWjogTXNnLkRhdGFbMV0gPSBCV182X01IWjsgYnJlYWs7CisJY2FzZSBCQU5EV0lEVEhfQVVUTzogcmV0dXJuIC1FT1BOT1RTVVBQOworCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBzbXNkdmJfc2VuZHJlcXVlc3RfYW5kX3dhaXQoY2xpZW50LCAmTXNnLCBzaXplb2YoTXNnKSwKKwkJCQkJICAgJmNsaWVudC0+dHVuZV9kb25lKTsKK30KKworc3RhdGljIGludCBzbXNkdmJfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQoreworCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCA9CisJCWNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOworCisJc21zX2RlYnVnKCIiKTsKKworCS8qIHRvZG86ICovCisJbWVtY3B5KGZlcCwgJmNsaWVudC0+ZmVfcGFyYW1zLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNtc2R2Yl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCS8qIGRvIG5vdGhpbmcgKi8KK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHNtc2R2Yl9mZV9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lCQkJPSAiU2lhbm8gTW9iaWxlIERpZ2l0YWwgU01TMXh4eCIsCisJCS50eXBlCQkJPSBGRV9PRkRNLAorCQkuZnJlcXVlbmN5X21pbgkJPSA0NDI1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXgJCT0gODY3MjUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplCT0gMjUwMDAwLAorCQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8CisJCQlGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkJRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUVBTSyB8IEZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzY0IHwKKwkJCUZFX0NBTl9RQU1fQVVUTyB8IEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwKKwkJCUZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwKKwkJCUZFX0NBTl9SRUNPVkVSIHwKKwkJCUZFX0NBTl9ISUVSQVJDSFlfQVVUTywKKwl9LAorCisJLnJlbGVhc2UgPSBzbXNkdmJfcmVsZWFzZSwKKworCS5zZXRfZnJvbnRlbmQgPSBzbXNkdmJfc2V0X2Zyb250ZW5kLAorCS5nZXRfZnJvbnRlbmQgPSBzbXNkdmJfZ2V0X2Zyb250ZW5kLAorCS5nZXRfdHVuZV9zZXR0aW5ncyA9IHNtc2R2Yl9nZXRfdHVuZV9zZXR0aW5ncywKKworCS5yZWFkX3N0YXR1cyA9IHNtc2R2Yl9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgPSBzbXNkdmJfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gc21zZHZiX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciA9IHNtc2R2Yl9yZWFkX3NuciwKK307CisKK3N0YXRpYyBpbnQgc21zZHZiX2hvdHBsdWcoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2UgKmRldmljZSwgaW50IGFycml2YWwpCit7CisJc3RydWN0IHNtc2NsaWVudF9wYXJhbXNfdCBwYXJhbXM7CisJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OworCWludCByYzsKKworCS8qIGRldmljZSByZW1vdmFsIGhhbmRsZWQgYnkgb25yZW1vdmUgY2FsbGJhY2sgKi8KKwlpZiAoIWFycml2YWwpCisJCXJldHVybiAwOworCisJaWYgKHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKGNvcmVkZXYpICE9IDQpIHsKKwkJc21zX2VycigiU01TIERldmljZSBtb2RlIGlzIG5vdCBzZXQgZm9yICIKKwkJCSJEVkIgb3BlcmF0aW9uLiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc21zZHZiX2NsaWVudF90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbGllbnQpIHsKKwkJc21zX2Vycigia21hbGxvYygpIGZhaWxlZCIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiByZWdpc3RlciBkdmIgYWRhcHRlciAqLworCXJjID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmNsaWVudC0+YWRhcHRlciwKKwkJCQkgIHNtc19nZXRfYm9hcmQoCisJCQkJCXNtc2NvcmVfZ2V0X2JvYXJkX2lkKGNvcmVkZXYpKS0+bmFtZSwKKwkJCQkgIFRISVNfTU9EVUxFLCBkZXZpY2UsIGFkYXB0ZXJfbnIpOworCWlmIChyYyA8IDApIHsKKwkJc21zX2VycigiZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoKSBmYWlsZWQgJWQiLCByYyk7CisJCWdvdG8gYWRhcHRlcl9lcnJvcjsKKwl9CisKKwkvKiBpbml0IGR2YiBkZW11eCAqLworCWNsaWVudC0+ZGVtdXguZG14LmNhcGFiaWxpdGllcyA9IERNWF9UU19GSUxURVJJTkc7CisJY2xpZW50LT5kZW11eC5maWx0ZXJudW0gPSAzMjsgLyogdG9kbzogbm92YSA/Pz8gKi8KKwljbGllbnQtPmRlbXV4LmZlZWRudW0gPSAzMjsKKwljbGllbnQtPmRlbXV4LnN0YXJ0X2ZlZWQgPSBzbXNkdmJfc3RhcnRfZmVlZDsKKwljbGllbnQtPmRlbXV4LnN0b3BfZmVlZCA9IHNtc2R2Yl9zdG9wX2ZlZWQ7CisKKwlyYyA9IGR2Yl9kbXhfaW5pdCgmY2xpZW50LT5kZW11eCk7CisJaWYgKHJjIDwgMCkgeworCQlzbXNfZXJyKCJkdmJfZG14X2luaXQgZmFpbGVkICVkIiwgcmMpOworCQlnb3RvIGR2YmRteF9lcnJvcjsKKwl9CisKKwkvKiBpbml0IGRteGRldiAqLworCWNsaWVudC0+ZG14ZGV2LmZpbHRlcm51bSA9IDMyOworCWNsaWVudC0+ZG14ZGV2LmRlbXV4ID0gJmNsaWVudC0+ZGVtdXguZG14OworCWNsaWVudC0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7CisKKwlyYyA9IGR2Yl9kbXhkZXZfaW5pdCgmY2xpZW50LT5kbXhkZXYsICZjbGllbnQtPmFkYXB0ZXIpOworCWlmIChyYyA8IDApIHsKKwkJc21zX2VycigiZHZiX2RteGRldl9pbml0IGZhaWxlZCAlZCIsIHJjKTsKKwkJZ290byBkbXhkZXZfZXJyb3I7CisJfQorCisJLyogaW5pdCBhbmQgcmVnaXN0ZXIgZnJvbnRlbmQgKi8KKwltZW1jcHkoJmNsaWVudC0+ZnJvbnRlbmQub3BzLCAmc21zZHZiX2ZlX29wcywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisKKwlyYyA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmY2xpZW50LT5hZGFwdGVyLCAmY2xpZW50LT5mcm9udGVuZCk7CisJaWYgKHJjIDwgMCkgeworCQlzbXNfZXJyKCJmcm9udGVuZCByZWdpc3RyYXRpb24gZmFpbGVkICVkIiwgcmMpOworCQlnb3RvIGZyb250ZW5kX2Vycm9yOworCX0KKworCXBhcmFtcy5pbml0aWFsX2lkID0gMTsKKwlwYXJhbXMuZGF0YV90eXBlID0gTVNHX1NNU19EVkJUX0JEQV9EQVRBOworCXBhcmFtcy5vbnJlc3BvbnNlX2hhbmRsZXIgPSBzbXNkdmJfb25yZXNwb25zZTsKKwlwYXJhbXMub25yZW1vdmVfaGFuZGxlciA9IHNtc2R2Yl9vbnJlbW92ZTsKKwlwYXJhbXMuY29udGV4dCA9IGNsaWVudDsKKworCXJjID0gc21zY29yZV9yZWdpc3Rlcl9jbGllbnQoY29yZWRldiwgJnBhcmFtcywgJmNsaWVudC0+c21zY2xpZW50KTsKKwlpZiAocmMgPCAwKSB7CisJCXNtc19lcnIoInNtc2NvcmVfcmVnaXN0ZXJfY2xpZW50KCkgZmFpbGVkICVkIiwgcmMpOworCQlnb3RvIGNsaWVudF9lcnJvcjsKKwl9CisKKwljbGllbnQtPmNvcmVkZXYgPSBjb3JlZGV2OworCisJaW5pdF9jb21wbGV0aW9uKCZjbGllbnQtPnR1bmVfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZjbGllbnQtPnN0YXRfZG9uZSk7CisKKwlrbXV0ZXhfbG9jaygmZ19zbXNkdmJfY2xpZW50c2xvY2spOworCisJbGlzdF9hZGQoJmNsaWVudC0+ZW50cnksICZnX3Ntc2R2Yl9jbGllbnRzKTsKKworCWttdXRleF91bmxvY2soJmdfc21zZHZiX2NsaWVudHNsb2NrKTsKKworCXNtc19pbmZvKCJzdWNjZXNzIik7CisKKwlyZXR1cm4gMDsKKworY2xpZW50X2Vycm9yOgorCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKCZjbGllbnQtPmZyb250ZW5kKTsKKworZnJvbnRlbmRfZXJyb3I6CisJZHZiX2RteGRldl9yZWxlYXNlKCZjbGllbnQtPmRteGRldik7CisKK2RteGRldl9lcnJvcjoKKwlkdmJfZG14X3JlbGVhc2UoJmNsaWVudC0+ZGVtdXgpOworCitkdmJkbXhfZXJyb3I6CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmY2xpZW50LT5hZGFwdGVyKTsKKworYWRhcHRlcl9lcnJvcjoKKwlrZnJlZShjbGllbnQpOworCXJldHVybiByYzsKK30KKworaW50IHNtc2R2Yl9yZWdpc3Rlcih2b2lkKQoreworCWludCByYzsKKworCUlOSVRfTElTVF9IRUFEKCZnX3Ntc2R2Yl9jbGllbnRzKTsKKwlrbXV0ZXhfaW5pdCgmZ19zbXNkdmJfY2xpZW50c2xvY2spOworCisJcmMgPSBzbXNjb3JlX3JlZ2lzdGVyX2hvdHBsdWcoc21zZHZiX2hvdHBsdWcpOworCisJc21zX2RlYnVnKCIiKTsKKworCXJldHVybiByYzsKK30KKwordm9pZCBzbXNkdmJfdW5yZWdpc3Rlcih2b2lkKQoreworCXNtc2NvcmVfdW5yZWdpc3Rlcl9ob3RwbHVnKHNtc2R2Yl9ob3RwbHVnKTsKKworCWttdXRleF9sb2NrKCZnX3Ntc2R2Yl9jbGllbnRzbG9jayk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmdfc21zZHZiX2NsaWVudHMpKQorCSAgICAgICBzbXNkdmJfdW5yZWdpc3Rlcl9jbGllbnQoCisJCQkoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqKSBnX3Ntc2R2Yl9jbGllbnRzLm5leHQpOworCisJa211dGV4X3VubG9jaygmZ19zbXNkdmJfY2xpZW50c2xvY2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTBiMTg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKQEAgLTAsMCArMSw0NTkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgU2lhbm8gU01TMXh4eCBVU0IgZG9uZ2xlCisgKgorICogIGF1dGhvcjogQW5hdG9seSBHcmVlbmJsYXQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSwgMjAwNS0yMDA4IFNpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqCisgKiAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICogIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJzbXNjb3JlYXBpLmgiCisjaW5jbHVkZSAic21zLWNhcmRzLmgiCisKKyNkZWZpbmUgVVNCMV9CVUZGRVJfU0laRQkJMHgxMDAwCisjZGVmaW5lIFVTQjJfQlVGRkVSX1NJWkUJCTB4NDAwMAorCisjZGVmaW5lIE1BWF9CVUZGRVJTCQk1MAorI2RlZmluZSBNQVhfVVJCUwkJMTAKKworc3RydWN0IHNtc3VzYl9kZXZpY2VfdDsKKworc3RydWN0IHNtc3VzYl91cmJfdCB7CisJc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKmNiOworCXN0cnVjdCBzbXN1c2JfZGV2aWNlX3QJKmRldjsKKworCXN0cnVjdCB1cmIgdXJiOworfTsKKworc3RydWN0IHNtc3VzYl9kZXZpY2VfdCB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXY7CisKKwlzdHJ1Y3Qgc21zdXNiX3VyYl90IAlzdXJic1tNQVhfVVJCU107CisKKwlpbnQJCXJlc3BvbnNlX2FsaWdubWVudDsKKwlpbnQJCWJ1ZmZlcl9zaXplOworfTsKKworc3RhdGljIGludCBzbXN1c2Jfc3VibWl0X3VyYihzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICpkZXYsCisJCQkgICAgIHN0cnVjdCBzbXN1c2JfdXJiX3QgKnN1cmIpOworCitzdGF0aWMgdm9pZCBzbXN1c2Jfb25yZXNwb25zZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHNtc3VzYl91cmJfdCAqc3VyYiA9IChzdHJ1Y3Qgc21zdXNiX3VyYl90ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICpkZXYgPSBzdXJiLT5kZXY7CisKKwlpZiAodXJiLT5zdGF0dXMgPCAwKSB7CisJCXNtc19lcnIoImVycm9yLCB1cmIgc3RhdHVzICVkLCAlZCBieXRlcyIsCisJCQl1cmItPnN0YXR1cywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCXN0cnVjdCBTbXNNc2dIZHJfU1QgKnBoZHIgPSAoc3RydWN0IFNtc01zZ0hkcl9TVCAqKSBzdXJiLT5jYi0+cDsKKworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID49IHBoZHItPm1zZ0xlbmd0aCkgeworCQkJc3VyYi0+Y2ItPnNpemUgPSBwaGRyLT5tc2dMZW5ndGg7CisKKwkJCWlmIChkZXYtPnJlc3BvbnNlX2FsaWdubWVudCAmJgorCQkJICAgIChwaGRyLT5tc2dGbGFncyAmIE1TR19IRFJfRkxBR19TUExJVF9NU0cpKSB7CisKKwkJCQlzdXJiLT5jYi0+b2Zmc2V0ID0KKwkJCQkJZGV2LT5yZXNwb25zZV9hbGlnbm1lbnQgKworCQkJCQkoKHBoZHItPm1zZ0ZsYWdzID4+IDgpICYgMyk7CisKKwkJCQkvKiBzYW5pdHkgY2hlY2sgKi8KKwkJCQlpZiAoKChpbnQpIHBoZHItPm1zZ0xlbmd0aCArCisJCQkJICAgICBzdXJiLT5jYi0+b2Zmc2V0KSA+IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJCQlzbXNfZXJyKCJpbnZhbGlkIHJlc3BvbnNlICIKKwkJCQkJCSJtc2dsZW4gJWQgb2Zmc2V0ICVkICIKKwkJCQkJCSJzaXplICVkIiwKKwkJCQkJCXBoZHItPm1zZ0xlbmd0aCwKKwkJCQkJCXN1cmItPmNiLT5vZmZzZXQsCisJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJCQlnb3RvIGV4aXRfYW5kX3Jlc3VibWl0OworCQkJCX0KKworCQkJCS8qIG1vdmUgYnVmZmVyIHBvaW50ZXIgYW5kCisJCQkJICogY29weSBoZWFkZXIgdG8gaXRzIG5ldyBsb2NhdGlvbiAqLworCQkJCW1lbWNweSgoY2hhciAqKSBwaGRyICsgc3VyYi0+Y2ItPm9mZnNldCwKKwkJCQkgICAgICAgcGhkciwgc2l6ZW9mKHN0cnVjdCBTbXNNc2dIZHJfU1QpKTsKKwkJCX0gZWxzZQorCQkJCXN1cmItPmNiLT5vZmZzZXQgPSAwOworCisJCQlzbXNjb3JlX29ucmVzcG9uc2UoZGV2LT5jb3JlZGV2LCBzdXJiLT5jYik7CisJCQlzdXJiLT5jYiA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlzbXNfZXJyKCJpbnZhbGlkIHJlc3BvbnNlICIKKwkJCQkibXNnbGVuICVkIGFjdHVhbCAlZCIsCisJCQkJcGhkci0+bXNnTGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQl9CisJfQorCitleGl0X2FuZF9yZXN1Ym1pdDoKKwlzbXN1c2Jfc3VibWl0X3VyYihkZXYsIHN1cmIpOworfQorCitzdGF0aWMgaW50IHNtc3VzYl9zdWJtaXRfdXJiKHN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgc3RydWN0IHNtc3VzYl91cmJfdCAqc3VyYikKK3sKKwlpZiAoIXN1cmItPmNiKSB7CisJCXN1cmItPmNiID0gc21zY29yZV9nZXRidWZmZXIoZGV2LT5jb3JlZGV2KTsKKwkJaWYgKCFzdXJiLT5jYikgeworCQkJc21zX2Vycigic21zY29yZV9nZXRidWZmZXIoLi4uKSByZXR1cm5lZCBOVUxMIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCXVzYl9maWxsX2J1bGtfdXJiKAorCQkmc3VyYi0+dXJiLAorCQlkZXYtPnVkZXYsCisJCXVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIDB4ODEpLAorCQlzdXJiLT5jYi0+cCwKKwkJZGV2LT5idWZmZXJfc2l6ZSwKKwkJc21zdXNiX29ucmVzcG9uc2UsCisJCXN1cmIKKwkpOworCXN1cmItPnVyYi50cmFuc2Zlcl9kbWEgPSBzdXJiLT5jYi0+cGh5czsKKwlzdXJiLT51cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlyZXR1cm4gdXNiX3N1Ym1pdF91cmIoJnN1cmItPnVyYiwgR0ZQX0FUT01JQyk7Cit9CisKK3N0YXRpYyB2b2lkIHNtc3VzYl9zdG9wX3N0cmVhbWluZyhzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICpkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VSQlM7IGkrKykgeworCQl1c2Jfa2lsbF91cmIoJmRldi0+c3VyYnNbaV0udXJiKTsKKworCQlpZiAoZGV2LT5zdXJic1tpXS5jYikgeworCQkJc21zY29yZV9wdXRidWZmZXIoZGV2LT5jb3JlZGV2LCBkZXYtPnN1cmJzW2ldLmNiKTsKKwkJCWRldi0+c3VyYnNbaV0uY2IgPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNtc3VzYl9zdGFydF9zdHJlYW1pbmcoc3RydWN0IHNtc3VzYl9kZXZpY2VfdCAqZGV2KQoreworCWludCBpLCByYzsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfVVJCUzsgaSsrKSB7CisJCXJjID0gc21zdXNiX3N1Ym1pdF91cmIoZGV2LCAmZGV2LT5zdXJic1tpXSk7CisJCWlmIChyYyA8IDApIHsKKwkJCXNtc19lcnIoInNtc3VzYl9zdWJtaXRfdXJiKC4uLikgZmFpbGVkIik7CisJCQlzbXN1c2Jfc3RvcF9zdHJlYW1pbmcoZGV2KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNtc3VzYl9zZW5kcmVxdWVzdCh2b2lkICpjb250ZXh0LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKmRldiA9IChzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICopIGNvbnRleHQ7CisJaW50IGR1bW15OworCisJcmV0dXJuIHVzYl9idWxrX21zZyhkZXYtPnVkZXYsIHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsIDIpLAorCQkJICAgIGJ1ZmZlciwgc2l6ZSwgJmR1bW15LCAxMDAwKTsKK30KKworc3RhdGljIGNoYXIgKnNtc3VzYjFfZndfbGt1cFtdID0geworCSJkdmJ0X3N0ZWxsYXJfdXNiLmlucCIsCisJImR2Ymhfc3RlbGxhcl91c2IuaW5wIiwKKwkidGRtYl9zdGVsbGFyX3VzYi5pbnAiLAorCSJub25lIiwKKwkiZHZidF9iZGFfc3RlbGxhcl91c2IuaW5wIiwKK307CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqc21zX2dldF9md19uYW1lKGludCBtb2RlLCBpbnQgYm9hcmRfaWQpCit7CisJY2hhciAqKmZ3ID0gc21zX2dldF9ib2FyZChib2FyZF9pZCktPmZ3OworCXJldHVybiAoZncgJiYgZndbbW9kZV0pID8gZndbbW9kZV0gOiBzbXN1c2IxX2Z3X2xrdXBbbW9kZV07Cit9CisKK3N0YXRpYyBpbnQgc21zdXNiMV9sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgaWQsIGludCBib2FyZF9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCXU4ICpmd19idWZmZXI7CisJaW50IHJjLCBkdW1teTsKKwljaGFyICpmd19maWxlbmFtZTsKKworCWlmIChpZCA8IERFVklDRV9NT0RFX0RWQlQgfHwgaWQgPiBERVZJQ0VfTU9ERV9EVkJUX0JEQSkgeworCQlzbXNfZXJyKCJpbnZhbGlkIGZpcm13YXJlIGlkIHNwZWNpZmllZCAlZCIsIGlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZndfZmlsZW5hbWUgPSBzbXNfZ2V0X2Z3X25hbWUoaWQsIGJvYXJkX2lkKTsKKworCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X2ZpbGVuYW1lLCAmdWRldi0+ZGV2KTsKKwlpZiAocmMgPCAwKSB7CisJCXNtc193YXJuKCJmYWlsZWQgdG8gb3BlbiBcIiVzXCIgbW9kZSAlZCwgIgorCQkJICJ0cnlpbmcgYWdhaW4gd2l0aCBkZWZhdWx0IGZpcm13YXJlIiwgZndfZmlsZW5hbWUsIGlkKTsKKworCQlmd19maWxlbmFtZSA9IHNtc3VzYjFfZndfbGt1cFtpZF07CisJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X2ZpbGVuYW1lLCAmdWRldi0+ZGV2KTsKKwkJaWYgKHJjIDwgMCkgeworCQkJc21zX3dhcm4oImZhaWxlZCB0byBvcGVuIFwiJXNcIiBtb2RlICVkIiwKKwkJCQkgZndfZmlsZW5hbWUsIGlkKTsKKworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJZndfYnVmZmVyID0ga21hbGxvYyhmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGZ3X2J1ZmZlcikgeworCQltZW1jcHkoZndfYnVmZmVyLCBmdy0+ZGF0YSwgZnctPnNpemUpOworCisJCXJjID0gdXNiX2J1bGtfbXNnKHVkZXYsIHVzYl9zbmRidWxrcGlwZSh1ZGV2LCAyKSwKKwkJCQkgIGZ3X2J1ZmZlciwgZnctPnNpemUsICZkdW1teSwgMTAwMCk7CisKKwkJc21zX2luZm8oInNlbnQgJXpkKCVkKSBieXRlcywgcmMgJWQiLCBmdy0+c2l6ZSwgZHVtbXksIHJjKTsKKworCQlrZnJlZShmd19idWZmZXIpOworCX0gZWxzZSB7CisJCXNtc19lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBmaXJtd2FyZSBidWZmZXIiKTsKKwkJcmMgPSAtRU5PTUVNOworCX0KKwlzbXNfaW5mbygicmVhZCBGVyAlcywgc2l6ZT0lemQiLCBmd19maWxlbmFtZSwgZnctPnNpemUpOworCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHNtc3VzYjFfZGV0ZWN0bW9kZSh2b2lkICpjb250ZXh0LCBpbnQgKm1vZGUpCit7CisJY2hhciAqcHJvZHVjdF9zdHJpbmcgPQorCQkoKHN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKikgY29udGV4dCktPnVkZXYtPnByb2R1Y3Q7CisKKwkqbW9kZSA9IERFVklDRV9NT0RFX05PTkU7CisKKwlpZiAoIXByb2R1Y3Rfc3RyaW5nKSB7CisJCXByb2R1Y3Rfc3RyaW5nID0gIm5vbmUiOworCQlzbXNfZXJyKCJwcm9kdWN0IHN0cmluZyBub3QgZm91bmQiKTsKKwl9IGVsc2UgaWYgKHN0cnN0cihwcm9kdWN0X3N0cmluZywgIkRWQkgiKSkKKwkJKm1vZGUgPSAxOworCWVsc2UgaWYgKHN0cnN0cihwcm9kdWN0X3N0cmluZywgIkJEQSIpKQorCQkqbW9kZSA9IDQ7CisJZWxzZSBpZiAoc3Ryc3RyKHByb2R1Y3Rfc3RyaW5nLCAiRFZCVCIpKQorCQkqbW9kZSA9IDA7CisJZWxzZSBpZiAoc3Ryc3RyKHByb2R1Y3Rfc3RyaW5nLCAiVERNQiIpKQorCQkqbW9kZSA9IDI7CisKKwlzbXNfaW5mbygiJWQgXCIlc1wiIiwgKm1vZGUsIHByb2R1Y3Rfc3RyaW5nKTsKK30KKworc3RhdGljIGludCBzbXN1c2IxX3NldG1vZGUodm9pZCAqY29udGV4dCwgaW50IG1vZGUpCit7CisJc3RydWN0IFNtc01zZ0hkcl9TVCBNc2cgPSB7IE1TR19TV19SRUxPQURfUkVRLCAwLCBISUZfVEFTSywKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBTbXNNc2dIZHJfU1QpLCAwIH07CisKKwlpZiAobW9kZSA8IERFVklDRV9NT0RFX0RWQlQgfHwgbW9kZSA+IERFVklDRV9NT0RFX0RWQlRfQkRBKSB7CisJCXNtc19lcnIoImludmFsaWQgZmlybXdhcmUgaWQgc3BlY2lmaWVkICVkIiwgbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBzbXN1c2Jfc2VuZHJlcXVlc3QoY29udGV4dCwgJk1zZywgc2l6ZW9mKE1zZykpOworfQorCitzdGF0aWMgdm9pZCBzbXN1c2JfdGVybV9kZXZpY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHNtc3VzYl9kZXZpY2VfdCAqZGV2ID0KKwkJKHN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKikgdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmIChkZXYpIHsKKwkJc21zdXNiX3N0b3Bfc3RyZWFtaW5nKGRldik7CisKKwkJLyogdW5yZWdpc3RlciBmcm9tIHNtc2NvcmUgKi8KKwkJaWYgKGRldi0+Y29yZWRldikKKwkJCXNtc2NvcmVfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5jb3JlZGV2KTsKKworCQlrZnJlZShkZXYpOworCisJCXNtc19pbmZvKCJkZXZpY2UgJXAgZGVzdHJveWVkIiwgZGV2KTsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHNtc3VzYl9pbml0X2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgaW50IGJvYXJkX2lkKQoreworCXN0cnVjdCBzbXNkZXZpY2VfcGFyYW1zX3QgcGFyYW1zOworCXN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKmRldjsKKwlpbnQgaSwgcmM7CisKKwkvKiBjcmVhdGUgZGV2aWNlIG9iamVjdCAqLworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXN1c2JfZGV2aWNlX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQlzbXNfZXJyKCJremFsbG9jKHNpemVvZihzdHJ1Y3Qgc21zdXNiX2RldmljZV90KSBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CisJZGV2LT51ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCXBhcmFtcy5kZXZpY2VfdHlwZSA9IHNtc19nZXRfYm9hcmQoYm9hcmRfaWQpLT50eXBlOworCisJc3dpdGNoIChwYXJhbXMuZGV2aWNlX3R5cGUpIHsKKwljYXNlIFNNU19TVEVMTEFSOgorCQlkZXYtPmJ1ZmZlcl9zaXplID0gVVNCMV9CVUZGRVJfU0laRTsKKworCQlwYXJhbXMuc2V0bW9kZV9oYW5kbGVyID0gc21zdXNiMV9zZXRtb2RlOworCQlwYXJhbXMuZGV0ZWN0bW9kZV9oYW5kbGVyID0gc21zdXNiMV9kZXRlY3Rtb2RlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbXNfZXJyKCJVbnNwZWNpZmllZCBzbXMgZGV2aWNlIHR5cGUhIik7CisJCS8qIGZhbGwtdGhydSAqLworCWNhc2UgU01TX05PVkFfQTA6CisJY2FzZSBTTVNfTk9WQV9CMDoKKwljYXNlIFNNU19WRUdBOgorCQlkZXYtPmJ1ZmZlcl9zaXplID0gVVNCMl9CVUZGRVJfU0laRTsKKwkJZGV2LT5yZXNwb25zZV9hbGlnbm1lbnQgPQorCQkJZGV2LT51ZGV2LT5lcF9pblsxXS0+ZGVzYy53TWF4UGFja2V0U2l6ZSAtCisJCQlzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCk7CisKKwkJcGFyYW1zLmZsYWdzIHw9IFNNU19ERVZJQ0VfRkFNSUxZMjsKKwkJYnJlYWs7CisJfQorCisJcGFyYW1zLmRldmljZSA9ICZkZXYtPnVkZXYtPmRldjsKKwlwYXJhbXMuYnVmZmVyX3NpemUgPSBkZXYtPmJ1ZmZlcl9zaXplOworCXBhcmFtcy5udW1fYnVmZmVycyA9IE1BWF9CVUZGRVJTOworCXBhcmFtcy5zZW5kcmVxdWVzdF9oYW5kbGVyID0gc21zdXNiX3NlbmRyZXF1ZXN0OworCXBhcmFtcy5jb250ZXh0ID0gZGV2OworCXNucHJpbnRmKHBhcmFtcy5kZXZwYXRoLCBzaXplb2YocGFyYW1zLmRldnBhdGgpLAorCQkgInVzYlxcJWQtJXMiLCBkZXYtPnVkZXYtPmJ1cy0+YnVzbnVtLCBkZXYtPnVkZXYtPmRldnBhdGgpOworCisJLyogcmVnaXN0ZXIgaW4gc21zY29yZSAqLworCXJjID0gc21zY29yZV9yZWdpc3Rlcl9kZXZpY2UoJnBhcmFtcywgJmRldi0+Y29yZWRldik7CisJaWYgKHJjIDwgMCkgeworCQlzbXNfZXJyKCJzbXNjb3JlX3JlZ2lzdGVyX2RldmljZSguLi4pIGZhaWxlZCwgcmMgJWQiLCByYyk7CisJCXNtc3VzYl90ZXJtX2RldmljZShpbnRmKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXNtc2NvcmVfc2V0X2JvYXJkX2lkKGRldi0+Y29yZWRldiwgYm9hcmRfaWQpOworCisJLyogaW5pdGlhbGl6ZSB1cmJzICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9VUkJTOyBpKyspIHsKKwkJZGV2LT5zdXJic1tpXS5kZXYgPSBkZXY7CisJCXVzYl9pbml0X3VyYigmZGV2LT5zdXJic1tpXS51cmIpOworCX0KKworCXNtc19pbmZvKCJzbXN1c2Jfc3RhcnRfc3RyZWFtaW5nKC4uLikuIik7CisJcmMgPSBzbXN1c2Jfc3RhcnRfc3RyZWFtaW5nKGRldik7CisJaWYgKHJjIDwgMCkgeworCQlzbXNfZXJyKCJzbXN1c2Jfc3RhcnRfc3RyZWFtaW5nKC4uLikgZmFpbGVkIik7CisJCXNtc3VzYl90ZXJtX2RldmljZShpbnRmKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJjID0gc21zY29yZV9zdGFydF9kZXZpY2UoZGV2LT5jb3JlZGV2KTsKKwlpZiAocmMgPCAwKSB7CisJCXNtc19lcnIoInNtc2NvcmVfc3RhcnRfZGV2aWNlKC4uLikgZmFpbGVkIik7CisJCXNtc3VzYl90ZXJtX2RldmljZShpbnRmKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXNtc19pbmZvKCJkZXZpY2UgJXAgY3JlYXRlZCIsIGRldik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc21zdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwljaGFyIGRldnBhdGhbMzJdOworCWludCBpLCByYzsKKworCXJjID0gdXNiX2NsZWFyX2hhbHQodWRldiwgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIDB4ODEpKTsKKwlyYyA9IHVzYl9jbGVhcl9oYWx0KHVkZXYsIHVzYl9yY3ZidWxrcGlwZSh1ZGV2LCAweDAyKSk7CisKKwlpZiAoaW50Zi0+bnVtX2FsdHNldHRpbmcgPiAwKSB7CisJCXJjID0gdXNiX3NldF9pbnRlcmZhY2UoCisJCQl1ZGV2LCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJc21zX2VycigidXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkLCByYyAlZCIsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKworCXNtc19pbmZvKCJzbXN1c2JfcHJvYmUgJWQiLAorCSAgICAgICBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKQorCQlzbXNfaW5mbygiZW5kcG9pbnQgJWQgJTAyeCAlMDJ4ICVkIiwgaSwKKwkJICAgICAgIGludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCisJCSAgICAgICBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5ibUF0dHJpYnV0ZXMsCisJCSAgICAgICBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy53TWF4UGFja2V0U2l6ZSk7CisKKwlpZiAoKHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlcyA9PSAyKSAmJgorCSAgICAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAwKSkgeworCQlzbXNfZXJyKCJyb20gaW50ZXJmYWNlIDAgaXMgbm90IHVzZWQiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPT0gMSkgeworCQlzbnByaW50ZihkZXZwYXRoLCBzaXplb2YoZGV2cGF0aCksICJ1c2JcXCVkLSVzIiwKKwkJCSB1ZGV2LT5idXMtPmJ1c251bSwgdWRldi0+ZGV2cGF0aCk7CisJCXNtc19pbmZvKCJzdGVsbGFyIGRldmljZSB3YXMgZm91bmQuIik7CisJCXJldHVybiBzbXN1c2IxX2xvYWRfZmlybXdhcmUoCisJCQkJdWRldiwgc21zY29yZV9yZWdpc3RyeV9nZXRtb2RlKGRldnBhdGgpLAorCQkJCWlkLT5kcml2ZXJfaW5mbyk7CisJfQorCisJcmMgPSBzbXN1c2JfaW5pdF9kZXZpY2UoaW50ZiwgaWQtPmRyaXZlcl9pbmZvKTsKKwlzbXNfaW5mbygicmMgJWQiLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBzbXN1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzbXN1c2JfdGVybV9kZXZpY2UoaW50Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzbXN1c2JfZHJpdmVyID0geworCS5uYW1lCQkJPSAic21zMXh4eCIsCisJLnByb2JlCQkJPSBzbXN1c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QJCT0gc21zdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCQk9IHNtc3VzYl9pZF90YWJsZSwKK307CisKK2ludCBzbXN1c2JfcmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgcmMgPSB1c2JfcmVnaXN0ZXIoJnNtc3VzYl9kcml2ZXIpOworCWlmIChyYykKKwkJc21zX2VycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmMpOworCisJc21zX2RlYnVnKCIiKTsKKworCXJldHVybiByYzsKK30KKwordm9pZCBzbXN1c2JfdW5yZWdpc3Rlcih2b2lkKQoreworCXNtc19kZWJ1ZygiIik7CisJLyogUmVndWxhciBVU0IgQ2xlYW51cCAqLworCXVzYl9kZXJlZ2lzdGVyKCZzbXN1c2JfZHJpdmVyKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKaW5kZXggMDc2NDNlMC4uODdjOTczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCkBAIC0xMDYsNiArMTA2LDggQEAKIAlzZWxlY3QgRFZCX1NUVjAyOTkgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTEwMDRYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MTkJQMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1REQTEwMDIzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgVklERU9fSVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzaW1wbGUgU0FBNzE0NiBiYXNlZCBEVkIgY2FyZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvTWFrZWZpbGUKaW5kZXggZDc0ODNmMS4uNzE0NTEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvTWFrZWZpbGUKQEAgLTMsNyArMywxMSBAQAogIyBhbmQgdGhlIEFWNzExMCBEVkIgZGV2aWNlIGRyaXZlcgogIwogCi1kdmItdHRwY2ktb2JqcyA6PSBhdjcxMTBfaHcubyBhdjcxMTBfdjRsLm8gYXY3MTEwX2F2Lm8gYXY3MTEwX2NhLm8gYXY3MTEwLm8gYXY3MTEwX2lwYWNrLm8gYXY3MTEwX2lyLm8KK2R2Yi10dHBjaS1vYmpzIDo9IGF2NzExMF9ody5vIGF2NzExMF92NGwubyBhdjcxMTBfYXYubyBhdjcxMTBfY2EubyBhdjcxMTAubyBhdjcxMTBfaXBhY2subworCitpZmRlZiBDT05GSUdfSU5QVVRfRVZERVYKK2R2Yi10dHBjaS1vYmpzICs9IGF2NzExMF9pci5vCitlbmRpZgogCiBvYmotJChDT05GSUdfVFRQQ0lfRUVQUk9NKSArPSB0dHBjaS1lZXByb20ubwogb2JqLSQoQ09ORklHX0RWQl9CVURHRVRfQ09SRSkgKz0gYnVkZ2V0LWNvcmUubwpAQCAtMTQsNiArMTgsNyBAQAogb2JqLSQoQ09ORklHX0RWQl9BVjcxMTApICs9IGR2Yi10dHBjaS5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLyAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycwogCiBob3N0cHJvZ3MteQk6PSBmZHVtcAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCmluZGV4IGYwNWQ0M2QuLjA3NzdlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCkBAIC01ODcsNyArNTg3LDcgQEAKIAkJfQogCQlEVkJfUklOR0JVRkZFUl9TS0lQKGNpYnVmLCAyKTsKIAotCQlkdmJfcmluZ2J1ZmZlcl9yZWFkKGNpYnVmLCBhdjcxMTAtPmRlYmlfdmlydCwgbGVuLCAwKTsKKwkJZHZiX3JpbmdidWZmZXJfcmVhZChjaWJ1ZiwgYXY3MTEwLT5kZWJpX3ZpcnQsIGxlbik7CiAKIAkJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgVFhfTEVOLCBsZW4sIDIpOwogCQlpd2RlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBJUlFfU1RBVEVfRVhULCBsZW4sIDIpOwpAQCAtMTE5OCw3ICsxMTk4LDYgQEAKIAlpZiAoYnVkZ2V0LT5mZWVkaW5nMSkKIAkJcmV0dXJuICsrYnVkZ2V0LT5mZWVkaW5nMTsKIAltZW1zZXQoYnVkZ2V0LT5ncmFiYmluZywgMHgwMCwgVFNfSEVJR0hUICogVFNfV0lEVEgpOwotCWJ1ZGdldC0+dHNmID0gMHhmZjsKIAlidWRnZXQtPnR0YnAgPSAwOwogCVNBQTcxNDZfSUVSX0VOQUJMRShidWRnZXQtPmRldiwgTUFTS18xMCk7IC8qIFZQRSAqLwogCXNhYTcxNDZfd3JpdGUoYnVkZ2V0LT5kZXYsIE1DMSwgKE1BU0tfMDQgfCBNQVNLXzIwKSk7IC8qIERNQTMgb24gKi8KQEAgLTI0MDMsMTggKzI0MDIsMTggQEAKIAkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMSwgTUFTS18yOSk7CiAJCS8qIFJQUzEgdGltZW91dCBkaXNhYmxlICovCiAJCXNhYTcxNDZfd3JpdGUoZGV2LCBSUFNfVE9WMSwgMCk7Ci0JCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX1BBVVNFIHwgRVZUX1ZCSV9CKSk7Ci0JCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX1dSX1JFR19NQVNLIHwgKEdQSU9fQ1RSTD4+MikpKTsKLQkJV1JJVEVfUlBTMShjcHVfdG9fbGUzMihHUElPM19NU0spKTsKLQkJV1JJVEVfUlBTMShjcHVfdG9fbGUzMihTQUE3MTQ2X0dQSU9fT1VUTE88PDI0KSk7CisJCVdSSVRFX1JQUzEoQ01EX1BBVVNFIHwgRVZUX1ZCSV9CKTsKKwkJV1JJVEVfUlBTMShDTURfV1JfUkVHX01BU0sgfCAoR1BJT19DVFJMPj4yKSk7CisJCVdSSVRFX1JQUzEoR1BJTzNfTVNLKTsKKwkJV1JJVEVfUlBTMShTQUE3MTQ2X0dQSU9fT1VUTE88PDI0KTsKICNpZiBSUFNfSVJRCiAJCS8qIGlzc3VlIFJQUzEgaW50ZXJydXB0IHRvIGluY3JlbWVudCBjb3VudGVyICovCi0JCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX0lOVEVSUlVQVCkpOworCQlXUklURV9SUFMxKENNRF9JTlRFUlJVUFQpOwogI2VuZGlmCi0JCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX1NUT1ApKTsKKwkJV1JJVEVfUlBTMShDTURfU1RPUCk7CiAJCS8qIEp1bXAgdG8gYmVnaW4gb2YgUlBTIHByb2dyYW0gYXMgc2FmZXR5IG1lYXN1cmUgICAgICAgICAgICAgICAocDM3KSAqLwotCQlXUklURV9SUFMxKGNwdV90b19sZTMyKENNRF9KVU1QKSk7Ci0JCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoZGV2LT5kX3JwczEuZG1hX2hhbmRsZSkpOworCQlXUklURV9SUFMxKENNRF9KVU1QKTsKKwkJV1JJVEVfUlBTMShkZXYtPmRfcnBzMS5kbWFfaGFuZGxlKTsKIAogI2lmIFJQU19JUlEKIAkJLyogc2V0IGV2ZW50IGNvdW50ZXIgMSBzb3VyY2UgYXMgUlBTMSBpbnRlcnJ1cHQgKDB4MDMpICAgICAgICAgIChyRTQgcDUzKQpAQCAtMjQ3MiwxMSArMjQ3MSw3IEBACiAJICAgZ2V0IHJlY29nbml6ZWQgYmVmb3JlIHRoZSBtYWluIGRyaXZlciBpcyBmdWxseSBsb2FkZWQgKi8KIAlzYWE3MTQ2X3dyaXRlKGRldiwgR1BJT19DVFJMLCAweDUwMDAwMCk7CiAKLSNpZmRlZiBJMkNfQURBUF9DTEFTU19UVl9ESUdJVEFMCi0JYXY3MTEwLT5pMmNfYWRhcC5jbGFzcyA9IEkyQ19BREFQX0NMQVNTX1RWX0RJR0lUQUw7Ci0jZWxzZQogCWF2NzExMC0+aTJjX2FkYXAuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKLSNlbmRpZgogCXN0cmxjcHkoYXY3MTEwLT5pMmNfYWRhcC5uYW1lLCBwY2lfZXh0LT5leHRfcHJpdiwgc2l6ZW9mKGF2NzExMC0+aTJjX2FkYXAubmFtZSkpOwogCiAJc2FhNzE0Nl9pMmNfYWRhcHRlcl9wcmVwYXJlKGRldiwgJmF2NzExMC0+aTJjX2FkYXAsIFNBQTcxNDZfSTJDX0JVU19CSVRfUkFURV8xMjApOyAvKiAyNzUga0h6ICovCkBAIC0yNTI3LDI4ICsyNTIyLDI4IEBACiAJCWNvdW50ID0gMDsKIAogCQkvKiBXYWl0IFNvdXJjZSBMaW5lIENvdW50ZXIgVGhyZXNob2xkICAgICAgICAgICAgICAgICAgICAgICAgICAgKHAzNikgKi8KLQkJV1JJVEVfUlBTMShjcHVfdG9fbGUzMihDTURfUEFVU0UgfCBFVlRfSFMpKTsKKwkJV1JJVEVfUlBTMShDTURfUEFVU0UgfCBFVlRfSFMpOwogCQkvKiBTZXQgR1BJTzM9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHA0MikgKi8KLQkJV1JJVEVfUlBTMShjcHVfdG9fbGUzMihDTURfV1JfUkVHX01BU0sgfCAoR1BJT19DVFJMPj4yKSkpOwotCQlXUklURV9SUFMxKGNwdV90b19sZTMyKEdQSU8zX01TSykpOwotCQlXUklURV9SUFMxKGNwdV90b19sZTMyKFNBQTcxNDZfR1BJT19PVVRISTw8MjQpKTsKKwkJV1JJVEVfUlBTMShDTURfV1JfUkVHX01BU0sgfCAoR1BJT19DVFJMPj4yKSk7CisJCVdSSVRFX1JQUzEoR1BJTzNfTVNLKTsKKwkJV1JJVEVfUlBTMShTQUE3MTQ2X0dQSU9fT1VUSEk8PDI0KTsKICNpZiBSUFNfSVJRCiAJCS8qIGlzc3VlIFJQUzEgaW50ZXJydXB0ICovCi0JCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX0lOVEVSUlVQVCkpOworCQlXUklURV9SUFMxKENNRF9JTlRFUlJVUFQpOwogI2VuZGlmCiAJCS8qIFdhaXQgcmVzZXQgU291cmNlIExpbmUgQ291bnRlciBUaHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAocDM2KSAqLwotCQlXUklURV9SUFMxKGNwdV90b19sZTMyKENNRF9QQVVTRSB8IFJQU19JTlYgfCBFVlRfSFMpKTsKKwkJV1JJVEVfUlBTMShDTURfUEFVU0UgfCBSUFNfSU5WIHwgRVZUX0hTKTsKIAkJLyogU2V0IEdQSU8zPTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwNDIpICovCi0JCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX1dSX1JFR19NQVNLIHwgKEdQSU9fQ1RSTD4+MikpKTsKLQkJV1JJVEVfUlBTMShjcHVfdG9fbGUzMihHUElPM19NU0spKTsKLQkJV1JJVEVfUlBTMShjcHVfdG9fbGUzMihTQUE3MTQ2X0dQSU9fT1VUTE88PDI0KSk7CisJCVdSSVRFX1JQUzEoQ01EX1dSX1JFR19NQVNLIHwgKEdQSU9fQ1RSTD4+MikpOworCQlXUklURV9SUFMxKEdQSU8zX01TSyk7CisJCVdSSVRFX1JQUzEoU0FBNzE0Nl9HUElPX09VVExPPDwyNCk7CiAjaWYgUlBTX0lSUQogCQkvKiBpc3N1ZSBSUFMxIGludGVycnVwdCAqLwotCQlXUklURV9SUFMxKGNwdV90b19sZTMyKENNRF9JTlRFUlJVUFQpKTsKKwkJV1JJVEVfUlBTMShDTURfSU5URVJSVVBUKTsKICNlbmRpZgogCQkvKiBKdW1wIHRvIGJlZ2luIG9mIFJQUyBwcm9ncmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHAzNykgKi8KLQkJV1JJVEVfUlBTMShjcHVfdG9fbGUzMihDTURfSlVNUCkpOwotCQlXUklURV9SUFMxKGNwdV90b19sZTMyKGRldi0+ZF9ycHMxLmRtYV9oYW5kbGUpKTsKKwkJV1JJVEVfUlBTMShDTURfSlVNUCk7CisJCVdSSVRFX1JQUzEoZGV2LT5kX3JwczEuZG1hX2hhbmRsZSk7CiAKIAkJLyogRml4IFZTWU5DIGxldmVsICovCiAJCXNhYTcxNDZfc2V0Z3BpbyhkZXYsIDMsIFNBQTcxNDZfR1BJT19PVVRMTyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oCmluZGV4IGU0OTRlMDQuLjU1ZjIzZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oCkBAIC0xODgsNyArMTg4LDYgQEAKIAlzdHJ1Y3QgZHZiX25ldAkJZHZiX25ldDE7CiAJc3BpbmxvY2tfdAkJZmVlZGxvY2sxOwogCWludAkJCWZlZWRpbmcxOwotCXU4CQkJdHNmOwogCXUzMgkJCXR0YnA7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgKmdyYWJiaW5nOwogCXN0cnVjdCBzYWE3MTQ2X3BndGFibGUgIHB0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwppbmRleCBlYzU1YTk2OC4uMTg0NjQ3YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCkBAIC0yNjksNyArMjY5LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWR2Yl9yaW5nYnVmZmVyX3JlYWQoYnVmLCBkZXN0LCAoc2l6ZV90KSBibGVuLCAwKTsKKwlkdmJfcmluZ2J1ZmZlcl9yZWFkKGJ1ZiwgZGVzdCwgKHNpemVfdCkgYmxlbik7CiAKIAlkcHJpbnRrKDIsICJwcmVhZD0weCUwOGx4LCBwd3JpdGU9MHglMDhseFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGJ1Zi0+cHJlYWQsICh1bnNpZ25lZCBsb25nKSBidWYtPnB3cml0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9jYS5jCmluZGV4IGM1OGUzZmMuLjI2MTEzNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9jYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9jYS5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJRFZCX1JJTkdCVUZGRVJfU0tJUChjaWJ1ZiwgMik7CiAKLQlyZXR1cm4gZHZiX3JpbmdidWZmZXJfcmVhZChjaWJ1ZiwgKHU4ICopYnVmLCBsZW4sIDEpOworCXJldHVybiBkdmJfcmluZ2J1ZmZlcl9yZWFkX3VzZXIoY2lidWYsIGJ1ZiwgbGVuKTsKIH0KIAogc3RhdGljIGludCBkdmJfY2Ffb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9ody5oIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmgKaW5kZXggNzRkOTQwZi4uY2E5OWU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmgKQEAgLTMwNSw3ICszMDUsNiBAQAogI2RlZmluZSBJUlFfU1RBVEUJKERQUkFNX0JBU0UgKyAweDBGNCkKICNkZWZpbmUgSVJRX1NUQVRFX0VYVAkoRFBSQU1fQkFTRSArIDB4MEY2KQogI2RlZmluZSBNU0dTVEFURQkoRFBSQU1fQkFTRSArIDB4MEY4KQotI2RlZmluZSBGSUxUX1NUQVRFCShEUFJBTV9CQVNFICsgMHgwRkEpCiAjZGVmaW5lIENPTU1BTkQJCShEUFJBTV9CQVNFICsgMHgwRkMpCiAjZGVmaW5lIENPTV9CVUZGCShEUFJBTV9CQVNFICsgMHgxMDApCiAjZGVmaW5lIENPTV9CVUZGX1NJWkUJMHgyMApAQCAtMzMyLDggKzMzMSw2IEBACiAKIC8qIGZpcm13YXJlIHN0YXR1cyBhcmVhICovCiAjZGVmaW5lIFNUQVRVU19CQVNFCShEUFJBTV9CQVNFICsgMHgxRkMwKQotI2RlZmluZSBTVEFUVVNfU0NSCShTVEFUVVNfQkFTRSArIDB4MDApCi0jZGVmaW5lIFNUQVRVU19NT0RFUwkoU1RBVFVTX0JBU0UgKyAweDA0KQogI2RlZmluZSBTVEFUVVNfTE9PUFMJKFNUQVRVU19CQVNFICsgMHgwOCkKIAogI2RlZmluZSBTVEFUVVNfTVBFR19XSURUSCAgICAgKFNUQVRVU19CQVNFICsgMHgwQykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggYjMwYTUyOC4uYjdkMWYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTY2Nyw2ICs2NjcsMTEgQEAKIAkuaW52ZXJ0ID0gMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwMjNfY29uZmlnIHBoaWxpcHNfY3UxMjE2X3RkYTEwMDIzX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MGMsCisJLmludmVydCA9IDEsCit9OworCiBzdGF0aWMgaW50IHBoaWxpcHNfdHUxMjE2X3R1bmVyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGJ1ZGdldCAqYnVkZ2V0ID0gKHN0cnVjdCBidWRnZXQgKikgZmUtPmR2Yi0+cHJpdjsKQEAgLTEwMTksOSArMTAyNCwxMCBAQAogCWNhc2UgU1VCSURfRFZCQ19LTkMxX1BMVVNfTUszOgogCQlidWRnZXRfYXYtPnJlaW5pdGlhbGlzZV9kZW1vZCA9IDE7CiAJCWJ1ZGdldF9hdi0+YnVkZ2V0LmRldi0+aTJjX2JpdHJhdGUgPSBTQUE3MTQ2X0kyQ19CVVNfQklUX1JBVEVfMjQwOwotCQlmZSA9IGR2Yl9hdHRhY2godGRhMTAwMjNfYXR0YWNoLCAmcGhpbGlwc19jdTEyMTZfY29uZmlnLAotCQkJCSAgICAgJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwLAotCQkJCSAgICAgcmVhZF9wd20oYnVkZ2V0X2F2KSk7CisJCWZlID0gZHZiX2F0dGFjaCh0ZGExMDAyM19hdHRhY2gsCisJCQkmcGhpbGlwc19jdTEyMTZfdGRhMTAwMjNfY29uZmlnLAorCQkJJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwLAorCQkJcmVhZF9wd20oYnVkZ2V0X2F2KSk7CiAJCWlmIChmZSkgewogCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfY3UxMjE2X3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKaW5kZXggNjUzMDMyMy4uMDYwZTdjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKQEAgLTQ2LDYgKzQ2LDggQEAKICNpbmNsdWRlICJsbmJwMjEuaCIKICNpbmNsdWRlICJic2JlMS5oIgogI2luY2x1ZGUgImJzcnU2LmgiCisjaW5jbHVkZSAidGRhMTAwMnguaCIKKyNpbmNsdWRlICJ0ZGE4Mjd4LmgiCiAKIC8qCiAgKiBSZWdhcmRpbmcgREVCSUFERFJfSVI6CkBAIC0yMjUsNiArMjI3LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDEwMTA6CiAJY2FzZSAweDEwMTc6CisJY2FzZSAweDEwMWE6CiAJCS8qIGZvciB0aGUgVGVjaG5vdHJlbmQgMTUwMCBidW5kbGVkIHJlbW90ZSAqLwogCQlpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmJ1ZGdldF9jaS0+aXIuc3RhdGUsCiAJCQkgICAgICBJUl9UWVBFX1JDNSwgaXJfY29kZXNfdHRfMTUwMCk7CkBAIC0xMDU2LDYgKzEwNTksMTUgQEAKIAkuc3RvcF9kdXJpbmdfcmVhZCA9IDEsCiB9OwogCitzdGF0aWMgc3RydWN0IHRkYTEwMDIzX2NvbmZpZyB0ZGExMDAyM19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweGMsCisJLmludmVydCA9IDAsCisJLnh0YWwgPSAxNjAwMDAwMCwKKwkucGxsX20gPSAxMSwKKwkucGxsX3AgPSAzLAorCS5wbGxfbiA9IDEsCisJLmRlbHRhZiA9IDB4YTUxMSwKK307CiAKIAogCkBAIC0xMTI2LDcgKzExMzgsMTcgQEAKIAkJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPSBOVUxMOwogCQkJfQogCQl9CisJCWJyZWFrOwogCisJY2FzZSAweDEwMWE6IC8qIFRUIEJ1ZGdldC1DLTE1MDEgKHBoaWxpcHMgdGRhMTAwMjMvcGhpbGlwcyB0ZGE4Mjc0QSkgKi8KKwkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDAyM19hdHRhY2gsICZ0ZGExMDAyM19jb25maWcsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgMHg0OCk7CisJCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLCBidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4NjEsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgTlVMTCkgPT0gTlVMTCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHRkYTgyN3ggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CisJCQkJZHZiX2Zyb250ZW5kX2RldGFjaChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQpOworCQkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9IE5VTEw7CisJCQl9CisJCX0KIAkJYnJlYWs7CiAJfQogCkBAIC0xMjE2LDYgKzEyMzgsNyBAQAogTUFLRV9CVURHRVRfSU5GTyh0dGJ0MiwgIlRULUJ1ZGdldC9XaW5UVi1OT1ZBLVQJIFBDSSIsIEJVREdFVF9UVCk7CiBNQUtFX0JVREdFVF9JTkZPKHR0YnRjaSwgIlRULUJ1ZGdldC1ULUNJIFBDSSIsIEJVREdFVF9UVCk7CiBNQUtFX0JVREdFVF9JTkZPKHR0YmNjaSwgIlRULUJ1ZGdldC1DLUNJIFBDSSIsIEJVREdFVF9UVCk7CitNQUtFX0JVREdFVF9JTkZPKHR0YzE1MDEsICJUVC1CdWRnZXQgQy0xNTAxIFBDSSIsIEJVREdFVF9UVCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfdGJsW10gPSB7CiAJTUFLRV9FWFRFTlNJT05fUENJKHR0YmNpLCAweDEzYzIsIDB4MTAwYyksCkBAIC0xMjI0LDYgKzEyNDcsNyBAQAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJ0MiwgMHgxM2MyLCAweDEwMTEpLAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJ0Y2ksIDB4MTNjMiwgMHgxMDEyKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0kodHRiczIsIDB4MTNjMiwgMHgxMDE3KSwKKwlNQUtFX0VYVEVOU0lPTl9QQ0kodHRjMTUwMSwgMHgxM2MyLCAweDEwMWEpLAogCXsKIAkgLnZlbmRvciA9IDAsCiAJIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jCmluZGV4IDE4Y2FjNGIuLjZmNGRkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYwpAQCAtNDk3LDExICs0OTcsNyBAQAogCWlmIChiaS0+dHlwZSAhPSBCVURHRVRfRlNfQUNUSVZZKQogCQlzYWE3MTQ2X3dyaXRlKGRldiwgR1BJT19DVFJMLCAweDUwMDAwMCk7CS8qIEdQSU8gMyA9IDEgKi8KIAotI2lmZGVmIEkyQ19BREFQX0NMQVNTX1RWX0RJR0lUQUwKLQlidWRnZXQtPmkyY19hZGFwLmNsYXNzID0gSTJDX0FEQVBfQ0xBU1NfVFZfRElHSVRBTDsKLSNlbHNlCiAJYnVkZ2V0LT5pMmNfYWRhcC5jbGFzcyA9IEkyQ19DTEFTU19UVl9ESUdJVEFMOwotI2VuZGlmCiAKIAlzdHJsY3B5KGJ1ZGdldC0+aTJjX2FkYXAubmFtZSwgYnVkZ2V0LT5jYXJkLT5uYW1lLCBzaXplb2YoYnVkZ2V0LT5pMmNfYWRhcC5uYW1lKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKaW5kZXggOWExNTUzOS4uMzliZDBhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKQEAgLTQzMSwyMiArNDMxLDIyIEBACiAJLy8gaW4gYnVkZ2V0IHBhdGNoIEdQSU8zIGlzIGNvbm5lY3RlZCB0byBWU1lOQ19CCiAJY291bnQgPSAwOwogI2lmIDAKLQlXUklURV9SUFMxKGNwdV90b19sZTMyKENNRF9VUExPQUQgfAotCSAgTUFTS18xMCB8IE1BU0tfMDkgfCBNQVNLXzA4IHwgTUFTS18wNiB8IE1BU0tfMDUgfCBNQVNLXzA0IHwgTUFTS18wMyB8IE1BU0tfMDIgKSk7CisJV1JJVEVfUlBTMShDTURfVVBMT0FEIHwKKwkgIE1BU0tfMTAgfCBNQVNLXzA5IHwgTUFTS18wOCB8IE1BU0tfMDYgfCBNQVNLXzA1IHwgTUFTS18wNCB8IE1BU0tfMDMgfCBNQVNLXzAyICk7CiAjZW5kaWYKLQlXUklURV9SUFMxKGNwdV90b19sZTMyKENNRF9QQVVTRSB8IEVWVF9WQklfQikpOwotCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX1dSX1JFR19NQVNLIHwgKEdQSU9fQ1RSTD4+MikpKTsKLQlXUklURV9SUFMxKGNwdV90b19sZTMyKEdQSU8zX01TSykpOwotCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoU0FBNzE0Nl9HUElPX09VVExPPDwyNCkpOworCVdSSVRFX1JQUzEoQ01EX1BBVVNFIHwgRVZUX1ZCSV9CKTsKKwlXUklURV9SUFMxKENNRF9XUl9SRUdfTUFTSyB8IChHUElPX0NUUkw+PjIpKTsKKwlXUklURV9SUFMxKEdQSU8zX01TSyk7CisJV1JJVEVfUlBTMShTQUE3MTQ2X0dQSU9fT1VUTE88PDI0KTsKICNpZiBSUFNfSVJRCiAJLy8gaXNzdWUgUlBTMSBpbnRlcnJ1cHQgdG8gaW5jcmVtZW50IGNvdW50ZXIKLQlXUklURV9SUFMxKGNwdV90b19sZTMyKENNRF9JTlRFUlJVUFQpKTsKKwlXUklURV9SUFMxKENNRF9JTlRFUlJVUFQpOwogCS8vIGF0IGxlYXN0IGEgTk9QIGlzIG5lZWRlIGJldHdlZW4gdHdvIGludGVycnVwdHMKLQlXUklURV9SUFMxKGNwdV90b19sZTMyKENNRF9OT1ApKTsKKwlXUklURV9SUFMxKENNRF9OT1ApOwogCS8vIGludGVycnVwdCBhZ2FpbgotCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX0lOVEVSUlVQVCkpOworCVdSSVRFX1JQUzEoQ01EX0lOVEVSUlVQVCk7CiAjZW5kaWYKLQlXUklURV9SUFMxKGNwdV90b19sZTMyKENNRF9TVE9QKSk7CisJV1JJVEVfUlBTMShDTURfU1RPUCk7CiAKICNpZiBSUFNfSVJRCiAJLy8gc2V0IGV2ZW50IGNvdW50ZXIgMSBzb3VyY2UgYXMgUlBTMSBpbnRlcnJ1cHQgKDB4MDMpICAgICAgICAgIChyRTQgcDUzKQpAQCAtNTU4LDI4ICs1NTgsMjggQEAKIAogCiAJLy8gV2FpdCBTb3VyY2UgTGluZSBDb3VudGVyIFRocmVzaG9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgIChwMzYpCi0JV1JJVEVfUlBTMShjcHVfdG9fbGUzMihDTURfUEFVU0UgfCBFVlRfSFMpKTsKKwlXUklURV9SUFMxKENNRF9QQVVTRSB8IEVWVF9IUyk7CiAJLy8gU2V0IEdQSU8zPTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwNDIpCi0JV1JJVEVfUlBTMShjcHVfdG9fbGUzMihDTURfV1JfUkVHX01BU0sgfCAoR1BJT19DVFJMPj4yKSkpOwotCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoR1BJTzNfTVNLKSk7Ci0JV1JJVEVfUlBTMShjcHVfdG9fbGUzMihTQUE3MTQ2X0dQSU9fT1VUSEk8PDI0KSk7CisJV1JJVEVfUlBTMShDTURfV1JfUkVHX01BU0sgfCAoR1BJT19DVFJMPj4yKSk7CisJV1JJVEVfUlBTMShHUElPM19NU0spOworCVdSSVRFX1JQUzEoU0FBNzE0Nl9HUElPX09VVEhJPDwyNCk7CiAjaWYgUlBTX0lSUQogCS8vIGlzc3VlIFJQUzEgaW50ZXJydXB0Ci0JV1JJVEVfUlBTMShjcHVfdG9fbGUzMihDTURfSU5URVJSVVBUKSk7CisJV1JJVEVfUlBTMShDTURfSU5URVJSVVBUKTsKICNlbmRpZgogCS8vIFdhaXQgcmVzZXQgU291cmNlIExpbmUgQ291bnRlciBUaHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAocDM2KQotCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX1BBVVNFIHwgUlBTX0lOViB8IEVWVF9IUykpOworCVdSSVRFX1JQUzEoQ01EX1BBVVNFIHwgUlBTX0lOViB8IEVWVF9IUyk7CiAJLy8gU2V0IEdQSU8zPTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwNDIpCi0JV1JJVEVfUlBTMShjcHVfdG9fbGUzMihDTURfV1JfUkVHX01BU0sgfCAoR1BJT19DVFJMPj4yKSkpOwotCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoR1BJTzNfTVNLKSk7Ci0JV1JJVEVfUlBTMShjcHVfdG9fbGUzMihTQUE3MTQ2X0dQSU9fT1VUTE88PDI0KSk7CisJV1JJVEVfUlBTMShDTURfV1JfUkVHX01BU0sgfCAoR1BJT19DVFJMPj4yKSk7CisJV1JJVEVfUlBTMShHUElPM19NU0spOworCVdSSVRFX1JQUzEoU0FBNzE0Nl9HUElPX09VVExPPDwyNCk7CiAjaWYgUlBTX0lSUQogCS8vIGlzc3VlIFJQUzEgaW50ZXJydXB0Ci0JV1JJVEVfUlBTMShjcHVfdG9fbGUzMihDTURfSU5URVJSVVBUKSk7CisJV1JJVEVfUlBTMShDTURfSU5URVJSVVBUKTsKICNlbmRpZgogCS8vIEp1bXAgdG8gYmVnaW4gb2YgUlBTIHByb2dyYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocDM3KQotCVdSSVRFX1JQUzEoY3B1X3RvX2xlMzIoQ01EX0pVTVApKTsKLQlXUklURV9SUFMxKGNwdV90b19sZTMyKGRldi0+ZF9ycHMxLmRtYV9oYW5kbGUpKTsKKwlXUklURV9SUFMxKENNRF9KVU1QKTsKKwlXUklURV9SUFMxKGRldi0+ZF9ycHMxLmRtYV9oYW5kbGUpOwogCiAJLy8gRml4IFZTWU5DIGxldmVsCiAJc2FhNzE0Nl9zZXRncGlvKGRldiwgMywgU0FBNzE0Nl9HUElPX09VVExPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCmluZGV4IGJjMjA0M2UuLmU2YzljZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTk5MCwyMiArOTkxLDkgQEAKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkgbG9mZl90ICogb2Zmc2V0KQorCQkgbG9mZl90ICpvZmZzZXQpCiB7Ci0JaW50IHRjID0gY291bnQ7Ci0KLQlpZiAoKHRjICsgKm9mZnNldCkgPiA4MTkyKQotCQl0YyA9IDgxOTIgLSAqb2Zmc2V0OwotCi0JaWYgKHRjIDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY29weV90b191c2VyKGJ1Ziwgc3RjX2Zpcm13YXJlICsgKm9mZnNldCwgdGMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCSpvZmZzZXQgKz0gdGM7Ci0KLQlyZXR1cm4gdGM7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIG9mZnNldCwgc3RjX2Zpcm13YXJlLCA4MTkyKTsKIH0KIAogc3RhdGljIGludCBzdGNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE2OTMsMTEgKzE2ODEsNyBAQAogCiAJaTJjX3NldF9hZGFwZGF0YSgmdHR1c2ItPmkyY19hZGFwLCB0dHVzYik7CiAKLSNpZmRlZiBJMkNfQURBUF9DTEFTU19UVl9ESUdJVEFMCi0JdHR1c2ItPmkyY19hZGFwLmNsYXNzCQkgID0gSTJDX0FEQVBfQ0xBU1NfVFZfRElHSVRBTDsKLSNlbHNlCiAJdHR1c2ItPmkyY19hZGFwLmNsYXNzCQkgID0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7Ci0jZW5kaWYKIAl0dHVzYi0+aTJjX2FkYXAuYWxnbyAgICAgICAgICAgICAgPSAmdHR1c2JfZGVjX2FsZ287CiAJdHR1c2ItPmkyY19hZGFwLmFsZ29fZGF0YSAgICAgICAgID0gTlVMTDsKIAl0dHVzYi0+aTJjX2FkYXAuZGV2LnBhcmVudAkgID0gJnVkZXYtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCmluZGV4IDc3MzU0Y2EuLmRjOTNhODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYwpAQCAtMjQsNiArMjQsMTkgQEAKIAogCiAvKgorICogVXNlciBOb3RlczoKKyAqIC0gVVNCIEF1ZGlvIGlzIHByb3ZpZGVkIGJ5IHRoZSBhbHNhIHNuZF91c2JfYXVkaW8gbW9kdWxlLgorICogICBGb3IgbGlzdGluZyB5b3UgaGF2ZSB0byByZWRpcmVjdCB0aGUgc291bmQsIGZvciBleGFtcGxlIHVzaW5nOgorICogICBhcmVjb3JkIC1EIGh3OjEsMCAtcjk2MDAwIC1jMiAtZiBTMTZfTEUgfCBhcnRzZHNwIGFwbGF5IC1CIC0KKyAqIC0gcmVnYXJkaW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGluIC9zeXMvbW9kdWxlL3JhZGlvX3NpNDcweC9wYXJhbWV0ZXJzOgorICogICB0aGUgY29udGVudHMgb2YgcmVhZC1vbmx5IGZpbGVzICgwNDQ0KSBhcmUgbm90IHVwZGF0ZWQsIGV2ZW4gaWYKKyAqICAgc3BhY2UsIGJhbmQgYW5kIGRlIGFyZSBjaGFuZ2VkIHVzaW5nIHByaXZhdGUgdmlkZW8gY29udHJvbHMKKyAqIC0gaW5jcmVhc2UgdHVuZV90aW1lb3V0LCBpZiB5b3Ugb2Z0ZW4gZ2V0IC1FSU8gZXJyb3JzCisgKiAtIGh3X2ZyZXFfc2VlayByZXR1cm5zIC1FQUdBSU4sIHdoZW4gdGltZWQgb3V0IG9yIGJhbmQgbGltaXQgaXMgcmVhY2hlZAorICovCisKKworLyoKICAqIEhpc3Rvcnk6CiAgKiAyMDA4LTAxLTEyCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KICAqCQlWZXJzaW9uIDEuMC4wCkBAIC04NSwxMCArOTgsMTQgQEAKICAqCQlPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm9yZz4KICAqCQlWZXJzaW9uIDEuMC43CiAgKgkJLSB1c2IgYXV0b3N1c3BlbmQgc3VwcG9ydAotICogICAgICAgICAgICAgLSB1bnBsdWdnaW5nIGZpeGVkCisgKgkJLSB1bnBsdWdnaW5nIGZpeGVkCisgKiAyMDA4LTA1LTA3CVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqCQlWZXJzaW9uIDEuMC44CisgKgkJLSBoYXJkd2FyZSBmcmVxdWVuY3kgc2VlayBzdXBwb3J0CisgKgkJLSBhZmMgaW5kaWNhdGlvbgorICoJCS0gbW9yZSBzYWZldHkgY2hlY2tzLCBsZXQgc2k0NzB4X2dldF9mcmVxIHJldHVybiBlcnJubwogICoKICAqIFRvRG86Ci0gKiAtIGFkZCBzZWVraW5nIHN1cHBvcnQKICAqIC0gYWRkIGZpcm13YXJlIGRvd25sb2FkL3VwZGF0ZSBzdXBwb3J0CiAgKiAtIFJEUyBzdXBwb3J0OiBpbnRlcnJ1cHQgbW9kZSwgaW5zdGVhZCBvZiBwb2xsaW5nCiAgKiAtIGFkZCBMRUQgc3RhdHVzIG91dHB1dCAoY2hlY2sgaWYgdGhhdCdzIG5vdCBhbHJlYWR5IGRvbmUgaW4gZmlybXdhcmUpCkBAIC05OCwxMCArMTE1LDEwIEBACiAvKiBkcml2ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PiIKICNkZWZpbmUgRFJJVkVSX05BTUUgInJhZGlvLXNpNDcweCIKLSNkZWZpbmUgRFJJVkVSX0tFUk5FTF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDcpCisjZGVmaW5lIERSSVZFUl9LRVJORUxfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigxLCAwLCA4KQogI2RlZmluZSBEUklWRVJfQ0FSRCAiU2lsaWNvbiBMYWJzIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlciIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiByYWRpbyBkcml2ZXIgZm9yIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlcnMiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAuNyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMC44IgogCiAKIC8qIGtlcm5lbCBpbmNsdWRlcyAqLwpAQCAtMTc1LDYgKzE5MiwxMSBAQAogbW9kdWxlX3BhcmFtKHR1bmVfdGltZW91dCwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHR1bmVfdGltZW91dCwgIlR1bmUgdGltZW91dDogKjMwMDAqIik7CiAKKy8qIFNlZWsgdGltZW91dCAqLworc3RhdGljIHVuc2lnbmVkIGludCBzZWVrX3RpbWVvdXQgPSA1MDAwOworbW9kdWxlX3BhcmFtKHNlZWtfdGltZW91dCwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNlZWtfdGltZW91dCwgIlNlZWsgdGltZW91dDogKjUwMDAqIik7CisKIC8qIFJEUyBidWZmZXIgYmxvY2tzICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHJkc19idWYgPSAxMDA7CiBtb2R1bGVfcGFyYW0ocmRzX2J1ZiwgdWludCwgMCk7CkBAIC00MjUsNyArNDQ3LDggQEAKIAogCS8qIGRyaXZlciBtYW5hZ2VtZW50ICovCiAJdW5zaWduZWQgaW50IHVzZXJzOwotICAgICAgIHVuc2lnbmVkIGNoYXIgZGlzY29ubmVjdGVkOworCXVuc2lnbmVkIGNoYXIgZGlzY29ubmVjdGVkOworCXN0cnVjdCBtdXRleCBkaXNjb25uZWN0X2xvY2s7CiAKIAkvKiBTaWxhYnMgaW50ZXJuYWwgcmVnaXN0ZXJzICgwLi4xNSkgKi8KIAl1bnNpZ25lZCBzaG9ydCByZWdpc3RlcnNbUkFESU9fUkVHSVNURVJfTlVNXTsKQEAgLTQ0MiwxMiArNDY1LDYgQEAKIAogCiAvKgotICogTG9jayB0byBwcmV2ZW50IGtmcmVlIG9mIGRhdGEgYmVmb3JlIGFsbCB1c2VycyBoYXZlIHJlbGVhc2VzIHRoZSBkZXZpY2UuCi0gKi8KLXN0YXRpYyBERUZJTkVfTVVURVgob3Blbl9jbG9zZV9sb2NrKTsKLQotCi0vKgogICogVGhlIGZyZXF1ZW5jeSBpcyBzZXQgaW4gdW5pdHMgb2YgNjIuNSBIeiB3aGVuIHVzaW5nIFY0TDJfVFVORVJfQ0FQX0xPVywKICAqIDYyLjUga0h6IG90aGVyd2lzZS4KICAqIFRoZSB0dW5lciBpcyBhYmxlIHRvIGhhdmUgYSBjaGFubmVsIHNwYWNpbmcgb2YgNTAsIDEwMCBvciAyMDAga0h6LgpAQCAtNDc2LDExICs0OTMsMTEgQEAKIAkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9JTiwKIAkJcmVwb3J0WzBdLCAyLAogCQlidWYsIHNpemUsIHVzYl90aW1lb3V0KTsKKwogCWlmIChyZXR2YWwgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCiAJCQkiOiBzaTQ3MHhfZ2V0X3JlcG9ydDogdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAogCQkJcmV0dmFsKTsKLQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQ5OSwxMSArNTE2LDExIEBACiAJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAogCQlyZXBvcnRbMF0sIDIsCiAJCWJ1Ziwgc2l6ZSwgdXNiX3RpbWVvdXQpOworCiAJaWYgKHJldHZhbCA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKIAkJCSI6IHNpNDcweF9zZXRfcmVwb3J0OiB1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCiAJCQlyZXR2YWwpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNTIxLDggKzUzOCw3IEBACiAJcmV0dmFsID0gc2k0NzB4X2dldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKIAogCWlmIChyZXR2YWwgPj0gMCkKLQkJcmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gPSBiZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKAotCQkJKHVuc2lnbmVkIHNob3J0ICopICZidWZbMV0pKTsKKwkJcmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmJ1ZlsxXSk7CiAKIAlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7CiB9CkBAIC01MzcsOCArNTUzLDcgQEAKIAlpbnQgcmV0dmFsOwogCiAJYnVmWzBdID0gUkVHSVNURVJfUkVQT1JUKHJlZ25yKTsKLQlwdXRfdW5hbGlnbmVkKGNwdV90b19iZTE2KHJhZGlvLT5yZWdpc3RlcnNbcmVnbnJdKSwKLQkJKHVuc2lnbmVkIHNob3J0ICopICZidWZbMV0pOworCXB1dF91bmFsaWduZWRfYmUxNihyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSwgJmJ1ZlsxXSk7CiAKIAlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCkBAIC01NjEsOSArNTc2LDggQEAKIAogCWlmIChyZXR2YWwgPj0gMCkKIAkJZm9yIChyZWduciA9IDA7IHJlZ25yIDwgUkFESU9fUkVHSVNURVJfTlVNOyByZWducisrKQotCQkJcmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gPSBiZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKAotCQkJCSh1bnNpZ25lZCBzaG9ydCAqKQotCQkJCSZidWZbcmVnbnIgKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMV0pKTsKKwkJCXJhZGlvLT5yZWdpc3RlcnNbcmVnbnJdID0gZ2V0X3VuYWxpZ25lZF9iZTE2KAorCQkJCSZidWZbcmVnbnIgKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMV0pOwogCiAJcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOwogfQpAQCAtNTg1LDcgKzU5OSw3IEBACiAJCXVzYl9yY3ZpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDEpLAogCQkodm9pZCAqKSAmYnVmLCBzaXplb2YoYnVmKSwgJnNpemUsIHVzYl90aW1lb3V0KTsKIAlpZiAoc2l6ZSAhPSBzaXplb2YoYnVmKSkKLQkgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnM6ICIKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnM6ICIKIAkJCSJyZXR1cm4gc2l6ZSBkaWZmZXJzOiAlZCAhPSAlenVcbiIsIHNpemUsIHNpemVvZihidWYpKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnM6ICIKQEAgLTU5NCw4ICs2MDgsOCBAQAogCWlmIChyZXR2YWwgPj0gMCkKIAkJZm9yIChyZWduciA9IDA7IHJlZ25yIDwgUkRTX1JFR0lTVEVSX05VTTsgcmVnbnIrKykKIAkJCXJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSSArIHJlZ25yXSA9Ci0JCQkJYmUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgodW5zaWduZWQgc2hvcnQgKikKLQkJCQkmYnVmW3JlZ25yICogUkFESU9fUkVHSVNURVJfU0laRSArIDFdKSk7CisJCQkJZ2V0X3VuYWxpZ25lZF9iZTE2KAorCQkJCSZidWZbcmVnbnIgKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMV0pOwogCiAJcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOwogfQpAQCAtNjE1LDMzICs2MjksMzkgQEAKIAlyYWRpby0+cmVnaXN0ZXJzW0NIQU5ORUxdIHw9IENIQU5ORUxfVFVORSB8IGNoYW47CiAJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgQ0hBTk5FTCk7CiAJaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7CisJCWdvdG8gZG9uZTsKIAotCS8qIHdhaXQgdGlsbCBzZWVrIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkICovCisJLyogd2FpdCB0aWxsIHR1bmUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModHVuZV90aW1lb3V0KTsKIAlkbyB7CiAJCXJldHZhbCA9IHNpNDcweF9nZXRfcmVnaXN0ZXIocmFkaW8sIFNUQVRVU1JTU0kpOwogCQlpZiAocmV0dmFsIDwgMCkKLQkJCXJldHVybiByZXR2YWw7CisJCQlnb3RvIHN0b3A7CiAJCXRpbWVkX291dCA9IHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCk7CiAJfSB3aGlsZSAoKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TVEMpID09IDApICYmCiAJCSghdGltZWRfb3V0KSk7CisJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TVEMpID09IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogdHVuZSBkb2VzIG5vdCBjb21wbGV0ZVxuIik7CiAJaWYgKHRpbWVkX291dCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogc2VlayBkb2VzIG5vdCBmaW5pc2ggYWZ0ZXIgJXUgbXNcbiIsIHR1bmVfdGltZW91dCk7CisJCQkiOiB0dW5lIHRpbWVkIG91dCBhZnRlciAldSBtc1xuIiwgdHVuZV90aW1lb3V0KTsKIAorc3RvcDoKIAkvKiBzdG9wIHR1bmluZyAqLwogCXJhZGlvLT5yZWdpc3RlcnNbQ0hBTk5FTF0gJj0gfkNIQU5ORUxfVFVORTsKLQlyZXR1cm4gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgQ0hBTk5FTCk7CisJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgQ0hBTk5FTCk7CisKK2RvbmU6CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCiAvKgogICogc2k0NzB4X2dldF9mcmVxIC0gZ2V0IHRoZSBmcmVxdWVuY3kKICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzaTQ3MHhfZ2V0X2ZyZXEoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQorc3RhdGljIGludCBzaTQ3MHhfZ2V0X2ZyZXEoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCB1bnNpZ25lZCBpbnQgKmZyZXEpCiB7Ci0JdW5zaWduZWQgaW50IHNwYWNpbmcsIGJhbmRfYm90dG9tLCBmcmVxOworCXVuc2lnbmVkIGludCBzcGFjaW5nLCBiYW5kX2JvdHRvbTsKIAl1bnNpZ25lZCBzaG9ydCBjaGFuOwogCWludCByZXR2YWw7CiAKQEAgLTY2NywxNCArNjg3LDEyIEBACiAKIAkvKiByZWFkIGNoYW5uZWwgKi8KIAlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlZ2lzdGVyKHJhZGlvLCBSRUFEQ0hBTik7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7CiAJY2hhbiA9IHJhZGlvLT5yZWdpc3RlcnNbUkVBRENIQU5dICYgUkVBRENIQU5fUkVBRENIQU47CiAKIAkvKiBGcmVxdWVuY3kgKE1IeikgPSBTcGFjaW5nIChrSHopIHggQ2hhbm5lbCArIEJvdHRvbSBvZiBCYW5kIChNSHopICovCi0JZnJlcSA9IGNoYW4gKiBzcGFjaW5nICsgYmFuZF9ib3R0b207CisJKmZyZXEgPSBjaGFuICogc3BhY2luZyArIGJhbmRfYm90dG9tOwogCi0JcmV0dXJuIGZyZXE7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC03MTQsNiArNzMyLDYyIEBACiAKIAogLyoKKyAqIHNpNDcweF9zZXRfc2VlayAtIHNldCBzZWVrCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X3NldF9zZWVrKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywKKwkJdW5zaWduZWQgaW50IHdyYXBfYXJvdW5kLCB1bnNpZ25lZCBpbnQgc2Vla191cHdhcmQpCit7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWJvb2wgdGltZWRfb3V0ID0gMDsKKworCS8qIHN0YXJ0IHNlZWtpbmcgKi8KKwlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSB8PSBQT1dFUkNGR19TRUVLOworCWlmICh3cmFwX2Fyb3VuZCA9PSAxKQorCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfU0tNT0RFOworCWVsc2UKKwkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfU0tNT0RFOworCWlmIChzZWVrX3Vwd2FyZCA9PSAxKQorCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSB8PSBQT1dFUkNGR19TRUVLVVA7CisJZWxzZQorCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfU0VFS1VQOworCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFBPV0VSQ0ZHKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBkb25lOworCisJLyogd2FpdCB0aWxsIHNlZWsgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoc2Vla190aW1lb3V0KTsKKwlkbyB7CisJCXJldHZhbCA9IHNpNDcweF9nZXRfcmVnaXN0ZXIocmFkaW8sIFNUQVRVU1JTU0kpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gc3RvcDsKKwkJdGltZWRfb3V0ID0gdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KTsKKwl9IHdoaWxlICgoKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX1NUQykgPT0gMCkgJiYKKwkJKCF0aW1lZF9vdXQpKTsKKwlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX1NUQykgPT0gMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzZWVrIGRvZXMgbm90IGNvbXBsZXRlXG4iKTsKKwlpZiAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU0YpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKKwkJCSI6IHNlZWsgZmFpbGVkIC8gYmFuZCBsaW1pdCByZWFjaGVkXG4iKTsKKwlpZiAodGltZWRfb3V0KQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkiOiBzZWVrIHRpbWVkIG91dCBhZnRlciAldSBtc1xuIiwgc2Vla190aW1lb3V0KTsKKworc3RvcDoKKwkvKiBzdG9wIHNlZWtpbmcgKi8KKwlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfU0VFSzsKKwlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBQT1dFUkNGRyk7CisKK2RvbmU6CisJLyogdHJ5IGFnYWluLCBpZiB0aW1lZCBvdXQgKi8KKwlpZiAoKHJldHZhbCA9PSAwKSAmJiB0aW1lZF9vdXQpCisJCXJldHZhbCA9IC1FQUdBSU47CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCiAgKiBzaTQ3MHhfc3RhcnQgLSBzd2l0Y2ggb24gcmFkaW8KICAqLwogc3RhdGljIGludCBzaTQ3MHhfc3RhcnQoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQpAQCAtNzI1LDI3ICs3OTksMzAgQEAKIAkJUE9XRVJDRkdfRE1VVEUgfCBQT1dFUkNGR19FTkFCTEUgfCBQT1dFUkNGR19SRFNNOwogCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFBPV0VSQ0ZHKTsKIAlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKKwkJZ290byBkb25lOwogCiAJLyogc3lzY29uZmlnIDEgKi8KIAlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdID0gU1lTQ09ORklHMV9ERTsKIAlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcxKTsKIAlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKKwkJZ290byBkb25lOwogCiAJLyogc3lzY29uZmlnIDIgKi8KIAlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdID0KLQkJKDB4M2YgIDw8IDgpIHwJLyogU0VFS1RIICovCi0JCShiYW5kICA8PCA2KSB8CS8qIEJBTkQgKi8KLQkJKHNwYWNlIDw8IDQpIHwJLyogU1BBQ0UgKi8KLQkJMTU7CQkvKiBWT0xVTUUgKG1heCkgKi8KKwkJKDB4M2YgIDw8IDgpIHwJCQkJLyogU0VFS1RIICovCisJCSgoYmFuZCAgPDwgNikgJiBTWVNDT05GSUcyX0JBTkQpICB8CS8qIEJBTkQgKi8KKwkJKChzcGFjZSA8PCA0KSAmIFNZU0NPTkZJRzJfU1BBQ0UpIHwJLyogU1BBQ0UgKi8KKwkJMTU7CQkJCQkvKiBWT0xVTUUgKG1heCkgKi8KIAlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcyKTsKIAlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKKwkJZ290byBkb25lOwogCiAJLyogcmVzZXQgbGFzdCBjaGFubmVsICovCi0JcmV0dXJuIHNpNDcweF9zZXRfY2hhbihyYWRpbywKKwlyZXR2YWwgPSBzaTQ3MHhfc2V0X2NoYW4ocmFkaW8sCiAJCXJhZGlvLT5yZWdpc3RlcnNbQ0hBTk5FTF0gJiBDSEFOTkVMX0NIQU4pOworCitkb25lOgorCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtNzYwLDEzICs4MzcsMTYgQEAKIAlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICY9IH5TWVNDT05GSUcxX1JEUzsKIAlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcxKTsKIAlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKKwkJZ290byBkb25lOwogCiAJLyogcG93ZXJjZmcgKi8KIAlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfRE1VVEU7CiAJLyogUE9XRVJDRkdfRU5BQkxFIGhhcyB0byBhdXRvbWF0aWNhbGx5IGdvIGxvdyAqLwogCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX0VOQUJMRSB8CVBPV0VSQ0ZHX0RJU0FCTEU7Ci0JcmV0dXJuIHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFBPV0VSQ0ZHKTsKKwlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBQT1dFUkNGRyk7CisKK2RvbmU6CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC04NDMsNyArOTIzLDcgQEAKIAkJfTsKIAogCQkvKiBGaWxsIHRoZSBWNEwyIFJEUyBidWZmZXIgKi8KLQkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUxNihyZHMpLCAodW5zaWduZWQgc2hvcnQgKikgJnRtcGJ1Zik7CisJCXB1dF91bmFsaWduZWRfbGUxNihyZHMsICZ0bXBidWYpOwogCQl0bXBidWZbMl0gPSBibG9ja251bTsJCS8qIG9mZnNldCBuYW1lICovCiAJCXRtcGJ1ZlsyXSB8PSBibG9ja251bSA8PCAzOwkvKiByZWNlaXZlZCBvZmZzZXQgKi8KIAkJaWYgKGJsZXIgPiBtYXhfcmRzX2Vycm9ycykKQEAgLTg4Myw4ICs5NjMsOSBAQAogCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2k0NzB4X2RldmljZSwKIAkJd29yay53b3JrKTsKIAotICAgICAgIGlmIChyYWRpby0+ZGlzY29ubmVjdGVkKQotCSAgICAgICByZXR1cm47CisJLyogc2FmZXR5IGNoZWNrcyAqLworCWlmIChyYWRpby0+ZGlzY29ubmVjdGVkKQorCQlyZXR1cm47CiAJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICYgU1lTQ09ORklHMV9SRFMpID09IDApCiAJCXJldHVybjsKIApAQCAtOTE3LDExICs5OTgsMTUgQEAKIAogCS8qIGJsb2NrIGlmIG5vIG5ldyBkYXRhIGF2YWlsYWJsZSAqLwogCXdoaWxlIChyYWRpby0+d3JfaW5kZXggPT0gcmFkaW8tPnJkX2luZGV4KSB7Ci0JCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKLQkJCXJldHVybiAtRVdPVUxEQkxPQ0s7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJcmV0dmFsID0gLUVXT1VMREJMT0NLOworCQkJZ290byBkb25lOworCQl9CiAJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmFkaW8tPnJlYWRfcXVldWUsCi0JCQlyYWRpby0+d3JfaW5kZXggIT0gcmFkaW8tPnJkX2luZGV4KSA8IDApCi0JCQlyZXR1cm4gLUVJTlRSOworCQkJcmFkaW8tPndyX2luZGV4ICE9IHJhZGlvLT5yZF9pbmRleCkgPCAwKSB7CisJCQlyZXR2YWwgPSAtRUlOVFI7CisJCQlnb3RvIGRvbmU7CisJCX0KIAl9CiAKIAkvKiBjYWxjdWxhdGUgYmxvY2sgY291bnQgZnJvbSBieXRlIGNvdW50ICovCkBAIC05NTAsNiArMTAzNSw3IEBACiAJfQogCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwogCitkb25lOgogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTk2MSw2ICsxMDQ3LDcgQEAKIAkJc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdHMpCiB7CiAJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbCA9IDA7CiAKIAkvKiBzd2l0Y2ggb24gcmRzIHJlY2VwdGlvbiAqLwogCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcxXSAmIFNZU0NPTkZJRzFfUkRTKSA9PSAwKSB7CkBAIC05NzIsOSArMTA1OSw5IEBACiAJcG9sbF93YWl0KGZpbGUsICZyYWRpby0+cmVhZF9xdWV1ZSwgcHRzKTsKIAogCWlmIChyYWRpby0+cmRfaW5kZXggIT0gcmFkaW8tPndyX2luZGV4KQotCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwkJcmV0dmFsID0gUE9MTElOIHwgUE9MTFJETk9STTsKIAotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtOTkxLDE3ICsxMDc4LDE4IEBACiAJcmV0dmFsID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKIAlpZiAocmV0dmFsIDwgMCkgewogCQlyYWRpby0+dXNlcnMtLTsKLQkJcmV0dXJuIC1FSU87CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAocmFkaW8tPnVzZXJzID09IDEpIHsKIAkJcmV0dmFsID0gc2k0NzB4X3N0YXJ0KHJhZGlvKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocmFkaW8tPmludGYpOwotCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXJldHVybiAwOworZG9uZToKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTEwMTEsMjAgKzEwOTksMjMgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKLSAgICAgICBpbnQgcmV0dmFsID0gMDsKKwlpbnQgcmV0dmFsID0gMDsKIAotCWlmICghcmFkaW8pCi0JCXJldHVybiAtRU5PREVWOworCS8qIHNhZmV0eSBjaGVjayAqLworCWlmICghcmFkaW8pIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KIAotICAgICAgIG11dGV4X2xvY2soJm9wZW5fY2xvc2VfbG9jayk7CisJbXV0ZXhfbG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiAJcmFkaW8tPnVzZXJzLS07CiAJaWYgKHJhZGlvLT51c2VycyA9PSAwKSB7Ci0JICAgICAgIGlmIChyYWRpby0+ZGlzY29ubmVjdGVkKSB7Ci0JCSAgICAgICB2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOwotCQkgICAgICAga2ZyZWUocmFkaW8tPmJ1ZmZlcik7Ci0JCSAgICAgICBrZnJlZShyYWRpbyk7Ci0JCSAgICAgICBnb3RvIGRvbmU7Ci0JICAgICAgIH0KKwkJaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKKwkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7CisJCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKKwkJCWtmcmVlKHJhZGlvKTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CiAKIAkJLyogc3RvcCByZHMgcmVjZXB0aW9uICovCiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcmFkaW8tPndvcmspOwpAQCAtMTAzNiw5ICsxMTI3LDExIEBACiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CiAJfQogCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+ZGlzY29ubmVjdF9sb2NrKTsKKwogZG9uZToKLSAgICAgICBtdXRleF91bmxvY2soJm9wZW5fY2xvc2VfbG9jayk7Ci0gICAgICAgcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTExMTYsNyArMTIwOSw4IEBACiAJc3RybGNweShjYXBhYmlsaXR5LT5jYXJkLCBEUklWRVJfQ0FSRCwgc2l6ZW9mKGNhcGFiaWxpdHktPmNhcmQpKTsKIAlzcHJpbnRmKGNhcGFiaWxpdHktPmJ1c19pbmZvLCAiVVNCIik7CiAJY2FwYWJpbGl0eS0+dmVyc2lvbiA9IERSSVZFUl9LRVJORUxfVkVSU0lPTjsKLQljYXBhYmlsaXR5LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOworCWNhcGFiaWxpdHktPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX0hXX0ZSRVFfU0VFSyB8CisJCVY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjUsNyArMTIxOSw3IEBACiAvKgogICogc2k0NzB4X3ZpZGlvY19nX2lucHV0IC0gZ2V0IGlucHV0CiAgKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0xMTM3LDEyICsxMjMxLDE4IEBACiAvKgogICogc2k0NzB4X3ZpZGlvY19zX2lucHV0IC0gc2V0IGlucHV0CiAgKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3N0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnQgcmV0dmFsID0gMDsKIAotCXJldHVybiAwOworCS8qIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAoaSAhPSAwKQorCQlyZXR2YWwgPSAtRUlOVkFMOworCisJaWYgKHJldHZhbCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKKwkJCSI6IHNldCBpbnB1dCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTExNTUsMTcgKzEyNTUsMjIgQEAKIAl1bnNpZ25lZCBjaGFyIGk7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKKwkvKiBzYWZldHkgY2hlY2tzICovCisJaWYgKCFxYy0+aWQpCisJCWdvdG8gZG9uZTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNpNDcweF92NGwyX3F1ZXJ5Y3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSBzaTQ3MHhfdjRsMl9xdWVyeWN0cmxbaV0uaWQpIHsKKwkJaWYgKHFjLT5pZCA9PSBzaTQ3MHhfdjRsMl9xdWVyeWN0cmxbaV0uaWQpIHsKIAkJCW1lbWNweShxYywgJihzaTQ3MHhfdjRsMl9xdWVyeWN0cmxbaV0pLCBzaXplb2YoKnFjKSk7CiAJCQlyZXR2YWwgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAl9CisKK2RvbmU6CiAJaWYgKHJldHZhbCA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IHF1ZXJ5IGNvbnRyb2wgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0KKwkJCSI6IHF1ZXJ5IGNvbnRyb2xzIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTExNzcsOSArMTI4MiwxMyBAQAogCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWwgPSAwOwogCi0gICAgICAgaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpCi0JICAgICAgIHJldHVybiAtRUlPOworCS8qIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAocmFkaW8tPmRpc2Nvbm5lY3RlZCkgeworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgpAQCAtMTE5MCw5ICsxMjk5LDE1IEBACiAJCWN0cmwtPnZhbHVlID0gKChyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmCiAJCQkJUE9XRVJDRkdfRE1VVEUpID09IDApID8gMSA6IDA7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIDA7Citkb25lOgorCWlmIChyZXR2YWwgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkiOiBnZXQgY29udHJvbCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTEyMDMsMTAgKzEzMTgsMTMgQEAKIAkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwgPSAwOwogCi0gICAgICAgaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpCi0JICAgICAgIHJldHVybiAtRUlPOworCS8qIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAocmFkaW8tPmRpc2Nvbm5lY3RlZCkgeworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgpAQCAtMTIyNCwxMCArMTM0MiwxMSBAQAogCWRlZmF1bHQ6CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQorCitkb25lOgogCWlmIChyZXR2YWwgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCiAJCQkiOiBzZXQgY29udHJvbCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKLQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTEyMzgsMTMgKzEzNTcsMjIgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCiB7Ci0JaWYgKGF1ZGlvLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOworCWludCByZXR2YWwgPSAwOworCisJLyogc2FmZXR5IGNoZWNrcyAqLworCWlmIChhdWRpby0+aW5kZXggIT0gMCkgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQogCiAJc3RyY3B5KGF1ZGlvLT5uYW1lLCAiUmFkaW8iKTsKIAlhdWRpby0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAotCXJldHVybiAwOworZG9uZToKKwlpZiAocmV0dmFsIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQorCQkJIjogZ2V0IGF1ZGlvIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtMTI1NCwxMCArMTM4MiwxOSBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKIHsKLQlpZiAoYXVkaW8tPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCWludCByZXR2YWwgPSAwOwogCi0JcmV0dXJuIDA7CisJLyogc2FmZXR5IGNoZWNrcyAqLworCWlmIChhdWRpby0+aW5kZXggIT0gMCkgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCitkb25lOgorCWlmIChyZXR2YWwgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkiOiBzZXQgYXVkaW8gZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC0xMjY4LDIwICsxNDA1LDIzIEBACiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwgPSAwOwogCi0gICAgICAgaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpCi0JICAgICAgIHJldHVybiAtRUlPOwotCWlmICh0dW5lci0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBzYWZldHkgY2hlY2tzICovCisJaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKwlpZiAoKHR1bmVyLT5pbmRleCAhPSAwKSAmJiAodHVuZXItPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KIAotCS8qIHJlYWQgc3RhdHVzIHJzc2kgKi8KIAlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlZ2lzdGVyKHJhZGlvLCBTVEFUVVNSU1NJKTsKIAlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKKwkJZ290byBkb25lOwogCiAJc3RyY3B5KHR1bmVyLT5uYW1lLCAiRk0iKTsKLQl0dW5lci0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJc3dpdGNoIChiYW5kKSB7CiAJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlLCBkZWZhdWx0KSAqLwogCWRlZmF1bHQ6CkBAIC0xMzEzLDkgKzE0NTMsMTQgQEAKIAkJCQkqIDB4MDEwMTsKIAogCS8qIGF1dG9tYXRpYyBmcmVxdWVuY3kgY29udHJvbDogLTE6IGZyZXEgdG8gbG93LCAxIGZyZXEgdG8gaGlnaCAqLwotCXR1bmVyLT5hZmMgPSAwOworCS8qIEFGQ1JMIGRvZXMgb25seSBpbmRpY2F0ZSB0aGF0IGZyZXEuIGRpZmZlcnMsIG5vdCBpZiB0b28gbG93L2hpZ2ggKi8KKwl0dW5lci0+YWZjID0gKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX0FGQ1JMKSA/IDEgOiAwOwogCi0JcmV0dXJuIDA7Citkb25lOgorCWlmIChyZXR2YWwgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkiOiBnZXQgdHVuZXIgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC0xMzI2LDEyICsxNDcxLDE3IEBACiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwgPSAwOwogCi0gICAgICAgaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpCi0JICAgICAgIHJldHVybiAtRUlPOwotCWlmICh0dW5lci0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBzYWZldHkgY2hlY2tzICovCisJaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKwlpZiAoKHR1bmVyLT5pbmRleCAhPSAwKSAmJiAodHVuZXItPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KIAogCWlmICh0dW5lci0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTU9OTykKIAkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfTU9OTzsgIC8qIGZvcmNlIG1vbm8gKi8KQEAgLTEzMzksMTAgKzE0ODksMTEgQEAKIAkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJj0gflBPV0VSQ0ZHX01PTk87IC8qIHRyeSBzdGVyZW8gKi8KIAogCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFBPV0VSQ0ZHKTsKKworZG9uZToKIAlpZiAocmV0dmFsIDwgMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQogCQkJIjogc2V0IHR1bmVyIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTM1NCwxNCArMTUwNSwyNSBAQAogCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCiB7CiAJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbCA9IDA7CiAKLSAgICAgICBpZiAocmFkaW8tPmRpc2Nvbm5lY3RlZCkKLQkgICAgICAgcmV0dXJuIC1FSU87CisJLyogc2FmZXR5IGNoZWNrcyAqLworCWlmIChyYWRpby0+ZGlzY29ubmVjdGVkKSB7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKChmcmVxLT50dW5lciAhPSAwKSAmJiAoZnJlcS0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKSkgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQogCi0JZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZnJlcS0+ZnJlcXVlbmN5ID0gc2k0NzB4X2dldF9mcmVxKHJhZGlvKTsKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X2ZyZXEocmFkaW8sICZmcmVxLT5mcmVxdWVuY3kpOwogCi0JcmV0dXJuIDA7Citkb25lOgorCWlmIChyZXR2YWwgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkiOiBnZXQgZnJlcXVlbmN5IGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtMTM3MiwxOSArMTUzNCw1NSBAQAogCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCiB7CiAJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsID0gMDsKIAotICAgICAgIGlmIChyYWRpby0+ZGlzY29ubmVjdGVkKQotCSAgICAgICByZXR1cm4gLUVJTzsKLQlpZiAoZnJlcS0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBzYWZldHkgY2hlY2tzICovCisJaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKwlpZiAoKGZyZXEtPnR1bmVyICE9IDApICYmIChmcmVxLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CiAKIAlyZXR2YWwgPSBzaTQ3MHhfc2V0X2ZyZXEocmFkaW8sIGZyZXEtPmZyZXF1ZW5jeSk7CisKK2RvbmU6CiAJaWYgKHJldHZhbCA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKIAkJCSI6IHNldCBmcmVxdWVuY3kgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KIAotCXJldHVybiAwOworCisvKgorICogc2k0NzB4X3ZpZGlvY19zX2h3X2ZyZXFfc2VlayAtIHNldCBoYXJkd2FyZSBmcmVxdWVuY3kgc2VlaworICovCitzdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19od19mcmVxX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayAqc2VlaykKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAocmFkaW8tPmRpc2Nvbm5lY3RlZCkgeworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCWlmICgoc2Vlay0+dHVuZXIgIT0gMCkgJiYgKHNlZWstPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCXJldHZhbCA9IHNpNDcweF9zZXRfc2VlayhyYWRpbywgc2Vlay0+d3JhcF9hcm91bmQsIHNlZWstPnNlZWtfdXB3YXJkKTsKKworZG9uZToKKwlpZiAocmV0dmFsIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQorCQkJIjogc2V0IGhhcmR3YXJlIGZyZXF1ZW5jeSBzZWVrIGZhaWxlZCB3aXRoICVkXG4iLAorCQkJcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTE0MDgsNiArMTYwNiw3IEBACiAJLnZpZGlvY19zX3R1bmVyCQk9IHNpNDcweF92aWRpb2Nfc190dW5lciwKIAkudmlkaW9jX2dfZnJlcXVlbmN5CT0gc2k0NzB4X3ZpZGlvY19nX2ZyZXF1ZW5jeSwKIAkudmlkaW9jX3NfZnJlcXVlbmN5CT0gc2k0NzB4X3ZpZGlvY19zX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfaHdfZnJlcV9zZWVrCT0gc2k0NzB4X3ZpZGlvY19zX2h3X2ZyZXFfc2VlaywKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMTQyNCwzMSArMTYyMywzNiBAQAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvOwotCWludCByZXR2YWwgPSAtRU5PTUVNOworCWludCByZXR2YWwgPSAwOwogCi0JLyogcHJpdmF0ZSBkYXRhIGFsbG9jYXRpb24gKi8KKwkvKiBwcml2YXRlIGRhdGEgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gKi8KIAlyYWRpbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaTQ3MHhfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyYWRpbykKKwlpZiAoIXJhZGlvKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2luaXRpYWw7Ci0KLQkvKiB2aWRlbyBkZXZpY2UgYWxsb2NhdGlvbiAqLwotCXJhZGlvLT52aWRlb2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmICghcmFkaW8tPnZpZGVvZGV2KQotCQlnb3RvIGVycl9yYWRpbzsKLQotCS8qIGluaXRpYWwgY29uZmlndXJhdGlvbiAqLwotCW1lbWNweShyYWRpby0+dmlkZW9kZXYsICZzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlLAotCQkJc2l6ZW9mKHNpNDcweF92aWRkZXZfdGVtcGxhdGUpKTsKKwl9CiAJcmFkaW8tPnVzZXJzID0gMDsKKwlyYWRpby0+ZGlzY29ubmVjdGVkID0gMDsKIAlyYWRpby0+dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlyYWRpby0+aW50ZiA9IGludGY7CisJbXV0ZXhfaW5pdCgmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiAJbXV0ZXhfaW5pdCgmcmFkaW8tPmxvY2spOworCisJLyogdmlkZW8gZGV2aWNlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uICovCisJcmFkaW8tPnZpZGVvZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCFyYWRpby0+dmlkZW9kZXYpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmFkaW87CisJfQorCW1lbWNweShyYWRpby0+dmlkZW9kZXYsICZzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlLAorCQkJc2l6ZW9mKHNpNDcweF92aWRkZXZfdGVtcGxhdGUpKTsKIAl2aWRlb19zZXRfZHJ2ZGF0YShyYWRpby0+dmlkZW9kZXYsIHJhZGlvKTsKIAogCS8qIHNob3cgc29tZSBpbmZvcyBhYm91dCB0aGUgc3BlY2lmaWMgZGV2aWNlICovCi0JcmV0dmFsID0gLUVJTzsKLQlpZiAoc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzKHJhZGlvKSA8IDApCisJaWYgKHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyhyYWRpbykgPCAwKSB7CisJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZXJyX2FsbDsKKwl9CiAJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBEZXZpY2VJRD0weCU0LjRoeCBDaGlwSUQ9MHglNC40aHhcbiIsCiAJCQlyYWRpby0+cmVnaXN0ZXJzW0RFVklDRUlEXSwgcmFkaW8tPnJlZ2lzdGVyc1tDSElQSURdKTsKIApAQCAtMTQ3NCw4ICsxNjc4LDEwIEBACiAJLyogcmRzIGJ1ZmZlciBhbGxvY2F0aW9uICovCiAJcmFkaW8tPmJ1Zl9zaXplID0gcmRzX2J1ZiAqIDM7CiAJcmFkaW8tPmJ1ZmZlciA9IGttYWxsb2MocmFkaW8tPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJhZGlvLT5idWZmZXIpCisJaWYgKCFyYWRpby0+YnVmZmVyKSB7CisJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZXJyX2FsbDsKKwl9CiAKIAkvKiByZHMgYnVmZmVyIGNvbmZpZ3VyYXRpb24gKi8KIAlyYWRpby0+d3JfaW5kZXggPSAwOwpAQCAtMTQ4Nyw2ICsxNjkzLDcgQEAKIAogCS8qIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLwogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpKSB7CisJCXJldHZhbCA9IC1FSU87CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKIAkJCQkiOiBDb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKIAkJZ290byBlcnJfYWxsOwpAQCAtMTU0NiwxNiArMTc1MywxNiBAQAogewogCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLSAgICAgICBtdXRleF9sb2NrKCZvcGVuX2Nsb3NlX2xvY2spOwotICAgICAgIHJhZGlvLT5kaXNjb25uZWN0ZWQgPSAxOworCW11dGV4X2xvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOworCXJhZGlvLT5kaXNjb25uZWN0ZWQgPSAxOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcmFkaW8tPndvcmspOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0gICAgICAgaWYgKHJhZGlvLT51c2VycyA9PSAwKSB7Ci0JICAgICAgIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7Ci0JICAgICAgIGtmcmVlKHJhZGlvLT5idWZmZXIpOwotCSAgICAgICBrZnJlZShyYWRpbyk7Ci0gICAgICAgfQotICAgICAgIG11dGV4X3VubG9jaygmb3Blbl9jbG9zZV9sb2NrKTsKKwlpZiAocmFkaW8tPnVzZXJzID09IDApIHsKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2KTsKKwkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJCWtmcmVlKHJhZGlvKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+ZGlzY29ubmVjdF9sb2NrKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggNWNjYjBhZS4uZjYwNmQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMjQsMjEgKzI0LDIxIEBACiAJc2VsZWN0IFZJREVPQlVGX0dFTgogCXRyaXN0YXRlCiAKK2NvbmZpZyBWSURFT0JVRl9ETUFfQ09OVElHCisJZGVwZW5kcyBvbiBIQVNfRE1BCisJc2VsZWN0IFZJREVPQlVGX0dFTgorCXRyaXN0YXRlCisKIGNvbmZpZyBWSURFT0JVRl9EVkIKIAl0cmlzdGF0ZQogCXNlbGVjdCBWSURFT0JVRl9HRU4KLQlzZWxlY3QgVklERU9CVUZfRE1BX1NHCiAKIGNvbmZpZyBWSURFT19CVENYCiAJdHJpc3RhdGUKIAotY29uZmlnIFZJREVPX0lSX0kyQwotCXRyaXN0YXRlCi0KIGNvbmZpZyBWSURFT19JUgogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBJTlBVVAotCXNlbGVjdCBWSURFT19JUl9JMkMgaWYgSTJDCiAKIGNvbmZpZyBWSURFT19UVkVFUFJPTQogCXRyaXN0YXRlCkBAIC04NCw2ICs4NCwxOSBAQAogCiAJICBJbiBkb3VidCwgc2F5IFkuCiAKK2NvbmZpZyBWSURFT19JUl9JMkMKKwl0cmlzdGF0ZSAiSTJDIG1vZHVsZSBmb3IgSVIiIGlmICFWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX0lSCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgTW9zdCBib2FyZHMgaGF2ZSBhbiBJUiBjaGlwIGRpcmVjdGx5IGNvbm5lY3RlZCB2aWEgR1BJTy4gSG93ZXZlciwKKwkgIHNvbWUgdmlkZW8gYm9hcmRzIGhhdmUgdGhlIElSIGNvbm5lY3RlZCB2aWEgSTJDIGJ1cy4KKworCSAgSWYgeW91ciBib2FyZCBkb2Vzbid0IGhhdmUgYW4gSTJDIElSIGNoaXAsIHlvdSBtYXkgZGlzYWJsZSB0aGlzCisJICBvcHRpb24uCisKKwkgIEluIGRvdWJ0LCBzYXkgWS4KKwogIwogIyBFbmNvZGVyIC8gRGVjb2RlciBtb2R1bGUgY29uZmlndXJhdGlvbgogIwpAQCAtNjAwLDkgKzYxMyw2IEBACiAJICBkcml2ZXIgZm9yIFBDSS4gIFRoZXJlIGlzIGEgcHJvZHVjdCBwYWdlIGF0CiAJICA8aHR0cDovL3d3dy5zdHJhZGlzLmNvbS8+LgogCi1jb25maWcgVklERU9fWk9SQU5fWlIzNjA2MAotCXRyaXN0YXRlCi0KIGNvbmZpZyBWSURFT19aT1JBTgogCXRyaXN0YXRlICJab3JhbiBaUjM2MDU3LzM2MDY3IFZpZGVvIEZvciBMaW51eCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBJMkNfQUxHT0JJVCAmJiBWSURFT19WNEwxICYmIFZJUlRfVE9fQlVTCkBAIC02MTYsMjUgKzYyNiw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6cjM2MDY3LgogCi1jb25maWcgVklERU9fWk9SQU5fQlVaCi0JdHJpc3RhdGUgIklvbWVnYSBCdXogc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCi0Jc2VsZWN0IFZJREVPX1NBQTcxMTEgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQlzZWxlY3QgVklERU9fU0FBNzE4NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCXNlbGVjdCBWSURFT19aT1JBTl9aUjM2MDYwCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgdGhlIElvbWVnYSBCdXogTUpQRUcgY2FwdHVyZS9wbGF5YmFjayBjYXJkLgotCi1jb25maWcgVklERU9fWk9SQU5fREMxMAotCXRyaXN0YXRlICJQaW5uYWNsZS9NaXJvIERDMTAoKykgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCi0Jc2VsZWN0IFZJREVPX1NBQTcxMTAKLQlzZWxlY3QgVklERU9fQURWNzE3NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCXNlbGVjdCBWSURFT19aT1JBTl9aUjM2MDYwCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgdGhlIFBpbm5hY2xlL01pcm8gREMxMCgrKSBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCi0JICBjYXJkLgotCiBjb25maWcgVklERU9fWk9SQU5fREMzMAogCXRyaXN0YXRlICJQaW5uYWNsZS9NaXJvIERDMzAoKykgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCkBAIC02NDUsMzIgKzYzNiw1NCBAQAogCSAgY2FyZC4gVGhpcyBhbHNvIHN1cHBvcnRzIHJlYWxseSBvbGQgREMxMCBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIHpyMzYwNTAgTUpQRUcgY29kZWMgYW5kIHpyMzYwMTYgVkZFLgogCitjb25maWcgVklERU9fWk9SQU5fWlIzNjA2MAorCXRyaXN0YXRlICJab3JhbiBaUjM2MDYwIgorCWRlcGVuZHMgb24gVklERU9fWk9SQU4KKwloZWxwCisJICBTYXkgWSB0byBzdXBwb3J0IFpvcmFuIGJvYXJkcyBiYXNlZCBvbiAzNjA2MCBjaGlwcy4KKwkgIFRoaXMgaW5jbHVkZXMgSW9tZWdhIEJ1cywgUGlubmFjbGUgREMxMCwgTGludXggbWVkaWEgTGFicyAzMworCSAgYW5kIDMzIFIxMCBhbmQgQXZlck1lZGlhIDYgYm9hcmRzLgorCitjb25maWcgVklERU9fWk9SQU5fQlVaCisJdHJpc3RhdGUgIklvbWVnYSBCdXogc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKKwlzZWxlY3QgVklERU9fU0FBNzExMSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19TQUE3MTg1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhlIElvbWVnYSBCdXogTUpQRUcgY2FwdHVyZS9wbGF5YmFjayBjYXJkLgorCitjb25maWcgVklERU9fWk9SQU5fREMxMAorCXRyaXN0YXRlICJQaW5uYWNsZS9NaXJvIERDMTAoKykgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKKwlzZWxlY3QgVklERU9fU0FBNzExMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19BRFY3MTc1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhlIFBpbm5hY2xlL01pcm8gREMxMCgrKSBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCisJICBjYXJkLgorCiBjb25maWcgVklERU9fWk9SQU5fTE1MMzMKIAl0cmlzdGF0ZSAiTGludXggTWVkaWEgTGFicyBMTUwzMyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fWk9SQU4KKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKIAlzZWxlY3QgVklERU9fQlQ4MTkgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fQlQ4NTYgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQlzZWxlY3QgVklERU9fWk9SQU5fWlIzNjA2MAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBMaW51eCBNZWRpYSBMYWJzIExNTDMzIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKIAkgIGNhcmQuCiAKIGNvbmZpZyBWSURFT19aT1JBTl9MTUwzM1IxMAogCXRyaXN0YXRlICJMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19aT1JBTgorCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAogCXNlbGVjdCBWSURFT19TQUE3MTE0IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX0FEVjcxNzAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQlzZWxlY3QgVklERU9fWk9SQU5fWlIzNjA2MAogCWhlbHAKIAkgIHN1cHBvcnQgZm9yIHRoZSBMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKIAkgIGNhcmQuCiAKIGNvbmZpZyBWSURFT19aT1JBTl9BVlM2RVlFUwogCXRyaXN0YXRlICJBdmVyTWVkaWEgNiBFeWVzIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBWSURFT19aT1JBTiAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MCAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19CVDg1NiBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19LUzAxMjcgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQlzZWxlY3QgVklERU9fWk9SQU5fWlIzNjA2MAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBBdmVyTWVkaWEgNiBFeWVzIHZpZGVvIHN1cnZlaWxsYW5jZSBjYXJkLgogCkBAIC04MDEsNiArODE0LDggQEAKIAogCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOiA8aHR0cDovL2xpbnV4LXV2Yy5iZXJsaW9zLmRlLz4KIAorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyIKQEAgLTkwNSwxMiArOTIwLDIxIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzdGt3ZWJjYW0uCiAKK2NvbmZpZyBVU0JfUzIyNTUKKwl0cmlzdGF0ZSAiVVNCIFNlbnNvcmF5IDIyNTUgdmlkZW8gY2FwdHVyZSBkZXZpY2UiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyCisJc2VsZWN0IFZJREVPQlVGX1ZNQUxMT0MKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBTZW5zb3JheSAyMjU1IFVTQiBkZXZpY2UuCisJICBUaGlzIGRyaXZlciBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGNhbGxlZCBzMjI1NWRydi4KKwogZW5kaWYgIyBWNExfVVNCX0RSSVZFUlMKIAogY29uZmlnIFNPQ19DQU1FUkEKIAl0cmlzdGF0ZSAiU29DIGNhbWVyYSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBIQVNfRE1BCi0Jc2VsZWN0IFZJREVPQlVGX0RNQV9TRworCXNlbGVjdCBWSURFT0JVRl9HRU4KIAloZWxwCiAJICBTb0MgQ2FtZXJhIGlzIGEgY29tbW9uIEFQSSB0byBzZXZlcmFsIGNhbWVyYXMsIG5vdCBjb25uZWN0aW5nCiAJICBvdmVyIGEgYnVzIGxpa2UgUENJIG9yIFVTQi4gRm9yIGV4YW1wbGUgc29tZSBpMmMgY2FtZXJhIGNvbm5lY3RlZApAQCAtOTQ1LDExICs5NjksMjYgQEAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdXIgTVQ5VjAyMiBjYW1lcmEgdXNlcyBhIFBDQTk1MzYgSTJDIEdQSU8KIAkgIGV4dGVuZGVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBkYXRhd2lkdGggbW9kZXMKIAorY29uZmlnIFNPQ19DQU1FUkFfUExBVEZPUk0KKwl0cmlzdGF0ZSAicGxhdGZvcm0gY2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBCisJaGVscAorCSAgVGhpcyBpcyBhIGdlbmVyaWMgU29DIGNhbWVyYSBwbGF0Zm9ybSBkcml2ZXIsIHVzZWZ1bCBmb3IgdGVzdGluZworCiBjb25maWcgVklERU9fUFhBMjd4CiAJdHJpc3RhdGUgIlBYQTI3eCBRdWljayBDYXB0dXJlIEludGVyZmFjZSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUFhBMjd4CiAJc2VsZWN0IFNPQ19DQU1FUkEKKwlzZWxlY3QgVklERU9CVUZfRE1BX1NHCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIHY0bDIgZHJpdmVyIGZvciB0aGUgUFhBMjd4IFF1aWNrIENhcHR1cmUgSW50ZXJmYWNlCiAKK2NvbmZpZyBWSURFT19TSF9NT0JJTEVfQ0VVCisJdHJpc3RhdGUgIlN1cGVySCBNb2JpbGUgQ0VVIEludGVyZmFjZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19ERVYKKwlzZWxlY3QgU09DX0NBTUVSQQorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHY0bDIgZHJpdmVyIGZvciB0aGUgU3VwZXJIIE1vYmlsZSBDRVUgSW50ZXJmYWNlCisKIGVuZGlmICMgVklERU9fQ0FQVFVSRV9EUklWRVJTCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCBlY2JiZmFhLi40NWQ1ZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTg4LDYgKzg4LDcgQEAKIAogb2JqLSQoQ09ORklHX1ZJREVPQlVGX0dFTikgKz0gdmlkZW9idWYtY29yZS5vCiBvYmotJChDT05GSUdfVklERU9CVUZfRE1BX1NHKSArPSB2aWRlb2J1Zi1kbWEtc2cubworb2JqLSQoQ09ORklHX1ZJREVPQlVGX0RNQV9DT05USUcpICs9IHZpZGVvYnVmLWRtYS1jb250aWcubwogb2JqLSQoQ09ORklHX1ZJREVPQlVGX1ZNQUxMT0MpICs9IHZpZGVvYnVmLXZtYWxsb2Mubwogb2JqLSQoQ09ORklHX1ZJREVPQlVGX0RWQikgKz0gdmlkZW9idWYtZHZiLm8KIG9iai0kKENPTkZJR19WSURFT19CVENYKSAgKz0gYnRjeC1yaXNjLm8KQEAgLTExNywxMSArMTE4LDEzIEBACiBvYmotJChDT05GSUdfVVNCX0VUNjFYMjUxKSAgICAgICs9IGV0NjF4MjUxLwogb2JqLSQoQ09ORklHX1VTQl9QV0MpICAgICAgICAgICArPSBwd2MvCiBvYmotJChDT05GSUdfVVNCX1pDMDMwMSkgICAgICAgICs9IHpjMDMwMS8KK29iai0kKENPTkZJR19VU0JfR1NQQ0EpICAgICAgICAgKz0gZ3NwY2EvCiAKIG9iai0kKENPTkZJR19VU0JfSUJNQ0FNKSAgICAgICAgKz0gdXNidmlkZW8vCiBvYmotJChDT05GSUdfVVNCX0tPTklDQVdDKSAgICAgICs9IHVzYnZpZGVvLwogb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB1c2J2aWRlby8KIG9iai0kKENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSKQkrPSB1c2J2aWRlby8KK29iai0kKENPTkZJR19VU0JfUzIyNTUpCQkrPSBzMjI1NWRydi5vCiAKIG9iai0kKENPTkZJR19WSURFT19JVlRWKSArPSBpdnR2Lwogb2JqLSQoQ09ORklHX1ZJREVPX0NYMTgpICs9IGN4MTgvCkBAIC0xMzAsOSArMTMzLDExIEBACiBvYmotJChDT05GSUdfVklERU9fQ1gyMzg4NSkgKz0gY3gyMzg4NS8KIAogb2JqLSQoQ09ORklHX1ZJREVPX1BYQTI3eCkJKz0gcHhhX2NhbWVyYS5vCitvYmotJChDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSkJKz0gc2hfbW9iaWxlX2NldV9jYW1lcmEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkEpCSs9IHNvY19jYW1lcmEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSkJKz0gbXQ5bTAwMS5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyKQkrPSBtdDl2MDIyLm8KK29iai0kKENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNKQkrPSBzb2NfY2FtZXJhX3BsYXRmb3JtLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0FVMDgyOCkgKz0gYXUwODI4LwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKaW5kZXggOGJmZDVjNy4uZGRkMmE3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwpAQCAtNTE2LDcgKzUxNiw3IEBACiAKIAlkcHJpbnRrKDEsCiAJCUtFUk5fSU5GTwotCQkic2FhNzExMS5jOiBkZXRlY3RpbmcgYnQ4MTkgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKKwkJImJ0ODE5OiBkZXRlY3RpbmcgYnQ4MTkgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKIAkJYWRkcmVzcyA8PCAxKTsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnQ4MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnQ4MzIuYwppbmRleCBmOTJmMDZkLi4yMTZmYzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0ODMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idDgzMi5jCkBAIC0xNzksNyArMTc5LDYgQEAKIAogCXY0bF9pbmZvKCZ0LT5jbGllbnQsImNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyPDwxKTsKIAotCiAJaWYoISBidDgzMl9pbml0KCZ0LT5jbGllbnQpKSB7CiAJCWJ0ODMyX2RldGFjaCgmdC0+Y2xpZW50KTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IDAxNjVhYWMuLjBlYTU1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTI0NDgsNyArMjQ0OCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGJ0dHZfZ19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCBidHR2X2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgYnR0dl9maCAqZmggID0gcHJpdjsKQEAgLTI0NjEsNyArMjQ2MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnR0dl9nX2ZtdF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCBidHR2X2dfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IGJ0dHZfZmggKmZoICA9IHByaXY7CkBAIC0yNDcyLDcgKzI0NzIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJ0dHZfdHJ5X2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IGJ0dHZfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCWNvbnN0IHN0cnVjdCBidHR2X2Zvcm1hdCAqZm10OwpAQCAtMjUzMiw3ICsyNTMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidHR2X3RyeV9mbXRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgYnR0dl90cnlfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBidHR2X2ZoICpmaCA9IHByaXY7CkBAIC0yNTQyLDcgKzI1NDIsNyBAQAogCQkJLyogYWRqdXN0X2Nyb3AgKi8gMCk7CiB9CiAKLXN0YXRpYyBpbnQgYnR0dl9zX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IGJ0dHZfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJaW50IHJldHZhbDsKQEAgLTI1NTYsNyArMjU1Niw3IEBACiAJaWYgKDAgIT0gcmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dmFsID0gYnR0dl90cnlfZm10X2NhcChmaWxlLCBwcml2LCBmKTsKKwlyZXR2YWwgPSBidHR2X3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKIAlpZiAoMCAhPSByZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTI1OTEsNyArMjU5MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnR0dl9zX2ZtdF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCBidHR2X3NfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgYnR0dl9maCAqZmggPSBwcml2OwpAQCAtMjY2MSw3ICsyNjYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidHR2X2VudW1fZm10X3ZiaShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCitzdGF0aWMgaW50IGJ0dHZfZW51bV9mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKIAlpZiAoMCAhPSBmLT5pbmRleCkKQEAgLTI2OTIsNyArMjY5Miw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgYnR0dl9lbnVtX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCBidHR2X2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7CiAJaW50IHJjID0gYnR0dl9lbnVtX2ZtdF9jYXBfb3ZyKGYpOwpAQCAtMjcwMyw3ICsyNzAzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidHR2X2VudW1fZm10X292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCBidHR2X2VudW1fZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKIAlpbnQgcmM7CkBAIC0zMzYyLDE4ICszMzYyLDE4IEBACiAJLmZvcHMgICAgID0gJmJ0dHZfZm9wcywKIAkubWlub3IgICAgPSAtMSwKIAkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgICAgICAgICAgID0gYnR0dl9xdWVyeWNhcCwKLQkudmlkaW9jX2VudW1fZm10X2NhcCAgICAgICAgICAgID0gYnR0dl9lbnVtX2ZtdF9jYXAsCi0JLnZpZGlvY19nX2ZtdF9jYXAgICAgICAgICAgICAgICA9IGJ0dHZfZ19mbXRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF9jYXAgICAgICAgICAgICAgPSBidHR2X3RyeV9mbXRfY2FwLAotCS52aWRpb2Nfc19mbXRfY2FwICAgICAgICAgICAgICAgPSBidHR2X3NfZm10X2NhcCwKLQkudmlkaW9jX2VudW1fZm10X292ZXJsYXkgICAgICAgID0gYnR0dl9lbnVtX2ZtdF9vdmVybGF5LAotCS52aWRpb2NfZ19mbXRfb3ZlcmxheSAgICAgICAgICAgPSBidHR2X2dfZm10X292ZXJsYXksCi0JLnZpZGlvY190cnlfZm10X292ZXJsYXkgICAgICAgICA9IGJ0dHZfdHJ5X2ZtdF9vdmVybGF5LAotCS52aWRpb2Nfc19mbXRfb3ZlcmxheSAgICAgICAgICAgPSBidHR2X3NfZm10X292ZXJsYXksCi0JLnZpZGlvY19lbnVtX2ZtdF92YmkgICAgICAgICAgICA9IGJ0dHZfZW51bV9mbXRfdmJpLAotCS52aWRpb2NfZ19mbXRfdmJpICAgICAgICAgICAgICAgPSBidHR2X2dfZm10X3ZiaSwKLQkudmlkaW9jX3RyeV9mbXRfdmJpICAgICAgICAgICAgID0gYnR0dl90cnlfZm10X3ZiaSwKLQkudmlkaW9jX3NfZm10X3ZiaSAgICAgICAgICAgICAgID0gYnR0dl9zX2ZtdF92YmksCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwICAgICAgICA9IGJ0dHZfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgICAgICAgICAgID0gYnR0dl9nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgICAgICAgPSBidHR2X3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgICAgICAgICAgID0gYnR0dl9zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX292ZXJsYXkgICAgPSBidHR2X2VudW1fZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfZ19mbXRfdmlkX292ZXJsYXkgICAgICAgPSBidHR2X2dfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheSAgICAgPSBidHR2X3RyeV9mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheSAgICAgICA9IGJ0dHZfc19mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY19lbnVtX2ZtdF92YmlfY2FwICAgICAgICA9IGJ0dHZfZW51bV9mbXRfdmJpX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZiaV9jYXAgICAgICAgICAgID0gYnR0dl9nX2ZtdF92YmlfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwICAgICAgICAgPSBidHR2X3RyeV9mbXRfdmJpX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZiaV9jYXAgICAgICAgICAgID0gYnR0dl9zX2ZtdF92YmlfY2FwLAogCS52aWRpb2NfZ19hdWRpbyAgICAgICAgICAgICAgICAgPSBidHR2X2dfYXVkaW8sCiAJLnZpZGlvY19zX2F1ZGlvICAgICAgICAgICAgICAgICA9IGJ0dHZfc19hdWRpbywKIAkudmlkaW9jX2Nyb3BjYXAgICAgICAgICAgICAgICAgID0gYnR0dl9jcm9wY2FwLApAQCAtMzcwNSw3ICszNzA1LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKHJpc2MtPnNpemUgPj4gMik7IGkgKz0gbikgewogCQlwcmludGsoIiVzOiAgIDB4JWx4OiAiLCBidHYtPmMubmFtZSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nKShyaXNjLT5kbWEgKyAoaTw8MikpKTsKLQkJbiA9IGJ0dHZfcmlzY19kZWNvZGUocmlzYy0+Y3B1W2ldKTsKKwkJbiA9IGJ0dHZfcmlzY19kZWNvZGUobGUzMl90b19jcHUocmlzYy0+Y3B1W2ldKSk7CiAJCWZvciAoaiA9IDE7IGogPCBuOyBqKyspCiAJCQlwcmludGsoIiVzOiAgIDB4JWx4OiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCiAJCQkgICAgICAgYnR2LT5jLm5hbWUsICh1bnNpZ25lZCBsb25nKShyaXNjLT5kbWEgKyAoKGkraik8PDIpKSwKQEAgLTM3NzQsOCArMzc3NCw4IEBACiAJcHJpbnRrKCJidHR2JWQ6IGlycTogc2tpcHBlZCBmcmFtZSBbbWFpbj0lbHgsb192Ymk9JWx4LG9fZmllbGQ9JWx4LHJjPSVseF1cbiIsCiAJICAgICAgIGJ0di0+Yy5uciwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcpYnR2LT5tYWluLmRtYSwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpYnR2LT5tYWluLmNwdVtSSVNDX1NMT1RfT19WQkkrMV0sCi0JICAgICAgICh1bnNpZ25lZCBsb25nKWJ0di0+bWFpbi5jcHVbUklTQ19TTE9UX09fRklFTEQrMV0sCisJICAgICAgICh1bnNpZ25lZCBsb25nKWxlMzJfdG9fY3B1KGJ0di0+bWFpbi5jcHVbUklTQ19TTE9UX09fVkJJKzFdKSwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpbGUzMl90b19jcHUoYnR2LT5tYWluLmNwdVtSSVNDX1NMT1RfT19GSUVMRCsxXSksCiAJICAgICAgICh1bnNpZ25lZCBsb25nKXJjKTsKIAogCWlmICgwID09IChidHJlYWQoQlQ4NDhfRFNUQVRVUykgJiBCVDg0OF9EU1RBVFVTX0hMT0MpKSB7CkBAIC00MTg4LDYgKzQxODgsNyBAQAogCXZmZC0+ZGV2ICAgICA9ICZidHYtPmMucGNpLT5kZXY7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJdmZkLT50eXBlICAgID0gdHlwZTsKKwl2ZmQtPmRlYnVnICAgPSBidHR2X2RlYnVnOwogCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICJCVCVkJXMgJXMgKCVzKSIsCiAJCSBidHYtPmlkLCAoYnR2LT5pZD09ODQ4ICYmIGJ0di0+cmV2aXNpb249PTB4MTIpID8gIkEiIDogIiIsCiAJCSB0eXBlX25hbWUsIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKaW5kZXggNGQ1YjgwMy4uYmNkMmNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwpAQCAtMzYsMTEgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYnR0dl9pMmNfYWxnb19iaXRfdGVtcGxhdGU7Ci1zdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGJ0dHZfaTJjX2FkYXBfc3dfdGVtcGxhdGU7Ci1zdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGJ0dHZfaTJjX2FkYXBfaHdfdGVtcGxhdGU7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgYnR0dl9pMmNfY2xpZW50X3RlbXBsYXRlOwotCiBzdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiAKIHN0YXRpYyBpbnQgaTJjX2RlYnVnOwpAQCAtMTA0LDcgKzk5LDcgQEAKIAlyZXR1cm4gc3RhdGU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYnR0dl9pMmNfYWxnb19iaXRfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIF9fZGV2aW5pdGRhdGEgYnR0dl9pMmNfYWxnb19iaXRfdGVtcGxhdGUgPSB7CiAJLnNldHNkYSAgPSBidHR2X2JpdF9zZXRzZGEsCiAJLnNldHNjbCAgPSBidHR2X2JpdF9zZXRzY2wsCiAJLmdldHNkYSAgPSBidHR2X2JpdF9nZXRzZGEsCkBAIC0xMTMsMTQgKzEwOCw2IEBACiAJLnRpbWVvdXQgPSAyMDAsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGJ0dHZfaTJjX2FkYXBfc3dfdGVtcGxhdGUgPSB7Ci0JLm93bmVyICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLmNsYXNzICAgICAgICAgICAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLQkubmFtZSAgICAgICAgICAgICAgPSAiYnR0diIsCi0JLmlkICAgICAgICAgICAgICAgID0gSTJDX0hXX0JfQlQ4NDgsCi0JLmNsaWVudF9yZWdpc3RlciAgID0gYXR0YWNoX2luZm9ybSwKLX07Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBJMkMgZnVuY3Rpb25zIC0gaGFyZHdhcmUgaTJjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0yNzAsMjAgKzI1NywxMSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBidHR2X2FsZ28gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gYnR0dl9hbGdvID0gewogCS5tYXN0ZXJfeGZlciAgID0gYnR0dl9pMmNfeGZlciwKIAkuZnVuY3Rpb25hbGl0eSA9IGZ1bmN0aW9uYWxpdHksCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGJ0dHZfaTJjX2FkYXBfaHdfdGVtcGxhdGUgPSB7Ci0JLm93bmVyICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLmNsYXNzICAgICAgICAgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCS5uYW1lICAgICAgICAgID0gImJ0ODc4IiwKLQkuaWQgICAgICAgICAgICA9IEkyQ19IV19CX0JUODQ4IC8qIEZJWE1FICovLAotCS5hbGdvICAgICAgICAgID0gJmJ0dHZfYWxnbywKLQkuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybSwKLX07Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBJMkMgZnVuY3Rpb25zIC0gY29tbW9uIHN0dWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0zMzIsMTAgKzMxMCw2IEBACiAJaTJjX2NsaWVudHNfY29tbWFuZCgmYnR2LT5jLmkyY19hZGFwLCBjbWQsIGFyZyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBidHR2X2kyY19jbGllbnRfdGVtcGxhdGUgPSB7Ci0JLm5hbWUJPSAiYnR0diBpbnRlcm5hbCIsCi19OwotCiAKIC8qIHJlYWQgSTJDICovCiBpbnQgYnR0dl9JMkNSZWFkKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciAqcHJvYmVfZm9yKQpAQCAtNDE3LDI5ICszOTEsMzQgQEAKIC8qIGluaXQgKyByZWdpc3RlciBpMmMgYWxnby1iaXQgYWRhcHRlciAqLwogaW50IF9fZGV2aW5pdCBpbml0X2J0dHZfaTJjKHN0cnVjdCBidHR2ICpidHYpCiB7Ci0JbWVtY3B5KCZidHYtPmkyY19jbGllbnQsICZidHR2X2kyY19jbGllbnRfdGVtcGxhdGUsCi0JICAgICAgIHNpemVvZihidHR2X2kyY19jbGllbnRfdGVtcGxhdGUpKTsKKwlzdHJsY3B5KGJ0di0+aTJjX2NsaWVudC5uYW1lLCAiYnR0diBpbnRlcm5hbCIsIEkyQ19OQU1FX1NJWkUpOwogCiAJaWYgKGkyY19odykKIAkJYnR2LT51c2VfaTJjX2h3ID0gMTsKIAlpZiAoYnR2LT51c2VfaTJjX2h3KSB7CiAJCS8qIGJ0ODc4ICovCi0JCW1lbWNweSgmYnR2LT5jLmkyY19hZGFwLCAmYnR0dl9pMmNfYWRhcF9od190ZW1wbGF0ZSwKLQkJICAgICAgIHNpemVvZihidHR2X2kyY19hZGFwX2h3X3RlbXBsYXRlKSk7CisJCXN0cmxjcHkoYnR2LT5jLmkyY19hZGFwLm5hbWUsICJidDg3OCIsCisJCQlzaXplb2YoYnR2LT5jLmkyY19hZGFwLm5hbWUpKTsKKwkJYnR2LT5jLmkyY19hZGFwLmlkID0gSTJDX0hXX0JfQlQ4NDg7CS8qIEZJWE1FICovCisJCWJ0di0+Yy5pMmNfYWRhcC5hbGdvID0gJmJ0dHZfYWxnbzsKIAl9IGVsc2UgewogCQkvKiBidDg0OCAqLwogCS8qIFByZXZlbnRzIHVzYWdlIG9mIGludmFsaWQgZGVsYXkgdmFsdWVzICovCiAJCWlmIChpMmNfdWRlbGF5PDUpCiAJCQlpMmNfdWRlbGF5PTU7Ci0JCWJ0dHZfaTJjX2FsZ29fYml0X3RlbXBsYXRlLnVkZWxheT1pMmNfdWRlbGF5OwogCi0JCW1lbWNweSgmYnR2LT5jLmkyY19hZGFwLCAmYnR0dl9pMmNfYWRhcF9zd190ZW1wbGF0ZSwKLQkJICAgICAgIHNpemVvZihidHR2X2kyY19hZGFwX3N3X3RlbXBsYXRlKSk7CisJCXN0cmxjcHkoYnR2LT5jLmkyY19hZGFwLm5hbWUsICJidHR2IiwKKwkJCXNpemVvZihidHYtPmMuaTJjX2FkYXAubmFtZSkpOworCQlidHYtPmMuaTJjX2FkYXAuaWQgPSBJMkNfSFdfQl9CVDg0ODsKIAkJbWVtY3B5KCZidHYtPmkyY19hbGdvLCAmYnR0dl9pMmNfYWxnb19iaXRfdGVtcGxhdGUsCiAJCSAgICAgICBzaXplb2YoYnR0dl9pMmNfYWxnb19iaXRfdGVtcGxhdGUpKTsKKwkJYnR2LT5pMmNfYWxnby51ZGVsYXkgPSBpMmNfdWRlbGF5OwogCQlidHYtPmkyY19hbGdvLmRhdGEgPSBidHY7CiAJCWJ0di0+Yy5pMmNfYWRhcC5hbGdvX2RhdGEgPSAmYnR2LT5pMmNfYWxnbzsKIAl9CisJYnR2LT5jLmkyY19hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJYnR2LT5jLmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKKwlidHYtPmMuaTJjX2FkYXAuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybTsKIAogCWJ0di0+Yy5pMmNfYWRhcC5kZXYucGFyZW50ID0gJmJ0di0+Yy5wY2ktPmRldjsKIAlzbnByaW50ZihidHYtPmMuaTJjX2FkYXAubmFtZSwgc2l6ZW9mKGJ0di0+Yy5pMmNfYWRhcC5uYW1lKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYwppbmRleCBiZmRiYzQ2Li42OGYyOGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCkBAIC0zMDMsNyArMzAzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGJ0dHZfdHJ5X2ZtdF92Ymkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZnJ0KQoraW50IGJ0dHZfdHJ5X2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZydCkKIHsKIAlzdHJ1Y3QgYnR0dl9maCAqZmggPSBmOwogCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OwpAQCAtMzIxLDcgKzMyMSw3IEBACiB9CiAKIAotaW50IGJ0dHZfc19mbXRfdmJpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZydCkKK2ludCBidHR2X3NfZm10X3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZnJ0KQogewogCXN0cnVjdCBidHR2X2ZoICpmaCA9IGY7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7CkBAIC0zNjksNyArMzY5LDcgQEAKIH0KIAogCi1pbnQgYnR0dl9nX2ZtdF92Ymkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZnJ0KQoraW50IGJ0dHZfZ19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmcnQpCiB7CiAJc3RydWN0IGJ0dHZfZmggKmZoID0gZjsKIAljb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmgKaW5kZXggZjIzOTMyMC4uNmQ5M2QxNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCkBAIC0yOTksNyArMjk5LDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHN5c2ZzL2RyaXZlci1tb2RlZCBiYXNlZCBncGlvIGFjY2VzcyBpbnRlcmZhY2UgICAgICAgICAgICAgKi8KIAotCiBzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlIHsKIAlzdHJ1Y3QgZGV2aWNlICAgIGRldjsKIAlzdHJ1Y3QgYnR0dl9jb3JlICpjb3JlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCmluZGV4IDI3ZGE3YjQuLjA4ZWY1NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtc2cuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgpAQCAtMjU0LDIxICsyNTMsMTkgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGJ0dHYtdmJpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotaW50IGJ0dHZfdHJ5X2ZtdF92Ymkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwotaW50IGJ0dHZfZ19mbXRfdmJpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKLWludCBidHR2X3NfZm10X3ZiaShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7CitpbnQgYnR0dl90cnlfZm10X3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOworaW50IGJ0dHZfZ19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7CitpbnQgYnR0dl9zX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKIAogZXh0ZXJuIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgYnR0dl92YmlfcW9wczsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogYnR0di1ncGlvLmMgKi8KIAotCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIGJ0dHZfc3ViX2J1c190eXBlOwogaW50IGJ0dHZfc3ViX2FkZF9kZXZpY2Uoc3RydWN0IGJ0dHZfY29yZSAqY29yZSwgY2hhciAqbmFtZSk7CiBpbnQgYnR0dl9zdWJfZGVsX2RldmljZXMoc3RydWN0IGJ0dHZfY29yZSAqY29yZSk7CiAKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogYnR0di1kcml2ZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCA1MTk1YjFmLi5kOTk0NTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTE1OTMsNyArMTU5Myw3IEBACiAJLnNpemVpbWFnZQk9IFZHQV9XSURUSCpWR0FfSEVJR0hUKjIsCiB9OwogCi1zdGF0aWMgaW50IGNhZmVfdmlkaW9jX2VudW1fZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQogewogCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKQEAgLTE2MDgsNyArMTYwOCw3IEBACiB9CiAKIAotc3RhdGljIGludCBjYWZlX3ZpZGlvY190cnlfZm10X2NhcCAoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IGNhZmVfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7CiAJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwpAQCAtMTYyMCw3ICsxNjIwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGNhZmVfdmlkaW9jX3NfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7CiAJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwpAQCAtMTYzNSw3ICsxNjM1LDcgQEAKIAkvKgogCSAqIFNlZSBpZiB0aGUgZm9ybWF0dGluZyB3b3JrcyBpbiBwcmluY2lwbGUuCiAJICovCi0JcmV0ID0gY2FmZV92aWRpb2NfdHJ5X2ZtdF9jYXAoZmlscCwgcHJpdiwgZm10KTsKKwlyZXQgPSBjYWZlX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlscCwgcHJpdiwgZm10KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCS8qCkBAIC0xNjcwLDcgKzE2NzAsNyBAQAogICogVGhlIFY0bDIgc3BlYyB3YW50cyB1cyB0byBiZSBzbWFydGVyLCBhbmQgYWN0dWFsbHkgZ2V0IHRoaXMgZnJvbQogICogdGhlIGNhbWVyYSAoYW5kIG5vdCBtZXNzIHdpdGggaXQgYXQgb3BlbiB0aW1lKS4gIFNvbWVkYXkuCiAgKi8KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorc3RhdGljIGludCBjYWZlX3ZpZGlvY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwpAQCAtMTc4MCwxMCArMTc4MCwxMCBAQAogCS5yZWxlYXNlID0gY2FmZV92NGxfZGV2X3JlbGVhc2UsCiAKIAkudmlkaW9jX3F1ZXJ5Y2FwIAk9IGNhZmVfdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZW51bV9mbXRfY2FwCT0gY2FmZV92aWRpb2NfZW51bV9mbXRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF9jYXAJPSBjYWZlX3ZpZGlvY190cnlfZm10X2NhcCwKLQkudmlkaW9jX3NfZm10X2NhcAk9IGNhZmVfdmlkaW9jX3NfZm10X2NhcCwKLQkudmlkaW9jX2dfZm10X2NhcAk9IGNhZmVfdmlkaW9jX2dfZm10X2NhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSBjYWZlX3ZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCT0gY2FmZV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcAk9IGNhZmVfdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwCT0gY2FmZV92aWRpb2NfZ19mbXRfdmlkX2NhcCwKIAkudmlkaW9jX2VudW1faW5wdXQJPSBjYWZlX3ZpZGlvY19lbnVtX2lucHV0LAogCS52aWRpb2NfZ19pbnB1dAkJPSBjYWZlX3ZpZGlvY19nX2lucHV0LAogCS52aWRpb2Nfc19pbnB1dAkJPSBjYWZlX3ZpZGlvY19zX2lucHV0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jCmluZGV4IGNlZmQxMzguLjU0ZGUwY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NvbXBhdF9pb2N0bDMyLmMKQEAgLTg4NCw2ICs4ODQsNyBAQAogCWNhc2UgVklESU9DX0dfSU5QVVQzMjoKIAljYXNlIFZJRElPQ19TX0lOUFVUMzI6CiAJY2FzZSBWSURJT0NfVFJZX0ZNVDMyOgorCWNhc2UgVklESU9DX1NfSFdfRlJFUV9TRUVLOgogCQlyZXQgPSBkb192aWRlb19pb2N0bChmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTM0NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jczUzNDUuYwppbmRleCAwMzQxMTUwLi4xYzNmYTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTM0NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1MzQ1LmMKQEAgLTE3Myw0ICsxNzMsMyBAQAogCS5wcm9iZSA9IGNzNTM0NV9wcm9iZSwKIAkuaWRfdGFibGUgPSBjczUzNDVfaWQsCiB9OwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKaW5kZXggZDk2NWFmOC4uNjQ1YjMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwpAQCAtNDMsNyArNDMsNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLQogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xODksNCArMTg4LDMgQEAKIAkucHJvYmUgPSBjczUzbDMyYV9wcm9iZSwKIAkuaWRfdGFibGUgPSBjczUzbDMyYV9pZCwKIH07Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jCmluZGV4IDFhZGM0MDQuLjZkNWI5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uYwpAQCAtMjYsMTMgKzI2LDE3IEBACiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtYXVkaW8uaCIKIAorI2RlZmluZSBDWDE4X0FVRElPX0VOQUJMRSAweGM3MjAxNAorCiAvKiBTZWxlY3RzIHRoZSBhdWRpbyBpbnB1dCBhbmQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgY3VycmVudAogICAgc2V0dGluZ3MuICovCiBpbnQgY3gxOF9hdWRpb19zZXRfaW8oc3RydWN0IGN4MTggKmN4KQogewogCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAJdTMyIGF1ZGlvX2lucHV0OworCXUzMiB2YWw7CiAJaW50IG11eF9pbnB1dDsKKwlpbnQgZXJyOwogCiAJLyogRGV0ZXJtaW5lIHdoaWNoIGlucHV0IHRvIHVzZSAqLwogCWlmICh0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKSB7CkBAIC01MSw4ICs1NSwxNyBAQAogCWN4MThfaTJjX2h3KGN4LCBjeC0+Y2FyZC0+aHdfbXV4ZXIsIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOwogCiAJcm91dGUuaW5wdXQgPSBhdWRpb19pbnB1dDsKLQlyZXR1cm4gY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLAorCWVyciA9IGN4MThfaTJjX2h3KGN4LCBjeC0+Y2FyZC0+aHdfYXVkaW9fY3RybCwKIAkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl2YWwgPSByZWFkX3JlZyhDWDE4X0FVRElPX0VOQUJMRSkgJiB+MHgzMDsKKwl2YWwgfD0gKGF1ZGlvX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSA/IDB4MjAgOgorCQkJCQkoYXVkaW9faW5wdXQgPDwgNCk7CisJd3JpdGVfcmVnKHZhbCB8IDB4YjAwLCBDWDE4X0FVRElPX0VOQUJMRSk7CisJY3gxOF92YXBpKGN4LCBDWDE4X0FQVV9SRVNFVEFJLCAxLCAwKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBjeDE4X2F1ZGlvX3NldF9yb3V0ZShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWF1ZGlvLmMKaW5kZXggMmRjM2E1ZC4uYzQwYTI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1hdWRpby5jCkBAIC0zNCw3ICszNCw3IEBACiAJLyogU0FfTUNMS19TRUw9MSwgU0FfTUNMS19ESVY9MHgxMCAqLwogCWN4MThfYXZfd3JpdGUoY3gsIDB4MTI3LCAweDUwKTsKIAotCWlmIChzdGF0ZS0+YXVkX2lucHV0ICE9IENYMThfQVZfQVVESU9fU0VSSUFMKSB7CisJaWYgKHN0YXRlLT5hdWRfaW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpIHsKIAkJc3dpdGNoIChmcmVxKSB7CiAJCWNhc2UgMzIwMDA6CiAJCQkvKiBWSURfUExMIGFuZCBBVVhfUExMICovCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkvKiBNdXRlIGV2ZXJ5dGhpbmcgdG8gcHJldmVudCB0aGUgUEZGVCEgKi8KIAljeDE4X2F2X3dyaXRlKGN4LCAweDhkMywgMHgxZik7CiAKLQlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA9PSBDWDE4X0FWX0FVRElPX1NFUklBTCkgeworCWlmIChzdGF0ZS0+YXVkX2lucHV0IDw9IENYMThfQVZfQVVESU9fU0VSSUFMMikgewogCQkvKiBTZXQgUGF0aDEgdG8gU2VyaWFsIEF1ZGlvIElucHV0ICovCiAJCWN4MThfYXZfd3JpdGU0KGN4LCAweDhkMCwgMHgwMTAxMTAxMik7CiAKQEAgLTE2NSw3ICsxNjUsNyBAQAogCS8qIGRlYXNzZXJ0IHNvZnQgcmVzZXQgKi8KIAljeDE4X2F2X2FuZF9vcihjeCwgMHg4MTAsIH4weDEsIDB4MDApOwogCi0JaWYgKHN0YXRlLT5hdWRfaW5wdXQgIT0gQ1gxOF9BVl9BVURJT19TRVJJQUwpIHsKKwlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgewogCQkvKiBXaGVuIHRoZSBtaWNyb2NvbnRyb2xsZXIgZGV0ZWN0cyB0aGUKIAkJICogYXVkaW8gZm9ybWF0LCBpdCB3aWxsIHVubXV0ZSB0aGUgbGluZXMgKi8KIAkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4ODAzLCB+MHgxMCwgMHgxMCk7CkBAIC0yNzEsNyArMjcxLDcgQEAKIHsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwogCi0JaWYgKHN0YXRlLT5hdWRfaW5wdXQgIT0gQ1gxOF9BVl9BVURJT19TRVJJQUwpIHsKKwlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgewogCQkvKiBNdXN0IHR1cm4gb2ZmIG1pY3JvY29udHJvbGxlciBpbiBvcmRlciB0byBtdXRlIHNvdW5kLgogCQkgKiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBiZXN0IG1ldGhvZCwgYnV0IGl0IGRvZXMgd29yay4KIAkJICogSWYgdGhlIG1pY3JvY29udHJvbGxlciBpcyBydW5uaW5nLCB0aGVuIGl0IHdpbGwgdW5kbyBhbnkKQEAgLTI5OCwxNCArMjk4LDE0IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCQlpZiAoc3RhdGUtPmF1ZF9pbnB1dCAhPSBDWDE4X0FWX0FVRElPX1NFUklBTCkgeworCQlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgewogCQkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4ODAzLCB+MHgxMCwgMCk7CiAJCQljeDE4X2F2X3dyaXRlKGN4LCAweDhkMywgMHgxZik7CiAJCX0KIAkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4ODEwLCB+MHgxLCAxKTsKIAkJcmV0dmFsID0gc2V0X2F1ZGNsa19mcmVxKGN4LCAqKHUzMiAqKWFyZyk7CiAJCWN4MThfYXZfYW5kX29yKGN4LCAweDgxMCwgfjB4MSwgMCk7Ci0JCWlmIChzdGF0ZS0+YXVkX2lucHV0ICE9IENYMThfQVZfQVVESU9fU0VSSUFMKQorCQlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikKIAkJCWN4MThfYXZfYW5kX29yKGN4LCAweDgwMywgfjB4MTAsIDB4MTApOwogCQlyZXR1cm4gcmV0dmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMKaW5kZXggZmFjYTQzZS4uM2IwYTJjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYwpAQCAtNjksNTggKzY5LDYgQEAKIAkJCSAgICAgb3JfdmFsdWUpOwogfQogCi1pbnQgY3gxOF9hdl93cml0ZV9ub19hY2ZnKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHU4IHZhbHVlLCBpbnQgbm9fYWNmZ19tYXNrKQotewotCWludCByZXR2YWw7Ci0JdTMyIHNhdmVkX3JlZ1s4XSA9IHswfTsKLQotCWlmIChub19hY2ZnX21hc2sgJiBDWEFERUNfTk9fQUNGR19BRkUpIHsKLQkJc2F2ZWRfcmVnWzBdID0gY3gxOF9hdl9yZWFkNChjeCwgQ1hBREVDX0NISVBfQ1RSTCk7Ci0JCXNhdmVkX3JlZ1sxXSA9IGN4MThfYXZfcmVhZDQoY3gsIENYQURFQ19BRkVfQ1RSTCk7Ci0JfQotCi0JaWYgKG5vX2FjZmdfbWFzayAmIENYQURFQ19OT19BQ0ZHX1BMTCkgewotCQlzYXZlZF9yZWdbMl0gPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfUExMX0NUUkwxKTsKLQkJc2F2ZWRfcmVnWzNdID0gY3gxOF9hdl9yZWFkNChjeCwgQ1hBREVDX1ZJRF9QTExfRlJBQyk7Ci0JfQotCi0JaWYgKG5vX2FjZmdfbWFzayAmIENYQURFQ19OT19BQ0ZHX1ZJRCkgewotCQlzYXZlZF9yZWdbNF0gPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfSE9SSVpfVElNX0NUUkwpOwotCQlzYXZlZF9yZWdbNV0gPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfVkVSVF9USU1fQ1RSTCk7Ci0JCXNhdmVkX3JlZ1s2XSA9IGN4MThfYXZfcmVhZDQoY3gsIENYQURFQ19TUkNfQ09NQl9DRkcpOwotCQlzYXZlZF9yZWdbN10gPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfQ0hST01BX1ZCSU9GRl9DRkcpOwotCX0KLQotCXJldHZhbCA9IGN4MThfYXZfd3JpdGUoY3gsIGFkZHIsIHZhbHVlKTsKLQotCWlmIChub19hY2ZnX21hc2sgJiBDWEFERUNfTk9fQUNGR19BRkUpIHsKLQkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19DSElQX0NUUkwsIHNhdmVkX3JlZ1swXSk7Ci0JCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfQUZFX0NUUkwsICBzYXZlZF9yZWdbMV0pOwotCX0KLQotCWlmIChub19hY2ZnX21hc2sgJiBDWEFERUNfTk9fQUNGR19QTEwpIHsKLQkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QTExfQ1RSTDEsICAgIHNhdmVkX3JlZ1syXSk7Ci0JCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfVklEX1BMTF9GUkFDLCBzYXZlZF9yZWdbM10pOwotCX0KLQotCWlmIChub19hY2ZnX21hc2sgJiBDWEFERUNfTk9fQUNGR19WSUQpIHsKLQkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19IT1JJWl9USU1fQ1RSTCwgICAgc2F2ZWRfcmVnWzRdKTsKLQkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19WRVJUX1RJTV9DVFJMLCAgICAgc2F2ZWRfcmVnWzVdKTsKLQkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19TUkNfQ09NQl9DRkcsICAgICAgc2F2ZWRfcmVnWzZdKTsKLQkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19DSFJPTUFfVkJJT0ZGX0NGRywgc2F2ZWRfcmVnWzddKTsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1pbnQgY3gxOF9hdl9hbmRfb3Jfbm9fYWNmZyhzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1bnNpZ25lZCBhbmRfbWFzaywKLQkJCSAgIHU4IG9yX3ZhbHVlLCBpbnQgbm9fYWNmZ19tYXNrKQotewotCXJldHVybiBjeDE4X2F2X3dyaXRlX25vX2FjZmcoY3gsIGFkZHIsCi0JCQkJICAgICAoY3gxOF9hdl9yZWFkKGN4LCBhZGRyKSAmIGFuZF9tYXNrKSB8Ci0JCQkJICAgICBvcl92YWx1ZSwgbm9fYWNmZ19tYXNrKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzZXRfaW5wdXQoc3RydWN0IGN4MTggKmN4LCBlbnVtIGN4MThfYXZfdmlkZW9faW5wdXQgdmlkX2lucHV0LApAQCAtMTMyLDYgKzgwLDcgQEAKIAogc3RhdGljIHZvaWQgY3gxOF9hdl9pbml0aWFsaXplKHN0cnVjdCBjeDE4ICpjeCkKIHsKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwogCXUzMiB2OwogCiAJY3gxOF9hdl9sb2FkZncoY3gpOwpAQCAtMjExLDYgKzE2MCwxNDkgQEAKIC8qICAgICAgCUN4RGV2V3JSZWcoQ1hBREVDX1NSQ19DT01CX0NGRywgMHg2NjI4MDIxRik7ICovCiAvKiAgICB9ICovCiAJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19TUkNfQ09NQl9DRkcsIDB4NjYyODAyMUYpOworCXN0YXRlLT5kZWZhdWx0X3ZvbHVtZSA9IDIyOCAtIGN4MThfYXZfcmVhZChjeCwgMHg4ZDQpOworCXN0YXRlLT5kZWZhdWx0X3ZvbHVtZSA9ICgoc3RhdGUtPmRlZmF1bHRfdm9sdW1lIC8gMikgKyAyMykgPDwgOTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBjeDE4X2F2X3N0ZF9zZXR1cChzdHJ1Y3QgY3gxOCAqY3gpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwl2NGwyX3N0ZF9pZCBzdGQgPSBzdGF0ZS0+c3RkOworCWludCBoYmxhbmssIGhhY3RpdmUsIGJ1cnN0LCB2YmxhbmssIHZhY3RpdmUsIHNjOworCWludCB2Ymxhbms2NTYsIHNyY19kZWNpbWF0aW9uOworCWludCBsdW1hX2xwZiwgdXZfbHBmLCBjb21iOworCXUzMiBwbGxfaW50LCBwbGxfZnJhYywgcGxsX3Bvc3Q7CisKKwkvKiBkYXRhc2hlZXQgc3RhcnR1cCwgc3RlcCA4ZCAqLworCWlmIChzdGQgJiB+VjRMMl9TVERfTlRTQykKKwkJY3gxOF9hdl93cml0ZShjeCwgMHg0OWYsIDB4MTEpOworCWVsc2UKKwkJY3gxOF9hdl93cml0ZShjeCwgMHg0OWYsIDB4MTQpOworCisJaWYgKHN0ZCAmIFY0TDJfU1REXzYyNV81MCkgeworCQloYmxhbmsgPSAxMzI7CisJCWhhY3RpdmUgPSA3MjA7CisJCWJ1cnN0ID0gOTM7CisJCXZibGFuayA9IDM2OworCQl2YWN0aXZlID0gNTgwOworCQl2Ymxhbms2NTYgPSA0MDsKKwkJc3JjX2RlY2ltYXRpb24gPSAweDIxZjsKKworCQlsdW1hX2xwZiA9IDI7CisJCWlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJCXV2X2xwZiA9IDE7CisJCQljb21iID0gMHgyMDsKKwkJCXNjID0gNjg4NzM5OworCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTmMpIHsKKwkJCXV2X2xwZiA9IDE7CisJCQljb21iID0gMHgyMDsKKwkJCXNjID0gNTU2NDUzOworCQl9IGVsc2UgeyAvKiBTRUNBTSAqLworCQkJdXZfbHBmID0gMDsKKwkJCWNvbWIgPSAwOworCQkJc2MgPSA2NzIzNTE7CisJCX0KKwl9IGVsc2UgeworCQloYWN0aXZlID0gNzIwOworCQloYmxhbmsgPSAxMjI7CisJCXZhY3RpdmUgPSA0ODc7CisJCWx1bWFfbHBmID0gMTsKKwkJdXZfbHBmID0gMTsKKwkJdmJsYW5rID0gMjY7CisJCXZibGFuazY1NiA9IDI2OworCisJCXNyY19kZWNpbWF0aW9uID0gMHgyMWY7CisJCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMXzYwKSB7CisJCQlidXJzdCA9IDB4NWI7CisJCQlsdW1hX2xwZiA9IDI7CisJCQljb21iID0gMHgyMDsKKwkJCXNjID0gNjg4NzM5OworCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTSkgeworCQkJYnVyc3QgPSAweDYxOworCQkJY29tYiA9IDB4MjA7CisJCQlzYyA9IDU1NTQ1MjsKKwkJfSBlbHNlIHsKKwkJCWJ1cnN0ID0gMHg1YjsKKwkJCWNvbWIgPSAweDY2OworCQkJc2MgPSA1NTYwNjM7CisJCX0KKwl9CisKKwkvKiBERUJVRzogRGlzcGxheXMgY29uZmlndXJlZCBQTEwgZnJlcXVlbmN5ICovCisJcGxsX2ludCA9IGN4MThfYXZfcmVhZChjeCwgMHgxMDgpOworCXBsbF9mcmFjID0gY3gxOF9hdl9yZWFkNChjeCwgMHgxMGMpICYgMHgxZmZmZmZmOworCXBsbF9wb3N0ID0gY3gxOF9hdl9yZWFkKGN4LCAweDEwOSk7CisJQ1gxOF9ERUJVR19JTkZPKCJQTEwgcmVncyA9IGludDogJXUsIGZyYWM6ICV1LCBwb3N0OiAldVxuIiwKKwkJCXBsbF9pbnQsIHBsbF9mcmFjLCBwbGxfcG9zdCk7CisKKwlpZiAocGxsX3Bvc3QpIHsKKwkJaW50IGZpbiwgZnNjOworCQlpbnQgcGxsID0gMjg2MzYzNjNMICogKCgoKHU2NClwbGxfaW50KSA8PCAyNSkgKyBwbGxfZnJhYyk7CisKKwkJcGxsID4+PSAyNTsKKwkJcGxsIC89IHBsbF9wb3N0OworCQlDWDE4X0RFQlVHX0lORk8oIlBMTCA9ICVkLiUwNmQgTUh6XG4iLAorCQkJCQlwbGwgLyAxMDAwMDAwLCBwbGwgJSAxMDAwMDAwKTsKKwkJQ1gxOF9ERUJVR19JTkZPKCJQTEwvOCA9ICVkLiUwNmQgTUh6XG4iLAorCQkJCQlwbGwgLyA4MDAwMDAwLCAocGxsIC8gOCkgJSAxMDAwMDAwKTsKKworCQlmaW4gPSAoKHU2NClzcmNfZGVjaW1hdGlvbiAqIHBsbCkgPj4gMTI7CisJCUNYMThfREVCVUdfSU5GTygiQURDIFNhbXBsaW5nIGZyZXEgPSAlZC4lMDZkIE1IelxuIiwKKwkJCQkJZmluIC8gMTAwMDAwMCwgZmluICUgMTAwMDAwMCk7CisKKwkJZnNjID0gKCgodTY0KXNjKSAqIHBsbCkgPj4gMjRMOworCQlDWDE4X0RFQlVHX0lORk8oIkNocm9tYSBzdWItY2FycmllciBmcmVxID0gJWQuJTA2ZCBNSHpcbiIsCisJCQkJCWZzYyAvIDEwMDAwMDAsIGZzYyAlIDEwMDAwMDApOworCisJCUNYMThfREVCVUdfSU5GTygiaGJsYW5rICVpLCBoYWN0aXZlICVpLCAiCisJCQkidmJsYW5rICVpICwgdmFjdGl2ZSAlaSwgdmJsYW5rNjU2ICVpLCBzcmNfZGVjICVpLCIKKwkJCSJidXJzdCAweCUwMngsIGx1bWFfbHBmICVpLCB1dl9scGYgJWksIGNvbWIgMHglMDJ4LCIKKwkJCSIgc2MgMHglMDZ4XG4iLAorCQkJaGJsYW5rLCBoYWN0aXZlLCB2YmxhbmssIHZhY3RpdmUsIHZibGFuazY1NiwKKwkJCXNyY19kZWNpbWF0aW9uLCBidXJzdCwgbHVtYV9scGYsIHV2X2xwZiwgY29tYiwgc2MpOworCX0KKworCS8qIFNldHMgaG9yaXpvbnRhbCBibGFua2luZyBkZWxheSBhbmQgYWN0aXZlIGxpbmVzICovCisJY3gxOF9hdl93cml0ZShjeCwgMHg0NzAsIGhibGFuayk7CisJY3gxOF9hdl93cml0ZShjeCwgMHg0NzEsIDB4ZmYgJiAoKChoYmxhbmsgPj4gOCkgJiAweDMpIHwKKwkJCQkJCShoYWN0aXZlIDw8IDQpKSk7CisJY3gxOF9hdl93cml0ZShjeCwgMHg0NzIsIGhhY3RpdmUgPj4gNCk7CisKKwkvKiBTZXRzIGJ1cnN0IGdhdGUgZGVsYXkgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ3MywgYnVyc3QpOworCisJLyogU2V0cyB2ZXJ0aWNhbCBibGFua2luZyBkZWxheSBhbmQgYWN0aXZlIGR1cmF0aW9uICovCisJY3gxOF9hdl93cml0ZShjeCwgMHg0NzQsIHZibGFuayk7CisJY3gxOF9hdl93cml0ZShjeCwgMHg0NzUsIDB4ZmYgJiAoKCh2YmxhbmsgPj4gOCkgJiAweDMpIHwKKwkJCQkJCSh2YWN0aXZlIDw8IDQpKSk7CisJY3gxOF9hdl93cml0ZShjeCwgMHg0NzYsIHZhY3RpdmUgPj4gNCk7CisJY3gxOF9hdl93cml0ZShjeCwgMHg0NzcsIHZibGFuazY1Nik7CisKKwkvKiBTZXRzIHNyYyBkZWNpbWF0aW9uIHJhdGUgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ3OCwgMHhmZiAmIHNyY19kZWNpbWF0aW9uKTsKKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ3OSwgMHhmZiAmIChzcmNfZGVjaW1hdGlvbiA+PiA4KSk7CisKKwkvKiBTZXRzIEx1bWEgYW5kIFVWIExvdyBwYXNzIGZpbHRlcnMgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ3YSwgbHVtYV9scGYgPDwgNiB8ICgodXZfbHBmIDw8IDQpICYgMHgzMCkpOworCisJLyogRW5hYmxlcyBjb21iIGZpbHRlcnMgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ3YiwgY29tYik7CisKKwkvKiBTZXRzIFNDIFN0ZXAqLworCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdjLCBzYyk7CisJY3gxOF9hdl93cml0ZShjeCwgMHg0N2QsIDB4ZmYgJiBzYyA+PiA4KTsKKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZSwgMHhmZiAmIHNjID4+IDE2KTsKKworCS8qIFNldHMgVkJJIHBhcmFtZXRlcnMgKi8KKwlpZiAoc3RkICYgVjRMMl9TVERfNjI1XzUwKSB7CisJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdmLCAweDAxKTsKKwkJc3RhdGUtPnZiaV9saW5lX29mZnNldCA9IDU7CisJfSBlbHNlIHsKKwkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIDB4MDApOworCQlzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0ID0gODsKKwl9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yMjEsMTYgKzMxMyw5IEBACiAJdjRsMl9zdGRfaWQgc3RkID0gc3RhdGUtPnN0ZDsKIAogCS8qIEZvbGxvdyBzdGVwIDhjIGFuZCA4ZCBvZiBzZWN0aW9uIDMuMTYgaW4gdGhlIGN4MThfYXYgZGF0YXNoZWV0ICovCi0JaWYgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKQotCQljeDE4X2F2X3dyaXRlX25vX2FjZmcoY3gsIDB4NDAyLCAwLCBDWEFERUNfTk9fQUNGR19BTEwpOwotCWVsc2UgewotCQljeDE4X2F2X3dyaXRlX25vX2FjZmcoY3gsIDB4NDAyLCAweDA0LCBDWEFERUNfTk9fQUNGR19BTEwpOwotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ5ZiwgKHN0ZCAmIFY0TDJfU1REX05UU0MpID8gMHgxNCA6IDB4MTEpOwotCX0KLQljeDE4X2F2X2FuZF9vcl9ub19hY2ZnKGN4LCAweDQwMSwgfjB4NjAsIDAsCi0JCQkJQ1hBREVDX05PX0FDRkdfUExMIHwgQ1hBREVDX05PX0FDRkdfVklEKTsKLQljeDE4X2F2X2FuZF9vcl9ub19hY2ZnKGN4LCAweDQwMSwgfjB4NjAsIDB4NjAsCi0JCQkJQ1hBREVDX05PX0FDRkdfUExMIHwgQ1hBREVDX05PX0FDRkdfVklEKTsKKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ5ZiwgKHN0ZCAmIFY0TDJfU1REX05UU0MpID8gMHgxNCA6IDB4MTEpOworCWN4MThfYXZfYW5kX29yKGN4LCAweDQwMSwgfjB4NjAsIDApOworCWN4MThfYXZfYW5kX29yKGN4LCAweDQwMSwgfjB4NjAsIDB4NjApOwogCiAJaWYgKHN0ZCAmIFY0TDJfU1REXzUyNV82MCkgewogCQlpZiAoc3RkID09IFY0TDJfU1REX05UU0NfTV9KUCkgewpAQCAtMzAwLDcgKzM4NSw4IEBACiAJfQogCiAJc3dpdGNoIChhdWRfaW5wdXQpIHsKLQljYXNlIENYMThfQVZfQVVESU9fU0VSSUFMOgorCWNhc2UgQ1gxOF9BVl9BVURJT19TRVJJQUwxOgorCWNhc2UgQ1gxOF9BVl9BVURJT19TRVJJQUwyOgogCQkvKiBkbyBub3RoaW5nLCB1c2Ugc2VyaWFsIGF1ZGlvIGlucHV0ICovCiAJCWJyZWFrOwogCWNhc2UgQ1gxOF9BVl9BVURJTzQ6IHJlZyAmPSB+MHgzMDsgYnJlYWs7CkBAIC0zMTYsOCArNDAyLDcgQEAKIAogCWN4MThfYXZfd3JpdGUoY3gsIDB4MTAzLCByZWcpOwogCS8qIFNldCBJTlBVVF9NT0RFIHRvIENvbXBvc2l0ZSAoMCkgb3IgUy1WaWRlbyAoMSkgKi8KLQljeDE4X2F2X2FuZF9vcl9ub19hY2ZnKGN4LCAweDQwMSwgfjB4NiwgaXNfY29tcG9zaXRlID8gMCA6IDB4MDIsCi0JCQkJQ1hBREVDX05PX0FDRkdfUExMIHwgQ1hBREVDX05PX0FDRkdfVklEKTsKKwljeDE4X2F2X2FuZF9vcihjeCwgMHg0MDEsIH4weDYsIGlzX2NvbXBvc2l0ZSA/IDAgOiAweDAyKTsKIAkvKiBTZXQgQ0hfU0VMX0FEQzIgdG8gMSBpZiBpbnB1dCBjb21lcyBmcm9tIENIMyAqLwogCWN4MThfYXZfYW5kX29yKGN4LCAweDEwMiwgfjB4MiwgKHJlZyAmIDB4ODApID09IDAgPyAyIDogMCk7CiAJLyogU2V0IERVQUxfTU9ERV9BREMyIHRvIDEgaWYgaW5wdXQgY29tZXMgZnJvbSBib3RoIENIMiBhbmQgQ0gzICovCkBAIC0zNzMsMTMgKzQ1OCwxMyBAQAogCSAgIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSB3aXRoIHRoZSBZdWFuIE1QQzYyMi4gKi8KIAlpZiAoZm10ID49IDQgJiYgZm10IDwgOCkgewogCQkvKiBTZXQgZm9ybWF0IHRvIE5UU0MtTSAqLwotCQljeDE4X2F2X2FuZF9vcl9ub19hY2ZnKGN4LCAweDQwMCwgfjB4ZiwgMSwgQ1hBREVDX05PX0FDRkdfQUZFKTsKKwkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4NDAwLCB+MHhmLCAxKTsKIAkJLyogVHVybiBvZmYgTENPTUIgKi8KIAkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4NDdiLCB+NiwgMCk7CiAJfQotCWN4MThfYXZfYW5kX29yX25vX2FjZmcoY3gsIDB4NDAwLCB+MHhmLCBmbXQsIENYQURFQ19OT19BQ0ZHX0FGRSk7Ci0JY3gxOF9hdl9hbmRfb3Jfbm9fYWNmZyhjeCwgMHg0MDMsIH4weDMsIHBhbF9tLCBDWEFERUNfTk9fQUNGR19BTEwpOwotCWN4MThfYXZfdmJpX3NldHVwKGN4KTsKKwljeDE4X2F2X2FuZF9vcihjeCwgMHg0MDAsIH4weDJmLCBmbXQgfCAweDIwKTsKKwljeDE4X2F2X2FuZF9vcihjeCwgMHg0MDMsIH4weDMsIHBhbF9tKTsKKwljeDE4X2F2X3N0ZF9zZXR1cChjeCk7CiAJaW5wdXRfY2hhbmdlKGN4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYxOCw2ICs3MDMsOCBAQAogCiAJCXN3aXRjaCAocWMtPmlkKSB7CiAJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwKKwkJCQk2NTUzNSAvIDEwMCwgc3RhdGUtPmRlZmF1bHRfdm9sdW1lKTsKIAkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaAppbmRleCBjMTcyODIzLi5lYjYxZmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCkBAIC02Miw3ICs2Miw4IEBACiAKIGVudW0gY3gxOF9hdl9hdWRpb19pbnB1dCB7CiAJLyogQXVkaW8gaW5wdXRzOiBzZXJpYWwgb3IgSW40LUluOCAqLwotCUNYMThfQVZfQVVESU9fU0VSSUFMLAorCUNYMThfQVZfQVVESU9fU0VSSUFMMSwKKwlDWDE4X0FWX0FVRElPX1NFUklBTDIsCiAJQ1gxOF9BVl9BVURJTzQgPSA0LAogCUNYMThfQVZfQVVESU81LAogCUNYMThfQVZfQVVESU82LApAQCAtNzgsNiArNzksNyBAQAogCXUzMiBhdWRjbGtfZnJlcTsKIAlpbnQgYXVkbW9kZTsKIAlpbnQgdmJpX2xpbmVfb2Zmc2V0OworCWludCBkZWZhdWx0X3ZvbHVtZTsKIAl1MzIgaWQ7CiAJdTMyIHJldjsKIAlpbnQgaXNfaW5pdGlhbGl6ZWQ7CkBAIC0yOTUsMjUgKzI5NywxNiBAQAogI2RlZmluZSBDWEFERUNfU0VMRUNUX0FVRElPX1NUQU5EQVJEX0ZNICAgIDB4RjkgIC8qIEZNIHJhZGlvICovCiAjZGVmaW5lIENYQURFQ19TRUxFQ1RfQVVESU9fU1RBTkRBUkRfQVVUTyAgMHhGRiAgLyogQXV0byBkZXRlY3QgKi8KIAotLyogRmxhZ3Mgb24gd2hhdCB0byBwcmVzZXJ2ZSBvbiB3cml0ZSB0byAweDQwMC0weDQwMyB3aXRoIGN4MThfYXZfLipfbm9fYWNmZygpKi8KLSNkZWZpbmUgQ1hBREVDX05PX0FDRkdfQUZFCTB4MDEgLyogUHJlc2VydmUgMHgxMDAtMHgxMDcgKi8KLSNkZWZpbmUgQ1hBREVDX05PX0FDRkdfUExMCTB4MDIgLyogUHJlc2VydmUgMHgxMDgtMHgxMGYgKi8KLSNkZWZpbmUgQ1hBREVDX05PX0FDRkdfVklECTB4MDQgLyogUHJlc2VydmUgMHg0NzAtMHg0N2YgKi8KLSNkZWZpbmUgQ1hBREVDX05PX0FDRkdfQUxMCTB4MDcKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MThfYXYtY29yZS5jIAkJCQkJCQkgICAqLwogaW50IGN4MThfYXZfd3JpdGUoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTggdmFsdWUpOwogaW50IGN4MThfYXZfd3JpdGU0KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHUzMiB2YWx1ZSk7Ci1pbnQgY3gxOF9hdl93cml0ZV9ub19hY2ZnKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHU4IHZhbHVlLAotCQkJCWludCBub19hY2ZnX21hc2spOwogdTggY3gxOF9hdl9yZWFkKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIpOwogdTMyIGN4MThfYXZfcmVhZDQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkcik7CiBpbnQgY3gxOF9hdl9hbmRfb3Ioc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdW5zaWduZWQgbWFzaywgdTggdmFsdWUpOwogaW50IGN4MThfYXZfYW5kX29yNChzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKLWludCBjeDE4X2F2X2FuZF9vcl9ub19hY2ZnKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHVuc2lnbmVkIG1hc2ssIHU4IHZhbHVlLAotCQkJCWludCBub19hY2ZnX21hc2spOwogaW50IGN4MThfYXZfY21kKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK3ZvaWQgY3gxOF9hdl9zdGRfc2V0dXAoc3RydWN0IGN4MTggKmN4KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MThfYXYtZmlybXdhcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMjYsNyArMzE5LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MThfYXYtdmJpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi12b2lkIGN4MThfYXZfdmJpX3NldHVwKHN0cnVjdCBjeDE4ICpjeCk7CiBpbnQgY3gxOF9hdl92Ymkoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jCmluZGV4IGExYTZhZjYuLjgzNGI5MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtZmlybXdhcmUuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAorI2RlZmluZSBDWDE4X0FVRElPX0VOQUJMRSAweGM3MjAxNAogI2RlZmluZSBGV0ZJTEUgInY0bC1jeDIzNDE4LWRpZy5mdyIKIAogaW50IGN4MThfYXZfbG9hZGZ3KHN0cnVjdCBjeDE4ICpjeCkKQEAgLTMxLDQwICszMiw1OCBAQAogCXUzMiB2OwogCWNvbnN0IHU4ICpwdHI7CiAJaW50IGk7CisJaW50IHJldHJpZXMgPSAwOwogCiAJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBGV0ZJTEUsICZjeC0+ZGV2LT5kZXYpICE9IDApIHsKIAkJQ1gxOF9FUlIoInVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBGV0ZJTEUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0NISVBfQ1RSTCwgMHgwMDAxMDAwMCk7Ci0JY3gxOF9hdl93cml0ZShjeCwgQ1hBREVDX1NURF9ERVRfQ1RMLCAweGY2KTsgLyogQnl0ZSAwICovCisJLyogVGhlIGZpcm13YXJlIGxvYWQgb2Z0ZW4gaGFzIGJ5dGUgZXJyb3JzLCBzbyBhbGxvdyBmb3Igc2V2ZXJhbAorCSAgIHJldHJpZXMsIGJvdGggYXQgYnl0ZSBsZXZlbCBhbmQgYXQgdGhlIGZpcm13YXJlIGxvYWQgbGV2ZWwuICovCisJd2hpbGUgKHJldHJpZXMgPCA1KSB7CisJCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfQ0hJUF9DVFJMLCAweDAwMDEwMDAwKTsKKwkJY3gxOF9hdl93cml0ZShjeCwgQ1hBREVDX1NURF9ERVRfQ1RMLCAweGY2KTsKIAotCS8qIFJlc2V0IHRoZSBNYWtvIGNvcmUgKFJlZ2lzdGVyIGlzIHVuZG9jdW1lbnRlZC4pICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIDB4ODEwMCwgMHgwMDAxMDAwMCk7CisJCS8qIFJlc2V0IHRoZSBNYWtvIGNvcmUgKFJlZ2lzdGVyIGlzIHVuZG9jdW1lbnRlZC4pICovCisJCWN4MThfYXZfd3JpdGU0KGN4LCAweDgxMDAsIDB4MDAwMTAwMDApOwogCi0JLyogUHV0IHRoZSA4MDUxIGluIHJlc2V0IGFuZCBlbmFibGUgZmlybXdhcmUgdXBsb2FkICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19ETF9DVEwsIDB4MEYwMDAwMDApOworCQkvKiBQdXQgdGhlIDgwNTEgaW4gcmVzZXQgYW5kIGVuYWJsZSBmaXJtd2FyZSB1cGxvYWQgKi8KKwkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19ETF9DVEwsIDB4MEYwMDAwMDApOwogCi0JcHRyID0gZnctPmRhdGE7Ci0Jc2l6ZSA9IGZ3LT5zaXplOworCQlwdHIgPSBmdy0+ZGF0YTsKKwkJc2l6ZSA9IGZ3LT5zaXplOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQl1MzIgZGxfY29udHJvbCA9IDB4MEYwMDAwMDAgfCAoKHUzMilwdHJbaV0gPDwgMTYpOwotCQl1MzIgdmFsdWUgPSAwOwotCQlpbnQgcmV0cmllczsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJdTMyIGRsX2NvbnRyb2wgPSAweDBGMDAwMDAwIHwgaSB8ICgodTMyKXB0cltpXSA8PCAxNik7CisJCQl1MzIgdmFsdWUgPSAwOworCQkJaW50IHJldHJpZXM7CiAKLQkJZm9yIChyZXRyaWVzID0gMDsgcmV0cmllcyA8IDU7IHJldHJpZXMrKykgewotCQkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19ETF9DVEwsIGRsX2NvbnRyb2wpOwotCQkJdmFsdWUgPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfRExfQ1RMKTsKLQkJCWlmICgodmFsdWUgJiAweDNGMDApID09IChkbF9jb250cm9sICYgMHgzRjAwKSkKKwkJCWZvciAocmV0cmllcyA9IDA7IHJldHJpZXMgPCA1OyByZXRyaWVzKyspIHsKKwkJCQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0RMX0NUTCwgZGxfY29udHJvbCk7CisJCQkJdWRlbGF5KDEwKTsKKwkJCQl2YWx1ZSA9IGN4MThfYXZfcmVhZDQoY3gsIENYQURFQ19ETF9DVEwpOworCQkJCWlmICh2YWx1ZSA9PSBkbF9jb250cm9sKQorCQkJCQlicmVhazsKKwkJCQkvKiBDaGVjayBpZiB3ZSBjYW4gY29ycmVjdCB0aGUgYnl0ZSBieSBjaGFuZ2luZworCQkJCSAgIHRoZSBhZGRyZXNzLiAgV2UgY2FuIG9ubHkgd3JpdGUgdGhlIGxvd2VyCisJCQkJICAgYWRkcmVzcyBieXRlIG9mIHRoZSBhZGRyZXNzLiAqLworCQkJCWlmICgodmFsdWUgJiAweDNGMDApICE9IChkbF9jb250cm9sICYgMHgzRjAwKSkgeworCQkJCQlyZXRyaWVzID0gNTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHJldHJpZXMgPj0gNSkKIAkJCQlicmVhazsKIAkJfQotCQlpZiAocmV0cmllcyA+PSA1KSB7Ci0JCQlDWDE4X0VSUigidW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIEZXRklMRSk7Ci0JCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJCWlmIChpID09IHNpemUpCisJCQlicmVhazsKKwkJcmV0cmllcysrOworCX0KKwlpZiAocmV0cmllcyA+PSA1KSB7CisJCUNYMThfRVJSKCJ1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgRldGSUxFKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCXJldHVybiAtRUlPOwogCX0KIAogCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfRExfQ1RMLCAweDEzMDAwMDAwIHwgZnctPnNpemUpOwpAQCAtMTAwLDcgKzExOSw2IEBACiAJICAgaGF2ZSBhIG5hbWUgaW4gdGhlIHNwZWMuICovCiAJY3gxOF9hdl93cml0ZTQoY3gsIDB4MDlDQywgMSk7CiAKLSNkZWZpbmUgQ1gxOF9BVURJT19FTkFCTEUgICAgICAgICAgICAJMHhjNzIwMTQKIAl2ID0gcmVhZF9yZWcoQ1gxOF9BVURJT19FTkFCTEUpOwogCS8qIElmIGJpdCAxMSBpcyAxICovCiAJaWYgKHYgJiAweDgwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKaW5kZXggZDA5ZjFkYS4uMDJmZGY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKQEAgLTgzLDE1MCArODMsNiBAQAogCXJldHVybiBlcnIgJiAweGYwOwogfQogCi12b2lkIGN4MThfYXZfdmJpX3NldHVwKHN0cnVjdCBjeDE4ICpjeCkKLXsKLQlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwotCXY0bDJfc3RkX2lkIHN0ZCA9IHN0YXRlLT5zdGQ7Ci0JaW50IGhibGFuaywgaGFjdGl2ZSwgYnVyc3QsIHZibGFuaywgdmFjdGl2ZSwgc2M7Ci0JaW50IHZibGFuazY1Niwgc3JjX2RlY2ltYXRpb247Ci0JaW50IGx1bWFfbHBmLCB1dl9scGYsIGNvbWI7Ci0JdTMyIHBsbF9pbnQsIHBsbF9mcmFjLCBwbGxfcG9zdDsKLQotCS8qIGRhdGFzaGVldCBzdGFydHVwLCBzdGVwIDhkICovCi0JaWYgKHN0ZCAmIH5WNEwyX1NURF9OVFNDKQotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ5ZiwgMHgxMSk7Ci0JZWxzZQotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ5ZiwgMHgxNCk7Ci0KLQlpZiAoc3RkICYgVjRMMl9TVERfNjI1XzUwKSB7Ci0JCWhibGFuayA9IDB4MDg0OwotCQloYWN0aXZlID0gMHgyZDA7Ci0JCWJ1cnN0ID0gMHg1ZDsKLQkJdmJsYW5rID0gMHgwMjQ7Ci0JCXZhY3RpdmUgPSAweDI0NDsKLQkJdmJsYW5rNjU2ID0gMHgyODsKLQkJc3JjX2RlY2ltYXRpb24gPSAweDIxZjsKLQotCQlsdW1hX2xwZiA9IDI7Ci0JCWlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgewotCQkJdXZfbHBmID0gMDsKLQkJCWNvbWIgPSAwOwotCQkJc2MgPSAweDBhNDI1ZjsKLQkJfSBlbHNlIGlmIChzdGQgPT0gVjRMMl9TVERfUEFMX05jKSB7Ci0JCQl1dl9scGYgPSAxOwotCQkJY29tYiA9IDB4MjA7Ci0JCQlzYyA9IDU1NjQ1MzsKLQkJfSBlbHNlIHsKLQkJCXV2X2xwZiA9IDE7Ci0JCQljb21iID0gMHgyMDsKLQkJCXNjID0gMHgwYTgyNjM7Ci0JCX0KLQl9IGVsc2UgewotCQloYWN0aXZlID0gNzIwOwotCQloYmxhbmsgPSAxMjI7Ci0JCXZhY3RpdmUgPSA0ODc7Ci0JCWx1bWFfbHBmID0gMTsKLQkJdXZfbHBmID0gMTsKLQotCQlzcmNfZGVjaW1hdGlvbiA9IDB4MjFmOwotCQlpZiAoc3RkID09IFY0TDJfU1REX1BBTF82MCkgewotCQkJdmJsYW5rID0gMjY7Ci0JCQl2Ymxhbms2NTYgPSAyNjsKLQkJCWJ1cnN0ID0gMHg1YjsKLQkJCWx1bWFfbHBmID0gMjsKLQkJCWNvbWIgPSAweDIwOwotCQkJc2MgPSAweDBhODI2MzsKLQkJfSBlbHNlIGlmIChzdGQgPT0gVjRMMl9TVERfUEFMX00pIHsKLQkJCXZibGFuayA9IDIwOwotCQkJdmJsYW5rNjU2ID0gMjQ7Ci0JCQlidXJzdCA9IDB4NjE7Ci0JCQljb21iID0gMHgyMDsKLQotCQkJc2MgPSA1NTU0NTI7Ci0JCX0gZWxzZSB7Ci0JCQl2YmxhbmsgPSAyNjsKLQkJCXZibGFuazY1NiA9IDI2OwotCQkJYnVyc3QgPSAweDViOwotCQkJY29tYiA9IDB4NjY7Ci0JCQlzYyA9IDU1NjA2MzsKLQkJfQotCX0KLQotCS8qIERFQlVHOiBEaXNwbGF5cyBjb25maWd1cmVkIFBMTCBmcmVxdWVuY3kgKi8KLQlwbGxfaW50ID0gY3gxOF9hdl9yZWFkKGN4LCAweDEwOCk7Ci0JcGxsX2ZyYWMgPSBjeDE4X2F2X3JlYWQ0KGN4LCAweDEwYykgJiAweDFmZmZmZmY7Ci0JcGxsX3Bvc3QgPSBjeDE4X2F2X3JlYWQoY3gsIDB4MTA5KTsKLQlDWDE4X0RFQlVHX0lORk8oIlBMTCByZWdzID0gaW50OiAldSwgZnJhYzogJXUsIHBvc3Q6ICV1XG4iLAotCQkJcGxsX2ludCwgcGxsX2ZyYWMsIHBsbF9wb3N0KTsKLQotCWlmIChwbGxfcG9zdCkgewotCQlpbnQgZmluLCBmc2M7Ci0JCWludCBwbGwgPSAyODYzNjM2M0wgKiAoKCgodTY0KXBsbF9pbnQpIDw8IDI1KSArIHBsbF9mcmFjKTsKLQotCQlwbGwgPj49IDI1OwotCQlwbGwgLz0gcGxsX3Bvc3Q7Ci0JCUNYMThfREVCVUdfSU5GTygiUExMID0gJWQuJTA2ZCBNSHpcbiIsCi0JCQkJCXBsbCAvIDEwMDAwMDAsIHBsbCAlIDEwMDAwMDApOwotCQlDWDE4X0RFQlVHX0lORk8oIlBMTC84ID0gJWQuJTA2ZCBNSHpcbiIsCi0JCQkJCXBsbCAvIDgwMDAwMDAsIChwbGwgLyA4KSAlIDEwMDAwMDApOwotCi0JCWZpbiA9ICgodTY0KXNyY19kZWNpbWF0aW9uICogcGxsKSA+PiAxMjsKLQkJQ1gxOF9ERUJVR19JTkZPKCJBREMgU2FtcGxpbmcgZnJlcSA9ICVkLiUwNmQgTUh6XG4iLAotCQkJCQlmaW4gLyAxMDAwMDAwLCBmaW4gJSAxMDAwMDAwKTsKLQotCQlmc2MgPSAoKCh1NjQpc2MpICogcGxsKSA+PiAyNEw7Ci0JCUNYMThfREVCVUdfSU5GTygiQ2hyb21hIHN1Yi1jYXJyaWVyIGZyZXEgPSAlZC4lMDZkIE1IelxuIiwKLQkJCQkJZnNjIC8gMTAwMDAwMCwgZnNjICUgMTAwMDAwMCk7Ci0KLQkJQ1gxOF9ERUJVR19JTkZPKCJoYmxhbmsgJWksIGhhY3RpdmUgJWksICIKLQkJCSJ2YmxhbmsgJWkgLCB2YWN0aXZlICVpLCB2Ymxhbms2NTYgJWksIHNyY19kZWMgJWksIgotCQkJImJ1cnN0IDB4JTAyeCwgbHVtYV9scGYgJWksIHV2X2xwZiAlaSwgY29tYiAweCUwMngsIgotCQkJIiBzYyAweCUwNnhcbiIsCi0JCQloYmxhbmssIGhhY3RpdmUsIHZibGFuaywgdmFjdGl2ZSwgdmJsYW5rNjU2LAotCQkJc3JjX2RlY2ltYXRpb24sIGJ1cnN0LCBsdW1hX2xwZiwgdXZfbHBmLCBjb21iLCBzYyk7Ci0JfQotCi0JLyogU2V0cyBob3Jpem9udGFsIGJsYW5raW5nIGRlbGF5IGFuZCBhY3RpdmUgbGluZXMgKi8KLQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3MCwgaGJsYW5rKTsKLQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3MSwgMHhmZiAmICgoKGhibGFuayA+PiA4KSAmIDB4MykgfAotCQkJCQkJKGhhY3RpdmUgPDwgNCkpKTsKLQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3MiwgaGFjdGl2ZSA+PiA0KTsKLQotCS8qIFNldHMgYnVyc3QgZ2F0ZSBkZWxheSAqLwotCWN4MThfYXZfd3JpdGUoY3gsIDB4NDczLCBidXJzdCk7Ci0KLQkvKiBTZXRzIHZlcnRpY2FsIGJsYW5raW5nIGRlbGF5IGFuZCBhY3RpdmUgZHVyYXRpb24gKi8KLQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3NCwgdmJsYW5rKTsKLQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3NSwgMHhmZiAmICgoKHZibGFuayA+PiA4KSAmIDB4MykgfAotCQkJCQkJKHZhY3RpdmUgPDwgNCkpKTsKLQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3NiwgdmFjdGl2ZSA+PiA0KTsKLQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3NywgdmJsYW5rNjU2KTsKLQotCS8qIFNldHMgc3JjIGRlY2ltYXRpb24gcmF0ZSAqLwotCWN4MThfYXZfd3JpdGUoY3gsIDB4NDc4LCAweGZmICYgc3JjX2RlY2ltYXRpb24pOwotCWN4MThfYXZfd3JpdGUoY3gsIDB4NDc5LCAweGZmICYgKHNyY19kZWNpbWF0aW9uID4+IDgpKTsKLQotCS8qIFNldHMgTHVtYSBhbmQgVVYgTG93IHBhc3MgZmlsdGVycyAqLwotCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdhLCBsdW1hX2xwZiA8PCA2IHwgKCh1dl9scGYgPDwgNCkgJiAweDMwKSk7Ci0KLQkvKiBFbmFibGVzIGNvbWIgZmlsdGVycyAqLwotCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdiLCBjb21iKTsKLQotCS8qIFNldHMgU0MgU3RlcCovCi0JY3gxOF9hdl93cml0ZShjeCwgMHg0N2MsIHNjKTsKLQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZCwgMHhmZiAmIHNjID4+IDgpOwotCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdlLCAweGZmICYgc2MgPj4gMTYpOwotCi0JLyogU2V0cyBWQkkgcGFyYW1ldGVycyAqLwotCWlmIChzdGQgJiBWNEwyX1NURF82MjVfNTApIHsKLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIDB4MDEpOwotCQlzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0ID0gNTsKLQl9IGVsc2UgewotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZiwgMHgwMCk7Ci0JCXN0YXRlLT52YmlfbGluZV9vZmZzZXQgPSA4OwotCX0KLX0KLQogaW50IGN4MThfYXZfdmJpKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CkBAIC0yOTIsOCArMTQ4LDggQEAKIAkJCS8qIHJhdyBWQkkgKi8KIAkJCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKIAotCQkJLyogU2V0dXAgVkJJICovCi0JCQljeDE4X2F2X3ZiaV9zZXR1cChjeCk7CisJCQkvKiBTZXR1cCBzdGFuZGFyZCAqLworCQkJY3gxOF9hdl9zdGRfc2V0dXAoY3gpOwogCiAJCQkvKiBWQkkgT2Zmc2V0ICovCiAJCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZiwgdmJpX29mZnNldCk7CkBAIC0zMDQsOCArMTYwLDggQEAKIAkJZm9yICh4ID0gMDsgeCA8PSAyMzsgeCsrKQogCQkJbGNyW3hdID0gMHgwMDsKIAotCQkvKiBTZXR1cCBWQkkgKi8KLQkJY3gxOF9hdl92Ymlfc2V0dXAoY3gpOworCQkvKiBTZXR1cCBzdGFuZGFyZCAqLworCQljeDE4X2F2X3N0ZF9zZXR1cChjeCk7CiAKIAkJLyogU2xpY2VkIFZCSSAqLwogCQljeDE4X2F2X3dyaXRlKGN4LCAweDQwNCwgMHgzMik7CS8qIEFuY2lsbGFyeSBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYwppbmRleCBjMjZlMGVmLi44ZmU1ZjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlICJjeDE4LWkyYy5oIgogI2luY2x1ZGUgPG1lZGlhL2NzNTM0NS5oPgogCisjZGVmaW5lIFY0TDJfU1REX1BBTF9TRUNBTSAoVjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNKQorCiAvKioqKioqKioqKioqKioqKioqKioqKiBjYXJkIGNvbmZpZ3VyYXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogdXN1YWwgaTJjIHR1bmVyIGFkZHJlc3NlcyB0byBwcm9iZSAqLwpAQCAtNjUsMTIgKzY3LDEyIEBACiAJCXsgQ1gxOF9DQVJEX0lOUFVUX0FVRF9UVU5FUiwKIAkJICBDWDE4X0FWX0FVRElPOCwgQ1M1MzQ1X0lOXzEgfCBDUzUzNDVfTUNMS18xXzUgfSwKIAkJeyBDWDE4X0NBUkRfSU5QVVRfTElORV9JTjEsCi0JCSAgQ1gxOF9BVl9BVURJT19TRVJJQUwsIENTNTM0NV9JTl8yIH0sCisJCSAgQ1gxOF9BVl9BVURJT19TRVJJQUwxLCBDUzUzNDVfSU5fMiB9LAogCQl7IENYMThfQ0FSRF9JTlBVVF9MSU5FX0lOMiwKLQkJICBDWDE4X0FWX0FVRElPX1NFUklBTCwgQ1M1MzQ1X0lOXzMgfSwKKwkJICBDWDE4X0FWX0FVRElPX1NFUklBTDEsIENTNTM0NV9JTl8zIH0sCiAJfSwKIAkucmFkaW9faW5wdXQgPSB7IENYMThfQ0FSRF9JTlBVVF9BVURfVFVORVIsCi0JCQkgQ1gxOF9BVl9BVURJT19TRVJJQUwsIENTNTM0NV9JTl80IH0sCisJCQkgQ1gxOF9BVl9BVURJT19TRVJJQUwxLCBDUzUzNDVfSU5fNCB9LAogCS5kZHIgPSB7CiAJCS8qIEVTTVQgTTEzUzEyODMyNEEtNUIgbWVtb3J5ICovCiAJCS5jaGlwX2NvbmZpZyA9IDB4MDAzLApAQCAtODYsNiArODgsNyBAQAogCQkuYWN0aXZlX2xvX21hc2sgPSAweDMwMDEsCiAJCS5tc2Vjc19hc3NlcnRlZCA9IDEwLAogCQkubXNlY3NfcmVjb3ZlcnkgPSA0MCwKKwkJLmlyX3Jlc2V0X21hc2sgID0gMHgwMDAxLAogCX0sCiAJLmkyYyA9ICZjeDE4X2kyY19zdGQsCiB9OwpAQCAtMTEwLDEyICsxMTMsMTIgQEAKIAkJeyBDWDE4X0NBUkRfSU5QVVRfQVVEX1RVTkVSLAogCQkgIENYMThfQVZfQVVESU84LCBDUzUzNDVfSU5fMSB8IENTNTM0NV9NQ0xLXzFfNSB9LAogCQl7IENYMThfQ0FSRF9JTlBVVF9MSU5FX0lOMSwKLQkJICBDWDE4X0FWX0FVRElPX1NFUklBTCwgQ1M1MzQ1X0lOXzIgfSwKKwkJICBDWDE4X0FWX0FVRElPX1NFUklBTDEsIENTNTM0NV9JTl8yIH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX0xJTkVfSU4yLAotCQkgIENYMThfQVZfQVVESU9fU0VSSUFMLCBDUzUzNDVfSU5fMyB9LAorCQkgIENYMThfQVZfQVVESU9fU0VSSUFMMSwgQ1M1MzQ1X0lOXzMgfSwKIAl9LAogCS5yYWRpb19pbnB1dCA9IHsgQ1gxOF9DQVJEX0lOUFVUX0FVRF9UVU5FUiwKLQkJCSBDWDE4X0FWX0FVRElPX1NFUklBTCwgQ1M1MzQ1X0lOXzQgfSwKKwkJCSBDWDE4X0FWX0FVRElPX1NFUklBTDEsIENTNTM0NV9JTl80IH0sCiAJLmRkciA9IHsKIAkJLyogU2Ftc3VuZyBLNEQyNjMyMzhHLVZDMzMgbWVtb3J5ICovCiAJCS5jaGlwX2NvbmZpZyA9IDB4MDAzLApAQCAtMTMxLDYgKzEzNCw3IEBACiAJCS5hY3RpdmVfbG9fbWFzayA9IDB4MzAwMSwKIAkJLm1zZWNzX2Fzc2VydGVkID0gMTAsCiAJCS5tc2Vjc19yZWNvdmVyeSA9IDQwLAorCQkuaXJfcmVzZXRfbWFzayAgPSAweDAwMDEsCiAJfSwKIAkuaTJjID0gJmN4MThfaTJjX3N0ZCwKIH07CkBAIC0xNjEsMTAgKzE2NSwxMCBAQAogCQl7IENYMThfQ0FSRF9JTlBVVF9BVURfVFVORVIsCiAJCSAgQ1gxOF9BVl9BVURJTzgsIDAgfSwKIAkJeyBDWDE4X0NBUkRfSU5QVVRfTElORV9JTjEsCi0JCSAgQ1gxOF9BVl9BVURJT19TRVJJQUwsIDAgfSwKKwkJICBDWDE4X0FWX0FVRElPX1NFUklBTDEsIDAgfSwKIAl9LAogCS5yYWRpb19pbnB1dCA9IHsgQ1gxOF9DQVJEX0lOUFVUX0FVRF9UVU5FUiwKLQkJCSBDWDE4X0FWX0FVRElPX1NFUklBTCwgMCB9LAorCQkJIENYMThfQVZfQVVESU9fU0VSSUFMMSwgMCB9LAogCS50dW5lcnMgPSB7CiAJCXsgLnN0ZCA9IFY0TDJfU1REX0FMTCwgLnR1bmVyID0gVFVORVJfWEMyMDI4IH0sCiAJfSwKQEAgLTE5NCw3ICsxOTgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgY3gxOF9jYXJkX21wYzcxOCA9IHsKIAkudHlwZSA9IENYMThfQ0FSRF9ZVUFOX01QQzcxOCwKIAkubmFtZSA9ICJZdWFuIE1QQzcxOCIsCi0JLmNvbW1lbnQgPSAiU29tZSBDb21wb3NpdGUgYW5kIFMtVmlkZW8gaW5wdXRzIGFyZSBjdXJyZW50bHkgd29ya2luZy5cbiIsCisJLmNvbW1lbnQgPSAiQW5hbG9nIHZpZGVvIGNhcHR1cmUgd29ya3M7IHNvbWUgYXVkaW8gbGluZSBpbiBtYXkgbm90LlxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAogCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAogCS5od19hbGwgPSBDWDE4X0hXX1RVTkVSLApAQCAtMjA5LDExICsyMTMsMTEgQEAKIAkJeyBDWDE4X0NBUkRfSU5QVVRfQ09NUE9TSVRFMywgMiwgQ1gxOF9BVl9DT01QT1NJVEUzIH0sCiAJfSwKIAkuYXVkaW9faW5wdXRzID0gewotCQl7IENYMThfQ0FSRF9JTlBVVF9BVURfVFVORVIsIENYMThfQVZfQVVESU81LCAgICAgICAwIH0sCi0JCXsgQ1gxOF9DQVJEX0lOUFVUX0xJTkVfSU4xLCAgQ1gxOF9BVl9BVURJT19TRVJJQUwsIDAgfSwKLQkJeyBDWDE4X0NBUkRfSU5QVVRfTElORV9JTjIsICBDWDE4X0FWX0FVRElPX1NFUklBTCwgMCB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9BVURfVFVORVIsIENYMThfQVZfQVVESU81LCAgICAgICAgMCB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9MSU5FX0lOMSwgIENYMThfQVZfQVVESU9fU0VSSUFMMSwgMCB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9MSU5FX0lOMiwgIENYMThfQVZfQVVESU9fU0VSSUFMMSwgMCB9LAogCX0sCi0JLnJhZGlvX2lucHV0ID0geyBDWDE4X0NBUkRfSU5QVVRfQVVEX1RVTkVSLCBDWDE4X0FWX0FVRElPX1NFUklBTCwgMCB9LAorCS5yYWRpb19pbnB1dCA9IHsgQ1gxOF9DQVJEX0lOUFVUX0FVRF9UVU5FUiwgQ1gxOF9BVl9BVURJT19TRVJJQUwxLCAwIH0sCiAJLnR1bmVycyA9IHsKIAkJLyogWEMzMDI4IHR1bmVyICovCiAJCXsgLnN0ZCA9IFY0TDJfU1REX0FMTCwgLnR1bmVyID0gVFVORVJfWEMyMDI4IH0sCkBAIC0yMjcsMTYgKzIzMSw3MyBAQAogCQkudHVuZV9sYW5lID0gMCwKIAkJLmluaXRpYWxfZW1ycyA9IDIsCiAJfSwKLQkueGNlaXZlX3BpbiA9IDE1LAorCS54Y2VpdmVfcGluID0gMCwKIAkucGNpX2xpc3QgPSBjeDE4X3BjaV9tcGM3MTgsCiAJLmkyYyA9ICZjeDE4X2kyY19zdGQsCiB9OwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENvbmV4YW50IFJhcHRvciBQQUwvU0VDQU06IG5vdGUgdGhhdCB0aGlzIGNhcmQgaXMgYW5hbG9nIG9ubHkhICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkX3BjaV9pbmZvIGN4MThfcGNpX2NueHRfcmFwdG9yX3BhbFtdID0geworCXsgUENJX0RFVklDRV9JRF9DWDIzNDE4LCBDWDE4X1BDSV9JRF9DT05FWEFOVCwgMHgwMDA5IH0sCisJeyAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9jbnh0X3JhcHRvcl9wYWwgPSB7CisJLnR5cGUgPSBDWDE4X0NBUkRfQ05YVF9SQVBUT1JfUEFMLAorCS5uYW1lID0gIkNvbmV4YW50IFJhcHRvciBQQUwvU0VDQU0iLAorCS5jb21tZW50ID0gIlZCSSBpcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKwkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAorCS5od19tdXhlciA9IENYMThfSFdfR1BJTywKKwkuaHdfYWxsID0gQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJTywKKwkudmlkZW9faW5wdXRzID0geworCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTIgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKKwkJCUNYMThfQVZfU1ZJREVPX0xVTUEzIHwgQ1gxOF9BVl9TVklERU9fQ0hST01BNCB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9DT01QT1NJVEUxLCAxLCBDWDE4X0FWX0NPTVBPU0lURTEgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMiwgICAgMiwKKwkJCUNYMThfQVZfU1ZJREVPX0xVTUE3IHwgQ1gxOF9BVl9TVklERU9fQ0hST01BOCB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9DT01QT1NJVEUyLCAyLCBDWDE4X0FWX0NPTVBPU0lURTYgfSwKKwl9LAorCS5hdWRpb19pbnB1dHMgPSB7CisJCXsgQ1gxOF9DQVJEX0lOUFVUX0FVRF9UVU5FUiwgQ1gxOF9BVl9BVURJTzUsIAkgICAgMCB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9MSU5FX0lOMSwgIENYMThfQVZfQVVESU9fU0VSSUFMMSwgMSB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9MSU5FX0lOMiwgIENYMThfQVZfQVVESU9fU0VSSUFMMiwgMSB9LAorCX0sCisJLnR1bmVycyA9IHsKKwkJeyAuc3RkID0gVjRMMl9TVERfUEFMX1NFQ0FNLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMyB9LAorCX0sCisJLnJhZGlvX2lucHV0ID0geyBDWDE4X0NBUkRfSU5QVVRfQVVEX1RVTkVSLCBDWDE4X0FWX0FVRElPX1NFUklBTDEsIDIgfSwKKwkuZGRyID0geworCQkvKiBNVCA0NlYxNk0xNiBtZW1vcnkgKi8KKwkJLmNoaXBfY29uZmlnID0gMHg1MDMwNiwKKwkJLnJlZnJlc2ggPSAweDc1MywKKwkJLnRpbWluZzEgPSAweDMzMjIwOTUzLAorCQkudGltaW5nMiA9IDB4MDksCisJCS50dW5lX2xhbmUgPSAwLAorCQkuaW5pdGlhbF9lbXJzID0gMCwKKwl9LAorCS5ncGlvX2luaXQuaW5pdGlhbF92YWx1ZSA9IDB4MTAwMiwKKwkuZ3Bpb19pbml0LmRpcmVjdGlvbiA9IDB4ZjAwMiwKKwkuZ3Bpb19hdWRpb19pbnB1dCA9IHsgLm1hc2sgICA9IDB4ZjAwMiwKKwkJCSAgICAgIC50dW5lciAgPSAweDEwMDIsICAgLyogTEVEIEQxICBUdW5lciBBRiAgKi8KKwkJCSAgICAgIC5saW5laW4gPSAweDIwMDAsICAgLyogTEVEIEQyICBMaW5lIEluIDEgKi8KKwkJCSAgICAgIC5yYWRpbyAgPSAweDQwMDIgfSwgLyogTEVEIEQzICBUdW5lciBBRiAgKi8KKwkucGNpX2xpc3QgPSBjeDE4X3BjaV9jbnh0X3JhcHRvcl9wYWwsCisJLmkyYyA9ICZjeDE4X2kyY19zdGQsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkICpjeDE4X2NhcmRfbGlzdFtdID0gewogCSZjeDE4X2NhcmRfaHZyMTYwMF9lc210LAogCSZjeDE4X2NhcmRfaHZyMTYwMF9zYW1zdW5nLAogCSZjeDE4X2NhcmRfaDkwMCwKIAkmY3gxOF9jYXJkX21wYzcxOCwKKwkmY3gxOF9jYXJkX2NueHRfcmFwdG9yX3BhbCwKIH07CiAKIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgKmN4MThfZ2V0X2NhcmQodTE2IGluZGV4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmgKaW5kZXggZGMyZGQ5NC4uMzIxNTVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5oCkBAIC04Myw2ICs4MywxNCBAQAogCXUzMiBhY3RpdmVfaGlfbWFzazsgLyogR1BJTyBvdXRwdXRzIHRoYXQgcmVzZXQgaTJjIGNoaXBzIHdoZW4gaGlnaCAqLwogCWludCBtc2Vjc19hc3NlcnRlZDsgLyogdGltZSBwZXJpb2QgcmVzZXQgbXVzdCByZW1haW4gYXNzZXJ0ZWQgKi8KIAlpbnQgbXNlY3NfcmVjb3Zlcnk7IC8qIHRpbWUgYWZ0ZXIgZGVhc3NlcnQgZm9yIGNoaXBzIHRvIGJlIHJlYWR5ICovCisJdTMyIGlyX3Jlc2V0X21hc2s7ICAvKiBHUElPIHRvIHJlc2V0IHRoZSBaaWxvZyBaOEYwODExIElSIGNvbnRvbGxlciAqLworfTsKKworc3RydWN0IGN4MThfZ3Bpb19hdWRpb19pbnB1dCB7IAkvKiBzZWxlY3QgdHVuZXIvbGluZSBpbiBpbnB1dCAqLworCXUzMiBtYXNrOyAJCS8qIGxlYXZlIHRvIDAgaWYgbm90IHN1cHBvcnRlZCAqLworCXUzMiB0dW5lcjsKKwl1MzIgbGluZWluOworCXUzMiByYWRpbzsKIH07CiAKIHN0cnVjdCBjeDE4X2NhcmRfdHVuZXIgewpAQCAtMTIzLDYgKzEzMSw3IEBACiAJdTggeGNlaXZlX3BpbjsgCQkvKiBYQ2VpdmUgdHVuZXIgR1BJTyByZXNldCBwaW4gKi8KIAlzdHJ1Y3QgY3gxOF9ncGlvX2luaXQgCQkgZ3Bpb19pbml0OwogCXN0cnVjdCBjeDE4X2dwaW9faTJjX3NsYXZlX3Jlc2V0IGdwaW9faTJjX3NsYXZlX3Jlc2V0OworCXN0cnVjdCBjeDE4X2dwaW9fYXVkaW9faW5wdXQgICAgZ3Bpb19hdWRpb19pbnB1dDsKIAogCXN0cnVjdCBjeDE4X2NhcmRfdHVuZXIgdHVuZXJzW0NYMThfQ0FSRF9NQVhfVFVORVJTXTsKIAlzdHJ1Y3QgY3gxOF9jYXJkX3R1bmVyX2kyYyAqaTJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY29udHJvbHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMKaW5kZXggODdjZjQxMC4uZjQ2YzdlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY29udHJvbHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5jCkBAIC01MSwxMiArNTEsMTEgQEAKIAlOVUxMCiB9OwogCi1zdGF0aWMgaW50IGN4MThfcXVlcnljdHJsKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK2ludCBjeDE4X3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCiB7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKIAljb25zdCBjaGFyICpuYW1lOwogCi0JQ1gxOF9ERUJVR19JT0NUTCgiVklESU9DX1FVRVJZQ1RSTCglMDh4KVxuIiwgcWN0cmwtPmlkKTsKLQogCXFjdHJsLT5pZCA9IHY0bDJfY3RybF9uZXh0KGN0cmxfY2xhc3NlcywgcWN0cmwtPmlkKTsKIAlpZiAocWN0cmwtPmlkID09IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTEsMjEgKzkwLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gxOF9xdWVyeW1lbnUoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51KQoraW50IGN4MThfcXVlcnltZW51KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSkKIHsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OwogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKIAogCXFjdHJsLmlkID0gcW1lbnUtPmlkOwotCWN4MThfcXVlcnljdHJsKGN4LCAmcWN0cmwpOwotCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfbWVudShxbWVudSwgJnFjdHJsLCBjeDIzNDF4X2N0cmxfZ2V0X21lbnUocW1lbnUtPmlkKSk7CisJY3gxOF9xdWVyeWN0cmwoZmlsZSwgZmgsICZxY3RybCk7CisJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9tZW51KHFtZW51LCAmcWN0cmwsCisJCQljeDIzNDF4X2N0cmxfZ2V0X21lbnUoJmN4LT5wYXJhbXMsIHFtZW51LT5pZCkpOworfQorCitzdGF0aWMgaW50IGN4MThfdHJ5X2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqdmN0cmwpCit7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsOworCWNvbnN0IGNoYXIgKiptZW51X2l0ZW1zID0gTlVMTDsKKwlpbnQgZXJyOworCisJcWN0cmwuaWQgPSB2Y3RybC0+aWQ7CisJZXJyID0gY3gxOF9xdWVyeWN0cmwoZmlsZSwgZmgsICZxY3RybCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAocWN0cmwudHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VKQorCQltZW51X2l0ZW1zID0gdjRsMl9jdHJsX2dldF9tZW51KHFjdHJsLmlkKTsKKwlyZXR1cm4gdjRsMl9jdHJsX2NoZWNrKHZjdHJsLCAmcWN0cmwsIG1lbnVfaXRlbXMpOwogfQogCiBzdGF0aWMgaW50IGN4MThfc19jdHJsKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfY29udHJvbCAqdmN0cmwpCiB7Ci0JczMyIHYgPSB2Y3RybC0+dmFsdWU7Ci0KLQlDWDE4X0RFQlVHX0lPQ1RMKCJWSURJT0NfU19DVFJMKCUwOHgsICV4KVxuIiwgdmN0cmwtPmlkLCB2KTsKLQogCXN3aXRjaCAodmN0cmwtPmlkKSB7CiAJCS8qIFN0YW5kYXJkIFY0TDIgY29udHJvbHMgKi8KIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CkBAIC0xMjMsNyArMTM2LDcgQEAKIAkJcmV0dXJuIGN4MThfaTJjX2h3KGN4LCBjeC0+Y2FyZC0+aHdfYXVkaW9fY3RybCwgVklESU9DX1NfQ1RSTCwgdmN0cmwpOwogCiAJZGVmYXVsdDoKLQkJQ1gxOF9ERUJVR19JT0NUTCgiaW52YWxpZCBjb250cm9sICV4XG4iLCB2Y3RybC0+aWQpOworCQlDWDE4X0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMTMxLDggKzE0NCw2IEBACiAKIHN0YXRpYyBpbnQgY3gxOF9nX2N0cmwoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9jb250cm9sICp2Y3RybCkKIHsKLQlDWDE4X0RFQlVHX0lPQ1RMKCJWSURJT0NfR19DVFJMKCUwOHgpXG4iLCB2Y3RybC0+aWQpOwotCiAJc3dpdGNoICh2Y3RybC0+aWQpIHsKIAkJLyogU3RhbmRhcmQgVjRMMiBjb250cm9scyAqLwogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKQEAgLTE0OSw3ICsxNjAsNyBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6CiAJCXJldHVybiBjeDE4X2kyY19odyhjeCwgY3gtPmNhcmQtPmh3X2F1ZGlvX2N0cmwsIFZJRElPQ19HX0NUUkwsIHZjdHJsKTsKIAlkZWZhdWx0OgotCQlDWDE4X0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgJXhcbiIsIHZjdHJsLT5pZCk7CisJCUNYMThfREVCVUdfSU9DVEwoImludmFsaWQgY29udHJvbCAweCV4XG4iLCB2Y3RybC0+aWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xOTQsMTEzICsyMDUsMTEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjeDE4X2NvbnRyb2xfaW9jdGxzKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoraW50IGN4MThfZ19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmMpCiB7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKIAlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX1FVRVJZTUVOVToKLQkJQ1gxOF9ERUJVR19JT0NUTCgiVklESU9DX1FVRVJZTUVOVVxuIik7Ci0JCXJldHVybiBjeDE4X3F1ZXJ5bWVudShjeCwgYXJnKTsKKwlpZiAoYy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfVVNFUikgeworCQlpbnQgaTsKKwkJaW50IGVyciA9IDA7CiAKLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JCXJldHVybiBjeDE4X3F1ZXJ5Y3RybChjeCwgYXJnKTsKLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmV0dXJuIGN4MThfc19jdHJsKGN4LCBhcmcpOwotCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gY3gxOF9nX2N0cmwoY3gsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKLQl7Ci0JCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqYyA9IGFyZzsKLQotCQlpZiAoYy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfVVNFUikgewotCQkJaW50IGk7Ci0JCQlpbnQgZXJyID0gMDsKLQotCQkJZm9yIChpID0gMDsgaSA8IGMtPmNvdW50OyBpKyspIHsKLQkJCQljdHJsLmlkID0gYy0+Y29udHJvbHNbaV0uaWQ7Ci0JCQkJY3RybC52YWx1ZSA9IGMtPmNvbnRyb2xzW2ldLnZhbHVlOwotCQkJCWVyciA9IGN4MThfc19jdHJsKGN4LCAmY3RybCk7Ci0JCQkJYy0+Y29udHJvbHNbaV0udmFsdWUgPSBjdHJsLnZhbHVlOwotCQkJCWlmIChlcnIpIHsKLQkJCQkJYy0+ZXJyb3JfaWR4ID0gaTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQorCQlmb3IgKGkgPSAwOyBpIDwgYy0+Y291bnQ7IGkrKykgeworCQkJY3RybC5pZCA9IGMtPmNvbnRyb2xzW2ldLmlkOworCQkJY3RybC52YWx1ZSA9IGMtPmNvbnRyb2xzW2ldLnZhbHVlOworCQkJZXJyID0gY3gxOF9nX2N0cmwoY3gsICZjdHJsKTsKKwkJCWMtPmNvbnRyb2xzW2ldLnZhbHVlID0gY3RybC52YWx1ZTsKKwkJCWlmIChlcnIpIHsKKwkJCQljLT5lcnJvcl9pZHggPSBpOworCQkJCWJyZWFrOwogCQkJfQotCQkJcmV0dXJuIGVycjsKIAkJfQotCQlDWDE4X0RFQlVHX0lPQ1RMKCJWSURJT0NfU19FWFRfQ1RSTFNcbiIpOwotCQlpZiAoYy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykgewotCQkJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgcCA9IGN4LT5wYXJhbXM7Ci0JCQlpbnQgZXJyID0gY3gyMzQxeF9leHRfY3RybHMoJnAsIGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZyksIGFyZywgY21kKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCisJCXJldHVybiBjeDIzNDF4X2V4dF9jdHJscygmY3gtPnBhcmFtcywgMCwgYywgVklESU9DX0dfRVhUX0NUUkxTKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KIAotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOworaW50IGN4MThfc19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmMpCit7CisJc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CisJaW50IHJldDsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CiAKLQkJCWlmIChwLnZpZGVvX2VuY29kaW5nICE9IGN4LT5wYXJhbXMudmlkZW9fZW5jb2RpbmcpIHsKLQkJCQlpbnQgaXNfbXBlZzEgPSBwLnZpZGVvX2VuY29kaW5nID09CisJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjeC0+cHJpbywgJmlkLT5wcmlvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIpIHsKKwkJaW50IGk7CisJCWludCBlcnIgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudDsgaSsrKSB7CisJCQljdHJsLmlkID0gYy0+Y29udHJvbHNbaV0uaWQ7CisJCQljdHJsLnZhbHVlID0gYy0+Y29udHJvbHNbaV0udmFsdWU7CisJCQllcnIgPSBjeDE4X3NfY3RybChjeCwgJmN0cmwpOworCQkJYy0+Y29udHJvbHNbaV0udmFsdWUgPSBjdHJsLnZhbHVlOworCQkJaWYgKGVycikgeworCQkJCWMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVycjsKKwl9CisJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpIHsKKwkJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgcCA9IGN4LT5wYXJhbXM7CisJCWludCBlcnIgPSBjeDIzNDF4X2V4dF9jdHJscygmcCwgYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSwKKwkJCQkJCWMsIFZJRElPQ19TX0VYVF9DVFJMUyk7CisKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKHAudmlkZW9fZW5jb2RpbmcgIT0gY3gtPnBhcmFtcy52aWRlb19lbmNvZGluZykgeworCQkJaW50IGlzX21wZWcxID0gcC52aWRlb19lbmNvZGluZyA9PQogCQkJCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMTsKLQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OworCQkJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKIAotCQkJCS8qIGZpeCB2aWRlb2RlY29kZXIgcmVzb2x1dGlvbiAqLwotCQkJCWZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQkJCWZtdC5mbXQucGl4LndpZHRoID0gY3gtPnBhcmFtcy53aWR0aCAvIChpc19tcGVnMSA/IDIgOiAxKTsKLQkJCQlmbXQuZm10LnBpeC5oZWlnaHQgPSBjeC0+cGFyYW1zLmhlaWdodDsKLQkJCQljeDE4X2F2X2NtZChjeCwgVklESU9DX1NfRk1ULCAmZm10KTsKLQkJCX0KLQkJCWVyciA9IGN4MjM0MXhfdXBkYXRlKGN4LCBjeDE4X2FwaV9mdW5jLCAmY3gtPnBhcmFtcywgJnApOwotCQkJaWYgKCFlcnIgJiYgY3gtPnBhcmFtcy5zdHJlYW1fdmJpX2ZtdCAhPSBwLnN0cmVhbV92YmlfZm10KQotCQkJCWVyciA9IGN4MThfc2V0dXBfdmJpX2ZtdChjeCwgcC5zdHJlYW1fdmJpX2ZtdCk7Ci0JCQljeC0+cGFyYW1zID0gcDsKLQkJCWN4LT5kdWFsd2F0Y2hfc3RlcmVvX21vZGUgPSBwLmF1ZGlvX3Byb3BlcnRpZXMgJiAweDAzMDA7Ci0JCQljeDE4X2F1ZGlvX3NldF9hdWRpb19jbG9ja19mcmVxKGN4LCBwLmF1ZGlvX3Byb3BlcnRpZXMgJiAweDAzKTsKLQkJCXJldHVybiBlcnI7CisJCQkvKiBmaXggdmlkZW9kZWNvZGVyIHJlc29sdXRpb24gKi8KKwkJCWZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJZm10LmZtdC5waXgud2lkdGggPSBjeC0+cGFyYW1zLndpZHRoCisJCQkJCQkvIChpc19tcGVnMSA/IDIgOiAxKTsKKwkJCWZtdC5mbXQucGl4LmhlaWdodCA9IGN4LT5wYXJhbXMuaGVpZ2h0OworCQkJY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0ZNVCwgJmZtdCk7CiAJCX0KLQkJcmV0dXJuIC1FSU5WQUw7CisJCWVyciA9IGN4MjM0MXhfdXBkYXRlKGN4LCBjeDE4X2FwaV9mdW5jLCAmY3gtPnBhcmFtcywgJnApOworCQlpZiAoIWVyciAmJiBjeC0+cGFyYW1zLnN0cmVhbV92YmlfZm10ICE9IHAuc3RyZWFtX3ZiaV9mbXQpCisJCQllcnIgPSBjeDE4X3NldHVwX3ZiaV9mbXQoY3gsIHAuc3RyZWFtX3ZiaV9mbXQpOworCQljeC0+cGFyYW1zID0gcDsKKwkJY3gtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSA9IHAuYXVkaW9fcHJvcGVydGllcyAmIDB4MDMwMDsKKwkJY3gxOF9hdWRpb19zZXRfYXVkaW9fY2xvY2tfZnJlcShjeCwgcC5hdWRpb19wcm9wZXJ0aWVzICYgMHgwMyk7CisJCXJldHVybiBlcnI7CiAJfQorCXJldHVybiAtRUlOVkFMOworfQogCi0JY2FzZSBWSURJT0NfR19FWFRfQ1RSTFM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmMgPSBhcmc7CitpbnQgY3gxOF90cnlfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjKQoreworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CiAKLQkJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIpIHsKLQkJCWludCBpOwotCQkJaW50IGVyciA9IDA7CisJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIpIHsKKwkJaW50IGk7CisJCWludCBlcnIgPSAwOwogCi0JCQlmb3IgKGkgPSAwOyBpIDwgYy0+Y291bnQ7IGkrKykgewotCQkJCWN0cmwuaWQgPSBjLT5jb250cm9sc1tpXS5pZDsKLQkJCQljdHJsLnZhbHVlID0gYy0+Y29udHJvbHNbaV0udmFsdWU7Ci0JCQkJZXJyID0gY3gxOF9nX2N0cmwoY3gsICZjdHJsKTsKLQkJCQljLT5jb250cm9sc1tpXS52YWx1ZSA9IGN0cmwudmFsdWU7Ci0JCQkJaWYgKGVycikgewotCQkJCQljLT5lcnJvcl9pZHggPSBpOwotCQkJCQlicmVhazsKLQkJCQl9CisJCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudDsgaSsrKSB7CisJCQllcnIgPSBjeDE4X3RyeV9jdHJsKGZpbGUsIGZoLCAmYy0+Y29udHJvbHNbaV0pOworCQkJaWYgKGVycikgeworCQkJCWMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQlyZXR1cm4gZXJyOwogCQl9Ci0JCUNYMThfREVCVUdfSU9DVEwoIlZJRElPQ19HX0VYVF9DVFJMU1xuIik7Ci0JCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQotCQkJcmV0dXJuIGN4MjM0MXhfZXh0X2N0cmxzKCZjeC0+cGFyYW1zLCAwLCBhcmcsIGNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gZXJyOwogCX0KLQotCWNhc2UgVklESU9DX1RSWV9FWFRfQ1RSTFM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmMgPSBhcmc7Ci0KLQkJQ1gxOF9ERUJVR19JT0NUTCgiVklESU9DX1RSWV9FWFRfQ1RSTFNcbiIpOwotCQlpZiAoYy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKLQkJCXJldHVybiBjeDIzNDF4X2V4dF9jdHJscygmY3gtPnBhcmFtcywKLQkJCQkJYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSwgYXJnLCBjbWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7CisJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCisJCXJldHVybiBjeDIzNDF4X2V4dF9jdHJscygmY3gtPnBhcmFtcywKKwkJCQkJCWF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZyksCisJCQkJCQljLCBWSURJT0NfVFJZX0VYVF9DVFJMUyk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY29udHJvbHMuaAppbmRleCA2ZTk4NWNmLi5lNDYzMjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmgKQEAgLTIxLDQgKzIxLDkgQEAKICAqICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi1pbnQgY3gxOF9jb250cm9sX2lvY3RscyhzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgY3gxOF9xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmEpOworaW50IGN4MThfZ19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmEpOworaW50IGN4MThfc19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmEpOworaW50IGN4MThfdHJ5X2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmEpOworaW50IGN4MThfcXVlcnltZW51KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICphKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKaW5kZXggMmI4MTBiYi4uMjI0MzRhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKQEAgLTEyMCw2ICsxMjAsNyBAQAogCQkgIlx0XHRcdCAyID0gSGF1cHBhdWdlIEhWUiAxNjAwIChTYW1zdW5nIG1lbW9yeSlcbiIKIAkJICJcdFx0XHQgMyA9IENvbXBybyBWaWRlb01hdGUgSDkwMFxuIgogCQkgIlx0XHRcdCA0ID0gWXVhbiBNUEM3MThcbiIKKwkJICJcdFx0XHQgNSA9IENvbmV4YW50IFJhcHRvciBQQUwvU0VDQU1cbiIKIAkJICJcdFx0XHQgMCA9IEF1dG9kZXRlY3QgKGRlZmF1bHQpXG4iCiAJCSAiXHRcdFx0LTEgPSBJZ25vcmUgdGhpcyBjYXJkXG5cdFx0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBhbCwgIlNldCBQQUwgc3RhbmRhcmQ6IEIsIEcsIEgsIEQsIEssIEksIE0sIE4sIE5jLCA2MCIpOwpAQCAtNDIwLDYgKzQyMSw3IEBACiAJbXV0ZXhfaW5pdCgmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAltdXRleF9pbml0KCZjeC0+aTJjX2J1c19sb2NrWzBdKTsKIAltdXRleF9pbml0KCZjeC0+aTJjX2J1c19sb2NrWzFdKTsKKwltdXRleF9pbml0KCZjeC0+Z3Bpb19sb2NrKTsKIAogCXNwaW5fbG9ja19pbml0KCZjeC0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmN4LT5kbWFfcmVnX2xvY2spOwpAQCAtNDM1LDcgKzQzNyw3IEBACiAJCShjeC0+cGFyYW1zLnZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlIDw8IDEpIHwKIAkJKGN4LT5wYXJhbXMudmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlIDw8IDIpOwogCWN4LT5wYXJhbXMucG9ydCA9IENYMjM0MVhfUE9SVF9NRU1PUlk7Ci0JY3gtPnBhcmFtcy5jYXBhYmlsaXRpZXMgPSBDWDIzNDFYX0NBUF9IQVNfU0xJQ0VEX1ZCSTsKKwljeC0+cGFyYW1zLmNhcGFiaWxpdGllcyA9IENYMjM0MVhfQ0FQX0hBU19UUzsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjeC0+Y2FwX3cpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN4LT5tYl9hcHVfd2FpdHEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN4LT5tYl9jcHVfd2FpdHEpOwpAQCAtNjE0LDcgKzYxNiw3IEBACiAJY3gxOF9jYXJkc1tjeDE4X2NhcmRzX2FjdGl2ZV0gPSBjeDsKIAljeC0+ZGV2ID0gZGV2OwogCWN4LT5udW0gPSBjeDE4X2NhcmRzX2FjdGl2ZSsrOwotCXNucHJpbnRmKGN4LT5uYW1lLCBzaXplb2YoY3gtPm5hbWUpIC0gMSwgImN4MTgtJWQiLCBjeC0+bnVtKTsKKwlzbnByaW50ZihjeC0+bmFtZSwgc2l6ZW9mKGN4LT5uYW1lKSwgImN4MTgtJWQiLCBjeC0+bnVtKTsKIAlDWDE4X0lORk8oIkluaXRpYWxpemluZyBjYXJkICMlZFxuIiwgY3gtPm51bSk7CiAKIAlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKQEAgLTcyMSw2ICs3MjMsMTIgQEAKIAkvKiBpZiBubyB0dW5lciB3YXMgZm91bmQsIHRoZW4gcGljayB0aGUgZmlyc3QgdHVuZXIgaW4gdGhlIGNhcmQgbGlzdCAqLwogCWlmIChjeC0+b3B0aW9ucy50dW5lciA9PSAtMSAmJiBjeC0+Y2FyZC0+dHVuZXJzWzBdLnN0ZCkgewogCQljeC0+c3RkID0gY3gtPmNhcmQtPnR1bmVyc1swXS5zdGQ7CisJCWlmIChjeC0+c3RkICYgVjRMMl9TVERfUEFMKQorCQkJY3gtPnN0ZCA9IFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX1BBTF9IOworCQllbHNlIGlmIChjeC0+c3RkICYgVjRMMl9TVERfTlRTQykKKwkJCWN4LT5zdGQgPSBWNEwyX1NURF9OVFNDX007CisJCWVsc2UgaWYgKGN4LT5zdGQgJiBWNEwyX1NURF9TRUNBTSkKKwkJCWN4LT5zdGQgPSBWNEwyX1NURF9TRUNBTV9MOwogCQljeC0+b3B0aW9ucy50dW5lciA9IGN4LT5jYXJkLT50dW5lcnNbMF0udHVuZXI7CiAJfQogCWlmIChjeC0+b3B0aW9ucy5yYWRpbyA9PSAtMSkKQEAgLTgxOCw2ICs4MjYsOSBAQAogCWludCB2aWRlb19pbnB1dDsKIAlpbnQgZndfcmV0cnlfY291bnQgPSAzOwogCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSB2ZjsKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkIGZoOworCisJZmguY3ggPSBjeDsKIAogCWlmICh0ZXN0X2JpdChDWDE4X0ZfSV9GQUlMRUQsICZjeC0+aV9mbGFncykpCiAJCXJldHVybiAtRU5YSU87CkBAIC04NjksMTMgKzg4MCwxMyBAQAogCiAJdmlkZW9faW5wdXQgPSBjeC0+YWN0aXZlX2lucHV0OwogCWN4LT5hY3RpdmVfaW5wdXQrKzsJLyogRm9yY2UgdXBkYXRlIG9mIGlucHV0ICovCi0JY3gxOF92NGwyX2lvY3RscyhjeCwgTlVMTCwgVklESU9DX1NfSU5QVVQsICZ2aWRlb19pbnB1dCk7CisJY3gxOF9zX2lucHV0KE5VTEwsICZmaCwgdmlkZW9faW5wdXQpOwogCiAJLyogTGV0IHRoZSBWSURJT0NfU19TVEQgaW9jdGwgZG8gYWxsIHRoZSB3b3JrLCBrZWVwcyB0aGUgY29kZQogCSAgIGluIG9uZSBwbGFjZS4gKi8KIAljeC0+c3RkKys7CQkvKiBGb3JjZSBmdWxsIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uICovCi0JY3gxOF92NGwyX2lvY3RscyhjeCwgTlVMTCwgVklESU9DX1NfU1RELCAmY3gtPnR1bmVyX3N0ZCk7Ci0JY3gxOF92NGwyX2lvY3RscyhjeCwgTlVMTCwgVklESU9DX1NfRlJFUVVFTkNZLCAmdmYpOworCWN4MThfc19zdGQoTlVMTCwgJmZoLCAmY3gtPnR1bmVyX3N0ZCk7CisJY3gxOF9zX2ZyZXF1ZW5jeShOVUxMLCAmZmgsICZ2Zik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKaW5kZXggZGUxNGFiNS4uNDVlMzFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKQEAgLTc1LDcgKzc1LDggQEAKICNkZWZpbmUgQ1gxOF9DQVJEX0hWUl8xNjAwX1NBTVNVTkcgICAgMQkvKiBIYXVwcGF1Z2UgSFZSIDE2MDAgKFNhbXN1bmcgbWVtb3J5KSAqLwogI2RlZmluZSBDWDE4X0NBUkRfQ09NUFJPX0g5MDAgCSAgICAgIDIJLyogQ29tcHJvIFZpZGVvTWF0ZSBIOTAwICovCiAjZGVmaW5lIENYMThfQ0FSRF9ZVUFOX01QQzcxOCAJICAgICAgMwkvKiBZdWFuIE1QQzcxOCAqLwotI2RlZmluZSBDWDE4X0NBUkRfTEFTVCAJCSAgICAgIDMKKyNkZWZpbmUgQ1gxOF9DQVJEX0NOWFRfUkFQVE9SX1BBTCAgICAgNAkvKiBDb25leGFudCBSYXB0b3IgUEFMICovCisjZGVmaW5lIENYMThfQ0FSRF9MQVNUIAkJICAgICAgNAogCiAjZGVmaW5lIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAgMAogI2RlZmluZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUyAgIDEKQEAgLTk0LDYgKzk1LDcgQEAKICNkZWZpbmUgQ1gxOF9QQ0lfSURfSEFVUFBBVUdFIAkJMHgwMDcwCiAjZGVmaW5lIENYMThfUENJX0lEX0NPTVBSTyAJCTB4MTg1YgogI2RlZmluZSBDWDE4X1BDSV9JRF9ZVUFOIAkJMHgxMmFiCisjZGVmaW5lIENYMThfUENJX0lEX0NPTkVYQU5UCQkweDE0ZjEKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSBTVEFSVCBVU0VSIFNFVFRBQkxFIERNQSBWQVJJQUJMRVMgPT09PT09PT09PT0gKi8KQEAgLTIyOCw5ICsyMzAsNyBAQAogCXN0cnVjdCBkdmJfbmV0IGR2Ym5ldDsKIAlpbnQgZW5hYmxlZDsKIAlpbnQgZmVlZGluZzsKLQogCXN0cnVjdCBtdXRleCBmZWVkbG9jazsKLQogfTsKIAogc3RydWN0IGN4MTg7CSAvKiBmb3J3YXJkIHJlZmVyZW5jZSAqLwpAQCAtNDI3LDYgKzQyNyw3IEBACiAJLyogZ3BpbyAqLwogCXUzMiBncGlvX2RpcjsKIAl1MzIgZ3Bpb192YWw7CisJc3RydWN0IG11dGV4IGdwaW9fbG9jazsKIAogCS8qIHY0bDIgYW5kIFVzZXIgc2V0dGluZ3MgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpcm13YXJlLmMKaW5kZXggMjY5NGNlMy4uMmQ2MzBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jCkBAIC00MSw5ICs0MSw2IEBACiAKICNkZWZpbmUgQ1gxOF9SRUdfQlVTX1RJTUVPVVRfRU4gICAgICAJMHhjNzIwMjQKIAotI2RlZmluZSBDWDE4X0FVRElPX0VOQUJMRSAgICAgICAgICAgIAkweGM3MjAxNAotI2RlZmluZSBDWDE4X1JFR19CVVNfVElNRU9VVF9FTiAgICAgIAkweGM3MjAyNAotCiAjZGVmaW5lIENYMThfRkFTVF9DTE9DS19QTExfSU5UICAgICAgCTB4Yzc4MDAwCiAjZGVmaW5lIENYMThfRkFTVF9DTE9DS19QTExfRlJBQyAgICAgCTB4Yzc4MDA0CiAjZGVmaW5lIENYMThfRkFTVF9DTE9DS19QTExfUE9TVCAgICAgCTB4Yzc4MDA4CkBAIC05MCw3ICs4Nyw3IEBACiAjZGVmaW5lIENYMThfRFNQMF9JTlRFUlJVUFRfTUFTSyAgICAgCTB4ZDAwMDRDCiAKIC8qIEVuY29kZXIvZGVjb2RlciBmaXJtd2FyZSBzaXplcyAqLwotI2RlZmluZSBDWDE4X0ZXX0NQVV9TSVpFIAkJKDE3NDcxNikKKyNkZWZpbmUgQ1gxOF9GV19DUFVfU0laRSAJCSgxNTgzMzIpCiAjZGVmaW5lIENYMThfRldfQVBVX1NJWkUgCQkoMTQxMjAwKQogCiAjZGVmaW5lIEFQVV9ST01fU1lOQzEgMHg2RDY3NjU1MyAvKiAibWdlUyIgKi8KQEAgLTM0NSw2ICszNDIsMTEgQEAKIAkJaW50IHN6ID0gbG9hZF9hcHVfZndfZGlyZWN0KCJ2NGwtY3gyMzQxOC1hcHUuZnciLAogCQkJICAgICAgIGN4LT5lbmNfbWVtLCBjeCwgQ1gxOF9GV19BUFVfU0laRSk7CiAKKwkJd3JpdGVfZW5jKDB4RTUxRkYwMDQsIDApOworCQl3cml0ZV9lbmMoMHhhMDAwMDAsIDQpOyAgLyogdG9kbzogbm90IGhhcmRjb2RlZCAqLworCQl3cml0ZV9yZWcoMHgwMDAxMDAwMCwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpOyAvKiBTdGFydCBBUFUgKi8KKwkJY3gxOF9tc2xlZXBfdGltZW91dCg1MDAsIDApOworCiAJCXN6ID0gc3ogPD0gMCA/IHN6IDogbG9hZF9jcHVfZndfZGlyZWN0KCJ2NGwtY3gyMzQxOC1jcHUuZnciLAogCQkJCQljeC0+ZW5jX21lbSwgY3gsIENYMThfRldfQ1BVX1NJWkUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMKaW5kZXggYjMwMjgzMy4uM2Q0OTVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYwpAQCAtNjksNiArNjksNyBAQAogCS8qIEFzc3VtaW5nIHRoYXQgdGhlIG1hc2tzIGFyZSBhIHN1YnNldCBvZiB0aGUgYml0cyBpbiBncGlvX2RpciAqLwogCiAJLyogQXNzZXJ0ICovCisJbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7CiAJY3gtPmdwaW9fdmFsID0KIAkJKGN4LT5ncGlvX3ZhbCB8IHAtPmFjdGl2ZV9oaV9tYXNrKSAmIH4ocC0+YWN0aXZlX2xvX21hc2spOwogCWdwaW9fd3JpdGUoY3gpOwpAQCAtNzksMTAgKzgwLDUzIEBACiAJCShjeC0+Z3Bpb192YWwgfCBwLT5hY3RpdmVfbG9fbWFzaykgJiB+KHAtPmFjdGl2ZV9oaV9tYXNrKTsKIAlncGlvX3dyaXRlKGN4KTsKIAlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKHAtPm1zZWNzX3JlY292ZXJ5KSk7CisJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKIH0KIAordm9pZCBjeDE4X3Jlc2V0X2lyX2dwaW8odm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKilkYXRhKS0+Y3g7CisJY29uc3Qgc3RydWN0IGN4MThfZ3Bpb19pMmNfc2xhdmVfcmVzZXQgKnA7CisKKwlwID0gJmN4LT5jYXJkLT5ncGlvX2kyY19zbGF2ZV9yZXNldDsKKworCWlmIChwLT5pcl9yZXNldF9tYXNrID09IDApCisJCXJldHVybjsKKworCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIElSIG1pY3JvY29udHJvbGxlclxuIik7CisKKwkvKgorCSAgIEFzc2VydCB0aW1pbmcgZm9yIHRoZSBaOEYwODExIG9uIEhWUi0xNjAwIGJvYXJkczoKKwkgICAxLiBBc3NlcnQgUkVTRVQgZm9yIG1pbiBvZiA0IGNsb2NrIGN5Y2xlcyBhdCAxOC40MzIgTUh6IHRvIGluaXRpYXRlCisJICAgMi4gUmVzZXQgdGhlbiB0YWtlcyA2NiBXRFQgY3ljbGVzIGF0IDEwIGtIeiArIDE2IHh0YWwgY2xvY2sgY3ljbGVzCisJCSg2LDYwMSwwODUgbmFub3NlY29uZHMgfj0gNyBtaWxsaXNlY29uZHMpCisJICAgMy4gREJHIHBpbiBtdXN0IGJlIGhpZ2ggYmVmb3JlIGNoaXAgZXhpdHMgcmVzZXQgZm9yIG5vcm1hbCBvcGVyYXRpb24uCisJCURCRyBpcyBvcGVuIGRyYWluIGFuZCBob3BlZnVsbHkgcHVsbGVkIGhpZ2ggc2luY2Ugd2UgZG9uJ3QKKwkJbm9ybWFsbHkgZHJpdmUgaXQgKEdQSU8gMT8pIGZvciB0aGUgSFZSLTE2MDAKKwkgICA0LiBaOEYwODExIHdvbid0IGV4aXQgcmVzZXQgdW50aWwgUkVTRVQgaXMgZGVhc3NlcnRlZAorCSovCisJbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7CisJY3gtPmdwaW9fdmFsID0gY3gtPmdwaW9fdmFsICYgfnAtPmlyX3Jlc2V0X21hc2s7CisJZ3Bpb193cml0ZShjeCk7CisJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKHAtPm1zZWNzX2Fzc2VydGVkKSk7CisKKwkvKgorCSAgIFppbG9nIGNvbWVzIG91dCBvZiByZXNldCwgbG9hZHMgcmVzZXQgdmVjdG9yIGFkZHJlc3MgYW5kIGV4ZWN1dGVzCisJICAgZnJvbSB0aGVyZS4gUmVxdWlyZWQgcmVjb3ZlcnkgZGVsYXkgdW5rbm93bi4KKwkqLworCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOworCWN4LT5ncGlvX3ZhbCA9IGN4LT5ncGlvX3ZhbCB8IHAtPmlyX3Jlc2V0X21hc2s7CisJZ3Bpb193cml0ZShjeCk7CisJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKHAtPm1zZWNzX3JlY292ZXJ5KSk7Cit9CitFWFBPUlRfU1lNQk9MKGN4MThfcmVzZXRfaXJfZ3Bpbyk7CisvKiBUaGlzIHN5bWJvbCBpcyBleHBvcnRlZCBmb3IgdXNlIGJ5IGFuIGluZnJhcmVkIG1vZHVsZSBmb3IgdGhlIElSLWJsYXN0ZXIgKi8KKwogdm9pZCBjeDE4X2dwaW9faW5pdChzdHJ1Y3QgY3gxOCAqY3gpCiB7CisJbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7CiAJY3gtPmdwaW9fZGlyID0gY3gtPmNhcmQtPmdwaW9faW5pdC5kaXJlY3Rpb247CiAJY3gtPmdwaW9fdmFsID0gY3gtPmNhcmQtPmdwaW9faW5pdC5pbml0aWFsX3ZhbHVlOwogCkBAIC05MSwxNCArMTM1LDE3IEBACiAJCWN4LT5ncGlvX3ZhbCB8PSAxIDw8IGN4LT5jYXJkLT54Y2VpdmVfcGluOwogCX0KIAotCWlmIChjeC0+Z3Bpb19kaXIgPT0gMCkKKwlpZiAoY3gtPmdwaW9fZGlyID09IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKIAkJcmV0dXJuOworCX0KIAogCUNYMThfREVCVUdfSU5GTygiR1BJTyBpbml0aWFsIGRpcjogJTA4eC8lMDh4IG91dDogJTA4eC8lMDh4XG4iLAogCQkgICByZWFkX3JlZyhDWDE4X1JFR19HUElPX0RJUjEpLCByZWFkX3JlZyhDWDE4X1JFR19HUElPX0RJUjIpLAogCQkgICByZWFkX3JlZyhDWDE4X1JFR19HUElPX09VVDEpLCByZWFkX3JlZyhDWDE4X1JFR19HUElPX09VVDIpKTsKIAogCWdwaW9fd3JpdGUoY3gpOworCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CiB9CiAKIC8qIFhjZWl2ZSB0dW5lciByZXNldCBmdW5jdGlvbiAqLwpAQCAtMTEyLDEzICsxNTksNTIgQEAKIAkJcmV0dXJuIDA7CiAJQ1gxOF9ERUJVR19JTkZPKCJSZXNldHRpbmcgdHVuZXJcbiIpOwogCisJbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7CiAJY3gtPmdwaW9fdmFsICY9IH4oMSA8PCBjeC0+Y2FyZC0+eGNlaXZlX3Bpbik7Ci0KIAlncGlvX3dyaXRlKGN4KTsKKwltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwogCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEpKTsKIAorCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwogCWN4LT5ncGlvX3ZhbCB8PSAxIDw8IGN4LT5jYXJkLT54Y2VpdmVfcGluOwogCWdwaW9fd3JpdGUoY3gpOworCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CiAJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMSkpOwogCXJldHVybiAwOwogfQorCitpbnQgY3gxOF9ncGlvKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNvbW1hbmQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKKwl1MzIgbWFzaywgZGF0YTsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6CisJCWlmIChyb3V0ZS0+aW5wdXQgPiAyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1hc2sgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5tYXNrOworCQlzd2l0Y2ggKHJvdXRlLT5pbnB1dCkgeworCQljYXNlIDA6CisJCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQudHVuZXI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LmxpbmVpbjsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCWRlZmF1bHQ6CisJCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQucmFkaW87CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAobWFzaykgeworCQltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwkJY3gtPmdwaW9fdmFsID0gKGN4LT5ncGlvX3ZhbCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7CisJCWdwaW9fd3JpdGUoY3gpOworCQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaAppbmRleCA1MjVjMzI4Li4yMmNkN2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oCkBAIC0yMiw0ICsyMiw2IEBACiAKIHZvaWQgY3gxOF9ncGlvX2luaXQoc3RydWN0IGN4MTggKmN4KTsKIHZvaWQgY3gxOF9yZXNldF9pMmNfc2xhdmVzX2dwaW8oc3RydWN0IGN4MTggKmN4KTsKK3ZvaWQgY3gxOF9yZXNldF9pcl9ncGlvKHZvaWQgKmRhdGEpOwogaW50IGN4MThfcmVzZXRfdHVuZXJfZ3Bpbyh2b2lkICpkZXYsIGludCBjbWQsIGludCB2YWx1ZSk7CitpbnQgY3gxOF9ncGlvKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNvbW1hbmQsIHZvaWQgKmFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCmluZGV4IDY4MGJjNGUuLjYwMjNiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCkBAIC0zOSwxMCArMzksNiBAQAogI2RlZmluZSBHRVRTQ0xfQklUICAgICAgMHgwMDA0CiAjZGVmaW5lIEdFVFNETF9CSVQgICAgICAweDAwMDgKIAotI2lmbmRlZiBJMkNfQURBUF9DTEFTU19UVl9BTkFMT0cKLSNkZWZpbmUgSTJDX0FEQVBfQ0xBU1NfVFZfQU5BTE9HIEkyQ19DTEFTU19UVl9BTkFMT0cKLSNlbmRpZgotCiAjZGVmaW5lIENYMThfQ1M1MzQ1X0kyQ19BRERSCQkweDRjCiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBDWDE4X0hXXyBkZWZpbmVzICovCkBAIC0zMTEsOCArMzA3LDEyIEBACiB7CiAJaW50IGFkZHI7CiAKLQlpZiAoaHcgPT0gQ1gxOF9IV19HUElPIHx8IGh3ID09IDApCisJaWYgKGh3ID09IDApCiAJCXJldHVybiAwOworCisJaWYgKGh3ID09IENYMThfSFdfR1BJTykKKwkJcmV0dXJuIGN4MThfZ3BpbyhjeCwgY21kLCBhcmcpOworCiAJaWYgKGh3ID09IENYMThfSFdfQ1gyMzQxOCkKIAkJcmV0dXJuIGN4MThfYXZfY21kKGN4LCBjbWQsIGFyZyk7CiAKQEAgLTM1MCw2ICszNTAsOCBAQAogCWN4MThfYXZfY21kKGN4LCBjbWQsIGFyZyk7CiAJaTJjX2NsaWVudHNfY29tbWFuZCgmY3gtPmkyY19hZGFwWzBdLCBjbWQsIGFyZyk7CiAJaTJjX2NsaWVudHNfY29tbWFuZCgmY3gtPmkyY19hZGFwWzFdLCBjbWQsIGFyZyk7CisJaWYgKGN4LT5od19mbGFncyAmIENYMThfSFdfR1BJTykKKwkJY3gxOF9ncGlvKGN4LCBjbWQsIGFyZyk7CiB9CiAKIC8qIGluaXQgKyByZWdpc3RlciBpMmMgYWxnby1iaXQgYWRhcHRlciAqLwpAQCAtMzU4LDYgKzM2MCwxOCBAQAogCWludCBpOwogCUNYMThfREVCVUdfSTJDKCJpMmMgaW5pdFxuIik7CiAKKwkvKiBTYW5pdHkgY2hlY2tzIGZvciB0aGUgSTJDIGhhcmR3YXJlIGFycmF5cy4gVGhleSBtdXN0IGJlIHRoZQorCSAqIHNhbWUgc2l6ZSBhbmQgR1BJTy9DWDIzNDE4IG11c3QgYmUgdGhlIGxhc3QgZW50cmllcy4KKwkgKi8KKwlpZiAoQVJSQVlfU0laRShod19kcml2ZXJpZHMpICE9IEFSUkFZX1NJWkUoaHdfYWRkcnMpIHx8CisJICAgIEFSUkFZX1NJWkUoaHdfZGV2aWNlbmFtZXMpICE9IEFSUkFZX1NJWkUoaHdfYWRkcnMpIHx8CisJICAgIENYMThfSFdfR1BJTyAhPSAoMSA8PCAoQVJSQVlfU0laRShod19hZGRycykgLSAyKSkgfHwKKwkgICAgQ1gxOF9IV19DWDIzNDE4ICE9ICgxIDw8IChBUlJBWV9TSVpFKGh3X2FkZHJzKSAtIDEpKSB8fAorCSAgICBod19kcml2ZXJpZHNbQVJSQVlfU0laRShod19hZGRycykgLSAxXSkgeworCQlDWDE4X0VSUigiTWlzbWF0Y2hlZCBJMkMgaGFyZHdhcmUgYXJyYXlzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQltZW1jcHkoJmN4LT5pMmNfYWRhcFtpXSwgJmN4MThfaTJjX2FkYXBfdGVtcGxhdGUsCiAJCQlzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7CkBAIC0zOTEsNiArNDA1LDcgQEAKIAl3cml0ZV9yZWdfc3luYygweDAwYzAwMGMwLCAweGM3MDAxYyk7CiAJbWRlbGF5KDEwKTsKIAl3cml0ZV9yZWdfc3luYygweDAwYzAwMDAwLCAweGM3MDAxYyk7CisJbWRlbGF5KDEwKTsKIAogCXdyaXRlX3JlZ19zeW5jKDB4MDBjMDAwMDAsIDB4YzczMGM4KTsgLyogU2V0IHRvIGVkZ2UtdHJpZ2dlcmVkIGludHJzLiAqLwogCXdyaXRlX3JlZ19zeW5jKDB4MDBjMDAwMDAsIDB4YzczMGM0KTsgLyogQ2xlYXIgYW55IHN0YWxlIGludHJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwppbmRleCA0MTUxZjFlLi4wZDc0ZTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKQEAgLTEwMCwxOSArMTAwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfc2VydmljZV9zZXQoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCwgaW50IGlzX3BhbCkKLXsKLQlpbnQgZiwgbDsKLQl1MTYgc2V0ID0gMDsKLQotCWZvciAoZiA9IDA7IGYgPCAyOyBmKyspIHsKLQkJZm9yIChsID0gMDsgbCA8IDI0OyBsKyspIHsKLQkJCWZtdC0+c2VydmljZV9saW5lc1tmXVtsXSA9IHNlbGVjdF9zZXJ2aWNlX2Zyb21fc2V0KGYsIGwsIGZtdC0+c2VydmljZV9saW5lc1tmXVtsXSwgaXNfcGFsKTsKLQkJCXNldCB8PSBmbXQtPnNlcnZpY2VfbGluZXNbZl1bbF07Ci0JCX0KLQl9Ci0JcmV0dXJuIHNldCAhPSAwOwotfQogCiB1MTYgY3gxOF9nZXRfc2VydmljZV9zZXQoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCkKIHsKQEAgLTEyNiwzNSArMTEzLDE2NyBAQAogCXJldHVybiBzZXQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCXY0bDJfc3RkX2lkICBzdGQ7Ci0JY2hhciAgICAgICAgKm5hbWU7Ci19IGVudW1fc3Rkc1tdID0gewotCXsgVjRMMl9TVERfUEFMX0JHIHwgVjRMMl9TVERfUEFMX0gsICJQQUwtQkdIIiB9LAotCXsgVjRMMl9TVERfUEFMX0RLLCAgICAiUEFMLURLIiAgICB9LAotCXsgVjRMMl9TVERfUEFMX0ksICAgICAiUEFMLUkiICAgICB9LAotCXsgVjRMMl9TVERfUEFMX00sICAgICAiUEFMLU0iICAgICB9LAotCXsgVjRMMl9TVERfUEFMX04sICAgICAiUEFMLU4iICAgICB9LAotCXsgVjRMMl9TVERfUEFMX05jLCAgICAiUEFMLU5jIiAgICB9LAotCXsgVjRMMl9TVERfU0VDQU1fQiB8IFY0TDJfU1REX1NFQ0FNX0cgfCBWNEwyX1NURF9TRUNBTV9ILCAiU0VDQU0tQkdIIiB9LAotCXsgVjRMMl9TVERfU0VDQU1fREssICAiU0VDQU0tREsiICB9LAotCXsgVjRMMl9TVERfU0VDQU1fTCwgICAiU0VDQU0tTCIgICB9LAotCXsgVjRMMl9TVERfU0VDQU1fTEMsICAiU0VDQU0tTCciICB9LAotCXsgVjRMMl9TVERfTlRTQ19NLCAgICAiTlRTQy1NIiAgICB9LAotCXsgVjRMMl9TVERfTlRTQ19NX0pQLCAiTlRTQy1KIiAgICB9LAotCXsgVjRMMl9TVERfTlRTQ19NX0tSLCAiTlRTQy1LIiAgICB9LAotfTsKK3N0YXRpYyBpbnQgY3gxOF9nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQgPSAmZm10LT5mbXQucGl4OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3RhbmRhcmQgY3gxOF9zdGRfNjBoeiA9IHsKLQkuZnJhbWVwZXJpb2QgPSB7Lm51bWVyYXRvciA9IDEwMDEsIC5kZW5vbWluYXRvciA9IDMwMDAwfSwKLQkuZnJhbWVsaW5lcyA9IDUyNSwKLX07CisJcGl4Zm10LT53aWR0aCA9IGN4LT5wYXJhbXMud2lkdGg7CisJcGl4Zm10LT5oZWlnaHQgPSBjeC0+cGFyYW1zLmhlaWdodDsKKwlwaXhmbXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJcGl4Zm10LT5wcml2ID0gMDsKKwlpZiAoaWQtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWKSB7CisJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSE0xMjsKKwkJLyogWVVWIHNpemUgaXMgKFk9KGgqdykgKyBVVj0oaCoody8yKSkpICovCisJCXBpeGZtdC0+c2l6ZWltYWdlID0KKwkJCXBpeGZtdC0+aGVpZ2h0ICogcGl4Zm10LT53aWR0aCArCisJCQlwaXhmbXQtPmhlaWdodCAqIChwaXhmbXQtPndpZHRoIC8gMik7CisJCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gNzIwOworCX0gZWxzZSB7CisJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwkJcGl4Zm10LT5zaXplaW1hZ2UgPSAxMjggKiAxMDI0OworCQlwaXhmbXQtPmJ5dGVzcGVybGluZSA9IDA7CisJfQorCXJldHVybiAwOworfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3RhbmRhcmQgY3gxOF9zdGRfNTBoeiA9IHsKLQkuZnJhbWVwZXJpb2QgPSB7IC5udW1lcmF0b3IgPSAxLCAuZGVub21pbmF0b3IgPSAyNSB9LAotCS5mcmFtZWxpbmVzID0gNjI1LAotfTsKK3N0YXRpYyBpbnQgY3gxOF9nX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKnZiaWZtdCA9ICZmbXQtPmZtdC52Ymk7CiAKKwl2YmlmbXQtPnNhbXBsaW5nX3JhdGUgPSAyNzAwMDAwMDsKKwl2YmlmbXQtPm9mZnNldCA9IDI0ODsKKwl2YmlmbXQtPnNhbXBsZXNfcGVyX2xpbmUgPSBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZSAtIDQ7CisJdmJpZm10LT5zYW1wbGVfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0dSRVk7CisJdmJpZm10LT5zdGFydFswXSA9IGN4LT52Ymkuc3RhcnRbMF07CisJdmJpZm10LT5zdGFydFsxXSA9IGN4LT52Ymkuc3RhcnRbMV07CisJdmJpZm10LT5jb3VudFswXSA9IHZiaWZtdC0+Y291bnRbMV0gPSBjeC0+dmJpLmNvdW50OworCXZiaWZtdC0+ZmxhZ3MgPSAwOworCXZiaWZtdC0+cmVzZXJ2ZWRbMF0gPSAwOworCXZiaWZtdC0+cmVzZXJ2ZWRbMV0gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfZ19mbXRfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBjeDE4X3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CisKKwlpbnQgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKKwlpbnQgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CisKKwl3ID0gbWluKHcsIDcyMCk7CisJdyA9IG1heCh3LCAxKTsKKwloID0gbWluKGgsIGN4LT5pc181MGh6ID8gNTc2IDogNDgwKTsKKwloID0gbWF4KGgsIDIpOworCWN4MThfZ19mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKKwlmbXQtPmZtdC5waXgud2lkdGggPSB3OworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfdHJ5X2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlyZXR1cm4gY3gxOF9nX2ZtdF92YmlfY2FwKGZpbGUsIGZoLCBmbXQpOworfQorCitzdGF0aWMgaW50IGN4MThfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGN4MThfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CisJaW50IHJldDsKKwlpbnQgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKKwlpbnQgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CisKKwlyZXQgPSB2NGwyX3ByaW9fY2hlY2soJmN4LT5wcmlvLCAmaWQtPnByaW8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjeDE4X3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGN4LT5wYXJhbXMud2lkdGggPT0gdyAmJiBjeC0+cGFyYW1zLmhlaWdodCA9PSBoKQorCQlyZXR1cm4gMDsKKworCWlmIChhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWN4LT5wYXJhbXMud2lkdGggPSB3OworCWN4LT5wYXJhbXMuaGVpZ2h0ID0gaDsKKwljeDE4X2F2X2NtZChjeCwgVklESU9DX1NfRk1ULCBmbXQpOworCXJldHVybiBjeDE4X2dfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9zX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKKwlpbnQgcmV0OworCisJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjeC0+cHJpbywgJmlkLT5wcmlvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGlkLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJgorCQkJY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ICYmCisJCQlhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWN4LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCA9IDA7CisJY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0ZNVCwgJmN4LT52YmkuaW4pOworCXJldHVybiBjeDE4X2dfZm10X3ZiaV9jYXAoZmlsZSwgZmgsIGZtdCk7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9zX2ZtdF9zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGN4MThfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CisKKwljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKKwljaGlwLT5yZXZpc2lvbiA9IDA7CisJaWYgKGNoaXAtPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0hPU1QpIHsKKwkJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KGNoaXAtPm1hdGNoX3R5cGUsIGNoaXAtPm1hdGNoX2NoaXApKQorCQkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX0NYMjM0MTg7CisJCXJldHVybiAwOworCX0KKwlpZiAoY2hpcC0+bWF0Y2hfdHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUikKKwkJcmV0dXJuIGN4MThfaTJjX2lkKGN4LCBjaGlwLT5tYXRjaF9jaGlwLCBWSURJT0NfR19DSElQX0lERU5ULAorCQkJCQljaGlwKTsKKwlpZiAoY2hpcC0+bWF0Y2hfdHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIpCisJCXJldHVybiBjeDE4X2NhbGxfaTJjX2NsaWVudChjeCwgY2hpcC0+bWF0Y2hfY2hpcCwKKwkJCQkJCVZJRElPQ19HX0NISVBfSURFTlQsIGNoaXApOworCXJldHVybiAtRUlOVkFMOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogc3RhdGljIGludCBjeDE4X2N4YyhzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVncyA9IGFyZzsKQEAgLTE3NCw1NzAgKzI5Myw0NzMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDE4X2dldF9mbXQoc3RydWN0IGN4MTggKmN4LCBpbnQgc3RyZWFtdHlwZSwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCitzdGF0aWMgaW50IGN4MThfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKIHsKLQlzd2l0Y2ggKGZtdC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlmbXQtPmZtdC5waXgud2lkdGggPSBjeC0+cGFyYW1zLndpZHRoOwotCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gY3gtPnBhcmFtcy5oZWlnaHQ7Ci0JCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLQkJZm10LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQlpZiAoc3RyZWFtdHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKLQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ITTEyOwotCQkJLyogWVVWIHNpemUgaXMgKFk9KGgqdykgKyBVVj0oaCoody8yKSkpICovCi0JCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ICogZm10LT5mbXQucGl4LndpZHRoICsKLQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ICogKGZtdC0+Zm10LnBpeC53aWR0aCAvIDIpOwotCQl9IGVsc2UgewotCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7Ci0JCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gMTI4ICogMTAyNDsKLQkJfQotCQlicmVhazsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OwogCi0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgotCQlmbXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDI3MDAwMDAwOwotCQlmbXQtPmZtdC52Ymkub2Zmc2V0ID0gMjQ4OwotCQlmbXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IGN4LT52YmkucmF3X2RlY29kZXJfbGluZV9zaXplIC0gNDsKLQkJZm10LT5mbXQudmJpLnNhbXBsZV9mb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKLQkJZm10LT5mbXQudmJpLnN0YXJ0WzBdID0gY3gtPnZiaS5zdGFydFswXTsKLQkJZm10LT5mbXQudmJpLnN0YXJ0WzFdID0gY3gtPnZiaS5zdGFydFsxXTsKLQkJZm10LT5mbXQudmJpLmNvdW50WzBdID0gZm10LT5mbXQudmJpLmNvdW50WzFdID0gY3gtPnZiaS5jb3VudDsKLQkJYnJlYWs7CisJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KHJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKKwkJcmV0dXJuIGN4MThfY3hjKGN4LCBWSURJT0NfREJHX0dfUkVHSVNURVIsIHJlZyk7CisJaWYgKHJlZy0+bWF0Y2hfdHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUikKKwkJcmV0dXJuIGN4MThfaTJjX2lkKGN4LCByZWctPm1hdGNoX2NoaXAsIFZJRElPQ19EQkdfR19SRUdJU1RFUiwKKwkJCQkJcmVnKTsKKwlyZXR1cm4gY3gxOF9jYWxsX2kyY19jbGllbnQoY3gsIHJlZy0+bWF0Y2hfY2hpcCwgVklESU9DX0RCR19HX1JFR0lTVEVSLAorCQkJCQlyZWcpOworfQogCi0JY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQl7Ci0JCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQuc2xpY2VkOworc3RhdGljIGludCBjeDE4X3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKIAotCQl2YmlmbXQtPmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKSAqIDM2OwotCQltZW1zZXQodmJpZm10LT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHZiaWZtdC0+cmVzZXJ2ZWQpKTsKLQkJbWVtc2V0KHZiaWZtdC0+c2VydmljZV9saW5lcywgMCwgc2l6ZW9mKHZiaWZtdC0+c2VydmljZV9saW5lcykpOworCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCisJCXJldHVybiBjeDE4X2N4YyhjeCwgVklESU9DX0RCR19TX1JFR0lTVEVSLCByZWcpOworCWlmIChyZWctPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIpCisJCXJldHVybiBjeDE4X2kyY19pZChjeCwgcmVnLT5tYXRjaF9jaGlwLCBWSURJT0NfREJHX1NfUkVHSVNURVIsCisJCQkJCXJlZyk7CisJcmV0dXJuIGN4MThfY2FsbF9pMmNfY2xpZW50KGN4LCByZWctPm1hdGNoX2NoaXAsIFZJRElPQ19EQkdfU19SRUdJU1RFUiwKKwkJCQkJcmVnKTsKK30KKyNlbmRpZgogCi0JCWN4MThfYXZfY21kKGN4LCBWSURJT0NfR19GTVQsIGZtdCk7Ci0JCXZiaWZtdC0+c2VydmljZV9zZXQgPSBjeDE4X2dldF9zZXJ2aWNlX3NldCh2YmlmbXQpOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorc3RhdGljIGludCBjeDE4X2dfcHJpb3JpdHkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBlbnVtIHY0bDJfcHJpb3JpdHkgKnApCit7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKworCSpwID0gdjRsMl9wcmlvX21heCgmY3gtPnByaW8pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MThfdHJ5X29yX3NldF9mbXQoc3RydWN0IGN4MTggKmN4LCBpbnQgc3RyZWFtdHlwZSwKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsIGludCBzZXRfZm10KQorc3RhdGljIGludCBjeDE4X3NfcHJpb3JpdHkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBlbnVtIHY0bDJfcHJpb3JpdHkgcHJpbykKIHsKLQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKLQl1MTYgc2V0OwotCi0JLyogc2V0IHdpbmRvdyBzaXplICovCi0JaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJaW50IHcgPSBmbXQtPmZtdC5waXgud2lkdGg7Ci0JCWludCBoID0gZm10LT5mbXQucGl4LmhlaWdodDsKLQotCQlpZiAodyA+IDcyMCkKLQkJCXcgPSA3MjA7Ci0JCWVsc2UgaWYgKHcgPCAxKQotCQkJdyA9IDE7Ci0JCWlmIChoID4gKGN4LT5pc181MGh6ID8gNTc2IDogNDgwKSkKLQkJCWggPSAoY3gtPmlzXzUwaHogPyA1NzYgOiA0ODApOwotCQllbHNlIGlmIChoIDwgMikKLQkJCWggPSAyOwotCQljeDE4X2dldF9mbXQoY3gsIHN0cmVhbXR5cGUsIGZtdCk7Ci0JCWZtdC0+Zm10LnBpeC53aWR0aCA9IHc7Ci0JCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoOwotCi0JCWlmICghc2V0X2ZtdCB8fCAoY3gtPnBhcmFtcy53aWR0aCA9PSB3ICYmIGN4LT5wYXJhbXMuaGVpZ2h0ID09IGgpKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKLQkJCXJldHVybiAtRUJVU1k7Ci0KLQkJY3gtPnBhcmFtcy53aWR0aCA9IHc7Ci0JCWN4LT5wYXJhbXMuaGVpZ2h0ID0gaDsKLQkJaWYgKHcgIT0gNzIwIHx8IGggIT0gKGN4LT5pc181MGh6ID8gNTc2IDogNDgwKSkKLQkJCWN4LT5wYXJhbXMudmlkZW9fdGVtcG9yYWxfZmlsdGVyID0gMDsKLQkJZWxzZQotCQkJY3gtPnBhcmFtcy52aWRlb190ZW1wb3JhbF9maWx0ZXIgPSA4OwotCQljeDE4X2F2X2NtZChjeCwgVklESU9DX1NfRk1ULCBmbXQpOwotCQlyZXR1cm4gY3gxOF9nZXRfZm10KGN4LCBzdHJlYW10eXBlLCBmbXQpOwotCX0KLQotCS8qIHNldCByYXcgVkJJIGZvcm1hdCAqLwotCWlmIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgewotCQlpZiAoc2V0X2ZtdCAmJiBzdHJlYW10eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJgotCQkgICAgY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ICYmCi0JCSAgICBhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKLQkJCXJldHVybiAtRUJVU1k7Ci0JCWlmIChzZXRfZm10KSB7Ci0JCQljeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPSAwOwotCQkJY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0ZNVCwgJmN4LT52YmkuaW4pOwotCQl9Ci0JCXJldHVybiBjeDE4X2dldF9mbXQoY3gsIHN0cmVhbXR5cGUsIGZtdCk7Ci0JfQotCi0JLyogYW55IGVsc2UgYnV0IHNsaWNlZCBWQkkgY2FwdHVyZSBpcyBhbiBlcnJvciAqLwotCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogVE9ETzogaW1wbGVtZW50IHNsaWNlZCBWQkksIGZvciBub3cgc2lsZW50bHkgcmV0dXJuIDAgKi8KLQlyZXR1cm4gMDsKLQotCS8qIHNldCBzbGljZWQgVkJJIGNhcHR1cmUgZm9ybWF0ICovCi0JdmJpZm10LT5pb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSkgKiAzNjsKLQltZW1zZXQodmJpZm10LT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHZiaWZtdC0+cmVzZXJ2ZWQpKTsKLQotCWlmICh2YmlmbXQtPnNlcnZpY2Vfc2V0KQotCQljeDE4X2V4cGFuZF9zZXJ2aWNlX3NldCh2YmlmbXQsIGN4LT5pc181MGh6KTsKLQlzZXQgPSBjaGVja19zZXJ2aWNlX3NldCh2YmlmbXQsIGN4LT5pc181MGh6KTsKLQl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gY3gxOF9nZXRfc2VydmljZV9zZXQodmJpZm10KTsKLQotCWlmICghc2V0X2ZtdCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHNldCA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSA+IDAgJiYgY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ID09IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0ZNVCwgZm10KTsKLQltZW1jcHkoY3gtPnZiaS5zbGljZWRfaW4sIHZiaWZtdCwgc2l6ZW9mKCpjeC0+dmJpLnNsaWNlZF9pbikpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGN4MThfZGVidWdfaW9jdGxzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSAoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOwogCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKLQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOworCisJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoJmN4LT5wcmlvLCAmaWQtPnByaW8sIHByaW8pOworfQorCitzdGF0aWMgaW50IGN4MThfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnZjYXApCit7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKworCXN0cmxjcHkodmNhcC0+ZHJpdmVyLCBDWDE4X0RSSVZFUl9OQU1FLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7CisJc3RybGNweSh2Y2FwLT5jYXJkLCBjeC0+Y2FyZF9uYW1lLCBzaXplb2YodmNhcC0+Y2FyZCkpOworCXN0cmxjcHkodmNhcC0+YnVzX2luZm8sIHBjaV9uYW1lKGN4LT5kZXYpLCBzaXplb2YodmNhcC0+YnVzX2luZm8pKTsKKwl2Y2FwLT52ZXJzaW9uID0gQ1gxOF9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCisJdmNhcC0+Y2FwYWJpbGl0aWVzID0gY3gtPnY0bDJfY2FwOyAJICAgIC8qIGNhcGFiaWxpdGllcyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfZW51bWF1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKnZpbikKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCisJcmV0dXJuIGN4MThfZ2V0X2F1ZGlvX2lucHV0KGN4LCB2aW4tPmluZGV4LCB2aW4pOworfQorCitzdGF0aWMgaW50IGN4MThfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICp2aW4pCit7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKworCXZpbi0+aW5kZXggPSBjeC0+YXVkaW9faW5wdXQ7CisJcmV0dXJuIGN4MThfZ2V0X2F1ZGlvX2lucHV0KGN4LCB2aW4tPmluZGV4LCB2aW4pOworfQorCitzdGF0aWMgaW50IGN4MThfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICp2b3V0KQoreworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CisKKwlpZiAodm91dC0+aW5kZXggPj0gY3gtPm5vZl9hdWRpb19pbnB1dHMpCisJCXJldHVybiAtRUlOVkFMOworCWN4LT5hdWRpb19pbnB1dCA9IHZvdXQtPmluZGV4OworCWN4MThfYXVkaW9fc2V0X2lvKGN4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqdmluKQoreworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CisKKwkvKiBzZXQgaXQgdG8gZGVmYXVsdHMgZnJvbSBvdXIgdGFibGUgKi8KKwlyZXR1cm4gY3gxOF9nZXRfaW5wdXQoY3gsIHZpbi0+aW5kZXgsIHZpbik7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXApCit7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKworCWlmIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IGNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwljcm9wY2FwLT5ib3VuZHMud2lkdGggPSA3MjA7CisJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IGN4LT5pc181MGh6ID8gNTc2IDogNDgwOworCWNyb3BjYXAtPnBpeGVsYXNwZWN0Lm51bWVyYXRvciA9IGN4LT5pc181MGh6ID8gNTkgOiAxMDsKKwljcm9wY2FwLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IGN4LT5pc181MGh6ID8gNTQgOiAxMTsKKwljcm9wY2FwLT5kZWZyZWN0ID0gY3JvcGNhcC0+Ym91bmRzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfc19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCkKK3sKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKKwlpbnQgcmV0OworCisJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjeC0+cHJpbywgJmlkLT5wcmlvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0NST1AsIGNyb3ApOworfQorCitzdGF0aWMgaW50IGN4MThfZ19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCisJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19HX0NST1AsIGNyb3ApOworfQorCitzdGF0aWMgaW50IGN4MThfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKK3sKKwlzdGF0aWMgc3RydWN0IHY0bDJfZm10ZGVzYyBmb3JtYXRzW10gPSB7CisJCXsgMCwgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLCAwLAorCQkgICJITTEyIChZVVYgNDoxOjEpIiwgVjRMMl9QSVhfRk1UX0hNMTIsIHsgMCwgMCwgMCwgMCB9CisJCX0sCisJCXsgMSwgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLCBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQsCisJCSAgIk1QRUciLCBWNEwyX1BJWF9GTVRfTVBFRywgeyAwLCAwLCAwLCAwIH0KKwkJfQorCX07CisKKwlpZiAoZm10LT5pbmRleCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCSpmbXQgPSBmb3JtYXRzW2ZtdC0+aW5kZXhdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCAqaSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCisJKmkgPSBjeC0+YWN0aXZlX2lucHV0OworCXJldHVybiAwOworfQorCitpbnQgY3gxOF9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucCkKK3sKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKKwlpbnQgcmV0OworCisJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjeC0+cHJpbywgJmlkLT5wcmlvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGlucCA8IDAgfHwgaW5wID49IGN4LT5ub2ZfaW5wdXRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpbnAgPT0gY3gtPmFjdGl2ZV9pbnB1dCkgeworCQlDWDE4X0RFQlVHX0lORk8oIklucHV0IHVuY2hhbmdlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCUNYMThfREVCVUdfSU5GTygiQ2hhbmdpbmcgaW5wdXQgZnJvbSAlZCB0byAlZFxuIiwKKwkJCWN4LT5hY3RpdmVfaW5wdXQsIGlucCk7CisKKwljeC0+YWN0aXZlX2lucHV0ID0gaW5wOworCS8qIFNldCB0aGUgYXVkaW8gaW5wdXQgdG8gd2hhdGV2ZXIgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBpbnB1dCB0eXBlLiAqLworCWN4LT5hdWRpb19pbnB1dCA9IGN4LT5jYXJkLT52aWRlb19pbnB1dHNbaW5wXS5hdWRpb19pbmRleDsKKworCS8qIHByZXZlbnQgb3RoZXJzIGZyb20gbWVzc2luZyB3aXRoIHRoZSBzdHJlYW1zIHVudGlsCisJICAgd2UncmUgZmluaXNoZWQgY2hhbmdpbmcgaW5wdXRzLiAqLworCWN4MThfbXV0ZShjeCk7CisJY3gxOF92aWRlb19zZXRfaW8oY3gpOworCWN4MThfYXVkaW9fc2V0X2lvKGN4KTsKKwljeDE4X3VubXV0ZShjeCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICp2ZikKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCisJaWYgKHZmLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX0dfRlJFUVVFTkNZLCB2Zik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjeDE4X3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICp2ZikKK3sKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKKwlpbnQgcmV0OworCisJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjeC0+cHJpbywgJmlkLT5wcmlvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHZmLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4MThfbXV0ZShjeCk7CisJQ1gxOF9ERUJVR19JTkZPKCJ2NGwyIGlvY3RsOiBzZXQgZnJlcXVlbmN5ICVkXG4iLCB2Zi0+ZnJlcXVlbmN5KTsKKwljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19TX0ZSRVFVRU5DWSwgdmYpOworCWN4MThfdW5tdXRlKGN4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCisJKnN0ZCA9IGN4LT5zdGQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjeDE4X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKKwlpbnQgcmV0OworCisJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjeC0+cHJpbywgJmlkLT5wcmlvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCgqc3RkICYgVjRMMl9TVERfQUxMKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgqc3RkID09IGN4LT5zdGQpCisJCXJldHVybiAwOworCisJaWYgKHRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykgfHwKKwkgICAgYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSA+IDApIHsKKwkJLyogU3dpdGNoaW5nIHN0YW5kYXJkIHdvdWxkIHR1cm4gb2ZmIHRoZSByYWRpbyBvciBtZXNzCisJCSAgIHdpdGggYWxyZWFkeSBydW5uaW5nIHN0cmVhbXMsIHByZXZlbnQgdGhhdCBieQorCQkgICByZXR1cm5pbmcgRUJVU1kuICovCisJCXJldHVybiAtRUJVU1k7CisJfQorCisJY3gtPnN0ZCA9ICpzdGQ7CisJY3gtPmlzXzYwaHogPSAoKnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAxIDogMDsKKwljeC0+cGFyYW1zLmlzXzUwaHogPSBjeC0+aXNfNTBoeiA9ICFjeC0+aXNfNjBoejsKKwljeC0+cGFyYW1zLndpZHRoID0gNzIwOworCWN4LT5wYXJhbXMuaGVpZ2h0ID0gY3gtPmlzXzUwaHogPyA1NzYgOiA0ODA7CisJY3gtPnZiaS5jb3VudCA9IGN4LT5pc181MGh6ID8gMTggOiAxMjsKKwljeC0+dmJpLnN0YXJ0WzBdID0gY3gtPmlzXzUwaHogPyA2IDogMTA7CisJY3gtPnZiaS5zdGFydFsxXSA9IGN4LT5pc181MGh6ID8gMzE4IDogMjczOworCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfbGluZV9zaXplID0gY3gtPmlzXzYwaHogPyAyNzIgOiAyODQ7CisJQ1gxOF9ERUJVR19JTkZPKCJTd2l0Y2hpbmcgc3RhbmRhcmQgdG8gJWxseC5cbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBjeC0+c3RkKTsKKworCS8qIFR1bmVyICovCisJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfU19TVEQsICZjeC0+c3RkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CisJaW50IHJldDsKKworCXJldCA9IHY0bDJfcHJpb19jaGVjaygmY3gtPnByaW8sICZpZC0+cHJpbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh2dC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXR0aW5nIHR1bmVyIGNhbiBvbmx5IHNldCBhdWRpbyBtb2RlICovCisJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfU19UVU5FUiwgdnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CisKKwlpZiAodnQtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfR19UVU5FUiwgdnQpOworCisJaWYgKHRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykpIHsKKwkJc3RybGNweSh2dC0+bmFtZSwgImN4MTggUmFkaW8gVHVuZXIiLCBzaXplb2YodnQtPm5hbWUpKTsKKwkJdnQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCX0gZWxzZSB7CisJCXN0cmxjcHkodnQtPm5hbWUsICJjeDE4IFRWIFR1bmVyIiwgc2l6ZW9mKHZ0LT5uYW1lKSk7CisJCXZ0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9nX3NsaWNlZF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKmNhcCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBjeDE4X2dfZW5jX2luZGV4KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9lbmNfaWR4ICppZHgpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9lbmNvZGVyX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQgKmVuYykKK3sKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKKworCXN3aXRjaCAoZW5jLT5jbWQpIHsKKwljYXNlIFY0TDJfRU5DX0NNRF9TVEFSVDoKKwkJQ1gxOF9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1NUQVJUXG4iKTsKKwkJZW5jLT5mbGFncyA9IDA7CisJCXJldHVybiBjeDE4X3N0YXJ0X2NhcHR1cmUoaWQpOworCisJY2FzZSBWNEwyX0VOQ19DTURfU1RPUDoKKwkJQ1gxOF9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1NUT1BcbiIpOworCQllbmMtPmZsYWdzICY9IFY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQ7CisJCWN4MThfc3RvcF9jYXB0dXJlKGlkLAorCQkJCSAgZW5jLT5mbGFncyAmIFY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQpOworCQlicmVhazsKKworCWNhc2UgVjRMMl9FTkNfQ01EX1BBVVNFOgorCQlDWDE4X0RFQlVHX0lPQ1RMKCJWNEwyX0VOQ19DTURfUEFVU0VcbiIpOworCQllbmMtPmZsYWdzID0gMDsKKwkJaWYgKCFhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX0lfRU5DX1BBVVNFRCwgJmN4LT5pX2ZsYWdzKSkKKwkJCXJldHVybiAwOworCQljeDE4X211dGUoY3gpOworCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0NBUFRVUkVfUEFVU0UsIDEsIGN4MThfZmluZF9oYW5kbGUoY3gpKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfRU5DX0NNRF9SRVNVTUU6CisJCUNYMThfREVCVUdfSU9DVEwoIlY0TDJfRU5DX0NNRF9SRVNVTUVcbiIpOworCQllbmMtPmZsYWdzID0gMDsKKwkJaWYgKCFhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoQ1gxOF9GX0lfRU5DX1BBVVNFRCwgJmN4LT5pX2ZsYWdzKSkKKwkJCXJldHVybiAwOworCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0NBUFRVUkVfUkVTVU1FLCAxLCBjeDE4X2ZpbmRfaGFuZGxlKGN4KSk7CisJCWN4MThfdW5tdXRlKGN4KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlDWDE4X0RFQlVHX0lPQ1RMKCJVbmtub3duIGNtZCAlZFxuIiwgZW5jLT5jbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF90cnlfZW5jb2Rlcl9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX2VuY29kZXJfY21kICplbmMpCit7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKworCXN3aXRjaCAoZW5jLT5jbWQpIHsKKwljYXNlIFY0TDJfRU5DX0NNRF9TVEFSVDoKKwkJQ1gxOF9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1NUQVJUXG4iKTsKKwkJZW5jLT5mbGFncyA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0VOQ19DTURfU1RPUDoKKwkJQ1gxOF9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1NUT1BcbiIpOworCQllbmMtPmZsYWdzICY9IFY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQ7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0VOQ19DTURfUEFVU0U6CisJCUNYMThfREVCVUdfSU9DVEwoIlY0TDJfRU5DX0NNRF9QQVVTRVxuIik7CisJCWVuYy0+ZmxhZ3MgPSAwOworCQlicmVhazsKKworCWNhc2UgVjRMMl9FTkNfQ01EX1JFU1VNRToKKwkJQ1gxOF9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1JFU1VNRVxuIik7CisJCWVuYy0+ZmxhZ3MgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUNYMThfREVCVUdfSU9DVEwoIlVua25vd24gY21kICVkXG4iLCBlbmMtPmNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoKQoreworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CisJc3RydWN0IHY0bDJfaW5wdXQgdmlkaW47CisJc3RydWN0IHY0bDJfYXVkaW8gYXVkaW47CisJaW50IGk7CisKKwlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09ICBTVEFSVCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09XG4iLCBjeC0+bnVtKTsKKwlpZiAoY3gtPmh3X2ZsYWdzICYgQ1gxOF9IV19UVkVFUFJPTSkgeworCQlzdHJ1Y3QgdHZlZXByb20gdHY7CisKKwkJY3gxOF9yZWFkX2VlcHJvbShjeCwgJnR2KTsKKwl9CisJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfTE9HX1NUQVRVUywgTlVMTCk7CisJY3gxOF9nZXRfaW5wdXQoY3gsIGN4LT5hY3RpdmVfaW5wdXQsICZ2aWRpbik7CisJY3gxOF9nZXRfYXVkaW9faW5wdXQoY3gsIGN4LT5hdWRpb19pbnB1dCwgJmF1ZGluKTsKKwlDWDE4X0lORk8oIlZpZGVvIElucHV0OiAlc1xuIiwgdmlkaW4ubmFtZSk7CisJQ1gxOF9JTkZPKCJBdWRpbyBJbnB1dDogJXNcbiIsIGF1ZGluLm5hbWUpOworCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOworCUNYMThfSU5GTygiR1BJTzogIGRpcmVjdGlvbiAweCUwOHgsIHZhbHVlIDB4JTA4eFxuIiwKKwkJY3gtPmdwaW9fZGlyLCBjeC0+Z3Bpb192YWwpOworCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CisJQ1gxOF9JTkZPKCJUdW5lcjogJXNcbiIsCisJCXRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykgPyAgIlJhZGlvIiA6ICJUViIpOworCWN4MjM0MXhfbG9nX3N0YXR1cygmY3gtPnBhcmFtcywgY3gtPm5hbWUpOworCUNYMThfSU5GTygiU3RhdHVzIGZsYWdzOiAweCUwOGx4XG4iLCBjeC0+aV9mbGFncyk7CisJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX1NUUkVBTVM7IGkrKykgeworCQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaV07CisKKwkJaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCisJCQljb250aW51ZTsKKwkJQ1gxOF9JTkZPKCJTdHJlYW0gJXM6IHN0YXR1cyAweCUwNGx4LCAlZCUlIG9mICVkIEtpQiAoJWQgYnVmZmVycykgaW4gdXNlXG4iLAorCQkJICBzLT5uYW1lLCBzLT5zX2ZsYWdzLAorCQkJICAocy0+YnVmZmVycyAtIHMtPnFfZnJlZS5idWZmZXJzKSAqIDEwMCAvIHMtPmJ1ZmZlcnMsCisJCQkgIChzLT5idWZmZXJzICogcy0+YnVmX3NpemUpIC8gMTAyNCwgcy0+YnVmZmVycyk7CisJfQorCUNYMThfSU5GTygiUmVhZCBNUEVHL1ZCSTogJWxsZC8lbGxkIGJ5dGVzXG4iLAorCQkJKGxvbmcgbG9uZyljeC0+bXBnX2RhdGFfcmVjZWl2ZWQsCisJCQkobG9uZyBsb25nKWN4LT52YmlfZGF0YV9pbnNlcnRlZCk7CisJQ1gxOF9JTkZPKCI9PT09PT09PT09PT09PT09PT0gIEVORCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09PVxuIiwgY3gtPm51bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9kZWZhdWx0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CiAKIAlzd2l0Y2ggKGNtZCkgewotCS8qIGlvY3RscyB0byBhbGxvdyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBlbmNvZGVyIHJlZ2lzdGVycyBmb3IgdGVzdGluZyAqLwotCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgotCQlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QocmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQotCQkJcmV0dXJuIGN4MThfY3hjKGN4LCBjbWQsIGFyZyk7Ci0JCWlmIChyZWctPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIpCi0JCQlyZXR1cm4gY3gxOF9pMmNfaWQoY3gsIHJlZy0+bWF0Y2hfY2hpcCwgY21kLCBhcmcpOwotCQlyZXR1cm4gY3gxOF9jYWxsX2kyY19jbGllbnQoY3gsIHJlZy0+bWF0Y2hfY2hpcCwgY21kLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6Ci0JCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gY3gxOF9jeGMoY3gsIGNtZCwgYXJnKTsKLQkJaWYgKHJlZy0+bWF0Y2hfdHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUikKLQkJCXJldHVybiBjeDE4X2kyY19pZChjeCwgcmVnLT5tYXRjaF9jaGlwLCBjbWQsIGFyZyk7Ci0JCXJldHVybiBjeDE4X2NhbGxfaTJjX2NsaWVudChjeCwgcmVnLT5tYXRjaF9jaGlwLCBjbWQsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19HX0NISVBfSURFTlQ6IHsKLQkJc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCA9IGFyZzsKLQotCQljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKLQkJY2hpcC0+cmV2aXNpb24gPSAwOwotCQlpZiAocmVnLT5tYXRjaF90eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9IT1NUKSB7Ci0JCQlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QocmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKSB7Ci0JCQkJc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCA9IGFyZzsKLQotCQkJCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9DWDIzNDE4OwotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYgKHJlZy0+bWF0Y2hfdHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUikKLQkJCXJldHVybiBjeDE4X2kyY19pZChjeCwgcmVnLT5tYXRjaF9jaGlwLCBjbWQsIGFyZyk7Ci0JCWlmIChyZWctPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQotCQkJcmV0dXJuIGN4MThfY2FsbF9pMmNfY2xpZW50KGN4LCByZWctPm1hdGNoX2NoaXAsIGNtZCwgYXJnKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzogewogCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKIAorCQlDWDE4X0RFQlVHX0lPQ1RMKCJWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyglZCwgJWQpXG4iLAorCQkJcm91dGUtPmlucHV0LCByb3V0ZS0+b3V0cHV0KTsKIAkJY3gxOF9hdWRpb19zZXRfcm91dGUoY3gsIHJvdXRlKTsKIAkJYnJlYWs7CiAJfQogCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQorCWNhc2UgVklESU9DX0lOVF9SRVNFVDogeworCQl1MzIgdmFsID0gKih1MzIgKilhcmc7CiAKLWludCBjeDE4X3Y0bDJfaW9jdGxzKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBjeDE4X29wZW5faWQgKmlkID0gTlVMTDsKLQotCWlmIChmaWxwKQotCQlpZCA9IChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmlscC0+cHJpdmF0ZV9kYXRhOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19HX1BSSU9SSVRZOgotCXsKLQkJZW51bSB2NGwyX3ByaW9yaXR5ICpwID0gYXJnOwotCi0JCSpwID0gdjRsMl9wcmlvX21heCgmY3gtPnByaW8pOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19TX1BSSU9SSVRZOgotCXsKLQkJZW51bSB2NGwyX3ByaW9yaXR5ICpwcmlvID0gYXJnOwotCi0JCXJldHVybiB2NGwyX3ByaW9fY2hhbmdlKCZjeC0+cHJpbywgJmlkLT5wcmlvLCAqcHJpbyk7Ci0JfQotCi0JY2FzZSBWSURJT0NfUVVFUllDQVA6ewotCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2Y2FwID0gYXJnOwotCi0JCW1lbXNldCh2Y2FwLCAwLCBzaXplb2YoKnZjYXApKTsKLQkJc3RybGNweSh2Y2FwLT5kcml2ZXIsIENYMThfRFJJVkVSX05BTUUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKLQkJc3RybGNweSh2Y2FwLT5jYXJkLCBjeC0+Y2FyZF9uYW1lLCBzaXplb2YodmNhcC0+Y2FyZCkpOwotCQlzdHJsY3B5KHZjYXAtPmJ1c19pbmZvLCBwY2lfbmFtZShjeC0+ZGV2KSwgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSk7Ci0JCXZjYXAtPnZlcnNpb24gPSBDWDE4X0RSSVZFUl9WRVJTSU9OOyAJICAgIC8qIHZlcnNpb24gKi8KLQkJdmNhcC0+Y2FwYWJpbGl0aWVzID0gY3gtPnY0bDJfY2FwOyAJICAgIC8qIGNhcGFiaWxpdGllcyAqLwotCi0JCS8qIHJlc2VydmVkLi4gbXVzdCBzZXQgdG8gMCEgKi8KLQkJdmNhcC0+cmVzZXJ2ZWRbMF0gPSB2Y2FwLT5yZXNlcnZlZFsxXSA9Ci0JCQl2Y2FwLT5yZXNlcnZlZFsyXSA9IHZjYXAtPnJlc2VydmVkWzNdID0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfRU5VTUFVRElPOnsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKnZpbiA9IGFyZzsKLQotCQlyZXR1cm4gY3gxOF9nZXRfYXVkaW9faW5wdXQoY3gsIHZpbi0+aW5kZXgsIHZpbik7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19BVURJTzp7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICp2aW4gPSBhcmc7Ci0KLQkJdmluLT5pbmRleCA9IGN4LT5hdWRpb19pbnB1dDsKLQkJcmV0dXJuIGN4MThfZ2V0X2F1ZGlvX2lucHV0KGN4LCB2aW4tPmluZGV4LCB2aW4pOwotCX0KLQotCWNhc2UgVklESU9DX1NfQVVESU86ewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqdm91dCA9IGFyZzsKLQotCQlpZiAodm91dC0+aW5kZXggPj0gY3gtPm5vZl9hdWRpb19pbnB1dHMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY3gtPmF1ZGlvX2lucHV0ID0gdm91dC0+aW5kZXg7Ci0JCWN4MThfYXVkaW9fc2V0X2lvKGN4KTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOnsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKnZpbiA9IGFyZzsKLQotCQkvKiBzZXQgaXQgdG8gZGVmYXVsdHMgZnJvbSBvdXIgdGFibGUgKi8KLQkJcmV0dXJuIGN4MThfZ2V0X2lucHV0KGN4LCB2aW4tPmluZGV4LCB2aW4pOwotCX0KLQotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JY2FzZSBWSURJT0NfU19GTVQ6IHsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7Ci0KLQkJcmV0dXJuIGN4MThfdHJ5X29yX3NldF9mbXQoY3gsIGlkLT50eXBlLCBmbXQsIGNtZCA9PSBWSURJT0NfU19GTVQpOwotCX0KLQotCWNhc2UgVklESU9DX0dfRk1UOiB7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgdHlwZSA9IGZtdC0+dHlwZTsKLQotCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOwotCQlmbXQtPnR5cGUgPSB0eXBlOwotCQlyZXR1cm4gY3gxOF9nZXRfZm10KGN4LCBpZC0+dHlwZSwgZm10KTsKLQl9Ci0KLQljYXNlIFZJRElPQ19DUk9QQ0FQOiB7Ci0JCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXAgPSBhcmc7Ci0KLQkJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWNyb3BjYXAtPmJvdW5kcy50b3AgPSBjcm9wY2FwLT5ib3VuZHMubGVmdCA9IDA7Ci0JCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IDcyMDsKLQkJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IGN4LT5pc181MGh6ID8gNTc2IDogNDgwOwotCQljcm9wY2FwLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSBjeC0+aXNfNTBoeiA/IDU5IDogMTA7Ci0JCWNyb3BjYXAtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yID0gY3gtPmlzXzUwaHogPyA1NCA6IDExOwotCQljcm9wY2FwLT5kZWZyZWN0ID0gY3JvcGNhcC0+Ym91bmRzOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFZJRElPQ19TX0NST1A6IHsKLQkJc3RydWN0IHY0bDJfY3JvcCAqY3JvcCA9IGFyZzsKLQotCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIGN4MThfYXZfY21kKGN4LCBWSURJT0NfU19DUk9QLCBhcmcpOwotCX0KLQotCWNhc2UgVklESU9DX0dfQ1JPUDogewotCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gYXJnOwotCi0JCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19HX0NST1AsIGFyZyk7Ci0JfQotCi0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6IHsKLQkJc3RhdGljIHN0cnVjdCB2NGwyX2ZtdGRlc2MgZm9ybWF0c1tdID0gewotCQkJeyAwLCAwLCAwLAotCQkJICAiSE0xMiAoWVVWIDQ6MToxKSIsIFY0TDJfUElYX0ZNVF9ITTEyLAotCQkJICB7IDAsIDAsIDAsIDAgfQotCQkJfSwKLQkJCXsgMSwgMCwgVjRMMl9GTVRfRkxBR19DT01QUkVTU0VELAotCQkJICAiTVBFRyIsIFY0TDJfUElYX0ZNVF9NUEVHLAotCQkJICB7IDAsIDAsIDAsIDAgfQotCQkJfQotCQl9OwotCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQgPSBhcmc7Ci0JCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gZm10LT50eXBlOwotCi0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKGZtdC0+aW5kZXggPiAxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCSpmbXQgPSBmb3JtYXRzW2ZtdC0+aW5kZXhdOwotCQlmbXQtPnR5cGUgPSB0eXBlOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX0lOUFVUOnsKLQkJKihpbnQgKilhcmcgPSBjeC0+YWN0aXZlX2lucHV0OwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19TX0lOUFVUOnsKLQkJaW50IGlucCA9ICooaW50ICopYXJnOwotCi0JCWlmIChpbnAgPCAwIHx8IGlucCA+PSBjeC0+bm9mX2lucHV0cykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChpbnAgPT0gY3gtPmFjdGl2ZV9pbnB1dCkgewotCQkJQ1gxOF9ERUJVR19JTkZPKCJJbnB1dCB1bmNoYW5nZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJQ1gxOF9ERUJVR19JTkZPKCJDaGFuZ2luZyBpbnB1dCBmcm9tICVkIHRvICVkXG4iLAotCQkJCWN4LT5hY3RpdmVfaW5wdXQsIGlucCk7Ci0KLQkJY3gtPmFjdGl2ZV9pbnB1dCA9IGlucDsKLQkJLyogU2V0IHRoZSBhdWRpbyBpbnB1dCB0byB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlCi0JCSAgIGlucHV0IHR5cGUuICovCi0JCWN4LT5hdWRpb19pbnB1dCA9IGN4LT5jYXJkLT52aWRlb19pbnB1dHNbaW5wXS5hdWRpb19pbmRleDsKLQotCQkvKiBwcmV2ZW50IG90aGVycyBmcm9tIG1lc3Npbmcgd2l0aCB0aGUgc3RyZWFtcyB1bnRpbAotCQkgICB3ZSdyZSBmaW5pc2hlZCBjaGFuZ2luZyBpbnB1dHMuICovCi0JCWN4MThfbXV0ZShjeCk7Ci0JCWN4MThfdmlkZW9fc2V0X2lvKGN4KTsKLQkJY3gxOF9hdWRpb19zZXRfaW8oY3gpOwotCQljeDE4X3VubXV0ZShjeCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOnsKLQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICp2ZiA9IGFyZzsKLQotCQlpZiAodmYtPnR1bmVyICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBjbWQsIGFyZyk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOnsKLQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5IHZmID0gKihzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKilhcmc7Ci0KLQkJaWYgKHZmLnR1bmVyICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQljeDE4X211dGUoY3gpOwotCQlDWDE4X0RFQlVHX0lORk8oInY0bDIgaW9jdGw6IHNldCBmcmVxdWVuY3kgJWRcbiIsIHZmLmZyZXF1ZW5jeSk7Ci0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgY21kLCAmdmYpOwotCQljeDE4X3VubXV0ZShjeCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0VOVU1TVEQ6ewotCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqdnMgPSBhcmc7Ci0JCWludCBpZHggPSB2cy0+aW5kZXg7Ci0KLQkJaWYgKGlkeCA8IDAgfHwgaWR4ID49IEFSUkFZX1NJWkUoZW51bV9zdGRzKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCSp2cyA9IChlbnVtX3N0ZHNbaWR4XS5zdGQgJiBWNEwyX1NURF81MjVfNjApID8KLQkJCQljeDE4X3N0ZF82MGh6IDogY3gxOF9zdGRfNTBoejsKLQkJdnMtPmluZGV4ID0gaWR4OwotCQl2cy0+aWQgPSBlbnVtX3N0ZHNbaWR4XS5zdGQ7Ci0JCXN0cmxjcHkodnMtPm5hbWUsIGVudW1fc3Rkc1tpZHhdLm5hbWUsIHNpemVvZih2cy0+bmFtZSkpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX1NURDp7Ci0JCSoodjRsMl9zdGRfaWQgKikgYXJnID0gY3gtPnN0ZDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfU19TVEQ6IHsKLQkJdjRsMl9zdGRfaWQgc3RkID0gKih2NGwyX3N0ZF9pZCAqKSBhcmc7Ci0KLQkJaWYgKChzdGQgJiBWNEwyX1NURF9BTEwpID09IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoc3RkID09IGN4LT5zdGQpCi0JCQlicmVhazsKLQotCQlpZiAodGVzdF9iaXQoQ1gxOF9GX0lfUkFESU9fVVNFUiwgJmN4LT5pX2ZsYWdzKSB8fAotCQkgICAgYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSA+IDApIHsKLQkJCS8qIFN3aXRjaGluZyBzdGFuZGFyZCB3b3VsZCB0dXJuIG9mZiB0aGUgcmFkaW8gb3IgbWVzcwotCQkJICAgd2l0aCBhbHJlYWR5IHJ1bm5pbmcgc3RyZWFtcywgcHJldmVudCB0aGF0IGJ5Ci0JCQkgICByZXR1cm5pbmcgRUJVU1kuICovCi0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJY3gtPnN0ZCA9IHN0ZDsKLQkJY3gtPmlzXzYwaHogPSAoc3RkICYgVjRMMl9TVERfNTI1XzYwKSA/IDEgOiAwOwotCQljeC0+cGFyYW1zLmlzXzUwaHogPSBjeC0+aXNfNTBoeiA9ICFjeC0+aXNfNjBoejsKLQkJY3gtPnBhcmFtcy53aWR0aCA9IDcyMDsKLQkJY3gtPnBhcmFtcy5oZWlnaHQgPSBjeC0+aXNfNTBoeiA/IDU3NiA6IDQ4MDsKLQkJY3gtPnZiaS5jb3VudCA9IGN4LT5pc181MGh6ID8gMTggOiAxMjsKLQkJY3gtPnZiaS5zdGFydFswXSA9IGN4LT5pc181MGh6ID8gNiA6IDEwOwotCQljeC0+dmJpLnN0YXJ0WzFdID0gY3gtPmlzXzUwaHogPyAzMTggOiAyNzM7Ci0JCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfbGluZV9zaXplID0gY3gtPmlzXzYwaHogPyAyNzIgOiAyODQ7Ci0JCUNYMThfREVCVUdfSU5GTygiU3dpdGNoaW5nIHN0YW5kYXJkIHRvICVsbHguXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWN4LT5zdGQpOwotCi0JCS8qIFR1bmVyICovCi0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX1NfU1RELCAmY3gtPnN0ZCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX1NfVFVORVI6IHsJLyogU2V0dGluZyB0dW5lciBjYW4gb25seSBzZXQgYXVkaW8gbW9kZSAqLwotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7Ci0KLQkJaWYgKHZ0LT5pbmRleCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfU19UVU5FUiwgdnQpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX1RVTkVSOiB7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKLQotCQlpZiAodnQtPmluZGV4ICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltZW1zZXQodnQsIDAsIHNpemVvZigqdnQpKTsKLQkJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfR19UVU5FUiwgdnQpOwotCi0JCWlmICh0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKSB7Ci0JCQlzdHJsY3B5KHZ0LT5uYW1lLCAiY3gxOCBSYWRpbyBUdW5lciIsIHNpemVvZih2dC0+bmFtZSkpOwotCQkJdnQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCQl9IGVsc2UgewotCQkJc3RybGNweSh2dC0+bmFtZSwgImN4MTggVFYgVHVuZXIiLCBzaXplb2YodnQtPm5hbWUpKTsKLQkJCXZ0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDogewotCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqY2FwID0gYXJnOwotCQlpbnQgc2V0ID0gY3gtPmlzXzUwaHogPyBWNEwyX1NMSUNFRF9WQklfNjI1IDogVjRMMl9TTElDRURfVkJJXzUyNTsKLQkJaW50IGYsIGw7Ci0JCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gY2FwLT50eXBlOwotCi0JCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7Ci0JCWNhcC0+dHlwZSA9IHR5cGU7Ci0JCWlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKSB7Ci0JCQlmb3IgKGYgPSAwOyBmIDwgMjsgZisrKSB7Ci0JCQkJZm9yIChsID0gMDsgbCA8IDI0OyBsKyspIHsKLQkJCQkJaWYgKHZhbGlkX3NlcnZpY2VfbGluZShmLCBsLCBjeC0+aXNfNTBoeikpCi0JCQkJCQljYXAtPnNlcnZpY2VfbGluZXNbZl1bbF0gPSBzZXQ7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY2FzZSBWSURJT0NfRU5DT0RFUl9DTUQ6Ci0JY2FzZSBWSURJT0NfVFJZX0VOQ09ERVJfQ01EOiB7Ci0JCXN0cnVjdCB2NGwyX2VuY29kZXJfY21kICplbmMgPSBhcmc7Ci0JCWludCB0cnkgPSBjbWQgPT0gVklESU9DX1RSWV9FTkNPREVSX0NNRDsKLQotCQltZW1zZXQoJmVuYy0+cmF3LCAwLCBzaXplb2YoZW5jLT5yYXcpKTsKLQkJc3dpdGNoIChlbmMtPmNtZCkgewotCQljYXNlIFY0TDJfRU5DX0NNRF9TVEFSVDoKLQkJCWVuYy0+ZmxhZ3MgPSAwOwotCQkJaWYgKHRyeSkKLQkJCQlyZXR1cm4gMDsKLQkJCXJldHVybiBjeDE4X3N0YXJ0X2NhcHR1cmUoaWQpOwotCi0JCWNhc2UgVjRMMl9FTkNfQ01EX1NUT1A6Ci0JCQllbmMtPmZsYWdzICY9IFY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQ7Ci0JCQlpZiAodHJ5KQotCQkJCXJldHVybiAwOwotCQkJY3gxOF9zdG9wX2NhcHR1cmUoaWQsIGVuYy0+ZmxhZ3MgJiBWNEwyX0VOQ19DTURfU1RPUF9BVF9HT1BfRU5EKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgVjRMMl9FTkNfQ01EX1BBVVNFOgotCQkJZW5jLT5mbGFncyA9IDA7Ci0JCQlpZiAodHJ5KQotCQkJCXJldHVybiAwOwotCQkJaWYgKCFhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpKQotCQkJCXJldHVybiAtRVBFUk07Ci0JCQlpZiAodGVzdF9hbmRfc2V0X2JpdChDWDE4X0ZfSV9FTkNfUEFVU0VELCAmY3gtPmlfZmxhZ3MpKQotCQkJCXJldHVybiAwOwotCQkJY3gxOF9tdXRlKGN4KTsKLQkJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfQ0FQVFVSRV9QQVVTRSwgMSwgY3gxOF9maW5kX2hhbmRsZShjeCkpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWNEwyX0VOQ19DTURfUkVTVU1FOgotCQkJZW5jLT5mbGFncyA9IDA7Ci0JCQlpZiAodHJ5KQotCQkJCXJldHVybiAwOwotCQkJaWYgKCFhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpKQotCQkJCXJldHVybiAtRVBFUk07Ci0JCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChDWDE4X0ZfSV9FTkNfUEFVU0VELCAmY3gtPmlfZmxhZ3MpKQotCQkJCXJldHVybiAwOwotCQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9DQVBUVVJFX1JFU1VNRSwgMSwgY3gxOF9maW5kX2hhbmRsZShjeCkpOwotCQkJY3gxOF91bm11dGUoY3gpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCXsKLQkJc3RydWN0IHY0bDJfaW5wdXQgdmlkaW47Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvIGF1ZGluOwotCQlpbnQgaTsKLQotCQlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09ICBTVEFSVCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09XG4iLCBjeC0+bnVtKTsKLQkJaWYgKGN4LT5od19mbGFncyAmIENYMThfSFdfVFZFRVBST00pIHsKLQkJCXN0cnVjdCB0dmVlcHJvbSB0djsKLQotCQkJY3gxOF9yZWFkX2VlcHJvbShjeCwgJnR2KTsKLQkJfQotCQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19MT0dfU1RBVFVTLCBOVUxMKTsKLQkJY3gxOF9nZXRfaW5wdXQoY3gsIGN4LT5hY3RpdmVfaW5wdXQsICZ2aWRpbik7Ci0JCWN4MThfZ2V0X2F1ZGlvX2lucHV0KGN4LCBjeC0+YXVkaW9faW5wdXQsICZhdWRpbik7Ci0JCUNYMThfSU5GTygiVmlkZW8gSW5wdXQ6ICVzXG4iLCB2aWRpbi5uYW1lKTsKLQkJQ1gxOF9JTkZPKCJBdWRpbyBJbnB1dDogJXNcbiIsIGF1ZGluLm5hbWUpOwotCQlDWDE4X0lORk8oIlR1bmVyOiAlc1xuIiwKLQkJCXRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykgPwotCQkJIlJhZGlvIiA6ICJUViIpOwotCQljeDIzNDF4X2xvZ19zdGF0dXMoJmN4LT5wYXJhbXMsIGN4LT5uYW1lKTsKLQkJQ1gxOF9JTkZPKCJTdGF0dXMgZmxhZ3M6IDB4JTA4bHhcbiIsIGN4LT5pX2ZsYWdzKTsKLQkJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX1NUUkVBTVM7IGkrKykgewotCQkJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2ldOwotCi0JCQlpZiAocy0+djRsMmRldiA9PSBOVUxMIHx8IHMtPmJ1ZmZlcnMgPT0gMCkKLQkJCQljb250aW51ZTsKLQkJCUNYMThfSU5GTygiU3RyZWFtICVzOiBzdGF0dXMgMHglMDRseCwgJWQlJSBvZiAlZCBLaUIgKCVkIGJ1ZmZlcnMpIGluIHVzZVxuIiwKLQkJCQlzLT5uYW1lLCBzLT5zX2ZsYWdzLAotCQkJCShzLT5idWZmZXJzIC0gcy0+cV9mcmVlLmJ1ZmZlcnMpICogMTAwIC8gcy0+YnVmZmVycywKLQkJCQkocy0+YnVmZmVycyAqIHMtPmJ1Zl9zaXplKSAvIDEwMjQsIHMtPmJ1ZmZlcnMpOwotCQl9Ci0JCUNYMThfSU5GTygiUmVhZCBNUEVHL1ZCSTogJWxsZC8lbGxkIGJ5dGVzXG4iLAotCQkJCShsb25nIGxvbmcpY3gtPm1wZ19kYXRhX3JlY2VpdmVkLAotCQkJCShsb25nIGxvbmcpY3gtPnZiaV9kYXRhX2luc2VydGVkKTsKLQkJQ1gxOF9JTkZPKCI9PT09PT09PT09PT09PT09PT0gIEVORCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09PVxuIiwgY3gtPm51bSk7CisJCWlmICgodmFsID09IDApIHx8ICh2YWwgJiAweDAxKSkKKwkJCWN4MThfcmVzZXRfaXJfZ3BpbygmY3gtPmkyY19hbGdvX2NiX2RhdGFbMF0pOwogCQlicmVhazsKIAl9CiAKQEAgLTc0NywxMDUgKzc2OSw2OCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MThfdjRsMl9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmlscC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKLQlpbnQgcmV0OwotCi0JLyogY2hlY2sgcHJpb3JpdHkgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQljYXNlIFZJRElPQ19TX1NURDoKLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JY2FzZSBWSURJT0NfU19DUk9QOgotCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTOgotCQlyZXQgPSB2NGwyX3ByaW9fY2hlY2soJmN4LT5wcmlvLCAmaWQtPnByaW8pOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgotCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgotCWNhc2UgVklESU9DX0dfQ0hJUF9JREVOVDoKLQljYXNlIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HOgotCWNhc2UgVklESU9DX0lOVF9SRVNFVDoKLQkJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19JT0NUTCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3gxOCVkIGlvY3RsOiAiLCBjeC0+bnVtKTsKLQkJCXY0bF9wcmludGtfaW9jdGwoY21kKTsKLQkJfQotCQlyZXR1cm4gY3gxOF9kZWJ1Z19pb2N0bHMoZmlscCwgY21kLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfR19QUklPUklUWToKLQljYXNlIFZJRElPQ19TX1BSSU9SSVRZOgotCWNhc2UgVklESU9DX1FVRVJZQ0FQOgotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQljYXNlIFZJRElPQ19HX0lOUFVUOgotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JY2FzZSBWSURJT0NfR19GTVQ6Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JY2FzZSBWSURJT0NfVFJZX0ZNVDoKLQljYXNlIFZJRElPQ19FTlVNX0ZNVDoKLQljYXNlIFZJRElPQ19DUk9QQ0FQOgotCWNhc2UgVklESU9DX0dfQ1JPUDoKLQljYXNlIFZJRElPQ19TX0NST1A6Ci0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JY2FzZSBWSURJT0NfRU5VTVNURDoKLQljYXNlIFZJRElPQ19HX1NURDoKLQljYXNlIFZJRElPQ19TX1NURDoKLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JY2FzZSBWSURJT0NfRU5VTUFVRElPOgotCWNhc2UgVklESU9DX1NfQVVESU86Ci0JY2FzZSBWSURJT0NfR19BVURJTzoKLQljYXNlIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQOgotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JY2FzZSBWSURJT0NfR19FTkNfSU5ERVg6Ci0JY2FzZSBWSURJT0NfRU5DT0RFUl9DTUQ6Ci0JY2FzZSBWSURJT0NfVFJZX0VOQ09ERVJfQ01EOgotCQlpZiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0lPQ1RMKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJjeDE4JWQgaW9jdGw6ICIsIGN4LT5udW0pOwotCQkJdjRsX3ByaW50a19pb2N0bChjbWQpOwotCQl9Ci0JCXJldHVybiBjeDE4X3Y0bDJfaW9jdGxzKGN4LCBmaWxwLCBjbWQsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JY2FzZSBWSURJT0NfU19FWFRfQ1RSTFM6Ci0JY2FzZSBWSURJT0NfR19FWFRfQ1RSTFM6Ci0JY2FzZSBWSURJT0NfVFJZX0VYVF9DVFJMUzoKLQkJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19JT0NUTCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3gxOCVkIGlvY3RsOiAiLCBjeC0+bnVtKTsKLQkJCXY0bF9wcmludGtfaW9jdGwoY21kKTsKLQkJfQotCQlyZXR1cm4gY3gxOF9jb250cm9sX2lvY3RscyhjeCwgY21kLCBhcmcpOwotCi0JY2FzZSAweDAwMDA1NDAxOgkvKiBIYW5kbGUgaXNhdHR5KCkgY2FsbHMgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLCBmaWxwLCBjbWQsIGFyZywKLQkJCQkJCSAgIGN4MThfdjRsMl9kb19pb2N0bCk7Ci0JfQotCXJldHVybiAwOwotfQotCiBpbnQgY3gxOF92NGwyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKIAlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKIAlpbnQgcmVzOwogCiAJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKLQlyZXMgPSB2aWRlb191c2VyY29weShpbm9kZSwgZmlscCwgY21kLCBhcmcsIGN4MThfdjRsMl9kb19pb2N0bCk7CisKKwlpZiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0lPQ1RMKQorCQl2ZmQtPmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTCB8IFY0TDJfREVCVUdfSU9DVExfQVJHOworCXJlcyA9IHZpZGVvX2lvY3RsMihpbm9kZSwgZmlscCwgY21kLCBhcmcpOworCXZmZC0+ZGVidWcgPSAwOwogCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQorCit2b2lkIGN4MThfc2V0X2Z1bmNzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJdmRldi0+dmlkaW9jX3F1ZXJ5Y2FwICAgICAgICAgICAgICAgID0gY3gxOF9xdWVyeWNhcDsKKwl2ZGV2LT52aWRpb2NfZ19wcmlvcml0eSAgICAgICAgICAgICAgPSBjeDE4X2dfcHJpb3JpdHk7CisJdmRldi0+dmlkaW9jX3NfcHJpb3JpdHkgICAgICAgICAgICAgID0gY3gxOF9zX3ByaW9yaXR5OworCXZkZXYtPnZpZGlvY19zX2F1ZGlvICAgICAgICAgICAgICAgICA9IGN4MThfc19hdWRpbzsKKwl2ZGV2LT52aWRpb2NfZ19hdWRpbyAgICAgICAgICAgICAgICAgPSBjeDE4X2dfYXVkaW87CisJdmRldi0+dmlkaW9jX2VudW1hdWRpbyAgICAgICAgICAgICAgID0gY3gxOF9lbnVtYXVkaW87CisJdmRldi0+dmlkaW9jX2VudW1faW5wdXQgICAgICAgICAgICAgID0gY3gxOF9lbnVtX2lucHV0OworCXZkZXYtPnZpZGlvY19jcm9wY2FwICAgICAgICAgICAgICAgICA9IGN4MThfY3JvcGNhcDsKKwl2ZGV2LT52aWRpb2Nfc19jcm9wICAgICAgICAgICAgICAgICAgPSBjeDE4X3NfY3JvcDsKKwl2ZGV2LT52aWRpb2NfZ19jcm9wICAgICAgICAgICAgICAgICAgPSBjeDE4X2dfY3JvcDsKKwl2ZGV2LT52aWRpb2NfZ19pbnB1dCAgICAgICAgICAgICAgICAgPSBjeDE4X2dfaW5wdXQ7CisJdmRldi0+dmlkaW9jX3NfaW5wdXQgICAgICAgICAgICAgICAgID0gY3gxOF9zX2lucHV0OworCXZkZXYtPnZpZGlvY19nX2ZyZXF1ZW5jeSAgICAgICAgICAgICA9IGN4MThfZ19mcmVxdWVuY3k7CisJdmRldi0+dmlkaW9jX3NfZnJlcXVlbmN5ICAgICAgICAgICAgID0gY3gxOF9zX2ZyZXF1ZW5jeTsKKwl2ZGV2LT52aWRpb2Nfc190dW5lciAgICAgICAgICAgICAgICAgPSBjeDE4X3NfdHVuZXI7CisJdmRldi0+dmlkaW9jX2dfdHVuZXIgICAgICAgICAgICAgICAgID0gY3gxOF9nX3R1bmVyOworCXZkZXYtPnZpZGlvY19nX2VuY19pbmRleCAgICAgICAgICAgICA9IGN4MThfZ19lbmNfaW5kZXg7CisJdmRldi0+dmlkaW9jX2dfc3RkICAgICAgICAgICAgICAgICAgID0gY3gxOF9nX3N0ZDsKKwl2ZGV2LT52aWRpb2Nfc19zdGQgICAgICAgICAgICAgICAgICAgPSBjeDE4X3Nfc3RkOworCXZkZXYtPnZpZGlvY19sb2dfc3RhdHVzICAgICAgICAgICAgICA9IGN4MThfbG9nX3N0YXR1czsKKwl2ZGV2LT52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgICAgICAgPSBjeDE4X2VudW1fZm10X3ZpZF9jYXA7CisJdmRldi0+dmlkaW9jX2VuY29kZXJfY21kICAgICAgICAgICAgID0gY3gxOF9lbmNvZGVyX2NtZDsKKwl2ZGV2LT52aWRpb2NfdHJ5X2VuY29kZXJfY21kICAgICAgICAgPSBjeDE4X3RyeV9lbmNvZGVyX2NtZDsKKwl2ZGV2LT52aWRpb2NfZ19mbXRfdmlkX2NhcCAgICAgICAgICAgPSBjeDE4X2dfZm10X3ZpZF9jYXA7CisJdmRldi0+dmlkaW9jX2dfZm10X3ZiaV9jYXAgICAgICAgICAgID0gY3gxOF9nX2ZtdF92YmlfY2FwOworCXZkZXYtPnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX2NhcCAgICA9IGN4MThfZ19mbXRfc2xpY2VkX3ZiaV9jYXA7CisJdmRldi0+dmlkaW9jX3NfZm10X3ZpZF9jYXAgICAgICAgICAgID0gY3gxOF9zX2ZtdF92aWRfY2FwOworCXZkZXYtPnZpZGlvY19zX2ZtdF92YmlfY2FwICAgICAgICAgICA9IGN4MThfc19mbXRfdmJpX2NhcDsKKwl2ZGV2LT52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9jYXAgICAgPSBjeDE4X3NfZm10X3NsaWNlZF92YmlfY2FwOworCXZkZXYtPnZpZGlvY190cnlfZm10X3ZpZF9jYXAgICAgICAgICA9IGN4MThfdHJ5X2ZtdF92aWRfY2FwOworCXZkZXYtPnZpZGlvY190cnlfZm10X3ZiaV9jYXAgICAgICAgICA9IGN4MThfdHJ5X2ZtdF92YmlfY2FwOworCXZkZXYtPnZpZGlvY190cnlfZm10X3NsaWNlZF92YmlfY2FwICA9IGN4MThfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcDsKKwl2ZGV2LT52aWRpb2NfZ19zbGljZWRfdmJpX2NhcCAgICAgICAgPSBjeDE4X2dfc2xpY2VkX3ZiaV9jYXA7CisJdmRldi0+dmlkaW9jX2dfY2hpcF9pZGVudCAgICAgICAgICAgID0gY3gxOF9nX2NoaXBfaWRlbnQ7CisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCXZkZXYtPnZpZGlvY19nX3JlZ2lzdGVyICAgICAgICAgICAgICA9IGN4MThfZ19yZWdpc3RlcjsKKwl2ZGV2LT52aWRpb2Nfc19yZWdpc3RlciAgICAgICAgICAgICAgPSBjeDE4X3NfcmVnaXN0ZXI7CisjZW5kaWYKKwl2ZGV2LT52aWRpb2NfZGVmYXVsdCAgICAgICAgICAgICAgICAgPSBjeDE4X2RlZmF1bHQ7CisJdmRldi0+dmlkaW9jX3F1ZXJ5Y3RybCAgICAgICAgICAgICAgID0gY3gxOF9xdWVyeWN0cmw7CisJdmRldi0+dmlkaW9jX3F1ZXJ5bWVudSAgICAgICAgICAgICAgID0gY3gxOF9xdWVyeW1lbnU7CisJdmRldi0+dmlkaW9jX2dfZXh0X2N0cmxzICAgICAgICAgICAgID0gY3gxOF9nX2V4dF9jdHJsczsKKwl2ZGV2LT52aWRpb2Nfc19leHRfY3RybHMgICAgICAgICAgICAgPSBjeDE4X3NfZXh0X2N0cmxzOworCXZkZXYtPnZpZGlvY190cnlfZXh0X2N0cmxzICAgICAgICAgICA9IGN4MThfdHJ5X2V4dF9jdHJsczsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5oCmluZGV4IDlmNGM3ZWIuLjIyMjJmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuaApAQCAtMjQsNyArMjQsOSBAQAogdTE2IGN4MThfc2VydmljZTJ2YmkoaW50IHR5cGUpOwogdm9pZCBjeDE4X2V4cGFuZF9zZXJ2aWNlX3NldChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10LCBpbnQgaXNfcGFsKTsKIHUxNiBjeDE4X2dldF9zZXJ2aWNlX3NldChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10KTsKK3ZvaWQgY3gxOF9zZXRfZnVuY3Moc3RydWN0IHZpZGVvX2RldmljZSAqdmRldik7CitpbnQgY3gxOF9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpzdGQpOworaW50IGN4MThfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKnZmKTsKK2ludCBjeDE4X3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaW5wKTsKIGludCBjeDE4X3Y0bDJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCSAgICB1bnNpZ25lZCBsb25nIGFyZyk7Ci1pbnQgY3gxOF92NGwyX2lvY3RscyhzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBjbWQsCi0JCSAgICAgdm9pZCAqYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwppbmRleCAyYTVjY2VmLi45MzE3NzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCkBAIC04MSw2ICs4MSw3IEBACiAJQVBJX0VOVFJZKENQVSwgQ1gxOF9DUFVfR0VUX0VOQ19QVFMsICAgICAgICAgICAgICAgICAgICAwKSwKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERV9TRVRfTURMX0FDSywJCQkwKSwKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERV9TRVRfTURMLAkJCUFQSV9GQVNUKSwKKwlBUElfRU5UUlkoQ1BVLCBDWDE4X0FQVV9SRVNFVEFJLAkJCUFQSV9GQVNUKSwKIAlBUElfRU5UUlkoMCwgMCwJCQkJCQkwKSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwppbmRleCAxYjkyMWEzLi4xNzI4YjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCkBAIC0zOSw2ICszOSw3IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnJlYWQgPSBjeDE4X3Y0bDJfcmVhZCwKIAkub3BlbiA9IGN4MThfdjRsMl9vcGVuLAorCS8qIEZJWE1FIGNoYW5nZSB0byB2aWRlb19pb2N0bDIgaWYgc2VyaWFsaXphdGlvbiBsb2NrIGNhbiBiZSByZW1vdmVkICovCiAJLmlvY3RsID0gY3gxOF92NGwyX2lvY3RsLAogCS5jb21wYXRfaW9jdGwgPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLnJlbGVhc2UgPSBjeDE4X3Y0bDJfY2xvc2UsCkBAIC0xODksMTQgKzE5MCwxNSBAQAogCXMtPnY0bDJkZXYtPnR5cGUgPQogCQlWSURfVFlQRV9DQVBUVVJFIHwgVklEX1RZUEVfVFVORVIgfCBWSURfVFlQRV9URUxFVEVYVCB8CiAJCVZJRF9UWVBFX0NMSVBQSU5HIHwgVklEX1RZUEVfU0NBTEVTIHwgVklEX1RZUEVfTVBFR19FTkNPREVSOwotCXNucHJpbnRmKHMtPnY0bDJkZXYtPm5hbWUsIHNpemVvZihzLT52NGwyZGV2LT5uYW1lKSwgImN4MTglZCAlcyIsCi0JCQljeC0+bnVtLCBzLT5uYW1lKTsKKwlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICJjeDE4LSVkIiwKKwkJCWN4LT5udW0pOwogCiAJcy0+djRsMmRldi0+bWlub3IgPSBtaW5vcjsKIAlzLT52NGwyZGV2LT5kZXYgPSAmY3gtPmRldi0+ZGV2OwogCXMtPnY0bDJkZXYtPmZvcHMgPSBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLmZvcHM7CiAJcy0+djRsMmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwotCisJcy0+djRsMmRldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKKwljeDE4X3NldF9mdW5jcyhzLT52NGwyZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA5LDggKzMxMSwxMCBAQAogCiAJLyogVGVhcmRvd24gYWxsIHN0cmVhbXMgKi8KIAlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgQ1gxOF9NQVhfU1RSRUFNUzsgdHlwZSsrKSB7Ci0JCWlmIChjeC0+c3RyZWFtc1t0eXBlXS5kdmIuZW5hYmxlZCkKKwkJaWYgKGN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkKSB7CiAJCQljeDE4X2R2Yl91bnJlZ2lzdGVyKCZjeC0+c3RyZWFtc1t0eXBlXSk7CisJCQljeC0+c3RyZWFtc1t0eXBlXS5kdmIuZW5hYmxlZCA9IGZhbHNlOworCQl9CiAKIAkJdmRldiA9IGN4LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCmluZGV4IDMzZjc4ZGEuLmU3ZWQwNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaApAQCAtNTIsNiArNTIsMTEgQEAKICNkZWZpbmUgRVBVX0NNRF9NQVNLX0RFQlVHICAgICAgIAkJKEVQVV9DTURfTUFTSyB8IDB4MDAwMDAwKQogI2RlZmluZSBFUFVfQ01EX01BU0tfREUgICAgICAgICAgICAgICAgICAgICAJKEVQVV9DTURfTUFTSyB8IDB4MDQwMDAwKQogCisjZGVmaW5lIEFQVV9DTURfTUFTSyAJCQkJMHgxMDAwMDAwMAorI2RlZmluZSBBUFVfQ01EX01BU0tfQUNLIAkJCShBUFVfQ01EX01BU0sgfCAweDgwMDAwMDAwKQorCisjZGVmaW5lIENYMThfQVBVX1JFU0VUQUkgCQkJKEFQVV9DTURfTUFTSyB8IDB4MDUpCisKIC8qIERlc2NyaXB0aW9uOiBUaGlzIGNvbW1hbmQgaW5kaWNhdGVzIHRoYXQgYSBNZW1vcnkgRGVzY3JpcHRvciBMaXN0IGhhcyBiZWVuCiAgICBmaWxsZWQgd2l0aCB0aGUgcmVxdWVzdGVkIGNoYW5uZWwgdHlwZQogICAgSU5bMF0gLSBUYXNrIGhhbmRsZS4gSGFuZGxlIG9mIHRoZSB0YXNrCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCmluZGV4IGM1OTI4OTkuLjIyODQ3YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCkBAIC03NywxMCArNzcsNjUgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGN4MjM0MXhfbXBlZ19jdHJscyk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyBkZWZhdWx0X3BhcmFtcyA9IHsKKwkvKiBtaXNjICovCisJLmNhcGFiaWxpdGllcyA9IDAsCisJLnBvcnQgPSBDWDIzNDFYX1BPUlRfTUVNT1JZLAorCS53aWR0aCA9IDcyMCwKKwkuaGVpZ2h0ID0gNDgwLAorCS5pc181MGh6ID0gMCwKKworCS8qIHN0cmVhbSAqLworCS5zdHJlYW1fdHlwZSA9IFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUywKKwkuc3RyZWFtX3ZiaV9mbXQgPSBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwKKwkuc3RyZWFtX2luc2VydF9uYXZfcGFja2V0cyA9IDAsCisKKwkvKiBhdWRpbyAqLworCS5hdWRpb19zYW1wbGluZ19mcmVxID0gVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDAsCisJLmF1ZGlvX2VuY29kaW5nID0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCisJLmF1ZGlvX2wyX2JpdHJhdGUgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLLAorCS5hdWRpb19tb2RlID0gVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPLAorCS5hdWRpb19tb2RlX2V4dGVuc2lvbiA9IFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80LAorCS5hdWRpb19lbXBoYXNpcyA9IFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLAorCS5hdWRpb19jcmMgPSBWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUsCisJLmF1ZGlvX211dGUgPSAwLAorCisJLyogdmlkZW8gKi8KKwkudmlkZW9fZW5jb2RpbmcgPSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yLAorCS52aWRlb19hc3BlY3QgPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4MywKKwkudmlkZW9fYl9mcmFtZXMgPSAyLAorCS52aWRlb19nb3Bfc2l6ZSA9IDEyLAorCS52aWRlb19nb3BfY2xvc3VyZSA9IDEsCisJLnZpZGVvX2JpdHJhdGVfbW9kZSA9IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSLAorCS52aWRlb19iaXRyYXRlID0gNjAwMDAwMCwKKwkudmlkZW9fYml0cmF0ZV9wZWFrID0gODAwMDAwMCwKKwkudmlkZW9fdGVtcG9yYWxfZGVjaW1hdGlvbiA9IDAsCisJLnZpZGVvX211dGUgPSAwLAorCS52aWRlb19tdXRlX3l1diA9IDB4MDA4MDgwLCAgLyogWUNiQ3IgdmFsdWUgZm9yIGJsYWNrICovCisKKwkvKiBlbmNvZGluZyBmaWx0ZXJzICovCisJLnZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGUgPQorCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX01BTlVBTCwKKwkudmlkZW9fc3BhdGlhbF9maWx0ZXIgPSAwLAorCS52aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGUgPQorCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SLAorCS52aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZSA9CisJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiwKKwkudmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGUgPQorCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9NQU5VQUwsCisJLnZpZGVvX3RlbXBvcmFsX2ZpbHRlciA9IDgsCisJLnZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSA9CisJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkYsCisJLnZpZGVvX2x1bWFfbWVkaWFuX2ZpbHRlcl90b3AgPSAyNTUsCisJLnZpZGVvX2x1bWFfbWVkaWFuX2ZpbHRlcl9ib3R0b20gPSAwLAorCS52aWRlb19jaHJvbWFfbWVkaWFuX2ZpbHRlcl90b3AgPSAyNTUsCisJLnZpZGVvX2Nocm9tYV9tZWRpYW5fZmlsdGVyX2JvdHRvbSA9IDAsCit9OworCiAKIC8qIE1hcCB0aGUgY29udHJvbCBJRCB0byB0aGUgY29ycmVjdCBmaWVsZCBpbiB0aGUgY3gyMzQxeF9tcGVnX3BhcmFtcwogICAgc3RydWN0LiBSZXR1cm4gLUVJTlZBTCBpZiB0aGUgSUQgaXMgdW5rbm93biwgZWxzZSByZXR1cm4gMC4gKi8KLXN0YXRpYyBpbnQgY3gyMzQxeF9nZXRfY3RybChzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcGFyYW1zLAorc3RhdGljIGludCBjeDIzNDF4X2dldF9jdHJsKGNvbnN0IHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMsCiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsKQogewogCXN3aXRjaCAoY3RybC0+aWQpIHsKQEAgLTQyMCw3ICs0NzUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY3gyMzQxeF9jdHJsX3F1ZXJ5KHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMsCitpbnQgY3gyMzQxeF9jdHJsX3F1ZXJ5KGNvbnN0IHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMsCiAJCSAgICAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQogewogCWludCBlcnI7CkBAIC00MzAsMTMgKzQ4NSwxMyBAQAogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCiAJCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCiAJCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIpOworCQkJCWRlZmF1bHRfcGFyYW1zLmF1ZGlvX2VuY29kaW5nKTsKIAogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCiAJCQkJVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTkySywKIAkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzIyNEspOworCQkJCWRlZmF1bHRfcGFyYW1zLmF1ZGlvX2wyX2JpdHJhdGUpOwogCiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEU6CkBAIC00NzksMTcgKzUzNCwyMiBAQAogCQlyZXR1cm4gY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCiAJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsCiAJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsIDEsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUpOworCQkJCWRlZmF1bHRfcGFyYW1zLnN0cmVhbV92YmlfZm10KTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAxLCAzNCwgMSwKKwkJCQlwYXJhbXMtPmlzXzUwaHogPyAxMiA6IDE1KTsKIAogCS8qIENYMjM0MTUvNiBzcGVjaWZpYyAqLwogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREU6CiAJCXJldHVybiBjeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwKIAkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfTUFOVUFMLAogCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9BVVRPLCAxLAotCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9NQU5VQUwpOworCQkJZGVmYXVsdF9wYXJhbXMudmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZSk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUjoKLQkJY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDE1LCAxLCAwKTsKKwkJY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDE1LCAxLAorCQkJCWRlZmF1bHRfcGFyYW1zLnZpZGVvX3NwYXRpYWxfZmlsdGVyKTsKIAkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUjsKIAkJaWYgKHBhcmFtcy0+dmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZSA9PQogCQkJICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfQVVUTykKQEAgLTUwMSw3ICs1NjEsNyBAQAogCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRiwKIAkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9TWU1fTk9OX1NFUEFSQUJMRSwKIAkJCTEsCi0JCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfT0ZGKTsKKwkJCWRlZmF1bHRfcGFyYW1zLnZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZSk7CiAJCWlmIChwYXJhbXMtPnZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGUgPT0KIAkJCSAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX0FVVE8pCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CkBAIC01MTIsNyArNTcyLDcgQEAKIAkJICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRiwKIAkJICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiwKIAkJICAgIDEsCi0JCSAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYpOworCQkgICAgZGVmYXVsdF9wYXJhbXMudmlkZW9fY2hyb21hX3NwYXRpYWxfZmlsdGVyX3R5cGUpOwogCQlpZiAocGFyYW1zLT52aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlID09CiAJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX0FVVE8pCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CkBAIC01MjIsMTAgKzU4MiwxMSBAQAogCQlyZXR1cm4gY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCiAJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9NQU5VQUwsCiAJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9BVVRPLCAxLAotCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfTUFOVUFMKTsKKwkJCWRlZmF1bHRfcGFyYW1zLnZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlKTsKIAogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUjoKLQkJY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDMxLCAxLCAwKTsKKwkJY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDMxLCAxLAorCQkJCWRlZmF1bHRfcGFyYW1zLnZpZGVvX3RlbXBvcmFsX2ZpbHRlcik7CiAJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19TTElERVI7CiAJCWlmIChwYXJhbXMtPnZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlID09CiAJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9BVVRPKQpAQCAtNTM2LDEwICs1OTcsMTEgQEAKIAkJcmV0dXJuIGN4MjM0MXhfY3RybF9xdWVyeV9maWxsKHFjdHJsLAogCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX09GRiwKIAkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9ESUFHLCAxLAotCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX09GRik7CisJCQlkZWZhdWx0X3BhcmFtcy52aWRlb19tZWRpYW5fZmlsdGVyX3R5cGUpOwogCiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX1RPUDoKLQkJY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMjU1KTsKKwkJY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwKKwkJCQlkZWZhdWx0X3BhcmFtcy52aWRlb19sdW1hX21lZGlhbl9maWx0ZXJfdG9wKTsKIAkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUjsKIAkJaWYgKHBhcmFtcy0+dmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlID09CiAJCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX09GRikKQEAgLTU0Nyw3ICs2MDksOCBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9CT1RUT006Ci0JCWN4MjM0MXhfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNTUsIDEsIDApOworCQljeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLAorCQkJCWRlZmF1bHRfcGFyYW1zLnZpZGVvX2x1bWFfbWVkaWFuX2ZpbHRlcl9ib3R0b20pOwogCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSOwogCQlpZiAocGFyYW1zLT52aWRlb19tZWRpYW5fZmlsdGVyX3R5cGUgPT0KIAkJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfT0ZGKQpAQCAtNTU1LDcgKzYxOCw4IEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfVE9QOgotCQljeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAyNTUpOworCQljeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLAorCQkJCWRlZmF1bHRfcGFyYW1zLnZpZGVvX2Nocm9tYV9tZWRpYW5fZmlsdGVyX3RvcCk7CiAJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19TTElERVI7CiAJCWlmIChwYXJhbXMtPnZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSA9PQogCQkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkYpCkBAIC01NjMsNyArNjI3LDggQEAKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9CT1RUT006Ci0JCWN4MjM0MXhfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNTUsIDEsIDApOworCQljeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLAorCQkJZGVmYXVsdF9wYXJhbXMudmlkZW9fY2hyb21hX21lZGlhbl9maWx0ZXJfYm90dG9tKTsKIAkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUjsKIAkJaWYgKHBhcmFtcy0+dmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlID09CiAJCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX09GRikKQEAgLTU3MSw3ICs2MzYsOCBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1NUUkVBTV9JTlNFUlRfTkFWX1BBQ0tFVFM6Ci0JCXJldHVybiBjeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMCk7CisJCXJldHVybiBjeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwKKwkJCQlkZWZhdWx0X3BhcmFtcy5zdHJlYW1faW5zZXJ0X25hdl9wYWNrZXRzKTsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOwpAQCAtNTgwLDkgKzY0Niw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGN4MjM0MXhfY3RybF9xdWVyeSk7CiAKLWNvbnN0IGNoYXIgKipjeDIzNDF4X2N0cmxfZ2V0X21lbnUodTMyIGlkKQorY29uc3QgY2hhciAqKmN4MjM0MXhfY3RybF9nZXRfbWVudShjb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcCwgdTMyIGlkKQogewotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX3N0cmVhbV90eXBlW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfc3RyZWFtX3R5cGVfd2l0aG91dF90c1tdID0gewogCQkiTVBFRy0yIFByb2dyYW0gU3RyZWFtIiwKIAkJIiIsCiAJCSJNUEVHLTEgU3lzdGVtIFN0cmVhbSIsCkBAIC01OTIsNiArNjU4LDE2IEBACiAJCU5VTEwKIAl9OwogCisJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfc3RyZWFtX3R5cGVfd2l0aF90c1tdID0geworCQkiTVBFRy0yIFByb2dyYW0gU3RyZWFtIiwKKwkJIk1QRUctMiBUcmFuc3BvcnQgU3RyZWFtIiwKKwkJIk1QRUctMSBTeXN0ZW0gU3RyZWFtIiwKKwkJIk1QRUctMiBEVkQtY29tcGF0aWJsZSBTdHJlYW0iLAorCQkiTVBFRy0xIFZDRC1jb21wYXRpYmxlIFN0cmVhbSIsCisJCSJNUEVHLTIgU1ZDRC1jb21wYXRpYmxlIFN0cmVhbSIsCisJCU5VTEwKKwl9OworCiAJc3RhdGljIGNvbnN0IGNoYXIgKmN4MjM0MXhfdmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZV9tZW51W10gPSB7CiAJCSJNYW51YWwiLAogCQkiQXV0byIsCkBAIC02MzAsNyArNzA2LDggQEAKIAogCXN3aXRjaCAoaWQpIHsKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6Ci0JCXJldHVybiBtcGVnX3N0cmVhbV90eXBlOworCQlyZXR1cm4gKHAtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19UUykgPworCQkJbXBlZ19zdHJlYW1fdHlwZV93aXRoX3RzIDogbXBlZ19zdHJlYW1fdHlwZV93aXRob3V0X3RzOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOgogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgogCQlyZXR1cm4gTlVMTDsKQEAgLTY5MCw3ICs3NjcsNyBAQAogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJCWlmIChxY3RybC50eXBlID09IFY0TDJfQ1RSTF9UWVBFX01FTlUpCi0JCQltZW51X2l0ZW1zID0gY3gyMzQxeF9jdHJsX2dldF9tZW51KHFjdHJsLmlkKTsKKwkJCW1lbnVfaXRlbXMgPSBjeDIzNDF4X2N0cmxfZ2V0X21lbnUocGFyYW1zLCBxY3RybC5pZCk7CiAJCWVyciA9IHY0bDJfY3RybF9jaGVjayhjdHJsLCAmcWN0cmwsIG1lbnVfaXRlbXMpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7CkBAIC03MTQsNjEgKzc5MSw2IEBACiAKIHZvaWQgY3gyMzQxeF9maWxsX2RlZmF1bHRzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwKQogewotCXN0YXRpYyBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyBkZWZhdWx0X3BhcmFtcyA9IHsKLQkvKiBtaXNjICovCi0JLmNhcGFiaWxpdGllcyA9IDAsCi0JLnBvcnQgPSBDWDIzNDFYX1BPUlRfTUVNT1JZLAotCS53aWR0aCA9IDcyMCwKLQkuaGVpZ2h0ID0gNDgwLAotCS5pc181MGh6ID0gMCwKLQotCS8qIHN0cmVhbSAqLwotCS5zdHJlYW1fdHlwZSA9IFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUywKLQkuc3RyZWFtX3ZiaV9mbXQgPSBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwKLQkuc3RyZWFtX2luc2VydF9uYXZfcGFja2V0cyA9IDAsCi0KLQkvKiBhdWRpbyAqLwotCS5hdWRpb19zYW1wbGluZ19mcmVxID0gVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDAsCi0JLmF1ZGlvX2VuY29kaW5nID0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCi0JLmF1ZGlvX2wyX2JpdHJhdGUgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLLAotCS5hdWRpb19tb2RlID0gVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPLAotCS5hdWRpb19tb2RlX2V4dGVuc2lvbiA9IFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80LAotCS5hdWRpb19lbXBoYXNpcyA9IFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLAotCS5hdWRpb19jcmMgPSBWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUsCi0JLmF1ZGlvX211dGUgPSAwLAotCi0JLyogdmlkZW8gKi8KLQkudmlkZW9fZW5jb2RpbmcgPSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yLAotCS52aWRlb19hc3BlY3QgPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4MywKLQkudmlkZW9fYl9mcmFtZXMgPSAyLAotCS52aWRlb19nb3Bfc2l6ZSA9IDEyLAotCS52aWRlb19nb3BfY2xvc3VyZSA9IDEsCi0JLnZpZGVvX2JpdHJhdGVfbW9kZSA9IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSLAotCS52aWRlb19iaXRyYXRlID0gNjAwMDAwMCwKLQkudmlkZW9fYml0cmF0ZV9wZWFrID0gODAwMDAwMCwKLQkudmlkZW9fdGVtcG9yYWxfZGVjaW1hdGlvbiA9IDAsCi0JLnZpZGVvX211dGUgPSAwLAotCS52aWRlb19tdXRlX3l1diA9IDB4MDA4MDgwLCAgLyogWUNiQ3IgdmFsdWUgZm9yIGJsYWNrICovCi0KLQkvKiBlbmNvZGluZyBmaWx0ZXJzICovCi0JLnZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGUgPQotCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX01BTlVBTCwKLQkudmlkZW9fc3BhdGlhbF9maWx0ZXIgPSAwLAotCS52aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGUgPQotCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SLAotCS52aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZSA9Ci0JCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiwKLQkudmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGUgPQotCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9NQU5VQUwsCi0JLnZpZGVvX3RlbXBvcmFsX2ZpbHRlciA9IDgsCi0JLnZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSA9Ci0JCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkYsCi0JLnZpZGVvX2x1bWFfbWVkaWFuX2ZpbHRlcl90b3AgPSAyNTUsCi0JLnZpZGVvX2x1bWFfbWVkaWFuX2ZpbHRlcl9ib3R0b20gPSAwLAotCS52aWRlb19jaHJvbWFfbWVkaWFuX2ZpbHRlcl90b3AgPSAyNTUsCi0JLnZpZGVvX2Nocm9tYV9tZWRpYW5fZmlsdGVyX2JvdHRvbSA9IDAsCi0JfTsKLQogCSpwID0gZGVmYXVsdF9wYXJhbXM7CiAJY3gyMzQxeF9jYWxjX2F1ZGlvX3Byb3BlcnRpZXMocCk7CiB9CkBAIC05MzMsOSArOTU1LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3gyMzQxeF91cGRhdGUpOwogCi1zdGF0aWMgY29uc3QgY2hhciAqY3gyMzQxeF9tZW51X2l0ZW0oc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnAsIHUzMiBpZCkKK3N0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X21lbnVfaXRlbShjb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcCwgdTMyIGlkKQogewotCWNvbnN0IGNoYXIgKiptZW51ID0gY3gyMzQxeF9jdHJsX2dldF9tZW51KGlkKTsKKwljb25zdCBjaGFyICoqbWVudSA9IGN4MjM0MXhfY3RybF9nZXRfbWVudShwLCBpZCk7CiAJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgY3RybDsKIAogCWlmIChtZW51ID09IE5VTEwpCkBAIC05NTIsNyArOTc0LDcgQEAKIAlyZXR1cm4gIjxpbnZhbGlkPiI7CiB9CiAKLXZvaWQgY3gyMzQxeF9sb2dfc3RhdHVzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwLCBjb25zdCBjaGFyICpwcmVmaXgpCit2b2lkIGN4MjM0MXhfbG9nX3N0YXR1cyhjb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcCwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBpc19tcGVnMSA9IHAtPnZpZGVvX2VuY29kaW5nID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzE7CiAJaW50IHRlbXBvcmFsID0gcC0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZwppbmRleCA3YmYxNGM5Li41Y2ZiNDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZwpAQCAtOSwxMSArOSwxMyBAQAogCXNlbGVjdCBWSURFT19UVkVFUFJPTQogCXNlbGVjdCBWSURFT19JUgogCXNlbGVjdCBWSURFT0JVRl9EVkIKKwlzZWxlY3QgVklERU9CVUZfRE1BX1NHCiAJc2VsZWN0IFZJREVPX0NYMjU4NDAKIAlzZWxlY3QgVklERU9fQ1gyMzQxWAogCXNlbGVjdCBEVkJfRElCNzAwMFAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMTMxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TNUgxNDA5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TNUgxNDExIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIURWQl9GRV9DVVNUT01JWkUKIAlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwppbmRleCBhY2RkM2I2Li5lN2VmMDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwpAQCAtMTE3MywzNzkgKzExNzMsNDA0IEBACiAJcWN0cmwuaWQgPSBxbWVudS0+aWQ7CiAJY3gyMzg4NV9xdWVyeWN0cmwoZGV2LCAmcWN0cmwpOwogCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfbWVudShxbWVudSwgJnFjdHJsLAotCQljeDIzNDF4X2N0cmxfZ2V0X21lbnUocW1lbnUtPmlkKSk7CisJCWN4MjM0MXhfY3RybF9nZXRfbWVudSgmZGV2LT5tcGVnX3BhcmFtcywgcW1lbnUtPmlkKSk7CiB9CiAKLWludCBjeDIzODg1X2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgcmFkaW8sCi0Jc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZywKLQl2NGwyX2tpb2N0bCBkcml2ZXJfaW9jdGwpCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmlkKQogewotCWludCBlcnI7CisJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXVuc2lnbmVkIGludCBpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQkvKiAtLS0tLS0tLS0tIHR2IG5vcm1zIC0tLS0tLS0tLS0gKi8KLQljYXNlIFZJRElPQ19FTlVNU1REOgotCXsKLQkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKmUgPSBhcmc7Ci0JCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN4MjM4ODVfdHZub3Jtcyk7IGkrKykKKwkJaWYgKCppZCAmIGN4MjM4ODVfdHZub3Jtc1tpXS5pZCkKKwkJCWJyZWFrOworCWlmIChpID09IEFSUkFZX1NJWkUoY3gyMzg4NV90dm5vcm1zKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5lbmNvZGVybm9ybSA9IGN4MjM4ODVfdHZub3Jtc1tpXTsKKwlyZXR1cm4gMDsKK30KIAotCQlpID0gZS0+aW5kZXg7Ci0JCWlmIChpID49IEFSUkFZX1NJWkUoY3gyMzg4NV90dm5vcm1zKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQllcnIgPSB2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3QoZSwKLQkJCWN4MjM4ODVfdHZub3Jtc1tlLT5pbmRleF0uaWQsCi0JCQljeDIzODg1X3R2bm9ybXNbZS0+aW5kZXhdLm5hbWUpOwotCQllLT5pbmRleCA9IGk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKmlkID0gYXJnOworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjM4ODVfaW5wdXQgKmlucHV0OworCXVuc2lnbmVkIGludCBuOwogCi0JCSppZCA9IGRldi0+ZW5jb2Rlcm5vcm0uaWQ7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX1NURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKLQkJdW5zaWduZWQgaW50IGk7CisJbiA9IGktPmluZGV4OwogCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN4MjM4ODVfdHZub3Jtcyk7IGkrKykKLQkJCWlmICgqaWQgJiBjeDIzODg1X3R2bm9ybXNbaV0uaWQpCi0JCQkJYnJlYWs7Ci0JCWlmIChpID09IEFSUkFZX1NJWkUoY3gyMzg4NV90dm5vcm1zKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlkZXYtPmVuY29kZXJub3JtID0gY3gyMzg4NV90dm5vcm1zW2ldOworCWlmIChuID49IDQpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCXJldHVybiAwOwotCX0KKwlpbnB1dCA9ICZjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5pbnB1dFtuXTsKIAotCS8qIC0tLS0tLSBpbnB1dCBzd2l0Y2hpbmcgLS0tLS0tLS0tLSAqLwotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQl7Ci0JCXN0cnVjdCBjeDIzODg1X2lucHV0ICppbnB1dDsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0JCXVuc2lnbmVkIGludCBuOworCWlmIChpbnB1dC0+dHlwZSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQluID0gaS0+aW5kZXg7Ci0JCWlmIChuID49IDQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaW5wdXQgPSAmY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uaW5wdXRbbl07Ci0JCWlmIChpbnB1dC0+dHlwZSA9PSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKLQkJaS0+aW5kZXggPSBuOwotCQkvKiBGSVhNRQotCQkgKiBzdHJjcHkoaS0+bmFtZSwgaW5wdXQtPm5hbWUpOyAqLwotCQlzdHJjcHkoaS0+bmFtZSwgInVuc2V0Iik7Ci0JCWlmIChpbnB1dC0+dHlwZSA9PSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiB8fAotCQkgICAgaW5wdXQtPnR5cGUgPT0gQ1gyMzg4NV9WTVVYX0NBQkxFKQotCQkJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKLQkJZWxzZQotCQkJaS0+dHlwZSAgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKKwlpLT5pbmRleCA9IG47CiAKLQkJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUoY3gyMzg4NV90dm5vcm1zKTsgbisrKQotCQkJaS0+c3RkIHw9IGN4MjM4ODVfdHZub3Jtc1tuXS5pZDsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JewotCQl1bnNpZ25lZCBpbnQgKmkgPSBhcmc7CisJLyogRklYTUUKKwkgKiBzdHJjcHkoaS0+bmFtZSwgaW5wdXQtPm5hbWUpOyAqLworCXN0cmNweShpLT5uYW1lLCAidW5zZXQiKTsKIAotCQkqaSA9IGRldi0+aW5wdXQ7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCXsKLQkJdW5zaWduZWQgaW50ICppID0gYXJnOworCWlmIChpbnB1dC0+dHlwZSA9PSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiB8fAorCSAgICBpbnB1dC0+dHlwZSA9PSBDWDIzODg1X1ZNVVhfQ0FCTEUpCisJCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CisJZWxzZQorCQlpLT50eXBlICA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAKLQkJaWYgKCppID49IDQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShjeDIzODg1X3R2bm9ybXMpOyBuKyspCisJCWktPnN0ZCB8PSBjeDIzODg1X3R2bm9ybXNbbl0uaWQ7CisJcmV0dXJuIDA7Cit9CiAKLQkJcmV0dXJuIDA7Ci0JfQorc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKIAotCS8qIC0tLSB0dW5lciBpb2N0bHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JY2FzZSBWSURJT0NfR19UVU5FUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOworCSppID0gZGV2LT5pbnB1dDsKKwlyZXR1cm4gMDsKK30KIAotCQlpZiAoVU5TRVQgPT0gZGV2LT50dW5lcl90eXBlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICgwICE9IHQtPmluZGV4KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKLQkJc3RyY3B5KHQtPm5hbWUsICJUZWxldmlzaW9uIik7Ci0JCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfR19UVU5FUiwgdCk7Ci0JCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzFdLCBWSURJT0NfR19UVU5FUiwgdCk7Ci0KLQkJZHByaW50aygxLCAiVklESU9DX0dfVFVORVI6IHR1bmVyIHR5cGUgJWRcbiIsIHQtPnR5cGUpOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0KLQkJaWYgKFVOU0VUID09IGRldi0+dHVuZXJfdHlwZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIFVwZGF0ZSB0aGUgQS9WIGNvcmUgKi8KLQkJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19TX1RVTkVSLCB0KTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0KLQkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCQlpZiAoVU5TRVQgPT0gZGV2LT50dW5lcl90eXBlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWYtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJZi0+ZnJlcXVlbmN5ID0gZGV2LT5mcmVxOwotCi0JCS8qIEFzc3VtcHRpb24gdGhhdCB0dW5lciBpcyBhbHdheXMgb24gYnVzIDEgKi8KLQkJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sCi0JCQlWSURJT0NfR19GUkVRVUVOQ1ksIGYpOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKLQotCQlkcHJpbnRrKDEsICJWSURJT0NfU19GUkVRVUVOQ1k6IGRldiB0eXBlICVkLCBmXG4iLAotCQkJZGV2LT50dW5lcl90eXBlKTsKLQkJZHByaW50aygxLCAiVklESU9DX1NfRlJFUVVFTkNZOiBmIHR1bmVyICVkLCBmIHR5cGUgJWRcbiIsCi0JCQlmLT50dW5lciwgZi0+dHlwZSk7Ci0JCWlmIChVTlNFVCA9PSBkZXYtPnR1bmVyX3R5cGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGYtPnR1bmVyICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9BTkFMT0dfVFYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZGV2LT5mcmVxID0gZi0+ZnJlcXVlbmN5OwotCi0JCS8qIEFzc3VtcHRpb24gdGhhdCB0dW5lciBpcyBhbHdheXMgb24gYnVzIDEgKi8KLQkJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sCi0JCQlWSURJT0NfU19GUkVRVUVOQ1ksIGYpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19DVFJMOgotCXsKLQkJLyogVXBkYXRlIHRoZSBBL1YgY29yZSAqLwotCQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX1NfQ1RSTCwgYXJnKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWRlZmF1bHQ6Ci0JCS8qIENvbnZlcnQgVjRMIGlvY3RsIHRvIFY0TDIgYW5kIGNhbGwgbXBlZ19kb19pb2N0bAotCQkgKiAoZHJpdmVyX2lvY3RsKSAqLwotCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLAotCQkJCQkJICBkcml2ZXJfaW9jdGwpOwotCX0KK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQoreworCWlmIChpID49IDQpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXBlZ19kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmIChVTlNFVCA9PSBkZXYtPnR1bmVyX3R5cGUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgwICE9IHQtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CisJc3RyY3B5KHQtPm5hbWUsICJUZWxldmlzaW9uIik7CisJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19HX1RVTkVSLCB0KTsKKwljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX0dfVFVORVIsIHQpOworCisJZHByaW50aygxLCAiVklESU9DX0dfVFVORVI6IHR1bmVyIHR5cGUgJWRcbiIsIHQtPnR5cGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKFVOU0VUID09IGRldi0+dHVuZXJfdHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBVcGRhdGUgdGhlIEEvViBjb3JlICovCisJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19TX1RVTkVSLCB0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOworCWlmIChVTlNFVCA9PSBkZXYtPnR1bmVyX3R5cGUpCisJCXJldHVybiAtRUlOVkFMOworCWYtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwlmLT5mcmVxdWVuY3kgPSBkZXYtPmZyZXE7CisKKwkvKiBBc3N1bXB0aW9uIHRoYXQgdHVuZXIgaXMgYWx3YXlzIG9uIGJ1cyAxICovCisJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19HX0ZSRVFVRU5DWSwgZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWN4MjM4ODVfYXBpX2NtZChmaC0+ZGV2LCBDWDIzNDFYX0VOQ19TVE9QX0NBUFRVUkUsIDMsIDAsCisJCUNYMjM4ODVfRU5EX05PVywgQ1gyMzg4NV9NUEVHX0NBUFRVUkUsCisJCUNYMjM4ODVfUkFXX0JJVFNfTk9ORSk7CisKKwlkcHJpbnRrKDEsICJWSURJT0NfU19GUkVRVUVOQ1k6IGRldiB0eXBlICVkLCBmXG4iLAorCQlkZXYtPnR1bmVyX3R5cGUpOworCWRwcmludGsoMSwgIlZJRElPQ19TX0ZSRVFVRU5DWTogZiB0dW5lciAlZCwgZiB0eXBlICVkXG4iLAorCQlmLT50dW5lciwgZi0+dHlwZSk7CisJaWYgKFVOU0VUID09IGRldi0+dHVuZXJfdHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGYtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChmLT50eXBlICE9IFY0TDJfVFVORVJfQU5BTE9HX1RWKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CisKKwkvKiBBc3N1bXB0aW9uIHRoYXQgdHVuZXIgaXMgYWx3YXlzIG9uIGJ1cyAxICovCisJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19TX0ZSRVFVRU5DWSwgZik7CisKKwljeDIzODg1X2luaXRpYWxpemVfY29kZWMoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKKworCS8qIFVwZGF0ZSB0aGUgQS9WIGNvcmUgKi8KKwljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX1NfQ1RSTCwgY3RsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICAqdHNwb3J0ID0gJmRldi0+dHMxOwogCi0JaWYgKHY0bF9kZWJ1ZyA+IDEpCi0JCXY0bF9wcmludF9pb2N0bChkZXYtPm5hbWUsIGNtZCk7CisJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKKwlzdHJjcHkoY2FwLT5kcml2ZXIsIGRldi0+bmFtZSk7CisJc3RybGNweShjYXAtPmNhcmQsIGN4MjM4ODVfYm9hcmRzW3RzcG9ydC0+ZGV2LT5ib2FyZF0ubmFtZSwKKwkJc2l6ZW9mKGNhcC0+Y2FyZCkpOworCXNwcmludGYoY2FwLT5idXNfaW5mbywgIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGNpKSk7CisJY2FwLT52ZXJzaW9uID0gQ1gyMzg4NV9WRVJTSU9OX0NPREU7CisJY2FwLT5jYXBhYmlsaXRpZXMgPQorCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJVjRMMl9DQVBfUkVBRFdSSVRFICAgICB8CisJCVY0TDJfQ0FQX1NUUkVBTUlORyAgICAgfAorCQkwOworCWlmIChVTlNFVCAhPSBkZXYtPnR1bmVyX3R5cGUpCisJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOwogCi0Jc3dpdGNoIChjbWQpIHsKLQotCS8qIC0tLSBjYXBhYmlsaXRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JY2FzZSBWSURJT0NfUVVFUllDQVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKLQkJc3RyY3B5KGNhcC0+ZHJpdmVyLCBkZXYtPm5hbWUpOwotCQlzdHJsY3B5KGNhcC0+Y2FyZCwgY3gyMzg4NV9ib2FyZHNbdHNwb3J0LT5kZXYtPmJvYXJkXS5uYW1lLAotCQkJc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCQlzcHJpbnRmKGNhcC0+YnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShkZXYtPnBjaSkpOwotCQljYXAtPnZlcnNpb24gPSBDWDIzODg1X1ZFUlNJT05fQ09ERTsKLQkJY2FwLT5jYXBhYmlsaXRpZXMgPQotCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8Ci0JCQlWNEwyX0NBUF9SRUFEV1JJVEUgICAgIHwKLQkJCVY0TDJfQ0FQX1NUUkVBTUlORyAgICAgfAotCQkJMDsKLQkJaWYgKFVOU0VUICE9IGRldi0+dHVuZXJfdHlwZSkKLQkJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOwotCi0JCXJldHVybiAwOwotCX0KLQotCS8qIC0tLSBjYXB0dXJlIGlvY3RscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmID0gYXJnOwotCQlpbnQgaW5kZXg7Ci0KLQkJaW5kZXggPSBmLT5pbmRleDsKLQkJaWYgKGluZGV4ICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7Ci0JCWYtPmluZGV4ID0gaW5kZXg7Ci0JCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHIiwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7Ci0JCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQotCQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7Ci0JCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7Ci0JCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKLQkJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPQotCQkJZGV2LT50czEudHNfcGFja2V0X3NpemUgKiBkZXYtPnRzMS50c19wYWNrZXRfY291bnQ7Ci0JCWYtPmZtdC5waXguY29sb3JzcGFjZSAgID0gMDsKLQkJZi0+Zm10LnBpeC53aWR0aCAgICAgICAgPSBkZXYtPnRzMS53aWR0aDsKLQkJZi0+Zm10LnBpeC5oZWlnaHQgICAgICAgPSBkZXYtPnRzMS5oZWlnaHQ7Ci0JCWYtPmZtdC5waXguZmllbGQgICAgICAgID0gZmgtPm1wZWdxLmZpZWxkOwotCQlkcHJpbnRrKDEsICJWSURJT0NfR19GTVQ6IHc6ICVkLCBoOiAlZCwgZjogJWRcbiIsCi0JCQlkZXYtPnRzMS53aWR0aCwgZGV2LT50czEuaGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfVFJZX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQotCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOwotCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7Ci0JCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0KLQkJCWRldi0+dHMxLnRzX3BhY2tldF9zaXplICogZGV2LT50czEudHNfcGFja2V0X2NvdW50OwotCQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9Ci0JCWYtPmZtdC5waXguY29sb3JzcGFjZSAgID0gMDsKLQkJZHByaW50aygxLCAiVklESU9DX1RSWV9GTVQ6IHc6ICVkLCBoOiAlZCwgZjogJWRcbiIsCi0JCQlkZXYtPnRzMS53aWR0aCwgZGV2LT50czEuaGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0KLQkJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKLQkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9Ci0JCQlkZXYtPnRzMS50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHMxLnRzX3BhY2tldF9jb3VudDsKLQkJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOwotCQlkcHJpbnRrKDEsICJWSURJT0NfU19GTVQ6IHc6ICVkLCBoOiAlZCwgZjogJWRcbiIsCi0JCQlmLT5mbXQucGl4LndpZHRoLCBmLT5mbXQucGl4LmhlaWdodCwgZi0+Zm10LnBpeC5maWVsZCk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIC0tLSBzdHJlYW1pbmcgY2FwdHVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JY2FzZSBWSURJT0NfUkVRQlVGUzoKLQkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT5tcGVncSwgYXJnKTsKLQotCWNhc2UgVklESU9DX1FVRVJZQlVGOgotCQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT5tcGVncSwgYXJnKTsKLQotCWNhc2UgVklESU9DX1FCVUY6Ci0JCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+bXBlZ3EsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19EUUJVRjoKLQkJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+bXBlZ3EsIGFyZywKLQkJCQkgICAgICBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PTjoKLQkJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+bXBlZ3EpOwotCi0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgotCQlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+bXBlZ3EpOwotCi0JY2FzZSBWSURJT0NfR19FWFRfQ1RSTFM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmYgPSBhcmc7Ci0KLQkJaWYgKGYtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIGN4MjM0MXhfZXh0X2N0cmxzKCZkZXYtPm1wZWdfcGFyYW1zLCAwLCBmLCBjbWQpOwotCX0KLQljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKLQljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTOgotCXsKLQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpmID0gYXJnOwotCQlzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyBwOwotCQlpbnQgZXJyOwotCi0JCWlmIChmLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXAgPSBkZXYtPm1wZWdfcGFyYW1zOwotCQllcnIgPSBjeDIzNDF4X2V4dF9jdHJscygmcCwgMCwgZiwgY21kKTsKLQkJaWYgKGVyciA9PSAwICYmIGNtZCA9PSBWSURJT0NfU19FWFRfQ1RSTFMpIHsKLQkJCWVyciA9IGN4MjM0MXhfdXBkYXRlKGRldiwgY3gyMzg4NV9tYm94X2Z1bmMsCi0JCQkJJmRldi0+bXBlZ19wYXJhbXMsICZwKTsKLQkJCWRldi0+bXBlZ19wYXJhbXMgPSBwOwotCQl9Ci0JCXJldHVybiBlcnI7Ci0JfQotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCXsKLQkJY3gyMzg4NV9hcGlfY21kKGZoLT5kZXYsIENYMjM0MVhfRU5DX1NUT1BfQ0FQVFVSRSwgMywgMCwKLQkJCUNYMjM4ODVfRU5EX05PVywgQ1gyMzg4NV9NUEVHX0NBUFRVUkUsCi0JCQlDWDIzODg1X1JBV19CSVRTX05PTkUpOwotCQljeDIzODg1X2RvX2lvY3RsKGlub2RlLCBmaWxlLCAwLCBkZXYsIGNtZCwgYXJnLAotCQkJbXBlZ19kb19pb2N0bCk7Ci0JCWN4MjM4ODVfaW5pdGlhbGl6ZV9jb2RlYyhkZXYpOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCXsKLQkJY2hhciBuYW1lWzMyICsgMl07Ci0KLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzBdLCBWSURJT0NfTE9HX1NUQVRVUywKLQkJCU5VTEwpOwotCQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX0xPR19TVEFUVVMsCi0JCQlOVUxMKTsKLQkJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19MT0dfU1RBVFVTLAotCQkJTlVMTCk7Ci0JCWN4MjM0MXhfbG9nX3N0YXR1cygmZGV2LT5tcGVnX3BhcmFtcywgbmFtZSk7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JCXJldHVybiBjeDIzODg1X3F1ZXJ5bWVudShkZXYsIGFyZyk7Ci0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjID0gYXJnOwotCi0JCXJldHVybiBjeDIzODg1X3F1ZXJ5Y3RybChkZXYsIGMpOwotCX0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiBjeDIzODg1X2RvX2lvY3RsKGlub2RlLCBmaWxlLCAwLCBkZXYsIGNtZCwgYXJnLAotCQkJCW1wZWdfZG9faW9jdGwpOwotCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtcGVnX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBtcGVnX2RvX2lvY3RsKTsKKwlpbnQgaW5kZXg7CisKKwlpbmRleCA9IGYtPmluZGV4OworCWlmIChpbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKKwlmLT5pbmRleCA9IGluZGV4OworCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHIiwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CisJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKKworCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKKwlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0KKwkJZGV2LT50czEudHNfcGFja2V0X3NpemUgKiBkZXYtPnRzMS50c19wYWNrZXRfY291bnQ7CisJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOworCWYtPmZtdC5waXgud2lkdGggICAgICAgID0gZGV2LT50czEud2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQgICAgICAgPSBkZXYtPnRzMS5oZWlnaHQ7CisJZi0+Zm10LnBpeC5maWVsZCAgICAgICAgPSBmaC0+bXBlZ3EuZmllbGQ7CisJZHByaW50aygxLCAiVklESU9DX0dfRk1UOiB3OiAlZCwgaDogJWQsIGY6ICVkXG4iLAorCQlkZXYtPnRzMS53aWR0aCwgZGV2LT50czEuaGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPQorCQlkZXYtPnRzMS50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHMxLnRzX3BhY2tldF9jb3VudDsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9CisJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOworCWRwcmludGsoMSwgIlZJRElPQ19UUllfRk1UOiB3OiAlZCwgaDogJWQsIGY6ICVkXG4iLAorCQlkZXYtPnRzMS53aWR0aCwgZGV2LT50czEuaGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0KKwkJZGV2LT50czEudHNfcGFja2V0X3NpemUgKiBkZXYtPnRzMS50c19wYWNrZXRfY291bnQ7CisJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOworCWRwcmludGsoMSwgIlZJRElPQ19TX0ZNVDogdzogJWQsIGg6ICVkLCBmOiAlZFxuIiwKKwkJZi0+Zm10LnBpeC53aWR0aCwgZi0+Zm10LnBpeC5oZWlnaHQsIGYtPmZtdC5waXguZmllbGQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpwKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT5tcGVncSwgcCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPm1wZWdxLCBwKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPm1wZWdxLCBwKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IHByaXY7CisKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT5tcGVncSwgYiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorCisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+bXBlZ3EpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPm1wZWdxKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpmKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAoZi0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGN4MjM0MXhfZXh0X2N0cmxzKCZkZXYtPm1wZWdfcGFyYW1zLCAwLCBmLCBWSURJT0NfR19FWFRfQ1RSTFMpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmYpCit7CisJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBwcml2OworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyBwOworCWludCBlcnI7CisKKwlpZiAoZi0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwID0gZGV2LT5tcGVnX3BhcmFtczsKKwllcnIgPSBjeDIzNDF4X2V4dF9jdHJscygmcCwgMCwgZiwgVklESU9DX1NfRVhUX0NUUkxTKTsKKworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBjeDIzNDF4X3VwZGF0ZShkZXYsIGN4MjM4ODVfbWJveF9mdW5jLAorCQkJJmRldi0+bXBlZ19wYXJhbXMsICZwKTsKKwkJZGV2LT5tcGVnX3BhcmFtcyA9IHA7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpmKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgcDsKKwlpbnQgZXJyOworCisJaWYgKGYtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJcCA9IGRldi0+bXBlZ19wYXJhbXM7CisJZXJyID0gY3gyMzQxeF9leHRfY3RybHMoJnAsIDAsIGYsIFZJRElPQ19UUllfRVhUX0NUUkxTKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CisJY2hhciBuYW1lWzMyICsgMl07CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPCisJCSIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1swXSwgVklESU9DX0xPR19TVEFUVVMsCisJCU5VTEwpOworCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzFdLCBWSURJT0NfTE9HX1NUQVRVUywKKwkJTlVMTCk7CisJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19MT0dfU1RBVFVTLAorCQlOVUxMKTsKKwljeDIzNDF4X2xvZ19zdGF0dXMoJmRldi0+bXBlZ19wYXJhbXMsIG5hbWUpOworCXByaW50ayhLRVJOX0lORk8KKwkJIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeW1lbnUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICphKQoreworCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlyZXR1cm4gY3gyMzg4NV9xdWVyeW1lbnUoZGV2LCBhKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYykKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IHByaXY7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJcmV0dXJuIGN4MjM4ODVfcXVlcnljdHJsKGRldiwgYyk7CiB9CiAKIHN0YXRpYyBpbnQgbXBlZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTY3MCw3ICsxNjk1LDcgQEAKIAkucmVhZAkgICAgICAgPSBtcGVnX3JlYWQsCiAJLnBvbGwgICAgICAgICAgPSBtcGVnX3BvbGwsCiAJLm1tYXAJICAgICAgID0gbXBlZ19tbWFwLAotCS5pb2N0bAkgICAgICAgPSBtcGVnX2lvY3RsLAorCS5pb2N0bAkgICAgICAgPSB2aWRlb19pb2N0bDIsCiAJLmxsc2VlayAgICAgICAgPSBub19sbHNlZWssCiB9OwogCkBAIC0xNjgyLDYgKzE3MDcsMzIgQEAKIAkJCQlWSURfVFlQRV9NUEVHX0VOQ09ERVIsCiAJLmZvcHMgICAgICAgICAgPSAmbXBlZ19mb3BzLAogCS5taW5vciAgICAgICAgID0gLTEsCisJLnZpZGlvY19zX3N0ZAkJID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfZW51bV9pbnB1dAkgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQJCSA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dAkJID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX3R1bmVyCQkgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIJCSA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kJID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kJID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19jdHJsCQkgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljYXAJID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcAkgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcAkgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3JlcWJ1ZnMJCSA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJID0gdmlkaW9jX2RxYnVmLAorCS52aWRpb2Nfc3RyZWFtb24JID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCSA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19nX2V4dF9jdHJscwkgPSB2aWRpb2NfZ19leHRfY3RybHMsCisJLnZpZGlvY19zX2V4dF9jdHJscwkgPSB2aWRpb2Nfc19leHRfY3RybHMsCisJLnZpZGlvY190cnlfZXh0X2N0cmxzCSA9IHZpZGlvY190cnlfZXh0X2N0cmxzLAorCS52aWRpb2NfbG9nX3N0YXR1cwkgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX3F1ZXJ5bWVudQkgPSB2aWRpb2NfcXVlcnltZW51LAorCS52aWRpb2NfcXVlcnljdHJsCSA9IHZpZGlvY19xdWVyeWN0cmwsCiB9OwogCiB2b2lkIGN4MjM4ODVfNDE3X3VucmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwppbmRleCAyMGUwNWYyLi5mZDcxMTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKQEAgLTE0Myw2ICsxNDMsMTAgQEAKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIxNDAwIiwKIAkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJfSwKKwlbQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfRFVBTF9FWFBdID0geworCQkubmFtZQkJPSAiRFZpQ08gRnVzaW9uSERUVjcgRHVhbCBFeHByZXNzIiwKKwkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtMjEwLDYgKzIxNCwxMCBAQAogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg4MDEwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMCwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MThhYywKKwkJLnN1YmRldmljZSA9IDB4ZDYxOCwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0RVQUxfRVhQLAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9zdWJpZHMpOwpAQCAtNDc3LDYgKzQ4NSwxMSBAQAogCX0KIAogCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfRFVBTF9FWFA6CisJCXRzMi0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLworCQl0czItPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KKwkJdHMyLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CisJCS8qIGJyZWFrIG9taXR0ZWQgaW50ZW50aW9uYWxseSAqLwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfRVhQOgogCQl0czEtPmdlbl9jdHJsX3ZhbCAgPSAweGM7IC8qIFNlcmlhbCBidXMgKyBwdW5jdHVyZWQgY2xvY2sgKi8KIAkJdHMxLT50c19jbGtfZW5fdmFsID0gMHgxOyAvKiBFbmFibGUgVFNfQ0xLICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKaW5kZXggYzRjYzJmMy4uZDE3MzQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwpAQCAtMjkxLDkgKzI5MSw5IEBACiAJCWxpbmVzID0gNjsKIAlCVUdfT04obGluZXMgPCAyKTsKIAotCWN4X3dyaXRlKDggKyAwLCBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpICk7Ci0JY3hfd3JpdGUoOCArIDQsIGNwdV90b19sZTMyKDgpICk7Ci0JY3hfd3JpdGUoOCArIDgsIGNwdV90b19sZTMyKDApICk7CisJY3hfd3JpdGUoOCArIDAsIFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJY3hfd3JpdGUoOCArIDQsIDgpOworCWN4X3dyaXRlKDggKyA4LCAwKTsKIAogCS8qIHdyaXRlIENEVCAqLwogCWZvciAoaSA9IDA7IGkgPCBsaW5lczsgaSsrKSB7CkBAIC00MDgsMTEgKzQwOCwxMSBAQAogCSAgICAgICBkZXYtPm5hbWUsIHJpc2MtPmNwdSwgKHVuc2lnbmVkIGxvbmcpcmlzYy0+ZG1hKTsKIAlmb3IgKGkgPSAwOyBpIDwgKHJpc2MtPnNpemUgPj4gMik7IGkgKz0gbikgewogCQlwcmludGsoIiVzOiAgICUwNGQ6ICIsIGRldi0+bmFtZSwgaSk7Ci0JCW4gPSBjeDIzODg1X3Jpc2NfZGVjb2RlKHJpc2MtPmNwdVtpXSk7CisJCW4gPSBjeDIzODg1X3Jpc2NfZGVjb2RlKGxlMzJfdG9fY3B1KHJpc2MtPmNwdVtpXSkpOwogCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKQogCQkJcHJpbnRrKCIlczogICAlMDRkOiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBpICsgaiwgcmlzYy0+Y3B1W2kgKyBqXSwgaik7Ci0JCWlmIChyaXNjLT5jcHVbaV0gPT0gUklTQ19KVU1QKQorCQlpZiAocmlzYy0+Y3B1W2ldID09IGNwdV90b19sZTMyKFJJU0NfSlVNUCkpCiAJCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCmluZGV4IDAyMmFhMzkuLjBhMmU2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAogI2luY2x1ZGUgInM1aDE0MDkuaCIKKyNpbmNsdWRlICJzNWgxNDExLmgiCiAjaW5jbHVkZSAibXQyMTMxLmgiCiAjaW5jbHVkZSAidGRhODI5MC5oIgogI2luY2x1ZGUgInRkYTE4MjcxLmgiCkBAIC0xNjQsMTIgKzE2NSwzOCBAQAogCS5tcGVnX3RpbWluZyAgID0gUzVIMTQwOV9NUEVHVElNSU5HX0NPTlRJTk9VU19OT05JTlZFUlRJTkdfQ0xPQ0ssCiB9OwogCitzdGF0aWMgc3RydWN0IHM1aDE0MDlfY29uZmlnIGR2aWNvX3M1aDE0MDlfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgzMiA+PiAxLAorCS5vdXRwdXRfbW9kZSAgID0gUzVIMTQwOV9TRVJJQUxfT1VUUFVULAorCS5ncGlvICAgICAgICAgID0gUzVIMTQwOV9HUElPX09OLAorCS5xYW1faWYgICAgICAgID0gNDQwMDAsCisJLmludmVyc2lvbiAgICAgPSBTNUgxNDA5X0lOVkVSU0lPTl9PRkYsCisJLnN0YXR1c19tb2RlICAgPSBTNUgxNDA5X0RFTU9ETE9DS0lORywKKwkubXBlZ190aW1pbmcgICA9IFM1SDE0MDlfTVBFR1RJTUlOR19DT05USU5PVVNfTk9OSU5WRVJUSU5HX0NMT0NLLAorfTsKKworc3RhdGljIHN0cnVjdCBzNWgxNDExX2NvbmZpZyBkdmljb19zNWgxNDExX2NvbmZpZyA9IHsKKwkub3V0cHV0X21vZGUgICA9IFM1SDE0MTFfU0VSSUFMX09VVFBVVCwKKwkuZ3BpbyAgICAgICAgICA9IFM1SDE0MTFfR1BJT19PTiwKKwkucWFtX2lmICAgICAgICA9IFM1SDE0MTFfSUZfNDQwMDAsCisJLnZzYl9pZiAgICAgICAgPSBTNUgxNDExX0lGXzQ0MDAwLAorCS5pbnZlcnNpb24gICAgID0gUzVIMTQxMV9JTlZFUlNJT05fT0ZGLAorCS5zdGF0dXNfbW9kZSAgID0gUzVIMTQxMV9ERU1PRExPQ0tJTkcsCisJLm1wZWdfdGltaW5nICAgPSBTNUgxNDExX01QRUdUSU1JTkdfQ09OVElOT1VTX05PTklOVkVSVElOR19DTE9DSywKK307CisKIHN0YXRpYyBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyBoYXVwcGF1Z2VfaHZyMTUwMHFfdHVuZXJjb25maWcgPSB7CiAJLmkyY19hZGRyZXNzICAgICAgPSAweDYxLAogCS5pZl9raHogICAgICAgICAgID0gNTM4MCwKIAkudHVuZXJfY2FsbGJhY2sgICA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2sKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyBkdmljb194YzUwMDBfdHVuZXJjb25maWcgPSB7CisJLmkyY19hZGRyZXNzICAgICAgPSAweDY0LAorCS5pZl9raHogICAgICAgICAgID0gNTM4MCwKKwkudHVuZXJfY2FsbGJhY2sgICA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2sKK307CisKIHN0YXRpYyBzdHJ1Y3QgdGRhODI5eF9jb25maWcgdGRhODI5eF9ub19wcm9iZSA9IHsKIAkucHJvYmVfdHVuZXIgPSBUREE4MjlYX0RPTlRfUFJPQkUsCiB9OwpAQCAtNDUzLDYgKzQ4MCwyMSBAQAogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfRFVBTF9FWFA6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzW3BvcnQtPm5yIC0gMV07CisKKwkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJCQkJCSZkdmljb19zNWgxNDA5X2NvbmZpZywKKwkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKKwkJCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQxMV9hdHRhY2gsCisJCQkJCQkJJmR2aWNvX3M1aDE0MTFfY29uZmlnLAorCQkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCwKKwkJCQkmZHZpY29feGM1MDAwX3R1bmVyY29uZmlnLCBpMmNfYnVzKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IDg0NjUyMjEuLjA0M2ZjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtOTE1LDcgKzkxNSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIFZJREVPIElPQ1RMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9maCAqZmggICA9IHByaXY7CkBAIC05MzIsNyArOTMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyMzg4NV9maCAqKXByaXYpLT5kZXY7CkBAIC05ODMsNyArOTgzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IGN4MjM4ODVfZmggKmZoID0gcHJpdjsKQEAgLTk5MSw3ICs5OTEsNyBAQAogCWludCBlcnI7CiAKIAlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JZXJyID0gdmlkaW9jX3RyeV9mbXRfY2FwKGZpbGUsIHByaXYsIGYpOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7CiAKIAlpZiAoMCAhPSBlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKIAlpZiAodW5saWtlbHkoZi0+aW5kZXggPj0gQVJSQVlfU0laRShmb3JtYXRzKSkpCkBAIC0xNDQwLDEzICsxNDQwLDEzIEBACiAJLmZvcHMgICAgICAgICAgICAgICAgID0gJnZpZGVvX2ZvcHMsCiAJLm1pbm9yICAgICAgICAgICAgICAgID0gLTEsCiAJLnZpZGlvY19xdWVyeWNhcCAgICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZW51bV9mbXRfY2FwICA9IHZpZGlvY19lbnVtX2ZtdF9jYXAsCi0JLnZpZGlvY19nX2ZtdF9jYXAgICAgID0gdmlkaW9jX2dfZm10X2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfY2FwICAgPSB2aWRpb2NfdHJ5X2ZtdF9jYXAsCi0JLnZpZGlvY19zX2ZtdF9jYXAgICAgID0gdmlkaW9jX3NfZm10X2NhcCwKLQkudmlkaW9jX2dfZm10X3ZiaSAgICAgPSBjeDIzODg1X3ZiaV9mbXQsCi0JLnZpZGlvY190cnlfZm10X3ZiaSAgID0gY3gyMzg4NV92YmlfZm10LAotCS52aWRpb2Nfc19mbXRfdmJpICAgICA9IGN4MjM4ODVfdmJpX2ZtdCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgICAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZiaV9jYXAgICAgID0gY3gyMzg4NV92YmlfZm10LAorCS52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwICAgPSBjeDIzODg1X3ZiaV9mbXQsCisJLnZpZGlvY19zX2ZtdF92YmlfY2FwICAgICA9IGN4MjM4ODVfdmJpX2ZtdCwKIAkudmlkaW9jX3JlcWJ1ZnMgICAgICAgPSB2aWRpb2NfcmVxYnVmcywKIAkudmlkaW9jX3F1ZXJ5YnVmICAgICAgPSB2aWRpb2NfcXVlcnlidWYsCiAJLnZpZGlvY19xYnVmICAgICAgICAgID0gdmlkaW9jX3FidWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAppbmRleCAzMmFmODdmLi4wMGRmZGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTYzLDYgKzYzLDcgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTIwMCAgICAgICAgNwogI2RlZmluZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNzAwICAgICAgICA4CiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE0MDAgICAgICAgIDkKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfRFVBTF9FWFAgMTAKIAogLyogQ3VycmVudGx5IHVuc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXI6IFBBTC9ILCBOVFNDL0tyLCBTRUNBTSBCL0cvSC9MQyAqLwogI2RlZmluZSBDWDIzODg1X05PUk1TIChcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggMWRhNmYxMy4uZTdiZjRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwpAQCAtNTAsNyArNTAsNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDg4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLQogaW50IGN4MjU4NDBfZGVidWc7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZyxjeDI1ODQwX2RlYnVnLCBpbnQsIDA2NDQpOwpAQCAtMjM4LDcgKzIzNyw3IEBACiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4OGQzLCAweDFmKTsKIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZTMsIDB4MDMpOwogCi0JY3gyNTg0MF92Ymlfc2V0dXAoY2xpZW50KTsKKwljeDI1ODQwX3N0ZF9zZXR1cChjbGllbnQpOwogCiAJLyogdHJpYWwgYW5kIGVycm9yIHNheXMgdGhlc2UgYXJlIG5lZWRlZCB0byBnZXQgYXVkaW8gKi8KIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg5MTQsIDB4YTApOwpAQCAtMzM4LDcgKzMzNyw3IEBACiAJZmluaXNoX3dhaXQoJnN0YXRlLT5md193YWl0LCAmd2FpdCk7CiAJZGVzdHJveV93b3JrcXVldWUocSk7CiAKLQljeDI1ODQwX3ZiaV9zZXR1cChjbGllbnQpOworCWN4MjU4NDBfc3RkX3NldHVwKGNsaWVudCk7CiAKIAkvKiAocmUpc2V0IGlucHV0ICovCiAJc2V0X2lucHV0KGNsaWVudCwgc3RhdGUtPnZpZF9pbnB1dCwgc3RhdGUtPmF1ZF9pbnB1dCk7CkBAIC0zNDksNiArMzQ4LDE1MyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCit2b2lkIGN4MjU4NDBfc3RkX3NldHVwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdjRsMl9zdGRfaWQgc3RkID0gc3RhdGUtPnN0ZDsKKwlpbnQgaGJsYW5rLCBoYWN0aXZlLCBidXJzdCwgdmJsYW5rLCB2YWN0aXZlLCBzYzsKKwlpbnQgdmJsYW5rNjU2LCBzcmNfZGVjaW1hdGlvbjsKKwlpbnQgbHVtYV9scGYsIHV2X2xwZiwgY29tYjsKKwl1MzIgcGxsX2ludCwgcGxsX2ZyYWMsIHBsbF9wb3N0OworCisJLyogZGF0YXNoZWV0IHN0YXJ0dXAsIHN0ZXAgOGQgKi8KKwlpZiAoc3RkICYgflY0TDJfU1REX05UU0MpCisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ5ZiwgMHgxMSk7CisJZWxzZQorCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0OWYsIDB4MTQpOworCisJaWYgKHN0ZCAmIFY0TDJfU1REXzYyNV81MCkgeworCQloYmxhbmsgPSAxMzI7CisJCWhhY3RpdmUgPSA3MjA7CisJCWJ1cnN0ID0gOTM7CisJCXZibGFuayA9IDM2OworCQl2YWN0aXZlID0gNTgwOworCQl2Ymxhbms2NTYgPSA0MDsKKwkJc3JjX2RlY2ltYXRpb24gPSAweDIxZjsKKwkJbHVtYV9scGYgPSAyOworCisJCWlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgeworCQkJdXZfbHBmID0gMDsKKwkJCWNvbWIgPSAwOworCQkJc2MgPSAweDBhNDI1ZjsKKwkJfSBlbHNlIGlmIChzdGQgPT0gVjRMMl9TVERfUEFMX05jKSB7CisJCQl1dl9scGYgPSAxOworCQkJY29tYiA9IDB4MjA7CisJCQlzYyA9IDU1NjQ1MzsKKwkJfSBlbHNlIHsKKwkJCXV2X2xwZiA9IDE7CisJCQljb21iID0gMHgyMDsKKwkJCXNjID0gNjg4NzM5OworCQl9CisJfSBlbHNlIHsKKwkJaGFjdGl2ZSA9IDcyMDsKKwkJaGJsYW5rID0gMTIyOworCQl2YWN0aXZlID0gNDg3OworCQlsdW1hX2xwZiA9IDE7CisJCXV2X2xwZiA9IDE7CisKKwkJc3JjX2RlY2ltYXRpb24gPSAweDIxZjsKKwkJaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfNjApIHsKKwkJCXZibGFuayA9IDI2OworCQkJdmJsYW5rNjU2ID0gMjY7CisJCQlidXJzdCA9IDB4NWI7CisJCQlsdW1hX2xwZiA9IDI7CisJCQljb21iID0gMHgyMDsKKwkJCXNjID0gNjg4NzM5OworCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTSkgeworCQkJdmJsYW5rID0gMjA7CisJCQl2Ymxhbms2NTYgPSAyNDsKKwkJCWJ1cnN0ID0gMHg2MTsKKwkJCWNvbWIgPSAweDIwOworCQkJc2MgPSA1NTU0NTI7CisJCX0gZWxzZSB7CisJCQl2YmxhbmsgPSAyNjsKKwkJCXZibGFuazY1NiA9IDI2OworCQkJYnVyc3QgPSAweDViOworCQkJY29tYiA9IDB4NjY7CisJCQlzYyA9IDU1NjA2MzsKKwkJfQorCX0KKworCS8qIERFQlVHOiBEaXNwbGF5cyBjb25maWd1cmVkIFBMTCBmcmVxdWVuY3kgKi8KKwlwbGxfaW50ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMDgpOworCXBsbF9mcmFjID0gY3gyNTg0MF9yZWFkNChjbGllbnQsIDB4MTBjKSAmIDB4MWZmZmZmZjsKKwlwbGxfcG9zdCA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTA5KTsKKwl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwKKwkJCQkiUExMIHJlZ3MgPSBpbnQ6ICV1LCBmcmFjOiAldSwgcG9zdDogJXVcbiIsCisJCQkJcGxsX2ludCwgcGxsX2ZyYWMsIHBsbF9wb3N0KTsKKworCWlmIChwbGxfcG9zdCkgeworCQlpbnQgZmluLCBmc2M7CisJCWludCBwbGwgPSAoMjg2MzYzNjNMICogKCgoKHU2NClwbGxfaW50KSA8PCAyNUwpICsgcGxsX2ZyYWMpKSA+PiAyNUw7CisKKwkJcGxsIC89IHBsbF9wb3N0OworCQl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwgIlBMTCA9ICVkLiUwNmQgTUh6XG4iLAorCQkJCXBsbCAvIDEwMDAwMDAsIHBsbCAlIDEwMDAwMDApOworCQl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwgIlBMTC84ID0gJWQuJTA2ZCBNSHpcbiIsCisJCQkJcGxsIC8gODAwMDAwMCwgKHBsbCAvIDgpICUgMTAwMDAwMCk7CisKKwkJZmluID0gKCh1NjQpc3JjX2RlY2ltYXRpb24gKiBwbGwpID4+IDEyOworCQl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwKKwkJCQkiQURDIFNhbXBsaW5nIGZyZXEgPSAlZC4lMDZkIE1IelxuIiwKKwkJCQlmaW4gLyAxMDAwMDAwLCBmaW4gJSAxMDAwMDAwKTsKKworCQlmc2MgPSAoKCh1NjQpc2MpICogcGxsKSA+PiAyNEw7CisJCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LAorCQkJCSJDaHJvbWEgc3ViLWNhcnJpZXIgZnJlcSA9ICVkLiUwNmQgTUh6XG4iLAorCQkJCWZzYyAvIDEwMDAwMDAsIGZzYyAlIDEwMDAwMDApOworCisJCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAiaGJsYW5rICVpLCBoYWN0aXZlICVpLCAiCisJCQkidmJsYW5rICVpLCB2YWN0aXZlICVpLCB2Ymxhbms2NTYgJWksIHNyY19kZWMgJWksICIKKwkJCSJidXJzdCAweCUwMngsIGx1bWFfbHBmICVpLCB1dl9scGYgJWksIGNvbWIgMHglMDJ4LCAiCisJCQkic2MgMHglMDZ4XG4iLAorCQkJaGJsYW5rLCBoYWN0aXZlLCB2YmxhbmssIHZhY3RpdmUsIHZibGFuazY1NiwKKwkJCXNyY19kZWNpbWF0aW9uLCBidXJzdCwgbHVtYV9scGYsIHV2X2xwZiwgY29tYiwgc2MpOworCX0KKworCS8qIFNldHMgaG9yaXpvbnRhbCBibGFua2luZyBkZWxheSBhbmQgYWN0aXZlIGxpbmVzICovCisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDcwLCBoYmxhbmspOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3MSwKKwkJCTB4ZmYgJiAoKChoYmxhbmsgPj4gOCkgJiAweDMpIHwgKGhhY3RpdmUgPDwgNCkpKTsKKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzIsIGhhY3RpdmUgPj4gNCk7CisKKwkvKiBTZXRzIGJ1cnN0IGdhdGUgZGVsYXkgKi8KKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzMsIGJ1cnN0KTsKKworCS8qIFNldHMgdmVydGljYWwgYmxhbmtpbmcgZGVsYXkgYW5kIGFjdGl2ZSBkdXJhdGlvbiAqLworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3NCwgdmJsYW5rKTsKKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzUsCisJCQkweGZmICYgKCgodmJsYW5rID4+IDgpICYgMHgzKSB8ICh2YWN0aXZlIDw8IDQpKSk7CisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDc2LCB2YWN0aXZlID4+IDQpOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3NywgdmJsYW5rNjU2KTsKKworCS8qIFNldHMgc3JjIGRlY2ltYXRpb24gcmF0ZSAqLworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3OCwgMHhmZiAmIHNyY19kZWNpbWF0aW9uKTsKKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzksIDB4ZmYgJiAoc3JjX2RlY2ltYXRpb24gPj4gOCkpOworCisJLyogU2V0cyBMdW1hIGFuZCBVViBMb3cgcGFzcyBmaWx0ZXJzICovCisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDdhLCBsdW1hX2xwZiA8PCA2IHwgKCh1dl9scGYgPDwgNCkgJiAweDMwKSk7CisKKwkvKiBFbmFibGVzIGNvbWIgZmlsdGVycyAqLworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3YiwgY29tYik7CisKKwkvKiBTZXRzIFNDIFN0ZXAqLworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3Yywgc2MpOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZCwgMHhmZiAmIHNjID4+IDgpOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZSwgMHhmZiAmIHNjID4+IDE2KTsKKworCS8qIFNldHMgVkJJIHBhcmFtZXRlcnMgKi8KKwlpZiAoc3RkICYgVjRMMl9TVERfNjI1XzUwKSB7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZiwgMHgwMSk7CisJCXN0YXRlLT52YmlfbGluZV9vZmZzZXQgPSA1OworCX0gZWxzZSB7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZiwgMHgwMCk7CisJCXN0YXRlLT52YmlfbGluZV9vZmZzZXQgPSA4OworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogc3RhdGljIHZvaWQgaW5wdXRfY2hhbmdlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CkBAIC01NjYsNyArNzEyLDcgQEAKIAl9CiAJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDQwMCwgfjB4ZiwgZm10KTsKIAljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4NDAzLCB+MHgzLCBwYWxfbSk7Ci0JY3gyNTg0MF92Ymlfc2V0dXAoY2xpZW50KTsKKwljeDI1ODQwX3N0ZF9zZXR1cChjbGllbnQpOwogCWlmICghc3RhdGUtPmlzX2N4MjU4MzYpCiAJCWlucHV0X2NoYW5nZShjbGllbnQpOwogCXJldHVybiAwOwpAQCAtMTA1OCw2ICsxMjA0LDggQEAKIAogCQlzd2l0Y2ggKHFjLT5pZCkgewogCQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwKKwkJCQkJNjU1MzUgLyAxMDAsIHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSk7CiAJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CkBAIC0xMjY1LDYgKzE0MTMsOCBAQAogCXN0YXRlLT5wdnIxNTBfd29ya2Fyb3VuZCA9IDA7CiAJc3RhdGUtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzE7CiAJc3RhdGUtPnVubXV0ZV92b2x1bWUgPSAtMTsKKwlzdGF0ZS0+ZGVmYXVsdF92b2x1bWUgPSAyMjggLSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDhkNCk7CisJc3RhdGUtPmRlZmF1bHRfdm9sdW1lID0gKChzdGF0ZS0+ZGVmYXVsdF92b2x1bWUgLyAyKSArIDIzKSA8PCA5OwogCXN0YXRlLT52YmlfbGluZV9vZmZzZXQgPSA4OwogCXN0YXRlLT5pZCA9IGlkOwogCXN0YXRlLT5yZXYgPSBkZXZpY2VfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmgKaW5kZXggOGJmNzk3Zi4uNzI5MTZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaApAQCAtNDQsNiArNDQsNyBAQAogCXUzMiBhdWRjbGtfZnJlcTsKIAlpbnQgYXVkbW9kZTsKIAlpbnQgdW5tdXRlX3ZvbHVtZTsgLyogLTEgaWYgbm90IG11dGVkICovCisJaW50IGRlZmF1bHRfdm9sdW1lOwogCWludCB2YmlfbGluZV9vZmZzZXQ7CiAJdTMyIGlkOwogCXUzMiByZXY7CkBAIC02MSw2ICs2Miw3IEBACiB1OCBjeDI1ODQwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGFkZHIpOwogdTMyIGN4MjU4NDBfcmVhZDQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGFkZHIpOwogaW50IGN4MjU4NDBfYW5kX29yKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBhZGRyLCB1bnNpZ25lZCBtYXNrLCB1OCB2YWx1ZSk7Cit2b2lkIGN4MjU4NDBfc3RkX3NldHVwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3gyNTg1MC1maXJtd2FyZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTczLDcgKzc1LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjU4NTAtdmJpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi12b2lkIGN4MjU4NDBfdmJpX3NldHVwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogaW50IGN4MjU4NDBfdmJpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYwppbmRleCBjNzU0YjlkLi42OWYyYmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYwpAQCAtODIsMTUwICs4Miw2IEBACiAJcmV0dXJuIGVyciAmIDB4ZjA7CiB9CiAKLXZvaWQgY3gyNTg0MF92Ymlfc2V0dXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl2NGwyX3N0ZF9pZCBzdGQgPSBzdGF0ZS0+c3RkOwotCWludCBoYmxhbmssaGFjdGl2ZSxidXJzdCx2YmxhbmssdmFjdGl2ZSxzYyx2Ymxhbms2NTYsc3JjX2RlY2ltYXRpb247Ci0JaW50IGx1bWFfbHBmLHV2X2xwZiwgY29tYjsKLQl1MzIgcGxsX2ludCxwbGxfZnJhYyxwbGxfcG9zdDsKLQotCS8qIGRhdGFzaGVldCBzdGFydHVwLCBzdGVwIDhkICovCi0JaWYgKHN0ZCAmIH5WNEwyX1NURF9OVFNDKSB7Ci0JCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ5ZiwgMHgxMSk7Ci0JfSBlbHNlIHsKLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDlmLCAweDE0KTsKLQl9Ci0KLQlpZiAoc3RkICYgVjRMMl9TVERfNjI1XzUwKSB7Ci0JCWhibGFuaz0weDA4NDsKLQkJaGFjdGl2ZT0weDJkMDsKLQkJYnVyc3Q9MHg1ZDsKLQkJdmJsYW5rPTB4MDI0OwotCQl2YWN0aXZlPTB4MjQ0OwotCQl2Ymxhbms2NTY9MHgyODsKLQkJc3JjX2RlY2ltYXRpb249MHgyMWY7Ci0KLQkJbHVtYV9scGY9MjsKLQkJaWYgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7Ci0JCQl1dl9scGY9MDsKLQkJCWNvbWI9MDsKLQkJCXNjPTB4MGE0MjVmOwotCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTmMpIHsKLQkJCXV2X2xwZj0xOwotCQkJY29tYj0weDIwOwotCQkJc2M9NTU2NDUzOwotCQl9IGVsc2UgewotCQkJdXZfbHBmPTE7Ci0JCQljb21iPTB4MjA7Ci0JCQlzYz0weDBhODI2MzsKLQkJfQotCX0gZWxzZSB7Ci0JCWhhY3RpdmU9NzIwOwotCQloYmxhbms9MTIyOwotCQl2YWN0aXZlPTQ4NzsKLQkJbHVtYV9scGY9MTsKLQkJdXZfbHBmPTE7Ci0KLQkJc3JjX2RlY2ltYXRpb249MHgyMWY7Ci0JCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMXzYwKSB7Ci0JCQl2Ymxhbms9MjY7Ci0JCQl2Ymxhbms2NTY9MjY7Ci0JCQlidXJzdD0weDViOwotCQkJbHVtYV9scGY9MjsKLQkJCWNvbWI9MHgyMDsKLQkJCXNjPTB4MGE4MjYzOwotCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTSkgewotCQkJdmJsYW5rPTIwOwotCQkJdmJsYW5rNjU2PTI0OwotCQkJYnVyc3Q9MHg2MTsKLQkJCWNvbWI9MHgyMDsKLQotCQkJc2M9NTU1NDUyOwotCQl9IGVsc2UgewotCQkJdmJsYW5rPTI2OwotCQkJdmJsYW5rNjU2PTI2OwotCQkJYnVyc3Q9MHg1YjsKLQkJCWNvbWI9MHg2NjsKLQkJCXNjPTU1NjA2MzsKLQkJfQotCX0KLQotCS8qIERFQlVHOiBEaXNwbGF5cyBjb25maWd1cmVkIFBMTCBmcmVxdWVuY3kgKi8KLQlwbGxfaW50PWN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTA4KTsKLQlwbGxfZnJhYz1jeDI1ODQwX3JlYWQ0KGNsaWVudCwgMHgxMGMpJjB4MWZmZmZmZjsKLQlwbGxfcG9zdD1jeDI1ODQwX3JlYWQoY2xpZW50LCAweDEwOSk7Ci0JdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsCi0JCQkJIlBMTCByZWdzID0gaW50OiAldSwgZnJhYzogJXUsIHBvc3Q6ICV1XG4iLAotCQkJCXBsbF9pbnQscGxsX2ZyYWMscGxsX3Bvc3QpOwotCi0JaWYgKHBsbF9wb3N0KSB7Ci0JCWludCBmaW4sIGZzYzsKLQkJaW50IHBsbD0gKDI4NjM2MzYzTCooKCgodTY0KXBsbF9pbnQpPDwyNUwpK3BsbF9mcmFjKSkgPj4yNUw7Ci0KLQkJcGxsLz1wbGxfcG9zdDsKLQkJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICJQTEwgPSAlZC4lMDZkIE1IelxuIiwKLQkJCQkJCXBsbC8xMDAwMDAwLCBwbGwlMTAwMDAwMCk7Ci0JCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAiUExMLzggPSAlZC4lMDZkIE1IelxuIiwKLQkJCQkJCXBsbC84MDAwMDAwLCAocGxsLzgpJTEwMDAwMDApOwotCi0JCWZpbj0oKHU2NClzcmNfZGVjaW1hdGlvbipwbGwpPj4xMjsKLQkJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICJBREMgU2FtcGxpbmcgZnJlcSA9ICIKLQkJCQkJCSIlZC4lMDZkIE1IelxuIiwKLQkJCQkJCWZpbi8xMDAwMDAwLGZpbiUxMDAwMDAwKTsKLQotCQlmc2M9ICgoKHU2NClzYykqcGxsKSA+PiAyNEw7Ci0JCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAiQ2hyb21hIHN1Yi1jYXJyaWVyIGZyZXEgPSAiCi0JCQkJCQkiJWQuJTA2ZCBNSHpcbiIsCi0JCQkJCQlmc2MvMTAwMDAwMCxmc2MlMTAwMDAwMCk7Ci0KLQkJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICJoYmxhbmsgJWksIGhhY3RpdmUgJWksICIKLQkJCSJ2YmxhbmsgJWksIHZhY3RpdmUgJWksIHZibGFuazY1NiAlaSwgc3JjX2RlYyAlaSwgIgotCQkJImJ1cnN0IDB4JTAyeCwgbHVtYV9scGYgJWksIHV2X2xwZiAlaSwgY29tYiAweCUwMngsIgotCQkJIiBzYyAweCUwNnhcbiIsCi0JCQloYmxhbmssIGhhY3RpdmUsIHZibGFuaywgdmFjdGl2ZSwgdmJsYW5rNjU2LAotCQkJc3JjX2RlY2ltYXRpb24sIGJ1cnN0LCBsdW1hX2xwZiwgdXZfbHBmLCBjb21iLCBzYyk7Ci0JfQotCi0JLyogU2V0cyBob3Jpem9udGFsIGJsYW5raW5nIGRlbGF5IGFuZCBhY3RpdmUgbGluZXMgKi8KLQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzAsIGhibGFuayk7Ci0JY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDcxLCAweGZmJigoKGhibGFuaz4+OCkmMHgzKXwoaGFjdGl2ZSA8PDQpKSk7Ci0JY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDcyLCBoYWN0aXZlPj40KTsKLQotCS8qIFNldHMgYnVyc3QgZ2F0ZSBkZWxheSAqLwotCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3MywgYnVyc3QpOwotCi0JLyogU2V0cyB2ZXJ0aWNhbCBibGFua2luZyBkZWxheSBhbmQgYWN0aXZlIGR1cmF0aW9uICovCi0JY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDc0LCB2YmxhbmspOwotCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3NSwgMHhmZiYoKCh2Ymxhbms+PjgpJjB4Myl8KHZhY3RpdmUgPDw0KSkpOwotCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3NiwgdmFjdGl2ZT4+NCk7Ci0JY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDc3LCB2Ymxhbms2NTYpOwotCi0JLyogU2V0cyBzcmMgZGVjaW1hdGlvbiByYXRlICovCi0JY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDc4LCAweGZmJnNyY19kZWNpbWF0aW9uKTsKLQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzksIDB4ZmYmKHNyY19kZWNpbWF0aW9uPj44KSk7Ci0KLQkvKiBTZXRzIEx1bWEgYW5kIFVWIExvdyBwYXNzIGZpbHRlcnMgKi8KLQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0N2EsIGx1bWFfbHBmPDw2fCgodXZfbHBmPDw0KSYweDMwKSk7Ci0KLQkvKiBFbmFibGVzIGNvbWIgZmlsdGVycyAqLwotCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3YiwgY29tYik7Ci0KLQkvKiBTZXRzIFNDIFN0ZXAqLwotCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3Yywgc2MpOwotCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZCwgMHhmZiZzYz4+OCk7Ci0JY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDdlLCAweGZmJnNjPj4xNik7Ci0KLQkvKiBTZXRzIFZCSSBwYXJhbWV0ZXJzICovCi0JaWYgKHN0ZCAmIFY0TDJfU1REXzYyNV81MCkgewotCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0N2YsIDB4MDEpOwotCQlzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0ID0gNTsKLQl9IGVsc2UgewotCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0N2YsIDB4MDApOwotCQlzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0ID0gODsKLQl9Ci19Ci0KIGludCBjeDI1ODQwX3ZiaShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CkBAIC0yOTIsOCArMTQ4LDggQEAKIAkJCS8qIHJhdyBWQkkgKi8KIAkJCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKIAotCQkJLyogU2V0dXAgVkJJICovCi0JCQljeDI1ODQwX3ZiaV9zZXR1cChjbGllbnQpOworCQkJLyogU2V0dXAgc3RhbmRhcmQgKi8KKwkJCWN4MjU4NDBfc3RkX3NldHVwKGNsaWVudCk7CiAKIAkJCS8qIFZCSSBPZmZzZXQgKi8KIAkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZiwgdmJpX29mZnNldCk7CkBAIC0zMDQsOCArMTYwLDggQEAKIAkJZm9yICh4ID0gMDsgeCA8PSAyMzsgeCsrKQogCQkJbGNyW3hdID0gMHgwMDsKIAotCQkvKiBTZXR1cCBWQkkgKi8KLQkJY3gyNTg0MF92Ymlfc2V0dXAoY2xpZW50KTsKKwkJLyogU2V0dXAgc3RhbmRhcmQgKi8KKwkJY3gyNTg0MF9zdGRfc2V0dXAoY2xpZW50KTsKIAogCQkvKiBTbGljZWQgVkJJICovCiAJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQwNCwgMHgzMik7CS8qIEFuY2lsbGFyeSBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKaW5kZXggODBjODg4My4uMDZmMTcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwpAQCAtODIsNyArODIsNiBAQAogCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCQkJTW9kdWxlIGdsb2JhbCBzdGF0aWMgdmFycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCmluZGV4IDZjMGM5NGMuLmJmZGNhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCkBAIC03MTUsNyArNzE1LDggQEAKIAogCXFjdHJsLmlkID0gcW1lbnUtPmlkOwogCWJsYWNrYmlyZF9xdWVyeWN0cmwoZGV2LCAmcWN0cmwpOwotCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfbWVudShxbWVudSwgJnFjdHJsLCBjeDIzNDF4X2N0cmxfZ2V0X21lbnUocW1lbnUtPmlkKSk7CisJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9tZW51KHFtZW51LCAmcWN0cmwsCisJCQljeDIzNDF4X2N0cmxfZ2V0X21lbnUoJmRldi0+cGFyYW1zLCBxbWVudS0+aWQpKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKQEAgLTczNyw3ICs3MzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKIAlpZiAoZi0+aW5kZXggIT0gMCkKQEAgLTc0OSw3ICs3NTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZtdF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgY3g4ODAyX2ZoICAqZmggICA9IHByaXY7CkBAIC03NjgsNyArNzY5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgY3g4ODAyX2ZoICAqZmggICA9IHByaXY7CkBAIC03ODQsNyArNzg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19mbXRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OwpAQCAtMTE4MSwxMCArMTE4MiwxMCBAQAogCS5taW5vciAgICAgICAgICAgICAgICA9IC0xLAogCS52aWRpb2NfcXVlcnltZW51ICAgICA9IHZpZGlvY19xdWVyeW1lbnUsCiAJLnZpZGlvY19xdWVyeWNhcCAgICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZW51bV9mbXRfY2FwICA9IHZpZGlvY19lbnVtX2ZtdF9jYXAsCi0JLnZpZGlvY19nX2ZtdF9jYXAgICAgID0gdmlkaW9jX2dfZm10X2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfY2FwICAgPSB2aWRpb2NfdHJ5X2ZtdF9jYXAsCi0JLnZpZGlvY19zX2ZtdF9jYXAgICAgID0gdmlkaW9jX3NfZm10X2NhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgICAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKIAkudmlkaW9jX3JlcWJ1ZnMgICAgICAgPSB2aWRpb2NfcmVxYnVmcywKIAkudmlkaW9jX3F1ZXJ5YnVmICAgICAgPSB2aWRpb2NfcXVlcnlidWYsCiAJLnZpZGlvY19xYnVmICAgICAgICAgID0gdmlkaW9jX3FidWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCmluZGV4IGNiNmEwOTYuLmQ3NDA2YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCkBAIC0xMDMsNyArMTAzLDYgQEAKIAogCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAogCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGNsaWVudC0+YWRkciwgY2xpZW50LT5uYW1lKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCBlZWEyM2Y5Li4wZmVkNWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTEwNDUsNyArMTA0NSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIFZJREVPIElPQ1RMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZtdF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBjeDg4MDBfZmggICpmaCAgID0gcHJpdjsKQEAgLTEwNjEsNyArMTA2MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9ICgoc3RydWN0IGN4ODgwMF9maCAqKXByaXYpLT5kZXYtPmNvcmU7CkBAIC0xMTEyLDExICsxMTEyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfZm10X2NhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IGN4ODgwMF9maCAgKmZoICAgPSBwcml2OwotCWludCBlcnIgPSB2aWRpb2NfdHJ5X2ZtdF9jYXAgKGZpbGUscHJpdixmKTsKKwlpbnQgZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAoZmlsZSxwcml2LGYpOwogCiAJaWYgKDAgIT0gZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7CiAJaWYgKHVubGlrZWx5KGYtPmluZGV4ID49IEFSUkFZX1NJWkUoZm9ybWF0cykpKQpAQCAtMTY5MCwxMyArMTY5MCwxMyBAQAogCS5mb3BzICAgICAgICAgICAgICAgICA9ICZ2aWRlb19mb3BzLAogCS5taW5vciAgICAgICAgICAgICAgICA9IC0xLAogCS52aWRpb2NfcXVlcnljYXAgICAgICA9IHZpZGlvY19xdWVyeWNhcCwKLQkudmlkaW9jX2VudW1fZm10X2NhcCAgPSB2aWRpb2NfZW51bV9mbXRfY2FwLAotCS52aWRpb2NfZ19mbXRfY2FwICAgICA9IHZpZGlvY19nX2ZtdF9jYXAsCi0JLnZpZGlvY190cnlfZm10X2NhcCAgID0gdmlkaW9jX3RyeV9mbXRfY2FwLAotCS52aWRpb2Nfc19mbXRfY2FwICAgICA9IHZpZGlvY19zX2ZtdF9jYXAsCi0JLnZpZGlvY19nX2ZtdF92YmkgICAgID0gY3g4ODAwX3ZiaV9mbXQsCi0JLnZpZGlvY190cnlfZm10X3ZiaSAgID0gY3g4ODAwX3ZiaV9mbXQsCi0JLnZpZGlvY19zX2ZtdF92YmkgICAgID0gY3g4ODAwX3ZiaV9mbXQsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwICA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAgICAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAgID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgICAgID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92YmlfY2FwICAgICA9IGN4ODgwMF92YmlfZm10LAorCS52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwICAgPSBjeDg4MDBfdmJpX2ZtdCwKKwkudmlkaW9jX3NfZm10X3ZiaV9jYXAgICAgID0gY3g4ODAwX3ZiaV9mbXQsCiAJLnZpZGlvY19yZXFidWZzICAgICAgID0gdmlkaW9jX3JlcWJ1ZnMsCiAJLnZpZGlvY19xdWVyeWJ1ZiAgICAgID0gdmlkaW9jX3F1ZXJ5YnVmLAogCS52aWRpb2NfcWJ1ZiAgICAgICAgICA9IHZpZGlvY19xYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jCmluZGV4IDZjZTVhZjQuLjIwODAwNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJjeDg4LmgiCiAjaW5jbHVkZSAiY3g4OC12cDMwNTQtaTJjLmgiCiAKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJkcml2ZXIgZm9yIGN4MjM4OHggVlAzMDU0IGRlc2lnbiIpOwogTU9EVUxFX0FVVEhPUigiQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKaW5kZXggOGNiZGE0My4uMDVmMGQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTE3Myw2ICsxNzMsMjcgQEAKIAkJCS5hbXV4ICAgICA9IDEsCiAJCX0gfSwKIAl9LAorCVtFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDBfUjJdID0geworCQkubmFtZSAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UViBIVlIgOTAwIChSMikiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLm10c19maXJtd2FyZSA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmlucHV0ICAgICAgICAgID0geyB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSB9LAorCX0sCiAJW0VNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzk1MF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgSFZSIDk1MCIsCiAJCS52Y2hhbm5lbHMgICAgICA9IDMsCkBAIC0xOTYsNiArMjE3LDI5IEBACiAJCQkuYW11eCAgICAgPSAxLAogCQl9IH0sCiAJfSwKKwlbRU0yODgwX0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfUFJPXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgSEQgUHJvIFN0aWNrIiwKKwkJLnZjaGFubmVscyAgICAgID0gMywKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS5tdHNfZmlybXdhcmUgICA9IDEsCisJCS5oYXNfMTJtaHpfaTJzICA9IDEsCisJCS5oYXNfZHZiICAgICAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSAwLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSAxLAorCQl9IH0sCisJfSwKIAlbRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YU10gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgSHlicmlkIFhTIiwKIAkJLnZjaGFubmVscyAgICA9IDMsCkBAIC0zODIsNiArNDI2LDE5IEBACiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKKwlbRU0yODYwX0JPQVJEX1BPSU5UTklYX0lOVFJBT1JBTF9DQU1FUkFdID0geworCQkubmFtZSAgICAgICAgID0gIlBvaW50Tml4IEludHJhLU9yYWwgQ2FtZXJhIiwKKwkJLmhhc19zbmFwc2hvdF9idXR0b24gPSAxLAorCQkudmNoYW5uZWxzICAgID0gMSwKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0FCU0VOVCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAorCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0gfSwKKwl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBlbTI4eHhfYmNvdW50ID0gQVJSQVlfU0laRShlbTI4eHhfYm9hcmRzKTsKIApAQCAtNDE3LDEwICs0NzQsMTIgQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9QSU5OQUNMRV9EVkNfOTAgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMWEpLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ185MCB9LAorCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDIyNyksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4ODBfQk9BUkRfUElOTkFDTEVfUENUVl9IRF9QUk8gfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDY1MDApLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwIH0sCiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg2NTAyKSwKLQkJCS5kcml2ZXJfaW5mbyA9IEVNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzkwMCB9LAorCQkJLmRyaXZlcl9pbmZvID0gRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwX1IyIH0sCiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg2NTEzKSwgLyogSENXIEhWUi05ODAgKi8KIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzk1MCB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NjUxNyksIC8qIEhQICBIVlItOTUwICovCkBAIC00NzYsNiArNTM1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZW0yOHh4X2hhc2hfdGFibGUgZW0yOHh4X2kyY19oYXNoW10gPSB7CiAJezB4YjA2YTMyYzMsIEVNMjgwMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzIwMCwgVFVORVJfTEdfUEFMX05FV19UQVBDfSwKIAl7MHhmNTEyMDBlMywgRU0yODAwX0JPQVJEX1ZHRUFSX1BPQ0tFVFRWLCBUVU5FUl9MR19QQUxfTkVXX1RBUEN9LAorCXsweDFiYTUwMDgwLCBFTTI4NjBfQk9BUkRfUE9JTlROSVhfSU5UUkFPUkFMX0NBTUVSQSwgVFVORVJfQUJTRU5UfSwKIH07CiAKIGludCBlbTI4eHhfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tbWFuZCwgaW50IGFyZykKQEAgLTUwOCw2ICs1NjgsNyBAQAogCWRldi0+aGFzXzEybWh6X2kycyA9IGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0uaGFzXzEybWh6X2kyczsKIAlkZXYtPm1heF9yYW5nZV82NDBfNDgwID0gZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5tYXhfcmFuZ2VfNjQwXzQ4MDsKIAlkZXYtPmhhc19kdmIgPSBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLmhhc19kdmI7CisJZGV2LT5oYXNfc25hcHNob3RfYnV0dG9uID0gZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5oYXNfc25hcHNob3RfYnV0dG9uOwogfQogCiAvKiBTaW5jZSBlbTI4eHhfcHJlX2NhcmRfc2V0dXAoKSByZXF1aXJlcyBhIHByb3BlciBkZXYtPm1vZGVsLApAQCAtNTQyLDggKzYwMywxMCBAQAogCXN3aXRjaCAoZGV2LT5tb2RlbCkgewogCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX1BST0RJR1lfWFM6CiAJY2FzZSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDA6CisJY2FzZSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDBfUjI6CiAJY2FzZSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTOgogCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUwOgorCWNhc2UgRU0yODgwX0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfUFJPOgogCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMEZfWENMSywgICAgIlx4MjciLCAxKTsKIAkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjA2X0kyQ19DTEssICJceDQwIiwgMSk7CiAJCW1zbGVlcCg1MCk7CkBAIC01NzYsNyArNjM5LDEyIEBACiAJY2FzZSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDA6CiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NjsKIAkJYnJlYWs7CisJY2FzZSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDBfUjI6CisJCS8qIGRqaCAtIE5vdCBzdXJlIHdoaWNoIGRlbW9kIHdlIG5lZWQgaGVyZSAqLworCQljdGwtPmRlbW9kID0gWEMzMDI4X0ZFX0RFRkFVTFQ7CisJCWJyZWFrOwogCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUwOgorCWNhc2UgRU0yODgwX0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfUFJPOgogCQkvKiBGSVhNRTogQmV0dGVyIHRvIHNwZWNpZnkgdGhlIG5lZWRlZCBJRiAqLwogCQljdGwtPmRlbW9kID0gWEMzMDI4X0ZFX0RFRkFVTFQ7CiAJCWJyZWFrOwpAQCAtNzU0LDYgKzgyMiw3IEBACiAJc3dpdGNoIChkZXYtPm1vZGVsKSB7CiAJY2FzZSBFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX1VTQl8yOgogCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwOgorCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwX1IyOgogCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUwOgogCXsKIAkJc3RydWN0IHR2ZWVwcm9tIHR2OwpAQCAtNzg3LDYgKzg1Niw5IEBACiAJCQllbTI4eHhfc2V0X21vZGVsKGRldik7CiAJfQogCisJaWYgKGRldi0+aGFzX3NuYXBzaG90X2J1dHRvbikKKwkJZW0yOHh4X3JlZ2lzdGVyX3NuYXBzaG90X2J1dHRvbihkZXYpOworCiAJLyogQWxsb3cgb3ZlcnJpZGUgdHVuZXIgdHlwZSBieSBhIG1vZHVsZSBwYXJhbWV0ZXIgKi8KIAlpZiAodHVuZXIgPj0gMCkKIAkJZGV2LT50dW5lcl90eXBlID0gdHVuZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKaW5kZXggMGIyMzMzZS4uY2M2MWNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwpAQCAtNSw2ICs1LDcgQEAKIAogIChjKSAyMDA4IERldmluIEhlaXRtdWVsbGVyIDxkZXZpbi5oZWl0bXVlbGxlckBnbWFpbC5jb20+CiAJLSBGaXhlcyBmb3IgdGhlIGRyaXZlciB0byBwcm9wZXJseSB3b3JrIHdpdGggSFZSLTk1MAorCS0gRml4ZXMgZm9yIHRoZSBkcml2ZXIgdG8gcHJvcGVybHkgd29yayB3aXRoIFBpbm5hY2xlIFBDVFYgSEQgUHJvIFN0aWNrCiAKICAoYykgMjAwOCBBaWRhbiBUaG9ybnRvbiA8bWFrb3NvZnRAZ29vZ2xlbWFpbC5jb20+CiAKQEAgLTI2LDYgKzI3LDkgQEAKIAogI2luY2x1ZGUgImxnZHQzMzB4LmgiCiAjaW5jbHVkZSAiemwxMDM1My5oIgorI2lmZGVmIEVNMjhYWF9EUlgzOTdYRF9TVVBQT1JUCisjaW5jbHVkZSAiZHJ4Mzk3eEQuaCIKKyNlbmRpZgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImRyaXZlciBmb3IgZW0yOHh4IGJhc2VkIERWQiBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Iik7CkBAIC0yMjcsNiArMjMxLDEzIEBACiAJLmlmMiA9IDQ1NjAwLAogfTsKIAorI2lmZGVmIEVNMjhYWF9EUlgzOTdYRF9TVVBQT1JUCisvKiBbVE9ET10gZGpoIC0gbm90IHN1cmUgeWV0IHdoYXQgdGhlIGRldmljZSBjb25maWcgbmVlZHMgdG8gY29udGFpbiAqLworc3RhdGljIHN0cnVjdCBkcngzOTd4RF9jb25maWcgZW0yOHh4X2RyeDM5N3hEX3dpdGhfeGMzMDI4ID0geworCS5kZW1vZF9hZGRyZXNzID0gKDB4ZTAgPj4gMSksCit9OworI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGF0dGFjaF94YzMwMjgodTggYWRkciwgc3RydWN0IGVtMjh4eCAqZGV2KQpAQCAtMzk5LDYgKzQxMCw3IEBACiAJLyogaW5pdCBmcm9udGVuZCAqLwogCXN3aXRjaCAoZGV2LT5tb2RlbCkgewogCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUwOgorCWNhc2UgRU0yODgwX0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfUFJPOgogCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMweF9hdHRhY2gsCiAJCQkJCSAgICZlbTI4ODBfbGdkdDMzMDNfZGV2LAogCQkJCQkgICAmZGV2LT5pMmNfYWRhcCk7CkBAIC00MTYsNiArNDI4LDE5IEBACiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJCWJyZWFrOworCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwX1IyOgorI2lmZGVmIEVNMjhYWF9EUlgzOTdYRF9TVVBQT1JUCisJCS8qIFdlIGRvbid0IGhhdmUgdGhlIGNvbmZpZyBzdHJ1Y3R1cmUgcHJvcGVybHkgcG9wdWxhdGVkLCBzbworCQkgICB0aGlzIGlzIGNvbW1lbnRlZCBvdXQgZm9yIG5vdyAqLworCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaChkcngzOTd4RF9hdHRhY2gsCisJCQkJCSAgICZlbTI4eHhfZHJ4Mzk3eERfd2l0aF94YzMwMjgsCisJCQkJCSAgICZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApIHsKKwkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisJCWJyZWFrOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIgogCQkJCSIgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwppbmRleCA2YTc4ZmQyLi45Nzg1MzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCkBAIC00MzIsNyArNDMyLDYgQEAKIAlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTDsKIH0KIAotCiAvKgogICogYXR0YWNoX2luZm9ybSgpCiAgKiBnZXRzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGF0dGFjaGVzIHRvIHRoZSBpMmMgYnVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCmluZGV4IGJiNTgwNzEuLmVhYjNkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCkBAIC0zMCw2ICszMCwxMCBAQAogCiAjaW5jbHVkZSAiZW0yOHh4LmgiCiAKKyNkZWZpbmUgRU0yOFhYX1NOQVBTSE9UX0tFWSBLRVlfQ0FNRVJBCisjZGVmaW5lIEVNMjhYWF9TQlVUVE9OX1FVRVJZX0lOVEVSVkFMIDUwMAorI2RlZmluZSBFTTI4WFhfUjBDX1VTQlNVU1BfU05BUFNIT1QgMHgyMAorCiBzdGF0aWMgdW5zaWduZWQgaW50IGlyX2RlYnVnOwogbW9kdWxlX3BhcmFtKGlyX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcl9kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbSVJdIik7CkBAIC0xMjQsNiArMTI4LDg5IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIGVtMjh4eF9xdWVyeV9zYnV0dG9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwkvKiBQb2xsIHRoZSByZWdpc3RlciBhbmQgc2VlIGlmIHRoZSBidXR0b24gaXMgZGVwcmVzc2VkICovCisJc3RydWN0IGVtMjh4eCAqZGV2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbTI4eHgsIHNidXR0b25fcXVlcnlfd29yay53b3JrKTsKKwlpbnQgcmV0OworCisJcmV0ID0gZW0yOHh4X3JlYWRfcmVnKGRldiwgRU0yOFhYX1IwQ19VU0JTVVNQKTsKKworCWlmIChyZXQgJiBFTTI4WFhfUjBDX1VTQlNVU1BfU05BUFNIT1QpIHsKKwkJdTggY2xlYXJlZDsKKwkJLyogQnV0dG9uIGlzIGRlcHJlc3NlZCwgY2xlYXIgdGhlIHJlZ2lzdGVyICovCisJCWNsZWFyZWQgPSAoKHU4KSByZXQpICYgfkVNMjhYWF9SMENfVVNCU1VTUF9TTkFQU0hPVDsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjBDX1VTQlNVU1AsICZjbGVhcmVkLCAxKTsKKworCQkvKiBOb3QgZW11bGF0ZSB0aGUga2V5cHJlc3MgKi8KKwkJaW5wdXRfcmVwb3J0X2tleShkZXYtPnNidXR0b25faW5wdXRfZGV2LCBFTTI4WFhfU05BUFNIT1RfS0VZLAorCQkJCSAxKTsKKwkJLyogTm93IHVucHJlc3MgdGhlIGtleSAqLworCQlpbnB1dF9yZXBvcnRfa2V5KGRldi0+c2J1dHRvbl9pbnB1dF9kZXYsIEVNMjhYWF9TTkFQU0hPVF9LRVksCisJCQkJIDApOworCX0KKworCS8qIFNjaGVkdWxlIG5leHQgcG9sbCAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT5zYnV0dG9uX3F1ZXJ5X3dvcmssCisJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKEVNMjhYWF9TQlVUVE9OX1FVRVJZX0lOVEVSVkFMKSk7Cit9CisKK3ZvaWQgZW0yOHh4X3JlZ2lzdGVyX3NuYXBzaG90X2J1dHRvbihzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnI7CisKKwllbTI4eHhfaW5mbygiUmVnaXN0ZXJpbmcgc25hcHNob3QgYnV0dG9uLi4uXG4iKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucHV0X2RldikgeworCQllbTI4eHhfZXJyZGV2KCJpbnB1dF9hbGxvY2F0ZV9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBkZXYtPnNuYXBzaG90X2J1dHRvbl9wYXRoLAorCQkgICAgICBzaXplb2YoZGV2LT5zbmFwc2hvdF9idXR0b25fcGF0aCkpOworCXN0cmxjYXQoZGV2LT5zbmFwc2hvdF9idXR0b25fcGF0aCwgIi9zYnV0dG9uIiwKKwkJc2l6ZW9mKGRldi0+c25hcHNob3RfYnV0dG9uX3BhdGgpKTsKKwlJTklUX0RFTEFZRURfV09SSygmZGV2LT5zYnV0dG9uX3F1ZXJ5X3dvcmssIGVtMjh4eF9xdWVyeV9zYnV0dG9uKTsKKworCWlucHV0X2Rldi0+bmFtZSA9ICJlbTI4eHggc25hcHNob3QgYnV0dG9uIjsKKwlpbnB1dF9kZXYtPnBoeXMgPSBkZXYtPnNuYXBzaG90X2J1dHRvbl9wYXRoOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVQKTsKKwlzZXRfYml0KEVNMjhYWF9TTkFQU0hPVF9LRVksIGlucHV0X2Rldi0+a2V5Yml0KTsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gMDsKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSAwOworCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19VU0I7CisJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDE7CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+dWRldi0+ZGV2OworCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycikgeworCQllbTI4eHhfZXJyZGV2KCJpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJcmV0dXJuOworCX0KKworCWRldi0+c2J1dHRvbl9pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPnNidXR0b25fcXVlcnlfd29yaywKKwkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoRU0yOFhYX1NCVVRUT05fUVVFUllfSU5URVJWQUwpKTsKKwlyZXR1cm47CisKK30KKwordm9pZCBlbTI4eHhfZGVyZWdpc3Rlcl9zbmFwc2hvdF9idXR0b24oc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWlmIChkZXYtPnNidXR0b25faW5wdXRfZGV2ICE9IE5VTEwpIHsKKwkJZW0yOHh4X2luZm8oIkRlcmVnaXN0ZXJpbmcgc25hcHNob3QgYnV0dG9uXG4iKTsKKwkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmZGV2LT5zYnV0dG9uX3F1ZXJ5X3dvcmspOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZXYtPnNidXR0b25faW5wdXRfZGV2KTsKKwkJZGV2LT5zYnV0dG9uX2lucHV0X2RldiA9IE5VTEw7CisJfQorCXJldHVybjsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1iYXNpYy1vZmZzZXQ6IDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggMjg1YmM2Mi4uMmQ5ZjE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTY4Myw3ICs2ODMsNyBAQAogCUlPQ1RMIHZpZGlvYyBoYW5kbGluZwogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB2aWRpb2NfZ19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBlbTI4eHhfZmggICAgICAqZmggID0gcHJpdjsKQEAgLTcwNiw3ICs3MDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY190cnlfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICAgID0gcHJpdjsKQEAgLTc2Niw3ICs3NjYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBlbTI4eHhfZmggICAgICAqZmggID0gcHJpdjsKQEAgLTc3Nyw3ICs3NzcsNyBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCXZpZGlvY190cnlfZm10X2NhcChmaWxlLCBwcml2LCBmKTsKKwl2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIApAQCAtODI2LDcgKzgyNiw3IEBACiAJLyogQWRqdXN0cyB3aWR0aC9oZWlnaHQsIGlmIG5lZWRlZCAqLwogCWYuZm10LnBpeC53aWR0aCA9IGRldi0+d2lkdGg7CiAJZi5mbXQucGl4LmhlaWdodCA9IGRldi0+aGVpZ2h0OwotCXZpZGlvY190cnlfZm10X2NhcChmaWxlLCBwcml2LCAmZik7CisJdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCAmZik7CiAKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCkBAIC0xMjc3LDcgKzEyNzcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGQpCiB7CiAJaWYgKGZtdGQtPmluZGV4ICE9IDApCkBAIC0xMjkyLDcgKzEyOTIsNyBAQAogfQogCiAvKiBTbGljZWQgVkJJIGlvY3RscyAqLwotc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmJpX2NhcHR1cmUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBlbTI4eHhfZmggICAgICAqZmggID0gcHJpdjsKQEAgLTEzMTYsNyArMTMxNiw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY190cnlfc2V0X3ZiaV9jYXB0dXJlKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfdHJ5X3NldF9zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CkBAIC0xNTkwLDYgKzE1OTAsOCBAQAogCQkJCWRldi0+dmRldi0+bWlub3ItTUlOT1JfVkZMX1RZUEVfR1JBQkJFUl9NSU4sCiAJCQkJZGV2LT52YmlfZGV2LT5taW5vci1NSU5PUl9WRkxfVFlQRV9WQklfTUlOKTsKIAlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKKwlpZiAoZGV2LT5zYnV0dG9uX2lucHV0X2RldikKKwkJZW0yOHh4X2RlcmVnaXN0ZXJfc25hcHNob3RfYnV0dG9uKGRldik7CiAJaWYgKGRldi0+cmFkaW9fZGV2KSB7CiAJCWlmICgtMSAhPSBkZXYtPnJhZGlvX2Rldi0+bWlub3IpCiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnJhZGlvX2Rldik7CkBAIC0xNzc2LDE3ICsxNzc4LDE3IEBACiAKIAkubWlub3IgICAgICAgICAgICAgICAgICAgICAgPSAtMSwKIAkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgICAgICAgPSB2aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF9jYXAgICAgICAgID0gdmlkaW9jX2VudW1fZm10X2NhcCwKLQkudmlkaW9jX2dfZm10X2NhcCAgICAgICAgICAgPSB2aWRpb2NfZ19mbXRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF9jYXAgICAgICAgICA9IHZpZGlvY190cnlfZm10X2NhcCwKLQkudmlkaW9jX3NfZm10X2NhcCAgICAgICAgICAgPSB2aWRpb2Nfc19mbXRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgICA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAgICAgICA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAgICAgID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCiAJLnZpZGlvY19nX2F1ZGlvICAgICAgICAgICAgID0gdmlkaW9jX2dfYXVkaW8sCiAJLnZpZGlvY19zX2F1ZGlvICAgICAgICAgICAgID0gdmlkaW9jX3NfYXVkaW8sCiAJLnZpZGlvY19jcm9wY2FwICAgICAgICAgICAgID0gdmlkaW9jX2Nyb3BjYXAsCiAKLQkudmlkaW9jX2dfZm10X3ZiaV9jYXB0dXJlICAgPSB2aWRpb2NfZ19mbXRfdmJpX2NhcHR1cmUsCi0JLnZpZGlvY190cnlfZm10X3ZiaV9jYXB0dXJlID0gdmlkaW9jX3RyeV9zZXRfdmJpX2NhcHR1cmUsCi0JLnZpZGlvY19zX2ZtdF92YmlfY2FwdHVyZSAgID0gdmlkaW9jX3RyeV9zZXRfdmJpX2NhcHR1cmUsCisJLnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX2NhcCAgID0gdmlkaW9jX2dfZm10X3NsaWNlZF92YmlfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcCA9IHZpZGlvY190cnlfc2V0X3NsaWNlZF92YmlfY2FwLAorCS52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9jYXAgICA9IHZpZGlvY190cnlfc2V0X3NsaWNlZF92YmlfY2FwLAogCiAJLnZpZGlvY19yZXFidWZzICAgICAgICAgICAgID0gdmlkaW9jX3JlcWJ1ZnMsCiAJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5YnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAppbmRleCAwMDJmMTcwLi44OTg0MmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaApAQCAtNTUsNiArNTUsOSBAQAogI2RlZmluZSBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfVVNCMgkxNAogI2RlZmluZSBFTTI4MDBfQk9BUkRfVkdFQVJfUE9DS0VUVFYgICAgICAgICAgICAgMTUKICNkZWZpbmUgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUwCTE2CisjZGVmaW5lIEVNMjg4MF9CT0FSRF9QSU5OQUNMRV9QQ1RWX0hEX1BSTwkxNworI2RlZmluZSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDBfUjIJMTgKKyNkZWZpbmUgRU0yODYwX0JPQVJEX1BPSU5UTklYX0lOVFJBT1JBTF9DQU1FUkEgIDE5CiAKIC8qIExpbWl0cyBtaW5pbXVtIGFuZCBkZWZhdWx0IG51bWJlciBvZiBidWZmZXJzICovCiAjZGVmaW5lIEVNMjhYWF9NSU5fQlVGIDQKQEAgLTI0Nyw2ICsyNTAsNyBAQAogCXVuc2lnbmVkIGludCBoYXNfMTJtaHpfaTJzOjE7CiAJdW5zaWduZWQgaW50IG1heF9yYW5nZV82NDBfNDgwOjE7CiAJdW5zaWduZWQgaW50IGhhc19kdmI6MTsKKwl1bnNpZ25lZCBpbnQgaGFzX3NuYXBzaG90X2J1dHRvbjoxOwogCiAJZW51bSBlbTI4eHhfZGVjb2RlciBkZWNvZGVyOwogCkBAIC0zMjYsNiArMzMwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaGFzXzEybWh6X2kyczoxOwogCXVuc2lnbmVkIGludCBtYXhfcmFuZ2VfNjQwXzQ4MDoxOwogCXVuc2lnbmVkIGludCBoYXNfZHZiOjE7CisJdW5zaWduZWQgaW50IGhhc19zbmFwc2hvdF9idXR0b246MTsKIAogCS8qIFNvbWUgb2xkZXIgZW0yOHh4IGNoaXBzIG5lZWRzIGEgd2FpdGluZyB0aW1lIGFmdGVyIHdyaXRpbmcgKi8KIAl1bnNpZ25lZCBpbnQgd2FpdF9hZnRlcl93cml0ZTsKQEAgLTQxNiw2ICs0MjEsMTEgQEAKIAkvKiBDYWNoZXMgR1BPIGFuZCBHUElPIHJlZ2lzdGVycyAqLwogCXVuc2lnbmVkIGNoYXIJcmVnX2dwbywgcmVnX2dwaW87CiAKKwkvKiBTbmFwc2hvdCBidXR0b24gKi8KKwljaGFyIHNuYXBzaG90X2J1dHRvbl9wYXRoWzMwXTsJLyogcGF0aCBvZiB0aGUgaW5wdXQgZGV2ICovCisJc3RydWN0IGlucHV0X2RldiAqc2J1dHRvbl9pbnB1dF9kZXY7CisJc3RydWN0IGRlbGF5ZWRfd29yayBzYnV0dG9uX3F1ZXJ5X3dvcms7CisKIAlzdHJ1Y3QgZW0yOHh4X2R2YiAqZHZiOwogfTsKIApAQCAtNDgxLDYgKzQ5MSw4IEBACiBpbnQgZW0yOHh4X2dldF9rZXlfZW1faGF1cChzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KTsKIGludCBlbTI4eHhfZ2V0X2tleV9waW5uYWNsZV91c2JfZ3JleShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksCiAJCQkJICAgICB1MzIgKmlyX3Jhdyk7Cit2b2lkIGVtMjh4eF9yZWdpc3Rlcl9zbmFwc2hvdF9idXR0b24oc3RydWN0IGVtMjh4eCAqZGV2KTsKK3ZvaWQgZW0yOHh4X2RlcmVnaXN0ZXJfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBlbTI4eHggKmRldik7CiAKIC8qIHByaW50ayBtYWNyb3MgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYjkwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKQEAgLTAsMCArMSwxMyBAQAorY29uZmlnIFVTQl9HU1BDQQorCXRyaXN0YXRlICJVU0IgR1NQQ0EgZHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdmFyaW91cyBVU0Igd2ViY2Ftcy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0PiBmb3IgbW9yZSBpbmZvLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiB0byB1c2UgdGhpcyBkcml2ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgbW9kdWxlcywgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGVzIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3h4eHguCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjhhODk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQpAQCAtMCwwICsxLDI5IEBACitvYmotJChDT05GSUdfVVNCX0dTUENBKQkrPSBnc3BjYV9tYWluLm8gXAorCWdzcGNhX2NvbmV4Lm8gZ3NwY2FfZXRvbXMubyBnc3BjYV9tYXJzLm8gXAorCWdzcGNhX292NTE5Lm8gZ3NwY2FfcGFjMjA3Lm8gZ3NwY2FfcGFjNzMxMS5vIFwKKwlnc3BjYV9zb25peGIubyBnc3BjYV9zb25peGoubyBnc3BjYV9zcGNhNTAwLm8gZ3NwY2Ffc3BjYTUwMS5vIFwKKwlnc3BjYV9zcGNhNTA1Lm8gZ3NwY2Ffc3BjYTUwNi5vIGdzcGNhX3NwY2E1MDgubyBnc3BjYV9zcGNhNTYxLm8gXAorCWdzcGNhX3N1bnBsdXMubyBnc3BjYV9zdGswMTQubyBnc3BjYV90NjEzLm8gZ3NwY2FfdHY4NTMyLm8gXAorCWdzcGNhX3ZjMDMyeC5vIGdzcGNhX3pjM3h4Lm8KKworZ3NwY2FfbWFpbi1vYmpzIDo9IGdzcGNhLm8KK2dzcGNhX2NvbmV4LW9ianMgOj0gY29uZXgubworZ3NwY2FfZXRvbXMtb2JqcyA6PSBldG9tcy5vCitnc3BjYV9tYXJzLW9ianMgOj0gbWFycy5vCitnc3BjYV9vdjUxOS1vYmpzIDo9IG92NTE5Lm8KK2dzcGNhX3BhYzIwNy1vYmpzIDo9IHBhYzIwNy5vCitnc3BjYV9wYWM3MzExLW9ianMgOj0gcGFjNzMxMS5vCitnc3BjYV9zb25peGItb2JqcyA6PSBzb25peGIubworZ3NwY2Ffc29uaXhqLW9ianMgOj0gc29uaXhqLm8KK2dzcGNhX3NwY2E1MDAtb2JqcyA6PSBzcGNhNTAwLm8KK2dzcGNhX3NwY2E1MDEtb2JqcyA6PSBzcGNhNTAxLm8KK2dzcGNhX3NwY2E1MDUtb2JqcyA6PSBzcGNhNTA1Lm8KK2dzcGNhX3NwY2E1MDYtb2JqcyA6PSBzcGNhNTA2Lm8KK2dzcGNhX3NwY2E1MDgtb2JqcyA6PSBzcGNhNTA4Lm8KK2dzcGNhX3NwY2E1NjEtb2JqcyA6PSBzcGNhNTYxLm8KK2dzcGNhX3N0azAxNC1vYmpzIDo9IHN0azAxNC5vCitnc3BjYV9zdW5wbHVzLW9ianMgOj0gc3VucGx1cy5vCitnc3BjYV90NjEzLW9ianMgOj0gdDYxMy5vCitnc3BjYV90djg1MzItb2JqcyA6PSB0djg1MzIubworZ3NwY2FfdmMwMzJ4LW9ianMgOj0gdmMwMzJ4Lm8KK2dzcGNhX3pjM3h4LW9ianMgOj0gemMzeHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxM2Q1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKQEAgLTAsMCArMSwxMDUxIEBACisvKgorICoJCUNvbm5leGFudCBDeDExNjQ2IGxpYnJhcnkKKyAqCQlDb3B5cmlnaHQgKEMpIDIwMDQgTWljaGVsIFhoYWFyZCBteGhhYXJkQG1hZ2ljLmZyCisgKgorICogVjRMMiBieSBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAiY29uZXgiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorI2RlZmluZSBDT05FWF9DQU0gMQkJLyogc3BlY2lhbCBKUEVHIGhlYWRlciAqLworI2luY2x1ZGUgImpwZWcuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQSBVU0IgQ29uZXhhbnQgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOworCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7CisJdW5zaWduZWQgY2hhciBjb2xvcnM7CisKKwl1bnNpZ25lZCBjaGFyIHFpbmRleDsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisJeworCSAgICB7CisJCS5pZAkgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZQkgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZQkgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwCSA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDB4ZDQKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSA9IDB4MGEsCisJCS5tYXhpbXVtID0gMHgxZiwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT05UUkFTVF9ERUYgMHgwYworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbG9yIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDcsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09MT1JfREVGIDMKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT0xPUl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb2xvcnMsCisJICAgIC5nZXQgPSBzZF9nZXRjb2xvcnMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTc2LAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0ICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gM30sCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMn0sCisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkuc2l6ZWltYWdlID0gMzUyICogMjg4ICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9OworCisvKiB0aGUgcmVhZCBieXRlcyBhcmUgZm91bmQgaW4gZ3NwY2FfZGV2LT51c2JfYnVmICovCitzdGF0aWMgdm9pZCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgX191MTYgaW5kZXgsCisJCSAgX191MTYgbGVuKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwlpZiAobGVuID4gc2l6ZW9mIGdzcGNhX2Rldi0+dXNiX2J1ZikgeworCQllcnIoInJlZ19yOiBidWZmZXIgb3ZlcmZsb3ciKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCXVzYl9jb250cm9sX21zZyhkZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCTAsCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTAsCisJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sCisJCQk1MDApOworCVBERUJVRyhEX1VTQkksICJyZWcgcmVhZCBbJTAyeF0gLT4gJTAyeCAuLiIsCisJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKK30KKworLyogdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyB2b2lkIHJlZ193X3ZhbChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3UxNiBpbmRleCwKKwkJCV9fdTggdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDsKKwl1c2JfY29udHJvbF9tc2coZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkwLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJMCwKKwkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIDUwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICBfX3UxNiBpbmRleCwKKwkJICBjb25zdCBfX3U4ICpidWZmZXIsCisJCSAgX191MTYgbGVuKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwlpZiAobGVuID4gc2l6ZW9mIGdzcGNhX2Rldi0+dXNiX2J1ZikgeworCQllcnIoInJlZ193OiBidWZmZXIgb3ZlcmZsb3ciKTsKKwkJcmV0dXJuOworCX0KKwlQREVCVUcoRF9VU0JPLCAicmVnIHdyaXRlIFslMDJ4XSA9ICUwMnguLiIsIGluZGV4LCAqYnVmZmVyKTsKKyNlbmRpZgorCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuKTsKKwl1c2JfY29udHJvbF9tc2coZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkwLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJMCwKKwkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgNTAwKTsKK30KKworc3RhdGljIGNvbnN0IF9fdTggY3hfc2Vuc29yX2luaXRbXVs0XSA9IHsKKwl7MHg4OCwgMHgxMSwgMHgwMSwgMHgwMX0sCisJezB4ODgsIDB4MTIsIDB4NzAsIDB4MDF9LAorCXsweDg4LCAweDBmLCAweDAwLCAweDAxfSwKKwl7MHg4OCwgMHgwNSwgMHgwMSwgMHgwMX0sCisJe30KK307CisKK3N0YXRpYyBjb25zdCBfX3U4IGN4MTE2NDZfZncxW11bM10gPSB7CisJezB4MDAsIDB4MDIsIDB4MDB9LAorCXsweDAxLCAweDQzLCAweDAwfSwKKwl7MHgwMiwgMHhBNywgMHgwMH0sCisJezB4MDMsIDB4OEIsIDB4MDF9LAorCXsweDA0LCAweEU5LCAweDAyfSwKKwl7MHgwNSwgMHgwOCwgMHgwNH0sCisJezB4MDYsIDB4MDgsIDB4MDV9LAorCXsweDA3LCAweDA3LCAweDA2fSwKKwl7MHgwOCwgMHhFNywgMHgwNn0sCisJezB4MDksIDB4QzYsIDB4MDd9LAorCXsweDBBLCAweDg2LCAweDA4fSwKKwl7MHgwQiwgMHg0NiwgMHgwOX0sCisJezB4MEMsIDB4MDUsIDB4MEF9LAorCXsweDBELCAweEE1LCAweDBBfSwKKwl7MHgwRSwgMHg0NSwgMHgwQn0sCisJezB4MEYsIDB4RTUsIDB4MEJ9LAorCXsweDEwLCAweDg1LCAweDBDfSwKKwl7MHgxMSwgMHgyNSwgMHgwRH0sCisJezB4MTIsIDB4QzQsIDB4MER9LAorCXsweDEzLCAweDQ1LCAweDBFfSwKKwl7MHgxNCwgMHhFNCwgMHgwRX0sCisJezB4MTUsIDB4NjQsIDB4MEZ9LAorCXsweDE2LCAweEU0LCAweDBGfSwKKwl7MHgxNywgMHg2NCwgMHgxMH0sCisJezB4MTgsIDB4RTQsIDB4MTB9LAorCXsweDE5LCAweDY0LCAweDExfSwKKwl7MHgxQSwgMHhFNCwgMHgxMX0sCisJezB4MUIsIDB4NjQsIDB4MTJ9LAorCXsweDFDLCAweEUzLCAweDEyfSwKKwl7MHgxRCwgMHg0NCwgMHgxM30sCisJezB4MUUsIDB4QzMsIDB4MTN9LAorCXsweDFGLCAweDI0LCAweDE0fSwKKwl7MHgyMCwgMHhBMywgMHgxNH0sCisJezB4MjEsIDB4MDQsIDB4MTV9LAorCXsweDIyLCAweDgzLCAweDE1fSwKKwl7MHgyMywgMHhFMywgMHgxNX0sCisJezB4MjQsIDB4NDMsIDB4MTZ9LAorCXsweDI1LCAweEE0LCAweDE2fSwKKwl7MHgyNiwgMHgyMywgMHgxN30sCisJezB4MjcsIDB4ODMsIDB4MTd9LAorCXsweDI4LCAweEUzLCAweDE3fSwKKwl7MHgyOSwgMHg0MywgMHgxOH0sCisJezB4MkEsIDB4QTMsIDB4MTh9LAorCXsweDJCLCAweDAzLCAweDE5fSwKKwl7MHgyQywgMHg2MywgMHgxOX0sCisJezB4MkQsIDB4QzMsIDB4MTl9LAorCXsweDJFLCAweDIyLCAweDFBfSwKKwl7MHgyRiwgMHg2MywgMHgxQX0sCisJezB4MzAsIDB4QzMsIDB4MUF9LAorCXsweDMxLCAweDIzLCAweDFCfSwKKwl7MHgzMiwgMHg4MywgMHgxQn0sCisJezB4MzMsIDB4RTIsIDB4MUJ9LAorCXsweDM0LCAweDIzLCAweDFDfSwKKwl7MHgzNSwgMHg4MywgMHgxQ30sCisJezB4MzYsIDB4RTIsIDB4MUN9LAorCXsweDM3LCAweDIzLCAweDFEfSwKKwl7MHgzOCwgMHg4MywgMHgxRH0sCisJezB4MzksIDB4RTIsIDB4MUR9LAorCXsweDNBLCAweDIzLCAweDFFfSwKKwl7MHgzQiwgMHg4MiwgMHgxRX0sCisJezB4M0MsIDB4QzMsIDB4MUV9LAorCXsweDNELCAweDIyLCAweDFGfSwKKwl7MHgzRSwgMHg2MywgMHgxRn0sCisJezB4M0YsIDB4QzEsIDB4MUZ9LAorCXt9Cit9Oworc3RhdGljIHZvaWQgY3gxMTY0Nl9mdyhzdHJ1Y3QgZ3NwY2FfZGV2KmdzcGNhX2RldikKK3sKKwlpbnQgaSA9IDA7CisKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwNmEsIDB4MDIpOworCXdoaWxlIChjeDExNjQ2X2Z3MVtpXVsxXSkgeworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDA2YiwgY3gxMTY0Nl9mdzFbaV0sIDMpOworCQlpKys7CisJfQorCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDA2YSwgMHgwMCk7Cit9CisKK3N0YXRpYyBjb25zdCBfX3U4IGN4c2Vuc29yW10gPSB7CisJMHg4OCwgMHgxMiwgMHg3MCwgMHgwMSwKKwkweDg4LCAweDBkLCAweDAyLCAweDAxLAorCTB4ODgsIDB4MGYsIDB4MDAsIDB4MDEsCisJMHg4OCwgMHgwMywgMHg3MSwgMHgwMSwgMHg4OCwgMHgwNCwgMHgwMCwgMHgwMSwJLyogMyAqLworCTB4ODgsIDB4MDIsIDB4MTAsIDB4MDEsCisJMHg4OCwgMHgwMCwgMHhENCwgMHgwMSwgMHg4OCwgMHgwMSwgMHgwMSwgMHgwMSwJLyogNSAqLworCTB4ODgsIDB4MEIsIDB4MDAsIDB4MDEsCisJMHg4OCwgMHgwQSwgMHgwQSwgMHgwMSwKKwkweDg4LCAweDAwLCAweDA4LCAweDAxLCAweDg4LCAweDAxLCAweDAwLCAweDAxLAkvKiA4ICovCisJMHg4OCwgMHgwNSwgMHgwMSwgMHgwMSwKKwkweEExLCAweDE4LCAweDAwLCAweDAxLAorCTB4MDAKK307CisKK3N0YXRpYyBjb25zdCBfX3U4IHJlZzIwW10gPSB7IDB4MTAsIDB4NDIsIDB4ODEsIDB4MTksIDB4ZDMsIDB4ZmYsIDB4YTcsIDB4ZmYgfTsKK3N0YXRpYyBjb25zdCBfX3U4IHJlZzI4W10gPSB7IDB4ODcsIDB4MDAsIDB4ODcsIDB4MDAsIDB4OGYsIDB4ZmYsIDB4ZWEsIDB4ZmYgfTsKK3N0YXRpYyBjb25zdCBfX3U4IHJlZzEwW10gPSB7IDB4YjEsIDB4YjEgfTsKK3N0YXRpYyBjb25zdCBfX3U4IHJlZzcxYVtdID0geyAweDA4LCAweDE4LCAweDBhLCAweDFlIH07CS8qIDY0MCAqLworc3RhdGljIGNvbnN0IF9fdTggcmVnNzFiW10gPSB7IDB4MDQsIDB4MGMsIDB4MDUsIDB4MGYgfTsKKwkvKiAzNTJ7MHgwNCwweDBhLDB4MDYsMHgxMn07IC8vMzUyezB4MDUsMHgwZSwweDA2LDB4MTF9OyAvLzM1MiAqLworc3RhdGljIGNvbnN0IF9fdTggcmVnNzFjW10gPSB7IDB4MDIsIDB4MDcsIDB4MDMsIDB4MDkgfTsKKwkJCQkJLyogMzIwezB4MDQsMHgwYywweDA1LDB4MGZ9OyAvLzMyMCAqLworc3RhdGljIGNvbnN0IF9fdTggcmVnNzFkW10gPSB7IDB4MDIsIDB4MDcsIDB4MDMsIDB4MDkgfTsJLyogMTc2ICovCitzdGF0aWMgY29uc3QgX191OCByZWc3YltdID0geyAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweGZmIH07CisKK3N0YXRpYyB2b2lkIGN4X3NlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2KmdzcGNhX2RldikKK3sKKwlpbnQgaSA9IDA7CisJaW50IGxlbmd0aDsKKwljb25zdCBfX3U4ICpwdHNlbnNvciA9IGN4c2Vuc29yOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDAwMjAsIHJlZzIwLCA4KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAyOCwgcmVnMjgsIDgpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMDEwLCByZWcxMCwgOCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDkyLCAweDAzKTsKKworCXN3aXRjaCAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYpIHsKKwljYXNlIDA6CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMDcxLCByZWc3MWEsIDQpOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMDcxLCByZWc3MWIsIDQpOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSAyOiAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDA3MSwgcmVnNzFjLCA0KTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDA3MSwgcmVnNzFkLCA0KTsKKwkJYnJlYWs7CisJfQorCXJlZ193KGdzcGNhX2RldiwgMHgwMDdiLCByZWc3YiwgNik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMGY4LCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAxMCwgcmVnMTAsIDgpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDA5OCwgMHg0MSk7CisJZm9yIChpID0gMDsgaSA8IDExOyBpKyspIHsKKwkJaWYgKGkgPT0gMyB8fCBpID09IDUgfHwgaSA9PSA4KQorCQkJbGVuZ3RoID0gODsKKwkJZWxzZQorCQkJbGVuZ3RoID0gNDsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwZTUsIHB0c2Vuc29yLCBsZW5ndGgpOworCQlpZiAobGVuZ3RoID09IDQpCisJCQlyZWdfcihnc3BjYV9kZXYsIDB4MDBlOCwgMSk7CisJCWVsc2UKKwkJCXJlZ19yKGdzcGNhX2RldiwgMHgwMGU4LCBsZW5ndGgpOworCQlwdHNlbnNvciArPSBsZW5ndGg7CisJfQorCXJlZ19yKGdzcGNhX2RldiwgMHgwMGU3LCA4KTsKK30KKworc3RhdGljIGNvbnN0IF9fdTggY3hfaW5pdHNfMTc2W10gPSB7CisJMHgzMywgMHg4MSwgMHhCMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwQSwgMHgwMywJLyogMTc2eDE0NCAqLworCTB4MDAsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MUIsIDB4MDUsIDB4MzAsIDB4MDMsCisJMHg2NSwgMHgxNSwgMHgxOCwgMHgyNSwgMHgwMywgMHgyNSwgMHgwOCwgMHgzMCwKKwkweDNCLCAweDI1LCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorCTB4REMsIDB4RkYsIDB4RUUsIDB4RkYsIDB4QzUsIDB4RkYsIDB4QkYsIDB4RkYsCisJMHhGNywgMHhGRiwgMHg4OCwgMHhGRiwgMHg2NiwgMHgwMiwgMHgyOCwgMHgwMiwKKwkweDFFLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9Oworc3RhdGljIGNvbnN0IF9fdTggY3hfaW5pdHNfMzIwW10gPSB7CisJMHg3ZiwgMHg3ZiwgMHg0MCwgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMiwgMHgwMSwKKwkweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDAyLCAweDAxLAorCTB4NjUsIDB4NDUsIDB4ZmEsIDB4NGMsIDB4MmMsIDB4ZGYsIDB4YjksIDB4ODEsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGUyLCAweGZmLCAweGYxLCAweGZmLCAweGMyLCAweGZmLCAweGJjLCAweGZmLAorCTB4ZjUsIDB4ZmYsIDB4NmQsIDB4ZmYsIDB4ZjYsIDB4MDEsIDB4NDMsIDB4MDIsCisJMHhkMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKK3N0YXRpYyBjb25zdCBfX3U4IGN4X2luaXRzXzM1MltdID0geworCTB4MmUsIDB4N2MsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MDEsIDB4MDUsIDB4MDMsCisJMHgwMCwgMHgwNiwgMHgwMywgMHgwNiwgMHgxYiwgMHgxMCwgMHgwNSwgMHgzYiwKKwkweDMwLCAweDI1LCAweDE4LCAweDI1LCAweDA4LCAweDMwLCAweDAzLCAweDI1LAorCTB4M2IsIDB4MzAsIDB4MjUsIDB4MWIsIDB4MTAsIDB4MDUsIDB4MDAsIDB4MDAsCisJMHhlMywgMHhmZiwgMHhmMSwgMHhmZiwgMHhjMiwgMHhmZiwgMHhiYywgMHhmZiwKKwkweGY1LCAweGZmLCAweDZiLCAweGZmLCAweGVlLCAweDAxLCAweDQzLCAweDAyLAorCTB4ZTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CitzdGF0aWMgY29uc3QgX191OCBjeF9pbml0c182NDBbXSA9IHsKKwkweDdlLCAweDdlLCAweDgwLCAweDAyLCAweGUwLCAweDAxLCAweDAxLCAweDAxLAorCTB4MDAsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDEsCisJMHg2NSwgMHg0NSwgMHhmNywgMHg1MiwgMHgyYywgMHhkZiwgMHhiOSwgMHg4MSwKKwkweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTIsIDB4ZmYsIDB4ZjEsIDB4ZmYsIDB4YzIsIDB4ZmYsIDB4YmMsIDB4ZmYsCisJMHhmNiwgMHhmZiwgMHg3YiwgMHhmZiwgMHgwMSwgMHgwMiwgMHg0MywgMHgwMiwKKwkweDc3LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgdm9pZCBjeDExNjQ2X2luaXRzaXplKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwljb25zdCBfX3U4ICpjeGluaXQ7CisJc3RhdGljIGNvbnN0IF9fdTggcmVnMTJbXSA9IHsgMHgwOCwgMHgwNSwgMHgwNywgMHgwNCwgMHgyNCB9OworCXN0YXRpYyBjb25zdCBfX3U4IHJlZzE3W10gPQorCQkJeyAweDBhLCAweDAwLCAweGYyLCAweDAxLCAweDBmLCAweDAwLCAweDk3LCAweDAyIH07CisKKwlzd2l0Y2ggKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KSB7CisJY2FzZSAwOgorCQljeGluaXQgPSBjeF9pbml0c182NDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJY3hpbml0ID0gY3hfaW5pdHNfMzUyOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSAyOiAqLworCQljeGluaXQgPSBjeF9pbml0c18zMjA7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJY3hpbml0ID0gY3hfaW5pdHNfMTc2OworCQlicmVhazsKKwl9CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDlhLCAweDAxKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwMTAsIDB4MTApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMDEyLCByZWcxMiwgNSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwMTcsIHJlZzE3LCA4KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwYzAsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDBjMSwgMHgwNCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMGMyLCAweDA0KTsKKworCXJlZ193KGdzcGNhX2RldiwgMHgwMDYxLCBjeGluaXQsIDgpOworCWN4aW5pdCArPSA4OworCXJlZ193KGdzcGNhX2RldiwgMHgwMGNhLCBjeGluaXQsIDgpOworCWN4aW5pdCArPSA4OworCXJlZ193KGdzcGNhX2RldiwgMHgwMGQyLCBjeGluaXQsIDgpOworCWN4aW5pdCArPSA4OworCXJlZ193KGdzcGNhX2RldiwgMHgwMGRhLCBjeGluaXQsIDYpOworCWN4aW5pdCArPSA4OworCXJlZ193KGdzcGNhX2RldiwgMHgwMDQxLCBjeGluaXQsIDgpOworCWN4aW5pdCArPSA4OworCXJlZ193KGdzcGNhX2RldiwgMHgwMDQ5LCBjeGluaXQsIDgpOworCWN4aW5pdCArPSA4OworCXJlZ193KGdzcGNhX2RldiwgMHgwMDUxLCBjeGluaXQsIDIpOworCisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTAsIDEpOworfQorCitzdGF0aWMgY29uc3QgX191OCBjeF9qcGVnX2luaXRbXVs4XSA9IHsKKwl7MHhmZiwgMHhkOCwgMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxNX0sCS8qIDEgKi8KKwl7MHgwZiwgMHgxMCwgMHgxMiwgMHgxMCwgMHgwZCwgMHgxNSwgMHgxMiwgMHgxMX0sCisJezB4MTIsIDB4MTgsIDB4MTYsIDB4MTUsIDB4MTksIDB4MjAsIDB4MzUsIDB4MjJ9LAorCXsweDIwLCAweDFkLCAweDFkLCAweDIwLCAweDQxLCAweDJlLCAweDMxLCAweDI2fSwKKwl7MHgzNSwgMHg0ZCwgMHg0MywgMHg1MSwgMHg0ZiwgMHg0YiwgMHg0MywgMHg0YX0sCisJezB4NDksIDB4NTUsIDB4NUYsIDB4NzksIDB4NjcsIDB4NTUsIDB4NUEsIDB4NzN9LAorCXsweDVCLCAweDQ5LCAweDRBLCAweDZBLCAweDkwLCAweDZCLCAweDczLCAweDdEfSwKKwl7MHg4MSwgMHg4OCwgMHg4OSwgMHg4OCwgMHg1MiwgMHg2NiwgMHg5NSwgMHhBMH0sCisJezB4OTQsIDB4ODQsIDB4OUUsIDB4NzksIDB4ODUsIDB4ODgsIDB4ODMsIDB4MDF9LAorCXsweDE1LCAweDBGLCAweDEwLCAweDEyLCAweDEwLCAweDBELCAweDE1LCAweDEyfSwKKwl7MHgxMSwgMHgxMiwgMHgxOCwgMHgxNiwgMHgxNSwgMHgxOSwgMHgyMCwgMHgzNX0sCisJezB4MjIsIDB4MjAsIDB4MUQsIDB4MUQsIDB4MjAsIDB4NDEsIDB4MkUsIDB4MzF9LAorCXsweDI2LCAweDM1LCAweDRELCAweDQzLCAweDUxLCAweDRGLCAweDRCLCAweDQzfSwKKwl7MHg0QSwgMHg0OSwgMHg1NSwgMHg1RiwgMHg3OSwgMHg2NywgMHg1NSwgMHg1QX0sCisJezB4NzMsIDB4NUIsIDB4NDksIDB4NEEsIDB4NkEsIDB4OTAsIDB4NkIsIDB4NzN9LAorCXsweDdELCAweDgxLCAweDg4LCAweDg5LCAweDg4LCAweDUyLCAweDY2LCAweDk1fSwKKwl7MHhBMCwgMHg5NCwgMHg4NCwgMHg5RSwgMHg3OSwgMHg4NSwgMHg4OCwgMHg4M30sCisJezB4RkYsIDB4QzQsIDB4MDEsIDB4QTIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDV9LAorCXsweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMn0sCisJezB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MEF9LAorCXsweDBCLCAweDAxLCAweDAwLCAweDAzLCAweDAxLCAweDAxLCAweDAxLCAweDAxfSwKKwl7MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDV9LAorCXsweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDEwLCAweDAwfSwKKwl7MHgwMiwgMHgwMSwgMHgwMywgMHgwMywgMHgwMiwgMHgwNCwgMHgwMywgMHgwNX0sCisJezB4MDUsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N0QsIDB4MDF9LAorCXsweDAyLCAweDAzLCAweDAwLCAweDA0LCAweDExLCAweDA1LCAweDEyLCAweDIxfSwKKwl7MHgzMSwgMHg0MSwgMHgwNiwgMHgxMywgMHg1MSwgMHg2MSwgMHgwNywgMHgyMn0sCisJezB4NzEsIDB4MTQsIDB4MzIsIDB4ODEsIDB4OTEsIDB4QTEsIDB4MDgsIDB4MjN9LAorCXsweDQyLCAweEIxLCAweEMxLCAweDE1LCAweDUyLCAweEQxLCAweEYwLCAweDI0fSwKKwl7MHgzMywgMHg2MiwgMHg3MiwgMHg4MiwgMHgwOSwgMHgwQSwgMHgxNiwgMHgxN30sCisJezB4MTgsIDB4MTksIDB4MUEsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsIDB4Mjl9LAorCXsweDJBLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDNBfSwKKwl7MHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwgMHg0OSwgMHg0QX0sCisJezB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsIDB4NTksIDB4NUF9LAorCXsweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LCAweDY5LCAweDZBfSwKKwl7MHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwgMHg3OSwgMHg3QX0sCisJezB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsIDB4ODgsIDB4ODksIDB4OEF9LAorCXsweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LCAweDk4LCAweDk5fSwKKwl7MHg5QSwgMHhBMiwgMHhBMywgMHhBNCwgMHhBNSwgMHhBNiwgMHhBNywgMHhBOH0sCisJezB4QTksIDB4QUEsIDB4QjIsIDB4QjMsIDB4QjQsIDB4QjUsIDB4QjYsIDB4Qjd9LAorCXsweEI4LCAweEI5LCAweEJBLCAweEMyLCAweEMzLCAweEM0LCAweEM1LCAweEM2fSwKKwl7MHhDNywgMHhDOCwgMHhDOSwgMHhDQSwgMHhEMiwgMHhEMywgMHhENCwgMHhENX0sCisJezB4RDYsIDB4RDcsIDB4RDgsIDB4RDksIDB4REEsIDB4RTEsIDB4RTIsIDB4RTN9LAorCXsweEU0LCAweEU1LCAweEU2LCAweEU3LCAweEU4LCAweEU5LCAweEVBLCAweEYxfSwKKwl7MHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNywgMHhGOCwgMHhGOX0sCisJezB4RkEsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDR9LAorCXsweDAzLCAweDA0LCAweDA3LCAweDA1LCAweDA0LCAweDA0LCAweDAwLCAweDAxfSwKKwl7MHgwMiwgMHg3NywgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMSwgMHgwNH0sCisJezB4MDUsIDB4MjEsIDB4MzEsIDB4MDYsIDB4MTIsIDB4NDEsIDB4NTEsIDB4MDd9LAorCXsweDYxLCAweDcxLCAweDEzLCAweDIyLCAweDMyLCAweDgxLCAweDA4LCAweDE0fSwKKwl7MHg0MiwgMHg5MSwgMHhBMSwgMHhCMSwgMHhDMSwgMHgwOSwgMHgyMywgMHgzM30sCisJezB4NTIsIDB4RjAsIDB4MTUsIDB4NjIsIDB4NzIsIDB4RDEsIDB4MEEsIDB4MTZ9LAorCXsweDI0LCAweDM0LCAweEUxLCAweDI1LCAweEYxLCAweDE3LCAweDE4LCAweDE5fSwKKwl7MHgxQSwgMHgyNiwgMHgyNywgMHgyOCwgMHgyOSwgMHgyQSwgMHgzNSwgMHgzNn0sCisJezB4MzcsIDB4MzgsIDB4MzksIDB4M0EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDZ9LAorCXsweDQ3LCAweDQ4LCAweDQ5LCAweDRBLCAweDUzLCAweDU0LCAweDU1LCAweDU2fSwKKwl7MHg1NywgMHg1OCwgMHg1OSwgMHg1QSwgMHg2MywgMHg2NCwgMHg2NSwgMHg2Nn0sCisJezB4NjcsIDB4NjgsIDB4NjksIDB4NkEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzZ9LAorCXsweDc3LCAweDc4LCAweDc5LCAweDdBLCAweDgyLCAweDgzLCAweDg0LCAweDg1fSwKKwl7MHg4NiwgMHg4NywgMHg4OCwgMHg4OSwgMHg4QSwgMHg5MiwgMHg5MywgMHg5NH0sCisJezB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsIDB4OTksIDB4OUEsIDB4QTIsIDB4QTN9LAorCXsweEE0LCAweEE1LCAweEE2LCAweEE3LCAweEE4LCAweEE5LCAweEFBLCAweEIyfSwKKwl7MHhCMywgMHhCNCwgMHhCNSwgMHhCNiwgMHhCNywgMHhCOCwgMHhCOSwgMHhCQX0sCisJezB4QzIsIDB4QzMsIDB4QzQsIDB4QzUsIDB4QzYsIDB4QzcsIDB4QzgsIDB4Qzl9LAorCXsweENBLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LCAweEQ3LCAweEQ4fSwKKwl7MHhEOSwgMHhEQSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFN30sCisJezB4RTgsIDB4RTksIDB4RUEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjZ9LAorCXsweEY3LCAweEY4LCAweEY5LCAweEZBLCAweEZGLCAweDIwLCAweDAwLCAweDFGfSwKKwl7MHgwMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MjJ9LAorCXsweDIyLCAweDExLCAweDIyLCAweDIyLCAweDExLCAweDMzLCAweDMzLCAweDExfSwKKwl7MHg0NCwgMHg2NiwgMHgyMiwgMHg1NSwgMHg2NiwgMHhGRiwgMHhERCwgMHgwMH0sCisJezB4MDQsIDB4MDAsIDB4MTQsIDB4RkYsIDB4QzAsIDB4MDAsIDB4MTEsIDB4MDh9LAorCXsweDAwLCAweEYwLCAweDAxLCAweDQwLCAweDAzLCAweDAwLCAweDIxLCAweDAwfSwKKwl7MHgwMSwgMHgxMSwgMHgwMSwgMHgwMiwgMHgxMSwgMHgwMSwgMHhGRiwgMHhEQX0sCisJezB4MDAsIDB4MEMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4MDJ9LAorCXsweDExLCAweDAwLCAweDNGLCAweDAwLCAweEZGLCAweEQ5LCAweDAwLCAweDAwfQkvKiA3OSAqLworfTsKKworCitzdGF0aWMgY29uc3QgX191OCBjeGpwZWdfNjQwW11bOF0gPSB7CisJezB4ZmYsIDB4ZDgsIDB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTB9LAkvKiAxICovCisJezB4MGIsIDB4MGMsIDB4MGUsIDB4MGMsIDB4MGEsIDB4MTAsIDB4MGUsIDB4MGR9LAorCXsweDBlLCAweDEyLCAweDExLCAweDEwLCAweDEzLCAweDE4LCAweDI4LCAweDFhfSwKKwl7MHgxOCwgMHgxNiwgMHgxNiwgMHgxOCwgMHgzMSwgMHgyMywgMHgyNSwgMHgxZH0sCisJezB4MjgsIDB4M2EsIDB4MzMsIDB4M0QsIDB4M0MsIDB4MzksIDB4MzMsIDB4Mzh9LAorCXsweDM3LCAweDQwLCAweDQ4LCAweDVDLCAweDRFLCAweDQwLCAweDQ0LCAweDU3fSwKKwl7MHg0NSwgMHgzNywgMHgzOCwgMHg1MCwgMHg2RCwgMHg1MSwgMHg1NywgMHg1Rn0sCisJezB4NjIsIDB4NjcsIDB4NjgsIDB4NjcsIDB4M0UsIDB4NEQsIDB4NzEsIDB4Nzl9LAorCXsweDcwLCAweDY0LCAweDc4LCAweDVDLCAweDY1LCAweDY3LCAweDYzLCAweDAxfSwKKwl7MHgxMCwgMHgwQiwgMHgwQywgMHgwRSwgMHgwQywgMHgwQSwgMHgxMCwgMHgwRX0sCisJezB4MEQsIDB4MEUsIDB4MTIsIDB4MTEsIDB4MTAsIDB4MTMsIDB4MTgsIDB4Mjh9LAorCXsweDFBLCAweDE4LCAweDE2LCAweDE2LCAweDE4LCAweDMxLCAweDIzLCAweDI1fSwKKwl7MHgxRCwgMHgyOCwgMHgzQSwgMHgzMywgMHgzRCwgMHgzQywgMHgzOSwgMHgzM30sCisJezB4MzgsIDB4MzcsIDB4NDAsIDB4NDgsIDB4NUMsIDB4NEUsIDB4NDAsIDB4NDR9LAorCXsweDU3LCAweDQ1LCAweDM3LCAweDM4LCAweDUwLCAweDZELCAweDUxLCAweDU3fSwKKwl7MHg1RiwgMHg2MiwgMHg2NywgMHg2OCwgMHg2NywgMHgzRSwgMHg0RCwgMHg3MX0sCisJezB4NzksIDB4NzAsIDB4NjQsIDB4NzgsIDB4NUMsIDB4NjUsIDB4NjcsIDB4NjN9LAorCXsweEZGLCAweDIwLCAweDAwLCAweDFGLCAweDAwLCAweDgzLCAweDAwLCAweDAwfSwKKwl7MHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMH0sCisJezB4MTEsIDB4MjIsIDB4MDAsIDB4MjIsIDB4MjIsIDB4MTEsIDB4MjIsIDB4MjJ9LAorCXsweDExLCAweDMzLCAweDMzLCAweDExLCAweDQ0LCAweDY2LCAweDIyLCAweDU1fSwKKwl7MHg2NiwgMHhGRiwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyOCwgMHhGRn0sCisJezB4QzAsIDB4MDAsIDB4MTEsIDB4MDgsIDB4MDEsIDB4RTAsIDB4MDIsIDB4ODB9LAorCXsweDAzLCAweDAwLCAweDIxLCAweDAwLCAweDAxLCAweDExLCAweDAxLCAweDAyfSwKKwl7MHgxMSwgMHgwMSwgMHhGRiwgMHhEQSwgMHgwMCwgMHgwQywgMHgwMywgMHgwMH0sCisJezB4MDAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTEsIDB4MDAsIDB4M0YsIDB4MDB9LAorCXsweEZGLCAweEQ5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfQkvKiAyNyAqLworfTsKK3N0YXRpYyBjb25zdCBfX3U4IGN4anBlZ18zNTJbXVs4XSA9IHsKKwl7MHhmZiwgMHhkOCwgMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwZH0sCisJezB4MDksIDB4MDksIDB4MGIsIDB4MDksIDB4MDgsIDB4MEQsIDB4MGIsIDB4MGF9LAorCXsweDBiLCAweDBlLCAweDBkLCAweDBkLCAweDBmLCAweDEzLCAweDFmLCAweDE0fSwKKwl7MHgxMywgMHgxMSwgMHgxMSwgMHgxMywgMHgyNiwgMHgxYiwgMHgxZCwgMHgxN30sCisJezB4MUYsIDB4MkQsIDB4MjgsIDB4MzAsIDB4MkYsIDB4MkQsIDB4MjgsIDB4MkN9LAorCXsweDJCLCAweDMyLCAweDM4LCAweDQ4LCAweDNELCAweDMyLCAweDM1LCAweDQ0fSwKKwl7MHgzNiwgMHgyQiwgMHgyQywgMHgzRiwgMHg1NSwgMHgzRiwgMHg0NCwgMHg0QX0sCisJezB4NEQsIDB4NTAsIDB4NTEsIDB4NTAsIDB4MzAsIDB4M0MsIDB4NTgsIDB4NUZ9LAorCXsweDU4LCAweDRFLCAweDVFLCAweDQ4LCAweDRGLCAweDUwLCAweDRELCAweDAxfSwKKwl7MHgwRCwgMHgwOSwgMHgwOSwgMHgwQiwgMHgwOSwgMHgwOCwgMHgwRCwgMHgwQn0sCisJezB4MEEsIDB4MEIsIDB4MEUsIDB4MEQsIDB4MEQsIDB4MEYsIDB4MTMsIDB4MUZ9LAorCXsweDE0LCAweDEzLCAweDExLCAweDExLCAweDEzLCAweDI2LCAweDFCLCAweDFEfSwKKwl7MHgxNywgMHgxRiwgMHgyRCwgMHgyOCwgMHgzMCwgMHgyRiwgMHgyRCwgMHgyOH0sCisJezB4MkMsIDB4MkIsIDB4MzIsIDB4MzgsIDB4NDgsIDB4M0QsIDB4MzIsIDB4MzV9LAorCXsweDQ0LCAweDM2LCAweDJCLCAweDJDLCAweDNGLCAweDU1LCAweDNGLCAweDQ0fSwKKwl7MHg0QSwgMHg0RCwgMHg1MCwgMHg1MSwgMHg1MCwgMHgzMCwgMHgzQywgMHg1OH0sCisJezB4NUYsIDB4NTgsIDB4NEUsIDB4NUUsIDB4NDgsIDB4NEYsIDB4NTAsIDB4NER9LAorCXsweEZGLCAweDIwLCAweDAwLCAweDFGLCAweDAxLCAweDgzLCAweDAwLCAweDAwfSwKKwl7MHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMH0sCisJezB4MTEsIDB4MjIsIDB4MDAsIDB4MjIsIDB4MjIsIDB4MTEsIDB4MjIsIDB4MjJ9LAorCXsweDExLCAweDMzLCAweDMzLCAweDExLCAweDQ0LCAweDY2LCAweDIyLCAweDU1fSwKKwl7MHg2NiwgMHhGRiwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxNiwgMHhGRn0sCisJezB4QzAsIDB4MDAsIDB4MTEsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDEsIDB4NjB9LAorCXsweDAzLCAweDAwLCAweDIxLCAweDAwLCAweDAxLCAweDExLCAweDAxLCAweDAyfSwKKwl7MHgxMSwgMHgwMSwgMHhGRiwgMHhEQSwgMHgwMCwgMHgwQywgMHgwMywgMHgwMH0sCisJezB4MDAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTEsIDB4MDAsIDB4M0YsIDB4MDB9LAorCXsweEZGLCAweEQ5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfQorfTsKK3N0YXRpYyBjb25zdCBfX3U4IGN4anBlZ18zMjBbXVs4XSA9IHsKKwl7MHhmZiwgMHhkOCwgMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwNX0sCisJezB4MDMsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDUsIDB4MDQsIDB4MDR9LAorCXsweDA0LCAweDA1LCAweDA1LCAweDA1LCAweDA2LCAweDA3LCAweDBjLCAweDA4fSwKKwl7MHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwZiwgMHgwYiwgMHgwYiwgMHgwOX0sCisJezB4MEMsIDB4MTEsIDB4MEYsIDB4MTIsIDB4MTIsIDB4MTEsIDB4MGYsIDB4MTF9LAorCXsweDExLCAweDEzLCAweDE2LCAweDFDLCAweDE3LCAweDEzLCAweDE0LCAweDFBfSwKKwl7MHgxNSwgMHgxMSwgMHgxMSwgMHgxOCwgMHgyMSwgMHgxOCwgMHgxQSwgMHgxRH0sCisJezB4MUQsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MTMsIDB4MTcsIDB4MjIsIDB4MjR9LAorCXsweDIyLCAweDFFLCAweDI0LCAweDFDLCAweDFFLCAweDFGLCAweDFFLCAweDAxfSwKKwl7MHgwNSwgMHgwMywgMHgwNCwgMHgwNCwgMHgwNCwgMHgwMywgMHgwNSwgMHgwNH0sCisJezB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEN9LAorCXsweDA4LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDBGLCAweDBCLCAweDBCfSwKKwl7MHgwOSwgMHgwQywgMHgxMSwgMHgwRiwgMHgxMiwgMHgxMiwgMHgxMSwgMHgwRn0sCisJezB4MTEsIDB4MTEsIDB4MTMsIDB4MTYsIDB4MUMsIDB4MTcsIDB4MTMsIDB4MTR9LAorCXsweDFBLCAweDE1LCAweDExLCAweDExLCAweDE4LCAweDIxLCAweDE4LCAweDFBfSwKKwl7MHgxRCwgMHgxRCwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxMywgMHgxNywgMHgyMn0sCisJezB4MjQsIDB4MjIsIDB4MUUsIDB4MjQsIDB4MUMsIDB4MUUsIDB4MUYsIDB4MUV9LAorCXsweEZGLCAweDIwLCAweDAwLCAweDFGLCAweDAyLCAweDBDLCAweDAwLCAweDAwfSwKKwl7MHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMH0sCisJezB4MTEsIDB4MjIsIDB4MDAsIDB4MjIsIDB4MjIsIDB4MTEsIDB4MjIsIDB4MjJ9LAorCXsweDExLCAweDMzLCAweDMzLCAweDExLCAweDQ0LCAweDY2LCAweDIyLCAweDU1fSwKKwl7MHg2NiwgMHhGRiwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxNCwgMHhGRn0sCisJezB4QzAsIDB4MDAsIDB4MTEsIDB4MDgsIDB4MDAsIDB4RjAsIDB4MDEsIDB4NDB9LAorCXsweDAzLCAweDAwLCAweDIxLCAweDAwLCAweDAxLCAweDExLCAweDAxLCAweDAyfSwKKwl7MHgxMSwgMHgwMSwgMHhGRiwgMHhEQSwgMHgwMCwgMHgwQywgMHgwMywgMHgwMH0sCisJezB4MDAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTEsIDB4MDAsIDB4M0YsIDB4MDB9LAorCXsweEZGLCAweEQ5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfQkvKiAyNyAqLworfTsKK3N0YXRpYyBjb25zdCBfX3U4IGN4anBlZ18xNzZbXVs4XSA9IHsKKwl7MHhmZiwgMHhkOCwgMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwZH0sCisJezB4MDksIDB4MDksIDB4MEIsIDB4MDksIDB4MDgsIDB4MEQsIDB4MEIsIDB4MEF9LAorCXsweDBCLCAweDBFLCAweDBELCAweDBELCAweDBGLCAweDEzLCAweDFGLCAweDE0fSwKKwl7MHgxMywgMHgxMSwgMHgxMSwgMHgxMywgMHgyNiwgMHgxQiwgMHgxRCwgMHgxN30sCisJezB4MUYsIDB4MkQsIDB4MjgsIDB4MzAsIDB4MkYsIDB4MkQsIDB4MjgsIDB4MkN9LAorCXsweDJCLCAweDMyLCAweDM4LCAweDQ4LCAweDNELCAweDMyLCAweDM1LCAweDQ0fSwKKwl7MHgzNiwgMHgyQiwgMHgyQywgMHgzRiwgMHg1NSwgMHgzRiwgMHg0NCwgMHg0QX0sCisJezB4NEQsIDB4NTAsIDB4NTEsIDB4NTAsIDB4MzAsIDB4M0MsIDB4NTgsIDB4NUZ9LAorCXsweDU4LCAweDRFLCAweDVFLCAweDQ4LCAweDRGLCAweDUwLCAweDRELCAweDAxfSwKKwl7MHgwRCwgMHgwOSwgMHgwOSwgMHgwQiwgMHgwOSwgMHgwOCwgMHgwRCwgMHgwQn0sCisJezB4MEEsIDB4MEIsIDB4MEUsIDB4MEQsIDB4MEQsIDB4MEYsIDB4MTMsIDB4MUZ9LAorCXsweDE0LCAweDEzLCAweDExLCAweDExLCAweDEzLCAweDI2LCAweDFCLCAweDFEfSwKKwl7MHgxNywgMHgxRiwgMHgyRCwgMHgyOCwgMHgzMCwgMHgyRiwgMHgyRCwgMHgyOH0sCisJezB4MkMsIDB4MkIsIDB4MzIsIDB4MzgsIDB4NDgsIDB4M0QsIDB4MzIsIDB4MzV9LAorCXsweDQ0LCAweDM2LCAweDJCLCAweDJDLCAweDNGLCAweDU1LCAweDNGLCAweDQ0fSwKKwl7MHg0QSwgMHg0RCwgMHg1MCwgMHg1MSwgMHg1MCwgMHgzMCwgMHgzQywgMHg1OH0sCisJezB4NUYsIDB4NTgsIDB4NEUsIDB4NUUsIDB4NDgsIDB4NEYsIDB4NTAsIDB4NER9LAorCXsweEZGLCAweDIwLCAweDAwLCAweDFGLCAweDAzLCAweEExLCAweDAwLCAweDAwfSwKKwl7MHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMH0sCisJezB4MTEsIDB4MjIsIDB4MDAsIDB4MjIsIDB4MjIsIDB4MTEsIDB4MjIsIDB4MjJ9LAorCXsweDExLCAweDMzLCAweDMzLCAweDExLCAweDQ0LCAweDY2LCAweDIyLCAweDU1fSwKKwl7MHg2NiwgMHhGRiwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwQiwgMHhGRn0sCisJezB4QzAsIDB4MDAsIDB4MTEsIDB4MDgsIDB4MDAsIDB4OTAsIDB4MDAsIDB4QjB9LAorCXsweDAzLCAweDAwLCAweDIxLCAweDAwLCAweDAxLCAweDExLCAweDAxLCAweDAyfSwKKwl7MHgxMSwgMHgwMSwgMHhGRiwgMHhEQSwgMHgwMCwgMHgwQywgMHgwMywgMHgwMH0sCisJezB4MDAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTEsIDB4MDAsIDB4M0YsIDB4MDB9LAorCXsweEZGLCAweEQ5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfQorfTsKKy8qIDY0MCB0YWtlIHdpdGggdGhlIHpjeDMweCBwYXJ0ICovCitzdGF0aWMgY29uc3QgX191OCBjeGpwZWdfcXRhYmxlW11bOF0gPSB7CisJezB4ZmYsIDB4ZDgsIDB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDh9LAorCXsweDA2LCAweDA2LCAweDA3LCAweDA2LCAweDA1LCAweDA4LCAweDA3LCAweDA3fSwKKwl7MHgwNywgMHgwOSwgMHgwOSwgMHgwOCwgMHgwYSwgMHgwYywgMHgxNCwgMHgwYX0sCisJezB4MGMsIDB4MGIsIDB4MGIsIDB4MGMsIDB4MTksIDB4MTIsIDB4MTMsIDB4MGZ9LAorCXsweDE0LCAweDFkLCAweDFhLCAweDFmLCAweDFlLCAweDFkLCAweDFhLCAweDFjfSwKKwl7MHgxYywgMHgyMCwgMHgyNCwgMHgyZSwgMHgyNywgMHgyMCwgMHgyMiwgMHgyY30sCisJezB4MjMsIDB4MWMsIDB4MWMsIDB4MjgsIDB4MzcsIDB4MjksIDB4MmMsIDB4MzB9LAorCXsweDMxLCAweDM0LCAweDM0LCAweDM0LCAweDFmLCAweDI3LCAweDM5LCAweDNkfSwKKwl7MHgzOCwgMHgzMiwgMHgzYywgMHgyZSwgMHgzMywgMHgzNCwgMHgzMiwgMHgwMX0sCisJezB4MDksIDB4MDksIDB4MDksIDB4MGMsIDB4MGIsIDB4MGMsIDB4MTgsIDB4MGF9LAorCXsweDBhLCAweDE4LCAweDMyLCAweDIxLCAweDFjLCAweDIxLCAweDMyLCAweDMyfSwKKwl7MHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMn0sCisJezB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzJ9LAorCXsweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyfSwKKwl7MHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMn0sCisJezB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzJ9LAorCXsweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDMyfSwKKwl7MHhGRiwgMHhEOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0JLyogMTggKi8KK307CisKKworc3RhdGljIHZvaWQgY3gxMTY0Nl9qcGVnSW5pdChzdHJ1Y3QgZ3NwY2FfZGV2KmdzcGNhX2RldikKK3sKKwlpbnQgaTsKKwlpbnQgbGVuZ3RoOworCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMGMwLCAweDAxKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwYzMsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDBjMCwgMHgwMCk7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDEsIDEpOworCWxlbmd0aCA9IDg7CisJZm9yIChpID0gMDsgaSA8IDc5OyBpKyspIHsKKwkJaWYgKGkgPT0gNzgpCisJCQlsZW5ndGggPSA2OworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAwOCwgY3hfanBlZ19pbml0W2ldLCBsZW5ndGgpOworCX0KKwlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMiwgMSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDU1LCAweDE0KTsKK30KKworc3RhdGljIGNvbnN0IF9fdTggcmVnMTJbXSA9IHsgMHgwYSwgMHgwNSwgMHgwNywgMHgwNCwgMHgxOSB9Oworc3RhdGljIGNvbnN0IF9fdTggcmVnRTVfOFtdID0KKwkJeyAweDg4LCAweDAwLCAweGQ0LCAweDAxLCAweDg4LCAweDAxLCAweDAxLCAweDAxIH07CitzdGF0aWMgY29uc3QgX191OCByZWdFNWFbXSA9IHsgMHg4OCwgMHgwYSwgMHgwYywgMHgwMSB9Oworc3RhdGljIGNvbnN0IF9fdTggcmVnRTViW10gPSB7IDB4ODgsIDB4MGIsIDB4MTIsIDB4MDEgfTsKK3N0YXRpYyBjb25zdCBfX3U4IHJlZ0U1Y1tdID0geyAweDg4LCAweDA1LCAweDAxLCAweDAxIH07CitzdGF0aWMgY29uc3QgX191OCByZWc1MVtdID0geyAweDc3LCAweDAzIH07CisjZGVmaW5lIHJlZzcwIDB4MDMKKworc3RhdGljIHZvaWQgY3gxMTY0Nl9qcGVnKHN0cnVjdCBnc3BjYV9kZXYqZ3NwY2FfZGV2KQoreworCWludCBpOworCWludCBsZW5ndGg7CisJX191OCBSZWc1NTsKKwlpbnQgcmV0cnk7CisKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwYzAsIDB4MDEpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDBjMywgMHgwMCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMGMwLCAweDAwKTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMSwgMSk7CisJbGVuZ3RoID0gODsKKwlzd2l0Y2ggKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KSB7CisJY2FzZSAwOgorCQlmb3IgKGkgPSAwOyBpIDwgMjc7IGkrKykgeworCQkJaWYgKGkgPT0gMjYpCisJCQkJbGVuZ3RoID0gMjsKKwkJCXJlZ193KGdzcGNhX2RldiwgMHgwMDA4LCBjeGpwZWdfNjQwW2ldLCBsZW5ndGgpOworCQl9CisJCVJlZzU1ID0gMHgyODsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmb3IgKGkgPSAwOyBpIDwgMjc7IGkrKykgeworCQkJaWYgKGkgPT0gMjYpCisJCQkJbGVuZ3RoID0gMjsKKwkJCXJlZ193KGdzcGNhX2RldiwgMHgwMDA4LCBjeGpwZWdfMzUyW2ldLCBsZW5ndGgpOworCQl9CisJCVJlZzU1ID0gMHgxNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgMjogKi8KKwkJZm9yIChpID0gMDsgaSA8IDI3OyBpKyspIHsKKwkJCWlmIChpID09IDI2KQorCQkJCWxlbmd0aCA9IDI7CisJCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAwOCwgY3hqcGVnXzMyMFtpXSwgbGVuZ3RoKTsKKwkJfQorCQlSZWc1NSA9IDB4MTQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZm9yIChpID0gMDsgaSA8IDI3OyBpKyspIHsKKwkJCWlmIChpID09IDI2KQorCQkJCWxlbmd0aCA9IDI7CisJCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAwOCwgY3hqcGVnXzE3NltpXSwgbGVuZ3RoKTsKKwkJfQorCQlSZWc1NSA9IDB4MEI7CisJCWJyZWFrOworCX0KKworCXJlZ19yKGdzcGNhX2RldiwgMHgwMDAyLCAxKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwNTUsIFJlZzU1KTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMiwgMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwMTAsIHJlZzEwLCAyKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwNTQsIDB4MDIpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDA1NCwgMHgwMSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDAwLCAweDk0KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwNTMsIDB4YzApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDBmYywgMHhlMSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDAwLCAweDAwKTsKKwkvKiB3YWl0IGZvciBjb21wbGV0aW9uICovCisJcmV0cnkgPSA1MDsKKwl3aGlsZSAocmV0cnktLSkgeworCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMiwgMSk7CisJCQkJCQkJLyogMHgwNyB1bnRpbCAweDAwICovCisJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gPT0gMHgwMCkKKwkJCWJyZWFrOworCQlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwNTMsIDB4MDApOworCX0KKwlpZiAocmV0cnkgPT0gMCkKKwkJUERFQlVHKERfRVJSLCAiRGFtbmVkIEVycm9ycyBzZW5kaW5nIGpwZWcgVGFibGUiKTsKKwkvKiBzZW5kIHRoZSBxdGFibGUgbm93ICovCisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDEsIDEpOwkJLyogLT4gMHgxOCAqLworCWxlbmd0aCA9IDg7CisJZm9yIChpID0gMDsgaSA8IDE4OyBpKyspIHsKKwkJaWYgKGkgPT0gMTcpCisJCQlsZW5ndGggPSAyOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAwOCwgY3hqcGVnX3F0YWJsZVtpXSwgbGVuZ3RoKTsKKworCX0KKwlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMiwgMSk7CS8qIDB4MDAgKi8KKwlyZWdfcihnc3BjYV9kZXYsIDB4MDA1MywgMSk7CS8qIDB4MDAgKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwNTQsIDB4MDIpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDA1NCwgMHgwMSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDAwLCAweDk0KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwNTMsIDB4YzApOworCisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMzgsIDEpOwkJLyogMHg0MCAqLworCXJlZ19yKGdzcGNhX2RldiwgMHgwMDM4LCAxKTsJCS8qIDB4NDAgKi8KKwlyZWdfcihnc3BjYV9kZXYsIDB4MDAxZiwgMSk7CQkvKiAweDM4ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAwMTIsIHJlZzEyLCA1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDBlNSwgcmVnRTVfOCwgOCk7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwZTgsIDgpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMGU1LCByZWdFNWEsIDQpOworCXJlZ19yKGdzcGNhX2RldiwgMHgwMGU4LCAxKTsJCS8qIDB4MDAgKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwOWEsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMGU1LCByZWdFNWIsIDQpOworCXJlZ19yKGdzcGNhX2RldiwgMHgwMGU4LCAxKTsJCS8qIDB4MDAgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDBlNSwgcmVnRTVjLCA0KTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDBlOCwgMSk7CQkvKiAweDAwICovCisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDA1MSwgcmVnNTEsIDIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMDEwLCByZWcxMCwgMik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDcwLCByZWc3MCk7Cit9CisKK3N0YXRpYyB2b2lkIGN4MTE2NDZfaW5pdDEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBpID0gMDsKKworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDAxMCwgMHgwMCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDUzLCAweDAwKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwNTIsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDA5YiwgMHgyZik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDljLCAweDEwKTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDA5OCwgMSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDk4LCAweDQwKTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDA5OSwgMSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDk5LCAweDA3KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwMzksIDB4NDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDAzYywgMHhmZik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDNmLCAweDFmKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwM2QsIDB4NDApOworLyoJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDNkLCAweDYwKTsgKi8KKwlyZWdfcihnc3BjYV9kZXYsIDB4MDA5OSwgMSk7CQkJLyogLT4weDA3ICovCisKKwl3aGlsZSAoY3hfc2Vuc29yX2luaXRbaV1bMF0pIHsKKwkJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMGU1LCBjeF9zZW5zb3JfaW5pdFtpXVswXSk7CisJCXJlZ19yKGdzcGNhX2RldiwgMHgwMGU4LCAxKTsJCS8qIC0+IDB4MDAgKi8KKwkJaWYgKGkgPT0gMSkgeworCQkJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMGVkLCAweDAxKTsKKwkJCXJlZ19yKGdzcGNhX2RldiwgMHgwMGVkLCAxKTsJLyogLT4gMHgwMSAqLworCQl9CisJCWkrKzsKKwl9CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMGMzLCAweDAwKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5kZXZfbmFtZSA9IChjaGFyICopIGlkLT5kcml2ZXJfaW5mbzsKKwljYW0tPmVwYWRkciA9IDB4MDE7CisJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOworCisJc2QtPnFpbmRleCA9IDA7CQkJLyogc2V0IHRoZSBxdWFudGl6YXRpb24gKi8KKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Y29sb3JzID0gQ09MT1JfREVGOworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBvcGVuIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2Rfb3BlbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJY3gxMTY0Nl9pbml0MShnc3BjYV9kZXYpOworCWN4MTE2NDZfaW5pdHNpemUoZ3NwY2FfZGV2KTsKKwljeDExNjQ2X2Z3KGdzcGNhX2Rldik7CisJY3hfc2Vuc29yKGdzcGNhX2Rldik7CisJY3gxMTY0Nl9qcGVnSW5pdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJY3gxMTY0Nl9pbml0c2l6ZShnc3BjYV9kZXYpOworCWN4MTE2NDZfZncoZ3NwY2FfZGV2KTsKKwljeF9zZW5zb3IoZ3NwY2FfZGV2KTsKKwljeDExNjQ2X2pwZWcoZ3NwY2FfZGV2KTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldHJ5ID0gNTA7CisKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwMDAsIDB4MDApOworCXJlZ19yKGdzcGNhX2RldiwgMHgwMDAyLCAxKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwNTMsIDB4MDApOworCisJd2hpbGUgKHJldHJ5LS0pIHsKKy8qCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMiwgMSk7Ki8KKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwNTMsIDEpOworCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdID09IDApCisJCQlicmVhazsKKwl9CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDAwLCAweDAwKTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMiwgMSk7CisKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwMTAsIDB4MDApOworCXJlZ19yKGdzcGNhX2RldiwgMHgwMDMzLCAxKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwZmMsIDB4ZTApOworfQorCitzdGF0aWMgdm9pZCBzZF9jbG9zZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLworCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KSB7CisKKwkJLyogc3RhcnQgb2YgZnJhbWUgKi8KKwkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWRhdGEsIDApOworCisJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLworCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKKwkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCisJCQkJMHgyMik7CisJCWRhdGEgKz0gMjsKKwkJbGVuIC09IDI7CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2Rldipnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggcmVnRTVjYnhbXSA9IHsgMHg4OCwgMHgwMCwgMHhkNCwgMHgwMSwgMHg4OCwgMHgwMSwgMHgwMSwgMHgwMSB9OworCV9fdTggcmVnNTFjWzJdOworCV9fdTggYnJpZ2h0OworCV9fdTggY29sb3JzOworCisJYnJpZ2h0ID0gc2QtPmJyaWdodG5lc3M7CisJcmVnRTVjYnhbMl0gPSBicmlnaHQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwZTUsIHJlZ0U1Y2J4LCA4KTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDBlOCwgOCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwZTUsIHJlZ0U1YywgNCk7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwZTgsIDEpOwkJLyogMHgwMCAqLworCisJY29sb3JzID0gc2QtPmNvbG9yczsKKwlyZWc1MWNbMF0gPSAweDc3OworCXJlZzUxY1sxXSA9IGNvbG9yczsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDA1MSwgcmVnNTFjLCAyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAxMCwgcmVnMTAsIDIpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDA3MCwgcmVnNzApOworfQorCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2KmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCByZWdFNWFjeFtdID0geyAweDg4LCAweDBhLCAweDBjLCAweDAxIH07CS8qIHNlZW0gTVNCICovCisvKglfX3U4IHJlZ0U1YmN4W10gPSB7IDB4ODgsIDB4MGIsIDB4MTIsIDB4MDF9OwkgKiBMU0IgKi8KKwlfX3U4IHJlZzUxY1syXTsKKworCXJlZ0U1YWN4WzJdID0gc2QtPmNvbnRyYXN0OworCXJlZ193KGdzcGNhX2RldiwgMHgwMGU1LCByZWdFNWFjeCwgNCk7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwZTgsIDEpOwkJLyogMHgwMCAqLworCXJlZzUxY1swXSA9IDB4Nzc7CisJcmVnNTFjWzFdID0gc2QtPmNvbG9yczsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDA1MSwgcmVnNTFjLCAyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAxMCwgcmVnMTAsIDIpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDA3MCwgcmVnNzApOworfQorCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb2xvcnMgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbG9yczsKKwlyZXR1cm4gMDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgPSBzZF9jdHJscywKKwkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkub3BlbiA9IHNkX29wZW4sCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCisJLmNsb3NlID0gc2RfY2xvc2UsCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KKyNkZWZpbmUgRFZOTShuYW1lKSAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpIG5hbWUKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDU3MiwgMHgwMDQxKSwgRFZOTSgiQ3JlYXRpdmUgTm90ZWJvb2sgY3gxMTY0NiIpfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCisJCXJldHVybiAtMTsKKwlQREVCVUcoRF9QUk9CRSwgInYlcyByZWdpc3RlcmVkIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiNGVhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYwpAQCAtMCwwICsxLDk1NiBAQAorLyoKKyAqIEV0b21zIEV0NjF4MTUxIEdQTCBMaW51eCBkcml2ZXIgYnkgTWljaGVsIFhoYWFyZCAoMDkvMDkvMjAwNCkKKyAqCisgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJldG9tcyIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDEsIDcpCitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiMi4xLjciOworCitNT0RVTEVfQVVUSE9SKCJNaWNoZWwgWGhhYXJkIDxteGhhYXJkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRXRvbXMgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKKwl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OworCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCXVuc2lnbmVkIGNoYXIgYXV0b2dhaW47CisKKwljaGFyIHNlbnNvcjsKKyNkZWZpbmUgU0VOU09SX1BBUzEwNiAwCisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ1hYIDEKKwlzaWduZWQgY2hhciBhZ19jbnQ7CisjZGVmaW5lIEFHX0NOVF9TVEFSVCAxMworfTsKKworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworCXsKKwkgeworCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkgIC5uYW1lID0gIkJyaWdodG5lc3MiLAorCSAgLm1pbmltdW0gPSAxLAorCSAgLm1heGltdW0gPSAxMjcsCisJICAuc3RlcCA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDYzCisJICAuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAorCSAgfSwKKwkgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCSB9LAorCXsKKwkgeworCSAgLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAubmFtZSA9ICJDb250cmFzdCIsCisJICAubWluaW11bSA9IDAsCisJICAubWF4aW11bSA9IDI1NSwKKwkgIC5zdGVwID0gMSwKKyNkZWZpbmUgQ09OVFJBU1RfREVGIDEyNworCSAgLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCisJICB9LAorCSAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwkgfSwKKwl7CisJIHsKKwkgIC5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAubmFtZSA9ICJDb2xvciIsCisJICAubWluaW11bSA9IDAsCisJICAubWF4aW11bSA9IDE1LAorCSAgLnN0ZXAgPSAxLAorI2RlZmluZSBDT0xPUl9ERUYgNworCSAgLmRlZmF1bHRfdmFsdWUgPSBDT0xPUl9ERUYsCisJICB9LAorCSAuc2V0ID0gc2Rfc2V0Y29sb3JzLAorCSAuZ2V0ID0gc2RfZ2V0Y29sb3JzLAorCSB9LAorCXsKKwkgeworCSAgLmlkID0gVjRMMl9DSURfQVVUT0dBSU4sCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJICAubmFtZSA9ICJBdXRvIEdhaW4iLAorCSAgLm1pbmltdW0gPSAwLAorCSAgLm1heGltdW0gPSAxLAorCSAgLnN0ZXAgPSAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMQorCSAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl9ERUYsCisJICB9LAorCSAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCisJIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKKwkgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMX0sCisvKgl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNpZl9tb2RlW10gPSB7CisJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNzYsCisJCS5zaXplaW1hZ2UgPSAxNzYgKiAxNDQsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMX0sCisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCit9OworCisjZGVmaW5lIEVUT01TX0FMVF9TSVpFXzEwMDAgICAxMgorCisjZGVmaW5lIEVUX0dQSU9fRElSX0NUUkwgMHgwNAkvKiBDb250cm9sIElPIGJpdFswLi41XSAoMCBpbiAgMSBvdXQpICovCisjZGVmaW5lIEVUX0dQSU9fT1VUIDB4MDUJLyogT25seSBJTyBkYXRhICovCisjZGVmaW5lIEVUX0dQSU9fSU4gMHgwNgkJLyogUmVhZCBPbmx5IElPIGRhdGEgKi8KKyNkZWZpbmUgRVRfUkVTRVRfQUxMIDB4MDMKKyNkZWZpbmUgRVRfQ2xDSyAweDAxCisjZGVmaW5lIEVUX0NUUkwgMHgwMgkJLyogZW5hYmxlIGkyYyBPdXRDbGNrIFBvd2VyZG93biBtb2RlICovCisKKyNkZWZpbmUgRVRfQ09NUCAweDEyCQkvKiBDb21wcmVzc2lvbiByZWdpc3RlciAqLworI2RlZmluZSBFVF9NQVhRdCAweDEzCisjZGVmaW5lIEVUX01JTlF0IDB4MTQKKyNkZWZpbmUgRVRfQ09NUF9WQUwwIDB4MDIKKyNkZWZpbmUgRVRfQ09NUF9WQUwxIDB4MDMKKworI2RlZmluZSBFVF9SRUcxZCAweDFkCisjZGVmaW5lIEVUX1JFRzFlIDB4MWUKKyNkZWZpbmUgRVRfUkVHMWYgMHgxZgorI2RlZmluZSBFVF9SRUcyMCAweDIwCisjZGVmaW5lIEVUX1JFRzIxIDB4MjEKKyNkZWZpbmUgRVRfUkVHMjIgMHgyMgorI2RlZmluZSBFVF9SRUcyMyAweDIzCisjZGVmaW5lIEVUX1JFRzI0IDB4MjQKKyNkZWZpbmUgRVRfUkVHMjUgMHgyNQorLyogYmFzZSByZWdpc3RlcnMgZm9yIGx1bWEgY2FsY3VsYXRpb24gKi8KKyNkZWZpbmUgRVRfTFVNQV9DRU5URVIgMHgzOQorCisjZGVmaW5lIEVUX0dfUkVEIDB4NGQKKyNkZWZpbmUgRVRfR19HUkVFTjEgMHg0ZQorI2RlZmluZSBFVF9HX0JMVUUgMHg0ZgorI2RlZmluZSBFVF9HX0dSRUVOMiAweDUwCisjZGVmaW5lIEVUX0dfR1JfSCAweDUxCisjZGVmaW5lIEVUX0dfR0JfSCAweDUyCisKKyNkZWZpbmUgRVRfT19SRUQgMHgzNAorI2RlZmluZSBFVF9PX0dSRUVOMSAweDM1CisjZGVmaW5lIEVUX09fQkxVRSAweDM2CisjZGVmaW5lIEVUX09fR1JFRU4yIDB4MzcKKworI2RlZmluZSBFVF9TWU5DSFJPIDB4NjgKKyNkZWZpbmUgRVRfU1RBUlRYIDB4NjkKKyNkZWZpbmUgRVRfU1RBUlRZIDB4NmEKKyNkZWZpbmUgRVRfV0lEVEhfTE9XIDB4NmIKKyNkZWZpbmUgRVRfSEVJR1RIX0xPVyAweDZjCisjZGVmaW5lIEVUX1dfSF9IRUlHVEggMHg2ZAorCisjZGVmaW5lIEVUX1JFRzZlIDB4NmUJCS8qIE9CVyAqLworI2RlZmluZSBFVF9SRUc2ZiAweDZmCQkvKiBPQlcgKi8KKyNkZWZpbmUgRVRfUkVHNzAgMHg3MAkJLyogT0JXX0FXQiAqLworI2RlZmluZSBFVF9SRUc3MSAweDcxCQkvKiBPQldfQVdCICovCisjZGVmaW5lIEVUX1JFRzcyIDB4NzIJCS8qIE9CV19BV0IgKi8KKyNkZWZpbmUgRVRfUkVHNzMgMHg3MwkJLyogQ2xrZGVsYXkgbnMgKi8KKyNkZWZpbmUgRVRfUkVHNzQgMHg3NAkJLyogdGVzdCBwYXR0ZXJuICovCisjZGVmaW5lIEVUX1JFRzc1IDB4NzUJCS8qIHRlc3QgcGF0dGVybiAqLworCisjZGVmaW5lIEVUX0kyQ19DTEsgMHg4YworI2RlZmluZSBFVF9QWExfQ0xLIDB4NjAKKworI2RlZmluZSBFVF9JMkNfQkFTRSAweDg5CisjZGVmaW5lIEVUX0kyQ19DT1VOVCAweDhhCisjZGVmaW5lIEVUX0kyQ19QUkVGRVRDSCAweDhiCisjZGVmaW5lIEVUX0kyQ19SRUcgMHg4OAorI2RlZmluZSBFVF9JMkNfREFUQTcgMHg4NworI2RlZmluZSBFVF9JMkNfREFUQTYgMHg4NgorI2RlZmluZSBFVF9JMkNfREFUQTUgMHg4NQorI2RlZmluZSBFVF9JMkNfREFUQTQgMHg4NAorI2RlZmluZSBFVF9JMkNfREFUQTMgMHg4MworI2RlZmluZSBFVF9JMkNfREFUQTIgMHg4MgorI2RlZmluZSBFVF9JMkNfREFUQTEgMHg4MQorI2RlZmluZSBFVF9JMkNfREFUQTAgMHg4MAorCisjZGVmaW5lIFBBUzEwNl9SRUcyIDB4MDIJLyogcHhsQ2xrID0gc3lzdGVtQ2xrLyhyZWcyKSAqLworI2RlZmluZSBQQVMxMDZfUkVHMyAweDAzCS8qIGxpbmUvZnJhbWUgSCBbMTEuLjRdICovCisjZGVmaW5lIFBBUzEwNl9SRUc0IDB4MDQJLyogbGluZS9mcmFtZSBMIFszLi4wXSAqLworI2RlZmluZSBQQVMxMDZfUkVHNSAweDA1CS8qIGV4cG9zdXJlIHRpbWUgbGluZSBvZmZzZXQoZGVmYXVsdCA1KSAqLworI2RlZmluZSBQQVMxMDZfUkVHNiAweDA2CS8qIGV4cG9zdXJlIHRpbWUgcGl4ZWwgb2Zmc2V0KGRlZmF1bHQgNikgKi8KKyNkZWZpbmUgUEFTMTA2X1JFRzcgMHgwNwkvKiBzaWduYml0IERhYyAoZGVmYXVsdCAwKSAqLworI2RlZmluZSBQQVMxMDZfUkVHOSAweDA5CisjZGVmaW5lIFBBUzEwNl9SRUcwZSAweDBlCS8qIGdsb2JhbCBnYWluIFs0Li4wXShkZWZhdWx0IDB4MGUpICovCisjZGVmaW5lIFBBUzEwNl9SRUcxMyAweDEzCS8qIGVuZCBpMmMgd3JpdGUgKi8KKworc3RhdGljIGNvbnN0IF9fdTggR2FpblJHQkdbXSA9IHsgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgX191OCBJMmMyW10gPSB7IDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MGQgfTsKKworc3RhdGljIGNvbnN0IF9fdTggSTJjM1tdID0geyAweDEyLCAweDA1IH07CisKK3N0YXRpYyBjb25zdCBfX3U4IEkyYzRbXSA9IHsgMHg0MSwgMHgwOCB9OworCisvKiByZWFkICdsZW4nIGJ5dGVzIHRvIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLworc3RhdGljIHZvaWQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgIF9fdTE2IGluZGV4LAorCQkgIF9fdTE2IGxlbikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJaWYgKGxlbiA+IHNpemVvZiBnc3BjYV9kZXYtPnVzYl9idWYpIHsKKwkJZXJyKCJyZWdfcjogYnVmZmVyIG92ZXJmbG93Iik7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwl1c2JfY29udHJvbF9tc2coZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkwLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkwLAorCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuLCA1MDApOworCVBERUJVRyhEX1VTQkksICJyZWcgcmVhZCBbJTAyeF0gLT4gJTAyeCAuLiIsCisJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKK30KKworc3RhdGljIHZvaWQgcmVnX3dfdmFsKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCV9fdTE2IGluZGV4LAorCQkJX191OCB2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gdmFsOworCXVzYl9jb250cm9sX21zZyhkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCTAsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkwLAorCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgNTAwKTsKK30KKworc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgIF9fdTE2IGluZGV4LAorCQkgIGNvbnN0IF9fdTggKmJ1ZmZlciwKKwkJICBfX3UxNiBsZW4pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCWlmIChsZW4gPiBzaXplb2YgZ3NwY2FfZGV2LT51c2JfYnVmKSB7CisJCWVycigicmVnX3c6IGJ1ZmZlciBvdmVyZmxvdyIpOworCQlyZXR1cm47CisJfQorCVBERUJVRyhEX1VTQk8sICJyZWcgd3JpdGUgWyUwMnhdID0gJTAyeC4uIiwgaW5kZXgsICpidWZmZXIpOworI2VuZGlmCisJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgYnVmZmVyLCBsZW4pOworCXVzYl9jb250cm9sX21zZyhkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCTAsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkwLCBpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sIDUwMCk7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgX191OCByZWcsCisJCSBjb25zdCBfX3U4ICpidWZmZXIsCisJCSBpbnQgbGVuLCBfX3U4IG1vZGUpCit7CisJLyogYnVmZmVyIHNob3VsZCBiZSBbRDAuLkQ3XSAqLworCV9fdTggcHRjaGNvdW50OworCisJLyogc2V0IHRoZSBiYXNlIGFkZHJlc3MgKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9JMkNfQkFTRSwgMHg0MCk7CisJCQkJCSAvKiBzZW5zb3IgYmFzZSBmb3IgdGhlIHBhczEwNiAqLworCS8qIHNldCBjb3VudCBhbmQgcHJlZmV0Y2ggKi8KKwlwdGNoY291bnQgPSAoKGxlbiAmIDB4MDcpIDw8IDQpIHwgKG1vZGUgJiAweDAzKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9JMkNfQ09VTlQsIHB0Y2hjb3VudCk7CisJLyogc2V0IHRoZSByZWdpc3RlciBiYXNlICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfSTJDX1JFRywgcmVnKTsKKwl3aGlsZSAoLS1sZW4gPj0gMCkKKwkJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfSTJDX0RBVEEwICsgbGVuLCBidWZmZXJbbGVuXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191OCByZWcpCit7CisJLyogc2V0IHRoZSBiYXNlIGFkZHJlc3MgKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9JMkNfQkFTRSwgMHg0MCk7CisJCQkJCS8qIHNlbnNvciBiYXNlIGZvciB0aGUgcGFzMTA2ICovCisJLyogc2V0IGNvdW50IGFuZCBwcmVmZXRjaCAoY25kOiA0IGJpdHMgLSBtb2RlOiA0IGJpdHMpICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfSTJDX0NPVU5ULCAweDExKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9JMkNfUkVHLCByZWcpOwkvKiBzZXQgdGhlIHJlZ2lzdGVyIGJhc2UgKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9JMkNfUFJFRkVUQ0gsIDB4MDIpOwkvKiBwcmVmZXRjaCAqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX0kyQ19QUkVGRVRDSCwgMHgwMCk7CisJcmVnX3IoZ3NwY2FfZGV2LCBFVF9JMkNfREFUQTAsIDEpOwkvKiByZWFkIG9uZSBieXRlICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgRXRfV2FpdFN0YXR1cyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldHJ5ID0gMTA7CisKKwl3aGlsZSAocmV0cnktLSkgeworCQlyZWdfcihnc3BjYV9kZXYsIEVUX0NsQ0ssIDEpOworCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDApCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRfdmlkZW8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgaW50IG9uKQoreworCWludCByZXQ7CisKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9HUElPX09VVCwKKwkJICBvbiA/IDB4MTAJCS8qIHN0YXJ0dmlkZW8gLSBzZXQgQml0NSAqLworCQkgICAgIDogMCk7CQkvKiBzdG9wdmlkZW8gKi8KKwlyZXQgPSBFdF9XYWl0U3RhdHVzKGdzcGNhX2Rldik7CisJaWYgKHJldCAhPSAwKQorCQlQREVCVUcoRF9FUlIsICJ0aW1lb3V0IHZpZGVvIG9uL29mZiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIEV0X2luaXQyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlfX3U4IHZhbHVlOworCXN0YXRpYyBjb25zdCBfX3U4IEZvcm1MaW5lW10gPSB7IDB4ODQsIDB4MDMsIDB4MTQsIDB4ZjQsIDB4MDEsIDB4MDUgfTsKKworCVBERUJVRyhEX1NUUkVBTSwgIk9wZW4gSW5pdDIgRVQiKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9HUElPX0RJUl9DVFJMLCAweDJmKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9HUElPX09VVCwgMHgxMCk7CisJcmVnX3IoZ3NwY2FfZGV2LCBFVF9HUElPX0lOLCAxKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9DbENLLCAweDE0KTsgLyogMHgxNCAvLyAweDE2IGVuYWJsZWQgcGF0dGVybiAqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX0NUUkwsIDB4MWIpOworCisJLyogIGNvbXByZXNzaW9uIGV0IHN1YnNhbXBsaW5nICovCisJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KQorCQl2YWx1ZSA9IEVUX0NPTVBfVkFMMTsJLyogMzIwICovCisJZWxzZQorCQl2YWx1ZSA9IEVUX0NPTVBfVkFMMDsJLyogNjQwICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfQ09NUCwgdmFsdWUpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX01BWFF0LCAweDFmKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9NSU5RdCwgMHgwNCk7CisJLyogdW5kb2N1bWVudGVkIHJlZ2lzdGVycyAqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzFkLCAweGZmKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUcxZSwgMHhmZik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHMWYsIDB4ZmYpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzIwLCAweDM1KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUcyMSwgMHgwMSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHMjIsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzIzLCAweGZmKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUcyNCwgMHhmZik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHMjUsIDB4MGYpOworCS8qIGNvbG9ycyBzZXR0aW5nICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgzMCwgMHgxMSk7CQkvKiAweDMwICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgzMSwgMHg0MCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgzMiwgMHgwMCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfT19SRUQsIDB4MDApOwkJLyogMHgzNCAqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX09fR1JFRU4xLCAweDAwKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9PX0JMVUUsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX09fR1JFRU4yLCAweDAwKTsKKwkvKioqKioqKioqKioqKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9HX1JFRCwgMHg4MCk7CQkvKiAweDRkICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfR19HUkVFTjEsIDB4ODApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX0dfQkxVRSwgMHg4MCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfR19HUkVFTjIsIDB4ODApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX0dfR1JfSCwgMHgwMCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfR19HQl9ILCAweDAwKTsJCS8qIDB4NTIgKi8KKwkvKiBXaW5kb3cgY29udHJvbCByZWdpc3RlcnMgKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDYxLCAweDgwKTsJCS8qIHVzZSBjbWNfb3V0ICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg2MiwgMHgwMik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg2MywgMHgwMyk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg2NCwgMHgxNCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg2NSwgMHgwZSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg2NiwgMHgwMik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg2NywgMHgwMik7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfU1lOQ0hSTywgMHg4Zik7CQkvKiAweDY4ICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfU1RBUlRYLCAweDY5KTsJCS8qIDB4NmEgLy8weDY5ICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfU1RBUlRZLCAweDBkKTsJCS8qIDB4MGQgLy8weDBjICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfV0lEVEhfTE9XLCAweDgwKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9IRUlHVEhfTE9XLCAweGUwKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9XX0hfSEVJR1RILCAweDYwKTsJLyogNmQgKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUc2ZSwgMHg4Nik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHNmYsIDB4MDEpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzcwLCAweDI2KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUc3MSwgMHg3YSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHNzIsIDB4MDEpOworCS8qIENsb2NrIFBhdHRlcm4gcmVnaXN0ZXJzICoqKioqKioqKioqKioqKioqICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHNzMsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzc0LCAweDE4KTsJCS8qIDB4MjggKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUc3NSwgMHgwZik7CQkvKiAweDAxICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg4YSwgMHgyMCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg4ZCwgMHgwZik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg4ZSwgMHgwOCk7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDMsIDB4MDgpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1BYTF9DTEssIDB4MDMpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4ODEsIDB4ZmYpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4ODAsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4ODEsIDB4ZmYpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4ODAsIDB4MjApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDMsIDB4MDEpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDMsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4MDMsIDB4MDgpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoJcmVnX3IoZ3NwY2FfZGV2LCBFVF9JMkNfQkFTRSwgMSk7CisJCQkJCSBhbHdheXMgMHg0MCBhcyB0aGUgcGFzMTA2ID8/PyAqLworCS8qIHNldCB0aGUgc2Vuc29yICovCisJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KQorCQl2YWx1ZSA9IDB4MDQ7CQkvKiAzMjAgKi8KKwllbHNlCQkJCS8qIDY0MCAqLworCQl2YWx1ZSA9IDB4MWU7CS8qIDB4MTcJICogc2V0dGluZyBQaXhlbENsb2NrCisJCQkJCSAqIDB4MDMgbWVhbiAyNC8oMysxKSA9IDYgTWh6CisJCQkJCSAqIDB4MDUgLT4gMjQvKDUrMSkgPSA0IE1oegorCQkJCQkgKiAweDBiIC0+IDI0LygxMSsxKSA9IDIgTWh6CisJCQkJCSAqIDB4MTcgLT4gMjQvKDIzKzEpID0gMSBNaHoKKwkJCQkJICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUFhMX0NMSywgdmFsdWUpOworCS8qIG5vdyBzZXQgYnkgZmlmbyB0aGUgRm9ybWF0TGluZSBzZXR0aW5nICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDYyLCBGb3JtTGluZSwgNik7CisKKwkvKiBzZXQgZXhwb3N1cmUgdGltZXMgWyAwLi4weDc4XSAwLT5sb25ndmFsdWUgMHg3OC0+c2hvcnR2YWx1ZSAqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4ODEsIDB4NDcpOwkvKiAweDQ3OyAqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIDB4ODAsIDB4NDApOwkvKiAweDQwOyAqLworCS8qIFBlZHJvIGNoYW5nZSAqLworCS8qIEJyaWdodG5lc3MgY2hhbmdlIEJyaXRoKyBkZWNyZWFzZSB2YWx1ZSAqLworCS8qIEJyaWd0aC0gaW5jcmVhc2UgdmFsdWUgKi8KKwkvKiBvcmlnaW5hbCB2YWx1ZSA9IDB4NzA7ICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHg4MSwgMHgzMCk7CS8qIDB4MjA7IC0gc2V0IGJyaWdodG5lc3MgKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDgwLCAweDIwKTsJLyogMHgyMDsgKi8KK30KKworc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCBJMmNjW10gPSB7IDB4MDUsIDB4MDIsIDB4MDIsIDB4MDUsIDB4MGQgfTsKKwlfX3U4IGkyY2ZsYWdzID0gMHgwMTsKKwkvKiBfX3U4IGdyZWVuID0gMDsgKi8KKwlfX3U4IGNvbG9ycyA9IHNkLT5jb2xvcnM7CisKKwlJMmNjWzNdID0gY29sb3JzOwkvKiByZWQgKi8KKwlJMmNjWzBdID0gMTUgLSBjb2xvcnM7CS8qIGJsdWUgKi8KKwkvKiBncmVlbiA9IDE1IC0gKCgoKDcqSTJjY1swXSkgPj4gMiApICsgSTJjY1szXSkgPj4gMSk7ICovCisJLyogSTJjY1sxXSA9IEkyY2NbMl0gPSBncmVlbjsgKi8KKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUEFTMTA2KSB7CisJCWkyY193KGdzcGNhX2RldiwgUEFTMTA2X1JFRzEzLCAmaTJjZmxhZ3MsIDEsIDMpOworCQlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUc5LCBJMmNjLCBzaXplb2YgSTJjYywgMSk7CisJfQorLyoJUERFQlVHKERfQ09ORiAsICJFdG9tcyByZWQgJWQgYmx1ZSAlZCBncmVlbiAlZCIsCisJCUkyY2NbM10sIEkyY2NbMF0sIGdyZWVuKTsgKi8KK30KKworc3RhdGljIHZvaWQgZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUEFTMTA2KSB7CisvKgkJaTJjX3IoZ3NwY2FfZGV2LCBQQVMxMDZfUkVHOSk7CQkgKiBibHVlICovCisJCWkyY19yKGdzcGNhX2RldiwgUEFTMTA2X1JFRzkgKyAzKTsJLyogcmVkICovCisJCXNkLT5jb2xvcnMgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF0gJiAweDBmOworCX0KK30KKworc3RhdGljIHZvaWQgRXRfaW5pdDEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCV9fdTggdmFsdWU7CisvKglfX3U4IEkyYzAgW10gPSB7MHgwYSwgMHgxMiwgMHgwNSwgMHgyMiwgMHhhYywgMHgwMCwgMHgwMSwgMHgwMH07ICovCisJX191OCBJMmMwW10gPSB7IDB4MGEsIDB4MTIsIDB4MDUsIDB4NmQsIDB4Y2QsIDB4MDAsIDB4MDEsIDB4MDAgfTsKKwkJCQkJCS8qIHRyeSAxLzEyMCAweDZkIDB4Y2QgMHg0MCAqLworLyoJX191OCBJMmMwIFtdID0gezB4MGEsIDB4MTIsIDB4MDUsIDB4ZmUsIDB4ZmUsIDB4YzAsIDB4MDEsIDB4MDB9OworCQkJCQkJICogMS82MDAwMCBobW0gPz8gKi8KKworCVBERUJVRyhEX1NUUkVBTSwgIk9wZW4gSW5pdDEgRVQiKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9HUElPX0RJUl9DVFJMLCA3KTsKKwlyZWdfcihnc3BjYV9kZXYsIEVUX0dQSU9fSU4sIDEpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFU0VUX0FMTCwgMSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVTRVRfQUxMLCAwKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9DbENLLCAweDEwKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9DVFJMLCAweDE5KTsKKwkvKiAgIGNvbXByZXNzaW9uIGV0IHN1YnNhbXBsaW5nICovCisJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KQorCQl2YWx1ZSA9IEVUX0NPTVBfVkFMMTsKKwllbHNlCisJCXZhbHVlID0gRVRfQ09NUF9WQUwwOworCVBERUJVRyhEX1NUUkVBTSwgIk9wZW4gbW9kZSAlZCBDb21wcmVzc2lvbiAlZCIsCisJICAgICAgIGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2LAorCSAgICAgICB2YWx1ZSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfQ09NUCwgdmFsdWUpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX01BWFF0LCAweDFkKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9NSU5RdCwgMHgwMik7CisJLyogdW5kb2N1bWVudGVkIHJlZ2lzdGVycyAqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzFkLCAweGZmKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUcxZSwgMHhmZik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHMWYsIDB4ZmYpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzIwLCAweDM1KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUcyMSwgMHgwMSk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHMjIsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzIzLCAweGY3KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUcyNCwgMHhmZik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHMjUsIDB4MDcpOworCS8qIGNvbG9ycyBzZXR0aW5nICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfR19SRUQsIDB4ODApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX0dfR1JFRU4xLCAweDgwKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9HX0JMVUUsIDB4ODApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX0dfR1JFRU4yLCAweDgwKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9HX0dSX0gsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX0dfR0JfSCwgMHgwMCk7CisJLyogV2luZG93IGNvbnRyb2wgcmVnaXN0ZXJzICovCisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfU1lOQ0hSTywgMHhmMCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfU1RBUlRYLCAweDU2KTsJCS8qIDB4NTYgKi8KKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9TVEFSVFksIDB4MDUpOwkJLyogMHgwNCAqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1dJRFRIX0xPVywgMHg2MCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfSEVJR1RIX0xPVywgMHgyMCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfV19IX0hFSUdUSCwgMHg1MCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHNmUsIDB4ODYpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzZmLCAweDAxKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUc3MCwgMHg4Nik7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHNzEsIDB4MTQpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzcyLCAweDAwKTsKKwkvKiBDbG9jayBQYXR0ZXJuIHJlZ2lzdGVycyAqLworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFRzczLCAweDAwKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRUc3NCwgMHgwMCk7CisJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVHNzUsIDB4MGEpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX0kyQ19DTEssIDB4MDQpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1BYTF9DTEssIDB4MDEpOworCS8qIHNldCB0aGUgc2Vuc29yICovCisJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KSB7CisJCUkyYzBbMF0gPSAweDA2OworCQlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUcyLCBJMmMwLCBzaXplb2YgSTJjMCwgMSk7CisJCWkyY193KGdzcGNhX2RldiwgUEFTMTA2X1JFRzksIEkyYzIsIHNpemVvZiBJMmMyLCAxKTsKKwkJdmFsdWUgPSAweDA2OworCQlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUcyLCAmdmFsdWUsIDEsIDEpOworCQlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUczLCBJMmMzLCBzaXplb2YgSTJjMywgMSk7CisJCS8qIHZhbHVlID0gMHgxZjsgKi8KKwkJdmFsdWUgPSAweDA0OworCQlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUcwZSwgJnZhbHVlLCAxLCAxKTsKKwl9IGVsc2UgeworCQlJMmMwWzBdID0gMHgwYTsKKworCQlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUcyLCBJMmMwLCBzaXplb2YgSTJjMCwgMSk7CisJCWkyY193KGdzcGNhX2RldiwgUEFTMTA2X1JFRzksIEkyYzIsIHNpemVvZiBJMmMyLCAxKTsKKwkJdmFsdWUgPSAweDBhOworCQlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUcyLCAmdmFsdWUsIDEsIDEpOworCQlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUczLCBJMmMzLCBzaXplb2YgSTJjMywgMSk7CisJCXZhbHVlID0gMHgwNDsKKwkJLyogdmFsdWUgPSAweDEwOyAqLworCQlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUcwZSwgJnZhbHVlLCAxLCAxKTsKKwkJLyogYml0IDIgZW5hYmxlIGJpdCAxOjIgc2VsZWN0IDAgMSAyIDMKKwkJICAgdmFsdWUgPSAweDA3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjdXJ2ZSAwICoKKwkJICAgaTJjX3coZ3NwY2FfZGV2LCBQQVMxMDZfUkVHMGYsICZ2YWx1ZSwgMSwgMSk7CisJCSAqLworCX0KKworLyoJdmFsdWUgPSAweDAxOyAqLworLyoJdmFsdWUgPSAweDIyOyAqLworLyoJaTJjX3coZ3NwY2FfZGV2LCBQQVMxMDZfUkVHNSwgJnZhbHVlLCAxLCAxKTsgKi8KKwkvKiBtYWduZXR1ZGUgYW5kIHNpZ24gYml0IGZvciBEQUMgKi8KKwlpMmNfdyhnc3BjYV9kZXYsIFBBUzEwNl9SRUc3LCBJMmM0LCBzaXplb2YgSTJjNCwgMSk7CisJLyogbm93IHNldCBieSBmaWZvIHRoZSB3aG9sZSBjb2xvcnMgc2V0dGluZyAqLworCXJlZ193KGdzcGNhX2RldiwgRVRfR19SRUQsIEdhaW5SR0JHLCA2KTsKKwlnZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtOworCV9fdTE2IHZlbmRvcjsKKwlfX3UxNiBwcm9kdWN0OworCisJdmVuZG9yID0gaWQtPmlkVmVuZG9yOworCXByb2R1Y3QgPSBpZC0+aWRQcm9kdWN0OworLyoJc3dpdGNoICh2ZW5kb3IpIHsgKi8KKy8qCWNhc2UgMHgxMDJjOgkJKiBFdG9tcyAqLworCQlzd2l0Y2ggKHByb2R1Y3QpIHsKKwkJY2FzZSAweDYxNTE6CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX1BBUzEwNjsJLyogRXRvbXM2MXgxNTEgKi8KKwkJCWJyZWFrOworCQljYXNlIDB4NjI1MToKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMENYWDsJLyogRXRvbXM2MXgyNTEgKi8KKwkJCWJyZWFrOworLyoJCX0gKi8KKy8qCQlicmVhazsgKi8KKwl9CisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJY2FtLT5lcGFkZHIgPSAxOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpIHsKKwkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOworCQljYW0tPm5tb2RlcyA9IHNpemVvZiBzaWZfbW9kZSAvIHNpemVvZiBzaWZfbW9kZVswXTsKKwl9IGVsc2UgeworCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOworCX0KKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Y29sb3JzID0gQ09MT1JfREVGOworCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpCisJCUV0X2luaXQxKGdzcGNhX2Rldik7CisJZWxzZQorCQlFdF9pbml0Mihnc3BjYV9kZXYpOworCXJlZ193X3ZhbChnc3BjYV9kZXYsIEVUX1JFU0VUX0FMTCwgMHgwOCk7CisJZXRfdmlkZW8oZ3NwY2FfZGV2LCAwKTsJCS8qIHZpZGVvIG9mZiAqLworCXJldHVybiAwOworfQorCisvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCitzdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzEwNikKKwkJRXRfaW5pdDEoZ3NwY2FfZGV2KTsKKwllbHNlCisJCUV0X2luaXQyKGdzcGNhX2Rldik7CisKKwlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9SRVNFVF9BTEwsIDB4MDgpOworCWV0X3ZpZGVvKGdzcGNhX2RldiwgMSk7CQkvKiB2aWRlbyBvbiAqLworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJZXRfdmlkZW8oZ3NwY2FfZGV2LCAwKTsJCS8qIHZpZGVvIG9mZiAqLworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2Nsb3NlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCV9fdTggYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfT19SRUQgKyBpLCBicmlnaHRuZXNzKTsKK30KKworc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCWludCBicmlnaHRuZXNzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcmVnX3IoZ3NwY2FfZGV2LCBFVF9PX1JFRCArIGksIDEpOworCQlicmlnaHRuZXNzICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwl9CisJc2QtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzID4+IDM7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCBSR0JHW10gPSB7IDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAgfTsKKwlfX3U4IGNvbnRyYXN0ID0gc2QtPmNvbnRyYXN0OworCisJbWVtc2V0KFJHQkcsIGNvbnRyYXN0LCBzaXplb2YoUkdCRykgLSAyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIEVUX0dfUkVELCBSR0JHLCA2KTsKK30KKworc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgaTsKKwlpbnQgY29udHJhc3QgPSAwOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyZWdfcihnc3BjYV9kZXYsIEVUX0dfUkVEICsgaSwgMSk7CisJCWNvbnRyYXN0ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwl9CisJc2QtPmNvbnRyYXN0ID0gY29udHJhc3QgPj4gMjsKK30KKworc3RhdGljIF9fdTggRXRfZ2V0Z2Fpbkcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpIHsKKwkJaTJjX3IoZ3NwY2FfZGV2LCBQQVMxMDZfUkVHMGUpOworCQlQREVCVUcoRF9DT05GLCAiRXRvbXMgZ2FpbiBHICVkIiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwkJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwl9CisJcmV0dXJuIDB4MWY7Cit9CisKK3N0YXRpYyB2b2lkIEV0X3NldGdhaW5HKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX191OCBnYWluKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpIHsKKwkJX191OCBpMmNmbGFncyA9IDB4MDE7CisKKwkJaTJjX3coZ3NwY2FfZGV2LCBQQVMxMDZfUkVHMTMsICZpMmNmbGFncywgMSwgMyk7CisJCWkyY193KGdzcGNhX2RldiwgUEFTMTA2X1JFRzBlLCAmZ2FpbiwgMSwgMSk7CisJfQorfQorCisjZGVmaW5lIEJMSU1JVChicmlnaHQpIFwKKwkoX191OCkoKGJyaWdodCA+IDB4MWYpPzB4MWY6KChicmlnaHQgPCA0KT8zOmJyaWdodCkpCisjZGVmaW5lIExJTUlUKGNvbG9yKSBcCisJKHVuc2lnbmVkIGNoYXIpKChjb2xvciA+IDB4ZmYpPzB4ZmY6KChjb2xvciA8IDApPzA6Y29sb3IpKQorCitzdGF0aWMgdm9pZCBzZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJX191OCBsdW1hID0gMDsKKwlfX3U4IGx1bWFfbWVhbiA9IDEyODsKKwlfX3U4IGx1bWFfZGVsdGEgPSAyMDsKKwlfX3U4IHNwcmluZyA9IDQ7CisJaW50IEdicmlnaHQgPSAwOworCV9fdTggciwgZywgYjsKKworCUdicmlnaHQgPSBFdF9nZXRnYWluRyhnc3BjYV9kZXYpOworCXJlZ19yKGdzcGNhX2RldiwgRVRfTFVNQV9DRU5URVIsIDQpOworCWcgPSAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICsgZ3NwY2FfZGV2LT51c2JfYnVmWzNdKSA+PiAxOworCXIgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJYiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwlyID0gKChyIDw8IDgpIC0gKHIgPDwgNCkgLSAociA8PCAzKSkgPj4gMTA7CisJYiA9ICgoYiA8PCA3KSA+PiAxMCk7CisJZyA9ICgoZyA8PCA5KSArIChnIDw8IDcpICsgKGcgPDwgNSkpID4+IDEwOworCWx1bWEgPSBMSU1JVChyICsgZyArIGIpOworCVBERUJVRyhEX0ZSQU0sICJFdG9tcyBsdW1hIEcgJWQiLCBsdW1hKTsKKwlpZiAobHVtYSA8IGx1bWFfbWVhbiAtIGx1bWFfZGVsdGEgfHwgbHVtYSA+IGx1bWFfbWVhbiArIGx1bWFfZGVsdGEpIHsKKwkJR2JyaWdodCArPSAobHVtYV9tZWFuIC0gbHVtYSkgPj4gc3ByaW5nOworCQlHYnJpZ2h0ID0gQkxJTUlUKEdicmlnaHQpOworCQlQREVCVUcoRF9GUkFNLCAiRXRvbXMgR2JyaWdodCAlZCIsIEdicmlnaHQpOworCQlFdF9zZXRnYWluRyhnc3BjYV9kZXYsIChfX3U4KSBHYnJpZ2h0KTsKKwl9Cit9CisKKyN1bmRlZiBCTElNSVQKKyN1bmRlZiBMSU1JVAorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KKwkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCWludCBsZW4pCQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwlzdHJ1Y3Qgc2QgKnNkOworCWludCBzZXFmcmFtZTsKKworCXNlcWZyYW1lID0gZGF0YVswXSAmIDB4M2Y7CisJbGVuID0gKGludCkgKCgoZGF0YVswXSAmIDB4YzApIDw8IDIpIHwgZGF0YVsxXSk7CisJaWYgKHNlcWZyYW1lID09IDB4M2YpIHsKKwkJUERFQlVHKERfRlJBTSwKKwkJICAgICAgICJoZWFkZXIgcGFja2V0IGZvdW5kIGRhdGFsZW5ndGggJWQgISEiLCBsZW4pOworCQlQREVCVUcoRF9GUkFNLCAiRyAlZCBSICVkIEcgJWQgQiAlZCIsCisJCSAgICAgICBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdKTsKKwkJZGF0YSArPSAzMDsKKwkJLyogZG9uJ3QgY2hhbmdlIGRhdGFsZW5ndGggYXMgdGhlIGNoaXBzIHByb3ZpZGVkIGl0ICovCisJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLAorCQkJCQlkYXRhLCAwKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKKwkJc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwkJaWYgKHNkLT5hZ19jbnQgPj0gMCkgeworCQkJaWYgKC0tc2QtPmFnX2NudCA8IDApIHsKKwkJCQlzZC0+YWdfY250ID0gQUdfQ05UX1NUQVJUOworCQkJCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJCQl9CisJCX0KKwkJcmV0dXJuOworCX0KKwlpZiAobGVuKSB7CisJCWRhdGEgKz0gODsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKKwl9IGVsc2UgewkJCS8qIERyb3AgUGFja2V0ICovCisJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCX0KK30KKworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5icmlnaHRuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWdldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwkqdmFsID0gc2QtPmJyaWdodG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbnRyYXN0ID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwkqdmFsID0gc2QtPmNvbnRyYXN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29sb3JzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwkqdmFsID0gc2QtPmNvbG9yczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YXV0b2dhaW4gPSB2YWw7CisJaWYgKHZhbCkKKwkJc2QtPmFnX2NudCA9IEFHX0NOVF9TVEFSVDsKKwllbHNlCisJCXNkLT5hZ19jbnQgPSAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5hdXRvZ2FpbjsKKwlyZXR1cm4gMDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgPSBzZF9jdHJscywKKwkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkub3BlbiA9IHNkX29wZW4sCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCisJLmNsb3NlID0gc2RfY2xvc2UsCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KKyNkZWZpbmUgRFZOTShuYW1lKSAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpIG5hbWUKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworI2lmbmRlZiBDT05GSUdfVVNCX0VUNjFYMjUxCisJe1VTQl9ERVZJQ0UoMHgxMDJjLCAweDYxNTEpLCBEVk5NKCJRY2FtIFNhbmdoYSBDSUYiKX0sCisjZW5kaWYKKwl7VVNCX0RFVklDRSgweDEwMmMsIDB4NjI1MSksIERWTk0oIlFjYW0geHh4eHh4IFZHQSIpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCSAgICAgICBUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAidiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZTM2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTAsMCArMSwxOTA1IEBACisvKgorICogTWFpbiBVU0IgY2FtZXJhIGRyaXZlcgorICoKKyAqIFY0TDIgYnkgSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJnc3BjYSIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKworI2luY2x1ZGUgImdzcGNhLmgiCisKKy8qIGdsb2JhbCB2YWx1ZXMgKi8KKyNkZWZpbmUgREVGX05VUkJTIDIJCS8qIGRlZmF1bHQgbnVtYmVyIG9mIFVSQnMgKi8KKworTU9EVUxFX0FVVEhPUigiSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK3N0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK2ludCBnc3BjYV9kZWJ1ZyA9IERfRVJSIHwgRF9QUk9CRTsKK0VYUE9SVF9TWU1CT0woZ3NwY2FfZGVidWcpOworCitzdGF0aWMgdm9pZCBQREVCVUdfTU9ERShjaGFyICp0eHQsIF9fdTMyIHBpeGZtdCwgaW50IHcsIGludCBoKQoreworCWlmICgocGl4Zm10ID4+IDI0KSA+PSAnMCcgJiYgKHBpeGZtdCA+PiAyNCkgPD0gJ3onKSB7CisJCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICIlcyAlYyVjJWMlYyAlZHglZCIsCisJCQl0eHQsCisJCQlwaXhmbXQgJiAweGZmLAorCQkJKHBpeGZtdCA+PiA4KSAmIDB4ZmYsCisJCQkocGl4Zm10ID4+IDE2KSAmIDB4ZmYsCisJCQlwaXhmbXQgPj4gMjQsCisJCQl3LCBoKTsKKwl9IGVsc2UgeworCQlQREVCVUcoRF9DT05GfERfU1RSRUFNLCAiJXMgMHglMDh4ICVkeCVkIiwKKwkJCXR4dCwKKwkJCXBpeGZtdCwKKwkJCXcsIGgpOworCX0KK30KKyNlbHNlCisjZGVmaW5lIFBERUJVR19NT0RFKHR4dCwgcGl4Zm10LCB3LCBoKQorI2VuZGlmCisKKy8qIHNwZWNpZmljIG1lbW9yeSB0eXBlcyAtICEhIHNob3VsZCBkaWZmZXJlbnQgZnJvbSBWNEwyX01FTU9SWV94eHggKi8KKyNkZWZpbmUgR1NQQ0FfTUVNT1JZX05PIDAJLyogVjRMMl9NRU1PUllfeHh4IHN0YXJ0cyBmcm9tIDEgKi8KKyNkZWZpbmUgR1NQQ0FfTUVNT1JZX1JFQUQgNworCisjZGVmaW5lIEJVRl9BTExfRkxBR1MgKFY0TDJfQlVGX0ZMQUdfUVVFVUVEIHwgVjRMMl9CVUZfRkxBR19ET05FKQorCisvKgorICogVk1BIG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIGdzcGNhX3ZtX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJZnJhbWUtPnZtYV91c2VfY291bnQrKzsKKwlmcmFtZS0+djRsMl9idWYuZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGdzcGNhX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKworCWlmICgtLWZyYW1lLT52bWFfdXNlX2NvdW50IDw9IDApCisJCWZyYW1lLT52NGwyX2J1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19NQVBQRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ3NwY2Ffdm1fb3BzID0geworCS5vcGVuCQk9IGdzcGNhX3ZtX29wZW4sCisJLmNsb3NlCQk9IGdzcGNhX3ZtX2Nsb3NlLAorfTsKKworLyoKKyAqIGZpbGwgYSB2aWRlbyBmcmFtZSBmcm9tIGFuIFVSQiBhbmQgcmVzdWJtaXQKKyAqLworc3RhdGljIHZvaWQgZmlsbF9mcmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwlfX3U4ICpkYXRhOwkJLyogYWRkcmVzcyBvZiBkYXRhIGluIHRoZSBpc28gbWVzc2FnZSAqLworCWludCBpLCBqLCBsZW4sIHN0OworCWNhbV9wa3Rfb3AgcGt0X3NjYW47CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXJiIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsJCS8qIGRpc2Nvbm5lY3Rpb24gPyAqLworCX0KKwlwa3Rfc2NhbiA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+cGt0X3NjYW47CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCisJCS8qIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGZyYW1lIGJ1ZmZlciAqLworCQlqID0gZ3NwY2FfZGV2LT5mcl9pOworCQlqID0gZ3NwY2FfZGV2LT5mcl9xdWV1ZVtqXTsKKwkJZnJhbWUgPSAmZ3NwY2FfZGV2LT5mcmFtZVtqXTsKKwkJaWYgKChmcmFtZS0+djRsMl9idWYuZmxhZ3MgJiBCVUZfQUxMX0ZMQUdTKQorCQkJCQkhPSBWNEwyX0JVRl9GTEFHX1FVRVVFRCkgeworCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGNoZWNrIHRoZSBwYWNrZXQgc3RhdHVzIGFuZCBsZW5ndGggKi8KKwkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlpZiAobGVuID09IDApCisJCQljb250aW51ZTsKKwkJc3QgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJaWYgKHN0KSB7CisJCQlQREVCVUcoRF9FUlIsCisJCQkJIklTT0MgZGF0YSBlcnJvcjogWyVkXSBsZW49JWQsIHN0YXR1cz0lZCIsCisJCQkJaSwgbGVuLCBzdCk7CisJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogbGV0IHRoZSBwYWNrZXQgYmUgYW5hbHl6ZWQgYnkgdGhlIHN1YmRyaXZlciAqLworCQlQREVCVUcoRF9QQUNLLCAicGFja2V0IFslZF0gbzolZCBsOiVkIiwKKwkJCWksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LCBsZW4pOworCQlkYXRhID0gKF9fdTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIKKwkJCQkJKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJcGt0X3NjYW4oZ3NwY2FfZGV2LCBmcmFtZSwgZGF0YSwgbGVuKTsKKwl9CisKKwkvKiByZXN1Ym1pdCB0aGUgVVJCICovCisJdXJiLT5zdGF0dXMgPSAwOworCXN0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3QgPCAwKQorCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXNiX3N1Ym1pdF91cmIoKSByZXQgJWQiLCBzdCk7Cit9CisKKy8qCisgKiBJU09DIG1lc3NhZ2UgaW50ZXJydXB0IGZyb20gdGhlIFVTQiBkZXZpY2UKKyAqCisgKiBBbmFseXNlIGVhY2ggcGFja2V0IGFuZCBjYWxsIHRoZSBzdWJkcml2ZXIgZm9yIGNvcHkgdG8gdGhlIGZyYW1lIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgaXNvY19pcnEoc3RydWN0IHVyYiAqdXJiCispCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gKHN0cnVjdCBnc3BjYV9kZXYgKikgdXJiLT5jb250ZXh0OworCisJUERFQlVHKERfUEFDSywgImlzb2MgaXJxIik7CisJaWYgKCFnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJcmV0dXJuOworCWZpbGxfZnJhbWUoZ3NwY2FfZGV2LCB1cmIpOworfQorCisvKgorICogYWRkIGRhdGEgdG8gdGhlIGN1cnJlbnQgZnJhbWUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgc3ViZHJpdmVycyBhdCBpbnRlcnJ1cHQgbGV2ZWwuCisgKgorICogVG8gYnVpbGQgYSBmcmFtZSwgdGhlc2Ugb25lcyBtdXN0IGFkZAorICoJLSBvbmUgRklSU1RfUEFDS0VUCisgKgktIDAgb3IgbWFueSBJTlRFUl9QQUNLRVRzCisgKgktIG9uZSBMQVNUX1BBQ0tFVAorICogRElTQ0FSRF9QQUNLRVQgaW52YWxpZGF0ZXMgdGhlIHdob2xlIGZyYW1lLgorICogT24gTEFTVF9QQUNLRVQsIGEgbmV3IGZyYW1lIGlzIHJldHVybmVkLgorICovCitzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmdzcGNhX2ZyYW1lX2FkZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJICAgIGludCBwYWNrZXRfdHlwZSwKKwkJCQkgICAgc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwKKwkJCQkgICAgY29uc3QgX191OCAqZGF0YSwKKwkJCQkgICAgaW50IGxlbikKK3sKKwlpbnQgaSwgajsKKworCVBERUJVRyhEX1BBQ0ssICJhZGQgdDolZCBsOiVkIiwJcGFja2V0X3R5cGUsIGxlbik7CisKKwkvKiB3aGVuIHN0YXJ0IG9mIGEgbmV3IGZyYW1lLCBpZiB0aGUgY3VycmVudCBmcmFtZSBidWZmZXIKKwkgKiBpcyBub3QgcXVldWVkLCBkaXNjYXJkIHRoZSB3aG9sZSBmcmFtZSAqLworCWlmIChwYWNrZXRfdHlwZSA9PSBGSVJTVF9QQUNLRVQpIHsKKwkJaWYgKChmcmFtZS0+djRsMl9idWYuZmxhZ3MgJiBCVUZfQUxMX0ZMQUdTKQorCQkJCQkJIT0gVjRMMl9CVUZfRkxBR19RVUVVRUQpIHsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJcmV0dXJuIGZyYW1lOworCQl9CisJCWZyYW1lLT5kYXRhX2VuZCA9IGZyYW1lLT5kYXRhOworCQlqaWZmaWVzX3RvX3RpbWV2YWwoZ2V0X2ppZmZpZXNfNjQoKSwKKwkJCQkgICAmZnJhbWUtPnY0bDJfYnVmLnRpbWVzdGFtcCk7CisJCWZyYW1lLT52NGwyX2J1Zi5zZXF1ZW5jZSA9ICsrZ3NwY2FfZGV2LT5zZXF1ZW5jZTsKKwl9IGVsc2UgaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBESVNDQVJEX1BBQ0tFVCkgeworCQlyZXR1cm4gZnJhbWU7CisJfQorCisJLyogYXBwZW5kIHRoZSBwYWNrZXQgdG8gdGhlIGZyYW1lIGJ1ZmZlciAqLworCWlmIChsZW4gPiAwKSB7CisJCWlmIChmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSArIGxlbgorCQkJCQkJID4gZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCkgeworCQkJUERFQlVHKERfRVJSfERfUEFDSywgImZyYW1lIG92ZXJmbG93ICV6ZCA+ICVkIiwKKwkJCQlmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSArIGxlbiwKKwkJCQlmcmFtZS0+djRsMl9idWYubGVuZ3RoKTsKKwkJCXBhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoZnJhbWUtPmRhdGFfZW5kLCBkYXRhLCBsZW4pOworCQkJZnJhbWUtPmRhdGFfZW5kICs9IGxlbjsKKwkJfQorCX0KKwlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBwYWNrZXRfdHlwZTsKKworCS8qIGlmIGxhc3QgcGFja2V0LCB3YWtlIHRoZSBhcHBsaWNhdGlvbiBhbmQgYWR2YW5jZSBpbiB0aGUgcXVldWUgKi8KKwlpZiAocGFja2V0X3R5cGUgPT0gTEFTVF9QQUNLRVQpIHsKKwkJZnJhbWUtPnY0bDJfYnVmLmJ5dGVzdXNlZCA9IGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhOworCQlmcmFtZS0+djRsMl9idWYuZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCQlmcmFtZS0+djRsMl9idWYuZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19ET05FOworCQlhdG9taWNfaW5jKCZnc3BjYV9kZXYtPm5ldmVudCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT53cSk7CS8qIGV2ZW50ID0gbmV3IGZyYW1lICovCisJCWkgPSAoZ3NwY2FfZGV2LT5mcl9pICsgMSkgJSBnc3BjYV9kZXYtPm5mcmFtZXM7CisJCWdzcGNhX2Rldi0+ZnJfaSA9IGk7CisJCVBERUJVRyhEX0ZSQU0sICJmcmFtZSBjb21wbGV0ZSBsZW46JWQgcTolZCBpOiVkIG86JWQiLAorCQkJZnJhbWUtPnY0bDJfYnVmLmJ5dGVzdXNlZCwKKwkJCWdzcGNhX2Rldi0+ZnJfcSwKKwkJCWksCisJCQlnc3BjYV9kZXYtPmZyX28pOworCQlqID0gZ3NwY2FfZGV2LT5mcl9xdWV1ZVtpXTsKKwkJZnJhbWUgPSAmZ3NwY2FfZGV2LT5mcmFtZVtqXTsKKwl9CisJcmV0dXJuIGZyYW1lOworfQorRVhQT1JUX1NZTUJPTChnc3BjYV9mcmFtZV9hZGQpOworCitzdGF0aWMgaW50IGdzcGNhX2lzX2NvbXByZXNzZWQoX191MzIgZm9ybWF0KQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfTUpQRUc6CisJY2FzZSBWNEwyX1BJWF9GTVRfSlBFRzoKKwljYXNlIFY0TDJfUElYX0ZNVF9TUENBNTYxOgorCWNhc2UgVjRMMl9QSVhfRk1UX1BBQzIwNzoKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworLyoJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CShhbHJlYWR5IGRvbmUpICovCisJbWVtID0gdm1hbGxvY18zMihzaXplKTsKKwlpZiAobWVtICE9IE5VTEwpIHsKKwkJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwkJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKSBhZHIpKTsKKwkJCWFkciArPSBQQUdFX1NJWkU7CisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJfQorCX0KKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqbWVtLCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKikgYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwl2ZnJlZShtZW0pOworfQorCitzdGF0aWMgaW50IGZyYW1lX2FsbG9jKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCXVuc2lnbmVkIGludCBmcnN6OworCWludCBpOworCisJaSA9IGdzcGNhX2Rldi0+Y3Vycl9tb2RlOworCWZyc3ogPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtpXS5zaXplaW1hZ2U7CisJUERFQlVHKERfU1RSRUFNLCAiZnJhbWUgYWxsb2MgZnJzejogJWQiLCBmcnN6KTsKKwlmcnN6ID0gUEFHRV9BTElHTihmcnN6KTsKKwlnc3BjYV9kZXYtPmZyc3ogPSBmcnN6OworCWlmIChjb3VudCA+IEdTUENBX01BWF9GUkFNRVMpCisJCWNvdW50ID0gR1NQQ0FfTUFYX0ZSQU1FUzsKKwlnc3BjYV9kZXYtPmZyYnVmID0gcnZtYWxsb2MoZnJzeiAqIGNvdW50KTsKKwlpZiAoIWdzcGNhX2Rldi0+ZnJidWYpIHsKKwkJZXJyKCJmcmFtZSBhbGxvYyBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWdzcGNhX2Rldi0+bmZyYW1lcyA9IGNvdW50OworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbaV07CisJCWZyYW1lLT52NGwyX2J1Zi5pbmRleCA9IGk7CisJCWZyYW1lLT52NGwyX2J1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlmcmFtZS0+djRsMl9idWYuZmxhZ3MgPSAwOworCQlmcmFtZS0+djRsMl9idWYuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWZyYW1lLT52NGwyX2J1Zi5sZW5ndGggPSBmcnN6OworCQlmcmFtZS0+djRsMl9idWYubWVtb3J5ID0gZ3NwY2FfZGV2LT5tZW1vcnk7CisJCWZyYW1lLT52NGwyX2J1Zi5zZXF1ZW5jZSA9IDA7CisJCWZyYW1lLT5kYXRhID0gZnJhbWUtPmRhdGFfZW5kID0KKwkJCQkJZ3NwY2FfZGV2LT5mcmJ1ZiArIGkgKiBmcnN6OworCQlmcmFtZS0+djRsMl9idWYubS5vZmZzZXQgPSBpICogZnJzejsKKwl9CisJZ3NwY2FfZGV2LT5mcl9pID0gZ3NwY2FfZGV2LT5mcl9vID0gZ3NwY2FfZGV2LT5mcl9xID0gMDsKKwlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKKwlnc3BjYV9kZXYtPnNlcXVlbmNlID0gMDsKKwlhdG9taWNfc2V0KCZnc3BjYV9kZXYtPm5ldmVudCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyYW1lX2ZyZWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBpOworCisJUERFQlVHKERfU1RSRUFNLCAiZnJhbWUgZnJlZSIpOworCWlmIChnc3BjYV9kZXYtPmZyYnVmICE9IE5VTEwpIHsKKwkJcnZmcmVlKGdzcGNhX2Rldi0+ZnJidWYsCisJCQlnc3BjYV9kZXYtPm5mcmFtZXMgKiBnc3BjYV9kZXYtPmZyc3opOworCQlnc3BjYV9kZXYtPmZyYnVmID0gTlVMTDsKKwkJZm9yIChpID0gMDsgaSA8IGdzcGNhX2Rldi0+bmZyYW1lczsgaSsrKQorCQkJZ3NwY2FfZGV2LT5mcmFtZVtpXS5kYXRhID0gTlVMTDsKKwl9CisJZ3NwY2FfZGV2LT5uZnJhbWVzID0gMDsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV91cmJzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgaW50IGk7CisKKwlQREVCVUcoRF9TVFJFQU0sICJraWxsIHRyYW5zZmVyIik7CisJZm9yIChpID0gMDsgaSA8IE1BWF9OVVJCUzsgKytpKSB7CisJCXVyYiA9IGdzcGNhX2Rldi0+dXJiW2ldOworCQlpZiAodXJiID09IE5VTEwpCisJCQlicmVhazsKKworCQlnc3BjYV9kZXYtPnVyYltpXSA9IE5VTEw7CisJCXVzYl9raWxsX3VyYih1cmIpOworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgIT0gTlVMTCkKKwkJCXVzYl9idWZmZXJfZnJlZShnc3BjYV9kZXYtPmRldiwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwl9Cit9CisKKy8qCisgKiBzZWFyY2ggYW4gaW5wdXQgaXNvY2hyb25vdXMgZW5kcG9pbnQgaW4gYW4gYWx0ZXJuYXRlIHNldHRpbmcKKyAqLworc3RhdGljIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqYWx0X2lzb2Moc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0LAorCQkJCQkgIF9fdTggZXBhZGRyKQoreworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJaW50IGksIGF0dHI7CisKKwllcGFkZHIgfD0gVVNCX0RJUl9JTjsKKwlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQllcCA9ICZhbHQtPmVuZHBvaW50W2ldOworCQlpZiAoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyA9PSBlcGFkZHIpIHsKKwkJCWF0dHIgPSBlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMKKwkJCQkJCSYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7CisJCQlpZiAoYXR0ciA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJCXJldHVybiBlcDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogc2VhcmNoIGFuIGlucHV0IGlzb2Nocm9ub3VzIGVuZHBvaW50CisgKgorICogVGhlIGVuZHBvaW50IGlzIGRlZmluZWQgYnkgdGhlIHN1YmRyaXZlci4KKyAqIFVzZSBvbmx5IHRoZSBmaXJzdCBpc29jIChzb21lIFpvcmFuIC0gMHgwNTcyOjB4MDAwMSAtIGhhdmUgdHdvIHN1Y2ggZXApLgorICogVGhpcyByb3V0aW5lIG1heSBiZSBjYWxsZWQgbWFueSB0aW1lcyB3aGVuIHRoZSBiYW5kd2lkdGggaXMgdG9vIHNtYWxsCisgKiAodGhlIGJhbmR3aWR0aCBpcyBjaGVja2VkIG9uIHVyYiBzdWJtaXQpLgorICovCitzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmdldF9pc29jX2VwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCWludCBpLCByZXQ7CisKKwlpbnRmID0gdXNiX2lmbnVtX3RvX2lmKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlKTsKKwllcCA9IE5VTEw7CisJaSA9IGdzcGNhX2Rldi0+YWx0OwkJCS8qIHByZXZpb3VzIGFsdCBzZXR0aW5nICovCisJd2hpbGUgKC0taSA+IDApIHsJCQkvKiBhbHQgMCBpcyB1bnVzYWJsZSAqLworCQllcCA9IGFsdF9pc29jKCZpbnRmLT5hbHRzZXR0aW5nW2ldLCBnc3BjYV9kZXYtPmNhbS5lcGFkZHIpOworCQlpZiAoZXApCisJCQlicmVhazsKKwl9CisJaWYgKGVwID09IE5VTEwpIHsKKwkJZXJyKCJubyBJU09DIGVuZHBvaW50IGZvdW5kIik7CisJCXJldHVybiBOVUxMOworCX0KKwlQREVCVUcoRF9TVFJFQU0sICJ1c2UgSVNPQyBhbHQgJWQgZXAgMHglMDJ4IiwKKwkJCWksIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCBpKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInNldCBpbnRlcmZhY2UgZXJyICVkIiwgcmV0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWdzcGNhX2Rldi0+YWx0ID0gaTsJCS8qIG1lbW9yaXplIHRoZSBjdXJyZW50IGFsdCBzZXR0aW5nICovCisJcmV0dXJuIGVwOworfQorCisvKgorICogY3JlYXRlIHRoZSBpc29jaHJvbm91cyBVUkJzCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX3VyYnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IG4sIG51cmJzLCBpLCBwc2l6ZSwgbnBrdCwgYnNpemU7CisKKwkvKiBjYWxjdWxhdGUgdGhlIHBhY2tldCBzaXplIGFuZCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgKi8KKwlwc2l6ZSA9IGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKKworCS8qIFNlZSBwYXJhZ3JhcGggNS45IC8gdGFibGUgNS0xMSBvZiB0aGUgdXNiIDIuMCBzcGVjLiAqLworCXBzaXplID0gKHBzaXplICYgMHgwN2ZmKSAqICgxICsgKChwc2l6ZSA+PiAxMSkgJiAzKSk7CisJbnBrdCA9IElTT19NQVhfU0laRSAvIHBzaXplOworCWlmIChucGt0ID4gSVNPX01BWF9QS1QpCisJCW5wa3QgPSBJU09fTUFYX1BLVDsKKwlic2l6ZSA9IHBzaXplICogbnBrdDsKKwlQREVCVUcoRF9TVFJFQU0sCisJCSJpc29jICVkIHBrdHMgc2l6ZSAlZCAoYnNpemU6JWQpIiwgbnBrdCwgcHNpemUsIGJzaXplKTsKKwludXJicyA9IERFRl9OVVJCUzsKKwlnc3BjYV9kZXYtPm51cmJzID0gbnVyYnM7CisJZm9yIChuID0gMDsgbiA8IG51cmJzOyBuKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYihucGt0LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWVycigidXNiX2FsbG9jX3VyYiBmYWlsZWQiKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyhnc3BjYV9kZXYtPmRldiwKKwkJCQkJCWJzaXplLAorCQkJCQkJR0ZQX0tFUk5FTCwKKwkJCQkJCSZ1cmItPnRyYW5zZmVyX2RtYSk7CisKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCQllcnIoInVzYl9idWZmZXJfdXJiIGZhaWxlZCIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZ3NwY2FfZGV2LT51cmJbbl0gPSB1cmI7CisJCXVyYi0+ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJCXVyYi0+Y29udGV4dCA9IGdzcGNhX2RldjsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGdzcGNhX2Rldi0+ZGV2LAorCQkJCQkgICAgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAKKwkJCQkJfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJdXJiLT5pbnRlcnZhbCA9IGVwLT5kZXNjLmJJbnRlcnZhbDsKKwkJdXJiLT5jb21wbGV0ZSA9IGlzb2NfaXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbnBrdDsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnNpemU7CisJCWZvciAoaSA9IDA7IGkgPCBucGt0OyBpKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gcHNpemU7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IHBzaXplICogaTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHN0YXJ0IHRoZSBVU0IgdHJhbnNmZXIKKyAqLworc3RhdGljIGludCBnc3BjYV9pbml0X3RyYW5zZmVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCWludCBuLCByZXQ7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIHNldCB0aGUgaGlnaGVyIGFsdGVybmF0ZSBzZXR0aW5nIGFuZAorCSAqIGxvb3AgdW50aWwgdXJiIHN1Ym1pdCBzdWNjZWVkcyAqLworCWdzcGNhX2Rldi0+YWx0ID0gZ3NwY2FfZGV2LT5uYmFsdDsKKwlmb3IgKDs7KSB7CisJCVBERUJVRyhEX1NUUkVBTSwgImluaXQgdHJhbnNmZXIgYWx0ICVkIiwgZ3NwY2FfZGV2LT5hbHQpOworCQllcCA9IGdldF9pc29jX2VwKGdzcGNhX2Rldik7CisJCWlmIChlcCA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0ID0gY3JlYXRlX3VyYnMoZ3NwY2FfZGV2LCBlcCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJLyogc3RhcnQgdGhlIGNhbSAqLworCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0YXJ0KGdzcGNhX2Rldik7CisJCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMTsKKwkJYXRvbWljX3NldCgmZ3NwY2FfZGV2LT5uZXZlbnQsIDApOworCisJCS8qIHN1Ym1pdCB0aGUgVVJCcyAqLworCQlmb3IgKG4gPSAwOyBuIDwgZ3NwY2FfZGV2LT5udXJiczsgbisrKSB7CisJCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihnc3BjYV9kZXYtPnVyYltuXSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwKKwkJCQkJInVzYl9zdWJtaXRfdXJiIFslZF0gZXJyICVkIiwgbiwgcmV0KTsKKwkJCQlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDA7CisJCQkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCQkJaWYgKHJldCA9PSAtRU5PU1BDKQorCQkJCQlicmVhazsJLyogdHJ5IHRoZSBwcmV2aW91cyBhbHQgKi8KKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQlpZiAocmV0ID49IDApCisJCQlicmVhazsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdzcGNhX3NldF9hbHQwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIDApOworCWlmIChyZXQgPCAwKQorCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sICJzZXQgaW50ZXJmYWNlIDAgZXJyICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBOb3RlIGJvdGggdGhlIHF1ZXVlIGFuZCB0aGUgdXNiIGxvY2sgc2hvdWxkIGJlIGhvbGQgd2hlbiBjYWxsaW5nIHRoaXMgKi8KK3N0YXRpYyB2b2lkIGdzcGNhX3N0cmVhbV9vZmYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMDsKKwlhdG9taWNfc2V0KCZnc3BjYV9kZXYtPm5ldmVudCwgMCk7CisJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkgeworCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7CisJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOworCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKGdzcGNhX2Rldik7CisJCVBERUJVRyhEX1NUUkVBTSwgInN0cmVhbSBvZmYgT0siKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdzcGNhX3NldF9kZWZhdWx0X21vZGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBpOworCisJaSA9IGdzcGNhX2Rldi0+Y2FtLm5tb2RlcyAtIDE7CS8qIHRha2UgdGhlIGhpZ2hlc3QgbW9kZSAqLworCWdzcGNhX2Rldi0+Y3Vycl9tb2RlID0gaTsKKwlnc3BjYV9kZXYtPndpZHRoID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbaV0ud2lkdGg7CisJZ3NwY2FfZGV2LT5oZWlnaHQgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtpXS5oZWlnaHQ7CisJZ3NwY2FfZGV2LT5waXhmbXQgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtpXS5waXhlbGZvcm1hdDsKK30KKworc3RhdGljIGludCB3eGhfdG9fbW9kZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBnc3BjYV9kZXYtPmNhbS5ubW9kZXM7IC0taSA+IDA7ICkgeworCQlpZiAod2lkdGggPj0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbaV0ud2lkdGgKKwkJICAgICYmIGhlaWdodCA+PSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtpXS5oZWlnaHQpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGk7Cit9CisKKy8qCisgKiBzZWFyY2ggYSBtb2RlIHdpdGggdGhlIHJpZ2h0IHBpeGVsIGZvcm1hdAorICovCitzdGF0aWMgaW50IGdzcGNhX2dldF9tb2RlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWludCBtb2RlLAorCQkJaW50IHBpeGZtdCkKK3sKKwlpbnQgbW9kZVUsIG1vZGVEOworCisJbW9kZVUgPSBtb2RlRCA9IG1vZGU7CisJd2hpbGUgKChtb2RlVSA8IGdzcGNhX2Rldi0+Y2FtLm5tb2RlcykgfHwgbW9kZUQgPj0gMCkgeworCQlpZiAoLS1tb2RlRCA+PSAwKSB7CisJCQlpZiAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbbW9kZURdLnBpeGVsZm9ybWF0CisJCQkJCQkJCT09IHBpeGZtdCkKKwkJCQlyZXR1cm4gbW9kZUQ7CisJCX0KKwkJaWYgKCsrbW9kZVUgPCBnc3BjYV9kZXYtPmNhbS5ubW9kZXMpIHsKKwkJCWlmIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVttb2RlVV0ucGl4ZWxmb3JtYXQKKwkJCQkJCQkJPT0gcGl4Zm10KQorCQkJCXJldHVybiBtb2RlVTsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ZGVzYykKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OworCWludCBpLCBqLCBpbmRleDsKKwlfX3UzMiBmbXRfdGJbOF07CisKKwkvKiBnaXZlIGFuIGluZGV4IHRvIGVhY2ggZm9ybWF0ICovCisJaW5kZXggPSAwOworCWogPSAwOworCWZvciAoaSA9IGdzcGNhX2Rldi0+Y2FtLm5tb2RlczsgLS1pID49IDA7ICkgeworCQlmbXRfdGJbaW5kZXhdID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbaV0ucGl4ZWxmb3JtYXQ7CisJCWogPSAwOworCQlmb3IgKDs7KSB7CisJCQlpZiAoZm10X3RiW2pdID09IGZtdF90YltpbmRleF0pCisJCQkJYnJlYWs7CisJCQlqKys7CisJCX0KKwkJaWYgKGogPT0gaW5kZXgpIHsKKwkJCWlmIChmbXRkZXNjLT5pbmRleCA9PSBpbmRleCkKKwkJCQlicmVhazsJCS8qIG5ldyBmb3JtYXQgKi8KKwkJCWluZGV4Kys7CisJCQlpZiAoaW5kZXggPj0gc2l6ZW9mIGZtdF90YiAvIHNpemVvZiBmbXRfdGJbMF0pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsJCS8qIG5vIG1vcmUgZm9ybWF0ICovCisKKwlmbXRkZXNjLT5waXhlbGZvcm1hdCA9IGZtdF90YltpbmRleF07CisJaWYgKGdzcGNhX2lzX2NvbXByZXNzZWQoZm10X3RiW2luZGV4XSkpCisJCWZtdGRlc2MtPmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOworCWZtdGRlc2MtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJZm10ZGVzYy0+ZGVzY3JpcHRpb25bMF0gPSBmbXRkZXNjLT5waXhlbGZvcm1hdCAmIDB4ZmY7CisJZm10ZGVzYy0+ZGVzY3JpcHRpb25bMV0gPSAoZm10ZGVzYy0+cGl4ZWxmb3JtYXQgPj4gOCkgJiAweGZmOworCWZtdGRlc2MtPmRlc2NyaXB0aW9uWzJdID0gKGZtdGRlc2MtPnBpeGVsZm9ybWF0ID4+IDE2KSAmIDB4ZmY7CisJZm10ZGVzYy0+ZGVzY3JpcHRpb25bM10gPSBmbXRkZXNjLT5waXhlbGZvcm1hdCA+PiAyNDsKKwlmbXRkZXNjLT5kZXNjcmlwdGlvbls0XSA9ICdcMCc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKKwlpbnQgbW9kZTsKKworCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltb2RlID0gZ3NwY2FfZGV2LT5jdXJyX21vZGU7CisJbWVtY3B5KCZmbXQtPmZtdC5waXgsICZnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVttb2RlXSwKKwkJc2l6ZW9mIGZtdC0+Zm10LnBpeCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCWludCB3LCBoLCBtb2RlLCBtb2RlMjsKKworCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl3ID0gZm10LT5mbXQucGl4LndpZHRoOworCWggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCWlmIChnc3BjYV9kZWJ1ZyAmIERfQ09ORikKKwkJUERFQlVHX01PREUoInRyeSBmbXQgY2FwIiwgZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LCB3LCBoKTsKKyNlbmRpZgorCS8qIHNlYXJjaCB0aGUgY2xvc2VzdCBtb2RlIGZvciB3aWR0aCBhbmQgaGVpZ2h0ICovCisJbW9kZSA9IHd4aF90b19tb2RlKGdzcGNhX2RldiwgdywgaCk7CisKKwkvKiBPSyBpZiByaWdodCBwYWxldHRlICovCisJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW21vZGVdLnBpeGVsZm9ybWF0CisJCQkJCQkhPSBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpIHsKKworCQkvKiBlbHNlLCBzZWFyY2ggdGhlIGNsb3Nlc3QgbW9kZSB3aXRoIHRoZSBzYW1lIHBpeGVsIGZvcm1hdCAqLworCQltb2RlMiA9IGdzcGNhX2dldF9tb2RlKGdzcGNhX2RldiwgbW9kZSwKKwkJCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwkJaWYgKG1vZGUyID49IDApCisJCQltb2RlID0gbW9kZTI7CisvKgkJZWxzZQorCQkJOwkJICogbm8gY2hhbmNlLCByZXR1cm4gdGhpcyBtb2RlICovCisJfQorCW1lbWNweSgmZm10LT5mbXQucGl4LCAmZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbbW9kZV0sCisJCXNpemVvZiBmbXQtPmZtdC5waXgpOworCXJldHVybiBtb2RlOwkJCS8qIHVzZWQgd2hlbiBzX2ZtdCAqLworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICB2b2lkICpwcml2LAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKKwlpbnQgcmV0OworCisJcmV0ID0gdHJ5X2ZtdF92aWRfY2FwKGdzcGNhX2RldiwgZm10KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OworCWludCByZXQ7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJcmV0ID0gdHJ5X2ZtdF92aWRfY2FwKGdzcGNhX2RldiwgZm10KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT5uZnJhbWVzICE9IDAKKwkgICAgJiYgZm10LT5mbXQucGl4LnNpemVpbWFnZSA+IGdzcGNhX2Rldi0+ZnJzeikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocmV0ID09IGdzcGNhX2Rldi0+Y3Vycl9tb2RlKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OwkJCS8qIHNhbWUgbW9kZSAqLworCX0KKworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwlnc3BjYV9kZXYtPndpZHRoID0gZm10LT5mbXQucGl4LndpZHRoOworCWdzcGNhX2Rldi0+aGVpZ2h0ID0gZm10LT5mbXQucGl4LmhlaWdodDsKKwlnc3BjYV9kZXYtPnBpeGZtdCA9IGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdDsKKwlnc3BjYV9kZXYtPmN1cnJfbW9kZSA9IHJldDsKKworCXJldCA9IDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlQREVCVUcoRF9TVFJFQU0sICIlcyBvcGVuIiwgY3VycmVudC0+Y29tbSk7CisJZ3NwY2FfZGV2ID0gKHN0cnVjdCBnc3BjYV9kZXYgKikgdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGlmIG5vdCBkb25lIHlldCwgaW5pdGlhbGl6ZSB0aGUgc2Vuc29yICovCisJaWYgKGdzcGNhX2Rldi0+dXNlcnMgPT0gMCkgeworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkgeworCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5vcGVuKGdzcGNhX2Rldik7CisJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJUERFQlVHKERfRVJSfERfQ09ORiwgImluaXQgZGV2aWNlIGZhaWxlZCAlZCIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSBpZiAoZ3NwY2FfZGV2LT51c2VycyA+IDQpIHsJLyogKGFyYml0cmFyeSB2YWx1ZSkgKi8KKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisJZ3NwY2FfZGV2LT51c2VycysrOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGdzcGNhX2RldjsKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLyogYWN0aXZhdGUgdGhlIHY0bDIgZGVidWcgKi8KKwlpZiAoZ3NwY2FfZGVidWcgJiBEX1Y0TDIpCisJCWdzcGNhX2Rldi0+dmRldi5kZWJ1ZyB8PSAzOworCWVsc2UKKwkJZ3NwY2FfZGV2LT52ZGV2LmRlYnVnICY9IH4zOworI2VuZGlmCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spOworCWlmIChyZXQgIT0gMCkKKwkJUERFQlVHKERfRVJSfERfU1RSRUFNLCAib3BlbiBmYWlsZWQgZXJyICVkIiwgcmV0KTsKKwllbHNlCisJCVBERUJVRyhEX1NUUkVBTSwgIm9wZW4gZG9uZSIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCVBERUJVRyhEX1NUUkVBTSwgIiVzIGNsb3NlIiwgY3VycmVudC0+Y29tbSk7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlnc3BjYV9kZXYtPnVzZXJzLS07CisKKwkvKiBpZiB0aGUgZmlsZSBkaWQgdGhlIGNhcHR1cmUsIGZyZWUgdGhlIHN0cmVhbWluZyByZXNvdXJjZXMgKi8KKwlpZiAoZ3NwY2FfZGV2LT5jYXB0X2ZpbGUgPT0gZmlsZSkgeworCQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQkJZ3NwY2Ffc3RyZWFtX29mZihnc3BjYV9kZXYpOworCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPmNsb3NlKGdzcGNhX2Rldik7CisJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCWZyYW1lX2ZyZWUoZ3NwY2FfZGV2KTsKKwkJZ3NwY2FfZGV2LT5jYXB0X2ZpbGUgPSBOVUxMOworCQlnc3BjYV9kZXYtPm1lbW9yeSA9IEdTUENBX01FTU9SWV9OTzsKKwl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CisJUERFQlVHKERfU1RSRUFNLCAiY2xvc2UgZG9uZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKKworCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKKwlzdHJuY3B5KGNhcC0+ZHJpdmVyLCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5hbWUsIHNpemVvZiBjYXAtPmRyaXZlcik7CisJc3RybmNweShjYXAtPmNhcmQsIGdzcGNhX2Rldi0+Y2FtLmRldl9uYW1lLCBzaXplb2YgY2FwLT5jYXJkKTsKKwlzdHJuY3B5KGNhcC0+YnVzX2luZm8sIGdzcGNhX2Rldi0+ZGV2LT5idXMtPmJ1c19uYW1lLAorCQlzaXplb2YgY2FwLT5idXNfaW5mbyk7CisJY2FwLT52ZXJzaW9uID0gRFJJVkVSX1ZFUlNJT05fTlVNQkVSOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRQorCQkJICB8IFY0TDJfQ0FQX1NUUkVBTUlORworCQkJICB8IFY0TDJfQ0FQX1JFQURXUklURTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhlIHVzZSBvZiBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwgYXNrcyBmb3IgdGhlIGNvbnRyb2xzIHRvIGJlIHNvcnRlZCAqLworc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxX2N0cmwpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKKwlpbnQgaTsKKwl1MzIgaWQ7CisKKwlpZCA9IHFfY3RybC0+aWQ7CisJaWYgKGlkICYgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMKSB7CisJCWlkICY9IFY0TDJfQ1RSTF9JRF9NQVNLOworCQlpZCsrOworCQlmb3IgKGkgPSAwOyBpIDwgZ3NwY2FfZGV2LT5zZF9kZXNjLT5uY3RybHM7IGkrKykgeworCQkJaWYgKGlkID49IGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQpIHsKKwkJCQltZW1jcHkocV9jdHJsLAorCQkJCQkmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybCwKKwkJCQkJc2l6ZW9mICpxX2N0cmwpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgZ3NwY2FfZGV2LT5zZF9kZXNjLT5uY3RybHM7IGkrKykgeworCQlpZiAoaWQgPT0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCkgeworCQkJbWVtY3B5KHFfY3RybCwKKwkJCQkmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybCwKKwkJCQlzaXplb2YgKnFfY3RybCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAoaWQgPj0gVjRMMl9DSURfQkFTRQorCSAgICAmJiBpZCA8PSBWNEwyX0NJRF9MQVNUUDEpIHsKKwkJcV9jdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OworCWNvbnN0IHN0cnVjdCBjdHJsICpjdHJsczsKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0gMCwgY3RybHMgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzOworCSAgICAgaSA8IGdzcGNhX2Rldi0+c2RfZGVzYy0+bmN0cmxzOworCSAgICAgaSsrLCBjdHJscysrKSB7CisJCWlmIChjdHJsLT5pZCAhPSBjdHJscy0+cWN0cmwuaWQpCisJCQljb250aW51ZTsKKwkJaWYgKGN0cmwtPnZhbHVlIDwgY3RybHMtPnFjdHJsLm1pbmltdW0KKwkJICAgICYmIGN0cmwtPnZhbHVlID4gY3RybHMtPnFjdHJsLm1heGltdW0pCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJUERFQlVHKERfQ09ORiwgInNldCBjdHJsIFslMDh4XSA9ICVkIiwgY3RybC0+aWQsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQlyZXQgPSBjdHJscy0+c2V0KGdzcGNhX2RldiwgY3RybC0+dmFsdWUpOworCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKKworCWNvbnN0IHN0cnVjdCBjdHJsICpjdHJsczsKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0gMCwgY3RybHMgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzOworCSAgICAgaSA8IGdzcGNhX2Rldi0+c2RfZGVzYy0+bmN0cmxzOworCSAgICAgaSsrLCBjdHJscysrKSB7CisJCWlmIChjdHJsLT5pZCAhPSBjdHJscy0+cWN0cmwuaWQpCisJCQljb250aW51ZTsKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQlyZXQgPSBjdHJscy0+Z2V0KGdzcGNhX2RldiwgJmN0cmwtPnZhbHVlKTsKKwkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5bWVudShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51KQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CisKKwlpZiAoIWdzcGNhX2Rldi0+c2RfZGVzYy0+cXVlcnltZW51KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT5zZF9kZXNjLT5xdWVyeW1lbnUoZ3NwY2FfZGV2LCBxbWVudSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfaW5wdXQgKmlucHV0KQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CisKKwlpZiAoaW5wdXQtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCW1lbXNldChpbnB1dCwgMCwgc2l6ZW9mICppbnB1dCk7CisJaW5wdXQtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCXN0cm5jcHkoaW5wdXQtPm5hbWUsIGdzcGNhX2Rldi0+c2RfZGVzYy0+bmFtZSwKKwkJc2l6ZW9mIGlucHV0LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQoreworCSppID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCit7CisJaWYgKGkgPiAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmIpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKKwlpbnQgaSwgcmV0ID0gMDsKKworCWlmIChyYi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAocmItPm1lbW9yeSkgeworCWNhc2UgR1NQQ0FfTUVNT1JZX1JFQUQ6CQkJLyogKGludGVybmFsIGNhbGwpICovCisJY2FzZSBWNEwyX01FTU9SWV9NTUFQOgorCWNhc2UgVjRMMl9NRU1PUllfVVNFUlBUUjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+cXVldWVfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoZ3NwY2FfZGV2LT5tZW1vcnkgIT0gR1NQQ0FfTUVNT1JZX05PCisJICAgICYmIGdzcGNhX2Rldi0+bWVtb3J5ICE9IHJiLT5tZW1vcnkpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBvbmx5IG9uZSBmaWxlIG1heSBkbyB0aGUgY2FwdHVyZSAqLworCWlmIChnc3BjYV9kZXYtPmNhcHRfZmlsZSAhPSBOVUxMCisJICAgICYmIGdzcGNhX2Rldi0+Y2FwdF9maWxlICE9IGZpbGUpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBpZiBhbGxvY2F0ZWQsIHRoZSBidWZmZXJzIG11c3Qgbm90IGJlIG1hcHBlZCAqLworCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPm5mcmFtZXM7IGkrKykgeworCQlpZiAoZ3NwY2FfZGV2LT5mcmFtZVtpXS52bWFfdXNlX2NvdW50KSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIHN0b3Agc3RyZWFtaW5nICovCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQlnc3BjYV9zdHJlYW1fb2ZmKGdzcGNhX2Rldik7CisJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJfQorCisJLyogZnJlZSB0aGUgcHJldmlvdXMgYWxsb2NhdGVkIGJ1ZmZlcnMsIGlmIGFueSAqLworCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgIT0gMCkgeworCQlmcmFtZV9mcmVlKGdzcGNhX2Rldik7CisJCWdzcGNhX2Rldi0+Y2FwdF9maWxlID0gTlVMTDsKKwl9CisJaWYgKHJiLT5jb3VudCA9PSAwKQkJCS8qIHVucmVxdWVzdCAqLworCQlnb3RvIG91dDsKKwlnc3BjYV9kZXYtPm1lbW9yeSA9IHJiLT5tZW1vcnk7CisJcmV0ID0gZnJhbWVfYWxsb2MoZ3NwY2FfZGV2LCByYi0+Y291bnQpOworCWlmIChyZXQgPT0gMCkgeworCQlyYi0+Y291bnQgPSBnc3BjYV9kZXYtPm5mcmFtZXM7CisJCWdzcGNhX2Rldi0+Y2FwdF9maWxlID0gZmlsZTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spOworCVBERUJVRyhEX1NUUkVBTSwgInJlcWJ1ZnMgc3Q6JWQgYzolZCIsIHJldCwgcmItPmNvdW50KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqdjRsMl9idWYpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCisJaWYgKHY0bDJfYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRQorCSAgICB8fCB2NGwyX2J1Zi0+aW5kZXggPCAwCisJICAgIHx8IHY0bDJfYnVmLT5pbmRleCA+PSBnc3BjYV9kZXYtPm5mcmFtZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJZnJhbWUgPSAmZ3NwY2FfZGV2LT5mcmFtZVt2NGwyX2J1Zi0+aW5kZXhdOworCW1lbWNweSh2NGwyX2J1ZiwgJmZyYW1lLT52NGwyX2J1Ziwgc2l6ZW9mICp2NGwyX2J1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlIGJ1Zl90eXBlKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CisJaW50IHJldDsKKworCWlmIChidWZfdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+cXVldWVfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgPT0gMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKCFnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlyZXQgPSBnc3BjYV9pbml0X3RyYW5zZmVyKGdzcGNhX2Rldik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwlpZiAoZ3NwY2FfZGVidWcgJiBEX1NUUkVBTSkgeworCQlQREVCVUdfTU9ERSgic3RyZWFtIG9uIE9LIiwKKwkJCWdzcGNhX2Rldi0+cGl4Zm10LAorCQkJZ3NwY2FfZGV2LT53aWR0aCwKKwkJCWdzcGNhX2Rldi0+aGVpZ2h0KTsKKwl9CisjZW5kaWYKKwlyZXQgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJZW51bSB2NGwyX2J1Zl90eXBlIGJ1Zl90eXBlKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CisJaW50IGksIHJldDsKKworCWlmIChidWZfdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybiAwOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+cXVldWVfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBzdG9wIHN0cmVhbWluZyAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKSB7CisJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBvdXQ7CisJfQorCWdzcGNhX3N0cmVhbV9vZmYoZ3NwY2FfZGV2KTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCisJLyogZW1wdHkgdGhlIGFwcGxpY2F0aW9uIHF1ZXVlcyAqLworCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPm5mcmFtZXM7IGkrKykKKwkJZ3NwY2FfZGV2LT5mcmFtZVtpXS52NGwyX2J1Zi5mbGFncyAmPSB+QlVGX0FMTF9GTEFHUzsKKwlnc3BjYV9kZXYtPmZyX2kgPSBnc3BjYV9kZXYtPmZyX28gPSBnc3BjYV9kZXYtPmZyX3EgPSAwOworCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCWdzcGNhX2Rldi0+c2VxdWVuY2UgPSAwOworCWF0b21pY19zZXQoJmdzcGNhX2Rldi0+bmV2ZW50LCAwKTsKKwlyZXQgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2pwZWdjb21wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqcGVnY29tcCkKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OworCWludCByZXQ7CisKKwlpZiAoIWdzcGNhX2Rldi0+c2RfZGVzYy0+Z2V0X2pjb21wKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9qY29tcChnc3BjYV9kZXYsIGpwZWdjb21wKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfanBlZ2NvbXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpwZWdjb21wKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CisJaW50IHJldDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmICghZ3NwY2FfZGV2LT5zZF9kZXNjLT5zZXRfamNvbXApCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c2V0X2pjb21wKGdzcGNhX2RldiwganBlZ2NvbXApOworCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19wYXJtKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OworCisJbWVtc2V0KHBhcm0sIDAsIHNpemVvZiAqcGFybSk7CisJcGFybS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlwYXJtLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBnc3BjYV9kZXYtPm5idWZyZWFkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3Bhcm0oc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CisJaW50IG47CisKKwluID0gcGFybS0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzOworCWlmIChuID09IDAgfHwgbiA+IEdTUENBX01BWF9GUkFNRVMpCisJCXBhcm0tPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IGdzcGNhX2Rldi0+bmJ1ZnJlYWQ7CisJZWxzZQorCQlnc3BjYV9kZXYtPm5idWZyZWFkID0gbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCQl2NGwyX3N0ZF9pZCAqcGFybSkKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2aWRlb19tYnVmICptYnVmKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgaTsKKworCVBERUJVRyhEX1NUUkVBTSwgImNnbWJ1ZiIpOworCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgPT0gMCkgeworCQlpbnQgcmV0OworCisJCXsKKwkJCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7CisKKwkJCW1lbXNldCgmZm10LCAwLCBzaXplb2YgZm10KTsKKwkJCWZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJaSA9IGdzcGNhX2Rldi0+Y2FtLm5tb2RlcyAtIDE7CS8qIGhpZ2hlc3QgbW9kZSAqLworCQkJZm10LmZtdC5waXgud2lkdGggPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtpXS53aWR0aDsKKwkJCWZtdC5mbXQucGl4LmhlaWdodCA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2ldLmhlaWdodDsKKwkJCWZtdC5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0JHUjI0OworCQkJcmV0ID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgJmZtdCk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQl7CisJCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyByYjsKKworCQkJbWVtc2V0KCZyYiwgMCwgc2l6ZW9mIHJiKTsKKwkJCXJiLmNvdW50ID0gNDsKKwkJCXJiLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCQlyYi5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCQkJcmV0ID0gdmlkaW9jX3JlcWJ1ZnMoZmlsZSwgcHJpdiwgJnJiKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCW1idWYtPmZyYW1lcyA9IGdzcGNhX2Rldi0+bmZyYW1lczsKKwltYnVmLT5zaXplID0gZ3NwY2FfZGV2LT5mcnN6ICogZ3NwY2FfZGV2LT5uZnJhbWVzOworCWZvciAoaSA9IDA7IGkgPCBtYnVmLT5mcmFtZXM7IGkrKykKKwkJbWJ1Zi0+b2Zmc2V0c1tpXSA9IGdzcGNhX2Rldi0+ZnJhbWVbaV0udjRsMl9idWYubS5vZmZzZXQ7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBkZXZfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBzdGFydCwgc2l6ZTsKKwlpbnQgaSwgcmV0OworCisJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCXNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJUERFQlVHKERfU1RSRUFNLCAibW1hcCBzdGFydDolMDh4IHNpemU6JWQiLCAoaW50KSBzdGFydCwgKGludCkgc2l6ZSk7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoZ3NwY2FfZGV2LT5jYXB0X2ZpbGUgIT0gZmlsZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlmcmFtZSA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGdzcGNhX2Rldi0+bmZyYW1lczsgKytpKSB7CisJCWlmIChnc3BjYV9kZXYtPmZyYW1lW2ldLnY0bDJfYnVmLm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCQlQREVCVUcoRF9TVFJFQU0sICJtbWFwIGJhZCBtZW1vcnkgdHlwZSIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChnc3BjYV9kZXYtPmZyYW1lW2ldLnY0bDJfYnVmLm0ub2Zmc2V0ID4+IFBBR0VfU0hJRlQpCisJCQkJCQk9PSB2bWEtPnZtX3Bnb2ZmKSB7CisJCQlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGZyYW1lID09IE5VTEwpIHsKKwkJUERFQlVHKERfU1RSRUFNLCAibW1hcCBubyBmcmFtZSBidWZmZXIgZm91bmQiKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS8qIHY0bDEgbWFwcyBhbGwgdGhlIGJ1ZmZlcnMgKi8KKwlpZiAoaSAhPSAwCisJICAgIHx8IHNpemUgIT0gZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCAqIGdzcGNhX2Rldi0+bmZyYW1lcykKKyNlbmRpZgorCSAgICBpZiAoc2l6ZSAhPSBmcmFtZS0+djRsMl9idWYubGVuZ3RoKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgIm1tYXAgYmFkIHNpemUiKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiAtIFZNX0lPIG1hcmtzIHRoZSBhcmVhIGFzIGJlaW5nIGEgbW1hcGVkIHJlZ2lvbiBmb3IgSS9PIHRvIGEKKwkgKiAgIGRldmljZS4gSXQgYWxzbyBwcmV2ZW50cyB0aGUgcmVnaW9uIGZyb20gYmVpbmcgY29yZSBkdW1wZWQuCisJICovCisJdm1hLT52bV9mbGFncyB8PSBWTV9JTzsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgZnJhbWUtPmRhdGE7CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCXBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKikgYWRkcik7CisJCXJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgc3RhcnQsIHBhZ2UpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCWFkZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwl2bWEtPnZtX29wcyA9ICZnc3BjYV92bV9vcHM7CisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBmcmFtZTsKKwlnc3BjYV92bV9vcGVuKHZtYSk7CisJcmV0ID0gMDsKK291dDoKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdhaXQgZm9yIGEgdmlkZW8gZnJhbWUKKyAqCisgKiBJZiBhIGZyYW1lIGlzIHJlYWR5LCBpdHMgaW5kZXggaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgZnJhbWVfd2FpdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlpbnQgbm9uYmxvY2tfaW5nKQoreworCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisJaW50IGksIGosIHJldDsKKworCS8qIGNoZWNrIGlmIGEgZnJhbWUgaXMgcmVhZHkgKi8KKwlpID0gZ3NwY2FfZGV2LT5mcl9vOworCWogPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldOworCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbal07CisJaWYgKGZyYW1lLT52NGwyX2J1Zi5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfRE9ORSkgeworCQlhdG9taWNfZGVjKCZnc3BjYV9kZXYtPm5ldmVudCk7CisJCWdvdG8gb2s7CisJfQorCWlmIChub25ibG9ja19pbmcpCQkJLyogbm8gZnJhbWUgeWV0ICovCisJCXJldHVybiAtRUFHQUlOOworCisJLyogd2FpdCB0aWxsIGEgZnJhbWUgaXMgcmVhZHkgKi8KKwlmb3IgKDs7KSB7CisJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGdzcGNhX2Rldi0+d3EsCisJCQkJCWF0b21pY19yZWFkKCZnc3BjYV9kZXYtPm5ldmVudCkgPiAwLAorCQkJCQltc2Vjc190b19qaWZmaWVzKDMwMDApKTsKKwkJaWYgKHJldCA8PSAwKSB7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OwkvKiBpbnRlcnJ1cHQgKi8KKwkJCXJldHVybiAtRUlPOwkJLyogdGltZW91dCAqLworCQl9CisJCWF0b21pY19kZWMoJmdzcGNhX2Rldi0+bmV2ZW50KTsKKwkJaWYgKCFnc3BjYV9kZXYtPnN0cmVhbWluZyB8fCAhZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJcmV0dXJuIC1FSU87CisJCWkgPSBnc3BjYV9kZXYtPmZyX287CisJCWogPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldOworCQlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2pdOworCQlpZiAoZnJhbWUtPnY0bDJfYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19ET05FKQorCQkJYnJlYWs7CisJfQorb2s6CisJZ3NwY2FfZGV2LT5mcl9vID0gKGkgKyAxKSAlIGdzcGNhX2Rldi0+bmZyYW1lczsKKwlQREVCVUcoRF9GUkFNLCAiZnJhbWUgd2FpdCBxOiVkIGk6JWQgbzolZCIsCisJCWdzcGNhX2Rldi0+ZnJfcSwKKwkJZ3NwY2FfZGV2LT5mcl9pLAorCQlnc3BjYV9kZXYtPmZyX28pOworCisJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2spIHsKKwkJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCWdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2soZ3NwY2FfZGV2KTsKKwkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwl9CisJcmV0dXJuIGo7Cit9CisKKy8qCisgKiBkZXF1ZXVlIGEgdmlkZW8gYnVmZmVyCisgKgorICogSWYgbm9uYmxvY2tfaW5nIGlzIGZhbHNlLCBibG9jayB1bnRpbCBhIGJ1ZmZlciBpcyBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJc3RydWN0IHY0bDJfYnVmZmVyICp2NGwyX2J1ZikKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OworCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisJaW50IGksIHJldDsKKworCVBERUJVRyhEX0ZSQU0sICJkcWJ1ZiIpOworCWlmICh2NGwyX2J1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2NGwyX2J1Zi0+bWVtb3J5ICE9IGdzcGNhX2Rldi0+bWVtb3J5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGlmIG5vdCBzdHJlYW1pbmcsIGJlIHN1cmUgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbm90IGxvb3AgZm9yZXZlciAqLworCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCSAgICAmJiAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcgJiYgZ3NwY2FfZGV2LT51c2VycyA9PSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG9ubHkgdGhlIGNhcHR1cmluZyBmaWxlIG1heSBkZXF1ZXVlICovCisJaWYgKGdzcGNhX2Rldi0+Y2FwdF9maWxlICE9IGZpbGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogb25seSBvbmUgZGVxdWV1ZSAvIHJlYWQgYXQgYSB0aW1lICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT5yZWFkX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJcmV0ID0gZnJhbWVfd2FpdChnc3BjYV9kZXYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJaSA9IHJldDsJCQkJLyogZnJhbWUgaW5kZXggKi8KKwlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2ldOworCWlmIChnc3BjYV9kZXYtPm1lbW9yeSA9PSBWNEwyX01FTU9SWV9VU0VSUFRSKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoKF9fdTggKikgZnJhbWUtPnY0bDJfYnVmLm0udXNlcnB0ciwKKwkJCQkgZnJhbWUtPmRhdGEsCisJCQkJIGZyYW1lLT52NGwyX2J1Zi5ieXRlc3VzZWQpKSB7CisJCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sCisJCQkJImRxYnVmIGNwIHRvIHVzZXIgZmFpbGVkIik7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJZnJhbWUtPnY0bDJfYnVmLmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX0RPTkU7CisJbWVtY3B5KHY0bDJfYnVmLCAmZnJhbWUtPnY0bDJfYnVmLCBzaXplb2YgKnY0bDJfYnVmKTsKKwlQREVCVUcoRF9GUkFNLCAiZHFidWYgJWQiLCBpKTsKKwlyZXQgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT5yZWFkX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBxdWV1ZSBhIHZpZGVvIGJ1ZmZlcgorICoKKyAqIEF0dGVtcHRpbmcgdG8gcXVldWUgYSBidWZmZXIgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCisgKiBxdWV1ZWQgd2lsbCByZXR1cm4gLUVJTlZBTC4KKyAqLworc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX2J1ZmZlciAqdjRsMl9idWYpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBpLCBpbmRleCwgcmV0OworCisJUERFQlVHKERfRlJBTSwgInFidWYgJWQiLCB2NGwyX2J1Zi0+aW5kZXgpOworCWlmICh2NGwyX2J1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWluZGV4ID0gdjRsMl9idWYtPmluZGV4OworCWlmICgodW5zaWduZWQpIGluZGV4ID49IGdzcGNhX2Rldi0+bmZyYW1lcykgeworCQlQREVCVUcoRF9GUkFNLAorCQkJInFidWYgaWR4ICVkID49ICVkIiwgaW5kZXgsIGdzcGNhX2Rldi0+bmZyYW1lcyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAodjRsMl9idWYtPm1lbW9yeSAhPSBnc3BjYV9kZXYtPm1lbW9yeSkgeworCQlQREVCVUcoRF9GUkFNLCAicWJ1ZiBiYWQgbWVtb3J5IHR5cGUiKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZnJhbWUgPSAmZ3NwY2FfZGV2LT5mcmFtZVtpbmRleF07CisJaWYgKGZyYW1lLT52NGwyX2J1Zi5mbGFncyAmIEJVRl9BTExfRkxBR1MpIHsKKwkJUERFQlVHKERfRlJBTSwgInFidWYgYmFkIHN0YXRlIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWZyYW1lLT52NGwyX2J1Zi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKKy8qCWZyYW1lLT52NGwyX2J1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19ET05FOyAqLworCisJaWYgKGZyYW1lLT52NGwyX2J1Zi5tZW1vcnkgPT0gVjRMMl9NRU1PUllfVVNFUlBUUikgeworCQlmcmFtZS0+djRsMl9idWYubS51c2VycHRyID0gdjRsMl9idWYtPm0udXNlcnB0cjsKKwkJZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCA9IHY0bDJfYnVmLT5sZW5ndGg7CisJfQorCisJLyogcHV0IHRoZSBidWZmZXIgaW4gdGhlICdxdWV1ZWQnIHF1ZXVlICovCisJaSA9IGdzcGNhX2Rldi0+ZnJfcTsKKwlnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldID0gaW5kZXg7CisJZ3NwY2FfZGV2LT5mcl9xID0gKGkgKyAxKSAlIGdzcGNhX2Rldi0+bmZyYW1lczsKKwlQREVCVUcoRF9GUkFNLCAicWJ1ZiBxOiVkIGk6JWQgbzolZCIsCisJCWdzcGNhX2Rldi0+ZnJfcSwKKwkJZ3NwY2FfZGV2LT5mcl9pLAorCQlnc3BjYV9kZXYtPmZyX28pOworCisJdjRsMl9idWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCXY0bDJfYnVmLT5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19ET05FOworCXJldCA9IDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSB0aGUgcmVzb3VyY2VzIGZvciByZWFkKCkKKyAqLworc3RhdGljIGludCByZWFkX2FsbG9jKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2NGwyX2J1ZmZlciB2NGwyX2J1ZjsKKwlpbnQgaSwgcmV0OworCisJUERFQlVHKERfU1RSRUFNLCAicmVhZCBhbGxvYyIpOworCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgPT0gMCkgeworCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyByYjsKKworCQltZW1zZXQoJnJiLCAwLCBzaXplb2YgcmIpOworCQlyYi5jb3VudCA9IGdzcGNhX2Rldi0+bmJ1ZnJlYWQ7CisJCXJiLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXJiLm1lbW9yeSA9IEdTUENBX01FTU9SWV9SRUFEOworCQlyZXQgPSB2aWRpb2NfcmVxYnVmcyhmaWxlLCBnc3BjYV9kZXYsICZyYik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJUERFQlVHKERfU1RSRUFNLCAicmVhZCByZXFidWYgZXJyICVkIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJbWVtc2V0KCZ2NGwyX2J1ZiwgMCwgc2l6ZW9mIHY0bDJfYnVmKTsKKwkJdjRsMl9idWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJdjRsMl9idWYubWVtb3J5ID0gR1NQQ0FfTUVNT1JZX1JFQUQ7CisJCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPm5idWZyZWFkOyBpKyspIHsKKwkJCXY0bDJfYnVmLmluZGV4ID0gaTsKKwkJCXJldCA9IHZpZGlvY19xYnVmKGZpbGUsIGdzcGNhX2RldiwgJnY0bDJfYnVmKTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCVBERUJVRyhEX1NUUkVBTSwgInJlYWQgcWJ1ZiBlcnI6ICVkIiwgcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJCWdzcGNhX2Rldi0+bWVtb3J5ID0gR1NQQ0FfTUVNT1JZX1JFQUQ7CisJfQorCisJLyogc3RhcnQgc3RyZWFtaW5nICovCisJcmV0ID0gdmlkaW9jX3N0cmVhbW9uKGZpbGUsIGdzcGNhX2RldiwgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKTsKKwlpZiAocmV0ICE9IDApCisJCVBERUJVRyhEX1NUUkVBTSwgInJlYWQgc3RyZWFtb24gZXJyICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGRldl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgcmV0OworCisJUERFQlVHKERfRlJBTSwgInBvbGwiKTsKKworCXBvbGxfd2FpdChmaWxlLCAmZ3NwY2FfZGV2LT53cSwgd2FpdCk7CisJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCXJldHVybiBQT0xMRVJSOworCisJLyogaWYgcmVxYnVmcyBpcyBub3QgZG9uZSwgdGhlIHVzZXIgd291bGQgdXNlIHJlYWQoKSAqLworCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgPT0gMCkgeworCQlpZiAoZ3NwY2FfZGV2LT5tZW1vcnkgIT0gR1NQQ0FfTUVNT1JZX05PKQorCQkJcmV0dXJuIFBPTExFUlI7CQkvKiBub3QgdGhlIDFzdCB0aW1lICovCisJCXJldCA9IHJlYWRfYWxsb2MoZ3NwY2FfZGV2LCBmaWxlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKSAhPSAwKQorCQlyZXR1cm4gUE9MTEVSUjsKKwlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkgeworCQlyZXQgPSBQT0xMRVJSOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBjaGVjayB0aGUgbmV4dCBpbmNvbWluZyBidWZmZXIgKi8KKwlpID0gZ3NwY2FfZGV2LT5mcl9vOworCWkgPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldOworCWlmIChnc3BjYV9kZXYtPmZyYW1lW2ldLnY0bDJfYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19ET05FKQorCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwkvKiBzb21ldGhpbmcgdG8gcmVhZCAqLworCWVsc2UKKwkJcmV0ID0gMDsKK291dDoKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLAorCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisJc3RydWN0IHY0bDJfYnVmZmVyIHY0bDJfYnVmOworCXN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKKwlpbnQgbiwgcmV0LCByZXQyOworCisJUERFQlVHKERfRlJBTSwgInJlYWQgKCV6ZCkiLCBjb3VudCk7CisJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCXJldHVybiAtRU5PREVWOworCXN3aXRjaCAoZ3NwY2FfZGV2LT5tZW1vcnkpIHsKKwljYXNlIEdTUENBX01FTU9SWV9OTzoJCQkvKiBmaXJzdCB0aW1lICovCisJCXJldCA9IHJlYWRfYWxsb2MoZ3NwY2FfZGV2LCBmaWxlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisJY2FzZSBHU1BDQV9NRU1PUllfUkVBRDoKKwkJaWYgKGdzcGNhX2Rldi0+Y2FwdF9maWxlID09IGZpbGUpCisJCQlicmVhazsKKwkJLyogZmFsbCB0aHJ1ICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogZ2V0IGEgZnJhbWUgKi8KKwlqaWZmaWVzX3RvX3RpbWV2YWwoZ2V0X2ppZmZpZXNfNjQoKSwgJnRpbWVzdGFtcCk7CisJdGltZXN0YW1wLnR2X3NlYy0tOworCW4gPSAyOworCWZvciAoOzspIHsKKwkJbWVtc2V0KCZ2NGwyX2J1ZiwgMCwgc2l6ZW9mIHY0bDJfYnVmKTsKKwkJdjRsMl9idWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJdjRsMl9idWYubWVtb3J5ID0gR1NQQ0FfTUVNT1JZX1JFQUQ7CisJCXJldCA9IHZpZGlvY19kcWJ1ZihmaWxlLCBnc3BjYV9kZXYsICZ2NGwyX2J1Zik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJUERFQlVHKERfU1RSRUFNLCAicmVhZCBkcWJ1ZiBlcnIgJWQiLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCS8qIGlmIHRoZSBwcm9jZXNzIHNsZXB0IGZvciBtb3JlIHRoYW4gMSBzZWNvbmQsCisJCSAqIGdldCBhbmV3ZXIgZnJhbWUgKi8KKwkJZnJhbWUgPSAmZ3NwY2FfZGV2LT5mcmFtZVt2NGwyX2J1Zi5pbmRleF07CisJCWlmICgtLW4gPCAwKQorCQkJYnJlYWs7CQkJLyogYXZvaWQgaW5maW5pdGUgbG9vcCAqLworCQlpZiAoZnJhbWUtPnY0bDJfYnVmLnRpbWVzdGFtcC50dl9zZWMgPj0gdGltZXN0YW1wLnR2X3NlYykKKwkJCWJyZWFrOworCQlyZXQgPSB2aWRpb2NfcWJ1ZihmaWxlLCBnc3BjYV9kZXYsICZ2NGwyX2J1Zik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJUERFQlVHKERfU1RSRUFNLCAicmVhZCBxYnVmIGVyciAlZCIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogY29weSB0aGUgZnJhbWUgKi8KKwlpZiAoY291bnQgPiBmcmFtZS0+djRsMl9idWYuYnl0ZXN1c2VkKQorCQljb3VudCA9IGZyYW1lLT52NGwyX2J1Zi5ieXRlc3VzZWQ7CisJcmV0ID0gY29weV90b191c2VyKGRhdGEsIGZyYW1lLT5kYXRhLCBjb3VudCk7CisJaWYgKHJldCAhPSAwKSB7CisJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwKKwkJCSJyZWFkIGNwIHRvIHVzZXIgbGFjayAlZCAvICV6ZCIsIHJldCwgY291bnQpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gY291bnQ7CitvdXQ6CisJLyogaW4gZWFjaCBjYXNlLCByZXF1ZXVlIHRoZSBidWZmZXIgKi8KKwlyZXQyID0gdmlkaW9jX3FidWYoZmlsZSwgZ3NwY2FfZGV2LCAmdjRsMl9idWYpOworCWlmIChyZXQyICE9IDApCisJCXJldHVybiByZXQyOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRldl9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCkKK3sKKwkvKiBub3RoaW5nICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZGV2X29wZW4sCisJLnJlbGVhc2UgPSBkZXZfY2xvc2UsCisJLnJlYWQgPSBkZXZfcmVhZCwKKwkubW1hcCA9IGRldl9tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IHY0bF9jb21wYXRfaW9jdGwzMiwKKyNlbmRpZgorCS5sbHNlZWsgPSBub19sbHNlZWssCisJLnBvbGwJPSBkZXZfcG9sbCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGdzcGNhX3RlbXBsYXRlID0geworCS5uYW1lID0gImdzcGNhIG1haW4gZHJpdmVyIiwKKwkudHlwZSA9IFZJRF9UWVBFX0NBUFRVUkUsCisJLmZvcHMgPSAmZGV2X2ZvcHMsCisJLnJlbGVhc2UgPSBkZXZfcmVsZWFzZSwJCS8qIG1hbmRhdG9yeSAqLworCS5taW5vciA9IC0xLAorCS52aWRpb2NfcXVlcnljYXAJPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19kcWJ1ZgkJPSB2aWRpb2NfZHFidWYsCisJLnZpZGlvY19xYnVmCQk9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCT0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAJPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3N0cmVhbW9uCT0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2NfcXVlcnljdHJsCT0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybAkJPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsCQk9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19xdWVyeW1lbnUJPSB2aWRpb2NfcXVlcnltZW51LAorCS52aWRpb2NfZW51bV9pbnB1dAk9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dAkJPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCT0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19yZXFidWZzCQk9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19zdHJlYW1vZmYJPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfZ19qcGVnY29tcAk9IHZpZGlvY19nX2pwZWdjb21wLAorCS52aWRpb2Nfc19qcGVnY29tcAk9IHZpZGlvY19zX2pwZWdjb21wLAorCS52aWRpb2NfZ19wYXJtCQk9IHZpZGlvY19nX3Bhcm0sCisJLnZpZGlvY19zX3Bhcm0JCT0gdmlkaW9jX3NfcGFybSwKKwkudmlkaW9jX3Nfc3RkCQk9IHZpZGlvY19zX3N0ZCwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorfTsKKworLyoKKyAqIHByb2JlIGFuZCBjcmVhdGUgYSBuZXcgZ3NwY2EgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgc3ViLWRyaXZlciB3aGVuIGl0IGlzCisgKiBjYWxsZWQgZm9yIHByb2JpbmcgYSBuZXcgZGV2aWNlLgorICovCitpbnQgZ3NwY2FfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCWNvbnN0IHN0cnVjdCBzZF9kZXNjICpzZF9kZXNjLAorCQlpbnQgZGV2X3NpemUsCisJCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppbnRlcmZhY2U7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWludCByZXQ7CisKKwlQREVCVUcoRF9QUk9CRSwgInByb2JpbmcgJTA0eDolMDR4IiwgaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKKworCS8qIHdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCWludGVyZmFjZSA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKwlpZiAoaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyID4gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBjcmVhdGUgdGhlIGRldmljZSAqLworCWlmIChkZXZfc2l6ZSA8IHNpemVvZiAqZ3NwY2FfZGV2KQorCQlkZXZfc2l6ZSA9IHNpemVvZiAqZ3NwY2FfZGV2OworCWdzcGNhX2RldiA9IGt6YWxsb2MoZGV2X3NpemUsIEdGUF9LRVJORUwpOworCWlmIChnc3BjYV9kZXYgPT0gTlVMTCkgeworCQllcnIoImNvdWxkbid0IGt6YWxsb2MgZ3NwY2Egc3RydWN0Iik7CisJCXJldHVybiAtRUlPOworCX0KKwlnc3BjYV9kZXYtPmRldiA9IGRldjsKKwlnc3BjYV9kZXYtPmlmYWNlID0gaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyOworCWdzcGNhX2Rldi0+bmJhbHQgPSBpbnRmLT5udW1fYWx0c2V0dGluZzsKKwlnc3BjYV9kZXYtPnNkX2Rlc2MgPSBzZF9kZXNjOworLyoJZ3NwY2FfZGV2LT51c2VycyA9IDA7CQkJKGRvbmUgYnkga3phbGxvYykgKi8KKwlnc3BjYV9kZXYtPm5idWZyZWFkID0gMjsKKworCS8qIGNvbmZpZ3VyZSB0aGUgc3ViZHJpdmVyICovCisJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5jb25maWcoZ3NwY2FfZGV2LCBpZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXJldCA9IGdzcGNhX3NldF9hbHQwKGdzcGNhX2Rldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCWdzcGNhX3NldF9kZWZhdWx0X21vZGUoZ3NwY2FfZGV2KTsKKworCW11dGV4X2luaXQoJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCW11dGV4X2luaXQoJmdzcGNhX2Rldi0+cmVhZF9sb2NrKTsKKwltdXRleF9pbml0KCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdzcGNhX2Rldi0+d3EpOworCisJLyogaW5pdCB2aWRlbyBzdHVmZiAqLworCW1lbWNweSgmZ3NwY2FfZGV2LT52ZGV2LCAmZ3NwY2FfdGVtcGxhdGUsIHNpemVvZiBnc3BjYV90ZW1wbGF0ZSk7CisJZ3NwY2FfZGV2LT52ZGV2LmRldiA9ICZkZXYtPmRldjsKKwltZW1jcHkoJmdzcGNhX2Rldi0+Zm9wcywgJmRldl9mb3BzLCBzaXplb2YgZ3NwY2FfZGV2LT5mb3BzKTsKKwlnc3BjYV9kZXYtPnZkZXYuZm9wcyA9ICZnc3BjYV9kZXYtPmZvcHM7CisJZ3NwY2FfZGV2LT5mb3BzLm93bmVyID0gbW9kdWxlOwkJLyogbW9kdWxlIHByb3RlY3Rpb24gKi8KKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmdzcGNhX2Rldi0+dmRldiwKKwkJCQkgIFZGTF9UWVBFX0dSQUJCRVIsCisJCQkJICB2aWRlb19ucik7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZXJyICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZ3NwY2FfZGV2LT5wcmVzZW50ID0gMTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGdzcGNhX2Rldik7CisJUERFQlVHKERfUFJPQkUsICJwcm9iZSBvayIpOworCXJldHVybiAwOworb3V0OgorCWtmcmVlKGdzcGNhX2Rldik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZ3NwY2FfZGV2X3Byb2JlKTsKKworLyoKKyAqIFVTQiBkaXNjb25uZWN0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgc3ViLWRyaXZlcgorICogd2hlbiB0aGUgZGV2aWNlIGRpc2Nvbm5lY3RzLCBhZnRlciB0aGUgc3BlY2lmaWMgcmVzb3VyY2VzIGFyZSBmcmVlZC4KKyAqLwordm9pZCBnc3BjYV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAoIWdzcGNhX2RldikKKwkJcmV0dXJuOworCWdzcGNhX2Rldi0+cHJlc2VudCA9IDA7CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDA7CisJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CisJd2hpbGUgKGdzcGNhX2Rldi0+dXNlcnMgIT0gMCkgewkJLyogd2FpdCB1bnRpbCBmdWxseSBjbG9zZWQgKi8KKwkJYXRvbWljX2luYygmZ3NwY2FfZGV2LT5uZXZlbnQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+d3EpOwkvKiB3YWtlIHByb2Nlc3NlcyAqLworCQlzY2hlZHVsZSgpOworCX0KKy8qIFdlIGRvbid0IHdhbnQgcGVvcGxlIHRyeWluZyB0byBvcGVuIHVwIHRoZSBkZXZpY2UgKi8KKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZ3NwY2FfZGV2LT52ZGV2KTsKKy8qIEZyZWUgdGhlIG1lbW9yeSAqLworCWtmcmVlKGdzcGNhX2Rldik7CisJUERFQlVHKERfUFJPQkUsICJkaXNjb25uZWN0IGNvbXBsZXRlIik7Cit9CitFWFBPUlRfU1lNQk9MKGdzcGNhX2Rpc2Nvbm5lY3QpOworCisvKiAtLSBjYW0gZHJpdmVyIHV0aWxpdHkgZnVuY3Rpb25zIC0tICovCisKKy8qIGF1dG8gZ2FpbiBhbmQgZXhwb3N1cmUgYWxnb3JpdGhtIGJhc2VkIG9uIHRoZSBrbmVlIGFsZ29yaXRobSBkZXNjcmliZWQgaGVyZToKKyAgIGh0dHA6Ly95dHNlLnRyaWNvbG91ci5uZXQvZG9jcy9Mb3dMaWdodE9wdGltaXphdGlvbi5odG1sCisKKyAgIFJldHVybnMgMCBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZSwgMSBpZiB0aGUgZ2FpbiBhbmQgb3IgZXhwb3N1cmUgc2V0dGluZ3MKKyAgIHdoZXJlIGNoYW5nZWQuICovCitpbnQgZ3NwY2FfYXV0b19nYWluX25fZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgYXZnX2x1bSwKKwlpbnQgZGVzaXJlZF9hdmdfbHVtLCBpbnQgZGVhZHpvbmUsIGludCBnYWluX2tuZWUsIGludCBleHBvc3VyZV9rbmVlKQoreworCWludCBpLCBzdGVwcywgZ2Fpbiwgb3JpZ19nYWluLCBleHBvc3VyZSwgb3JpZ19leHBvc3VyZSwgYXV0b2dhaW47CisJY29uc3Qgc3RydWN0IGN0cmwgKmdhaW5fY3RybCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGN0cmwgKmV4cG9zdXJlX2N0cmwgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBjdHJsICphdXRvZ2Fpbl9jdHJsID0gTlVMTDsKKwlpbnQgcmV0dmFsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5jdHJsczsgaSsrKSB7CisJCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldLnFjdHJsLmlkID09IFY0TDJfQ0lEX0dBSU4pCisJCQlnYWluX2N0cmwgPSAmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXTsKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfRVhQT1NVUkUpCisJCQlleHBvc3VyZV9jdHJsID0gJmdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV07CisJCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldLnFjdHJsLmlkID09IFY0TDJfQ0lEX0FVVE9HQUlOKQorCQkJYXV0b2dhaW5fY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOworCX0KKwlpZiAoIWdhaW5fY3RybCB8fCAhZXhwb3N1cmVfY3RybCB8fCAhYXV0b2dhaW5fY3RybCkgeworCQlQREVCVUcoRF9FUlIsICJFcnJvcjogZ3NwY2FfYXV0b19nYWluX25fZXhwb3N1cmUgY2FsbGVkICIKKwkJCSJvbiBjYW0gd2l0aG91dCAoYXV0bylnYWluL2V4cG9zdXJlIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChnYWluX2N0cmwtPmdldChnc3BjYV9kZXYsICZnYWluKSB8fAorCQkJZXhwb3N1cmVfY3RybC0+Z2V0KGdzcGNhX2RldiwgJmV4cG9zdXJlKSB8fAorCQkJYXV0b2dhaW5fY3RybC0+Z2V0KGdzcGNhX2RldiwgJmF1dG9nYWluKSB8fCAhYXV0b2dhaW4pCisJCXJldHVybiAwOworCisJb3JpZ19nYWluID0gZ2FpbjsKKwlvcmlnX2V4cG9zdXJlID0gZXhwb3N1cmU7CisKKwkvKiBJZiB3ZSBhcmUgb2YgYSBtdWx0aXBsZSBvZiBkZWFkem9uZSwgZG8gbXVsdGlwbGUgc3RlcHMgdG8gcmVhY2ggdGhlCisJICAgZGVzaXJlZCBsdW1pbmF0aW9uIGZhc3QgKHdpdGggdGhlIHJpc2Mgb2YgYSBzbGlnaHQgb3ZlcnNob290KSAqLworCXN0ZXBzID0gYWJzKGRlc2lyZWRfYXZnX2x1bSAtIGF2Z19sdW0pIC8gZGVhZHpvbmU7CisKKwlQREVCVUcoRF9GUkFNLCAiYXV0b2dhaW46IGx1bTogJWQsIGRlc2lyZWQ6ICVkLCBzdGVwczogJWRcbiIsCisJCWF2Z19sdW0sIGRlc2lyZWRfYXZnX2x1bSwgc3RlcHMpOworCisJZm9yIChpID0gMDsgaSA8IHN0ZXBzOyBpKyspIHsKKwkJaWYgKGF2Z19sdW0gPiBkZXNpcmVkX2F2Z19sdW0pIHsKKwkJCWlmIChnYWluID4gZ2Fpbl9rbmVlKQorCQkJCWdhaW4tLTsKKwkJCWVsc2UgaWYgKGV4cG9zdXJlID4gZXhwb3N1cmVfa25lZSkKKwkJCQlleHBvc3VyZS0tOworCQkJZWxzZSBpZiAoZ2FpbiA+IGdhaW5fY3RybC0+cWN0cmwuZGVmYXVsdF92YWx1ZSkKKwkJCQlnYWluLS07CisJCQllbHNlIGlmIChleHBvc3VyZSA+IGV4cG9zdXJlX2N0cmwtPnFjdHJsLm1pbmltdW0pCisJCQkJZXhwb3N1cmUtLTsKKwkJCWVsc2UgaWYgKGdhaW4gPiBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW0pCisJCQkJZ2Fpbi0tOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKGdhaW4gPCBnYWluX2N0cmwtPnFjdHJsLmRlZmF1bHRfdmFsdWUpCisJCQkJZ2FpbisrOworCQkJZWxzZSBpZiAoZXhwb3N1cmUgPCBleHBvc3VyZV9rbmVlKQorCQkJCWV4cG9zdXJlKys7CisJCQllbHNlIGlmIChnYWluIDwgZ2Fpbl9rbmVlKQorCQkJCWdhaW4rKzsKKwkJCWVsc2UgaWYgKGV4cG9zdXJlIDwgZXhwb3N1cmVfY3RybC0+cWN0cmwubWF4aW11bSkKKwkJCQlleHBvc3VyZSsrOworCQkJZWxzZSBpZiAoZ2FpbiA8IGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSkKKwkJCQlnYWluKys7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZ2FpbiAhPSBvcmlnX2dhaW4pIHsKKwkJZ2Fpbl9jdHJsLT5zZXQoZ3NwY2FfZGV2LCBnYWluKTsKKwkJcmV0dmFsID0gMTsKKwl9CisJaWYgKGV4cG9zdXJlICE9IG9yaWdfZXhwb3N1cmUpIHsKKwkJZXhwb3N1cmVfY3RybC0+c2V0KGdzcGNhX2RldiwgZXhwb3N1cmUpOworCQlyZXR2YWwgPSAxOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MKGdzcGNhX2F1dG9fZ2Fpbl9uX2V4cG9zdXJlKTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgZ3NwY2FfaW5pdCh2b2lkKQoreworCWluZm8oIm1haW4gdiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBnc3BjYV9leGl0KHZvaWQpCit7CisJaW5mbygibWFpbiBkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoZ3NwY2FfaW5pdCk7Cittb2R1bGVfZXhpdChnc3BjYV9leGl0KTsKKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZ3NwY2FfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAorCQkiRGVidWcgKGJpdCkgMHgwMTplcnJvciAweDAyOnByb2JlIDB4MDQ6Y29uZmlnIgorCQkiIDB4MDg6c3RyZWFtIDB4MTA6ZnJhbWUgMHgyMDpwYWNrZXQgMHg0MDpVU0JpbiAweDgwOlVTQm91dCIKKwkJIiAweDAxMDA6IHY0bDIiKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDJjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKQEAgLTAsMCArMSwxNzYgQEAKKyNpZm5kZWYgR1NQQ0FWMl9ICisjZGVmaW5lIEdTUENBVjJfSAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKy8qIEdTUENBIG91ciBkZWJ1ZyBtZXNzYWdlcyAqLworZXh0ZXJuIGludCBnc3BjYV9kZWJ1ZzsKKyNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7XAorCQlpZiAoZ3NwY2FfZGVidWcgJiAobGV2ZWwpKSBcCisJCQlwcmludGsoS0VSTl9JTkZPIE1PRFVMRV9OQU1FICI6ICIgZm10ICJcbiIsICMjIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRF9FUlIgIDB4MDEKKyNkZWZpbmUgRF9QUk9CRSAweDAyCisjZGVmaW5lIERfQ09ORiAweDA0CisjZGVmaW5lIERfU1RSRUFNIDB4MDgKKyNkZWZpbmUgRF9GUkFNIDB4MTAKKyNkZWZpbmUgRF9QQUNLIDB4MjAKKyNkZWZpbmUgRF9VU0JJIDB4NDAKKyNkZWZpbmUgRF9VU0JPIDB4ODAKKyNkZWZpbmUgRF9WNEwyIDB4MDEwMAorI2Vsc2UKKyNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pCisjZW5kaWYKKyN1bmRlZiBlcnIKKyNkZWZpbmUgZXJyKGZtdCwgYXJncy4uLikgXAorCWRvIHtcCisJCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisjdW5kZWYgaW5mbworI2RlZmluZSBpbmZvKGZtdCwgYXJncy4uLikgXAorCWRvIHtcCisJCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorI3VuZGVmIHdhcm4KKyNkZWZpbmUgd2FybihmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7XAorCQlwcmludGsoS0VSTl9XQVJOSU5HIE1PRFVMRV9OQU1FICI6ICIgZm10ICJcbiIsICMjIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBHU1BDQV9NQVhfRlJBTUVTIDE2CS8qIG1heGltdW0gbnVtYmVyIG9mIHZpZGVvIGZyYW1lIGJ1ZmZlcnMgKi8KKy8qIElTT0MgdHJhbnNmZXJzICovCisjZGVmaW5lIE1BWF9OVVJCUyAxNgkJLyogbWF4IG51bWJlciBvZiBVUkJzICovCisjZGVmaW5lIElTT19NQVhfUEtUIDMyCQkvKiBtYXggbnVtYmVyIG9mIHBhY2tldHMgaW4gYW4gSVNPQyB0cmFuc2ZlciAqLworI2RlZmluZSBJU09fTUFYX1NJWkUgMHg4MDAwCS8qIG1heCBzaXplIG9mIG9uZSBVUkIgYnVmZmVyICgzMiBLYikgKi8KKworLyogZGV2aWNlIGluZm9ybWF0aW9uIC0gc2V0IGF0IHByb2JlIHRpbWUgKi8KK3N0cnVjdCBjYW0geworCWNoYXIgKmRldl9uYW1lOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmNhbV9tb2RlOwkvKiBzaXplIG5tb2RlcyAqLworCWNoYXIgbm1vZGVzOworCV9fdTggZXBhZGRyOworfTsKKworc3RydWN0IGdzcGNhX2RldjsKK3N0cnVjdCBnc3BjYV9mcmFtZTsKKworLyogc3ViZHJpdmVyIG9wZXJhdGlvbnMgKi8KK3R5cGVkZWYgaW50ICgqY2FtX29wKSAoc3RydWN0IGdzcGNhX2RldiAqKTsKK3R5cGVkZWYgdm9pZCAoKmNhbV92X29wKSAoc3RydWN0IGdzcGNhX2RldiAqKTsKK3R5cGVkZWYgaW50ICgqY2FtX2NmX29wKSAoc3RydWN0IGdzcGNhX2RldiAqLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqKTsKK3R5cGVkZWYgaW50ICgqY2FtX2pwZ19vcCkgKHN0cnVjdCBnc3BjYV9kZXYgKiwKKwkJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKik7Cit0eXBlZGVmIGludCAoKmNhbV9xbW51X29wKSAoc3RydWN0IGdzcGNhX2RldiAqLAorCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICopOwordHlwZWRlZiB2b2lkICgqY2FtX3BrdF9vcCkgKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAorCQkJCV9fdTggKmRhdGEsCisJCQkJaW50IGxlbik7CisKK3N0cnVjdCBjdHJsIHsKKwlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWN0cmw7CisJaW50ICgqc2V0KShzdHJ1Y3QgZ3NwY2FfZGV2ICosIF9fczMyKTsKKwlpbnQgKCpnZXQpKHN0cnVjdCBnc3BjYV9kZXYgKiwgX19zMzIgKik7Cit9OworCisvKiBzdWJkcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0cnVjdCBzZF9kZXNjIHsKKy8qIGluZm9ybWF0aW9uICovCisJY29uc3QgY2hhciAqbmFtZTsJLyogc3ViLWRyaXZlciBuYW1lICovCisvKiBjb250cm9scyAqLworCWNvbnN0IHN0cnVjdCBjdHJsICpjdHJsczsKKwlpbnQgbmN0cmxzOworLyogb3BlcmF0aW9ucyAqLworCWNhbV9jZl9vcCBjb25maWc7CS8qIGNhbGxlZCBvbiBwcm9iZSAqLworCWNhbV9vcCBvcGVuOwkJLyogY2FsbGVkIG9uIG9wZW4gKi8KKwljYW1fdl9vcCBzdGFydDsJCS8qIGNhbGxlZCBvbiBzdHJlYW0gb24gKi8KKwljYW1fdl9vcCBzdG9wTjsJCS8qIGNhbGxlZCBvbiBzdHJlYW0gb2ZmIC0gbWFpbiBhbHQgKi8KKwljYW1fdl9vcCBzdG9wMDsJCS8qIGNhbGxlZCBvbiBzdHJlYW0gb2ZmIC0gYWx0IDAgKi8KKwljYW1fdl9vcCBjbG9zZTsJCS8qIGNhbGxlZCBvbiBjbG9zZSAqLworCWNhbV9wa3Rfb3AgcGt0X3NjYW47CisvKiBvcHRpb25hbCBvcGVyYXRpb25zICovCisJY2FtX3Zfb3AgZHFfY2FsbGJhY2s7CS8qIGNhbGxlZCB3aGVuIGEgZnJhbWUgaGFzIGJlZW4gZGVxdWV1ZWQgKi8KKwljYW1fanBnX29wIGdldF9qY29tcDsKKwljYW1fanBnX29wIHNldF9qY29tcDsKKwljYW1fcW1udV9vcCBxdWVyeW1lbnU7Cit9OworCisvKiBwYWNrZXQgdHlwZXMgd2hlbiBtb3ZpbmcgZnJvbSBpc28gYnVmIHRvIGZyYW1lIGJ1ZiAqLworI2RlZmluZSBESVNDQVJEX1BBQ0tFVAkwCisjZGVmaW5lIEZJUlNUX1BBQ0tFVAkxCisjZGVmaW5lIElOVEVSX1BBQ0tFVAkyCisjZGVmaW5lIExBU1RfUEFDS0VUCTMKKworc3RydWN0IGdzcGNhX2ZyYW1lIHsKKwlfX3U4ICpkYXRhOwkJCS8qIGZyYW1lIGJ1ZmZlciAqLworCV9fdTggKmRhdGFfZW5kOwkJCS8qIGVuZCBvZiBmcmFtZSB3aGlsZSBmaWxsaW5nICovCisJaW50IHZtYV91c2VfY291bnQ7CisJc3RydWN0IHY0bDJfYnVmZmVyIHY0bDJfYnVmOworfTsKKworc3RydWN0IGdzcGNhX2RldiB7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IGZpbGUgKmNhcHRfZmlsZTsJCS8qIGZpbGUgZG9pbmcgdmlkZW8gY2FwdHVyZSAqLworCisJc3RydWN0IGNhbSBjYW07CQkJCS8qIGRldmljZSBpbmZvcm1hdGlvbiAqLworCWNvbnN0IHN0cnVjdCBzZF9kZXNjICpzZF9kZXNjOwkJLyogc3ViZHJpdmVyIGRlc2NyaXB0aW9uICovCisKKwlfX3U4IHVzYl9idWZbOF07CQkJLyogYnVmZmVyIGZvciBVU0IgZXhjaGFuZ2VzICovCisJc3RydWN0IHVyYiAqdXJiW01BWF9OVVJCU107CisKKwlfX3U4ICpmcmJ1ZjsJCQkJLyogYnVmZmVyIGZvciBuZnJhbWVzICovCisJc3RydWN0IGdzcGNhX2ZyYW1lIGZyYW1lW0dTUENBX01BWF9GUkFNRVNdOworCV9fdTMyIGZyc3o7CQkJCS8qIGZyYW1lIHNpemUgKi8KKwljaGFyIG5mcmFtZXM7CQkJCS8qIG51bWJlciBvZiBmcmFtZXMgKi8KKwljaGFyIGZyX2k7CQkJCS8qIGZyYW1lIGJlaW5nIGZpbGxlZCAqLworCWNoYXIgZnJfcTsJCQkJLyogbmV4dCBmcmFtZSB0byBxdWV1ZSAqLworCWNoYXIgZnJfbzsJCQkJLyogbmV4dCBmcmFtZSB0byBkZXF1ZXVlICovCisJc2lnbmVkIGNoYXIgZnJfcXVldWVbR1NQQ0FfTUFYX0ZSQU1FU107CS8qIGZyYW1lIHF1ZXVlICovCisJY2hhciBsYXN0X3BhY2tldF90eXBlOworCisJX191OCBpZmFjZTsJCQkvKiBVU0IgaW50ZXJmYWNlIG51bWJlciAqLworCV9fdTggYWx0OwkJCS8qIFVTQiBhbHRlcm5hdGUgc2V0dGluZyAqLworCV9fdTggY3Vycl9tb2RlOwkJCS8qIGN1cnJlbnQgY2FtZXJhIG1vZGUgKi8KKwlfX3UzMiBwaXhmbXQ7CQkJLyogY3VycmVudCBtb2RlIHBhcmFtZXRlcnMgKi8KKwlfX3UxNiB3aWR0aDsKKwlfX3UxNiBoZWlnaHQ7CisKKwlhdG9taWNfdCBuZXZlbnQ7CQkvKiBudW1iZXIgb2YgZnJhbWVzIGRvbmUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsJCS8qIHdhaXQgcXVldWUgKi8KKwlzdHJ1Y3QgbXV0ZXggdXNiX2xvY2s7CQkvKiB1c2IgZXhjaGFuZ2UgcHJvdGVjdGlvbiAqLworCXN0cnVjdCBtdXRleCByZWFkX2xvY2s7CQkvKiByZWFkIHByb3RlY3Rpb24gKi8KKwlzdHJ1Y3QgbXV0ZXggcXVldWVfbG9jazsJLyogSVNPQyBxdWV1ZSBwcm90ZWN0aW9uICovCisJX191MzIgc2VxdWVuY2U7CQkJLyogZnJhbWUgc2VxdWVuY2UgbnVtYmVyICovCisJY2hhciBzdHJlYW1pbmc7CisJY2hhciB1c2VyczsJCQkvKiBudW1iZXIgb2Ygb3BlbnMgKi8KKwljaGFyIHByZXNlbnQ7CQkJLyogZGV2aWNlIGNvbm5lY3RlZCAqLworCWNoYXIgbmJ1ZnJlYWQ7CQkJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgZm9yIHJlYWQoKSAqLworCWNoYXIgbnVyYnM7CQkJLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBVUkJzICovCisJY2hhciBtZW1vcnk7CQkJLyogbWVtb3J5IHR5cGUgKFY0TDJfTUVNT1JZX3h4eCkgKi8KKwlfX3U4IG5iYWx0OwkJCS8qIG51bWJlciBvZiBVU0IgYWx0ZXJuYXRlIHNldHRpbmdzICovCit9OworCitpbnQgZ3NwY2FfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCWNvbnN0IHN0cnVjdCBzZF9kZXNjICpzZF9kZXNjLAorCQlpbnQgZGV2X3NpemUsCisJCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7Cit2b2lkIGdzcGNhX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RydWN0IGdzcGNhX2ZyYW1lICpnc3BjYV9mcmFtZV9hZGQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCSAgICBpbnQgcGFja2V0X3R5cGUsCisJCQkJICAgIHN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCisJCQkJICAgIGNvbnN0IF9fdTggKmRhdGEsCisJCQkJICAgIGludCBsZW4pOworaW50IGdzcGNhX2F1dG9fZ2Fpbl9uX2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgaW50IGF2Z19sdW0sCisJaW50IGRlc2lyZWRfYXZnX2x1bSwgaW50IGRlYWR6b25lLCBpbnQgZ2Fpbl9rbmVlLCBpbnQgZXhwb3N1cmVfa25lZSk7CisjZW5kaWYgLyogR1NQQ0FWMl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvanBlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MjNiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaApAQCAtMCwwICsxLDMwMSBAQAorI2lmbmRlZiBKUEVHX0gKKyNkZWZpbmUgSlBFR19IIDEKKy8qCisgKiBJbnNlcnQgYSBKUEVHIGhlYWRlciBhdCBzdGFydCBvZiBmcmFtZQorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGdzcGNhIHN1YmRyaXZlcnMuCisgKiBBIHNwZWNpYWwgY2FzZSBpcyBkb25lIGZvciBDb25leGFudCB3ZWJjYW1zLgorICoKKyAqIENvcHlyaWdodCAoQykgSmVhbi1GcmFuY29pcyBNb2luZSAoaHR0cDovL21vaW5lamYuZnJlZS5mcikKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisvKiBzdGFydCBvZiBqcGVnIGZyYW1lICsgcXVhbnRpemF0aW9uIHRhYmxlICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxdWFudFtdWzB4ODhdID0geworLyogaW5kZXggMCAtIFE0MCovCisgICAgeworCTB4ZmYsIDB4ZDgsCQkJLyoganBlZyAqLworCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KKzAsCQkJCQkvKiBxdWFudGl6YXRpb24gdGFibGUgcGFydCAxICovCisgICAgIDIwLCAxNCwgMTUsIDE4LCAxNSwgMTMsIDIwLCAxOCwgMTYsIDE4LCAyMywgMjEsIDIwLCAyNCwgMzAsIDUwLAorICAgICAzMywgMzAsIDI4LCAyOCwgMzAsIDYxLCA0NCwgNDYsIDM2LCA1MCwgNzMsIDY0LCA3NiwgNzUsIDcxLCA2NCwKKyAgICAgNzAsIDY5LCA4MCwgOTAsIDExNSwgOTgsIDgwLCA4NSwgMTA5LCA4NiwgNjksIDcwLCAxMDAsIDEzNiwgMTAxLAorICAgICAxMDksCisgICAgIDExOSwgMTIzLCAxMjksIDEzMCwgMTI5LCA3OCwgOTYsIDE0MSwgMTUxLCAxNDAsIDEyNSwgMTUwLCAxMTUsCisgICAgIDEyNiwgMTI5LCAxMjQsCisxLAkJCQkJLyogcXVhbnRpemF0aW9uIHRhYmxlIHBhcnQgMiAqLworICAgICAyMSwgMjMsIDIzLCAzMCwgMjYsIDMwLCA1OSwgMzMsIDMzLCA1OSwgMTI0LCA4MywgNzAsIDgzLCAxMjQsIDEyNCwKKyAgICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LAorICAgICAxMjQsIDEyNCwgMTI0LAorICAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsCisgICAgIDEyNCwgMTI0LCAxMjQsCisgICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwKKyAgICAgMTI0LCAxMjQsIDEyNH0sCisvKiBpbmRleCAxIC0gUTUwICovCisgICAgeworCTB4ZmYsIDB4ZDgsCisJMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLworMCwKKyAgICAgMTYsIDExLCAxMiwgMTQsIDEyLCAxMCwgMTYsIDE0LCAxMywgMTQsIDE4LCAxNywgMTYsIDE5LCAyNCwgNDAsCisgICAgIDI2LCAyNCwgMjIsIDIyLCAyNCwgNDksIDM1LCAzNywgMjksIDQwLCA1OCwgNTEsIDYxLCA2MCwgNTcsIDUxLAorICAgICA1NiwgNTUsIDY0LCA3MiwgOTIsIDc4LCA2NCwgNjgsIDg3LCA2OSwgNTUsIDU2LCA4MCwgMTA5LCA4MSwgODcsCisgICAgIDk1LCA5OCwgMTAzLCAxMDQsIDEwMywgNjIsIDc3LCAxMTMsIDEyMSwgMTEyLCAxMDAsIDEyMCwgOTIsIDEwMSwKKyAgICAgMTAzLCA5OSwKKzEsCisgICAgMTcsIDE4LCAxOCwgMjQsIDIxLCAyNCwgNDcsIDI2LCAyNiwgNDcsIDk5LCA2NiwgNTYsIDY2LCA5OSwgOTksCisgICAgIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LAorICAgICA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwKKyAgICAgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTl9LAorLyogaW5kZXggMiBRNjAgKi8KKyAgICB7CisJMHhmZiwgMHhkOCwKKwkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCiswLAorICAgICAxMywgOSwgMTAsIDExLCAxMCwgOCwgMTMsIDExLCAxMCwgMTEsIDE0LCAxNCwgMTMsIDE1LCAxOSwgMzIsCisgICAgIDIxLCAxOSwgMTgsIDE4LCAxOSwgMzksIDI4LCAzMCwgMjMsIDMyLCA0NiwgNDEsIDQ5LCA0OCwgNDYsIDQxLAorICAgICA0NSwgNDQsIDUxLCA1OCwgNzQsIDYyLCA1MSwgNTQsIDcwLCA1NSwgNDQsIDQ1LCA2NCwgODcsIDY1LCA3MCwKKyAgICAgNzYsIDc4LCA4MiwgODMsIDgyLCA1MCwgNjIsIDkwLCA5NywgOTAsIDgwLCA5NiwgNzQsIDgxLCA4MiwgNzksCisxLAorICAgICAxNCwgMTQsIDE0LCAxOSwgMTcsIDE5LCAzOCwgMjEsIDIxLCAzOCwgNzksIDUzLCA0NSwgNTMsIDc5LCA3OSwKKyAgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksCisgICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LAorICAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OX0sCisvKiBpbmRleCAzIC0gUTcwICovCisgICAgeworCTB4ZmYsIDB4ZDgsCisJMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLworMCwKKyAgICAgMTAsIDcsIDcsIDgsIDcsIDYsIDEwLCA4LCA4LCA4LCAxMSwgMTAsIDEwLCAxMSwgMTQsIDI0LAorICAgICAxNiwgMTQsIDEzLCAxMywgMTQsIDI5LCAyMSwgMjIsIDE3LCAyNCwgMzUsIDMxLCAzNywgMzYsIDM0LCAzMSwKKyAgICAgMzQsIDMzLCAzOCwgNDMsIDU1LCA0NywgMzgsIDQxLCA1MiwgNDEsIDMzLCAzNCwgNDgsIDY1LCA0OSwgNTIsCisgICAgIDU3LCA1OSwgNjIsIDYyLCA2MiwgMzcsIDQ2LCA2OCwgNzMsIDY3LCA2MCwgNzIsIDU1LCA2MSwgNjIsIDU5LAorMSwKKyAgICAgMTAsIDExLCAxMSwgMTQsIDEzLCAxNCwgMjgsIDE2LCAxNiwgMjgsIDU5LCA0MCwgMzQsIDQwLCA1OSwgNTksCisgICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LAorICAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwKKyAgICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTl9LAorLyogaW5kZXggNCAtIFE4MCAqLworICAgIHsKKwkweGZmLCAweGQ4LAorCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KKzAsCisgICAgICA2LCA0LCA1LCA2LCA1LCA0LCA2LCA2LCA1LCA2LCA3LCA3LCA2LCA4LCAxMCwgMTYsCisgICAgIDEwLCAxMCwgOSwgOSwgMTAsIDIwLCAxNCwgMTUsIDEyLCAxNiwgMjMsIDIwLCAyNCwgMjQsIDIzLCAyMCwKKyAgICAgMjIsIDIyLCAyNiwgMjksIDM3LCAzMSwgMjYsIDI3LCAzNSwgMjgsIDIyLCAyMiwgMzIsIDQ0LCAzMiwgMzUsCisgICAgIDM4LCAzOSwgNDEsIDQyLCA0MSwgMjUsIDMxLCA0NSwgNDgsIDQ1LCA0MCwgNDgsIDM3LCA0MCwgNDEsIDQwLAorMSwKKyAgICAgIDcsIDcsIDcsIDEwLCA4LCAxMCwgMTksIDEwLCAxMCwgMTksIDQwLCAyNiwgMjIsIDI2LCA0MCwgNDAsCisgICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLAorICAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwKKyAgICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDB9LAorLyogaW5kZXggNSAtIFE4NSAqLworICAgIHsKKwkweGZmLCAweGQ4LAorCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KKzAsCisgICAgIDUsIDMsIDQsIDQsIDQsIDMsIDUsIDQsIDQsIDQsIDUsIDUsIDUsIDYsIDcsIDEyLAorICAgICA4LCA3LCA3LCA3LCA3LCAxNSwgMTEsIDExLCA5LCAxMiwgMTcsIDE1LCAxOCwgMTgsIDE3LCAxNSwKKyAgICAgMTcsIDE3LCAxOSwgMjIsIDI4LCAyMywgMTksIDIwLCAyNiwgMjEsIDE3LCAxNywgMjQsIDMzLCAyNCwgMjYsCisgICAgIDI5LCAyOSwgMzEsIDMxLCAzMSwgMTksIDIzLCAzNCwgMzYsIDM0LCAzMCwgMzYsIDI4LCAzMCwgMzEsIDMwLAorMSwKKyAgICAgNSwgNSwgNSwgNywgNiwgNywgMTQsIDgsIDgsIDE0LCAzMCwgMjAsIDE3LCAyMCwgMzAsIDMwLAorICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwKKyAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsCisgICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSwKKy8qIGluZGV4IDYgLSA4NiAqLworeworCTB4ZmYsIDB4ZDgsCisJMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLworMCwKKwkweDA0LCAweDAzLCAweDAzLCAweDA0LCAweDAzLCAweDAzLCAweDA0LCAweDA0LAorCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDUsIDB4MDcsIDB4MEIsCisJMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwRSwgMHgwQSwgMHgwQSwKKwkweDA4LCAweDBCLCAweDEwLCAweDBFLCAweDExLCAweDExLCAweDEwLCAweDBFLAorCTB4MTAsIDB4MEYsIDB4MTIsIDB4MTQsIDB4MUEsIDB4MTYsIDB4MTIsIDB4MTMsCisJMHgxOCwgMHgxMywgMHgwRiwgMHgxMCwgMHgxNiwgMHgxRiwgMHgxNywgMHgxOCwKKwkweDFCLCAweDFCLCAweDFELCAweDFELCAweDFELCAweDExLCAweDE2LCAweDIwLAorCTB4MjIsIDB4MUYsIDB4MUMsIDB4MjIsIDB4MUEsIDB4MUMsIDB4MUQsIDB4MUMsCisxLAorCTB4MDUsIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDYsIDB4MDcsIDB4MEQsIDB4MDcsCisJMHgwNywgMHgwRCwgMHgxQywgMHgxMiwgMHgxMCwgMHgxMiwgMHgxQywgMHgxQywKKwkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAorCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCisJMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKKwkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAorCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCisJMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKKyB9LAorLyogaW5kZXggNyAtIDg4ICovCit7CisJMHhmZiwgMHhkOCwKKwkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCiswLAorCTB4MDQsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDMsCisJMHgwMywgMHgwMywgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNiwgMHgwQSwKKwkweDA2LCAweDA2LCAweDA1LCAweDA1LCAweDA2LCAweDBDLCAweDA4LCAweDA5LAorCTB4MDcsIDB4MEEsIDB4MEUsIDB4MEMsIDB4MEYsIDB4MEUsIDB4MEUsIDB4MEMsCisJMHgwRCwgMHgwRCwgMHgwRiwgMHgxMSwgMHgxNiwgMHgxMywgMHgwRiwgMHgxMCwKKwkweDE1LCAweDExLCAweDBELCAweDBELCAweDEzLCAweDFBLCAweDEzLCAweDE1LAorCTB4MTcsIDB4MTgsIDB4MTksIDB4MTksIDB4MTksIDB4MEYsIDB4MTIsIDB4MUIsCisJMHgxRCwgMHgxQiwgMHgxOCwgMHgxRCwgMHgxNiwgMHgxOCwgMHgxOSwgMHgxOCwKKzEsCisJMHgwNCwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwNSwgMHgwNiwgMHgwQiwgMHgwNiwKKwkweDA2LCAweDBCLCAweDE4LCAweDEwLCAweDBELCAweDEwLCAweDE4LCAweDE4LAorCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCisJMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKKwkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAorCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCisJMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKKwkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAorfSwKKy8qIGluZGV4IDggLSA/PyAqLworeworCTB4ZmYsIDB4ZDgsCisJMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLworMCwKKwkweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLAorCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDUsCisJMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwNiwgMHgwNCwgMHgwNSwKKwkweDA0LCAweDA1LCAweDA3LCAweDA2LCAweDA4LCAweDA4LCAweDA3LCAweDA2LAorCTB4MDcsIDB4MDcsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEEsIDB4MDgsIDB4MDksCisJMHgwQiwgMHgwOSwgMHgwNywgMHgwNywgMHgwQSwgMHgwRSwgMHgwQSwgMHgwQiwKKwkweDBDLCAweDBDLCAweDBELCAweDBELCAweDBELCAweDA4LCAweDBBLCAweDBFLAorCTB4MEYsIDB4MEUsIDB4MEQsIDB4MEYsIDB4MEMsIDB4MEQsIDB4MEQsIDB4MEMsCisxLAorCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDYsIDB4MDMsCisJMHgwMywgMHgwNiwgMHgwQywgMHgwOCwgMHgwNywgMHgwOCwgMHgwQywgMHgwQywKKwkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAorCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsCisJMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywKKwkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAorCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsCisJMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQworfQorfTsKKworLyogaHVmZm1hbiB0YWJsZSArIHN0YXJ0IG9mIFNPRjAgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGh1ZmZtYW5bXSA9IHsKKwkweGZmLCAweGM0LCAweDAxLCAweGEyLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDUsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisJMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LAorCTB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MDMsCisJMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKwkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksCisJMHgwYSwgMHgwYiwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMywgMHgwMywKKwkweDAyLCAweDA0LCAweDAzLCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDAwLAorCTB4MDAsIDB4MDEsIDB4N2QsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDQsCisJMHgxMSwgMHgwNSwgMHgxMiwgMHgyMSwgMHgzMSwgMHg0MSwgMHgwNiwgMHgxMywKKwkweDUxLCAweDYxLCAweDA3LCAweDIyLCAweDcxLCAweDE0LCAweDMyLCAweDgxLAorCTB4OTEsIDB4YTEsIDB4MDgsIDB4MjMsIDB4NDIsIDB4YjEsIDB4YzEsIDB4MTUsCisJMHg1MiwgMHhkMSwgMHhmMCwgMHgyNCwgMHgzMywgMHg2MiwgMHg3MiwgMHg4MiwKKwkweDA5LCAweDBhLCAweDE2LCAweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDI1LAorCTB4MjYsIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MzQsIDB4MzUsIDB4MzYsCisJMHgzNywgMHgzOCwgMHgzOSwgMHgzYSwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwKKwkweDQ3LCAweDQ4LCAweDQ5LCAweDRhLCAweDUzLCAweDU0LCAweDU1LCAweDU2LAorCTB4NTcsIDB4NTgsIDB4NTksIDB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsCisJMHg2NywgMHg2OCwgMHg2OSwgMHg2YSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwKKwkweDc3LCAweDc4LCAweDc5LCAweDdhLCAweDgzLCAweDg0LCAweDg1LCAweDg2LAorCTB4ODcsIDB4ODgsIDB4ODksIDB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsCisJMHg5NiwgMHg5NywgMHg5OCwgMHg5OSwgMHg5YSwgMHhhMiwgMHhhMywgMHhhNCwKKwkweGE1LCAweGE2LCAweGE3LCAweGE4LCAweGE5LCAweGFhLCAweGIyLCAweGIzLAorCTB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsIDB4YjksIDB4YmEsIDB4YzIsCisJMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywgMHhjOCwgMHhjOSwgMHhjYSwKKwkweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LCAweGQ4LCAweGQ5LAorCTB4ZGEsIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsCisJMHhlOCwgMHhlOSwgMHhlYSwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwKKwkweGY2LCAweGY3LCAweGY4LCAweGY5LCAweGZhLCAweDExLCAweDAwLCAweDAyLAorCTB4MDEsIDB4MDIsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDQsIDB4MDcsIDB4MDUsCisJMHgwNCwgMHgwNCwgMHgwMCwgMHgwMSwgMHgwMiwgMHg3NywgMHgwMCwgMHgwMSwKKwkweDAyLCAweDAzLCAweDExLCAweDA0LCAweDA1LCAweDIxLCAweDMxLCAweDA2LAorCTB4MTIsIDB4NDEsIDB4NTEsIDB4MDcsIDB4NjEsIDB4NzEsIDB4MTMsIDB4MjIsCisJMHgzMiwgMHg4MSwgMHgwOCwgMHgxNCwgMHg0MiwgMHg5MSwgMHhhMSwgMHhiMSwKKwkweGMxLCAweDA5LCAweDIzLCAweDMzLCAweDUyLCAweGYwLCAweDE1LCAweDYyLAorCTB4NzIsIDB4ZDEsIDB4MGEsIDB4MTYsIDB4MjQsIDB4MzQsIDB4ZTEsIDB4MjUsCisJMHhmMSwgMHgxNywgMHgxOCwgMHgxOSwgMHgxYSwgMHgyNiwgMHgyNywgMHgyOCwKKwkweDI5LCAweDJhLCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDNhLAorCTB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksIDB4NGEsCisJMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwgMHg1OSwgMHg1YSwKKwkweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LCAweDY5LCAweDZhLAorCTB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsIDB4NzksIDB4N2EsCisJMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwgMHg4OSwKKwkweDhhLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LCAweDk4LAorCTB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCisJMHhhOCwgMHhhOSwgMHhhYSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwKKwkweGI3LCAweGI4LCAweGI5LCAweGJhLCAweGMyLCAweGMzLCAweGM0LCAweGM1LAorCTB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsIDB4ZDMsIDB4ZDQsCisJMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwgMHhkOSwgMHhkYSwgMHhlMiwgMHhlMywKKwkweGU0LCAweGU1LCAweGU2LCAweGU3LCAweGU4LCAweGU5LCAweGVhLCAweGYyLAorCTB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsIDB4ZjksIDB4ZmEsCisjaWZkZWYgQ09ORVhfQ0FNCisvKiB0aGUgQ29uZXhhbnQgZnJhbWVzIHN0YXJ0IHdpdGggU09GMCAqLworI2Vsc2UKKwkweGZmLCAweGMwLCAweDAwLCAweDExLAkJLyogU09GMCAoc3RhcnQgb2YgZnJhbWUgMCAqLworCTB4MDgsCQkJCS8qIGRhdGEgcHJlY2lzaW9uICovCisjZW5kaWYKK307CisKKyNpZm5kZWYgQ09ORVhfQ0FNCisvKiB2YXJpYWJsZSBwYXJ0OgorICoJMHgwMSwgMHhlMCwJCQkgaGVpZ2h0CisgKgkweDAyLCAweDgwLAkJCSB3aWR0aAorICoJMHgwMywJCQkJIGNvbXBvbmVudCBudW1iZXIKKyAqCQkweDAxLAorICoJCQkweDIxLAkJCXNhbXBsZXMgWQorICovCisKKy8qIGVuZCBvZiBoZWFkZXIgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGVvaFtdID0geworCQkJMHgwMCwJCS8qIHF1YW50IFkgKi8KKwkJMHgwMiwgMHgxMSwgMHgwMSwJLyogc2FtcGxlcyBDYkNyIC0gcXVhbnQgQ2JDciAqLworCQkweDAzLCAweDExLCAweDAxLAorCisJMHhmZiwgMHhkYSwgMHgwMCwgMHgwYywJCS8qIFNPUyAoc3RhcnQgb2Ygc2NhbikgKi8KKwkweDAzLCAweDAxLCAweDAwLCAweDAyLCAweDExLCAweDAzLCAweDExLCAweDAwLCAweDNmLCAweDAwCit9OworI2VuZGlmCisKKy8qIC0tIG91dHB1dCB0aGUgSlBFRyBoZWFkZXIgLS0gKi8KK3N0YXRpYyB2b2lkIGpwZWdfcHV0X2hlYWRlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkgICAgc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwKKwkJCSAgICBpbnQgcWluZGV4LAorCQkJICAgIGludCBzYW1wbGVzWSkKK3sKKyNpZm5kZWYgQ09ORVhfQ0FNCisJdW5zaWduZWQgY2hhciB0bXBidWZbOF07CisjZW5kaWYKKworCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQkodW5zaWduZWQgY2hhciAqKSBxdWFudFtxaW5kZXhdLCBzaXplb2YgcXVhbnRbMF0pOworCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCisJCQkodW5zaWduZWQgY2hhciAqKSBodWZmbWFuLCBzaXplb2YgaHVmZm1hbik7CisjaWZuZGVmIENPTkVYX0NBTQorCXRtcGJ1ZlswXSA9IGdzcGNhX2Rldi0+aGVpZ2h0ID4+IDg7CisJdG1wYnVmWzFdID0gZ3NwY2FfZGV2LT5oZWlnaHQgJiAweGZmOworCXRtcGJ1ZlsyXSA9IGdzcGNhX2Rldi0+d2lkdGggPj4gODsKKwl0bXBidWZbM10gPSBnc3BjYV9kZXYtPndpZHRoICYgMHhmZjsKKwl0bXBidWZbNF0gPSAweDAzOwkJLyogY29tcG9uZW50IG51bWJlciAqLworCXRtcGJ1Zls1XSA9IDB4MDE7CQkvKiBmaXJzdCBjb21wb25lbnQgKi8KKwl0bXBidWZbNl0gPSBzYW1wbGVzWTsKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAorCQkJdG1wYnVmLCA3KTsKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAorCQkJZW9oLCBzaXplb2YgZW9oKTsKKyNlbmRpZgorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzJiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYwpAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqCQlNYXJzLVNlbWkgTVI5NzMxMUEgbGlicmFyeQorICoJCUNvcHlyaWdodCAoQykgMjAwNSA8YnJhZGxjaEBob3RtYWlsLmNvbT4KKyAqCisgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJtYXJzIgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKyNpbmNsdWRlICJqcGVnLmgiCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDEsIDcpCitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiMi4xLjciOworCitNT0RVTEVfQVVUSE9SKCJNaWNoZWwgWGhhYXJkIDxteGhhYXJkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvTWFycyBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJY2hhciBxaW5kZXg7Cit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1ODksCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMn0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCit9OworCisvKiBNSSBSZWdpc3RlciB0YWJsZSAvL2VsdmlzICovCitlbnVtIHsKKwlSRUdfSFdfTUlfMCwKKwlSRUdfSFdfTUlfMSwKKwlSRUdfSFdfTUlfMiwKKwlSRUdfSFdfTUlfMywKKwlSRUdfSFdfTUlfNCwKKwlSRUdfSFdfTUlfNSwKKwlSRUdfSFdfTUlfNiwKKwlSRUdfSFdfTUlfNywKKwlSRUdfSFdfTUlfOSA9IDB4MDksCisJUkVHX0hXX01JX0IgPSAweDBCLAorCVJFR19IV19NSV9DLAorCVJFR19IV19NSV9ELAorCVJFR19IV19NSV8xRSA9IDB4MUUsCisJUkVHX0hXX01JXzIwID0gMHgyMCwKKwlSRUdfSFdfTUlfMkIgPSAweDJCLAorCVJFR19IV19NSV8yQywKKwlSRUdfSFdfTUlfMkQsCisJUkVHX0hXX01JXzJFLAorCVJFR19IV19NSV8zNSA9IDB4MzUsCisJUkVHX0hXX01JXzVGID0gMHg1ZiwKKwlSRUdfSFdfTUlfNjAsCisJUkVHX0hXX01JXzYxLAorCVJFR19IV19NSV82MiwKKwlSRUdfSFdfTUlfNjMsCisJUkVHX0hXX01JXzY0LAorCVJFR19IV19NSV9GMSA9IDB4ZjEsCisJQVRUUl9UT1RBTF9NSV9SRUcgPSAweGYyCit9OworCisvKiB0aGUgYnl0ZXMgdG8gd3JpdGUgYXJlIGluIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLworc3RhdGljIGludCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSBfX3UxNiBpbmRleCwgaW50IGxlbikKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSB1c2Jfc25kYnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDQpLAorCQkJIDB4MTIsCisJCQkgMHhjOCwJCS8qID8/ICovCisJCQkgMCwJCS8qIHZhbHVlICovCisJCQkgaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuLCA1MDApOworCWlmIChyYyA8IDApCisJCVBERUJVRyhEX0VSUiwgInJlZyB3cml0ZSBbJTAyeF0gZXJyb3IgJWQiLCBpbmRleCwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191MTYgaW5kZXgsIF9fdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSB1c2Jfc25kYnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDQpLAorCQkJIDB4MTIsCisJCQkgMHhjOCwJCS8qID8/ICovCisJCQkgMCwJCS8qIHZhbHVlICovCisJCQkgaW5kZXgsIGJ1ZiwgbGVuLCA1MDApOworCWlmIChyYyA8IDApCisJCVBERUJVRyhEX0VSUiwgInJlZyB3cml0ZSBbJTAyeF0gZXJyb3IgJWQiLCBpbmRleCwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYnVsa193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICAgX191MTYgKnBjaCwKKwkJICAgX191MTYgQWRkcmVzcykKK3sKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDFmOworCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7CQkJLyogY29udHJvbCBieXRlICovCisJZ3NwY2FfZGV2LT51c2JfYnVmWzJdID0gQWRkcmVzczsKKwlnc3BjYV9kZXYtPnVzYl9idWZbM10gPSAqcGNoID4+IDg7CQkvKiBoaWdoIGJ5dGUgKi8KKwlnc3BjYV9kZXYtPnVzYl9idWZbNF0gPSAqcGNoOwkJCS8qIGxvdyBieXRlICovCisKKwlyZWdfdyhnc3BjYV9kZXYsIEFkZHJlc3MsIDUpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCBjYW0gKmNhbTsKKworCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwljYW0tPmRldl9uYW1lID0gKGNoYXIgKikgaWQtPmRyaXZlcl9pbmZvOworCWNhbS0+ZXBhZGRyID0gMHgwMTsKKwljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CisJc2QtPnFpbmRleCA9IDE7CQkJLyogc2V0IHRoZSBxdWFudGl6YXRpb24gdGFibGUgKi8KKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGVycl9jb2RlOworCV9fdTggKmRhdGE7CisJX191MTYgKk1JX2J1ZjsKKwlpbnQgaF9zaXplLCB2X3NpemU7CisJaW50IGludHBpcGU7CisKKwlQREVCVUcoRF9TVFJFQU0sICJjYW1lcmEgc3RhcnQsIGlmYWNlICVkLCBhbHQgOCIsIGdzcGNhX2Rldi0+aWZhY2UpOworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgOCkgPCAwKSB7CisJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgIlNldCBwYWNrZXQgc2l6ZTogc2V0IGludGVyZmFjZSBlcnJvciIpOworCQlyZXR1cm47CisJfQorCisJZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZjsKKwlkYXRhWzBdID0gMHgwMTsJCS8qIGFkZHJlc3MgKi8KKwlkYXRhWzFdID0gMHgwMTsKKworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm47CisKKwkvKgorCSAgIEluaXRpYWxpemUgdGhlIE1SOTcxMTMgY2hpcCByZWdpc3RlcgorCSAqLworCWRhdGEgPSBrbWFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKKwlkYXRhWzBdID0gMHgwMDsJCS8qIGFkZHJlc3MgKi8KKwlkYXRhWzFdID0gMHgwYyB8IDB4MDE7CS8qIHJlZyAwICovCisJZGF0YVsyXSA9IDB4MDE7CQkvKiByZWcgMSAqLworCWhfc2l6ZSA9IGdzcGNhX2Rldi0+d2lkdGg7CisJdl9zaXplID0gZ3NwY2FfZGV2LT5oZWlnaHQ7CisJZGF0YVszXSA9IGhfc2l6ZSAvIDg7CS8qIGhfc2l6ZSAsIHJlZyAyICovCisJZGF0YVs0XSA9IHZfc2l6ZSAvIDg7CS8qIHZfc2l6ZSAsIHJlZyAzICovCisJZGF0YVs1XSA9IDB4MzA7CQkvKiByZWcgNCwgTUksIFBBUzUxMDEgOgorCQkJCSAqCTB4MzAgZm9yIDI0bWh6ICwgMHgyOCBmb3IgMTJtaHogKi8KKwlkYXRhWzZdID0gNDsJCS8qIHJlZyA1LCBIIHN0YXJ0ICovCisJZGF0YVs3XSA9IDB4YzA7CQkvKiByZWcgNiwgZ2FtbWEgMS41ICovCisJZGF0YVs4XSA9IDM7CQkvKiByZWcgNywgViBzdGFydCAqLworLyoJaWYgKGhfc2l6ZSA9PSAzMjAgKSAqLworLyoJCWRhdGFbOV09IDB4NTY7CSAqIHJlZyA4LCAyNE1IeiwgMjoxIHNjYWxlIGRvd24gKi8KKy8qCWVsc2UgKi8KKwlkYXRhWzldID0gMHg1MjsJCS8qIHJlZyA4LCAyNE1Ieiwgbm8gc2NhbGUgZG93biAqLworCWRhdGFbMTBdID0gMHg1ZDsJLyogcmVnIDksIEkyQyBkZXZpY2UgYWRkcmVzcworCQkJCSAqCVtmb3IgUEFTNTEwMSAoMHg0MCldIFtmb3IgTUkgKDB4NWQpXSAqLworCisJZXJyX2NvZGUgPSByZWdfd19idWYoZ3NwY2FfZGV2LCBkYXRhWzBdLCBkYXRhLCAxMSk7CisJa2ZyZWUoZGF0YSk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuOworCisJZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZjsKKwlkYXRhWzBdID0gMHgyMzsJCS8qIGFkZHJlc3MgKi8KKwlkYXRhWzFdID0gMHgwOTsJCS8qIHJlZyAzNSwgYXBwZW5kIGZyYW1lIGhlYWRlciAqLworCisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybjsKKworCWRhdGFbMF0gPSAweDNjOwkJLyogYWRkcmVzcyAqLworLyoJaWYgKGdzcGNhX2Rldi0+d2lkdGggPT0gMTI4MCkgKi8KKy8qCQlkYXRhWzFdID0gMjAwOwkgKiByZWcgNjAsIHBjLWNhbSBmcmFtZSBzaXplCisJCQkJICoJKHVuaXQ6IDRLQikgODAwS0IgKi8KKy8qCWVsc2UgKi8KKwlkYXRhWzFdID0gNTA7CQkvKiA1MCByZWcgNjAsIHBjLWNhbSBmcmFtZSBzaXplCisJCQkJICoJKHVuaXQ6IDRLQikgMjAwS0IgKi8KKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKDApIHsJCQkvKiBmaXhlZCBkYXJrLWdhaW4gKi8KKwkJZGF0YVsxXSA9IDA7CQkvKiByZWcgOTQsIFkgR2FpbiAoMS43NSkgKi8KKwkJZGF0YVsyXSA9IDA7CQkvKiByZWcgOTUsIFVWIEdhaW4gKDEuNzUpICovCisJCWRhdGFbM10gPSAweDNmOwkJLyogcmVnIDk2LCBZIEdhaW4vVVYgR2Fpbi9kaXNhYmxlCisJCQkJCSAqCWF1dG8gZGFyay1nYWluICovCisJCWRhdGFbNF0gPSAwOwkJLyogcmVnIDk3LCBzZXQgZml4ZWQgZGFyayBsZXZlbCAqLworCQlkYXRhWzVdID0gMDsJCS8qIHJlZyA5OCwgZG9uJ3QgY2FyZSAqLworCX0gZWxzZSB7CQkJLyogYXV0byBkYXJrLWdhaW4gKi8KKwkJZGF0YVsxXSA9IDA7CQkvKiByZWcgOTQsIFkgR2FpbiAoYXV0bykgKi8KKwkJZGF0YVsyXSA9IDA7CQkvKiByZWcgOTUsIFVWIEdhaW4gKDEuNzUpICovCisJCWRhdGFbM10gPSAweDc4OwkJLyogcmVnIDk2LCBZIEdhaW4vVVYgR2Fpbi9kaXNhYmxlCisJCQkJCSAqCWF1dG8gZGFyay1nYWluICovCisJCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgeworLyoJCWNhc2UgMTI4MDogKi8KKy8qCQkJZGF0YVs0XSA9IDE1NDsKKwkJCQkgKiByZWcgOTcsICUzIHNoYWRvdyBwb2ludCAodW5pdDogMjU2IHBpeGVsKSAqLworLyoJCQlkYXRhWzVdID0gNTE7CisJCQkJICogcmVnIDk4LCAlMSBoaWdobGlnaHQgcG9pbnQKKwkJCQkgKgkodWludDogMjU2IHBpeGVsKSAqLworLyoJCQlicmVhazsgKi8KKwkJZGVmYXVsdDoKKy8qCQljYXNlIDY0MDogKi8KKwkJCWRhdGFbNF0gPSAzNjsJLyogcmVnIDk3LCAlMyBzaGFkb3cgcG9pbnQKKwkJCQkJICoJKHVuaXQ6IDI1NiBwaXhlbCkgKi8KKwkJCWRhdGFbNV0gPSAxMjsJLyogcmVnIDk4LCAlMSBoaWdobGlnaHQgcG9pbnQKKwkJCQkJICoJKHVpbnQ6IDI1NiBwaXhlbCkgKi8KKwkJCWJyZWFrOworCQljYXNlIDMyMDoKKwkJCWRhdGFbNF0gPSA5OwkvKiByZWcgOTcsICUzIHNoYWRvdyBwb2ludAorCQkJCQkgKgkodW5pdDogMjU2IHBpeGVsKSAqLworCQkJZGF0YVs1XSA9IDM7CS8qIHJlZyA5OCwgJTEgaGlnaGxpZ2h0IHBvaW50CisJCQkJCSAqCSh1aW50OiAyNTYgcGl4ZWwpICovCisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBhdXRvIGRhcmstZ2FpbiAqLworCWRhdGFbMF0gPSAweDVlOwkJLyogYWRkcmVzcyAqLworCisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDYpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybjsKKworCWRhdGFbMF0gPSAweDY3OworCWRhdGFbMV0gPSAweDEzOwkJLyogcmVnIDEwMywgZmlyc3QgcGl4ZWwgQiwgZGlzYWJsZSBzaGFycG5lc3MgKi8KKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBpbml0aWFsaXplIHRoZSB2YWx1ZSBvZiBNSSBzZW5zb3IuLi4KKwkgKi8KKwlNSV9idWYgPSBremFsbG9jKEFUVFJfVE9UQUxfTUlfUkVHICogc2l6ZW9mICpNSV9idWYsIEdGUF9LRVJORUwpOworCU1JX2J1ZltSRUdfSFdfTUlfMV0gPSAweDAwMGE7CisJTUlfYnVmW1JFR19IV19NSV8yXSA9IDB4MDAwYzsKKwlNSV9idWZbUkVHX0hXX01JXzNdID0gMHgwNDA1OworCU1JX2J1ZltSRUdfSFdfTUlfNF0gPSAweDA1MDc7CisJLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV81XQkgPSAweDAxZmY7Ly8xMyAqLworCU1JX2J1ZltSRUdfSFdfTUlfNV0gPSAweDAwMTM7CS8qIDEzICovCisJTUlfYnVmW1JFR19IV19NSV82XSA9IDB4MDAxZjsJLyogdmVydGljYWwgYmxhbmtpbmcgKi8KKwkvKiBtaV9BdHRyX1JlZ19bUkVHX0hXX01JXzZdCSA9IDB4MDQwMDsgIC8vIHZlcnRpY2FsIGJsYW5raW5nICovCisJTUlfYnVmW1JFR19IV19NSV83XSA9IDB4MDAwMjsKKwkvKiBtaV9BdHRyX1JlZ19bUkVHX0hXX01JXzldCSA9IDB4MDE1ZjsgKi8KKwkvKiBtaV9BdHRyX1JlZ19bUkVHX0hXX01JXzldCSA9IDB4MDMwZjsgKi8KKwlNSV9idWZbUkVHX0hXX01JXzldID0gMHgwMzc0OworCU1JX2J1ZltSRUdfSFdfTUlfQl0gPSAweDAwMDA7CisJTUlfYnVmW1JFR19IV19NSV9DXSA9IDB4MDAwMDsKKwlNSV9idWZbUkVHX0hXX01JX0RdID0gMHgwMDAwOworCU1JX2J1ZltSRUdfSFdfTUlfMUVdID0gMHg4MDAwOworLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV8yMF0JICA9IDB4MTEwNDsgKi8KKwlNSV9idWZbUkVHX0hXX01JXzIwXSA9IDB4MTEwNDsJLyogMHgxMTFjOyAqLworCU1JX2J1ZltSRUdfSFdfTUlfMkJdID0gMHgwMDA4OworLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV8yQ10JICA9IDB4MDAwZjsgKi8KKwlNSV9idWZbUkVHX0hXX01JXzJDXSA9IDB4MDAxZjsJLyogbGl0YSBzdWdnZXN0ICovCisJTUlfYnVmW1JFR19IV19NSV8yRF0gPSAweDAwMDg7CisJTUlfYnVmW1JFR19IV19NSV8yRV0gPSAweDAwMDg7CisJTUlfYnVmW1JFR19IV19NSV8zNV0gPSAweDAwNTE7CisJTUlfYnVmW1JFR19IV19NSV81Rl0gPSAweDA5MDQ7CS8qIGZhaWwgdG8gd3JpdGUgKi8KKwlNSV9idWZbUkVHX0hXX01JXzYwXSA9IDB4MDAwMDsKKwlNSV9idWZbUkVHX0hXX01JXzYxXSA9IDB4MDAwMDsKKwlNSV9idWZbUkVHX0hXX01JXzYyXSA9IDB4MDQ5ODsKKwlNSV9idWZbUkVHX0hXX01JXzYzXSA9IDB4MDAwMDsKKwlNSV9idWZbUkVHX0hXX01JXzY0XSA9IDB4MDAwMDsKKwlNSV9idWZbUkVHX0hXX01JX0YxXSA9IDB4MDAwMTsKKwkvKiBjaGFuZ2luZyB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkaWZmZXJlbnQgdmFsdWUgb2YgZHgvZHkgKi8KKworCWlmIChnc3BjYV9kZXYtPndpZHRoICE9IDEyODApIHsKKwkJTUlfYnVmWzB4MDFdID0gMHgwMTBhOworCQlNSV9idWZbMHgwMl0gPSAweDAxNGM7CisJCU1JX2J1ZlsweDAzXSA9IDB4MDFlNTsKKwkJTUlfYnVmWzB4MDRdID0gMHgwMjg3OworCX0KKwlNSV9idWZbMHgyMF0gPSAweDExMDQ7CisKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAxLCAxKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAyLCAyKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAzLCAzKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA0LCA0KTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA1LCA1KTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA2LCA2KTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA3LCA3KTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA5LCA5KTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDBiLCAweDBiKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDBjLCAweDBjKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDBkLCAweDBkKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDFlLCAweDFlKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDIwLCAweDIwKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDJiLCAweDJiKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDJjLCAweDJjKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDJkLCAweDJkKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDJlLCAweDJlKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDM1LCAweDM1KTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDVmLCAweDVmKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDYwLCAweDYwKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDYxLCAweDYxKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDYyLCAweDYyKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDYzLCAweDYzKTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDY0LCAweDY0KTsKKwlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweGYxLCAweGYxKTsKKwlrZnJlZShNSV9idWYpOworCisJaW50cGlwZSA9IHVzYl9zbmRpbnRwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKKwllcnJfY29kZSA9IHVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LCBpbnRwaXBlKTsKKworCWRhdGFbMF0gPSAweDAwOworCWRhdGFbMV0gPSAweDRkOwkJLyogSVNPQyB0cmFuc2ZlcmluZyBlbmFibGUuLi4gKi8KKwlyZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDIpOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJlc3VsdDsKKworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDE7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKKwlyZXN1bHQgPSByZWdfdyhnc3BjYV9kZXYsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSwgMik7CisJaWYgKHJlc3VsdCA8IDApCisJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGZhaWxlZCIpOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2Nsb3NlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBwOworCisJaWYgKGxlbiA8IDYpIHsKKy8qCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsgKi8KKwkJcmV0dXJuOworCX0KKwlmb3IgKHAgPSAwOyBwIDwgbGVuIC0gNjsgcCsrKSB7CisJCWlmIChkYXRhWzAgKyBwXSA9PSAweGZmCisJCSAgICAmJiBkYXRhWzEgKyBwXSA9PSAweGZmCisJCSAgICAmJiBkYXRhWzIgKyBwXSA9PSAweDAwCisJCSAgICAmJiBkYXRhWzMgKyBwXSA9PSAweGZmCisJCSAgICAmJiBkYXRhWzQgKyBwXSA9PSAweDk2KSB7CisJCQlpZiAoZGF0YVs1ICsgcF0gPT0gMHg2NAorCQkJICAgIHx8IGRhdGFbNSArIHBdID09IDB4NjUKKwkJCSAgICB8fCBkYXRhWzUgKyBwXSA9PSAweDY2CisJCQkgICAgfHwgZGF0YVs1ICsgcF0gPT0gMHg2NykgeworCQkJCVBERUJVRyhEX1BBQ0ssICJzb2Ygb2Zmc2V0OiAlZCBsZW5nOiAlZCIsCisJCQkJCXAsIGxlbik7CisJCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJCQlmcmFtZSwgZGF0YSwgMCk7CisKKwkJCQkvKiBwdXQgdGhlIEpQRUcgaGVhZGVyICovCisJCQkJanBlZ19wdXRfaGVhZGVyKGdzcGNhX2RldiwgZnJhbWUsCisJCQkJCQlzZC0+cWluZGV4LCAweDIxKTsKKwkJCQlkYXRhICs9IDE2OworCQkJCWxlbiAtPSAxNjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5vcGVuID0gc2Rfb3BlbiwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKKwkuY2xvc2UgPSBzZF9jbG9zZSwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworI2RlZmluZSBEVk5NKG5hbWUpIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkgbmFtZQorc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDA1MGYpLCBEVk5NKCJNYXJzLVNlbWkgUGMtQ2FtZXJhIil9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAidiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGQ5OWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC0wLDAgKzEsMjE4NiBAQAorLyoqCisgKiBPVjUxOSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmVhbi1GcmFuY29pcyBNb2luZSAoaHR0cDovL21vaW5lamYuZnJlZS5mcikKKyAqCisgKiAoVGhpcyBtb2R1bGUgaXMgYWRhcHRlZCBmcm9tIHRoZSBvdjUxeC1qcGVnIHBhY2thZ2UpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKyNkZWZpbmUgTU9EVUxFX05BTUUgIm92NTE5IgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK01PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk9WNTE5IFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIGdsb2JhbCBwYXJhbWV0ZXJzICovCitzdGF0aWMgaW50IGZyYW1lX3JhdGU7CisKKy8qIE51bWJlciBvZiB0aW1lcyB0byByZXRyeSBhIGZhaWxlZCBJMkMgdHJhbnNhY3Rpb24uIEluY3JlYXNlIHRoaXMgaWYgeW91CisgKiBhcmUgZ2V0dGluZyAiRmFpbGVkIHRvIHJlYWQgc2Vuc29yIElELi4uIiAqLworc3RhdGljIGludCBpMmNfZGV0ZWN0X3RyaWVzID0gMTA7CisKKy8qIG92NTE5IGRldmljZSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJLyogRGV0ZXJtaW5lZCBieSBzZW5zb3IgdHlwZSAqLworCXNob3J0IG1heHdpZHRoOworCXNob3J0IG1heGhlaWdodDsKKworCXVuc2lnbmVkIGNoYXIgcHJpbWFyeV9pMmNfc2xhdmU7CS8qIEkyQyB3cml0ZSBpZCBvZiBzZW5zb3IgKi8KKworCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKKwl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OworCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCisJY2hhciBjb21wcmVzczsJCS8qIFNob3VsZCB0aGUgbmV4dCBmcmFtZSBiZSBjb21wcmVzc2VkPyAqLworCWNoYXIgY29tcHJlc3NfaW5pdGVkOwkvKiBBcmUgY29tcHJlc3Npb24gcGFyYW1zIHVwbG9hZGVkPyAqLworCWNoYXIgc3RvcHBlZDsJCS8qIFN0cmVhbWluZyBpcyB0ZW1wb3JhcmlseSBwYXVzZWQgKi8KKworCWNoYXIgZnJhbWVfcmF0ZTsJLyogY3VycmVudCBGcmFtZXJhdGUgKE9WNTE5IG9ubHkpICovCisJY2hhciBjbG9ja2RpdjsJCS8qIGNsb2NrZGl2IG92ZXJyaWRlIGZvciBPVjUxOSBvbmx5ICovCisKKwljaGFyIHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKFNFTl8qKSAqLworI2RlZmluZSBTRU5fVU5LTk9XTiAwCisjZGVmaW5lIFNFTl9PVjY2MjAgMQorI2RlZmluZSBTRU5fT1Y2NjMwIDIKKyNkZWZpbmUgU0VOX09WNzYxMCAzCisjZGVmaW5lIFNFTl9PVjc2MjAgNAorI2RlZmluZSBTRU5fT1Y3NjMwIDUKKyNkZWZpbmUgU0VOX09WNzY0MCA2CisjZGVmaW5lIFNFTl9PVjc2NzAgNworI2RlZmluZSBTRU5fT1Y3NkJFIDgKKyNkZWZpbmUgU0VOX09WODYxMCA5CisKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxMjcsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorI2RlZmluZSBTRF9DT05UUkFTVCAxCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMTI3LAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwl9LAorI2RlZmluZSBTRF9DT0xPUiAyCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTYXR1cmF0aW9uIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEyNywKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbG9ycywKKwkgICAgLmdldCA9IHNkX2dldGNvbG9ycywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU4OSwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAwfSwKK307CitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE3NiwKKwkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyA4ICsgNTg5LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDF9LAorCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDMgLyA4ICsgNTg5LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogT1Y1MTkgQ2FtZXJhIGludGVyZmFjZSByZWdpc3RlciBudW1iZXJzICovCisjZGVmaW5lIE9WNTE5X0NBTV9IX1NJWkUJCTB4MTAKKyNkZWZpbmUgT1Y1MTlfQ0FNX1ZfU0laRQkJMHgxMQorI2RlZmluZSBPVjUxOV9DQU1fWF9PRkZTRVRMCQkweDEyCisjZGVmaW5lIE9WNTE5X0NBTV9YX09GRlNFVEgJCTB4MTMKKyNkZWZpbmUgT1Y1MTlfQ0FNX1lfT0ZGU0VUTAkJMHgxNAorI2RlZmluZSBPVjUxOV9DQU1fWV9PRkZTRVRICQkweDE1CisjZGVmaW5lIE9WNTE5X0NBTV9ESVZJREVSCQkweDE2CisjZGVmaW5lIE9WNTE5X0NBTV9ERlIJCQkweDIwCisjZGVmaW5lIE9WNTE5X0NBTV9GT1JNQVQJCTB4MjUKKworLyogT1Y1MTkgU3lzdGVtIENvbnRyb2xsZXIgcmVnaXN0ZXIgbnVtYmVycyAqLworI2RlZmluZSBPVjUxOV9TWVNfUkVTRVQxIDB4NTEKKyNkZWZpbmUgT1Y1MTlfU1lTX0VOX0NMSzEgMHg1NAorCisjZGVmaW5lIE9WNTE5X0dQSU9fREFUQV9PVVQwCQkweDcxCisjZGVmaW5lIE9WNTE5X0dQSU9fSU9fQ1RSTDAJCTB4NzIKKworI2RlZmluZSBPVjUxMV9FTkRQT0lOVF9BRERSRVNTICAxCS8qIElzb2MgZW5kcG9pbnQgbnVtYmVyICovCisKKy8qIEkyQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjUxeF9JMkNfV19TSUQJCTB4NDEKKyNkZWZpbmUgUjUxeF9JMkNfU0FERFJfMwkweDQyCisjZGVmaW5lIFI1MXhfSTJDX1NBRERSXzIJMHg0MworI2RlZmluZSBSNTF4X0kyQ19SX1NJRAkJMHg0NAorI2RlZmluZSBSNTF4X0kyQ19EQVRBCQkweDQ1CisjZGVmaW5lIFI1MThfSTJDX0NUTAkJMHg0NwkvKiBPVjUxOCgrKSBvbmx5ICovCisKKy8qIEkyQyBBRERSRVNTRVMgKi8KKyNkZWZpbmUgT1Y3eHgwX1NJRCAgIDB4NDIKKyNkZWZpbmUgT1Y4eHgwX1NJRCAgIDB4YTAKKyNkZWZpbmUgT1Y2eHgwX1NJRCAgIDB4YzAKKworLyogT1Y3NjEwIHJlZ2lzdGVycyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0dBSU4JCTB4MDAJLyogZ2FpbiBzZXR0aW5nICg1OjApICovCisjZGVmaW5lIE9WNzYxMF9SRUdfU0FUCQkweDAzCS8qIHNhdHVyYXRpb24gKi8KKyNkZWZpbmUgT1Y4NjEwX1JFR19IVUUJCTB4MDQJLyogMDQgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DTlQJCTB4MDUJLyogWSBjb250cmFzdCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0JSVAkJMHgwNgkvKiBZIGJyaWdodG5lc3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fQwkweDE0CS8qIG1pc2MgY29tbW9uIHJlZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19JRF9ISUdICTB4MWMJLyogbWFudWZhY3R1cmVyIElEIE1TQiAqLworI2RlZmluZSBPVjc2MTBfUkVHX0lEX0xPVwkweDFkCS8qIG1hbnVmYWN0dXJlciBJRCBMU0IgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fSQkweDI5CS8qIG1pc2Mgc2V0dGluZ3MgKi8KKworLyogT1Y3NjcwIHJlZ2lzdGVycyAqLworI2RlZmluZSBPVjc2NzBfUkVHX0dBSU4gICAgICAgIDB4MDAgICAgLyogR2FpbiBsb3dlciA4IGJpdHMgKHJlc3QgaW4gdnJlZikgKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19CTFVFICAgICAgICAweDAxICAgIC8qIGJsdWUgZ2FpbiAqLworI2RlZmluZSBPVjc2NzBfUkVHX1JFRCAgICAgICAgIDB4MDIgICAgLyogcmVkIGdhaW4gKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19WUkVGICAgICAgICAweDAzICAgIC8qIFBpZWNlcyBvZiBHQUlOLCBWU1RBUlQsIFZTVE9QICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQ09NMSAgICAgICAgMHgwNCAgICAvKiBDb250cm9sIDEgKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19BRUNISCAgICAgICAweDA3ICAgIC8qIEFFQyBNUyA1IGJpdHMgKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19DT00zICAgICAgICAweDBjICAgIC8qIENvbnRyb2wgMyAqLworI2RlZmluZSBPVjc2NzBfUkVHX0NPTTQgICAgICAgIDB4MGQgICAgLyogQ29udHJvbCA0ICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQ09NNSAgICAgICAgMHgwZSAgICAvKiBBbGwgInJlc2VydmVkIiAqLworI2RlZmluZSBPVjc2NzBfUkVHX0NPTTYgICAgICAgIDB4MGYgICAgLyogQ29udHJvbCA2ICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQUVDSCAgICAgICAgMHgxMCAgICAvKiBNb3JlIGJpdHMgb2YgQUVDIHZhbHVlICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQ0xLUkMgICAgICAgMHgxMSAgICAvKiBDbG9jayBjb250cm9sICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQ09NNyAgICAgICAgMHgxMiAgICAvKiBDb250cm9sIDcgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NN19GTVRfVkdBICAgIDB4MDAKKyNkZWZpbmUgICBPVjc2NzBfQ09NN19ZVVYgICAgICAgIDB4MDAgICAgLyogWVVWICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTTdfRk1UX1FWR0EgICAweDEwICAgIC8qIFFWR0EgZm9ybWF0ICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTTdfRk1UX01BU0sgICAweDM4CisjZGVmaW5lICAgT1Y3NjcwX0NPTTdfUkVTRVQgICAgICAweDgwICAgIC8qIFJlZ2lzdGVyIHJlc2V0ICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQ09NOCAgICAgICAgMHgxMyAgICAvKiBDb250cm9sIDggKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NOF9BRUMgICAgICAgIDB4MDEgICAgLyogQXV0byBleHBvc3VyZSBlbmFibGUgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NOF9BV0IgICAgICAgIDB4MDIgICAgLyogV2hpdGUgYmFsYW5jZSBlbmFibGUgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NOF9BR0MgICAgICAgIDB4MDQgICAgLyogQXV0byBnYWluIGVuYWJsZSAqLworI2RlZmluZSAgIE9WNzY3MF9DT004X0JGSUxUICAgICAgMHgyMCAgICAvKiBCYW5kIGZpbHRlciBlbmFibGUgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NOF9BRUNTVEVQICAgIDB4NDAgICAgLyogVW5saW1pdGVkIEFFQyBzdGVwIHNpemUgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NOF9GQVNUQUVDICAgIDB4ODAgICAgLyogRW5hYmxlIGZhc3QgQUdDL0FFQyAqLworI2RlZmluZSBPVjc2NzBfUkVHX0NPTTkgICAgICAgIDB4MTQgICAgLyogQ29udHJvbCA5ICAtIGdhaW4gY2VpbGluZyAqLworI2RlZmluZSBPVjc2NzBfUkVHX0NPTTEwICAgICAgIDB4MTUgICAgLyogQ29udHJvbCAxMCAqLworI2RlZmluZSBPVjc2NzBfUkVHX0hTVEFSVCAgICAgIDB4MTcgICAgLyogSG9yaXogc3RhcnQgaGlnaCBiaXRzICovCisjZGVmaW5lIE9WNzY3MF9SRUdfSFNUT1AgICAgICAgMHgxOCAgICAvKiBIb3JpeiBzdG9wIGhpZ2ggYml0cyAqLworI2RlZmluZSBPVjc2NzBfUkVHX1ZTVEFSVCAgICAgIDB4MTkgICAgLyogVmVydCBzdGFydCBoaWdoIGJpdHMgKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19WU1RPUCAgICAgICAweDFhICAgIC8qIFZlcnQgc3RvcCBoaWdoIGJpdHMgKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19NVkZQICAgICAgICAweDFlICAgIC8qIE1pcnJvciAvIHZmbGlwICovCisjZGVmaW5lICAgT1Y3NjcwX01WRlBfTUlSUk9SICAgICAweDIwICAgIC8qIE1pcnJvciBpbWFnZSAqLworI2RlZmluZSBPVjc2NzBfUkVHX0FFVyAgICAgICAgIDB4MjQgICAgLyogQUdDIHVwcGVyIGxpbWl0ICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQUVCICAgICAgICAgMHgyNSAgICAvKiBBR0MgbG93ZXIgbGltaXQgKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19WUFQgICAgICAgICAweDI2ICAgIC8qIEFHQy9BRUMgZmFzdCBtb2RlIG9wIHJlZ2lvbiAqLworI2RlZmluZSBPVjc2NzBfUkVHX0hSRUYgICAgICAgIDB4MzIgICAgLyogSFJFRiBwaWVjZXMgKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19UU0xCICAgICAgICAweDNhICAgIC8qIGxvdHMgb2Ygc3R1ZmYgKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19DT00xMSAgICAgICAweDNiICAgIC8qIENvbnRyb2wgMTEgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NMTFfRVhQICAgICAgIDB4MDIKKyNkZWZpbmUgICBPVjc2NzBfQ09NMTFfSFpBVVRPICAgIDB4MTAgICAgLyogQXV0byBkZXRlY3QgNTAvNjAgSHogKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19DT00xMiAgICAgICAweDNjICAgIC8qIENvbnRyb2wgMTIgKi8KKyNkZWZpbmUgT1Y3NjcwX1JFR19DT00xMyAgICAgICAweDNkICAgIC8qIENvbnRyb2wgMTMgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NMTNfR0FNTUEgICAgIDB4ODAgICAgLyogR2FtbWEgZW5hYmxlICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTTEzX1VWU0FUICAgICAweDQwICAgIC8qIFVWIHNhdHVyYXRpb24gYXV0byBhZGp1c3RtZW50ICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQ09NMTQgICAgICAgMHgzZSAgICAvKiBDb250cm9sIDE0ICovCisjZGVmaW5lIE9WNzY3MF9SRUdfRURHRSAgICAgICAgMHgzZiAgICAvKiBFZGdlIGVuaGFuY2VtZW50IGZhY3RvciAqLworI2RlZmluZSBPVjc2NzBfUkVHX0NPTTE1ICAgICAgIDB4NDAgICAgLyogQ29udHJvbCAxNSAqLworI2RlZmluZSAgIE9WNzY3MF9DT00xNV9SMDBGRiAgICAgMHhjMCAgICAvKiAgICAgICAgICAgIDAwIHRvIEZGICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQ09NMTYgICAgICAgMHg0MSAgICAvKiBDb250cm9sIDE2ICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTTE2X0FXQkdBSU4gICAweDA4ICAgIC8qIEFXQiBnYWluIGVuYWJsZSAqLworI2RlZmluZSBPVjc2NzBfUkVHX0JSSUdIVCAgICAgIDB4NTUgICAgLyogQnJpZ2h0bmVzcyAqLworI2RlZmluZSBPVjc2NzBfUkVHX0NPTlRSQVMgICAgIDB4NTYgICAgLyogQ29udHJhc3QgY29udHJvbCAqLworI2RlZmluZSBPVjc2NzBfUkVHX0dGSVggICAgICAgIDB4NjkgICAgLyogRml4IGdhaW4gY29udHJvbCAqLworI2RlZmluZSBPVjc2NzBfUkVHX1JHQjQ0NCAgICAgIDB4OGMgICAgLyogUkdCIDQ0NCBjb250cm9sICovCisjZGVmaW5lIE9WNzY3MF9SRUdfSEFFQ0MxICAgICAgMHg5ZiAgICAvKiBIaXN0IEFFQy9BR0MgY29udHJvbCAxICovCisjZGVmaW5lIE9WNzY3MF9SRUdfSEFFQ0MyICAgICAgMHhhMCAgICAvKiBIaXN0IEFFQy9BR0MgY29udHJvbCAyICovCisjZGVmaW5lIE9WNzY3MF9SRUdfQkQ1ME1BWCAgICAgMHhhNSAgICAvKiA1MGh6IGJhbmRpbmcgc3RlcCBsaW1pdCAqLworI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDMyAgICAgIDB4YTYgICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgMyAqLworI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDNCAgICAgIDB4YTcgICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgNCAqLworI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDNSAgICAgIDB4YTggICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgNSAqLworI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDNiAgICAgIDB4YTkgICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgNiAqLworI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDNyAgICAgIDB4YWEgICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgNyAqLworI2RlZmluZSBPVjc2NzBfUkVHX0JENjBNQVggICAgIDB4YWIgICAgLyogNjBoeiBiYW5kaW5nIHN0ZXAgbGltaXQgKi8KKworc3RydWN0IG92c2Vuc29yX3dpbmRvdyB7CisJc2hvcnQgeDsKKwlzaG9ydCB5OworCXNob3J0IHdpZHRoOworCXNob3J0IGhlaWdodDsKKy8qCWludCBmb3JtYXQ7ICovCisJc2hvcnQgcXVhcnRlcjsJCS8qIFNjYWxlIHdpZHRoIGFuZCBoZWlnaHQgZG93biAyeCAqLworCXNob3J0IGNsb2NrZGl2OwkJLyogQ2xvY2sgZGl2aXNvciBzZXR0aW5nICovCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBvdjc2NzBfYWJzX3RvX3NtKHVuc2lnbmVkIGNoYXIgdikKK3sKKwlpZiAodiA+IDEyNykKKwkJcmV0dXJuIHYgJiAweDdmOworCXJldHVybiAoMTI4IC0gdikgfCAweDgwOworfQorCisvKiBXcml0ZSBhIE9WNTE5IHJlZ2lzdGVyICovCitzdGF0aWMgaW50IHJlZ193KHN0cnVjdCBzZCAqc2QsIF9fdTE2IGluZGV4LCBfX3U4IHZhbHVlKQoreworCWludCByZXQ7CisKKwlzZC0+Z3NwY2FfZGV2LnVzYl9idWZbMF0gPSB2YWx1ZTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coc2QtPmdzcGNhX2Rldi5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoc2QtPmdzcGNhX2Rldi5kZXYsIDApLAorCQkJMSwJCQkvKiBSRVFfSU8gKG92NTE4LzUxOSkgKi8KKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTAsIGluZGV4LAorCQkJc2QtPmdzcGNhX2Rldi51c2JfYnVmLCAxLCA1MDApOworCWlmIChyZXQgPCAwKQorCQlQREVCVUcoRF9FUlIsICJXcml0ZSByZWcgWyUwMnhdICUwMnggZmFpbGVkIiwgaW5kZXgsIHZhbHVlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZWFkIGZyb20gYSBPVjUxOSByZWdpc3RlciAqLworLyogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEgKi8KK3N0YXRpYyBpbnQgcmVnX3Ioc3RydWN0IHNkICpzZCwgX191MTYgaW5kZXgpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhzZC0+Z3NwY2FfZGV2LmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZShzZC0+Z3NwY2FfZGV2LmRldiwgMCksCisJCQkxLAkJCS8qIFJFUV9JTyAqLworCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLCBpbmRleCwgc2QtPmdzcGNhX2Rldi51c2JfYnVmLCAxLCA1MDApOworCisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWZbMF07CisJZWxzZQorCQlQREVCVUcoRF9FUlIsICJSZWFkIHJlZyBbMHglMDJ4XSBmYWlsZWQiLCBpbmRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyogUmVhZCA4IHZhbHVlcyBmcm9tIGEgT1Y1MTkgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQgcmVnX3I4KHN0cnVjdCBzZCAqc2QsCisJCSAgX191MTYgaW5kZXgpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhzZC0+Z3NwY2FfZGV2LmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZShzZC0+Z3NwY2FfZGV2LmRldiwgMCksCisJCQkxLAkJCS8qIFJFUV9JTyAqLworCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLCBpbmRleCwgc2QtPmdzcGNhX2Rldi51c2JfYnVmLCA4LCA1MDApOworCisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWZbMF07CisJZWxzZQorCQlQREVCVUcoRF9FUlIsICJSZWFkIHJlZyA4IFsweCUwMnhdIGZhaWxlZCIsIGluZGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV3JpdGVzIGJpdHMgYXQgcG9zaXRpb25zIHNwZWNpZmllZCBieSBtYXNrIHRvIGFuIE9WNTF4IHJlZy4gQml0cyB0aGF0IGFyZSBpbgorICogdGhlIHNhbWUgcG9zaXRpb24gYXMgMSdzIGluICJtYXNrIiBhcmUgY2xlYXJlZCBhbmQgc2V0IHRvICJ2YWx1ZSIuIEJpdHMKKyAqIHRoYXQgYXJlIGluIHRoZSBzYW1lIHBvc2l0aW9uIGFzIDAncyBpbiAibWFzayIgYXJlIHByZXNlcnZlZCwgcmVnYXJkbGVzcworICogb2YgdGhlaXIgcmVzcGVjdGl2ZSBzdGF0ZSBpbiAidmFsdWUiLgorICovCitzdGF0aWMgaW50IHJlZ193X21hc2soc3RydWN0IHNkICpzZCwKKwkJCV9fdTE2IGluZGV4LAorCQkJX191OCB2YWx1ZSwKKwkJCV9fdTggbWFzaykKK3sKKwlpbnQgcmV0OworCV9fdTggb2xkdmFsOworCisJaWYgKG1hc2sgIT0gMHhmZikgeworCQl2YWx1ZSAmPSBtYXNrOwkJCS8qIEVuZm9yY2UgbWFzayBvbiB2YWx1ZSAqLworCQlyZXQgPSByZWdfcihzZCwgaW5kZXgpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJb2xkdmFsID0gcmV0ICYgfm1hc2s7CQkvKiBDbGVhciB0aGUgbWFza2VkIGJpdHMgKi8KKwkJdmFsdWUgfD0gb2xkdmFsOwkJLyogU2V0IHRoZSBkZXNpcmVkIGJpdHMgKi8KKwl9CisJcmV0dXJuIHJlZ193KHNkLCBpbmRleCwgdmFsdWUpOworfQorCisvKgorICogVGhlIE9WNTE4IEkyQyBJL08gcHJvY2VkdXJlIGlzIGRpZmZlcmVudCwgaGVuY2UsIHRoaXMgZnVuY3Rpb24uCisgKiBUaGlzIGlzIG5vcm1hbGx5IG9ubHkgY2FsbGVkIGZyb20gaTJjX3coKS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIGFsd2F5cyBzdWNjZWVkcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHNlbnNvciBpcyBwcmVzZW50IGFuZCB3b3JraW5nLgorICovCitzdGF0aWMgaW50IGkyY193KHN0cnVjdCBzZCAqc2QsCisJCV9fdTggcmVnLAorCQlfX3U4IHZhbHVlKQoreworCWludCByYzsKKworCVBERUJVRyhEX1VTQk8sICJpMmMgMHglMDJ4IC0+IFsweCUwMnhdIiwgdmFsdWUsIHJlZyk7CisKKwkvKiBTZWxlY3QgY2FtZXJhIHJlZ2lzdGVyICovCisJcmMgPSByZWdfdyhzZCwgUjUxeF9JMkNfU0FERFJfMywgcmVnKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBXcml0ZSAidmFsdWUiIHRvIEkyQyBkYXRhIHBvcnQgb2YgT1Y1MTEgKi8KKwlyYyA9IHJlZ193KHNkLCBSNTF4X0kyQ19EQVRBLCB2YWx1ZSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogSW5pdGlhdGUgMy1ieXRlIHdyaXRlIGN5Y2xlICovCisJcmMgPSByZWdfdyhzZCwgUjUxOF9JMkNfQ1RMLCAweDAxKTsKKworCS8qIHdhaXQgZm9yIHdyaXRlIGNvbXBsZXRlICovCisJbXNsZWVwKDQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwlyZXR1cm4gcmVnX3I4KHNkLCBSNTE4X0kyQ19DVEwpOworfQorCisvKgorICogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEKKyAqCisgKiBUaGUgT1Y1MTggSTJDIEkvTyBwcm9jZWR1cmUgaXMgZGlmZmVyZW50LCBoZW5jZSwgdGhpcyBmdW5jdGlvbi4KKyAqIFRoaXMgaXMgbm9ybWFsbHkgb25seSBjYWxsZWQgZnJvbSBpMmNfcigpLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbgorICogYWx3YXlzIHN1Y2NlZWRzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc2Vuc29yIGlzIHByZXNlbnQgYW5kIHdvcmtpbmcuCisgKi8KK3N0YXRpYyBpbnQgaTJjX3Ioc3RydWN0IHNkICpzZCwgX191OCByZWcpCit7CisJaW50IHJjLCB2YWx1ZTsKKworCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KKwlyYyA9IHJlZ193KHNkLCBSNTF4X0kyQ19TQUREUl8yLCByZWcpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIEluaXRpYXRlIDItYnl0ZSB3cml0ZSBjeWNsZSAqLworCXJjID0gcmVnX3coc2QsIFI1MThfSTJDX0NUTCwgMHgwMyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogSW5pdGlhdGUgMi1ieXRlIHJlYWQgY3ljbGUgKi8KKwlyYyA9IHJlZ193KHNkLCBSNTE4X0kyQ19DVEwsIDB4MDUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwl2YWx1ZSA9IHJlZ19yKHNkLCBSNTF4X0kyQ19EQVRBKTsKKwlQREVCVUcoRF9VU0JJLCAiaTJjIFsweCUwMlhdIC0+IDB4JTAyWCIsIHJlZywgdmFsdWUpOworCXJldHVybiB2YWx1ZTsKK30KKworLyogV3JpdGVzIGJpdHMgYXQgcG9zaXRpb25zIHNwZWNpZmllZCBieSBtYXNrIHRvIGFuIEkyQyByZWcuIEJpdHMgdGhhdCBhcmUgaW4KKyAqIHRoZSBzYW1lIHBvc2l0aW9uIGFzIDEncyBpbiAibWFzayIgYXJlIGNsZWFyZWQgYW5kIHNldCB0byAidmFsdWUiLiBCaXRzCisgKiB0aGF0IGFyZSBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyAwJ3MgaW4gIm1hc2siIGFyZSBwcmVzZXJ2ZWQsIHJlZ2FyZGxlc3MKKyAqIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgaW4gInZhbHVlIi4KKyAqLworc3RhdGljIGludCBpMmNfd19tYXNrKHN0cnVjdCBzZCAqc2QsCisJCSAgIF9fdTggcmVnLAorCQkgICBfX3U4IHZhbHVlLAorCQkgICBfX3U4IG1hc2spCit7CisJaW50IHJjOworCV9fdTggb2xkdmFsOworCisJdmFsdWUgJj0gbWFzazsJCQkvKiBFbmZvcmNlIG1hc2sgb24gdmFsdWUgKi8KKwlyYyA9IGkyY19yKHNkLCByZWcpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwlvbGR2YWwgPSByYyAmIH5tYXNrOwkJLyogQ2xlYXIgdGhlIG1hc2tlZCBiaXRzICovCisJdmFsdWUgfD0gb2xkdmFsOwkJLyogU2V0IHRoZSBkZXNpcmVkIGJpdHMgKi8KKwlyZXR1cm4gaTJjX3coc2QsIHJlZywgdmFsdWUpOworfQorCisvKiBUZW1wb3JhcmlseSBzdG9wcyBPVjUxMSBmcm9tIGZ1bmN0aW9uaW5nLiBNdXN0IGRvIHRoaXMgYmVmb3JlIGNoYW5naW5nCisgKiByZWdpc3RlcnMgd2hpbGUgdGhlIGNhbWVyYSBpcyBzdHJlYW1pbmcgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG92NTF4X3N0b3Aoc3RydWN0IHNkICpzZCkKK3sKKwlQREVCVUcoRF9TVFJFQU0sICJzdG9wcGluZyIpOworCXNkLT5zdG9wcGVkID0gMTsKKwlyZXR1cm4gcmVnX3coc2QsIE9WNTE5X1NZU19SRVNFVDEsIDB4MGYpOworfQorCisvKiBSZXN0YXJ0cyBPVjUxMSBhZnRlciBvdjUxMV9zdG9wKCkgaXMgY2FsbGVkLiBIYXMgbm8gZWZmZWN0IGlmIGl0IGlzIG5vdAorICogYWN0dWFsbHkgc3RvcHBlZCAoZm9yIHBlcmZvcm1hbmNlKS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG92NTF4X3Jlc3RhcnQoc3RydWN0IHNkICpzZCkKK3sKKwlQREVCVUcoRF9TVFJFQU0sICJyZXN0YXJ0aW5nIik7CisJaWYgKCFzZC0+c3RvcHBlZCkKKwkJcmV0dXJuIDA7CisJc2QtPnN0b3BwZWQgPSAwOworCisJLyogUmVpbml0aWFsaXplIHRoZSBzdHJlYW0gKi8KKwlyZXR1cm4gcmVnX3coc2QsIE9WNTE5X1NZU19SRVNFVDEsIDB4MDApOworfQorCisvKiBUaGlzIGRvZXMgYW4gaW5pdGlhbCByZXNldCBvZiBhbiBPbW5pVmlzaW9uIHNlbnNvciBhbmQgZW5zdXJlcyB0aGF0IEkyQworICogaXMgc3luY2hyb25pemVkLiBSZXR1cm5zIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaW5pdF9vdl9zZW5zb3Ioc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgaSwgc3VjY2VzczsKKworCS8qIFJlc2V0IHRoZSBzZW5zb3IgKi8KKwlpZiAoaTJjX3coc2QsIDB4MTIsIDB4ODApIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBXYWl0IGZvciBpdCB0byBpbml0aWFsaXplICovCisJbXNsZWVwKDE1MCk7CisKKwlmb3IgKGkgPSAwLCBzdWNjZXNzID0gMDsgaSA8IGkyY19kZXRlY3RfdHJpZXMgJiYgIXN1Y2Nlc3M7IGkrKykgeworCQlpZiAoaTJjX3Ioc2QsIE9WNzYxMF9SRUdfSURfSElHSCkgPT0gMHg3ZiAmJgorCQkgICAgaTJjX3Ioc2QsIE9WNzYxMF9SRUdfSURfTE9XKSA9PSAweGEyKSB7CisJCQlzdWNjZXNzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogUmVzZXQgdGhlIHNlbnNvciAqLworCQlpZiAoaTJjX3coc2QsIDB4MTIsIDB4ODApIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQkvKiBXYWl0IGZvciBpdCB0byBpbml0aWFsaXplICovCisJCW1zbGVlcCgxNTApOworCQkvKiBEdW1teSByZWFkIHRvIHN5bmMgSTJDICovCisJCWlmIChpMmNfcihzZCwgMHgwMCkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJfQorCWlmICghc3VjY2VzcykKKwkJcmV0dXJuIC1FSU87CisJUERFQlVHKERfUFJPQkUsICJJMkMgc3luY2VkIGluICVkIGF0dGVtcHQocykiLCBpKTsKKwlyZXR1cm4gMDsKK30KKworLyogU3dpdGNoIG9uIHN0YW5kYXJkIEpQRUcgY29tcHJlc3Npb24uIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQgb3Y1MTlfaW5pdF9jb21wcmVzc2lvbihzdHJ1Y3Qgc2QgKnNkKQoreworCWlmICghc2QtPmNvbXByZXNzX2luaXRlZCkgeworCQlpZiAocmVnX3dfbWFzayhzZCwgT1Y1MTlfU1lTX0VOX0NMSzEsIDEgPDwgMiwgMSA8PCAyKSA8IDApIHsKKwkJCVBERUJVRyhEX0VSUiwgIkVycm9yIHN3aXRjaGluZyB0byBjb21wcmVzc2VkIG1vZGUiKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCXNkLT5jb21wcmVzc19pbml0ZWQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogU2V0IHRoZSByZWFkIGFuZCB3cml0ZSBzbGF2ZSBJRHMuIFRoZSAic2xhdmUiIGFyZ3VtZW50IGlzIHRoZSB3cml0ZSBzbGF2ZSwKKyAqIGFuZCB0aGUgcmVhZCBzbGF2ZSB3aWxsIGJlIHNldCB0byAoc2xhdmUgKyAxKS4KKyAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBpMmMgSS9PIGZ1bmN0aW9ucy4KKyAqIFNldHMgSTJDIHJlYWQgYW5kIHdyaXRlIHNsYXZlIElEcy4gUmV0dXJucyA8MCBmb3IgZXJyb3IKKyAqLworc3RhdGljIGludCBvdjUxeF9zZXRfc2xhdmVfaWRzKHN0cnVjdCBzZCAqc2QsCisJCQkJX191OCBzbGF2ZSkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHJlZ193KHNkLCBSNTF4X0kyQ19XX1NJRCwgc2xhdmUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwlyZXR1cm4gcmVnX3coc2QsIFI1MXhfSTJDX1JfU0lELCBzbGF2ZSArIDEpOworfQorCitzdHJ1Y3Qgb3ZfcmVndmFscyB7CisJX191OCByZWc7CisJX191OCB2YWw7Cit9Oworc3RydWN0IG92X2kyY19yZWd2YWxzIHsKKwlfX3U4IHJlZzsKKwlfX3U4IHZhbDsKK307CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVndmFscyhzdHJ1Y3Qgc2QgKnNkLAorCQkJIGNvbnN0IHN0cnVjdCBvdl9yZWd2YWxzICpyZWd2YWxzLAorCQkJIGludCBuKQoreworCWludCByYzsKKworCXdoaWxlICgtLW4gPj0gMCkgeworCQlyYyA9IHJlZ193KHNkLCByZWd2YWxzLT5yZWcsIHJlZ3ZhbHMtPnZhbCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCXJlZ3ZhbHMrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfaTJjX3JlZ3ZhbHMoc3RydWN0IHNkICpzZCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG92X2kyY19yZWd2YWxzICpyZWd2YWxzLAorCQkJICAgICBpbnQgbikKK3sKKwlpbnQgcmM7CisKKwl3aGlsZSAoLS1uID49IDApIHsKKwkJcmMgPSBpMmNfdyhzZCwgcmVndmFscy0+cmVnLCByZWd2YWxzLT52YWwpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQlyZWd2YWxzKys7CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE9WNTExIGFuZCBzZW5zb3IgY29uZmlndXJhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WODExMCwgT1Y4NjEwIHNlbnNvci4gVGhlIE9WODExMCB1c2VzCisgKiB0aGUgc2FtZSByZWdpc3RlciBzZXR0aW5ncyBhcyB0aGUgT1Y4NjEwLCBzaW5jZSB0aGV5IGFyZSB2ZXJ5IHNpbWlsYXIuCisgKi8KK3N0YXRpYyBpbnQgb3Y4eHgwX2NvbmZpZ3VyZShzdHJ1Y3Qgc2QgKnNkKQoreworCWludCByYzsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG92X2kyY19yZWd2YWxzIG5vcm1fODYxMFtdID0geworCQl7IDB4MTIsIDB4ODAgfSwKKwkJeyAweDAwLCAweDAwIH0sCisJCXsgMHgwMSwgMHg4MCB9LAorCQl7IDB4MDIsIDB4ODAgfSwKKwkJeyAweDAzLCAweGMwIH0sCisJCXsgMHgwNCwgMHgzMCB9LAorCQl7IDB4MDUsIDB4MzAgfSwgLyogd2FzIDB4MTAsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDA2LCAweDcwIH0sIC8qIHdhcyAweDgwLCBuZXcgZnJvbSB3aW5kcnYgMDkwNDAzICovCisJCXsgMHgwYSwgMHg4NiB9LAorCQl7IDB4MGIsIDB4YjAgfSwKKwkJeyAweDBjLCAweDIwIH0sCisJCXsgMHgwZCwgMHgyMCB9LAorCQl7IDB4MTEsIDB4MDEgfSwKKwkJeyAweDEyLCAweDI1IH0sCisJCXsgMHgxMywgMHgwMSB9LAorCQl7IDB4MTQsIDB4MDQgfSwKKwkJeyAweDE1LCAweDAxIH0sIC8qIExpbiBhbmQgV2luIHRoaW5rIGRpZmZlcmVudCBhYm91dCBVViBvcmRlciAqLworCQl7IDB4MTYsIDB4MDMgfSwKKwkJeyAweDE3LCAweDM4IH0sIC8qIHdhcyAweDJmLCBuZXcgZnJvbSB3aW5kcnYgMDkwNDAzICovCisJCXsgMHgxOCwgMHhlYSB9LCAvKiB3YXMgMHhjZiwgbmV3IGZyb20gd2luZHJ2IDA5MDQwMyAqLworCQl7IDB4MTksIDB4MDIgfSwgLyogd2FzIDB4MDYsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDFhLCAweGY1IH0sCisJCXsgMHgxYiwgMHgwMCB9LAorCQl7IDB4MjAsIDB4ZDAgfSwgLyogd2FzIDB4OTAsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDIzLCAweGMwIH0sIC8qIHdhcyAweDAwLCBuZXcgZnJvbSB3aW5kcnYgMDkwNDAzICovCisJCXsgMHgyNCwgMHgzMCB9LCAvKiB3YXMgMHgxZCwgbmV3IGZyb20gd2luZHJ2IDA5MDQwMyAqLworCQl7IDB4MjUsIDB4NTAgfSwgLyogd2FzIDB4NTcsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDI2LCAweGEyIH0sCisJCXsgMHgyNywgMHhlYSB9LAorCQl7IDB4MjgsIDB4MDAgfSwKKwkJeyAweDI5LCAweDAwIH0sCisJCXsgMHgyYSwgMHg4MCB9LAorCQl7IDB4MmIsIDB4YzggfSwgLyogd2FzIDB4Y2MsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDJjLCAweGFjIH0sCisJCXsgMHgyZCwgMHg0NSB9LCAvKiB3YXMgMHhkNSwgbmV3IGZyb20gd2luZHJ2IDA5MDQwMyAqLworCQl7IDB4MmUsIDB4ODAgfSwKKwkJeyAweDJmLCAweDE0IH0sIC8qIHdhcyAweDAxLCBuZXcgZnJvbSB3aW5kcnYgMDkwNDAzICovCisJCXsgMHg0YywgMHgwMCB9LAorCQl7IDB4NGQsIDB4MzAgfSwgLyogd2FzIDB4MTAsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDYwLCAweDAyIH0sIC8qIHdhcyAweDAxLCBuZXcgZnJvbSB3aW5kcnYgMDkwNDAzICovCisJCXsgMHg2MSwgMHgwMCB9LCAvKiB3YXMgMHgwOSwgbmV3IGZyb20gd2luZHJ2IDA5MDQwMyAqLworCQl7IDB4NjIsIDB4NWYgfSwgLyogd2FzIDB4ZDcsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDYzLCAweGZmIH0sCisJCXsgMHg2NCwgMHg1MyB9LCAvKiBuZXcgd2luZHJ2IDA5MDQwMyBzYXlzIDB4NTcsCisJCQkJICogbWF5YmUgdGhhdHMgd3JvbmcgKi8KKwkJeyAweDY1LCAweDAwIH0sCisJCXsgMHg2NiwgMHg1NSB9LAorCQl7IDB4NjcsIDB4YjAgfSwKKwkJeyAweDY4LCAweGMwIH0sIC8qIHdhcyAweGFmLCBuZXcgZnJvbSB3aW5kcnYgMDkwNDAzICovCisJCXsgMHg2OSwgMHgwMiB9LAorCQl7IDB4NmEsIDB4MjIgfSwKKwkJeyAweDZiLCAweDAwIH0sCisJCXsgMHg2YywgMHg5OSB9LCAvKiB3YXMgMHg4MCwgb2xkIHdpbmRydiBzYXlzIDB4MDAsIGJ1dAorCQkJCSAgIGRlbGV0aW5nIGJpdDcgY29sb3JzIHRoZSBmaXJzdCBpbWFnZXMgcmVkICovCisJCXsgMHg2ZCwgMHgxMSB9LCAvKiB3YXMgMHgwMCwgbmV3IGZyb20gd2luZHJ2IDA5MDQwMyAqLworCQl7IDB4NmUsIDB4MTEgfSwgLyogd2FzIDB4MDAsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDZmLCAweDAxIH0sCisJCXsgMHg3MCwgMHg4YiB9LAorCQl7IDB4NzEsIDB4MDAgfSwKKwkJeyAweDcyLCAweDE0IH0sCisJCXsgMHg3MywgMHg1NCB9LAorCQl7IDB4NzQsIDB4MDAgfSwvKiAweDYwPyAtIHdhcyAweDAwLCBuZXcgZnJvbSB3aW5kcnYgMDkwNDAzICovCisJCXsgMHg3NSwgMHgwZSB9LAorCQl7IDB4NzYsIDB4MDIgfSwgLyogd2FzIDB4MDIsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDc3LCAweGZmIH0sCisJCXsgMHg3OCwgMHg4MCB9LAorCQl7IDB4NzksIDB4ODAgfSwKKwkJeyAweDdhLCAweDgwIH0sCisJCXsgMHg3YiwgMHgxMCB9LCAvKiB3YXMgMHgxMywgbmV3IGZyb20gd2luZHJ2IDA5MDQwMyAqLworCQl7IDB4N2MsIDB4MDAgfSwKKwkJeyAweDdkLCAweDA4IH0sIC8qIHdhcyAweDA5LCBuZXcgZnJvbSB3aW5kcnYgMDkwNDAzICovCisJCXsgMHg3ZSwgMHgwOCB9LCAvKiB3YXMgMHhjMCwgbmV3IGZyb20gd2luZHJ2IDA5MDQwMyAqLworCQl7IDB4N2YsIDB4ZmIgfSwKKwkJeyAweDgwLCAweDI4IH0sCisJCXsgMHg4MSwgMHgwMCB9LAorCQl7IDB4ODIsIDB4MjMgfSwKKwkJeyAweDgzLCAweDBiIH0sCisJCXsgMHg4NCwgMHgwMCB9LAorCQl7IDB4ODUsIDB4NjIgfSwgLyogd2FzIDB4NjEsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweDg2LCAweGM5IH0sCisJCXsgMHg4NywgMHgwMCB9LAorCQl7IDB4ODgsIDB4MDAgfSwKKwkJeyAweDg5LCAweDAxIH0sCisJCXsgMHgxMiwgMHgyMCB9LAorCQl7IDB4MTIsIDB4MjUgfSwgLyogd2FzIDB4MjQsIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwl9OworCisJUERFQlVHKERfUFJPQkUsICJzdGFydGluZyBvdjh4eDAgY29uZmlndXJhdGlvbiIpOworCisJaWYgKGluaXRfb3Zfc2Vuc29yKHNkKSA8IDApCisJCVBERUJVRyhEX0VSUnxEX1BST0JFLCAiRmFpbGVkIHRvIHJlYWQgc2Vuc29yIElEIik7CisJZWxzZQorCQlQREVCVUcoRF9QUk9CRSwgIk9WODZ4MCBpbml0aWFsaXplZCIpOworCisJLyogRGV0ZWN0IHNlbnNvciAoc3ViKXR5cGUgKi8KKwlyYyA9IGkyY19yKHNkLCBPVjc2MTBfUkVHX0NPTV9JKTsKKwlpZiAocmMgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICgocmMgJiAzKSA9PSAxKSB7CisJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WODYxMCIpOworCQlzZC0+c2Vuc29yID0gU0VOX09WODYxMDsKKwl9IGVsc2UgeworCQlQREVCVUcoRF9FUlIsICJVbmtub3duIGltYWdlIHNlbnNvciB2ZXJzaW9uOiAlZCIsIHJjICYgMyk7CisJCXJldHVybiAtMTsKKwl9CisJUERFQlVHKERfUFJPQkUsICJXcml0aW5nIDg2MTAgcmVnaXN0ZXJzIik7CisJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLAorCQkJbm9ybV84NjEwLAorCQkJc2l6ZW9mIG5vcm1fODYxMCAvIHNpemVvZiBub3JtXzg2MTBbMF0pKQorCQlyZXR1cm4gLTE7CisKKwkvKiBTZXQgc2Vuc29yLXNwZWNpZmljIHZhcnMgKi8KKwlzZC0+bWF4d2lkdGggPSA2NDA7CisJc2QtPm1heGhlaWdodCA9IDQ4MDsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1Y3NjEwLCBPVjc2MjAsIG9yIE9WNzZCRSBzZW5zb3IuIFRoZSBPVjc2QkUgdXNlcworICogdGhlIHNhbWUgcmVnaXN0ZXIgc2V0dGluZ3MgYXMgdGhlIE9WNzYxMCwgc2luY2UgdGhleSBhcmUgdmVyeSBzaW1pbGFyLgorICovCitzdGF0aWMgaW50IG92N3h4MF9jb25maWd1cmUoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgcmMsIGhpZ2gsIGxvdzsKKworCS8qIExhd3JlbmNlIEdsYWlzdGVyIDxsZ0BqZm0uYmMuY2E+IHJlcG9ydHM6CisJICoKKwkgKiBSZWdpc3RlciAweDBmIGluIHRoZSA3NjEwIGhhcyB0aGUgZm9sbG93aW5nIGVmZmVjdHM6CisJICoKKwkgKiAweDg1IChBRUMgbWV0aG9kIDEpOiBCZXN0IG92ZXJhbGwsIGdvb2QgY29udHJhc3QgcmFuZ2UKKwkgKiAweDQ1IChBRUMgbWV0aG9kIDIpOiBWZXJ5IG92ZXJleHBvc2VkCisJICogMHhhNSAoc3BlYyBzaGVldCBkZWZhdWx0KTogT2ssIGJ1dCB0aGUgYmxhY2sgbGV2ZWwgaXMKKwkgKglzaGlmdGVkIHJlc3VsdGluZyBpbiBsb3NzIG9mIGNvbnRyYXN0CisJICogMHgwNSAob2xkIGRyaXZlciBzZXR0aW5nKTogdmVyeSBvdmVyZXhwb3NlZCwgdG9vIG11Y2gKKwkgKgljb250cmFzdAorCSAqLworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfaTJjX3JlZ3ZhbHMgbm9ybV83NjEwW10gPSB7CisJCXsgMHgxMCwgMHhmZiB9LAorCQl7IDB4MTYsIDB4MDYgfSwKKwkJeyAweDI4LCAweDI0IH0sCisJCXsgMHgyYiwgMHhhYyB9LAorCQl7IDB4MTIsIDB4MDAgfSwKKwkJeyAweDM4LCAweDgxIH0sCisJCXsgMHgyOCwgMHgyNCB9LAkvKiAwYyAqLworCQl7IDB4MGYsIDB4ODUgfSwJLyogbGcncyBzZXR0aW5nICovCisJCXsgMHgxNSwgMHgwMSB9LAorCQl7IDB4MjAsIDB4MWMgfSwKKwkJeyAweDIzLCAweDJhIH0sCisJCXsgMHgyNCwgMHgxMCB9LAorCQl7IDB4MjUsIDB4OGEgfSwKKwkJeyAweDI2LCAweGEyIH0sCisJCXsgMHgyNywgMHhjMiB9LAorCQl7IDB4MmEsIDB4MDQgfSwKKwkJeyAweDJjLCAweGZlIH0sCisJCXsgMHgyZCwgMHg5MyB9LAorCQl7IDB4MzAsIDB4NzEgfSwKKwkJeyAweDMxLCAweDYwIH0sCisJCXsgMHgzMiwgMHgyNiB9LAorCQl7IDB4MzMsIDB4MjAgfSwKKwkJeyAweDM0LCAweDQ4IH0sCisJCXsgMHgxMiwgMHgyNCB9LAorCQl7IDB4MTEsIDB4MDEgfSwKKwkJeyAweDBjLCAweDI0IH0sCisJCXsgMHgwZCwgMHgyNCB9LAorCX07CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG92X2kyY19yZWd2YWxzIG5vcm1fNzYyMFtdID0geworCQl7IDB4MDAsIDB4MDAgfSwJCS8qIGdhaW4gKi8KKwkJeyAweDAxLCAweDgwIH0sCQkvKiBibHVlIGdhaW4gKi8KKwkJeyAweDAyLCAweDgwIH0sCQkvKiByZWQgZ2FpbiAqLworCQl7IDB4MDMsIDB4YzAgfSwJCS8qIE9WNzY3MF9SRUdfVlJFRiAqLworCQl7IDB4MDYsIDB4NjAgfSwKKwkJeyAweDA3LCAweDAwIH0sCisJCXsgMHgwYywgMHgyNCB9LAorCQl7IDB4MGMsIDB4MjQgfSwKKwkJeyAweDBkLCAweDI0IH0sCisJCXsgMHgxMSwgMHgwMSB9LAorCQl7IDB4MTIsIDB4MjQgfSwKKwkJeyAweDEzLCAweDAxIH0sCisJCXsgMHgxNCwgMHg4NCB9LAorCQl7IDB4MTUsIDB4MDEgfSwKKwkJeyAweDE2LCAweDAzIH0sCisJCXsgMHgxNywgMHgyZiB9LAorCQl7IDB4MTgsIDB4Y2YgfSwKKwkJeyAweDE5LCAweDA2IH0sCisJCXsgMHgxYSwgMHhmNSB9LAorCQl7IDB4MWIsIDB4MDAgfSwKKwkJeyAweDIwLCAweDE4IH0sCisJCXsgMHgyMSwgMHg4MCB9LAorCQl7IDB4MjIsIDB4ODAgfSwKKwkJeyAweDIzLCAweDAwIH0sCisJCXsgMHgyNiwgMHhhMiB9LAorCQl7IDB4MjcsIDB4ZWEgfSwKKwkJeyAweDI4LCAweDIwIH0sCisJCXsgMHgyOSwgMHgwMCB9LAorCQl7IDB4MmEsIDB4MTAgfSwKKwkJeyAweDJiLCAweDAwIH0sCisJCXsgMHgyYywgMHg4OCB9LAorCQl7IDB4MmQsIDB4OTEgfSwKKwkJeyAweDJlLCAweDgwIH0sCisJCXsgMHgyZiwgMHg0NCB9LAorCQl7IDB4NjAsIDB4MjcgfSwKKwkJeyAweDYxLCAweDAyIH0sCisJCXsgMHg2MiwgMHg1ZiB9LAorCQl7IDB4NjMsIDB4ZDUgfSwKKwkJeyAweDY0LCAweDU3IH0sCisJCXsgMHg2NSwgMHg4MyB9LAorCQl7IDB4NjYsIDB4NTUgfSwKKwkJeyAweDY3LCAweDkyIH0sCisJCXsgMHg2OCwgMHhjZiB9LAorCQl7IDB4NjksIDB4NzYgfSwKKwkJeyAweDZhLCAweDIyIH0sCisJCXsgMHg2YiwgMHgwMCB9LAorCQl7IDB4NmMsIDB4MDIgfSwKKwkJeyAweDZkLCAweDQ0IH0sCisJCXsgMHg2ZSwgMHg4MCB9LAorCQl7IDB4NmYsIDB4MWQgfSwKKwkJeyAweDcwLCAweDhiIH0sCisJCXsgMHg3MSwgMHgwMCB9LAorCQl7IDB4NzIsIDB4MTQgfSwKKwkJeyAweDczLCAweDU0IH0sCisJCXsgMHg3NCwgMHgwMCB9LAorCQl7IDB4NzUsIDB4OGUgfSwKKwkJeyAweDc2LCAweDAwIH0sCisJCXsgMHg3NywgMHhmZiB9LAorCQl7IDB4NzgsIDB4ODAgfSwKKwkJeyAweDc5LCAweDgwIH0sCisJCXsgMHg3YSwgMHg4MCB9LAorCQl7IDB4N2IsIDB4ZTIgfSwKKwkJeyAweDdjLCAweDAwIH0sCisJfTsKKworCS8qIDc2NDAgYW5kIDc2NDguIFRoZSBkZWZhdWx0cyBzaG91bGQgYmUgT0sgZm9yIG1vc3QgcmVnaXN0ZXJzLiAqLworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfaTJjX3JlZ3ZhbHMgbm9ybV83NjQwW10gPSB7CisJCXsgMHgxMiwgMHg4MCB9LAorCQl7IDB4MTIsIDB4MTQgfSwKKwl9OworCisJLyogNzY3MC4gRGVmYXVsdHMgdGFrZW4gZnJvbSBPbW5pVmlzaW9uIHByb3ZpZGVkIGRhdGEsCisJKiAgYXMgcHJvdmlkZWQgYnkgSm9uYXRoYW4gQ29yYmV0IG9mIE9MUEMJCSovCisJc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9pMmNfcmVndmFscyBub3JtXzc2NzBbXSA9IHsKKwkJeyBPVjc2NzBfUkVHX0NPTTcsIE9WNzY3MF9DT003X1JFU0VUIH0sCisJCXsgT1Y3NjcwX1JFR19UU0xCLCAweDA0IH0sCQkvKiBPViAqLworCQl7IE9WNzY3MF9SRUdfQ09NNywgT1Y3NjcwX0NPTTdfRk1UX1ZHQSB9LCAvKiBWR0EgKi8KKwkJeyBPVjc2NzBfUkVHX0NMS1JDLCAweDEgfSwKKwkvKgorCSAqIFNldCB0aGUgaGFyZHdhcmUgd2luZG93LiAgVGhlc2UgdmFsdWVzIGZyb20gT1YgZG9uJ3QgZW50aXJlbHkKKwkgKiBtYWtlIHNlbnNlIC0gaHN0b3AgaXMgbGVzcyB0aGFuIGhzdGFydC4gIEJ1dCB0aGV5IHdvcmsuLi4KKwkgKi8KKwkJeyBPVjc2NzBfUkVHX0hTVEFSVCwgMHgxMyB9LAl7IE9WNzY3MF9SRUdfSFNUT1AsIDB4MDEgfSwKKwkJeyBPVjc2NzBfUkVHX0hSRUYsIDB4YjYgfSwJeyBPVjc2NzBfUkVHX1ZTVEFSVCwgMHgwMiB9LAorCQl7IE9WNzY3MF9SRUdfVlNUT1AsIDB4N2EgfSwJeyBPVjc2NzBfUkVHX1ZSRUYsIDB4MGEgfSwKKworCQl7IE9WNzY3MF9SRUdfQ09NMywgMCB9LAl7IE9WNzY3MF9SRUdfQ09NMTQsIDAgfSwKKwkvKiBNeXN0ZXJ5IHNjYWxpbmcgbnVtYmVycyAqLworCQl7IDB4NzAsIDB4M2EgfSwJCXsgMHg3MSwgMHgzNSB9LAorCQl7IDB4NzIsIDB4MTEgfSwJCXsgMHg3MywgMHhmMCB9LAorCQl7IDB4YTIsIDB4MDIgfSwKKy8qIGpmbSAqLworLyogeyBPVjc2NzBfUkVHX0NPTTEwLCAweDAgfSwgKi8KKworCS8qIEdhbW1hIGN1cnZlIHZhbHVlcyAqLworCQl7IDB4N2EsIDB4MjAgfSwKKy8qIGpmbTp3aW4gN2I9MWMgKi8KKwkJeyAweDdiLCAweDEwIH0sCisvKiBqZm06d2luIDdjPTI4ICovCisJCXsgMHg3YywgMHgxZSB9LAorLyogamZtOndpbiA3ZD0zYyAqLworCQl7IDB4N2QsIDB4MzUgfSwKKwkJeyAweDdlLCAweDVhIH0sCQl7IDB4N2YsIDB4NjkgfSwKKwkJeyAweDgwLCAweDc2IH0sCQl7IDB4ODEsIDB4ODAgfSwKKwkJeyAweDgyLCAweDg4IH0sCQl7IDB4ODMsIDB4OGYgfSwKKwkJeyAweDg0LCAweDk2IH0sCQl7IDB4ODUsIDB4YTMgfSwKKwkJeyAweDg2LCAweGFmIH0sCQl7IDB4ODcsIDB4YzQgfSwKKwkJeyAweDg4LCAweGQ3IH0sCQl7IDB4ODksIDB4ZTggfSwKKworCS8qIEFHQyBhbmQgQUVDIHBhcmFtZXRlcnMuICBOb3RlIHdlIHN0YXJ0IGJ5IGRpc2FibGluZyB0aG9zZSBmZWF0dXJlcywKKwkgICB0aGVuIHR1cm4gdGhlbSBvbmx5IGFmdGVyIHR3ZWFraW5nIHRoZSB2YWx1ZXMuICovCisJCXsgT1Y3NjcwX1JFR19DT004LCBPVjc2NzBfQ09NOF9GQVNUQUVDCisJCQkJIHwgT1Y3NjcwX0NPTThfQUVDU1RFUAorCQkJCSB8IE9WNzY3MF9DT004X0JGSUxUIH0sCisJCXsgT1Y3NjcwX1JFR19HQUlOLCAwIH0sCXsgT1Y3NjcwX1JFR19BRUNILCAwIH0sCisJCXsgT1Y3NjcwX1JFR19DT000LCAweDQwIH0sIC8qIG1hZ2ljIHJlc2VydmVkIGJpdCAqLworLyogamZtOndpbiAxND0zOCAqLworCQl7IE9WNzY3MF9SRUdfQ09NOSwgMHgxOCB9LCAvKiA0eCBnYWluICsgbWFnaWMgcnN2ZCBiaXQgKi8KKwkJeyBPVjc2NzBfUkVHX0JENTBNQVgsIDB4MDUgfSwJeyBPVjc2NzBfUkVHX0JENjBNQVgsIDB4MDcgfSwKKwkJeyBPVjc2NzBfUkVHX0FFVywgMHg5NSB9LAl7IE9WNzY3MF9SRUdfQUVCLCAweDMzIH0sCisJCXsgT1Y3NjcwX1JFR19WUFQsIDB4ZTMgfSwJeyBPVjc2NzBfUkVHX0hBRUNDMSwgMHg3OCB9LAorCQl7IE9WNzY3MF9SRUdfSEFFQ0MyLCAweDY4IH0sCisvKiBqZm06d2luIGExPTBiICovCisJCXsgMHhhMSwgMHgwMyB9LCAvKiBtYWdpYyAqLworCQl7IE9WNzY3MF9SRUdfSEFFQ0MzLCAweGQ4IH0sCXsgT1Y3NjcwX1JFR19IQUVDQzQsIDB4ZDggfSwKKwkJeyBPVjc2NzBfUkVHX0hBRUNDNSwgMHhmMCB9LAl7IE9WNzY3MF9SRUdfSEFFQ0M2LCAweDkwIH0sCisJCXsgT1Y3NjcwX1JFR19IQUVDQzcsIDB4OTQgfSwKKwkJeyBPVjc2NzBfUkVHX0NPTTgsIE9WNzY3MF9DT004X0ZBU1RBRUMKKwkJCQl8IE9WNzY3MF9DT004X0FFQ1NURVAKKwkJCQl8IE9WNzY3MF9DT004X0JGSUxUCisJCQkJfCBPVjc2NzBfQ09NOF9BR0MKKwkJCQl8IE9WNzY3MF9DT004X0FFQyB9LAorCisJLyogQWxtb3N0IGFsbCBvZiB0aGVzZSBhcmUgbWFnaWMgInJlc2VydmVkIiB2YWx1ZXMuICAqLworCQl7IE9WNzY3MF9SRUdfQ09NNSwgMHg2MSB9LAl7IE9WNzY3MF9SRUdfQ09NNiwgMHg0YiB9LAorCQl7IDB4MTYsIDB4MDIgfSwKKy8qIGpmbSAqLworLyoJCXsgT1Y3NjcwX1JFR19NVkZQLCAweDA3fE9WNzY3MF9NVkZQX01JUlJPUiB9LCAqLworCQl7IE9WNzY3MF9SRUdfTVZGUCwgMHgwNyB9LAorCQl7IDB4MjEsIDB4MDIgfSwJCXsgMHgyMiwgMHg5MSB9LAorCQl7IDB4MjksIDB4MDcgfSwJCXsgMHgzMywgMHgwYiB9LAorCQl7IDB4MzUsIDB4MGIgfSwJCXsgMHgzNywgMHgxZCB9LAorCQl7IDB4MzgsIDB4NzEgfSwJCXsgMHgzOSwgMHgyYSB9LAorCQl7IE9WNzY3MF9SRUdfQ09NMTIsIDB4NzggfSwJeyAweDRkLCAweDQwIH0sCisJCXsgMHg0ZSwgMHgyMCB9LAkJeyBPVjc2NzBfUkVHX0dGSVgsIDAgfSwKKwkJeyAweDZiLCAweDRhIH0sCQl7IDB4NzQsIDB4MTAgfSwKKwkJeyAweDhkLCAweDRmIH0sCQl7IDB4OGUsIDAgfSwKKwkJeyAweDhmLCAwIH0sCQl7IDB4OTAsIDAgfSwKKwkJeyAweDkxLCAwIH0sCQl7IDB4OTYsIDAgfSwKKwkJeyAweDlhLCAwIH0sCQl7IDB4YjAsIDB4ODQgfSwKKwkJeyAweGIxLCAweDBjIH0sCQl7IDB4YjIsIDB4MGUgfSwKKwkJeyAweGIzLCAweDgyIH0sCQl7IDB4YjgsIDB4MGEgfSwKKworCS8qIE1vcmUgcmVzZXJ2ZWQgbWFnaWMsIHNvbWUgb2Ygd2hpY2ggdHdlYWtzIHdoaXRlIGJhbGFuY2UgKi8KKwkJeyAweDQzLCAweDBhIH0sCQl7IDB4NDQsIDB4ZjAgfSwKKwkJeyAweDQ1LCAweDM0IH0sCQl7IDB4NDYsIDB4NTggfSwKKwkJeyAweDQ3LCAweDI4IH0sCQl7IDB4NDgsIDB4M2EgfSwKKwkJeyAweDU5LCAweDg4IH0sCQl7IDB4NWEsIDB4ODggfSwKKwkJeyAweDViLCAweDQ0IH0sCQl7IDB4NWMsIDB4NjcgfSwKKwkJeyAweDVkLCAweDQ5IH0sCQl7IDB4NWUsIDB4MGUgfSwKKwkJeyAweDZjLCAweDBhIH0sCQl7IDB4NmQsIDB4NTUgfSwKKwkJeyAweDZlLCAweDExIH0sCQl7IDB4NmYsIDB4OWYgfSwKKwkJCQkJCS8qICI5ZSBmb3IgYWR2YW5jZSBBV0IiICovCisJCXsgMHg2YSwgMHg0MCB9LAkJeyBPVjc2NzBfUkVHX0JMVUUsIDB4NDAgfSwKKwkJeyBPVjc2NzBfUkVHX1JFRCwgMHg2MCB9LAorCQl7IE9WNzY3MF9SRUdfQ09NOCwgT1Y3NjcwX0NPTThfRkFTVEFFQworCQkJCXwgT1Y3NjcwX0NPTThfQUVDU1RFUAorCQkJCXwgT1Y3NjcwX0NPTThfQkZJTFQKKwkJCQl8IE9WNzY3MF9DT004X0FHQworCQkJCXwgT1Y3NjcwX0NPTThfQUVDCisJCQkJfCBPVjc2NzBfQ09NOF9BV0IgfSwKKworCS8qIE1hdHJpeCBjb2VmZmljaWVudHMgKi8KKwkJeyAweDRmLCAweDgwIH0sCQl7IDB4NTAsIDB4ODAgfSwKKwkJeyAweDUxLCAwIH0sCQl7IDB4NTIsIDB4MjIgfSwKKwkJeyAweDUzLCAweDVlIH0sCQl7IDB4NTQsIDB4ODAgfSwKKwkJeyAweDU4LCAweDllIH0sCisKKwkJeyBPVjc2NzBfUkVHX0NPTTE2LCBPVjc2NzBfQ09NMTZfQVdCR0FJTiB9LAorCQl7IE9WNzY3MF9SRUdfRURHRSwgMCB9LAorCQl7IDB4NzUsIDB4MDUgfSwJCXsgMHg3NiwgMHhlMSB9LAorCQl7IDB4NGMsIDAgfSwJCXsgMHg3NywgMHgwMSB9LAorCQl7IE9WNzY3MF9SRUdfQ09NMTMsIDB4YzMgfSwJeyAweDRiLCAweDA5IH0sCisJCXsgMHhjOSwgMHg2MCB9LAkJeyBPVjc2NzBfUkVHX0NPTTE2LCAweDM4IH0sCisJCXsgMHg1NiwgMHg0MCB9LAorCisJCXsgMHgzNCwgMHgxMSB9LAorCQl7IE9WNzY3MF9SRUdfQ09NMTEsIE9WNzY3MF9DT00xMV9FWFB8T1Y3NjcwX0NPTTExX0haQVVUTyB9LAorCQl7IDB4YTQsIDB4ODggfSwJCXsgMHg5NiwgMCB9LAorCQl7IDB4OTcsIDB4MzAgfSwJCXsgMHg5OCwgMHgyMCB9LAorCQl7IDB4OTksIDB4MzAgfSwJCXsgMHg5YSwgMHg4NCB9LAorCQl7IDB4OWIsIDB4MjkgfSwJCXsgMHg5YywgMHgwMyB9LAorCQl7IDB4OWQsIDB4NGMgfSwJCXsgMHg5ZSwgMHgzZiB9LAorCQl7IDB4NzgsIDB4MDQgfSwKKworCS8qIEV4dHJhLXdlaXJkIHN0dWZmLiAgU29tZSBzb3J0IG9mIG11bHRpcGxleG9yIHJlZ2lzdGVyICovCisJCXsgMHg3OSwgMHgwMSB9LAkJeyAweGM4LCAweGYwIH0sCisJCXsgMHg3OSwgMHgwZiB9LAkJeyAweGM4LCAweDAwIH0sCisJCXsgMHg3OSwgMHgxMCB9LAkJeyAweGM4LCAweDdlIH0sCisJCXsgMHg3OSwgMHgwYSB9LAkJeyAweGM4LCAweDgwIH0sCisJCXsgMHg3OSwgMHgwYiB9LAkJeyAweGM4LCAweDAxIH0sCisJCXsgMHg3OSwgMHgwYyB9LAkJeyAweGM4LCAweDBmIH0sCisJCXsgMHg3OSwgMHgwZCB9LAkJeyAweGM4LCAweDIwIH0sCisJCXsgMHg3OSwgMHgwOSB9LAkJeyAweGM4LCAweDgwIH0sCisJCXsgMHg3OSwgMHgwMiB9LAkJeyAweGM4LCAweGMwIH0sCisJCXsgMHg3OSwgMHgwMyB9LAkJeyAweGM4LCAweDQwIH0sCisJCXsgMHg3OSwgMHgwNSB9LAkJeyAweGM4LCAweDMwIH0sCisJCXsgMHg3OSwgMHgyNiB9LAorCisJLyogRm9ybWF0IFlVVjQyMiAqLworCQl7IE9WNzY3MF9SRUdfQ09NNywgT1Y3NjcwX0NPTTdfWVVWIH0sICAvKiBTZWxlY3RzIFlVViBtb2RlICovCisJCXsgT1Y3NjcwX1JFR19SR0I0NDQsIDAgfSwJLyogTm8gUkdCNDQ0IHBsZWFzZSAqLworCQl7IE9WNzY3MF9SRUdfQ09NMSwgMCB9LAorCQl7IE9WNzY3MF9SRUdfQ09NMTUsIE9WNzY3MF9DT00xNV9SMDBGRiB9LAorCQl7IE9WNzY3MF9SRUdfQ09NOSwgMHgxOCB9LAorCQkJCS8qIDR4IGdhaW4gY2VpbGluZzsgMHg4IGlzIHJlc2VydmVkIGJpdCAqLworCQl7IDB4NGYsIDB4ODAgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgMSIgKi8KKwkJeyAweDUwLCAweDgwIH0sIAkvKiAibWF0cml4IGNvZWZmaWNpZW50IDIiICovCisJCXsgMHg1MiwgMHgyMiB9LCAJLyogIm1hdHJpeCBjb2VmZmljaWVudCA0IiAqLworCQl7IDB4NTMsIDB4NWUgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNSIgKi8KKwkJeyAweDU0LCAweDgwIH0sIAkvKiAibWF0cml4IGNvZWZmaWNpZW50IDYiICovCisJCXsgT1Y3NjcwX1JFR19DT00xMywgT1Y3NjcwX0NPTTEzX0dBTU1BfE9WNzY3MF9DT00xM19VVlNBVCB9LAorfTsKKworCVBERUJVRyhEX1BST0JFLCAic3RhcnRpbmcgT1Y3eHgwIGNvbmZpZ3VyYXRpb24iKTsKKworLyogamZtOmFscmVhZHkgZG9uZT8gKi8KKwlpZiAoaW5pdF9vdl9zZW5zb3Ioc2QpIDwgMCkKKwkJUERFQlVHKERfRVJSLCAiRmFpbGVkIHRvIHJlYWQgc2Vuc29yIElEIik7CisJZWxzZQorCQlQREVCVUcoRF9QUk9CRSwgIk9WN3h4MCBpbml0aWFsaXplZCIpOworCisJLyogRGV0ZWN0IHNlbnNvciAoc3ViKXR5cGUgKi8KKwlyYyA9IGkyY19yKHNkLCBPVjc2MTBfUkVHX0NPTV9JKTsKKworCS8qIGFkZCBPVjc2NzAgaGVyZQorCSAqIGl0IGFwcGVhcnMgdG8gYmUgd3JvbmdseSBkZXRlY3RlZCBhcyBhIDc2MTAgYnkgZGVmYXVsdCAqLworCWlmIChyYyA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKChyYyAmIDMpID09IDMpIHsKKwkJLyogcXVpY2sgaGFjayB0byBtYWtlIE9WNzY3MHMgd29yayAqLworCQloaWdoID0gaTJjX3Ioc2QsIDB4MGEpOworCQlsb3cgPSBpMmNfcihzZCwgMHgwYik7CisJCS8qIGluZm8oIiV4LCAleCIsIGhpZ2gsIGxvdyk7ICovCisJCWlmIChoaWdoID09IDB4NzYgJiYgbG93ID09IDB4NzMpIHsKKwkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WNzY3MCIpOworCQkJc2QtPnNlbnNvciA9IFNFTl9PVjc2NzA7CisJCX0gZWxzZSB7CisJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2MTAiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjEwOworCQl9CisJfSBlbHNlIGlmICgocmMgJiAzKSA9PSAxKSB7CisJCS8qIEkgZG9uJ3Qga25vdyB3aGF0J3MgZGlmZmVyZW50IGFib3V0IHRoZSA3NkJFIHlldC4gKi8KKwkJaWYgKGkyY19yKHNkLCAweDE1KSAmIDEpCisJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2MjBBRSIpOworCQllbHNlCisJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2QkUiKTsKKworCQkvKiBPVjUxMSsgd2lsbCByZXR1cm4gYWxsIHplcm8gaXNvYyBkYXRhIHVubGVzcyB3ZQorCQkgKiBjb25maWd1cmUgdGhlIHNlbnNvciBhcyBhIDc2MjAuIFNvbWVvbmUgbmVlZHMgdG8KKwkJICogZmluZCB0aGUgZXhhY3QgcmVnLiBzZXR0aW5nIHRoYXQgY2F1c2VzIHRoaXMuICovCisJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NkJFOworCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMCkgeworCQkvKiB0cnkgdG8gcmVhZCBwcm9kdWN0IGlkIHJlZ2lzdGVycyAqLworCQloaWdoID0gaTJjX3Ioc2QsIDB4MGEpOworCQlpZiAoaGlnaCA8IDApIHsKKwkJCVBERUJVRyhEX0VSUiwgIkVycm9yIGRldGVjdGluZyBjYW1lcmEgY2hpcCBQSUQiKTsKKwkJCXJldHVybiBoaWdoOworCQl9CisJCWxvdyA9IGkyY19yKHNkLCAweDBiKTsKKwkJaWYgKGxvdyA8IDApIHsKKwkJCVBERUJVRyhEX0VSUiwgIkVycm9yIGRldGVjdGluZyBjYW1lcmEgY2hpcCBWRVIiKTsKKwkJCXJldHVybiBsb3c7CisJCX0KKwkJaWYgKGhpZ2ggPT0gMHg3NikgeworCQkJaWYgKGxvdyA9PSAweDMwKSB7CisJCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYW4gT1Y3NjMwL09WNzYzNSIpOworCQkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjMwOworCQkJfSBlbHNlIGlmIChsb3cgPT0gMHg0MCkgeworCQkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WNzY0NSIpOworCQkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjQwOyAvKiBGSVhNRSAqLworCQkJfSBlbHNlIGlmIChsb3cgPT0gMHg0NSkgeworCQkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WNzY0NUIiKTsKKwkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0MDsgLyogRklYTUUgKi8KKwkJCX0gZWxzZSBpZiAobG93ID09IDB4NDgpIHsKKwkJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2NDgiKTsKKwkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0MDsgLyogRklYTUUgKi8KKwkJCX0gZWxzZSB7CisJCQkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvcjogMHg3NiVYIiwgbG93KTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2MjAiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjIwOworCQl9CisJfSBlbHNlIHsKKwkJUERFQlVHKERfRVJSLCAiVW5rbm93biBpbWFnZSBzZW5zb3IgdmVyc2lvbjogJWQiLCByYyAmIDMpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzYyMCkgeworCQlQREVCVUcoRF9QUk9CRSwgIldyaXRpbmcgNzYyMCByZWdpc3RlcnMiKTsKKwkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2MjAsCisJCQkJc2l6ZW9mIG5vcm1fNzYyMCAvIHNpemVvZiBub3JtXzc2MjBbMF0pKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjMwKSB7CisJCVBERUJVRyhEX0VSUiwgIjc2MzAgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciB2ZXJzaW9uIik7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCkgeworCQlQREVCVUcoRF9QUk9CRSwgIldyaXRpbmcgNzY0MCByZWdpc3RlcnMiKTsKKwkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2NDAsCisJCQkJc2l6ZW9mIG5vcm1fNzY0MCAvIHNpemVvZiBub3JtXzc2NDBbMF0pKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwKSB7CisJCVBERUJVRyhEX1BST0JFLCAiV3JpdGluZyA3NjcwIHJlZ2lzdGVycyIpOworCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzY3MCwKKwkJCQlzaXplb2Ygbm9ybV83NjcwIC8gc2l6ZW9mIG5vcm1fNzY3MFswXSkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJUERFQlVHKERfUFJPQkUsICJXcml0aW5nIDc2MTAgcmVnaXN0ZXJzIik7CisJCWlmICh3cml0ZV9pMmNfcmVndmFscyhzZCwgbm9ybV83NjEwLAorCQkJCXNpemVvZiBub3JtXzc2MTAgLyBzaXplb2Ygbm9ybV83NjEwWzBdKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTZXQgc2Vuc29yLXNwZWNpZmljIHZhcnMgKi8KKwlzZC0+bWF4d2lkdGggPSA2NDA7CisJc2QtPm1heGhlaWdodCA9IDQ4MDsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1Y2NjIwLCBPVjY2MzAsIE9WNjYzMEFFLCBvciBPVjY2MzBBRiBzZW5zb3IuICovCitzdGF0aWMgaW50IG92Nnh4MF9jb25maWd1cmUoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgcmM7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9pMmNfcmVndmFscyBub3JtXzZ4MjBbXSA9IHsKKwkJeyAweDEyLCAweDgwIH0sIC8qIHJlc2V0ICovCisJCXsgMHgxMSwgMHgwMSB9LAorCQl7IDB4MDMsIDB4NjAgfSwKKwkJeyAweDA1LCAweDdmIH0sIC8qIEZvciB3aGVuIGF1dG9hZGp1c3QgaXMgb2ZmICovCisJCXsgMHgwNywgMHhhOCB9LAorCQkvKiBUaGUgcmF0aW8gb2YgMHgwYyBhbmQgMHgwZCAgY29udHJvbHMgdGhlIHdoaXRlIHBvaW50ICovCisJCXsgMHgwYywgMHgyNCB9LAorCQl7IDB4MGQsIDB4MjQgfSwKKwkJeyAweDBmLCAweDE1IH0sIC8qIENPTVMgKi8KKwkJeyAweDEwLCAweDc1IH0sIC8qIEFFQyBFeHBvc3VyZSB0aW1lICovCisJCXsgMHgxMiwgMHgyNCB9LCAvKiBFbmFibGUgQUdDICovCisJCXsgMHgxNCwgMHgwNCB9LAorCQkvKiAweDE2OiAweDA2IGhlbHBzIGZyYW1lIHN0YWJpbGl0eSB3aXRoIG1vdmluZyBvYmplY3RzICovCisJCXsgMHgxNiwgMHgwNiB9LAorLyoJCXsgMHgyMCwgMHgzMCB9LCAgKiBBcGVydHVyZSBjb3JyZWN0aW9uIGVuYWJsZSAqLworCQl7IDB4MjYsIDB4YjIgfSwgLyogQkxDIGVuYWJsZSAqLworCQkvKiAweDI4OiAweDA1IFNlbGVjdHMgUkdCIGZvcm1hdCBpZiBSR0Igb24gKi8KKwkJeyAweDI4LCAweDA1IH0sCisJCXsgMHgyYSwgMHgwNCB9LCAvKiBEaXNhYmxlIGZyYW1lcmF0ZSBhZGp1c3QgKi8KKy8qCQl7IDB4MmIsIDB4YWMgfSwgICogRnJhbWVyYXRlOyBTZXQgMmFbN10gZmlyc3QgKi8KKwkJeyAweDJkLCAweDk5IH0sCisJCXsgMHgzMywgMHhhMCB9LCAvKiBDb2xvciBQcm9jZXNzaW5nIFBhcmFtZXRlciAqLworCQl7IDB4MzQsIDB4ZDIgfSwgLyogTWF4IEEvRCByYW5nZSAqLworCQl7IDB4MzgsIDB4OGIgfSwKKwkJeyAweDM5LCAweDQwIH0sCisKKwkJeyAweDNjLCAweDM5IH0sIC8qIEVuYWJsZSBBRUMgbW9kZSBjaGFuZ2luZyAqLworCQl7IDB4M2MsIDB4M2MgfSwgLyogQ2hhbmdlIEFFQyBtb2RlICovCisJCXsgMHgzYywgMHgyNCB9LCAvKiBEaXNhYmxlIEFFQyBtb2RlIGNoYW5naW5nICovCisKKwkJeyAweDNkLCAweDgwIH0sCisJCS8qIFRoZXNlIG5leHQgdHdvIHJlZ2lzdGVycyAoMHg0YSwgMHg0YikgYXJlIHVuZG9jdW1lbnRlZC4KKwkJICogVGhleSBjb250cm9sIHRoZSBjb2xvciBiYWxhbmNlICovCisJCXsgMHg0YSwgMHg4MCB9LAorCQl7IDB4NGIsIDB4ODAgfSwKKwkJeyAweDRkLCAweGQyIH0sIC8qIFRoaXMgcmVkdWNlcyBub2lzZSBhIGJpdCAqLworCQl7IDB4NGUsIDB4YzEgfSwKKwkJeyAweDRmLCAweDA0IH0sCisvKiBEbyA1MC01MyBoYXZlIGFueSBlZmZlY3Q/ICovCisvKiBUb2dnbGUgMHgxMlsyXSBvZmYgYW5kIG9uIGhlcmU/ICovCisJfTsKKworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfaTJjX3JlZ3ZhbHMgbm9ybV82eDMwW10gPSB7CisJCXsgMHgxMiwgMHg4MCB9LCAvKiBSZXNldCAqLworCQl7IDB4MDAsIDB4MWYgfSwgLyogR2FpbiAqLworCQl7IDB4MDEsIDB4OTkgfSwgLyogQmx1ZSBnYWluICovCisJCXsgMHgwMiwgMHg3YyB9LCAvKiBSZWQgZ2FpbiAqLworCQl7IDB4MDMsIDB4YzAgfSwgLyogU2F0dXJhdGlvbiAqLworCQl7IDB4MDUsIDB4MGEgfSwgLyogQ29udHJhc3QgKi8KKwkJeyAweDA2LCAweDk1IH0sIC8qIEJyaWdodG5lc3MgKi8KKwkJeyAweDA3LCAweDJkIH0sIC8qIFNoYXJwbmVzcyAqLworCQl7IDB4MGMsIDB4MjAgfSwKKwkJeyAweDBkLCAweDIwIH0sCisJCXsgMHgwZSwgMHgyMCB9LAorCQl7IDB4MGYsIDB4MDUgfSwKKwkJeyAweDEwLCAweDlhIH0sCisJCXsgMHgxMSwgMHgwMCB9LCAvKiBQaXhlbCBjbG9jayA9IGZhc3Rlc3QgKi8KKwkJeyAweDEyLCAweDI0IH0sIC8qIEVuYWJsZSBBR0MgYW5kIEFXQiAqLworCQl7IDB4MTMsIDB4MjEgfSwKKwkJeyAweDE0LCAweDgwIH0sCisJCXsgMHgxNSwgMHgwMSB9LAorCQl7IDB4MTYsIDB4MDMgfSwKKwkJeyAweDE3LCAweDM4IH0sCisJCXsgMHgxOCwgMHhlYSB9LAorCQl7IDB4MTksIDB4MDQgfSwKKwkJeyAweDFhLCAweDkzIH0sCisJCXsgMHgxYiwgMHgwMCB9LAorCQl7IDB4MWUsIDB4YzQgfSwKKwkJeyAweDFmLCAweDA0IH0sCisJCXsgMHgyMCwgMHgyMCB9LAorCQl7IDB4MjEsIDB4MTAgfSwKKwkJeyAweDIyLCAweDg4IH0sCisJCXsgMHgyMywgMHhjMCB9LCAvKiBDcnlzdGFsIGNpcmN1aXQgcG93ZXIgbGV2ZWwgKi8KKwkJeyAweDI1LCAweDlhIH0sIC8qIEluY3JlYXNlIEFFQyBibGFjayByYXRpbyAqLworCQl7IDB4MjYsIDB4YjIgfSwgLyogQkxDIGVuYWJsZSAqLworCQl7IDB4MjcsIDB4YTIgfSwKKwkJeyAweDI4LCAweDAwIH0sCisJCXsgMHgyOSwgMHgwMCB9LAorCQl7IDB4MmEsIDB4ODQgfSwgLyogNjAgSHogcG93ZXIgKi8KKwkJeyAweDJiLCAweGE4IH0sIC8qIDYwIEh6IHBvd2VyICovCisJCXsgMHgyYywgMHhhMCB9LAorCQl7IDB4MmQsIDB4OTUgfSwgLyogRW5hYmxlIGF1dG8tYnJpZ2h0bmVzcyAqLworCQl7IDB4MmUsIDB4ODggfSwKKwkJeyAweDMzLCAweDI2IH0sCisJCXsgMHgzNCwgMHgwMyB9LAorCQl7IDB4MzYsIDB4OGYgfSwKKwkJeyAweDM3LCAweDgwIH0sCisJCXsgMHgzOCwgMHg4MyB9LAorCQl7IDB4MzksIDB4ODAgfSwKKwkJeyAweDNhLCAweDBmIH0sCisJCXsgMHgzYiwgMHgzYyB9LAorCQl7IDB4M2MsIDB4MWEgfSwKKwkJeyAweDNkLCAweDgwIH0sCisJCXsgMHgzZSwgMHg4MCB9LAorCQl7IDB4M2YsIDB4MGUgfSwKKwkJeyAweDQwLCAweDAwIH0sIC8qIFdoaXRlIGJhbCAqLworCQl7IDB4NDEsIDB4MDAgfSwgLyogV2hpdGUgYmFsICovCisJCXsgMHg0MiwgMHg4MCB9LAorCQl7IDB4NDMsIDB4M2YgfSwgLyogV2hpdGUgYmFsICovCisJCXsgMHg0NCwgMHg4MCB9LAorCQl7IDB4NDUsIDB4MjAgfSwKKwkJeyAweDQ2LCAweDIwIH0sCisJCXsgMHg0NywgMHg4MCB9LAorCQl7IDB4NDgsIDB4N2YgfSwKKwkJeyAweDQ5LCAweDAwIH0sCisJCXsgMHg0YSwgMHgwMCB9LAorCQl7IDB4NGIsIDB4ODAgfSwKKwkJeyAweDRjLCAweGQwIH0sCisJCXsgMHg0ZCwgMHgxMCB9LCAvKiBVID0gMC41NjN1LCBWID0gMC43MTR2ICovCisJCXsgMHg0ZSwgMHg0MCB9LAorCQl7IDB4NGYsIDB4MDcgfSwgLyogVVYgYXZnLiwgY29sLiBraWxsZXI6IG1heCAqLworCQl7IDB4NTAsIDB4ZmYgfSwKKwkJeyAweDU0LCAweDIzIH0sIC8qIE1heCBBR0MgZ2FpbjogMThkQiAqLworCQl7IDB4NTUsIDB4ZmYgfSwKKwkJeyAweDU2LCAweDEyIH0sCisJCXsgMHg1NywgMHg4MSB9LAorCQl7IDB4NTgsIDB4NzUgfSwKKwkJeyAweDU5LCAweDAxIH0sIC8qIEFHQyBkYXJrIGN1cnJlbnQgY29tcC46ICsxICovCisJCXsgMHg1YSwgMHgyYyB9LAorCQl7IDB4NWIsIDB4MGYgfSwgLyogQVdCIGNocm9taW5hbmNlIGxldmVscyAqLworCQl7IDB4NWMsIDB4MTAgfSwKKwkJeyAweDNkLCAweDgwIH0sCisJCXsgMHgyNywgMHhhNiB9LAorCQl7IDB4MTIsIDB4MjAgfSwgLyogVG9nZ2xlIEFXQiAqLworCQl7IDB4MTIsIDB4MjQgfSwKKwl9OworCisJUERFQlVHKERfUFJPQkUsICJzdGFydGluZyBzZW5zb3IgY29uZmlndXJhdGlvbiIpOworCisJaWYgKGluaXRfb3Zfc2Vuc29yKHNkKSA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiRmFpbGVkIHRvIHJlYWQgc2Vuc29yIElELiIpOworCQlyZXR1cm4gLTE7CisJfQorCVBERUJVRyhEX1BST0JFLCAiT1Y2eHgwIHNlbnNvciBkZXRlY3RlZCIpOworCisJLyogRGV0ZWN0IHNlbnNvciAoc3ViKXR5cGUgKi8KKwlyYyA9IGkyY19yKHNkLCBPVjc2MTBfUkVHX0NPTV9JKTsKKwlpZiAocmMgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogVWdoLiBUaGUgZmlyc3QgdHdvIGJpdHMgYXJlIHRoZSB2ZXJzaW9uIGJpdHMsIGJ1dAorCSAqIHRoZSBlbnRpcmUgcmVnaXN0ZXIgdmFsdWUgbXVzdCBiZSB1c2VkLiBJIGd1ZXNzIE9WVAorCSAqIHVuZGVyZXN0aW1hdGVkIGhvdyBtYW55IHZhcmlhbnRzIHRoZXkgd291bGQgbWFrZS4gKi8KKwlpZiAocmMgPT0gMHgwMCkgeworCQlzZC0+c2Vuc29yID0gU0VOX09WNjYzMDsKKwkJUERFQlVHKERfRVJSLAorCQkJIldBUk5JTkc6IFNlbnNvciBpcyBhbiBPVjY2MzA4LiBZb3VyIGNhbWVyYSBtYXkgaGF2ZSIpOworCQlQREVCVUcoRF9FUlIsICJiZWVuIG1pc2RldGVjdGVkIGluIHByZXZpb3VzIGRyaXZlciB2ZXJzaW9ucy4iKTsKKwl9IGVsc2UgaWYgKHJjID09IDB4MDEpIHsKKwkJc2QtPnNlbnNvciA9IFNFTl9PVjY2MjA7CisJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WNjYyMCIpOworCX0gZWxzZSBpZiAocmMgPT0gMHgwMikgeworCQlzZC0+c2Vuc29yID0gU0VOX09WNjYzMDsKKwkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYW4gT1Y2NjMwOEFFIik7CisJfSBlbHNlIGlmIChyYyA9PSAweDAzKSB7CisJCXNkLT5zZW5zb3IgPSBTRU5fT1Y2NjMwOworCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjY2MzA4QUYiKTsKKwl9IGVsc2UgaWYgKHJjID09IDB4OTApIHsKKwkJc2QtPnNlbnNvciA9IFNFTl9PVjY2MzA7CisJCVBERUJVRyhEX0VSUiwKKwkJCSJXQVJOSU5HOiBTZW5zb3IgaXMgYW4gT1Y2NjMwNy4gWW91ciBjYW1lcmEgbWF5IGhhdmUiKTsKKwkJUERFQlVHKERfRVJSLCAiYmVlbiBtaXNkZXRlY3RlZCBpbiBwcmV2aW91cyBkcml2ZXIgdmVyc2lvbnMuIik7CisJfSBlbHNlIHsKKwkJUERFQlVHKERfRVJSLCAiRkFUQUw6IFVua25vd24gc2Vuc29yIHZlcnNpb246IDB4JTAyeCIsIHJjKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNldCBzZW5zb3Itc3BlY2lmaWMgdmFycyAqLworCXNkLT5tYXh3aWR0aCA9IDM1MjsKKwlzZC0+bWF4aGVpZ2h0ID0gMjg4OworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNjYyMCkgeworCQlQREVCVUcoRF9QUk9CRSwgIldyaXRpbmcgNngyMCByZWdpc3RlcnMiKTsKKwkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzZ4MjAsCisJCQkJc2l6ZW9mIG5vcm1fNngyMCAvIHNpemVvZiBub3JtXzZ4MjBbMF0pKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCVBERUJVRyhEX1BST0JFLCAiV3JpdGluZyA2eDMwIHJlZ2lzdGVycyIpOworCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNngzMCwKKwkJCQlzaXplb2Ygbm9ybV82eDMwIC8gc2l6ZW9mIG5vcm1fNngzMFswXSkpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCisvKiBUdXJucyBvbiBvciBvZmYgdGhlIExFRC4gT25seSBoYXMgYW4gZWZmZWN0IHdpdGggT1Y1MTErL09WNTE4KCspL09WNTE5ICovCitzdGF0aWMgdm9pZCBvdjUxeF9sZWRfY29udHJvbChzdHJ1Y3Qgc2QgKnNkLCBpbnQgb24pCit7CisJUERFQlVHKERfU1RSRUFNLCAiTEVEICglcykiLCBvbiA/ICJvbiIgOiAib2ZmIik7CisKKy8qCWlmIChzZC0+YnJpZGdlID09IEJSR19PVjUxMVBMVVMpICovCisvKgkJcmVnX3coc2QsIFI1MTFfU1lTX0xFRF9DVEwsIG9uID8gMSA6IDApOyAqLworLyoJZWxzZSBpZiAoc2QtPmJyaWRnZSA9PSBCUkdfT1Y1MTkpICovCisJCXJlZ193X21hc2soc2QsIE9WNTE5X0dQSU9fREFUQV9PVVQwLCAhb24sIDEpOwkvKiAwIC8gMSAqLworLyoJZWxzZSBpZiAoc2QtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpICovCisvKgkJcmVnX3dfbWFzayhzZCwgUjUxOF9HUElPX09VVCwgb24gPyAweDAyIDogMHgwMCwgMHgwMik7ICovCit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtOworCisvKiAoZnJvbSBvdjUxOV9jb25maWd1cmUpICovCisJc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9yZWd2YWxzIGluaXRfNTE5W10gPSB7CisJCXsgMHg1YSwgIDB4NmQgfSwgLyogRW5hYmxlU3lzdGVtICovCisvKiBqZm0gdHJhY2UgdXNic25vb3AzLTEudHh0ICovCisvKiBqZm0gNTMgPSBmYiAqLworCQl7IDB4NTMsICAweDliIH0sCisJCXsgMHg1NCwgIDB4ZmYgfSwgLyogc2V0IGJpdDIgdG8gZW5hYmxlIGpwZWcgKi8KKwkJeyAweDVkLCAgMHgwMyB9LAorCQl7IDB4NDksICAweDAxIH0sCisJCXsgMHg0OCwgIDB4MDAgfSwKKwkJLyogU2V0IExFRCBwaW4gdG8gb3V0cHV0IG1vZGUuIEJpdCA0IG11c3QgYmUgY2xlYXJlZCBvciBzZW5zb3IKKwkJICogZGV0ZWN0aW9uIHdpbGwgZmFpbC4gVGhpcyBkZXNlcnZlcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uICovCisJCXsgT1Y1MTlfR1BJT19JT19DVFJMMCwgICAweGVlIH0sCisJCXsgMHg1MSwgIDB4MGYgfSwgLyogU2V0VXNiSW5pdCAqLworCQl7IDB4NTEsICAweDAwIH0sCisJCXsgMHgyMiwgIDB4MDAgfSwKKwkJLyogd2luZG93cyByZWFkcyAweDU1IGF0IHRoaXMgcG9pbnQqLworCX07CisKKwlpZiAod3JpdGVfcmVndmFscyhzZCwgaW5pdF81MTksIEFSUkFZX1NJWkUoaW5pdF81MTkpKSkKKwkJZ290byBlcnJvcjsKKy8qIGpmbTogbm90IHNlZW4gaW4gd2luZG93cyB0cmFjZSAqLworCWlmIChvdjUxOV9pbml0X2NvbXByZXNzaW9uKHNkKSkKKwkJZ290byBlcnJvcjsKKwlvdjUxeF9sZWRfY29udHJvbChzZCwgMCk7CS8qIHR1cm4gTEVEIG9mZiAqLworCisJLyogVGVzdCBmb3IgNzZ4eCAqLworCXNkLT5wcmltYXJ5X2kyY19zbGF2ZSA9IE9WN3h4MF9TSUQ7CisJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMoc2QsIE9WN3h4MF9TSUQpIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFRoZSBPVjUxOSBtdXN0IGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCBzZW5zb3IgZGV0ZWN0aW9uIHNpbmNlCisJICogSTJDIHdyaXRlIHdpbGwgbmV2ZXIgZmFpbCBpZiB0aGUgc2Vuc29yIGlzIG5vdCBwcmVzZW50LiBXZSBoYXZlCisJICogdG8gdHJ5IHRvIGluaXRpYWxpemUgdGhlIHNlbnNvciB0byBkZXRlY3QgaXRzIHByZXNlbmNlICovCisJaWYgKGluaXRfb3Zfc2Vuc29yKHNkKSA8IDApIHsKKwkJLyogVGVzdCBmb3IgNnh4MCAqLworCQlzZC0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjZ4eDBfU0lEOworCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhzZCwgT1Y2eHgwX1NJRCkgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQlpZiAoaW5pdF9vdl9zZW5zb3Ioc2QpIDwgMCkgeworCQkJLyogVGVzdCBmb3IgOHh4MCAqLworCQkJc2QtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y4eHgwX1NJRDsKKwkJCWlmIChvdjUxeF9zZXRfc2xhdmVfaWRzKHNkLCBPVjh4eDBfU0lEKSA8IDApCisJCQkJZ290byBlcnJvcjsKKworCQkJaWYgKGluaXRfb3Zfc2Vuc29yKHNkKSA8IDApIHsKKwkJCQlQREVCVUcoRF9FUlIsCisJCQkJCSJDYW4ndCBkZXRlcm1pbmUgc2Vuc29yIHNsYXZlIElEcyIpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9IGVsc2UgeworCQkJCWlmIChvdjh4eDBfY29uZmlndXJlKHNkKSA8IDApIHsKKwkJCQkJUERFQlVHKERfRVJSLAorCQkJCQkgICAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBPVjh4eDAgc2Vuc29yIik7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG92Nnh4MF9jb25maWd1cmUoc2QpIDwgMCkgeworCQkJCVBERUJVRyhEX0VSUiwgIkZhaWxlZCB0byBjb25maWd1cmUgT1Y2eHgwIik7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChvdjd4eDBfY29uZmlndXJlKHNkKSA8IDApIHsKKwkJCVBERUJVRyhEX0VSUiwgIkZhaWxlZCB0byBjb25maWd1cmUgT1Y3eHgwIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZXBhZGRyID0gT1Y1MTFfRU5EUE9JTlRfQUREUkVTUzsKKwlpZiAoc2QtPm1heHdpZHRoID09IDY0MCkgeworCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOworCX0gZWxzZSB7CisJCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBzaXplb2Ygc2lmX21vZGUgLyBzaXplb2Ygc2lmX21vZGVbMF07CisJfQorCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCXNkLT5jb2xvcnMgPSBzZF9jdHJsc1tTRF9DT0xPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCVBERUJVRyhEX0VSUiwgIk9WNTE5IENvbmZpZyBmYWlsZWQiKTsKKwlyZXR1cm4gLUVCVVNZOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBvcGVuIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2Rfb3BlbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNldHMgdXAgdGhlIE9WNTE5IHdpdGggdGhlIGdpdmVuIGltYWdlIHBhcmFtZXRlcnMKKyAqCisgKiBPVjUxOSBuZWVkcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFwcHJvYWNoLCB1bnRpbCB3ZSBjYW4gZmlndXJlIG91dCB3aGF0CisgKiB0aGUgaW5kaXZpZHVhbCByZWdpc3RlcnMgZG8uCisgKgorICogRG8gbm90IHB1dCBhbnkgc2Vuc29yLXNwZWNpZmljIGNvZGUgaW4gaGVyZSAoaW5jbHVkaW5nIEkyQyBJL08gZnVuY3Rpb25zKQorICovCitzdGF0aWMgaW50IG92NTE5X21vZGVfaW5pdF9yZWdzKHN0cnVjdCBzZCAqc2QsCisJCQkJaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfcmVndmFscyBtb2RlX2luaXRfNTE5X292NzY3MFtdID0geworCQl7IDB4NWQsCTB4MDMgfSwgLyogVHVybiBvZmYgc3VzcGVuZCBtb2RlICovCisJCXsgMHg1MywJMHg5ZiB9LCAvKiB3YXMgOWIgaW4gMS42NS0xLjA4ICovCisJCXsgMHg1NCwJMHgwZiB9LCAvKiBiaXQyIChqcGVnIGVuYWJsZSkgKi8KKwkJeyAweGEyLAkweDIwIH0sIC8qIGEyLWE1IGFyZSB1bmRvY3VtZW50ZWQgKi8KKwkJeyAweGEzLAkweDE4IH0sCisJCXsgMHhhNCwJMHgwNCB9LAorCQl7IDB4YTUsCTB4MjggfSwKKwkJeyAweDM3LAkweDAwIH0sCS8qIFNldFVzYkluaXQgKi8KKwkJeyAweDU1LAkweDAyIH0sIC8qIDQuMDk2IE1oeiBhdWRpbyBjbG9jayAqLworCQkvKiBFbmFibGUgYm90aCBmaWVsZHMsIFlVViBJbnB1dCwgZGlzYWJsZSBkZWZlY3QgY29tcCAod2h5PykgKi8KKwkJeyAweDIwLAkweDBjIH0sCisJCXsgMHgyMSwJMHgzOCB9LAorCQl7IDB4MjIsCTB4MWQgfSwKKwkJeyAweDE3LAkweDUwIH0sIC8qIHVuZG9jdW1lbnRlZCAqLworCQl7IDB4MzcsCTB4MDAgfSwgLyogdW5kb2N1bWVudGVkICovCisJCXsgMHg0MCwJMHhmZiB9LCAvKiBJMkMgdGltZW91dCBjb3VudGVyICovCisJCXsgMHg0NiwJMHgwMCB9LCAvKiBJMkMgY2xvY2sgcHJlc2NhbGVyICovCisJCXsgMHg1OSwJMHgwNCB9LAkvKiBuZXcgZnJvbSB3aW5kcnYgMDkwNDAzICovCisJCXsgMHhmZiwJMHgwMCB9LCAvKiB1bmRvY3VtZW50ZWQgKi8KKwkJLyogd2luZG93cyByZWFkcyAweDU1IGF0IHRoaXMgcG9pbnQsIHdoeT8gKi8KKwl9OworCisJc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9yZWd2YWxzIG1vZGVfaW5pdF81MTlbXSA9IHsKKwkJeyAweDVkLAkweDAzIH0sIC8qIFR1cm4gb2ZmIHN1c3BlbmQgbW9kZSAqLworCQl7IDB4NTMsCTB4OWYgfSwgLyogd2FzIDliIGluIDEuNjUtMS4wOCAqLworCQl7IDB4NTQsCTB4MGYgfSwgLyogYml0MiAoanBlZyBlbmFibGUpICovCisJCXsgMHhhMiwJMHgyMCB9LCAvKiBhMi1hNSBhcmUgdW5kb2N1bWVudGVkICovCisJCXsgMHhhMywJMHgxOCB9LAorCQl7IDB4YTQsCTB4MDQgfSwKKwkJeyAweGE1LAkweDI4IH0sCisJCXsgMHgzNywJMHgwMCB9LAkvKiBTZXRVc2JJbml0ICovCisJCXsgMHg1NSwJMHgwMiB9LCAvKiA0LjA5NiBNaHogYXVkaW8gY2xvY2sgKi8KKwkJLyogRW5hYmxlIGJvdGggZmllbGRzLCBZVVYgSW5wdXQsIGRpc2FibGUgZGVmZWN0IGNvbXAgKHdoeT8pICovCisJCXsgMHgyMiwJMHgxZCB9LAorCQl7IDB4MTcsCTB4NTAgfSwgLyogdW5kb2N1bWVudGVkICovCisJCXsgMHgzNywJMHgwMCB9LCAvKiB1bmRvY3VtZW50ZWQgKi8KKwkJeyAweDQwLAkweGZmIH0sIC8qIEkyQyB0aW1lb3V0IGNvdW50ZXIgKi8KKwkJeyAweDQ2LAkweDAwIH0sIC8qIEkyQyBjbG9jayBwcmVzY2FsZXIgKi8KKwkJeyAweDU5LAkweDA0IH0sCS8qIG5ldyBmcm9tIHdpbmRydiAwOTA0MDMgKi8KKwkJeyAweGZmLAkweDAwIH0sIC8qIHVuZG9jdW1lbnRlZCAqLworCQkvKiB3aW5kb3dzIHJlYWRzIDB4NTUgYXQgdGhpcyBwb2ludCwgd2h5PyAqLworCX07CisKKy8qIGludCBoaV9yZXM7ICovCisKKwlQREVCVUcoRF9DT05GLCAibW9kZSBpbml0ICVkeCVkIiwgd2lkdGgsIGhlaWdodCk7CisKKy8qCWlmICh3aWR0aCA+PSA4MDAgJiYgaGVpZ2h0ID49IDYwMCkKKwkJaGlfcmVzID0gMTsKKwllbHNlCisJCWhpX3JlcyA9IDA7ICovCisKKy8qCWlmIChvdjUxeF9zdG9wKHNkKSA8IDApCisJCXJldHVybiAtRUlPOyAqLworCisJLyoqKioqKioqIFNldCB0aGUgbW9kZSAqKioqKioqKi8KKwlpZiAoc2QtPnNlbnNvciAhPSBTRU5fT1Y3NjcwKSB7CisJCWlmICh3cml0ZV9yZWd2YWxzKHNkLCBtb2RlX2luaXRfNTE5LAorCQkJCSAgQVJSQVlfU0laRShtb2RlX2luaXRfNTE5KSkpCisJCQlyZXR1cm4gLUVJTzsKKwl9IGVsc2UgeworCQlpZiAod3JpdGVfcmVndmFscyhzZCwgbW9kZV9pbml0XzUxOV9vdjc2NzAsCisJCQkJICBBUlJBWV9TSVpFKG1vZGVfaW5pdF81MTlfb3Y3NjcwKSkpCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQwKSB7CisJCS8qIFNlbGVjdCA4LWJpdCBpbnB1dCBtb2RlICovCisJCXJlZ193X21hc2soc2QsIE9WNTE5X0NBTV9ERlIsIDB4MTAsIDB4MTApOworCX0KKworCXJlZ193KHNkLCBPVjUxOV9DQU1fSF9TSVpFLAl3aWR0aCA+PiA0KTsKKwlyZWdfdyhzZCwgT1Y1MTlfQ0FNX1ZfU0laRSwJaGVpZ2h0ID4+IDMpOworCXJlZ193KHNkLCBPVjUxOV9DQU1fWF9PRkZTRVRMLAkweDAwKTsKKwlyZWdfdyhzZCwgT1Y1MTlfQ0FNX1hfT0ZGU0VUSCwJMHgwMCk7CisJcmVnX3coc2QsIE9WNTE5X0NBTV9ZX09GRlNFVEwsCTB4MDApOworCXJlZ193KHNkLCBPVjUxOV9DQU1fWV9PRkZTRVRILAkweDAwKTsKKwlyZWdfdyhzZCwgT1Y1MTlfQ0FNX0RJVklERVIsCTB4MDApOworCXJlZ193KHNkLCBPVjUxOV9DQU1fRk9STUFULAkweDAzKTsgLyogWVVWNDIyICovCisJcmVnX3coc2QsIDB4MjYsCQkJMHgwMCk7IC8qIFVuZG9jdW1lbnRlZCAqLworCisJLyoqKioqKioqIFNldCB0aGUgZnJhbWVyYXRlICoqKioqKioqLworCWlmIChmcmFtZV9yYXRlID4gMCkKKwkJc2QtPmZyYW1lX3JhdGUgPSBmcmFtZV9yYXRlOworCisvKiBGSVhNRTogVGhlc2UgYXJlIG9ubHkgdmFsaWQgYXQgdGhlIG1heCByZXNvbHV0aW9uLiAqLworCXNkLT5jbG9ja2RpdiA9IDA7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCkgeworCQlzd2l0Y2ggKHNkLT5mcmFtZV9yYXRlKSB7CisvKmpmbTogZGVmYXVsdCB3YXMgMzAgZnBzICovCisJCWNhc2UgMzA6CisJCQlyZWdfdyhzZCwgMHhhNCwgMHgwYyk7CisJCQlyZWdfdyhzZCwgMHgyMywgMHhmZik7CisJCQlicmVhazsKKwkJY2FzZSAyNToKKwkJCXJlZ193KHNkLCAweGE0LCAweDBjKTsKKwkJCXJlZ193KHNkLCAweDIzLCAweDFmKTsKKwkJCWJyZWFrOworCQljYXNlIDIwOgorCQkJcmVnX3coc2QsIDB4YTQsIDB4MGMpOworCQkJcmVnX3coc2QsIDB4MjMsIDB4MWIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisvKgkJY2FzZSAxNTogKi8KKwkJCXJlZ193KHNkLCAweGE0LCAweDA0KTsKKwkJCXJlZ193KHNkLCAweDIzLCAweGZmKTsKKwkJCXNkLT5jbG9ja2RpdiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAxMDoKKwkJCXJlZ193KHNkLCAweGE0LCAweDA0KTsKKwkJCXJlZ193KHNkLCAweDIzLCAweDFmKTsKKwkJCXNkLT5jbG9ja2RpdiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJcmVnX3coc2QsIDB4YTQsIDB4MDQpOworCQkJcmVnX3coc2QsIDB4MjMsIDB4MWIpOworCQkJc2QtPmNsb2NrZGl2ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChzZC0+c2Vuc29yID09IFNFTl9PVjg2MTApIHsKKwkJc3dpdGNoIChzZC0+ZnJhbWVfcmF0ZSkgeworCQlkZWZhdWx0OgkvKiAxNSBmcHMgKi8KKy8qCQljYXNlIDE1OiAqLworCQkJcmVnX3coc2QsIDB4YTQsIDB4MDYpOworCQkJcmVnX3coc2QsIDB4MjMsIDB4ZmYpOworCQkJYnJlYWs7CisJCWNhc2UgMTA6CisJCQlyZWdfdyhzZCwgMHhhNCwgMHgwNik7CisJCQlyZWdfdyhzZCwgMHgyMywgMHgxZik7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJcmVnX3coc2QsIDB4YTQsIDB4MDYpOworCQkJcmVnX3coc2QsIDB4MjMsIDB4MWIpOworCQkJYnJlYWs7CisJCX0KKwkJc2QtPmNsb2NrZGl2ID0gMDsKKwl9IGVsc2UgaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY3MCkgeyAvKiBndWVzc2VzLCBiYXNlZCBvbiA3NjQwICovCisJCVBERUJVRyhEX1NUUkVBTSwgIlNldHRpbmcgZnJhbWVyYXRlIHRvICVkIGZwcyIsCisJCQkJIChzZC0+ZnJhbWVfcmF0ZSA9PSAwKSA/IDE1IDogc2QtPmZyYW1lX3JhdGUpOworCQlzd2l0Y2ggKHNkLT5mcmFtZV9yYXRlKSB7CisJCWNhc2UgMzA6CisJCQlyZWdfdyhzZCwgMHhhNCwgMHgxMCk7CisJCQlyZWdfdyhzZCwgMHgyMywgMHhmZik7CisJCQlicmVhazsKKwkJY2FzZSAyMDoKKwkJCXJlZ193KHNkLCAweGE0LCAweDEwKTsKKwkJCXJlZ193KHNkLCAweDIzLCAweDFiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvKiAxNSBmcHMgKi8KKy8qCQkJY2FzZSAxNTogKi8KKwkJCXJlZ193KHNkLCAweGE0LCAweDEwKTsKKwkJCXJlZ193KHNkLCAweDIzLCAweGZmKTsKKwkJCXNkLT5jbG9ja2RpdiA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworLyoJaWYgKG92NTF4X3Jlc3RhcnQoc2QpIDwgMCkKKwkJcmV0dXJuIC1FSU87ICovCisKKwkvKiBSZXNldCBpdCBqdXN0IGZvciBnb29kIG1lYXN1cmUgKi8KKy8qCWlmIChvdjUxeF9yZXNldChzZCwgT1Y1MTFfUkVTRVRfTk9SRUdTKSA8IDApCisJCXJldHVybiAtRUlPOyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhzdHJ1Y3Qgc2QgKnNkLAorCQkJCXN0cnVjdCBvdnNlbnNvcl93aW5kb3cgKndpbikKK3sKKwlpbnQgcXZnYSA9IHdpbi0+cXVhcnRlcjsKKworCS8qKioqKioqKiBNb2RlIChWR0EvUVZHQSkgYW5kIHNlbnNvciBzcGVjaWZpYyByZWdzICoqKioqKioqLworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOX09WODYxMDoKKwkJLyogRm9yIE9WODYxMCBxdmdhIG1lYW5zIHFzdmdhICovCisJCWkyY193X21hc2soc2QsIE9WNzYxMF9SRUdfQ09NX0MsIHF2Z2EgPyAoMSA8PCA1KSA6IDAsIDEgPDwgNSk7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNzYxMDoKKwkJaTJjX3dfbWFzayhzZCwgMHgxNCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorLyoJCWkyY193KHNkLCAweDJiLCAweDAwKTsgKi8KKwkJaTJjX3dfbWFzayhzZCwgMHgxNCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsKKwkJaTJjX3dfbWFzayhzZCwgMHgyOCwgcXZnYSA/IDB4MDAgOiAweDIwLCAweDIwKTsKKwkJaTJjX3coc2QsIDB4MjQsIHF2Z2EgPyAweDIwIDogMHgzYSk7CisJCWkyY193KHNkLCAweDI1LCBxdmdhID8gMHgzMCA6IDB4NjApOworCQlpMmNfd19tYXNrKHNkLCAweDJkLCBxdmdhID8gMHg0MCA6IDB4MDAsIDB4NDApOworCQlpMmNfd19tYXNrKHNkLCAweDY3LCBxdmdhID8gMHhmMCA6IDB4OTAsIDB4ZjApOworCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2QkU6CisvKgkJaTJjX3coc2QsIDB4MmIsIDB4MDApOyAqLworCQlpMmNfd19tYXNrKHNkLCAweDE0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2NDA6CisvKgkJaTJjX3coc2QsIDB4MmIsIDB4MDApOyAqLworCQlpMmNfd19tYXNrKHNkLCAweDE0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOworCQlpMmNfd19tYXNrKHNkLCAweDI4LCBxdmdhID8gMHgwMCA6IDB4MjAsIDB4MjApOworLyoJCWkyY193KHNkLCAweDI0LCBxdmdhID8gMHgyMCA6IDB4M2EpOyAqLworLyoJCWkyY193KHNkLCAweDI1LCBxdmdhID8gMHgzMCA6IDB4NjApOyAqLworLyoJCWkyY193X21hc2soc2QsIDB4MmQsIHF2Z2EgPyAweDQwIDogMHgwMCwgMHg0MCk7ICovCisvKgkJaTJjX3dfbWFzayhzZCwgMHg2NywgcXZnYSA/IDB4ZjAgOiAweDkwLCAweGYwKTsgKi8KKy8qCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOyAqLworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2NzA6CisJCS8qIHNldCBDT003X0ZNVF9WR0Egb3IgQ09NN19GTVRfUVZHQQorCQkgKiBkbyB3ZSBuZWVkIHRvIHNldCBhbnl0aGluZyBlbHNlPworCQkgKglIU1RBUlQgZXRjIGFyZSBzZXQgaW4gc2V0X292X3NlbnNvcl93aW5kb3cgaXRzZWxmICovCisJCWkyY193X21hc2soc2QsIE9WNzY3MF9SRUdfQ09NNywKKwkJCSBxdmdhID8gT1Y3NjcwX0NPTTdfRk1UX1FWR0EgOiBPVjc2NzBfQ09NN19GTVRfVkdBLAorCQkJIE9WNzY3MF9DT003X0ZNVF9NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjIwOgorCQlpMmNfd19tYXNrKHNkLCAweDE0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MzA6CisJCWkyY193X21hc2soc2QsIDB4MTQsIHF2Z2EgPyAweDIwIDogMHgwMCwgMHgyMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qKioqKioqKiBQYWxldHRlLXNwZWNpZmljIHJlZ3MgKioqKioqKiovCisvKiBOZWVkIHRvIGRvIHdvcmsgaGVyZSBmb3IgdGhlIE9WNzY3MCAqLworCisJCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2MTAgfHwgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NkJFKSB7CisJCQkvKiBub3QgdmFsaWQgb24gdGhlIE9WNjYyMC9PVjc2MjAvNjYzMD8gKi8KKwkJCWkyY193X21hc2soc2QsIDB4MGUsIDB4MDAsIDB4NDApOworCQl9CisKKwkJLyogVGhlIE9WNTE4IG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LiBBbHRob3VnaCBib3RoIHRoZSBPVjUxOAorCQkgKiBhbmQgdGhlIE9WNjYzMCBzdXBwb3J0IGEgMTYtYml0IHZpZGVvIGJ1cywgb25seSB0aGUgOCBiaXQgWQorCQkgKiBidXMgaXMgYWN0dWFsbHkgdXNlZC4gVGhlIFVWIGJ1cyBpcyB0aWVkIHRvIGdyb3VuZC4KKwkJICogVGhlcmVmb3JlLCB0aGUgT1Y2NjMwIG5lZWRzIHRvIGJlIGluIDgtYml0IG11bHRpcGxleGVkCisJCSAqIG91dHB1dCBtb2RlICovCisKKwkJLyogT1Y3NjQwIGlzIDgtYml0IG9ubHkgKi8KKworCQlpZiAoc2QtPnNlbnNvciAhPSBTRU5fT1Y2NjMwICYmIHNkLT5zZW5zb3IgIT0gU0VOX09WNzY0MCkKKwkJCWkyY193X21hc2soc2QsIDB4MTMsIDB4MDAsIDB4MjApOworLyoJfSAqLworCisJLyoqKioqKioqIENsb2NrIHByb2dyYW1taW5nICoqKioqKioqLworCS8qIFRoZSBPVjY2MjAgbmVlZHMgc3BlY2lhbCBoYW5kbGluZy4gVGhpcyBwcmV2ZW50cyB0aGUKKwkgKiBzZXZlcmUgYmFuZGluZyB0aGF0IG5vcm1hbGx5IG9jY3VycyAqLworCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjY2MjApIHsKKworCQkvKiBDbG9jayBkb3duICovCisJCWkyY193KHNkLCAweDJhLCAweDA0KTsKKwkJaTJjX3coc2QsIDB4MTEsIHdpbi0+Y2xvY2tkaXYpOworCQlpMmNfdyhzZCwgMHgyYSwgMHg4NCk7CisJCS8qIFRoaXMgbmV4dCBzZXR0aW5nIGlzIGNyaXRpY2FsLiBJdCBzZWVtcyB0byBpbXByb3ZlCisJCSAqIHRoZSBnYWluIG9yIHRoZSBjb250cmFzdC4gVGhlICJyZXNlcnZlZCIgYml0cyBzZWVtCisJCSAqIHRvIGhhdmUgc29tZSBlZmZlY3QgaW4gdGhpcyBjYXNlLiAqLworCQlpMmNfdyhzZCwgMHgyZCwgMHg4NSk7CisJfSBlbHNlIGlmICh3aW4tPmNsb2NrZGl2ID49IDApIHsKKwkJaTJjX3coc2QsIDB4MTEsIHdpbi0+Y2xvY2tkaXYpOworCX0KKworCS8qKioqKioqKiBTcGVjaWFsIEZlYXR1cmVzICoqKioqKioqLworLyogbm8gZXZpZGVuY2UgdGhpcyBpcyBwb3NzaWJsZSB3aXRoIE9WNzY3MCwgZWl0aGVyICovCisJLyogVGVzdCBQYXR0ZXJuICovCisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOX09WNzY0MCAmJiBzZC0+c2Vuc29yICE9IFNFTl9PVjc2NzApCisJCWkyY193X21hc2soc2QsIDB4MTIsIDB4MDAsIDB4MDIpOworCisJLyogRW5hYmxlIGF1dG8gd2hpdGUgYmFsYW5jZSAqLworCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NzApCisJCWkyY193X21hc2soc2QsIE9WNzY3MF9SRUdfQ09NOCwgT1Y3NjcwX0NPTThfQVdCLAorCQkJCU9WNzY3MF9DT004X0FXQik7CisJZWxzZQorCQlpMmNfd19tYXNrKHNkLCAweDEyLCAweDA0LCAweDA0KTsKKworCS8qIFRoaXMgd2lsbCBnbyBhd2F5IGFzIHNvb24gYXMgb3Y1MXhfbW9kZV9pbml0X3NlbnNvcl9yZWdzKCkgKi8KKwkvKiBpcyBmdWxseSB0ZXN0ZWQuICovCisJLyogNzYyMC82NjIwLzY2MzA/IGRvbid0IGhhdmUgcmVnaXN0ZXIgMHgzNSwgc28gcGxheSBpdCBzYWZlICovCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzYxMCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjc2QkUpIHsKKwkJaWYgKHdpbi0+d2lkdGggPT0gNjQwIC8qJiYgd2luLT5oZWlnaHQgPT0gNDgwKi8pCisJCQlpMmNfdyhzZCwgMHgzNSwgMHg5ZSk7CisJCWVsc2UKKwkJCWkyY193KHNkLCAweDM1LCAweDFlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X292X3NlbnNvcl93aW5kb3coc3RydWN0IHNkICpzZCwKKwkJCQlzdHJ1Y3Qgb3ZzZW5zb3Jfd2luZG93ICp3aW4pCit7CisJaW50IGh3c2Jhc2UsIGh3ZWJhc2UsIHZ3c2Jhc2UsIHZ3ZWJhc2UsIGh3c2NhbGUsIHZ3c2NhbGU7CisJaW50IHJldCwgaHN0YXJ0LCBoc3RvcCwgdnN0b3AsIHZzdGFydDsKKwlfX3U4IHY7CisKKwkvKiBUaGUgZGlmZmVyZW50IHNlbnNvciBJQ3MgaGFuZGxlIHNldHRpbmcgdXAgb2Ygd2luZG93IGRpZmZlcmVudGx5LgorCSAqIElGIFlPVSBTRVQgSVQgV1JPTkcsIFlPVSBXSUxMIEdFVCBBTEwgWkVSTyBJU09DIERBVEEgRlJPTSBPVjUxeCEhICovCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y4NjEwOgorCQlod3NiYXNlID0gMHgxZTsKKwkJaHdlYmFzZSA9IDB4MWU7CisJCXZ3c2Jhc2UgPSAweDAyOworCQl2d2ViYXNlID0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzZCRToKKwkJaHdzYmFzZSA9IDB4Mzg7CisJCWh3ZWJhc2UgPSAweDNhOworCQl2d3NiYXNlID0gdndlYmFzZSA9IDB4MDU7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCWh3c2Jhc2UgPSAweDM4OworCQlod2ViYXNlID0gMHgzYTsKKwkJdndzYmFzZSA9IDB4MDU7CisJCXZ3ZWJhc2UgPSAweDA2OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisJCWh3c2Jhc2UgPSAweDJmOwkJLyogRnJvbSA3NjIwLlNFVCAoc3BlYyBpcyB3cm9uZykgKi8KKwkJaHdlYmFzZSA9IDB4MmY7CisJCXZ3c2Jhc2UgPSB2d2ViYXNlID0gMHgwNTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjQwOgorCQlod3NiYXNlID0gMHgxYTsKKwkJaHdlYmFzZSA9IDB4MWE7CisJCXZ3c2Jhc2UgPSB2d2ViYXNlID0gMHgwMzsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjcwOgorCQkvKmhhbmRsaW5nIG9mIE9WNzY3MCBoYXJkd2FyZSBzZW5zb3Igc3RhcnQgYW5kIHN0b3AgdmFsdWVzCisJCSAqIGlzIHZlcnkgb2RkLCBjb21wYXJlZCB0byB0aGUgb3RoZXIgT1Ygc2Vuc29ycyAqLworCQl2d3NiYXNlID0gdndlYmFzZSA9IGh3ZWJhc2UgPSBod3NiYXNlID0gMHgwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y2NjIwOgorCWNhc2UgU0VOX09WNjYzMDoKKwkJaWYgKHdpbi0+cXVhcnRlcikgewkvKiBRQ0lGICovCisJCQlod3NjYWxlID0gMDsKKwkJCXZ3c2NhbGUgPSAwOworCQl9IGVsc2UgewkJLyogQ0lGICovCisJCQlod3NjYWxlID0gMTsKKwkJCXZ3c2NhbGUgPSAxOwkvKiBUaGUgZGF0YXNoZWV0IHNheXMgMDsKKwkJCQkJICogaXQncyB3cm9uZyAqLworCQl9CisJCWJyZWFrOworCWNhc2UgU0VOX09WODYxMDoKKwkJaWYgKHdpbi0+cXVhcnRlcikgewkvKiBRU1ZHQSAqLworCQkJaHdzY2FsZSA9IDE7CisJCQl2d3NjYWxlID0gMTsKKwkJfSBlbHNlIHsJCS8qIFNWR0EgKi8KKwkJCWh3c2NhbGUgPSAyOworCQkJdndzY2FsZSA9IDI7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoJCQkvKiBTRU5fT1Y3eHgwICovCisJCWlmICh3aW4tPnF1YXJ0ZXIpIHsJLyogUVZHQSAqLworCQkJaHdzY2FsZSA9IDE7CisJCQl2d3NjYWxlID0gMDsKKwkJfSBlbHNlIHsJCS8qIFZHQSAqLworCQkJaHdzY2FsZSA9IDI7CisJCQl2d3NjYWxlID0gMTsKKwkJfQorCX0KKworCXJldCA9IG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhzZCwgd2luKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjg2MTApIHsKKwkJaTJjX3dfbWFzayhzZCwgMHgyZCwgMHgwNSwgMHg0MCk7CisJCQkJLyogb2xkIDB4OTUsIG5ldyAweDA1IGZyb20gd2luZHJ2IDA5MDQwMyAqLworCQkJCQkJLyogYml0cyA1LTc6IHJlc2VydmVkICovCisJCWkyY193X21hc2soc2QsIDB4MjgsIDB4MjAsIDB4MjApOworCQkJCQkvKiBiaXQgNTogcHJvZ3Jlc3NpdmUgbW9kZSBvbiAqLworCX0KKworCS8qIFRoZSBiZWxvdyBpcyB3cm9uZyBmb3IgT1Y3NjcwcyBiZWNhdXNlIHRoZWlyIHdpbmRvdyByZWdpc3RlcnMKKwkgKiBvbmx5IHN0b3JlIHRoZSBoaWdoIGJpdHMgaW4gMHgxNyB0byAweDFhICovCisKKwkvKiBTUkggVXNlIHNkLT5tYXggdmFsdWVzIGluc3RlYWQgb2YgcmVxdWVzdGVkIHdpbiB2YWx1ZXMgKi8KKwkvKiBTQ1MgU2luY2Ugd2UncmUgc3RpY2tpbmcgd2l0aCBvbmx5IHRoZSBtYXggaGFyZHdhcmUgd2lkdGhzCisJICogZm9yIGEgZ2l2ZW4gbW9kZSAqLworCS8qIEkgY2FuIGhhcmQgY29kZSB0aGlzIGZvciBPVjc2NzBzICovCisJLyogWWVzLCB0aGVzZSBudW1iZXJzIGRvIGxvb2sgb2RkLCBidXQgdGhleSdyZSB0ZXN0ZWQgYW5kIHdvcmshICovCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY3MCkgeworCQlpZiAod2luLT5xdWFydGVyKSB7CS8qIFFWR0EgZnJvbSBvdjc2NzAuYyBieQorCQkJCQkgKiBKb25hdGhhbiBDb3JiZXQgKi8KKwkJCWhzdGFydCA9IDE2NDsKKwkJCWhzdG9wID0gMjA7CisJCQl2c3RhcnQgPSAxNDsKKwkJCXZzdG9wID0gNDk0OworCQl9IGVsc2UgewkJLyogVkdBICovCisJCQloc3RhcnQgPSAxNTg7CisJCQloc3RvcCA9IDE0OworCQkJdnN0YXJ0ID0gMTA7CisJCQl2c3RvcCA9IDQ5MDsKKwkJfQorCQkvKiBPVjc2NzAgaGFyZHdhcmUgd2luZG93IHJlZ2lzdGVycyBhcmUgc3BsaXQgYWNyb3NzCisJCSAqIG11bHRpcGxlIGxvY2F0aW9ucyAqLworCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19IU1RBUlQsIChoc3RhcnQgPj4gMykgJiAweGZmKTsKKwkJaTJjX3coc2QsIE9WNzY3MF9SRUdfSFNUT1AsIChoc3RvcCA+PiAzKSAmIDB4ZmYpOworCQl2ID0gaTJjX3Ioc2QsIE9WNzY3MF9SRUdfSFJFRik7CisJCXYgPSAodiAmIDB4YzApIHwgKChoc3RvcCAmIDB4NykgPDwgMykgfCAoaHN0YXJ0ICYgMHgwNyk7CisJCW1zbGVlcCgxMCk7CS8qIG5lZWQgdG8gc2xlZXAgYmV0d2VlbiByZWFkIGFuZCB3cml0ZSB0bworCQkJCSAqIHNhbWUgcmVnISAqLworCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19IUkVGLCB2KTsKKworCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19WU1RBUlQsICh2c3RhcnQgPj4gMikgJiAweGZmKTsKKwkJaTJjX3coc2QsIE9WNzY3MF9SRUdfVlNUT1AsICh2c3RvcCA+PiAyKSAmIDB4ZmYpOworCQl2ID0gaTJjX3Ioc2QsIE9WNzY3MF9SRUdfVlJFRik7CisJCXYgPSAodiAmIDB4YzApIHwgKCh2c3RvcCAmIDB4MykgPDwgMikgfCAodnN0YXJ0ICYgMHgwMyk7CisJCW1zbGVlcCgxMCk7CS8qIG5lZWQgdG8gc2xlZXAgYmV0d2VlbiByZWFkIGFuZCB3cml0ZSB0bworCQkJCSAqIHNhbWUgcmVnISAqLworCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19WUkVGLCB2KTsKKworCX0gZWxzZSB7CisJCWkyY193KHNkLCAweDE3LCBod3NiYXNlICsgKHdpbi0+eCA+PiBod3NjYWxlKSk7CisJCWkyY193KHNkLCAweDE4LCBod2ViYXNlICsgKCh3aW4tPnggKyB3aW4tPndpZHRoKSA+PiBod3NjYWxlKSk7CisJCWkyY193KHNkLCAweDE5LCB2d3NiYXNlICsgKHdpbi0+eSA+PiB2d3NjYWxlKSk7CisJCWkyY193KHNkLCAweDFhLCB2d2ViYXNlICsgKCh3aW4tPnkgKyB3aW4tPmhlaWdodCkgPj4gdndzY2FsZSkpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdl9zZW5zb3JfbW9kZV9zZXR1cChzdHJ1Y3Qgc2QgKnNkLAorCQkJCWludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlzdHJ1Y3Qgb3ZzZW5zb3Jfd2luZG93IHdpbjsKKworLyoJd2luLmZvcm1hdCA9IG1vZGU7ICovCisKKwkvKiBVbmxlc3Mgc3ViY2FwdHVyZSBpcyBlbmFibGVkLAorCSAqIGNlbnRlciB0aGUgaW1hZ2Ugd2luZG93IGFuZCBkb3duc2FtcGxlCisJICogaWYgcG9zc2libGUgdG8gaW5jcmVhc2UgdGhlIGZpZWxkIG9mIHZpZXcgKi8KKwkvKiBOT1RFOiBPVjUxOCgrKSBhbmQgT1Y1MTkgZG9lcyBkb3duc2FtcGxpbmcgb24gaXRzIG93biAqLworCXdpbi53aWR0aCA9IHdpZHRoOworCXdpbi5oZWlnaHQgPSBoZWlnaHQ7CisJaWYgKHdpZHRoID09IHNkLT5tYXh3aWR0aCkKKwkJd2luLnF1YXJ0ZXIgPSAwOworCWVsc2UKKwkJd2luLnF1YXJ0ZXIgPSAxOworCisJLyogQ2VudGVyIGl0ICovCisJd2luLnggPSAod2luLndpZHRoIC0gd2lkdGgpIC8gMjsKKwl3aW4ueSA9ICh3aW4uaGVpZ2h0IC0gaGVpZ2h0KSAvIDI7CisKKwkvKiBDbG9jayBpcyBkZXRlcm1pbmVkIGJ5IE9WNTE5IGZyYW1lIHJhdGUgY29kZSAqLworCXdpbi5jbG9ja2RpdiA9IHNkLT5jbG9ja2RpdjsKKworCVBERUJVRyhEX0NPTkYsICJTZXR0aW5nIGNsb2NrIGRpdmlkZXIgdG8gJWQiLCB3aW4uY2xvY2tkaXYpOworCXJldHVybiBzZXRfb3Zfc2Vuc29yX3dpbmRvdyhzZCwgJndpbik7Cit9CisKKy8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCisJcmV0ID0gb3Y1MTlfbW9kZV9pbml0X3JlZ3Moc2QsIGdzcGNhX2Rldi0+d2lkdGgsIGdzcGNhX2Rldi0+aGVpZ2h0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmV0ID0gb3Zfc2Vuc29yX21vZGVfc2V0dXAoc2QsIGdzcGNhX2Rldi0+d2lkdGgsIGdzcGNhX2Rldi0+aGVpZ2h0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBvdjUxeF9yZXN0YXJ0KChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0ZWQgYWx0OiAweCUwMngiLCBnc3BjYV9kZXYtPmFsdCk7CisJb3Y1MXhfbGVkX2NvbnRyb2woc2QsIDEpOworCXJldHVybjsKK291dDoKKwlQREVCVUcoRF9FUlIsICJjYW1lcmEgc3RhcnQgZXJyb3I6JWQiLCByZXQpOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJb3Y1MXhfc3RvcCgoc3RydWN0IHNkICopIGdzcGNhX2Rldik7CisJb3Y1MXhfbGVkX2NvbnRyb2woKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYsIDApOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2Nsb3NlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJLyogSGVhZGVyIG9mIG92NTE5IGlzIDE2IGJ5dGVzOgorCSAqICAgICBCeXRlICAgICBWYWx1ZSAgICAgIERlc2NyaXB0aW9uCisJICoJMAkweGZmCW1hZ2ljCisJICoJMQkweGZmCW1hZ2ljCisJICoJMgkweGZmCW1hZ2ljCisJICoJMwkweFhYCTB4NTAgPSBTT0YsIDB4NTEgPSBFT0YKKwkgKgk5CTB4WFgJMHgwMSBpbml0aWFsIGZyYW1lIHdpdGhvdXQgZGF0YSwKKwkgKgkJCTB4MDAgc3RhbmRhcmQgZnJhbWUgd2l0aCBpbWFnZQorCSAqCTE0CUxvCWluIEVPRjogbGVuZ3RoIG9mIGltYWdlIGRhdGEgLyA4CisJICoJMTUJSGkKKwkgKi8KKworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGZmICYmIGRhdGFbMl0gPT0gMHhmZikgeworCQlzd2l0Y2ggKGRhdGFbM10pIHsKKwkJY2FzZSAweDUwOgkJLyogc3RhcnQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgSERSU1ogMTYKKwkJCWRhdGEgKz0gSERSU1o7CisJCQlsZW4gLT0gSERSU1o7CisjdW5kZWYgSERSU1oKKwkJCWlmIChkYXRhWzBdID09IDB4ZmYgfHwgZGF0YVsxXSA9PSAweGQ4KQorCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCQlkYXRhLCBsZW4pOworCQkJZWxzZQorCQkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJcmV0dXJuOworCQljYXNlIDB4NTE6CQkvKiBlbmQgb2YgZnJhbWUgKi8KKwkJCWlmIChkYXRhWzldICE9IDApCisJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWRhdGEsIDApOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogaW50ZXJtZWRpYXRlIHBhY2tldCAqLworCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCisJCQlkYXRhLCBsZW4pOworfQorCisvKiAtLSBtYW5hZ2VtZW50IHJvdXRpbmVzIC0tICovCisKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgdmFsOworLyoJaW50IHdhc19zdHJlYW1pbmc7ICovCisKKwl2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlQREVCVUcoRF9DT05GLCAiYnJpZ2h0bmVzczolZCIsIHZhbCk7CisvKgl3YXNfc3RyZWFtaW5nID0gZ3NwY2FfZGV2LT5zdHJlYW1pbmc7CisgKglpZiAod2FzX3N0cmVhbWluZykKKyAqCQlvdjUxeF9zdG9wKHNkKTsgKi8KKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjg2MTA6CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzZCRToKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCWNhc2UgU0VOX09WNzY0MDoKKwkJaTJjX3coc2QsIE9WNzYxMF9SRUdfQlJULCB2YWwpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisJCS8qIDc2MjAgZG9lc24ndCBsaWtlIG1hbnVhbCBjaGFuZ2VzIHdoZW4gaW4gYXV0byBtb2RlICovCisvKmZpeG1lCisgKgkJaWYgKCFzZC0+YXV0b19icnQpICovCisJCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19CUlQsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNzY3MDoKKy8qamZtIC0gZnJvbSB3aW5kYmxvd3MKKyAqCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUkVHX0NPTTgsIDAsIE9WNzY3MF9DT004X0FFQyk7ICovCisJCWkyY193KHNkLCBPVjc2NzBfUkVHX0JSSUdIVCwgb3Y3NjcwX2Fic190b19zbSh2YWwpKTsKKwkJYnJlYWs7CisJfQorLyoJaWYgKHdhc19zdHJlYW1pbmcpCisgKgkJb3Y1MXhfcmVzdGFydChzZCk7ICovCit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHZhbDsKKy8qCWludCB3YXNfc3RyZWFtaW5nOyAqLworCisJdmFsID0gc2QtPmNvbnRyYXN0OworCVBERUJVRyhEX0NPTkYsICJjb250cmFzdDolZCIsIHZhbCk7CisvKgl3YXNfc3RyZWFtaW5nID0gZ3NwY2FfZGV2LT5zdHJlYW1pbmc7CisJaWYgKHdhc19zdHJlYW1pbmcpCisJCW92NTF4X3N0b3Aoc2QpOyAqLworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjY2MjA6CisJCWkyY193KHNkLCBPVjc2MTBfUkVHX0NOVCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlpMmNfd19tYXNrKHNkLCBPVjc2MTBfUkVHX0NOVCwgdmFsID4+IDQsIDB4MGYpOworCWNhc2UgU0VOX09WODYxMDogeworCQlzdGF0aWMgY29uc3QgX191OCBjdGFiW10gPSB7CisJCQkweDAzLCAweDA5LCAweDBiLCAweDBmLCAweDUzLCAweDZmLCAweDM1LCAweDdmCisJCX07CisKKwkJLyogVXNlIFkgZ2FtbWEgY29udHJvbCBpbnN0ZWFkLiBCaXQgMCBlbmFibGVzIGl0LiAqLworCQlpMmNfdyhzZCwgMHg2NCwgY3RhYlt2YWwgPj4gNV0pOworCQlicmVhazsKKwkgICAgfQorCWNhc2UgU0VOX09WNzYyMDogeworCQlzdGF0aWMgY29uc3QgX191OCBjdGFiW10gPSB7CisJCQkweDAxLCAweDA1LCAweDA5LCAweDExLCAweDE1LCAweDM1LCAweDM3LCAweDU3LAorCQkJMHg1YiwgMHhhNSwgMHhhNywgMHhjNywgMHhjOSwgMHhjZiwgMHhlZiwgMHhmZgorCQl9OworCisJCS8qIFVzZSBZIGdhbW1hIGNvbnRyb2wgaW5zdGVhZC4gQml0IDAgZW5hYmxlcyBpdC4gKi8KKwkJaTJjX3coc2QsIDB4NjQsIGN0YWJbdmFsID4+IDRdKTsKKwkJYnJlYWs7CisJICAgIH0KKwljYXNlIFNFTl9PVjc2NDA6CisJCS8qIFVzZSBnYWluIGNvbnRyb2wgaW5zdGVhZC4gKi8KKwkJaTJjX3coc2QsIE9WNzYxMF9SRUdfR0FJTiwgdmFsID4+IDIpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2NzA6CisJCS8qIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBqdXN0IHRoZSBzYW1lIGFzIG92NzYxMCAqLworCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19DT05UUkFTLCB2YWwgPj4gMSk7CisJCWJyZWFrOworCX0KKy8qCWlmICh3YXNfc3RyZWFtaW5nKQorCQlvdjUxeF9yZXN0YXJ0KHNkKTsgKi8KK30KKworc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHZhbDsKKy8qCWludCB3YXNfc3RyZWFtaW5nOyAqLworCisJdmFsID0gc2QtPmNvbG9yczsKKwlQREVCVUcoRF9DT05GLCAic2F0dXJhdGlvbjolZCIsIHZhbCk7CisvKgl3YXNfc3RyZWFtaW5nID0gZ3NwY2FfZGV2LT5zdHJlYW1pbmc7CisJaWYgKHdhc19zdHJlYW1pbmcpCisJCW92NTF4X3N0b3Aoc2QpOyAqLworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOX09WODYxMDoKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCWkyY193KHNkLCBPVjc2MTBfUkVHX1NBVCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorCQkvKiBVc2UgVVYgZ2FtbWEgY29udHJvbCBpbnN0ZWFkLiBCaXRzIDAgJiA3IGFyZSByZXNlcnZlZC4gKi8KKy8qCQlyYyA9IG92X2kyY193cml0ZShzZC0+ZGV2LCAweDYyLCAodmFsID4+IDkpICYgMHg3ZSk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsgKi8KKwkJaTJjX3coc2QsIE9WNzYxMF9SRUdfU0FULCB2YWwpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2NDA6CisJCWkyY193KHNkLCBPVjc2MTBfUkVHX1NBVCwgdmFsICYgMHhmMCk7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNzY3MDoKKwkJLyogc3VwcG9ydGVkIGxhdGVyIG9uY2UgSSB3b3JrIG91dCBob3cgdG8gZG8gaXQKKwkJICogdHJhbnNwYXJlbnRseSBmYWlsIG5vdyEgKi8KKwkJLyogc2V0IFJFR19DT00xMyB2YWx1ZXMgZm9yIFVWIHNhdCBhdXRvIG1vZGUgKi8KKwkJYnJlYWs7CisJfQorLyoJaWYgKHdhc19zdHJlYW1pbmcpCisJCW92NTF4X3Jlc3RhcnQoc2QpOyAqLworfQorCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9ycyA9IHZhbDsKKwlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29sb3JzOworCXJldHVybiAwOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5vcGVuID0gc2Rfb3BlbiwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKKwkuY2xvc2UgPSBzZF9jbG9zZSwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworI2RlZmluZSBEVk5NKG5hbWUpIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkgbmFtZQorc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNTIpLCBEVk5NKCJDcmVhdGl2ZSBMaXZlISBWSVNUQSBJTSIpfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1ZiksIERWTk0oIkNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDMzMCIpfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA2MCksIERWTk0oIkNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDM1MCIpfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA2MSksIERWTk0oIkNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDQwMCIpfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA2NCksIERWTk0oIkNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDQyMCIpfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA2OCksIERWTk0oIkNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDQ3MCIpfSwKKwl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDI4YyksIERWTk0oIk1pY3Jvc29mdCB4Ym94IGNhbSIpfSwKKwl7VVNCX0RFVklDRSgweDA1NGMsIDB4MDE1NCksIERWTk0oIlNvbm55IHRveTQiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTRjLCAweDAxNTUpLCBEVk5NKCJTb25ueSB0b3k1Iil9LAorCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTE5KSwgRFZOTSgiT21uaVZpc2lvbiIpfSwKKwl7VVNCX0RFVklDRSgweDA1YTksIDB4MDUzMCksIERWTk0oIk9tbmlWaXNpb24iKX0sCisJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDQ1MTkpLCBEVk5NKCJPbW5pVmlzaW9uIil9LAorCXtVU0JfREVWSUNFKDB4MDVhOSwgMHg4NTE5KSwgRFZOTSgiT21uaVZpc2lvbiIpfSwKKwl7fQorfTsKKyN1bmRlZiBEVk5BTUUKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCisJCXJldHVybiAtMTsKKwlQREVCVUcoRF9QUk9CRSwgInYlcyByZWdpc3RlcmVkIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CisKK21vZHVsZV9wYXJhbShmcmFtZV9yYXRlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhmcmFtZV9yYXRlLCAiRnJhbWUgcmF0ZSAoNSwgMTAsIDE1LCAyMCBvciAzMCBmcHMpIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2FiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCkBAIC0wLDAgKzEsNjIyIEBACisvKgorICogUGl4YXJ0IFBBQzIwN0JDQSBsaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhhbnMgZGUgR29lZGUgPGoudy5yLmRlZ29lZGVAaGhzLm5sPgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRob21hcyBLYWlzZXIgdGhvbWFzQGthaXNlci1saW51eC5saQorICogQ29weWxlZnQgKEMpIDIwMDUgTWljaGVsIFhoYWFyZCBteGhhYXJkQG1hZ2ljLmZyCisgKgorICogVjRMMiBieSBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAicGFjMjA3IgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK01PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGoudy5yLmRlZ29lZGVAaGhzLm5sPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaXhhcnQgUEFDMjA3Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgUEFDMjA3X0NUUkxfVElNRU9VVAkJMTAwICAvKiBtcyAqLworCisjZGVmaW5lIFBBQzIwN19CUklHSFRORVNTX01JTgkJMAorI2RlZmluZSBQQUMyMDdfQlJJR0hUTkVTU19NQVgJCTI1NQorI2RlZmluZSBQQUMyMDdfQlJJR0hUTkVTU19ERUZBVUxUCTQgLyogcG93ZXIgb24gZGVmYXVsdDogNCAqLworCisvKiBBbiBleHBvc3VyZSB2YWx1ZSBvZiA0IGFsc28gd29ya3MgKDMgZG9lcyBub3QpIGJ1dCB0aGVuIHdlIG5lZWQgdG8gbG93ZXIKKyAgIHRoZSBjb21wcmVzc2lvbiBiYWxhbmNlIHNldHRpbmcgd2hlbiBpbiAzNTJ4Mjg4IG1vZGUsIG90aGVyd2lzZSB0aGUgdXNiCisgICBiYW5kd2lkdGggaXMgbm90IGVub3VnaCBhbmQgcGFja2V0cyBnZXQgZHJvcHBlZCByZXN1bHRpbmcgaW4gY29ycnVwdAorICAgZnJhbWVzLiBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWxhbmNlIGdldHMKKyAgIGxvd2VyZWQgYmVsb3cgMHg4MCwgdGhlIHBhYzIwNyBzdGFydHMgdXNpbmcgYSBkaWZmZXJlbnQgY29tcHJlc3Npb24KKyAgIGFsZ29yaXRobSBmb3Igc29tZSBsaW5lcywgdGhlc2UgbGluZXMgZ2V0IHByZWZpeGVkIHdpdGggYSAweDJkZDIgcHJlZml4CisgICBhbmQgY3VycmVudGx5IHdlIGRvIG5vdCBrbm93IGhvdyB0byBkZWNvbXByZXNzIHRoZXNlIGxpbmVzLCBzbyBmb3Igbm93CisgICB3ZSB1c2UgYSBtaW5pbXVtIGV4cG9zdXJlIHZhbHVlIG9mIDUgKi8KKyNkZWZpbmUgUEFDMjA3X0VYUE9TVVJFX01JTgkJNQorI2RlZmluZSBQQUMyMDdfRVhQT1NVUkVfTUFYCQkyNgorI2RlZmluZSBQQUMyMDdfRVhQT1NVUkVfREVGQVVMVAkJNSAvKiBwb3dlciBvbiBkZWZhdWx0OiAzID8/ICovCisjZGVmaW5lIFBBQzIwN19FWFBPU1VSRV9LTkVFCQkxMSAvKiA0ID0gMzAgZnBzLCAxMSA9IDgsIDE1ID0gNiAqLworCisjZGVmaW5lIFBBQzIwN19HQUlOX01JTgkJCTAKKyNkZWZpbmUgUEFDMjA3X0dBSU5fTUFYCQkJMzEKKyNkZWZpbmUgUEFDMjA3X0dBSU5fREVGQVVMVCAgICAgICAgIAk5IC8qIHBvd2VyIG9uIGRlZmF1bHQ6IDkgKi8KKyNkZWZpbmUgUEFDMjA3X0dBSU5fS05FRQkJMjAKKworI2RlZmluZSBQQUMyMDdfQVVUT0dBSU5fREVBRFpPTkUJMzAKKy8qIFdlIGNhbGN1bGF0aW5nIHRoZSBhdXRvZ2FpbiBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciBvZiBhIGZyYW1lLCBhdCB0aGlzCisgICBtb21lbnQgYSBmcmFtZSB3aXRoIHRoZSBvbGQgc2V0dGluZ3MgaXMgYmVpbmcgdHJhbnNtaXR0ZWQsIGFuZCBhIGZyYW1lIGlzCisgICBiZWluZyBjYXB0dXJlZCB3aXRoIHRoZSBvbGQgc2V0dGluZ3MuIFNvIGlmIHdlIGFkanVzdCB0aGUgYXV0b2dhaW4gd2UgbXVzdAorICAgaWdub3JlIGF0bGVhc3QgdGhlIDIgbmV4dCBmcmFtZXMgZm9yIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdAorICAgYmVmb3JlIGRvaW5nIGFueSBvdGhlciBhZGp1c3RtZW50cyAqLworI2RlZmluZSBQQUMyMDdfQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUwkzCisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJdTggbW9kZTsKKworCXU4IGJyaWdodG5lc3M7CisJdTggZXhwb3N1cmU7CisJdTggYXV0b2dhaW47CisJdTggZ2FpbjsKKworCXU4IHNvZl9yZWFkOworCXU4IGhlYWRlcl9yZWFkOworCXU4IGF1dG9nYWluX2lnbm9yZV9mcmFtZXM7CisKKwlhdG9taWNfdCBhdmdfbHVtOworfTsKKworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gUEFDMjA3X0JSSUdIVE5FU1NfTUlOLAorCQkubWF4aW11bSA9IFBBQzIwN19CUklHSFRORVNTX01BWCwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IFBBQzIwN19CUklHSFRORVNTX0RFRkFVTFQsCisJCS5mbGFncyA9IDAsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorI2RlZmluZSBTRF9FWFBPU1VSRSAxCisJeworCSAgICB7CisJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gImV4cG9zdXJlIiwKKwkJLm1pbmltdW0gPSBQQUMyMDdfRVhQT1NVUkVfTUlOLAorCQkubWF4aW11bSA9IFBBQzIwN19FWFBPU1VSRV9NQVgsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSBQQUMyMDdfRVhQT1NVUkVfREVGQVVMVCwKKwkJLmZsYWdzID0gMCwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGV4cG9zdXJlLAorCSAgICAuZ2V0ID0gc2RfZ2V0ZXhwb3N1cmUsCisJfSwKKyNkZWZpbmUgU0RfQVVUT0dBSU4gMgorCXsKKwkgICAgeworCQkuaWQJICA9IFY0TDJfQ0lEX0FVVE9HQUlOLAorCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCT0gIkF1dG8gR2FpbiIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcAk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwkJLmZsYWdzID0gMCwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGF1dG9nYWluLAorCSAgICAuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisJfSwKKyNkZWZpbmUgU0RfR0FJTiAzCisJeworCSAgICB7CisJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiZ2FpbiIsCisJCS5taW5pbXVtID0gUEFDMjA3X0dBSU5fTUlOLAorCQkubWF4aW11bSA9IFBBQzIwN19HQUlOX01BWCwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IFBBQzIwN19HQUlOX0RFRkFVTFQsCisJCS5mbGFncyA9IDAsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRnYWluLAorCSAgICAuZ2V0ID0gc2RfZ2V0Z2FpbiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKKwl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9QQUMyMDcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE3NiwKKwkJLnNpemVpbWFnZSA9ICgxNzYgKyAyKSAqIDE0NCwKKwkJCS8qIHVuY29tcHJlc3NlZCwgYWRkIDIgYnl0ZXMgLyBsaW5lIGZvciBsaW5lIGhlYWRlciAqLworCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDF9LAorCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX1BBQzIwNywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkJLyogY29tcHJlc3NlZCwgYnV0IG9ubHkgd2hlbiBuZWVkZWQgKG5vdCBjb21wcmVzc2VkCisJCQkgICB3aGVuIHRoZSBmcmFtZXJhdGUgaXMgbG93KSAqLworCQkuc2l6ZWltYWdlID0gKDM1MiArIDIpICogMjg4LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworc3RhdGljIGNvbnN0IF9fdTggcGFjMjA3X3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4MTAsIDB4MTIsIDB4MGQsIDB4MTIsIDB4MGMsIDB4MDEsIDB4MjksIDB4ZjB9LAorCXsweDAwLCAweDY0LCAweDY0LCAweDY0LCAweDA0LCAweDEwLCAweGYwLCAweDMwfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhhMCwgMHhmOCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4OTYsIDB4MDAsIDB4YTIsIDB4MDJ9LAorCXsweDMyLCAweDAwLCAweDk2LCAweDAwLCAweEEyLCAweDAyLCAweGFmLCAweDAwfSwKK307CisKKwkJCS8qIDQ4IHJlZ183MiBSYXRlIENvbnRyb2wgZW5kIEJhbFNpemVfNGEgPTB4MzYgKi8KK3N0YXRpYyBjb25zdCBfX3U4IFBhY1JlZzcyW10gPSB7IDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFjMjA3X3NvZl9tYXJrZXJbNV0gPQorCQl7IDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4OTYgfTsKKworc3RhdGljIGludCBwYWMyMDdfd3JpdGVfcmVncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBpbmRleCwKKwljb25zdCB1OCAqYnVmZmVyLCB1MTYgbGVuZ3RoKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IGVycjsKKworCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuZ3RoKTsKKworCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MDEsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkweDAwLCBpbmRleCwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuZ3RoLCBQQUMyMDdfQ1RSTF9USU1FT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJUERFQlVHKERfRVJSLAorCQkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlcnMgdG8gaW5kZXggMHglMDRYLCBlcnJvciAlZCkiLAorCQkJaW5kZXgsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCisKK2ludCBwYWMyMDdfd3JpdGVfcmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGluZGV4LCB1MTYgdmFsdWUpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgZXJyOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwMCwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCXZhbHVlLCBpbmRleCwgTlVMTCwgMCwgUEFDMjA3X0NUUkxfVElNRU9VVCk7CisJaWYgKGVycikKKwkJUERFQlVHKERfRVJSLCAiRmFpbGVkIHRvIHdyaXRlIGEgcmVnaXN0ZXIgKGluZGV4IDB4JTA0WCwiCisJCQkiIHZhbHVlIDB4JTAyWCwgZXJyb3IgJWQpIiwgaW5kZXgsIHZhbHVlLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworCitpbnQgcGFjMjA3X3JlYWRfcmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGluZGV4KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJlczsKKworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MDAsCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTB4MDAsIGluZGV4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCBQQUMyMDdfQ1RSTF9USU1FT1VUKTsKKwlpZiAocmVzIDwgMCkgeworCQlQREVCVUcoRF9FUlIsCisJCQkiRmFpbGVkIHRvIHJlYWQgYSByZWdpc3RlciAoaW5kZXggMHglMDRYLCBlcnJvciAlZCkiLAorCQkJaW5kZXgsIHJlcyk7CisJCXJldHVybiByZXM7CisJfQorCisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisJdTggaWRyZWdbMl07CisKKwlpZHJlZ1swXSA9IHBhYzIwN19yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDAwMCk7CisJaWRyZWdbMV0gPSBwYWMyMDdfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDAwMDEpOworCWlkcmVnWzBdID0gKChpZHJlZ1swXSAmIDB4MEYpIDw8IDQpIHwgKChpZHJlZ1sxXSAmIDB4ZjApID4+IDQpOworCWlkcmVnWzFdID0gaWRyZWdbMV0gJiAweDBmOworCVBERUJVRyhEX1BST0JFLCAiUGl4YXJ0IFNlbnNvciBJRCAweCUwMlggQ2hpcHMgSUQgMHglMDJYIiwKKwkJaWRyZWdbMF0sIGlkcmVnWzFdKTsKKworCWlmIChpZHJlZ1swXSAhPSAweDI3KSB7CisJCVBERUJVRyhEX1BST0JFLCAiRXJyb3IgaW52YWxpZCBzZW5zb3IgSUQhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBhYzIwN193cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDQxLCAweDAwKTsKKwkJCQkvKiBCaXRfMD1JbWFnZSBGb3JtYXQsCisJCQkJICogQml0XzE9TEVELAorCQkJCSAqIEJpdF8yPUNvbXByZXNzaW9uIHRlc3QgbW9kZSBlbmFibGUgKi8KKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwZiwgMHgwMCk7IC8qIFBvd2VyIENvbnRyb2wgKi8KKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgxMSwgMHgzMCk7IC8qIEFuYWxvZyBCaWFzICovCisKKwlQREVCVUcoRF9QUk9CRSwKKwkJIlBpeGFydCBQQUMyMDdCQ0EgSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgZGV0ZWN0ZWQiCisJCSIgKHZpZC9waWQgMHglMDRYOjB4JTA0WCkiLCBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJY2FtLT5lcGFkZHIgPSAweDA1OworCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOworCXNkLT5icmlnaHRuZXNzID0gUEFDMjA3X0JSSUdIVE5FU1NfREVGQVVMVDsKKwlzZC0+ZXhwb3N1cmUgPSBQQUMyMDdfRVhQT1NVUkVfREVGQVVMVDsKKwlzZC0+Z2FpbiA9IFBBQzIwN19HQUlOX0RFRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5hdXRvZ2FpbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCBtb2RlOworCisJcGFjMjA3X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MGYsIDB4MTApOyAvKiBQb3dlciBjb250cm9sIChCaXQgNi0wKSAqLworCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDAyLCBwYWMyMDdfc2Vuc29yX2luaXRbMF0sIDgpOworCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDBhLCBwYWMyMDdfc2Vuc29yX2luaXRbMV0sIDgpOworCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDEyLCBwYWMyMDdfc2Vuc29yX2luaXRbMl0sIDgpOworCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDQwLCBwYWMyMDdfc2Vuc29yX2luaXRbM10sIDgpOworCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDQyLCBwYWMyMDdfc2Vuc29yX2luaXRbNF0sIDgpOworCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDQ4LCBQYWNSZWc3MiwgNCk7CisKKwkvKiBDb21wcmVzc2lvbiBCYWxhbmNlICovCisJaWYgKGdzcGNhX2Rldi0+d2lkdGggPT0gMTc2KQorCQlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHg0YSwgMHhmZik7CisJZWxzZQorCQlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHg0YSwgMHg4OCk7CisJcGFjMjA3X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4NGIsIDB4MDApOyAvKiBTcmFtIHRlc3QgdmFsdWUgKi8KKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwOCwgc2QtPmJyaWdodG5lc3MpOworCisJLyogUEdBIGdsb2JhbCBnYWluIChCaXQgNC0wKSAqLworCXBhYzIwN193cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDBlLCBzZC0+Z2Fpbik7CisJcGFjMjA3X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDIsIHNkLT5leHBvc3VyZSk7IC8qIFBYQ0sgPSAxMk1IeiAvbiAqLworCisJbW9kZSA9IDB4MDI7IC8qIEltYWdlIEZvcm1hdCAoQml0IDApLCBMRUQgKDEpLCBDb21wci4gdGVzdCBtb2RlICgyKSAqLworCWlmIChnc3BjYV9kZXYtPndpZHRoID09IDE3NikgewkvKiAxNzZ4MTQ0ICovCisJCW1vZGUgfD0gMHgwMTsKKwkJUERFQlVHKERfU1RSRUFNLCAicGFjMjA3X3N0YXJ0IG1vZGUgMTc2eDE0NCIpOworCX0gZWxzZSB7CQkJCS8qIDM1MngyODggKi8KKwkJUERFQlVHKERfU1RSRUFNLCAicGFjMjA3X3N0YXJ0IG1vZGUgMzUyeDI4OCIpOworCX0KKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHg0MSwgbW9kZSk7CisKKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgxMywgMHgwMSk7IC8qIEJpdCAwLCBhdXRvIGNsZWFyICovCisJcGFjMjA3X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MWMsIDB4MDEpOyAvKiBub3QgZG9jdW1lbnRlZCAqLworCW1zbGVlcCgxMCk7CisJcGFjMjA3X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4NDAsIDB4MDEpOyAvKiBTdGFydCBJU08gcGlwZSAqLworCisJc2QtPnNvZl9yZWFkID0gMDsKKwlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA9IDA7CisJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sIC0xKTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXBhYzIwN193cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDQwLCAweDAwKTsgLyogU3RvcCBJU08gcGlwZSAqLworCXBhYzIwN193cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDQxLCAweDAwKTsgLyogVHVybiBvZiBMRUQgKi8KKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwZiwgMHgwMCk7IC8qIFBvd2VyIENvbnRyb2wgKi8KK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBjbG9zZSB0aW1lICovCitzdGF0aWMgdm9pZCBzZF9jbG9zZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHBhYzIwN19kb19hdXRvX2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgYXZnX2x1bSA9IGF0b21pY19yZWFkKCZzZC0+YXZnX2x1bSk7CisKKwlpZiAoYXZnX2x1bSA9PSAtMSkKKwkJcmV0dXJuOworCisJaWYgKHNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID4gMCkKKwkJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMtLTsKKwllbHNlIGlmIChnc3BjYV9hdXRvX2dhaW5fbl9leHBvc3VyZShnc3BjYV9kZXYsIGF2Z19sdW0sCisJCQkxMDAgKyBzZC0+YnJpZ2h0bmVzcyAvIDIsIFBBQzIwN19BVVRPR0FJTl9ERUFEWk9ORSwKKwkJCVBBQzIwN19HQUlOX0tORUUsIFBBQzIwN19FWFBPU1VSRV9LTkVFKSkKKwkJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPSBQQUMyMDdfQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUzsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnBhYzIwN19maW5kX3NvZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJCXVuc2lnbmVkIGNoYXIgKm0sIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCisJLyogU2VhcmNoIGZvciB0aGUgU09GIG1hcmtlciAoZml4ZWQgcGFydCkgaW4gdGhlIGhlYWRlciAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAobVtpXSA9PSBwYWMyMDdfc29mX21hcmtlcltzZC0+c29mX3JlYWRdKSB7CisJCQlzZC0+c29mX3JlYWQrKzsKKwkJCWlmIChzZC0+c29mX3JlYWQgPT0gc2l6ZW9mKHBhYzIwN19zb2ZfbWFya2VyKSkgeworCQkJCVBERUJVRyhEX1NUUkVBTSwKKwkJCQkJIlNPRiBmb3VuZCwgYnl0ZXMgdG8gYW5hbHl6ZTogJXUuIgorCQkJCQkiIEZyYW1lIHN0YXJ0cyBhdCBieXRlICMldSIsCisJCQkJCWxlbiwgaSArIDEpOworCQkJCXNkLT5zb2ZfcmVhZCA9IDA7CisJCQkJcmV0dXJuIG0gKyBpICsgMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNkLT5zb2ZfcmVhZCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwKKwkJCV9fdTggKmRhdGEsCisJCQlpbnQgbGVuKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1bnNpZ25lZCBjaGFyICpzb2Y7CisKKwlzb2YgPSBwYWMyMDdfZmluZF9zb2YoZ3NwY2FfZGV2LCBkYXRhLCBsZW4pOworCWlmIChzb2YpIHsKKwkJaW50IG47CisKKwkJLyogZmluaXNoIGRlY29kaW5nIGN1cnJlbnQgZnJhbWUgKi8KKwkJbiA9IHNvZiAtIGRhdGE7CisJCWlmIChuID4gc2l6ZW9mIHBhYzIwN19zb2ZfbWFya2VyKQorCQkJbiAtPSBzaXplb2YgcGFjMjA3X3NvZl9tYXJrZXI7CisJCWVsc2UKKwkJCW4gPSAwOworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJZGF0YSwgbik7CisJCXNkLT5oZWFkZXJfcmVhZCA9IDA7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOworCQlsZW4gLT0gc29mIC0gZGF0YTsKKwkJZGF0YSA9IHNvZjsKKwl9CisJaWYgKHNkLT5oZWFkZXJfcmVhZCA8IDExKSB7CisJCWludCBuZWVkZWQ7CisKKwkJLyogZ2V0IGF2ZXJhZ2UgbHVtaW5hdGlvbiBmcm9tIGZyYW1lIGhlYWRlciAoYnl0ZSA1KSAqLworCQlpZiAoc2QtPmhlYWRlcl9yZWFkIDwgNSkgeworCQkJbmVlZGVkID0gNSAtIHNkLT5oZWFkZXJfcmVhZDsKKwkJCWlmIChsZW4gPj0gbmVlZGVkKQorCQkJCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLCBkYXRhW25lZWRlZCAtIDFdKTsKKwkJfQorCQkvKiBza2lwIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIgKi8KKwkJbmVlZGVkID0gMTEgLSBzZC0+aGVhZGVyX3JlYWQ7CisJCWlmIChsZW4gPD0gbmVlZGVkKSB7CisJCQlzZC0+aGVhZGVyX3JlYWQgKz0gbGVuOworCQkJcmV0dXJuOworCQl9CisJCWRhdGEgKz0gbmVlZGVkOworCQlsZW4gLT0gbmVlZGVkOworCQlzZC0+aGVhZGVyX3JlYWQgPSAxMTsKKwl9CisKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwOCwgc2QtPmJyaWdodG5lc3MpOworCXBhYzIwN193cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDEzLCAweDAxKTsJLyogQml0IDAsIGF1dG8gY2xlYXIgKi8KKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgxYywgMHgwMSk7CS8qIG5vdCBkb2N1bWVudGVkICovCit9CisKK3N0YXRpYyB2b2lkIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMiwgc2QtPmV4cG9zdXJlKTsKKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgxMywgMHgwMSk7CS8qIEJpdCAwLCBhdXRvIGNsZWFyICovCisJcGFjMjA3X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MWMsIDB4MDEpOwkvKiBub3QgZG9jdW1lbnRlZCAqLworfQorCitzdGF0aWMgdm9pZCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwZSwgc2QtPmdhaW4pOworCXBhYzIwN193cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDEzLCAweDAxKTsJLyogQml0IDAsIGF1dG8gY2xlYXIgKi8KKwlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgxYywgMHgwMSk7CS8qIG5vdCBkb2N1bWVudGVkICovCit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmJyaWdodG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmV4cG9zdXJlID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5leHBvc3VyZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5nYWluID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Z2Fpbihnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Z2FpbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YXV0b2dhaW4gPSB2YWw7CisJLyogd2hlbiBzd2l0Y2hpbmcgdG8gYXV0b2dhaW4gc2V0IGRlZmF1bHRzIHRvIG1ha2Ugc3VyZQorCSAgIHdlIGFyZSBvbiBhIHZhbGlkIHBvaW50IG9mIHRoZSBhdXRvZ2FpbiBnYWluIC8KKwkgICBleHBvc3VyZSBrbmVlIGdyYXBoLCBhbmQgZ2l2ZSB0aGlzIGNoYW5nZSB0aW1lIHRvCisJICAgdGFrZSBlZmZlY3QgYmVmb3JlIGRvaW5nIGF1dG9nYWluLiAqLworCWlmIChzZC0+YXV0b2dhaW4pIHsKKwkJc2QtPmV4cG9zdXJlID0gUEFDMjA3X0VYUE9TVVJFX0RFRkFVTFQ7CisJCXNkLT5nYWluID0gUEFDMjA3X0dBSU5fREVGQVVMVDsKKwkJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA9CisJCQkJUEFDMjA3X0FVVE9HQUlOX0lHTk9SRV9GUkFNRVM7CisJCQlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCQkJc2V0Z2Fpbihnc3BjYV9kZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YXV0b2dhaW47CisJcmV0dXJuIDA7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLm9wZW4gPSBzZF9vcGVuLAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAorCS5jbG9zZSA9IHNkX2Nsb3NlLAorCS5kcV9jYWxsYmFjayA9IHBhYzIwN19kb19hdXRvX2dhaW4sCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KKyNkZWZpbmUgRFZOTShuYW1lKSAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpIG5hbWUKK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDI4KSwgRFZOTSgiQ3JlYXRpdmUgV2ViY2FtIFZpc3RhIFBsdXMiKX0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NjApLCBEVk5NKCJRLVRlYyBXZWJjYW0gMTAwIil9LAorCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDYzKSwgRFZOTSgiUGhpbGlwcyBzcGMyMDBuYyBwYWMyMDciKX0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NjQpLCBEVk5NKCJMYWJ0ZWMgV2ViY2FtIDEyMDAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NjgpLCBEVk5NKCJQQUMyMDciKX0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzApLCBEVk5NKCJHZW5pdXMgR0YxMTIiKX0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzEpLCBEVk5NKCJHZW5pdXMgVmlkZW9DYW0gR0UxMTEiKX0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzIpLCBEVk5NKCJHZW5pdXMgVmlkZW9DYW0gR0UxMTAiKX0sCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweGYxMTUpLCBEVk5NKCJELUxpbmsgRFNCLUMxMjAiKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJUERFQlVHKERfUFJPQkUsICJ2JXMgcmVnaXN0ZXJlZCIsIHZlcnNpb24pOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzA1MmUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKQEAgLTAsMCArMSw3NjAgQEAKKy8qCisgKgkJUGl4YXJ0IFBBQzczMTEgbGlicmFyeQorICoJCUNvcHlyaWdodCAoQykgMjAwNSBUaG9tYXMgS2Fpc2VyIHRob21hc0BrYWlzZXItbGludXgubGkKKyAqCisgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJwYWM3MzExIgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK01PRFVMRV9BVVRIT1IoIlRob21hcyBLYWlzZXIgdGhvbWFzQGthaXNlci1saW51eC5saSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaXhhcnQgUEFDNzMxMSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJCS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCWludCBhdmdfbHVtOworCisJdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOworCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7CisJdW5zaWduZWQgY2hhciBjb2xvcnM7CisJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKKworCWNoYXIgZmZzZXE7CisJc2lnbmVkIGNoYXIgYWdfY250OworI2RlZmluZSBBR19DTlRfU1RBUlQgMTMKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisjZGVmaW5lIEJSSUdIVE5FU1NfTUFYIDB4MjAKKwkJLm1heGltdW0gPSBCUklHSFRORVNTX01BWCwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAweDEwCisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT05UUkFTVF9ERUYgMTI3CisJCS5kZWZhdWx0X3ZhbHVlID0gQ09OVFJBU1RfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29sb3IiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIENPTE9SX0RFRiAxMjcKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT0xPUl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb2xvcnMsCisJICAgIC5nZXQgPSBzZF9nZXRjb2xvcnMsCisJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSAgICA9ICJBdXRvIEdhaW4iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGF1dG9nYWluLAorCSAgICAuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAorCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMn0sCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9OworCisjZGVmaW5lIFBBQzczMTFfSlBFR19IRUFERVJfU0laRSAoc2l6ZW9mIHBhYzczMTFfanBlZ19oZWFkZXIpCS8qICg1OTQpICovCisKK3N0YXRpYyBjb25zdCBfX3U4IHBhYzczMTFfanBlZ19oZWFkZXJbXSA9IHsKKwkweGZmLCAweGQ4LAorCTB4ZmYsIDB4ZTAsIDB4MDAsIDB4MDMsIDB4MjAsCisJMHhmZiwgMHhjMCwgMHgwMCwgMHgxMSwgMHgwOCwKKwkJMHgwMSwgMHhlMCwJCQkvKiAxMjogaGVpZ2h0ICovCisJCTB4MDIsIDB4ODAsCQkJLyogMTQ6IHdpZHRoICovCisJCTB4MDMsCQkJCS8qIDE2ICovCisJCQkweDAxLCAweDIxLCAweDAwLAorCQkJMHgwMiwgMHgxMSwgMHgwMSwKKwkJCTB4MDMsIDB4MTEsIDB4MDEsCisJMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwKKwkweDAwLCAweDEwLCAweDBiLCAweDBjLCAweDBlLCAweDBjLCAweDBhLCAweDEwLCAweDBlLCAweDBkLAorCTB4MGUsIDB4MTIsIDB4MTEsIDB4MTAsIDB4MTMsIDB4MTgsIDB4MjgsIDB4MWEsIDB4MTgsIDB4MTYsCisJMHgxNiwgMHgxOCwgMHgzMSwgMHgyMywgMHgyNSwgMHgxZCwgMHgyOCwgMHgzYSwgMHgzMywgMHgzZCwKKwkweDNjLCAweDM5LCAweDMzLCAweDM4LCAweDM3LCAweDQwLCAweDQ4LCAweDVjLCAweDRlLCAweDQwLAorCTB4NDQsIDB4NTcsIDB4NDUsIDB4MzcsIDB4MzgsIDB4NTAsIDB4NmQsIDB4NTEsIDB4NTcsIDB4NWYsCisJMHg2MiwgMHg2NywgMHg2OCwgMHg2NywgMHgzZSwgMHg0ZCwgMHg3MSwgMHg3OSwgMHg3MCwgMHg2NCwKKwkweDc4LCAweDVjLCAweDY1LCAweDY3LCAweDYzLCAweDAxLCAweDExLCAweDEyLCAweDEyLCAweDE4LAorCTB4MTUsIDB4MTgsIDB4MmYsIDB4MWEsIDB4MWEsIDB4MmYsIDB4NjMsIDB4NDIsIDB4MzgsIDB4NDIsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCTB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCTB4ZmYsIDB4YzQsIDB4MDEsIDB4YTIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDUsIDB4MDEsIDB4MDEsCisJMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LAorCTB4MDksIDB4MGEsIDB4MGIsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDIsCisJMHgwNCwgMHgwMywgMHgwNSwgMHgwNSwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg3ZCwKKwkweDAxLCAweDAyLCAweDAzLCAweDAwLCAweDA0LCAweDExLCAweDA1LCAweDEyLCAweDIxLCAweDMxLAorCTB4NDEsIDB4MDYsIDB4MTMsIDB4NTEsIDB4NjEsIDB4MDcsIDB4MjIsIDB4NzEsIDB4MTQsIDB4MzIsCisJMHg4MSwgMHg5MSwgMHhhMSwgMHgwOCwgMHgyMywgMHg0MiwgMHhiMSwgMHhjMSwgMHgxNSwgMHg1MiwKKwkweGQxLCAweGYwLCAweDI0LCAweDMzLCAweDYyLCAweDcyLCAweDgyLCAweDA5LCAweDBhLCAweDE2LAorCTB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsCisJMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgzYSwgMHg0MywgMHg0NCwgMHg0NSwKKwkweDQ2LCAweDQ3LCAweDQ4LCAweDQ5LCAweDRhLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LAorCTB4NTgsIDB4NTksIDB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksCisJMHg2YSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwgMHg3OSwgMHg3YSwgMHg4MywKKwkweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLCAweDkyLCAweDkzLCAweDk0LAorCTB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsIDB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsCisJMHhhNiwgMHhhNywgMHhhOCwgMHhhOSwgMHhhYSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwKKwkweGI3LCAweGI4LCAweGI5LCAweGJhLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAorCTB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsCisJMHhkOSwgMHhkYSwgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwKKwkweGU5LCAweGVhLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LAorCTB4ZjksIDB4ZmEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisJMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBhLAorCTB4MGIsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDQsCisJMHgwNywgMHgwNSwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMSwgMHgwMiwgMHg3NywgMHgwMCwgMHgwMSwKKwkweDAyLCAweDAzLCAweDExLCAweDA0LCAweDA1LCAweDIxLCAweDMxLCAweDA2LCAweDEyLCAweDQxLAorCTB4NTEsIDB4MDcsIDB4NjEsIDB4NzEsIDB4MTMsIDB4MjIsIDB4MzIsIDB4ODEsIDB4MDgsIDB4MTQsCisJMHg0MiwgMHg5MSwgMHhhMSwgMHhiMSwgMHhjMSwgMHgwOSwgMHgyMywgMHgzMywgMHg1MiwgMHhmMCwKKwkweDE1LCAweDYyLCAweDcyLCAweGQxLCAweDBhLCAweDE2LCAweDI0LCAweDM0LCAweGUxLCAweDI1LAorCTB4ZjEsIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjYsIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsCisJMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgzYSwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwKKwkweDQ3LCAweDQ4LCAweDQ5LCAweDRhLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAorCTB4NTksIDB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksIDB4NmEsCisJMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwgMHg3OSwgMHg3YSwgMHg4MiwgMHg4MywKKwkweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLCAweDkyLCAweDkzLCAweDk0LAorCTB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsIDB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsCisJMHhhNiwgMHhhNywgMHhhOCwgMHhhOSwgMHhhYSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwKKwkweGI3LCAweGI4LCAweGI5LCAweGJhLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAorCTB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsCisJMHhkOSwgMHhkYSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwKKwkweGVhLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LCAweGY5LCAweGZhLAorCTB4ZmYsIDB4ZGEsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MTEsIDB4MDMsCisJMHgxMSwgMHgwMCwgMHgzZiwgMHgwMAorfTsKKworc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICBfX3UxNiBpbmRleCwKKwkJICBjb25zdCBjaGFyICpidWZmZXIsIF9fdTE2IGxlbikKK3sKKwltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTEsCQkvKiByZXF1ZXN0ICovCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkJLyogdmFsdWUgKi8KKwkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKKwkJCTUwMCk7Cit9CisKK3N0YXRpYyBfX3U4IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgICAgX191MTYgaW5kZXgpCit7CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTAsCQkJLyogcmVxdWVzdCAqLworCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkJCS8qIHZhbHVlICovCisJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLAorCQkJNTAwKTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgX191MTYgaW5kZXgsCisJCSAgX191OCB2YWx1ZSkKK3sKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMCwJCQkvKiByZXF1ZXN0ICovCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwgaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCTUwMCk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtOworCisJUERFQlVHKERfQ09ORiwgIkZpbmQgU2Vuc29yIFBBQzczMTEiKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDApOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF83PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0MCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0Xzc9TEVEICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNz1MRUQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgyNywgMHg4MCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDI4LCAweGNhKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjksIDB4NTMpOworCXJlZ193KGdzcGNhX2RldiwgMHgyYSwgMHgwZSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4M2UsIDB4MjApOworCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJY2FtLT5lcGFkZHIgPSAweDA1OworCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKKwlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgYnJpZ2h0bmVzczsKKworLypqZm06IGludmVydGVkPyovCisJYnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfTUFYIC0gc2QtPmJyaWdodG5lc3M7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsKKy8qCXJlZ193KGdzcGNhX2RldiwgMHgwZSwgMHgwMCk7ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBicmlnaHRuZXNzKTsKKwkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CisJUERFQlVHKERfQ09ORnxEX1NUUkVBTSwgImJyaWdodG5lc3M6ICVpIiwgYnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg4MCwgc2QtPmNvbnRyYXN0KTsKKwkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CisJUERFQlVHKERfQ09ORnxEX1NUUkVBTSwgImNvbnRyYXN0OiAlaSIsIHNkLT5jb250cmFzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTAsIHNkLT5jb2xvcnMpOworCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKKwlQREVCVUcoRF9DT05GfERfU1RSRUFNLCAiY29sb3I6ICVpIiwgc2QtPmNvbG9ycyk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IG9wZW4gdGltZSAqLworc3RhdGljIGludCBzZF9vcGVuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDApOwkvKiBUdXJuIG9uIExFRCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCAweDAwMDIsICJceDQ4XHgwYVx4NDBceDA4XHgwMFx4MDBceDA4XHgwMCIsIDgpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4MDAwYSwgIlx4MDZceGZmXHgxMVx4ZmZceDVhXHgzMFx4OTBceDRjIiwgOCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHgwMDEyLCAiXHgwMFx4MDdceDAwXHgwYVx4MTBceDAwXHhhMFx4MTAiLCA4KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCAweDAwMWEsICJceDAyXHgwMFx4MDBceDAwXHgwMFx4MGJceDAxXHgwMCIsIDgpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4MDAyMiwgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwgOCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHgwMDJhLCAiXHgwMFx4MDBceDAwIiwgMyk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHgwMDNlLCAiXHgwMFx4MDBceDc4XHg1Mlx4NGFceDUyXHg3OFx4NmUiLCA4KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCAweDAwNDYsICJceDQ4XHg0Nlx4NDhceDZlXHg1Zlx4NDlceDQyXHg0OSIsIDgpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4MDA0ZSwgIlx4NWZceDVmXHg0OVx4NDJceDQ5XHg1Zlx4NmVceDQ4IiwgOCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHgwMDU2LCAiXHg0Nlx4NDhceDZlXHg3OFx4NTJceDRhXHg1Mlx4NzgiLCA4KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCAweDAwNWUsICJceDAwXHgwMFx4MDlceDFiXHgzNFx4NDlceDVjXHg5YiIsIDgpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4MDA2NiwgIlx4ZDBceGZmIiwgMik7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHgwMDc4LCAiXHg0NFx4MDBceGYyXHgwMVx4MDFceDgwIiwgNik7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHgwMDdmLCAiXHgyYVx4MWNceDAwXHhjOFx4MDJceDU4XHgwM1x4ODQiLCA4KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCAweDAwODcsICJceDEyXHgwMFx4MWFceDA0XHgwOFx4MGNceDEwXHgxNCIsIDgpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4MDA4ZiwgIlx4MThceDIwIiwgMik7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHgwMDk2LCAiXHgwMVx4MDhceDA0IiwgMyk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHgwMGEwLCAiXHg0NFx4NDRceDQ0XHgwNCIsIDQpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4MDBmMCwgIlx4MDFceDAwXHgwMFx4MDBceDIyXHgwMFx4MjBceDAwIiwgOCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHgwMGY4LCAiXHgzZlx4MDBceDBhXHgwMVx4MDAiLCA1KTsKKworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCAweDA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsIDB4NTQpOworCXJlZ193KGdzcGNhX2RldiwgMHgwNCwgMHgwNyk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA1LCAweDJiKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDYsIDB4MDkpOworCXJlZ193KGdzcGNhX2RldiwgMHgwNywgMHgwZik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA4LCAweDA5KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDksIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwYywgMHgwNyk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBkLCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MGUsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwZiwgMHg2Mik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDEwLCAweDA4KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTIsIDB4MDcpOworCXJlZ193KGdzcGNhX2RldiwgMHgxMywgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDE0LCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTUsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHgxNiwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTgsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHgxOSwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDFhLCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MWIsIDB4MDMpOworCXJlZ193KGdzcGNhX2RldiwgMHgxYywgMHhhMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDFkLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MWUsIDB4ZjQpOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIyLCAweDA4KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjQsIDB4MDMpOworCXJlZ193KGdzcGNhX2RldiwgMHgyNiwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDI3LCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjgsIDB4Y2EpOworCXJlZ193KGdzcGNhX2RldiwgMHgyOSwgMHgxMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDJhLCAweDA2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MmIsIDB4NzgpOworCXJlZ193KGdzcGNhX2RldiwgMHgyYywgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDJkLCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MmUsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHgyZiwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDMwLCAweDIzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MzEsIDB4MjgpOworCXJlZ193KGdzcGNhX2RldiwgMHgzMiwgMHgwNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDMzLCAweDExKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MzQsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHgzNSwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKworCS8qIHNldCBjb3JyZWN0IHJlc29sdXRpb24gKi8KKwlzd2l0Y2ggKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KSB7CisJY2FzZSAyOgkJCQkJLyogMTYweDEyMCAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIDB4MDMpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDkpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MTcsIDB4MjApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MWIsIDB4MDApOworLyoJCXJlZ193KGdzcGNhX2RldiwgMHg4MCwgMHg2OSk7ICovCisJCXJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMCk7CisJCWJyZWFrOworCWNhc2UgMToJCQkJCS8qIDMyMHgyNDAgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCAweDAzKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDA4LCAweDA5KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDMwKTsKKy8qCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODAsIDB4M2YpOyAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODcsIDB4MTEpOworCQlicmVhazsKKwljYXNlIDA6CQkJCQkvKiA2NDB4NDgwICovCisJCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgMHgwMyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwOCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgwMCk7CisvKgkJcmVnX3coZ3NwY2FfZGV2LCAweDgwLCAweDFjKTsgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEyKTsKKwkJYnJlYWs7CisJfQorCisJLyogc3RhcnQgc3RyZWFtICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDQpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwNSk7CisKKwlpZiAoc2QtPmF1dG9nYWluKSB7CisJCXNkLT5hZ19jbnQgPSBBR19DTlRfU1RBUlQ7CisJCXNkLT5hdmdfbHVtID0gMDsKKwl9IGVsc2UgeworCQlzZC0+YWdfY250ID0gLTE7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjcsIDB4ODApOworCXJlZ193KGdzcGNhX2RldiwgMHgyOCwgMHhjYSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDI5LCAweDUzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MmEsIDB4MGUpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDNlLCAweDIwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF83PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0Xzc9TEVEICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNz1MRUQgKi8KK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBjbG9zZSB0aW1lICovCitzdGF0aWMgdm9pZCBzZF9jbG9zZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjcsIDB4ODApOworCXJlZ193KGdzcGNhX2RldiwgMHgyOCwgMHhjYSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDI5LCAweDUzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MmEsIDB4MGUpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDNlLCAweDIwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF83PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0Xzc9TEVEICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNz1MRUQgKi8KK30KKworc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgbHVtYSkKK3sKKwlpbnQgbHVtYV9tZWFuID0gMTI4OworCWludCBsdW1hX2RlbHRhID0gMjA7CisJX191OCBzcHJpbmcgPSA1OworCWludCBHYnJpZ2h0OworCisJR2JyaWdodCA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMik7CisJUERFQlVHKERfRlJBTSwgImx1bWEgbWVhbiAlZCIsIGx1bWEpOworCWlmIChsdW1hIDwgbHVtYV9tZWFuIC0gbHVtYV9kZWx0YSB8fAorCSAgICBsdW1hID4gbHVtYV9tZWFuICsgbHVtYV9kZWx0YSkgeworCQlHYnJpZ2h0ICs9IChsdW1hX21lYW4gLSBsdW1hKSA+PiBzcHJpbmc7CisJCWlmIChHYnJpZ2h0ID4gMHgxYSkKKwkJCUdicmlnaHQgPSAweDFhOworCQllbHNlIGlmIChHYnJpZ2h0IDwgNCkKKwkJCUdicmlnaHQgPSA0OworCQlQREVCVUcoRF9GUkFNLCAiZ2JyaWdodCAlZCIsIEdicmlnaHQpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGYsIEdicmlnaHQpOworCQkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOworCX0KK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXVuc2lnbmVkIGNoYXIgdG1wYnVmWzRdOworCWludCBpLCBwLCBmZnNlcTsKKworLyoJaWYgKGxlbiA8IDUpIHsgKi8KKwlpZiAobGVuIDwgNikgeworLyoJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOyAqLworCQlyZXR1cm47CisJfQorCisJZmZzZXEgPSBzZC0+ZmZzZXE7CisKKwlmb3IgKHAgPSAwOyBwIDwgbGVuIC0gNjsgcCsrKSB7CisJCWlmICgoZGF0YVswICsgcF0gPT0gMHhmZikKKwkJICAgICYmIChkYXRhWzEgKyBwXSA9PSAweGZmKQorCQkgICAgJiYgKGRhdGFbMiArIHBdID09IDB4MDApCisJCSAgICAmJiAoZGF0YVszICsgcF0gPT0gMHhmZikKKwkJICAgICYmIChkYXRhWzQgKyBwXSA9PSAweDk2KSkgeworCisJCQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQkJaWYgKHNkLT5hZ19jbnQgPj0gMCAmJiBwID4gMjgpIHsKKwkJCQlzZC0+YXZnX2x1bSArPSBkYXRhW3AgLSAyM107CisJCQkJaWYgKC0tc2QtPmFnX2NudCA8IDApIHsKKwkJCQkJc2QtPmFnX2NudCA9IEFHX0NOVF9TVEFSVDsKKwkJCQkJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2LAorCQkJCQkJc2QtPmF2Z19sdW0gLyBBR19DTlRfU1RBUlQpOworCQkJCQlzZC0+YXZnX2x1bSA9IDA7CisJCQkJfQorCQkJfQorCisJCQkvKiBjb3B5IHRoZSBlbmQgb2YgZGF0YSB0byB0aGUgY3VycmVudCBmcmFtZSAqLworCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCQlkYXRhLCBwKTsKKworCQkJLyogcHV0IHRoZSBKUEVHIGhlYWRlciBpbiB0aGUgbmV3IGZyYW1lICovCisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLAorCQkJCQkodW5zaWduZWQgY2hhciAqKSBwYWM3MzExX2pwZWdfaGVhZGVyLAorCQkJCQkxMik7CisJCQl0bXBidWZbMF0gPSBnc3BjYV9kZXYtPmhlaWdodCA+PiA4OworCQkJdG1wYnVmWzFdID0gZ3NwY2FfZGV2LT5oZWlnaHQgJiAweGZmOworCQkJdG1wYnVmWzJdID0gZ3NwY2FfZGV2LT53aWR0aCA+PiA4OworCQkJdG1wYnVmWzNdID0gZ3NwY2FfZGV2LT53aWR0aCAmIDB4ZmY7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAorCQkJCQl0bXBidWYsIDQpOworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKKwkJCQkodW5zaWduZWQgY2hhciAqKSAmcGFjNzMxMV9qcGVnX2hlYWRlclsxNl0sCisJCQkJUEFDNzMxMV9KUEVHX0hFQURFUl9TSVpFIC0gMTYpOworCisJCQlkYXRhICs9IHAgKyA3OworCQkJbGVuIC09IHAgKyA3OworCQkJZmZzZXEgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiByZW1vdmUgdGhlICdmZiBmZiBmZiB4eCcgc2VxdWVuY2VzICovCisJc3dpdGNoIChmZnNlcSkgeworCWNhc2UgMzoKKwkJZGF0YSArPSAxOworCQlsZW4gLT0gMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZiAoZGF0YVswXSA9PSAweGZmKSB7CisJCQlkYXRhICs9IDI7CisJCQlsZW4gLT0gMjsKKwkJCWZyYW1lLT5kYXRhX2VuZCAtPSAyOworCQl9CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKGRhdGFbMF0gPT0gMHhmZgorCQkgICAgJiYgZGF0YVsxXSA9PSAweGZmKSB7CisJCQlkYXRhICs9IDM7CisJCQlsZW4gLT0gMzsKKwkJCWZyYW1lLT5kYXRhX2VuZCAtPSAxOworCQl9CisJCWJyZWFrOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gNDsgaSsrKSB7CisJCWlmIChkYXRhW2ldID09IDB4ZmYKKwkJICAgICYmIGRhdGFbaSArIDFdID09IDB4ZmYKKwkJICAgICYmIGRhdGFbaSArIDJdID09IDB4ZmYpIHsKKwkJCW1lbW1vdmUoJmRhdGFbaV0sICZkYXRhW2kgKyA0XSwgbGVuIC0gaSAtIDQpOworCQkJbGVuIC09IDQ7CisJCX0KKwl9CisJZmZzZXEgPSAwOworCWlmIChkYXRhW2xlbiAtIDRdID09IDB4ZmYpIHsKKwkJaWYgKGRhdGFbbGVuIC0gM10gPT0gMHhmZgorCQkgICAgJiYgZGF0YVtsZW4gLSAyXSA9PSAweGZmKSB7CisJCQlsZW4gLT0gNDsKKwkJfQorCX0gZWxzZSBpZiAoZGF0YVtsZW4gLSAzXSA9PSAweGZmKSB7CisJCWlmIChkYXRhW2xlbiAtIDJdID09IDB4ZmYKKwkJICAgICYmIGRhdGFbbGVuIC0gMV0gPT0gMHhmZikKKwkJCWZmc2VxID0gMzsKKwl9IGVsc2UgaWYgKGRhdGFbbGVuIC0gMl0gPT0gMHhmZikgeworCQlpZiAoZGF0YVtsZW4gLSAxXSA9PSAweGZmKQorCQkJZmZzZXEgPSAyOworCX0gZWxzZSBpZiAoZGF0YVtsZW4gLSAxXSA9PSAweGZmKQorCQlmZnNlcSA9IDE7CisJc2QtPmZmc2VxID0gZmZzZXE7CisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisvKglzZC0+YnJpZ2h0bmVzcyA9IHJlZ19yKGdzcGNhX2RldiwgMHgwOCk7CisJcmV0dXJuIHNkLT5icmlnaHRuZXNzOwkqLworLyoJUERFQlVHKERfQ09ORiwgIkNhbGxlZCBwYWM3MzExX2dldGJyaWdodG5lc3M6IE5vdCBpbXBsZW1lbnRlZCB5ZXQiKTsgKi8KK30KKworCisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworLyoJZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsgKi8KKwkqdmFsID0gc2QtPmNvbnRyYXN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29sb3JzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKy8qCWdldGNvbG9ycyhnc3BjYV9kZXYpOyAqLworCSp2YWwgPSBzZC0+Y29sb3JzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5hdXRvZ2FpbiA9IHZhbDsKKwlpZiAodmFsKSB7CisJCXNkLT5hZ19jbnQgPSBBR19DTlRfU1RBUlQ7CisJCXNkLT5hdmdfbHVtID0gMDsKKwl9IGVsc2UgeworCQlzZC0+YWdfY250ID0gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmF1dG9nYWluOworCXJldHVybiAwOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5vcGVuID0gc2Rfb3BlbiwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKKwkuY2xvc2UgPSBzZF9jbG9zZSwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworI2RlZmluZSBEVk5NKG5hbWUpIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkgbmFtZQorc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MDApLCBEVk5NKCJUeXBob29uIil9LAorCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjAxKSwgRFZOTSgiUGhpbGlwcyBTUEM2MTBOQyIpfSwKKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYwMyksIERWTk0oIlBBQzczMTIiKX0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MDgpLCBEVk5NKCJUcnVzdCBXQi0zMzAwcCIpfSwKKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYwZSksIERWTk0oIkdpZ2F3YXJlIFZHQSBQQyBDYW1lcmEiKX0sCisJCQkvKiBhbmQgYWxzbyAnLCBUcnVzdCBXQi0zMzUwcCwgU0lHTUEgY2FtIDIzNTAnICovCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MGYpLCBEVk5NKCJTbmFrZUNhbSIpfSwKKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYyMSksIERWTk0oIlBBQzczMXgiKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJUERFQlVHKERfUFJPQkUsICJ2JXMgcmVnaXN0ZXJlZCIsIHZlcnNpb24pOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlZWJlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKQEAgLTAsMCArMSwxNDc3IEBACisvKgorICoJCXNvbml4IHNuOWMxMDIgKGJheWVyKSBsaWJyYXJ5CisgKgkJQ29weXJpZ2h0IChDKSAyMDAzIDIwMDQgTWljaGVsIFhoYWFyZCBteGhhYXJkQG1hZ2ljLmZyCisgKiBBZGQgUGFzMTA2IFN0ZWZhbm8gTW96emkgKEMpIDIwMDQKKyAqCisgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJzb25peGIiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCAxLCA4KQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0gIjIuMS44IjsKKworTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBL1NOOUMxMDIgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCXN0cnVjdCBzZF9kZXNjIHNkX2Rlc2M7CQkvKiBvdXIgbmN0cmxzIGRpZmZlciBkZXBlbmRlbmQgdXBvbiB0aGUKKwkJCQkJICAgc2Vuc29yLCBzbyB3ZSB1c2UgYSBwZXIgY2FtIGNvcHkgKi8KKwlhdG9taWNfdCBhdmdfbHVtOworCisJdW5zaWduZWQgY2hhciBnYWluOworCXVuc2lnbmVkIGNoYXIgZXhwb3N1cmU7CisJdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOworCXVuc2lnbmVkIGNoYXIgYXV0b2dhaW47CisJdW5zaWduZWQgY2hhciBhdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzOworCXVuc2lnbmVkIGNoYXIgZnJlcTsJCS8qIGxpZ2h0IGZyZXEgZmlsdGVyIHNldHRpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIHNhdHVyYXRpb247CisJdW5zaWduZWQgY2hhciBodWU7CisJdW5zaWduZWQgY2hhciBjb250cmFzdDsKKworCXVuc2lnbmVkIGNoYXIgZnJfaF9zejsJCS8qIHNpemUgb2YgZnJhbWUgaGVhZGVyICovCisJY2hhciBzZW5zb3I7CQkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLworI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCisjZGVmaW5lIFNFTlNPUl9PVjY2NTAgMQorI2RlZmluZSBTRU5TT1JfT1Y3NjMwIDIKKyNkZWZpbmUgU0VOU09SX09WNzYzMF8zIDMKKyNkZWZpbmUgU0VOU09SX1BBUzEwNiA0CisjZGVmaW5lIFNFTlNPUl9QQVMyMDIgNQorI2RlZmluZSBTRU5TT1JfVEFTNTExMCA2CisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ1hYIDcKKwljaGFyIHNlbnNvcl9oYXNfZ2FpbjsKKwlfX3U4IHNlbnNvcl9hZGRyOworfTsKKworI2RlZmluZSBDT01QMiAweDhmCisjZGVmaW5lIENPTVAgMHhjNwkJLyogMHg4NyAvLzB4MDcgKi8KKyNkZWZpbmUgQ09NUDEgMHhjOQkJLyogMHg4OSAvLzB4MDkgKi8KKworI2RlZmluZSBNQ0tfSU5JVCAweDYzCisjZGVmaW5lIE1DS19JTklUMSAweDIwCQkvKmZpeG1lOiBCYXllciAtIDB4NTAgZm9yIEpQRUcgPz8qLworCisjZGVmaW5lIFNZU19DTEsgMHgwNAorCisvKiBXZSBjYWxjdWxhdGUgdGhlIGF1dG9nYWluIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyIG9mIGEgZnJhbWUsIGF0IHRoaXMKKyAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyB0cmFuc21pdHRlZCwgYW5kIGEgZnJhbWUgaXMKKyAgIGJlaW5nIGNhcHR1cmVkIHdpdGggdGhlIG9sZCBzZXR0aW5ncy4gU28gaWYgd2UgYWRqdXN0IHRoZSBhdXRvZ2FpbiB3ZSBtdXN0CisgICBpZ25vcmUgYXRsZWFzdCB0aGUgMiBuZXh0IGZyYW1lcyBmb3IgdGhlIG5ldyBzZXR0aW5ncyB0byBjb21lIGludG8gZWZmZWN0CisgICBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzICovCisjZGVmaW5lIEFVVE9HQUlOX0lHTk9SRV9GUkFNRVMgMworI2RlZmluZSBBVVRPR0FJTl9ERUFEWk9ORSAxMDAwCisjZGVmaW5lIERFU0lSRURfQVZHX0xVTSA3MDAwCisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNhdHVyYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMTI3CisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBSU4sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiR2FpbiIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgR0FJTl9ERUYgMTI3CisjZGVmaW5lIEdBSU5fS05FRSAyMDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBHQUlOX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGdhaW4sCisJICAgIC5nZXQgPSBzZF9nZXRnYWluLAorCX0sCisJeworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkV4cG9zdXJlIiwKKyNkZWZpbmUgRVhQT1NVUkVfREVGICAxNiAvKiAgMzIgbXMgLyAzMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfS05FRSA1MCAvKiAxMDAgbXMgLyAxMCBmcHMgKi8KKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMjU1LAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPU1VSRV9ERUYsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCisJCS5nZXQgPSBzZF9nZXRleHBvc3VyZSwKKwl9LAorCXsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQVVUT0dBSU4sCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSA9ICJBdXRvbWF0aWMgR2FpbiAoYW5kIEV4cG9zdXJlKSIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDEsCisJCQkuc3RlcCA9IDEsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAxCisJCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRhdXRvZ2FpbiwKKwkJLmdldCA9IHNkX2dldGF1dG9nYWluLAorCX0sCisJeworCQl7CisJCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCisJCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCQkubmFtZSAgICA9ICJMaWdodCBmcmVxdWVuY3kgZmlsdGVyIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMiwJLyogMDogMCwgMTogNTBIeiwgMjo2MEh6ICovCisJCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDEKKwkJCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRmcmVxLAorCQkuZ2V0ID0gc2RfZ2V0ZnJlcSwKKwl9LAorCXsKKwkJeworCQkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgICAgPSAiU2F0dXJhdGlvbiIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDI1NSwKKwkJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgU0FUVVJBVElPTl9ERUYgMTI3CisJCQkuZGVmYXVsdF92YWx1ZSA9IFNBVFVSQVRJT05fREVGLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0c2F0dXJhdGlvbiwKKwkJLmdldCA9IHNkX2dldHNhdHVyYXRpb24sCisJfSwKKwl7CisJCXsKKwkJCS5pZCAgICAgID0gVjRMMl9DSURfSFVFLAorCQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgICAgPSAiSHVlIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMjU1LAorCQkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBIVUVfREVGIDEyNworCQkJLmRlZmF1bHRfdmFsdWUgPSBIVUVfREVGLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0aHVlLAorCQkuZ2V0ID0gc2RfZ2V0aHVlLAorCX0sCisJeworCQl7CisJCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAyNTUsCisJCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAxMjcKKwkJCS5kZWZhdWx0X3ZhbHVlID0gQ09OVFJBU1RfREVGLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJCS5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9TTjlDMTBYLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCisJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMn0sCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfU045QzEwWCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDF9LAorCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX1NOOUMxMFgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKK307CitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX1NOOUMxMFgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE3NiwKKwkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxfSwKKwl7MzUyLCAyODgsIFY0TDJfUElYX0ZNVF9TTjlDMTBYLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCit9OworCitzdGF0aWMgY29uc3QgX191OCBwcm9iZV9vdjc2MzBbXSA9IHsweDA4LCAweDQ0fTsKKworc3RhdGljIGNvbnN0IF9fdTggaW5pdEh2NzEzMVtdID0geworCTB4NDYsIDB4NzcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAxLCAweDAwLAkvKiBzaGlmdCBmcm9tIDB4MDIgMHgwMSAweDAwICovCisJMHgyOCwgMHgxZSwgMHg2MCwgMHg4YSwgMHgyMCwKKwkweDFkLCAweDEwLCAweDAyLCAweDAzLCAweDBmLCAweDBjCit9Oworc3RhdGljIGNvbnN0IF9fdTggaHY3MTMxX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YzAsIDB4MTEsIDB4MzEsIDB4MzgsIDB4MmEsIDB4MmUsIDB4MDAsIDB4MTB9LAorCXsweGEwLCAweDExLCAweDAxLCAweDA4LCAweDJhLCAweDJlLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHgxMSwgMHgyMCwgMHgwMCwgMHhkMCwgMHgyZSwgMHgwMCwgMHgxMH0sCisJezB4YzAsIDB4MTEsIDB4MjUsIDB4MDMsIDB4MGUsIDB4MjgsIDB4MDAsIDB4MTZ9LAorCXsweGEwLCAweDExLCAweDMwLCAweDEwLCAweDBlLCAweDI4LCAweDAwLCAweDE1fSwKK307CitzdGF0aWMgY29uc3QgX191OCBpbml0T3Y2NjUwW10gPSB7CisJMHg0NCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKwkweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDEsIDB4MGEsIDB4MTYsIDB4MTIsIDB4NjgsIDB4MGIsCisJMHgxMCwgMHgxZCwgMHgxMCwgMHgwMCwgMHgwNiwgMHgxZiwgMHgwMAorfTsKK3N0YXRpYyBjb25zdCBfX3U4IG92NjY1MF9zZW5zb3JfaW5pdFtdWzhdID0KK3sKKwkvKiBCcmlnaHQsIGNvbnRyYXN0LCBldGMgYXJlIHNldCB0aHJvdWd0aCBTQ0JCIGludGVyZmFjZS4KKwkgKiBBVkNBUCBvbiB3aW4yIGRvIG5vdCBzZW5kIGFueSBkYXRhIG9uIHRoaXMgCWNvbnRyb2xzLiAqLworCS8qIEFueXdheSwgc29tZSByZWdpc3RlcnMgYXBwZWFycyB0byBhbHRlciBicmlnaHQgYW5kIGNvbnN0cmF0ICovCisKKwkvKiBSZXNldCBzZW5zb3IgKi8KKwl7MHhhMCwgMHg2MCwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyogU2V0IGNsb2NrIHJlZ2lzdGVyIDB4MTEgbG93IG5pYmJsZSBpcyBjbG9jayBkaXZpZGVyICovCisJezB4ZDAsIDB4NjAsIDB4MTEsIDB4YzAsIDB4MWIsIDB4MTgsIDB4YzEsIDB4MTB9LAorCS8qIE5leHQgc29tZSB1bmtub3duIHN0dWZmICovCisJezB4YjAsIDB4NjAsIDB4MTUsIDB4MDAsIDB4MDIsIDB4MTgsIDB4YzEsIDB4MTB9LAorLyoJezB4YTAsIDB4NjAsIDB4MWIsIDB4MDEsIDB4MDIsIDB4MTgsIDB4YzEsIDB4MTB9LAorCQkgKiBUSElTIFNFVCBHUkVFTiBTQ1JFRU4KKwkJICogKHBpeGVscyBjb3VsZCBiZSBpbm52ZXJ0ZWQgaW4gZGVjb2RlIGtpbmQgb2YgImJyZyIsCisJCSAqIGJ1dCBibHVlIHdvbnQgYmUgdGhlcmUuIEF2b2lkIHRoaXMgZGF0YSAuLi4gKi8KKwl7MHhkMCwgMHg2MCwgMHgyNiwgMHgwMSwgMHgxNCwgMHhkOCwgMHhhNCwgMHgxMH0sIC8qIGZvcm1hdCBvdXQ/ICovCisJezB4ZDAsIDB4NjAsIDB4MjYsIDB4MDEsIDB4MTQsIDB4ZDgsIDB4YTQsIDB4MTB9LAorCXsweGEwLCAweDYwLCAweDMwLCAweDNkLCAweDBBLCAweGQ4LCAweGE0LCAweDEwfSwKKwkvKiBFbmFibGUgcmdiIGJyaWdodG5lc3MgY29udHJvbCAqLworCXsweGEwLCAweDYwLCAweDYxLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwkvKiBIREc6IE5vdGUgd2luZG93cyB1c2VzIHRoZSBsaW5lIGJlbG93LCB3aGljaCBzZXRzIGJvdGggcmVnaXN0ZXIgMHg2MAorCSAgIGFuZCAweDYxIEkgYmVsaWV2ZSB0aGVzZSByZWdpc3RlcnMgb2YgdGhlIG92NjY1MCBhcmUgaWRlbnRpY2FsIGFzCisJICAgdGhvc2Ugb2YgdGhlIG92NzYzMCwgYmVjYXVzZSBpZiB0aGlzIGlzIHRydWUgdGhlIHdpbmRvd3Mgc2V0dGluZ3MKKwkgICBhZGQgYSBiaXQgYWRkaXRpb25hbCByZWQgZ2FpbiBhbmQgYSBsb3QgYWRkaXRpb25hbCBibHVlIGdhaW4sIHdoaWNoCisJICAgbWF0Y2hlcyBteSBmaW5kaW5ncyB0aGF0IHRoZSB3aW5kb3dzIHNldHRpbmdzIG1ha2UgYmx1ZSBtdWNoIHRvbworCSAgIGJsdWUgYW5kIHJlZCBhIGxpdHRsZSB0b28gcmVkLgorCXsweGIwLCAweDYwLCAweDYwLCAweDY2LCAweDY4LCAweGQ4LCAweGE0LCAweDEwfSwgKi8KKwkvKiBTb21lIG1vcmUgdW5rbm93biBzdHVmZiAqLworCXsweGEwLCAweDYwLCAweDY4LCAweDA0LCAweDY4LCAweGQ4LCAweGE0LCAweDEwfSwKKwl7MHhkMCwgMHg2MCwgMHgxNywgMHgyNCwgMHhkNiwgMHgwNCwgMHg5NCwgMHgxMH0sIC8qIENsaXByZWcgKi8KK307CisKK3N0YXRpYyBjb25zdCBfX3U4IGluaXRPdjc2MzBbXSA9IHsKKwkweDA0LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAkvKiByMDEgLi4gcjA4ICovCisJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogcjA5IC4uIHIxMCAqLworCTB4MDAsIDB4MDIsIDB4MDEsIDB4MGEsCQkJCS8qIHIxMSAuLiByMTQgKi8KKwkweDI4LCAweDFlLAkJCS8qIEggJiBWIHNpemVzICAgICByMTUgLi4gcjE2ICovCisJMHg2OCwgQ09NUDEsIE1DS19JTklUMSwJCQkJLyogcjE3IC4uIHIxOSAqLworCTB4MWQsIDB4MTAsIDB4MDIsIDB4MDMsIDB4MGYsIDB4MGMJCS8qIHIxYSAuLiByMWYgKi8KK307CitzdGF0aWMgY29uc3QgX191OCBpbml0T3Y3NjMwXzNbXSA9IHsKKwkweDQ0LCAweDQ0LCAweDAwLCAweDFhLCAweDIwLCAweDIwLCAweDIwLCAweDgwLAkvKiByMDEgLi4gcjA4ICovCisJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwJLyogcjA5IC4uIHIxMCAqLworCTB4MDAsIDB4MDEsIDB4MDEsIDB4MGEsCQkJCS8qIHIxMSAuLiByMTQgKi8KKwkweDI4LCAweDFlLAkJCS8qIEggJiBWIHNpemVzICAgICByMTUgLi4gcjE2ICovCisJMHg2OCwgMHg4ZiwgTUNLX0lOSVQxLAkJCQkvKiByMTcgLi4gcjE5ICovCisJMHgxZCwgMHgxMCwgMHgwMiwgMHgwMywgMHgwZiwgMHgwYywgMHgwMCwJLyogcjFhIC4uIHIyMCAqLworCTB4MTAsIDB4MjAsIDB4MzAsIDB4NDAsIDB4NTAsIDB4NjAsIDB4NzAsIDB4ODAsIC8qIHIyMSAuLiByMjggKi8KKwkweDkwLCAweGEwLCAweGIwLCAweGMwLCAweGQwLCAweGUwLCAweGYwLCAweGZmICAvKiByMjkgLi4gcjMwICovCit9Oworc3RhdGljIGNvbnN0IF9fdTggb3Y3NjMwX3NlbnNvcl9pbml0X2NvbVtdWzhdID0geworCXsweGEwLCAweDIxLCAweDEyLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHgyMSwgMHgwMSwgMHg3NywgMHgzYSwgMHgwMCwgMHgwMCwgMHgxMH0sCisvKgl7MHhkMCwgMHgyMSwgMHgxMiwgMHg3YywgMHgwMSwgMHg4MCwgMHgzNCwgMHgxMH0sCSAgIGpmbSAqLworCXsweGQwLCAweDIxLCAweDEyLCAweDFjLCAweDAwLCAweDgwLCAweDM0LCAweDEwfSwJLyogamZtICovCisJezB4YTAsIDB4MjEsIDB4MWIsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MzQsIDB4MTB9LAorCXsweGEwLCAweDIxLCAweDIwLCAweDQ0LCAweDAwLCAweDgwLCAweDM0LCAweDEwfSwKKwl7MHhhMCwgMHgyMSwgMHgyMywgMHhlZSwgMHgwMCwgMHg4MCwgMHgzNCwgMHgxMH0sCisJezB4ZDAsIDB4MjEsIDB4MjYsIDB4YTAsIDB4OWEsIDB4YTAsIDB4MzAsIDB4MTB9LAorCXsweGIwLCAweDIxLCAweDJhLCAweDgwLCAweDAwLCAweGEwLCAweDMwLCAweDEwfSwKKwl7MHhiMCwgMHgyMSwgMHgyZiwgMHgzZCwgMHgyNCwgMHhhMCwgMHgzMCwgMHgxMH0sCisJezB4YTAsIDB4MjEsIDB4MzIsIDB4ODYsIDB4MjQsIDB4YTAsIDB4MzAsIDB4MTB9LAorCXsweGIwLCAweDIxLCAweDYwLCAweGE5LCAweDRhLCAweGEwLCAweDMwLCAweDEwfSwKKy8qCXsweGIwLCAweDIxLCAweDYwLCAweGE5LCAweDQyLCAweGEwLCAweDMwLCAweDEwfSwJICogamZtICovCisJezB4YTAsIDB4MjEsIDB4NjUsIDB4MDAsIDB4NDIsIDB4YTAsIDB4MzAsIDB4MTB9LAorCXsweGEwLCAweDIxLCAweDY5LCAweDM4LCAweDQyLCAweGEwLCAweDMwLCAweDEwfSwKKwl7MHhjMCwgMHgyMSwgMHg2ZiwgMHg4OCwgMHgwYiwgMHgwMCwgMHgzMCwgMHgxMH0sCisJezB4YzAsIDB4MjEsIDB4NzQsIDB4MjEsIDB4OGUsIDB4MDAsIDB4MzAsIDB4MTB9LAorCXsweGEwLCAweDIxLCAweDdkLCAweGY3LCAweDhlLCAweDAwLCAweDMwLCAweDEwfSwKKwl7MHhkMCwgMHgyMSwgMHgxNywgMHgxYywgMHhiZCwgMHgwNiwgMHhmNiwgMHgxMH0sCit9Oworc3RhdGljIGNvbnN0IF9fdTggb3Y3NjMwX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiBkZWxheSAyMDBtcyAqLworCXsweGEwLCAweDIxLCAweDExLCAweDAxLCAweGJkLCAweDA2LCAweGY2LCAweDEwfSwJLyogamZtICovCisJezB4YTAsIDB4MjEsIDB4MTAsIDB4NTcsIDB4YmQsIDB4MDYsIDB4ZjYsIDB4MTZ9LAorCXsweGEwLCAweDIxLCAweDc2LCAweDAyLCAweGJkLCAweDA2LCAweGY2LCAweDE2fSwKKwl7MHhhMCwgMHgyMSwgMHgwMCwgMHgxMCwgMHhiZCwgMHgwNiwgMHhmNiwgMHgxNX0sCS8qIGdhaW4gKi8KK307CitzdGF0aWMgY29uc3QgX191OCBvdjc2MzBfc2Vuc29yX2luaXRfM1tdWzhdID0geworCXsweGEwLCAweDIxLCAweDJhLCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMCwgMHgyMSwgMHgyYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCit9OworCitzdGF0aWMgY29uc3QgX191OCBpbml0UGFzMTA2W10gPSB7CisJMHgwNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDEsIDB4MDAsCisJMHgxNiwgMHgxMiwgMHgyOCwgQ09NUDEsIE1DS19JTklUMSwKKwkweDE4LCAweDEwLCAweDA0LCAweDAzLCAweDExLCAweDBjCit9OworLyogY29tcHJlc3Npb24gMHg4NiBtY2tpbml0MSAweDJiICovCitzdGF0aWMgY29uc3QgX191OCBwYXMxMDZfZGF0YVtdWzJdID0geworCXsweDAyLCAweDA0fSwJCS8qIFBpeGVsIENsb2NrIERpdmlkZXIgNiAqLworCXsweDAzLCAweDEzfSwJCS8qIEZyYW1lIFRpbWUgTVNCICovCisvKgl7MHgwMywgMHgxMn0sCQkgKiBGcmFtZSBUaW1lIE1TQiAqLworCXsweDA0LCAweDA2fSwJCS8qIEZyYW1lIFRpbWUgTFNCICovCisvKgl7MHgwNCwgMHgwNX0sCQkgKiBGcmFtZSBUaW1lIExTQiAqLworCXsweDA1LCAweDY1fSwJCS8qIFNodXR0ZXIgVGltZSBMaW5lIE9mZnNldCAqLworLyoJezB4MDUsIDB4NmR9LAkJICogU2h1dHRlciBUaW1lIExpbmUgT2Zmc2V0ICovCisvKgl7MHgwNiwgMHhiMX0sCQkgKiBTaHV0dGVyIFRpbWUgUGl4ZWwgT2Zmc2V0ICovCisJezB4MDYsIDB4Y2R9LAkJLyogU2h1dHRlciBUaW1lIFBpeGVsIE9mZnNldCAqLworCXsweDA3LCAweGMxfSwJCS8qIEJsYWNrIExldmVsIFN1YnRyYWN0IFNpZ24gKi8KKy8qCXsweDA3LCAweDAwfSwJCSAqIEJsYWNrIExldmVsIFN1YnRyYWN0IFNpZ24gKi8KKwl7MHgwOCwgMHgwNn0sCQkvKiBCbGFjayBMZXZlbCBTdWJ0cmFjdCBMZXZlbCAqLworCXsweDA4LCAweDA2fSwJCS8qIEJsYWNrIExldmVsIFN1YnRyYWN0IExldmVsICovCisvKgl7MHgwOCwgMHgwMX0sCQkgKiBCbGFjayBMZXZlbCBTdWJ0cmFjdCBMZXZlbCAqLworCXsweDA5LCAweDA1fSwJCS8qIENvbG9yIEdhaW4gQiBQaXhlbCA1IGEgKi8KKwl7MHgwYSwgMHgwNH0sCQkvKiBDb2xvciBHYWluIEcxIFBpeGVsIDEgNSAqLworCXsweDBiLCAweDA0fSwJCS8qIENvbG9yIEdhaW4gRzIgUGl4ZWwgMSAwIDUgKi8KKwl7MHgwYywgMHgwNX0sCQkvKiBDb2xvciBHYWluIFIgUGl4ZWwgMyAxICovCisJezB4MGQsIDB4MDB9LAkJLyogQ29sb3IgR2FpbkggIFBpeGVsICovCisJezB4MGUsIDB4MGV9LAkJLyogR2xvYmFsIEdhaW4gKi8KKwl7MHgwZiwgMHgwMH0sCQkvKiBDb250cmFzdCAqLworCXsweDEwLCAweDA2fSwJCS8qIEgmViBzeW5jaHJvIHBvbGFyaXR5ICovCisJezB4MTEsIDB4MDZ9LAkJLyogP2RlZmF1bHQgKi8KKwl7MHgxMiwgMHgwNn0sCQkvKiBEQUMgc2NhbGUgKi8KKwl7MHgxNCwgMHgwMn0sCQkvKiA/ZGVmYXVsdCAqLworCXsweDEzLCAweDAxfSwJCS8qIFZhbGlkYXRlIFNldHRpbmdzICovCit9Oworc3RhdGljIGNvbnN0IF9fdTggaW5pdFBhczIwMltdID0geworCTB4NDQsIDB4NDQsIDB4MjEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAzLCAweDBhLAkvKiA2ICovCisJMHgyOCwgMHgxZSwgMHgyOCwgMHg4OSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAyLCAweDAzLCAweDBmLCAweDBjCit9Oworc3RhdGljIGNvbnN0IF9fdTggcGFzMjAyX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YTAsIDB4NDAsIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQwLCAweDQwLCAweDA0LCAweDA3LCAweDM0LCAweDAwLCAweDA5LCAweDEwfSwKKwl7MHhkMCwgMHg0MCwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMH0sCisJezB4ZDAsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzIsIDB4MTB9LAorCXsweGQwLCAweDQwLCAweDEwLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKKwl7MHhhMCwgMHg0MCwgMHgxNSwgMHg3MCwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCisJezB4YTAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAorCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKKwl7MHhhMCwgMHg0MCwgMHgwMywgMHg1NiwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCisJezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAorCXsweGIwLCAweDQwLCAweDA0LCAweDA3LCAweDJhLCAweDAwLCAweDYzLCAweDEwfSwKKwl7MHhiMCwgMHg0MCwgMHgwZSwgMHgwMCwgMHgzZCwgMHgwMCwgMHg2MywgMHgxMH0sCisKKwl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgzZCwgMHgwMCwgMHg2MywgMHgxNn0sCisJezB4YTAsIDB4NDAsIDB4MTAsIDB4MDgsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTV9LAorCXsweGEwLCAweDQwLCAweDAyLCAweDA0LCAweDNkLCAweDAwLCAweDYzLCAweDE2fSwKKwl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgzZCwgMHgwMCwgMHg2MywgMHgxNn0sCisJezB4YjAsIDB4NDAsIDB4MGUsIDB4MDAsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTZ9LAorCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDMxLCAweDAwLCAweDYzLCAweDE2fSwKKwl7MHhhMCwgMHg0MCwgMHgxMCwgMHgwZSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNX0sCisJezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTZ9LAorfTsKKworc3RhdGljIGNvbnN0IF9fdTggaW5pdFRhczUxMTBbXSA9IHsKKwkweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHgwOSwgMHgwYSwJLyogc2hpZnQgZnJvbSAweDQ1IDB4MDkgMHgwYSAqLworCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCisJMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNworfTsKK3N0YXRpYyBjb25zdCBfX3U4IHRhczUxMTBfc2Vuc29yX2luaXRbXVs4XSA9IHsKKwl7MHgzMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4MzAsIDB4MTEsIDB4MDIsIDB4MjAsIDB4YTksIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGEwLCAweDYxLCAweDlhLCAweGNhLCAweDAwLCAweDAwLCAweDAwLCAweDE3fSwKK307CisKK3N0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTMwW10gPSB7CisJMHgwNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4NjksIDB4MGMsIDB4MGEsCisJMHgyOCwgMHgxZSwgMHg2MCwgQ09NUCwgTUNLX0lOSVQsCisJMHgxOCwgMHgxMCwgMHgwNCwgMHgwMywgMHgxMSwgMHgwYworfTsKK3N0YXRpYyBjb25zdCBfX3U4IHRhczUxMzBfc2Vuc29yX2luaXRbXVs4XSA9IHsKKy8qIAl7MHgzMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgxMH0sCisJCQkJCSogc2h1dHRlciAweDQ3IHNob3J0IGV4cG9zdXJlPyAqLworCXsweDMwLCAweDExLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwkJCQkJLyogc2h1dHRlciAweDAxIGxvbmcgZXhwb3N1cmUgKi8KKwl7MHgzMCwgMHgxMSwgMHgwMiwgMHgyMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgxMH0sCit9OworCisvKiBnZXQgb25lIGJ5dGUgaW4gZ3NwY2FfZGV2LT51c2JfYnVmICovCitzdGF0aWMgdm9pZCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgX191MTYgdmFsdWUpCit7CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTAsCQkJLyogcmVxdWVzdCAqLworCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQl2YWx1ZSwKKwkJCTAsCQkJLyogaW5kZXggKi8KKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCTUwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICBfX3UxNiB2YWx1ZSwKKwkJICBjb25zdCBfX3U4ICpidWZmZXIsCisJCSAgaW50IGxlbikKK3sKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJaWYgKGxlbiA+IHNpemVvZiBnc3BjYV9kZXYtPnVzYl9idWYpIHsKKwkJUERFQlVHKERfRVJSfERfUEFDSywgInJlZ193OiBidWZmZXIgb3ZlcmZsb3ciKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuKTsKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMHgwOCwJCQkvKiByZXF1ZXN0ICovCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQl2YWx1ZSwKKwkJCTAsCQkJLyogaW5kZXggKi8KKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuLAorCQkJNTAwKTsKK30KKworc3RhdGljIHZvaWQgcmVnX3dfYmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICBfX3UxNiB2YWx1ZSwKKwkJICBjb25zdCBfX3U4ICpidWZmZXIsCisJCSAgaW50IGxlbikKK3sKKwlfX3U4ICp0bXBidWY7CisKKwl0bXBidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJbWVtY3B5KHRtcGJ1ZiwgYnVmZmVyLCBsZW4pOworCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkweDA4LAkJCS8qIHJlcXVlc3QgKi8KKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCXZhbHVlLAorCQkJMCwJCQkvKiBpbmRleCAqLworCQkJdG1wYnVmLCBsZW4sCisJCQk1MDApOworCWtmcmVlKHRtcGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBjb25zdCBfX3U4ICpidWZmZXIpCit7CisJaW50IHJldHJ5ID0gNjA7CisKKwkvKiBpcyBpMmMgcmVhZHkgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIGJ1ZmZlciwgOCk7CisJd2hpbGUgKHJldHJ5LS0pIHsKKwkJbXNsZWVwKDEwKTsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDA4KTsKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDQpIHsKKwkJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gJiAweDA4KQorCQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgaTJjX3dfdmVjdG9yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IF9fdTggYnVmZmVyW11bOF0sIGludCBsZW4pCit7CisJZm9yICg7OykgeworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsICpidWZmZXIsIDgpOworCQlsZW4gLT0gODsKKwkJaWYgKGxlbiA8PSAwKQorCQkJYnJlYWs7CisJCWJ1ZmZlcisrOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggdmFsdWU7CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlICBTRU5TT1JfT1Y2NjUwOgorCWNhc2UgIFNFTlNPUl9PVjc2MzBfMzoKKwljYXNlICBTRU5TT1JfT1Y3NjMwOiB7CisJCV9fdTggaTJjT1ZbXSA9CisJCQl7MHhhMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH07CisKKwkJLyogY2hhbmdlIHJlZyAweDA2ICovCisJCWkyY09WWzFdID0gc2QtPnNlbnNvcl9hZGRyOworCQlpMmNPVlszXSA9IHNkLT5icmlnaHRuZXNzOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNPVikgPCAwKQorCQkJZ290byBlcnI7CisJCWJyZWFrOworCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMTA2OiB7CisJCV9fdTggaTJjMVtdID0KKwkJCXsweGExLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0fTsKKworCQlpMmMxWzNdID0gc2QtPmJyaWdodG5lc3MgPj4gMzsKKwkJaTJjMVsyXSA9IDB4MGU7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyYzEpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpMmMxWzNdID0gMHgwMTsKKwkJaTJjMVsyXSA9IDB4MTM7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyYzEpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQorCWNhc2UgU0VOU09SX1BBUzIwMjogeworCQkvKiBfX3U4IGkyY3BleHBvMVtdID0KKwkJCXsweGIwLCAweDQwLCAweDA0LCAweDA3LCAweDJhLCAweDAwLCAweDYzLCAweDE2fTsgKi8KKwkJX191OCBpMmNwZXhwb1tdID0KKwkJCXsweGIwLCAweDQwLCAweDBlLCAweDAxLCAweGFiLCAweDAwLCAweDYzLCAweDE2fTsKKwkJX191OCBpMmNwMjAyW10gPQorCQkJezB4YTAsIDB4NDAsIDB4MTAsIDB4MGUsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTV9OworCQlzdGF0aWMgX191OCBpMmNwZG9pdFtdID0KKwkJCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDMxLCAweDAwLCAweDYzLCAweDE2fTsKKworCQkvKiBjaGFuZ2UgcmVnIDB4MTAgKi8KKwkJaTJjcGV4cG9bNF0gPSAweGZmIC0gc2QtPmJyaWdodG5lc3M7CisvKgkJaWYoaTJjX3coZ3NwY2FfZGV2LGkyY3BleHBvMSkgPCAwKQorCQkJZ290byBlcnI7ICovCisvKgkJaWYoaTJjX3coZ3NwY2FfZGV2LGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsgKi8KKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGV4cG8pIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZG9pdCkgPCAwKQorCQkJZ290byBlcnI7CisJCWkyY3AyMDJbM10gPSBzZC0+YnJpZ2h0bmVzcyA+PiAzOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwMjAyKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQorCWNhc2UgU0VOU09SX1RBUzUxMzBDWFg6IHsKKwkJX191OCBpMmNbXSA9CisJCQl7MHgzMCwgMHgxMSwgMHgwMiwgMHgyMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgxMH07CisKKwkJdmFsdWUgPSAweGZmIC0gc2QtPmJyaWdodG5lc3M7CisJCWkyY1s0XSA9IHZhbHVlOworCQlQREVCVUcoRF9DT05GLCAiYnJpZ2h0bmVzcyAlZCA6ICVkIiwgdmFsdWUsIGkyY1s0XSk7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyYykgPCAwKQorCQkJZ290byBlcnI7CisJCWJyZWFrOworCSAgICB9CisJY2FzZSBTRU5TT1JfVEFTNTExMDoKKwkJLyogRklYTUUgZmlndXJlIG91dCBob3d0byBjb250cm9sIGJyaWdodG5lc3Mgb24gVEFTNTExMCAqLworCQlicmVhazsKKwl9CisJcmV0dXJuOworZXJyOgorCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBicmlnaHRuZXNzIik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNlbnNvcmdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1bnNpZ25lZCBjaGFyIGdhaW4gPSBzZC0+Z2FpbjsKKworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCisJY2FzZSBTRU5TT1JfVEFTNTExMDogeworCQlfX3U4IGkyY1tdID0KKwkJCXsweDMwLCAweDExLCAweDAyLCAweDIwLCAweDcwLCAweDAwLCAweDAwLCAweDEwfTsKKworCQlpMmNbNF0gPSAyNTUgLSBnYWluOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBTRU5TT1JfT1Y2NjUwOgorCQlnYWluID4+PSAxOworCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFNFTlNPUl9PVjc2MzBfMzogeworCQlfX3U4IGkyY1tdID0gezB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9OworCisJCWkyY1sxXSA9IHNkLT5zZW5zb3JfYWRkcjsKKwkJaTJjWzNdID0gZ2FpbiA+PiAyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQorCX0KKwlyZXR1cm47CitlcnI6CisJUERFQlVHKERfRVJSLCAiaTJjIGVycm9yIGdhaW4iKTsKK30KKworc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggZ2FpbjsKKwlfX3U4IHJnYl92YWx1ZTsKKworCWdhaW4gPSBzZC0+Z2FpbiA+PiA0OworCisJLyogcmVkIGFuZCBibHVlIGdhaW4gKi8KKwlyZ2JfdmFsdWUgPSBnYWluIDw8IDQgfCBnYWluOworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgJnJnYl92YWx1ZSwgMSk7CisJLyogZ3JlZW4gZ2FpbiAqLworCXJnYl92YWx1ZSA9IGdhaW47CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAmcmdiX3ZhbHVlLCAxKTsKKworCWlmIChzZC0+c2Vuc29yX2hhc19nYWluKQorCQlzZXRzZW5zb3JnYWluKGdzcGNhX2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9UQVM1MTEwOiB7CisJCV9fdTggcmVnOworCisJCS8qIHJlZ2lzdGVyIDE5J3MgaGlnaCBuaWJibGUgY29udGFpbnMgdGhlIHNuOWMxMHggY2xvY2sgZGl2aWRlcgorCQkgICBUaGUgaGlnaCBuaWJibGUgY29uZmlndXJlcyB0aGUgbm8gZnBzIGFjY29yZGluZyB0byB0aGUKKwkJICAgZm9ybXVsYTogNjAgLyBoaWdoX25pYmJsZS4gV2l0aCBhIG1heGltdW0gb2YgMzAgZnBzICovCisJCXJlZyA9IDEyMCAqIHNkLT5leHBvc3VyZSAvIDEwMDA7CisJCWlmIChyZWcgPCAyKQorCQkJcmVnID0gMjsKKwkJZWxzZSBpZiAocmVnID4gMTUpCisJCQlyZWcgPSAxNTsKKwkJcmVnID0gKHJlZyA8PCA0KSB8IDB4MGI7CisJCXJlZ193KGdzcGNhX2RldiwgMHgxOSwgJnJlZywgMSk7CisJCWJyZWFrOworCSAgICB9CisJY2FzZSBTRU5TT1JfT1Y2NjUwOgorCWNhc2UgU0VOU09SX09WNzYzMF8zOiB7CisJCS8qIFRoZSBvdjY2NTAgLyBvdjc2MzAgaGF2ZSAyIHJlZ2lzdGVycyB3aGljaCBib3RoIGluZmx1ZW5jZQorCQkgICBleHBvc3VyZSwgcmVnaXN0ZXIgMTEsIHdob3NlIGxvdyBuaWJibGUgc2V0cyB0aGUgbnIgb2ZmIGZwcworCQkgICBhY2NvcmRpbmcgdG86IGZwcyA9IDMwIC8gKGxvd19uaWJibGUgKyAxKQorCisJCSAgIFRoZSBmcHMgY29uZmlndXJlcyB0aGUgbWF4aW11bSBleHBvc3VyZSBzZXR0aW5nLCBidXQgaXQgaXMKKwkJICAgcG9zc2libGUgdG8gdXNlIGxlc3MgZXhwb3N1cmUgdGhlbiB3aGF0IHRoZSBmcHMgbWF4aW11bQorCQkgICBhbGxvd3MgYnkgc2V0dGluZyByZWdpc3RlciAxMC4gcmVnaXN0ZXIgMTAgY29uZmlndXJlcyB0aGUKKwkJICAgYWN0dWFsIGV4cG9zdXJlIGFzIHF1b3RpZW50IG9mIHRoZSBmdWxsIGV4cG9zdXJlLCB3aXRoIDAKKwkJICAgYmVpbmcgbm8gZXhwb3N1cmUgYXQgYWxsIChub3QgdmVyeSB1c2VmdWxsKSBhbmQgcmVnMTBfbWF4CisJCSAgIGJlaW5nIG1heCBleHBvc3VyZSBwb3NzaWJsZSBhdCB0aGF0IGZyYW1lcmF0ZS4KKworCQkgICBUaGUgY29kZSBtYXBzIG91ciAwIC0gNTEwIG1zIGV4cG9zdXJlIGN0cmwgdG8gdGhlc2UgMgorCQkgICByZWdpc3RlcnMsIHRyeWluZyB0byBrZWVwIGZwcyBhcyBoaWdoIGFzIHBvc3NpYmxlLgorCQkqLworCQlfX3U4IGkyY1tdID0gezB4YjAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTB9OworCQlpbnQgcmVnMTAsIHJlZzExOworCQkvKiBvdjY2NDUgZGF0YXNoZWV0IHNheXMgcmVnMTBfbWF4IGlzIDlhLCBidXQgdGhhdCB1c2VzCisJCSAgIHRsaW5lICogMiAqIHJlZzEwIGFzIGZvcm11bGEgZm9yIGNhbGN1bGF0aW5nIHRleHBvLCB0aGUKKwkJICAgb3Y2NjUwIHByb2JhYmx5IHVzZXMgdGhlIHNhbWUgZm9ybXVsYSBhcyB0aGUgNzczMCB3aGljaCB1c2VzCisJCSAgIHRsaW5lICogNCAqIHJlZzEwLCB3aGljaCBleHBsYWlucyB3aHkgdGhlIHJlZzEwbWF4IHdlJ3ZlCisJCSAgIGZvdW5kIGV4cGVyaW1lbnRhbGx5IGZvciB0aGUgb3Y2NjUwIGlzIGV4YWN0bHkgaGFsZiB0aGF0IG9mCisJCSAgIHRoZSBvdjY2NDUuIFRoZSBvdjc2MzAgZGF0YXNoZWV0IHNheXMgdGhlIG1heCBpcyAweDQxLiAqLworCQljb25zdCBpbnQgcmVnMTBfbWF4ID0gKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNjY1MCkKKwkJCQk/IDB4NGQgOiAweDQxOworCisJCXJlZzExID0gKDYwICogc2QtPmV4cG9zdXJlICsgOTk5KSAvIDEwMDA7CisJCWlmIChyZWcxMSA8IDEpCisJCQlyZWcxMSA9IDE7CisJCWVsc2UgaWYgKHJlZzExID4gMTYpCisJCQlyZWcxMSA9IDE2OworCisJCS8qIGZyYW1lIGV4cG9zdXJlIHRpbWUgaW4gbXMgPSAxMDAwICogcmVnMTEgLyAzMCAgICAtPgorCQlyZWcxMCA9IHNkLT5leHBvc3VyZSAqIDIgKiByZWcxMF9tYXggLyAoMTAwMCAqIHJlZzExIC8gMzApICovCisJCXJlZzEwID0gKHNkLT5leHBvc3VyZSAqIDYwICogcmVnMTBfbWF4KSAvICgxMDAwICogcmVnMTEpOworCisJCS8qIERvbid0IGFsbG93IHRoaXMgdG8gZ2V0IGJlbG93IDEwIHdoZW4gdXNpbmcgYXV0b2dhaW4sIHRoZQorCQkgICBzdGVwcyBiZWNvbWUgdmVyeSBsYXJnZSAocmVsYXRpdmVseSkgd2hlbiBiZWxvdyAxMCBjYXVzaW5nCisJCSAgIHRoZSBpbWFnZSB0byBvc2NpbGF0ZSBmcm9tIG11Y2ggdG9vIGRhcmssIHRvIG11Y2ggdG9vIGJyaWdodAorCQkgICBhbmQgYmFjayBhZ2Fpbi4gKi8KKwkJaWYgKHNkLT5hdXRvZ2FpbiAmJiByZWcxMCA8IDEwKQorCQkJcmVnMTAgPSAxMDsKKwkJZWxzZSBpZiAocmVnMTAgPiByZWcxMF9tYXgpCisJCQlyZWcxMCA9IHJlZzEwX21heDsKKworCQkvKiBXcml0ZSByZWcgMTAgYW5kIHJlZzExIGxvdyBuaWJibGUgKi8KKwkJaTJjWzFdID0gc2QtPnNlbnNvcl9hZGRyOworCQlpMmNbM10gPSByZWcxMDsKKwkJaTJjWzRdIHw9IHJlZzExIC0gMTsKKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzYzMF8zKSB7CisJCQlfX3U4IHJlZzc2ID0gcmVnMTAgJiAweDAzOworCQkJX191OCBpMmNfcmVnNzZbXSA9IHsweGEwLCAweDIxLCAweDc2LCAweDAwLAorCQkJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH07CisJCQlyZWcxMCA+Pj0gMjsKKwkJCWkyY19yZWc3NlszXSA9IHJlZzc2OworCQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjX3JlZzc2KSA8IDApCisJCQkJUERFQlVHKERfRVJSLCAiaTJjIGVycm9yIGV4cG9zdXJlIik7CisJCX0KKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjKSA8IDApCisJCQlQREVCVUcoRF9FUlIsICJpMmMgZXJyb3IgZXhwb3N1cmUiKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNjY1MDoKKwljYXNlIFNFTlNPUl9PVjc2MzBfMzogeworCQkvKiBGcmFtZXJhdGUgYWRqdXN0IHJlZ2lzdGVyIGZvciBhcnRpZmljaWFsIGxpZ2h0IDUwIGh6IGZsaWNrZXIKKwkJICAgY29tcGVuc2F0aW9uLCBpZGVudGljYWwgdG8gb3Y2NjMwIDB4MmIgcmVnaXN0ZXIsIHNlZSBvdjY2MzAKKwkJICAgZGF0YXNoZWV0LgorCQkgICAweDRmIC0+ICgzMCBmcHMgLT4gMjUgZnBzKSwgMHgwMCAtPiBubyBhZGp1c3RtZW50ICovCisJCV9fdTggaTJjW10gPSB7MHhhMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH07CisJCXN3aXRjaCAoc2QtPmZyZXEpIHsKKwkJZGVmYXVsdDoKKy8qCQljYXNlIDA6CQkJICogbm8gZmlsdGVyKi8KKy8qCQljYXNlIDI6CQkJICogNjAgaHogKi8KKwkJCWkyY1szXSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAxOgkJCS8qIDUwIGh6ICovCisJCQlpMmNbM10gPSAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y2NjUwKQorCQkJCQk/IDB4NGYgOiAweDhhOworCQkJYnJlYWs7CisJCX0KKwkJaTJjWzFdID0gc2QtPnNlbnNvcl9hZGRyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMpIDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBzZXRmcmVxIik7CisJCWJyZWFrOworCSAgICB9CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKy8qCWNhc2UgU0VOU09SX09WNjY1MDogKi8KKwljYXNlIFNFTlNPUl9PVjc2MzBfMzoKKwljYXNlIFNFTlNPUl9PVjc2MzA6IHsKKwkJX191OCBpMmNbXSA9IHsweGEwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfTsKKwkJaTJjWzFdID0gc2QtPnNlbnNvcl9hZGRyOworCQlpMmNbM10gPSBzZC0+c2F0dXJhdGlvbiAmIDB4ZjA7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyYykgPCAwKQorCQkJUERFQlVHKERfRVJSLCAiaTJjIGVycm9yIHNldHNhdHVyYXRpb24iKTsKKwkJZWxzZQorCQkJUERFQlVHKERfQ09ORiwgInNhdHVyYXRpb24gc2V0IHRvOiAlZCIsCisJCQkJKGludClzZC0+c2F0dXJhdGlvbik7CisJCWJyZWFrOworCSAgICB9CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRodWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworLyoJY2FzZSBTRU5TT1JfT1Y2NjUwOiAqLworCWNhc2UgU0VOU09SX09WNzYzMF8zOgorCWNhc2UgU0VOU09SX09WNzYzMDogeworCQlfX3U4IGkyY1tdID0gezB4YTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9OworCQlpMmNbMV0gPSBzZC0+c2Vuc29yX2FkZHI7CisJCWkyY1szXSA9IDB4MjAgfCAoc2QtPmh1ZSA+PiAzKTsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjKSA8IDApCisJCQlQREVCVUcoRF9FUlIsICJpMmMgZXJyb3Igc2V0c2F0dXJhdGlvbiIpOworCQllbHNlCisJCQlQREVCVUcoRF9DT05GLCAiaHVlIHNldCB0bzogJWQiLCAoaW50KXNkLT5odWUpOworCQlicmVhazsKKwkgICAgfQorCX0KK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworLyoJY2FzZSBTRU5TT1JfT1Y2NjUwOiAqLworCWNhc2UgU0VOU09SX09WNzYzMF8zOgorCWNhc2UgU0VOU09SX09WNzYzMDogeworCQlfX3U4IGkyY1tdID0gezB4YTAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9OworCQlpMmNbMV0gPSBzZC0+c2Vuc29yX2FkZHI7CisJCWkyY1szXSA9IDB4MjAgfCAoc2QtPmNvbnRyYXN0ID4+IDMpOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMpIDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBzZXRjb250cmFzdCIpOworCQllbHNlCisJCQlQREVCVUcoRF9DT05GLCAiY29udHJhc3Qgc2V0IHRvOiAlZCIsCisJCQkJKGludClzZC0+Y29udHJhc3QpOworCQlicmVhazsKKwkgICAgfQorCX0KK30KKworCitzdGF0aWMgdm9pZCBkb19hdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBhdmdfbHVtID0gYXRvbWljX3JlYWQoJnNkLT5hdmdfbHVtKTsKKworCWlmIChhdmdfbHVtID09IC0xKQorCQlyZXR1cm47CisKKwlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKQorCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcy0tOworCWVsc2UgaWYgKGdzcGNhX2F1dG9fZ2Fpbl9uX2V4cG9zdXJlKGdzcGNhX2RldiwgYXZnX2x1bSwKKwkJCXNkLT5icmlnaHRuZXNzICogREVTSVJFRF9BVkdfTFVNIC8gMTI3LAorCQkJQVVUT0dBSU5fREVBRFpPTkUsIEdBSU5fS05FRSwgRVhQT1NVUkVfS05FRSkpIHsKKwkJUERFQlVHKERfRlJBTSwgImF1dG9nYWluOiBnYWluIGNoYW5nZWQ6IGdhaW46ICVkIGV4cG86ICVkXG4iLAorCQkJKGludClzZC0+Z2FpbiwgKGludClzZC0+ZXhwb3N1cmUpOworCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA9IEFVVE9HQUlOX0lHTk9SRV9GUkFNRVM7CisJfQorfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCBjYW0gKmNhbTsKKwlfX3UxNiBwcm9kdWN0OworCWludCBzaWYgPSAwOworCisJLyogbmN0cmxzIGRlcGVuZHMgdXBvbiB0aGUgc2Vuc29yLCBzbyB3ZSB1c2UgYSBwZXIgY2FtIGNvcHkgKi8KKwltZW1jcHkoJnNkLT5zZF9kZXNjLCBnc3BjYV9kZXYtPnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2RfZGVzYykpOworCWdzcGNhX2Rldi0+c2RfZGVzYyA9ICZzZC0+c2RfZGVzYzsKKworCXNkLT5mcl9oX3N6ID0gMTI7CQkvKiBkZWZhdWx0IHNpemUgb2YgdGhlIGZyYW1lIGhlYWRlciAqLworCXNkLT5zZF9kZXNjLm5jdHJscyA9IDI7CQkvKiBkZWZhdWx0IG5iIG9mIGN0cmxzICovCisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOyAgICAvKiBkZWZhdWx0IGlzIGF1dG9nYWluIGFjdGl2ZSAqLworCisJcHJvZHVjdCA9IGlkLT5pZFByb2R1Y3Q7CisvKglzd2l0Y2ggKGlkLT5pZFZlbmRvcikgeyAqLworLyoJY2FzZSAweDBjNDU6CQkJCSAqIFNvbml4ICovCisJCXN3aXRjaCAocHJvZHVjdCkgeworCQljYXNlIDB4NjAwMToJCQkvKiBTTjlDMTAyICovCisJCWNhc2UgMHg2MDA1OgkJCS8qIFNOOUMxMDEgKi8KKwkJY2FzZSAweDYwMDc6CQkJLyogU045QzEwMSAqLworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTEwOworCQkJc2QtPnNlbnNvcl9oYXNfZ2FpbiA9IDE7CisJCQlzZC0+c2RfZGVzYy5uY3RybHMgPSA0OworCQkJc2QtPnNkX2Rlc2MuZHFfY2FsbGJhY2sgPSBkb19hdXRvZ2FpbjsKKwkJCXNpZiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAweDYwMDk6CQkJLyogU045QzEwMSAqLworCQljYXNlIDB4NjAwZDoJCQkvKiBTTjlDMTAxICovCisJCWNhc2UgMHg2MDI5OgkJCS8qIFNOOUMxMDEgKi8KKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfUEFTMTA2OworCQkJc2lmID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDB4NjAxMToJCQkvKiBTTjlDMTAxIC0gU045QzEwMUcgKi8KKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1Y2NjUwOworCQkJc2QtPnNlbnNvcl9oYXNfZ2FpbiA9IDE7CisJCQlzZC0+c2Vuc29yX2FkZHIgPSAweDYwOworCQkJc2QtPnNkX2Rlc2MubmN0cmxzID0gNTsKKwkJCXNkLT5zZF9kZXNjLmRxX2NhbGxiYWNrID0gZG9fYXV0b2dhaW47CisJCQlzaWYgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMHg2MDE5OgkJCS8qIFNOOUMxMDEgKi8KKwkJY2FzZSAweDYwMmM6CQkJLyogU045QzEwMiAqLworCQljYXNlIDB4NjAyZToJCQkvKiBTTjlDMTAyICovCisJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYzMDsKKwkJCXNkLT5zZW5zb3JfYWRkciA9IDB4MjE7CisJCQlicmVhazsKKwkJY2FzZSAweDYwYjA6CQkJLyogU045QzEwMyAqLworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2MzBfMzsKKwkJCXNkLT5zZW5zb3JfYWRkciA9IDB4MjE7CisJCQlzZC0+ZnJfaF9zeiA9IDE4OwkvKiBzaXplIG9mIGZyYW1lIGhlYWRlciAqLworCQkJc2QtPnNlbnNvcl9oYXNfZ2FpbiA9IDE7CisJCQlzZC0+c2RfZGVzYy5uY3RybHMgPSA4OworCQkJc2QtPnNkX2Rlc2MuZHFfY2FsbGJhY2sgPSBkb19hdXRvZ2FpbjsKKwkJCXNkLT5hdXRvZ2FpbiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAweDYwMjQ6CQkJLyogU045QzEwMiAqLworCQljYXNlIDB4NjAyNToJCQkvKiBTTjlDMTAyICovCisJCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBDWFg7CisJCQlicmVhazsKKwkJY2FzZSAweDYwMjg6CQkJLyogU045QzEwMiAqLworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9QQVMyMDI7CisJCQlicmVhazsKKwkJY2FzZSAweDYwMmQ6CQkJLyogU045QzEwMiAqLworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9IVjcxMzFSOworCQkJYnJlYWs7CisJCWNhc2UgMHg2MGFmOgkJCS8qIFNOOUMxMDMgKi8KKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfUEFTMjAyOworCQkJc2QtPmZyX2hfc3ogPSAxODsJLyogc2l6ZSBvZiBmcmFtZSBoZWFkZXIgKD8pICovCisJCQlicmVhazsKKwkJfQorLyoJCWJyZWFrOyAqLworLyoJfSAqLworCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJY2FtLT5lcGFkZHIgPSAweDAxOworCWlmICghc2lmKSB7CisJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzYzMF8zKSB7CisJCQkvKiBXZSBvbmx5IGhhdmUgMzIweDI0MCAmIDY0MHg0ODAgKi8KKwkJCWNhbS0+Y2FtX21vZGUrKzsKKwkJCWNhbS0+bm1vZGVzLS07CisJCX0KKwl9IGVsc2UgeworCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShzaWZfbW9kZSk7CisJfQorCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJc2QtPmdhaW4gPSBHQUlOX0RFRjsKKwlzZC0+ZXhwb3N1cmUgPSBFWFBPU1VSRV9ERUY7CisJc2QtPmZyZXEgPSBGUkVRX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPnNhdHVyYXRpb24gPSBTQVRVUkFUSU9OX0RFRjsKKwlzZC0+aHVlID0gSFVFX0RFRjsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjMwXzMpCS8qIGpmbTogZnJvbSB3aW4gdHJhY2UgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCBwcm9iZV9vdjc2MzAsIHNpemVvZiBwcm9iZV9vdjc2MzApOworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBvcGVuIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2Rfb3BlbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwKTsKKwlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDB4MTApCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwYXMxMDZfaTJjaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGk7CisJY29uc3QgX191OCAqZGF0YTsKKwlfX3U4IGkyYzFbXSA9IHsgMHhhMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCB9OworCisJaSA9IEFSUkFZX1NJWkUocGFzMTA2X2RhdGEpOworCWRhdGEgPSBwYXMxMDZfZGF0YVswXTsKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJbWVtY3B5KCZpMmMxWzJdLCBkYXRhLCAyKTsKKwkJCQkJLyogY29weSAyIGJ5dGVzIGZyb20gdGhlIHRlbXBsYXRlICovCisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyYzEpIDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBwYXMxMDYiKTsKKwkJZGF0YSArPSAyOworCX0KK30KKworLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLworc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgbW9kZSwgbDsKKwljb25zdCBfX3U4ICpzbjljMTB4OworCV9fdTggcmVnMDEsIHJlZzE3OworCV9fdTggcmVnMTdfMTlbM107CisKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKKwkJc245YzEweCA9IGluaXRIdjcxMzE7CisJCXJlZzE3XzE5WzBdID0gMHg2MDsKKwkJcmVnMTdfMTlbMV0gPSAobW9kZSA8PCA0KSB8IDB4OGE7CisJCXJlZzE3XzE5WzJdID0gMHgyMDsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y2NjUwOgorCQlzbjljMTB4ID0gaW5pdE92NjY1MDsKKwkJcmVnMTdfMTlbMF0gPSAweDY4OworCQlyZWcxN18xOVsxXSA9IChtb2RlIDw8IDQpIHwgMHg4YjsKKwkJcmVnMTdfMTlbMl0gPSAweDIwOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9PVjc2MzA6CisJCXNuOWMxMHggPSBpbml0T3Y3NjMwOworCQlyZWcxN18xOVswXSA9IDB4Njg7CisJCXJlZzE3XzE5WzFdID0gKG1vZGUgPDwgNCkgfCBDT01QMjsKKwkJcmVnMTdfMTlbMl0gPSBNQ0tfSU5JVDE7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzYzMF8zOgorCQlzbjljMTB4ID0gaW5pdE92NzYzMF8zOworCQlyZWcxN18xOVswXSA9IDB4Njg7CisJCXJlZzE3XzE5WzFdID0gKG1vZGUgPDwgNCkgfCBDT01QMjsKKwkJcmVnMTdfMTlbMl0gPSBNQ0tfSU5JVDE7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BBUzEwNjoKKwkJc245YzEweCA9IGluaXRQYXMxMDY7CisJCXJlZzE3XzE5WzBdID0gMHgyNDsJCS8qIDB4MjggKi8KKwkJcmVnMTdfMTlbMV0gPSAobW9kZSA8PCA0KSB8IENPTVAxOworCQlyZWcxN18xOVsyXSA9IE1DS19JTklUMTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMjAyOgorCQlzbjljMTB4ID0gaW5pdFBhczIwMjsKKwkJcmVnMTdfMTlbMF0gPSBtb2RlID8gMHgyNCA6IDB4MjA7CisJCXJlZzE3XzE5WzFdID0gKG1vZGUgPDwgNCkgfCAweDg5OworCQlyZWcxN18xOVsyXSA9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1RBUzUxMTA6CisJCXNuOWMxMHggPSBpbml0VGFzNTExMDsKKwkJcmVnMTdfMTlbMF0gPSAweDYwOworCQlyZWcxN18xOVsxXSA9IChtb2RlIDw8IDQpIHwgMHg4NjsKKwkJcmVnMTdfMTlbMl0gPSAweDJiOwkJLyogMHhmMzsgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgU0VOU09SX1RBUzUxMzBDWFg6ICovCisJCXNuOWMxMHggPSBpbml0VGFzNTEzMDsKKwkJcmVnMTdfMTlbMF0gPSAweDYwOworCQlyZWcxN18xOVsxXSA9IChtb2RlIDw8IDQpIHwgQ09NUDsKKwkJcmVnMTdfMTlbMl0gPSBtb2RlID8gMHgyMyA6IDB4NDM7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PVjc2MzA6CisJCXJlZzAxID0gMHgwNjsKKwkJcmVnMTcgPSAweDI5OworCQlsID0gc2l6ZW9mIGluaXRPdjc2MzA7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzYzMF8zOgorCQlyZWcwMSA9IDB4NDQ7CisJCXJlZzE3ID0gMHg2ODsKKwkJbCA9IHNpemVvZiBpbml0T3Y3NjMwXzM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZzAxID0gc245YzEweFswXTsKKwkJcmVnMTcgPSBzbjljMTB4WzB4MTcgLSAxXTsKKwkJbCA9IDB4MWY7CisJCWJyZWFrOworCX0KKworCS8qIHJlZyAweDAxIGJpdCAyIHZpZGVvIHRyYW5zZmVydCBvbiAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJnJlZzAxLCAxKTsKKwkvKiByZWcgMHgxNyBTZW5zb3JDbGsgZW5hYmxlIGludiBDbGsgMHg2MCAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxNywgJnJlZzE3LCAxKTsKKy8qZml4bWU6IGZvciBvdjc2MzAgMTAyCisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCB7MHgwNiwgc245YzEweFsxXX0sIDIpOyAqLworCS8qIFNldCB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHRlbXBsYXRlICovCisJcmVnX3dfYmlnKGdzcGNhX2RldiwgMHgwMSwgc245YzEweCwgbCk7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKKwkJaTJjX3dfdmVjdG9yKGdzcGNhX2RldiwgaHY3MTMxX3NlbnNvcl9pbml0LAorCQkJCXNpemVvZiBodjcxMzFfc2Vuc29yX2luaXQpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9PVjY2NTA6CisJCWkyY193X3ZlY3Rvcihnc3BjYV9kZXYsIG92NjY1MF9zZW5zb3JfaW5pdCwKKwkJCQlzaXplb2Ygb3Y2NjUwX3NlbnNvcl9pbml0KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjMwOgorCQlpMmNfd192ZWN0b3IoZ3NwY2FfZGV2LCBvdjc2MzBfc2Vuc29yX2luaXRfY29tLAorCQkJCXNpemVvZiBvdjc2MzBfc2Vuc29yX2luaXRfY29tKTsKKwkJbXNsZWVwKDIwMCk7CisJCWkyY193X3ZlY3Rvcihnc3BjYV9kZXYsIG92NzYzMF9zZW5zb3JfaW5pdCwKKwkJCQlzaXplb2Ygb3Y3NjMwX3NlbnNvcl9pbml0KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjMwXzM6CisJCWkyY193X3ZlY3Rvcihnc3BjYV9kZXYsIG92NzYzMF9zZW5zb3JfaW5pdF9jb20sCisJCQkJc2l6ZW9mIG92NzYzMF9zZW5zb3JfaW5pdF9jb20pOworCQltc2xlZXAoMjAwKTsKKwkJaTJjX3coZ3NwY2FfZGV2LCBvdjc2MzBfc2Vuc29yX2luaXRfM1ttb2RlXSk7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BBUzEwNjoKKwkJcGFzMTA2X2kyY2luaXQoZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMjAyOgorCQlpMmNfd192ZWN0b3IoZ3NwY2FfZGV2LCBwYXMyMDJfc2Vuc29yX2luaXQsCisJCQkJc2l6ZW9mIHBhczIwMl9zZW5zb3JfaW5pdCk7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1RBUzUxMTA6CisJCWkyY193X3ZlY3Rvcihnc3BjYV9kZXYsIHRhczUxMTBfc2Vuc29yX2luaXQsCisJCQkJc2l6ZW9mIHRhczUxMTBfc2Vuc29yX2luaXQpOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfVEFTNTEzMENYWDogKi8KKwkJaTJjX3dfdmVjdG9yKGdzcGNhX2RldiwgdGFzNTEzMF9zZW5zb3JfaW5pdCwKKwkJCQlzaXplb2YgdGFzNTEzMF9zZW5zb3JfaW5pdCk7CisJCWJyZWFrOworCX0KKwkvKiBIX3NpemUgVl9zaXplIDB4MjgsIDB4MWUgLT4gNjQweDQ4MC4gMHgxNiwgMHgxMiAtPiAzNTJ4Mjg4ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDE1LCAmc245YzEweFsweDE1IC0gMV0sIDIpOworCS8qIGNvbXByZXNzaW9uIHJlZ2lzdGVyICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDE4LCAmcmVnMTdfMTlbMV0sIDEpOworCS8qIEhfc3RhcnQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTIsICZzbjljMTB4WzB4MTIgLSAxXSwgMSk7CisJLyogVl9TVEFSVCAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxMywgJnNuOWMxMHhbMHgxMyAtIDFdLCAxKTsKKwkvKiByZXNldCAweDE3IFNlbnNvckNsayBlbmFibGUgaW52IENsayAweDYwICovCisJCQkJLypmaXhtZTogb3Y3NjMwIFsxN109NjggOGYgKCsyMCBpZiAxMDIpKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTcsICZyZWcxN18xOVswXSwgMSk7CisJLypNQ0tTSVpFIC0+MyAqLwkvKmZpeG1lOiBub3Qgb3Y3NjMwKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTksICZyZWcxN18xOVsyXSwgMSk7CisJLyogQUVfU1RSWCBBRV9TVFJZIEFFX0VORFggQUVfRU5EWSAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxYywgJnNuOWMxMHhbMHgxYyAtIDFdLCA0KTsKKwkvKiBFbmFibGUgdmlkZW8gdHJhbnNmZXJ0ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAmc245YzEweFswXSwgMSk7CisJLyogQ29tcHJlc3Npb24gKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTgsICZyZWcxN18xOVsxXSwgMik7CisJbXNsZWVwKDIwKTsKKworCXNldGdhaW4oZ3NwY2FfZGV2KTsKKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlzZXRmcmVxKGdzcGNhX2Rldik7CisJc2V0c2F0dXJhdGlvbihnc3BjYV9kZXYpOworCXNldGh1ZShnc3BjYV9kZXYpOworCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisKKwlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA9IDA7CisJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sIC0xKTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCV9fdTggQnl0ZVNlbmQ7CisKKwlCeXRlU2VuZCA9IDB4MDk7CS8qIDBYMDAgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsICZCeXRlU2VuZCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIHZvaWQgc2RfY2xvc2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KKwkJCXVuc2lnbmVkIGNoYXIgKmRhdGEsCQkvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCWludCBpOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIGZyYW1lcyBzdGFydCB3aXRoOgorCSAqCWZmIGZmIDAwIGM0IGM0IDk2CXN5bmNocm8KKwkgKgkwMAkJKHVua25vd24pCisJICoJeHgJCShmcmFtZSBzZXF1ZW5jZSAvIHNpemUgLyBjb21wcmVzc2lvbikKKwkgKgkoeHgpCQkoaWRlbSAtIGV4dHJhIGJ5dGUgZm9yIHNuOWMxMDMpCisJICoJbGwgbW0JCWJyaWdodG5lc3Mgc3VtIGluc2lkZSBhdXRvIGV4cG9zdXJlCisJICoJbGwgbW0JCWJyaWdodG5lc3Mgc3VtIG91dHNpZGUgYXV0byBleHBvc3VyZQorCSAqCSh4eCB4eCB4eCB4eCB4eCkJYXVkaW8gdmFsdWVzIGZvciBzbmMxMDMKKwkgKi8KKwlpZiAobGVuID4gNiAmJiBsZW4gPCAyNCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gNjsgaSsrKSB7CisJCQlpZiAoZGF0YVswICsgaV0gPT0gMHhmZgorCQkJICAgICYmIGRhdGFbMSArIGldID09IDB4ZmYKKwkJCSAgICAmJiBkYXRhWzIgKyBpXSA9PSAweDAwCisJCQkgICAgJiYgZGF0YVszICsgaV0gPT0gMHhjNAorCQkJICAgICYmIGRhdGFbNCArIGldID09IDB4YzQKKwkJCSAgICAmJiBkYXRhWzUgKyBpXSA9PSAweDk2KSB7CS8qIHN0YXJ0IG9mIGZyYW1lICovCisJCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJCQlmcmFtZSwgZGF0YSwgMCk7CisJCQkJaWYgKGxlbiAtIGkgPCBzZC0+ZnJfaF9zeikgeworCQkJCQlhdG9taWNfc2V0KCZzZC0+YXZnX2x1bSwgLTEpOworCQkJCQlQREVCVUcoRF9TVFJFQU0sICJwYWNrZXQgdG9vIHNob3J0IHRvIgorCQkJCQkJIiBnZXQgYXZnIGJyaWdodG5lc3MiKTsKKwkJCQl9IGVsc2UgaWYgKHNkLT5mcl9oX3N6ID09IDEyKSB7CisJCQkJCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLAorCQkJCQkJZGF0YVtpICsgOF0gKworCQkJCQkJCShkYXRhW2kgKyA5XSA8PCA4KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sCisJCQkJCQlkYXRhW2kgKyA5XSArCisJCQkJCQkJKGRhdGFbaSArIDEwXSA8PCA4KSk7CisJCQkJfQorCQkJCWRhdGEgKz0gaSArIHNkLT5mcl9oX3N6OworCQkJCWxlbiAtPSBpICsgc2QtPmZyX2hfc3o7CisJCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULAorCQkJCQkJZnJhbWUsIGRhdGEsIGxlbik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwKKwkJCWZyYW1lLCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmdhaW4gPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRnYWluKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5nYWluOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5leHBvc3VyZSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+ZXhwb3N1cmU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmF1dG9nYWluID0gdmFsOworCS8qIHdoZW4gc3dpdGNoaW5nIHRvIGF1dG9nYWluIHNldCBkZWZhdWx0cyB0byBtYWtlIHN1cmUKKwkgICB3ZSBhcmUgb24gYSB2YWxpZCBwb2ludCBvZiB0aGUgYXV0b2dhaW4gZ2FpbiAvCisJICAgZXhwb3N1cmUga25lZSBncmFwaCwgYW5kIGdpdmUgdGhpcyBjaGFuZ2UgdGltZSB0bworCSAgIHRha2UgZWZmZWN0IGJlZm9yZSBkb2luZyBhdXRvZ2Fpbi4gKi8KKwlpZiAoc2QtPmF1dG9nYWluKSB7CisJCXNkLT5leHBvc3VyZSA9IEVYUE9TVVJFX0RFRjsKKwkJc2QtPmdhaW4gPSBHQUlOX0RFRjsKKwkJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA9IEFVVE9HQUlOX0lHTk9SRV9GUkFNRVM7CisJCQlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCQkJc2V0Z2Fpbihnc3BjYV9kZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YXV0b2dhaW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+ZnJlcSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGZyZXEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0c2F0dXJhdGlvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+c2F0dXJhdGlvbiA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHNhdHVyYXRpb24oZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnNhdHVyYXRpb247CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5odWUgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRodWUoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRodWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+aHVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKK3sKKwlzd2l0Y2ggKG1lbnUtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKKwkJc3dpdGNoIChtZW51LT5pbmRleCkgeworCQljYXNlIDA6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJOb0ZsaWtlciIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMToJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNTAgSHoiKTsKKwkJCXJldHVybiAwOworCQljYXNlIDI6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjYwIEh6Iik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLm9wZW4gPSBzZF9vcGVuLAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAorCS5jbG9zZSA9IHNkX2Nsb3NlLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KKyNkZWZpbmUgRFZOTShuYW1lKSAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpIG5hbWUKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworI2lmbmRlZiBDT05GSUdfVVNCX1NOOUMxMDIKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIERWTk0oIkdlbml1cyBWaWRlb0NBTSBOQiIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNSksIERWTk0oIlN3ZWV4IFRhczUxMTAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcpLCBEVk5NKCJTb25peCBzbjljMTAxICsgVGFzNTExMEQiKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDkpLCBEVk5NKCJzcGNhQ2FtQDEyMCIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwZCksIERWTk0oInNwY2FDYW1AMTIwIil9LAorI2VuZGlmCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTEpLCBEVk5NKCJNQVggV2ViY2FtIE1pY3JvZGlhIil9LAorI2lmbmRlZiBDT05GSUdfVVNCX1NOOUMxMDIKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAxOSksIERWTk0oIkdlbmVyaWMgU29uaXggT1Y3NjMwIil9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0KSwgRFZOTSgiR2VuZXJpYyBTb25peCBUYXM1MTMwYyIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNSksIERWTk0oIlhjYW0gU2hhbmdhIil9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI4KSwgRFZOTSgiU29uaXggQnRjIFBjMzgwIil9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI5KSwgRFZOTSgic3BjYUNhbUAxNTAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmMpLCBEVk5NKCJHZW5lcmljIFNvbml4IE9WNzYzMCIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZCksIERWTk0oIkxJQy0yMDAgTEciKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmUpLCBEVk5NKCJHZW5pdXMgVmlkZW9DYW0gTWVzc2VuZ2VyIil9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFmKSwgRFZOTSgiVHJ1c3QgV0IzMTAwUCIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMCksIERWTk0oIkdlbml1cyBWaWRlb0NhbSBMb29rIil9LAorI2VuZGlmCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJUERFQlVHKERfUFJPQkUsICJ2JXMgcmVnaXN0ZXJlZCIsIHZlcnNpb24pOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2OGI5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTAsMCArMSwxNjcxIEBACisvKgorICoJCVNvbml4IHNuOWMxMDJwIHNuOWMxMDUgc245YzEyMCAoanBlZykgbGlicmFyeQorICoJCUNvcHlyaWdodCAoQykgMjAwNSBNaWNoZWwgWGhhYXJkIG14aGFhcmRAbWFnaWMuZnIKKyAqCisgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJzb25peGoiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorI2luY2x1ZGUgImpwZWcuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9TT05JWCBKUEVHIFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisKKwlpbnQgYXZnX2x1bTsKKwl1bnNpZ25lZCBpbnQgZXhwb3N1cmU7CisKKwl1bnNpZ25lZCBzaG9ydCBicmlnaHRuZXNzOworCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7CisJdW5zaWduZWQgY2hhciBjb2xvcnM7CisJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKKworCXNpZ25lZCBjaGFyIGFnX2NudDsKKyNkZWZpbmUgQUdfQ05UX1NUQVJUIDEzCisKKwljaGFyIHFpbmRleDsKKwl1bnNpZ25lZCBjaGFyIGJyaWRnZTsKKyNkZWZpbmUgQlJJREdFX1NOOUMxMDJQIDAKKyNkZWZpbmUgQlJJREdFX1NOOUMxMDUgMQorI2RlZmluZSBCUklER0VfU045QzExMCAyCisjZGVmaW5lIEJSSURHRV9TTjlDMTIwIDMKKyNkZWZpbmUgQlJJREdFX1NOOUMzMjUgNAorCWNoYXIgc2Vuc29yOwkJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KKyNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMAorI2RlZmluZSBTRU5TT1JfTUkwMzYwIDEKKyNkZWZpbmUgU0VOU09SX01PNDAwMCAyCisjZGVmaW5lIFNFTlNPUl9PVjc2NDggMworI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDQKKwl1bnNpZ25lZCBjaGFyIGkyY19iYXNlOworfTsKKworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAweGZmZmYsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMHg3ZmZmCisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEyNywKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT05UUkFTVF9ERUYgNjMKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb2xvciIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09MT1JfREVGIDEyNworCQkuZGVmYXVsdF92YWx1ZSA9IENPTE9SX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbG9ycywKKwkgICAgLmdldCA9IHNkX2dldGNvbG9ycywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9HQUlOLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lICAgID0gIkF1dG8gR2FpbiIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCisJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCisJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAyfSwKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAwfSwKK307CisKKy8qRGF0YSBmcm9tIHNuOWMxMDJwK2h2NzEzMzFyICovCitzdGF0aWMgY29uc3QgX191OCBzbl9odjcxMzFbXSA9IHsKKy8qCXJlZzAgIHJlZzEgIHJlZzIgIHJlZzMgIHJlZzQgIHJlZzUgIHJlZzYgIHJlZzcgIHJlZzggIHJlZzkgKi8KKwkweDAwLCAweDAzLCAweDY0LCAweDAwLCAweDFBLCAweDIwLCAweDIwLCAweDIwLCAweEExLCAweDExLAorLyoJcmVnYSAgcmVnYiAgcmVnYyAgcmVnZCAgcmVnZSAgcmVnZiAgcmVnMTAgcmVnMTEgKi8KKwkweDAyLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDAwLAkJLyogMDAgKi8KKy8qCXJlZzEyIHJlZzEzIHJlZzE0IHJlZzE1IHJlZzE2IHJlZzE3IHJlZzE4IHJlZzE5IHJlZzFhIHJlZzFiICovCisJMHgwMCwgMHgwMSwgMHgwMywgMHgyOCwgMHgxZSwgMHg0MSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qCXJlZzFjIHJlZzFkIHJlZzFlIHJlZzFmIHJlZzIwIHJlZzIxIHJlZzIyIHJlZzIzICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IF9fdTggc25fbWkwMzYwW10gPSB7CisvKglyZWcwICByZWcxICByZWcyICByZWczICByZWc0ICByZWc1ICByZWc2ICByZWc3ICByZWc4ICByZWc5ICovCisJMHgwMCwgMHg2MSwgMHg0NCwgMHgwMCwgMHgxYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHhiMSwgMHg1ZCwKKy8qCXJlZ2EgIHJlZ2IgIHJlZ2MgIHJlZ2QgIHJlZ2UgIHJlZ2YgIHJlZzEwIHJlZzExICovCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwMCwKKy8qCXJlZzEyIHJlZzEzIHJlZzE0IHJlZzE1IHJlZzE2IHJlZzE3IHJlZzE4IHJlZzE5IHJlZzFhIHJlZzFiICovCisJMHgwMCwgMHgwMiwgMHgwYSwgMHgyOCwgMHgxZSwgMHg2MSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qCXJlZzFjIHJlZzFkIHJlZzFlIHJlZzFmIHJlZzIwIHJlZzIxIHJlZzIyIHJlZzIzICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IF9fdTggc25fbW80MDAwW10gPSB7CisvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcJcmVnOCAqLworCTB4MTIsCTB4MjMsCTB4NjAsCTB4MDAsCTB4MUEsCTB4MDAsCTB4MjAsCTB4MTgsCTB4ODEsCisvKglyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmCXJlZzEwCXJlZzExKi8KKwkweDIxLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAzLAkweDAwLAorLyoJcmVnMTIJcmVnMTMJcmVnMTQJcmVnMTUJcmVnMTYJcmVnMTcJcmVnMTgJcmVnMTkJcmVnMWEqLworCTB4MGIsCTB4MGYsCTB4MTQsCTB4MjgsCTB4MWUsCTB4NDAsCTB4MDgsCTB4MDAsCTB4MDAsCisvKglyZWcxYglyZWcxYwlyZWcxZAlyZWcxZQlyZWcxZglyZWcyMAlyZWcyMQlyZWcyMglyZWcyMyovCisJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwOCwJMHgyNSwJMHgzOSwJMHg0YiwKKwkweDVjLAkweDZiLAkweDc5LAkweDg3LAkweDk1LAkweGEyLAkweGFmLAkweGJiLAkweGM3LAorCTB4ZDMsCTB4ZGYsCTB4ZWEsCTB4ZjUKK307CisKK3N0YXRpYyBjb25zdCBfX3U4IHNuX292NzY0OFtdID0geworCTB4MDAsIDB4MjEsIDB4NjIsIDB4MDAsIDB4MWEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4QTEsIDB4NkUsIDB4MTgsIDB4NjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNiwgMHgyOCwgMHgxRSwgMHg4MiwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgX191OCBzbl9vdjc2NjBbXQk9IHsKKy8qCXJlZzAJcmVnMQlyZWcyCXJlZzMJcmVnNAlyZWc1CXJlZzYJcmVnNwlyZWc4ICovCisJMHgwMCwJMHg2MSwJMHg0MCwJMHgwMCwJMHgxYSwJMHgwMCwJMHgwMCwJMHgwMCwJMHg4MSwKKy8qIAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmCXJlZzEwCXJlZzExKi8KKwkweDIxLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAzLAkweDAwLAorLyoJcmVnMTIJcmVnMTMJcmVnMTQJcmVnMTUJcmVnMTYJcmVnMTcJcmVnMTgJcmVnMTkJcmVnMWEqLworCTB4MDEsCTB4MDEsCTB4MTQsCTB4MjgsCTB4MWUsCTB4MDAsCTB4MDcsCTB4MDAsCTB4MDAsCisvKglyZWcxYglyZWcxYwlyZWcxZAlyZWcxZQlyZWcxZglyZWcyMAlyZWcyMQlyZWcyMglyZWcyMyovCisJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorfTsKKworLyogc2VxdWVuY2Ugc3BlY2lmaWMgdG8gdGhlIHNlbnNvcnMgLSAhISBpbmRleCA9IFNFTlNPUl94eHggKi8KK3N0YXRpYyBjb25zdCBfX3U4ICpzbl90YltdID0geworCXNuX2h2NzEzMSwKKwlzbl9taTAzNjAsCisJc25fbW80MDAwLAorCXNuX292NzY0OCwKKwlzbl9vdjc2NjAKK307CisKK3N0YXRpYyBjb25zdCBfX3U4IHJlZ3NuMjBbXSA9IHsKKwkweDAwLCAweDJkLCAweDQ2LCAweDVhLCAweDZjLCAweDdjLCAweDhiLCAweDk5LAorCTB4YTYsIDB4YjIsIDB4YmYsIDB4Y2EsIDB4ZDUsIDB4ZTAsIDB4ZWIsIDB4ZjUsIDB4ZmYKK307CitzdGF0aWMgY29uc3QgX191OCByZWdzbjIwX3NuOWMxMjBbXSA9IHsKKwkweDAwLCAweDI1LCAweDNjLCAweDUwLCAweDYyLCAweDcyLCAweDgxLCAweDkwLAorCTB4OWUsIDB4YWIsIDB4YjgsIDB4YzUsIDB4ZDEsIDB4ZGQsIDB4ZTksIDB4ZjQsIDB4ZmYKK307CitzdGF0aWMgY29uc3QgX191OCByZWdzbjIwX3NuOWMzMjVbXSA9IHsKKwkweDBhLCAweDNhLCAweDU2LCAweDZjLCAweDdlLCAweDhkLCAweDlhLCAweGE0LAorCTB4YWYsIDB4YmIsIDB4YzUsIDB4Y2QsIDB4ZDUsIDB4ZGUsIDB4ZTgsIDB4ZWQsIDB4ZjUKK307CisKK3N0YXRpYyBjb25zdCBfX3U4IHJlZzg0W10gPSB7CisJMHgxNCwgMHgwMCwgMHgyNywgMHgwMCwgMHgwNywgMHgwMCwgMHhlNSwgMHgwZiwKKwkweGU0LCAweDBmLCAweDM4LCAweDAwLCAweDNlLCAweDAwLCAweGMzLCAweDBmLAorLyoJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAqLworCTB4ZjcsIDB4MGYsIDB4MGEsIDB4MDAsIDB4MDAKK307CitzdGF0aWMgY29uc3QgX191OCByZWc4NF9zbjljMTIwXzFbXSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMAorfTsKK3N0YXRpYyBjb25zdCBfX3U4IHJlZzg0X3NuOWMxMjBfMltdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDBjLCAweDAyLCAweDNiCit9Oworc3RhdGljIGNvbnN0IF9fdTggcmVnODRfc245YzEyMF8zW10gPSB7CisJMHgxNCwgMHgwMCwgMHgyNywgMHgwMCwgMHgwOCwgMHgwMCwgMHhlYiwgMHgwZiwKKwkweGQ1LCAweDBmLCAweDQyLCAweDAwLCAweDQxLCAweDAwLCAweGNhLCAweDBmLAorCTB4ZjUsIDB4MGYsIDB4MGMsIDB4MDIsIDB4M2IKK307CitzdGF0aWMgY29uc3QgX191OCByZWc4NF9zbjljMzI1W10gPSB7CisJMHgxNCwgMHgwMCwgMHgyNywgMHgwMCwgMHgwNywgMHgwMCwgMHhlNCwgMHgwZiwKKwkweGQzLCAweDBmLCAweDRiLCAweDAwLCAweDQ4LCAweDAwLCAweGMwLCAweDBmLAorCTB4ZjgsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCBfX3U4IGh2NzEzMXJfc2Vuc29yX2luaXRbXVs4XSA9IHsKKwl7MHhDMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QjEsIDB4MTEsIDB4MzQsIDB4MTcsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDExLCAweDQwLCAweEZGLCAweDdGLCAweDdGLCAweDdGLCAweDEwfSwKKwl7MHg5MSwgMHgxMSwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDExLCAweDE0LCAweDAxLCAweEUyLCAweDAyLCAweDgyLCAweDEwfSwKKwl7MHg5MSwgMHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisKKwl7MHhBMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEMxLCAweDExLCAweDI1LCAweDAwLCAweDYxLCAweEE4LCAweDAwLCAweDEwfSwKKwl7MHhBMSwgMHgxMSwgMHgzMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QzEsIDB4MTEsIDB4MzEsIDB4MjAsIDB4MkUsIDB4MjAsIDB4MDAsIDB4MTB9LAorCXsweEMxLCAweDExLCAweDI1LCAweDAwLCAweEMzLCAweDUwLCAweDAwLCAweDEwfSwKKwl7MHhBMSwgMHgxMSwgMHgzMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGdhaW4xNCAqLworCXsweEMxLCAweDExLCAweDMxLCAweDEwLCAweDEwLCAweDEwLCAweDAwLCAweDEwfSwgLyogciBnIGIgMTAxYTEwICovCisKKwl7MHhBMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QTEsIDB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEExLCAweDExLCAweDIxLCAweEQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhBMSwgMHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QTEsIDB4MTEsIDB4MjMsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCisJezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEExLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhBMSwgMHgxMSwgMHgyMSwgMHhEMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QTEsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEExLCAweDExLCAweDIzLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBfX3U4IG1pMDM2MF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweEIxLCAweDVELCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhCMSwgMHg1RCwgMHgwRCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QjEsIDB4NUQsIDB4MEQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDE2LCAweDEwfSwKKwl7MHhEMSwgMHg1RCwgMHgwMywgMHgwMSwgMHhFMiwgMHgwMiwgMHg4MiwgMHgxMH0sCisJezB4RDEsIDB4NUQsIDB4MDUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NTMsIDB4MTB9LAorCXsweEIxLCAweDVELCAweDBELCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg1RCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NUQsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg1RCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NUQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg1RCwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NUQsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDFBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg1RCwgMHgxQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QjEsIDB4NUQsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDIwLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg1RCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NUQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDEwfSwKKwl7MHhEMSwgMHg1RCwgMHgyRiwgMHhGNywgMHhCMCwgMHgwMCwgMHgwNCwgMHgxMH0sCisJezB4RDEsIDB4NUQsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDMzLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDEwfSwKKwl7MHhCMSwgMHg1RCwgMHgzRCwgMHgwNiwgMHg4RiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NUQsIDB4NDAsIDB4MDEsIDB4RTAsIDB4MDAsIDB4RDEsIDB4MTB9LAorCXsweEIxLCAweDVELCAweDQ0LCAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg1RCwgMHg1OCwgMHgwMCwgMHg3OCwgMHgwMCwgMHg0MywgMHgxMH0sCisJezB4RDEsIDB4NUQsIDB4NUEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDVDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg1RCwgMHg1RSwgMHgwMCwgMHgwMCwgMHhBMywgMHgxRCwgMHgxMH0sCisJezB4QjEsIDB4NUQsIDB4NjIsIDB4MDQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MTB9LAorCisJezB4QjEsIDB4NUQsIDB4MjAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEIxLCAweDVELCAweDIwLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhCMSwgMHg1RCwgMHgwOSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NUQsIDB4MkIsIDB4MDAsIDB4QTAsIDB4MDAsIDB4QjAsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDJELCAweDAwLCAweEEwLCAweDAwLCAweEEwLCAweDEwfSwKKworCXsweEIxLCAweDVELCAweDBBLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwgLyogc2Vuc29yIGNsY2sgPzIgKi8KKwl7MHhCMSwgMHg1RCwgMHgwNiwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QjEsIDB4NUQsIDB4MDUsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEIxLCAweDVELCAweDA5LCAweDAyLCAweDM1LCAweDAwLCAweDAwLCAweDEwfSwgLyogZXhwb3N1cmUgMiAqLworCisJezB4RDEsIDB4NUQsIDB4MkIsIDB4MDAsIDB4QjksIDB4MDAsIDB4RTMsIDB4MTB9LAorCXsweEQxLCAweDVELCAweDJELCAweDAwLCAweDVmLCAweDAwLCAweEI5LCAweDEwfSwgLyogNDIgKi8KKy8qCXsweEIxLCAweDVELCAweDM1LCAweDAwLCAweDY3LCAweDAwLCAweDAwLCAweDEwfSwgKiBnYWluIG9yaWcgKi8KKy8qCXsweEIxLCAweDVELCAweDM1LCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwfSwgKiBnYWluICovCisJezB4QjEsIDB4NUQsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiB1cGRhdGUgKi8KKwl7MHhCMSwgMHg1RCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNlbnNvciBvbiAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IF9fdTggbW80MDAwX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YTEsIDB4MjEsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgwNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MDYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDA2LCAweDgxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgxMSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MTEsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDExLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDBmLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDExLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBfX3U4IG92NzY2MF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGExLCAweDIxLCAweDEyLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogcmVzZXQgU0NDQiAqLworCXsweGExLCAweDIxLCAweDEyLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwkJCQkJCS8qIE91dGZvcm1hdCA/PyByYXdSR0IgKi8KKwl7MHhhMSwgMHgyMSwgMHgxMywgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGluaXQgQ09NOCAqLworCXsweGQxLCAweDIxLCAweDAwLCAweDAxLCAweDc0LCAweDkyLCAweDAwLCAweDEwfSwKKy8qCXsweGQxLCAweDIxLCAweDAwLCAweDAxLCAweDc0LCAweDc0LCAweDAwLCAweDEwfSwgKi8KKwkJCQkJCS8qIEdBSU4gQkxVRSBSRUQgVlJFRiAqLworCXsweGQxLCAweDIxLCAweDA0LCAweDAwLCAweDdkLCAweDYyLCAweDAwLCAweDEwfSwKKwkJCQkJCS8qIENPTSAxIEJBVkUgR0VBVkUgQUVDSEggKi8KKwl7MHhiMSwgMHgyMSwgMHgwOCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIFJBVkUgQ09NMiAqLworCXsweGQxLCAweDIxLCAweDBjLCAweDAwLCAweDA4LCAweDA0LCAweDRmLCAweDEwfSwgLyogQ09NIDMgNCA1IDYgKi8KKwl7MHhkMSwgMHgyMSwgMHgxMCwgMHg3ZiwgMHg0MCwgMHgwNSwgMHhmOCwgMHgxMH0sCisvKgl7MHhkMSwgMHgyMSwgMHgxMCwgMHg3ZiwgMHg0MCwgMHgwNSwgMHhmZiwgMHgxMH0sICovCisJCQkJCQkvKiBBRUNIIENMS1JDIENPTTcgQ09NOCAqLworCXsweGMxLCAweDIxLCAweDE0LCAweDJjLCAweDAwLCAweDAyLCAweDAwLCAweDEwfSwgLyogQ09NOSBDT00xMCAqLworCXsweGQxLCAweDIxLCAweDE3LCAweDEwLCAweDYwLCAweDAyLCAweDdiLCAweDEwfSwKKwkJCQkJCS8qIEhTVEFSVCBIU1RPUCBWU1RSVCBWU1RPUCAqLworCXsweGExLCAweDIxLCAweDFiLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogUFNIRlQgKi8KKwl7MHhiMSwgMHgyMSwgMHgxZSwgMHgwMSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIE1WRlAgTEFFQyAqLworCXsweGQxLCAweDIxLCAweDIwLCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDEwfSwKKwkJCQkJLyogQk9TIEdCT1MgR1JPUyBST1MgKEJHR1Igb2Zmc2V0KSAqLworCXsweGQxLCAweDIxLCAweDI0LCAweDY4LCAweDU4LCAweGQ0LCAweDgwLCAweDEwfSwKKy8qCXsweGQxLCAweDIxLCAweDI0LCAweDc4LCAweDY4LCAweGQ0LCAweDgwLCAweDEwfSwgKi8KKwkJCQkJCS8qIEFFVyBBRUIgVlBUIEJCSUFTICovCisJezB4ZDEsIDB4MjEsIDB4MjgsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQkJCQkJLyogR2JCSUFTIFJTVkQgRVhIQ0ggRVhIQ0wgKi8KKwl7MHhkMSwgMHgyMSwgMHgyYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgxMH0sCisJCQkJCQkvKiBSQklBUyBBRFZGTCBBU0RWRkggWUFWRSAqLworCXsweGMxLCAweDIxLCAweDMwLCAweDA4LCAweDMwLCAweGI0LCAweDAwLCAweDEwfSwKKwkJCQkJCS8qIEhTWVNUIEhTWUVOIEhSRUYgKi8KKwl7MHhkMSwgMHgyMSwgMHgzMywgMHgwMCwgMHgwNywgMHg4NCwgMHgwMCwgMHgxMH0sIC8qIHJlc2VydmVkICovCisJezB4ZDEsIDB4MjEsIDB4MzcsIDB4MGMsIDB4MDIsIDB4NDMsIDB4MDAsIDB4MTB9LAorCQkJCQkJLyogQURDIEFDT00gT0ZPTiBUU0xCICovCisJezB4ZDEsIDB4MjEsIDB4M2IsIDB4MDIsIDB4NmMsIDB4MTksIDB4MGUsIDB4MTB9LAorCQkJCQkJLyogQ09NMTEgQ09NMTIgQ09NMTMgQ09NMTQgKi8KKwl7MHhkMSwgMHgyMSwgMHgzZiwgMHg0MSwgMHhjMSwgMHgyMiwgMHgwOCwgMHgxMH0sCisJCQkJCQkvKiBFREdFIENPTTE1IENPTTE2IENPTTE3ICovCisJezB4ZDEsIDB4MjEsIDB4NDMsIDB4ZjAsIDB4MTAsIDB4NzgsIDB4YTgsIDB4MTB9LCAvKiByZXNlcnZlZCAqLworCXsweGQxLCAweDIxLCAweDQ3LCAweDYwLCAweDgwLCAweDAwLCAweDAwLCAweDEwfSwgLyogcmVzZXJ2ZWQgKi8KKwl7MHhkMSwgMHgyMSwgMHg0YiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHJlc2VydmVkICovCisJezB4ZDEsIDB4MjEsIDB4NGYsIDB4NDYsIDB4MzYsIDB4MGYsIDB4MTcsIDB4MTB9LCAvKiBNVFggMSAyIDMgNCAqLworCXsweGQxLCAweDIxLCAweDUzLCAweDdmLCAweDk2LCAweDQwLCAweDQwLCAweDEwfSwgLyogTVRYIDUgNiA3IDggKi8KKwl7MHhiMSwgMHgyMSwgMHg1NywgMHg0MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIE1UWDkgTVRYUyAqLworCXsweGQxLCAweDIxLCAweDU5LCAweGJhLCAweDlhLCAweDIyLCAweGI5LCAweDEwfSwgLyogcmVzZXJ2ZWQgKi8KKwl7MHhkMSwgMHgyMSwgMHg1ZCwgMHg5YiwgMHgxMCwgMHhmMCwgMHgwNSwgMHgxMH0sIC8qIHJlc2VydmVkICovCisJezB4YTEsIDB4MjEsIDB4NjEsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByZXNlcnZlZCAqLworCXsweGQxLCAweDIxLCAweDYyLCAweDAwLCAweDAwLCAweDUwLCAweDMwLCAweDEwfSwKKwkJCQkJCS8qIExDQzEgTENDMiBMQ0MzIExDQzQgKi8KKwl7MHhhMSwgMHgyMSwgMHg2NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIExDQzUgKi8KKwl7MHhkMSwgMHgyMSwgMHg2NywgMHg4MCwgMHg3YSwgMHg5MCwgMHg4MCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4NmIsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQkJCQkvKiBiYW5kIGdhcCByZWZlcmVuY2UgWzAuLjNdIERCTFYgKi8KKwl7MHhkMSwgMHgyMSwgMHg2YywgMHgzMCwgMHg0OCwgMHg4MCwgMHg3NCwgMHgxMH0sIC8qIGdhbW1hIGN1cnZlICovCisJezB4ZDEsIDB4MjEsIDB4NzAsIDB4NjQsIDB4NjAsIDB4NWMsIDB4NTgsIDB4MTB9LCAvKiBnYW1tYSBjdXJ2ZSAqLworCXsweGQxLCAweDIxLCAweDc0LCAweDU0LCAweDRjLCAweDQwLCAweDM4LCAweDEwfSwgLyogZ2FtbWEgY3VydmUgKi8KKwl7MHhkMSwgMHgyMSwgMHg3OCwgMHgzNCwgMHgzMCwgMHgyZiwgMHgyYiwgMHgxMH0sIC8qIGdhbW1hIGN1cnZlICovCisJezB4ZDEsIDB4MjEsIDB4N2MsIDB4MDMsIDB4MDcsIDB4MTcsIDB4MzQsIDB4MTB9LCAvKiBnYW1tYSBjdXJ2ZSAqLworCXsweGQxLCAweDIxLCAweDgwLCAweDQxLCAweDRkLCAweDU4LCAweDYzLCAweDEwfSwgLyogZ2FtbWEgY3VydmUgKi8KKwl7MHhkMSwgMHgyMSwgMHg4NCwgMHg2ZSwgMHg3NywgMHg4NywgMHg5NSwgMHgxMH0sIC8qIGdhbW1hIGN1cnZlICovCisJezB4YzEsIDB4MjEsIDB4ODgsIDB4YWYsIDB4YzcsIDB4ZGYsIDB4MDAsIDB4MTB9LCAvKiBnYW1tYSBjdXJ2ZSAqLworCXsweGMxLCAweDIxLCAweDhiLCAweDk5LCAweDk5LCAweGNmLCAweDAwLCAweDEwfSwgLyogcmVzZXJ2ZWQgKi8KKwl7MHhiMSwgMHgyMSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisvKioqKioqIChzb21lIGV4Y2hhbmdlcyBpbiB0aGUgd2luIHRyYWNlKSAqKioqKiovCisJezB4YTEsIDB4MjEsIDB4MWUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQkJCQkJLyogYml0c1szLi4wXXJlc2VydmVkICovCisJezB4YTEsIDB4MjEsIDB4MWUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwkJCQkJCS8qIFZSRUYgdmVydGljYWwgZnJhbWUgY3RybCAqLworCXsweGExLCAweDIxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIDB4MjAgKi8KKwl7MHhhMSwgMHgyMSwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorLyoJezB4YTEsIDB4MjEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAqLworCXsweGExLCAweDIxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHgyMSwgMHgwMSwgMHg3OCwgMHg3OCwgMHgwMCwgMHgwMCwgMHgxMH0sCisvKioqKioqIChzb21lIGV4Y2hhbmdlcyBpbiB0aGUgd2luIHRyYWNlKSAqKioqKiovCisJezB4YTEsIDB4MjEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LC8qIGR1bW15IGxpbmUgaGlnaHQgKi8KKwl7MHhhMSwgMHgyMSwgMHg5MiwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sLyogZHVtbXkgbGluZSBsb3cgKi8KKwl7MHhhMSwgMHgyMSwgMHgyYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MmIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDAyLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKy8qKioqKiogKHNvbWUgZXhjaGFuZ2VzIGluIHRoZSB3aW4gdHJhY2UpICoqKioqKi8KKy8qKioqKioqKioqc3RhcnRzZW5zb3IgS08gaWYgY2hhbmdlZCAhISoqKiovCisJezB4YTEsIDB4MjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDIxLCAweDkyLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgyYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MmIsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorLyogaGVyZSBtYXkgc3RhcnQgdGhlIGlzb2MgZXhjaGFuZ2VzICovCisJe30KK307CisvKiByZWcweDA0CQlyZWcweDA3CQlyZWcgMHgxMCAqLworLyogZXhwbyAgPSAoQ09NMSAmIDB4MDIpIHwgKEFFQ0hIICYgMHgyZiA8PDEwKSBbIChBRUNoIDw8IDIpICovCisKK3N0YXRpYyBjb25zdCBfX3U4IG92NzY0OF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweEMxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwfSwKKwl7MHhDMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMH0sCisJezB4QzEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDB9LAorCXsweEExLCAweDZFLCAweDNGLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhBMSwgMHg2RSwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QTEsIDB4NkUsIDB4M0UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDZFLCAweDA0LCAweDAyLCAweEIxLCAweDAyLCAweDM5LCAweDEwfSwKKwl7MHhEMSwgMHg2RSwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NkUsIDB4MEMsIDB4MDIsIDB4N0YsIDB4MDEsIDB4RTAsIDB4MTB9LAorCXsweEQxLCAweDZFLCAweDEyLCAweDAzLCAweDAyLCAweDAwLCAweDAzLCAweDEwfSwKKwl7MHhEMSwgMHg2RSwgMHgxNiwgMHg4NSwgMHg0MCwgMHg0QSwgMHg0MCwgMHgxMH0sCisJezB4QzEsIDB4NkUsIDB4MUEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDZFLCAweDFELCAweDA4LCAweDAzLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg2RSwgMHgyMywgMHgwMCwgMHhCMCwgMHgwMCwgMHg5NCwgMHgxMH0sCisJezB4RDEsIDB4NkUsIDB4MjcsIDB4NTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEQxLCAweDZFLCAweDJELCAweDE0LCAweDM1LCAweDYxLCAweDg0LCAweDEwfSwKKwl7MHhEMSwgMHg2RSwgMHgzMSwgMHhBMiwgMHhCRCwgMHhEOCwgMHhGRiwgMHgxMH0sCisJezB4RDEsIDB4NkUsIDB4MzUsIDB4MDYsIDB4MUUsIDB4MTIsIDB4MDIsIDB4MTB9LAorCXsweEQxLCAweDZFLCAweDM5LCAweEFBLCAweDUzLCAweDM3LCAweEQ1LCAweDEwfSwKKwl7MHhBMSwgMHg2RSwgMHgzRCwgMHhGMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NkUsIDB4M0UsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDMsIDB4MTB9LAorCXsweEQxLCAweDZFLCAweDQyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhDMSwgMHg2RSwgMHg0NiwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NkUsIDB4NEIsIDB4MDIsIDB4RUYsIDB4MDgsIDB4Q0QsIDB4MTB9LAorCXsweEQxLCAweDZFLCAweDRGLCAweDAwLCAweEQwLCAweDAwLCAweEEwLCAweDEwfSwKKwl7MHhEMSwgMHg2RSwgMHg1MywgMHgwMSwgMHhBQSwgMHgwMSwgMHg0MCwgMHgxMH0sCisJezB4RDEsIDB4NkUsIDB4NUEsIDB4NTAsIDB4MDQsIDB4MzAsIDB4MDMsIDB4MTB9LAorCXsweEExLCAweDZFLCAweDVFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg2RSwgMHg1RiwgMHgxMCwgMHg0MCwgMHhGRiwgMHgwMCwgMHgxMH0sCisgIC8qCXsweEQxLCAweDZFLCAweDYzLCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhEMSwgMHg2RSwgMHg2NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisgKiBUaGlzIGlzIGN1cnJlbnRseSBzZXR0aW5nIGEKKyAqIGJsdWUgdGludCwgYW5kIHNvbWUgdGhpbmdzIG1vcmUgLCBpIGxlYXZlIGl0IGhlcmUgZm9yIGZ1dHVyZSB0ZXN0IGlmCisgKiBzb21lbmUgaXMgaGF2aW5nIHByb2JsZW1zIHdpdGggY29sb3Igb24gdGhpcyBzZW5zb3IKKwl7MHhEMSwgMHg2RSwgMHg2QiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4RDEsIDB4NkUsIDB4NkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEMxLCAweDZFLCAweDczLCAweDEwLCAweDgwLCAweEVCLCAweDAwLCAweDEwfSwKKwl7MHhBMSwgMHg2RSwgMHgxRSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QTEsIDB4NkUsIDB4MTUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEMxLCAweDZFLCAweDE2LCAweDQwLCAweDQwLCAweDQwLCAweDAwLCAweDEwfSwKKwl7MHhBMSwgMHg2RSwgMHgxRCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QTEsIDB4NkUsIDB4MDYsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEExLCAweDZFLCAweDA3LCAweEI1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhBMSwgMHg2RSwgMHgxOCwgMHg2QiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4QTEsIDB4NkUsIDB4MUQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweEExLCAweDZFLCAweDA2LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhBMSwgMHg2RSwgMHgwNywgMHhCOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sICAqLworCXsweEMxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwfSwKKwl7MHhBMSwgMHg2RSwgMHgwNiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIEJyaWdodC4uLiAqLworCXsweEExLCAweDZFLCAweDA3LCAweDY2LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogQi4uICovCisJezB4QzEsIDB4NkUsIDB4MUEsIDB4MDMsIDB4NjUsIDB4OTAsIDB4MDAsIDB4MTB9LCAvKiBCcmlnaHQvV2l0ZW4uLi4uKi8KKy8qCXsweEMxLCAweDZFLCAweDE2LCAweDQ1LCAweDQwLCAweDYwLCAweDAwLCAweDEwfSwgICogQnJpZ2h0L1dpdGVuZSAqLworCXt9Cit9OworCitzdGF0aWMgY29uc3QgX191OCBxdGFibGU0W10gPSB7CisJMHgwNiwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwNiwgMHgwNiwgMHgwNiwgMHgwOCwgMHgwNiwKKwkweDA2LCAweDA4LCAweDBBLCAweDExLAorCTB4MEEsIDB4MEEsIDB4MDgsIDB4MDgsIDB4MEEsIDB4MTUsIDB4MEYsIDB4MEYsIDB4MEMsIDB4MTEsIDB4MTksIDB4MTUsCisJMHgxOSwgMHgxOSwgMHgxNywgMHgxNSwKKwkweDE3LCAweDE3LCAweDFCLCAweDFELCAweDI1LCAweDIxLCAweDFCLCAweDFELCAweDIzLCAweDFELCAweDE3LCAweDE3LAorCTB4MjEsIDB4MkUsIDB4MjEsIDB4MjMsCisJMHgyNywgMHgyOSwgMHgyQywgMHgyQywgMHgyQywgMHgxOSwgMHgxRiwgMHgzMCwgMHgzMiwgMHgyRSwgMHgyOSwgMHgzMiwKKwkweDI1LCAweDI5LCAweDJDLCAweDI5LAorCTB4MDYsIDB4MDgsIDB4MDgsIDB4MEEsIDB4MDgsIDB4MEEsIDB4MTMsIDB4MEEsIDB4MEEsIDB4MTMsIDB4MjksIDB4MUIsCisJMHgxNywgMHgxQiwgMHgyOSwgMHgyOSwKKwkweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LAorCTB4MjksIDB4MjksIDB4MjksIDB4MjksCisJMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwKKwkweDI5LCAweDI5LCAweDI5LCAweDI5LAorCTB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksCisJMHgyOSwgMHgyOSwgMHgyOSwgMHgyOQorfTsKKworLyogcmVhZCA8bGVuPiBieXRlcyAobGVuIDwgc2l6ZW9mIGdzcGNhX2Rldi0+dXNiX2J1ZikgdG8gZ3NwY2FfZGV2LT51c2JfYnVmICovCitzdGF0aWMgdm9pZCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgX191MTYgdmFsdWUsIGludCBsZW4pCit7CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTAsCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCXZhbHVlLCAwLAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sCisJCQk1MDApOworfQorCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkgIF9fdTE2IHZhbHVlLAorCQkJICBjb25zdCBfX3U4ICpidWZmZXIsCisJCQkgIGludCBsZW4pCit7CisJaWYgKGxlbiA8PSBzaXplb2YgZ3NwY2FfZGV2LT51c2JfYnVmKSB7CisJCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuKTsKKwkJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkJMHgwOCwKKwkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQl2YWx1ZSwgMCwKKwkJCQlnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKKwkJCQk1MDApOworCX0gZWxzZSB7CisJCV9fdTggKnRtcGJ1ZjsKKworCQl0bXBidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCW1lbWNweSh0bXBidWYsIGJ1ZmZlciwgbGVuKTsKKwkJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkJMHgwOCwKKwkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQl2YWx1ZSwgMCwKKwkJCQl0bXBidWYsIGxlbiwKKwkJCQk1MDApOworCQlrZnJlZSh0bXBidWYpOworCX0KK30KKworLyogSTJDIHdyaXRlIDIgYnl0ZXMgKi8KK3N0YXRpYyB2b2lkIGkyY193MihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgIGNvbnN0IF9fdTggKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCBtb2RlWzhdOworCisJLyogaXMgaTJjIHJlYWR5ICovCisJbW9kZVswXSA9IDB4ODEgfCAoMiA8PCA0KTsKKwltb2RlWzFdID0gc2QtPmkyY19iYXNlOworCW1vZGVbMl0gPSBidWZmZXJbMF07CisJbW9kZVszXSA9IGJ1ZmZlclsxXTsKKwltb2RlWzRdID0gMDsKKwltb2RlWzVdID0gMDsKKwltb2RlWzZdID0gMDsKKwltb2RlWzddID0gMHgxMDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIG1vZGUsIDgpOworfQorCisvKiBJMkMgd3JpdGUgOCBieXRlcyAqLworc3RhdGljIHZvaWQgaTJjX3c4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICAgY29uc3QgX191OCAqYnVmZmVyKQoreworCXJlZ193KGdzcGNhX2RldiwgMHgwOCwgYnVmZmVyLCA4KTsKKwltc2xlZXAoMSk7Cit9CisKKy8qIHJlYWQgNSBieXRlcyBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyB2b2lkIGkyY19yNShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTggcmVnKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3U4IG1vZGVbOF07CisKKwltb2RlWzBdID0gMHg4MSB8IDB4MTA7CisJbW9kZVsxXSA9IHNkLT5pMmNfYmFzZTsKKwltb2RlWzJdID0gcmVnOworCW1vZGVbM10gPSAwOworCW1vZGVbNF0gPSAwOworCW1vZGVbNV0gPSAwOworCW1vZGVbNl0gPSAwOworCW1vZGVbN10gPSAweDEwOworCWkyY193OChnc3BjYV9kZXYsIG1vZGUpOworCW1vZGVbMF0gPSAweDgxIHwgKDUgPDwgNCkgfCAweDAyOworCW1vZGVbMl0gPSAwOworCWkyY193OChnc3BjYV9kZXYsIG1vZGUpOworCXJlZ19yKGdzcGNhX2RldiwgMHgwYSwgNSk7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVzZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3U4IHJlZzAyOworCXN0YXRpYyBjb25zdCBfX3U4IGRhdGFzZW5kW10gPSB7IDIsIDAgfTsKKwkvKiByZWcgdmFsMSB2YWwyIHZhbDMgdmFsNCAqLworCisJaTJjX3cyKGdzcGNhX2RldiwgZGF0YXNlbmQpOworLyogc2hvdWxkIHdyaXRlIDB4YTEgMHgxMSAweDAyIDB4MDAgMHgwMCAweDAwIDB4MDAgdGhlIDB4MTAgaXMgYWRkIGJ5IGkyY3cgKi8KKwltc2xlZXAoMTApOworCXJlZzAyID0gMHg2NjsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsICZyZWcwMiwgMSk7CQkvKiBHcGlvIG9uICovCisJbXNsZWVwKDEwKTsKKwlpMmNfcjUoZ3NwY2FfZGV2LCAwKTsJCQkJLyogcmVhZCBzZW5zb3IgaWQgKi8KKwlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdID09IDB4MDIKKwkgICAgJiYgZ3NwY2FfZGV2LT51c2JfYnVmWzFdID09IDB4MDkKKwkgICAgJiYgZ3NwY2FfZGV2LT51c2JfYnVmWzJdID09IDB4MDEKKwkgICAgJiYgZ3NwY2FfZGV2LT51c2JfYnVmWzNdID09IDB4MDAKKwkgICAgJiYgZ3NwY2FfZGV2LT51c2JfYnVmWzRdID09IDB4MDApIHsKKwkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBzbjljMTAyUCBIVjcxMzFSIik7CisJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSFY3MTMxUjsKKwkJcmV0dXJuIFNFTlNPUl9IVjcxMzFSOworCX0KKwlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yICVkICVkICVkIiwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdLCBnc3BjYV9kZXYtPnVzYl9idWZbMV0sCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSk7CisJUERFQlVHKERfUFJPQkUsICJTZW5zb3Igc245YzEwMlAgTm90IGZvdW5kIik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2dwaW8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICBjb25zdCBfX3U4ICpzbjljMXh4KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3U4IGRhdGE7CisJX191OCByZWdGMTsKKwljb25zdCBfX3U4ICpyZWc5YTsKKwlzdGF0aWMgY29uc3QgX191OCByZWc5YV9kZWZbXSA9CisJCXsweDA4LCAweDQwLCAweDIwLCAweDEwLCAweDAwLCAweDA0fTsKKwlzdGF0aWMgY29uc3QgX191OCByZWc5YV9zbjljMTIwW10gPQkJLyogZnJvbSB3aW4gdHJhY2UgKi8KKwkJezB4MDAsIDB4NDAsIDB4MzgsIDB4MzAsIDB4MDAsIDB4MjB9OworCXN0YXRpYyBjb25zdCBfX3U4IHJlZzlhX3NuOWMzMjVbXSA9CisJCXsweDBhLCAweDQwLCAweDM4LCAweDMwLCAweDAwLCAweDIwfTsKKworCisJcmVnRjEgPSAweDAwOworCXJlZ193KGdzcGNhX2RldiwgMHhmMSwgJnJlZ0YxLCAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsICZzbjljMXh4WzBdLCAxKTsgLypmaXhtZTpqZm0gd2FzIFsxXSBlbiB2MSovCisKKwkvKiBjb25maWd1cmUgZ3BpbyAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJnNuOWMxeHhbMV0sIDIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwOCwgJnNuOWMxeHhbOF0sIDIpOworCXJlZ193KGdzcGNhX2RldiwgMHgxNywgJnNuOWMxeHhbMHgxN10sIDUpOwkvKiBqZm0gd2FzIDMgKi8KKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9TTjlDMzI1OgorCQlyZWc5YSA9IHJlZzlhX3NuOWMzMjU7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMjA6CisJCXJlZzlhID0gcmVnOWFfc245YzEyMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnOWEgPSByZWc5YV9kZWY7CisJCWJyZWFrOworCX0KKwlyZWdfdyhnc3BjYV9kZXYsIDB4OWEsIHJlZzlhLCA2KTsKKworCWRhdGEgPSAweDYwOwkJCQkvKmZpeG1lOmpmbSA2MCAwMCAwMCAoMykgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZDQsICZkYXRhLCAxKTsKKworCXJlZ193KGdzcGNhX2RldiwgMHgwMywgJnNuOWMxeHhbM10sIDB4MGYpOworCisJc3dpdGNoIChzZC0+YnJpZGdlKSB7CisJY2FzZSBCUklER0VfU045QzEyMDoJCQkvKiBmcm9tIHdpbiB0cmFjZSAqLworCQlkYXRhID0gMHg2MTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAmZGF0YSwgMSk7CisJCWRhdGEgPSAweDIwOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MTcsICZkYXRhLCAxKTsKKwkJZGF0YSA9IDB4NjA7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJmRhdGEsIDEpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMzI1OgorCQlkYXRhID0gMHg0MzsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAmZGF0YSwgMSk7CisJCWRhdGEgPSAweGFlOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MTcsICZkYXRhLCAxKTsKKwkJZGF0YSA9IDB4NDI7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJmRhdGEsIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhID0gMHg0MzsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAmZGF0YSwgMSk7CisJCWRhdGEgPSAweDYxOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MTcsICZkYXRhLCAxKTsKKwkJZGF0YSA9IDB4NDI7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJmRhdGEsIDEpOworCX0KKworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9IVjcxMzFSKSB7CisJCWlmIChwcm9iZXNlbnNvcihnc3BjYV9kZXYpIDwgMCkKKwkJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaHY3MTMxUl9Jbml0U2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgaSA9IDA7CisJc3RhdGljIGNvbnN0IF9fdTggU2V0U2Vuc29yQ2xrW10gPQkvKiAweDA4IE1jbGsgKi8KKwkJeyAweGExLCAweDExLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07CisKKwl3aGlsZSAoaHY3MTMxcl9zZW5zb3JfaW5pdFtpXVswXSkgeworCQlpMmNfdzgoZ3NwY2FfZGV2LCBodjcxMzFyX3NlbnNvcl9pbml0W2ldKTsKKwkJaSsrOworCX0KKwlpMmNfdzgoZ3NwY2FfZGV2LCBTZXRTZW5zb3JDbGspOworfQorCitzdGF0aWMgdm9pZCBtaTAzNjBfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKG1pMDM2MF9zZW5zb3JfaW5pdFtpXVswXSkgeworCQlpMmNfdzgoZ3NwY2FfZGV2LCBtaTAzNjBfc2Vuc29yX2luaXRbaV0pOworCQlpKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBtbzQwMDBfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKG1vNDAwMF9zZW5zb3JfaW5pdFtpXVswXSkgeworCQlpMmNfdzgoZ3NwY2FfZGV2LCBtbzQwMDBfc2Vuc29yX2luaXRbaV0pOworCQlpKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBvdjc2NDhfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKG92NzY0OF9zZW5zb3JfaW5pdFtpXVswXSkgeworCQlpMmNfdzgoZ3NwY2FfZGV2LCBvdjc2NDhfc2Vuc29yX2luaXRbaV0pOworCQlpKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBvdjc2NjBfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKG92NzY2MF9zZW5zb3JfaW5pdFtpXVswXSkgeworCQlpMmNfdzgoZ3NwY2FfZGV2LCBvdjc2NjBfc2Vuc29yX2luaXRbaV0pOworCQlpKys7CisJfQorfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCBjYW0gKmNhbTsKKwlfX3UxNiB2ZW5kb3I7CisJX191MTYgcHJvZHVjdDsKKworCXZlbmRvciA9IGlkLT5pZFZlbmRvcjsKKwlwcm9kdWN0ID0gaWQtPmlkUHJvZHVjdDsKKwlzZC0+c2Vuc29yID0gLTE7CisJc3dpdGNoICh2ZW5kb3IpIHsKKwljYXNlIDB4MDQ1ODoJCQkJLyogR2VuaXVzICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHg3MDI1OiAqLworCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTIwOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9NSTAzNjA7CisJCQlzZC0+aTJjX2Jhc2UgPSAweDVkOworLyoJCQlicmVhazsKKwkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDQ1ZToKKy8qCQlzd2l0Y2ggKHByb2R1Y3QpIHsKKwkJY2FzZSAweDAwZjU6CisJCWNhc2UgMHgwMGY3OiAqLworCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTA1OworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2NjA7CisJCQlzZC0+aTJjX2Jhc2UgPSAweDIxOworLyoJCQlicmVhazsKKwkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDQ3MToJCQkJLyogUGhpbGlwcyAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeworCQljYXNlIDB4MDMyNzoKKwkJY2FzZSAweDAzMjg6CisJCWNhc2UgMHgwMzMwOiAqLworCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTA1OworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9NSTAzNjA7CisJCQlzZC0+aTJjX2Jhc2UgPSAweDVkOworLyoJCQlicmVhazsKKwkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MGM0NToJCQkJLyogU29uaXggKi8KKwkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHg2MDQwOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTAyUDsKKy8qCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9NSTAzNjA7CSAqIGZyb20gQlc2MDAuaW5mICovCisvKmZpeG1lOiBNSTAzNjAgYmFzZT01ZCA/ICovCisJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMVI7CS8qIGdzcGNhdjEgdmFsdWUgKi8KKwkJCXNkLT5pMmNfYmFzZSA9IDB4MTE7CisJCQlicmVhazsKKy8qCQljYXNlIDB4NjA3YToJCQkJKiBmcm9tIEJXNjAwLmluZgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTAyUDsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1Y3NjQ4OworCQkJc2QtPmkyY19iYXNlID0gMHg/PzsKKwkJCWJyZWFrOyAqLworCQljYXNlIDB4NjA3YzoKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU045QzEwMlA7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMVI7CisJCQlzZC0+aTJjX2Jhc2UgPSAweDExOworCQkJYnJlYWs7CisvKgkJY2FzZSAweDYwN2U6CQkJCSogZnJvbSBCVzYwMC5pbmYKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU045QzEwMlA7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYzMDsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4Pz87CisJCQlicmVhazsgKi8KKwkJY2FzZSAweDYwYzA6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NOOUMxMDU7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX01JMDM2MDsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4NWQ7CisJCQlicmVhazsKKy8qCQljYXNlIDB4NjBjODoJCQkJKiBmcm9tIEJXNjAwLmluZgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTA1OworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PTTY4MDE7CisJCQlzZC0+aTJjX2Jhc2UgPSAweD8/OworCQkJYnJlYWs7ICovCisvKgkJY2FzZSAweDYwY2M6CQkJCSogZnJvbSBCVzYwMC5pbmYKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU045QzEwNTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSFY3MTMxR1A7CisJCQlzZC0+aTJjX2Jhc2UgPSAweD8/OworCQkJYnJlYWs7ICovCisJCWNhc2UgMHg2MGVjOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTA1OworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9NTzQwMDA7CisJCQlzZC0+aTJjX2Jhc2UgPSAweDIxOworCQkJYnJlYWs7CisvKgkJY2FzZSAweDYwZWY6CQkJCSogZnJvbSBCVzYwMC5pbmYKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU045QzEwNTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSUNNMTA1QzsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4Pz87CisJCQlicmVhazsgKi8KKy8qCQljYXNlIDB4NjBmYToJCQkJKiBmcm9tIEJXNjAwLmluZgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTA1OworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2NDg7CisJCQlzZC0+aTJjX2Jhc2UgPSAweD8/OworCQkJYnJlYWs7ICovCisJCWNhc2UgMHg2MGZiOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTA1OworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2NjA7CisJCQlzZC0+aTJjX2Jhc2UgPSAweDIxOworCQkJYnJlYWs7CisJCWNhc2UgMHg2MGZjOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTA1OworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9IVjcxMzFSOworCQkJc2QtPmkyY19iYXNlID0gMHgxMTsKKwkJCWJyZWFrOworLyoJCWNhc2UgMHg2MGZlOgkJCQkqIGZyb20gQlc2MDAuaW5mCisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NOOUMxMDU7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYzMDsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4Pz87CisJCQlicmVhazsgKi8KKy8qCQljYXNlIDB4NjEwODoJCQkJKiBmcm9tIEJXNjAwLmluZgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTIwOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PTTY4MDE7CisJCQlzZC0+aTJjX2Jhc2UgPSAweD8/OworCQkJYnJlYWs7ICovCisvKgkJY2FzZSAweDYxMjI6CQkJCSogZnJvbSBCVzYwMC5pbmYKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU045QzExMDsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSUNNMTA1QzsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4Pz87CisJCQlicmVhazsgKi8KKwkJY2FzZSAweDYxMmE6CisvKgkJCXNkLT5icmlkZ2UgPSBCUklER0VfU045QzExMDsJICogaW4gQlc2MDAuaW5mICovCisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NOOUMzMjU7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzY0ODsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4MjE7CisvKmZpeG1lOiBzZW5zb3JfaW5pdCBoYXMgYmFzZSA9IDAwIGV0IDZlISovCisJCQlicmVhazsKKy8qCQljYXNlIDB4NjEyMzoJCQkJKiBmcm9tIEJXNjAwLmluZgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTEwOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9TYW55b0NDRDsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4Pz87CisJCQlicmVhazsgKi8KKwkJY2FzZSAweDYxMmM6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NOOUMxMTA7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX01PNDAwMDsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4MjE7CisJCQlicmVhazsKKy8qCQljYXNlIDB4NjEyZToJCQkJKiBmcm9tIEJXNjAwLmluZgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTEwOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2MzA7CisJCQlzZC0+aTJjX2Jhc2UgPSAweD8/OworCQkJYnJlYWs7ICovCisvKgkJY2FzZSAweDYxMmY6CQkJCSogZnJvbSBCVzYwMC5pbmYKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU045QzExMDsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSUNNMTA1QzsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4Pz87CisJCQlicmVhazsgKi8KKwkJY2FzZSAweDYxMzA6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NOOUMxMjA7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX01JMDM2MDsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4NWQ7CisJCQlicmVhazsKKwkJY2FzZSAweDYxMzg6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NOOUMxMjA7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX01PNDAwMDsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4MjE7CisJCQlicmVhazsKKy8qCQljYXNlIDB4NjEzYToJCQkJKiBmcm9tIEJXNjAwLmluZgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTIwOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2NDg7CisJCQlzZC0+aTJjX2Jhc2UgPSAweD8/OworCQkJYnJlYWs7ICovCisJCWNhc2UgMHg2MTNiOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTIwOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2NjA7CisJCQlzZC0+aTJjX2Jhc2UgPSAweDIxOworCQkJYnJlYWs7CisJCWNhc2UgMHg2MTNjOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TTjlDMTIwOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9IVjcxMzFSOworCQkJc2QtPmkyY19iYXNlID0gMHgxMTsKKwkJCWJyZWFrOworLyoJCWNhc2UgMHg2MTNlOgkJCQkqIGZyb20gQlc2MDAuaW5mCisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NOOUMxMjA7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYzMDsKKwkJCXNkLT5pMmNfYmFzZSA9IDB4Pz87CisJCQlicmVhazsgKi8KKwkJfQorCQlicmVhazsKKwl9CisJaWYgKHNkLT5zZW5zb3IgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIkludmFsaWQgdmVuZG9yL3Byb2R1Y3QgJTA0eDolMDR4IiwKKwkJCXZlbmRvciwgcHJvZHVjdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwljYW0tPmRldl9uYW1lID0gKGNoYXIgKikgaWQtPmRyaXZlcl9pbmZvOworCWNhbS0+ZXBhZGRyID0gMHgwMTsKKwljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKworCXNkLT5xaW5kZXggPSA0OwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKKwlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IG9wZW4gdGltZSAqLworc3RhdGljIGludCBzZF9vcGVuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisvKgljb25zdCBfX3U4ICpzbjljMXh4OyAqLworCV9fdTggcmVnRjE7CisJX191OCByZWdHcGlvW10gPSB7IDB4MjksIDB4NzQgfTsKKworCS8qIHNldHVwIGEgc2VsZWN0b3IgYnkgYnJpZGdlICovCisJcmVnRjEgPSAweDAxOworCXJlZ193KGdzcGNhX2RldiwgMHhmMSwgJnJlZ0YxLCAxKTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDAsIDEpOwkJLyogLT4gcmVnRjEgPSAweDAwICovCisJcmVnRjEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJcmVnX3coZ3NwY2FfZGV2LCAweGYxLCAmcmVnRjEsIDEpOworCXJlZ19yKGdzcGNhX2RldiwgMHgwMCwgMSk7CisJcmVnRjEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJc3dpdGNoIChzZC0+YnJpZGdlKSB7CisJY2FzZSBCUklER0VfU045QzEwMlA6CisJCWlmIChyZWdGMSAhPSAweDExKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgJnJlZ0dwaW9bMV0sIDEpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMTA1OgorCQlpZiAocmVnRjEgIT0gMHgxMSkKKwkJCXJldHVybiAtRU5PREVWOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIHJlZ0dwaW8sIDIpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMTEwOgorCQlpZiAocmVnRjEgIT0gMHgxMikKKwkJCXJldHVybiAtRU5PREVWOworCQlyZWdHcGlvWzFdID0gMHg2MjsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCAmcmVnR3Bpb1sxXSwgMSk7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMjA6CisJCWlmIChyZWdGMSAhPSAweDEyKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXJlZ0dwaW9bMV0gPSAweDcwOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIHJlZ0dwaW8sIDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBCUklER0VfU045QzMyNTogKi8KKwkJaWYgKHJlZ0YxICE9IDB4MTIpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmVnR3Bpb1sxXSA9IDB4NjI7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgJnJlZ0dwaW9bMV0sIDEpOworCQlicmVhazsKKwl9CisKKwlyZWdGMSA9IDB4MDE7CisJcmVnX3coZ3NwY2FfZGV2LCAweGYxLCAmcmVnRjEsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCXVuc2lnbmVkIGludCBleHBvKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdGF0aWMgY29uc3QgX191OCBkb2l0W10gPQkJLyogdXBkYXRlIHNlbnNvciAqLworCQl7IDB4YjEsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MTAgfTsKKwlzdGF0aWMgY29uc3QgX191OCBzZW5zb3Jnb1tdID0JCS8qIHNlbnNvciBvbiAqLworCQl7IDB4YjEsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTAgfTsKKwlzdGF0aWMgY29uc3QgX191OCBnYWluTW9bXSA9CisJCXsgMHhhMSwgMHgyMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCB9OworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjogeworCQlfX3U4IEV4cG9kb2l0W10gPQorCQkJeyAweGMxLCAweDExLCAweDI1LCAweDA3LCAweDI3LCAweGMwLCAweDAwLCAweDE2IH07CisKKwkJRXhwb2RvaXRbM10gPSBleHBvID4+IDE2OworCQlFeHBvZG9pdFs0XSA9IGV4cG8gPj4gODsKKwkJRXhwb2RvaXRbNV0gPSBleHBvOworCQlpMmNfdzgoZ3NwY2FfZGV2LCBFeHBvZG9pdCk7CisJCWJyZWFrOworCSAgICB9CisJY2FzZSBTRU5TT1JfTUkwMzYwOiB7CisJCV9fdTggZXhwb01pW10gPQkgLyogZXhwb3N1cmUgMHgwNjM1IC0+IDQgZnAvcyAweDEwICovCisJCQl7IDB4YjEsIDB4NWQsIDB4MDksIDB4MDYsIDB4MzUsIDB4MDAsIDB4MDAsIDB4MTYgfTsKKworCQlpZiAoZXhwbyA+IDB4MDYzNSkKKwkJCWV4cG8gPSAweDA2MzU7CisJCWVsc2UgaWYgKGV4cG8gPCAweDAwMDEpCisJCQlleHBvID0gMHgwMDAxOworCQlleHBvTWlbM10gPSBleHBvID4+IDg7CisJCWV4cG9NaVs0XSA9IGV4cG87CisJCWkyY193OChnc3BjYV9kZXYsIGV4cG9NaSk7CisJCWkyY193OChnc3BjYV9kZXYsIGRvaXQpOworCQlpMmNfdzgoZ3NwY2FfZGV2LCBzZW5zb3Jnbyk7CisJCWJyZWFrOworCSAgICB9CisJY2FzZSBTRU5TT1JfTU80MDAwOiB7CisJCV9fdTggZXhwb01vZltdID0KKwkJCXsgMHhhMSwgMHgyMSwgMHgwZiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OworCQlfX3U4IGV4cG9NbzEwW10gPQorCQkJeyAweGExLCAweDIxLCAweDEwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07CisKKwkJaWYgKGV4cG8gPiAweDFmZmYpCisJCQlleHBvID0gMHgxZmZmOworCQllbHNlIGlmIChleHBvIDwgMHgwMDAxKQorCQkJZXhwbyA9IDB4MDAwMTsKKwkJZXhwb01vZlszXSA9IChleHBvICYgMHgwM2ZjKSA+PiAyOworCQlpMmNfdzgoZ3NwY2FfZGV2LCBleHBvTW9mKTsKKwkJZXhwb01vMTBbM10gPSAoKGV4cG8gJiAweDFjMDApID4+IDEwKQorCQkJCXwgKChleHBvICYgMHgwMDAzKSA8PCA0KTsKKwkJaTJjX3c4KGdzcGNhX2RldiwgZXhwb01vMTApOworCQlpMmNfdzgoZ3NwY2FfZGV2LCBnYWluTW8pOworCQlQREVCVUcoRF9DT05GLCAic2V0IGV4cG9zdXJlICVkIiwKKwkJCSgoZXhwb01vMTBbM10gJiAweDA3KSA8PCAxMCkKKwkJCXwgKGV4cG9Nb2ZbM10gPDwgMikKKwkJCXwgKChleHBvTW8xMFszXSAmIDB4MzApID4+IDQpKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJcmV0dXJuIGV4cG87Cit9CisKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1bnNpZ25lZCBpbnQgZXhwbzsKKwlfX3U4IGsyOworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKKwkJZXhwbyA9IHNkLT5icmlnaHRuZXNzIDw8IDQ7CisJCWlmIChleHBvID4gMHgwMDJkYzZjMCkKKwkJCWV4cG8gPSAweDAwMmRjNmMwOworCQllbHNlIGlmIChleHBvIDwgMHgwMmEwKQorCQkJZXhwbyA9IDB4MDJhMDsKKwkJc2QtPmV4cG9zdXJlID0gc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2LCBleHBvKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTUkwMzYwOgorCQlleHBvID0gc2QtPmJyaWdodG5lc3MgPj4gNDsKKwkJc2QtPmV4cG9zdXJlID0gc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2LCBleHBvKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTU80MDAwOgorCQlleHBvID0gc2QtPmJyaWdodG5lc3MgPj4gNDsKKwkJc2QtPmV4cG9zdXJlID0gc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2LCBleHBvKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjYwOgorCQlyZXR1cm47CQkJCS8qamZtPz8qLworCX0KKworCWsyID0gc2QtPmJyaWdodG5lc3MgPj4gMTA7CisJcmVnX3coZ3NwY2FfZGV2LCAweDk2LCAmazIsIDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggazI7CisJX191OCBjb250cmFzdFtdID0geyAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDA3LCAweDAwIH07CisKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjYwKQorCQlyZXR1cm47CQkJCS8qamZtPz8qLworCWsyID0gc2QtPmNvbnRyYXN0OworCWNvbnRyYXN0WzJdID0gazI7CisJY29udHJhc3RbMF0gPSAoazIgKyAxKSA+PiAxOworCWNvbnRyYXN0WzRdID0gKGsyICsgMSkgLyA1OworCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgY29udHJhc3QsIDYpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3U4IGRhdGE7CisJaW50IGNvbG91cjsKKworCWNvbG91ciA9IHNkLT5jb2xvcnMgLSAxMjg7CisJaWYgKGNvbG91ciA+IDApCisJCWRhdGEgPSAoY29sb3VyICsgMzIpICYgMHg3ZjsJLyogYmx1ZSAqLworCWVsc2UKKwkJZGF0YSA9ICgtY29sb3VyICsgMzIpICYgMHg3ZjsJLyogcmVkICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDA1LCAmZGF0YSwgMSk7Cit9CisKKy8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IGk7CisJX191OCBkYXRhOworCV9fdTggcmVnMTsKKwlfX3U4IHJlZzE3OworCWNvbnN0IF9fdTggKnNuOWMxeHg7CisJaW50IG1vZGU7CisJc3RhdGljIGNvbnN0IF9fdTggREMyOVtdID0geyAweDZhLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDNjIH07CisJc3RhdGljIGNvbnN0IF9fdTggQzBbXSA9IHsgMHgyZCwgMHgyZCwgMHgzYSwgMHgwNSwgMHgwNCwgMHgzZiB9OworCXN0YXRpYyBjb25zdCBfX3U4IENBW10gPSB7IDB4MjgsIDB4ZDgsIDB4MTQsIDB4ZWMgfTsKKwlzdGF0aWMgY29uc3QgX191OCBDQV9zbjljMTIwW10gPQorCQkJCSB7IDB4MTQsIDB4ZWMsIDB4MGEsIDB4ZjYgfTsJLyogU045QzEyMCAqLworCXN0YXRpYyBjb25zdCBfX3U4IENFW10gPSB7IDB4MzIsIDB4ZGQsIDB4MmQsIDB4ZGQgfTsJLyogTUkwMzYwICovCisJc3RhdGljIGNvbnN0IF9fdTggQ0Vfc245YzMyNVtdID0KKwkJCXsgMHgzMiwgMHhkZCwgMHgzMiwgMHhkZCB9OwkvKiBPVjc2NDggLSBTTjlDMzI1ICovCisKKwlzbjljMXh4ID0gc25fdGJbKGludCkgc2QtPnNlbnNvcl07CisJY29uZmlndXJlX2dwaW8oZ3NwY2FfZGV2LCBzbjljMXh4KTsKKworLypmaXhtZTpqZm0gdGhpcyBzZXF1ZW5jZSBzaG91bGQgYXBwZWFyIGF0IGVuZCBvZiBzZF9zdGFydCAqLworLyogd2l0aAorCWRhdGEgPSAweDQ0OworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJmRhdGEsIDEpOyAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxNSwgJnNuOWMxeHhbMHgxNV0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgxNiwgJnNuOWMxeHhbMHgxNl0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgxMiwgJnNuOWMxeHhbMHgxMl0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgxMywgJnNuOWMxeHhbMHgxM10sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgxOCwgJnNuOWMxeHhbMHgxOF0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhkMiwgJkRDMjlbMF0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhkMywgJkRDMjlbMV0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhjNiwgJkRDMjlbMl0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhjNywgJkRDMjlbM10sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhjOCwgJkRDMjlbNF0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhjOSwgJkRDMjlbNV0sIDEpOworLypmaXhtZTpqZm0gZW5kIG9mIGVuZGluZyBzZXF1ZW5jZSAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxOCwgJnNuOWMxeHhbMHgxOF0sIDEpOworCXN3aXRjaCAoc2QtPmJyaWRnZSkgeworCWNhc2UgQlJJREdFX1NOOUMzMjU6CisJCWRhdGEgPSAweGFlOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMTIwOgorCQlkYXRhID0gMHhhMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGF0YSA9IDB4NjA7CisJCWJyZWFrOworCX0KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTcsICZkYXRhLCAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDUsICZzbjljMXh4WzVdLCAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDcsICZzbjljMXh4WzddLCAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDYsICZzbjljMXh4WzZdLCAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTQsICZzbjljMXh4WzB4MTRdLCAxKTsKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9TTjlDMzI1OgorCQlyZWdfdyhnc3BjYV9kZXYsIDB4MjAsIHJlZ3NuMjBfc245YzMyNSwKKwkJCQlzaXplb2YgcmVnc24yMF9zbjljMzI1KTsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODRfc245YzMyNSwKKwkJCQkJc2l6ZW9mIHJlZzg0X3NuOWMzMjUpOworCQlkYXRhID0gMHgwYTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDlhLCAmZGF0YSwgMSk7CisJCWRhdGEgPSAweDYwOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4OTksICZkYXRhLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU045QzEyMDoKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDIwLCByZWdzbjIwX3NuOWMxMjAsCisJCQkJc2l6ZW9mIHJlZ3NuMjBfc245YzEyMCk7CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0X3NuOWMxMjBfMSwKKwkJCQkJc2l6ZW9mIHJlZzg0X3NuOWMxMjBfMSk7CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0X3NuOWMxMjBfMiwKKwkJCQkJc2l6ZW9mIHJlZzg0X3NuOWMxMjBfMik7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODRfc245YzEyMF8zLAorCQkJCXNpemVvZiByZWc4NF9zbjljMTIwXzMpOworCQlkYXRhID0gMHgwNTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDlhLCAmZGF0YSwgMSk7CisJCWRhdGEgPSAweDViOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4OTksICZkYXRhLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDIwLCByZWdzbjIwLCBzaXplb2YgcmVnc24yMCk7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0LCBzaXplb2YgcmVnODQpOworCQlkYXRhID0gMHgwODsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDlhLCAmZGF0YSwgMSk7CisJCWRhdGEgPSAweDU5OworCQlyZWdfdyhnc3BjYV9kZXYsIDB4OTksICZkYXRhLCAxKTsKKwkJYnJlYWs7CisJfQorCisJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCXJlZzEgPSAweDAyOworCXJlZzE3ID0gMHg2MTsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgorCQlodjcxMzFSX0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKKwkJaWYgKG1vZGUpCisJCQlyZWcxID0gMHg0NjsJLyogMzIwIGNsayA0OE1oeiAqLworCQllbHNlCisJCQlyZWcxID0gMHgwNjsJLyogNjQwIGNsayAyNE16ICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMDM2MDoKKwkJbWkwMzYwX0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKKwkJaWYgKG1vZGUpCisJCQlyZWcxID0gMHg0NjsJLyogMzIwIGNsayA0OE1oeiAqLworCQllbHNlCisJCQlyZWcxID0gMHgwNjsJLyogNjQwIGNsayAyNE16ICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX01PNDAwMDoKKwkJbW80MDAwX0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKKwkJaWYgKG1vZGUpIHsKKy8qCQkJcmVnMSA9IDB4NDY7CSAqIDMyMCBjbGsgNDhNaHogNjBmcC9zICovCisJCQlyZWcxID0gMHgwNjsJLyogY2xrIDI0TXogKi8KKwkJfSBlbHNlIHsKKwkJCXJlZzE3ID0gMHgyMjsJLyogNjQwIE1DS1NJWkUgKi8KKwkJCXJlZzEgPSAweDA2OwkvKiA2NDAgY2xrIDI0TXogKi8KKwkJfQorCQlicmVhazsKKwljYXNlIFNFTlNPUl9PVjc2NDg6CisJCXJlZzE3ID0gMHhhMjsKKwkJcmVnMSA9IDB4NDQ7CisJCW92NzY0OF9Jbml0U2Vuc29yKGdzcGNhX2Rldik7CisvKgkJaWYgKG1vZGUpCisJCQk7CQkgKiAzMjB4Mi4uLgorCQllbHNlCisJCQk7CQkgKiA2NDB4Li4uICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjc2NjA6ICovCisJCW92NzY2MF9Jbml0U2Vuc29yKGdzcGNhX2Rldik7CisJCWlmIChtb2RlKSB7CisvKgkJCXJlZzE3ID0gMHgyMTsJICogMzIwICovCisvKgkJCXJlZzEgPSAweDQ0OyAqLworCQkJcmVnMSA9IDB4NDY7CisJCX0gZWxzZSB7CisJCQlyZWcxNyA9IDB4YTI7CS8qIDY0MCAqLworCQkJcmVnMSA9IDB4NDA7CisJCX0KKwkJYnJlYWs7CisJfQorCXJlZ193KGdzcGNhX2RldiwgMHhjMCwgQzAsIDYpOworCXN3aXRjaCAoc2QtPmJyaWRnZSkgeworCWNhc2UgQlJJREdFX1NOOUMxMjA6CQkJLypqZm0gPz8gKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQV9zbjljMTIwLCA0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQSwgNCk7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9TTjlDMTIwOgkJCS8qamZtID8/ICovCisJY2FzZSBCUklER0VfU045QzMyNToKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGNlLCBDRV9zbjljMzI1LCA0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGNlLCBDRSwgNCk7CisJCQkJCS8qID8/IHsweDFlLCAweGRkLCAweDJkLCAweGU3fSAqLworCQlicmVhazsKKwl9CisKKwkvKiBoZXJlIGNoYW5nZSBzaXplIG1vZGUgMCAtPiBWR0E7IDEgLT4gQ0lGICovCisJZGF0YSA9IDB4NDAgfCBzbjljMXh4WzB4MThdIHwgKG1vZGUgPDwgNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDE4LCAmZGF0YSwgMSk7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTAwLCBxdGFibGU0LCAweDQwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTQwLCBxdGFibGU0ICsgMHg0MCwgMHg0MCk7CisKKwlkYXRhID0gc245YzF4eFsweDE4XSB8IChtb2RlIDw8IDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgxOCwgJmRhdGEsIDEpOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAmcmVnMTcsIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJnJlZzEsIDEpOworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0YXRpYyBjb25zdCBfX3U4IHN0b3BodjcxMzFbXSA9CisJCXsgMHhhMSwgMHgxMSwgMHgwMiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OworCXN0YXRpYyBjb25zdCBfX3U4IHN0b3BtaTAzNjBbXSA9CisJCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OworCV9fdTggcmVnRjE7CisJX191OCBkYXRhOworCWNvbnN0IF9fdTggKnNuOWMxeHg7CisKKwlkYXRhID0gMHgwYjsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgorCQlpMmNfdzgoZ3NwY2FfZGV2LCBzdG9waHY3MTMxKTsKKwkJZGF0YSA9IDB4MmI7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMDM2MDoKKwkJaTJjX3c4KGdzcGNhX2Rldiwgc3RvcG1pMDM2MCk7CisJCWRhdGEgPSAweDI5OworCQlicmVhazsKKwljYXNlIFNFTlNPUl9NTzQwMDA6CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzY0ODoKKwkJZGF0YSA9IDB4Mjk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjc2NjA6ICovCisJCWJyZWFrOworCX0KKwlzbjljMXh4ID0gc25fdGJbKGludCkgc2QtPnNlbnNvcl07CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAmc245YzF4eFsxXSwgMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAmc245YzF4eFsweDE3XSwgMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAmc245YzF4eFsxXSwgMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAmZGF0YSwgMSk7CisJcmVnRjEgPSAweDAxOworCXJlZ193KGdzcGNhX2RldiwgMHhmMSwgJnJlZ0YxLCAxKTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCBzZF9jbG9zZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJLyogVGhhbmtzIFMuLCB3aXRob3V0IHlvdXIgYWR2aWNlLCBhdXRvYnJpZ2h0IHNob3VsZCBub3Qgd29yayA6KSAqLworCWludCBkZWx0YTsKKwlpbnQgZXhwb3RpbWVzID0gMDsKKwlfX3U4IGx1bWFfbWVhbiA9IDEzMDsKKwlfX3U4IGx1bWFfZGVsdGEgPSAyMDsKKworCWRlbHRhID0gc2QtPmF2Z19sdW07CisJaWYgKGRlbHRhIDwgbHVtYV9tZWFuIC0gbHVtYV9kZWx0YSB8fAorCSAgICBkZWx0YSA+IGx1bWFfbWVhbiArIGx1bWFfZGVsdGEpIHsKKwkJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJCWNhc2UgU0VOU09SX0hWNzEzMVI6CisJCQlleHBvdGltZXMgPSBzZC0+ZXhwb3N1cmUgPj4gODsKKwkJCWV4cG90aW1lcyArPSAobHVtYV9tZWFuIC0gZGVsdGEpID4+IDQ7CisJCQlpZiAoZXhwb3RpbWVzIDwgMCkKKwkJCQlleHBvdGltZXMgPSAwOworCQkJc2QtPmV4cG9zdXJlID0gc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2LAorCQkJCQkodW5zaWduZWQgaW50KSAoZXhwb3RpbWVzIDw8IDgpKTsKKwkJCWJyZWFrOworCQljYXNlIFNFTlNPUl9NTzQwMDA6CisJCWNhc2UgU0VOU09SX01JMDM2MDoKKwkJCWV4cG90aW1lcyA9IHNkLT5leHBvc3VyZTsKKwkJCWV4cG90aW1lcyArPSAobHVtYV9tZWFuIC0gZGVsdGEpID4+IDY7CisJCQlpZiAoZXhwb3RpbWVzIDwgMCkKKwkJCQlleHBvdGltZXMgPSAwOworCQkJc2QtPmV4cG9zdXJlID0gc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2LAorCQkJCQkJICAgKHVuc2lnbmVkIGludCkgZXhwb3RpbWVzKTsKKwkJCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLworCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgc29mLCBhdmdfbHVtOworCisJc29mID0gbGVuIC0gNjQ7CisJaWYgKHNvZiA+PSAwICYmIGRhdGFbc29mXSA9PSAweGZmICYmIGRhdGFbc29mICsgMV0gPT0gMHhkOSkgeworCisJCS8qIGVuZCBvZiBmcmFtZSAqLworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQlmcmFtZSwgZGF0YSwgc29mICsgMik7CisJCWlmIChzZC0+YWdfY250IDwgMCkKKwkJCXJldHVybjsKKwkJaWYgKC0tc2QtPmFnX2NudCA+PSAwKQorCQkJcmV0dXJuOworCQlzZC0+YWdfY250ID0gQUdfQ05UX1NUQVJUOworLyogdzEgdzIgdzMgKi8KKy8qIHc0IHc1IHc2ICovCisvKiB3NyB3OCAqLworLyogdzQgKi8KKwkJYXZnX2x1bSA9ICgoZGF0YVtzb2YgKyAyOV0gPDwgOCkgfCBkYXRhW3NvZiArIDMwXSkgPj4gNjsKKy8qIHc2ICovCisJCWF2Z19sdW0gKz0gKChkYXRhW3NvZiArIDMzXSA8PCA4KSB8IGRhdGFbc29mICsgMzRdKSA+PiA2OworLyogdzIgKi8KKwkJYXZnX2x1bSArPSAoKGRhdGFbc29mICsgMjVdIDw8IDgpIHwgZGF0YVtzb2YgKyAyNl0pID4+IDY7CisvKiB3OCAqLworCQlhdmdfbHVtICs9ICgoZGF0YVtzb2YgKyAzN10gPDwgOCkgfCBkYXRhW3NvZiArIDM4XSkgPj4gNjsKKy8qIHc1ICovCisJCWF2Z19sdW0gKz0gKChkYXRhW3NvZiArIDMxXSA8PCA4KSB8IGRhdGFbc29mICsgMzJdKSA+PiA0OworCQlhdmdfbHVtID4+PSA0OworCQlzZC0+YXZnX2x1bSA9IGF2Z19sdW07CisJCVBERUJVRyhEX1BBQ0ssICJtZWFuIGx1bSAlZCIsIGF2Z19sdW0pOworCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOworCQlyZXR1cm47CisJfQorCWlmIChnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPT0gTEFTVF9QQUNLRVQpIHsKKworCQkvKiBwdXQgdGhlIEpQRUcgNDIyIGhlYWRlciAqLworCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwgc2QtPnFpbmRleCwgMHgyMSk7CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3U4IGhleHBvLCBtZXhwbywgbGV4cG87CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgorCQkvKiByZWFkIHNlbnNvciBleHBvc3VyZSAqLworCQlpMmNfcjUoZ3NwY2FfZGV2LCAweDI1KTsKKwkJcmV0dXJuIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gPDwgMTYpCisJCQl8IChnc3BjYV9kZXYtPnVzYl9idWZbMV0gPDwgOCkKKwkJCXwgZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCWNhc2UgU0VOU09SX01JMDM2MDoKKwkJLyogcmVhZCBzZW5zb3IgZXhwb3N1cmUgKi8KKwkJaTJjX3I1KGdzcGNhX2RldiwgMHgwOSk7CisJCXJldHVybiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdIDw8IDgpCisJCQl8IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwljYXNlIFNFTlNPUl9NTzQwMDA6CisJCWkyY19yNShnc3BjYV9kZXYsIDB4MGUpOworCQloZXhwbyA9IDA7CQkvKiBnc3BjYV9kZXYtPnVzYl9idWZbMV0gJiAweDA3OyAqLworCQltZXhwbyA9IDB4NDA7CQkvKiBnc3BjYV9kZXYtPnVzYl9idWZbMl0gJiAweGZmOyAqLworCQlsZXhwbyA9IChnc3BjYV9kZXYtPnVzYl9idWZbMV0gJiAweDMwKSA+PiA0OworCQlQREVCVUcoRF9DT05GLCAiZXhwb3N1cmUgJWQiLAorCQkJKGhleHBvIDw8IDEwKSB8IChtZXhwbyA8PCAyKSB8IGxleHBvKTsKKwkJcmV0dXJuIChoZXhwbyA8PCAxMCkgfCAobWV4cG8gPDwgMikgfCBsZXhwbzsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfT1Y3NjYwOiAqLworCQkvKiByZWFkIHNlbnNvciBleHBvc3VyZSAqLworCQlpMmNfcjUoZ3NwY2FfZGV2LCAweDA0KTsKKwkJaGV4cG8gPSBnc3BjYV9kZXYtPnVzYl9idWZbM10gJiAweDJmOworCQlsZXhwbyA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDI7CisJCWkyY19yNShnc3BjYV9kZXYsIDB4MDgpOworCQltZXhwbyA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwkJcmV0dXJuIChoZXhwbyA8PCAxMCkgfCAobWV4cG8gPDwgMikgfCBsZXhwbzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIGhhcmRjb2RlZCByZWdpc3RlcnMgc2VlbSBub3QgcmVhZGFibGUgKi8KKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgorLyoJCXNkLT5icmlnaHRuZXNzID0gMHg3ZmZmOyAqLworCQlzZC0+YnJpZ2h0bmVzcyA9IGdldGV4cG9zdXJlKGdzcGNhX2RldikgPj4gNDsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTUkwMzYwOgorCQlzZC0+YnJpZ2h0bmVzcyA9IGdldGV4cG9zdXJlKGdzcGNhX2RldikgPDwgNDsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTU80MDAwOgorLyoJCXNkLT5icmlnaHRuZXNzID0gMHgxZmZmOyAqLworCQlzZC0+YnJpZ2h0bmVzcyA9IGdldGV4cG9zdXJlKGdzcGNhX2RldikgPDwgNDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbnRyYXN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29sb3JzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbG9yczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YXV0b2dhaW4gPSB2YWw7CisJaWYgKHZhbCkKKwkJc2QtPmFnX2NudCA9IEFHX0NOVF9TVEFSVDsKKwllbHNlCisJCXNkLT5hZ19jbnQgPSAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5hdXRvZ2FpbjsKKwlyZXR1cm4gMDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgPSBzZF9jdHJscywKKwkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkub3BlbiA9IHNkX29wZW4sCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCisJLmNsb3NlID0gc2RfY2xvc2UsCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KKyNkZWZpbmUgRFZOTShuYW1lKSAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpIG5hbWUKK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworI2lmbmRlZiBDT05GSUdfVVNCX1NOOUMxMDIKKwl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAyNSksIERWTk0oIkdlbml1cyBFeWUgMzExUSIpfSwKKwl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNSksIERWTk0oIk1pY3JvU29mdCBWWDMwMDAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjcpLCBEVk5NKCJNaWNyb1NvZnQgVlgxMDAwIil9LAorCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3KSwgRFZOTSgiUGhpbGlwcyBTUEMgNjAwIE5DIil9LAorCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI4KSwgRFZOTSgiUGhpbGlwcyBTUEMgNzAwIE5DIil9LAorI2VuZGlmCisJe1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMzApLCBEVk5NKCJQaGlsaXBzIFNQQyA3MTBOQyIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjA0MCksIERWTk0oIlNwZWVkIE5WQyAzNTBLIil9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDdjKSwgRFZOTSgiU29uaXggc245YzEwMnAgSHY3MTMxUiIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBjMCksIERWTk0oIlNhbmdoYSBTbjUzNSIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBlYyksIERWTk0oIlNOOUMxMDUrTU80MDAwIil9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZiKSwgRFZOTSgiU3VyZmVyIE5vTmFtZSIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYyksIERWTk0oIkxHLUxJQzMwMCIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEyYSksIERWTk0oIkF2YW50IENhbWVyYSIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEyYyksIERWTk0oIlR5cGhvb24gUmFzeSBDYW0gMS4zTVBpeCIpfSwKKyNpZm5kZWYgQ09ORklHX1VTQl9TTjlDMTAyCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMzApLCBEVk5NKCJTb25peCBQY2NhbSIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzOCksIERWTk0oIlNuOWMxMjAgTW80MDAwIil9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNiKSwgRFZOTSgiU3VyZmVyIFNOLTIwNiIpfSwKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYyksIERWTk0oIlNvbml4IFBjY2FtMTY4Iil9LAorI2VuZGlmCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJaW5mbygidiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWluZm8oImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NjIwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYwpAQCAtMCwwICsxLDEyMTYgQEAKKy8qCisgKiBTUENBNTAwIGNoaXAgYmFzZWQgY2FtZXJhcyBpbml0aWFsaXphdGlvbiBkYXRhCisgKgorICogVjRMMiBieSBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgInNwY2E1MDAiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorI2luY2x1ZGUgImpwZWcuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9TUENBNTAwIFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJX191OCBwYWNrZXRbSVNPX01BWF9TSVpFICsgMTI4XTsKKwkJCQkgLyogISEgbm8gbW9yZSB0aGFuIDEyOCBmZiBpbiBhbiBJU08gcGFja2V0ICovCisKKwl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CisJdW5zaWduZWQgY2hhciBjb250cmFzdDsKKwl1bnNpZ25lZCBjaGFyIGNvbG9yczsKKworCWNoYXIgcWluZGV4OworCWNoYXIgc3VidHlwZTsKKyNkZWZpbmUgQWdmYUNsMjAgMAorI2RlZmluZSBBaXB0ZWtQb2NrZXREViAxCisjZGVmaW5lIEJlbnFEQzEwMTYgMgorI2RlZmluZSBDcmVhdGl2ZVBDQ2FtMzAwIDMKKyNkZWZpbmUgRExpbmtEU0MzNTAgNAorI2RlZmluZSBHc21hcnRtaW5pIDUKKyNkZWZpbmUgSW50ZWxQb2NrZXRQQ0NhbWVyYSA2CisjZGVmaW5lIEtvZGFrRVoyMDAgNworI2RlZmluZSBMb2dpdGVjaENsaWNrU21hcnQzMTAgOAorI2RlZmluZSBMb2dpdGVjaENsaWNrU21hcnQ1MTAgOQorI2RlZmluZSBMb2dpdGVjaFRyYXZlbGVyIDEwCisjZGVmaW5lIE11c3Rla0dzbWFydDMwMCAxMQorI2RlZmluZSBPcHRpbWVkaWEgMTIKKyNkZWZpbmUgUGFsbVBpeERDODUgMTMKKyNkZWZpbmUgVG9wdHJvSW5kdXMgMTQKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAxMjcKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gNjMsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09OVFJBU1RfREVGIDMxCisJCS5kZWZhdWx0X3ZhbHVlID0gQ09OVFJBU1RfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29sb3IiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gNjMsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09MT1JfREVGIDMxCisJCS5kZWZhdWx0X3ZhbHVlID0gQ09MT1JfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29sb3JzLAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29sb3JzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZVtdID0geworCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDF9LAorCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDB9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKKwl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNzYsCisJCS5zaXplaW1hZ2UgPSAxNzYgKiAxNDQgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKKwl7MzUyLCAyODgsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODggKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAwfSwKK307CisKKy8qIEZyYW1lIHBhY2tldCBoZWFkZXIgb2Zmc2V0cyBmb3IgdGhlIHNwY2E1MDAgKi8KKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfUEFERElOR0xCIDIKKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfUEFERElOR0hCIDMKKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfTU9ERSAgICAgIDQKKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfSU1HV0lEVEggIDUKKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfSU1HSEVJR0hUIDYKKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfSU1HTU9ERSAgIDcKKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfUVRCTElOREVYIDgKKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfRlJBTVNFUSAgIDkKKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfQ0RTUElORk8gIDEwCisjZGVmaW5lIFNQQ0E1MDBfT0ZGU0VUX0dQSU8gICAgICAxMQorI2RlZmluZSBTUENBNTAwX09GRlNFVF9BVUdQSU8gICAgMTIKKyNkZWZpbmUgU1BDQTUwMF9PRkZTRVRfREFUQSAgICAgIDE2CisKKworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDBfdmlzdWFsX2RlZmF1bHRzW11bM10gPSB7CisJezB4MDAsIDB4MDAwMywgMHg4MTZifSwJLyogU1NJIG5vdCBhY3RpdmUgc3luYyB3aXRoIHZzeW5jLAorCQkJCSAqIGh1ZSAoSCBieXRlKSA9IDAsCisJCQkJICogc2F0dXJhdGlvbi9odWUgZW5hYmxlLAorCQkJCSAqIGJyaWdodG5lc3MvY29udHJhc3QgZW5hYmxlLgorCQkJCSAqLworCXsweDAwLCAweDAwMDAsIDB4ODE2N30sCS8qIGJyaWdodG5lc3MgPSAwICovCisJezB4MDAsIDB4MDAyMCwgMHg4MTY4fSwJLyogY29udHJhc3QgPSAwICovCisJezB4MDAsIDB4MDAwMywgMHg4MTZifSwJLyogU1NJIG5vdCBhY3RpdmUgc3luYyB3aXRoIHZzeW5jLAorCQkJCSAqIGh1ZSAoSCBieXRlKSA9IDAsIHNhdHVyYXRpb24vaHVlIGVuYWJsZSwKKwkJCQkgKiBicmlnaHRuZXNzL2NvbnRyYXN0IGVuYWJsZS4KKwkJCQkgKiB3YXMgMHgwMDAzLCBub3cgMHgwMDAwLgorCQkJCSAqLworCXsweDAwLCAweDAwMDAsIDB4ODE2YX0sCS8qIGh1ZSAoTCBieXRlKSA9IDAgKi8KKwl7MHgwMCwgMHgwMDIwLCAweDgxNjl9LAkvKiBzYXR1cmF0aW9uID0gMHgyMCAqLworCXsweDAwLCAweDAwNTAsIDB4ODE1N30sCS8qIGVkZ2UgZ2FpbiBoaWdoIHRocmVzaG9sZCAqLworCXsweDAwLCAweDAwMzAsIDB4ODE1OH0sCS8qIGVkZ2UgZ2FpbiBsb3cgdGhyZXNob2xkICovCisJezB4MDAsIDB4MDAyOCwgMHg4MTU5fSwJLyogZWRnZSBiYW5kd2lkdGggaGlnaCB0aHJlc2hvbGQgKi8KKwl7MHgwMCwgMHgwMDBhLCAweDgxNWF9LAkvKiBlZGdlIGJhbmR3aWR0aCBsb3cgdGhyZXNob2xkICovCisJezB4MDAsIDB4MDAwMSwgMHg4MjAyfSwJLyogY2xvY2sgcmF0ZSBjb21wZW5zYXRpb24gPSAxLzI1IHNlYy9mcmFtZSAqLworCXsweDBjLCAweDAwMDQsIDB4MDAwMH0sCisJLyogc2V0IGludGVyZmFjZSAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IF9fdTE2IENsaWNrc21hcnQ1MTBfZGVmYXVsdHNbXVszXSA9IHsKKwl7MHgwMCwgMHgwMCwgMHg4MjExfSwKKwl7MHgwMCwgMHgwMSwgMHg4MmMwfSwKKwl7MHgwMCwgMHgxMCwgMHg4MmNifSwKKwl7MHgwMCwgMHgwZiwgMHg4MDBkfSwKKwl7MHgwMCwgMHg4MiwgMHg4MjI1fSwKKwl7MHgwMCwgMHgyMSwgMHg4MjI4fSwKKwl7MHgwMCwgMHgwMCwgMHg4MjAzfSwKKwl7MHgwMCwgMHgwMCwgMHg4MjA0fSwKKwl7MHgwMCwgMHgwOCwgMHg4MjA1fSwKKwl7MHgwMCwgMHhmOCwgMHg4MjA2fSwKKwl7MHgwMCwgMHgyOCwgMHg4MjA3fSwKKwl7MHgwMCwgMHhhMCwgMHg4MjA4fSwKKwl7MHgwMCwgMHgwOCwgMHg4MjRhfSwKKwl7MHgwMCwgMHgwOCwgMHg4MjE0fSwKKwl7MHgwMCwgMHg4MCwgMHg4MmMxfSwKKwl7MHgwMCwgMHgwMCwgMHg4MmMyfSwKKwl7MHgwMCwgMHgwMCwgMHg4MmNhfSwKKwl7MHgwMCwgMHg4MCwgMHg4MmMxfSwKKwl7MHgwMCwgMHgwNCwgMHg4MmMyfSwKKwl7MHgwMCwgMHgwMCwgMHg4MmNhfSwKKwl7MHgwMCwgMHhmYywgMHg4MTAwfSwKKwl7MHgwMCwgMHhmYywgMHg4MTA1fSwKKwl7MHgwMCwgMHgzMCwgMHg4MTAxfSwKKwl7MHgwMCwgMHgwMCwgMHg4MTAyfSwKKwl7MHgwMCwgMHgwMCwgMHg4MTAzfSwKKwl7MHgwMCwgMHg2NiwgMHg4MTA3fSwKKwl7MHgwMCwgMHgwMCwgMHg4MTZifSwKKwl7MHgwMCwgMHgwMCwgMHg4MTU1fSwKKwl7MHgwMCwgMHgwMSwgMHg4MTU2fSwKKwl7MHgwMCwgMHg2MCwgMHg4MTU3fSwKKwl7MHgwMCwgMHg0MCwgMHg4MTU4fSwKKwl7MHgwMCwgMHgwYSwgMHg4MTU5fSwKKwl7MHgwMCwgMHgwNiwgMHg4MTVhfSwKKwl7MHgwMCwgMHgwMCwgMHg4MTNmfSwKKwl7MHgwMCwgMHgwMCwgMHg4MjAwfSwKKwl7MHgwMCwgMHgxOSwgMHg4MjAxfSwKKwl7MHgwMCwgMHgwMCwgMHg4MmMxfSwKKwl7MHgwMCwgMHhhMCwgMHg4MmMyfSwKKwl7MHgwMCwgMHgwMCwgMHg4MmNhfSwKKwl7MHgwMCwgMHgwMCwgMHg4MTE3fSwKKwl7MHgwMCwgMHgwMCwgMHg4MTE4fSwKKwl7MHgwMCwgMHg2NSwgMHg4MTE5fSwKKwl7MHgwMCwgMHgwMCwgMHg4MTFhfSwKKwl7MHgwMCwgMHgwMCwgMHg4MTFifSwKKwl7MHgwMCwgMHg1NSwgMHg4MTFjfSwKKwl7MHgwMCwgMHg2NSwgMHg4MTFkfSwKKwl7MHgwMCwgMHg1NSwgMHg4MTFlfSwKKwl7MHgwMCwgMHgxNiwgMHg4MTFmfSwKKwl7MHgwMCwgMHgxOSwgMHg4MTIwfSwKKwl7MHgwMCwgMHg4MCwgMHg4MTAzfSwKKwl7MHgwMCwgMHg4MywgMHg4MTZifSwKKwl7MHgwMCwgMHgyNSwgMHg4MTY4fSwKKwl7MHgwMCwgMHgwMSwgMHg4MjBmfSwKKwl7MHgwMCwgMHhmZiwgMHg4MTE1fSwKKwl7MHgwMCwgMHg0OCwgMHg4MTE2fSwKKwl7MHgwMCwgMHg1MCwgMHg4MTUxfSwKKwl7MHgwMCwgMHg0MCwgMHg4MTUyfSwKKwl7MHgwMCwgMHg3OCwgMHg4MTUzfSwKKwl7MHgwMCwgMHg0MCwgMHg4MTU0fSwKKwl7MHgwMCwgMHgwMCwgMHg4MTY3fSwKKwl7MHgwMCwgMHgyMCwgMHg4MTY4fSwKKwl7MHgwMCwgMHgwMCwgMHg4MTZhfSwKKwl7MHgwMCwgMHgwMywgMHg4MTZifSwKKwl7MHgwMCwgMHgyMCwgMHg4MTY5fSwKKwl7MHgwMCwgMHg2MCwgMHg4MTU3fSwKKwl7MHgwMCwgMHgwMCwgMHg4MTkwfSwKKwl7MHgwMCwgMHgwMCwgMHg4MWExfSwKKwl7MHgwMCwgMHgwMCwgMHg4MWIyfSwKKwl7MHgwMCwgMHgyNywgMHg4MTkxfSwKKwl7MHgwMCwgMHgyNywgMHg4MWEyfSwKKwl7MHgwMCwgMHgyNywgMHg4MWIzfSwKKwl7MHgwMCwgMHg0YiwgMHg4MTkyfSwKKwl7MHgwMCwgMHg0YiwgMHg4MWEzfSwKKwl7MHgwMCwgMHg0YiwgMHg4MWI0fSwKKwl7MHgwMCwgMHg2NiwgMHg4MTkzfSwKKwl7MHgwMCwgMHg2NiwgMHg4MWE0fSwKKwl7MHgwMCwgMHg2NiwgMHg4MWI1fSwKKwl7MHgwMCwgMHg3OSwgMHg4MTk0fSwKKwl7MHgwMCwgMHg3OSwgMHg4MWE1fSwKKwl7MHgwMCwgMHg3OSwgMHg4MWI2fSwKKwl7MHgwMCwgMHg4YSwgMHg4MTk1fSwKKwl7MHgwMCwgMHg4YSwgMHg4MWE2fSwKKwl7MHgwMCwgMHg4YSwgMHg4MWI3fSwKKwl7MHgwMCwgMHg5YiwgMHg4MTk2fSwKKwl7MHgwMCwgMHg5YiwgMHg4MWE3fSwKKwl7MHgwMCwgMHg5YiwgMHg4MWI4fSwKKwl7MHgwMCwgMHhhNiwgMHg4MTk3fSwKKwl7MHgwMCwgMHhhNiwgMHg4MWE4fSwKKwl7MHgwMCwgMHhhNiwgMHg4MWI5fSwKKwl7MHgwMCwgMHhiMiwgMHg4MTk4fSwKKwl7MHgwMCwgMHhiMiwgMHg4MWE5fSwKKwl7MHgwMCwgMHhiMiwgMHg4MWJhfSwKKwl7MHgwMCwgMHhiZSwgMHg4MTk5fSwKKwl7MHgwMCwgMHhiZSwgMHg4MWFhfSwKKwl7MHgwMCwgMHhiZSwgMHg4MWJifSwKKwl7MHgwMCwgMHhjOCwgMHg4MTlhfSwKKwl7MHgwMCwgMHhjOCwgMHg4MWFifSwKKwl7MHgwMCwgMHhjOCwgMHg4MWJjfSwKKwl7MHgwMCwgMHhkMiwgMHg4MTlifSwKKwl7MHgwMCwgMHhkMiwgMHg4MWFjfSwKKwl7MHgwMCwgMHhkMiwgMHg4MWJkfSwKKwl7MHgwMCwgMHhkYiwgMHg4MTljfSwKKwl7MHgwMCwgMHhkYiwgMHg4MWFkfSwKKwl7MHgwMCwgMHhkYiwgMHg4MWJlfSwKKwl7MHgwMCwgMHhlNCwgMHg4MTlkfSwKKwl7MHgwMCwgMHhlNCwgMHg4MWFlfSwKKwl7MHgwMCwgMHhlNCwgMHg4MWJmfSwKKwl7MHgwMCwgMHhlZCwgMHg4MTllfSwKKwl7MHgwMCwgMHhlZCwgMHg4MWFmfSwKKwl7MHgwMCwgMHhlZCwgMHg4MWMwfSwKKwl7MHgwMCwgMHhmNywgMHg4MTlmfSwKKwl7MHgwMCwgMHhmNywgMHg4MWIwfSwKKwl7MHgwMCwgMHhmNywgMHg4MWMxfSwKKwl7MHgwMCwgMHhmZiwgMHg4MWEwfSwKKwl7MHgwMCwgMHhmZiwgMHg4MWIxfSwKKwl7MHgwMCwgMHhmZiwgMHg4MWMyfSwKKwl7MHgwMCwgMHgwMywgMHg4MTU2fSwKKwl7MHgwMCwgMHgwMCwgMHg4MjExfSwKKwl7MHgwMCwgMHgyMCwgMHg4MTY4fSwKKwl7MHgwMCwgMHgwMSwgMHg4MjAyfSwKKwl7MHgwMCwgMHgzMCwgMHg4MTAxfSwKKwl7MHgwMCwgMHgwMCwgMHg4MTExfSwKKwl7MHgwMCwgMHgwMCwgMHg4MTEyfSwKKwl7MHgwMCwgMHgwMCwgMHg4MTEzfSwKKwl7MHgwMCwgMHgwMCwgMHg4MTE0fSwKKwl7fQorfTsKKworc3RhdGljIGNvbnN0IF9fdTggcXRhYmxlX2NyZWF0aXZlX3BjY2FtWzJdWzY0XSA9IHsKKwl7CQkJCS8qIFEtdGFibGUgWS1jb21wb25lbnRzICovCisJIDB4MDUsIDB4MDMsIDB4MDMsIDB4MDUsIDB4MDcsIDB4MGMsIDB4MGYsIDB4MTIsCisJIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MTEsIDB4MTIsIDB4MTEsCisJIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDcsIDB4MGMsIDB4MTEsIDB4MTUsIDB4MTEsCisJIDB4MDQsIDB4MDUsIDB4MDcsIDB4MDksIDB4MGYsIDB4MWEsIDB4MTgsIDB4MTMsCisJIDB4MDUsIDB4MDcsIDB4MGIsIDB4MTEsIDB4MTQsIDB4MjEsIDB4MWYsIDB4MTcsCisJIDB4MDcsIDB4MGIsIDB4MTEsIDB4MTMsIDB4MTgsIDB4MWYsIDB4MjIsIDB4MWMsCisJIDB4MGYsIDB4MTMsIDB4MTcsIDB4MWEsIDB4MWYsIDB4MjQsIDB4MjQsIDB4MWUsCisJIDB4MTYsIDB4MWMsIDB4MWQsIDB4MWQsIDB4MjIsIDB4MWUsIDB4MWYsIDB4MWV9LAorCXsJCQkJLyogUS10YWJsZSBDLWNvbXBvbmVudHMgKi8KKwkgMHgwNSwgMHgwNSwgMHgwNywgMHgwZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgwNSwgMHgwNiwgMHgwOCwgMHgxNCwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgwNywgMHgwOCwgMHgxMSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgwZSwgMHgxNCwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZX0KK307CisKK3N0YXRpYyBjb25zdCBfX3U4IHF0YWJsZV9rb2Rha19lejIwMFsyXVs2NF0gPSB7CisJewkJCQkvKiBRLXRhYmxlIFktY29tcG9uZW50cyAqLworCSAweDAyLCAweDAxLCAweDAxLCAweDAyLCAweDAyLCAweDA0LCAweDA1LCAweDA2LAorCSAweDAxLCAweDAxLCAweDAxLCAweDAyLCAweDAzLCAweDA2LCAweDA2LCAweDA2LAorCSAweDAxLCAweDAxLCAweDAyLCAweDAyLCAweDA0LCAweDA2LCAweDA3LCAweDA2LAorCSAweDAxLCAweDAyLCAweDAyLCAweDAzLCAweDA1LCAweDA5LCAweDA4LCAweDA2LAorCSAweDAyLCAweDAyLCAweDA0LCAweDA2LCAweDA3LCAweDBiLCAweDBhLCAweDA4LAorCSAweDAyLCAweDA0LCAweDA2LCAweDA2LCAweDA4LCAweDBhLCAweDBiLCAweDA5LAorCSAweDA1LCAweDA2LCAweDA4LCAweDA5LCAweDBhLCAweDBjLCAweDBjLCAweDBhLAorCSAweDA3LCAweDA5LCAweDBhLCAweDBhLCAweDBiLCAweDBhLCAweDBhLCAweDBhfSwKKwl7CQkJCS8qIFEtdGFibGUgQy1jb21wb25lbnRzICovCisJIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDUsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCisJIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDcsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCisJIDB4MDIsIDB4MDMsIDB4MDYsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCisJIDB4MDUsIDB4MDcsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCisJIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCisJIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCisJIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCisJIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGF9Cit9OworCitzdGF0aWMgY29uc3QgX191OCBxdGFibGVfcG9ja2V0ZHZbMl1bNjRdID0geworCXsJCS8qIFEtdGFibGUgWS1jb21wb25lbnRzIHN0YXJ0IHJlZ2lzdGVycyAweDg4MDAgKi8KKwkgMHgwNiwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwYSwgMHgxMCwgMHgxNCwgMHgxOCwKKwkgMHgwNSwgMHgwNSwgMHgwNiwgMHgwOCwgMHgwYSwgMHgxNywgMHgxOCwgMHgxNiwKKwkgMHgwNiwgMHgwNSwgMHgwNiwgMHgwYSwgMHgxMCwgMHgxNywgMHgxYywgMHgxNiwKKwkgMHgwNiwgMHgwNywgMHgwOSwgMHgwYywgMHgxNCwgMHgyMywgMHgyMCwgMHgxOSwKKwkgMHgwNywgMHgwOSwgMHgwZiwgMHgxNiwgMHgxYiwgMHgyYywgMHgyOSwgMHgxZiwKKwkgMHgwYSwgMHgwZSwgMHgxNiwgMHgxYSwgMHgyMCwgMHgyYSwgMHgyZCwgMHgyNSwKKwkgMHgxNCwgMHgxYSwgMHgxZiwgMHgyMywgMHgyOSwgMHgzMCwgMHgzMCwgMHgyOCwKKwkgMHgxZCwgMHgyNSwgMHgyNiwgMHgyNywgMHgyZCwgMHgyOCwgMHgyOSwgMHgyOCwKKwkgfSwKKwl7CQkvKiBRLXRhYmxlIEMtY29tcG9uZW50cyBzdGFydCByZWdpc3RlcnMgMHg4ODQwICovCisJIDB4MDcsIDB4MDcsIDB4MGEsIDB4MTMsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJIDB4MDcsIDB4MDgsIDB4MGEsIDB4MWEsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJIDB4MGEsIDB4MGEsIDB4MTYsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJIDB4MTMsIDB4MWEsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4Mjh9Cit9OworCisvKiByZWFkICdsZW4nIGJ5dGVzIHRvIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLworc3RhdGljIHZvaWQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgIF9fdTE2IGluZGV4LAorCQkgIF9fdTE2IGxlbmd0aCkKK3sKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMCwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJMCwJCS8qIHZhbHVlICovCisJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW5ndGgsIDUwMCk7Cit9CisKK3N0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgIF9fdTE2IHJlcSwgX191MTYgaW5kZXgsIF9fdTE2IHZhbHVlKQoreworCWludCByZXQ7CisKKwlQREVCVUcoRF9VU0JPLCAicmVnIHdyaXRlOiBbMHglMDJ4XSA9IDB4JTAyeCIsIGluZGV4LCB2YWx1ZSk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCXJlcSwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLCBpbmRleCwgTlVMTCwgMCwgNTAwKTsKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlOiBlcnJvciAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEgKi8KK3N0YXRpYyBpbnQgcmVnX3JfMTIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191MTYgcmVxLAkvKiBiUmVxdWVzdCAqLworCQkJX191MTYgaW5kZXgsCS8qIHdJbmRleCAqLworCQkJX191MTYgbGVuZ3RoKQkvKiB3TGVuZ3RoICgxIG9yIDIgb25seSkgKi8KK3sKKwlpbnQgcmV0OworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkJLyogdmFsdWUgKi8KKwkJCWluZGV4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW5ndGgsCisJCQk1MDApOwkJLyogdGltZW91dCAqLworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ19yXzEyIGVyciAlZCIsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIChnc3BjYV9kZXYtPnVzYl9idWZbMV0gPDwgOCkgKyBnc3BjYV9kZXYtPnVzYl9idWZbMF07Cit9CisKKy8qCisgKiBTaW1wbGUgZnVuY3Rpb24gdG8gd2FpdCBmb3IgYSBnaXZlbiA4LWJpdCB2YWx1ZSB0byBiZSByZXR1cm5lZCBmcm9tCisgKiBhIHJlZ19yZWFkIGNhbGwuCisgKiBSZXR1cm5zOiBuZWdhdGl2ZSBpcyBlcnJvciBvciB0aW1lb3V0LCB6ZXJvIGlzIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgcmVnX3Jfd2FpdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3UxNiByZWcsIF9fdTE2IGluZGV4LCBfX3UxNiB2YWx1ZSkKK3sKKwlpbnQgcmV0LCBjbnQgPSAyMDsKKworCXdoaWxlICgtLWNudCA+IDApIHsKKwkJcmV0ID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCByZWcsIGluZGV4LCAxKTsKKwkJaWYgKHJldCA9PSB2YWx1ZSkKKwkJCXJldHVybiAwOworCQltc2xlZXAoNTApOworCX0KKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCB3cml0ZV92ZWN0b3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3QgX191MTYgZGF0YVtdWzNdKQoreworCWludCByZXQsIGkgPSAwOworCisJd2hpbGUgKGRhdGFbaV1bMF0gIT0gMCB8fCBkYXRhW2ldWzFdICE9IDAgfHwgZGF0YVtpXVsyXSAhPSAwKSB7CisJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVtpXVswXSwgZGF0YVtpXVsyXSwgZGF0YVtpXVsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaSsrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcGNhNTB4X3NldHVwX3F0YWJsZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJdW5zaWduZWQgaW50IHJlcXVlc3QsCisJCQkJdW5zaWduZWQgaW50IHliYXNlLAorCQkJCXVuc2lnbmVkIGludCBjYmFzZSwKKwkJCQljb25zdCBfX3U4IHF0YWJsZVsyXVs2NF0pCit7CisJaW50IGksIGVycjsKKworCS8qIGxvb3Agb3ZlciB5IGNvbXBvbmVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQllcnIgPSByZWdfdyhnc3BjYV9kZXYsIHJlcXVlc3QsIHliYXNlICsgaSwgcXRhYmxlWzBdW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGxvb3Agb3ZlciBjIGNvbXBvbmVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQllcnIgPSByZWdfdyhnc3BjYV9kZXYsIHJlcXVlc3QsIGNiYXNlICsgaSwgcXRhYmxlWzFdW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BjYTUwMF9waW5nMzEwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfcihnc3BjYV9kZXYsIDB4MGQwNCwgMik7CisJUERFQlVHKERfU1RSRUFNLCAiQ2xpY2tTbWFydDMxMCBwaW5nIDB4MGQwNCAweCUwMnggMHglMDJ4IiwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdLCBnc3BjYV9kZXYtPnVzYl9idWZbMV0pOworfQorCitzdGF0aWMgdm9pZCBzcGNhNTAwX2Nsa3NtYXJ0MzEwX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJlZ19yKGdzcGNhX2RldiwgMHgwZDA1LCAyKTsKKwlQREVCVUcoRF9TVFJFQU0sICJDbGlja1NtYXJ0MzEwIGluaXQgMHgwZDA1IDB4JTAyeCAweCUwMngiLAorCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0sIGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNjcsIDB4NWEpOworCXNwY2E1MDBfcGluZzMxMChnc3BjYV9kZXYpOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNjgsIDB4MjIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MTZhLCAweGMwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE2YiwgMHgwYik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNjksIDB4MjUpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MTU3LCAweDViKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE1OCwgMHg1Yik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxM2YsIDB4MDMpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MTUxLCAweDRhKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE1MywgMHg3OCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDBkMDEsIDB4MDQpOworCQkJCQkJLyogMDAgZm9yIGFkanVzdCBzaHV0dGVyICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDBkMDIsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MTY5LCAweDI1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MGQwMSwgMHgwMik7Cit9CisKK3N0YXRpYyB2b2lkIHNwY2E1MDBfc2V0bW9kZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3U4IHhtdWx0LCBfX3U4IHltdWx0KQoreworCWludCBtb2RlOworCisJLyogc2V0IHggbXVsdGlwbGllciAqLworCXJlZ193KGdzcGNhX2RldiwgMCwgMHg4MDAxLCB4bXVsdCk7CisKKwkvKiBzZXQgeSBtdWx0aXBsaWVyICovCisJcmVnX3coZ3NwY2FfZGV2LCAwLCAweDgwMDIsIHltdWx0KTsKKworCS8qIHVzZSBjb21wcmVzc2VkIG1vZGUsIFZHQSwgd2l0aCBtb2RlIHNwZWNpZmljIHN1YnNhbXBsZSAqLworCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlyZWdfdyhnc3BjYV9kZXYsIDAsIDB4ODAwMywgbW9kZSA8PCA0KTsKK30KKworc3RhdGljIGludCBzcGNhNTAwX2Z1bGxfcmVzZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBlcnI7CisKKwkvKiBzZW5kIHRoZSByZXNldCBjb21tYW5kICovCisJZXJyID0gcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAwMDEsIDB4MDAwMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiB3YWl0IGZvciB0aGUgcmVzZXQgdG8gY29tcGxldGUgKi8KKwllcnIgPSByZWdfcl93YWl0KGdzcGNhX2RldiwgMHgwNiwgMHgwMDAwLCAweDAwMDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMDAwLCAweDAwMDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHJlZ19yX3dhaXQoZ3NwY2FfZGV2LCAweDA2LCAwLCAwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJyZWdfcl93YWl0KCkgZmFpbGVkIik7CisJCXJldHVybiBlcnI7CisJfQorCS8qIGFsbCBvayAqLworCXJldHVybiAwOworfQorCisvKiBTeW5jaHJvIHRoZSBCcmlkZ2Ugd2l0aCBzZW5zb3IgKi8KKy8qIE1heWJlIHRoYXQgd2lsbCB3b3JrIG9uIGFsbCBzcGNhNTAwIGNoaXAgKi8KKy8qIGJlY2F1c2UgaSBvbmx5IG93biBhIGNsaWNrc21hcnQzMTAgdHJ5IGZvciB0aGF0IGNoaXAgKi8KKy8qIHVzaW5nIHNwY2E1MHhfc2V0X3BhY2tldF9zaXplKCkgY2F1c2UgYW4gT29vcHMgaGVyZSAqLworLyogdXNiX3NldF9pbnRlcmZhY2UgZnJvbSBrZXJuZWwgMi42LnggY2xlYXIgYWxsIHRoZSB1cmIgc3R1ZmYgKi8KKy8qIHVwLXBvcnQgdGhlIHNhbWUgZmVhdHVyZSBhcyBpbiAyLjQueCBrZXJuZWwgKi8KK3N0YXRpYyBpbnQgc3BjYTUwMF9zeW5jaDMxMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaWYgKHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCAwKSA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiU2V0IHBhY2tldCBzaXplOiBzZXQgaW50ZXJmYWNlIGVycm9yIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXNwY2E1MDBfcGluZzMxMChnc3BjYV9kZXYpOworCisJcmVnX3IoZ3NwY2FfZGV2LCAweDBkMDAsIDEpOworCisJLyogbmVlZCBhbHQgc2V0dGluZyBoZXJlICovCisJUERFQlVHKERfUEFDSywgIkNsaWNrU21hcnQzMTAgc3luYyBhbHQ6ICVkIiwgZ3NwY2FfZGV2LT5hbHQpOworCisJLyogV2luZG96ZSB1c2UgcGlwZSB3aXRoIGFsdHNldHRpbmcgNiB3aHkgNyBoZXJlICovCisJaWYgKHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LAorCQkJCWdzcGNhX2Rldi0+aWZhY2UsCisJCQkJZ3NwY2FfZGV2LT5hbHQpIDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJTZXQgcGFja2V0IHNpemU6IHNldCBpbnRlcmZhY2UgZXJyb3IiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJcmV0dXJuIDA7CitlcnJvcjoKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgdm9pZCBzcGNhNTAwX3JlaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGVycjsKKwlfX3U4IERhdGE7CisKKwkvKiBzb21lIHVua25vdyBjb21tYW5kIGZyb20gQWlwdGVrIHBvY2tldCBkdiBhbmQgZmFtaWx5MzAwICovCisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MGQwMSwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDBkMDMsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwZDAyLCAweDAxKTsKKworCS8qIGVuYWJsZSBkcm9wIHBhY2tldCAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NTBhLCAweDAwMDEpOworCisJZXJyID0gc3BjYTUweF9zZXR1cF9xdGFibGUoZ3NwY2FfZGV2LCAweDAwLCAweDg4MDAsIDB4ODg0MCwKKwkJCQkgcXRhYmxlX3BvY2tldGR2KTsKKwlpZiAoZXJyIDwgMCkKKwkJUERFQlVHKERfRVJSfERfU1RSRUFNLCAic3BjYTUweF9zZXR1cF9xdGFibGUgZmFpbGVkIG9uIGluaXQiKTsKKworCS8qIHNldCBxdGFibGUgaW5kZXggKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODg4MCwgMik7CisJLyogZmFtaWx5IGNhbSBRdWlja3NtYXJ0IHN0dWZmICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgwMGEsIDB4MDApOworCS8qIFNldCBhZ2MgdHJhbnNmZXI6IHN5bmNlZCBpbmJldHdlZW4gZnJhbWVzICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgyMGYsIDB4MDEpOworCS8qIEluaXQgU0RSQU0gLSBuZWVkZWQgZm9yIFNEUkFNIGFjY2VzcyAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NzBhLCAweDA0KTsKKwkvKlN0YXJ0IGluaXQgc2VxdWVuY2Ugb3Igc3RyZWFtICovCisJcmVnX3coZ3NwY2FfZGV2LCAwLCAweDgwMDMsIDB4MDApOworCS8qIHN3aXRjaCB0byB2aWRlbyBjYW1lcmEgbW9kZSAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MDAwLCAweDAwMDQpOworCW1zbGVlcCgyMDAwKTsKKwlpZiAocmVnX3Jfd2FpdChnc3BjYV9kZXYsIDAsIDB4ODAwMCwgMHg0NCkgIT0gMCkgeworCQlyZWdfcihnc3BjYV9kZXYsIDB4ODE2YiwgMSk7CisJCURhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MTZiLCBEYXRhKTsKKwl9Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtOworCV9fdTE2IHZlbmRvcjsKKwlfX3UxNiBwcm9kdWN0OworCisJdmVuZG9yID0gaWQtPmlkVmVuZG9yOworCXByb2R1Y3QgPSBpZC0+aWRQcm9kdWN0OworCXN3aXRjaCAodmVuZG9yKSB7CisJY2FzZSAweDA0MGE6CQkvKiBLb2RhayBjYW1lcmFzICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDAzMDA6ICovCisJCQlzZC0+c3VidHlwZSA9IEtvZGFrRVoyMDA7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDA0MWU6CQkvKiBDcmVhdGl2ZSBjYW1lcmFzICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDQwMGE6ICovCisJCQlzZC0+c3VidHlwZSA9IENyZWF0aXZlUENDYW0zMDA7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDA0NmQ6CQkvKiBMb2dpdGVjaCBMYWJ0ZWMgKi8KKwkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHgwODkwOgorCQkJc2QtPnN1YnR5cGUgPSBMb2dpdGVjaFRyYXZlbGVyOworCQkJYnJlYWs7CisJCWNhc2UgMHgwOTAwOgorCQkJc2QtPnN1YnR5cGUgPSBMb2dpdGVjaENsaWNrU21hcnQzMTA7CisJCQlicmVhazsKKwkJY2FzZSAweDA5MDE6CisJCQlzZC0+c3VidHlwZSA9IExvZ2l0ZWNoQ2xpY2tTbWFydDUxMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgMHgwNGE1OgkJLyogQmVucSAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgzMDBjOiAqLworCQkJc2QtPnN1YnR5cGUgPSBCZW5xREMxMDE2OworLyoJCQlicmVhazsgKi8KKy8qCQl9ICovCisJCWJyZWFrOworCWNhc2UgMHgwNGZjOgkJLyogU3VuUGx1cyAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHg3MzMzOiAqLworCQkJc2QtPnN1YnR5cGUgPSBQYWxtUGl4REM4NTsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDU1ZjoJCS8qIE11c3RlayBjYW1lcmFzICovCisJCXN3aXRjaCAocHJvZHVjdCkgeworCQljYXNlIDB4YzIwMDoKKwkJCXNkLT5zdWJ0eXBlID0gTXVzdGVrR3NtYXJ0MzAwOworCQkJYnJlYWs7CisJCWNhc2UgMHhjMjIwOgorCQkJc2QtPnN1YnR5cGUgPSBHc21hcnRtaW5pOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweDA2YmQ6CQkvKiBBZ2ZhIENsMjAgKi8KKy8qCQlzd2l0Y2ggKHByb2R1Y3QpIHsgKi8KKy8qCQljYXNlIDB4MDQwNDogKi8KKwkJCXNkLT5zdWJ0eXBlID0gQWdmYUNsMjA7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDA2YmU6CQkvKiBPcHRpbWVkaWEgKi8KKy8qCQlzd2l0Y2ggKHByb2R1Y3QpIHsgKi8KKy8qCQljYXNlIDB4MDgwMDogKi8KKwkJCXNkLT5zdWJ0eXBlID0gT3B0aW1lZGlhOworLyoJCQlicmVhazsgKi8KKy8qCQl9ICovCisJCWJyZWFrOworCWNhc2UgMHgwODRkOgkJLyogRC1MaW5rIC8gTWludG9uICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDAwMDM6CSAqIERTQy0zNTAgLyBTLUNhbSBGNSAqLworCQkJc2QtPnN1YnR5cGUgPSBETGlua0RTQzM1MDsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDhjYToJCS8qIEFpcHRlayAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgwMTAzOiAqLworCQkJc2QtPnN1YnR5cGUgPSBBaXB0ZWtQb2NrZXREVjsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4Mjg5OToJCS8qIFRvcHRyb0luZHVzdHJpYWwgKi8KKy8qCQlzd2l0Y2ggKHByb2R1Y3QpIHsgKi8KKy8qCQljYXNlIDB4MDEyYzogKi8KKwkJCXNkLT5zdWJ0eXBlID0gVG9wdHJvSW5kdXM7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDgwODY6CQkvKiBJbnRlbCAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgwNjMwOgkgKiBQb2NrZXQgUEMgQ2FtZXJhICovCisJCQlzZC0+c3VidHlwZSA9IEludGVsUG9ja2V0UENDYW1lcmE7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJfQorCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwljYW0tPmRldl9uYW1lID0gKGNoYXIgKikgaWQtPmRyaXZlcl9pbmZvOworCWNhbS0+ZXBhZGRyID0gMHgwMTsKKwlpZiAoc2QtPnN1YnR5cGUgIT0gTG9naXRlY2hDbGlja1NtYXJ0MzEwKSB7CisJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CisJfSBlbHNlIHsKKwkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOworCQljYW0tPm5tb2RlcyA9IHNpemVvZiBzaWZfbW9kZSAvIHNpemVvZiBzaWZfbW9kZVswXTsKKwl9CisJc2QtPnFpbmRleCA9IDU7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIGluaXRpYWxpc2F0aW9uIG9mIHNwY2E1MDAgYmFzZWQgY2FtZXJhcyBpcyBkZWZlcnJlZCAqLworCVBERUJVRyhEX1NUUkVBTSwgIlNQQ0E1MDAgaW5pdCIpOworCWlmIChzZC0+c3VidHlwZSA9PSBMb2dpdGVjaENsaWNrU21hcnQzMTApCisJCXNwY2E1MDBfY2xrc21hcnQzMTBfaW5pdChnc3BjYV9kZXYpOworLyoJZWxzZQorCQlzcGNhNTAwX2luaXRpYWxpc2UoZ3NwY2FfZGV2KTsgKi8KKwlQREVCVUcoRF9TVFJFQU0sICJTUENBNTAwIGluaXQgZG9uZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBlcnI7CisJX191OCBEYXRhOworCV9fdTggeG11bHQsIHltdWx0OworCisJaWYgKHNkLT5zdWJ0eXBlID09IExvZ2l0ZWNoQ2xpY2tTbWFydDMxMCkgeworCQl4bXVsdCA9IDB4MTY7CisJCXltdWx0ID0gMHgxMjsKKwl9IGVsc2UgeworCQl4bXVsdCA9IDB4Mjg7CisJCXltdWx0ID0gMHgxZTsKKwl9CisKKwkvKiBpcyB0aGVyZSBhIHNlbnNvciBoZXJlID8gKi8KKwlyZWdfcihnc3BjYV9kZXYsIDB4OGEwNCwgMSk7CisJUERFQlVHKERfU1RSRUFNLCAiU3BjYTUwMCBTZW5zb3IgQWRkcmVzcyAweCUwMngiLAorCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0pOworCVBERUJVRyhEX1NUUkVBTSwgIlNwY2E1MDAgY3Vycl9tb2RlOiAlZCBYbXVsdDogMHglMDJ4LCBZbXVsdDogMHglMDJ4IiwKKwkJZ3NwY2FfZGV2LT5jdXJyX21vZGUsIHhtdWx0LCB5bXVsdCk7CisKKwkvKiBzZXR1cCBxdGFibGUgKi8KKwlzd2l0Y2ggKHNkLT5zdWJ0eXBlKSB7CisJY2FzZSBMb2dpdGVjaENsaWNrU21hcnQzMTA6CisJCSBzcGNhNTAwX3NldG1vZGUoZ3NwY2FfZGV2LCB4bXVsdCwgeW11bHQpOworCisJCS8qIGVuYWJsZSBkcm9wIHBhY2tldCAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODUwYSwgMHgwMDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDg4ODAsIDMpOworCQllcnIgPSBzcGNhNTB4X3NldHVwX3F0YWJsZShnc3BjYV9kZXYsCisJCQkJCSAgIDB4MDAsIDB4ODgwMCwgMHg4ODQwLAorCQkJCQkgICBxdGFibGVfY3JlYXRpdmVfcGNjYW0pOworCQlpZiAoZXJyIDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgInNwY2E1MHhfc2V0dXBfcXRhYmxlIGZhaWxlZCIpOworCQkvKiBJbml0IFNEUkFNIC0gbmVlZGVkIGZvciBTRFJBTSBhY2Nlc3MgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDg3MGEsIDB4MDQpOworCisJCS8qIHN3aXRjaCB0byB2aWRlbyBjYW1lcmEgbW9kZSAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODAwMCwgMHgwMDA0KTsKKwkJbXNsZWVwKDUwMCk7CisJCWlmIChyZWdfcl93YWl0KGdzcGNhX2RldiwgMCwgMHg4MDAwLCAweDQ0KSAhPSAwKQorCQkJUERFQlVHKERfRVJSLCAicmVnX3Jfd2FpdCgpIGZhaWxlZCIpOworCisJCXJlZ19yKGdzcGNhX2RldiwgMHg4MTZiLCAxKTsKKwkJRGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNmIsIERhdGEpOworCisJCXNwY2E1MDBfc3luY2gzMTAoZ3NwY2FfZGV2KTsKKworCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTAwX3Zpc3VhbF9kZWZhdWx0cyk7CisJCXNwY2E1MDBfc2V0bW9kZShnc3BjYV9kZXYsIHhtdWx0LCB5bXVsdCk7CisJCS8qIGVuYWJsZSBkcm9wIHBhY2tldCAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODUwYSwgMHgwMDAxKTsKKwkJCVBERUJVRyhEX0VSUiwgImZhaWxlZCB0byBlbmFibGUgZHJvcCBwYWNrZXQiKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDg4ODAsIDMpOworCQllcnIgPSBzcGNhNTB4X3NldHVwX3F0YWJsZShnc3BjYV9kZXYsCisJCQkJCSAgIDB4MDAsIDB4ODgwMCwgMHg4ODQwLAorCQkJCQkgICBxdGFibGVfY3JlYXRpdmVfcGNjYW0pOworCQlpZiAoZXJyIDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgInNwY2E1MHhfc2V0dXBfcXRhYmxlIGZhaWxlZCIpOworCisJCS8qIEluaXQgU0RSQU0gLSBuZWVkZWQgZm9yIFNEUkFNIGFjY2VzcyAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODcwYSwgMHgwNCk7CisKKwkJLyogc3dpdGNoIHRvIHZpZGVvIGNhbWVyYSBtb2RlICovCisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MDAwLCAweDAwMDQpOworCisJCWlmIChyZWdfcl93YWl0KGdzcGNhX2RldiwgMCwgMHg4MDAwLCAweDQ0KSAhPSAwKQorCQkJUERFQlVHKERfRVJSLCAicmVnX3Jfd2FpdCgpIGZhaWxlZCIpOworCisJCXJlZ19yKGdzcGNhX2RldiwgMHg4MTZiLCAxKTsKKwkJRGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNmIsIERhdGEpOworCQlicmVhazsKKwljYXNlIENyZWF0aXZlUENDYW0zMDA6CQkvKiBDcmVhdGl2ZSBQQy1DQU0gMzAwIDY0MHg0ODAgQ0NEICovCisJY2FzZSBJbnRlbFBvY2tldFBDQ2FtZXJhOgkvKiBGSVhNRTogVGVtcG9yYXJ5IGZpeCBmb3IKKwkJCQkJICoJSW50ZWwgUG9ja2V0IFBDIENhbWVyYQorCQkJCQkgKgktIE5XRyAoU2F0IDI5dGggTWFyY2ggMjAwMykgKi8KKworCQkvKiBkbyBhIGZ1bGwgcmVzZXQgKi8KKwkJZXJyID0gc3BjYTUwMF9mdWxsX3Jlc2V0KGdzcGNhX2Rldik7CisJCWlmIChlcnIgPCAwKQorCQkJUERFQlVHKERfRVJSLCAic3BjYTUwMF9mdWxsX3Jlc2V0IGZhaWxlZCIpOworCisJCS8qIGVuYWJsZSBkcm9wIHBhY2tldCAqLworCQllcnIgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODUwYSwgMHgwMDAxKTsKKwkJaWYgKGVyciA8IDApCisJCQlQREVCVUcoRF9FUlIsICJmYWlsZWQgdG8gZW5hYmxlIGRyb3AgcGFja2V0Iik7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4ODgwLCAzKTsKKwkJZXJyID0gc3BjYTUweF9zZXR1cF9xdGFibGUoZ3NwY2FfZGV2LAorCQkJCQkgICAweDAwLCAweDg4MDAsIDB4ODg0MCwKKwkJCQkJICAgcXRhYmxlX2NyZWF0aXZlX3BjY2FtKTsKKwkJaWYgKGVyciA8IDApCisJCQlQREVCVUcoRF9FUlIsICJzcGNhNTB4X3NldHVwX3F0YWJsZSBmYWlsZWQiKTsKKworCQlzcGNhNTAwX3NldG1vZGUoZ3NwY2FfZGV2LCB4bXVsdCwgeW11bHQpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MjAsIDB4MDAwMSwgMHgwMDA0KTsKKworCQkvKiBzd2l0Y2ggdG8gdmlkZW8gY2FtZXJhIG1vZGUgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgwMDAsIDB4MDAwNCk7CisKKwkJaWYgKHJlZ19yX3dhaXQoZ3NwY2FfZGV2LCAwLCAweDgwMDAsIDB4NDQpICE9IDApCisJCQlQREVCVUcoRF9FUlIsICJyZWdfcl93YWl0KCkgZmFpbGVkIik7CisKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDgxNmIsIDEpOworCQlEYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE2YiwgRGF0YSk7CisKKy8qCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTAwX3Zpc3VhbF9kZWZhdWx0cyk7ICovCisJCWJyZWFrOworCWNhc2UgS29kYWtFWjIwMDoJCS8qIEtvZGFrIEVaMjAwICovCisKKwkJLyogZG8gYSBmdWxsIHJlc2V0ICovCisJCWVyciA9IHNwY2E1MDBfZnVsbF9yZXNldChnc3BjYV9kZXYpOworCQlpZiAoZXJyIDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgInNwY2E1MDBfZnVsbF9yZXNldCBmYWlsZWQiKTsKKwkJLyogZW5hYmxlIGRyb3AgcGFja2V0ICovCisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NTBhLCAweDAwMDEpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODg4MCwgMCk7CisJCWVyciA9IHNwY2E1MHhfc2V0dXBfcXRhYmxlKGdzcGNhX2RldiwKKwkJCQkJICAgMHgwMCwgMHg4ODAwLCAweDg4NDAsCisJCQkJCSAgIHF0YWJsZV9rb2Rha19lejIwMCk7CisJCWlmIChlcnIgPCAwKQorCQkJUERFQlVHKERfRVJSLCAic3BjYTUweF9zZXR1cF9xdGFibGUgZmFpbGVkIik7CisJCXNwY2E1MDBfc2V0bW9kZShnc3BjYV9kZXYsIHhtdWx0LCB5bXVsdCk7CisKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDIwLCAweDAwMDEsIDB4MDAwNCk7CisKKwkJLyogc3dpdGNoIHRvIHZpZGVvIGNhbWVyYSBtb2RlICovCisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MDAwLCAweDAwMDQpOworCisJCWlmIChyZWdfcl93YWl0KGdzcGNhX2RldiwgMCwgMHg4MDAwLCAweDQ0KSAhPSAwKQorCQkJUERFQlVHKERfRVJSLCAicmVnX3Jfd2FpdCgpIGZhaWxlZCIpOworCisJCXJlZ19yKGdzcGNhX2RldiwgMHg4MTZiLCAxKTsKKwkJRGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNmIsIERhdGEpOworCisvKgkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwMF92aXN1YWxfZGVmYXVsdHMpOyAqLworCQlicmVhazsKKworCWNhc2UgQmVucURDMTAxNjoKKwljYXNlIERMaW5rRFNDMzUwOgkJLyogRmFtaWx5Q2FtIDMwMCAqLworCWNhc2UgQWlwdGVrUG9ja2V0RFY6CQkvKiBBaXB0ZWsgUG9ja2V0RFYgKi8KKwljYXNlIEdzbWFydG1pbmk6CQkvKk11c3RlayBHc21hcnQgTWluaSAqLworCWNhc2UgTXVzdGVrR3NtYXJ0MzAwOgkJLyogTXVzdGVrIEdzbWFydCAzMDAgKi8KKwljYXNlIFBhbG1QaXhEQzg1OgorCWNhc2UgT3B0aW1lZGlhOgorCWNhc2UgVG9wdHJvSW5kdXM6CisJY2FzZSBBZ2ZhQ2wyMDoKKwkJc3BjYTUwMF9yZWluaXQoZ3NwY2FfZGV2KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDBkMDEsIDB4MDEpOworCQkvKiBlbmFibGUgZHJvcCBwYWNrZXQgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDg1MGEsIDB4MDAwMSk7CisKKwkJZXJyID0gc3BjYTUweF9zZXR1cF9xdGFibGUoZ3NwY2FfZGV2LAorCQkJCSAgIDB4MDAsIDB4ODgwMCwgMHg4ODQwLCBxdGFibGVfcG9ja2V0ZHYpOworCQlpZiAoZXJyIDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgInNwY2E1MHhfc2V0dXBfcXRhYmxlIGZhaWxlZCIpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODg4MCwgMik7CisKKwkJLyogZmFtaWx5Y2FtIFF1aWNrc21hcnQgcG9ja2V0RFYgc3R1ZmYgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgwMGEsIDB4MDApOworCQkvKiBTZXQgYWdjIHRyYW5zZmVyOiBzeW5jZWQgaW5iZXR3ZWVuIGZyYW1lcyAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODIwZiwgMHgwMSk7CisJCS8qIEluaXQgU0RSQU0gLSBuZWVkZWQgZm9yIFNEUkFNIGFjY2VzcyAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODcwYSwgMHgwNCk7CisKKwkJc3BjYTUwMF9zZXRtb2RlKGdzcGNhX2RldiwgeG11bHQsIHltdWx0KTsKKwkJLyogc3dpdGNoIHRvIHZpZGVvIGNhbWVyYSBtb2RlICovCisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MDAwLCAweDAwMDQpOworCisJCXJlZ19yX3dhaXQoZ3NwY2FfZGV2LCAwLCAweDgwMDAsIDB4NDQpOworCisJCXJlZ19yKGdzcGNhX2RldiwgMHg4MTZiLCAxKTsKKwkJRGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNmIsIERhdGEpOworCQlicmVhazsKKwljYXNlIExvZ2l0ZWNoVHJhdmVsZXI6CisJY2FzZSBMb2dpdGVjaENsaWNrU21hcnQ1MTA6CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgMHgwMCwgMHgwMCk7CisJCS8qIGVuYWJsZSBkcm9wIHBhY2tldCAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODUwYSwgMHgwMDAxKTsKKworCQllcnIgPSBzcGNhNTB4X3NldHVwX3F0YWJsZShnc3BjYV9kZXYsCisJCQkJCTB4MDAsIDB4ODgwMCwKKwkJCQkJMHg4ODQwLCBxdGFibGVfY3JlYXRpdmVfcGNjYW0pOworCQlpZiAoZXJyIDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgInNwY2E1MHhfc2V0dXBfcXRhYmxlIGZhaWxlZCIpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODg4MCwgMyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MDBhLCAweDAwKTsKKwkJLyogSW5pdCBTRFJBTSAtIG5lZWRlZCBmb3IgU0RSQU0gYWNjZXNzICovCisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NzBhLCAweDA0KTsKKworCQlzcGNhNTAwX3NldG1vZGUoZ3NwY2FfZGV2LCB4bXVsdCwgeW11bHQpOworCisJCS8qIHN3aXRjaCB0byB2aWRlbyBjYW1lcmEgbW9kZSAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODAwMCwgMHgwMDA0KTsKKwkJcmVnX3Jfd2FpdChnc3BjYV9kZXYsIDAsIDB4ODAwMCwgMHg0NCk7CisKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDgxNmIsIDEpOworCQlEYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE2YiwgRGF0YSk7CisJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIENsaWNrc21hcnQ1MTBfZGVmYXVsdHMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIDAsIDB4ODAwMywgMHgwMCk7CisKKwkvKiBzd2l0Y2ggdG8gdmlkZW8gY2FtZXJhIG1vZGUgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODAwMCwgMHgwMDA0KTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4ODAwMCwgMSk7CisJUERFQlVHKERfU1RSRUFNLCAic3RvcCBTUENBNTAwIGRvbmUgcmVnODAwMDogMHglMngiLAorCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0pOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2Nsb3NlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCV9fdTggKnMsICpkOworCXN0YXRpYyBfX3U4IGZmZDlbXSA9IHsweGZmLCAweGQ5fTsKKworLyogZnJhbWVzIGFyZSBqcGVnIDQuMS4xIHdpdGhvdXQgMHhmZiBlc2NhcGUgKi8KKwlpZiAoZGF0YVswXSA9PSAweGZmKSB7CisJCWlmIChkYXRhWzFdICE9IDB4MDEpIHsJLyogZHJvcCBwYWNrZXQgKi8KKy8qCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7ICovCisJCQlyZXR1cm47CisJCX0KKwkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWZmZDksIDIpOworCisJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLworCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwgc2QtPnFpbmRleCwgMHgyMik7CisKKwkJZGF0YSArPSBTUENBNTAwX09GRlNFVF9EQVRBOworCQlsZW4gLT0gU1BDQTUwMF9PRkZTRVRfREFUQTsKKwl9IGVsc2UgeworCQlkYXRhICs9IDE7CisJCWxlbiAtPSAxOworCX0KKworCS8qIGFkZCAweDAwIGFmdGVyIDB4ZmYgKi8KKwlmb3IgKGkgPSBsZW47IC0taSA+PSAwOyApCisJCWlmIChkYXRhW2ldID09IDB4ZmYpCisJCQlicmVhazsKKwlpZiAoaSA8IDApIHsJCQkvKiBubyAweGZmICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CisJCXJldHVybjsKKwl9CisJcyA9IGRhdGE7CisJZCA9IHNkLT5wYWNrZXQ7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCSpkKysgPSAqcysrOworCQlpZiAoc1stMV0gPT0gMHhmZikKKwkJCSpkKysgPSAweDAwOworCX0KKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAorCQkJc2QtPnBhY2tldCwgZCAtIHNkLT5wYWNrZXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE2NywKKwkJCShfX3U4KSAoc2QtPmJyaWdodG5lc3MgLSAxMjgpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4ODE2NywgMSk7CisJaWYgKHJldCA+PSAwKQorCQlzZC0+YnJpZ2h0bmVzcyA9IHJldCArIDEyODsKK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MTY4LCBzZC0+Y29udHJhc3QpOworfQorCitzdGF0aWMgdm9pZCBnZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MCwgMHg4MTY4LCAxKTsKKwlpZiAocmV0ID49IDApCisJCXNkLT5jb250cmFzdCA9IHJldDsKK30KKworc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE2OSwgc2QtPmNvbG9ycyk7Cit9CisKK3N0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MCwgMHg4MTY5LCAxKTsKKwlpZiAocmV0ID49IDApCisJCXNkLT5jb2xvcnMgPSByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9ycyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZ2V0Y29sb3JzKGdzcGNhX2Rldik7CisJKnZhbCA9IHNkLT5jb2xvcnM7CisJcmV0dXJuIDA7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLm9wZW4gPSBzZF9vcGVuLAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAorCS5jbG9zZSA9IHNkX2Nsb3NlLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCisjZGVmaW5lIERWTk0obmFtZSkgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSBuYW1lCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0MGEsIDB4MDMwMCksIERWTk0oIktvZGFrIEVaMjAwIil9LAorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDBhKSwgRFZOTSgiQ3JlYXRpdmUgUEMtQ0FNIDMwMCIpfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5MCksIERWTk0oIkxvZ2l0ZWNoIFF1aWNrQ2FtIHRyYXZlbGVyIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOTAwKSwgRFZOTSgiTG9naXRlY2ggSW5jLiBDbGlja1NtYXJ0IDMxMCIpfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDkwMSksIERWTk0oIkxvZ2l0ZWNoIEluYy4gQ2xpY2tTbWFydCA1MTAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGE1LCAweDMwMGMpLCBEVk5NKCJCZW5xIERDMTAxNiIpfSwKKwl7VVNCX0RFVklDRSgweDA0ZmMsIDB4NzMzMyksIERWTk0oIlBhbG1QaXhEQzg1Iil9LAorCXtVU0JfREVWSUNFKDB4MDU1ZiwgMHhjMjAwKSwgRFZOTSgiTXVzdGVrIEdzbWFydCAzMDAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGMyMjApLCBEVk5NKCJHc21hcnQgTWluaSIpfSwKKwl7VVNCX0RFVklDRSgweDA2YmQsIDB4MDQwNCksIERWTk0oIkFnZmEgQ0wyMCIpfSwKKwl7VVNCX0RFVklDRSgweDA2YmUsIDB4MDgwMCksIERWTk0oIk9wdGltZWRpYSIpfSwKKwl7VVNCX0RFVklDRSgweDA4NGQsIDB4MDAwMyksIERWTk0oIkQtTGluayBEU0MtMzUwIil9LAorCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgwMTAzKSwgRFZOTSgiQWlwdGVrIFBvY2tldERWIil9LAorCXtVU0JfREVWSUNFKDB4Mjg5OSwgMHgwMTJjKSwgRFZOTSgiVG9wdHJvIEluZHVzdHJpYWwiKX0sCisJe1VTQl9ERVZJQ0UoMHg4MDg2LCAweDA2MzApLCBEVk5NKCJJbnRlbCBQb2NrZXQgUEMgQ2FtZXJhIil9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAidiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlOTI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCkBAIC0wLDAgKzEsMjIyOSBAQAorLyoKKyAqIFNQQ0E1MDEgY2hpcCBiYXNlZCBjYW1lcmFzIGluaXRpYWxpemF0aW9uIGRhdGEKKyAqCisgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic3BjYTUwMSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDEsIDcpCitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiMi4xLjciOworCitNT0RVTEVfQVVUSE9SKCJNaWNoZWwgWGhhYXJkIDxteGhhYXJkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvU1BDQTUwMSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJdW5zaWduZWQgc2hvcnQgY29udHJhc3Q7CisJX191OCBicmlnaHRuZXNzOworCV9fdTggY29sb3JzOworCisJY2hhciBzdWJ0eXBlOworI2RlZmluZSBBcm93YW5hMzAwS0NNT1NDYW1lcmEgMAorI2RlZmluZSBJbnRlbENyZWF0ZUFuZFNoYXJlIDEKKyNkZWZpbmUgS29kYWtEVkMzMjUgMgorI2RlZmluZSBNeXN0RnJvbU9yaVVua25vd25DYW1lcmEgMworI2RlZmluZSBTbWlsZUludGxDYW1lcmEgNAorI2RlZmluZSBUaHJlZUNvbUhvbWVDb25uZWN0TGl0ZSA1CisjZGVmaW5lIFZpZXdRdWVzdE0zMThCIDYKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIE1ZX0JSSUdIVE5FU1MgMAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxMjcsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSA2MywKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisjZGVmaW5lIE1ZX0NPTlRSQVNUIDEKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAweGZmZmYsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweGFhMDAsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAorCX0sCisjZGVmaW5lIE1ZX0NPTE9SIDIKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbG9yIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDYzLAorCQkuc3RlcCAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMzEsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb2xvcnMsCisJICAgIC5nZXQgPSBzZF9nZXRjb2xvcnMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU1BDQTUwMSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAorCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMyAvIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMn0sCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfU1BDQTUwMSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU1BDQTUwMSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCit9OworCisjZGVmaW5lIFNQQ0E1MFhfUkVHX1VTQiAweDIJLyogc3BjYTUwNSA1MDEgKi8KKy8qCisgKiBEYXRhIHRvIGluaXRpYWxpemUgYSBTUENBNTAxLiBGcm9tIGEgY2FwdHVyZSBmaWxlIHByb3ZpZGVkIGJ5IEJpbGwgUm9laGwKKyAqIFdpdGggU1BDQTUwMSBjaGlwIGRlc2NyaXB0aW9uCisgKi8KKyNkZWZpbmUgQ0NEU1BfU0VUCQkvKiBzZXQgQ0NEU1AgcGFyYW1ldGVycyAqLworI2RlZmluZSBUR19TRVQJCQkvKiBzZXQgdGltZSBnZW5lcmF0b3Igc2V0ICovCisjdW5kZWYgRFNQV0lOX1NFVAkJLyogc2V0IERTUCB3aW5kb3dzIHBhcmFtZXRlcnMgKi8KKyN1bmRlZiBBTFRFUl9HQU1BCS8qIFNldCBhbHRlcm5hdGUgc2V0IHRvIFlVViB0cmFuc2Zvcm0gY29lZmZzLiAqLworI2RlZmluZSBTUENBNTAxX1NOQVBCSVQgMHg4MAorI2RlZmluZSBTUENBNTAxX1NOQVBDVFJMIDB4MTAKKy8qIEZyYW1lIHBhY2tldCBoZWFkZXIgb2Zmc2V0cyBmb3IgdGhlIHNwY2E1MDEgKi8KKyNkZWZpbmUgU1BDQTUwMV9PRkZTRVRfR1BJTyAgIDEKKyNkZWZpbmUgU1BDQTUwMV9PRkZTRVRfVFlQRSAgIDIKKyNkZWZpbmUgU1BDQTUwMV9PRkZTRVRfVFVSTjNBIDMKKyNkZWZpbmUgU1BDQTUwMV9PRkZTRVRfRlJBTVNFUSA0CisjZGVmaW5lIFNQQ0E1MDFfT0ZGU0VUX0NPTVBSRVNTIDUKKyNkZWZpbmUgU1BDQTUwMV9PRkZTRVRfUVVBTlQgNgorI2RlZmluZSBTUENBNTAxX09GRlNFVF9RVUFOVDIgNworI2RlZmluZSBTUENBNTAxX09GRlNFVF9EQVRBIDgKKworI2RlZmluZSBTUENBNTAxX1BST1BfQ09NUF9FTkFCTEUoZCkgKChkKSAmIDEpCisjZGVmaW5lIFNQQ0E1MDFfUFJPUF9TTkFQKGQpICgoZCkgJiAweDQwKQorI2RlZmluZSBTUENBNTAxX1BST1BfU05BUF9DVFJMKGQpICgoZCkgJiAweDEwKQorI2RlZmluZSBTUENBNTAxX1BST1BfQ09NUF9USFJFU0goZCkgKCgoZCkgJiAweDBlKSA+PiAxKQorI2RlZmluZSBTUENBNTAxX1BST1BfQ09NUF9RVUFOVChkKSAoKChkKSAmIDB4NzApID4+IDQpCisKKy8qIFNQQ0E1MDEgQ0NEU1AgY29udHJvbCAqLworI2RlZmluZSBTUENBNTAxX1JFR19DQ0RTUCAweDAxCisvKiBTUENBNTAxIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycyAqLworI2RlZmluZSBTUENBNTAxX1JFR19DVExSTCAweDAyCisKKy8qIHJlZ2lzdGVycyBmb3IgY29sb3IgY29ycmVjdGlvbiBhbmQgWVVWIHRyYW5zZm9ybWF0aW9uICovCisjZGVmaW5lIFNQQ0E1MDFfQTExIDB4MDgKKyNkZWZpbmUgU1BDQTUwMV9BMTIgMHgwOQorI2RlZmluZSBTUENBNTAxX0ExMyAweDBBCisjZGVmaW5lIFNQQ0E1MDFfQTIxIDB4MEIKKyNkZWZpbmUgU1BDQTUwMV9BMjIgMHgwQworI2RlZmluZSBTUENBNTAxX0EyMyAweDBECisjZGVmaW5lIFNQQ0E1MDFfQTMxIDB4MEUKKyNkZWZpbmUgU1BDQTUwMV9BMzIgMHgwRgorI2RlZmluZSBTUENBNTAxX0EzMyAweDEwCisKKy8qIERhdGEgZm9yIHZpZGVvIGNhbWVyYSBpbml0aWFsaXphdGlvbiBiZWZvcmUgY2FwdHVyaW5nICovCitzdGF0aWMgY29uc3QgX191MTYgc3BjYTUwMV9vcGVuX2RhdGFbXVszXSA9IHsKKwkvKiBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KKworCXsweDIsIDB4NTAsIDB4MDB9LAkvKiBDL1MgZW5hYmxlIHNvZnQgcmVzZXQgKi8KKwl7MHgyLCAweDQwLCAweDAwfSwJLyogQy9TIGRpc2FibGUgc29mdCByZXNldCAqLworCXsweDIsIDB4MDIsIDB4MDV9LAkvKiBDL1MgZ2VuZXJhbCBwdXJwb3NlIEkvTyBkYXRhICovCisJezB4MiwgMHgwMywgMHgwNX0sCS8qIEMvUyBnZW5lcmFsIHB1cnBvc2UgSS9PIGRhdGEgKi8KKworI2lmZGVmIENDRFNQX1NFVAorCXsweDEsIDB4MzgsIDB4MDF9LAkvKiBDQ0RTUCBvcHRpb25zICovCisJezB4MSwgMHgwNSwgMHgwMn0sIC8qIENDRFNQIE9wdGljYWwgYmxhY2sgbGV2ZWwgZm9yIHVzZXIgc2V0dGluZ3MgKi8KKwl7MHgxLCAweEMwLCAweDAzfSwJLyogQ0NEU1AgT3B0aWNhbCBibGFjayBzZXR0aW5ncyAqLworCisJezB4MSwgMHg2NywgMHgwN30sCisJezB4MSwgMHg2MywgMHgzZn0sCS8qIENDRFNQIENDRCBnYW1tYSBlbmFibGUgKi8KKwl7MHgxLCAweDAzLCAweDU2fSwJLyogQWRkIGdhbW1hIGNvcnJlY3Rpb24gKi8KKworCXsweDEsIDB4RkYsIDB4MTV9LAkvKiBDQ0RTUCBIaWdoIGx1bWluYW5jZSBmb3Igd2hpdGUgYmFsYW5jZSAqLworCXsweDEsIDB4MDEsIDB4MTZ9LAkvKiBDQ0RTUCBMb3cgbHVtaW5hbmNlIGZvciB3aGl0ZSBiYWxhbmNlICovCisKKy8qIENvbG9yIGNvcnJlY3Rpb24gYW5kIFJHQi10by1ZVVYgdHJhbnNmb3JtYXRpb24gY29lZmZpY2llbnRzIGNoYW5naW5nICovCisjaWZkZWYgQUxURVJfR0FNQQorCXsweDAsIDB4MDAsIDB4MDh9LAkvKiBBMTEgKi8KKwl7MHgwLCAweDAwLCAweDA5fSwJLyogQTEyICovCisJezB4MCwgMHg5MCwgMHgwQX0sCS8qIEExMyAqLworCXsweDAsIDB4MTIsIDB4MEJ9LAkvKiBBMjEgKi8KKwl7MHgwLCAweDAwLCAweDBDfSwJLyogQTIyICovCisJezB4MCwgMHgwMCwgMHgwRH0sCS8qIEEyMyAqLworCXsweDAsIDB4MDAsIDB4MEV9LAkvKiBBMzEgKi8KKwl7MHgwLCAweDAyLCAweDBGfSwJLyogQTMyICovCisJezB4MCwgMHgwMCwgMHgxMH0sCS8qIEEzMyAqLworI2Vsc2UKKwl7MHgxLCAweDJhLCAweDA4fSwJLyogQTExIDB4MzEgKi8KKwl7MHgxLCAweGY4LCAweDA5fSwJLyogQTEyIGY4ICovCisJezB4MSwgMHhmOCwgMHgwQX0sCS8qIEExMyBmOCAqLworCXsweDEsIDB4ZjgsIDB4MEJ9LAkvKiBBMjEgZjggKi8KKwl7MHgxLCAweDE0LCAweDBDfSwJLyogQTIyIDB4MTQgKi8KKwl7MHgxLCAweGY4LCAweDBEfSwJLyogQTIzIGY4ICovCisJezB4MSwgMHhmOCwgMHgwRX0sCS8qIEEzMSBmOCAqLworCXsweDEsIDB4ZjgsIDB4MEZ9LAkvKiBBMzIgZjggKi8KKwl7MHgxLCAweDIwLCAweDEwfSwJLyogQTMzIDB4MjAgKi8KKyNlbmRpZgorCXsweDEsIDB4MDAsIDB4MTF9LAkvKiBSIG9mZnNldCAqLworCXsweDEsIDB4MDAsIDB4MTJ9LAkvKiBHIG9mZnNldCAqLworCXsweDEsIDB4MDAsIDB4MTN9LAkvKiBCIG9mZnNldCAqLworCXsweDEsIDB4MDAsIDB4MTR9LAkvKiBHQiBvZmZzZXQgKi8KKworI2VuZGlmCisKKyNpZmRlZiBUR19TRVQKKwkvKiBUaW1lIGdlbmVyYXRvciBtYW5pcHVsYXRpb25zICovCisJezB4MCwgMHhmYywgMHgwfSwJLyogU2V0IHVwIGhpZ2ggYml0cyBvZiBzaHV0dGVyIHNwZWVkICovCisJezB4MCwgMHgwMSwgMHgxfSwJLyogU2V0IHVwIGxvdyBiaXRzIG9mIHNodXR0ZXIgc3BlZWQgKi8KKworCXsweDAsIDB4ZTQsIDB4MDR9LAkvKiBEQ0xLKjIgY2xvY2sgcGhhc2UgYWRqdXN0bWVudCAqLworCXsweDAsIDB4MDgsIDB4MDV9LAkvKiBBRENLIHBoYXNlIGFkanVzdG1lbnQsIGludi4gZXh0LiBWQiAqLworCXsweDAsIDB4MDMsIDB4MDZ9LAkvKiBGUiBwaGFzZSBhZGp1c3RtZW50ICovCisJezB4MCwgMHgwMSwgMHgwN30sCS8qIEZDRFMgcGhhc2UgYWRqdXN0bWVudCAqLworCXsweDAsIDB4MzksIDB4MDh9LAkvKiBGUyBwaGFzZSBhZGp1c3RtZW50ICovCisJezB4MCwgMHg4OCwgMHgwYX0sCS8qIEZIMSBwaGFzZSBhbmQgZGVsYXkgYWRqdXN0bWVudCAqLworCXsweDAsIDB4MDMsIDB4MGZ9LAkvKiBwaXhlbCBpZGVudGlmaWNhdGlvbiAqLworCXsweDAsIDB4MDAsIDB4MTF9LAkvKiBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChkZWZhdWx0KSAqLworCisJLypWRVJZIHN0cmFuZ2UgbWFuaXB1bGF0aW9ucyB3aXRoCisJICogc2VsZWN0IERNQ0xQIG9yIE9CUFggdG8gYmUgQURDTFAgb3V0cHV0ICgweDBDKQorCSAqIE9QQiBhbHdheXMgdG9nZ2xlIG9yIG5vdCAoMHgwRCkgYnV0IHRoZXkgYWxsb3cKKwkgKiB1cyB0byBzZXQgdXAgYnJpZ2h0bmVzcworCSAqLworCXsweDAsIDB4MDEsIDB4MGN9LAorCXsweDAsIDB4ZTAsIDB4MGR9LAorCS8qIERvbmUgKi8KKyNlbmRpZgorCisjaWZkZWYgRFNQV0lOX1NFVAorCXsweDEsIDB4YTAsIDB4MDF9LAkvKiBTZXR0aW5nIGltYWdlIHByb2Nlc3NpbmcgcGFyYW1ldGVycyAqLworCXsweDEsIDB4MWMsIDB4MTd9LAkvKiBDaGFuZ2luZyBXaW5kb3dzIHBvc2l0aW9ucyBYMSAqLworCXsweDEsIDB4ZTIsIDB4MTl9LAkvKiBYMiAqLworCXsweDEsIDB4MWMsIDB4MWJ9LAkvKiBYMyAqLworCXsweDEsIDB4ZTIsIDB4MWR9LAkvKiBYNCAqLworCXsweDEsIDB4NWYsIDB4MWZ9LAkvKiBYNSAqLworCXsweDEsIDB4MzIsIDB4MjB9LAkvKiBZNSAqLworCXsweDEsIDB4MDEsIDB4MTB9LAkvKiBDaGFuZ2luZyBBMzMgKi8KKyNlbmRpZgorCisJezB4MiwgMHgyMDRhLCAweDA3fSwvKiBTZXR0aW5nIHZpZGVvIGNvbXByZXNzaW9uICYgcmVzb2x1dGlvbiAxNjB4MTIwICovCisJezB4MiwgMHg5NCwgMHgwNn0sCS8qIFNldHRpbmcgdmlkZW8gbm8gY29tcHJlc3Npb24gKi8KKwl7fQorfTsKKworLyoKKyAgIFRoZSBTUENBeHh4IGRvY3MgZnJvbSBTdW5wbHVzIGRvY3VtZW50IHRoZXNlIHZhbHVlcworICAgaW4gdGFibGVzLCBvbmUgdGFibGUgcGVyIHJlZ2lzdGVyIG51bWJlci4gIEluIHRoZSBkYXRhCisgICBiZWxvdywgZG1SZXF1ZXN0IGlzIHRoZSByZWdpc3RlciBudW1iZXIsIGluZGV4IGlzIHRoZSBBZGRyLAorICAgYW5kIHZhbHVlIGlzIGEgY29tYmluYXRpb24gb2YgQml0IHZhbHVlcy4KKyAgIEJpdCAgVmFsdWUgKGhleCkKKyAgIDAgICAgMDEKKyAgIDEgICAgMDIKKyAgIDIgICAgMDQKKyAgIDMgICAgMDgKKyAgIDQgICAgMTAKKyAgIDUgICAgMjAKKyAgIDYgICAgNDAKKyAgIDcgICAgODAKKyAqLworCisvKiBEYXRhIGZvciBjaGlwIGluaXRpYWxpemF0aW9uIChzZXQgZGVmYXVsdCB2YWx1ZXMpICovCitzdGF0aWMgY29uc3QgX191MTYgc3BjYTUwMV9pbml0X2RhdGFbXVszXSA9IHsKKwkvKiBTZXQgYWxsIHRoZSB2YWx1ZXMgdG8gcG93ZXJ1cCBkZWZhdWx0cyAqLworCS8qIGJtUmVxdWVzdCx2YWx1ZSxpbmRleCAqLworCXsweDAsIDB4QUEsIDB4MDB9LAorCXsweDAsIDB4MDIsIDB4MDF9LAorCXsweDAsIDB4MDEsIDB4MDJ9LAorCXsweDAsIDB4MDIsIDB4MDN9LAorCXsweDAsIDB4Q0UsIDB4MDR9LAorCXsweDAsIDB4MDAsIDB4MDV9LAorCXsweDAsIDB4MDAsIDB4MDZ9LAorCXsweDAsIDB4MDAsIDB4MDd9LAorCXsweDAsIDB4MDAsIDB4MDh9LAorCXsweDAsIDB4MDAsIDB4MDl9LAorCXsweDAsIDB4OTAsIDB4MEF9LAorCXsweDAsIDB4MTIsIDB4MEJ9LAorCXsweDAsIDB4MDAsIDB4MEN9LAorCXsweDAsIDB4MDAsIDB4MER9LAorCXsweDAsIDB4MDAsIDB4MEV9LAorCXsweDAsIDB4MDIsIDB4MEZ9LAorCXsweDAsIDB4MDAsIDB4MTB9LAorCXsweDAsIDB4MDAsIDB4MTF9LAorCXsweDAsIDB4MDAsIDB4MTJ9LAorCXsweDAsIDB4MDAsIDB4MTN9LAorCXsweDAsIDB4MDAsIDB4MTR9LAorCXsweDAsIDB4MDAsIDB4MTV9LAorCXsweDAsIDB4MDAsIDB4MTZ9LAorCXsweDAsIDB4MDAsIDB4MTd9LAorCXsweDAsIDB4MDAsIDB4MTh9LAorCXsweDAsIDB4MDAsIDB4MTl9LAorCXsweDAsIDB4MDAsIDB4MUF9LAorCXsweDAsIDB4MDAsIDB4MUJ9LAorCXsweDAsIDB4MDAsIDB4MUN9LAorCXsweDAsIDB4MDAsIDB4MUR9LAorCXsweDAsIDB4MDAsIDB4MUV9LAorCXsweDAsIDB4MDAsIDB4MUZ9LAorCXsweDAsIDB4MDAsIDB4MjB9LAorCXsweDAsIDB4MDAsIDB4MjF9LAorCXsweDAsIDB4MDAsIDB4MjJ9LAorCXsweDAsIDB4MDAsIDB4MjN9LAorCXsweDAsIDB4MDAsIDB4MjR9LAorCXsweDAsIDB4MDAsIDB4MjV9LAorCXsweDAsIDB4MDAsIDB4MjZ9LAorCXsweDAsIDB4MDAsIDB4Mjd9LAorCXsweDAsIDB4MDAsIDB4Mjh9LAorCXsweDAsIDB4MDAsIDB4Mjl9LAorCXsweDAsIDB4MDAsIDB4MkF9LAorCXsweDAsIDB4MDAsIDB4MkJ9LAorCXsweDAsIDB4MDAsIDB4MkN9LAorCXsweDAsIDB4MDAsIDB4MkR9LAorCXsweDAsIDB4MDAsIDB4MkV9LAorCXsweDAsIDB4MDAsIDB4MkZ9LAorCXsweDAsIDB4MDAsIDB4MzB9LAorCXsweDAsIDB4MDAsIDB4MzF9LAorCXsweDAsIDB4MDAsIDB4MzJ9LAorCXsweDAsIDB4MDAsIDB4MzN9LAorCXsweDAsIDB4MDAsIDB4MzR9LAorCXsweDAsIDB4MDAsIDB4MzV9LAorCXsweDAsIDB4MDAsIDB4MzZ9LAorCXsweDAsIDB4MDAsIDB4Mzd9LAorCXsweDAsIDB4MDAsIDB4Mzh9LAorCXsweDAsIDB4MDAsIDB4Mzl9LAorCXsweDAsIDB4MDAsIDB4M0F9LAorCXsweDAsIDB4MDAsIDB4M0J9LAorCXsweDAsIDB4MDAsIDB4M0N9LAorCXsweDAsIDB4MDAsIDB4M0R9LAorCXsweDAsIDB4MDAsIDB4M0V9LAorCXsweDAsIDB4MDAsIDB4M0Z9LAorCXsweDAsIDB4MDAsIDB4NDB9LAorCXsweDAsIDB4MDAsIDB4NDF9LAorCXsweDAsIDB4MDAsIDB4NDJ9LAorCXsweDAsIDB4MDAsIDB4NDN9LAorCXsweDAsIDB4MDAsIDB4NDR9LAorCXsweDAsIDB4MDAsIDB4NDV9LAorCXsweDAsIDB4MDAsIDB4NDZ9LAorCXsweDAsIDB4MDAsIDB4NDd9LAorCXsweDAsIDB4MDAsIDB4NDh9LAorCXsweDAsIDB4MDAsIDB4NDl9LAorCXsweDAsIDB4MDAsIDB4NEF9LAorCXsweDAsIDB4MDAsIDB4NEJ9LAorCXsweDAsIDB4MDAsIDB4NEN9LAorCXsweDAsIDB4MDAsIDB4NER9LAorCXsweDAsIDB4MDAsIDB4NEV9LAorCXsweDAsIDB4MDAsIDB4NEZ9LAorCXsweDAsIDB4MDAsIDB4NTB9LAorCXsweDAsIDB4MDAsIDB4NTF9LAorCXsweDAsIDB4MDAsIDB4NTJ9LAorCXsweDAsIDB4MDAsIDB4NTN9LAorCXsweDAsIDB4MDAsIDB4NTR9LAorCXsweDAsIDB4MDAsIDB4NTV9LAorCXsweDAsIDB4MDAsIDB4NTZ9LAorCXsweDAsIDB4MDAsIDB4NTd9LAorCXsweDAsIDB4MDAsIDB4NTh9LAorCXsweDAsIDB4MDAsIDB4NTl9LAorCXsweDAsIDB4MDAsIDB4NUF9LAorCXsweDAsIDB4MDAsIDB4NUJ9LAorCXsweDAsIDB4MDAsIDB4NUN9LAorCXsweDAsIDB4MDAsIDB4NUR9LAorCXsweDAsIDB4MDAsIDB4NUV9LAorCXsweDAsIDB4MDAsIDB4NUZ9LAorCXsweDAsIDB4MDAsIDB4NjB9LAorCXsweDAsIDB4MDAsIDB4NjF9LAorCXsweDAsIDB4MDAsIDB4NjJ9LAorCXsweDAsIDB4MDAsIDB4NjN9LAorCXsweDAsIDB4MDAsIDB4NjR9LAorCXsweDAsIDB4MDAsIDB4NjV9LAorCXsweDAsIDB4MDAsIDB4NjZ9LAorCXsweDAsIDB4MDAsIDB4Njd9LAorCXsweDAsIDB4MDAsIDB4Njh9LAorCXsweDAsIDB4MDAsIDB4Njl9LAorCXsweDAsIDB4MDAsIDB4NkF9LAorCXsweDAsIDB4MDAsIDB4NkJ9LAorCXsweDAsIDB4MDAsIDB4NkN9LAorCXsweDAsIDB4MDAsIDB4NkR9LAorCXsweDAsIDB4MDAsIDB4NkV9LAorCXsweDAsIDB4MDAsIDB4NkZ9LAorCXsweDAsIDB4MDAsIDB4NzB9LAorCXsweDAsIDB4MDAsIDB4NzF9LAorCXsweDAsIDB4MDAsIDB4NzJ9LAorCXsweDAsIDB4MDAsIDB4NzN9LAorCXsweDAsIDB4MDAsIDB4NzR9LAorCXsweDAsIDB4MDAsIDB4NzV9LAorCXsweDAsIDB4MDAsIDB4NzZ9LAorCXsweDAsIDB4MDAsIDB4Nzd9LAorCXsweDAsIDB4MDAsIDB4Nzh9LAorCXsweDAsIDB4MDAsIDB4Nzl9LAorCXsweDAsIDB4MDAsIDB4N0F9LAorCXsweDAsIDB4MDAsIDB4N0J9LAorCXsweDAsIDB4MDAsIDB4N0N9LAorCXsweDAsIDB4MDAsIDB4N0R9LAorCXsweDAsIDB4MDAsIDB4N0V9LAorCXsweDAsIDB4MDAsIDB4N0Z9LAorCXsweDAsIDB4MDAsIDB4ODB9LAorCXsweDAsIDB4MDAsIDB4ODF9LAorCXsweDAsIDB4MDAsIDB4ODJ9LAorCXsweDAsIDB4MDAsIDB4ODN9LAorCXsweDAsIDB4MDAsIDB4ODR9LAorCXsweDAsIDB4MDAsIDB4ODV9LAorCXsweDAsIDB4MDAsIDB4ODZ9LAorCXsweDAsIDB4MDAsIDB4ODd9LAorCXsweDAsIDB4MDAsIDB4ODh9LAorCXsweDAsIDB4MDAsIDB4ODl9LAorCXsweDAsIDB4MDAsIDB4OEF9LAorCXsweDAsIDB4MDAsIDB4OEJ9LAorCXsweDAsIDB4MDAsIDB4OEN9LAorCXsweDAsIDB4MDAsIDB4OER9LAorCXsweDAsIDB4MDAsIDB4OEV9LAorCXsweDAsIDB4MDAsIDB4OEZ9LAorCXsweDAsIDB4MDAsIDB4OTB9LAorCXsweDAsIDB4MDAsIDB4OTF9LAorCXsweDAsIDB4MDAsIDB4OTJ9LAorCXsweDAsIDB4MDAsIDB4OTN9LAorCXsweDAsIDB4MDAsIDB4OTR9LAorCXsweDAsIDB4MDAsIDB4OTV9LAorCXsweDAsIDB4MDAsIDB4OTZ9LAorCXsweDAsIDB4MDAsIDB4OTd9LAorCXsweDAsIDB4MDAsIDB4OTh9LAorCXsweDAsIDB4MDAsIDB4OTl9LAorCXsweDAsIDB4MDAsIDB4OUF9LAorCXsweDAsIDB4MDAsIDB4OUJ9LAorCXsweDAsIDB4MDAsIDB4OUN9LAorCXsweDAsIDB4MDAsIDB4OUR9LAorCXsweDAsIDB4MDAsIDB4OUV9LAorCXsweDAsIDB4MDAsIDB4OUZ9LAorCXsweDAsIDB4MDAsIDB4QTB9LAorCXsweDAsIDB4MDAsIDB4QTF9LAorCXsweDAsIDB4MDAsIDB4QTJ9LAorCXsweDAsIDB4MDAsIDB4QTN9LAorCXsweDAsIDB4MDAsIDB4QTR9LAorCXsweDAsIDB4MDAsIDB4QTV9LAorCXsweDAsIDB4MDAsIDB4QTZ9LAorCXsweDAsIDB4MDAsIDB4QTd9LAorCXsweDAsIDB4MDAsIDB4QTh9LAorCXsweDAsIDB4MDAsIDB4QTl9LAorCXsweDAsIDB4MDAsIDB4QUF9LAorCXsweDAsIDB4MDAsIDB4QUJ9LAorCXsweDAsIDB4MDAsIDB4QUN9LAorCXsweDAsIDB4MDAsIDB4QUR9LAorCXsweDAsIDB4MDAsIDB4QUV9LAorCXsweDAsIDB4MDAsIDB4QUZ9LAorCXsweDAsIDB4MDAsIDB4QjB9LAorCXsweDAsIDB4MDAsIDB4QjF9LAorCXsweDAsIDB4MDAsIDB4QjJ9LAorCXsweDAsIDB4MDAsIDB4QjN9LAorCXsweDAsIDB4MDAsIDB4QjR9LAorCXsweDAsIDB4MDAsIDB4QjV9LAorCXsweDAsIDB4MDAsIDB4QjZ9LAorCXsweDAsIDB4MDAsIDB4Qjd9LAorCXsweDAsIDB4MDAsIDB4Qjh9LAorCXsweDAsIDB4MDAsIDB4Qjl9LAorCXsweDAsIDB4MDAsIDB4QkF9LAorCXsweDAsIDB4MDAsIDB4QkJ9LAorCXsweDAsIDB4MDAsIDB4QkN9LAorCXsweDAsIDB4MDAsIDB4QkR9LAorCXsweDAsIDB4MDAsIDB4QkV9LAorCXsweDAsIDB4MDAsIDB4QkZ9LAorCXsweDAsIDB4MDAsIDB4QzB9LAorCXsweDAsIDB4MDAsIDB4QzF9LAorCXsweDAsIDB4MDAsIDB4QzJ9LAorCXsweDAsIDB4MDAsIDB4QzN9LAorCXsweDAsIDB4MDAsIDB4QzR9LAorCXsweDAsIDB4MDAsIDB4QzV9LAorCXsweDAsIDB4MDAsIDB4QzZ9LAorCXsweDAsIDB4MDAsIDB4Qzd9LAorCXsweDAsIDB4MDAsIDB4Qzh9LAorCXsweDAsIDB4MDAsIDB4Qzl9LAorCXsweDAsIDB4MDAsIDB4Q0F9LAorCXsweDAsIDB4MDAsIDB4Q0J9LAorCXsweDAsIDB4MDAsIDB4Q0N9LAorCXsweDEsIDB4RjQsIDB4MDB9LAorCXsweDEsIDB4MzgsIDB4MDF9LAorCXsweDEsIDB4NDAsIDB4MDJ9LAorCXsweDEsIDB4MEEsIDB4MDN9LAorCXsweDEsIDB4NDAsIDB4MDR9LAorCXsweDEsIDB4NDAsIDB4MDV9LAorCXsweDEsIDB4NDAsIDB4MDZ9LAorCXsweDEsIDB4NjcsIDB4MDd9LAorCXsweDEsIDB4MzEsIDB4MDh9LAorCXsweDEsIDB4MDAsIDB4MDl9LAorCXsweDEsIDB4MDAsIDB4MEF9LAorCXsweDEsIDB4MDAsIDB4MEJ9LAorCXsweDEsIDB4MTQsIDB4MEN9LAorCXsweDEsIDB4MDAsIDB4MER9LAorCXsweDEsIDB4MDAsIDB4MEV9LAorCXsweDEsIDB4MDAsIDB4MEZ9LAorCXsweDEsIDB4MUUsIDB4MTB9LAorCXsweDEsIDB4MDAsIDB4MTF9LAorCXsweDEsIDB4MDAsIDB4MTJ9LAorCXsweDEsIDB4MDAsIDB4MTN9LAorCXsweDEsIDB4MDAsIDB4MTR9LAorCXsweDEsIDB4RkYsIDB4MTV9LAorCXsweDEsIDB4MDEsIDB4MTZ9LAorCXsweDEsIDB4MzIsIDB4MTd9LAorCXsweDEsIDB4MjMsIDB4MTh9LAorCXsweDEsIDB4Q0UsIDB4MTl9LAorCXsweDEsIDB4MjMsIDB4MUF9LAorCXsweDEsIDB4MzIsIDB4MUJ9LAorCXsweDEsIDB4OEQsIDB4MUN9LAorCXsweDEsIDB4Q0UsIDB4MUR9LAorCXsweDEsIDB4OEQsIDB4MUV9LAorCXsweDEsIDB4MDAsIDB4MUZ9LAorCXsweDEsIDB4MDAsIDB4MjB9LAorCXsweDEsIDB4RkYsIDB4M0V9LAorCXsweDEsIDB4MDIsIDB4M0Z9LAorCXsweDEsIDB4MDAsIDB4NDB9LAorCXsweDEsIDB4MDAsIDB4NDF9LAorCXsweDEsIDB4MDAsIDB4NDJ9LAorCXsweDEsIDB4MDAsIDB4NDN9LAorCXsweDEsIDB4MDAsIDB4NDR9LAorCXsweDEsIDB4MDAsIDB4NDV9LAorCXsweDEsIDB4MDAsIDB4NDZ9LAorCXsweDEsIDB4MDAsIDB4NDd9LAorCXsweDEsIDB4MDAsIDB4NDh9LAorCXsweDEsIDB4MDAsIDB4NDl9LAorCXsweDEsIDB4MDAsIDB4NEF9LAorCXsweDEsIDB4MDAsIDB4NEJ9LAorCXsweDEsIDB4MDAsIDB4NEN9LAorCXsweDEsIDB4MDAsIDB4NER9LAorCXsweDEsIDB4MDAsIDB4NEV9LAorCXsweDEsIDB4MDAsIDB4NEZ9LAorCXsweDEsIDB4MDAsIDB4NTB9LAorCXsweDEsIDB4MDAsIDB4NTF9LAorCXsweDEsIDB4MDAsIDB4NTJ9LAorCXsweDEsIDB4MDAsIDB4NTN9LAorCXsweDEsIDB4MDAsIDB4NTR9LAorCXsweDEsIDB4MDAsIDB4NTV9LAorCXsweDEsIDB4MDAsIDB4NTZ9LAorCXsweDEsIDB4MDAsIDB4NTd9LAorCXsweDEsIDB4MDAsIDB4NTh9LAorCXsweDEsIDB4MDAsIDB4NTl9LAorCXsweDEsIDB4MDAsIDB4NUF9LAorCXsweDIsIDB4MDMsIDB4MDB9LAorCXsweDIsIDB4MDAsIDB4MDF9LAorCXsweDIsIDB4MDAsIDB4MDV9LAorCXsweDIsIDB4MDAsIDB4MDZ9LAorCXsweDIsIDB4MDAsIDB4MDd9LAorCXsweDIsIDB4MDAsIDB4MTB9LAorCXsweDIsIDB4MDAsIDB4MTF9LAorCS8qIFN0cmFuZ2UgLSBsb29rcyBsaWtlIHRoZSA1MDEgZHJpdmVyIGRvZXNuJ3QgZG8gYW55dGhpbmcKKwkgKiBhdCBpbnNlcnQgdGltZSBleGNlcHQgcmVhZCB0aGUgRUVQUk9NCisJICovCisJe30KK307CisKKy8qIERhdGEgZm9yIHZpZGVvIGNhbWVyYSBpbml0IGJlZm9yZSBjYXB0dXJlLgorICogQ2FwdHVyZSBhbmQgZGVjb2RpbmcgYnkgQ29saW4gUGVhcnQuCisgKiBUaGlzIGlzIGlzIGZvciB0aGUgM2NvbSBIb21lQ29ubmVjdCBMaXRlIHdoaWNoIGlzIHNwY2E1MDFhIGJhc2VkLgorICovCitzdGF0aWMgY29uc3QgX191MTYgc3BjYTUwMV8zY29tX29wZW5fZGF0YVtdWzNdID0geworCS8qIGJtUmVxdWVzdCx2YWx1ZSxpbmRleCAqLworCXsweDIsIDB4MDA1MCwgMHgwMDAwfSwJLyogQy9TIEVuYWJsZSBURyBzb2Z0IHJlc2V0LCB0aW1pbmcgbW9kZT0wMTAgKi8KKwl7MHgyLCAweDAwNDMsIDB4MDAwMH0sCS8qIEMvUyBEaXNhYmxlIFRHIHNvZnQgcmVzZXQsIHRpbWluZyBtb2RlPTAxMCAqLworCXsweDIsIDB4MDAwMiwgMHgwMDA1fSwJLyogQy9TIEdQSU8gKi8KKwl7MHgyLCAweDAwMDMsIDB4MDAwNX0sCS8qIEMvUyBHUElPICovCisKKyNpZmRlZiBDQ0RTUF9TRVQKKwl7MHgxLCAweDAwMjAsIDB4MDAwMX0sCS8qIENDRFNQIE9wdGlvbnMgKi8KKworCXsweDEsIDB4MDAyMCwgMHgwMDAyfSwJLyogQ0NEU1AgQmxhY2sgTGV2ZWwgKi8KKwl7MHgxLCAweDAwNmUsIDB4MDAwN30sCS8qIENDRFNQIEdhbW1hIG9wdGlvbnMgKi8KKwl7MHgxLCAweDAwOTAsIDB4MDAxNX0sCS8qIENDRFNQIEx1bWluYW5jZSBMb3cgKi8KKwl7MHgxLCAweDAwZmYsIDB4MDAxNn0sCS8qIENDRFNQIEx1bWluYW5jZSBIaWdoICovCisJezB4MSwgMHgwMDAzLCAweDAwM0Z9LAkvKiBDQ0RTUCBHYW1tYSBjb3JyZWN0aW9uIHRvZ2dsZSAqLworCisjaWZkZWYgQUxURVJfR0FNTUEKKwl7MHgxLCAweDAwMTAsIDB4MDAwOH0sCS8qIENDRFNQIFlVViBBMTEgKi8KKwl7MHgxLCAweDAwMDAsIDB4MDAwOX0sCS8qIENDRFNQIFlVViBBMTIgKi8KKwl7MHgxLCAweDAwMDAsIDB4MDAwYX0sCS8qIENDRFNQIFlVViBBMTMgKi8KKwl7MHgxLCAweDAwMDAsIDB4MDAwYn0sCS8qIENDRFNQIFlVViBBMjEgKi8KKwl7MHgxLCAweDAwMTAsIDB4MDAwY30sCS8qIENDRFNQIFlVViBBMjIgKi8KKwl7MHgxLCAweDAwMDAsIDB4MDAwZH0sCS8qIENDRFNQIFlVViBBMjMgKi8KKwl7MHgxLCAweDAwMDAsIDB4MDAwZX0sCS8qIENDRFNQIFlVViBBMzEgKi8KKwl7MHgxLCAweDAwMDAsIDB4MDAwZn0sCS8qIENDRFNQIFlVViBBMzIgKi8KKwl7MHgxLCAweDAwMTAsIDB4MDAxMH0sCS8qIENDRFNQIFlVViBBMzMgKi8KKwl7MHgxLCAweDAwMDAsIDB4MDAxMX0sCS8qIENDRFNQIFIgT2Zmc2V0ICovCisJezB4MSwgMHgwMDAwLCAweDAwMTJ9LAkvKiBDQ0RTUCBHIE9mZnNldCAqLworCXsweDEsIDB4MDAwMSwgMHgwMDEzfSwJLyogQ0NEU1AgQiBPZmZzZXQgKi8KKwl7MHgxLCAweDAwMDEsIDB4MDAxNH0sCS8qIENDRFNQIEJHIE9mZnNldCAqLworCXsweDEsIDB4MDAzZiwgMHgwMEMxfSwJLyogQ0NEU1AgR2FtbWEgQ29ycmVjdGlvbiBFbmFibGUgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBUR19TRVQKKwl7MHgwLCAweDAwZmMsIDB4MDAwMH0sCS8qIFRHIFNodXR0ZXIgU3BlZWQgSGlnaCBCaXRzICovCisJezB4MCwgMHgwMDAwLCAweDAwMDF9LAkvKiBURyBTaHV0dGVyIFNwZWVkIExvdyBCaXRzICovCisJezB4MCwgMHgwMGU0LCAweDAwMDR9LAkvKiBURyBEQ0xLKjIgQWRqdXN0ICovCisJezB4MCwgMHgwMDA4LCAweDAwMDV9LAkvKiBURyBBRENLIEFkanVzdCAqLworCXsweDAsIDB4MDAwMywgMHgwMDA2fSwJLyogVEcgRlIgUGhhc2UgQWRqdXN0ICovCisJezB4MCwgMHgwMDAxLCAweDAwMDd9LAkvKiBURyBGQ0RTIFBoYXNlIEFkanVzdCAqLworCXsweDAsIDB4MDAzOSwgMHgwMDA4fSwJLyogVEcgRlMgUGhhc2UgQWRqdXN0ICovCisJezB4MCwgMHgwMDg4LCAweDAwMGF9LAkvKiBURyBNSDEgKi8KKwl7MHgwLCAweDAwMDMsIDB4MDAwZn0sCS8qIFRHIFBpeGVsIElEICovCisKKwkvKiBMaWtlIGJlbG93LCB1bmV4cGxhaW5lZCB0b2dsbGVpbmcgKi8KKwl7MHgwLCAweDAwODAsIDB4MDAwY30sCisJezB4MCwgMHgwMDAwLCAweDAwMGR9LAorCXsweDAsIDB4MDA4MCwgMHgwMDBjfSwKKwl7MHgwLCAweDAwMDQsIDB4MDAwZH0sCisJezB4MCwgMHgwMDAwLCAweDAwMGN9LAorCXsweDAsIDB4MDAwMCwgMHgwMDBkfSwKKwl7MHgwLCAweDAwNDAsIDB4MDAwY30sCisJezB4MCwgMHgwMDE3LCAweDAwMGR9LAorCXsweDAsIDB4MDBjMCwgMHgwMDBjfSwKKwl7MHgwLCAweDAwMDAsIDB4MDAwZH0sCisJezB4MCwgMHgwMDgwLCAweDAwMGN9LAorCXsweDAsIDB4MDAwNiwgMHgwMDBkfSwKKwl7MHgwLCAweDAwODAsIDB4MDAwY30sCisJezB4MCwgMHgwMDA0LCAweDAwMGR9LAorCXsweDAsIDB4MDAwMiwgMHgwMDAzfSwKKyNlbmRpZgorCisjaWZkZWYgRFNQV0lOX1NFVAorCXsweDEsIDB4MDAxYywgMHgwMDE3fSwJLyogQ0NEU1AgVzEgU3RhcnQgWCAqLworCXsweDEsIDB4MDBlMiwgMHgwMDE5fSwJLyogQ0NEU1AgVzIgU3RhcnQgWCAqLworCXsweDEsIDB4MDAxYywgMHgwMDFifSwJLyogQ0NEU1AgVzMgU3RhcnQgWCAqLworCXsweDEsIDB4MDBlMiwgMHgwMDFkfSwJLyogQ0NEU1AgVzQgU3RhcnQgWCAqLworCXsweDEsIDB4MDBhYSwgMHgwMDFmfSwJLyogQ0NEU1AgVzUgU3RhcnQgWCAqLworCXsweDEsIDB4MDA3MCwgMHgwMDIwfSwJLyogQ0NEU1AgVzUgU3RhcnQgWSAqLworI2VuZGlmCisJezB4MCwgMHgwMDAxLCAweDAwMTB9LAkvKiBURyBTdGFydCBDbG9jayAqLworCisvKgl7MHgyLCAweDAwNmEsIDB4MDAwMX0sCSAqIEMvUyBFbmFibGUgSVNPU1lOQ0ggUGFja2V0IEVuZ2luZSAqLworCXsweDIsIDB4MDA2OCwgMHgwMDAxfSwJLyogQy9TIERpYWJsZSBJU09TWU5DSCBQYWNrZXQgRW5naW5lICovCisJezB4MiwgMHgwMDAwLCAweDAwMDV9LAorCXsweDIsIDB4MDA0MywgMHgwMDAwfSwJLyogQy9TIFNldCBUaW1pbmcgTW9kZSwgRGlzYWJsZSBURyBzb2Z0IHJlc2V0ICovCisJezB4MiwgMHgwMDQzLCAweDAwMDB9LAkvKiBDL1MgU2V0IFRpbWluZyBNb2RlLCBEaXNhYmxlIFRHIHNvZnQgcmVzZXQgKi8KKwl7MHgyLCAweDAwMDIsIDB4MDAwNX0sCS8qIEMvUyBHUElPICovCisJezB4MiwgMHgwMDAzLCAweDAwMDV9LAkvKiBDL1MgR1BJTyAqLworCisJezB4MiwgMHgwMDZhLCAweDAwMDF9LAkvKiBDL1MgRW5hYmxlIElTT1NZTkNIIFBhY2tldCBFbmdpbmUgKi8KKwl7fQorfTsKKworLyoKKyAqIERhdGEgdXNlZCB0byBpbml0aWFsaXplIGEgU1BDQTUwMUMgd2l0aCBIVjcxMzFCIHNlbnNvci4KKyAqIEZyb20gYSBjYXB0dXJlIGZpbGUgdGFrZW4gd2l0aCBVU0JTbm9vcCB2IDEuNQorICogSSBoYXZlIGEgIlNQQ0E1MDFDIHBjIGNhbWVyYSBjaGlwc2V0IiBtYW51YWwgYnkgc3VucGx1cywgYnV0IHNvbWUKKyAqIG9mIHRoZSB2YWx1ZSBtZWFuaW5ncyBhcmUgb2JzY3VyZSBvciBzaW1wbHkgInJlc2VydmVkIi4KKyAqIHRvIGRvIGxpc3Q6CisgKiAxKSBVbmRlcnN0YW5kIHdoYXQgZXZlcnkgdmFsdWUgbWVhbnMKKyAqIDIpIFVuZGVyc3RhbmQgd2h5IHNvbWUgdmFsdWVzIHNlZW0gdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlCisgKiAzKSBXcml0ZSBhIHNtYWxsIGNvbW1lbnQgZm9yIGVhY2ggbGluZSBvZiB0aGUgZm9sbG93aW5nIGFycmF5cy4KKyAqLworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDFjX2Fyb3dhbmFfb3Blbl9kYXRhW11bM10gPSB7CisJLyogYm1SZXF1ZXN0LHZhbHVlLGluZGV4ICovCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDA1LCAweDAwMjIsIDB4MDAwNH0sCisJezB4MDEsIDB4MDAwNiwgMHgwMDExfSwKKwl7MHgwMSwgMHgwMGZmLCAweDAwMTJ9LAorCXsweDAxLCAweDAwMTQsIDB4MDAxM30sCisJezB4MDEsIDB4MDAwMCwgMHgwMDE0fSwKKwl7MHgwMSwgMHgwMDQyLCAweDAwNTF9LAorCXsweDAxLCAweDAwNDAsIDB4MDA1Mn0sCisJezB4MDEsIDB4MDA1MSwgMHgwMDUzfSwKKwl7MHgwMSwgMHgwMDQwLCAweDAwNTR9LAorCXsweDAxLCAweDAwMDAsIDB4MDA1NX0sCisJezB4MDAsIDB4MDAyNSwgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDI2LCAweDAwMDB9LAorCXsweDAwLCAweDAwMDEsIDB4MDAwMH0sCisJezB4MDAsIDB4MDAyNywgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDhhLCAweDAwMDB9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgX191MTYgc3BjYTUwMWNfYXJvd2FuYV9pbml0X2RhdGFbXVszXSA9IHsKKwkvKiBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KKwl7MHgwMiwgMHgwMDA3LCAweDAwMDV9LAorCXsweDAyLCAweGEwNDgsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMiwgMHgwMDA0fSwKKwl7MHgwMSwgMHgwMDA2LCAweDAwMTF9LAorCXsweDAxLCAweDAwZmYsIDB4MDAxMn0sCisJezB4MDEsIDB4MDAxNCwgMHgwMDEzfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMTR9LAorCXsweDAxLCAweDAwNDIsIDB4MDA1MX0sCisJezB4MDEsIDB4MDA0MCwgMHgwMDUyfSwKKwl7MHgwMSwgMHgwMDUxLCAweDAwNTN9LAorCXsweDAxLCAweDAwNDAsIDB4MDA1NH0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDU1fSwKKwl7MHgwMCwgMHgwMDI1LCAweDAwMDB9LAorCXsweDAwLCAweDAwMjYsIDB4MDAwMH0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDI3LCAweDAwMDB9LAorCXsweDAwLCAweDAwOGEsIDB4MDAwMH0sCisJezB4MDIsIDB4MDAwMCwgMHgwMDA1fSwKKwl7MHgwMiwgMHgwMDA3LCAweDAwMDV9LAorCXsweDAyLCAweDIwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMiwgMHgwMDA0fSwKKwl7MHgwNSwgMHgwMDE1LCAweDAwMDF9LAorCXsweDA1LCAweDAwZWEsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMGQyLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjMsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMywgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDMwLCAweDAwMDF9LAorCXsweDA1LCAweDAwMmIsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzIsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAyMywgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDMzLCAweDAwMDF9LAorCXsweDA1LCAweDAwMjMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzNCwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAyLCAweDAwMDB9LAorCXsweDA1LCAweDAwNTAsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDUxLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDA1MiwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwNTQsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDF9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwMn0sCisJezB4MDAsIDB4MDAwYywgMHgwMDAzfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDR9LAorCXsweDAwLCAweDAwOTAsIDB4MDAwNX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDA2fSwKKwl7MHgwMCwgMHgwMDQwLCAweDAwMDd9LAorCXsweDAwLCAweDAwYzAsIDB4MDAwOH0sCisJezB4MDAsIDB4MDA0YSwgMHgwMDA5fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMGF9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwYn0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDBjfSwKKwl7MHgwMCwgMHgwMDAxLCAweDAwMGR9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwZX0sCisJezB4MDAsIDB4MDAwMiwgMHgwMDBmfSwKKwl7MHgwMCwgMHgwMDAxLCAweDAwMTB9LAorCXsweDAwLCAweDAwMDAsIDB4MDAxMX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDEyfSwKKwl7MHgwMCwgMHgwMDAyLCAweDAwMjB9LAorCXsweDAwLCAweDAwODAsIDB4MDAyMX0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDIyfSwKKwl7MHgwMCwgMHgwMGUwLCAweDAwMjN9LAorCXsweDAwLCAweDAwMDAsIDB4MDAyNH0sCisJezB4MDAsIDB4MDBkNSwgMHgwMDI1fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMjZ9LAorCXsweDAwLCAweDAwMGIsIDB4MDAyN30sCisJezB4MDAsIDB4MDAwMCwgMHgwMDQ2fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwNDd9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0OH0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDQ5fSwKKwl7MHgwMCwgMHgwMDA4LCAweDAwNGF9LAorCXsweGZmLCAweDAwMDAsIDB4MDBkMH0sCisJezB4ZmYsIDB4MDBkOCwgMHgwMGQxfSwKKwl7MHhmZiwgMHgwMDAwLCAweDAwZDR9LAorCXsweGZmLCAweDAwMDAsIDB4MDBkNX0sCisJezB4MDEsIDB4MDBhNiwgMHgwMDAwfSwKKwl7MHgwMSwgMHgwMDI4LCAweDAwMDF9LAorCXsweDAxLCAweDAwMDAsIDB4MDAwMn0sCisJezB4MDEsIDB4MDAwYSwgMHgwMDAzfSwKKwl7MHgwMSwgMHgwMDQwLCAweDAwMDR9LAorCXsweDAxLCAweDAwNjYsIDB4MDAwN30sCisJezB4MDEsIDB4MDAxMSwgMHgwMDA4fSwKKwl7MHgwMSwgMHgwMDMyLCAweDAwMDl9LAorCXsweDAxLCAweDAwZmQsIDB4MDAwYX0sCisJezB4MDEsIDB4MDAzOCwgMHgwMDBifSwKKwl7MHgwMSwgMHgwMGQxLCAweDAwMGN9LAorCXsweDAxLCAweDAwZjcsIDB4MDAwZH0sCisJezB4MDEsIDB4MDBlZCwgMHgwMDBlfSwKKwl7MHgwMSwgMHgwMGQ4LCAweDAwMGZ9LAorCXsweDAxLCAweDAwMzgsIDB4MDAxMH0sCisJezB4MDEsIDB4MDBmZiwgMHgwMDE1fSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwMTZ9LAorCXsweDAxLCAweDAwMzIsIDB4MDAxN30sCisJezB4MDEsIDB4MDAyMywgMHgwMDE4fSwKKwl7MHgwMSwgMHgwMGNlLCAweDAwMTl9LAorCXsweDAxLCAweDAwMjMsIDB4MDAxYX0sCisJezB4MDEsIDB4MDAzMiwgMHgwMDFifSwKKwl7MHgwMSwgMHgwMDhkLCAweDAwMWN9LAorCXsweDAxLCAweDAwY2UsIDB4MDAxZH0sCisJezB4MDEsIDB4MDA4ZCwgMHgwMDFlfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMWZ9LAorCXsweDAxLCAweDAwMDAsIDB4MDAyMH0sCisJezB4MDEsIDB4MDBmZiwgMHgwMDNlfSwKKwl7MHgwMSwgMHgwMDAzLCAweDAwM2Z9LAorCXsweDAxLCAweDAwMDAsIDB4MDA0MH0sCisJezB4MDEsIDB4MDAzNSwgMHgwMDQxfSwKKwl7MHgwMSwgMHgwMDUzLCAweDAwNDJ9LAorCXsweDAxLCAweDAwNjksIDB4MDA0M30sCisJezB4MDEsIDB4MDA3YywgMHgwMDQ0fSwKKwl7MHgwMSwgMHgwMDhjLCAweDAwNDV9LAorCXsweDAxLCAweDAwOWEsIDB4MDA0Nn0sCisJezB4MDEsIDB4MDBhOCwgMHgwMDQ3fSwKKwl7MHgwMSwgMHgwMGI0LCAweDAwNDh9LAorCXsweDAxLCAweDAwYmYsIDB4MDA0OX0sCisJezB4MDEsIDB4MDBjYSwgMHgwMDRhfSwKKwl7MHgwMSwgMHgwMGQ0LCAweDAwNGJ9LAorCXsweDAxLCAweDAwZGQsIDB4MDA0Y30sCisJezB4MDEsIDB4MDBlNywgMHgwMDRkfSwKKwl7MHgwMSwgMHgwMGVmLCAweDAwNGV9LAorCXsweDAxLCAweDAwZjgsIDB4MDA0Zn0sCisJezB4MDEsIDB4MDBmZiwgMHgwMDUwfSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwNTZ9LAorCXsweDAxLCAweDAwNjAsIDB4MDA1N30sCisJezB4MDEsIDB4MDA0MCwgMHgwMDU4fSwKKwl7MHgwMSwgMHgwMDExLCAweDAwNTl9LAorCXsweDAxLCAweDAwMDEsIDB4MDA1YX0sCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDAyLCAweDAwMDcsIDB4MDAwNX0sCisJezB4MDIsIDB4MDAxNSwgMHgwMDA2fSwKKwl7MHgwMiwgMHgxMDBhLCAweDAwMDd9LAorCXsweDAyLCAweGEwNDgsIDB4MDAwMH0sCisJezB4MDIsIDB4YzAwMiwgMHgwMDAxfSwKKwl7MHgwMiwgMHgwMDBmLCAweDAwMDV9LAorCXsweDAyLCAweGEwNDgsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMiwgMHgwMDA0fSwKKwl7MHgwNSwgMHgwMDI1LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyNiwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAxLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjcsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDAxLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMGQyLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjAsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDkwLCAweDAwMDV9LAorCXsweDAxLCAweDAwYTYsIDB4MDAwMH0sCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7MHgwMiwgMHgyMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjIsIDB4MDAwNH0sCisJezB4MDUsIDB4MDAxNSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMGVhLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDBkMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMCwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDJiLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAyMywgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDMyLCAweDAwMDF9LAorCXsweDA1LCAweDAwMjMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMywgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzQsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDUwLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDA1MSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwNTIsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDU0LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDEsIDB4MDAwMH0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDAxfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDJ9LAorCXsweDAwLCAweDAwMGMsIDB4MDAwM30sCisJezB4MDAsIDB4MDAwMCwgMHgwMDA0fSwKKwl7MHgwMCwgMHgwMDkwLCAweDAwMDV9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwNn0sCisJezB4MDAsIDB4MDA0MCwgMHgwMDA3fSwKKwl7MHgwMCwgMHgwMGMwLCAweDAwMDh9LAorCXsweDAwLCAweDAwNGEsIDB4MDAwOX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDBhfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMGJ9LAorCXsweDAwLCAweDAwMDEsIDB4MDAwY30sCisJezB4MDAsIDB4MDAwMSwgMHgwMDBkfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMGV9LAorCXsweDAwLCAweDAwMDIsIDB4MDAwZn0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDEwfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMTF9LAorCXsweDAwLCAweDAwMDAsIDB4MDAxMn0sCisJezB4MDAsIDB4MDAwMiwgMHgwMDIwfSwKKwl7MHgwMCwgMHgwMDgwLCAweDAwMjF9LAorCXsweDAwLCAweDAwMDEsIDB4MDAyMn0sCisJezB4MDAsIDB4MDBlMCwgMHgwMDIzfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMjR9LAorCXsweDAwLCAweDAwZDUsIDB4MDAyNX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDI2fSwKKwl7MHgwMCwgMHgwMDBiLCAweDAwMjd9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0Nn0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDQ3fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwNDh9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0OX0sCisJezB4MDAsIDB4MDAwOCwgMHgwMDRhfSwKKwl7MHhmZiwgMHgwMDAwLCAweDAwZDB9LAorCXsweGZmLCAweDAwZDgsIDB4MDBkMX0sCisJezB4ZmYsIDB4MDAwMCwgMHgwMGQ0fSwKKwl7MHhmZiwgMHgwMDAwLCAweDAwZDV9LAorCXsweDAxLCAweDAwYTYsIDB4MDAwMH0sCisJezB4MDEsIDB4MDAyOCwgMHgwMDAxfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMDJ9LAorCXsweDAxLCAweDAwMGEsIDB4MDAwM30sCisJezB4MDEsIDB4MDA0MCwgMHgwMDA0fSwKKwl7MHgwMSwgMHgwMDY2LCAweDAwMDd9LAorCXsweDAxLCAweDAwMTEsIDB4MDAwOH0sCisJezB4MDEsIDB4MDAzMiwgMHgwMDA5fSwKKwl7MHgwMSwgMHgwMGZkLCAweDAwMGF9LAorCXsweDAxLCAweDAwMzgsIDB4MDAwYn0sCisJezB4MDEsIDB4MDBkMSwgMHgwMDBjfSwKKwl7MHgwMSwgMHgwMGY3LCAweDAwMGR9LAorCXsweDAxLCAweDAwZWQsIDB4MDAwZX0sCisJezB4MDEsIDB4MDBkOCwgMHgwMDBmfSwKKwl7MHgwMSwgMHgwMDM4LCAweDAwMTB9LAorCXsweDAxLCAweDAwZmYsIDB4MDAxNX0sCisJezB4MDEsIDB4MDAwMSwgMHgwMDE2fSwKKwl7MHgwMSwgMHgwMDMyLCAweDAwMTd9LAorCXsweDAxLCAweDAwMjMsIDB4MDAxOH0sCisJezB4MDEsIDB4MDBjZSwgMHgwMDE5fSwKKwl7MHgwMSwgMHgwMDIzLCAweDAwMWF9LAorCXsweDAxLCAweDAwMzIsIDB4MDAxYn0sCisJezB4MDEsIDB4MDA4ZCwgMHgwMDFjfSwKKwl7MHgwMSwgMHgwMGNlLCAweDAwMWR9LAorCXsweDAxLCAweDAwOGQsIDB4MDAxZX0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDFmfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMjB9LAorCXsweDAxLCAweDAwZmYsIDB4MDAzZX0sCisJezB4MDEsIDB4MDAwMywgMHgwMDNmfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwNDB9LAorCXsweDAxLCAweDAwMzUsIDB4MDA0MX0sCisJezB4MDEsIDB4MDA1MywgMHgwMDQyfSwKKwl7MHgwMSwgMHgwMDY5LCAweDAwNDN9LAorCXsweDAxLCAweDAwN2MsIDB4MDA0NH0sCisJezB4MDEsIDB4MDA4YywgMHgwMDQ1fSwKKwl7MHgwMSwgMHgwMDlhLCAweDAwNDZ9LAorCXsweDAxLCAweDAwYTgsIDB4MDA0N30sCisJezB4MDEsIDB4MDBiNCwgMHgwMDQ4fSwKKwl7MHgwMSwgMHgwMGJmLCAweDAwNDl9LAorCXsweDAxLCAweDAwY2EsIDB4MDA0YX0sCisJezB4MDEsIDB4MDBkNCwgMHgwMDRifSwKKwl7MHgwMSwgMHgwMGRkLCAweDAwNGN9LAorCXsweDAxLCAweDAwZTcsIDB4MDA0ZH0sCisJezB4MDEsIDB4MDBlZiwgMHgwMDRlfSwKKwl7MHgwMSwgMHgwMGY4LCAweDAwNGZ9LAorCXsweDAxLCAweDAwZmYsIDB4MDA1MH0sCisJezB4MDEsIDB4MDAwMSwgMHgwMDU2fSwKKwl7MHgwMSwgMHgwMDYwLCAweDAwNTd9LAorCXsweDAxLCAweDAwNDAsIDB4MDA1OH0sCisJezB4MDEsIDB4MDAxMSwgMHgwMDU5fSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwNWF9LAorCXsweDAyLCAweDAwMDcsIDB4MDAwNX0sCisJezB4MDIsIDB4YTA0OCwgMHgwMDAwfSwKKwl7MHgwMiwgMHgwMDA3LCAweDAwMDV9LAorCXsweDAyLCAweDAwMTUsIDB4MDAwNn0sCisJezB4MDIsIDB4MTAwYSwgMHgwMDA3fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDAyLCAweGMwMDIsIDB4MDAwMX0sCisJezB4MDIsIDB4MDAwZiwgMHgwMDA1fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDA1LCAweDAwMjIsIDB4MDAwNH0sCisJezB4MDUsIDB4MDAyNSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjYsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDI3LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDBkMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIwLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDAsIDB4MDA5MCwgMHgwMDA1fSwKKwl7MHgwMSwgMHgwMGE2LCAweDAwMDB9LAorCXsweDAxLCAweDAwMDMsIDB4MDAzZn0sCisJezB4MDEsIDB4MDAwMSwgMHgwMDU2fSwKKwl7MHgwMSwgMHgwMDExLCAweDAwMDh9LAorCXsweDAxLCAweDAwMzIsIDB4MDAwOX0sCisJezB4MDEsIDB4ZmZmZCwgMHgwMDBhfSwKKwl7MHgwMSwgMHgwMDIzLCAweDAwMGJ9LAorCXsweDAxLCAweGZmZWEsIDB4MDAwY30sCisJezB4MDEsIDB4ZmZmNCwgMHgwMDBkfSwKKwl7MHgwMSwgMHhmZmZjLCAweDAwMGV9LAorCXsweDAxLCAweGZmZTMsIDB4MDAwZn0sCisJezB4MDEsIDB4MDAxZiwgMHgwMDEwfSwKKwl7MHgwMSwgMHgwMGE4LCAweDAwMDF9LAorCXsweDAxLCAweDAwNjcsIDB4MDAwN30sCisJezB4MDEsIDB4MDAzMiwgMHgwMDE3fSwKKwl7MHgwMSwgMHgwMDIzLCAweDAwMTh9LAorCXsweDAxLCAweDAwY2UsIDB4MDAxOX0sCisJezB4MDEsIDB4MDAyMywgMHgwMDFhfSwKKwl7MHgwMSwgMHgwMDMyLCAweDAwMWJ9LAorCXsweDAxLCAweDAwOGQsIDB4MDAxY30sCisJezB4MDEsIDB4MDBjZSwgMHgwMDFkfSwKKwl7MHgwMSwgMHgwMDhkLCAweDAwMWV9LAorCXsweDAxLCAweDAwYzgsIDB4MDAxNX0sCisJezB4MDEsIDB4MDAzMiwgMHgwMDE2fSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMTF9LAorCXsweDAxLCAweDAwMDAsIDB4MDAxMn0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDEzfSwKKwl7MHgwMSwgMHgwMDBhLCAweDAwMDN9LAorCXsweDAyLCAweGMwMDIsIDB4MDAwMX0sCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7MHgwMiwgMHhjMDAwLCAweDAwMDF9LAorCXsweDAyLCAweDAwMDAsIDB4MDAwNX0sCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7MHgwMiwgMHgyMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjIsIDB4MDAwNH0sCisJezB4MDUsIDB4MDAxNSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMGVhLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDBkMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMCwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDJiLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAyMywgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDMyLCAweDAwMDF9LAorCXsweDA1LCAweDAwMjMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMywgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzQsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDUwLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDA1MSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwNTIsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDU0LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDEsIDB4MDAwMH0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDAxfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDJ9LAorCXsweDAwLCAweDAwMGMsIDB4MDAwM30sCisJezB4MDAsIDB4MDAwMCwgMHgwMDA0fSwKKwl7MHgwMCwgMHgwMDkwLCAweDAwMDV9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwNn0sCisJezB4MDAsIDB4MDA0MCwgMHgwMDA3fSwKKwl7MHgwMCwgMHgwMGMwLCAweDAwMDh9LAorCXsweDAwLCAweDAwNGEsIDB4MDAwOX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDBhfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMGJ9LAorCXsweDAwLCAweDAwMDEsIDB4MDAwY30sCisJezB4MDAsIDB4MDAwMSwgMHgwMDBkfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMGV9LAorCXsweDAwLCAweDAwMDIsIDB4MDAwZn0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDEwfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMTF9LAorCXsweDAwLCAweDAwMDAsIDB4MDAxMn0sCisJezB4MDAsIDB4MDAwMiwgMHgwMDIwfSwKKwl7MHgwMCwgMHgwMDgwLCAweDAwMjF9LAorCXsweDAwLCAweDAwMDEsIDB4MDAyMn0sCisJezB4MDAsIDB4MDBlMCwgMHgwMDIzfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMjR9LAorCXsweDAwLCAweDAwZDUsIDB4MDAyNX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDI2fSwKKwl7MHgwMCwgMHgwMDBiLCAweDAwMjd9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0Nn0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDQ3fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwNDh9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0OX0sCisJezB4MDAsIDB4MDAwOCwgMHgwMDRhfSwKKwl7MHhmZiwgMHgwMDAwLCAweDAwZDB9LAorCXsweGZmLCAweDAwZDgsIDB4MDBkMX0sCisJezB4ZmYsIDB4MDAwMCwgMHgwMGQ0fSwKKwl7MHhmZiwgMHgwMDAwLCAweDAwZDV9LAorCXsweDAxLCAweDAwYTYsIDB4MDAwMH0sCisJezB4MDEsIDB4MDAyOCwgMHgwMDAxfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMDJ9LAorCXsweDAxLCAweDAwMGEsIDB4MDAwM30sCisJezB4MDEsIDB4MDA0MCwgMHgwMDA0fSwKKwl7MHgwMSwgMHgwMDY2LCAweDAwMDd9LAorCXsweDAxLCAweDAwMTEsIDB4MDAwOH0sCisJezB4MDEsIDB4MDAzMiwgMHgwMDA5fSwKKwl7MHgwMSwgMHgwMGZkLCAweDAwMGF9LAorCXsweDAxLCAweDAwMzgsIDB4MDAwYn0sCisJezB4MDEsIDB4MDBkMSwgMHgwMDBjfSwKKwl7MHgwMSwgMHgwMGY3LCAweDAwMGR9LAorCXsweDAxLCAweDAwZWQsIDB4MDAwZX0sCisJezB4MDEsIDB4MDBkOCwgMHgwMDBmfSwKKwl7MHgwMSwgMHgwMDM4LCAweDAwMTB9LAorCXsweDAxLCAweDAwZmYsIDB4MDAxNX0sCisJezB4MDEsIDB4MDAwMSwgMHgwMDE2fSwKKwl7MHgwMSwgMHgwMDMyLCAweDAwMTd9LAorCXsweDAxLCAweDAwMjMsIDB4MDAxOH0sCisJezB4MDEsIDB4MDBjZSwgMHgwMDE5fSwKKwl7MHgwMSwgMHgwMDIzLCAweDAwMWF9LAorCXsweDAxLCAweDAwMzIsIDB4MDAxYn0sCisJezB4MDEsIDB4MDA4ZCwgMHgwMDFjfSwKKwl7MHgwMSwgMHgwMGNlLCAweDAwMWR9LAorCXsweDAxLCAweDAwOGQsIDB4MDAxZX0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDFmfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMjB9LAorCXsweDAxLCAweDAwZmYsIDB4MDAzZX0sCisJezB4MDEsIDB4MDAwMywgMHgwMDNmfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwNDB9LAorCXsweDAxLCAweDAwMzUsIDB4MDA0MX0sCisJezB4MDEsIDB4MDA1MywgMHgwMDQyfSwKKwl7MHgwMSwgMHgwMDY5LCAweDAwNDN9LAorCXsweDAxLCAweDAwN2MsIDB4MDA0NH0sCisJezB4MDEsIDB4MDA4YywgMHgwMDQ1fSwKKwl7MHgwMSwgMHgwMDlhLCAweDAwNDZ9LAorCXsweDAxLCAweDAwYTgsIDB4MDA0N30sCisJezB4MDEsIDB4MDBiNCwgMHgwMDQ4fSwKKwl7MHgwMSwgMHgwMGJmLCAweDAwNDl9LAorCXsweDAxLCAweDAwY2EsIDB4MDA0YX0sCisJezB4MDEsIDB4MDBkNCwgMHgwMDRifSwKKwl7MHgwMSwgMHgwMGRkLCAweDAwNGN9LAorCXsweDAxLCAweDAwZTcsIDB4MDA0ZH0sCisJezB4MDEsIDB4MDBlZiwgMHgwMDRlfSwKKwl7MHgwMSwgMHgwMGY4LCAweDAwNGZ9LAorCXsweDAxLCAweDAwZmYsIDB4MDA1MH0sCisJezB4MDEsIDB4MDAwMSwgMHgwMDU2fSwKKwl7MHgwMSwgMHgwMDYwLCAweDAwNTd9LAorCXsweDAxLCAweDAwNDAsIDB4MDA1OH0sCisJezB4MDEsIDB4MDAxMSwgMHgwMDU5fSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwNWF9LAorCXsweDAyLCAweDAwMDcsIDB4MDAwNX0sCisJezB4MDIsIDB4YTA0OCwgMHgwMDAwfSwKKwl7MHgwMiwgMHgwMDA3LCAweDAwMDV9LAorCXsweDAyLCAweDAwMTUsIDB4MDAwNn0sCisJezB4MDIsIDB4MTAwYSwgMHgwMDA3fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDAyLCAweGMwMDIsIDB4MDAwMX0sCisJezB4MDIsIDB4MDAwZiwgMHgwMDA1fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDA1LCAweDAwMjIsIDB4MDAwNH0sCisJezB4MDUsIDB4MDAyNSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjYsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDI3LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDBkMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIwLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDAsIDB4MDA5MCwgMHgwMDA1fSwKKwl7MHgwMSwgMHgwMGE2LCAweDAwMDB9LAorCXsweDAyLCAweDAwMDcsIDB4MDAwNX0sCisJezB4MDIsIDB4MjAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIyLCAweDAwMDR9LAorCXsweDA1LCAweDAwMTUsIDB4MDAwMX0sCisJezB4MDUsIDB4MDBlYSwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIxLCAweDAwMDF9LAorCXsweDA1LCAweDAwZDIsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMywgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAzLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzAsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAyYiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDMxLCAweDAwMDF9LAorCXsweDA1LCAweDAwMjMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMiwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzMsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAyMywgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDM0LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDIsIDB4MDAwMH0sCisJezB4MDUsIDB4MDA1MCwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwNTEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDUyLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDA1NCwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAxLCAweDAwMDB9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwMX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDAyfSwKKwl7MHgwMCwgMHgwMDBjLCAweDAwMDN9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwNH0sCisJezB4MDAsIDB4MDA5MCwgMHgwMDA1fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDZ9LAorCXsweDAwLCAweDAwNDAsIDB4MDAwN30sCisJezB4MDAsIDB4MDBjMCwgMHgwMDA4fSwKKwl7MHgwMCwgMHgwMDRhLCAweDAwMDl9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwYX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDBifSwKKwl7MHgwMCwgMHgwMDAxLCAweDAwMGN9LAorCXsweDAwLCAweDAwMDEsIDB4MDAwZH0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDBlfSwKKwl7MHgwMCwgMHgwMDAyLCAweDAwMGZ9LAorCXsweDAwLCAweDAwMDEsIDB4MDAxMH0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDExfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMTJ9LAorCXsweDAwLCAweDAwMDIsIDB4MDAyMH0sCisJezB4MDAsIDB4MDA4MCwgMHgwMDIxfSwKKwl7MHgwMCwgMHgwMDAxLCAweDAwMjJ9LAorCXsweDAwLCAweDAwZTAsIDB4MDAyM30sCisJezB4MDAsIDB4MDAwMCwgMHgwMDI0fSwKKwl7MHgwMCwgMHgwMGQ1LCAweDAwMjV9LAorCXsweDAwLCAweDAwMDAsIDB4MDAyNn0sCisJezB4MDAsIDB4MDAwYiwgMHgwMDI3fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwNDZ9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0N30sCisJezB4MDAsIDB4MDAwMCwgMHgwMDQ4fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwNDl9LAorCXsweDAwLCAweDAwMDgsIDB4MDA0YX0sCisJezB4ZmYsIDB4MDAwMCwgMHgwMGQwfSwKKwl7MHhmZiwgMHgwMGQ4LCAweDAwZDF9LAorCXsweGZmLCAweDAwMDAsIDB4MDBkNH0sCisJezB4ZmYsIDB4MDAwMCwgMHgwMGQ1fSwKKwl7MHgwMSwgMHgwMGE2LCAweDAwMDB9LAorCXsweDAxLCAweDAwMjgsIDB4MDAwMX0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDAyfSwKKwl7MHgwMSwgMHgwMDBhLCAweDAwMDN9LAorCXsweDAxLCAweDAwNDAsIDB4MDAwNH0sCisJezB4MDEsIDB4MDA2NiwgMHgwMDA3fSwKKwl7MHgwMSwgMHgwMDExLCAweDAwMDh9LAorCXsweDAxLCAweDAwMzIsIDB4MDAwOX0sCisJezB4MDEsIDB4MDBmZCwgMHgwMDBhfSwKKwl7MHgwMSwgMHgwMDM4LCAweDAwMGJ9LAorCXsweDAxLCAweDAwZDEsIDB4MDAwY30sCisJezB4MDEsIDB4MDBmNywgMHgwMDBkfSwKKwl7MHgwMSwgMHgwMGVkLCAweDAwMGV9LAorCXsweDAxLCAweDAwZDgsIDB4MDAwZn0sCisJezB4MDEsIDB4MDAzOCwgMHgwMDEwfSwKKwl7MHgwMSwgMHgwMGZmLCAweDAwMTV9LAorCXsweDAxLCAweDAwMDEsIDB4MDAxNn0sCisJezB4MDEsIDB4MDAzMiwgMHgwMDE3fSwKKwl7MHgwMSwgMHgwMDIzLCAweDAwMTh9LAorCXsweDAxLCAweDAwY2UsIDB4MDAxOX0sCisJezB4MDEsIDB4MDAyMywgMHgwMDFhfSwKKwl7MHgwMSwgMHgwMDMyLCAweDAwMWJ9LAorCXsweDAxLCAweDAwOGQsIDB4MDAxY30sCisJezB4MDEsIDB4MDBjZSwgMHgwMDFkfSwKKwl7MHgwMSwgMHgwMDhkLCAweDAwMWV9LAorCXsweDAxLCAweDAwMDAsIDB4MDAxZn0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDIwfSwKKwl7MHgwMSwgMHgwMGZmLCAweDAwM2V9LAorCXsweDAxLCAweDAwMDMsIDB4MDAzZn0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDQwfSwKKwl7MHgwMSwgMHgwMDM1LCAweDAwNDF9LAorCXsweDAxLCAweDAwNTMsIDB4MDA0Mn0sCisJezB4MDEsIDB4MDA2OSwgMHgwMDQzfSwKKwl7MHgwMSwgMHgwMDdjLCAweDAwNDR9LAorCXsweDAxLCAweDAwOGMsIDB4MDA0NX0sCisJezB4MDEsIDB4MDA5YSwgMHgwMDQ2fSwKKwl7MHgwMSwgMHgwMGE4LCAweDAwNDd9LAorCXsweDAxLCAweDAwYjQsIDB4MDA0OH0sCisJezB4MDEsIDB4MDBiZiwgMHgwMDQ5fSwKKwl7MHgwMSwgMHgwMGNhLCAweDAwNGF9LAorCXsweDAxLCAweDAwZDQsIDB4MDA0Yn0sCisJezB4MDEsIDB4MDBkZCwgMHgwMDRjfSwKKwl7MHgwMSwgMHgwMGU3LCAweDAwNGR9LAorCXsweDAxLCAweDAwZWYsIDB4MDA0ZX0sCisJezB4MDEsIDB4MDBmOCwgMHgwMDRmfSwKKwl7MHgwMSwgMHgwMGZmLCAweDAwNTB9LAorCXsweDAxLCAweDAwMDEsIDB4MDA1Nn0sCisJezB4MDEsIDB4MDA2MCwgMHgwMDU3fSwKKwl7MHgwMSwgMHgwMDQwLCAweDAwNTh9LAorCXsweDAxLCAweDAwMTEsIDB4MDA1OX0sCisJezB4MDEsIDB4MDAwMSwgMHgwMDVhfSwKKwl7MHgwMiwgMHgwMDA3LCAweDAwMDV9LAorCXsweDAyLCAweGEwNDgsIDB4MDAwMH0sCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7MHgwMiwgMHgwMDE1LCAweDAwMDZ9LAorCXsweDAyLCAweDEwMGEsIDB4MDAwN30sCisJezB4MDIsIDB4YTA0OCwgMHgwMDAwfSwKKwl7MHgwMiwgMHhjMDAyLCAweDAwMDF9LAorCXsweDAyLCAweDAwMGYsIDB4MDAwNX0sCisJezB4MDIsIDB4YTA0OCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIyLCAweDAwMDR9LAorCXsweDA1LCAweDAwMjUsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDI2LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDEsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyNywgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMDEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIxLCAweDAwMDF9LAorCXsweDA1LCAweDAwZDIsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMCwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDAwLCAweDAwOTAsIDB4MDAwNX0sCisJezB4MDEsIDB4MDBhNiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDI2LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDEsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyNywgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDBmLCAweDAwMDB9LAorCXsweDAxLCAweDAwMDMsIDB4MDAzZn0sCisJezB4MDEsIDB4MDAwMSwgMHgwMDU2fSwKKwl7MHgwMSwgMHgwMDExLCAweDAwMDh9LAorCXsweDAxLCAweDAwMzIsIDB4MDAwOX0sCisJezB4MDEsIDB4ZmZmZCwgMHgwMDBhfSwKKwl7MHgwMSwgMHgwMDIzLCAweDAwMGJ9LAorCXsweDAxLCAweGZmZWEsIDB4MDAwY30sCisJezB4MDEsIDB4ZmZmNCwgMHgwMDBkfSwKKwl7MHgwMSwgMHhmZmZjLCAweDAwMGV9LAorCXsweDAxLCAweGZmZTMsIDB4MDAwZn0sCisJezB4MDEsIDB4MDAxZiwgMHgwMDEwfSwKKwl7MHgwMSwgMHgwMGE4LCAweDAwMDF9LAorCXsweDAxLCAweDAwNjcsIDB4MDAwN30sCisJezB4MDEsIDB4MDA0MiwgMHgwMDUxfSwKKwl7MHgwMSwgMHgwMDUxLCAweDAwNTN9LAorCXsweDAxLCAweDAwMGEsIDB4MDAwM30sCisJezB4MDIsIDB4YzAwMiwgMHgwMDAxfSwKKwl7MHgwMiwgMHgwMDA3LCAweDAwMDV9LAorCXsweDAyLCAweGMwMDAsIDB4MDAwMX0sCisJezB4MDIsIDB4MDAwMCwgMHgwMDA1fSwKKwl7MHgwMiwgMHgwMDA3LCAweDAwMDV9LAorCXsweDAyLCAweDIwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMiwgMHgwMDA0fSwKKwl7MHgwNSwgMHgwMDE1LCAweDAwMDF9LAorCXsweDA1LCAweDAwZWEsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMGQyLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjMsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMywgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDMwLCAweDAwMDF9LAorCXsweDA1LCAweDAwMmIsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzIsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAyMywgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDMzLCAweDAwMDF9LAorCXsweDA1LCAweDAwMjMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzNCwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAyLCAweDAwMDB9LAorCXsweDA1LCAweDAwNTAsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDUxLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDA1MiwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwNTQsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDF9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwMn0sCisJezB4MDAsIDB4MDAwYywgMHgwMDAzfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDR9LAorCXsweDAwLCAweDAwOTAsIDB4MDAwNX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDA2fSwKKwl7MHgwMCwgMHgwMDQwLCAweDAwMDd9LAorCXsweDAwLCAweDAwYzAsIDB4MDAwOH0sCisJezB4MDAsIDB4MDA0YSwgMHgwMDA5fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMGF9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwYn0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDBjfSwKKwl7MHgwMCwgMHgwMDAxLCAweDAwMGR9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwZX0sCisJezB4MDAsIDB4MDAwMiwgMHgwMDBmfSwKKwl7MHgwMCwgMHgwMDAxLCAweDAwMTB9LAorCXsweDAwLCAweDAwMDAsIDB4MDAxMX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDEyfSwKKwl7MHgwMCwgMHgwMDAyLCAweDAwMjB9LAorCXsweDAwLCAweDAwODAsIDB4MDAyMX0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDIyfSwKKwl7MHgwMCwgMHgwMGUwLCAweDAwMjN9LAorCXsweDAwLCAweDAwMDAsIDB4MDAyNH0sCisJezB4MDAsIDB4MDBkNSwgMHgwMDI1fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMjZ9LAorCXsweDAwLCAweDAwMGIsIDB4MDAyN30sCisJezB4MDAsIDB4MDAwMCwgMHgwMDQ2fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwNDd9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0OH0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDQ5fSwKKwl7MHgwMCwgMHgwMDA4LCAweDAwNGF9LAorCXsweGZmLCAweDAwMDAsIDB4MDBkMH0sCisJezB4ZmYsIDB4MDBkOCwgMHgwMGQxfSwKKwl7MHhmZiwgMHgwMDAwLCAweDAwZDR9LAorCXsweGZmLCAweDAwMDAsIDB4MDBkNX0sCisJezB4MDEsIDB4MDBhNiwgMHgwMDAwfSwKKwl7MHgwMSwgMHgwMDI4LCAweDAwMDF9LAorCXsweDAxLCAweDAwMDAsIDB4MDAwMn0sCisJezB4MDEsIDB4MDAwYSwgMHgwMDAzfSwKKwl7MHgwMSwgMHgwMDQwLCAweDAwMDR9LAorCXsweDAxLCAweDAwNjYsIDB4MDAwN30sCisJezB4MDEsIDB4MDAxMSwgMHgwMDA4fSwKKwl7MHgwMSwgMHgwMDMyLCAweDAwMDl9LAorCXsweDAxLCAweDAwZmQsIDB4MDAwYX0sCisJezB4MDEsIDB4MDAzOCwgMHgwMDBifSwKKwl7MHgwMSwgMHgwMGQxLCAweDAwMGN9LAorCXsweDAxLCAweDAwZjcsIDB4MDAwZH0sCisJezB4MDEsIDB4MDBlZCwgMHgwMDBlfSwKKwl7MHgwMSwgMHgwMGQ4LCAweDAwMGZ9LAorCXsweDAxLCAweDAwMzgsIDB4MDAxMH0sCisJezB4MDEsIDB4MDBmZiwgMHgwMDE1fSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwMTZ9LAorCXsweDAxLCAweDAwMzIsIDB4MDAxN30sCisJezB4MDEsIDB4MDAyMywgMHgwMDE4fSwKKwl7MHgwMSwgMHgwMGNlLCAweDAwMTl9LAorCXsweDAxLCAweDAwMjMsIDB4MDAxYX0sCisJezB4MDEsIDB4MDAzMiwgMHgwMDFifSwKKwl7MHgwMSwgMHgwMDhkLCAweDAwMWN9LAorCXsweDAxLCAweDAwY2UsIDB4MDAxZH0sCisJezB4MDEsIDB4MDA4ZCwgMHgwMDFlfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMWZ9LAorCXsweDAxLCAweDAwMDAsIDB4MDAyMH0sCisJezB4MDEsIDB4MDBmZiwgMHgwMDNlfSwKKwl7MHgwMSwgMHgwMDAzLCAweDAwM2Z9LAorCXsweDAxLCAweDAwMDAsIDB4MDA0MH0sCisJezB4MDEsIDB4MDAzNSwgMHgwMDQxfSwKKwl7MHgwMSwgMHgwMDUzLCAweDAwNDJ9LAorCXsweDAxLCAweDAwNjksIDB4MDA0M30sCisJezB4MDEsIDB4MDA3YywgMHgwMDQ0fSwKKwl7MHgwMSwgMHgwMDhjLCAweDAwNDV9LAorCXsweDAxLCAweDAwOWEsIDB4MDA0Nn0sCisJezB4MDEsIDB4MDBhOCwgMHgwMDQ3fSwKKwl7MHgwMSwgMHgwMGI0LCAweDAwNDh9LAorCXsweDAxLCAweDAwYmYsIDB4MDA0OX0sCisJezB4MDEsIDB4MDBjYSwgMHgwMDRhfSwKKwl7MHgwMSwgMHgwMGQ0LCAweDAwNGJ9LAorCXsweDAxLCAweDAwZGQsIDB4MDA0Y30sCisJezB4MDEsIDB4MDBlNywgMHgwMDRkfSwKKwl7MHgwMSwgMHgwMGVmLCAweDAwNGV9LAorCXsweDAxLCAweDAwZjgsIDB4MDA0Zn0sCisJezB4MDEsIDB4MDBmZiwgMHgwMDUwfSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwNTZ9LAorCXsweDAxLCAweDAwNjAsIDB4MDA1N30sCisJezB4MDEsIDB4MDA0MCwgMHgwMDU4fSwKKwl7MHgwMSwgMHgwMDExLCAweDAwNTl9LAorCXsweDAxLCAweDAwMDEsIDB4MDA1YX0sCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDAyLCAweDAwMDcsIDB4MDAwNX0sCisJezB4MDIsIDB4MDAxNSwgMHgwMDA2fSwKKwl7MHgwMiwgMHgxMDBhLCAweDAwMDd9LAorCXsweDAyLCAweGEwNDgsIDB4MDAwMH0sCisJezB4MDIsIDB4YzAwMiwgMHgwMDAxfSwKKwl7MHgwMiwgMHgwMDBmLCAweDAwMDV9LAorCXsweDAyLCAweGEwNDgsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMiwgMHgwMDA0fSwKKwl7MHgwNSwgMHgwMDI1LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyNiwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAxLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjcsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDAxLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMGQyLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjAsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDkwLCAweDAwMDV9LAorCXsweDAxLCAweDAwYTYsIDB4MDAwMH0sCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7MHgwMiwgMHgyMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjIsIDB4MDAwNH0sCisJezB4MDUsIDB4MDAxNSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMGVhLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDBkMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMCwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDJiLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAyMywgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDMyLCAweDAwMDF9LAorCXsweDA1LCAweDAwMjMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMywgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzQsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDUwLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDA1MSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwNTIsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDU0LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDEsIDB4MDAwMH0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDAxfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDJ9LAorCXsweDAwLCAweDAwMGMsIDB4MDAwM30sCisJezB4MDAsIDB4MDAwMCwgMHgwMDA0fSwKKwl7MHgwMCwgMHgwMDkwLCAweDAwMDV9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwNn0sCisJezB4MDAsIDB4MDA0MCwgMHgwMDA3fSwKKwl7MHgwMCwgMHgwMGMwLCAweDAwMDh9LAorCXsweDAwLCAweDAwNGEsIDB4MDAwOX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDBhfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMGJ9LAorCXsweDAwLCAweDAwMDEsIDB4MDAwY30sCisJezB4MDAsIDB4MDAwMSwgMHgwMDBkfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMGV9LAorCXsweDAwLCAweDAwMDIsIDB4MDAwZn0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDEwfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMTF9LAorCXsweDAwLCAweDAwMDAsIDB4MDAxMn0sCisJezB4MDAsIDB4MDAwMiwgMHgwMDIwfSwKKwl7MHgwMCwgMHgwMDgwLCAweDAwMjF9LAorCXsweDAwLCAweDAwMDEsIDB4MDAyMn0sCisJezB4MDAsIDB4MDBlMCwgMHgwMDIzfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMjR9LAorCXsweDAwLCAweDAwZDUsIDB4MDAyNX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDI2fSwKKwl7MHgwMCwgMHgwMDBiLCAweDAwMjd9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0Nn0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDQ3fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwNDh9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0OX0sCisJezB4MDAsIDB4MDAwOCwgMHgwMDRhfSwKKwl7MHhmZiwgMHgwMDAwLCAweDAwZDB9LAorCXsweGZmLCAweDAwZDgsIDB4MDBkMX0sCisJezB4ZmYsIDB4MDAwMCwgMHgwMGQ0fSwKKwl7MHhmZiwgMHgwMDAwLCAweDAwZDV9LAorCXsweDAxLCAweDAwYTYsIDB4MDAwMH0sCisJezB4MDEsIDB4MDAyOCwgMHgwMDAxfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMDJ9LAorCXsweDAxLCAweDAwMGEsIDB4MDAwM30sCisJezB4MDEsIDB4MDA0MCwgMHgwMDA0fSwKKwl7MHgwMSwgMHgwMDY2LCAweDAwMDd9LAorCXsweDAxLCAweDAwMTEsIDB4MDAwOH0sCisJezB4MDEsIDB4MDAzMiwgMHgwMDA5fSwKKwl7MHgwMSwgMHgwMGZkLCAweDAwMGF9LAorCXsweDAxLCAweDAwMzgsIDB4MDAwYn0sCisJezB4MDEsIDB4MDBkMSwgMHgwMDBjfSwKKwl7MHgwMSwgMHgwMGY3LCAweDAwMGR9LAorCXsweDAxLCAweDAwZWQsIDB4MDAwZX0sCisJezB4MDEsIDB4MDBkOCwgMHgwMDBmfSwKKwl7MHgwMSwgMHgwMDM4LCAweDAwMTB9LAorCXsweDAxLCAweDAwZmYsIDB4MDAxNX0sCisJezB4MDEsIDB4MDAwMSwgMHgwMDE2fSwKKwl7MHgwMSwgMHgwMDMyLCAweDAwMTd9LAorCXsweDAxLCAweDAwMjMsIDB4MDAxOH0sCisJezB4MDEsIDB4MDBjZSwgMHgwMDE5fSwKKwl7MHgwMSwgMHgwMDIzLCAweDAwMWF9LAorCXsweDAxLCAweDAwMzIsIDB4MDAxYn0sCisJezB4MDEsIDB4MDA4ZCwgMHgwMDFjfSwKKwl7MHgwMSwgMHgwMGNlLCAweDAwMWR9LAorCXsweDAxLCAweDAwOGQsIDB4MDAxZX0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDFmfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwMjB9LAorCXsweDAxLCAweDAwZmYsIDB4MDAzZX0sCisJezB4MDEsIDB4MDAwMywgMHgwMDNmfSwKKwl7MHgwMSwgMHgwMDAwLCAweDAwNDB9LAorCXsweDAxLCAweDAwMzUsIDB4MDA0MX0sCisJezB4MDEsIDB4MDA1MywgMHgwMDQyfSwKKwl7MHgwMSwgMHgwMDY5LCAweDAwNDN9LAorCXsweDAxLCAweDAwN2MsIDB4MDA0NH0sCisJezB4MDEsIDB4MDA4YywgMHgwMDQ1fSwKKwl7MHgwMSwgMHgwMDlhLCAweDAwNDZ9LAorCXsweDAxLCAweDAwYTgsIDB4MDA0N30sCisJezB4MDEsIDB4MDBiNCwgMHgwMDQ4fSwKKwl7MHgwMSwgMHgwMGJmLCAweDAwNDl9LAorCXsweDAxLCAweDAwY2EsIDB4MDA0YX0sCisJezB4MDEsIDB4MDBkNCwgMHgwMDRifSwKKwl7MHgwMSwgMHgwMGRkLCAweDAwNGN9LAorCXsweDAxLCAweDAwZTcsIDB4MDA0ZH0sCisJezB4MDEsIDB4MDBlZiwgMHgwMDRlfSwKKwl7MHgwMSwgMHgwMGY4LCAweDAwNGZ9LAorCXsweDAxLCAweDAwZmYsIDB4MDA1MH0sCisJezB4MDEsIDB4MDAwMSwgMHgwMDU2fSwKKwl7MHgwMSwgMHgwMDYwLCAweDAwNTd9LAorCXsweDAxLCAweDAwNDAsIDB4MDA1OH0sCisJezB4MDEsIDB4MDAxMSwgMHgwMDU5fSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwNWF9LAorCXsweDAyLCAweDAwMDcsIDB4MDAwNX0sCisJezB4MDIsIDB4YTA0OCwgMHgwMDAwfSwKKwl7MHgwMiwgMHgwMDA3LCAweDAwMDV9LAorCXsweDAyLCAweDAwMTUsIDB4MDAwNn0sCisJezB4MDIsIDB4MTAwYSwgMHgwMDA3fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDAyLCAweGMwMDIsIDB4MDAwMX0sCisJezB4MDIsIDB4MDAwZiwgMHgwMDA1fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDA1LCAweDAwMjIsIDB4MDAwNH0sCisJezB4MDUsIDB4MDAyNSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjYsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDI3LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDBkMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIwLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDAsIDB4MDA5MCwgMHgwMDA1fSwKKwl7MHgwMSwgMHgwMGE2LCAweDAwMDB9LAorCXsweDA1LCAweDAwMjYsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDI3LCAweDAwMDF9LAorCXsweDA1LCAweDAwMWUsIDB4MDAwMH0sCisJezB4MDEsIDB4MDAwMywgMHgwMDNmfSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwNTZ9LAorCXsweDAxLCAweDAwMTEsIDB4MDAwOH0sCisJezB4MDEsIDB4MDAzMiwgMHgwMDA5fSwKKwl7MHgwMSwgMHhmZmZkLCAweDAwMGF9LAorCXsweDAxLCAweDAwMjMsIDB4MDAwYn0sCisJezB4MDEsIDB4ZmZlYSwgMHgwMDBjfSwKKwl7MHgwMSwgMHhmZmY0LCAweDAwMGR9LAorCXsweDAxLCAweGZmZmMsIDB4MDAwZX0sCisJezB4MDEsIDB4ZmZlMywgMHgwMDBmfSwKKwl7MHgwMSwgMHgwMDFmLCAweDAwMTB9LAorCXsweDAxLCAweDAwYTgsIDB4MDAwMX0sCisJezB4MDEsIDB4MDA2NywgMHgwMDA3fSwKKwl7MHgwMSwgMHgwMDQyLCAweDAwNTF9LAorCXsweDAxLCAweDAwNTEsIDB4MDA1M30sCisJezB4MDEsIDB4MDAwYSwgMHgwMDAzfSwKKwl7MHgwMiwgMHhjMDAyLCAweDAwMDF9LAorCXsweDAyLCAweDAwMDcsIDB4MDAwNX0sCisJezB4MDEsIDB4MDA0MiwgMHgwMDUxfSwKKwl7MHgwMSwgMHgwMDUxLCAweDAwNTN9LAorCXsweDA1LCAweDAwMjYsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMSwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDI3LCAweDAwMDF9LAorCXsweDA1LCAweDAwMmQsIDB4MDAwMH0sCisJezB4MDEsIDB4MDAwMywgMHgwMDNmfSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwNTZ9LAorCXsweDAyLCAweGMwMDAsIDB4MDAwMX0sCisJezB4MDIsIDB4MDAwMCwgMHgwMDA1fSwKKwl7fQorfTsKKworLyogVW5rbm93IGNhbWVyYSBmcm9tIE9yaSBVc2JpZCAweDAwMDA6MHgwMDAwICovCisvKiBCYXNlZCBvbiBzbm9vcHMgZnJvbSBPcmkgQ29oZW4gKi8KK3N0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTAxY19teXN0ZXJpb3VzX29wZW5fZGF0YVtdWzNdID0geworCXsweDAyLCAweDAwMGYsIDB4MDAwNX0sCisJezB4MDIsIDB4YTA0OCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIyLCAweDAwMDR9LAorLyogRFNQIFJlZ2lzdGVycyAqLworCXsweDAxLCAweDAwMTYsIDB4MDAxMX0sCS8qIFJHQiBvZmZzZXQgKi8KKwl7MHgwMSwgMHgwMDAwLCAweDAwMTJ9LAorCXsweDAxLCAweDAwMDYsIDB4MDAxM30sCisJezB4MDEsIDB4MDA3OCwgMHgwMDUxfSwKKwl7MHgwMSwgMHgwMDQwLCAweDAwNTJ9LAorCXsweDAxLCAweDAwNDYsIDB4MDA1M30sCisJezB4MDEsIDB4MDA0MCwgMHgwMDU0fSwKKwl7MHgwMCwgMHgwMDI1LCAweDAwMDB9LAorLyoJezB4MDAsIDB4MDAwMCwgMHgwMDAwIH0sICovCisvKiBQYXJ0IDIgKi8KKy8qIFRHIFJlZ2lzdGVycyAqLworCXsweDAwLCAweDAwMjYsIDB4MDAwMH0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDI3LCAweDAwMDB9LAorCXsweDAwLCAweDAwOGEsIDB4MDAwMH0sCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7MHgwMiwgMHgyMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjIsIDB4MDAwNH0sCisJezB4MDUsIDB4MDAxNSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMGVhLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDBkMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMCwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDJiLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzEsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAyMywgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDMyLCAweDAwMDF9LAorCXsweDA1LCAweDAwMjMsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAzMywgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDIzLCAweDAwMDB9LAorCXsweDA1LCAweDAwMzQsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMiwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDUwLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDA1MSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorCXsweDA1LCAweDAwNTIsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDU0LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDEsIDB4MDAwMH0sCisJe30KK307CisKKy8qIEJhc2VkIG9uIHNub29wcyBmcm9tIE9yaSBDb2hlbiAqLworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDFjX215c3RlcmlvdXNfaW5pdF9kYXRhW11bM10gPSB7CisvKiBQYXJ0IDMgKi8KKy8qIFRHIHJlZ2lzdGVycyAqLworLyoJezB4MDAsIDB4MDAwMCwgMHgwMDAwfSwgKi8KKwl7MHgwMCwgMHgwMDAwLCAweDAwMDF9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwMn0sCisJezB4MDAsIDB4MDAwNiwgMHgwMDAzfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDR9LAorCXsweDAwLCAweDAwOTAsIDB4MDAwNX0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDA2fSwKKwl7MHgwMCwgMHgwMDQwLCAweDAwMDd9LAorCXsweDAwLCAweDAwYzAsIDB4MDAwOH0sCisJezB4MDAsIDB4MDA0YSwgMHgwMDA5fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMGF9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwYn0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDBjfSwKKwl7MHgwMCwgMHgwMDAxLCAweDAwMGR9LAorCXsweDAwLCAweDAwMDAsIDB4MDAwZX0sCisJezB4MDAsIDB4MDAwMiwgMHgwMDBmfSwKKwl7MHgwMCwgMHgwMDAxLCAweDAwMTB9LAorCXsweDAwLCAweDAwMDAsIDB4MDAxMX0sCisJezB4MDAsIDB4MDAwMSwgMHgwMDEyfSwKKwl7MHgwMCwgMHgwMDAyLCAweDAwMjB9LAorCXsweDAwLCAweDAwODAsIDB4MDAyMX0sCS8qIDY0MCAqLworCXsweDAwLCAweDAwMDEsIDB4MDAyMn0sCisJezB4MDAsIDB4MDBlMCwgMHgwMDIzfSwJLyogNDgwICovCisJezB4MDAsIDB4MDAwMCwgMHgwMDI0fSwJLyogT2Zmc2V0IEggaGlnaHQgKi8KKwl7MHgwMCwgMHgwMGQzLCAweDAwMjV9LAkvKiBsb3cgKi8KKwl7MHgwMCwgMHgwMDAwLCAweDAwMjZ9LAkvKiBPZmZzZXQgViAqLworCXsweDAwLCAweDAwMGQsIDB4MDAyN30sCS8qIGxvdyAqLworCXsweDAwLCAweDAwMDAsIDB4MDA0Nn0sCisJezB4MDAsIDB4MDAwMCwgMHgwMDQ3fSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwNDh9LAorCXsweDAwLCAweDAwMDAsIDB4MDA0OX0sCisJezB4MDAsIDB4MDAwOCwgMHgwMDRhfSwKKy8qIERTUCBSZWdpc3RlcnMJICovCisJezB4MDEsIDB4MDBhNiwgMHgwMDAwfSwKKwl7MHgwMSwgMHgwMDI4LCAweDAwMDF9LAorCXsweDAxLCAweDAwMDAsIDB4MDAwMn0sCisJezB4MDEsIDB4MDAwYSwgMHgwMDAzfSwJLyogTGV2ZWwgQ2FsYyBiaXQ3IC0+MSBBdXRvICovCisJezB4MDEsIDB4MDA0MCwgMHgwMDA0fSwKKwl7MHgwMSwgMHgwMDY2LCAweDAwMDd9LAorCXsweDAxLCAweDAwMGYsIDB4MDAwOH0sCS8qIEExMSBDb2xvciBjb3JyZWN0aW9uIGNvZWZmICovCisJezB4MDEsIDB4MDAyZCwgMHgwMDA5fSwJLyogQTEyICovCisJezB4MDEsIDB4MDAwNSwgMHgwMDBhfSwJLyogQTEzICovCisJezB4MDEsIDB4MDAyMywgMHgwMDBifSwJLyogQTIxICovCisJezB4MDEsIDB4MDBlMCwgMHgwMDBjfSwJLyogQTIyICovCisJezB4MDEsIDB4MDBmZCwgMHgwMDBkfSwJLyogQTIzICovCisJezB4MDEsIDB4MDBmNCwgMHgwMDBlfSwJLyogQTMxICovCisJezB4MDEsIDB4MDBlNCwgMHgwMDBmfSwJLyogQTMyICovCisJezB4MDEsIDB4MDAyOCwgMHgwMDEwfSwJLyogQTMzICovCisJezB4MDEsIDB4MDBmZiwgMHgwMDE1fSwJLyogUmVzZXJ2ZWQgKi8KKwl7MHgwMSwgMHgwMDAxLCAweDAwMTZ9LAkvKiBSZXNlcnZlZCAqLworCXsweDAxLCAweDAwMzIsIDB4MDAxN30sCS8qIFdpbjEgU3RhcnQgYmVnaW4gKi8KKwl7MHgwMSwgMHgwMDIzLCAweDAwMTh9LAorCXsweDAxLCAweDAwY2UsIDB4MDAxOX0sCisJezB4MDEsIDB4MDAyMywgMHgwMDFhfSwKKwl7MHgwMSwgMHgwMDMyLCAweDAwMWJ9LAorCXsweDAxLCAweDAwOGQsIDB4MDAxY30sCisJezB4MDEsIDB4MDBjZSwgMHgwMDFkfSwKKwl7MHgwMSwgMHgwMDhkLCAweDAwMWV9LAorCXsweDAxLCAweDAwMDAsIDB4MDAxZn0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDIwfSwJLyogV2luMSBTdGFydCBlbmQgKi8KKwl7MHgwMSwgMHgwMGZmLCAweDAwM2V9LAkvKiBSZXNlcnZlZCBiZWdpbiAqLworCXsweDAxLCAweDAwMDIsIDB4MDAzZn0sCisJezB4MDEsIDB4MDAwMCwgMHgwMDQwfSwKKwl7MHgwMSwgMHgwMDM1LCAweDAwNDF9LAorCXsweDAxLCAweDAwNTMsIDB4MDA0Mn0sCisJezB4MDEsIDB4MDA2OSwgMHgwMDQzfSwKKwl7MHgwMSwgMHgwMDdjLCAweDAwNDR9LAorCXsweDAxLCAweDAwOGMsIDB4MDA0NX0sCisJezB4MDEsIDB4MDA5YSwgMHgwMDQ2fSwKKwl7MHgwMSwgMHgwMGE4LCAweDAwNDd9LAorCXsweDAxLCAweDAwYjQsIDB4MDA0OH0sCisJezB4MDEsIDB4MDBiZiwgMHgwMDQ5fSwKKwl7MHgwMSwgMHgwMGNhLCAweDAwNGF9LAorCXsweDAxLCAweDAwZDQsIDB4MDA0Yn0sCisJezB4MDEsIDB4MDBkZCwgMHgwMDRjfSwKKwl7MHgwMSwgMHgwMGU3LCAweDAwNGR9LAorCXsweDAxLCAweDAwZWYsIDB4MDA0ZX0sCisJezB4MDEsIDB4MDBmOCwgMHgwMDRmfSwKKwl7MHgwMSwgMHgwMGZmLCAweDAwNTB9LAorCXsweDAxLCAweDAwMDMsIDB4MDA1Nn0sCS8qIFJlc2VydmVkIGVuZCAqLworCXsweDAxLCAweDAwNjAsIDB4MDA1N30sCS8qIEVkZ2UgR2FpbiAqLworCXsweDAxLCAweDAwNDAsIDB4MDA1OH0sCisJezB4MDEsIDB4MDAxMSwgMHgwMDU5fSwJLyogRWRnZSBCYW5kd2lkdGggKi8KKwl7MHgwMSwgMHgwMDAxLCAweDAwNWF9LAorCXsweDAyLCAweDAwMDcsIDB4MDAwNX0sCisJezB4MDIsIDB4YTA0OCwgMHgwMDAwfSwKKwl7MHgwMiwgMHgwMDA3LCAweDAwMDV9LAorCXsweDAyLCAweDAwMTUsIDB4MDAwNn0sCisJezB4MDIsIDB4MjAwYSwgMHgwMDA3fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDAyLCAweGMwMDAsIDB4MDAwMX0sCisJezB4MDIsIDB4MDAwZiwgMHgwMDA1fSwKKwl7MHgwMiwgMHhhMDQ4LCAweDAwMDB9LAorCXsweDA1LCAweDAwMjIsIDB4MDAwNH0sCisJezB4MDUsIDB4MDAyNSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAwLCAweDAwMDB9LAorLyogUGFydCA0ICAgICAgICAgICAgICovCisJezB4MDUsIDB4MDAyNiwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDAxLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjcsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwNSwgMHgwMDAxLCAweDAwMDF9LAorCXsweDA1LCAweDAwMDAsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyMSwgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMGQyLCAweDAwMDB9LAorCXsweDA1LCAweDAwMjAsIDB4MDAwMX0sCisJezB4MDUsIDB4MDAwMCwgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDkwLCAweDAwMDV9LAorCXsweDAxLCAweDAwYTYsIDB4MDAwMH0sCisJezB4MDIsIDB4MDAwMCwgMHgwMDA1fSwKKwl7MHgwNSwgMHgwMDI2LCAweDAwMDF9LAorCXsweDA1LCAweDAwMDEsIDB4MDAwMH0sCisJezB4MDUsIDB4MDAyNywgMHgwMDAxfSwKKwl7MHgwNSwgMHgwMDRlLCAweDAwMDB9LAorLyogUGFydCA1ICAgICAgICAJICovCisJezB4MDEsIDB4MDAwMywgMHgwMDNmfSwKKwl7MHgwMSwgMHgwMDAxLCAweDAwNTZ9LAorCXsweDAxLCAweDAwMGYsIDB4MDAwOH0sCisJezB4MDEsIDB4MDAyZCwgMHgwMDA5fSwKKwl7MHgwMSwgMHgwMDA1LCAweDAwMGF9LAorCXsweDAxLCAweDAwMjMsIDB4MDAwYn0sCisJezB4MDEsIDB4ZmZlMCwgMHgwMDBjfSwKKwl7MHgwMSwgMHhmZmZkLCAweDAwMGR9LAorCXsweDAxLCAweGZmZjQsIDB4MDAwZX0sCisJezB4MDEsIDB4ZmZlNCwgMHgwMDBmfSwKKwl7MHgwMSwgMHgwMDI4LCAweDAwMTB9LAorCXsweDAxLCAweDAwYTgsIDB4MDAwMX0sCisJezB4MDEsIDB4MDA2NiwgMHgwMDA3fSwKKwl7MHgwMSwgMHgwMDMyLCAweDAwMTd9LAorCXsweDAxLCAweDAwMjMsIDB4MDAxOH0sCisJezB4MDEsIDB4MDBjZSwgMHgwMDE5fSwKKwl7MHgwMSwgMHgwMDIzLCAweDAwMWF9LAorCXsweDAxLCAweDAwMzIsIDB4MDAxYn0sCisJezB4MDEsIDB4MDA4ZCwgMHgwMDFjfSwKKwl7MHgwMSwgMHgwMGNlLCAweDAwMWR9LAorCXsweDAxLCAweDAwOGQsIDB4MDAxZX0sCisJezB4MDEsIDB4MDBjOCwgMHgwMDE1fSwJLyogYzggUG9pZHMgZm9ydCBMdW1hICovCisJezB4MDEsIDB4MDAzMiwgMHgwMDE2fSwJLyogMzIgKi8KKwl7MHgwMSwgMHgwMDE2LCAweDAwMTF9LAkvKiBSIDAwICovCisJezB4MDEsIDB4MDAxNiwgMHgwMDEyfSwJLyogRyAwMCAqLworCXsweDAxLCAweDAwMTYsIDB4MDAxM30sCS8qIEIgMDAgKi8KKwl7MHgwMSwgMHgwMDBhLCAweDAwMDN9LAorCXsweDAyLCAweGMwMDIsIDB4MDAwMX0sCisJezB4MDIsIDB4MDAwNywgMHgwMDA1fSwKKwl7fQorfTsKKworc3RhdGljIGludCByZWdfd3JpdGUoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJICAgICBfX3UxNiByZXEsIF9fdTE2IGluZGV4LCBfX3UxNiB2YWx1ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLCBpbmRleCwgTlVMTCwgMCwgNTAwKTsKKwlQREVCVUcoRF9VU0JPLCAicmVnIHdyaXRlOiAweCUwMnggMHglMDJ4IDB4JTAyeCIsCisJCXJlcSwgaW5kZXgsIHZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlOiBlcnJvciAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEgKi8KK3N0YXRpYyBpbnQgcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191MTYgcmVxLAkvKiBiUmVxdWVzdCAqLworCQkJX191MTYgaW5kZXgsCS8qIHdJbmRleCAqLworCQkJX191MTYgbGVuZ3RoKQkvKiB3TGVuZ3RoICgxIG9yIDIgb25seSkgKi8KK3sKKwlpbnQgcmV0OworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkJLyogdmFsdWUgKi8KKwkJCWluZGV4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW5ndGgsCisJCQk1MDApOwkJCS8qIHRpbWVvdXQgKi8KKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJyZWdfcmVhZCBlcnIgJWQiLCByZXQpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdIDw8IDgpICsgZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBfX3UxNiBkYXRhW11bM10pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQsIGkgPSAwOworCisJd2hpbGUgKGRhdGFbaV1bMF0gIT0gMCB8fCBkYXRhW2ldWzFdICE9IDAgfHwgZGF0YVtpXVsyXSAhPSAwKSB7CisJCXJldCA9IHJlZ193cml0ZShkZXYsIGRhdGFbaV1bMF0sIGRhdGFbaV1bMl0sIGRhdGFbaV1bMV0pOworCQlpZiAocmV0IDwgMCkgeworCQkJUERFQlVHKERfRVJSLAorCQkJCSJSZWcgd3JpdGUgZmFpbGVkIGZvciAweCUwMngsMHglMDJ4LDB4JTAyeCIsCisJCQkJZGF0YVtpXVswXSwgZGF0YVtpXVsxXSwgZGF0YVtpXVsyXSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWkrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgU1BDQTUwMV9SRUdfQ0NEU1AsIDB4MTEsIHNkLT5icmlnaHRuZXNzKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIFNQQ0E1MDFfUkVHX0NDRFNQLCAweDEyLCBzZC0+YnJpZ2h0bmVzcyk7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCBTUENBNTAxX1JFR19DQ0RTUCwgMHgxMywgc2QtPmJyaWdodG5lc3MpOworfQorCitzdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191MTYgYnJpZ2h0bmVzczsKKworCWJyaWdodG5lc3MgPSByZWdfcmVhZChnc3BjYV9kZXYsIFNQQ0E1MDFfUkVHX0NDRFNQLCAweDExLCAyKTsKKwlzZC0+YnJpZ2h0bmVzcyA9IGJyaWdodG5lc3MgPDwgMTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwMCwgMHgwMCwKKwkJCQkgIChzZC0+Y29udHJhc3QgPj4gOCkgJiAweGZmKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDAsIDB4MDEsCisJCQkJICBzZC0+Y29udHJhc3QgJiAweGZmKTsKK30KKworc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworLyoJc3BjYTUweC0+Y29udHJhc3QgPSAweGFhMDE7ICovCit9CisKK3N0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCBTUENBNTAxX1JFR19DQ0RTUCwgMHgwYywgc2QtPmNvbG9ycyk7Cit9CisKK3N0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9ycyA9IHJlZ19yZWFkKGdzcGNhX2RldiwgU1BDQTUwMV9SRUdfQ0NEU1AsIDB4MGMsIDIpOworLyoJc2QtPmh1ZSA9IChyZWdfcmVhZChnc3BjYV9kZXYsIFNQQ0E1MDFfUkVHX0NDRFNQLCAweDEzLCAqLworLyoJCQkyKSAmIDB4RkYpIDw8IDg7ICovCit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtOworCV9fdTE2IHZlbmRvcjsKKwlfX3UxNiBwcm9kdWN0OworCisJdmVuZG9yID0gaWQtPmlkVmVuZG9yOworCXByb2R1Y3QgPSBpZC0+aWRQcm9kdWN0OworCXN3aXRjaCAodmVuZG9yKSB7CisJY2FzZSAweDAwMDA6CQkvKiBVbmtub3cgQ2FtZXJhICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDAwMDA6ICovCisJCQlzZC0+c3VidHlwZSA9IE15c3RGcm9tT3JpVW5rbm93bkNhbWVyYTsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDQwYToJCS8qIEtvZGFrIGNhbWVyYXMgKi8KKy8qCQlzd2l0Y2ggKHByb2R1Y3QpIHsgKi8KKy8qCQljYXNlIDB4MDAwMjogKi8KKwkJCXNkLT5zdWJ0eXBlID0gS29kYWtEVkMzMjU7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDA0OTc6CQkvKiBTbWlsZSBJbnRlcm5hdGlvbmFsICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweGMwMDE6ICovCisJCQlzZC0+c3VidHlwZSA9IFNtaWxlSW50bENhbWVyYTsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDUwNjoJCS8qIDNDT00gY2FtZXJhcyAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgwMGRmOiAqLworCQkJc2QtPnN1YnR5cGUgPSBUaHJlZUNvbUhvbWVDb25uZWN0TGl0ZTsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDczMzoJLyogUmViYWRnZWQgVmlld1F1ZXN0IChJbnRlbCkgYW5kIFZpZXdRdWVzdCBjYW1lcmFzICovCisJCXN3aXRjaCAocHJvZHVjdCkgeworCQljYXNlIDB4MDQwMToKKwkJCXNkLT5zdWJ0eXBlID0gSW50ZWxDcmVhdGVBbmRTaGFyZTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDQwMjoKKwkJCXNkLT5zdWJ0eXBlID0gVmlld1F1ZXN0TTMxOEI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MTc3NjoJCS8qIEFyb3dhbmEgKi8KKy8qCQlzd2l0Y2ggKHByb2R1Y3QpIHsgKi8KKy8qCQljYXNlIDB4NTAxYzogKi8KKwkJCXNkLT5zdWJ0eXBlID0gQXJvd2FuYTMwMEtDTU9TQ2FtZXJhOworLyoJCQlicmVhazsgKi8KKy8qCQl9ICovCisJCWJyZWFrOworCX0KKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5kZXZfbmFtZSA9IChjaGFyICopIGlkLT5kcml2ZXJfaW5mbzsKKwljYW0tPmVwYWRkciA9IDB4MDE7CisJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOworCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbTVlfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tNWV9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Y29sb3JzID0gc2RfY3RybHNbTVlfQ09MT1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisKKwlzd2l0Y2ggKHNkLT5zdWJ0eXBlKSB7CisJY2FzZSBBcm93YW5hMzAwS0NNT1NDYW1lcmE6CisJY2FzZSBTbWlsZUludGxDYW1lcmE6CisJCS8qIEFyb3dhbmEgMzAwayBDTU9TIENhbWVyYSBkYXRhICovCisJCWlmICh3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTAxY19hcm93YW5hX2luaXRfZGF0YSkpCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKwljYXNlIE15c3RGcm9tT3JpVW5rbm93bkNhbWVyYToKKwkJLyogVW5Lbm93IE9yaSBDTU9TIENhbWVyYSBkYXRhICovCisJCWlmICh3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTAxY19teXN0ZXJpb3VzX29wZW5fZGF0YSkpCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBnZW5lcmljIHNwY2E1MDEgaW5pdCBkYXRhICovCisJCWlmICh3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTAxX2luaXRfZGF0YSkpCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7CitlcnJvcjoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXN3aXRjaCAoc2QtPnN1YnR5cGUpIHsKKwljYXNlIFRocmVlQ29tSG9tZUNvbm5lY3RMaXRlOgorCQkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciAzY29tIGRhdGEgKi8KKwkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwMV8zY29tX29wZW5fZGF0YSk7CisJCWJyZWFrOworCWNhc2UgQXJvd2FuYTMwMEtDTU9TQ2FtZXJhOgorCWNhc2UgU21pbGVJbnRsQ2FtZXJhOgorCQkvKiBBcm93YW5hIDMwMGsgQ01PUyBDYW1lcmEgZGF0YSAqLworCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTAxY19hcm93YW5hX29wZW5fZGF0YSk7CisJCWJyZWFrOworCWNhc2UgTXlzdEZyb21PcmlVbmtub3duQ2FtZXJhOgorCQkvKiBVbktub3cgIENNT1MgQ2FtZXJhIGRhdGEgKi8KKwkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwMWNfbXlzdGVyaW91c19pbml0X2RhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBHZW5lcmljIDUwMSBvcGVuIGRhdGEgKi8KKwkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwMV9vcGVuX2RhdGEpOworCX0KKwlQREVCVUcoRF9TVFJFQU0sICJJbml0aWFsaXppbmcgU1BDQTUwMSBmaW5pc2hlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCBtb2RlOworCisJLyogbWVtb3JpemUgdGhlIHdhbnRlZCBwaXhlbCBmb3JtYXQgKi8KKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisKKwkvKiBFbmFibGUgSVNPIHBhY2tldCBtYWNoaW5lIENUUkwgcmVnPTIsCisJICogaW5kZXg9MSBiaXRtYXNrPTB4MiAoYml0IG9yZGluYWwgMSkgKi8KKwlyZWdfd3JpdGUoZGV2LCBTUENBNTBYX1JFR19VU0IsIDB4NiwgMHg5NCk7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAwOiAvKiA2NDB4NDgwICovCisJCXJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX1VTQiwgMHgwNywgMHgwMDRhKTsKKwkJYnJlYWs7CisJY2FzZSAxOiAvKiAzMjB4MjQwICovCisJCXJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX1VTQiwgMHgwNywgMHgxMDRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgMjogICogMTYweDEyMCAqLworCQlyZWdfd3JpdGUoZGV2LCBTUENBNTBYX1JFR19VU0IsIDB4MDcsIDB4MjA0YSk7CisJCWJyZWFrOworCX0KKwlyZWdfd3JpdGUoZGV2LCBTUENBNTAxX1JFR19DVExSTCwgMHgwMSwgMHgwMik7CisKKwkvKiBIREcgYXRsZWFzdCB0aGUgSW50ZWwgQ3JlYXRlQW5kU2hhcmUgbmVlZHMgdG8gaGF2ZSBvbmUgb2YgaXRzCisJICogYnJpZ2h0bmVzcyAvIGNvbnRyYXN0IC8gY29sb3Igc2V0IG90aGVyd2lzZSBpdCBhc3N1bWVzIHdoYXQgc2VlbXMKKwkgKiBtYXggY29udHJhc3QuIE5vdGUgdGhhdCBzdHJhbmdlIGVub3VnaCBzZXR0aW5nIGFueSBvZiB0aGVzZSBpcworCSAqIGVub3VnaCB0byBmaXggdGhlIG1heCBjb250cmFzdCBwcm9ibGVtLCB0byBiZSBzdXJlIHdlIHNldCBhbGwgMyAqLworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldGNvbG9ycyhnc3BjYV9kZXYpOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJLyogRGlzYWJsZSBJU08gcGFja2V0CisJICogbWFjaGluZSBDVFJMIHJlZz0yLCBpbmRleD0xIGJpdG1hc2s9MHgwIChiaXQgb3JkaW5hbCAxKSAqLworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgU1BDQTUwMV9SRUdfQ1RMUkwsIDB4MDEsIDB4MDApOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IGNsb3NlIHRpbWUgKi8KK3N0YXRpYyB2b2lkIHNkX2Nsb3NlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIFNQQ0E1MDFfUkVHX0NUTFJMLCAweDA1LCAweDAwKTsKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgkJCQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCisJCQkJCUxBU1RfUEFDS0VULAorCQkJCQlmcmFtZSwKKwkJCQkJZGF0YSwgMCk7CisJCWRhdGEgKz0gU1BDQTUwMV9PRkZTRVRfREFUQTsKKwkJbGVuIC09IFNQQ0E1MDFfT0ZGU0VUX0RBVEE7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJZGF0YSwgbGVuKTsKKwkJcmV0dXJuOworCWNhc2UgMHhmZjoJCQkvKiBkcm9wICovCisvKgkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7ICovCisJCXJldHVybjsKKwl9CisJZGF0YSsrOworCWxlbi0tOworCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCisJCQlkYXRhLCBsZW4pOworfQorCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnZXRjb250cmFzdChnc3BjYV9kZXYpOworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb2xvcnMgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWdldGNvbG9ycyhnc3BjYV9kZXYpOworCSp2YWwgPSBzZC0+Y29sb3JzOworCXJldHVybiAwOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5vcGVuID0gc2Rfb3BlbiwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKKwkuY2xvc2UgPSBzZF9jbG9zZSwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworI2RlZmluZSBEVk5NKG5hbWUpIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkgbmFtZQorc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNDBhLCAweDAwMDIpLCBEVk5NKCJLb2RhayBEVkMtMzI1Iil9LAorCXtVU0JfREVWSUNFKDB4MDQ5NywgMHhjMDAxKSwgRFZOTSgiU21pbGUgSW50ZXJuYXRpb25hbCIpfSwKKwl7VVNCX0RFVklDRSgweDA1MDYsIDB4MDBkZiksIERWTk0oIjNDb20gSG9tZUNvbm5lY3QgTGl0ZSIpfSwKKwl7VVNCX0RFVklDRSgweDA3MzMsIDB4MDQwMSksIERWTk0oIkludGVsIENyZWF0ZSBhbmQgU2hhcmUiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNzMzLCAweDA0MDIpLCBEVk5NKCJWaWV3UXVlc3QgTTMxOEIiKX0sCisJe1VTQl9ERVZJQ0UoMHgxNzc2LCAweDUwMWMpLCBEVk5NKCJBcm93YW5hIDMwMEsgQ01PUyBDYW1lcmEiKX0sCisJe1VTQl9ERVZJQ0UoMHgwMDAwLCAweDAwMDApLCBEVk5NKCJNeXN0RnJvbU9yaSBVbmtub3cgQ2FtZXJhIil9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAidiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlYTZlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCkBAIC0wLDAgKzEsOTUxIEBACisvKgorICogU1BDQTUwNSBjaGlwIGJhc2VkIGNhbWVyYXMgaW5pdGlhbGl6YXRpb24gZGF0YQorICoKKyAqIFY0TDIgYnkgSmVhbi1GcmFuY2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgInNwY2E1MDUiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCAxLCA3KQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0gIjIuMS43IjsKKworTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBL1NQQ0E1MDUgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CQkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisKKwlpbnQgYnVmbGVuOworCXVuc2lnbmVkIGNoYXIgdG1wYnVmWzY0MCAqIDQ4MCAqIDMgLyAyXTsgLyogWVlVViBwZXIgbGluZSAqLworCXVuc2lnbmVkIGNoYXIgdG1wYnVmMls2NDAgKiA0ODAgKiAyXTsJLyogWVVZViAqLworCisJdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOworCisJY2hhciBzdWJ0eXBlOworI2RlZmluZSBJbnRlbFBDQ2FtZXJhUHJvIDAKKyNkZWZpbmUgTnh1bHRyYSAxCit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworI2RlZmluZSBTRF9CUklHSFRORVNTIDAKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMTI3LAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwICogMiwKKwkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gNX0sCisJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTc2ICogMiwKKwkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gNH0sCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwICogMiwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMn0sCisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyICogMiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwICogMiwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCit9OworCisjZGVmaW5lIFNQQ0E1MFhfT0ZGU0VUX0RBVEEgMTAKKworI2RlZmluZSBTUENBNTBYX1JFR19VU0IgMHgwMgkvKiBzcGNhNTA1IDUwMSAqLworCisjZGVmaW5lIFNQQ0E1MFhfVVNCX0NUUkwgMHgwMAkvKiBzcGNhNTA1ICovCisjZGVmaW5lIFNQQ0E1MFhfQ1VTQl9FTkFCTEUgMHgwMSAvKiBzcGNhNTA1ICovCisjZGVmaW5lIFNQQ0E1MFhfUkVHX0dMT0JBTCAweDAzCS8qIHNwY2E1MDUgKi8KKyNkZWZpbmUgU1BDQTUwWF9HTUlTQzBfSURTRUwgMHgwMSAvKiBHbG9iYWwgY29udHJvbCBkZXZpY2UgSUQgc2VsZWN0IHNwY2E1MDUgKi8KKyNkZWZpbmUgU1BDQTUwWF9HTE9CQUxfTUlTQzAgMHgwMCAvKiBHbG9iYWwgY29udHJvbCBtaXNjZWxsYW5lb3VzIDAgc3BjYTUwNSAqLworCisjZGVmaW5lIFNQQ0E1MFhfR0xPQkFMX01JU0MxIDB4MDEgLyogNTA1ICovCisjZGVmaW5lIFNQQ0E1MFhfR0xPQkFMX01JU0MzIDB4MDMgLyogNTA1ICovCisjZGVmaW5lIFNQQ0E1MFhfR01JU0MzX1NBQTcxMTNSU1QgMHgyMAkvKiBOb3Qgc3VyZSBhYm91dCB0aGlzIG9uZSBzcGNhNTA1ICovCisKKy8qCisgKiBEYXRhIHRvIGluaXRpYWxpemUgYSBTUENBNTA1LiBDb21tb24gdG8gdGhlIENDRCBhbmQgZXh0ZXJuYWwgbW9kZXMKKyAqLworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDVfaW5pdF9kYXRhW11bM10gPSB7CisJLyogbGluZQkgICBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KKwkvKiAxODE5ICovCisJe1NQQ0E1MFhfUkVHX0dMT0JBTCwgU1BDQTUwWF9HTUlTQzNfU0FBNzExM1JTVCwgU1BDQTUwWF9HTE9CQUxfTUlTQzN9LAorCS8qIFNlbnNvciByZXNldCAqLworCS8qIDE4MjIgKi8ge1NQQ0E1MFhfUkVHX0dMT0JBTCwgMHgwMCwgU1BDQTUwWF9HTE9CQUxfTUlTQzN9LAorCS8qIDE4MjUgKi8ge1NQQ0E1MFhfUkVHX0dMT0JBTCwgMHgwMCwgU1BDQTUwWF9HTE9CQUxfTUlTQzF9LAorCS8qIEJsb2NrIFVTQiByZXNldCAqLworCS8qIDE4MjggKi8ge1NQQ0E1MFhfUkVHX0dMT0JBTCwgU1BDQTUwWF9HTUlTQzBfSURTRUwsCisJCVNQQ0E1MFhfR0xPQkFMX01JU0MwfSwKKworCS8qIDE4MzEgKi8gezB4NSwgMHgwMSwgMHgxMH0sCisJCQkJCS8qIE1heWJlIHBvd2VyIGRvd24gc29tZSBzdHVmZiAqLworCS8qIDE4MzQgKi8gezB4NSwgMHgwZiwgMHgxMX0sCisKKwkvKiBTZXR1cCBpbnRlcm5hbCBDQ0QgID8gKi8KKwkvKiAxODM3ICovIHsweDYsIDB4MTAsIDB4MDh9LAorCS8qIDE4NDAgKi8gezB4NiwgMHgwMCwgMHgwOX0sCisJLyogMTg0MyAqLyB7MHg2LCAweDAwLCAweDBhfSwKKwkvKiAxODQ2ICovIHsweDYsIDB4MDAsIDB4MGJ9LAorCS8qIDE4NDkgKi8gezB4NiwgMHgxMCwgMHgwY30sCisJLyogMTg1MiAqLyB7MHg2LCAweDAwLCAweDBkfSwKKwkvKiAxODU1ICovIHsweDYsIDB4MDAsIDB4MGV9LAorCS8qIDE4NTggKi8gezB4NiwgMHgwMCwgMHgwZn0sCisJLyogMTg2MSAqLyB7MHg2LCAweDEwLCAweDEwfSwKKwkvKiAxODY0ICovIHsweDYsIDB4MDIsIDB4MTF9LAorCS8qIDE4NjcgKi8gezB4NiwgMHgwMCwgMHgxMn0sCisJLyogMTg3MCAqLyB7MHg2LCAweDA0LCAweDEzfSwKKwkvKiAxODczICovIHsweDYsIDB4MDIsIDB4MTR9LAorCS8qIDE4NzYgKi8gezB4NiwgMHg4YSwgMHg1MX0sCisJLyogMTg3OSAqLyB7MHg2LCAweDQwLCAweDUyfSwKKwkvKiAxODgyICovIHsweDYsIDB4YjYsIDB4NTN9LAorCS8qIDE4ODUgKi8gezB4NiwgMHgzZCwgMHg1NH0sCisJe30KK307CisKKy8qCisgKiBEYXRhIHRvIGluaXRpYWxpemUgdGhlIGNhbWVyYSB1c2luZyB0aGUgaW50ZXJuYWwgQ0NECisgKi8KK3N0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA1X29wZW5fZGF0YV9jY2RbXVszXSA9IHsKKwkvKiBsaW5lCSAgIGJtUmVxdWVzdCx2YWx1ZSxpbmRleCAqLworCS8qIEludGVybmFsIENDRCBkYXRhIHNldCAqLworCS8qIDE4OTEgKi8gezB4MywgMHgwNCwgMHgwMX0sCisJLyogVGhpcyBjb3VsZCBiZSBhIHJlc2V0ICovCisJLyogMTg5NCAqLyB7MHgzLCAweDAwLCAweDAxfSwKKworCS8qIFNldHVwIGNvbXByZXNzaW9uIGFuZCBpbWFnZSByZWdpc3RlcnMuIDB4NiBhbmQgMHg3IHNlZW0gdG8gYmUKKwkgICByZWxhdGVkIHRvIEgmViBob2xkLCBhbmQgYXJlIHJlc29sdXRpb24gbW9kZSBzcGVjaWZpYyAqLworCQkvKiAxODk3ICovIHsweDQsIDB4MTAsIDB4MDF9LAorCQkvKiBESUZGKDB4NTApLCB3YXMgKDB4MTApICovCisJLyogMTkwMCAqLyB7MHg0LCAweDAwLCAweDA0fSwKKwkvKiAxOTAzICovIHsweDQsIDB4MDAsIDB4MDV9LAorCS8qIDE5MDYgKi8gezB4NCwgMHgyMCwgMHgwNn0sCisJLyogMTkwOSAqLyB7MHg0LCAweDIwLCAweDA3fSwKKworCS8qIDE5MTIgKi8gezB4OCwgMHgwYSwgMHgwMH0sCisJLyogRElGRiAoMHg0YSksIHdhcyAoMHhhKSAqLworCisJLyogMTkxNSAqLyB7MHg1LCAweDAwLCAweDEwfSwKKwkvKiAxOTE4ICovIHsweDUsIDB4MDAsIDB4MTF9LAorCS8qIDE5MjEgKi8gezB4NSwgMHgwMCwgMHgwMH0sCisJLyogRElGRiBub3Qgd3JpdHRlbiAqLworCS8qIDE5MjQgKi8gezB4NSwgMHgwMCwgMHgwMX0sCisJLyogRElGRiBub3Qgd3JpdHRlbiAqLworCS8qIDE5MjcgKi8gezB4NSwgMHgwMCwgMHgwMn0sCisJLyogRElGRiBub3Qgd3JpdHRlbiAqLworCS8qIDE5MzAgKi8gezB4NSwgMHgwMCwgMHgwM30sCisJLyogRElGRiBub3Qgd3JpdHRlbiAqLworCS8qIDE5MzMgKi8gezB4NSwgMHgwMCwgMHgwNH0sCisJLyogRElGRiBub3Qgd3JpdHRlbiAqLworCQkvKiAxOTM2ICovIHsweDUsIDB4ODAsIDB4MDV9LAorCQkvKiBESUZGIG5vdCB3cml0dGVuICovCisJCS8qIDE5MzkgKi8gezB4NSwgMHhlMCwgMHgwNn0sCisJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KKwkJLyogMTk0MiAqLyB7MHg1LCAweDIwLCAweDA3fSwKKwkJLyogRElGRiBub3Qgd3JpdHRlbiAqLworCQkvKiAxOTQ1ICovIHsweDUsIDB4YTAsIDB4MDh9LAorCQkvKiBESUZGIG5vdCB3cml0dGVuICovCisJCS8qIDE5NDggKi8gezB4NSwgMHgwLCAweDEyfSwKKwkJLyogRElGRiBub3Qgd3JpdHRlbiAqLworCS8qIDE5NTEgKi8gezB4NSwgMHgwMiwgMHgwZn0sCisJLyogRElGRiBub3Qgd3JpdHRlbiAqLworCQkvKiAxOTU0ICovIHsweDUsIDB4MTAsIDB4NDZ9LAorCQkvKiBESUZGIG5vdCB3cml0dGVuICovCisJCS8qIDE5NTcgKi8gezB4NSwgMHg4LCAweDRhfSwKKwkJLyogRElGRiBub3Qgd3JpdHRlbiAqLworCisJLyogMTk2MCAqLyB7MHgzLCAweDA4LCAweDAzfSwKKwkvKiBESUZGICgweDMsMHgyOCwweDMpICovCisJLyogMTk2MyAqLyB7MHgzLCAweDA4LCAweDAxfSwKKwkvKiAxOTY2ICovIHsweDMsIDB4MGMsIDB4MDN9LAorCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KKwkJLyogMTk2OSAqLyB7MHgzLCAweDIxLCAweDAwfSwKKwkJLyogRElGRiAoMHgzOSkgKi8KKworLyogRXh0cmEgYmxvY2sgY29waWVkIGZyb20gaW5pdCB0byBob3BlZnVsbHkgZW5zdXJlIENDRCBpcyBpbiBhIHNhbmUgc3RhdGUgKi8KKwkvKiAxODM3ICovIHsweDYsIDB4MTAsIDB4MDh9LAorCS8qIDE4NDAgKi8gezB4NiwgMHgwMCwgMHgwOX0sCisJLyogMTg0MyAqLyB7MHg2LCAweDAwLCAweDBhfSwKKwkvKiAxODQ2ICovIHsweDYsIDB4MDAsIDB4MGJ9LAorCS8qIDE4NDkgKi8gezB4NiwgMHgxMCwgMHgwY30sCisJLyogMTg1MiAqLyB7MHg2LCAweDAwLCAweDBkfSwKKwkvKiAxODU1ICovIHsweDYsIDB4MDAsIDB4MGV9LAorCS8qIDE4NTggKi8gezB4NiwgMHgwMCwgMHgwZn0sCisJLyogMTg2MSAqLyB7MHg2LCAweDEwLCAweDEwfSwKKwkvKiAxODY0ICovIHsweDYsIDB4MDIsIDB4MTF9LAorCS8qIDE4NjcgKi8gezB4NiwgMHgwMCwgMHgxMn0sCisJLyogMTg3MCAqLyB7MHg2LCAweDA0LCAweDEzfSwKKwkvKiAxODczICovIHsweDYsIDB4MDIsIDB4MTR9LAorCS8qIDE4NzYgKi8gezB4NiwgMHg4YSwgMHg1MX0sCisJLyogMTg3OSAqLyB7MHg2LCAweDQwLCAweDUyfSwKKwkvKiAxODgyICovIHsweDYsIDB4YjYsIDB4NTN9LAorCS8qIDE4ODUgKi8gezB4NiwgMHgzZCwgMHg1NH0sCisJLyogRW5kIG9mIGV4dHJhIGJsb2NrICovCisKKwkJLyogMTk3MiAqLyB7MHg2LCAweDNmLCAweDF9LAorCQkvKiBCbG9jayBza2lwcGVkICovCisJLyogMTk3NSAqLyB7MHg2LCAweDEwLCAweDAyfSwKKwkvKiAxOTc4ICovIHsweDYsIDB4NjQsIDB4MDd9LAorCS8qIDE5ODEgKi8gezB4NiwgMHgxMCwgMHgwOH0sCisJLyogMTk4NCAqLyB7MHg2LCAweDAwLCAweDA5fSwKKwkvKiAxOTg3ICovIHsweDYsIDB4MDAsIDB4MGF9LAorCS8qIDE5OTAgKi8gezB4NiwgMHgwMCwgMHgwYn0sCisJLyogMTk5MyAqLyB7MHg2LCAweDEwLCAweDBjfSwKKwkvKiAxOTk2ICovIHsweDYsIDB4MDAsIDB4MGR9LAorCS8qIDE5OTkgKi8gezB4NiwgMHgwMCwgMHgwZX0sCisJLyogMjAwMiAqLyB7MHg2LCAweDAwLCAweDBmfSwKKwkvKiAyMDA1ICovIHsweDYsIDB4MTAsIDB4MTB9LAorCS8qIDIwMDggKi8gezB4NiwgMHgwMiwgMHgxMX0sCisJLyogMjAxMSAqLyB7MHg2LCAweDAwLCAweDEyfSwKKwkvKiAyMDE0ICovIHsweDYsIDB4MDQsIDB4MTN9LAorCS8qIDIwMTcgKi8gezB4NiwgMHgwMiwgMHgxNH0sCisJLyogMjAyMCAqLyB7MHg2LCAweDhhLCAweDUxfSwKKwkvKiAyMDIzICovIHsweDYsIDB4NDAsIDB4NTJ9LAorCS8qIDIwMjYgKi8gezB4NiwgMHhiNiwgMHg1M30sCisJLyogMjAyOSAqLyB7MHg2LCAweDNkLCAweDU0fSwKKwkvKiAyMDMyICovIHsweDYsIDB4NjAsIDB4NTd9LAorCS8qIDIwMzUgKi8gezB4NiwgMHgyMCwgMHg1OH0sCisJLyogMjAzOCAqLyB7MHg2LCAweDE1LCAweDU5fSwKKwkvKiAyMDQxICovIHsweDYsIDB4MDUsIDB4NWF9LAorCisJLyogMjA0NCAqLyB7MHg1LCAweDAxLCAweGMwfSwKKwkvKiAyMDQ3ICovIHsweDUsIDB4MTAsIDB4Y2J9LAorCQkvKiAyMDUwICovIHsweDUsIDB4ODAsIDB4YzF9LAorCQkvKiAqLworCQkvKiAyMDUzICovIHsweDUsIDB4MCwgMHhjMn0sCisJCS8qIDQgd2FzIDAgKi8KKwkvKiAyMDU2ICovIHsweDUsIDB4MDAsIDB4Y2F9LAorCQkvKiAyMDU5ICovIHsweDUsIDB4ODAsIDB4YzF9LAorCQkvKiAgKi8KKwkvKiAyMDYyICovIHsweDUsIDB4MDQsIDB4YzJ9LAorCS8qIDIwNjUgKi8gezB4NSwgMHgwMCwgMHhjYX0sCisJCS8qIDIwNjggKi8gezB4NSwgMHgwLCAweGMxfSwKKwkJLyogICovCisJLyogMjA3MSAqLyB7MHg1LCAweDAwLCAweGMyfSwKKwkvKiAyMDc0ICovIHsweDUsIDB4MDAsIDB4Y2F9LAorCQkvKiAyMDc3ICovIHsweDUsIDB4NDAsIDB4YzF9LAorCQkvKiAqLworCS8qIDIwODAgKi8gezB4NSwgMHgxNywgMHhjMn0sCisJLyogMjA4MyAqLyB7MHg1LCAweDAwLCAweGNhfSwKKwkJLyogMjA4NiAqLyB7MHg1LCAweDgwLCAweGMxfSwKKwkJLyogKi8KKwkvKiAyMDg5ICovIHsweDUsIDB4MDYsIDB4YzJ9LAorCS8qIDIwOTIgKi8gezB4NSwgMHgwMCwgMHhjYX0sCisJCS8qIDIwOTUgKi8gezB4NSwgMHg4MCwgMHhjMX0sCisJCS8qICovCisJLyogMjA5OCAqLyB7MHg1LCAweDA0LCAweGMyfSwKKwkvKiAyMTAxICovIHsweDUsIDB4MDAsIDB4Y2F9LAorCisJLyogMjEwNCAqLyB7MHgzLCAweDRjLCAweDN9LAorCS8qIDIxMDcgKi8gezB4MywgMHgxOCwgMHgxfSwKKworCS8qIDIxMTAgKi8gezB4NiwgMHg3MCwgMHg1MX0sCisJLyogMjExMyAqLyB7MHg2LCAweGJlLCAweDUzfSwKKwkvKiAyMTE2ICovIHsweDYsIDB4NzEsIDB4NTd9LAorCS8qIDIxMTkgKi8gezB4NiwgMHgyMCwgMHg1OH0sCisJLyogMjEyMiAqLyB7MHg2LCAweDA1LCAweDU5fSwKKwkvKiAyMTI1ICovIHsweDYsIDB4MTUsIDB4NWF9LAorCisJLyogMjEyOCAqLyB7MHg0LCAweDAwLCAweDA4fSwKKwkvKiBDb21wcmVzcyA9IE9GRiAoMHgxIHRvIHR1cm4gb24pICovCisJLyogMjEzMSAqLyB7MHg0LCAweDEyLCAweDA5fSwKKwkvKiAyMTM0ICovIHsweDQsIDB4MjEsIDB4MGF9LAorCS8qIDIxMzcgKi8gezB4NCwgMHgxMCwgMHgwYn0sCisJLyogMjE0MCAqLyB7MHg0LCAweDIxLCAweDBjfSwKKwkvKiAyMTQzICovIHsweDQsIDB4MDUsIDB4MDB9LAorCS8qIHdhcyA1IChJbWFnZSBUeXBlID8gKSAqLworCS8qIDIxNDYgKi8gezB4NCwgMHgwMCwgMHgwMX0sCisKKwkvKiAyMTQ5ICovIHsweDYsIDB4M2YsIDB4MDF9LAorCisJLyogMjE1MiAqLyB7MHg0LCAweDAwLCAweDA0fSwKKwkvKiAyMTU1ICovIHsweDQsIDB4MDAsIDB4MDV9LAorCS8qIDIxNTggKi8gezB4NCwgMHg0MCwgMHgwNn0sCisJLyogMjE2MSAqLyB7MHg0LCAweDQwLCAweDA3fSwKKworCS8qIDIxNjQgKi8gezB4NiwgMHgxYywgMHgxN30sCisJLyogMjE2NyAqLyB7MHg2LCAweGUyLCAweDE5fSwKKwkvKiAyMTcwICovIHsweDYsIDB4MWMsIDB4MWJ9LAorCS8qIDIxNzMgKi8gezB4NiwgMHhlMiwgMHgxZH0sCisJLyogMjE3NiAqLyB7MHg2LCAweGFhLCAweDFmfSwKKwkvKiAyMTc5ICovIHsweDYsIDB4NzAsIDB4MjB9LAorCisJLyogMjE4MiAqLyB7MHg1LCAweDAxLCAweDEwfSwKKwkvKiAyMTg1ICovIHsweDUsIDB4MDAsIDB4MTF9LAorCS8qIDIxODggKi8gezB4NSwgMHgwMSwgMHgwMH0sCisJLyogMjE5MSAqLyB7MHg1LCAweDA1LCAweDAxfSwKKwkJLyogMjE5NCAqLyB7MHg1LCAweDAwLCAweGMxfSwKKwkJLyogKi8KKwkvKiAyMTk3ICovIHsweDUsIDB4MDAsIDB4YzJ9LAorCS8qIDIyMDAgKi8gezB4NSwgMHgwMCwgMHhjYX0sCisKKwkvKiAyMjAzICovIHsweDYsIDB4NzAsIDB4NTF9LAorCS8qIDIyMDYgKi8gezB4NiwgMHhiZSwgMHg1M30sCisJe30KK307CisKKy8qCisgICBNYWRlIGJ5IFRvbWFzeiBaYWJsb2NraSAoc2thbGFtYW5kcmFAcG9jenRhLm9uZXQucGwpCisgKiBTUENBNTA1YiBjaGlwIGJhc2VkIGNhbWVyYXMgaW5pdGlhbGl6YXRpb24gZGF0YQorICoKKyAqLworLyogamZtICovCisjZGVmaW5lIGluaXRpYWxfYnJpZ2h0bmVzcyAweDdmCS8qIDB4MCh3aGl0ZSktMHhmZihibGFjaykgKi8KKy8qICNkZWZpbmUgaW5pdGlhbF9icmlnaHRuZXNzIDB4MAkvLzB4MCh3aGl0ZSktMHhmZihibGFjaykgKi8KKy8qCisgKiBEYXRhIHRvIGluaXRpYWxpemUgYSBTUENBNTA1LiBDb21tb24gdG8gdGhlIENDRCBhbmQgZXh0ZXJuYWwgbW9kZXMKKyAqLworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDViX2luaXRfZGF0YVtdWzNdID0geworLyogc3RhcnQgKi8KKwl7MHgwMiwgMHgwMCwgMHgwMH0sCQkvKiBpbml0ICovCisJezB4MDIsIDB4MDAsIDB4MDF9LAorCXsweDAyLCAweDAwLCAweDAyfSwKKwl7MHgwMiwgMHgwMCwgMHgwM30sCisJezB4MDIsIDB4MDAsIDB4MDR9LAorCXsweDAyLCAweDAwLCAweDA1fSwKKwl7MHgwMiwgMHgwMCwgMHgwNn0sCisJezB4MDIsIDB4MDAsIDB4MDd9LAorCXsweDAyLCAweDAwLCAweDA4fSwKKwl7MHgwMiwgMHgwMCwgMHgwOX0sCisJezB4MDMsIDB4MDAsIDB4MDB9LAorCXsweDAzLCAweDAwLCAweDAxfSwKKwl7MHgwMywgMHgwMCwgMHgwMn0sCisJezB4MDMsIDB4MDAsIDB4MDN9LAorCXsweDAzLCAweDAwLCAweDA0fSwKKwl7MHgwMywgMHgwMCwgMHgwNX0sCisJezB4MDMsIDB4MDAsIDB4MDZ9LAorCXsweDA0LCAweDAwLCAweDAwfSwKKwl7MHgwNCwgMHgwMCwgMHgwMn0sCisJezB4MDQsIDB4MDAsIDB4MDR9LAorCXsweDA0LCAweDAwLCAweDA1fSwKKwl7MHgwNCwgMHgwMCwgMHgwNn0sCisJezB4MDQsIDB4MDAsIDB4MDd9LAorCXsweDA0LCAweDAwLCAweDA4fSwKKwl7MHgwNCwgMHgwMCwgMHgwOX0sCisJezB4MDQsIDB4MDAsIDB4MGF9LAorCXsweDA0LCAweDAwLCAweDBifSwKKwl7MHgwNCwgMHgwMCwgMHgwY30sCisJezB4MDcsIDB4MDAsIDB4MDB9LAorCXsweDA3LCAweDAwLCAweDAzfSwKKwl7MHgwOCwgMHgwMCwgMHgwMH0sCisJezB4MDgsIDB4MDAsIDB4MDF9LAorCXsweDA4LCAweDAwLCAweDAyfSwKKwl7MHgwMCwgMHgwMSwgMHgwMH0sCisJezB4MDAsIDB4MDEsIDB4MDF9LAorCXsweDAwLCAweDAxLCAweDM0fSwKKwl7MHgwMCwgMHgwMSwgMHgzNX0sCisJezB4MDYsIDB4MTgsIDB4MDh9LAorCXsweDA2LCAweGZjLCAweDA5fSwKKwl7MHgwNiwgMHhmYywgMHgwYX0sCisJezB4MDYsIDB4ZmMsIDB4MGJ9LAorCXsweDA2LCAweDE4LCAweDBjfSwKKwl7MHgwNiwgMHhmYywgMHgwZH0sCisJezB4MDYsIDB4ZmMsIDB4MGV9LAorCXsweDA2LCAweGZjLCAweDBmfSwKKwl7MHgwNiwgMHgxOCwgMHgxMH0sCisJezB4MDYsIDB4ZmUsIDB4MTJ9LAorCXsweDA2LCAweDAwLCAweDExfSwKKwl7MHgwNiwgMHgwMCwgMHgxNH0sCisJezB4MDYsIDB4MDAsIDB4MTN9LAorCXsweDA2LCAweDI4LCAweDUxfSwKKwl7MHgwNiwgMHhmZiwgMHg1M30sCisJezB4MDIsIDB4MDAsIDB4MDh9LAorCisJezB4MDMsIDB4MDAsIDB4MDN9LAorCXsweDAzLCAweDEwLCAweDAzfSwKKwl7fQorfTsKKworLyoKKyAqIERhdGEgdG8gaW5pdGlhbGl6ZSB0aGUgY2FtZXJhIHVzaW5nIHRoZSBpbnRlcm5hbCBDQ0QKKyAqLworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDViX29wZW5fZGF0YV9jY2RbXVszXSA9IHsKKworLyogezB4MDIsMHgwMCwweDAwfSwgKi8KKwl7MHgwMywgMHgwNCwgMHgwMX0sCQkvKiByc3QgKi8KKwl7MHgwMywgMHgwMCwgMHgwMX0sCisJezB4MDMsIDB4MDAsIDB4MDB9LAorCXsweDAzLCAweDIxLCAweDAwfSwKKwl7MHgwMywgMHgwMCwgMHgwNH0sCisJezB4MDMsIDB4MDAsIDB4MDN9LAorCXsweDAzLCAweDE4LCAweDAzfSwKKwl7MHgwMywgMHgwOCwgMHgwMX0sCisJezB4MDMsIDB4MWMsIDB4MDN9LAorCXsweDAzLCAweDVjLCAweDAzfSwKKwl7MHgwMywgMHg1YywgMHgwM30sCisJezB4MDMsIDB4MTgsIDB4MDF9LAorCisvKiBzYW1lIGFzIDUwNSAqLworCXsweDA0LCAweDEwLCAweDAxfSwKKwl7MHgwNCwgMHgwMCwgMHgwNH0sCisJezB4MDQsIDB4MDAsIDB4MDV9LAorCXsweDA0LCAweDIwLCAweDA2fSwKKwl7MHgwNCwgMHgyMCwgMHgwN30sCisKKwl7MHgwOCwgMHgwYSwgMHgwMH0sCisKKwl7MHgwNSwgMHgwMCwgMHgxMH0sCisJezB4MDUsIDB4MDAsIDB4MTF9LAorCXsweDA1LCAweDAwLCAweDEyfSwKKwl7MHgwNSwgMHg2ZiwgMHgwMH0sCisJezB4MDUsIGluaXRpYWxfYnJpZ2h0bmVzcyA+PiA2LCAweDAwfSwKKwl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzIDw8IDIsIDB4MDF9LAorCXsweDA1LCAweDAwLCAweDAyfSwKKwl7MHgwNSwgMHgwMSwgMHgwM30sCisJezB4MDUsIDB4MDAsIDB4MDR9LAorCXsweDA1LCAweDAzLCAweDA1fSwKKwl7MHgwNSwgMHhlMCwgMHgwNn0sCisJezB4MDUsIDB4MjAsIDB4MDd9LAorCXsweDA1LCAweGEwLCAweDA4fSwKKwl7MHgwNSwgMHgwMCwgMHgxMn0sCisJezB4MDUsIDB4MDIsIDB4MGZ9LAorCXsweDA1LCAxMjgsIDB4MTR9LAkJLyogbWF4IGV4cG9zdXJlIG9mZiAoMD1vbikgKi8KKwl7MHgwNSwgMHgwMSwgMHhiMH0sCisJezB4MDUsIDB4MDEsIDB4YmZ9LAorCXsweDAzLCAweDAyLCAweDA2fSwKKwl7MHgwNSwgMHgxMCwgMHg0Nn0sCisJezB4MDUsIDB4MDgsIDB4NGF9LAorCisJezB4MDYsIDB4MDAsIDB4MDF9LAorCXsweDA2LCAweDEwLCAweDAyfSwKKwl7MHgwNiwgMHg2NCwgMHgwN30sCisJezB4MDYsIDB4MTgsIDB4MDh9LAorCXsweDA2LCAweGZjLCAweDA5fSwKKwl7MHgwNiwgMHhmYywgMHgwYX0sCisJezB4MDYsIDB4ZmMsIDB4MGJ9LAorCXsweDA0LCAweDAwLCAweDAxfSwKKwl7MHgwNiwgMHgxOCwgMHgwY30sCisJezB4MDYsIDB4ZmMsIDB4MGR9LAorCXsweDA2LCAweGZjLCAweDBlfSwKKwl7MHgwNiwgMHhmYywgMHgwZn0sCisJezB4MDYsIDB4MTEsIDB4MTB9LAkJLyogY29udHJhc3QgKi8KKwl7MHgwNiwgMHgwMCwgMHgxMX0sCisJezB4MDYsIDB4ZmUsIDB4MTJ9LAorCXsweDA2LCAweDAwLCAweDEzfSwKKwl7MHgwNiwgMHgwMCwgMHgxNH0sCisJezB4MDYsIDB4OWQsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHg3YywgMHg1M30sCisJezB4MDYsIDB4NDAsIDB4NTR9LAorCXsweDA2LCAweDAyLCAweDU3fSwKKwl7MHgwNiwgMHgwMywgMHg1OH0sCisJezB4MDYsIDB4MTUsIDB4NTl9LAorCXsweDA2LCAweDA1LCAweDVhfSwKKwl7MHgwNiwgMHgwMywgMHg1Nn0sCisJezB4MDYsIDB4MDIsIDB4M2Z9LAorCXsweDA2LCAweDAwLCAweDQwfSwKKwl7MHgwNiwgMHgzOSwgMHg0MX0sCisJezB4MDYsIDB4NjksIDB4NDJ9LAorCXsweDA2LCAweDg3LCAweDQzfSwKKwl7MHgwNiwgMHg5ZSwgMHg0NH0sCisJezB4MDYsIDB4YjEsIDB4NDV9LAorCXsweDA2LCAweGJmLCAweDQ2fSwKKwl7MHgwNiwgMHhjYywgMHg0N30sCisJezB4MDYsIDB4ZDUsIDB4NDh9LAorCXsweDA2LCAweGRkLCAweDQ5fSwKKwl7MHgwNiwgMHhlMywgMHg0YX0sCisJezB4MDYsIDB4ZTgsIDB4NGJ9LAorCXsweDA2LCAweGVkLCAweDRjfSwKKwl7MHgwNiwgMHhmMiwgMHg0ZH0sCisJezB4MDYsIDB4ZjcsIDB4NGV9LAorCXsweDA2LCAweGZjLCAweDRmfSwKKwl7MHgwNiwgMHhmZiwgMHg1MH0sCisKKwl7MHgwNSwgMHgwMSwgMHhjMH0sCisJezB4MDUsIDB4MTAsIDB4Y2J9LAorCXsweDA1LCAweDQwLCAweGMxfSwKKwl7MHgwNSwgMHgwNCwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCXsweDA1LCAweDQwLCAweGMxfSwKKwl7MHgwNSwgMHgwOSwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCXsweDA1LCAweGMwLCAweGMxfSwKKwl7MHgwNSwgMHgwOSwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCXsweDA1LCAweDQwLCAweGMxfSwKKwl7MHgwNSwgMHg1OSwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCXsweDA0LCAweDAwLCAweDAxfSwKKwl7MHgwNSwgMHg4MCwgMHhjMX0sCisJezB4MDUsIDB4ZWMsIDB4YzJ9LAorCXsweDA1LCAweDAsIDB4Y2F9LAorCisJezB4MDYsIDB4MDIsIDB4NTd9LAorCXsweDA2LCAweDAxLCAweDU4fSwKKwl7MHgwNiwgMHgxNSwgMHg1OX0sCisJezB4MDYsIDB4MGEsIDB4NWF9LAorCXsweDA2LCAweDAxLCAweDU3fSwKKwl7MHgwNiwgMHg4YSwgMHgwM30sCisJezB4MDYsIDB4MGEsIDB4NmN9LAorCXsweDA2LCAweDMwLCAweDAxfSwKKwl7MHgwNiwgMHgyMCwgMHgwMn0sCisJezB4MDYsIDB4MDAsIDB4MDN9LAorCisJezB4MDUsIDB4OGMsIDB4MjV9LAorCisJezB4MDYsIDB4NGQsIDB4NTF9LAkJLyogbWF5YmUgc2F0dXJhdGlvbiAoNGQpICovCisJezB4MDYsIDB4ODQsIDB4NTN9LAkJLyogbWFraW5nIGdyZWVuICg4NCkgKi8KKwl7MHgwNiwgMHgwMCwgMHg1N30sCQkvKiBzaGFycG5lc3MgKDEpICovCisJezB4MDYsIDB4MTgsIDB4MDh9LAorCXsweDA2LCAweGZjLCAweDA5fSwKKwl7MHgwNiwgMHhmYywgMHgwYX0sCisJezB4MDYsIDB4ZmMsIDB4MGJ9LAorCXsweDA2LCAweDE4LCAweDBjfSwJCS8qIG1heWJlIGh1ZSAoMTgpICovCisJezB4MDYsIDB4ZmMsIDB4MGR9LAorCXsweDA2LCAweGZjLCAweDBlfSwKKwl7MHgwNiwgMHhmYywgMHgwZn0sCisJezB4MDYsIDB4MTgsIDB4MTB9LAkJLyogbWF5YmUgY29udHJhc3QgKDE4KSAqLworCisJezB4MDUsIDB4MDEsIDB4MDJ9LAorCisJezB4MDQsIDB4MDAsIDB4MDh9LAkJLyogY29tcHJlc3Npb24gKi8KKwl7MHgwNCwgMHgxMiwgMHgwOX0sCisJezB4MDQsIDB4MjEsIDB4MGF9LAorCXsweDA0LCAweDEwLCAweDBifSwKKwl7MHgwNCwgMHgyMSwgMHgwY30sCisJezB4MDQsIDB4MWQsIDB4MDB9LAkJLyogaW1hZ2V0eXBlICgxZCkgKi8KKwl7MHgwNCwgMHg0MSwgMHgwMX0sCQkvKiBoYXJkd2FyZSBzbmFwY29udHJvbCAqLworCisJezB4MDQsIDB4MDAsIDB4MDR9LAorCXsweDA0LCAweDAwLCAweDA1fSwKKwl7MHgwNCwgMHgxMCwgMHgwNn0sCisJezB4MDQsIDB4MTAsIDB4MDd9LAorCXsweDA0LCAweDQwLCAweDA2fSwKKwl7MHgwNCwgMHg0MCwgMHgwN30sCisJezB4MDQsIDB4MDAsIDB4MDR9LAorCXsweDA0LCAweDAwLCAweDA1fSwKKworCXsweDA2LCAweDFjLCAweDE3fSwKKwl7MHgwNiwgMHhlMiwgMHgxOX0sCisJezB4MDYsIDB4MWMsIDB4MWJ9LAorCXsweDA2LCAweGUyLCAweDFkfSwKKwl7MHgwNiwgMHg1ZiwgMHgxZn0sCisJezB4MDYsIDB4MzIsIDB4MjB9LAorCisJezB4MDUsIGluaXRpYWxfYnJpZ2h0bmVzcyA+PiA2LCAweDAwfSwKKwl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzIDw8IDIsIDB4MDF9LAorCXsweDA1LCAweDA2LCAweGMxfSwKKwl7MHgwNSwgMHg1OCwgMHhjMn0sCisJezB4MDUsIDB4MCwgMHhjYX0sCisJezB4MDUsIDB4MCwgMHgxMX0sCisJe30KK307CisKK3N0YXRpYyBpbnQgcmVnX3dyaXRlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCSAgICAgX191MTYgcmVnLCBfX3UxNiBpbmRleCwgX191MTYgdmFsdWUpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCXJlZywKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDUwMCk7CisJUERFQlVHKERfUEFDSywgInJlZyB3cml0ZTogMHglMDJ4LDB4JTAyeDoweCUwMngsIDB4JXgiLAorCQlyZWcsIGluZGV4LCB2YWx1ZSwgcmV0KTsKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlOiBlcnJvciAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEgKi8KK3N0YXRpYyBpbnQgcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191MTYgcmVnLAkvKiBiUmVxdWVzdCAqLworCQkJX191MTYgaW5kZXgsCS8qIHdJbmRleCAqLworCQkJX191MTYgbGVuZ3RoKQkvKiB3TGVuZ3RoICgxIG9yIDIgb25seSkgKi8KK3sKKwlpbnQgcmV0OworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJcmVnLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkoX191MTYpIDAsCQkvKiB2YWx1ZSAqLworCQkJKF9fdTE2KSBpbmRleCwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuZ3RoLAorCQkJNTAwKTsJCQkvKiB0aW1lb3V0ICovCisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3JlYWQgZXJyICVkIiwgcmV0KTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gKGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA8PCA4KSArIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKK30KKworc3RhdGljIGludCB3cml0ZV92ZWN0b3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3QgX191MTYgZGF0YVtdWzNdKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0LCBpID0gMDsKKworCXdoaWxlIChkYXRhW2ldWzBdICE9IDAgfHwgZGF0YVtpXVsxXSAhPSAwIHx8IGRhdGFbaV1bMl0gIT0gMCkgeworCQlyZXQgPSByZWdfd3JpdGUoZGV2LCBkYXRhW2ldWzBdLCBkYXRhW2ldWzJdLCBkYXRhW2ldWzFdKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCVBERUJVRyhEX0VSUiwKKwkJCQkiUmVnaXN0ZXIgd3JpdGUgZmFpbGVkIGZvciAweCV4LDB4JXgsMHgleCIsCisJCQkJZGF0YVtpXVswXSwgZGF0YVtpXVsxXSwgZGF0YVtpXVsyXSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWkrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtOworCV9fdTE2IHZlbmRvcjsKKwlfX3UxNiBwcm9kdWN0OworCisJdmVuZG9yID0gaWQtPmlkVmVuZG9yOworCXByb2R1Y3QgPSBpZC0+aWRQcm9kdWN0OworCXN3aXRjaCAodmVuZG9yKSB7CisJY2FzZSAweDA0MWU6CQkvKiBDcmVhdGl2ZSBjYW1lcmFzICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDQwMWQ6CSAqIGhlcmU1MDViICovCisJCQlzZC0+c3VidHlwZSA9IE54dWx0cmE7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDA3MzM6CS8qIFJlYmFkZ2VkIFZpZXdRdWVzdCAoSW50ZWwpIGFuZCBWaWV3UXVlc3QgY2FtZXJhcyAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgwNDMwOiAqLworLyoJCWZpeG1lOiBtYXkgYmUgVXNiR3JhYmJlclBWMzIxIEJSSURHRV9TUENBNTA2IFNFTlNPUl9TQUE3MTEzICovCisJCQlzZC0+c3VidHlwZSA9IEludGVsUENDYW1lcmFQcm87CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJfQorCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJY2FtLT5lcGFkZHIgPSAweDAxOworCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKKwlpZiAoc2QtPnN1YnR5cGUgIT0gSW50ZWxQQ0NhbWVyYVBybykKKwkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CisJZWxzZQkJCS8qIG5vIDY0MHg0ODAgZm9yIEludGVsUENDYW1lcmFQcm8gKi8KKwkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF0gLSAxOworCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKworCWlmIChzZC0+c3VidHlwZSA9PSBOeHVsdHJhKSB7CisJCWlmICh3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA1Yl9pbml0X2RhdGEpKQorCQkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJaWYgKHdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDVfaW5pdF9kYXRhKSkKKwkJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJUERFQlVHKERfU1RSRUFNLCAiSW5pdGlhbGl6aW5nIFNQQ0E1MDUiKTsKKwlpZiAoc2QtPnN1YnR5cGUgPT0gTnh1bHRyYSkKKwkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNWJfb3Blbl9kYXRhX2NjZCk7CisJZWxzZQorCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA1X29wZW5fZGF0YV9jY2QpOworCXJldCA9IHJlZ19yZWFkKGdzcGNhX2RldiwgNiwgMHgxNiwgMik7CisKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sCisJCSAgICAgICAicmVnaXN0ZXIgcmVhZCBmYWlsZWQgZm9yIGFmdGVyIHZlY3RvciByZWFkIGVyciA9ICVkIiwKKwkJICAgICAgIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKwlQREVCVUcoRF9TVFJFQU0sCisJCSJBZnRlciB2ZWN0b3IgcmVhZCByZXR1cm5zIDogMHgleCBzaG91bGQgYmUgMHgwMTAxIiwKKwkJcmV0ICYgMHhmZmZmKTsKKworCXJldCA9IHJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgNiwgMHgxNiwgMHgwYSk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnaXN0ZXIgd3JpdGUgZmFpbGVkIGZvciAoNiwweGEsMHgxNikgZXJyPSVkIiwKKwkJICAgICAgIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDUsIDB4YzIsIDE4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJLyogbmVjZXNzYXJ5IGJlY2F1c2Ugd2l0aG91dCBpdCB3ZSBjYW4gc2VlIHN0cmVhbQorCSAqIG9ubHkgb25jZSBhZnRlciBsb2FkaW5nIG1vZHVsZSAqLworCS8qIHN0b3BwaW5nIHVzYiByZWdpc3RlcnMgVG9tYXN6IGNoYW5nZSAqLworCXJlZ193cml0ZShkZXYsIDB4MDIsIDB4MCwgMHgwKTsKKwlzd2l0Y2ggKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KSB7CisJY2FzZSAwOgorCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDAwLCAweDAwKTsKKwkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNiwgMHgxMCk7CisJCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDcsIDB4MTApOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDAsIDB4MDEpOworCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA2LCAweDFhKTsKKwkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNywgMHgxYSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwMik7CisJCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4MWMpOworCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDFkKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDAwLCAweDA0KTsKKwkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNiwgMHgzNCk7CisJCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDcsIDB4MzQpOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSA1OiAqLworCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDAwLCAweDA1KTsKKwkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNiwgMHg0MCk7CisJCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDcsIDB4NDApOworCQlicmVhazsKKwl9CisvKiBFbmFibGUgSVNPIHBhY2tldCBtYWNoaW5lIC0gc2hvdWxkIHdlIGRvIHRoaXMgaGVyZSBvciBpbiBJU09DIGluaXQgPyAqLworCXJldCA9IHJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX1VTQiwKKwkJCSBTUENBNTBYX1VTQl9DVFJMLAorCQkJIFNQQ0E1MFhfQ1VTQl9FTkFCTEUpOworCisvKglyZWdfd3JpdGUoZGV2LCAweDUsIDB4MCwgMHgwKTsgKi8KKy8qCXJlZ193cml0ZShkZXYsIDB4NSwgMHgwLCAweDEpOyAqLworLyoJcmVnX3dyaXRlKGRldiwgMHg1LCAweDExLCAweDIpOyAqLworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJLyogRGlzYWJsZSBJU08gcGFja2V0IG1hY2hpbmUgKi8KKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDAsIDB4MDApOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IGNsb3NlIHRpbWUgKi8KK3N0YXRpYyB2b2lkIHNkX2Nsb3NlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwkvKiBUaGlzIG1heWJlIHJlc2V0IG9yIHBvd2VyIGNvbnRyb2wgKi8KKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDMsIDB4MjApOworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwMywgMHgwMSwgMHgwKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDAsIDB4MSk7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDEwLCAweDEpOworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNSwgMHgxMSwgMHhmKTsKK30KKworLyogY29udmVydCBZWVVWIHBlciBsaW5lIHRvIFlVWVYgKFlVViA0OjI6MikgKi8KK3N0YXRpYyB2b2lkIHl5dXZfZGVjb2RlKHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXVuc2lnbmVkIGNoYXIgKmluLAorCQkJaW50IHdpZHRoLAorCQkJaW50IGhlaWdodCkKK3sKKwl1bnNpZ25lZCBjaGFyICpVaSwgKlZpLCAqeWksICp5aTE7CisJdW5zaWduZWQgY2hhciAqb3V0MTsKKwlpbnQgaSwgajsKKworCXlpID0gaW47CisJZm9yIChpID0gaGVpZ2h0IC8gMjsgLS1pID49IDA7ICkgeworCQlvdXQxID0gb3V0ICsgd2lkdGggKiAyOwkJLyogbmV4dCBsaW5lICovCisJCXlpMSA9IHlpICsgd2lkdGg7CisJCVVpID0geWkxICsgd2lkdGg7CisJCVZpID0gVWkgKyB3aWR0aCAvIDI7CisJCWZvciAoaiA9IHdpZHRoIC8gMjsgLS1qID49IDA7ICkgeworCQkJKm91dCsrID0gMTI4ICsgKnlpKys7CisJCQkqb3V0KysgPSAxMjggKyAqVWk7CisJCQkqb3V0KysgPSAxMjggKyAqeWkrKzsKKwkJCSpvdXQrKyA9IDEyOCArICpWaTsKKworCQkJKm91dDErKyA9IDEyOCArICp5aTErKzsKKwkJCSpvdXQxKysgPSAxMjggKyAqVWkrKzsKKwkJCSpvdXQxKysgPSAxMjggKyAqeWkxKys7CisJCQkqb3V0MSsrID0gMTI4ICsgKlZpKys7CisJCX0KKwkJeWkgKz0gd2lkdGggKiAyOworCQlvdXQgPSBvdXQxOworCX0KK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgkJCQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQlpZiAoZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID09IEZJUlNUX1BBQ0tFVCkgeworCQkJeXl1dl9kZWNvZGUoc2QtPnRtcGJ1ZjIsIHNkLT50bXBidWYsCisJCQkJCWdzcGNhX2Rldi0+d2lkdGgsCisJCQkJCWdzcGNhX2Rldi0+aGVpZ2h0KTsKKwkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwKKwkJCQkJCUxBU1RfUEFDS0VULAorCQkJCQkJZnJhbWUsCisJCQkJCQlzZC0+dG1wYnVmMiwKKwkJCQkJCWdzcGNhX2Rldi0+d2lkdGgKKwkJCQkJCQkqIGdzcGNhX2Rldi0+aGVpZ2h0CisJCQkJCQkJKiAyKTsKKwkJfQorCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLAorCQkJCWRhdGEsIDApOworCQlkYXRhICs9IFNQQ0E1MFhfT0ZGU0VUX0RBVEE7CisJCWxlbiAtPSBTUENBNTBYX09GRlNFVF9EQVRBOworCQlpZiAobGVuID4gMCkKKwkJCW1lbWNweShzZC0+dG1wYnVmLCBkYXRhLCBsZW4pOworCQllbHNlCisJCQlsZW4gPSAwOworCQlzZC0+YnVmbGVuID0gbGVuOworCQlyZXR1cm47CisJY2FzZSAweGZmOgkJCS8qIGRyb3AgKi8KKy8qCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsgKi8KKwkJcmV0dXJuOworCX0KKwlkYXRhICs9IDE7CisJbGVuIC09IDE7CisJbWVtY3B5KCZzZC0+dG1wYnVmW3NkLT5idWZsZW5dLCBkYXRhLCBsZW4pOworCXNkLT5idWZsZW4gKz0gbGVuOworfQorCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlfX3U4IGJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDUsIDB4MDAsICgyNTUgLSBicmlnaHRuZXNzKSA+PiA2KTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDUsIDB4MDEsICgyNTUgLSBicmlnaHRuZXNzKSA8PCAyKTsKKworfQorc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSAyNTUKKwkJLSAoKHJlZ19yZWFkKGdzcGNhX2RldiwgNSwgMHgwMSwgMSkgPj4gMikKKwkJCSsgKHJlZ19yZWFkKGdzcGNhX2RldiwgNSwgMHgwLCAxKSA8PCA2KSk7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5vcGVuID0gc2Rfb3BlbiwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKKwkuY2xvc2UgPSBzZF9jbG9zZSwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworI2RlZmluZSBEVk5NKG5hbWUpIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkgbmFtZQorc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMWQpLCBEVk5NKCJDcmVhdGl2ZSBXZWJjYW0gTlggVUxUUkEiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNzMzLCAweDA0MzApLCBEVk5NKCJJbnRlbCBQQyBDYW1lcmEgUHJvIil9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAidiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzMjAzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCkBAIC0wLDAgKzEsODQ3IEBACisvKgorICogU1BDQTUwNiBjaGlwIGJhc2VkIGNhbWVyYXMgZnVuY3Rpb24KKyAqIE0gWGhhYXJkIDE1LzA0LzIwMDQgYmFzZWQgb24gZGlmZmVyZW50IHdvcmsgTWFyayBUYXlsb3IgYW5kIG90aGVycworICogYW5kIG15IG93biBzbm9vcHkgZmlsZSBvbiBhIHB2LTMyMWMgZG9uYXRlIGJ5IGEgZ2VybWFuIGNvbXBhZ255CisgKiAgICAgICAgICAgICAgICAiRmlybWEgRnJhbmsgR21iaCIgZnJvbSAgU2FhcmJydWVja2VuCisgKgorICogVjRMMiBieSBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic3BjYTUwNiIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDEsIDcpCitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiMi4xLjciOworCitNT0RVTEVfQVVUSE9SKCJNaWNoZWwgWGhhYXJkIDxteGhhYXJkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvU1BDQTUwNiBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJaW50IGJ1ZmxlbjsKKwlfX3U4IHRtcGJ1Zls2NDAgKiA0ODAgKiAzXTsJLyogWVlVViBwZXIgbGluZSAqLworCV9fdTggdG1wYnVmMls2NDAgKiA0ODAgKiAyXTsJLyogWVVZViAqLworCisJdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOworCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7CisJdW5zaWduZWQgY2hhciBjb2xvcnM7CisJdW5zaWduZWQgY2hhciBodWU7CisJY2hhciBub3JtZTsKKwljaGFyIGNoYW5uZWw7Cit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKyNkZWZpbmUgU0RfQlJJR0hUTkVTUyAwCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDB4ZmYsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDgwLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJfSwKKyNkZWZpbmUgU0RfQ09OVFJBU1QgMQorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDB4ZmYsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDQ3LAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwl9LAorI2RlZmluZSBTRF9DT0xPUiAyCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTYXR1cmF0aW9uIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDB4ZmYsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDQwLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29sb3JzLAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29sb3JzLAorCX0sCisjZGVmaW5lIFNEX0hVRSAzCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfSFVFLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkh1ZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAweGZmLAorCQkuc3RlcCAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGh1ZSwKKwkgICAgLmdldCA9IHNkX2dldGh1ZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAgKiAyLAorCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSA1fSwKKwl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNzYgKiAyLAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0ICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSA0fSwKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAgKiAyLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAyfSwKKwl7MzUyLCAyODgsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIgKiAyLAorCQkuc2l6ZWltYWdlID0gMzUyICogMjg4ICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAgKiAyLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKK307CisKKyNkZWZpbmUgU1BDQTUwWF9PRkZTRVRfREFUQSAxMAorCisjZGVmaW5lIFNBQTcxMTNfYnJpZ2h0IDB4MGEJLyogZGVmYXVsdHMgMHg4MCAqLworI2RlZmluZSBTQUE3MTEzX2NvbnRyYXN0IDB4MGIJLyogZGVmYXVsdHMgMHg0NyAqLworI2RlZmluZSBTQUE3MTEzX3NhdHVyYXRpb24gMHgwYwkvKiBkZWZhdWx0cyAweDQwICovCisjZGVmaW5lIFNBQTcxMTNfaHVlIDB4MGQJLyogZGVmYXVsdHMgMHgwMCAqLworI2RlZmluZSBTQUE3MTEzX0kyQ19CQVNFX1dSSVRFIDB4NGEKKworLyogcmVhZCAnbGVuJyBieXRlcyB0byBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyB2b2lkIHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICBfX3UxNiByZXEsCisJCSAgX191MTYgaW5kZXgsCisJCSAgX191MTYgbGVuZ3RoKQoreworCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQlyZXEsCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTAsCQkvKiB2YWx1ZSAqLworCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuZ3RoLAorCQkJNTAwKTsKK30KKworc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJICBfX3UxNiByZXEsCisJCSAgX191MTYgdmFsdWUsCisJCSAgX191MTYgaW5kZXgpCit7CisJdXNiX2NvbnRyb2xfbXNnKGRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJdmFsdWUsIGluZGV4LAorCQkJTlVMTCwgMCwgNTAwKTsKK30KKworc3RhdGljIHZvaWQgc3BjYTUwNl9Jbml0aTJjKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwNywgU0FBNzExM19JMkNfQkFTRV9XUklURSwgMHgwMDA0KTsKK30KKworc3RhdGljIHZvaWQgc3BjYTUwNl9Xcml0ZUkyYyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTE2IHZhbGV1ciwKKwkJCSAgICAgX191MTYgcmVnKQoreworCWludCByZXRyeSA9IDYwOworCisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDcsIHJlZywgMHgwMDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwNywgdmFsZXVyLCAweDAwMDApOworCXdoaWxlIChyZXRyeS0tKSB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHgwNywgMHgwMDAzLCAyKTsKKwkJaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gfCBnc3BjYV9kZXYtPnVzYl9idWZbMV0pID09IDB4MDApCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3BjYTUwNl9SZWFkSTJjKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX191MTYgcmVnKQoreworCWludCByZXRyeSA9IDYwOworCisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDcsIFNBQTcxMTNfSTJDX0JBU0VfV1JJVEUsIDB4MDAwNCk7CisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDcsIHJlZywgMHgwMDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwNywgMHgwMSwgMHgwMDAyKTsKKwl3aGlsZSAoLS1yZXRyeSkgeworCQlyZWdfcihnc3BjYV9kZXYsIDB4MDcsIDB4MDAwMywgMik7CisJCWlmICgoZ3NwY2FfZGV2LT51c2JfYnVmWzBdIHwgZ3NwY2FfZGV2LT51c2JfYnVmWzFdKSA9PSAweDAwKQorCQkJYnJlYWs7CisJfQorCWlmIChyZXRyeSA9PSAwKQorCQlyZXR1cm4gLTE7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDA3LCAweDAwMDAsIDEpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07Cit9CisKK3N0YXRpYyB2b2lkIHNwY2E1MDZfU2V0Tm9ybWVJbnB1dChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJIF9fdTE2IG5vcm1lLAorCQkJCSBfX3UxNiBjaGFubmVsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKy8qIGZpeG1lOiBjaGVjayBpZiBjaGFubmVsID09IDAuLjMgYW5kIDYuLjkgKDggdmFsdWVzKSAqLworCV9fdTggc2V0Yml0MCA9IDB4MDA7CisJX191OCBzZXRiaXQxID0gMHgwMDsKKwlfX3U4IHZpZGVvbWFzayA9IDB4MDA7CisKKwlQREVCVUcoRF9TVFJFQU0sICIqKiBPcGVuIFNldCBOb3JtZSAqKiIpOworCXNwY2E1MDZfSW5pdGkyYyhnc3BjYV9kZXYpOworCS8qIE5UU0MgYml0MCAtPiAxKDUyNSBsKSBQQUwgU0VDQU0gYml0MCAtPiAwICg2MjUgbCkgKi8KKwkvKiBDb21wb3NpdGUgY2hhbm5lbCBiaXQxIC0+IDEgUy12aWRlbyBiaXQgMSAtPiAwICovCisJLyogYW5kIGV4Y2x1ZGUgU0FBNzExMyByZXNlcnZlZCBjaGFubmVsIHNldCBkZWZhdWx0IDAgb3RoZXJ3aXNlICovCisJaWYgKG5vcm1lICYgVjRMMl9TVERfTlRTQykKKwkJc2V0Yml0MCA9IDB4MDE7CisJaWYgKGNoYW5uZWwgPT0gNCB8fCBjaGFubmVsID09IDUgfHwgY2hhbm5lbCA+IDkpCisJCWNoYW5uZWwgPSAwOworCWlmIChjaGFubmVsIDwgNCkKKwkJc2V0Yml0MSA9IDB4MDI7CisJdmlkZW9tYXNrID0gKDB4NDggfCBzZXRiaXQwIHwgc2V0Yml0MSk7CisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDgsIHZpZGVvbWFzaywgMHgwMDAwKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgKDB4YzAgfCAoY2hhbm5lbCAmIDB4MEYpKSwgMHgwMik7CisKKwlpZiAobm9ybWUgJiBWNEwyX1NURF9OVFNDKQorCQlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgzMywgMHgwZSk7CisJCQkJCS8qIENocm9taW5hbmNlIENvbnRyb2wgTlRTQyBOICovCisJZWxzZSBpZiAobm9ybWUgJiBWNEwyX1NURF9TRUNBTSkKKwkJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4NTMsIDB4MGUpOworCQkJCQkvKiBDaHJvbWluYW5jZSBDb250cm9sIFNFQ0FNICovCisJZWxzZQorCQlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMywgMHgwZSk7CisJCQkJCS8qIENocm9taW5hbmNlIENvbnRyb2wgUEFMIEJHSElWICovCisKKwlzZC0+bm9ybWUgPSBub3JtZTsKKwlzZC0+Y2hhbm5lbCA9IGNoYW5uZWw7CisJUERFQlVHKERfU1RSRUFNLCAiU2V0IFZpZGVvIEJ5dGUgdG8gMHglMngiLCB2aWRlb21hc2spOworCVBERUJVRyhEX1NUUkVBTSwgIlNldCBOb3JtZTogJTA4eCBDaGFubmVsICVkIiwgbm9ybWUsIGNoYW5uZWwpOworfQorCitzdGF0aWMgdm9pZCBzcGNhNTA2X0dldE5vcm1lSW5wdXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCSAgX191MTYgKm5vcm1lLCBfX3UxNiAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkvKiBSZWFkIHRoZSByZWdpc3RlciBpcyBub3Qgc28gZ29vZCB2YWx1ZSBjaGFuZ2Ugc28KKwkgICB3ZSB1c2UgeW91ciBvd24gY29weSBpbiBzcGNhNTB4IHN0cnVjdCAqLworCSpub3JtZSA9IHNkLT5ub3JtZTsKKwkqY2hhbm5lbCA9IHNkLT5jaGFubmVsOworCVBERUJVRyhEX1NUUkVBTSwgIkdldCBOb3JtZTogJWQgQ2hhbm5lbCAlZCIsICpub3JtZSwgKmNoYW5uZWwpOworfQorCitzdGF0aWMgdm9pZCBzcGNhNTA2X1NldHNpemUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3UxNiBjb2RlLAorCQkJICAgIF9fdTE2IHhtdWx0LCBfX3UxNiB5bXVsdCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisKKwlQREVCVUcoRF9TVFJFQU0sICIqKiBTZXRTaXplICoqIik7CisJcmVnX3coZGV2LCAweDA0LCAoMHgxOCB8IChjb2RlICYgMHgwNykpLCAweDAwMDApOworCS8qIFNvZnQgc25hcCAweDQwIEhhcmQgMHg0MSAqLworCXJlZ193KGRldiwgMHgwNCwgMHg0MSwgMHgwMDAxKTsKKwlyZWdfdyhkZXYsIDB4MDQsIDB4MDAsIDB4MDAwMik7CisJLyogcmVzZXJ2ZWQgKi8KKwlyZWdfdyhkZXYsIDB4MDQsIDB4MDAsIDB4MDAwMyk7CisKKwkvKiByZXNlcnZlZCAqLworCXJlZ193KGRldiwgMHgwNCwgMHgwMCwgMHgwMDA0KTsKKwkvKiByZXNlcnZlZCAqLworCXJlZ193KGRldiwgMHgwNCwgMHgwMSwgMHgwMDA1KTsKKwkvKiByZXNlcmNlZCAqLworCXJlZ193KGRldiwgMHgwNCwgeG11bHQsIDB4MDAwNik7CisJLyogcmVzZXJ2ZWQgKi8KKwlyZWdfdyhkZXYsIDB4MDQsIHltdWx0LCAweDAwMDcpOworCS8qIGNvbXByZXNzaW9uIDEgKi8KKwlyZWdfdyhkZXYsIDB4MDQsIDB4MDAsIDB4MDAwOCk7CisJLyogVD02NCAtPiAyICovCisJcmVnX3coZGV2LCAweDA0LCAweDAwLCAweDAwMDkpOworCS8qIHRocmVzaG9sZDJEICovCisJcmVnX3coZGV2LCAweDA0LCAweDIxLCAweDAwMGEpOworCS8qIHF1YW50aXphdGlvbiAqLworCXJlZ193KGRldiwgMHgwNCwgMHgwMCwgMHgwMDBiKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5kZXZfbmFtZSA9IChjaGFyICopIGlkLT5kcml2ZXJfaW5mbzsKKwljYW0tPmVwYWRkciA9IDB4MDE7CisJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOworCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Y29sb3JzID0gc2RfY3RybHNbU0RfQ09MT1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmh1ZSA9IHNkX2N0cmxzW1NEX0hVRV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKworCXJlZ193KGRldiwgMHgwMywgMHgwMCwgMHgwMDA0KTsKKwlyZWdfdyhkZXYsIDB4MDMsIDB4RkYsIDB4MDAwMyk7CisJcmVnX3coZGV2LCAweDAzLCAweDAwLCAweDAwMDApOworCXJlZ193KGRldiwgMHgwMywgMHgxYywgMHgwMDAxKTsKKwlyZWdfdyhkZXYsIDB4MDMsIDB4MTgsIDB4MDAwMSk7CisJLyogSW5pdCBvbiBQQUwgYW5kIGNvbXBvc2l0ZSBpbnB1dDAgKi8KKwlzcGNhNTA2X1NldE5vcm1lSW5wdXQoZ3NwY2FfZGV2LCAwLCAwKTsKKwlyZWdfdyhkZXYsIDB4MDMsIDB4MWMsIDB4MDAwMSk7CisJcmVnX3coZGV2LCAweDAzLCAweDE4LCAweDAwMDEpOworCXJlZ193KGRldiwgMHgwNSwgMHgwMCwgMHgwMDAwKTsKKwlyZWdfdyhkZXYsIDB4MDUsIDB4ZWYsIDB4MDAwMSk7CisJcmVnX3coZGV2LCAweDA1LCAweDAwLCAweDAwYzEpOworCXJlZ193KGRldiwgMHgwNSwgMHgwMCwgMHgwMGMyKTsKKwlyZWdfdyhkZXYsIDB4MDYsIDB4MTgsIDB4MDAwMik7CisJcmVnX3coZGV2LCAweDA2LCAweGY1LCAweDAwMTEpOworCXJlZ193KGRldiwgMHgwNiwgMHgwMiwgMHgwMDEyKTsKKwlyZWdfdyhkZXYsIDB4MDYsIDB4ZmIsIDB4MDAxMyk7CisJcmVnX3coZGV2LCAweDA2LCAweDAwLCAweDAwMTQpOworCXJlZ193KGRldiwgMHgwNiwgMHhhNCwgMHgwMDUxKTsKKwlyZWdfdyhkZXYsIDB4MDYsIDB4NDAsIDB4MDA1Mik7CisJcmVnX3coZGV2LCAweDA2LCAweDcxLCAweDAwNTMpOworCXJlZ193KGRldiwgMHgwNiwgMHg0MCwgMHgwMDU0KTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXJlZ193KGRldiwgMHgwMywgMHgwMCwgMHgwMDA0KTsKKwlyZWdfdyhkZXYsIDB4MDMsIDB4MDAsIDB4MDAwMyk7CisJcmVnX3coZGV2LCAweDAzLCAweDAwLCAweDAwMDQpOworCXJlZ193KGRldiwgMHgwMywgMHhGRiwgMHgwMDAzKTsKKwlyZWdfdyhkZXYsIDB4MDIsIDB4MDAsIDB4MDAwMCk7CisJcmVnX3coZGV2LCAweDAzLCAweDYwLCAweDAwMDApOworCXJlZ193KGRldiwgMHgwMywgMHgxOCwgMHgwMDAxKTsKKwkvKiBmb3IgYSBiZXR0ZXIgcmVhZGluZyBteCA6KQkgICovCisJLypzZGNhNTA2X1dyaXRlSTJjKHZhbHVlLHJlZ2lzdGVyKSAqLworCXNwY2E1MDZfSW5pdGkyYyhnc3BjYV9kZXYpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDA4LCAweDAxKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhjMCwgMHgwMik7CisJCQkJCQkvKiBpbnB1dCBjb21wb3NpdGUgdmlkZW8gKi8KKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgzMywgMHgwMyk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MDQpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDA1KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwZCwgMHgwNik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZjAsIDB4MDcpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDk4LCAweDA4KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMywgMHgwOSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ODAsIDB4MGEpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDQ3LCAweDBiKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHg0OCwgMHgwYyk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MGQpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAzLCAweDBlKTsJLyogQ2hyb21hIFBhbCBhZGp1c3QgKi8KKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgyYSwgMHgwZik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MTApOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDBjLCAweDExKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhiOCwgMHgxMik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDEsIDB4MTMpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDE0KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgxNSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MTYpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDE3KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgxOCk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MTkpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDFhKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgxYik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MWMpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDFkKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgxZSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4YTEsIDB4MWYpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAyLCAweDQwKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0MSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NDIpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDQzKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0NCk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NDUpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDQ2KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0Nyk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NDgpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDQ5KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0YSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NGIpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDRjKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0ZCk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NGUpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDRmKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg1MCk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NTEpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDUyKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg1Myk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NTQpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDU1KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg1Nik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NTcpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDU4KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHg1NCwgMHg1OSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDcsIDB4NWEpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDgzLCAweDViKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHg1Yyk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4NWQpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDVlKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHg1Zik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4NjApOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDA1LCAweDYxKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHg5ZiwgMHg2Mik7CisJUERFQlVHKERfU1RSRUFNLCAiKiogQ2xvc2UgSW5pdCAqIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJX191MTYgbm9ybWU7CisJX191MTYgY2hhbm5lbDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlyZWdfdyhkZXYsIDB4MDMsIDB4MDAsIDB4MDAwNCk7CisJcmVnX3coZGV2LCAweDAzLCAweDAwLCAweDAwMDMpOworCXJlZ193KGRldiwgMHgwMywgMHgwMCwgMHgwMDA0KTsKKwlyZWdfdyhkZXYsIDB4MDMsIDB4RkYsIDB4MDAwMyk7CisJcmVnX3coZGV2LCAweDAyLCAweDAwLCAweDAwMDApOworCXJlZ193KGRldiwgMHgwMywgMHg2MCwgMHgwMDAwKTsKKwlyZWdfdyhkZXYsIDB4MDMsIDB4MTgsIDB4MDAwMSk7CisKKwkvKnNkY2E1MDZfV3JpdGVJMmModmFsdWUscmVnaXN0ZXIpICovCisJc3BjYTUwNl9Jbml0aTJjKGdzcGNhX2Rldik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDgsIDB4MDEpOwkvKiBJbmNyZW1lbnQgRGVsYXkgKi8KKy8qCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGMwLCAweDAyKTsgKiBBbmFsb2cgSW5wdXQgQ29udHJvbCAxICovCisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MzMsIDB4MDMpOworCQkJCQkJLyogQW5hbG9nIElucHV0IENvbnRyb2wgMiAqLworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDA0KTsKKwkJCQkJCS8qIEFuYWxvZyBJbnB1dCBDb250cm9sIDMgKi8KKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgwNSk7CisJCQkJCQkvKiBBbmFsb2cgSW5wdXQgQ29udHJvbCA0ICovCisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MGQsIDB4MDYpOworCQkJCQkvKiBIb3Jpem9udGFsIFN5bmMgU3RhcnQgMHhlOS0weDBkICovCisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZjAsIDB4MDcpOworCQkJCQkvKiBIb3Jpem9udGFsIFN5bmMgU3RvcCAgMHgwZC0weGYwICovCisKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHg5OCwgMHgwOCk7CS8qIFN5bmMgQ29udHJvbCAqLworLyoJCURlZmF1bHRzIHZhbHVlCQkJKi8KKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMywgMHgwOSk7CS8qIEx1bWluYW5jZSBDb250cm9sICovCisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ODAsIDB4MGEpOworCQkJCQkJLyogTHVtaW5hbmNlIEJyaWdodG5lc3MgKi8KKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHg0NywgMHgwYik7CS8qIEx1bWluYW5jZSBDb250cmFzdCAqLworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDQ4LCAweDBjKTsKKwkJCQkJCS8qIENocm9taW5hbmNlIFNhdHVyYXRpb24gKi8KKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgwZCk7CisJCQkJCQkvKiBDaHJvbWluYW5jZSBIdWUgQ29udHJvbCAqLworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDJhLCAweDBmKTsKKwkJCQkJCS8qIENocm9taW5hbmNlIEdhaW4gQ29udHJvbCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgxMCk7CisJCQkJCQkvKiBGb3JtYXQvRGVsYXkgQ29udHJvbCAqLworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDBjLCAweDExKTsJLyogT3V0cHV0IENvbnRyb2wgMSAqLworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGI4LCAweDEyKTsJLyogT3V0cHV0IENvbnRyb2wgMiAqLworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDEzKTsJLyogT3V0cHV0IENvbnRyb2wgMyAqLworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDE0KTsJLyogcmVzZXJ2ZWQgKi8KKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgxNSk7CS8qIFZHQVRFIFNUQVJUICovCisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MTYpOwkvKiBWR0FURSBTVE9QICovCisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MTcpOyAgICAvKiBWR0FURSBDb250cm9sIChNU0IpICovCisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MTgpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDE5KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgxYSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MWIpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDFjKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHgxZCk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4MWUpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGExLCAweDFmKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMiwgMHg0MCk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NDEpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDQyKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0Myk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NDQpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDQ1KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0Nik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NDcpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDQ4KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0OSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NGEpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDRiKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0Yyk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NGQpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDRlKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg0Zik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NTApOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDUxKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg1Mik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NTMpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDU0KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHhmZiwgMHg1NSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4ZmYsIDB4NTYpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweGZmLCAweDU3KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHg1OCk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4NTQsIDB4NTkpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDA3LCAweDVhKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHg4MywgMHg1Yik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4NWMpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDVkKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMCwgMHg1ZSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDAsIDB4NWYpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAwLCAweDYwKTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwNSwgMHg2MSk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4OWYsIDB4NjIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlyZWdfdyhkZXYsIDB4MDUsIDB4MDAsIDB4MDAwMyk7CisJcmVnX3coZGV2LCAweDA1LCAweDAwLCAweDAwMDQpOworCXJlZ193KGRldiwgMHgwMywgMHgxMCwgMHgwMDAxKTsKKwlyZWdfdyhkZXYsIDB4MDMsIDB4NzgsIDB4MDAwMCk7CisJc3dpdGNoIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdikgeworCWNhc2UgMDoKKwkJc3BjYTUwNl9TZXRzaXplKGdzcGNhX2RldiwgMCwgMHgxMCwgMHgxMCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJc3BjYTUwNl9TZXRzaXplKGdzcGNhX2RldiwgMSwgMHgxYSwgMHgxYSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3BjYTUwNl9TZXRzaXplKGdzcGNhX2RldiwgMiwgMHgxYywgMHgxYyk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJc3BjYTUwNl9TZXRzaXplKGdzcGNhX2RldiwgNCwgMHgzNCwgMHgzNCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIDU6ICovCisJCXNwY2E1MDZfU2V0c2l6ZShnc3BjYV9kZXYsIDUsIDB4NDAsIDB4NDApOworCQlicmVhazsKKwl9CisKKwkvKiBjb21wcmVzcyBzZXR0aW5nIGFuZCBzaXplICovCisJLyogc2V0IGkyYyBsdW1hICovCisJcmVnX3coZGV2LCAweDAyLCAweDAxLCAweDAwMDApOworCXJlZ193KGRldiwgMHgwMywgMHgxMiwgMHgwMDAwKTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDQsIDB4MDAwMSwgMik7CisJUERFQlVHKERfU1RSRUFNLCAid2ViY2FtIHN0YXJ0ZWQiKTsKKwlzcGNhNTA2X0dldE5vcm1lSW5wdXQoZ3NwY2FfZGV2LCAmbm9ybWUsICZjaGFubmVsKTsKKwlzcGNhNTA2X1NldE5vcm1lSW5wdXQoZ3NwY2FfZGV2LCBub3JtZSwgY2hhbm5lbCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisKKwlyZWdfdyhkZXYsIDB4MDIsIDB4MDAsIDB4MDAwMCk7CisJcmVnX3coZGV2LCAweDAzLCAweDAwLCAweDAwMDQpOworCXJlZ193KGRldiwgMHgwMywgMHgwMCwgMHgwMDAzKTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCBzZF9jbG9zZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKKy8qIGNvbnZlcnQgWVlVViBwZXIgbGluZSB0byBZVVlWIChZVVYgNDoyOjIpICovCitzdGF0aWMgdm9pZCB5eXV2X2RlY29kZSh1bnNpZ25lZCBjaGFyICpvdXQsCisJCQl1bnNpZ25lZCBjaGFyICppbiwKKwkJCWludCB3aWR0aCwKKwkJCWludCBoZWlnaHQpCit7CisJdW5zaWduZWQgY2hhciAqVWksICpWaSwgKnlpLCAqeWkxOworCXVuc2lnbmVkIGNoYXIgKm91dDE7CisJaW50IGksIGo7CisKKwl5aSA9IGluOworCWZvciAoaSA9IGhlaWdodCAvIDI7IC0taSA+PSAwOyApIHsKKwkJb3V0MSA9IG91dCArIHdpZHRoICogMjsJCS8qIG5leHQgbGluZSAqLworCQl5aTEgPSB5aSArIHdpZHRoOworCQlVaSA9IHlpMSArIHdpZHRoOworCQlWaSA9IFVpICsgd2lkdGggLyAyOworCQlmb3IgKGogPSB3aWR0aCAvIDI7IC0taiA+PSAwOyApIHsKKwkJCSpvdXQrKyA9IDEyOCArICp5aSsrOworCQkJKm91dCsrID0gMTI4ICsgKlVpOworCQkJKm91dCsrID0gMTI4ICsgKnlpKys7CisJCQkqb3V0KysgPSAxMjggKyAqVmk7CisKKwkJCSpvdXQxKysgPSAxMjggKyAqeWkxKys7CisJCQkqb3V0MSsrID0gMTI4ICsgKlVpKys7CisJCQkqb3V0MSsrID0gMTI4ICsgKnlpMSsrOworCQkJKm91dDErKyA9IDEyOCArICpWaSsrOworCQl9CisJCXlpICs9IHdpZHRoICogMjsKKwkJb3V0ID0gb3V0MTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLworCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgMDoJCQkJLyogc3RhcnQgb2YgZnJhbWUgKi8KKwkJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBGSVJTVF9QQUNLRVQpIHsKKwkJCXl5dXZfZGVjb2RlKHNkLT50bXBidWYyLCBzZC0+dG1wYnVmLAorCQkJCQlnc3BjYV9kZXYtPndpZHRoLAorCQkJCQlnc3BjYV9kZXYtPmhlaWdodCk7CisJCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCisJCQkJCQlMQVNUX1BBQ0tFVCwKKwkJCQkJCWZyYW1lLAorCQkJCQkJc2QtPnRtcGJ1ZjIsCisJCQkJCQlnc3BjYV9kZXYtPndpZHRoCisJCQkJCQkJKiBnc3BjYV9kZXYtPmhlaWdodAorCQkJCQkJCSogMik7CisJCX0KKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCQlkYXRhLCAwKTsKKwkJZGF0YSArPSBTUENBNTBYX09GRlNFVF9EQVRBOworCQlsZW4gLT0gU1BDQTUwWF9PRkZTRVRfREFUQTsKKwkJaWYgKGxlbiA+IDApCisJCQltZW1jcHkoc2QtPnRtcGJ1ZiwgZGF0YSwgbGVuKTsKKwkJZWxzZQorCQkJbGVuID0gMDsKKwkJc2QtPmJ1ZmxlbiA9IGxlbjsKKwkJcmV0dXJuOworCWNhc2UgMHhmZjoJCQkvKiBkcm9wICovCisvKgkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7ICovCisJCXJldHVybjsKKwl9CisJZGF0YSArPSAxOworCWxlbiAtPSAxOworCW1lbWNweSgmc2QtPnRtcGJ1ZltzZC0+YnVmbGVuXSwgZGF0YSwgbGVuKTsKKwlzZC0+YnVmbGVuICs9IGxlbjsKK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc3BjYTUwNl9Jbml0aTJjKGdzcGNhX2Rldik7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIHNkLT5icmlnaHRuZXNzLCBTQUE3MTEzX2JyaWdodCk7CisJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDEsIDB4MDkpOworfQorCitzdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfYnJpZ2h0KTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNwY2E1MDZfSW5pdGkyYyhnc3BjYV9kZXYpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCBzZC0+Y29udHJhc3QsIFNBQTcxMTNfY29udHJhc3QpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDA5KTsKK30KKworc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfY29udHJhc3QpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNwY2E1MDZfSW5pdGkyYyhnc3BjYV9kZXYpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCBzZC0+Y29sb3JzLCBTQUE3MTEzX3NhdHVyYXRpb24pOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDA5KTsKK30KKworc3RhdGljIHZvaWQgZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29sb3JzID0gc3BjYTUwNl9SZWFkSTJjKGdzcGNhX2RldiwgU0FBNzExM19zYXR1cmF0aW9uKTsKK30KKworc3RhdGljIHZvaWQgc2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzcGNhNTA2X0luaXRpMmMoZ3NwY2FfZGV2KTsKKwlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2Rldiwgc2QtPmh1ZSwgU0FBNzExM19odWUpOworCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDA5KTsKK30KKworc3RhdGljIHZvaWQgZ2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+aHVlID0gc3BjYTUwNl9SZWFkSTJjKGdzcGNhX2RldiwgU0FBNzExM19odWUpOworfQorCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnZXRjb250cmFzdChnc3BjYV9kZXYpOworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb2xvcnMgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWdldGNvbG9ycyhnc3BjYV9kZXYpOworCSp2YWwgPSBzZC0+Y29sb3JzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+aHVlID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0aHVlKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnZXRodWUoZ3NwY2FfZGV2KTsKKwkqdmFsID0gc2QtPmh1ZTsKKwlyZXR1cm4gMDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgPSBzZF9jdHJscywKKwkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkub3BlbiA9IHNkX29wZW4sCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCisJLmNsb3NlID0gc2RfY2xvc2UsCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KKyNkZWZpbmUgRFZOTShuYW1lKSAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpIG5hbWUKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDZlMSwgMHhhMTkwKSwgRFZOTSgiQURTIEluc3RhbnQgVkNEIil9LAorLyoJe1VTQl9ERVZJQ0UoMHgwNzMzLCAweDA0MzApLCBEVk5NKCJVc2JHcmFiYmVyIFBWMzIxYyIpfSwgKi8KKwl7VVNCX0RFVklDRSgweDA3MzQsIDB4MDQzYiksIERWTk0oIjNEZU1vbiBVU0IgQ2FwdHVyZSBha2EiKX0sCisJe1VTQl9ERVZJQ0UoMHg5OWZhLCAweDg5ODgpLCBEVk5NKCJHcmFuZHRlYyBWLmNhcCIpfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCisJCXJldHVybiAtMTsKKwlQREVCVUcoRF9QUk9CRSwgInYlcyByZWdpc3RlcmVkIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2Q5MzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwpAQCAtMCwwICsxLDE3OTEgQEAKKy8qCisgKiBTUENBNTA4IGNoaXAgYmFzZWQgY2FtZXJhcyBzdWJkcml2ZXIKKyAqCisgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJzcGNhNTA4IgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9TUENBNTA4IFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJaW50IGJ1ZmxlbjsKKwl1bnNpZ25lZCBjaGFyIHRtcGJ1ZlszNTIgKiAyODggKiAzIC8gMl07IC8qIFlVVlkgcGVyIGxpbmUgKi8KKwl1bnNpZ25lZCBjaGFyIHRtcGJ1ZjJbMzUyICogMjg4ICogMl07CS8qIFlVWVYgKi8KKworCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKKworCWNoYXIgc3VidHlwZTsKKyNkZWZpbmUgQ3JlYXRpdmVWaXN0YSAwCisjZGVmaW5lIEhhbWFVU0JTaWdodGNhbSAxCisjZGVmaW5lIEhhbWFVU0JTaWdodGNhbTIgMgorI2RlZmluZSBJbnRlbEVhc3lQQ0NhbWVyYSAzCisjZGVmaW5lIE1pY3JvSW5ub3ZhdGlvbklDMjAwIDQKKyNkZWZpbmUgVmlld1F1ZXN0VlExMTAgNQorfTsKKworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyOAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNpZl9tb2RlW10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwICogMiwKKwkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gM30sCisJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTc2ICogMiwKKwkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMn0sCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwICogMiwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMX0sCisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyICogMiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCit9OworCisvKiBGcmFtZSBwYWNrZXQgaGVhZGVyIG9mZnNldHMgZm9yIHRoZSBzcGNhNTA4ICovCisjZGVmaW5lIFNQQ0E1MDhfT0ZGU0VUX1RZUEUgMQorI2RlZmluZSBTUENBNTA4X09GRlNFVF9DT01QUkVTUyAyCisjZGVmaW5lIFNQQ0E1MDhfT0ZGU0VUX0ZSQU1TRVEgOAorI2RlZmluZSBTUENBNTA4X09GRlNFVF9XSU4xTFVNIDExCisjZGVmaW5lIFNQQ0E1MDhfT0ZGU0VUX0RBVEEgMzcKKworI2RlZmluZSBTUENBNTA4X1NOQVBCSVQgMHgyMAorI2RlZmluZSBTUENBNTA4X1NOQVBDVFJMIDB4NDAKKy8qKioqKioqKioqKioqKiogSTJjICoqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNQQ0E1MDhfSU5ERVhfSTJDX0JBU0UgMHg4ODAwCisKKy8qCisgKiBJbml0aWFsaXphdGlvbiBkYXRhOiB0aGlzIGlzIHRoZSBmaXJzdCBzZXQtdXAgZGF0YSB3cml0dGVuIHRvIHRoZQorICogZGV2aWNlIChiZWZvcmUgdGhlIG9wZW4gZGF0YSkuCisgKi8KK3N0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA4X2luaXRfZGF0YVtdWzNdID0KKyNkZWZpbmUgSUdOKHgpCQkJLyogbm90aGluZyAqLworeworCS8qICBsaW5lICAgVVJCICAgICAgdmFsdWUsIGluZGV4ICovCisJLyogNDQyNzQgIDE4MDQgKi8gezB4MDAwMCwgMHg4NzBifSwKKworCS8qIDQ0Mjk5ICAxODA1ICovIHsweDAwMjAsIDB4ODExMn0sCisJLyogVmlkZW8gZHJvcCBlbmFibGUsIElTTyBzdHJlYW1pbmcgZGlzYWJsZSAqLworCS8qIDQ0MzI0ICAxODA2ICovIHsweDAwMDMsIDB4ODExMX0sCisJLyogUmVzZXQgY29tcHJlc3Npb24gJiBtZW1vcnkgKi8KKwkvKiA0NDM0OSAgMTgwNyAqLyB7MHgwMDAwLCAweDgxMTB9LAorCS8qIERpc2FibGUgYWxsIG91dHB1dHMgKi8KKwkvKiA0NDM3MiAgMTgwOCAqLyAvKiBSRUFEIHsweDAwMDAsIDB4ODExNH0gLT4gMDAwMDogMDAgICovCisJLyogNDQzOTggIDE4MDkgKi8gezB4MDAwMCwgMHg4MTE0fSwKKwkvKiBTVyBHUElPIGRhdGEgKi8KKwkvKiA0NDQyMyAgMTgxMCAqLyB7MHgwMDA4LCAweDgxMTB9LAorCS8qIEVuYWJsZSBjaGFyZ2UgcHVtcCBvdXRwdXQgKi8KKwkvKiA0NDUyNyAgMTgxMSAqLyB7MHgwMDAyLCAweDgxMTZ9LAorCS8qIDIwMCBrSHogcHVtcCBjbG9jayAqLworCS8qIDQ0NTU1ICAxODEyICovCisJCS8qIFVOS05PV04gRElSRUNUSU9OIChVUkJfRlVOQ1RJT05fU0VMRUNUX0lOVEVSRkFDRTopICovCisJLyogNDQ1OTAgIDE4MTMgKi8gezB4MDAwMywgMHg4MTExfSwKKwkvKiBSZXNldCBjb21wcmVzc2lvbiAmIG1lbW9yeSAqLworCS8qIDQ0NjE1ICAxODE0ICovIHsweDAwMDAsIDB4ODExMX0sCisJLyogTm9ybWFsIG1vZGUgKG5vdCByZXNldCkgKi8KKwkvKiA0NDY0MCAgMTgxNSAqLyB7MHgwMDk4LCAweDgxMTB9LAorCS8qIEVuYWJsZSBjaGFyZ2UgcHVtcCBvdXRwdXQsIHN5bmMuc2VyaWFsLGV4dGVybmFsIDJ4IGNsb2NrICovCisJLyogNDQ2NjUgIDE4MTYgKi8gezB4MDAwZCwgMHg4MTE0fSwKKwkvKiBTVyBHUElPIGRhdGEgKi8KKwkvKiA0NDY5MCAgMTgxNyAqLyB7MHgwMDAyLCAweDgxMTZ9LAorCS8qIDIwMCBrSHogcHVtcCBjbG9jayAqLworCS8qIDQ0NzE1ICAxODE4ICovIHsweDAwMjAsIDB4ODExMn0sCisJLyogVmlkZW8gZHJvcCBlbmFibGUsIElTTyBzdHJlYW1pbmcgZGlzYWJsZSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogNDQ3NDAgIDE4MTkgKi8gezB4MDAwZiwgMHg4NDAyfSwKKwkvKiBtZW1vcnkgYmFuayAqLworCS8qIDQ0NzY1ICAxODIwICovIHsweDAwMDAsIDB4ODQwM30sCisJLyogLi4uIGFkZHJlc3MgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogMHg4OF9fIGlzIFN5bmNocm9ub3VzIFNlcmlhbCBJbnRlcmZhY2UuICovCisvKiBUQkQ6IFRoaXMgdGFibGUgY291bGQgYmUgZXhwcmVzc2VkIG1vcmUgY29tcGFjdGx5ICovCisvKiB1c2luZyBzcGNhNTA4X3dyaXRlX2kyY192ZWN0b3IoKS4gKi8KKy8qIFRCRDogU2hvdWxkIHNlZSBpZiB0aGUgdmFsdWVzIGluIHNwY2E1MHhfaTJjX2RhdGEgKi8KKy8qIHdvdWxkIHdvcmsgd2l0aCB0aGUgVlExMTAgaW5zdGVhZCBvZiB0aGUgdmFsdWVzICovCisvKiBiZWxvdy4gKi8KKwkvKiA0NDc5MCAgMTgyMSAqLyB7MHgwMGMwLCAweDg4MDR9LAorCS8qIFNTSSBzbGF2ZSBhZGRyICovCisJLyogNDQ4MTUgIDE4MjIgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiAzNzUgS2h6IFNTSSBjbG9jayAqLworCS8qIDQ0ODM4ICAxODIzICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ0ODYyICAxODI0ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ0ODg4ICAxODI1ICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogMzc1IEtoeiBTU0kgY2xvY2sgKi8KKwkvKiA0NDkxMyAgMTgyNiAqLyB7MHgwMDEyLCAweDg4MDF9LAorCS8qIFNTSSByZWcgYWRkciAqLworCS8qIDQ0OTM4ICAxODI3ICovIHsweDAwODAsIDB4ODgwMH0sCisJLyogU1NJIGRhdGEgdG8gd3JpdGUgKi8KKwkvKiA0NDk2MSAgMTgyOCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0NDk4NSAgMTgyOSAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0NTAwOSAgMTgzMCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0NTAzNSAgMTgzMSAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDM3NSBLaHogU1NJIGNsb2NrICovCisJLyogNDUwNjAgIDE4MzIgKi8gezB4MDAxMiwgMHg4ODAxfSwKKwkvKiBTU0kgcmVnIGFkZHIgKi8KKwkvKiA0NTA4NSAgMTgzMyAqLyB7MHgwMDAwLCAweDg4MDB9LAorCS8qIFNTSSBkYXRhIHRvIHdyaXRlICovCisJLyogNDUxMDggIDE4MzQgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDUxMzIgIDE4MzUgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDUxNTYgIDE4MzYgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDUxODIgIDE4MzcgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiAzNzUgS2h6IFNTSSBjbG9jayAqLworCS8qIDQ1MjA3ICAxODM4ICovIHsweDAwMTEsIDB4ODgwMX0sCisJLyogU1NJIHJlZyBhZGRyICovCisJLyogNDUyMzIgIDE4MzkgKi8gezB4MDA0MCwgMHg4ODAwfSwKKwkvKiBTU0kgZGF0YSB0byB3cml0ZSAqLworCS8qIDQ1MjU1ICAxODQwICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1Mjc5ICAxODQxICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1MzAzICAxODQyICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ1MzI5ICAxODQzICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDUzNTQgIDE4NDQgKi8gezB4MDAxMywgMHg4ODAxfSwKKwkvKiA0NTM3OSAgMTg0NSAqLyB7MHgwMDAwLCAweDg4MDB9LAorCS8qIDQ1NDAyICAxODQ2ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1NDI2ICAxODQ3ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1NDUwICAxODQ4ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ1NDc2ICAxODQ5ICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDU1MDEgIDE4NTAgKi8gezB4MDAxNCwgMHg4ODAxfSwKKwkvKiA0NTUyNiAgMTg1MSAqLyB7MHgwMDAwLCAweDg4MDB9LAorCS8qIDQ1NTQ5ICAxODUyICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1NTczICAxODUzICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1NTk3ICAxODU0ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ1NjIzICAxODU1ICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDU2NDggIDE4NTYgKi8gezB4MDAxNSwgMHg4ODAxfSwKKwkvKiA0NTY3MyAgMTg1NyAqLyB7MHgwMDAxLCAweDg4MDB9LAorCS8qIDQ1Njk2ICAxODU4ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1NzIwICAxODU5ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1NzQ0ICAxODYwICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ1NzcwICAxODYxICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDU3OTUgIDE4NjIgKi8gezB4MDAxNiwgMHg4ODAxfSwKKwkvKiA0NTgyMCAgMTg2MyAqLyB7MHgwMDAzLCAweDg4MDB9LAorCS8qIDQ1ODQzICAxODY0ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1ODY3ICAxODY1ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ1ODkxICAxODY2ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ1OTE3ICAxODY3ICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDU5NDIgIDE4NjggKi8gezB4MDAxNywgMHg4ODAxfSwKKwkvKiA0NTk2NyAgMTg2OSAqLyB7MHgwMDM2LCAweDg4MDB9LAorCS8qIDQ1OTkwICAxODcwICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2MDE0ICAxODcxICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2MDM4ICAxODcyICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ2MDY0ICAxODczICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDYwODkgIDE4NzQgKi8gezB4MDAxOCwgMHg4ODAxfSwKKwkvKiA0NjExNCAgMTg3NSAqLyB7MHgwMGVjLCAweDg4MDB9LAorCS8qIDQ2MTM3ICAxODc2ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2MTYxICAxODc3ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2MTg1ICAxODc4ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ2MjExICAxODc5ICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDYyMzYgIDE4ODAgKi8gezB4MDAxYSwgMHg4ODAxfSwKKwkvKiA0NjI2MSAgMTg4MSAqLyB7MHgwMDk0LCAweDg4MDB9LAorCS8qIDQ2Mjg0ICAxODgyICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2MzA4ICAxODgzICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2MzMyICAxODg0ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ2MzU4ICAxODg1ICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDYzODMgIDE4ODYgKi8gezB4MDAxYiwgMHg4ODAxfSwKKwkvKiA0NjQwOCAgMTg4NyAqLyB7MHgwMDAwLCAweDg4MDB9LAorCS8qIDQ2NDMxICAxODg4ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2NDU1ICAxODg5ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2NDc5ICAxODkwICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ2NTA1ICAxODkxICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDY1MzAgIDE4OTIgKi8gezB4MDAyNywgMHg4ODAxfSwKKwkvKiA0NjU1NSAgMTg5MyAqLyB7MHgwMGEyLCAweDg4MDB9LAorCS8qIDQ2NTc4ICAxODk0ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2NjAyICAxODk1ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2NjI2ICAxODk2ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ2NjUyICAxODk3ICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDY2NzcgIDE4OTggKi8gezB4MDAyOCwgMHg4ODAxfSwKKwkvKiA0NjcwMiAgMTg5OSAqLyB7MHgwMDQwLCAweDg4MDB9LAorCS8qIDQ2NzI1ICAxOTAwICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2NzQ5ICAxOTAxICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2NzczICAxOTAyICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+IDAwMDA6IDA4ICAqLworCS8qIDQ2Nzk5ICAxOTAzICovIHsweDAwMDgsIDB4ODgwMn0sCisJLyogNDY4MjQgIDE5MDQgKi8gezB4MDAyYSwgMHg4ODAxfSwKKwkvKiA0Njg0OSAgMTkwNSAqLyB7MHgwMDg0LCAweDg4MDB9LAorCS8qIDQ2ODcyICAxOTA2ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDQ2ODk2ICAxOTA3ICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICovCisJLyogNDY5MjAgIDE5MDggKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDY5NDYgIDE5MDkgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiA0Njk3MSAgMTkxMCAqLyB7MHgwMDJiLCAweDg4MDF9LAorCS8qIDQ2OTk2ICAxOTExICovIHsweDAwYTgsIDB4ODgwMH0sCisJLyogNDcwMTkgIDE5MTIgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDcwNDMgIDE5MTMgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDcwNjcgIDE5MTQgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDcwOTMgIDE5MTUgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiA0NzExOCAgMTkxNiAqLyB7MHgwMDJjLCAweDg4MDF9LAorCS8qIDQ3MTQzICAxOTE3ICovIHsweDAwZmUsIDB4ODgwMH0sCisJLyogNDcxNjYgIDE5MTggKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDcxOTAgIDE5MTkgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDcyMTQgIDE5MjAgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDcyNDAgIDE5MjEgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiA0NzI2NSAgMTkyMiAqLyB7MHgwMDJkLCAweDg4MDF9LAorCS8qIDQ3MjkwICAxOTIzICovIHsweDAwMDMsIDB4ODgwMH0sCisJLyogNDczMTMgIDE5MjQgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDczMzcgIDE5MjUgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDczNjEgIDE5MjYgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDczODcgIDE5MjcgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiA0NzQxMiAgMTkyOCAqLyB7MHgwMDM4LCAweDg4MDF9LAorCS8qIDQ3NDM3ICAxOTI5ICovIHsweDAwODMsIDB4ODgwMH0sCisJLyogNDc0NjAgIDE5MzAgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDc0ODQgIDE5MzEgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDc1MDggIDE5MzIgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDc1MzQgIDE5MzMgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiA0NzU1OSAgMTkzNCAqLyB7MHgwMDMzLCAweDg4MDF9LAorCS8qIDQ3NTg0ICAxOTM1ICovIHsweDAwODEsIDB4ODgwMH0sCisJLyogNDc2MDcgIDE5MzYgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDc2MzEgIDE5MzcgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDc2NTUgIDE5MzggKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDc2ODEgIDE5MzkgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiA0NzcwNiAgMTk0MCAqLyB7MHgwMDM0LCAweDg4MDF9LAorCS8qIDQ3NzMxICAxOTQxICovIHsweDAwNGEsIDB4ODgwMH0sCisJLyogNDc3NTQgIDE5NDIgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDc3NzggIDE5NDMgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDc4MDIgIDE5NDQgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDc4MjggIDE5NDUgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiA0Nzg1MyAgMTk0NiAqLyB7MHgwMDM5LCAweDg4MDF9LAorCS8qIDQ3ODc4ICAxOTQ3ICovIHsweDAwMDAsIDB4ODgwMH0sCisJLyogNDc5MDEgIDE5NDggKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDc5MjUgIDE5NDkgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDc5NDkgIDE5NTAgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDc5NzUgIDE5NTEgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiA0ODAwMCAgMTk1MiAqLyB7MHgwMDEwLCAweDg4MDF9LAorCS8qIDQ4MDI1ICAxOTUzICovIHsweDAwYTgsIDB4ODgwMH0sCisJLyogNDgwNDggIDE5NTQgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDgwNzIgIDE5NTUgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDgwOTYgIDE5NTYgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNDgxMjIgIDE5NTcgKi8gezB4MDAwOCwgMHg4ODAyfSwKKwkvKiA0ODE0NyAgMTk1OCAqLyB7MHgwMDA2LCAweDg4MDF9LAorCS8qIDQ4MTcyICAxOTU5ICovIHsweDAwNTgsIDB4ODgwMH0sCisJLyogNDgxOTUgIDE5NjAgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNDgyMTkgIDE5NjEgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgKi8KKwkvKiA0ODI0MyAgMTk2MiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0ODI2OSAgMTk2MyAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ4Mjk0ICAxOTY0ICovIHsweDAwMDAsIDB4ODgwMX0sCisJLyogNDgzMTkgIDE5NjUgKi8gezB4MDAwNCwgMHg4ODAwfSwKKwkvKiA0ODM0MiAgMTk2NiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODM2NiAgMTk2NyAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODM5MCAgMTk2OCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0ODQxNiAgMTk2OSAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ4NDQxICAxOTcwICovIHsweDAwNDAsIDB4ODgwMX0sCisJLyogNDg0NjYgIDE5NzEgKi8gezB4MDA4MCwgMHg4ODAwfSwKKwkvKiA0ODQ4OSAgMTk3MiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODUxMyAgMTk3MyAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODUzNyAgMTk3NCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0ODU2MyAgMTk3NSAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ4NTg4ICAxOTc2ICovIHsweDAwNDEsIDB4ODgwMX0sCisJLyogNDg2MTMgIDE5NzcgKi8gezB4MDAwYywgMHg4ODAwfSwKKwkvKiA0ODYzNiAgMTk3OCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODY2MCAgMTk3OSAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODY4NCAgMTk4MCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0ODcxMCAgMTk4MSAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ4NzM1ICAxOTgyICovIHsweDAwNDIsIDB4ODgwMX0sCisJLyogNDg3NjAgIDE5ODMgKi8gezB4MDAwYywgMHg4ODAwfSwKKwkvKiA0ODc4MyAgMTk4NCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODgwNyAgMTk4NSAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODgzMSAgMTk4NiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0ODg1NyAgMTk4NyAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ4ODgyICAxOTg4ICovIHsweDAwNDMsIDB4ODgwMX0sCisJLyogNDg5MDcgIDE5ODkgKi8gezB4MDAyOCwgMHg4ODAwfSwKKwkvKiA0ODkzMCAgMTk5MCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODk1NCAgMTk5MSAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0ODk3OCAgMTk5MiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0OTAwNCAgMTk5MyAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ5MDI5ICAxOTk0ICovIHsweDAwNDQsIDB4ODgwMX0sCisJLyogNDkwNTQgIDE5OTUgKi8gezB4MDA4MCwgMHg4ODAwfSwKKwkvKiA0OTA3NyAgMTk5NiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTEwMSAgMTk5NyAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTEyNSAgMTk5OCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0OTE1MSAgMTk5OSAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ5MTc2ICAyMDAwICovIHsweDAwNDUsIDB4ODgwMX0sCisJLyogNDkyMDEgIDIwMDEgKi8gezB4MDAyMCwgMHg4ODAwfSwKKwkvKiA0OTIyNCAgMjAwMiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTI0OCAgMjAwMyAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTI3MiAgMjAwNCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0OTI5OCAgMjAwNSAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ5MzIzICAyMDA2ICovIHsweDAwNDYsIDB4ODgwMX0sCisJLyogNDkzNDggIDIwMDcgKi8gezB4MDAyMCwgMHg4ODAwfSwKKwkvKiA0OTM3MSAgMjAwOCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTM5NSAgMjAwOSAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTQxOSAgMjAxMCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0OTQ0NSAgMjAxMSAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ5NDcwICAyMDEyICovIHsweDAwNDcsIDB4ODgwMX0sCisJLyogNDk0OTUgIDIwMTMgKi8gezB4MDA4MCwgMHg4ODAwfSwKKwkvKiA0OTUxOCAgMjAxNCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTU0MiAgMjAxNSAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTU2NiAgMjAxNiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0OTU5MiAgMjAxNyAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ5NjE3ICAyMDE4ICovIHsweDAwNDgsIDB4ODgwMX0sCisJLyogNDk2NDIgIDIwMTkgKi8gezB4MDA0YywgMHg4ODAwfSwKKwkvKiA0OTY2NSAgMjAyMCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTY4OSAgMjAyMSAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTcxMyAgMjAyMiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0OTczOSAgMjAyMyAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ5NzY0ICAyMDI0ICovIHsweDAwNDksIDB4ODgwMX0sCisJLyogNDk3ODkgIDIwMjUgKi8gezB4MDA4NCwgMHg4ODAwfSwKKwkvKiA0OTgxMiAgMjAyNiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTgzNiAgMjAyNyAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTg2MCAgMjAyOCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA0OTg4NiAgMjAyOSAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDQ5OTExICAyMDMwICovIHsweDAwNGEsIDB4ODgwMX0sCisJLyogNDk5MzYgIDIwMzEgKi8gezB4MDA4NCwgMHg4ODAwfSwKKwkvKiA0OTk1OSAgMjAzMiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA0OTk4MyAgMjAzMyAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA1MDAwNyAgMjAzNCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA1MDAzMyAgMjAzNSAqLyB7MHgwMDA4LCAweDg4MDJ9LAorCS8qIDUwMDU4ICAyMDM2ICovIHsweDAwNGIsIDB4ODgwMX0sCisJLyogNTAwODMgIDIwMzcgKi8gezB4MDA4NCwgMHg4ODAwfSwKKwkvKiA1MDEwNiAgMjAzOCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiA1MDEzMiAgMjAzOSAqLyB7MHgwMDEyLCAweDg3MDB9LAorCS8qIENsb2NrIHNwZWVkIDQ4TWh6LygyKzIpLzI9IDYgTWh6ICovCisJLyogNTAxNTcgIDIwNDAgKi8gezB4MDAwMCwgMHg4NzAxfSwKKwkvKiBDS3gxIGNsb2NrIGRlbGF5IGFkaiAqLworCS8qIDUwMTgyICAyMDQxICovIHsweDAwMDAsIDB4ODcwMX0sCisJLyogQ0t4MSBjbG9jayBkZWxheSBhZGogKi8KKwkvKiA1MDIwNyAgMjA0MiAqLyB7MHgwMDAxLCAweDg3MGN9LAorCS8qIENLT3gyIG91dHB1dCAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIDUwMjMyICAyMDQzICovIHsweDAwODAsIDB4ODYwMH0sCisJLyogTGluZSBtZW1vcnkgcmVhZCBjb3VudGVyIChMKSAqLworCS8qIDUwMjU3ICAyMDQ0ICovIHsweDAwMDEsIDB4ODYwNn0sCisJLyogcmVzZXJ2ZWQgKi8KKwkvKiA1MDI4MiAgMjA0NSAqLyB7MHgwMDY0LCAweDg2MDd9LAorCS8qIExpbmUgbWVtb3J5IHJlYWQgY291bnRlciAoSCkgMHg2NDgwPTI1LDcyOCAqLworCS8qIDUwMzA3ICAyMDQ2ICovIHsweDAwMmEsIDB4ODYwMX0sCisJLyogQ0RTUCBzaGFycCBpbnRlcnBvbGF0aW9uIG1vZGUsCisJICoJCQlsaW5lIHNlbCBmb3IgY29sb3Igc2VwLCBlZGdlIGVuaGFuY2UgZW5hYiAqLworCS8qIDUwMzMyICAyMDQ3ICovIHsweDAwMDAsIDB4ODYwMn0sCisJLyogb3B0aWNhbCBibGFjayBsZXZlbCBmb3IgdXNlciBzZXR0bmcgPSAwICovCisJLyogNTAzNTcgIDIwNDggKi8gezB4MDA4MCwgMHg4NjAwfSwKKwkvKiBMaW5lIG1lbW9yeSByZWFkIGNvdW50ZXIgKEwpICovCisJLyogNTAzODIgIDIwNDkgKi8gezB4MDAwYSwgMHg4NjAzfSwKKwkvKiBvcHRpY2FsIGJsYWNrIGxldmVsIGNhbGMgbW9kZTogYXV0bzsgb3B0aWNhbCBibGFjayBvZmZzZXQgPSAxMCAqLworCS8qIDUwNDA3ICAyMDUwICovIHsweDAwZGYsIDB4ODY1Yn0sCisJLyogSG9yaXogb2Zmc2V0IGZvciB2YWxpZCBwaXhlbHMgKEwpPTB4ZGYgKi8KKwkvKiA1MDQzMiAgMjA1MSAqLyB7MHgwMDEyLCAweDg2NWN9LAorCS8qIFZlcnQgb2Zmc2V0IGZvciB2YWxpZCBsaW5lcyAoTCk9MHgxMiAqLworCisvKiBUaGUgZm9sbG93aW5nIHR3byBsaW5lcyBzZWVtIHRvIGJlIHRoZSAid3JvbmciIHJlc29sdXRpb24uICovCisvKiBCdXQgcGVyaGFwcyB0aGVzZSBpbmRpY2F0ZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIHNlbnNvciAqLworLyogcmF0aGVyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgdmlkZW8gbW9kZS4gKi8KKwkvKiA1MDQ1NyAgMjA1MiAqLyB7MHgwMDU4LCAweDg2NWR9LAorCS8qIEhvcml6IHZhbGlkIHBpeGVscyAoKjQpIChMKSA9IDM1MiAqLworCS8qIDUwNDgyICAyMDUzICovIHsweDAwNDgsIDB4ODY1ZX0sCisJLyogVmVydCB2YWxpZCBsaW5lcyAoKjQpIChMKSA9IDI4OCAqLworCisJLyogNTA1MDcgIDIwNTQgKi8gezB4MDAxNSwgMHg4NjA4fSwKKwkvKiBBMTEgQ29lZiAuLi4gKi8KKwkvKiA1MDUzMiAgMjA1NSAqLyB7MHgwMDMwLCAweDg2MDl9LAorCS8qIDUwNTU3ICAyMDU2ICovIHsweDAwZmIsIDB4ODYwYX0sCisJLyogNTA1ODIgIDIwNTcgKi8gezB4MDAzZSwgMHg4NjBifSwKKwkvKiA1MDYwNyAgMjA1OCAqLyB7MHgwMGNlLCAweDg2MGN9LAorCS8qIDUwNjMyICAyMDU5ICovIHsweDAwZjQsIDB4ODYwZH0sCisJLyogNTA2NTcgIDIwNjAgKi8gezB4MDBlYiwgMHg4NjBlfSwKKwkvKiA1MDY4MiAgMjA2MSAqLyB7MHgwMGRjLCAweDg2MGZ9LAorCS8qIDUwNzA3ICAyMDYyICovIHsweDAwMzksIDB4ODYxMH0sCisJLyogNTA3MzIgIDIwNjMgKi8gezB4MDAwMSwgMHg4NjExfSwKKwkvKiBSIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAuLi4gKi8KKwkvKiA1MDc1NyAgMjA2NCAqLyB7MHgwMDAwLCAweDg2MTJ9LAorCS8qIDUwNzgyICAyMDY1ICovIHsweDAwMDEsIDB4ODYxM30sCisJLyogNTA4MDcgIDIwNjYgKi8gezB4MDAwMCwgMHg4NjE0fSwKKwkvKiA1MDgzMiAgMjA2NyAqLyB7MHgwMDViLCAweDg2NTF9LAorCS8qIFIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAuLi4gKi8KKwkvKiA1MDg1NyAgMjA2OCAqLyB7MHgwMDQwLCAweDg2NTJ9LAorCS8qIDUwODgyICAyMDY5ICovIHsweDAwNjAsIDB4ODY1M30sCisJLyogNTA5MDcgIDIwNzAgKi8gezB4MDA0MCwgMHg4NjU0fSwKKwkvKiA1MDkzMiAgMjA3MSAqLyB7MHgwMDAwLCAweDg2NTV9LAorCS8qIDUwOTU3ICAyMDcyICovIHsweDAwMDEsIDB4ODYzZn0sCisJLyogRml4ZWQgZ2FtbWEgY29ycmVjdGlvbiBlbmFibGUsIFVTQiBjb250cm9sLAorCSAqCQkJIGx1bSBmaWx0ZXIgZGlzYWJsZSwgbHVtIG5vaXNlIGNsaXAgZGlzYWJsZSAqLworCS8qIDUwOTgyICAyMDczICovIHsweDAwYTEsIDB4ODY1Nn0sCisJLyogV2luZG93MSBzaXplIDI1NngyNTYsIFdpbmRvd3MyIHNpemUgNjR4NjQsCisJICoJCSBnYW1tYSBsb29rLXVwIGRpc2FibGUsIG5ldyBlZGdlIGVuaGFuY2VtZW50IGVuYWJsZSAqLworCS8qIDUxMDA3ICAyMDc0ICovIHsweDAwMTgsIDB4ODY1N30sCisJLyogRWRnZSBnYWluIGhpZ2ggdGhyZXNoICovCisJLyogNTEwMzIgIDIwNzUgKi8gezB4MDAyMCwgMHg4NjU4fSwKKwkvKiBFZGdlIGdhaW4gbG93IHRocmVzaCAqLworCS8qIDUxMDU3ICAyMDc2ICovIHsweDAwMGEsIDB4ODY1OX0sCisJLyogRWRnZSBiYW5kd2lkdGggaGlnaCB0aHJlc2hvbGQgKi8KKwkvKiA1MTA4MiAgMjA3NyAqLyB7MHgwMDA1LCAweDg2NWF9LAorCS8qIEVkZ2UgYmFuZHdpZHRoIGxvdyB0aHJlc2hvbGQgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIDUxMTA3ICAyMDc4ICovIHsweDAwMzAsIDB4ODExMn0sCisJLyogVmlkZW8gZHJvcCBlbmFibGUsIElTTyBzdHJlYW1pbmcgZW5hYmxlICovCisJLyogNTExMzAgIDIwNzkgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNTExNTQgIDIwODAgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNTExODAgIDIwODEgKi8gezB4YTkwOCwgMHg4ODAyfSwKKwkvKiA1MTIwNSAgMjA4MiAqLyB7MHgwMDM0LCAweDg4MDF9LAorCS8qIFNTSSByZWcgYWRkciAqLworCS8qIDUxMjMwICAyMDgzICovIHsweDAwY2EsIDB4ODgwMH0sCisJLyogU1NJIGRhdGEgdG8gd3JpdGUgKi8KKwkvKiA1MTI1MyAgMjA4NCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA1MTI3NyAgMjA4NSAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA1MTMwMSAgMjA4NiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAwOCAgKi8KKwkvKiA1MTMyNyAgMjA4NyAqLyB7MHgxZjA4LCAweDg4MDJ9LAorCS8qIDUxMzUyICAyMDg4ICovIHsweDAwMDYsIDB4ODgwMX0sCisJLyogNTEzNzcgIDIwODkgKi8gezB4MDA4MCwgMHg4ODAwfSwKKwkvKiA1MTQwMCAgMjA5MCAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKworLyogLS0tLS0gUmVhZCBiYWNrIGNvZWZzIHdlIHdyb3RlIGVhcmxpZXIuICovCisJLyogNTE0MjQgIDIwOTEgKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjA4IH0gLT4gMDAwMDogMTUgICovCisJLyogNTE0NDggIDIwOTIgKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjA5IH0gLT4gMDAwMDogMzAgICovCisJLyogNTE0NzIgIDIwOTMgKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjBhIH0gLT4gMDAwMDogZmIgICovCisJLyogNTE0OTYgIDIwOTQgKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjBiIH0gLT4gMDAwMDogM2UgICovCisJLyogNTE1MjAgIDIwOTUgKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjBjIH0gLT4gMDAwMDogY2UgICovCisJLyogNTE1NDQgIDIwOTYgKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjBkIH0gLT4gMDAwMDogZjQgICovCisJLyogNTE1NjggIDIwOTcgKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjBlIH0gLT4gMDAwMDogZWIgICovCisJLyogNTE1OTIgIDIwOTggKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjBmIH0gLT4gMDAwMDogZGMgICovCisJLyogNTE2MTYgIDIwOTkgKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjEwIH0gLT4gMDAwMDogMzkgICovCisJLyogNTE2NDAgIDIxMDAgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNTE2NjQgIDIxMDEgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMDggICovCisJLyogNTE2OTAgIDIxMDIgKi8gezB4YjAwOCwgMHg4ODAyfSwKKwkvKiA1MTcxNSAgMjEwMyAqLyB7MHgwMDA2LCAweDg4MDF9LAorCS8qIDUxNzQwICAyMTA0ICovIHsweDAwN2QsIDB4ODgwMH0sCisJLyogNTE3NjMgIDIxMDUgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisKKworCS8qIFRoaXMgY2h1bmsgaXMgc2VlbWluZ2x5IHJlZHVuZGFudCB3aXRoICovCisJLyogZWFybGllciBjb21tYW5kcyAoQTExIENvZWYuLi4pLCBidXQgaWYgSSBkaXNhYmxlIGl0LCAqLworCS8qIHRoZSBpbWFnZSBhcHBlYXJzIHRvbyBkYXJrLiAgTWF5YmUgdGhlcmUgd2FzIHNvbWUga2luZCBvZiAqLworCS8qIHJlc2V0IHNpbmNlIHRoZSBlYXJsaWVyIGNvbW1hbmRzLCBzbyB0aGlzIGlzIG5lY2Vzc2FyeSBhZ2Fpbi4gKi8KKwkvKiA1MTc4OSAgMjEwNiAqLyB7MHgwMDE1LCAweDg2MDh9LAorCS8qIDUxODE0ICAyMTA3ICovIHsweDAwMzAsIDB4ODYwOX0sCisJLyogNTE4MzkgIDIxMDggKi8gezB4ZmZmYiwgMHg4NjBhfSwKKwkvKiA1MTg2NCAgMjEwOSAqLyB7MHgwMDNlLCAweDg2MGJ9LAorCS8qIDUxODg5ICAyMTEwICovIHsweGZmY2UsIDB4ODYwY30sCisJLyogNTE5MTQgIDIxMTEgKi8gezB4ZmZmNCwgMHg4NjBkfSwKKwkvKiA1MTkzOSAgMjExMiAqLyB7MHhmZmViLCAweDg2MGV9LAorCS8qIDUxOTY0ICAyMTEzICovIHsweGZmZGMsIDB4ODYwZn0sCisJLyogNTE5ODkgIDIxMTQgKi8gezB4MDAzOSwgMHg4NjEwfSwKKwkvKiA1MjAxNCAgMjExNSAqLyB7MHgwMDE4LCAweDg2NTd9LAorCisJLyogNTIwMzkgIDIxMTYgKi8gezB4MDAwMCwgMHg4NTA4fSwKKwkvKiBEaXNhYmxlIGNvbXByZXNzaW9uLiAqLworCS8qIFByZXZpb3VzIGxpbmUgd2FzOgorCSAqIDUyMDM5ICAyMTE2ICogIHsgMCwgMHgwMDIxLCAweDg1MDggfSwgICogRW5hYmxlIGNvbXByZXNzaW9uLiAqLworCS8qIDUyMDY0ICAyMTE3ICovIHsweDAwMzIsIDB4ODUwYn0sCisJLyogY29tcHJlc3Npb24gc3R1ZmYgKi8KKwkvKiA1MjA4OSAgMjExOCAqLyB7MHgwMDAzLCAweDg1MDl9LAorCS8qIGNvbXByZXNzaW9uIHN0dWZmICovCisJLyogNTIxMTQgIDIxMTkgKi8gezB4MDAxMSwgMHg4NTBhfSwKKwkvKiBjb21wcmVzc2lvbiBzdHVmZiAqLworCS8qIDUyMTM5ICAyMTIwICovIHsweDAwMjEsIDB4ODUwZH0sCisJLyogY29tcHJlc3Npb24gc3R1ZmYgKi8KKwkvKiA1MjE2NCAgMjEyMSAqLyB7MHgwMDEwLCAweDg1MGN9LAorCS8qIGNvbXByZXNzaW9uIHN0dWZmICovCisJLyogNTIxODkgIDIxMjIgKi8gezB4MDAwMywgMHg4NTAwfSwKKwkvKiAqKiogVmlkZW8gbW9kZTogMTYweDEyMCAqLworCS8qIDUyMjE0ICAyMTIzICovIHsweDAwMDEsIDB4ODUwMX0sCisJLyogSGFyZHdhcmUtZG9taW5hdGVkIHNuYXAgY29udHJvbCAqLworCS8qIDUyMjM5ICAyMTI0ICovIHsweDAwNjEsIDB4ODY1Nn0sCisJLyogV2luZG93MSBzaXplIDEyOHgxMjgsIFdpbmRvd3MyIHNpemUgMTI4eDEyOCwKKwkgKgkJZ2FtbWEgbG9vay11cCBkaXNhYmxlLCBuZXcgZWRnZSBlbmhhbmNlbWVudCBlbmFibGUgKi8KKwkvKiA1MjI2NCAgMjEyNSAqLyB7MHgwMDE4LCAweDg2MTd9LAorCS8qIFdpbmRvdzEgc3RhcnQgWCAoKjIpICovCisJLyogNTIyODkgIDIxMjYgKi8gezB4MDAwOCwgMHg4NjE4fSwKKwkvKiBXaW5kb3cxIHN0YXJ0IFkgKCoyKSAqLworCS8qIDUyMzE0ICAyMTI3ICovIHsweDAwNjEsIDB4ODY1Nn0sCisJLyogV2luZG93MSBzaXplIDEyOHgxMjgsIFdpbmRvd3MyIHNpemUgMTI4eDEyOCwKKwkgKgkJZ2FtbWEgbG9vay11cCBkaXNhYmxlLCBuZXcgZWRnZSBlbmhhbmNlbWVudCBlbmFibGUgKi8KKwkvKiA1MjMzOSAgMjEyOCAqLyB7MHgwMDU4LCAweDg2MTl9LAorCS8qIFdpbmRvdzIgc3RhcnQgWCAoKjIpICovCisJLyogNTIzNjQgIDIxMjkgKi8gezB4MDAwOCwgMHg4NjFhfSwKKwkvKiBXaW5kb3cyIHN0YXJ0IFkgKCoyKSAqLworCS8qIDUyMzg5ICAyMTMwICovIHsweDAwZmYsIDB4ODYxNX0sCisJLyogSGlnaCBsdW0gdGhyZXNoIGZvciB3aGl0ZSBiYWxhbmNlICovCisJLyogNTI0MTQgIDIxMzEgKi8gezB4MDAwMCwgMHg4NjE2fSwKKwkvKiBMb3cgbHVtIHRocmVzaCBmb3Igd2hpdGUgYmFsYW5jZSAqLworCS8qIDUyNDM5ICAyMTMyICovIHsweDAwMTIsIDB4ODcwMH0sCisJLyogQ2xvY2sgc3BlZWQgNDhNaHovKDIrMikvMj0gNiBNaHogKi8KKwkvKiA1MjQ2NCAgMjEzMyAqLyB7MHgwMDEyLCAweDg3MDB9LAorCS8qIENsb2NrIHNwZWVkIDQ4TWh6LygyKzIpLzI9IDYgTWh6ICovCisJLyogNTI0ODcgIDIxMzQgKi8gLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjU2IH0gLT4gMDAwMDogNjEgICovCisJLyogNTI1MTMgIDIxMzUgKi8gezB4MDAyOCwgMHg4ODAyfSwKKwkvKiAzNzUgS2h6IFNTSSBjbG9jaywgU1NJIHIvdyBzeW5jIHdpdGggVlNZTkMgKi8KKwkvKiA1MjUzNiAgMjEzNiAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA1MjU2MCAgMjEzNyAqLyAvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPiAwMDAwOiAyOCAgKi8KKwkvKiA1MjU4NiAgMjEzOCAqLyB7MHgxZjI4LCAweDg4MDJ9LAorCS8qIDM3NSBLaHogU1NJIGNsb2NrLCBTU0kgci93IHN5bmMgd2l0aCBWU1lOQyAqLworCS8qIDUyNjExICAyMTM5ICovIHsweDAwMTAsIDB4ODgwMX0sCisJLyogU1NJIHJlZyBhZGRyICovCisJLyogNTI2MzYgIDIxNDAgKi8gezB4MDAzZSwgMHg4ODAwfSwKKwkvKiBTU0kgZGF0YSB0byB3cml0ZSAqLworCS8qIDUyNjU5ICAyMTQxICovIC8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+IDAwMDA6IDAwICAqLworCS8qIDUyNjg1ICAyMTQyICovIHsweDAwMjgsIDB4ODgwMn0sCisJLyogNTI3MDggIDIxNDMgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNTI3MzIgIDIxNDQgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMjggICovCisJLyogNTI3NTggIDIxNDUgKi8gezB4MWYyOCwgMHg4ODAyfSwKKwkvKiA1Mjc4MyAgMjE0NiAqLyB7MHgwMDAwLCAweDg4MDF9LAorCS8qIDUyODA4ICAyMTQ3ICovIHsweDAwMWYsIDB4ODgwMH0sCisJLyogNTI4MzEgIDIxNDggKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNTI4NTcgIDIxNDkgKi8gezB4MDAwMSwgMHg4NjAyfSwKKwkvKiBvcHRpY2FsIGJsYWNrIGxldmVsIGZvciB1c2VyIHNldHRuaW5nID0gMSAqLworCisJLyogT3JpZ2luYWw6ICovCisJLyogNTI4ODIgIDIxNTAgKi8gezB4MDAyMywgMHg4NzAwfSwKKwkvKiBDbG9jayBzcGVlZCA0OE1oei8oMysyKS80PSAyLjQgTWh6ICovCisJLyogNTI5MDcgIDIxNTEgKi8gezB4MDAwZiwgMHg4NjAyfSwKKwkvKiBvcHRpY2FsIGJsYWNrIGxldmVsIGZvciB1c2VyIHNldHRuaW5nID0gMTUgKi8KKworCS8qIDUyOTMyICAyMTUyICovIHsweDAwMjgsIDB4ODgwMn0sCisJLyogNTI5NTUgIDIxNTMgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNTI5NzkgIDIxNTQgKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4gMDAwMDogMjggICovCisJLyogNTMwMDUgIDIxNTUgKi8gezB4MWYyOCwgMHg4ODAyfSwKKwkvKiA1MzAzMCAgMjE1NiAqLyB7MHgwMDEwLCAweDg4MDF9LAorCS8qIDUzMDU1ICAyMTU3ICovIHsweDAwN2IsIDB4ODgwMH0sCisJLyogNTMwNzggIDIxNTggKi8gLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4gMDAwMDogMDAgICovCisJLyogNTMxMDQgIDIxNTkgKi8gezB4MDAyZiwgMHg4NjUxfSwKKwkvKiBSIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgLi4uICovCisJLyogNTMxMjkgIDIxNjAgKi8gezB4MDA4MCwgMHg4NjUzfSwKKwkvKiA1MzE1MiAgMjE2MSAqLyAvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2NTUgfSAtPiAwMDAwOiAwMCAgKi8KKwkvKiA1MzE3OCAgMjE2MiAqLyB7MHgwMDAwLCAweDg2NTV9LAorCisJLyogNTMyMDMgIDIxNjMgKi8gezB4MDAzMCwgMHg4MTEyfSwKKwkvKiBWaWRlbyBkcm9wIGVuYWJsZSwgSVNPIHN0cmVhbWluZyBlbmFibGUgKi8KKwkvKiA1MzIyOCAgMjE2NCAqLyB7MHgwMDIwLCAweDgxMTJ9LAorCS8qIFZpZGVvIGRyb3AgZW5hYmxlLCBJU08gc3RyZWFtaW5nIGRpc2FibGUgKi8KKwkvKiA1MzI1MiAgMjE2NSAqLworCSAgICAgLyogVU5LTk9XTiBESVJFQ1RJT04gKFVSQl9GVU5DVElPTl9TRUxFQ1RfSU5URVJGQUNFOiAoQUxUPTApICkgKi8KKwl7fQorfTsKKworCisvKgorICogSW5pdGlhbGl6YXRpb24gZGF0YSBmb3IgSW50ZWwgRWFzeVBDIENhbWVyYSBDUzExMAorICovCitzdGF0aWMgY29uc3QgX191MTYgc3BjYTUwOGNzMTEwX2luaXRfZGF0YVtdWzNdID0geworCXsweDAwMDAsIDB4ODcwYn0sIC8qIFJlc2V0IENUTDMgKi8KKwl7MHgwMDAzLCAweDgxMTF9LCAvKiBTb2Z0IFJlc2V0IGNvbXByZXNzaW9uLCBtZW1vcnksIFRHICYgQ0RTUCAqLworCXsweDAwMDAsIDB4ODExMX0sIC8qIE5vcm1hbCBvcGVyYXRpb24gb24gcmVzZXQgKi8KKwl7MHgwMDkwLCAweDgxMTB9LAorCQkgLyogRXh0ZXJuYWwgQ2xvY2sgMnggJiBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlIE91dHB1dCAqLworCXsweDAwMjAsIDB4ODExMn0sIC8qIFZpZGVvIERyb3AgcGFja2V0IGVuYWJsZSAqLworCXsweDAwMDAsIDB4ODExNH0sIC8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KKwl7MHgwMDAxLCAweDgxMTR9LAorCXsweDAwMDEsIDB4ODExNH0sCisJezB4MDAwMSwgMHg4MTE0fSwKKwl7MHgwMDAzLCAweDgxMTR9LAorCisJLyogSW5pdGlhbCBzZXF1ZW5jZSBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlICovCisJezB4MDAwZiwgMHg4NDAyfSwgLyogTWVtb3J5IGJhbmsgQWRkcmVzcyAqLworCXsweDAwMDAsIDB4ODQwM30sIC8qIE1lbW9yeSBiYW5rIEFkZHJlc3MgKi8KKwl7MHgwMGJhLCAweDg4MDR9LCAvKiBTU0kgU2xhdmUgYWRkcmVzcyAqLworCXsweDAwMTAsIDB4ODgwMn0sIC8qIDkzLjc1a0h6IFNTSSBDbG9jayBUd28gRGF0YUJ5dGUgKi8KKwl7MHgwMDEwLCAweDg4MDJ9LCAvKiA5My43NWtIeiBTU0kgQ2xvY2sgdHdvIERhdGFCeXRlICovCisKKwl7MHgwMDAxLCAweDg4MDF9LAorCXsweDAwMGEsIDB4ODgwNX0sLyogYSAtIE5XRzogRHVubm8gd2hhdCB0aGlzIGlzIGFib3V0ICovCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMDEwLCAweDg4MDJ9LAorCisJezB4MDAwMiwgMHg4ODAxfSwKKwl7MHgwMDAwLCAweDg4MDV9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDAxMCwgMHg4ODAyfSwKKworCXsweDAwMDMsIDB4ODgwMX0sCisJezB4MDAyNywgMHg4ODA1fSwKKwl7MHgwMDAxLCAweDg4MDB9LAorCXsweDAwMTAsIDB4ODgwMn0sCisKKwl7MHgwMDA0LCAweDg4MDF9LAorCXsweDAwNjUsIDB4ODgwNX0sCisJezB4MDAwMSwgMHg4ODAwfSwKKwl7MHgwMDEwLCAweDg4MDJ9LAorCisJezB4MDAwNSwgMHg4ODAxfSwKKwl7MHgwMDAzLCAweDg4MDV9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDAxMCwgMHg4ODAyfSwKKworCXsweDAwMDYsIDB4ODgwMX0sCisJezB4MDAxYywgMHg4ODA1fSwKKwl7MHgwMDAwLCAweDg4MDB9LAorCXsweDAwMTAsIDB4ODgwMn0sCisKKwl7MHgwMDA3LCAweDg4MDF9LAorCXsweDAwMmEsIDB4ODgwNX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMDEwLCAweDg4MDJ9LAorCisJezB4MDAwMiwgMHg4NzA0fSwgLyogRXh0ZXJuYWwgaW5wdXQgQ0tJeDEgKi8KKwl7MHgwMDAxLCAweDg2MDZ9LCAvKiAxIExpbmUgbWVtb3J5IFJlYWQgQ291bnRlciAoSCkgUmVzdWx0OiAoZCk0MTAgKi8KKwl7MHgwMDlhLCAweDg2MDB9LCAvKiBMaW5lIG1lbW9yeSBSZWFkIENvdW50ZXIgKEwpICovCisJezB4MDAwMSwgMHg4NjVifSwgLyogMSBIb3Jpem9udGFsIE9mZnNldCBmb3IgVmFsaWQgUGl4ZWwoTCkgKi8KKwl7MHgwMDAzLCAweDg2NWN9LCAvKiAzIFZlcnRpY2FsIE9mZnNldCBmb3IgVmFsaWQgTGluZXMoTCkgKi8KKwl7MHgwMDU4LCAweDg2NWR9LCAvKiA1OCBIb3Jpem9udGFsIFZhbGlkIFBpeGVsIFdpbmRvdyhMKSAqLworCisJezB4MDAwNiwgMHg4NjYwfSwgLyogTmliYmxlIGRhdGEgKyBpbnB1dCBvcmRlciAqLworCisJezB4MDAwYSwgMHg4NjAyfSwgLyogT3B0aWNhbCBibGFjayBsZXZlbCBzZXQgdG8gMHgwYSAqLworLyogMTk0NSAqLyB7MHgwMDAwLCAweDg2MDN9LCAvKiBPcHRpY2FsIGJsYWNrIGxldmVsIE9mZnNldCAqLworCisvKiAxOTYyICogIHswLCAweDAwMDAsIDB4ODYxMX0sICAqIDAgUiAgT2Zmc2V0IGZvciB3aGl0ZSBCYWxhbmNlICovCisvKiAxOTYzICogIHswLCAweDAwMDAsIDB4ODYxMn0sICAqIDEgR3IgT2Zmc2V0IGZvciB3aGl0ZSBCYWxhbmNlICovCisvKiAxOTY0ICogIHswLCAweDAwMDAsIDB4ODYxM30sICAqIDFmIEIgIE9mZnNldCBmb3Igd2hpdGUgQmFsYW5jZSAqLworLyogMTk2NSAqICB7MCwgMHgwMDAwLCAweDg2MTR9LCAgKiBmMCBHYiBPZmZzZXQgZm9yIHdoaXRlIEJhbGFuY2UgKi8KKworCXsweDAwNDAsIDB4ODY1MX0sIC8qIDJiIEJMVUUgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAgZ29vZCBhdCBhbGwgNjAgKi8KKwl7MHgwMDMwLCAweDg2NTJ9LCAvKiA0MSBHciBHYWluIGZvciB3aGl0ZSBCYWxhbmNlIChMKSAqLworCXsweDAwMzUsIDB4ODY1M30sIC8qIDI2IFJFRCBnYWluIGZvciB3aGl0ZSBiYWxhbmNlICovCisJezB4MDAzNSwgMHg4NjU0fSwgLyogNDBHYiBHYWluIGZvciB3aGl0ZSBCYWxhbmNlIChMKSAqLworCXsweDAwNDEsIDB4ODYzZn0sCisJICAgICAgLyogRml4ZWQgR2FtbWEgY29ycmVjdGlvbiBlbmFibGVkIChtYWtlcyBjb2xvdXJzIGxvb2sgYmV0dGVyKSAqLworCisvKiAyNDIyICovIHsweDAwMDAsIDB4ODY1NX0sCisJLyogSGlnaCBiaXRzIGZvciB3aGl0ZSBiYWxhbmNlKioqKipicmlnaHRuZXNzIGNvbnRyb2wqKiogKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhfc2lnaHRjYW1faW5pdF9kYXRhW11bM10gPSB7CisvKiBUaGlzIGxpbmUgc2VlbXMgdG8gc2V0dXAgdGhlIGZyYW1lL2NhbnZhcyAqLworCS8qMzY4ICAqLyB7MHgwMDBmLCAweDg0MDJ9LAorCisvKiBUaGVlc2UgNiBsaW5lcyBhcmUgbmVlZGVkIHRvIHN0YXJ0dXAgdGhlIHdlYmNhbSAqLworCS8qMzk4ICAqLyB7MHgwMDkwLCAweDgxMTB9LAorCS8qMzk5ICAqLyB7MHgwMDAxLCAweDgxMTR9LAorCS8qNDAwICAqLyB7MHgwMDAxLCAweDgxMTR9LAorCS8qNDAxICAqLyB7MHgwMDAxLCAweDgxMTR9LAorCS8qNDAyICAqLyB7MHgwMDAzLCAweDgxMTR9LAorCS8qNDAzICAqLyB7MHgwMDgwLCAweDg4MDR9LAorCisvKiBUaGlzIHBhcnQgc2VlbXMgdG8gbWFrZSB0aGUgcGljdHVyZXMgZGFya2VyPyAoYXV0b2JyaWdodG5lc3M/KSAqLworCS8qNDM2ICAqLyB7MHgwMDAxLCAweDg4MDF9LAorCS8qNDM3ICAqLyB7MHgwMDA0LCAweDg4MDB9LAorCS8qNDM5ICAqLyB7MHgwMDAzLCAweDg4MDF9LAorCS8qNDQwICAqLyB7MHgwMGUwLCAweDg4MDB9LAorCS8qNDQyICAqLyB7MHgwMDA0LCAweDg4MDF9LAorCS8qNDQzICAqLyB7MHgwMGI0LCAweDg4MDB9LAorCS8qNDQ1ICAqLyB7MHgwMDA1LCAweDg4MDF9LAorCS8qNDQ2ICAqLyB7MHgwMDAwLCAweDg4MDB9LAorCisJLyo0NDggICovIHsweDAwMDYsIDB4ODgwMX0sCisJLyo0NDkgICovIHsweDAwZTAsIDB4ODgwMH0sCisJLyo0NTEgICovIHsweDAwMDcsIDB4ODgwMX0sCisJLyo0NTIgICovIHsweDAwMGMsIDB4ODgwMH0sCisKKy8qIFRoaXMgc2VjdGlvbiBpcyBqdXN0IG5lZWRlZCwgaXQgcHJvYmFibHkKKyAqIGRvZXMgc29tZXRoaW5nIGxpa2UgdGhlIHByZXZpb3VzIHNlY3Rpb24sCisgKiBidXQgdGhlIGNhbSB3b24ndCBzdGFydCBpZiBpdCdzIG5vdCBpbmNsdWRlZC4KKyAqLworCS8qNDg0ICAqLyB7MHgwMDE0LCAweDg4MDF9LAorCS8qNDg1ICAqLyB7MHgwMDA4LCAweDg4MDB9LAorCS8qNDg3ICAqLyB7MHgwMDE1LCAweDg4MDF9LAorCS8qNDg4ICAqLyB7MHgwMDY3LCAweDg4MDB9LAorCS8qNDkwICAqLyB7MHgwMDE2LCAweDg4MDF9LAorCS8qNDkxICAqLyB7MHgwMDAwLCAweDg4MDB9LAorCS8qNDkzICAqLyB7MHgwMDE3LCAweDg4MDF9LAorCS8qNDk0ICAqLyB7MHgwMDIwLCAweDg4MDB9LAorCS8qNDk2ICAqLyB7MHgwMDE4LCAweDg4MDF9LAorCS8qNDk3ICAqLyB7MHgwMDQ0LCAweDg4MDB9LAorCisvKiBNYWtlcyB0aGUgcGljdHVyZSBkYXJrZXIgLSBhbmQgdGhlCisgKiBjYW0gd29uJ3Qgc3RhcnQgaWYgbm90IGluY2x1ZGVkCisgKi8KKwkvKjUwNSAgKi8gezB4MDAxZSwgMHg4ODAxfSwKKwkvKjUwNiAgKi8gezB4MDBlYSwgMHg4ODAwfSwKKwkvKjUwOCAgKi8gezB4MDAxZiwgMHg4ODAxfSwKKwkvKjUwOSAgKi8gezB4MDAwMSwgMHg4ODAwfSwKKwkvKjUxMSAgKi8gezB4MDAwMywgMHg4ODAxfSwKKwkvKjUxMiAgKi8gezB4MDBlMCwgMHg4ODAwfSwKKworLyogc2VlbXMgdG8gcGxhY2UgdGhlIGNvbG9ycyBvbnRvcCBvZiBlYWNoIG90aGVyICMxICovCisJLyo1MTcgICovIHsweDAwMDYsIDB4ODcwNH0sCisJLyo1MTggICovIHsweDAwMDEsIDB4ODcwY30sCisJLyo1MTkgICovIHsweDAwMTYsIDB4ODYwMH0sCisJLyo1MjAgICovIHsweDAwMDIsIDB4ODYwNn0sCisKKy8qIGlmIG5vdCBpbmNsdWRlZCB0aGUgcGljdHVyZXMgYmVjb21lcyBfdmVyeV8gZGFyayAqLworCS8qNTIxICAqLyB7MHgwMDY0LCAweDg2MDd9LAorCS8qNTIyICAqLyB7MHgwMDNhLCAweDg2MDF9LAorCS8qNTIzICAqLyB7MHgwMDAwLCAweDg2MDJ9LAorCisvKiBzZWVtcyB0byBwbGFjZSB0aGUgY29sb3JzIG9udG9wIG9mIGVhY2ggb3RoZXIgIzIgKi8KKwkvKjUyNCAgKi8gezB4MDAxNiwgMHg4NjAwfSwKKwkvKjUyNSAgKi8gezB4MDAxOCwgMHg4NjE3fSwKKwkvKjUyNiAgKi8gezB4MDAwOCwgMHg4NjE4fSwKKwkvKjUyNyAgKi8gezB4MDBhMSwgMHg4NjU2fSwKKworLyogd2ViY2FtIHdvbid0IHN0YXJ0IGlmIG5vdCBpbmNsdWRlZCAqLworCS8qNTI4ICAqLyB7MHgwMDA3LCAweDg2NWJ9LAorCS8qNTI5ICAqLyB7MHgwMDAxLCAweDg2NWN9LAorCS8qNTMwICAqLyB7MHgwMDU4LCAweDg2NWR9LAorCS8qNTMxICAqLyB7MHgwMDQ4LCAweDg2NWV9LAorCisvKiBhZGp1c3RzIHRoZSBjb2xvcnMgKi8KKwkvKjU0MSAgKi8gezB4MDA0OSwgMHg4NjUxfSwKKwkvKjU0MiAgKi8gezB4MDA0MCwgMHg4NjUyfSwKKwkvKjU0MyAgKi8gezB4MDA0YywgMHg4NjUzfSwKKwkvKjU0NCAgKi8gezB4MDA0MCwgMHg4NjU0fSwKKwl7fQorfTsKKworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhfc2lnaHRjYW0yX2luaXRfZGF0YVtdWzNdID0geworLyogMzUgKi8gezB4MDAyMCwgMHg4MTEyfSwKKworLyogMzYgKi8gezB4MDAwZiwgMHg4NDAyfSwKKy8qIDM3ICovIHsweDAwMDAsIDB4ODQwM30sCisKKy8qIDM4ICovIHsweDAwMDgsIDB4ODIwMX0sCisvKiAzOSAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogNDAgKi8gezB4MDAwMSwgMHg4MjAwfSwKKy8qIDQzICovIHsweDAwMDksIDB4ODIwMX0sCisvKiA0NCAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogNDUgKi8gezB4MDAwMSwgMHg4MjAwfSwKKy8qIDQ4ICovIHsweDAwMGEsIDB4ODIwMX0sCisvKiA0OSAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogNTAgKi8gezB4MDAwMSwgMHg4MjAwfSwKKy8qIDUzICovIHsweDAwMGIsIDB4ODIwMX0sCisvKiA1NCAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogNTUgKi8gezB4MDAwMSwgMHg4MjAwfSwKKy8qIDU4ICovIHsweDAwMGMsIDB4ODIwMX0sCisvKiA1OSAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogNjAgKi8gezB4MDAwMSwgMHg4MjAwfSwKKy8qIDYzICovIHsweDAwMGQsIDB4ODIwMX0sCisvKiA2NCAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogNjUgKi8gezB4MDAwMSwgMHg4MjAwfSwKKy8qIDY4ICovIHsweDAwMGUsIDB4ODIwMX0sCisvKiA2OSAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogNzAgKi8gezB4MDAwMSwgMHg4MjAwfSwKKy8qIDczICovIHsweDAwMDcsIDB4ODIwMX0sCisvKiA3NCAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogNzUgKi8gezB4MDAwMSwgMHg4MjAwfSwKKy8qIDc4ICovIHsweDAwMGYsIDB4ODIwMX0sCisvKiA3OSAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogODAgKi8gezB4MDAwMSwgMHg4MjAwfSwKKworLyogODQgKi8gezB4MDAxOCwgMHg4NjYwfSwKKy8qIDg1ICovIHsweDAwMTAsIDB4ODIwMX0sCisKKy8qIDg2ICovIHsweDAwMDgsIDB4ODIwMH0sCisvKiA4NyAqLyB7MHgwMDAxLCAweDgyMDB9LAorLyogOTAgKi8gezB4MDAxMSwgMHg4MjAxfSwKKy8qIDkxICovIHsweDAwMDgsIDB4ODIwMH0sCisvKiA5MiAqLyB7MHgwMDAxLCAweDgyMDB9LAorCisvKiA5NSAqLyB7MHgwMDAwLCAweDg2YjB9LAorLyogOTYgKi8gezB4MDAzNCwgMHg4NmIxfSwKKy8qIDk3ICovIHsweDAwMDAsIDB4ODZiMn0sCisvKiA5OCAqLyB7MHgwMDQ5LCAweDg2YjN9LAorLyogOTkgKi8gezB4MDAwMCwgMHg4NmI0fSwKKy8qIDEwMCAqLyB7MHgwMDAwLCAweDg2YjR9LAorCisvKiAxMDEgKi8gezB4MDAxMiwgMHg4MjAxfSwKKy8qIDEwMiAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogMTAzICovIHsweDAwMDEsIDB4ODIwMH0sCisvKiAxMDYgKi8gezB4MDAxMywgMHg4MjAxfSwKKy8qIDEwNyAqLyB7MHgwMDA4LCAweDgyMDB9LAorLyogMTA4ICovIHsweDAwMDEsIDB4ODIwMH0sCisKKy8qIDExMSAqLyB7MHgwMDAxLCAweDg2YjB9LAorLyogMTEyICovIHsweDAwYWEsIDB4ODZiMX0sCisvKiAxMTMgKi8gezB4MDAwMCwgMHg4NmIyfSwKKy8qIDExNCAqLyB7MHgwMGU0LCAweDg2YjN9LAorLyogMTE1ICovIHsweDAwMDAsIDB4ODZiNH0sCisvKiAxMTYgKi8gezB4MDAwMCwgMHg4NmI0fSwKKworLyogMTE4ICovIHsweDAwMTgsIDB4ODY2MH0sCisKKy8qIDExOSAqLyB7MHgwMDkwLCAweDgxMTB9LAorLyogMTIwICovIHsweDAwMDEsIDB4ODExNH0sCisvKiAxMjEgKi8gezB4MDAwMSwgMHg4MTE0fSwKKy8qIDEyMiAqLyB7MHgwMDAxLCAweDgxMTR9LAorLyogMTIzICovIHsweDAwMDMsIDB4ODExNH0sCisKKy8qIDEyNCAqLyB7MHgwMDgwLCAweDg4MDR9LAorLyogMTU3ICovIHsweDAwMDMsIDB4ODgwMX0sCisvKiAxNTggKi8gezB4MDAxMiwgMHg4ODAwfSwKKy8qIDE2MCAqLyB7MHgwMDA0LCAweDg4MDF9LAorLyogMTYxICovIHsweDAwMDUsIDB4ODgwMH0sCisvKiAxNjMgKi8gezB4MDAwNSwgMHg4ODAxfSwKKy8qIDE2NCAqLyB7MHgwMDAwLCAweDg4MDB9LAorLyogMTY2ICovIHsweDAwMDYsIDB4ODgwMX0sCisvKiAxNjcgKi8gezB4MDAwMCwgMHg4ODAwfSwKKy8qIDE2OSAqLyB7MHgwMDA3LCAweDg4MDF9LAorLyogMTcwICovIHsweDAwMDAsIDB4ODgwMH0sCisvKiAxNzIgKi8gezB4MDAwOCwgMHg4ODAxfSwKKy8qIDE3MyAqLyB7MHgwMDA1LCAweDg4MDB9LAorLyogMTc1ICovIHsweDAwMGEsIDB4ODcwMH0sCisvKiAxNzYgKi8gezB4MDAwZSwgMHg4ODAxfSwKKy8qIDE3NyAqLyB7MHgwMDA0LCAweDg4MDB9LAorLyogMTc5ICovIHsweDAwMDUsIDB4ODgwMX0sCisvKiAxODAgKi8gezB4MDA0NywgMHg4ODAwfSwKKy8qIDE4MiAqLyB7MHgwMDA2LCAweDg4MDF9LAorLyogMTgzICovIHsweDAwMDAsIDB4ODgwMH0sCisvKiAxODUgKi8gezB4MDAwNywgMHg4ODAxfSwKKy8qIDE4NiAqLyB7MHgwMGMwLCAweDg4MDB9LAorLyogMTg4ICovIHsweDAwMDgsIDB4ODgwMX0sCisvKiAxODkgKi8gezB4MDAwMywgMHg4ODAwfSwKKy8qIDE5MSAqLyB7MHgwMDEzLCAweDg4MDF9LAorLyogMTkyICovIHsweDAwMDEsIDB4ODgwMH0sCisvKiAxOTQgKi8gezB4MDAwOSwgMHg4ODAxfSwKKy8qIDE5NSAqLyB7MHgwMDAwLCAweDg4MDB9LAorLyogMTk3ICovIHsweDAwMGEsIDB4ODgwMX0sCisvKiAxOTggKi8gezB4MDAwMCwgMHg4ODAwfSwKKy8qIDIwMCAqLyB7MHgwMDBiLCAweDg4MDF9LAorLyogMjAxICovIHsweDAwMDAsIDB4ODgwMH0sCisvKiAyMDMgKi8gezB4MDAwYywgMHg4ODAxfSwKKy8qIDIwNCAqLyB7MHgwMDAwLCAweDg4MDB9LAorLyogMjA2ICovIHsweDAwMGUsIDB4ODgwMX0sCisvKiAyMDcgKi8gezB4MDAwNCwgMHg4ODAwfSwKKy8qIDIwOSAqLyB7MHgwMDBmLCAweDg4MDF9LAorLyogMjEwICovIHsweDAwMDAsIDB4ODgwMH0sCisvKiAyMTIgKi8gezB4MDAxMCwgMHg4ODAxfSwKKy8qIDIxMyAqLyB7MHgwMDA2LCAweDg4MDB9LAorLyogMjE1ICovIHsweDAwMTEsIDB4ODgwMX0sCisvKiAyMTYgKi8gezB4MDAwNiwgMHg4ODAwfSwKKy8qIDIxOCAqLyB7MHgwMDEyLCAweDg4MDF9LAorLyogMjE5ICovIHsweDAwMDAsIDB4ODgwMH0sCisvKiAyMjEgKi8gezB4MDAxMywgMHg4ODAxfSwKKy8qIDIyMiAqLyB7MHgwMDAxLCAweDg4MDB9LAorCisvKiAyMjQgKi8gezB4MDAwYSwgMHg4NzAwfSwKKy8qIDIyNSAqLyB7MHgwMDAwLCAweDg3MDJ9LAorLyogMjI2ICovIHsweDAwMDAsIDB4ODcwM30sCisvKiAyMjcgKi8gezB4MDBjMiwgMHg4NzA0fSwKKy8qIDIyOCAqLyB7MHgwMDAxLCAweDg3MGN9LAorCisvKiAyMjkgKi8gezB4MDA0NCwgMHg4NjAwfSwKKy8qIDIzMCAqLyB7MHgwMDAyLCAweDg2MDZ9LAorLyogMjMxICovIHsweDAwNjQsIDB4ODYwN30sCisvKiAyMzIgKi8gezB4MDAzYSwgMHg4NjAxfSwKKy8qIDIzMyAqLyB7MHgwMDA4LCAweDg2MDJ9LAorLyogMjM0ICovIHsweDAwNDQsIDB4ODYwMH0sCisvKiAyMzUgKi8gezB4MDAxOCwgMHg4NjE3fSwKKy8qIDIzNiAqLyB7MHgwMDA4LCAweDg2MTh9LAorLyogMjM3ICovIHsweDAwYTEsIDB4ODY1Nn0sCisvKiAyMzggKi8gezB4MDAwNCwgMHg4NjVifSwKKy8qIDIzOSAqLyB7MHgwMDAyLCAweDg2NWN9LAorLyogMjQwICovIHsweDAwNTgsIDB4ODY1ZH0sCisvKiAyNDEgKi8gezB4MDA0OCwgMHg4NjVlfSwKKy8qIDI0MiAqLyB7MHgwMDEyLCAweDg2MDh9LAorLyogMjQzICovIHsweDAwMmMsIDB4ODYwOX0sCisvKiAyNDQgKi8gezB4MDAwMiwgMHg4NjBhfSwKKy8qIDI0NSAqLyB7MHgwMDJjLCAweDg2MGJ9LAorLyogMjQ2ICovIHsweDAwZGIsIDB4ODYwY30sCisvKiAyNDcgKi8gezB4MDBmOSwgMHg4NjBkfSwKKy8qIDI0OCAqLyB7MHgwMGYxLCAweDg2MGV9LAorLyogMjQ5ICovIHsweDAwZTMsIDB4ODYwZn0sCisvKiAyNTAgKi8gezB4MDAyYywgMHg4NjEwfSwKKy8qIDI1MSAqLyB7MHgwMDZjLCAweDg2NTF9LAorLyogMjUyICovIHsweDAwNDEsIDB4ODY1Mn0sCisvKiAyNTMgKi8gezB4MDA1OSwgMHg4NjUzfSwKKy8qIDI1NCAqLyB7MHgwMDQwLCAweDg2NTR9LAorLyogMjU1ICovIHsweDAwZmEsIDB4ODYxMX0sCisvKiAyNTYgKi8gezB4MDBmZiwgMHg4NjEyfSwKKy8qIDI1NyAqLyB7MHgwMGY4LCAweDg2MTN9LAorLyogMjU4ICovIHsweDAwMDAsIDB4ODYxNH0sCisvKiAyNTkgKi8gezB4MDAwMSwgMHg4NjNmfSwKKy8qIDI2MCAqLyB7MHgwMDAwLCAweDg2NDB9LAorLyogMjYxICovIHsweDAwMjYsIDB4ODY0MX0sCisvKiAyNjIgKi8gezB4MDA0NSwgMHg4NjQyfSwKKy8qIDI2MyAqLyB7MHgwMDYwLCAweDg2NDN9LAorLyogMjY0ICovIHsweDAwNzUsIDB4ODY0NH0sCisvKiAyNjUgKi8gezB4MDA4OCwgMHg4NjQ1fSwKKy8qIDI2NiAqLyB7MHgwMDliLCAweDg2NDZ9LAorLyogMjY3ICovIHsweDAwYjAsIDB4ODY0N30sCisvKiAyNjggKi8gezB4MDBjNSwgMHg4NjQ4fSwKKy8qIDI2OSAqLyB7MHgwMGQyLCAweDg2NDl9LAorLyogMjcwICovIHsweDAwZGMsIDB4ODY0YX0sCisvKiAyNzEgKi8gezB4MDBlNSwgMHg4NjRifSwKKy8qIDI3MiAqLyB7MHgwMGViLCAweDg2NGN9LAorLyogMjczICovIHsweDAwZjAsIDB4ODY0ZH0sCisvKiAyNzQgKi8gezB4MDBmNiwgMHg4NjRlfSwKKy8qIDI3NSAqLyB7MHgwMGZhLCAweDg2NGZ9LAorLyogMjc2ICovIHsweDAwZmYsIDB4ODY1MH0sCisvKiAyNzcgKi8gezB4MDA2MCwgMHg4NjU3fSwKKy8qIDI3OCAqLyB7MHgwMDEwLCAweDg2NTh9LAorLyogMjc5ICovIHsweDAwMTgsIDB4ODY1OX0sCisvKiAyODAgKi8gezB4MDAwNSwgMHg4NjVhfSwKKy8qIDI4MSAqLyB7MHgwMDE4LCAweDg2NjB9LAorLyogMjgyICovIHsweDAwMDMsIDB4ODUwOX0sCisvKiAyODMgKi8gezB4MDAxMSwgMHg4NTBhfSwKKy8qIDI4NCAqLyB7MHgwMDMyLCAweDg1MGJ9LAorLyogMjg1ICovIHsweDAwMTAsIDB4ODUwY30sCisvKiAyODYgKi8gezB4MDAyMSwgMHg4NTBkfSwKKy8qIDI4NyAqLyB7MHgwMDAxLCAweDg1MDB9LAorLyogMjg4ICovIHsweDAwMDAsIDB4ODUwOH0sCisvKiAyODkgKi8gezB4MDAxMiwgMHg4NjA4fSwKKy8qIDI5MCAqLyB7MHgwMDJjLCAweDg2MDl9LAorLyogMjkxICovIHsweDAwMDIsIDB4ODYwYX0sCisvKiAyOTIgKi8gezB4MDAzOSwgMHg4NjBifSwKKy8qIDI5MyAqLyB7MHgwMGQwLCAweDg2MGN9LAorLyogMjk0ICovIHsweDAwZjcsIDB4ODYwZH0sCisvKiAyOTUgKi8gezB4MDBlZCwgMHg4NjBlfSwKKy8qIDI5NiAqLyB7MHgwMGRiLCAweDg2MGZ9LAorLyogMjk3ICovIHsweDAwMzksIDB4ODYxMH0sCisvKiAyOTggKi8gezB4MDAxMiwgMHg4NjU3fSwKKy8qIDI5OSAqLyB7MHgwMDBjLCAweDg2MTl9LAorLyogMzAwICovIHsweDAwMDQsIDB4ODYxYX0sCisvKiAzMDEgKi8gezB4MDBhMSwgMHg4NjU2fSwKKy8qIDMwMiAqLyB7MHgwMGM4LCAweDg2MTV9LAorLyogMzAzICovIHsweDAwMzIsIDB4ODYxNn0sCisKKy8qIDMwNiAqLyB7MHgwMDMwLCAweDgxMTJ9LAorLyogMzEzICovIHsweDAwMjAsIDB4ODExMn0sCisvKiAzMTQgKi8gezB4MDAyMCwgMHg4MTEyfSwKKy8qIDMxNSAqLyB7MHgwMDBmLCAweDg0MDJ9LAorLyogMzE2ICovIHsweDAwMDAsIDB4ODQwM30sCisKKy8qIDMxNyAqLyB7MHgwMDkwLCAweDgxMTB9LAorLyogMzE4ICovIHsweDAwMDEsIDB4ODExNH0sCisvKiAzMTkgKi8gezB4MDAwMSwgMHg4MTE0fSwKKy8qIDMyMCAqLyB7MHgwMDAxLCAweDgxMTR9LAorLyogMzIxICovIHsweDAwMDMsIDB4ODExNH0sCisvKiAzMjIgKi8gezB4MDA4MCwgMHg4ODA0fSwKKworLyogMzU1ICovIHsweDAwMDMsIDB4ODgwMX0sCisvKiAzNTYgKi8gezB4MDAxMiwgMHg4ODAwfSwKKy8qIDM1OCAqLyB7MHgwMDA0LCAweDg4MDF9LAorLyogMzU5ICovIHsweDAwMDUsIDB4ODgwMH0sCisvKiAzNjEgKi8gezB4MDAwNSwgMHg4ODAxfSwKKy8qIDM2MiAqLyB7MHgwMDQ3LCAweDg4MDB9LAorLyogMzY0ICovIHsweDAwMDYsIDB4ODgwMX0sCisvKiAzNjUgKi8gezB4MDAwMCwgMHg4ODAwfSwKKy8qIDM2NyAqLyB7MHgwMDA3LCAweDg4MDF9LAorLyogMzY4ICovIHsweDAwYzAsIDB4ODgwMH0sCisvKiAzNzAgKi8gezB4MDAwOCwgMHg4ODAxfSwKKy8qIDM3MSAqLyB7MHgwMDAzLCAweDg4MDB9LAorLyogMzczICovIHsweDAwMGEsIDB4ODcwMH0sCisvKiAzNzQgKi8gezB4MDAwZSwgMHg4ODAxfSwKKy8qIDM3NSAqLyB7MHgwMDA0LCAweDg4MDB9LAorLyogMzc3ICovIHsweDAwMDUsIDB4ODgwMX0sCisvKiAzNzggKi8gezB4MDA0NywgMHg4ODAwfSwKKy8qIDM4MCAqLyB7MHgwMDA2LCAweDg4MDF9LAorLyogMzgxICovIHsweDAwMDAsIDB4ODgwMH0sCisvKiAzODMgKi8gezB4MDAwNywgMHg4ODAxfSwKKy8qIDM4NCAqLyB7MHgwMGMwLCAweDg4MDB9LAorLyogMzg2ICovIHsweDAwMDgsIDB4ODgwMX0sCisvKiAzODcgKi8gezB4MDAwMywgMHg4ODAwfSwKKy8qIDM4OSAqLyB7MHgwMDEzLCAweDg4MDF9LAorLyogMzkwICovIHsweDAwMDEsIDB4ODgwMH0sCisvKiAzOTIgKi8gezB4MDAwOSwgMHg4ODAxfSwKKy8qIDM5MyAqLyB7MHgwMDAwLCAweDg4MDB9LAorLyogMzk1ICovIHsweDAwMGEsIDB4ODgwMX0sCisvKiAzOTYgKi8gezB4MDAwMCwgMHg4ODAwfSwKKy8qIDM5OCAqLyB7MHgwMDBiLCAweDg4MDF9LAorLyogMzk5ICovIHsweDAwMDAsIDB4ODgwMH0sCisvKiA0MDEgKi8gezB4MDAwYywgMHg4ODAxfSwKKy8qIDQwMiAqLyB7MHgwMDAwLCAweDg4MDB9LAorLyogNDA0ICovIHsweDAwMGUsIDB4ODgwMX0sCisvKiA0MDUgKi8gezB4MDAwNCwgMHg4ODAwfSwKKy8qIDQwNyAqLyB7MHgwMDBmLCAweDg4MDF9LAorLyogNDA4ICovIHsweDAwMDAsIDB4ODgwMH0sCisvKiA0MTAgKi8gezB4MDAxMCwgMHg4ODAxfSwKKy8qIDQxMSAqLyB7MHgwMDA2LCAweDg4MDB9LAorLyogNDEzICovIHsweDAwMTEsIDB4ODgwMX0sCisvKiA0MTQgKi8gezB4MDAwNiwgMHg4ODAwfSwKKy8qIDQxNiAqLyB7MHgwMDEyLCAweDg4MDF9LAorLyogNDE3ICovIHsweDAwMDAsIDB4ODgwMH0sCisvKiA0MTkgKi8gezB4MDAxMywgMHg4ODAxfSwKKy8qIDQyMCAqLyB7MHgwMDAxLCAweDg4MDB9LAorLyogNDIyICovIHsweDAwMGEsIDB4ODcwMH0sCisvKiA0MjMgKi8gezB4MDAwMCwgMHg4NzAyfSwKKy8qIDQyNCAqLyB7MHgwMDAwLCAweDg3MDN9LAorLyogNDI1ICovIHsweDAwYzIsIDB4ODcwNH0sCisvKiA0MjYgKi8gezB4MDAwMSwgMHg4NzBjfSwKKy8qIDQyNyAqLyB7MHgwMDQ0LCAweDg2MDB9LAorLyogNDI4ICovIHsweDAwMDIsIDB4ODYwNn0sCisvKiA0MjkgKi8gezB4MDA2NCwgMHg4NjA3fSwKKy8qIDQzMCAqLyB7MHgwMDNhLCAweDg2MDF9LAorLyogNDMxICovIHsweDAwMDgsIDB4ODYwMn0sCisvKiA0MzIgKi8gezB4MDA0NCwgMHg4NjAwfSwKKy8qIDQzMyAqLyB7MHgwMDE4LCAweDg2MTd9LAorLyogNDM0ICovIHsweDAwMDgsIDB4ODYxOH0sCisvKiA0MzUgKi8gezB4MDBhMSwgMHg4NjU2fSwKKy8qIDQzNiAqLyB7MHgwMDA0LCAweDg2NWJ9LAorLyogNDM3ICovIHsweDAwMDIsIDB4ODY1Y30sCisvKiA0MzggKi8gezB4MDA1OCwgMHg4NjVkfSwKKy8qIDQzOSAqLyB7MHgwMDQ4LCAweDg2NWV9LAorLyogNDQwICovIHsweDAwMTIsIDB4ODYwOH0sCisvKiA0NDEgKi8gezB4MDAyYywgMHg4NjA5fSwKKy8qIDQ0MiAqLyB7MHgwMDAyLCAweDg2MGF9LAorLyogNDQzICovIHsweDAwMmMsIDB4ODYwYn0sCisvKiA0NDQgKi8gezB4MDBkYiwgMHg4NjBjfSwKKy8qIDQ0NSAqLyB7MHgwMGY5LCAweDg2MGR9LAorLyogNDQ2ICovIHsweDAwZjEsIDB4ODYwZX0sCisvKiA0NDcgKi8gezB4MDBlMywgMHg4NjBmfSwKKy8qIDQ0OCAqLyB7MHgwMDJjLCAweDg2MTB9LAorLyogNDQ5ICovIHsweDAwNmMsIDB4ODY1MX0sCisvKiA0NTAgKi8gezB4MDA0MSwgMHg4NjUyfSwKKy8qIDQ1MSAqLyB7MHgwMDU5LCAweDg2NTN9LAorLyogNDUyICovIHsweDAwNDAsIDB4ODY1NH0sCisvKiA0NTMgKi8gezB4MDBmYSwgMHg4NjExfSwKKy8qIDQ1NCAqLyB7MHgwMGZmLCAweDg2MTJ9LAorLyogNDU1ICovIHsweDAwZjgsIDB4ODYxM30sCisvKiA0NTYgKi8gezB4MDAwMCwgMHg4NjE0fSwKKy8qIDQ1NyAqLyB7MHgwMDAxLCAweDg2M2Z9LAorLyogNDU4ICovIHsweDAwMDAsIDB4ODY0MH0sCisvKiA0NTkgKi8gezB4MDAyNiwgMHg4NjQxfSwKKy8qIDQ2MCAqLyB7MHgwMDQ1LCAweDg2NDJ9LAorLyogNDYxICovIHsweDAwNjAsIDB4ODY0M30sCisvKiA0NjIgKi8gezB4MDA3NSwgMHg4NjQ0fSwKKy8qIDQ2MyAqLyB7MHgwMDg4LCAweDg2NDV9LAorLyogNDY0ICovIHsweDAwOWIsIDB4ODY0Nn0sCisvKiA0NjUgKi8gezB4MDBiMCwgMHg4NjQ3fSwKKy8qIDQ2NiAqLyB7MHgwMGM1LCAweDg2NDh9LAorLyogNDY3ICovIHsweDAwZDIsIDB4ODY0OX0sCisvKiA0NjggKi8gezB4MDBkYywgMHg4NjRhfSwKKy8qIDQ2OSAqLyB7MHgwMGU1LCAweDg2NGJ9LAorLyogNDcwICovIHsweDAwZWIsIDB4ODY0Y30sCisvKiA0NzEgKi8gezB4MDBmMCwgMHg4NjRkfSwKKy8qIDQ3MiAqLyB7MHgwMGY2LCAweDg2NGV9LAorLyogNDczICovIHsweDAwZmEsIDB4ODY0Zn0sCisvKiA0NzQgKi8gezB4MDBmZiwgMHg4NjUwfSwKKy8qIDQ3NSAqLyB7MHgwMDYwLCAweDg2NTd9LAorLyogNDc2ICovIHsweDAwMTAsIDB4ODY1OH0sCisvKiA0NzcgKi8gezB4MDAxOCwgMHg4NjU5fSwKKy8qIDQ3OCAqLyB7MHgwMDA1LCAweDg2NWF9LAorLyogNDc5ICovIHsweDAwMTgsIDB4ODY2MH0sCisvKiA0ODAgKi8gezB4MDAwMywgMHg4NTA5fSwKKy8qIDQ4MSAqLyB7MHgwMDExLCAweDg1MGF9LAorLyogNDgyICovIHsweDAwMzIsIDB4ODUwYn0sCisvKiA0ODMgKi8gezB4MDAxMCwgMHg4NTBjfSwKKy8qIDQ4NCAqLyB7MHgwMDIxLCAweDg1MGR9LAorLyogNDg1ICovIHsweDAwMDEsIDB4ODUwMH0sCisvKiA0ODYgKi8gezB4MDAwMCwgMHg4NTA4fSwKKworLyogNDg3ICovIHsweDAwMTIsIDB4ODYwOH0sCisvKiA0ODggKi8gezB4MDAyYywgMHg4NjA5fSwKKy8qIDQ4OSAqLyB7MHgwMDAyLCAweDg2MGF9LAorLyogNDkwICovIHsweDAwMzksIDB4ODYwYn0sCisvKiA0OTEgKi8gezB4MDBkMCwgMHg4NjBjfSwKKy8qIDQ5MiAqLyB7MHgwMGY3LCAweDg2MGR9LAorLyogNDkzICovIHsweDAwZWQsIDB4ODYwZX0sCisvKiA0OTQgKi8gezB4MDBkYiwgMHg4NjBmfSwKKy8qIDQ5NSAqLyB7MHgwMDM5LCAweDg2MTB9LAorLyogNDk2ICovIHsweDAwMTIsIDB4ODY1N30sCisvKiA0OTcgKi8gezB4MDA2NCwgMHg4NjE5fSwKKworLyogVGhpcyBsaW5lIHN0YXJ0cyBpdCBhbGwsIGl0IGlzIG5vdCBuZWVkZWQgaGVyZSAqLworLyogc2luY2UgaXQgaGFzIGJlZW4gYnVpbGQgaW50byB0aGUgZHJpdmVyICovCisvKiBqZm06IGRvbid0IHN0YXJ0IG5vdyAqLworLyogNTkwICAqICB7MHgwMDMwLCAweDgxMTJ9LCAqLworCXt9Cit9OworCisvKgorICogSW5pdGlhbGl6YXRpb24gZGF0YSBmb3IgQ3JlYXRpdmUgV2ViY2FtIFZpc3RhCisgKi8KK3N0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA4X3Zpc3RhX2luaXRfZGF0YVtdWzNdID0geworCXsweDAwMDgsIDB4ODIwMH0sCS8qIENsZWFyIHJlZ2lzdGVyICovCisJezB4MDAwMCwgMHg4NzBifSwJLyogUmVzZXQgQ1RMMyAqLworCXsweDAwMjAsIDB4ODExMn0sCS8qIFZpZGVvIERyb3AgcGFja2V0IGVuYWJsZSAqLworCXsweDAwMDMsIDB4ODExMX0sICAvKiBTb2Z0IFJlc2V0IGNvbXByZXNzaW9uLCBtZW1vcnksIFRHICYgQ0RTUCAqLworCXsweDAwMDAsIDB4ODExMH0sCS8qIERpc2FibGUgZXZlcnl0aGluZyAqLworCXsweDAwMDAsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KKwl7MHgwMDAwLCAweDgxMTR9LAorCisJezB4MDAwMywgMHg4MTExfSwKKwl7MHgwMDAwLCAweDgxMTF9LAorCXsweDAwOTAsIDB4ODExMH0sICAvKiBFbmFibGU6IFNTSSBvdXRwdXQsIEV4dGVybmFsIDJYIGNsb2NrIG91dHB1dCAqLworCXsweDAwMjAsIDB4ODExMn0sCisJezB4MDAwMCwgMHg4MTE0fSwKKwl7MHgwMDAxLCAweDgxMTR9LAorCXsweDAwMDEsIDB4ODExNH0sCisJezB4MDAwMSwgMHg4MTE0fSwKKwl7MHgwMDAzLCAweDgxMTR9LAorCisJezB4MDAwZiwgMHg4NDAyfSwJLyogTWVtb3J5IGJhbmsgQWRkcmVzcyAqLworCXsweDAwMDAsIDB4ODQwM30sCS8qIE1lbW9yeSBiYW5rIEFkZHJlc3MgKi8KKwl7MHgwMGJhLCAweDg4MDR9LAkvKiBTU0kgU2xhdmUgYWRkcmVzcyAqLworCXsweDAwMTAsIDB4ODgwMn0sCS8qIDkzLjc1a0h6IFNTSSBDbG9jayBUd28gRGF0YUJ5dGUgKi8KKworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+CisJCTAwMDA6IDEwICAqLworCXsweDAwMTAsIDB4ODgwMn0sCS8qIFdpbGwgd3JpdGUgMiBieXRlcyAoREFUQTErREFUQTIpICovCisJezB4MDAyMCwgMHg4ODAxfSwJLyogUmVnaXN0ZXIgYWRkcmVzcyBmb3IgU1NJIHJlYWQvd3JpdGUgKi8KKwl7MHgwMDQ0LCAweDg4MDV9LAkvKiBEQVRBMiAqLworCXsweDAwMDQsIDB4ODgwMH0sCS8qIERBVEExIC0+IHdyaXRlIHRyaWdnZXJlZCAqLworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4KKwkJMDAwMDogMTAgICovCisJezB4MDAxMCwgMHg4ODAyfSwKKwl7MHgwMDA5LCAweDg4MDF9LAorCXsweDAwNDIsIDB4ODgwNX0sCisJezB4MDAwMSwgMHg4ODAwfSwKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+CisJCTAwMDA6IDEwICAqLworCXsweDAwMTAsIDB4ODgwMn0sCisJezB4MDAzYywgMHg4ODAxfSwKKwl7MHgwMDAxLCAweDg4MDV9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPgorCQkwMDAwOiAxMCAgKi8KKwl7MHgwMDEwLCAweDg4MDJ9LAorCXsweDAwMDEsIDB4ODgwMX0sCisJezB4MDAwYSwgMHg4ODA1fSwKKwl7MHgwMDAwLCAweDg4MDB9LAorCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4KKwkJMDAwMDogMTAgICovCisJezB4MDAxMCwgMHg4ODAyfSwKKwl7MHgwMDAyLCAweDg4MDF9LAorCXsweDAwMDAsIDB4ODgwNX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+CisJCTAwMDA6IDEwICAqLworCXsweDAwMTAsIDB4ODgwMn0sCisJezB4MDAwMywgMHg4ODAxfSwKKwl7MHgwMDI3LCAweDg4MDV9LAorCXsweDAwMDEsIDB4ODgwMH0sCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPgorCQkwMDAwOiAxMCAgKi8KKwl7MHgwMDEwLCAweDg4MDJ9LAorCXsweDAwMDQsIDB4ODgwMX0sCisJezB4MDA2NSwgMHg4ODA1fSwKKwl7MHgwMDAxLCAweDg4MDB9LAorCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4KKwkJMDAwMDogMTAgICovCisJezB4MDAxMCwgMHg4ODAyfSwKKwl7MHgwMDA1LCAweDg4MDF9LAorCXsweDAwMDMsIDB4ODgwNX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+CisJCTAwMDA6IDEwICAqLworCXsweDAwMTAsIDB4ODgwMn0sCisJezB4MDAwNiwgMHg4ODAxfSwKKwl7MHgwMDFjLCAweDg4MDV9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPgorCQkwMDAwOiAxMCAgKi8KKwl7MHgwMDEwLCAweDg4MDJ9LAorCXsweDAwMDcsIDB4ODgwMX0sCisJezB4MDAyYSwgMHg4ODA1fSwKKwl7MHgwMDAwLCAweDg4MDB9LAorCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4KKwkJMDAwMDogMTAgICovCisJezB4MDAxMCwgMHg4ODAyfSwKKwl7MHgwMDBlLCAweDg4MDF9LAorCXsweDAwMDAsIDB4ODgwNX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+CisJCTAwMDA6IDEwICAqLworCXsweDAwMTAsIDB4ODgwMn0sCisJezB4MDAyOCwgMHg4ODAxfSwKKwl7MHgwMDJlLCAweDg4MDV9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPgorCQkwMDAwOiAxMCAgKi8KKwl7MHgwMDEwLCAweDg4MDJ9LAorCXsweDAwMzksIDB4ODgwMX0sCisJezB4MDAxMywgMHg4ODA1fSwKKwl7MHgwMDAwLCAweDg4MDB9LAorCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAyIH0gLT4KKwkJMDAwMDogMTAgICovCisJezB4MDAxMCwgMHg4ODAyfSwKKwl7MHgwMDNiLCAweDg4MDF9LAorCXsweDAwMGMsIDB4ODgwNX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMiB9IC0+CisJCTAwMDA6IDEwICAqLworCXsweDAwMTAsIDB4ODgwMn0sCisJezB4MDAzNSwgMHg4ODAxfSwKKwl7MHgwMDI4LCAweDg4MDV9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJLyogUkVBRCB7IDAsIDB4MDAwMSwgMHg4ODAzIH0gLT4KKwkJMDAwMDogMDAgICovCisKKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDMgfSAtPgorCQkwMDAwOiAwMCAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAxLCAweDg4MDIgfSAtPgorCQkwMDAwOiAxMCAgKi8KKwl7MHgwMDEwLCAweDg4MDJ9LAorCXsweDAwMDksIDB4ODgwMX0sCisJezB4MDA0MiwgMHg4ODA1fSwKKwl7MHgwMDAxLCAweDg4MDB9LAorCS8qIFJFQUQgeyAwLCAweDAwMDEsIDB4ODgwMyB9IC0+CisJCTAwMDA6IDAwICAqLworCisJezB4MDA1MCwgMHg4NzAzfSwKKwl7MHgwMDAyLCAweDg3MDR9LAkvKiBFeHRlcm5hbCBpbnB1dCBDS0l4MSAqLworCXsweDAwMDEsIDB4ODcwQ30sCS8qIFNlbGVjdCBDS094MiBvdXRwdXQgKi8KKwl7MHgwMDlBLCAweDg2MDB9LAkvKiBMaW5lIG1lbW9yeSBSZWFkIENvdW50ZXIgKEwpICovCisJezB4MDAwMSwgMHg4NjA2fSwgIC8qIDEgTGluZSBtZW1vcnkgUmVhZCBDb3VudGVyIChIKSBSZXN1bHQ6IChkKTQxMCAqLworCXsweDAwMjMsIDB4ODYwMX0sCisJezB4MDAxMCwgMHg4NjAyfSwKKwl7MHgwMDBBLCAweDg2MDN9LAorCXsweDAwOUEsIDB4ODYwMH0sCisJezB4MDAwMSwgMHg4NjVCfSwJLyogMSBIb3Jpem9udGFsIE9mZnNldCBmb3IgVmFsaWQgUGl4ZWwoTCkgKi8KKwl7MHgwMDAzLCAweDg2NUN9LAkvKiBWZXJ0aWNhbCBvZmZzZXQgZm9yIHZhbGlkIGxpbmVzIChMKSAqLworCXsweDAwNTgsIDB4ODY1RH0sCS8qIEhvcml6b250YWwgdmFsaWQgcGl4ZWxzIHdpbmRvdyAoTCkgKi8KKwl7MHgwMDQ4LCAweDg2NUV9LAkvKiBWZXJ0aWNhbCB2YWxpZCBsaW5lcyB3aW5kb3cgKEwpICovCisJezB4MDAwMCwgMHg4NjVGfSwKKworCXsweDAwMDYsIDB4ODY2MH0sCisJCSAgICAvKiBFbmFibGUgbmliYmxlIGRhdGEgaW5wdXQsIHNlbGVjdCBuaWJibGUgaW5wdXQgb3JkZXIgKi8KKworCXsweDAwMTMsIDB4ODYwOH0sCS8qIEExMSBDb2VmaWNpZW50cyBmb3IgY29sb3IgY29ycmVjdGlvbiAqLworCXsweDAwMjgsIDB4ODYwOX0sCisJCSAgICAvKiBOb3RlOiB0aGVzZSB2YWx1ZXMgYXJlIGNvbmZpcm1lZCBhdCB0aGUgZW5kIG9mIGFycmF5ICovCisJezB4MDAwNSwgMHg4NjBBfSwJLyogLi4uICovCisJezB4MDAyNSwgMHg4NjBCfSwKKwl7MHgwMEUxLCAweDg2MEN9LAorCXsweDAwRkEsIDB4ODYwRH0sCisJezB4MDBGNCwgMHg4NjBFfSwKKwl7MHgwMEU4LCAweDg2MEZ9LAorCXsweDAwMjUsIDB4ODYxMH0sCS8qIEEzMyBDb2VmLiAqLworCXsweDAwRkMsIDB4ODYxMX0sCS8qIFdoaXRlIGJhbGFuY2Ugb2Zmc2V0OiBSICovCisJezB4MDAwMSwgMHg4NjEyfSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IEdyICovCisJezB4MDBGRSwgMHg4NjEzfSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IEIgKi8KKwl7MHgwMDAwLCAweDg2MTR9LAkvKiBXaGl0ZSBiYWxhbmNlIG9mZnNldDogR2IgKi8KKworCXsweDAwNjQsIDB4ODY1MX0sCS8qIFIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KKwl7MHgwMDQwLCAweDg2NTJ9LAkvKiBHciBnYWluIGZvciB3aGl0ZSBiYWxhbmNlIChMKSAqLworCXsweDAwNjYsIDB4ODY1M30sCS8qIEIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KKwl7MHgwMDQwLCAweDg2NTR9LAkvKiBHYiBnYWluIGZvciB3aGl0ZSBiYWxhbmNlIChMKSAqLworCXsweDAwMDEsIDB4ODYzRn0sCS8qIEVuYWJsZSBmaXhlZCBnYW1tYSBjb3JyZWN0aW9uICovCisKKwl7MHgwMEExLCAweDg2NTZ9LAkvKiBTaXplIC0gV2luZG93MTogMjU2eDI1NiwgV2luZG93MjogMTI4eDEyOCAqLworCS8qIFVWIGRpdmlzaW9uOiBVViBubyBjaGFuZ2UsIEVuYWJsZSBOZXcgZWRnZSBlbmhhbmNlbWVudCAqLworCXsweDAwMTgsIDB4ODY1N30sCS8qIEVkZ2UgZ2FpbiBoaWdoIHRocmVzaG9sZCAqLworCXsweDAwMjAsIDB4ODY1OH0sCS8qIEVkZ2UgZ2FpbiBsb3cgdGhyZXNob2xkICovCisJezB4MDAwQSwgMHg4NjU5fSwJLyogRWRnZSBiYW5kd2lkdGggaGlnaCB0aHJlc2hvbGQgKi8KKwl7MHgwMDA1LCAweDg2NUF9LAkvKiBFZGdlIGJhbmR3aWR0aCBsb3cgdGhyZXNob2xkICovCisJezB4MDA2NCwgMHg4NjA3fSwJLyogVVYgZmlsdGVyIGVuYWJsZSAqLworCisJezB4MDAxNiwgMHg4NjYwfSwKKwl7MHgwMDAwLCAweDg2QjB9LAkvKiBCYWQgcGl4ZWxzIGNvbXBlbnNhdGlvbiBhZGRyZXNzICovCisJezB4MDBEQywgMHg4NkIxfSwJLyogWCBjb29yZCBmb3IgYmFkIHBpeGVscyBjb21wZW5zYXRpb24gKEwpICovCisJezB4MDAwMCwgMHg4NkIyfSwKKwl7MHgwMDA5LCAweDg2QjN9LAkvKiBZIGNvb3JkIGZvciBiYWQgcGl4ZWxzIGNvbXBlbnNhdGlvbiAoTCkgKi8KKwl7MHgwMDAwLCAweDg2QjR9LAorCisJezB4MDAwMSwgMHg4NkIwfSwKKwl7MHgwMEY1LCAweDg2QjF9LAorCXsweDAwMDAsIDB4ODZCMn0sCisJezB4MDBDNiwgMHg4NkIzfSwKKwl7MHgwMDAwLCAweDg2QjR9LAorCisJezB4MDAwMiwgMHg4NkIwfSwKKwl7MHgwMDFDLCAweDg2QjF9LAorCXsweDAwMDEsIDB4ODZCMn0sCisJezB4MDBENywgMHg4NkIzfSwKKwl7MHgwMDAwLCAweDg2QjR9LAorCisJezB4MDAwMywgMHg4NkIwfSwKKwl7MHgwMDFDLCAweDg2QjF9LAorCXsweDAwMDEsIDB4ODZCMn0sCisJezB4MDBEOCwgMHg4NkIzfSwKKwl7MHgwMDAwLCAweDg2QjR9LAorCisJezB4MDAwNCwgMHg4NkIwfSwKKwl7MHgwMDFELCAweDg2QjF9LAorCXsweDAwMDEsIDB4ODZCMn0sCisJezB4MDBEOCwgMHg4NkIzfSwKKwl7MHgwMDAwLCAweDg2QjR9LAorCXsweDAwMUUsIDB4ODY2MH0sCisKKwkvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2MDggfSAtPgorCQkwMDAwOiAxMyAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2MDkgfSAtPgorCQkwMDAwOiAyOCAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2MTAgfSAtPgorCQkwMDAwOiAwNSAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2MTEgfSAtPgorCQkwMDAwOiAyNSAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2MTIgfSAtPgorCQkwMDAwOiBlMSAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2MTMgfSAtPgorCQkwMDAwOiBmYSAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2MTQgfSAtPgorCQkwMDAwOiBmNCAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2MTUgfSAtPgorCQkwMDAwOiBlOCAgKi8KKwkvKiBSRUFEIHsgMCwgMHgwMDAwLCAweDg2MTYgfSAtPgorCQkwMDAwOiAyNSAgKi8KKwl7fQorfTsKKworc3RhdGljIGludCByZWdfd3JpdGUoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCV9fdTE2IGluZGV4LCBfX3UxNiB2YWx1ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJMCwJCS8qIHJlcXVlc3QgKi8KKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDUwMCk7CisJUERFQlVHKERfVVNCTywgInJlZyB3cml0ZSBpOjB4JTA0eCA9IDB4JTAyeCIsCisJCWluZGV4LCB2YWx1ZSk7CisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUnxEX1VTQk8sICJyZWcgd3JpdGU6IGVycm9yICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiByZWFkIDEgYnl0ZSAqLworLyogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEgKi8KK3N0YXRpYyBpbnQgcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191MTYgaW5kZXgpCS8qIHdJbmRleCAqLworeworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMCwJCQkvKiByZWdpc3RlciAqLworCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkJLyogdmFsdWUgKi8KKwkJCWluZGV4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCAxLAorCQkJNTAwKTsJCQkvKiB0aW1lb3V0ICovCisJUERFQlVHKERfVVNCSSwgInJlZyByZWFkIGk6JTA0eCAtLT4gJTAyeCIsCisJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWZbMF0pOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUnxEX1VTQkksICJyZWdfcmVhZCBlcnIgJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBfX3UxNiBkYXRhW11bM10pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQsIGkgPSAwOworCisJd2hpbGUgKGRhdGFbaV1bMV0gIT0gMCkgeworCQlyZXQgPSByZWdfd3JpdGUoZGV2LCBkYXRhW2ldWzFdLCBkYXRhW2ldWzBdKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlpKys7CisJfQorCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCBjYW0gKmNhbTsKKwlfX3UxNiBwcm9kdWN0OworCWludCBkYXRhMSwgZGF0YTI7CisKKwlwcm9kdWN0ID0gaWQtPmlkUHJvZHVjdDsKKwlzd2l0Y2ggKGlkLT5pZFZlbmRvcikgeworCWNhc2UgMHgwMTMwOgkJLyogQ2xvbmUgd2ViY2FtICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDAxMzA6ICovCisJCQlzZC0+c3VidHlwZSA9IEhhbWFVU0JTaWdodGNhbTsJLyogc2FtZSBhcyBIYW1hIDAwMTAgKi8KKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDQxZToJCS8qIENyZWF0aXZlIGNhbWVyYXMgKi8KKy8qCQlzd2l0Y2ggKHByb2R1Y3QpIHsgKi8KKy8qCQljYXNlIDB4NDAxODogKi8KKwkJCXNkLT5zdWJ0eXBlID0gQ3JlYXRpdmVWaXN0YTsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDQ2MToJCS8qIE1pY3JvSW5ub3ZhdGlvbiAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgwODE1OiAqLworCQkJc2QtPnN1YnR5cGUgPSBNaWNyb0lubm92YXRpb25JQzIwMDsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDczMzoJLyogUmViYWRnZWQgVmlld1F1ZXN0IChJbnRlbCkgYW5kIFZpZXdRdWVzdCBjYW1lcmFzICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDExMDogKi8KKwkJCXNkLT5zdWJ0eXBlID0gVmlld1F1ZXN0VlExMTA7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDBhZjk6CQkvKiBIYW1hIGNhbWVyYXMgKi8KKwkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHgwMDEwOgorCQkJc2QtPnN1YnR5cGUgPSBIYW1hVVNCU2lnaHRjYW07CisJCQlicmVhazsKKwkJY2FzZSAweDAwMTE6CisJCQlzZC0+c3VidHlwZSA9IEhhbWFVU0JTaWdodGNhbTI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4ODA4NjoJCS8qIEludGVsICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDAxMTA6ICovCisJCQlzZC0+c3VidHlwZSA9IEludGVsRWFzeVBDQ2FtZXJhOworLyoJCQlicmVhazsgKi8KKy8qCQl9ICovCisJCWJyZWFrOworCX0KKworCS8qIFJlYWQgZnJvbSBnbG9iYWwgcmVnaXN0ZXIgdGhlIFVTQiBwcm9kdWN0IGFuZCB2ZW5kb3IgSURzLCBqdXN0IHRvCisJICogcHJvdmUgdGhhdCB3ZSBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGV2aWNlLiAgVGhpcyB3b3Jrcywgd2hpY2gKKwkgKiBjb25maXJtcyBhdCB3ZSBhcmUgY29tbXVuaWNhdGluZyBwcm9wZXJseSBhbmQgdGhhdCB0aGUgZGV2aWNlCisJICogaXMgYSA1MDguICovCisJZGF0YTEgPSByZWdfcmVhZChnc3BjYV9kZXYsIDB4ODEwNCk7CisJZGF0YTIgPSByZWdfcmVhZChnc3BjYV9kZXYsIDB4ODEwNSk7CisJUERFQlVHKERfUFJPQkUsICJXZWJjYW0gVmVuZG9yIElEOiAweCUwMnglMDJ4IiwgZGF0YTIsIGRhdGExKTsKKworCWRhdGExID0gcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDgxMDYpOworCWRhdGEyID0gcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDgxMDcpOworCVBERUJVRyhEX1BST0JFLCAiV2ViY2FtIFByb2R1Y3QgSUQ6IDB4JTAyeCUwMngiLCBkYXRhMiwgZGF0YTEpOworCisJZGF0YTEgPSByZWdfcmVhZChnc3BjYV9kZXYsIDB4ODYyMSk7CisJUERFQlVHKERfUFJPQkUsICJXaW5kb3cgMSBhdmVyYWdlIGx1bWluYW5jZTogJWQiLCBkYXRhMSk7CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5kZXZfbmFtZSA9IChjaGFyICopIGlkLT5kcml2ZXJfaW5mbzsKKwljYW0tPmVwYWRkciA9IDB4MDE7CisJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOworCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShzaWZfbW9kZSk7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKworCXN3aXRjaCAoc2QtPnN1YnR5cGUpIHsKKwljYXNlIFZpZXdRdWVzdFZRMTEwOgorCQlpZiAod3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwOF9pbml0X2RhdGEpKQorCQkJcmV0dXJuIC0xOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBNaWNyb0lubm92YXRpb25JQzIwMDogKi8KKy8qCWNhc2UgSW50ZWxFYXN5UENDYW1lcmE6ICovCisJCWlmICh3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA4Y3MxMTBfaW5pdF9kYXRhKSkKKwkJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJY2FzZSBIYW1hVVNCU2lnaHRjYW06CisJCWlmICh3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA4X3NpZ2h0Y2FtX2luaXRfZGF0YSkpCisJCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCWNhc2UgSGFtYVVTQlNpZ2h0Y2FtMjoKKwkJaWYgKHdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDhfc2lnaHRjYW0yX2luaXRfZGF0YSkpCisJCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCWNhc2UgQ3JlYXRpdmVWaXN0YToKKwkJaWYgKHdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDhfdmlzdGFfaW5pdF9kYXRhKSkKKwkJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOwkJCS8qIHN1Y2Nlc3MgKi8KK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworLyoJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwOF9vcGVuX2RhdGEpOyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IG1vZGU7CisKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDg1MDAsIG1vZGUpOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHg4NzAwLCAweDI4KTsJLyogY2xvY2sgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgMjogKi8KKy8qCWNhc2UgMzogKi8KKwkJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDg3MDAsIDB4MjMpOwkvKiBjbG9jayAqLworCQlicmVhazsKKwl9CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDgxMTIsIDB4MTAgfCAweDIwKTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCS8qIFZpZGVvIElTTyBkaXNhYmxlLCBWaWRlbyBEcm9wIFBhY2tldCBlbmFibGU6ICovCisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDgxMTIsIDB4MjApOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IGNsb3NlIHRpbWUgKi8KK3N0YXRpYyB2b2lkIHNkX2Nsb3NlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworLyogY29udmVydCBZVVZZIHBlciBsaW5lIHRvIFlVWVYgKFlVViA0OjI6MikgKi8KK3N0YXRpYyB2b2lkIHl1dnlfZGVjb2RlKHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXVuc2lnbmVkIGNoYXIgKmluLAorCQkJaW50IHdpZHRoLAorCQkJaW50IGhlaWdodCkKK3sKKwl1bnNpZ25lZCBjaGFyICpVaSwgKlZpLCAqeWksICp5aTE7CisJdW5zaWduZWQgY2hhciAqb3V0MTsKKwlpbnQgaSwgajsKKworCXlpID0gaW47CisJZm9yIChpID0gaGVpZ2h0IC8gMjsgLS1pID49IDA7ICkgeworCQlvdXQxID0gb3V0ICsgd2lkdGggKiAyOwkJLyogbmV4dCBsaW5lICovCisJCVVpID0geWkgKyB3aWR0aDsKKwkJVmkgPSBVaSArIHdpZHRoIC8gMjsKKwkJeWkxID0gVmkgKyB3aWR0aCAvIDI7CisJCWZvciAoaiA9IHdpZHRoIC8gMjsgLS1qID49IDA7ICkgeworCQkJKm91dCsrID0gMTI4ICsgKnlpKys7CisJCQkqb3V0KysgPSAxMjggKyAqVWk7CisJCQkqb3V0KysgPSAxMjggKyAqeWkrKzsKKwkJCSpvdXQrKyA9IDEyOCArICpWaTsKKworCQkJKm91dDErKyA9IDEyOCArICp5aTErKzsKKwkJCSpvdXQxKysgPSAxMjggKyAqVWkrKzsKKwkJCSpvdXQxKysgPSAxMjggKyAqeWkxKys7CisJCQkqb3V0MSsrID0gMTI4ICsgKlZpKys7CisJCX0KKwkJeWkgKz0gd2lkdGggKiAyOworCQlvdXQgPSBvdXQxOworCX0KK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgkJCQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQlpZiAoZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID09IEZJUlNUX1BBQ0tFVCkgeworCQkJeXV2eV9kZWNvZGUoc2QtPnRtcGJ1ZjIsIHNkLT50bXBidWYsCisJCQkJCWdzcGNhX2Rldi0+d2lkdGgsCisJCQkJCWdzcGNhX2Rldi0+aGVpZ2h0KTsKKwkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwKKwkJCQkJCUxBU1RfUEFDS0VULAorCQkJCQkJZnJhbWUsCisJCQkJCQlzZC0+dG1wYnVmMiwKKwkJCQkJCWdzcGNhX2Rldi0+d2lkdGgKKwkJCQkJCQkqIGdzcGNhX2Rldi0+aGVpZ2h0CisJCQkJCQkJKiAyKTsKKwkJfQorCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLAorCQkJCWRhdGEsIDApOworCQlkYXRhICs9IFNQQ0E1MDhfT0ZGU0VUX0RBVEE7CisJCWxlbiAtPSBTUENBNTA4X09GRlNFVF9EQVRBOworCQlpZiAobGVuID4gMCkKKwkJCW1lbWNweShzZC0+dG1wYnVmLCBkYXRhLCBsZW4pOworCQllbHNlCisJCQlsZW4gPSAwOworCQlzZC0+YnVmbGVuID0gbGVuOworCQlyZXR1cm47CisJY2FzZSAweGZmOgkJCS8qIGRyb3AgKi8KKy8qCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsgKi8KKwkJcmV0dXJuOworCX0KKwlkYXRhICs9IDE7CisJbGVuIC09IDE7CisJbWVtY3B5KCZzZC0+dG1wYnVmW3NkLT5idWZsZW5dLCBkYXRhLCBsZW4pOworCXNkLT5idWZsZW4gKz0gbGVuOworfQorCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCBicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CisKKwkvKiBNWCBzZWVtIGNvbnRyYXN0ICovCisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDg2NTEsIGJyaWdodG5lc3MpOworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHg4NjUyLCBicmlnaHRuZXNzKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODY1MywgYnJpZ2h0bmVzcyk7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDg2NTQsIGJyaWdodG5lc3MpOworfQorCitzdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHJlZ19yZWFkKGdzcGNhX2RldiwgMHg4NjUxKTsKK30KKworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5icmlnaHRuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWdldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwkqdmFsID0gc2QtPmJyaWdodG5lc3M7CisJcmV0dXJuIDA7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLm9wZW4gPSBzZF9vcGVuLAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAorCS5jbG9zZSA9IHNkX2Nsb3NlLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCisjZGVmaW5lIERWTk0obmFtZSkgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSBuYW1lCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDAxMzAsIDB4MDEzMCksIERWTk0oIkNsb25lIERpZ2l0YWwgV2ViY2FtIDExMDQzIil9LAorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDE4KSwgRFZOTSgiQ3JlYXRpdmUgV2ViY2FtIFZpc3RhIChQRDExMDApIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2MSwgMHgwODE1KSwgRFZOTSgiTWljcm8gSW5ub3ZhdGlvbiBJQzIwMCIpfSwKKwl7VVNCX0RFVklDRSgweDA3MzMsIDB4MDExMCksIERWTk0oIlZpZXdRdWVzdCBWUTExMCIpfSwKKwl7VVNCX0RFVklDRSgweDBhZjksIDB4MDAxMCksIERWTk0oIkhhbWEgVVNCIFNpZ2h0Y2FtIDEwMCIpfSwKKwl7VVNCX0RFVklDRSgweDBhZjksIDB4MDAxMSksIERWTk0oIkhhbWEgVVNCIFNpZ2h0Y2FtIDEwMCIpfSwKKwl7VVNCX0RFVklDRSgweDgwODYsIDB4MDExMCksIERWTk0oIkludGVsIEVhc3kgUEMgQ2FtZXJhIil9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAidiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1OWJkMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCkBAIC0wLDAgKzEsMTA1MiBAQAorLyoKKyAqIFN1bnBsdXMgc3BjYTU2MSBzdWJkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljaGVsIFhoYWFyZCBteGhhYXJkQG1hZ2ljLmZyCisgKgorICogVjRMMiBieSBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic3BjYTU2MSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDEsIDcpCitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiMi4xLjciOworCitNT0RVTEVfQVVUSE9SKCJNaWNoZWwgWGhhYXJkIDxteGhhYXJkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvU1BDQTU2MSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCisJdW5zaWduZWQgc2hvcnQgY29udHJhc3Q7CisJX191OCBicmlnaHRuZXNzOworCV9fdTggYXV0b2dhaW47CisKKwlfX3U4IGNoaXBfcmV2aXNpb247CisJc2lnbmVkIGNoYXIgYWdfY250OworI2RlZmluZSBBR19DTlRfU1RBUlQgMTMKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworI2RlZmluZSBTRF9CUklHSFRORVNTIDAKKwl7CisJIHsKKwkgIC5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAubmFtZSA9ICJCcmlnaHRuZXNzIiwKKwkgIC5taW5pbXVtID0gMCwKKwkgIC5tYXhpbXVtID0gNjMsCisJICAuc3RlcCA9IDEsCisJICAuZGVmYXVsdF92YWx1ZSA9IDMyLAorCSAgfSwKKwkgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCSB9LAorI2RlZmluZSBTRF9DT05UUkFTVCAxCisJeworCSB7CisJICAuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkgIC5uYW1lID0gIkNvbnRyYXN0IiwKKwkgIC5taW5pbXVtID0gMCwKKwkgIC5tYXhpbXVtID0gMHgzZmZmLAorCSAgLnN0ZXAgPSAxLAorCSAgLmRlZmF1bHRfdmFsdWUgPSAweDIwMDAsCisJICB9LAorCSAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwkgfSwKKyNkZWZpbmUgU0RfQVVUT0dBSU4gMgorCXsKKwkgeworCSAgLmlkID0gVjRMMl9DSURfQVVUT0dBSU4sCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJICAubmFtZSA9ICJBdXRvIEdhaW4iLAorCSAgLm1pbmltdW0gPSAwLAorCSAgLm1heGltdW0gPSAxLAorCSAgLnN0ZXAgPSAxLAorCSAgLmRlZmF1bHRfdmFsdWUgPSAxLAorCSAgfSwKKwkgLnNldCA9IHNkX3NldGF1dG9nYWluLAorCSAuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisJIH0sCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAorCQkuc2l6ZWltYWdlID0gMTYwICogMTIwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDN9LAorCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTc2LAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDJ9LAorCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1NQQ0E1NjEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDQgLyA4LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDF9LAorCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX1NQQ0E1NjEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDQgLyA4LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyoKKyAqIEluaXRpYWxpemF0aW9uIGRhdGEKKyAqIEknbSBub3QgdmVyeSBzdXJlIGhvdyB0byBzcGxpdCBpbml0aWFsaXphdGlvbiBmcm9tIG9wZW4gZGF0YQorICogY2h1bmtzLiBGb3Igbm93LCB3ZSdsbCBjb25zaWRlciBldmVyeXRoaW5nIGFzIGluaXRpYWxpemF0aW9uCisgKi8KKy8qIEZyYW1lIHBhY2tldCBoZWFkZXIgb2Zmc2V0cyBmb3IgdGhlIHNwY2E1NjEgKi8KKyNkZWZpbmUgU1BDQTU2MV9PRkZTRVRfU05BUCAxCisjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX1RZUEUgMgorI2RlZmluZSBTUENBNTYxX09GRlNFVF9DT01QUkVTUyAzCisjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX0ZSQU1TRVEgICA0CisjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX0dQSU8gNQorI2RlZmluZSBTUENBNTYxX09GRlNFVF9VU0JCVUZGIDYKKyNkZWZpbmUgU1BDQTU2MV9PRkZTRVRfV0lOMkdSQVZFIDcKKyNkZWZpbmUgU1BDQTU2MV9PRkZTRVRfV0lOMlJBVkUgOAorI2RlZmluZSBTUENBNTYxX09GRlNFVF9XSU4yQkFWRSA5CisjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX1dJTjJHQkFWRSAxMAorI2RlZmluZSBTUENBNTYxX09GRlNFVF9XSU4xR1JBVkUgMTEKKyNkZWZpbmUgU1BDQTU2MV9PRkZTRVRfV0lOMVJBVkUgMTIKKyNkZWZpbmUgU1BDQTU2MV9PRkZTRVRfV0lOMUJBVkUgMTMKKyNkZWZpbmUgU1BDQTU2MV9PRkZTRVRfV0lOMUdCQVZFIDE0CisjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX0ZSRVEgMTUKKyNkZWZpbmUgU1BDQTU2MV9PRkZTRVRfVlNZTkMgMTYKKyNkZWZpbmUgU1BDQTU2MV9PRkZTRVRfREFUQSAxCisjZGVmaW5lIFNQQ0E1NjFfSU5ERVhfSTJDX0JBU0UgMHg4ODAwCisjZGVmaW5lIFNQQ0E1NjFfU05BUEJJVCAweDIwCisjZGVmaW5lIFNQQ0E1NjFfU05BUENUUkwgMHg0MAorZW51bSB7CisJUmV2MDcyQSA9IDAsCisJUmV2MDEyQSwKK307CisKK3N0YXRpYyB2b2lkIHJlZ193X3ZhbChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBfX3UxNiBpbmRleCwgX191MTYgdmFsdWUpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMCwJCS8qIHJlcXVlc3QgKi8KKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICB2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDUwMCk7CisJUERFQlVHKERfVVNCTywgInJlZyB3cml0ZTogMHglMDJ4OjB4JTAyeCIsIGluZGV4LCB2YWx1ZSk7CisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUiwgInJlZyB3cml0ZTogZXJyb3IgJWQiLCByZXQpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV92ZWN0b3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3QgX191MTYgZGF0YVtdWzJdKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgaTsKKworCWkgPSAwOworCXdoaWxlIChkYXRhW2ldWzFdICE9IDApIHsKKwkJcmVnX3dfdmFsKGRldiwgZGF0YVtpXVsxXSwgZGF0YVtpXVswXSk7CisJCWkrKzsKKwl9Cit9CisKKy8qIHJlYWQgJ2xlbicgYnl0ZXMgdG8gZ3NwY2FfZGV2LT51c2JfYnVmICovCitzdGF0aWMgdm9pZCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgX191MTYgaW5kZXgsIF9fdTE2IGxlbmd0aCkKK3sKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMCwJCQkvKiByZXF1ZXN0ICovCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTAsCQkJLyogdmFsdWUgKi8KKwkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbmd0aCwgNTAwKTsKK30KKworc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICAgICAgX191MTYgaW5kZXgsIGNvbnN0IF9fdTggKmJ1ZmZlciwgX191MTYgbGVuKQoreworCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuKTsKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMCwJCQkvKiByZXF1ZXN0ICovCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkJCS8qIHZhbHVlICovCisJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sIDUwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGkyY19pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX191OCBtb2RlKQoreworCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg5MiwgMHg4ODA0KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIG1vZGUsIDB4ODgwMik7Cit9CisKK3N0YXRpYyB2b2lkIGkyY193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTE2IHZhbGV1ciwgX191MTYgcmVnKQoreworCWludCByZXRyeSA9IDYwOworCV9fdTggRGF0YUxvdzsKKwlfX3U4IERhdGFIaWdodDsKKworCURhdGFMb3cgPSB2YWxldXI7CisJRGF0YUhpZ2h0ID0gdmFsZXVyID4+IDg7CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCByZWcsIDB4ODgwMSk7CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCBEYXRhTG93LCAweDg4MDUpOworCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgRGF0YUhpZ2h0LCAweDg4MDApOworCXdoaWxlIChyZXRyeS0tKSB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHg4ODAzLCAxKTsKKwkJaWYgKCFnc3BjYV9kZXYtPnVzYl9idWZbMF0pCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaTJjX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3UxNiByZWcsIF9fdTggbW9kZSkKK3sKKwlpbnQgcmV0cnkgPSA2MDsKKwlfX3U4IHZhbHVlOworCV9fdTggdmFsbHNiOworCisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDkyLCAweDg4MDQpOworCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgcmVnLCAweDg4MDEpOworCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgKG1vZGUgfCAweDAxKSwgMHg4ODAyKTsKKwl3aGlsZSAocmV0cnktLSkgeworCQlyZWdfcihnc3BjYV9kZXYsIDB4ODgwMywgMSk7CisJCWlmICghZ3NwY2FfZGV2LT51c2JfYnVmKQorCQkJYnJlYWs7CisJfQorCWlmIChyZXRyeSA9PSAwKQorCQlyZXR1cm4gLTE7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDg4MDAsIDEpOworCXZhbHVlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCXJlZ19yKGdzcGNhX2RldiwgMHg4ODA1LCAxKTsKKwl2YWxsc2IgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJcmV0dXJuICgoaW50KSB2YWx1ZSA8PCA4KSB8IHZhbGxzYjsKK30KKworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1NjFfaW5pdF9kYXRhW11bMl0gPSB7CisJezB4MDAwMCwgMHg4MTE0fSwJLyogU29mdHdhcmUgR1BJTyBvdXRwdXQgZGF0YSAqLworCXsweDAwMDEsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KKwl7MHgwMDAwLCAweDgxMTJ9LAkvKiBTb21lIGtpbmQgb2YgcmVzZXQgKi8KKwl7MHgwMDAzLCAweDg3MDF9LAkvKiBQQ0xLIGNsb2NrIGRlbGF5IGFkanVzdG1lbnQgKi8KKwl7MHgwMDAxLCAweDg3MDN9LAkvKiBIU1lOQyBmcm9tIGNtb3MgaW52ZXJ0ZWQgKi8KKwl7MHgwMDExLCAweDgxMTh9LAkvKiBFbmFibGUgYW5kIGNvbmYgc2Vuc29yICovCisJezB4MDAwMSwgMHg4MTE4fSwJLyogQ29uZiBzZW5zb3IgKi8KKwl7MHgwMDkyLCAweDg4MDR9LAkvKiBJIGtub3cgbm90aGluZyBhYm91dCB0aGVzZSAqLworCXsweDAwMTAsIDB4ODgwMn0sCS8qIDB4ODh4eCByZWdpc3RlcnMsIHNvIEkgd29uJ3QgKi8KKwkvKioqKioqKioqKioqKioqLworCXsweDAwMGQsIDB4ODgwNX0sCS8qIHNlbnNvciBkZWZhdWx0IHNldHRpbmcgKi8KKwl7MHgwMDAxLCAweDg4MDF9LAkvKiAxIDwtIDB4MGQgKi8KKwl7MHgwMDAwLCAweDg4MDB9LAorCXsweDAwMTgsIDB4ODgwNX0sCisJezB4MDAwMiwgMHg4ODAxfSwJLyogMiA8LSAweDE4ICovCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMDY1LCAweDg4MDV9LAorCXsweDAwMDQsIDB4ODgwMX0sCS8qIDQgPC0gMHgwMSAweDY1ICovCisJezB4MDAwMSwgMHg4ODAwfSwKKwl7MHgwMDIxLCAweDg4MDV9LAorCXsweDAwMDUsIDB4ODgwMX0sCS8qIDUgPC0gMHgyMSAqLworCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDBhYSwgMHg4ODA1fSwKKwl7MHgwMDA3LCAweDg4MDF9LAkvKiA3IDwtIDB4YWEgKi8KKwl7MHgwMDAwLCAweDg4MDB9LAorCXsweDAwMDQsIDB4ODgwNX0sCisJezB4MDAyMCwgMHg4ODAxfSwJLyogMHgyMCA8LSAweDE1IDB4MDQgKi8KKwl7MHgwMDE1LCAweDg4MDB9LAorCXsweDAwMDIsIDB4ODgwNX0sCisJezB4MDAzOSwgMHg4ODAxfSwJLyogMHgzOSA8LSAweDAyICovCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMDEwLCAweDg4MDV9LAorCXsweDAwMzUsIDB4ODgwMX0sCS8qIDB4MzUgPC0gMHgxMCAqLworCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDA0OSwgMHg4ODA1fSwKKwl7MHgwMDA5LCAweDg4MDF9LAkvKiAweDA5IDwtIDB4MTAgMHg0OSAqLworCXsweDAwMTAsIDB4ODgwMH0sCisJezB4MDAwYiwgMHg4ODA1fSwKKwl7MHgwMDI4LCAweDg4MDF9LAkvKiAweDI4IDwtIDB4MGIgKi8KKwl7MHgwMDAwLCAweDg4MDB9LAorCXsweDAwMGYsIDB4ODgwNX0sCisJezB4MDAzYiwgMHg4ODAxfSwJLyogMHgzYiA8LSAweDBmICovCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMDAwLCAweDg4MDV9LAorCXsweDAwM2MsIDB4ODgwMX0sCS8qIDB4M2MgPC0gMHgwMCAqLworCXsweDAwMDAsIDB4ODgwMH0sCisJLyoqKioqKioqKioqKioqKi8KKwl7MHgwMDE4LCAweDg2MDF9LAkvKiBQaXhlbC9saW5lIHNlbGVjdGlvbiBmb3IgY29sb3Igc2VwYXJhdGlvbiAqLworCXsweDAwMDAsIDB4ODYwMn0sCS8qIE9wdGljYWwgYmxhY2sgbGV2ZWwgZm9yIHVzZXIgc2V0dGluZyAqLworCXsweDAwNjAsIDB4ODYwNH0sCS8qIE9wdGljYWwgYmxhY2sgaG9yaXpvbnRhbCBvZmZzZXQgKi8KKwl7MHgwMDAyLCAweDg2MDV9LAkvKiBPcHRpY2FsIGJsYWNrIHZlcnRpY2FsIG9mZnNldCAqLworCXsweDAwMDAsIDB4ODYwM30sCS8qIE5vbi1hdXRvbWF0aWMgb3B0aWNhbCBibGFjayBsZXZlbCAqLworCXsweDAwMDIsIDB4ODY1Yn0sCS8qIEhvcml6b250YWwgb2Zmc2V0IGZvciB2YWxpZCBwaXhlbHMgKi8KKwl7MHgwMDAwLCAweDg2NWZ9LAkvKiBWZXJ0aWNhbCB2YWxpZCBwaXhlbHMgd2luZG93ICh4MikgKi8KKwl7MHgwMGIwLCAweDg2NWR9LAkvKiBIb3Jpem9udGFsIHZhbGlkIHBpeGVscyB3aW5kb3cgKHgyKSAqLworCXsweDAwOTAsIDB4ODY1ZX0sCS8qIFZlcnRpY2FsIHZhbGlkIGxpbmVzIHdpbmRvdyAoeDIpICovCisJezB4MDBlMCwgMHg4NDA2fSwJLyogTWVtb3J5IGJ1ZmZlciB0aHJlc2hvbGQgKi8KKwl7MHgwMDAwLCAweDg2NjB9LAkvKiBDb21wZW5zYXRpb24gbWVtb3J5IHN0dWZmICovCisJezB4MDAwMiwgMHg4MjAxfSwJLyogT3V0cHV0IGFkZHJlc3MgZm9yIHIvdyBzZXJpYWwgRUVQUk9NICovCisJezB4MDAwOCwgMHg4MjAwfSwJLyogQ2xlYXIgdmFsaWQgYml0IGZvciBzZXJpYWwgRUVQUk9NICovCisJezB4MDAwMSwgMHg4MjAwfSwJLyogT3ByTW9kZSB0byBiZSBleGVjdXRlZCBieSBoYXJkd2FyZSAqLworCXsweDAwMDcsIDB4ODIwMX0sCS8qIE91dHB1dCBhZGRyZXNzIGZvciByL3cgc2VyaWFsIEVFUFJPTSAqLworCXsweDAwMDgsIDB4ODIwMH0sCS8qIENsZWFyIHZhbGlkIGJpdCBmb3Igc2VyaWFsIEVFUFJPTSAqLworCXsweDAwMDEsIDB4ODIwMH0sCS8qIE9wck1vZGUgdG8gYmUgZXhlY3V0ZWQgYnkgaGFyZHdhcmUgKi8KKwl7MHgwMDEwLCAweDg2NjB9LAkvKiBDb21wZW5zYXRpb24gbWVtb3J5IHN0dWZmICovCisJezB4MDAxOCwgMHg4NjYwfSwJLyogQ29tcGVuc2F0aW9uIG1lbW9yeSBzdHVmZiAqLworCisJezB4MDAwNCwgMHg4NjExfSwJLyogUiBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMDA0LCAweDg2MTJ9LAkvKiBHciBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMDA3LCAweDg2MTN9LAkvKiBCIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLworCXsweDAwMDAsIDB4ODYxNH0sCS8qIEdiIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLworCXsweDAwOGMsIDB4ODY1MX0sCS8qIFIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAqLworCXsweDAwOGMsIDB4ODY1Mn0sCS8qIEdyIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMGI1LCAweDg2NTN9LAkvKiBCIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMDhjLCAweDg2NTR9LAkvKiBHYiBnYWluIGZvciB3aGl0ZSBiYWxhbmNlICovCisJezB4MDAwMiwgMHg4NTAyfSwJLyogTWF4aW11bSBhdmVyYWdlIGJpdCByYXRlIHN0dWZmICovCisKKwl7MHgwMDExLCAweDg4MDJ9LAorCXsweDAwODcsIDB4ODcwMH0sCS8qIFNldCBtYXN0ZXIgY2xvY2sgKDk2TWh6Pz8/PykgKi8KKwl7MHgwMDgxLCAweDg3MDJ9LAkvKiBNYXN0ZXIgY2xvY2sgb3V0cHV0IGVuYWJsZSAqLworCisJezB4MDAwMCwgMHg4NTAwfSwJLyogU2V0IGltYWdlIHR5cGUgKDM1MngyODggbm8gY29tcHJlc3Npb24pICovCisJLyogT3JpZ2luYWxseSB3YXMgMHgwMDEwICgzNTJ4Mjg4IGNvbXByZXNzaW9uKSAqLworCisJezB4MDAwMiwgMHg4NjVifSwJLyogSG9yaXpvbnRhbCBvZmZzZXQgZm9yIHZhbGlkIHBpeGVscyAqLworCXsweDAwMDMsIDB4ODY1Y30sCS8qIFZlcnRpY2FsIG9mZnNldCBmb3IgdmFsaWQgbGluZXMgKi8KKwkvKioqKioqKioqKioqKioqLy8qIHNlbnNvciBhY3RpdmUgKi8KKwl7MHgwMDAzLCAweDg4MDF9LAkvKiAweDAzIDwtIDB4MDEgMHgyMSAvLzI4OSAqLworCXsweDAwMjEsIDB4ODgwNX0sCisJezB4MDAwMSwgMHg4ODAwfSwKKwl7MHgwMDA0LCAweDg4MDF9LAkvKiAweDA0IDwtIDB4MDEgMHg2NSAvLzM1NyAqLworCXsweDAwNjUsIDB4ODgwNX0sCisJezB4MDAwMSwgMHg4ODAwfSwKKwl7MHgwMDA1LCAweDg4MDF9LAkvKiAweDA1IDwtIDB4MmYgKi8KKwl7MHgwMDJmLCAweDg4MDV9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDAwNiwgMHg4ODAxfSwJLyogMHgwNiA8LSAwICovCisJezB4MDAwMCwgMHg4ODA1fSwKKwl7MHgwMDAwLCAweDg4MDB9LAorCXsweDAwMGEsIDB4ODgwMX0sCS8qIDB4MGEgPC0gMiAqLworCXsweDAwMDIsIDB4ODgwNX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMDA5LCAweDg4MDF9LAkvKiAweDA5IDwtIDB4MTA2MSAqLworCXsweDAwNjEsIDB4ODgwNX0sCisJezB4MDAxMCwgMHg4ODAwfSwKKwl7MHgwMDM1LCAweDg4MDF9LAkvKiAweDM1IDwtMHgxNCAqLworCXsweDAwMTQsIDB4ODgwNX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMDMwLCAweDgxMTJ9LAkvKiBJU08gYW5kIGRyb3AgcGFja2V0IGVuYWJsZSAqLworCXsweDAwMDAsIDB4ODExMn0sCS8qIFNvbWUga2luZCBvZiByZXNldCA/Pz8/ICovCisJezB4MDAwOSwgMHg4MTE4fSwJLyogRW5hYmxlIHNlbnNvciBhbmQgc2V0IHN0YW5kYnkgKi8KKwl7MHgwMDAwLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCisJezB4MDAwMCwgMHg4MTE0fSwJLyogU29mdHdhcmUgR1BJTyBvdXRwdXQgZGF0YSAqLworCXsweDAwMDEsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KKwl7MHgwMDAwLCAweDgxMTJ9LAkvKiBTb21lIGtpbmQgb2YgcmVzZXQgPz8/ICovCisJezB4MDAwMywgMHg4NzAxfSwKKwl7MHgwMDAxLCAweDg3MDN9LAorCXsweDAwMTEsIDB4ODExOH0sCisJezB4MDAwMSwgMHg4MTE4fSwKKwkvKioqKioqKioqKioqKioqLworCXsweDAwOTIsIDB4ODgwNH0sCisJezB4MDAxMCwgMHg4ODAyfSwKKwl7MHgwMDBkLCAweDg4MDV9LAorCXsweDAwMDEsIDB4ODgwMX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMDE4LCAweDg4MDV9LAorCXsweDAwMDIsIDB4ODgwMX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMDY1LCAweDg4MDV9LAorCXsweDAwMDQsIDB4ODgwMX0sCisJezB4MDAwMSwgMHg4ODAwfSwKKwl7MHgwMDIxLCAweDg4MDV9LAorCXsweDAwMDUsIDB4ODgwMX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKwl7MHgwMGFhLCAweDg4MDV9LAorCXsweDAwMDcsIDB4ODgwMX0sCS8qIG1vZGUgMHhhYSAqLworCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDAwNCwgMHg4ODA1fSwKKwl7MHgwMDIwLCAweDg4MDF9LAorCXsweDAwMTUsIDB4ODgwMH0sCS8qIG1vZGUgMHgwNDE1ICovCisJezB4MDAwMiwgMHg4ODA1fSwKKwl7MHgwMDM5LCAweDg4MDF9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDAxMCwgMHg4ODA1fSwKKwl7MHgwMDM1LCAweDg4MDF9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDA0OSwgMHg4ODA1fSwKKwl7MHgwMDA5LCAweDg4MDF9LAorCXsweDAwMTAsIDB4ODgwMH0sCisJezB4MDAwYiwgMHg4ODA1fSwKKwl7MHgwMDI4LCAweDg4MDF9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDAwZiwgMHg4ODA1fSwKKwl7MHgwMDNiLCAweDg4MDF9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDAwMCwgMHg4ODA1fSwKKwl7MHgwMDNjLCAweDg4MDF9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDAwMiwgMHg4NTAyfSwKKwl7MHgwMDM5LCAweDg4MDF9LAorCXsweDAwMDAsIDB4ODgwNX0sCisJezB4MDAwMCwgMHg4ODAwfSwKKworCXsweDAwODcsIDB4ODcwMH0sCS8qIG92ZXJ3cml0ZSBieSBzdGFydCAqLworCXsweDAwODEsIDB4ODcwMn0sCisJezB4MDAwMCwgMHg4NTAwfSwKKy8qCXsweDAwMTAsIDB4ODUwMH0sICAtLSBQcmV2aW91cyBsaW5lIHdhcyB0aGlzICovCisJezB4MDAwMiwgMHg4NjVifSwKKwl7MHgwMDAzLCAweDg2NWN9LAorCS8qKioqKioqKioqKioqKiovCisJezB4MDAwMywgMHg4ODAxfSwJLyogMHgxMjEtPiAyODkgKi8KKwl7MHgwMDIxLCAweDg4MDV9LAorCXsweDAwMDEsIDB4ODgwMH0sCisJezB4MDAwNCwgMHg4ODAxfSwJLyogMHgxNjUgLT4gMzU3ICovCisJezB4MDA2NSwgMHg4ODA1fSwKKwl7MHgwMDAxLCAweDg4MDB9LAorCXsweDAwMDUsIDB4ODgwMX0sCS8qIDB4MmYgLy9ibGFua2luZyBjb250cm9sIGNvbG9ubmUgKi8KKwl7MHgwMDJmLCAweDg4MDV9LAorCXsweDAwMDAsIDB4ODgwMH0sCisJezB4MDAwNiwgMHg4ODAxfSwJLyogMHgwMCAvL2JsYW5raW5nIG1vZGUgcm93ICovCisJezB4MDAwMCwgMHg4ODA1fSwKKwl7MHgwMDAwLCAweDg4MDB9LAorCXsweDAwMGEsIDB4ODgwMX0sCS8qIDB4MDEgLy8weDAyICovCisJezB4MDAwMSwgMHg4ODA1fSwKKwl7MHgwMDAwLCAweDg4MDB9LAorCXsweDAwMDksIDB4ODgwMX0sCS8qIDB4MTA2MSAtIHNldGV4cG9zdXJlIHRpbWVzICYmIHBpeGVsIGNsb2NrCisJCQkJICogMDAwMSAwIHwgMDAwIDAxMTAgMDAwMSAqLworCXsweDAwNjEsIDB4ODgwNX0sCS8qIDYxIDMxICovCisJezB4MDAwOCwgMHg4ODAwfSwJLyogMDggKi8KKwl7MHgwMDM1LCAweDg4MDF9LAkvKiAweDE0IC0gc2V0IGdhaW4gZ2VuZXJhbCAqLworCXsweDAwMWYsIDB4ODgwNX0sCS8qIDB4MTQgKi8KKwl7MHgwMDAwLCAweDg4MDB9LAorCXsweDAwMzAsIDB4ODExMn0sCisJe30KK307CisKK3N0YXRpYyB2b2lkIHNlbnNvcl9yZXNldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg2MzEsIDB4YzgpOworCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4NjM0LCAweGM4KTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIDB4ODExMiwgMHgwMCk7CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDgxMTQsIDB4MDApOworCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4MTE4LCAweDIxKTsKKwlpMmNfaW5pdChnc3BjYV9kZXYsIDB4MTQpOworCWkyY193cml0ZShnc3BjYV9kZXYsIDEsIDB4MGQpOworCWkyY193cml0ZShnc3BjYV9kZXYsIDAsIDB4MGQpOworfQorCisvKioqKioqKioqKioqKioqKioqKiogUUMgRXhwcmVzcyBldGNoMiBzdHVmZiAqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCBfX3UxNiBQYjEwMF8xbWFwODMwMFtdWzJdID0geworCS8qIHJlZywgdmFsdWUgKi8KKwl7MHg4MzIwLCAweDMzMDR9LAorCisJezB4ODMwMywgMHgwMTI1fSwJLyogaW1hZ2UgYXJlYSAqLworCXsweDgzMDQsIDB4MDE2OX0sCisJezB4ODMyOCwgMHgwMDBifSwKKwl7MHg4MzNjLCAweDAwMDF9LAorCisJezB4ODMyZiwgMHgwNDE5fSwKKwl7MHg4MzA3LCAweDAwYWF9LAorCXsweDgzMDEsIDB4MDAwM30sCisJezB4ODMwMiwgMHgwMDBlfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBfX3UxNiBQYjEwMF8ybWFwODMwMFtdWzJdID0geworCS8qIHJlZywgdmFsdWUgKi8KKwl7MHg4MzM5LCAweDAwMDB9LAorCXsweDgzMDcsIDB4MDBhYX0sCisJe30KK307CisKK3N0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTYxXzE2MXJldjEyQV9kYXRhMVtdWzJdID0geworCXsweDIxLCAweDgxMTh9LAorCXsweDAxLCAweDgxMTR9LAorCXsweDAwLCAweDgxMTJ9LAorCXsweDkyLCAweDg4MDR9LAorCXsweDA0LCAweDg4MDJ9LAkJLyogd2luZG93cyB1c2VzIDA4ICovCisJe30KK307CitzdGF0aWMgY29uc3QgX191MTYgc3BjYTU2MV8xNjFyZXYxMkFfZGF0YTJbXVsyXSA9IHsKKwl7MHgyMSwgMHg4MTE4fSwKKwl7MHgxMCwgMHg4NTAwfSwKKwl7MHgwNywgMHg4NjAxfSwKKwl7MHgwNywgMHg4NjAyfSwKKwl7MHgwNCwgMHg4NTAxfSwKKwl7MHgyMSwgMHg4MTE4fSwKKworCXsweDA3LCAweDgyMDF9LAkJLyogd2luZG93cyB1c2VzIDAyICovCisJezB4MDgsIDB4ODIwMH0sCisJezB4MDEsIDB4ODIwMH0sCisKKwl7MHgwMCwgMHg4MTE0fSwKKwl7MHgwMSwgMHg4MTE0fSwJCS8qIHdpbmRvd3MgdXNlcyAwMCAqLworCisJezB4OTAsIDB4ODYwNH0sCisJezB4MDAsIDB4ODYwNX0sCisJezB4YjAsIDB4ODYwM30sCisKKwkvKiBzZW5zb3IgZ2FpbnMgKi8KKwl7MHgwMCwgMHg4NjEwfSwJCS8qICpyZWQgKi8KKwl7MHgwMCwgMHg4NjExfSwJCS8qIDNmICAgKmdyZWVuICovCisJezB4MDAsIDB4ODYxMn0sCQkvKiBncmVlbiAqYmx1ZSAqLworCXsweDAwLCAweDg2MTN9LAkJLyogYmx1ZSAqZ3JlZW4gKi8KKwl7MHgzNSwgMHg4NjE0fSwJCS8qIGdyZWVuICpyZWQgKi8KKwl7MHgzNSwgMHg4NjE1fSwJCS8qIDQwICAgKmdyZWVuICovCisJezB4MzUsIDB4ODYxNn0sCQkvKiA3YSAgICpibHVlICovCisJezB4MzUsIDB4ODYxN30sCQkvKiA0MCAgICpncmVlbiAqLworCisJezB4MGMsIDB4ODYyMH0sCQkvKiAwYyAqLworCXsweGM4LCAweDg2MzF9LAkJLyogYzggKi8KKwl7MHhjOCwgMHg4NjM0fSwJCS8qIGM4ICovCisJezB4MjMsIDB4ODYzNX0sCQkvKiAyMyAqLworCXsweDFmLCAweDg2MzZ9LAkJLyogMWYgKi8KKwl7MHhkZCwgMHg4NjM3fSwJCS8qIGRkICovCisJezB4ZTEsIDB4ODYzOH0sCQkvKiBlMSAqLworCXsweDFkLCAweDg2Mzl9LAkJLyogMWQgKi8KKwl7MHgyMSwgMHg4NjNhfSwJCS8qIDIxICovCisJezB4ZTMsIDB4ODYzYn0sCQkvKiBlMyAqLworCXsweGRmLCAweDg2M2N9LAkJLyogZGYgKi8KKwl7MHhmMCwgMHg4NTA1fSwKKwl7MHgzMiwgMHg4NTBhfSwKKwl7fQorfTsKKworc3RhdGljIHZvaWQgc2Vuc29yX21hcHdyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgICBjb25zdCBfX3UxNiBzZW5zb3JtYXBbXVsyXSkKK3sKKwlpbnQgaSA9IDA7CisJX191OCB1c2J2YWxbMl07CisKKwl3aGlsZSAoc2Vuc29ybWFwW2ldWzBdKSB7CisJCXVzYnZhbFswXSA9IHNlbnNvcm1hcFtpXVsxXTsKKwkJdXNidmFsWzFdID0gc2Vuc29ybWFwW2ldWzFdID4+IDg7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcm1hcFtpXVswXSwgdXNidmFsLCAyKTsKKwkJaSsrOworCX0KK30KK3N0YXRpYyB2b2lkIGluaXRfMTYxcmV2MTJBKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzZW5zb3JfcmVzZXQoZ3NwY2FfZGV2KTsKKwl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTYxXzE2MXJldjEyQV9kYXRhMSk7CisJc2Vuc29yX21hcHdyaXRlKGdzcGNhX2RldiwgUGIxMDBfMW1hcDgzMDApOworCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1NjFfMTYxcmV2MTJBX2RhdGEyKTsKKwlzZW5zb3JfbWFwd3JpdGUoZ3NwY2FfZGV2LCBQYjEwMF8ybWFwODMwMCk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCBjYW0gKmNhbTsKKwlfX3UxNiB2ZW5kb3IsIHByb2R1Y3Q7CisJX191OCBkYXRhMSwgZGF0YTI7CisKKwkvKiBSZWFkIGZybSBnbG9iYWwgcmVnaXN0ZXIgdGhlIFVTQiBwcm9kdWN0IGFuZCB2ZW5kb3IgSURzLCBqdXN0IHRvCisJICogcHJvdmUgdGhhdCB3ZSBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGV2aWNlLiAgVGhpcyB3b3Jrcywgd2hpY2gKKwkgKiBjb25maXJtcyBhdCB3ZSBhcmUgY29tbXVuaWNhdGluZyBwcm9wZXJseSBhbmQgdGhhdCB0aGUgZGV2aWNlCisJICogaXMgYSA1NjEuICovCisJcmVnX3IoZ3NwY2FfZGV2LCAweDgxMDQsIDEpOworCWRhdGExID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCXJlZ19yKGdzcGNhX2RldiwgMHg4MTA1LCAxKTsKKwlkYXRhMiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwl2ZW5kb3IgPSAoZGF0YTIgPDwgOCkgfCBkYXRhMTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4ODEwNiwgMSk7CisJZGF0YTEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJcmVnX3IoZ3NwY2FfZGV2LCAweDgxMDcsIDEpOworCWRhdGEyID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCXByb2R1Y3QgPSAoZGF0YTIgPDwgOCkgfCBkYXRhMTsKKwlpZiAodmVuZG9yICE9IGlkLT5pZFZlbmRvciB8fCBwcm9kdWN0ICE9IGlkLT5pZFByb2R1Y3QpIHsKKwkJUERFQlVHKERfUFJPQkUsICJCYWQgdmVuZG9yIC8gcHJvZHVjdCBmcm9tIGRldmljZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3dpdGNoIChwcm9kdWN0KSB7CisJY2FzZSAweDA5Mjg6CisJY2FzZSAweDA5Mjk6CisJY2FzZSAweDA5MmE6CisJY2FzZSAweDA5MmI6CisJY2FzZSAweDA5MmM6CisJY2FzZSAweDA5MmQ6CisJY2FzZSAweDA5MmU6CisJY2FzZSAweDA5MmY6CisJY2FzZSAweDQwM2I6CisJCXNkLT5jaGlwX3JldmlzaW9uID0gUmV2MDEyQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgMHgwNTYxOgorCWNhc2UgMHgwODE1OgkJCSogPz8gaW4gc3BjYTUwOC5jCisJY2FzZSAweDQwMWE6CisJY2FzZSAweDcwMDQ6CisJY2FzZSAweDdlNTA6CisJY2FzZSAweGEwMDE6CisJY2FzZSAweGNkZWU6ICovCisJCXNkLT5jaGlwX3JldmlzaW9uID0gUmV2MDcyQTsKKwkJYnJlYWs7CisJfQorCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwljYW0tPmRldl9uYW1lID0gKGNoYXIgKikgaWQtPmRyaXZlcl9pbmZvOworCWNhbS0+ZXBhZGRyID0gMHgwMTsKKwlnc3BjYV9kZXYtPm5iYWx0ID0gNyArIDE7CS8qIGNob29zZSBhbHRlcm5hdGUgNyBmaXJzdCAqLworCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKKwljYW0tPm5tb2RlcyA9IHNpemVvZiBzaWZfbW9kZSAvIHNpemVvZiBzaWZfbW9kZVswXTsKKwlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmF1dG9nYWluID0gc2RfY3RybHNbU0RfQVVUT0dBSU5dLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IG9wZW4gdGltZSAqLworc3RhdGljIGludCBzZF9vcGVuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzd2l0Y2ggKHNkLT5jaGlwX3JldmlzaW9uKSB7CisJY2FzZSBSZXYwNzJBOgorCQlQREVCVUcoRF9TVFJFQU0sICJDaGlwIHJldmlzaW9uIGlkOiAwNzJhIik7CisJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1NjFfaW5pdF9kYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgUmV2MDEyQTogKi8KKwkJUERFQlVHKERfU1RSRUFNLCAiQ2hpcCByZXZpc2lvbiBpZDogMDEyYSIpOworCQlpbml0XzE2MXJldjEyQShnc3BjYV9kZXYpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCV9fdTggbG93YjsKKwlpbnQgZXhwb3RpbWVzOworCisJc3dpdGNoIChzZC0+Y2hpcF9yZXZpc2lvbikgeworCWNhc2UgUmV2MDcyQToKKwkJbG93YiA9IHNkLT5jb250cmFzdCA+PiA4OworCQlyZWdfd192YWwoZGV2LCBsb3diLCAweDg2NTEpOworCQlyZWdfd192YWwoZGV2LCBsb3diLCAweDg2NTIpOworCQlyZWdfd192YWwoZGV2LCBsb3diLCAweDg2NTMpOworCQlyZWdfd192YWwoZGV2LCBsb3diLCAweDg2NTQpOworCQlicmVhazsKKwljYXNlIFJldjAxMkE6IHsKKwkJX191OCBSZWc4MzkxW10gPQorCQkJeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAwIH07CisKKwkJLyogV3JpdGUgY2FtZXJhIHNlbnNvciBzZXR0aW5ncyAqLworCQlleHBvdGltZXMgPSAoc2QtPmNvbnRyYXN0ID4+IDUpICYgMHgwN2ZmOworCQlSZWc4MzkxWzBdID0gZXhwb3RpbWVzICYgMHhmZjsJLyogZXhwb3N1cmUgKi8KKwkJUmVnODM5MVsxXSA9IDB4MTggfCAoZXhwb3RpbWVzID4+IDgpOworCQlSZWc4MzkxWzJdID0gc2QtPmJyaWdodG5lc3M7CS8qIGdhaW4gKi8KKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHg4MzkxLCBSZWc4MzkxLCA4KTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHg4MzkwLCBSZWc4MzkxLCA4KTsKKwkJYnJlYWs7CisJICAgIH0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCBDbGNrOworCV9fdTggUmVnODMwN1tdID0geyAweGFhLCAweDAwIH07CisJaW50IG1vZGU7CisKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisJc3dpdGNoIChzZC0+Y2hpcF9yZXZpc2lvbikgeworCWNhc2UgUmV2MDcyQToKKwkJc3dpdGNoIChtb2RlKSB7CisJCWRlZmF1bHQ6CisvKgkJY2FzZSAwOgorCQljYXNlIDE6ICovCisJCQlDbGNrID0gMHgyNTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlDbGNrID0gMHgyMjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlDbGNrID0gMHgyMTsKKwkJCWJyZWFrOworCQl9CisJCXJlZ193X3ZhbChkZXYsIDB4ODUwMCwgbW9kZSk7CS8qIG1vZGUgKi8KKwkJcmVnX3dfdmFsKGRldiwgMHg4NzAwLCBDbGNrKTsJLyogMHgyNyBjbG9jayAqLworCQlyZWdfd192YWwoZGV2LCAweDgxMTIsIDB4MTAgfCAweDIwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgUmV2MDEyQTogKi8KKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgMDoKKwkJY2FzZSAxOgorCQkJQ2xjayA9IDB4OGE7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJQ2xjayA9IDB4ODU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUNsY2sgPSAweDgzOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG1vZGUgPD0gMSkgeworCQkJLyogVXNlIGNvbXByZXNzaW9uIG9uIDMyMHgyNDAgYW5kIGFib3ZlICovCisJCQlyZWdfd192YWwoZGV2LCAweDg1MDAsIDB4MTAgfCBtb2RlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEkgY291bGRuJ3QgZ2V0IHRoZSBjb21wcmVzc2lvbiB0byB3b3JrIGJlbG93IDMyMHgyNDAKKwkJCSAqIEZvcnR1bmF0ZWx5IGF0IHRoZXNlIHJlc29sdXRpb25zIHRoZSBiYW5kd2lkdGgKKwkJCSAqIGlzIHN1ZmZpY2llbnQgdG8gcHVzaCByYXcgZnJhbWVzIGF0IH4yMGZwcyAqLworCQkJcmVnX3dfdmFsKGRldiwgMHg4NTAwLCBtb2RlKTsKKwkJfQkJLyogLS0gcXFAa3VrdS5ldS5vcmcgKi8KKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHg4MzA3LCBSZWc4MzA3LCAyKTsKKwkJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg3MDAsIENsY2spOworCQkJCQkJLyogMHg4ZiAweDg1IDB4MjcgY2xvY2sgKi8KKwkJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDgxMTIsIDB4MWUgfCAweDIwKTsKKwkJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg1MGIsIDB4MDMpOworCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIDB4ODExMiwgMHgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgY2xvc2UgdGltZSAqLworc3RhdGljIHZvaWQgc2RfY2xvc2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4MTE0LCAwKTsKK30KKworc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgZXhwb3RpbWVzID0gMDsKKwlpbnQgcGl4ZWxjbGsgPSAwOworCWludCBnYWluRyA9IDA7CisJX191OCBSLCBHciwgR2IsIEI7CisJaW50IHk7CisJX191OCBsdW1hX21lYW4gPSAxMTA7CisJX191OCBsdW1hX2RlbHRhID0gMjA7CisJX191OCBzcHJpbmcgPSA0OworCisJc3dpdGNoIChzZC0+Y2hpcF9yZXZpc2lvbikgeworCWNhc2UgUmV2MDcyQToKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDg2MjEsIDEpOworCQlHciA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDg2MjIsIDEpOworCQlSID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlyZWdfcihnc3BjYV9kZXYsIDB4ODYyMywgMSk7CisJCUIgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXJlZ19yKGdzcGNhX2RldiwgMHg4NjI0LCAxKTsKKwkJR2IgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXkgPSAoNzcgKiBSICsgNzUgKiAoR3IgKyBHYikgKyAyOSAqIEIpID4+IDg7CisJCS8qIHU9ICgxMjgqQi0oNDMqKEdyK0diK1IpKSkgPj4gODsgKi8KKwkJLyogdj0gKDEyOCpSLSg1MyooR3IrR2IpKS0yMSpCKSA+PiA4OyAqLworCQkvKiBQREVCVUcoRF9DT05GLCJyZWFkaW5nIFkgJWQgVSAlZCBWICVkICIseSx1LHYpOyAqLworCisJCWlmICh5IDwgbHVtYV9tZWFuIC0gbHVtYV9kZWx0YSB8fAorCQkgICAgeSA+IGx1bWFfbWVhbiArIGx1bWFfZGVsdGEpIHsKKwkJCWV4cG90aW1lcyA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwOSwgMHgxMCk7CisJCQlwaXhlbGNsayA9IDB4MDgwMDsKKwkJCWV4cG90aW1lcyA9IGV4cG90aW1lcyAmIDB4MDdmZjsKKwkJCS8qIFBERUJVRyhEX1BBQ0ssCisJCQkJIkV4cG9zaXRpb24gVGltZXMgMHglMDNYIENsb2NrIDB4JTA0WCAiLAorCQkJCWV4cG90aW1lcyxwaXhlbGNsayk7ICovCisJCQlnYWluRyA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgzNSwgMHgxMCk7CisJCQkvKiBQREVCVUcoRF9QQUNLLAorCQkJCSJyZWFkaW5nIEdhaW4gcmVnaXN0ZXIgJWQiLCBnYWluRyk7ICovCisKKwkJCWV4cG90aW1lcyArPSAobHVtYV9tZWFuIC0geSkgPj4gc3ByaW5nOworCQkJZ2FpbkcgKz0gKGx1bWFfbWVhbiAtIHkpIC8gNTA7CisJCQkvKiBQREVCVUcoRF9QQUNLLAorCQkJCSJjb21wdXRlIGV4cG90aW1lcyAlZCBnYWluICVkIiwKKwkJCQlleHBvdGltZXMsZ2FpbkcpOyAqLworCisJCQlpZiAoZ2FpbkcgPiAweDNmKQorCQkJCWdhaW5HID0gMHgzZjsKKwkJCWVsc2UgaWYgKGdhaW5HIDwgNCkKKwkJCQlnYWluRyA9IDM7CisJCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCBnYWluRywgMHgzNSk7CisKKwkJCWlmIChleHBvdGltZXMgPj0gMHgwMjU2KQorCQkJCWV4cG90aW1lcyA9IDB4MDI1NjsKKwkJCWVsc2UgaWYgKGV4cG90aW1lcyA8IDQpCisJCQkJZXhwb3RpbWVzID0gMzsKKwkJCWkyY193cml0ZShnc3BjYV9kZXYsIGV4cG90aW1lcyB8IHBpeGVsY2xrLCAweDA5KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFJldjAxMkE6CisJCS8qIHNlbnNvciByZWdpc3RlcnMgaXMgYWNjZXNzIGFuZCBtZW1vcnkgbWFwcGVkIHRvIDB4ODMwMCAqLworCQkvKiByZWFkaW5kIGFsbCAweDgzeHggYmxvY2sgdGhlIHNlbnNvciAqLworCQkvKgorCQkgKiBUaGUgZGF0YSBmcm9tIHRoZSBoZWFkZXIgc2VlbSB3cm9uZyB3aGVyZSBpcyB0aGUgbHVtYQorCQkgKiBhbmQgY2hyb21hIG1lYW4gdmFsdWUKKwkJICogYXQgdGhlIG1vbWVudCBzZXQgZXhwb3N1cmUgaW4gY29udHJhc3Qgc2V0CisJCSAqLworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsIC8qIHRhcmdldCAqLworCQkJX191OCAqZGF0YSwJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIDA6CQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJZGF0YSwgMCk7CisJCWlmIChzZC0+YWdfY250ID49IDApIHsKKwkJCWlmICgtLXNkLT5hZ19jbnQgPCAwKSB7CisJCQkJc2QtPmFnX2NudCA9IEFHX0NOVF9TVEFSVDsKKwkJCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOworCQkJfQorCQl9CisJCWRhdGEgKz0gU1BDQTU2MV9PRkZTRVRfREFUQTsKKwkJbGVuIC09IFNQQ0E1NjFfT0ZGU0VUX0RBVEE7CisJCWlmIChkYXRhWzFdICYgMHgxMCkgeworCQkJLyogY29tcHJlc3NlZCBiYXllciAqLworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULAorCQkJCQlmcmFtZSwgZGF0YSwgbGVuKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHJhdyBiYXllciAod2l0aCBhIGhlYWRlciwgd2hpY2ggd2Ugc2tpcCkgKi8KKwkJCWRhdGEgKz0gMjA7CisJCQlsZW4gLT0gMjA7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQkJCQlmcmFtZSwgZGF0YSwgbGVuKTsKKwkJfQorCQlyZXR1cm47CisJY2FzZSAweGZmOgkJLyogZHJvcCAqLworLyoJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOyAqLworCQlyZXR1cm47CisJfQorCWRhdGErKzsKKwlsZW4tLTsKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCB2YWx1ZTsKKworCXN3aXRjaCAoc2QtPmNoaXBfcmV2aXNpb24pIHsKKwljYXNlIFJldjA3MkE6CisJCXZhbHVlID0gc2QtPmJyaWdodG5lc3M7CisJCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgdmFsdWUsIDB4ODYxMSk7CisJCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgdmFsdWUsIDB4ODYxMik7CisJCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgdmFsdWUsIDB4ODYxMyk7CisJCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgdmFsdWUsIDB4ODYxNCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFJldjAxMkE6ICovCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTE2IHRvdDsKKworCXN3aXRjaCAoc2QtPmNoaXBfcmV2aXNpb24pIHsKKwljYXNlIFJldjA3MkE6CisJCXRvdCA9IDA7CisJCXJlZ19yKGdzcGNhX2RldiwgMHg4NjExLCAxKTsKKwkJdG90ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDg2MTIsIDEpOworCQl0b3QgKz0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlyZWdfcihnc3BjYV9kZXYsIDB4ODYxMywgMSk7CisJCXRvdCArPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXJlZ19yKGdzcGNhX2RldiwgMHg4NjE0LCAxKTsKKwkJdG90ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJc2QtPmJyaWdodG5lc3MgPSB0b3QgPj4gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgUmV2MDEyQTogKi8KKwkJLyogbm8gd2F5IHRvIHJlYWQgc2Vuc29yIHNldHRpbmdzICovCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3UxNiB0b3Q7CisKKwlzd2l0Y2ggKHNkLT5jaGlwX3JldmlzaW9uKSB7CisJY2FzZSBSZXYwNzJBOgorCQl0b3QgPSAwOworCQlyZWdfcihnc3BjYV9kZXYsIDB4ODY1MSwgMSk7CisJCXRvdCArPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXJlZ19yKGdzcGNhX2RldiwgMHg4NjUyLCAxKTsKKwkJdG90ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDg2NTMsIDEpOworCQl0b3QgKz0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlyZWdfcihnc3BjYV9kZXYsIDB4ODY1NCwgMSk7CisJCXRvdCArPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5jb250cmFzdCA9IHRvdCA8PCA2OworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBSZXYwMTJBOiAqLworCQkvKiBubyB3YXkgdG8gcmVhZCBzZW5zb3Igc2V0dGluZ3MgKi8KKwkJYnJlYWs7CisJfQorCVBERUJVRyhEX0NPTkYsICJnZXQgY29udHJhc3QgJWQiLCBzZC0+Y29udHJhc3QpOworfQorCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnZXRjb250cmFzdChnc3BjYV9kZXYpOworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmF1dG9nYWluID0gdmFsOworCWlmICh2YWwpCisJCXNkLT5hZ19jbnQgPSBBR19DTlRfU1RBUlQ7CisJZWxzZQorCQlzZC0+YWdfY250ID0gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YXV0b2dhaW47CisJcmV0dXJuIDA7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLm9wZW4gPSBzZF9vcGVuLAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAorCS5jbG9zZSA9IHNkX2Nsb3NlLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCisjZGVmaW5lIERWTk0obmFtZSkgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSBuYW1lCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAxYSksIERWTk0oIkNyZWF0aXZlIFdlYmNhbSBWaXN0YSAoUEQxMTAwKSIpfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAzYiksICBEVk5NKCJDcmVhdGl2ZSBXZWJjYW0gVmlzdGEgKFZGMDAxMCkiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDU4LCAweDcwMDQpLCBEVk5NKCJHZW5pdXMgVmlkZW9DQU0gRXhwcmVzcyBWMiIpfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDkyOCksIERWTk0oIkxvZ2l0ZWNoIFFDIEV4cHJlc3MgRXRjaDIiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA5MjkpLCBEVk5NKCJMYWJ0ZWMgV2ViY2FtIEVsY2gyIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOTJhKSwgRFZOTSgiTG9naXRlY2ggUUMgZm9yIE5vdGVib29rIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOTJiKSwgRFZOTSgiTGFidGVjIFdlYmNhbSBQbHVzIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOTJjKSwgRFZOTSgiTG9naXRlY2ggUUMgY2hhdCBFbGNoMiIpfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDkyZCksIERWTk0oIkxvZ2l0ZWNoIFFDIEVsY2gyIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOTJlKSwgRFZOTSgiTG9naXRlY2ggUUMgRWxjaDIiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA5MmYpLCBEVk5NKCJMb2dpdGVjaCBRQyBFbGNoMiIpfSwKKwl7VVNCX0RFVklDRSgweDA0ZmMsIDB4MDU2MSksIERWTk0oIkZsZXhjYW0gMTAwIil9LAorCXtVU0JfREVWSUNFKDB4MDYwYiwgMHhhMDAxKSwgRFZOTSgiTWF4ZWxsIENvbXBhY3QgUGMgUE0zIil9LAorCXtVU0JfREVWSUNFKDB4MTBmZCwgMHg3ZTUwKSwgRFZOTSgiRmx5Q2FtIFVzYiAxMDAiKX0sCisJe1VTQl9ERVZJQ0UoMHhhYmNkLCAweGNkZWUpLCBEVk5NKCJQZXRjYW0iKX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkgICAgICAgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCisJCXJldHVybiAtMTsKKwlQREVCVUcoRF9QUk9CRSwgInYlcyByZWdpc3RlcmVkIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzhlZTBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtMCwwICsxLDU5MiBAQAorLyoKKyAqIFN5bnRlayBEVjQwMDAgKFNUSzAxNCkgc3ViZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEplYW4tRnJhbmNvaXMgTW9pbmUgKGh0dHA6Ly9tb2luZWpmLmZyZWUuZnIpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJzdGswMTQiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorI2luY2x1ZGUgImpwZWcuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK01PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN5bnRlayBEVjQwMDAgKFNUSzAxNCkgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKKwl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OworCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCXVuc2lnbmVkIGNoYXIgbGlnaHRmcmVxOworfTsKKworLyogZ2xvYmFsIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyBpbnQgc2RfcXVhbnQgPSA3OwkJLyogPD0gNCBLTyAtIDc6IGdvb2QgKGVub3VnaCEpICovCisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAxMjcKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAxMjcKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb2xvciIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09MT1JfREVGIDEyNworCQkuZGVmYXVsdF92YWx1ZSA9IENPTE9SX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbG9ycywKKwkgICAgLmdldCA9IHNkX2dldGNvbG9ycywKKwl9LAorCXsKKwkgICAgeworCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBGUkVRX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRmcmVxLAorCSAgICAuZ2V0ID0gc2RfZ2V0ZnJlcSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAwfSwKK307CisKKy8qIC0tIHJlYWQgYSByZWdpc3RlciAtLSAqLworc3RhdGljIGludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3UxNiBpbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJMHgwMCwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJMHgwMCwKKwkJCWluZGV4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCAxLAorCQkJNTAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJyZWdfciBlcnIgJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCisvKiAtLSB3cml0ZSBhIHJlZ2lzdGVyIC0tICovCitzdGF0aWMgaW50IHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCV9fdTE2IGluZGV4LCBfX3UxNiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJMHgwMSwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLAorCQkJaW5kZXgsCisJCQlOVUxMLAorCQkJMCwKKwkJCTUwMCk7CisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUiwgInJlZ193IGVyciAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyogLS0gZ2V0IGEgYnVsayB2YWx1ZSAoNCBieXRlcykgLS0gKi8KK3N0YXRpYyBpbnQgcmN2X3ZhbChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlpbnQgYWRzKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgYWxlbiwgcmV0OworCisJcmVnX3coZ3NwY2FfZGV2LCAweDYzNCwgKGFkcyA+PiAxNikgJiAweGZmKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjM1LCAoYWRzID4+IDgpICYgMHhmZik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDYzNiwgYWRzICYgMHhmZik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDYzNywgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDYzOCwgNCk7CS8qIGxlbiAmIDB4ZmYgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjM5LCAwKTsJLyogbGVuID4+IDggKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjNhLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjNiLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjMwLCA1KTsKKwlyZXQgPSB1c2JfYnVsa19tc2coZGV2LAorCQkJdXNiX3JjdmJ1bGtwaXBlKGRldiwgNSksCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsCisJCQk0LAkJLyogbGVuZ3RoICovCisJCQkmYWxlbiwKKwkJCTUwMCk7CQkvKiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLworCXJldHVybiByZXQ7Cit9CisKKy8qIC0tIHNlbmQgYSBidWxrIHZhbHVlIC0tICovCitzdGF0aWMgaW50IHNuZF92YWwoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJaW50IGFkcywKKwkJCXVuc2lnbmVkIGludCB2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCBhbGVuLCByZXQ7CisJX191OCBzZXEgPSAwOworCisJaWYgKGFkcyA9PSAweDAwM2YwOCkgeworCQlyZXQgPSByZWdfcihnc3BjYV9kZXYsIDB4MDcwNCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBrbzsKKwkJcmV0ID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA3MDUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8ga287CisJCXNlcSA9IHJldDsJCS8qIGtlZXAgdGhlIHNlcXVlbmNlIG51bWJlciAqLworCQlyZXQgPSByZWdfcihnc3BjYV9kZXYsIDB4MDY1MCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBrbzsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDY1NCwgc2VxKTsKKwl9IGVsc2UgeworCQlyZWdfdyhnc3BjYV9kZXYsIDB4NjU0LCAoYWRzID4+IDE2KSAmIDB4ZmYpOworCX0KKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjU1LCAoYWRzID4+IDgpICYgMHhmZik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDY1NiwgYWRzICYgMHhmZik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDY1NywgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDY1OCwgMHgwNCk7CS8qIHNpemUgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjU5LCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjVhLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjViLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NjUwLCA1KTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWwgPj4gMjQ7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsID4+IDE2OworCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSA9IHZhbCA+PiA4OworCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9IHZhbDsKKwlyZXQgPSB1c2JfYnVsa19tc2coZGV2LAorCQkJdXNiX3NuZGJ1bGtwaXBlKGRldiwgNiksCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsCisJCQk0LAorCQkJJmFsZW4sCisJCQk1MDApOwkvKiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLworCWlmIChyZXQgPCAwKQorCQlnb3RvIGtvOworCWlmIChhZHMgPT0gMHgwMDNmMDgpIHsKKwkJc2VxICs9IDQ7CisJCXNlcSAmPSAweDNmOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4NzA1LCBzZXEpOworCX0KKwlyZXR1cm4gcmV0Owora286CisJUERFQlVHKERfRVJSLCAic25kX3ZhbCBlcnIgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIHNldCBhIGNhbWVyYSBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBpbnQgc2V0X3BhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgIGludCBwYXJ2YWwpCit7CisJcmV0dXJuIHNuZF92YWwoZ3NwY2FfZGV2LCAweDAwM2YwOCwgcGFydmFsKTsKK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBwYXJ2YWw7CisKKwlwYXJ2YWwgPSAweDA2MDAwMDAwCQkvKiB3aGl0ZW5lc3MgKi8KKwkJKyAoc2QtPmJyaWdodG5lc3MgPDwgMTYpOworCXNldF9wYXIoZ3NwY2FfZGV2LCBwYXJ2YWwpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBwYXJ2YWw7CisKKwlwYXJ2YWwgPSAweDA3MDAwMDAwCQkvKiBjb250cmFzdCAqLworCQkrIChzZC0+Y29udHJhc3QgPDwgMTYpOworCXNldF9wYXIoZ3NwY2FfZGV2LCBwYXJ2YWwpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcGFydmFsOworCisJcGFydmFsID0gMHgwODAwMDAwMAkJLyogc2F0dXJhdGlvbiAqLworCQkrIChzZC0+Y29sb3JzIDw8IDE2KTsKKwlzZXRfcGFyKGdzcGNhX2RldiwgcGFydmFsKTsKK30KKworc3RhdGljIHZvaWQgc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2V0X3Bhcihnc3BjYV9kZXYsIHNkLT5saWdodGZyZXEgPT0gMQorCQkJPyAweDMzNjQwMDAwCQkvKiA1MCBIeiAqLworCQkJOiAweDMzNzgwMDAwKTsJCS8qIDYwIEh6ICovCit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCisJY2FtLT5kZXZfbmFtZSA9IChjaGFyICopIGlkLT5kcml2ZXJfaW5mbzsKKwljYW0tPmVwYWRkciA9IDB4MDI7CisJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGUgPSB2Z2FfbW9kZTsKKwlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Y29sb3JzID0gQ09MT1JfREVGOworCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXQ7CisKKwkvKiBjaGVjayBpZiB0aGUgZGV2aWNlIHJlc3BvbmRzICovCisJdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIDEpOworCXJldCA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNzQwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0ICE9IDB4ZmYpIHsKKwkJUERFQlVHKERfRVJSfERfU1RSRUFNLCAiaW5pdCByZWc6IDB4JTAyeCIsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0LCB2YWx1ZTsKKworCS8qIHdvcmsgb24gYWx0ZXJuYXRlIDEgKi8KKwl1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgMSk7CisKKwlzZXRfcGFyKGdzcGNhX2RldiwgMHgxMDAwMDAwMCk7CisJc2V0X3Bhcihnc3BjYV9kZXYsIDB4MDAwMDAwMDApOworCXNldF9wYXIoZ3NwY2FfZGV2LCAweDgwMDJlMDAxKTsKKwlzZXRfcGFyKGdzcGNhX2RldiwgMHgxNDAwMDAwMCk7CisJaWYgKGdzcGNhX2Rldi0+d2lkdGggPiAzMjApCisJCXZhbHVlID0gMHg4MDAyZTAwMTsJCS8qIDY0MHg0ODAgKi8KKwllbHNlCisJCXZhbHVlID0gMHg0MDAxZjAwMDsJCS8qIDMyMHgyNDAgKi8KKwlzZXRfcGFyKGdzcGNhX2RldiwgdmFsdWUpOworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LAorCQkJCQlnc3BjYV9kZXYtPmlmYWNlLAorCQkJCQlnc3BjYV9kZXYtPmFsdCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSfERfU1RSRUFNLCAic2V0IGludGYgJWQgJWQgZmFpbGVkIiwKKwkJCWdzcGNhX2Rldi0+aWZhY2UsIGdzcGNhX2Rldi0+YWx0KTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNjMwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmN2X3ZhbChnc3BjYV9kZXYsIDB4MDAwMDIwKTsJLyogPDwgKHZhbHVlIGZmIGZmIGZmIGZmKSAqLworCXJldCA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNjUwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJc25kX3ZhbChnc3BjYV9kZXYsIDB4MDAwMDIwLCAweGZmZmZmZmZmKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDYyMCwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA2MzAsIDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwNjQwLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDY1MCwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA2NjAsIDApOworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsJCS8qIHdoaXRlbmVzcyAqLworCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CQkJLyogY29udHJhc3QgKi8KKwlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsJCQkvKiBzYXR1cmF0aW9uICovCisJc2V0X3Bhcihnc3BjYV9kZXYsIDB4MDk4MDAwMDApOwkJLyogUmVkID8gKi8KKwlzZXRfcGFyKGdzcGNhX2RldiwgMHgwYTgwMDAwMCk7CQkvKiBHcmVlbiA/ICovCisJc2V0X3Bhcihnc3BjYV9kZXYsIDB4MGI4MDAwMDApOwkJLyogQmx1ZSA/ICovCisJc2V0X3Bhcihnc3BjYV9kZXYsIDB4MGQwMzAwMDApOwkJLyogR2FtbWEgPyAqLworCXNldGZyZXEoZ3NwY2FfZGV2KTsJCQkvKiBsaWdodCBmcmVxdWVuY3kgKi8KKworCS8qIHN0YXJ0IHRoZSB2aWRlbyBmbG93ICovCisJc2V0X3Bhcihnc3BjYV9kZXYsIDB4MDEwMDAwMDApOworCXNldF9wYXIoZ3NwY2FfZGV2LCAweDAxMDAwMDAwKTsKKwlQREVCVUcoRF9TVFJFQU0sICJjYW1lcmEgc3RhcnRlZCBhbHQ6IDB4JTAyeCIsIGdzcGNhX2Rldi0+YWx0KTsKKwlyZXR1cm47CitvdXQ6CisJUERFQlVHKERfRVJSfERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0IGVyciAlZCIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisKKwlzZXRfcGFyKGdzcGNhX2RldiwgMHgwMjAwMDAwMCk7CisJc2V0X3Bhcihnc3BjYV9kZXYsIDB4MDIwMDAwMDApOworCXVzYl9zZXRfaW50ZXJmYWNlKGRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgMSk7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDA2MzApOworCXJjdl92YWwoZ3NwY2FfZGV2LCAweDAwMDAyMCk7CS8qIDw8ICh2YWx1ZSBmZiBmZiBmZiBmZikgKi8KKwlyZWdfcihnc3BjYV9kZXYsIDB4MDY1MCk7CisJc25kX3ZhbChnc3BjYV9kZXYsIDB4MDAwMDIwLCAweGZmZmZmZmZmKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDYyMCwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA2MzAsIDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwNjQwLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDY1MCwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA2NjAsIDApOworCVBERUJVRyhEX1NUUkVBTSwgImNhbWVyYSBzdG9wcGVkIik7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIHZvaWQgc2RfY2xvc2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KKwkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCWludCBsZW4pCQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBmZmQ5W10gPSB7MHhmZiwgMHhkOX07CisKKwkvKiBhIGZyYW1lIHN0YXJ0cyB3aXRoOgorCSAqCS0gMHhmZiAweGZlCisJICoJLSAweDA4IDB4MDAJLSBsZW5ndGggKGxpdHRsZSBlbmRpYW4gPyEpCisJICoJLSA0IGJ5dGVzID0gc2l6ZSBvZiB3aG9sZSBmcmFtZSAoQkUgLSBpbmNsdWRpbmcgaGVhZGVyKQorCSAqCS0gMHgwMCAweDBjCisJICoJLSAweGZmIDB4ZDgKKwkgKgktIC4uCUpQRUcgaW1hZ2Ugd2l0aCBlc2NhcGUgc2VxdWVuY2VzIChmZiAwMCkKKwkgKgkJKHdpdGhvdXQgZW5kaW5nIC0gZmYgZDkpCisJICovCisJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZmUpIHsKKwkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWZmZDksIDIpOworCisJCS8qIHB1dCB0aGUgSlBFRyA0MTEgaGVhZGVyICovCisJCWpwZWdfcHV0X2hlYWRlcihnc3BjYV9kZXYsIGZyYW1lLCBzZF9xdWFudCwgMHgyMik7CisKKwkJLyogYmVnaW5uaW5nIG9mIHRoZSBmcmFtZSAqLworI2RlZmluZSBTVEtIRFJTWiAxMgorCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAorCQkJCWRhdGEgKyBTVEtIRFJTWiwgbGVuIC0gU1RLSERSU1opOworI3VuZGVmIFNUS0hEUlNaCisJCXJldHVybjsKKwl9CisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5icmlnaHRuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbnRyYXN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29sb3JzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbG9yczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5saWdodGZyZXEgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRmcmVxKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5saWdodGZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKK3sKKwlzd2l0Y2ggKG1lbnUtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKKwkJc3dpdGNoIChtZW51LT5pbmRleCkgeworCQljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjUwIEh6Iik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAyOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI2MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5vcGVuID0gc2Rfb3BlbiwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKKwkuY2xvc2UgPSBzZF9jbG9zZSwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCisjZGVmaW5lIERWTk0obmFtZSkgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSBuYW1lCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA1ZTEsIDB4MDg5MyksIERWTk0oIlN5bnRlayBEVjQwMDAiKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJaW5mbygidiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWluZm8oImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZChxdWFudCwgc2RfcXVhbnQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHF1YW50LCAiUXVhbnRpemF0aW9uIGluZGV4ICgwLi44KSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ3YmVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKQEAgLTAsMCArMSwxNjc3IEBACisvKgorICoJCVN1bnBsdXMgc3BjYTUwNChhYmMpIHNwY2E1MzMgc3BjYTUzNiBsaWJyYXJ5CisgKgkJQ29weXJpZ2h0IChDKSAyMDA1IE1pY2hlbCBYaGFhcmQgbXhoYWFyZEBtYWdpYy5mcgorICoKKyAqIFY0TDIgYnkgSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgInN1bnBsdXMiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorI2luY2x1ZGUgImpwZWcuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgOCkKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuOCI7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9TUENBNXh4IFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisKKwlfX3U4IHBhY2tldFtJU09fTUFYX1NJWkUgKyAxMjhdOworCQkJCS8qICEhIG5vIG1vcmUgdGhhbiAxMjggZmYgaW4gYW4gSVNPIHBhY2tldCAqLworCisJdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOworCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7CisJdW5zaWduZWQgY2hhciBjb2xvcnM7CisJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKKworCWNoYXIgcWluZGV4OworCWNoYXIgYnJpZGdlOworI2RlZmluZSBCUklER0VfU1BDQTUwNCAwCisjZGVmaW5lIEJSSURHRV9TUENBNTA0QiAxCisjZGVmaW5lIEJSSURHRV9TUENBNTA0QyAyCisjZGVmaW5lIEJSSURHRV9TUENBNTMzIDMKKyNkZWZpbmUgQlJJREdFX1NQQ0E1MzYgNAorCWNoYXIgc3VidHlwZTsKKyNkZWZpbmUgQWlwdGVrTWluaVBlbkNhbTEzIDEKKyNkZWZpbmUgTG9naXRlY2hDbGlja1NtYXJ0NDIwIDIKKyNkZWZpbmUgTG9naXRlY2hDbGlja1NtYXJ0ODIwIDMKKyNkZWZpbmUgTWVnYXBpeFY0IDQKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKyNkZWZpbmUgU0RfQlJJR0hUTkVTUyAwCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDB4ZmYsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJfSwKKyNkZWZpbmUgU0RfQ09OVFJBU1QgMQorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDB4ZmYsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDIwLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwl9LAorI2RlZmluZSBTRF9DT0xPUiAyCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb2xvciIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAweGZmLAorCQkuc3RlcCAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMHgxYSwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbG9ycywKKwkgICAgLmdldCA9IHNkX2dldGNvbG9ycywKKwl9LAorI2RlZmluZSBTRF9BVVRPR0FJTiAzCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgICAgPSAiQXV0byBHYWluIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCisJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAyfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGN1c3RvbV9tb2RlW10gPSB7CisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMn0sCisJezQ2NCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNDY0LAorCQkuc2l6ZWltYWdlID0gNDY0ICogNDgwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZTJbXSA9IHsKKwl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNzYsCisJCS5zaXplaW1hZ2UgPSAxNzYgKiAxNDQgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSA0fSwKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAzfSwKKwl7MzUyLCAyODgsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODggKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAyfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKK307CisKKyNkZWZpbmUgU1BDQTUwWF9PRkZTRVRfREFUQSAxMAorI2RlZmluZSBTUENBNTA0X1BDQ0FNNjAwX09GRlNFVF9TTkFQU0hPVCAzCisjZGVmaW5lIFNQQ0E1MDRfUENDQU02MDBfT0ZGU0VUX0NPTVBSRVNTIDQKKyNkZWZpbmUgU1BDQTUwNF9QQ0NBTTYwMF9PRkZTRVRfTU9ERQkgNQorI2RlZmluZSBTUENBNTA0X1BDQ0FNNjAwX09GRlNFVF9EQVRBCSAxNAorIC8qIEZyYW1lIHBhY2tldCBoZWFkZXIgb2Zmc2V0cyBmb3IgdGhlIHNwY2E1MzMgKi8KKyNkZWZpbmUgU1BDQTUzM19PRkZTRVRfREFUQSAgICAgIDE2CisjZGVmaW5lIFNQQ0E1MzNfT0ZGU0VUX0ZSQU1TRVEJMTUKKy8qIEZyYW1lIHBhY2tldCBoZWFkZXIgb2Zmc2V0cyBmb3IgdGhlIHNwY2E1MzYgKi8KKyNkZWZpbmUgU1BDQTUzNl9PRkZTRVRfREFUQSAgICAgIDQKKyNkZWZpbmUgU1BDQTUzNl9PRkZTRVRfRlJBTVNFUQkgMQorCisvKiBJbml0aWFsaXNhdGlvbiBkYXRhIGZvciB0aGUgQ3JlYXRpdmUgUEMtQ0FNIDYwMCAqLworc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDRfcGNjYW02MDBfaW5pdF9kYXRhW11bM10gPSB7CisvKgl7MHhhMCwgMHgwMDAwLCAweDA1MDN9LCAgKiBjYXB0dXJlIG1vZGUgKi8KKwl7MHgwMCwgMHgwMDAwLCAweDIwMDB9LAorCXsweDAwLCAweDAwMTMsIDB4MjMwMX0sCisJezB4MDAsIDB4MDAwMywgMHgyMDAwfSwKKwl7MHgwMCwgMHgwMDAxLCAweDIxYWN9LAorCXsweDAwLCAweDAwMDEsIDB4MjFhNn0sCisJezB4MDAsIDB4MDAwMCwgMHgyMWE3fSwJLyogYnJpZ2h0bmVzcyAqLworCXsweDAwLCAweDAwMjAsIDB4MjFhOH0sCS8qIGNvbnRyYXN0ICovCisJezB4MDAsIDB4MDAwMSwgMHgyMWFjfSwJLyogc2F0L2h1ZSAqLworCXsweDAwLCAweDAwMDAsIDB4MjFhZH0sCS8qIGh1ZSAqLworCXsweDAwLCAweDAwMWEsIDB4MjFhZX0sCS8qIHNhdHVyYXRpb24gKi8KKwl7MHgwMCwgMHgwMDAyLCAweDIxYTN9LAkvKiBnYW1tYSAqLworCXsweDMwLCAweDAxNTQsIDB4MDAwOH0sCisJezB4MzAsIDB4MDAwNCwgMHgwMDA2fSwKKwl7MHgzMCwgMHgwMjU4LCAweDAwMDl9LAorCXsweDMwLCAweDAwMDQsIDB4MDAwMH0sCisJezB4MzAsIDB4MDA5MywgMHgwMDA0fSwKKwl7MHgzMCwgMHgwMDY2LCAweDAwMDV9LAorCXsweDAwLCAweDAwMDAsIDB4MjAwMH0sCisJezB4MDAsIDB4MDAxMywgMHgyMzAxfSwKKwl7MHgwMCwgMHgwMDAzLCAweDIwMDB9LAorCXsweDAwLCAweDAwMTMsIDB4MjMwMX0sCisJezB4MDAsIDB4MDAwMywgMHgyMDAwfSwKKwl7fQorfTsKKworLyogQ3JlYXRpdmUgUEMtQ0FNIDYwMCBzcGVjaWZpYyBvcGVuIGRhdGEsIHNlbnQgYmVmb3JlIHVzaW5nIHRoZQorICogZ2VuZXJpYyBpbml0aWFsaXNhdGlvbiBkYXRhIGZyb20gc3BjYTUwNF9vcGVuX2RhdGEuCisgKi8KK3N0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA0X3BjY2FtNjAwX29wZW5fZGF0YVtdWzNdID0geworCXsweDAwLCAweDAwMDEsIDB4MjUwMX0sCisJezB4MjAsIDB4MDUwMCwgMHgwMDAxfSwJLyogc25hcHNob3QgbW9kZSAqLworCXsweDAwLCAweDAwMDMsIDB4Mjg4MH0sCisJezB4MDAsIDB4MDAwMSwgMHgyODgxfSwKKwl7fQorfTsKKworLyogSW5pdGlhbGlzYXRpb24gZGF0YSBmb3IgdGhlIGxvZ2l0ZWNoIGNsaWNrc21hcnQgNDIwICovCitzdGF0aWMgY29uc3QgX191MTYgc3BjYTUwNEFfY2xpY2tzbWFydDQyMF9pbml0X2RhdGFbXVszXSA9IHsKKy8qCXsweGEwLCAweDAwMDAsIDB4MDUwM30sICAqIGNhcHR1cmUgbW9kZSAqLworCXsweDAwLCAweDAwMDAsIDB4MjAwMH0sCisJezB4MDAsIDB4MDAxMywgMHgyMzAxfSwKKwl7MHgwMCwgMHgwMDAzLCAweDIwMDB9LAorCXsweDAwLCAweDAwMDEsIDB4MjFhY30sCisJezB4MDAsIDB4MDAwMSwgMHgyMWE2fSwKKwl7MHgwMCwgMHgwMDAwLCAweDIxYTd9LAkvKiBicmlnaHRuZXNzICovCisJezB4MDAsIDB4MDAyMCwgMHgyMWE4fSwJLyogY29udHJhc3QgKi8KKwl7MHgwMCwgMHgwMDAxLCAweDIxYWN9LAkvKiBzYXQvaHVlICovCisJezB4MDAsIDB4MDAwMCwgMHgyMWFkfSwJLyogaHVlICovCisJezB4MDAsIDB4MDAxYSwgMHgyMWFlfSwJLyogc2F0dXJhdGlvbiAqLworCXsweDAwLCAweDAwMDIsIDB4MjFhM30sCS8qIGdhbW1hICovCisJezB4MzAsIDB4MDAwNCwgMHgwMDBhfSwKKwl7MHhiMCwgMHgwMDAxLCAweDAwMDB9LAorCisKKwl7MHgwYTEsIDB4MDA4MCwgMHgwMDAxfSwKKwl7MHgzMCwgMHgwMDQ5LCAweDAwMDB9LAorCXsweDMwLCAweDAwNjAsIDB4MDAwNX0sCisJezB4MGMsIDB4MDAwNCwgMHgwMDAwfSwKKwl7MHgwMCwgMHgwMDAwLCAweDAwMDB9LAorCXsweDAwLCAweDAwMDAsIDB4MjAwMH0sCisJezB4MDAsIDB4MDAxMywgMHgyMzAxfSwKKwl7MHgwMCwgMHgwMDAzLCAweDIwMDB9LAorCXsweDAwLCAweDAwMDAsIDB4MjAwMH0sCisKKwl7fQorfTsKKworLyogY2xpY2tzbWFydCA0MjAgb3BlbiBkYXRhID8gKi8KK3N0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA0QV9jbGlja3NtYXJ0NDIwX29wZW5fZGF0YVtdWzNdID0geworCXsweDAwLCAweDAwMDEsIDB4MjUwMX0sCisJezB4MjAsIDB4MDUwMiwgMHgwMDAwfSwKKwl7MHgwNiwgMHgwMDAwLCAweDAwMDB9LAorCXsweDAwLCAweDAwMDQsIDB4Mjg4MH0sCisJezB4MDAsIDB4MDAwMSwgMHgyODgxfSwKKy8qIGxvb2sgbGlrZSBzZXR0aW5nIGEgcVRhYmxlICovCisJezB4MDAsIDB4MDAwNiwgMHgyODAwfSwKKwl7MHgwMCwgMHgwMDA0LCAweDI4MDF9LAorCXsweDAwLCAweDAwMDQsIDB4MjgwMn0sCisJezB4MDAsIDB4MDAwNiwgMHgyODAzfSwKKwl7MHgwMCwgMHgwMDBhLCAweDI4MDR9LAorCXsweDAwLCAweDAwMTAsIDB4MjgwNX0sCisJezB4MDAsIDB4MDAxNCwgMHgyODA2fSwKKwl7MHgwMCwgMHgwMDE4LCAweDI4MDd9LAorCXsweDAwLCAweDAwMDUsIDB4MjgwOH0sCisJezB4MDAsIDB4MDAwNSwgMHgyODA5fSwKKwl7MHgwMCwgMHgwMDA2LCAweDI4MGF9LAorCXsweDAwLCAweDAwMDgsIDB4MjgwYn0sCisJezB4MDAsIDB4MDAwYSwgMHgyODBjfSwKKwl7MHgwMCwgMHgwMDE3LCAweDI4MGR9LAorCXsweDAwLCAweDAwMTgsIDB4MjgwZX0sCisJezB4MDAsIDB4MDAxNiwgMHgyODBmfSwKKworCXsweDAwLCAweDAwMDYsIDB4MjgxMH0sCisJezB4MDAsIDB4MDAwNSwgMHgyODExfSwKKwl7MHgwMCwgMHgwMDA2LCAweDI4MTJ9LAorCXsweDAwLCAweDAwMGEsIDB4MjgxM30sCisJezB4MDAsIDB4MDAxMCwgMHgyODE0fSwKKwl7MHgwMCwgMHgwMDE3LCAweDI4MTV9LAorCXsweDAwLCAweDAwMWMsIDB4MjgxNn0sCisJezB4MDAsIDB4MDAxNiwgMHgyODE3fSwKKwl7MHgwMCwgMHgwMDA2LCAweDI4MTh9LAorCXsweDAwLCAweDAwMDcsIDB4MjgxOX0sCisJezB4MDAsIDB4MDAwOSwgMHgyODFhfSwKKwl7MHgwMCwgMHgwMDBjLCAweDI4MWJ9LAorCXsweDAwLCAweDAwMTQsIDB4MjgxY30sCisJezB4MDAsIDB4MDAyMywgMHgyODFkfSwKKwl7MHgwMCwgMHgwMDIwLCAweDI4MWV9LAorCXsweDAwLCAweDAwMTksIDB4MjgxZn0sCisKKwl7MHgwMCwgMHgwMDA3LCAweDI4MjB9LAorCXsweDAwLCAweDAwMDksIDB4MjgyMX0sCisJezB4MDAsIDB4MDAwZiwgMHgyODIyfSwKKwl7MHgwMCwgMHgwMDE2LCAweDI4MjN9LAorCXsweDAwLCAweDAwMWIsIDB4MjgyNH0sCisJezB4MDAsIDB4MDAyYywgMHgyODI1fSwKKwl7MHgwMCwgMHgwMDI5LCAweDI4MjZ9LAorCXsweDAwLCAweDAwMWYsIDB4MjgyN30sCisJezB4MDAsIDB4MDAwYSwgMHgyODI4fSwKKwl7MHgwMCwgMHgwMDBlLCAweDI4Mjl9LAorCXsweDAwLCAweDAwMTYsIDB4MjgyYX0sCisJezB4MDAsIDB4MDAxYSwgMHgyODJifSwKKwl7MHgwMCwgMHgwMDIwLCAweDI4MmN9LAorCXsweDAwLCAweDAwMmEsIDB4MjgyZH0sCisJezB4MDAsIDB4MDAyZCwgMHgyODJlfSwKKwl7MHgwMCwgMHgwMDI1LCAweDI4MmZ9LAorCisJezB4MDAsIDB4MDAxNCwgMHgyODMwfSwKKwl7MHgwMCwgMHgwMDFhLCAweDI4MzF9LAorCXsweDAwLCAweDAwMWYsIDB4MjgzMn0sCisJezB4MDAsIDB4MDAyMywgMHgyODMzfSwKKwl7MHgwMCwgMHgwMDI5LCAweDI4MzR9LAorCXsweDAwLCAweDAwMzAsIDB4MjgzNX0sCisJezB4MDAsIDB4MDAzMCwgMHgyODM2fSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4Mzd9LAorCXsweDAwLCAweDAwMWQsIDB4MjgzOH0sCisJezB4MDAsIDB4MDAyNSwgMHgyODM5fSwKKwl7MHgwMCwgMHgwMDI2LCAweDI4M2F9LAorCXsweDAwLCAweDAwMjcsIDB4MjgzYn0sCisJezB4MDAsIDB4MDAyZCwgMHgyODNjfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4M2R9LAorCXsweDAwLCAweDAwMjksIDB4MjgzZX0sCisJezB4MDAsIDB4MDAyOCwgMHgyODNmfSwKKworCXsweDAwLCAweDAwMDcsIDB4Mjg0MH0sCisJezB4MDAsIDB4MDAwNywgMHgyODQxfSwKKwl7MHgwMCwgMHgwMDBhLCAweDI4NDJ9LAorCXsweDAwLCAweDAwMTMsIDB4Mjg0M30sCisJezB4MDAsIDB4MDAyOCwgMHgyODQ0fSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NDV9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg0Nn0sCisJezB4MDAsIDB4MDAyOCwgMHgyODQ3fSwKKwl7MHgwMCwgMHgwMDA3LCAweDI4NDh9LAorCXsweDAwLCAweDAwMDgsIDB4Mjg0OX0sCisJezB4MDAsIDB4MDAwYSwgMHgyODRhfSwKKwl7MHgwMCwgMHgwMDFhLCAweDI4NGJ9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg0Y30sCisJezB4MDAsIDB4MDAyOCwgMHgyODRkfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NGV9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg0Zn0sCisKKwl7MHgwMCwgMHgwMDBhLCAweDI4NTB9LAorCXsweDAwLCAweDAwMGEsIDB4Mjg1MX0sCisJezB4MDAsIDB4MDAxNiwgMHgyODUyfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NTN9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg1NH0sCisJezB4MDAsIDB4MDAyOCwgMHgyODU1fSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NTZ9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg1N30sCisJezB4MDAsIDB4MDAxMywgMHgyODU4fSwKKwl7MHgwMCwgMHgwMDFhLCAweDI4NTl9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg1YX0sCisJezB4MDAsIDB4MDAyOCwgMHgyODVifSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NWN9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg1ZH0sCisJezB4MDAsIDB4MDAyOCwgMHgyODVlfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NWZ9LAorCisJezB4MDAsIDB4MDAyOCwgMHgyODYwfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NjF9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg2Mn0sCisJezB4MDAsIDB4MDAyOCwgMHgyODYzfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NjR9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg2NX0sCisJezB4MDAsIDB4MDAyOCwgMHgyODY2fSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4Njd9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg2OH0sCisJezB4MDAsIDB4MDAyOCwgMHgyODY5fSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NmF9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg2Yn0sCisJezB4MDAsIDB4MDAyOCwgMHgyODZjfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NmR9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg2ZX0sCisJezB4MDAsIDB4MDAyOCwgMHgyODZmfSwKKworCXsweDAwLCAweDAwMjgsIDB4Mjg3MH0sCisJezB4MDAsIDB4MDAyOCwgMHgyODcxfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NzJ9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg3M30sCisJezB4MDAsIDB4MDAyOCwgMHgyODc0fSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4NzV9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg3Nn0sCisJezB4MDAsIDB4MDAyOCwgMHgyODc3fSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4Nzh9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg3OX0sCisJezB4MDAsIDB4MDAyOCwgMHgyODdhfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4N2J9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg3Y30sCisJezB4MDAsIDB4MDAyOCwgMHgyODdkfSwKKwl7MHgwMCwgMHgwMDI4LCAweDI4N2V9LAorCXsweDAwLCAweDAwMjgsIDB4Mjg3Zn0sCisKKwl7MHhhMCwgMHgwMDAwLCAweDA1MDN9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgX191OCBxdGFibGVfY3JlYXRpdmVfcGNjYW1bMl1bNjRdID0geworCXsJCQkJLyogUS10YWJsZSBZLWNvbXBvbmVudHMgKi8KKwkgMHgwNSwgMHgwMywgMHgwMywgMHgwNSwgMHgwNywgMHgwYywgMHgwZiwgMHgxMiwKKwkgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwOCwgMHgxMSwgMHgxMiwgMHgxMSwKKwkgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNywgMHgwYywgMHgxMSwgMHgxNSwgMHgxMSwKKwkgMHgwNCwgMHgwNSwgMHgwNywgMHgwOSwgMHgwZiwgMHgxYSwgMHgxOCwgMHgxMywKKwkgMHgwNSwgMHgwNywgMHgwYiwgMHgxMSwgMHgxNCwgMHgyMSwgMHgxZiwgMHgxNywKKwkgMHgwNywgMHgwYiwgMHgxMSwgMHgxMywgMHgxOCwgMHgxZiwgMHgyMiwgMHgxYywKKwkgMHgwZiwgMHgxMywgMHgxNywgMHgxYSwgMHgxZiwgMHgyNCwgMHgyNCwgMHgxZSwKKwkgMHgxNiwgMHgxYywgMHgxZCwgMHgxZCwgMHgyMiwgMHgxZSwgMHgxZiwgMHgxZX0sCisJewkJCQkvKiBRLXRhYmxlIEMtY29tcG9uZW50cyAqLworCSAweDA1LCAweDA1LCAweDA3LCAweDBlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLAorCSAweDA1LCAweDA2LCAweDA4LCAweDE0LCAweDFlLCAweDFlLCAweDFlLCAweDFlLAorCSAweDA3LCAweDA4LCAweDExLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLAorCSAweDBlLCAweDE0LCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLAorCSAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLAorCSAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLAorCSAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLAorCSAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlLCAweDFlfQorfTsKKworLyogRklYTUU6IFRoaXMgUS10YWJsZSBpcyBpZGVudGljYWwgdG8gdGhlIENyZWF0aXZlIFBDLUNBTSBvbmUsCisgKgkJZXhjZXB0IGZvciBvbmUgYnl0ZS4gUG9zc2libHkgYSB0eXBvPworICoJCU5XRzogMTgvMDUvMjAwMy4KKyAqLworc3RhdGljIGNvbnN0IF9fdTggcXRhYmxlX3NwY2E1MDRfZGVmYXVsdFsyXVs2NF0gPSB7CisJewkJCQkvKiBRLXRhYmxlIFktY29tcG9uZW50cyAqLworCSAweDA1LCAweDAzLCAweDAzLCAweDA1LCAweDA3LCAweDBjLCAweDBmLCAweDEyLAorCSAweDA0LCAweDA0LCAweDA0LCAweDA2LCAweDA4LCAweDExLCAweDEyLCAweDExLAorCSAweDA0LCAweDA0LCAweDA1LCAweDA3LCAweDBjLCAweDExLCAweDE1LCAweDExLAorCSAweDA0LCAweDA1LCAweDA3LCAweDA5LCAweDBmLCAweDFhLCAweDE4LCAweDEzLAorCSAweDA1LCAweDA3LCAweDBiLCAweDExLCAweDE0LCAweDIxLCAweDFmLCAweDE3LAorCSAweDA3LCAweDBiLCAweDExLCAweDEzLCAweDE4LCAweDFmLCAweDIyLCAweDFjLAorCSAweDBmLCAweDEzLCAweDE3LCAweDFhLCAweDFmLCAweDI0LCAweDI0LCAweDFlLAorCSAweDE2LCAweDFjLCAweDFkLCAweDFkLCAweDFkIC8qIDB4MjIgKi8gLCAweDFlLCAweDFmLCAweDFlLAorCSB9LAorCXsJCQkJLyogUS10YWJsZSBDLWNvbXBvbmVudHMgKi8KKwkgMHgwNSwgMHgwNSwgMHgwNywgMHgwZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgwNSwgMHgwNiwgMHgwOCwgMHgxNCwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgwNywgMHgwOCwgMHgxMSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgwZSwgMHgxNCwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwKKwkgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZX0KK307CisKK3N0YXRpYyB2b2lkIHJlZ19yKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkgICBfX3UxNiByZXEsCisJCQkgICBfX3UxNiBpbmRleCwKKwkJCSAgIF9fdTggKmJ1ZmZlciwgX191MTYgbGVuZ3RoKQoreworCXVzYl9jb250cm9sX21zZyhkZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCXJlcSwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJMCwJCS8qIHZhbHVlICovCisJCQlpbmRleCwgYnVmZmVyLCBsZW5ndGgsCisJCQk1MDApOworfQorCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQkJICAgIF9fdTE2IHJlcSwKKwkJCSAgICBfX3UxNiB2YWx1ZSwKKwkJCSAgICBfX3UxNiBpbmRleCwKKwkJCSAgICBfX3U4ICpidWZmZXIsIF9fdTE2IGxlbmd0aCkKK3sKKwl1c2JfY29udHJvbF9tc2coZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQlyZXEsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwgaW5kZXgsIGJ1ZmZlciwgbGVuZ3RoLAorCQkJNTAwKTsKK30KKworLyogd3JpdGUgcmVxIC8gaW5kZXggLyB2YWx1ZSAqLworc3RhdGljIGludCByZWdfd19yaXYoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJICAgICBfX3UxNiByZXEsIF9fdTE2IGluZGV4LCBfX3UxNiB2YWx1ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJdmFsdWUsIGluZGV4LCBOVUxMLCAwLCA1MDApOworCVBERUJVRyhEX1VTQk8sICJyZWcgd3JpdGU6IDB4JTAyeCwweCUwMng6MHglMDJ4LCAlZCIsCisJCXJlcSwgaW5kZXgsIHZhbHVlLCByZXQpOworCWlmIChyZXQgPCAwKQorCQlQREVCVUcoRF9FUlIsICJyZWcgd3JpdGU6IGVycm9yICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiByZWFkIDEgYnl0ZSAqLworc3RhdGljIGludCByZWdfcl8xKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCV9fdTE2IHZhbHVlKQkvKiB3VmFsdWUgKi8KK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTB4MjAsCQkJLyogcmVxdWVzdCAqLworCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwKKwkJCTAsCQkJLyogaW5kZXggKi8KKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCTUwMCk7CQkJLyogdGltZW91dCAqLworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ19yXzEgZXJyICVkIiwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07Cit9CisKKy8qIHJlYWQgMSBvciAyIGJ5dGVzIC0gcmV0dXJucyA8IDAgaWYgZXJyb3IgKi8KK3N0YXRpYyBpbnQgcmVnX3JfMTIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191MTYgcmVxLAkvKiBiUmVxdWVzdCAqLworCQkJX191MTYgaW5kZXgsCS8qIHdJbmRleCAqLworCQkJX191MTYgbGVuZ3RoKQkvKiB3TGVuZ3RoICgxIG9yIDIgb25seSkgKi8KK3sKKwlpbnQgcmV0OworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkJLyogdmFsdWUgKi8KKwkJCWluZGV4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW5ndGgsCisJCQk1MDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ19yZWFkIGVyciAlZCIsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIChnc3BjYV9kZXYtPnVzYl9idWZbMV0gPDwgOCkgKyBnc3BjYV9kZXYtPnVzYl9idWZbMF07Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfdmVjdG9yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IF9fdTE2IGRhdGFbXVszXSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldCwgaSA9IDA7CisKKwl3aGlsZSAoZGF0YVtpXVswXSAhPSAwIHx8IGRhdGFbaV1bMV0gIT0gMCB8fCBkYXRhW2ldWzJdICE9IDApIHsKKwkJcmV0ID0gcmVnX3dfcml2KGRldiwgZGF0YVtpXVswXSwgZGF0YVtpXVsyXSwgZGF0YVtpXVsxXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlQREVCVUcoRF9FUlIsCisJCQkJIlJlZ2lzdGVyIHdyaXRlIGZhaWxlZCBmb3IgMHgleCwweCV4LDB4JXgiLAorCQkJCWRhdGFbaV1bMF0sIGRhdGFbaV1bMV0sIGRhdGFbaV1bMl0pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwY2E1MHhfc2V0dXBfcXRhYmxlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQl1bnNpZ25lZCBpbnQgcmVxdWVzdCwKKwkJCQl1bnNpZ25lZCBpbnQgeWJhc2UsCisJCQkJdW5zaWduZWQgaW50IGNiYXNlLAorCQkJCWNvbnN0IF9fdTggcXRhYmxlWzJdWzY0XSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IGksIGVycjsKKworCS8qIGxvb3Agb3ZlciB5IGNvbXBvbmVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQllcnIgPSByZWdfd19yaXYoZGV2LCByZXF1ZXN0LCB5YmFzZSArIGksIHF0YWJsZVswXVtpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBsb29wIG92ZXIgYyBjb21wb25lbnRzICovCisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJZXJyID0gcmVnX3dfcml2KGRldiwgcmVxdWVzdCwgY2Jhc2UgKyBpLCBxdGFibGVbMV1baV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGNhNTA0X2Fja25vd2xlZGdlZF9jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgICAgX191MTYgcmVxLCBfX3UxNiBpZHgsIF9fdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJX191OCBub3Rkb25lOworCisJcmVnX3dfcml2KGRldiwgcmVxLCBpZHgsIHZhbCk7CisJbm90ZG9uZSA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMSwgMHgwMDAxLCAxKTsKKwlyZWdfd19yaXYoZGV2LCByZXEsIGlkeCwgdmFsKTsKKworCVBERUJVRyhEX0ZSQU0sICJiZWZvcmUgd2FpdCAweCV4Iiwgbm90ZG9uZSk7CisKKwltc2xlZXAoMjAwKTsKKwlub3Rkb25lID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAxLCAweDAwMDEsIDEpOworCVBERUJVRyhEX0ZSQU0sICJhZnRlciB3YWl0IDB4JXgiLCBub3Rkb25lKTsKK30KKworc3RhdGljIHZvaWQgc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191MTYgcmVxLAorCQkJX191MTYgaWR4LCBfX3UxNiB2YWwsIF9fdTggc3RhdCwgX191OCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJX191OCBzdGF0dXM7CisJX191OCBlbmRjb2RlOworCisJcmVnX3dfcml2KGRldiwgcmVxLCBpZHgsIHZhbCk7CisJc3RhdHVzID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAxLCAweDAwMDEsIDEpOworCWVuZGNvZGUgPSBzdGF0OworCVBERUJVRyhEX0ZSQU0sICJTdGF0dXMgMHgleCBOZWVkIDB4JXgiLCBzdGF0dXMsIHN0YXQpOworCWlmICghY291bnQpCisJCXJldHVybjsKKwljb3VudCA9IDIwMDsKKwl3aGlsZSAoLS1jb3VudCA+IDApIHsKKwkJbXNsZWVwKDEwKTsKKwkJLyogZ3NtYXJ0IG1pbmkyIHdyaXRlIGEgZWFjaCB3YWl0IHNldHRpbmcgMSBtcyBpcyBlbm91Z2h0ICovCisvKgkJcmVnX3dfcml2KGRldiwgcmVxLCBpZHgsIHZhbCk7ICovCisJCXN0YXR1cyA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMSwgMHgwMDAxLCAxKTsKKwkJaWYgKHN0YXR1cyA9PSBlbmRjb2RlKSB7CisJCQlQREVCVUcoRF9GUkFNLCAic3RhdHVzIDB4JXggYWZ0ZXIgd2FpdCAweCV4IiwKKwkJCQlzdGF0dXMsIDIwMCAtIGNvdW50KTsKKwkJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgY291bnQgPSAxMDsKKworCXdoaWxlICgtLWNvdW50ID4gMCkgeworCQlyZWdfcihnc3BjYV9kZXYtPmRldiwgMHgyMSwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsKKwkJaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gJiAweDAxKSA9PSAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMCk7CisJfQorCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07Cit9CisKK3N0YXRpYyB2b2lkIHNwY2E1MDRCX1dhaXRDbWRTdGF0dXMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgY291bnQgPSA1MDsKKworCXdoaWxlICgtLWNvdW50ID4gMCkgeworCQlyZWdfcihkZXYsIDB4MjEsIDEsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSk7CisJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMCkgeworCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMDsKKwkJCXJlZ193KGRldiwgMHgyMSwgMCwgMSwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsKKwkJCXJlZ19yKGRldiwgMHgyMSwgMSwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsKKwkJCXNwY2E1MDRCX1BvbGxpbmdEYXRhUmVhZHkoZ3NwY2FfZGV2KTsKKwkJCWJyZWFrOworCQl9CisJCW1zbGVlcCgxMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcGNhNTB4X0dldEZpcm13YXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJX191OCAqZGF0YTsKKworCWRhdGEgPSBrbWFsbG9jKDY0LCBHRlBfS0VSTkVMKTsKKwlyZWdfcihkZXYsIDB4MjAsIDAsIGRhdGEsIDUpOworCVBERUJVRyhEX1NUUkVBTSwgIkZpcm1XYXJlIDogJWQgJWQgJWQgJWQgJWQgIiwKKwkJZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XSk7CisJcmVnX3IoZGV2LCAweDIzLCAwLCBkYXRhLCA2NCk7CisJcmVnX3IoZGV2LCAweDIzLCAxLCBkYXRhLCA2NCk7CisJa2ZyZWUoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHNwY2E1MDRCX1NldFNpemVUeXBlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCV9fdTggU2l6ZTsKKwlfX3U4IFR5cGU7CisJaW50IHJjOworCisJU2l6ZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCVR5cGUgPSAwOworCXN3aXRjaCAoc2QtPmJyaWRnZSkgeworCWNhc2UgQlJJREdFX1NQQ0E1MzM6CisJCXJlZ193KGRldiwgMHgzMSwgMCwgMCwgTlVMTCwgMCk7CisJCXNwY2E1MDRCX1dhaXRDbWRTdGF0dXMoZ3NwY2FfZGV2KTsKKwkJcmMgPSBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CisJCXNwY2E1MHhfR2V0RmlybXdhcmUoZ3NwY2FfZGV2KTsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMjsJCQkvKiB0eXBlICovCisJCXJlZ193KGRldiwgMHgyNCwgMCwgOCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsKKwkJcmVnX3IoZGV2LCAweDI0LCA4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEpOworCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IFNpemU7CisJCXJlZ193KGRldiwgMHgyNSwgMCwgNCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsKKwkJcmVnX3IoZGV2LCAweDI1LCA0LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEpOwkvKiBzaXplICovCisJCXJjID0gc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOworCisJCS8qIEluaXQgdGhlIGNhbSB3aWR0aCBoZWlnaHQgd2l0aCBzb21lIHZhbHVlcyBnZXQgb24gaW5pdCA/ICovCisJCXJlZ193KGRldiwgMHgzMSwgMCwgNCwgTlVMTCwgMCk7CisJCXNwY2E1MDRCX1dhaXRDbWRTdGF0dXMoZ3NwY2FfZGV2KTsKKwkJcmMgPSBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKiBjYXNlIEJSSURHRV9TUENBNTA0QjogKi8KKy8qIGNhc2UgQlJJREdFX1NQQ0E1MzY6ICovCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IFNpemU7CisJCXJlZ193KGRldiwgMHgyNSwgMCwgNCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsKKwkJcmVnX3IoZGV2LCAweDI1LCA0LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEpOwkvKiBzaXplICovCisJCVR5cGUgPSA2OworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSBUeXBlOworCQlyZWdfdyhkZXYsIDB4MjcsIDAsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSk7CisJCXJlZ19yKGRldiwgMHgyNywgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsJLyogdHlwZSAqLworCQlyYyA9IHNwY2E1MDRCX1BvbGxpbmdEYXRhUmVhZHkoZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU1BDQTUwNDoKKwkJU2l6ZSArPSAzOworCQlpZiAoc2QtPnN1YnR5cGUgPT0gQWlwdGVrTWluaVBlbkNhbTEzKSB7CisJCQkvKiBzcGNhNTA0YSBhaXB0ZWsgKi8KKwkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwKKwkJCQkJCTB4MDgsIFNpemUsIDAsCisJCQkJCQkweDgwIHwgKFNpemUgJiAweDBmKSwgMSk7CisJCQlzcGNhNTA0QV9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsCisJCQkJCQkJMSwgMywgMCwgMHg5ZiwgMCk7CisJCX0gZWxzZSB7CisJCQlzcGNhNTA0X2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgwOCwgU2l6ZSwgMCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU1BDQTUwNEM6CisJCS8qIGNhcHR1cmUgbW9kZSAqLworCQlyZWdfd19yaXYoZGV2LCAweGEwLCAoMHgwNTAwIHwgKFNpemUgJiAweDBmKSksIDB4MDApOworCQlyZWdfd19yaXYoZGV2LCAweDIwLCAweDAxLCAweDA1MDAgfCAoU2l6ZSAmIDB4MGYpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcGNhNTA0X3dhaXRfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgY250OworCisJY250ID0gMjU2OworCXdoaWxlICgtLWNudCA+IDApIHsKKwkJLyogV2l0aCB0aGlzIHdlIGdldCB0aGUgc3RhdHVzLCB3aGVuIHJldHVybiAwIGl0J3MgYWxsIG9rICovCisJCWlmIChyZWdfcl8xMihnc3BjYV9kZXYsIDB4MDYsIDB4MDAsIDEpID09IDApCisJCQlyZXR1cm47CisJCW1zbGVlcCgxMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcGNhNTA0Ql9zZXRRdGFibGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDM7CisJcmVnX3coZGV2LCAweDI2LCAwLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEpOworCXJlZ19yKGRldiwgMHgyNiwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsKKwlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHNwNXh4X2luaXRDb250QnJpZ0h1ZVJlZ2lzdGVycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcG9sbHJlZyA9IDE7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9TUENBNTA0OgorCWNhc2UgQlJJREdFX1NQQ0E1MDRDOgorCQlwb2xscmVnID0gMDsKKwkJLyogZmFsbCB0aHJ1ICovCisJZGVmYXVsdDoKKy8qCWNhc2UgQlJJREdFX1NQQ0E1MzM6ICovCisvKgljYXNlIEJSSURHRV9TUENBNTA0QjogKi8KKwkJcmVnX3coZGV2LCAwLCAwLCAweDIxYTcsIE5VTEwsIDApOwkvKiBicmlnaHRuZXNzICovCisJCXJlZ193KGRldiwgMCwgMHgyMCwgMHgyMWE4LCBOVUxMLCAwKTsJLyogY29udHJhc3QgKi8KKwkJcmVnX3coZGV2LCAwLCAwLCAweDIxYWQsIE5VTEwsIDApOwkvKiBodWUgKi8KKwkJcmVnX3coZGV2LCAwLCAxLCAweDIxYWMsIE5VTEwsIDApOwkvKiBzYXQvaHVlICovCisJCXJlZ193KGRldiwgMCwgMHgyMCwgMHgyMWFlLCBOVUxMLCAwKTsJLyogc2F0dXJhdGlvbiAqLworCQlyZWdfdyhkZXYsIDAsIDAsIDB4MjFhMywgTlVMTCwgMCk7CS8qIGdhbW1hICovCisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NQQ0E1MzY6CisJCXJlZ193KGRldiwgMCwgMCwgMHgyMGYwLCBOVUxMLCAwKTsKKwkJcmVnX3coZGV2LCAwLCAweDIxLCAweDIwZjEsIE5VTEwsIDApOworCQlyZWdfdyhkZXYsIDAsIDB4NDAsIDB4MjBmNSwgTlVMTCwgMCk7CisJCXJlZ193KGRldiwgMCwgMSwgMHgyMGY0LCBOVUxMLCAwKTsKKwkJcmVnX3coZGV2LCAwLCAweDQwLCAweDIwZjYsIE5VTEwsIDApOworCQlyZWdfdyhkZXYsIDAsIDAsIDB4MjA4OSwgTlVMTCwgMCk7CisJCWJyZWFrOworCX0KKwlpZiAocG9sbHJlZykKKwkJc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisJX191MTYgdmVuZG9yOworCV9fdTE2IHByb2R1Y3Q7CisJX191OCBmdzsKKworCXZlbmRvciA9IGlkLT5pZFZlbmRvcjsKKwlwcm9kdWN0ID0gaWQtPmlkUHJvZHVjdDsKKwlzd2l0Y2ggKHZlbmRvcikgeworCWNhc2UgMHgwNDFlOgkJLyogQ3JlYXRpdmUgY2FtZXJhcyAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHg0MDBiOiAqLworLyoJCWNhc2UgMHg0MDEyOiAqLworLyoJCWNhc2UgMHg0MDEzOiAqLworLyoJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MDRDOyAqLworLyoJCQlicmVhazsgKi8KKy8qCQl9ICovCisJCWJyZWFrOworCWNhc2UgMHgwNDU4OgkJLyogR2VuaXVzIEtZRSBjYW1lcmFzICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDcwMDY6ICovCisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MDRCOworLyoJCQlicmVhazsgKi8KKy8qCQl9ICovCisJCWJyZWFrOworCWNhc2UgMHgwNDYxOgkJLyogTWljcm9Jbm5vdmF0aW9uICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDA4MjE6ICovCisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDA0NmQ6CQkvKiBMb2dpdGVjaCBMYWJ0ZWMgKi8KKwkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHgwOTA1OgorCQkJc2QtPnN1YnR5cGUgPSBMb2dpdGVjaENsaWNrU21hcnQ4MjA7CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisJCQlicmVhazsKKwkJY2FzZSAweDA5NjA6CisJCQlzZC0+c3VidHlwZSA9IExvZ2l0ZWNoQ2xpY2tTbWFydDQyMDsKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU1BDQTUwNEM7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MDQ3MToJCQkJLyogUGhpbGlwcyAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgwMzIyOiAqLworCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTA0QjsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDRhNToJCS8qIEJlbnEgKi8KKwkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHgzMDAzOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTA0QjsKKwkJCWJyZWFrOworCQljYXNlIDB4MzAwODoKKwkJY2FzZSAweDMwMGE6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MDRmMToJCS8qIEpWQyAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgxMDAxOiAqLworCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTA0QjsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDRmYzoJCS8qIFN1blBsdXMgKi8KKwkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHg1MDBjOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTA0QjsKKwkJCWJyZWFrOworCQljYXNlIDB4NTA0YToKKy8qIHRyeSB0byBnZXQgdGhlIGZpcm13YXJlIGFzIHNvbWUgY2FtIGFuc3dlciAyLjAuMS4yLjIKKyAqIGFuZCBzaG91bGQgYmUgYSBzcGNhNTA0YiB0aGVuIG92ZXJ3cml0ZSB0aGF0IHNldHRpbmcgKi8KKwkJCXJlZ19yKGRldiwgMHgyMCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsKKwkJCWZ3ID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQkJaWYgKGZ3ID09IDEpIHsKKwkJCQlzZC0+c3VidHlwZSA9IEFpcHRla01pbmlQZW5DYW0xMzsKKwkJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MDQ7CisJCQl9IGVsc2UgaWYgKGZ3ID09IDIpIHsKKwkJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MDRCOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlicmVhazsKKwkJY2FzZSAweDUwNGI6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MDRCOworCQkJYnJlYWs7CisJCWNhc2UgMHg1MzMwOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTMzOworCQkJYnJlYWs7CisJCWNhc2UgMHg1MzYwOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTM2OworCQkJYnJlYWs7CisJCWNhc2UgMHhmZmZmOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTA0QjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgMHgwNTJiOgkJLyogPz8gTWVnYXBpeCAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgxNTEzOiAqLworCQkJc2QtPnN1YnR5cGUgPSBNZWdhcGl4VjQ7CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDA1NDY6CQkvKiBQb2xhcm9pZCAqLworCQlzd2l0Y2ggKHByb2R1Y3QpIHsKKwkJY2FzZSAweDMxNTU6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisJCQlicmVhazsKKwkJY2FzZSAweDMxOTE6CisJCWNhc2UgMHgzMjczOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTA0QjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgMHgwNTVmOgkJLyogTXVzdGVrIGNhbWVyYXMgKi8KKwkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHhjMjExOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTM2OworCQkJYnJlYWs7CisJCWNhc2UgMHhjMjMwOgorCQljYXNlIDB4YzIzMjoKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU1BDQTUzMzsKKwkJCWJyZWFrOworCQljYXNlIDB4YzM2MDoKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU1BDQTUzNjsKKwkJCWJyZWFrOworCQljYXNlIDB4YzQyMDoKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU1BDQTUwNDsKKwkJCWJyZWFrOworCQljYXNlIDB4YzQzMDoKKwkJY2FzZSAweGM0NDA6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisJCQlicmVhazsKKwkJY2FzZSAweGM1MjA6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MDQ7CisJCQlicmVhazsKKwkJY2FzZSAweGM1MzA6CisJCWNhc2UgMHhjNTQwOgorCQljYXNlIDB4YzYzMDoKKwkJY2FzZSAweGM2NTA6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MDVkYToJCS8qIERpZ2l0YWwgRHJlYW0gY2FtZXJhcyAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHgxMDE4OiAqLworCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTA0QjsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwljYXNlIDB4MDZkNjoJCS8qIFRydXN0ICovCisvKgkJc3dpdGNoIChwcm9kdWN0KSB7ICovCisvKgkJY2FzZSAweDAwMzE6ICovCisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CS8qIFNQQ0E1MzNBICovCisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJY2FzZSAweDA3MzM6CS8qIFJlYmFkZ2VkIFZpZXdRdWVzdCAoSW50ZWwpIGFuZCBWaWV3UXVlc3QgY2FtZXJhcyAqLworCQlzd2l0Y2ggKHByb2R1Y3QpIHsKKwkJY2FzZSAweDEzMTE6CisJCWNhc2UgMHgxMzE0OgorCQljYXNlIDB4MjIxMToKKwkJY2FzZSAweDIyMjE6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisJCQlicmVhazsKKwkJY2FzZSAweDMyNjE6CisJCWNhc2UgMHgzMjgxOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTM2OworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweDA4Y2E6CQkvKiBBaXB0ZWsgKi8KKwkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHgwMTA0OgorCQljYXNlIDB4MDEwNjoKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU1BDQTUzMzsKKwkJCWJyZWFrOworCQljYXNlIDB4MjAwODoKKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU1BDQTUwNEI7CisJCQlicmVhazsKKwkJY2FzZSAweDIwMTA6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisJCQlicmVhazsKKwkJY2FzZSAweDIwMTY6CisJCWNhc2UgMHgyMDE4OgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9TUENBNTA0QjsKKwkJCWJyZWFrOworCQljYXNlIDB4MjAyMDoKKwkJY2FzZSAweDIwMjI6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisJCQlicmVhazsKKwkJY2FzZSAweDIwMjQ6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzY7CisJCQlicmVhazsKKwkJY2FzZSAweDIwMjg6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzM7CisJCQlicmVhazsKKwkJY2FzZSAweDIwNDA6CisJCWNhc2UgMHgyMDQyOgorCQljYXNlIDB4MjA1MDoKKwkJY2FzZSAweDIwNjA6CisJCQlzZC0+YnJpZGdlID0gQlJJREdFX1NQQ0E1MzY7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MGQ2NDoJCS8qIFN1blBsdXMgKi8KKy8qCQlzd2l0Y2ggKHByb2R1Y3QpIHsgKi8KKy8qCQljYXNlIDB4MDMwMzogKi8KKwkJCXNkLT5icmlkZ2UgPSBCUklER0VfU1BDQTUzNjsKKy8qCQkJYnJlYWs7ICovCisvKgkJfSAqLworCQlicmVhazsKKwl9CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5kZXZfbmFtZSA9IChjaGFyICopIGlkLT5kcml2ZXJfaW5mbzsKKwljYW0tPmVwYWRkciA9IDB4MDE7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwlkZWZhdWx0OgorLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCisvKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLworLyoJY2FzZSBCUklER0VfU1BDQTUzNjogKi8KKwkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IHNpemVvZiB2Z2FfbW9kZSAvIHNpemVvZiB2Z2FfbW9kZVswXTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU1BDQTUzMzoKKwkJY2FtLT5jYW1fbW9kZSA9IGN1c3RvbV9tb2RlOworCQljYW0tPm5tb2RlcyA9IHNpemVvZiBjdXN0b21fbW9kZSAvIHNpemVvZiBjdXN0b21fbW9kZVswXTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU1BDQTUwNEM6CisJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTI7CisJCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlMiAvIHNpemVvZiB2Z2FfbW9kZTJbMF07CisJCWJyZWFrOworCX0KKwlzZC0+cWluZGV4ID0gNTsJCQkvKiBzZXQgdGhlIHF1YW50aXphdGlvbiB0YWJsZSAqLworCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Y29sb3JzID0gc2RfY3RybHNbU0RfQ09MT1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IG9wZW4gdGltZSAqLworc3RhdGljIGludCBzZF9vcGVuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByYzsKKwlfX3U4IGk7CisJX191OCBpbmZvWzZdOworCWludCBlcnJfY29kZTsKKworCXN3aXRjaCAoc2QtPmJyaWRnZSkgeworCWNhc2UgQlJJREdFX1NQQ0E1MDRCOgorCQlyZWdfdyhkZXYsIDB4MWQsIDAsIDAsIE5VTEwsIDApOworCQlyZWdfdyhkZXYsIDAsIDEsIDB4MjMwNiwgTlVMTCwgMCk7CisJCXJlZ193KGRldiwgMCwgMCwgMHgwZDA0LCBOVUxMLCAwKTsKKwkJcmVnX3coZGV2LCAwLCAwLCAweDIwMDAsIE5VTEwsIDApOworCQlyZWdfdyhkZXYsIDAsIDB4MTMsIDB4MjMwMSwgTlVMTCwgMCk7CisJCXJlZ193KGRldiwgMCwgMCwgMHgyMzA2LCBOVUxMLCAwKTsKKwkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBCUklER0VfU1BDQTUzMzoKKwkJcmMgPSBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CisJCXNwY2E1MHhfR2V0RmlybXdhcmUoZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU1BDQTUzNjoKKwkJc3BjYTUweF9HZXRGaXJtd2FyZShnc3BjYV9kZXYpOworCQlyZWdfcihkZXYsIDB4MDAsIDB4NTAwMiwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxKTsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMDsKKwkJcmVnX3coZGV2LCAweDI0LCAwLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEpOworCQlyZWdfcihkZXYsIDB4MjQsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSk7CisJCXJjID0gc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOworCQlyZWdfdyhkZXYsIDB4MzQsIDAsIDAsIE5VTEwsIDApOworCQlzcGNhNTA0Ql9XYWl0Q21kU3RhdHVzKGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NQQ0E1MDRDOgkvKiBwY2NhbTYwMCAqLworCQlQREVCVUcoRF9TVFJFQU0sICJPcGVuaW5nIFNQQ0E1MDQgKFBDLUNBTSA2MDApIik7CisJCXJlZ193X3JpdihkZXYsIDB4ZTAsIDB4MDAwMCwgMHgwMDAwKTsKKwkJcmVnX3dfcml2KGRldiwgMHhlMCwgMHgwMDAwLCAweDAwMDEpOwkvKiByZXNldCAqLworCQlzcGNhNTA0X3dhaXRfc3RhdHVzKGdzcGNhX2Rldik7CisJCWlmIChzZC0+c3VidHlwZSA9PSBMb2dpdGVjaENsaWNrU21hcnQ0MjApCisJCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LAorCQkJCQlzcGNhNTA0QV9jbGlja3NtYXJ0NDIwX29wZW5fZGF0YSk7CisJCWVsc2UKKwkJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDRfcGNjYW02MDBfb3Blbl9kYXRhKTsKKwkJZXJyX2NvZGUgPSBzcGNhNTB4X3NldHVwX3F0YWJsZShnc3BjYV9kZXYsCisJCQkJCQkweDAwLCAweDI4MDAsCisJCQkJCQkweDI4NDAsIHF0YWJsZV9jcmVhdGl2ZV9wY2NhbSk7CisJCWlmIChlcnJfY29kZSA8IDApIHsKKwkJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgInNwY2E1MHhfc2V0dXBfcXRhYmxlIGZhaWxlZCIpOworCQkJcmV0dXJuIGVycl9jb2RlOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLworCQlQREVCVUcoRF9TVFJFQU0sICJPcGVuaW5nIFNQQ0E1MDQiKTsKKwkJaWYgKHNkLT5zdWJ0eXBlID09IEFpcHRla01pbmlQZW5DYW0xMykgeworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCQlpbmZvW2ldID0gcmVnX3JfMShnc3BjYV9kZXYsIGkpOworCQkJUERFQlVHKERfU1RSRUFNLAorCQkJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKKwkJCQkiIFNob3VsZCBiZSAxLDAsMiwyLDAsMCIsCisJCQkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKKwkJCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKKwkJCS8qIHNwY2E1MDRhIGFpcHRlayAqLworCQkJLyogU2V0IEFFIEFXQiBCYW5kaW5nIFR5cGUgMy0+IDUwSHogMi0+IDYwSHogKi8KKwkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKKwkJCQkJCQk4LCAzLCAweDllLCAxKTsKKwkJCS8qIFR3aWNlIHNlcXVlbmNpYWwgbmVlZCBzdGF0dXMgMHhmZi0+MHg5ZS0+MHg5ZCAqLworCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LAorCQkJCQkJCTgsIDMsIDB4OWUsIDApOworCisJCQlzcGNhNTA0QV9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsCisJCQkJCQkJMCwgMCwgMHg5ZCwgMSk7CisJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogc3BjYTUwNGEgYWlwdGVrICovCisJCQlzcGNhNTA0QV9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MDgsCisJCQkJCQkJNiwgMCwgMHg4NiwgMSk7CisvKgkJCXJlZ193cml0ZSAoZGV2LCAwLCAweDIwMDAsIDApOyAqLworLyoJCQlyZWdfd3JpdGUgKGRldiwgMCwgMHgyODgzLCAxKTsgKi8KKy8qCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQgKGdzcGNhX2RldiwgMHgwOCwKKwkJCQkJCQk2LCAwLCAweDg2LCAxKTsgKi8KKy8qCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQgKGdzcGNhX2RldiwgMHgyNCwKKwkJCQkJCQkwLCAwLCAweDlELCAxKTsgKi8KKwkJCXJlZ193X3JpdihkZXYsIDB4MCwgMHgyNzBjLCAweDA1KTsgLyogTDkyIHNubzF0LnR4dCAqLworCQkJcmVnX3dfcml2KGRldiwgMHgwLCAweDIzMTAsIDB4MDUpOworCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDAxLAorCQkJCQkJCTB4MGYsIDAsIDB4ZmYsIDApOworCQl9CisJCS8qIHNldHVwIHF0YWJsZSAqLworCQlyZWdfd19yaXYoZGV2LCAwLCAweDIwMDAsIDApOworCQlyZWdfd19yaXYoZGV2LCAwLCAweDI4ODMsIDEpOworCQllcnJfY29kZSA9IHNwY2E1MHhfc2V0dXBfcXRhYmxlKGdzcGNhX2RldiwKKwkJCQkJCTB4MDAsIDB4MjgwMCwKKwkJCQkJCTB4Mjg0MCwKKwkJCQkJCXF0YWJsZV9zcGNhNTA0X2RlZmF1bHQpOworCQlpZiAoZXJyX2NvZGUgPCAwKSB7CisJCQlQREVCVUcoRF9FUlIsICJzcGNhNTB4X3NldHVwX3F0YWJsZSBmYWlsZWQiKTsKKwkJCXJldHVybiBlcnJfY29kZTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByYzsKKwlpbnQgZW5hYmxlOworCV9fdTggaTsKKwlfX3U4IGluZm9bNl07CisKKwlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfU1BDQTUwNEIpCisJCXNwY2E1MDRCX3NldFF0YWJsZShnc3BjYV9kZXYpOworCXNwY2E1MDRCX1NldFNpemVUeXBlKGdzcGNhX2Rldik7CisJc3dpdGNoIChzZC0+YnJpZGdlKSB7CisJZGVmYXVsdDoKKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLworLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MzY6ICovCisJCWlmIChzZC0+c3VidHlwZSA9PSBNZWdhcGl4VjQgfHwKKwkJICAgIHNkLT5zdWJ0eXBlID09IExvZ2l0ZWNoQ2xpY2tTbWFydDgyMCkgeworCQkJcmVnX3coZGV2LCAweGYwLCAwLCAwLCBOVUxMLCAwKTsKKwkJCXNwY2E1MDRCX1dhaXRDbWRTdGF0dXMoZ3NwY2FfZGV2KTsKKwkJCXJlZ19yKGRldiwgMHhmMCwgNCwgTlVMTCwgMCk7CisJCQlzcGNhNTA0Ql9XYWl0Q21kU3RhdHVzKGdzcGNhX2Rldik7CisJCX0gZWxzZSB7CisJCQlyZWdfdyhkZXYsIDB4MzEsIDAsIDQsIE5VTEwsIDApOworCQkJc3BjYTUwNEJfV2FpdENtZFN0YXR1cyhnc3BjYV9kZXYpOworCQkJcmMgPSBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU1BDQTUwNDoKKwkJaWYgKHNkLT5zdWJ0eXBlID09IEFpcHRla01pbmlQZW5DYW0xMykgeworCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCQlpbmZvW2ldID0gcmVnX3JfMShnc3BjYV9kZXYsIGkpOworCQkJUERFQlVHKERfU1RSRUFNLAorCQkJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKKwkJCQkiIFNob3VsZCBiZSAxLDAsMiwyLDAsMCIsCisJCQkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKKwkJCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKKwkJCS8qIHNwY2E1MDRhIGFpcHRlayAqLworCQkJLyogU2V0IEFFIEFXQiBCYW5kaW5nIFR5cGUgMy0+IDUwSHogMi0+IDYwSHogKi8KKwkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKKwkJCQkJCQk4LCAzLCAweDllLCAxKTsKKwkJCS8qIFR3aWNlIHNlcXVlbmNpYWwgbmVlZCBzdGF0dXMgMHhmZi0+MHg5ZS0+MHg5ZCAqLworCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LAorCQkJCQkJCTgsIDMsIDB4OWUsIDApOworCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LAorCQkJCQkJCTAsIDAsIDB4OWQsIDEpOworCQl9IGVsc2UgeworCQkJc3BjYTUwNF9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsIDgsIDMpOworCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCQlpbmZvW2ldID0gcmVnX3JfMShnc3BjYV9kZXYsIGkpOworCQkJUERFQlVHKERfU1RSRUFNLAorCQkJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKKwkJCQkiIFNob3VsZCBiZSAxLDAsMiwyLDAsMCIsCisJCQkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKKwkJCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKKwkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCA4LCAzKTsKKwkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCAwLCAwKTsKKwkJfQorCQlzcGNhNTA0Ql9TZXRTaXplVHlwZShnc3BjYV9kZXYpOworCQlyZWdfd19yaXYoZGV2LCAweDAsIDB4MjcwYywgMHgwNSk7CS8qIEw5MiBzbm8xdC50eHQgKi8KKwkJcmVnX3dfcml2KGRldiwgMHgwLCAweDIzMTAsIDB4MDUpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TUENBNTA0QzoKKwkJaWYgKHNkLT5zdWJ0eXBlID09IExvZ2l0ZWNoQ2xpY2tTbWFydDQyMCkgeworCQkJd3JpdGVfdmVjdG9yKGdzcGNhX2RldiwKKwkJCQkJc3BjYTUwNEFfY2xpY2tzbWFydDQyMF9pbml0X2RhdGEpOworCQl9IGVsc2UgeworCQkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNF9wY2NhbTYwMF9pbml0X2RhdGEpOworCQl9CisJCWVuYWJsZSA9IChzZC0+YXV0b2dhaW4gPyAweDA0IDogMHgwMSk7CisJCXJlZ193X3JpdihkZXYsIDB4MGMsIDB4MDAwMCwgZW5hYmxlKTsJLyogYXV0byBleHBvc3VyZSAqLworCQlyZWdfd19yaXYoZGV2LCAweGIwLCAweDAwMDAsIGVuYWJsZSk7CS8qIGF1dG8gd2hpdGVuZXNzICovCisKKwkJLyogc2V0IGRlZmF1bHQgZXhwb3N1cmUgY29tcGVuc2F0aW9uIGFuZCB3aGl0ZW5lc3MgYmFsYW5jZSAqLworCQlyZWdfd19yaXYoZGV2LCAweDMwLCAweDAwMDEsIDgwMCk7CS8qIH4gMjAgZnBzICovCisJCXJlZ193X3JpdihkZXYsIDB4MzAsIDB4MDAwMiwgMTYwMCk7CisJCXNwY2E1MDRCX1NldFNpemVUeXBlKGdzcGNhX2Rldik7CisJCWJyZWFrOworCX0KKwlzcDV4eF9pbml0Q29udEJyaWdIdWVSZWdpc3RlcnMoZ3NwY2FfZGV2KTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwlkZWZhdWx0OgorLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MzY6ICovCisvKgljYXNlIEJSSURHRV9TUENBNTA0QjogKi8KKwkJcmVnX3coZGV2LCAweDMxLCAwLCAwLCBOVUxMLCAwKTsKKwkJc3BjYTUwNEJfV2FpdENtZFN0YXR1cyhnc3BjYV9kZXYpOworCQlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NQQ0E1MDQ6CisJY2FzZSBCUklER0VfU1BDQTUwNEM6CisJCXJlZ193X3JpdihkZXYsIDB4MDAsIDB4MjAwMCwgMHgwMDAwKTsKKworCQlpZiAoc2QtPnN1YnR5cGUgPT0gQWlwdGVrTWluaVBlbkNhbTEzKSB7CisJCQkvKiBzcGNhNTA0YSBhaXB0ZWsgKi8KKy8qCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDA4LAorCQkJCQkJCSA2LCAwLCAweDg2LCAxKTsgKi8KKwkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKKwkJCQkJCQkweDAwLCAweDAwLCAweDlkLCAxKTsKKwkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgwMSwKKwkJCQkJCQkweDBmLCAweDAwLCAweGZmLCAxKTsKKwkJfSBlbHNlIHsKKwkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCAwLCAwKTsKKwkJCXJlZ193X3JpdihkZXYsIDB4MDEsIDB4MDAwZiwgMHgwMCk7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2Nsb3NlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpLCBzb2YgPSAwOworCXVuc2lnbmVkIGNoYXIgKnMsICpkOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZmZDlbXSA9IHsweGZmLCAweGQ5fTsKKworLyogZnJhbWVzIGFyZSBqcGVnIDQuMS4xIHdpdGhvdXQgMHhmZiBlc2NhcGUgKi8KKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9TUENBNTMzOgorCQlpZiAoZGF0YVswXSA9PSAweGZmKSB7CisJCQlpZiAoZGF0YVsxXSAhPSAweDAxKSB7CS8qIGRyb3AgcGFja2V0ICovCisvKgkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsgKi8KKwkJCQlyZXR1cm47CisJCQl9CisJCQlzb2YgPSAxOworCQkJZGF0YSArPSBTUENBNTMzX09GRlNFVF9EQVRBOworCQkJbGVuIC09IFNQQ0E1MzNfT0ZGU0VUX0RBVEE7CisJCX0gZWxzZSB7CisJCQlkYXRhICs9IDE7CisJCQlsZW4gLT0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIEJSSURHRV9TUENBNTM2OgorCQlpZiAoZGF0YVswXSA9PSAweGZmKSB7CisJCQlzb2YgPSAxOworCQkJZGF0YSArPSBTUENBNTM2X09GRlNFVF9EQVRBOworCQkJbGVuIC09IFNQQ0E1MzZfT0ZGU0VUX0RBVEE7CisJCX0gZWxzZSB7CisJCQlkYXRhICs9IDI7CisJCQlsZW4gLT0gMjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLworCQlzd2l0Y2ggKGRhdGFbMF0pIHsKKwkJY2FzZSAweGZlOgkJCS8qIHN0YXJ0IG9mIGZyYW1lICovCisJCQlzb2YgPSAxOworCQkJZGF0YSArPSBTUENBNTBYX09GRlNFVF9EQVRBOworCQkJbGVuIC09IFNQQ0E1MFhfT0ZGU0VUX0RBVEE7CisJCQlicmVhazsKKwkJY2FzZSAweGZmOgkJCS8qIGRyb3AgcGFja2V0ICovCisvKgkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOyAqLworCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJZGF0YSArPSAxOworCQkJbGVuIC09IDE7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIEJSSURHRV9TUENBNTA0QzoKKwkJc3dpdGNoIChkYXRhWzBdKSB7CisJCWNhc2UgMHhmZToJCQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQkJc29mID0gMTsKKwkJCWRhdGEgKz0gU1BDQTUwNF9QQ0NBTTYwMF9PRkZTRVRfREFUQTsKKwkJCWxlbiAtPSBTUENBNTA0X1BDQ0FNNjAwX09GRlNFVF9EQVRBOworCQkJYnJlYWs7CisJCWNhc2UgMHhmZjoJCQkvKiBkcm9wIHBhY2tldCAqLworLyoJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsgKi8KKwkJCXJldHVybjsKKwkJZGVmYXVsdDoKKwkJCWRhdGEgKz0gMTsKKwkJCWxlbiAtPSAxOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWlmIChzb2YpIHsJCS8qIHN0YXJ0IG9mIGZyYW1lICovCisJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLAorCQkJCQlmZmQ5LCAyKTsKKworCQkvKiBwdXQgdGhlIEpQRUcgaGVhZGVyIGluIHRoZSBuZXcgZnJhbWUgKi8KKwkJanBlZ19wdXRfaGVhZGVyKGdzcGNhX2RldiwgZnJhbWUsCisJCQkJKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+cWluZGV4LAorCQkJCTB4MjIpOworCX0KKworCS8qIGFkZCAweDAwIGFmdGVyIDB4ZmYgKi8KKwlmb3IgKGkgPSBsZW47IC0taSA+PSAwOyApCisJCWlmIChkYXRhW2ldID09IDB4ZmYpCisJCQlicmVhazsKKwlpZiAoaSA8IDApIHsJCQkvKiBubyAweGZmICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CisJCXJldHVybjsKKwl9CisJcyA9IGRhdGE7CisJZCA9IHNkLT5wYWNrZXQ7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCSpkKysgPSAqcysrOworCQlpZiAoc1stMV0gPT0gMHhmZikKKwkJCSpkKysgPSAweDAwOworCX0KKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAorCQkJc2QtPnBhY2tldCwgZCAtIHNkLT5wYWNrZXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCisJc3dpdGNoIChzZC0+YnJpZGdlKSB7CisJZGVmYXVsdDoKKy8qCWNhc2UgQlJJREdFX1NQQ0E1MzM6ICovCisvKgljYXNlIEJSSURHRV9TUENBNTA0QjogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDQ6ICovCisvKgljYXNlIEJSSURHRV9TUENBNTA0QzogKi8KKwkJcmVnX3dfcml2KGRldiwgMHgwLCAweDIxYTcsIHNkLT5icmlnaHRuZXNzKTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU1BDQTUzNjoKKwkJcmVnX3dfcml2KGRldiwgMHgwLCAweDIwZjAsIHNkLT5icmlnaHRuZXNzKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191MTYgYnJpZ2h0bmVzcyA9IDA7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwlkZWZhdWx0OgorLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLworLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDRDOiAqLworCQlicmlnaHRuZXNzID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDIxYTcsIDIpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TUENBNTM2OgorCQlicmlnaHRuZXNzID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDIwZjAsIDIpOworCQlicmVhazsKKwl9CisJc2QtPmJyaWdodG5lc3MgPSAoKGJyaWdodG5lc3MgJiAweGZmKSAtIDEyOCkgJSAyNTU7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCisJc3dpdGNoIChzZC0+YnJpZGdlKSB7CisJZGVmYXVsdDoKKy8qCWNhc2UgQlJJREdFX1NQQ0E1MzM6ICovCisvKgljYXNlIEJSSURHRV9TUENBNTA0QjogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDQ6ICovCisvKgljYXNlIEJSSURHRV9TUENBNTA0QzogKi8KKwkJcmVnX3dfcml2KGRldiwgMHgwLCAweDIxYTgsIHNkLT5jb250cmFzdCk7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NQQ0E1MzY6CisJCXJlZ193X3JpdihkZXYsIDB4MCwgMHgyMGYxLCBzZC0+Y29udHJhc3QpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwlkZWZhdWx0OgorLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLworLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDRDOiAqLworCQlzZC0+Y29udHJhc3QgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjFhOCwgMik7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NQQ0E1MzY6CisJCXNkLT5jb250cmFzdCA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHgyMGYxLCAyKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwlkZWZhdWx0OgorLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLworLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KKy8qCWNhc2UgQlJJREdFX1NQQ0E1MDRDOiAqLworCQlyZWdfd19yaXYoZGV2LCAweDAsIDB4MjFhZSwgc2QtPmNvbG9ycyk7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NQQ0E1MzY6CisJCXJlZ193X3JpdihkZXYsIDB4MCwgMHgyMGY2LCBzZC0+Y29sb3JzKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXN3aXRjaCAoc2QtPmJyaWRnZSkgeworCWRlZmF1bHQ6CisvKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLworLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCisvKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLworLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCisJCXNkLT5jb2xvcnMgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjFhZSwgMikgPj4gMTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU1BDQTUzNjoKKwkJc2QtPmNvbG9ycyA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHgyMGY2LCAyKSA+PiAxOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9ycyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZ2V0Y29sb3JzKGdzcGNhX2Rldik7CisJKnZhbCA9IHNkLT5jb2xvcnM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmF1dG9nYWluID0gdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmF1dG9nYWluOworCXJldHVybiAwOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5vcGVuID0gc2Rfb3BlbiwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKKwkuY2xvc2UgPSBzZF9jbG9zZSwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworI2RlZmluZSBEVk5NKG5hbWUpIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkgbmFtZQorc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMGIpLCBEVk5NKCJDcmVhdGl2ZSBQQy1DQU0gNjAwIil9LAorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDEyKSwgRFZOTSgiUEMtQ2FtMzUwIil9LAorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDEzKSwgRFZOTSgiQ3JlYXRpdmUgUGNjYW03NTAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDU4LCAweDcwMDYpLCBEVk5NKCJHZW5pdXMgRHNjIDEuMyBTbWFydCIpfSwKKwl7VVNCX0RFVklDRSgweDA0NjEsIDB4MDgyMSksIERWTk0oIkZ1amlmaWxtIE1WLTEiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA5MDUpLCBEVk5NKCJMb2dpdGVjaCBDbGlja1NtYXJ0IDgyMCIpfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDk2MCksIERWTk0oIkxvZ2l0ZWNoIENsaWNrU21hcnQgNDIwIil9LAorCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzIyKSwgRFZOTSgiUGhpbGlwcyBETVZDMTMwMEsiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGE1LCAweDMwMDMpLCBEVk5NKCJCZW5xIERDIDEzMDAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGE1LCAweDMwMDgpLCBEVk5NKCJCZW5xIERDIDE1MDAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGE1LCAweDMwMGEpLCBEVk5NKCJCZW5xIERDMzQxMCIpfSwKKwl7VVNCX0RFVklDRSgweDA0ZjEsIDB4MTAwMSksIERWTk0oIkpWQyBHQyBBNTAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGZjLCAweDUwMGMpLCBEVk5NKCJTdW5wbHVzIENBNTAwQyIpfSwKKwl7VVNCX0RFVklDRSgweDA0ZmMsIDB4NTA0YSksIERWTk0oIkFpcHRlayBNaW5pIFBlbkNhbSAxLjMiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGZjLCAweDUwNGIpLCBEVk5NKCJNYXhlbGwgTWF4UG9ja2V0IExFIDEuMyIpfSwKKwl7VVNCX0RFVklDRSgweDA0ZmMsIDB4NTMzMCksIERWTk0oIkRpZ2l0cmV4IDIxMTAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGZjLCAweDUzNjApLCBEVk5NKCJTdW5wbHVzIEdlbmVyaWMiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGZjLCAweGZmZmYpLCBEVk5NKCJQdXJlIERpZ2l0YWxEYWtvdGEiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTJiLCAweDE1MTMpLCBEVk5NKCJNZWdhcGl4IFY0Iil9LAorCXtVU0JfREVWSUNFKDB4MDU0NiwgMHgzMTU1KSwgRFZOTSgiUG9sYXJvaWQgUERDMzA3MCIpfSwKKwl7VVNCX0RFVklDRSgweDA1NDYsIDB4MzE5MSksIERWTk0oIlBvbGFyb2lkIElvbiA4MCIpfSwKKwl7VVNCX0RFVklDRSgweDA1NDYsIDB4MzI3MyksIERWTk0oIlBvbGFyb2lkIFBEQzIwMzAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGMyMTEpLCBEVk5NKCJLb3dhIEJzODg4ZSBNaWNyb2NhbWVyYSIpfSwKKwl7VVNCX0RFVklDRSgweDA1NWYsIDB4YzIzMCksIERWTk0oIk11c3RlayBEaWdpY2FtIDMzMEsiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGMyMzIpLCBEVk5NKCJNdXN0ZWsgTURDMzUwMCIpfSwKKwl7VVNCX0RFVklDRSgweDA1NWYsIDB4YzM2MCksIERWTk0oIk11c3RlayBEVjQwMDAgTXBlZzQgIil9LAorCXtVU0JfREVWSUNFKDB4MDU1ZiwgMHhjNDIwKSwgRFZOTSgiTXVzdGVrIGdTbWFydCBNaW5pIDIiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGM0MzApLCBEVk5NKCJNdXN0ZWsgR3NtYXJ0IExDRCAyIil9LAorCXtVU0JfREVWSUNFKDB4MDU1ZiwgMHhjNDQwKSwgRFZOTSgiTXVzdGVrIERWIDMwMDAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGM1MjApLCBEVk5NKCJNdXN0ZWsgZ1NtYXJ0IE1pbmkgMyIpfSwKKwl7VVNCX0RFVklDRSgweDA1NWYsIDB4YzUzMCksIERWTk0oIk11c3RlayBHc21hcnQgTENEIDMiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGM1NDApLCBEVk5NKCJHc21hcnQgRDMwIil9LAorCXtVU0JfREVWSUNFKDB4MDU1ZiwgMHhjNjMwKSwgRFZOTSgiTXVzdGVrIE1EQzQwMDAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGM2NTApLCBEVk5NKCJNdXN0ZWsgTURDNTUwMFoiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNWRhLCAweDEwMTgpLCBEVk5NKCJEaWdpdGFsIERyZWFtIEVuaWdtYSAxLjMiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNmQ2LCAweDAwMzEpLCBEVk5NKCJUcnVzdCA2MTAgTENEIFBvd2VyQ0BtIFpvb20iKX0sCisJe1VTQl9ERVZJQ0UoMHgwNzMzLCAweDEzMTEpLCBEVk5NKCJEaWdpdGFsIERyZWFtIEVwc2lsb24gMS4zIil9LAorCXtVU0JfREVWSUNFKDB4MDczMywgMHgxMzE0KSwgRFZOTSgiTWVyY3VyeSAyLjFNRUcgRGVsdXhlIENsYXNzaWMgQ2FtIil9LAorCXtVU0JfREVWSUNFKDB4MDczMywgMHgyMjExKSwgRFZOTSgiSmVub3B0aWsgamRjIDIxIExDRCIpfSwKKwl7VVNCX0RFVklDRSgweDA3MzMsIDB4MjIyMSksIERWTk0oIk1lcmN1cnkgRGlnaXRhbCBQcm8gMy4xcCIpfSwKKwl7VVNCX0RFVklDRSgweDA3MzMsIDB4MzI2MSksIERWTk0oIkNvbmNvcmQgMzA0NSBzcGNhNTM2YSIpfSwKKwl7VVNCX0RFVklDRSgweDA3MzMsIDB4MzI4MSksIERWTk0oIkN5YmVycGl4IFM1NTBWIil9LAorCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgwMTA0KSwgRFZOTSgiQWlwdGVrIFBvY2tldERWSUkgMS4zIil9LAorCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgwMTA2KSwgRFZOTSgiQWlwdGVrIFBvY2tldCBEVjMxMDArIil9LAorCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgyMDA4KSwgRFZOTSgiQWlwdGVrIE1pbmkgUGVuQ2FtIDIgTSIpfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjAxMCksIERWTk0oIkFpcHRlayBQb2NrZXRDYW0gM00iKX0sCisJe1VTQl9ERVZJQ0UoMHgwOGNhLCAweDIwMTYpLCBEVk5NKCJBaXB0ZWsgUG9ja2V0Q2FtIDIgTWVnYSIpfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjAxOCksIERWTk0oIkFpcHRlayBQZW5jYW0gU0QgMk0iKX0sCisJe1VTQl9ERVZJQ0UoMHgwOGNhLCAweDIwMjApLCBEVk5NKCJBaXB0ZWsgU2xpbSAzMDAwRiIpfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjAyMiksIERWTk0oIkFpcHRlayBTbGltIDMyMDAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwOGNhLCAweDIwMjQpLCBEVk5NKCJBaXB0ZWsgRFYzNTAwIE1wZWc0ICIpfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjAyOCksIERWTk0oIkFpcHRlayBQb2NrZXRDYW00TSIpfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjA0MCksIERWTk0oIkFpcHRlayBQb2NrZXREVjQxMDBNIil9LAorCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgyMDQyKSwgRFZOTSgiQWlwdGVrIFBvY2tldERWNTEwMCIpfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjA1MCksIERWTk0oIk1lZGlvbiBNRCA0MTQzNyIpfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjA2MCksIERWTk0oIkFpcHRlayBQb2NrZXREVjUzMDAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwZDY0LCAweDAzMDMpLCBEVk5NKCJTdW5wbHVzIEZhc2hpb25DYW0gRFhHIil9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAidiVzIHJlZ2lzdGVyZWQiLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmNDdlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCkBAIC0wLDAgKzEsMTAzOCBAQAorLyoKKyAqTm90ZXM6ICogdDYxMyAgKyB0YXM1MTMwQQorICoJKiBGb2N1cyB0byBsaWdodCBkbyBub3QgYmFsYW5jZSB3ZWxsIGFzIGluIHdpbi4KKyAqCSAgUXVhbGl0eSBpbiB3aW4gaXMgbm90IGdvb2QsIGJ1dCBpdHMga2luZGEgYmV0dGVyLgorICoJICogRml4IHNvbWUgImV4dHJhbmVvdXMgYnl0ZXMiLCBtb3N0IG9mIGFwcHMgd2lsbCBzaG93IHRoZSBpbWFnZSBhbnl3YXkKKyAqCSAqIEdhbW1hIHRhYmxlLCBpcyB0aGVyZSwgYnV0IGl0cyByZWFsbHkgZG9pbmcgc29tZXRoaW5nPworICoJICogN344IEZwcywgaXRzIG9rLCBtYXggb24gd2luIGl0cyAxMC4KKyAqCQkJQ29zdGFudGlubyBMZWFuZHJvCisgKgorICogVjRMMiBieSBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAidDYxMyIKKyNpbmNsdWRlICJnc3BjYS5oIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKKyNkZWZpbmUgTUFYX0dBTU1BIDB4MTAJCS8qIDAgdG8gMTUgKi8KKworLyogRnJvbSBMVVZDVklFVyAqLworI2RlZmluZSBWNEwyX0NJRF9FRkZFQ1RTIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAzKQorCitNT0RVTEVfQVVUSE9SKCJMZWFuZHJvIENvc3RhbnRpbm8gPGxlX2Nvc3RhbnRpbm9AcGl4YXJ0YXJnZW50aW5hLmNvbS5hcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvVDYxMyAoSlBFRyBDb21wbGlhbmNlKSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisKKwl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CisJdW5zaWduZWQgY2hhciBjb250cmFzdDsKKwl1bnNpZ25lZCBjaGFyIGNvbG9yczsKKwl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOworCXVuc2lnbmVkIGNoYXIgZ2FtbWE7CisJdW5zaWduZWQgY2hhciBzaGFycG5lc3M7CisJdW5zaWduZWQgY2hhciBmcmVxOworCXVuc2lnbmVkIGNoYXIgd2hpdGViYWxhbmNlOworCXVuc2lnbmVkIGNoYXIgbWlycm9yOworCXVuc2lnbmVkIGNoYXIgZWZmZWN0OworfTsKKworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRsb3dsaWdodChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGxvd2xpZ2h0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRlZmZlY3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRlZmZlY3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSk7CisKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworI2RlZmluZSBTRF9CUklHSFRORVNTIDAKKwl7CisJIHsKKwkgIC5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAubmFtZSA9ICJCcmlnaHRuZXNzIiwKKwkgIC5taW5pbXVtID0gMCwKKwkgIC5tYXhpbXVtID0gMHgwZiwKKwkgIC5zdGVwID0gMSwKKwkgIC5kZWZhdWx0X3ZhbHVlID0gMHgwOSwKKwkgIH0sCisJIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwkgfSwKKyNkZWZpbmUgU0RfQ09OVFJBU1QgMQorCXsKKwkgeworCSAgLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAubmFtZSA9ICJDb250cmFzdCIsCisJICAubWluaW11bSA9IDAsCisJICAubWF4aW11bSA9IDB4MGQsCisJICAuc3RlcCA9IDEsCisJICAuZGVmYXVsdF92YWx1ZSA9IDB4MDcsCisJICB9LAorCSAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwkgfSwKKyNkZWZpbmUgU0RfQ09MT1IgMgorCXsKKwkgeworCSAgLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkgIC5uYW1lID0gIkNvbG9yIiwKKwkgIC5taW5pbXVtID0gMCwKKwkgIC5tYXhpbXVtID0gMHgwZiwKKwkgIC5zdGVwID0gMSwKKwkgIC5kZWZhdWx0X3ZhbHVlID0gMHgwNSwKKwkgIH0sCisJIC5zZXQgPSBzZF9zZXRjb2xvcnMsCisJIC5nZXQgPSBzZF9nZXRjb2xvcnMsCisJIH0sCisjZGVmaW5lIFNEX0dBTU1BIDMKKwl7CisJIHsKKwkgIC5pZCA9IFY0TDJfQ0lEX0dBTU1BLAkvKiAoZ2FtbWEgb24gd2luKSAqLworCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCSAgLm5hbWUgPSAiR2FtbWEgKFVudGVzdGVkKSIsCisJICAubWluaW11bSA9IDAsCisJICAubWF4aW11bSA9IE1BWF9HQU1NQSwKKwkgIC5zdGVwID0gMSwKKwkgIC5kZWZhdWx0X3ZhbHVlID0gMHgwOSwKKwkgIH0sCisJIC5zZXQgPSBzZF9zZXRnYW1tYSwKKwkgLmdldCA9IHNkX2dldGdhbW1hLAorCSB9LAorI2RlZmluZSBTRF9BVVRPR0FJTiA0CisJeworCSB7CisJICAuaWQgPSBWNEwyX0NJRF9HQUlOLAkvKiBoZXJlLCBpIGFjdGl2YXRlIG9ubHkgdGhlIGxvd2xpZ2h0LAorCQkJCSAqIHNvbWUgYXBwcyBkb250IGJyaW5nIHVwIHRoZQorCQkJCSAqIGJhY2tsaWd0aF9jb21wZW5zYXRpb24gY29udHJvbCkgKi8KKwkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkgIC5uYW1lID0gIkxvdyBMaWdodCIsCisJICAubWluaW11bSA9IDAsCisJICAubWF4aW11bSA9IDEsCisJICAuc3RlcCA9IDEsCisJICAuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisJICB9LAorCSAuc2V0ID0gc2Rfc2V0bG93bGlnaHQsCisJIC5nZXQgPSBzZF9nZXRsb3dsaWdodCwKKwkgfSwKKyNkZWZpbmUgU0RfTUlSUk9SIDUKKwl7CisJIHsKKwkgIC5pZCA9IFY0TDJfQ0lEX0hGTElQLAorCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCSAgLm5hbWUgPSAiTWlycm9yIEltYWdlIiwKKwkgIC5taW5pbXVtID0gMCwKKwkgIC5tYXhpbXVtID0gMSwKKwkgIC5zdGVwID0gMSwKKwkgIC5kZWZhdWx0X3ZhbHVlID0gMCwKKwkgIH0sCisJIC5zZXQgPSBzZF9zZXRmbGlwLAorCSAuZ2V0ID0gc2RfZ2V0ZmxpcAorCX0sCisjZGVmaW5lIFNEX0xJR0hURlJFUSA2CisJeworCSB7CisJICAuaWQgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKKwkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkgIC5uYW1lID0gIkxpZ2h0IEZyZXF1ZW5jeSBGaWx0ZXIiLAorCSAgLm1pbmltdW0gPSAxLAkJLyogMSAtPiAweDUwLCAyLT4weDYwICovCisJICAubWF4aW11bSA9IDIsCisJICAuc3RlcCA9IDEsCisJICAuZGVmYXVsdF92YWx1ZSA9IDEsCisJICB9LAorCSAuc2V0ID0gc2Rfc2V0ZnJlcSwKKwkgLmdldCA9IHNkX2dldGZyZXF9LAorCisjZGVmaW5lIFNEX1dISVRFX0JBTEFOQ0UgNworCXsKKwkgeworCSAgLmlkID0gVjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRSwKKwkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkgIC5uYW1lID0gIldoaXRlIEJhbGFuY2UiLAorCSAgLm1pbmltdW0gPSAwLAorCSAgLm1heGltdW0gPSAxLAorCSAgLnN0ZXAgPSAxLAorCSAgLmRlZmF1bHRfdmFsdWUgPSAxLAorCSAgfSwKKwkgLnNldCA9IHNkX3NldHdoaXRlYmFsYW5jZSwKKwkgLmdldCA9IHNkX2dldHdoaXRlYmFsYW5jZQorCX0sCisjZGVmaW5lIFNEX1NIQVJQTkVTUyA4CQkvKiAoYWthIGRlZmluaXRpb24gb24gd2luKSAqLworCXsKKwkgeworCSAgLmlkID0gVjRMMl9DSURfU0hBUlBORVNTLAorCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCSAgLm5hbWUgPSAiU2hhcnBuZXNzIiwKKwkgIC5taW5pbXVtID0gMCwKKwkgIC5tYXhpbXVtID0gTUFYX0dBTU1BLAkvKiAwIHRvIDE2ICovCisJICAuc3RlcCA9IDEsCisJICAuZGVmYXVsdF92YWx1ZSA9IDB4MDYsCisJICB9LAorCSAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAorCSAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorCSB9LAorI2RlZmluZSBTRF9FRkZFQ1RTIDkKKwl7CisJIHsKKwkgIC5pZCA9IFY0TDJfQ0lEX0VGRkVDVFMsCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJICAubmFtZSA9ICJXZWJjYW0gRWZmZWN0cyIsCisJICAubWluaW11bSA9IDAsCisJICAubWF4aW11bSA9IDQsCisJICAuc3RlcCA9IDEsCisJICAuZGVmYXVsdF92YWx1ZSA9IDAsCisJICB9LAorCSAuc2V0ID0gc2Rfc2V0ZWZmZWN0LAorCSAuZ2V0ID0gc2RfZ2V0ZWZmZWN0CisJfSwKK307CisKK3N0YXRpYyBjaGFyICplZmZlY3RzX2NvbnRyb2xbXSA9IHsKKwkiTm9ybWFsIiwKKwkiRW1ib3NzIiwJCS8qIGRpc2FibGVkICovCisJIk1vbm9jaHJvbWUiLAorCSJTZXBpYSIsCisJIlNrZXRjaCIsCisJIlN1biBFZmZlY3QiLAkJLyogZGlzYWJsZWQgKi8KKwkiTmVnYXRpdmUiLAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVfdDE2W10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAorCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gNH0sCisJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTc2LAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0ICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gM30sCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMn0sCisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkuc2l6ZWltYWdlID0gMzUyICogMjg4ICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9OworCisjZGVmaW5lIFQxNl9PRkZTRVRfREFUQSA2MzEKKyNkZWZpbmUgTUFYX0VGRkVDVFMgNworLyogZWFzaWx5IGRvbmUgYnkgc29mdCwgdGhpcyB0YWJsZSBjb3VsZCBiZSByZW1vdmVkLAorICogaSBrZWVwIGl0IGhlcmUganVzdCBpbiBjYXNlICovCitzdGF0aWMgY29uc3QgX191OCBlZmZlY3RzX3RhYmxlW01BWF9FRkZFQ1RTXVs2XSA9IHsKKwl7MHhhOCwgMHhlOCwgMHhjNiwgMHhkMiwgMHhjMCwgMHgwMH0sCS8qIE5vcm1hbCAqLworCXsweGE4LCAweGM4LCAweGM2LCAweDUyLCAweGMwLCAweDA0fSwJLyogUmVwdWphciAqLworCXsweGE4LCAweGU4LCAweGM2LCAweGQyLCAweGMwLCAweDIwfSwJLyogTW9ub2Nocm9tZSAqLworCXsweGE4LCAweGU4LCAweGM2LCAweGQyLCAweGMwLCAweDgwfSwJLyogU2VwaWEgKi8KKwl7MHhhOCwgMHhjOCwgMHhjNiwgMHg1MiwgMHhjMCwgMHgwMn0sCS8qIENyb3F1aXMgKi8KKwl7MHhhOCwgMHhjOCwgMHhjNiwgMHhkMiwgMHhjMCwgMHgxMH0sCS8qIFN1biBFZmZlY3QgKi8KKwl7MHhhOCwgMHhjOCwgMHhjNiwgMHhkMiwgMHhjMCwgMHg0MH0sCS8qIE5lZ2F0aXZlICovCit9OworCitzdGF0aWMgY29uc3QgX191OCBnYW1tYV90YWJsZVtNQVhfR0FNTUFdWzM0XSA9IHsKKwl7MHg5MCwgMHgwMCwgMHg5MSwgMHgzZSwgMHg5MiwgMHg2OSwgMHg5MywgMHg4NSwKKwkgMHg5NCwgMHg5NSwgMHg5NSwgMHhhMSwgMHg5NiwgMHhhZSwgMHg5NywgMHhiOSwKKwkgMHg5OCwgMHhjMiwgMHg5OSwgMHhjYiwgMHg5YSwgMHhkNCwgMHg5YiwgMHhkYiwKKwkgMHg5YywgMHhlMywgMHg5ZCwgMHhlYSwgMHg5ZSwgMHhmMSwgMHg5ZiwgMHhmOCwKKwkgMHhhMCwgMHhmZn0sCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MzMsIDB4OTIsIDB4NUEsIDB4OTMsIDB4NzUsCisJIDB4OTQsIDB4ODUsIDB4OTUsIDB4OTMsIDB4OTYsIDB4QTEsIDB4OTcsIDB4QUQsCisJIDB4OTgsIDB4QjcsIDB4OTksIDB4QzIsIDB4OUEsIDB4Q0IsIDB4OUIsIDB4RDQsCisJIDB4OUMsIDB4REUsIDB4OUQsIDB4RTcsIDB4OUUsIDB4RjAsIDB4OUYsIDB4RjcsCisJIDB4YTAsIDB4ZmZ9LAorCXsweDkwLCAweDAwLCAweDkxLCAweDJGLCAweDkyLCAweDUxLCAweDkzLCAweDZCLAorCSAweDk0LCAweDdDLCAweDk1LCAweDhBLCAweDk2LCAweDk5LCAweDk3LCAweEE2LAorCSAweDk4LCAweEIxLCAweDk5LCAweEJDLCAweDlBLCAweEM2LCAweDlCLCAweEQwLAorCSAweDlDLCAweERCLCAweDlELCAweEU0LCAweDlFLCAweEVELCAweDlGLCAweEY2LAorCSAweGEwLCAweGZmfSwKKwl7MHg5MCwgMHgwMCwgMHg5MSwgMHgyOSwgMHg5MiwgMHg0OCwgMHg5MywgMHg2MCwKKwkgMHg5NCwgMHg3MiwgMHg5NSwgMHg4MSwgMHg5NiwgMHg5MCwgMHg5NywgMHg5RSwKKwkgMHg5OCwgMHhBQSwgMHg5OSwgMHhCNSwgMHg5QSwgMHhCRiwgMHg5QiwgMHhDQiwKKwkgMHg5QywgMHhENiwgMHg5RCwgMHhFMSwgMHg5RSwgMHhFQiwgMHg5RiwgMHhGNSwKKwkgMHhhMCwgMHhmZn0sCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MjMsIDB4OTIsIDB4M0YsIDB4OTMsIDB4NTUsCisJIDB4OTQsIDB4NjgsIDB4OTUsIDB4NzcsIDB4OTYsIDB4ODYsIDB4OTcsIDB4OTUsCisJIDB4OTgsIDB4QTIsIDB4OTksIDB4QUQsIDB4OUEsIDB4QjksIDB4OUIsIDB4QzYsCisJIDB4OUMsIDB4RDIsIDB4OUQsIDB4REUsIDB4OUUsIDB4RTksIDB4OUYsIDB4RjQsCisJIDB4YTAsIDB4ZmZ9LAorCXsweDkwLCAweDAwLCAweDkxLCAweDFCLCAweDkyLCAweDMzLCAweDkzLCAweDQ4LAorCSAweDk0LCAweDU5LCAweDk1LCAweDY5LCAweDk2LCAweDc5LCAweDk3LCAweDg3LAorCSAweDk4LCAweDk2LCAweDk5LCAweEEzLCAweDlBLCAweEIxLCAweDlCLCAweEJFLAorCSAweDlDLCAweENDLCAweDlELCAweERBLCAweDlFLCAweEU3LCAweDlGLCAweEYzLAorCSAweGEwLCAweGZmfSwKKwl7MHg5MCwgMHgwMCwgMHg5MSwgMHgwMiwgMHg5MiwgMHgxMCwgMHg5MywgMHgyMCwKKwkgMHg5NCwgMHgzMiwgMHg5NSwgMHg0MCwgMHg5NiwgMHg1NywgMHg5NywgMHg2NywKKwkgMHg5OCwgMHg3NywgMHg5OSwgMHg4OCwgMHg5YSwgMHg5OSwgMHg5YiwgMHhhYSwKKwkgMHg5YywgMHhiYiwgMHg5ZCwgMHhjYywgMHg5ZSwgMHhkZCwgMHg5ZiwgMHhlZSwKKwkgMHhhMCwgMHhmZn0sCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4OTIsIDB4MTQsIDB4OTMsIDB4MjYsCisJIDB4OTQsIDB4MzgsIDB4OTUsIDB4NEEsIDB4OTYsIDB4NjAsIDB4OTcsIDB4NzAsCisJIDB4OTgsIDB4ODAsIDB4OTksIDB4OTAsIDB4OUEsIDB4QTAsIDB4OUIsIDB4QjAsCisJIDB4OUMsIDB4QzAsIDB4OUQsIDB4RDAsIDB4OUUsIDB4RTAsIDB4OUYsIDB4RjAsCisJIDB4YTAsIDB4ZmZ9LAorCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDIyLCAweDkzLCAweDM1LAorCSAweDk0LCAweDQ3LCAweDk1LCAweDVBLCAweDk2LCAweDY5LCAweDk3LCAweDc5LAorCSAweDk4LCAweDg4LCAweDk5LCAweDk3LCAweDlBLCAweEE3LCAweDlCLCAweEI2LAorCSAweDlDLCAweEM0LCAweDlELCAweEQzLCAweDlFLCAweEUwLCAweDlGLCAweEYwLAorCSAweGEwLCAweGZmfSwKKwl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxMCwgMHg5MiwgMHgyNiwgMHg5MywgMHg0MCwKKwkgMHg5NCwgMHg1NCwgMHg5NSwgMHg2NSwgMHg5NiwgMHg3NSwgMHg5NywgMHg4NCwKKwkgMHg5OCwgMHg5MywgMHg5OSwgMHhhMSwgMHg5YSwgMHhiMCwgMHg5YiwgMHhiZCwKKwkgMHg5YywgMHhjYSwgMHg5ZCwgMHhkNiwgMHg5ZSwgMHhlMCwgMHg5ZiwgMHhmMCwKKwkgMHhhMCwgMHhmZn0sCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MTgsIDB4OTIsIDB4MkIsIDB4OTMsIDB4NDQsCisJIDB4OTQsIDB4NjAsIDB4OTUsIDB4NzAsIDB4OTYsIDB4ODAsIDB4OTcsIDB4OEUsCisJIDB4OTgsIDB4OUMsIDB4OTksIDB4QUEsIDB4OUEsIDB4QjcsIDB4OUIsIDB4QzQsCisJIDB4OUMsIDB4RDAsIDB4OUQsIDB4RDgsIDB4OUUsIDB4RTIsIDB4OUYsIDB4RjAsCisJIDB4YTAsIDB4ZmZ9LAorCXsweDkwLCAweDAwLCAweDkxLCAweDFBLCAweDkyLCAweDM0LCAweDkzLCAweDUyLAorCSAweDk0LCAweDY2LCAweDk1LCAweDdFLCAweDk2LCAweDhELCAweDk3LCAweDlCLAorCSAweDk4LCAweEE4LCAweDk5LCAweEI0LCAweDlBLCAweEMwLCAweDlCLCAweENCLAorCSAweDlDLCAweEQ2LCAweDlELCAweEUxLCAweDlFLCAweEVCLCAweDlGLCAweEY1LAorCSAweGEwLCAweGZmfSwKKwl7MHg5MCwgMHgwMCwgMHg5MSwgMHgzRiwgMHg5MiwgMHg1QSwgMHg5MywgMHg2RSwKKwkgMHg5NCwgMHg3RiwgMHg5NSwgMHg4RSwgMHg5NiwgMHg5QywgMHg5NywgMHhBOCwKKwkgMHg5OCwgMHhCNCwgMHg5OSwgMHhCRiwgMHg5QSwgMHhDOSwgMHg5QiwgMHhEMywKKwkgMHg5QywgMHhEQywgMHg5RCwgMHhFNSwgMHg5RSwgMHhFRSwgMHg5RiwgMHhGNiwKKwkgMHhBMCwgMHhGRn0sCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4NTQsIDB4OTIsIDB4NkYsIDB4OTMsIDB4ODMsCisJIDB4OTQsIDB4OTMsIDB4OTUsIDB4QTAsIDB4OTYsIDB4QUQsIDB4OTcsIDB4QjcsCisJIDB4OTgsIDB4QzIsIDB4OTksIDB4Q0IsIDB4OUEsIDB4RDQsIDB4OUIsIDB4REMsCisJIDB4OUMsIDB4RTQsIDB4OUQsIDB4RUIsIDB4OUUsIDB4RjIsIDB4OUYsIDB4RjksCisJIDB4YTAsIDB4ZmZ9LAorCXsweDkwLCAweDAwLCAweDkxLCAweDZFLCAweDkyLCAweDg4LCAweDkzLCAweDlBLAorCSAweDk0LCAweEE4LCAweDk1LCAweEIzLCAweDk2LCAweEJELCAweDk3LCAweEM2LAorCSAweDk4LCAweENGLCAweDk5LCAweEQ2LCAweDlBLCAweERELCAweDlCLCAweEUzLAorCSAweDlDLCAweEU5LCAweDlELCAweEVGLCAweDlFLCAweEY0LCAweDlGLCAweEZBLAorCSAweGEwLCAweGZmfSwKKwl7MHg5MCwgMHgwMCwgMHg5MSwgMHg5MywgMHg5MiwgMHhBOCwgMHg5MywgMHhCNywKKwkgMHg5NCwgMHhDMSwgMHg5NSwgMHhDQSwgMHg5NiwgMHhEMiwgMHg5NywgMHhEOCwKKwkgMHg5OCwgMHhERSwgMHg5OSwgMHhFMywgMHg5QSwgMHhFOCwgMHg5QiwgMHhFRCwKKwkgMHg5QywgMHhGMSwgMHg5RCwgMHhGNSwgMHg5RSwgMHhGOCwgMHg5RiwgMHhGQywKKwkgMHhBMCwgMHhGRn0KK307CisKK3N0YXRpYyBjb25zdCBfX3U4IHRhczUxMzBhX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4NjIsIDB4MDgsIDB4NjMsIDB4NzAsIDB4NjQsIDB4MWQsIDB4NjAsIDB4MDl9LAorCXsweDYyLCAweDIwLCAweDYzLCAweDAxLCAweDY0LCAweDAyLCAweDYwLCAweDA5fSwKKwl7MHg2MiwgMHgwNywgMHg2MywgMHgwMywgMHg2NCwgMHgwMCwgMHg2MCwgMHgwOX0sCisJezB4NjIsIDB4MDcsIDB4NjMsIDB4MDMsIDB4NjQsIDB4MDAsIDB4NjAsIDB4MDl9LAorCXt9LAorfTsKKworLyogcmVhZCAxIGJ5dGUgKi8KK3N0YXRpYyBpbnQgcmVnX3JfMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgIF9fdTE2IGluZGV4KQoreworCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkwLAkJLyogcmVxdWVzdCAqLworCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkJLyogdmFsdWUgKi8KKwkJCWluZGV4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCA1MDApOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCV9fdTE2IHZhbHVlLAorCQkJX191MTYgaW5kZXgsCisJCQljb25zdCBfX3U4ICpidWZmZXIsIF9fdTE2IGxlbikKK3sKKwlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkJMCwKKwkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQl2YWx1ZSwgaW5kZXgsCisJCQkJTlVMTCwgMCwgNTAwKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobGVuIDw9IHNpemVvZiBnc3BjYV9kZXYtPnVzYl9idWYpIHsKKwkJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgYnVmZmVyLCBsZW4pOworCQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCQkwLAorCQkJICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCXZhbHVlLCBpbmRleCwKKwkJCQlnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgNTAwKTsKKwl9IGVsc2UgeworCQlfX3U4ICp0bXBidWY7CisKKwkJdG1wYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCQltZW1jcHkodG1wYnVmLCBidWZmZXIsIGxlbik7CisJCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJCTAsCisJCQkgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkJdmFsdWUsIGluZGV4LAorCQkJCXRtcGJ1ZiwgbGVuLCA1MDApOworCQlrZnJlZSh0bXBidWYpOworCX0KK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtOworCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJY2FtLT5lcGFkZHIgPSAweDAxOworCisJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlX3QxNjsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGVfdDE2KTsKKworCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Y29sb3JzID0gc2RfY3RybHNbU0RfQ09MT1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmdhbW1hID0gc2RfY3RybHNbU0RfR0FNTUFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPm1pcnJvciA9IHNkX2N0cmxzW1NEX01JUlJPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+ZnJlcSA9IHNkX2N0cmxzW1NEX0xJR0hURlJFUV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+d2hpdGViYWxhbmNlID0gc2RfY3RybHNbU0RfV0hJVEVfQkFMQU5DRV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+c2hhcnBuZXNzID0gc2RfY3RybHNbU0RfU0hBUlBORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCXNkLT5lZmZlY3QgPSBzZF9jdHJsc1tTRF9FRkZFQ1RTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfZGVmYXVsdF9wYXJhbWV0ZXJzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwkvKiBzb21lIG9mIHRoaXMgcmVnaXN0ZXJzIGFyZSBub3QgcmVhbGx5IG5lZGVkLCBiZWNhdXNlCisJICogdGhleSBhcmUgb3ZlcnJpZGVuIGJ5IHNldGJyaWd0aG5lc3MsIHNldGNvbnRyYXN0LCBldGMsCisJICogYnV0IHdvbnQgaHVydCBhbnl3YXksIGFuZCBjYW4gaGVscCBzb21lb25lIHdpdGggc2ltaWxhciB3ZWJjYW0KKwkgKiB0byBzZWUgdGhlIGluaXRpYWwgcGFyYW1ldGVycy4qLworCWludCBpID0gMDsKKwlfX3U4IHRlc3RfYnl0ZTsKKworCXN0YXRpYyBjb25zdCBfX3U4IHJlYWRfaW5kZXhzW10gPQorCQl7IDB4MDYsIDB4MDcsIDB4MGEsIDB4MGIsIDB4NjYsIDB4ODAsIDB4ODEsIDB4OGUsIDB4OGYsIDB4YTUsCisJCSAgMHhhNiwgMHhhOCwgMHhiYiwgMHhiYywgMHhjNiwgMHgwMCwgMHgwMCB9OworCXN0YXRpYyBjb25zdCBfX3U4IG4xWzZdID0KKwkJCXsweDA4LCAweDAzLCAweDA5LCAweDAzLCAweDEyLCAweDA0fTsKKwlzdGF0aWMgY29uc3QgX191OCBuMlsyXSA9CisJCQl7MHgwOCwgMHgwMH07CisJc3RhdGljIGNvbnN0IF9fdTggbnNldFs2XSA9CisJCXsgMHg2MSwgMHg2OCwgMHg2MiwgMHhmZiwgMHg2MCwgMHgwNyB9OworCXN0YXRpYyBjb25zdCBfX3U4IG4zWzZdID0KKwkJCXsweDYxLCAweDY4LCAweDY1LCAweDBhLCAweDYwLCAweDA0fTsKKwlzdGF0aWMgY29uc3QgX191OCBuNFsweDQ2XSA9CisJCXsweDA5LCAweDAxLCAweDEyLCAweDA0LCAweDY2LCAweDhhLCAweDgwLCAweDNjLAorCQkgMHg4MSwgMHgyMiwgMHg4NCwgMHg1MCwgMHg4YSwgMHg3OCwgMHg4YiwgMHg2OCwKKwkJIDB4OGMsIDB4ODgsIDB4OGUsIDB4MzMsIDB4OGYsIDB4MjQsIDB4YWEsIDB4YjEsCisJCSAweGEyLCAweDYwLCAweGE1LCAweDMwLCAweGE2LCAweDNhLCAweGE4LCAweGU4LAorCQkgMHhhZSwgMHgwNSwgMHhiMSwgMHgwMCwgMHhiYiwgMHgwNCwgMHhiYywgMHg0OCwKKwkJIDB4YmUsIDB4MzYsIDB4YzYsIDB4ODgsIDB4ZTksIDB4MDAsIDB4YzUsIDB4YzAsCisJCSAweDY1LCAweDBhLCAweGJiLCAweDg2LCAweGFmLCAweDU4LCAweGIwLCAweDY4LAorCQkgMHg4NywgMHg0MCwgMHg4OSwgMHgyYiwgMHg4ZCwgMHhmZiwgMHg4MywgMHg0MCwKKwkJIDB4YWMsIDB4ODQsIDB4YWQsIDB4ODYsIDB4YWYsIDB4NDZ9OworCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ0WzE4XSA9IHsKKwkJMHhlMCwgMHg2MCwgMHhlMSwgMHhhOCwgMHhlMiwgMHhlMCwgMHhlMywgMHg2MCwgMHhlNCwgMHhhOCwKKwkJMHhlNSwgMHhlMCwgMHhlNiwgMHg2MCwgMHhlNywgMHhhOCwKKwkJMHhlOCwgMHhlMAorCX07CisJLyogb2pvIHB1ZWRlIHNlciAweGU2IGVuIHZleiBkZSAweGU5ICovCisJc3RhdGljIGNvbnN0IF9fdTggbnNldDJbMjBdID0geworCQkweGQwLCAweGJiLCAweGQxLCAweDI4LCAweGQyLCAweDEwLCAweGQzLCAweDEwLCAweGQ0LCAweGJiLAorCQkweGQ1LCAweDI4LCAweGQ2LCAweDFlLCAweGQ3LCAweDI3LAorCQkweGQ4LCAweGM4LCAweGQ5LCAweGZjCisJfTsKKwlzdGF0aWMgY29uc3QgX191OCBtaXNzaW5nWzhdID0KKwkJeyAweDg3LCAweDIwLCAweDg4LCAweDIwLCAweDg5LCAweDIwLCAweDgwLCAweDM4IH07CisJc3RhdGljIGNvbnN0IF9fdTggbnNldDNbMThdID0geworCQkweGM3LCAweDYwLCAweGM4LCAweGE4LCAweGM5LCAweGUwLCAweGNhLCAweDYwLCAweGNiLCAweGE4LAorCQkweGNjLCAweGUwLCAweGNkLCAweDYwLCAweGNlLCAweGE4LAorCQkweGNmLCAweGUwCisJfTsKKwlzdGF0aWMgY29uc3QgX191OCBuc2V0NVs0XSA9CisJCXsgMHg4ZiwgMHgyNCwgMHhjMywgMHgwMCB9OwkvKiBicmlnaHQgKi8KKwlzdGF0aWMgY29uc3QgX191OCBuc2V0NlszNF0gPSB7CisJCTB4OTAsIDB4MDAsIDB4OTEsIDB4MWMsIDB4OTIsIDB4MzAsIDB4OTMsIDB4NDMsIDB4OTQsIDB4NTQsCisJCTB4OTUsIDB4NjUsIDB4OTYsIDB4NzUsIDB4OTcsIDB4ODQsCisJCTB4OTgsIDB4OTMsIDB4OTksIDB4YTEsIDB4OWEsIDB4YjAsIDB4OWIsIDB4YmQsIDB4OWMsIDB4Y2EsCisJCTB4OWQsIDB4ZDgsIDB4OWUsIDB4ZTUsIDB4OWYsIDB4ZjIsCisJCTB4YTAsIDB4ZmYKKwl9OwkJCS8qIEdhbW1hICovCisJc3RhdGljIGNvbnN0IF9fdTggbnNldDdbNF0gPQorCQkJeyAweDY2LCAweGNhLCAweGE4LCAweGY4IH07CS8qIDUwLzYwIEh6ICovCisJc3RhdGljIGNvbnN0IF9fdTggbnNldDlbNF0gPQorCQkJeyAweDBiLCAweDA0LCAweDBhLCAweDc4IH07CisJc3RhdGljIGNvbnN0IF9fdTggbnNldDhbNl0gPQorCQkJeyAweGE4LCAweGYwLCAweGM2LCAweDg4LCAweGMwLCAweDAwIH07CisJc3RhdGljIGNvbnN0IF9fdTggbnNldDEwWzZdID0KKwkJCXsgMHgwYywgMHgwMywgMHhhYiwgMHgxMCwgMHg4MSwgMHgyMCB9OworCisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG4xLCAweDA2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldCwgMHgwNik7CisJcmVnX3JfMShnc3BjYV9kZXYsIDB4MDA2Myk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG4yLCAweDAyKTsKKworCXdoaWxlIChyZWFkX2luZGV4c1tpXSAhPSAweDAwKSB7CisJCXRlc3RfYnl0ZSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCByZWFkX2luZGV4c1tpXSk7CisJCVBERUJVRyhEX0NPTkYsICJSZWcgMHglMDJ4ID0+IDB4JTAyeCIsIHJlYWRfaW5kZXhzW2ldLAorCQkgICAgICAgdGVzdF9ieXRlKTsKKwkJaSsrOworCX0KKworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuMywgMHgwNik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG40LCAweDQ2KTsKKwlyZWdfcl8xKGdzcGNhX2RldiwgMHgwMDgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MmM4MCwgTlVMTCwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQyLCAweDE0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDMsIDB4MTIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0NCwgMHgxMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDM4ODAsIE5VTEwsIDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgzODgwLCBOVUxMLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MzM4ZSwgTlVMTCwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ1LCAweDA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDBhOSwgTlVMTCwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ2LCAweDIyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODZiYiwgTlVMTCwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDRhYTYsIE5VTEwsIDApOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG1pc3NpbmcsIDB4MDgpOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDIwODcsIE5VTEwsIDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgyMDg4LCBOVUxMLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MjA4OSwgTlVMTCwgMCk7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDcsIDB4MDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0MTAsIDB4MDYpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0OCwgMHgwNik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ5LCAweDA0KTsKKworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgyODgwLCBOVUxMLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDIsIDB4MTQpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0MywgMHgxMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ0LCAweDEyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdW5zaWduZWQgaW50IGJyaWdodG5lc3M7CisJX191OCBzZXQ2WzRdID0geyAweDhmLCAweDI2LCAweGMzLCAweDgwIH07CisJYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOworCisJaWYgKGJyaWdodG5lc3MgPCA3KSB7CisJCXNldDZbM10gPSAweDcwIC0gKGJyaWdodG5lc3MgKiAweGEpOworCX0gZWxzZSB7CisJCXNldDZbMV0gPSAweDI0OworCQlzZXQ2WzNdID0gMHgwMCArICgoYnJpZ2h0bmVzcyAtIDcpICogMHhhKTsKKwl9CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgc2V0NiwgNCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCV9fdTggZmxpcGNtZFs4XSA9CisJICAgIHsgMHg2MiwgMHgwNywgMHg2MywgMHgwMywgMHg2NCwgMHgwMCwgMHg2MCwgMHgwOSB9OworCisJaWYgKHNkLT5taXJyb3IgPT0gMSkKKwkJZmxpcGNtZFszXSA9IDB4MDE7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgZmxpcGNtZCwgOCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGVmZmVjdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIGVmZmVjdHNfdGFibGVbc2QtPmVmZmVjdF0sIDB4MDYpOworCWlmIChzZC0+ZWZmZWN0ID09IDEgfHwgc2QtPmVmZmVjdCA9PSA1KSB7CisJCVBERUJVRyhEX0NPTkYsCisJCSAgICAgICAiVGhpcyBlZmZlY3QgaGF2ZSBiZWVuIGRpc2FibGVkIGZvciB3ZWJjYW0gXCJzYWZldHlcIiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHNkLT5lZmZlY3QgPT0gMSB8fCBzZC0+ZWZmZWN0ID09IDQpCisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg0YWE2LCBOVUxMLCAwKTsKKwllbHNlCisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHhmYWE2LCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQgc2V0d2hpdGViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlfX3U4IHdoaXRlX2JhbGFuY2VbOF0gPQorCSAgICB7IDB4ODcsIDB4MjAsIDB4ODgsIDB4MjAsIDB4ODksIDB4MjAsIDB4ODAsIDB4MzggfTsKKworCWlmIChzZC0+d2hpdGViYWxhbmNlID09IDEpCisJCXdoaXRlX2JhbGFuY2VbN10gPSAweDNjOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHdoaXRlX2JhbGFuY2UsIDgpOworfQorCitzdGF0aWMgdm9pZCBzZXRsaWdodGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3U4IGZyZXFbNF0gPSB7IDB4NjYsIDB4NDAsIDB4YTgsIDB4ZTggfTsKKworCWlmIChzZC0+ZnJlcSA9PSAyKQkvKiA2MGh6ICovCisJCWZyZXFbMV0gPSAweDAwOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDEsIDB4MDAwMCwgZnJlcSwgMHg0KTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1bnNpZ25lZCBpbnQgY29udHJhc3QgPSBzZC0+Y29udHJhc3Q7CisJX191MTYgcmVnX3RvX3dyaXRlID0gMHgwMDsKKworCWlmIChjb250cmFzdCA8IDcpCisJCXJlZ190b193cml0ZSA9IDB4OGVhOSAtICgweDIwMCAqIGNvbnRyYXN0KTsKKwllbHNlCisJCXJlZ190b193cml0ZSA9ICgweDAwYTkgKyAoKGNvbnRyYXN0IC0gNykgKiAweDIwMCkpOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCByZWdfdG9fd3JpdGUsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3UxNiByZWdfdG9fd3JpdGU7CisKKwlyZWdfdG9fd3JpdGUgPSAweGMwYmIgKyBzZC0+Y29sb3JzICogMHgxMDA7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCByZWdfdG9fd3JpdGUsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBzZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTE2IHJlZ190b193cml0ZTsKKworCXJlZ190b193cml0ZSA9IDB4MGFhNiArIDB4MTAwMCAqIHNkLT5zaGFycG5lc3M7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIHJlZ190b193cml0ZSwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmJyaWdodG5lc3M7CisJcmV0dXJuICp2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0d2hpdGViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT53aGl0ZWJhbGFuY2UgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+d2hpdGViYWxhbmNlOworCXJldHVybiAqdmFsOworfQorCitzdGF0aWMgaW50IHNkX3NldGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPm1pcnJvciA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGZsaXAoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPm1pcnJvcjsKKwlyZXR1cm4gKnZhbDsKK30KKworc3RhdGljIGludCBzZF9zZXRlZmZlY3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmVmZmVjdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGVmZmVjdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGVmZmVjdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5lZmZlY3Q7CisJcmV0dXJuICp2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbnRyYXN0ID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gKnZhbDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9ycyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb2xvcnM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmdhbW1hID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCSp2YWwgPSBzZC0+Z2FtbWE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+ZnJlcSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+ZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnNoYXJwbmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zaGFycG5lc3M7CisJcmV0dXJuIDA7Cit9CisKKy8qIExvdyBMaWdodCBzZXQgIGhlcmUuLi4uLi4qLworc3RhdGljIGludCBzZF9zZXRsb3dsaWdodChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YXV0b2dhaW4gPSB2YWw7CisJaWYgKHZhbCAhPSAwKQorCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ZjQ4ZSwgTlVMTCwgMCk7CisJZWxzZQorCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4YjQ4ZSwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0bG93bGlnaHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YXV0b2dhaW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgbW9kZTsKKworCXN0YXRpYyBjb25zdCBfX3U4IHQxW10gPSB7IDB4NjYsIDB4MDAsIDB4YTgsIDB4ZTggfTsKKwlfX3U4IHQyW10gPSB7IDB4MDcsIDB4MDAsIDB4MGQsIDB4NjAsIDB4MGUsIDB4ODAgfTsKKwlzdGF0aWMgY29uc3QgX191OCB0M1tdID0KKwkJeyAweGIzLCAweDA3LCAweGI0LCAweDAwLCAweGI1LCAweDg4LCAweGI2LCAweDAyLCAweGI3LCAweDA2LAorCQkgIDB4YjgsIDB4MDAsIDB4YjksIDB4ZTcsIDB4YmEsIDB4MDEgfTsKKwlzdGF0aWMgY29uc3QgX191OCB0NFtdID0geyAweDBiLCAweDA0LCAweDBhLCAweDQwIH07CisKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLiBwcml2OworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMToJCS8qIDM1MngyODggKi8KKwkJdDJbMV0gPSAweDQwOworCQlicmVhazsKKwljYXNlIDI6CQkvKiAzMjB4MjQwICovCisJCXQyWzFdID0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSAzOgkJLyogMTc2eDE0NCAqLworCQl0MlsxXSA9IDB4NTA7CisJCWJyZWFrOworCWNhc2UgNDoJCS8qIDE2MHgxMjAgKi8KKwkJdDJbMV0gPSAweDIwOworCQlicmVhazsKKwlkZWZhdWx0OgkvKiA2NDB4NDgwICgweDAwKSAqLworCQlicmVhazsKKwl9CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0sIDB4OCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHRhczUxMzBhX3NlbnNvcl9pbml0WzFdLCAweDgpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCB0YXM1MTMwYV9zZW5zb3JfaW5pdFsyXSwgMHg4KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdGFzNTEzMGFfc2Vuc29yX2luaXRbM10sIDB4OCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDNjODAsIE5VTEwsIDApOworCQkvKiBqdXN0IGluIGNhc2UgYW5kIHRvIGtlZXAgc3luYyB3aXRoIGxvZ3MgIChmb3IgbWluZSkgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdGFzNTEzMGFfc2Vuc29yX2luaXRbM10sIDB4OCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDNjODAsIE5VTEwsIDApOworCQkvKiBqdXN0IGluIGNhc2UgYW5kIHRvIGtlZXAgc3luYyB3aXRoIGxvZ3MgIChmb3IgbWluZSkgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdDEsIDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCB0MiwgNik7CisJcmVnX3JfMShnc3BjYV9kZXYsIDB4MDAxMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHQzLCAweDEwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDAxMywgTlVMTCwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHQ0LCAweDQpOworCS8qIHJlc3RhcnQgb24gZWFjaCBzdGFydCwganVzdCBpbiBjYXNlLCBzb21ldGltZXMgcmVncyBnb2VzIHdyb25nCisJICogd2hlbiB1c2luZyBjb250cm9scyBmcm9tIGFwcCAqLworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldGNvbG9ycyhnc3BjYV9kZXYpOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIHZvaWQgc2RfY2xvc2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KKwkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCWludCBsZW4pCQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgc29mID0gMDsKKwlzdGF0aWMgX191OCBmZmQ5W10gPSB7IDB4ZmYsIDB4ZDkgfTsKKworCWlmIChkYXRhWzBdID09IDB4NWEpIHsKKwkJLyogQ29udHJvbCBQYWNrZXQsIGFmdGVyIHRoaXMgY2FtZSB0aGUgaGVhZGVyIGFnYWluLAorCQkgKiBidXQgZXh0cmEgYnl0ZXMgY2FtZSBpbiB0aGUgcGFja2V0IGJlZm9yZSB0aGlzLAorCQkgKiBzb21ldGltZXMgYW4gRU9GIGFycml2ZXMsIHNvbWV0aW1lcyBub3QuLi4gKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChkYXRhW2xlbiAtIDFdID09IDB4ZmYgJiYgZGF0YVtsZW5dID09IDB4ZDkpIHsKKwkJLyogSnVzdCBpbiBjYXNlLCBpIGhhdmUgc2VlbiBwYWNrZXRzIHdpdGggdGhlIG1hcmtlciwKKwkJICogb3RoZXIncyBkbyBub3QgaW5jbHVkZSBpdC4uLiAqLworCQlkYXRhICs9IDI7CisJCWxlbiAtPSA0OworCX0gZWxzZSBpZiAoZGF0YVsyXSA9PSAweGZmICYmIGRhdGFbM10gPT0gMHhkOCkgeworCQlzb2YgPSAxOworCQlkYXRhICs9IDI7CisJCWxlbiAtPSAyOworCX0gZWxzZSB7CisJCWRhdGEgKz0gMjsKKwkJbGVuIC09IDI7CisJfQorCisJaWYgKHNvZikgeworCQkvKiBleHRyYSBieXRlcy4uLi4uLCBjb3VsZCBiZSBwcm9jZXNzZWQgdG9vIGJ1dCB3b3VsZCBiZQorCQkgKiBhIHdhc3RlIG9mIHRpbWUsIHJpZ2h0IG5vdyBsZWF2ZSB0aGUgYXBwbGljYXRpb24gYW5kCisJCSAqIGxpYmpwZWcgZG8gaXQgZm9yIG91cnNlcmx2ZXMuLiAqLworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJZmZkOSwgMik7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgaW50IHNkX3F1ZXJ5bWVudShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpCit7CisJc3dpdGNoIChtZW51LT5pZCkgeworCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k6CisJCXN3aXRjaCAobWVudS0+aW5kZXgpIHsKKwkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRUZGRUNUUzoKKwkJaWYgKCh1bnNpZ25lZCkgbWVudS0+aW5kZXggPCBBUlJBWV9TSVpFKGVmZmVjdHNfY29udHJvbCkpIHsKKwkJCXN0cm5jcHkoKGNoYXIgKikgbWVudS0+bmFtZSwKKwkJCQllZmZlY3RzX2NvbnRyb2xbbWVudS0+aW5kZXhdLCAzMik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IG9wZW4gdGltZSAqLworc3RhdGljIGludCBzZF9vcGVuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbml0X2RlZmF1bHRfcGFyYW1ldGVycyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5vcGVuID0gc2Rfb3BlbiwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKKwkuY2xvc2UgPSBzZF9jbG9zZSwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCisjZGVmaW5lIERWTk0obmFtZSkgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSBuYW1lCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDE3YTEsIDB4MDEyOCksIERWTk0oIlhQWCBXZWJjYW0iKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJICAgICAgIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJUERFQlVHKERfUFJPQkUsICJ2JXMgcmVnaXN0ZXJlZCIsIHZlcnNpb24pOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3OTM4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKQEAgLTAsMCArMSw2NzAgQEAKKy8qCisgKiBRdWlja2NhbSBjYW1lcmFzIGluaXRpYWxpemF0aW9uIGRhdGEKKyAqCisgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKyNkZWZpbmUgTU9EVUxFX05BTUUgInR2ODUzMiIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDEsIDcpCitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiMi4xLjciOworCitNT0RVTEVfQVVUSE9SKCJNaWNoZWwgWGhhYXJkIDxteGhhYXJkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFY4NTMyIFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisKKwlpbnQgYnVmbGVuOwkJCS8qIGN1cnJlbnQgbGVuZ3RoIG9mIHRtcGJ1ZiAqLworCV9fdTggdG1wYnVmWzM1MiAqIDI4OCArIDEwICogMjg4XTsJLyogbm8gcHJvdGVjdGlvbi4uLiAqLworCV9fdTggdG1wYnVmMlszNTIgKiAyODhdOwkJLyogbm8gcHJvdGVjdGlvbi4uLiAqLworCisJdW5zaWduZWQgc2hvcnQgYnJpZ2h0bmVzczsKKwl1bnNpZ25lZCBzaG9ydCBjb250cmFzdDsKKworCWNoYXIgcGFja2V0OworCWNoYXIgc3luY2hybzsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKyNkZWZpbmUgU0RfQlJJR0hUTkVTUyAwCisJeworCSB7CisJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCSAgLm5hbWUgPSAiQnJpZ2h0bmVzcyIsCisJICAubWluaW11bSA9IDEsCisJICAubWF4aW11bSA9IDB4MmZmLAorCSAgLnN0ZXAgPSAxLAorCSAgLmRlZmF1bHRfdmFsdWUgPSAweDE4ZiwKKwkgIH0sCisJIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwkgfSwKKyNkZWZpbmUgU0RfQ09OVFJBU1QgMQorCXsKKwkgeworCSAgLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAubmFtZSA9ICJDb250cmFzdCIsCisJICAubWluaW11bSA9IDAsCisJICAubWF4aW11bSA9IDB4ZmZmZiwKKwkgIC5zdGVwID0gMSwKKwkgIC5kZWZhdWx0X3ZhbHVlID0gMHg3ZmZmLAorCSAgfSwKKwkgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJIH0sCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTc2LAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDF9LAorCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkuc2l6ZWltYWdlID0gMzUyICogMjg4LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyoKKyAqIEluaXRpYWxpemF0aW9uIGRhdGE6IHRoaXMgaXMgdGhlIGZpcnN0IHNldC11cCBkYXRhIHdyaXR0ZW4gdG8gdGhlCisgKiBkZXZpY2UgKGJlZm9yZSB0aGUgb3BlbiBkYXRhKS4KKyAqLworI2RlZmluZSBURVNUQ0xLIDB4MTAJCS8qIHJlZyAweDJjIC0+IDB4MTIgLy8xMCAqLworI2RlZmluZSBURVNUQ09NUCAweDkwCQkvKiByZWcgMHgyOCAtPiAweDgwICovCisjZGVmaW5lIFRFU1RMSU5FIDB4ODEJCS8qIHJlZyAweDI5IC0+IDB4ODEgKi8KKyNkZWZpbmUgUUNJRkxJTkUgMHg0MQkJLyogcmVnIDB4MjkgLT4gMHg4MSAqLworI2RlZmluZSBURVNUUFRMIDB4MTQJCS8qIHJlZyAweDJEIC0+IDB4MTQgKi8KKyNkZWZpbmUgVEVTVFBUSCAweDAxCQkvKiByZWcgMHgyRSAtPiAweDAxICovCisjZGVmaW5lIFRFU1RQVEJMIDB4MTIJCS8qIHJlZyAweDJGIC0+IDB4MGEgKi8KKyNkZWZpbmUgVEVTVFBUQkggMHgwMQkJLyogcmVnIDB4MzAgLT4gMHgwMSAqLworI2RlZmluZSBBRFdJRFRITCAweGU4CQkvKiByZWcgMHgwYyAtPiAweGU4ICovCisjZGVmaW5lIEFEV0lEVEhIIDB4MDMJCS8qIHJlZyAweDBkIC0+IDB4MDMgKi8KKyNkZWZpbmUgQURIRUlHSEwgMHg5MAkJLyogcmVnIDB4MGUgLT4gMHg5MSAvLzkzICovCisjZGVmaW5lIEFESEVJR0hIIDB4MDEJCS8qIHJlZyAweDBmIC0+IDB4MDEgKi8KKyNkZWZpbmUgRVhQT0wgMHg4ZgkJLyogcmVnIDB4MWMgLT4gMHg4ZiAqLworI2RlZmluZSBFWFBPSCAweDAxCQkvKiByZWcgMHgxZCAtPiAweDAxICovCisjZGVmaW5lIEFEQ0JFR0lOTCAweDQ0CQkvKiByZWcgMHgxMCAtPiAweDQ2IC8vNDcgKi8KKyNkZWZpbmUgQURDQkVHSU5IIDB4MDAJCS8qIHJlZyAweDExIC0+IDB4MDAgKi8KKyNkZWZpbmUgQURSQkVHSU5MIDB4MGEJCS8qIHJlZyAweDE0IC0+IDB4MGIgLy8weDBjICovCisjZGVmaW5lIEFEUkJFR0lOSCAweDAwCQkvKiByZWcgMHgxNSAtPiAweDAwICovCisjZGVmaW5lIFRWODUzMl9DTURfVVBEQVRFIDB4ODQKKworI2RlZmluZSBUVjg1MzJfRUVwcm9tX0FkZCAweDAzCisjZGVmaW5lIFRWODUzMl9FRXByb21fRGF0YUwgMHgwNAorI2RlZmluZSBUVjg1MzJfRUVwcm9tX0RhdGFNIDB4MDUKKyNkZWZpbmUgVFY4NTMyX0VFcHJvbV9EYXRhSCAweDA2CisjZGVmaW5lIFRWODUzMl9FRXByb21fVGFibGVMZW5ndGggMHgwNworI2RlZmluZSBUVjg1MzJfRUVwcm9tX1dyaXRlIDB4MDgKKyNkZWZpbmUgVFY4NTMyX1BBUlRfQ1RSTCAweDAwCisjZGVmaW5lIFRWODUzMl9DVFJMIDB4MDEKKyNkZWZpbmUgVFY4NTMyX0NNRF9FRXByb21fT3BlbiAweDMwCisjZGVmaW5lIFRWODUzMl9DTURfRUVwcm9tX0Nsb3NlIDB4MjkKKyNkZWZpbmUgVFY4NTMyX1VEUF9VUERBVEUgMHgzMQorI2RlZmluZSBUVjg1MzJfR1BJTyAweDM5CisjZGVmaW5lIFRWODUzMl9HUElPX09FIDB4M0IKKyNkZWZpbmUgVFY4NTMyX1JFUV9SZWdXcml0ZSAweDAyCisjZGVmaW5lIFRWODUzMl9SRVFfUmVnUmVhZCAweDAzCisKKyNkZWZpbmUgVFY4NTMyX0FEV0lEVEhfTCAweDBDCisjZGVmaW5lIFRWODUzMl9BRFdJRFRIX0ggMHgwRAorI2RlZmluZSBUVjg1MzJfQURIRUlHSFRfTCAweDBFCisjZGVmaW5lIFRWODUzMl9BREhFSUdIVF9IIDB4MEYKKyNkZWZpbmUgVFY4NTMyX0VYUE9TVVJFIDB4MUMKKyNkZWZpbmUgVFY4NTMyX1FVQU5UX0NPTVAgMHgyOAorI2RlZmluZSBUVjg1MzJfTU9ERV9QQUNLRVQgMHgyOQorI2RlZmluZSBUVjg1MzJfU0VUQ0xLIDB4MkMKKyNkZWZpbmUgVFY4NTMyX1BPSU5UX0wgMHgyRAorI2RlZmluZSBUVjg1MzJfUE9JTlRfSCAweDJFCisjZGVmaW5lIFRWODUzMl9QT0lOVEJfTCAweDJGCisjZGVmaW5lIFRWODUzMl9QT0lOVEJfSCAweDMwCisjZGVmaW5lIFRWODUzMl9CVURHRVRfTCAweDJBCisjZGVmaW5lIFRWODUzMl9CVURHRVRfSCAweDJCCisjZGVmaW5lIFRWODUzMl9WSURfTCAweDM0CisjZGVmaW5lIFRWODUzMl9WSURfSCAweDM1CisjZGVmaW5lIFRWODUzMl9QSURfTCAweDM2CisjZGVmaW5lIFRWODUzMl9QSURfSCAweDM3CisjZGVmaW5lIFRWODUzMl9EZXZpY2VJRCAweDgzCisjZGVmaW5lIFRWODUzMl9BRF9TTE9QRSAweDkxCisjZGVmaW5lIFRWODUzMl9BRF9CSVRDVFJMIDB4OTQKKyNkZWZpbmUgVFY4NTMyX0FEX0NPTEJFR0lOX0wgMHgxMAorI2RlZmluZSBUVjg1MzJfQURfQ09MQkVHSU5fSCAweDExCisjZGVmaW5lIFRWODUzMl9BRF9ST1dCRUdJTl9MIDB4MTQKKyNkZWZpbmUgVFY4NTMyX0FEX1JPV0JFR0lOX0ggMHgxNQorCitzdGF0aWMgY29uc3QgX191MzIgdHZfODUzMl9lZXByb21fZGF0YVtdID0geworLyoJYWRkCQlkYXRhTAkgICBkYXRhTQlkYXRhSCAqLworCTB4MDAwMTAwMDEsIDB4MDEwMTgwMTEsIDB4MDIwNTAwMTQsIDB4MDMwNTAwMWMsCisJMHgwNDBkMDAxZSwgMHgwNTA1MDAxZiwgMHgwNjA1MDUxOSwgMHgwNzA1MDExYiwKKwkweDA4MDUwOTFlLCAweDA5MGQ4OTJlLCAweDBhMDU4OTJmLCAweDBiMDUwZGQ5LAorCTB4MGMwNTA5ZjEsIDAKK307CisKK3N0YXRpYyBpbnQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgX191MTYgaW5kZXgpCit7CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVRWODUzMl9SRVFfUmVnUmVhZCwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJMCwJLyogdmFsdWUgKi8KKwkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCisJCQk1MDApOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07Cit9CisKKy8qIHdyaXRlIDEgYnl0ZSAqLworc3RhdGljIHZvaWQgcmVnX3dfMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgX191MTYgaW5kZXgsIF9fdTggdmFsdWUpCit7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gdmFsdWU7CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVRWODUzMl9SRVFfUmVnV3JpdGUsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkvKiB2YWx1ZSAqLworCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgNTAwKTsKK30KKworLyogd3JpdGUgMiBieXRlcyAqLworc3RhdGljIHZvaWQgcmVnX3dfMihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgX191MTYgaW5kZXgsIF9fdTggdmFsMSwgX191OCB2YWwyKQoreworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDE7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsMjsKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJVFY4NTMyX1JFUV9SZWdXcml0ZSwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTAsCS8qIHZhbHVlICovCisJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAyLCA1MDApOworfQorCitzdGF0aWMgdm9pZCB0dl84NTMyV3JpdGVFRXByb20oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBpID0gMDsKKwlfX3U4IHJlZywgZGF0YTAsIGRhdGExLCBkYXRhMjsKKworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJTywgMHhiMCk7CisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9DVFJMLCBUVjg1MzJfQ01EX0VFcHJvbV9PcGVuKTsKKy8qCW1zbGVlcCgxKTsgKi8KKwl3aGlsZSAodHZfODUzMl9lZXByb21fZGF0YVtpXSkgeworCQlyZWcgPSAodHZfODUzMl9lZXByb21fZGF0YVtpXSAmIDB4ZmYwMDAwMDApID4+IDI0OworCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0VFcHJvbV9BZGQsIHJlZyk7CisJCS8qIG1zbGVlcCgxKTsgKi8KKwkJZGF0YTAgPSAodHZfODUzMl9lZXByb21fZGF0YVtpXSAmIDB4MDAwMDAwZmYpOworCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0VFcHJvbV9EYXRhTCwgZGF0YTApOworCQkvKiBtc2xlZXAoMSk7ICovCisJCWRhdGExID0gKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0gJiAweDAwMDBmZjAwKSA+PiA4OworCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0VFcHJvbV9EYXRhTSwgZGF0YTEpOworCQkvKiBtc2xlZXAoMSk7ICovCisJCWRhdGEyID0gKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0gJiAweDAwZmYwMDAwKSA+PiAxNjsKKwkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fRGF0YUgsIGRhdGEyKTsKKwkJLyogbXNsZWVwKDEpOyAqLworCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0VFcHJvbV9Xcml0ZSwgMCk7CisJCS8qIG1zbGVlcCgxMCk7ICovCisJCWkrKzsKKwl9CisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fVGFibGVMZW5ndGgsIGkpOworLyoJbXNsZWVwKDEpOyAqLworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQ1RSTCwgVFY4NTMyX0NNRF9FRXByb21fQ2xvc2UpOworCW1zbGVlcCgxMCk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCBjYW0gKmNhbTsKKworCXR2Xzg1MzJXcml0ZUVFcHJvbShnc3BjYV9kZXYpOworCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJY2FtLT5lcGFkZHIgPSAxOworCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKKwljYW0tPm5tb2RlcyA9IHNpemVvZiBzaWZfbW9kZSAvIHNpemVvZiBzaWZfbW9kZVswXTsKKworCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdHZfODUzMlJlYWRSZWdpc3RlcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCV9fdTggZGF0YTsKKworCWRhdGEgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwMSk7CisJUERFQlVHKERfVVNCSSwgInJlZ2lzdGVyIDB4MDEtPiAleCIsIGRhdGEpOworCWRhdGEgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwMik7CisJUERFQlVHKERfVVNCSSwgInJlZ2lzdGVyIDB4MDItPiAleCIsIGRhdGEpOworCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfTCk7CisJcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfQURXSURUSF9IKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9RVUFOVF9DT01QKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCk7CisJcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfU0VUQ0xLKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9MKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9IKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfTCk7CisJcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRCX0gpOworCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0JVREdFVF9MKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9CVURHRVRfSCk7CisJcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfVklEX0wpOworCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1ZJRF9IKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QSURfTCk7CisJcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfUElEX0gpOworCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0RldmljZUlEKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9MKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9IKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRF9ST1dCRUdJTl9MKTsKKwlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRF9ST1dCRUdJTl9IKTsKK30KKworc3RhdGljIHZvaWQgdHZfODUzMl9zZXRSZWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fTCwKKwkJCUFEQ0JFR0lOTCk7CQkJLyogMHgxMCAqLworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fSCwKKwkJCUFEQ0JFR0lOSCk7CQkJLyogYWxzbyBkaWdpdGFsIGdhaW4gKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwKKwkJCVRWODUzMl9DTURfVVBEQVRFKTsJCS8qIDB4MDA8LTB4ODQgKi8KKworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYSk7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FESEVJR0hUX0wsIEFESEVJR0hMKTsgLyogMGUgKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FESEVJR0hUX0gsIEFESEVJR0hIKTsgLyogMGYgKi8KKwlyZWdfd18yKGdzcGNhX2RldiwgVFY4NTMyX0VYUE9TVVJFLAorCQkJRVhQT0wsIEVYUE9IKTsJCQkvKiAzNTBkIDB4MDE0YzsgMWMgKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0wsCisJCQlBRENCRUdJTkwpOwkJCS8qIDB4MTAgKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0gsCisJCQlBRENCRUdJTkgpOwkJCS8qIGFsc28gZGlnaXRhbCBnYWluICovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9ST1dCRUdJTl9MLAorCQkJQURSQkVHSU5MKTsJCQkvKiAweDE0ICovCisKKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDAwKTsJLyogMHg5MSAqLworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQklUQ1RSTCwgMHgwMik7CS8qIDB4OTQgKi8KKworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQ1RSTCwKKwkJCVRWODUzMl9DTURfRUVwcm9tX0Nsb3NlKTsJLyogMHgwMSAqLworCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9TTE9QRSwgMHgwMCk7CS8qIDB4OTEgKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwKKwkJCVRWODUzMl9DTURfVVBEQVRFKTsJCS8qIDB4MDA8LTB4ODQgKi8KK30KKworc3RhdGljIHZvaWQgdHZfODUzMl9Qb2xsUmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgaTsKKworCS8qIHN0cmFuZ2UgcG9sbGluZyBmcm9tIHRnYyAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfU0VUQ0xLLAorCQkJVEVTVENMSyk7CQkvKiAweDQ4OyAvLzB4MDg7IDB4MmMgKi8KKwkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QQVJUX0NUUkwsIFRWODUzMl9DTURfVVBEQVRFKTsKKwkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAxKTsJLyogMHgzMSAqLworCX0KK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgb3BlbiB0aW1lICovCitzdGF0aWMgaW50IHNkX29wZW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfU0xPUEUsIDB4MzIpOworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQklUQ1RSTCwgMHgwMCk7CisJdHZfODUzMlJlYWRSZWdpc3RlcnMoZ3NwY2FfZGV2KTsKKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGIpOworCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfQURIRUlHSFRfTCwgQURIRUlHSEwsCisJCQkJQURIRUlHSEgpOwkvKiA0MDFkIDB4MDE2OTsgMGUgKi8KKwlyZWdfd18yKGdzcGNhX2RldiwgVFY4NTMyX0VYUE9TVVJFLCBFWFBPTCwKKwkJCQlFWFBPSCk7CQkvKiAzNTBkIDB4MDE0YzsgMWMgKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfTCwgQURXSURUSEwpOwkvKiAweDIwOyAweDBjICovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0gsIEFEV0lEVEhIKTsJLyogMHgwZCAqLworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9RVUFOVF9DT01QLAorCQkJVEVTVENPTVApOwkvKiAweDcyIGNvbXByZXNzZWQgbW9kZSAweDI4ICovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCwKKwkJCVRFU1RMSU5FKTsJLyogMHg4NDsgLy8gQ0lGIHwgNCBwYWNrZXQgMHgyOSAqLworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1NFVENMSywKKwkJCVRFU1RDTEspOwkJLyogMHg0ODsgLy8weDA4OyAweDJjICovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9MLAorCQkJVEVTVFBUTCk7CQkvKiAweDM4OyAweDJkICovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9ILAorCQkJVEVTVFBUSCk7CQkvKiAweDA0OyAweDJlICovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfTCwKKwkJCVRFU1RQVEJMKTsJCS8qIDB4MDQ7IDB4MmYgKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UQl9ILAorCQkJVEVTVFBUQkgpOwkJLyogMHgwNDsgMHgzMCAqLworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAorCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkvKiAweDAwPC0weDg0ICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAxKTsJLyogMHgzMSAqLworCW1zbGVlcCgyMDApOworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMCk7CS8qIDB4MzEgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl0dl84NTMyX3NldFJlZyhnc3BjYV9kZXYpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdHZfODUzMl9zZXRSZWcoZ3NwY2FfZGV2KTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl0dl84NTMyX1BvbGxSZWcoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CisKKwlyZWdfd18yKGdzcGNhX2RldiwgVFY4NTMyX0VYUE9TVVJFLAorCQlicmlnaHRuZXNzID4+IDgsIGJyaWdodG5lc3MpOwkJLyogMWMgKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwgVFY4NTMyX0NNRF9VUERBVEUpOworfQorCisvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCitzdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9TTE9QRSwgMHgzMik7CisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9CSVRDVFJMLCAweDAwKTsKKwl0dl84NTMyUmVhZFJlZ2lzdGVycyhnc3BjYV9kZXYpOworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7CisJcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9BREhFSUdIVF9MLAorCQlBREhFSUdITCwgQURIRUlHSEgpOwkvKiA0MDFkIDB4MDE2OTsgMGUgKi8KKy8qCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfRVhQT1NVUkUsCisJCUVYUE9MLCBFWFBPSCk7CQkgKiAzNTBkIDB4MDE0YzsgMWMgKi8KKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisKKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfTCwgQURXSURUSEwpOwkvKiAweDIwOyAweDBjICovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0gsIEFEV0lEVEhIKTsJLyogMHgwZCAqLworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1FVQU5UX0NPTVAsCisJCQlURVNUQ09NUCk7CS8qIDB4NzIgY29tcHJlc3NlZCBtb2RlIDB4MjggKi8KKwlpZiAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYpIHsKKwkJLyogMTc2eDE0NCAqLworCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX01PREVfUEFDS0VULAorCQkJUUNJRkxJTkUpOwkvKiAweDg0OyAvLyBDSUYgfCA0IHBhY2tldCAweDI5ICovCisJfSBlbHNlIHsKKwkJLyogMzUyeDI4OCAqLworCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX01PREVfUEFDS0VULAorCQkJVEVTVExJTkUpOwkvKiAweDg0OyAvLyBDSUYgfCA0IHBhY2tldCAweDI5ICovCisJfQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9TRVRDTEssCisJCQlURVNUQ0xLKTsJCS8qIDB4NDg7IC8vMHgwODsgMHgyYyAqLworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfTCwKKwkJCVRFU1RQVEwpOwkJLyogMHgzODsgMHgyZCAqLworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfSCwKKwkJCVRFU1RQVEgpOwkJLyogMHgwNDsgMHgyZSAqLworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRCX0wsCisJCQlURVNUUFRCTCk7CQkvKiAweDA0OyAweDJmICovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfSCwKKwkJCVRFU1RQVEJIKTsJCS8qIDB4MDQ7IDB4MzAgKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwKKwkJCVRWODUzMl9DTURfVVBEQVRFKTsJLyogMHgwMDwtMHg4NCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAxKTsJLyogMHgzMSAqLworCW1zbGVlcCgyMDApOworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMCk7CS8qIDB4MzEgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXR2Xzg1MzJfc2V0UmVnKGdzcGNhX2Rldik7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdHZfODUzMl9zZXRSZWcoZ3NwY2FfZGV2KTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXR2Xzg1MzJfUG9sbFJlZyhnc3BjYV9kZXYpOworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMCk7CS8qIDB4MzEgKi8KK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIHZvaWQgc2RfY2xvc2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCB0djg1MzJfcHJlcHJvY2VzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworLyogd2Ugc2hvdWxkIHJlY2VpdmVkIGEgd2hvbGUgZnJhbWUgd2l0aCBoZWFkZXIgYW5kIEVPTCBtYXJrZXIKKyAqIGluIGdzcGNhX2Rldi0+dG1wYnVmIGFuZCByZXR1cm4gYSBHQlJHIHBhdHRlcm4gaW4gZ3NwY2FfZGV2LT50bXBidWYyCisgKiBzZXF1ZW5jZSAyYnl0ZXMgaGVhZGVyIHRoZSBBbHRlcm5hdGUgcGl4ZWxzIGJheWVyIEdCIDQgYnl0ZXMKKyAqIEFsdGVybmF0ZSBwaXhlbHMgYmF5ZXIgUkcgNCBieXRlcyBFT0wgKi8KKwlpbnQgd2lkdGggPSBnc3BjYV9kZXYtPndpZHRoOworCWludCBoZWlnaHQgPSBnc3BjYV9kZXYtPmhlaWdodDsKKwl1bnNpZ25lZCBjaGFyICpkc3QgPSBzZC0+dG1wYnVmMjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gc2QtPnRtcGJ1ZjsKKwlpbnQgaTsKKworCS8qIHByZWNvbXB1dGUgd2hlcmUgaXMgdGhlIGdvb2QgYmF5ZXIgbGluZSAqLworCWlmICgoKGRhdGFbM10gKyBkYXRhW3dpZHRoICsgN10pID4+IDEpCisJICAgICsgKGRhdGFbNF0gPj4gMikKKwkgICAgKyAoZGF0YVt3aWR0aCArIDZdID4+IDEpID49ICgoZGF0YVsyXSArIGRhdGFbd2lkdGggKyA2XSkgPj4gMSkKKwkgICAgKyAoZGF0YVszXSA+PiAyKQorCSAgICArIChkYXRhW3dpZHRoICsgNV0gPj4gMSkpCisJCWRhdGEgKz0gMzsKKwllbHNlCisJCWRhdGEgKz0gMjsKKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0IC8gMjsgaSsrKSB7CisJCW1lbWNweShkc3QsIGRhdGEsIHdpZHRoKTsKKwkJZGF0YSArPSB3aWR0aCArIDM7CisJCWRzdCArPSB3aWR0aDsKKwkJbWVtY3B5KGRzdCwgZGF0YSwgd2lkdGgpOworCQlkYXRhICs9IHdpZHRoICsgNzsKKwkJZHN0ICs9IHdpZHRoOworCX0KK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGRhdGFbMF0gIT0gMHg4MCkgeworCQlzZC0+cGFja2V0Kys7CisJCWlmIChzZC0+YnVmbGVuICsgbGVuID4gc2l6ZW9mIHNkLT50bXBidWYpIHsKKwkJCWlmIChnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgIT0gRElTQ0FSRF9QQUNLRVQpIHsKKwkJCQlQREVCVUcoRF9QQUNLLCAiYnVmZmVyIG92ZXJmbG93Iik7CisJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwkJbWVtY3B5KCZzZC0+dG1wYnVmW3NkLT5idWZsZW5dLCBkYXRhLCBsZW4pOworCQlzZC0+YnVmbGVuICs9IGxlbjsKKwkJcmV0dXJuOworCX0KKworCS8qIGhlcmUgd2UgZGV0ZWN0IDB4ODAgKi8KKwkvKiBjb3VudGVyIGlzIGxpbWl0ZWQgc28gd2UgbmVlZCBmZXcgaGVhZGVyIGZvciBhIGZyYW1lIDopICovCisKKwkvKiBoZWFkZXIgMHg4MCAweDgwIDB4ODAgMHg4MCAweDgwICovCisJLyogcGFja2V0ICAwMCAgIDYzICAxMjcgIDE0NSAgMDAgICAqLworCS8qIHNvZiAgICAgMCAgICAgMSAgIDEgICAgMCAgICAwICAgKi8KKworCS8qIHVwZGF0ZSBzZXF1ZW5jZSAqLworCWlmIChzZC0+cGFja2V0ID09IDYzIHx8IHNkLT5wYWNrZXQgPT0gMTI3KQorCQlzZC0+c3luY2hybyA9IDE7CisKKwkvKiBpcyB0aGVyZSBhIGZyYW1lIHN0YXJ0ID8gKi8KKwlpZiAoc2QtPnBhY2tldCA+PSAoZ3NwY2FfZGV2LT5oZWlnaHQgPj4gMSkgLSAxKSB7CisJCVBERUJVRyhEX1BBQ0ssICJTT0YgPiAlZCBwYWNrZXQgJWQiLCBzZC0+c3luY2hybywKKwkJICAgICAgIHNkLT5wYWNrZXQpOworCQlpZiAoIXNkLT5zeW5jaHJvKSB7CS8qIHN0YXJ0IG9mIGZyYW1lICovCisJCQlpZiAoZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID09IEZJUlNUX1BBQ0tFVCkgeworCQkJCXR2ODUzMl9wcmVwcm9jZXNzKGdzcGNhX2Rldik7CisJCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LAorCQkJCQkJCUxBU1RfUEFDS0VULAorCQkJCQkJCWZyYW1lLCBzZC0+dG1wYnVmMiwKKwkJCQkJCQlnc3BjYV9kZXYtPndpZHRoICoKKwkJCQkJCQkgICAgZ3NwY2FfZGV2LT53aWR0aCk7CisJCQl9CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQkJCWZyYW1lLCBkYXRhLCAwKTsKKwkJCW1lbWNweShzZC0+dG1wYnVmLCBkYXRhLCBsZW4pOworCQkJc2QtPmJ1ZmxlbiA9IGxlbjsKKwkJCXNkLT5wYWNrZXQgPSAwOworCQkJcmV0dXJuOworCQl9CisJCWlmIChnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgIT0gRElTQ0FSRF9QQUNLRVQpIHsKKwkJCVBERUJVRyhEX1BBQ0ssCisJCQkgICAgICAgIldhcm5pbmcgd3JvbmcgVFY4NTMyIGZyYW1lIGRldGVjdGlvbiAlZCIsCisJCQkgICAgICAgc2QtPnBhY2tldCk7CisJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKCFzZC0+c3luY2hybykgeworCQkvKiBEcm9wIHBhY2tldCBmcmFtZSBjb3JydXB0ICovCisJCVBERUJVRyhEX1BBQ0ssICJEUk9QIFNPRiAlZCBwYWNrZXQgJWQiLAorCQkgICAgICAgc2QtPnN5bmNocm8sIHNkLT5wYWNrZXQpOworCQlzZC0+cGFja2V0ID0gMDsKKwkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCXJldHVybjsKKwl9CisJc2QtPnN5bmNocm8gPSAxOworCXNkLT5wYWNrZXQrKzsKKwltZW1jcHkoJnNkLT50bXBidWZbc2QtPmJ1Zmxlbl0sIGRhdGEsIGxlbik7CisJc2QtPmJ1ZmxlbiArPSBsZW47Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKK30KKworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5icmlnaHRuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbnRyYXN0OworCXJldHVybiAwOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5vcGVuID0gc2Rfb3BlbiwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKKwkuY2xvc2UgPSBzZF9jbG9zZSwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworI2RlZmluZSBEVk5NKG5hbWUpIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkgbmFtZQorc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA5MjApLCBEVk5NKCJRQyBFeHByZXNzIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOTIxKSwgRFZOTSgiTGFidGVjIFdlYmNhbSIpfSwKKwl7VVNCX0RFVklDRSgweDA1NDUsIDB4ODA4YiksIERWTk0oIlZlbyBTdGluZ3JheSIpfSwKKwl7VVNCX0RFVklDRSgweDA1NDUsIDB4ODMzMyksIERWTk0oIlZlbyBTdGluZ3JheSIpfSwKKwl7VVNCX0RFVklDRSgweDA5MjMsIDB4MDEwZiksIERWTk0oIklDTTUzMiBjYW1zIil9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJICAgICAgIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJUERFQlVHKERfUFJPQkUsICJ2JXMgcmVnaXN0ZXJlZCIsIHZlcnNpb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2YyYzllCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwpAQCAtMCwwICsxLDE4MTggQEAKKy8qCisgKgkJWi1zdGFyIHZjMDMyMSBsaWJyYXJ5CisgKgkJQ29weXJpZ2h0IChDKSAyMDA2IEtvbmluc2tpIEFydHVyIHRha2VzaGk4N0BvMi5wbAorICoJCUNvcHlyaWdodCAoQykgMjAwNiBNaWNoZWwgWGhhYXJkCisgKgorICogVjRMMiBieSBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAidmMwMzJ4IgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMSwgNykKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICIyLjEuNyI7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9WQzAzMlggVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCXVuc2lnbmVkIGNoYXIgYXV0b2dhaW47CisJdW5zaWduZWQgY2hhciBsaWdodGZyZXE7CisKKwljaGFyIHFpbmRleDsKKwljaGFyIGJyaWRnZTsKKyNkZWZpbmUgQlJJREdFX1ZDMDMyMSAwCisjZGVmaW5lIEJSSURHRV9WQzAzMjMgMQorCWNoYXIgc2Vuc29yOworI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCisjZGVmaW5lIFNFTlNPUl9NSTEzMjAgMQorI2RlZmluZSBTRU5TT1JfTUkxMzEwX1NPQyAyCisjZGVmaW5lIFNFTlNPUl9PVjc2NjAgMworI2RlZmluZSBTRU5TT1JfT1Y3NjcwIDQKKyNkZWZpbmUgU0VOU09SX1BPMzEzME5DIDUKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSAgICA9ICJBdXRvIEdhaW4iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGF1dG9nYWluLAorCSAgICAuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisJfSwKKwl7CisJICAgIHsKKwkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCS5uYW1lICAgID0gIkxpZ2h0IGZyZXF1ZW5jeSBmaWx0ZXIiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMiwJLyogMDogTm8sIDE6IDUwSHosIDI6NjBIeiAqLworCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDEKKwkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0ZnJlcSwKKwkgICAgLmdldCA9IHNkX2dldGZyZXEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZjMDMyMV9tb2RlW10gPSB7CisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfWVVWNDIwLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAgKiAyLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9ZVVY0MjAsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCAqIDIsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZjMDMyM19tb2RlW10gPSB7CisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9OworCitzdGF0aWMgY29uc3QgX191OCBtaTEzMTBfc29jaW5pdFZHQV9KUEdbXVs0XSA9IHsKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMywgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4YzAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweGQwLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweGM4LCAweDlmLCAweDBiLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MmYsIDB4ZGUsIDB4MjAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgyMCwgMHgwMywgMHgwMiwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA1LCAweDAwLCAweDA3LCAweGJifSwKKwl7MHgzNCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MzUsIDB4ZmYsIDB4MDAsIDB4YmJ9LAorCXsweGRjLCAweDA3LCAweDAyLCAweGJifSwKKwl7MHhkZCwgMHgzYywgMHgxOCwgMHhiYn0sCisJezB4ZGUsIDB4OTIsIDB4NmQsIDB4YmJ9LAorCXsweGRmLCAweGNkLCAweGIxLCAweGJifSwKKwl7MHhlMCwgMHhmZiwgMHhlNywgMHhiYn0sCisJezB4MDYsIDB4ZjAsIDB4MGQsIDB4YmJ9LAorCXsweDA2LCAweDcwLCAweDBlLCAweGJifSwKKwl7MHg0YywgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4NGQsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgyZSwgMHgwYywgMHg1NSwgMHhiYn0sCisJezB4MjEsIDB4YjYsIDB4NmUsIDB4YmJ9LAorCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKKwl7MHgzNywgMHgwMCwgMHhjMSwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweDg0LCAweGJifSwKKwl7MHgwOCwgMHgwMiwgMHg0YSwgMHhiYn0sCisJezB4MDUsIDB4MDEsIDB4MTAsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDM5LCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4NTgsIDB4MDIsIDB4NjcsIDB4YmJ9LAorCXsweDU3LCAweDAyLCAweDAwLCAweGJifSwKKwl7MHg1YSwgMHgwMiwgMHg2NywgMHhiYn0sCisJezB4NTksIDB4MDIsIDB4MDAsIDB4YmJ9LAorCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKKwl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCisJezB4MzksIDB4MDYsIDB4MTgsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDE4LCAweGJifSwKKwl7MHgzYiwgMHgwNiwgMHgxOCwgMHhiYn0sCisJezB4M2MsIDB4MDYsIDB4MTgsIDB4YmJ9LAorCXsweDY0LCAweDdiLCAweDViLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzYsIDB4MzAsIDB4MTAsIDB4YmJ9LAorCXsweDM3LCAweDAwLCAweGMwLCAweGJifSwKKwl7MHhiYywgMHgwZSwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MGYsIDB4MDUsIDB4Y2N9LAorCXsweGJjLCAweDEwLCAweGMwLCAweGNjfSwKKwl7MHhiYywgMHgxMSwgMHgwMywgMHhjY30sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDAyLCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHg4MCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweGUwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjYsIDB4MTMsIDB4MjUsIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDAyLCAweGNjfSwKKwl7MHhiNiwgMHgxNywgMHg1OCwgMHhjY30sCisJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDIsIDB4MTgsIDB4Y2N9LAorCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwKKwl7MHhiYywgMHgwNCwgMHgxOCwgMHhjY30sCisJezB4YmMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwOCwgMHgzMCwgMHhjY30sCisJezB4YmMsIDB4MDksIDB4NDAsIDB4Y2N9LAorCXsweGJjLCAweDBhLCAweDEwLCAweGNjfSwKKwl7MHhiYywgMHgwYiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MGMsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4ODAsIDB4MDAsIDB4MDMsIDB4YmJ9LAorCXsweDgxLCAweGM3LCAweDE0LCAweGJifSwKKwl7MHg4MiwgMHhlYiwgMHhlOCwgMHhiYn0sCisJezB4ODMsIDB4ZmUsIDB4ZjQsIDB4YmJ9LAorCXsweDg0LCAweGNkLCAweDEwLCAweGJifSwKKwl7MHg4NSwgMHhmMywgMHhlZSwgMHhiYn0sCisJezB4ODYsIDB4ZmYsIDB4ZjEsIDB4YmJ9LAorCXsweDg3LCAweGNkLCAweDEwLCAweGJifSwKKwl7MHg4OCwgMHhmMywgMHhlZSwgMHhiYn0sCisJezB4ODksIDB4MDEsIDB4ZjEsIDB4YmJ9LAorCXsweDhhLCAweGU1LCAweDE3LCAweGJifSwKKwl7MHg4YiwgMHhlOCwgMHhlMiwgMHhiYn0sCisJezB4OGMsIDB4ZjcsIDB4ZWQsIDB4YmJ9LAorCXsweDhkLCAweDAwLCAweGZmLCAweGJifSwKKwl7MHg4ZSwgMHhlYywgMHgxMCwgMHhiYn0sCisJezB4OGYsIDB4ZjAsIDB4ZWQsIDB4YmJ9LAorCXsweDkwLCAweGY5LCAweGYyLCAweGJifSwKKwl7MHg5MSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4OTIsIDB4ZTksIDB4MGQsIDB4YmJ9LAorCXsweDkzLCAweGY0LCAweGYyLCAweGJifSwKKwl7MHg5NCwgMHhmYiwgMHhmNSwgMHhiYn0sCisJezB4OTUsIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGI2LCAweDBmLCAweDA4LCAweGJifSwKKwl7MHhiNywgMHgzZCwgMHgxNiwgMHhiYn0sCisJezB4YjgsIDB4MGMsIDB4MDQsIDB4YmJ9LAorCXsweGI5LCAweDFjLCAweDA3LCAweGJifSwKKwl7MHhiYSwgMHgwYSwgMHgwMywgMHhiYn0sCisJezB4YmIsIDB4MWIsIDB4MDksIDB4YmJ9LAorCXsweGJjLCAweDE3LCAweDBkLCAweGJifSwKKwl7MHhiZCwgMHgyMywgMHgxZCwgMHhiYn0sCisJezB4YmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweGJmLCAweDExLCAweDA5LCAweGJifSwKKwl7MHhjMCwgMHgxNiwgMHgxNSwgMHhiYn0sCisJezB4YzEsIDB4MDAsIDB4MWIsIDB4YmJ9LAorCXsweGMyLCAweDBlLCAweDA3LCAweGJifSwKKwl7MHhjMywgMHgxNCwgMHgxMCwgMHhiYn0sCisJezB4YzQsIDB4MDAsIDB4MTcsIDB4YmJ9LAorCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MDYsIDB4ZjQsIDB4OGUsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDUwLCAweGRkfSwKKwl7MHgwNiwgMHg3NCwgMHg4ZSwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDI0LCAweDUwLCAweDIwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzQsIDB4MGMsIDB4NTAsIDB4YmJ9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDMsIDB4MDMsIDB4YzAsIDB4YmJ9LAorCXt9LAorfTsKK3N0YXRpYyBjb25zdCBfX3U4IG1pMTMxMF9zb2Npbml0UVZHQV9KUEdbXVs0XSA9IHsKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDIyLCAweDAzLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhjMCwgMHhjY30sCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgwMCwgMHhjY30sCXsweGJjLCAweDAwLCAweGYwLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgyZiwgMHhkZSwgMHgyMCwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgyMCwgMHgwMywgMHgwMiwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHgwNywgMHhiYn0sCXsweDM0LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgzNSwgMHhmZiwgMHgwMCwgMHhiYn0sCXsweGRjLCAweDA3LCAweDAyLCAweGJifSwKKwl7MHhkZCwgMHgzYywgMHgxOCwgMHhiYn0sCXsweGRlLCAweDkyLCAweDZkLCAweGJifSwKKwl7MHhkZiwgMHhjZCwgMHhiMSwgMHhiYn0sCXsweGUwLCAweGZmLCAweGU3LCAweGJifSwKKwl7MHgwNiwgMHhmMCwgMHgwZCwgMHhiYn0sCXsweDA2LCAweDcwLCAweDBlLCAweGJifSwKKwl7MHg0YywgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDRkLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDJlLCAweDBjLCAweDU1LCAweGJifSwKKwl7MHgyMSwgMHhiNiwgMHg2ZSwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKKwl7MHgzNywgMHgwMCwgMHhjMSwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNywgMHgwMCwgMHg4NCwgMHhiYn0sCXsweDA4LCAweDAyLCAweDRhLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHgxMCwgMHhiYn0sCXsweDA2LCAweDAwLCAweDM5LCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDU4LCAweDAyLCAweDY3LCAweGJifSwKKwl7MHg1NywgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVhLCAweDAyLCAweDY3LCAweGJifSwKKwl7MHg1OSwgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKKwl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCXsweDM5LCAweDA2LCAweDE4LCAweGJifSwKKwl7MHgzYSwgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDNiLCAweDA2LCAweDE4LCAweGJifSwKKwl7MHgzYywgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDY0LCAweDdiLCAweDViLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKKwl7MHgzNywgMHgwMCwgMHhjMCwgMHhiYn0sCXsweGJjLCAweDBlLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwZiwgMHgwNSwgMHhjY30sCXsweGJjLCAweDEwLCAweGMwLCAweGNjfSwKKwl7MHhiYywgMHgxMSwgMHgwMywgMHhjY30sCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwMSwgMHhjY30sCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCXsweGI2LCAweDEzLCAweDI1LCAweGNjfSwKKwl7MHhiNiwgMHgxOCwgMHgwMCwgMHhjY30sCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHg4MCwgMHgwMCwgMHgwMywgMHhiYn0sCXsweDgxLCAweGM3LCAweDE0LCAweGJifSwKKwl7MHg4MiwgMHhlYiwgMHhlOCwgMHhiYn0sCXsweDgzLCAweGZlLCAweGY0LCAweGJifSwKKwl7MHg4NCwgMHhjZCwgMHgxMCwgMHhiYn0sCXsweDg1LCAweGYzLCAweGVlLCAweGJifSwKKwl7MHg4NiwgMHhmZiwgMHhmMSwgMHhiYn0sCXsweDg3LCAweGNkLCAweDEwLCAweGJifSwKKwl7MHg4OCwgMHhmMywgMHhlZSwgMHhiYn0sCXsweDg5LCAweDAxLCAweGYxLCAweGJifSwKKwl7MHg4YSwgMHhlNSwgMHgxNywgMHhiYn0sCXsweDhiLCAweGU4LCAweGUyLCAweGJifSwKKwl7MHg4YywgMHhmNywgMHhlZCwgMHhiYn0sCXsweDhkLCAweDAwLCAweGZmLCAweGJifSwKKwl7MHg4ZSwgMHhlYywgMHgxMCwgMHhiYn0sCXsweDhmLCAweGYwLCAweGVkLCAweGJifSwKKwl7MHg5MCwgMHhmOSwgMHhmMiwgMHhiYn0sCXsweDkxLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHg5MiwgMHhlOSwgMHgwZCwgMHhiYn0sCXsweDkzLCAweGY0LCAweGYyLCAweGJifSwKKwl7MHg5NCwgMHhmYiwgMHhmNSwgMHhiYn0sCXsweDk1LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhiNiwgMHgwZiwgMHgwOCwgMHhiYn0sCXsweGI3LCAweDNkLCAweDE2LCAweGJifSwKKwl7MHhiOCwgMHgwYywgMHgwNCwgMHhiYn0sCXsweGI5LCAweDFjLCAweDA3LCAweGJifSwKKwl7MHhiYSwgMHgwYSwgMHgwMywgMHhiYn0sCXsweGJiLCAweDFiLCAweDA5LCAweGJifSwKKwl7MHhiYywgMHgxNywgMHgwZCwgMHhiYn0sCXsweGJkLCAweDIzLCAweDFkLCAweGJifSwKKwl7MHhiZSwgMHgwMCwgMHgyOCwgMHhiYn0sCXsweGJmLCAweDExLCAweDA5LCAweGJifSwKKwl7MHhjMCwgMHgxNiwgMHgxNSwgMHhiYn0sCXsweGMxLCAweDAwLCAweDFiLCAweGJifSwKKwl7MHhjMiwgMHgwZSwgMHgwNywgMHhiYn0sCXsweGMzLCAweDE0LCAweDEwLCAweGJifSwKKwl7MHhjNCwgMHgwMCwgMHgxNywgMHhiYn0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDA2LCAweGY0LCAweDhlLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDI0LCAweDUwLCAweDIwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM0LCAweDBjLCAweDUwLCAweGJifSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCisJe30sCit9OworCitzdGF0aWMgY29uc3QgX191OCBtaTEzMjBfZ2FtbWFbMTddID0geworCTB4MDAsIDB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCisJMHhkNCwgMHhkZiwgMHhlNywgMHhlZSwgMHhmNCwgMHhmOSwgMHhmYywgMHhmZgorfTsKK3N0YXRpYyBjb25zdCBfX3U4IG1pMTMyMF9tYXRyaXhbOV0gPSB7CisJMHg1NCwgMHhkYSwgMHgwNiwgMHhmMSwgMHg1MCwgMHhmNCwgMHhmNywgMHhlYSwgMHg1MgorfTsKK3N0YXRpYyBjb25zdCBfX3U4IG1pMTMyMF9pbml0VkdBX2RhdGFbXVs0XSA9IHsKKwl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCXsweDAwLCAweDAwLCAweDMzLCAweGRkfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCXsweDAwLCAweDAwLCAweDMzLCAweGRkfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCXsweDAwLCAweDAwLCAweDMzLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKKwl7MHhiMCwgMHgxNiwgMHgwMywgMHhjY30sCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKKwl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMywgMHhjY30sCXsweGIzLCAweDIzLCAweGMwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwNCwgMHhjY30sCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCXsweGJjLCAweDAwLCAweGQwLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHgwOSwgMHhiYn0sCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwZCwgMHgwMCwgMHgwOCwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHhhMSwgMHgwNSwgMHgwMCwgMHhiYn0sCXsweGE0LCAweDAzLCAweGMwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHgyMCwgMHgwMSwgMHgwMCwgMHhiYn0sCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDlkLCAweDNjLCAweGEwLCAweGJifSwKKwl7MHg0NywgMHgzMCwgMHgzMCwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwYSwgMHg4MCwgMHgxMSwgMHhiYn0sCXsweDM1LCAweDAwLCAweDIyLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDlkLCAweGM1LCAweDA1LCAweGJifSwKKwl7MHhkYywgMHgwZiwgMHhmYywgMHhiYn0sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHg3NCwgMHgwZSwgMHhiYn0sCXsweDgwLCAweDAwLCAweDA2LCAweGJifSwKKwl7MHg4MSwgMHgwNCwgMHgwMCwgMHhiYn0sCXsweDgyLCAweDAxLCAweDAyLCAweGJifSwKKwl7MHg4MywgMHgwMywgMHgwMiwgMHhiYn0sCXsweDg0LCAweDA1LCAweDAwLCAweGJifSwKKwl7MHg4NSwgMHgwMSwgMHgwMCwgMHhiYn0sCXsweDg2LCAweDAzLCAweDAyLCAweGJifSwKKwl7MHg4NywgMHgwNSwgMHgwMCwgMHhiYn0sCXsweDg4LCAweDAxLCAweDAwLCAweGJifSwKKwl7MHg4OSwgMHgwMiwgMHgwMiwgMHhiYn0sCXsweDhhLCAweGZkLCAweDA0LCAweGJifSwKKwl7MHg4YiwgMHhmYywgMHhmZCwgMHhiYn0sCXsweDhjLCAweGZmLCAweGZkLCAweGJifSwKKwl7MHg4ZCwgMHgwMCwgMHgwMCwgMHhiYn0sCXsweDhlLCAweGZlLCAweDA1LCAweGJifSwKKwl7MHg4ZiwgMHhmYywgMHhmZCwgMHhiYn0sCXsweDkwLCAweGZlLCAweGZkLCAweGJifSwKKwl7MHg5MSwgMHgwMCwgMHgwMCwgMHhiYn0sCXsweDkyLCAweGZlLCAweDAzLCAweGJifSwKKwl7MHg5MywgMHhmZCwgMHhmZSwgMHhiYn0sCXsweDk0LCAweGZmLCAweGZkLCAweGJifSwKKwl7MHg5NSwgMHgwMCwgMHgwMCwgMHhiYn0sCXsweGI2LCAweDA3LCAweDA1LCAweGJifSwKKwl7MHhiNywgMHgxMywgMHgwNiwgMHhiYn0sCXsweGI4LCAweDA4LCAweDA2LCAweGJifSwKKwl7MHhiOSwgMHgxNCwgMHgwOCwgMHhiYn0sCXsweGJhLCAweDA2LCAweDA1LCAweGJifSwKKwl7MHhiYiwgMHgxMywgMHgwNiwgMHhiYn0sCXsweGJjLCAweDAzLCAweDAxLCAweGJifSwKKwl7MHhiZCwgMHgwMywgMHgwNCwgMHhiYn0sCXsweGJlLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHhiZiwgMHgwMywgMHgwMSwgMHhiYn0sCXsweGMwLCAweDAyLCAweDA0LCAweGJifSwKKwl7MHhjMSwgMHgwMCwgMHgwNCwgMHhiYn0sCXsweGMyLCAweDAyLCAweDAxLCAweGJifSwKKwl7MHhjMywgMHgwMSwgMHgwMywgMHhiYn0sCXsweGM0LCAweDAwLCAweDA0LCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCXsweDA1LCAweDAxLCAweDEzLCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCXsweDA3LCAweDAwLCAweDg1LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgyNywgMHhiYn0sCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM5LCAweDAzLCAweDBkLCAweGJifSwKKwl7MHgzYSwgMHgwNiwgMHgxYiwgMHhiYn0sCXsweDNiLCAweDAwLCAweDk1LCAweGJifSwKKwl7MHgzYywgMHgwNCwgMHhkYiwgMHhiYn0sCXsweDU3LCAweDAyLCAweDAwLCAweGJifSwKKwl7MHg1OCwgMHgwMiwgMHg2NiwgMHhiYn0sCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHg1YSwgMHgwMSwgMHgzMywgMHhiYn0sCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKKwl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCXsweDY0LCAweDVlLCAweDFjLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDJmLCAweGQxLCAweDAwLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzNiwgMHg2OCwgMHgxMCwgMHhiYn0sCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHgzNywgMHg4MiwgMHgwMCwgMHhiYn0sCXsweGJjLCAweDBlLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwZiwgMHgwNSwgMHhjY30sCXsweGJjLCAweDEwLCAweGMwLCAweGNjfSwKKwl7MHhiYywgMHgxMSwgMHgwMywgMHhjY30sCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwNSwgMHhjY30sCXsweGI2LCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwNCwgMHhjY30sCXsweGI2LCAweDA0LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCXsweGI2LCAweDEzLCAweDI5LCAweGNjfSwKKwl7MHhiNiwgMHgxOCwgMHgwYSwgMHhjY30sCXsweGI2LCAweDE3LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCXsweGJmLCAweGMwLCAweDI2LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwMiwgMHhjY30sCXsweGJmLCAweGNjLCAweDA0LCAweGNjfSwKKwl7MHhiYywgMHgwMiwgMHgxOCwgMHhjY30sCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwKKwl7MHhiYywgMHgwNCwgMHgxOCwgMHhjY30sCXsweGJjLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwNiwgMHgwMCwgMHhjY30sCXsweGJjLCAweDA4LCAweDMwLCAweGNjfSwKKwl7MHhiYywgMHgwOSwgMHg0MCwgMHhjY30sCXsweGJjLCAweDBhLCAweDEwLCAweGNjfSwKKwl7MHhiYywgMHgwYiwgMHgwMCwgMHhjY30sCXsweGJjLCAweDBjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBfX3U4IG1pMTMyMF9pbml0UVZHQV9kYXRhW11bNF0gPSB7CisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAl7MHgwMCwgMHgwMCwgMHgzMywgMHhkZH0sCisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAl7MHgwMCwgMHgwMCwgMHgzMywgMHhkZH0sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAl7MHgwMCwgMHgwMCwgMHgzMywgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4YjAsIDB4MTYsIDB4MDMsIDB4Y2N9LAl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjUsIDB4Y2N9LAl7MHhiOCwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4ZDAsIDB4Y2N9LAl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAl7MHgwZCwgMHgwMCwgMHgwOSwgMHhiYn0sCisJezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAl7MHgwZCwgMHgwMCwgMHgwOCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAl7MHgwMiwgMHgwMCwgMHg2NCwgMHhiYn0sCisJezB4MDUsIDB4MDEsIDB4NzgsIDB4YmJ9LAl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDAsIDB4YmJ9LAl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4OWQsIDB4M2MsIDB4YTAsIDB4YmJ9LAl7MHg0NywgMHgzMCwgMHgzMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAl7MHgwYSwgMHg4MCwgMHgxMSwgMHhiYn0sCisJezB4MzUsIDB4MDAsIDB4MjIsIDB4YmJ9LAl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4OWQsIDB4YzUsIDB4MDUsIDB4YmJ9LAl7MHhkYywgMHgwZiwgMHhmYywgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAl7MHgwNiwgMHg3NCwgMHgwZSwgMHhiYn0sCisJezB4ODAsIDB4MDAsIDB4MDYsIDB4YmJ9LAl7MHg4MSwgMHgwNCwgMHgwMCwgMHhiYn0sCisJezB4ODIsIDB4MDEsIDB4MDIsIDB4YmJ9LAl7MHg4MywgMHgwMywgMHgwMiwgMHhiYn0sCisJezB4ODQsIDB4MDUsIDB4MDAsIDB4YmJ9LAl7MHg4NSwgMHgwMSwgMHgwMCwgMHhiYn0sCisJezB4ODYsIDB4MDMsIDB4MDIsIDB4YmJ9LAl7MHg4NywgMHgwNSwgMHgwMCwgMHhiYn0sCisJezB4ODgsIDB4MDEsIDB4MDAsIDB4YmJ9LAl7MHg4OSwgMHgwMiwgMHgwMiwgMHhiYn0sCisJezB4OGEsIDB4ZmQsIDB4MDQsIDB4YmJ9LAl7MHg4YiwgMHhmYywgMHhmZCwgMHhiYn0sCisJezB4OGMsIDB4ZmYsIDB4ZmQsIDB4YmJ9LAl7MHg4ZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4OGUsIDB4ZmUsIDB4MDUsIDB4YmJ9LAl7MHg4ZiwgMHhmYywgMHhmZCwgMHhiYn0sCisJezB4OTAsIDB4ZmUsIDB4ZmQsIDB4YmJ9LAl7MHg5MSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4OTIsIDB4ZmUsIDB4MDMsIDB4YmJ9LAl7MHg5MywgMHhmZCwgMHhmZSwgMHhiYn0sCisJezB4OTQsIDB4ZmYsIDB4ZmQsIDB4YmJ9LAl7MHg5NSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4YjYsIDB4MDcsIDB4MDUsIDB4YmJ9LAl7MHhiNywgMHgxMywgMHgwNiwgMHhiYn0sCisJezB4YjgsIDB4MDgsIDB4MDYsIDB4YmJ9LAl7MHhiOSwgMHgxNCwgMHgwOCwgMHhiYn0sCisJezB4YmEsIDB4MDYsIDB4MDUsIDB4YmJ9LAl7MHhiYiwgMHgxMywgMHgwNiwgMHhiYn0sCisJezB4YmMsIDB4MDMsIDB4MDEsIDB4YmJ9LAl7MHhiZCwgMHgwMywgMHgwNCwgMHhiYn0sCisJezB4YmUsIDB4MDAsIDB4MDIsIDB4YmJ9LAl7MHhiZiwgMHgwMywgMHgwMSwgMHhiYn0sCisJezB4YzAsIDB4MDIsIDB4MDQsIDB4YmJ9LAl7MHhjMSwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4YzIsIDB4MDIsIDB4MDEsIDB4YmJ9LAl7MHhjMywgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4YzQsIDB4MDAsIDB4MDQsIDB4YmJ9LAl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4YzgsIDB4MDAsIDB4MDAsIDB4YmJ9LAl7MHgyZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MmUsIDB4MGMsIDB4NWIsIDB4YmJ9LAl7MHgyZiwgMHhkMSwgMHgwMCwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAl7MHgzYSwgMHgwNiwgMHg4MCwgMHhiYn0sCisJezB4M2IsIDB4MDEsIDB4NTIsIDB4YmJ9LAl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAl7MHg1YSwgMHgwMSwgMHgyMCwgMHhiYn0sCisJezB4NWMsIDB4MWQsIDB4MTcsIDB4YmJ9LAl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAl7MHgzNiwgMHg2OCwgMHgxMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAl7MHgzNywgMHg4MSwgMHgwMCwgMHhiYn0sCisJezB4YmMsIDB4MDIsIDB4MTgsIDB4Y2N9LAl7MHhiYywgMHgwMywgMHg1MCwgMHhjY30sCisJezB4YmMsIDB4MDQsIDB4MTgsIDB4Y2N9LAl7MHhiYywgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDYsIDB4MDAsIDB4Y2N9LAl7MHhiYywgMHgwOCwgMHgzMCwgMHhjY30sCisJezB4YmMsIDB4MDksIDB4NDAsIDB4Y2N9LAl7MHhiYywgMHgwYSwgMHgxMCwgMHhjY30sCisJezB4YmMsIDB4MGIsIDB4MDAsIDB4Y2N9LAl7MHhiYywgMHgwYywgMHgwMCwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MjYsIDB4Y2N9LAl7MHhiZiwgMHhjMSwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDQsIDB4Y2N9LAl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgX191OCBwbzMxMzBfZ2FtbWFbMTddID0geworCTB4MDAsIDB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCisJMHhkNCwgMHhkZiwgMHhlNywgMHhlZSwgMHhmNCwgMHhmOSwgMHhmYywgMHhmZgorfTsKK3N0YXRpYyBjb25zdCBfX3U4IHBvMzEzMF9tYXRyaXhbOV0gPSB7CisJMHg1ZiwgMHhlYywgMHhmNSwgMHhmMSwgMHg1YSwgMHhmNSwgMHhmMSwgMHhlYywgMHg2MworfTsKKworc3RhdGljIGNvbnN0IF9fdTggcG8zMTMwX2luaXRWR0FfZGF0YVtdWzRdID0geworCXsweGIwLCAweDRkLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDUwLCAweGRkfSwJezB4YjAsIDB4MDMsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDA0LCAweGNjfSwJezB4YjMsIDB4MDAsIDB4MjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwJezB4YjMsIDB4MDMsIDB4MWEsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDE1LCAweGNjfSwJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGU4LCAweGNjfSwJezB4YjgsIDB4MDgsIDB4ZTgsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwJezB4YjMsIDB4MzUsIDB4ZjYsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI3LCAweGNjfSwJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDIxLCAweGNjfSwJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDAxLCAweDc5LCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweGI4LCAweDJjLCAweDUwLCAweGNjfSwJezB4YjgsIDB4MmQsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGY4LCAweGNjfSwJezB4YjgsIDB4MmYsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMwLCAweDUwLCAweGNjfSwJezB4YjgsIDB4MzEsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMyLCAweGY4LCAweGNjfSwJezB4YjgsIDB4MzMsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDUwLCAweGNjfSwJezB4YjgsIDB4MzUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM2LCAweDAwLCAweGNjfSwJezB4YjgsIDB4MzcsIDB4MDAsIDB4Y2N9LAorCXsweDAwLCAweDFlLCAweGM2LCAweGFhfSwJezB4MDAsIDB4MjAsIDB4NDQsIDB4YWF9LAorCXsweDAwLCAweGFkLCAweDAyLCAweGFhfSwJezB4MDAsIDB4YWUsIDB4MmMsIDB4YWF9LAorCXsweDAwLCAweDEyLCAweDA4LCAweGFhfSwJezB4MDAsIDB4MTcsIDB4NDEsIDB4YWF9LAorCXsweDAwLCAweDE5LCAweDQxLCAweGFhfSwJezB4MDAsIDB4MWUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDIxLCAweDAwLCAweGFhfSwJezB4MDAsIDB4MzYsIDB4YzAsIDB4YWF9LAorCXsweDAwLCAweDM3LCAweGM4LCAweGFhfSwJezB4MDAsIDB4M2IsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDRiLCAweGZlLCAweGFhfSwJezB4MDAsIDB4NTEsIDB4MWMsIDB4YWF9LAorCXsweDAwLCAweDUyLCAweDAxLCAweGFhfSwJezB4MDAsIDB4NTUsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDU5LCAweDAyLCAweGFhfSwJezB4MDAsIDB4NWEsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDVjLCAweDEwLCAweGFhfSwJezB4MDAsIDB4NWQsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDVlLCAweDEwLCAweGFhfSwJezB4MDAsIDB4NWYsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDYxLCAweDAwLCAweGFhfSwJezB4MDAsIDB4NjIsIDB4MTgsIDB4YWF9LAorCXsweDAwLCAweDYzLCAweDMwLCAweGFhfSwJezB4MDAsIDB4NzAsIDB4NjgsIDB4YWF9LAorCXsweDAwLCAweDgwLCAweDcxLCAweGFhfSwJezB4MDAsIDB4ODEsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDgyLCAweDAwLCAweGFhfSwJezB4MDAsIDB4ODMsIDB4NTUsIDB4YWF9LAorCXsweDAwLCAweDg0LCAweDA2LCAweGFhfSwJezB4MDAsIDB4ODUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDg2LCAweDEzLCAweGFhfSwJezB4MDAsIDB4ODcsIDB4MTgsIDB4YWF9LAorCXsweDAwLCAweGFhLCAweDNmLCAweGFhfSwJezB4MDAsIDB4YWIsIDB4NDQsIDB4YWF9LAorCXsweDAwLCAweGIwLCAweDY4LCAweGFhfSwJezB4MDAsIDB4YjUsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweGI4LCAweDIwLCAweGFhfSwJezB4MDAsIDB4YjksIDB4YTAsIDB4YWF9LAorCXsweDAwLCAweGJjLCAweDA0LCAweGFhfSwJezB4MDAsIDB4OGIsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweDhjLCAweDkxLCAweGFhfSwJezB4MDAsIDB4OGQsIDB4OGYsIDB4YWF9LAorCXsweDAwLCAweDhlLCAweDkxLCAweGFhfSwJezB4MDAsIDB4OGYsIDB4NDMsIDB4YWF9LAorCXsweDAwLCAweDkwLCAweDkyLCAweGFhfSwJezB4MDAsIDB4OTEsIDB4ODksIDB4YWF9LAorCXsweDAwLCAweDkyLCAweDlkLCAweGFhfSwJezB4MDAsIDB4OTMsIDB4NDYsIDB4YWF9LAorCXsweDAwLCAweGQ2LCAweDIyLCAweGFhfSwJezB4MDAsIDB4NzMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDEwLCAweGFhfSwJezB4MDAsIDB4NzUsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweDJiLCAweGFhfSwJezB4MDAsIDB4NzcsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDQ5LCAweGFhfSwJezB4MDAsIDB4NzksIDB4NWEsIDB4YWF9LAorCXsweDAwLCAweDdhLCAweDdmLCAweGFhfSwJezB4MDAsIDB4N2IsIDB4OWIsIDB4YWF9LAorCXsweDAwLCAweDdjLCAweGJhLCAweGFhfSwJezB4MDAsIDB4N2QsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweGVhLCAweGFhfSwJezB4MDAsIDB4ZDYsIDB4NjIsIDB4YWF9LAorCXsweDAwLCAweDczLCAweDAwLCAweGFhfSwJezB4MDAsIDB4NzQsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDc1LCAweDIwLCAweGFhfSwJezB4MDAsIDB4NzYsIDB4MmIsIDB4YWF9LAorCXsweDAwLCAweDc3LCAweDM2LCAweGFhfSwJezB4MDAsIDB4NzgsIDB4NDksIDB4YWF9LAorCXsweDAwLCAweDc5LCAweDVhLCAweGFhfSwJezB4MDAsIDB4N2EsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDdiLCAweDliLCAweGFhfSwJezB4MDAsIDB4N2MsIDB4YmEsIDB4YWF9LAorCXsweDAwLCAweDdkLCAweGQ0LCAweGFhfSwJezB4MDAsIDB4N2UsIDB4ZWEsIDB4YWF9LAorCXsweDAwLCAweGQ2LCAweGEyLCAweGFhfSwJezB4MDAsIDB4NzMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDEwLCAweGFhfSwJezB4MDAsIDB4NzUsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweDJiLCAweGFhfSwJezB4MDAsIDB4NzcsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDQ5LCAweGFhfSwJezB4MDAsIDB4NzksIDB4NWEsIDB4YWF9LAorCXsweDAwLCAweDdhLCAweDdmLCAweGFhfSwJezB4MDAsIDB4N2IsIDB4OWIsIDB4YWF9LAorCXsweDAwLCAweDdjLCAweGJhLCAweGFhfSwJezB4MDAsIDB4N2QsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweGVhLCAweGFhfSwKKwl7MHgwMCwgMHg0YywgMHgwNywgMHhhYX0sCisJezB4MDAsIDB4NGIsIDB4ZTAsIDB4YWF9LAl7MHgwMCwgMHg0ZSwgMHg3NywgMHhhYX0sCisJezB4MDAsIDB4NTksIDB4MDIsIDB4YWF9LAl7MHgwMCwgMHg0ZCwgMHgwYSwgMHhhYX0sCisvKgl7MHgwMCwgMHhkMSwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDIwLCAweGM0LCAweGFhfSwKKwl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwgKi8KKwl7MHgwMCwgMHhkMSwgMHgzYywgMHhhYX0sCXsweDAwLCAweDIwLCAweGM0LCAweGFhfSwKKwl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHhmZSwgMHgwMCwgMHhjY30sCXsweGI4LCAweGZmLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMCwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAxLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMiwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAzLCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgwNCwgMHgwMCwgMHhjY30sCXsweGI5LCAweDA1LCAweDNjLCAweGNjfSwKKwl7MHhiOSwgMHgwNiwgMHgzYywgMHhjY30sCXsweGI5LCAweDA3LCAweDNjLCAweGNjfSwKKwl7MHhiOSwgMHgwOCwgMHgzYywgMHhjY30sCXsweDAwLCAweDA1LCAweDAwLCAweGFhfSwKKwl7MHhiMywgMHg1YywgMHgwMCwgMHhjY30sCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBfX3U4IHBvMzEzMF9ydW5kYXRhW11bNF0gPSB7CisJezB4MDAsIDB4NDcsIDB4NDUsIDB4YWF9LAl7MHgwMCwgMHg0OCwgMHg5YiwgMHhhYX0sCisJezB4MDAsIDB4NDksIDB4M2EsIDB4YWF9LAl7MHgwMCwgMHg0YSwgMHgwMSwgMHhhYX0sCisJezB4MDAsIDB4NDQsIDB4NDAsIDB4YWF9LAorLyoJezB4MDAsIDB4ZDUsIDB4N2MsIDB4YWF9LCAqLworCXsweDAwLCAweGFkLCAweDA0LCAweGFhfSwJezB4MDAsIDB4YWUsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweGIwLCAweDc4LCAweGFhfSwJezB4MDAsIDB4OTgsIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweDk0LCAweDI1LCAweGFhfSwJezB4MDAsIDB4OTUsIDB4MjUsIDB4YWF9LAorCXsweDAwLCAweDU5LCAweDY4LCAweGFhfSwJezB4MDAsIDB4NDQsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDE3LCAweDUwLCAweGFhfSwJezB4MDAsIDB4MTksIDB4NTAsIDB4YWF9LAorCXsweDAwLCAweGQxLCAweDNjLCAweGFhfSwJezB4MDAsIDB4ZDEsIDB4M2MsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweDA2LCAweGFhfSwJezB4MDAsIDB4MWUsIDB4MDYsIDB4YWF9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgX191OCBwbzMxMzBfaW5pdFFWR0FfZGF0YVtdWzRdID0geworCXsweGIwLCAweDRkLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDUwLCAweGRkfSwJezB4YjAsIDB4MDMsIDB4MDksIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDA0LCAweGNjfSwJezB4YjMsIDB4MDAsIDB4MjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwJezB4YjMsIDB4MDMsIDB4MWEsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDE1LCAweGNjfSwJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwJezB4YjgsIDB4MDgsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwJezB4YjMsIDB4MzUsIDB4ZjYsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI3LCAweGNjfSwJezB4YmMsIDB4MDAsIDB4ZDEsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDIxLCAweGNjfSwJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDAxLCAweDc5LCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweGI4LCAweDJjLCAweDUwLCAweGNjfSwJezB4YjgsIDB4MmQsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGY4LCAweGNjfSwJezB4YjgsIDB4MmYsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMwLCAweDUwLCAweGNjfSwJezB4YjgsIDB4MzEsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMyLCAweGY4LCAweGNjfSwJezB4YjgsIDB4MzMsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDUwLCAweGNjfSwJezB4YjgsIDB4MzUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM2LCAweDAwLCAweGNjfSwJezB4YjgsIDB4MzcsIDB4MDAsIDB4Y2N9LAorCXsweDAwLCAweDFlLCAweGM2LCAweGFhfSwJezB4MDAsIDB4MjAsIDB4NDQsIDB4YWF9LAorCXsweDAwLCAweGFkLCAweDAyLCAweGFhfSwJezB4MDAsIDB4YWUsIDB4MmMsIDB4YWF9LAorCXsweDAwLCAweDEyLCAweDA4LCAweGFhfSwJezB4MDAsIDB4MTcsIDB4NDEsIDB4YWF9LAorCXsweDAwLCAweDE5LCAweDQxLCAweGFhfSwJezB4MDAsIDB4MWUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDIxLCAweDAwLCAweGFhfSwJezB4MDAsIDB4MzYsIDB4YzAsIDB4YWF9LAorCXsweDAwLCAweDM3LCAweGM4LCAweGFhfSwJezB4MDAsIDB4M2IsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDRiLCAweGZlLCAweGFhfSwJezB4MDAsIDB4NTEsIDB4MWMsIDB4YWF9LAorCXsweDAwLCAweDUyLCAweDAxLCAweGFhfSwJezB4MDAsIDB4NTUsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDU5LCAweDZmLCAweGFhfSwJezB4MDAsIDB4NWEsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDVjLCAweDEwLCAweGFhfSwJezB4MDAsIDB4NWQsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDVlLCAweDEwLCAweGFhfSwJezB4MDAsIDB4NWYsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDYxLCAweDAwLCAweGFhfSwJezB4MDAsIDB4NjIsIDB4MTgsIDB4YWF9LAorCXsweDAwLCAweDYzLCAweDMwLCAweGFhfSwJezB4MDAsIDB4NzAsIDB4NjgsIDB4YWF9LAorCXsweDAwLCAweDgwLCAweDcxLCAweGFhfSwJezB4MDAsIDB4ODEsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDgyLCAweDAwLCAweGFhfSwJezB4MDAsIDB4ODMsIDB4NTUsIDB4YWF9LAorCXsweDAwLCAweDg0LCAweDA2LCAweGFhfSwJezB4MDAsIDB4ODUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDg2LCAweDEzLCAweGFhfSwJezB4MDAsIDB4ODcsIDB4MTgsIDB4YWF9LAorCXsweDAwLCAweGFhLCAweDNmLCAweGFhfSwJezB4MDAsIDB4YWIsIDB4NDQsIDB4YWF9LAorCXsweDAwLCAweGIwLCAweDY4LCAweGFhfSwJezB4MDAsIDB4YjUsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweGI4LCAweDIwLCAweGFhfSwJezB4MDAsIDB4YjksIDB4YTAsIDB4YWF9LAorCXsweDAwLCAweGJjLCAweDA0LCAweGFhfSwJezB4MDAsIDB4OGIsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweDhjLCAweDkxLCAweGFhfSwJezB4MDAsIDB4OGQsIDB4OGYsIDB4YWF9LAorCXsweDAwLCAweDhlLCAweDkxLCAweGFhfSwJezB4MDAsIDB4OGYsIDB4NDMsIDB4YWF9LAorCXsweDAwLCAweDkwLCAweDkyLCAweGFhfSwJezB4MDAsIDB4OTEsIDB4ODksIDB4YWF9LAorCXsweDAwLCAweDkyLCAweDlkLCAweGFhfSwJezB4MDAsIDB4OTMsIDB4NDYsIDB4YWF9LAorCXsweDAwLCAweGQ2LCAweDIyLCAweGFhfSwJezB4MDAsIDB4NzMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDEwLCAweGFhfSwJezB4MDAsIDB4NzUsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweDJiLCAweGFhfSwJezB4MDAsIDB4NzcsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDQ5LCAweGFhfSwJezB4MDAsIDB4NzksIDB4NWEsIDB4YWF9LAorCXsweDAwLCAweDdhLCAweDdmLCAweGFhfSwJezB4MDAsIDB4N2IsIDB4OWIsIDB4YWF9LAorCXsweDAwLCAweDdjLCAweGJhLCAweGFhfSwJezB4MDAsIDB4N2QsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweGVhLCAweGFhfSwJezB4MDAsIDB4ZDYsIDB4NjIsIDB4YWF9LAorCXsweDAwLCAweDczLCAweDAwLCAweGFhfSwJezB4MDAsIDB4NzQsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDc1LCAweDIwLCAweGFhfSwJezB4MDAsIDB4NzYsIDB4MmIsIDB4YWF9LAorCXsweDAwLCAweDc3LCAweDM2LCAweGFhfSwJezB4MDAsIDB4NzgsIDB4NDksIDB4YWF9LAorCXsweDAwLCAweDc5LCAweDVhLCAweGFhfSwJezB4MDAsIDB4N2EsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDdiLCAweDliLCAweGFhfSwJezB4MDAsIDB4N2MsIDB4YmEsIDB4YWF9LAorCXsweDAwLCAweDdkLCAweGQ0LCAweGFhfSwJezB4MDAsIDB4N2UsIDB4ZWEsIDB4YWF9LAorCXsweDAwLCAweGQ2LCAweGEyLCAweGFhfSwJezB4MDAsIDB4NzMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDEwLCAweGFhfSwJezB4MDAsIDB4NzUsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweDJiLCAweGFhfSwJezB4MDAsIDB4NzcsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDQ5LCAweGFhfSwJezB4MDAsIDB4NzksIDB4NWEsIDB4YWF9LAorCXsweDAwLCAweDdhLCAweDdmLCAweGFhfSwJezB4MDAsIDB4N2IsIDB4OWIsIDB4YWF9LAorCXsweDAwLCAweDdjLCAweGJhLCAweGFhfSwJezB4MDAsIDB4N2QsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweGVhLCAweGFhfSwJezB4MDAsIDB4NGMsIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweDRiLCAweGUwLCAweGFhfSwJezB4MDAsIDB4NGUsIDB4NzcsIDB4YWF9LAorCXsweDAwLCAweDU5LCAweDY2LCAweGFhfSwJezB4MDAsIDB4NGQsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweGQxLCAweDAwLCAweGFhfSwJezB4MDAsIDB4MjAsIDB4YzQsIDB4YWF9LAorCXsweGI4LCAweDhlLCAweDAwLCAweGNjfSwJezB4YjgsIDB4OGYsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweGZlLCAweDAwLCAweGNjfSwJezB4YjgsIDB4ZmYsIDB4MjgsIDB4Y2N9LAorCXsweGI5LCAweDAwLCAweDI4LCAweGNjfSwJezB4YjksIDB4MDEsIDB4MjgsIDB4Y2N9LAorCXsweGI5LCAweDAyLCAweDI4LCAweGNjfSwJezB4YjksIDB4MDMsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDA0LCAweDAwLCAweGNjfSwJezB4YjksIDB4MDUsIDB4M2MsIDB4Y2N9LAorCXsweGI5LCAweDA2LCAweDNjLCAweGNjfSwJezB4YjksIDB4MDcsIDB4M2MsIDB4Y2N9LAorCXsweGI5LCAweDA4LCAweDNjLCAweGNjfSwJezB4YmMsIDB4MDIsIDB4MTgsIDB4Y2N9LAorCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwJezB4YmMsIDB4MDQsIDB4MTgsIDB4Y2N9LAorCXsweGJjLCAweDA1LCAweDAwLCAweGNjfSwJezB4YmMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDA4LCAweDMwLCAweGNjfSwJezB4YmMsIDB4MDksIDB4NDAsIDB4Y2N9LAorCXsweGJjLCAweDBhLCAweDEwLCAweGNjfSwJezB4YmMsIDB4MGIsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDBjLCAweDAwLCAweGNjfSwJezB4MDAsIDB4MDUsIDB4MDAsIDB4YWF9LAorCXsweGIzLCAweDVjLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgX191OCBodjcxMzFyX2dhbW1hWzE3XSA9IHsKKy8qCTB4MDAsIDB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCisgKgkweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmICovCisJMHgwNCwgMHgxYSwgMHgzNiwgMHg1NSwgMHg2ZiwgMHg4NywgMHg5ZCwgMHhiMCwgMHhjMSwKKwkweGNmLCAweGRhLCAweGU0LCAweGVjLCAweGYzLCAweGY4LCAweGZkLCAweGZmCit9Oworc3RhdGljIGNvbnN0IF9fdTggaHY3MTMxcl9tYXRyaXhbOV0gPSB7CisJMHg1ZiwgMHhlYywgMHhmNSwgMHhmMSwgMHg1YSwgMHhmNSwgMHhmMSwgMHhlYywgMHg2MworfTsKK3N0YXRpYyBjb25zdCBfX3U4IGh2NzEzMXJfaW5pdFZHQV9kYXRhW11bNF0gPSB7CisJezB4YjAsIDB4NGQsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4NTAsIDB4ZGR9LAl7MHhiMCwgMHgwMywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0NSwgMHhjY30sCXsweGIzLCAweDAzLCAweDBiLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweDkxLCAweGNjfSwJezB4YjMsIDB4MDAsIDB4MjcsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDczLCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgyMywgMHhjY30sCXsweDAwLCAweDAxLCAweDBjLCAweGFhfSwKKwl7MHgwMCwgMHgxNCwgMHgwMSwgMHhhYX0sCXsweDAwLCAweDE1LCAweGU2LCAweGFhfSwKKwl7MHgwMCwgMHgxNiwgMHgwMiwgMHhhYX0sCisJezB4MDAsIDB4MTcsIDB4ODYsIDB4YWF9LAl7MHgwMCwgMHgyMywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MjUsIDB4MDksIDB4YWF9LAl7MHgwMCwgMHgyNiwgMHgyNywgMHhhYX0sCisJezB4MDAsIDB4MjcsIDB4YzAsIDB4YWF9LAorCXsweGI4LCAweDJjLCAweDYwLCAweGNjfSwJezB4YjgsIDB4MmQsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGY4LCAweGNjfSwJezB4YjgsIDB4MmYsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMwLCAweDUwLCAweGNjfSwKKwl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCXsweGI4LCAweDMyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMywgMHhmOCwgMHhjY30sCXsweGI4LCAweDM0LCAweDY1LCAweGNjfSwKKwl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAl7MHhiOCwgMHgzNywgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAl7MHhiOCwgMHgwMSwgMHg3ZCwgMHhjY30sCisJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwJezB4YjgsIDB4ZmUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweGZmLCAweDI4LCAweGNjfSwJezB4YjksIDB4MDAsIDB4MjgsIDB4Y2N9LAorCXsweGI5LCAweDAxLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMiwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAzLCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgwNCwgMHgwMCwgMHhjY30sCXsweGI5LCAweDA1LCAweDNjLCAweGNjfSwKKwl7MHhiOSwgMHgwNiwgMHgzYywgMHhjY30sCisJezB4YjksIDB4MDcsIDB4M2MsIDB4Y2N9LAl7MHhiOSwgMHgwOCwgMHgzYywgMHhjY30sCisJezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sCisJezB4MDAsIDB4MzAsIDB4MTgsIDB4YWF9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgX191OCBodjcxMzFyX2luaXRRVkdBX2RhdGFbXVs0XSA9IHsKKwl7MHhiMCwgMHg0ZCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweGIwLCAweDAzLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBiLCAweGNjfSwJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgzNSwgMHg5MSwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjcsIDB4Y2N9LAl7MHhiYywgMHgwMCwgMHhkMSwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MjEsIDB4Y2N9LAorCXsweDAwLCAweDAxLCAweDBjLCAweGFhfSwJezB4MDAsIDB4MTQsIDB4MDEsIDB4YWF9LAorCXsweDAwLCAweDE1LCAweGU2LCAweGFhfSwJezB4MDAsIDB4MTYsIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweDE3LCAweDg2LCAweGFhfSwKKwl7MHgwMCwgMHgyMywgMHgwMCwgMHhhYX0sCXsweDAwLCAweDI1LCAweDAxLCAweGFhfSwKKwl7MHgwMCwgMHgyNiwgMHhkNCwgMHhhYX0sCXsweDAwLCAweDI3LCAweGMwLCAweGFhfSwKKwl7MHhiYywgMHgwMiwgMHgwOCwgMHhjY30sCisJezB4YmMsIDB4MDMsIDB4NzAsIDB4Y2N9LAl7MHhiYywgMHgwNCwgMHgwOCwgMHhjY30sCisJezB4YmMsIDB4MDUsIDB4MDAsIDB4Y2N9LAl7MHhiYywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDgsIDB4M2MsIDB4Y2N9LAorCXsweGJjLCAweDA5LCAweDQwLCAweGNjfSwJezB4YmMsIDB4MGEsIDB4MDQsIDB4Y2N9LAorCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwJezB4YmMsIDB4MGMsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweGZlLCAweDAyLCAweGNjfSwKKwl7MHhiOCwgMHhmZiwgMHgwNywgMHhjY30sCXsweGI5LCAweDAwLCAweDE0LCAweGNjfSwKKwl7MHhiOSwgMHgwMSwgMHgxNCwgMHhjY30sCXsweGI5LCAweDAyLCAweDE0LCAweGNjfSwKKwl7MHhiOSwgMHgwMywgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MDQsIDB4MDIsIDB4Y2N9LAl7MHhiOSwgMHgwNSwgMHgwNSwgMHhjY30sCisJezB4YjksIDB4MDYsIDB4MGYsIDB4Y2N9LAl7MHhiOSwgMHgwNywgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MDgsIDB4MGYsIDB4Y2N9LAorCXsweGI4LCAweDJjLCAweDYwLCAweGNjfSwJezB4YjgsIDB4MmQsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGY4LCAweGNjfSwJezB4YjgsIDB4MmYsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMwLCAweDUwLCAweGNjfSwKKwl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCXsweGI4LCAweDMyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMywgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MzQsIDB4NjUsIDB4Y2N9LAl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAl7MHhiOCwgMHgzNywgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDAxLCAweDdkLCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwJezB4YjgsIDB4ZmUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweGZmLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMCwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAxLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMiwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAzLCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgwNCwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MDUsIDB4M2MsIDB4Y2N9LAl7MHhiOSwgMHgwNiwgMHgzYywgMHhjY30sCisJezB4YjksIDB4MDcsIDB4M2MsIDB4Y2N9LAl7MHhiOSwgMHgwOCwgMHgzYywgMHhjY30sCisJezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwJezB4MDAsIDB4MzAsIDB4MTgsIDB4YWF9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgX191OCBvdjc2NjBfZ2FtbWFbMTddID0geworCTB4MDAsIDB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCisJMHhkNCwgMHhkZiwgMHhlNywgMHhlZSwgMHhmNCwgMHhmOSwgMHhmYywgMHhmZgorfTsKK3N0YXRpYyBjb25zdCBfX3U4IG92NzY2MF9tYXRyaXhbOV0gPSB7CisJMHg1YSwgMHhmMCwgMHhmNiwgMHhmMywgMHg1NywgMHhmNiwgMHhmMywgMHhlZiwgMHg2MgorfTsKK3N0YXRpYyBjb25zdCBfX3U4IG92NzY2MF9pbml0VkdBX2RhdGFbXVs0XSA9IHsKKwl7MHhiMCwgMHg0ZCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCisJezB4YjAsIDB4MDMsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDIxLCAweGNjfSwJezB4YjMsIDB4MDAsIDB4MjYsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMywgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MWYsIDB4Y2N9LAl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sLyogMHhiMzE1ICA8LTAgaHJlZiBzdGFydGwgKi8KKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAl7MHhiMywgMHgxZCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MWYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhhMSwgMHhjY30sCXsweGIzLCAweDAwLCAweDI2LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgzMywgMHhjY30sIC8qIDEzICovCisJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDczLCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweGI4LCAweDI3LCAweDIwLCAweGNjfSwKKwl7MHhiOCwgMHg4ZiwgMHg1MCwgMHhjY30sCisJezB4MDAsIDB4MDEsIDB4ODAsIDB4YWF9LAl7MHgwMCwgMHgwMiwgMHg4MCwgMHhhYX0sCisJezB4MDAsIDB4MTIsIDB4ODAsIDB4YWF9LAorCXsweDAwLCAweDEyLCAweDA1LCAweGFhfSwKKwl7MHgwMCwgMHgxZSwgMHgwMSwgMHhhYX0sCisJezB4MDAsIDB4M2QsIDB4NDAsIDB4YWF9LCAvKiAweDNkIDwtNDAgZ2FtbWEgMDEgKi8KKwl7MHgwMCwgMHg0MSwgMHgwMCwgMHhhYX0sIC8qIGVkZ2UgMDAgKi8KKwl7MHgwMCwgMHgwZCwgMHg0OCwgMHhhYX0sCXsweDAwLCAweDBlLCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHgxMywgMHhhNywgMHhhYX0sCisJezB4MDAsIDB4NDAsIDB4YzEsIDB4YWF9LAl7MHgwMCwgMHgzNSwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MzYsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDNjLCAweDY4LCAweGFhfSwJezB4MDAsIDB4MWIsIDB4MDUsIDB4YWF9LAorCXsweDAwLCAweDM5LCAweDQzLCAweGFhfSwKKwl7MHgwMCwgMHg4ZCwgMHhjZiwgMHhhYX0sCisJezB4MDAsIDB4OGIsIDB4Y2MsIDB4YWF9LAl7MHgwMCwgMHg4YywgMHhjYywgMHhhYX0sCisJezB4MDAsIDB4MGYsIDB4NjIsIDB4YWF9LAorCXsweDAwLCAweDM1LCAweDg0LCAweGFhfSwKKwl7MHgwMCwgMHgzYiwgMHgwOCwgMHhhYX0sIC8qIDAgKiBOaWdodGZyYW1lIDEvNCArIDUwSHogLT4gMHhDOCAqLworCXsweDAwLCAweDNhLCAweDAwLCAweGFhfSwgLyogbXggY2hhbmdlIHl1eXYgZm9ybWF0IDAwLCAwNCwgMDE7IDA4LCAwYyovCisJezB4MDAsIDB4MTQsIDB4MmEsIDB4YWF9LCAvKiBhZ2MgYW1wbGkgKi8KKwl7MHgwMCwgMHg5ZSwgMHg0MCwgMHhhYX0sCXsweGI4LCAweDhmLCAweDUwLCAweGNjfSwKKwl7MHgwMCwgMHgwMSwgMHg4MCwgMHhhYX0sCisJezB4MDAsIDB4MDIsIDB4ODAsIDB4YWF9LAorCXsweGI4LCAweGZlLCAweDAwLCAweGNjfSwJezB4YjgsIDB4ZmYsIDB4MjgsIDB4Y2N9LAorCXsweGI5LCAweDAwLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMSwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAyLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMywgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MDQsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDA1LCAweDNjLCAweGNjfSwJezB4YjksIDB4MDYsIDB4M2MsIDB4Y2N9LAorCXsweGI5LCAweDA3LCAweDNjLCAweGNjfSwKKwl7MHhiOSwgMHgwOCwgMHgzYywgMHhjY30sCisKKwl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwKKworCXsweDAwLCAweDI5LCAweDNjLCAweGFhfSwJezB4YjMsIDB4MDEsIDB4NDUsIDB4Y2N9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IF9fdTggb3Y3NjYwX2luaXRRVkdBX2RhdGFbXVs0XSA9IHsKKwl7MHhiMCwgMHg0ZCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweGIwLCAweDAzLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyMSwgMHhjY30sCXsweGIzLCAweDAwLCAweDI2LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCXsweGIzLCAweDA2LCAweDAzLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgxZiwgMHhjY30sCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sLyogMHhiMzE1ICA8LTAgaHJlZiBzdGFydGwgKi8KKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAl7MHhiMywgMHgxZCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MWYsIDB4MDIsIDB4Y2N9LAl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YTEsIDB4Y2N9LAl7MHhiMywgMHgwMCwgMHgyNiwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MzMsIDB4Y2N9LCAvKiAxMyAqLworCXsweGI4LCAweDAxLCAweDdkLCAweGNjfSwKKy8qIHNpemVyICovCisJezB4YmMsIDB4MDAsIDB4ZDMsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweGI4LCAweDI3LCAweDIwLCAweGNjfSwJezB4YjgsIDB4OGYsIDB4NTAsIDB4Y2N9LAorCXsweDAwLCAweDAxLCAweDgwLCAweGFhfSwJezB4MDAsIDB4MDIsIDB4ODAsIDB4YWF9LAorCXsweDAwLCAweDEyLCAweDgwLCAweGFhfSwJezB4MDAsIDB4MTIsIDB4MDUsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweDAxLCAweGFhfSwKKwl7MHgwMCwgMHgzZCwgMHg0MCwgMHhhYX0sIC8qIDB4M2QgPC00MCBnYW1tYSAwMSAqLworCXsweDAwLCAweDQxLCAweDAwLCAweGFhfSwgLyogZWRnZSAwMCAqLworCXsweDAwLCAweDBkLCAweDQ4LCAweGFhfSwJezB4MDAsIDB4MGUsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDEzLCAweGE3LCAweGFhfSwKKwl7MHgwMCwgMHg0MCwgMHhjMSwgMHhhYX0sCXsweDAwLCAweDM1LCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHgzNiwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4M2MsIDB4NjgsIDB4YWF9LAl7MHgwMCwgMHgxYiwgMHgwNSwgMHhhYX0sCisJezB4MDAsIDB4MzksIDB4NDMsIDB4YWF9LAl7MHgwMCwgMHg4ZCwgMHhjZiwgMHhhYX0sCisJezB4MDAsIDB4OGIsIDB4Y2MsIDB4YWF9LAl7MHgwMCwgMHg4YywgMHhjYywgMHhhYX0sCisJezB4MDAsIDB4MGYsIDB4NjIsIDB4YWF9LAl7MHgwMCwgMHgzNSwgMHg4NCwgMHhhYX0sCisJezB4MDAsIDB4M2IsIDB4MDgsIDB4YWF9LCAvKiAwICAqIE5pZ2h0ZnJhbWUgMS80ICsgNTBIeiAtPiAweEM4ICovCisJezB4MDAsIDB4M2EsIDB4MDAsIDB4YWF9LCAvKiBteCBjaGFuZ2UgeXV5diBmb3JtYXQgMDAsIDA0LCAwMTsgMDgsIDBjKi8KKwl7MHgwMCwgMHgxNCwgMHgyYSwgMHhhYX0sIC8qIGFnYyBhbXBsaSAqLworCXsweDAwLCAweDllLCAweDQwLCAweGFhfSwJezB4YjgsIDB4OGYsIDB4NTAsIDB4Y2N9LAorCXsweDAwLCAweDAxLCAweDgwLCAweGFhfSwKKwl7MHgwMCwgMHgwMiwgMHg4MCwgMHhhYX0sCisvKiBzaXplciBmaWx0ZXJzICovCisJezB4YmMsIDB4MDIsIDB4MDgsIDB4Y2N9LAorCXsweGJjLCAweDAzLCAweDcwLCAweGNjfSwKKwl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM3LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwNCwgMHgwOCwgMHhjY30sCisJezB4YmMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwOCwgMHgzYywgMHhjY30sCisJezB4YmMsIDB4MDksIDB4NDAsIDB4Y2N9LAorCXsweGJjLCAweDBhLCAweDA0LCAweGNjfSwKKwl7MHhiYywgMHgwYiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MGMsIDB4MDAsIDB4Y2N9LAorLyogKi8KKwl7MHhiOCwgMHhmZSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4ZmYsIDB4MjgsIDB4Y2N9LAorLyogKi8KKwl7MHhiOSwgMHgwMCwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAxLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMiwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAzLCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgwNCwgMHgwMCwgMHhjY30sCXsweGI5LCAweDA1LCAweDNjLCAweGNjfSwKKwl7MHhiOSwgMHgwNiwgMHgzYywgMHhjY30sCXsweGI5LCAweDA3LCAweDNjLCAweGNjfSwKKwl7MHhiOSwgMHgwOCwgMHgzYywgMHhjY30sCisvKiAqLworCXsweGI4LCAweDhlLCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sIC8qIGZmICovCisJezB4MDAsIDB4MjksIDB4M2MsIDB4YWF9LAorCXsweGIzLCAweDAxLCAweDQ1LCAweGNjfSwgLyogNDUgKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IF9fdTggb3Y3NjYwXzUwSFpbXVs0XSA9IHsKKwl7MHgwMCwgMHgzYiwgMHgwOCwgMHhhYX0sCisJezB4MDAsIDB4OWQsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweDEzLCAweGE3LCAweGFhfSwKKwl7fQorfTsKKworc3RhdGljIGNvbnN0IF9fdTggb3Y3NjYwXzYwSFpbXVs0XSA9IHsKKwl7MHgwMCwgMHgzYiwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4OWUsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweDEzLCAweGE3LCAweGFhfSwKKwl7fQorfTsKKworc3RhdGljIGNvbnN0IF9fdTggb3Y3NjYwX05vRmxpa2VyW11bNF0gPSB7CisJezB4MDAsIDB4MTMsIDB4ODcsIDB4YWF9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgX191OCBvdjc2NzBfaW5pdFZHQV9KUEdbXVs0XSA9IHsKKwl7MHhiMywgMHgwMSwgMHgwNSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY2LCAweGNjfSwJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAyLCAweGNjfSwJezB4YjMsIDB4MDMsIDB4MWYsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwJezB4YmMsIDB4MDAsIDB4NDEsIDB4Y2N9LAorCXsweGJjLCAweDAxLCAweDAxLCAweGNjfSwJezB4MDAsIDB4MTIsIDB4ODAsIDB4YWF9LAorCXsweDAwLCAweDAwLCAweDIwLCAweGRkfSwJezB4MDAsIDB4MTIsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDExLCAweDQwLCAweGFhfSwJezB4MDAsIDB4NmIsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDNhLCAweDA0LCAweGFhfSwJezB4MDAsIDB4NDAsIDB4YzAsIDB4YWF9LAorCXsweDAwLCAweDhjLCAweDAwLCAweGFhfSwJezB4MDAsIDB4N2EsIDB4MjksIDB4YWF9LAorCXsweDAwLCAweDdiLCAweDBlLCAweGFhfSwJezB4MDAsIDB4N2MsIDB4MWEsIDB4YWF9LAorCXsweDAwLCAweDdkLCAweDMxLCAweGFhfSwJezB4MDAsIDB4N2UsIDB4NTMsIDB4YWF9LAorCXsweDAwLCAweDdmLCAweDYwLCAweGFhfSwJezB4MDAsIDB4ODAsIDB4NmIsIDB4YWF9LAorCXsweDAwLCAweDgxLCAweDczLCAweGFhfSwJezB4MDAsIDB4ODIsIDB4N2IsIDB4YWF9LAorCXsweDAwLCAweDgzLCAweDgyLCAweGFhfSwJezB4MDAsIDB4ODQsIDB4ODksIDB4YWF9LAorCXsweDAwLCAweDg1LCAweDk2LCAweGFhfSwJezB4MDAsIDB4ODYsIDB4YTEsIDB4YWF9LAorCXsweDAwLCAweDg3LCAweGI3LCAweGFhfSwJezB4MDAsIDB4ODgsIDB4Y2MsIDB4YWF9LAorCXsweDAwLCAweDg5LCAweGUxLCAweGFhfSwJezB4MDAsIDB4MTMsIDB4ZTAsIDB4YWF9LAorCXsweDAwLCAweDAwLCAweDAwLCAweGFhfSwJezB4MDAsIDB4MTAsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDBkLCAweDQwLCAweGFhfSwJezB4MDAsIDB4MTQsIDB4MjgsIDB4YWF9LAorCXsweDAwLCAweGE1LCAweDA1LCAweGFhfSwJezB4MDAsIDB4YWIsIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweDI0LCAweDk1LCAweGFhfSwJezB4MDAsIDB4MjUsIDB4MzMsIDB4YWF9LAorCXsweDAwLCAweDI2LCAweGUzLCAweGFhfSwJezB4MDAsIDB4OWYsIDB4ODgsIDB4YWF9LAorCXsweDAwLCAweGEwLCAweDc4LCAweGFhfSwJezB4MDAsIDB4NTUsIDB4OTAsIDB4YWF9LAorCXsweDAwLCAweGExLCAweDAzLCAweGFhfSwJezB4MDAsIDB4YTYsIDB4ZTAsIDB4YWF9LAorCXsweDAwLCAweGE3LCAweGQ4LCAweGFhfSwJezB4MDAsIDB4YTgsIDB4ZjAsIDB4YWF9LAorCXsweDAwLCAweGE5LCAweDkwLCAweGFhfSwJezB4MDAsIDB4YWEsIDB4MTQsIDB4YWF9LAorCXsweDAwLCAweDEzLCAweGU1LCAweGFhfSwJezB4MDAsIDB4MGUsIDB4NjEsIDB4YWF9LAorCXsweDAwLCAweDBmLCAweDRiLCAweGFhfSwJezB4MDAsIDB4MTYsIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweDA3LCAweGFhfSwJezB4MDAsIDB4MjEsIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweDIyLCAweDkxLCAweGFhfSwJezB4MDAsIDB4MjksIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweDMzLCAweDBiLCAweGFhfSwJezB4MDAsIDB4MzUsIDB4MGIsIDB4YWF9LAorCXsweDAwLCAweDM3LCAweDFkLCAweGFhfSwJezB4MDAsIDB4MzgsIDB4NzEsIDB4YWF9LAorCXsweDAwLCAweDM5LCAweDJhLCAweGFhfSwJezB4MDAsIDB4M2MsIDB4NzgsIDB4YWF9LAorCXsweDAwLCAweDRkLCAweDQwLCAweGFhfSwJezB4MDAsIDB4NGUsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDE5LCAweGFhfSwJezB4MDAsIDB4OGQsIDB4NGYsIDB4YWF9LAorCXsweDAwLCAweDhlLCAweDAwLCAweGFhfSwJezB4MDAsIDB4OGYsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDkwLCAweDAwLCAweGFhfSwJezB4MDAsIDB4OTEsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDk2LCAweDAwLCAweGFhfSwJezB4MDAsIDB4OWEsIDB4ODAsIDB4YWF9LAorCXsweDAwLCAweGIwLCAweDg0LCAweGFhfSwJezB4MDAsIDB4YjEsIDB4MGMsIDB4YWF9LAorCXsweDAwLCAweGIyLCAweDBlLCAweGFhfSwJezB4MDAsIDB4YjMsIDB4ODIsIDB4YWF9LAorCXsweDAwLCAweGI4LCAweDBhLCAweGFhfSwJezB4MDAsIDB4NDMsIDB4MTQsIDB4YWF9LAorCXsweDAwLCAweDQ0LCAweGYwLCAweGFhfSwJezB4MDAsIDB4NDUsIDB4NDUsIDB4YWF9LAorCXsweDAwLCAweDQ2LCAweDYzLCAweGFhfSwJezB4MDAsIDB4NDcsIDB4MmQsIDB4YWF9LAorCXsweDAwLCAweDQ4LCAweDQ2LCAweGFhfSwJezB4MDAsIDB4NTksIDB4ODgsIDB4YWF9LAorCXsweDAwLCAweDVhLCAweGEwLCAweGFhfSwJezB4MDAsIDB4NWIsIDB4YzYsIDB4YWF9LAorCXsweDAwLCAweDVjLCAweDdkLCAweGFhfSwJezB4MDAsIDB4NWQsIDB4NWYsIDB4YWF9LAorCXsweDAwLCAweDVlLCAweDE5LCAweGFhfSwJezB4MDAsIDB4NmMsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDZkLCAweDU1LCAweGFhfSwJezB4MDAsIDB4NmUsIDB4MTEsIDB4YWF9LAorCXsweDAwLCAweDZmLCAweDllLCAweGFhfSwJezB4MDAsIDB4NjksIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDZhLCAweDQwLCAweGFhfSwJezB4MDAsIDB4MDEsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweDAyLCAweDQwLCAweGFhfSwJezB4MDAsIDB4MTMsIDB4ZTcsIDB4YWF9LAorCXsweDAwLCAweDVmLCAweGYwLCAweGFhfSwJezB4MDAsIDB4NjAsIDB4ZjAsIDB4YWF9LAorCXsweDAwLCAweDYxLCAweGYwLCAweGFhfSwJezB4MDAsIDB4MjcsIDB4YTAsIDB4YWF9LAorCXsweDAwLCAweDI4LCAweDgwLCAweGFhfSwJezB4MDAsIDB4MmMsIDB4OTAsIDB4YWF9LAorCXsweDAwLCAweDRmLCAweDY2LCAweGFhfSwJezB4MDAsIDB4NTAsIDB4NjYsIDB4YWF9LAorCXsweDAwLCAweDUxLCAweDAwLCAweGFhfSwJezB4MDAsIDB4NTIsIDB4MjIsIDB4YWF9LAorCXsweDAwLCAweDUzLCAweDVlLCAweGFhfSwJezB4MDAsIDB4NTQsIDB4ODAsIDB4YWF9LAorCXsweDAwLCAweDU4LCAweDllLCAweGFhfSwJezB4MDAsIDB4NDEsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDNmLCAweDAwLCAweGFhfSwJezB4MDAsIDB4NzUsIDB4ODUsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweGUxLCAweGFhfSwJezB4MDAsIDB4NGMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc3LCAweDBhLCAweGFhfSwJezB4MDAsIDB4M2QsIDB4ODgsIDB4YWF9LAorCXsweDAwLCAweDRiLCAweDA5LCAweGFhfSwJezB4MDAsIDB4YzksIDB4NjAsIDB4YWF9LAorCXsweDAwLCAweDQxLCAweDM4LCAweGFhfSwJezB4MDAsIDB4NjIsIDB4MzAsIDB4YWF9LAorCXsweDAwLCAweDYzLCAweDMwLCAweGFhfSwJezB4MDAsIDB4NjQsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDk0LCAweDA3LCAweGFhfSwJezB4MDAsIDB4OTUsIDB4MGIsIDB4YWF9LAorCXsweDAwLCAweDY1LCAweDAwLCAweGFhfSwJezB4MDAsIDB4NjYsIDB4MDUsIDB4YWF9LAorCXsweDAwLCAweDU2LCAweDUwLCAweGFhfSwJezB4MDAsIDB4MzQsIDB4MTEsIDB4YWF9LAorCXsweDAwLCAweGE0LCAweDg4LCAweGFhfSwJezB4MDAsIDB4OTYsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDk3LCAweDMwLCAweGFhfSwJezB4MDAsIDB4OTgsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDk5LCAweDMwLCAweGFhfSwJezB4MDAsIDB4OWEsIDB4ODQsIDB4YWF9LAorCXsweDAwLCAweDliLCAweDI5LCAweGFhfSwJezB4MDAsIDB4OWMsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDA0LCAweGFhfSwJezB4MDAsIDB4NzksIDB4MDEsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweGYwLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MGYsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDAwLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDdlLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDgwLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MGIsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDAxLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MGMsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDBmLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MGQsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDIwLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MDksIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDgwLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweGMwLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDQwLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MDUsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDMwLCAweGFhfSwJezB4MDAsIDB4NzksIDB4MjYsIDB4YWF9LAorCXsweDAwLCAweDExLCAweDQwLCAweGFhfSwJezB4MDAsIDB4M2EsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDEyLCAweDAwLCAweGFhfSwJezB4MDAsIDB4NDAsIDB4YzAsIDB4YWF9LAorCXsweDAwLCAweDhjLCAweDAwLCAweGFhfSwJezB4MDAsIDB4MTcsIDB4MTQsIDB4YWF9LAorCXsweDAwLCAweDE4LCAweDAyLCAweGFhfSwJezB4MDAsIDB4MzIsIDB4OTIsIDB4YWF9LAorCXsweDAwLCAweDE5LCAweDAyLCAweGFhfSwJezB4MDAsIDB4MWEsIDB4N2EsIDB4YWF9LAorCXsweDAwLCAweDAzLCAweDBhLCAweGFhfSwJezB4MDAsIDB4MGMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDNlLCAweDAwLCAweGFhfSwJezB4MDAsIDB4NzAsIDB4M2EsIDB4YWF9LAorCXsweDAwLCAweDcxLCAweDM1LCAweGFhfSwJezB4MDAsIDB4NzIsIDB4MTEsIDB4YWF9LAorCXsweDAwLCAweDczLCAweGYwLCAweGFhfSwJezB4MDAsIDB4YTIsIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweGIxLCAweDAwLCAweGFhfSwJezB4MDAsIDB4YjEsIDB4MGMsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweDM3LCAweGFhfSwJezB4MDAsIDB4YWEsIDB4MTQsIDB4YWF9LAorCXsweDAwLCAweDI0LCAweDgwLCAweGFhfSwJezB4MDAsIDB4MjUsIDB4NzQsIDB4YWF9LAorCXsweDAwLCAweDI2LCAweGQzLCAweGFhfSwJezB4MDAsIDB4MGQsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDE0LCAweDE4LCAweGFhfSwJezB4MDAsIDB4OWQsIDB4OTksIDB4YWF9LAorCXsweDAwLCAweDllLCAweDdmLCAweGFhfSwJezB4MDAsIDB4NjQsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDk0LCAweDA3LCAweGFhfSwJezB4MDAsIDB4OTUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDY2LCAweDA1LCAweGFhfSwJezB4MDAsIDB4NDEsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDNmLCAweDAwLCAweGFhfSwJezB4MDAsIDB4NzUsIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweGUxLCAweGFhfSwJezB4MDAsIDB4NGMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc3LCAweDAwLCAweGFhfSwJezB4MDAsIDB4M2QsIDB4YzIsIDB4YWF9LAorCXsweDAwLCAweDRiLCAweDA5LCAweGFhfSwJezB4MDAsIDB4YzksIDB4NjAsIDB4YWF9LAorCXsweDAwLCAweDQxLCAweDM4LCAweGFhfSwJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDAyLCAweGNjfSwJezB4YjYsIDB4MDIsIDB4ODAsIDB4Y2N9LAorCXsweGI2LCAweDA1LCAweDAxLCAweGNjfSwJezB4YjYsIDB4MDQsIDB4ZTAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwJezB4YjYsIDB4MTMsIDB4MTMsIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDAyLCAweGNjfSwJezB4YjYsIDB4MTcsIDB4NTgsIDB4Y2N9LAorCXsweGI2LCAweDE2LCAweDAwLCAweGNjfSwJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwJezB4YmYsIDB4Y2MsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwJezB4YjMsIDB4MDEsIDB4NDUsIDB4Y2N9LAorCXsweDAwLCAweDc3LCAweDA1LCAweGFhfSwKKwl7fSwKK307CisKK3N0YXRpYyBjb25zdCBfX3U4IG92NzY3MF9pbml0UVZHQV9KUEdbXVs0XSA9IHsKKwl7MHhiMywgMHgwMSwgMHgwNSwgMHhjY30sCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NiwgMHhjY30sCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhhMSwgMHhjY30sCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMiwgMHhjY30sCXsweGIzLCAweDAzLCAweDFmLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCXsweGJjLCAweDAwLCAweGQxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCXsweDAwLCAweDEyLCAweDgwLCAweGFhfSwKKwl7MHgwMCwgMHgwMCwgMHgyMCwgMHhkZH0sCXsweDAwLCAweDEyLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHgxMSwgMHg0MCwgMHhhYX0sCXsweDAwLCAweDZiLCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHgzYSwgMHgwNCwgMHhhYX0sCXsweDAwLCAweDQwLCAweGMwLCAweGFhfSwKKwl7MHgwMCwgMHg4YywgMHgwMCwgMHhhYX0sCXsweDAwLCAweDdhLCAweDI5LCAweGFhfSwKKwl7MHgwMCwgMHg3YiwgMHgwZSwgMHhhYX0sCXsweDAwLCAweDdjLCAweDFhLCAweGFhfSwKKwl7MHgwMCwgMHg3ZCwgMHgzMSwgMHhhYX0sCXsweDAwLCAweDdlLCAweDUzLCAweGFhfSwKKwl7MHgwMCwgMHg3ZiwgMHg2MCwgMHhhYX0sCXsweDAwLCAweDgwLCAweDZiLCAweGFhfSwKKwl7MHgwMCwgMHg4MSwgMHg3MywgMHhhYX0sCXsweDAwLCAweDgyLCAweDdiLCAweGFhfSwKKwl7MHgwMCwgMHg4MywgMHg4MiwgMHhhYX0sCXsweDAwLCAweDg0LCAweDg5LCAweGFhfSwKKwl7MHgwMCwgMHg4NSwgMHg5NiwgMHhhYX0sCXsweDAwLCAweDg2LCAweGExLCAweGFhfSwKKwl7MHgwMCwgMHg4NywgMHhiNywgMHhhYX0sCXsweDAwLCAweDg4LCAweGNjLCAweGFhfSwKKwl7MHgwMCwgMHg4OSwgMHhlMSwgMHhhYX0sCXsweDAwLCAweDEzLCAweGUwLCAweGFhfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDEwLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHgwZCwgMHg0MCwgMHhhYX0sCXsweDAwLCAweDE0LCAweDI4LCAweGFhfSwKKwl7MHgwMCwgMHhhNSwgMHgwNSwgMHhhYX0sCXsweDAwLCAweGFiLCAweDA3LCAweGFhfSwKKwl7MHgwMCwgMHgyNCwgMHg5NSwgMHhhYX0sCXsweDAwLCAweDI1LCAweDMzLCAweGFhfSwKKwl7MHgwMCwgMHgyNiwgMHhlMywgMHhhYX0sCXsweDAwLCAweDlmLCAweDg4LCAweGFhfSwKKwl7MHgwMCwgMHhhMCwgMHg3OCwgMHhhYX0sCXsweDAwLCAweDU1LCAweDkwLCAweGFhfSwKKwl7MHgwMCwgMHhhMSwgMHgwMywgMHhhYX0sCXsweDAwLCAweGE2LCAweGUwLCAweGFhfSwKKwl7MHgwMCwgMHhhNywgMHhkOCwgMHhhYX0sCXsweDAwLCAweGE4LCAweGYwLCAweGFhfSwKKwl7MHgwMCwgMHhhOSwgMHg5MCwgMHhhYX0sCXsweDAwLCAweGFhLCAweDE0LCAweGFhfSwKKwl7MHgwMCwgMHgxMywgMHhlNSwgMHhhYX0sCXsweDAwLCAweDBlLCAweDYxLCAweGFhfSwKKwl7MHgwMCwgMHgwZiwgMHg0YiwgMHhhYX0sCXsweDAwLCAweDE2LCAweDAyLCAweGFhfSwKKwl7MHgwMCwgMHgxZSwgMHgwNywgMHhhYX0sCXsweDAwLCAweDIxLCAweDAyLCAweGFhfSwKKwl7MHgwMCwgMHgyMiwgMHg5MSwgMHhhYX0sCXsweDAwLCAweDI5LCAweDA3LCAweGFhfSwKKwl7MHgwMCwgMHgzMywgMHgwYiwgMHhhYX0sCXsweDAwLCAweDM1LCAweDBiLCAweGFhfSwKKwl7MHgwMCwgMHgzNywgMHgxZCwgMHhhYX0sCXsweDAwLCAweDM4LCAweDcxLCAweGFhfSwKKwl7MHgwMCwgMHgzOSwgMHgyYSwgMHhhYX0sCXsweDAwLCAweDNjLCAweDc4LCAweGFhfSwKKwl7MHgwMCwgMHg0ZCwgMHg0MCwgMHhhYX0sCXsweDAwLCAweDRlLCAweDIwLCAweGFhfSwKKwl7MHgwMCwgMHg3NCwgMHgxOSwgMHhhYX0sCXsweDAwLCAweDhkLCAweDRmLCAweGFhfSwKKwl7MHgwMCwgMHg4ZSwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDhmLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg5MCwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDkxLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg5NiwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDlhLCAweDgwLCAweGFhfSwKKwl7MHgwMCwgMHhiMCwgMHg4NCwgMHhhYX0sCXsweDAwLCAweGIxLCAweDBjLCAweGFhfSwKKwl7MHgwMCwgMHhiMiwgMHgwZSwgMHhhYX0sCXsweDAwLCAweGIzLCAweDgyLCAweGFhfSwKKwl7MHgwMCwgMHhiOCwgMHgwYSwgMHhhYX0sCXsweDAwLCAweDQzLCAweDE0LCAweGFhfSwKKwl7MHgwMCwgMHg0NCwgMHhmMCwgMHhhYX0sCXsweDAwLCAweDQ1LCAweDQ1LCAweGFhfSwKKwl7MHgwMCwgMHg0NiwgMHg2MywgMHhhYX0sCXsweDAwLCAweDQ3LCAweDJkLCAweGFhfSwKKwl7MHgwMCwgMHg0OCwgMHg0NiwgMHhhYX0sCXsweDAwLCAweDU5LCAweDg4LCAweGFhfSwKKwl7MHgwMCwgMHg1YSwgMHhhMCwgMHhhYX0sCXsweDAwLCAweDViLCAweGM2LCAweGFhfSwKKwl7MHgwMCwgMHg1YywgMHg3ZCwgMHhhYX0sCXsweDAwLCAweDVkLCAweDVmLCAweGFhfSwKKwl7MHgwMCwgMHg1ZSwgMHgxOSwgMHhhYX0sCXsweDAwLCAweDZjLCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg2ZCwgMHg1NSwgMHhhYX0sCXsweDAwLCAweDZlLCAweDExLCAweGFhfSwKKwl7MHgwMCwgMHg2ZiwgMHg5ZSwgMHhhYX0sCXsweDAwLCAweDY5LCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg2YSwgMHg0MCwgMHhhYX0sCXsweDAwLCAweDAxLCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHgwMiwgMHg0MCwgMHhhYX0sCXsweDAwLCAweDEzLCAweGU3LCAweGFhfSwKKwl7MHgwMCwgMHg1ZiwgMHhmMCwgMHhhYX0sCXsweDAwLCAweDYwLCAweGYwLCAweGFhfSwKKwl7MHgwMCwgMHg2MSwgMHhmMCwgMHhhYX0sCXsweDAwLCAweDI3LCAweGEwLCAweGFhfSwKKwl7MHgwMCwgMHgyOCwgMHg4MCwgMHhhYX0sCXsweDAwLCAweDJjLCAweDkwLCAweGFhfSwKKwl7MHgwMCwgMHg0ZiwgMHg2NiwgMHhhYX0sCXsweDAwLCAweDUwLCAweDY2LCAweGFhfSwKKwl7MHgwMCwgMHg1MSwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDUyLCAweDIyLCAweGFhfSwKKwl7MHgwMCwgMHg1MywgMHg1ZSwgMHhhYX0sCXsweDAwLCAweDU0LCAweDgwLCAweGFhfSwKKwl7MHgwMCwgMHg1OCwgMHg5ZSwgMHhhYX0sCXsweDAwLCAweDQxLCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHgzZiwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDc1LCAweDg1LCAweGFhfSwKKwl7MHgwMCwgMHg3NiwgMHhlMSwgMHhhYX0sCXsweDAwLCAweDRjLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg3NywgMHgwYSwgMHhhYX0sCXsweDAwLCAweDNkLCAweDg4LCAweGFhfSwKKwl7MHgwMCwgMHg0YiwgMHgwOSwgMHhhYX0sCXsweDAwLCAweGM5LCAweDYwLCAweGFhfSwKKwl7MHgwMCwgMHg0MSwgMHgzOCwgMHhhYX0sCXsweDAwLCAweDYyLCAweDMwLCAweGFhfSwKKwl7MHgwMCwgMHg2MywgMHgzMCwgMHhhYX0sCXsweDAwLCAweDY0LCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHg5NCwgMHgwNywgMHhhYX0sCXsweDAwLCAweDk1LCAweDBiLCAweGFhfSwKKwl7MHgwMCwgMHg2NSwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDY2LCAweDA1LCAweGFhfSwKKwl7MHgwMCwgMHg1NiwgMHg1MCwgMHhhYX0sCXsweDAwLCAweDM0LCAweDExLCAweGFhfSwKKwl7MHgwMCwgMHhhNCwgMHg4OCwgMHhhYX0sCXsweDAwLCAweDk2LCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg5NywgMHgzMCwgMHhhYX0sCXsweDAwLCAweDk4LCAweDIwLCAweGFhfSwKKwl7MHgwMCwgMHg5OSwgMHgzMCwgMHhhYX0sCXsweDAwLCAweDlhLCAweDg0LCAweGFhfSwKKwl7MHgwMCwgMHg5YiwgMHgyOSwgMHhhYX0sCXsweDAwLCAweDljLCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHg3OCwgMHgwNCwgMHhhYX0sCXsweDAwLCAweDc5LCAweDAxLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHhmMCwgMHhhYX0sCXsweDAwLCAweDc5LCAweDBmLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDc5LCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHg3ZSwgMHhhYX0sCXsweDAwLCAweDc5LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHg4MCwgMHhhYX0sCXsweDAwLCAweDc5LCAweDBiLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHgwMSwgMHhhYX0sCXsweDAwLCAweDc5LCAweDBjLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHgwZiwgMHhhYX0sCXsweDAwLCAweDc5LCAweDBkLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHgyMCwgMHhhYX0sCXsweDAwLCAweDc5LCAweDA5LCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHg4MCwgMHhhYX0sCXsweDAwLCAweDc5LCAweDAyLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHhjMCwgMHhhYX0sCXsweDAwLCAweDc5LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHg0MCwgMHhhYX0sCXsweDAwLCAweDc5LCAweDA1LCAweGFhfSwKKwl7MHgwMCwgMHhjOCwgMHgzMCwgMHhhYX0sCXsweDAwLCAweDc5LCAweDI2LCAweGFhfSwKKwl7MHgwMCwgMHgxMSwgMHg0MCwgMHhhYX0sCXsweDAwLCAweDNhLCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHgxMiwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDQwLCAweGMwLCAweGFhfSwKKwl7MHgwMCwgMHg4YywgMHgwMCwgMHhhYX0sCXsweDAwLCAweDE3LCAweDE0LCAweGFhfSwKKwl7MHgwMCwgMHgxOCwgMHgwMiwgMHhhYX0sCXsweDAwLCAweDMyLCAweDkyLCAweGFhfSwKKwl7MHgwMCwgMHgxOSwgMHgwMiwgMHhhYX0sCXsweDAwLCAweDFhLCAweDdhLCAweGFhfSwKKwl7MHgwMCwgMHgwMywgMHgwYSwgMHhhYX0sCXsweDAwLCAweDBjLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHgzZSwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDcwLCAweDNhLCAweGFhfSwKKwl7MHgwMCwgMHg3MSwgMHgzNSwgMHhhYX0sCXsweDAwLCAweDcyLCAweDExLCAweGFhfSwKKwl7MHgwMCwgMHg3MywgMHhmMCwgMHhhYX0sCXsweDAwLCAweGEyLCAweDAyLCAweGFhfSwKKwl7MHgwMCwgMHhiMSwgMHgwMCwgMHhhYX0sCXsweDAwLCAweGIxLCAweDBjLCAweGFhfSwKKwl7MHgwMCwgMHgxZSwgMHgzNywgMHhhYX0sCXsweDAwLCAweGFhLCAweDE0LCAweGFhfSwKKwl7MHgwMCwgMHgyNCwgMHg4MCwgMHhhYX0sCXsweDAwLCAweDI1LCAweDc0LCAweGFhfSwKKwl7MHgwMCwgMHgyNiwgMHhkMywgMHhhYX0sCXsweDAwLCAweDBkLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHgxNCwgMHgxOCwgMHhhYX0sCXsweDAwLCAweDlkLCAweDk5LCAweGFhfSwKKwl7MHgwMCwgMHg5ZSwgMHg3ZiwgMHhhYX0sCXsweDAwLCAweDY0LCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHg5NCwgMHgwNywgMHhhYX0sCXsweDAwLCAweDk1LCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHg2NiwgMHgwNSwgMHhhYX0sCXsweDAwLCAweDQxLCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHgzZiwgMHgwMCwgMHhhYX0sCXsweDAwLCAweDc1LCAweDA3LCAweGFhfSwKKwl7MHgwMCwgMHg3NiwgMHhlMSwgMHhhYX0sCXsweDAwLCAweDRjLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg3NywgMHgwMCwgMHhhYX0sCXsweDAwLCAweDNkLCAweGMyLCAweGFhfSwKKwl7MHgwMCwgMHg0YiwgMHgwOSwgMHhhYX0sCXsweDAwLCAweGM5LCAweDYwLCAweGFhfSwKKwl7MHgwMCwgMHg0MSwgMHgzOCwgMHhhYX0sCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwMSwgMHhjY30sCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCXsweGI2LCAweDEzLCAweDIxLCAweGNjfSwKKwl7MHhiNiwgMHgxOCwgMHgwMCwgMHhjY30sCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMiwgMHgxOCwgMHhjY30sCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwKKwl7MHhiYywgMHgwNCwgMHgxOCwgMHhjY30sCXsweGJjLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwNiwgMHgwMCwgMHhjY30sCXsweGJjLCAweDA4LCAweDMwLCAweGNjfSwKKwl7MHhiYywgMHgwOSwgMHg0MCwgMHhjY30sCXsweGJjLCAweDBhLCAweDEwLCAweGNjfSwKKwl7MHhiYywgMHgwYiwgMHgwMCwgMHhjY30sCXsweGJjLCAweDBjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCXsweGIzLCAweDAxLCAweDQ1LCAweGNjfSwKKwl7MHgwMCwgMHg3NywgMHgwNSwgMHhhYSB9LAorCXt9LAorfTsKKworc3RydWN0IHNlbnNvcl9pbmZvIHsKKwlpbnQgc2Vuc29ySWQ7CisJX191OCBJMmNBZGQ7CisJX191OCBJZEFkZDsKKwlfX3UxNiBWcElkOworCV9fdTggbTE7CisJX191OCBtMjsKKwlfX3U4IG9wOworCX07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gc2Vuc29yX2luZm9fZGF0YVtdID0geworLyogICAgICBzZW5zb3JJZCwgICAgICAgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCisJe1NFTlNPUl9IVjcxMzFSLCAgICAweDgwIHwgMHgxMSwgMHgwMCwgMHgwMjA5LCAweDI0LCAweDI1LCAweDAxfSwKKwl7U0VOU09SX09WNzY2MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NjAsIDB4MjYsIDB4MjYsIDB4MDV9LAorCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MzEzMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisJe1NFTlNPUl9NSTEzMjAsICAgICAweDgwIHwgMHhjOCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY1LCAweDAxfSwKKwl7U0VOU09SX09WNzY3MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NzMsIDB4NjYsIDB4NjcsIDB4MDV9LAorCXtTRU5TT1JfTUkxMzEwX1NPQywgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MTQzYSwgMHgyNCwgMHgyNSwgMHgwMX0sCit9OworCisvKiByZWFkICdsZW4nIGJ5dGVzIGluIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLworc3RhdGljIHZvaWQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgIF9fdTE2IHJlcSwKKwkJICBfX3UxNiBpbmRleCwKKwkJICBfX3UxNiBsZW4pCit7CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCXJlcSwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJMSwJCQkvKiB2YWx1ZSAqLworCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuLAorCQkJNTAwKTsKK30KKworc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCSAgICBfX3UxNiByZXEsCisJCQkgICAgX191MTYgdmFsdWUsCisJCQkgICAgX191MTYgaW5kZXgpCit7CisJdXNiX2NvbnRyb2xfbXNnKGRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJdmFsdWUsIGluZGV4LCBOVUxMLCAwLAorCQkJNTAwKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9zZW5zb3JfcmVnaXN0ZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCV9fdTE2IGFkZHJlc3MsIF9fdTE2ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJX191OCBsZGF0YSwgbWRhdGEsIGhkYXRhOworCWludCByZXRyeSA9IDUwOworCisJKnZhbHVlID0gMDsKKworCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNmLCAxKTsKKwkvKlBERUJVRyhEX1BST0JFLCAiIEkyYyBCdXMgQnVzeSBXYWl0ICAweCUwMlggIiwgdG1wdmFsdWUpOyAqLworCWlmICghKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDIpKSB7CisJCVBERUJVRyhEX0VSUiwgIkkyYyBCdXMgQnVzeSBXYWl0ICVkIiwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDIpOworCQlyZXR1cm47CisJfQorCXJlZ193KGRldiwgMHhhMCwgYWRkcmVzcywgMHhiMzNhKTsKKwlyZWdfdyhkZXYsIDB4YTAsIDB4MDIsIDB4YjMzOSk7CisKKwlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7CisJd2hpbGUgKHJldHJ5LS0gJiYgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKSB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNiLCAxKTsKKy8qCQlQREVCVUcoRF9QUk9CRSwgIlJlYWQgYWdhaW4gMHhiMzNiICVkIiwgdG1wdmFsdWUpOyAqLworCQltc2xlZXAoMSk7CisJfQorCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNlLCAxKTsKKwloZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzZCwgMSk7CisJbWRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2MsIDEpOworCWxkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCVBERUJVRyhEX1BST0JFLCAiUmVhZCBTZW5zb3IgaCAoMHglMDJYKSBtICgweCUwMlgpIGwgKDB4JTAyWCkiLAorCQloZGF0YSwgbWRhdGEsIGxkYXRhKTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzNCwgMSk7CisJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAyKQorCQkqdmFsdWUgPSAobGRhdGEgPDwgOCkgKyBtZGF0YTsKKwllbHNlCisJCSp2YWx1ZSA9IGxkYXRhOworfQorCitzdGF0aWMgaW50IHZjMDMyeF9wcm9iZV9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgaTsKKwlfX3UxNiB2YWx1ZTsKKwljb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gKnB0c2Vuc29yX2luZm87CisKKwlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YmZjZiwgMSk7CisJUERFQlVHKERfUFJPQkUsICJjaGVjayBzZW5zb3IgaGVhZGVyICVkIiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZW5zb3JfaW5mb19kYXRhKTsgaSsrKSB7CisJCXB0c2Vuc29yX2luZm8gPSAmc2Vuc29yX2luZm9fZGF0YVtpXTsKKwkJcmVnX3coZGV2LCAweGEwLCAweDAyLCAweGIzMzQpOworCQlyZWdfdyhkZXYsIDB4YTAsIHB0c2Vuc29yX2luZm8tPm0xLCAweGIzMDApOworCQlyZWdfdyhkZXYsIDB4YTAsIHB0c2Vuc29yX2luZm8tPm0yLCAweGIzMDApOworCQlyZWdfdyhkZXYsIDB4YTAsIDB4MDEsIDB4YjMwOCk7CisJCXJlZ193KGRldiwgMHhhMCwgMHgwYywgMHhiMzA5KTsKKwkJcmVnX3coZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5JMmNBZGQsIDB4YjMzNSk7CisvKgkJUERFQlVHKERfUFJPQkUsCisJCQkiY2hlY2sgc2Vuc29yIFZDMDMyWCAtPiAlZCBBZGQgLT4gb3glMDJYISIsCisJCQlpLCBwdHNlbnNvcl9pbmZvLT5JMmNBZGQpOyAqLworCQlyZWdfdyhkZXYsIDB4YTAsIHB0c2Vuc29yX2luZm8tPm9wLCAweGIzMDEpOworCQlyZWFkX3NlbnNvcl9yZWdpc3Rlcihnc3BjYV9kZXYsIHB0c2Vuc29yX2luZm8tPklkQWRkLCAmdmFsdWUpOworCQlpZiAodmFsdWUgPT0gcHRzZW5zb3JfaW5mby0+VnBJZCkgeworLyoJCQlQREVCVUcoRF9QUk9CRSwgImZpbmQgc2Vuc29yIFZDMDMyWCAtPiBveCUwNFghIiwKKwkJCQlwdHNlbnNvcl9pbmZvLT5WcElkKTsgKi8KKwkJCXJldHVybiBwdHNlbnNvcl9pbmZvLT5zZW5zb3JJZDsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBfX3U4IGkyY193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3U4IHJlZywgY29uc3QgX191OCAqdmFsLCBfX3U4IHNpemUpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCisJaWYgKHNpemUgPiAzIHx8IHNpemUgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzZiwgMSk7CisJcmVnX3coZGV2LCAweGEwLCBzaXplLCAweGIzMzQpOworCXJlZ193KGRldiwgMHhhMCwgcmVnLCAweGIzM2EpOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJcmVnX3coZGV2LCAweGEwLCB2YWxbMF0sIDB4YjMzNik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmVnX3coZGV2LCAweGEwLCB2YWxbMF0sIDB4YjMzNik7CisJCXJlZ193KGRldiwgMHhhMCwgdmFsWzFdLCAweGIzMzcpOworCQlicmVhazsKKwljYXNlIDM6CisJCXJlZ193KGRldiwgMHhhMCwgdmFsWzBdLCAweGIzMzYpOworCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFsxXSwgMHhiMzM3KTsKKwkJcmVnX3coZGV2LCAweGEwLCB2YWxbMl0sIDB4YjMzOCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzM0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzM5KTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAwOworfQorCitzdGF0aWMgdm9pZCBwdXRfdGFiX3RvX3JlZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBfX3U4ICp0YWIsIF9fdTggdGFic2l6ZSwgX191MTYgYWRkcikKK3sKKwlpbnQgajsKKwlfX3UxNiBhZCA9IGFkZHI7CisKKwlmb3IgKGogPSAwOyBqIDwgdGFic2l6ZTsgaisrKQorCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgdGFiW2pdLCBhZCsrKTsKK30KKworc3RhdGljIHZvaWQgdXNiX2V4Y2hhbmdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IF9fdTggZGF0YVtdWzRdKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKDs7KSB7CisJCXN3aXRjaCAoZGF0YVtpXVszXSkgeworCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCQljYXNlIDB4Y2M6CQkJLyogbm9ybWFsIHdyaXRlICovCisJCQlyZWdfdyhkZXYsIDB4YTAsIGRhdGFbaV1bMl0sCisJCQkJCSgoZGF0YVtpXVswXSk8PDgpIHwgZGF0YVtpXVsxXSk7CisJCQlicmVhazsKKwkJY2FzZSAweGFhOgkJCS8qIGkyYyBvcCAqLworCQkJaTJjX3dyaXRlKGdzcGNhX2RldiwgZGF0YVtpXVsxXSwgJmRhdGFbaV1bMl0sIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMHhiYjoJCQkvKiBpMmMgb3AgKi8KKwkJCWkyY193cml0ZShnc3BjYV9kZXYsIGRhdGFbaV1bMF0sICZkYXRhW2ldWzFdLCAyKTsKKwkJCWJyZWFrOworCQljYXNlIDB4ZGQ6CisJCQltc2xlZXAoZGF0YVtpXVsyXSArIDEwKTsKKwkJCWJyZWFrOworCQl9CisJCWkrKzsKKwl9CisJLypub3QgcmVhY2hlZCovCit9CisKKy8qCisgIkdhbW1hVCI9aGV4OjA0LDE3LDMxLDRmLDZhLDgzLDk5LGFkLGJmLGNlLGRhLGU1LGVlLGY1LGZiLGZmLGZmCisgIk1hdHJpeFQiPWhleDo2MCxmOSxlNSxlNyw1MCwwNSxmMyxlNiw2NgorICovCisKK3N0YXRpYyB2b2lkIHZjMDMyMV9yZXNldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDAsIDB4YjA0ZCk7CisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDEsIDB4YjMwMSk7CisJbXNsZWVwKDEwMCk7CisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDEsIDB4YjAwMyk7CisJbXNsZWVwKDEwMCk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCXN0cnVjdCBjYW0gKmNhbTsKKwlpbnQgc2Vuc29yOworCV9fdTE2IHByb2R1Y3Q7CisKKwlwcm9kdWN0ID0gaWQtPmlkUHJvZHVjdDsKKwlzZC0+YnJpZGdlID0gQlJJREdFX1ZDMDMyMTsKKwlzd2l0Y2ggKGlkLT5pZFZlbmRvcikgeworCWNhc2UgMHgwYWM4OgkJLyogVmltaWNybyB6LXN0YXIgKi8KKwkJc3dpdGNoIChwcm9kdWN0KSB7CisJCWNhc2UgMHgwMzIzOgorCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9WQzAzMjM7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MTdlZjoJCS8qIExlbm92byAqLworLyoJCXN3aXRjaCAocHJvZHVjdCkgeyAqLworLyoJCWNhc2UgMHg0ODAyOgkgKiBMZW5vdm8gTUkxMzEwX1NPQyAqLworCQkJc2QtPmJyaWRnZSA9IEJSSURHRV9WQzAzMjM7CisvKgkJCWJyZWFrOyAqLworLyoJCX0gKi8KKwkJYnJlYWs7CisJfQorCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJY2FtLT5lcGFkZHIgPSAweDAyOworCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKKwkJY2FtLT5jYW1fbW9kZSA9IHZjMDMyMV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmMwMzIxX21vZGUpOworCX0gZWxzZSB7CisJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZjMDMyM19tb2RlKTsKKwl9CisKKwl2YzAzMjFfcmVzZXQoZ3NwY2FfZGV2KTsKKwlzZW5zb3IgPSB2YzAzMnhfcHJvYmVfc2Vuc29yKGdzcGNhX2Rldik7CisJc3dpdGNoIChzZW5zb3IpIHsKKwljYXNlIC0xOgorCQlQREVCVUcoRF9QUk9CRSwgIlVua25vd24gc2Vuc29yLi4uIik7CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgU0VOU09SX0hWNzEzMVI6CisJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSFY3MTMxUiIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMVI7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6CisJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgTUkxMzEwX1NPQyIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX01JMTMxMF9TT0M7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMTMyMDoKKwkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBNSTEzMjAiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9NSTEzMjA7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzY2MDoKKwkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NjAiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2NjA7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzY3MDoKKwkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NzAiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2NzA7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPMzEzME5DOgorCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIFBPMzEzME5DIik7CisJCXNkLT5zZW5zb3IgPSBTRU5TT1JfUE8zMTMwTkM7CisJCWJyZWFrOworCX0KKworCXNkLT5xaW5kZXggPSA3OworCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKKwlzZC0+bGlnaHRmcmVxID0gRlJFUV9ERUY7CisKKwlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxKSB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHg4YSwgMCwgMyk7CisJCXJlZ193KGRldiwgMHg4NywgMHgwMCwgMHgwZjBmKTsKKworCQlyZWdfcihnc3BjYV9kZXYsIDB4OGIsIDAsIDMpOworCQlyZWdfdyhkZXYsIDB4ODgsIDB4MDAsIDB4MDIwMik7CisJfQorCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBvcGVuIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2Rfb3BlbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHF1YWxpdHkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCBzZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNldGxpZ2h0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0YXRpYyBjb25zdCBfX3U4ICgqb3Y3NjYwX2ZyZXFfdGJbM10pWzRdID0KKwkJe292NzY2MF9Ob0ZsaWtlciwgb3Y3NjYwXzUwSFosIG92NzY2MF82MEhafTsKKworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVjc2NjApCisJCXJldHVybjsKKwl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfZnJlcV90YltzZC0+bGlnaHRmcmVxXSk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJY29uc3QgX191OCAqR2FtbWFUID0gTlVMTDsKKwljb25zdCBfX3U4ICpNYXRyaXhUID0gTlVMTDsKKwlpbnQgbW9kZTsKKworCS8qIEFzc3VtZSBzdGFydCB1c2UgdGhlIGdvb2QgcmVzb2x1dGlvbiBmcm9tIGdzcGNhX2Rldi0+bW9kZSAqLworCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKKwkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YmZlYyk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGJmZWQpOworCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiZmVlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YmZlZik7CisJfQorCisJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0hWNzEzMVI6CisJCUdhbW1hVCA9IGh2NzEzMXJfZ2FtbWE7CisJCU1hdHJpeFQgPSBodjcxMzFyX21hdHJpeDsKKwkJaWYgKG1vZGUpIHsKKwkJCS8qIDMyMHgyNDAgKi8KKwkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGh2NzEzMXJfaW5pdFFWR0FfZGF0YSk7CisJCX0gZWxzZSB7CisJCQkvKiA2NDB4NDgwICovCisJCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBodjcxMzFyX2luaXRWR0FfZGF0YSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjYwOgorCQlHYW1tYVQgPSBvdjc2NjBfZ2FtbWE7CisJCU1hdHJpeFQgPSBvdjc2NjBfbWF0cml4OworCQlpZiAobW9kZSkgeworCQkJLyogMzIweDI0MCAqLworCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjYwX2luaXRRVkdBX2RhdGEpOworCQl9IGVsc2UgeworCQkJLyogNjQweDQ4MCAqLworCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjYwX2luaXRWR0FfZGF0YSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjcwOgorCQkvKkdhbW1hVCA9IG92NzY2MF9nYW1tYTsgKi8KKwkJLypNYXRyaXhUID0gb3Y3NjYwX21hdHJpeDsgKi8KKwkJaWYgKG1vZGUpIHsKKwkJCS8qIDMyMHgyNDAgKi8KKwkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG92NzY3MF9pbml0UVZHQV9KUEcpOworCQl9IGVsc2UgeworCQkJLyogNjQweDQ4MCAqLworCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjcwX2luaXRWR0FfSlBHKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgorCQlpZiAobW9kZSkgeworCQkJLyogMzIweDI0MCAqLworCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgbWkxMzEwX3NvY2luaXRRVkdBX0pQRyk7CisJCX0gZWxzZSB7CisJCQkvKiA2NDB4NDgwICovCisJCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTEzMTBfc29jaW5pdFZHQV9KUEcpOworCQl9CisJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMTMyMDoKKwkJR2FtbWFUID0gbWkxMzIwX2dhbW1hOworCQlNYXRyaXhUID0gbWkxMzIwX21hdHJpeDsKKwkJaWYgKG1vZGUpIHsKKwkJCS8qIDMyMHgyNDAgKi8KKwkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMyMF9pbml0UVZHQV9kYXRhKTsKKwkJfSBlbHNlIHsKKwkJCS8qIDY0MHg0ODAgKi8KKwkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMyMF9pbml0VkdBX2RhdGEpOworCQl9CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPMzEzME5DOgorCQlHYW1tYVQgPSBwbzMxMzBfZ2FtbWE7CisJCU1hdHJpeFQgPSBwbzMxMzBfbWF0cml4OworCQlpZiAobW9kZSkgeworCQkJLyogMzIweDI0MCAqLworCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX2luaXRRVkdBX2RhdGEpOworCQl9IGVsc2UgeworCQkJLyogNjQweDQ4MCAqLworCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX2luaXRWR0FfZGF0YSk7CisJCX0KKwkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX3J1bmRhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoRF9QUk9CRSwgIkRhbW5lZCAhISBubyBzZW5zb3IgZm91bmQgQnllIik7CisJCXJldHVybjsKKwl9CisJaWYgKEdhbW1hVCAmJiBNYXRyaXhUKSB7CisJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgR2FtbWFULCAxNywgMHhiODRhKTsKKwkJcHV0X3RhYl90b19yZWcoZ3NwY2FfZGV2LCBHYW1tYVQsIDE3LCAweGI4NWIpOworCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIEdhbW1hVCwgMTcsIDB4Yjg2Yyk7CisJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgTWF0cml4VCwgOSwgMHhiODJjKTsKKworCQkvKiBTZWVtIFNIQVJQTkVTUyAqLworCQkvKgorCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg4MCwgMHhiODBhKTsKKwkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YjgwYik7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGI4MGUpOworCQkqLworCQkvKiBhbGwgMHg0MCA/Pz8gZG8gbm90aGluZworCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg0MCwgMHhiODIyKTsKKwkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4NDAsIDB4YjgyMyk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDQwLCAweGI4MjQpOworCQkqLworCQkvKiBPbmx5IHdvcmtzIGZvciBIVjcxMzFSID8/CisJCXJlZ19yIChnc3BjYV9kZXYsIDB4YTEsIDB4Yjg4MSwgMSk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZlMDEsIDB4Yjg4MSk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDc5LCAweGI4MDEpOworCQkqLworCQkvKiBvbmx5IGh2NzEzMXIgZXQgb3Y3NjYwCisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDIwLCAweGI4MjcpOworCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiODI2KTsgKiBJU1BfR0FJTiA4MAorCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgyMywgMHhiODAwKTsgKiBJU1AgQ1RSTF9CQVMKKwkJKi8KKwkJLyogc2V0IHRoZSBsZWQgb24gMHgwODkyIDB4MDg5NiAqLworCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOworCQltc2xlZXAoMTAwKTsKKwkJc2V0cXVhbGl0eShnc3BjYV9kZXYpOworCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOworCQlzZXRsaWdodGZyZXEoZ3NwY2FfZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisKKwlyZWdfdyhkZXYsIDB4ODksIDB4ZmZmZiwgMHhmZmZmKTsKKwlyZWdfdyhkZXYsIDB4YTAsIDB4MDEsIDB4YjMwMSk7CisJcmVnX3coZGV2LCAweGEwLCAweDA5LCAweGIwMDMpOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCisJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IGNsb3NlIHRpbWUgKi8KK3N0YXRpYyB2b2lkIHNkX2Nsb3NlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKy8qCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlfX3U4IGJ1ZmZyZWFkOworCisJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJcmVnX3coZGV2LCAweGEwLCAweDAxLCAweGIzMDEpOworCXJlZ193KGRldiwgMHhhMCwgMHgwOSwgMHhiMzAzKTsKKwlyZWdfdyhkZXYsIDB4ODksIDB4ZmZmZiwgMHhmZmZmKTsKKyovCit9CisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLworCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikJCQkvKiBpc28gcGt0IGxlbmd0aCAqLworeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KSB7CisJCVBERUJVRyhEX1BBQ0ssCisJCQkidmMwMzJ4IGhlYWRlciBwYWNrZXQgZm91bmQgbGVuICVkIiwgbGVuKTsKKwkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCQlkYXRhLCAwKTsKKwkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgeworI2RlZmluZSBWQ0hEUlNaIDQ2CisJCQlkYXRhICs9IFZDSERSU1o7CisJCQlsZW4gLT0gVkNIRFJTWjsKKyN1bmRlZiBWQ0hEUlNaCisJCX0KKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCQlkYXRhLCBsZW4pOworCQlyZXR1cm47CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmF1dG9nYWluID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5hdXRvZ2FpbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5saWdodGZyZXEgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRsaWdodGZyZXEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmxpZ2h0ZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQoreworCXN3aXRjaCAobWVudS0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgorCQlzd2l0Y2ggKG1lbnUtPmluZGV4KSB7CisJCWNhc2UgMDoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIk5vRmxpa2VyIik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgPSBzZF9jdHJscywKKwkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkub3BlbiA9IHNkX29wZW4sCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCisJLmNsb3NlID0gc2RfY2xvc2UsCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworI2RlZmluZSBEVk5NKG5hbWUpIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkgbmFtZQorc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4OTIpLCBEVk5NKCJMb2dpdGVjaCBPcmJpY2FtIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwODk2KSwgRFZOTSgiTG9naXRlY2ggT3JiaWNhbSIpfSwKKwl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMyMSksIERWTk0oIlZpbWljcm8gZ2VuZXJpYyB2YzAzMjEiKX0sCisJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDAzMjMpLCBEVk5NKCJWaW1pY3JvIFZjMDMyMyIpfSwKKwl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMyOCksIERWTk0oIkE0VGVjaCBQSy0xMzBNRyIpfSwKKwl7VVNCX0RFVklDRSgweDBhYzgsIDB4YzAwMSksIERWTk0oIlNvbnkgZW1iZWRkZWQgdmltaWNybyIpfSwKKwl7VVNCX0RFVklDRSgweDBhYzgsIDB4YzAwMiksIERWTk0oIlNvbnkgZW1iZWRkZWQgdmltaWNybyIpfSwKKwl7VVNCX0RFVklDRSgweDE3ZWYsIDB4NDgwMiksIERWTk0oIkxlbm92byBWYzAzMjMrTUkxMzEwX1NPQyIpfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCisJCXJldHVybiAtMTsKKwlQREVCVUcoRF9QUk9CRSwgInYlcyByZWdpc3RlcmVkIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LXJlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC1yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTJlMDljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC1yZWcuaApAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIHpjMDMweCByZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKgorICogVGhlIHJlZ2lzdGVyIGFsaWFzZXMgdXNlZCBoZXJlIGNhbWUgZnJvbSB0aGlzIGRyaXZlcjoKKyAqCWh0dHA6Ly96YzAzMDIuc291cmNlZm9yZ2UubmV0L3pjMDMwMi5waHAKKyAqCisgKiBUaGlzIGNvZGUgaXMgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKKyAqLworCisvKiBEZWZpbmUgdGhlIHJlZ2lzdGVyIG1hcCAqLworI2RlZmluZSBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0wgICAgICAgMHgwMDAwCisjZGVmaW5lIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HICAgICAweDAwMDEKKworLyogUGljdHVyZSBzaXplICovCisjZGVmaW5lIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1QgICAgICAgICAweDAwMDIKKyNkZWZpbmUgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSCAgICAgIDB4MDAwMworI2RlZmluZSBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1cgICAgICAgMHgwMDA0CisjZGVmaW5lIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIICAgICAweDAwMDUKKyNkZWZpbmUgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPVyAgICAgIDB4MDAwNgorCisvKiBKUEVHIGNvbnRyb2wgKi8KKyNkZWZpbmUgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkcgICAgICAgIDB4MDAwOAorCisvKiBUZXN0IG1vZGUgKi8KKyNkZWZpbmUgWkMzWFhfUjAwQl9URVNUTU9ERUNPTlRST0wgICAgIDB4MDAwYgorCisvKiBGcmFtZSByZXRyZWl2aW5nICovCisjZGVmaW5lIFpDM1hYX1IwMENfTEFTVEFDUVRJTUUgICAgICAgICAweDAwMGMKKyNkZWZpbmUgWkMzWFhfUjAwRF9NT05JVE9SUkVTICAgICAgICAgIDB4MDAwZAorI2RlZmluZSBaQzNYWF9SMDBFX1RJTUVTVEFNUEhJR0ggICAgICAgMHgwMDBlCisjZGVmaW5lIFpDM1hYX1IwMEZfVElNRVNUQU1QTE9XICAgICAgICAweDAwMGYKKyNkZWZpbmUgWkMzWFhfUjAxOF9GUkFNRUxPU1QgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFMgICAgICAgMHgwMDE5CisjZGVmaW5lIFpDM1hYX1IwMUFfTEFTVEZSQU1FU1RBVEUgICAgICAweDAwMWEKKyNkZWZpbmUgWkMzWFhfUjAyNV9EQVRBQ09VTlRFUiAgICAgICAgIDB4MDAyNQorCisvKiBTdHJlYW0gYW5kIHNlbnNvciBzcGVjaWZpYyAqLworI2RlZmluZSBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1QgICAgMHgwMDEwCisjZGVmaW5lIFpDM1hYX1IwMTFfVklERU9TVEFUVVMgICAgICAgICAweDAwMTEKKyNkZWZpbmUgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DICAgIDB4MDAxMgorCisvKiBIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzeW5jaHJvcyAqLworI2RlZmluZSBaQzNYWF9SMDFEX0hTWU5DXzAgICAgICAgICAgICAgMHgwMDFkCisjZGVmaW5lIFpDM1hYX1IwMUVfSFNZTkNfMSAgICAgICAgICAgICAweDAwMWUKKyNkZWZpbmUgWkMzWFhfUjAxRl9IU1lOQ18yICAgICAgICAgICAgIDB4MDAxZgorI2RlZmluZSBaQzNYWF9SMDIwX0hTWU5DXzMgICAgICAgICAgICAgMHgwMDIwCisKKy8qIFRhcmdldCBwaWN0dXJlIHNpemUgaW4gYnl0ZSAqLworI2RlZmluZSBaQzNYWF9SMDIyX1RBUkdFVFBJQ1RTSVpFXzAgICAgMHgwMDIyCisjZGVmaW5lIFpDM1hYX1IwMjNfVEFSR0VUUElDVFNJWkVfMSAgICAweDAwMjMKKyNkZWZpbmUgWkMzWFhfUjAyNF9UQVJHRVRQSUNUU0laRV8yICAgIDB4MDAyNAorCisvKiBBdWRpbyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgWkMzWFhfUjAzMF9BVURJT0FEQyAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBaQzNYWF9SMDMxX0FVRElPU1RSRUFNU1RBVFVTICAgMHgwMDMxCisjZGVmaW5lIFpDM1hYX1IwMzJfQVVESU9TVEFUVVMgICAgICAgICAweDAwMzIKKworLyogU2Vuc29yIGludGVyZmFjZSAqLworI2RlZmluZSBaQzNYWF9SMDgwX0hCTEFOS0hJR0ggICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFpDM1hYX1IwODFfSEJMQU5LTE9XICAgICAgICAgICAweDAwODEKKyNkZWZpbmUgWkMzWFhfUjA4Ml9SRVNFVExFVkVMQUREUiAgICAgIDB4MDA4MgorI2RlZmluZSBaQzNYWF9SMDgzX1JHQUlOQUREUiAgICAgICAgICAgMHgwMDgzCisjZGVmaW5lIFpDM1hYX1IwODRfR0dBSU5BRERSICAgICAgICAgICAweDAwODQKKyNkZWZpbmUgWkMzWFhfUjA4NV9CR0FJTkFERFIgICAgICAgICAgIDB4MDA4NQorI2RlZmluZSBaQzNYWF9SMDg2X0VYUFRJTUVISUdIICAgICAgICAgMHgwMDg2CisjZGVmaW5lIFpDM1hYX1IwODdfRVhQVElNRU1JRCAgICAgICAgICAweDAwODcKKyNkZWZpbmUgWkMzWFhfUjA4OF9FWFBUSU1FTE9XICAgICAgICAgIDB4MDA4OAorI2RlZmluZSBaQzNYWF9SMDg5X1JFU0VUQkxBQ0tISUdIICAgICAgMHgwMDg5CisjZGVmaW5lIFpDM1hYX1IwOEFfUkVTRVRXSElURUhJR0ggICAgICAweDAwOGEKKyNkZWZpbmUgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSICAgICAgIDB4MDA4YgorI2RlZmluZSBaQzNYWF9SMDhDX0kyQ0lETEVBTkROQUNLICAgICAgMHgwMDhjCisjZGVmaW5lIFpDM1hYX1IwOERfQ09NUEFCSUxJVFlNT0RFICAgICAweDAwOGQKKyNkZWZpbmUgWkMzWFhfUjA4RV9DT01QQUJJTElUWU1PREUyICAgIDB4MDA4ZQorCisvKiBJMkMgY29udHJvbCAqLworI2RlZmluZSBaQzNYWF9SMDkwX0kyQ0NPTU1BTkQgICAgICAgICAgMHgwMDkwCisjZGVmaW5lIFpDM1hYX1IwOTFfSTJDU1RBVFVTICAgICAgICAgICAweDAwOTEKKyNkZWZpbmUgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUICAgIDB4MDA5MgorI2RlZmluZSBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFICAgICAgICAgMHgwMDkzCisjZGVmaW5lIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0sgICAgICAgICAweDAwOTQKKyNkZWZpbmUgWkMzWFhfUjA5NV9JMkNSRUFEICAgICAgICAgICAgIDB4MDA5NQorI2RlZmluZSBaQzNYWF9SMDk2X0kyQ1JFQURBQ0sgICAgICAgICAgMHgwMDk2CisKKy8qIFdpbmRvdyBpbnNpZGUgdGhlIHNlbnNvciBhcnJheSAqLworI2RlZmluZSBaQzNYWF9SMDk3X1dJTllTVEFSVEhJR0ggICAgICAgMHgwMDk3CisjZGVmaW5lIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XICAgICAgICAweDAwOTgKKyNkZWZpbmUgWkMzWFhfUjA5OV9XSU5YU1RBUlRISUdIICAgICAgIDB4MDA5OQorI2RlZmluZSBaQzNYWF9SMDlBX1dJTlhTVEFSVExPVyAgICAgICAgMHgwMDlhCisjZGVmaW5lIFpDM1hYX1IwOUJfV0lOSEVJR0hUSElHSCAgICAgICAweDAwOWIKKyNkZWZpbmUgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1cgICAgICAgIDB4MDA5YworI2RlZmluZSBaQzNYWF9SMDlEX1dJTldJRFRISElHSCAgICAgICAgMHgwMDlkCisjZGVmaW5lIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1cgICAgICAgICAweDAwOWUKKyNkZWZpbmUgWkMzWFhfUjExOV9GSVJTVFlISUdIICAgICAgICAgIDB4MDExOQorI2RlZmluZSBaQzNYWF9SMTFBX0ZJUlNUWUxPVyAgICAgICAgICAgMHgwMTFhCisjZGVmaW5lIFpDM1hYX1IxMUJfRklSU1RYSElHSCAgICAgICAgICAweDAxMWIKKyNkZWZpbmUgWkMzWFhfUjExQ19GSVJTVFhMT1cgICAgICAgICAgIDB4MDExYworCisvKiBNYXggc2Vuc29yIGFycmF5IHNpemUgKi8KKyNkZWZpbmUgWkMzWFhfUjA5Rl9NQVhYSElHSCAgICAgICAgICAgIDB4MDA5ZgorI2RlZmluZSBaQzNYWF9SMEEwX01BWFhMT1cgICAgICAgICAgICAgMHgwMGEwCisjZGVmaW5lIFpDM1hYX1IwQTFfTUFYWUhJR0ggICAgICAgICAgICAweDAwYTEKKyNkZWZpbmUgWkMzWFhfUjBBMl9NQVhZTE9XICAgICAgICAgICAgIDB4MDBhMgorI2RlZmluZSBaQzNYWF9SMEEzX0VYUE9TVVJFVElNRUhJR0ggICAgMHgwMGEzCisjZGVmaW5lIFpDM1hYX1IwQTRfRVhQT1NVUkVUSU1FTE9XICAgICAweDAwYTQKKyNkZWZpbmUgWkMzWFhfUjBBNV9FWFBPU1VSRUdBSU4gICAgICAgIDB4MDBhNQorI2RlZmluZSBaQzNYWF9SMEE2X0VYUE9TVVJFQkxBQ0tMVkwgICAgMHgwMGE2CisKKy8qIE90aGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBaQzNYWF9SMTAwX09QRVJBVElPTk1PREUgICAgICAgMHgwMTAwCisjZGVmaW5lIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTiAgICAweDAxMDEKKworLyogR2FpbnMgKi8KKyNkZWZpbmUgWkMzWFhfUjExNl9SR0FJTiAgICAgICAgICAgICAgIDB4MDExNgorI2RlZmluZSBaQzNYWF9SMTE3X0dHQUlOICAgICAgICAgICAgICAgMHgwMTE3CisjZGVmaW5lIFpDM1hYX1IxMThfQkdBSU4gICAgICAgICAgICAgICAweDAxMTgKKyNkZWZpbmUgWkMzWFhfUjExRF9HTE9CQUxHQUlOICAgICAgICAgIDB4MDExZAorI2RlZmluZSBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOICAgICAgICAgMHgwMWE4CisjZGVmaW5lIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRiAgICAweDAxYTkKKyNkZWZpbmUgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVAgICAgIDB4MDFhYQorCisvKiBBdXRvIGNvcnJlY3Rpb24gKi8KKyNkZWZpbmUgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRSAgIDB4MDE4MAorI2RlZmluZSBaQzNYWF9SMTgxX1dJTlhTVEFSVCAgICAgICAgICAgMHgwMTgxCisjZGVmaW5lIFpDM1hYX1IxODJfV0lOWFdJRFRIICAgICAgICAgICAweDAxODIKKyNkZWZpbmUgWkMzWFhfUjE4M19XSU5YQ0VOVEVSICAgICAgICAgIDB4MDE4MworI2RlZmluZSBaQzNYWF9SMTg0X1dJTllTVEFSVCAgICAgICAgICAgMHgwMTg0CisjZGVmaW5lIFpDM1hYX1IxODVfV0lOWVdJRFRIICAgICAgICAgICAweDAxODUKKyNkZWZpbmUgWkMzWFhfUjE4Nl9XSU5ZQ0VOVEVSICAgICAgICAgIDB4MDE4NgorCisvKiBHYWluIHJhbmdlICovCisjZGVmaW5lIFpDM1hYX1IxODdfTUFYR0FJTiAgICAgICAgICAgICAweDAxODcKKyNkZWZpbmUgWkMzWFhfUjE4OF9NSU5HQUlOICAgICAgICAgICAgIDB4MDE4OAorCisvKiBBdXRvIGV4cG9zdXJlIGFuZCB3aGl0ZSBiYWxhbmNlICovCisjZGVmaW5lIFpDM1hYX1IxODlfQVdCU1RBVFVTICAgICAgICAgICAweDAxODkKKyNkZWZpbmUgWkMzWFhfUjE4QV9BV0JGUkVFWkUgICAgICAgICAgIDB4MDE4YQorI2RlZmluZSBaQzNYWF9SMThCX0FFU1RBVFVTICAgICAgICAgICAgMHgwMThiCisjZGVmaW5lIFpDM1hYX1IxOENfQUVGUkVFWkUgICAgICAgICAgICAweDAxOGMKKyNkZWZpbmUgWkMzWFhfUjE4Rl9BRVVORlJFRVpFICAgICAgICAgIDB4MDE4ZgorI2RlZmluZSBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIICAgMHgwMTkwCisjZGVmaW5lIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRCAgICAweDAxOTEKKyNkZWZpbmUgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XICAgIDB4MDE5MgorI2RlZmluZSBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSCAgICAgMHgwMTk1CisjZGVmaW5lIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUQgICAgICAweDAxOTYKKyNkZWZpbmUgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPVyAgICAgIDB4MDE5NworCisvKiBXaGF0IGlzIHRoaXMgPyAqLworI2RlZmluZSBaQzNYWF9SMThEX1lUQVJHRVQgICAgICAgICAgICAgMHgwMThkCisjZGVmaW5lIFpDM1hYX1IxOEVfUkVTRVRMVkwgICAgICAgICAgICAweDAxOGUKKworLyogQ29sb3IgKi8KKyNkZWZpbmUgWkMzWFhfUjFBMF9SRURNRUFOQUZURVJBR0MgICAgIDB4MDFhMAorI2RlZmluZSBaQzNYWF9SMUExX0dSRUVOTUVBTkFGVEVSQUdDICAgMHgwMWExCisjZGVmaW5lIFpDM1hYX1IxQTJfQkxVRU1FQU5BRlRFUkFHQyAgICAweDAxYTIKKyNkZWZpbmUgWkMzWFhfUjFBM19SRURNRUFOQUZURVJBV0IgICAgIDB4MDFhMworI2RlZmluZSBaQzNYWF9SMUE0X0dSRUVOTUVBTkFGVEVSQVdCICAgMHgwMWE0CisjZGVmaW5lIFpDM1hYX1IxQTVfQkxVRU1FQU5BRlRFUkFXQiAgICAweDAxYTUKKyNkZWZpbmUgWkMzWFhfUjFBNl9ZTUVBTkFGVEVSQUUgICAgICAgIDB4MDFhNgorI2RlZmluZSBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOICAgICAgMHgwMWE3CisKKyNkZWZpbmUgWkMzWFhfUjFBMl9CTFVFTUVBTkFGVEVSQUdDICAgIDB4MDFhMgorCisvKiBNYXRyaXhlcyAqLworCisvKiBDb2xvciBtYXRyaXggaXMgbGlrZSA6CisgICBSJyA9IFIgKiBSR0IwMCArIEcgKiBSR0IwMSArIEIgKiBSR0IwMiArIFJHQjAzCisgICBHJyA9IFIgKiBSR0IxMCArIEcgKiBSR0IxMSArIEIgKiBSR0IyMiArIFJHQjEzCisgICBCJyA9IFIgKiBSR0IyMCArIEcgKiBSR0IyMSArIEIgKiBSR0IxMiArIFJHQjIzCisgKi8KKyNkZWZpbmUgWkMzWFhfUjEwQV9SR0IwMCAgICAgICAgICAgICAgIDB4MDEwYQorI2RlZmluZSBaQzNYWF9SMTBCX1JHQjAxICAgICAgICAgICAgICAgMHgwMTBiCisjZGVmaW5lIFpDM1hYX1IxMENfUkdCMDIgICAgICAgICAgICAgICAweDAxMGMKKyNkZWZpbmUgWkMzWFhfUjExM19SR0IwMyAgICAgICAgICAgICAgIDB4MDExMworI2RlZmluZSBaQzNYWF9SMTBEX1JHQjEwICAgICAgICAgICAgICAgMHgwMTBkCisjZGVmaW5lIFpDM1hYX1IxMEVfUkdCMTEgICAgICAgICAgICAgICAweDAxMGUKKyNkZWZpbmUgWkMzWFhfUjEwRl9SR0IxMiAgICAgICAgICAgICAgIDB4MDEwZgorI2RlZmluZSBaQzNYWF9SMTE0X1JHQjEzICAgICAgICAgICAgICAgMHgwMTE0CisjZGVmaW5lIFpDM1hYX1IxMTBfUkdCMjAgICAgICAgICAgICAgICAweDAxMTAKKyNkZWZpbmUgWkMzWFhfUjExMV9SR0IyMSAgICAgICAgICAgICAgIDB4MDExMQorI2RlZmluZSBaQzNYWF9SMTEyX1JHQjIyICAgICAgICAgICAgICAgMHgwMTEyCisjZGVmaW5lIFpDM1hYX1IxMTVfUkdCMjMgICAgICAgICAgICAgICAweDAxMTUKKworLyogR2FtbWEgbWF0cml4ICovCisjZGVmaW5lIFpDM1hYX1IxMjBfR0FNTUEwMCAgICAgICAgICAgICAweDAxMjAKKyNkZWZpbmUgWkMzWFhfUjEyMV9HQU1NQTAxICAgICAgICAgICAgIDB4MDEyMQorI2RlZmluZSBaQzNYWF9SMTIyX0dBTU1BMDIgICAgICAgICAgICAgMHgwMTIyCisjZGVmaW5lIFpDM1hYX1IxMjNfR0FNTUEwMyAgICAgICAgICAgICAweDAxMjMKKyNkZWZpbmUgWkMzWFhfUjEyNF9HQU1NQTA0ICAgICAgICAgICAgIDB4MDEyNAorI2RlZmluZSBaQzNYWF9SMTI1X0dBTU1BMDUgICAgICAgICAgICAgMHgwMTI1CisjZGVmaW5lIFpDM1hYX1IxMjZfR0FNTUEwNiAgICAgICAgICAgICAweDAxMjYKKyNkZWZpbmUgWkMzWFhfUjEyN19HQU1NQTA3ICAgICAgICAgICAgIDB4MDEyNworI2RlZmluZSBaQzNYWF9SMTI4X0dBTU1BMDggICAgICAgICAgICAgMHgwMTI4CisjZGVmaW5lIFpDM1hYX1IxMjlfR0FNTUEwOSAgICAgICAgICAgICAweDAxMjkKKyNkZWZpbmUgWkMzWFhfUjEyQV9HQU1NQTBBICAgICAgICAgICAgIDB4MDEyYQorI2RlZmluZSBaQzNYWF9SMTJCX0dBTU1BMEIgICAgICAgICAgICAgMHgwMTJiCisjZGVmaW5lIFpDM1hYX1IxMkNfR0FNTUEwQyAgICAgICAgICAgICAweDAxMmMKKyNkZWZpbmUgWkMzWFhfUjEyRF9HQU1NQTBEICAgICAgICAgICAgIDB4MDEyZAorI2RlZmluZSBaQzNYWF9SMTJFX0dBTU1BMEUgICAgICAgICAgICAgMHgwMTJlCisjZGVmaW5lIFpDM1hYX1IxMkZfR0FNTUEwRiAgICAgICAgICAgICAweDAxMmYKKyNkZWZpbmUgWkMzWFhfUjEzMF9HQU1NQTEwICAgICAgICAgICAgIDB4MDEzMAorI2RlZmluZSBaQzNYWF9SMTMxX0dBTU1BMTEgICAgICAgICAgICAgMHgwMTMxCisjZGVmaW5lIFpDM1hYX1IxMzJfR0FNTUExMiAgICAgICAgICAgICAweDAxMzIKKyNkZWZpbmUgWkMzWFhfUjEzM19HQU1NQTEzICAgICAgICAgICAgIDB4MDEzMworI2RlZmluZSBaQzNYWF9SMTM0X0dBTU1BMTQgICAgICAgICAgICAgMHgwMTM0CisjZGVmaW5lIFpDM1hYX1IxMzVfR0FNTUExNSAgICAgICAgICAgICAweDAxMzUKKyNkZWZpbmUgWkMzWFhfUjEzNl9HQU1NQTE2ICAgICAgICAgICAgIDB4MDEzNgorI2RlZmluZSBaQzNYWF9SMTM3X0dBTU1BMTcgICAgICAgICAgICAgMHgwMTM3CisjZGVmaW5lIFpDM1hYX1IxMzhfR0FNTUExOCAgICAgICAgICAgICAweDAxMzgKKyNkZWZpbmUgWkMzWFhfUjEzOV9HQU1NQTE5ICAgICAgICAgICAgIDB4MDEzOQorI2RlZmluZSBaQzNYWF9SMTNBX0dBTU1BMUEgICAgICAgICAgICAgMHgwMTNhCisjZGVmaW5lIFpDM1hYX1IxM0JfR0FNTUExQiAgICAgICAgICAgICAweDAxM2IKKyNkZWZpbmUgWkMzWFhfUjEzQ19HQU1NQTFDICAgICAgICAgICAgIDB4MDEzYworI2RlZmluZSBaQzNYWF9SMTNEX0dBTU1BMUQgICAgICAgICAgICAgMHgwMTNkCisjZGVmaW5lIFpDM1hYX1IxM0VfR0FNTUExRSAgICAgICAgICAgICAweDAxM2UKKyNkZWZpbmUgWkMzWFhfUjEzRl9HQU1NQTFGICAgICAgICAgICAgIDB4MDEzZgorCisvKiBMdW1pbmFuY2UgZ2FtbWEgKi8KKyNkZWZpbmUgWkMzWFhfUjE0MF9ZR0FNTUEwMCAgICAgICAgICAgIDB4MDE0MAorI2RlZmluZSBaQzNYWF9SMTQxX1lHQU1NQTAxICAgICAgICAgICAgMHgwMTQxCisjZGVmaW5lIFpDM1hYX1IxNDJfWUdBTU1BMDIgICAgICAgICAgICAweDAxNDIKKyNkZWZpbmUgWkMzWFhfUjE0M19ZR0FNTUEwMyAgICAgICAgICAgIDB4MDE0MworI2RlZmluZSBaQzNYWF9SMTQ0X1lHQU1NQTA0ICAgICAgICAgICAgMHgwMTQ0CisjZGVmaW5lIFpDM1hYX1IxNDVfWUdBTU1BMDUgICAgICAgICAgICAweDAxNDUKKyNkZWZpbmUgWkMzWFhfUjE0Nl9ZR0FNTUEwNiAgICAgICAgICAgIDB4MDE0NgorI2RlZmluZSBaQzNYWF9SMTQ3X1lHQU1NQTA3ICAgICAgICAgICAgMHgwMTQ3CisjZGVmaW5lIFpDM1hYX1IxNDhfWUdBTU1BMDggICAgICAgICAgICAweDAxNDgKKyNkZWZpbmUgWkMzWFhfUjE0OV9ZR0FNTUEwOSAgICAgICAgICAgIDB4MDE0OQorI2RlZmluZSBaQzNYWF9SMTRBX1lHQU1NQTBBICAgICAgICAgICAgMHgwMTRhCisjZGVmaW5lIFpDM1hYX1IxNEJfWUdBTU1BMEIgICAgICAgICAgICAweDAxNGIKKyNkZWZpbmUgWkMzWFhfUjE0Q19ZR0FNTUEwQyAgICAgICAgICAgIDB4MDE0YworI2RlZmluZSBaQzNYWF9SMTREX1lHQU1NQTBEICAgICAgICAgICAgMHgwMTRkCisjZGVmaW5lIFpDM1hYX1IxNEVfWUdBTU1BMEUgICAgICAgICAgICAweDAxNGUKKyNkZWZpbmUgWkMzWFhfUjE0Rl9ZR0FNTUEwRiAgICAgICAgICAgIDB4MDE0ZgorI2RlZmluZSBaQzNYWF9SMTUwX1lHQU1NQTEwICAgICAgICAgICAgMHgwMTUwCisjZGVmaW5lIFpDM1hYX1IxNTFfWUdBTU1BMTEgICAgICAgICAgICAweDAxNTEKKworI2RlZmluZSBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREUgICAgICAgMHgwMWM1CisjZGVmaW5lIFpDM1hYX1IxQzZfU0hBUlBORVNTMDAgICAgICAgICAweDAxYzYKKyNkZWZpbmUgWkMzWFhfUjFDN19TSEFSUE5FU1MwMSAgICAgICAgIDB4MDFjNworI2RlZmluZSBaQzNYWF9SMUM4X1NIQVJQTkVTUzAyICAgICAgICAgMHgwMWM4CisjZGVmaW5lIFpDM1hYX1IxQzlfU0hBUlBORVNTMDMgICAgICAgICAweDAxYzkKKyNkZWZpbmUgWkMzWFhfUjFDQV9TSEFSUE5FU1MwNCAgICAgICAgIDB4MDFjYQorI2RlZmluZSBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1ICAgICAgICAgMHgwMWNiCisKKy8qIFN5bmNocm9uaXphdGlvbiAqLworI2RlZmluZSBaQzNYWF9SMTkwX1NZTkMwMExPVyAgICAgICAgICAgMHgwMTkwCisjZGVmaW5lIFpDM1hYX1IxOTFfU1lOQzAwTUlEICAgICAgICAgICAweDAxOTEKKyNkZWZpbmUgWkMzWFhfUjE5Ml9TWU5DMDBISUdIICAgICAgICAgIDB4MDE5MgorI2RlZmluZSBaQzNYWF9SMTk1X1NZTkMwMUxPVyAgICAgICAgICAgMHgwMTk1CisjZGVmaW5lIFpDM1hYX1IxOTZfU1lOQzAxTUlEICAgICAgICAgICAweDAxOTYKKyNkZWZpbmUgWkMzWFhfUjE5N19TWU5DMDFISUdIICAgICAgICAgIDB4MDE5NworCisvKiBEZWFkIHBpeGVscyAqLworI2RlZmluZSBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFICAgICAgMHgwMjUwCisKKy8qIEVFUFJPTSAqLworI2RlZmluZSBaQzNYWF9SMzAwX0VFUFJPTUNPTkZJRyAgICAgICAgMHgwMzAwCisjZGVmaW5lIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTICAgICAgICAweDAzMDEKKyNkZWZpbmUgWkMzWFhfUjMwMl9FRVBST01TVEFUVVMgICAgICAgIDB4MDMwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NjFiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTAsMCArMSw3NjIzIEBACisvKgorICoJWi1TdGFyL1ZpbWljcm8gemMzMDEvemMzMDJwL3ZjMzB4IGxpYnJhcnkKKyAqCUNvcHlyaWdodCAoQykgMjAwNCAyMDA1IDIwMDYgTWljaGVsIFhoYWFyZAorICoJCW14aGFhcmRAbWFnaWMuZnIKKyAqCisgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAiemMzeHgiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCAxLCA3KQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0gIjIuMS43IjsKKworTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LCAiCisJCSJTZXJnZSBBLiBTdWNoa292IDxTZXJnZS5BLlNAdG9jaGthLnJ1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQSBaQzAzeHgvVkMzeHggVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBmb3JjZV9zZW5zb3IgPSAtMTsKKworI2luY2x1ZGUgImpwZWcuaCIKKyNpbmNsdWRlICJ6YzN4eC1yZWcuaCIKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCV9fdTggYnJpZ2h0bmVzczsKKwlfX3U4IGNvbnRyYXN0OworCV9fdTggZ2FtbWE7CisJX191OCBhdXRvZ2FpbjsKKwlfX3U4IGxpZ2h0ZnJlcTsKKwlfX3U4IHNoYXJwbmVzczsKKworCWNoYXIgcWluZGV4OworCWNoYXIgc2Vuc29yOwkJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KKy8qICEhIHZhbHVlcyB1c2VkIGluIGRpZmZlcmVudCB0YWJsZXMgKi8KKyNkZWZpbmUgU0VOU09SX0NTMjEwMiAwCisjZGVmaW5lIFNFTlNPUl9DUzIxMDJLIDEKKyNkZWZpbmUgU0VOU09SX0dDMDMwNSAyCisjZGVmaW5lIFNFTlNPUl9IRENTMjAyMCAzCisjZGVmaW5lIFNFTlNPUl9IRENTMjAyMGIgNAorI2RlZmluZSBTRU5TT1JfSFY3MTMxQiA1CisjZGVmaW5lIFNFTlNPUl9IVjcxMzFDIDYKKyNkZWZpbmUgU0VOU09SX0lDTTEwNUEgNworI2RlZmluZSBTRU5TT1JfTUM1MDFDQiA4CisjZGVmaW5lIFNFTlNPUl9PVjc2MjAgOQorLyojZGVmaW5lIFNFTlNPUl9PVjc2NDggOSAtIHNhbWUgdmFsdWVzICovCisjZGVmaW5lIFNFTlNPUl9PVjc2MzBDIDEwCisjZGVmaW5lIFNFTlNPUl9QQVMxMDYgMTEKKyNkZWZpbmUgU0VOU09SX1BCMDMzMCAxMgorI2RlZmluZSBTRU5TT1JfUE8yMDMwIDEzCisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ0sgMTQKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggMTUKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxNgorI2RlZmluZSBTRU5TT1JfTUFYIDE3CisJdW5zaWduZWQgc2hvcnQgY2hpcF9yZXZpc2lvbjsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworI2RlZmluZSBTRF9CUklHSFRORVNTIDAKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMTI4LAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJfSwKKyNkZWZpbmUgU0RfQ09OVFJBU1QgMQorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NiwKKwkJLnN0ZXAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEyOCwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKyNkZWZpbmUgU0RfR0FNTUEgMgorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBTU1BLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkdhbW1hIiwKKwkJLm1pbmltdW0gPSAxLAorCQkubWF4aW11bSA9IDYsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSA0LAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Z2FtbWEsCisJICAgIC5nZXQgPSBzZF9nZXRnYW1tYSwKKwl9LAorI2RlZmluZSBTRF9BVVRPR0FJTiAzCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgICAgPSAiQXV0byBHYWluIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCisJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKKwl9LAorI2RlZmluZSBTRF9GUkVRIDQKKwl7CisJICAgIHsKKwkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCS5uYW1lICAgID0gIkxpZ2h0IGZyZXF1ZW5jeSBmaWx0ZXIiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMiwJLyogMDogMCwgMTogNTBIeiwgMjo2MEh6ICovCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0ZnJlcSwKKwkgICAgLmdldCA9IHNkX2dldGZyZXEsCisJfSwKKyNkZWZpbmUgU0RfU0hBUlBORVNTIDUKKwl7CisJICAgIHsKKwkJLmlkCSA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTaGFycG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMywKKwkJLnN0ZXAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDIsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRzaGFycG5lc3MsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE3NiwKKwkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDF9LAorCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogdXNiIGV4Y2hhbmdlcyAqLworc3RydWN0IHVzYl9hY3Rpb24geworCV9fdTgJcmVxOworCV9fdTgJdmFsOworCV9fdTE2CWlkeDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFtdID0geworCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMDgwX0hCTEFOS0hJR0h9LAorCXsweGEwLCAweDIxLCBaQzNYWF9SMDgxX0hCTEFOS0xPV30sCisJezB4YTAsIDB4MzAsIFpDM1hYX1IwODNfUkdBSU5BRERSfSwKKwl7MHhhMCwgMHgzMSwgWkMzWFhfUjA4NF9HR0FJTkFERFJ9LAorCXsweGEwLCAweDMyLCBaQzNYWF9SMDg1X0JHQUlOQUREUn0sCisJezB4YTAsIDB4MjMsIFpDM1hYX1IwODZfRVhQVElNRUhJR0h9LAorCXsweGEwLCAweDI0LCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAorCXsweGEwLCAweDI1LCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAorCXsweGEwLCAweGIzLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIDAwICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YWEsIDB4MDIsIDB4MDAwOH0sCisJezB4YWEsIDB4MDMsIDB4MDAwMH0sCisJezB4YWEsIDB4MTEsIDB4MDAwMH0sCisJezB4YWEsIDB4MTIsIDB4MDA4OX0sCisJezB4YWEsIDB4MTMsIDB4MDAwMH0sCisJezB4YWEsIDB4MTQsIDB4MDBlOX0sCisJezB4YWEsIDB4MjAsIDB4MDAwMH0sCisJezB4YWEsIDB4MjIsIDB4MDAwMH0sCisJezB4YWEsIDB4MGIsIDB4MDAwNH0sCisJezB4YWEsIDB4MzAsIDB4MDAzMH0sCisJezB4YWEsIDB4MzEsIDB4MDAzMH0sCisJezB4YWEsIDB4MzIsIDB4MDAzMH0sCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MTAsIDB4MDFhZX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4NjgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCisJezB4YTEsIDB4MDEsIDB4MDAwMn0sCisJezB4YTEsIDB4MDEsIDB4MDAwOH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogMDAgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgNSAqLworCXsweGEwLCAweDQ0LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAorCXsweGEwLCAweDY0LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAorCXsweGEwLCAweDg0LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAorCXsweGEwLCAweDlkLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAorCXsweGEwLCAweGIyLCBaQzNYWF9SMTI1X0dBTU1BMDV9LAorCXsweGEwLCAweGM0LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAorCXsweGEwLCAweGQzLCBaQzNYWF9SMTI3X0dBTU1BMDd9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMTI4X0dBTU1BMDh9LAorCXsweGEwLCAweGViLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAorCXsweGEwLCAweGZiLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJDX0dBTU1BMEN9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJEX0dBTU1BMER9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAorCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAorCXsweGEwLCAweDBlLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTNDX0dBTU1BMUN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTNEX0dBTU1BMUR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YWEsIDB4MjMsIDB4MDAwMX0sCisJezB4YWEsIDB4MjQsIDB4MDA1NX0sCisJezB4YWEsIDB4MjUsIDB4MDBjY30sCisJezB4YWEsIDB4MjEsIDB4MDAzZn0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweGFiLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDk4LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MzAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweGQ0LCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHgzOSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHg3MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhiMCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMThfQkdBSU59LAorCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX0luaXRpYWxTY2FsZVtdID0geworCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMDgwX0hCTEFOS0hJR0h9LAorCXsweGEwLCAweDIxLCBaQzNYWF9SMDgxX0hCTEFOS0xPV30sCisJezB4YTAsIDB4MzAsIFpDM1hYX1IwODNfUkdBSU5BRERSfSwKKwl7MHhhMCwgMHgzMSwgWkMzWFhfUjA4NF9HR0FJTkFERFJ9LAorCXsweGEwLCAweDMyLCBaQzNYWF9SMDg1X0JHQUlOQUREUn0sCisJezB4YTAsIDB4MjMsIFpDM1hYX1IwODZfRVhQVElNRUhJR0h9LAorCXsweGEwLCAweDI0LCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAorCXsweGEwLCAweDI1LCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAorCXsweGEwLCAweGIzLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIDAwICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YWEsIDB4MDIsIDB4MDAwOH0sCisJezB4YWEsIDB4MDMsIDB4MDAwMH0sCisJezB4YWEsIDB4MTEsIDB4MDAwMX0sCisJezB4YWEsIDB4MTIsIDB4MDA4N30sCisJezB4YWEsIDB4MTMsIDB4MDAwMX0sCisJezB4YWEsIDB4MTQsIDB4MDBlN30sCisJezB4YWEsIDB4MjAsIDB4MDAwMH0sCisJezB4YWEsIDB4MjIsIDB4MDAwMH0sCisJezB4YWEsIDB4MGIsIDB4MDAwNH0sCisJezB4YWEsIDB4MzAsIDB4MDAzMH0sCisJezB4YWEsIDB4MzEsIDB4MDAzMH0sCisJezB4YWEsIDB4MzIsIDB4MDAzMH0sCisJezB4YTAsIDB4NzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MTUsIDB4MDFhZX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4NjgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCisJezB4YTEsIDB4MDEsIDB4MDAwMn0sCisJezB4YTEsIDB4MDEsIDB4MDAwOH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogMDAgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgNSAqLworCXsweGEwLCAweDQ0LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAorCXsweGEwLCAweDY0LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAorCXsweGEwLCAweDg0LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAorCXsweGEwLCAweDlkLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAorCXsweGEwLCAweGIyLCBaQzNYWF9SMTI1X0dBTU1BMDV9LAorCXsweGEwLCAweGM0LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAorCXsweGEwLCAweGQzLCBaQzNYWF9SMTI3X0dBTU1BMDd9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMTI4X0dBTU1BMDh9LAorCXsweGEwLCAweGViLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAorCXsweGEwLCAweGZiLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJDX0dBTU1BMEN9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJEX0dBTU1BMER9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAorCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAorCXsweGEwLCAweDBlLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTNDX0dBTU1BMUN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTNEX0dBTU1BMUR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YWEsIDB4MjMsIDB4MDAwMH0sCisJezB4YWEsIDB4MjQsIDB4MDBhYX0sCisJezB4YWEsIDB4MjUsIDB4MDBlNn0sCisJezB4YWEsIDB4MjEsIDB4MDAzZn0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDU1LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweGNjLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDZhLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHgzZiwgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHhhNSwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhmMCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMThfQkdBSU59LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl81MEhaW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YWEsIDB4MGYsIDB4MDA4Y30sIC8qIDAwLDBmLDhjLGFhICovCisJezB4YWEsIDB4MDMsIDB4MDAwNX0sIC8qIDAwLDAzLDA1LGFhICovCisJezB4YWEsIDB4MDQsIDB4MDBhY30sIC8qIDAwLDA0LGFjLGFhICovCisJezB4YWEsIDB4MTAsIDB4MDAwNX0sIC8qIDAwLDEwLDA1LGFhICovCisJezB4YWEsIDB4MTEsIDB4MDBhY30sIC8qIDAwLDExLGFjLGFhICovCisJezB4YWEsIDB4MWIsIDB4MDAwMH0sIC8qIDAwLDFiLDAwLGFhICovCisJezB4YWEsIDB4MWMsIDB4MDAwNX0sIC8qIDAwLDFjLDA1LGFhICovCisJezB4YWEsIDB4MWQsIDB4MDBhY30sIC8qIDAwLDFkLGFjLGFhICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDNmLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwzZixjYyAqLworCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MixmMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDQyLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsNDIsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDEwLGNjICovCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMjQsY2MgKi8KKwl7MHhhMCwgMHg4YywgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsOGMsY2MgKi8KKwl7MHhhMCwgMHhiMCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsYjAsY2MgKi8KKwl7MHhhMCwgMHhkMCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsZDAsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNTBIWlNjYWxlW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YWEsIDB4MGYsIDB4MDA5M30sIC8qIDAwLDBmLDkzLGFhICovCisJezB4YWEsIDB4MDMsIDB4MDAwNX0sIC8qIDAwLDAzLDA1LGFhICovCisJezB4YWEsIDB4MDQsIDB4MDBhMX0sIC8qIDAwLDA0LGExLGFhICovCisJezB4YWEsIDB4MTAsIDB4MDAwNX0sIC8qIDAwLDEwLDA1LGFhICovCisJezB4YWEsIDB4MTEsIDB4MDBhMX0sIC8qIDAwLDExLGExLGFhICovCisJezB4YWEsIDB4MWIsIDB4MDAwMH0sIC8qIDAwLDFiLDAwLGFhICovCisJezB4YWEsIDB4MWMsIDB4MDAwNX0sIC8qIDAwLDFjLDA1LGFhICovCisJezB4YWEsIDB4MWQsIDB4MDBhMX0sIC8qIDAwLDFkLGExLGFhICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDNmLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwzZixjYyAqLworCXsweGEwLCAweGY3LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MixmNyxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDgzLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsODMsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDEwLGNjICovCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMjQsY2MgKi8KKwl7MHhhMCwgMHg5MywgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsOTMsY2MgKi8KKwl7MHhhMCwgMHhiMCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsYjAsY2MgKi8KKwl7MHhhMCwgMHhkMCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsZDAsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNjBIWltdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLworCXsweGFhLCAweDBmLCAweDAwNWR9LCAvKiAwMCwwZiw1ZCxhYSAqLworCXsweGFhLCAweDAzLCAweDAwMDV9LCAvKiAwMCwwMywwNSxhYSAqLworCXsweGFhLCAweDA0LCAweDAwYWF9LCAvKiAwMCwwNCxhYSxhYSAqLworCXsweGFhLCAweDEwLCAweDAwMDV9LCAvKiAwMCwxMCwwNSxhYSAqLworCXsweGFhLCAweDExLCAweDAwYWF9LCAvKiAwMCwxMSxhYSxhYSAqLworCXsweGFhLCAweDFiLCAweDAwMDB9LCAvKiAwMCwxYiwwMCxhYSAqLworCXsweGFhLCAweDFjLCAweDAwMDV9LCAvKiAwMCwxYywwNSxhYSAqLworCXsweGFhLCAweDFkLCAweDAwYWF9LCAvKiAwMCwxZCxhYSxhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgzZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsM2YsY2MgKi8KKwl7MHhhMCwgMHhlNCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsZTQsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHgzYSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDNhLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LCAvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LCAvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwxMCxjYyAqLworCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sIC8qIDAxLGFhLDI0LGNjICovCisJezB4YTAsIDB4NWQsIFpDM1hYX1IwMURfSFNZTkNfMH0sIC8qIDAwLDFkLDVkLGNjICovCisJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sIC8qIDAwLDFlLDkwLGNjICovCisJezB4YTAsIDB4ZDAsIDB4MDBjOH0sIC8qIDAwLGM4LGQwLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzYwSFpTY2FsZVtdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLworCXsweGFhLCAweDBmLCAweDAwYjd9LCAvKiAwMCwwZixiNyxhYSAqLworCXsweGFhLCAweDAzLCAweDAwMDV9LCAvKiAwMCwwMywwNSxhYSAqLworCXsweGFhLCAweDA0LCAweDAwYmV9LCAvKiAwMCwwNCxiZSxhYSAqLworCXsweGFhLCAweDEwLCAweDAwMDV9LCAvKiAwMCwxMCwwNSxhYSAqLworCXsweGFhLCAweDExLCAweDAwYmV9LCAvKiAwMCwxMSxiZSxhYSAqLworCXsweGFhLCAweDFiLCAweDAwMDB9LCAvKiAwMCwxYiwwMCxhYSAqLworCXsweGFhLCAweDFjLCAweDAwMDV9LCAvKiAwMCwxYywwNSxhYSAqLworCXsweGFhLCAweDFkLCAweDAwYmV9LCAvKiAwMCwxZCxiZSxhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgzZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsM2YsY2MgKi8KKwl7MHhhMCwgMHhmYywgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsZmMsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHg2OSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDY5LGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LCAvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LCAvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwxMCxjYyAqLworCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sIC8qIDAxLGFhLDI0LGNjICovCisJezB4YTAsIDB4YjcsIFpDM1hYX1IwMURfSFNZTkNfMH0sIC8qIDAwLDFkLGI3LGNjICovCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sIC8qIDAwLDFlLGQwLGNjICovCisJezB4YTAsIDB4ZTgsIFpDM1hYX1IwMUZfSFNZTkNfMn0sIC8qIDAwLDFmLGU4LGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX05vRmxpa2VyW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YWEsIDB4MGYsIDB4MDA1OX0sIC8qIDAwLDBmLDU5LGFhICovCisJezB4YWEsIDB4MDMsIDB4MDAwNX0sIC8qIDAwLDAzLDA1LGFhICovCisJezB4YWEsIDB4MDQsIDB4MDA4MH0sIC8qIDAwLDA0LDgwLGFhICovCisJezB4YWEsIDB4MTAsIDB4MDAwNX0sIC8qIDAwLDEwLDA1LGFhICovCisJezB4YWEsIDB4MTEsIDB4MDA4MH0sIC8qIDAwLDExLDgwLGFhICovCisJezB4YWEsIDB4MWIsIDB4MDAwMH0sIC8qIDAwLDFiLDAwLGFhICovCisJezB4YWEsIDB4MWMsIDB4MDAwNX0sIC8qIDAwLDFjLDA1LGFhICovCisJezB4YWEsIDB4MWQsIDB4MDA4MH0sIC8qIDAwLDFkLDgwLGFhICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDNmLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwzZixjYyAqLworCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MixmMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsMTAsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHg1OSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsNTksY2MgKi8KKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsOTAsY2MgKi8KKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsYzgsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJTY2FsZVtdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLworCXsweGFhLCAweDBmLCAweDAwNTl9LCAvKiAwMCwwZiw1OSxhYSAqLworCXsweGFhLCAweDAzLCAweDAwMDV9LCAvKiAwMCwwMywwNSxhYSAqLworCXsweGFhLCAweDA0LCAweDAwODB9LCAvKiAwMCwwNCw4MCxhYSAqLworCXsweGFhLCAweDEwLCAweDAwMDV9LCAvKiAwMCwxMCwwNSxhYSAqLworCXsweGFhLCAweDExLCAweDAwODB9LCAvKiAwMCwxMSw4MCxhYSAqLworCXsweGFhLCAweDFiLCAweDAwMDB9LCAvKiAwMCwxYiwwMCxhYSAqLworCXsweGFhLCAweDFjLCAweDAwMDV9LCAvKiAwMCwxYywwNSxhYSAqLworCXsweGFhLCAweDFkLCAweDAwODB9LCAvKiAwMCwxZCw4MCxhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgzZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsM2YsY2MgKi8KKwl7MHhhMCwgMHhmMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsZjAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDEwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LCAvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LCAvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sIC8qIDAxLGFhLDAwLGNjICovCisJezB4YTAsIDB4NTksIFpDM1hYX1IwMURfSFNZTkNfMH0sIC8qIDAwLDFkLDU5LGNjICovCisJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sIC8qIDAwLDFlLDkwLGNjICovCisJezB4YTAsIDB4YzgsIFpDM1hYX1IwMUZfSFNZTkNfMn0sIC8qIDAwLDFmLGM4LGNjICovCisJe30KK307CisKKy8qIENTMjEwMl9LT0NPTSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMktfSW5pdGlhbFtdID0geworCXsweGEwLCAweDExLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4ZTgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCisJezB4YTAsIDB4NTUsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4N2MsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHhhMywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweGZiLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MGUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxMiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE1LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTYsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxNywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4NzgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCisJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCisJezB4YTAsIDB4MDEsIDB4MDFiMX0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCisJezB4YTAsIDB4NGMsIFpDM1hYX1IxMThfQkdBSU59LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgNCAqLworCXsweGEwLCAweDM4LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAorCXsweGEwLCAweDU5LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAorCXsweGEwLCAweDc5LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAorCXsweGEwLCAweDkyLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAorCXsweGEwLCAweGE3LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAorCXsweGEwLCAweGI5LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAorCXsweGEwLCAweGM4LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAorCXsweGEwLCAweGQ0LCBaQzNYWF9SMTI4X0dBTU1BMDh9LAorCXsweGEwLCAweGRmLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAorCXsweGEwLCAweGU3LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAorCXsweGEwLCAweGVlLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTJDX0dBTU1BMEN9LAorCXsweGEwLCAweGY5LCBaQzNYWF9SMTJEX0dBTU1BMER9LAorCXsweGEwLCAweGZjLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAorCXsweGEwLCAweDI2LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAorCXsweGEwLCAweDIyLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAorCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMTNDX0dBTU1BMUN9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTNEX0dBTU1BMUR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgyMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE0LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgyMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgyMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwQTNfRVhQT1NVUkVUSU1FSElHSH0sCisJezB4YTAsIDB4MjIsIFpDM1hYX1IwQTRfRVhQT1NVUkVUSU1FTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4ZWUsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4M2EsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKKwl7MHhhMCwgMHgyOCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweDBmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweDE5LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweDFmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKKwl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MjEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4NWMsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDVjLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDIxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDk2LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg5NiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE0LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMktfSW5pdGlhbFNjYWxlW10gPSB7CisJezB4YTAsIDB4MTEsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4ZTgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCisJezB4YTAsIDB4NTUsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4N2IsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHhhMywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweGZiLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MGUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxMiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE1LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTYsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxNywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4NzgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCisJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCisJezB4YTAsIDB4MDEsIDB4MDFiMX0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCisJezB4YTAsIDB4NGMsIFpDM1hYX1IxMThfQkdBSU59LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgNCAqLworCXsweGEwLCAweDM4LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAorCXsweGEwLCAweDU5LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAorCXsweGEwLCAweDc5LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAorCXsweGEwLCAweDkyLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAorCXsweGEwLCAweGE3LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAorCXsweGEwLCAweGI5LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAorCXsweGEwLCAweGM4LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAorCXsweGEwLCAweGQ0LCBaQzNYWF9SMTI4X0dBTU1BMDh9LAorCXsweGEwLCAweGRmLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAorCXsweGEwLCAweGU3LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAorCXsweGEwLCAweGVlLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTJDX0dBTU1BMEN9LAorCXsweGEwLCAweGY5LCBaQzNYWF9SMTJEX0dBTU1BMER9LAorCXsweGEwLCAweGZjLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAorCXsweGEwLCAweDI2LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAorCXsweGEwLCAweDIyLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAorCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMTNDX0dBTU1BMUN9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTNEX0dBTU1BMUR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgyMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE0LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgyMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgyMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwQTNfRVhQT1NVUkVUSU1FSElHSH0sCisJezB4YTAsIDB4MjIsIFpDM1hYX1IwQTRfRVhQT1NVUkVUSU1FTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4ZWUsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4M2EsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKKwl7MHhhMCwgMHgyOCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweDBmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweDE5LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweDFmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKKwl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAorCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKKwl7MHhhMCwgMHg1NSwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDBBLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MEIsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwQywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg3YiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDBELCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweEEzLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4ZmIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDksIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwRSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDBmLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDEyLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxNiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE3LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDBDLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHhmNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHg3OCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKKwl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKKwl7MHhhMCwgMHgwMSwgMHgwMWIxfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKKwl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogY2xvY2sgPyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMUM2X1NIQVJQTkVTUzAwfSwJLyogc2hhcnBuZXNzKyAqLworCXsweGEwLCAweDBmLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogc2hhcnBuZXNzLSAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMTIwX0dBTU1BMDB9LAkvKiBnYW1tYSA0ICovCisJezB4YTAsIDB4MzgsIFpDM1hYX1IxMjFfR0FNTUEwMX0sCisJezB4YTAsIDB4NTksIFpDM1hYX1IxMjJfR0FNTUEwMn0sCisJezB4YTAsIDB4NzksIFpDM1hYX1IxMjNfR0FNTUEwM30sCisJezB4YTAsIDB4OTIsIFpDM1hYX1IxMjRfR0FNTUEwNH0sCisJezB4YTAsIDB4YTcsIFpDM1hYX1IxMjVfR0FNTUEwNX0sCisJezB4YTAsIDB4YjksIFpDM1hYX1IxMjZfR0FNTUEwNn0sCisJezB4YTAsIDB4YzgsIFpDM1hYX1IxMjdfR0FNTUEwN30sCisJezB4YTAsIDB4ZDQsIFpDM1hYX1IxMjhfR0FNTUEwOH0sCisJezB4YTAsIDB4ZGYsIFpDM1hYX1IxMjlfR0FNTUEwOX0sCisJezB4YTAsIDB4ZTcsIFpDM1hYX1IxMkFfR0FNTUEwQX0sCisJezB4YTAsIDB4ZWUsIFpDM1hYX1IxMkJfR0FNTUEwQn0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMkNfR0FNTUEwQ30sCisJezB4YTAsIDB4ZjksIFpDM1hYX1IxMkRfR0FNTUEwRH0sCisJezB4YTAsIDB4ZmMsIFpDM1hYX1IxMkVfR0FNTUEwRX0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkZfR0FNTUEwRn0sCisJezB4YTAsIDB4MjYsIFpDM1hYX1IxMzBfR0FNTUExMH0sCisJezB4YTAsIDB4MjIsIFpDM1hYX1IxMzFfR0FNTUExMX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxMzJfR0FNTUExMn0sCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxMzNfR0FNTUExM30sCisJezB4YTAsIDB4MTYsIFpDM1hYX1IxMzRfR0FNTUExNH0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxMzVfR0FNTUExNX0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxMzZfR0FNTUExNn0sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMzdfR0FNTUExN30sCisJezB4YTAsIDB4MGIsIFpDM1hYX1IxMzhfR0FNTUExOH0sCisJezB4YTAsIDB4MDksIFpDM1hYX1IxMzlfR0FNTUExOX0sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxM0FfR0FNTUExQX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxM0JfR0FNTUExQn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IxM0NfR0FNTUExQ30sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxM0RfR0FNTUExRH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxM0VfR0FNTUExRX0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxM0ZfR0FNTUExRn0sCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwQl9SR0IwMX0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMENfUkdCMDJ9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBEX1JHQjEwfSwKKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjEwRV9SR0IxMX0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEZfUkdCMTJ9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTEwX1JHQjIwfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMV9SR0IyMX0sCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMTJfUkdCMjJ9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDIyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDIxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDIyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwKKwl7MHhhMCwgMHgyMiwgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHhlZSwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHgzYSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDBjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDI4LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4MTksIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4MWYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAorCXsweGEwLCAweDRjLCBaQzNYWF9SMTE4X0JHQUlOfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgyMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg1YywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4NWMsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxNCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MjEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4OTYsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDk2LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MjEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweGQwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MjEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDBhLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDIxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDQ0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg0NCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE0LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgyMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg3ZSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4N2UsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxNCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gZ2MwMzA1X0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkvKiAwMCwwMCwwMSxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIDAwLDA4LDAzLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkvKiAwMCwwMiwwNCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwJLyogMDAsMDMsMDIsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwJLyogMDAsMDQsODAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAkvKiAwMCwwNSwwMSxjYyAqLworCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwJLyogMDAsMDYsZTAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAkvKiAwMCwwMSwwMSxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMyxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMSxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCS8qIDAwLDk4LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwJLyogMDAsOWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAkvKiAwMSwxYSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCS8qIDAxLDFjLDAwLGNjICovCisJezB4YTAsIDB4ZTYsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwJLyogMDAsOWMsZTYsY2MgKi8KKwl7MHhhMCwgMHg4NiwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCS8qIDAwLDllLDg2LGNjICovCisJezB4YTAsIDB4OTgsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCS8qIDAwLDhiLDk4LGNjICovCisJezB4YWEsIDB4MTMsIDB4MDAwMn0sCS8qIDAwLDEzLDAyLGFhICovCisJezB4YWEsIDB4MTUsIDB4MDAwM30sCS8qIDAwLDE1LDAzLGFhICovCisJezB4YWEsIDB4MDEsIDB4MDAwMH0sCS8qIDAwLDAxLDAwLGFhICovCisJezB4YWEsIDB4MDIsIDB4MDAwMH0sCS8qIDAwLDAyLDAwLGFhICovCisJezB4YWEsIDB4MWEsIDB4MDAwMH0sCS8qIDAwLDFhLDAwLGFhICovCisJezB4YWEsIDB4MWMsIDB4MDAxN30sCS8qIDAwLDFjLDE3LGFhICovCisJezB4YWEsIDB4MWQsIDB4MDA4MH0sCS8qIDAwLDFkLDgwLGFhICovCisJezB4YWEsIDB4MWYsIDB4MDAwOH0sCS8qIDAwLDFmLDA4LGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAxMn0sCS8qIDAwLDIxLDEyLGFhICovCisJezB4YTAsIDB4ODIsIFpDM1hYX1IwODZfRVhQVElNRUhJR0h9LAkvKiAwMCw4Niw4MixjYyAqLworCXsweGEwLCAweDgzLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkvKiAwMCw4Nyw4MyxjYyAqLworCXsweGEwLCAweDg0LCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkvKiAwMCw4OCw4NCxjYyAqLworCXsweGFhLCAweDA1LCAweDAwMDB9LAkvKiAwMCwwNSwwMCxhYSAqLworCXsweGFhLCAweDBhLCAweDAwMDB9LAkvKiAwMCwwYSwwMCxhYSAqLworCXsweGFhLCAweDBiLCAweDAwYjB9LAkvKiAwMCwwYixiMCxhYSAqLworCXsweGFhLCAweDBjLCAweDAwMDB9LAkvKiAwMCwwYywwMCxhYSAqLworCXsweGFhLCAweDBkLCAweDAwYjB9LAkvKiAwMCwwZCxiMCxhYSAqLworCXsweGFhLCAweDBlLCAweDAwMDB9LAkvKiAwMCwwZSwwMCxhYSAqLworCXsweGFhLCAweDBmLCAweDAwYjB9LAkvKiAwMCwwZixiMCxhYSAqLworCXsweGFhLCAweDEwLCAweDAwMDB9LAkvKiAwMCwxMCwwMCxhYSAqLworCXsweGFhLCAweDExLCAweDAwYjB9LAkvKiAwMCwxMSxiMCxhYSAqLworCXsweGFhLCAweDE2LCAweDAwMDF9LAkvKiAwMCwxNiwwMSxhYSAqLworCXsweGFhLCAweDE3LCAweDAwZTZ9LAkvKiAwMCwxNyxlNixhYSAqLworCXsweGFhLCAweDE4LCAweDAwMDJ9LAkvKiAwMCwxOCwwMixhYSAqLworCXsweGFhLCAweDE5LCAweDAwODZ9LAkvKiAwMCwxOSw4NixhYSAqLworCXsweGFhLCAweDIwLCAweDAwMDB9LAkvKiAwMCwyMCwwMCxhYSAqLworCXsweGFhLCAweDFiLCAweDAwMjB9LAkvKiAwMCwxYiwyMCxhYSAqLworCXsweGEwLCAweGI3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAkvKiAwMSwwMSxiNyxjYyAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwNSxjYyAqLworCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkvKiAwMSwwMCwwZCxjYyAqLworCXsweGEwLCAweDc2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCS8qIDAxLDg5LDc2LGNjICovCisJezB4YTAsIDB4MDksIDB4MDFhZH0sCS8qIDAxLGFkLDA5LGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCS8qIDAxLGM1LDAzLGNjICovCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiAwMSxjYiwxMyxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwJLyogMDIsNTAsMDgsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAkvKiAwMywwMSwwOCxjYyAqLworCXsweGEwLCAweDYwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwJLyogMDEsYTgsNjAsY2MgKi8KKwl7MHhhMCwgMHg4NSwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwJLyogMDEsOGQsODUsY2MgKi8KKwl7MHhhMCwgMHgwMCwgMHgwMTFlfSwJLyogMDEsMWUsMDAsY2MgKi8KKwl7MHhhMCwgMHg1MiwgWkMzWFhfUjExNl9SR0FJTn0sCS8qIDAxLDE2LDUyLGNjICovCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAkvKiAwMSwxNyw0MCxjYyAqLworCXsweGEwLCAweDUyLCBaQzNYWF9SMTE4X0JHQUlOfSwJLyogMDEsMTgsNTIsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjExM19SR0IwM30sCS8qIDAxLDEzLDAzLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gZ2MwMzA1X0luaXRpYWxTY2FsZVtdID0geyAvKiAzMjB4MjQwICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCS8qIDAwLDAwLDAxLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogMDAsMDgsMDMsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCS8qIDAwLDAyLDEwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAkvKiAwMCwwMywwMixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAkvKiAwMCwwNCw4MCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCS8qIDAwLDA1LDAxLGNjICovCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAkvKiAwMCwwNixlMCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCS8qIDAwLDAxLDAxLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAzLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAxLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwJLyogMDAsOTgsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAkvKiAwMCw5YSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCS8qIDAxLDFhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwJLyogMDEsMWMsMDAsY2MgKi8KKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAkvKiAwMCw5YyxlOCxjYyAqLworCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwJLyogMDAsOWUsODgsY2MgKi8KKwl7MHhhMCwgMHg5OCwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJLyogMDAsOGIsOTgsY2MgKi8KKwl7MHhhYSwgMHgxMywgMHgwMDAwfSwJLyogMDAsMTMsMDAsYWEgKi8KKwl7MHhhYSwgMHgxNSwgMHgwMDAxfSwJLyogMDAsMTUsMDEsYWEgKi8KKwl7MHhhYSwgMHgwMSwgMHgwMDAwfSwJLyogMDAsMDEsMDAsYWEgKi8KKwl7MHhhYSwgMHgwMiwgMHgwMDAwfSwJLyogMDAsMDIsMDAsYWEgKi8KKwl7MHhhYSwgMHgxYSwgMHgwMDAwfSwJLyogMDAsMWEsMDAsYWEgKi8KKwl7MHhhYSwgMHgxYywgMHgwMDE3fSwJLyogMDAsMWMsMTcsYWEgKi8KKwl7MHhhYSwgMHgxZCwgMHgwMDgwfSwJLyogMDAsMWQsODAsYWEgKi8KKwl7MHhhYSwgMHgxZiwgMHgwMDA4fSwJLyogMDAsMWYsMDgsYWEgKi8KKwl7MHhhYSwgMHgyMSwgMHgwMDEyfSwJLyogMDAsMjEsMTIsYWEgKi8KKwl7MHhhMCwgMHg4MiwgWkMzWFhfUjA4Nl9FWFBUSU1FSElHSH0sCS8qIDAwLDg2LDgyLGNjICovCisJezB4YTAsIDB4ODMsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCS8qIDAwLDg3LDgzLGNjICovCisJezB4YTAsIDB4ODQsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCS8qIDAwLDg4LDg0LGNjICovCisJezB4YWEsIDB4MDUsIDB4MDAwMH0sCS8qIDAwLDA1LDAwLGFhICovCisJezB4YWEsIDB4MGEsIDB4MDAwMH0sCS8qIDAwLDBhLDAwLGFhICovCisJezB4YWEsIDB4MGIsIDB4MDBiMH0sCS8qIDAwLDBiLGIwLGFhICovCisJezB4YWEsIDB4MGMsIDB4MDAwMH0sCS8qIDAwLDBjLDAwLGFhICovCisJezB4YWEsIDB4MGQsIDB4MDBiMH0sCS8qIDAwLDBkLGIwLGFhICovCisJezB4YWEsIDB4MGUsIDB4MDAwMH0sCS8qIDAwLDBlLDAwLGFhICovCisJezB4YWEsIDB4MGYsIDB4MDBiMH0sCS8qIDAwLDBmLGIwLGFhICovCisJezB4YWEsIDB4MTAsIDB4MDAwMH0sCS8qIDAwLDEwLDAwLGFhICovCisJezB4YWEsIDB4MTEsIDB4MDBiMH0sCS8qIDAwLDExLGIwLGFhICovCisJezB4YWEsIDB4MTYsIDB4MDAwMX0sCS8qIDAwLDE2LDAxLGFhICovCisJezB4YWEsIDB4MTcsIDB4MDBlOH0sCS8qIDAwLDE3LGU4LGFhICovCisJezB4YWEsIDB4MTgsIDB4MDAwMn0sCS8qIDAwLDE4LDAyLGFhICovCisJezB4YWEsIDB4MTksIDB4MDA4OH0sCS8qIDAwLDE5LDg4LGFhICovCisJezB4YWEsIDB4MjAsIDB4MDAwMH0sCS8qIDAwLDIwLDAwLGFhICovCisJezB4YWEsIDB4MWIsIDB4MDAyMH0sCS8qIDAwLDFiLDIwLGFhICovCisJezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCS8qIDAxLDAxLGI3LGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDA1LGNjICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCS8qIDAxLDAwLDBkLGNjICovCisJezB4YTAsIDB4NzYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJLyogMDEsODksNzYsY2MgKi8KKwl7MHhhMCwgMHgwOSwgMHgwMWFkfSwJLyogMDEsYWQsMDksY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwJLyogMDEsYzUsMDMsY2MgKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIDAxLGNiLDEzLGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAkvKiAwMiw1MCwwOCxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCS8qIDAzLDAxLDA4LGNjICovCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAkvKiAwMSxhOCw2MCxjYyAqLworCXsweGEwLCAweDAwLCAweDAxMWV9LAkvKiAwMSwxZSwwMCxjYyAqLworCXsweGEwLCAweDUyLCBaQzNYWF9SMTE2X1JHQUlOfSwJLyogMDEsMTYsNTIsY2MgKi8KKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCS8qIDAxLDE3LDQwLGNjICovCisJezB4YTAsIDB4NTIsIFpDM1hYX1IxMThfQkdBSU59LAkvKiAwMSwxOCw1MixjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMTEzX1JHQjAzfSwJLyogMDEsMTMsMDMsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBnYzAzMDVfNTBIWltdID0geworCXsweGFhLCAweDgyLCAweDAwMDB9LAkvKiAwMCw4MiwwMCxhYSAqLworCXsweGFhLCAweDgzLCAweDAwMDJ9LAkvKiAwMCw4MywwMixhYSAqLworCXsweGFhLCAweDg0LCAweDAwMzh9LAkvKiAwMCw4NCwzOCxhYSAqLwkvKiB3aW46IDAwLDg0LGVjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDBiLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwYixjYyAqLworCXsweGEwLCAweDE4LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MiwxOCxjYyAqLworCQkJCQkJCS8qIHdpbjogMDEsOTIsMTAgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHg4ZSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDhlLGNjICovCisJCQkJCQkJLyogd2luOiAwMSw5NyxlYyAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJLyogMDEsOGMsMGUsY2MgKi8KKwl7MHhhMCwgMHgxNSwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJLyogMDEsOGYsMTUsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTAsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLworCXsweGEwLCAweDYyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkvKiAwMCwxZCw2MixjYyAqLworCXsweGEwLCAweDkwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkvKiAwMCwxZSw5MCxjYyAqLworCXsweGEwLCAweGM4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkvKiAwMCwxZixjOCxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkvKiAwMCwyMCxmZixjYyAqLworCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAkvKiAwMSwxZCw2MCxjYyAqLworCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwJLyogMDEsODAsNDIsY2MgKi8KKy8qCXsweGEwLCAweDg1LCBaQzNYWF9SMThEX1lUQVJHRVR9LAkgKiAwMSw4ZCw4NSxjYyAqCisJCQkJCQkgKiBpZiA2NDB4NDgwICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gZ2MwMzA1XzYwSFpbXSA9IHsKKwl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJLyogMDAsODIsMDAsYWEgKi8KKwl7MHhhYSwgMHg4MywgMHgwMDAwfSwJLyogMDAsODMsMDAsYWEgKi8KKwl7MHhhYSwgMHg4NCwgMHgwMGVjfSwJLyogMDAsODQsZWMsYWEgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MGIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDBiLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLDEwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4ZWMsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5NyxlYyxjYyAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJLyogMDEsOGMsMGUsY2MgKi8KKwl7MHhhMCwgMHgxNSwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJLyogMDEsOGYsMTUsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTAsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLworCXsweGEwLCAweDYyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkvKiAwMCwxZCw2MixjYyAqLworCXsweGEwLCAweDkwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkvKiAwMCwxZSw5MCxjYyAqLworCXsweGEwLCAweGM4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkvKiAwMCwxZixjOCxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkvKiAwMCwyMCxmZixjYyAqLworCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAkvKiAwMSwxZCw2MCxjYyAqLworCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwJLyogMDEsODAsNDIsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwJLyogMDEsOGQsODAsY2MgKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGdjMDMwNV9Ob0ZsaWtlcltdID0geworCXsweGEwLCAweDBjLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkvKiAwMSwwMCwwYyxjYyAqLworCXsweGFhLCAweDgyLCAweDAwMDB9LAkvKiAwMCw4MiwwMCxhYSAqLworCXsweGFhLCAweDgzLCAweDAwMDB9LAkvKiAwMCw4MywwMCxhYSAqLworCXsweGFhLCAweDg0LCAweDAwMjB9LAkvKiAwMCw4NCwyMCxhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMDAsY2MgKi8KKwl7MHhhMCwgMHg0OCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsNDgsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDEwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkvKiAwMSw4YywwZSxjYyAqLworCXsweGEwLCAweDE1LCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkvKiAwMSw4ZiwxNSxjYyAqLworCXsweGEwLCAweDYyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkvKiAwMCwxZCw2MixjYyAqLworCXsweGEwLCAweDkwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkvKiAwMCwxZSw5MCxjYyAqLworCXsweGEwLCAweGM4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkvKiAwMCwxZixjOCxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkvKiAwMCwyMCxmZixjYyAqLworCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAkvKiAwMSwxZCw2MCxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwJLyogMDEsODAsMDMsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwJLyogMDEsOGQsODAsY2MgKi8KKwl7fQorfTsKKworLyogcGxheSBwb2tlciB3aXRoIHJlZ2lzdGVycyBhdCB5b3VyIG93biByaXNrICEhICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaGRjczIwMjB4eF9Jbml0aWFsW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCQkJCQkJLyogRDAgPz8gRTAgZGlkIG5vdCBzdGFydCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwOERfQ09NUEFCSUxJVFlNT0RFfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDlCX1dJTkhFSUdIVEhJR0h9LAorCXsweGEwLCAweGQ4LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOURfV0lOV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCisJezB4YWEsIDB4MDIsIDB4MDAwMn0sCisJezB4YWEsIDB4MDcsIDB4MDAwNn0sCisJezB4YWEsIDB4MDgsIDB4MDAwMn0sCisJezB4YWEsIDB4MDksIDB4MDAwNn0sCisJezB4YWEsIDB4MGEsIDB4MDAwMX0sCisJezB4YWEsIDB4MGIsIDB4MDAwMX0sCisJezB4YWEsIDB4MGMsIDB4MDAwOH0sCisJezB4YWEsIDB4MGQsIDB4MDAwMH0sCisJezB4YWEsIDB4MTAsIDB4MDAwMH0sCisJezB4YWEsIDB4MTIsIDB4MDAwNX0sCisJezB4YWEsIDB4MTMsIDB4MDA2M30sCisJezB4YWEsIDB4MTUsIDB4MDA3MH0sCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTEsIDB4MDEsIDB4MDAwMn0sCisJezB4YTEsIDB4MDEsIDB4MDAwOH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogY2xvY2sgPyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMUM2X1NIQVJQTkVTUzAwfSwJLyogc2hhcnBuZXNzKyAqLworCXsweGExLCAweDAxLCAweDAxYzh9LAorCXsweGExLCAweDAxLCAweDAxYzl9LAorCXsweGExLCAweDAxLCAweDAxY2F9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogc2hhcnBuZXNzLSAqLworCXsweGEwLCAweDExLCBaQzNYWF9SMTIwX0dBTU1BMDB9LAkvKiBnYW1tYSB+NCAqLworCXsweGEwLCAweDM3LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAorCXsweGEwLCAweDc5LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAorCXsweGEwLCAweDkxLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAorCXsweGEwLCAweGE2LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAorCXsweGEwLCAweGI4LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAorCXsweGEwLCAweGM3LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAorCXsweGEwLCAweGQzLCBaQzNYWF9SMTI4X0dBTU1BMDh9LAorCXsweGEwLCAweGRlLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAorCXsweGEwLCAweGU2LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAorCXsweGEwLCAweGVkLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAorCXsweGEwLCAweGYzLCBaQzNYWF9SMTJDX0dBTU1BMEN9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTJEX0dBTU1BMER9LAorCXsweGEwLCAweGZiLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAorCXsweGEwLCAweDI2LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAorCXsweGEwLCAweDIzLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAorCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMTNDX0dBTU1BMUN9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTNEX0dBTU1BMUR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAorCisJezB4YTAsIDB4NGMsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KKwl7MHhhMCwgMHhmNSwgWkMzWFhfUjEwQl9SR0IwMX0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IxMENfUkdCMDJ9LAorCXsweGEwLCAweGY5LCBaQzNYWF9SMTBEX1JHQjEwfSwKKwl7MHhhMCwgMHg1MSwgWkMzWFhfUjEwRV9SR0IxMX0sCisJezB4YTAsIDB4ZjUsIFpDM1hYX1IxMEZfUkdCMTJ9LAorCXsweGEwLCAweGZiLCBaQzNYWF9SMTEwX1JHQjIwfSwKKwl7MHhhMCwgMHhlZCwgWkMzWFhfUjExMV9SR0IyMX0sCisJezB4YTAsIDB4NWYsIFpDM1hYX1IxMTJfUkdCMjJ9LAorCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAorCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAorCXsweGFhLCAweDIwLCAweDAwMDR9LAorCXsweGFhLCAweDIxLCAweDAwM2R9LAorCXsweGFhLCAweDAzLCAweDAwNDF9LAorCXsweGFhLCAweDA0LCAweDAwMTB9LAorCXsweGFhLCAweDA1LCAweDAwM2R9LAorCXsweGFhLCAweDBlLCAweDAwMDF9LAorCXsweGFhLCAweDBmLCAweDAwMDB9LAorCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDNkLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDliLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4NDEsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4NmYsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4YWQsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCisJezB4YTAsIDB4MGUsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGExLCAweDAxLCAweDAxOTV9LAorCXsweGExLCAweDAxLCAweDAxOTZ9LAorCXsweGExLCAweDAxLCAweDAxOTd9LAorCXsweGEwLCAweDNkLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHgxZCwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAorCXsweGEwLCAweDg1LCBaQzNYWF9SMTE4X0JHQUlOfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTE2fSwKKwl7MHhhMSwgMHgwMSwgMHgwMTE4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MWQsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKKwl7MHhhMCwgMHg4NSwgWkMzWFhfUjExOF9CR0FJTn0sCisJezB4YTEsIDB4MDEsIDB4MDExNn0sCisJezB4YTEsIDB4MDEsIDB4MDExOH0sCisvKgl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LCAqLworCXsweGEwLCAweDAwLCAweDAwMDd9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaGRjczIwMjB4eF9Jbml0aWFsU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAorCXsweGEwLCAweDBlLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjA4RF9DT01QQUJJTElUWU1PREV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOUJfV0lOSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTYsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5RF9XSU5XSURUSEhJR0h9LAorCXsweGEwLCAweDg2LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKKwl7MHhhYSwgMHgwMiwgMHgwMDAyfSwKKwl7MHhhYSwgMHgwNywgMHgwMDA2fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAyfSwKKwl7MHhhYSwgMHgwOSwgMHgwMDA2fSwKKwl7MHhhYSwgMHgwYSwgMHgwMDAxfSwKKwl7MHhhYSwgMHgwYiwgMHgwMDAxfSwKKwl7MHhhYSwgMHgwYywgMHgwMDA4fSwKKwl7MHhhYSwgMHgwZCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgxMCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgxMiwgMHgwMDA1fSwKKwl7MHhhYSwgMHgxMywgMHgwMDYzfSwKKwl7MHhhYSwgMHgxNSwgMHgwMDcwfSwKKwl7MHhhMCwgMHhiNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAorCXsweGEwLCAweDAwLCAweDAxYWR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMCwgMHg3MCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDAyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBjbG9jayA/ICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCisJezB4YTEsIDB4MDEsIDB4MDFjOH0sCisJezB4YTEsIDB4MDEsIDB4MDFjOX0sCisJezB4YTEsIDB4MDEsIDB4MDFjYX0sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCisJezB4YTAsIDB4MTEsIFpDM1hYX1IxMjBfR0FNTUEwMH0sCS8qIGdhbW1hIH40Ki8KKwl7MHhhMCwgMHgzNywgWkMzWFhfUjEyMV9HQU1NQTAxfSwKKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjEyMl9HQU1NQTAyfSwKKwl7MHhhMCwgMHg3OSwgWkMzWFhfUjEyM19HQU1NQTAzfSwKKwl7MHhhMCwgMHg5MSwgWkMzWFhfUjEyNF9HQU1NQTA0fSwKKwl7MHhhMCwgMHhhNiwgWkMzWFhfUjEyNV9HQU1NQTA1fSwKKwl7MHhhMCwgMHhiOCwgWkMzWFhfUjEyNl9HQU1NQTA2fSwKKwl7MHhhMCwgMHhjNywgWkMzWFhfUjEyN19HQU1NQTA3fSwKKwl7MHhhMCwgMHhkMywgWkMzWFhfUjEyOF9HQU1NQTA4fSwKKwl7MHhhMCwgMHhkZSwgWkMzWFhfUjEyOV9HQU1NQTA5fSwKKwl7MHhhMCwgMHhlNiwgWkMzWFhfUjEyQV9HQU1NQTBBfSwKKwl7MHhhMCwgMHhlZCwgWkMzWFhfUjEyQl9HQU1NQTBCfSwKKwl7MHhhMCwgMHhmMywgWkMzWFhfUjEyQ19HQU1NQTBDfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEyRF9HQU1NQTBEfSwKKwl7MHhhMCwgMHhmYiwgWkMzWFhfUjEyRV9HQU1NQTBFfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEyRl9HQU1NQTBGfSwKKwl7MHhhMCwgMHgyNiwgWkMzWFhfUjEzMF9HQU1NQTEwfSwKKwl7MHhhMCwgMHgyMywgWkMzWFhfUjEzMV9HQU1NQTExfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjEzMl9HQU1NQTEyfSwKKwl7MHhhMCwgMHgxYywgWkMzWFhfUjEzM19HQU1NQTEzfSwKKwl7MHhhMCwgMHgxNiwgWkMzWFhfUjEzNF9HQU1NQTE0fSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjEzNV9HQU1NQTE1fSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjEzNl9HQU1NQTE2fSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEzN19HQU1NQTE3fSwKKwl7MHhhMCwgMHgwYiwgWkMzWFhfUjEzOF9HQU1NQTE4fSwKKwl7MHhhMCwgMHgwOSwgWkMzWFhfUjEzOV9HQU1NQTE5fSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjEzQV9HQU1NQTFBfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjEzQl9HQU1NQTFCfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjEzQ19HQU1NQTFDfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjEzRF9HQU1NQTFEfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjEzRV9HQU1NQTFFfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjEzRl9HQU1NQTFGfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjExMl9SR0IyMn0sCisKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCisJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCisJezB4YWEsIDB4MjAsIDB4MDAwMn0sCisJezB4YWEsIDB4MjEsIDB4MDAxYn0sCisJezB4YWEsIDB4MDMsIDB4MDA0NH0sCisJezB4YWEsIDB4MDQsIDB4MDAwOH0sCisJezB4YWEsIDB4MDUsIDB4MDAxYn0sCisJezB4YWEsIDB4MGUsIDB4MDAwMX0sCisJezB4YWEsIDB4MGYsIDB4MDAwMH0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4NGQsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHg0NCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhhZCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhlYiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTEsIDB4MDEsIDB4MDE5NX0sCisJezB4YTEsIDB4MDEsIDB4MDE5Nn0sCisJezB4YTEsIDB4MDEsIDB4MDE5N30sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDFkLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCisJezB4YTAsIDB4OTksIFpDM1hYX1IxMThfQkdBSU59LAorCXsweGExLCAweDAxLCAweDAxMTZ9LAorCXsweGExLCAweDAxLCAweDAxMTh9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgxZCwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAorCXsweGEwLCAweDk5LCBaQzNYWF9SMTE4X0JHQUlOfSwKKy8qCXsweGEwLCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sICovCisJezB4YTAsIDB4MDAsIDB4MDAwN30sCisvKgl7MHhhMCwgMHgxOCwgMHgwMGZlfSwgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMHhiX0luaXRpYWxbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKKwl7MHhhMCwgMHgxMSwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogcXRhYmxlIDB4MDUgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAorCXsweGEwLCAweGU4LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAorCXsweGFhLCAweDFjLCAweDAwMDB9LAorCXsweGFhLCAweDBhLCAweDAwMDF9LAorCXsweGFhLCAweDBiLCAweDAwMDZ9LAorCXsweGFhLCAweDBjLCAweDAwN2J9LAorCXsweGFhLCAweDBkLCAweDAwYTd9LAorCXsweGFhLCAweDAzLCAweDAwZmJ9LAorCXsweGFhLCAweDA1LCAweDAwMDB9LAorCXsweGFhLCAweDA2LCAweDAwMDN9LAorCXsweGFhLCAweDA5LCAweDAwMDh9LAorCisJezB4YWEsIDB4MGYsIDB4MDAxOH0sCS8qIHNldCBzZW5zb3IgZ2FpbiAqLworCXsweGFhLCAweDEwLCAweDAwMTh9LAorCXsweGFhLCAweDExLCAweDAwMTh9LAorCXsweGFhLCAweDEyLCAweDAwMTh9LAorCisJezB4YWEsIDB4MTUsIDB4MDA0ZX0sCisJezB4YWEsIDB4MWMsIDB4MDAwNH0sCisJezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTEsIDB4MDEsIDB4MDAwMn0sCisJezB4YTEsIDB4MDEsIDB4MDAwOH0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMThfQkdBSU59LAorCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgNCAqLworCXsweGEwLCAweDM4LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAorCXsweGEwLCAweDU5LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAorCXsweGEwLCAweDc5LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAorCXsweGEwLCAweDkyLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAorCXsweGEwLCAweGE3LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAorCXsweGEwLCAweGI5LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAorCXsweGEwLCAweGM4LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAorCXsweGEwLCAweGQ0LCBaQzNYWF9SMTI4X0dBTU1BMDh9LAorCXsweGEwLCAweGRmLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAorCXsweGEwLCAweGU3LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAorCXsweGEwLCAweGVlLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTJDX0dBTU1BMEN9LAorCXsweGEwLCAweGY5LCBaQzNYWF9SMTJEX0dBTU1BMER9LAorCXsweGEwLCAweGZjLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAorCXsweGEwLCAweDI2LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAorCXsweGEwLCAweDIyLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAorCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMTNDX0dBTU1BMUN9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTNEX0dBTU1BMUR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAorCisJezB4YTAsIDB4NjYsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KKwl7MHhhMCwgMHhlZCwgWkMzWFhfUjEwQl9SR0IwMX0sCisJezB4YTAsIDB4ZWQsIFpDM1hYX1IxMENfUkdCMDJ9LAorCXsweGEwLCAweGVkLCBaQzNYWF9SMTBEX1JHQjEwfSwKKwl7MHhhMCwgMHg2NiwgWkMzWFhfUjEwRV9SR0IxMX0sCisJezB4YTAsIDB4ZWQsIFpDM1hYX1IxMEZfUkdCMTJ9LAorCXsweGEwLCAweGVkLCBaQzNYWF9SMTEwX1JHQjIwfSwKKwl7MHhhMCwgMHhlZCwgWkMzWFhfUjExMV9SR0IyMX0sCisJezB4YTAsIDB4NjYsIFpDM1hYX1IxMTJfUkdCMjJ9LAorCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGFhLCAweDEzLCAweDAwMzF9LAorCXsweGFhLCAweDE0LCAweDAwMDF9LAorCXsweGFhLCAweDBlLCAweDAwMDR9LAorCXsweGFhLCAweDE5LCAweDAwY2R9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHg2MiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHgzZCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDB4MTQgKi8KKwl7MHhhMCwgMHgyOCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweDJjLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweDQxLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExOF9CR0FJTn0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaGRjczIwMjB4Yl9Jbml0aWFsU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAorCXsweGEwLCAweGU4LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAorCXsweGFhLCAweDFjLCAweDAwMDB9LAorCXsweGFhLCAweDBhLCAweDAwMDF9LAorCXsweGFhLCAweDBiLCAweDAwMDZ9LAorCXsweGFhLCAweDBjLCAweDAwN2F9LAorCXsweGFhLCAweDBkLCAweDAwYTd9LAorCXsweGFhLCAweDAzLCAweDAwZmJ9LAorCXsweGFhLCAweDA1LCAweDAwMDB9LAorCXsweGFhLCAweDA2LCAweDAwMDN9LAorCXsweGFhLCAweDA5LCAweDAwMDh9LAorCXsweGFhLCAweDBmLCAweDAwMTh9LAkvKiBvcmlnaW5hbCBzZXR0aW5nICovCisJezB4YWEsIDB4MTAsIDB4MDAxOH0sCisJezB4YWEsIDB4MTEsIDB4MDAxOH0sCisJezB4YWEsIDB4MTIsIDB4MDAxOH0sCisJezB4YWEsIDB4MTUsIDB4MDA0ZX0sCisJezB4YWEsIDB4MWMsIDB4MDAwNH0sCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTEsIDB4MDEsIDB4MDAwMn0sCisJezB4YTEsIDB4MDEsIDB4MDAwOH0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMThfQkdBSU59LAorCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgNCAqLworCXsweGEwLCAweDM4LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAorCXsweGEwLCAweDU5LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAorCXsweGEwLCAweDc5LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAorCXsweGEwLCAweDkyLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAorCXsweGEwLCAweGE3LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAorCXsweGEwLCAweGI5LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAorCXsweGEwLCAweGM4LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAorCXsweGEwLCAweGQ0LCBaQzNYWF9SMTI4X0dBTU1BMDh9LAorCXsweGEwLCAweGRmLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAorCXsweGEwLCAweGU3LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAorCXsweGEwLCAweGVlLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTJDX0dBTU1BMEN9LAorCXsweGEwLCAweGY5LCBaQzNYWF9SMTJEX0dBTU1BMER9LAorCXsweGEwLCAweGZjLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAorCXsweGEwLCAweDI2LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAorCXsweGEwLCAweDIyLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAorCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMTNDX0dBTU1BMUN9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTNEX0dBTU1BMUR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAorCXsweGEwLCAweDY2LCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZWQsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGVkLCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhlZCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NjYsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGVkLCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhlZCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZWQsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDY2LCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisgLyoqKiogc2V0IGV4cG9zdXJlICoqKi8KKwl7MHhhYSwgMHgxMywgMHgwMDMxfSwKKwl7MHhhYSwgMHgxNCwgMHgwMDAxfSwKKwl7MHhhYSwgMHgwZSwgMHgwMDA0fSwKKwl7MHhhYSwgMHgxOSwgMHgwMGNkfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4NjIsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4M2QsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKKwl7MHhhMCwgMHgyOCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweDJjLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweDQxLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExOF9CR0FJTn0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaGRjczIwMjBiXzUwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgxMywgMHgwMDE4fSwgLyogMDAsMTMsMTgsYWEgKi8KKwl7MHhhYSwgMHgxNCwgMHgwMDAxfSwgLyogMDAsMTQsMDEsYWEgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDA1fSwgLyogMDAsMGUsMDUsYWEgKi8KKwl7MHhhYSwgMHgxOSwgMHgwMDFmfSwgLyogMDAsMTksMWYsYWEgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDAyLGNjICovCisJezB4YTAsIDB4NzYsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLDc2LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4NDYsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5Nyw0NixjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwgLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwgLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwgLyogMDEsYTksMGMsY2MgKi8KKwl7MHhhMCwgMHgyOCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LCAvKiAwMSxhYSwyOCxjYyAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMDFEX0hTWU5DXzB9LCAvKiAwMCwxZCwwNSxjYyAqLworCXsweGEwLCAweDFhLCBaQzNYWF9SMDFFX0hTWU5DXzF9LCAvKiAwMCwxZSwxYSxjYyAqLworCXsweGEwLCAweDJmLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LCAvKiAwMCwxZiwyZixjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGhkY3MyMDIwYl82MEhaW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YWEsIDB4MTMsIDB4MDAzMX0sIC8qIDAwLDEzLDMxLGFhICovCisJezB4YWEsIDB4MTQsIDB4MDAwMX0sIC8qIDAwLDE0LDAxLGFhICovCisJezB4YWEsIDB4MGUsIDB4MDAwNH0sIC8qIDAwLDBlLDA0LGFhICovCisJezB4YWEsIDB4MTksIDB4MDBjZH0sIC8qIDAwLDE5LGNkLGFhICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwwMixjYyAqLworCXsweGEwLCAweDYyLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5Miw2MixjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDNkLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsM2QsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDBjLGNjICovCisJezB4YTAsIDB4MjgsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMjgsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsMDQsY2MgKi8KKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsMTgsY2MgKi8KKwl7MHhhMCwgMHgyYywgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsMmMsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMGJfTm9GbGlrZXJbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgxMywgMHgwMDEwfSwgLyogMDAsMTMsMTAsYWEgKi8KKwl7MHhhYSwgMHgxNCwgMHgwMDAxfSwgLyogMDAsMTQsMDEsYWEgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDA0fSwgLyogMDAsMGUsMDQsYWEgKi8KKwl7MHhhYSwgMHgxOSwgMHgwMDAwfSwgLyogMDAsMTksMDAsYWEgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDAyLGNjICovCisJezB4YTAsIDB4NzAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLDcwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5NywxMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwgLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwgLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwgLyogMDEsYTksMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LCAvKiAwMSxhYSwwMCxjYyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LCAvKiAwMCwxZCwwNCxjYyAqLworCXsweGEwLCAweDE3LCBaQzNYWF9SMDFFX0hTWU5DXzF9LCAvKiAwMCwxZSwxNyxjYyAqLworCXsweGEwLCAweDJhLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LCAvKiAwMCwxZiwyYSxjYyAqLworCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYnh4X0luaXRpYWxbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKKwl7MHhhMCwgMHg3NywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiAwMCAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAorCXsweGFhLCAweDMwLCAweDAwMmR9LAorCXsweGFhLCAweDAxLCAweDAwMDV9LAorCXsweGFhLCAweDExLCAweDAwMDB9LAorCXsweGFhLCAweDEzLCAweDAwMDF9LAkvKiB7MHhhYSwgMHgxMywgMHgwMDAwfSwgKi8KKwl7MHhhYSwgMHgxNCwgMHgwMDAxfSwKKwl7MHhhYSwgMHgxNSwgMHgwMGU4fSwKKwl7MHhhYSwgMHgxNiwgMHgwMDAyfSwKKwl7MHhhYSwgMHgxNywgMHgwMDg2fSwKKwl7MHhhYSwgMHgzMSwgMHgwMDM4fSwKKwl7MHhhYSwgMHgzMiwgMHgwMDM4fSwKKwl7MHhhYSwgMHgzMywgMHgwMDM4fSwKKwl7MHhhYSwgMHg1YiwgMHgwMDAxfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKKwl7MHhhMCwgMHg2OCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCisJezB4YTAsIDB4YzAsIDB4MDE5Yn0sCisJezB4YTAsIDB4YTAsIDB4MDE5Y30sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxODhfTUlOR0FJTn0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YWEsIDB4MDIsIDB4MDA4MH0sCS8qIHsweGFhLCAweDAyLCAweDAwOTB9OyAqLworCXsweGExLCAweDAxLCAweDAwMDJ9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGExLCAweDAxLCAweDAwOTF9LAorCXsweGExLCAweDAxLCAweDAwOTV9LAorCXsweGExLCAweDAxLCAweDAwOTZ9LAorCisJezB4YTEsIDB4MDEsIDB4MDAwOH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogY2xvY2sgPyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMUM2X1NIQVJQTkVTUzAwfSwJLyogc2hhcnBuZXNzKyAqLworCXsweGExLCAweDAxLCAweDAxYzh9LAorCXsweGExLCAweDAxLCAweDAxYzl9LAorCXsweGExLCAweDAxLCAweDAxY2F9LAorCXsweGEwLCAweDBmLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogc2hhcnBuZXNzLSAqLworCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQl9SR0IwMX0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMENfUkdCMDJ9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBEX1JHQjEwfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwRV9SR0IxMX0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMEZfUkdCMTJ9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTEwX1JHQjIwfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjExMV9SR0IyMX0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMTJfUkdCMjJ9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhYSwgMHgyNSwgMHgwMDA3fSwKKwl7MHhhYSwgMHgyNiwgMHgwMGExfSwKKwl7MHhhYSwgMHgyNywgMHgwMDIwfSwKKwl7MHhhYSwgMHgyMCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgyMSwgMHgwMGEwfSwKKwl7MHhhYSwgMHgyMiwgMHgwMDE2fSwKKwl7MHhhYSwgMHgyMywgMHgwMDQwfSwKKworCXsweGEwLCAweDEwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMkYgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogNGQgKi8KKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweDg2LCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHhhMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDBmLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4YTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4MTYsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IwMjBfSFNZTkNfM30sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCisJezB4YTEsIDB4MDEsIDB4MDAxZH0sCisJezB4YTEsIDB4MDEsIDB4MDAxZX0sCisJezB4YTEsIDB4MDEsIDB4MDAxZn0sCisJezB4YTEsIDB4MDEsIDB4MDAyMH0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKKy8qCXsweGEwLCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sICovCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFieHhfSW5pdGlhbFNjYWxlW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogMDAgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKKwl7MHhhYSwgMHgzMCwgMHgwMDJkfSwKKwl7MHhhYSwgMHgwMSwgMHgwMDA1fSwKKwl7MHhhYSwgMHgxMSwgMHgwMDAxfSwKKwl7MHhhYSwgMHgxMywgMHgwMDAwfSwJLyogezB4YWEsIDB4MTMsIDB4MDAwMX07ICovCisJezB4YWEsIDB4MTQsIDB4MDAwMX0sCisJezB4YWEsIDB4MTUsIDB4MDBlNn0sCisJezB4YWEsIDB4MTYsIDB4MDAwMn0sCisJezB4YWEsIDB4MTcsIDB4MDA4Nn0sCisJezB4YWEsIDB4MzEsIDB4MDAzOH0sCisJezB4YWEsIDB4MzIsIDB4MDAzOH0sCisJezB4YWEsIDB4MzMsIDB4MDAzOH0sCisJezB4YWEsIDB4NWIsIDB4MDAwMX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAorCXsweGEwLCAweDAwLCAweDAxYWR9LAorCXsweGEwLCAweGMwLCAweDAxOWJ9LAorCXsweGEwLCAweGEwLCAweDAxOWN9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMTg4X01JTkdBSU59LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAorCXsweGFhLCAweDAyLCAweDAwOTB9LAkvKiB7MHhhYSwgMHgwMiwgMHgwMDgwfSwgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMDAyfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDkxfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDk1fSwKKwl7MHhhMSwgMHgwMSwgMHgwMDk2fSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBjbG9jayA/ICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCisJezB4YTEsIDB4MDEsIDB4MDFjOH0sCisJezB4YTEsIDB4MDEsIDB4MDFjOX0sCisJezB4YTEsIDB4MDEsIDB4MDFjYX0sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCisKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGY4LCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjExMl9SR0IyMn0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGFhLCAweDI1LCAweDAwMDd9LAorCXsweGFhLCAweDI2LCAweDAwYTF9LAorCXsweGFhLCAweDI3LCAweDAwMjB9LAorCXsweGFhLCAweDIwLCAweDAwMDB9LAorCXsweGFhLCAweDIxLCAweDAwNDB9LAorCXsweGFhLCAweDIyLCAweDAwMTN9LAorCXsweGFhLCAweDIzLCAweDAwNGN9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMmYgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogNGQgKi8KKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogNjAgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweGMzLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4NGMsIFpDM1hYX1IwMjBfSFNZTkNfM30sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCisJezB4YTEsIDB4MDEsIDB4MDAxZH0sCisJezB4YTEsIDB4MDEsIDB4MDAxZX0sCisJezB4YTEsIDB4MDEsIDB4MDAxZn0sCisJezB4YTEsIDB4MDEsIDB4MDAyMH0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKKy8qCXsweGEwLCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sICovCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFjeHhfSW5pdGlhbFtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDc3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5Ql9XSU5IRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDlEX1dJTldJRFRISElHSH0sCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhYSwgMHgwMSwgMHgwMDBjfSwKKwl7MHhhYSwgMHgxMSwgMHgwMDAwfSwKKwl7MHhhYSwgMHgxMywgMHgwMDAwfSwKKwl7MHhhYSwgMHgxNCwgMHgwMDAxfSwKKwl7MHhhYSwgMHgxNSwgMHgwMGU4fSwKKwl7MHhhYSwgMHgxNiwgMHgwMDAyfSwKKwl7MHhhYSwgMHgxNywgMHgwMDg4fSwKKworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAorCXsweGEwLCAweDg5LCBaQzNYWF9SMThEX1lUQVJHRVR9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwKKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKKwl7MHhhMCwgMHhjMCwgMHgwMTlifSwKKwl7MHhhMCwgMHhhMCwgMHgwMTljfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDAyfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDkxfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDk1fSwKKwl7MHhhMSwgMHgwMSwgMHgwMDk2fSwKKworCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKworCXsweGEwLCAweDYwLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjAsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGYwLCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmMCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGYwLCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmMCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjAsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YWEsIDB4MjUsIDB4MDAwN30sCisJezB4YWEsIDB4MjYsIDB4MDA1M30sCisJezB4YWEsIDB4MjcsIDB4MDAwMH0sCisKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDJmICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDliICovCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDgwICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHhkNCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4YzAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDFkfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDFlfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDFmfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDIwfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxY3h4X0luaXRpYWxTY2FsZVtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkvKiBkaWZmICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKKwl7MHhhMCwgMHg3NywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAorCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCS8qIDFlMCAqLworCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDlCX1dJTkhFSUdIVEhJR0h9LAorCXsweGEwLCAweGU4LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOURfV0lOV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGFhLCAweDAxLCAweDAwMGN9LAorCXsweGFhLCAweDExLCAweDAwMDB9LAorCXsweGFhLCAweDEzLCAweDAwMDB9LAorCXsweGFhLCAweDE0LCAweDAwMDF9LAorCXsweGFhLCAweDE1LCAweDAwZTh9LAorCXsweGFhLCAweDE2LCAweDAwMDJ9LAorCXsweGFhLCAweDE3LCAweDAwODh9LAorCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCS8qIDAwICovCisKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKKwl7MHhhMCwgMHg4OSwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCisJezB4YTAsIDB4YzAsIDB4MDE5Yn0sCisJezB4YTAsIDB4YTAsIDB4MDE5Y30sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTEsIDB4MDEsIDB4MDAwMn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJCQkJCQkvKiByZWFkIHRoZSBpMmMgY2hpcHMgaWRlbnQgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDkxfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDk1fSwKKwl7MHhhMSwgMHgwMSwgMHgwMDk2fSwKKworCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKworCXsweGEwLCAweDYwLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjAsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGYwLCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmMCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGYwLCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmMCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjAsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YWEsIDB4MjUsIDB4MDAwN30sCisJezB4YWEsIDB4MjYsIDB4MDA1M30sCisJezB4YWEsIDB4MjcsIDB4MDAwMH0sCisKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDJmICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDliICovCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDgwICovCisKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweGQ0LCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHhjMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTEsIDB4MDEsIDB4MDAxZH0sCisJezB4YTEsIDB4MDEsIDB4MDAxZX0sCisJezB4YTEsIDB4MDEsIDB4MDAxZn0sCisJezB4YTEsIDB4MDEsIDB4MDAyMH0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWF4eF9Jbml0aWFsW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4YTEsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTdfV0lOWVNUQVJUSElHSH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OV9XSU5YU1RBUlRISUdIfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5Ql9XSU5IRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDlEX1dJTldJRFRISElHSH0sCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAorCXsweGEwLCAweDM3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAorCXsweGFhLCAweDAxLCAweDAwMTB9LAorCXsweGFhLCAweDAzLCAweDAwMDB9LAorCXsweGFhLCAweDA0LCAweDAwMDF9LAorCXsweGFhLCAweDA1LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwMDF9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDF9LAorCXsweGFhLCAweDA0LCAweDAwMTF9LAorCXsweGFhLCAweDA1LCAweDAwYTB9LAorCXsweGFhLCAweDA2LCAweDAwMDF9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDJ9LAorCXsweGFhLCAweDA0LCAweDAwMTN9LAorCXsweGFhLCAweDA1LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwMDF9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDN9LAorCXsweGFhLCAweDA0LCAweDAwMTV9LAorCXsweGFhLCAweDA1LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwMDV9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDR9LAorCXsweGFhLCAweDA0LCAweDAwMTd9LAorCXsweGFhLCAweDA1LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwMGR9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDV9LAorCXsweGFhLCAweDA0LCAweDAwMTl9LAorCXsweGFhLCAweDA1LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwMDV9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDZ9LAorCXsweGFhLCAweDA0LCAweDAwMTd9LAorCXsweGFhLCAweDA1LCAweDAwMjZ9LAorCXsweGFhLCAweDA2LCAweDAwMDV9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDd9LAorCXsweGFhLCAweDA0LCAweDAwMTl9LAorCXsweGFhLCAweDA1LCAweDAwMjJ9LAorCXsweGFhLCAweDA2LCAweDAwMDV9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDh9LAorCXsweGFhLCAweDA0LCAweDAwMjF9LAorCXsweGFhLCAweDA1LCAweDAwYWF9LAorCXsweGFhLCAweDA2LCAweDAwMDV9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDl9LAorCXsweGFhLCAweDA0LCAweDAwMjN9LAorCXsweGFhLCAweDA1LCAweDAwYWF9LAorCXsweGFhLCAweDA2LCAweDAwMGR9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMGF9LAorCXsweGFhLCAweDA0LCAweDAwMjV9LAorCXsweGFhLCAweDA1LCAweDAwYWF9LAorCXsweGFhLCAweDA2LCAweDAwMDV9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMGJ9LAorCXsweGFhLCAweDA0LCAweDAwZWN9LAorCXsweGFhLCAweDA1LCAweDAwMmV9LAorCXsweGFhLCAweDA2LCAweDAwMDV9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMGN9LAorCXsweGFhLCAweDA0LCAweDAwZmF9LAorCXsweGFhLCAweDA1LCAweDAwMmF9LAorCXsweGFhLCAweDA2LCAweDAwMDV9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDA3LCAweDAwMGR9LAorCXsweGFhLCAweDAxLCAweDAwMDV9LAorCXsweGFhLCAweDk0LCAweDAwMDJ9LAorCXsweGFhLCAweDkwLCAweDAwMDB9LAorCXsweGFhLCAweDkxLCAweDAwMWZ9LAorCXsweGFhLCAweDEwLCAweDAwNjR9LAorCXsweGFhLCAweDliLCAweDAwZjB9LAorCXsweGFhLCAweDljLCAweDAwMDJ9LAorCXsweGFhLCAweDE0LCAweDAwMWF9LAorCXsweGFhLCAweDIwLCAweDAwODB9LAorCXsweGFhLCAweDIyLCAweDAwODB9LAorCXsweGFhLCAweDI0LCAweDAwODB9LAorCXsweGFhLCAweDI2LCAweDAwODB9LAorCXsweGFhLCAweDAwLCAweDAwODR9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAorCXsweGFhLCAweGE4LCAweDAwYzB9LAorCXsweGExLCAweDAxLCAweDAwMDJ9LAorCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKworCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHg1MiwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGY3LCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHhmNywgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDUyLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmNywgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweGY3LCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg1MiwgWkMzWFhfUjExMl9SR0IyMn0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGFhLCAweDBkLCAweDAwMDN9LAorCXsweGFhLCAweDBjLCAweDAwOGN9LAorCXsweGFhLCAweDBlLCAweDAwOTV9LAorCXsweGFhLCAweDBmLCAweDAwMDJ9LAorCXsweGFhLCAweDFjLCAweDAwOTR9LAorCXsweGFhLCAweDFkLCAweDAwMDJ9LAorCXsweGFhLCAweDIwLCAweDAwODB9LAorCXsweGFhLCAweDIyLCAweDAwODB9LAorCXsweGFhLCAweDI0LCAweDAwODB9LAorCXsweGFhLCAweDI2LCAweDAwODB9LAorCXsweGFhLCAweDAwLCAweDAwODR9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMEEzX0VYUE9TVVJFVElNRUhJR0h9LAorCXsweGEwLCAweDk0LCBaQzNYWF9SMEE0X0VYUE9TVVJFVElNRUxPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDg0LCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MTIsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHhlMywgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHhlYywgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhmNSwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4YzAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAorCXsweGEwLCAweGMwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExOF9CR0FJTn0sCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVheHhfSW5pdGlhbFNjYWxlW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4YTEsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTdfV0lOWVNUQVJUSElHSH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OV9XSU5YU1RBUlRISUdIfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5Ql9XSU5IRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlNiwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDlEX1dJTldJRFRISElHSH0sCisJezB4YTAsIDB4ODYsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAorCXsweGEwLCAweDc3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAorCXsweGFhLCAweDAxLCAweDAwMTB9LAorCXsweGFhLCAweDAzLCAweDAwMDB9LAorCXsweGFhLCAweDA0LCAweDAwMDF9LAorCXsweGFhLCAweDA1LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwMDF9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDF9LAorCXsweGFhLCAweDA0LCAweDAwMTF9LAorCXsweGFhLCAweDA1LCAweDAwYTB9LAorCXsweGFhLCAweDA2LCAweDAwMDF9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDJ9LAorCXsweGFhLCAweDA0LCAweDAwMTN9LAorCXsweGFhLCAweDA1LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwMDF9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDN9LAorCXsweGFhLCAweDA0LCAweDAwMTV9LAorCXsweGFhLCAweDA1LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwMDV9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDR9LAorCXsweGFhLCAweDA0LCAweDAwMTd9LAorCXsweGFhLCAweDA1LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwMGR9LAorCXsweGFhLCAweDA4LCAweDAwMDB9LAorCXsweGFhLCAweDAzLCAweDAwMDV9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDE5LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDkxfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDIwfSwKKwl7MHhhYSwgMHgwNiwgMHgwMDA1fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwMywgMHgwMDA2fSwKKwl7MHhhYSwgMHgwNCwgMHgwMDE3fSwKKwl7MHhhYSwgMHgwNSwgMHgwMDI2fSwKKwl7MHhhYSwgMHgwNiwgMHgwMDA1fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwMywgMHgwMDA3fSwKKwl7MHhhYSwgMHgwNCwgMHgwMDE5fSwKKwl7MHhhYSwgMHgwNSwgMHgwMDIyfSwKKwl7MHhhYSwgMHgwNiwgMHgwMDA1fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwMywgMHgwMDA4fSwKKwl7MHhhYSwgMHgwNCwgMHgwMDIxfSwKKwl7MHhhYSwgMHgwNSwgMHgwMGFhfSwKKwl7MHhhYSwgMHgwNiwgMHgwMDA1fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwMywgMHgwMDA5fSwKKwl7MHhhYSwgMHgwNCwgMHgwMDIzfSwKKwl7MHhhYSwgMHgwNSwgMHgwMGFhfSwKKwl7MHhhYSwgMHgwNiwgMHgwMDBkfSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwMywgMHgwMDBhfSwKKwl7MHhhYSwgMHgwNCwgMHgwMDI1fSwKKwl7MHhhYSwgMHgwNSwgMHgwMGFhfSwKKwl7MHhhYSwgMHgwNiwgMHgwMDA1fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwMywgMHgwMDBifSwKKwl7MHhhYSwgMHgwNCwgMHgwMGVjfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDJlfSwKKwl7MHhhYSwgMHgwNiwgMHgwMDA1fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwMywgMHgwMDBjfSwKKwl7MHhhYSwgMHgwNCwgMHgwMGZhfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDJhfSwKKwl7MHhhYSwgMHgwNiwgMHgwMDA1fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwNywgMHgwMDBkfSwKKwl7MHhhYSwgMHgwMSwgMHgwMDA1fSwKKwl7MHhhYSwgMHg5NCwgMHgwMDAyfSwKKwl7MHhhYSwgMHg5MCwgMHgwMDAwfSwKKwl7MHhhYSwgMHg5MSwgMHgwMDEwfSwKKwl7MHhhYSwgMHgxMCwgMHgwMDY0fSwKKwl7MHhhYSwgMHg5YiwgMHgwMGYwfSwKKwl7MHhhYSwgMHg5YywgMHgwMDAyfSwKKwl7MHhhYSwgMHgxNCwgMHgwMDFhfSwKKwl7MHhhYSwgMHgyMCwgMHgwMDgwfSwKKwl7MHhhYSwgMHgyMiwgMHgwMDgwfSwKKwl7MHhhYSwgMHgyNCwgMHgwMDgwfSwKKwl7MHhhYSwgMHgyNiwgMHgwMDgwfSwKKwl7MHhhYSwgMHgwMCwgMHgwMDg0fSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhYSwgMHhhOCwgMHgwMDgwfSwKKwl7MHhhMCwgMHg3OCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDAyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExOF9CR0FJTn0sCisJezB4YTEsIDB4MDEsIDB4MDAwOH0sCisKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBjbG9jayA/ICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCisJezB4YTEsIDB4MDEsIDB4MDFjOH0sCisJezB4YTEsIDB4MDEsIDB4MDFjOX0sCisJezB4YTEsIDB4MDEsIDB4MDFjYX0sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCisKKwl7MHhhMCwgMHg1MiwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGY3LCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHhmNywgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDUyLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmNywgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweGY3LCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg1MiwgWkMzWFhfUjExMl9SR0IyMn0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGFhLCAweDBkLCAweDAwMDN9LAorCXsweGFhLCAweDBjLCAweDAwMjB9LAorCXsweGFhLCAweDBlLCAweDAwMGV9LAorCXsweGFhLCAweDBmLCAweDAwMDJ9LAorCXsweGFhLCAweDFjLCAweDAwMGR9LAorCXsweGFhLCAweDFkLCAweDAwMDJ9LAorCXsweGFhLCAweDIwLCAweDAwODB9LAorCXsweGFhLCAweDIyLCAweDAwODB9LAorCXsweGFhLCAweDI0LCAweDAwODB9LAorCXsweGFhLCAweDI2LCAweDAwODB9LAorCXsweGFhLCAweDAwLCAweDAwODR9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMEEzX0VYUE9TVVJFVElNRUhJR0h9LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMEE0X0VYUE9TVVJFVElNRUxPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDFhLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDRiLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MTIsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHhkOCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhlYSwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KKwl7MHhhYSwgMHgwYywgMHgwMDIwfSwgLyogMDAsMGMsMjAsYWEgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDBlfSwgLyogMDAsMGUsMGUsYWEgKi8KKwl7MHhhYSwgMHgwZiwgMHgwMDAyfSwgLyogMDAsMGYsMDIsYWEgKi8KKwl7MHhhYSwgMHgxYywgMHgwMDBkfSwgLyogMDAsMWMsMGQsYWEgKi8KKwl7MHhhYSwgMHgxZCwgMHgwMDAyfSwgLyogMDAsMWQsMDIsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDgwfSwgLyogMDAsMjAsODAsYWEgKi8KKwl7MHhhYSwgMHgyMiwgMHgwMDgwfSwgLyogMDAsMjIsODAsYWEgKi8KKwl7MHhhYSwgMHgyNCwgMHgwMDgwfSwgLyogMDAsMjQsODAsYWEgKi8KKwl7MHhhYSwgMHgyNiwgMHgwMDgwfSwgLyogMDAsMjYsODAsYWEgKi8KKwl7MHhhYSwgMHgwMCwgMHgwMDg0fSwgLyogMDAsMDAsODQsYWEgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwgLyogMDAsYTMsMDIsY2MgKi8KKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LCAvKiAwMCxhNCwwZCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsMDQsY2MgKi8KKwl7MHhhMCwgMHgxYSwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsMWEsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHg0YiwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDRiLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LCAvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LCAvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwxMCxjYyAqLworCXsweGEwLCAweDEyLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sIC8qIDAxLGFhLDEyLGNjICovCisJezB4YTAsIDB4YzgsIFpDM1hYX1IwMURfSFNZTkNfMH0sIC8qIDAwLDFkLGM4LGNjICovCisJezB4YTAsIDB4ZDgsIFpDM1hYX1IwMUVfSFNZTkNfMX0sIC8qIDAwLDFlLGQ4LGNjICovCisJezB4YTAsIDB4ZWEsIFpDM1hYX1IwMUZfSFNZTkNfMn0sIC8qIDAwLDFmLGVhLGNjICovCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV81MEhaU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KKwl7MHhhYSwgMHgwYywgMHgwMDhjfSwgLyogMDAsMGMsOGMsYWEgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDk1fSwgLyogMDAsMGUsOTUsYWEgKi8KKwl7MHhhYSwgMHgwZiwgMHgwMDAyfSwgLyogMDAsMGYsMDIsYWEgKi8KKwl7MHhhYSwgMHgxYywgMHgwMDk0fSwgLyogMDAsMWMsOTQsYWEgKi8KKwl7MHhhYSwgMHgxZCwgMHgwMDAyfSwgLyogMDAsMWQsMDIsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDgwfSwgLyogMDAsMjAsODAsYWEgKi8KKwl7MHhhYSwgMHgyMiwgMHgwMDgwfSwgLyogMDAsMjIsODAsYWEgKi8KKwl7MHhhYSwgMHgyNCwgMHgwMDgwfSwgLyogMDAsMjQsODAsYWEgKi8KKwl7MHhhYSwgMHgyNiwgMHgwMDgwfSwgLyogMDAsMjYsODAsYWEgKi8KKwl7MHhhYSwgMHgwMCwgMHgwMDg0fSwgLyogMDAsMDAsODQsYWEgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwgLyogMDAsYTMsMDIsY2MgKi8KKwl7MHhhMCwgMHg5NCwgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LCAvKiAwMCxhNCw5NCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsMDQsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsMjAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHg4NCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDg0LGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LCAvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LCAvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwxMCxjYyAqLworCXsweGEwLCAweDEyLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sIC8qIDAxLGFhLDEyLGNjICovCisJezB4YTAsIDB4ZTMsIFpDM1hYX1IwMURfSFNZTkNfMH0sIC8qIDAwLDFkLGUzLGNjICovCisJezB4YTAsIDB4ZWMsIFpDM1hYX1IwMUVfSFNZTkNfMX0sIC8qIDAwLDFlLGVjLGNjICovCisJezB4YTAsIDB4ZjUsIFpDM1hYX1IwMUZfSFNZTkNfMn0sIC8qIDAwLDFmLGY1LGNjICovCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LCAvKiAwMSxhNywwMCxjYyAqLworCXsweGEwLCAweGMwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwgLyogMDEsYTgsYzAsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzYwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KKwl7MHhhYSwgMHgwYywgMHgwMDA0fSwgLyogMDAsMGMsMDQsYWEgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDBkfSwgLyogMDAsMGUsMGQsYWEgKi8KKwl7MHhhYSwgMHgwZiwgMHgwMDAyfSwgLyogMDAsMGYsMDIsYWEgKi8KKwl7MHhhYSwgMHgxYywgMHgwMDA4fSwgLyogMDAsMWMsMDgsYWEgKi8KKwl7MHhhYSwgMHgxZCwgMHgwMDAyfSwgLyogMDAsMWQsMDIsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDgwfSwgLyogMDAsMjAsODAsYWEgKi8KKwl7MHhhYSwgMHgyMiwgMHgwMDgwfSwgLyogMDAsMjIsODAsYWEgKi8KKwl7MHhhYSwgMHgyNCwgMHgwMDgwfSwgLyogMDAsMjQsODAsYWEgKi8KKwl7MHhhYSwgMHgyNiwgMHgwMDgwfSwgLyogMDAsMjYsODAsYWEgKi8KKwl7MHhhYSwgMHgwMCwgMHgwMDg0fSwgLyogMDAsMDAsODQsYWEgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwgLyogMDAsYTMsMDIsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LCAvKiAwMCxhNCwwOCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsMDQsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsMTAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHg0MSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDQxLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LCAvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LCAvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwxMCxjYyAqLworCXsweGEwLCAweDEyLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sIC8qIDAxLGFhLDEyLGNjICovCisJezB4YTAsIDB4YzEsIFpDM1hYX1IwMURfSFNZTkNfMH0sIC8qIDAwLDFkLGMxLGNjICovCisJezB4YTAsIDB4ZDQsIFpDM1hYX1IwMUVfSFNZTkNfMX0sIC8qIDAwLDFlLGQ0LGNjICovCisJezB4YTAsIDB4ZTgsIFpDM1hYX1IwMUZfSFNZTkNfMn0sIC8qIDAwLDFmLGU4LGNjICovCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KKwl7MHhhYSwgMHgwYywgMHgwMDA4fSwgLyogMDAsMGMsMDgsYWEgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDg2fSwgLyogMDAsMGUsODYsYWEgKi8KKwl7MHhhYSwgMHgwZiwgMHgwMDAyfSwgLyogMDAsMGYsMDIsYWEgKi8KKwl7MHhhYSwgMHgxYywgMHgwMDg1fSwgLyogMDAsMWMsODUsYWEgKi8KKwl7MHhhYSwgMHgxZCwgMHgwMDAyfSwgLyogMDAsMWQsMDIsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDgwfSwgLyogMDAsMjAsODAsYWEgKi8KKwl7MHhhYSwgMHgyMiwgMHgwMDgwfSwgLyogMDAsMjIsODAsYWEgKi8KKwl7MHhhYSwgMHgyNCwgMHgwMDgwfSwgLyogMDAsMjQsODAsYWEgKi8KKwl7MHhhYSwgMHgyNiwgMHgwMDgwfSwgLyogMDAsMjYsODAsYWEgKi8KKwl7MHhhYSwgMHgwMCwgMHgwMDg0fSwgLyogMDAsMDAsODQsYWEgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwgLyogMDAsYTMsMDIsY2MgKi8KKwl7MHhhMCwgMHg4NSwgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LCAvKiAwMCxhNCw4NSxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsMDQsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsMDgsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHg4MSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDgxLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LCAvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LCAvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwxMCxjYyAqLworCXsweGEwLCAweDEyLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sIC8qIDAxLGFhLDEyLGNjICovCisJezB4YTAsIDB4YzIsIFpDM1hYX1IwMURfSFNZTkNfMH0sIC8qIDAwLDFkLGMyLGNjICovCisJezB4YTAsIDB4ZDYsIFpDM1hYX1IwMUVfSFNZTkNfMX0sIC8qIDAwLDFlLGQ2LGNjICovCisJezB4YTAsIDB4ZWEsIFpDM1hYX1IwMUZfSFNZTkNfMn0sIC8qIDAwLDFmLGVhLGNjICovCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LCAvKiAwMSxhNywwMCxjYyAqLworCXsweGEwLCAweGMwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwgLyogMDEsYTgsYzAsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhX05vRmxpa2VyW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YWEsIDB4MGQsIDB4MDAwM30sIC8qIDAwLDBkLDAzLGFhICovCisJezB4YWEsIDB4MGMsIDB4MDAwNH0sIC8qIDAwLDBjLDA0LGFhICovCisJezB4YWEsIDB4MGUsIDB4MDAwZH0sIC8qIDAwLDBlLDBkLGFhICovCisJezB4YWEsIDB4MGYsIDB4MDAwMn0sIC8qIDAwLDBmLDAyLGFhICovCisJezB4YWEsIDB4MWMsIDB4MDAwMH0sIC8qIDAwLDFjLDAwLGFhICovCisJezB4YWEsIDB4MWQsIDB4MDAwMn0sIC8qIDAwLDFkLDAyLGFhICovCisJezB4YWEsIDB4MjAsIDB4MDA4MH0sIC8qIDAwLDIwLDgwLGFhICovCisJezB4YWEsIDB4MjIsIDB4MDA4MH0sIC8qIDAwLDIyLDgwLGFhICovCisJezB4YWEsIDB4MjQsIDB4MDA4MH0sIC8qIDAwLDI0LDgwLGFhICovCisJezB4YWEsIDB4MjYsIDB4MDA4MH0sIC8qIDAwLDI2LDgwLGFhICovCisJezB4YWEsIDB4MDAsIDB4MDA4NH0sIC8qIDAwLDAwLDg0LGFhICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwQTNfRVhQT1NVUkVUSU1FSElHSH0sIC8qIDAwLGEzLDAyLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwQTRfRVhQT1NVUkVUSU1FTE9XfSwgLyogMDAsYTQsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDA0LGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLDIwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5NywxMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwgLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwgLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwgLyogMDEsYTksMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LCAvKiAwMSxhYSwwMCxjYyAqLworCXsweGEwLCAweGMxLCBaQzNYWF9SMDFEX0hTWU5DXzB9LCAvKiAwMCwxZCxjMSxjYyAqLworCXsweGEwLCAweGQ0LCBaQzNYWF9SMDFFX0hTWU5DXzF9LCAvKiAwMCwxZSxkNCxjYyAqLworCXsweGEwLCAweGU4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LCAvKiAwMCwxZixlOCxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LCAvKiAwMCwyMCxmZixjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfTm9GbGlrZXJTY2FsZVtdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLworCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLworCXsweGFhLCAweDBjLCAweDAwMDR9LCAvKiAwMCwwYywwNCxhYSAqLworCXsweGFhLCAweDBlLCAweDAwODF9LCAvKiAwMCwwZSw4MSxhYSAqLworCXsweGFhLCAweDBmLCAweDAwMDJ9LCAvKiAwMCwwZiwwMixhYSAqLworCXsweGFhLCAweDFjLCAweDAwODB9LCAvKiAwMCwxYyw4MCxhYSAqLworCXsweGFhLCAweDFkLCAweDAwMDJ9LCAvKiAwMCwxZCwwMixhYSAqLworCXsweGFhLCAweDIwLCAweDAwODB9LCAvKiAwMCwyMCw4MCxhYSAqLworCXsweGFhLCAweDIyLCAweDAwODB9LCAvKiAwMCwyMiw4MCxhYSAqLworCXsweGFhLCAweDI0LCAweDAwODB9LCAvKiAwMCwyNCw4MCxhYSAqLworCXsweGFhLCAweDI2LCAweDAwODB9LCAvKiAwMCwyNiw4MCxhYSAqLworCXsweGFhLCAweDAwLCAweDAwODR9LCAvKiAwMCwwMCw4NCxhYSAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMEEzX0VYUE9TVVJFVElNRUhJR0h9LCAvKiAwMCxhMywwMixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMEE0X0VYUE9TVVJFVElNRUxPV30sIC8qIDAwLGE0LDgwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwwNCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MiwyMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsMTAsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHhjMSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsYzEsY2MgKi8KKwl7MHhhMCwgMHhkNCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsZDQsY2MgKi8KKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsZTgsY2MgKi8KKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwgLyogMDAsMjAsZmYsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sIC8qIDAxLGE3LDAwLGNjICovCisJezB4YTAsIDB4YzAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LCAvKiAwMSxhOCxjMCxjYyAqLworCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl9Jbml0aWFsU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwgLyogMDAsMDAsMDEsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sIC8qIDAwLDAyLDAwLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sIC8qIDAwLDEwLDAxLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwgLyogMDAsMDEsMDEsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LCAvKiAwMCwwOCwwMyxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LCAvKiAwMCwxMiwwMSxjYyAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LCAvKiAwMCwxMiwwNSxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwgLyogMDAsMDMsMDIsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwgLyogMDAsMDQsODAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LCAvKiAwMCwwNSwwMSxjYyAqLworCXsweGEwLCAweGQ4LCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwgLyogMDAsMDYsZDgsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LCAvKiAwMCw5OCwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sIC8qIDAwLDlhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwgLyogMDEsMWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LCAvKiAwMSwxYywwMCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDlCX1dJTkhFSUdIVEhJR0h9LCAvKiAwMCw5YiwwMSxjYyAqLworCXsweGEwLCAweGRlLCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sIC8qIDAwLDljLGRlLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOURfV0lOV0lEVEhISUdIfSwgLyogMDAsOWQsMDIsY2MgKi8KKwl7MHhhMCwgMHg4NiwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sIC8qIDAwLDllLDg2LGNjICovCisJezB4YTAsIDB4MzMsIFpDM1hYX1IwODZfRVhQVElNRUhJR0h9LCAvKiAwMCw4NiwzMyxjYyAqLworCXsweGEwLCAweDM0LCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LCAvKiAwMCw4NywzNCxjYyAqLworCXsweGEwLCAweDM1LCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LCAvKiAwMCw4OCwzNSxjYyAqLworCXsweGEwLCAweGIwLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LCAvKiAwMCw4YixiMCxjYyAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LCAvKiAwMCwxMiwwNSxjYyAqLworCXsweGFhLCAweDAxLCAweDAwMDF9LCAvKiAwMCwwMSwwMSxhYSAqLworCXsweGFhLCAweDAxLCAweDAwMDN9LCAvKiAwMCwwMSwwMyxhYSAqLworCXsweGFhLCAweDAxLCAweDAwMDF9LCAvKiAwMCwwMSwwMSxhYSAqLworCXsweGFhLCAweDAzLCAweDAwMDB9LCAvKiAwMCwwMywwMCxhYSAqLworCXsweGFhLCAweDEwLCAweDAwMDB9LCAvKiAwMCwxMCwwMCxhYSAqLworCXsweGFhLCAweDExLCAweDAwODB9LCAvKiAwMCwxMSw4MCxhYSAqLworCXsweGFhLCAweDEyLCAweDAwMDB9LCAvKiAwMCwxMiwwMCxhYSAqLworCXsweGFhLCAweDEzLCAweDAwMDB9LCAvKiAwMCwxMywwMCxhYSAqLworCXsweGFhLCAweDE0LCAweDAwMDB9LCAvKiAwMCwxNCwwMCxhYSAqLworCXsweGFhLCAweDE1LCAweDAwMDB9LCAvKiAwMCwxNSwwMCxhYSAqLworCXsweGFhLCAweDE2LCAweDAwMDB9LCAvKiAwMCwxNiwwMCxhYSAqLworCXsweGFhLCAweDE3LCAweDAwMDF9LCAvKiAwMCwxNywwMSxhYSAqLworCXsweGFhLCAweDE4LCAweDAwZGV9LCAvKiAwMCwxOCxkZSxhYSAqLworCXsweGFhLCAweDE5LCAweDAwMDJ9LCAvKiAwMCwxOSwwMixhYSAqLworCXsweGFhLCAweDFhLCAweDAwODZ9LCAvKiAwMCwxYSw4NixhYSAqLworCXsweGFhLCAweDIwLCAweDAwYTh9LCAvKiAwMCwyMCxhOCxhYSAqLworCXsweGFhLCAweDIyLCAweDAwMDB9LCAvKiAwMCwyMiwwMCxhYSAqLworCXsweGFhLCAweDIzLCAweDAwMDB9LCAvKiAwMCwyMywwMCxhYSAqLworCXsweGFhLCAweDI0LCAweDAwMDB9LCAvKiAwMCwyNCwwMCxhYSAqLworCXsweGFhLCAweDQwLCAweDAwMzN9LCAvKiAwMCw0MCwzMyxhYSAqLworCXsweGFhLCAweDQxLCAweDAwNzd9LCAvKiAwMCw0MSw3NyxhYSAqLworCXsweGFhLCAweDQyLCAweDAwNTN9LCAvKiAwMCw0Miw1MyxhYSAqLworCXsweGFhLCAweDQzLCAweDAwYjB9LCAvKiAwMCw0MyxiMCxhYSAqLworCXsweGFhLCAweDRiLCAweDAwMDF9LCAvKiAwMCw0YiwwMSxhYSAqLworCXsweGFhLCAweDcyLCAweDAwMjB9LCAvKiAwMCw3MiwyMCxhYSAqLworCXsweGFhLCAweDczLCAweDAwMDB9LCAvKiAwMCw3MywwMCxhYSAqLworCXsweGFhLCAweDgwLCAweDAwMDB9LCAvKiAwMCw4MCwwMCxhYSAqLworCXsweGFhLCAweDg1LCAweDAwNTB9LCAvKiAwMCw4NSw1MCxhYSAqLworCXsweGFhLCAweDkxLCAweDAwNzB9LCAvKiAwMCw5MSw3MCxhYSAqLworCXsweGFhLCAweDkyLCAweDAwNzJ9LCAvKiAwMCw5Miw3MixhYSAqLworCXsweGFhLCAweDAzLCAweDAwMDF9LCAvKiAwMCwwMywwMSxhYSAqLworCXsweGFhLCAweDEwLCAweDAwYTB9LCAvKiAwMCwxMCxhMCxhYSAqLworCXsweGFhLCAweDExLCAweDAwMDF9LCAvKiAwMCwxMSwwMSxhYSAqLworCXsweGFhLCAweDMwLCAweDAwMDB9LCAvKiAwMCwzMCwwMCxhYSAqLworCXsweGFhLCAweDYwLCAweDAwMDB9LCAvKiAwMCw2MCwwMCxhYSAqLworCXsweGFhLCAweGEwLCBaQzNYWF9SMDFBX0xBU1RGUkFNRVNUQVRFfSwgLyogMDAsYTAsMWEsYWEgKi8KKwl7MHhhYSwgMHhhMSwgMHgwMDAwfSwgLyogMDAsYTEsMDAsYWEgKi8KKwl7MHhhYSwgMHhhMiwgMHgwMDNmfSwgLyogMDAsYTIsM2YsYWEgKi8KKwl7MHhhYSwgMHhhMywgMHgwMDI4fSwgLyogMDAsYTMsMjgsYWEgKi8KKwl7MHhhYSwgMHhhNCwgMHgwMDEwfSwgLyogMDAsYTQsMTAsYWEgKi8KKwl7MHhhYSwgMHhhNSwgMHgwMDIwfSwgLyogMDAsYTUsMjAsYWEgKi8KKwl7MHhhYSwgMHhiMSwgMHgwMDQ0fSwgLyogMDAsYjEsNDQsYWEgKi8KKwl7MHhhYSwgMHhkMCwgMHgwMDAxfSwgLyogMDAsZDAsMDEsYWEgKi8KKwl7MHhhYSwgMHhkMSwgMHgwMDg1fSwgLyogMDAsZDEsODUsYWEgKi8KKwl7MHhhYSwgMHhkMiwgMHgwMDgwfSwgLyogMDAsZDIsODAsYWEgKi8KKwl7MHhhYSwgMHhkMywgMHgwMDgwfSwgLyogMDAsZDMsODAsYWEgKi8KKwl7MHhhYSwgMHhkNCwgMHgwMDgwfSwgLyogMDAsZDQsODAsYWEgKi8KKwl7MHhhYSwgMHhkNSwgMHgwMDgwfSwgLyogMDAsZDUsODAsYWEgKi8KKwl7MHhhYSwgMHhjMCwgMHgwMGMzfSwgLyogMDAsYzAsYzMsYWEgKi8KKwl7MHhhYSwgMHhjMiwgMHgwMDQ0fSwgLyogMDAsYzIsNDQsYWEgKi8KKwl7MHhhYSwgMHhjNCwgMHgwMDQwfSwgLyogMDAsYzQsNDAsYWEgKi8KKwl7MHhhYSwgMHhjNSwgMHgwMDIwfSwgLyogMDAsYzUsMjAsYWEgKi8KKwl7MHhhYSwgMHhjNiwgMHgwMDA4fSwgLyogMDAsYzYsMDgsYWEgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDA0fSwgLyogMDAsMDMsMDQsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMDAwfSwgLyogMDAsMTAsMDAsYWEgKi8KKwl7MHhhYSwgMHg0MCwgMHgwMDMwfSwgLyogMDAsNDAsMzAsYWEgKi8KKwl7MHhhYSwgMHg0MSwgMHgwMDIwfSwgLyogMDAsNDEsMjAsYWEgKi8KKwl7MHhhYSwgMHg0MiwgMHgwMDJkfSwgLyogMDAsNDIsMmQsYWEgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHgxYywgMHgwMDUwfSwgLyogMDAsMUMsNTAsYWEgKi8KKwl7MHhhYSwgMHgxMSwgMHgwMDgxfSwgLyogMDAsMTEsODEsYWEgKi8KKwl7MHhhYSwgMHgzYiwgMHgwMDFkfSwgLyogMDAsM2IsMUQsYWEgKi8KKwl7MHhhYSwgMHgzYywgMHgwMDRjfSwgLyogMDAsM2MsNEMsYWEgKi8KKwl7MHhhYSwgMHgzZCwgMHgwMDE4fSwgLyogMDAsM2QsMTgsYWEgKi8KKwl7MHhhYSwgMHgzZSwgMHgwMDZhfSwgLyogMDAsM2UsNkEsYWEgKi8KKwl7MHhhYSwgMHgwMSwgMHgwMDAwfSwgLyogMDAsMDEsMDAsYWEgKi8KKwl7MHhhYSwgMHg1MiwgMHgwMGZmfSwgLyogMDAsNTIsRkYsYWEgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwgLyogMDEsMDAsMGQsY2MgKi8KKwl7MHhhMCwgMHgzNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwgLyogMDEsMDEsMzcsY2MgKi8KKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LCAvKiAwMSw4OSwwNixjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LCAvKiAwMSxjNSwwMyxjYyAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwgLyogMDEsY2IsMTMsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sIC8qIDAyLDUwLDA4LGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwgLyogMDMsMDEsMDgsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sIC8qIDAxLDgwLDAyLGNjICovCisJezB4YWEsIDB4MDMsIDB4MDAwMn0sIC8qIDAwLDAzLDAyLGFhICovCisJezB4YWEsIDB4NTEsIDB4MDAyN30sIC8qIDAwLDUxLDI3LGFhICovCisJezB4YWEsIDB4NTIsIDB4MDAyMH0sIC8qIDAwLDUyLDIwLGFhICovCisJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCisJezB4YWEsIDB4NTAsIDB4MDAxMH0sIC8qIDAwLDUwLDEwLGFhICovCisJezB4YWEsIDB4NTEsIDB4MDAxMH0sIC8qIDAwLDUxLDEwLGFhICovCisJezB4YWEsIDB4NTQsIDB4MDAxMH0sIC8qIDAwLDU0LDEwLGFhICovCisJezB4YWEsIDB4NTUsIDB4MDAxMH0sIC8qIDAwLDU1LDEwLGFhICovCisJezB4YTAsIDB4ZjAsIDB4MDE5OX0sIC8qIDAxLDk5LEYwLGNjICovCisJezB4YTAsIDB4ODAsIDB4MDE5YX0sIC8qIDAxLDlBLDgwLGNjICovCisKKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KKwl7MHhhYSwgMHgzNiwgMHgwMDFkfSwgLyogMDAsMzYsMUQsYWEgKi8KKwl7MHhhYSwgMHgzNywgMHgwMDRjfSwgLyogMDAsMzcsNEMsYWEgKi8KKwl7MHhhYSwgMHgzYiwgMHgwMDFkfSwgLyogMDAsM0IsMUQsYWEgKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfSW5pdGlhbFtdID0gewkgLyogMzIweDI0MCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwgLyogMDAsMDIsMTAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwgLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LCAvKiAwMCwwMSwwMSxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sIC8qIDAwLDA4LDAzLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDAxLGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDA1LGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LCAvKiAwMCwwMywwMixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LCAvKiAwMCwwNCw4MCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sIC8qIDAwLDA1LDAxLGNjICovCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LCAvKiAwMCwwNixkMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sIC8qIDAwLDk4LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwgLyogMDAsOWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LCAvKiAwMSwxYSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sIC8qIDAxLDFjLDAwLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOUJfV0lOSEVJR0hUSElHSH0sIC8qIDAwLDliLDAxLGNjICovCisJezB4YTAsIDB4ZDgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwgLyogMDAsOWMsZDgsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5RF9XSU5XSURUSEhJR0h9LCAvKiAwMCw5ZCwwMixjYyAqLworCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwgLyogMDAsOWUsODgsY2MgKi8KKwl7MHhhMCwgMHgzMywgWkMzWFhfUjA4Nl9FWFBUSU1FSElHSH0sIC8qIDAwLDg2LDMzLGNjICovCisJezB4YTAsIDB4MzQsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sIC8qIDAwLDg3LDM0LGNjICovCisJezB4YTAsIDB4MzUsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sIC8qIDAwLDg4LDM1LGNjICovCisJezB4YTAsIDB4YjAsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sIC8qIDAwLDhiLGIwLGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDA1LGNjICovCisJezB4YWEsIDB4MDEsIDB4MDAwMX0sIC8qIDAwLDAxLDAxLGFhICovCisJezB4YWEsIDB4MDEsIDB4MDAwM30sIC8qIDAwLDAxLDAzLGFhICovCisJezB4YWEsIDB4MDEsIDB4MDAwMX0sIC8qIDAwLDAxLDAxLGFhICovCisJezB4YWEsIDB4MDMsIDB4MDAwMH0sIC8qIDAwLDAzLDAwLGFhICovCisJezB4YWEsIDB4MTAsIDB4MDAwMH0sIC8qIDAwLDEwLDAwLGFhICovCisJezB4YWEsIDB4MTEsIDB4MDA4MH0sIC8qIDAwLDExLDgwLGFhICovCisJezB4YWEsIDB4MTIsIDB4MDAwMH0sIC8qIDAwLDEyLDAwLGFhICovCisJezB4YWEsIDB4MTMsIDB4MDAwMH0sIC8qIDAwLDEzLDAwLGFhICovCisJezB4YWEsIDB4MTQsIDB4MDAwMH0sIC8qIDAwLDE0LDAwLGFhICovCisJezB4YWEsIDB4MTUsIDB4MDAwMH0sIC8qIDAwLDE1LDAwLGFhICovCisJezB4YWEsIDB4MTYsIDB4MDAwMH0sIC8qIDAwLDE2LDAwLGFhICovCisJezB4YWEsIDB4MTcsIDB4MDAwMX0sIC8qIDAwLDE3LDAxLGFhICovCisJezB4YWEsIDB4MTgsIDB4MDBkOH0sIC8qIDAwLDE4LGQ4LGFhICovCisJezB4YWEsIDB4MTksIDB4MDAwMn0sIC8qIDAwLDE5LDAyLGFhICovCisJezB4YWEsIDB4MWEsIDB4MDA4OH0sIC8qIDAwLDFhLDg4LGFhICovCisJezB4YWEsIDB4MjAsIDB4MDBhOH0sIC8qIDAwLDIwLGE4LGFhICovCisJezB4YWEsIDB4MjIsIDB4MDAwMH0sIC8qIDAwLDIyLDAwLGFhICovCisJezB4YWEsIDB4MjMsIDB4MDAwMH0sIC8qIDAwLDIzLDAwLGFhICovCisJezB4YWEsIDB4MjQsIDB4MDAwMH0sIC8qIDAwLDI0LDAwLGFhICovCisJezB4YWEsIDB4NDAsIDB4MDAzM30sIC8qIDAwLDQwLDMzLGFhICovCisJezB4YWEsIDB4NDEsIDB4MDA3N30sIC8qIDAwLDQxLDc3LGFhICovCisJezB4YWEsIDB4NDIsIDB4MDA1M30sIC8qIDAwLDQyLDUzLGFhICovCisJezB4YWEsIDB4NDMsIDB4MDBiMH0sIC8qIDAwLDQzLGIwLGFhICovCisJezB4YWEsIDB4NGIsIDB4MDAwMX0sIC8qIDAwLDRiLDAxLGFhICovCisJezB4YWEsIDB4NzIsIDB4MDAyMH0sIC8qIDAwLDcyLDIwLGFhICovCisJezB4YWEsIDB4NzMsIDB4MDAwMH0sIC8qIDAwLDczLDAwLGFhICovCisJezB4YWEsIDB4ODAsIDB4MDAwMH0sIC8qIDAwLDgwLDAwLGFhICovCisJezB4YWEsIDB4ODUsIDB4MDA1MH0sIC8qIDAwLDg1LDUwLGFhICovCisJezB4YWEsIDB4OTEsIDB4MDA3MH0sIC8qIDAwLDkxLDcwLGFhICovCisJezB4YWEsIDB4OTIsIDB4MDA3Mn0sIC8qIDAwLDkyLDcyLGFhICovCisJezB4YWEsIDB4MDMsIDB4MDAwMX0sIC8qIDAwLDAzLDAxLGFhICovCisJezB4YWEsIDB4MTAsIDB4MDBhMH0sIC8qIDAwLDEwLGEwLGFhICovCisJezB4YWEsIDB4MTEsIDB4MDAwMX0sIC8qIDAwLDExLDAxLGFhICovCisJezB4YWEsIDB4MzAsIDB4MDAwMH0sIC8qIDAwLDMwLDAwLGFhICovCisJezB4YWEsIDB4NjAsIDB4MDAwMH0sIC8qIDAwLDYwLDAwLGFhICovCisJezB4YWEsIDB4YTAsIFpDM1hYX1IwMUFfTEFTVEZSQU1FU1RBVEV9LCAvKiAwMCxhMCwxYSxhYSAqLworCXsweGFhLCAweGExLCAweDAwMDB9LCAvKiAwMCxhMSwwMCxhYSAqLworCXsweGFhLCAweGEyLCAweDAwM2Z9LCAvKiAwMCxhMiwzZixhYSAqLworCXsweGFhLCAweGEzLCAweDAwMjh9LCAvKiAwMCxhMywyOCxhYSAqLworCXsweGFhLCAweGE0LCAweDAwMTB9LCAvKiAwMCxhNCwxMCxhYSAqLworCXsweGFhLCAweGE1LCAweDAwMjB9LCAvKiAwMCxhNSwyMCxhYSAqLworCXsweGFhLCAweGIxLCAweDAwNDR9LCAvKiAwMCxiMSw0NCxhYSAqLworCXsweGFhLCAweGQwLCAweDAwMDF9LCAvKiAwMCxkMCwwMSxhYSAqLworCXsweGFhLCAweGQxLCAweDAwODV9LCAvKiAwMCxkMSw4NSxhYSAqLworCXsweGFhLCAweGQyLCAweDAwODB9LCAvKiAwMCxkMiw4MCxhYSAqLworCXsweGFhLCAweGQzLCAweDAwODB9LCAvKiAwMCxkMyw4MCxhYSAqLworCXsweGFhLCAweGQ0LCAweDAwODB9LCAvKiAwMCxkNCw4MCxhYSAqLworCXsweGFhLCAweGQ1LCAweDAwODB9LCAvKiAwMCxkNSw4MCxhYSAqLworCXsweGFhLCAweGMwLCAweDAwYzN9LCAvKiAwMCxjMCxjMyxhYSAqLworCXsweGFhLCAweGMyLCAweDAwNDR9LCAvKiAwMCxjMiw0NCxhYSAqLworCXsweGFhLCAweGM0LCAweDAwNDB9LCAvKiAwMCxjNCw0MCxhYSAqLworCXsweGFhLCAweGM1LCAweDAwMjB9LCAvKiAwMCxjNSwyMCxhYSAqLworCXsweGFhLCAweGM2LCAweDAwMDh9LCAvKiAwMCxjNiwwOCxhYSAqLworCXsweGFhLCAweDAzLCAweDAwMDR9LCAvKiAwMCwwMywwNCxhYSAqLworCXsweGFhLCAweDEwLCAweDAwMDB9LCAvKiAwMCwxMCwwMCxhYSAqLworCXsweGFhLCAweDQwLCAweDAwMzB9LCAvKiAwMCw0MCwzMCxhYSAqLworCXsweGFhLCAweDQxLCAweDAwMjB9LCAvKiAwMCw0MSwyMCxhYSAqLworCXsweGFhLCAweDQyLCAweDAwMmR9LCAvKiAwMCw0MiwyZCxhYSAqLworCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLworCXsweGFhLCAweDFjLCAweDAwNTB9LCAvKiAwMCwxYyw1MCxhYSAqLworCXsweGFhLCAweDExLCAweDAwODF9LCAvKiAwMCwxMSw4MSxhYSAqLworCXsweGFhLCAweDNiLCAweDAwM2F9LCAvKiAwMCwzYiwzQSxhYSAqLworCXsweGFhLCAweDNjLCAweDAwOTh9LCAvKiAwMCwzYyw5OCxhYSAqLworCXsweGFhLCAweDNkLCAweDAwMzB9LCAvKiAwMCwzZCwzMCxhYSAqLworCXsweGFhLCAweDNlLCAweDAwZDR9LCAvKiAwMCwzRSxENCxhYSAqLworCXsweGFhLCAweDAxLCAweDAwMDB9LCAvKiAwMCwwMSwwMCxhYSAqLworCXsweGFhLCAweDUyLCAweDAwZmZ9LCAvKiAwMCw1MixGRixhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLworCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LCAvKiAwMSwwMCwwZCxjYyAqLworCXsweGEwLCAweDM3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LCAvKiAwMSwwMSwzNyxjYyAqLworCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sIC8qIDAxLDg5LDA2LGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sIC8qIDAxLGM1LDAzLGNjICovCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LCAvKiAwMSxjYiwxMyxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwgLyogMDIsNTAsMDgsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LCAvKiAwMywwMSwwOCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwgLyogMDEsODAsMDIsY2MgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDAyfSwgLyogMDAsMDMsMDIsYWEgKi8KKwl7MHhhYSwgMHg1MSwgMHgwMDRlfSwgLyogMDAsNTEsNEUsYWEgKi8KKwl7MHhhYSwgMHg1MiwgMHgwMDQxfSwgLyogMDAsNTIsNDEsYWEgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHg1MCwgMHgwMDEwfSwgLyogMDAsNTAsMTAsYWEgKi8KKwl7MHhhYSwgMHg1MSwgMHgwMDEwfSwgLyogMDAsNTEsMTAsYWEgKi8KKwl7MHhhYSwgMHg1NCwgMHgwMDEwfSwgLyogMDAsNTQsMTAsYWEgKi8KKwl7MHhhYSwgMHg1NSwgMHgwMDEwfSwgLyogMDAsNTUsMTAsYWEgKi8KKwl7MHhhMCwgMHhmMCwgMHgwMTk5fSwgLyogMDEsOTksRjAsY2MgKi8KKwl7MHhhMCwgMHg4MCwgMHgwMTlhfSwgLyogMDEsOUEsODAsY2MgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KKwl7MHhhYSwgMHgzNiwgMHgwMDFkfSwgLyogMDAsMzYsMUQsYWEgKi8KKwl7MHhhYSwgMHgzNywgMHgwMDRjfSwgLyogMDAsMzcsNEMsYWEgKi8KKwl7MHhhYSwgMHgzYiwgMHgwMDFkfSwgLyogMDAsM0IsMUQsYWEgKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNTBIWltdID0geworCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLworCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLworCXsweGFhLCAweDM2LCAweDAwMWR9LCAvKiAwMCwzNiwxRCxhYSAqLworCXsweGFhLCAweDM3LCAweDAwNGN9LCAvKiAwMCwzNyw0QyxhYSAqLworCXsweGFhLCAweDNiLCAweDAwMWR9LCAvKiAwMCwzQiwxRCxhYSAqLworCXsweGFhLCAweDNjLCAweDAwNGN9LCAvKiAwMCwzQyw0QyxhYSAqLworCXsweGFhLCAweDNkLCAweDAwMWR9LCAvKiAwMCwzRCwxRCxhYSAqLworCXsweGFhLCAweDNlLCAweDAwNGN9LCAvKiAwMCwzRSw0QyxhYSAqLworCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLworCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLworCXsweGFhLCAweDM2LCAweDAwM2F9LCAvKiAwMCwzNiwzQSxhYSAqLworCXsweGFhLCAweDM3LCAweDAwOTh9LCAvKiAwMCwzNyw5OCxhYSAqLworCXsweGFhLCAweDNiLCAweDAwM2F9LCAvKiAwMCwzQiwzQSxhYSAqLworCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl81MEhaU2NhbGVbXSA9IHsKKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KKwl7MHhhYSwgMHgzNiwgMHgwMDNhfSwgLyogMDAsMzYsM0EsYWEgKi8KKwl7MHhhYSwgMHgzNywgMHgwMDk4fSwgLyogMDAsMzcsOTgsYWEgKi8KKwl7MHhhYSwgMHgzYiwgMHgwMDNhfSwgLyogMDAsM0IsM0EsYWEgKi8KKwl7MHhhYSwgMHgzYywgMHgwMDk4fSwgLyogMDAsM0MsOTgsYWEgKi8KKwl7MHhhYSwgMHgzZCwgMHgwMDNhfSwgLyogMDAsM0QsM0EsYWEgKi8KKwl7MHhhYSwgMHgzZSwgMHgwMDk4fSwgLyogMDAsM0UsOTgsYWEgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KKwl7MHhhYSwgMHgzNiwgMHgwMDE4fSwgLyogMDAsMzYsMTgsYWEgKi8KKwl7MHhhYSwgMHgzNywgMHgwMDZhfSwgLyogMDAsMzcsNkEsYWEgKi8KKwl7MHhhYSwgMHgzZCwgMHgwMDE4fSwgLyogMDAsM0QsMTgsYWEgKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNjBIWltdID0geworCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLworCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLworCXsweGFhLCAweDM2LCAweDAwMTh9LCAvKiAwMCwzNiwxOCxhYSAqLworCXsweGFhLCAweDM3LCAweDAwNmF9LCAvKiAwMCwzNyw2QSxhYSAqLworCXsweGFhLCAweDNkLCAweDAwMTh9LCAvKiAwMCwzRCwxOCxhYSAqLworCXsweGFhLCAweDNlLCAweDAwNmF9LCAvKiAwMCwzRSw2QSxhYSAqLworCXsweGFhLCAweDNiLCAweDAwMTh9LCAvKiAwMCwzQiwxOCxhYSAqLworCXsweGFhLCAweDNjLCAweDAwNmF9LCAvKiAwMCwzQyw2QSxhYSAqLworCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLworCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLworCXsweGFhLCAweDM2LCAweDAwMzB9LCAvKiAwMCwzNiwzMCxhYSAqLworCXsweGFhLCAweDM3LCAweDAwZDR9LCAvKiAwMCwzNyxENCxhYSAqLworCXsweGFhLCAweDNkLCAweDAwMzB9LCAvKiAwMCwzRCwzMCxhYSAqLworCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl82MEhaU2NhbGVbXSA9IHsKKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KKwl7MHhhYSwgMHgzNiwgMHgwMDMwfSwgLyogMDAsMzYsMzAsYWEgKi8KKwl7MHhhYSwgMHgzNywgMHgwMGQ0fSwgLyogMDAsMzcsRDQsYWEgKi8KKwl7MHhhYSwgMHgzZCwgMHgwMDMwfSwgLyogMDAsM0QsMzAsYWEgKi8KKwl7MHhhYSwgMHgzZSwgMHgwMGQ0fSwgLyogMDAsM0UsRDQsYWEgKi8KKwl7MHhhYSwgMHgzYiwgMHgwMDMwfSwgLyogMDAsM0IsMzAsYWEgKi8KKwl7MHhhYSwgMHgzYywgMHgwMGQ0fSwgLyogMDAsM0MsRDQsYWEgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KKwl7MHhhYSwgMHgzNiwgMHgwMDE4fSwgLyogMDAsMzYsMTgsYWEgKi8KKwl7MHhhYSwgMHgzNywgMHgwMDZhfSwgLyogMDAsMzcsNkEsYWEgKi8KKwl7MHhhYSwgMHgzZCwgMHgwMDE4fSwgLyogMDAsM0QsMTgsYWEgKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfTm9GbGlrZXJbXSA9IHsKKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KKwl7MHhhYSwgMHgzNiwgMHgwMDE4fSwgLyogMDAsMzYsMTgsYWEgKi8KKwl7MHhhYSwgMHgzNywgMHgwMDZhfSwgLyogMDAsMzcsNkEsYWEgKi8KKwl7MHhhYSwgMHgzZCwgMHgwMDE4fSwgLyogMDAsM0QsMTgsYWEgKi8KKwl7MHhhYSwgMHgzZSwgMHgwMDZhfSwgLyogMDAsM0UsNkEsYWEgKi8KKwl7MHhhYSwgMHgzYiwgMHgwMDE4fSwgLyogMDAsM0IsMTgsYWEgKi8KKwl7MHhhYSwgMHgzYywgMHgwMDZhfSwgLyogMDAsM0MsNkEsYWEgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KKwl7MHhhYSwgMHgzNiwgMHgwMDMwfSwgLyogMDAsMzYsMzAsYWEgKi8KKwl7MHhhYSwgMHgzNywgMHgwMGQ0fSwgLyogMDAsMzcsRDQsYWEgKi8KKwl7MHhhYSwgMHgzZCwgMHgwMDMwfSwgLyogMDAsM0QsMzAsYWEgKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfTm9GbGlrZXJTY2FsZVtdID0geworCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLworCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLworCXsweGFhLCAweDM2LCAweDAwMzB9LCAvKiAwMCwzNiwzMCxhYSAqLworCXsweGFhLCAweDM3LCAweDAwZDR9LCAvKiAwMCwzNyxENCxhYSAqLworCXsweGFhLCAweDNkLCAweDAwMzB9LCAvKiAwMCwzRCwzMCxhYSAqLworCXsweGFhLCAweDNlLCAweDAwZDR9LCAvKiAwMCwzRSxENCxhYSAqLworCXsweGFhLCAweDNiLCAweDAwMzB9LCAvKiAwMCwzQiwzMCxhYSAqLworCXsweGFhLCAweDNjLCAweDAwZDR9LCAvKiAwMCwzQyxENCxhYSAqLworCXt9Cit9OworCisvKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJSxJbml0aWFsIC0gNjQweDQ4MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF9tb2RlMFtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLworCXsweGEwLCAweDQwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwgLyogMDAsMDIsNDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LCAvKiAwMCwwOCwwMCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sIC8qIDAwLDAxLDAxLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sIC8qIDAwLDEwLDA2LGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwODNfUkdBSU5BRERSfSwgLyogMDAsODMsMDIsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA4NV9CR0FJTkFERFJ9LCAvKiAwMCw4NSwwMSxjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDg2X0VYUFRJTUVISUdIfSwgLyogMDAsODYsODAsY2MgKi8KKwl7MHhhMCwgMHg4MSwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwgLyogMDAsODcsODEsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwgLyogMDAsODgsMTAsY2MgKi8KKwl7MHhhMCwgMHhhMSwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwgLyogMDAsOGIsYTEsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjA4RF9DT01QQUJJTElUWU1PREV9LCAvKiAwMCw4ZCwwOCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwgLyogMDAsMDMsMDIsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwgLyogMDAsMDQsODAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LCAvKiAwMCwwNSwwMSxjYyAqLworCXsweGEwLCAweGQ4LCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwgLyogMDAsMDYsZDgsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwgLyogMDAsMTIsMDMsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwgLyogMDAsMTIsMDEsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LCAvKiAwMCw5OCwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sIC8qIDAwLDlhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwgLyogMDEsMWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LCAvKiAwMSwxYywwMCxjYyAqLworCXsweGEwLCAweGRlLCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sIC8qIDAwLDljLGRlLGNjICovCisJezB4YTAsIDB4ODYsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LCAvKiAwMCw5ZSw4NixjYyAqLworCXsweGFhLCAweDEyLCAweDAwODh9LCAvKiAwMCwxMiw4OCxhYSAqLworCXsweGFhLCAweDEyLCAweDAwNDh9LCAvKiAwMCwxMiw0OCxhYSAqLworCXsweGFhLCAweDc1LCAweDAwOGF9LCAvKiAwMCw3NSw4YSxhYSAqLworCXsweGFhLCAweDEzLCAweDAwYTN9LCAvKiAwMCwxMyxhMyxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMDB9LCAvKiAwMCwwNCwwMCxhYSAqLworCXsweGFhLCAweDA1LCAweDAwMDB9LCAvKiAwMCwwNSwwMCxhYSAqLworCXsweGFhLCAweDE0LCAweDAwMDB9LCAvKiAwMCwxNCwwMCxhYSAqLworCXsweGFhLCAweDE1LCAweDAwMDR9LCAvKiAwMCwxNSwwNCxhYSAqLworCXsweGFhLCAweDE3LCAweDAwMTh9LCAvKiAwMCwxNywxOCxhYSAqLworCXsweGFhLCAweDE4LCAweDAwYmF9LCAvKiAwMCwxOCxiYSxhYSAqLworCXsweGFhLCAweDE5LCAweDAwMDJ9LCAvKiAwMCwxOSwwMixhYSAqLworCXsweGFhLCAweDFhLCAweDAwZjF9LCAvKiAwMCwxYSxmMSxhYSAqLworCXsweGFhLCAweDIwLCAweDAwNDB9LCAvKiAwMCwyMCw0MCxhYSAqLworCXsweGFhLCAweDI0LCAweDAwODh9LCAvKiAwMCwyNCw4OCxhYSAqLworCXsweGFhLCAweDI1LCAweDAwNzh9LCAvKiAwMCwyNSw3OCxhYSAqLworCXsweGFhLCAweDI3LCAweDAwZjZ9LCAvKiAwMCwyNyxmNixhYSAqLworCXsweGFhLCAweDI4LCAweDAwYTB9LCAvKiAwMCwyOCxhMCxhYSAqLworCXsweGFhLCAweDIxLCAweDAwMDB9LCAvKiAwMCwyMSwwMCxhYSAqLworCXsweGFhLCAweDJhLCAweDAwODN9LCAvKiAwMCwyYSw4MyxhYSAqLworCXsweGFhLCAweDJiLCAweDAwOTZ9LCAvKiAwMCwyYiw5NixhYSAqLworCXsweGFhLCAweDJkLCAweDAwMDV9LCAvKiAwMCwyZCwwNSxhYSAqLworCXsweGFhLCAweDc0LCAweDAwMjB9LCAvKiAwMCw3NCwyMCxhYSAqLworCXsweGFhLCAweDYxLCAweDAwNjh9LCAvKiAwMCw2MSw2OCxhYSAqLworCXsweGFhLCAweDY0LCAweDAwODh9LCAvKiAwMCw2NCw4OCxhYSAqLworCXsweGFhLCAweDAwLCAweDAwMDB9LCAvKiAwMCwwMCwwMCxhYSAqLworCXsweGFhLCAweDA2LCAweDAwODB9LCAvKiAwMCwwNiw4MCxhYSAqLworCXsweGFhLCAweDAxLCAweDAwOTB9LCAvKiAwMCwwMSw5MCxhYSAqLworCXsweGFhLCAweDAyLCAweDAwMzB9LCAvKiAwMCwwMiwzMCxhYSAqLworCXsweGEwLCAweDc3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LCAvKiAwMSwwMSw3NyxjYyAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LCAvKiAwMCwxMiwwNSxjYyAqLworCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LCAvKiAwMSwwMCwwZCxjYyAqLworCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sIC8qIDAxLDg5LDA2LGNjICovCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sIC8qIDAxLGFkLDAwLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sIC8qIDAxLGM1LDAzLGNjICovCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LCAvKiAwMSxjYiwxMyxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwgLyogMDIsNTAsMDgsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LCAvKiAwMywwMSwwOCxjYyAqLworCXsweGEwLCAweDY4LCBaQzNYWF9SMTE2X1JHQUlOfSwgLyogMDEsMTYsNjgsY2MgKi8KKwl7MHhhMCwgMHg1MiwgWkMzWFhfUjExOF9CR0FJTn0sIC8qIDAxLDE4LDUyLGNjICovCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sIC8qIDAxLDFkLDQwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LCAvKiAwMSw4MCwwMixjYyAqLworCXsweGEwLCAweDUwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwgLyogMDEsYTgsNTAsY2MgKi8KKwl7fQorfTsKKworLyogZnJvbSB6czIxMS5pbmYgLSBIS1IsJU9WNzYyMCUsSW5pdGlhbFNjYWxlIC0gMzIweDI0MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF9tb2RlMVtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLworCXsweGEwLCAweDUwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJLyogMDAsMDIsNTAsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiAwMCwwOCwwMCxjYyAqLworCQkJCQkJLyogbXggY2hhbmdlPyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sIC8qIDAwLDAxLDAxLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sIC8qIDAwLDEwLDA2LGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwODNfUkdBSU5BRERSfSwJLyogMDAsODMsMDIsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA4NV9CR0FJTkFERFJ9LAkvKiAwMCw4NSwwMSxjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDg2X0VYUFRJTUVISUdIfSwJLyogMDAsODYsODAsY2MgKi8KKwl7MHhhMCwgMHg4MSwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJLyogMDAsODcsODEsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJLyogMDAsODgsMTAsY2MgKi8KKwl7MHhhMCwgMHhhMSwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwgLyogMDAsOGIsYTEsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjA4RF9DT01QQUJJTElUWU1PREV9LCAvKiAwMCw4ZCwwOCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwgLyogMDAsMDMsMDIsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwgLyogMDAsMDQsODAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LCAvKiAwMCwwNSwwMSxjYyAqLworCXsweGEwLCAweGQwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwgLyogMDAsMDYsZDAsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwgLyogMDAsMTIsMDMsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwgLyogMDAsMTIsMDEsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAkvKiAwMCw5OCwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCS8qIDAwLDlhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwJLyogMDEsMWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAkvKiAwMSwxYywwMCxjYyAqLworCXsweGEwLCAweGQ2LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCS8qIDAwLDljLGQ2LGNjICovCisJCQkJCQkvKiBPVjc2NDggMDAsOWMsZDgsY2MgKi8KKwl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCS8qIDAwLDllLDg4LGNjICovCisJezB4YWEsIDB4MTIsIDB4MDA4OH0sIC8qIDAwLDEyLDg4LGFhICovCisJezB4YWEsIDB4MTIsIDB4MDA0OH0sIC8qIDAwLDEyLDQ4LGFhICovCisJezB4YWEsIDB4NzUsIDB4MDA4YX0sIC8qIDAwLDc1LDhhLGFhICovCisJezB4YWEsIDB4MTMsIDB4MDBhM30sIC8qIDAwLDEzLGEzLGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAwMH0sIC8qIDAwLDA0LDAwLGFhICovCisJezB4YWEsIDB4MDUsIDB4MDAwMH0sIC8qIDAwLDA1LDAwLGFhICovCisJezB4YWEsIDB4MTQsIDB4MDAwMH0sIC8qIDAwLDE0LDAwLGFhICovCisJezB4YWEsIDB4MTUsIDB4MDAwNH0sIC8qIDAwLDE1LDA0LGFhICovCisJezB4YWEsIDB4MjQsIDB4MDA4OH0sIC8qIDAwLDI0LDg4LGFhICovCisJezB4YWEsIDB4MjUsIDB4MDA3OH0sIC8qIDAwLDI1LDc4LGFhICovCisJezB4YWEsIDB4MTcsIDB4MDAxOH0sIC8qIDAwLDE3LDE4LGFhICovCisJezB4YWEsIDB4MTgsIDB4MDBiYX0sIC8qIDAwLDE4LGJhLGFhICovCisJezB4YWEsIDB4MTksIDB4MDAwMn0sIC8qIDAwLDE5LDAyLGFhICovCisJezB4YWEsIDB4MWEsIDB4MDBmMn0sIC8qIDAwLDFhLGYyLGFhICovCisJezB4YWEsIDB4MjAsIDB4MDA0MH0sIC8qIDAwLDIwLDQwLGFhICovCisJezB4YWEsIDB4MjcsIDB4MDBmNn0sIC8qIDAwLDI3LGY2LGFhICovCisJezB4YWEsIDB4MjgsIDB4MDBhMH0sIC8qIDAwLDI4LGEwLGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAwMH0sIC8qIDAwLDIxLDAwLGFhICovCisJezB4YWEsIDB4MmEsIDB4MDA4M30sIC8qIDAwLDJhLDgzLGFhICovCisJezB4YWEsIDB4MmIsIDB4MDA5Nn0sIC8qIDAwLDJiLDk2LGFhICovCisJezB4YWEsIDB4MmQsIDB4MDAwNX0sIC8qIDAwLDJkLDA1LGFhICovCisJezB4YWEsIDB4NzQsIDB4MDAyMH0sIC8qIDAwLDc0LDIwLGFhICovCisJezB4YWEsIDB4NjEsIDB4MDA2OH0sIC8qIDAwLDYxLDY4LGFhICovCisJezB4YWEsIDB4NjQsIDB4MDA4OH0sIC8qIDAwLDY0LDg4LGFhICovCisJezB4YWEsIDB4MDAsIDB4MDAwMH0sIC8qIDAwLDAwLDAwLGFhICovCisJezB4YWEsIDB4MDYsIDB4MDA4MH0sIC8qIDAwLDA2LDgwLGFhICovCisJezB4YWEsIDB4MDEsIDB4MDA5MH0sIC8qIDAwLDAxLDkwLGFhICovCisJezB4YWEsIDB4MDIsIDB4MDAzMH0sIC8qIDAwLDAyLDMwLGFhICovCisJezB4YTAsIDB4NzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sIC8qIDAxLDAxLDc3LGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDA1LGNjICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sIC8qIDAxLDAwLDBkLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJLyogMDEsODksMDYsY2MgKi8KKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwJCQkvKiAwMSxhZCwwMCxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LCAvKiAwMSxjNSwwMyxjYyAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogMDEsY2IsMTMsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sIC8qIDAyLDUwLDA4LGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwJLyogMDMsMDEsMDgsY2MgKi8KKwl7MHhhMCwgMHg2OCwgWkMzWFhfUjExNl9SR0FJTn0sCQkvKiAwMSwxNiw2OCxjYyAqLworCXsweGEwLCAweDUyLCBaQzNYWF9SMTE4X0JHQUlOfSwJCS8qIDAxLDE4LDUyLGNjICovCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCS8qIDAxLDFkLDUwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LCAvKiAwMSw4MCwwMixjYyAqLworCXsweGEwLCAweDUwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwJLyogMDEsYTgsNTAsY2MgKi8KKwl7fQorfTsKKworLyogZnJvbSB6czIxMS5pbmYgLSBIS1IsJU9WNzYyMCVcQUUsNTBIWiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF81MEhaW10gPSB7CisJezB4YWEsIDB4MTMsIDB4MDBhM30sCS8qIDAwLDEzLGEzLGFhICovCisJezB4ZGQsIDB4MDAsIDB4MDEwMH0sCS8qIDAwLDAxLDAwLGRkICovCisJezB4YWEsIDB4MmIsIDB4MDA5Nn0sCS8qIDAwLDJiLDk2LGFhICovCisJezB4YWEsIDB4NzUsIDB4MDA4YX0sCS8qIDAwLDc1LDhhLGFhICovCisJezB4YWEsIDB4MmQsIDB4MDAwNX0sCS8qIDAwLDJkLDA1LGFhICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwNCxjYyAqLworCXsweGEwLCAweDE4LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MiwxOCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDgzLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsODMsY2MgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMDgyfSwJCQkJLyogMDAsMTAsODIsYWEgKi8KKwl7MHhhYSwgMHg3NiwgMHgwMDAzfSwJCQkJLyogMDAsNzYsMDMsYWEgKi8KKy8qCXsweGEwLCAweDQwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJCSAqIDAwLDAyLDQwLGNjCisJCQkJCQkJIGlmIG1vZGUwICg2NDB4NDgwKSAqLworCXt9Cit9OworCisvKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJVxBRSw2MEhaICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwXzYwSFpbXSA9IHsKKwl7MHhhYSwgMHgxMywgMHgwMGEzfSwJCQkvKiAwMCwxMyxhMyxhYSAqLworCQkJCQkJLyogKGJ1ZyBpbiB6czIxMS5pbmYpICovCisJezB4ZGQsIDB4MDAsIDB4MDEwMH0sCQkJLyogMDAsMDEsMDAsZGQgKi8KKwl7MHhhYSwgMHgyYiwgMHgwMDAwfSwJCQkvKiAwMCwyYiwwMCxhYSAqLworCXsweGFhLCAweDc1LCAweDAwOGF9LAkJCS8qIDAwLDc1LDhhLGFhICovCisJezB4YWEsIDB4MmQsIDB4MDAwNX0sCQkJLyogMDAsMmQsMDUsYWEgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDA0LGNjICovCisJezB4YTAsIDB4MTgsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLDE4LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4ODMsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5Nyw4MyxjYyAqLworCXsweGFhLCAweDEwLCAweDAwMjB9LAkJCS8qIDAwLDEwLDIwLGFhICovCisJezB4YWEsIDB4NzYsIDB4MDAwM30sCQkJLyogMDAsNzYsMDMsYWEgKi8KKy8qCXsweGEwLCAweDQwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJICogMDAsMDIsNDAsY2MKKwkJCQkJCSAqIGlmIG1vZGUwICg2NDB4NDgwKSAqLworLyogPz8gaW4gZ3NwY2EgdjEsIGl0IHdhcworCXsweGEwLCAweDAwLCAweDAwMzl9LCAgKiAwMCwwMCwwMCxkZCAqCisJezB4YTEsIDB4MDEsIDB4MDAzN30sCQkqLworCXt9Cit9OworCisvKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJVxBRSxOb0ZsaWtlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF9Ob0ZsaWtlcltdID0geworCXsweGFhLCAweDEzLCAweDAwYTN9LAkJCS8qIDAwLDEzLGEzLGFhICovCisJCQkJCQkvKiAoYnVnIGluIHpzMjExLmluZikgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMTAwfSwJCQkvKiAwMCwwMSwwMCxkZCAqLworCXsweGFhLCAweDJiLCAweDAwMDB9LAkJCS8qIDAwLDJiLDAwLGFhICovCisJezB4YWEsIDB4NzUsIDB4MDA4ZX0sCQkJLyogMDAsNzUsOGUsYWEgKi8KKwl7MHhhYSwgMHgyZCwgMHgwMDAxfSwJCQkvKiAwMCwyZCwwMSxhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsMDQsY2MgKi8KKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsMTgsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDAxLGNjICovCisvKgl7MHhhMCwgMHg0NCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCSAqIDAwLDAyLDQ0LGNjCisJCQkJCQkgLSBpZiBtb2RlMSAoMzIweDI0MCkgKi8KKy8qID8/IHdhcworCXsweGEwLCAweDAwLCAweDAwMzl9LCAgKiAwMCwwMCwwMCxkZCAqCisJezB4YTEsIDB4MDEsIDB4MDAzN30sCQkqLworCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4YTEsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwOERfQ09NUEFCSUxJVFlNT0RFfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YWEsIDB4MTIsIDB4MDA4MH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwODNfUkdBSU5BRERSfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA4NV9CR0FJTkFERFJ9LAorCXsweGEwLCAweDkwLCBaQzNYWF9SMDg2X0VYUFRJTUVISUdIfSwKKwl7MHhhMCwgMHg5MSwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAorCXsweGEwLCAweGQ4LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAorCXsweGFhLCAweDEyLCAweDAwNjl9LAorCXsweGFhLCAweDA0LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwNTB9LAorCXsweGFhLCAweDEzLCAweDAwODN9LAorCXsweGFhLCAweDE0LCAweDAwMDB9LAorCXsweGFhLCAweDE1LCAweDAwMjR9LAorCXsweGFhLCAweDE3LCAweDAwMTh9LAorCXsweGFhLCAweDE4LCAweDAwYmF9LAorCXsweGFhLCAweDE5LCAweDAwMDJ9LAorCXsweGFhLCAweDFhLCAweDAwZjZ9LAorCXsweGFhLCAweDFiLCAweDAwMDJ9LAorCXsweGFhLCAweDIwLCAweDAwYzJ9LAorCXsweGFhLCAweDI0LCAweDAwNjB9LAorCXsweGFhLCAweDI1LCAweDAwNDB9LAorCXsweGFhLCAweDI2LCAweDAwMzB9LAorCXsweGFhLCAweDI3LCAweDAwZWF9LAorCXsweGFhLCAweDI4LCAweDAwYTB9LAorCXsweGFhLCAweDIxLCAweDAwMDB9LAorCXsweGFhLCAweDJhLCAweDAwODF9LAorCXsweGFhLCAweDJiLCAweDAwOTZ9LAorCXsweGFhLCAweDJkLCAweDAwOTR9LAorCXsweGFhLCAweDJmLCAweDAwM2R9LAorCXsweGFhLCAweDMwLCAweDAwMjR9LAorCXsweGFhLCAweDYwLCAweDAwMDB9LAorCXsweGFhLCAweDYxLCAweDAwNDB9LAorCXsweGFhLCAweDY4LCAweDAwN2N9LAorCXsweGFhLCAweDZmLCAweDAwMTV9LAorCXsweGFhLCAweDc1LCAweDAwODh9LAorCXsweGFhLCAweDc3LCAweDAwYjV9LAorCXsweGFhLCAweDAxLCAweDAwNjB9LAorCXsweGFhLCAweDAyLCAweDAwNjB9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDc3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDAwLCAweDAxYWR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NDYsIFpDM1hYX1IxMThfQkdBSU59LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTEzX1JHQjAzfSwKKy8qIDB4MTAsICovCisJezB4YTEsIDB4MDEsIDB4MDAwMn0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQl9SR0IwMX0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMENfUkdCMDJ9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBEX1JHQjEwfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwRV9SR0IxMX0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMEZfUkdCMTJ9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTEwX1JHQjIwfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjExMV9SR0IyMX0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMTJfUkdCMjJ9LAorLyogMHgwMywgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBjbG9jayA/ICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCisJezB4YTEsIDB4MDEsIDB4MDFjOH0sCisJezB4YTEsIDB4MDEsIDB4MDFjOX0sCisJezB4YTEsIDB4MDEsIDB4MDFjYX0sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IxMjBfR0FNTUEwMH0sCS8qIGdhbW1hIDIgPyovCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxMjFfR0FNTUEwMX0sCisJezB4YTAsIDB4MWYsIFpDM1hYX1IxMjJfR0FNTUEwMn0sCisJezB4YTAsIDB4M2EsIFpDM1hYX1IxMjNfR0FNTUEwM30sCisJezB4YTAsIDB4NTMsIFpDM1hYX1IxMjRfR0FNTUEwNH0sCisJezB4YTAsIDB4NmQsIFpDM1hYX1IxMjVfR0FNTUEwNX0sCisJezB4YTAsIDB4ODUsIFpDM1hYX1IxMjZfR0FNTUEwNn0sCisJezB4YTAsIDB4OWMsIFpDM1hYX1IxMjdfR0FNTUEwN30sCisJezB4YTAsIDB4YjAsIFpDM1hYX1IxMjhfR0FNTUEwOH0sCisJezB4YTAsIDB4YzIsIFpDM1hYX1IxMjlfR0FNTUEwOX0sCisJezB4YTAsIDB4ZDEsIFpDM1hYX1IxMkFfR0FNTUEwQX0sCisJezB4YTAsIDB4ZGUsIFpDM1hYX1IxMkJfR0FNTUEwQn0sCisJezB4YTAsIDB4ZTksIFpDM1hYX1IxMkNfR0FNTUEwQ30sCisJezB4YTAsIDB4ZjIsIFpDM1hYX1IxMkRfR0FNTUEwRH0sCisJezB4YTAsIDB4ZjksIFpDM1hYX1IxMkVfR0FNTUEwRX0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkZfR0FNTUEwRn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IxMzBfR0FNTUExMH0sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxMzFfR0FNTUExMX0sCisJezB4YTAsIDB4MTYsIFpDM1hYX1IxMzJfR0FNTUExMn0sCisJezB4YTAsIDB4MWEsIFpDM1hYX1IxMzNfR0FNTUExM30sCisJezB4YTAsIDB4MTksIFpDM1hYX1IxMzRfR0FNTUExNH0sCisJezB4YTAsIDB4MTksIFpDM1hYX1IxMzVfR0FNTUExNX0sCisJezB4YTAsIDB4MTcsIFpDM1hYX1IxMzZfR0FNTUExNn0sCisJezB4YTAsIDB4MTUsIFpDM1hYX1IxMzdfR0FNTUExN30sCisJezB4YTAsIDB4MTIsIFpDM1hYX1IxMzhfR0FNTUExOH0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxMzlfR0FNTUExOX0sCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxM0FfR0FNTUExQX0sCisJezB4YTAsIDB4MGIsIFpDM1hYX1IxM0JfR0FNTUExQn0sCisJezB4YTAsIDB4MDksIFpDM1hYX1IxM0NfR0FNTUExQ30sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxM0RfR0FNTUExRH0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxM0VfR0FNTUExRX0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxM0ZfR0FNTUExRn0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQl9SR0IwMX0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMENfUkdCMDJ9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBEX1JHQjEwfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwRV9SR0IxMX0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMEZfUkdCMTJ9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTEwX1JHQjIwfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjExMV9SR0IyMX0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMTJfUkdCMjJ9LAorCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGFhLCAweDEwLCAweDAwMWJ9LAorCXsweGFhLCAweDc2LCAweDAwMDJ9LAorCXsweGFhLCAweDJhLCAweDAwODF9LAorCXsweGFhLCAweDJiLCAweDAwMDB9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHhiOCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHgzNywgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDI2LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhYSwgMHgxMywgMHgwMDgzfSwJLyogNDAgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MzBjX0luaXRpYWxTY2FsZVtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4YTEsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwOERfQ09NUEFCSUxJVFlNT0RFfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisKKwl7MHhhYSwgMHgxMiwgMHgwMDgwfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA4M19SR0FJTkFERFJ9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDg1X0JHQUlOQUREUn0sCisJezB4YTAsIDB4OTAsIFpDM1hYX1IwODZfRVhQVElNRUhJR0h9LAorCXsweGEwLCAweDkxLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4ZTYsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHg4NiwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCisJezB4YWEsIDB4MTIsIDB4MDA2OX0sCS8qIGkyYyAqLworCXsweGFhLCAweDA0LCAweDAwMjB9LAorCXsweGFhLCAweDA2LCAweDAwNTB9LAorCXsweGFhLCAweDEzLCAweDAwYzN9LAorCXsweGFhLCAweDE0LCAweDAwMDB9LAorCXsweGFhLCAweDE1LCAweDAwMjR9LAorCXsweGFhLCAweDE5LCAweDAwMDN9LAorCXsweGFhLCAweDFhLCAweDAwZjZ9LAorCXsweGFhLCAweDFiLCAweDAwMDJ9LAorCXsweGFhLCAweDIwLCAweDAwYzJ9LAorCXsweGFhLCAweDI0LCAweDAwNjB9LAorCXsweGFhLCAweDI1LCAweDAwNDB9LAorCXsweGFhLCAweDI2LCAweDAwMzB9LAorCXsweGFhLCAweDI3LCAweDAwZWF9LAorCXsweGFhLCAweDI4LCAweDAwYTB9LAorCXsweGFhLCAweDIxLCAweDAwMDB9LAorCXsweGFhLCAweDJhLCAweDAwODF9LAorCXsweGFhLCAweDJiLCAweDAwOTZ9LAorCXsweGFhLCAweDJkLCAweDAwODR9LAorCXsweGFhLCAweDJmLCAweDAwM2R9LAorCXsweGFhLCAweDMwLCAweDAwMjR9LAorCXsweGFhLCAweDYwLCAweDAwMDB9LAorCXsweGFhLCAweDYxLCAweDAwNDB9LAorCXsweGFhLCAweDY4LCAweDAwN2N9LAorCXsweGFhLCAweDZmLCAweDAwMTV9LAorCXsweGFhLCAweDc1LCAweDAwODh9LAorCXsweGFhLCAweDc3LCAweDAwYjV9LAorCXsweGFhLCAweDAxLCAweDAwNjB9LAorCXsweGFhLCAweDAyLCAweDAwNjB9LAorCXsweGFhLCAweDE3LCAweDAwMTh9LAorCXsweGFhLCAweDE4LCAweDAwYmF9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDc3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAorCXsweGEwLCAweDAwLCAweDAxYWR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NDYsIFpDM1hYX1IxMThfQkdBSU59LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTEzX1JHQjAzfSwKKworCXsweGExLCAweDAxLCAweDAwMDJ9LAorCXsweGEwLCAweDRlLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZmUsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmNywgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NGQsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGZjLCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjYsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDRhLCBaQzNYWF9SMTEyX1JHQjIyfSwKKworCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHgxNiwgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgfjQgKi8KKwl7MHhhMCwgMHgzYSwgWkMzWFhfUjEyMV9HQU1NQTAxfSwKKwl7MHhhMCwgMHg1YiwgWkMzWFhfUjEyMl9HQU1NQTAyfSwKKwl7MHhhMCwgMHg3YywgWkMzWFhfUjEyM19HQU1NQTAzfSwKKwl7MHhhMCwgMHg5NCwgWkMzWFhfUjEyNF9HQU1NQTA0fSwKKwl7MHhhMCwgMHhhOSwgWkMzWFhfUjEyNV9HQU1NQTA1fSwKKwl7MHhhMCwgMHhiYiwgWkMzWFhfUjEyNl9HQU1NQTA2fSwKKwl7MHhhMCwgMHhjYSwgWkMzWFhfUjEyN19HQU1NQTA3fSwKKwl7MHhhMCwgMHhkNywgWkMzWFhfUjEyOF9HQU1NQTA4fSwKKwl7MHhhMCwgMHhlMSwgWkMzWFhfUjEyOV9HQU1NQTA5fSwKKwl7MHhhMCwgMHhlYSwgWkMzWFhfUjEyQV9HQU1NQTBBfSwKKwl7MHhhMCwgMHhmMSwgWkMzWFhfUjEyQl9HQU1NQTBCfSwKKwl7MHhhMCwgMHhmNywgWkMzWFhfUjEyQ19HQU1NQTBDfSwKKwl7MHhhMCwgMHhmYywgWkMzWFhfUjEyRF9HQU1NQTBEfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEyRV9HQU1NQTBFfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEyRl9HQU1NQTBGfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjEzMF9HQU1NQTEwfSwKKwl7MHhhMCwgMHgyMiwgWkMzWFhfUjEzMV9HQU1NQTExfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjEzMl9HQU1NQTEyfSwKKwl7MHhhMCwgMHgxYywgWkMzWFhfUjEzM19HQU1NQTEzfSwKKwl7MHhhMCwgMHgxNiwgWkMzWFhfUjEzNF9HQU1NQTE0fSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjEzNV9HQU1NQTE1fSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjEzNl9HQU1NQTE2fSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEzN19HQU1NQTE3fSwKKwl7MHhhMCwgMHgwYiwgWkMzWFhfUjEzOF9HQU1NQTE4fSwKKwl7MHhhMCwgMHgwOSwgWkMzWFhfUjEzOV9HQU1NQTE5fSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjEzQV9HQU1NQTFBfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjEzQl9HQU1NQTFCfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjEzQ19HQU1NQTFDfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjEzRF9HQU1NQTFEfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjEzRV9HQU1NQTFFfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjEzRl9HQU1NQTFGfSwKKwl7MHhhMCwgMHg0ZSwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGZlLCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDRkLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmYywgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweGY2LCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg0YSwgWkMzWFhfUjExMl9SR0IyMn0sCisKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YWEsIDB4MTAsIDB4MDAwZH0sCisJezB4YWEsIDB4NzYsIDB4MDAwMn0sCisJezB4YWEsIDB4MmEsIDB4MDA4MX0sCisJezB4YWEsIDB4MmIsIDB4MDAwMH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweGQ4LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MjYsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGFhLCAweDEzLCAweDAwYzN9LAorCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMTA2Yl9Jbml0aWFsX2NvbVtdID0geworLyogU3JlYW0gYW5kIFNlbnNvciBzcGVjaWZpYyAqLworCXsweGExLCAweDAxLCAweDAwMTB9LAkvKiBDTU9TU2Vuc29yU2VsZWN0ICovCisvKiBTeXN0ZW0gKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJLyogU3lzdGVtQ29udHJvbCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkvKiBTeXN0ZW1Db250cm9sICovCisvKiBQaWN0dXJlIHNpemUgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCS8qIENsb2NrU2VsZWN0ICovCisJezB4YTAsIDB4MDMsIDB4MDAzYX0sCisJezB4YTAsIDB4MGMsIDB4MDAzYn0sCisJezB4YTAsIDB4MDQsIDB4MDAzOH0sCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMxMDZiX0luaXRpYWxbXSA9IHsJLyogMTc2eDE0NCAqLworLyogSlBFRyBjb250cm9sICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIENsb2NrU2V0dGluZyAqLworLyogU3JlYW0gYW5kIFNlbnNvciBzcGVjaWZpYyAqLworCXsweGEwLCAweDBmLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiBDTU9TU2Vuc29yU2VsZWN0ICovCisvKiBQaWN0dXJlIHNpemUgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sICAvKiBGcmFtZVdpZHRoSGlnaCAwMCAqLworCXsweGEwLCAweGIwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAkgIC8qIEZyYW1lV2lkdGhMb3cgQjAgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LCAvKiBGcmFtZUhlaWdodEhpZ2ggMDAgKi8KKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sICAvKiBGcmFtZUhpZ2h0TG93IDkwICovCisvKiBTeXN0ZW0gKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LCAvKiBTeXN0ZW1PcGVyYXRpbmcgKi8KKy8qIFNyZWFtIGFuZCBTZW5zb3Igc3BlY2lmaWMgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwgLyogVmlkZW9Db250cm9sRnVuY3Rpb24gKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwgLyogVmlkZW9Db250cm9sRnVuY3Rpb24gKi8KKy8qIFNlbnNvciBJbnRlcmZhY2UgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjA4RF9DT01QQUJJTElUWU1PREV9LCAgLyogQ29tcGF0aWJpbHkgTW9kZSAqLworLyogV2luZG93IGluc2lkZSBzZW5zb3IgYXJyYXkgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAkvKiBXaW5YU3RhcnRMb3cgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAkvKiBGaXJzdFlMb3cgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAkvKiBGaXJzdHhMb3cgKi8KKwl7MHhhMCwgMHgyOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAkvKiBXaW5IZWlnaHRMb3cgKi8KKwl7MHhhMCwgMHg2OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCS8qIFdpbldpZHRoTG93ICovCisvKiBJbml0IHRoZSBzZW5zb3IgKi8KKwl7MHhhYSwgMHgwMiwgMHgwMDA0fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwOSwgMHgwMDA1fSwKKwl7MHhhYSwgMHgwYSwgMHgwMDAyfSwKKwl7MHhhYSwgMHgwYiwgMHgwMDAyfSwKKwl7MHhhYSwgMHgwYywgMHgwMDA1fSwKKwl7MHhhYSwgMHgwZCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwZSwgMHgwMDAyfSwKKwl7MHhhYSwgMHgxNCwgMHgwMDgxfSwKKworLyogT3RoZXIgcmVnaXN0b3JzICovCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sIC8qIFNlbnNvckNvcnJlY3Rpb24gKi8KKy8qIEZyYW1lIHJldHJlaXZpbmcgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJLyogQXV0b0FkanVzdEZQUyAqLworLyogR2FpbnMgKi8KKwl7MHhhMCwgMHhhMCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCS8qIERpZ2l0YWxHYWluICovCisvKiBVbmtub3duICovCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCisvKiBTaGFycG5lc3MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwJLyogU2hhcnBuZXNzTW9kZSAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogU2hhcnBuZXNzMDUgKi8KKy8qIE90aGVyIHJlZ2lzdG9ycyAqLworCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkvKiBPcGVyYXRpb25Nb2RlICovCisvKiBBdXRvIGV4cG9zdXJlIGFuZCB3aGl0ZSBiYWxhbmNlICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJLyogQVdCU3RhdHVzICovCisvKkRlYWQgcGl4ZWxzICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LCAvKiBEZWFkUGl4ZWxzTW9kZSAqLworLyogRUVQUk9NICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwJLyogRUVQUk9NQWNjZXNzICovCisvKiBKUEVHIGNvbnRyb2wgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBDbG9ja1NldHRpbmcgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKy8qIE90aGVyIHJlZ2lzdGVycyAqLworCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkvKiBPcGVyYXRpb25Nb2RlICovCisvKiBBdXRvIGV4cG9zdXJlIGFuZCB3aGl0ZSBiYWxhbmNlICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJLyogQVdCU3RhdHVzICovCisvKkRlYWQgcGl4ZWxzICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LCAvKiBEZWFkUGl4ZWxzTW9kZSAqLworLyogRUVQUk9NICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwJLyogRUVQUk9NQWNjZXNzICovCisvKiBKUEVHIGNvbnRyb2wgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBDbG9ja1NldHRpbmcgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKworCXsweGEwLCAweDU4LCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTEyX1JHQjIyfSwKKy8qIEF1dG8gY29ycmVjdGlvbiAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMTgxX1dJTlhTVEFSVH0sCS8qIFdpblhzdGFydCAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMTgyX1dJTlhXSURUSH0sCS8qIFdpblhXaWR0aCAqLworCXsweGEwLCAweDE2LCBaQzNYWF9SMTgzX1dJTlhDRU5URVJ9LAkvKiBXaW5YQ2VudGVyICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxODRfV0lOWVNUQVJUfSwJLyogV2luWVN0YXJ0ICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IxODVfV0lOWVdJRFRIfSwJLyogV2luWVdpZHRoICovCisJezB4YTAsIDB4MTQsIFpDM1hYX1IxODZfV0lOWUNFTlRFUn0sCS8qIFdpbllDZW50ZXIgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sIC8qIEF1dG9Db3JyZWN0RW5hYmxlICovCisKKy8qIEF1dG8gZXhwb3N1cmUgYW5kIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIEV4cG9zdXJlTGltaXRIaWdoICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIEV4cG9zdXJlTGltaXRNaWQgKi8KKwl7MHhhMCwgMHhiMSwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogRXhwb3N1cmVMaW1pdExvdyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIEFudGlGbGlja2VySGlnaCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogQW50aUZsaWNrZXJMb3cgKi8KKwl7MHhhMCwgMHg4NywgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIEFudGlGbGlja2VyTG93ICovCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogQUVCRnJlZXplICovCisJezB4YTAsIDB4MTgsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiBBRUJVbmZyZWV6ZSAqLworLyogc2Vuc29yIG9uICovCisJezB4YWEsIDB4MDcsIDB4MDBiMX0sCisJezB4YWEsIDB4MDUsIDB4MDAwM30sCisJezB4YWEsIDB4MDQsIDB4MDAwMX0sCisJezB4YWEsIDB4MDMsIDB4MDAzYn0sCisvKiBHYWlucyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiBEaWdpdGFsTGltaXREaWZmICovCisJezB4YTAsIDB4MjYsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogRGlnaXRhbEdhaW5TdGVwICovCisJezB4YTAsIDB4YTAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCQkvKiBHbG9iYWxHYWluICovCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCQkvKiBHbG9iYWxHYWluICovCisvKiBBdXRvIGNvcnJlY3Rpb24gKi8KKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIEF1dG9Db3JyZWN0RW5hYmxlICovCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCQkJCS8qIEF1dG9Db3JyZWN0RW5hYmxlICovCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAkvKiBBdXRvQ29ycmVjdEVuYWJsZSAqLworLyogR2FpbnMgKi8KKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExNl9SR0FJTn0sCQkJLyogUkdhaW4gKi8KKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCQkJLyogR0dhaW4gKi8KKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExOF9CR0FJTn0sCQkJLyogQkdhaW4gKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDM1MngyODggKi8KKy8qIEpQRUcgY29udHJvbCAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiBDbG9ja1NldHRpbmcgKi8KKy8qIFNyZWFtIGFuZCBTZW5zb3Igc3BlY2lmaWMgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogQ01PU1NlbnNvclNlbGVjdCAqLworLyogUGljdHVyZSBzaXplICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAkvKiBGcmFtZVdpZHRoSGlnaCAqLworCXsweGEwLCAweDYwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAkJLyogRnJhbWVXaWR0aExvdyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCS8qIEZyYW1lSGVpZ2h0SGlnaCAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwJLyogRnJhbWVIaWdodExvdyAqLworLyogU3lzdGVtICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwJLyogU3lzdGVtT3BlcmF0aW5nICovCisvKiBTcmVhbSBhbmQgU2Vuc29yIHNwZWNpZmljICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIFZpZGVvQ29udHJvbEZ1bmN0aW9uICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIFZpZGVvQ29udHJvbEZ1bmN0aW9uICovCisvKiBTZW5zb3IgSW50ZXJmYWNlICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwOERfQ09NUEFCSUxJVFlNT0RFfSwJLyogQ29tcGF0aWJpbHkgTW9kZSAqLworLyogV2luZG93IGluc2lkZSBzZW5zb3IgYXJyYXkgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAkvKiBXaW5YU3RhcnRMb3cgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAkvKiBGaXJzdFlMb3cgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAkvKiBGaXJzdHhMb3cgKi8KKwl7MHhhMCwgMHgyOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAkvKiBXaW5IZWlnaHRMb3cgKi8KKwl7MHhhMCwgMHg2OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCS8qIFdpbldpZHRoTG93ICovCisvKiBJbml0IHRoZSBzZW5zb3IgKi8KKwl7MHhhYSwgMHgwMiwgMHgwMDA0fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwOSwgMHgwMDA1fSwKKwl7MHhhYSwgMHgwYSwgMHgwMDAyfSwKKwl7MHhhYSwgMHgwYiwgMHgwMDAyfSwKKwl7MHhhYSwgMHgwYywgMHgwMDA1fSwKKwl7MHhhYSwgMHgwZCwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwZSwgMHgwMDAyfSwKKwl7MHhhYSwgMHgxNCwgMHgwMDgxfSwKKworLyogT3RoZXIgcmVnaXN0b3JzICovCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sIC8qIFNlbnNvckNvcnJlY3Rpb24gKi8KKy8qIEZyYW1lIHJldHJlaXZpbmcgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJLyogQXV0b0FkanVzdEZQUyAqLworLyogR2FpbnMgKi8KKwl7MHhhMCwgMHhhMCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCS8qIERpZ2l0YWxHYWluICovCisvKiBVbmtub3duICovCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCisvKiBTaGFycG5lc3MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwJLyogU2hhcnBuZXNzTW9kZSAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogU2hhcnBuZXNzMDUgKi8KKy8qIE90aGVyIHJlZ2lzdG9ycyAqLworCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkvKiBPcGVyYXRpb25Nb2RlICovCisvKiBBdXRvIGV4cG9zdXJlIGFuZCB3aGl0ZSBiYWxhbmNlICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJLyogQVdCU3RhdHVzICovCisJezB4YTAsIDB4ODAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCS8qID8/Pz8/Pz8/PyAqLworLypEZWFkIHBpeGVscyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwgLyogRGVhZFBpeGVsc01vZGUgKi8KKy8qIEVFUFJPTSAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCS8qIEVFUFJPTUFjY2VzcyAqLworLyogSlBFRyBjb250cm9sICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogQ2xvY2tTZXR0aW5nICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCisvKiBPdGhlciByZWdpc3RlcnMgKi8KKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwJLyogT3BlcmF0aW9uTW9kZSAqLworLyogQXV0byBleHBvc3VyZSBhbmQgd2hpdGUgYmFsYW5jZSAqLworCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCS8qIEFXQlN0YXR1cyAqLworLypEZWFkIHBpeGVscyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwgLyogRGVhZFBpeGVsc01vZGUgKi8KKy8qIEVFUFJPTSAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCS8qIEVFUFJPTUFjY2VzcyAqLworLyogSlBFRyBjb250cm9sICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogQ2xvY2tTZXR0aW5nICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCisKKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGY0LCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjExMl9SR0IyMn0sCisvKiBBdXRvIGNvcnJlY3Rpb24gKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjE4MV9XSU5YU1RBUlR9LAkvKiBXaW5Yc3RhcnQgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjE4Ml9XSU5YV0lEVEh9LAkvKiBXaW5YV2lkdGggKi8KKwl7MHhhMCwgMHgxNiwgWkMzWFhfUjE4M19XSU5YQ0VOVEVSfSwJLyogV2luWENlbnRlciAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMTg0X1dJTllTVEFSVH0sCS8qIFdpbllTdGFydCAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMTg1X1dJTllXSURUSH0sCS8qIFdpbllXaWR0aCAqLworCXsweGEwLCAweDE0LCBaQzNYWF9SMTg2X1dJTllDRU5URVJ9LAkvKiBXaW5ZQ2VudGVyICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LCAvKiBBdXRvQ29ycmVjdEVuYWJsZSAqLworCisvKiBBdXRvIGV4cG9zdXJlIGFuZCB3aGl0ZSBiYWxhbmNlICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiBFeHBvc3VyZUxpbWl0SGlnaCAwICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sICAvKiBFeHBvc3VyZUxpbWl0TWlkICovCisJezB4YTAsIDB4YjEsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sICAvKiBFeHBvc3VyZUxpbWl0TG93IDB4YjEgKi8KKworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sICAgLyogQW50aUZsaWNrZXJIaWdoIDB4MDAgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sICAgIC8qIEFudGlGbGlja2VyTG93IDB4MDAgKi8KKwl7MHhhMCwgMHg4NywgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sICAgIC8qIEFudGlGbGlja2VyTG93IDB4ODcgKi8KKworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJLyogQUVCRnJlZXplIDB4MTAgMHgwYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkvKiBBRUJVbmZyZWV6ZSAweDMwIDB4MTggKi8KKy8qIHNlbnNvciBvbiAqLworCXsweGFhLCAweDA3LCAweDAwYjF9LAorCXsweGFhLCAweDA1LCAweDAwMDN9LAorCXsweGFhLCAweDA0LCAweDAwMDF9LAorCXsweGFhLCAweDAzLCAweDAwM2J9LAorLyogR2FpbnMgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogRGlnaXRhbExpbWl0RGlmZiAqLworCXsweGEwLCAweDI2LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIERpZ2l0YWxHYWluU3RlcCAqLworCXsweGEwLCAweGEwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAkvKiBHbG9iYWxHYWluICovCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCS8qIEdsb2JhbEdhaW4gKi8KKy8qIEF1dG8gY29ycmVjdGlvbiAqLworCXsweGEwLCAweDQwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwJLyogQXV0b0NvcnJlY3RFbmFibGUgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwJCQkJLyogQXV0b0NvcnJlY3RFbmFibGUgKi8KKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIEF1dG9Db3JyZWN0RW5hYmxlICovCisvKiBHYWlucyAqLworCXsweGEwLCAweDQwLCBaQzNYWF9SMTE2X1JHQUlOfSwJCS8qIFJHYWluICovCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAkJLyogR0dhaW4gKi8KKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjExOF9CR0FJTn0sCQkvKiBCR2FpbiAqLworCisJezB4YTAsIDB4MDAsIDB4MDAwN30sCQkJLyogQXV0b0NvcnJlY3RFbmFibGUgKi8KKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAxOF9GUkFNRUxPU1R9LAkvKiBGcmFtZSBhZGp1c3QgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMxMDZiXzUwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDA2LGNjICovCisJezB4YTAsIDB4NTQsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLDU0LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4ODcsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5Nyw4NyxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgzMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJLyogMDEsOGYsMzAsY2MgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDIxfSwJCQkvKiAwMCwwMywyMSxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMGN9LAkJCS8qIDAwLDA0LDBjLGFhICovCisJezB4YWEsIDB4MDUsIDB4MDAwMn0sCQkJLyogMDAsMDUsMDIsYWEgKi8KKwl7MHhhYSwgMHgwNywgMHgwMDFjfSwJCQkvKiAwMCwwNywxYyxhYSAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwwNCxjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfNjBIWltdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsMDYsY2MgKi8KKwl7MHhhMCwgMHgyZSwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsMmUsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHg3MSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDcxLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDMwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkvKiAwMSw4ZiwzMCxjYyAqLworCXsweGFhLCAweDAzLCAweDAwMWN9LAkJCS8qIDAwLDAzLDFjLGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAwNH0sCQkJLyogMDAsMDQsMDQsYWEgKi8KKwl7MHhhYSwgMHgwNSwgMHgwMDAxfSwJCQkvKiAwMCwwNSwwMSxhYSAqLworCXsweGFhLCAweDA3LCAweDAwYzR9LAkJCS8qIDAwLDA3LGM0LGFhICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDA0LGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMTA2Yl9Ob0ZsaWtlcltdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsMDYsY2MgKi8KKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsNTAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDEwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGFhLCAweDAzLCAweDAwMTN9LAkJCS8qIDAwLDAzLDEzLGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAwMH0sCQkJLyogMDAsMDQsMDAsYWEgKi8KKwl7MHhhYSwgMHgwNSwgMHgwMDAxfSwJCQkvKiAwMCwwNSwwMSxhYSAqLworCXsweGFhLCAweDA3LCAweDAwMzB9LAkJCS8qIDAwLDA3LDMwLGFhICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDAwLGNjICovCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYjAzMzAzeF9Jbml0aWFsW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCXsweGEwLCAweGRjLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAkvKiA4YiAtPiBkYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKKwl7MHhhMCwgMHhkYywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKKwl7MHhhYSwgMHgwMSwgMHgwMDAxfSwKKwl7MHhhYSwgMHgwNiwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwOCwgMHgwNDgzfSwKKwl7MHhhYSwgMHgwMSwgMHgwMDA0fSwKKwl7MHhhYSwgMHgwOCwgMHgwMDA2fSwKKwl7MHhhYSwgMHgwMiwgMHgwMDExfSwKKwl7MHhhYSwgMHgwMywgMHgwMWU3fSwKKwl7MHhhYSwgMHgwNCwgMHgwMjg3fSwKKwl7MHhhYSwgMHgwNywgMHgzMDAyfSwKKwl7MHhhYSwgMHgyMCwgMHgxMTAwfSwKKwl7MHhhYSwgMHgzNSwgMHgwMDUwfSwKKwl7MHhhYSwgMHgzMCwgMHgwMDA1fSwKKwl7MHhhYSwgMHgzMSwgMHgwMDAwfSwKKwl7MHhhYSwgMHg1OCwgMHgwMDc4fSwKKwl7MHhhYSwgMHg2MiwgMHgwNDExfSwKKwl7MHhhYSwgMHgyYiwgMHgwMDI4fSwKKwl7MHhhYSwgMHgyYywgMHgwMDMwfSwKKwl7MHhhYSwgMHgyZCwgMHgwMDMwfSwKKwl7MHhhYSwgMHgyZSwgMHgwMDI4fSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKKwl7MHhhMCwgMHgzNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAorCXsweGEwLCAweDAwLCAweDAxYWR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCisJezB4YTAsIDB4NzgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4NjEsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDY1LCBaQzNYWF9SMTE4X0JHQUlOfSwKKworCXsweGExLCAweDAxLCAweDAwMDJ9LAorCXsweGEwLCAweDA5LCAweDAxYWR9LAorCXsweGEwLCAweDE1LCAweDAxYWV9LAorCXsweGEwLCAweDBkLCAweDAwM2F9LAorCXsweGEwLCAweDAyLCAweDAwM2J9LAorCXsweGEwLCAweDAwLCAweDAwMzh9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTEyX1JHQjIyfSwKKworCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgNCAqLworCXsweGEwLCAweDM4LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAorCXsweGEwLCAweDU5LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAorCXsweGEwLCAweDc5LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAorCXsweGEwLCAweDkyLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAorCXsweGEwLCAweGE3LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAorCXsweGEwLCAweGI5LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAorCXsweGEwLCAweGM4LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAorCXsweGEwLCAweGQ0LCBaQzNYWF9SMTI4X0dBTU1BMDh9LAorCXsweGEwLCAweGRmLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAorCXsweGEwLCAweGU3LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAorCXsweGEwLCAweGVlLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMTJDX0dBTU1BMEN9LAorCXsweGEwLCAweGY5LCBaQzNYWF9SMTJEX0dBTU1BMER9LAorCXsweGEwLCAweGZjLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAorCXsweGEwLCAweDI2LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAorCXsweGEwLCAweDIyLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAorCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAorCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMTNDX0dBTU1BMUN9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTNEX0dBTU1BMUR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTEyX1JHQjIyfSwKKworCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YWEsIDB4MDUsIDB4MDAwOX0sCisJezB4YWEsIDB4MDksIDB4MDEzNH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweGVjLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDljLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHhkNywgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhmOSwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDksIDB4MDFhZH0sCisJezB4YTAsIDB4MTUsIDB4MDFhZX0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBiMDMzMDN4X0luaXRpYWxTY2FsZVtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHhkYywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJLyogOGIgLT4gZGMgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4ZGMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4YWEsIDB4MDEsIDB4MDAwMX0sCisJezB4YWEsIDB4MDYsIDB4MDAwMH0sCisJezB4YWEsIDB4MDgsIDB4MDQ4M30sCisJezB4YWEsIDB4MDEsIDB4MDAwNH0sCisJezB4YWEsIDB4MDgsIDB4MDAwNn0sCisJezB4YWEsIDB4MDIsIDB4MDAxMX0sCisJezB4YWEsIDB4MDMsIDB4MDFlN30sCisJezB4YWEsIDB4MDQsIDB4MDI4N30sCisJezB4YWEsIDB4MDcsIDB4MzAwMn0sCisJezB4YWEsIDB4MjAsIDB4MTEwMH0sCisJezB4YWEsIDB4MzUsIDB4MDA1MH0sCisJezB4YWEsIDB4MzAsIDB4MDAwNX0sCisJezB4YWEsIDB4MzEsIDB4MDAwMH0sCisJezB4YWEsIDB4NTgsIDB4MDA3OH0sCisJezB4YWEsIDB4NjIsIDB4MDQxMX0sCisJezB4YWEsIDB4MmIsIDB4MDAyOH0sCisJezB4YWEsIDB4MmMsIDB4MDAzMH0sCisJezB4YWEsIDB4MmQsIDB4MDAzMH0sCisJezB4YWEsIDB4MmUsIDB4MDAyOH0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAorCXsweGEwLCAweDc4LCBaQzNYWF9SMThEX1lUQVJHRVR9LAorCXsweGEwLCAweDYxLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg2NSwgWkMzWFhfUjExOF9CR0FJTn0sCisKKwl7MHhhMSwgMHgwMSwgMHgwMDAyfSwKKworCXsweGEwLCAweDA5LCAweDAxYWR9LAorCXsweGEwLCAweDE1LCAweDAxYWV9LAorCisJezB4YTAsIDB4MGQsIDB4MDAzYX0sCisJezB4YTAsIDB4MDIsIDB4MDAzYn0sCisJezB4YTAsIDB4MDAsIDB4MDAzOH0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQl9SR0IwMX0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMENfUkdCMDJ9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBEX1JHQjEwfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwRV9SR0IxMX0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMEZfUkdCMTJ9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTEwX1JHQjIwfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjExMV9SR0IyMX0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMTJfUkdCMjJ9LAorCisJezB4YTEsIDB4MDEsIDB4MDAwOH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogY2xvY2sgPyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMUM2X1NIQVJQTkVTUzAwfSwJLyogc2hhcnBuZXNzKyAqLworCXsweGExLCAweDAxLCAweDAxYzh9LAorCXsweGExLCAweDAxLCAweDAxYzl9LAorCXsweGExLCAweDAxLCAweDAxY2F9LAorCXsweGEwLCAweDBmLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogc2hhcnBuZXNzLSAqLworCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxMjBfR0FNTUEwMH0sCS8qIGdhbW1hIDQgKi8KKwl7MHhhMCwgMHgzOCwgWkMzWFhfUjEyMV9HQU1NQTAxfSwKKwl7MHhhMCwgMHg1OSwgWkMzWFhfUjEyMl9HQU1NQTAyfSwKKwl7MHhhMCwgMHg3OSwgWkMzWFhfUjEyM19HQU1NQTAzfSwKKwl7MHhhMCwgMHg5MiwgWkMzWFhfUjEyNF9HQU1NQTA0fSwKKwl7MHhhMCwgMHhhNywgWkMzWFhfUjEyNV9HQU1NQTA1fSwKKwl7MHhhMCwgMHhiOSwgWkMzWFhfUjEyNl9HQU1NQTA2fSwKKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjEyN19HQU1NQTA3fSwKKwl7MHhhMCwgMHhkNCwgWkMzWFhfUjEyOF9HQU1NQTA4fSwKKwl7MHhhMCwgMHhkZiwgWkMzWFhfUjEyOV9HQU1NQTA5fSwKKwl7MHhhMCwgMHhlNywgWkMzWFhfUjEyQV9HQU1NQTBBfSwKKwl7MHhhMCwgMHhlZSwgWkMzWFhfUjEyQl9HQU1NQTBCfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjEyQ19HQU1NQTBDfSwKKwl7MHhhMCwgMHhmOSwgWkMzWFhfUjEyRF9HQU1NQTBEfSwKKwl7MHhhMCwgMHhmYywgWkMzWFhfUjEyRV9HQU1NQTBFfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEyRl9HQU1NQTBGfSwKKwl7MHhhMCwgMHgyNiwgWkMzWFhfUjEzMF9HQU1NQTEwfSwKKwl7MHhhMCwgMHgyMiwgWkMzWFhfUjEzMV9HQU1NQTExfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjEzMl9HQU1NQTEyfSwKKwl7MHhhMCwgMHgxYywgWkMzWFhfUjEzM19HQU1NQTEzfSwKKwl7MHhhMCwgMHgxNiwgWkMzWFhfUjEzNF9HQU1NQTE0fSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjEzNV9HQU1NQTE1fSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjEzNl9HQU1NQTE2fSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEzN19HQU1NQTE3fSwKKwl7MHhhMCwgMHgwYiwgWkMzWFhfUjEzOF9HQU1NQTE4fSwKKwl7MHhhMCwgMHgwOSwgWkMzWFhfUjEzOV9HQU1NQTE5fSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjEzQV9HQU1NQTFBfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjEzQl9HQU1NQTFCfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjEzQ19HQU1NQTFDfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjEzRF9HQU1NQTFEfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjEzRV9HQU1NQTFFfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjEzRl9HQU1NQTFGfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGY4LCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjExMl9SR0IyMn0sCisKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGFhLCAweDA1LCAweDAwMDl9LAorCXsweGFhLCAweDA5LCAweDAxMzR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHhlYywgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHg5YywgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4ZDcsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4ZjksIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDA5LCAweDAxYWR9LAorCXsweGEwLCAweDE1LCAweDAxYWV9LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGIwMzMweHhfSW5pdGlhbFtdID0geworCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIDAwICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YWEsIDB4MDEsIDB4MDAwNn0sCisJezB4YWEsIDB4MDIsIDB4MDAxMX0sCisJezB4YWEsIDB4MDMsIDB4MDFlN30sCisJezB4YWEsIDB4MDQsIDB4MDI4N30sCisJezB4YWEsIDB4MDYsIDB4MDAwM30sCisJezB4YWEsIDB4MDcsIDB4MzAwMn0sCisJezB4YWEsIDB4MjAsIDB4MTEwMH0sCisJezB4YWEsIDB4MmYsIDB4ZjdiMH0sCisJezB4YWEsIDB4MzAsIDB4MDAwNX0sCisJezB4YWEsIDB4MzEsIDB4MDAwMH0sCisJezB4YWEsIDB4MzQsIDB4MDEwMH0sCisJezB4YWEsIDB4MzUsIDB4MDA2MH0sCisJezB4YWEsIDB4M2QsIDB4MDY4Zn0sCisJezB4YWEsIDB4NDAsIDB4MDFlMH0sCisJezB4YWEsIDB4NTgsIDB4MDA3OH0sCisJezB4YWEsIDB4NjIsIDB4MDQxMX0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAorCXsweGEwLCAweDZjLCBaQzNYWF9SMThEX1lUQVJHRVR9LAorCXsweGExLCAweDAxLCAweDAwMDJ9LAorCXsweGEwLCAweDA5LCAweDAxYWR9LAorCXsweGEwLCAweDE1LCAweDAxYWV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGExLCAweDAxLCAweDAwOTF9LAorCXsweGExLCAweDAxLCAweDAwOTV9LAorCXsweGExLCAweDAxLCAweDAwOTZ9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBjbG9jayA/ICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCisJezB4YTEsIDB4MDEsIDB4MDFjOH0sCisJezB4YTEsIDB4MDEsIDB4MDFjOX0sCisJezB4YTEsIDB4MDEsIDB4MDFjYX0sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCisKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGY4LCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjExMl9SR0IyMn0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGFhLCAweDA1LCAweDAwNjZ9LAorCXsweGFhLCAweDA5LCAweDAyYjJ9LAorCXsweGFhLCAweDEwLCAweDAwMDJ9LAorCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDhjLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDhhLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHhkNywgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHhmMCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHgwOSwgMHgwMWFkfSwKKwl7MHhhMCwgMHgxNSwgMHgwMWFlfSwKKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGExLCAweDAxLCAweDAwMDd9LAorLyoJezB4YTAsIDB4MzAsIDB4MDAwN30sICovCisvKgl7MHhhMCwgMHgwMCwgMHgwMDA3fSwgKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBiMDMzMHh4X0luaXRpYWxTY2FsZVtdID0geworCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIDAwICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkvKiAxMCAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YWEsIDB4MDEsIDB4MDAwNn0sCisJezB4YWEsIDB4MDIsIDB4MDAxMX0sCisJezB4YWEsIDB4MDMsIDB4MDFlN30sCisJezB4YWEsIDB4MDQsIDB4MDI4N30sCisJezB4YWEsIDB4MDYsIDB4MDAwM30sCisJezB4YWEsIDB4MDcsIDB4MzAwMn0sCisJezB4YWEsIDB4MjAsIDB4MTEwMH0sCisJezB4YWEsIDB4MmYsIDB4ZjdiMH0sCisJezB4YWEsIDB4MzAsIDB4MDAwNX0sCisJezB4YWEsIDB4MzEsIDB4MDAwMH0sCisJezB4YWEsIDB4MzQsIDB4MDEwMH0sCisJezB4YWEsIDB4MzUsIDB4MDA2MH0sCisJezB4YWEsIDB4M2QsIDB4MDY4Zn0sCisJezB4YWEsIDB4NDAsIDB4MDFlMH0sCisJezB4YWEsIDB4NTgsIDB4MDA3OH0sCisJezB4YWEsIDB4NjIsIDB4MDQxMX0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAorCXsweGEwLCAweDZjLCBaQzNYWF9SMThEX1lUQVJHRVR9LAorCXsweGExLCAweDAxLCAweDAwMDJ9LAorCXsweGEwLCAweDA5LCAweDAxYWR9LAorCXsweGEwLCAweDE1LCAweDAxYWV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGExLCAweDAxLCAweDAwOTF9LAorCXsweGExLCAweDAxLCAweDAwOTV9LAorCXsweGExLCAweDAxLCAweDAwOTZ9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBjbG9jayA/ICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCisJezB4YTEsIDB4MDEsIDB4MDFjOH0sCisJezB4YTEsIDB4MDEsIDB4MDFjOX0sCisJezB4YTEsIDB4MDEsIDB4MDFjYX0sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCisKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGY4LCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjExMl9SR0IyMn0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGFhLCAweDA1LCAweDAwNjZ9LAorCXsweGFhLCAweDA5LCAweDAyYjJ9LAorCXsweGFhLCAweDEwLCAweDAwMDJ9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHg4YywgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHg4YSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4ZDcsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4ZjAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCisJezB4YTAsIDB4MDksIDB4MDFhZH0sCisJezB4YTAsIDB4MTUsIDB4MDFhZX0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA3fSwKKy8qCXsweGEwLCAweDMwLCAweDAwMDd9LCAqLworLyoJezB4YTAsIDB4MDAsIDB4MDAwN30sICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGIwMzMwXzUwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDA3LGNjICovCisJezB4YTAsIDB4ZWUsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLGVlLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4NDYsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5Nyw0NixjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwgLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwgLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwgLyogMDEsYTksMGMsY2MgKi8KKwl7MHhhMCwgMHgyNiwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LCAvKiAwMSxhYSwyNixjYyAqLworCXsweGEwLCAweDY4LCBaQzNYWF9SMDFEX0hTWU5DXzB9LCAvKiAwMCwxZCw2OCxjYyAqLworCXsweGEwLCAweDkwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LCAvKiAwMCwxZSw5MCxjYyAqLworCXsweGEwLCAweGM4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LCAvKiAwMCwxZixjOCxjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBiMDMzMF81MEhaU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDA3LGNjICovCisJezB4YTAsIDB4YTAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLGEwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4N2EsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5Nyw3YSxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwgLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwgLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwgLyogMDEsYTksMGMsY2MgKi8KKwl7MHhhMCwgMHgyNiwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LCAvKiAwMSxhYSwyNixjYyAqLworCXsweGEwLCAweGU1LCBaQzNYWF9SMDFEX0hTWU5DXzB9LCAvKiAwMCwxZCxlNSxjYyAqLworCXsweGEwLCAweGYwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LCAvKiAwMCwxZSxmMCxjYyAqLworCXsweGEwLCAweGY4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LCAvKiAwMCwxZixmOCxjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBiMDMzMF82MEhaW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwwNyxjYyAqLworCXsweGEwLCAweGRkLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MixkZCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDNkLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsM2QsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDBjLGNjICovCisJezB4YTAsIDB4MjYsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMjYsY2MgKi8KKwl7MHhhMCwgMHg0MywgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsNDMsY2MgKi8KKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsNTAsY2MgKi8KKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsOTAsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYjAzMzBfNjBIWlNjYWxlW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwwNyxjYyAqLworCXsweGEwLCAweGEwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MixhMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDdhLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsN2EsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDBjLGNjICovCisJezB4YTAsIDB4MjYsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMjYsY2MgKi8KKwl7MHhhMCwgMHg0MSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsNDEsY2MgKi8KKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsNTAsY2MgKi8KKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsOTAsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYjAzMzBfTm9GbGlrZXJbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDA3LGNjICovCisJezB4YTAsIDB4ZjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLGYwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5NywxMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwgLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwgLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwgLyogMDEsYTksMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LCAvKiAwMSxhYSwwMCxjYyAqLworCXsweGEwLCAweDA5LCBaQzNYWF9SMDFEX0hTWU5DXzB9LCAvKiAwMCwxZCwwOSxjYyAqLworCXsweGEwLCAweDQwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LCAvKiAwMCwxZSw0MCxjYyAqLworCXsweGEwLCAweDkwLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LCAvKiAwMCwxZiw5MCxjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBiMDMzMF9Ob0ZsaWtlclNjYWxlW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwwNyxjYyAqLworCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MixmMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsMTAsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCS8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwOSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJLyogMDAsMWQsMDksY2MgKi8KKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJLyogMDAsMWUsNDAsY2MgKi8KKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJLyogMDAsMWYsOTAsY2MgKi8KKwl7fQorfTsKKworLyogZnJvbSBvZW05LmluZiAtIEhLUiwlUE8yMDMwJSxJbml0aWFsIC0gNjQweDQ4MCAtIChjbG9zZSB0byBDUzIxMDIpICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwX21vZGUwW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkvKiAwMCwwMiwwNCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sIC8qIDAwLDAxLDAxLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwODBfSEJMQU5LSElHSH0sIC8qIDAwLDgwLDA0LGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwODFfSEJMQU5LTE9XfSwgLyogMDAsODEsMDUsY2MgKi8KKwl7MHhhMCwgMHgxNiwgWkMzWFhfUjA4M19SR0FJTkFERFJ9LCAvKiAwMCw4MywxNixjYyAqLworCXsweGEwLCAweDE4LCBaQzNYWF9SMDg1X0JHQUlOQUREUn0sIC8qIDAwLDg1LDE4LGNjICovCisJezB4YTAsIDB4MWEsIFpDM1hYX1IwODZfRVhQVElNRUhJR0h9LCAvKiAwMCw4NiwxYSxjYyAqLworCXsweGEwLCAweDFiLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LCAvKiAwMCw4NywxYixjYyAqLworCXsweGEwLCAweDFjLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LCAvKiAwMCw4OCwxYyxjYyAqLworCXsweGEwLCAweGVlLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LCAvKiAwMCw4YixlZSxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sIC8qIDAwLDA4LDAzLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDAzLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDAxLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LCAvKiAwMCwwMywwMixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LCAvKiAwMCwwNCw4MCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sIC8qIDAwLDA1LDAxLGNjICovCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LCAvKiAwMCwwNixlMCxjYyAqLworCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwgLyogMDEsODAsNDIsY2MgKi8KKwl7MHhhYSwgMHg4ZCwgMHgwMDA4fSwJCQkvKiAwMCw4ZCwwOCxhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCS8qIDAwLDk4LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwJLyogMDAsOWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAkvKiAwMSwxYSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCS8qIDAxLDFjLDAwLGNjICovCisJezB4YTAsIDB4ZTYsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwJLyogMDAsOWMsZTYsY2MgKi8KKwl7MHhhMCwgMHg4NiwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCS8qIDAwLDllLDg2LGNjICovCisJezB4YWEsIDB4MDksIDB4MDBjZX0sIC8qIDAwLDA5LGNlLGFhICovCisJezB4YWEsIDB4MGIsIDB4MDAwNX0sIC8qIDAwLDBiLDA1LGFhICovCisJezB4YWEsIDB4MGQsIDB4MDA1NH0sIC8qIDAwLDBkLDU0LGFhICovCisJezB4YWEsIDB4MGYsIDB4MDBlYn0sIC8qIDAwLDBmLGViLGFhICovCisJezB4YWEsIDB4ODcsIDB4MDAwMH0sIC8qIDAwLDg3LDAwLGFhICovCisJezB4YWEsIDB4ODgsIDB4MDAwNH0sIC8qIDAwLDg4LDA0LGFhICovCisJezB4YWEsIDB4ODksIDB4MDAwMH0sIC8qIDAwLDg5LDAwLGFhICovCisJezB4YWEsIDB4OGEsIDB4MDAwNX0sIC8qIDAwLDhhLDA1LGFhICovCisJezB4YWEsIDB4MTMsIDB4MDAwM30sIC8qIDAwLDEzLDAzLGFhICovCisJezB4YWEsIDB4MTYsIDB4MDA0MH0sIC8qIDAwLDE2LDQwLGFhICovCisJezB4YWEsIDB4MTgsIDB4MDA0MH0sIC8qIDAwLDE4LDQwLGFhICovCisJezB4YWEsIDB4MWQsIDB4MDAwMn0sIC8qIDAwLDFkLDAyLGFhICovCisJezB4YWEsIDB4MjksIDB4MDBlOH0sIC8qIDAwLDI5LGU4LGFhICovCisJezB4YWEsIDB4NDUsIDB4MDA0NX0sIC8qIDAwLDQ1LDQ1LGFhICovCisJezB4YWEsIDB4NTAsIDB4MDBlZH0sIC8qIDAwLDUwLGVkLGFhICovCisJezB4YWEsIDB4NTEsIDB4MDAyNX0sIC8qIDAwLDUxLDI1LGFhICovCisJezB4YWEsIDB4NTIsIDB4MDA0Mn0sIC8qIDAwLDUyLDQyLGFhICovCisJezB4YWEsIDB4NTMsIDB4MDAyZn0sIC8qIDAwLDUzLDJmLGFhICovCisJezB4YWEsIDB4NzksIDB4MDAyNX0sIC8qIDAwLDc5LDI1LGFhICovCisJezB4YWEsIDB4N2IsIDB4MDAwMH0sIC8qIDAwLDdiLDAwLGFhICovCisJezB4YWEsIDB4N2UsIDB4MDAyNX0sIC8qIDAwLDdlLDI1LGFhICovCisJezB4YWEsIDB4N2YsIDB4MDAyNX0sIC8qIDAwLDdmLDI1LGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAwMH0sIC8qIDAwLDIxLDAwLGFhICovCisJezB4YWEsIDB4MzMsIDB4MDAzNn0sIC8qIDAwLDMzLDM2LGFhICovCisJezB4YWEsIDB4MzYsIDB4MDA2MH0sIC8qIDAwLDM2LDYwLGFhICovCisJezB4YWEsIDB4MzcsIDB4MDAwOH0sIC8qIDAwLDM3LDA4LGFhICovCisJezB4YWEsIDB4M2IsIDB4MDAzMX0sIC8qIDAwLDNiLDMxLGFhICovCisJezB4YWEsIDB4NDQsIDB4MDAwZn0sIC8qIDAwLDQ0LDBmLGFhICovCisJezB4YWEsIDB4NTgsIDB4MDAwMn0sIC8qIDAwLDU4LDAyLGFhICovCisJezB4YWEsIDB4NjYsIDB4MDBjMH0sIC8qIDAwLDY2LGMwLGFhICovCisJezB4YWEsIDB4NjcsIDB4MDA0NH0sIC8qIDAwLDY3LDQ0LGFhICovCisJezB4YWEsIDB4NmIsIDB4MDBhMH0sIC8qIDAwLDZiLGEwLGFhICovCisJezB4YWEsIDB4NmMsIDB4MDA1NH0sIC8qIDAwLDZjLDU0LGFhICovCisJezB4YWEsIDB4ZDYsIDB4MDAwN30sIC8qIDAwLGQ2LDA3LGFhICovCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sIC8qIDAxLDAxLGY3LGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDA1LGNjICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sIC8qIDAxLDAwLDBkLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwgLyogMDEsODksMDYsY2MgKi8KKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwgLyogMDEsYWQsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwgLyogMDEsYzUsMDMsY2MgKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sIC8qIDAxLGNiLDEzLGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LCAvKiAwMiw1MCwwOCxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sIC8qIDAzLDAxLDA4LGNjICovCisJezB4YTAsIDB4N2EsIFpDM1hYX1IxMTZfUkdBSU59LCAvKiAwMSwxNiw3YSxjYyAqLworCXsweGEwLCAweDRhLCBaQzNYWF9SMTE4X0JHQUlOfSwgLyogMDEsMTgsNGEsY2MgKi8KKwl7fQorfTsKKworLyogZnJvbSBvZW05LmluZiAtIEhLUiwlUE8yMDMwJSxJbml0aWFsU2NhbGUgLSAzMjB4MjQwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwX21vZGUxW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LCAvKiAwMCwwMiwxMCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sIC8qIDAwLDAxLDAxLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwODBfSEJMQU5LSElHSH0sIC8qIDAwLDgwLDA0LGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwODFfSEJMQU5LTE9XfSwgLyogMDAsODEsMDUsY2MgKi8KKwl7MHhhMCwgMHgxNiwgWkMzWFhfUjA4M19SR0FJTkFERFJ9LCAvKiAwMCw4MywxNixjYyAqLworCXsweGEwLCAweDE4LCBaQzNYWF9SMDg1X0JHQUlOQUREUn0sIC8qIDAwLDg1LDE4LGNjICovCisJezB4YTAsIDB4MWEsIFpDM1hYX1IwODZfRVhQVElNRUhJR0h9LCAvKiAwMCw4NiwxYSxjYyAqLworCXsweGEwLCAweDFiLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LCAvKiAwMCw4NywxYixjYyAqLworCXsweGEwLCAweDFjLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LCAvKiAwMCw4OCwxYyxjYyAqLworCXsweGEwLCAweGVlLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LCAvKiAwMCw4YixlZSxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sIC8qIDAwLDA4LDAzLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDAzLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDAxLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LCAvKiAwMCwwMywwMixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LCAvKiAwMCwwNCw4MCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sIC8qIDAwLDA1LDAxLGNjICovCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LCAvKiAwMCwwNixlMCxjYyAqLworCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwgLyogMDEsODAsNDIsY2MgKi8KKwl7MHhhYSwgMHg4ZCwgMHgwMDA4fSwJCQkvKiAwMCw4ZCwwOCxhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sIC8qIDAwLDk4LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwgLyogMDAsOWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LCAvKiAwMSwxYSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sIC8qIDAxLDFjLDAwLGNjICovCisJezB4YTAsIDB4ZTgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwgLyogMDAsOWMsZTgsY2MgKi8KKwl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sIC8qIDAwLDllLDg4LGNjICovCisJezB4YWEsIDB4MDksIDB4MDBjY30sIC8qIDAwLDA5LGNjLGFhICovCisJezB4YWEsIDB4MGIsIDB4MDAwNX0sIC8qIDAwLDBiLDA1LGFhICovCisJezB4YWEsIDB4MGQsIDB4MDA1OH0sIC8qIDAwLDBkLDU4LGFhICovCisJezB4YWEsIDB4MGYsIDB4MDBlZH0sIC8qIDAwLDBmLGVkLGFhICovCisJezB4YWEsIDB4ODcsIDB4MDAwMH0sIC8qIDAwLDg3LDAwLGFhICovCisJezB4YWEsIDB4ODgsIDB4MDAwNH0sIC8qIDAwLDg4LDA0LGFhICovCisJezB4YWEsIDB4ODksIDB4MDAwMH0sIC8qIDAwLDg5LDAwLGFhICovCisJezB4YWEsIDB4OGEsIDB4MDAwNX0sIC8qIDAwLDhhLDA1LGFhICovCisJezB4YWEsIDB4MTMsIDB4MDAwM30sIC8qIDAwLDEzLDAzLGFhICovCisJezB4YWEsIDB4MTYsIDB4MDA0MH0sIC8qIDAwLDE2LDQwLGFhICovCisJezB4YWEsIDB4MTgsIDB4MDA0MH0sIC8qIDAwLDE4LDQwLGFhICovCisJezB4YWEsIDB4MWQsIDB4MDAwMn0sIC8qIDAwLDFkLDAyLGFhICovCisJezB4YWEsIDB4MjksIDB4MDBlOH0sIC8qIDAwLDI5LGU4LGFhICovCisJezB4YWEsIDB4NDUsIDB4MDA0NX0sIC8qIDAwLDQ1LDQ1LGFhICovCisJezB4YWEsIDB4NTAsIDB4MDBlZH0sIC8qIDAwLDUwLGVkLGFhICovCisJezB4YWEsIDB4NTEsIDB4MDAyNX0sIC8qIDAwLDUxLDI1LGFhICovCisJezB4YWEsIDB4NTIsIDB4MDA0Mn0sIC8qIDAwLDUyLDQyLGFhICovCisJezB4YWEsIDB4NTMsIDB4MDAyZn0sIC8qIDAwLDUzLDJmLGFhICovCisJezB4YWEsIDB4NzksIDB4MDAyNX0sIC8qIDAwLDc5LDI1LGFhICovCisJezB4YWEsIDB4N2IsIDB4MDAwMH0sIC8qIDAwLDdiLDAwLGFhICovCisJezB4YWEsIDB4N2UsIDB4MDAyNX0sIC8qIDAwLDdlLDI1LGFhICovCisJezB4YWEsIDB4N2YsIDB4MDAyNX0sIC8qIDAwLDdmLDI1LGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAwMH0sIC8qIDAwLDIxLDAwLGFhICovCisJezB4YWEsIDB4MzMsIDB4MDAzNn0sIC8qIDAwLDMzLDM2LGFhICovCisJezB4YWEsIDB4MzYsIDB4MDA2MH0sIC8qIDAwLDM2LDYwLGFhICovCisJezB4YWEsIDB4MzcsIDB4MDAwOH0sIC8qIDAwLDM3LDA4LGFhICovCisJezB4YWEsIDB4M2IsIDB4MDAzMX0sIC8qIDAwLDNiLDMxLGFhICovCisJezB4YWEsIDB4NDQsIDB4MDAwZn0sIC8qIDAwLDQ0LDBmLGFhICovCisJezB4YWEsIDB4NTgsIDB4MDAwMn0sIC8qIDAwLDU4LDAyLGFhICovCisJezB4YWEsIDB4NjYsIDB4MDBjMH0sIC8qIDAwLDY2LGMwLGFhICovCisJezB4YWEsIDB4NjcsIDB4MDA0NH0sIC8qIDAwLDY3LDQ0LGFhICovCisJezB4YWEsIDB4NmIsIDB4MDBhMH0sIC8qIDAwLDZiLGEwLGFhICovCisJezB4YWEsIDB4NmMsIDB4MDA1NH0sIC8qIDAwLDZjLDU0LGFhICovCisJezB4YWEsIDB4ZDYsIDB4MDAwN30sIC8qIDAwLGQ2LDA3LGFhICovCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sIC8qIDAxLDAxLGY3LGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sIC8qIDAwLDEyLDA1LGNjICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sIC8qIDAxLDAwLDBkLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwgLyogMDEsODksMDYsY2MgKi8KKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwgLyogMDEsYWQsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwgLyogMDEsYzUsMDMsY2MgKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sIC8qIDAxLGNiLDEzLGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LCAvKiAwMiw1MCwwOCxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sIC8qIDAzLDAxLDA4LGNjICovCisJezB4YTAsIDB4N2EsIFpDM1hYX1IxMTZfUkdBSU59LCAvKiAwMSwxNiw3YSxjYyAqLworCXsweGEwLCAweDRhLCBaQzNYWF9SMTE4X0JHQUlOfSwgLyogMDEsMTgsNGEsY2MgKi8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF81MEhaW10gPSB7CisJezB4YWEsIDB4OGQsIDB4MDAwOH0sIC8qIDAwLDhkLDA4LGFhICovCisJezB4YWEsIDB4MWEsIDB4MDAwMX0sIC8qIDAwLDFhLDAxLGFhICovCisJezB4YWEsIDB4MWIsIDB4MDAwYX0sIC8qIDAwLDFiLDBhLGFhICovCisJezB4YWEsIDB4MWMsIDB4MDBiMH0sIC8qIDAwLDFjLGIwLGFhICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwNSxjYyAqLworCXsweGEwLCAweDM1LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwzNSxjYyAqLworCXsweGEwLCAweDcwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5Miw3MCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4ODUsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5Niw4NSxjYyAqLworCXsweGEwLCAweDU4LCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsNTgsY2MgKi8KKwl7MHhhMCwgMHgwYywgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDBjLGNjICovCisJezB4YTAsIDB4MTgsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDE4LGNjICovCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LCAvKiAwMSxhOCw2MCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwxMCxjYyAqLworCXsweGEwLCAweDIyLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sIC8qIDAxLGFhLDIyLGNjICovCisJezB4YTAsIDB4ODgsIFpDM1hYX1IxOERfWVRBUkdFVH0sIC8qIDAxLDhkLDg4LGNjICovCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sIC8qIDAxLDFkLDU4LGNjICovCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LCAvKiAwMSw4MCw0MixjYyAqLworCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwXzYwSFpbXSA9IHsKKwl7MHhhYSwgMHg4ZCwgMHgwMDA4fSwgLyogMDAsOGQsMDgsYWEgKi8KKwl7MHhhYSwgMHgxYSwgMHgwMDAwfSwgLyogMDAsMWEsMDAsYWEgKi8KKwl7MHhhYSwgMHgxYiwgMHgwMGRlfSwgLyogMDAsMWIsZGUsYWEgKi8KKwl7MHhhYSwgMHgxYywgMHgwMDQwfSwgLyogMDAsMWMsNDAsYWEgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDA4LGNjICovCisJezB4YTAsIDB4YWUsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLGFlLGNjICovCisJezB4YTAsIDB4ODAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLDgwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHg2ZiwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDZmLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5NywyMCxjYyAqLworCXsweGEwLCAweDBjLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwgLyogMDEsOGMsMGMsY2MgKi8KKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwgLyogMDEsOGYsMTgsY2MgKi8KKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sIC8qIDAxLGE4LDYwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDEwLGNjICovCisJezB4YTAsIDB4MjIsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjIsY2MgKi8KKwl7MHhhMCwgMHg4OCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwJCS8qIDAxLDhkLDg4LGNjICovCisJCQkJCQkJLyogd2luOiAwMSw4ZCw4MCAqLworCXsweGEwLCAweDU4LCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAkJLyogMDEsMWQsNTgsY2MgKi8KKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIDAxLDgwLDQyLGNjICovCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBQTzIwMzBfTm9GbGlrZXJbXSA9IHsKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sIC8qIDAxLDgwLDAyLGNjICovCisJezB4YWEsIDB4OGQsIDB4MDAwZH0sIC8qIDAwLDhkLDBkLGFhICovCisJezB4YWEsIDB4MWEsIDB4MDAwMH0sIC8qIDAwLDFhLDAwLGFhICovCisJezB4YWEsIDB4MWIsIDB4MDAwMn0sIC8qIDAwLDFiLDAyLGFhICovCisJezB4YWEsIDB4MWMsIDB4MDA3OH0sIC8qIDAwLDFjLDc4LGFhICovCisJezB4YWEsIDB4NDYsIDB4MDAwMH0sIC8qIDAwLDQ2LDAwLGFhICovCisJezB4YWEsIDB4MTUsIDB4MDAwMH0sIC8qIDAwLDE1LDAwLGFhICovCisJe30KK307CisKKy8qIFRFU1QgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwQ0tfSW5pdGlhbFtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDAxLCAweDAwM2J9LAorCXsweGEwLCAweDBlLCAweDAwM2F9LAorCXsweGEwLCAweDAxLCAweDAwMzh9LAorCXsweGEwLCAweDBiLCAweDAwMzl9LAorCXsweGEwLCAweDAwLCAweDAwMzh9LAorCXsweGEwLCAweDBiLCAweDAwMzl9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHhkYywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4ZGMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDgzLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDExLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4RTcsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg4NywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgzMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDUxLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgzNSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg3RiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDMwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MzEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg3OCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDYyLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDExLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MkIsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4N2YsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgyYywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg3ZiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDJELCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDdmLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MmUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4N2YsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKKwl7MHhhMCwgMHhiNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAorCXsweGEwLCAweDA5LCAweDAxYWR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCisJezB4YTAsIDB4NmMsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4NjEsIFpDM1hYX1IxMTZfUkdBSU59LAorCXsweGEwLCAweDY1LCBaQzNYWF9SMTE4X0JHQUlOfSwKKwl7MHhhMCwgMHgwOSwgMHgwMWFkfSwKKwl7MHhhMCwgMHgxNSwgMHgwMWFlfSwKKwl7MHhhMCwgMHg0YywgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGYxLCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZmUsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDUxLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmMSwgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZWMsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg1MSwgWkMzWFhfUjExMl9SR0IyMn0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKwl7MHhhMCwgMHgzOCwgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgPiA1ICovCisJezB4YTAsIDB4NTEsIFpDM1hYX1IxMjFfR0FNTUEwMX0sCisJezB4YTAsIDB4NmUsIFpDM1hYX1IxMjJfR0FNTUEwMn0sCisJezB4YTAsIDB4OGMsIFpDM1hYX1IxMjNfR0FNTUEwM30sCisJezB4YTAsIDB4YTIsIFpDM1hYX1IxMjRfR0FNTUEwNH0sCisJezB4YTAsIDB4YjYsIFpDM1hYX1IxMjVfR0FNTUEwNX0sCisJezB4YTAsIDB4YzgsIFpDM1hYX1IxMjZfR0FNTUEwNn0sCisJezB4YTAsIDB4ZDYsIFpDM1hYX1IxMjdfR0FNTUEwN30sCisJezB4YTAsIDB4ZTIsIFpDM1hYX1IxMjhfR0FNTUEwOH0sCisJezB4YTAsIDB4ZWQsIFpDM1hYX1IxMjlfR0FNTUEwOX0sCisJezB4YTAsIDB4ZjUsIFpDM1hYX1IxMkFfR0FNTUEwQX0sCisJezB4YTAsIDB4ZmMsIFpDM1hYX1IxMkJfR0FNTUEwQn0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkNfR0FNTUEwQ30sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkRfR0FNTUEwRH0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkVfR0FNTUEwRX0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkZfR0FNTUEwRn0sCisJezB4YTAsIDB4MTIsIFpDM1hYX1IxMzBfR0FNTUExMH0sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxMzFfR0FNTUExMX0sCisJezB4YTAsIDB4MWQsIFpDM1hYX1IxMzJfR0FNTUExMn0sCisJezB4YTAsIDB4MWEsIFpDM1hYX1IxMzNfR0FNTUExM30sCisJezB4YTAsIDB4MTUsIFpDM1hYX1IxMzRfR0FNTUExNH0sCisJezB4YTAsIDB4MTIsIFpDM1hYX1IxMzVfR0FNTUExNX0sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxMzZfR0FNTUExNn0sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMzdfR0FNTUExN30sCisJezB4YTAsIDB4MGIsIFpDM1hYX1IxMzhfR0FNTUExOH0sCisJezB4YTAsIDB4MDksIFpDM1hYX1IxMzlfR0FNTUExOX0sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxM0FfR0FNTUExQX0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IxM0JfR0FNTUExQn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxM0NfR0FNTUExQ30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxM0RfR0FNTUExRH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxM0VfR0FNTUExRX0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IxM0ZfR0FNTUExRn0sCisJezB4YTAsIDB4NGMsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KKwl7MHhhMCwgMHhmMSwgWkMzWFhfUjEwQl9SR0IwMX0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxMENfUkdCMDJ9LAorCXsweGEwLCAweGZlLCBaQzNYWF9SMTBEX1JHQjEwfSwKKwl7MHhhMCwgMHg1MSwgWkMzWFhfUjEwRV9SR0IxMX0sCisJezB4YTAsIDB4ZjEsIFpDM1hYX1IxMEZfUkdCMTJ9LAorCXsweGEwLCAweGVjLCBaQzNYWF9SMTEwX1JHQjIwfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjExMV9SR0IyMX0sCisJezB4YTAsIDB4NTEsIFpDM1hYX1IxMTJfUkdCMjJ9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDksIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwOSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgzNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHhkMiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHg5YSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFjLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDY2LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4ZDcsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4ZjQsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4ZjksIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDA5LCAweDAxYWR9LAorCXsweGEwLCAweDE1LCAweDAxYWV9LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwQ0tfSW5pdGlhbFNjYWxlW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MDEsIDB4MDAzYn0sCisJezB4YTAsIDB4MGUsIDB4MDAzYX0sCisJezB4YTAsIDB4MDEsIDB4MDAzOH0sCisJezB4YTAsIDB4MGIsIDB4MDAzOX0sCisJezB4YTAsIDB4MDAsIDB4MDAzOH0sCisJezB4YTAsIDB4MGIsIDB4MDAzOX0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCXsweGEwLCAweGRjLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKKwl7MHhhMCwgMHhkYywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4ODMsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MTEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHhlNSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDg1LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDMwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4NTEsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDM1LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDdGLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MzAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgzMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDU4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDc4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4NjIsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4MTEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgyQiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg3ZiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDJDLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweDdGLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MkQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCisJezB4YTAsIDB4N2YsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKKwl7MHhhMCwgMHgyZSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg3ZiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAorCXsweGEwLCAweGI3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCisJezB4YTAsIDB4MDksIDB4MDFhZH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwKKwl7MHhhMCwgMHg2YywgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKKwl7MHhhMCwgMHg2MSwgWkMzWFhfUjExNl9SR0FJTn0sCisJezB4YTAsIDB4NjUsIFpDM1hYX1IxMThfQkdBSU59LAorCXsweGEwLCAweDA5LCAweDAxYWR9LAorCXsweGEwLCAweDE1LCAweDAxYWV9LAorCXsweGEwLCAweDRjLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZjEsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhmZSwgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NTEsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGYxLCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhlYywgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDUxLCBaQzNYWF9SMTEyX1JHQjIyfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMUM2X1NIQVJQTkVTUzAwfSwJLyogc2hhcnBuZXNzKyAqLworCXsweGEwLCAweDBmLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogc2hhcnBuZXNzLSAqLworCXsweGEwLCAweDM4LCBaQzNYWF9SMTIwX0dBTU1BMDB9LAkvKiBnYW1tYSA+IDUgKi8KKwl7MHhhMCwgMHg1MSwgWkMzWFhfUjEyMV9HQU1NQTAxfSwKKwl7MHhhMCwgMHg2ZSwgWkMzWFhfUjEyMl9HQU1NQTAyfSwKKwl7MHhhMCwgMHg4YywgWkMzWFhfUjEyM19HQU1NQTAzfSwKKwl7MHhhMCwgMHhhMiwgWkMzWFhfUjEyNF9HQU1NQTA0fSwKKwl7MHhhMCwgMHhiNiwgWkMzWFhfUjEyNV9HQU1NQTA1fSwKKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjEyNl9HQU1NQTA2fSwKKwl7MHhhMCwgMHhkNiwgWkMzWFhfUjEyN19HQU1NQTA3fSwKKwl7MHhhMCwgMHhlMiwgWkMzWFhfUjEyOF9HQU1NQTA4fSwKKwl7MHhhMCwgMHhlZCwgWkMzWFhfUjEyOV9HQU1NQTA5fSwKKwl7MHhhMCwgMHhmNSwgWkMzWFhfUjEyQV9HQU1NQTBBfSwKKwl7MHhhMCwgMHhmYywgWkMzWFhfUjEyQl9HQU1NQTBCfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEyQ19HQU1NQTBDfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEyRF9HQU1NQTBEfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEyRV9HQU1NQTBFfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjEyRl9HQU1NQTBGfSwKKwl7MHhhMCwgMHgxMiwgWkMzWFhfUjEzMF9HQU1NQTEwfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjEzMV9HQU1NQTExfSwKKwl7MHhhMCwgMHgxZCwgWkMzWFhfUjEzMl9HQU1NQTEyfSwKKwl7MHhhMCwgMHgxYSwgWkMzWFhfUjEzM19HQU1NQTEzfSwKKwl7MHhhMCwgMHgxNSwgWkMzWFhfUjEzNF9HQU1NQTE0fSwKKwl7MHhhMCwgMHgxMiwgWkMzWFhfUjEzNV9HQU1NQTE1fSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjEzNl9HQU1NQTE2fSwKKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEzN19HQU1NQTE3fSwKKwl7MHhhMCwgMHgwYiwgWkMzWFhfUjEzOF9HQU1NQTE4fSwKKwl7MHhhMCwgMHgwOSwgWkMzWFhfUjEzOV9HQU1NQTE5fSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjEzQV9HQU1NQTFBfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjEzQl9HQU1NQTFCfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjEzQ19HQU1NQTFDfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjEzRF9HQU1NQTFEfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjEzRV9HQU1NQTFFfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjEzRl9HQU1NQTFGfSwKKwl7MHhhMCwgMHg0YywgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLworCXsweGEwLCAweGYxLCBaQzNYWF9SMTBCX1JHQjAxfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjEwQ19SR0IwMn0sCisJezB4YTAsIDB4ZmUsIFpDM1hYX1IxMERfUkdCMTB9LAorCXsweGEwLCAweDUxLCBaQzNYWF9SMTBFX1JHQjExfSwKKwl7MHhhMCwgMHhmMSwgWkMzWFhfUjEwRl9SR0IxMn0sCisJezB4YTAsIDB4ZWMsIFpDM1hYX1IxMTBfUkdCMjB9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTExX1JHQjIxfSwKKwl7MHhhMCwgMHg1MSwgWkMzWFhfUjExMl9SR0IyMn0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKKwl7MHhhMCwgMHg2MiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAorCXsweGEwLCAweDA5LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAorCXsweGEwLCAweGFhLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDliLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDQ3LCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4NjYsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHg2MiwgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDksIDB4MDFhZH0sCisJezB4YTAsIDB4MTUsIDB4MDFhZX0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgzMCwgMHgwMDA3fSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAorCXsweGEwLCAweDAwLCAweDAwMDd9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY3h4X0luaXRpYWxbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjBBNV9FWFBPU1VSRUdBSU59LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMEE2X0VYUE9TVVJFQkxBQ0tMVkx9LAorCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDlEX1dJTldJRFRISElHSH0sCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMDhEX0NPTVBBQklMSVRZTU9ERX0sCisJezB4YTAsIDB4ZjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHg2OCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAorCXsweGExLCAweDAxLCAweDAwMDJ9LAorCXsweGExLCAweDAxLCAweDAwMDh9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKworCXsweGEwLCAweDY4LCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZWMsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGVjLCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhlYywgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NjgsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGVjLCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhlYywgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZWMsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDY4LCBaQzNYWF9SMTEyX1JHQjIyfSwKKworCXsweGExLCAweDAxLCAweDAxOGR9LAorCXsweGEwLCAweDkwLCBaQzNYWF9SMThEX1lUQVJHRVR9LAkvKiA5MCAqLworCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKworCXsweGFhLCAweGEzLCAweDAwMDF9LAorCXsweGFhLCAweGE0LCAweDAwNzd9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMEEzX0VYUE9TVVJFVElNRUhJR0h9LAorCXsweGEwLCAweDc3LCBaQzNYWF9SMEE0X0VYUE9TVVJFVElNRUxPV30sCisKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAwICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAzICovCisJezB4YTAsIDB4ZTgsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIGU4ICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMCAqLworCXsweGEwLCAweDdkLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogN2QgKi8KKworCXsweGEwLCAweDBjLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDggKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAyNCAqLworCXsweGEwLCAweGYwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweGY4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDlGX01BWFhISUdIfSwKKwl7MHhhMCwgMHhjMCwgWkMzWFhfUjBBMF9NQVhYTE9XfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOfSwJLyogNTAgKi8KKwl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTEsIDB4MDEsIDB4MDE4MH0sCisJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjeHhfSW5pdGlhbFNjYWxlW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisJezB4YTAsIDB4NDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKworCXsweGEwLCAweDAyLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMEE1X0VYUE9TVVJFR0FJTn0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwQTZfRVhQT1NVUkVCTEFDS0xWTH0sCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAorCXsweGEwLCAweDA1LCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MGYsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDBmLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4ZTYsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5RF9XSU5XSURUSEhJR0h9LAorCXsweGEwLCAweDg2LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjA4RF9DT01QQUJJTElUWU1PREV9LAorCXsweGEwLCAweDM3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAorCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCisJezB4YTAsIDB4NjgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAorCXsweGEwLCAweDAwLCAweDAxYWR9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAorCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDAyfSwKKwl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKKworCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTEsIDB4MDEsIDB4MDAwOH0sCS8qIGNsb2NrID8gKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KKwl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KKworCXsweGEwLCAweDY4LCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCisJezB4YTAsIDB4ZWMsIFpDM1hYX1IxMEJfUkdCMDF9LAorCXsweGEwLCAweGVjLCBaQzNYWF9SMTBDX1JHQjAyfSwKKwl7MHhhMCwgMHhlYywgWkMzWFhfUjEwRF9SR0IxMH0sCisJezB4YTAsIDB4NjgsIFpDM1hYX1IxMEVfUkdCMTF9LAorCXsweGEwLCAweGVjLCBaQzNYWF9SMTBGX1JHQjEyfSwKKwl7MHhhMCwgMHhlYywgWkMzWFhfUjExMF9SR0IyMH0sCisJezB4YTAsIDB4ZWMsIFpDM1hYX1IxMTFfUkdCMjF9LAorCXsweGEwLCAweDY4LCBaQzNYWF9SMTEyX1JHQjIyfSwKKworCXsweGExLCAweDAxLCAweDAxOGR9LAorCXsweGEwLCAweDkwLCBaQzNYWF9SMThEX1lUQVJHRVR9LAorCXsweGExLCAweDAxLCAweDAxODB9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhYSwgMHhhMywgMHgwMDAxfSwKKwl7MHhhYSwgMHhhNCwgMHgwMDYzfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwKKwl7MHhhMCwgMHg2MywgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgzOCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHg0NywgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4ZDMsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4ZGEsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4ZWEsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwOUZfTUFYWEhJR0h9LAorCXsweGEwLCAweDRjLCBaQzNYWF9SMEEwX01BWFhMT1d9LAorCXsweGEwLCAweDUwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGN4eF81MEhaW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YWEsIDB4YTMsIDB4MDAwMX0sIC8qIDAwLGEzLDAxLGFhICovCisJezB4YWEsIDB4YTQsIDB4MDA2M30sIC8qIDAwLGE0LDYzLGFhICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwQTNfRVhQT1NVUkVUSU1FSElHSH0sIC8qIDAwLGEzLDAxLGNjICovCisJezB4YTAsIDB4NjMsIFpDM1hYX1IwQTRfRVhQT1NVUkVUSU1FTE9XfSwgLyogMDAsYTQsNjMsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDAyLGNjICovCisJezB4YTAsIDB4MzgsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLDM4LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4NDcsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5Nyw0NyxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwgLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwgLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwgLyogMDEsYTksMGMsY2MgKi8KKwl7MHhhMCwgMHgyNiwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LCAvKiAwMSxhYSwyNixjYyAqLworCXsweGEwLCAweGQzLCBaQzNYWF9SMDFEX0hTWU5DXzB9LCAvKiAwMCwxZCxkMyxjYyAqLworCXsweGEwLCAweGRhLCBaQzNYWF9SMDFFX0hTWU5DXzF9LCAvKiAwMCwxZSxkYSxjYyAqLworCXsweGEwLCAweGVhLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LCAvKiAwMCwxZixlYSxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LCAvKiAwMCwyMCxmZixjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDlGX01BWFhISUdIfSwgLyogMDAsOWYsMDMsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY3h4XzUwSFpTY2FsZVtdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLworCXsweGFhLCAweGEzLCAweDAwMDF9LCAvKiAwMCxhMywwMSxhYSAqLworCXsweGFhLCAweGE0LCAweDAwNzd9LCAvKiAwMCxhNCw3NyxhYSAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMEEzX0VYUE9TVVJFVElNRUhJR0h9LCAvKiAwMCxhMywwMSxjYyAqLworCXsweGEwLCAweDc3LCBaQzNYWF9SMEE0X0VYUE9TVVJFVElNRUxPV30sIC8qIDAwLGE0LDc3LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwwMyxjYyAqLworCXsweGEwLCAweGU4LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MixlOCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDdkLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsN2QsY2MgKi8KKwl7MHhhMCwgMHgxNCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDE0LGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDBjLGNjICovCisJezB4YTAsIDB4MjYsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMjYsY2MgKi8KKwl7MHhhMCwgMHhmMCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsZjAsY2MgKi8KKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsZjQsY2MgKi8KKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsZjgsY2MgKi8KKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwgLyogMDAsMjAsZmYsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjA5Rl9NQVhYSElHSH0sIC8qIDAwLDlmLDAzLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGN4eF82MEhaW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCisJezB4YWEsIDB4YTMsIDB4MDAwMX0sIC8qIDAwLGEzLDAxLGFhICovCisJezB4YWEsIDB4YTQsIDB4MDAzNn0sIC8qIDAwLGE0LDM2LGFhICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwQTNfRVhQT1NVUkVUSU1FSElHSH0sIC8qIDAwLGEzLDAxLGNjICovCisJezB4YTAsIDB4MzYsIFpDM1hYX1IwQTRfRVhQT1NVUkVUSU1FTE9XfSwgLyogMDAsYTQsMzYsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sIC8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sIC8qIDAxLDkxLDAxLGNjICovCisJezB4YTAsIDB4ZjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sIC8qIDAxLDkyLGYwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwgLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sIC8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4M2UsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LCAvKiAwMSw5NywzZSxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwgLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwgLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwgLyogMDEsYTksMGMsY2MgKi8KKwl7MHhhMCwgMHgyNiwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LCAvKiAwMSxhYSwyNixjYyAqLworCXsweGEwLCAweGNhLCBaQzNYWF9SMDFEX0hTWU5DXzB9LCAvKiAwMCwxZCxjYSxjYyAqLworCXsweGEwLCAweGQwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LCAvKiAwMCwxZSxkMCxjYyAqLworCXsweGEwLCAweGUwLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LCAvKiAwMCwxZixlMCxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LCAvKiAwMCwyMCxmZixjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDlGX01BWFhISUdIfSwgLyogMDAsOWYsMDMsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY3h4XzYwSFpTY2FsZVtdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLworCXsweGFhLCAweGEzLCAweDAwMDF9LCAvKiAwMCxhMywwMSxhYSAqLworCXsweGFhLCAweGE0LCAweDAwNzd9LCAvKiAwMCxhNCw3NyxhYSAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMEEzX0VYUE9TVVJFVElNRUhJR0h9LCAvKiAwMCxhMywwMSxjYyAqLworCXsweGEwLCAweDc3LCBaQzNYWF9SMEE0X0VYUE9TVVJFVElNRUxPV30sIC8qIDAwLGE0LDc3LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwwMyxjYyAqLworCXsweGEwLCAweGU4LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MixlOCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDdkLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsN2QsY2MgKi8KKwl7MHhhMCwgMHgxNCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDE0LGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDBjLGNjICovCisJezB4YTAsIDB4MjYsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMjYsY2MgKi8KKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsYzgsY2MgKi8KKwl7MHhhMCwgMHhkMCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsZDAsY2MgKi8KKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsZTAsY2MgKi8KKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwgLyogMDAsMjAsZmYsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjA5Rl9NQVhYSElHSH0sIC8qIDAwLDlmLDAzLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGN4eF9Ob0ZsaWtlcltdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLworCXsweGFhLCAweGEzLCAweDAwMDF9LCAvKiAwMCxhMywwMSxhYSAqLworCXsweGFhLCAweGE0LCAweDAwNDB9LCAvKiAwMCxhNCw0MCxhYSAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMEEzX0VYUE9TVVJFVElNRUhJR0h9LCAvKiAwMCxhMywwMSxjYyAqLworCXsweGEwLCAweDQwLCBaQzNYWF9SMEE0X0VYUE9TVVJFVElNRUxPV30sIC8qIDAwLGE0LDQwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LCAvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LCAvKiAwMSw5MSwwMSxjYyAqLworCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LCAvKiAwMSw5MixmMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sIC8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsMTAsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sIC8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sIC8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sIC8qIDAxLGE5LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwgLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHhiYywgWkMzWFhfUjAxRF9IU1lOQ18wfSwgLyogMDAsMWQsYmMsY2MgKi8KKwl7MHhhMCwgMHhkMCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwgLyogMDAsMWUsZDAsY2MgKi8KKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwgLyogMDAsMWYsZTAsY2MgKi8KKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwgLyogMDAsMjAsZmYsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5Rl9NQVhYSElHSH0sIC8qIDAwLDlmLDAyLGNjICovCisJe30KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHhhMywgMHgwMDAxfSwgLyogMDAsYTMsMDEsYWEgKi8KKwl7MHhhYSwgMHhhNCwgMHgwMDkwfSwgLyogMDAsYTQsOTAsYWEgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwgLyogMDAsYTMsMDEsY2MgKi8KKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LCAvKiAwMCxhNCw5MCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwgLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwgLyogMDEsOTEsMDMsY2MgKi8KKwl7MHhhMCwgMHhmMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwgLyogMDEsOTIsZjAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LCAvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwgLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sIC8qIDAxLDk3LDEwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LCAvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LCAvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LCAvKiAwMSxhOSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sIC8qIDAxLGFhLDAwLGNjICovCisJezB4YTAsIDB4YmMsIFpDM1hYX1IwMURfSFNZTkNfMH0sIC8qIDAwLDFkLGJjLGNjICovCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sIC8qIDAwLDFlLGQwLGNjICovCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sIC8qIDAwLDFmLGUwLGNjICovCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOUZfTUFYWEhJR0h9LCAvKiAwMCw5ZiwwMixjYyAqLworCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjLCAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiAwMCwwOCwwMixjYywgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MsICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkJLyogMDAsMDIsMDAsY2MsCisJCQkJCQkJICogMDwtPjEwICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAkvKiAwMCwwMywwMixjYywgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwJCS8qIDAwLDA0LDgwLGNjLCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCS8qIDAwLDA1LDAxLGNjLCAqLworCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwJLyogMDAsMDYsZTAsY2MsICovCisJezB4YTAsIDB4OTgsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCQkvKiAwMCw4Yiw5OCxjYywgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAkvKiAwMCwwMSwwMSxjYywgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDMsY2MsICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAxLGNjLCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCQkvKiAwMCw5OCwwMCxjYywgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAkJLyogMDAsOWEsMDAsY2MsICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwJCS8qIDAxLDFhLDAwLGNjLCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCQkvKiAwMSwxYywwMCxjYywgKi8KKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAkJLyogMDAsOWMsZTYsY2MsCisJCQkJCQkJICogNjwtPjggKi8KKwl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCQkvKiAwMCw5ZSw4NixjYywKKwkJCQkJCQkgKiA2PC0+OCAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMTAsY2MsICovCisJezB4YTAsIDB4OTgsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCQkvKiAwMCw4Yiw5OCxjYywgKi8KKwl7MHhhYSwgMHgxYiwgMHgwMDI0fSwJCS8qIDAwLDFiLDI0LGFhLCAqLworCXsweGRkLCAweDAwLCAweDAwODB9LAkJLyogMDAsMDAsODAsZGQsICovCisJezB4YWEsIDB4MWIsIDB4MDAwMH0sCQkvKiAwMCwxYiwwMCxhYSwgKi8KKwl7MHhhYSwgMHgxMywgMHgwMDAyfSwJCS8qIDAwLDEzLDAyLGFhLCAqLworCXsweGFhLCAweDE1LCAweDAwMDR9LAkJLyogMDAsMTUsMDQsYWEgKi8KKwl7MHhhYSwgMHgwMSwgMHgwMDAwfSwKKwl7MHhhYSwgMHgwMSwgMHgwMDAwfSwKKwl7MHhhYSwgMHgxYSwgMHgwMDAwfSwJCS8qIDAwLDFhLDAwLGFhLCAqLworCXsweGFhLCAweDFjLCAweDAwMTd9LAkJLyogMDAsMWMsMTcsYWEsICovCisJezB4YTAsIDB4ODIsIFpDM1hYX1IwODZfRVhQVElNRUhJR0h9LAkJLyogMDAsODYsODIsY2MsICovCisJezB4YTAsIDB4ODMsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4Nyw4MyxjYywgKi8KKwl7MHhhMCwgMHg4NCwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDg0LGNjLCAqLworCXsweGFhLCAweDA1LCAweDAwMTB9LAkJLyogMDAsMDUsMTAsYWEsICovCisJezB4YWEsIDB4MGEsIDB4MDAwMH0sCQkvKiAwMCwwYSwwMCxhYSwgKi8KKwl7MHhhYSwgMHgwYiwgMHgwMGEwfSwJCS8qIDAwLDBiLGEwLGFhLCAqLworCXsweGFhLCAweDBjLCAweDAwMDB9LAkJLyogMDAsMGMsMDAsYWEsICovCisJezB4YWEsIDB4MGQsIDB4MDBhMH0sCQkvKiAwMCwwZCxhMCxhYSwgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDAwfSwJCS8qIDAwLDBlLDAwLGFhLCAqLworCXsweGFhLCAweDBmLCAweDAwYTB9LAkJLyogMDAsMGYsYTAsYWEsICovCisJezB4YWEsIDB4MTAsIDB4MDAwMH0sCQkvKiAwMCwxMCwwMCxhYSwgKi8KKwl7MHhhYSwgMHgxMSwgMHgwMGEwfSwJCS8qIDAwLDExLGEwLGFhLCAqLworCXsweGEwLCAweDAwLCAweDAwMzl9LAorCXsweGExLCAweDAxLCAweDAwMzd9LAorCXsweGFhLCAweDE2LCAweDAwMDF9LAkJLyogMDAsMTYsMDEsYWEsICovCisJezB4YWEsIDB4MTcsIDB4MDBlOH0sCQkvKiAwMCwxNyxlNixhYSwgKGU2IC0+IGU4KSAqLworCXsweGFhLCAweDE4LCAweDAwMDJ9LAkJLyogMDAsMTgsMDIsYWEsICovCisJezB4YWEsIDB4MTksIDB4MDA4OH0sCQkvKiAwMCwxOSw4NixhYSwgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDIwfSwJCS8qIDAwLDIwLDIwLGFhLCAqLworCXsweGEwLCAweGI3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAkvKiAwMSwwMSxiNyxjYywgKi8KKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDUsY2MsICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCQkvKiAwMSwwMCwwZCxjYywgKi8KKwl7MHhhMCwgMHg3NiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAkJLyogMDEsODksNzYsY2MsICovCisJezB4YTAsIDB4MDksIDB4MDFhZH0sCQkJCS8qIDAxLGFkLDA5LGNjLCAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAkJLyogMDEsYzUsMDMsY2MsICovCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkJLyogMDEsY2IsMTMsY2MsICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAkvKiAwMiw1MCwwOCxjYywgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAkJLyogMDMsMDEsMDgsY2MsICovCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAkJLyogMDEsYTgsNjAsY2MsICovCisJezB4YTAsIDB4NjEsIFpDM1hYX1IxMTZfUkdBSU59LAkJCS8qIDAxLDE2LDYxLGNjLCAqLworCXsweGEwLCAweDY1LCBaQzNYWF9SMTE4X0JHQUlOfSwJCQkvKiAwMSwxOCw2NSxjYyAqLworCXt9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxTY2FsZVtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MsICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAyLGNjLCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYywgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwxMCxjYywgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCS8qIDAwLDAzLDAyLGNjLCAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAkJLyogMDAsMDQsODAsY2MsICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwJLyogMDAsMDUsMDEsY2MsICovCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAkvKiAwMCwwNixlMCxjYywgKi8KKwl7MHhhMCwgMHg5OCwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJCS8qIDAwLDhiLDk4LGNjLCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCS8qIDAwLDAxLDAxLGNjLCAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMyxjYywgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDEsY2MsICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwJCS8qIDAwLDk4LDAwLGNjLCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCQkvKiAwMCw5YSwwMCxjYywgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAkJLyogMDEsMWEsMDAsY2MsICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwJCS8qIDAxLDFjLDAwLGNjLCAqLworCXsweGEwLCAweGU4LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCQkvKiAwMCw5YyxlOCxjYywKKwkJCQkJCQkgKiA4PC0+NiAqLworCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwJCS8qIDAwLDllLDg4LGNjLAorCQkJCQkJCSAqIDg8LT42ICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywxMCxjYywgKi8KKwl7MHhhMCwgMHg5OCwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJCS8qIDAwLDhiLDk4LGNjLCAqLworCXsweGFhLCAweDFiLCAweDAwMjR9LAkJLyogMDAsMWIsMjQsYWEsICovCisJezB4ZGQsIDB4MDAsIDB4MDA4MH0sCQkvKiAwMCwwMCw4MCxkZCwgKi8KKwl7MHhhYSwgMHgxYiwgMHgwMDAwfSwJCS8qIDAwLDFiLDAwLGFhLCAqLworCXsweGFhLCAweDEzLCAweDAwMDJ9LAkJLyogMDAsMTMsMDIsYWEsICovCisJezB4YWEsIDB4MTUsIDB4MDAwNH0sCQkvKiAwMCwxNSwwNCxhYSAqLworCXsweGFhLCAweDAxLCAweDAwMDB9LAorCXsweGFhLCAweDAxLCAweDAwMDB9LAorCXsweGFhLCAweDFhLCAweDAwMDB9LAkJLyogMDAsMWEsMDAsYWEsICovCisJezB4YWEsIDB4MWMsIDB4MDAxN30sCQkvKiAwMCwxYywxNyxhYSwgKi8KKwl7MHhhMCwgMHg4MiwgWkMzWFhfUjA4Nl9FWFBUSU1FSElHSH0sCS8qIDAwLDg2LDgyLGNjLCAqLworCXsweGEwLCAweDgzLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkvKiAwMCw4Nyw4MyxjYywgKi8KKwl7MHhhMCwgMHg4NCwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJLyogMDAsODgsODQsY2MsICovCisJezB4YWEsIDB4MDUsIDB4MDAxMH0sCQkvKiAwMCwwNSwxMCxhYSwgKi8KKwl7MHhhYSwgMHgwYSwgMHgwMDAwfSwJCS8qIDAwLDBhLDAwLGFhLCAqLworCXsweGFhLCAweDBiLCAweDAwYTB9LAkJLyogMDAsMGIsYTAsYWEsICovCisJezB4YWEsIDB4MGMsIDB4MDAwMH0sCQkvKiAwMCwwYywwMCxhYSwgKi8KKwl7MHhhYSwgMHgwZCwgMHgwMGEwfSwJCS8qIDAwLDBkLGEwLGFhLCAqLworCXsweGFhLCAweDBlLCAweDAwMDB9LAkJLyogMDAsMGUsMDAsYWEsICovCisJezB4YWEsIDB4MGYsIDB4MDBhMH0sCQkvKiAwMCwwZixhMCxhYSwgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMDAwfSwJCS8qIDAwLDEwLDAwLGFhLCAqLworCXsweGFhLCAweDExLCAweDAwYTB9LAkJLyogMDAsMTEsYTAsYWEsICovCisJezB4YTAsIDB4MDAsIDB4MDAzOX0sCisJezB4YTEsIDB4MDEsIDB4MDAzN30sCisJezB4YWEsIDB4MTYsIDB4MDAwMX0sCQkvKiAwMCwxNiwwMSxhYSwgKi8KKwl7MHhhYSwgMHgxNywgMHgwMGU4fSwJCS8qIDAwLDE3LGU2LGFhIChlNiAtPiBlOCkgKi8KKwl7MHhhYSwgMHgxOCwgMHgwMDAyfSwJCS8qIDAwLDE4LDAyLGFhLCAqLworCXsweGFhLCAweDE5LCAweDAwODh9LAkJLyogMDAsMTksODgsYWEsICovCisJezB4YWEsIDB4MjAsIDB4MDAyMH0sCQkvKiAwMCwyMCwyMCxhYSwgKi8KKwl7MHhhMCwgMHhiNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwJLyogMDEsMDEsYjcsY2MsICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDA1LGNjLCAqLworCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGQsY2MsICovCisJezB4YTAsIDB4NzYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJCS8qIDAxLDg5LDc2LGNjLCAqLworCXsweGEwLCAweDA5LCAweDAxYWR9LAkJCQkvKiAwMSxhZCwwOSxjYywgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwJCS8qIDAxLGM1LDAzLGNjLCAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJCS8qIDAxLGNiLDEzLGNjLCAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwJLyogMDIsNTAsMDgsY2MsICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwJCS8qIDAzLDAxLDA4LGNjLCAqLworCXsweGEwLCAweDYwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwJCS8qIDAxLGE4LDYwLGNjLCAqLworCXsweGEwLCAweDYxLCBaQzNYWF9SMTE2X1JHQUlOfSwJCS8qIDAxLDE2LDYxLGNjLCAqLworCXsweGEwLCAweDY1LCBaQzNYWF9SMTE4X0JHQUlOfSwJCS8qIDAxLDE4LDY1LGNjICovCisJe30KK307CisvKiAiNTBIWiIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmlsdGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzUwSFpbXSA9IHsKKwl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCisJezB4YWEsIDB4ODMsIDB4MDAwMX0sCQkvKiAwMCw4MywwMSxhYSAqLworCXsweGFhLCAweDg0LCAweDAwYWF9LAkJLyogMDAsODQsYWEsYWEgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjLCAqLworCXsweGEwLCAweDA2LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwZCxjYywgKi8KKwl7MHhhMCwgMHhhOCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsNTAsY2MsICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MsICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYywgKi8KKwl7MHhhMCwgMHg4ZSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDQ3LGNjLCAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDBlLGNjLCAqLworCXsweGEwLCAweDE1LCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMTUsY2MsICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDEwLGNjLCAqLworCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjLCAqLworCXsweGEwLCAweDYyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNjIsY2MsICovCisJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw5MCxjYywgKi8KKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGM4LGNjLCAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkJLyogMDAsMjAsZmYsY2MsICovCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCQkvKiAwMSwxZCw1OCxjYywgKi8KKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIDAxLDgwLDQyLGNjLCAqLworCXsweGEwLCAweDc4LCBaQzNYWF9SMThEX1lUQVJHRVR9LAkJLyogMDEsOGQsNzgsY2MgKi8KKwl7fQorfTsKKworLyogIjUwSFpTY2FsZSIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmlsdGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzUwSFpTY2FsZVtdID0geworCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KKwl7MHhhYSwgMHg4MywgMHgwMDAzfSwJCS8qIDAwLDgzLDAzLGFhICovCisJezB4YWEsIDB4ODQsIDB4MDA1NH0sCQkvKiAwMCw4NCw1NCxhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MsICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDBkLGNjLCAqLworCXsweGEwLCAweDUwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5Miw1MCxjYywgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYywgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjLCAqLworCXsweGEwLCAweDhlLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsOGUsY2MsICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMGUsY2MsICovCisJezB4YTAsIDB4MTUsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwxNSxjYywgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTAsY2MsICovCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MsICovCisJezB4YTAsIDB4NjIsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw2MixjYywgKi8KKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDkwLGNjLCAqLworCXsweGEwLCAweGM4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsMWYsYzgsY2MsICovCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCQkvKiAwMCwyMCxmZixjYywgKi8KKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOfSwJCS8qIDAxLDFkLDU4LGNjLCAqLworCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwJLyogMDEsODAsNDIsY2MsICovCisJezB4YTAsIDB4NzgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCQkvKiAwMSw4ZCw3OCxjYyAqLworCXt9Cit9OworCisvKiAiNjBIWiIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmlsdGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpbXSA9IHsKKwl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCisJezB4YWEsIDB4ODMsIDB4MDAwMX0sCQkvKiAwMCw4MywwMSxhYSAqLworCXsweGFhLCAweDg0LCAweDAwNjJ9LAkJLyogMDAsODQsNjIsYWEgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjLCAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwNSxjYywgKi8KKwl7MHhhMCwgMHg4OCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsODgsY2MsICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MsICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYywgKi8KKwl7MHhhMCwgMHgzYiwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDNiLGNjLCAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDBlLGNjLCAqLworCXsweGEwLCAweDE1LCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMTUsY2MsICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDEwLGNjLCAqLworCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjLCAqLworCXsweGEwLCAweDYyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNjIsY2MsICovCisJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw5MCxjYywgKi8KKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGM4LGNjLCAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkJLyogMDAsMjAsZmYsY2MsICovCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCQkvKiAwMSwxZCw1OCxjYywgKi8KKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIDAxLDgwLDQyLGNjLCAqLworCXsweGEwLCAweDc4LCBaQzNYWF9SMThEX1lUQVJHRVR9LAkJLyogMDEsOGQsNzgsY2MgKi8KKwl7fQorfTsKKworLyogIjYwSFpTY2FsZSIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgaWx0ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNjBIWlNjYWxlW10gPSB7CisJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLworCXsweGFhLCAweDgzLCAweDAwMDJ9LAkJLyogMDAsODMsMDIsYWEgKi8KKwl7MHhhYSwgMHg4NCwgMHgwMGM0fSwJCS8qIDAwLDg0LGM0LGFhICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYywgKi8KKwl7MHhhMCwgMHgwYiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsMSwwYixjYywgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsMiwxMCxjYywgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw1LDAwLGNjLCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsNiwwMCxjYywgKi8KKwl7MHhhMCwgMHg3NiwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDcsNzYsY2MsICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsYywwZSxjYywgKi8KKwl7MHhhMCwgMHgxNSwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLGYsMTUsY2MsICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLDksMTAsY2MsICovCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYSwyNCxjYywgKi8KKwl7MHhhMCwgMHg2MiwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJCS8qIDAwLGQsNjIsY2MsICovCisJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCxlLDkwLGNjLCAqLworCXsweGEwLCAweGM4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsZixjOCxjYywgKi8KKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwJCS8qIDAwLDAsZmYsY2MsICovCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCQkvKiAwMSxkLDU4LGNjLCAqLworCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwJLyogMDEsODAsNDIsY2MsICovCisJezB4YTAsIDB4NzgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCQkvKiAwMSxkLDc4LGNjICovCisJe30KK307CisKKy8qICJOb0ZsaWtlciIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmx0ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJbXSA9IHsKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwJCS8qIDAxLDAwLDBjLGNjLCAqLworCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KKwl7MHhhYSwgMHg4MywgMHgwMDAwfSwJCS8qIDAwLDgzLDAwLGFhICovCisJezB4YWEsIDB4ODQsIDB4MDAyMH0sCQkvKiAwMCw4NCwyMCxhYSAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsMCwwMCxjYywgKi8KKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMDUsY2MsICovCisJezB4YTAsIDB4ODgsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLDg4LGNjLCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjLCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MsICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5NywxMCxjYywgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywwZSxjYywgKi8KKwl7MHhhMCwgMHgxNSwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDE1LGNjLCAqLworCXsweGEwLCAweDYyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNjIsY2MsICovCisJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw5MCxjYywgKi8KKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGM4LGNjLCAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkJLyogMDAsMjAsZmYsY2MsICovCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCQkvKiAwMSwxZCw1OCxjYywgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIDAxLDgwLDAzLGNjICovCisJe30KK307CisKKy8qICJOb0ZsaWtlclNjYWxlIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmaWx0ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZVtdID0geworCXsweGEwLCAweDBjLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGMsY2MsICovCisJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLworCXsweGFhLCAweDgzLCAweDAwMDB9LAkJLyogMDAsODMsMDAsYWEgKi8KKwl7MHhhYSwgMHg4NCwgMHgwMDIwfSwJCS8qIDAwLDg0LDIwLGFhICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYywgKi8KKwl7MHhhMCwgMHgwYiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMGIsY2MsICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLDEwLGNjLCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjLCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MsICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5NywxMCxjYywgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywwZSxjYywgKi8KKwl7MHhhMCwgMHgxNSwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDE1LGNjLCAqLworCXsweGEwLCAweDYyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNjIsY2MsICovCisJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw5MCxjYywgKi8KKwl7MHhhMCwgMHhjOCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGM4LGNjLCAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkJLyogMDAsMjAsZmYsY2MsICovCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCQkvKiAwMSwxZCw1OCxjYywgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIDAxLDgwLDAzLGNjICovCisJe30KK307CisKK3N0YXRpYyBpbnQgcmVnX3JfaShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCV9fdTE2IGluZGV4KQoreworCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkweGExLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkweDAxLAkJCS8qIHZhbHVlICovCisJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLAorCQkJNTAwKTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJX191MTYgaW5kZXgpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ19yX2koZ3NwY2FfZGV2LCBpbmRleCk7CisJUERFQlVHKERfVVNCSSwgInJlZyByIFslMDR4XSAtPiAlMDJ4IiwgaW5kZXgsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmVnX3dfaShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQkJX191OCB2YWx1ZSwKKwkJCV9fdTE2IGluZGV4KQoreworCXVzYl9jb250cm9sX21zZyhkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCTB4YTAsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsCisJCQk1MDApOworfQorCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQkJX191OCB2YWx1ZSwKKwkJCV9fdTE2IGluZGV4KQoreworCVBERUJVRyhEX1VTQk8sICJyZWcgdyAlMDJ4IC0+IFslMDR4XSIsIHZhbHVlLCBpbmRleCk7CisJcmVnX3dfaShkZXYsIHZhbHVlLCBpbmRleCk7Cit9CisKK3N0YXRpYyBfX3UxNiBpMmNfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3U4IHJlZykKK3sKKwlfX3U4IHJldGJ5dGU7CisJX191OCByZXR2YWxbMl07CisKKwlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCByZWcsIDB4OTIpOworCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4OTApOwkJLyogPC0gcmVhZCBjb21tYW5kICovCisJbXNsZWVwKDI1KTsKKwlyZXRieXRlID0gcmVnX3JfaShnc3BjYV9kZXYsIDB4MDA5MSk7CQkvKiByZWFkIHN0YXR1cyAqLworCXJldHZhbFswXSA9IHJlZ19yX2koZ3NwY2FfZGV2LCAweDAwOTUpOwkJLyogcmVhZCBMb3dieXRlICovCisJcmV0dmFsWzFdID0gcmVnX3JfaShnc3BjYV9kZXYsIDB4MDA5Nik7CQkvKiByZWFkIEhpZ2h0Ynl0ZSAqLworCVBERUJVRyhEX1VTQk8sICJpMmMgciBbJTAyeF0gLT4gKCUwMngpICUwMnglMDJ4IiwKKwkJCXJlZywgcmV0Ynl0ZSwgcmV0dmFsWzFdLCByZXR2YWxbMF0pOworCXJldHVybiAocmV0dmFsWzFdIDw8IDgpIHwgcmV0dmFsWzBdOworfQorCitzdGF0aWMgX191OCBpMmNfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191OCByZWcsCisJCQlfX3U4IHZhbEwsCisJCQlfX3U4IHZhbEgpCit7CisJX191OCByZXRieXRlOworCisJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDkyKTsKKwlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCB2YWxMLCAweDkzKTsKKwlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCB2YWxILCAweDk0KTsKKwlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCAweDAxLCAweDkwKTsJCS8qIDwtIHdyaXRlIGNvbW1hbmQgKi8KKwltc2xlZXAoNSk7CisJcmV0Ynl0ZSA9IHJlZ19yX2koZ3NwY2FfZGV2LCAweDAwOTEpOwkJLyogcmVhZCBzdGF0dXMgKi8KKwlQREVCVUcoRF9VU0JPLCAiaTJjIHcgWyUwMnhdICUwMnglMDJ4ICglMDJ4KSIsCisJCQlyZWcsIHZhbEgsIHZhbEwsIHJldGJ5dGUpOworCXJldHVybiByZXRieXRlOworfQorCitzdGF0aWMgdm9pZCB1c2JfZXhjaGFuZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKmFjdGlvbikKK3sKKwl3aGlsZSAoYWN0aW9uLT5yZXEpIHsKKwkJc3dpdGNoIChhY3Rpb24tPnJlcSkgeworCQljYXNlIDB4YTA6CS8qIHdyaXRlIHJlZ2lzdGVyICovCisJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgYWN0aW9uLT52YWwsIGFjdGlvbi0+aWR4KTsKKwkJCWJyZWFrOworCQljYXNlIDB4YTE6CS8qIHJlYWQgc3RhdHVzICovCisJCQlyZWdfcihnc3BjYV9kZXYsIGFjdGlvbi0+aWR4KTsKKwkJCWJyZWFrOworCQljYXNlIDB4YWE6CisJCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LAorCQkJCSAgYWN0aW9uLT52YWwsCQkJLyogcmVnICovCisJCQkJICBhY3Rpb24tPmlkeCAmIDB4ZmYsCQkvKiB2YWxMICovCisJCQkJICBhY3Rpb24tPmlkeCA+PiA4KTsJCS8qIHZhbEggKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorLyoJCWNhc2UgMHhkZDoJICogZGVsYXkgKi8KKwkJCW1zbGVlcChhY3Rpb24tPnZhbCAvIDY0ICsgMTApOworCQkJYnJlYWs7CisJCX0KKwkJYWN0aW9uKys7CisvKgkJbXNsZWVwKDEpOyAqLworCX0KK30KKworc3RhdGljIHZvaWQgc2V0bWF0cml4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IGk7CisJY29uc3QgX191OCAqbWF0cml4OworCXN0YXRpYyBjb25zdCBfX3U4IGdjMDMwNV9tYXRyaXhbOV0gPQorCQl7MHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MH07CisJc3RhdGljIGNvbnN0IF9fdTggb3Y3NjIwX21hdHJpeFs5XSA9CisJCXsweDU4LCAweGY0LCAweGY0LCAweGY0LCAweDU4LCAweGY0LCAweGY0LCAweGY0LCAweDU4fTsKKwlzdGF0aWMgY29uc3QgX191OCBwbzIwMzBfbWF0cml4WzldID0KKwkJezB4NjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4NjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4NjB9OworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfR0MwMzA1OgorCQltYXRyaXggPSBnYzAzMDVfbWF0cml4OworCQlicmVhazsKKwljYXNlIFNFTlNPUl9NQzUwMUNCOgorCQlyZXR1cm47CQkvKiBubyBtYXRyaXg/ICovCisJY2FzZSBTRU5TT1JfT1Y3NjIwOgorLyoJY2FzZSBTRU5TT1JfT1Y3NjQ4OiAqLworCQltYXRyaXggPSBvdjc2MjBfbWF0cml4OworCQlicmVhazsKKwljYXNlIFNFTlNPUl9QTzIwMzA6CisJCW1hdHJpeCA9IHBvMjAzMF9tYXRyaXg7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoJLyogbm8gbWF0cml4PyAqLworCQlyZXR1cm47CisJZGVmYXVsdDoJCS8qIG1hdHJpeCBhbHJlYWR5IGxvYWRlZCAqLworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG92NzYyMF9tYXRyaXgpOyBpKyspCisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCBtYXRyaXhbaV0sIDB4MDEwYSArIGkpOworfQorCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCBicmlnaHRuZXNzOworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfR0MwMzA1OgorCWNhc2UgU0VOU09SX09WNzYyMDoKKwljYXNlIFNFTlNPUl9QTzIwMzA6CisJCXJldHVybjsKKwl9CisvKmZpeG1lOiBpcyBpdCByZWFsbHkgd3JpdGUgdG8gMDExZCBhbmQgMDE4ZCBmb3IgYWxsIG90aGVyIHNlbnNvcnM/ICovCisJYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOworCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCBicmlnaHRuZXNzLCAweDAxMWQpOworCWlmIChicmlnaHRuZXNzIDwgMHg3MCkKKwkJYnJpZ2h0bmVzcyArPSAweDEwOworCWVsc2UKKwkJYnJpZ2h0bmVzcyA9IDB4ODA7CisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIGJyaWdodG5lc3MsIDB4MDE4ZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgc2hhcnBuZXNzOworCXN0YXRpYyBjb25zdCBfX3U4IHNoYXJwbmVzc190YltdWzJdID0geworCQl7MHgwMiwgMHgwM30sCisJCXsweDA0LCAweDA3fSwKKwkJezB4MDgsIDB4MGZ9LAorCQl7MHgxMCwgMHgxZX0KKwl9OworCisJc2hhcnBuZXNzID0gc2QtPnNoYXJwbmVzczsKKwlyZWdfdyhkZXYsIHNoYXJwbmVzc190YltzaGFycG5lc3NdWzBdLCAweDAxYzYpOworCXJlZ19yKGdzcGNhX2RldiwgMHgwMWM4KTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDFjOSk7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDAxY2EpOworCXJlZ193KGRldiwgc2hhcnBuZXNzX3RiW3NoYXJwbmVzc11bMV0sIDB4MDFjYik7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWNvbnN0IF9fdTggKlRnYW1tYSwgKlRncmFkaWVudDsKKwlpbnQgZywgaSwgazsKKwlzdGF0aWMgY29uc3QgX191OCBrZ2FtbWFfdGJbMTZdID0JLyogZGVsdGEgZm9yIGNvbnRyYXN0ICovCisJCXsweDE1LCAweDBkLCAweDBhLCAweDA5LCAweDA4LCAweDA4LCAweDA4LCAweDA4LAorCQkgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOH07CisJc3RhdGljIGNvbnN0IF9fdTgga2dyYWRfdGJbMTZdID0KKwkJezB4MWIsIDB4MDYsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA2LCAweDA0fTsKKwlzdGF0aWMgY29uc3QgX191OCBUZ2FtbWFfMVsxNl0gPQorCQl7MHgwMCwgMHgwMCwgMHgwMywgMHgwZCwgMHgxYiwgMHgyZSwgMHg0NSwgMHg1ZiwKKwkJIDB4NzksIDB4OTMsIDB4YWIsIDB4YzEsIDB4ZDQsIDB4ZTUsIDB4ZjMsIDB4ZmZ9OworCXN0YXRpYyBjb25zdCBfX3U4IFRncmFkaWVudF8xWzE2XSA9CisJCXsweDAwLCAweDAxLCAweDA1LCAweDBiLCAweDEwLCAweDE1LCAweDE4LCAweDFhLAorCQkgMHgxYSwgMHgxOCwgMHgxNiwgMHgxNCwgMHgxMiwgMHgwZiwgMHgwZCwgMHgwNn07CisJc3RhdGljIGNvbnN0IF9fdTggVGdhbW1hXzJbMTZdID0KKwkJezB4MDEsIDB4MGMsIDB4MWYsIDB4M2EsIDB4NTMsIDB4NmQsIDB4ODUsIDB4OWMsCisJCSAweGIwLCAweGMyLCAweGQxLCAweGRlLCAweGU5LCAweGYyLCAweGY5LCAweGZmfTsKKwlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfMlsxNl0gPQorCQl7MHgwNSwgMHgwZiwgMHgxNiwgMHgxYSwgMHgxOSwgMHgxOSwgMHgxNywgMHgxNSwKKwkJIDB4MTIsIDB4MTAsIDB4MGUsIDB4MGIsIDB4MDksIDB4MDgsIDB4MDYsIDB4MDN9OworCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8zWzE2XSA9CisJCXsweDA0LCAweDE2LCAweDMwLCAweDRlLCAweDY4LCAweDgxLCAweDk4LCAweGFjLAorCQkgMHhiZSwgMHhjZCwgMHhkYSwgMHhlNCwgMHhlZCwgMHhmNSwgMHhmYiwgMHhmZn07CisJc3RhdGljIGNvbnN0IF9fdTggVGdyYWRpZW50XzNbMTZdID0KKwkJezB4MGMsIDB4MTYsIDB4MWIsIDB4MWMsIDB4MTksIDB4MTgsIDB4MTUsIDB4MTIsCisJCSAweDEwLCAweDBkLCAweDBiLCAweDA5LCAweDA4LCAweDA2LCAweDA1LCAweDAzfTsKKwlzdGF0aWMgY29uc3QgX191OCBUZ2FtbWFfNFsxNl0gPQorCQl7MHgxMywgMHgzOCwgMHg1OSwgMHg3OSwgMHg5MiwgMHhhNywgMHhiOSwgMHhjOCwKKwkJIDB4ZDQsIDB4ZGYsIDB4ZTcsIDB4ZWUsIDB4ZjQsIDB4ZjksIDB4ZmMsIDB4ZmZ9OworCXN0YXRpYyBjb25zdCBfX3U4IFRncmFkaWVudF80WzE2XSA9CisJCXsweDI2LCAweDIyLCAweDIwLCAweDFjLCAweDE2LCAweDEzLCAweDEwLCAweDBkLAorCQkgMHgwYiwgMHgwOSwgMHgwNywgMHgwNiwgMHgwNSwgMHgwNCwgMHgwMywgMHgwMn07CisJc3RhdGljIGNvbnN0IF9fdTggVGdhbW1hXzVbMTZdID0KKwkJezB4MjAsIDB4NGIsIDB4NmUsIDB4OGQsIDB4YTMsIDB4YjUsIDB4YzUsIDB4ZDIsCisJCSAweGRjLCAweGU1LCAweGVjLCAweGYyLCAweGY2LCAweGZhLCAweGZkLCAweGZmfTsKKwlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfNVsxNl0gPQorCQl7MHgzNywgMHgyNiwgMHgyMCwgMHgxYSwgMHgxNCwgMHgxMCwgMHgwZSwgMHgwYiwKKwkJIDB4MDksIDB4MDcsIDB4MDYsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDJ9OworCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV82WzE2XSA9CQkvKiA/PyB3YXMgZ2FtbWEgNSAqLworCQl7MHgyNCwgMHg0NCwgMHg2NCwgMHg4NCwgMHg5ZCwgMHhiMiwgMHhjNCwgMHhkMywKKwkJIDB4ZTAsIDB4ZWIsIDB4ZjQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCXN0YXRpYyBjb25zdCBfX3U4IFRncmFkaWVudF82WzE2XSA9CisJCXsweDE4LCAweDIwLCAweDIwLCAweDFjLCAweDE2LCAweDEzLCAweDEwLCAweDBlLAorCQkgMHgwYiwgMHgwOSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX07CisJc3RhdGljIGNvbnN0IF9fdTggKmdhbW1hX3RiW10gPSB7CisJCU5VTEwsIFRnYW1tYV8xLCBUZ2FtbWFfMiwKKwkJVGdhbW1hXzMsIFRnYW1tYV80LCBUZ2FtbWFfNSwgVGdhbW1hXzYKKwl9OworCXN0YXRpYyBjb25zdCBfX3U4ICpncmFkaWVudF90YltdID0geworCQlOVUxMLCBUZ3JhZGllbnRfMSwgVGdyYWRpZW50XzIsCisJCVRncmFkaWVudF8zLCBUZ3JhZGllbnRfNCwgVGdyYWRpZW50XzUsIFRncmFkaWVudF82CisJfTsKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJX191OCB2WzE2XTsKKyNlbmRpZgorCisJVGdhbW1hID0gZ2FtbWFfdGJbc2QtPmdhbW1hXTsKKwlUZ3JhZGllbnQgPSBncmFkaWVudF90YltzZC0+Z2FtbWFdOworCisJayA9IChzZC0+Y29udHJhc3QgLSAxMjgpCQkvKiAtMTI4IC8gMTI4ICovCisJCQkqIFRnYW1tYVswXTsKKwlQREVCVUcoRF9DT05GLCAiZ2FtbWE6JWQgY29udHJhc3Q6JWQgZ2FtbWEgY29lZmY6ICVkLzEyOCIsCisJCXNkLT5nYW1tYSwgc2QtPmNvbnRyYXN0LCBrKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlnID0gVGdhbW1hW2ldICsga2dhbW1hX3RiW2ldICogayAvIDEyODsKKwkJaWYgKGcgPiAweGZmKQorCQkJZyA9IDB4ZmY7CisJCWVsc2UgaWYgKGcgPD0gMCkKKwkJCWcgPSAxOworCQlyZWdfdyhkZXYsIGcsIDB4MDEyMCArIGkpOwkvKiBnYW1tYSAqLworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkJaWYgKGdzcGNhX2RlYnVnICYgRF9DT05GKQorCQkJdltpXSA9IGc7CisjZW5kaWYKKwl9CisJUERFQlVHKERfQ09ORiwgInRiOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAorCQl2WzBdLCB2WzFdLCB2WzJdLCB2WzNdLCB2WzRdLCB2WzVdLCB2WzZdLCB2WzddKTsKKwlQREVCVUcoRF9DT05GLCAiICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJCXZbOF0sIHZbOV0sIHZbMTBdLCB2WzExXSwgdlsxMl0sIHZbMTNdLCB2WzE0XSwgdlsxNV0pOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWcgPSBUZ3JhZGllbnRbaV0gLSBrZ3JhZF90YltpXSAqIGsgLyAxMjg7CisJCWlmIChnID4gMHhmZikKKwkJCWcgPSAweGZmOworCQllbHNlIGlmIChnIDw9IDApIHsKKwkJCWlmIChpICE9IDE1KQorCQkJCWcgPSAwOworCQkJZWxzZQorCQkJCWcgPSAxOworCQl9CisJCXJlZ193KGRldiwgZywgMHgwMTMwICsgaSk7CS8qIGdyYWRpZW50ICovCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCQlpZiAoZ3NwY2FfZGVidWcgJiBEX0NPTkYpCisJCQl2W2ldID0gZzsKKyNlbmRpZgorCX0KKwlQREVCVUcoRF9DT05GLCAiICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJCXZbMF0sIHZbMV0sIHZbMl0sIHZbM10sIHZbNF0sIHZbNV0sIHZbNl0sIHZbN10pOworCVBERUJVRyhEX0NPTkYsICIgICAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKKwkJdls4XSwgdls5XSwgdlsxMF0sIHZbMTFdLCB2WzEyXSwgdlsxM10sIHZbMTRdLCB2WzE1XSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHF1YWxpdHkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJX191OCBxdWFsaXR5OworCV9fdTggZnJ4dDsKKworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0dDMDMwNToKKwljYXNlIFNFTlNPUl9PVjc2MjA6CisJY2FzZSBTRU5TT1JfUE8yMDMwOgorCQlyZXR1cm47CisJfQorLypmaXhtZTogaXMgaXQgcmVhbGx5IDAwMDggMDAwNyAwMDE4IGZvciBhbGwgb3RoZXIgc2Vuc29ycz8gKi8KKwlxdWFsaXR5ID0gc2QtPnFpbmRleDsKKwlyZWdfdyhkZXYsIHF1YWxpdHksIDB4MDAwOCk7CisJZnJ4dCA9IDB4MzA7CisJcmVnX3coZGV2LCBmcnh0LCAweDAwMDcpOworCXN3aXRjaCAocXVhbGl0eSkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAyOgorCQlmcnh0ID0gMHhmZjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlmcnh0ID0gMHhmMDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlmcnh0ID0gMHhlMDsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlmcnh0ID0gMHgyMDsKKwkJYnJlYWs7CisJfQorCXJlZ193KGRldiwgZnJ4dCwgMHgwMDE4KTsKK30KKworLyogTWF0Y2hlcyB0aGUgc2Vuc29yJ3MgaW50ZXJuYWwgZnJhbWUgcmF0ZSB0byB0aGUgbGlnaHRpbmcgZnJlcXVlbmN5LgorICogVmFsaWQgZnJlcXVlbmNpZXMgYXJlOgorICoJNTBIeiwgZm9yIEV1cm9wZWFuIGFuZCBBc2lhbiBsaWdodGluZyAoZGVmYXVsdCkKKyAqCTYwSHosIGZvciBBbWVyaWNhbiBsaWdodGluZworICoJMCA9IE5vIEZsaWtlciAoZm9yIG91dGRvb3JlIHVzYWdlKQorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50IHNldGxpZ2h0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpLCBtb2RlOworCWNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICp6YzNfZnJlcTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKmZyZXFfdGJbU0VOU09SX01BWF1bNl0gPSB7CisvKiBTRU5TT1JfQ1MyMTAyIDAgKi8KKwkJe2NzMjEwMl9Ob0ZsaWtlciwgY3MyMTAyX05vRmxpa2VyU2NhbGUsCisJCSBjczIxMDJfNTBIWiwgY3MyMTAyXzUwSFpTY2FsZSwKKwkJIGNzMjEwMl82MEhaLCBjczIxMDJfNjBIWlNjYWxlfSwKKy8qIFNFTlNPUl9DUzIxMDJLIDEgKi8KKwkJe2NzMjEwMl9Ob0ZsaWtlciwgY3MyMTAyX05vRmxpa2VyU2NhbGUsCisJCSBjczIxMDJfNTBIWiwgY3MyMTAyXzUwSFpTY2FsZSwKKwkJIGNzMjEwMl82MEhaLCBjczIxMDJfNjBIWlNjYWxlfSwKKy8qIFNFTlNPUl9HQzAzMDUgMiAqLworCQl7Z2MwMzA1X05vRmxpa2VyLCBnYzAzMDVfTm9GbGlrZXIsCisJCSBnYzAzMDVfNTBIWiwgZ2MwMzA1XzUwSFosCisJCSBnYzAzMDVfNjBIWiwgZ2MwMzA1XzYwSFp9LAorLyogU0VOU09SX0hEQ1MyMDIwIDMgKi8KKwkJe05VTEwsIE5VTEwsCisJCSBOVUxMLCBOVUxMLAorCQkgTlVMTCwgTlVMTH0sCisvKiBTRU5TT1JfSERDUzIwMjBiIDQgKi8KKwkJe2hkY3MyMDIwYl9Ob0ZsaWtlciwgaGRjczIwMjBiX05vRmxpa2VyLAorCQkgaGRjczIwMjBiXzUwSFosIGhkY3MyMDIwYl81MEhaLAorCQkgaGRjczIwMjBiXzYwSFosIGhkY3MyMDIwYl82MEhafSwKKy8qIFNFTlNPUl9IVjcxMzFCIDUgKi8KKwkJe05VTEwsIE5VTEwsCisJCSBOVUxMLCBOVUxMLAorCQkgTlVMTCwgTlVMTH0sCisvKiBTRU5TT1JfSFY3MTMxQyA2ICovCisJCXtOVUxMLCBOVUxMLAorCQkgTlVMTCwgTlVMTCwKKwkJIE5VTEwsIE5VTEx9LAorLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQl7aWNtMTA1YV9Ob0ZsaWtlciwgaWNtMTA1YV9Ob0ZsaWtlclNjYWxlLAorCQkgaWNtMTA1YV81MEhaLCBpY20xMDVhXzUwSFpTY2FsZSwKKwkJIGljbTEwNWFfNjBIWiwgaWNtMTA1YV82MEhaU2NhbGV9LAorLyogU0VOU09SX01DNTAxQ0IgOCAqLworCQl7TUM1MDFDQl9Ob0ZsaWtlciwgTUM1MDFDQl9Ob0ZsaWtlclNjYWxlLAorCQkgTUM1MDFDQl81MEhaLCBNQzUwMUNCXzUwSFpTY2FsZSwKKwkJIE1DNTAxQ0JfNjBIWiwgTUM1MDFDQl82MEhaU2NhbGV9LAorLyogU0VOU09SX09WNzYyMCA5ICovCisJCXtPVjc2MjBfTm9GbGlrZXIsIE9WNzYyMF9Ob0ZsaWtlciwKKwkJIE9WNzYyMF81MEhaLCBPVjc2MjBfNTBIWiwKKwkJIE9WNzYyMF82MEhaLCBPVjc2MjBfNjBIWn0sCisvKiBTRU5TT1JfT1Y3NjMwQyAxMCAqLworCQl7TlVMTCwgTlVMTCwKKwkJIE5VTEwsIE5VTEwsCisJCSBOVUxMLCBOVUxMfSwKKy8qIFNFTlNPUl9QQVMxMDYgMTEgKi8KKwkJe3BhczEwNmJfTm9GbGlrZXIsIHBhczEwNmJfTm9GbGlrZXIsCisJCSBwYXMxMDZiXzUwSFosIHBhczEwNmJfNTBIWiwKKwkJIHBhczEwNmJfNjBIWiwgcGFzMTA2Yl82MEhafSwKKy8qIFNFTlNPUl9QQjAzMzAgMTIgKi8KKwkJe3BiMDMzMF9Ob0ZsaWtlciwgcGIwMzMwX05vRmxpa2VyU2NhbGUsCisJCSBwYjAzMzBfNTBIWiwgcGIwMzMwXzUwSFpTY2FsZSwKKwkJIHBiMDMzMF82MEhaLCBwYjAzMzBfNjBIWlNjYWxlfSwKKy8qIFNFTlNPUl9QTzIwMzAgMTMgKi8KKwkJe1BPMjAzMF9Ob0ZsaWtlciwgUE8yMDMwX05vRmxpa2VyLAorCQkgUE8yMDMwXzUwSFosIFBPMjAzMF81MEhaLAorCQkgUE8yMDMwXzYwSFosIFBPMjAzMF82MEhafSwKKy8qIFNFTlNPUl9UQVM1MTMwQ0sgMTQgKi8KKwkJe3RhczUxMzBjeHhfTm9GbGlrZXIsIHRhczUxMzBjeHhfTm9GbGlrZXJTY2FsZSwKKwkJIHRhczUxMzBjeHhfNTBIWiwgdGFzNTEzMGN4eF81MEhaU2NhbGUsCisJCSB0YXM1MTMwY3h4XzYwSFosIHRhczUxMzBjeHhfNjBIWlNjYWxlfSwKKy8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE1ICovCisJCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCisJCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAorCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCisvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2ICovCisJCXt0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXIsIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlclNjYWxlLAorCQkgdGFzNTEzMGNfdmYwMjUwXzUwSFosIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGUsCisJCSB0YXM1MTMwY192ZjAyNTBfNjBIWiwgdGFzNTEzMGNfdmYwMjUwXzYwSFpTY2FsZX0sCisJfTsKKworCWkgPSBzZC0+bGlnaHRmcmVxICogMjsKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisJaWYgKCFtb2RlKQorCQlpKys7CQkJLyogNjQweDQ4MCAqLworCXpjM19mcmVxID0gZnJlcV90YlsoaW50KSBzZC0+c2Vuc29yXVtpXTsKKwlpZiAoemMzX2ZyZXEgIT0gTlVMTCkgeworCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCB6YzNfZnJlcSk7CisJCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCQljYXNlIFNFTlNPUl9HQzAzMDU6CisJCQlpZiAobW9kZQkJCS8qIGlmIDMyMHgyNDAgKi8KKwkJCSAgICAmJiBzZC0+bGlnaHRmcmVxID09IDEpCS8qIGFuZCA1MEh6ICovCisJCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODUsIDB4MDE4ZCk7CisJCQkJCQkvKiB3aW46IDB4ODAsIDB4MDE4ZCAqLworCQkJYnJlYWs7CisJCWNhc2UgU0VOU09SX09WNzYyMDoKKwkJCWlmICghbW9kZSkgewkJCS8qIGlmIDY0MHg0ODAgKi8KKwkJCQlpZiAoc2QtPmxpZ2h0ZnJlcSAhPSAwKQkvKiBhbmQgNTAgb3IgNjAgSHogKi8KKwkJCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4NDAsIDB4MDAwMik7CisJCQkJZWxzZQorCQkJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg0NCwgMHgwMDAyKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggYXV0b3ZhbDsKKworCWlmIChzZC0+YXV0b2dhaW4pCisJCWF1dG92YWwgPSAweDQyOworCWVsc2UKKwkJYXV0b3ZhbCA9IDB4MDI7CisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIGF1dG92YWwsIDB4MDE4MCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfdW5rbm93bihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgc2Vuc29yKQoreworCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsJCS8qIGxlZCBvZmYgKi8KKwlzd2l0Y2ggKHNlbnNvcikgeworCWNhc2UgU0VOU09SX1BBUzEwNjoKKwkJcmVnX3coZGV2LCAweDAzLCAweDAwM2EpOworCQlyZWdfdyhkZXYsIDB4MGMsIDB4MDAzYik7CisJCXJlZ193KGRldiwgMHgwOCwgMHgwMDM4KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfR0MwMzA1OgorCWNhc2UgU0VOU09SX09WNzYyMDoKKwljYXNlIFNFTlNPUl9QQjAzMzA6CisJY2FzZSBTRU5TT1JfUE8yMDMwOgorCQlyZWdfdyhkZXYsIDB4MGQsIDB4MDAzYSk7CisJCXJlZ193KGRldiwgMHgwMiwgMHgwMDNiKTsKKwkJcmVnX3coZGV2LCAweDAwLCAweDAwMzgpOworCQlicmVhazsKKwl9Cit9CisKKy8qIHN0YXJ0IHByb2JlIDIgd2lyZXMgKi8KK3N0YXRpYyB2b2lkIHN0YXJ0XzJ3cl9wcm9iZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgc2Vuc29yKQoreworCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsKKwlyZWdfdyhkZXYsIHNlbnNvciwgMHgwMDEwKTsKKwlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMSk7CisJcmVnX3coZGV2LCAweDAzLCAweDAwMTIpOworCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKKy8qCW1zbGVlcCgyKTsgKi8KK30KKworc3RhdGljIGludCBzaWZfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCV9fdTE2IGNoZWNrd29yZDsKKworCXN0YXJ0XzJ3cl9wcm9iZShnc3BjYV9kZXYtPmRldiwgMHgwZik7CQkvKiBQQVMxMDYgKi8KKwlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwOCwgMHgwMDhkKTsKKwltc2xlZXAoMTUwKTsKKwljaGVja3dvcmQgPSAoKGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCkgJiAweDBmKSA8PCA0KQorCQkJfCAoKGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSkgJiAweGYwKSA+PiA0KTsKKwlQREVCVUcoRF9QUk9CRSwgInByb2JlIHNpZiAweCUwNHgiLCBjaGVja3dvcmQpOworCWlmIChjaGVja3dvcmQgPT0gMHgwMDA3KSB7CisJCXNlbmRfdW5rbm93bihnc3BjYV9kZXYtPmRldiwgU0VOU09SX1BBUzEwNik7CisJCXJldHVybiAweDBmOwkJCS8qIFBBUzEwNiAqLworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgdmdhXzJ3cl9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCV9fdTggcmV0Ynl0ZTsKKwlfX3UxNiBjaGVja3dvcmQ7CisKKwlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDAwKTsJCS8qIEhWNzEzMUIgKi8KKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKKwlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKKwlpZiAocmV0Ynl0ZSAhPSAwKQorCQlyZXR1cm4gMHgwMDsJCQkvKiBIVjcxMzFCICovCisKKwlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDA0KTsJCS8qIENTMjEwMiAqLworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDEsIDB4YWEsIDB4MDApOworCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXRieXRlICE9IDApCisJCXJldHVybiAweDA0OwkJCS8qIENTMjEwMiAqLworCisJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwNik7CQkvKiBPbW5pVmlzaW9uICovCisJcmVnX3coZGV2LCAweDA4LCAweDhkKTsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDExLCAweGFhLCAweDAwKTsKKwlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDExKTsKKwlpZiAocmV0Ynl0ZSAhPSAwKSB7CisJCS8qIChzaG91bGQgaGF2ZSByZXR1cm5lZCAweGFhKSAtLT4gT21uaXZpc2lvbj8gKi8KKwkJLyogcmVnX3IgMHgxMCAtPiAweDA2IC0tPiAgKi8KKwkJZ290byBvdl9jaGVjazsKKwl9CisKKwlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDA4KTsJCS8qIEhEQ1MyMDIwICovCisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxNSwgMHhhYSwgMHgwMCk7CisJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNSk7CisJaWYgKHJldGJ5dGUgIT0gMCkKKwkJcmV0dXJuIDB4MDg7CQkJLyogSERDUzIwMjAgKi8KKworCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MGEpOwkJLyogUEIwMzMwICovCisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwNywgMHhhYSwgMHhhYSk7CisJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwNyk7CisJaWYgKHJldGJ5dGUgIT0gMCkKKwkJcmV0dXJuIDB4MGE7CQkJLyogUEIwMzMwICovCisJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7CisJaWYgKHJldGJ5dGUgIT0gMCkKKwkJcmV0dXJuIDB4MGE7CQkJLyogUEIwMzMwID8/ICovCisJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwNCk7CisJaWYgKHJldGJ5dGUgIT0gMCkKKwkJcmV0dXJuIDB4MGE7CQkJLyogUEIwMzMwID8/ICovCisKKwlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDBjKTsJCS8qIElDTTEwNUEgKi8KKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweDExLCAweDAwKTsKKwlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKKwlpZiAocmV0Ynl0ZSAhPSAwKQorCQlyZXR1cm4gMHgwYzsJCQkvKiBJQ00xMDVBICovCisKKwlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDBlKTsJCS8qIFBBUzIwMkJDQiAqLworCXJlZ193KGRldiwgMHgwOCwgMHg4ZCk7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMywgMHhhYSwgMHgwMCk7CisJbXNsZWVwKDUwMCk7CisJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7CisJaWYgKHJldGJ5dGUgIT0gMCkKKwkJcmV0dXJuIDB4MGU7CQkJLyogUEFTMjAyQkNCICovCisKKwlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDAyKTsJCS8qID8/ICovCisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMSwgMHhhYSwgMHgwMCk7CisJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7CisJaWYgKHJldGJ5dGUgIT0gMCkKKwkJcmV0dXJuIDB4MDI7CQkJLyogPz8gKi8KK292X2NoZWNrOgorCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEwKTsJCS8qID8/ICovCisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTApOworCisJcmVnX3coZGV2LCAweDAxLCAweDAwMDApOworCXJlZ193KGRldiwgMHgwMSwgMHgwMDAxKTsKKwlyZWdfdyhkZXYsIDB4MDYsIDB4MDAxMCk7CQkvKiBPbW5pVmlzaW9uICovCisJcmVnX3coZGV2LCAweGExLCAweDAwOGIpOworCXJlZ193KGRldiwgMHgwOCwgMHgwMDhkKTsKKwltc2xlZXAoNTAwKTsKKwlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxMiwgMHg4MCwgMHgwMCk7CS8qIHNlbnNvciByZXNldCAqLworCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MGEpOworCWNoZWNrd29yZCA9IHJldGJ5dGUgPDwgODsKKwlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDBiKTsKKwljaGVja3dvcmQgfD0gcmV0Ynl0ZTsKKwlQREVCVUcoRF9QUk9CRSwgInByb2JlIDJ3ciBvdiB2Z2EgMHglMDR4IiwgY2hlY2t3b3JkKTsKKwlzd2l0Y2ggKGNoZWNrd29yZCkgeworCWNhc2UgMHg3NjMxOgkJCQkvKiBPVjc2MzBDICovCisJCXJlZ193KGRldiwgMHgwNiwgMHgwMDEwKTsKKwkJYnJlYWs7CisJY2FzZSAweDc2MjA6CQkJCS8qIE9WNzYyMCAqLworCWNhc2UgMHg3NjQ4OgkJCQkvKiBPVjc2NDggKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOwkJCS8qIG5vdCBPbW5pVmlzaW9uICovCisJfQorCXJldHVybiBjaGVja3dvcmQ7Cit9CisKK3N0cnVjdCBzZW5zb3JfYnlfY2hpcHNldF9yZXZpc2lvbiB7CisJX191MTYgcmV2aXNpb247CisJX191OCBpbnRlcm5hbF9zZW5zb3JfaWQ7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzZW5zb3JfYnlfY2hpcHNldF9yZXZpc2lvbiBjaGlwc2V0X3JldmlzaW9uX3NlbnNvcltdID0geworCXsweGMwMDEsIDB4MTN9LAkJLyogTUkwMzYwICovCisJezB4ZTAwMSwgMHgxM30sCisJezB4ODAwMSwgMHgxM30sCisJezB4ODAwMCwgMHgxNH0sCQkvKiBDUzIxMDJLICovCisJezB4ODQwMCwgMHgxNX0sCQkvKiBUQVM1MTMwSyAqLworCXswLCAwfQorfTsKKworc3RhdGljIGludCB2Z2FfM3dyX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCBpOworCV9fdTggcmV0Ynl0ZTsKKwlfX3UxNiBjaGVja3dvcmQ7CisKKy8qZml4bWU6IGxhY2sgb2YgOGI9YjMgKDExLDEyKS0+IDEwLCA4Yj1lMCAoMTQsMTUsMTYpLT4gMTIgZm91bmQgaW4gZ3NwY2F2MSovCisJcmVnX3coZGV2LCAweDAyLCAweDAwMTApOworCXJlZ19yKGdzcGNhX2RldiwgMHgxMCk7CisJcmVnX3coZGV2LCAweDAxLCAweDAwMDApOworCXJlZ193KGRldiwgMHgwMCwgMHgwMDEwKTsKKwlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMSk7CisJcmVnX3coZGV2LCAweDkxLCAweDAwOGIpOworCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKKwlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7CisJcmVnX3coZGV2LCAweDA1LCAweDAwMTIpOworCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTQpOworCWlmIChyZXRieXRlICE9IDApCisJCXJldHVybiAweDExOwkJCS8qIEhWNzEzMVIgKi8KKwlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDE1KTsKKwlpZiAocmV0Ynl0ZSAhPSAwKQorCQlyZXR1cm4gMHgxMTsJCQkvKiBIVjcxMzFSICovCisJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNik7CisJaWYgKHJldGJ5dGUgIT0gMCkKKwkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLworCisJcmVnX3coZGV2LCAweDAyLCAweDAwMTApOworCXJldGJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYik7CisJY2hlY2t3b3JkID0gcmV0Ynl0ZSA8PCA4OworCXJldGJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYSk7CisJY2hlY2t3b3JkIHw9IHJldGJ5dGU7CisJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIDEgMHglMDR4IiwgY2hlY2t3b3JkKTsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7CisJLyogdGhpcyBpcyB0ZXN0ZWQgb25seSBvbmNlIGFueXdheSAqLworCWkgPSAwOworCXdoaWxlIChjaGlwc2V0X3JldmlzaW9uX3NlbnNvcltpXS5yZXZpc2lvbikgeworCQlpZiAoY2hpcHNldF9yZXZpc2lvbl9zZW5zb3JbaV0ucmV2aXNpb24gPT0gY2hlY2t3b3JkKSB7CisJCQlzZC0+Y2hpcF9yZXZpc2lvbiA9IGNoZWNrd29yZDsKKwkJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9QQjAzMzApOworCQkJcmV0dXJuIGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldLmludGVybmFsX3NlbnNvcl9pZDsKKwkJfQorCQlpKys7CisJfQorCisJcmVnX3coZGV2LCAweDAxLCAweDAwMDApOworCXJlZ193KGRldiwgMHgwMSwgMHgwMDAxKTsKKwlyZWdfdyhkZXYsIDB4ZGQsIDB4MDA4Yik7CisJcmVnX3coZGV2LCAweDBhLCAweDAwMTApOworCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKKwlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7CisJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7CisJaWYgKHJldGJ5dGUgIT0gMCkgeworCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/Iik7CisJCXJldHVybiAweDBhOwkJCS8qID8/ICovCisJfQorCisJcmVnX3coZGV2LCAweDAxLCAweDAwMDApOworCXJlZ193KGRldiwgMHgwMSwgMHgwMDAxKTsKKwlyZWdfdyhkZXYsIDB4OTgsIDB4MDA4Yik7CisJcmVnX3coZGV2LCAweDAxLCAweDAwMTApOworCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKKwltc2xlZXAoMik7CisJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOworCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOworCWlmIChyZXRieXRlICE9IDApIHsKKwkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgJTAyeCIsIHJldGJ5dGUpOworCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfR0MwMzA1KTsKKwkJcmV0dXJuIHJldGJ5dGU7CQkvKiAweDI5ID0gZ2MwMzA1IC0gc2hvdWxkIGNvbnRpbnVlPyAqLworCX0KKworCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsJLyogY2hlY2sgT21uaVZpc2lvbiAqLworCXJlZ193KGRldiwgMHgwMSwgMHgwMDAxKTsKKwlyZWdfdyhkZXYsIDB4YTEsIDB4MDA4Yik7CisJcmVnX3coZGV2LCAweDA4LCAweDAwOGQpOworCXJlZ193KGRldiwgMHgwNiwgMHgwMDEwKTsKKwlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7CisJcmVnX3coZGV2LCAweDA1LCAweDAwMTIpOworCWlmIChpMmNfcmVhZChnc3BjYV9kZXYsIDB4MWMpID09IDB4N2YJLyogT1Y3NjEwIC0gbWFudWZhY3R1cmVyIElEICovCisJICAgICYmIGkyY19yZWFkKGdzcGNhX2RldiwgMHgxZCkgPT0gMHhhMikgeworCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfT1Y3NjIwKTsKKwkJcmV0dXJuIDB4MDY7CQkvKiBPbW5pVmlzaW9uIGNvbmZpcm0gPyAqLworCX0KKworCXJlZ193KGRldiwgMHgwMSwgMHgwMCk7CisJcmVnX3coZGV2LCAweDAwLCAweDAyKTsKKwlyZWdfdyhkZXYsIDB4MDEsIDB4MTApOworCXJlZ193KGRldiwgMHgwMSwgMHgwMSk7CisJcmVnX3coZGV2LCAweGVlLCAweDhiKTsKKwlyZWdfdyhkZXYsIDB4MDMsIDB4MTIpOworLyoJbXNsZWVwKDE1MCk7ICovCisJcmVnX3coZGV2LCAweDAxLCAweDEyKTsKKwlyZWdfdyhkZXYsIDB4MDUsIDB4MTIpOworCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOwkJLyogSUQgMCAqLworCWNoZWNrd29yZCA9IHJldGJ5dGUgPDwgODsKKwlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsJCS8qIElEIDEgKi8KKwljaGVja3dvcmQgfD0gcmV0Ynl0ZTsKKwlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgMiAweCUwNHgiLCBjaGVja3dvcmQpOworCWlmIChjaGVja3dvcmQgPT0gMHgyMDMwKSB7CisJCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDIpOwkvKiByZXZpc2lvbiBudW1iZXIgKi8KKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgUE8yMDMwIHJldiAweCUwMngiLCByZXRieXRlKTsKKwkJc2VuZF91bmtub3duKGRldiwgU0VOU09SX1BPMjAzMCk7CisJCXJldHVybiBjaGVja3dvcmQ7CisJfQorCisJcmVnX3coZGV2LCAweDAxLCAweDAwKTsKKwlyZWdfdyhkZXYsIDB4MGEsIDB4MTApOworCXJlZ193KGRldiwgMHhkMywgMHg4Yik7CisJcmVnX3coZGV2LCAweDAxLCAweDAxKTsKKwlyZWdfdyhkZXYsIDB4MDMsIDB4MTIpOworCXJlZ193KGRldiwgMHgwMSwgMHgxMik7CisJcmVnX3coZGV2LCAweDA1LCAweDAxKTsKKwlyZWdfdyhkZXYsIDB4ZDMsIDB4OGIpOworCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXRieXRlICE9IDApIHsKKwkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgMGEgPyIpOworCQlyZXR1cm4gMHgwYTsJCQkvKiA/PyAqLworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgemN4eF9wcm9iZVNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBzZW5zb3IsIHNlbnNvcjI7CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9NQzUwMUNCOgorCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoKKwkJcmV0dXJuIC0xOwkJLyogZG9uJ3QgcHJvYmUgKi8KKwl9CisJc2Vuc29yID0gdmdhXzJ3cl9wcm9iZShnc3BjYV9kZXYpOworCWlmIChzZW5zb3IgPj0gMCkgeworCQlpZiAoc2Vuc29yIDwgMHg3NjAwKQorCQkJcmV0dXJuIHNlbnNvcjsKKwkJLyogbmV4dCBwcm9iZSBpcyBuZWVkZWQgZm9yIE9tbmlWaXNpb24gPyAqLworCX0KKwlzZW5zb3IyID0gdmdhXzN3cl9wcm9iZShnc3BjYV9kZXYpOworCWlmIChzZW5zb3IyID49IDApIHsKKwkJaWYgKHNlbnNvciA+PSAwKQorCQkJcmV0dXJuIHNlbnNvcjsKKwkJcmV0dXJuIHNlbnNvcjI7CisJfQorCXJldHVybiBzaWZfcHJvYmUoZ3NwY2FfZGV2KTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisJaW50IHNlbnNvcjsKKwlpbnQgdmdhID0gMTsJCS8qIDE6IHZnYSwgMDogc2lmICovCisJc3RhdGljIGNvbnN0IF9fdTggZ2FtbWFbU0VOU09SX01BWF0gPSB7CisJCTUsCS8qIFNFTlNPUl9DUzIxMDIgMCAqLworCQk1LAkvKiBTRU5TT1JfQ1MyMTAySyAxICovCisJCTQsCS8qIFNFTlNPUl9HQzAzMDUgMiAqLworCQk0LAkvKiBTRU5TT1JfSERDUzIwMjAgMyAqLworCQk0LAkvKiBTRU5TT1JfSERDUzIwMjBiIDQgKi8KKwkJNCwJLyogU0VOU09SX0hWNzEzMUIgNSAqLworCQk0LAkvKiBTRU5TT1JfSFY3MTMxQyA2ICovCisJCTQsCS8qIFNFTlNPUl9JQ00xMDVBIDcgKi8KKwkJNCwJLyogU0VOU09SX01DNTAxQ0IgOCAqLworCQkzLAkvKiBTRU5TT1JfT1Y3NjIwIDkgKi8KKwkJNCwJLyogU0VOU09SX09WNzYzMEMgMTAgKi8KKwkJNCwJLyogU0VOU09SX1BBUzEwNiAxMSAqLworCQk0LAkvKiBTRU5TT1JfUEIwMzMwIDEyICovCisJCTQsCS8qIFNFTlNPUl9QTzIwMzAgMTMgKi8KKwkJNCwJLyogU0VOU09SX1RBUzUxMzBDSyAxNCAqLworCQk0LAkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNSAqLworCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2ICovCisJfTsKKworCS8qIGRlZmluZSBzb21lIHNlbnNvcnMgZnJvbSB0aGUgdmVuZG9yL3Byb2R1Y3QgKi8KKwlzZC0+c2hhcnBuZXNzID0gMjsKKwlzd2l0Y2ggKGlkLT5pZFZlbmRvcikgeworCWNhc2UgMHgwNDFlOgkJCQkvKiBDcmVhdGl2ZSAqLworCQlzd2l0Y2ggKGlkLT5pZFByb2R1Y3QpIHsKKwkJY2FzZSAweDQwNTE6CQkJLyogemMzMDEgY2hpcHMgKi8KKwkJY2FzZSAweDQwNTM6CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgMHgwNDZkOgkJCQkvKiBMb2dpdGVjaCBMYWJ0ZWMgKi8KKwkJc3dpdGNoIChpZC0+aWRQcm9kdWN0KSB7CisJCWNhc2UgMHgwOGRkOgorCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9NQzUwMUNCOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweDBhYzg6CQkJCS8qIFZpbWljcm8gei1zdGFyICovCisJCXN3aXRjaCAoaWQtPmlkUHJvZHVjdCkgeworCQljYXNlIDB4MzA1YjoKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMENfVkYwMjUwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCXNlbnNvciA9IHpjeHhfcHJvYmVTZW5zb3IoZ3NwY2FfZGV2KTsKKwlpZiAoc2Vuc29yID49IDApCisJCVBERUJVRyhEX1BST0JFLCAicHJvYmUgc2Vuc29yIC0+ICUwMngiLCBzZW5zb3IpOworCWlmICgodW5zaWduZWQpIGZvcmNlX3NlbnNvciA8IFNFTlNPUl9NQVgpIHsKKwkJc2QtPnNlbnNvciA9IGZvcmNlX3NlbnNvcjsKKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgZm9yY2VkIHRvICVkIiwgZm9yY2Vfc2Vuc29yKTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKHNlbnNvcikgeworCQljYXNlIC0xOgorCQkJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJCQljYXNlIFNFTlNPUl9NQzUwMUNCOgorCQkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIE1DNTAxQ0IiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoKKwkJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBUYXM1MTMwIChWRjAyNTApIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVBERUJVRyhEX1BST0JFLAorCQkJCQkiU2Vuc29yIFVOS05PV18wIGZvcmNlIFRhczUxMzAiKTsKKwkJCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBDWFg7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFCIik7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMUI7CisJCQlicmVhazsKKwkJY2FzZSAweDA0OgorCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBDUzIxMDIiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfQ1MyMTAyOworCQkJYnJlYWs7CisJCWNhc2UgMHgwODoKKwkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSERDUzIwMjAoYikiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSERDUzIwMjBiOworCQkJYnJlYWs7CisJCWNhc2UgMHgwYToKKwkJCVBERUJVRyhEX1BST0JFLAorCQkJCSJGaW5kIFNlbnNvciBQQjAzMzAuIENoaXAgcmV2aXNpb24gJXgiLAorCQkJCXNkLT5jaGlwX3JldmlzaW9uKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfUEIwMzMwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwYzoKKwkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSUNNMTA1QSIpOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9JQ00xMDVBOworCQkJYnJlYWs7CisJCWNhc2UgMHgwZToKKwkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSERDUzIwMjAiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSERDUzIwMjA7CisJCQlzZC0+c2hhcnBuZXNzID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDB4MGY6CisJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIFBBUzEwNiIpOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9QQVMxMDY7CisJCQl2Z2EgPSAwOwkJLyogU0lGICovCisJCQlicmVhazsKKwkJY2FzZSAweDEwOgorCQljYXNlIDB4MTI6CisJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIFRBUzUxMzAiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMENYWDsKKwkJCWJyZWFrOworCQljYXNlIDB4MTE6CisJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEhWNzEzMVIoYykiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSFY3MTMxQzsKKwkJCWJyZWFrOworCQljYXNlIDB4MTM6CisJCQlQREVCVUcoRF9QUk9CRSwKKwkJCQkiRmluZCBTZW5zb3IgTUkwMzYwLiBDaGlwIHJldmlzaW9uICV4IiwKKwkJCQlzZC0+Y2hpcF9yZXZpc2lvbik7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX1BCMDMzMDsKKwkJCWJyZWFrOworCQljYXNlIDB4MTQ6CisJCQlQREVCVUcoRF9QUk9CRSwKKwkJCQkiRmluZCBTZW5zb3IgQ1MyMTAySz8uIENoaXAgcmV2aXNpb24gJXgiLAorCQkJCXNkLT5jaGlwX3JldmlzaW9uKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfQ1MyMTAySzsKKwkJCWJyZWFrOworCQljYXNlIDB4MTU6CisJCQlQREVCVUcoRF9QUk9CRSwKKwkJCQkiRmluZCBTZW5zb3IgVEFTNTEzMENLPy4gQ2hpcCByZXZpc2lvbiAleCIsCisJCQkJc2QtPmNoaXBfcmV2aXNpb24pOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQ0s7CisJCQlicmVhazsKKwkJY2FzZSAweDI5OgorCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBHQzAzMDUiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfR0MwMzA1OworCQkJYnJlYWs7CisJCWNhc2UgMHgyMDMwOgorCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQTzIwMzAiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfUE8yMDMwOworCQkJc2QtPnNoYXJwbmVzcyA9IDA7CQkvKiBmcm9tIHdpbiB0cmFjZXMgKi8KKwkJCWJyZWFrOworCQljYXNlIDB4NzYyMDoKKwkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjIwIik7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYyMDsKKwkJCWJyZWFrOworCQljYXNlIDB4NzY0ODoKKwkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjQ4Iik7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYyMDsJLyogc2FtZSBzZW5zb3IgKD8pICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBERUJVRyhEX0VSUnxEX1BST0JFLCAiVW5rbm93biBzZW5zb3IgJTAyeCIsIHNlbnNvcik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlpZiAoc2Vuc29yIDwgMHgyMCkgeworCQlpZiAoc2Vuc29yID09IC0xIHx8IHNlbnNvciA9PSAweDEwIHx8IHNlbnNvciA9PSAweDEyKQorCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDAxMCk7CisJCWVsc2UKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCBzZW5zb3IgJiAweDBmLCAweDAwMTApOworCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7CisJfQorCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+ZGV2X25hbWUgPSAoY2hhciAqKSBpZC0+ZHJpdmVyX2luZm87CisJY2FtLT5lcGFkZHIgPSAweDAxOworLypmaXhtZTp0ZXN0Ki8KKwlnc3BjYV9kZXYtPm5iYWx0LS07CisJaWYgKHZnYSkgeworCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJfSBlbHNlIHsKKwkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOworCX0KKwlzZC0+cWluZGV4ID0gMTsKKwlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmdhbW1hID0gZ2FtbWFbKGludCkgc2QtPnNlbnNvcl07CisJc2QtPmF1dG9nYWluID0gc2RfY3RybHNbU0RfQVVUT0dBSU5dLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmxpZ2h0ZnJlcSA9IHNkX2N0cmxzW1NEX0ZSRVFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPnNoYXJwbmVzcyA9IHNkX2N0cmxzW1NEX1NIQVJQTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKworCS8qIHN3aXRjaCB0aGUgbGVkIG9mZiAqLworCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDAxLCAweDAwMDApOworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBvcGVuIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2Rfb3BlbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDEsIDB4MDAwMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICp6YzNfaW5pdDsKKwlpbnQgbW9kZTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKmluaXRfdGJbU0VOU09SX01BWF1bMl0gPSB7CisJCXtjczIxMDJfSW5pdGlhbFNjYWxlLCBjczIxMDJfSW5pdGlhbH0sCQkvKiAwICovCisJCXtjczIxMDJLX0luaXRpYWxTY2FsZSwgY3MyMTAyS19Jbml0aWFsfSwJLyogMSAqLworCQl7Z2MwMzA1X0luaXRpYWwsIGdjMDMwNV9Jbml0aWFsU2NhbGV9LAkJLyogMiAqLworCQl7aGRjczIwMjB4eF9Jbml0aWFsU2NhbGUsIGhkY3MyMDIweHhfSW5pdGlhbH0sCS8qIDMgKi8KKwkJe2hkY3MyMDIweGJfSW5pdGlhbFNjYWxlLCBoZGNzMjAyMHhiX0luaXRpYWx9LAkvKiA0ICovCisJCXtodjcxMzFieHhfSW5pdGlhbFNjYWxlLCBodjcxMzFieHhfSW5pdGlhbH0sCS8qIDUgKi8KKwkJe2h2NzEzMWN4eF9Jbml0aWFsU2NhbGUsIGh2NzEzMWN4eF9Jbml0aWFsfSwJLyogNiAqLworCQl7aWNtMTA1YXh4X0luaXRpYWxTY2FsZSwgaWNtMTA1YXh4X0luaXRpYWx9LAkvKiA3ICovCisJCXtNQzUwMUNCX0luaXRpYWxTY2FsZSwgTUM1MDFDQl9Jbml0aWFsfSwJLyogOSAqLworCQl7T1Y3NjIwX21vZGUwLCBPVjc2MjBfbW9kZTF9LAkJCS8qIDkgKi8KKwkJe292NzYzMGNfSW5pdGlhbFNjYWxlLCBvdjc2MzBjX0luaXRpYWx9LAkvKiAxMCAqLworCQl7cGFzMTA2Yl9Jbml0aWFsU2NhbGUsIHBhczEwNmJfSW5pdGlhbH0sCS8qIDExICovCisJCXtwYjAzMzB4eF9Jbml0aWFsU2NhbGUsIHBiMDMzMHh4X0luaXRpYWx9LAkvKiAxMiAqLworLyogb3IJCXtwYjAzMzAzeF9Jbml0aWFsU2NhbGUsIHBiMDMzMDN4X0luaXRpYWx9LCAqLworCQl7UE8yMDMwX21vZGUwLCBQTzIwMzBfbW9kZTF9LAkJCS8qIDEzICovCisJCXt0YXM1MTMwQ0tfSW5pdGlhbFNjYWxlLCB0YXM1MTMwQ0tfSW5pdGlhbH0sCS8qIDE0ICovCisJCXt0YXM1MTMwY3h4X0luaXRpYWxTY2FsZSwgdGFzNTEzMGN4eF9Jbml0aWFsfSwJLyogMTUgKi8KKwkJe3RhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGUsIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsfSwKKwkJCQkJCQkJLyogMTYgKi8KKwl9OworCisJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCXpjM19pbml0ID0gaW5pdF90YlsoaW50KSBzZC0+c2Vuc29yXVttb2RlXTsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9IVjcxMzFCOgorCWNhc2UgU0VOU09SX0hWNzEzMUM6CisJCXpjeHhfcHJvYmVTZW5zb3IoZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMTA2OgorCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBwYXMxMDZiX0luaXRpYWxfY29tKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEIwMzMwOgorCQlpZiAobW9kZSkgeworCQkJaWYgKHNkLT5jaGlwX3JldmlzaW9uID09IDB4YzAwMQorCQkJICAgIHx8IHNkLT5jaGlwX3JldmlzaW9uID09IDB4ZTAwMQorCQkJICAgIHx8IHNkLT5jaGlwX3JldmlzaW9uID09IDB4ODAwMSkKKwkJCQl6YzNfaW5pdCA9IHBiMDMzMDN4X0luaXRpYWw7CisJCX0gZWxzZSB7CisJCQlpZiAoc2QtPmNoaXBfcmV2aXNpb24gPT0gMHhjMDAxCisJCQkgICAgfHwgc2QtPmNoaXBfcmV2aXNpb24gPT0gMHhlMDAxCisJCQkgICAgfHwgc2QtPmNoaXBfcmV2aXNpb24gPT0gMHg4MDAxKQorCQkJCXpjM19pbml0ID0gcGIwMzMwM3hfSW5pdGlhbFNjYWxlOworCQl9CisJCWJyZWFrOworCX0KKwl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCB6YzNfaW5pdCk7CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9HQzAzMDU6CisJY2FzZSBTRU5TT1JfT1Y3NjIwOgorCWNhc2UgU0VOU09SX1BPMjAzMDoKKwkJbXNsZWVwKDEwMCk7CQkJLyogPz8gKi8KKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDIpOwkvKiAtLT4gMHg0MCAqLworCQlyZWdfdyhkZXYsIDB4MDksIDB4MDFhZCk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCisJCXJlZ193KGRldiwgMHgxNSwgMHgwMWFlKTsKKwkJcmVnX3coZGV2LCAweDBkLCAweDAwM2EpOworCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAzYik7CisJCXJlZ193KGRldiwgMHgwMCwgMHgwMDM4KTsKKwkJYnJlYWs7CisJfQorCisJc2V0bWF0cml4KGdzcGNhX2Rldik7CisJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzYyMDoKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDgpOworCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAwOCk7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX0dDMDMwNToKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDgpOworCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFNFTlNPUl9QTzIwMzA6CisJCXJlZ193KGRldiwgMHgwMywgMHgwMDA4KTsKKwkJYnJlYWs7CisJfQorCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCisJLyogc2V0IHRoZSBnYW1tYSB0YWJsZXMgd2hlbiBub3Qgc2V0ICovCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQ1MyMTAyOgkJLyogZ2FtbWEgc2V0IGluIHh4eF9Jbml0aWFsICovCisJY2FzZSBTRU5TT1JfQ1MyMTAySzoKKwljYXNlIFNFTlNPUl9IRENTMjAyMDoKKwljYXNlIFNFTlNPUl9IRENTMjAyMGI6CisJY2FzZSBTRU5TT1JfUEIwMzMwOgkJLyogcGIgd2l0aCBjaGlwX3JldmlzaW9uIC0gc2VlIGFib3ZlICovCisJY2FzZSBTRU5TT1JfT1Y3NjMwQzoKKwljYXNlIFNFTlNPUl9UQVM1MTMwQ0s6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJCWJyZWFrOworCX0KKwlzZXRtYXRyaXgoZ3NwY2FfZGV2KTsJCQkvKiBvbmUgbW9yZSB0aW1lPyAqLworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzYyMDoKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDAxODApOwkvKiBmcm9tIHdpbiAqLworCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDE4MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNldHF1YWxpdHkoZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJfQorCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfR0MwMzA1OgorCWNhc2UgU0VOU09SX09WNzYyMDoKKwkJcmVnX3coZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworCQlyZWdfdyhkZXYsIDB4MTUsIDB4MDFhZSk7CisJCXNkLT5hdXRvZ2FpbiA9IDA7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPMjAzMDoKKwkJcmVnX3coZGV2LCAweDQwLCAweDAxMTcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworCQlyZWdfcihnc3BjYV9kZXYsIDB4MDE4MCk7CisJCWJyZWFrOworCX0KKworCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfR0MwMzA1OgorLyoJCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwk/PyAoZW5kOiA4MCAtPiBbMThkXSkgKi8KKwkJcmVnX3coZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworCQlyZWdfdyhkZXYsIDB4MTUsIDB4MDFhZSk7CisJCXJlZ193KGRldiwgMHg0MCwgMHgwMTgwKTsKKwkJcmVnX3coZGV2LCAweDQwLCAweDAxMTcpOworCQlyZWdfcihnc3BjYV9kZXYsIDB4MDE4MCk7CisJCXNkLT5hdXRvZ2FpbiA9IDE7CisJCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzYyMDoKKwkJaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJLypmaXhtZTogcmV0dXJucyAweGEzICovCisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MTMsIDB4YTMsIDB4MDApOworCQkJCQkgLypmaXhtZTogcmV0dXJuZWQgdmFsdWUgdG8gc2VuZD8gKi8KKwkJcmVnX3coZGV2LCAweDQwLCAweDAxMTcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworCQlyZWdfcihnc3BjYV9kZXYsIDB4MDE4MCk7CisJCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJCW1zbGVlcCg1MDApOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9QTzIwMzA6CisJCW1zbGVlcCg1MDApOworCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwOCk7CisJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA3KTsKKwkJcmVnX3coZGV2LCAweDAwLCAweDAwMDcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAwOCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2VuZF91bmtub3duKGdzcGNhX2Rldi0+ZGV2LCBzZC0+c2Vuc29yKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgY2xvc2UgdGltZSAqLworc3RhdGljIHZvaWQgc2RfY2xvc2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAorCQkJX191OCAqZGF0YSwKKwkJCWludCBsZW4pCit7CisKKwlpZiAoZGF0YVswXSA9PSAweGZmICYmIGRhdGFbMV0gPT0gMHhkOCkgewkvKiBzdGFydCBvZiBmcmFtZSAqLworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJZGF0YSwgMCk7CisJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLworCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKKwkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCisJCQkJMHgyMSk7CisJCS8qIHJlbW92ZSB0aGUgd2ViY2FtJ3MgaGVhZGVyOgorCQkgKiBmZiBkOCBmZiBmZSAwMCAwZSAwMCAwMCBzcyBzcyAwMCAwMSB3dyB3dyBoaCBoaCBwcCBwcAorCQkgKgktICdzcyBzcycgaXMgdGhlIGZyYW1lIHNlcXVlbmNlIG51bWJlciAoQkUpCisJCSAqIAktICd3dyB3dycgYW5kICdoaCBoaCcgYXJlIHRoZSB3aW5kb3cgZGltZW5zaW9ucyAoQkUpCisJCSAqCS0gJ3BwIHBwJyBpcyB0aGUgcGFja2V0IHNlcXVlbmNlIG51bWJlciAoQkUpCisJCSAqLworCQlkYXRhICs9IDE4OworCQlsZW4gLT0gMTg7CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmJyaWdodG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbnRyYXN0ID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YXV0b2dhaW4gPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmF1dG9nYWluOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5nYW1tYSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Z2FtbWE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+bGlnaHRmcmVxID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0bGlnaHRmcmVxKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5saWdodGZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zaGFycG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+c2hhcnBuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3F1ZXJ5bWVudShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpCit7CisJc3dpdGNoIChtZW51LT5pZCkgeworCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k6CisJCXN3aXRjaCAobWVudS0+aW5kZXgpIHsKKwkJY2FzZSAwOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQgKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiTm9GbGlrZXIiKTsKKwkJCXJldHVybiAwOworCQljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjUwIEh6Iik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAyOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI2MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBzaXplb2Ygc2RfY3RybHMgLyBzaXplb2Ygc2RfY3RybHNbMF0sCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkub3BlbiA9IHNkX29wZW4sCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCisJLmNsb3NlID0gc2RfY2xvc2UsCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKK307CisKKyNkZWZpbmUgRFZOTShuYW1lKSAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpIG5hbWUKK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDQxZSwgMHgwNDFlKSwgRFZOTSgiQ3JlYXRpdmUgV2ViQ2FtIExpdmUhIil9LAorI2lmbmRlZiBDT05GSUdfVVNCX1pDMDMwMQorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDE3KSwgRFZOTSgiQ3JlYXRpdmUgV2ViY2FtIE1vYmlsZSBQRDEwOTAiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMWMpLCBEVk5NKCJDcmVhdGl2ZSBOWCIpfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAxZSksIERWTk0oIkNyZWF0aXZlIE54IFBybyIpfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAxZiksIERWTk0oIkNyZWF0aXZlIFdlYmNhbSBOb3RlYm9vayBQRDExNzEiKX0sCisjZW5kaWYKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAyOSksIERWTk0oIkNyZWF0aXZlIFdlYkNhbSBWaXN0YSBQcm8iKX0sCisjaWZuZGVmIENPTkZJR19VU0JfWkMwMzAxCisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMzQpLCBEVk5NKCJDcmVhdGl2ZSBJbnN0YW50IFAwNjIwIil9LAorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDM1KSwgRFZOTSgiQ3JlYXRpdmUgSW5zdGFudCBQMDYyMEQiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMzYpLCBEVk5NKCJDcmVhdGl2ZSBMaXZlICEiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwM2EpLCBEVk5NKCJDcmVhdGl2ZSBOeCBQcm8gMiIpfSwKKyNlbmRpZgorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDUxKSwgRFZOTSgiQ3JlYXRpdmUgTm90ZWJvb2sgUHJvIChWRjAyNTApIil9LAorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDUzKSwgRFZOTSgiQ3JlYXRpdmUgTGl2ZSFDYW0gVmlkZW8gSU0iKX0sCisjaWZuZGVmIENPTkZJR19VU0JfWkMwMzAxCisJe1VTQl9ERVZJQ0UoMHgwNDU4LCAweDcwMDcpLCBEVk5NKCJHZW5pdXMgVmlkZW9DYW0gVjIiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDU4LCAweDcwMGMpLCBEVk5NKCJHZW5pdXMgVmlkZW9DYW0gVjMiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDU4LCAweDcwMGYpLCBEVk5NKCJHZW5pdXMgVmlkZW9DYW0gV2ViIFYyIil9LAorI2VuZGlmCisJe1VTQl9ERVZJQ0UoMHgwNDYxLCAweDBhMDApLCBEVk5NKCJNaWNyb0lubm92YXRpb24gV2ViQ2FtMzIwIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGEwKSwgRFZOTSgiTG9naXRlY2ggUUMgSU0iKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YTEpLCBEVk5NKCJMb2dpdGVjaCBRQyBJTSAweDA4QTEgK3NvdW5kIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGEyKSwgRFZOTSgiTGFidGVjIFdlYmNhbSBQcm8iKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YTMpLCBEVk5NKCJMb2dpdGVjaCBRQyBDaGF0Iil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGE2KSwgRFZOTSgiTG9naXRlY2ggUUNpbSIpfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhhNyksIERWTk0oIkxvZ2l0ZWNoIFF1aWNrQ2FtIEltYWdlIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGE5KSwgRFZOTSgiTG9naXRlY2ggTm90ZWJvb2sgRGVsdXhlIil9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGFhKSwgRFZOTSgiTGFidGVjIFdlYmNhbSBOb3RlYm9vayIpfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhhYyksIERWTk0oIkxvZ2l0ZWNoIFF1aWNrQ2FtIENvb2wiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YWQpLCBEVk5NKCJMb2dpdGVjaCBRQ0NvbW11bmljYXRlIFNUWCIpfSwKKyNpZm5kZWYgQ09ORklHX1VTQl9aQzAzMDEKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhhZSksIERWTk0oIkxvZ2l0ZWNoIFF1aWNrQ2FtIGZvciBOb3RlYm9va3MiKX0sCisjZW5kaWYKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhhZiksIERWTk0oIkxvZ2l0ZWNoIFF1aWNrQ2FtIENvb2wiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YjkpLCBEVk5NKCJMb2dpdGVjaCBRQyBJTSA/Pz8iKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4ZDcpLCBEVk5NKCJMb2dpdGVjaCBRQ2FtIFNUWCIpfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhkOSksIERWTk0oIkxvZ2l0ZWNoIFF1aWNrQ2FtIElNL0Nvbm5lY3QiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4ZDgpLCBEVk5NKCJMb2dpdGVjaCBOb3RlYm9vayBEZWx1eGUiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4ZGEpLCBEVk5NKCJMb2dpdGVjaCBRdWlja0NhbSBNZXNzZW5nZXIiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4ZGQpLCBEVk5NKCJMb2dpdGVjaCBRdWlja0NhbSBmb3IgTm90ZWJvb2tzIil9LAorCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI1KSwgRFZOTSgiUGhpbGlwcyBTUEMgMjAwIE5DIil9LAorCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI2KSwgRFZOTSgiUGhpbGlwcyBTUEMgMzAwIE5DIil9LAorCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzJkKSwgRFZOTSgiUGhpbGlwcyBzcGMyMTBuYyIpfSwKKwl7VVNCX0RFVklDRSgweDA0NzEsIDB4MDMyZSksIERWTk0oIlBoaWxpcHMgc3BjMzE1bmMiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGMwMDUpLCBEVk5NKCJNdXN0ZWsgV2NhbTMwMEEiKX0sCisjaWZuZGVmIENPTkZJR19VU0JfWkMwMzAxCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGQwMDMpLCBEVk5NKCJNdXN0ZWsgV0NhbTMwMEEiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGQwMDQpLCBEVk5NKCJNdXN0ZWsgV0NhbTMwMCBBTiIpfSwKKyNlbmRpZgorCXtVU0JfREVWSUNFKDB4MDY5OCwgMHgyMDAzKSwgRFZOTSgiQ1RYIE03MzBWIGJ1aWx0IGluIil9LAorCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzAyKSwgRFZOTSgiWi1zdGFyIFZpbWljcm8gemMwMzAyIil9LAorI2lmbmRlZiBDT05GSUdfVVNCX1pDMDMwMQorCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgzMDFiKSwgRFZOTSgiWi1TdGFyIHpjMzAxYiIpfSwKKwl7VVNCX0RFVklDRSgweDBhYzgsIDB4MzAzYiksIERWTk0oIlZpbWljcm8gMHgzMDNiIil9LAorI2VuZGlmCisJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwNWIpLCBEVk5NKCJaLXN0YXIgVmltaWNybyB6YzAzMDViIil9LAorI2lmbmRlZiBDT05GSUdfVVNCX1pDMDMwMQorCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgzMDdiKSwgRFZOTSgiWi1TdGFyIDMwN2IiKX0sCisJe1VTQl9ERVZJQ0UoMHgxMGZkLCAweDAxMjgpLCBEVk5NKCJUeXBob29uIFdlYnNob3QgSUkgMzAwayAweDAxMjgiKX0sCisJe1VTQl9ERVZJQ0UoMHgxMGZkLCAweDgwNTApLCBEVk5NKCJUeXBob29uIFdlYnNob3QgSUkgVVNCIDMwMGsiKX0sCisjZW5kaWYKKwl7fQkJCS8qIGVuZCBvZiBlbnRyeSAqLworfTsKKyN1bmRlZiBEVk5BTUUKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkJVEhJU19NT0RVTEUpOworfQorCisvKiBVU0IgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCisJCXJldHVybiAtMTsKKwlQREVCVUcoRF9QUk9CRSwgInYlcyByZWdpc3RlcmVkIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKKworbW9kdWxlX3BhcmFtKGZvcmNlX3NlbnNvciwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2Vfc2Vuc29yLAorCSJGb3JjZSBzZW5zb3IuIE9ubHkgZm9yIGV4cGVydHMhISEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggN2I2NWY1ZS4uYTMwMjU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTE5NCw4OCArMTk0LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogQ29tbW9uIChncmV5IG9yIGNvbG91cmVkKSBwaW5uYWNsZSBQQ1RWIHJlbW90ZSBoYW5kbGluZwotICoKLSAqLwotc3RhdGljIGludCBnZXRfa2V5X3Bpbm5hY2xlKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcsCi0JCQkgICAgaW50IHBhcml0eV9vZmZzZXQsIGludCBtYXJrZXIsIGludCBjb2RlX21vZHVsbykKLXsKLQl1bnNpZ25lZCBjaGFyIGJbNF07Ci0JdW5zaWduZWQgaW50IHN0YXJ0ID0gMCxwYXJpdHkgPSAwLGNvZGUgPSAwOwotCi0JLyogcG9sbCBJUiBjaGlwICovCi0JaWYgKDQgIT0gaTJjX21hc3Rlcl9yZWN2KCZpci0+YyxiLDQpKSB7Ci0JCWRwcmludGsoMiwicmVhZCBlcnJvclxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWZvciAoc3RhcnQgPSAwOyBzdGFydCA8IEFSUkFZX1NJWkUoYik7IHN0YXJ0KyspIHsKLQkJaWYgKGJbc3RhcnRdID09IG1hcmtlcikgewotCQkJY29kZT1iWyhzdGFydCtwYXJpdHlfb2Zmc2V0KzEpJTRdOwotCQkJcGFyaXR5PWJbKHN0YXJ0K3Bhcml0eV9vZmZzZXQpJTRdOwotCQl9Ci0JfQotCi0JLyogRW1wdHkgUmVxdWVzdCAqLwotCWlmIChwYXJpdHk9PTApCi0JCXJldHVybiAwOwotCi0JLyogUmVwZWF0aW5nLi4uICovCi0JaWYgKGlyLT5vbGQgPT0gcGFyaXR5KQotCQlyZXR1cm4gMDsKLQotCWlyLT5vbGQgPSBwYXJpdHk7Ci0KLQkvKiBkcm9wIHNwZWNpYWwgY29kZXMgd2hlbiBhIGtleSBpcyBoZWxkIGRvd24gYSBsb25nIHRpbWUgZm9yIHRoZSBncmV5IGNvbnRyb2xsZXIKLQkgICBJbiB0aGlzIGNhc2UsIHRoZSBzZWNvbmQgYml0IG9mIHRoZSBjb2RlIGlzIGFzc2VydGVkICovCi0JaWYgKG1hcmtlciA9PSAweGZlICYmIChjb2RlICYgMHg0MCkpCi0JCXJldHVybiAwOwotCi0JY29kZSAlPSBjb2RlX21vZHVsbzsKLQotCSppcl9yYXcgPSBjb2RlOwotCSppcl9rZXkgPSBjb2RlOwotCi0JZHByaW50aygxLCJQaW5uYWNsZSBQQ1RWIGtleSAlMDJ4XG4iLCBjb2RlKTsKLQotCXJldHVybiAxOwotfQotCi0vKiBUaGUgZ3JleSBwaW5uYWNsZSBQQ1RWIHJlbW90ZQotICoKLSAqICBUaGVyZSBhcmUgb25lIGlzc3VlIHdpdGggdGhpcyByZW1vdGU6Ci0gKiAgIC0gSTJjIHBhY2tldCBkb2VzIG5vdCBjaGFuZ2Ugd2hlbiB0aGUgc2FtZSBrZXkgaXMgcHJlc3NlZCBxdWlja2x5LiBUaGUgd29ya2Fyb3VuZAotICogICAgIGlzIHRvIGhvbGQgZG93biBlYWNoIGtleSBmb3IgYWJvdXQgaGFsZiBhIHNlY29uZCwgc28gdGhhdCBhbm90aGVyIGNvZGUgaXMgZ2VuZXJhdGVkCi0gKiAgICAgaW4gdGhlIGkyYyBwYWNrZXQsIGFuZCB0aGUgZnVuY3Rpb24gY2FuIGRpc3Rpbmd1aXNoIGtleSBwcmVzc2VzLgotICoKLSAqIFN5bHZhaW4gUGFzY2hlIDxzeWx2YWluLnBhc2NoZUBnbWFpbC5jb20+Ci0gKi8KLWludCBnZXRfa2V5X3Bpbm5hY2xlX2dyZXkoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKLXsKLQotCXJldHVybiBnZXRfa2V5X3Bpbm5hY2xlKGlyLCBpcl9rZXksIGlyX3JhdywgMSwgMHhmZSwgMHhmZik7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGdldF9rZXlfcGlubmFjbGVfZ3JleSk7Ci0KLQotLyogVGhlIG5ldyBwaW5uYWNsZSBQQ1RWIHJlbW90ZSAod2l0aCB0aGUgY29sb3JlZCBidXR0b25zKQotICoKLSAqIFJpY2FyZG8gQ2VycXVlaXJhIDx2NGxAY2VycXVlaXJhLm9yZz4KLSAqLwotaW50IGdldF9rZXlfcGlubmFjbGVfY29sb3Ioc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKLXsKLQkvKiBjb2RlX21vZHVsbyBwYXJhbWV0ZXIgKDB4ODgpIGlzIHVzZWQgdG8gcmVkdWNlIGNvZGUgdmFsdWUgdG8gZml0IGluc2lkZSBJUl9LRVlUQUJfU0laRQotCSAqCi0JICogdGhpcyBpcyB0aGUgb25seSB2YWx1ZSB0aGF0IHJlc3VsdHMgaW4gNDIgdW5pcXVlCi0JICogY29kZXMgPCAxMjgKLQkgKi8KLQotCXJldHVybiBnZXRfa2V5X3Bpbm5hY2xlKGlyLCBpcl9rZXksIGlyX3JhdywgMiwgMHg4MCwgMHg4OCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGdldF9rZXlfcGlubmFjbGVfY29sb3IpOwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdm9pZCBpcl9rZXlfcG9sbChzdHJ1Y3QgSVJfaTJjICppcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jCmluZGV4IDRmYjhmYWUuLjRlMDVmOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBNU1BfTU9OTyAgIE1TUF9JTlBVVChNU1BfSU5fTU9OTywgTVNQX0lOX1RVTkVSMSwgXAogCQkJCU1TUF9EU1BfSU5fU0NBUlQsIE1TUF9EU1BfSU5fU0NBUlQpCiAKLSNkZWZpbmUgVjRMMl9TVERfTk9UX01OIChWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0pCisjZGVmaW5lIFY0TDJfU1REX1BBTF9TRUNBTSAoVjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNKQogCiAvKiB1c3VhbCBpMmMgdHVuZXIgYWRkcmVzc2VzIHRvIHByb2JlICovCiBzdGF0aWMgc3RydWN0IGl2dHZfY2FyZF90dW5lcl9pMmMgaXZ0dl9pMmNfc3RkID0gewpAQCAtMzAwLDcgKzMwMCw3IEBACiAJLmdwaW9fYXVkaW9fZGV0ZWN0ID0geyAubWFzayA9IDB4MDkwMCwgLnN0ZXJlbyA9IDB4MDEwMCB9LAogCS50dW5lcnMgPSB7CiAJCS8qIFRoZSBQQUwgdHVuZXIgaXMgY29uZmlybWVkICovCi0JCXsgLnN0ZCA9IFY0TDJfU1REX05PVF9NTiwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GUTEyMTZNRSB9LAorCQl7IC5zdGQgPSBWNEwyX1NURF9QQUxfU0VDQU0sIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRlExMjE2TUUgfSwKIAkJeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZRMTI4NiB9LAogCX0sCiAJLnBjaV9saXN0ID0gaXZ0dl9wY2lfbXBnNjAwLApAQCAtMzQxLDcgKzM0MSw3IEBACiAJCQkgICAgICAubGFuZzEgPSAweDAwMDQsIC5sYW5nMiAgPSAweDAwMDAsIC5ib3RoICAgPSAweDAwMDggfSwKIAkuZ3Bpb19hdWRpb19kZXRlY3QgPSB7IC5tYXNrID0gMHgwOTAwLCAuc3RlcmVvID0gMHgwMTAwIH0sCiAJLnR1bmVycyA9IHsKLQkJeyAuc3RkID0gVjRMMl9TVERfTk9UX01OLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZRMTIxNk1FIH0sCisJCXsgLnN0ZCA9IFY0TDJfU1REX1BBTF9TRUNBTSwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GUTEyMTZNRSB9LAogCQl7IC5zdGQgPSBWNEwyX1NURF9BTEwsIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRlExMjg2IH0sCiAJfSwKIAkucGNpX2xpc3QgPSBpdnR2X3BjaV9tcGcxNjAsCkBAIC0zNzcsNyArMzc3LDcgQEAKIAkJeyBJVlRWX0NBUkRfSU5QVVRfTElORV9JTjEsICAgQ1gyNTg0MF9BVURJT19TRVJJQUwgfSwKIAl9LAogCS50dW5lcnMgPSB7Ci0JCXsgLnN0ZCA9IFY0TDJfU1REX05PVF9NTiwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GUTEyMTZNRSB9LAorCQl7IC5zdGQgPSBWNEwyX1NURF9QQUxfU0VDQU0sIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRlExMjE2TUUgfSwKIAkJeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZRMTI4NiB9LAogCX0sCiAJLnBjaV9saXN0ID0gaXZ0dl9wY2lfcGc2MDAsCkBAIC00MTgsNyArNDE4LDcgQEAKIAkgICBvbiB0aGUgY291bnRyeS9yZWdpb24gc2V0dGluZyBvZiB0aGUgdXNlciB0byBkZWNpZGUgd2hpY2ggdHVuZXIKIAkgICBpcyBhdmFpbGFibGUuICovCiAJLnR1bmVycyA9IHsKLQkJeyAuc3RkID0gVjRMMl9TVERfTk9UX01OLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMyB9LAorCQl7IC5zdGQgPSBWNEwyX1NURF9QQUxfU0VDQU0sIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszIH0sCiAJCXsgLnN0ZCA9IFY0TDJfU1REX0FMTCAtIFY0TDJfU1REX05UU0NfTV9KUCwKIAkJCS50dW5lciA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMyB9LAogCQl7IC5zdGQgPSBWNEwyX1NURF9OVFNDX01fSlAsIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRlExMjg2IH0sCkBAIC00OTIsNyArNDkyLDcgQEAKIAkuZ3Bpb192aWRlb19pbnB1dCAgPSB7IC5tYXNrID0gMHgwMDMwLCAudHVuZXIgID0gMHgwMDAwLAogCQkJICAuY29tcG9zaXRlID0gMHgwMDEwLCAuc3ZpZGVvID0gMHgwMDIwIH0sCiAJLnR1bmVycyA9IHsKLQkJeyAuc3RkID0gVjRMMl9TVERfNTI1XzYwfFY0TDJfU1REX01OLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZRMTI4NiB9LAorCQl7IC5zdGQgPSBWNEwyX1NURF9NTiwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GUTEyODYgfSwKIAl9LAogCS5wY2lfbGlzdCA9IGl2dHZfcGNpX3RnNTAwMHR2LAogCS5pMmMgPSAmaXZ0dl9pMmNfc3RkLApAQCAtNTIzLDcgKzUyMyw3IEBACiAJCXsgSVZUVl9DQVJEX0lOUFVUX0FVRF9UVU5FUiwgTVNQX1RVTkVSIH0sCiAJfSwKIAkudHVuZXJzID0gewotCQl7IC5zdGQgPSBWNEwyX1NURF81MjVfNjB8VjRMMl9TVERfTU4sIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRlExMjg2IH0sCisJCXsgLnN0ZCA9IFY0TDJfU1REX01OLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZRMTI4NiB9LAogCX0sCiAJLnBjaV9saXN0ID0gaXZ0dl9wY2lfdmEyMDAwLAogCS5pMmMgPSAmaXZ0dl9pMmNfc3RkLApAQCAtNTY3LDcgKzU2Nyw3IEBACiAJLmdwaW9fYXVkaW9fZnJlcSAgID0geyAubWFzayA9IDB4YzAwMCwgLmYzMjAwMCA9IDB4MDAwMCwKIAkJCSAgICAgLmY0NDEwMCA9IDB4NDAwMCwgLmY0ODAwMCA9IDB4ODAwMCB9LAogCS50dW5lcnMgPSB7Ci0JCXsgLnN0ZCA9IFY0TDJfU1REX05PVF9NTiwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMgfSwKKwkJeyAuc3RkID0gVjRMMl9TVERfUEFMX1NFQ0FNLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMyB9LAogCQl7IC5zdGQgPSBWNEwyX1NURF9BTEwsIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMyB9LAogCX0sCiAJLnBjaV9saXN0ID0gaXZ0dl9wY2lfY3gyMzQxNmd5YywKQEAgLTU5OSw3ICs1OTksNyBAQAogCS5ncGlvX2F1ZGlvX2ZyZXEgICA9IHsgLm1hc2sgPSAweGMwMDAsIC5mMzIwMDAgPSAweDAwMDAsCiAJCQkgICAgIC5mNDQxMDAgPSAweDQwMDAsIC5mNDgwMDAgPSAweDgwMDAgfSwKIAkudHVuZXJzID0gewotCQl7IC5zdGQgPSBWNEwyX1NURF9OT1RfTU4sIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszIH0sCisJCXsgLnN0ZCA9IFY0TDJfU1REX1BBTF9TRUNBTSwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMgfSwKIAkJeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMgfSwKIAl9LAogCS5pMmMgPSAmaXZ0dl9pMmNfc3RkLApAQCAtNjI5LDcgKzYyOSw3IEBACiAJLmdwaW9fYXVkaW9fZnJlcSAgID0geyAubWFzayA9IDB4YzAwMCwgLmYzMjAwMCA9IDB4MDAwMCwKIAkJCSAgICAgLmY0NDEwMCA9IDB4NDAwMCwgLmY0ODAwMCA9IDB4ODAwMCB9LAogCS50dW5lcnMgPSB7Ci0JCXsgLnN0ZCA9IFY0TDJfU1REX05PVF9NTiwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMgfSwKKwkJeyAuc3RkID0gVjRMMl9TVERfUEFMX1NFQ0FNLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMyB9LAogCQl7IC5zdGQgPSBWNEwyX1NURF9BTEwsIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMyB9LAogCX0sCiAJLmkyYyA9ICZpdnR2X2kyY19zdGQsCkBAIC02NjksNyArNjY5LDcgQEAKIAkuZ3Bpb19hdWRpb19pbnB1dCAgPSB7IC5tYXNrID0gMHhmZmZmLCAudHVuZXIgID0gMHgwMjAwLCAubGluZWluID0gMHgwMzAwIH0sCiAJLnR1bmVycyA9IHsKIAkJLyogVGhpcyBjYXJkIGhhcyB0aGUgUGFuYXNvbmljIFZQMjcgdHVuZXIgKi8KLQkJeyAuc3RkID0gVjRMMl9TVERfNTI1XzYwfFY0TDJfU1REX01OLCAudHVuZXIgPSBUVU5FUl9QQU5BU09OSUNfVlAyNyB9LAorCQl7IC5zdGQgPSBWNEwyX1NURF9NTiwgLnR1bmVyID0gVFVORVJfUEFOQVNPTklDX1ZQMjcgfSwKIAl9LAogCS5wY2lfbGlzdCA9IGl2dHZfcGNpX2d2X212cHJ4LAogCS5pMmMgPSAmaXZ0dl9pMmNfc3RkLApAQCAtNzA2LDcgKzcwNiw3IEBACiAJLmdwaW9fYXVkaW9faW5wdXQgID0geyAubWFzayA9IDB4ZmZmZiwgLnR1bmVyICA9IDB4MDIwMCwgLmxpbmVpbiA9IDB4MDMwMCB9LAogCS50dW5lcnMgPSB7CiAJCS8qIFRoaXMgY2FyZCBoYXMgdGhlIFBhbmFzb25pYyBWUDI3IHR1bmVyICovCi0JCXsgLnN0ZCA9IFY0TDJfU1REXzUyNV82MHxWNEwyX1NURF9NTiwgLnR1bmVyID0gVFVORVJfUEFOQVNPTklDX1ZQMjcgfSwKKwkJeyAuc3RkID0gVjRMMl9TVERfTU4sIC50dW5lciA9IFRVTkVSX1BBTkFTT05JQ19WUDI3IH0sCiAJfSwKIAkucGNpX2xpc3QgPSBpdnR2X3BjaV9ndl9tdnByeDJlLAogCS5pMmMgPSAmaXZ0dl9pMmNfc3RkLApAQCAtNzQxLDcgKzc0MSw3IEBACiAJLmdwaW9faW5pdCA9IHsgLmRpcmVjdGlvbiA9IDB4ZjAwMCwgLmluaXRpYWxfdmFsdWUgPSAweEEwMDAgfSwKIAkudHVuZXJzID0gewogCQkvKiBUaGlzIGNhcmQgaGFzIGEgUGhpbGlwcyBGUTEyMTZNRSBNSzMgdHVuZXIgKi8KLQkJeyAuc3RkID0gVjRMMl9TVERfTk9UX01OLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMyB9LAorCQl7IC5zdGQgPSBWNEwyX1NURF9QQUxfU0VDQU0sIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszIH0sCiAJfSwKIAkucGNpX2xpc3QgPSBpdnR2X3BjaV9nb3R2aWV3X3BjaV9kdmQsCiAJLmkyYyA9ICZpdnR2X2kyY19zdGQsCkBAIC03ODAsNyArNzgwLDcgQEAKIAkuZ3Bpb19hdWRpb19pbnB1dCAgPSB7IC5tYXNrID0gMHgwODAwLCAudHVuZXIgPSAwLCAubGluZWluID0gMCwgLnJhZGlvID0gMHgwODAwIH0sCiAJLnR1bmVycyA9IHsKIAkJLyogVGhpcyBjYXJkIGhhcyBhIFBoaWxpcHMgRlExMjE2TUUgTUs1IHR1bmVyICovCi0JCXsgLnN0ZCA9IFY0TDJfU1REX05PVF9NTiwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMgfSwKKwkJeyAuc3RkID0gVjRMMl9TVERfUEFMX1NFQ0FNLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMyB9LAogCX0sCiAJLnBjaV9saXN0ID0gaXZ0dl9wY2lfZ290dmlld19wY2lfZHZkMiwKIAkuaTJjID0gJml2dHZfaTJjX3N0ZCwKQEAgLTg1OCw3ICs4NTgsNyBAQAogCS5ncGlvX3ZpZGVvX2lucHV0ICA9IHsgLm1hc2sgPSAweDAwMzAsIC50dW5lciAgPSAweDAwMDAsCiAJCQkgICAgICAgLmNvbXBvc2l0ZSA9IDB4MDAxMCwgLnN2aWRlbyA9IDB4MDAyMH0sCiAJLnR1bmVycyA9IHsKLQkJeyAuc3RkID0gVjRMMl9TVERfNTI1XzYwfFY0TDJfU1REX01OLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZRMTI4NiB9LAorCQl7IC5zdGQgPSBWNEwyX1NURF9NTiwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GUTEyODYgfSwKIAl9LAogCS5wY2lfbGlzdCA9IGl2dHZfcGNpX2RjdG12dHZwMSwKIAkuaTJjID0gJml2dHZfaTJjX3N0ZCwKQEAgLTkyMyw3ICs5MjMsNiBAQAogCQl7IElWVFZfQ0FSRF9JTlBVVF9MSU5FX0lOMSwgICBDWDI1ODQwX0FVRElPX1NFUklBTCB9LAogCX0sCiAJLnJhZGlvX2lucHV0ID0geyBJVlRWX0NBUkRfSU5QVVRfQVVEX1RVTkVSLCBDWDI1ODQwX0FVRElPNSB9LAotCS5ncGlvX2luaXQgPSB7IC5kaXJlY3Rpb24gPSAweDEwMDAsIC5pbml0aWFsX3ZhbHVlID0gMHgxMDAwIH0sIC8qIHR1bmVyIHJlc2V0ICovCiAJLnhjZWl2ZV9waW4gPSAxMiwKIAkudHVuZXJzID0gewogCQl7IC5zdGQgPSBWNEwyX1NURF9BTEwsIC50dW5lciA9IFRVTkVSX1hDMjAyOCB9LApAQCAtOTU5LDcgKzk1OCw3IEBACiAJCXsgSVZUVl9DQVJEX0lOUFVUX0xJTkVfSU4xLCAgIENYMjU4NDBfQVVESU9fU0VSSUFMLCAxIH0sCiAJfSwKIAkvKiBlbmFibGUgbGluZS1pbiAqLwotCS5ncGlvX2luaXQgPSB7IC5kaXJlY3Rpb24gPSAweGU0MDAsIC5pbml0aWFsX3ZhbHVlID0gMHg0NDAwIH0sCisJLmdwaW9faW5pdCA9IHsgLmRpcmVjdGlvbiA9IDB4ZTAwMCwgLmluaXRpYWxfdmFsdWUgPSAweDQwMDAgfSwKIAkueGNlaXZlX3BpbiA9IDEwLAogCS50dW5lcnMgPSB7CiAJCXsgLnN0ZCA9IFY0TDJfU1REX0FMTCwgLnR1bmVyID0gVFVORVJfWEMyMDI4IH0sCkBAIC0xMDAxLDcgKzEwMDAsNyBAQAogCS5ncGlvX2F1ZGlvX2lucHV0ICA9IHsgLm1hc2sgPSAweDA4MDAsIC50dW5lciA9IDAsIC5saW5laW4gPSAwLCAucmFkaW8gPSAweDA4MDAgfSwKIAkudHVuZXJzID0gewogCQkvKiBUaGlzIGNhcmQgaGFzIGEgUGFydHNuaWMgUFRJLTVORjA1IHR1bmVyICovCi0JCXsgLnN0ZCA9IFY0TDJfU1REXzUyNV82MHxWNEwyX1NURF9NTiwgLnR1bmVyID0gVFVORVJfVENMXzIwMDJOIH0sCisJCXsgLnN0ZCA9IFY0TDJfU1REX01OLCAudHVuZXIgPSBUVU5FUl9UQ0xfMjAwMk4gfSwKIAl9LAogCS5wY2lfbGlzdCA9IGl2dHZfcGNpX2F2ZXJfcHZyMTUwLAogCS5pMmMgPSAmaXZ0dl9pMmNfcmFkaW8sCkBAIC0xMDY5LDcgKzEwNjgsNyBAQAogCX0sCiAJLnJhZGlvX2lucHV0ID0geyBJVlRWX0NBUkRfSU5QVVRfQVVEX1RVTkVSLCBDWDI1ODQwX0FVRElPX1NFUklBTCwgTTUyNzkwX0lOX1RVTkVSIH0sCiAJLnR1bmVycyA9IHsKLQkJeyAuc3RkID0gVjRMMl9TVERfNTI1XzYwfFY0TDJfU1REX01OLCAudHVuZXIgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMgfSwKKwkJeyAuc3RkID0gVjRMMl9TVERfTU4sIC50dW5lciA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMyB9LAogCX0sCiAJLnBjaV9saXN0ID0gaXZ0dl9wY2lfYXN1c19mYWxjb24yLAogCS5pMmMgPSAmaXZ0dl9pMmNfc3RkLApAQCAtMTEwMiw3ICsxMTAxLDcgQEAKIAl9LAogCS5yYWRpb19pbnB1dCA9IHsgSVZUVl9DQVJEX0lOUFVUX0FVRF9UVU5FUiwgQ1gyNTg0MF9BVURJT19TRVJJQUwsIDIgfSwKIAkvKiBlbmFibGUgbGluZS1pbiArIHJlc2V0IHR1bmVyICovCi0JLmdwaW9faW5pdCA9IHsgLmRpcmVjdGlvbiA9IDB4ZTQwMCwgLmluaXRpYWxfdmFsdWUgPSAweDQwMDAgfSwKKwkuZ3Bpb19pbml0ID0geyAuZGlyZWN0aW9uID0gMHhlMDAwLCAuaW5pdGlhbF92YWx1ZSA9IDB4NDAwMCB9LAogCS54Y2VpdmVfcGluID0gMTAsCiAJLnR1bmVycyA9IHsKIAkJeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9YQzIwMjggfSwKQEAgLTExMTEsNiArMTExMCw0MSBAQAogCS5pMmMgPSAmaXZ0dl9pMmNfc3RkLAogfTsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBCdWZmYWxvIFBDLU1WNUwvUENJIGNhcmRzICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkX3BjaV9pbmZvIGl2dHZfcGNpX2J1ZmZhbG9bXSA9IHsKKwl7IFBDSV9ERVZJQ0VfSURfSVZUVjE2LCBJVlRWX1BDSV9JRF9NRUxDTywgMHgwNTJiIH0sCisJeyAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkIGl2dHZfY2FyZF9idWZmYWxvID0geworCS50eXBlID0gSVZUVl9DQVJEX0JVRkZBTE9fTVY1TCwKKwkubmFtZSA9ICJCdWZmYWxvIFBDLU1WNUwvUENJIiwKKwkudjRsMl9jYXBhYmlsaXRpZXMgPSBJVlRWX0NBUF9FTkNPREVSLAorCS5od192aWRlbyA9IElWVFZfSFdfQ1gyNTg0MCwKKwkuaHdfYXVkaW8gPSBJVlRWX0hXX0NYMjU4NDAsCisJLmh3X2F1ZGlvX2N0cmwgPSBJVlRWX0hXX0NYMjU4NDAsCisJLmh3X2FsbCA9IElWVFZfSFdfQ1gyNTg0MCB8IElWVFZfSFdfVFVORVIsCisJLnZpZGVvX2lucHV0cyA9IHsKKwkJeyBJVlRWX0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gyNTg0MF9DT01QT1NJVEUyIH0sCisJCXsgSVZUVl9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCisJCQlDWDI1ODQwX1NWSURFT19MVU1BMyB8IENYMjU4NDBfU1ZJREVPX0NIUk9NQTQgfSwKKwkJeyBJVlRWX0NBUkRfSU5QVVRfQ09NUE9TSVRFMSwgMSwgQ1gyNTg0MF9DT01QT1NJVEUxIH0sCisJfSwKKwkuYXVkaW9faW5wdXRzID0geworCQl7IElWVFZfQ0FSRF9JTlBVVF9BVURfVFVORVIsICBDWDI1ODQwX0FVRElPNSAgICAgICB9LAorCQl7IElWVFZfQ0FSRF9JTlBVVF9MSU5FX0lOMSwgICBDWDI1ODQwX0FVRElPX1NFUklBTCB9LAorCX0sCisJLnhjZWl2ZV9waW4gPSAxMiwKKwkudHVuZXJzID0geworCQl7IC5zdGQgPSBWNEwyX1NURF9BTEwsIC50dW5lciA9IFRVTkVSX1hDMjAyOCB9LAorCX0sCisJLnBjaV9saXN0ID0gaXZ0dl9wY2lfYnVmZmFsbywKKwkuaTJjID0gJml2dHZfaTJjX3N0ZCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkICppdnR2X2NhcmRfbGlzdFtdID0gewogCSZpdnR2X2NhcmRfcHZyMjUwLAogCSZpdnR2X2NhcmRfcHZyMzUwLApAQCAtMTEzNyw2ICsxMTcxLDcgQEAKIAkmaXZ0dl9jYXJkX2F2ZXJfcHZyMTUwLAogCSZpdnR2X2NhcmRfYXZlcl9lem1ha2VyLAogCSZpdnR2X2NhcmRfYXZlcl9tMTA0LAorCSZpdnR2X2NhcmRfYnVmZmFsbywKIAogCS8qIFZhcmlhdGlvbnMgb2Ygc3RhbmRhcmQgY2FyZHMgYnV0IHdpdGggdGhlIHNhbWUgUENJIElEcy4KIAkgICBUaGVzZSBjYXJkcyBtdXN0IGNvbWUgbGFzdCBpbiB0aGlzIGxpc3QuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaAppbmRleCA3NDg0ODVkLi4zODFhZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKQEAgLTQ5LDcgKzQ5LDggQEAKICNkZWZpbmUgSVZUVl9DQVJEX0FWRVJfUFZSMTUwUExVUyAgICAyMiAvKiBBVmVyTWVkaWEgUFZSLTE1MCBQbHVzICovCiAjZGVmaW5lIElWVFZfQ0FSRF9BVkVSX0VaTUFLRVIgICAgICAgMjMgLyogQVZlck1lZGlhIEVaTWFrZXIgUENJIERlbHV4ZSAqLwogI2RlZmluZSBJVlRWX0NBUkRfQVZFUl9NMTA0ICAgICAgICAgIDI0IC8qIEF2ZXJNZWRpYSBNMTA0IG1pbmlQQ0kgY2FyZCAqLwotI2RlZmluZSBJVlRWX0NBUkRfTEFTVCAJCSAgICAgMjQKKyNkZWZpbmUgSVZUVl9DQVJEX0JVRkZBTE9fTVY1TCAgICAgICAyNSAvKiBCdWZmYWxvIFBDLU1WNUwvUENJIGNhcmQgKi8KKyNkZWZpbmUgSVZUVl9DQVJEX0xBU1QgCQkgICAgIDI1CiAKIC8qIFZhcmlhbnRzIG9mIGV4aXN0aW5nIGNhcmRzIGJ1dCB3aXRoIHRoZSBzYW1lIFBDSSBJRHMuIFRoZSBkcml2ZXIKICAgIGRldGVjdHMgdGhlc2UgYmFzZWQgb24gb3RoZXIgZGV2aWNlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmMKaW5kZXggYzdlNDQ5Zi4uNDhlMTAzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jb250cm9scy5jCkBAIC00NywxMSArNDcsMTEgQEAKIAlOVUxMCiB9OwogCi1zdGF0aWMgaW50IGl2dHZfcXVlcnljdHJsKHN0cnVjdCBpdnR2ICppdHYsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCi17Ci0JY29uc3QgY2hhciAqbmFtZTsKIAotCUlWVFZfREVCVUdfSU9DVEwoIlZJRElPQ19RVUVSWUNUUkwoJTA4eClcbiIsIHFjdHJsLT5pZCk7CitpbnQgaXZ0dl9xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKKwljb25zdCBjaGFyICpuYW1lOwogCiAJcWN0cmwtPmlkID0gdjRsMl9jdHJsX25leHQoY3RybF9jbGFzc2VzLCBxY3RybC0+aWQpOwogCWlmIChxY3RybC0+aWQgPT0gMCkKQEAgLTg3LDIxICs4NywzNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl2dHZfcXVlcnltZW51KHN0cnVjdCBpdnR2ICppdHYsIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCitpbnQgaXZ0dl9xdWVyeW1lbnUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51KQogeworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWN0cmw7CiAKIAlxY3RybC5pZCA9IHFtZW51LT5pZDsKLQlpdnR2X3F1ZXJ5Y3RybChpdHYsICZxY3RybCk7Ci0JcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9tZW51KHFtZW51LCAmcWN0cmwsIGN4MjM0MXhfY3RybF9nZXRfbWVudShxbWVudS0+aWQpKTsKKwlpdnR2X3F1ZXJ5Y3RybChmaWxlLCBmaCwgJnFjdHJsKTsKKwlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwKKwkJCWN4MjM0MXhfY3RybF9nZXRfbWVudSgmaXR2LT5wYXJhbXMsIHFtZW51LT5pZCkpOworfQorCitzdGF0aWMgaW50IGl2dHZfdHJ5X2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqdmN0cmwpCit7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsOworCWNvbnN0IGNoYXIgKiptZW51X2l0ZW1zID0gTlVMTDsKKwlpbnQgZXJyOworCisJcWN0cmwuaWQgPSB2Y3RybC0+aWQ7CisJZXJyID0gaXZ0dl9xdWVyeWN0cmwoZmlsZSwgZmgsICZxY3RybCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAocWN0cmwudHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VKQorCQltZW51X2l0ZW1zID0gdjRsMl9jdHJsX2dldF9tZW51KHFjdHJsLmlkKTsKKwlyZXR1cm4gdjRsMl9jdHJsX2NoZWNrKHZjdHJsLCAmcWN0cmwsIG1lbnVfaXRlbXMpOwogfQogCiBzdGF0aWMgaW50IGl2dHZfc19jdHJsKHN0cnVjdCBpdnR2ICppdHYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKnZjdHJsKQogewotCXMzMiB2ID0gdmN0cmwtPnZhbHVlOwotCi0JSVZUVl9ERUJVR19JT0NUTCgiVklESU9DX1NfQ1RSTCglMDh4LCAleClcbiIsIHZjdHJsLT5pZCwgdik7Ci0KIAlzd2l0Y2ggKHZjdHJsLT5pZCkgewogCQkvKiBTdGFuZGFyZCBWNEwyIGNvbnRyb2xzICovCiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgpAQCAtMTE5LDcgKzEzMyw3IEBACiAJCXJldHVybiBpdnR2X2kyY19odyhpdHYsIGl0di0+Y2FyZC0+aHdfYXVkaW9fY3RybCwgVklESU9DX1NfQ1RSTCwgdmN0cmwpOwogCiAJZGVmYXVsdDoKLQkJSVZUVl9ERUJVR19JT0NUTCgiaW52YWxpZCBjb250cm9sICV4XG4iLCB2Y3RybC0+aWQpOworCQlJVlRWX0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMTI3LDggKzE0MSw2IEBACiAKIHN0YXRpYyBpbnQgaXZ0dl9nX2N0cmwoc3RydWN0IGl2dHYgKml0diwgc3RydWN0IHY0bDJfY29udHJvbCAqdmN0cmwpCiB7Ci0JSVZUVl9ERUJVR19JT0NUTCgiVklESU9DX0dfQ1RSTCglMDh4KVxuIiwgdmN0cmwtPmlkKTsKLQogCXN3aXRjaCAodmN0cmwtPmlkKSB7CiAJCS8qIFN0YW5kYXJkIFY0TDIgY29udHJvbHMgKi8KIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CkBAIC0xNDUsNyArMTU3LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgogCQlyZXR1cm4gaXZ0dl9pMmNfaHcoaXR2LCBpdHYtPmNhcmQtPmh3X2F1ZGlvX2N0cmwsIFZJRElPQ19HX0NUUkwsIHZjdHJsKTsKIAlkZWZhdWx0OgotCQlJVlRWX0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgJXhcbiIsIHZjdHJsLT5pZCk7CisJCUlWVFZfREVCVUdfSU9DVEwoImludmFsaWQgY29udHJvbCAweCV4XG4iLCB2Y3RybC0+aWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xOTEsMTE5ICsyMDMsMTA2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpdnR2X2NvbnRyb2xfaW9jdGxzKHN0cnVjdCBpdnR2ICppdHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBpdnR2X2dfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjKQogeworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKIAlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX1FVRVJZTUVOVToKLQkJSVZUVl9ERUJVR19JT0NUTCgiVklESU9DX1FVRVJZTUVOVVxuIik7Ci0JCXJldHVybiBpdnR2X3F1ZXJ5bWVudShpdHYsIGFyZyk7CisJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIpIHsKKwkJaW50IGk7CisJCWludCBlcnIgPSAwOwogCi0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCQlyZXR1cm4gaXZ0dl9xdWVyeWN0cmwoaXR2LCBhcmcpOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlyZXR1cm4gaXZ0dl9zX2N0cmwoaXR2LCBhcmcpOwotCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gaXZ0dl9nX2N0cmwoaXR2LCBhcmcpOwotCi0JY2FzZSBWSURJT0NfU19FWFRfQ1RSTFM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmMgPSBhcmc7Ci0KLQkJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIpIHsKLQkJCWludCBpOwotCQkJaW50IGVyciA9IDA7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudDsgaSsrKSB7Ci0JCQkJY3RybC5pZCA9IGMtPmNvbnRyb2xzW2ldLmlkOwotCQkJCWN0cmwudmFsdWUgPSBjLT5jb250cm9sc1tpXS52YWx1ZTsKLQkJCQllcnIgPSBpdnR2X3NfY3RybChpdHYsICZjdHJsKTsKLQkJCQljLT5jb250cm9sc1tpXS52YWx1ZSA9IGN0cmwudmFsdWU7Ci0JCQkJaWYgKGVycikgewotCQkJCQljLT5lcnJvcl9pZHggPSBpOwotCQkJCQlicmVhazsKLQkJCQl9CisJCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudDsgaSsrKSB7CisJCQljdHJsLmlkID0gYy0+Y29udHJvbHNbaV0uaWQ7CisJCQljdHJsLnZhbHVlID0gYy0+Y29udHJvbHNbaV0udmFsdWU7CisJCQllcnIgPSBpdnR2X2dfY3RybChpdHYsICZjdHJsKTsKKwkJCWMtPmNvbnRyb2xzW2ldLnZhbHVlID0gY3RybC52YWx1ZTsKKwkJCWlmIChlcnIpIHsKKwkJCQljLT5lcnJvcl9pZHggPSBpOworCQkJCWJyZWFrOwogCQkJfQotCQkJcmV0dXJuIGVycjsKIAkJfQotCQlJVlRWX0RFQlVHX0lPQ1RMKCJWSURJT0NfU19FWFRfQ1RSTFNcbiIpOwotCQlpZiAoYy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykgewotCQkJc3RhdGljIHUzMiBmcmVxc1szXSA9IHsgNDQxMDAsIDQ4MDAwLCAzMjAwMCB9OwotCQkJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgcCA9IGl0di0+cGFyYW1zOwotCQkJaW50IGVyciA9IGN4MjM0MXhfZXh0X2N0cmxzKCZwLCBhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpLCBhcmcsIGNtZCk7Ci0JCQl1bnNpZ25lZCBpZHg7CisJCXJldHVybiBlcnI7CisJfQorCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQorCQlyZXR1cm4gY3gyMzQxeF9leHRfY3RybHMoJml0di0+cGFyYW1zLCAwLCBjLCBWSURJT0NfR19FWFRfQ1RSTFMpOworCXJldHVybiAtRUlOVkFMOworfQogCi0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CitpbnQgaXZ0dl9zX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqYykKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CisJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwogCi0JCQlpZiAocC52aWRlb19lbmNvZGluZyAhPSBpdHYtPnBhcmFtcy52aWRlb19lbmNvZGluZykgewotCQkJCWludCBpc19tcGVnMSA9IHAudmlkZW9fZW5jb2RpbmcgPT0KLQkJCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzE7Ci0JCQkJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKKwlpZiAoYy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfVVNFUikgeworCQlpbnQgaTsKKwkJaW50IGVyciA9IDA7CiAKLQkJCQkvKiBmaXggdmlkZW9kZWNvZGVyIHJlc29sdXRpb24gKi8KLQkJCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJCQlmbXQuZm10LnBpeC53aWR0aCA9IGl0di0+cGFyYW1zLndpZHRoIC8gKGlzX21wZWcxID8gMiA6IDEpOwotCQkJCWZtdC5mbXQucGl4LmhlaWdodCA9IGl0di0+cGFyYW1zLmhlaWdodDsKLQkJCQlpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX1NfRk1ULCAmZm10KTsKKwkJZm9yIChpID0gMDsgaSA8IGMtPmNvdW50OyBpKyspIHsKKwkJCWN0cmwuaWQgPSBjLT5jb250cm9sc1tpXS5pZDsKKwkJCWN0cmwudmFsdWUgPSBjLT5jb250cm9sc1tpXS52YWx1ZTsKKwkJCWVyciA9IGl2dHZfc19jdHJsKGl0diwgJmN0cmwpOworCQkJYy0+Y29udHJvbHNbaV0udmFsdWUgPSBjdHJsLnZhbHVlOworCQkJaWYgKGVycikgeworCQkJCWMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSBjeDIzNDF4X3VwZGF0ZShpdHYsIGl2dHZfYXBpX2Z1bmMsICZpdHYtPnBhcmFtcywgJnApOwotCQkJaWYgKCFlcnIgJiYgaXR2LT5wYXJhbXMuc3RyZWFtX3ZiaV9mbXQgIT0gcC5zdHJlYW1fdmJpX2ZtdCkgewotCQkJCWVyciA9IGl2dHZfc2V0dXBfdmJpX2ZtdChpdHYsIHAuc3RyZWFtX3ZiaV9mbXQpOwotCQkJfQotCQkJaXR2LT5wYXJhbXMgPSBwOwotCQkJaXR2LT5kdWFsd2F0Y2hfc3RlcmVvX21vZGUgPSBwLmF1ZGlvX3Byb3BlcnRpZXMgJiAweDAzMDA7Ci0JCQlpZHggPSBwLmF1ZGlvX3Byb3BlcnRpZXMgJiAweDAzOwotCQkJLyogVGhlIGF1ZGlvIGNsb2NrIG9mIHRoZSBkaWdpdGl6ZXIgbXVzdCBtYXRjaCB0aGUgY29kZWMgc2FtcGxlCi0JCQkgICByYXRlIG90aGVyd2lzZSB5b3UgZ2V0IHNvbWUgdmVyeSBzdHJhbmdlIGVmZmVjdHMuICovCi0JCQlpZiAoaWR4IDwgc2l6ZW9mKGZyZXFzKSkKLQkJCSAgICBpdnR2X2NhbGxfaTJjX2NsaWVudHMoaXR2LCBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVEsICZmcmVxc1tpZHhdKTsKLQkJCXJldHVybiBlcnI7CiAJCX0KLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBlcnI7CiAJfQorCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKSB7CisJCXN0YXRpYyB1MzIgZnJlcXNbM10gPSB7IDQ0MTAwLCA0ODAwMCwgMzIwMDAgfTsKKwkJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgcCA9IGl0di0+cGFyYW1zOworCQlpbnQgZXJyID0gY3gyMzQxeF9leHRfY3RybHMoJnAsIGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZyksIGMsIFZJRElPQ19TX0VYVF9DVFJMUyk7CisJCXVuc2lnbmVkIGlkeDsKIAotCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgotCXsKLQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjID0gYXJnOwotCi0JCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19VU0VSKSB7Ci0JCQlpbnQgaTsKLQkJCWludCBlcnIgPSAwOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgYy0+Y291bnQ7IGkrKykgewotCQkJCWN0cmwuaWQgPSBjLT5jb250cm9sc1tpXS5pZDsKLQkJCQljdHJsLnZhbHVlID0gYy0+Y29udHJvbHNbaV0udmFsdWU7Ci0JCQkJZXJyID0gaXZ0dl9nX2N0cmwoaXR2LCAmY3RybCk7Ci0JCQkJYy0+Y29udHJvbHNbaV0udmFsdWUgPSBjdHJsLnZhbHVlOwotCQkJCWlmIChlcnIpIHsKLQkJCQkJYy0+ZXJyb3JfaWR4ID0gaTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQorCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKKworCQlpZiAocC52aWRlb19lbmNvZGluZyAhPSBpdHYtPnBhcmFtcy52aWRlb19lbmNvZGluZykgeworCQkJaW50IGlzX21wZWcxID0gcC52aWRlb19lbmNvZGluZyA9PQorCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzE7CisJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OworCisJCQkvKiBmaXggdmlkZW9kZWNvZGVyIHJlc29sdXRpb24gKi8KKwkJCWZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJZm10LmZtdC5waXgud2lkdGggPSBpdHYtPnBhcmFtcy53aWR0aCAvIChpc19tcGVnMSA/IDIgOiAxKTsKKwkJCWZtdC5mbXQucGl4LmhlaWdodCA9IGl0di0+cGFyYW1zLmhlaWdodDsKKwkJCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfU19GTVQsICZmbXQpOwogCQl9Ci0JCUlWVFZfREVCVUdfSU9DVEwoIlZJRElPQ19HX0VYVF9DVFJMU1xuIik7Ci0JCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQotCQkJcmV0dXJuIGN4MjM0MXhfZXh0X2N0cmxzKCZpdHYtPnBhcmFtcywgMCwgYXJnLCBjbWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZXJyID0gY3gyMzQxeF91cGRhdGUoaXR2LCBpdnR2X2FwaV9mdW5jLCAmaXR2LT5wYXJhbXMsICZwKTsKKwkJaWYgKCFlcnIgJiYgaXR2LT5wYXJhbXMuc3RyZWFtX3ZiaV9mbXQgIT0gcC5zdHJlYW1fdmJpX2ZtdCkKKwkJCWVyciA9IGl2dHZfc2V0dXBfdmJpX2ZtdChpdHYsIHAuc3RyZWFtX3ZiaV9mbXQpOworCQlpdHYtPnBhcmFtcyA9IHA7CisJCWl0di0+ZHVhbHdhdGNoX3N0ZXJlb19tb2RlID0gcC5hdWRpb19wcm9wZXJ0aWVzICYgMHgwMzAwOworCQlpZHggPSBwLmF1ZGlvX3Byb3BlcnRpZXMgJiAweDAzOworCQkvKiBUaGUgYXVkaW8gY2xvY2sgb2YgdGhlIGRpZ2l0aXplciBtdXN0IG1hdGNoIHRoZSBjb2RlYyBzYW1wbGUKKwkJICAgcmF0ZSBvdGhlcndpc2UgeW91IGdldCBzb21lIHZlcnkgc3RyYW5nZSBlZmZlY3RzLiAqLworCQlpZiAoaWR4IDwgc2l6ZW9mKGZyZXFzKSkKKwkJCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSwgJmZyZXFzW2lkeF0pOworCQlyZXR1cm4gZXJyOwogCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KIAotCWNhc2UgVklESU9DX1RSWV9FWFRfQ1RSTFM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmMgPSBhcmc7CitpbnQgaXZ0dl90cnlfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKIAotCQlJVlRWX0RFQlVHX0lPQ1RMKCJWSURJT0NfVFJZX0VYVF9DVFJMU1xuIik7Ci0JCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQotCQkJcmV0dXJuIGN4MjM0MXhfZXh0X2N0cmxzKCZpdHYtPnBhcmFtcywgYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSwgYXJnLCBjbWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoYy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfVVNFUikgeworCQlpbnQgaTsKKwkJaW50IGVyciA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IGMtPmNvdW50OyBpKyspIHsKKwkJCWVyciA9IGl2dHZfdHJ5X2N0cmwoZmlsZSwgZmgsICZjLT5jb250cm9sc1tpXSk7CisJCQlpZiAoZXJyKSB7CisJCQkJYy0+ZXJyb3JfaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZXJyOwogCX0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKKwlpZiAoYy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKKwkJcmV0dXJuIGN4MjM0MXhfZXh0X2N0cmxzKCZpdHYtPnBhcmFtcywgYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSwgYywgVklESU9DX1RSWV9FWFRfQ1RSTFMpOworCXJldHVybiAtRUlOVkFMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmgKaW5kZXggYmI4YTZhNS4uMWM3NzIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jb250cm9scy5oCkBAIC0yMSw2ICsyMSwxMCBAQAogI2lmbmRlZiBJVlRWX0NPTlRST0xTX0gKICNkZWZpbmUgSVZUVl9DT05UUk9MU19ICiAKLWludCBpdnR2X2NvbnRyb2xfaW9jdGxzKHN0cnVjdCBpdnR2ICppdHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgaXZ0dl9xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmEpOworaW50IGl2dHZfZ19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmEpOworaW50IGl2dHZfc19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmEpOworaW50IGl2dHZfdHJ5X2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqYSk7CitpbnQgaXZ0dl9xdWVyeW1lbnUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKmEpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKaW5kZXggNzk3ZTYzNi4uNDFmZDc5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTE5MSw2ICsxOTEsNyBAQAogCQkgIlx0XHRcdDIzID0gQXZlck1lZGlhIFBWUi0xNTAgUGx1c1xuIgogCQkgIlx0XHRcdDI0ID0gQXZlck1lZGlhIEVaTWFrZXIgUENJIERlbHV4ZVxuIgogCQkgIlx0XHRcdDI1ID0gQXZlck1lZGlhIE0xMDQgKG5vdCB5ZXQgd29ya2luZylcbiIKKwkJICJcdFx0XHQyNiA9IEJ1ZmZhbG8gUEMtTVY1TC9QQ0lcbiIKIAkJICJcdFx0XHQgMCA9IEF1dG9kZXRlY3QgKGRlZmF1bHQpXG4iCiAJCSAiXHRcdFx0LTEgPSBJZ25vcmUgdGhpcyBjYXJkXG5cdFx0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBhbCwgIlNldCBQQUwgc3RhbmRhcmQ6IEJHSCwgREssIEksIE0sIE4sIE5jLCA2MCIpOwpAQCAtMTAxOSw3ICsxMDIwLDcgQEAKIAlpdnR2X2NhcmRzW2l2dHZfY2FyZHNfYWN0aXZlXSA9IGl0djsKIAlpdHYtPmRldiA9IGRldjsKIAlpdHYtPm51bSA9IGl2dHZfY2FyZHNfYWN0aXZlKys7Ci0Jc25wcmludGYoaXR2LT5uYW1lLCBzaXplb2YoaXR2LT5uYW1lKSAtIDEsICJpdnR2JWQiLCBpdHYtPm51bSk7CisJc25wcmludGYoaXR2LT5uYW1lLCBzaXplb2YoaXR2LT5uYW1lKSwgIml2dHYlZCIsIGl0di0+bnVtKTsKIAlJVlRWX0lORk8oIkluaXRpYWxpemluZyBjYXJkICMlZFxuIiwgaXR2LT5udW0pOwogCiAJc3Bpbl91bmxvY2soJml2dHZfY2FyZHNfbG9jayk7CkBAIC0xMTI3LDYgKzExMjgsMTIgQEAKIAkvKiBpZiBubyB0dW5lciB3YXMgZm91bmQsIHRoZW4gcGljayB0aGUgZmlyc3QgdHVuZXIgaW4gdGhlIGNhcmQgbGlzdCAqLwogCWlmIChpdHYtPm9wdGlvbnMudHVuZXIgPT0gLTEgJiYgaXR2LT5jYXJkLT50dW5lcnNbMF0uc3RkKSB7CiAJCWl0di0+c3RkID0gaXR2LT5jYXJkLT50dW5lcnNbMF0uc3RkOworCQlpZiAoaXR2LT5zdGQgJiBWNEwyX1NURF9QQUwpCisJCQlpdHYtPnN0ZCA9IFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX1BBTF9IOworCQllbHNlIGlmIChpdHYtPnN0ZCAmIFY0TDJfU1REX05UU0MpCisJCQlpdHYtPnN0ZCA9IFY0TDJfU1REX05UU0NfTTsKKwkJZWxzZSBpZiAoaXR2LT5zdGQgJiBWNEwyX1NURF9TRUNBTSkKKwkJCWl0di0+c3RkID0gVjRMMl9TVERfU0VDQU1fTDsKIAkJaXR2LT5vcHRpb25zLnR1bmVyID0gaXR2LT5jYXJkLT50dW5lcnNbMF0udHVuZXI7CiAJfQogCWlmIChpdHYtPm9wdGlvbnMucmFkaW8gPT0gLTEpCkBAIC0xMjYxLDkgKzEyNjgsMTMgQEAKIGludCBpdnR2X2luaXRfb25fZmlyc3Rfb3BlbihzdHJ1Y3QgaXZ0diAqaXR2KQogewogCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSB2ZjsKKwkvKiBOZWVkZWQgdG8gY2FsbCBpb2N0bHMgbGF0ZXIgKi8KKwlzdHJ1Y3QgaXZ0dl9vcGVuX2lkIGZoOwogCWludCBmd19yZXRyeV9jb3VudCA9IDM7CiAJaW50IHZpZGVvX2lucHV0OwogCisJZmguaXR2ID0gaXR2OworCiAJaWYgKHRlc3RfYml0KElWVFZfRl9JX0ZBSUxFRCwgJml0di0+aV9mbGFncykpCiAJCXJldHVybiAtRU5YSU87CiAKQEAgLTEzMTEsMTggKzEzMjIsMTggQEAKIAogCXZpZGVvX2lucHV0ID0gaXR2LT5hY3RpdmVfaW5wdXQ7CiAJaXR2LT5hY3RpdmVfaW5wdXQrKzsJLyogRm9yY2UgdXBkYXRlIG9mIGlucHV0ICovCi0JaXZ0dl92NGwyX2lvY3RscyhpdHYsIE5VTEwsIFZJRElPQ19TX0lOUFVULCAmdmlkZW9faW5wdXQpOworCWl2dHZfc19pbnB1dChOVUxMLCAmZmgsIHZpZGVvX2lucHV0KTsKIAogCS8qIExldCB0aGUgVklESU9DX1NfU1REIGlvY3RsIGRvIGFsbCB0aGUgd29yaywga2VlcHMgdGhlIGNvZGUKIAkgICBpbiBvbmUgcGxhY2UuICovCiAJaXR2LT5zdGQrKzsJCS8qIEZvcmNlIGZ1bGwgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gKi8KIAlpdHYtPnN0ZF9vdXQgPSBpdHYtPnN0ZDsKLQlpdnR2X3Y0bDJfaW9jdGxzKGl0diwgTlVMTCwgVklESU9DX1NfRlJFUVVFTkNZLCAmdmYpOworCWl2dHZfc19mcmVxdWVuY3koTlVMTCwgJmZoLCAmdmYpOwogCiAJaWYgKGl0di0+Y2FyZC0+djRsMl9jYXBhYmlsaXRpZXMgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpIHsKIAkJaXZ0dl9pbml0X21wZWdfZGVjb2RlcihpdHYpOwogCX0KLQlpdnR2X3Y0bDJfaW9jdGxzKGl0diwgTlVMTCwgVklESU9DX1NfU1RELCAmaXR2LT50dW5lcl9zdGQpOworCWl2dHZfc19zdGQoTlVMTCwgJmZoLCAmaXR2LT50dW5lcl9zdGQpOwogCiAJLyogT24gYSBjeDIzNDE2IHRoaXMgc2VlbXMgdG8gYmUgYWJsZSB0byBlbmFibGUgRE1BIHRvIHRoZSBjaGlwPyAqLwogCWlmICghaXR2LT5oYXNfY3gyMzQxNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKaW5kZXggOWQyM2IxZS4uYTA4YmIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKQEAgLTYzNSw3ICs2MzUsNiBAQAogCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAgICAgLyogbG9jayBhY2Nlc3MgdG8gdGhpcyBzdHJ1Y3QgKi8KIAlzdHJ1Y3QgbXV0ZXggc2VyaWFsaXplX2xvY2s7ICAgIC8qIG11dGV4IHVzZWQgdG8gc2VyaWFsaXplIG9wZW4vY2xvc2Uvc3RhcnQvc3RvcC9pb2N0bCBvcGVyYXRpb25zICovCiAKLQogCS8qIFN0cmVhbXMgKi8KIAlpbnQgc3RyZWFtX2J1Zl9zaXplW0lWVFZfTUFYX1NUUkVBTVNdOyAgICAgICAgICAvKiBzdHJlYW0gYnVmZmVyIHNpemUgKi8KIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gc3RyZWFtc1tJVlRWX01BWF9TVFJFQU1TXTsgCS8qIHN0cmVhbSBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKaW5kZXggZGI4MTNlMC4uN2VjNWM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwpAQCAtNTgyLDYgKzU4MiwxOSBAQAogCWl2dHZfcXVldWVfaW5pdCgmcSk7CiAJc2V0X2JpdChJVlRWX0ZfU19BUFBMX0lPLCAmcy0+c19mbGFncyk7CiAKKwkvKiBTdGFydCBkZWNvZGVyIChyZXR1cm5zIDAgaWYgYWxyZWFkeSBzdGFydGVkKSAqLworCW11dGV4X2xvY2soJml0di0+c2VyaWFsaXplX2xvY2spOworCXJjID0gaXZ0dl9zdGFydF9kZWNvZGluZyhpZCwgaXR2LT5zcGVlZCk7CisJbXV0ZXhfdW5sb2NrKCZpdHYtPnNlcmlhbGl6ZV9sb2NrKTsKKwlpZiAocmMpIHsKKwkJSVZUVl9ERUJVR19XQVJOKCJGYWlsZWQgc3RhcnQgZGVjb2RlIHN0cmVhbSAlc1xuIiwgcy0+bmFtZSk7CisKKwkJLyogZmFpbHVyZSwgY2xlYW4gdXAgKi8KKwkJY2xlYXJfYml0KElWVFZfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpOworCQljbGVhcl9iaXQoSVZUVl9GX1NfQVBQTF9JTywgJnMtPnNfZmxhZ3MpOworCQlyZXR1cm4gcmM7CisJfQorCiByZXRyeToKIAkvKiBJZiBwb3NzaWJsZSwganVzdCBETUEgdGhlIGVudGlyZSBmcmFtZSAtIENoZWNrIHRoZSBkYXRhIHRyYW5zZmVyIHNpemUKIAlzaW5jZSB3ZSBtYXkgZ2V0IGhlcmUgYmVmb3JlIHRoZSBzdHJlYW0gaGFzIGJlZW4gZnVsbHkgc2V0LXVwICovCkBAIC02NjQsMTggKzY3Nyw2IEBACiAJCWl2dHZfZW5xdWV1ZShzLCBidWYsICZzLT5xX2Z1bGwpOwogCX0KIAotCS8qIFN0YXJ0IGRlY29kZXIgKHJldHVybnMgMCBpZiBhbHJlYWR5IHN0YXJ0ZWQpICovCi0JbXV0ZXhfbG9jaygmaXR2LT5zZXJpYWxpemVfbG9jayk7Ci0JcmMgPSBpdnR2X3N0YXJ0X2RlY29kaW5nKGlkLCBpdHYtPnNwZWVkKTsKLQltdXRleF91bmxvY2soJml0di0+c2VyaWFsaXplX2xvY2spOwotCWlmIChyYykgewotCQlJVlRWX0RFQlVHX1dBUk4oIkZhaWxlZCBzdGFydCBkZWNvZGUgc3RyZWFtICVzXG4iLCBzLT5uYW1lKTsKLQotCQkvKiBmYWlsdXJlLCBjbGVhbiB1cCAqLwotCQljbGVhcl9iaXQoSVZUVl9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncyk7Ci0JCWNsZWFyX2JpdChJVlRWX0ZfU19BUFBMX0lPLCAmcy0+c19mbGFncyk7Ci0JCXJldHVybiByYzsKLQl9CiAJaWYgKHRlc3RfYml0KElWVFZfRl9TX05FRURTX0RBVEEsICZzLT5zX2ZsYWdzKSkgewogCQlpZiAocy0+cV9mdWxsLmxlbmd0aCA+PSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplKSB7CiAJCQlpbnQgZ290X3NpZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYwppbmRleCBkOGFjMDlmLi5iYzIyOTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCkBAIC0xNDYsMTUgKzE0NiwyMCBAQAogCiB2b2lkIGl2dHZfZ3Bpb19pbml0KHN0cnVjdCBpdnR2ICppdHYpCiB7Ci0JaWYgKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmRpcmVjdGlvbiA9PSAwKQorCXUxNiBwaW4gPSAwOworCisJaWYgKGl0di0+Y2FyZC0+eGNlaXZlX3BpbikKKwkJcGluID0gMSA8PCBpdHYtPmNhcmQtPnhjZWl2ZV9waW47CisKKwlpZiAoKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmRpcmVjdGlvbiB8IHBpbikgPT0gMCkKIAkJcmV0dXJuOwogCiAJSVZUVl9ERUJVR19JTkZPKCJHUElPIGluaXRpYWwgZGlyOiAlMDh4IG91dDogJTA4eFxuIiwKIAkJICAgcmVhZF9yZWcoSVZUVl9SRUdfR1BJT19ESVIpLCByZWFkX3JlZyhJVlRWX1JFR19HUElPX09VVCkpOwogCiAJLyogaW5pdCBvdXRwdXQgZGF0YSB0aGVuIGRpcmVjdGlvbiAqLwotCXdyaXRlX3JlZyhpdHYtPmNhcmQtPmdwaW9faW5pdC5pbml0aWFsX3ZhbHVlLCBJVlRWX1JFR19HUElPX09VVCk7Ci0Jd3JpdGVfcmVnKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmRpcmVjdGlvbiwgSVZUVl9SRUdfR1BJT19ESVIpOworCXdyaXRlX3JlZyhpdHYtPmNhcmQtPmdwaW9faW5pdC5pbml0aWFsX3ZhbHVlIHwgcGluLCBJVlRWX1JFR19HUElPX09VVCk7CisJd3JpdGVfcmVnKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmRpcmVjdGlvbiB8IHBpbiwgSVZUVl9SRUdfR1BJT19ESVIpOwogfQogCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIGdwaW9fY3RybF9tdXRlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwppbmRleCAzMjEyOWYzLi5hZjE1NDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwpAQCAtNzUsMTAgKzc1LDYgQEAKICNkZWZpbmUgSVZUVl9SRUdfSTJDX0dFVFNDTF9PRkZTRVQgMHg3MDA4CiAjZGVmaW5lIElWVFZfUkVHX0kyQ19HRVRTREFfT0ZGU0VUIDB4NzAwYwogCi0jaWZuZGVmIEkyQ19BREFQX0NMQVNTX1RWX0FOQUxPRwotI2RlZmluZSBJMkNfQURBUF9DTEFTU19UVl9BTkFMT0cgSTJDX0NMQVNTX1RWX0FOQUxPRwotI2VuZGlmIC8qIEkyQ19BREFQX0NMQVNTX1RWX0FOQUxPRyAqLwotCiAjZGVmaW5lIElWVFZfQ1M1M0wzMkFfSTJDX0FERFIJCTB4MTEKICNkZWZpbmUgSVZUVl9NNTI3OTBfSTJDX0FERFIJCTB4NDgKICNkZWZpbmUgSVZUVl9DWDI1ODQwX0kyQ19BRERSIAkJMHg0NApAQCAtMTM5LDcgKzEzNSw3IEBACiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGh3X2RldmljZW5hbWVzW10gPSB7CiAJImN4MjU4NDAiLAogCSJzYWE3MTE1IiwKLQkic2FhNzEyNyIsCisJInNhYTcxMjdfYXV0byIsCS8qIHNhYTcxMjcgb3Igc2FhNzEyOSAqLwogCSJtc3AzNDAwIiwKIAkidHVuZXIiLAogCSJ3bTg3NzUiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKaW5kZXggMjZjYzBmNi4uNTJlMDBhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCkBAIC0xMjgsMzcgKzEyOCw2IEBACiAJcmV0dXJuIHNldDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0JdjRsMl9zdGRfaWQgIHN0ZDsKLQljaGFyICAgICAgICAqbmFtZTsKLX0gZW51bV9zdGRzW10gPSB7Ci0JeyBWNEwyX1NURF9QQUxfQkcgfCBWNEwyX1NURF9QQUxfSCwgIlBBTC1CR0giIH0sCi0JeyBWNEwyX1NURF9QQUxfREssICAgICJQQUwtREsiICAgIH0sCi0JeyBWNEwyX1NURF9QQUxfSSwgICAgICJQQUwtSSIgICAgIH0sCi0JeyBWNEwyX1NURF9QQUxfTSwgICAgICJQQUwtTSIgICAgIH0sCi0JeyBWNEwyX1NURF9QQUxfTiwgICAgICJQQUwtTiIgICAgIH0sCi0JeyBWNEwyX1NURF9QQUxfTmMsICAgICJQQUwtTmMiICAgIH0sCi0JeyBWNEwyX1NURF9TRUNBTV9CIHwgVjRMMl9TVERfU0VDQU1fRyB8IFY0TDJfU1REX1NFQ0FNX0gsICJTRUNBTS1CR0giIH0sCi0JeyBWNEwyX1NURF9TRUNBTV9ESywgICJTRUNBTS1ESyIgIH0sCi0JeyBWNEwyX1NURF9TRUNBTV9MLCAgICJTRUNBTS1MIiAgIH0sCi0JeyBWNEwyX1NURF9TRUNBTV9MQywgICJTRUNBTS1MJyIgIH0sCi0JeyBWNEwyX1NURF9OVFNDX00sICAgICJOVFNDLU0iICAgIH0sCi0JeyBWNEwyX1NURF9OVFNDX01fSlAsICJOVFNDLUoiICAgIH0sCi0JeyBWNEwyX1NURF9OVFNDX01fS1IsICJOVFNDLUsiICAgIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3RhbmRhcmQgaXZ0dl9zdGRfNjBoeiA9Ci17Ci0JLmZyYW1lcGVyaW9kID0gey5udW1lcmF0b3IgPSAxMDAxLCAuZGVub21pbmF0b3IgPSAzMDAwMH0sCi0JLmZyYW1lbGluZXMgPSA1MjUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3RhbmRhcmQgaXZ0dl9zdGRfNTBoeiA9Ci17Ci0JLmZyYW1lcGVyaW9kID0gey5udW1lcmF0b3IgPSAxLCAuZGVub21pbmF0b3IgPSAyNX0sCi0JLmZyYW1lbGluZXMgPSA2MjUsCi19OwotCiB2b2lkIGl2dHZfc2V0X29zZF9hbHBoYShzdHJ1Y3QgaXZ0diAqaXR2KQogewogCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9HTE9CQUxfQUxQSEEsIDMsCkBAIC0zNDUsNiArMzE0LDM4MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGl2dHZfZ19mbXRfc2xpY2VkX3ZiaV9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnZiaWZtdCA9ICZmbXQtPmZtdC5zbGljZWQ7CisKKwl2YmlmbXQtPnJlc2VydmVkWzBdID0gMDsKKwl2YmlmbXQtPnJlc2VydmVkWzFdID0gMDsKKwlpZiAoIShpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl2YmlmbXQtPmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKSAqIDM2OworCWlmIChpdHYtPmlzXzYwaHopIHsKKwkJdmJpZm10LT5zZXJ2aWNlX2xpbmVzWzBdWzIxXSA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OworCQl2YmlmbXQtPnNlcnZpY2VfbGluZXNbMV1bMjFdID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJfSBlbHNlIHsKKwkJdmJpZm10LT5zZXJ2aWNlX2xpbmVzWzBdWzIzXSA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCXZiaWZtdC0+c2VydmljZV9saW5lc1swXVsxNl0gPSBWNEwyX1NMSUNFRF9WUFM7CisJfQorCXZiaWZtdC0+c2VydmljZV9zZXQgPSBpdnR2X2dldF9zZXJ2aWNlX3NldCh2YmlmbXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl2dHZfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7CisJc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10ID0gJmZtdC0+Zm10LnBpeDsKKworCXBpeGZtdC0+d2lkdGggPSBpdHYtPnBhcmFtcy53aWR0aDsKKwlwaXhmbXQtPmhlaWdodCA9IGl0di0+cGFyYW1zLmhlaWdodDsKKwlwaXhmbXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJcGl4Zm10LT5wcml2ID0gMDsKKwlpZiAoaWQtPnR5cGUgPT0gSVZUVl9FTkNfU1RSRUFNX1RZUEVfWVVWKSB7CisJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSE0xMjsKKwkJLyogWVVWIHNpemUgaXMgKFk9KGgqdykgKyBVVj0oaCoody8yKSkpICovCisJCXBpeGZtdC0+c2l6ZWltYWdlID0KKwkJCXBpeGZtdC0+aGVpZ2h0ICogcGl4Zm10LT53aWR0aCArCisJCQlwaXhmbXQtPmhlaWdodCAqIChwaXhmbXQtPndpZHRoIC8gMik7CisJCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gNzIwOworCX0gZWxzZSB7CisJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwkJcGl4Zm10LT5zaXplaW1hZ2UgPSAxMjggKiAxMDI0OworCQlwaXhmbXQtPmJ5dGVzcGVybGluZSA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl2dHZfZ19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKKwlzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQudmJpOworCisJdmJpZm10LT5zYW1wbGluZ19yYXRlID0gMjcwMDAwMDA7CisJdmJpZm10LT5vZmZzZXQgPSAyNDg7CisJdmJpZm10LT5zYW1wbGVzX3Blcl9saW5lID0gaXR2LT52YmkucmF3X2RlY29kZXJfbGluZV9zaXplIC0gNDsKKwl2YmlmbXQtPnNhbXBsZV9mb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKKwl2YmlmbXQtPnN0YXJ0WzBdID0gaXR2LT52Ymkuc3RhcnRbMF07CisJdmJpZm10LT5zdGFydFsxXSA9IGl0di0+dmJpLnN0YXJ0WzFdOworCXZiaWZtdC0+Y291bnRbMF0gPSB2YmlmbXQtPmNvdW50WzFdID0gaXR2LT52YmkuY291bnQ7CisJdmJpZm10LT5mbGFncyA9IDA7CisJdmJpZm10LT5yZXNlcnZlZFswXSA9IDA7CisJdmJpZm10LT5yZXNlcnZlZFsxXSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9nX2ZtdF9zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQuc2xpY2VkOworCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7CisJc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7CisKKwl2YmlmbXQtPnJlc2VydmVkWzBdID0gMDsKKwl2YmlmbXQtPnJlc2VydmVkWzFdID0gMDsKKwl2YmlmbXQtPmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKSAqIDM2OworCisJaWYgKGlkLT50eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1ZCSSkgeworCQl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gaXR2LT5pc181MGh6ID8gVjRMMl9TTElDRURfVkJJXzYyNSA6CisJCQlWNEwyX1NMSUNFRF9WQklfNTI1OworCQlpdnR2X2V4cGFuZF9zZXJ2aWNlX3NldCh2YmlmbXQsIGl0di0+aXNfNTBoeik7CisJCXJldHVybiAwOworCX0KKworCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfR19GTVQsIGZtdCk7CisJdmJpZm10LT5zZXJ2aWNlX3NldCA9IGl2dHZfZ2V0X3NlcnZpY2Vfc2V0KHZiaWZtdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9nX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQgPSAmZm10LT5mbXQucGl4OworCisJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpCisJCXJldHVybiAtRUlOVkFMOworCXBpeGZtdC0+d2lkdGggPSBpdHYtPm1haW5fcmVjdC53aWR0aDsKKwlwaXhmbXQtPmhlaWdodCA9IGl0di0+bWFpbl9yZWN0LmhlaWdodDsKKwlwaXhmbXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJcGl4Zm10LT5wcml2ID0gMDsKKwlpZiAoaWQtPnR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWKSB7CisJCXN3aXRjaCAoaXR2LT55dXZfaW5mby5sYWNlX21vZGUgJiBJVlRWX1lVVl9NT0RFX01BU0spIHsKKwkJY2FzZSBJVlRWX1lVVl9NT0RFX0lOVEVSTEFDRUQ6CisJCQlwaXhmbXQtPmZpZWxkID0gKGl0di0+eXV2X2luZm8ubGFjZV9tb2RlICYgSVZUVl9ZVVZfU1lOQ19NQVNLKSA/CisJCQkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUIDogVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCOworCQkJYnJlYWs7CisJCWNhc2UgSVZUVl9ZVVZfTU9ERV9QUk9HUkVTU0lWRToKKwkJCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0FOWTsKKwkJCWJyZWFrOworCQl9CisJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSE0xMjsKKwkJcGl4Zm10LT5ieXRlc3BlcmxpbmUgPSA3MjA7CisJCXBpeGZtdC0+d2lkdGggPSBpdHYtPnl1dl9pbmZvLnY0bDJfc3JjX3c7CisJCXBpeGZtdC0+aGVpZ2h0ID0gaXR2LT55dXZfaW5mby52NGwyX3NyY19oOworCQkvKiBZVVYgc2l6ZSBpcyAoWT0oaCp3KSArIFVWPShoKih3LzIpKSkgKi8KKwkJcGl4Zm10LT5zaXplaW1hZ2UgPQorCQkJMTA4MCAqICgocGl4Zm10LT5oZWlnaHQgKyAzMSkgJiB+MzEpOworCX0gZWxzZSB7CisJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwkJcGl4Zm10LT5zaXplaW1hZ2UgPSAxMjggKiAxMDI0OworCQlwaXhmbXQtPmJ5dGVzcGVybGluZSA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl2dHZfZ19mbXRfdmlkX291dF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCXN0cnVjdCB2NGwyX3dpbmRvdyAqd2luZm10ID0gJmZtdC0+Zm10LndpbjsKKworCWlmICghKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl3aW5mbXQtPmNocm9tYWtleSA9IGl0di0+b3NkX2Nocm9tYV9rZXk7CisJd2luZm10LT5nbG9iYWxfYWxwaGEgPSBpdHYtPm9zZF9nbG9iYWxfYWxwaGE7CisJd2luZm10LT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwl3aW5mbXQtPmNsaXBzID0gTlVMTDsKKwl3aW5mbXQtPmNsaXBjb3VudCA9IDA7CisJd2luZm10LT5iaXRtYXAgPSBOVUxMOworCXdpbmZtdC0+dy50b3AgPSB3aW5mbXQtPncubGVmdCA9IDA7CisJd2luZm10LT53LndpZHRoID0gaXR2LT5vc2RfcmVjdC53aWR0aDsKKwl3aW5mbXQtPncuaGVpZ2h0ID0gaXR2LT5vc2RfcmVjdC5oZWlnaHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl90cnlfZm10X3NsaWNlZF92Ymlfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJcmV0dXJuIGl2dHZfZ19mbXRfc2xpY2VkX3ZiaV9vdXQoZmlsZSwgZmgsIGZtdCk7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl90cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OworCWludCB3ID0gZm10LT5mbXQucGl4LndpZHRoOworCWludCBoID0gZm10LT5mbXQucGl4LmhlaWdodDsKKworCXcgPSBtaW4odywgNzIwKTsKKwl3ID0gbWF4KHcsIDEpOworCWggPSBtaW4oaCwgaXR2LT5pc181MGh6ID8gNTc2IDogNDgwKTsKKwloID0gbWF4KGgsIDIpOworCWl2dHZfZ19mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKKwlmbXQtPmZtdC5waXgud2lkdGggPSB3OworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl2dHZfdHJ5X2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJcmV0dXJuIGl2dHZfZ19mbXRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKK30KKworc3RhdGljIGludCBpdnR2X3RyeV9mbXRfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKKwlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OworCisJaWYgKGlkLT50eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1ZCSSkKKwkJcmV0dXJuIGl2dHZfZ19mbXRfc2xpY2VkX3ZiaV9jYXAoZmlsZSwgZmgsIGZtdCk7CisKKwkvKiBzZXQgc2xpY2VkIFZCSSBjYXB0dXJlIGZvcm1hdCAqLworCXZiaWZtdC0+aW9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpICogMzY7CisJdmJpZm10LT5yZXNlcnZlZFswXSA9IDA7CisJdmJpZm10LT5yZXNlcnZlZFsxXSA9IDA7CisKKwlpZiAodmJpZm10LT5zZXJ2aWNlX3NldCkKKwkJaXZ0dl9leHBhbmRfc2VydmljZV9zZXQodmJpZm10LCBpdHYtPmlzXzUwaHopOworCWNoZWNrX3NlcnZpY2Vfc2V0KHZiaWZtdCwgaXR2LT5pc181MGh6KTsKKwl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gaXZ0dl9nZXRfc2VydmljZV9zZXQodmJpZm10KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpdnR2X3RyeV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7CisJczMyIHcsIGg7CisJaW50IGZpZWxkOworCWludCByZXQ7CisKKwl3ID0gZm10LT5mbXQucGl4LndpZHRoOworCWggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCWZpZWxkID0gZm10LT5mbXQucGl4LmZpZWxkOworCXJldCA9IGl2dHZfZ19mbXRfdmlkX291dChmaWxlLCBmaCwgZm10KTsKKwlmbXQtPmZtdC5waXgud2lkdGggPSB3OworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoOworCWlmICghcmV0ICYmIGlkLT50eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1lVVikgeworCQlmbXQtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKKwkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8IDIpCisJCQlmbXQtPmZtdC5waXgud2lkdGggPSAyOworCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gNzIwKQorCQkJZm10LT5mbXQucGl4LndpZHRoID0gNzIwOworCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8IDIpCisJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gMjsKKwkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiA1NzYpCisJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gNTc2OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl2dHZfdHJ5X2ZtdF92aWRfb3V0X292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CisJdTMyIGNocm9tYWtleSA9IGZtdC0+Zm10Lndpbi5jaHJvbWFrZXk7CisJdTggZ2xvYmFsX2FscGhhID0gZm10LT5mbXQud2luLmdsb2JhbF9hbHBoYTsKKworCWlmICghKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpdnR2X2dfZm10X3ZpZF9vdXRfb3ZlcmxheShmaWxlLCBmaCwgZm10KTsKKwlmbXQtPmZtdC53aW4uY2hyb21ha2V5ID0gY2hyb21ha2V5OworCWZtdC0+Zm10Lndpbi5nbG9iYWxfYWxwaGEgPSBnbG9iYWxfYWxwaGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9zX2ZtdF9zbGljZWRfdmJpX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXJldHVybiBpdnR2X2dfZm10X3NsaWNlZF92Ymlfb3V0KGZpbGUsIGZoLCBmbXQpOworfQorCitzdGF0aWMgaW50IGl2dHZfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7CisJc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7CisJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnAgPSAmaXR2LT5wYXJhbXM7CisJaW50IHcgPSBmbXQtPmZtdC5waXgud2lkdGg7CisJaW50IGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCWludCByZXQgPSBpdnR2X3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocC0+d2lkdGggPT0gdyAmJiBwLT5oZWlnaHQgPT0gaCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlwLT53aWR0aCA9IHc7CisJcC0+aGVpZ2h0ID0gaDsKKwlpZiAocC0+dmlkZW9fZW5jb2RpbmcgPT0gVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMSkKKwkJZm10LT5mbXQucGl4LndpZHRoIC89IDI7CisJaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19TX0ZNVCwgZm10KTsKKwlyZXR1cm4gaXZ0dl9nX2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOworfQorCitzdGF0aWMgaW50IGl2dHZfc19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKKworCWl0di0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPSAwOworCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfU19GTVQsICZpdHYtPnZiaS5pbik7CisJcmV0dXJuIGl2dHZfZ19mbXRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKK30KKworc3RhdGljIGludCBpdnR2X3NfZm10X3NsaWNlZF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnZiaWZtdCA9ICZmbXQtPmZtdC5zbGljZWQ7CisJc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKKwlpbnQgcmV0ID0gaXZ0dl90cnlfZm10X3NsaWNlZF92YmlfY2FwKGZpbGUsIGZoLCBmbXQpOworCisJaWYgKHJldCB8fCBpZC0+dHlwZSA9PSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9WQkkpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY2hlY2tfc2VydmljZV9zZXQodmJpZm10LCBpdHYtPmlzXzUwaHopID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpID4gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX1NfRk1ULCBmbXQpOworCW1lbWNweShpdHYtPnZiaS5zbGljZWRfaW4sIHZiaWZtdCwgc2l6ZW9mKCppdHYtPnZiaS5zbGljZWRfaW4pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpdnR2X3NfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OworCXN0cnVjdCB5dXZfcGxheWJhY2tfaW5mbyAqeWkgPSAmaXR2LT55dXZfaW5mbzsKKwlpbnQgcmV0ID0gaXZ0dl90cnlfZm10X3ZpZF9vdXQoZmlsZSwgZmgsIGZtdCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGlkLT50eXBlICE9IElWVFZfREVDX1NUUkVBTV9UWVBFX1lVVikKKwkJcmV0dXJuIDA7CisKKwkvKiBSZXR1cm4gbm93IGlmIHdlIGFscmVhZHkgaGF2ZSBzb21lIGZyYW1lIGRhdGEgKi8KKwlpZiAoeWktPnN0cmVhbV9zaXplKQorCQlyZXR1cm4gLUVCVVNZOworCisJeWktPnY0bDJfc3JjX3cgPSBmbXQtPmZtdC5waXgud2lkdGg7CisJeWktPnY0bDJfc3JjX2ggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCisJc3dpdGNoIChmbXQtPmZtdC5waXguZmllbGQpIHsKKwljYXNlIFY0TDJfRklFTERfTk9ORToKKwkJeWktPmxhY2VfbW9kZSA9IElWVFZfWVVWX01PREVfUFJPR1JFU1NJVkU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9BTlk6CisJCXlpLT5sYWNlX21vZGUgPSBJVlRWX1lVVl9NT0RFX0FVVE87CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUOgorCQl5aS0+bGFjZV9tb2RlID0KKwkJCUlWVFZfWVVWX01PREVfSU5URVJMQUNFRHxJVlRWX1lVVl9TWU5DX09ERDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEI6CisJZGVmYXVsdDoKKwkJeWktPmxhY2VfbW9kZSA9IElWVFZfWVVWX01PREVfSU5URVJMQUNFRDsKKwkJYnJlYWs7CisJfQorCXlpLT5sYWNlX3N5bmNfZmllbGQgPSAoeWktPmxhY2VfbW9kZSAmIElWVFZfWVVWX1NZTkNfTUFTSykgPT0gSVZUVl9ZVVZfU1lOQ19FVkVOID8gMCA6IDE7CisKKwlpZiAodGVzdF9iaXQoSVZUVl9GX0lfREVDX1lVViwgJml0di0+aV9mbGFncykpCisJCWl0di0+ZG1hX2RhdGFfcmVxX3NpemUgPQorCQkJMTA4MCAqICgoeWktPnY0bDJfc3JjX2ggKyAzMSkgJiB+MzEpOworCisJLyogRm9yY2UgdXBkYXRlIG9mIHl1diByZWdpc3RlcnMgKi8KKwl5aS0+eXV2X2ZvcmNlZF91cGRhdGUgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl2dHZfc19mbXRfdmlkX291dF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCWludCByZXQgPSBpdnR2X3RyeV9mbXRfdmlkX291dF9vdmVybGF5KGZpbGUsIGZoLCBmbXQpOworCisJaWYgKHJldCA9PSAwKSB7CisJCWl0di0+b3NkX2Nocm9tYV9rZXkgPSBmbXQtPmZtdC53aW4uY2hyb21ha2V5OworCQlpdHYtPm9zZF9nbG9iYWxfYWxwaGEgPSBmbXQtPmZtdC53aW4uZ2xvYmFsX2FscGhhOworCQlpdnR2X3NldF9vc2RfYWxwaGEoaXR2KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpdnR2X2dfY2hpcF9pZGVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCisJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CisJY2hpcC0+cmV2aXNpb24gPSAwOworCWlmIChjaGlwLT5tYXRjaF90eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9IT1NUKSB7CisJCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdChjaGlwLT5tYXRjaF90eXBlLCBjaGlwLT5tYXRjaF9jaGlwKSkKKwkJCWNoaXAtPmlkZW50ID0gaXR2LT5oYXNfY3gyMzQxNSA/IFY0TDJfSURFTlRfQ1gyMzQxNSA6IFY0TDJfSURFTlRfQ1gyMzQxNjsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjaGlwLT5tYXRjaF90eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSKQorCQlyZXR1cm4gaXZ0dl9pMmNfaWQoaXR2LCBjaGlwLT5tYXRjaF9jaGlwLCBWSURJT0NfR19DSElQX0lERU5ULCBjaGlwKTsKKwlpZiAoY2hpcC0+bWF0Y2hfdHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIpCisJCXJldHVybiBpdnR2X2NhbGxfaTJjX2NsaWVudChpdHYsIGNoaXAtPm1hdGNoX2NoaXAsIFZJRElPQ19HX0NISVBfSURFTlQsIGNoaXApOworCXJldHVybiAtRUlOVkFMOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogc3RhdGljIGludCBpdnR2X2l0dmMoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWdzID0gYXJnOwpAQCAtMzY0LDEwNTQgKzcwNyw4MjYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaXZ0dl9jYXJkc19sb2NrLCBmbGFncyk7Ci0JaWYgKGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIpIHsKKwlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKIAkJcmVncy0+dmFsID0gcmVhZGwocmVncy0+cmVnICsgcmVnX3N0YXJ0KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJd3JpdGVsKHJlZ3MtPnZhbCwgcmVncy0+cmVnICsgcmVnX3N0YXJ0KTsKLQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXZ0dl9jYXJkc19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXZ0dl9nZXRfZm10KHN0cnVjdCBpdnR2ICppdHYsIGludCBzdHJlYW10eXBlLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3N0YXRpYyBpbnQgaXZ0dl9nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKIHsKLQlzd2l0Y2ggKGZtdC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0JCWlmICghKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWZtdC0+Zm10LnBpeC53aWR0aCA9IGl0di0+bWFpbl9yZWN0LndpZHRoOwotCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gaXR2LT5tYWluX3JlY3QuaGVpZ2h0OwotCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07Ci0JCWZtdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJaWYgKHN0cmVhbXR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWKSB7Ci0JCQlzd2l0Y2ggKGl0di0+eXV2X2luZm8ubGFjZV9tb2RlICYgSVZUVl9ZVVZfTU9ERV9NQVNLKSB7Ci0JCQljYXNlIElWVFZfWVVWX01PREVfSU5URVJMQUNFRDoKLQkJCQlmbXQtPmZtdC5waXguZmllbGQgPSAoaXR2LT55dXZfaW5mby5sYWNlX21vZGUgJiBJVlRWX1lVVl9TWU5DX01BU0spID8KLQkJCQkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUIDogVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJVlRWX1lVVl9NT0RFX1BST0dSRVNTSVZFOgotCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZm10LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9BTlk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSE0xMjsKLQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSA3MjA7Ci0JCQlmbXQtPmZtdC5waXgud2lkdGggPSBpdHYtPnl1dl9pbmZvLnY0bDJfc3JjX3c7Ci0JCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gaXR2LT55dXZfaW5mby52NGwyX3NyY19oOwotCQkJLyogWVVWIHNpemUgaXMgKFk9KGgqdykgKyBVVj0oaCoody8yKSkpICovCi0JCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkxMDgwICogKChmbXQtPmZtdC5waXguaGVpZ2h0ICsgMzEpICYgfjMxKTsKLQkJfSBlbHNlIGlmIChzdHJlYW10eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX1lVVikgewotCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0hNMTI7Ci0JCQkvKiBZVVYgc2l6ZSBpcyAoWT0oaCp3KSArIFVWPShoKih3LzIpKSkgKi8KLQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgKiBmbXQtPmZtdC5waXgud2lkdGggKwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgKiAoZm10LT5mbXQucGl4LndpZHRoIC8gMik7Ci0JCX0gZWxzZSB7Ci0JCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKLQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSAxMjggKiAxMDI0OwotCQl9Ci0JCWJyZWFrOworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKIAotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlmbXQtPmZtdC5waXgud2lkdGggPSBpdHYtPnBhcmFtcy53aWR0aDsKLQkJZm10LT5mbXQucGl4LmhlaWdodCA9IGl0di0+cGFyYW1zLmhlaWdodDsKLQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwotCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCWlmIChzdHJlYW10eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX1lVViB8fAotCQkJCXN0cmVhbXR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWKSB7Ci0JCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSE0xMjsKLQkJCS8qIFlVViBzaXplIGlzIChZPShoKncpICsgVVY9KGgqKHcvMikpKSAqLwotCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCAqIGZtdC0+Zm10LnBpeC53aWR0aCArCi0JCQkJZm10LT5mbXQucGl4LmhlaWdodCAqIChmbXQtPmZtdC5waXgud2lkdGggLyAyKTsKLQkJfSBlbHNlIHsKLQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOwotCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IDEyOCAqIDEwMjQ7Ci0JCX0KLQkJYnJlYWs7CisJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KHJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKKwkJcmV0dXJuIGl2dHZfaXR2YyhpdHYsIFZJRElPQ19EQkdfR19SRUdJU1RFUiwgcmVnKTsKKwlpZiAocmVnLT5tYXRjaF90eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSKQorCQlyZXR1cm4gaXZ0dl9pMmNfaWQoaXR2LCByZWctPm1hdGNoX2NoaXAsIFZJRElPQ19EQkdfR19SRUdJU1RFUiwgcmVnKTsKKwlyZXR1cm4gaXZ0dl9jYWxsX2kyY19jbGllbnQoaXR2LCByZWctPm1hdGNoX2NoaXAsIFZJRElPQ19EQkdfR19SRUdJU1RFUiwgcmVnKTsKK30KIAotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWToKLQkJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZm10LT5mbXQud2luLmNocm9tYWtleSA9IGl0di0+b3NkX2Nocm9tYV9rZXk7Ci0JCWZtdC0+Zm10Lndpbi5nbG9iYWxfYWxwaGEgPSBpdHYtPm9zZF9nbG9iYWxfYWxwaGE7Ci0JCWJyZWFrOworc3RhdGljIGludCBpdnR2X3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKIAotCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQkJZm10LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSAyNzAwMDAwMDsKLQkJZm10LT5mbXQudmJpLm9mZnNldCA9IDI0ODsKLQkJZm10LT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSBpdHYtPnZiaS5yYXdfZGVjb2Rlcl9saW5lX3NpemUgLSA0OwotCQlmbXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOwotCQlmbXQtPmZtdC52Ymkuc3RhcnRbMF0gPSBpdHYtPnZiaS5zdGFydFswXTsKLQkJZm10LT5mbXQudmJpLnN0YXJ0WzFdID0gaXR2LT52Ymkuc3RhcnRbMV07Ci0JCWZtdC0+Zm10LnZiaS5jb3VudFswXSA9IGZtdC0+Zm10LnZiaS5jb3VudFsxXSA9IGl0di0+dmJpLmNvdW50OwotCQlicmVhazsKKwlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QocmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQlyZXR1cm4gaXZ0dl9pdHZjKGl0diwgVklESU9DX0RCR19TX1JFR0lTVEVSLCByZWcpOworCWlmIChyZWctPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIpCisJCXJldHVybiBpdnR2X2kyY19pZChpdHYsIHJlZy0+bWF0Y2hfY2hpcCwgVklESU9DX0RCR19TX1JFR0lTVEVSLCByZWcpOworCXJldHVybiBpdnR2X2NhbGxfaTJjX2NsaWVudChpdHYsIHJlZy0+bWF0Y2hfY2hpcCwgVklESU9DX0RCR19TX1JFR0lTVEVSLCByZWcpOworfQorI2VuZGlmCiAKLQljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKK3N0YXRpYyBpbnQgaXZ0dl9nX3ByaW9yaXR5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgZW51bSB2NGwyX3ByaW9yaXR5ICpwKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKIAotCQlpZiAoIShpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXZiaWZtdC0+aW9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpICogMzY7Ci0JCW1lbXNldCh2YmlmbXQtPnJlc2VydmVkLCAwLCBzaXplb2YodmJpZm10LT5yZXNlcnZlZCkpOwotCQltZW1zZXQodmJpZm10LT5zZXJ2aWNlX2xpbmVzLCAwLCBzaXplb2YodmJpZm10LT5zZXJ2aWNlX2xpbmVzKSk7Ci0JCWlmIChpdHYtPmlzXzYwaHopIHsKLQkJCXZiaWZtdC0+c2VydmljZV9saW5lc1swXVsyMV0gPSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKLQkJCXZiaWZtdC0+c2VydmljZV9saW5lc1sxXVsyMV0gPSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKLQkJfSBlbHNlIHsKLQkJCXZiaWZtdC0+c2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJdmJpZm10LT5zZXJ2aWNlX2xpbmVzWzBdWzE2XSA9IFY0TDJfU0xJQ0VEX1ZQUzsKLQkJfQotCQl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gaXZ0dl9nZXRfc2VydmljZV9zZXQodmJpZm10KTsKLQkJYnJlYWs7Ci0JfQorCSpwID0gdjRsMl9wcmlvX21heCgmaXR2LT5wcmlvKTsKIAotCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKLQotCQl2YmlmbXQtPmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKSAqIDM2OwotCQltZW1zZXQodmJpZm10LT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHZiaWZtdC0+cmVzZXJ2ZWQpKTsKLQkJbWVtc2V0KHZiaWZtdC0+c2VydmljZV9saW5lcywgMCwgc2l6ZW9mKHZiaWZtdC0+c2VydmljZV9saW5lcykpOwotCi0JCWlmIChzdHJlYW10eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1ZCSSkgewotCQkJdmJpZm10LT5zZXJ2aWNlX3NldCA9IGl0di0+aXNfNTBoeiA/IFY0TDJfU0xJQ0VEX1ZCSV82MjUgOgotCQkJCQkJIFY0TDJfU0xJQ0VEX1ZCSV81MjU7Ci0JCQlpdnR2X2V4cGFuZF9zZXJ2aWNlX3NldCh2YmlmbXQsIGl0di0+aXNfNTBoeik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfR19GTVQsIGZtdCk7Ci0JCXZiaWZtdC0+c2VydmljZV9zZXQgPSBpdnR2X2dldF9zZXJ2aWNlX3NldCh2YmlmbXQpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVQ6Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl2dHZfdHJ5X29yX3NldF9mbXQoc3RydWN0IGl2dHYgKml0diwgaW50IHN0cmVhbXR5cGUsCi0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10LCBpbnQgc2V0X2ZtdCkKK3N0YXRpYyBpbnQgaXZ0dl9zX3ByaW9yaXR5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgZW51bSB2NGwyX3ByaW9yaXR5IHByaW8pCiB7CisJc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKKworCXJldHVybiB2NGwyX3ByaW9fY2hhbmdlKCZpdHYtPnByaW8sICZpZC0+cHJpbywgcHJpbyk7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnZjYXApCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCisJc3RybGNweSh2Y2FwLT5kcml2ZXIsIElWVFZfRFJJVkVSX05BTUUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKKwlzdHJsY3B5KHZjYXAtPmNhcmQsIGl0di0+Y2FyZF9uYW1lLCBzaXplb2YodmNhcC0+Y2FyZCkpOworCXN0cmxjcHkodmNhcC0+YnVzX2luZm8sIHBjaV9uYW1lKGl0di0+ZGV2KSwgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSk7CisJdmNhcC0+dmVyc2lvbiA9IElWVFZfRFJJVkVSX1ZFUlNJT047IAkgICAgLyogdmVyc2lvbiAqLworCXZjYXAtPmNhcGFiaWxpdGllcyA9IGl0di0+djRsMl9jYXA7IAkgICAgLyogY2FwYWJpbGl0aWVzICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9lbnVtYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqdmluKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKKworCXJldHVybiBpdnR2X2dldF9hdWRpb19pbnB1dChpdHYsIHZpbi0+aW5kZXgsIHZpbik7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKnZpbikKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CisKKwl2aW4tPmluZGV4ID0gaXR2LT5hdWRpb19pbnB1dDsKKwlyZXR1cm4gaXZ0dl9nZXRfYXVkaW9faW5wdXQoaXR2LCB2aW4tPmluZGV4LCB2aW4pOworfQorCitzdGF0aWMgaW50IGl2dHZfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICp2b3V0KQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKKworCWlmICh2b3V0LT5pbmRleCA+PSBpdHYtPm5vZl9hdWRpb19pbnB1dHMpCisJCXJldHVybiAtRUlOVkFMOworCisJaXR2LT5hdWRpb19pbnB1dCA9IHZvdXQtPmluZGV4OworCWl2dHZfYXVkaW9fc2V0X2lvKGl0dik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpdnR2X2VudW1hdWRvdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpb291dCAqdmluKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKKworCS8qIHNldCBpdCB0byBkZWZhdWx0cyBmcm9tIG91ciB0YWJsZSAqLworCXJldHVybiBpdnR2X2dldF9hdWRpb19vdXRwdXQoaXR2LCB2aW4tPmluZGV4LCB2aW4pOworfQorCitzdGF0aWMgaW50IGl2dHZfZ19hdWRvdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpb291dCAqdmluKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKKworCXZpbi0+aW5kZXggPSAwOworCXJldHVybiBpdnR2X2dldF9hdWRpb19vdXRwdXQoaXR2LCB2aW4tPmluZGV4LCB2aW4pOworfQorCitzdGF0aWMgaW50IGl2dHZfc19hdWRvdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpb291dCAqdm91dCkKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CisKKwlyZXR1cm4gaXZ0dl9nZXRfYXVkaW9fb3V0cHV0KGl0diwgdm91dC0+aW5kZXgsIHZvdXQpOworfQorCitzdGF0aWMgaW50IGl2dHZfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2lucHV0ICp2aW4pCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCisJLyogc2V0IGl0IHRvIGRlZmF1bHRzIGZyb20gb3VyIHRhYmxlICovCisJcmV0dXJuIGl2dHZfZ2V0X2lucHV0KGl0diwgdmluLT5pbmRleCwgdmluKTsKK30KKworc3RhdGljIGludCBpdnR2X2VudW1fb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfb3V0cHV0ICp2b3V0KQoreworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKKworCXJldHVybiBpdnR2X2dldF9vdXRwdXQoaXR2LCB2b3V0LT5pbmRleCwgdm91dCk7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcGNhcCkKK3sKKwlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OwogCXN0cnVjdCB5dXZfcGxheWJhY2tfaW5mbyAqeWkgPSAmaXR2LT55dXZfaW5mbzsKLQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKLQl1MTYgc2V0OworCWludCBzdHJlYW10eXBlOwogCi0JaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkgewotCQlzdHJ1Y3QgdjRsMl9yZWN0IHI7Ci0JCWludCBmaWVsZDsKKwlzdHJlYW10eXBlID0gaWQtPnR5cGU7CiAKLQkJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZmllbGQgPSBmbXQtPmZtdC5waXguZmllbGQ7Ci0JCXIudG9wID0gMDsKLQkJci5sZWZ0ID0gMDsKLQkJci53aWR0aCA9IGZtdC0+Zm10LnBpeC53aWR0aDsKLQkJci5oZWlnaHQgPSBmbXQtPmZtdC5waXguaGVpZ2h0OwotCQlpdnR2X2dldF9mbXQoaXR2LCBzdHJlYW10eXBlLCBmbXQpOwotCQlmbXQtPmZtdC5waXgud2lkdGggPSByLndpZHRoOwotCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gci5oZWlnaHQ7CisJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpCisJCXJldHVybiAtRUlOVkFMOworCWNyb3BjYXAtPmJvdW5kcy50b3AgPSBjcm9wY2FwLT5ib3VuZHMubGVmdCA9IDA7CisJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gNzIwOworCWlmIChjcm9wY2FwLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gaXR2LT5pc181MGh6ID8gNTc2IDogNDgwOworCQljcm9wY2FwLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSBpdHYtPmlzXzUwaHogPyA1OSA6IDEwOworCQljcm9wY2FwLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IGl0di0+aXNfNTBoeiA/IDU0IDogMTE7CisJfSBlbHNlIGlmIChzdHJlYW10eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1lVVikgeworCQlpZiAoeWktPnRyYWNrX29zZCkgeworCQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0geWktPm9zZF9mdWxsX3c7CisJCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0geWktPm9zZF9mdWxsX2g7CisJCX0gZWxzZSB7CisJCQljcm9wY2FwLT5ib3VuZHMud2lkdGggPSA3MjA7CisJCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0KKwkJCQkJaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKKwkJfQorCQljcm9wY2FwLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSBpdHYtPmlzX291dF81MGh6ID8gNTkgOiAxMDsKKwkJY3JvcGNhcC0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSBpdHYtPmlzX291dF81MGh6ID8gNTQgOiAxMTsKKwl9IGVsc2UgeworCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKKwkJY3JvcGNhcC0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gaXR2LT5pc19vdXRfNTBoeiA/IDU5IDogMTA7CisJCWNyb3BjYXAtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yID0gaXR2LT5pc19vdXRfNTBoeiA/IDU0IDogMTE7CisJfQorCWNyb3BjYXAtPmRlZnJlY3QgPSBjcm9wY2FwLT5ib3VuZHM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9zX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQoreworCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7CisJc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7CisJc3RydWN0IHl1dl9wbGF5YmFja19pbmZvICp5aSA9ICZpdHYtPnl1dl9pbmZvOworCWludCBzdHJlYW10eXBlOworCisJc3RyZWFtdHlwZSA9IGlkLT50eXBlOworCisJaWYgKGl2dHZfZGVidWcgJiBJVlRWX0RCR0ZMR19JT0NUTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJpdnR2JWQgaW9jdGw6ICIsIGl0di0+bnVtKTsKKwkJLyogU2hvdWxkIGJlIHJlcGxhY2VkICovCisJCS8qIHY0bF9wcmludGtfaW9jdGwoVklESU9DX1NfQ1JPUCk7ICovCisJfQorCisJaWYgKGNyb3AtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKKwkgICAgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKSB7CiAJCWlmIChzdHJlYW10eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1lVVikgewotCQkJZm10LT5mbXQucGl4LmZpZWxkID0gZmllbGQ7Ci0JCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDwgMikKLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSAyOwotCQkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA+IDcyMCkKLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSA3MjA7Ci0JCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8IDIpCi0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9IDI7Ci0JCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IDU3NikKLQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gNTc2OwotCQl9Ci0JCWlmIChzZXRfZm10ICYmIHN0cmVhbXR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWKSB7Ci0JCQkvKiBSZXR1cm4gbm93IGlmIHdlIGFscmVhZHkgaGF2ZSBzb21lIGZyYW1lIGRhdGEgKi8KLQkJCWlmICh5aS0+c3RyZWFtX3NpemUpCi0JCQkJcmV0dXJuIC1FQlVTWTsKLQotCQkJeWktPnY0bDJfc3JjX3cgPSByLndpZHRoOwotCQkJeWktPnY0bDJfc3JjX2ggPSByLmhlaWdodDsKLQotCQkJc3dpdGNoIChmaWVsZCkgewotCQkJY2FzZSBWNEwyX0ZJRUxEX05PTkU6Ci0JCQkJeWktPmxhY2VfbW9kZSA9IElWVFZfWVVWX01PREVfUFJPR1JFU1NJVkU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFY0TDJfRklFTERfQU5ZOgotCQkJCXlpLT5sYWNlX21vZGUgPSBJVlRWX1lVVl9NT0RFX0FVVE87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRF9CVDoKLQkJCQl5aS0+bGFjZV9tb2RlID0KLQkJCQkgICAgIElWVFZfWVVWX01PREVfSU5URVJMQUNFRHxJVlRWX1lVVl9TWU5DX09ERDsKLQkJCQlicmVhazsKLQkJCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCOgotCQkJZGVmYXVsdDoKLQkJCQl5aS0+bGFjZV9tb2RlID0gSVZUVl9ZVVZfTU9ERV9JTlRFUkxBQ0VEOwotCQkJCWJyZWFrOworCQkJeWktPm1haW5fcmVjdCA9IGNyb3AtPmM7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICghaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9PU0RfU0VUX0ZSQU1FQlVGRkVSX1dJTkRPVywgNCwKKwkJCQljcm9wLT5jLndpZHRoLCBjcm9wLT5jLmhlaWdodCwgY3JvcC0+Yy5sZWZ0LCBjcm9wLT5jLnRvcCkpIHsKKwkJCQlpdHYtPm1haW5fcmVjdCA9IGNyb3AtPmM7CisJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCQl5aS0+bGFjZV9zeW5jX2ZpZWxkID0gKHlpLT5sYWNlX21vZGUgJiBJVlRWX1lVVl9TWU5DX01BU0spID09IElWVFZfWVVWX1NZTkNfRVZFTiA/IDAgOiAxOwotCi0JCQlpZiAodGVzdF9iaXQoSVZUVl9GX0lfREVDX1lVViwgJml0di0+aV9mbGFncykpCi0JCQkJaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSA9Ci0JCQkJCSAgIDEwODAgKiAoKHlpLT52NGwyX3NyY19oICsgMzEpICYgfjMxKTsKLQotCQkJLyogRm9yY2UgdXBkYXRlIG9mIHl1diByZWdpc3RlcnMgKi8KLQkJCXlpLT55dXZfZm9yY2VkX3VwZGF0ZSA9IDE7Ci0JCQlyZXR1cm4gMDsKIAkJfQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXJldHVybiAtRUlOVkFMOworfQogCi0JaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9PVkVSTEFZKSB7Ci0JCWlmICghKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChzZXRfZm10KSB7Ci0JCQlpdHYtPm9zZF9jaHJvbWFfa2V5ID0gZm10LT5mbXQud2luLmNocm9tYWtleTsKLQkJCWl0di0+b3NkX2dsb2JhbF9hbHBoYSA9IGZtdC0+Zm10Lndpbi5nbG9iYWxfYWxwaGE7Ci0JCQlpdnR2X3NldF9vc2RfYWxwaGEoaXR2KTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9CitzdGF0aWMgaW50IGl2dHZfZ19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCkKK3sKKwlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OworCXN0cnVjdCB5dXZfcGxheWJhY2tfaW5mbyAqeWkgPSAmaXR2LT55dXZfaW5mbzsKKwlpbnQgc3RyZWFtdHlwZTsKIAotCS8qIHNldCB3aW5kb3cgc2l6ZSAqLwotCWlmIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwID0gJml0di0+cGFyYW1zOwotCQlpbnQgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKLQkJaW50IGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCXN0cmVhbXR5cGUgPSBpZC0+dHlwZTsKIAotCQlpZiAodyA+IDcyMCkgdyA9IDcyMDsKLQkJZWxzZSBpZiAodyA8IDEpIHcgPSAxOwotCQlpZiAoaCA+IChpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODApKSBoID0gKGl0di0+aXNfNTBoeiA/IDU3NiA6IDQ4MCk7Ci0JCWVsc2UgaWYgKGggPCAyKSBoID0gMjsKLQkJaXZ0dl9nZXRfZm10KGl0diwgc3RyZWFtdHlwZSwgZm10KTsKLQkJZm10LT5mbXQucGl4LndpZHRoID0gdzsKLQkJZm10LT5mbXQucGl4LmhlaWdodCA9IGg7Ci0KLQkJaWYgKCFzZXRfZm10IHx8IChwLT53aWR0aCA9PSB3ICYmIHAtPmhlaWdodCA9PSBoKSkKLQkJCXJldHVybiAwOwotCQlpZiAoYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDApCi0JCQlyZXR1cm4gLUVCVVNZOwotCi0JCXAtPndpZHRoID0gdzsKLQkJcC0+aGVpZ2h0ID0gaDsKLQkJaWYgKHcgIT0gNzIwIHx8IGggIT0gKGl0di0+aXNfNTBoeiA/IDU3NiA6IDQ4MCkpCi0JCQlwLT52aWRlb190ZW1wb3JhbF9maWx0ZXIgPSAwOworCWlmIChjcm9wLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCisJICAgIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSkgeworCQlpZiAoc3RyZWFtdHlwZSA9PSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVYpCisJCQljcm9wLT5jID0geWktPm1haW5fcmVjdDsKIAkJZWxzZQotCQkJcC0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyID0gODsKLQkJaWYgKHAtPnZpZGVvX2VuY29kaW5nID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEpCi0JCQlmbXQtPmZtdC5waXgud2lkdGggLz0gMjsKLQkJaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19TX0ZNVCwgZm10KTsKLQkJcmV0dXJuIGl2dHZfZ2V0X2ZtdChpdHYsIHN0cmVhbXR5cGUsIGZtdCk7Ci0JfQotCi0JLyogc2V0IHJhdyBWQkkgZm9ybWF0ICovCi0JaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7Ci0JCWlmIChzZXRfZm10ICYmIGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwKSB7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JCWlmIChzZXRfZm10KSB7Ci0JCQlpdHYtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ID0gMDsKLQkJCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfU19GTVQsICZpdHYtPnZiaS5pbik7Ci0JCX0KLQkJcmV0dXJuIGl2dHZfZ2V0X2ZtdChpdHYsIHN0cmVhbXR5cGUsIGZtdCk7Ci0JfQotCi0JLyogc2V0IHNsaWNlZCBWQkkgb3V0cHV0Ci0JICAgSW4gcHJpbmNpcGxlIHRoZSB1c2VyIGNvdWxkIHJlcXVlc3QgdGhhdCBvbmx5IGNlcnRhaW4KLQkgICBWQkkgdHlwZXMgYXJlIG91dHB1dCBhbmQgdGhhdCB0aGUgb3RoZXJzIGFyZSBpZ25vcmVkLgotCSAgIEkuZS4sIHN1cHByZXNzIENDIGluIHRoZSBldmVuIGZpZWxkcyBvciBvbmx5IG91dHB1dAotCSAgIFdTUyBhbmQgbm8gVlBTLiBDdXJyZW50bHkgdGhvdWdoIHRoZXJlIGlzIG5vIGNob2ljZS4gKi8KLQlpZiAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQpCi0JCXJldHVybiBpdnR2X2dldF9mbXQoaXR2LCBzdHJlYW10eXBlLCBmbXQpOwotCi0JLyogYW55IGVsc2UgYnV0IHNsaWNlZCBWQkkgY2FwdHVyZSBpcyBhbiBlcnJvciAqLwotCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHN0cmVhbXR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfVkJJKQotCQlyZXR1cm4gaXZ0dl9nZXRfZm10KGl0diwgc3RyZWFtdHlwZSwgZm10KTsKLQotCS8qIHNldCBzbGljZWQgVkJJIGNhcHR1cmUgZm9ybWF0ICovCi0JdmJpZm10LT5pb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSkgKiAzNjsKLQltZW1zZXQodmJpZm10LT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHZiaWZtdC0+cmVzZXJ2ZWQpKTsKLQotCWlmICh2YmlmbXQtPnNlcnZpY2Vfc2V0KQotCQlpdnR2X2V4cGFuZF9zZXJ2aWNlX3NldCh2YmlmbXQsIGl0di0+aXNfNTBoeik7Ci0Jc2V0ID0gY2hlY2tfc2VydmljZV9zZXQodmJpZm10LCBpdHYtPmlzXzUwaHopOwotCXZiaWZtdC0+c2VydmljZV9zZXQgPSBpdnR2X2dldF9zZXJ2aWNlX3NldCh2YmlmbXQpOwotCi0JaWYgKCFzZXRfZm10KQorCQkJY3JvcC0+YyA9IGl0di0+bWFpbl9yZWN0OwogCQlyZXR1cm4gMDsKLQlpZiAoc2V0ID09IDApCisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGl2dHZfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKK3sKKwlzdGF0aWMgc3RydWN0IHY0bDJfZm10ZGVzYyBmb3JtYXRzW10gPSB7CisJCXsgMCwgMCwgMCwKKwkJICAiSE0xMiAoWVVWIDQ6MjowKSIsIFY0TDJfUElYX0ZNVF9ITTEyLAorCQkgIHsgMCwgMCwgMCwgMCB9CisJCX0sCisJCXsgMSwgMCwgVjRMMl9GTVRfRkxBR19DT01QUkVTU0VELAorCQkgICJNUEVHIiwgVjRMMl9QSVhfRk1UX01QRUcsCisJCSAgeyAwLCAwLCAwLCAwIH0KKwkJfQorCX07CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBmbXQtPnR5cGU7CisKKwlpZiAoZm10LT5pbmRleCA+IDEpCiAJCXJldHVybiAtRUlOVkFMOworCisJKmZtdCA9IGZvcm1hdHNbZm10LT5pbmRleF07CisJZm10LT50eXBlID0gdHlwZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpdnR2X2VudW1fZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCisJc3RhdGljIHN0cnVjdCB2NGwyX2ZtdGRlc2MgZm9ybWF0c1tdID0geworCQl7IDAsIDAsIDAsCisJCSAgIkhNMTIgKFlVViA0OjI6MCkiLCBWNEwyX1BJWF9GTVRfSE0xMiwKKwkJICB7IDAsIDAsIDAsIDAgfQorCQl9LAorCQl7IDEsIDAsIFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRCwKKwkJICAiTVBFRyIsIFY0TDJfUElYX0ZNVF9NUEVHLAorCQkgIHsgMCwgMCwgMCwgMCB9CisJCX0KKwl9OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gZm10LT50eXBlOworCisJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZtdC0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpmbXQgPSBmb3JtYXRzW2ZtdC0+aW5kZXhdOworCWZtdC0+dHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpdnR2X2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmkpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCisJKmkgPSBpdHYtPmFjdGl2ZV9pbnB1dDsKKworCXJldHVybiAwOworfQorCitpbnQgaXZ0dl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucCkKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CisKKwlpZiAoaW5wIDwgMCB8fCBpbnAgPj0gaXR2LT5ub2ZfaW5wdXRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpbnAgPT0gaXR2LT5hY3RpdmVfaW5wdXQpIHsKKwkJSVZUVl9ERUJVR19JTkZPKCJJbnB1dCB1bmNoYW5nZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDApIHsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19TX0ZNVCwgZm10KTsKLQltZW1jcHkoaXR2LT52Ymkuc2xpY2VkX2luLCB2YmlmbXQsIHNpemVvZigqaXR2LT52Ymkuc2xpY2VkX2luKSk7CisKKwlJVlRWX0RFQlVHX0lORk8oIkNoYW5naW5nIGlucHV0IGZyb20gJWQgdG8gJWRcbiIsCisJCQlpdHYtPmFjdGl2ZV9pbnB1dCwgaW5wKTsKKworCWl0di0+YWN0aXZlX2lucHV0ID0gaW5wOworCS8qIFNldCB0aGUgYXVkaW8gaW5wdXQgdG8gd2hhdGV2ZXIgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZQorCSAgIGlucHV0IHR5cGUuICovCisJaXR2LT5hdWRpb19pbnB1dCA9IGl0di0+Y2FyZC0+dmlkZW9faW5wdXRzW2lucF0uYXVkaW9faW5kZXg7CisKKwkvKiBwcmV2ZW50IG90aGVycyBmcm9tIG1lc3Npbmcgd2l0aCB0aGUgc3RyZWFtcyB1bnRpbAorCSAgIHdlJ3JlIGZpbmlzaGVkIGNoYW5naW5nIGlucHV0cy4gKi8KKwlpdnR2X211dGUoaXR2KTsKKwlpdnR2X3ZpZGVvX3NldF9pbyhpdHYpOworCWl2dHZfYXVkaW9fc2V0X2lvKGl0dik7CisJaXZ0dl91bm11dGUoaXR2KTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl2dHZfZGVidWdfaW9jdGxzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGl2dHZfZ19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmkpCiB7Ci0Jc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSAoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKLQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKIAotCXN3aXRjaCAoY21kKSB7Ci0JLyogaW9jdGxzIHRvIGFsbG93IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGVuY29kZXIgcmVnaXN0ZXJzIGZvciB0ZXN0aW5nICovCi0JY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6Ci0JCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gaXZ0dl9pdHZjKGl0diwgY21kLCBhcmcpOwotCQlpZiAocmVnLT5tYXRjaF90eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSKQotCQkJcmV0dXJuIGl2dHZfaTJjX2lkKGl0diwgcmVnLT5tYXRjaF9jaGlwLCBjbWQsIGFyZyk7Ci0JCXJldHVybiBpdnR2X2NhbGxfaTJjX2NsaWVudChpdHYsIHJlZy0+bWF0Y2hfY2hpcCwgY21kLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6Ci0JCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gaXZ0dl9pdHZjKGl0diwgY21kLCBhcmcpOwotCQlpZiAocmVnLT5tYXRjaF90eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSKQotCQkJcmV0dXJuIGl2dHZfaTJjX2lkKGl0diwgcmVnLT5tYXRjaF9jaGlwLCBjbWQsIGFyZyk7Ci0JCXJldHVybiBpdnR2X2NhbGxfaTJjX2NsaWVudChpdHYsIHJlZy0+bWF0Y2hfY2hpcCwgY21kLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UOiB7Ci0JCXN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXAgPSBhcmc7Ci0KLQkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7Ci0JCWNoaXAtPnJldmlzaW9uID0gMDsKLQkJaWYgKHJlZy0+bWF0Y2hfdHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSE9TVCkgewotCQkJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KHJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKLQkJCQljaGlwLT5pZGVudCA9IGl0di0+aGFzX2N4MjM0MTUgPyBWNEwyX0lERU5UX0NYMjM0MTUgOiBWNEwyX0lERU5UX0NYMjM0MTY7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpZiAocmVnLT5tYXRjaF90eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSKQotCQkJcmV0dXJuIGl2dHZfaTJjX2lkKGl0diwgcmVnLT5tYXRjaF9jaGlwLCBjbWQsIGFyZyk7Ci0JCWlmIChyZWctPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQotCQkJcmV0dXJuIGl2dHZfY2FsbF9pMmNfY2xpZW50KGl0diwgcmVnLT5tYXRjaF9jaGlwLCBjbWQsIGFyZyk7CisJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAotCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6IHsKLQkJc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CisJKmkgPSBpdHYtPmFjdGl2ZV9vdXRwdXQ7CiAKLQkJaXZ0dl9pMmNfaHcoaXR2LCBpdHYtPmNhcmQtPmh3X2F1ZGlvLCBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgcm91dGUpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19JTlRfUkVTRVQ6IHsKLQkJdTMyIHZhbCA9ICoodTMyICopYXJnOwotCi0JCWlmICgodmFsID09IDAgJiYgaXR2LT5vcHRpb25zLm5ld2kyYykgfHwgKHZhbCAmIDB4MDEpKSB7Ci0JCQlpdnR2X3Jlc2V0X2lyX2dwaW8oaXR2KTsKLQkJfQotCQlpZiAodmFsICYgMHgwMikgewotCQkJaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIGNtZCwgTlVMTCk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCXJldHVybiAwOwogfQogCi1pbnQgaXZ0dl92NGwyX2lvY3RscyhzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBpdnR2X3Nfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IG91dHApCiB7Ci0Jc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSBOVUxMOworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCisJaWYgKG91dHAgPj0gaXR2LT5jYXJkLT5ub2Zfb3V0cHV0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3V0cCA9PSBpdHYtPmFjdGl2ZV9vdXRwdXQpIHsKKwkJSVZUVl9ERUJVR19JTkZPKCJPdXRwdXQgdW5jaGFuZ2VkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCUlWVFZfREVCVUdfSU5GTygiQ2hhbmdpbmcgb3V0cHV0IGZyb20gJWQgdG8gJWRcbiIsCisJCSAgIGl0di0+YWN0aXZlX291dHB1dCwgb3V0cCk7CisKKwlpdHYtPmFjdGl2ZV9vdXRwdXQgPSBvdXRwOworCXJvdXRlLmlucHV0ID0gU0FBNzEyN19JTlBVVF9UWVBFX05PUk1BTDsKKwlyb3V0ZS5vdXRwdXQgPSBpdHYtPmNhcmQtPnZpZGVvX291dHB1dHNbb3V0cF0udmlkZW9fb3V0cHV0OworCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqdmYpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCisJaWYgKHZmLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19HX0ZSRVFVRU5DWSwgdmYpOworCXJldHVybiAwOworfQorCitpbnQgaXZ0dl9zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqdmYpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCisJaWYgKHZmLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWl2dHZfbXV0ZShpdHYpOworCUlWVFZfREVCVUdfSU5GTygidjRsMiBpb2N0bDogc2V0IGZyZXF1ZW5jeSAlZFxuIiwgdmYtPmZyZXF1ZW5jeSk7CisJaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVklESU9DX1NfRlJFUVVFTkNZLCB2Zik7CisJaXZ0dl91bm11dGUoaXR2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpdnR2X2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CisKKwkqc3RkID0gaXR2LT5zdGQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpdnR2X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CiAJc3RydWN0IHl1dl9wbGF5YmFja19pbmZvICp5aSA9ICZpdHYtPnl1dl9pbmZvOworCisJaWYgKCgqc3RkICYgVjRMMl9TVERfQUxMKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgqc3RkID09IGl0di0+c3RkKQorCQlyZXR1cm4gMDsKKworCWlmICh0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSB8fAorCSAgICBhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpID4gMCB8fAorCSAgICBhdG9taWNfcmVhZCgmaXR2LT5kZWNvZGluZykgPiAwKSB7CisJCS8qIFN3aXRjaGluZyBzdGFuZGFyZCB3b3VsZCB0dXJuIG9mZiB0aGUgcmFkaW8gb3IgbWVzcworCQkgICB3aXRoIGFscmVhZHkgcnVubmluZyBzdHJlYW1zLCBwcmV2ZW50IHRoYXQgYnkKKwkJICAgcmV0dXJuaW5nIEVCVVNZLiAqLworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWl0di0+c3RkID0gKnN0ZDsKKwlpdHYtPmlzXzYwaHogPSAoKnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAxIDogMDsKKwlpdHYtPnBhcmFtcy5pc181MGh6ID0gaXR2LT5pc181MGh6ID0gIWl0di0+aXNfNjBoejsKKwlpdHYtPnBhcmFtcy53aWR0aCA9IDcyMDsKKwlpdHYtPnBhcmFtcy5oZWlnaHQgPSBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODA7CisJaXR2LT52YmkuY291bnQgPSBpdHYtPmlzXzUwaHogPyAxOCA6IDEyOworCWl0di0+dmJpLnN0YXJ0WzBdID0gaXR2LT5pc181MGh6ID8gNiA6IDEwOworCWl0di0+dmJpLnN0YXJ0WzFdID0gaXR2LT5pc181MGh6ID8gMzE4IDogMjczOworCisJaWYgKGl0di0+aHdfZmxhZ3MgJiBJVlRWX0hXX0NYMjU4NDApCisJCWl0di0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IGl0di0+aXNfNjBoeiA/IDI3MiA6IDI4NDsKKworCUlWVFZfREVCVUdfSU5GTygiU3dpdGNoaW5nIHN0YW5kYXJkIHRvICVsbHguXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWl0di0+c3RkKTsKKworCS8qIFR1bmVyICovCisJaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVklESU9DX1NfU1RELCAmaXR2LT5zdGQpOworCisJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpIHsKKwkJLyogc2V0IGRpc3BsYXkgc3RhbmRhcmQgKi8KKwkJaXR2LT5zdGRfb3V0ID0gKnN0ZDsKKwkJaXR2LT5pc19vdXRfNjBoeiA9IGl0di0+aXNfNjBoejsKKwkJaXR2LT5pc19vdXRfNTBoeiA9IGl0di0+aXNfNTBoejsKKwkJaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVklESU9DX0lOVF9TX1NURF9PVVRQVVQsICZpdHYtPnN0ZF9vdXQpOworCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfU1RBTkRBUkQsIDEsIGl0di0+aXNfb3V0XzUwaHopOworCQlpdHYtPm1haW5fcmVjdC5sZWZ0ID0gaXR2LT5tYWluX3JlY3QudG9wID0gMDsKKwkJaXR2LT5tYWluX3JlY3Qud2lkdGggPSA3MjA7CisJCWl0di0+bWFpbl9yZWN0LmhlaWdodCA9IGl0di0+cGFyYW1zLmhlaWdodDsKKwkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9PU0RfU0VUX0ZSQU1FQlVGRkVSX1dJTkRPVywgNCwKKwkJCTcyMCwgaXR2LT5tYWluX3JlY3QuaGVpZ2h0LCAwLCAwKTsKKwkJeWktPm1haW5fcmVjdCA9IGl0di0+bWFpbl9yZWN0OworCQlpZiAoIWl0di0+b3NkX2luZm8pIHsKKwkJCXlpLT5vc2RfZnVsbF93ID0gNzIwOworCQkJeWktPm9zZF9mdWxsX2ggPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl2dHZfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IGZoOworCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OworCisJaWYgKHZ0LT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19TX1RVTkVSLCB2dCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpdnR2X2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCisJaWYgKHZ0LT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19HX1RVTkVSLCB2dCk7CisKKwlpZiAodGVzdF9iaXQoSVZUVl9GX0lfUkFESU9fVVNFUiwgJml0di0+aV9mbGFncykpIHsKKwkJc3RybGNweSh2dC0+bmFtZSwgIml2dHYgUmFkaW8gVHVuZXIiLCBzaXplb2YodnQtPm5hbWUpKTsKKwkJdnQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCX0gZWxzZSB7CisJCXN0cmxjcHkodnQtPm5hbWUsICJpdnR2IFRWIFR1bmVyIiwgc2l6ZW9mKHZ0LT5uYW1lKSk7CisJCXZ0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9nX3NsaWNlZF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKmNhcCkKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CisJaW50IHNldCA9IGl0di0+aXNfNTBoeiA/IFY0TDJfU0xJQ0VEX1ZCSV82MjUgOiBWNEwyX1NMSUNFRF9WQklfNTI1OworCWludCBmLCBsOworCisJaWYgKGNhcC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkgeworCQlmb3IgKGYgPSAwOyBmIDwgMjsgZisrKSB7CisJCQlmb3IgKGwgPSAwOyBsIDwgMjQ7IGwrKykgeworCQkJCWlmICh2YWxpZF9zZXJ2aWNlX2xpbmUoZiwgbCwgaXR2LT5pc181MGh6KSkKKwkJCQkJY2FwLT5zZXJ2aWNlX2xpbmVzW2ZdW2xdID0gc2V0OworCQkJfQorCQl9CisJCXJldHVybiAwOworCX0KKwlpZiAoY2FwLT50eXBlID09IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQpIHsKKwkJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVUKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoaXR2LT5pc182MGh6KSB7CisJCQljYXAtPnNlcnZpY2VfbGluZXNbMF1bMjFdID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJCQljYXAtPnNlcnZpY2VfbGluZXNbMV1bMjFdID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJCX0gZWxzZSB7CisJCQljYXAtPnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJCWNhcC0+c2VydmljZV9saW5lc1swXVsxNl0gPSBWNEwyX1NMSUNFRF9WUFM7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGl2dHZfZ19lbmNfaW5kZXgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9lbmNfaWR4ICppZHgpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCXN0cnVjdCB2NGwyX2VuY19pZHhfZW50cnkgKmUgPSBpZHgtPmVudHJ5OworCWludCBlbnRyaWVzOworCWludCBpOworCisJZW50cmllcyA9IChpdHYtPnBnbV9pbmZvX3dyaXRlX2lkeCArIElWVFZfTUFYX1BHTV9JTkRFWCAtIGl0di0+cGdtX2luZm9fcmVhZF9pZHgpICUKKwkJCQlJVlRWX01BWF9QR01fSU5ERVg7CisJaWYgKGVudHJpZXMgPiBWNEwyX0VOQ19JRFhfRU5UUklFUykKKwkJZW50cmllcyA9IFY0TDJfRU5DX0lEWF9FTlRSSUVTOworCWlkeC0+ZW50cmllcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgeworCQkqZSA9IGl0di0+cGdtX2luZm9bKGl0di0+cGdtX2luZm9fcmVhZF9pZHggKyBpKSAlIElWVFZfTUFYX1BHTV9JTkRFWF07CisJCWlmICgoZS0+ZmxhZ3MgJiBWNEwyX0VOQ19JRFhfRlJBTUVfTUFTSykgPD0gVjRMMl9FTkNfSURYX0ZSQU1FX0IpIHsKKwkJCWlkeC0+ZW50cmllcysrOworCQkJZSsrOworCQl9CisJfQorCWl0di0+cGdtX2luZm9fcmVhZF9pZHggPSAoaXR2LT5wZ21faW5mb19yZWFkX2lkeCArIGlkeC0+ZW50cmllcykgJSBJVlRWX01BWF9QR01fSU5ERVg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXZ0dl9lbmNvZGVyX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2VuY29kZXJfY21kICplbmMpCit7CisJc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKKworCisJc3dpdGNoIChlbmMtPmNtZCkgeworCWNhc2UgVjRMMl9FTkNfQ01EX1NUQVJUOgorCQlJVlRWX0RFQlVHX0lPQ1RMKCJWNEwyX0VOQ19DTURfU1RBUlRcbiIpOworCQllbmMtPmZsYWdzID0gMDsKKwkJcmV0dXJuIGl2dHZfc3RhcnRfY2FwdHVyZShpZCk7CisKKwljYXNlIFY0TDJfRU5DX0NNRF9TVE9QOgorCQlJVlRWX0RFQlVHX0lPQ1RMKCJWNEwyX0VOQ19DTURfU1RPUFxuIik7CisJCWVuYy0+ZmxhZ3MgJj0gVjRMMl9FTkNfQ01EX1NUT1BfQVRfR09QX0VORDsKKwkJaXZ0dl9zdG9wX2NhcHR1cmUoaWQsIGVuYy0+ZmxhZ3MgJiBWNEwyX0VOQ19DTURfU1RPUF9BVF9HT1BfRU5EKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFY0TDJfRU5DX0NNRF9QQVVTRToKKwkJSVZUVl9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1BBVVNFXG4iKTsKKwkJZW5jLT5mbGFncyA9IDA7CisKKwkJaWYgKCFhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoSVZUVl9GX0lfRU5DX1BBVVNFRCwgJml0di0+aV9mbGFncykpCisJCQlyZXR1cm4gMDsKKworCQlpdnR2X211dGUoaXR2KTsKKwkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9FTkNfUEFVU0VfRU5DT0RFUiwgMSwgMCk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0VOQ19DTURfUkVTVU1FOgorCQlJVlRWX0RFQlVHX0lPQ1RMKCJWNEwyX0VOQ19DTURfUkVTVU1FXG4iKTsKKwkJZW5jLT5mbGFncyA9IDA7CisKKwkJaWYgKCFhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJVlRWX0ZfSV9FTkNfUEFVU0VELCAmaXR2LT5pX2ZsYWdzKSkKKwkJCXJldHVybiAwOworCisJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX1BBVVNFX0VOQ09ERVIsIDEsIDEpOworCQlpdnR2X3VubXV0ZShpdHYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlJVlRWX0RFQlVHX0lPQ1RMKCJVbmtub3duIGNtZCAlZFxuIiwgZW5jLT5jbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpdnR2X3RyeV9lbmNvZGVyX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2VuY29kZXJfY21kICplbmMpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCisJc3dpdGNoIChlbmMtPmNtZCkgeworCWNhc2UgVjRMMl9FTkNfQ01EX1NUQVJUOgorCQlJVlRWX0RFQlVHX0lPQ1RMKCJWNEwyX0VOQ19DTURfU1RBUlRcbiIpOworCQllbmMtPmZsYWdzID0gMDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFY0TDJfRU5DX0NNRF9TVE9QOgorCQlJVlRWX0RFQlVHX0lPQ1RMKCJWNEwyX0VOQ19DTURfU1RPUFxuIik7CisJCWVuYy0+ZmxhZ3MgJj0gVjRMMl9FTkNfQ01EX1NUT1BfQVRfR09QX0VORDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFY0TDJfRU5DX0NNRF9QQVVTRToKKwkJSVZUVl9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1BBVVNFXG4iKTsKKwkJZW5jLT5mbGFncyA9IDA7CisJCXJldHVybiAwOworCisJY2FzZSBWNEwyX0VOQ19DTURfUkVTVU1FOgorCQlJVlRWX0RFQlVHX0lPQ1RMKCJWNEwyX0VOQ19DTURfUkVTVU1FXG4iKTsKKwkJZW5jLT5mbGFncyA9IDA7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCUlWVFZfREVCVUdfSU9DVEwoIlVua25vd24gY21kICVkXG4iLCBlbmMtPmNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBpdnR2X2dfZmJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CiAJdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXTsKLQlpbnQgc3RyZWFtdHlwZSA9IDA7CisJc3RydWN0IHl1dl9wbGF5YmFja19pbmZvICp5aSA9ICZpdHYtPnl1dl9pbmZvOwogCi0JaWYgKGZpbHApIHsKLQkJaWQgPSAoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKLQkJc3RyZWFtdHlwZSA9IGlkLT50eXBlOwotCX0KKwlpbnQgcGl4Zm10OworCXN0YXRpYyB1MzIgcGl4ZWxfZm9ybWF0WzE2XSA9IHsKKwkJVjRMMl9QSVhfRk1UX1BBTDgsIC8qIFVzZXMgYSAyNTYtZW50cnkgUkdCIGNvbG9ybWFwICovCisJCVY0TDJfUElYX0ZNVF9SR0I1NjUsCisJCVY0TDJfUElYX0ZNVF9SR0I1NTUsCisJCVY0TDJfUElYX0ZNVF9SR0I0NDQsCisJCVY0TDJfUElYX0ZNVF9SR0IzMiwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJVjRMMl9QSVhfRk1UX1BBTDgsIC8qIFVzZXMgYSAyNTYtZW50cnkgWVVWIGNvbG9ybWFwICovCisJCVY0TDJfUElYX0ZNVF9ZVVY1NjUsCisJCVY0TDJfUElYX0ZNVF9ZVVY1NTUsCisJCVY0TDJfUElYX0ZNVF9ZVVY0NDQsCisJCVY0TDJfUElYX0ZNVF9ZVVYzMiwKKwkJMCwKKwkJMCwKKwkJMCwKKwl9OwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19HX1BSSU9SSVRZOgotCXsKLQkJZW51bSB2NGwyX3ByaW9yaXR5ICpwID0gYXJnOworCWlmICghKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVRfT1ZFUkxBWSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghaXR2LT5vc2RfdmlkZW9fcGJhc2UpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCSpwID0gdjRsMl9wcmlvX21heCgmaXR2LT5wcmlvKTsKLQkJYnJlYWs7Ci0JfQorCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9FWFRFUk5PVkVSTEFZIHwgVjRMMl9GQlVGX0NBUF9DSFJPTUFLRVkgfAorCQlWNEwyX0ZCVUZfQ0FQX0dMT0JBTF9BTFBIQTsKIAotCWNhc2UgVklESU9DX1NfUFJJT1JJVFk6Ci0JewotCQllbnVtIHY0bDJfcHJpb3JpdHkgKnByaW8gPSBhcmc7CisJaXZ0dl92YXBpX3Jlc3VsdChpdHYsIGRhdGEsIENYMjM0MVhfT1NEX0dFVF9TVEFURSwgMCk7CisJZGF0YVswXSB8PSAocmVhZF9yZWcoMHgyYTAwKSA+PiA3KSAmIDB4NDA7CisJcGl4Zm10ID0gKGRhdGFbMF0gPj4gMykgJiAweGY7CiAKLQkJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoJml0di0+cHJpbywgJmlkLT5wcmlvLCAqcHJpbyk7Ci0JfQorCWZiLT5mbXQucGl4ZWxmb3JtYXQgPSBwaXhlbF9mb3JtYXRbcGl4Zm10XTsKKwlmYi0+Zm10LndpZHRoID0gaXR2LT5vc2RfcmVjdC53aWR0aDsKKwlmYi0+Zm10LmhlaWdodCA9IGl0di0+b3NkX3JlY3QuaGVpZ2h0OworCWZiLT5mbXQuZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJZmItPmZtdC5ieXRlc3BlcmxpbmUgPSBmYi0+Zm10LndpZHRoOworCWZiLT5mbXQuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJZmItPmZtdC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlmYi0+Zm10LnByaXYgPSAwOworCWlmIChmYi0+Zm10LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9QQUw4KQorCQlmYi0+Zm10LmJ5dGVzcGVybGluZSAqPSAyOworCWlmIChmYi0+Zm10LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9SR0IzMiB8fAorCSAgICBmYi0+Zm10LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVYzMikKKwkJZmItPmZtdC5ieXRlc3BlcmxpbmUgKj0gMjsKKwlmYi0+Zm10LnNpemVpbWFnZSA9IGZiLT5mbXQuYnl0ZXNwZXJsaW5lICogZmItPmZtdC5oZWlnaHQ7CisJZmItPmJhc2UgPSAodm9pZCAqKWl0di0+b3NkX3ZpZGVvX3BiYXNlOworCWZiLT5mbGFncyA9IDA7CiAKLQljYXNlIFZJRElPQ19RVUVSWUNBUDp7Ci0JCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnZjYXAgPSBhcmc7CisJaWYgKGl0di0+b3NkX2Nocm9tYV9rZXlfc3RhdGUpCisJCWZiLT5mbGFncyB8PSBWNEwyX0ZCVUZfRkxBR19DSFJPTUFLRVk7CiAKLQkJbWVtc2V0KHZjYXAsIDAsIHNpemVvZigqdmNhcCkpOwotCQlzdHJsY3B5KHZjYXAtPmRyaXZlciwgSVZUVl9EUklWRVJfTkFNRSwgc2l6ZW9mKHZjYXAtPmRyaXZlcikpOwotCQlzdHJsY3B5KHZjYXAtPmNhcmQsIGl0di0+Y2FyZF9uYW1lLCBzaXplb2YodmNhcC0+Y2FyZCkpOwotCQlzdHJsY3B5KHZjYXAtPmJ1c19pbmZvLCBwY2lfbmFtZShpdHYtPmRldiksIHNpemVvZih2Y2FwLT5idXNfaW5mbykpOwotCQl2Y2FwLT52ZXJzaW9uID0gSVZUVl9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCi0JCXZjYXAtPmNhcGFiaWxpdGllcyA9IGl0di0+djRsMl9jYXA7IAkgICAgLyogY2FwYWJpbGl0aWVzICovCisJaWYgKGl0di0+b3NkX2dsb2JhbF9hbHBoYV9zdGF0ZSkKKwkJZmItPmZsYWdzIHw9IFY0TDJfRkJVRl9GTEFHX0dMT0JBTF9BTFBIQTsKIAotCQkvKiByZXNlcnZlZC4uIG11c3Qgc2V0IHRvIDAhICovCi0JCXZjYXAtPnJlc2VydmVkWzBdID0gdmNhcC0+cmVzZXJ2ZWRbMV0gPQotCQkJdmNhcC0+cmVzZXJ2ZWRbMl0gPSB2Y2FwLT5yZXNlcnZlZFszXSA9IDA7Ci0JCWJyZWFrOwotCX0KKwlwaXhmbXQgJj0gNzsKIAotCWNhc2UgVklESU9DX0VOVU1BVURJTzp7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICp2aW4gPSBhcmc7Ci0KLQkJcmV0dXJuIGl2dHZfZ2V0X2F1ZGlvX2lucHV0KGl0diwgdmluLT5pbmRleCwgdmluKTsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX0FVRElPOnsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKnZpbiA9IGFyZzsKLQotCQl2aW4tPmluZGV4ID0gaXR2LT5hdWRpb19pbnB1dDsKLQkJcmV0dXJuIGl2dHZfZ2V0X2F1ZGlvX2lucHV0KGl0diwgdmluLT5pbmRleCwgdmluKTsKLQl9Ci0KLQljYXNlIFZJRElPQ19TX0FVRElPOnsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKnZvdXQgPSBhcmc7Ci0KLQkJaWYgKHZvdXQtPmluZGV4ID49IGl0di0+bm9mX2F1ZGlvX2lucHV0cykKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpdHYtPmF1ZGlvX2lucHV0ID0gdm91dC0+aW5kZXg7Ci0JCWl2dHZfYXVkaW9fc2V0X2lvKGl0dik7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0VOVU1BVURPVVQ6ewotCQlzdHJ1Y3QgdjRsMl9hdWRpb291dCAqdmluID0gYXJnOwotCi0JCS8qIHNldCBpdCB0byBkZWZhdWx0cyBmcm9tIG91ciB0YWJsZSAqLwotCQlyZXR1cm4gaXZ0dl9nZXRfYXVkaW9fb3V0cHV0KGl0diwgdmluLT5pbmRleCwgdmluKTsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX0FVRE9VVDp7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvb3V0ICp2aW4gPSBhcmc7Ci0KLQkJdmluLT5pbmRleCA9IDA7Ci0JCXJldHVybiBpdnR2X2dldF9hdWRpb19vdXRwdXQoaXR2LCB2aW4tPmluZGV4LCB2aW4pOwotCX0KLQotCWNhc2UgVklESU9DX1NfQVVET1VUOnsKLQkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKnZvdXQgPSBhcmc7Ci0KLQkJcmV0dXJuIGl2dHZfZ2V0X2F1ZGlvX291dHB1dChpdHYsIHZvdXQtPmluZGV4LCB2b3V0KTsKLQl9Ci0KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6ewotCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqdmluID0gYXJnOwotCi0JCS8qIHNldCBpdCB0byBkZWZhdWx0cyBmcm9tIG91ciB0YWJsZSAqLwotCQlyZXR1cm4gaXZ0dl9nZXRfaW5wdXQoaXR2LCB2aW4tPmluZGV4LCB2aW4pOwotCX0KLQotCWNhc2UgVklESU9DX0VOVU1PVVRQVVQ6ewotCQlzdHJ1Y3QgdjRsMl9vdXRwdXQgKnZvdXQgPSBhcmc7Ci0KLQkJcmV0dXJuIGl2dHZfZ2V0X291dHB1dChpdHYsIHZvdXQtPmluZGV4LCB2b3V0KTsKLQl9Ci0KLQljYXNlIFZJRElPQ19UUllfRk1UOgotCWNhc2UgVklESU9DX1NfRk1UOiB7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCi0JCXJldHVybiBpdnR2X3RyeV9vcl9zZXRfZm10KGl0diwgaWQtPnR5cGUsIGZtdCwgY21kID09IFZJRElPQ19TX0ZNVCk7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19GTVQ6IHsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7Ci0JCWludCB0eXBlID0gZm10LT50eXBlOwotCi0JCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7Ci0JCWZtdC0+dHlwZSA9IHR5cGU7Ci0JCXJldHVybiBpdnR2X2dldF9mbXQoaXR2LCBpZC0+dHlwZSwgZm10KTsKLQl9Ci0KLQljYXNlIFZJRElPQ19DUk9QQ0FQOiB7Ci0JCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXAgPSBhcmc7Ci0KLQkJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IGNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKLQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gNzIwOwotCQlpZiAoY3JvcGNhcC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODA7Ci0JCQljcm9wY2FwLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSBpdHYtPmlzXzUwaHogPyA1OSA6IDEwOwotCQkJY3JvcGNhcC0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSBpdHYtPmlzXzUwaHogPyA1NCA6IDExOwotCQl9IGVsc2UgaWYgKHN0cmVhbXR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWKSB7Ci0JCQlpZiAoeWktPnRyYWNrX29zZCkgewotCQkJCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IHlpLT5vc2RfZnVsbF93OwotCQkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSB5aS0+b3NkX2Z1bGxfaDsKLQkJCX0gZWxzZSB7Ci0JCQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gNzIwOwotCQkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPQotCQkJCQkJaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKLQkJCX0KLQkJCWNyb3BjYXAtPnBpeGVsYXNwZWN0Lm51bWVyYXRvciA9IGl0di0+aXNfb3V0XzUwaHogPyA1OSA6IDEwOwotCQkJY3JvcGNhcC0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSBpdHYtPmlzX291dF81MGh6ID8gNTQgOiAxMTsKLQkJfSBlbHNlIHsKLQkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOwotCQkJY3JvcGNhcC0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gaXR2LT5pc19vdXRfNTBoeiA/IDU5IDogMTA7Ci0JCQljcm9wY2FwLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IGl0di0+aXNfb3V0XzUwaHogPyA1NCA6IDExOwotCQl9Ci0JCWNyb3BjYXAtPmRlZnJlY3QgPSBjcm9wY2FwLT5ib3VuZHM7CisJLyogbm8gbG9jYWwgYWxwaGEgZm9yIFJHQjU2NSBvciB1bmtub3duIGZvcm1hdHMgKi8KKwlpZiAocGl4Zm10ID09IDEgfHwgcGl4Zm10ID4gNCkKIAkJcmV0dXJuIDA7Ci0JfQogCi0JY2FzZSBWSURJT0NfU19DUk9QOiB7Ci0JCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7CisJLyogMTYtYml0IGZvcm1hdHMgaGF2ZSBpbnZlcnRlZCBsb2NhbCBhbHBoYSAqLworCWlmIChwaXhmbXQgPT0gMiB8fCBwaXhmbXQgPT0gMykKKwkJZmItPmNhcGFiaWxpdHkgfD0gVjRMMl9GQlVGX0NBUF9MT0NBTF9JTlZfQUxQSEE7CisJZWxzZQorCQlmYi0+Y2FwYWJpbGl0eSB8PSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0FMUEhBOwogCi0JCWlmIChjcm9wLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCSAgICAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpIHsKLQkJCWlmIChzdHJlYW10eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1lVVikgewotCQkJCXlpLT5tYWluX3JlY3QgPSBjcm9wLT5jOwotCQkJCXJldHVybiAwOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoIWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9GUkFNRUJVRkZFUl9XSU5ET1csIDQsCi0JCQkJCWNyb3AtPmMud2lkdGgsIGNyb3AtPmMuaGVpZ2h0LCBjcm9wLT5jLmxlZnQsIGNyb3AtPmMudG9wKSkgewotCQkJCQlpdHYtPm1haW5fcmVjdCA9IGNyb3AtPmM7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNhc2UgVklESU9DX0dfQ1JPUDogewotCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gYXJnOwotCi0JCWlmIChjcm9wLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCSAgICAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpIHsKLQkJCWlmIChzdHJlYW10eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1lVVikKLQkJCQljcm9wLT5jID0geWktPm1haW5fcmVjdDsKLQkJCWVsc2UKLQkJCQljcm9wLT5jID0gaXR2LT5tYWluX3JlY3Q7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljYXNlIFZJRElPQ19FTlVNX0ZNVDogewotCQlzdGF0aWMgc3RydWN0IHY0bDJfZm10ZGVzYyBmb3JtYXRzW10gPSB7Ci0JCQl7IDAsIDAsIDAsCi0JCQkgICJITTEyIChZVVYgNDoyOjApIiwgVjRMMl9QSVhfRk1UX0hNMTIsCi0JCQkgIHsgMCwgMCwgMCwgMCB9Ci0JCQl9LAotCQkJeyAxLCAwLCBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQsCi0JCQkgICJNUEVHIiwgVjRMMl9QSVhfRk1UX01QRUcsCi0JCQkgIHsgMCwgMCwgMCwgMCB9Ci0JCQl9Ci0JCX07Ci0JCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCA9IGFyZzsKLQkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBmbXQtPnR5cGU7Ci0KLQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0JCQlpZiAoIShpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKGZtdC0+aW5kZXggPiAxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCSpmbXQgPSBmb3JtYXRzW2ZtdC0+aW5kZXhdOwotCQlmbXQtPnR5cGUgPSB0eXBlOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX0lOUFVUOnsKLQkJKihpbnQgKilhcmcgPSBpdHYtPmFjdGl2ZV9pbnB1dDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfU19JTlBVVDp7Ci0JCWludCBpbnAgPSAqKGludCAqKWFyZzsKLQotCQlpZiAoaW5wIDwgMCB8fCBpbnAgPj0gaXR2LT5ub2ZfaW5wdXRzKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGlucCA9PSBpdHYtPmFjdGl2ZV9pbnB1dCkgewotCQkJSVZUVl9ERUJVR19JTkZPKCJJbnB1dCB1bmNoYW5nZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwKSB7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JCUlWVFZfREVCVUdfSU5GTygiQ2hhbmdpbmcgaW5wdXQgZnJvbSAlZCB0byAlZFxuIiwKLQkJCQlpdHYtPmFjdGl2ZV9pbnB1dCwgaW5wKTsKLQotCQlpdHYtPmFjdGl2ZV9pbnB1dCA9IGlucDsKLQkJLyogU2V0IHRoZSBhdWRpbyBpbnB1dCB0byB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlCi0JCSAgIGlucHV0IHR5cGUuICovCi0JCWl0di0+YXVkaW9faW5wdXQgPSBpdHYtPmNhcmQtPnZpZGVvX2lucHV0c1tpbnBdLmF1ZGlvX2luZGV4OwotCi0JCS8qIHByZXZlbnQgb3RoZXJzIGZyb20gbWVzc2luZyB3aXRoIHRoZSBzdHJlYW1zIHVudGlsCi0JCSAgIHdlJ3JlIGZpbmlzaGVkIGNoYW5naW5nIGlucHV0cy4gKi8KLQkJaXZ0dl9tdXRlKGl0dik7Ci0JCWl2dHZfdmlkZW9fc2V0X2lvKGl0dik7Ci0JCWl2dHZfYXVkaW9fc2V0X2lvKGl0dik7Ci0JCWl2dHZfdW5tdXRlKGl0dik7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0dfT1VUUFVUOnsKLQkJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJKihpbnQgKilhcmcgPSBpdHYtPmFjdGl2ZV9vdXRwdXQ7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX1NfT1VUUFVUOnsKLQkJaW50IG91dHAgPSAqKGludCAqKWFyZzsKLQkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQotCQlpZiAob3V0cCA+PSBpdHYtPmNhcmQtPm5vZl9vdXRwdXRzKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKG91dHAgPT0gaXR2LT5hY3RpdmVfb3V0cHV0KSB7Ci0JCQlJVlRWX0RFQlVHX0lORk8oIk91dHB1dCB1bmNoYW5nZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJSVZUVl9ERUJVR19JTkZPKCJDaGFuZ2luZyBvdXRwdXQgZnJvbSAlZCB0byAlZFxuIiwKLQkJCSAgIGl0di0+YWN0aXZlX291dHB1dCwgb3V0cCk7Ci0KLQkJaXR2LT5hY3RpdmVfb3V0cHV0ID0gb3V0cDsKLQkJcm91dGUuaW5wdXQgPSBTQUE3MTI3X0lOUFVUX1RZUEVfTk9STUFMOwotCQlyb3V0ZS5vdXRwdXQgPSBpdHYtPmNhcmQtPnZpZGVvX291dHB1dHNbb3V0cF0udmlkZW9fb3V0cHV0OwotCQlpdnR2X3NhYTcxMjcoaXR2LCBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywgJnJvdXRlKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6ewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKnZmID0gYXJnOwotCi0JCWlmICh2Zi0+dHVuZXIgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpdnR2X2NhbGxfaTJjX2NsaWVudHMoaXR2LCBjbWQsIGFyZyk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOnsKLQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5IHZmID0gKihzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKilhcmc7Ci0KLQkJaWYgKHZmLnR1bmVyICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpdnR2X211dGUoaXR2KTsKLQkJSVZUVl9ERUJVR19JTkZPKCJ2NGwyIGlvY3RsOiBzZXQgZnJlcXVlbmN5ICVkXG4iLCB2Zi5mcmVxdWVuY3kpOwotCQlpdnR2X2NhbGxfaTJjX2NsaWVudHMoaXR2LCBjbWQsICZ2Zik7Ci0JCWl2dHZfdW5tdXRlKGl0dik7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0VOVU1TVEQ6ewotCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqdnMgPSBhcmc7Ci0JCWludCBpZHggPSB2cy0+aW5kZXg7Ci0KLQkJaWYgKGlkeCA8IDAgfHwgaWR4ID49IEFSUkFZX1NJWkUoZW51bV9zdGRzKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCSp2cyA9IChlbnVtX3N0ZHNbaWR4XS5zdGQgJiBWNEwyX1NURF81MjVfNjApID8KLQkJCQlpdnR2X3N0ZF82MGh6IDogaXZ0dl9zdGRfNTBoejsKLQkJdnMtPmluZGV4ID0gaWR4OwotCQl2cy0+aWQgPSBlbnVtX3N0ZHNbaWR4XS5zdGQ7Ci0JCXN0cmxjcHkodnMtPm5hbWUsIGVudW1fc3Rkc1tpZHhdLm5hbWUsIHNpemVvZih2cy0+bmFtZSkpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX1NURDp7Ci0JCSoodjRsMl9zdGRfaWQgKikgYXJnID0gaXR2LT5zdGQ7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX1NfU1REOiB7Ci0JCXY0bDJfc3RkX2lkIHN0ZCA9ICoodjRsMl9zdGRfaWQgKikgYXJnOwotCi0JCWlmICgoc3RkICYgVjRMMl9TVERfQUxMKSA9PSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKHN0ZCA9PSBpdHYtPnN0ZCkKLQkJCWJyZWFrOwotCi0JCWlmICh0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSB8fAotCQkgICAgYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDAgfHwKLQkJICAgIGF0b21pY19yZWFkKCZpdHYtPmRlY29kaW5nKSA+IDApIHsKLQkJCS8qIFN3aXRjaGluZyBzdGFuZGFyZCB3b3VsZCB0dXJuIG9mZiB0aGUgcmFkaW8gb3IgbWVzcwotCQkJICAgd2l0aCBhbHJlYWR5IHJ1bm5pbmcgc3RyZWFtcywgcHJldmVudCB0aGF0IGJ5Ci0JCQkgICByZXR1cm5pbmcgRUJVU1kuICovCi0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJaXR2LT5zdGQgPSBzdGQ7Ci0JCWl0di0+aXNfNjBoeiA9IChzdGQgJiBWNEwyX1NURF81MjVfNjApID8gMSA6IDA7Ci0JCWl0di0+cGFyYW1zLmlzXzUwaHogPSBpdHYtPmlzXzUwaHogPSAhaXR2LT5pc182MGh6OwotCQlpdHYtPnBhcmFtcy53aWR0aCA9IDcyMDsKLQkJaXR2LT5wYXJhbXMuaGVpZ2h0ID0gaXR2LT5pc181MGh6ID8gNTc2IDogNDgwOwotCQlpdHYtPnZiaS5jb3VudCA9IGl0di0+aXNfNTBoeiA/IDE4IDogMTI7Ci0JCWl0di0+dmJpLnN0YXJ0WzBdID0gaXR2LT5pc181MGh6ID8gNiA6IDEwOwotCQlpdHYtPnZiaS5zdGFydFsxXSA9IGl0di0+aXNfNTBoeiA/IDMxOCA6IDI3MzsKLQkJaWYgKGl0di0+aHdfZmxhZ3MgJiBJVlRWX0hXX0NYMjU4NDApIHsKLQkJCWl0di0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IGl0di0+aXNfNjBoeiA/IDI3MiA6IDI4NDsKLQkJfQotCQlJVlRWX0RFQlVHX0lORk8oIlN3aXRjaGluZyBzdGFuZGFyZCB0byAlbGx4LlxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylpdHYtPnN0ZCk7Ci0KLQkJLyogVHVuZXIgKi8KLQkJaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVklESU9DX1NfU1RELCAmaXR2LT5zdGQpOwotCi0JCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7Ci0JCQkvKiBzZXQgZGlzcGxheSBzdGFuZGFyZCAqLwotCQkJaXR2LT5zdGRfb3V0ID0gc3RkOwotCQkJaXR2LT5pc19vdXRfNjBoeiA9IGl0di0+aXNfNjBoejsKLQkJCWl0di0+aXNfb3V0XzUwaHogPSBpdHYtPmlzXzUwaHo7Ci0JCQlpdnR2X2NhbGxfaTJjX2NsaWVudHMoaXR2LCBWSURJT0NfSU5UX1NfU1REX09VVFBVVCwgJml0di0+c3RkX291dCk7Ci0JCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfU1RBTkRBUkQsIDEsIGl0di0+aXNfb3V0XzUwaHopOwotCQkJaXR2LT5tYWluX3JlY3QubGVmdCA9IGl0di0+bWFpbl9yZWN0LnRvcCA9IDA7Ci0JCQlpdHYtPm1haW5fcmVjdC53aWR0aCA9IDcyMDsKLQkJCWl0di0+bWFpbl9yZWN0LmhlaWdodCA9IGl0di0+cGFyYW1zLmhlaWdodDsKLQkJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9GUkFNRUJVRkZFUl9XSU5ET1csIDQsCi0JCQkJNzIwLCBpdHYtPm1haW5fcmVjdC5oZWlnaHQsIDAsIDApOwotCQkJeWktPm1haW5fcmVjdCA9IGl0di0+bWFpbl9yZWN0OwotCQkJaWYgKCFpdHYtPm9zZF9pbmZvKSB7Ci0JCQkJeWktPm9zZF9mdWxsX3cgPSA3MjA7Ci0JCQkJeWktPm9zZF9mdWxsX2ggPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX1NfVFVORVI6IHsJLyogU2V0dGluZyB0dW5lciBjYW4gb25seSBzZXQgYXVkaW8gbW9kZSAqLwotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7Ci0KLQkJaWYgKHZ0LT5pbmRleCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVklESU9DX1NfVFVORVIsIHZ0KTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19UVU5FUjogewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7Ci0KLQkJaWYgKHZ0LT5pbmRleCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbWVtc2V0KHZ0LCAwLCBzaXplb2YoKnZ0KSk7Ci0JCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19HX1RVTkVSLCB2dCk7Ci0KLQkJaWYgKHRlc3RfYml0KElWVFZfRl9JX1JBRElPX1VTRVIsICZpdHYtPmlfZmxhZ3MpKSB7Ci0JCQlzdHJsY3B5KHZ0LT5uYW1lLCAiaXZ0diBSYWRpbyBUdW5lciIsIHNpemVvZih2dC0+bmFtZSkpOwotCQkJdnQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCQl9IGVsc2UgewotCQkJc3RybGNweSh2dC0+bmFtZSwgIml2dHYgVFYgVHVuZXIiLCBzaXplb2YodnQtPm5hbWUpKTsKLQkJCXZ0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDogewotCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqY2FwID0gYXJnOwotCQlpbnQgc2V0ID0gaXR2LT5pc181MGh6ID8gVjRMMl9TTElDRURfVkJJXzYyNSA6IFY0TDJfU0xJQ0VEX1ZCSV81MjU7Ci0JCWludCBmLCBsOwotCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IGNhcC0+dHlwZTsKLQotCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwotCQljYXAtPnR5cGUgPSB0eXBlOwotCQlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkgewotCQkJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgewotCQkJCWZvciAobCA9IDA7IGwgPCAyNDsgbCsrKSB7Ci0JCQkJCWlmICh2YWxpZF9zZXJ2aWNlX2xpbmUoZiwgbCwgaXR2LT5pc181MGh6KSkgewotCQkJCQkJY2FwLT5zZXJ2aWNlX2xpbmVzW2ZdW2xdID0gc2V0OwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCkgewotCQkJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVUKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChpdHYtPmlzXzYwaHopIHsKLQkJCQljYXAtPnNlcnZpY2VfbGluZXNbMF1bMjFdID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7Ci0JCQkJY2FwLT5zZXJ2aWNlX2xpbmVzWzFdWzIxXSA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OwotCQkJfSBlbHNlIHsKLQkJCQljYXAtPnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJCQljYXAtPnNlcnZpY2VfbGluZXNbMF1bMTZdID0gVjRMMl9TTElDRURfVlBTOwotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19FTkNfSU5ERVg6IHsKLQkJc3RydWN0IHY0bDJfZW5jX2lkeCAqaWR4ID0gYXJnOwotCQlzdHJ1Y3QgdjRsMl9lbmNfaWR4X2VudHJ5ICplID0gaWR4LT5lbnRyeTsKLQkJaW50IGVudHJpZXM7Ci0JCWludCBpOwotCi0JCWVudHJpZXMgPSAoaXR2LT5wZ21faW5mb193cml0ZV9pZHggKyBJVlRWX01BWF9QR01fSU5ERVggLSBpdHYtPnBnbV9pbmZvX3JlYWRfaWR4KSAlCi0JCQkJCUlWVFZfTUFYX1BHTV9JTkRFWDsKLQkJaWYgKGVudHJpZXMgPiBWNEwyX0VOQ19JRFhfRU5UUklFUykKLQkJCWVudHJpZXMgPSBWNEwyX0VOQ19JRFhfRU5UUklFUzsKLQkJaWR4LT5lbnRyaWVzID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgewotCQkJKmUgPSBpdHYtPnBnbV9pbmZvWyhpdHYtPnBnbV9pbmZvX3JlYWRfaWR4ICsgaSkgJSBJVlRWX01BWF9QR01fSU5ERVhdOwotCQkJaWYgKChlLT5mbGFncyAmIFY0TDJfRU5DX0lEWF9GUkFNRV9NQVNLKSA8PSBWNEwyX0VOQ19JRFhfRlJBTUVfQikgewotCQkJCWlkeC0+ZW50cmllcysrOwotCQkJCWUrKzsKLQkJCX0KLQkJfQotCQlpdHYtPnBnbV9pbmZvX3JlYWRfaWR4ID0gKGl0di0+cGdtX2luZm9fcmVhZF9pZHggKyBpZHgtPmVudHJpZXMpICUgSVZUVl9NQVhfUEdNX0lOREVYOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19FTkNPREVSX0NNRDoKLQljYXNlIFZJRElPQ19UUllfRU5DT0RFUl9DTUQ6IHsKLQkJc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQgKmVuYyA9IGFyZzsKLQkJaW50IHRyeSA9IGNtZCA9PSBWSURJT0NfVFJZX0VOQ09ERVJfQ01EOwotCi0JCW1lbXNldCgmZW5jLT5yYXcsIDAsIHNpemVvZihlbmMtPnJhdykpOwotCQlzd2l0Y2ggKGVuYy0+Y21kKSB7Ci0JCWNhc2UgVjRMMl9FTkNfQ01EX1NUQVJUOgotCQkJSVZUVl9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1NUQVJUXG4iKTsKLQkJCWVuYy0+ZmxhZ3MgPSAwOwotCQkJaWYgKHRyeSkKLQkJCQlyZXR1cm4gMDsKLQkJCXJldHVybiBpdnR2X3N0YXJ0X2NhcHR1cmUoaWQpOwotCi0JCWNhc2UgVjRMMl9FTkNfQ01EX1NUT1A6Ci0JCQlJVlRWX0RFQlVHX0lPQ1RMKCJWNEwyX0VOQ19DTURfU1RPUFxuIik7Ci0JCQllbmMtPmZsYWdzICY9IFY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQ7Ci0JCQlpZiAodHJ5KQotCQkJCXJldHVybiAwOwotCQkJaXZ0dl9zdG9wX2NhcHR1cmUoaWQsIGVuYy0+ZmxhZ3MgJiBWNEwyX0VOQ19DTURfU1RPUF9BVF9HT1BfRU5EKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgVjRMMl9FTkNfQ01EX1BBVVNFOgotCQkJSVZUVl9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1BBVVNFXG4iKTsKLQkJCWVuYy0+ZmxhZ3MgPSAwOwotCQkJaWYgKHRyeSkKLQkJCQlyZXR1cm4gMDsKLQkJCWlmICghYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSkKLQkJCQlyZXR1cm4gLUVQRVJNOwotCQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoSVZUVl9GX0lfRU5DX1BBVVNFRCwgJml0di0+aV9mbGFncykpCi0JCQkJcmV0dXJuIDA7Ci0JCQlpdnR2X211dGUoaXR2KTsKLQkJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX1BBVVNFX0VOQ09ERVIsIDEsIDApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWNEwyX0VOQ19DTURfUkVTVU1FOgotCQkJSVZUVl9ERUJVR19JT0NUTCgiVjRMMl9FTkNfQ01EX1JFU1VNRVxuIik7Ci0JCQllbmMtPmZsYWdzID0gMDsKLQkJCWlmICh0cnkpCi0JCQkJcmV0dXJuIDA7Ci0JCQlpZiAoIWF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykpCi0JCQkJcmV0dXJuIC1FUEVSTTsKLQkJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KElWVFZfRl9JX0VOQ19QQVVTRUQsICZpdHYtPmlfZmxhZ3MpKQotCQkJCXJldHVybiAwOwotCQkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9FTkNfUEFVU0VfRU5DT0RFUiwgMSwgMSk7Ci0JCQlpdnR2X3VubXV0ZShpdHYpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlJVlRWX0RFQlVHX0lPQ1RMKCJVbmtub3duIGNtZCAlZFxuIiwgZW5jLT5jbWQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19GQlVGOiB7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKLQkJaW50IHBpeGZtdDsKLQkJc3RhdGljIHUzMiBwaXhlbF9mb3JtYXRbMTZdID0gewotCQkJVjRMMl9QSVhfRk1UX1BBTDgsIC8qIFVzZXMgYSAyNTYtZW50cnkgUkdCIGNvbG9ybWFwICovCi0JCQlWNEwyX1BJWF9GTVRfUkdCNTY1LAotCQkJVjRMMl9QSVhfRk1UX1JHQjU1NSwKLQkJCVY0TDJfUElYX0ZNVF9SR0I0NDQsCi0JCQlWNEwyX1BJWF9GTVRfUkdCMzIsCi0JCQkwLAotCQkJMCwKLQkJCTAsCi0JCQlWNEwyX1BJWF9GTVRfUEFMOCwgLyogVXNlcyBhIDI1Ni1lbnRyeSBZVVYgY29sb3JtYXAgKi8KLQkJCVY0TDJfUElYX0ZNVF9ZVVY1NjUsCi0JCQlWNEwyX1BJWF9GTVRfWVVWNTU1LAotCQkJVjRMMl9QSVhfRk1UX1lVVjQ0NCwKLQkJCVY0TDJfUElYX0ZNVF9ZVVYzMiwKLQkJCTAsCi0JCQkwLAotCQkJMCwKLQkJfTsKLQotCQltZW1zZXQoZmIsIDAsIHNpemVvZigqZmIpKTsKLQkJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlmYi0+Y2FwYWJpbGl0eSA9IFY0TDJfRkJVRl9DQVBfRVhURVJOT1ZFUkxBWSB8IFY0TDJfRkJVRl9DQVBfQ0hST01BS0VZIHwKLQkJCVY0TDJfRkJVRl9DQVBfR0xPQkFMX0FMUEhBOwotCQlpdnR2X3ZhcGlfcmVzdWx0KGl0diwgZGF0YSwgQ1gyMzQxWF9PU0RfR0VUX1NUQVRFLCAwKTsKLQkJZGF0YVswXSB8PSAocmVhZF9yZWcoMHgyYTAwKSA+PiA3KSAmIDB4NDA7Ci0JCXBpeGZtdCA9IChkYXRhWzBdID4+IDMpICYgMHhmOwotCQlmYi0+Zm10LnBpeGVsZm9ybWF0ID0gcGl4ZWxfZm9ybWF0W3BpeGZtdF07Ci0JCWZiLT5mbXQud2lkdGggPSBpdHYtPm9zZF9yZWN0LndpZHRoOwotCQlmYi0+Zm10LmhlaWdodCA9IGl0di0+b3NkX3JlY3QuaGVpZ2h0OwotCQlmYi0+YmFzZSA9ICh2b2lkICopaXR2LT5vc2RfdmlkZW9fcGJhc2U7Ci0JCWlmIChpdHYtPm9zZF9jaHJvbWFfa2V5X3N0YXRlKQotCQkJZmItPmZsYWdzIHw9IFY0TDJfRkJVRl9GTEFHX0NIUk9NQUtFWTsKLQkJaWYgKGl0di0+b3NkX2dsb2JhbF9hbHBoYV9zdGF0ZSkKLQkJCWZiLT5mbGFncyB8PSBWNEwyX0ZCVUZfRkxBR19HTE9CQUxfQUxQSEE7Ci0JCXBpeGZtdCAmPSA3OwotCQkvKiBubyBsb2NhbCBhbHBoYSBmb3IgUkdCNTY1IG9yIHVua25vd24gZm9ybWF0cyAqLwotCQlpZiAocGl4Zm10ID09IDEgfHwgcGl4Zm10ID4gNCkKLQkJCWJyZWFrOworCWlmIChpdHYtPm9zZF9sb2NhbF9hbHBoYV9zdGF0ZSkgewogCQkvKiAxNi1iaXQgZm9ybWF0cyBoYXZlIGludmVydGVkIGxvY2FsIGFscGhhICovCiAJCWlmIChwaXhmbXQgPT0gMiB8fCBwaXhmbXQgPT0gMykKLQkJCWZiLT5jYXBhYmlsaXR5IHw9IFY0TDJfRkJVRl9DQVBfTE9DQUxfSU5WX0FMUEhBOworCQkJZmItPmZsYWdzIHw9IFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0lOVl9BTFBIQTsKIAkJZWxzZQotCQkJZmItPmNhcGFiaWxpdHkgfD0gVjRMMl9GQlVGX0NBUF9MT0NBTF9BTFBIQTsKLQkJaWYgKGl0di0+b3NkX2xvY2FsX2FscGhhX3N0YXRlKSB7Ci0JCQkvKiAxNi1iaXQgZm9ybWF0cyBoYXZlIGludmVydGVkIGxvY2FsIGFscGhhICovCi0JCQlpZiAocGl4Zm10ID09IDIgfHwgcGl4Zm10ID09IDMpCi0JCQkJZmItPmZsYWdzIHw9IFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0lOVl9BTFBIQTsKLQkJCWVsc2UKLQkJCQlmYi0+ZmxhZ3MgfD0gVjRMMl9GQlVGX0ZMQUdfTE9DQUxfQUxQSEE7Ci0JCX0KLQkJaWYgKHlpLT50cmFja19vc2QpCi0JCQlmYi0+ZmxhZ3MgfD0gVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWTsKLQkJYnJlYWs7CisJCQlmYi0+ZmxhZ3MgfD0gVjRMMl9GQlVGX0ZMQUdfTE9DQUxfQUxQSEE7CiAJfQorCWlmICh5aS0+dHJhY2tfb3NkKQorCQlmYi0+ZmxhZ3MgfD0gVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWTsKIAotCWNhc2UgVklESU9DX1NfRkJVRjogewotCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIgPSBhcmc7CisJcmV0dXJuIDA7Cit9CiAKLQkJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpdHYtPm9zZF9nbG9iYWxfYWxwaGFfc3RhdGUgPSAoZmItPmZsYWdzICYgVjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBKSAhPSAwOwotCQlpdHYtPm9zZF9sb2NhbF9hbHBoYV9zdGF0ZSA9Ci0JCQkoZmItPmZsYWdzICYgKFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0FMUEhBfFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0lOVl9BTFBIQSkpICE9IDA7Ci0JCWl0di0+b3NkX2Nocm9tYV9rZXlfc3RhdGUgPSAoZmItPmZsYWdzICYgVjRMMl9GQlVGX0ZMQUdfQ0hST01BS0VZKSAhPSAwOwotCQlpdnR2X3NldF9vc2RfYWxwaGEoaXR2KTsKLQkJeWktPnRyYWNrX29zZCA9IChmYi0+ZmxhZ3MgJiBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZKSAhPSAwOwotCQlicmVhazsKLQl9CitzdGF0aWMgaW50IGl2dHZfc19mYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7CisJc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7CisJc3RydWN0IHl1dl9wbGF5YmFja19pbmZvICp5aSA9ICZpdHYtPnl1dl9pbmZvOwogCi0JY2FzZSBWSURJT0NfT1ZFUkxBWTogewotCQlpbnQgKm9uID0gYXJnOwotCi0JCWlmICghKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVRfT1ZFUkxBWSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9PU0RfU0VUX1NUQVRFLCAxLCAqb24gIT0gMCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JewotCQlpbnQgaGFzX291dHB1dCA9IGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQ7Ci0JCXN0cnVjdCB2NGwyX2lucHV0IHZpZGluOwotCQlzdHJ1Y3QgdjRsMl9hdWRpbyBhdWRpbjsKLQkJaW50IGk7Ci0KLQkJSVZUVl9JTkZPKCI9PT09PT09PT09PT09PT09PSAgU1RBUlQgU1RBVFVTIENBUkQgIyVkICA9PT09PT09PT09PT09PT09PVxuIiwgaXR2LT5udW0pOwotCQlJVlRWX0lORk8oIlZlcnNpb246ICVzIENhcmQ6ICVzXG4iLCBJVlRWX1ZFUlNJT04sIGl0di0+Y2FyZF9uYW1lKTsKLQkJaWYgKGl0di0+aHdfZmxhZ3MgJiBJVlRWX0hXX1RWRUVQUk9NKSB7Ci0JCQlzdHJ1Y3QgdHZlZXByb20gdHY7Ci0KLQkJCWl2dHZfcmVhZF9lZXByb20oaXR2LCAmdHYpOwotCQl9Ci0JCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19MT0dfU1RBVFVTLCBOVUxMKTsKLQkJaXZ0dl9nZXRfaW5wdXQoaXR2LCBpdHYtPmFjdGl2ZV9pbnB1dCwgJnZpZGluKTsKLQkJaXZ0dl9nZXRfYXVkaW9faW5wdXQoaXR2LCBpdHYtPmF1ZGlvX2lucHV0LCAmYXVkaW4pOwotCQlJVlRWX0lORk8oIlZpZGVvIElucHV0OiAgJXNcbiIsIHZpZGluLm5hbWUpOwotCQlJVlRWX0lORk8oIkF1ZGlvIElucHV0OiAgJXMlc1xuIiwgYXVkaW4ubmFtZSwKLQkJCShpdHYtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSAmIH4weDMwMCkgPT0gMHgyMDAgPyAiIChCaWxpbmd1YWwpIiA6ICIiKTsKLQkJaWYgKGhhc19vdXRwdXQpIHsKLQkJCXN0cnVjdCB2NGwyX291dHB1dCB2aWRvdXQ7Ci0JCQlzdHJ1Y3QgdjRsMl9hdWRpb291dCBhdWRvdXQ7Ci0JCQlpbnQgbW9kZSA9IGl0di0+b3V0cHV0X21vZGU7Ci0JCQlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG91dHB1dF9tb2Rlc1s1XSA9IHsKLQkJCQkiTm9uZSIsCi0JCQkJIk1QRUcgU3RyZWFtaW5nIiwKLQkJCQkiWVVWIFN0cmVhbWluZyIsCi0JCQkJIllVViBGcmFtZXMiLAotCQkJCSJQYXNzdGhyb3VnaCIsCi0JCQl9OwotCQkJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdWRpb19tb2Rlc1s1XSA9IHsKLQkJCQkiU3RlcmVvIiwKLQkJCQkiTGVmdCIsCi0JCQkJIlJpZ2h0IiwKLQkJCQkiTW9ubyIsCi0JCQkJIlN3YXBwZWQiCi0JCQl9OwotCQkJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhbHBoYV9tb2RlWzRdID0gewotCQkJCSJOb25lIiwKLQkJCQkiR2xvYmFsIiwKLQkJCQkiTG9jYWwiLAotCQkJCSJHbG9iYWwgYW5kIExvY2FsIgotCQkJfTsKLQkJCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGl4ZWxfZm9ybWF0WzE2XSA9IHsKLQkJCQkiQVJHQiBJbmRleGVkIiwKLQkJCQkiUkdCIDU6Njo1IiwKLQkJCQkiQVJHQiAxOjU6NTo1IiwKLQkJCQkiQVJHQiAxOjQ6NDo0IiwKLQkJCQkiQVJHQiA4Ojg6ODo4IiwKLQkJCQkiNSIsCi0JCQkJIjYiLAotCQkJCSI3IiwKLQkJCQkiQVlVViBJbmRleGVkIiwKLQkJCQkiWVVWIDU6Njo1IiwKLQkJCQkiQVlVViAxOjU6NTo1IiwKLQkJCQkiQVlVViAxOjQ6NDo0IiwKLQkJCQkiQVlVViA4Ojg6ODo4IiwKLQkJCQkiMTMiLAotCQkJCSIxNCIsCi0JCQkJIjE1IiwKLQkJCX07Ci0KLQkJCWl2dHZfZ2V0X291dHB1dChpdHYsIGl0di0+YWN0aXZlX291dHB1dCwgJnZpZG91dCk7Ci0JCQlpdnR2X2dldF9hdWRpb19vdXRwdXQoaXR2LCAwLCAmYXVkb3V0KTsKLQkJCUlWVFZfSU5GTygiVmlkZW8gT3V0cHV0OiAlc1xuIiwgdmlkb3V0Lm5hbWUpOwotCQkJSVZUVl9JTkZPKCJBdWRpbyBPdXRwdXQ6ICVzIChTdGVyZW8vQmlsaW5ndWFsOiAlcy8lcylcbiIsIGF1ZG91dC5uYW1lLAotCQkJCWF1ZGlvX21vZGVzW2l0di0+YXVkaW9fc3RlcmVvX21vZGVdLAotCQkJCWF1ZGlvX21vZGVzW2l0di0+YXVkaW9fYmlsaW5ndWFsX21vZGVdKTsKLQkJCWlmIChtb2RlIDwgMCB8fCBtb2RlID4gT1VUX1BBU1NUSFJPVUdIKQotCQkJCW1vZGUgPSBPVVRfTk9ORTsKLQkJCUlWVFZfSU5GTygiT3V0cHV0IE1vZGU6ICAlc1xuIiwgb3V0cHV0X21vZGVzW21vZGVdKTsKLQkJCWl2dHZfdmFwaV9yZXN1bHQoaXR2LCBkYXRhLCBDWDIzNDFYX09TRF9HRVRfU1RBVEUsIDApOwotCQkJZGF0YVswXSB8PSAocmVhZF9yZWcoMHgyYTAwKSA+PiA3KSAmIDB4NDA7Ci0JCQlJVlRWX0lORk8oIk92ZXJsYXk6ICAgICAgJXMsIEFscGhhOiAlcywgUGl4ZWwgRm9ybWF0OiAlc1xuIiwKLQkJCQlkYXRhWzBdICYgMSA/ICJPbiIgOiAiT2ZmIiwKLQkJCQlhbHBoYV9tb2RlWyhkYXRhWzBdID4+IDEpICYgMHgzXSwKLQkJCQlwaXhlbF9mb3JtYXRbKGRhdGFbMF0gPj4gMykgJiAweGZdKTsKLQkJfQotCQlJVlRWX0lORk8oIlR1bmVyOiAgJXNcbiIsCi0JCQl0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSA/ICJSYWRpbyIgOiAiVFYiKTsKLQkJY3gyMzQxeF9sb2dfc3RhdHVzKCZpdHYtPnBhcmFtcywgaXR2LT5uYW1lKTsKLQkJSVZUVl9JTkZPKCJTdGF0dXMgZmxhZ3M6ICAgIDB4JTA4bHhcbiIsIGl0di0+aV9mbGFncyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBJVlRWX01BWF9TVFJFQU1TOyBpKyspIHsKLQkJCXN0cnVjdCBpdnR2X3N0cmVhbSAqcyA9ICZpdHYtPnN0cmVhbXNbaV07Ci0KLQkJCWlmIChzLT52NGwyZGV2ID09IE5VTEwgfHwgcy0+YnVmZmVycyA9PSAwKQotCQkJCWNvbnRpbnVlOwotCQkJSVZUVl9JTkZPKCJTdHJlYW0gJXM6IHN0YXR1cyAweCUwNGx4LCAlZCUlIG9mICVkIEtpQiAoJWQgYnVmZmVycykgaW4gdXNlXG4iLCBzLT5uYW1lLCBzLT5zX2ZsYWdzLAotCQkJCQkocy0+YnVmZmVycyAtIHMtPnFfZnJlZS5idWZmZXJzKSAqIDEwMCAvIHMtPmJ1ZmZlcnMsCi0JCQkJCShzLT5idWZmZXJzICogcy0+YnVmX3NpemUpIC8gMTAyNCwgcy0+YnVmZmVycyk7Ci0JCX0KLQkJSVZUVl9JTkZPKCJSZWFkIE1QRy9WQkk6ICVsbGQvJWxsZCBieXRlc1xuIiwgKGxvbmcgbG9uZylpdHYtPm1wZ19kYXRhX3JlY2VpdmVkLCAobG9uZyBsb25nKWl0di0+dmJpX2RhdGFfaW5zZXJ0ZWQpOwotCQlJVlRWX0lORk8oIj09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT09XG4iLCBpdHYtPm51bSk7Ci0JCWJyZWFrOwotCX0KLQotCWRlZmF1bHQ6CisJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFpdHYtPm9zZF92aWRlb19wYmFzZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpdHYtPm9zZF9nbG9iYWxfYWxwaGFfc3RhdGUgPSAoZmItPmZsYWdzICYgVjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBKSAhPSAwOworCWl0di0+b3NkX2xvY2FsX2FscGhhX3N0YXRlID0KKwkJKGZiLT5mbGFncyAmIChWNEwyX0ZCVUZfRkxBR19MT0NBTF9BTFBIQXxWNEwyX0ZCVUZfRkxBR19MT0NBTF9JTlZfQUxQSEEpKSAhPSAwOworCWl0di0+b3NkX2Nocm9tYV9rZXlfc3RhdGUgPSAoZmItPmZsYWdzICYgVjRMMl9GQlVGX0ZMQUdfQ0hST01BS0VZKSAhPSAwOworCWl2dHZfc2V0X29zZF9hbHBoYShpdHYpOworCXlpLT50cmFja19vc2QgPSAoZmItPmZsYWdzICYgVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWSkgIT0gMDsKKwlyZXR1cm4gaXZ0dl9nX2ZidWYoZmlsZSwgZmgsIGZiKTsKK30KKworc3RhdGljIGludCBpdnR2X292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgb24pCit7CisJc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKKworCWlmICghKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVRfT1ZFUkxBWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9PU0RfU0VUX1NUQVRFLCAxLCBvbiAhPSAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl2dHZfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgpCit7CisJc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OworCXUzMiBkYXRhW0NYMjM0MVhfTUJPWF9NQVhfREFUQV07CisKKwlpbnQgaGFzX291dHB1dCA9IGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQ7CisJc3RydWN0IHY0bDJfaW5wdXQgdmlkaW47CisJc3RydWN0IHY0bDJfYXVkaW8gYXVkaW47CisJaW50IGk7CisKKwlJVlRWX0lORk8oIj09PT09PT09PT09PT09PT09ICBTVEFSVCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09XG4iLCBpdHYtPm51bSk7CisJSVZUVl9JTkZPKCJWZXJzaW9uOiAlcyBDYXJkOiAlc1xuIiwgSVZUVl9WRVJTSU9OLCBpdHYtPmNhcmRfbmFtZSk7CisJaWYgKGl0di0+aHdfZmxhZ3MgJiBJVlRWX0hXX1RWRUVQUk9NKSB7CisJCXN0cnVjdCB0dmVlcHJvbSB0djsKKworCQlpdnR2X3JlYWRfZWVwcm9tKGl0diwgJnR2KTsKIAl9CisJaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCWl2dHZfZ2V0X2lucHV0KGl0diwgaXR2LT5hY3RpdmVfaW5wdXQsICZ2aWRpbik7CisJaXZ0dl9nZXRfYXVkaW9faW5wdXQoaXR2LCBpdHYtPmF1ZGlvX2lucHV0LCAmYXVkaW4pOworCUlWVFZfSU5GTygiVmlkZW8gSW5wdXQ6ICAlc1xuIiwgdmlkaW4ubmFtZSk7CisJSVZUVl9JTkZPKCJBdWRpbyBJbnB1dDogICVzJXNcbiIsIGF1ZGluLm5hbWUsCisJCShpdHYtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSAmIH4weDMwMCkgPT0gMHgyMDAgPyAiIChCaWxpbmd1YWwpIiA6ICIiKTsKKwlpZiAoaGFzX291dHB1dCkgeworCQlzdHJ1Y3QgdjRsMl9vdXRwdXQgdmlkb3V0OworCQlzdHJ1Y3QgdjRsMl9hdWRpb291dCBhdWRvdXQ7CisJCWludCBtb2RlID0gaXR2LT5vdXRwdXRfbW9kZTsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvdXRwdXRfbW9kZXNbNV0gPSB7CisJCQkiTm9uZSIsCisJCQkiTVBFRyBTdHJlYW1pbmciLAorCQkJIllVViBTdHJlYW1pbmciLAorCQkJIllVViBGcmFtZXMiLAorCQkJIlBhc3N0aHJvdWdoIiwKKwkJfTsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdWRpb19tb2Rlc1s1XSA9IHsKKwkJCSJTdGVyZW8iLAorCQkJIkxlZnQiLAorCQkJIlJpZ2h0IiwKKwkJCSJNb25vIiwKKwkJCSJTd2FwcGVkIgorCQl9OworCQlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFscGhhX21vZGVbNF0gPSB7CisJCQkiTm9uZSIsCisJCQkiR2xvYmFsIiwKKwkJCSJMb2NhbCIsCisJCQkiR2xvYmFsIGFuZCBMb2NhbCIKKwkJfTsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwaXhlbF9mb3JtYXRbMTZdID0geworCQkJIkFSR0IgSW5kZXhlZCIsCisJCQkiUkdCIDU6Njo1IiwKKwkJCSJBUkdCIDE6NTo1OjUiLAorCQkJIkFSR0IgMTo0OjQ6NCIsCisJCQkiQVJHQiA4Ojg6ODo4IiwKKwkJCSI1IiwKKwkJCSI2IiwKKwkJCSI3IiwKKwkJCSJBWVVWIEluZGV4ZWQiLAorCQkJIllVViA1OjY6NSIsCisJCQkiQVlVViAxOjU6NTo1IiwKKwkJCSJBWVVWIDE6NDo0OjQiLAorCQkJIkFZVVYgODo4Ojg6OCIsCisJCQkiMTMiLAorCQkJIjE0IiwKKwkJCSIxNSIsCisJCX07CisKKwkJaXZ0dl9nZXRfb3V0cHV0KGl0diwgaXR2LT5hY3RpdmVfb3V0cHV0LCAmdmlkb3V0KTsKKwkJaXZ0dl9nZXRfYXVkaW9fb3V0cHV0KGl0diwgMCwgJmF1ZG91dCk7CisJCUlWVFZfSU5GTygiVmlkZW8gT3V0cHV0OiAlc1xuIiwgdmlkb3V0Lm5hbWUpOworCQlJVlRWX0lORk8oIkF1ZGlvIE91dHB1dDogJXMgKFN0ZXJlby9CaWxpbmd1YWw6ICVzLyVzKVxuIiwgYXVkb3V0Lm5hbWUsCisJCQlhdWRpb19tb2Rlc1tpdHYtPmF1ZGlvX3N0ZXJlb19tb2RlXSwKKwkJCWF1ZGlvX21vZGVzW2l0di0+YXVkaW9fYmlsaW5ndWFsX21vZGVdKTsKKwkJaWYgKG1vZGUgPCAwIHx8IG1vZGUgPiBPVVRfUEFTU1RIUk9VR0gpCisJCQltb2RlID0gT1VUX05PTkU7CisJCUlWVFZfSU5GTygiT3V0cHV0IE1vZGU6ICAlc1xuIiwgb3V0cHV0X21vZGVzW21vZGVdKTsKKwkJaXZ0dl92YXBpX3Jlc3VsdChpdHYsIGRhdGEsIENYMjM0MVhfT1NEX0dFVF9TVEFURSwgMCk7CisJCWRhdGFbMF0gfD0gKHJlYWRfcmVnKDB4MmEwMCkgPj4gNykgJiAweDQwOworCQlJVlRWX0lORk8oIk92ZXJsYXk6ICAgICAgJXMsIEFscGhhOiAlcywgUGl4ZWwgRm9ybWF0OiAlc1xuIiwKKwkJCWRhdGFbMF0gJiAxID8gIk9uIiA6ICJPZmYiLAorCQkJYWxwaGFfbW9kZVsoZGF0YVswXSA+PiAxKSAmIDB4M10sCisJCQlwaXhlbF9mb3JtYXRbKGRhdGFbMF0gPj4gMykgJiAweGZdKTsKKwl9CisJSVZUVl9JTkZPKCJUdW5lcjogICVzXG4iLAorCQl0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSA/ICJSYWRpbyIgOiAiVFYiKTsKKwljeDIzNDF4X2xvZ19zdGF0dXMoJml0di0+cGFyYW1zLCBpdHYtPm5hbWUpOworCUlWVFZfSU5GTygiU3RhdHVzIGZsYWdzOiAgICAweCUwOGx4XG4iLCBpdHYtPmlfZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBJVlRWX01BWF9TVFJFQU1TOyBpKyspIHsKKwkJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gJml0di0+c3RyZWFtc1tpXTsKKworCQlpZiAocy0+djRsMmRldiA9PSBOVUxMIHx8IHMtPmJ1ZmZlcnMgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlJVlRWX0lORk8oIlN0cmVhbSAlczogc3RhdHVzIDB4JTA0bHgsICVkJSUgb2YgJWQgS2lCICglZCBidWZmZXJzKSBpbiB1c2VcbiIsIHMtPm5hbWUsIHMtPnNfZmxhZ3MsCisJCQkJKHMtPmJ1ZmZlcnMgLSBzLT5xX2ZyZWUuYnVmZmVycykgKiAxMDAgLyBzLT5idWZmZXJzLAorCQkJCShzLT5idWZmZXJzICogcy0+YnVmX3NpemUpIC8gMTAyNCwgcy0+YnVmZmVycyk7CisJfQorCisJSVZUVl9JTkZPKCJSZWFkIE1QRy9WQkk6ICVsbGQvJWxsZCBieXRlc1xuIiwgKGxvbmcgbG9uZylpdHYtPm1wZ19kYXRhX3JlY2VpdmVkLCAobG9uZyBsb25nKWl0di0+dmJpX2RhdGFfaW5zZXJ0ZWQpOworCUlWVFZfSU5GTygiPT09PT09PT09PT09PT09PT09ICBFTkQgU1RBVFVTIENBUkQgIyVkICA9PT09PT09PT09PT09PT09PT1cbiIsIGl0di0+bnVtKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDMzLDcgKzE1NDgsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChpdHYtPm91dHB1dF9tb2RlID09IE9VVF9VRE1BX1lVViAmJiBhcmdzLT55X3NvdXJjZSA9PSBOVUxMKQogCQkJcmV0dXJuIDA7Ci0JCWlmIChpdnR2X2NsYWltX3N0cmVhbShpZCwgaWQtPnR5cGUpKSB7CisJCWlmIChpdnR2X3N0YXJ0X2RlY29kaW5nKGlkLCBpZC0+dHlwZSkpIHsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJaWYgKGl2dHZfc2V0X291dHB1dF9tb2RlKGl0diwgT1VUX1VETUFfWVVWKSAhPSBPVVRfVURNQV9ZVVYpIHsKQEAgLTE2MDcsMTIxICsxNzIyLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXZ0dl92NGwyX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBpdnR2X2RlZmF1bHQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSAoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKLQlpbnQgcmV0OworCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKIAotCS8qIGNoZWNrIHByaW9yaXR5ICovCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQljYXNlIFZJRElPQ19TX09VVFBVVDoKLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCWNhc2UgVklESU9DX1NfRk1UOgotCWNhc2UgVklESU9DX1NfQ1JPUDoKLQljYXNlIFZJRElPQ19TX0FVRElPOgotCWNhc2UgVklESU9DX1NfQVVET1VUOgotCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTOgotCWNhc2UgVklESU9DX1NfRkJVRjoKLQljYXNlIFZJRElPQ19PVkVSTEFZOgotCQlyZXQgPSB2NGwyX3ByaW9fY2hlY2soJml0di0+cHJpbywgJmlkLT5wcmlvKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzogeworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKKworCQlpdnR2X2kyY19odyhpdHYsIGl0di0+Y2FyZC0+aHdfYXVkaW8sIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCByb3V0ZSk7CisJCWJyZWFrOwogCX0KIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6Ci0JY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6Ci0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgotCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6Ci0JY2FzZSBWSURJT0NfSU5UX1JFU0VUOgotCQlpZiAoaXZ0dl9kZWJ1ZyAmIElWVFZfREJHRkxHX0lPQ1RMKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJpdnR2JWQgaW9jdGw6ICIsIGl0di0+bnVtKTsKLQkJCXY0bF9wcmludGtfaW9jdGwoY21kKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQotCQlyZXR1cm4gaXZ0dl9kZWJ1Z19pb2N0bHMoZmlscCwgY21kLCBhcmcpOworCWNhc2UgVklESU9DX0lOVF9SRVNFVDogeworCQl1MzIgdmFsID0gKih1MzIgKilhcmc7CiAKLQljYXNlIFZJRElPQ19HX1BSSU9SSVRZOgotCWNhc2UgVklESU9DX1NfUFJJT1JJVFk6Ci0JY2FzZSBWSURJT0NfUVVFUllDQVA6Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQljYXNlIFZJRElPQ19FTlVNT1VUUFVUOgotCWNhc2UgVklESU9DX0dfT1VUUFVUOgotCWNhc2UgVklESU9DX1NfT1VUUFVUOgotCWNhc2UgVklESU9DX0dfRk1UOgotCWNhc2UgVklESU9DX1NfRk1UOgotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JY2FzZSBWSURJT0NfQ1JPUENBUDoKLQljYXNlIFZJRElPQ19HX0NST1A6Ci0JY2FzZSBWSURJT0NfU19DUk9QOgotCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCWNhc2UgVklESU9DX0VOVU1TVEQ6Ci0JY2FzZSBWSURJT0NfR19TVEQ6Ci0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JY2FzZSBWSURJT0NfU19UVU5FUjoKLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCWNhc2UgVklESU9DX0VOVU1BVURJTzoKLQljYXNlIFZJRElPQ19TX0FVRElPOgotCWNhc2UgVklESU9DX0dfQVVESU86Ci0JY2FzZSBWSURJT0NfRU5VTUFVRE9VVDoKLQljYXNlIFZJRElPQ19TX0FVRE9VVDoKLQljYXNlIFZJRElPQ19HX0FVRE9VVDoKLQljYXNlIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQOgotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JY2FzZSBWSURJT0NfR19FTkNfSU5ERVg6Ci0JY2FzZSBWSURJT0NfRU5DT0RFUl9DTUQ6Ci0JY2FzZSBWSURJT0NfVFJZX0VOQ09ERVJfQ01EOgotCWNhc2UgVklESU9DX0dfRkJVRjoKLQljYXNlIFZJRElPQ19TX0ZCVUY6Ci0JY2FzZSBWSURJT0NfT1ZFUkxBWToKLQkJaWYgKGl2dHZfZGVidWcgJiBJVlRWX0RCR0ZMR19JT0NUTCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXZ0diVkIGlvY3RsOiAiLCBpdHYtPm51bSk7Ci0JCQl2NGxfcHJpbnRrX2lvY3RsKGNtZCk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLQkJcmV0dXJuIGl2dHZfdjRsMl9pb2N0bHMoaXR2LCBmaWxwLCBjbWQsIGFyZyk7CisJCWlmICgodmFsID09IDAgJiYgaXR2LT5vcHRpb25zLm5ld2kyYykgfHwgKHZhbCAmIDB4MDEpKQorCQkJaXZ0dl9yZXNldF9pcl9ncGlvKGl0dik7CisJCWlmICh2YWwgJiAweDAyKQorCQkJaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIGNtZCwgTlVMTCk7CisJCWJyZWFrOworCX0KIAotCWNhc2UgVklESU9DX1FVRVJZTUVOVToKLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JY2FzZSBWSURJT0NfU19DVFJMOgotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKLQljYXNlIFZJRElPQ19HX0VYVF9DVFJMUzoKLQljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTOgotCQlpZiAoaXZ0dl9kZWJ1ZyAmIElWVFZfREJHRkxHX0lPQ1RMKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJpdnR2JWQgaW9jdGw6ICIsIGl0di0+bnVtKTsKLQkJCXY0bF9wcmludGtfaW9jdGwoY21kKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQotCQlyZXR1cm4gaXZ0dl9jb250cm9sX2lvY3RscyhpdHYsIGNtZCwgYXJnKTsKLQotCWNhc2UgSVZUVl9JT0NfRE1BX0ZSQU1FOgotCWNhc2UgVklERU9fR0VUX1BUUzoKLQljYXNlIFZJREVPX0dFVF9GUkFNRV9DT1VOVDoKLQljYXNlIFZJREVPX0dFVF9FVkVOVDoKLQljYXNlIFZJREVPX1BMQVk6Ci0JY2FzZSBWSURFT19TVE9QOgotCWNhc2UgVklERU9fRlJFRVpFOgotCWNhc2UgVklERU9fQ09OVElOVUU6Ci0JY2FzZSBWSURFT19DT01NQU5EOgotCWNhc2UgVklERU9fVFJZX0NPTU1BTkQ6Ci0JCXJldHVybiBpdnR2X2RlY29kZXJfaW9jdGxzKGZpbHAsIGNtZCwgYXJnKTsKLQotCWNhc2UgMHgwMDAwNTQwMToJLyogSGFuZGxlIGlzYXR0eSgpIGNhbGxzICovCi0JCXJldHVybiAtRUlOVkFMOwogCWRlZmF1bHQ6Ci0JCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSwgZmlscCwgY21kLCBhcmcsCi0JCQkJCQkgICBpdnR2X3Y0bDJfZG9faW9jdGwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzI5LDcgKzE3NTMsMTEgQEAKIHN0YXRpYyBpbnQgaXZ0dl9zZXJpYWxpemVkX2lvY3RsKHN0cnVjdCBpdnR2ICppdHYsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQkvKiBGaWx0ZXIgZHZiIGlvY3RscyB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHZpZGVvX3VzZXJjb3B5ICovCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKwlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmlscC0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwkvKiBGaWx0ZXIgZHZiIGlvY3RscyB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoZSB2NGwgaW9jdGwgZnJhbWV3b3JrICovCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFZJREVPX1NFTEVDVF9TT1VSQ0U6CiAJCUlWVFZfREVCVUdfSU9DVEwoIlZJREVPX1NFTEVDVF9TT1VSQ0VcbiIpOwpAQCAtMTc1OCwxMCArMTc4Niw0NyBAQAogCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfQVVESU9fTU9ERSwgMiwgaXR2LT5hdWRpb19iaWxpbmd1YWxfbW9kZSwgaXR2LT5hdWRpb19zdGVyZW9fbW9kZSk7CiAJCXJldHVybiAwOwogCisJY2FzZSBJVlRWX0lPQ19ETUFfRlJBTUU6CisJY2FzZSBWSURFT19HRVRfUFRTOgorCWNhc2UgVklERU9fR0VUX0ZSQU1FX0NPVU5UOgorCWNhc2UgVklERU9fR0VUX0VWRU5UOgorCWNhc2UgVklERU9fUExBWToKKwljYXNlIFZJREVPX1NUT1A6CisJY2FzZSBWSURFT19GUkVFWkU6CisJY2FzZSBWSURFT19DT05USU5VRToKKwljYXNlIFZJREVPX0NPTU1BTkQ6CisJY2FzZSBWSURFT19UUllfQ09NTUFORDoKKwkJcmV0dXJuIGl2dHZfZGVjb2Rlcl9pb2N0bHMoZmlscCwgY21kLCAodm9pZCAqKWFyZyk7CisKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxwLCBjbWQsIGFyZywgaXZ0dl92NGwyX2RvX2lvY3RsKTsKKworCS8qIGNoZWNrIHByaW9yaXR5ICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19TX0NUUkw6CisJY2FzZSBWSURJT0NfU19TVEQ6CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwljYXNlIFZJRElPQ19TX09VVFBVVDoKKwljYXNlIFZJRElPQ19TX1RVTkVSOgorCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgorCWNhc2UgVklESU9DX1NfRk1UOgorCWNhc2UgVklESU9DX1NfQ1JPUDoKKwljYXNlIFZJRElPQ19TX0FVRElPOgorCWNhc2UgVklESU9DX1NfQVVET1VUOgorCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTOgorCWNhc2UgVklESU9DX1NfRkJVRjoKKwljYXNlIFZJRElPQ19PVkVSTEFZOgorCQlyZXQgPSB2NGwyX3ByaW9fY2hlY2soJml0di0+cHJpbywgJmlkLT5wcmlvKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGl2dHZfZGVidWcgJiBJVlRWX0RCR0ZMR19JT0NUTCkKKwkJdmZkLT5kZWJ1ZyA9IFY0TDJfREVCVUdfSU9DVEwgfCBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsKKwlyZXQgPSB2aWRlb19pb2N0bDIoaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKKwl2ZmQtPmRlYnVnID0gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgaXZ0dl92NGwyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtMTc3NiwzICsxODQxLDcwIEBACiAJbXV0ZXhfdW5sb2NrKCZpdHYtPnNlcmlhbGl6ZV9sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQorCit2b2lkIGl2dHZfc2V0X2Z1bmNzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJdmRldi0+dmlkaW9jX3F1ZXJ5Y2FwICAgICAJICAgID0gaXZ0dl9xdWVyeWNhcDsKKwl2ZGV2LT52aWRpb2NfZ19wcmlvcml0eSAgIAkgICAgPSBpdnR2X2dfcHJpb3JpdHk7CisJdmRldi0+dmlkaW9jX3NfcHJpb3JpdHkgICAJICAgID0gaXZ0dl9zX3ByaW9yaXR5OworCXZkZXYtPnZpZGlvY19zX2F1ZGlvICAgICAgCSAgICA9IGl2dHZfc19hdWRpbzsKKwl2ZGV2LT52aWRpb2NfZ19hdWRpbyAgICAgIAkgICAgPSBpdnR2X2dfYXVkaW87CisJdmRldi0+dmlkaW9jX2VudW1hdWRpbyAgIAkgICAgPSBpdnR2X2VudW1hdWRpbzsKKwl2ZGV2LT52aWRpb2Nfc19hdWRvdXQgICAgIAkgICAgPSBpdnR2X3NfYXVkb3V0OworCXZkZXYtPnZpZGlvY19nX2F1ZG91dCAgICAgCSAgICA9IGl2dHZfZ19hdWRvdXQ7CisJdmRldi0+dmlkaW9jX2VudW1faW5wdXQgICAJICAgID0gaXZ0dl9lbnVtX2lucHV0OworCXZkZXYtPnZpZGlvY19lbnVtX291dHB1dCAgIAkgICAgPSBpdnR2X2VudW1fb3V0cHV0OworCXZkZXYtPnZpZGlvY19lbnVtYXVkb3V0ICAgCSAgICA9IGl2dHZfZW51bWF1ZG91dDsKKwl2ZGV2LT52aWRpb2NfY3JvcGNhcCAgICAgICAJICAgID0gaXZ0dl9jcm9wY2FwOworCXZkZXYtPnZpZGlvY19zX2Nyb3AgICAgICAgCSAgICA9IGl2dHZfc19jcm9wOworCXZkZXYtPnZpZGlvY19nX2Nyb3AgICAgICAgCSAgICA9IGl2dHZfZ19jcm9wOworCXZkZXYtPnZpZGlvY19nX2lucHV0ICAgICAgCSAgICA9IGl2dHZfZ19pbnB1dDsKKwl2ZGV2LT52aWRpb2Nfc19pbnB1dCAgICAgIAkgICAgPSBpdnR2X3NfaW5wdXQ7CisJdmRldi0+dmlkaW9jX2dfb3V0cHV0ICAgICAJICAgID0gaXZ0dl9nX291dHB1dDsKKwl2ZGV2LT52aWRpb2Nfc19vdXRwdXQgICAgIAkgICAgPSBpdnR2X3Nfb3V0cHV0OworCXZkZXYtPnZpZGlvY19nX2ZyZXF1ZW5jeSAJICAgID0gaXZ0dl9nX2ZyZXF1ZW5jeTsKKwl2ZGV2LT52aWRpb2Nfc19mcmVxdWVuY3kgIAkgICAgPSBpdnR2X3NfZnJlcXVlbmN5OworCXZkZXYtPnZpZGlvY19zX3R1bmVyICAgICAgCSAgICA9IGl2dHZfc190dW5lcjsKKwl2ZGV2LT52aWRpb2NfZ190dW5lciAgICAgIAkgICAgPSBpdnR2X2dfdHVuZXI7CisJdmRldi0+dmlkaW9jX2dfZW5jX2luZGV4IAkgICAgPSBpdnR2X2dfZW5jX2luZGV4OworCXZkZXYtPnZpZGlvY19nX2ZidWYJCSAgICA9IGl2dHZfZ19mYnVmOworCXZkZXYtPnZpZGlvY19zX2ZidWYJCSAgICA9IGl2dHZfc19mYnVmOworCXZkZXYtPnZpZGlvY19nX3N0ZCAJCSAgICA9IGl2dHZfZ19zdGQ7CisJdmRldi0+dmlkaW9jX3Nfc3RkIAkJICAgID0gaXZ0dl9zX3N0ZDsKKwl2ZGV2LT52aWRpb2Nfb3ZlcmxheQkJICAgID0gaXZ0dl9vdmVybGF5OworCXZkZXYtPnZpZGlvY19sb2dfc3RhdHVzCQkgICAgPSBpdnR2X2xvZ19zdGF0dXM7CisJdmRldi0+dmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgCSAgICA9IGl2dHZfZW51bV9mbXRfdmlkX2NhcDsKKwl2ZGV2LT52aWRpb2NfZW5jb2Rlcl9jbWQgIAkgICAgPSBpdnR2X2VuY29kZXJfY21kOworCXZkZXYtPnZpZGlvY190cnlfZW5jb2Rlcl9jbWQgCSAgICA9IGl2dHZfdHJ5X2VuY29kZXJfY21kOworCXZkZXYtPnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0ICAgICAgID0gaXZ0dl9lbnVtX2ZtdF92aWRfb3V0OworCXZkZXYtPnZpZGlvY19nX2ZtdF92aWRfY2FwICAJICAgID0gaXZ0dl9nX2ZtdF92aWRfY2FwOworCXZkZXYtPnZpZGlvY19nX2ZtdF92YmlfY2FwCSAgICA9IGl2dHZfZ19mbXRfdmJpX2NhcDsKKwl2ZGV2LT52aWRpb2NfZ19mbXRfc2xpY2VkX3ZiaV9jYXAgICA9IGl2dHZfZ19mbXRfc2xpY2VkX3ZiaV9jYXA7CisJdmRldi0+dmlkaW9jX2dfZm10X3ZpZF9vdXQgICAgICAgICAgPSBpdnR2X2dfZm10X3ZpZF9vdXQ7CisJdmRldi0+dmlkaW9jX2dfZm10X3ZpZF9vdXRfb3ZlcmxheSAgPSBpdnR2X2dfZm10X3ZpZF9vdXRfb3ZlcmxheTsKKwl2ZGV2LT52aWRpb2NfZ19mbXRfc2xpY2VkX3ZiaV9vdXQgICA9IGl2dHZfZ19mbXRfc2xpY2VkX3ZiaV9vdXQ7CisJdmRldi0+dmlkaW9jX3NfZm10X3ZpZF9jYXAgIAkgICAgPSBpdnR2X3NfZm10X3ZpZF9jYXA7CisJdmRldi0+dmlkaW9jX3NfZm10X3ZiaV9jYXAgCSAgICA9IGl2dHZfc19mbXRfdmJpX2NhcDsKKwl2ZGV2LT52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9jYXAgICA9IGl2dHZfc19mbXRfc2xpY2VkX3ZiaV9jYXA7CisJdmRldi0+dmlkaW9jX3NfZm10X3ZpZF9vdXQgICAgICAgICAgPSBpdnR2X3NfZm10X3ZpZF9vdXQ7CisJdmRldi0+dmlkaW9jX3NfZm10X3ZpZF9vdXRfb3ZlcmxheSAgPSBpdnR2X3NfZm10X3ZpZF9vdXRfb3ZlcmxheTsKKwl2ZGV2LT52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9vdXQgICA9IGl2dHZfc19mbXRfc2xpY2VkX3ZiaV9vdXQ7CisJdmRldi0+dmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAgCSAgICA9IGl2dHZfdHJ5X2ZtdF92aWRfY2FwOworCXZkZXYtPnZpZGlvY190cnlfZm10X3ZiaV9jYXAJICAgID0gaXZ0dl90cnlfZm10X3ZiaV9jYXA7CisJdmRldi0+dmlkaW9jX3RyeV9mbXRfc2xpY2VkX3ZiaV9jYXAgPSBpdnR2X3RyeV9mbXRfc2xpY2VkX3ZiaV9jYXA7CisJdmRldi0+dmlkaW9jX3RyeV9mbXRfdmlkX291dCAgICAgICAgPSBpdnR2X3RyeV9mbXRfdmlkX291dDsKKwl2ZGV2LT52aWRpb2NfdHJ5X2ZtdF92aWRfb3V0X292ZXJsYXkgPSBpdnR2X3RyeV9mbXRfdmlkX291dF9vdmVybGF5OworCXZkZXYtPnZpZGlvY190cnlfZm10X3NsaWNlZF92Ymlfb3V0ID0gaXZ0dl90cnlfZm10X3NsaWNlZF92Ymlfb3V0OworCXZkZXYtPnZpZGlvY19nX3NsaWNlZF92YmlfY2FwIAkgICAgPSBpdnR2X2dfc2xpY2VkX3ZiaV9jYXA7CisJdmRldi0+dmlkaW9jX2dfY2hpcF9pZGVudCAJICAgID0gaXZ0dl9nX2NoaXBfaWRlbnQ7CisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCXZkZXYtPnZpZGlvY19nX3JlZ2lzdGVyIAkgICAgPSBpdnR2X2dfcmVnaXN0ZXI7CisJdmRldi0+dmlkaW9jX3NfcmVnaXN0ZXIgCSAgICA9IGl2dHZfc19yZWdpc3RlcjsKKyNlbmRpZgorCXZkZXYtPnZpZGlvY19kZWZhdWx0IAkJICAgID0gaXZ0dl9kZWZhdWx0OworCXZkZXYtPnZpZGlvY19xdWVyeWN0cmwgCQkgICAgPSBpdnR2X3F1ZXJ5Y3RybDsKKwl2ZGV2LT52aWRpb2NfcXVlcnltZW51IAkJICAgID0gaXZ0dl9xdWVyeW1lbnU7CisJdmRldi0+dmlkaW9jX2dfZXh0X2N0cmxzICAgIAkgICAgPSBpdnR2X2dfZXh0X2N0cmxzOworCXZkZXYtPnZpZGlvY19zX2V4dF9jdHJscyAgICAJICAgID0gaXZ0dl9zX2V4dF9jdHJsczsKKwl2ZGV2LT52aWRpb2NfdHJ5X2V4dF9jdHJscyAgICAJICAgID0gaXZ0dl90cnlfZXh0X2N0cmxzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmgKaW5kZXggNGU2N2YwZS4uNzAxODg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5oCkBAIC0yNCwxMCArMjQsMTMgQEAKIHUxNiBpdnR2X3NlcnZpY2UydmJpKGludCB0eXBlKTsKIHZvaWQgaXZ0dl9leHBhbmRfc2VydmljZV9zZXQoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCwgaW50IGlzX3BhbCk7CiB1MTYgaXZ0dl9nZXRfc2VydmljZV9zZXQoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCk7Ci1pbnQgaXZ0dl92NGwyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpOwotaW50IGl2dHZfdjRsMl9pb2N0bHMoc3RydWN0IGl2dHYgKml0diwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiB2b2lkIGl2dHZfc2V0X29zZF9hbHBoYShzdHJ1Y3QgaXZ0diAqaXR2KTsKIGludCBpdnR2X3NldF9zcGVlZChzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgc3BlZWQpOwordm9pZCBpdnR2X3NldF9mdW5jcyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KTsKK2ludCBpdnR2X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCk7CitpbnQgaXZ0dl9zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqdmYpOworaW50IGl2dHZfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnApOworaW50IGl2dHZfdjRsMl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKaW5kZXggYzg1NDI4NS4uZjg4ODNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwpAQCAtMjIwLDcgKzIyMCw4IEBACiAJcy0+djRsMmRldi0+ZGV2ID0gJml0di0+ZGV2LT5kZXY7CiAJcy0+djRsMmRldi0+Zm9wcyA9IGl2dHZfc3RyZWFtX2luZm9bdHlwZV0uZm9wczsKIAlzLT52NGwyZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0KKwlzLT52NGwyZGV2LT50dm5vcm1zID0gVjRMMl9TVERfQUxMOworCWl2dHZfc2V0X2Z1bmNzKHMtPnY0bDJkZXYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKaW5kZXggNzNiZTE1NC4uYmRmZGE0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYwpAQCAtMzY3LDYgKzM2Nyw4OCBAQAogCXJldHVybiBpdnR2ZmJfcHJlcF9kZWNfZG1hX3RvX2RldmljZShpdHYsIGRlc3Rfb2Zmc2V0LCBzb3VyY2UsIGNvdW50KTsKIH0KIAorc3RhdGljIHNzaXplX3QgaXZ0dmZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOworCXZvaWQgKmRzdDsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemU7CisJc3RydWN0IGl2dHYgKml0diA9IChzdHJ1Y3QgaXZ0diAqKSBpbmZvLT5wYXI7CisJdW5zaWduZWQgbG9uZyBkbWFfb2Zmc2V0ID0KKwkJCUlWVFZfREVDT0RFUl9PRkZTRVQgKyBpdHYtPm9zZF9pbmZvLT52aWRlb19yYmFzZTsKKwl1bnNpZ25lZCBsb25nIGRtYV9zaXplOworCXUxNiBsZWFkID0gMCwgdGFpbCA9IDA7CisKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybiAtRVBFUk07CisKKwl0b3RhbF9zaXplID0gaW5mby0+c2NyZWVuX3NpemU7CisKKwlpZiAodG90YWxfc2l6ZSA9PSAwKQorCQl0b3RhbF9zaXplID0gaW5mby0+Zml4LnNtZW1fbGVuOworCisJaWYgKHAgPiB0b3RhbF9zaXplKQorCQlyZXR1cm4gLUVGQklHOworCisJaWYgKGNvdW50ID4gdG90YWxfc2l6ZSkgeworCQllcnIgPSAtRUZCSUc7CisJCWNvdW50ID0gdG90YWxfc2l6ZTsKKwl9CisKKwlpZiAoY291bnQgKyBwID4gdG90YWxfc2l6ZSkgeworCQlpZiAoIWVycikKKwkJCWVyciA9IC1FTk9TUEM7CisKKwkJY291bnQgPSB0b3RhbF9zaXplIC0gcDsKKwl9CisKKwlkc3QgPSAodm9pZCBfX2ZvcmNlICopIChpbmZvLT5zY3JlZW5fYmFzZSArIHApOworCisJaWYgKGluZm8tPmZib3BzLT5mYl9zeW5jKQorCQlpbmZvLT5mYm9wcy0+ZmJfc3luYyhpbmZvKTsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWYsIGNvdW50KSkgeworCQlJVlRWRkJfV0FSTigiSW52YWxpZCB1c2Vyc3BhY2UgcG9pbnRlciAweCUwOGx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpYnVmKTsKKwkJZXJyID0gLUVGQVVMVDsKKwl9CisKKwlpZiAoIWVycikgeworCQkvKiBJZiB0cmFuc2ZlciBzaXplID4gdGhyZXNob2xkIGFuZCBib3RoIHNyYy9kc3QKKwkJYWRkcmVzc2VzIGFyZSBhbGlnbmVkLCB1c2UgRE1BICovCisJCWlmIChjb3VudCA+PSA0MDk2ICYmCisJCSAgICAoKHVuc2lnbmVkIGxvbmcpYnVmICYgMykgPT0gKCh1bnNpZ25lZCBsb25nKWRzdCAmIDMpKSB7CisJCQkvKiBPZGQgYWRkcmVzcyA9IGNhbid0IERNQS4gQWxpZ24gKi8KKwkJCWlmICgodW5zaWduZWQgbG9uZylkc3QgJiAzKSB7CisJCQkJbGVhZCA9IDQgLSAoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMyk7CisJCQkJbWVtY3B5KGRzdCwgYnVmLCBsZWFkKTsKKwkJCQlidWYgKz0gbGVhZDsKKwkJCQlkc3QgKz0gbGVhZDsKKwkJCX0KKwkJCS8qIERNQSByZXNvbHV0aW9uIGlzIDMyIGJpdHMgKi8KKwkJCWlmICgoY291bnQgLSBsZWFkKSAmIDMpCisJCQkJdGFpbCA9IChjb3VudCAtIGxlYWQpICYgMzsKKwkJCS8qIERNQSB0aGUgZGF0YSAqLworCQkJZG1hX3NpemUgPSBjb3VudCAtIGxlYWQgLSB0YWlsOworCQkJZXJyID0gaXZ0dmZiX3ByZXBfZGVjX2RtYV90b19kZXZpY2UoaXR2LAorCQkJICAgICAgIHAgKyBsZWFkICsgZG1hX29mZnNldCwgKHZvaWQgKilidWYsIGRtYV9zaXplKTsKKwkJCWRzdCArPSBkbWFfc2l6ZTsKKwkJCWJ1ZiArPSBkbWFfc2l6ZTsKKwkJCS8qIENvcHkgYW55IGxlZnRvdmVyIGRhdGEgKi8KKwkJCWlmICh0YWlsKQorCQkJCW1lbWNweShkc3QsIGJ1ZiwgdGFpbCk7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoZHN0LCBidWYsIGNvdW50KTsKKwkJfQorCX0KKworCWlmICAoIWVycikKKwkJKnBwb3MgKz0gY291bnQ7CisKKwlyZXR1cm4gKGVycikgPyBlcnIgOiBjb3VudDsKK30KKwogc3RhdGljIGludCBpdnR2ZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCURFRklORV9XQUlUKHdhaXQpOwpAQCAtNzA4LDYgKzc5MCw5IEBACiAJZWxzZQogCQl2YXItPnBpeGNsb2NrID0gcGl4Y2xvY2s7CiAKKwlpdHYtPm9zZF9yZWN0LndpZHRoID0gdmFyLT54cmVzOworCWl0di0+b3NkX3JlY3QuaGVpZ2h0ID0gdmFyLT55cmVzOworCiAJSVZUVkZCX0RFQlVHX0lORk8oIkRpc3BsYXkgc2l6ZTogJWR4JWQgKHZpcnR1YWwgJWR4JWQpIEAgJWRicHBcbiIsCiAJCSAgICAgIHZhci0+eHJlcywgdmFyLT55cmVzLAogCQkgICAgICB2YXItPnhyZXNfdmlydHVhbCwgdmFyLT55cmVzX3ZpcnR1YWwsCkBAIC04MjQsNiArOTA5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgaXZ0dmZiX29wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfd3JpdGUgICAgICAgPSBpdnR2ZmJfd3JpdGUsCiAJLmZiX2NoZWNrX3ZhciAgID0gaXZ0dmZiX2NoZWNrX3ZhciwKIAkuZmJfc2V0X3BhciAgICAgPSBpdnR2ZmJfc2V0X3BhciwKIAkuZmJfc2V0Y29scmVnICAgPSBpdnR2ZmJfc2V0Y29scmVnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMKaW5kZXggOGUwMTYwZC4uMzliZjZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jCkBAIC0xNzEsNCArMTcxLDMgQEAKIAkucmVtb3ZlID0gbTUyNzkwX3JlbW92ZSwKIAkuaWRfdGFibGUgPSBtNTI3OTBfaWQsCiB9OwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCmluZGV4IGU3Y2NiYzguLjJmYjU4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCkBAIC0xMjUzLDcgKzEyNTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKIAlpZiAoZi0+aW5kZXggPiAxKQpAQCAtMTI4Myw3ICsxMjgzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQpAQCAtMTMxNiw3ICsxMzE2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM0Niw3ICsxMzQ3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTcwOSwxMCArMTcxMSwxMCBAQAogCS52aWRpb2NfcXVlcnljdHJsCT0gdmlkaW9jX3F1ZXJ5Y3RybCwKIAkudmlkaW9jX3NfY3RybAkJPSB2aWRpb2Nfc19jdHJsLAogCS52aWRpb2NfZ19jdHJsCQk9IHZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19lbnVtX2ZtdF9jYXAJPSB2aWRpb2NfZW51bV9mbXRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF9jYXAJPSB2aWRpb2NfdHJ5X2ZtdF9jYXAsCi0JLnZpZGlvY19nX2ZtdF9jYXAJPSB2aWRpb2NfZ19mbXRfY2FwLAotCS52aWRpb2Nfc19mbXRfY2FwCT0gdmlkaW9jX3NfZm10X2NhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcAk9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwCT0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwCT0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCiAJLnZpZGlvY19yZXFidWZzCQk9IHZpZGlvY19yZXFidWZzLAogCS52aWRpb2NfcXVlcnlidWYJPSB2aWRpb2NfcXVlcnlidWYsCiAJLnZpZGlvY19xYnVmCQk9IHZpZGlvY19xYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCmluZGV4IDMxMGRiYWIuLjU2OTFlMDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCkBAIC0xMTAsNiArMTEwLDcgQEAKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODAgPj4gMSwgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OworCiBJMkNfQ0xJRU5UX0lOU01PRDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTMzMyw3ICszMzQsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotCiBzdGF0aWMgdm9pZCBtc3Bfd2FrZV90aHJlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwpAQCAtMTAwNCw3ICsxMDA0LDYgQEAKIAkuaWRfdGFibGUgPSBtc3BfaWQsCiB9OwogCi0KIC8qCiAgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYwppbmRleCA3ZjU1Njg1Li4xNjIyZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYwpAQCAtNDgwLDcgKzQ4MCw2IEBACiAJc3RydWN0IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0ICpjZDsKIAlpbnQgY291bnQsIG1heDEsIG1heDIsIHZhbDEsIHZhbDIsIHZhbCwgaTsKIAotCiAJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgIm1zcDM0MDAgZGFlbW9uIHN0YXJ0ZWRcbiIpOwogCXNldF9mcmVlemFibGUoKTsKIAlmb3IgKDs7KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IDE2NThmZTUuLmIzMWJhNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC04MTUsNyArODE1LDYgQEAKIAogCXJldHVybiAwOwogfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbXQ5djAyMl9pZFtdID0gewogCXsgIm10OXYwMjIiLCAwIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYwppbmRleCBkN2JmZDMwLi5lYTAzMmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKQEAgLTY4MiwxNyArNjgyLDE3IEBACiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTl9PVjc2NzBfRk1UUzsgaW5kZXgrKykKIAkJaWYgKG92NzY3MF9mb3JtYXRzW2luZGV4XS5waXhlbGZvcm1hdCA9PSBwaXgtPnBpeGVsZm9ybWF0KQogCQkJYnJlYWs7Ci0JaWYgKGluZGV4ID49IE5fT1Y3NjcwX0ZNVFMpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChpbmRleCA+PSBOX09WNzY3MF9GTVRTKSB7CisJCS8qIGRlZmF1bHQgdG8gZmlyc3QgZm9ybWF0ICovCisJCWluZGV4ID0gMDsKKwkJcGl4LT5waXhlbGZvcm1hdCA9IG92NzY3MF9mb3JtYXRzWzBdLnBpeGVsZm9ybWF0OworCX0KIAlpZiAocmV0X2ZtdCAhPSBOVUxMKQogCQkqcmV0X2ZtdCA9IG92NzY3MF9mb3JtYXRzICsgaW5kZXg7CiAJLyoKIAkgKiBGaWVsZHM6IHRoZSBPViBkZXZpY2VzIGNsYWltIHRvIGJlIHByb2dyZXNzaXZlLgogCSAqLwotCWlmIChwaXgtPmZpZWxkID09IFY0TDJfRklFTERfQU5ZKQotCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwotCWVsc2UgaWYgKHBpeC0+ZmllbGQgIT0gVjRMMl9GSUVMRF9OT05FKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwogCS8qCiAJICogUm91bmQgcmVxdWVzdGVkIGltYWdlIHNpemUgZG93biB0byB0aGUgbmVhcmVzdAogCSAqIHdlIHN1cHBvcnQsIGJ1dCBub3QgYmVsb3cgdGhlIHNtYWxsZXN0LgpAQCAtODMzLDcgKzgzMyw3IEBACiAJCWludCBtYXRyaXhbQ01BVFJJWF9MRU5dKQogewogCWludCBpLCByZXQ7Ci0JdW5zaWduZWQgY2hhciBzaWduYml0czsKKwl1bnNpZ25lZCBjaGFyIHNpZ25iaXRzID0gMDsKIAogCS8qCiAJICogV2VpcmQgY3JhcCBzZWVtcyB0byBleGlzdCBpbiB0aGUgdXBwZXIgcGFydCBvZgpAQCAtMTAwOSw3ICsxMDA5LDcgQEAKIAogc3RhdGljIGludCBvdjc2NzBfdF9icmlnaHRuZXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2YWx1ZSkKIHsKLQl1bnNpZ25lZCBjaGFyIGNvbTgsIHY7CisJdW5zaWduZWQgY2hhciBjb204ID0gMCwgdjsKIAlpbnQgcmV0OwogCiAJb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfQ09NOCwgJmNvbTgpOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAKIAogc3RhdGljIGludCBvdjc2NzBfcV9icmlnaHRuZXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKIHsKLQl1bnNpZ25lZCBjaGFyIHY7CisJdW5zaWduZWQgY2hhciB2ID0gMDsKIAlpbnQgcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfQlJJR0hULCAmdik7CiAKIAkqdmFsdWUgPSBvdjc2NzBfc21fdG9fYWJzKHYpOwpAQCAtMTAzNiw3ICsxMDM2LDcgQEAKIAogc3RhdGljIGludCBvdjc2NzBfcV9jb250cmFzdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCiB7Ci0JdW5zaWduZWQgY2hhciB2OworCXVuc2lnbmVkIGNoYXIgdiA9IDA7CiAJaW50IHJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX0NPTlRSQVMsICZ2KTsKIAogCSp2YWx1ZSA9IHY7CkBAIC0xMDQ2LDcgKzEwNDYsNyBAQAogc3RhdGljIGludCBvdjc2NzBfcV9oZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBjaGFyIHY7CisJdW5zaWduZWQgY2hhciB2ID0gMDsKIAogCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01WRlAsICZ2KTsKIAkqdmFsdWUgPSAodiAmIE1WRlBfTUlSUk9SKSA9PSBNVkZQX01JUlJPUjsKQEAgLTEwNTYsNyArMTA1Niw3IEBACiAKIHN0YXRpYyBpbnQgb3Y3NjcwX3RfaGZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQogewotCXVuc2lnbmVkIGNoYXIgdjsKKwl1bnNpZ25lZCBjaGFyIHYgPSAwOwogCWludCByZXQ7CiAKIAlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NVkZQLCAmdik7CkBAIC0xMDc0LDcgKzEwNzQsNyBAQAogc3RhdGljIGludCBvdjc2NzBfcV92ZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBjaGFyIHY7CisJdW5zaWduZWQgY2hhciB2ID0gMDsKIAogCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01WRlAsICZ2KTsKIAkqdmFsdWUgPSAodiAmIE1WRlBfRkxJUCkgPT0gTVZGUF9GTElQOwpAQCAtMTA4NCw3ICsxMDg0LDcgQEAKIAogc3RhdGljIGludCBvdjc2NzBfdF92ZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCiB7Ci0JdW5zaWduZWQgY2hhciB2OworCXVuc2lnbmVkIGNoYXIgdiA9IDA7CiAJaW50IHJldDsKIAogCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01WRlAsICZ2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jCmluZGV4IDgwNjNlMzMuLjA2NWMyNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYwpAQCAtMjk3LDcgKzI5Nyw2IEBACiAJc3dpdGNoIChhZGFwLT5pZCkgewogCWNhc2UgSTJDX0hXX1NNQlVTX09WNTExOgogCWNhc2UgSTJDX0hXX1NNQlVTX09WNTE4OgotCWNhc2UgSTJDX0hXX1NNQlVTX09WRlgyOgogCWNhc2UgSTJDX0hXX1NNQlVTX1c5OTY4Q0Y6CiAJCVBERUJVRygxLCAiQWRhcHRlciBJRCAweCUwNnggYWNjZXB0ZWQiLCBhZGFwLT5pZCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKaW5kZXggOGQ4NTljYy4uY2RlZGFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmgKaW5kZXggNTM2MzM5Yi4uYWM1NGVlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY29udGV4dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY29udGV4dC5jCmluZGV4IDczZGNiMWMuLjdjMTlmZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNvbnRleHQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmMKQEAgLTEsNSArMSw0IEBACiAvKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmgKaW5kZXggNzQ1ZTI3MC4uNjE4MDEyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY29udGV4dC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNvbnRleHQuaApAQCAtMSw1ICsxLDQgQEAKIC8qCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYwppbmRleCA5MWE0MmYyLi4wNzY0ZmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuaAppbmRleCBjMTY4MDA1My4uMDM3MWFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuaApAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYwppbmRleCAyOWQ1MDU5Li44OTU4NTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuaAppbmRleCA1NGIyODQ0Li42NmFiZjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmgKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Zy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWcuaAppbmRleCA3MDdkMmQ5Li5iZTc5MjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnLmgKQEAgLTEsNSArMSw0IEBACiAvKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYwppbmRleCBiNTMxMjFjLi5jYTg5MmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmgKaW5kZXggOTkwYjAyZC4uZTI0ZmY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYwppbmRleCA1YmY2ZDhmLi41ZDAzNmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKQEAgLTE4Miw3ICsxODEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl9vbmFpcl9jcmVhdG9yX2ZlX3Byb3BzID0geworc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyX29uYWlyX2NyZWF0b3JfZmVfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfbGdkdDMzMDNfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgPSBwdnIyX2xnaDA2eGZfYXR0YWNoLAogfTsKQEAgLTI0Miw3ICsyNDEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl9vbmFpcl91c2IyX2ZlX3Byb3BzID0geworc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyX29uYWlyX3VzYjJfZmVfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfbGdkdDMzMDJfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgPSBwdnIyX2ZjdjEyMzZkX2F0dGFjaCwKIH07CkBAIC0zMTUsNyArMzE0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzN4eHhfZHZiX3Byb3BzID0geworc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzczeHh4X2R2Yl9wcm9wcyA9IHsKIAkuZnJvbnRlbmRfYXR0YWNoID0gcHZyMl90ZGExMDA0OF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICA9IHB2cjJfNzN4eHhfdGRhMTgyNzFfODI5NV9hdHRhY2gsCiB9OwpAQCAtNDE4LDEyICs0MTcsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzUweHhfZHZiX3Byb3BzID0geworc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzc1MHh4X2R2Yl9wcm9wcyA9IHsKIAkuZnJvbnRlbmRfYXR0YWNoID0gcHZyMl9zNWgxNDA5X2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgID0gcHZyMl90ZGExODI3MV84Mjk1X2F0dGFjaCwKIH07CiAKLXN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzc1MXh4X2R2Yl9wcm9wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl83NTF4eF9kdmJfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfczVoMTQxMV9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICA9IHB2cjJfdGRhMTgyNzFfODI5NV9hdHRhY2gsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5oCmluZGV4IGQwMTZmOGIuLmUyM2NlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmgKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYwppbmRleCA1ZWYwMDU5Li4yOTlhZmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVlcHJvbS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmgKaW5kZXggODQyNDI5Ny4uY2NhMzIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmgKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKaW5kZXggYzQ2ZDM2Ny4uYTEyNTJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuaAppbmRleCA1NGNhZjJlLi4yMzJmZWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZngyLWNtZC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZngyLWNtZC5oCmluZGV4IGFiYWFkYTMuLmI1ODM2OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWZ4Mi1jbWQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1meDItY21kLmgKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyBNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCmluZGV4IGEzZmUyNTEuLjY1N2Y4NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKaW5kZXggMGE4Njg4OC4uYTUyMTdhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKgpAQCAtNDAsNiArMzksMjMgQEAKICNkZWZpbmUgVFZfTUlOX0ZSRVEgICAgIDU1MjUwMDAwTAogI2RlZmluZSBUVl9NQVhfRlJFUSAgICA4NTAwMDAwMDBMCiAKKy8qIFRoaXMgZGVmaW5lcyBhIG1pbmltdW0gaW50ZXJ2YWwgdGhhdCB0aGUgZGVjb2RlciBtdXN0IHJlbWFpbiBxdWlldAorICAgYmVmb3JlIHdlIGFyZSBhbGxvd2VkIHRvIHN0YXJ0IGl0IHJ1bm5pbmcuICovCisjZGVmaW5lIFRJTUVfTVNFQ19ERUNPREVSX1dBSVQgNTAKKworLyogVGhpcyBkZWZpbmVzIGEgbWluaW11bSBpbnRlcnZhbCB0aGF0IHRoZSBlbmNvZGVyIG11c3QgcmVtYWluIHF1aWV0CisgICBiZWZvcmUgd2UgYXJlIGFsbG93ZWQgdG8gY29uZmlndXJlIGl0LiAgSSBoYWQgdGhpcyBvcmlnaW5hbGx5IHNldCB0bworICAgNTBtc2VjLCBidXQgTWFydGluIERhdXNrYXJkdCA8bWFydGluLmRhdXNrYXJkdEBnbXguZGU+IHJlcG9ydHMgdGhhdAorICAgdGhpbmdzIHdvcmsgYmV0dGVyIHdoZW4gaXQncyBzZXQgdG8gMTAwbXNlYy4gKi8KKyNkZWZpbmUgVElNRV9NU0VDX0VOQ09ERVJfV0FJVCAxMDAKKworLyogVGhpcyBkZWZpbmVzIHRoZSBtaW5pbXVtIGludGVydmFsIHRoYXQgdGhlIGVuY29kZXIgbXVzdCBzdWNjZXNzZnVsbHkgcnVuCisgICBiZWZvcmUgd2UgY29uc2lkZXIgdGhhdCB0aGUgZW5jb2RlciBoYXMgcnVuIGF0IGxlYXN0IG9uY2Ugc2luY2UgaXRzCisgICBmaXJtd2FyZSBoYXMgYmVlbiBsb2FkZWQuICBUaGlzIG1lYXN1cmVtZW50IGlzIGluIGltcG9ydGFudCBmb3IgY2FzZXMKKyAgIHdoZXJlIHdlIGNhbid0IGRvIHNvbWV0aGluZyB1bnRpbCB3ZSBrbm93IHRoYXQgdGhlIGVuY29kZXIgaGFzIGJlZW4gcnVuCisgICBhdCBsZWFzdCBvbmNlLiAqLworI2RlZmluZSBUSU1FX01TRUNfRU5DT0RFUl9PSyAyNTAKKwogc3RhdGljIHN0cnVjdCBwdnIyX2hkdyAqdW5pdF9wb2ludGVyc1tQVlJfTlVNXSA9IHtbIDAgLi4uIFBWUl9OVU0tMSBdID0gTlVMTH07CiBzdGF0aWMgREVGSU5FX01VVEVYKHB2cjJfdW5pdF9tdHgpOwogCkBAIC02Nyw2ICs4MywxNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHRvbGVyYW5jZSwgICAgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModG9sZXJhbmNlLCJzcGVjaWZ5IHN0cmVhbSBlcnJvciB0b2xlcmFuY2UiKTsKIAorLyogVVMgQnJvYWRjYXN0IGNoYW5uZWwgNyAoMTc1LjI1IE1IeikgKi8KK3N0YXRpYyBpbnQgZGVmYXVsdF90dl9mcmVxICAgID0gMTc1MjUwMDAwTDsKKy8qIDEwNC4zIE1IeiwgYSB1c2FibGUgRk0gc3RhdGlvbiBmb3IgbXkgYXJlYSAqLworc3RhdGljIGludCBkZWZhdWx0X3JhZGlvX2ZyZXEgPSAxMDQzMDAwMDBMOworCittb2R1bGVfcGFyYW1fbmFtZWQodHZfZnJlcSwgZGVmYXVsdF90dl9mcmVxLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh0dl9mcmVxLCAic3BlY2lmeSBpbml0aWFsIHRlbGV2aXNpb24gZnJlcXVlbmN5Iik7Cittb2R1bGVfcGFyYW1fbmFtZWQocmFkaW9fZnJlcSwgZGVmYXVsdF9yYWRpb19mcmVxLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyYWRpb19mcmVxLCAic3BlY2lmeSBpbml0aWFsIHJhZGlvIGZyZXF1ZW5jeSIpOworCiAjZGVmaW5lIFBWUjJfQ1RMX1dSSVRFX0VORFBPSU5UICAweDAxCiAjZGVmaW5lIFBWUjJfQ1RMX1JFQURfRU5EUE9JTlQgICAweDgxCiAKQEAgLTE3MDEsMTAgKzE3MjcsOCBAQAogCSAgIGFyZSwgYnV0IEkgc2V0IHRoZW0gdG8gc29tZXRoaW5nIHVzYWJsZSBpbiB0aGUgQ2hpY2FnbyBhcmVhIGp1c3QKIAkgICB0byBtYWtlIGRyaXZlciB0ZXN0aW5nIGEgbGl0dGxlIGVhc2llci4gKi8KIAotCS8qIFVTIEJyb2FkY2FzdCBjaGFubmVsIDcgKDE3NS4yNSBNSHopICovCi0JaGR3LT5mcmVxVmFsVGVsZXZpc2lvbiA9IDE3NTI1MDAwMEw7Ci0JLyogMTA0LjMgTUh6LCBhIHVzYWJsZSBGTSBzdGF0aW9uIGZvciBteSBhcmVhICovCi0JaGR3LT5mcmVxVmFsUmFkaW8gPSAxMDQzMDAwMDBMOworCWhkdy0+ZnJlcVZhbFRlbGV2aXNpb24gPSBkZWZhdWx0X3R2X2ZyZXE7CisJaGR3LT5mcmVxVmFsUmFkaW8gPSBkZWZhdWx0X3JhZGlvX2ZyZXE7CiAKIAkvLyBEbyBub3QgdXNlIHB2cjJfcmVzZXRfY3RsX2VuZHBvaW50cygpIGhlcmUuICBJdCBpcyBub3QKIAkvLyB0aHJlYWQtc2FmZSBhZ2FpbnN0IHRoZSBub3JtYWwgcHZyMl9zZW5kX3JlcXVlc3QoKSBtZWNoYW5pc20uCkBAIC0xOTg5LDcgKzIwMTMsOCBAQAogCQljYXNlIFY0TDJfQ1RSTF9UWVBFX01FTlU6CiAJCQljaXB0ci0+dHlwZSA9IHB2cjJfY3RsX2VudW07CiAJCQljaXB0ci0+ZGVmLnR5cGVfZW51bS52YWx1ZV9uYW1lcyA9Ci0JCQkJY3gyMzQxeF9jdHJsX2dldF9tZW51KGNpcHRyLT52NGxfaWQpOworCQkJCWN4MjM0MXhfY3RybF9nZXRfbWVudSgmaGR3LT5lbmNfY3RsX3N0YXRlLAorCQkJCQkJCQljaXB0ci0+djRsX2lkKTsKIAkJCWZvciAoY250MSA9IDA7CiAJCQkgICAgIGNpcHRyLT5kZWYudHlwZV9lbnVtLnZhbHVlX25hbWVzW2NudDFdICE9IE5VTEw7CiAJCQkgICAgIGNudDErKykgeyB9CkBAIC0yNDI4LDIyICsyNDUzLDM4IEBACiAJc3RydWN0IHB2cjJfY3RybCAqY3B0cjsKIAlpbnQgZGlzcnVwdGl2ZV9jaGFuZ2U7CiAKLQkvKiBXaGVuIHZpZGVvIHN0YW5kYXJkIGNoYW5nZXMsIHJlc2V0IHRoZSBocmVzIGFuZCB2cmVzIHZhbHVlcyAtCi0JICAgYnV0IGlmIHRoZSB1c2VyIGhhcyBwZW5kaW5nIGNoYW5nZXMgdGhlcmUsIHRoZW4gbGV0IHRoZSBjaGFuZ2VzCi0JICAgdGFrZSBwcmlvcml0eS4gKi8KKwkvKiBIYW5kbGUgc29tZSByZXF1aXJlZCBzaWRlIGVmZmVjdHMgd2hlbiB0aGUgdmlkZW8gc3RhbmRhcmQgaXMKKwkgICBjaGFuZ2VkLi4uLiAqLwogCWlmIChoZHctPnN0ZF9kaXJ0eSkgewotCQkvKiBSZXdyaXRlIHRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIHRvIGJlIGFwcHJvcHJpYXRlIHRvIHRoZQotCQkgICB2aWRlbyBzdGFuZGFyZCB0aGF0IGhhcyBiZWVuIHNlbGVjdGVkLiAqLwogCQlpbnQgbnZyZXM7CisJCWludCBnb3Bfc2l6ZTsKIAkJaWYgKGhkdy0+c3RkX21hc2tfY3VyICYgVjRMMl9TVERfNTI1XzYwKSB7CiAJCQludnJlcyA9IDQ4MDsKKwkJCWdvcF9zaXplID0gMTU7CiAJCX0gZWxzZSB7CiAJCQludnJlcyA9IDU3NjsKKwkJCWdvcF9zaXplID0gMTI7CiAJCX0KKwkJLyogUmV3cml0ZSB0aGUgdmVydGljYWwgcmVzb2x1dGlvbiB0byBiZSBhcHByb3ByaWF0ZSB0byB0aGUKKwkJICAgdmlkZW8gc3RhbmRhcmQgdGhhdCBoYXMgYmVlbiBzZWxlY3RlZC4gKi8KIAkJaWYgKG52cmVzICE9IGhkdy0+cmVzX3Zlcl92YWwpIHsKIAkJCWhkdy0+cmVzX3Zlcl92YWwgPSBudnJlczsKIAkJCWhkdy0+cmVzX3Zlcl9kaXJ0eSA9ICEwOwogCQl9CisJCS8qIFJld3JpdGUgdGhlIEdPUCBzaXplIHRvIGJlIGFwcHJvcHJpYXRlIHRvIHRoZSB2aWRlbworCQkgICBzdGFuZGFyZCB0aGF0IGhhcyBiZWVuIHNlbGVjdGVkLiAqLworCQlpZiAoZ29wX3NpemUgIT0gaGR3LT5lbmNfY3RsX3N0YXRlLnZpZGVvX2dvcF9zaXplKSB7CisJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgY3M7CisJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCBjMTsKKwkJCW1lbXNldCgmY3MsIDAsIHNpemVvZihjcykpOworCQkJbWVtc2V0KCZjMSwgMCwgc2l6ZW9mKGMxKSk7CisJCQljcy5jb250cm9scyA9ICZjMTsKKwkJCWNzLmNvdW50ID0gMTsKKwkJCWMxLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRTsKKwkJCWMxLnZhbHVlID0gZ29wX3NpemU7CisJCQljeDIzNDF4X2V4dF9jdHJscygmaGR3LT5lbmNfY3RsX3N0YXRlLCAwLCAmY3MsCisJCQkJCSAgVklESU9DX1NfRVhUX0NUUkxTKTsKKwkJfQogCX0KIAogCWlmIChoZHctPmlucHV0X2RpcnR5ICYmIGhkdy0+c3RhdGVfcGF0aHdheV9vayAmJgpAQCAtMzQyMSw3ICszNDYyLDcgQEAKIH0KIAogCi12b2lkIHB2cjJfbGVkX2N0cmxfaGF1cHBhdWdlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCBpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBwdnIyX2xlZF9jdHJsX2hhdXBwYXVnZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgaW50IG9ub2ZmKQogewogCS8qIGNoYW5nZSBzb21lIEdQSU8gZGF0YQogCSAqCkBAIC0zNjAxLDcgKzM2NDIsOSBAQAogCQkJCSAgIHRoZSBlbmNvZGVyLiAqLwogCQkJCWlmICghaGR3LT5zdGF0ZV9lbmNvZGVyX3dhaXRvaykgewogCQkJCQloZHctPmVuY29kZXJfd2FpdF90aW1lci5leHBpcmVzID0KLQkJCQkJCWppZmZpZXMgKyAoSFoqNTAvMTAwMCk7CisJCQkJCQlqaWZmaWVzICsKKwkJCQkJCShIWiAqIFRJTUVfTVNFQ19FTkNPREVSX1dBSVQKKwkJCQkJCSAvIDEwMDApOwogCQkJCQlhZGRfdGltZXIoJmhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyKTsKIAkJCQl9CiAJCQl9CkBAIC0zNzI1LDcgKzM3NjgsNyBAQAogCQloZHctPnN0YXRlX2VuY29kZXJfcnVuID0gITA7CiAJCWlmICghaGR3LT5zdGF0ZV9lbmNvZGVyX3J1bm9rKSB7CiAJCQloZHctPmVuY29kZXJfcnVuX3RpbWVyLmV4cGlyZXMgPQotCQkJCWppZmZpZXMgKyAoSFoqMjUwLzEwMDApOworCQkJCWppZmZpZXMgKyAoSFogKiBUSU1FX01TRUNfRU5DT0RFUl9PSyAvIDEwMDApOwogCQkJYWRkX3RpbWVyKCZoZHctPmVuY29kZXJfcnVuX3RpbWVyKTsKIAkJfQogCX0KQEAgLTM4MDAsNyArMzg0Myw5IEBACiAJCQkJICAgYnV0IGJlZm9yZSB3ZSBkaWQgdGhlIHBlbmRpbmcgY2hlY2suICovCiAJCQkJaWYgKCFoZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50KSB7CiAJCQkJCWhkdy0+cXVpZXNjZW50X3RpbWVyLmV4cGlyZXMgPQotCQkJCQkJamlmZmllcyArIChIWio1MC8xMDAwKTsKKwkJCQkJCWppZmZpZXMgKworCQkJCQkJKEhaICogVElNRV9NU0VDX0RFQ09ERVJfV0FJVAorCQkJCQkJIC8gMTAwMCk7CiAJCQkJCWFkZF90aW1lcigmaGR3LT5xdWllc2NlbnRfdGltZXIpOwogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKaW5kZXggMjAyOTVlMC4uYzA0OTU2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMKaW5kZXggNDk3NzM3Ni4uY2NkYjQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMKaW5kZXggYzY1MGUwMi4uNTVmMDRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCmluZGV4IGM4MzhkZjYuLjdmYTM4NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKaW5kZXggNzkzYzg5YS4uOWQzYzE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5oCmluZGV4IGJkMDgwN2IuLjZlZjdhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaApAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uYwppbmRleCA3YWZmOGI3Li4yMGI2YWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmgKaW5kZXggNDJmY2Y4Mi4uYWZiN2U4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKaW5kZXggYzU3MjIxMi4uMDVhMTM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuaAppbmRleCAxZDM2MmY4Li4xMDBlMDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuaApAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKaW5kZXggMzMyYWNlZC4uYWQwZDk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN0ZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3RkLmMKaW5kZXggZmRjNWEyYi4uY2E5ZjgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3RkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3RkLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3RkLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zdGQuaAppbmRleCAwN2MzOTkzLi5hMzVjNTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zdGQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zdGQuaApAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYwppbmRleCAwZmY3YTgzLi40NmE4YzM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKQEAgLTcxLDYgKzcwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX3ZhbDsKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX2N1c3RvbTsKIAlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOworCWludCBjdGxfaWQ7CiAJc3RydWN0IHB2cjJfc3lzZnMgKmNocHRyOwogCXN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtICppdGVtX25leHQ7CiAJc3RydWN0IGF0dHJpYnV0ZSAqYXR0cl9nZW5bN107CkBAIC04MywzOCArODMsMjkgQEAKIAlzdHJ1Y3QgY2xhc3MgY2xhc3M7CiB9OwogCi1zdGF0aWMgc3NpemVfdCBzaG93X25hbWUoaW50IGlkLHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldixjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqY2xhc3NfZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOwotCXN0cnVjdCBwdnIyX3N5c2ZzICpzZnA7CisJc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0gKmNpcDsKIAljb25zdCBjaGFyICpuYW1lOwotCi0Jc2ZwID0gKHN0cnVjdCBwdnIyX3N5c2ZzICopY2xhc3NfZGV2LT5kcml2ZXJfZGF0YTsKLQlpZiAoIXNmcCkgcmV0dXJuIC1FSU5WQUw7Ci0JY3B0ciA9IHB2cjJfaGR3X2dldF9jdHJsX2J5X2luZGV4KHNmcC0+Y2hhbm5lbC5oZHcsaWQpOwotCWlmICghY3B0cikgcmV0dXJuIC1FSU5WQUw7Ci0KLQluYW1lID0gcHZyMl9jdHJsX2dldF9kZXNjKGNwdHIpOwotCXB2cjJfc3lzZnNfdHJhY2UoInB2cjJfc3lzZnMoJXApIHNob3dfbmFtZShjaWQ9JWQpIGlzICVzIixzZnAsaWQsbmFtZSk7Ci0KKwljaXAgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0sIGF0dHJfbmFtZSk7CisJbmFtZSA9IHB2cjJfY3RybF9nZXRfZGVzYyhjaXAtPmNwdHIpOworCXB2cjJfc3lzZnNfdHJhY2UoInB2cjJfc3lzZnMoJXApIHNob3dfbmFtZShjaWQ9JWQpIGlzICVzIiwKKwkJCSBjaXAtPmNocHRyLCBjaXAtPmN0bF9pZCwgbmFtZSk7CiAJaWYgKCFuYW1lKSByZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBzY25wcmludGYoYnVmLFBBR0VfU0laRSwiJXNcbiIsbmFtZSk7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBuYW1lKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd190eXBlKGludCBpZCxzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXYsY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190eXBlKHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHB2cjJfY3RybCAqY3B0cjsKLQlzdHJ1Y3QgcHZyMl9zeXNmcyAqc2ZwOworCXN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtICpjaXA7CiAJY29uc3QgY2hhciAqbmFtZTsKIAllbnVtIHB2cjJfY3RsX3R5cGUgdHA7Ci0KLQlzZnAgPSAoc3RydWN0IHB2cjJfc3lzZnMgKiljbGFzc19kZXYtPmRyaXZlcl9kYXRhOwotCWlmICghc2ZwKSByZXR1cm4gLUVJTlZBTDsKLQljcHRyID0gcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaW5kZXgoc2ZwLT5jaGFubmVsLmhkdyxpZCk7Ci0JaWYgKCFjcHRyKSByZXR1cm4gLUVJTlZBTDsKLQotCXRwID0gcHZyMl9jdHJsX2dldF90eXBlKGNwdHIpOworCWNpcCA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSwgYXR0cl90eXBlKTsKKwl0cCA9IHB2cjJfY3RybF9nZXRfdHlwZShjaXAtPmNwdHIpOwogCXN3aXRjaCAodHApIHsKIAljYXNlIHB2cjJfY3RsX2ludDogbmFtZSA9ICJpbnRlZ2VyIjsgYnJlYWs7CiAJY2FzZSBwdnIyX2N0bF9lbnVtOiBuYW1lID0gImVudW0iOyBicmVhazsKQEAgLTEyMiw0MDMgKzExMywxNzggQEAKIAljYXNlIHB2cjJfY3RsX2Jvb2w6IG5hbWUgPSAiYm9vbGVhbiI7IGJyZWFrOwogCWRlZmF1bHQ6IG5hbWUgPSAiPyI7IGJyZWFrOwogCX0KLQlwdnIyX3N5c2ZzX3RyYWNlKCJwdnIyX3N5c2ZzKCVwKSBzaG93X3R5cGUoY2lkPSVkKSBpcyAlcyIsc2ZwLGlkLG5hbWUpOwotCisJcHZyMl9zeXNmc190cmFjZSgicHZyMl9zeXNmcyglcCkgc2hvd190eXBlKGNpZD0lZCkgaXMgJXMiLAorCQkJIGNpcC0+Y2hwdHIsIGNpcC0+Y3RsX2lkLCBuYW1lKTsKIAlpZiAoIW5hbWUpIHJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHNjbnByaW50ZihidWYsUEFHRV9TSVpFLCIlc1xuIixuYW1lKTsKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIG5hbWUpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X21pbihpbnQgaWQsc3RydWN0IGRldmljZSAqY2xhc3NfZGV2LGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfbWluKHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQogewotCXN0cnVjdCBwdnIyX2N0cmwgKmNwdHI7Ci0Jc3RydWN0IHB2cjJfc3lzZnMgKnNmcDsKKwlzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSAqY2lwOwogCWxvbmcgdmFsOwotCi0Jc2ZwID0gKHN0cnVjdCBwdnIyX3N5c2ZzICopY2xhc3NfZGV2LT5kcml2ZXJfZGF0YTsKLQlpZiAoIXNmcCkgcmV0dXJuIC1FSU5WQUw7Ci0JY3B0ciA9IHB2cjJfaGR3X2dldF9jdHJsX2J5X2luZGV4KHNmcC0+Y2hhbm5lbC5oZHcsaWQpOwotCWlmICghY3B0cikgcmV0dXJuIC1FSU5WQUw7Ci0JdmFsID0gcHZyMl9jdHJsX2dldF9taW4oY3B0cik7Ci0KLQlwdnIyX3N5c2ZzX3RyYWNlKCJwdnIyX3N5c2ZzKCVwKSBzaG93X21pbihjaWQ9JWQpIGlzICVsZCIsc2ZwLGlkLHZhbCk7Ci0KLQlyZXR1cm4gc2NucHJpbnRmKGJ1ZixQQUdFX1NJWkUsIiVsZFxuIix2YWwpOworCWNpcCA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSwgYXR0cl9taW4pOworCXZhbCA9IHB2cjJfY3RybF9nZXRfbWluKGNpcC0+Y3B0cik7CisJcHZyMl9zeXNmc190cmFjZSgicHZyMl9zeXNmcyglcCkgc2hvd19taW4oY2lkPSVkKSBpcyAlbGQiLAorCQkJIGNpcC0+Y2hwdHIsIGNpcC0+Y3RsX2lkLCB2YWwpOworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGRcbiIsIHZhbCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfbWF4KGludCBpZCxzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXYsY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19tYXgoc3RydWN0IGRldmljZSAqY2xhc3NfZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7Ci0Jc3RydWN0IHB2cjJfY3RybCAqY3B0cjsKLQlzdHJ1Y3QgcHZyMl9zeXNmcyAqc2ZwOworCXN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtICpjaXA7CiAJbG9uZyB2YWw7Ci0KLQlzZnAgPSAoc3RydWN0IHB2cjJfc3lzZnMgKiljbGFzc19kZXYtPmRyaXZlcl9kYXRhOwotCWlmICghc2ZwKSByZXR1cm4gLUVJTlZBTDsKLQljcHRyID0gcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaW5kZXgoc2ZwLT5jaGFubmVsLmhkdyxpZCk7Ci0JaWYgKCFjcHRyKSByZXR1cm4gLUVJTlZBTDsKLQl2YWwgPSBwdnIyX2N0cmxfZ2V0X21heChjcHRyKTsKLQotCXB2cjJfc3lzZnNfdHJhY2UoInB2cjJfc3lzZnMoJXApIHNob3dfbWF4KGNpZD0lZCkgaXMgJWxkIixzZnAsaWQsdmFsKTsKLQotCXJldHVybiBzY25wcmludGYoYnVmLFBBR0VfU0laRSwiJWxkXG4iLHZhbCk7CisJY2lwID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtLCBhdHRyX21heCk7CisJdmFsID0gcHZyMl9jdHJsX2dldF9tYXgoY2lwLT5jcHRyKTsKKwlwdnIyX3N5c2ZzX3RyYWNlKCJwdnIyX3N5c2ZzKCVwKSBzaG93X21heChjaWQ9JWQpIGlzICVsZCIsCisJCQkgY2lwLT5jaHB0ciwgY2lwLT5jdGxfaWQsIHZhbCk7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsZFxuIiwgdmFsKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd192YWxfbm9ybShpbnQgaWQsc3RydWN0IGRldmljZSAqY2xhc3NfZGV2LGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdmFsX25vcm0oc3RydWN0IGRldmljZSAqY2xhc3NfZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBwdnIyX2N0cmwgKmNwdHI7Ci0Jc3RydWN0IHB2cjJfc3lzZnMgKnNmcDsKLQlpbnQgdmFsLHJldDsKKwlzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSAqY2lwOworCWludCB2YWw7CisJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgY250ID0gMDsKLQotCXNmcCA9IChzdHJ1Y3QgcHZyMl9zeXNmcyAqKWNsYXNzX2Rldi0+ZHJpdmVyX2RhdGE7Ci0JaWYgKCFzZnApIHJldHVybiAtRUlOVkFMOwotCWNwdHIgPSBwdnIyX2hkd19nZXRfY3RybF9ieV9pbmRleChzZnAtPmNoYW5uZWwuaGR3LGlkKTsKLQlpZiAoIWNwdHIpIHJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gcHZyMl9jdHJsX2dldF92YWx1ZShjcHRyLCZ2YWwpOworCWNpcCA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSwgYXR0cl92YWwpOworCXJldCA9IHB2cjJfY3RybF9nZXRfdmFsdWUoY2lwLT5jcHRyLCAmdmFsKTsKIAlpZiAocmV0IDwgMCkgcmV0dXJuIHJldDsKLQotCXJldCA9IHB2cjJfY3RybF92YWx1ZV90b19zeW0oY3B0cix+MCx2YWwsCi0JCQkJICAgICBidWYsUEFHRV9TSVpFLTEsJmNudCk7Ci0KKwlyZXQgPSBwdnIyX2N0cmxfdmFsdWVfdG9fc3ltKGNpcC0+Y3B0ciwgfjAsIHZhbCwKKwkJCQkgICAgIGJ1ZiwgUEFHRV9TSVpFIC0gMSwgJmNudCk7CiAJcHZyMl9zeXNmc190cmFjZSgicHZyMl9zeXNmcyglcCkgc2hvd192YWxfbm9ybShjaWQ9JWQpIGlzICUuKnMgKCVkKSIsCi0JCQkgc2ZwLGlkLGNudCxidWYsdmFsKTsKKwkJCSBjaXAtPmNocHRyLCBjaXAtPmN0bF9pZCwgY250LCBidWYsIHZhbCk7CiAJYnVmW2NudF0gPSAnXG4nOwogCXJldHVybiBjbnQrMTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd192YWxfY3VzdG9tKGludCBpZCxzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXYsY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd192YWxfY3VzdG9tKHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHB2cjJfY3RybCAqY3B0cjsKLQlzdHJ1Y3QgcHZyMl9zeXNmcyAqc2ZwOwotCWludCB2YWwscmV0OworCXN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtICpjaXA7CisJaW50IHZhbDsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBjbnQgPSAwOwotCi0Jc2ZwID0gKHN0cnVjdCBwdnIyX3N5c2ZzICopY2xhc3NfZGV2LT5kcml2ZXJfZGF0YTsKLQlpZiAoIXNmcCkgcmV0dXJuIC1FSU5WQUw7Ci0JY3B0ciA9IHB2cjJfaGR3X2dldF9jdHJsX2J5X2luZGV4KHNmcC0+Y2hhbm5lbC5oZHcsaWQpOwotCWlmICghY3B0cikgcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBwdnIyX2N0cmxfZ2V0X3ZhbHVlKGNwdHIsJnZhbCk7CisJY2lwID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtLCBhdHRyX2N1c3RvbSk7CisJcmV0ID0gcHZyMl9jdHJsX2dldF92YWx1ZShjaXAtPmNwdHIsICZ2YWwpOwogCWlmIChyZXQgPCAwKSByZXR1cm4gcmV0OwotCi0JcmV0ID0gcHZyMl9jdHJsX2N1c3RvbV92YWx1ZV90b19zeW0oY3B0cix+MCx2YWwsCi0JCQkJCSAgICBidWYsUEFHRV9TSVpFLTEsJmNudCk7Ci0KKwlyZXQgPSBwdnIyX2N0cmxfY3VzdG9tX3ZhbHVlX3RvX3N5bShjaXAtPmNwdHIsIH4wLCB2YWwsCisJCQkJCSAgICBidWYsIFBBR0VfU0laRSAtIDEsICZjbnQpOwogCXB2cjJfc3lzZnNfdHJhY2UoInB2cjJfc3lzZnMoJXApIHNob3dfdmFsX2N1c3RvbShjaWQ9JWQpIGlzICUuKnMgKCVkKSIsCi0JCQkgc2ZwLGlkLGNudCxidWYsdmFsKTsKKwkJCSBjaXAtPmNocHRyLCBjaXAtPmN0bF9pZCwgY250LCBidWYsIHZhbCk7CiAJYnVmW2NudF0gPSAnXG4nOwogCXJldHVybiBjbnQrMTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19lbnVtKGludCBpZCxzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXYsY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19lbnVtKHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHB2cjJfY3RybCAqY3B0cjsKLQlzdHJ1Y3QgcHZyMl9zeXNmcyAqc2ZwOworCXN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtICpjaXA7CiAJbG9uZyB2YWw7Ci0JdW5zaWduZWQgaW50IGJjbnQsY2NudCxlY250OwotCi0Jc2ZwID0gKHN0cnVjdCBwdnIyX3N5c2ZzICopY2xhc3NfZGV2LT5kcml2ZXJfZGF0YTsKLQlpZiAoIXNmcCkgcmV0dXJuIC1FSU5WQUw7Ci0JY3B0ciA9IHB2cjJfaGR3X2dldF9jdHJsX2J5X2luZGV4KHNmcC0+Y2hhbm5lbC5oZHcsaWQpOwotCWlmICghY3B0cikgcmV0dXJuIC1FSU5WQUw7Ci0JZWNudCA9IHB2cjJfY3RybF9nZXRfY250KGNwdHIpOworCXVuc2lnbmVkIGludCBiY250LCBjY250LCBlY250OworCWNpcCA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSwgYXR0cl9lbnVtKTsKKwllY250ID0gcHZyMl9jdHJsX2dldF9jbnQoY2lwLT5jcHRyKTsKIAliY250ID0gMDsKIAlmb3IgKHZhbCA9IDA7IHZhbCA8IGVjbnQ7IHZhbCsrKSB7Ci0JCXB2cjJfY3RybF9nZXRfdmFsbmFtZShjcHRyLHZhbCxidWYrYmNudCxQQUdFX1NJWkUtYmNudCwmY2NudCk7CisJCXB2cjJfY3RybF9nZXRfdmFsbmFtZShjaXAtPmNwdHIsIHZhbCwgYnVmICsgYmNudCwKKwkJCQkgICAgICBQQUdFX1NJWkUgLSBiY250LCAmY2NudCk7CiAJCWlmICghY2NudCkgY29udGludWU7CiAJCWJjbnQgKz0gY2NudDsKIAkJaWYgKGJjbnQgPj0gUEFHRV9TSVpFKSBicmVhazsKIAkJYnVmW2JjbnRdID0gJ1xuJzsKIAkJYmNudCsrOwogCX0KLQlwdnIyX3N5c2ZzX3RyYWNlKCJwdnIyX3N5c2ZzKCVwKSBzaG93X2VudW0oY2lkPSVkKSIsc2ZwLGlkKTsKKwlwdnIyX3N5c2ZzX3RyYWNlKCJwdnIyX3N5c2ZzKCVwKSBzaG93X2VudW0oY2lkPSVkKSIsCisJCQkgY2lwLT5jaHB0ciwgY2lwLT5jdGxfaWQpOwogCXJldHVybiBiY250OwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2JpdHMoaW50IGlkLHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldixjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2JpdHMoc3RydWN0IGRldmljZSAqY2xhc3NfZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOwotCXN0cnVjdCBwdnIyX3N5c2ZzICpzZnA7Ci0JaW50IHZhbGlkX2JpdHMsbXNrOwotCXVuc2lnbmVkIGludCBiY250LGNjbnQ7Ci0KLQlzZnAgPSAoc3RydWN0IHB2cjJfc3lzZnMgKiljbGFzc19kZXYtPmRyaXZlcl9kYXRhOwotCWlmICghc2ZwKSByZXR1cm4gLUVJTlZBTDsKLQljcHRyID0gcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaW5kZXgoc2ZwLT5jaGFubmVsLmhkdyxpZCk7Ci0JaWYgKCFjcHRyKSByZXR1cm4gLUVJTlZBTDsKLQl2YWxpZF9iaXRzID0gcHZyMl9jdHJsX2dldF9tYXNrKGNwdHIpOworCXN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtICpjaXA7CisJaW50IHZhbGlkX2JpdHMsIG1zazsKKwl1bnNpZ25lZCBpbnQgYmNudCwgY2NudDsKKwljaXAgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0sIGF0dHJfYml0cyk7CisJdmFsaWRfYml0cyA9IHB2cjJfY3RybF9nZXRfbWFzayhjaXAtPmNwdHIpOwogCWJjbnQgPSAwOwogCWZvciAobXNrID0gMTsgdmFsaWRfYml0czsgbXNrIDw8PSAxKSB7CiAJCWlmICghKG1zayAmIHZhbGlkX2JpdHMpKSBjb250aW51ZTsKIAkJdmFsaWRfYml0cyAmPSB+bXNrOwotCQlwdnIyX2N0cmxfZ2V0X3ZhbG5hbWUoY3B0cixtc2ssYnVmK2JjbnQsUEFHRV9TSVpFLWJjbnQsJmNjbnQpOworCQlwdnIyX2N0cmxfZ2V0X3ZhbG5hbWUoY2lwLT5jcHRyLCBtc2ssIGJ1ZiArIGJjbnQsCisJCQkJICAgICAgUEFHRV9TSVpFIC0gYmNudCwgJmNjbnQpOwogCQliY250ICs9IGNjbnQ7CiAJCWlmIChiY250ID49IFBBR0VfU0laRSkgYnJlYWs7CiAJCWJ1ZltiY250XSA9ICdcbic7CiAJCWJjbnQrKzsKIAl9Ci0JcHZyMl9zeXNmc190cmFjZSgicHZyMl9zeXNmcyglcCkgc2hvd19iaXRzKGNpZD0lZCkiLHNmcCxpZCk7CisJcHZyMl9zeXNmc190cmFjZSgicHZyMl9zeXNmcyglcCkgc2hvd19iaXRzKGNpZD0lZCkiLAorCQkJIGNpcC0+Y2hwdHIsIGNpcC0+Y3RsX2lkKTsKIAlyZXR1cm4gYmNudDsKIH0KIAotc3RhdGljIGludCBzdG9yZV92YWxfYW55KGludCBpZCxpbnQgY3VzdG9tZmwsc3RydWN0IHB2cjJfc3lzZnMgKnNmcCwKK3N0YXRpYyBpbnQgc3RvcmVfdmFsX2FueShzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSAqY2lwLCBpbnQgY3VzdG9tZmwsCiAJCQkgY29uc3QgY2hhciAqYnVmLHVuc2lnbmVkIGludCBjb3VudCkKIHsKLQlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOwogCWludCByZXQ7CiAJaW50IG1hc2ssdmFsOwotCi0JY3B0ciA9IHB2cjJfaGR3X2dldF9jdHJsX2J5X2luZGV4KHNmcC0+Y2hhbm5lbC5oZHcsaWQpOwogCWlmIChjdXN0b21mbCkgewotCQlyZXQgPSBwdnIyX2N0cmxfY3VzdG9tX3N5bV90b192YWx1ZShjcHRyLGJ1Zixjb3VudCwmbWFzaywmdmFsKTsKKwkJcmV0ID0gcHZyMl9jdHJsX2N1c3RvbV9zeW1fdG9fdmFsdWUoY2lwLT5jcHRyLCBidWYsIGNvdW50LAorCQkJCQkJICAgICZtYXNrLCAmdmFsKTsKIAl9IGVsc2UgewotCQlyZXQgPSBwdnIyX2N0cmxfc3ltX3RvX3ZhbHVlKGNwdHIsYnVmLGNvdW50LCZtYXNrLCZ2YWwpOworCQlyZXQgPSBwdnIyX2N0cmxfc3ltX3RvX3ZhbHVlKGNpcC0+Y3B0ciwgYnVmLCBjb3VudCwKKwkJCQkJICAgICAmbWFzaywgJnZhbCk7CiAJfQogCWlmIChyZXQgPCAwKSByZXR1cm4gcmV0OwotCXJldCA9IHB2cjJfY3RybF9zZXRfbWFza192YWx1ZShjcHRyLG1hc2ssdmFsKTsKLQlwdnIyX2hkd19jb21taXRfY3RsKHNmcC0+Y2hhbm5lbC5oZHcpOworCXJldCA9IHB2cjJfY3RybF9zZXRfbWFza192YWx1ZShjaXAtPmNwdHIsIG1hc2ssIHZhbCk7CisJcHZyMl9oZHdfY29tbWl0X2N0bChjaXAtPmNocHRyLT5jaGFubmVsLmhkdyk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfdmFsX25vcm0oaW50IGlkLHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldiwKLQkJCSAgICAgY29uc3QgY2hhciAqYnVmLHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3ZhbF9ub3JtKHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHB2cjJfc3lzZnMgKnNmcDsKKwlzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSAqY2lwOwogCWludCByZXQ7Ci0Jc2ZwID0gKHN0cnVjdCBwdnIyX3N5c2ZzICopY2xhc3NfZGV2LT5kcml2ZXJfZGF0YTsKKwljaXAgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0sIGF0dHJfdmFsKTsKIAlwdnIyX3N5c2ZzX3RyYWNlKCJwdnIyX3N5c2ZzKCVwKSBzdG9yZV92YWxfbm9ybShjaWQ9JWQpIFwiJS4qc1wiIiwKLQkJCSBzZnAsaWQsKGludCljb3VudCxidWYpOwotCXJldCA9IHN0b3JlX3ZhbF9hbnkoaWQsMCxzZnAsYnVmLGNvdW50KTsKKwkJCSBjaXAtPmNocHRyLCBjaXAtPmN0bF9pZCwgKGludCljb3VudCwgYnVmKTsKKwlyZXQgPSBzdG9yZV92YWxfYW55KGNpcCwgMCwgYnVmLCBjb3VudCk7CiAJaWYgKCFyZXQpIHJldCA9IGNvdW50OwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3ZhbF9jdXN0b20oaW50IGlkLHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldiwKLQkJCQljb25zdCBjaGFyICpidWYsc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc3RvcmVfdmFsX2N1c3RvbShzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHB2cjJfc3lzZnMgKnNmcDsKKwlzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSAqY2lwOwogCWludCByZXQ7Ci0Jc2ZwID0gKHN0cnVjdCBwdnIyX3N5c2ZzICopY2xhc3NfZGV2LT5kcml2ZXJfZGF0YTsKKwljaXAgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0sIGF0dHJfY3VzdG9tKTsKIAlwdnIyX3N5c2ZzX3RyYWNlKCJwdnIyX3N5c2ZzKCVwKSBzdG9yZV92YWxfY3VzdG9tKGNpZD0lZCkgXCIlLipzXCIiLAotCQkJIHNmcCxpZCwoaW50KWNvdW50LGJ1Zik7Ci0JcmV0ID0gc3RvcmVfdmFsX2FueShpZCwxLHNmcCxidWYsY291bnQpOworCQkJIGNpcC0+Y2hwdHIsIGNpcC0+Y3RsX2lkLCAoaW50KWNvdW50LCBidWYpOworCXJldCA9IHN0b3JlX3ZhbF9hbnkoY2lwLCAxLCBidWYsIGNvdW50KTsKIAlpZiAoIXJldCkgcmV0ID0gY291bnQ7CiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPiAzMC1BcHJpbC0yMDA1Ci0KLSAgVGhpcyBuZXh0IGJhdGNoIG9mIGhvcnJpYmxlIHByZXByb2Nlc3NvciBoYWNrZXJ5IGlzIG5lZWRlZCBiZWNhdXNlIHRoZQotICBrZXJuZWwncyBkZXZpY2VfYXR0cmlidXRlIG1lY2hhbmlzbSBmYWlscyB0byBwYXNzIHRoZSBhY3R1YWwKLSAgYXR0cmlidXRlIHRocm91Z2ggdG8gdGhlIHNob3cgLyBzdG9yZSBmdW5jdGlvbnMsIHdoaWNoIG1lYW5zIHdlIGhhdmUgbm8KLSAgd2F5IHRvIHBhY2thZ2UgdXAgYW55IGF0dHJpYnV0ZS1zcGVjaWZpYyBwYXJhbWV0ZXJzLCBsaWtlIGZvciBleGFtcGxlIHRoZQotICBjb250cm9sIGlkLiAgU28gd2Ugd29yayBhcm91bmQgdGhpcyBicmFpbi1kYW1hZ2UgYnkgZW5jb2RpbmcgdGhlIGNvbnRyb2wKLSAgaWQgaW50byB0aGUgc2hvdyAvIHN0b3JlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFuZCBwaWNrIHRoZSBmdW5jdGlvbiBiYXNlZAotICBvbiB0aGUgY29udHJvbCBpZCB3ZSdyZSBzZXR0aW5nIHVwLiAgVGhlc2UgbWFjcm9zIHRyeSB0byBlYXNlIHRoZSBwYWluLgotICBZdWNrLgotKi8KLQotI2RlZmluZSBDUkVBVEVfU0hPV19JTlNUQU5DRShzZl9uYW1lLGN0bF9pZCkgXAotc3RhdGljIHNzaXplX3Qgc2ZfbmFtZSMjXyMjY3RsX2lkKHN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldiwgXAotc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoteyByZXR1cm4gc2ZfbmFtZShjdGxfaWQsY2xhc3NfZGV2LGJ1Zik7IH0KLQotI2RlZmluZSBDUkVBVEVfU1RPUkVfSU5TVEFOQ0Uoc2ZfbmFtZSxjdGxfaWQpIFwKLXN0YXRpYyBzc2l6ZV90IHNmX25hbWUjI18jI2N0bF9pZChzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXYsIFwKLXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAoteyByZXR1cm4gc2ZfbmFtZShjdGxfaWQsY2xhc3NfZGV2LGJ1Zixjb3VudCk7IH0KLQotI2RlZmluZSBDUkVBVEVfQkFUQ0goY3RsX2lkKSBcCi1DUkVBVEVfU0hPV19JTlNUQU5DRShzaG93X25hbWUsY3RsX2lkKSBcCi1DUkVBVEVfU0hPV19JTlNUQU5DRShzaG93X3R5cGUsY3RsX2lkKSBcCi1DUkVBVEVfU0hPV19JTlNUQU5DRShzaG93X21pbixjdGxfaWQpIFwKLUNSRUFURV9TSE9XX0lOU1RBTkNFKHNob3dfbWF4LGN0bF9pZCkgXAotQ1JFQVRFX1NIT1dfSU5TVEFOQ0Uoc2hvd192YWxfbm9ybSxjdGxfaWQpIFwKLUNSRUFURV9TSE9XX0lOU1RBTkNFKHNob3dfdmFsX2N1c3RvbSxjdGxfaWQpIFwKLUNSRUFURV9TSE9XX0lOU1RBTkNFKHNob3dfZW51bSxjdGxfaWQpIFwKLUNSRUFURV9TSE9XX0lOU1RBTkNFKHNob3dfYml0cyxjdGxfaWQpIFwKLUNSRUFURV9TVE9SRV9JTlNUQU5DRShzdG9yZV92YWxfbm9ybSxjdGxfaWQpIFwKLUNSRUFURV9TVE9SRV9JTlNUQU5DRShzdG9yZV92YWxfY3VzdG9tLGN0bF9pZCkgXAotCi1DUkVBVEVfQkFUQ0goMCkKLUNSRUFURV9CQVRDSCgxKQotQ1JFQVRFX0JBVENIKDIpCi1DUkVBVEVfQkFUQ0goMykKLUNSRUFURV9CQVRDSCg0KQotQ1JFQVRFX0JBVENIKDUpCi1DUkVBVEVfQkFUQ0goNikKLUNSRUFURV9CQVRDSCg3KQotQ1JFQVRFX0JBVENIKDgpCi1DUkVBVEVfQkFUQ0goOSkKLUNSRUFURV9CQVRDSCgxMCkKLUNSRUFURV9CQVRDSCgxMSkKLUNSRUFURV9CQVRDSCgxMikKLUNSRUFURV9CQVRDSCgxMykKLUNSRUFURV9CQVRDSCgxNCkKLUNSRUFURV9CQVRDSCgxNSkKLUNSRUFURV9CQVRDSCgxNikKLUNSRUFURV9CQVRDSCgxNykKLUNSRUFURV9CQVRDSCgxOCkKLUNSRUFURV9CQVRDSCgxOSkKLUNSRUFURV9CQVRDSCgyMCkKLUNSRUFURV9CQVRDSCgyMSkKLUNSRUFURV9CQVRDSCgyMikKLUNSRUFURV9CQVRDSCgyMykKLUNSRUFURV9CQVRDSCgyNCkKLUNSRUFURV9CQVRDSCgyNSkKLUNSRUFURV9CQVRDSCgyNikKLUNSRUFURV9CQVRDSCgyNykKLUNSRUFURV9CQVRDSCgyOCkKLUNSRUFURV9CQVRDSCgyOSkKLUNSRUFURV9CQVRDSCgzMCkKLUNSRUFURV9CQVRDSCgzMSkKLUNSRUFURV9CQVRDSCgzMikKLUNSRUFURV9CQVRDSCgzMykKLUNSRUFURV9CQVRDSCgzNCkKLUNSRUFURV9CQVRDSCgzNSkKLUNSRUFURV9CQVRDSCgzNikKLUNSRUFURV9CQVRDSCgzNykKLUNSRUFURV9CQVRDSCgzOCkKLUNSRUFURV9CQVRDSCgzOSkKLUNSRUFURV9CQVRDSCg0MCkKLUNSRUFURV9CQVRDSCg0MSkKLUNSRUFURV9CQVRDSCg0MikKLUNSRUFURV9CQVRDSCg0MykKLUNSRUFURV9CQVRDSCg0NCkKLUNSRUFURV9CQVRDSCg0NSkKLUNSRUFURV9CQVRDSCg0NikKLUNSRUFURV9CQVRDSCg0NykKLUNSRUFURV9CQVRDSCg0OCkKLUNSRUFURV9CQVRDSCg0OSkKLUNSRUFURV9CQVRDSCg1MCkKLUNSRUFURV9CQVRDSCg1MSkKLUNSRUFURV9CQVRDSCg1MikKLUNSRUFURV9CQVRDSCg1MykKLUNSRUFURV9CQVRDSCg1NCkKLUNSRUFURV9CQVRDSCg1NSkKLUNSRUFURV9CQVRDSCg1NikKLUNSRUFURV9CQVRDSCg1NykKLUNSRUFURV9CQVRDSCg1OCkKLUNSRUFURV9CQVRDSCg1OSkKLQotc3RydWN0IHB2cjJfc3lzZnNfZnVuY19zZXQgewotCXNzaXplX3QgKCpzaG93X25hbWUpKHN0cnVjdCBkZXZpY2UgKiwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnNob3dfdHlwZSkoc3RydWN0IGRldmljZSAqLAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc2hvd19taW4pKHN0cnVjdCBkZXZpY2UgKiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc2hvd19tYXgpKHN0cnVjdCBkZXZpY2UgKiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc2hvd19lbnVtKShzdHJ1Y3QgZGV2aWNlICosCi0JCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICopOwotCXNzaXplX3QgKCpzaG93X2JpdHMpKHN0cnVjdCBkZXZpY2UgKiwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnNob3dfdmFsX25vcm0pKHN0cnVjdCBkZXZpY2UgKiwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnN0b3JlX3ZhbF9ub3JtKShzdHJ1Y3QgZGV2aWNlICosCi0JCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgIGNvbnN0IGNoYXIgKixzaXplX3QpOwotCXNzaXplX3QgKCpzaG93X3ZhbF9jdXN0b20pKHN0cnVjdCBkZXZpY2UgKiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc3RvcmVfdmFsX2N1c3RvbSkoc3RydWN0IGRldmljZSAqLAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgY29uc3QgY2hhciAqLHNpemVfdCk7Ci19OwotCi0jZGVmaW5lIElOSVRfQkFUQ0goY3RsX2lkKSBcCi1bY3RsX2lkXSA9IHsgXAotICAgIC5zaG93X25hbWUgPSBzaG93X25hbWVfIyNjdGxfaWQsIFwKLSAgICAuc2hvd190eXBlID0gc2hvd190eXBlXyMjY3RsX2lkLCBcCi0gICAgLnNob3dfbWluID0gc2hvd19taW5fIyNjdGxfaWQsIFwKLSAgICAuc2hvd19tYXggPSBzaG93X21heF8jI2N0bF9pZCwgXAotICAgIC5zaG93X2VudW0gPSBzaG93X2VudW1fIyNjdGxfaWQsIFwKLSAgICAuc2hvd19iaXRzID0gc2hvd19iaXRzXyMjY3RsX2lkLCBcCi0gICAgLnNob3dfdmFsX25vcm0gPSBzaG93X3ZhbF9ub3JtXyMjY3RsX2lkLCBcCi0gICAgLnN0b3JlX3ZhbF9ub3JtID0gc3RvcmVfdmFsX25vcm1fIyNjdGxfaWQsIFwKLSAgICAuc2hvd192YWxfY3VzdG9tID0gc2hvd192YWxfY3VzdG9tXyMjY3RsX2lkLCBcCi0gICAgLnN0b3JlX3ZhbF9jdXN0b20gPSBzdG9yZV92YWxfY3VzdG9tXyMjY3RsX2lkLCBcCi19IFwKLQotc3RhdGljIHN0cnVjdCBwdnIyX3N5c2ZzX2Z1bmNfc2V0IGZ1bmNzW10gPSB7Ci0JSU5JVF9CQVRDSCgwKSwKLQlJTklUX0JBVENIKDEpLAotCUlOSVRfQkFUQ0goMiksCi0JSU5JVF9CQVRDSCgzKSwKLQlJTklUX0JBVENIKDQpLAotCUlOSVRfQkFUQ0goNSksCi0JSU5JVF9CQVRDSCg2KSwKLQlJTklUX0JBVENIKDcpLAotCUlOSVRfQkFUQ0goOCksCi0JSU5JVF9CQVRDSCg5KSwKLQlJTklUX0JBVENIKDEwKSwKLQlJTklUX0JBVENIKDExKSwKLQlJTklUX0JBVENIKDEyKSwKLQlJTklUX0JBVENIKDEzKSwKLQlJTklUX0JBVENIKDE0KSwKLQlJTklUX0JBVENIKDE1KSwKLQlJTklUX0JBVENIKDE2KSwKLQlJTklUX0JBVENIKDE3KSwKLQlJTklUX0JBVENIKDE4KSwKLQlJTklUX0JBVENIKDE5KSwKLQlJTklUX0JBVENIKDIwKSwKLQlJTklUX0JBVENIKDIxKSwKLQlJTklUX0JBVENIKDIyKSwKLQlJTklUX0JBVENIKDIzKSwKLQlJTklUX0JBVENIKDI0KSwKLQlJTklUX0JBVENIKDI1KSwKLQlJTklUX0JBVENIKDI2KSwKLQlJTklUX0JBVENIKDI3KSwKLQlJTklUX0JBVENIKDI4KSwKLQlJTklUX0JBVENIKDI5KSwKLQlJTklUX0JBVENIKDMwKSwKLQlJTklUX0JBVENIKDMxKSwKLQlJTklUX0JBVENIKDMyKSwKLQlJTklUX0JBVENIKDMzKSwKLQlJTklUX0JBVENIKDM0KSwKLQlJTklUX0JBVENIKDM1KSwKLQlJTklUX0JBVENIKDM2KSwKLQlJTklUX0JBVENIKDM3KSwKLQlJTklUX0JBVENIKDM4KSwKLQlJTklUX0JBVENIKDM5KSwKLQlJTklUX0JBVENIKDQwKSwKLQlJTklUX0JBVENIKDQxKSwKLQlJTklUX0JBVENIKDQyKSwKLQlJTklUX0JBVENIKDQzKSwKLQlJTklUX0JBVENIKDQ0KSwKLQlJTklUX0JBVENIKDQ1KSwKLQlJTklUX0JBVENIKDQ2KSwKLQlJTklUX0JBVENIKDQ3KSwKLQlJTklUX0JBVENIKDQ4KSwKLQlJTklUX0JBVENIKDQ5KSwKLQlJTklUX0JBVENIKDUwKSwKLQlJTklUX0JBVENIKDUxKSwKLQlJTklUX0JBVENIKDUyKSwKLQlJTklUX0JBVENIKDUzKSwKLQlJTklUX0JBVENIKDU0KSwKLQlJTklUX0JBVENIKDU1KSwKLQlJTklUX0JBVENIKDU2KSwKLQlJTklUX0JBVENIKDU3KSwKLQlJTklUX0JBVENIKDU4KSwKLQlJTklUX0JBVENIKDU5KSwKLX07Ci0KLQogc3RhdGljIHZvaWQgcHZyMl9zeXNmc19hZGRfY29udHJvbChzdHJ1Y3QgcHZyMl9zeXNmcyAqc2ZwLGludCBjdGxfaWQpCiB7CiAJc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0gKmNpcDsKLQlzdHJ1Y3QgcHZyMl9zeXNmc19mdW5jX3NldCAqZnA7CiAJc3RydWN0IHB2cjJfY3RybCAqY3B0cjsKIAl1bnNpZ25lZCBpbnQgY250LGFjbnQ7CiAJaW50IHJldDsKIAotCWlmICgoY3RsX2lkIDwgMCkgfHwgKGN0bF9pZCA+PSBBUlJBWV9TSVpFKGZ1bmNzKSkpIHsKLQkJcmV0dXJuOwotCX0KLQotCWZwID0gZnVuY3MgKyBjdGxfaWQ7CiAJY3B0ciA9IHB2cjJfaGR3X2dldF9jdHJsX2J5X2luZGV4KHNmcC0+Y2hhbm5lbC5oZHcsY3RsX2lkKTsKIAlpZiAoIWNwdHIpIHJldHVybjsKIApAQCAtNTI3LDYgKzI5Myw3IEBACiAJcHZyMl9zeXNmc190cmFjZSgiQ3JlYXRpbmcgcHZyMl9zeXNmc19jdGxfaXRlbSBpZD0lcCIsY2lwKTsKIAogCWNpcC0+Y3B0ciA9IGNwdHI7CisJY2lwLT5jdGxfaWQgPSBjdGxfaWQ7CiAKIAljaXAtPmNocHRyID0gc2ZwOwogCWNpcC0+aXRlbV9uZXh0ID0gTlVMTDsKQEAgLTUzOSwxOSArMzA2LDE5IEBACiAKIAljaXAtPmF0dHJfbmFtZS5hdHRyLm5hbWUgPSAibmFtZSI7CiAJY2lwLT5hdHRyX25hbWUuYXR0ci5tb2RlID0gU19JUlVHTzsKLQljaXAtPmF0dHJfbmFtZS5zaG93ID0gZnAtPnNob3dfbmFtZTsKKwljaXAtPmF0dHJfbmFtZS5zaG93ID0gc2hvd19uYW1lOwogCiAJY2lwLT5hdHRyX3R5cGUuYXR0ci5uYW1lID0gInR5cGUiOwogCWNpcC0+YXR0cl90eXBlLmF0dHIubW9kZSA9IFNfSVJVR087Ci0JY2lwLT5hdHRyX3R5cGUuc2hvdyA9IGZwLT5zaG93X3R5cGU7CisJY2lwLT5hdHRyX3R5cGUuc2hvdyA9IHNob3dfdHlwZTsKIAogCWNpcC0+YXR0cl9taW4uYXR0ci5uYW1lID0gIm1pbl92YWwiOwogCWNpcC0+YXR0cl9taW4uYXR0ci5tb2RlID0gU19JUlVHTzsKLQljaXAtPmF0dHJfbWluLnNob3cgPSBmcC0+c2hvd19taW47CisJY2lwLT5hdHRyX21pbi5zaG93ID0gc2hvd19taW47CiAKIAljaXAtPmF0dHJfbWF4LmF0dHIubmFtZSA9ICJtYXhfdmFsIjsKIAljaXAtPmF0dHJfbWF4LmF0dHIubW9kZSA9IFNfSVJVR087Ci0JY2lwLT5hdHRyX21heC5zaG93ID0gZnAtPnNob3dfbWF4OworCWNpcC0+YXR0cl9tYXguc2hvdyA9IHNob3dfbWF4OwogCiAJY2lwLT5hdHRyX3ZhbC5hdHRyLm5hbWUgPSAiY3VyX3ZhbCI7CiAJY2lwLT5hdHRyX3ZhbC5hdHRyLm1vZGUgPSBTX0lSVUdPOwpAQCAtNTYxLDExICszMjgsMTEgQEAKIAogCWNpcC0+YXR0cl9lbnVtLmF0dHIubmFtZSA9ICJlbnVtX3ZhbCI7CiAJY2lwLT5hdHRyX2VudW0uYXR0ci5tb2RlID0gU19JUlVHTzsKLQljaXAtPmF0dHJfZW51bS5zaG93ID0gZnAtPnNob3dfZW51bTsKKwljaXAtPmF0dHJfZW51bS5zaG93ID0gc2hvd19lbnVtOwogCiAJY2lwLT5hdHRyX2JpdHMuYXR0ci5uYW1lID0gImJpdF92YWwiOwogCWNpcC0+YXR0cl9iaXRzLmF0dHIubW9kZSA9IFNfSVJVR087Ci0JY2lwLT5hdHRyX2JpdHMuc2hvdyA9IGZwLT5zaG93X2JpdHM7CisJY2lwLT5hdHRyX2JpdHMuc2hvdyA9IHNob3dfYml0czsKIAogCWlmIChwdnIyX2N0cmxfaXNfd3JpdGFibGUoY3B0cikpIHsKIAkJY2lwLT5hdHRyX3ZhbC5hdHRyLm1vZGUgfD0gU19JV1VTUnxTX0lXR1JQOwpAQCAtNTc2LDEyICszNDMsMTIgQEAKIAljaXAtPmF0dHJfZ2VuW2FjbnQrK10gPSAmY2lwLT5hdHRyX25hbWUuYXR0cjsKIAljaXAtPmF0dHJfZ2VuW2FjbnQrK10gPSAmY2lwLT5hdHRyX3R5cGUuYXR0cjsKIAljaXAtPmF0dHJfZ2VuW2FjbnQrK10gPSAmY2lwLT5hdHRyX3ZhbC5hdHRyOwotCWNpcC0+YXR0cl92YWwuc2hvdyA9IGZwLT5zaG93X3ZhbF9ub3JtOwotCWNpcC0+YXR0cl92YWwuc3RvcmUgPSBmcC0+c3RvcmVfdmFsX25vcm07CisJY2lwLT5hdHRyX3ZhbC5zaG93ID0gc2hvd192YWxfbm9ybTsKKwljaXAtPmF0dHJfdmFsLnN0b3JlID0gc3RvcmVfdmFsX25vcm07CiAJaWYgKHB2cjJfY3RybF9oYXNfY3VzdG9tX3N5bWJvbHMoY3B0cikpIHsKIAkJY2lwLT5hdHRyX2dlblthY250KytdID0gJmNpcC0+YXR0cl9jdXN0b20uYXR0cjsKLQkJY2lwLT5hdHRyX2N1c3RvbS5zaG93ID0gZnAtPnNob3dfdmFsX2N1c3RvbTsKLQkJY2lwLT5hdHRyX2N1c3RvbS5zdG9yZSA9IGZwLT5zdG9yZV92YWxfY3VzdG9tOworCQljaXAtPmF0dHJfY3VzdG9tLnNob3cgPSBzaG93X3ZhbF9jdXN0b207CisJCWNpcC0+YXR0cl9jdXN0b20uc3RvcmUgPSBzdG9yZV92YWxfY3VzdG9tOwogCX0KIAlzd2l0Y2ggKHB2cjJfY3RybF9nZXRfdHlwZShjcHRyKSkgewogCWNhc2UgcHZyMl9jdGxfZW51bToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5oCmluZGV4IGZmOTM3M2IuLjZkODc1YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuaApAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuYwppbmRleCAwNWU2NWNlLi4wNzc3NWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuaAppbmRleCA1NTZmMTJhYS4uZWY0YWZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXV0aWwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXV0aWwuaAppbmRleCBlNTNhZWU0Li45MmI3NTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi11dGlsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdXRpbC5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwppbmRleCBlOWI1ZDRlLi4wZDcyZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5oCmluZGV4IDlhOTk1ZTIuLjM0YzAxMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmgKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYwppbmRleCAyNDMzYTMxLi40MDU5NjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKaW5kZXggMmI5MTdmZC4uNGZmNWI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKQEAgLTEsNiArMSw1IEBACiAvKgogICoKLSAqICAkSWQkCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5jCmluZGV4IDY2YjRkMzYuLmY2ZmNmMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqCi0gKiAgJElkJAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgogICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuaAppbmRleCA4YWFlZmY0Li44MDcwOTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuaApAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi5oCmluZGV4IDFhOWE0YmEuLjI0MGRlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjIuaApAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKgotICogICRJZCQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jCmluZGV4IGVhNTMzMTYuLjFjY2NkNWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMKQEAgLTEyNTUsNyArMTI1NSw2IEBACiAgICBleGFjdGx5IHRoZSBzYW1lIG90aGVyd2lzZS4KICAqLwogCi0KIC8qIGRlZmluZSBsb2NhbCB2YXJpYWJsZSBmb3IgYXJnICovCiAjZGVmaW5lIEFSR19ERUYoQVJHX3R5cGUsIEFSR19uYW1lKVwKIAlBUkdfdHlwZSAqQVJHX25hbWUgPSBhcmc7CkBAIC0xMjY4LDcgKzEyNjcsNiBAQAogLyogY29weSBsb2NhbCB2YXJpYWJsZSB0byBhcmcgKi8KICNkZWZpbmUgQVJHX09VVChBUkdfbmFtZSkgLyogbm90aGluZyAqLwogCi0KIGludCBwd2NfaW9jdGwoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlpbnQgcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pb2N0bC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlvY3RsLmgKaW5kZXggY2VjNjYwMi4uOGMwY2FlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlvY3RsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlvY3RsLmgKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAotCiAgLyogRW51bWVyYXRpb24gb2YgaW1hZ2Ugc2l6ZXMgKi8KICNkZWZpbmUgUFNaX1NRQ0lGCTB4MDAKICNkZWZpbmUgUFNaX1FTSUYJMHgwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCA1ZWM1YmI5Li5iMTVmODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpAQCAtNTgyLDYgKzU4MywxOSBAQAogCS5idWZfcmVsZWFzZSAgICA9IHB4YV92aWRlb2J1Zl9yZWxlYXNlLAogfTsKIAorc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9pbml0X3ZpZGVvYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisKKwkvKiBXZSBtdXN0IHBhc3MgTlVMTCBhcyBkZXYgcG9pbnRlciwgdGhlbiBhbGwgcGNpXyogZG1hIG9wZXJhdGlvbnMKKwkgKiB0cmFuc2Zvcm0gdG8gbm9ybWFsIGRtYV8qIG9uZXMuICovCisJdmlkZW9idWZfcXVldWVfc2dfaW5pdChxLCAmcHhhX3ZpZGVvYnVmX29wcywgTlVMTCwgJnBjZGV2LT5sb2NrLAorCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwgVjRMMl9GSUVMRF9OT05FLAorCQkJCXNpemVvZihzdHJ1Y3QgcHhhX2J1ZmZlciksIGljZCk7Cit9CisKIHN0YXRpYyBpbnQgbWNsa19nZXRfZGl2aXNvcihzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2KQogewogCXVuc2lnbmVkIGludCBtY2xrXzEwa2h6ID0gcGNkZXYtPnBsYXRmb3JtX21jbGtfMTBraHo7CkBAIC05ODMsMzQgKzk5NywyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3BpbmxvY2tfdCAqcHhhX2NhbWVyYV9zcGlubG9ja19hbGxvYyhzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YpCi17Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZi0+aWNkLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwotCi0JcmV0dXJuICZwY2Rldi0+bG9jazsKLX0KLQogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3Rfb3BzIHB4YV9zb2NfY2FtZXJhX2hvc3Rfb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuYWRkCQk9IHB4YV9jYW1lcmFfYWRkX2RldmljZSwKIAkucmVtb3ZlCQk9IHB4YV9jYW1lcmFfcmVtb3ZlX2RldmljZSwKIAkuc2V0X2ZtdF9jYXAJPSBweGFfY2FtZXJhX3NldF9mbXRfY2FwLAogCS50cnlfZm10X2NhcAk9IHB4YV9jYW1lcmFfdHJ5X2ZtdF9jYXAsCisJLmluaXRfdmlkZW9idWYJPSBweGFfY2FtZXJhX2luaXRfdmlkZW9idWYsCiAJLnJlcWJ1ZnMJPSBweGFfY2FtZXJhX3JlcWJ1ZnMsCiAJLnBvbGwJCT0gcHhhX2NhbWVyYV9wb2xsLAogCS5xdWVyeWNhcAk9IHB4YV9jYW1lcmFfcXVlcnljYXAsCiAJLnRyeV9idXNfcGFyYW0JPSBweGFfY2FtZXJhX3RyeV9idXNfcGFyYW0sCiAJLnNldF9idXNfcGFyYW0JPSBweGFfY2FtZXJhX3NldF9idXNfcGFyYW0sCi0JLnNwaW5sb2NrX2FsbG9jCT0gcHhhX2NhbWVyYV9zcGlubG9ja19hbGxvYywKIH07CiAKIC8qIFNob3VsZCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgdG9vLCBidXQgd2UgaGF2ZSBvbmx5IG9uZS4gKi8KIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0IHB4YV9zb2NfY2FtZXJhX2hvc3QgPSB7CiAJLmRydl9uYW1lCQk9IFBYQV9DQU1fRFJWX05BTUUsCi0JLnZicV9vcHMJCT0gJnB4YV92aWRlb2J1Zl9vcHMsCi0JLm1zaXplCQkJPSBzaXplb2Yoc3RydWN0IHB4YV9idWZmZXIpLAogCS5vcHMJCQk9ICZweGFfc29jX2NhbWVyYV9ob3N0X29wcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGViMmMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCkBAIC0wLDAgKzEsMjQ5NSBAQAorLyoKKyAqICBzMjI1NWRydi5jIC0gYSBkcml2ZXIgZm9yIHRoZSBTZW5zb3JheSAyMjU1IFVTQiB2aWRlbyBjYXB0dXJlIGRldmljZQorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggYnkgU2Vuc29yYXkgQ29tcGFueSBJbmMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYW4gQW5kZXJzb24KKyAqCisgKiBTb21lIHZpZGVvIGJ1ZmZlciBjb2RlIGJhc2VkIG9uIHZpdmkgZHJpdmVyOgorICoKKyAqIFNlbnNvcmF5IDIyNTUgZGV2aWNlIHN1cHBvcnRzIDQgc2ltdWx0YW5lb3VzIGNoYW5uZWxzLgorICogVGhlIGNoYW5uZWxzIGFyZSBub3QgImNyb3NzYmFyIiBpbnB1dHMsIHRoZXkgYXJlIHBoeXNpY2FsbHkKKyAqIGF0dGFjaGVkIHRvIHNlcGFyYXRlIHZpZGVvIGRlY29kZXJzLgorICoKKyAqIEJlY2F1c2Ugb2YgVVNCMi4wIGJhbmR3aWR0aCBsaW1pdGF0aW9ucy4gVGhlcmUgaXMgb25seSBhCisgKiBjZXJ0YWluIGFtb3VudCBvZiBkYXRhIHdoaWNoIG1heSBiZSB0cmFuc2ZlcnJlZCBhdCBvbmUgdGltZS4KKyAqCisgKiBFeGFtcGxlIG1heGltdW0gYmFuZHdpZHRoIHV0aWxpemF0aW9uOgorICoKKyAqIC1mdWxsIHNpemUsIGNvbG9yIG1vZGUgWVVZViBvciBZVVY0MjJQOiAyIGNoYW5uZWxzIGF0IG9uY2UKKyAqCisgKiAtZnVsbCBvciBoYWxmIHNpemUgR3JleSBzY2FsZTogYWxsIDQgY2hhbm5lbHMgYXQgb25jZQorICoKKyAqIC1oYWxmIHNpemUsIGNvbG9yIG1vZGUgWVVZViBvciBZVVY0MjJQOiBhbGwgNCBjaGFubmVscyBhdCBvbmNlCisgKgorICogLWZ1bGwgc2l6ZSwgY29sb3IgbW9kZSBZVVlWIG9yIFlVVjQyMlAgMS8yIGZyYW1lIHJhdGU6IGFsbCA0IGNoYW5uZWxzCisgKiAgYXQgb25jZS4KKyAqICAoVE9ETzogSW5jb3Jwb3JhdGUgdmlkZW9kZXYyIGZyYW1lIHJhdGUoRlIpIGVudW1lcmF0aW9uLAorICogIHdoaWNoIGlzIGN1cnJlbnRseSBleHBlcmltZW50YWwuKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBGSVJNV0FSRV9GSUxFX05BTUUgImYyMjU1dXNiLmJpbiIKKworCisKKy8qIHZlbmRvciByZXF1ZXN0IGluICovCisjZGVmaW5lIFMyMjU1X1ZSX0lOCQkwCisvKiB2ZW5kb3IgcmVxdWVzdCBvdXQgKi8KKyNkZWZpbmUgUzIyNTVfVlJfT1VUCQkxCisvKiBmaXJtd2FyZSBxdWVyeSAqLworI2RlZmluZSBTMjI1NV9WUl9GVwkJMHgzMAorLyogVVNCIGVuZHBvaW50IG51bWJlciBmb3IgY29uZmlndXJpbmcgdGhlIGRldmljZSAqLworI2RlZmluZSBTMjI1NV9DT05GSUdfRVAgICAgICAgICAyCisvKiBtYXhpbXVtIHRpbWUgZm9yIERTUCB0byBzdGFydCByZXNwb25kaW5nIGFmdGVyIGxhc3QgRlcgd29yZCBsb2FkZWQobXMpICovCisjZGVmaW5lIFMyMjU1X0RTUF9CT09UVElNRSAgICAgIDQwMAorLyogbWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIGZpcm13YXJlIHRvIGxvYWQgKG1zKSAqLworI2RlZmluZSBTMjI1NV9MT0FEX1RJTUVPVVQgICAgICAoNTAwMCArIFMyMjU1X0RTUF9CT09UVElNRSkKKyNkZWZpbmUgUzIyNTVfREVGX0JVRlMgICAgICAgICAgMTYKKyNkZWZpbmUgTUFYX0NIQU5ORUxTCQk0CisjZGVmaW5lIEZSQU1FX01BUktFUgkJMHgyMjU1REE0QUwKKyNkZWZpbmUgTUFYX1BJUEVfVVNCQkxPQ0sJKDQwICogMTAyNCkKKyNkZWZpbmUgREVGQVVMVF9QSVBFX1VTQkJMT0NLCSgxNiAqIDEwMjQpCisjZGVmaW5lIE1BWF9DSEFOTkVMUwkJNAorI2RlZmluZSBNQVhfUElQRV9CVUZGRVJTCTEKKyNkZWZpbmUgU1lTX0ZSQU1FUwkJNAorLyogbWF4aW11bSBzaXplIGlzIFBBTCBmdWxsIHNpemUgcGx1cyByb29tIGZvciB0aGUgbWFya2VyIGhlYWRlcihzKSAqLworI2RlZmluZSBTWVNfRlJBTUVTX01BWFNJWkUJKDcyMCAqIDI4OCAqIDIgKiAyICsgNDA5NikKKyNkZWZpbmUgREVGX1VTQl9CTE9DSwkJKDQwOTYpCisjZGVmaW5lIExJTkVfU1pfNENJRlNfTlRTQwk2NDAKKyNkZWZpbmUgTElORV9TWl8yQ0lGU19OVFNDCTY0MAorI2RlZmluZSBMSU5FX1NaXzFDSUZTX05UU0MJMzIwCisjZGVmaW5lIExJTkVfU1pfNENJRlNfUEFMCTcwNAorI2RlZmluZSBMSU5FX1NaXzJDSUZTX1BBTAk3MDQKKyNkZWZpbmUgTElORV9TWl8xQ0lGU19QQUwJMzUyCisjZGVmaW5lIE5VTV9MSU5FU180Q0lGU19OVFNDCTI0MAorI2RlZmluZSBOVU1fTElORVNfMkNJRlNfTlRTQwkyNDAKKyNkZWZpbmUgTlVNX0xJTkVTXzFDSUZTX05UU0MJMjQwCisjZGVmaW5lIE5VTV9MSU5FU180Q0lGU19QQUwJMjg4CisjZGVmaW5lIE5VTV9MSU5FU18yQ0lGU19QQUwJMjg4CisjZGVmaW5lIE5VTV9MSU5FU18xQ0lGU19QQUwJMjg4CisjZGVmaW5lIExJTkVfU1pfREVGCQk2NDAKKyNkZWZpbmUgTlVNX0xJTkVTX0RFRgkJMjQwCisKKworLyogcHJlZGVmaW5lZCBzZXR0aW5ncyAqLworI2RlZmluZSBGT1JNQVRfTlRTQwkxCisjZGVmaW5lIEZPUk1BVF9QQUwJMgorCisjZGVmaW5lIFNDQUxFXzRDSUZTCTEJLyogNjQweDQ4MChOVFNDKSBvciA3MDR4NTc2KFBBTCkgKi8KKyNkZWZpbmUgU0NBTEVfMkNJRlMJMgkvKiA2NDB4MjQwKE5UU0MpIG9yIDcwNHgyODgoUEFMKSAqLworI2RlZmluZSBTQ0FMRV8xQ0lGUwkzCS8qIDMyMHgyNDAoTlRTQykgb3IgMzUyeDI4OChQQUwpICovCisKKyNkZWZpbmUgQ09MT1JfWVVWUEwJMQkvKiBZVVYgcGxhbmFyICovCisjZGVmaW5lIENPTE9SX1lVVlBLCTIJLyogWVVWIHBhY2tlZCAqLworI2RlZmluZSBDT0xPUl9ZOAk0CS8qIG1vbm9jaHJvbWUgKi8KKworLyogZnJhbWUgZGVjaW1hdGlvbi4gTm90IGltcGxlbWVudGVkIGJ5IFY0TCB5ZXQoZXhwZXJpbWVudGFsIGluIFY0TCkgKi8KKyNkZWZpbmUgRkRFQ18xCQkxCS8qIGNhcHR1cmUgZXZlcnkgZnJhbWUuIGRlZmF1bHQgKi8KKyNkZWZpbmUgRkRFQ18yCQkyCS8qIGNhcHR1cmUgZXZlcnkgMm5kIGZyYW1lICovCisjZGVmaW5lIEZERUNfMwkJMwkvKiBjYXB0dXJlIGV2ZXJ5IDNyZCBmcmFtZSAqLworI2RlZmluZSBGREVDXzUJCTUJLyogY2FwdHVyZSBldmVyeSA1dGggZnJhbWUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZhdWx0IG1vZGUgcGFyYW1ldGVycy4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIERFRl9TQ0FMRQlTQ0FMRV80Q0lGUworI2RlZmluZSBERUZfQ09MT1IJQ09MT1JfWVVWUEwKKyNkZWZpbmUgREVGX0ZERUMJRkRFQ18xCisjZGVmaW5lIERFRl9CUklHSFQJMAorI2RlZmluZSBERUZfQ09OVFJBU1QJMHg1YworI2RlZmluZSBERUZfU0FUVVJBVElPTgkweDgwCisjZGVmaW5lIERFRl9IVUUJCTAKKworLyogdXNiIGNvbmZpZyBjb21tYW5kcyAqLworI2RlZmluZSBJTl9EQVRBX1RPS0VOCTB4MjI1NWMwZGUKKyNkZWZpbmUgQ01EXzIyNTUJMHhjMjI1NTAwMAorI2RlZmluZSBDTURfU0VUX01PREUJKENNRF8yMjU1IHwgMHgxMCkKKyNkZWZpbmUgQ01EX1NUQVJUCShDTURfMjI1NSB8IDB4MjApCisjZGVmaW5lIENNRF9TVE9QCShDTURfMjI1NSB8IDB4MzApCisjZGVmaW5lIENNRF9TVEFUVVMJKENNRF8yMjU1IHwgMHg0MCkKKworc3RydWN0IHMyMjU1X21vZGUgeworCXUzMiBmb3JtYXQ7CS8qIGlucHV0IHZpZGVvIGZvcm1hdCAoTlRTQywgUEFMKSAqLworCXUzMiBzY2FsZTsJLyogb3V0cHV0IHZpZGVvIHNjYWxlICovCisJdTMyIGNvbG9yOwkvKiBvdXRwdXQgdmlkZW8gY29sb3IgZm9ybWF0ICovCisJdTMyIGZkZWM7CS8qIGZyYW1lIGRlY2ltYXRpb24gKi8KKwl1MzIgYnJpZ2h0OwkvKiBicmlnaHRuZXNzICovCisJdTMyIGNvbnRyYXN0OwkvKiBjb250cmFzdCAqLworCXUzMiBzYXR1cmF0aW9uOwkvKiBzYXR1cmF0aW9uICovCisJdTMyIGh1ZTsJLyogaHVlIChOVFNDIG9ubHkpKi8KKwl1MzIgc2luZ2xlOwkvKiBjYXB0dXJlIDEgZnJhbWUgYXQgYSB0aW1lICghPTApLCBjb250aW51b3VzbHkgKD09MCkqLworCXUzMiB1c2JfYmxvY2s7CS8qIGJsb2NrIHNpemUuIHNob3VsZCBiZSA0MDk2IG9mIERFRl9VU0JfQkxPQ0sgKi8KKwl1MzIgcmVzdGFydDsJLyogaWYgRFNQIHJlcXVpcmVzIHJlc3RhcnQgKi8KK307CisKKy8qIGZyYW1lIHN0cnVjdHVyZSAqLworI2RlZmluZSBGUkFNRV9TVEFURV9VTlVTRUQJMAorI2RlZmluZSBGUkFNRV9TVEFURV9GSUxMSU5HCTEKKyNkZWZpbmUgRlJBTUVfU1RBVEVfRlVMTAkyCisKKworc3RydWN0IHMyMjU1X2ZyYW1laSB7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJdW5zaWduZWQgbG9uZyB1bFN0YXRlOwkvKiB1bFN0YXRlID09MCB1bnVzZWQsIDEgYmVpbmcgZmlsbGVkLCAyIGZ1bGwgKi8KKwl2b2lkICpscHZiaXRzOwkJLyogaW1hZ2UgZGF0YSAqLworCXVuc2lnbmVkIGxvbmcgY3VyX3NpemU7CS8qIGN1cnJlbnQgZGF0YSBjb3BpZWQgdG8gaXQgKi8KK307CisKKy8qIGltYWdlIGJ1ZmZlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBzMjI1NV9idWZmZXJpIHsKKwl1bnNpZ25lZCBsb25nIGR3RnJhbWVzOwkJCS8qIG51bWJlciBvZiBmcmFtZXMgaW4gYnVmZmVyICovCisJc3RydWN0IHMyMjU1X2ZyYW1laSBmcmFtZVtTWVNfRlJBTUVTXTsJLyogYXJyYXkgb2YgRlJBTUUgc3RydWN0dXJlcyAqLworfTsKKworI2RlZmluZSBERUZfTU9ERUlfTlRTQ19DT05UCXtGT1JNQVRfTlRTQywgREVGX1NDQUxFLCBERUZfQ09MT1IsCVwKKwkJCURFRl9GREVDLCBERUZfQlJJR0hULCBERUZfQ09OVFJBU1QsIERFRl9TQVRVUkFUSU9OLCBcCisJCQlERUZfSFVFLCAwLCBERUZfVVNCX0JMT0NLLCAwfQorCitzdHJ1Y3QgczIyNTVfZG1hcXVldWUgeworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlOworCS8qIHRocmVhZCBmb3IgYWNxdWlzaXRpb24gKi8KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKmt0aHJlYWQ7CisJaW50CQkJZnJhbWU7CisJc3RydWN0IHMyMjU1X2RldgkqZGV2OworCWludAkJCWNoYW5uZWw7Cit9OworCisvKiBmb3IgZmlybXdhcmUgbG9hZGluZywgZndfc3RhdGUgKi8KKyNkZWZpbmUgUzIyNTVfRldfTk9UTE9BREVECTAKKyNkZWZpbmUgUzIyNTVfRldfTE9BREVEX0RTUFdBSVQJMQorI2RlZmluZSBTMjI1NV9GV19TVUNDRVNTCTIKKyNkZWZpbmUgUzIyNTVfRldfRkFJTEVECQkzCisKK3N0cnVjdCBzMjI1NV9mdyB7CisJaW50CQkgICAgICBmd19sb2FkZWQ7CisJaW50CQkgICAgICBmd19zaXplOworCXN0cnVjdCB1cmIJICAgICAgKmZ3X3VyYjsKKwlhdG9taWNfdAkgICAgICBmd19zdGF0ZTsKKwl2b2lkCQkgICAgICAqcGZ3X2RhdGE7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIHdhaXRfZnc7CisJc3RydWN0IHRpbWVyX2xpc3QgICAgIGRzcF93YWl0OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Cit9OworCitzdHJ1Y3QgczIyNTVfcGlwZWluZm8geworCXUzMiBtYXhfdHJhbnNmZXJfc2l6ZTsKKwl1MzIgY3VyX3RyYW5zZmVyX3NpemU7CisJdTggKnRyYW5zZmVyX2J1ZmZlcjsKKwl1MzIgdHJhbnNmZXJfZmxhZ3M7OworCXUzMiBzdGF0ZTsKKwl1MzIgcHJldl9zdGF0ZTsKKwl1MzIgdXJiX3NpemU7CisJdm9pZCAqc3RyZWFtX3VyYjsKKwl2b2lkICpkZXY7CS8qIGJhY2sgcG9pbnRlciB0byBzMjI1NV9kZXYgc3RydWN0Ki8KKwl1MzIgZXJyX2NvdW50OworCXUzMiBidWZfaW5kZXg7CisJdTMyIGlkeDsKKwl1MzIgcHJpb3JpdHlfc2V0OworfTsKKworc3RydWN0IHMyMjU1X2ZtdDsgLypmb3J3YXJkIGRlY2xhcmF0aW9uICovCisKK3N0cnVjdCBzMjI1NV9kZXYgeworCWludAkJCWZyYW1lczsKKwlpbnQJCQl1c2Vyc1tNQVhfQ0hBTk5FTFNdOworCXN0cnVjdCBtdXRleAkJbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCW9wZW5fbG9jazsKKwlpbnQJCQlyZXNvdXJjZXNbTUFYX0NIQU5ORUxTXTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOworCXU4CQkJcmVhZF9lbmRwb2ludDsKKworCXN0cnVjdCBzMjI1NV9kbWFxdWV1ZQl2aWRxW01BWF9DSEFOTkVMU107CisJc3RydWN0IHZpZGVvX2RldmljZQkqdmRldltNQVhfQ0hBTk5FTFNdOworCXN0cnVjdCBsaXN0X2hlYWQJczIyNTVfZGV2bGlzdDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKKwlzdHJ1Y3QgczIyNTVfZncJKmZ3X2RhdGE7CisJaW50CQkJYm9hcmRfbnVtOworCWludAkJCWlzX29wZW47CisJc3RydWN0IHMyMjU1X3BpcGVpbmZvCXBpcGVzW01BWF9QSVBFX0JVRkZFUlNdOworCXN0cnVjdCBzMjI1NV9idWZmZXJpCQlidWZmZXJbTUFYX0NIQU5ORUxTXTsKKwlzdHJ1Y3QgczIyNTVfbW9kZQltb2RlW01BWF9DSEFOTkVMU107CisJY29uc3Qgc3RydWN0IHMyMjU1X2ZtdAkqY3VyX2ZtdFtNQVhfQ0hBTk5FTFNdOworCWludAkJCWN1cl9mcmFtZVtNQVhfQ0hBTk5FTFNdOworCWludAkJCWxhc3RfZnJhbWVbTUFYX0NIQU5ORUxTXTsKKwl1MzIJCQljYzsJLyogY3VycmVudCBjaGFubmVsICovCisJaW50CQkJYl9hY3F1aXJlW01BWF9DSEFOTkVMU107CisJdW5zaWduZWQgbG9uZwkJcmVxX2ltYWdlX3NpemVbTUFYX0NIQU5ORUxTXTsKKwlpbnQJCQliYWRfcGF5bG9hZFtNQVhfQ0hBTk5FTFNdOworCXVuc2lnbmVkIGxvbmcJCWZyYW1lX2NvdW50W01BWF9DSEFOTkVMU107CisJaW50CQkJZnJhbWVfcmVhZHk7CisJc3RydWN0IGtyZWYJCWtyZWY7CisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgc2xvY2s7Cit9OworI2RlZmluZSB0b19zMjI1NV9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBzMjI1NV9kZXYsIGtyZWYpCisKK3N0cnVjdCBzMjI1NV9mbXQgeworCWNoYXIgKm5hbWU7CisJdTMyIGZvdXJjYzsKKwlpbnQgZGVwdGg7Cit9OworCisvKiBidWZmZXIgZm9yIG9uZSB2aWRlbyBmcmFtZSAqLworc3RydWN0IHMyMjU1X2J1ZmZlciB7CisJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7CisJY29uc3Qgc3RydWN0IHMyMjU1X2ZtdCAqZm10OworfTsKKworc3RydWN0IHMyMjU1X2ZoIHsKKwlzdHJ1Y3QgczIyNTVfZGV2CSpkZXY7CisJdW5zaWduZWQgaW50CQlyZXNvdXJjZXM7CisJY29uc3Qgc3RydWN0IHMyMjU1X2ZtdAkqZm10OworCXVuc2lnbmVkIGludAkJd2lkdGg7CisJdW5zaWduZWQgaW50CQloZWlnaHQ7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlCXZiX3ZpZHE7CisJZW51bSB2NGwyX2J1Zl90eXBlCXR5cGU7CisJaW50CQkJY2hhbm5lbDsKKwkvKiBtb2RlIGJlbG93IGlzIHRoZSBkZXNpcmVkIG1vZGUuCisJICAgbW9kZSBpbiBzMjI1NV9kZXYgaXMgdGhlIGN1cnJlbnQgbW9kZSB0aGF0IHdhcyBsYXN0IHNldCAqLworCXN0cnVjdCBzMjI1NV9tb2RlCW1vZGU7Cit9OworCisvKgorICogVE9ETzogZml4bWUgUzIyNTVfTUFYX1VTRVJTLiBEbyBub3QgbGltaXQgb3BlbiBkcml2ZXIgaGFuZGxlcy4KKyAqIExpbWl0IFY0TCB0byBvbmUgc3RyZWFtIGF0IGEgdGltZS4KKyAqLworI2RlZmluZSBTMjI1NV9NQVhfVVNFUlMgICAgICAgICAxCisKKyNkZWZpbmUgQ1VSX1VTQl9GV1ZFUgk3NzQJLyogY3VycmVudCBjeXByZXNzIEVFUFJPTSBmaXJtd2FyZSB2ZXJzaW9uICovCisjZGVmaW5lIFMyMjU1X01BSk9SX1ZFUlNJT04JMQorI2RlZmluZSBTMjI1NV9NSU5PUl9WRVJTSU9OCTEzCisjZGVmaW5lIFMyMjU1X1JFTEVBU0UJCTAKKyNkZWZpbmUgUzIyNTVfVkVSU0lPTgkJS0VSTkVMX1ZFUlNJT04oUzIyNTVfTUFKT1JfVkVSU0lPTiwgXAorCQkJCQkgICAgICAgUzIyNTVfTUlOT1JfVkVSU0lPTiwgXAorCQkJCQkgICAgICAgUzIyNTVfUkVMRUFTRSkKKworLyogdmVuZG9yIGlkcyAqLworI2RlZmluZSBVU0JfUzIyNTVfVkVORE9SX0lECTB4MTk0MworI2RlZmluZSBVU0JfUzIyNTVfUFJPRFVDVF9JRAkweDIyNTUKKyNkZWZpbmUgUzIyNTVfTk9STVMJCShWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9OVFNDKQorLyogZnJhbWUgcHJlZml4IHNpemUgKHNlbnQgb25jZSBldmVyeSBmcmFtZSkgKi8KKyNkZWZpbmUgUFJFRklYX1NJWkUJCTUxMgorCisvKiBDaGFubmVscyBvbiBib3ggYXJlIGluIHJldmVyc2Ugb3JkZXIgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEdfY2hubWFwW01BWF9DSEFOTkVMU10gPSB7MywgMiwgMSwgMH07CisKK3N0YXRpYyBMSVNUX0hFQUQoczIyNTVfZGV2bGlzdCk7CisKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50ICpzMjI1NV9kZWJ1ZyA9ICZkZWJ1ZzsKKworc3RhdGljIGludCBzMjI1NV9zdGFydF9yZWFkcGlwZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpOworc3RhdGljIHZvaWQgczIyNTVfc3RvcF9yZWFkcGlwZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpOworc3RhdGljIGludCBzMjI1NV9zdGFydF9hY3F1aXJlKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBjaG4pOworc3RhdGljIGludCBzMjI1NV9zdG9wX2FjcXVpcmUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGNobik7CitzdGF0aWMgdm9pZCBzMjI1NV9maWxsYnVmZihzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHN0cnVjdCBzMjI1NV9idWZmZXIgKmJ1ZiwKKwkJCSAgIGludCBjaG4pOworc3RhdGljIGludCBzMjI1NV9zZXRfbW9kZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huLAorCQkJICBzdHJ1Y3QgczIyNTVfbW9kZSAqbW9kZSk7CitzdGF0aWMgaW50IHMyMjU1X2JvYXJkX3NodXRkb3duKHN0cnVjdCBzMjI1NV9kZXYgKmRldik7CitzdGF0aWMgdm9pZCBzMjI1NV9leGl0X3Y0bChzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpOworc3RhdGljIHZvaWQgczIyNTVfZndsb2FkX3N0YXJ0KHN0cnVjdCBzMjI1NV9kZXYgKmRldik7CisKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoKnMyMjU1X2RlYnVnID49IChsZXZlbCkpIHsJCQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgInMyMjU1OiAiIGZtdCwgIyNhcmcpOwlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHMyMjU1X2RyaXZlcjsKKworCisvKiBEZWNsYXJlIHN0YXRpYyB2YXJzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkX2xpbWl0ID0gMTY7CS8qIFZpZGVvIG1lbW9yeSBsaW1pdCwgaW4gTWIgKi8KKworLyogc3RhcnQgdmlkZW8gbnVtYmVyICovCitzdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CS8qIC9kZXYvdmlkZW9OLCAtMSBmb3IgYXV0b2RldGVjdCAqLworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwoMC0xMDApIGRlZmF1bHQgMCIpOworbW9kdWxlX3BhcmFtKHZpZF9saW1pdCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkX2xpbWl0LCAidmlkZW8gbWVtb3J5IGxpbWl0KE1iKSIpOworbW9kdWxlX3BhcmFtKHZpZGVvX25yLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgInN0YXJ0IHZpZGVvIG1pbm9yKC0xIGRlZmF1bHQgYXV0b2RldGVjdCkiKTsKKworLyogVVNCIGRldmljZSB0YWJsZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHMyMjU1X3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoVVNCX1MyMjU1X1ZFTkRPUl9JRCwgVVNCX1MyMjU1X1BST0RVQ1RfSUQpfSwKKwl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzMjI1NV90YWJsZSk7CisKKworI2RlZmluZSBCVUZGRVJfVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDQwMCkKKworLyogc3VwcG9ydGVkIGNvbnRyb2xzICovCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHMyMjU1X3FjdHJsW10gPSB7CisJeworCS5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCS5uYW1lID0gIkJyaWdodG5lc3MiLAorCS5taW5pbXVtID0gLTEyNywKKwkubWF4aW11bSA9IDEyOCwKKwkuc3RlcCA9IDEsCisJLmRlZmF1bHRfdmFsdWUgPSAwLAorCS5mbGFncyA9IDAsCisJfSwgeworCS5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkubmFtZSA9ICJDb250cmFzdCIsCisJLm1pbmltdW0gPSAwLAorCS5tYXhpbXVtID0gMjU1LAorCS5zdGVwID0gMHgxLAorCS5kZWZhdWx0X3ZhbHVlID0gREVGX0NPTlRSQVNULAorCS5mbGFncyA9IDAsCisJfSwgeworCS5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCS5uYW1lID0gIlNhdHVyYXRpb24iLAorCS5taW5pbXVtID0gMCwKKwkubWF4aW11bSA9IDI1NSwKKwkuc3RlcCA9IDB4MSwKKwkuZGVmYXVsdF92YWx1ZSA9IERFRl9TQVRVUkFUSU9OLAorCS5mbGFncyA9IDAsCisJfSwgeworCS5pZCA9IFY0TDJfQ0lEX0hVRSwKKwkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJLm5hbWUgPSAiSHVlIiwKKwkubWluaW11bSA9IDAsCisJLm1heGltdW0gPSAyNTUsCisJLnN0ZXAgPSAweDEsCisJLmRlZmF1bHRfdmFsdWUgPSBERUZfSFVFLAorCS5mbGFncyA9IDAsCisJfQorfTsKKworc3RhdGljIGludCBxY3RsX3JlZ3NbQVJSQVlfU0laRShzMjI1NV9xY3RybCldOworCisvKiBpbWFnZSBmb3JtYXRzLiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgczIyNTVfZm10IGZvcm1hdHNbXSA9IHsKKwl7CisJCS5uYW1lID0gIjQ6MjoyLCBwbGFuYXIsIFlVVjQyMlAiLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVVjQyMlAsCisJCS5kZXB0aCA9IDE2CisKKwl9LCB7CisJCS5uYW1lID0gIjQ6MjoyLCBwYWNrZWQsIFlVWVYiLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVWVYsCisJCS5kZXB0aCA9IDE2CisKKwl9LCB7CisJCS5uYW1lID0gIjQ6MjoyLCBwYWNrZWQsIFVZVlkiLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1VZVlksCisJCS5kZXB0aCA9IDE2CisJfSwgeworCQkubmFtZSA9ICI4YnBwIEdSRVkiLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX0dSRVksCisJCS5kZXB0aCA9IDgKKwl9Cit9OworCitzdGF0aWMgaW50IG5vcm1fbWF4dyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQoreworCXJldHVybiAodmRldi0+Y3VycmVudF9ub3JtICYgVjRMMl9TVERfTlRTQykgPworCSAgICBMSU5FX1NaXzRDSUZTX05UU0MgOiBMSU5FX1NaXzRDSUZTX1BBTDsKK30KKworc3RhdGljIGludCBub3JtX21heGgoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwlyZXR1cm4gKHZkZXYtPmN1cnJlbnRfbm9ybSAmIFY0TDJfU1REX05UU0MpID8KKwkgICAgKE5VTV9MSU5FU18xQ0lGU19OVFNDICogMikgOiAoTlVNX0xJTkVTXzFDSUZTX1BBTCAqIDIpOworfQorCitzdGF0aWMgaW50IG5vcm1fbWludyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQoreworCXJldHVybiAodmRldi0+Y3VycmVudF9ub3JtICYgVjRMMl9TVERfTlRTQykgPworCSAgICBMSU5FX1NaXzFDSUZTX05UU0MgOiBMSU5FX1NaXzFDSUZTX1BBTDsKK30KKworc3RhdGljIGludCBub3JtX21pbmgoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwlyZXR1cm4gKHZkZXYtPmN1cnJlbnRfbm9ybSAmIFY0TDJfU1REX05UU0MpID8KKwkgICAgKE5VTV9MSU5FU18xQ0lGU19OVFNDKSA6IChOVU1fTElORVNfMUNJRlNfUEFMKTsKK30KKworCisvKgorICogVE9ETzogZml4bWU6IG1vdmUgWVVWIHJlb3JkZXJpbmcgdG8gaGFyZHdhcmUKKyAqIGNvbnZlcnRzIDIyNTUgcGxhbmFyIGZvcm1hdCB0byB5dXl2IG9yIHV5dnkKKyAqLworc3RhdGljIHZvaWQgcGxhbmFyNDIycF90b195dXZfcGFja2VkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJCSAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCQkJCSAgICAgaW50IGZtdCkKK3sKKwl1bnNpZ25lZCBjaGFyICpwWTsKKwl1bnNpZ25lZCBjaGFyICpwQ2I7CisJdW5zaWduZWQgY2hhciAqcENyOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGhlaWdodCAqIHdpZHRoOworCXVuc2lnbmVkIGludCBpOworCXBZID0gKHVuc2lnbmVkIGNoYXIgKilpbjsKKwlwQ3IgPSAodW5zaWduZWQgY2hhciAqKWluICsgaGVpZ2h0ICogd2lkdGg7CisJcENiID0gKHVuc2lnbmVkIGNoYXIgKilpbiArIGhlaWdodCAqIHdpZHRoICsgKGhlaWdodCAqIHdpZHRoIC8gMik7CisJZm9yIChpID0gMDsgaSA8IHNpemUgKiAyOyBpICs9IDQpIHsKKwkJb3V0W2ldID0gKGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikgPyAqcFkrKyA6ICpwQ3IrKzsKKwkJb3V0W2kgKyAxXSA9IChmbXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpID8gKnBDcisrIDogKnBZKys7CisJCW91dFtpICsgMl0gPSAoZm10ID09IFY0TDJfUElYX0ZNVF9ZVVlWKSA/ICpwWSsrIDogKnBDYisrOworCQlvdXRbaSArIDNdID0gKGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikgPyAqcENiKysgOiAqcFkrKzsKKwl9CisJcmV0dXJuOworfQorCisKKy8qIGtpY2tzdGFydHMgdGhlIGZpcm13YXJlIGxvYWRpbmcuIGZyb20gcHJvYmUKKyAqLworc3RhdGljIHZvaWQgczIyNTVfdGltZXIodW5zaWduZWQgbG9uZyB1c2VyX2RhdGEpCit7CisJc3RydWN0IHMyMjU1X2Z3ICpkYXRhID0gKHN0cnVjdCBzMjI1NV9mdyAqKXVzZXJfZGF0YTsKKwlkcHJpbnRrKDEwMCwgInMyMjU1IHRpbWVyXG4iKTsKKwlpZiAodXNiX3N1Ym1pdF91cmIoZGF0YS0+ZndfdXJiLCBHRlBfQVRPTUlDKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzMjI1NTogY2FuJ3Qgc3VibWl0IHVyYlxuIik7CisJCWlmIChkYXRhLT5mdykgeworCQkJcmVsZWFzZV9maXJtd2FyZShkYXRhLT5mdyk7CisJCQlkYXRhLT5mdyA9IE5VTEw7CisJCX0KKwkJcmV0dXJuOworCX0KK30KKworLyogY2FsbGVkIHdoZW4gRFNQIGlzIHVwIGFuZCBydW5uaW5nLiAgRFNQIGlzIGd1YXJhbnRlZWQgdG8KKyAgIGJlIHJ1bm5pbmcgYWZ0ZXIgUzIyNTVfRFNQX0JPT1RUSU1FICovCitzdGF0aWMgdm9pZCBzMjI1NV9kc3BfcnVubmluZyh1bnNpZ25lZCBsb25nIHVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgczIyNTVfZncgKmRhdGEgPSAoc3RydWN0IHMyMjU1X2Z3ICopdXNlcl9kYXRhOworCWRwcmludGsoMSwgImRzcCBydW5uaW5nXG4iKTsKKwlhdG9taWNfc2V0KCZkYXRhLT5md19zdGF0ZSwgUzIyNTVfRldfU1VDQ0VTUyk7CisJd2FrZV91cCgmZGF0YS0+d2FpdF9mdyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiczIyNTU6IGZpcm13YXJlIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiIpOworCXJldHVybjsKK30KKworCisvKiB0aGlzIGxvYWRzIHRoZSBmaXJtd2FyZSBhc3luY2hyb25vdXNseS4KKyAgIE9yaWdpbmFsbHkgdGhpcyB3YXMgZG9uZSBzeW5jaHJvb3VzbHkgaW4gcHJvYmUuCisgICBCdXQgaXQgaXMgYmV0dGVyIHRvIGxvYWQgaXQgYXN5bmNocm9ub3VzbHkgaGVyZSB0aGFuIGJsb2NrCisgICBpbnNpZGUgdGhlIHByb2JlIGZ1bmN0aW9uLiBCbG9ja2luZyBpbnNpZGUgcHJvYmUgYWZmZWN0cyBib290IHRpbWUuCisgICBGVyBsb2FkaW5nIGlzIHRyaWdnZXJlZCBieSB0aGUgdGltZXIgaW4gdGhlIHByb2JlIGZ1bmN0aW9uCisqLworc3RhdGljIHZvaWQgczIyNTVfZndjaHVua19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHMyMjU1X2Z3ICpkYXRhID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gdXJiLT5kZXY7CisJaW50IGxlbjsKKwlkcHJpbnRrKDEwMCwgInVkZXYgJXAgdXJiICVwIiwgdWRldiwgdXJiKTsKKwkvKiBUT0RPOiBmaXhtZS4gIHJlZmxlY3QgY2hhbmdlIGluIHN0YXR1cyAqLworCWlmICh1cmItPnN0YXR1cykgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJVUkIgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWlmIChkYXRhLT5md191cmIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJlYXJseSBkaXNjb25uY2VjdFxuIik7CisJCXJldHVybjsKKwl9CisjZGVmaW5lIENIVU5LX1NJWkUgNTEyCisJLyogYWxsIFVTQiB0cmFuc2ZlcnMgbXVzdCBiZSBkb25lIHdpdGggY29udGludW91cyBrZXJuZWwgbWVtb3J5LgorCSAgIGNhbid0IGFsbG9jYXRlIG1vcmUgdGhhbiAxMjhrIGluIGN1cnJlbnQgbGludXgga2VybmVsLCBzbworCSAgIHVwbG9hZCB0aGUgZmlybXdhcmUgaW4gY2h1bmtzCisJICovCisJaWYgKGRhdGEtPmZ3X2xvYWRlZCA8IGRhdGEtPmZ3X3NpemUpIHsKKwkJbGVuID0gKGRhdGEtPmZ3X2xvYWRlZCArIENIVU5LX1NJWkUpID4gZGF0YS0+Zndfc2l6ZSA/CisJCSAgICBkYXRhLT5md19zaXplICUgQ0hVTktfU0laRSA6IENIVU5LX1NJWkU7CisKKwkJaWYgKGxlbiA8IENIVU5LX1NJWkUpCisJCQltZW1zZXQoZGF0YS0+cGZ3X2RhdGEsIDAsIENIVU5LX1NJWkUpOworCisJCWRwcmludGsoMTAwLCAiY29tcGxldGVkIGxlbiAlZCwgbG9hZGVkICVkIFxuIiwgbGVuLAorCQkJZGF0YS0+ZndfbG9hZGVkKTsKKworCQltZW1jcHkoZGF0YS0+cGZ3X2RhdGEsCisJCSAgICAgICAoY2hhciAqKSBkYXRhLT5mdy0+ZGF0YSArIGRhdGEtPmZ3X2xvYWRlZCwgbGVuKTsKKworCQl1c2JfZmlsbF9idWxrX3VyYihkYXRhLT5md191cmIsIHVkZXYsIHVzYl9zbmRidWxrcGlwZSh1ZGV2LCAyKSwKKwkJCQkgIGRhdGEtPnBmd19kYXRhLCBDSFVOS19TSVpFLAorCQkJCSAgczIyNTVfZndjaHVua19jb21wbGV0ZSwgZGF0YSk7CisJCWlmICh1c2Jfc3VibWl0X3VyYihkYXRhLT5md191cmIsIEdGUF9BVE9NSUMpIDwgMCkgeworCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZmFpbGVkIHN1Ym1pdCBVUkJcbiIpOworCQkJYXRvbWljX3NldCgmZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0ZBSUxFRCk7CisJCQkvKiB3YWtlIHVwIGFueXRoaW5nIHdhaXRpbmcgZm9yIHRoZSBmaXJtd2FyZSAqLworCQkJd2FrZV91cCgmZGF0YS0+d2FpdF9mdyk7CisJCQlyZXR1cm47CisJCX0KKwkJZGF0YS0+ZndfbG9hZGVkICs9IGxlbjsKKwl9IGVsc2UgeworCQlpbml0X3RpbWVyKCZkYXRhLT5kc3Bfd2FpdCk7CisJCWRhdGEtPmRzcF93YWl0LmZ1bmN0aW9uID0gczIyNTVfZHNwX3J1bm5pbmc7CisJCWRhdGEtPmRzcF93YWl0LmRhdGEgPSAodW5zaWduZWQgbG9uZylkYXRhOworCQlhdG9taWNfc2V0KCZkYXRhLT5md19zdGF0ZSwgUzIyNTVfRldfTE9BREVEX0RTUFdBSVQpOworCQltb2RfdGltZXIoJmRhdGEtPmRzcF93YWl0LCBtc2Vjc190b19qaWZmaWVzKFMyMjU1X0RTUF9CT09UVElNRSkKKwkJCSAgKyBqaWZmaWVzKTsKKwl9CisJZHByaW50aygxMDAsICIyMjU1IGNvbXBsZXRlIGRvbmVcbiIpOworCXJldHVybjsKKworfQorCitzdGF0aWMgaW50IHMyMjU1X2dvdF9mcmFtZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIGludCBjaG4pCit7CisJc3RydWN0IHMyMjU1X2RtYXF1ZXVlICpkbWFfcSA9ICZkZXYtPnZpZHFbY2huXTsKKwlzdHJ1Y3QgczIyNTVfYnVmZmVyICpidWY7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaW50IHJjID0gMDsKKwlkcHJpbnRrKDIsICJ3YWtldXA6ICVwIGNoYW5uZWw6ICVkXG4iLCAmZG1hX3EsIGNobik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKworCWlmIChsaXN0X2VtcHR5KCZkbWFfcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDEsICJObyBhY3RpdmUgcXVldWUgdG8gc2VydmVcbiIpOworCQlyYyA9IC0xOworCQlnb3RvIHVubG9jazsKKwl9CisJYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsCisJCQkgc3RydWN0IHMyMjU1X2J1ZmZlciwgdmIucXVldWUpOworCisJaWYgKCF3YWl0cXVldWVfYWN0aXZlKCZidWYtPnZiLmRvbmUpKSB7CisJCS8qIG5vIG9uZSBhY3RpdmUgKi8KKwkJcmMgPSAtMTsKKwkJZ290byB1bmxvY2s7CisJfQorCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKKwlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOworCWRwcmludGsoMTAwLCAiWyVwLyVkXSB3YWtldXBcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKKworCXMyMjU1X2ZpbGxidWZmKGRldiwgYnVmLCBkbWFfcS0+Y2hhbm5lbCk7CisJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKKwlkcHJpbnRrKDIsICJ3YWtldXAgW2J1Zi9pXSBbJXAvJWRdXG4iLCBidWYsIGJ1Zi0+dmIuaSk7Cit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgczIyNTVfZm10ICpmb3JtYXRfYnlfZm91cmNjKGludCBmb3VyY2MpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzKTsgaSsrKSB7CisJCWlmICgtMSA9PSBmb3JtYXRzW2ldLmZvdXJjYykKKwkJCWNvbnRpbnVlOworCQlpZiAoZm9ybWF0c1tpXS5mb3VyY2MgPT0gZm91cmNjKQorCQkJcmV0dXJuIGZvcm1hdHMgKyBpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworCisKKworLyogdmlkZW8gYnVmZmVyIHZtYWxsb2MgaW1wbGVtZW50YXRpb24gYmFzZWQgcGFydGx5IG9uIFZJVkkgZHJpdmVyIHdoaWNoIGlzCisgKiAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDYgYnkKKyAqICAgICAgICAgICAgICAgICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiLS1hLnQtLWluZnJhZGVhZC5vcmc+CisgKiAgICAgICAgICAgICAgICAgIFRlZCBXYWx0aGVyIDx0ZWQtLWEudC0tZW51bWVyYS5jb20+CisgKiAgICAgICAgICAgICAgICAgIEpvaG4gU29rb2wgPHNva29sLS1hLnQtLXZpZGVvdGVjaG5vbG9neS5jb20+CisgKiAgICAgICAgICAgICAgICAgIGh0dHA6Ly92NGwudmlkZW90ZWNobm9sb2d5LmNvbS8KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHMyMjU1X2ZpbGxidWZmKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgc3RydWN0IHMyMjU1X2J1ZmZlciAqYnVmLAorCQkJICAgaW50IGNobikKK3sKKwlpbnQgcG9zID0gMDsKKwlzdHJ1Y3QgdGltZXZhbCB0czsKKwljb25zdCBjaGFyICp0bXBidWY7CisJY2hhciAqdmJ1ZiA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJmJ1Zi0+dmIpOworCXVuc2lnbmVkIGxvbmcgbGFzdF9mcmFtZTsKKwlzdHJ1Y3QgczIyNTVfZnJhbWVpICpmcm07CisKKwlpZiAoIXZidWYpCisJCXJldHVybjsKKworCWxhc3RfZnJhbWUgPSBkZXYtPmxhc3RfZnJhbWVbY2huXTsKKwlpZiAobGFzdF9mcmFtZSAhPSAtMSkgeworCQlmcm0gPSAmZGV2LT5idWZmZXJbY2huXS5mcmFtZVtsYXN0X2ZyYW1lXTsKKwkJdG1wYnVmID0KKwkJICAgIChjb25zdCBjaGFyICopZGV2LT5idWZmZXJbY2huXS5mcmFtZVtsYXN0X2ZyYW1lXS5scHZiaXRzOworCQlzd2l0Y2ggKGJ1Zi0+Zm10LT5mb3VyY2MpIHsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKKwkJY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKKwkJCXBsYW5hcjQyMnBfdG9feXV2X3BhY2tlZCgoY29uc3QgdW5zaWduZWQgY2hhciAqKXRtcGJ1ZiwKKwkJCQkJCSB2YnVmLCBidWYtPnZiLndpZHRoLAorCQkJCQkJIGJ1Zi0+dmIuaGVpZ2h0LAorCQkJCQkJIGJ1Zi0+Zm10LT5mb3VyY2MpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CisJCQltZW1jcHkodmJ1ZiwgdG1wYnVmLCBidWYtPnZiLndpZHRoICogYnVmLT52Yi5oZWlnaHQpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6CisJCQltZW1jcHkodmJ1ZiwgdG1wYnVmLAorCQkJICAgICAgIGJ1Zi0+dmIud2lkdGggKiBidWYtPnZiLmhlaWdodCAqIDIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9ERUJVRyAiczIyNTU6IHVua25vd24gZm9ybWF0P1xuIik7CisJCX0KKwkJZGV2LT5sYXN0X2ZyYW1lW2Nobl0gPSAtMTsKKwkJLyogZG9uZSB3aXRoIHRoZSBmcmFtZSwgZnJlZSBpdCAqLworCQlmcm0tPnVsU3RhdGUgPSAwOworCQlkcHJpbnRrKDQsICJmcmVlaW5nIGJ1ZmZlclxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzMjI1NTogPT09PT09PW5vIGZyYW1lXG4iKTsKKwkJcmV0dXJuOworCisJfQorCWRwcmludGsoMiwgInMyMjU1ZmlsbCBhdCA6IEJ1ZmZlciAweCUwOGx4IHNpemU9ICVkXG4iLAorCQkodW5zaWduZWQgbG9uZyl2YnVmLCBwb3MpOworCS8qIHRlbGwgdjRsIGJ1ZmZlciB3YXMgZmlsbGVkICovCisKKwlidWYtPnZiLmZpZWxkX2NvdW50Kys7CisJZG9fZ2V0dGltZW9mZGF5KCZ0cyk7CisJYnVmLT52Yi50cyA9IHRzOworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ET05FOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVmlkZW9idWYgb3BlcmF0aW9ucworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBidWZmZXJfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJCXVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKworCSpzaXplID0gZmgtPndpZHRoICogZmgtPmhlaWdodCAqIChmaC0+Zm10LT5kZXB0aCA+PiAzKTsKKworCWlmICgwID09ICpjb3VudCkKKwkJKmNvdW50ID0gUzIyNTVfREVGX0JVRlM7CisKKwl3aGlsZSAoKnNpemUgKiAoKmNvdW50KSA+IHZpZF9saW1pdCAqIDEwMjQgKiAxMDI0KQorCQkoKmNvdW50KS0tOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCBzMjI1NV9idWZmZXIgKmJ1ZikKK3sKKwlkcHJpbnRrKDQsICIlc1xuIiwgX19mdW5jX18pOworCisJdmlkZW9idWZfd2FpdG9uKCZidWYtPnZiLCAwLCAwKTsKKwl2aWRlb2J1Zl92bWFsbG9jX2ZyZWUoJmJ1Zi0+dmIpOworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgaW50IGJ1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkJICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHMyMjU1X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgczIyNTVfYnVmZmVyLCB2Yik7CisJaW50IHJjOworCWRwcmludGsoNCwgIiVzLCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZpZWxkKTsKKwlpZiAoZmgtPmZtdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoZmgtPndpZHRoIDwgbm9ybV9taW53KGZoLT5kZXYtPnZkZXZbZmgtPmNoYW5uZWxdKSkgfHwKKwkgICAgKGZoLT53aWR0aCA+IG5vcm1fbWF4dyhmaC0+ZGV2LT52ZGV2W2ZoLT5jaGFubmVsXSkpIHx8CisJICAgIChmaC0+aGVpZ2h0IDwgbm9ybV9taW5oKGZoLT5kZXYtPnZkZXZbZmgtPmNoYW5uZWxdKSkgfHwKKwkgICAgKGZoLT5oZWlnaHQgPiBub3JtX21heGgoZmgtPmRldi0+dmRldltmaC0+Y2hhbm5lbF0pKSkgeworCQlkcHJpbnRrKDQsICJpbnZhbGlkIGJ1ZmZlciBwcmVwYXJlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnVmLT52Yi5zaXplID0gZmgtPndpZHRoICogZmgtPmhlaWdodCAqIChmaC0+Zm10LT5kZXB0aCA+PiAzKTsKKworCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgJiYgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkgeworCQlkcHJpbnRrKDQsICJpbnZhbGlkIGJ1ZmZlciBwcmVwYXJlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnVmLT5mbXQgPSBmaC0+Zm10OworCWJ1Zi0+dmIud2lkdGggPSBmaC0+d2lkdGg7CisJYnVmLT52Yi5oZWlnaHQgPSBmaC0+aGVpZ2h0OworCWJ1Zi0+dmIuZmllbGQgPSBmaWVsZDsKKworCisJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgeworCQlyYyA9IHZpZGVvYnVmX2lvbG9jayh2cSwgJmJ1Zi0+dmIsIE5VTEwpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBmYWlsOworCX0KKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKKwlyZXR1cm4gMDsKK2ZhaWw6CisJZnJlZV9idWZmZXIodnEsIGJ1Zik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHMyMjU1X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgczIyNTVfYnVmZmVyLCB2Yik7CisJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgczIyNTVfZG1hcXVldWUgKnZpZHEgPSAmZGV2LT52aWRxW2ZoLT5jaGFubmVsXTsKKworCWRwcmludGsoMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZ2aWRxLT5hY3RpdmUpOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHMyMjU1X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgczIyNTVfYnVmZmVyLCB2Yik7CisJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJZHByaW50ayg0LCAiJXMgJWRcbiIsIF9fZnVuY19fLCBmaC0+Y2hhbm5lbCk7CisJZnJlZV9idWZmZXIodnEsIGJ1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHMyMjU1X3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCA9IGJ1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworCitzdGF0aWMgaW50IHJlc19nZXQoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBzdHJ1Y3QgczIyNTVfZmggKmZoKQoreworCS8qIGlzIGl0IGZyZWU/ICovCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoZGV2LT5yZXNvdXJjZXNbZmgtPmNoYW5uZWxdKSB7CisJCS8qIG5vLCBzb21lb25lIGVsc2UgdXNlcyBpdCAqLworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwkvKiBpdCdzIGZyZWUsIGdyYWIgaXQgKi8KKwlkZXYtPnJlc291cmNlc1tmaC0+Y2hhbm5lbF0gPSAxOworCWRwcmludGsoMSwgInJlczogZ2V0XG4iKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcmVzX2xvY2tlZChzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHN0cnVjdCBzMjI1NV9maCAqZmgpCit7CisJcmV0dXJuIGRldi0+cmVzb3VyY2VzW2ZoLT5jaGFubmVsXTsKK30KKworc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBzdHJ1Y3QgczIyNTVfZmggKmZoKQoreworCWRldi0+cmVzb3VyY2VzW2ZoLT5jaGFubmVsXSA9IDA7CisJZHByaW50aygxLCAicmVzOiBwdXRcbiIpOworfQorCisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBzMjI1NV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiczIyNTUiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgInMyMjU1Iiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+dWRldi0+ZGV2KSwKKwkJc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwljYXAtPnZlcnNpb24gPSBTMjI1NV9WRVJTSU9OOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCWludCBpbmRleCA9IDA7CisJaWYgKGYpCisJCWluZGV4ID0gZi0+aW5kZXg7CisKKwlpZiAoaW5kZXggPj0gQVJSQVlfU0laRShmb3JtYXRzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcHJpbnRrKDQsICJuYW1lICVzXG4iLCBmb3JtYXRzW2luZGV4XS5uYW1lKTsKKwlzdHJsY3B5KGYtPmRlc2NyaXB0aW9uLCBmb3JtYXRzW2luZGV4XS5uYW1lLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwlmLT5waXhlbGZvcm1hdCA9IGZvcm1hdHNbaW5kZXhdLmZvdXJjYzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7CisKKwlmLT5mbXQucGl4LndpZHRoID0gZmgtPndpZHRoOworCWYtPmZtdC5waXguaGVpZ2h0ID0gZmgtPmhlaWdodDsKKwlmLT5mbXQucGl4LmZpZWxkID0gZmgtPnZiX3ZpZHEuZmllbGQ7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IGZoLT5mbXQtPmZvdXJjYzsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGYtPmZtdC5waXgud2lkdGggKiAoZmgtPmZtdC0+ZGVwdGggPj4gMyk7CisJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmhlaWdodCAqIGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJY29uc3Qgc3RydWN0IHMyMjU1X2ZtdCAqZm10OworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgIGJfYW55X2ZpZWxkID0gMDsKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBpc19udHNjOworCisJaXNfbnRzYyA9CisJICAgIChkZXYtPnZkZXZbZmgtPmNoYW5uZWxdLT5jdXJyZW50X25vcm0gJiBWNEwyX1NURF9OVFNDKSA/IDEgOiAwOworCisJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKworCWlmIChmbXQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisJaWYgKGZpZWxkID09IFY0TDJfRklFTERfQU5ZKQorCQliX2FueV9maWVsZCA9IDE7CisKKwlkcHJpbnRrKDQsICJ0cnkgZm9ybWF0ICVkIFxuIiwgaXNfbnRzYyk7CisJLyogc3VwcG9ydHMgMyBzaXplcy4gc2VlIHMyMjU1ZHJ2LmggKi8KKwlkcHJpbnRrKDUwLCAid2lkdGggdGVzdCAlZCwgaGVpZ2h0ICVkXG4iLAorCQlmLT5mbXQucGl4LndpZHRoLCBmLT5mbXQucGl4LmhlaWdodCk7CisJaWYgKGlzX250c2MpIHsKKwkJLyogTlRTQyAqLworCQlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPj0gTlVNX0xJTkVTXzFDSUZTX05UU0MgKiAyKSB7CisJCQlmLT5mbXQucGl4LmhlaWdodCA9IE5VTV9MSU5FU18xQ0lGU19OVFNDICogMjsKKwkJCWlmIChiX2FueV9maWVsZCkgeworCQkJCWZpZWxkID0gVjRMMl9GSUVMRF9TRVFfVEI7CisJCQl9IGVsc2UgaWYgKCEoKGZpZWxkID09IFY0TDJfRklFTERfSU5URVJMQUNFRCkgfHwKKwkJCQkgICAgICAoZmllbGQgPT0gVjRMMl9GSUVMRF9TRVFfVEIpIHx8CisJCQkJICAgICAgKGZpZWxkID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQikpKSB7CisJCQkJZHByaW50aygxLCAidW5zdXBwb3J0ZWQgZmllbGQgc2V0dGluZ1xuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmLT5mbXQucGl4LmhlaWdodCA9IE5VTV9MSU5FU18xQ0lGU19OVFNDOworCQkJaWYgKGJfYW55X2ZpZWxkKSB7CisJCQkJZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKwkJCX0gZWxzZSBpZiAoISgoZmllbGQgPT0gVjRMMl9GSUVMRF9UT1ApIHx8CisJCQkJICAgICAgKGZpZWxkID09IFY0TDJfRklFTERfQk9UVE9NKSkpIHsKKwkJCQlkcHJpbnRrKDEsICJ1bnN1cHBvcnRlZCBmaWVsZCBzZXR0aW5nXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQl9CisJCWlmIChmLT5mbXQucGl4LndpZHRoID49IExJTkVfU1pfNENJRlNfTlRTQykKKwkJCWYtPmZtdC5waXgud2lkdGggPSBMSU5FX1NaXzRDSUZTX05UU0M7CisJCWVsc2UgaWYgKGYtPmZtdC5waXgud2lkdGggPj0gTElORV9TWl8yQ0lGU19OVFNDKQorCQkJZi0+Zm10LnBpeC53aWR0aCA9IExJTkVfU1pfMkNJRlNfTlRTQzsKKwkJZWxzZSBpZiAoZi0+Zm10LnBpeC53aWR0aCA+PSBMSU5FX1NaXzFDSUZTX05UU0MpCisJCQlmLT5mbXQucGl4LndpZHRoID0gTElORV9TWl8xQ0lGU19OVFNDOworCQllbHNlCisJCQlmLT5mbXQucGl4LndpZHRoID0gTElORV9TWl8xQ0lGU19OVFNDOworCX0gZWxzZSB7CisJCS8qIFBBTCAqLworCQlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPj0gTlVNX0xJTkVTXzFDSUZTX1BBTCAqIDIpIHsKKwkJCWYtPmZtdC5waXguaGVpZ2h0ID0gTlVNX0xJTkVTXzFDSUZTX1BBTCAqIDI7CisJCQlpZiAoYl9hbnlfZmllbGQpIHsKKwkJCQlmaWVsZCA9IFY0TDJfRklFTERfU0VRX1RCOworCQkJfSBlbHNlIGlmICghKChmaWVsZCA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQpIHx8CisJCQkJICAgICAgKGZpZWxkID09IFY0TDJfRklFTERfU0VRX1RCKSB8fAorCQkJCSAgICAgIChmaWVsZCA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEIpKSkgeworCQkJCWRwcmludGsoMSwgInVuc3VwcG9ydGVkIGZpZWxkIHNldHRpbmdcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UgeworCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSBOVU1fTElORVNfMUNJRlNfUEFMOworCQkJaWYgKGJfYW55X2ZpZWxkKSB7CisJCQkJZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKwkJCX0gZWxzZSBpZiAoISgoZmllbGQgPT0gVjRMMl9GSUVMRF9UT1ApIHx8CisJCQkJICAgICAoZmllbGQgPT0gVjRMMl9GSUVMRF9CT1RUT00pKSkgeworCQkJCWRwcmludGsoMSwgInVuc3VwcG9ydGVkIGZpZWxkIHNldHRpbmdcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChmLT5mbXQucGl4LndpZHRoID49IExJTkVfU1pfNENJRlNfUEFMKSB7CisJCQlkcHJpbnRrKDUwLCAicGFsIDcwNFxuIik7CisJCQlmLT5mbXQucGl4LndpZHRoID0gTElORV9TWl80Q0lGU19QQUw7CisJCQlmaWVsZCA9IFY0TDJfRklFTERfU0VRX1RCOworCQl9IGVsc2UgaWYgKGYtPmZtdC5waXgud2lkdGggPj0gTElORV9TWl8yQ0lGU19QQUwpIHsKKwkJCWRwcmludGsoNTAsICJwYWwgMzUyQVxuIik7CisJCQlmLT5mbXQucGl4LndpZHRoID0gTElORV9TWl8yQ0lGU19QQUw7CisJCQlmaWVsZCA9IFY0TDJfRklFTERfVE9QOworCQl9IGVsc2UgaWYgKGYtPmZtdC5waXgud2lkdGggPj0gTElORV9TWl8xQ0lGU19QQUwpIHsKKwkJCWRwcmludGsoNTAsICJwYWwgMzUyQlxuIik7CisJCQlmLT5mbXQucGl4LndpZHRoID0gTElORV9TWl8xQ0lGU19QQUw7CisJCQlmaWVsZCA9IFY0TDJfRklFTERfVE9QOworCQl9IGVsc2UgeworCQkJZHByaW50ayg1MCwgInBhbCAzNTJDXG4iKTsKKwkJCWYtPmZtdC5waXgud2lkdGggPSBMSU5FX1NaXzFDSUZTX1BBTDsKKwkJCWZpZWxkID0gVjRMMl9GSUVMRF9UT1A7CisJCX0KKwl9CisKKwlkcHJpbnRrKDUwLCAid2lkdGggJWQgaGVpZ2h0ICVkIGZpZWxkICVkIFxuIiwgZi0+Zm10LnBpeC53aWR0aCwKKwkJZi0+Zm10LnBpeC5oZWlnaHQsIGYtPmZtdC5waXguZmllbGQpOworCWYtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IChmLT5mbXQucGl4LndpZHRoICogZm10LT5kZXB0aCkgPj4gMzsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguaGVpZ2h0ICogZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzMjI1NV9maCAqZmggPSBwcml2OworCWNvbnN0IHN0cnVjdCBzMjI1NV9mbXQgKmZtdDsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZiX3ZpZHE7CisJaW50IHJldDsKKwlpbnQgbm9ybTsKKworCXJldCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGYpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCisJaWYgKGZtdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnEtPnZiX2xvY2spOworCisJaWYgKHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koJmZoLT52Yl92aWRxKSkgeworCQlkcHJpbnRrKDEsICJxdWV1ZSBidXN5XG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dF9zX2ZtdDsKKwl9CisKKwlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LCBmaCkpIHsKKwkJZHByaW50aygxLCAiY2FuJ3QgY2hhbmdlIGZvcm1hdCBhZnRlciBzdGFydGVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dF9zX2ZtdDsKKwl9CisKKwlmaC0+Zm10ID0gZm10OworCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OworCWZoLT52Yl92aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKwlmaC0+dHlwZSA9IGYtPnR5cGU7CisJbm9ybSA9IG5vcm1fbWludyhmaC0+ZGV2LT52ZGV2W2ZoLT5jaGFubmVsXSk7CisJaWYgKGZoLT53aWR0aCA+IG5vcm1fbWludyhmaC0+ZGV2LT52ZGV2W2ZoLT5jaGFubmVsXSkpIHsKKwkJaWYgKGZoLT5oZWlnaHQgPiBub3JtX21pbmgoZmgtPmRldi0+dmRldltmaC0+Y2hhbm5lbF0pKQorCQkJZmgtPm1vZGUuc2NhbGUgPSBTQ0FMRV80Q0lGUzsKKwkJZWxzZQorCQkJZmgtPm1vZGUuc2NhbGUgPSBTQ0FMRV8yQ0lGUzsKKworCX0gZWxzZSB7CisJCWZoLT5tb2RlLnNjYWxlID0gU0NBTEVfMUNJRlM7CisJfQorCisJLyogY29sb3IgbW9kZSAqLworCXN3aXRjaCAoZmgtPmZtdC0+Zm91cmNjKSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToKKwkJZmgtPm1vZGUuY29sb3IgPSBDT0xPUl9ZODsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKKwkJZmgtPm1vZGUuY29sb3IgPSBDT0xPUl9ZVVZQTDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKKwljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgorCWRlZmF1bHQ6CisJCWZoLT5tb2RlLmNvbG9yID0gQ09MT1JfWVVWUEs7CisJCWJyZWFrOworCX0KKwlyZXQgPSAwOworb3V0X3NfZm10OgorCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCit7CisJaW50IHJjOworCXN0cnVjdCBzMjI1NV9maCAqZmggPSBwcml2OworCXJjID0gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZiX3ZpZHEsIHApOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7CisJcmMgPSB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZpZHEsIHApOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCWludCByYzsKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKKwlyYyA9IHZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBwKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJaW50IHJjOworCXN0cnVjdCBzMjI1NV9maCAqZmggPSBwcml2OworCXJjID0gdmlkZW9idWZfZHFidWYoJmZoLT52Yl92aWRxLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJcmV0dXJuIHJjOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCitzdGF0aWMgaW50IHZpZGlvY19jZ21idWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmKQoreworCXN0cnVjdCBzMjI1NV9maCAqZmggPSBwcml2OworCisJcmV0dXJuIHZpZGVvYnVmX2NnbWJ1ZigmZmgtPnZiX3ZpZHEsIG1idWYsIDgpOworfQorI2VuZGlmCisKKy8qIHdyaXRlIHRvIHRoZSBjb25maWd1cmF0aW9uIHBpcGUsIHN5bmNocm9ub3VzbHkgKi8KK3N0YXRpYyBpbnQgczIyNTVfd3JpdGVfY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1bnNpZ25lZCBjaGFyICpwYnVmLAorCQkJICAgICAgaW50IHNpemUpCit7CisJaW50IHBpcGU7CisJaW50IGRvbmU7CisJbG9uZyByZXR2YWwgPSAtMTsKKwlpZiAodWRldikgeworCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIFMyMjU1X0NPTkZJR19FUCk7CisJCXJldHZhbCA9IHVzYl9idWxrX21zZyh1ZGV2LCBwaXBlLCBwYnVmLCBzaXplLCAmZG9uZSwgNTAwKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHUzMiBnZXRfdHJhbnNmZXJfc2l6ZShzdHJ1Y3QgczIyNTVfbW9kZSAqbW9kZSkKK3sKKwlpbnQgbGluZXNQZXJGcmFtZSA9IExJTkVfU1pfREVGOworCWludCBwaXhlbHNQZXJMaW5lID0gTlVNX0xJTkVTX0RFRjsKKwl1MzIgb3V0SW1hZ2VTaXplOworCXUzMiB1c2JJblNpemU7CisJdW5zaWduZWQgaW50IG1hc2tfbXVsdDsKKworCWlmIChtb2RlID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKG1vZGUtPmZvcm1hdCA9PSBGT1JNQVRfTlRTQykgeworCQlzd2l0Y2ggKG1vZGUtPnNjYWxlKSB7CisJCWNhc2UgU0NBTEVfNENJRlM6CisJCQlsaW5lc1BlckZyYW1lID0gTlVNX0xJTkVTXzRDSUZTX05UU0MgKiAyOworCQkJcGl4ZWxzUGVyTGluZSA9IExJTkVfU1pfNENJRlNfTlRTQzsKKwkJCWJyZWFrOworCQljYXNlIFNDQUxFXzJDSUZTOgorCQkJbGluZXNQZXJGcmFtZSA9IE5VTV9MSU5FU18yQ0lGU19OVFNDOworCQkJcGl4ZWxzUGVyTGluZSA9IExJTkVfU1pfMkNJRlNfTlRTQzsKKwkJCWJyZWFrOworCQljYXNlIFNDQUxFXzFDSUZTOgorCQkJbGluZXNQZXJGcmFtZSA9IE5VTV9MSU5FU18xQ0lGU19OVFNDOworCQkJcGl4ZWxzUGVyTGluZSA9IExJTkVfU1pfMUNJRlNfTlRTQzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKG1vZGUtPmZvcm1hdCA9PSBGT1JNQVRfUEFMKSB7CisJCXN3aXRjaCAobW9kZS0+c2NhbGUpIHsKKwkJY2FzZSBTQ0FMRV80Q0lGUzoKKwkJCWxpbmVzUGVyRnJhbWUgPSBOVU1fTElORVNfNENJRlNfUEFMICogMjsKKwkJCXBpeGVsc1BlckxpbmUgPSBMSU5FX1NaXzRDSUZTX1BBTDsKKwkJCWJyZWFrOworCQljYXNlIFNDQUxFXzJDSUZTOgorCQkJbGluZXNQZXJGcmFtZSA9IE5VTV9MSU5FU18yQ0lGU19QQUw7CisJCQlwaXhlbHNQZXJMaW5lID0gTElORV9TWl8yQ0lGU19QQUw7CisJCQlicmVhazsKKwkJY2FzZSBTQ0FMRV8xQ0lGUzoKKwkJCWxpbmVzUGVyRnJhbWUgPSBOVU1fTElORVNfMUNJRlNfUEFMOworCQkJcGl4ZWxzUGVyTGluZSA9IExJTkVfU1pfMUNJRlNfUEFMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwlvdXRJbWFnZVNpemUgPSBsaW5lc1BlckZyYW1lICogcGl4ZWxzUGVyTGluZTsKKwlpZiAobW9kZS0+Y29sb3IgIT0gQ09MT1JfWTgpIHsKKwkJLyogMiBieXRlcy9waXhlbCBpZiBub3QgbW9ub2Nocm9tZSAqLworCQlvdXRJbWFnZVNpemUgKj0gMjsKKwl9CisKKwkvKiB0b3RhbCBieXRlcyB0byBzZW5kIGluY2x1ZGluZyBwcmVmaXggYW5kIDRLIHBhZGRpbmc7CisJICAgbXVzdCBiZSBhIG11bHRpcGxlIG9mIFVTQl9SRUFEX1NJWkUgKi8KKwl1c2JJblNpemUgPSBvdXRJbWFnZVNpemUgKyBQUkVGSVhfU0laRTsJLyogYWx3YXlzIHNlbmQgcHJlZml4ICovCisJbWFza19tdWx0ID0gMHhmZmZmZmZmZlVMIC0gREVGX1VTQl9CTE9DSyArIDE7CisJLyogaWYgc2l6ZSBub3QgYSBtdWx0aXBsZSBvZiBVU0JfUkVBRF9TSVpFICovCisJaWYgKHVzYkluU2l6ZSAmIH5tYXNrX211bHQpCisJCXVzYkluU2l6ZSA9ICh1c2JJblNpemUgJiBtYXNrX211bHQpICsgKERFRl9VU0JfQkxPQ0spOworCXJldHVybiB1c2JJblNpemU7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfdmVyaWZ5X21vZGUoc3RydWN0IHMyMjU1X2RldiAqc2Rldiwgc3RydWN0IHMyMjU1X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNkZXYtPnVkZXYtPmRldjsKKwlkZXZfaW5mbyhkZXYsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCWRldl9pbmZvKGRldiwgInZlcmlmeSBtb2RlXG4iKTsKKwlkZXZfaW5mbyhkZXYsICJmb3JtYXQ6ICVkXG4iLCBtb2RlLT5mb3JtYXQpOworCWRldl9pbmZvKGRldiwgInNjYWxlOiAlZFxuIiwgbW9kZS0+c2NhbGUpOworCWRldl9pbmZvKGRldiwgImZkZWM6ICVkXG4iLCBtb2RlLT5mZGVjKTsKKwlkZXZfaW5mbyhkZXYsICJjb2xvcjogJWRcbiIsIG1vZGUtPmNvbG9yKTsKKwlkZXZfaW5mbyhkZXYsICJicmlnaHQ6IDB4JXhcbiIsIG1vZGUtPmJyaWdodCk7CisJZGV2X2luZm8oZGV2LCAicmVzdGFydDogMHgleFxuIiwgbW9kZS0+cmVzdGFydCk7CisJZGV2X2luZm8oZGV2LCAidXNiX2Jsb2NrOiAweCV4XG4iLCBtb2RlLT51c2JfYmxvY2spOworCWRldl9pbmZvKGRldiwgInNpbmdsZTogMHgleFxuIiwgbW9kZS0+c2luZ2xlKTsKKwlkZXZfaW5mbyhkZXYsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworfQorCisvKgorICogc2V0IG1vZGUgaXMgdGhlIGZ1bmN0aW9uIHdoaWNoIGNvbnRyb2xzIHRoZSBEU1AuCisgKiB0aGUgcmVzdGFydCBwYXJhbWV0ZXIgaW4gc3RydWN0IHMyMjU1X21vZGUgc2hvdWxkIGJlIHNldCB3aGVuZXZlcgorICogdGhlIGltYWdlIHNpemUgY291bGQgY2hhbmdlIHZpYSBjb2xvciBmb3JtYXQsIHZpZGVvIHN5c3RlbSBvciBpbWFnZQorICogc2l6ZS4KKyAqIFdoZW4gdGhlIHJlc3RhcnQgcGFyYW1ldGVyIGlzIHNldCwgd2Ugc2xlZXAgZm9yIE9ORSBmcmFtZSB0byBhbGxvdyB0aGUKKyAqIERTUCB0aW1lIHRvIGdldCB0aGUgbmV3IGZyYW1lCisgKi8KK3N0YXRpYyBpbnQgczIyNTVfc2V0X21vZGUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGNobiwKKwkJCSAgc3RydWN0IHMyMjU1X21vZGUgKm1vZGUpCit7CisJaW50IHJlczsKKwl1MzIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGNobl9yZXY7CisKKwljaG5fcmV2ID0gR19jaG5tYXBbY2huXTsKKwlkcHJpbnRrKDMsICJtb2RlIHNjYWxlIFslbGRdICVwICVkXG4iLCBjaG4sIG1vZGUsIG1vZGUtPnNjYWxlKTsKKwlkcHJpbnRrKDMsICJtb2RlIHNjYWxlIFslbGRdICVwICVkXG4iLCBjaG4sICZkZXYtPm1vZGVbY2huXSwKKwkJZGV2LT5tb2RlW2Nobl0uc2NhbGUpOworCWRwcmludGsoMiwgIm1vZGUgY29udHJhc3QgJXhcbiIsIG1vZGUtPmNvbnRyYXN0KTsKKworCS8qIHNhdmUgdGhlIG1vZGUgKi8KKwlkZXYtPm1vZGVbY2huXSA9ICptb2RlOworCWRldi0+cmVxX2ltYWdlX3NpemVbY2huXSA9IGdldF90cmFuc2Zlcl9zaXplKG1vZGUpOworCWRwcmludGsoMSwgInRyYW5zZmVyIHNpemUgJWxkXG4iLCBkZXYtPnJlcV9pbWFnZV9zaXplW2Nobl0pOworCisJYnVmZmVyID0ga3phbGxvYyg1MTIsIEdGUF9LRVJORUwpOworCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBzZXQgdGhlIG1vZGUgKi8KKwlidWZmZXJbMF0gPSBJTl9EQVRBX1RPS0VOOworCWJ1ZmZlclsxXSA9ICh1MzIpIGNobl9yZXY7CisJYnVmZmVyWzJdID0gQ01EX1NFVF9NT0RFOworCW1lbWNweSgmYnVmZmVyWzNdLCAmZGV2LT5tb2RlW2Nobl0sIHNpemVvZihzdHJ1Y3QgczIyNTVfbW9kZSkpOworCXJlcyA9IHMyMjU1X3dyaXRlX2NvbmZpZyhkZXYtPnVkZXYsICh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCA1MTIpOworCWlmIChkZWJ1ZykKKwkJZHVtcF92ZXJpZnlfbW9kZShkZXYsIG1vZGUpOworCWtmcmVlKGJ1ZmZlcik7CisJZHByaW50aygxLCAic2V0IG1vZGUgZG9uZSBjaG4gJWx1LCAlZFxuIiwgY2huLCByZXMpOworCisJLyogd2FpdCBhdCBsZWFzdCAzIGZyYW1lcyBiZWZvcmUgY29udGludWluZyAqLworCWlmIChtb2RlLT5yZXN0YXJ0KQorCQltc2xlZXAoMTI1KTsKKworCS8qIGNsZWFyIHRoZSByZXN0YXJ0IGZsYWcgKi8KKwlkZXYtPm1vZGVbY2huXS5yZXN0YXJ0ID0gMDsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlpbnQgcmVzOworCXN0cnVjdCBzMjI1NV9maCAqZmggPSBwcml2OworCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHMyMjU1X21vZGUgKm5ld19tb2RlOworCXN0cnVjdCBzMjI1NV9tb2RlICpvbGRfbW9kZTsKKwlpbnQgY2huOworCWludCBqOworCWRwcmludGsoNCwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgImludmFsaWQgZmggdHlwZTBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGkgIT0gZmgtPnR5cGUpIHsKKwkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJpbnZhbGlkIGZoIHR5cGUxXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFyZXNfZ2V0KGRldiwgZmgpKSB7CisJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAicmVzIGdldCBidXN5XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBzZW5kIGEgc2V0IG1vZGUgY29tbWFuZCBldmVyeXRpbWUgd2l0aCByZXN0YXJ0LgorCSAgIGluIGNhc2Ugd2Ugc3dpdGNoIHJlc29sdXRpb25zIG9yIG90aGVyIHBhcmFtZXRlcnMgKi8KKwljaG4gPSBmaC0+Y2hhbm5lbDsKKwluZXdfbW9kZSA9ICZmaC0+bW9kZTsKKwlvbGRfbW9kZSA9ICZmaC0+ZGV2LT5tb2RlW2Nobl07CisKKwlpZiAobmV3X21vZGUtPmNvbG9yICE9IG9sZF9tb2RlLT5jb2xvcikKKwkJbmV3X21vZGUtPnJlc3RhcnQgPSAxOworCWVsc2UgaWYgKG5ld19tb2RlLT5zY2FsZSAhPSBvbGRfbW9kZS0+c2NhbGUpCisJCW5ld19tb2RlLT5yZXN0YXJ0ID0gMTsKKwllbHNlIGlmIChuZXdfbW9kZS0+Zm9ybWF0ICE9IG9sZF9tb2RlLT5mb3JtYXQpCisJCW5ld19tb2RlLT5yZXN0YXJ0ID0gMTsKKworCXMyMjU1X3NldF9tb2RlKGRldiwgY2huLCBuZXdfbW9kZSk7CisJbmV3X21vZGUtPnJlc3RhcnQgPSAwOworCSpvbGRfbW9kZSA9ICpuZXdfbW9kZTsKKwlkZXYtPmN1cl9mbXRbY2huXSA9IGZoLT5mbXQ7CisJZHByaW50aygxLCAiJXNbJWRdXG4iLCBfX2Z1bmNfXywgY2huKTsKKwlkZXYtPmxhc3RfZnJhbWVbY2huXSA9IC0xOworCWRldi0+YmFkX3BheWxvYWRbY2huXSA9IDA7CisJZGV2LT5jdXJfZnJhbWVbY2huXSA9IDA7CisJZm9yIChqID0gMDsgaiA8IFNZU19GUkFNRVM7IGorKykgeworCQlkZXYtPmJ1ZmZlcltjaG5dLmZyYW1lW2pdLnVsU3RhdGUgPSAwOworCQlkZXYtPmJ1ZmZlcltjaG5dLmZyYW1lW2pdLmN1cl9zaXplID0gMDsKKwl9CisJcmVzID0gdmlkZW9idWZfc3RyZWFtb24oJmZoLT52Yl92aWRxKTsKKwlpZiAocmVzID09IDApIHsKKwkJczIyNTVfc3RhcnRfYWNxdWlyZShkZXYsIGNobik7CisJCWRldi0+Yl9hY3F1aXJlW2Nobl0gPSAxOworCX0gZWxzZSB7CisJCXJlc19mcmVlKGRldiwgZmgpOworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCWludCByZXM7CisJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWRwcmludGsoNCwgIiVzXG4sIGNoYW5uZWw6ICVkIiwgX19mdW5jX18sIGZoLT5jaGFubmVsKTsKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBmaCB0eXBlMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoaSAhPSBmaC0+dHlwZSkgeworCQlwcmludGsoS0VSTl9FUlIgImludmFsaWQgdHlwZSBpXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXMyMjU1X3N0b3BfYWNxdWlyZShkZXYsIGZoLT5jaGFubmVsKTsKKwlyZXMgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52Yl92aWRxKTsKKwlyZXNfZnJlZShkZXYsIGZoKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmkpCit7CisJc3RydWN0IHMyMjU1X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHMyMjU1X21vZGUgKm1vZGU7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmZoLT52Yl92aWRxOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7CisJaWYgKHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3kocSkpIHsKKwkJZHByaW50aygxLCAicXVldWUgYnVzeVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfc19zdGQ7CisJfQorCisJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgZmgpKSB7CisJCWRwcmludGsoMSwgImNhbid0IGNoYW5nZSBzdGFuZGFyZCBhZnRlciBzdGFydGVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dF9zX3N0ZDsKKwl9CisJbW9kZSA9ICZmaC0+bW9kZTsKKworCWlmICgqaSAmIFY0TDJfU1REX05UU0MpIHsKKwkJZHByaW50ayg0LCAidmlkaW9jX3Nfc3RkIE5UU0NcbiIpOworCQltb2RlLT5mb3JtYXQgPSBGT1JNQVRfTlRTQzsKKwl9IGVsc2UgaWYgKCppICYgVjRMMl9TVERfUEFMKSB7CisJCWRwcmludGsoNCwgInZpZGlvY19zX3N0ZCBQQUxcbiIpOworCQltb2RlLT5mb3JtYXQgPSBGT1JNQVRfUEFMOworCX0gZWxzZSB7CisJCXJldCA9IC1FSU5WQUw7CisJfQorb3V0X3Nfc3RkOgorCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyogU2Vuc29yYXkgMjI1NSBpcyBhIG11bHRpcGxlIGNoYW5uZWwgY2FwdHVyZSBkZXZpY2UuCisgICBJdCBkb2VzIG5vdCBoYXZlIGEgImNyb3NzYmFyIiBvZiBpbnB1dHMuCisgICBXZSB1c2Ugb25lIFY0TCBkZXZpY2UgcGVyIGNoYW5uZWwuIFRoZSB1c2VyIG11c3QKKyAgIGJlIGF3YXJlIHRoYXQgY2VydGFpbiBjb21iaW5hdGlvbnMgYXJlIG5vdCBhbGxvd2VkLgorICAgRm9yIGluc3RhbmNlLCB5b3UgY2Fubm90IGRvIGZ1bGwgRlBTIG9uIG1vcmUgdGhhbiAyIGNoYW5uZWxzKDIgdmlkZW9kZXZzKQorICAgYXQgb25jZSBpbiBjb2xvcih5b3UgY2FuIGRvIGZ1bGwgZnBzIG9uIDQgY2hhbm5lbHMgd2l0aCBncmV5c2NhbGUuCisqLworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfaW5wdXQgKmlucCkKK3sKKwlpZiAoaW5wLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJaW5wLT5zdGQgPSBTMjI1NV9OT1JNUzsKKwlzdHJsY3B5KGlucC0+bmFtZSwgIkNhbWVyYSIsIHNpemVvZihpbnAtPm5hbWUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQoreworCSppID0gMDsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQoreworCWlmIChpID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLSBjb250cm9scyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMyMjU1X3FjdHJsKTsgaSsrKQorCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSBzMjI1NV9xY3RybFtpXS5pZCkgeworCQkJbWVtY3B5KHFjLCAmKHMyMjU1X3FjdHJsW2ldKSwgc2l6ZW9mKCpxYykpOworCQkJcmV0dXJuIDA7CisJCX0KKworCWRwcmludGsoNCwgInF1ZXJ5X2N0cmwgLUVJTlZBTCAlZFxuIiwgcWMtPmlkKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzMjI1NV9xY3RybCk7IGkrKykKKwkJaWYgKGN0cmwtPmlkID09IHMyMjU1X3FjdHJsW2ldLmlkKSB7CisJCQljdHJsLT52YWx1ZSA9IHFjdGxfcmVnc1tpXTsKKwkJCXJldHVybiAwOworCQl9CisJZHByaW50ayg0LCAiZ19jdHJsIC1FSU5WQUxcbiIpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCWludCBpOworCXN0cnVjdCBzMjI1NV9maCAqZmggPSBwcml2OworCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHMyMjU1X21vZGUgKm1vZGU7CisJbW9kZSA9ICZmaC0+bW9kZTsKKwlkcHJpbnRrKDQsICJ2aWRpb2Nfc19jdHJsXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzMjI1NV9xY3RybCk7IGkrKykgeworCQlpZiAoY3RybC0+aWQgPT0gczIyNTVfcWN0cmxbaV0uaWQpIHsKKwkJCWlmIChjdHJsLT52YWx1ZSA8IHMyMjU1X3FjdHJsW2ldLm1pbmltdW0gfHwKKwkJCSAgICBjdHJsLT52YWx1ZSA+IHMyMjU1X3FjdHJsW2ldLm1heGltdW0pCisJCQkJcmV0dXJuIC1FUkFOR0U7CisKKwkJCXFjdGxfcmVnc1tpXSA9IGN0cmwtPnZhbHVlOworCQkJLyogdXBkYXRlIHRoZSBtb2RlIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlICovCisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQkJbW9kZS0+YnJpZ2h0ID0gY3RybC0+dmFsdWU7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJCW1vZGUtPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCQltb2RlLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCQltb2RlLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7CisJCQkJYnJlYWs7CisJCQl9CisJCQltb2RlLT5yZXN0YXJ0ID0gMDsKKwkJCS8qIHNldCBtb2RlIGhlcmUuICBOb3RlOiBzdHJlYW0gZG9lcyBub3QgbmVlZCByZXN0YXJ0ZWQuCisJCQkgICBzb21lIFY0TCBwcm9ncmFtcyByZXN0YXJ0IHN0cmVhbSB1bm5lY2Vzc2FyaWx5CisJCQkgICBhZnRlciBhIHNfY3J0bC4KKwkJCSAqLworCQkJczIyNTVfc2V0X21vZGUoZGV2LCBmaC0+Y2hhbm5lbCwgbW9kZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzMjI1NV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IHMyMjU1X2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHMyMjU1X2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwlpbnQgaSA9IDA7CisJaW50IGN1cl9jaGFubmVsID0gLTE7CisJZHByaW50aygxLCAiczIyNTU6IG9wZW4gY2FsbGVkIChtaW5vcj0lZClcbiIsIG1pbm9yKTsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwgJnMyMjU1X2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHMyMjU1X2RldiwgczIyNTVfZGV2bGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFM7IGkrKykgeworCQkJaWYgKGgtPnZkZXZbaV0tPm1pbm9yID09IG1pbm9yKSB7CisJCQkJY3VyX2NoYW5uZWwgPSBpOworCQkJCWRldiA9IGg7CisJCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJCX0KKwkJfQorCX0KKworCWlmICgoTlVMTCA9PSBkZXYpIHx8IChjdXJfY2hhbm5lbCA9PSAtMSkpIHsKKwkJZHByaW50aygxLCAiczIyNTU6IG9wZW52NGwgbm8gZGV2XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5vcGVuX2xvY2spOworCisJZGV2LT51c2Vyc1tjdXJfY2hhbm5lbF0rKzsKKwlpZiAoZGV2LT51c2Vyc1tjdXJfY2hhbm5lbF0gPiBTMjI1NV9NQVhfVVNFUlMpIHsKKwkJZGV2LT51c2Vyc1tjdXJfY2hhbm5lbF0tLTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisJCXByaW50ayhLRVJOX0lORk8gInMyMjU1ZHJ2OiB0b28gbWFueSBvcGVuIGhhbmRsZXMhXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpID09IFMyMjU1X0ZXX0ZBSUxFRCkgeworCQllcnIoIjIyNTUgZmlybXdhcmUgbG9hZCBmYWlsZWQuIHJldHJ5aW5nLlxuIik7CisJCXMyMjU1X2Z3bG9hZF9zdGFydChkZXYpOworCQl3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT5md19kYXRhLT53YWl0X2Z3LAorCQkJCSAgIChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkKKwkJCQkgICAgIT0gUzIyNTVfRldfTk9UTE9BREVEKSwKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKFMyMjU1X0xPQURfVElNRU9VVCkpOworCQlpZiAoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpCisJCSAgICAhPSBTMjI1NV9GV19TVUNDRVNTKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIyMjU1IEZXIGxvYWQgZmFpbGVkIGFmdGVyIDIgdHJpZXNcbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpID09IFMyMjU1X0ZXX05PVExPQURFRCkgeworCQkvKiBnaXZlIFMyMjU1X0xPQURfVElNRU9VVCB0aW1lIGZvciBmaXJtd2FyZSB0byBsb2FkIGluIGNhc2UKKwkJICAgZHJpdmVyIGxvYWRlZCBhbmQgdGhlbiBkZXZpY2UgaW1tZWRpYXRlbHkgb3BlbmVkICovCisJCXByaW50ayhLRVJOX0lORk8gIiVzIHdhaXRpbmcgZm9yIGZpcm13YXJlIGxvYWRcbiIsIF9fZnVuY19fKTsKKwkJd2FpdF9ldmVudF90aW1lb3V0KGRldi0+ZndfZGF0YS0+d2FpdF9mdywKKwkJCQkgICAoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpCisJCQkJICAgIT0gUzIyNTVfRldfTk9UTE9BREVEKSwKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKFMyMjU1X0xPQURfVElNRU9VVCkpOworCQlpZiAoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpCisJCSAgICAhPSBTMjI1NV9GV19TVUNDRVNTKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIyMjU1IGZpcm13YXJlIG5vdCBsb2FkZWQiCisJCQkgICAgICAgInRyeSBhZ2FpblxuIik7CisJCQltdXRleF91bmxvY2soJmRldi0+b3Blbl9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLworCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJZmgtPm1vZGUgPSBkZXYtPm1vZGVbY3VyX2NoYW5uZWxdOworCWZoLT5mbXQgPSBkZXYtPmN1cl9mbXRbY3VyX2NoYW5uZWxdOworCS8qIGRlZmF1bHQgNENJRiBOVFNDICovCisJZmgtPndpZHRoID0gTElORV9TWl80Q0lGU19OVFNDOworCWZoLT5oZWlnaHQgPSBOVU1fTElORVNfNENJRlNfTlRTQyAqIDI7CisJZmgtPmNoYW5uZWwgPSBjdXJfY2hhbm5lbDsKKworCS8qIFB1dCBhbGwgY29udHJvbHMgYXQgYSBzYW5lIHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoczIyNTVfcWN0cmwpOyBpKyspCisJCXFjdGxfcmVnc1tpXSA9IHMyMjU1X3FjdHJsW2ldLmRlZmF1bHRfdmFsdWU7CisKKwlkcHJpbnRrKDEsICJzMjI1NWRydjogb3BlbiBtaW5vcj0lZCB0eXBlPSVzIHVzZXJzPSVkXG4iLAorCQltaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdLCBkZXYtPnVzZXJzW2N1cl9jaGFubmVsXSk7CisJZHByaW50aygyLCAiczIyNTVkcnY6IG9wZW46IGZoPTB4JTA4bHgsIGRldj0weCUwOGx4LCB2aWRxPTB4JTA4bHhcbiIsCisJCSh1bnNpZ25lZCBsb25nKWZoLCAodW5zaWduZWQgbG9uZylkZXYsCisJCSh1bnNpZ25lZCBsb25nKSZkZXYtPnZpZHFbY3VyX2NoYW5uZWxdKTsKKwlkcHJpbnRrKDQsICJzMjI1NWRydjogb3BlbjogbGlzdF9lbXB0eSBhY3RpdmU9JWRcbiIsCisJCWxpc3RfZW1wdHkoJmRldi0+dmlkcVtjdXJfY2hhbm5lbF0uYWN0aXZlKSk7CisKKwl2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoJmZoLT52Yl92aWRxLCAmczIyNTVfdmlkZW9fcW9wcywKKwkJCQkgICAgTlVMTCwgJmRldi0+c2xvY2ssCisJCQkJICAgIGZoLT50eXBlLAorCQkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgczIyNTVfYnVmZmVyKSwgZmgpOworCisJa3JlZl9nZXQoJmRldi0+a3JlZik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludCBzMjI1NV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByYzsKKwlkcHJpbnRrKDEwMCwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IGZoLT50eXBlKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCXJjID0gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlsZSwgJmZoLT52Yl92aWRxLCB3YWl0KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHMyMjU1X2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gdG9fczIyNTVfZGV2KGtyZWYpOworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiczIyNTVkcnY6IGtyZWYgcHJvYmxlbVxuIik7CisJCXJldHVybjsKKwl9CisJLyogcHJldmVudCBzMjI1NV9kaXNjb25uZWN0IGZyb20gcmFjaW5nIHMyMjU1X29wZW4gKi8KKwltdXRleF9sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisJczIyNTVfZXhpdF92NGwoZGV2KTsKKwkvKiBkZXZpY2UgdW5yZWdpc3RlcmVkIHNvIG5vIGxvbmdlciBwb3NzaWJsZSB0byBvcGVuLiBvcGVuX211dGV4CisJICAgY2FuIGJlIHVubG9ja2VkICovCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisKKwkvKiBib2FyZCBzaHV0ZG93biBzdG9wcyB0aGUgcmVhZCBwaXBlIGlmIGl0IGlzIHJ1bm5pbmcgKi8KKwlzMjI1NV9ib2FyZF9zaHV0ZG93bihkZXYpOworCisJLyogbWFrZSBzdXJlIGZpcm13YXJlIHN0aWxsIG5vdCB0cnlpbmcgdG8gbG9hZCAqLworCWlmIChkZXYtPmZ3X2RhdGEtPmZ3X3VyYikgeworCQlkcHJpbnRrKDIsICJraWxsIGZ3X3VyYlxuIik7CisJCXVzYl9raWxsX3VyYihkZXYtPmZ3X2RhdGEtPmZ3X3VyYik7CisJCXVzYl9mcmVlX3VyYihkZXYtPmZ3X2RhdGEtPmZ3X3VyYik7CisJCWRldi0+ZndfZGF0YS0+ZndfdXJiID0gTlVMTDsKKwl9CisJLyoKKwkgKiBUT0RPOiBmaXhtZShhYm92ZSwgYmVsb3cpOiBwb3RlbnRpYWxseSBsZWF2aW5nIHRpbWVycyBhbGl2ZS4KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgaWdub3JlIHRpbWVvdXQgYmVsb3cgaWYKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBvY2N1cnMuCisJICovCisKKwkvKiBtYWtlIHN1cmUgd2UgYXJlbid0IHdhaXRpbmcgZm9yIHRoZSBEU1AgKi8KKwlpZiAoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpID09IFMyMjU1X0ZXX0xPQURFRF9EU1BXQUlUKSB7CisJCS8qIGlmIHdlIGFyZSwgd2FpdCBmb3IgdGhlIHdha2V1cCBmb3IgZndfc3VjY2VzcyBvciB0aW1lb3V0ICovCisJCXdhaXRfZXZlbnRfdGltZW91dChkZXYtPmZ3X2RhdGEtPndhaXRfZncsCisJCQkJICAgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQorCQkJCSAgID09IFMyMjU1X0ZXX1NVQ0NFU1MpLAorCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoUzIyNTVfTE9BRF9USU1FT1VUKSk7CisJfQorCisJaWYgKGRldi0+ZndfZGF0YSkgeworCQlpZiAoZGV2LT5md19kYXRhLT5mdykKKwkJCXJlbGVhc2VfZmlybXdhcmUoZGV2LT5md19kYXRhLT5mdyk7CisJCWtmcmVlKGRldi0+ZndfZGF0YS0+cGZ3X2RhdGEpOworCQlrZnJlZShkZXYtPmZ3X2RhdGEpOworCX0KKworCXVzYl9wdXRfZGV2KGRldi0+dWRldik7CisJZHByaW50aygxLCAiJXMiLCBfX2Z1bmNfXyk7CisJa2ZyZWUoZGV2KTsKK30KKworc3RhdGljIGludCBzMjI1NV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisKKwlpZiAoZGV2LT5iX2FjcXVpcmVbZmgtPmNoYW5uZWxdKQorCQlzMjI1NV9zdG9wX2FjcXVpcmUoZGV2LCBmaC0+Y2hhbm5lbCk7CisJcmVzX2ZyZWUoZGV2LCBmaCk7CisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmJfdmlkcSk7CisJa2ZyZWUoZmgpOworCWRldi0+dXNlcnNbZmgtPmNoYW5uZWxdLS07CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisKKwlrcmVmX3B1dCgmZGV2LT5rcmVmLCBzMjI1NV9kZXN0cm95KTsKKwlkcHJpbnRrKDEsICJzMjI1NTogY2xvc2UgY2FsbGVkIChtaW5vcj0lZCwgdXNlcnM9JWQpXG4iLAorCQltaW5vciwgZGV2LT51c2Vyc1tmaC0+Y2hhbm5lbF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMyMjU1X21tYXBfdjRsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwlpZiAoIWZoKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlkcHJpbnRrKDQsICJtbWFwIGNhbGxlZCwgdm1hPTB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXZtYSk7CisKKwlyZXQgPSB2aWRlb2J1Zl9tbWFwX21hcHBlcigmZmgtPnZiX3ZpZHEsIHZtYSk7CisKKwlkcHJpbnRrKDQsICJ2bWEgc3RhcnQ9MHglMDhseCwgc2l6ZT0lbGQsIHJldD0lZFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcpdm1hLT52bV9zdGFydCwKKwkJKHVuc2lnbmVkIGxvbmcpdm1hLT52bV9lbmQgLSAodW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgczIyNTVfZm9wc192NGwgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBzMjI1NV9vcGVuLAorCS5yZWxlYXNlID0gczIyNTVfY2xvc2UsCisJLnBvbGwgPSBzMjI1NV9wb2xsLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwJLyogVjRMMiBpb2N0bCBoYW5kbGVyICovCisJLmNvbXBhdF9pb2N0bCA9IHY0bF9jb21wYXRfaW9jdGwzMiwKKwkubW1hcCA9IHMyMjU1X21tYXBfdjRsLAorCS5sbHNlZWsgPSBub19sbHNlZWssCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB0ZW1wbGF0ZSA9IHsKKwkubmFtZSA9ICJzMjI1NXYiLAorCS50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSwKKwkuZm9wcyA9ICZzMjI1NV9mb3BzX3Y0bCwKKwkubWlub3IgPSAtMSwKKwkucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX3Nfc3RkID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY19jZ21idWYsCisjZW5kaWYKKwkudHZub3JtcyA9IFMyMjU1X05PUk1TLAorCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCit9OworCitzdGF0aWMgaW50IHMyMjU1X3Byb2JlX3Y0bChzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKwlpbnQgY3VyX25yID0gdmlkZW9fbnI7CisKKwkvKiBpbml0aWFsaXplIGFsbCB2aWRlbyA0IGxpbnV4ICovCisJbGlzdF9hZGRfdGFpbCgmZGV2LT5zMjI1NV9kZXZsaXN0LCAmczIyNTVfZGV2bGlzdCk7CisJLyogcmVnaXN0ZXIgNCB2aWRlbyBkZXZpY2VzICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKSB7CisJCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHFbaV0uYWN0aXZlKTsKKwkJZGV2LT52aWRxW2ldLmRldiA9IGRldjsKKwkJZGV2LT52aWRxW2ldLmNoYW5uZWwgPSBpOworCQlkZXYtPnZpZHFbaV0ua3RocmVhZCA9IE5VTEw7CisJCS8qIHJlZ2lzdGVyIDQgdmlkZW8gZGV2aWNlcyAqLworCQlkZXYtPnZkZXZbaV0gPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwkJbWVtY3B5KGRldi0+dmRldltpXSwgJnRlbXBsYXRlLCBzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSkpOworCQlkZXYtPnZkZXZbaV0tPmRldiA9ICZkZXYtPmludGVyZmFjZS0+ZGV2OworCQlpZiAodmlkZW9fbnIgPT0gLTEpCisJCQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2W2ldLAorCQkJCQkJICAgIFZGTF9UWVBFX0dSQUJCRVIsCisJCQkJCQkgICAgdmlkZW9fbnIpOworCQllbHNlCisJCQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2W2ldLAorCQkJCQkJICAgIFZGTF9UWVBFX0dSQUJCRVIsCisJCQkJCQkgICAgY3VyX25yICsgaSk7CisJCWRldi0+dmRldltpXS0+cHJpdiA9IGRldjsKKworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXByaW50ayhLRVJOX0lORk8gIlNlbnNvcmF5IDIyNTUgVjRMIGRyaXZlclxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgczIyNTVfZXhpdF92NGwoc3RydWN0IHMyMjU1X2RldiAqZGV2KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJaW50IGk7CisJLyogdW5yZWdpc3RlciB0aGUgdmlkZW8gZGV2aWNlcyAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmczIyNTVfZGV2bGlzdCkpIHsKKwkJbGlzdCA9IHMyMjU1X2Rldmxpc3QubmV4dDsKKwkJbGlzdF9kZWwobGlzdCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFM7IGkrKykgeworCQlpZiAoLTEgIT0gZGV2LT52ZGV2W2ldLT5taW5vcikKKwkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmRldltpXSk7CisJCWVsc2UKKwkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldltpXSk7CisJfQorfQorCisvKiB0aGlzIGZ1bmN0aW9uIG1vdmVzIHRoZSB1c2Igc3RyZWFtIHJlYWQgcGlwZSBkYXRhCisgKiBpbnRvIHRoZSBzeXN0ZW0gYnVmZmVycy4KKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCBFQUdBSU4gaWYgbW9yZSBkYXRhIHRvIHByb2Nlc3MoIGNhbGwgdGhpcworICogZnVuY3Rpb24gYWdhaW4pLgorICoKKyAqIFJlY2VpdmVkIGZyYW1lIHN0cnVjdHVyZToKKyAqIGJ5dGVzIDAtMzogIG1hcmtlciA6IDB4MjI1NURBNEFMIChGUkFNRV9NQVJLRVIpCisgKiBieXRlcyA0LTc6ICBjaGFubmVsOiAwLTMKKyAqIGJ5dGVzIDgtMTE6IHBheWxvYWQgc2l6ZTogIHNpemUgb2YgdGhlIGZyYW1lCisgKiBieXRlcyAxMi1wYXlsb2Fkc2l6ZSsxMjogIGZyYW1lIGRhdGEKKyAqLworc3RhdGljIGludCBzYXZlX2ZyYW1lKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgc3RydWN0IHMyMjU1X3BpcGVpbmZvICpwaXBlX2luZm8pCit7CisJc3RhdGljIGludCBkYmdzeW5jOyAvKiA9IDA7ICovCisJY2hhciAqcGRlc3Q7CisJdTMyIG9mZnNldCA9IDA7CisJaW50IGJzeW5jID0gMDsKKwlpbnQgYnRydW5jID0gMDsKKwljaGFyICpwc3JjOworCXVuc2lnbmVkIGxvbmcgY29weV9zaXplOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzMzIgaWR4ID0gLTE7CisJc3RydWN0IHMyMjU1X2ZyYW1laSAqZnJtOworCXVuc2lnbmVkIGNoYXIgKnBkYXRhOworCXVuc2lnbmVkIGxvbmcgY3VyX3NpemU7CisJaW50IGJzZWFyY2ggPSAwOworCXN0cnVjdCBzMjI1NV9idWZmZXJpICpidWY7CisJZHByaW50aygxMDAsICJidWZmZXIgdG8gdXNlclxuIik7CisKKwlpZHggPSBkZXYtPmN1cl9mcmFtZVtkZXYtPmNjXTsKKwlidWYgPSAmZGV2LT5idWZmZXJbZGV2LT5jY107CisJZnJtID0gJmJ1Zi0+ZnJhbWVbaWR4XTsKKworCWlmIChmcm0tPnVsU3RhdGUgPT0gMCkgeworCQlmcm0tPnVsU3RhdGUgPSAxOworCQlmcm0tPmN1cl9zaXplID0gMDsKKwkJYnNlYXJjaCA9IDE7CisJfSBlbHNlIGlmIChmcm0tPnVsU3RhdGUgPT0gMikgeworCQkvKiBzeXN0ZW0gZnJhbWUgd2FzIG5vdCBmcmVlZCAqLworCQlkcHJpbnRrKDIsICJzeXMgZnJhbWUgbm90IGZyZWUuICBvdmVycnVuIHJpbmdidWZcbiIpOworCQlic2VhcmNoID0gMTsKKwkJZnJtLT51bFN0YXRlID0gMTsKKwkJZnJtLT5jdXJfc2l6ZSA9IDA7CisJfQorCisJaWYgKGJzZWFyY2gpIHsKKwkJaWYgKCooczMyICopIHBpcGVfaW5mby0+dHJhbnNmZXJfYnVmZmVyICE9IEZSQU1FX01BUktFUikgeworCQkJdTMyIGpqOworCQkJaWYgKGRiZ3N5bmMgPT0gMCkgeworCQkJCWRwcmludGsoMywgIm5vdCBzeW5jaGVkLCBkaXNjYXJkaW5nIGFsbCBwYWNrZXRzIgorCQkJCQkidW50aWwgbWFya2VyXG4iKTsKKworCQkJCWRiZ3N5bmMrKzsKKwkJCX0KKwkJCXBkYXRhID0gKHVuc2lnbmVkIGNoYXIgKilwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWZvciAoamogPSAwOyBqaiA8IChwaXBlX2luZm8tPmN1cl90cmFuc2Zlcl9zaXplIC0gMTIpOworCQkJICAgICBqaisrKSB7CisJCQkJaWYgKCooczMyICopIHBkYXRhID09IEZSQU1FX01BUktFUikgeworCQkJCQlpbnQgY2M7CisJCQkJCWRwcmludGsoMywKKwkJCQkJCSJmb3VuZCBmcmFtZSBtYXJrZXIgYXQgb2Zmc2V0OiIKKwkJCQkJCSIgJWQgWyV4ICV4XVxuIiwgamosIHBkYXRhWzBdLAorCQkJCQkJcGRhdGFbMV0pOworCQkJCQlvZmZzZXQgPSBqajsKKwkJCQkJYnN5bmMgPSAxOworCQkJCQljYyA9ICoodTMyICopIChwZGF0YSArIHNpemVvZih1MzIpKTsKKwkJCQkJaWYgKGNjID49IE1BWF9DSEFOTkVMUykgeworCQkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkgICAgICAgImJhZCBjaGFubmVsXG4iKTsKKwkJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCQl9CisJCQkJCS8qIHJldmVyc2UgaXQgKi8KKwkJCQkJZGV2LT5jYyA9IEdfY2hubWFwW2NjXTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXBkYXRhKys7CisJCQl9CisJCQlpZiAoYnN5bmMgPT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCXUzMiAqcHdvcmQ7CisJCQl1MzIgcGF5bG9hZDsKKwkJCWludCBjYzsKKwkJCWRiZ3N5bmMgPSAwOworCQkJYnN5bmMgPSAxOworCQkJcHdvcmQgPSAodTMyICopIHBpcGVfaW5mby0+dHJhbnNmZXJfYnVmZmVyOworCQkJY2MgPSBwd29yZFsxXTsKKworCQkJaWYgKGNjID49IE1BWF9DSEFOTkVMUykgeworCQkJCXByaW50aygiaW52YWxpZCBjaGFubmVsIGZvdW5kLiAiCisJCQkJCSJ0aHJvd2luZyBvdXQgZGF0YSFcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJZGV2LT5jYyA9IEdfY2hubWFwW2NjXTsKKwkJCXBheWxvYWQgPSBwd29yZFsyXTsKKwkJCWlmIChwYXlsb2FkICE9IGRldi0+cmVxX2ltYWdlX3NpemVbZGV2LT5jY10pIHsKKwkJCQlkcHJpbnRrKDEsICJbJWRdWyVkXXVuZXhwZWN0ZWQgcGF5bG9hZDogJWQiCisJCQkJCSJyZXF1aXJlZDogJWx1IFxuIiwgY2MsIGRldi0+Y2MsCisJCQkJCXBheWxvYWQsIGRldi0+cmVxX2ltYWdlX3NpemVbZGV2LT5jY10pOworCQkJCWRldi0+YmFkX3BheWxvYWRbZGV2LT5jY10rKzsKKwkJCQkvKiBkaXNjYXJkIHRoZSBiYWQgZnJhbWUgKi8KKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQl9CisJfQorCS8qIHNlYXJjaCBkb25lLiAgbm93IGZpbmQgb3V0IGlmIHNob3VsZCBiZSBhY3F1aXJpbmcKKwkgICBvbiB0aGlzIGNoYW5uZWwgKi8KKwlpZiAoIWRldi0+Yl9hY3F1aXJlW2Rldi0+Y2NdKSB7CisJCWZybS0+dWxTdGF0ZSA9IDA7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlkeCA9IGRldi0+Y3VyX2ZyYW1lW2Rldi0+Y2NdOworCWZybSA9ICZkZXYtPmJ1ZmZlcltkZXYtPmNjXS5mcmFtZVtpZHhdOworCisJaWYgKGZybS0+dWxTdGF0ZSA9PSAwKSB7CisJCWZybS0+dWxTdGF0ZSA9IDE7CisJCWZybS0+Y3VyX3NpemUgPSAwOworCX0gZWxzZSBpZiAoZnJtLT51bFN0YXRlID09IDIpIHsKKwkJLyogc3lzdGVtIGZyYW1lIHJpbmcgYnVmZmVyIG92ZXJydW4gKi8KKwkJZHByaW50aygyLCAic3lzIGZyYW1lIG92ZXJydW4uICBvdmVyd3JpdGluZyBmcmFtZSAlZCAlZFxuIiwKKwkJCWRldi0+Y2MsIGlkeCk7CisJCWZybS0+dWxTdGF0ZSA9IDE7CisJCWZybS0+Y3VyX3NpemUgPSAwOworCX0KKworCWlmIChic3luYykgeworCQkvKiBza2lwIHRoZSBtYXJrZXIgNTEyIGJ5dGVzIChhbmQgb2Zmc2V0IGlmIG91dCBvZiBzeW5jKSAqLworCQlwc3JjID0gKHU4ICopcGlwZV9pbmZvLT50cmFuc2Zlcl9idWZmZXIgKyBvZmZzZXQgKyBQUkVGSVhfU0laRTsKKwl9IGVsc2UgeworCQlwc3JjID0gKHU4ICopcGlwZV9pbmZvLT50cmFuc2Zlcl9idWZmZXI7CisJfQorCisJaWYgKGZybS0+bHB2Yml0cyA9PSBOVUxMKSB7CisJCWRwcmludGsoMSwgInMyMjU1IGZyYW1lIGJ1ZmZlciA9PSBOVUxMLiVwICVwICVkICVkIiwKKwkJCWZybSwgZGV2LCBkZXYtPmNjLCBpZHgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwZGVzdCA9IGZybS0+bHB2Yml0cyArIGZybS0+Y3VyX3NpemU7CisKKwlpZiAoYnN5bmMpIHsKKwkJY29weV9zaXplID0KKwkJICAgIChwaXBlX2luZm8tPmN1cl90cmFuc2Zlcl9zaXplIC0gb2Zmc2V0KSAtIFBSRUZJWF9TSVpFOworCQlpZiAoY29weV9zaXplID4gcGlwZV9pbmZvLT5jdXJfdHJhbnNmZXJfc2l6ZSkgeworCQkJcHJpbnRrKCJpbnZhbGlkIGNvcHkgc2l6ZSwgb3ZlcmZsb3chXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfSBlbHNlIHsKKwkJY29weV9zaXplID0gcGlwZV9pbmZvLT5jdXJfdHJhbnNmZXJfc2l6ZTsKKwl9CisKKwljdXJfc2l6ZSA9IGZybS0+Y3VyX3NpemU7CisJc2l6ZSA9IGRldi0+cmVxX2ltYWdlX3NpemVbZGV2LT5jY107CisKKwlpZiAoKGNvcHlfc2l6ZSArIGN1cl9zaXplKSA+IHNpemUpIHsKKwkJY29weV9zaXplID0gc2l6ZSAtIGN1cl9zaXplOworCQlidHJ1bmMgPSAxOworCX0KKworCW1lbWNweShwZGVzdCwgcHNyYywgY29weV9zaXplKTsKKwljdXJfc2l6ZSArPSBjb3B5X3NpemU7CisJZnJtLT5jdXJfc2l6ZSArPSBjb3B5X3NpemU7CisJZHByaW50ayg1MCwgImN1cl9zaXplIHNpemUgJWx1IHNpemUgJWx1IFxuIiwgY3VyX3NpemUsIHNpemUpOworCisJaWYgKGN1cl9zaXplID49IChzaXplIC0gUFJFRklYX1NJWkUpKSB7CisJCXUzMiBjYyA9IGRldi0+Y2M7CisJCWZybS0+dWxTdGF0ZSA9IDI7CisJCWRwcmludGsoMiwgIioqKioqKioqKioqKioqKipbJWRdQnVmZmVyWyVkXWZ1bGwqKioqKioqKioqKioqXG4iLAorCQkJY2MsIGlkeCk7CisJCWRldi0+bGFzdF9mcmFtZVtjY10gPSBkZXYtPmN1cl9mcmFtZVtjY107CisJCWRldi0+Y3VyX2ZyYW1lW2NjXSsrOworCQkvKiBlbmQgb2Ygc3lzdGVtIGZyYW1lIHJpbmcgYnVmZmVyLCBzdGFydCBhdCB6ZXJvICovCisJCWlmICgoZGV2LT5jdXJfZnJhbWVbY2NdID09IFNZU19GUkFNRVMpIHx8CisJCSAgICAoZGV2LT5jdXJfZnJhbWVbY2NdID09IGRldi0+YnVmZmVyW2NjXS5kd0ZyYW1lcykpCisJCQlkZXYtPmN1cl9mcmFtZVtjY10gPSAwOworCisJCS8qIHNpZ25hbCB0aGUgc2VtYXBob3JlIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJaWYgKGRldi0+Yl9hY3F1aXJlW2NjXSkKKwkJCXMyMjU1X2dvdF9mcmFtZShkZXYsIGNjKTsKKwkJZGV2LT5mcmFtZV9jb3VudFtjY10rKzsKKwl9CisJLyogZnJhbWUgd2FzIHRydW5jYXRlZCAqLworCWlmIChidHJ1bmMpIHsKKwkJLyogcmV0dXJuIG1vcmUgZGF0YSB0byBwcm9jZXNzICovCisJCXJldHVybiBFQUdBSU47CisJfQorCS8qIGRvbmUgc3VjY2Vzc2Z1bGx5ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMyMjU1X3JlYWRfdmlkZW9fY2FsbGJhY2soc3RydWN0IHMyMjU1X2RldiAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBzMjI1NV9waXBlaW5mbyAqcGlwZV9pbmZvKQoreworCWludCByZXM7CisJZHByaW50ayg1MCwgImNhbGxiYWNrIHJlYWQgdmlkZW8gXG4iKTsKKworCWlmIChkZXYtPmNjID49IE1BWF9DSEFOTkVMUykgeworCQlkZXYtPmNjID0gMDsKKwkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJpbnZhbGlkIGNoYW5uZWxcbiIpOworCQlyZXR1cm47CisJfQorCS8qIG90aGVyd2lzZSBjb3B5IHRvIHRoZSBzeXN0ZW0gYnVmZmVycyAqLworCXJlcyA9IHNhdmVfZnJhbWUoZGV2LCBwaXBlX2luZm8pOworCWlmIChyZXMgPT0gRUFHQUlOKQorCQlzYXZlX2ZyYW1lKGRldiwgcGlwZV9pbmZvKTsKKworCWRwcmludGsoNTAsICJjYWxsYmFjayByZWFkIHZpZGVvIGRvbmVcbiIpOworCXJldHVybjsKK30KKworc3RhdGljIGxvbmcgczIyNTVfdmVuZG9yX3JlcShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGNoYXIgUmVxdWVzdCwKKwkJCSAgICAgdTE2IEluZGV4LCB1MTYgVmFsdWUsIHZvaWQgKlRyYW5zZmVyQnVmZmVyLAorCQkJICAgICBzMzIgVHJhbnNmZXJCdWZmZXJMZW5ndGgsIGludCBiT3V0KQoreworCWludCByOworCWlmICghYk91dCkgeworCQlyID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkJICAgIFJlcXVlc3QsCisJCQkJICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfAorCQkJCSAgICBVU0JfRElSX0lOLAorCQkJCSAgICBWYWx1ZSwgSW5kZXgsIFRyYW5zZmVyQnVmZmVyLAorCQkJCSAgICBUcmFuc2ZlckJ1ZmZlckxlbmd0aCwgSFogKiA1KTsKKwl9IGVsc2UgeworCQlyID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkJICAgIFJlcXVlc3QsIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJICAgIFZhbHVlLCBJbmRleCwgVHJhbnNmZXJCdWZmZXIsCisJCQkJICAgIFRyYW5zZmVyQnVmZmVyTGVuZ3RoLCBIWiAqIDUpOworCX0KKwlyZXR1cm4gcjsKK30KKworLyoKKyAqIHJldHJpZXZlIEZYMiBmaXJtd2FyZSB2ZXJzaW9uLiBmdXR1cmUgdXNlLgorICogQHBhcmFtIGRldiBwb2ludGVyIHRvIGRldmljZSBleHRlbnNpb24KKyAqIEByZXR1cm4gLTEgZm9yIGZhaWwsIGVsc2UgcmV0dXJucyBmaXJtd2FyZSB2ZXJzaW9uIGFzIGFuIGludCgxNiBiaXRzKQorICovCitzdGF0aWMgaW50IHMyMjU1X2dldF9meDJmdyhzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpCit7CisJaW50IGZ3OworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciB0cmFuc0J1ZmZlcls2NF07CisJcmV0ID0gczIyNTVfdmVuZG9yX3JlcShkZXYsIFMyMjU1X1ZSX0ZXLCAwLCAwLCB0cmFuc0J1ZmZlciwgMiwKKwkJCSAgICAgICBTMjI1NV9WUl9JTik7CisJaWYgKHJldCA8IDApCisJCWRwcmludGsoMiwgImdldCBmdyBlcnJvcjogJXhcbiIsIHJldCk7CisJZncgPSB0cmFuc0J1ZmZlclswXSArICh0cmFuc0J1ZmZlclsxXSA8PCA4KTsKKwlkcHJpbnRrKDIsICJHZXQgRlcgJXggJXhcbiIsIHRyYW5zQnVmZmVyWzBdLCB0cmFuc0J1ZmZlclsxXSk7CisJcmV0dXJuIGZ3OworfQorCisvKgorICogQ3JlYXRlIHRoZSBzeXN0ZW0gcmluZyBidWZmZXIgdG8gY29weSBmcmFtZXMgaW50byBmcm9tIHRoZQorICogdXNiIHJlYWQgcGlwZS4KKyAqLworc3RhdGljIGludCBzMjI1NV9jcmVhdGVfc3lzX2J1ZmZlcnMoc3RydWN0IHMyMjU1X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGNobikKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgbG9uZyByZXFzaXplOworCWRwcmludGsoMSwgImNyZWF0ZSBzeXMgYnVmZmVyc1xuIik7CisJaWYgKGNobiA+PSBNQVhfQ0hBTk5FTFMpCisJCXJldHVybiAtMTsKKworCWRldi0+YnVmZmVyW2Nobl0uZHdGcmFtZXMgPSBTWVNfRlJBTUVTOworCisJLyogYWx3YXlzIGFsbG9jYXRlIG1heGltdW0gc2l6ZShQQUwpIGZvciBzeXN0ZW0gYnVmZmVycyAqLworCXJlcXNpemUgPSBTWVNfRlJBTUVTX01BWFNJWkU7CisKKwlpZiAocmVxc2l6ZSA+IFNZU19GUkFNRVNfTUFYU0laRSkKKwkJcmVxc2l6ZSA9IFNZU19GUkFNRVNfTUFYU0laRTsKKworCWZvciAoaSA9IDA7IGkgPCBTWVNfRlJBTUVTOyBpKyspIHsKKwkJLyogYWxsb2NhdGUgdGhlIGZyYW1lcyAqLworCQlkZXYtPmJ1ZmZlcltjaG5dLmZyYW1lW2ldLmxwdmJpdHMgPSB2bWFsbG9jKHJlcXNpemUpOworCisJCWRwcmludGsoMSwgInZhbGxvYyAlcCBjaGFuICVsdSwgaWR4ICVsdSwgcGRhdGEgJXBcbiIsCisJCQkmZGV2LT5idWZmZXJbY2huXS5mcmFtZVtpXSwgY2huLCBpLAorCQkJZGV2LT5idWZmZXJbY2huXS5mcmFtZVtpXS5scHZiaXRzKTsKKwkJZGV2LT5idWZmZXJbY2huXS5mcmFtZVtpXS5zaXplID0gcmVxc2l6ZTsKKwkJaWYgKGRldi0+YnVmZmVyW2Nobl0uZnJhbWVbaV0ubHB2Yml0cyA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJvdXQgb2YgbWVtb3J5LiAgdXNpbmcgbGVzcyBmcmFtZXNcbiIpOworCQkJZGV2LT5idWZmZXJbY2huXS5kd0ZyYW1lcyA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIG1ha2Ugc3VyZSBpbnRlcm5hbCBzdGF0ZXMgYXJlIHNldCAqLworCWZvciAoaSA9IDA7IGkgPCBTWVNfRlJBTUVTOyBpKyspIHsKKwkJZGV2LT5idWZmZXJbY2huXS5mcmFtZVtpXS51bFN0YXRlID0gMDsKKwkJZGV2LT5idWZmZXJbY2huXS5mcmFtZVtpXS5jdXJfc2l6ZSA9IDA7CisJfQorCisJZGV2LT5jdXJfZnJhbWVbY2huXSA9IDA7CisJZGV2LT5sYXN0X2ZyYW1lW2Nobl0gPSAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzMjI1NV9yZWxlYXNlX3N5c19idWZmZXJzKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJZHByaW50aygxLCAicmVsZWFzZSBzeXMgYnVmZmVyc1xuIik7CisJZm9yIChpID0gMDsgaSA8IFNZU19GUkFNRVM7IGkrKykgeworCQlpZiAoZGV2LT5idWZmZXJbY2hhbm5lbF0uZnJhbWVbaV0ubHB2Yml0cykgeworCQkJZHByaW50aygxLCAidmZyZWUgJXBcbiIsCisJCQkJZGV2LT5idWZmZXJbY2hhbm5lbF0uZnJhbWVbaV0ubHB2Yml0cyk7CisJCQl2ZnJlZShkZXYtPmJ1ZmZlcltjaGFubmVsXS5mcmFtZVtpXS5scHZiaXRzKTsKKwkJfQorCQlkZXYtPmJ1ZmZlcltjaGFubmVsXS5mcmFtZVtpXS5scHZiaXRzID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczIyNTVfYm9hcmRfaW5pdChzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpCit7CisJaW50IGo7CisJc3RydWN0IHMyMjU1X21vZGUgbW9kZV9kZWYgPSBERUZfTU9ERUlfTlRTQ19DT05UOworCWludCBmd192ZXI7CisJZHByaW50ayg0LCAiYm9hcmQgaW5pdDogJXAiLCBkZXYpOworCisJZm9yIChqID0gMDsgaiA8IE1BWF9QSVBFX0JVRkZFUlM7IGorKykgeworCQlzdHJ1Y3QgczIyNTVfcGlwZWluZm8gKnBpcGUgPSAmZGV2LT5waXBlc1tqXTsKKworCQltZW1zZXQocGlwZSwgMCwgc2l6ZW9mKCpwaXBlKSk7CisJCXBpcGUtPmRldiA9IGRldjsKKwkJcGlwZS0+Y3VyX3RyYW5zZmVyX3NpemUgPSBERUZBVUxUX1BJUEVfVVNCQkxPQ0s7CisJCXBpcGUtPm1heF90cmFuc2Zlcl9zaXplID0gTUFYX1BJUEVfVVNCQkxPQ0s7CisKKwkJaWYgKHBpcGUtPmN1cl90cmFuc2Zlcl9zaXplID4gcGlwZS0+bWF4X3RyYW5zZmVyX3NpemUpCisJCQlwaXBlLT5jdXJfdHJhbnNmZXJfc2l6ZSA9IHBpcGUtPm1heF90cmFuc2Zlcl9zaXplOworCQlwaXBlLT50cmFuc2Zlcl9idWZmZXIgPSBremFsbG9jKHBpcGUtPm1heF90cmFuc2Zlcl9zaXplLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChwaXBlLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJZHByaW50aygxLCAib3V0IG9mIG1lbW9yeSFcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCX0KKworCS8qIHF1ZXJ5IHRoZSBmaXJtd2FyZSAqLworCWZ3X3ZlciA9IHMyMjU1X2dldF9meDJmdyhkZXYpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiMjI1NSB1c2IgZmlybXdhcmUgdmVyc2lvbiAlZCBcbiIsIGZ3X3Zlcik7CisJaWYgKGZ3X3ZlciA8IENVUl9VU0JfRldWRVIpCisJCWVycigidXNiIGZpcm13YXJlIG5vdCB1cCB0byBkYXRlICVkXG4iLCBmd192ZXIpOworCisJZm9yIChqID0gMDsgaiA8IE1BWF9DSEFOTkVMUzsgaisrKSB7CisJCWRldi0+Yl9hY3F1aXJlW2pdID0gMDsKKwkJZGV2LT5tb2RlW2pdID0gbW9kZV9kZWY7CisJCWRldi0+Y3VyX2ZtdFtqXSA9ICZmb3JtYXRzWzBdOworCQlkZXYtPm1vZGVbal0ucmVzdGFydCA9IDE7CisJCWRldi0+cmVxX2ltYWdlX3NpemVbal0gPSBnZXRfdHJhbnNmZXJfc2l6ZSgmbW9kZV9kZWYpOworCQlkZXYtPmZyYW1lX2NvdW50W2pdID0gMDsKKwkJLyogY3JlYXRlIHRoZSBzeXN0ZW0gYnVmZmVycyAqLworCQlzMjI1NV9jcmVhdGVfc3lzX2J1ZmZlcnMoZGV2LCBqKTsKKwl9CisJLyogc3RhcnQgcmVhZCBwaXBlICovCisJczIyNTVfc3RhcnRfcmVhZHBpcGUoZGV2KTsKKworCWRwcmludGsoMSwgIlMyMjU1OiBib2FyZCBpbml0aWFsaXplZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczIyNTVfYm9hcmRfc2h1dGRvd24oc3RydWN0IHMyMjU1X2RldiAqZGV2KQoreworCXUzMiBpOworCisJZHByaW50aygxLCAiUzIyNTU6IGJvYXJkIHNodXRkb3duOiAlcCIsIGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspIHsKKwkJaWYgKGRldi0+Yl9hY3F1aXJlW2ldKQorCQkJczIyNTVfc3RvcF9hY3F1aXJlKGRldiwgaSk7CisJfQorCisJczIyNTVfc3RvcF9yZWFkcGlwZShkZXYpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKQorCQlzMjI1NV9yZWxlYXNlX3N5c19idWZmZXJzKGRldiwgaSk7CisKKwkvKiByZWxlYXNlIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1BJUEVfQlVGRkVSUzsgaSsrKSB7CisJCXN0cnVjdCBzMjI1NV9waXBlaW5mbyAqcGlwZSA9ICZkZXYtPnBpcGVzW2ldOworCQlrZnJlZShwaXBlLT50cmFuc2Zlcl9idWZmZXIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVhZF9waXBlX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqcHVyYikKK3sKKwlzdHJ1Y3QgczIyNTVfcGlwZWluZm8gKnBpcGVfaW5mbzsKKwlzdHJ1Y3QgczIyNTVfZGV2ICpkZXY7CisJaW50IHN0YXR1czsKKwlpbnQgcGlwZTsKKworCXBpcGVfaW5mbyA9IHB1cmItPmNvbnRleHQ7CisJZHByaW50aygxMDAsICJyZWFkIHBpcGUgY29tcGxldGlvbiAlcCwgc3RhdHVzICVkXG4iLCBwdXJiLAorCQlwdXJiLT5zdGF0dXMpOworCWlmIChwaXBlX2luZm8gPT0gTlVMTCkgeworCQllcnIoIm5vIGNvbnRleHQgISIpOworCQlyZXR1cm47CisJfQorCisJZGV2ID0gcGlwZV9pbmZvLT5kZXY7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWVycigibm8gY29udGV4dCAhIik7CisJCXJldHVybjsKKwl9CisJc3RhdHVzID0gcHVyYi0+c3RhdHVzOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkcHJpbnRrKDIsICJyZWFkX3BpcGVfY29tcGxldGlvbjogZXJyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwaXBlX2luZm8tPnN0YXRlID09IDApIHsKKwkJZHByaW50aygyLCAiZXhpdGluZyBVU0IgcGlwZSIpOworCQlyZXR1cm47CisJfQorCisJczIyNTVfcmVhZF92aWRlb19jYWxsYmFjayhkZXYsIHBpcGVfaW5mbyk7CisKKwlwaXBlX2luZm8tPmVycl9jb3VudCA9IDA7CisJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+cmVhZF9lbmRwb2ludCk7CisJLyogcmV1c2UgdXJiICovCisJdXNiX2ZpbGxfYnVsa191cmIocGlwZV9pbmZvLT5zdHJlYW1fdXJiLCBkZXYtPnVkZXYsCisJCQkgIHBpcGUsCisJCQkgIHBpcGVfaW5mby0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICBwaXBlX2luZm8tPmN1cl90cmFuc2Zlcl9zaXplLAorCQkJICByZWFkX3BpcGVfY29tcGxldGlvbiwgcGlwZV9pbmZvKTsKKworCWlmIChwaXBlX2luZm8tPnN0YXRlICE9IDApIHsKKwkJaWYgKHVzYl9zdWJtaXRfdXJiKHBpcGVfaW5mby0+c3RyZWFtX3VyYiwgR0ZQX0tFUk5FTCkpIHsKKwkJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAiZXJyb3Igc3VibWl0dGluZyB1cmJcbiIpOworCQkJdXNiX2ZyZWVfdXJiKHBpcGVfaW5mby0+c3RyZWFtX3VyYik7CisJCX0KKwl9IGVsc2UgeworCQlkcHJpbnRrKDIsICJyZWFkIHBpcGUgY29tcGxldGUgc3RhdGUgMFxuIik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBzMjI1NV9zdGFydF9yZWFkcGlwZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpCit7CisJaW50IHBpcGU7CisJaW50IHJldHZhbDsKKwlpbnQgaTsKKwlzdHJ1Y3QgczIyNTVfcGlwZWluZm8gKnBpcGVfaW5mbyA9IGRldi0+cGlwZXM7CisJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+cmVhZF9lbmRwb2ludCk7CisJZHByaW50aygyLCAic3RhcnQgcGlwZSBJTiAlZFxuIiwgZGV2LT5yZWFkX2VuZHBvaW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUElQRV9CVUZGRVJTOyBpKyspIHsKKwkJcGlwZV9pbmZvLT5zdGF0ZSA9IDE7CisJCXBpcGVfaW5mby0+YnVmX2luZGV4ID0gKHUzMikgaTsKKwkJcGlwZV9pbmZvLT5wcmlvcml0eV9zZXQgPSAwOworCQlwaXBlX2luZm8tPnN0cmVhbV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXBpcGVfaW5mby0+c3RyZWFtX3VyYikgeworCQkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsCisJCQkJIlJlYWRTdHJlYW06IFVuYWJsZSB0byBhbGxvYyBVUkIiKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCS8qIHRyYW5zZmVyIGJ1ZmZlciBhbGxvY2F0ZWQgaW4gYm9hcmRfaW5pdCAqLworCQl1c2JfZmlsbF9idWxrX3VyYihwaXBlX2luZm8tPnN0cmVhbV91cmIsIGRldi0+dWRldiwKKwkJCQkgIHBpcGUsCisJCQkJICBwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHBpcGVfaW5mby0+Y3VyX3RyYW5zZmVyX3NpemUsCisJCQkJICByZWFkX3BpcGVfY29tcGxldGlvbiwgcGlwZV9pbmZvKTsKKworCQlwaXBlX2luZm8tPnVyYl9zaXplID0gc2l6ZW9mKHBpcGVfaW5mby0+c3RyZWFtX3VyYik7CisJCWRwcmludGsoNCwgInN1Ym1pdHRpbmcgVVJCICVwXG4iLCBwaXBlX2luZm8tPnN0cmVhbV91cmIpOworCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwaXBlX2luZm8tPnN0cmVhbV91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0dmFsKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInMyMjU1OiBzdGFydCByZWFkIHBpcGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogc3RhcnRzIGFjcXVpc2l0aW9uIHByb2Nlc3MgKi8KK3N0YXRpYyBpbnQgczIyNTVfc3RhcnRfYWNxdWlyZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgcmVzOworCXVuc2lnbmVkIGxvbmcgY2huX3JldjsKKwlpbnQgajsKKwlpZiAoY2huID49IE1BWF9DSEFOTkVMUykgeworCQlkcHJpbnRrKDIsICJzdGFydCBhY3F1aXJlIGZhaWxlZCwgYmFkIGNoYW5uZWwgJWx1XG4iLCBjaG4pOworCQlyZXR1cm4gLTE7CisJfQorCisJY2huX3JldiA9IEdfY2hubWFwW2Nobl07CisJZHByaW50aygxLCAiUzIyNTU6IHN0YXJ0IGFjcXVpcmUgJWx1IFxuIiwgY2huKTsKKworCWJ1ZmZlciA9IGt6YWxsb2MoNTEyLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT5sYXN0X2ZyYW1lW2Nobl0gPSAtMTsKKwlkZXYtPmJhZF9wYXlsb2FkW2Nobl0gPSAwOworCWRldi0+Y3VyX2ZyYW1lW2Nobl0gPSAwOworCWZvciAoaiA9IDA7IGogPCBTWVNfRlJBTUVTOyBqKyspIHsKKwkJZGV2LT5idWZmZXJbY2huXS5mcmFtZVtqXS51bFN0YXRlID0gMDsKKwkJZGV2LT5idWZmZXJbY2huXS5mcmFtZVtqXS5jdXJfc2l6ZSA9IDA7CisJfQorCisJLyogc2VuZCB0aGUgc3RhcnQgY29tbWFuZCAqLworCSoodTMyICopIGJ1ZmZlciA9IElOX0RBVEFfVE9LRU47CisJKigodTMyICopIGJ1ZmZlciArIDEpID0gKHUzMikgY2huX3JldjsKKwkqKCh1MzIgKikgYnVmZmVyICsgMikgPSAodTMyKSBDTURfU1RBUlQ7CisJcmVzID0gczIyNTVfd3JpdGVfY29uZmlnKGRldi0+dWRldiwgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIDUxMik7CisJaWYgKHJlcyAhPSAwKQorCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgIkNNRF9TVEFSVCBlcnJvclxuIik7CisKKwlkcHJpbnRrKDIsICJzdGFydCBhY3F1aXJlIGV4aXRbJWx1XSAlZCBcbiIsIGNobiwgcmVzKTsKKwlrZnJlZShidWZmZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMyMjU1X3N0b3BfYWNxdWlyZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgcmVzOworCXVuc2lnbmVkIGxvbmcgY2huX3JldjsKKworCWlmIChjaG4gPj0gTUFYX0NIQU5ORUxTKSB7CisJCWRwcmludGsoMiwgInN0b3AgYWNxdWlyZSBmYWlsZWQsIGJhZCBjaGFubmVsICVsdVxuIiwgY2huKTsKKwkJcmV0dXJuIC0xOworCX0KKwljaG5fcmV2ID0gR19jaG5tYXBbY2huXTsKKworCWJ1ZmZlciA9IGt6YWxsb2MoNTEyLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogc2VuZCB0aGUgc3RvcCBjb21tYW5kICovCisJZHByaW50ayg0LCAic3RvcCBhY3F1aXJlICVsdVxuIiwgY2huKTsKKwkqKHUzMiAqKSBidWZmZXIgPSBJTl9EQVRBX1RPS0VOOworCSooKHUzMiAqKSBidWZmZXIgKyAxKSA9ICh1MzIpIGNobl9yZXY7CisJKigodTMyICopIGJ1ZmZlciArIDIpID0gQ01EX1NUT1A7CisJcmVzID0gczIyNTVfd3JpdGVfY29uZmlnKGRldi0+dWRldiwgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIDUxMik7CisKKwlpZiAocmVzICE9IDApCisJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAiQ01EX1NUT1AgZXJyb3JcbiIpOworCisJZHByaW50ayg0LCAic3RvcCBhY3F1aXJlOiByZWxlYXNpbmcgc3RhdGVzIFxuIik7CisKKwlrZnJlZShidWZmZXIpOworCWRldi0+Yl9hY3F1aXJlW2Nobl0gPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMyMjU1X3N0b3BfcmVhZHBpcGUoc3RydWN0IHMyMjU1X2RldiAqZGV2KQoreworCWludCBqOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWVycigiczIyNTU6IGludmFsaWQgZGV2aWNlIik7CisJCXJldHVybjsKKwl9CisJZHByaW50ayg0LCAic3RvcCByZWFkIHBpcGVcbiIpOworCWZvciAoaiA9IDA7IGogPCBNQVhfUElQRV9CVUZGRVJTOyBqKyspIHsKKwkJc3RydWN0IHMyMjU1X3BpcGVpbmZvICpwaXBlX2luZm8gPSAmZGV2LT5waXBlc1tqXTsKKwkJaWYgKHBpcGVfaW5mbykgeworCQkJaWYgKHBpcGVfaW5mby0+c3RhdGUgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCXBpcGVfaW5mby0+c3RhdGUgPSAwOworCQkJcGlwZV9pbmZvLT5wcmV2X3N0YXRlID0gMTsKKworCQl9CisJfQorCisJZm9yIChqID0gMDsgaiA8IE1BWF9QSVBFX0JVRkZFUlM7IGorKykgeworCQlzdHJ1Y3QgczIyNTVfcGlwZWluZm8gKnBpcGVfaW5mbyA9ICZkZXYtPnBpcGVzW2pdOworCQlpZiAocGlwZV9pbmZvLT5zdHJlYW1fdXJiKSB7CisJCQkvKiBjYW5jZWwgdXJiICovCisJCQl1c2Jfa2lsbF91cmIocGlwZV9pbmZvLT5zdHJlYW1fdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihwaXBlX2luZm8tPnN0cmVhbV91cmIpOworCQkJcGlwZV9pbmZvLT5zdHJlYW1fdXJiID0gTlVMTDsKKwkJfQorCX0KKwlkcHJpbnRrKDIsICJzMjI1NSBzdG9wIHJlYWQgcGlwZTogJWRcbiIsIGopOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgczIyNTVfZndsb2FkX3N0YXJ0KHN0cnVjdCBzMjI1NV9kZXYgKmRldikKK3sKKwlkZXYtPmZ3X2RhdGEtPmZ3X3NpemUgPSBkZXYtPmZ3X2RhdGEtPmZ3LT5zaXplOworCWF0b21pY19zZXQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX05PVExPQURFRCk7CisJbWVtY3B5KGRldi0+ZndfZGF0YS0+cGZ3X2RhdGEsCisJICAgICAgIGRldi0+ZndfZGF0YS0+ZnctPmRhdGEsIENIVU5LX1NJWkUpOworCWRldi0+ZndfZGF0YS0+ZndfbG9hZGVkID0gQ0hVTktfU0laRTsKKwl1c2JfZmlsbF9idWxrX3VyYihkZXYtPmZ3X2RhdGEtPmZ3X3VyYiwgZGV2LT51ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCAyKSwKKwkJCSAgZGV2LT5md19kYXRhLT5wZndfZGF0YSwKKwkJCSAgQ0hVTktfU0laRSwgczIyNTVfZndjaHVua19jb21wbGV0ZSwKKwkJCSAgZGV2LT5md19kYXRhKTsKKwltb2RfdGltZXIoJmRldi0+dGltZXIsIGppZmZpZXMgKyBIWik7Cit9CisKKy8qIHN0YW5kYXJkIHVzYiBwcm9iZSBmdW5jdGlvbiAqLworc3RhdGljIGludCBzMjI1NV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJZHByaW50aygyLCAiczIyNTU6IHByb2JlXG4iKTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCB0byB6ZXJvICovCisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMyMjU1X2RldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQllcnIoInMyMjU1OiBvdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZGV2LT5md19kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMyMjU1X2Z3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmZ3X2RhdGEpCisJCWdvdG8gZXJyb3I7CisKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCW11dGV4X2luaXQoJmRldi0+b3Blbl9sb2NrKTsKKworCS8qIGdyYWIgdXNiX2RldmljZSBhbmQgc2F2ZSBpdCAqLworCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJaWYgKGRldi0+dWRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibnVsbCB1c2IgZGV2aWNlXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisJa3JlZl9pbml0KCZkZXYtPmtyZWYpOworCWRwcmludGsoMSwgImRldjogJXAsIGtyZWY6ICVwIHVkZXYgJXAgaW50ZXJmYWNlICVwXG4iLCBkZXYsICZkZXYtPmtyZWYsCisJCWRldi0+dWRldiwgaW50ZXJmYWNlKTsKKwlkZXYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICAqLworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWRwcmludGsoMSwgIm51bSBlbmRwb2ludHMgJWRcbiIsIGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50cyk7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisJCWlmICghZGV2LT5yZWFkX2VuZHBvaW50ICYmIHVzYl9lbmRwb2ludF9pc19idWxrX2luKGVuZHBvaW50KSkgeworCQkJLyogd2UgZm91bmQgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwkJCWRldi0+cmVhZF9lbmRwb2ludCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQl9CisJfQorCisJaWYgKCFkZXYtPnJlYWRfZW5kcG9pbnQpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZCBub3QgZmluZCBidWxrLWluIGVuZHBvaW50Iik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogc2V0IGludGZkYXRhICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisKKwlkcHJpbnRrKDEwMCwgImFmdGVyIGludGZkYXRhICVwXG4iLCBkZXYpOworCisJaW5pdF90aW1lcigmZGV2LT50aW1lcik7CisJZGV2LT50aW1lci5mdW5jdGlvbiA9IHMyMjU1X3RpbWVyOworCWRldi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldi0+ZndfZGF0YTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+ZndfZGF0YS0+d2FpdF9mdyk7CisKKworCWRldi0+ZndfZGF0YS0+ZndfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKworCWlmICghZGV2LT5md19kYXRhLT5md191cmIpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJvdXQgb2YgbWVtb3J5IVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldi0+ZndfZGF0YS0+cGZ3X2RhdGEgPSBremFsbG9jKENIVU5LX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5md19kYXRhLT5wZndfZGF0YSkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIm91dCBvZiBtZW1vcnkhXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJLyogbG9hZCB0aGUgZmlyc3QgY2h1bmsgKi8KKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZGV2LT5md19kYXRhLT5mdywKKwkJCSAgICAgRklSTVdBUkVfRklMRV9OQU1FLCAmZGV2LT51ZGV2LT5kZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2Vuc29yYXkgMjI1NSBmYWlsZWQgdG8gZ2V0IGZpcm13YXJlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBsb2FkcyB2NGwgc3BlY2lmaWMgKi8KKwlzMjI1NV9wcm9iZV92NGwoZGV2KTsKKwkvKiBsb2FkIDIyNTUgYm9hcmQgc3BlY2lmaWMgKi8KKwlzMjI1NV9ib2FyZF9pbml0KGRldik7CisKKwlkcHJpbnRrKDQsICJiZWZvcmUgcHJvYmUgZG9uZSAlcFxuIiwgZGV2KTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7CisKKwlzMjI1NV9md2xvYWRfc3RhcnQoZGV2KTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJTZW5zb3JheSAyMjU1IGRldGVjdGVkXG4iKTsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qIGRpc2Nvbm5lY3Qgcm91dGluZS4gd2hlbiBib2FyZCBpcyByZW1vdmVkIHBoeXNpY2FsbHkgb3Igd2l0aCBybW1vZCAqLworc3RhdGljIHZvaWQgczIyNTVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IE5VTEw7CisJZHByaW50aygxLCAiczIyNTU6IGRpc2Nvbm5lY3QgaW50ZXJmYWNlICVwXG4iLCBpbnRlcmZhY2UpOworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpZiAoZGV2KSB7CisJCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHMyMjU1X2Rlc3Ryb3kpOworCQlkcHJpbnRrKDEsICJzMjI1NWRydjogZGlzY29ubmVjdFxuIik7CisJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgInMyMjU1dXNiIG5vdyBkaXNjb25uZWN0ZWRcbiIpOworCX0KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzMjI1NV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiczIyNTUiLAorCS5wcm9iZSA9IHMyMjU1X3Byb2JlLAorCS5kaXNjb25uZWN0ID0gczIyNTVfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBzMjI1NV90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zMjI1NV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnMyMjU1X2RyaXZlcik7CisKKwlpZiAocmVzdWx0KQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisKKwlkcHJpbnRrKDIsICJzMjI1NV9pbml0OiBkb25lXG4iKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3MyMjU1X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmczIyNTVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX3MyMjU1X2luaXQpOworbW9kdWxlX2V4aXQodXNiX3MyMjU1X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNlbnNvcmF5IDIyNTUgVmlkZW8gZm9yIExpbnV4IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRGVhbiBBbmRlcnNvbiAoU2Vuc29yYXkgQ29tcGFueSBJbmMuKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCmluZGV4IDk5NmI0OTQuLjAzZTc3MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKQEAgLTY2LDYgKzY2LDcgQEAKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10JID0geyBJMkNfQUREUkVTUywgSTJDX0NMSUVOVF9FTkQgfTsKKwogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCmluZGV4IGVjOGM2NWQuLmZkZTk5ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCkBAIC0xMzAsNiArMTMwLDcgQEAKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7MzQ+PjEsSTJDX0NMSUVOVF9FTkR9OworCiBJMkNfQ0xJRU5UX0lOU01PRDsKIAogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKaW5kZXggNzE2ZWU3Zi4uZjA1MDI0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotCiAjaW5jbHVkZSA8bWVkaWEvcmRzLmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IDQzNWMwODMuLmJjZDFjOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC02Nyw3ICs2Nyw2IEBACiAJCTB4NDIgPj4gMSwgMHg0MCA+PiAxLAkvKiBTQUE3MTE0LCBTQUE3MTE1IGFuZCBTQUE3MTE4ICovCiAJCUkyQ19DTElFTlRfRU5EIH07CiAKLQogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIHN0cnVjdCBzYWE3MTF4X3N0YXRlIHsKQEAgLTE1NTgsNyArMTU1Nyw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTE1X2lkW10gPSB7Ci0JeyAic2FhNzExeCIsIDEgfSwgLyogYXV0b2RldGVjdCAqLworCXsgInNhYTcxMTVfYXV0byIsIDEgfSwgLyogYXV0b2RldGVjdCAqLwogCXsgInNhYTcxMTEiLCAwIH0sCiAJeyAic2FhNzExMyIsIDAgfSwKIAl7ICJzYWE3MTE0IiwgMCB9LApAQCAtMTU3Nyw0ICsxNTc2LDMgQEAKIAkubGVnYWN5X2NsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRyB8IEkyQ19DTEFTU19UVl9ESUdJVEFMLAogCS5pZF90YWJsZSA9IHNhYTcxMTVfaWQsCiB9OwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWRiOTg4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExeC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTg0ICswLDAgQEAKLS8qCi0gKiBzYWE3MTF4IC0gUGhpbGlwcyBTQUE3MTF4IHZpZGVvIGRlY29kZXIgZHJpdmVyIHZlcnNpb24gMC4wLjEKLSAqCi0gKiBUbyBkbzogTm93LCBpdCBoYW5kbGVzIG9ubHkgc2FhNzExMy83MTE0LiBTaG91bGQgYmUgaW1wcm92ZWQgdG8KLSAqIGhhbmRsZSBhbGwgUGhpbGlwcyBzYWE3MTF4IGRldmljZXMuCi0gKgotICogQmFzZWQgb24gc2FhNzExMyBkcml2ZXIgZnJvbSBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExeCB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcywgSm9zZSBJZ25hY2lvIEdpam9uLCBKb2VyZyBIZWNrZW5iYWNoLCBNYXJrIE1jQ2xlbGxhbmQsIER3YWluZSBHYXJkZW4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCi0jZGVmaW5lIEkyQ19OQU1FKHMpIChzKS0+bmFtZQotCi0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotCi1zdGF0aWMgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIiBTZXQgdGhlIGRlZmF1bHQgRGVidWcgbGV2ZWwuICBEZWZhdWx0OiAwIChPZmYpIC0gKDAtMSkiKTsKLQotCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0cnVjdCBzYWE3MTF4IHsKLQl1bnNpZ25lZCBjaGFyIHJlZ1szMl07Ci0KLQlpbnQgbm9ybTsKLQlpbnQgaW5wdXQ7Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7Ci19OwotCi0jZGVmaW5lICAgSTJDX1NBQTcxMTMgICAgICAgIDB4NEEKLSNkZWZpbmUgICBJMkNfU0FBNzExNCAgICAgICAgMHg0MgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzExeF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQotewotCXN0cnVjdCBzYWE3MTF4ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMXhfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKLXsKLQlpbnQgcmV0ID0gLTE7Ci0JdTggcmVnOwotCi0JLyogdGhlIHNhYTcxMXggaGFzIGFuIGF1dG9pbmNyZW1lbnQgZnVuY3Rpb24sIHVzZSBpdCBpZgotCSAqIHRoZSBhZGFwdGVyIHVuZGVyc3RhbmRzIHJhdyBJMkMgKi8KLQlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Ci0JCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCi0JCXN0cnVjdCBzYWE3MTF4ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JCXN0cnVjdCBpMmNfbXNnIG1zZzsKLQkJdTggYmxvY2tfZGF0YVszMl07Ci0KLQkJbXNnLmFkZHIgPSBjbGllbnQtPmFkZHI7Ci0JCW1zZy5mbGFncyA9IDA7Ci0JCXdoaWxlIChsZW4gPj0gMikgewotCQkJbXNnLmJ1ZiA9IChjaGFyICopIGJsb2NrX2RhdGE7Ci0JCQltc2cubGVuID0gMDsKLQkJCWJsb2NrX2RhdGFbbXNnLmxlbisrXSA9IHJlZyA9IGRhdGFbMF07Ci0JCQlkbyB7Ci0JCQkJYmxvY2tfZGF0YVttc2cubGVuKytdID0KLQkJCQkgICAgZGVjb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07Ci0JCQkJbGVuIC09IDI7Ci0JCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgbXNnLmxlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwKLQkJCQkJCSZtc2csIDEpKSA8IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCi0JCXdoaWxlIChsZW4gPj0gMikgewotCQkJcmVnID0gKmRhdGErKzsKLQkJCWlmICgocmV0ID0gc2FhNzExeF93cml0ZShjbGllbnQsIHJlZywKLQkJCQkJCSAqZGF0YSsrKSkgPCAwKQotCQkJCWJyZWFrOwotCQkJbGVuIC09IDI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTF4X2luaXRfZGVjb2RlciAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0KQotewotCXJldHVybiBzYWE3MTF4X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdC0+ZGF0YSwgaW5pdC0+bGVuKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMXhfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQotewotCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWE3MTF4X2kyY19pbml0W10gPSB7Ci0JMHgwMCwgMHgwMCwJLyogUEg3MTF4X0NISVBfVkVSU0lPTiAwMCAtIElEIGJ5dGUgKi8KLQkweDAxLCAweDA4LAkvKiBQSDcxMXhfSU5DUkVNRU5UX0RFTEFZIC0gKDEpICgxKSAoMSkgKDEpIElERUwzIElERUwyIElERUxMMSBJREVMMCAqLwotCTB4MDIsIDB4YzAsCS8qIFBINzExeF9BTkFMT0dfSU5QVVRfQ09OVFJfMSAtIEZVU0UxIEZVU0UwIEdVREwxIEdVREwwIE1PREUzIE1PREUyIE1PREUxIE1PREUwICovCi0JMHgwMywgMHgyMywJLyogUEg3MTF4X0FOQUxPR19JTlBVVF9DT05UUl8yIC0gKDEpIEhMTlJTIFZCU0wgV1BPRkYgSE9MREcgR0FGSVggR0FJMjggR0FJMTggKi8KLQkweDA0LCAweDAwLAkvKiBQSDcxMXhfQU5BTE9HX0lOUFVUX0NPTlRSXzMgLSBHQUkxNyBHQUkxNiBHQUkxNSBHQUkxNCBHQUkxMyBHQUkxMiBHQUkxMSBHQUkxMCAqLwotCTB4MDUsIDB4MDAsCS8qIFBINzExeF9BTkFMT0dfSU5QVVRfQ09OVFJfNCAtIEdBSTI3IEdBSTI2IEdBSTI1IEdBSTI0IEdBSTIzIEdBSTIyIEdBSTIxIEdBSTIwICovCi0JMHgwNiwgMHhlYiwJLyogUEg3MTF4X0hPUklaT05UQUxfU1lOQ19TVEFSVCAtIEhTQjcgSFNCNiBIU0I1IEhTQjQgSFNCMyBIU0IyIEhTQjEgSFNCMCAqLwotCTB4MDcsIDB4ZTAsCS8qIFBINzExeF9IT1JJWk9OVEFMX1NZTkNfU1RPUCAtIEhTUzcgSFNTNiBIU1M1IEhTUzQgSFNTMyBIU1MyIEhTUzEgSFNTMCAqLwotCTB4MDgsIDB4ODgsCS8qIFBINzExeF9TWU5DX0NPTlRST0wgLSBBVUZEIEZTRUwgRk9FVCBIVEMxIEhUQzAgSFBMTCBWTk9JMSBWTk9JMCAqLwotCTB4MDksIDB4MDAsCS8qIFBINzExeF9MVU1JTkFOQ0VfQ09OVFJPTCAtIEJZUFMgUFJFRiBCUFNTMSBCUFNTMCBWQkxCIFVQVENWIEFQRVIxIEFQRVIwICovCi0JMHgwYSwgMHg4MCwJLyogUEg3MTF4X0xVTUlOQU5DRV9CUklHSFRORVNTIC0gQlJJRzcgQlJJRzYgQlJJRzUgQlJJRzQgQlJJRzMgQlJJRzIgQlJJRzEgQlJJRzAgKi8KLQkweDBiLCAweDQ3LAkvKiBQSDcxMXhfTFVNSU5BTkNFX0NPTlRSQVNUIC0gQ09OVDcgQ09OVDYgQ09OVDUgQ09OVDQgQ09OVDMgQ09OVDIgQ09OVDEgQ09OVDAgKi8KLQkweDBjLCAweDQwLAkvKiBQSDcxMXhfQ0hST01BX1NBVFVSQVRJT04gLSBTQVRONyBTQVRONiBTQVRONSBTQVRONCBTQVROMyBTQVROMiBTQVROMSBTQVROMCAqLwotCTB4MGQsIDB4MDAsCS8qIFBINzExeF9DSFJPTUFfSFVFX0NPTlRST0wgLSBIVUVDNyBIVUVDNiBIVUVDNSBIVUVDNCBIVUVDMyBIVUVDMiBIVUVDMSBIVUVDMCAqLwotCTB4MGUsIDB4MDEsCS8qIFBINzExeF9DSFJPTUFfQ09OVFJPTCAtIENEVE8gQ1NURDIgQ1NURDEgQ1NURDAgRENDRiBGQ1RDIENIQlcxIENIQlcwICovCi0JMHgwZiwgMHhhYSwJLyogUEg3MTF4X0NIUk9NQV9HQUlOX0NPTlRST0wgLSBBQ0dDIENHQUlONiBDR0FJTjUgQ0dBSU40IENHQUlOMyBDR0FJTjIgQ0dBSU4xIENHQUlOMCAqLwotCTB4MTAsIDB4MDAsCS8qIFBINzExeF9GT1JNQVRfREVMQVlfQ09OVFJPTCAtIE9GVFMxIE9GVFMwIEhERUwxIEhERUwwIFZSTE4gWURFTDIgWURFTDEgWURFTDAgKi8KLQkweDExLCAweDFDLAkvKiBQSDcxMXhfT1VUUFVUX0NPTlRST0xfMSAtIEdQU1cxIENNOTkgR1BTVzAgSExTRUwgT0VZQyBPRVJUIFZJUEIgQ09MTyAqLwotCTB4MTIsIDB4MDEsCS8qIFBINzExeF9PVVRQVVRfQ09OVFJPTF8yIC0gUlRTRTEzIFJUU0UxMiBSVFNFMTEgUlRTRTEwIFJUU0UwMyBSVFNFMDIgUlRTRTAxIFJUU0UwMCAqLwotCTB4MTMsIDB4MDAsCS8qIFBINzExeF9PVVRQVVRfQ09OVFJPTF8zIC0gQURMU0IgKDEpICgxKSBPTERTQiBGSURQICgxKSBBT1NMMSBBT1NMMCAqLwotCTB4MTQsIDB4MDAsCS8qIFJFU0VSVkVEIDE0IC0gKDEpICgxKSAoMSkgKDEpICgxKSAoMSkgKDEpICgxKSAqLwotCTB4MTUsIDB4MDAsCS8qIFBINzExeF9WX0dBVEUxX1NUQVJUIC0gVlNUQTcgVlNUQTYgVlNUQTUgVlNUQTQgVlNUQTMgVlNUQTIgVlNUQTEgVlNUQTAgKi8KLQkweDE2LCAweDAwLAkvKiBQSDcxMXhfVl9HQVRFMV9TVE9QIC0gVlNUTzcgVlNUTzYgVlNUTzUgVlNUTzQgVlNUTzMgVlNUTzIgVlNUTzEgVlNUTzAgKi8KLQkweDE3LCAweDAwLAkvKiBQSDcxMXhfVl9HQVRFMV9NU0IgLSAoMSkgKDEpICgxKSAoMSkgKDEpICgxKSBWU1RPOCBWU1RBOCAqLwotfTsKLQotc3RhdGljIGludAotc2FhNzExeF9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCi17Ci0Jc3RydWN0IHNhYTcxMXggKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXN3aXRjaCAoY21kKSB7Ci0KLQljYXNlIDA6Ci0JY2FzZSBERUNPREVSX0lOSVQ6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0ID0gYXJnOwotCQlpZiAoTlVMTCAhPSBpbml0KQotCQkJcmV0dXJuIHNhYTcxMXhfaW5pdF9kZWNvZGVyKGNsaWVudCwgaW5pdCk7Ci0JCWVsc2UgewotCQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7Ci0JCQl2ZGkuZGF0YSA9IHNhYTcxMXhfaTJjX2luaXQ7Ci0JCQl2ZGkubGVuID0gc2l6ZW9mKHNhYTcxMXhfaTJjX2luaXQpOwotCQkJcmV0dXJuIHNhYTcxMXhfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7Ci0JCX0KLQl9Ci0KLQljYXNlIERFQ09ERVJfRFVNUDoKLQl7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSAxNikgewotCQkJaW50IGo7Ci0KLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJTAzeCIsIEkyQ19OQU1FKGNsaWVudCksIGkpOwotCQkJZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHsKLQkJCQlwcmludGsoIiAlMDJ4IiwKLQkJCQkgICAgICAgc2FhNzExeF9yZWFkKGNsaWVudCwgaSArIGopKTsKLQkJCX0KLQkJCXByaW50aygiXG4iKTsKLQkJfQotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19ERUNPREVSX1NFQ0FNIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9BVVRPIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwotCQljYXAtPmlucHV0cyA9IDg7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgc3RhdHVzOwotCQlpbnQgcmVzOwotCi0JCXN0YXR1cyA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4MWYpOwotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzIHN0YXR1czogMHglMDJ4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJc3RhdHVzKTsKLQkJcmVzID0gMDsKLQkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7Ci0JCX0KLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJaWYgKChzdGF0dXMgJiAoMSA8PCA1KSkgIT0gMCkgewotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJfSBlbHNlIHsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKChzdGF0dXMgJiAoMSA8PCAwKSkgIT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwotCQl9Ci0JCSppYXJnID0gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX0dQSU86Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWlmICgwICE9ICppYXJnKSB7Ci0JCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgxMSwKLQkJCQkoZGVjb2Rlci0+cmVnWzB4MTFdIHwgMHg4MCkpOwotCQl9IGVsc2UgewotCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MTEsCi0JCQkJKGRlY29kZXItPnJlZ1sweDExXSAmIDB4N2YpKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX1ZCSV9CWVBBU1M6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWlmICgwICE9ICppYXJnKSB7Ci0JCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgxMywKLQkJCQkoZGVjb2Rlci0+cmVnWzB4MTNdICYgMHhmMCkgfCAweDBhKTsKLQkJfSBlbHNlIHsKLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDEzLAotCQkJCShkZWNvZGVyLT5yZWdbMHgxM10gJiAweGYwKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweDNmKSB8IDB4NDApOwotCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGUsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDBlXSAmIDB4OGYpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDAwKTsKLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDAwKTsKLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSB8IDB4NTApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDgwKTsKLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJfQotCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiA5KSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gKmlhcmcpIHsKLQkJCWRlY29kZXItPmlucHV0ID0gKmlhcmc7Ci0JCQkvKiBzZWxlY3QgbW9kZSAqLwotCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MDIsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDAyXSAmIDB4ZjApIHwgZGVjb2Rlci0+aW5wdXQpOwotCQkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIG1vZGVzIDQuLjcgKi8KLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDA5LAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOV0gJiAweDdmKSB8ICgoZGVjb2Rlci0+aW5wdXQgPiAzKSA/IDB4ODAgOiAwKSk7Ci0JCX0KLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOwotCi0JCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gZW5hYmxlKSB7Ci0JCQlkZWNvZGVyLT5lbmFibGUgPSBlbmFibGU7Ci0KLQkJCS8qIFJKOiBJZiBvdXRwdXQgc2hvdWxkIGJlIGRpc2FibGVkIChmb3IKLQkJCSAqIHBsYXlpbmcgdmlkZW9zKSwgd2UgYWxzbyBuZWVkIGEgb3BlbiBQTEwuCi0JCQkgKiBUaGUgaW5wdXQgaXMgc2V0IHRvIDAgKHdoZXJlIG5vIGlucHV0Ci0JCQkgKiBzb3VyY2UgaXMgY29ubmVjdGVkKSwgYWx0aG91Z2ggdGhpcwotCQkJICogaXMgbm90IG5lY2Vzc2FyeS4KLQkJCSAqCi0JCQkgKiBJZiBvdXRwdXQgc2hvdWxkIGJlIGVuYWJsZWQsIHdlIGhhdmUgdG8KLQkJCSAqIHJldmVyc2UgdGhlIGFib3ZlLgotCQkJICovCi0KLQkJCWlmIChkZWNvZGVyLT5lbmFibGUpIHsKLQkJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwMiwKLQkJCQkJICAgICAgKGRlY29kZXItPgotCQkJCQkgICAgICAgcmVnWzB4MDJdICYgMHhmOCkgfAotCQkJCQkgICAgICBkZWNvZGVyLT5pbnB1dCk7Ci0JCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MDgsCi0JCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweGZiKSk7Ci0JCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MTEsCi0JCQkJCSAgICAgIChkZWNvZGVyLT4KLQkJCQkJICAgICAgIHJlZ1sweDExXSAmIDB4ZjMpIHwgMHgwYyk7Ci0JCQl9IGVsc2UgewotCQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDAyLAotCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDJdICYgMHhmOCkpOwotCQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCQkgICAgICAoZGVjb2Rlci0+Ci0JCQkJCSAgICAgICByZWdbMHgwOF0gJiAweGZiKSB8IDB4MDQpOwotCQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDExLAotCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MTFdICYgMHhmMykpOwotCQkJfQotCQl9Ci0JfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBhLCBkZWNvZGVyLT5icmlnaHQgPj4gOCk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBiLAotCQkJCSAgICAgIGRlY29kZXItPmNvbnRyYXN0ID4+IDkpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPnNhdCA9IHBpYy0+Y29sb3VyOwotCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGMsIGRlY29kZXItPnNhdCA+PiA5KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBkLAotCQkJCSAgICAgIChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gOCk7Ci0JCX0KLQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi0KLS8qIHN0YW5kYXJkIGkyYyBpbnNtb2Qgb3B0aW9ucyAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJMkNfU0FBNzExMz4+MSwgICAgICAgICAvKiBzYWE3MTEzICovCi0JSTJDX1NBQTcxMTQ+PjEsICAgICAgICAgLyogc2FhNzExNCAqLwotCUkyQ19DTElFTlRfRU5ECi19OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTF4OwotCi1zdGF0aWMgaW50Ci1zYWE3MTF4X2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBzYWE3MTF4ICpkZWNvZGVyOwotCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgdmRpOwotCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJInNhYTcxMXguYzogZGV0ZWN0aW5nIHNhYTcxMXggY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKLQotCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOwotCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xpZW50ID09IDApCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX3NhYTcxMXg7Ci0Jc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAic2FhNzExeCIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTF4KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQlkZWNvZGVyLT5pbnB1dCA9IDA7Ci0JZGVjb2Rlci0+ZW5hYmxlID0gMTsKLQlkZWNvZGVyLT5icmlnaHQgPSAzMjc2ODsKLQlkZWNvZGVyLT5jb250cmFzdCA9IDMyNzY4OwotCWRlY29kZXItPmh1ZSA9IDMyNzY4OwotCWRlY29kZXItPnNhdCA9IDMyNzY4OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwotCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQotCXZkaS5kYXRhID0gc2FhNzExeF9pMmNfaW5pdDsKLQl2ZGkubGVuID0gc2l6ZW9mKHNhYTcxMXhfaTJjX2luaXQpOwotCWkgPSBzYWE3MTF4X2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2ggZXJyb3I6IGluaXQgc3RhdHVzICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSk7Ci0JfSBlbHNlIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXNfYXR0YWNoOiBjaGlwIHZlcnNpb24gJXggYXQgYWRkcmVzcyAweCV4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc2FhNzExeF9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKLQkJCWNsaWVudC0+YWRkciA8PCAxKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotc2FhNzExeF9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTF4LmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTF4X2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTF4X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNhYTcxMXggKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTF4ID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInNhYTcxMXgiLAotCX0sCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMVgsCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzExeF9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxMXhfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxMXhfY29tbWFuZCwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1zYWE3MTF4X2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMXgpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXNhYTcxMXhfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTF4KTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzExeF9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxMXhfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCmluZGV4IDc5ZDExYTYuLmQwZTgzZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCkBAIC02NjYsNyArNjY2LDYgQEAKIHsKIAlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGU7CiAJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhIHZiaSA9IHsgMCwgMCwgMCwgMCB9OyAgLyogc2V0IHRvIGRpc2FibGVkICovCi0JaW50IHJlYWRfcmVzdWx0ID0gMDsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTcxMCwyMCArNzA5LDI5IEBACiAJCXNhYTcxMjdfc2V0X2lucHV0X3R5cGUoY2xpZW50LCBTQUE3MTI3X0lOUFVUX1RZUEVfTk9STUFMKTsKIAlzYWE3MTI3X3NldF92aWRlb19lbmFibGUoY2xpZW50LCAxKTsKIAotCS8qIERldGVjdCBpZiBpdCdzIGFuIHNhYTcxMjkgKi8KLQlyZWFkX3Jlc3VsdCA9IHNhYTcxMjdfcmVhZChjbGllbnQsIFNBQTcxMjlfUkVHX0ZBREVfS0VZX0NPTDIpOwotCXNhYTcxMjdfd3JpdGUoY2xpZW50LCBTQUE3MTI5X1JFR19GQURFX0tFWV9DT0wyLCAweGFhKTsKLQlpZiAoc2FhNzEyN19yZWFkKGNsaWVudCwgU0FBNzEyOV9SRUdfRkFERV9LRVlfQ09MMikgPT0gMHhhYSkgewotCQl2NGxfaW5mbyhjbGllbnQsICJzYWE3MTI5IGZvdW5kIEAgMHgleCAoJXMpXG4iLAotCQkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwotCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgU0FBNzEyOV9SRUdfRkFERV9LRVlfQ09MMiwgcmVhZF9yZXN1bHQpOwotCQlzYWE3MTI3X3dyaXRlX2luaXR0YWIoY2xpZW50LCBzYWE3MTI5X2luaXRfY29uZmlnX2V4dHJhKTsKLQkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTI5OwotCX0gZWxzZSB7Ci0JCXY0bF9pbmZvKGNsaWVudCwgInNhYTcxMjcgZm91bmQgQCAweCV4ICglcylcbiIsCi0JCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7Ci0JCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzEyNzsKKwlpZiAoaWQtPmRyaXZlcl9kYXRhKSB7CS8qIENoaXAgdHlwZSBpcyBhbHJlYWR5IGtub3duICovCisJCXN0YXRlLT5pZGVudCA9IGlkLT5kcml2ZXJfZGF0YTsKKwl9IGVsc2UgewkJLyogTmVlZHMgZGV0ZWN0aW9uICovCisJCWludCByZWFkX3Jlc3VsdDsKKworCQkvKiBEZXRlY3QgaWYgaXQncyBhbiBzYWE3MTI5ICovCisJCXJlYWRfcmVzdWx0ID0gc2FhNzEyN19yZWFkKGNsaWVudCwgU0FBNzEyOV9SRUdfRkFERV9LRVlfQ09MMik7CisJCXNhYTcxMjdfd3JpdGUoY2xpZW50LCBTQUE3MTI5X1JFR19GQURFX0tFWV9DT0wyLCAweGFhKTsKKwkJaWYgKHNhYTcxMjdfcmVhZChjbGllbnQsIFNBQTcxMjlfUkVHX0ZBREVfS0VZX0NPTDIpID09IDB4YWEpIHsKKwkJCXNhYTcxMjdfd3JpdGUoY2xpZW50LCBTQUE3MTI5X1JFR19GQURFX0tFWV9DT0wyLAorCQkJCQlyZWFkX3Jlc3VsdCk7CisJCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMjk7CisJCQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgInNhYTcxMjkiLCBJMkNfTkFNRV9TSVpFKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzEyNzsKKwkJCXN0cmxjcHkoY2xpZW50LT5uYW1lLCAic2FhNzEyNyIsIEkyQ19OQU1FX1NJWkUpOworCQl9CiAJfQorCisJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIGNsaWVudC0+bmFtZSwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTI5KQorCQlzYWE3MTI3X3dyaXRlX2luaXR0YWIoY2xpZW50LCBzYWE3MTI5X2luaXRfY29uZmlnX2V4dHJhKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQwLDcgKzc0OCwxMSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMjdfaWRbXSA9IHsKLQl7ICJzYWE3MTI3IiwgMCB9LAorCXsgInNhYTcxMjdfYXV0byIsIDAgfSwJLyogYXV0by1kZXRlY3Rpb24gKi8KKwl7ICJzYWE3MTI2IiwgVjRMMl9JREVOVF9TQUE3MTI3IH0sCisJeyAic2FhNzEyNyIsIFY0TDJfSURFTlRfU0FBNzEyNyB9LAorCXsgInNhYTcxMjgiLCBWNEwyX0lERU5UX1NBQTcxMjkgfSwKKwl7ICJzYWE3MTI5IiwgVjRMMl9JREVOVF9TQUE3MTI5IH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxMjdfaWQpOwpAQCAtNzUzLDQgKzc2NSwzIEBACiAJLnJlbW92ZSA9IHNhYTcxMjdfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHNhYTcxMjdfaWQsCiB9OwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKaW5kZXggMDAyZTcwYS4uNzA3YmUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogCi0KICNkZWZpbmUgTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggIDI3MDAwCiAjZGVmaW5lIE1QRUdfVklERU9fTUFYX0JJVFJBVEVfTUFYICAgICAyNzAwMAogI2RlZmluZSBNUEVHX1RPVEFMX1RBUkdFVF9CSVRSQVRFX01BWCAgMjcwMDAKQEAgLTIxLDYgKzIwLDcgQEAKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7MHgyMCwgSTJDX0NMSUVOVF9FTkR9OworCiBJMkNfQ0xJRU5UX0lOU01PRDsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJkZXZpY2UgZHJpdmVyIGZvciBzYWE2NzUyaHMgTVBFRzIgZW5jb2RlciIpOwpAQCAtNDQ4LDYgKzQ0OCwxMDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzYWE2NzUyaHNfcWN0cmwoc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAorCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQoreworCWludCBlcnI7CisKKwlzd2l0Y2ggKHFjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLAorCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SywKKwkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLLCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NkspOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCwgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yLAorCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIsIDEsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMik7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5LCAxLAorCQkJCVY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisJCWlmIChlcnIgPT0gMCAmJgorCQkgICAgcGFyYW1zLT52aV9iaXRyYXRlX21vZGUgPT0KKwkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUikKKwkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRTsKKwkJcmV0dXJuIGVycjsKKworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9UUywKKwkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMsIDEsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOgorCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOgorCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOgorCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUjoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3FtZW51KHN0cnVjdCBzYWE2NzUyaHNfbXBlZ19wYXJhbXMgKnBhcmFtcywKKwkJc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19sMl9iaXRyYXRlW10gPSB7CisJCSIiLAorCQkiIiwKKwkJIiIsCisJCSIiLAorCQkiIiwKKwkJIiIsCisJCSIiLAorCQkiIiwKKwkJIiIsCisJCSIiLAorCQkiIiwKKwkJIjI1NiBrYnBzIiwKKwkJIiIsCisJCSIzODQga2JwcyIsCisJCU5VTEwKKwl9OworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKKwlpbnQgZXJyOworCisJcWN0cmwuaWQgPSBxbWVudS0+aWQ7CisJZXJyID0gc2FhNjc1MmhzX3FjdHJsKHBhcmFtcywgJnFjdHJsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmIChxbWVudS0+aWQgPT0gVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFKQorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwKKwkJCQltcGVnX2F1ZGlvX2wyX2JpdHJhdGUpOworCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfbWVudShxbWVudSwgJnFjdHJsLAorCQkJdjRsMl9jdHJsX2dldF9tZW51KHFtZW51LT5pZCkpOworfQorCiBzdGF0aWMgaW50IHNhYTY3NTJoc19pbml0KHN0cnVjdCBpMmNfY2xpZW50KiBjbGllbnQpCiB7CiAJdW5zaWduZWQgY2hhciBidWZbOV0sIGJ1ZjJbNF07CkBAIC02MDksNyArNzA3LDYgQEAKIAlpMmNfYXR0YWNoX2NsaWVudCgmaC0+Y2xpZW50KTsKIAogCXY0bF9pbmZvKCZoLT5jbGllbnQsInNhYTY3NTJoczogY2hpcCBmb3VuZCBAIDB4JXhcbiIsIGFkZHI8PDEpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2Miw2ICs3NTksMTAgQEAKIAkJfQogCQloLT5wYXJhbXMgPSBwYXJhbXM7CiAJCWJyZWFrOworCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwkJcmV0dXJuIHNhYTY3NTJoc19xY3RybCgmaC0+cGFyYW1zLCBhcmcpOworCWNhc2UgVklESU9DX1FVRVJZTUVOVToKKwkJcmV0dXJuIHNhYTY3NTJoc19xbWVudSgmaC0+cGFyYW1zLCBhcmcpOwogCWNhc2UgVklESU9DX0dfRk1UOgogCXsKIAkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKaW5kZXggZjExOGRlNi4uOTkyOWQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwpAQCAtODAsNyArODAsNiBAQAogfSBzbmRfY2FyZF9zYWE3MTM0X3Q7CiAKIAotCiAvKgogICogUENNIHN0cnVjdHVyZQogICovCkBAIC0xMTIxLDYgKzExMjAsMyBAQAogbW9kdWxlX2V4aXQoc2FhNzEzNF9hbHNhX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiUmljYXJkbyBDZXJxdWVpcmEiKTsKLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IDI2MThjZmEuLjY4OTNmOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtMTI4Nyw2ICsxMjg3LDIyIEBACiAJCQkudm11eCA9IDgsCiAJCX19LAogCX0sCisJW1NBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMDNdID0geworCQkvKiBNYXNzaW1vIFBpY2Npb25pIDxkYWZhc3RpZGlvQGxpYmVyby5pdD4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkFWZXJNZWRpYSBNaW5pUENJIERWQi1UIEh5YnJpZCBNMTAzIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCSAubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkgLmlucHV0cyAgICAgICAgID0ge3sKKwkJCSAubmFtZSA9IG5hbWVfdHYsCisJCQkgLnZtdXggPSAxLAorCQkJIC5hbXV4ID0gVFYsCisJCQkgLnR2ICAgPSAxLAorCQkgfSB9LAorCX0sCiAJW1NBQTcxMzRfQk9BUkRfTk9WQUNfUFJJTUVUVjcxMzNdID0gewogCQkvKiB0b3NoaWlAbmV0YnNkLm9yZyAqLwogCQkubmFtZSAgICAgICAgICAgPSAiTm92YWwgUHJpbWUgVFYgNzEzMyIsCkBAIC0zNTAzLDYgKzM1MTksMzkgQEAKIAkJCS5hbXV4ID0gVFYsCiAJCQkuZ3BpbyA9IDB4MDIwMDAwMCwKIAkJfSwKKyAgICAgICB9LAorICAgICAgIFtTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfQU5BTE9HXSA9IHsKKwkgICAgICAgLm5hbWUgICAgICAgICAgID0gIkFTVVNUZUsgUDcxMzEgQW5hbG9nIiwKKwkgICAgICAgLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkgICAgICAgLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCSAgICAgICAucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkgICAgICAgLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkgICAgICAgLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkgICAgICAgLmdwaW9tYXNrICAgICAgID0gMSA8PCAyMSwKKwkgICAgICAgLmlucHV0cyAgICAgICAgID0ge3sKKwkJICAgICAgIC5uYW1lID0gbmFtZV90diwKKwkJICAgICAgIC52bXV4ID0gMSwKKwkJICAgICAgIC5hbXV4ID0gVFYsCisJCSAgICAgICAudHYgICA9IDEsCisJCSAgICAgICAuZ3BpbyA9IDB4MDAwMDAwMCwKKwkgICAgICAgfSwgeworCQkgICAgICAgLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkgICAgICAgLnZtdXggPSAzLAorCQkgICAgICAgLmFtdXggPSBMSU5FMiwKKwkgICAgICAgfSwgeworCQkgICAgICAgLm5hbWUgPSBuYW1lX2NvbXAyLAorCQkgICAgICAgLnZtdXggPSAwLAorCQkgICAgICAgLmFtdXggPSBMSU5FMiwKKwkgICAgICAgfSwgeworCQkgICAgICAgLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJICAgICAgIC52bXV4ID0gOCwKKwkJICAgICAgIC5hbXV4ID0gTElORTIsCisJICAgICAgIH0gfSwKKwkgICAgICAgLnJhZGlvID0geworCQkgICAgICAgLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkgICAgICAgLmFtdXggPSBUViwKKwkJICAgICAgIC5ncGlvID0gMHgwMjAwMDAwLAorCSAgICAgICB9LAogCX0sCiAJW1NBQTcxMzRfQk9BUkRfU0FCUkVOVF9UVl9QQ0IwNV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJTYWJyZW50IFBDTUNJQSBUVi1QQ0IwNSIsCkBAIC0zOTQwLDMyICszOTg5LDExMSBAQAogCVtTQUE3MTM0X0JPQVJEX0JFSE9MRF9NNl0gPSB7CiAJCS8qIElnb3IgS3V6bmV0c292IDxpZ2tAaWdrLnJ1PiAqLwogCQkvKiBBbmRyZXkgTWVsbmlrb2ZmIDx0ZW1ub3RhQGttdi5ydT4gKi8KLQkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIE02IC8gQmVob2xkVFYgTTYgRXh0cmEiLAorCQkvKiBCZWhvbGRlciBJbnRsLiBMdGQuIERtaXRyeSBCZWxpbW92IDxkLmJlbGltb3ZAZ21haWwuY29tPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgTTYiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKLQkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJLmlucHV0cyAgICAgICAgID0geyB7CiAJCQkubmFtZSA9IG5hbWVfdHYsCiAJCQkudm11eCA9IDMsCiAJCQkuYW11eCA9IFRWLAogCQkJLnR2ICAgPSAxLAotCQl9LHsKKwkJfSwgewogCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAogCQkJLnZtdXggPSAxLAogCQkJLmFtdXggPSBMSU5FMSwKLQkJfSx7CisJCX0sIHsKIAkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCiAJCQkudm11eCA9IDgsCiAJCQkuYW11eCA9IExJTkUxLAotCQl9fSwKKwkJfSB9LAogCQkucmFkaW8gPSB7CiAJCQkubmFtZSA9IG5hbWVfcmFkaW8sCiAJCQkuYW11eCA9IExJTkUyLAogCQl9LAogCQkubXBlZyAgPSBTQUE3MTM0X01QRUdfRU1QUkVTUywKKwkJLnZpZGVvX291dCA9IENDSVI2NTYsCisJCS52aWRfcG9ydF9vcHRzICA9IChTRVRfVF9DT0RFX1BPTEFSSVRZX05PTl9JTlZFUlRFRCB8CisJCQkJCVNFVF9DTE9DS19OT1RfREVMQVlFRCB8CisJCQkJCVNFVF9DTE9DS19JTlZFUlRFRCB8CisJCQkJCVNFVF9WU1lOQ19PRkYpLAorCX0sCisJW1NBQTcxMzRfQk9BUkRfQkVIT0xEX002M10gPSB7CisJCS8qIElnb3IgS3V6bmV0c292IDxpZ2tAaWdrLnJ1PiAqLworCQkvKiBBbmRyZXkgTWVsbmlrb2ZmIDx0ZW1ub3RhQGttdi5ydT4gKi8KKwkJLyogQmVob2xkZXIgSW50bC4gTHRkLiBEbWl0cnkgQmVsaW1vdiA8ZC5iZWxpbW92QGdtYWlsLmNvbT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIE02MyIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuaW5wdXRzICAgICAgICAgPSB7IHsKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUxLAorCQl9IH0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0sCisJCS5tcGVnICA9IFNBQTcxMzRfTVBFR19FTVBSRVNTLAorCQkudmlkZW9fb3V0ID0gQ0NJUjY1NiwKKwkJLnZpZF9wb3J0X29wdHMgID0gKFNFVF9UX0NPREVfUE9MQVJJVFlfTk9OX0lOVkVSVEVEIHwKKwkJCQkJU0VUX0NMT0NLX05PVF9ERUxBWUVEIHwKKwkJCQkJU0VUX0NMT0NLX0lOVkVSVEVEIHwKKwkJCQkJU0VUX1ZTWU5DX09GRiksCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9CRUhPTERfTTZfRVhUUkFdID0geworCQkvKiBJZ29yIEt1em5ldHNvdiA8aWdrQGlnay5ydT4gKi8KKwkJLyogQW5kcmV5IE1lbG5pa29mZiA8dGVtbm90YUBrbXYucnU+ICovCisJCS8qIEJlaG9sZGVyIEludGwuIEx0ZC4gRG1pdHJ5IEJlbGltb3YgPGQuYmVsaW1vdkBnbWFpbC5jb20+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViBNNiBFeHRyYSIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS8qIEZJWE1FOiBNdXN0IGJlIFBISUxJUFNfRk0xMjE2TUVfTUs1Ki8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5pbnB1dHMgICAgICAgICA9IHsgeworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBUViwKKwkJCS50diAgID0gMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSwKKwkJLm1wZWcgID0gU0FBNzEzNF9NUEVHX0VNUFJFU1MsCisJCS52aWRlb19vdXQgPSBDQ0lSNjU2LAorCQkudmlkX3BvcnRfb3B0cyAgPSAoU0VUX1RfQ09ERV9QT0xBUklUWV9OT05fSU5WRVJURUQgfAorCQkJCQlTRVRfQ0xPQ0tfTk9UX0RFTEFZRUQgfAorCQkJCQlTRVRfQ0xPQ0tfSU5WRVJURUQgfAorCQkJCQlTRVRfVlNZTkNfT0ZGKSwKIAl9LAogCVtTQUE3MTM0X0JPQVJEX1RXSU5IQU5fRFRWX0RWQl8zMDU2XSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlR3aW5oYW4gSHlicmlkIERUVi1EVkIgMzA1NiBQQ0kiLApAQCAtNDEyMSw5ICs0MjQ5LDkgQEAKIAkJCSAuYW11eCA9IFRWLAogCQkJIC50diAgID0gMSwKIAkJIH0sIHsKLQkJCSAubmFtZSA9IG5hbWVfY29tcDEsCi0JCQkgLnZtdXggPSAzLAotCQkJIC5hbXV4ID0gTElORTIsCisJCQkgLm5hbWUgPSBuYW1lX2NvbXAsCisJCQkgLnZtdXggPSAwLAorCQkJIC5hbXV4ID0gTElORTEsCiAJCSB9LCB7CiAJCQkgLm5hbWUgPSBuYW1lX3N2aWRlbywKIAkJCSAudm11eCA9IDgsCkBAIC00MTQxLDYgKzQyNjksNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCiAJCS5pbnB1dHMgICAgICAgICA9IHt7CiAJCQkubmFtZSA9IG5hbWVfdHYsCiAJCQkudm11eCA9IDEsCkBAIC00MTUwLDYgKzQyNzksMTAgQEAKIAkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCiAJCQkudm11eCA9IDgsCiAJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcCwKKwkJCS52bXV4ID0gMCwKKwkJCS5hbXV4ID0gTElORTEsCiAJCX0gfSwKIAkJLnJhZGlvID0gewogCQkJLm5hbWUgPSBuYW1lX3JhZGlvLApAQCAtNDE2Myw3ICs0Mjk2LDYgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAotCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX3R2LAogCQkJLnZtdXggPSAxLApAQCAtNTIyNiwxMyArNTM1OCwxMyBAQAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDVhY2UsCiAJCS5zdWJkZXZpY2UgICAgPSAweDYxOTMsCi0JCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9NNiwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQkVIT0xEX002X0VYVFJBLAogCX0sIHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAogCQkuc3VidmVuZG9yICAgID0gMHg1YWNlLAogCQkuc3ViZGV2aWNlICAgID0gMHg2MTkxLAotCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9CRUhPTERfTTYsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9NNjMsCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKQEAgLTUyODQsMTAgKzU0MTYsMjIgQEAKIAl9LCB7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4NTE2OSwKKwkJLnN1YmRldmljZSAgICA9IDB4MTUwMiwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9NSU5JLAorCX0sIHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAogCQkuc3VidmVuZG9yICAgID0gMHg1YWNlLAogCQkuc3ViZGV2aWNlICAgID0gMHg2MjkwLAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9CRUhPTERfSDYsCiAJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0NjEsIC8qIEF2ZXJtZWRpYSBUZWNobm9sb2dpZXMgSW5jICovCisJCS5zdWJkZXZpY2UgICAgPSAweGY2MzYsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTAzLAorCX0sIHsKIAkJLyogLS0tIGJvYXJkcyB3aXRob3V0IGVlcHJvbSArIHN1YnN5c3RlbSBJRCAtLS0gKi8KIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LApAQCAtNTM1Miw2ICs1NDk2LDcgQEAKIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDApOwogCQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAkJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9DQVJEQlVTXzUwNjoKKwkJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTAzOgogCQkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDIzLCAwKTsKIAkJCW1zbGVlcCgxMCk7CiAJCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjMsIDEpOwpAQCAtNTQ5Myw2ICs1NjM4LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVF9MUjMwMToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9EVUFMOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0hZQlJJRF9MTkE6CisgICAgICAgY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfQU5BTE9HOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJURFVPOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9QUk9URVVTXzIzMDk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTZBUjoKQEAgLTU1NjAsNiArNTcwNiw3IEBACiAJCW1zbGVlcCgxMCk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQ0FSREJVU181MDY6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTAzOgogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjMsIDApOwogCQltc2xlZXAoMTApOwogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjMsIDEpOwpAQCAtNTYwMSw2ICs1NzQ4LDggQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF82MDdfOUZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTY6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9NNjM6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9NNl9FWFRSQToKIAkJZGV2LT5oYXNfcmVtb3RlID0gU0FBNzEzNF9SRU1PVEVfSTJDOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNjlfQjoKQEAgLTU2ODMsNiArNTgzMiw3IEBACiAJCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCQljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkQ6CiAJCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQ0FSREJVU181MDY6CisJCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfTTEwMzoKIAkJCWN0bC5kZW1vZCA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC01ODI1LDYgKzU5NzUsMTUgQEAKIAkJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKIAkJYnJlYWs7CiAJfQorICAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RWRk03MTM1OgorICAgICAgIC8qIFRoZSBjYXJkIGJlbG93IGlzIGRldGVjdGVkIGFzIGNhcmQ9NTMsIGJ1dCBpcyBkaWZmZXJlbnQgKi8KKwkgICAgICAgaWYgKGRldi0+YXV0b2RldGVjdGVkICYmIChkZXYtPmVlZGF0YVsweDI3XSA9PSAweDAzKSkgeworCQkgICAgICAgZGV2LT5ib2FyZCA9IFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9BTkFMT0c7CisJCSAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUDcxMzEgYW5hbG9nIG9ubHksIHVzaW5nICIKKwkJCQkJCSAgICAgICAiZW50cnkgb2YgJXNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUpOworCSAgICAgICB9CisJICAgICAgIGJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMDoKIAkJaGF1cHBhdWdlX2VlcHJvbShkZXYsIGRldi0+ZWVkYXRhKzB4ODApOwogCQkvKiBicmVhayBpbnRlbnRpb25hbGx5IG9taXR0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCAyYzE5Y2QwLi5jZmVlODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC0xNTAsNyArMTUwLDYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpICYmIGRlZmluZWQoTU9EVUxFKQogCi0KIHN0YXRpYyB2b2lkIHJlcXVlc3RfbW9kdWxlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayl7CiAJc3RydWN0IHNhYTcxMzRfZGV2KiBkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNhYTcxMzRfZGV2LCByZXF1ZXN0X21vZHVsZV93ayk7CiAJaWYgKGNhcmRfaXNfZW1wcmVzcyhkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCAzNDFiMTAxLi5iZTQ4YjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtMTI2Myw2ICsxMjYzLDcgQEAKIAkJCQkJCSZhdmVybWVkaWFfeGMzMDI4X210MzUyX2RldiwKIAkJCQkJCSZkZXYtPmkyY19hZGFwKTsKIAkJYXR0YWNoX3hjMzAyOCA9IDE7CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9NRDcxMzRfQlJJREdFXzI6CiAJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsCiAJCQkJCQkmc2QxODc4XzRtLCAmZGV2LT5pMmNfYWRhcCk7CkBAIC0xMjkwLDYgKzEyOTEsMTUgQEAKIAkJCWZlLT5vcHMuZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2UgPSBtZDg4MDBfc2V0X2hpZ2hfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMDM6CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyNSwgMCk7CisJCW1zbGVlcCgxMCk7CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyNSwgMSk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCQkJCQkmYXZlcm1lZGlhX3hjMzAyOF9tdDM1Ml9kZXYsCisJCQkJCQkmZGV2LT5pMmNfYWRhcCk7CisJCWF0dGFjaF94YzMwMjggPSAxOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl3cHJpbnRrKCJIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKaW5kZXggM2FlNzFhMy4uMmE1YWI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZW1wcmVzc19lbnVtX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCBlbXByZXNzX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQogewogCWlmIChmLT5pbmRleCAhPSAwKQpAQCAtMjIwLDcgKzIyMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZW1wcmVzc19nX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IGVtcHJlc3NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0yMzMsNyArMjMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlbXByZXNzX3NfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgZW1wcmVzc19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTI5NCwxMCArMjk0LDIwIEBACiAJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmZGV2LT5lbXByZXNzX3RzcSk7CiB9CiAKK3N0YXRpYyBpbnQgc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJaWYgKGRldi0+bXBlZ19pMmNfY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBkZXYtPm1wZWdfaTJjX2NsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGRldi0+bXBlZ19pMmNfY2xpZW50LAorCQkJCQkJCQljbWQsIGFyZyk7Cit9CisKIHN0YXRpYyBpbnQgZW1wcmVzc19zX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CiAKIAkvKiBjb3VudCA9PSAwIGlzIGFidXNlZCBpbiBzYWE2NzUyaHMuYywgc28gdGhhdCBzcGVjaWFsCiAJCWNhc2UgaXMgaGFuZGxlZCBoZXJlIGV4cGxpY2l0bHkuICovCkBAIC0zMDcsMTAgKzMxNywxMCBAQAogCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19FWFRfQ1RSTFMsIGN0cmxzKTsKKwllcnIgPSBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfU19FWFRfQ1RSTFMsIGN0cmxzKTsKIAl0c19pbml0X2VuY29kZXIoZGV2KTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgZW1wcmVzc19nX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTMyMCw5ICszMzAsNjIgQEAKIAogCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0dfRVhUX0NUUkxTLCBjdHJscyk7CisJcmV0dXJuIHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihkZXYsIFZJRElPQ19HX0VYVF9DVFJMUywgY3RybHMpOworfQogCi0JcmV0dXJuIDA7CitzdGF0aWMgaW50IGVtcHJlc3NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMpCit7CisJc3RhdGljIGNvbnN0IHUzMiB1c2VyX2N0cmxzW10gPSB7CisJCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCisJCVY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCVY0TDJfQ0lEX0NPTlRSQVNULAorCQlWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQlWNEwyX0NJRF9IVUUsCisJCVY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKKwkJVjRMMl9DSURfQVVESU9fTVVURSwKKwkJVjRMMl9DSURfSEZMSVAsCisJCTAKKwl9OworCisJc3RhdGljIGNvbnN0IHUzMiBtcGVnX2N0cmxzW10gPSB7CisJCVY0TDJfQ0lEX01QRUdfQ0xBU1MsCisJCVY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEUsCisJCVY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUSwKKwkJVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORywKKwkJVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFLAorCQlWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HLAorCQlWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVCwKKwkJVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREUsCisJCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURSwKKwkJVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUssCisJCTAKKwl9OworCXN0YXRpYyBjb25zdCB1MzIgKmN0cmxfY2xhc3Nlc1tdID0geworCQl1c2VyX2N0cmxzLAorCQltcGVnX2N0cmxzLAorCQlOVUxMCisJfTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWMtPmlkID0gdjRsMl9jdHJsX25leHQoY3RybF9jbGFzc2VzLCBjLT5pZCk7CisJaWYgKGMtPmlkID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjLT5pZCA9PSBWNEwyX0NJRF9VU0VSX0NMQVNTIHx8IGMtPmlkID09IFY0TDJfQ0lEX01QRUdfQ0xBU1MpCisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQoYyk7CisJaWYgKFY0TDJfQ1RSTF9JRDJDTEFTUyhjLT5pZCkgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCisJCXJldHVybiBzYWE3MTM0X3F1ZXJ5Y3RybChmaWxlLCBwcml2LCBjKTsKKwlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX1FVRVJZQ1RSTCwgYyk7Cit9CisKK3N0YXRpYyBpbnQgZW1wcmVzc19xdWVyeW1lbnUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqYykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChWNEwyX0NUUkxfSUQyQ0xBU1MoYy0+aWQpICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX1FVRVJZTUVOVSwgYyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzX2ZvcHMgPQpAQCAtMzQ4LDkgKzQxMSw5IEBACiAJLm1pbm9yCSAgICAgICA9IC0xLAogCiAJLnZpZGlvY19xdWVyeWNhcAkJPSBlbXByZXNzX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZW51bV9mbXRfY2FwCQk9IGVtcHJlc3NfZW51bV9mbXRfY2FwLAotCS52aWRpb2Nfc19mbXRfY2FwCQk9IGVtcHJlc3Nfc19mbXRfY2FwLAotCS52aWRpb2NfZ19mbXRfY2FwCQk9IGVtcHJlc3NfZ19mbXRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9IGVtcHJlc3NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAJCT0gZW1wcmVzc19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSBlbXByZXNzX2dfZm10X3ZpZF9jYXAsCiAJLnZpZGlvY19yZXFidWZzCQkJPSBlbXByZXNzX3JlcWJ1ZnMsCiAJLnZpZGlvY19xdWVyeWJ1ZgkJPSBlbXByZXNzX3F1ZXJ5YnVmLAogCS52aWRpb2NfcWJ1ZgkJCT0gZW1wcmVzc19xYnVmLApAQCAtMzYzLDcgKzQyNiw4IEBACiAJLnZpZGlvY19nX2lucHV0CQkJPSBlbXByZXNzX2dfaW5wdXQsCiAJLnZpZGlvY19zX2lucHV0CQkJPSBlbXByZXNzX3NfaW5wdXQsCiAKLQkudmlkaW9jX3F1ZXJ5Y3RybAkJPSBzYWE3MTM0X3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3F1ZXJ5Y3RybAkJPSBlbXByZXNzX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3F1ZXJ5bWVudQkJPSBlbXByZXNzX3F1ZXJ5bWVudSwKIAkudmlkaW9jX2dfY3RybAkJCT0gc2FhNzEzNF9nX2N0cmwsCiAJLnZpZGlvY19zX2N0cmwJCQk9IHNhYTcxMzRfc19jdHJsLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jCmluZGV4IGQ4YWYzODYuLjVmNzEzZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jCkBAIC0zMjcsNiArMzI3LDggQEAKIAogCWQxcHJpbnRrKCAiJXMgaTJjIGF0dGFjaCBbYWRkcj0weCV4LGNsaWVudD0lc11cbiIsCiAJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgY2xpZW50LT5hZGRyLCBjbGllbnQtPm5hbWUpOworCWlmIChjbGllbnQtPmFkZHIgPT0gMHgyMCAmJiBjbGllbnQtPmRyaXZlciAmJiBjbGllbnQtPmRyaXZlci0+Y29tbWFuZCkKKwkJZGV2LT5tcGVnX2kyY19jbGllbnQgPSBjbGllbnQ7CiAKIAkvKiBBbSBJIGFuIGkyYyByZW1vdGUgY29udHJvbD8gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggNzZlNjUwMS4uYWQwOGQxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0xOTgsNiArMTk4LDg0IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qIENvbW1vbiAoZ3JleSBvciBjb2xvdXJlZCkgcGlubmFjbGUgUENUViByZW1vdGUgaGFuZGxpbmcKKyAqCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2tleV9waW5uYWNsZShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3LAorCQkJICAgIGludCBwYXJpdHlfb2Zmc2V0LCBpbnQgbWFya2VyLCBpbnQgY29kZV9tb2R1bG8pCit7CisJdW5zaWduZWQgY2hhciBiWzRdOworCXVuc2lnbmVkIGludCBzdGFydCA9IDAscGFyaXR5ID0gMCxjb2RlID0gMDsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCWlmICg0ICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsIGIsIDQpKSB7CisJCWkyY2RwcmludGsoInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBBUlJBWV9TSVpFKGIpOyBzdGFydCsrKSB7CisJCWlmIChiW3N0YXJ0XSA9PSBtYXJrZXIpIHsKKwkJCWNvZGU9Ylsoc3RhcnQrcGFyaXR5X29mZnNldCArIDEpICUgNF07CisJCQlwYXJpdHk9Ylsoc3RhcnQrcGFyaXR5X29mZnNldCkgJSA0XTsKKwkJfQorCX0KKworCS8qIEVtcHR5IFJlcXVlc3QgKi8KKwlpZiAocGFyaXR5ID09IDApCisJCXJldHVybiAwOworCisJLyogUmVwZWF0aW5nLi4uICovCisJaWYgKGlyLT5vbGQgPT0gcGFyaXR5KQorCQlyZXR1cm4gMDsKKworCWlyLT5vbGQgPSBwYXJpdHk7CisKKwkvKiBkcm9wIHNwZWNpYWwgY29kZXMgd2hlbiBhIGtleSBpcyBoZWxkIGRvd24gYSBsb25nIHRpbWUgZm9yIHRoZSBncmV5IGNvbnRyb2xsZXIKKwkgICBJbiB0aGlzIGNhc2UsIHRoZSBzZWNvbmQgYml0IG9mIHRoZSBjb2RlIGlzIGFzc2VydGVkICovCisJaWYgKG1hcmtlciA9PSAweGZlICYmIChjb2RlICYgMHg0MCkpCisJCXJldHVybiAwOworCisJY29kZSAlPSBjb2RlX21vZHVsbzsKKworCSppcl9yYXcgPSBjb2RlOworCSppcl9rZXkgPSBjb2RlOworCisJaTJjZHByaW50aygiUGlubmFjbGUgUENUViBrZXkgJTAyeFxuIiwgY29kZSk7CisKKwlyZXR1cm4gMTsKK30KKworLyogVGhlIGdyZXkgcGlubmFjbGUgUENUViByZW1vdGUKKyAqCisgKiAgVGhlcmUgYXJlIG9uZSBpc3N1ZSB3aXRoIHRoaXMgcmVtb3RlOgorICogICAtIEkyYyBwYWNrZXQgZG9lcyBub3QgY2hhbmdlIHdoZW4gdGhlIHNhbWUga2V5IGlzIHByZXNzZWQgcXVpY2tseS4gVGhlIHdvcmthcm91bmQKKyAqICAgICBpcyB0byBob2xkIGRvd24gZWFjaCBrZXkgZm9yIGFib3V0IGhhbGYgYSBzZWNvbmQsIHNvIHRoYXQgYW5vdGhlciBjb2RlIGlzIGdlbmVyYXRlZAorICogICAgIGluIHRoZSBpMmMgcGFja2V0LCBhbmQgdGhlIGZ1bmN0aW9uIGNhbiBkaXN0aW5ndWlzaCBrZXkgcHJlc3Nlcy4KKyAqCisgKiBTeWx2YWluIFBhc2NoZSA8c3lsdmFpbi5wYXNjaGVAZ21haWwuY29tPgorICovCitzdGF0aWMgaW50IGdldF9rZXlfcGlubmFjbGVfZ3JleShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQoreworCisJcmV0dXJuIGdldF9rZXlfcGlubmFjbGUoaXIsIGlyX2tleSwgaXJfcmF3LCAxLCAweGZlLCAweGZmKTsKK30KKworCisvKiBUaGUgbmV3IHBpbm5hY2xlIFBDVFYgcmVtb3RlICh3aXRoIHRoZSBjb2xvcmVkIGJ1dHRvbnMpCisgKgorICogUmljYXJkbyBDZXJxdWVpcmEgPHY0bEBjZXJxdWVpcmEub3JnPgorICovCitzdGF0aWMgaW50IGdldF9rZXlfcGlubmFjbGVfY29sb3Ioc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3sKKwkvKiBjb2RlX21vZHVsbyBwYXJhbWV0ZXIgKDB4ODgpIGlzIHVzZWQgdG8gcmVkdWNlIGNvZGUgdmFsdWUgdG8gZml0IGluc2lkZSBJUl9LRVlUQUJfU0laRQorCSAqCisJICogdGhpcyBpcyB0aGUgb25seSB2YWx1ZSB0aGF0IHJlc3VsdHMgaW4gNDIgdW5pcXVlCisJICogY29kZXMgPCAxMjgKKwkgKi8KKworCXJldHVybiBnZXRfa2V5X3Bpbm5hY2xlKGlyLCBpcl9rZXksIGlyX3JhdywgMiwgMHg4MCwgMHg4OCk7Cit9CisKIHZvaWQgc2FhNzEzNF9pbnB1dF9pcnEoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGNhcmRfaXIgKmlyID0gZGV2LT5yZW1vdGU7CkBAIC00MDksNiArNDg3LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9IWUJSSURfTE5BOgorICAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0FOQUxPRzoKIAkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfYXN1c19wYzM5OwogCQltYXNrX2tleWRvd24gPSAweDAwNDAwMDA7CiAJCXJjNV9ncGlvID0gMTsKQEAgLTU0MCw2ICs2MTksOCBAQAogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzYwN185Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9NNjoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX002MzoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX002X0VYVFJBOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfSDY6CiAJCXNucHJpbnRmKGlyLT5jLm5hbWUsIHNpemVvZihpci0+Yy5uYW1lKSwgIkJlaG9sZFRWIik7CiAJCWlyLT5nZXRfa2V5ICAgPSBnZXRfa2V5X2JlaG9sZG02eHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXJlZy5oCmluZGV4IDg2ZjVlZWYuLmNmODlkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXJlZy5oCkBAIC0zNjgsNiArMzY4LDcgQEAKICNkZWZpbmUgU0FBNzEzNV9EU1BfUldDTEVBUgkJCTB4NTg2CiAjZGVmaW5lIFNBQTcxMzVfRFNQX1JXQ0xFQVJfUkVSUgkJICAgIDEKIAorI2RlZmluZSBTQUE3MTMzX0kyU19BVURJT19DT05UUk9MICAgICAgICAgICAgICAgMHg1OTEKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYwppbmRleCAyMzJhZjU5Li5jNWQwYjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jCkBAIC00NzcsNyArNDc3LDYgQEAKIAl1bnNpZ25lZCBpbnQgaSwgYXVkaW8sIG5zY2FuOwogCWludCBtYXgxLG1heDIsY2FycmllcixyeCxtb2RlLGxhc3Rtb2RlLGRlZmF1bHRfY2FycmllcjsKIAotCiAJc2V0X2ZyZWV6YWJsZSgpOwogCiAJZm9yICg7OykgewpAQCAtNzc1LDcgKzc3NCw2IEBACiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBkYXRhOwogCXUzMiB2YWx1ZSwgbm9ybXM7CiAKLQogCXNldF9mcmVlemFibGUoKTsKIAlmb3IgKDs7KSB7CiAJCXR2YXVkaW9fc2xlZXAoZGV2LC0xKTsKQEAgLTg3MywxMyArODcxLDM0IEBACiAKIAlpZiAoIWNhcmRfaXNfZW1wcmVzcyhkZXYpKQogCQlyZXR1cm47Ci0JaTJzX2Zvcm1hdCA9IChkZXYtPmlucHV0LT5hbXV4ID09IFRWKSA/IDB4MDAgOiAweDAxOwogCi0JLyogZW5hYmxlIEkyUyBhdWRpbyBvdXRwdXQgZm9yIHRoZSBtcGVnIGVuY29kZXIgKi8KLQlzYWFfd3JpdGViKFNBQTcxMzRfSTJTX09VVFBVVF9TRUxFQ1QsICAweDgwKTsKLQlzYWFfd3JpdGViKFNBQTcxMzRfSTJTX09VVFBVVF9GT1JNQVQsICBpMnNfZm9ybWF0KTsKLQlzYWFfd3JpdGViKFNBQTcxMzRfSTJTX09VVFBVVF9MRVZFTCwgICAweDBGKTsKLQlzYWFfd3JpdGViKFNBQTcxMzRfSTJTX0FVRElPX09VVFBVVCwgICAweDAxKTsKKwlpZiAoZGV2LT5wY2ktPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCkKKwkJcmV0dXJuOworCisJLyogY29uZmlndXJlIEdQSU8gZm9yIG91dCAqLworCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgMHgwRTAwMDAwMCwgMHgwMDAwMDAwMCk7CisKKwlzd2l0Y2ggKGRldi0+cGNpLT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzOgorCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzU6CisJICAgIC8qIFNldCBJMlMgZm9ybWF0IChTT05ZKSDCoCovCisJICAgIHNhYV93cml0ZWIoU0FBNzEzM19JMlNfQVVESU9fQ09OVFJPTCwgMHgwMCk7CisJICAgIC8qIFN0YXJ0IEkyUyAqLworCSAgICBzYWFfd3JpdGViKFNBQTcxMzRfSTJTX0FVRElPX09VVFBVVCwgMHgxMSk7CisJICAgIGJyZWFrOworCisJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNDoKKwkgICAgaTJzX2Zvcm1hdCA9IChkZXYtPmlucHV0LT5hbXV4ID09IFRWKSA/IDB4MDAgOiAweDAxOworCisJICAgIC8qIGVuYWJsZSBJMlMgYXVkaW8gb3V0cHV0IGZvciB0aGUgbXBlZyBlbmNvZGVyICovCisJICAgIHNhYV93cml0ZWIoU0FBNzEzNF9JMlNfT1VUUFVUX1NFTEVDVCwgMHg4MCk7CisJICAgIHNhYV93cml0ZWIoU0FBNzEzNF9JMlNfT1VUUFVUX0ZPUk1BVCwgaTJzX2Zvcm1hdCk7CisJICAgIHNhYV93cml0ZWIoU0FBNzEzNF9JMlNfT1VUUFVUX0xFVkVMLCAgMHgwRik7CisJICAgIHNhYV93cml0ZWIoU0FBNzEzNF9JMlNfQVVESU9fT1VUUFVULCAgMHgwMSk7CisKKwlkZWZhdWx0OgorCSAgICBicmVhazsKKwl9CiB9CiAKIGludCBzYWE3MTM0X3R2YXVkaW9fcngybW9kZSh1MzIgcngpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwppbmRleCA0OGUxYTAxLi4xYTUxMzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKQEAgLTE0OTYsNyArMTQ5Niw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTcxMzRfdHJ5X2dldF9zZXRfZm10X3ZiaShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgc2FhNzEzNF90cnlfZ2V0X3NldF9mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9maCAqZmggPSBwcml2OwpAQCAtMTUxNiw3ICsxNTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTM0X2dfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgc2FhNzEzNF9nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9maCAqZmggPSBwcml2OwpAQCAtMTUzMiw3ICsxNTMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTM0X2dfZm10X292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHNhYTcxMzRfZ19mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IHByaXY7CkBAIC0xNTQ2LDcgKzE1NDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMzRfdHJ5X2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHNhYTcxMzRfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IHByaXY7CkBAIC0xNTk3LDcgKzE1OTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMzRfdHJ5X2ZtdF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCBzYWE3MTM0X3RyeV9mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHNhYTcxMzRfZmggKmZoID0gcHJpdjsKQEAgLTE2MTEsMTMgKzE2MTEsMTMgQEAKIAlyZXR1cm4gdmVyaWZ5X3ByZXZpZXcoZGV2LCAmZi0+Zm10Lndpbik7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzEzNF9zX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHNhYTcxMzRfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IHByaXY7CiAJaW50IGVycjsKIAotCWVyciA9IHNhYTcxMzRfdHJ5X2ZtdF9jYXAoZmlsZSwgcHJpdiwgZik7CisJZXJyID0gc2FhNzEzNF90cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7CiAJaWYgKDAgIT0gZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xNjI4LDcgKzE2MjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMzRfc19mbXRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgc2FhNzEzNF9zX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IHByaXY7CkBAIC0yMDI4LDcgKzIwMjgsNyBAQAogCXJldHVybiB2NGwyX3ByaW9fY2hhbmdlKCZkZXYtPnByaW8sICZmaC0+cHJpbywgcHJpbyk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzEzNF9lbnVtX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCBzYWE3MTM0X2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQogewogCWlmIChmLT5pbmRleCA+PSBGT1JNQVRTKQpAQCAtMjA0Miw3ICsyMDQyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTM0X2VudW1fZm10X292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCBzYWE3MTM0X2VudW1fZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKIAlpZiAoc2FhNzEzNF9ub19vdmVybGF5ID4gMCkgewpAQCAtMjA2MSw3ICsyMDYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTM0X2VudW1fZm10X3ZiaShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCitzdGF0aWMgaW50IHNhYTcxMzRfZW51bV9mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7CiAJaWYgKDAgIT0gZi0+aW5kZXgpCkBAIC0yMjA4LDYgKzIyMDgsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgdmlkaW9jX2dfcmVnaXN0ZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9maCAqZmggPSBwcml2OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2hvc3QocmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZWctPnZhbCA9IHNhYV9yZWFkYihyZWctPnJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfcmVnaXN0ZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IHNhYTcxMzRfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KHJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2FhX3dyaXRlYihyZWctPnJlZyYweGZmZmZmZiwgcmVnLT52YWwpOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgcmFkaW9fcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKQEAgLTIzNDgsMTggKzIzNzQsMTggQEAKIAkuZm9wcwkJCQk9ICZ2aWRlb19mb3BzLAogCS5taW5vcgkJCQk9IC0xLAogCS52aWRpb2NfcXVlcnljYXAJCT0gc2FhNzEzNF9xdWVyeWNhcCwKLQkudmlkaW9jX2VudW1fZm10X2NhcAkJPSBzYWE3MTM0X2VudW1fZm10X2NhcCwKLQkudmlkaW9jX2dfZm10X2NhcAkJPSBzYWE3MTM0X2dfZm10X2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfY2FwCQk9IHNhYTcxMzRfdHJ5X2ZtdF9jYXAsCi0JLnZpZGlvY19zX2ZtdF9jYXAJCT0gc2FhNzEzNF9zX2ZtdF9jYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF9vdmVybGF5CT0gc2FhNzEzNF9lbnVtX2ZtdF9vdmVybGF5LAotCS52aWRpb2NfZ19mbXRfb3ZlcmxheQkJPSBzYWE3MTM0X2dfZm10X292ZXJsYXksCi0JLnZpZGlvY190cnlfZm10X292ZXJsYXkJCT0gc2FhNzEzNF90cnlfZm10X292ZXJsYXksCi0JLnZpZGlvY19zX2ZtdF9vdmVybGF5CQk9IHNhYTcxMzRfc19mbXRfb3ZlcmxheSwKLQkudmlkaW9jX2VudW1fZm10X3ZiaQkJPSBzYWE3MTM0X2VudW1fZm10X3ZiaSwKLQkudmlkaW9jX2dfZm10X3ZiaQkJPSBzYWE3MTM0X3RyeV9nZXRfc2V0X2ZtdF92YmksCi0JLnZpZGlvY190cnlfZm10X3ZiaQkJPSBzYWE3MTM0X3RyeV9nZXRfc2V0X2ZtdF92YmksCi0JLnZpZGlvY19zX2ZtdF92YmkJCT0gc2FhNzEzNF90cnlfZ2V0X3NldF9mbXRfdmJpLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9IHNhYTcxMzRfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJCT0gc2FhNzEzNF9nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCQk9IHNhYTcxMzRfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcAkJPSBzYWE3MTM0X3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3ZlcmxheQk9IHNhYTcxMzRfZW51bV9mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY19nX2ZtdF92aWRfb3ZlcmxheQk9IHNhYTcxMzRfZ19mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5CT0gc2FhNzEzNF90cnlfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2Nfc19mbXRfdmlkX292ZXJsYXkJPSBzYWE3MTM0X3NfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfZW51bV9mbXRfdmJpX2NhcAk9IHNhYTcxMzRfZW51bV9mbXRfdmJpX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZiaV9jYXAJCT0gc2FhNzEzNF90cnlfZ2V0X3NldF9mbXRfdmJpX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmJpX2NhcAkJPSBzYWE3MTM0X3RyeV9nZXRfc2V0X2ZtdF92YmlfY2FwLAorCS52aWRpb2Nfc19mbXRfdmJpX2NhcAkJPSBzYWE3MTM0X3RyeV9nZXRfc2V0X2ZtdF92YmlfY2FwLAogCS52aWRpb2NfZ19hdWRpbwkJCT0gc2FhNzEzNF9nX2F1ZGlvLAogCS52aWRpb2Nfc19hdWRpbwkJCT0gc2FhNzEzNF9zX2F1ZGlvLAogCS52aWRpb2NfY3JvcGNhcAkJCT0gc2FhNzEzNF9jcm9wY2FwLApAQCAtMjM5MSw2ICsyNDE3LDEwIEBACiAJLnZpZGlvY19nX3Bhcm0JCQk9IHNhYTcxMzRfZ19wYXJtLAogCS52aWRpb2NfZ19mcmVxdWVuY3kJCT0gc2FhNzEzNF9nX2ZyZXF1ZW5jeSwKIAkudmlkaW9jX3NfZnJlcXVlbmN5CQk9IHNhYTcxMzRfc19mcmVxdWVuY3ksCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciAgICAgICAgICAgICAgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgICAgICAgICAgICAgID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKIAkudHZub3JtcwkJCT0gU0FBNzEzNF9OT1JNUywKIAkuY3VycmVudF9ub3JtCQkJPSBWNEwyX1NURF9QQUwsCiB9OwpAQCAtMjQ1OCwxMyArMjQ4OCwxNCBAQAogCWludCB2byA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnZpZGVvX291dDsKIAlpbnQgdmlkZW9fcmVnOwogCXVuc2lnbmVkIGludCB2aWRfcG9ydF9vcHRzID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udmlkX3BvcnRfb3B0czsKKworCS8qIENvbmZpZ3VyZSB2aWRlb3BvcnQgKi8KIAlzYWFfd3JpdGViKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMMCwgdmlkZW9fb3V0W3ZvXVswXSk7CiAJdmlkZW9fcmVnID0gdmlkZW9fb3V0W3ZvXVsxXTsKIAlpZiAodmlkX3BvcnRfb3B0cyAmIFNFVF9UX0NPREVfUE9MQVJJVFlfTk9OX0lOVkVSVEVEKQogCQl2aWRlb19yZWcgJj0gflZQX1RfQ09ERV9QX0lOVkVSVEVEOwogCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkwxLCB2aWRlb19yZWcpOwogCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkwyLCB2aWRlb19vdXRbdm9dWzJdKTsKLQlzYWFfd3JpdGViKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMMywgdmlkZW9fb3V0W3ZvXVszXSk7CiAJc2FhX3dyaXRlYihTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDQsIHZpZGVvX291dFt2b11bNF0pOwogCXZpZGVvX3JlZyA9IHZpZGVvX291dFt2b11bNV07CiAJaWYgKHZpZF9wb3J0X29wdHMgJiBTRVRfQ0xPQ0tfTk9UX0RFTEFZRUQpCkBAIC0yNDgxLDYgKzI1MTIsOSBAQAogCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkw3LCB2aWRlb19vdXRbdm9dWzddKTsKIAlzYWFfd3JpdGViKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMOCwgdmlkZW9fb3V0W3ZvXVs4XSk7CiAKKwkvKiBTdGFydCB2aWRlb3BvcnQgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMMywgdmlkZW9fb3V0W3ZvXVszXSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggMzRmZjBkNDkuLjY5MjdjYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMjY0LDcgKzI2NCwxMCBAQAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BNzAwX1BSTyAgICAxNDAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTcwMF9IWUJSSUQgMTQxCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEX0g2ICAgICAgMTQyCi0KKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTYzICAgICAgMTQzCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEX002X0VYVFJBICAgIDE0NAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTAzICAgIDE0NQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfQU5BTE9HIDE0NgogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDgKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApAQCAtNTUyLDYgKzU1NSw3IEBACiAJc3RydWN0IHNhYTcxMzRfdHMgICAgICAgICAgdHM7CiAJc3RydWN0IHNhYTcxMzRfZG1hcXVldWUgICAgdHNfcTsKIAlzdHJ1Y3Qgc2FhNzEzNF9tcGVnX29wcyAgICAqbW9wczsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAJICAgKm1wZWdfaTJjX2NsaWVudDsKIAogCS8qIFNBQTcxMzRfTVBFR19FTVBSRVNTIG9ubHkgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAgICAgICAqZW1wcmVzc19kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyMDA1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtMCwwICsxLDY1NyBAQAorLyoKKyAqIFY0TDIgRHJpdmVyIGZvciBTdXBlckggTW9iaWxlIENFVSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFnbnVzIERhbW0KKyAqCisgKiBCYXNlZCBvbiBWNEwyIERyaXZlciBmb3IgUFhBIGNhbWVyYSBob3N0IC0gInB4YV9jYW1lcmEuYyIsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4KKworLyogcmVnaXN0ZXIgb2Zmc2V0cyBmb3Igc2g3NzIyIC8gc2g3NzIzICovCisKKyNkZWZpbmUgQ0FQU1IgIDB4MDAKKyNkZWZpbmUgQ0FQQ1IgIDB4MDQKKyNkZWZpbmUgQ0FNQ1IgIDB4MDgKKyNkZWZpbmUgQ01DWVIgIDB4MGMKKyNkZWZpbmUgQ0FNT1IgIDB4MTAKKyNkZWZpbmUgQ0FQV1IgIDB4MTQKKyNkZWZpbmUgQ0FJRlIgIDB4MTgKKyNkZWZpbmUgQ1NUQ1IgIDB4MjAgLyogbm90IG9uIHNoNzcyMyAqLworI2RlZmluZSBDU0VDUiAgMHgyNCAvKiBub3Qgb24gc2g3NzIzICovCisjZGVmaW5lIENSQ05UUiAweDI4CisjZGVmaW5lIENSQ01QUiAweDJjCisjZGVmaW5lIENGTENSICAweDMwCisjZGVmaW5lIENGU1pSICAweDM0CisjZGVmaW5lIENEV0RSICAweDM4CisjZGVmaW5lIENEQVlSICAweDNjCisjZGVmaW5lIENEQUNSICAweDQwCisjZGVmaW5lIENEQllSICAweDQ0CisjZGVmaW5lIENEQkNSICAweDQ4CisjZGVmaW5lIENCRFNSICAweDRjCisjZGVmaW5lIENGV0NSICAweDVjCisjZGVmaW5lIENMRkNSICAweDYwCisjZGVmaW5lIENET0NSICAweDY0CisjZGVmaW5lIENERENSICAweDY4CisjZGVmaW5lIENEREFSICAweDZjCisjZGVmaW5lIENFSUVSICAweDcwCisjZGVmaW5lIENFVENSICAweDc0CisjZGVmaW5lIENTVFNSICAweDdjCisjZGVmaW5lIENTUlRSICAweDgwCisjZGVmaW5lIENEU1NSICAweDg0CisjZGVmaW5lIENEQVlSMiAweDkwCisjZGVmaW5lIENEQUNSMiAweDk0CisjZGVmaW5lIENEQllSMiAweDk4CisjZGVmaW5lIENEQkNSMiAweDljCisKK3N0YXRpYyBERUZJTkVfTVVURVgoY2FtZXJhX2xvY2spOworCisvKiBwZXIgdmlkZW8gZnJhbWUgYnVmZmVyICovCitzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgeworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7IC8qIHY0bCBidWZmZXIgbXVzdCBiZSBmaXJzdCAqLworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpmbXQ7Cit9OworCitzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0IGljaTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZDsKKworCXVuc2lnbmVkIGludCBpcnE7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXVuc2lnbmVkIGxvbmcgdmlkZW9fbGltaXQ7CisKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBjYXB0dXJlOworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmFjdGl2ZTsKKworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gKnBkYXRhOworfTsKKworc3RhdGljIHZvaWQgY2V1X3dyaXRlKHN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcHJpdiwKKwkJICAgICAgdW5zaWduZWQgbG9uZyByZWdfb2ZmcywgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCWlvd3JpdGUzMihkYXRhLCBwcml2LT5iYXNlICsgcmVnX29mZnMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjZXVfcmVhZChzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnByaXYsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHJlZ19vZmZzKQoreworCXJldHVybiBpb3JlYWQzMihwcml2LT5iYXNlICsgcmVnX29mZnMpOworfQorCisvKgorICogIFZpZGVvYnVmIG9wZXJhdGlvbnMKKyAqLworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3ZpZGVvYnVmX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJCXVuc2lnbmVkIGludCAqY291bnQsCisJCQkJCXVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlpbnQgYnl0ZXNfcGVyX3BpeGVsID0gKGljZC0+Y3VycmVudF9mbXQtPmRlcHRoICsgNykgPj4gMzsKKworCSpzaXplID0gUEFHRV9BTElHTihpY2QtPndpZHRoICogaWNkLT5oZWlnaHQgKiBieXRlc19wZXJfcGl4ZWwpOworCisJaWYgKDAgPT0gKmNvdW50KQorCQkqY291bnQgPSAyOworCisJaWYgKHBjZGV2LT52aWRlb19saW1pdCkgeworCQl3aGlsZSAoKnNpemUgKiAqY291bnQgPiBwY2Rldi0+dmlkZW9fbGltaXQpCisJCQkoKmNvdW50KS0tOworCX0KKworCWRldl9kYmcoJmljZC0+ZGV2LCAiY291bnQ9JWQsIHNpemU9JWRcbiIsICpjb3VudCwgKnNpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICV6ZFxuIiwgX19mdW5jX18sCisJCSZidWYtPnZiLCBidWYtPnZiLmJhZGRyLCBidWYtPnZiLmJzaXplKTsKKworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJQlVHKCk7CisKKwl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUodnEsICZidWYtPnZiKTsKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIGZyZWVkXG4iLCBfX2Z1bmNfXyk7CisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21vYmlsZV9jZXVfY2FwdHVyZShzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2KQoreworCWNldV93cml0ZShwY2RldiwgQ0VJRVIsIGNldV9yZWFkKHBjZGV2LCBDRUlFUikgJiB+MSk7CisJY2V1X3dyaXRlKHBjZGV2LCBDRVRDUiwgfmNldV9yZWFkKHBjZGV2LCBDRVRDUikgJiAweDAzMTdmMzEzKTsKKwljZXVfd3JpdGUocGNkZXYsIENFSUVSLCBjZXVfcmVhZChwY2RldiwgQ0VJRVIpIHwgMSk7CisKKwljZXVfd3JpdGUocGNkZXYsIENBUENSLCBjZXVfcmVhZChwY2RldiwgQ0FQQ1IpICYgfjB4MTAwMDApOworCisJY2V1X3dyaXRlKHBjZGV2LCBDRVRDUiwgMHgwMzE3ZjMxMyBeIDB4MTApOworCisJaWYgKHBjZGV2LT5hY3RpdmUpIHsKKwkJY2V1X3dyaXRlKHBjZGV2LCBDREFZUiwgdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKSk7CisJCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDB4MSk7IC8qIHN0YXJ0IGNhcHR1cmUgKi8KKwl9Cit9CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkJCSAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgKmJ1ZjsKKwlpbnQgcmV0OworCisJYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIsIHZiKTsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJXpkXG4iLCBfX2Z1bmNfXywKKwkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKKworCS8qIEFkZGVkIGxpc3QgaGVhZCBpbml0aWFsaXphdGlvbiBvbiBhbGxvYyAqLworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpOworCisjaWZkZWYgREVCVUcKKwkvKiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VlIGlmIHdlIGFjdHVhbGx5IGZpbGwKKwkgKiB0aGUgYnVmZmVyIHdpdGggc29tZXRoaW5nICovCisJbWVtc2V0KCh2b2lkICopdmItPmJhZGRyLCAweGFhLCB2Yi0+YnNpemUpOworI2VuZGlmCisKKwlCVUdfT04oTlVMTCA9PSBpY2QtPmN1cnJlbnRfZm10KTsKKworCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8CisJICAgIHZiLT53aWR0aAkhPSBpY2QtPndpZHRoIHx8CisJICAgIHZiLT5oZWlnaHQJIT0gaWNkLT5oZWlnaHQgfHwKKwkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7CisJCWJ1Zi0+Zm10CT0gaWNkLT5jdXJyZW50X2ZtdDsKKwkJdmItPndpZHRoCT0gaWNkLT53aWR0aDsKKwkJdmItPmhlaWdodAk9IGljZC0+aGVpZ2h0OworCQl2Yi0+ZmllbGQJPSBmaWVsZDsKKwkJdmItPnN0YXRlCT0gVklERU9CVUZfTkVFRFNfSU5JVDsKKwl9CisKKwl2Yi0+c2l6ZSA9IHZiLT53aWR0aCAqIHZiLT5oZWlnaHQgKiAoKGJ1Zi0+Zm10LT5kZXB0aCArIDcpID4+IDMpOworCWlmICgwICE9IHZiLT5iYWRkciAmJiB2Yi0+YnNpemUgPCB2Yi0+c2l6ZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodmItPnN0YXRlID09IFZJREVPQlVGX05FRURTX0lOSVQpIHsKKwkJcmV0ID0gdmlkZW9idWZfaW9sb2NrKHZxLCB2YiwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWw7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCX0KKworCXJldHVybiAwOworZmFpbDoKKwlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaF9tb2JpbGVfY2V1X3ZpZGVvYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJCSBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlemRcbiIsIF9fZnVuY19fLAorCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOworCisJdmItPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCXNwaW5fbG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnBjZGV2LT5jYXB0dXJlKTsKKworCWlmICghcGNkZXYtPmFjdGl2ZSkgeworCQlwY2Rldi0+YWN0aXZlID0gdmI7CisJCXNoX21vYmlsZV9jZXVfY2FwdHVyZShwY2Rldik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJCSAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCWZyZWVfYnVmZmVyKHZxLCBjb250YWluZXJfb2YodmIsIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2J1ZmZlciwgdmIpKTsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9vcHMgPSB7CisJLmJ1Zl9zZXR1cCAgICAgID0gc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgICAgPSBzaF9tb2JpbGVfY2V1X3ZpZGVvYnVmX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSAgICAgID0gc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgICAgPSBzaF9tb2JpbGVfY2V1X3ZpZGVvYnVmX3JlbGVhc2UsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfbW9iaWxlX2NldV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisKKwl2YiA9IHBjZGV2LT5hY3RpdmU7CisJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKworCWlmICghbGlzdF9lbXB0eSgmcGNkZXYtPmNhcHR1cmUpKQorCQlwY2Rldi0+YWN0aXZlID0gbGlzdF9lbnRyeShwY2Rldi0+Y2FwdHVyZS5uZXh0LAorCQkJCQkgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBxdWV1ZSk7CisJZWxzZQorCQlwY2Rldi0+YWN0aXZlID0gTlVMTDsKKworCXNoX21vYmlsZV9jZXVfY2FwdHVyZShwY2Rldik7CisKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ET05FOworCWRvX2dldHRpbWVvZmRheSgmdmItPnRzKTsKKwl2Yi0+ZmllbGRfY291bnQrKzsKKwl3YWtlX3VwKCZ2Yi0+ZG9uZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlpbnQgcmV0ID0gLUVCVVNZOworCisJbXV0ZXhfbG9jaygmY2FtZXJhX2xvY2spOworCisJaWYgKHBjZGV2LT5pY2QpCisJCWdvdG8gZXJyOworCisJZGV2X2luZm8oJmljZC0+ZGV2LAorCQkgIlN1cGVySCBNb2JpbGUgQ0VVIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCisJCSBpY2QtPmRldm51bSk7CisKKwlpZiAocGNkZXYtPnBkYXRhLT5lbmFibGVfY2FtZXJhKQorCQlwY2Rldi0+cGRhdGEtPmVuYWJsZV9jYW1lcmEoKTsKKworCXJldCA9IGljZC0+b3BzLT5pbml0KGljZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwljZXVfd3JpdGUocGNkZXYsIENBUFNSLCAxIDw8IDE2KTsgLyogcmVzZXQgKi8KKwl3aGlsZSAoY2V1X3JlYWQocGNkZXYsIENTVFNSKSAmIDEpCisJCW1zbGVlcCgxKTsKKworCXBjZGV2LT5pY2QgPSBpY2Q7CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZjYW1lcmFfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaF9tb2JpbGVfY2V1X3JlbW92ZV9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKworCUJVR19PTihpY2QgIT0gcGNkZXYtPmljZCk7CisKKwkvKiBkaXNhYmxlIGNhcHR1cmUsIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWNldV93cml0ZShwY2RldiwgQ0VJRVIsIDApOworCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDEgPDwgMTYpOyAvKiByZXNldCAqLworCWljZC0+b3BzLT5yZWxlYXNlKGljZCk7CisJaWYgKHBjZGV2LT5wZGF0YS0+ZGlzYWJsZV9jYW1lcmEpCisJCXBjZGV2LT5wZGF0YS0+ZGlzYWJsZV9jYW1lcmEoKTsKKworCWRldl9pbmZvKCZpY2QtPmRldiwKKwkJICJTdXBlckggTW9iaWxlIENFVSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCisJCSBpY2QtPmRldm51bSk7CisKKwlwY2Rldi0+aWNkID0gTlVMTDsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgICAgIF9fdTMyIHBpeGZtdCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCWludCByZXQsIGJ1c3dpZHRoLCB3aWR0aCwgY2ZzenJfd2lkdGgsIGNkd2RyX3dpZHRoOworCXVuc2lnbmVkIGxvbmcgY2FtZXJhX2ZsYWdzLCBjb21tb25fZmxhZ3MsIHZhbHVlOworCisJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOworCWNvbW1vbl9mbGFncyA9IHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLAorCQkJCQkJICAgICAgIHBjZGV2LT5wZGF0YS0+ZmxhZ3MpOworCWlmICghY29tbW9uX2ZsYWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgY29tbW9uX2ZsYWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIX01BU0spIHsKKwljYXNlIFNPQ0FNX0RBVEFXSURUSF84OgorCQlidXN3aWR0aCA9IDg7CisJCWJyZWFrOworCWNhc2UgU09DQU1fREFUQVdJRFRIXzE2OgorCQlidXN3aWR0aCA9IDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljZXVfd3JpdGUocGNkZXYsIENSQ05UUiwgMCk7CisJY2V1X3dyaXRlKHBjZGV2LCBDUkNNUFIsIDApOworCisJdmFsdWUgPSAweDAwMDAwMDEwOworCXZhbHVlIHw9IChjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XKSA/ICgxIDw8IDEpIDogMDsKKwl2YWx1ZSB8PSAoY29tbW9uX2ZsYWdzICYgU09DQU1fSFNZTkNfQUNUSVZFX0xPVykgPyAoMSA8PCAwKSA6IDA7CisJdmFsdWUgfD0gKGJ1c3dpZHRoID09IDE2KSA/ICgxIDw8IDEyKSA6IDA7CisJY2V1X3dyaXRlKHBjZGV2LCBDQU1DUiwgdmFsdWUpOworCisJY2V1X3dyaXRlKHBjZGV2LCBDQVBDUiwgMHgwMDMwMDAwMCk7CisJY2V1X3dyaXRlKHBjZGV2LCBDQUlGUiwgMCk7CisKKwltZGVsYXkoMSk7CisKKwl3aWR0aCA9IGljZC0+d2lkdGggKiAoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggLyA4KTsKKwl3aWR0aCA9IChidXN3aWR0aCA9PSAxNikgPyB3aWR0aCAvIDIgOiB3aWR0aDsKKwljZnN6cl93aWR0aCA9IChidXN3aWR0aCA9PSA4KSA/IHdpZHRoIC8gMiA6IHdpZHRoOworCWNkd2RyX3dpZHRoID0gKGJ1c3dpZHRoID09IDE2KSA/IHdpZHRoICogMiA6IHdpZHRoOworCisJY2V1X3dyaXRlKHBjZGV2LCBDQU1PUiwgMCk7CisJY2V1X3dyaXRlKHBjZGV2LCBDQVBXUiwgKGljZC0+aGVpZ2h0IDw8IDE2KSB8IHdpZHRoKTsKKwljZXVfd3JpdGUocGNkZXYsIENGTENSLCAwKTsgLyogZGF0YSBmZXRjaCBtb2RlIC0gbm8gc2NhbGluZyAqLworCWNldV93cml0ZShwY2RldiwgQ0ZTWlIsIChpY2QtPmhlaWdodCA8PCAxNikgfCBjZnN6cl93aWR0aCk7CisJY2V1X3dyaXRlKHBjZGV2LCBDTEZDUiwgMCk7IC8qIGRhdGEgZmV0Y2ggbW9kZSAtIG5vIGxvd3Bhc3MgZmlsdGVyICovCisJY2V1X3dyaXRlKHBjZGV2LCBDRE9DUiwgMHgwMDAwMDAxNik7CisKKwljZXVfd3JpdGUocGNkZXYsIENEV0RSLCBjZHdkcl93aWR0aCk7CisJY2V1X3dyaXRlKHBjZGV2LCBDRldDUiwgMCk7IC8qIGtlZXAgImRhdGFmZXRjaCBmaXJld2FsbCIgZGlzYWJsZWQgKi8KKworCS8qIG5vdCBpbiBidW5kbGUgbW9kZTogc2tpcCBDQkRTUiwgQ0RBWVIyLCBDREFDUjIsIENEQllSMiwgQ0RCQ1IyICovCisJLyogaW4gZGF0YSBmZXRjaCBtb2RlOiBubyBuZWVkIGZvciBDREFDUiwgQ0RCWVIsIENEQkNSICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3RyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgICAgIF9fdTMyIHBpeGZtdCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXVuc2lnbmVkIGxvbmcgY2FtZXJhX2ZsYWdzLCBjb21tb25fZmxhZ3M7CisKKwljYW1lcmFfZmxhZ3MgPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtKGljZCk7CisJY29tbW9uX2ZsYWdzID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsCisJCQkJCQkgICAgICAgcGNkZXYtPnBkYXRhLT5mbGFncyk7CisJaWYgKCFjb21tb25fZmxhZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfZm10X2NhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgICAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlyZXR1cm4gaWNkLT5vcHMtPnNldF9mbXRfY2FwKGljZCwgcGl4Zm10LCByZWN0KTsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3RyeV9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCS8qIEZJWE1FOiBjYWxjdWxhdGUgdXNpbmcgZGVwdGggYW5kIGJ1cyB3aWR0aCAqLworCisJaWYgKGYtPmZtdC5waXguaGVpZ2h0IDwgNCkKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSA0OworCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IDE5MjApCisJCWYtPmZtdC5waXguaGVpZ2h0ID0gMTkyMDsKKwlpZiAoZi0+Zm10LnBpeC53aWR0aCA8IDIpCisJCWYtPmZtdC5waXgud2lkdGggPSAyOworCWlmIChmLT5mbXQucGl4LndpZHRoID4gMjU2MCkKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDI1NjA7CisJZi0+Zm10LnBpeC53aWR0aCAmPSB+MHgwMTsKKwlmLT5mbXQucGl4LmhlaWdodCAmPSB+MHgwMzsKKworCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KKwlyZXR1cm4gaWNkLT5vcHMtPnRyeV9mbXRfY2FwKGljZCwgZik7Cit9CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9yZXFidWZzKHN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiwKKwkJCQkgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCit7CisJaW50IGk7CisKKwkvKiBUaGlzIGlzIGZvciBsb2NraW5nIGRlYnVnZ2luZyBvbmx5LiBJIHJlbW92ZWQgc3BpbmxvY2tzIGFuZCBub3cgSQorCSAqIGNoZWNrIHdoZXRoZXIgLnByZXBhcmUgaXMgZXZlciBjYWxsZWQgb24gYSBsaW5rZWQgYnVmZmVyLCBvciB3aGV0aGVyCisJICogYSBkbWEgSVJRIGNhbiBvY2N1ciBmb3IgYW4gaW4td29yayBvciB1bmxpbmtlZCBidWZmZXIuIFVudGlsIG5vdworCSAqIGl0IGhhZG4ndCB0cmlnZ2VyZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcC0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgKmJ1ZjsKKworCQlidWYgPSBjb250YWluZXJfb2YoaWNmLT52Yl92aWRxLmJ1ZnNbaV0sCisJCQkJICAgc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyLCB2Yik7CisJCUlOSVRfTElTVF9IRUFEKCZidWYtPnZiLnF1ZXVlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzaF9tb2JpbGVfY2V1X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnB0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgKmJ1ZjsKKworCWJ1ZiA9IGxpc3RfZW50cnkoaWNmLT52Yl92aWRxLnN0cmVhbS5uZXh0LAorCQkJIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2J1ZmZlciwgdmIuc3RyZWFtKTsKKworCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCBwdCk7CisKKwlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8CisJICAgIGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpCisJCXJldHVybiBQT0xMSU58UE9MTFJETk9STTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfcXVlcnljYXAoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpLAorCQkJCSAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cmxjcHkoY2FwLT5jYXJkLCAiU3VwZXJIX01vYmlsZV9DRVUiLCBzaXplb2YoY2FwLT5jYXJkKSk7CisJY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgNSk7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaF9tb2JpbGVfY2V1X2luaXRfdmlkZW9idWYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHEsCisJCQkJICAgICAgICZzaF9tb2JpbGVfY2V1X3ZpZGVvYnVmX29wcywKKwkJCQkgICAgICAgJmljaS0+ZGV2LCAmcGNkZXYtPmxvY2ssCisJCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCQkgICAgICAgVjRMMl9GSUVMRF9OT05FLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyKSwKKwkJCQkgICAgICAgaWNkKTsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3Rfb3BzIHNoX21vYmlsZV9jZXVfaG9zdF9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5hZGQJCT0gc2hfbW9iaWxlX2NldV9hZGRfZGV2aWNlLAorCS5yZW1vdmUJCT0gc2hfbW9iaWxlX2NldV9yZW1vdmVfZGV2aWNlLAorCS5zZXRfZm10X2NhcAk9IHNoX21vYmlsZV9jZXVfc2V0X2ZtdF9jYXAsCisJLnRyeV9mbXRfY2FwCT0gc2hfbW9iaWxlX2NldV90cnlfZm10X2NhcCwKKwkucmVxYnVmcwk9IHNoX21vYmlsZV9jZXVfcmVxYnVmcywKKwkucG9sbAkJPSBzaF9tb2JpbGVfY2V1X3BvbGwsCisJLnF1ZXJ5Y2FwCT0gc2hfbW9iaWxlX2NldV9xdWVyeWNhcCwKKwkudHJ5X2J1c19wYXJhbQk9IHNoX21vYmlsZV9jZXVfdHJ5X2J1c19wYXJhbSwKKwkuc2V0X2J1c19wYXJhbQk9IHNoX21vYmlsZV9jZXVfc2V0X2J1c19wYXJhbSwKKwkuaW5pdF92aWRlb2J1Zgk9IHNoX21vYmlsZV9jZXVfaW5pdF92aWRlb2J1ZiwKK307CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IGVyciA9IDA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFyZXMgfHwgIWlycSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJOb3QgZW5vdWdoIENFVSBwbGF0Zm9ybSByZXNvdXJjZXMuXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCXBjZGV2ID0ga3phbGxvYyhzaXplb2YoKnBjZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY2RldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgcGNkZXZcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNkZXYpOworCUlOSVRfTElTVF9IRUFEKCZwY2Rldi0+Y2FwdHVyZSk7CisJc3Bpbl9sb2NrX2luaXQoJnBjZGV2LT5sb2NrKTsKKworCXBjZGV2LT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGNkZXYtPnBkYXRhKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNFVSBwbGF0Zm9ybSBkYXRhIG5vdCBzZXQuXG4iKTsKKwkJZ290byBleGl0X2tmcmVlOworCX0KKworCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCFiYXNlKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGlvcmVtYXAgQ0VVIHJlZ2lzdGVycy5cbiIpOworCQlnb3RvIGV4aXRfa2ZyZWU7CisJfQorCisJcGNkZXYtPmlycSA9IGlycTsKKwlwY2Rldi0+YmFzZSA9IGJhc2U7CisJcGNkZXYtPnZpZGVvX2xpbWl0ID0gMDsgLyogb25seSBlbmFibGVkIGlmIHNlY29uZCByZXNvdXJjZSBleGlzdHMgKi8KKwlwY2Rldi0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKHJlcykgeworCQllcnIgPSBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCQkJCSAgcmVzLT5zdGFydCwKKwkJCQkJCSAgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgKyAxLAorCQkJCQkJICBETUFfTUVNT1JZX01BUCB8CisJCQkJCQkgIERNQV9NRU1PUllfRVhDTFVTSVZFKTsKKwkJaWYgKCFlcnIpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBkZWNsYXJlIENFVSBtZW1vcnkuXG4iKTsKKwkJCWVyciA9IC1FTlhJTzsKKwkJCWdvdG8gZXhpdF9pb3VubWFwOworCQl9CisKKwkJcGNkZXYtPnZpZGVvX2xpbWl0ID0gKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgKyAxOworCX0KKworCS8qIHJlcXVlc3QgaXJxICovCisJZXJyID0gcmVxdWVzdF9pcnEocGNkZXYtPmlycSwgc2hfbW9iaWxlX2NldV9pcnEsIElSUUZfRElTQUJMRUQsCisJCQkgIHBkZXYtPmRldi5idXNfaWQsIHBjZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZWdpc3RlciBDRVUgaW50ZXJydXB0LlxuIik7CisJCWdvdG8gZXhpdF9yZWxlYXNlX21lbTsKKwl9CisKKwlwY2Rldi0+aWNpLnByaXYgPSBwY2RldjsKKwlwY2Rldi0+aWNpLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCXBjZGV2LT5pY2kubnIgPSBwZGV2LT5pZDsKKwlwY2Rldi0+aWNpLmRydl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZCwKKwlwY2Rldi0+aWNpLm9wcyA9ICZzaF9tb2JpbGVfY2V1X2hvc3Rfb3BzLAorCisJZXJyID0gc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKCZwY2Rldi0+aWNpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZV9pcnE7CisKKwlyZXR1cm4gMDsKKworZXhpdF9mcmVlX2lycToKKwlmcmVlX2lycShwY2Rldi0+aXJxLCBwY2Rldik7CitleGl0X3JlbGVhc2VfbWVtOgorCWlmIChwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpKQorCQlkbWFfcmVsZWFzZV9kZWNsYXJlZF9tZW1vcnkoJnBkZXYtPmRldik7CitleGl0X2lvdW5tYXA6CisJaW91bm1hcChiYXNlKTsKK2V4aXRfa2ZyZWU6CisJa2ZyZWUocGNkZXYpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc29jX2NhbWVyYV9ob3N0X3VucmVnaXN0ZXIoJnBjZGV2LT5pY2kpOworCWZyZWVfaXJxKHBjZGV2LT5pcnEsIHBjZGV2KTsKKwlpZiAocGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKSkKKwkJZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KCZwZGV2LT5kZXYpOworCWlvdW5tYXAocGNkZXYtPmJhc2UpOworCWtmcmVlKHBjZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfbW9iaWxlX2NldV9kcml2ZXIgPSB7CisJLmRyaXZlciAJPSB7CisJCS5uYW1lCT0gInNoX21vYmlsZV9jZXUiLAorCX0sCisJLnByb2JlCQk9IHNoX21vYmlsZV9jZXVfcHJvYmUsCisJLnJlbW92ZQkJPSBzaF9tb2JpbGVfY2V1X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX21vYmlsZV9jZXVfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNoX21vYmlsZV9jZXVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNoX21vYmlsZV9jZXVfZXhpdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2hfbW9iaWxlX2NldV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzaF9tb2JpbGVfY2V1X2luaXQpOworbW9kdWxlX2V4aXQoc2hfbW9iaWxlX2NldV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggTW9iaWxlIENFVSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hZ251cyBEYW1tIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAppbmRleCAzNTIyM2UwLi42ZmY0ODliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKQEAgLTQ0LDcgKzQ0LDYgQEAKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA3LCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDksIEJSSURHRV9TTjlDMTAyKSwgfSwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAxMSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkLCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTksIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNCwgQlJJREdFX1NOOUMxMDIpLCB9LApAQCAtNTcsNyArNTYsNiBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJkLCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmUsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAzMCwgQlJJREdFX1NOOUMxMDIpLCB9LAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDNmLCBCUklER0VfU045QzEwMiksIH0sCiAJLyogU045QzEwMyAqLwogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDgwLCBCUklER0VfU045QzEwMyksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODIsIEJSSURHRV9TTjlDMTAzKSwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKaW5kZXggZDAxNWJmZS4uZTM5Yjk4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1jb3JlLmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCiBzdGF0aWMgTElTVF9IRUFEKGhvc3RzKTsKQEAgLTQ0LDcgKzQ1LDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBzb2NfY2FtZXJhX3RyeV9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCBzb2NfY2FtZXJhX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xODIsNyArMTgzLDYgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2k7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmOwotCXNwaW5sb2NrX3QgKmxvY2s7CiAJaW50IHJldDsKIAogCWljZiA9IHZtYWxsb2Moc2l6ZW9mKCppY2YpKTsKQEAgLTIwOSwxMyArMjA5LDYgQEAKIAl9CiAKIAlpY2YtPmljZCA9IGljZDsKLQotCWljZi0+bG9jayA9IGljaS0+b3BzLT5zcGlubG9ja19hbGxvYyhpY2YpOwotCWlmICghaWNmLT5sb2NrKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXNsYTsKLQl9Ci0KIAlpY2QtPnVzZV9jb3VudCsrOwogCiAJLyogTm93IHdlIHJlYWxseSBoYXZlIHRvIGFjdGl2YXRlIHRoZSBjYW1lcmEgKi8KQEAgLTIzMywyMSArMjI2LDEyIEBACiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaWNmOwogCWRldl9kYmcoJmljZC0+ZGV2LCAiY2FtZXJhIGRldmljZSBvcGVuXG4iKTsKIAotCS8qIFdlIG11c3QgcGFzcyBOVUxMIGFzIGRldiBwb2ludGVyLCB0aGVuIGFsbCBwY2lfKiBkbWEgb3BlcmF0aW9ucwotCSAqIHRyYW5zZm9ybSB0byBub3JtYWwgZG1hXyogb25lcy4gKi8KLQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZpY2YtPnZiX3ZpZHEsIGljaS0+dmJxX29wcywgTlVMTCwgaWNmLT5sb2NrLAotCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwgVjRMMl9GSUVMRF9OT05FLAotCQkJCWljaS0+bXNpemUsIGljZCk7CisJaWNpLT5vcHMtPmluaXRfdmlkZW9idWYoJmljZi0+dmJfdmlkcSwgaWNkKTsKIAogCXJldHVybiAwOwogCiAJLyogQWxsIGVycm9ycyBhcmUgZW50ZXJlZCB3aXRoIHRoZSB2aWRlb19sb2NrIGhlbGQgKi8KIGVpY2lhZGQ6Ci0JbG9jayA9IGljZi0+bG9jazsKLQlpY2YtPmxvY2sgPSBOVUxMOwotCWlmIChpY2ktPm9wcy0+c3BpbmxvY2tfZnJlZSkKLQkJaWNpLT5vcHMtPnNwaW5sb2NrX2ZyZWUobG9jayk7Ci1lc2xhOgogCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKIGVtZ2k6CiAJbW9kdWxlX3B1dChpY2QtPm9wcy0+b3duZXIpOwpAQCAtMjYzLDE1ICsyNDcsMTEgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBpY2QtPnZkZXY7Ci0Jc3BpbmxvY2tfdCAqbG9jayA9IGljZi0+bG9jazsKIAogCW11dGV4X2xvY2soJnZpZGVvX2xvY2spOwogCWljZC0+dXNlX2NvdW50LS07CiAJaWYgKCFpY2QtPnVzZV9jb3VudCkKIAkJaWNpLT5vcHMtPnJlbW92ZShpY2QpOwotCWljZi0+bG9jayA9IE5VTEw7Ci0JaWYgKGljaS0+b3BzLT5zcGlubG9ja19mcmVlKQotCQlpY2ktPm9wcy0+c3BpbmxvY2tfZnJlZShsb2NrKTsKIAltb2R1bGVfcHV0KGljZC0+b3BzLT5vd25lcik7CiAJbW9kdWxlX3B1dChpY2ktPm9wcy0+b3duZXIpOwogCW11dGV4X3VubG9jaygmdmlkZW9fbG9jayk7CkBAIC0zNDIsNyArMzIyLDcgQEAKIH07CiAKIAotc3RhdGljIGludCBzb2NfY2FtZXJhX3NfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0zNjIsNyArMzQyLDcgQEAKIAkvKiBidXN3aWR0aCBtYXkgYmUgZnVydGhlciBhZGp1c3RlZCBieSB0aGUgaWNpICovCiAJaWNkLT5idXN3aWR0aCA9IGRhdGFfZm10LT5kZXB0aDsKIAotCXJldCA9IHNvY19jYW1lcmFfdHJ5X2ZtdF9jYXAoZmlsZSwgaWNmLCBmKTsKKwlyZXQgPSBzb2NfY2FtZXJhX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBpY2YsIGYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0zODksNyArMzY5LDcgQEAKIAlyZXR1cm4gaWNpLT5vcHMtPnNldF9idXNfcGFyYW0oaWNkLCBmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKIH0KIAotc3RhdGljIGludCBzb2NfY2FtZXJhX2VudW1fZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCitzdGF0aWMgaW50IHNvY19jYW1lcmFfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC00MDgsNyArMzg4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzb2NfY2FtZXJhX2dfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC03NjcsMjcgKzc0NywxMiBAQAogewogfQogCi1zdGF0aWMgc3BpbmxvY2tfdCAqc3BpbmxvY2tfYWxsb2Moc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmKQotewotCXNwaW5sb2NrX3QgKmxvY2sgPSBrbWFsbG9jKHNpemVvZihzcGlubG9ja190KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAobG9jaykKLQkJc3Bpbl9sb2NrX2luaXQobG9jayk7Ci0KLQlyZXR1cm4gbG9jazsKLX0KLQotc3RhdGljIHZvaWQgc3BpbmxvY2tfZnJlZShzcGlubG9ja190ICpsb2NrKQotewotCWtmcmVlKGxvY2spOwotfQotCiBpbnQgc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKml4OwogCi0JaWYgKCFpY2ktPnZicV9vcHMgfHwgIWljaS0+b3BzLT5hZGQgfHwgIWljaS0+b3BzLT5yZW1vdmUpCisJaWYgKCFpY2ktPm9wcy0+aW5pdF92aWRlb2J1ZiB8fCAhaWNpLT5vcHMtPmFkZCB8fCAhaWNpLT5vcHMtPnJlbW92ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBOdW1iZXIgbWlnaHQgYmUgZXF1YWwgdG8gdGhlIHBsYXRmb3JtIGRldmljZSBJRCAqLwpAQCAtODExLDExICs3NzYsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZWRldnI7CiAKLQlpZiAoIWljaS0+b3BzLT5zcGlubG9ja19hbGxvYykgewotCQlpY2ktPm9wcy0+c3BpbmxvY2tfYWxsb2MgPSBzcGlubG9ja19hbGxvYzsKLQkJaWNpLT5vcHMtPnNwaW5sb2NrX2ZyZWUgPSBzcGlubG9ja19mcmVlOwotCX0KLQogCXNjYW5fYWRkX2hvc3QoaWNpKTsKIAogCXJldHVybiAwOwpAQCAtOTI1LDE1ICs4ODUsMTUgQEAKIAl2ZGV2LT5taW5vcgkJPSAtMTsKIAl2ZGV2LT50dm5vcm1zCQk9IFY0TDJfU1REX1VOS05PV04sCiAJdmRldi0+dmlkaW9jX3F1ZXJ5Y2FwCT0gc29jX2NhbWVyYV9xdWVyeWNhcDsKLQl2ZGV2LT52aWRpb2NfZ19mbXRfY2FwCT0gc29jX2NhbWVyYV9nX2ZtdF9jYXA7Ci0JdmRldi0+dmlkaW9jX2VudW1fZm10X2NhcCA9IHNvY19jYW1lcmFfZW51bV9mbXRfY2FwOwotCXZkZXYtPnZpZGlvY19zX2ZtdF9jYXAJPSBzb2NfY2FtZXJhX3NfZm10X2NhcDsKKwl2ZGV2LT52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHNvY19jYW1lcmFfZ19mbXRfdmlkX2NhcDsKKwl2ZGV2LT52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHNvY19jYW1lcmFfZW51bV9mbXRfdmlkX2NhcDsKKwl2ZGV2LT52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHNvY19jYW1lcmFfc19mbXRfdmlkX2NhcDsKIAl2ZGV2LT52aWRpb2NfZW51bV9pbnB1dAk9IHNvY19jYW1lcmFfZW51bV9pbnB1dDsKIAl2ZGV2LT52aWRpb2NfZ19pbnB1dAk9IHNvY19jYW1lcmFfZ19pbnB1dDsKIAl2ZGV2LT52aWRpb2Nfc19pbnB1dAk9IHNvY19jYW1lcmFfc19pbnB1dDsKIAl2ZGV2LT52aWRpb2Nfc19zdGQJPSBzb2NfY2FtZXJhX3Nfc3RkOwogCXZkZXYtPnZpZGlvY19yZXFidWZzCT0gc29jX2NhbWVyYV9yZXFidWZzOwotCXZkZXYtPnZpZGlvY190cnlfZm10X2NhcCA9IHNvY19jYW1lcmFfdHJ5X2ZtdF9jYXA7CisJdmRldi0+dmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHNvY19jYW1lcmFfdHJ5X2ZtdF92aWRfY2FwOwogCXZkZXYtPnZpZGlvY19xdWVyeWJ1Zgk9IHNvY19jYW1lcmFfcXVlcnlidWY7CiAJdmRldi0+dmlkaW9jX3FidWYJPSBzb2NfY2FtZXJhX3FidWY7CiAJdmRldi0+dmlkaW9jX2RxYnVmCT0gc29jX2NhbWVyYV9kcWJ1ZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmYjAzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogR2VuZXJpYyBQbGF0Zm9ybSBDYW1lcmEgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKiBCYXNlZCBvbiBtdDltMDAxIGRyaXZlciwKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorCitzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvIHsKKwlpbnQgaWZhY2U7CisJY2hhciAqZm9ybWF0X25hbWU7CisJdW5zaWduZWQgbG9uZyBmb3JtYXRfZGVwdGg7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBmb3JtYXQ7CisJdW5zaWduZWQgbG9uZyBidXNfcGFyYW07CisJaW50ICgqc2V0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm8sIGludCBlbmFibGUpOworfTsKKworc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiB7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbzsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IGZvcm1hdDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICoKK3NvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiAqcHJpdjsKKwlwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiwgaWNkKTsKKwlyZXR1cm4gcHJpdi0+aW5mbzsKK30KKworc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9nZXRfaW5mbyhpY2QpOworCXJldHVybiBwLT5zZXRfY2FwdHVyZShwLCAxKTsKK30KKworc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9nZXRfaW5mbyhpY2QpOworCXJldHVybiBwLT5zZXRfY2FwdHVyZShwLCAwKTsKK30KKworc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3NvY19jYW1lcmFfcGxhdGZvcm1fcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2dldF9pbmZvKGljZCk7CisJcmV0dXJuIHAtPmJ1c19wYXJhbTsKK30KKworc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCQkgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV90cnlfZm10X2NhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2dldF9pbmZvKGljZCk7CisKKwlmLT5mbXQucGl4LndpZHRoID0gcC0+Zm9ybWF0LndpZHRoOworCWYtPmZtdC5waXguaGVpZ2h0ID0gcC0+Zm9ybWF0LmhlaWdodDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgKnByaXY7CisJcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYsIGljZCk7CisKKwlwcml2LT5mb3JtYXQubmFtZSA9IHByaXYtPmluZm8tPmZvcm1hdF9uYW1lOworCXByaXYtPmZvcm1hdC5kZXB0aCA9IHByaXYtPmluZm8tPmZvcm1hdF9kZXB0aDsKKwlwcml2LT5mb3JtYXQuZm91cmNjID0gcHJpdi0+aW5mby0+Zm9ybWF0LnBpeGVsZm9ybWF0OworCXByaXYtPmZvcm1hdC5jb2xvcnNwYWNlID0gcHJpdi0+aW5mby0+Zm9ybWF0LmNvbG9yc3BhY2U7CisKKwlpY2QtPmZvcm1hdHMgPSAmcHJpdi0+Zm9ybWF0OworCWljZC0+bnVtX2Zvcm1hdHMgPSAxOworCisJcmV0dXJuIHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKK30KKworc3RhdGljIHZvaWQgc29jX2NhbWVyYV9wbGF0Zm9ybV92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc29jX2NhbWVyYV92aWRlb19zdG9wKGljZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgc29jX2NhbWVyYV9wbGF0Zm9ybV9vcHMgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkucHJvYmUJCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fdmlkZW9fcHJvYmUsCisJLnJlbW92ZQkJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV92aWRlb19yZW1vdmUsCisJLmluaXQJCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1faW5pdCwKKwkucmVsZWFzZQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2UsCisJLnN0YXJ0X2NhcHR1cmUJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zdGFydF9jYXB0dXJlLAorCS5zdG9wX2NhcHR1cmUJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zdG9wX2NhcHR1cmUsCisJLnNldF9mbXRfY2FwCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2ZtdF9jYXAsCisJLnRyeV9mbXRfY2FwCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdF9jYXAsCisJLnNldF9idXNfcGFyYW0JCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfYnVzX3BhcmFtLAorCS5xdWVyeV9idXNfcGFyYW0JPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3F1ZXJ5X2J1c19wYXJhbSwKK307CisKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgKnByaXY7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZDsKKwlpbnQgcmV0OworCisJcCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+aW5mbyA9IHA7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlpY2QgPSAmcHJpdi0+aWNkOworCWljZC0+b3BzCT0gJnNvY19jYW1lcmFfcGxhdGZvcm1fb3BzOworCWljZC0+Y29udHJvbAk9ICZwZGV2LT5kZXY7CisJaWNkLT53aWR0aF9taW4JPSAwOworCWljZC0+d2lkdGhfbWF4CT0gcHJpdi0+aW5mby0+Zm9ybWF0LndpZHRoOworCWljZC0+aGVpZ2h0X21pbgk9IDA7CisJaWNkLT5oZWlnaHRfbWF4CT0gcHJpdi0+aW5mby0+Zm9ybWF0LmhlaWdodDsKKwlpY2QtPnlfc2tpcF90b3AJPSAwOworCWljZC0+aWZhY2UJPSBwcml2LT5pbmZvLT5pZmFjZTsKKworCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7CisJaWYgKHJldCkKKwkJa2ZyZWUocHJpdik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmcHJpdi0+aWNkKTsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc29jX2NhbWVyYV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlciAJPSB7CisJCS5uYW1lCT0gInNvY19jYW1lcmFfcGxhdGZvcm0iLAorCX0sCisJLnByb2JlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJvYmUsCisJLnJlbW92ZQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNvY19jYW1lcmFfcGxhdGZvcm1fbW9kdWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzb2NfY2FtZXJhX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzb2NfY2FtZXJhX3BsYXRmb3JtX21vZHVsZV9leGl0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzb2NfY2FtZXJhX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNvY19jYW1lcmFfcGxhdGZvcm1fbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoc29jX2NhbWVyYV9wbGF0Zm9ybV9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU29DIENhbWVyYSBQbGF0Zm9ybSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hZ251cyBEYW1tIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IGIxMmM2MGMuLmYzMDhjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC05ODEsNyArOTgxLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IHN0a192aWRpb2NfZW51bV9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBzdGtfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGQpCiB7CiAJZm10ZC0+ZmxhZ3MgPSAwOwpAQCAtMTAyNSw3ICsxMDI1LDcgQEAKIAl7IC53ID0gMTc2LCAgLmggPSAxNDQsICAubSA9IE1PREVfUUNJRiwgfSwKIH07CiAKLXN0YXRpYyBpbnQgc3RrX3ZpZGlvY19nX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IHN0a192aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeF9mb3JtYXQgPSAmZi0+Zm10LnBpeDsKQEAgLTEwNTQsNyArMTA1NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3RrX3ZpZGlvY190cnlfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgc3RrX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ZCkKIHsKIAlpbnQgaTsKQEAgLTExMzEsNyArMTEzMSw3IEBACiAJcmV0dXJuIHN0a19zZW5zb3JfY29uZmlndXJlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgc3RrX3ZpZGlvY19zX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IHN0a192aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXRkKQogewogCWludCByZXQ7CkBAIC0xMTQ1LDcgKzExNDUsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCWlmIChkZXYtPm93bmVyICYmIGRldi0+b3duZXIgIT0gZmlscCkKIAkJcmV0dXJuIC1FQlVTWTsKLQlyZXQgPSBzdGtfdmlkaW9jX3RyeV9mbXRfY2FwKGZpbHAsIHByaXYsIGZtdGQpOworCXJldCA9IHN0a192aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbHAsIHByaXYsIGZtdGQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJZGV2LT5vd25lciA9IGZpbHA7CkBAIC0xMzQyLDEwICsxMzQyLDEwIEBACiAJLnJlbGVhc2UgPSBzdGtfdjRsX2Rldl9yZWxlYXNlLAogCiAJLnZpZGlvY19xdWVyeWNhcCA9IHN0a192aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF9jYXAgPSBzdGtfdmlkaW9jX2VudW1fZm10X2NhcCwKLQkudmlkaW9jX3RyeV9mbXRfY2FwID0gc3RrX3ZpZGlvY190cnlfZm10X2NhcCwKLQkudmlkaW9jX3NfZm10X2NhcCA9IHN0a192aWRpb2Nfc19mbXRfY2FwLAotCS52aWRpb2NfZ19mbXRfY2FwID0gc3RrX3ZpZGlvY19nX2ZtdF9jYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gc3RrX3ZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gc3RrX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gc3RrX3ZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHN0a192aWRpb2NfZ19mbXRfdmlkX2NhcCwKIAkudmlkaW9jX2VudW1faW5wdXQgPSBzdGtfdmlkaW9jX2VudW1faW5wdXQsCiAJLnZpZGlvY19zX2lucHV0ID0gc3RrX3ZpZGlvY19zX2lucHV0LAogCS52aWRpb2NfZ19pbnB1dCA9IHN0a192aWRpb2NfZ19pbnB1dCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKaW5kZXggOGYwMTAwZi4uMjk5OTFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKQEAgLTUyMyw2ICs1MjMsOSBAQAogCWlmICh2YWwgPCAwKQogCQlyZXR1cm4gdmFsOwogCisJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9IRkxJUCB8fCB2Yy0+aWQgPT0gVjRMMl9DSURfVkZMSVApCisJCXZhbCBePSBzZW5zb3ItPnBsYXRmb3JtX2RhdGEtPmlzX3Vwc2lkZV9kb3duKCk7CisKIAl2Yy0+dmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CkBAIC01NTYsNiArNTU5LDkgQEAKIAlpZiAobHZjID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9IRkxJUCB8fCB2Yy0+aWQgPT0gVjRMMl9DSURfVkZMSVApCisJCXZhbCBePSBzZW5zb3ItPnBsYXRmb3JtX2RhdGEtPmlzX3Vwc2lkZV9kb3duKCk7CisKIAl2YWwgPSB2YWwgPDwgbHZjLT5zdGFydF9iaXQ7CiAJaWYgKHRjbTgyNXhfd3JpdGVfcmVnX21hc2soY2xpZW50LCBsdmMtPnJlZywgdmFsKSkKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RjbTgyNXguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oCmluZGV4IDk2Njc2NWIuLjc3MGViYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oCkBAIC0xODIsNiArMTgyLDcgQEAKIAlpbnQgKCpuZWVkc19yZXNldCkoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgdm9pZCAqYnVmLAogCQkJICAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqZm10KTsKIAlpbnQgKCppZnBhcm0pKHN0cnVjdCB2NGwyX2lmcGFybSAqcCk7CisJaW50ICgqaXNfdXBzaWRlX2Rvd24pKHZvaWQpOwogfTsKIAogLyogQXJyYXkgb2YgaW1hZ2Ugc2l6ZXMgc3VwcG9ydGVkIGJ5IFRDTTgyNVguICBUaGVzZSBtdXN0IGJlIG9yZGVyZWQgZnJvbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwppbmRleCBiNGQxMGY3Li5hZTc1YzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwpAQCAtNzIsNiArNzIsNyBAQAogCUkyQ19BRERSX1REQTc0MzIgPj4gMSwKIAlJMkNfQ0xJRU5UX0VORCwKIH07CisKIEkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiBTdHJ1Y3R1cmUgb2YgYWRkcmVzcyBhbmQgc3ViYWRkcmVzc2VzIGZvciB0aGUgdGRhNzQzMiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYwppbmRleCAwY2VlMDAyLi4yNDM3YzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYwpAQCAtMzQsNiArMzQsNyBAQAogc3RhdGljIGludCBkZWJ1ZzsJCS8qIGluc21vZCBwYXJhbWV0ZXIgKi8KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBkZXZpY2UgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CisKICNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCiAJICAgIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50aygiJXM6ICVzKClbJWRdOiAiLCBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fTElORV9fKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKaW5kZXggM2MwNTU3MS4uN2E4Y2U4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLQogI2luY2x1ZGUgPG1lZGlhL2kyYy1hZGRyLmg+CiAKIHN0YXRpYyBpbnQgZGVidWc7IC8qIGluc21vZCBwYXJhbWV0ZXIgKi8KQEAgLTQyLDYgKzQxLDcgQEAKICAgICBJMkNfQUREUl9UREE5ODc1ID4+IDEsCiAgICAgSTJDX0NMSUVOVF9FTkQKIH07CisKIEkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIFREQTk4NzUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYwppbmRleCA5NTEzZDg2Li40MjFjMTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCkBAIC0zNiw2ICszNiw3IEBACiBzdGF0aWMgaW50IGRlYnVnOwkJLyogaW5zbW9kIHBhcmFtZXRlciAqLwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGRldmljZSBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKwogI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKIAkgICAgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKCIlczogJXMoKVslZF06ICIsIEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXywgX19MSU5FX18pOyBwcmludGsoYXJncyk7IH0gfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwppbmRleCA3ZmQ1MzM2Li5iNWM4OTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwpAQCAtMzYsNiArMzYsNyBAQAogc3RhdGljIGludCBkZWJ1ZzsJCS8qIGluc21vZCBwYXJhbWV0ZXIgKi8KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBkZXZpY2UgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CisKICNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCiAJICAgIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50aygiJXM6ICVzKClbJWRdOiAiLCBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fTElORV9fKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGx2MzIwYWljMjNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsdjMyMGFpYzIzYi5jCmluZGV4IDI4YWI5ZjkuLjkyMjAzNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGx2MzIwYWljMjNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bHYzMjBhaWMyM2IuYwpAQCAtMzksNyArMzksNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM0ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLQogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCmluZGV4IDBkMTJhY2UuLjkzZDg3OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCkBAIC0xMjk4LDcgKzEyOTgsNiBAQAogCS5pZF90YWJsZSA9IHR1bmVyX2lkLAogfTsKIAotCiAvKgogICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKaW5kZXggYzc3OTE0ZC4uNDYzNjgwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKQEAgLTY5LDcgKzY5LDYgQEAKIC8qIGNoaXAgZGVzY3JpcHRpb24gKi8KIHN0cnVjdCBDSElQREVTQyB7CiAJY2hhciAgICAgICAqbmFtZTsgICAgICAgICAgICAgLyogY2hpcCBuYW1lICAgICAgICAgKi8KLQlpbnQgICAgICAgIGlkOyAgICAgICAgICAgICAgICAvKiBJRCAqLwogCWludCAgICAgICAgYWRkcl9sbywgYWRkcl9oaTsgIC8qIGkyYyBhZGRyZXNzIHJhbmdlICovCiAJaW50ICAgICAgICByZWdpc3RlcnM7ICAgICAgICAgLyogIyBvZiByZWdpc3RlcnMgICAgKi8KIApAQCAtMTI1Niw3ICsxMjU1LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgQ0hJUERFU0MgY2hpcGxpc3RbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgID0gInRkYTk4NDAiLAotCQkuaWQgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE5ODQwLAogCQkuaW5zbW9kb3B0ICA9ICZ0ZGE5ODQwLAogCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1REQTk4NDAgPj4gMSwKIAkJLmFkZHJfaGkgICAgPSBJMkNfQUREUl9UREE5ODQwID4+IDEsCkBAIC0xMjcyLDcgKzEyNzAsNiBAQAogCX0sCiAJewogCQkubmFtZSAgICAgICA9ICJ0ZGE5ODczaCIsCi0JCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1REQTk4NzMsCiAJCS5jaGVja2l0ICAgID0gdGRhOTg3M19jaGVja2l0LAogCQkuaW5zbW9kb3B0ICA9ICZ0ZGE5ODczLAogCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1REQTk4NXhfTCA+PiAxLApAQCAtMTI5Myw3ICsxMjkwLDYgQEAKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgPSAidGRhOTg3NGgvYSIsCi0JCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1REQTk4NzQsCiAJCS5jaGVja2l0ICAgID0gdGRhOTg3NGFfY2hlY2tpdCwKIAkJLmluaXRpYWxpemUgPSB0ZGE5ODc0YV9pbml0aWFsaXplLAogCQkuaW5zbW9kb3B0ICA9ICZ0ZGE5ODc0YSwKQEAgLTEzMDYsNyArMTMwMiw2IEBACiAJfSwKIAl7CiAJCS5uYW1lICAgICAgID0gInRkYTk4NTAiLAotCQkuaWQgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE5ODUwLAogCQkuaW5zbW9kb3B0ICA9ICZ0ZGE5ODUwLAogCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1REQTk4NXhfTCA+PiAxLAogCQkuYWRkcl9oaSAgICA9IEkyQ19BRERSX1REQTk4NXhfSCA+PiAxLApAQCAtMTMxOSw3ICsxMzE0LDYgQEAKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgPSAidGRhOTg1NSIsCi0JCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1REQTk4NTUsCiAJCS5pbnNtb2RvcHQgID0gJnRkYTk4NTUsCiAJCS5hZGRyX2xvICAgID0gSTJDX0FERFJfVERBOTg1eF9MID4+IDEsCiAJCS5hZGRyX2hpICAgID0gSTJDX0FERFJfVERBOTg1eF9IID4+IDEsCkBAIC0xMzQ0LDcgKzEzMzgsNiBAQAogCX0sCiAJewogCQkubmFtZSAgICAgICA9ICJ0ZWE2MzAwIiwKLQkJLmlkICAgICAgICAgPSBJMkNfRFJJVkVSSURfVEVBNjMwMCwKIAkJLmluc21vZG9wdCAgPSAmdGVhNjMwMCwKIAkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9URUE2MzAwID4+IDEsCiAJCS5hZGRyX2hpICAgID0gSTJDX0FERFJfVEVBNjMwMCA+PiAxLApAQCAtMTM2NSw3ICsxMzU4LDYgQEAKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgPSAidGVhNjMyMCIsCi0JCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1RFQTYzMDAsCiAJCS5pbml0aWFsaXplID0gdGVhNjMyMF9pbml0aWFsaXplLAogCQkuaW5zbW9kb3B0ICA9ICZ0ZWE2MzIwLAogCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1RFQTYzMDAgPj4gMSwKQEAgLTEzODcsNyArMTM3OSw2IEBACiAJfSwKIAl7CiAJCS5uYW1lICAgICAgID0gInRlYTY0MjAiLAotCQkuaWQgICAgICAgICA9IEkyQ19EUklWRVJJRF9URUE2NDIwLAogCQkuaW5zbW9kb3B0ICA9ICZ0ZWE2NDIwLAogCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1RFQTY0MjAgPj4gMSwKIAkJLmFkZHJfaGkgICAgPSBJMkNfQUREUl9URUE2NDIwID4+IDEsCkBAIC0xNDAwLDcgKzEzOTEsNiBAQAogCX0sCiAJewogCQkubmFtZSAgICAgICA9ICJ0ZGE4NDI1IiwKLQkJLmlkICAgICAgICAgPSBJMkNfRFJJVkVSSURfVERBODQyNSwKIAkJLmluc21vZG9wdCAgPSAmdGRhODQyNSwKIAkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9UREE4NDI1ID4+IDEsCiAJCS5hZGRyX2hpICAgID0gSTJDX0FERFJfVERBODQyNSA+PiAxLApAQCAtMTQyNCw3ICsxNDE0LDYgQEAKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgPSAicGljMTZjNTQgKFBWOTUxKSIsCi0JCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1BJQzE2QzU0X1BWOSwKIAkJLmluc21vZG9wdCAgPSAmcGljMTZjNTQsCiAJCS5hZGRyX2xvICAgID0gSTJDX0FERFJfUElDMTZDNTQgPj4gMSwKIAkJLmFkZHJfaGkgICAgPSBJMkNfQUREUl9QSUMxNkM1ND4+IDEsCkBAIC0xNDQwLDggKzE0MjksNiBAQAogCX0sCiAJewogCQkubmFtZSAgICAgICA9ICJ0YTg4NzR6IiwKLQkJLmlkICAgICAgICAgPSAtMSwKLQkJLyouaWQgICAgICAgICA9IEkyQ19EUklWRVJJRF9UQTg4NzRaLCAqLwogCQkuY2hlY2tpdCAgICA9IHRhODg3NHpfY2hlY2tpdCwKIAkJLmluc21vZG9wdCAgPSAmdGE4ODc0eiwKIAkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9UREE5ODQwID4+IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwppbmRleCBhOWM1ZTVhLi5hYmY2ODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKQEAgLTE2OSw3ICsxNjksNiBAQAogfQogCiAKLQogI2lmIEVOQUJMRV9IRVhEVU1QCiBzdGF0aWMgdm9pZCB1c2J2aXNpb25faGV4ZHVtcChjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKQogewpAQCAtMjMxNyw3ICsyMzE2LDYgQEAKIAlkZWxfdGltZXIoJnVzYnZpc2lvbi0+cG93ZXJPZmZUaW1lcik7CiAJSU5JVF9XT1JLKCZ1c2J2aXNpb24tPnBvd2VyT2ZmV29yaywgY2FsbF91c2J2aXNpb25fcG93ZXJfb2ZmKTsKIAkodm9pZCkgc2NoZWR1bGVfd29yaygmdXNidmlzaW9uLT5wb3dlck9mZldvcmspOwotCiB9CiAKIHZvaWQgdXNidmlzaW9uX2luaXRfcG93ZXJPZmZUaW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQpAQCAtMjUxOCw3ICsyNTE2LDYgQEAKIAkJfQogCX0KIAotCiAJLyogU3VibWl0IGFsbCBVUkJzICovCiAJZm9yIChidWZJZHggPSAwOyBidWZJZHggPCBVU0JWSVNJT05fTlVNU0JVRjsgYnVmSWR4KyspIHsKIAkJCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYih1c2J2aXNpb24tPnNidWZbYnVmSWR4XS51cmIsCkBAIC0yNTY0LDcgKzI1NjEsNiBAQAogCQl1c2J2aXNpb24tPnNidWZbYnVmSWR4XS51cmIgPSBOVUxMOwogCX0KIAotCiAJUERFQlVHKERCR19JU09DLCAiJXM6IHN0cmVhbWluZz1TdHJlYW1fT2ZmXG4iLCBfX2Z1bmNfXyk7CiAJdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBTdHJlYW1fT2ZmOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKaW5kZXggZTIyNzRkNy4uYTZkMDA4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwpAQCAtMTkwLDcgKzE5MCw2IEBACiAJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUwgfCBJMkNfRlVOQ18xMEJJVF9BRERSOwogfQogCi0KIC8qIC0tLS0tZXhwb3J0ZWQgYWxnb3JpdGhtIGRhdGE6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KIAogc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHVzYnZpc2lvbl9hbGdvID0gewpAQCAtNTE0LDExICs1MTMsNyBAQAogCS5pZCAgICAgICAgICAgICAgICA9IEkyQ19IV19CX0JUODQ4LCAvKiBGSVhNRSAqLwogCS5jbGllbnRfcmVnaXN0ZXIgICA9IGF0dGFjaF9pbmZvcm0sCiAJLmNsaWVudF91bnJlZ2lzdGVyID0gZGV0YWNoX2luZm9ybSwKLSNpZmRlZiBJMkNfQURBUF9DTEFTU19UVl9BTkFMT0cKLQkuY2xhc3MgICAgICAgICAgICAgPSBJMkNfQURBUF9DTEFTU19UVl9BTkFMT0csCi0jZWxzZQogCS5jbGFzcwkJICAgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudF90ZW1wbGF0ZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKaW5kZXggZDk3MjYxYS4uY2Q2YzQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKQEAgLTE3OSw3ICsxNzksNiBAQAogLyogICAvc3lzL2J1cy91c2IvZHJpdmVycy9VU0JWaXNpb24gVmlkZW8gR3JhYmJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0KICNkZWZpbmUgWUVTX05PKHgpICgoeCkgPyAiWWVzIiA6ICJObyIpCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl91c2J2aXNpb24gKmNkX3RvX3VzYnZpc2lvbihzdHJ1Y3QgZGV2aWNlICpjZCkKQEAgLTM3MCw3ICszNjksNiBAQAogCX0KIH0KIAotCiAvKgogICogdXNidmlzaW9uX29wZW4oKQogICoKQEAgLTM4OCw3ICszODYsNiBAQAogCiAJUERFQlVHKERCR19JTywgIm9wZW4iKTsKIAotCiAJdXNidmlzaW9uX3Jlc2V0X3Bvd2VyT2ZmVGltZXIodXNidmlzaW9uKTsKIAogCWlmICh1c2J2aXNpb24tPnVzZXIpCkBAIC00NDIsOSArNDM5LDYgQEAKIAkJbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCX0KIAotCWlmIChlcnJDb2RlKSB7Ci0JfQotCiAJLyogcHJlcGFyZSBxdWV1ZXMgKi8KIAl1c2J2aXNpb25fZW1wdHlfZnJhbWVxdWV1ZXModXNidmlzaW9uKTsKIApAQCAtNDk1LDggKzQ4OSw2IEBACiAJfQogCiAJUERFQlVHKERCR19JTywgInN1Y2Nlc3MiKTsKLQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk5OCw3ICs5OTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqdmZkKQogewogCWlmKHZmZC0+aW5kZXg+PVVTQlZJU0lPTl9TVVBQT1JURURfUEFMRVRURVMtMSkgewpAQCAtMTAxMiw3ICsxMDA0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19mbXRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKnZmKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CkBAIC0xMDMwLDcgKzEwMjIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY190cnlfZm10X2NhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqdmYpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKQEAgLTEwNjAsNyArMTA1Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICp2ZikKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwpAQCAtMTA2OCw3ICsxMDYwLDcgQEAKIAkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldDsKIAotCWlmKCAwICE9IChyZXQ9dmlkaW9jX3RyeV9mbXRfY2FwIChmaWxlLCBwcml2LCB2ZikpICkgeworCWlmKCAwICE9IChyZXQ9dmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAoZmlsZSwgcHJpdiwgdmYpKSApIHsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTEzNDYsOSArMTMzOCw3IEBACiAJCXVzYnZpc2lvbl9yZWxlYXNlKHVzYnZpc2lvbik7CiAJfQogCi0KIAlQREVCVUcoREJHX0lPLCAic3VjY2VzcyIpOwotCiAJcmV0dXJuIGVyckNvZGU7CiB9CiAKQEAgLTEzNjAsNyArMTM1MCw2IEBACiB7CiAJLyogVE9ETyAqLwogCXJldHVybiAtRU5PREVWOwotCiB9CiAKIHN0YXRpYyBpbnQgdXNidmlzaW9uX3ZiaV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE0MDcsMTAgKzEzOTYsMTAgQEAKIAkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAogCS5taW5vcgkJPSAtMSwKIAkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgPSB2aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF9jYXAgID0gdmlkaW9jX2VudW1fZm10X2NhcCwKLQkudmlkaW9jX2dfZm10X2NhcCAgICAgPSB2aWRpb2NfZ19mbXRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF9jYXAgICA9IHZpZGlvY190cnlfZm10X2NhcCwKLQkudmlkaW9jX3NfZm10X2NhcCAgICAgPSB2aWRpb2Nfc19mbXRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgICAgID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgICA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAogCS52aWRpb2NfcmVxYnVmcyAgICAgICA9IHZpZGlvY19yZXFidWZzLAogCS52aWRpb2NfcXVlcnlidWYgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKIAkudmlkaW9jX3FidWYgICAgICAgICAgPSB2aWRpb2NfcWJ1ZiwKQEAgLTE4OTksNyArMTg4OCw2IEBACiAJfQogCiAJUERFQlVHKERCR19QUk9CRSwgInN1Y2Nlc3MiKTsKLQogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNidmlzaW9uX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDk3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy9LY29uZmlnCkBAIC0wLDAgKzEsMTcgQEAKK2NvbmZpZyBVU0JfVklERU9fQ0xBU1MKKwl0cmlzdGF0ZSAiVVNCIFZpZGVvIENsYXNzIChVVkMpIgorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBVU0IgVmlkZW8gQ2xhc3MgKFVWQykuICBDdXJyZW50bHkgb25seSB2aWRlbworCSAgaW5wdXQgZGV2aWNlcywgc3VjaCBhcyB3ZWJjYW1zLCBhcmUgc3VwcG9ydGVkLgorCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6IDxodHRwOi8vbGludXgtdXZjLmJlcmxpb3MuZGUvPgorCitjb25maWcgVVNCX1ZJREVPX0NMQVNTX0lOUFVUX0VWREVWCisJYm9vbCAiVVZDIGlucHV0IGV2ZW50cyBkZXZpY2Ugc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFVTQl9WSURFT19DTEFTUyAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIG1ha2VzIFVTQiBWaWRlbyBDbGFzcyBkZXZpY2VzIHJlZ2lzdGVyIGFuIGlucHV0IGRldmljZQorCSAgdG8gcmVwb3J0IGJ1dHRvbiBldmVudHMuCisKKwkgIElmIHlvdSBhcmUgaW4gZG91YnQsIHNheSBZLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKaW5kZXggZjBlZTQ2ZC4uM2FlOTU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCkBAIC0xMjU0LDMgKzEyNTQsNCBAQAogCWZvciAoOyBtYXBwaW5nIDwgbWVuZDsgKyttYXBwaW5nKQogCQl1dmNfY3RybF9hZGRfbWFwcGluZyhtYXBwaW5nKTsKIH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCmluZGV4IDYwY2VkNTguLmYyYjI5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKQEAgLTI5OCw3ICsyOTgsOCBAQAogCXN3aXRjaCAoYnVmZmVyWzJdKSB7CiAJY2FzZSBWU19GT1JNQVRfVU5DT01QUkVTU0VEOgogCWNhc2UgVlNfRk9STUFUX0ZSQU1FX0JBU0VEOgotCQlpZiAoYnVmbGVuIDwgMjcpIHsKKwkJbiA9IGJ1ZmZlclsyXSA9PSBWU19GT1JNQVRfVU5DT01QUkVTU0VEID8gMjcgOiAyODsKKwkJaWYgKGJ1ZmxlbiA8IG4pIHsKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJkZXZpY2UgJWQgdmlkZW9zdHJlYW1pbmciCiAJCQkgICAgICAgImludGVyZmFjZSAlZCBGT1JNQVQgZXJyb3JcbiIsCiAJCQkgICAgICAgZGV2LT51ZGV2LT5kZXZudW0sCkBAIC0xNjMyLDEzICsxNjMzLDE2IEBACiAJICogcmVmZXJlbmNlIHRvIHRoZSB1dmNfZGV2aWNlIGluc3RhbmNlIGFmdGVyIHV2Y192NGwyX29wZW4oKSByZWNlaXZlZAogCSAqIHRoZSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgKHZpZGVvX2RldmRhdGEpIGJ1dCBiZWZvcmUgaXQgZ290IHRoZQogCSAqIGNoYW5jZSB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IChrcmVmX2dldCkuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIHJlZmVyZW5jZSBjYW4ndCBiZSByZWxlYXNlZCB3aXRoIHRoZSBsb2NrIGhlbGQsCisJICogb3RoZXJ3aXNlIGEgQUItQkEgZGVhZGxvY2sgY2FuIG9jY3VyIHdpdGggdmlkZW9kZXZfbG9jayB0aGF0CisJICogdmlkZW9kZXYgYWNxdWlyZXMgaW4gdmlkZW9kZXZfb3BlbigpIGFuZCB2aWRlb191bnJlZ2lzdGVyX2RldmljZSgpLgogCSAqLwogCW11dGV4X2xvY2soJnV2Y19kcml2ZXIub3Blbl9tdXRleCk7Ci0KIAlkZXYtPnN0YXRlIHw9IFVWQ19ERVZfRElTQ09OTkVDVEVEOwotCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHV2Y19kZWxldGUpOwotCiAJbXV0ZXhfdW5sb2NrKCZ1dmNfZHJpdmVyLm9wZW5fbXV0ZXgpOworCisJa3JlZl9wdXQoJmRldi0+a3JlZiwgdXZjX2RlbGV0ZSk7CiB9CiAKIHN0YXRpYyBpbnQgdXZjX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQpAQCAtMTgyNSw2ICsxODI5LDE1IEBACiAJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKIAkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAogCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19TVFJFQU1fTk9fRklEIH0sCisJLyogQXN1cyBGOVNHICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgxNzRmLAorCSAgLmlkUHJvZHVjdAkJPSAweDhhMzEsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAogCS8qIFN5bnRlayAoQXN1cyBVM1MpICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCkBAIC0xODkxLDYgKzE5MDQsMTUgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAorCS8qIE1lZGlvbiBBa295YSBNaW5pIEUxMjEwICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHg1OTg2LAorCSAgLmlkUHJvZHVjdAkJPSAweDAxNDEsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCiAJLyogQWNlciBPcmJpQ2FtIC0gVW5rbm93biB2ZW5kb3IgKi8KIAl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQogCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKQEAgLTE5NTMsMyArMTk3NSw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jCmluZGV4IDA5MjNmMGUuLjczODhkMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jCkBAIC00NzUsMyArNDc1LDQgQEAKIAl3YWtlX3VwKCZidWYtPndhaXQpOwogCXJldHVybiBuZXh0YnVmOwogfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMKaW5kZXggYmU5MDg0ZS4uNzVlNjc4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19zdGF0dXMuYwpAQCAtMjIsNiArMjIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIElucHV0IGRldmljZQogICovCisjaWZkZWYgQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVgogc3RhdGljIGludCB1dmNfaW5wdXRfaW5pdChzdHJ1Y3QgdXZjX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LT51ZGV2OwpAQCAtNjcsNiArNjgsMTkgQEAKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5pbnB1dCk7CiB9CiAKK3N0YXRpYyB2b2lkIHV2Y19pbnB1dF9yZXBvcnRfa2V5KHN0cnVjdCB1dmNfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjb2RlLAorCWludCB2YWx1ZSkKK3sKKwlpZiAoZGV2LT5pbnB1dCkKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYtPmlucHV0LCBjb2RlLCB2YWx1ZSk7Cit9CisKKyNlbHNlCisjZGVmaW5lIHV2Y19pbnB1dF9pbml0KGRldikKKyNkZWZpbmUgdXZjX2lucHV0X2NsZWFudXAoZGV2KQorI2RlZmluZSB1dmNfaW5wdXRfcmVwb3J0X2tleShkZXYsIGNvZGUsIHZhbHVlKQorI2VuZGlmIC8qIENPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVYgKi8KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFN0YXR1cyBpbnRlcnJ1cHQgZW5kcG9pbnQKICAqLwpAQCAtODMsOCArOTcsNyBAQAogCQkJcmV0dXJuOwogCQl1dmNfdHJhY2UoVVZDX1RSQUNFX1NUQVRVUywgIkJ1dHRvbiAoaW50ZiAldSkgJXMgbGVuICVkXG4iLAogCQkJZGF0YVsxXSwgZGF0YVszXSA/ICJwcmVzc2VkIiA6ICJyZWxlYXNlZCIsIGxlbik7Ci0JCWlmIChkZXYtPmlucHV0KQotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYtPmlucHV0LCBCVE5fMCwgZGF0YVszXSk7CisJCXV2Y19pbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzAsIGRhdGFbM10pOwogCX0gZWxzZSB7CiAJCXV2Y190cmFjZShVVkNfVFJBQ0VfU1RBVFVTLCAiU3RyZWFtICV1IGVycm9yIGV2ZW50ICUwMnggJTAyeCAiCiAJCQkibGVuICVkLlxuIiwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgbGVuKTsKQEAgLTIwMyw1ICsyMTYsNiBAQAogCWlmIChkZXYtPmludF91cmIgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRfdXJiLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm4gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRfdXJiLCBHRlBfTk9JTyk7CiB9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCmluZGV4IDJlMGE2NjUuLmI1YTExZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwpAQCAtMTAzMiw3ICsxMDMyLDcgQEAKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKLQlzdHJ1Y3QgdXZjX2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCB1dmNfYnVmZmVyICp1bmluaXRpYWxpemVkX3ZhcihidWZmZXIpOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgYWRkciwgc3RhcnQsIHNpemU7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xMTAzLDMgKzExMDMsNCBAQAogCS5tbWFwCQk9IHV2Y192NGwyX21tYXAsCiAJLnBvbGwJCT0gdXZjX3Y0bDJfcG9sbCwKIH07CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggNmZhZjFmYi4uYWQ2Mzc5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTU1NCw5ICs1NTQsNTYgQEAKIH0KIAogLyoKKyAqIEZyZWUgdHJhbnNmZXIgYnVmZmVycy4KKyAqLworc3RhdGljIHZvaWQgdXZjX2ZyZWVfdXJiX2J1ZmZlcnMoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKKwkJaWYgKHZpZGVvLT51cmJfYnVmZmVyW2ldKSB7CisJCQl1c2JfYnVmZmVyX2ZyZWUodmlkZW8tPmRldi0+dWRldiwgdmlkZW8tPnVyYl9zaXplLAorCQkJCXZpZGVvLT51cmJfYnVmZmVyW2ldLCB2aWRlby0+dXJiX2RtYVtpXSk7CisJCQl2aWRlby0+dXJiX2J1ZmZlcltpXSA9IE5VTEw7CisJCX0KKwl9CisKKwl2aWRlby0+dXJiX3NpemUgPSAwOworfQorCisvKgorICogQWxsb2NhdGUgdHJhbnNmZXIgYnVmZmVycy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdpdGggYnVmZmVycworICogYWxyZWFkeSBhbGxvY2F0ZWQgd2hlbiByZXN1bWluZyBmcm9tIHN1c3BlbmQsIGluIHdoaWNoIGNhc2UgaXQgd2lsbAorICogcmV0dXJuIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGJ1ZmZlcnMuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqLworc3RhdGljIGludCB1dmNfYWxsb2NfdXJiX2J1ZmZlcnMoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorCXVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBpOworCisJLyogQnVmZmVycyBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQsIGJhaWwgb3V0LiAqLworCWlmICh2aWRlby0+dXJiX3NpemUpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKKwkJdmlkZW8tPnVyYl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKHZpZGVvLT5kZXYtPnVkZXYsCisJCQlzaXplLCBHRlBfS0VSTkVMLCAmdmlkZW8tPnVyYl9kbWFbaV0pOworCQlpZiAodmlkZW8tPnVyYl9idWZmZXJbaV0gPT0gTlVMTCkgeworCQkJdXZjX2ZyZWVfdXJiX2J1ZmZlcnModmlkZW8pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwl2aWRlby0+dXJiX3NpemUgPSBzaXplOworCXJldHVybiAwOworfQorCisvKgogICogVW5pbml0aWFsaXplIGlzb2Nocm9ub3VzL2J1bGsgVVJCcyBhbmQgZnJlZSB0cmFuc2ZlciBidWZmZXJzLgogICovCi1zdGF0aWMgdm9pZCB1dmNfdW5pbml0X3ZpZGVvKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbykKK3N0YXRpYyB2b2lkIHV2Y191bmluaXRfdmlkZW8oc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLCBpbnQgZnJlZV9idWZmZXJzKQogewogCXN0cnVjdCB1cmIgKnVyYjsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTU2NiwxOSArNjEzLDEyIEBACiAJCQljb250aW51ZTsKIAogCQl1c2Jfa2lsbF91cmIodXJiKTsKLQkJLyogdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIGlzIG5vdCB0b3VjaGVkIGJ5IFVTQiBjb3JlLCBzbwotCQkgKiB3ZSBjYW4gdXNlIGl0IGhlcmUgYXMgdGhlIGJ1ZmZlciBsZW5ndGguCi0JCSAqLwotCQlpZiAodmlkZW8tPnVyYl9idWZmZXJbaV0pIHsKLQkJCXVzYl9idWZmZXJfZnJlZSh2aWRlby0+ZGV2LT51ZGV2LAotCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCQl2aWRlby0+dXJiX2J1ZmZlcltpXSwgdXJiLT50cmFuc2Zlcl9kbWEpOwotCQkJdmlkZW8tPnVyYl9idWZmZXJbaV0gPSBOVUxMOwotCQl9Ci0KIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCXZpZGVvLT51cmJbaV0gPSBOVUxMOwogCX0KKworCWlmIChmcmVlX2J1ZmZlcnMpCisJCXV2Y19mcmVlX3VyYl9idWZmZXJzKHZpZGVvKTsKIH0KIAogLyoKQEAgLTU4Niw3ICs2MjYsNyBAQAogICogaXMgZ2l2ZW4gYnkgdGhlIGVuZHBvaW50LgogICovCiBzdGF0aWMgaW50IHV2Y19pbml0X3ZpZGVvX2lzb2Moc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAotCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCB1cmIgKnVyYjsKIAl1bnNpZ25lZCBpbnQgbnBhY2tldHMsIGksIGo7CkBAIC02MTAsMTggKzY1MCwxMyBAQAogCiAJc2l6ZSA9IG5wYWNrZXRzICogcHNpemU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVVZDX1VSQlM7ICsraSkgewotCQl1cmIgPSB1c2JfYWxsb2NfdXJiKG5wYWNrZXRzLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHVyYiA9PSBOVUxMKSB7Ci0JCQl1dmNfdW5pbml0X3ZpZGVvKHZpZGVvKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9CisJaWYgKHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCQl2aWRlby0+dXJiX2J1ZmZlcltpXSA9IHVzYl9idWZmZXJfYWxsb2ModmlkZW8tPmRldi0+dWRldiwKLQkJCXNpemUsIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0JCWlmICh2aWRlby0+dXJiX2J1ZmZlcltpXSA9PSBOVUxMKSB7Ci0JCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJCXV2Y191bmluaXRfdmlkZW8odmlkZW8pOworCWZvciAoaSA9IDA7IGkgPCBVVkNfVVJCUzsgKytpKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIobnBhY2tldHMsIGdmcF9mbGFncyk7CisJCWlmICh1cmIgPT0gTlVMTCkgeworCQkJdXZjX3VuaW5pdF92aWRlbyh2aWRlbywgMSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCkBAIC02MzIsNiArNjY3LDcgQEAKIAkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCQl1cmItPmludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsOwogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHZpZGVvLT51cmJfYnVmZmVyW2ldOworCQl1cmItPnRyYW5zZmVyX2RtYSA9IHZpZGVvLT51cmJfZG1hW2ldOwogCQl1cmItPmNvbXBsZXRlID0gdXZjX3ZpZGVvX2NvbXBsZXRlOwogCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbnBhY2tldHM7CiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemU7CkBAIC02NTIsNyArNjg4LDcgQEAKICAqIGdpdmVuIGJ5IHRoZSBlbmRwb2ludC4KICAqLwogc3RhdGljIGludCB1dmNfaW5pdF92aWRlb19idWxrKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKLQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQorCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJdW5zaWduZWQgaW50IHBpcGUsIGk7CkBAIC02NzEsMjAgKzcwNywxNSBAQAogCWlmIChzaXplID4gcHNpemUgKiBVVkNfTUFYX0lTT19QQUNLRVRTKQogCQlzaXplID0gcHNpemUgKiBVVkNfTUFYX0lTT19QQUNLRVRTOwogCisJaWYgKHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUodmlkZW8tPmRldi0+dWRldiwgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVVZDX1VSQlM7ICsraSkgewotCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIGdmcF9mbGFncyk7CiAJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJdXZjX3VuaW5pdF92aWRlbyh2aWRlbyk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCXZpZGVvLT51cmJfYnVmZmVyW2ldID0gdXNiX2J1ZmZlcl9hbGxvYyh2aWRlby0+ZGV2LT51ZGV2LAotCQkJc2l6ZSwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKLQkJaWYgKHZpZGVvLT51cmJfYnVmZmVyW2ldID09IE5VTEwpIHsKLQkJCXVzYl9mcmVlX3VyYih1cmIpOwotCQkJdXZjX3VuaW5pdF92aWRlbyh2aWRlbyk7CisJCQl1dmNfdW5pbml0X3ZpZGVvKHZpZGVvLCAxKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKQEAgLTY5Miw2ICs3MjMsNyBAQAogCQkJdmlkZW8tPnVyYl9idWZmZXJbaV0sIHNpemUsIHV2Y192aWRlb19jb21wbGV0ZSwKIAkJCXZpZGVvKTsKIAkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQl1cmItPnRyYW5zZmVyX2RtYSA9IHZpZGVvLT51cmJfZG1hW2ldOwogCiAJCXZpZGVvLT51cmJbaV0gPSB1cmI7CiAJfQpAQCAtNzAyLDcgKzczNCw3IEBACiAvKgogICogSW5pdGlhbGl6ZSBpc29jaHJvbm91cy9idWxrIFVSQnMgYW5kIGFsbG9jYXRlIHRyYW5zZmVyIGJ1ZmZlcnMuCiAgKi8KLXN0YXRpYyBpbnQgdXZjX2luaXRfdmlkZW8oc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvKQorc3RhdGljIGludCB1dmNfaW5pdF92aWRlbyhzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHZpZGVvLT5zdHJlYW1pbmctPmludGY7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKQEAgLTc0Nyw3ICs3NzksNyBAQAogCQlpZiAoKHJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHZpZGVvLT5kZXYtPnVkZXYsIGludGZudW0sIGkpKSA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCXJldCA9IHV2Y19pbml0X3ZpZGVvX2lzb2ModmlkZW8sIGVwKTsKKwkJcmV0ID0gdXZjX2luaXRfdmlkZW9faXNvYyh2aWRlbywgZXAsIGdmcF9mbGFncyk7CiAJfSBlbHNlIHsKIAkJLyogQnVsayBlbmRwb2ludCwgcHJvY2VlZCB0byBVUkIgaW5pdGlhbGl6YXRpb24uICovCiAJCWVwID0gdXZjX2ZpbmRfZW5kcG9pbnQoJmludGYtPmFsdHNldHRpbmdbMF0sCkBAIC03NTUsNyArNzg3LDcgQEAKIAkJaWYgKGVwID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTzsKIAotCQlyZXQgPSB1dmNfaW5pdF92aWRlb19idWxrKHZpZGVvLCBlcCk7CisJCXJldCA9IHV2Y19pbml0X3ZpZGVvX2J1bGsodmlkZW8sIGVwLCBnZnBfZmxhZ3MpOwogCX0KIAogCWlmIChyZXQgPCAwKQpAQCAtNzYzLDEwICs3OTUsMTAgQEAKIAogCS8qIFN1Ym1pdCB0aGUgVVJCcy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgVVZDX1VSQlM7ICsraSkgewotCQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHZpZGVvLT51cmJbaV0sIEdGUF9LRVJORUwpKSA8IDApIHsKKwkJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYih2aWRlby0+dXJiW2ldLCBnZnBfZmxhZ3MpKSA8IDApIHsKIAkJCXV2Y19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gc3VibWl0IFVSQiAldSAiCiAJCQkJCSIoJWQpLlxuIiwgaSwgcmV0KTsKLQkJCXV2Y191bmluaXRfdmlkZW8odmlkZW8pOworCQkJdXZjX3VuaW5pdF92aWRlbyh2aWRlbywgMSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtNzkxLDcgKzgyMyw3IEBACiAJCXJldHVybiAwOwogCiAJdmlkZW8tPmZyb3plbiA9IDE7Ci0JdXZjX3VuaW5pdF92aWRlbyh2aWRlbyk7CisJdXZjX3VuaW5pdF92aWRlbyh2aWRlbywgMCk7CiAJdXNiX3NldF9pbnRlcmZhY2UodmlkZW8tPmRldi0+dWRldiwgdmlkZW8tPnN0cmVhbWluZy0+aW50Zm51bSwgMCk7CiAJcmV0dXJuIDA7CiB9CkBAIC04MTgsNyArODUwLDcgQEAKIAlpZiAoIXV2Y19xdWV1ZV9zdHJlYW1pbmcoJnZpZGVvLT5xdWV1ZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKChyZXQgPSB1dmNfaW5pdF92aWRlbyh2aWRlbykpIDwgMCkKKwlpZiAoKHJldCA9IHV2Y19pbml0X3ZpZGVvKHZpZGVvLCBHRlBfTk9JTykpIDwgMCkKIAkJdXZjX3F1ZXVlX2VuYWJsZSgmdmlkZW8tPnF1ZXVlLCAwKTsKIAogCXJldHVybiByZXQ7CkBAIC05MjAsNyArOTUyLDcgQEAKIAlpbnQgcmV0OwogCiAJaWYgKCFlbmFibGUpIHsKLQkJdXZjX3VuaW5pdF92aWRlbyh2aWRlbyk7CisJCXV2Y191bmluaXRfdmlkZW8odmlkZW8sIDEpOwogCQl1c2Jfc2V0X2ludGVyZmFjZSh2aWRlby0+ZGV2LT51ZGV2LAogCQkJdmlkZW8tPnN0cmVhbWluZy0+aW50Zm51bSwgMCk7CiAJCXV2Y19xdWV1ZV9lbmFibGUoJnZpZGVvLT5xdWV1ZSwgMCk7CkBAIC05MzAsNSArOTYyLDYgQEAKIAlpZiAoKHJldCA9IHV2Y19xdWV1ZV9lbmFibGUoJnZpZGVvLT5xdWV1ZSwgMSkpIDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiB1dmNfaW5pdF92aWRlbyh2aWRlbyk7CisJcmV0dXJuIHV2Y19pbml0X3ZpZGVvKHZpZGVvLCBHRlBfS0VSTkVMKTsKIH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKaW5kZXggYTk5NWE3OC4uYmFmZTM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCkBAIC02MDIsNiArNjAyLDggQEAKIAogCXN0cnVjdCB1cmIgKnVyYltVVkNfVVJCU107CiAJY2hhciAqdXJiX2J1ZmZlcltVVkNfVVJCU107CisJZG1hX2FkZHJfdCB1cmJfZG1hW1VWQ19VUkJTXTsKKwl1bnNpZ25lZCBpbnQgdXJiX3NpemU7CiAKIAlfX3U4IGxhc3RfZmlkOwogfTsKQEAgLTc5NCwzICs3OTYsNCBAQAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmMjBhYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCkBAIC0wLDAgKzEsNDE4IEBACisvKgorICogaGVscGVyIGZ1bmN0aW9ucyBmb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIGNhcHR1cmUgYnVmZmVycworICoKKyAqIFRoZSBmdW5jdGlvbnMgc3VwcG9ydCBoYXJkd2FyZSBsYWNraW5nIHNjYXR0ZXIgZ2F0aGVyIHN1cHBvcnQKKyAqIChpLmUuIHRoZSBidWZmZXJzIG11c3QgYmUgbGluZWFyIGluIHBoeXNpY2FsIG1lbW9yeSkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFnbnVzIERhbW0KKyAqCisgKiBCYXNlZCBvbiB2aWRlb2J1Zi12bWFsbG9jLmMsCisgKiAoYykgMjAwNyBNYXVybyBDYXJ2YWxobyBDaGVoYWIsIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorCitzdHJ1Y3QgdmlkZW9idWZfZG1hX2NvbnRpZ19tZW1vcnkgeworCXUzMiBtYWdpYzsKKwl2b2lkICp2YWRkcjsKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworI2RlZmluZSBNQUdJQ19EQ19NRU0gMHgwNzMzYWM2MQorI2RlZmluZSBNQUdJQ19DSEVDSyhpcywgc2hvdWxkKQkJCQkJCVwKKwlpZiAodW5saWtlbHkoKGlzKSAhPSAoc2hvdWxkKSkpCXsJCQkJXAorCQlwcl9lcnIoIm1hZ2ljIG1pc21hdGNoOiAleCBleHBlY3RlZCAleFxuIiwgaXMsIHNob3VsZCk7IFwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CisKK3N0YXRpYyB2b2lkCit2aWRlb2J1Zl92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCB2aWRlb2J1Zl9tYXBwaW5nICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKworCWRldl9kYmcobWFwLT5xLT5kZXYsICJ2bV9vcGVuICVwIFtjb3VudD0ldSx2bWE9JTA4bHgtJTA4bHhdXG4iLAorCQltYXAsIG1hcC0+Y291bnQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsKKworCW1hcC0+Y291bnQrKzsKK30KKworc3RhdGljIHZvaWQgdmlkZW9idWZfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHZpZGVvYnVmX21hcHBpbmcgKm1hcCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSA9IG1hcC0+cTsKKwlpbnQgaTsKKworCWRldl9kYmcobWFwLT5xLT5kZXYsICJ2bV9jbG9zZSAlcCBbY291bnQ9JXUsdm1hPSUwOGx4LSUwOGx4XVxuIiwKKwkJbWFwLCBtYXAtPmNvdW50LCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CisKKwltYXAtPmNvdW50LS07CisJaWYgKDAgPT0gbWFwLT5jb3VudCkgeworCQlzdHJ1Y3QgdmlkZW9idWZfZG1hX2NvbnRpZ19tZW1vcnkgKm1lbTsKKworCQlkZXZfZGJnKG1hcC0+cS0+ZGV2LCAibXVubWFwICVwIHE9JXBcbiIsIG1hcCwgcSk7CisJCW11dGV4X2xvY2soJnEtPnZiX2xvY2spOworCisJCS8qIFdlIG5lZWQgZmlyc3QgdG8gY2FuY2VsIHN0cmVhbXMsIGJlZm9yZSB1bm1hcHBpbmcgKi8KKwkJaWYgKHEtPnN0cmVhbWluZykKKwkJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbChxKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKKwkJCWlmIChOVUxMID09IHEtPmJ1ZnNbaV0pCisJCQkJY29udGludWU7CisKKwkJCWlmIChxLT5idWZzW2ldLT5tYXAgIT0gbWFwKQorCQkJCWNvbnRpbnVlOworCisJCQltZW0gPSBxLT5idWZzW2ldLT5wcml2OworCQkJaWYgKG1lbSkgeworCQkJCS8qIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIG9ubHkgaWYga2VybmVsIGhhcworCQkJCSAgIGFsbG9jYXRlZCBtZW1vcnkgYW5kIHRoaXMgbWVtb3J5IGlzIG1tYXBwZWQuCisJCQkJICAgSW4gdGhpcyBjYXNlLCBtZW1vcnkgc2hvdWxkIGJlIGZyZWVkLAorCQkJCSAgIGluIG9yZGVyIHRvIGRvIG1lbW9yeSB1bm1hcC4KKwkJCQkgKi8KKworCQkJCU1BR0lDX0NIRUNLKG1lbS0+bWFnaWMsIE1BR0lDX0RDX01FTSk7CisKKwkJCQkvKiB2ZnJlZSBpcyBub3QgYXRvbWljIC0gY2FuJ3QgYmUKKwkJCQkgICBjYWxsZWQgd2l0aCBJUlEncyBkaXNhYmxlZAorCQkJCSAqLworCQkJCWRldl9kYmcobWFwLT5xLT5kZXYsICJidWZbJWRdIGZyZWVpbmcgJXBcbiIsCisJCQkJCWksIG1lbS0+dmFkZHIpOworCisJCQkJZG1hX2ZyZWVfY29oZXJlbnQocS0+ZGV2LCBtZW0tPnNpemUsCisJCQkJCQkgIG1lbS0+dmFkZHIsIG1lbS0+ZG1hX2hhbmRsZSk7CisJCQkJbWVtLT52YWRkciA9IE5VTEw7CisJCQl9CisKKwkJCXEtPmJ1ZnNbaV0tPm1hcCAgID0gTlVMTDsKKwkJCXEtPmJ1ZnNbaV0tPmJhZGRyID0gMDsKKwkJfQorCisJCWtmcmVlKG1hcCk7CisKKwkJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0geworCS5vcGVuICAgICA9IHZpZGVvYnVmX3ZtX29wZW4sCisJLmNsb3NlICAgID0gdmlkZW9idWZfdm1fY2xvc2UsCit9OworCitzdGF0aWMgdm9pZCAqX192aWRlb2J1Zl9hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hX2NvbnRpZ19tZW1vcnkgKm1lbTsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKKworCXZiID0ga3phbGxvYyhzaXplICsgc2l6ZW9mKCptZW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAodmIpIHsKKwkJbWVtID0gdmItPnByaXYgPSAoKGNoYXIgKil2YikgKyBzaXplOworCQltZW0tPm1hZ2ljID0gTUFHSUNfRENfTUVNOworCX0KKworCXJldHVybiB2YjsKK30KKworc3RhdGljIHZvaWQgKl9fdmlkZW9idWZfdG9fdm1hbGxvYyhzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHZpZGVvYnVmX2RtYV9jb250aWdfbWVtb3J5ICptZW0gPSBidWYtPnByaXY7CisKKwlCVUdfT04oIW1lbSk7CisJTUFHSUNfQ0hFQ0sobWVtLT5tYWdpYywgTUFHSUNfRENfTUVNKTsKKworCXJldHVybiBtZW0tPnZhZGRyOworfQorCitzdGF0aWMgaW50IF9fdmlkZW9idWZfaW9sb2NrKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkgICAgIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYnVmKQoreworCXN0cnVjdCB2aWRlb2J1Zl9kbWFfY29udGlnX21lbW9yeSAqbWVtID0gdmItPnByaXY7CisKKwlCVUdfT04oIW1lbSk7CisJTUFHSUNfQ0hFQ0sobWVtLT5tYWdpYywgTUFHSUNfRENfTUVNKTsKKworCXN3aXRjaCAodmItPm1lbW9yeSkgeworCWNhc2UgVjRMMl9NRU1PUllfTU1BUDoKKwkJZGV2X2RiZyhxLT5kZXYsICIlcyBtZW1vcnkgbWV0aG9kIE1NQVBcbiIsIF9fZnVuY19fKTsKKworCQkvKiBBbGwgaGFuZGxpbmcgc2hvdWxkIGJlIGRvbmUgYnkgX192aWRlb2J1Zl9tbWFwX21hcHBlcigpICovCisJCWlmICghbWVtLT52YWRkcikgeworCQkJZGV2X2VycihxLT5kZXYsICJtZW1vcnkgaXMgbm90IGFsbG9jZWQvbW1hcHBlZC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgorCQlkZXZfZGJnKHEtPmRldiwgIiVzIG1lbW9yeSBtZXRob2QgVVNFUlBUUlxuIiwgX19mdW5jX18pOworCisJCS8qIFRoZSBvbmx5IFVTRVJQVFIgY3VycmVudGx5IHN1cHBvcnRlZCBpcyB0aGUgb25lIG5lZWRlZCBmb3IKKwkJICAgcmVhZCgpIG1ldGhvZC4KKwkJICovCisJCWlmICh2Yi0+YmFkZHIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltZW0tPnNpemUgPSBQQUdFX0FMSUdOKHZiLT5zaXplKTsKKwkJbWVtLT52YWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChxLT5kZXYsIG1lbS0+c2l6ZSwKKwkJCQkJCSZtZW0tPmRtYV9oYW5kbGUsIEdGUF9LRVJORUwpOworCQlpZiAoIW1lbS0+dmFkZHIpIHsKKwkJCWRldl9lcnIocS0+ZGV2LCAiZG1hX2FsbG9jX2NvaGVyZW50ICVsZCBmYWlsZWRcbiIsCisJCQkJCSBtZW0tPnNpemUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlkZXZfZGJnKHEtPmRldiwgImRtYV9hbGxvY19jb2hlcmVudCBkYXRhIGlzIGF0ICVwICglbGQpXG4iLAorCQkJbWVtLT52YWRkciwgbWVtLT5zaXplKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX01FTU9SWV9PVkVSTEFZOgorCWRlZmF1bHQ6CisJCWRldl9kYmcocS0+ZGV2LCAiJXMgbWVtb3J5IG1ldGhvZCBPVkVSTEFZL3Vua25vd25cbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fdmlkZW9idWZfc3luYyhzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHZpZGVvYnVmX2RtYV9jb250aWdfbWVtb3J5ICptZW0gPSBidWYtPnByaXY7CisKKwlCVUdfT04oIW1lbSk7CisJTUFHSUNfQ0hFQ0sobWVtLT5tYWdpYywgTUFHSUNfRENfTUVNKTsKKworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHEtPmRldiwgbWVtLT5kbWFfaGFuZGxlLCBtZW0tPnNpemUsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3ZpZGVvYnVmX21tYXBfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlkZXZfZGJnKHEtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7CisJCWlmIChxLT5idWZzW2ldICYmIHEtPmJ1ZnNbaV0tPm1hcCkKKwkJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX192aWRlb2J1Zl9tbWFwX21hcHBlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hX2NvbnRpZ19tZW1vcnkgKm1lbTsKKwlzdHJ1Y3QgdmlkZW9idWZfbWFwcGluZyAqbWFwOworCXVuc2lnbmVkIGludCBmaXJzdDsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCisJZGV2X2RiZyhxLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBsb29rIGZvciBmaXJzdCBidWZmZXIgdG8gbWFwICovCisJZm9yIChmaXJzdCA9IDA7IGZpcnN0IDwgVklERU9fTUFYX0ZSQU1FOyBmaXJzdCsrKSB7CisJCWlmICghcS0+YnVmc1tmaXJzdF0pCisJCQljb250aW51ZTsKKworCQlpZiAoVjRMMl9NRU1PUllfTU1BUCAhPSBxLT5idWZzW2ZpcnN0XS0+bWVtb3J5KQorCQkJY29udGludWU7CisJCWlmIChxLT5idWZzW2ZpcnN0XS0+Ym9mZiA9PSBvZmZzZXQpCisJCQlicmVhazsKKwl9CisJaWYgKFZJREVPX01BWF9GUkFNRSA9PSBmaXJzdCkgeworCQlkZXZfZGJnKHEtPmRldiwgImludmFsaWQgdXNlciBzcGFjZSBvZmZzZXQgW29mZnNldD0weCVseF1cbiIsCisJCQlvZmZzZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjcmVhdGUgbWFwcGluZyArIHVwZGF0ZSBidWZmZXIgbGlzdCAqLworCW1hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXApCisJCXJldHVybiAtRU5PTUVNOworCisJcS0+YnVmc1tmaXJzdF0tPm1hcCA9IG1hcDsKKwltYXAtPnN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwltYXAtPmVuZCA9IHZtYS0+dm1fZW5kOworCW1hcC0+cSA9IHE7CisKKwlxLT5idWZzW2ZpcnN0XS0+YmFkZHIgPSB2bWEtPnZtX3N0YXJ0OworCisJbWVtID0gcS0+YnVmc1tmaXJzdF0tPnByaXY7CisJQlVHX09OKCFtZW0pOworCU1BR0lDX0NIRUNLKG1lbS0+bWFnaWMsIE1BR0lDX0RDX01FTSk7CisKKwltZW0tPnNpemUgPSBQQUdFX0FMSUdOKHEtPmJ1ZnNbZmlyc3RdLT5ic2l6ZSk7CisJbWVtLT52YWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChxLT5kZXYsIG1lbS0+c2l6ZSwKKwkJCQkJJm1lbS0+ZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZW0tPnZhZGRyKSB7CisJCWRldl9lcnIocS0+ZGV2LCAiZG1hX2FsbG9jX2NvaGVyZW50IHNpemUgJWxkIGZhaWxlZFxuIiwKKwkJCW1lbS0+c2l6ZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldl9kYmcocS0+ZGV2LCAiZG1hX2FsbG9jX2NvaGVyZW50IGRhdGEgaXMgYXQgYWRkciAlcCAoc2l6ZSAlbGQpXG4iLAorCQltZW0tPnZhZGRyLCBtZW0tPnNpemUpOworCisJLyogVHJ5IHRvIHJlbWFwIG1lbW9yeSAqLworCisJc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwlzaXplID0gKHNpemUgPCBtZW0tPnNpemUpID8gc2l6ZSA6IG1lbS0+c2l6ZTsKKworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisJcmV0dmFsID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKKwkJCQkgbWVtLT5kbWFfaGFuZGxlID4+IFBBR0VfU0hJRlQsCisJCQkJIHNpemUsIHZtYS0+dm1fcGFnZV9wcm90KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIocS0+ZGV2LCAibW1hcDogcmVtYXAgZmFpbGVkIHdpdGggZXJyb3IgJWQuICIsIHJldHZhbCk7CisJCWRtYV9mcmVlX2NvaGVyZW50KHEtPmRldiwgbWVtLT5zaXplLAorCQkJCSAgbWVtLT52YWRkciwgbWVtLT5kbWFfaGFuZGxlKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl2bWEtPnZtX29wcyAgICAgICAgICA9ICZ2aWRlb2J1Zl92bV9vcHM7CisJdm1hLT52bV9mbGFncyAgICAgICB8PSBWTV9ET05URVhQQU5EOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gbWFwOworCisJZGV2X2RiZyhxLT5kZXYsICJtbWFwICVwOiBxPSVwICUwOGx4LSUwOGx4ICglbHgpIHBnb2ZmICUwOGx4IGJ1ZiAlZFxuIiwKKwkJbWFwLCBxLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJKGxvbmcgaW50KSBxLT5idWZzW2ZpcnN0XS0+YnNpemUsCisJCXZtYS0+dm1fcGdvZmYsIGZpcnN0KTsKKworCXZpZGVvYnVmX3ZtX29wZW4odm1hKTsKKworCXJldHVybiAwOworCitlcnJvcjoKKwlrZnJlZShtYXApOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IF9fdmlkZW9idWZfY29weV90b191c2VyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgICBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJCSAgIGludCBub25ibG9ja2luZykKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hX2NvbnRpZ19tZW1vcnkgKm1lbSA9IHEtPnJlYWRfYnVmLT5wcml2OworCXZvaWQgKnZhZGRyOworCisJQlVHX09OKCFtZW0pOworCU1BR0lDX0NIRUNLKG1lbS0+bWFnaWMsIE1BR0lDX0RDX01FTSk7CisJQlVHX09OKCFtZW0tPnZhZGRyKTsKKworCS8qIGNvcHkgdG8gdXNlcnNwYWNlICovCisJaWYgKGNvdW50ID4gcS0+cmVhZF9idWYtPnNpemUgLSBxLT5yZWFkX29mZikKKwkJY291bnQgPSBxLT5yZWFkX2J1Zi0+c2l6ZSAtIHEtPnJlYWRfb2ZmOworCisJdmFkZHIgPSBtZW0tPnZhZGRyOworCisJaWYgKGNvcHlfdG9fdXNlcihkYXRhLCB2YWRkciArIHEtPnJlYWRfb2ZmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IF9fdmlkZW9idWZfY29weV9zdHJlYW0oc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSAgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwgc2l6ZV90IHBvcywKKwkJCQkgIGludCB2YmloYWNrLCBpbnQgbm9uYmxvY2tpbmcpCit7CisJdW5zaWduZWQgaW50ICAqZmM7CisJc3RydWN0IHZpZGVvYnVmX2RtYV9jb250aWdfbWVtb3J5ICptZW0gPSBxLT5yZWFkX2J1Zi0+cHJpdjsKKworCUJVR19PTighbWVtKTsKKwlNQUdJQ19DSEVDSyhtZW0tPm1hZ2ljLCBNQUdJQ19EQ19NRU0pOworCisJaWYgKHZiaWhhY2spIHsKKwkJLyogZGlydHksIHVuZG9jdW1lbnRlZCBoYWNrIC0tIHBhc3MgdGhlIGZyYW1lIGNvdW50ZXIKKwkJCSogd2l0aGluIHRoZSBsYXN0IGZvdXIgYnl0ZXMgb2YgZWFjaCB2YmkgZGF0YSBibG9jay4KKwkJCSogV2UgbmVlZCB0aGF0IG9uZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisJCQkqIHRvIGFsbCB2YmkgZGVjb2Rpbmcgc29mdHdhcmUgb3V0IHRoZXJlIC4uLiAqLworCQlmYyA9ICh1bnNpZ25lZCBpbnQgKiltZW0tPnZhZGRyOworCQlmYyArPSAocS0+cmVhZF9idWYtPnNpemUgPj4gMikgLSAxOworCQkqZmMgPSBxLT5yZWFkX2J1Zi0+ZmllbGRfY291bnQgPj4gMTsKKwkJZGV2X2RiZyhxLT5kZXYsICJ2YmloYWNrOiAlZFxuIiwgKmZjKTsKKwl9CisKKwkvKiBjb3B5IHN0dWZmIHVzaW5nIHRoZSBjb21tb24gbWV0aG9kICovCisJY291bnQgPSBfX3ZpZGVvYnVmX2NvcHlfdG9fdXNlcihxLCBkYXRhLCBjb3VudCwgbm9uYmxvY2tpbmcpOworCisJaWYgKChjb3VudCA9PSAtRUZBVUxUKSAmJiAocG9zID09IDApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdHlwZV9vcHMgcW9wcyA9IHsKKwkubWFnaWMgICAgICAgID0gTUFHSUNfUVRZUEVfT1BTLAorCisJLmFsbG9jICAgICAgICA9IF9fdmlkZW9idWZfYWxsb2MsCisJLmlvbG9jayAgICAgICA9IF9fdmlkZW9idWZfaW9sb2NrLAorCS5zeW5jICAgICAgICAgPSBfX3ZpZGVvYnVmX3N5bmMsCisJLm1tYXBfZnJlZSAgICA9IF9fdmlkZW9idWZfbW1hcF9mcmVlLAorCS5tbWFwX21hcHBlciAgPSBfX3ZpZGVvYnVmX21tYXBfbWFwcGVyLAorCS52aWRlb19jb3B5X3RvX3VzZXIgPSBfX3ZpZGVvYnVmX2NvcHlfdG9fdXNlciwKKwkuY29weV9zdHJlYW0gID0gX192aWRlb2J1Zl9jb3B5X3N0cmVhbSwKKwkudm1hbGxvYyAgICAgID0gX192aWRlb2J1Zl90b192bWFsbG9jLAorfTsKKwordm9pZCB2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzICpvcHMsCisJCQkJICAgIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3BpbmxvY2tfdCAqaXJxbG9jaywKKwkJCQkgICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCisJCQkJICAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCwKKwkJCQkgICAgdW5zaWduZWQgaW50IG1zaXplLAorCQkJCSAgICB2b2lkICpwcml2KQoreworCXZpZGVvYnVmX3F1ZXVlX2NvcmVfaW5pdChxLCBvcHMsIGRldiwgaXJxbG9jaywgdHlwZSwgZmllbGQsIG1zaXplLAorCQkJCSBwcml2LCAmcW9wcyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQpOworCitkbWFfYWRkcl90IHZpZGVvYnVmX3RvX2RtYV9jb250aWcoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2aWRlb2J1Zl9kbWFfY29udGlnX21lbW9yeSAqbWVtID0gYnVmLT5wcml2OworCisJQlVHX09OKCFtZW0pOworCU1BR0lDX0NIRUNLKG1lbS0+bWFnaWMsIE1BR0lDX0RDX01FTSk7CisKKwlyZXR1cm4gbWVtLT5kbWFfaGFuZGxlOworfQorRVhQT1JUX1NZTUJPTF9HUEwodmlkZW9idWZfdG9fZG1hX2NvbnRpZyk7CisKK3ZvaWQgdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hX2NvbnRpZ19tZW1vcnkgKm1lbSA9IGJ1Zi0+cHJpdjsKKworCS8qIG1tYXBwZWQgbWVtb3J5IGNhbid0IGJlIGZyZWVkIGhlcmUsIG90aGVyd2lzZSBtbWFwcGVkIHJlZ2lvbgorCSAgIHdvdWxkIGJlIHJlbGVhc2VkLCB3aGlsZSBzdGlsbCBuZWVkZWQuIEluIHRoaXMgY2FzZSwgdGhlIG1lbW9yeQorCSAgIHJlbGVhc2Ugc2hvdWxkIGhhcHBlbiBpbnNpZGUgdmlkZW9idWZfdm1fY2xvc2UoKS4KKwkgICBTbywgaXQgc2hvdWxkIGZyZWUgbWVtb3J5IG9ubHkgaWYgdGhlIG1lbW9yeSB3ZXJlIGFsbG9jYXRlZCBmb3IKKwkgICByZWFkKCkgb3BlcmF0aW9uLgorCSAqLworCWlmICgoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfVVNFUlBUUikgfHwgIWJ1Zi0+YmFkZHIpCisJCXJldHVybjsKKworCWlmICghbWVtKQorCQlyZXR1cm47CisKKwlNQUdJQ19DSEVDSyhtZW0tPm1hZ2ljLCBNQUdJQ19EQ19NRU0pOworCisJZG1hX2ZyZWVfY29oZXJlbnQocS0+ZGV2LCBtZW0tPnNpemUsIG1lbS0+dmFkZHIsIG1lbS0+ZG1hX2hhbmRsZSk7CisJbWVtLT52YWRkciA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oImhlbHBlciBtb2R1bGUgdG8gbWFuYWdlIHZpZGVvNGxpbnV4IGRtYSBjb250aWcgYnVmZmVycyIpOworTU9EVUxFX0FVVEhPUigiTWFnbnVzIERhbW0iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCmluZGV4IDAzYTdiOTQuLmJjNmQ1YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBoZWxwZXIgZnVuY3Rpb25zIGZvciBTRyBETUEgdmlkZW80bGludXggY2FwdHVyZSBidWZmZXJzCiAgKgotICogVGhlIGZ1bmN0aW9ucyBleHBlY3QgdGhlIGhhcmR3YXJlIGJlaW5nIGFibGUgdG8gc2NhdHRlciBnYXR0ZXIKKyAqIFRoZSBmdW5jdGlvbnMgZXhwZWN0IHRoZSBoYXJkd2FyZSBiZWluZyBhYmxlIHRvIHNjYXR0ZXIgZ2F0aGVyCiAgKiAoaS5lLiB0aGUgYnVmZmVycyBhcmUgbm90IGxpbmVhciBpbiBwaHlzaWNhbCBtZW1vcnksIGJ1dCBmcmFnbWVudGVkCiAgKiBpbnRvIFBBR0VfU0laRSBjaHVua3MpLiAgVGhleSBhbHNvIGFzc3VtZSB0aGUgZHJpdmVyIGRvZXMgbm90IG5lZWQKICAqIHRvIHRvdWNoIHRoZSB2aWRlbyBkYXRhLgpAQCAtODAsMTcgKzgwLDE1IEBACiB2aWRlb2J1Zl9wYWdlc190b19zZyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsIGludCBvZmZzZXQpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3Q7Ci0JaW50IGkgPSAwOworCWludCBpOwogCiAJaWYgKE5VTEwgPT0gcGFnZXNbMF0pCiAJCXJldHVybiBOVUxMOwotCXNnbGlzdCA9IGtjYWxsb2MobnJfcGFnZXMsIHNpemVvZigqc2dsaXN0KSwgR0ZQX0tFUk5FTCk7CisJc2dsaXN0ID0ga21hbGxvYyhucl9wYWdlcyAqIHNpemVvZigqc2dsaXN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKE5VTEwgPT0gc2dsaXN0KQogCQlyZXR1cm4gTlVMTDsKIAlzZ19pbml0X3RhYmxlKHNnbGlzdCwgbnJfcGFnZXMpOwogCi0JaWYgKE5VTEwgPT0gcGFnZXNbMF0pCi0JCWdvdG8gbm9wYWdlOwogCWlmIChQYWdlSGlnaE1lbShwYWdlc1swXSkpCiAJCS8qIERNQSB0byBoaWdobWVtIHBhZ2VzIG1pZ2h0IG5vdCB3b3JrICovCiAJCWdvdG8gaGlnaG1lbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWR2Yi5jCmluZGV4IDZlNGQ3M2UuLmI1NmNmZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kdmIuYwpAQCAtMTMsNyArMTMsNiBAQAogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yNTcsNCArMjU2LDMgQEAKICAqIGNvbXBpbGUtY29tbWFuZDogIm1ha2UgRFZCPTEiCiAgKiBFbmQ6CiAgKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwppbmRleCBjOTFlMWQ4Li5hODY4YjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBoZWxwZXIgZnVuY3Rpb25zIGZvciB2bWFsbG9jIHZpZGVvNGxpbnV4IGNhcHR1cmUgYnVmZmVycwogICoKLSAqIFRoZSBmdW5jdGlvbnMgZXhwZWN0IHRoZSBoYXJkd2FyZSBiZWluZyBhYmxlIHRvIHNjYXR0ZXIgZ2F0dGVyCisgKiBUaGUgZnVuY3Rpb25zIGV4cGVjdCB0aGUgaGFyZHdhcmUgYmVpbmcgYWJsZSB0byBzY2F0dGVyIGdhdGhlcgogICogKGkuZS4gdGhlIGJ1ZmZlcnMgYXJlIG5vdCBsaW5lYXIgaW4gcGh5c2ljYWwgbWVtb3J5LCBidXQgZnJhZ21lbnRlZAogICogaW50byBQQUdFX1NJWkUgY2h1bmtzKS4gIFRoZXkgYWxzbyBhc3N1bWUgdGhlIGRyaXZlciBkb2VzIG5vdCBuZWVkCiAgKiB0byB0b3VjaCB0aGUgdmlkZW8gZGF0YS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYwppbmRleCA3NjQ5ODYwLi42NjE2ZTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCkBAIC0xNywxNSArMTcsMTkgQEAKICAqLwogCiAjZGVmaW5lIGRiZ2FyZyhjbWQsIGZtdCwgYXJnLi4uKSBcCi0JCWlmICh2ZmQtPmRlYnVnICYgVjRMMl9ERUJVR19JT0NUTF9BUkcpIHsJCVwKKwkJZG8gewkJCQkJCQlcCisJCSAgICBpZiAodmZkLT5kZWJ1ZyAmIFY0TDJfREVCVUdfSU9DVExfQVJHKSB7CQlcCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIsICB2ZmQtPm5hbWUpOwkJXAogCQkJdjRsX3ByaW50a19pb2N0bChjbWQpOwkJCQlcCiAJCQlwcmludGsoIiAiIGZtdCwgICMjIGFyZyk7CQkJXAotCQl9CisJCSAgICB9CQkJCQkJCVwKKwkJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBkYmdhcmcyKGZtdCwgYXJnLi4uKSBcCi0JCWlmICh2ZmQtPmRlYnVnICYgVjRMMl9ERUJVR19JT0NUTF9BUkcpCQkJXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgdmZkLT5uYW1lLCAjIyBhcmcpOworCQlkbyB7CQkJCQkJCVwKKwkJICAgIGlmICh2ZmQtPmRlYnVnICYgVjRMMl9ERUJVR19JT0NUTF9BUkcpCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCB2ZmQtPm5hbWUsICMjIGFyZyk7XAorCQl9IHdoaWxlICgwKQogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTEzOCw3ICsxNDIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHNvbWUgYXJyYXlzIGZvciBwcmV0dHktcHJpbnRpbmcgZGVidWcgbWVzc2FnZXMgb2YgZW51bSB0eXBlcyAgICAgICovCiAKLWNoYXIgKnY0bDJfZmllbGRfbmFtZXNbXSA9IHsKK2NvbnN0IGNoYXIgKnY0bDJfZmllbGRfbmFtZXNbXSA9IHsKIAlbVjRMMl9GSUVMRF9BTlldICAgICAgICA9ICJhbnkiLAogCVtWNEwyX0ZJRUxEX05PTkVdICAgICAgID0gIm5vbmUiLAogCVtWNEwyX0ZJRUxEX1RPUF0gICAgICAgID0gInRvcCIsCkBAIC0xNTIsMTkgKzE1NiwxOSBAQAogfTsKIEVYUE9SVF9TWU1CT0wodjRsMl9maWVsZF9uYW1lcyk7CiAKLWNoYXIgKnY0bDJfdHlwZV9uYW1lc1tdID0gewotCVtWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVdICAgICAgPSAidmlkZW8tY2FwIiwKLQlbVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZXSAgICAgID0gInZpZGVvLW92ZXIiLAotCVtWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF0gICAgICAgPSAidmlkZW8tb3V0IiwKK2NvbnN0IGNoYXIgKnY0bDJfdHlwZV9uYW1lc1tdID0geworCVtWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVdICAgICAgPSAidmlkLWNhcCIsCisJW1Y0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWV0gICAgICA9ICJ2aWQtb3ZlcmxheSIsCisJW1Y0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUXSAgICAgICA9ICJ2aWQtb3V0IiwKIAlbVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRV0gICAgICAgID0gInZiaS1jYXAiLAogCVtWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVRdICAgICAgICAgPSAidmJpLW91dCIsCiAJW1Y0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFXSA9ICJzbGljZWQtdmJpLWNhcCIsCiAJW1Y0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVRdICA9ICJzbGljZWQtdmJpLW91dCIsCi0JW1Y0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVldID0gInZpZGVvLW91dC1vdmVyIiwKKwlbVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWV0gPSAidmlkLW91dC1vdmVybGF5IiwKIH07CiBFWFBPUlRfU1lNQk9MKHY0bDJfdHlwZV9uYW1lcyk7CiAKLXN0YXRpYyBjaGFyICp2NGwyX21lbW9yeV9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKnY0bDJfbWVtb3J5X25hbWVzW10gPSB7CiAJW1Y0TDJfTUVNT1JZX01NQVBdICAgID0gIm1tYXAiLAogCVtWNEwyX01FTU9SWV9VU0VSUFRSXSA9ICJ1c2VycHRyIiwKIAlbVjRMMl9NRU1PUllfT1ZFUkxBWV0gPSAib3ZlcmxheSIsCkBAIC0yNzgsNiArMjgyLDcgQEAKIAlbX0lPQ19OUihWSURJT0NfREJHX0dfUkVHSVNURVIpXSAgID0gIlZJRElPQ19EQkdfR19SRUdJU1RFUiIsCiAKIAlbX0lPQ19OUihWSURJT0NfR19DSElQX0lERU5UKV0gICAgID0gIlZJRElPQ19HX0NISVBfSURFTlQiLAorCVtfSU9DX05SKFZJRElPQ19TX0hXX0ZSRVFfU0VFSyldICAgPSAiVklESU9DX1NfSFdfRlJFUV9TRUVLIiwKICNlbmRpZgogfTsKICNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lvY3RscykKQEAgLTM3MSw2ICszNzYsMTQgQEAKICAqCXN5c2ZzIHN0dWZmCiAgKi8KIAorc3RhdGljIHNzaXplX3Qgc2hvd19pbmRleChzdHJ1Y3QgZGV2aWNlICpjZCwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwKKwkJCQkJCWNsYXNzX2Rldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHZmZC0+aW5kZXgpOworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqY2QsCiAJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTM3OSw2ICszOTIsMTIgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlLipzXG4iLCAoaW50KXNpemVvZih2ZmQtPm5hbWUpLCB2ZmQtPm5hbWUpOwogfQogCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdmlkZW9fZGV2aWNlX2F0dHJzW10gPSB7CisJX19BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCksCisJX19BVFRSKGluZGV4LCBTX0lSVUdPLCBzaG93X2luZGV4LCBOVUxMKSwKKwlfX0FUVFJfTlVMTAorfTsKKwogc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlX2FsbG9jKHZvaWQpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOwpAQCAtNDA3LDExICs0MjYsNiBAQAogCXZmZC0+cmVsZWFzZSh2ZmQpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdmlkZW9fZGV2aWNlX2F0dHJzW10gPSB7Ci0JX19BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCksCi0JX19BVFRSX05VTEwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgdmlkZW9fY2xhc3MgPSB7CiAJLm5hbWUgICAgPSBWSURFT19OQU1FLAogCS5kZXZfYXR0cnMgPSB2aWRlb19kZXZpY2VfYXR0cnMsCkBAIC02NTAsNyArNjY0LDcgQEAKIAkJCXAtPmZpZWxkLCBwLT5zZXF1ZW5jZSwKIAkJCXBydF9uYW1lcyhwLT5tZW1vcnksIHY0bDJfbWVtb3J5X25hbWVzKSwKIAkJCXAtPm0udXNlcnB0ciwgcC0+bGVuZ3RoKTsKLQlkYmdhcmcyICgidGltZWNvZGU9ICUwMmQ6JTAyZDolMDJkIHR5cGU9JWQsICIKKwlkYmdhcmcyKCJ0aW1lY29kZT0lMDJkOiUwMmQ6JTAyZCB0eXBlPSVkLCAiCiAJCSJmbGFncz0weCUwOGQsIGZyYW1lcz0lZCwgdXNlcmJpdHM9MHglMDh4XG4iLAogCQkJdGMtPmhvdXJzLHRjLT5taW51dGVzLHRjLT5zZWNvbmRzLAogCQkJdGMtPnR5cGUsIHRjLT5mbGFncywgdGMtPmZyYW1lcywgKihfX3UzMiAqKSB0Yy0+dXNlcmJpdHMpOwpAQCAtNjU5LDcgKzY3Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGJncmVjdChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsIGNoYXIgKnMsCiAJCQkJCQkJc3RydWN0IHY0bDJfcmVjdCAqcikKIHsKLQlkYmdhcmcyICgiJXNSZWN0IHN0YXJ0IGF0ICVkeCVkLCBzaXplPSAlZHglZFxuIiwgcywgci0+bGVmdCwgci0+dG9wLAorCWRiZ2FyZzIoIiVzUmVjdCBzdGFydCBhdCAlZHglZCwgc2l6ZT0lZHglZFxuIiwgcywgci0+bGVmdCwgci0+dG9wLAogCQkJCQkJci0+d2lkdGgsIHItPmhlaWdodCk7CiB9OwogCkBAIC02NzcsNDAgKzY5MSw4NSBAQAogCQlmbXQtPmJ5dGVzcGVybGluZSwgZm10LT5zaXplaW1hZ2UsIGZtdC0+Y29sb3JzcGFjZSk7CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgdjRsX3ByaW50X2V4dF9jdHJscyh1bnNpZ25lZCBpbnQgY21kLAorCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjLCBpbnQgc2hvd192YWxzKQoreworCV9fdTMyIGk7CisKKwlpZiAoISh2ZmQtPmRlYnVnICYgVjRMMl9ERUJVR19JT0NUTF9BUkcpKQorCQlyZXR1cm47CisJZGJnYXJnKGNtZCwgIiIpOworCXByaW50ayhLRVJOX0NPTlQgImNsYXNzPTB4JXgiLCBjLT5jdHJsX2NsYXNzKTsKKwlmb3IgKGkgPSAwOyBpIDwgYy0+Y291bnQ7IGkrKykgeworCQlpZiAoc2hvd192YWxzKQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiIGlkL3ZhbD0weCV4LzB4JXgiLAorCQkJCWMtPmNvbnRyb2xzW2ldLmlkLCBjLT5jb250cm9sc1tpXS52YWx1ZSk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0NPTlQgIiBpZD0weCV4IiwgYy0+Y29udHJvbHNbaV0uaWQpOworCX0KKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworfTsKKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqYywgaW50IGFsbG93X3ByaXYpCit7CisJX191MzIgaTsKKworCS8qIHplcm8gdGhlIHJlc2VydmVkIGZpZWxkcyAqLworCWMtPnJlc2VydmVkWzBdID0gYy0+cmVzZXJ2ZWRbMV0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudDsgaSsrKSB7CisJCWMtPmNvbnRyb2xzW2ldLnJlc2VydmVkMlswXSA9IDA7CisJCWMtPmNvbnRyb2xzW2ldLnJlc2VydmVkMlsxXSA9IDA7CisJfQorCS8qIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSBjYW5ub3QgYmUgdXNlZCBhcyBjb250cm9sIGNsYXNzCisJICAgd2hlbiB1c2luZyBleHRlbmRlZCBjb250cm9scy4KKwkgICBPbmx5IHdoZW4gcGFzc2VkIGluIHRocm91Z2ggVklESU9DX0dfQ1RSTCBhbmQgVklESU9DX1NfQ1RSTAorCSAgIGlzIGl0IGFsbG93ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCSAqLworCWlmICghYWxsb3dfcHJpdiAmJiBjLT5jdHJsX2NsYXNzID09IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSkKKwkJcmV0dXJuIDA7CisJLyogQ2hlY2sgdGhhdCBhbGwgY29udHJvbHMgYXJlIGZyb20gdGhlIHNhbWUgY29udHJvbCBjbGFzcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgYy0+Y291bnQ7IGkrKykgeworCQlpZiAoVjRMMl9DVFJMX0lEMkNMQVNTKGMtPmNvbnRyb2xzW2ldLmlkKSAhPSBjLT5jdHJsX2NsYXNzKSB7CisJCQljLT5lcnJvcl9pZHggPSBpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CiAKIHN0YXRpYyBpbnQgY2hlY2tfZm10IChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogewogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF9jYXApCisJCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X3ZpZF9jYXApCiAJCQlyZXR1cm4gKDApOwogCQlicmVhazsKIAljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJaWYgKHZmZC0+dmlkaW9jX3RyeV9mbXRfb3ZlcmxheSkKLQkJCXJldHVybiAoMCk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQkJaWYgKHZmZC0+dmlkaW9jX3RyeV9mbXRfdmJpKQotCQkJcmV0dXJuICgwKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUOgotCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF92Ymlfb3V0cHV0KQotCQkJcmV0dXJuICgwKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQkJaWYgKHZmZC0+dmlkaW9jX3RyeV9mbXRfdmJpX2NhcHR1cmUpCisJCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5KQogCQkJcmV0dXJuICgwKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQkJaWYgKHZmZC0+dmlkaW9jX3RyeV9mbXRfdmlkZW9fb3V0cHV0KQotCQkJcmV0dXJuICgwKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVQ6Ci0JCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X3ZiaV9vdXRwdXQpCisJCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X3ZpZF9vdXQpCiAJCQlyZXR1cm4gKDApOwogCQlicmVhazsKIAljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVk6Ci0JCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X291dHB1dF9vdmVybGF5KQorCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF92aWRfb3V0X292ZXJsYXkpCisJCQlyZXR1cm4gKDApOworCQlicmVhazsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6CisJCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X3ZiaV9jYXApCisJCQlyZXR1cm4gKDApOworCQlicmVhazsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDoKKwkJaWYgKHZmZC0+dmlkaW9jX3RyeV9mbXRfdmJpX291dCkKKwkJCXJldHVybiAoMCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6CisJCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X3NsaWNlZF92YmlfY2FwKQorCQkJcmV0dXJuICgwKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUOgorCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF9zbGljZWRfdmJpX291dCkKIAkJCXJldHVybiAoMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9CVUZfVFlQRV9QUklWQVRFOgpAQCAtODI3LDQ2ICs4ODYsMzcgQEAKIAogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCQlpZiAodmZkLT52aWRpb2NfZW51bV9mbXRfY2FwKQotCQkJCXJldD12ZmQtPnZpZGlvY19lbnVtX2ZtdF9jYXAoZmlsZSwgZmgsIGYpOworCQkJaWYgKHZmZC0+dmlkaW9jX2VudW1fZm10X3ZpZF9jYXApCisJCQkJcmV0ID0gdmZkLT52aWRpb2NfZW51bV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQlpZiAodmZkLT52aWRpb2NfZW51bV9mbXRfb3ZlcmxheSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZW51bV9mbXRfb3ZlcmxheShmaWxlLCBmaCwgZik7CisJCQlpZiAodmZkLT52aWRpb2NfZW51bV9mbXRfdmlkX292ZXJsYXkpCisJCQkJcmV0ID0gdmZkLT52aWRpb2NfZW51bV9mbXRfdmlkX292ZXJsYXkoZmlsZSwKKwkJCQkJZmgsIGYpOwogCQkJYnJlYWs7CisjaWYgMQorCQkvKiBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFIHNob3VsZCBub3Qgc3VwcG9ydCBWSURJT0NfRU5VTV9GTVQKKwkJICogYWNjb3JkaW5nIHRvIHRoZSBzcGVjLiBUaGUgYnR0diBhbmQgc2FhNzEzNCBkcml2ZXJzIHN1cHBvcnQKKwkJICogaXQgdGhvdWdoLCBzbyBqdXN0IHdhcm4gdGhhdCB0aGlzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUKKwkJICogcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUuICovCiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQkJCWlmICh2ZmQtPnZpZGlvY19lbnVtX2ZtdF92YmkpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX2VudW1fZm10X3ZiaShmaWxlLCBmaCwgZik7CisJCQlpZiAodmZkLT52aWRpb2NfZW51bV9mbXRfdmJpX2NhcCkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGlvY19lbnVtX2ZtdF92YmlfY2FwIHdpbGwgYmUgcmVtb3ZlZCBpbiAyLjYuMjghXG4iKTsKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19lbnVtX2ZtdF92YmlfY2FwKGZpbGUsIGZoLCBmKTsKKwkJCX0KIAkJCWJyZWFrOwotCQljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ6Ci0JCQlpZiAodmZkLT52aWRpb2NfZW51bV9mbXRfdmJpX291dHB1dCkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZW51bV9mbXRfdmJpX291dHB1dChmaWxlLAotCQkJCQkJCQlmaCwgZik7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQkJCWlmICh2ZmQtPnZpZGlvY19lbnVtX2ZtdF92YmlfY2FwdHVyZSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZW51bV9mbXRfdmJpX2NhcHR1cmUoZmlsZSwKLQkJCQkJCQkJZmgsIGYpOwotCQkJYnJlYWs7CisjZW5kaWYKIAkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQkJCWlmICh2ZmQtPnZpZGlvY19lbnVtX2ZtdF92aWRlb19vdXRwdXQpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX2VudW1fZm10X3ZpZGVvX291dHB1dChmaWxlLAotCQkJCQkJCQlmaCwgZik7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVQ6Ci0JCQlpZiAodmZkLT52aWRpb2NfZW51bV9mbXRfdmJpX291dHB1dCkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZW51bV9mbXRfdmJpX291dHB1dChmaWxlLAotCQkJCQkJCQlmaCwgZik7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9PVkVSTEFZOgotCQkJaWYgKHZmZC0+dmlkaW9jX2VudW1fZm10X291dHB1dF9vdmVybGF5KQotCQkJCXJldD12ZmQtPnZpZGlvY19lbnVtX2ZtdF9vdXRwdXRfb3ZlcmxheShmaWxlLCBmaCwgZik7CisJCQlpZiAodmZkLT52aWRpb2NfZW51bV9mbXRfdmlkX291dCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0KGZpbGUsIGZoLCBmKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfQlVGX1RZUEVfUFJJVkFURToKIAkJCWlmICh2ZmQtPnZpZGlvY19lbnVtX2ZtdF90eXBlX3ByaXZhdGUpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX2VudW1fZm10X3R5cGVfcHJpdmF0ZShmaWxlLAorCQkJCXJldCA9IHZmZC0+dmlkaW9jX2VudW1fZm10X3R5cGVfcHJpdmF0ZShmaWxlLAogCQkJCQkJCQlmaCwgZik7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOwogCQl9CiAJCWlmICghcmV0KQogCQkJZGJnYXJnIChjbWQsICJpbmRleD0lZCwgdHlwZT0lZCwgZmxhZ3M9JWQsICIKQEAgLTg4Miw1NCArOTMyLDU2IEBACiAJY2FzZSBWSURJT0NfR19GTVQ6CiAJewogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnOwotCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZT1mLT50eXBlOwogCi0JCW1lbXNldCgmZi0+Zm10LnBpeCwwLHNpemVvZihmLT5mbXQucGl4KSk7Ci0JCWYtPnR5cGU9dHlwZTsKKwkJbWVtc2V0KGYtPmZtdC5yYXdfZGF0YSwgMCwgc2l6ZW9mKGYtPmZtdC5yYXdfZGF0YSkpOwogCiAJCS8qIEZJWE1FOiBTaG91bGQgYmUgb25lIGR1bXAgcGVyIHR5cGUgKi8KLQkJZGJnYXJnIChjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXModHlwZSwKLQkJCQkJdjRsMl90eXBlX25hbWVzKSk7CisJCWRiZ2FyZyhjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMoZi0+dHlwZSwgdjRsMl90eXBlX25hbWVzKSk7CiAKLQkJc3dpdGNoICh0eXBlKSB7CisJCXN3aXRjaCAoZi0+dHlwZSkgewogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJCWlmICh2ZmQtPnZpZGlvY19nX2ZtdF9jYXApCi0JCQkJcmV0PXZmZC0+dmlkaW9jX2dfZm10X2NhcChmaWxlLCBmaCwgZik7CisJCQlpZiAodmZkLT52aWRpb2NfZ19mbXRfdmlkX2NhcCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19nX2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmKTsKIAkJCWlmICghcmV0KQotCQkJCXY0bF9wcmludF9waXhfZm10KHZmZCwmZi0+Zm10LnBpeCk7CisJCQkJdjRsX3ByaW50X3BpeF9mbXQodmZkLCAmZi0+Zm10LnBpeCk7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQlpZiAodmZkLT52aWRpb2NfZ19mbXRfb3ZlcmxheSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZ19mbXRfb3ZlcmxheShmaWxlLCBmaCwgZik7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgotCQkJaWYgKHZmZC0+dmlkaW9jX2dfZm10X3ZiaSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZ19mbXRfdmJpKGZpbGUsIGZoLCBmKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ6Ci0JCQlpZiAodmZkLT52aWRpb2NfZ19mbXRfdmJpX291dHB1dCkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZ19mbXRfdmJpX291dHB1dChmaWxlLCBmaCwgZik7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQkJCWlmICh2ZmQtPnZpZGlvY19nX2ZtdF92YmlfY2FwdHVyZSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZ19mbXRfdmJpX2NhcHR1cmUoZmlsZSwgZmgsIGYpOworCQkJaWYgKHZmZC0+dmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5KQorCQkJCXJldCA9IHZmZC0+dmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5KGZpbGUsCisJCQkJCQkJCSAgICBmaCwgZik7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQkJCWlmICh2ZmQtPnZpZGlvY19nX2ZtdF92aWRlb19vdXRwdXQpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX2dfZm10X3ZpZGVvX291dHB1dChmaWxlLAotCQkJCQkJCQlmaCwgZik7CisJCQlpZiAodmZkLT52aWRpb2NfZ19mbXRfdmlkX291dCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19nX2ZtdF92aWRfb3V0KGZpbGUsIGZoLCBmKTsKKwkJCWlmICghcmV0KQorCQkJCXY0bF9wcmludF9waXhfZm10KHZmZCwgJmYtPmZtdC5waXgpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWToKLQkJCWlmICh2ZmQtPnZpZGlvY19nX2ZtdF9vdXRwdXRfb3ZlcmxheSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZ19mbXRfb3V0cHV0X292ZXJsYXkoZmlsZSwgZmgsIGYpOworCQkJaWYgKHZmZC0+dmlkaW9jX2dfZm10X3ZpZF9vdXRfb3ZlcmxheSkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19nX2ZtdF92aWRfb3V0X292ZXJsYXkoZmlsZSwKKwkJCQkgICAgICAgZmgsIGYpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKKwkJCWlmICh2ZmQtPnZpZGlvY19nX2ZtdF92YmlfY2FwKQorCQkJCXJldCA9IHZmZC0+dmlkaW9jX2dfZm10X3ZiaV9jYXAoZmlsZSwgZmgsIGYpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUOgotCQkJaWYgKHZmZC0+dmlkaW9jX2dfZm10X3ZiaV9vdXRwdXQpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX2dfZm10X3ZiaV9vdXRwdXQoZmlsZSwgZmgsIGYpOworCQkJaWYgKHZmZC0+dmlkaW9jX2dfZm10X3ZiaV9vdXQpCisJCQkJcmV0ID0gdmZkLT52aWRpb2NfZ19mbXRfdmJpX291dChmaWxlLCBmaCwgZik7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKKwkJCWlmICh2ZmQtPnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX2NhcCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX2NhcChmaWxlLAorCQkJCQkJCQkJZmgsIGYpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVDoKKwkJCWlmICh2ZmQtPnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX291dCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX291dChmaWxlLAorCQkJCQkJCQkJZmgsIGYpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9QUklWQVRFOgogCQkJaWYgKHZmZC0+dmlkaW9jX2dfZm10X3R5cGVfcHJpdmF0ZSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfZ19mbXRfdHlwZV9wcml2YXRlKGZpbGUsCisJCQkJcmV0ID0gdmZkLT52aWRpb2NfZ19mbXRfdHlwZV9wcml2YXRlKGZpbGUsCiAJCQkJCQkJCWZoLCBmKTsKIAkJCWJyZWFrOwogCQl9CkBAIC05NDEsNDggKzk5Myw1MCBAQAogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnOwogCiAJCS8qIEZJWE1FOiBTaG91bGQgYmUgb25lIGR1bXAgcGVyIHR5cGUgKi8KLQkJZGJnYXJnIChjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMoZi0+dHlwZSwKLQkJCQkJdjRsMl90eXBlX25hbWVzKSk7CisJCWRiZ2FyZyhjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMoZi0+dHlwZSwgdjRsMl90eXBlX25hbWVzKSk7CiAKIAkJc3dpdGNoIChmLT50eXBlKSB7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQkJdjRsX3ByaW50X3BpeF9mbXQodmZkLCZmLT5mbXQucGl4KTsKLQkJCWlmICh2ZmQtPnZpZGlvY19zX2ZtdF9jYXApCi0JCQkJcmV0PXZmZC0+dmlkaW9jX3NfZm10X2NhcChmaWxlLCBmaCwgZik7CisJCQl2NGxfcHJpbnRfcGl4X2ZtdCh2ZmQsICZmLT5mbXQucGl4KTsKKwkJCWlmICh2ZmQtPnZpZGlvY19zX2ZtdF92aWRfY2FwKQorCQkJCXJldCA9IHZmZC0+dmlkaW9jX3NfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGYpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQkJaWYgKHZmZC0+dmlkaW9jX3NfZm10X292ZXJsYXkpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX3NfZm10X292ZXJsYXkoZmlsZSwgZmgsIGYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQkJCWlmICh2ZmQtPnZpZGlvY19zX2ZtdF92YmkpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX3NfZm10X3ZiaShmaWxlLCBmaCwgZik7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUOgotCQkJaWYgKHZmZC0+dmlkaW9jX3NfZm10X3ZiaV9vdXRwdXQpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX3NfZm10X3ZiaV9vdXRwdXQoZmlsZSwgZmgsIGYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6Ci0JCQlpZiAodmZkLT52aWRpb2Nfc19mbXRfdmJpX2NhcHR1cmUpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX3NfZm10X3ZiaV9jYXB0dXJlKGZpbGUsIGZoLCBmKTsKKwkJCWlmICh2ZmQtPnZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheSkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheShmaWxlLAorCQkJCQkJCQkgICAgZmgsIGYpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0JCQlpZiAodmZkLT52aWRpb2Nfc19mbXRfdmlkZW9fb3V0cHV0KQotCQkJCXJldD12ZmQtPnZpZGlvY19zX2ZtdF92aWRlb19vdXRwdXQoZmlsZSwKLQkJCQkJCQkJZmgsIGYpOworCQkJdjRsX3ByaW50X3BpeF9mbXQodmZkLCAmZi0+Zm10LnBpeCk7CisJCQlpZiAodmZkLT52aWRpb2Nfc19mbXRfdmlkX291dCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19zX2ZtdF92aWRfb3V0KGZpbGUsIGZoLCBmKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVk6Ci0JCQlpZiAodmZkLT52aWRpb2Nfc19mbXRfb3V0cHV0X292ZXJsYXkpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX3NfZm10X291dHB1dF9vdmVybGF5KGZpbGUsIGZoLCBmKTsKKwkJCWlmICh2ZmQtPnZpZGlvY19zX2ZtdF92aWRfb3V0X292ZXJsYXkpCisJCQkJcmV0ID0gdmZkLT52aWRpb2Nfc19mbXRfdmlkX291dF9vdmVybGF5KGZpbGUsCisJCQkJCWZoLCBmKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6CisJCQlpZiAodmZkLT52aWRpb2Nfc19mbXRfdmJpX2NhcCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY19zX2ZtdF92YmlfY2FwKGZpbGUsIGZoLCBmKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDoKLQkJCWlmICh2ZmQtPnZpZGlvY19zX2ZtdF92Ymlfb3V0cHV0KQotCQkJCXJldD12ZmQtPnZpZGlvY19zX2ZtdF92Ymlfb3V0cHV0KGZpbGUsCi0JCQkJCQkJCWZoLCBmKTsKKwkJCWlmICh2ZmQtPnZpZGlvY19zX2ZtdF92Ymlfb3V0KQorCQkJCXJldCA9IHZmZC0+dmlkaW9jX3NfZm10X3ZiaV9vdXQoZmlsZSwgZmgsIGYpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6CisJCQlpZiAodmZkLT52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9jYXApCisJCQkJcmV0ID0gdmZkLT52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9jYXAoZmlsZSwKKwkJCQkJCQkJCWZoLCBmKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ6CisJCQlpZiAodmZkLT52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9vdXQpCisJCQkJcmV0ID0gdmZkLT52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9vdXQoZmlsZSwKKwkJCQkJCQkJCWZoLCBmKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfQlVGX1RZUEVfUFJJVkFURToKIAkJCWlmICh2ZmQtPnZpZGlvY19zX2ZtdF90eXBlX3ByaXZhdGUpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX3NfZm10X3R5cGVfcHJpdmF0ZShmaWxlLAorCQkJCXJldCA9IHZmZC0+dmlkaW9jX3NfZm10X3R5cGVfcHJpdmF0ZShmaWxlLAogCQkJCQkJCQlmaCwgZik7CiAJCQlicmVhazsKIAkJfQpAQCAtOTk3LDQ2ICsxMDUxLDQ4IEBACiAJCQkJCQl2NGwyX3R5cGVfbmFtZXMpKTsKIAkJc3dpdGNoIChmLT50eXBlKSB7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQkJaWYgKHZmZC0+dmlkaW9jX3RyeV9mbXRfY2FwKQotCQkJCXJldD12ZmQtPnZpZGlvY190cnlfZm10X2NhcChmaWxlLCBmaCwgZik7CisJCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKQorCQkJCXJldCA9IHZmZC0+dmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CiAJCQlpZiAoIXJldCkKLQkJCQl2NGxfcHJpbnRfcGl4X2ZtdCh2ZmQsJmYtPmZtdC5waXgpOworCQkJCXY0bF9wcmludF9waXhfZm10KHZmZCwgJmYtPmZtdC5waXgpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQkJaWYgKHZmZC0+dmlkaW9jX3RyeV9mbXRfb3ZlcmxheSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfdHJ5X2ZtdF9vdmVybGF5KGZpbGUsIGZoLCBmKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF92YmkpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX3RyeV9mbXRfdmJpKGZpbGUsIGZoLCBmKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ6Ci0JCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF92Ymlfb3V0cHV0KQotCQkJCXJldD12ZmQtPnZpZGlvY190cnlfZm10X3ZiaV9vdXRwdXQoZmlsZSwKLQkJCQkJCQkJZmgsIGYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6Ci0JCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwdHVyZSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwdHVyZShmaWxlLAotCQkJCQkJCQlmaCwgZik7CisJCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheSkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5KGZpbGUsCisJCQkJCWZoLCBmKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgotCQkJaWYgKHZmZC0+dmlkaW9jX3RyeV9mbXRfdmlkZW9fb3V0cHV0KQotCQkJCXJldD12ZmQtPnZpZGlvY190cnlfZm10X3ZpZGVvX291dHB1dChmaWxlLAotCQkJCQkJCQlmaCwgZik7CisJCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF92aWRfb3V0KQorCQkJCXJldCA9IHZmZC0+dmlkaW9jX3RyeV9mbXRfdmlkX291dChmaWxlLCBmaCwgZik7CisJCQlpZiAoIXJldCkKKwkJCQl2NGxfcHJpbnRfcGl4X2ZtdCh2ZmQsICZmLT5mbXQucGl4KTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVk6Ci0JCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF9vdXRwdXRfb3ZlcmxheSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfdHJ5X2ZtdF9vdXRwdXRfb3ZlcmxheShmaWxlLCBmaCwgZik7CisJCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF92aWRfb3V0X292ZXJsYXkpCisJCQkJcmV0ID0gdmZkLT52aWRpb2NfdHJ5X2ZtdF92aWRfb3V0X292ZXJsYXkoZmlsZSwKKwkJCQkgICAgICAgZmgsIGYpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKKwkJCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X3ZiaV9jYXApCisJCQkJcmV0ID0gdmZkLT52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwKGZpbGUsIGZoLCBmKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDoKLQkJCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X3ZiaV9vdXRwdXQpCi0JCQkJcmV0PXZmZC0+dmlkaW9jX3RyeV9mbXRfdmJpX291dHB1dChmaWxlLAorCQkJaWYgKHZmZC0+dmlkaW9jX3RyeV9mbXRfdmJpX291dCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY190cnlfZm10X3ZiaV9vdXQoZmlsZSwgZmgsIGYpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6CisJCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY190cnlfZm10X3NsaWNlZF92YmlfY2FwKGZpbGUsCisJCQkJCQkJCWZoLCBmKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ6CisJCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF9zbGljZWRfdmJpX291dCkKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY190cnlfZm10X3NsaWNlZF92Ymlfb3V0KGZpbGUsCiAJCQkJCQkJCWZoLCBmKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfQlVGX1RZUEVfUFJJVkFURToKIAkJCWlmICh2ZmQtPnZpZGlvY190cnlfZm10X3R5cGVfcHJpdmF0ZSkKLQkJCQlyZXQ9dmZkLT52aWRpb2NfdHJ5X2ZtdF90eXBlX3ByaXZhdGUoZmlsZSwKKwkJCQlyZXQgPSB2ZmQtPnZpZGlvY190cnlfZm10X3R5cGVfcHJpdmF0ZShmaWxlLAogCQkJCQkJCQlmaCwgZik7CiAJCQlicmVhazsKIAkJfQpAQCAtMTEyMCwyOSArMTE3NiwyOSBAQAogCX0KIAljYXNlIFZJRElPQ19HX0ZCVUY6CiAJewotCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqcD1hcmc7CisJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpwID0gYXJnOworCiAJCWlmICghdmZkLT52aWRpb2NfZ19mYnVmKQogCQkJYnJlYWs7Ci0JCXJldD12ZmQtPnZpZGlvY19nX2ZidWYoZmlsZSwgZmgsIGFyZyk7CisJCXJldCA9IHZmZC0+dmlkaW9jX2dfZmJ1ZihmaWxlLCBmaCwgYXJnKTsKIAkJaWYgKCFyZXQpIHsKLQkJCWRiZ2FyZyAoY21kLCAiY2FwYWJpbGl0eT0lZCwgZmxhZ3M9JWQsIGJhc2U9MHglMDhseFxuIiwKLQkJCQkJcC0+Y2FwYWJpbGl0eSxwLT5mbGFncywKKwkJCWRiZ2FyZyhjbWQsICJjYXBhYmlsaXR5PTB4JXgsIGZsYWdzPSVkLCBiYXNlPTB4JTA4bHhcbiIsCisJCQkJCXAtPmNhcGFiaWxpdHksIHAtPmZsYWdzLAogCQkJCQkodW5zaWduZWQgbG9uZylwLT5iYXNlKTsKLQkJCXY0bF9wcmludF9waXhfZm10ICh2ZmQsICZwLT5mbXQpOworCQkJdjRsX3ByaW50X3BpeF9mbXQodmZkLCAmcC0+Zm10KTsKIAkJfQogCQlicmVhazsKIAl9CiAJY2FzZSBWSURJT0NfU19GQlVGOgogCXsKLQkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKnA9YXJnOworCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqcCA9IGFyZzsKKwogCQlpZiAoIXZmZC0+dmlkaW9jX3NfZmJ1ZikKIAkJCWJyZWFrOwotCi0JCWRiZ2FyZyAoY21kLCAiY2FwYWJpbGl0eT0lZCwgZmxhZ3M9JWQsIGJhc2U9MHglMDhseFxuIiwKLQkJCQlwLT5jYXBhYmlsaXR5LHAtPmZsYWdzLCh1bnNpZ25lZCBsb25nKXAtPmJhc2UpOwotCQl2NGxfcHJpbnRfcGl4X2ZtdCAodmZkLCAmcC0+Zm10KTsKLQkJcmV0PXZmZC0+dmlkaW9jX3NfZmJ1ZihmaWxlLCBmaCwgYXJnKTsKLQorCQlkYmdhcmcoY21kLCAiY2FwYWJpbGl0eT0weCV4LCBmbGFncz0lZCwgYmFzZT0weCUwOGx4XG4iLAorCQkJcC0+Y2FwYWJpbGl0eSwgcC0+ZmxhZ3MsICh1bnNpZ25lZCBsb25nKXAtPmJhc2UpOworCQl2NGxfcHJpbnRfcGl4X2ZtdCh2ZmQsICZwLT5mbXQpOworCQlyZXQgPSB2ZmQtPnZpZGlvY19zX2ZidWYoZmlsZSwgZmgsIGFyZyk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19TVFJFQU1PTjoKQEAgLTExOTQsNyArMTI1MCw3IEBACiAJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChwLCBjdXJyX2lkLCBkZXNjcik7CiAJCXAtPmluZGV4ID0gaW5kZXg7CiAKLQkJZGJnYXJnKGNtZCwgImluZGV4PSVkLCBpZD0lTGQsIG5hbWU9JXMsIGZwcz0lZC8lZCwgIgorCQlkYmdhcmcoY21kLCAiaW5kZXg9JWQsIGlkPTB4JUx4LCBuYW1lPSVzLCBmcHM9JWQvJWQsICIKIAkJCQkiZnJhbWVsaW5lcz0lZFxuIiwgcC0+aW5kZXgsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwLT5pZCwgcC0+bmFtZSwKIAkJCQlwLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IsCkBAIC0xMjA4LDE4ICsxMjY0LDIyIEBACiAJewogCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7CiAKLQkJKmlkID0gdmZkLT5jdXJyZW50X25vcm07CisJCXJldCA9IDA7CisJCS8qIENhbGxzIHRoZSBzcGVjaWZpYyBoYW5kbGVyICovCisJCWlmICh2ZmQtPnZpZGlvY19nX3N0ZCkKKwkJCXJldCA9IHZmZC0+dmlkaW9jX2dfc3RkKGZpbGUsIGZoLCBpZCk7CisJCWVsc2UKKwkJCSppZCA9IHZmZC0+Y3VycmVudF9ub3JtOwogCi0JCWRiZ2FyZyAoY21kLCAidmFsdWU9JTA4THhcbiIsIChsb25nIGxvbmcgdW5zaWduZWQpICppZCk7Ci0KLQkJcmV0PTA7CisJCWlmICghcmV0KQorCQkJZGJnYXJnKGNtZCwgInN0ZD0weCUwOEx4XG4iLCAobG9uZyBsb25nIHVuc2lnbmVkKSppZCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19TX1NURDoKIAl7CiAJCXY0bDJfc3RkX2lkICppZCA9IGFyZyxub3JtOwogCi0JCWRiZ2FyZyAoY21kLCAidmFsdWU9JTA4THhcbiIsIChsb25nIGxvbmcgdW5zaWduZWQpICppZCk7CisJCWRiZ2FyZyhjbWQsICJzdGQ9JTA4THhcbiIsIChsb25nIGxvbmcgdW5zaWduZWQpKmlkKTsKIAogCQlub3JtID0gKCppZCkgJiB2ZmQtPnR2bm9ybXM7CiAJCWlmICggdmZkLT50dm5vcm1zICYmICFub3JtKQkvKiBDaGVjayBpZiBzdGQgaXMgc3VwcG9ydGVkICovCkBAIC0xMjk1LDYgKzEzNTUsMjUgQEAKIAl9CiAKIAkvKiAtLS0tLS0gb3V0cHV0IHN3aXRjaGluZyAtLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfRU5VTU9VVFBVVDoKKwl7CisJCXN0cnVjdCB2NGwyX291dHB1dCAqcCA9IGFyZzsKKwkJaW50IGkgPSBwLT5pbmRleDsKKworCQlpZiAoIXZmZC0+dmlkaW9jX2VudW1fb3V0cHV0KQorCQkJYnJlYWs7CisJCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKwkJcC0+aW5kZXggPSBpOworCisJCXJldCA9IHZmZC0+dmlkaW9jX2VudW1fb3V0cHV0KGZpbGUsIGZoLCBwKTsKKwkJaWYgKCFyZXQpCisJCQlkYmdhcmcoY21kLCAiaW5kZXg9JWQsIG5hbWU9JXMsIHR5cGU9JWQsICIKKwkJCQkiYXVkaW9zZXQ9MHgleCwgIgorCQkJCSJtb2R1bGF0b3I9JWQsIHN0ZD0weCUwOEx4XG4iLAorCQkJCXAtPmluZGV4LCBwLT5uYW1lLCBwLT50eXBlLCBwLT5hdWRpb3NldCwKKwkJCQlwLT5tb2R1bGF0b3IsICh1bnNpZ25lZCBsb25nIGxvbmcpcC0+c3RkKTsKKwkJYnJlYWs7CisJfQogCWNhc2UgVklESU9DX0dfT1VUUFVUOgogCXsKIAkJdW5zaWduZWQgaW50ICppID0gYXJnOwpAQCAtMTMyMCwxMzIgKzEzOTksMTcyIEBACiAJLyogLS0tIGNvbnRyb2xzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAljYXNlIFZJRElPQ19RVUVSWUNUUkw6CiAJewotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnA9YXJnOworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnAgPSBhcmc7CiAKIAkJaWYgKCF2ZmQtPnZpZGlvY19xdWVyeWN0cmwpCiAJCQlicmVhazsKLQkJcmV0PXZmZC0+dmlkaW9jX3F1ZXJ5Y3RybChmaWxlLCBmaCwgcCk7Ci0KKwkJcmV0ID0gdmZkLT52aWRpb2NfcXVlcnljdHJsKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCi0JCQlkYmdhcmcgKGNtZCwgImlkPSVkLCB0eXBlPSVkLCBuYW1lPSVzLCAiCi0JCQkJCSJtaW4vbWF4PSVkLyVkLCIKLQkJCQkJIiBzdGVwPSVkLCBkZWZhdWx0PSVkLCBmbGFncz0weCUwOHhcbiIsCi0JCQkJCXAtPmlkLHAtPnR5cGUscC0+bmFtZSxwLT5taW5pbXVtLAotCQkJCQlwLT5tYXhpbXVtLHAtPnN0ZXAscC0+ZGVmYXVsdF92YWx1ZSwKLQkJCQkJcC0+ZmxhZ3MpOworCQkJZGJnYXJnKGNtZCwgImlkPTB4JXgsIHR5cGU9JWQsIG5hbWU9JXMsIG1pbi9tYXg9JWQvJWQsICIKKwkJCQkJInN0ZXA9JWQsIGRlZmF1bHQ9JWQsIGZsYWdzPTB4JTA4eFxuIiwKKwkJCQkJcC0+aWQsIHAtPnR5cGUsIHAtPm5hbWUsCisJCQkJCXAtPm1pbmltdW0sIHAtPm1heGltdW0sCisJCQkJCXAtPnN0ZXAsIHAtPmRlZmF1bHRfdmFsdWUsIHAtPmZsYWdzKTsKKwkJZWxzZQorCQkJZGJnYXJnKGNtZCwgImlkPTB4JXhcbiIsIHAtPmlkKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgVklESU9DX0dfQ1RSTDoKIAl7CiAJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKnAgPSBhcmc7CiAKLQkJaWYgKCF2ZmQtPnZpZGlvY19nX2N0cmwpCi0JCQlicmVhazsKLQkJZGJnYXJnKGNtZCwgIkVudW0gZm9yIGluZGV4PSVkXG4iLCBwLT5pZCk7CisJCWlmICh2ZmQtPnZpZGlvY19nX2N0cmwpCisJCQlyZXQgPSB2ZmQtPnZpZGlvY19nX2N0cmwoZmlsZSwgZmgsIHApOworCQllbHNlIGlmICh2ZmQtPnZpZGlvY19nX2V4dF9jdHJscykgeworCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzIGN0cmxzOworCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgY3RybDsKIAotCQlyZXQ9dmZkLT52aWRpb2NfZ19jdHJsKGZpbGUsIGZoLCBwKTsKKwkJCWN0cmxzLmN0cmxfY2xhc3MgPSBWNEwyX0NUUkxfSUQyQ0xBU1MocC0+aWQpOworCQkJY3RybHMuY291bnQgPSAxOworCQkJY3RybHMuY29udHJvbHMgPSAmY3RybDsKKwkJCWN0cmwuaWQgPSBwLT5pZDsKKwkJCWN0cmwudmFsdWUgPSBwLT52YWx1ZTsKKwkJCWlmIChjaGVja19leHRfY3RybHMoJmN0cmxzLCAxKSkgeworCQkJCXJldCA9IHZmZC0+dmlkaW9jX2dfZXh0X2N0cmxzKGZpbGUsIGZoLCAmY3RybHMpOworCQkJCWlmIChyZXQgPT0gMCkKKwkJCQkJcC0+dmFsdWUgPSBjdHJsLnZhbHVlOworCQkJfQorCQl9IGVsc2UKKwkJCWJyZWFrOwogCQlpZiAoIXJldCkKLQkJCWRiZ2FyZzIgKCAiaWQ9JWQsIHZhbHVlPSVkXG4iLCBwLT5pZCwgcC0+dmFsdWUpOworCQkJZGJnYXJnKGNtZCwgImlkPTB4JXgsIHZhbHVlPSVkXG4iLCBwLT5pZCwgcC0+dmFsdWUpOworCQllbHNlCisJCQlkYmdhcmcoY21kLCAiaWQ9MHgleFxuIiwgcC0+aWQpOwogCQlicmVhazsKIAl9CiAJY2FzZSBWSURJT0NfU19DVFJMOgogCXsKIAkJc3RydWN0IHY0bDJfY29udHJvbCAqcCA9IGFyZzsKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzIGN0cmxzOworCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCBjdHJsOwogCi0JCWlmICghdmZkLT52aWRpb2Nfc19jdHJsKQorCQlpZiAoIXZmZC0+dmlkaW9jX3NfY3RybCAmJiAhdmZkLT52aWRpb2Nfc19leHRfY3RybHMpCiAJCQlicmVhazsKLQkJZGJnYXJnIChjbWQsICJpZD0lZCwgdmFsdWU9JWRcbiIsIHAtPmlkLCBwLT52YWx1ZSk7CiAKLQkJcmV0PXZmZC0+dmlkaW9jX3NfY3RybChmaWxlLCBmaCwgcCk7CisJCWRiZ2FyZyhjbWQsICJpZD0weCV4LCB2YWx1ZT0lZFxuIiwgcC0+aWQsIHAtPnZhbHVlKTsKKworCQlpZiAodmZkLT52aWRpb2Nfc19jdHJsKSB7CisJCQlyZXQgPSB2ZmQtPnZpZGlvY19zX2N0cmwoZmlsZSwgZmgsIHApOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCF2ZmQtPnZpZGlvY19zX2V4dF9jdHJscykKKwkJCWJyZWFrOworCisJCWN0cmxzLmN0cmxfY2xhc3MgPSBWNEwyX0NUUkxfSUQyQ0xBU1MocC0+aWQpOworCQljdHJscy5jb3VudCA9IDE7CisJCWN0cmxzLmNvbnRyb2xzID0gJmN0cmw7CisJCWN0cmwuaWQgPSBwLT5pZDsKKwkJY3RybC52YWx1ZSA9IHAtPnZhbHVlOworCQlpZiAoY2hlY2tfZXh0X2N0cmxzKCZjdHJscywgMSkpCisJCQlyZXQgPSB2ZmQtPnZpZGlvY19zX2V4dF9jdHJscyhmaWxlLCBmaCwgJmN0cmxzKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgogCXsKIAkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpwID0gYXJnOwogCi0JCWlmICh2ZmQtPnZpZGlvY19nX2V4dF9jdHJscykgewotCQkJZGJnYXJnKGNtZCwgImNvdW50PSVkXG4iLCBwLT5jb3VudCk7Ci0KLQkJCXJldD12ZmQtPnZpZGlvY19nX2V4dF9jdHJscyhmaWxlLCBmaCwgcCk7Ci0JCX0KKwkJcC0+ZXJyb3JfaWR4ID0gcC0+Y291bnQ7CisJCWlmICghdmZkLT52aWRpb2NfZ19leHRfY3RybHMpCisJCQlicmVhazsKKwkJaWYgKGNoZWNrX2V4dF9jdHJscyhwLCAwKSkKKwkJCXJldCA9IHZmZC0+dmlkaW9jX2dfZXh0X2N0cmxzKGZpbGUsIGZoLCBwKTsKKwkJdjRsX3ByaW50X2V4dF9jdHJscyhjbWQsIHZmZCwgcCwgIXJldCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKIAl7CiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqcCA9IGFyZzsKIAotCQlpZiAodmZkLT52aWRpb2Nfc19leHRfY3RybHMpIHsKLQkJCWRiZ2FyZyhjbWQsICJjb3VudD0lZFxuIiwgcC0+Y291bnQpOwotCi0JCQlyZXQ9dmZkLT52aWRpb2Nfc19leHRfY3RybHMoZmlsZSwgZmgsIHApOwotCQl9CisJCXAtPmVycm9yX2lkeCA9IHAtPmNvdW50OworCQlpZiAoIXZmZC0+dmlkaW9jX3NfZXh0X2N0cmxzKQorCQkJYnJlYWs7CisJCXY0bF9wcmludF9leHRfY3RybHMoY21kLCB2ZmQsIHAsIDEpOworCQlpZiAoY2hlY2tfZXh0X2N0cmxzKHAsIDApKQorCQkJcmV0ID0gdmZkLT52aWRpb2Nfc19leHRfY3RybHMoZmlsZSwgZmgsIHApOwogCQlicmVhazsKIAl9CiAJY2FzZSBWSURJT0NfVFJZX0VYVF9DVFJMUzoKIAl7CiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqcCA9IGFyZzsKIAotCQlpZiAodmZkLT52aWRpb2NfdHJ5X2V4dF9jdHJscykgewotCQkJZGJnYXJnKGNtZCwgImNvdW50PSVkXG4iLCBwLT5jb3VudCk7Ci0KLQkJCXJldD12ZmQtPnZpZGlvY190cnlfZXh0X2N0cmxzKGZpbGUsIGZoLCBwKTsKLQkJfQorCQlwLT5lcnJvcl9pZHggPSBwLT5jb3VudDsKKwkJaWYgKCF2ZmQtPnZpZGlvY190cnlfZXh0X2N0cmxzKQorCQkJYnJlYWs7CisJCXY0bF9wcmludF9leHRfY3RybHMoY21kLCB2ZmQsIHAsIDEpOworCQlpZiAoY2hlY2tfZXh0X2N0cmxzKHAsIDApKQorCQkJcmV0ID0gdmZkLT52aWRpb2NfdHJ5X2V4dF9jdHJscyhmaWxlLCBmaCwgcCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19RVUVSWU1FTlU6CiAJewotCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnA9YXJnOworCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnAgPSBhcmc7CisKIAkJaWYgKCF2ZmQtPnZpZGlvY19xdWVyeW1lbnUpCiAJCQlicmVhazsKLQkJcmV0PXZmZC0+dmlkaW9jX3F1ZXJ5bWVudShmaWxlLCBmaCwgcCk7CisJCXJldCA9IHZmZC0+dmlkaW9jX3F1ZXJ5bWVudShmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQotCQkJZGJnYXJnIChjbWQsICJpZD0lZCwgaW5kZXg9JWQsIG5hbWU9JXNcbiIsCi0JCQkJCQlwLT5pZCxwLT5pbmRleCxwLT5uYW1lKTsKKwkJCWRiZ2FyZyhjbWQsICJpZD0weCV4LCBpbmRleD0lZCwgbmFtZT0lc1xuIiwKKwkJCQlwLT5pZCwgcC0+aW5kZXgsIHAtPm5hbWUpOworCQllbHNlCisJCQlkYmdhcmcoY21kLCAiaWQ9MHgleCwgaW5kZXg9JWRcbiIsCisJCQkJcC0+aWQsIHAtPmluZGV4KTsKIAkJYnJlYWs7CiAJfQogCS8qIC0tLSBhdWRpbyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJY2FzZSBWSURJT0NfRU5VTUFVRElPOgogCXsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKnA9YXJnOworCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqcCA9IGFyZzsKIAogCQlpZiAoIXZmZC0+dmlkaW9jX2VudW1hdWRpbykKIAkJCWJyZWFrOwotCQlkYmdhcmcoY21kLCAiRW51bSBmb3IgaW5kZXg9JWRcbiIsIHAtPmluZGV4KTsKLQkJcmV0PXZmZC0+dmlkaW9jX2VudW1hdWRpbyhmaWxlLCBmaCwgcCk7CisJCXJldCA9IHZmZC0+dmlkaW9jX2VudW1hdWRpbyhmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQotCQkJZGJnYXJnMigiaW5kZXg9JWQsIG5hbWU9JXMsIGNhcGFiaWxpdHk9JWQsICIKLQkJCQkJIm1vZGU9JWRcbiIscC0+aW5kZXgscC0+bmFtZSwKKwkJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0weCV4LCAiCisJCQkJCSJtb2RlPTB4JXhcbiIsIHAtPmluZGV4LCBwLT5uYW1lLAogCQkJCQlwLT5jYXBhYmlsaXR5LCBwLT5tb2RlKTsKKwkJZWxzZQorCQkJZGJnYXJnKGNtZCwgImluZGV4PSVkXG4iLCBwLT5pbmRleCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19HX0FVRElPOgogCXsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKnA9YXJnOwotCQlfX3UzMiBpbmRleD1wLT5pbmRleDsKKwkJc3RydWN0IHY0bDJfYXVkaW8gKnAgPSBhcmc7CisJCV9fdTMyIGluZGV4ID0gcC0+aW5kZXg7CiAKIAkJaWYgKCF2ZmQtPnZpZGlvY19nX2F1ZGlvKQogCQkJYnJlYWs7CiAKLQkJbWVtc2V0KHAsMCxzaXplb2YoKnApKTsKLQkJcC0+aW5kZXg9aW5kZXg7Ci0JCWRiZ2FyZyhjbWQsICJHZXQgZm9yIGluZGV4PSVkXG4iLCBwLT5pbmRleCk7Ci0JCXJldD12ZmQtPnZpZGlvY19nX2F1ZGlvKGZpbGUsIGZoLCBwKTsKKwkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCQlwLT5pbmRleCA9IGluZGV4OworCQlyZXQgPSB2ZmQtPnZpZGlvY19nX2F1ZGlvKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCi0JCQlkYmdhcmcyKCJpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0lZCwgIgotCQkJCQkibW9kZT0lZFxuIixwLT5pbmRleCwKLQkJCQkJcC0+bmFtZSxwLT5jYXBhYmlsaXR5LCBwLT5tb2RlKTsKKwkJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0weCV4LCAiCisJCQkJCSJtb2RlPTB4JXhcbiIsIHAtPmluZGV4LAorCQkJCQlwLT5uYW1lLCBwLT5jYXBhYmlsaXR5LCBwLT5tb2RlKTsKKwkJZWxzZQorCQkJZGJnYXJnKGNtZCwgImluZGV4PSVkXG4iLCBwLT5pbmRleCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19TX0FVRElPOgogCXsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKnA9YXJnOworCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqcCA9IGFyZzsKIAogCQlpZiAoIXZmZC0+dmlkaW9jX3NfYXVkaW8pCiAJCQlicmVhazsKLQkJZGJnYXJnKGNtZCwgImluZGV4PSVkLCBuYW1lPSVzLCBjYXBhYmlsaXR5PSVkLCAiCi0JCQkJCSJtb2RlPSVkXG4iLCBwLT5pbmRleCwgcC0+bmFtZSwKKwkJZGJnYXJnKGNtZCwgImluZGV4PSVkLCBuYW1lPSVzLCBjYXBhYmlsaXR5PTB4JXgsICIKKwkJCQkJIm1vZGU9MHgleFxuIiwgcC0+aW5kZXgsIHAtPm5hbWUsCiAJCQkJCXAtPmNhcGFiaWxpdHksIHAtPm1vZGUpOwotCQlyZXQ9dmZkLT52aWRpb2Nfc19hdWRpbyhmaWxlLCBmaCwgcCk7CisJCXJldCA9IHZmZC0+dmlkaW9jX3NfYXVkaW8oZmlsZSwgZmgsIHApOwogCQlicmVhazsKIAl9CiAJY2FzZSBWSURJT0NfRU5VTUFVRE9VVDoKQEAgLTE1MjEsOSArMTY0MCw5IEBACiAJCXN0cnVjdCB2NGwyX2Nyb3AgKnA9YXJnOwogCQlpZiAoIXZmZC0+dmlkaW9jX2dfY3JvcCkKIAkJCWJyZWFrOworCQlkYmdhcmcoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKHAtPnR5cGUsIHY0bDJfdHlwZV9uYW1lcykpOwogCQlyZXQ9dmZkLT52aWRpb2NfZ19jcm9wKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpIHsKLQkJCWRiZ2FyZyhjbWQsICJ0eXBlPSVkXG4iLCBwLT50eXBlKTsKIAkJCWRiZ3JlY3QodmZkLCAiIiwgJnAtPmMpOwogCQl9CiAJCWJyZWFrOwpAQCAtMTUzMywyMSArMTY1MiwyNCBAQAogCQlzdHJ1Y3QgdjRsMl9jcm9wICpwPWFyZzsKIAkJaWYgKCF2ZmQtPnZpZGlvY19zX2Nyb3ApCiAJCQlicmVhazsKLQkJZGJnYXJnKGNtZCwgInR5cGU9JWRcbiIsIHAtPnR5cGUpOworCQlkYmdhcmcoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKHAtPnR5cGUsIHY0bDJfdHlwZV9uYW1lcykpOwogCQlkYmdyZWN0KHZmZCwgIiIsICZwLT5jKTsKIAkJcmV0PXZmZC0+dmlkaW9jX3NfY3JvcChmaWxlLCBmaCwgcCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19DUk9QQ0FQOgogCXsKLQkJc3RydWN0IHY0bDJfY3JvcGNhcCAqcD1hcmc7CisJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKnAgPSBhcmc7CisKIAkJLypGSVhNRTogU2hvdWxkIGFsc28gc2hvdyB2NGwyX2ZyYWN0IHBpeGVsYXNwZWN0ICovCiAJCWlmICghdmZkLT52aWRpb2NfY3JvcGNhcCkKIAkJCWJyZWFrOwotCQlkYmdhcmcoY21kLCAidHlwZT0lZFxuIiwgcC0+dHlwZSk7Ci0JCWRiZ3JlY3QodmZkLCAiYm91bmRzICIsICZwLT5ib3VuZHMpOwotCQlkYmdyZWN0KHZmZCwgImRlZnJlY3QgIiwgJnAtPmRlZnJlY3QpOwotCQlyZXQ9dmZkLT52aWRpb2NfY3JvcGNhcChmaWxlLCBmaCwgcCk7CisJCWRiZ2FyZyhjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMocC0+dHlwZSwgdjRsMl90eXBlX25hbWVzKSk7CisJCXJldCA9IHZmZC0+dmlkaW9jX2Nyb3BjYXAoZmlsZSwgZmgsIHApOworCQlpZiAoIXJldCkgeworCQkJZGJncmVjdCh2ZmQsICJib3VuZHMgIiwgJnAtPmJvdW5kcyk7CisJCQlkYmdyZWN0KHZmZCwgImRlZnJlY3QgIiwgJnAtPmRlZnJlY3QpOworCQl9CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19HX0pQRUdDT01QOgpAQCAtMTU5MCwyNiArMTcxMiwyNiBAQAogCX0KIAljYXNlIFZJRElPQ19FTkNPREVSX0NNRDoKIAl7Ci0JCXN0cnVjdCB2NGwyX2VuY29kZXJfY21kICpwPWFyZzsKKwkJc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQgKnAgPSBhcmc7CiAKIAkJaWYgKCF2ZmQtPnZpZGlvY19lbmNvZGVyX2NtZCkKIAkJCWJyZWFrOwotCQlyZXQ9dmZkLT52aWRpb2NfZW5jb2Rlcl9jbWQoZmlsZSwgZmgsIHApOworCQltZW1zZXQoJnAtPnJhdywgMCwgc2l6ZW9mKHAtPnJhdykpOworCQlyZXQgPSB2ZmQtPnZpZGlvY19lbmNvZGVyX2NtZChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQotCQkJZGJnYXJnIChjbWQsICJjbWQ9JWQsIGZsYWdzPSVkXG4iLAotCQkJCQlwLT5jbWQscC0+ZmxhZ3MpOworCQkJZGJnYXJnKGNtZCwgImNtZD0lZCwgZmxhZ3M9JXhcbiIsIHAtPmNtZCwgcC0+ZmxhZ3MpOwogCQlicmVhazsKIAl9CiAJY2FzZSBWSURJT0NfVFJZX0VOQ09ERVJfQ01EOgogCXsKLQkJc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQgKnA9YXJnOworCQlzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCAqcCA9IGFyZzsKIAogCQlpZiAoIXZmZC0+dmlkaW9jX3RyeV9lbmNvZGVyX2NtZCkKIAkJCWJyZWFrOwotCQlyZXQ9dmZkLT52aWRpb2NfdHJ5X2VuY29kZXJfY21kKGZpbGUsIGZoLCBwKTsKKwkJbWVtc2V0KCZwLT5yYXcsIDAsIHNpemVvZihwLT5yYXcpKTsKKwkJcmV0ID0gdmZkLT52aWRpb2NfdHJ5X2VuY29kZXJfY21kKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCi0JCQlkYmdhcmcgKGNtZCwgImNtZD0lZCwgZmxhZ3M9JWRcbiIsCi0JCQkJCXAtPmNtZCxwLT5mbGFncyk7CisJCQlkYmdhcmcoY21kLCAiY21kPSVkLCBmbGFncz0leFxuIiwgcC0+Y21kLCBwLT5mbGFncyk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19HX1BBUk06CkBAIC0xNjQ5LDU0ICsxNzcxLDU3IEBACiAJfQogCWNhc2UgVklESU9DX0dfVFVORVI6CiAJewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqcD1hcmc7Ci0JCV9fdTMyIGluZGV4PXAtPmluZGV4OworCQlzdHJ1Y3QgdjRsMl90dW5lciAqcCA9IGFyZzsKKwkJX191MzIgaW5kZXggPSBwLT5pbmRleDsKIAogCQlpZiAoIXZmZC0+dmlkaW9jX2dfdHVuZXIpCiAJCQlicmVhazsKIAotCQltZW1zZXQocCwwLHNpemVvZigqcCkpOwotCQlwLT5pbmRleD1pbmRleDsKKwkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCQlwLT5pbmRleCA9IGluZGV4OwogCi0JCXJldD12ZmQtPnZpZGlvY19nX3R1bmVyKGZpbGUsIGZoLCBwKTsKKwkJcmV0ID0gdmZkLT52aWRpb2NfZ190dW5lcihmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQotCQkJZGJnYXJnIChjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgIgotCQkJCQkiY2FwYWJpbGl0eT0lZCwgcmFuZ2Vsb3c9JWQsICIKKwkJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgIgorCQkJCQkiY2FwYWJpbGl0eT0weCV4LCByYW5nZWxvdz0lZCwgIgogCQkJCQkicmFuZ2VoaWdoPSVkLCBzaWduYWw9JWQsIGFmYz0lZCwgIgotCQkJCQkicnhzdWJjaGFucz0lZCwgYXVkbW9kZT0lZFxuIiwKKwkJCQkJInJ4c3ViY2hhbnM9MHgleCwgYXVkbW9kZT0lZFxuIiwKIAkJCQkJcC0+aW5kZXgsIHAtPm5hbWUsIHAtPnR5cGUsCiAJCQkJCXAtPmNhcGFiaWxpdHksIHAtPnJhbmdlbG93LAotCQkJCQlwLT5yYW5nZWhpZ2gsIHAtPnJ4c3ViY2hhbnMsCi0JCQkJCXAtPmF1ZG1vZGUsIHAtPnNpZ25hbCwgcC0+YWZjKTsKKwkJCQkJcC0+cmFuZ2VoaWdoLCBwLT5zaWduYWwsIHAtPmFmYywKKwkJCQkJcC0+cnhzdWJjaGFucywgcC0+YXVkbW9kZSk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19TX1RVTkVSOgogCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnA9YXJnOworCQlzdHJ1Y3QgdjRsMl90dW5lciAqcCA9IGFyZzsKKwogCQlpZiAoIXZmZC0+dmlkaW9jX3NfdHVuZXIpCiAJCQlicmVhazsKLQkJZGJnYXJnIChjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgIgotCQkJCSJjYXBhYmlsaXR5PSVkLCByYW5nZWxvdz0lZCwgcmFuZ2VoaWdoPSVkLCAiCi0JCQkJInNpZ25hbD0lZCwgYWZjPSVkLCByeHN1YmNoYW5zPSVkLCAiCi0JCQkJImF1ZG1vZGU9JWRcbiIscC0+aW5kZXgsIHAtPm5hbWUsIHAtPnR5cGUsCi0JCQkJcC0+Y2FwYWJpbGl0eSwgcC0+cmFuZ2Vsb3cscC0+cmFuZ2VoaWdoLAotCQkJCXAtPnJ4c3ViY2hhbnMsIHAtPmF1ZG1vZGUsIHAtPnNpZ25hbCwKLQkJCQlwLT5hZmMpOwotCQlyZXQ9dmZkLT52aWRpb2Nfc190dW5lcihmaWxlLCBmaCwgcCk7CisJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgIgorCQkJCSJjYXBhYmlsaXR5PTB4JXgsIHJhbmdlbG93PSVkLCAiCisJCQkJInJhbmdlaGlnaD0lZCwgc2lnbmFsPSVkLCBhZmM9JWQsICIKKwkJCQkicnhzdWJjaGFucz0weCV4LCBhdWRtb2RlPSVkXG4iLAorCQkJCXAtPmluZGV4LCBwLT5uYW1lLCBwLT50eXBlLAorCQkJCXAtPmNhcGFiaWxpdHksIHAtPnJhbmdlbG93LAorCQkJCXAtPnJhbmdlaGlnaCwgcC0+c2lnbmFsLCBwLT5hZmMsCisJCQkJcC0+cnhzdWJjaGFucywgcC0+YXVkbW9kZSk7CisJCXJldCA9IHZmZC0+dmlkaW9jX3NfdHVuZXIoZmlsZSwgZmgsIHApOwogCQlicmVhazsKIAl9CiAJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CiAJewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKnA9YXJnOworCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKnAgPSBhcmc7CisKIAkJaWYgKCF2ZmQtPnZpZGlvY19nX2ZyZXF1ZW5jeSkKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLDAsc2l6ZW9mKCpwKSk7CisJCW1lbXNldChwLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHAtPnJlc2VydmVkKSk7CiAKLQkJcmV0PXZmZC0+dmlkaW9jX2dfZnJlcXVlbmN5KGZpbGUsIGZoLCBwKTsKKwkJcmV0ID0gdmZkLT52aWRpb2NfZ19mcmVxdWVuY3koZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKLQkJCWRiZ2FyZyAoY21kLCAidHVuZXI9JWQsIHR5cGU9JWQsIGZyZXF1ZW5jeT0lZFxuIiwKLQkJCQkJCXAtPnR1bmVyLHAtPnR5cGUscC0+ZnJlcXVlbmN5KTsKKwkJCWRiZ2FyZyhjbWQsICJ0dW5lcj0lZCwgdHlwZT0lZCwgZnJlcXVlbmN5PSVkXG4iLAorCQkJCQlwLT50dW5lciwgcC0+dHlwZSwgcC0+ZnJlcXVlbmN5KTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgpAQCAtMTcxMSwxMiArMTgzNiwxNyBAQAogCX0KIAljYXNlIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQOgogCXsKLQkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKnA9YXJnOworCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqcCA9IGFyZzsKKwkJX191MzIgdHlwZSA9IHAtPnR5cGU7CisKIAkJaWYgKCF2ZmQtPnZpZGlvY19nX3NsaWNlZF92YmlfY2FwKQogCQkJYnJlYWs7Ci0JCXJldD12ZmQtPnZpZGlvY19nX3NsaWNlZF92YmlfY2FwKGZpbGUsIGZoLCBwKTsKKwkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCQlwLT50eXBlID0gdHlwZTsKKwkJZGJnYXJnKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhwLT50eXBlLCB2NGwyX3R5cGVfbmFtZXMpKTsKKwkJcmV0ID0gdmZkLT52aWRpb2NfZ19zbGljZWRfdmJpX2NhcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQotCQkJZGJnYXJnIChjbWQsICJzZXJ2aWNlX3NldD0lZFxuIiwgcC0+c2VydmljZV9zZXQpOworCQkJZGJnYXJnMigic2VydmljZV9zZXQ9JWRcbiIsIHAtPnNlcnZpY2Vfc2V0KTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgVklESU9DX0xPR19TVEFUVVM6CkBAIC0xNzYzLDEzICsxODkzLDIzIEBACiAJCXJldCA9IHZmZC0+dmlkaW9jX2RlZmF1bHQoZmlsZSwgZmgsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAJfQorCWNhc2UgVklESU9DX1NfSFdfRlJFUV9TRUVLOgorCXsKKwkJc3RydWN0IHY0bDJfaHdfZnJlcV9zZWVrICpwID0gYXJnOworCQlpZiAoIXZmZC0+dmlkaW9jX3NfaHdfZnJlcV9zZWVrKQorCQkJYnJlYWs7CisJCWRiZ2FyZyhjbWQsCisJCQkidHVuZXI9JWQsIHR5cGU9JWQsIHNlZWtfdXB3YXJkPSVkLCB3cmFwX2Fyb3VuZD0lZFxuIiwKKwkJCXAtPnR1bmVyLCBwLT50eXBlLCBwLT5zZWVrX3Vwd2FyZCwgcC0+d3JhcF9hcm91bmQpOworCQlyZXQgPSB2ZmQtPnZpZGlvY19zX2h3X2ZyZXFfc2VlayhmaWxlLCBmaCwgcCk7CisJCWJyZWFrOworCX0KIAl9IC8qIHN3aXRjaCAqLwogCiAJaWYgKHZmZC0+ZGVidWcgJiBWNEwyX0RFQlVHX0lPQ1RMX0FSRykgewotCQlpZiAocmV0PDApIHsKLQkJCXByaW50aygiJXM6IGVycjogb24gIiwgdmZkLT5uYW1lKTsKKwkJaWYgKHJldCA8IDApIHsKIAkJCXY0bF9wcmludF9pb2N0bCh2ZmQtPm5hbWUsIGNtZCk7Ci0JCQlwcmludGsoIlxuIik7CisJCQlwcmludGsoS0VSTl9DT05UICIgZXJyb3IgJWRcbiIsIHJldCk7CiAJCX0KIAl9CiAKQEAgLTE4NzEsOCArMjAxMSw1NSBAQAogfQogRVhQT1JUX1NZTUJPTCh2aWRlb19pb2N0bDIpOwogCisvKioKKyAqIGdldF9pbmRleCAtIGFzc2lnbiBzdHJlYW0gbnVtYmVyIGJhc2VkIG9uIHBhcmVudCBkZXZpY2UKKyAqIEB2ZGV2OiB2aWRlb19kZXZpY2UgdG8gYXNzaWduIGluZGV4IG51bWJlciB0bywgdmRldi0+ZGV2IHNob3VsZCBiZSBhc3NpZ25lZAorICogQG51bTogLTEgaWYgYXV0byBhc3NpZ24sIHJlcXVlc3RlZCBudW1iZXIgb3RoZXJ3aXNlCisgKgorICoKKyAqIHJldHVybnMgLUVORklMRSBpZiBudW0gaXMgYWxyZWFkeSBpbiB1c2UsIGEgZnJlZSBpbmRleCBudW1iZXIgaWYKKyAqIHN1Y2Nlc3NmdWwuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2luZGV4KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCBudW0pCit7CisJdTMyIHVzZWQgPSAwOworCWNvbnN0IGludCBtYXhfaW5kZXggPSBzaXplb2YodXNlZCkgKiA4IC0gMTsKKwlpbnQgaTsKKworCS8qIEN1cnJlbnRseSBhIHNpbmdsZSB2NGwgZHJpdmVyIGluc3RhbmNlIGNhbm5vdCBjcmVhdGUgbW9yZSB0aGFuCisJICAgMzIgZGV2aWNlcy4KKwkgICBJbmNyZWFzZSB0byB1NjQgb3IgYW4gYXJyYXkgb2YgdTMyIGlmIG1vcmUgYXJlIG5lZWRlZC4gKi8KKwlpZiAobnVtID4gbWF4X2luZGV4KSB7CisJCXByaW50ayhLRVJOX0VSUiAidmlkZW9kZXY6ICVzIG51bSBpcyB0b28gbGFyZ2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFZJREVPX05VTV9ERVZJQ0VTOyBpKyspIHsKKwkJaWYgKHZpZGVvX2RldmljZVtpXSAhPSBOVUxMICYmCisJCSAgICB2aWRlb19kZXZpY2VbaV0gIT0gdmRldiAmJgorCQkgICAgdmlkZW9fZGV2aWNlW2ldLT5kZXYgPT0gdmRldi0+ZGV2KSB7CisJCQl1c2VkIHw9IDEgPDwgdmlkZW9fZGV2aWNlW2ldLT5pbmRleDsKKwkJfQorCX0KKworCWlmIChudW0gPj0gMCkgeworCQlpZiAodXNlZCAmICgxIDw8IG51bSkpCisJCQlyZXR1cm4gLUVORklMRTsKKwkJcmV0dXJuIG51bTsKKwl9CisKKwlpID0gZmZ6KHVzZWQpOworCXJldHVybiBpID4gbWF4X2luZGV4ID8gLUVORklMRSA6IGk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHM7CiAKK2ludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLCBpbnQgdHlwZSwgaW50IG5yKQoreworCXJldHVybiB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgodmZkLCB0eXBlLCBuciwgLTEpOworfQorRVhQT1JUX1NZTUJPTCh2aWRlb19yZWdpc3Rlcl9kZXZpY2UpOworCiAvKioKICAqCXZpZGVvX3JlZ2lzdGVyX2RldmljZSAtIHJlZ2lzdGVyIHZpZGVvNGxpbnV4IGRldmljZXMKICAqCUB2ZmQ6ICB2aWRlbyBkZXZpY2Ugc3RydWN0dXJlIHdlIHdhbnQgdG8gcmVnaXN0ZXIKQEAgLTE4OTgsNyArMjA4NSw4IEBACiAgKgklVkZMX1RZUEVfUkFESU8gLSBBIHJhZGlvIGNhcmQKICAqLwogCi1pbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IHR5cGUsIGludCBucikKK2ludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLCBpbnQgdHlwZSwgaW50IG5yLAorCQkJCQlpbnQgaW5kZXgpCiB7CiAJaW50IGk9MDsKIAlpbnQgYmFzZTsKQEAgLTE5NTUsMjAgKzIxNDMsMjkgQEAKIAl9CiAJdmlkZW9fZGV2aWNlW2ldPXZmZDsKIAl2ZmQtPm1pbm9yPWk7CisKKwlyZXQgPSBnZXRfaW5kZXgodmZkLCBpbmRleCk7CisJdmZkLT5pbmRleCA9IHJldDsKKwogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CisKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBnZXRfaW5kZXggZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZmFpbF9taW5vcjsKKwl9CisKIAltdXRleF9pbml0KCZ2ZmQtPmxvY2spOwogCiAJLyogc3lzZnMgY2xhc3MgKi8KIAltZW1zZXQoJnZmZC0+Y2xhc3NfZGV2LCAweDAwLCBzaXplb2YodmZkLT5jbGFzc19kZXYpKTsKLQlpZiAodmZkLT5kZXYpCi0JCXZmZC0+Y2xhc3NfZGV2LnBhcmVudCA9IHZmZC0+ZGV2OwogCXZmZC0+Y2xhc3NfZGV2LmNsYXNzICAgICAgID0gJnZpZGVvX2NsYXNzOwogCXZmZC0+Y2xhc3NfZGV2LmRldnQgICAgICAgID0gTUtERVYoVklERU9fTUFKT1IsIHZmZC0+bWlub3IpOworCWlmICh2ZmQtPmRldikKKwkJdmZkLT5jbGFzc19kZXYucGFyZW50ID0gdmZkLT5kZXY7CiAJc3ByaW50Zih2ZmQtPmNsYXNzX2Rldi5idXNfaWQsICIlcyVkIiwgbmFtZV9iYXNlLCBpIC0gYmFzZSk7CiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZ2ZmQtPmNsYXNzX2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGZhaWxfbWlub3I7CiAJfQogCkBAIC0xOTg4LDcgKzIxODUsNyBAQAogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0wodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0wodmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4KTsKIAogLyoqCiAgKgl2aWRlb191bnJlZ2lzdGVyX2RldmljZSAtIHVucmVnaXN0ZXIgYSB2aWRlbzRsaW51eCBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKaW5kZXggNWZmOWE1OC4uMDU5YjAxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCisjZGVmaW5lIFZJVklfTU9EVUxFX05BTUUgInZpdmkiCisKIC8qIFdha2UgdXAgYXQgYWJvdXQgMzAgZnBzICovCiAjZGVmaW5lIFdBS0VfTlVNRVJBVE9SIDMwCiAjZGVmaW5lIFdBS0VfREVOT01JTkFUT1IgMTAwMQpAQCAtNDcsNyArNDksNyBAQAogI2luY2x1ZGUgImZvbnQuaCIKIAogI2RlZmluZSBWSVZJX01BSk9SX1ZFUlNJT04gMAotI2RlZmluZSBWSVZJX01JTk9SX1ZFUlNJT04gNAorI2RlZmluZSBWSVZJX01JTk9SX1ZFUlNJT04gNQogI2RlZmluZSBWSVZJX1JFTEVBU0UgMAogI2RlZmluZSBWSVZJX1ZFUlNJT04gXAogCUtFUk5FTF9WRVJTSU9OKFZJVklfTUFKT1JfVkVSU0lPTiwgVklWSV9NSU5PUl9WRVJTSU9OLCBWSVZJX1JFTEVBU0UpCkBAIC02MzAsNyArNjMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQogewogCWlmIChmLT5pbmRleCA+IDApCkBAIC02NDEsNyArNjQzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCB2aXZpX2ZoICpmaCA9IHByaXY7CkBAIC02NTgsNyArNjYwLDcgQEAKIAlyZXR1cm4gKDApOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY190cnlfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgdml2aV9maCAgKmZoICA9IHByaXY7CkBAIC03MDYsMTMgKzcwOCwxMyBAQAogfQogCiAvKkZJWE1FOiBUaGlzIHNlZW1zIHRvIGJlIGdlbmVyaWMgZW5vdWdoIHRvIGJlIGF0IHZpZGVvZGV2MiAqLwotc3RhdGljIGludCB2aWRpb2Nfc19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCB2aXZpX2ZoICAqZmggPSBwcml2OwogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSA9ICZmaC0+dmJfdmlkcTsKIAotCWludCByZXQgPSB2aWRpb2NfdHJ5X2ZtdF9jYXAoZmlsZSwgZmgsIGYpOworCWludCByZXQgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIChyZXQpOwogCkBAIC0xMDE3LDEwICsxMDE5LDE1IEBACiAJCWxpc3RfZGVsKGxpc3QpOwogCQlkZXYgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB2aXZpX2Rldiwgdml2aV9kZXZsaXN0KTsKIAotCQlpZiAoLTEgIT0gZGV2LT52ZmQtPm1pbm9yKQorCQlpZiAoLTEgIT0gZGV2LT52ZmQtPm1pbm9yKSB7CiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZmZCk7Ci0JCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAvZGV2L3ZpZGVvJWQgdW5yZWdpc3RlcmVkLlxuIiwKKwkJCQlWSVZJX01PRFVMRV9OQU1FLCBkZXYtPnZmZC0+bWlub3IpOworCQl9IGVsc2UgewogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52ZmQpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IC9kZXYvdmlkZW8lZCByZWxlYXNlZC5cbiIsCisJCQkJVklWSV9NT0RVTEVfTkFNRSwgZGV2LT52ZmQtPm1pbm9yKTsKKwkJfQogCiAJCWtmcmVlKGRldik7CiAJfQpAQCAtMTA2NiwxMCArMTA3MywxMCBAQAogCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiAKIAkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgPSB2aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF9jYXAgID0gdmlkaW9jX2VudW1fZm10X2NhcCwKLQkudmlkaW9jX2dfZm10X2NhcCAgICAgPSB2aWRpb2NfZ19mbXRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF9jYXAgICA9IHZpZGlvY190cnlfZm10X2NhcCwKLQkudmlkaW9jX3NfZm10X2NhcCAgICAgPSB2aWRpb2Nfc19mbXRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgICAgID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgICA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAogCS52aWRpb2NfcmVxYnVmcyAgICAgICA9IHZpZGlvY19yZXFidWZzLAogCS52aWRpb2NfcXVlcnlidWYgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKIAkudmlkaW9jX3FidWYgICAgICAgICAgPSB2aWRpb2NfcWJ1ZiwKQEAgLTExMzEsNiArMTEzOCw4IEBACiAJCQl2aWRlb19ucisrOwogCiAJCWRldi0+dmZkID0gdmZkOworCQlwcmludGsoS0VSTl9JTkZPICIlczogVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWRcbiIsCisJCQlWSVZJX01PRFVMRV9OQU1FLCB2ZmQtPm1pbm9yKTsKIAl9CiAKIAlpZiAocmV0IDwgMCkgewpAQCAtMTEzOCw3ICsxMTQ3LDkgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRXJyb3IgJWQgd2hpbGUgbG9hZGluZyB2aXZpIGRyaXZlclxuIiwgcmV0KTsKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gVGVjaG5vbG9neSBNYWdhemluZSBWaXJ0dWFsIFZpZGVvICIKLQkJCQkgIkNhcHR1cmUgQm9hcmQgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiIpOworCQkJIkNhcHR1cmUgQm9hcmQgdmVyICV1LiV1LiV1IHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iLAorCQkJKFZJVklfVkVSU0lPTiA+PiAxNikgJiAweEZGLCAoVklWSV9WRVJTSU9OID4+IDgpICYgMHhGRiwKKwkJCVZJVklfVkVSU0lPTiAmIDB4RkYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnAyN3NtcHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnAyN3NtcHguYwppbmRleCBhMWY3NmVlLi5jYmVjYjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZwMjdzbXB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cDI3c21weC5jCkBAIC0xNjYsNCArMTY2LDMgQEAKIAkucmVtb3ZlID0gdnAyN3NtcHhfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHZwMjdzbXB4X2lkLAogfTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMKaW5kZXggZmM1MDI5OS4uN2JlNDdhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jCkBAIC0zMjcsNCArMzI3LDMgQEAKIAkucmVtb3ZlID0gd204NzM5X3JlbW92ZSwKIAkuaWRfdGFibGUgPSB3bTg3MzlfaWQsCiB9OwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYwppbmRleCA1MDYzNzhhNS4uYzJhYjcwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCkBAIC00Miw3ICs0Miw2IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MzYgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotCiBJMkNfQ0xJRU5UX0lOU01PRDsKIAogCkBAIC0yMzAsNCArMjI5LDMgQEAKIAkucmVtb3ZlID0gd204Nzc1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSB3bTg3NzVfaWQsCiB9OwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jCmluZGV4IDAwNmQ0ODguLjA5MjllZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jCkBAIC01OSw4ICs1OSw2IEBACiAjaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCiAjaW5jbHVkZSAiem9yYW5fcHJvY2ZzLmgiCiAKLSNkZWZpbmUgSTJDX05BTUUoeCkgKHgpLT5uYW1lCi0KIGV4dGVybiBjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0IHpvcmFuX2Zvcm1hdHNbXTsKIAogc3RhdGljIGludCBjYXJkW0JVWl9NQVhdID0geyAtMSwgLTEsIC0xLCAtMSB9OwpAQCAtMzYwLDE0ICszNTgsNiBAQAogCWNhc2UgSTJDX0RSSVZFUklEX1ZQWDMyMjA6CiAJCW5hbWUgPSAidnB4MzIyMCI7CiAJCWJyZWFrOwotLyoJY2FzZSBJMkNfRFJJVkVSSURfVlBYMzIyNDoKLQkJbmFtZSA9ICJ2cHgzMjI0IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfTVNFMzAwMDoKLQkJbmFtZSA9ICJtc2UzMDAwIjsKLQkJYnJlYWs7Ki8KLQlkZWZhdWx0OgotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gbmFtZTsKQEAgLTM4OCw4ICszNzgsNiBAQAogCWNhc2UgQ09ERUNfVFlQRV9aUjM2MDE2OgogCQluYW1lID0gInpyMzYwMTYiOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gbmFtZTsKQEAgLTQzMCw3ICs0MTgsNiBAQAogCQkudHlwZSA9IERDMTBfb2xkLAogCQkubmFtZSA9ICJEQzEwKG9sZCkiLAogCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKLQkJLyouaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfTVNFMzAwMCwqLwogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCiAJCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCiAKQEAgLTgwOSw3ICs3OTYsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgem9yYW5faTJjX2JpdF9kYXRhX3RlbXBsYXRlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSB6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUgPSB7CiAJLnNldHNkYSA9IHpvcmFuX2kyY19zZXRzZGEsCiAJLnNldHNjbCA9IHpvcmFuX2kyY19zZXRzY2wsCiAJLmdldHNkYSA9IHpvcmFuX2kyY19nZXRzZGEsCkBAIC04MTgsMjQgKzgwNSwxNyBAQAogCS50aW1lb3V0ID0gMTAwLAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciB6b3Jhbl9pMmNfYWRhcHRlcl90ZW1wbGF0ZSA9IHsKLQkubmFtZSA9ICJ6cjM2MDU3IiwKLQkuaWQgPSBJMkNfSFdfQl9aUjM2MDY3LAotCS5hbGdvID0gTlVMTCwKLQkuY2xpZW50X3JlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF9yZWdpc3RlciwKLQkuY2xpZW50X3VucmVnaXN0ZXIgPSB6b3Jhbl9pMmNfY2xpZW50X3VucmVnaXN0ZXIsCi19OwotCiBzdGF0aWMgaW50CiB6b3Jhbl9yZWdpc3Rlcl9pMmMgKHN0cnVjdCB6b3JhbiAqenIpCiB7CiAJbWVtY3B5KCZ6ci0+aTJjX2FsZ28sICZ6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEpKTsKIAl6ci0+aTJjX2FsZ28uZGF0YSA9IHpyOwotCW1lbWNweSgmenItPmkyY19hZGFwdGVyLCAmem9yYW5faTJjX2FkYXB0ZXJfdGVtcGxhdGUsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpKTsKLQlzdHJuY3B5KEkyQ19OQU1FKCZ6ci0+aTJjX2FkYXB0ZXIpLCBaUl9ERVZOQU1FKHpyKSwKLQkJc2l6ZW9mKEkyQ19OQU1FKCZ6ci0+aTJjX2FkYXB0ZXIpKSAtIDEpOworCXpyLT5pMmNfYWRhcHRlci5pZCA9IEkyQ19IV19CX1pSMzYwNjc7CisJenItPmkyY19hZGFwdGVyLmNsaWVudF9yZWdpc3RlciA9IHpvcmFuX2kyY19jbGllbnRfcmVnaXN0ZXI7CisJenItPmkyY19hZGFwdGVyLmNsaWVudF91bnJlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF91bnJlZ2lzdGVyOworCXN0cmxjcHkoenItPmkyY19hZGFwdGVyLm5hbWUsIFpSX0RFVk5BTUUoenIpLAorCQlzaXplb2YoenItPmkyY19hZGFwdGVyLm5hbWUpKTsKIAlpMmNfc2V0X2FkYXBkYXRhKCZ6ci0+aTJjX2FkYXB0ZXIsIHpyKTsKIAl6ci0+aTJjX2FkYXB0ZXIuYWxnb19kYXRhID0gJnpyLT5pMmNfYWxnbzsKIAl6ci0+aTJjX2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZ6ci0+cGNpX2Rldi0+ZGV2OwpAQCAtMTE0Nyw3ICsxMTI3LDcgQEAKIAkJZ290byBleGl0X2ZyZWU7CiAJfQogCWZvciAoaiA9IDA7IGogPCBCVVpfTlVNX1NUQVRfQ09NOyBqKyspIHsKLQkJenItPnN0YXRfY29tW2pdID0gMTsJLyogbWFyayBhcyB1bmF2YWlsYWJsZSB0byB6cjM2MDU3ICovCisJCXpyLT5zdGF0X2NvbVtqXSA9IGNwdV90b19sZTMyKDEpOyAvKiBtYXJrIGFzIHVuYXZhaWxhYmxlIHRvIHpyMzYwNTcgKi8KIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKaW5kZXggNTM5NGQ3YS4uYzA2NzU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCkBAIC05NCw3ICs5NCw2IEBACiAJCQkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSBcCiAJCQkgICAgICApCiAKLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19WNEwxX0NPTVBBVCkKICNkZWZpbmUgWkZNVChwYWwsIGZjYywgY3MpIFwKQEAgLTI3OTUsNyArMjc5NCw3IEBACiAJewogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKIAkJaW50IGksIHJlcyA9IDA7Ci0JCV9fdTMyIHByaW50Zm9ybWF0OworCQlfX2xlMzIgcHJpbnRmb3JtYXQ7CiAKIAkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfRk1UIC0gdHlwZT0lZCwgIiwKIAkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOwpAQCAtMzA0MCw3ICszMDM5LDcgQEAKIAl7CiAJCWludCBpLCByZXMgPSAwOwogCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIgPSBhcmc7Ci0JCV9fdTMyIHByaW50Zm9ybWF0ID0gX19jcHVfdG9fbGUzMihmYi0+Zm10LnBpeGVsZm9ybWF0KTsKKwkJX19sZTMyIHByaW50Zm9ybWF0ID0gX19jcHVfdG9fbGUzMihmYi0+Zm10LnBpeGVsZm9ybWF0KTsKIAogCQlkcHJpbnRrKDMsCiAJCQlLRVJOX0RFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCmluZGV4IGEwZTQ5ZGMuLjQ4NWRmMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCkBAIC01MjEsNyArNTIxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19lbnVtX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IHpyMzY0eHhfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJICAgICAgIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7CiAJaWYgKGYtPmluZGV4ID4gMCkKQEAgLTUzNyw3ICs1MzcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHpyMzY0eHhfdmlkaW9jX3RyeV9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwpAQCAtNTY0LDcgKzU2NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgenIzNjR4eF92aWRpb2NfZ19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CkBAIC01ODksNyArNTg5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19zX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHpyMzY0eHhfdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKQEAgLTc3MCwxMCArNzcwLDEwIEBACiAJLm1pbm9yID0gLTEsCiAKIAkudmlkaW9jX3F1ZXJ5Y2FwCT0genIzNjR4eF92aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19lbnVtX2ZtdF9jYXAJPSB6cjM2NHh4X3ZpZGlvY19lbnVtX2ZtdF9jYXAsCi0JLnZpZGlvY190cnlfZm10X2NhcAk9IHpyMzY0eHhfdmlkaW9jX3RyeV9mbXRfY2FwLAotCS52aWRpb2Nfc19mbXRfY2FwCT0genIzNjR4eF92aWRpb2Nfc19mbXRfY2FwLAotCS52aWRpb2NfZ19mbXRfY2FwCT0genIzNjR4eF92aWRpb2NfZ19mbXRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHpyMzY0eHhfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJPSB6cjM2NHh4X3ZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwCT0genIzNjR4eF92aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJPSB6cjM2NHh4X3ZpZGlvY19nX2ZtdF92aWRfY2FwLAogCS52aWRpb2NfZW51bV9pbnB1dAk9IHpyMzY0eHhfdmlkaW9jX2VudW1faW5wdXQsCiAJLnZpZGlvY19nX2lucHV0CQk9IHpyMzY0eHhfdmlkaW9jX2dfaW5wdXQsCiAJLnZpZGlvY19zX2lucHV0CQk9IHpyMzY0eHhfdmlkaW9jX3NfaW5wdXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2hvc3Qvam1iMzh4X21zLmMgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3Qvam1iMzh4X21zLmMKaW5kZXggYTA1NDY2OC4uNGUzYmZiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9ob3N0L2ptYjM4eF9tcy5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9qbWIzOHhfbXMuYwpAQCAtNTEsNyArNTEsNyBAQAogCXZvaWQgX19pb21lbSAgICAgICAgICAgICphZGRyOwogCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgaWQ7Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgaG9zdF9pZFtERVZJQ0VfSURfU0laRV07CisJY2hhciAgICAgICAgICAgICAgICAgICAgaG9zdF9pZFszMl07CiAJaW50ICAgICAgICAgICAgICAgICAgICAgaXJxOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIGJsb2NrX3BvczsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgICB0aW1lb3V0X2ppZmZpZXM7CkBAIC03ODEsNyArNzgxLDcgQEAKIAogCXNwaW5fbG9ja19pbml0KCZob3N0LT5sb2NrKTsKIAlob3N0LT5pZCA9IGNudDsKLQlzbnByaW50Zihob3N0LT5ob3N0X2lkLCBERVZJQ0VfSURfU0laRSwgRFJJVkVSX05BTUUgIjpzbG90JWQiLAorCXNucHJpbnRmKGhvc3QtPmhvc3RfaWQsIHNpemVvZihob3N0LT5ob3N0X2lkKSwgRFJJVkVSX05BTUUgIjpzbG90JWQiLAogCQkgaG9zdC0+aWQpOwogCWhvc3QtPmlycSA9IGptLT5wZGV2LT5pcnE7CiAJaG9zdC0+dGltZW91dF9qaWZmaWVzID0gbXNlY3NfdG9famlmZmllcygxMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKaW5kZXggNzVlNTk5Yi4uMzQ0MDJjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKQEAgLTE2NzAsNyArMTY3MCw4IEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJmlvYy0+ZmF1bHRfcmVzZXRfd29yaywgbXB0X2ZhdWx0X3Jlc2V0X3dvcmspOwogCXNwaW5fbG9ja19pbml0KCZpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfbG9jayk7CiAKLQlzbnByaW50Zihpb2MtPnJlc2V0X3dvcmtfcV9uYW1lLCBLT0JKX05BTUVfTEVOLCAibXB0X3BvbGxfJWQiLCBpb2MtPmlkKTsKKwlzbnByaW50Zihpb2MtPnJlc2V0X3dvcmtfcV9uYW1lLCBzaXplb2YoaW9jLT5yZXNldF93b3JrX3FfbmFtZSksCisJCSAibXB0X3BvbGxfJWQiLCBpb2MtPmlkKTsKIAlpb2MtPnJlc2V0X3dvcmtfcSA9CiAJCWNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGlvYy0+cmVzZXRfd29ya19xX25hbWUpOwogCWlmICghaW9jLT5yZXNldF93b3JrX3EpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggNmFkYWI2NC4uZGZmMDQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTcwNywxMiArNzA3LDEyIEBACiAJdTgJCQkgZmNfbGlua19zcGVlZFsyXTsKIAlzcGlubG9ja190CQkgZmNfcmVzY2FuX3dvcmtfbG9jazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJIGZjX3Jlc2Nhbl93b3JrOwotCWNoYXIJCQkgZmNfcmVzY2FuX3dvcmtfcV9uYW1lW0tPQkpfTkFNRV9MRU5dOworCWNoYXIJCQkgZmNfcmVzY2FuX3dvcmtfcV9uYW1lWzIwXTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZmNfcmVzY2FuX3dvcmtfcTsKIAlzdHJ1Y3Qgc2NzaV9jbW5kCSoqU2NzaUxvb2t1cDsKIAlzcGlubG9ja190CQkgIHNjc2lfbG9va3VwX2xvY2s7CiAKLQljaGFyCQkJIHJlc2V0X3dvcmtfcV9uYW1lW0tPQkpfTkFNRV9MRU5dOworCWNoYXIJCQkgcmVzZXRfd29ya19xX25hbWVbMjBdOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93b3JrX3E7CiAJc3RydWN0IGRlbGF5ZWRfd29yawkgZmF1bHRfcmVzZXRfd29yazsKIAlzcGlubG9ja190CQkgZmF1bHRfcmVzZXRfd29ya19sb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCmluZGV4IGZjMzFjYTYuLmIzNmNhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKQEAgLTEzMjYsOCArMTMyNiw4IEBACiAKIAkvKiBpbml0aWFsaXplIHdvcmtxdWV1ZSAqLwogCi0Jc25wcmludGYoaW9jLT5mY19yZXNjYW5fd29ya19xX25hbWUsIEtPQkpfTkFNRV9MRU4sICJtcHRmY193cV8lZCIsCi0JCXNoLT5ob3N0X25vKTsKKwlzbnByaW50Zihpb2MtPmZjX3Jlc2Nhbl93b3JrX3FfbmFtZSwgc2l6ZW9mKGlvYy0+ZmNfcmVzY2FuX3dvcmtfcV9uYW1lKSwKKwkJICJtcHRmY193cV8lZCIsIHNoLT5ob3N0X25vKTsKIAlpb2MtPmZjX3Jlc2Nhbl93b3JrX3EgPQogCQljcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShpb2MtPmZjX3Jlc2Nhbl93b3JrX3FfbmFtZSk7CiAJaWYgKCFpb2MtPmZjX3Jlc2Nhbl93b3JrX3EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCBhZTk2YmQ2Li45ZjkzYzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTUsNiArNSwxMCBAQAogbWVudSAiTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycyIKIAlkZXBlbmRzIG9uIEhBU19JT01FTQogCitjb25maWcgTUZEX0NPUkUKKwl0cmlzdGF0ZQorCWRlZmF1bHQgbgorCiBjb25maWcgTUZEX1NNNTAxCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFNpbGljb24gTW90aW9uIFNNNTAxIgogCSAtLS1oZWxwLS0tCkBAIC0xNyw3ICsyMSw3IEBACiAKIGNvbmZpZyBNRkRfQVNJQzMKIAlib29sICJTdXBwb3J0IGZvciBDb21wYXEgQVNJQzMiCi0JZGVwZW5kcyBvbiBHRU5FUklDX0hBUkRJUlFTICYmIEFSTQorCWRlcGVuZHMgb24gR0VORVJJQ19IQVJESVJRUyAmJiBIQVZFX0dQSU9fTElCICYmIEFSTQogCSAtLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQVNJQzMgbXVsdGlmdW5jdGlvbiBjaGlwIGZvdW5kIG9uIG1hbnkKIAkgIFBEQXMgKG1haW5seSBpUEFRIGFuZCBIVEMgYmFzZWQgb25lcykKQEAgLTM4LDYgKzQyLDEzIEBACiAJICBIVEMgTWFnaWNpYW4gZGV2aWNlcywgcmVzcGVjdGl2ZWx5LiBBY3R1YWwgZnVuY3Rpb25hbGl0eSBpcwogCSAgaGFuZGxlZCBieSB0aGUgbGVkcy1wYXNpYzMgYW5kIGRzMXdtIGRyaXZlcnMuCiAKK2NvbmZpZyBNRkRfVEM2MzkzWEIKKwlib29sICJTdXBwb3J0IFRvc2hpYmEgVEM2MzkzWEIiCisJZGVwZW5kcyBvbiBIQVZFX0dQSU9fTElCCisJc2VsZWN0IE1GRF9DT1JFCisJaGVscAorCSAgU3VwcG9ydCBmb3IgVG9zaGliYSBNb2JpbGUgSU8gQ29udHJvbGxlciBUQzYzOTNYQgorCiBlbmRtZW51CiAKIG1lbnUgIk11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggZWVmNGUyNi4uMzNkYWEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTgsNiArOCwxMCBAQAogb2JqLSQoQ09ORklHX0hUQ19FR1BJTykJCSs9IGh0Yy1lZ3Bpby5vCiBvYmotJChDT05GSUdfSFRDX1BBU0lDMykJKz0gaHRjLXBhc2ljMy5vCiAKK29iai0kKENPTkZJR19NRkRfVEM2MzkzWEIpCSs9IHRjNjM5M3hiLm8KKworb2JqLSQoQ09ORklHX01GRF9DT1JFKQkJKz0gbWZkLWNvcmUubworCiBvYmotJChDT05GSUdfTUNQKQkJKz0gbWNwLWNvcmUubwogb2JqLSQoQ09ORklHX01DUF9TQTExWDApCSs9IG1jcC1zYTExeDAubwogb2JqLSQoQ09ORklHX01DUF9VQ0IxMjAwKQkrPSB1Y2IxeDAwLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXNpYzMuYyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKaW5kZXggZWY4YTQ5Mi4uM2I4NzBlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXNpYzMuYworKysgYi9kcml2ZXJzL21mZC9hc2ljMy5jCkBAIC05LDcgKzksNyBAQAogICoKICAqIENvcHlyaWdodCAyMDAxIENvbXBhcSBDb21wdXRlciBDb3Jwb3JhdGlvbi4KICAqIENvcHlyaWdodCAyMDA0LTIwMDUgUGhpbCBCbHVuZGVsbAotICogQ29weXJpZ2h0IDIwMDcgT3BlbmVkSGFuZCBMdGQuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IE9wZW5lZEhhbmQgTHRkLgogICoKICAqIEF1dGhvcnM6IFBoaWwgQmx1bmRlbGwgPHBiQGhhbmRoZWxkcy5vcmc+LAogICoJICAgIFNhbXVlbCBPcnRpeiA8c2FtZW9Ab3BlbmVkaGFuZC5jb20+CkBAIC0xOSwxMiArMTksMjYgQEAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21mZC9hc2ljMy5oPgogCitzdHJ1Y3QgYXNpYzMgeworCXZvaWQgX19pb21lbSAqbWFwcGluZzsKKwl1bnNpZ25lZCBpbnQgYnVzX3NoaWZ0OworCXVuc2lnbmVkIGludCBpcnFfbnI7CisJdW5zaWduZWQgaW50IGlycV9iYXNlOworCXNwaW5sb2NrX3QgbG9jazsKKwl1MTYgaXJxX2JvdGhlZGdlWzRdOworCXN0cnVjdCBncGlvX2NoaXAgZ3BpbzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cit9OworCitzdGF0aWMgaW50IGFzaWMzX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhc2ljM193cml0ZV9yZWdpc3RlcihzdHJ1Y3QgYXNpYzMgKmFzaWMsCiAJCQkJIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWx1ZSkKIHsKQEAgLTQxLDggKzU1LDggQEAKIAogLyogSVJRcyAqLwogI2RlZmluZSBNQVhfQVNJQ19JU1JfTE9PUFMgICAgMjAKLSNkZWZpbmUgQVNJQzNfR1BJT19CYXNlX0lOQ1IgXAotCShBU0lDM19HUElPX0JfQmFzZSAtIEFTSUMzX0dQSU9fQV9CYXNlKQorI2RlZmluZSBBU0lDM19HUElPX0JBU0VfSU5DUiBcCisJKEFTSUMzX0dQSU9fQl9CQVNFIC0gQVNJQzNfR1BJT19BX0JBU0UpCiAKIHN0YXRpYyB2b2lkIGFzaWMzX2lycV9mbGlwX2VkZ2Uoc3RydWN0IGFzaWMzICphc2ljLAogCQkJCXUzMiBiYXNlLCBpbnQgYml0KQpAQCAtNTIsMTAgKzY2LDEwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXNpYy0+bG9jaywgZmxhZ3MpOwogCWVkZ2UgPSBhc2ljM19yZWFkX3JlZ2lzdGVyKGFzaWMsCi0JCQkJICAgYmFzZSArIEFTSUMzX0dQSU9fRWRnZVRyaWdnZXIpOworCQkJCSAgIGJhc2UgKyBBU0lDM19HUElPX0VER0VfVFJJR0dFUik7CiAJZWRnZSBePSBiaXQ7CiAJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywKLQkJCSAgICAgYmFzZSArIEFTSUMzX0dQSU9fRWRnZVRyaWdnZXIsIGVkZ2UpOworCQkJICAgICBiYXNlICsgQVNJQzNfR1BJT19FREdFX1RSSUdHRVIsIGVkZ2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWMtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtNzUsNyArODksNyBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhc2ljLT5sb2NrLCBmbGFncyk7CiAJCXN0YXR1cyA9IGFzaWMzX3JlYWRfcmVnaXN0ZXIoYXNpYywKLQkJCQkJICAgICBBU0lDM19PRkZTRVQoSU5UUiwgUEludFN0YXQpKTsKKwkJCQkJICAgICBBU0lDM19PRkZTRVQoSU5UUiwgUF9JTlRfU1RBVCkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2ljLT5sb2NrLCBmbGFncyk7CiAKIAkJLyogQ2hlY2sgYWxsIHRlbiByZWdpc3RlciBiaXRzICovCkBAIC04NywxNyArMTAxLDE3IEBACiAJCQlpZiAoc3RhdHVzICYgKDEgPDwgYmFuaykpIHsKIAkJCQl1bnNpZ25lZCBsb25nIGJhc2UsIGlzdGF0OwogCi0JCQkJYmFzZSA9IEFTSUMzX0dQSU9fQV9CYXNlCi0JCQkJICAgICAgICsgYmFuayAqIEFTSUMzX0dQSU9fQmFzZV9JTkNSOworCQkJCWJhc2UgPSBBU0lDM19HUElPX0FfQkFTRQorCQkJCSAgICAgICArIGJhbmsgKiBBU0lDM19HUElPX0JBU0VfSU5DUjsKIAogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZhc2ljLT5sb2NrLCBmbGFncyk7CiAJCQkJaXN0YXQgPSBhc2ljM19yZWFkX3JlZ2lzdGVyKGFzaWMsCiAJCQkJCQkJICAgIGJhc2UgKwotCQkJCQkJCSAgICBBU0lDM19HUElPX0ludFN0YXR1cyk7CisJCQkJCQkJICAgIEFTSUMzX0dQSU9fSU5UX1NUQVRVUyk7CiAJCQkJLyogQ2xlYXJpbmcgSW50U3RhdHVzICovCiAJCQkJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywKIAkJCQkJCSAgICAgYmFzZSArCi0JCQkJCQkgICAgIEFTSUMzX0dQSU9fSW50U3RhdHVzLCAwKTsKKwkJCQkJCSAgICAgQVNJQzNfR1BJT19JTlRfU1RBVFVTLCAwKTsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2ljLT5sb2NrLCBmbGFncyk7CiAKIAkJCQlmb3IgKGkgPSAwOyBpIDwgQVNJQzNfR1BJT1NfUEVSX0JBTks7IGkrKykgewpAQCAtMTIzLDcgKzEzNyw3IEBACiAJCWZvciAoaSA9IEFTSUMzX05VTV9HUElPUzsgaSA8IEFTSUMzX05SX0lSUVM7IGkrKykgewogCQkJLyogVGhleSBzdGFydCBhdCBiaXQgNCBhbmQgZ28gdXAgKi8KIAkJCWlmIChzdGF0dXMgJiAoMSA8PCAoaSAtIEFTSUMzX05VTV9HUElPUyArIDQpKSkgewotCQkJCWRlc2MgPSBpcnFfZGVzYyArICArIGk7CisJCQkJZGVzYyA9IGlycV9kZXNjICsgYXNpYy0+aXJxX2Jhc2UgKyBpOwogCQkJCWRlc2MtPmhhbmRsZV9pcnEoYXNpYy0+aXJxX2Jhc2UgKyBpLAogCQkJCQkJIGRlc2MpOwogCQkJfQpAQCAtMTMxLDggKzE0NSw3IEBACiAJfQogCiAJaWYgKGl0ZXIgPj0gTUFYX0FTSUNfSVNSX0xPT1BTKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBvdmVycnVuXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlkZXZfZXJyKGFzaWMtPmRldiwgImludGVycnVwdCBwcm9jZXNzaW5nIG92ZXJydW5cbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBhc2ljM19pcnFfdG9fYmFuayhzdHJ1Y3QgYXNpYzMgKmFzaWMsIGludCBpcnEpCkBAIC0xNDEsNyArMTU0LDcgQEAKIAogCW4gPSAoaXJxIC0gYXNpYy0+aXJxX2Jhc2UpID4+IDQ7CiAKLQlyZXR1cm4gKG4gKiAoQVNJQzNfR1BJT19CX0Jhc2UgLSBBU0lDM19HUElPX0FfQmFzZSkpOworCXJldHVybiAobiAqIChBU0lDM19HUElPX0JfQkFTRSAtIEFTSUMzX0dQSU9fQV9CQVNFKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFzaWMzX2lycV90b19pbmRleChzdHJ1Y3QgYXNpYzMgKmFzaWMsIGludCBpcnEpCkBAIC0xNTksOSArMTcyLDkgQEAKIAlpbmRleCA9IGFzaWMzX2lycV90b19pbmRleChhc2ljLCBpcnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFzaWMtPmxvY2ssIGZsYWdzKTsKLQl2YWwgPSBhc2ljM19yZWFkX3JlZ2lzdGVyKGFzaWMsIGJhbmsgKyBBU0lDM19HUElPX01hc2spOworCXZhbCA9IGFzaWMzX3JlYWRfcmVnaXN0ZXIoYXNpYywgYmFuayArIEFTSUMzX0dQSU9fTUFTSyk7CiAJdmFsIHw9IDEgPDwgaW5kZXg7Ci0JYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgYmFuayArIEFTSUMzX0dQSU9fTWFzaywgdmFsKTsKKwlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBiYW5rICsgQVNJQzNfR1BJT19NQVNLLCB2YWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWMtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTczLDE1ICsxODYsMTUgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhc2ljLT5sb2NrLCBmbGFncyk7CiAJcmVndmFsID0gYXNpYzNfcmVhZF9yZWdpc3Rlcihhc2ljLAotCQkJCSAgICAgQVNJQzNfSU5UUl9CYXNlICsKLQkJCQkgICAgIEFTSUMzX0lOVFJfSW50TWFzayk7CisJCQkJICAgICBBU0lDM19JTlRSX0JBU0UgKworCQkJCSAgICAgQVNJQzNfSU5UUl9JTlRfTUFTSyk7CiAKIAlyZWd2YWwgJj0gfihBU0lDM19JTlRNQVNLX01BU0swIDw8CiAJCSAgICAoaXJxIC0gKGFzaWMtPmlycV9iYXNlICsgQVNJQzNfTlVNX0dQSU9TKSkpOwogCiAJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywKLQkJCSAgICAgQVNJQzNfSU5UUl9CYXNlICsKLQkJCSAgICAgQVNJQzNfSU5UUl9JbnRNYXNrLAorCQkJICAgICBBU0lDM19JTlRSX0JBU0UgKworCQkJICAgICBBU0lDM19JTlRSX0lOVF9NQVNLLAogCQkJICAgICByZWd2YWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWMtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE5Niw5ICsyMDksOSBAQAogCWluZGV4ID0gYXNpYzNfaXJxX3RvX2luZGV4KGFzaWMsIGlycSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXNpYy0+bG9jaywgZmxhZ3MpOwotCXZhbCA9IGFzaWMzX3JlYWRfcmVnaXN0ZXIoYXNpYywgYmFuayArIEFTSUMzX0dQSU9fTWFzayk7CisJdmFsID0gYXNpYzNfcmVhZF9yZWdpc3Rlcihhc2ljLCBiYW5rICsgQVNJQzNfR1BJT19NQVNLKTsKIAl2YWwgJj0gfigxIDw8IGluZGV4KTsKLQlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBiYW5rICsgQVNJQzNfR1BJT19NYXNrLCB2YWwpOworCWFzaWMzX3dyaXRlX3JlZ2lzdGVyKGFzaWMsIGJhbmsgKyBBU0lDM19HUElPX01BU0ssIHZhbCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXNpYy0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0yMTAsMTUgKzIyMywxNSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFzaWMtPmxvY2ssIGZsYWdzKTsKIAlyZWd2YWwgPSBhc2ljM19yZWFkX3JlZ2lzdGVyKGFzaWMsCi0JCQkJICAgICBBU0lDM19JTlRSX0Jhc2UgKwotCQkJCSAgICAgQVNJQzNfSU5UUl9JbnRNYXNrKTsKKwkJCQkgICAgIEFTSUMzX0lOVFJfQkFTRSArCisJCQkJICAgICBBU0lDM19JTlRSX0lOVF9NQVNLKTsKIAogCXJlZ3ZhbCB8PSAoQVNJQzNfSU5UTUFTS19NQVNLMCA8PAogCQkgICAoaXJxIC0gKGFzaWMtPmlycV9iYXNlICsgQVNJQzNfTlVNX0dQSU9TKSkpOwogCiAJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywKLQkJCSAgICAgQVNJQzNfSU5UUl9CYXNlICsKLQkJCSAgICAgQVNJQzNfSU5UUl9JbnRNYXNrLAorCQkJICAgICBBU0lDM19JTlRSX0JBU0UgKworCQkJICAgICBBU0lDM19JTlRSX0lOVF9NQVNLLAogCQkJICAgICByZWd2YWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWMtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTIzNiwxMSArMjQ5LDExIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXNpYy0+bG9jaywgZmxhZ3MpOwogCWxldmVsID0gYXNpYzNfcmVhZF9yZWdpc3Rlcihhc2ljLAotCQkJCSAgICBiYW5rICsgQVNJQzNfR1BJT19MZXZlbFRyaWdnZXIpOworCQkJCSAgICBiYW5rICsgQVNJQzNfR1BJT19MRVZFTF9UUklHR0VSKTsKIAllZGdlID0gYXNpYzNfcmVhZF9yZWdpc3Rlcihhc2ljLAotCQkJCSAgIGJhbmsgKyBBU0lDM19HUElPX0VkZ2VUcmlnZ2VyKTsKKwkJCQkgICBiYW5rICsgQVNJQzNfR1BJT19FREdFX1RSSUdHRVIpOwogCXRyaWdnZXIgPSBhc2ljM19yZWFkX3JlZ2lzdGVyKGFzaWMsCi0JCQkJICAgICAgYmFuayArIEFTSUMzX0dQSU9fVHJpZ2dlclR5cGUpOworCQkJCSAgICAgIGJhbmsgKyBBU0lDM19HUElPX1RSSUdHRVJfVFlQRSk7CiAJYXNpYy0+aXJxX2JvdGhlZGdlWyhpcnEgLSBhc2ljLT5pcnFfYmFzZSkgPj4gNF0gJj0gfmJpdDsKIAogCWlmICh0eXBlID09IElSUVRfUklTSU5HKSB7CkBAIC0yNTEsNyArMjY0LDcgQEAKIAkJZWRnZSAmPSB+Yml0OwogCX0gZWxzZSBpZiAodHlwZSA9PSBJUlFUX0JPVEhFREdFKSB7CiAJCXRyaWdnZXIgfD0gYml0OwotCQlpZiAoYXNpYzNfZ3Bpb19nZXRfdmFsdWUoYXNpYywgaXJxIC0gYXNpYy0+aXJxX2Jhc2UpKQorCQlpZiAoYXNpYzNfZ3Bpb19nZXQoJmFzaWMtPmdwaW8sIGlycSAtIGFzaWMtPmlycV9iYXNlKSkKIAkJCWVkZ2UgJj0gfmJpdDsKIAkJZWxzZQogCQkJZWRnZSB8PSBiaXQ7CkBAIC0yNjgsMTMgKzI4MSwxMyBAQAogCQkgKiBiZSBjYXJlZnVsIHRvIG5vdCB1bm1hc2sgdGhlbSBpZiBtYXNrIHdhcyBhbHNvIGNhbGxlZC4KIAkJICogUHJvYmFibHkgbmVlZCBpbnRlcm5hbCBzdGF0ZSBmb3IgbWFzay4KIAkJICovCi0JCXByaW50ayhLRVJOX05PVElDRSAiYXNpYzM6IGlycSB0eXBlIG5vdCBjaGFuZ2VkLlxuIik7CisJCWRldl9ub3RpY2UoYXNpYy0+ZGV2LCAiaXJxIHR5cGUgbm90IGNoYW5nZWRcbiIpOwogCX0KLQlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBiYW5rICsgQVNJQzNfR1BJT19MZXZlbFRyaWdnZXIsCisJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgYmFuayArIEFTSUMzX0dQSU9fTEVWRUxfVFJJR0dFUiwKIAkJCSAgICAgbGV2ZWwpOwotCWFzaWMzX3dyaXRlX3JlZ2lzdGVyKGFzaWMsIGJhbmsgKyBBU0lDM19HUElPX0VkZ2VUcmlnZ2VyLAorCWFzaWMzX3dyaXRlX3JlZ2lzdGVyKGFzaWMsIGJhbmsgKyBBU0lDM19HUElPX0VER0VfVFJJR0dFUiwKIAkJCSAgICAgZWRnZSk7Ci0JYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgYmFuayArIEFTSUMzX0dQSU9fVHJpZ2dlclR5cGUsCisJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgYmFuayArIEFTSUMzX0dQSU9fVFJJR0dFUl9UWVBFLAogCQkJICAgICB0cmlnZ2VyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2ljLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CkBAIC0yOTUsMTEgKzMwOCwxMiBAQAogCS51bm1hc2sJCT0gYXNpYzNfdW5tYXNrX2lycSwKIH07CiAKLXN0YXRpYyBpbnQgYXNpYzNfaXJxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhc2ljM19pcnFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgYXNpYzMgKmFzaWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl1bnNpZ25lZCBsb25nIGNsa3NlbCA9IDA7CiAJdW5zaWduZWQgaW50IGlycSwgaXJxX2Jhc2U7CisJaW50IG1hcF9zaXplOwogCiAJYXNpYy0+aXJxX25yID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoYXNpYy0+aXJxX25yIDwgMCkKQEAgLTMyMyw3ICszMzcsNyBAQAogCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwogCX0KIAotCWFzaWMzX3dyaXRlX3JlZ2lzdGVyKGFzaWMsIEFTSUMzX09GRlNFVChJTlRSLCBJbnRNYXNrKSwKKwlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBBU0lDM19PRkZTRVQoSU5UUiwgSU5UX01BU0spLAogCQkJICAgICBBU0lDM19JTlRNQVNLX0dJTlRNQVNLKTsKIAogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGFzaWMtPmlycV9uciwgYXNpYzNfaXJxX2RlbXV4KTsKQEAgLTM1MCwxNDkgKzM2NCwxODIgQEAKIH0KIAogLyogR1BJT3MgKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGFzaWMzX2dldF9ncGlvKHN0cnVjdCBhc2ljMyAqYXNpYywgdW5zaWduZWQgaW50IGJhc2UsCi0JCQkJIHVuc2lnbmVkIGludCBmdW5jdGlvbikKK3N0YXRpYyBpbnQgYXNpYzNfZ3Bpb19kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCBvdXQpCiB7Ci0JcmV0dXJuIGFzaWMzX3JlYWRfcmVnaXN0ZXIoYXNpYywgYmFzZSArIGZ1bmN0aW9uKTsKLX0KLQotc3RhdGljIHZvaWQgYXNpYzNfc2V0X2dwaW8oc3RydWN0IGFzaWMzICphc2ljLCB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCSAgIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgdTMyIGJpdHMsIHUzMiB2YWwpCi17CisJdTMyIG1hc2sgPSBBU0lDM19HUElPX1RPX01BU0sob2Zmc2V0KSwgb3V0X3JlZzsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGFzaWMzICphc2ljOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFzaWMtPmxvY2ssIGZsYWdzKTsKLQl2YWwgfD0gKGFzaWMzX3JlYWRfcmVnaXN0ZXIoYXNpYywgYmFzZSArIGZ1bmN0aW9uKSAmIH5iaXRzKTsKKwlhc2ljID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhc2ljMywgZ3Bpbyk7CisJZ3Bpb19iYXNlID0gQVNJQzNfR1BJT19UT19CQVNFKG9mZnNldCk7CiAKLQlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBiYXNlICsgZnVuY3Rpb24sIHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXNpYy0+bG9jaywgZmxhZ3MpOwotfQotCi0jZGVmaW5lIGFzaWMzX2dldF9ncGlvX2EoYXNpYywgZm4pIFwKLQlhc2ljM19nZXRfZ3Bpbyhhc2ljLCBBU0lDM19HUElPX0FfQmFzZSwgQVNJQzNfR1BJT18jI2ZuKQotI2RlZmluZSBhc2ljM19nZXRfZ3Bpb19iKGFzaWMsIGZuKSBcCi0JYXNpYzNfZ2V0X2dwaW8oYXNpYywgQVNJQzNfR1BJT19CX0Jhc2UsIEFTSUMzX0dQSU9fIyNmbikKLSNkZWZpbmUgYXNpYzNfZ2V0X2dwaW9fYyhhc2ljLCBmbikgXAotCWFzaWMzX2dldF9ncGlvKGFzaWMsIEFTSUMzX0dQSU9fQ19CYXNlLCBBU0lDM19HUElPXyMjZm4pCi0jZGVmaW5lIGFzaWMzX2dldF9ncGlvX2QoYXNpYywgZm4pIFwKLQlhc2ljM19nZXRfZ3Bpbyhhc2ljLCBBU0lDM19HUElPX0RfQmFzZSwgQVNJQzNfR1BJT18jI2ZuKQotCi0jZGVmaW5lIGFzaWMzX3NldF9ncGlvX2EoYXNpYywgZm4sIGJpdHMsIHZhbCkgXAotCWFzaWMzX3NldF9ncGlvKGFzaWMsIEFTSUMzX0dQSU9fQV9CYXNlLCBBU0lDM19HUElPXyMjZm4sIGJpdHMsIHZhbCkKLSNkZWZpbmUgYXNpYzNfc2V0X2dwaW9fYihhc2ljLCBmbiwgYml0cywgdmFsKSBcCi0JYXNpYzNfc2V0X2dwaW8oYXNpYywgQVNJQzNfR1BJT19CX0Jhc2UsIEFTSUMzX0dQSU9fIyNmbiwgYml0cywgdmFsKQotI2RlZmluZSBhc2ljM19zZXRfZ3Bpb19jKGFzaWMsIGZuLCBiaXRzLCB2YWwpIFwKLQlhc2ljM19zZXRfZ3Bpbyhhc2ljLCBBU0lDM19HUElPX0NfQmFzZSwgQVNJQzNfR1BJT18jI2ZuLCBiaXRzLCB2YWwpCi0jZGVmaW5lIGFzaWMzX3NldF9ncGlvX2QoYXNpYywgZm4sIGJpdHMsIHZhbCkgXAotCWFzaWMzX3NldF9ncGlvKGFzaWMsIEFTSUMzX0dQSU9fRF9CYXNlLCBBU0lDM19HUElPXyMjZm4sIGJpdHMsIHZhbCkKLQotI2RlZmluZSBhc2ljM19zZXRfZ3Bpb19iYW5rcyhhc2ljLCBmbiwgYml0cywgcGRhdGEsIGZpZWxkKSAJCSAgXAotCWRvIHsJCQkJCQkJCSAgXAotCSAgICAgYXNpYzNfc2V0X2dwaW9fYSgoYXNpYyksIGZuLCAoYml0cyksIChwZGF0YSktPmdwaW9fYS5maWVsZCk7IFwKLQkgICAgIGFzaWMzX3NldF9ncGlvX2IoKGFzaWMpLCBmbiwgKGJpdHMpLCAocGRhdGEpLT5ncGlvX2IuZmllbGQpOyBcCi0JICAgICBhc2ljM19zZXRfZ3Bpb19jKChhc2ljKSwgZm4sIChiaXRzKSwgKHBkYXRhKS0+Z3Bpb19jLmZpZWxkKTsgXAotCSAgICAgYXNpYzNfc2V0X2dwaW9fZCgoYXNpYyksIGZuLCAoYml0cyksIChwZGF0YSktPmdwaW9fZC5maWVsZCk7IFwKLQl9IHdoaWxlICgwKQotCi1pbnQgYXNpYzNfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGFzaWMzICphc2ljLCB1bnNpZ25lZCBncGlvKQotewotCXUzMiBtYXNrID0gQVNJQzNfR1BJT19iaXQoZ3Bpbyk7Ci0KLQlzd2l0Y2ggKGdwaW8gPj4gNCkgewotCWNhc2UgQVNJQzNfR1BJT19CQU5LX0E6Ci0JCXJldHVybiBhc2ljM19nZXRfZ3Bpb19hKGFzaWMsIFN0YXR1cykgJiBtYXNrOwotCWNhc2UgQVNJQzNfR1BJT19CQU5LX0I6Ci0JCXJldHVybiBhc2ljM19nZXRfZ3Bpb19iKGFzaWMsIFN0YXR1cykgJiBtYXNrOwotCWNhc2UgQVNJQzNfR1BJT19CQU5LX0M6Ci0JCXJldHVybiBhc2ljM19nZXRfZ3Bpb19jKGFzaWMsIFN0YXR1cykgJiBtYXNrOwotCWNhc2UgQVNJQzNfR1BJT19CQU5LX0Q6Ci0JCXJldHVybiBhc2ljM19nZXRfZ3Bpb19kKGFzaWMsIFN0YXR1cykgJiBtYXNrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgR1BJTyB2YWx1ZSAweCV4IiwKLQkJICAgICAgIF9fZnVuY19fLCBncGlvKTsKKwlpZiAoZ3Bpb19iYXNlID4gQVNJQzNfR1BJT19EX0JBU0UpIHsKKwkJZGV2X2Vycihhc2ljLT5kZXYsICJJbnZhbGlkIGJhc2UgKDB4JXgpIGZvciBncGlvICVkXG4iLAorCQkJZ3Bpb19iYXNlLCBvZmZzZXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci19Ci1FWFBPUlRfU1lNQk9MKGFzaWMzX2dwaW9fZ2V0X3ZhbHVlKTsKIAotdm9pZCBhc2ljM19ncGlvX3NldF92YWx1ZShzdHJ1Y3QgYXNpYzMgKmFzaWMsIHVuc2lnbmVkIGdwaW8sIGludCB2YWwpCi17Ci0JdTMyIG1hc2sgPSBBU0lDM19HUElPX2JpdChncGlvKTsKLQl1MzIgYml0dmFsID0gMDsKLQlpZiAodmFsKQotCQliaXR2YWwgPSBtYXNrOworCXNwaW5fbG9ja19pcnFzYXZlKCZhc2ljLT5sb2NrLCBmbGFncyk7CiAKLQlzd2l0Y2ggKGdwaW8gPj4gNCkgewotCWNhc2UgQVNJQzNfR1BJT19CQU5LX0E6Ci0JCWFzaWMzX3NldF9ncGlvX2EoYXNpYywgT3V0LCBtYXNrLCBiaXR2YWwpOwotCQlyZXR1cm47Ci0JY2FzZSBBU0lDM19HUElPX0JBTktfQjoKLQkJYXNpYzNfc2V0X2dwaW9fYihhc2ljLCBPdXQsIG1hc2ssIGJpdHZhbCk7Ci0JCXJldHVybjsKLQljYXNlIEFTSUMzX0dQSU9fQkFOS19DOgotCQlhc2ljM19zZXRfZ3Bpb19jKGFzaWMsIE91dCwgbWFzaywgYml0dmFsKTsKLQkJcmV0dXJuOwotCWNhc2UgQVNJQzNfR1BJT19CQU5LX0Q6Ci0JCWFzaWMzX3NldF9ncGlvX2QoYXNpYywgT3V0LCBtYXNrLCBiaXR2YWwpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBHUElPIHZhbHVlIDB4JXgiLAotCQkgICAgICAgX19mdW5jX18sIGdwaW8pOwotCQlyZXR1cm47Ci0JfQotfQotRVhQT1JUX1NZTUJPTChhc2ljM19ncGlvX3NldF92YWx1ZSk7CisJb3V0X3JlZyA9IGFzaWMzX3JlYWRfcmVnaXN0ZXIoYXNpYywgZ3Bpb19iYXNlICsgQVNJQzNfR1BJT19ESVJFQ1RJT04pOwogCi1zdGF0aWMgaW50IGFzaWMzX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgYXNpYzNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgYXNpYzMgKmFzaWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwkvKiBJbnB1dCBpcyAwLCBPdXRwdXQgaXMgMSAqLworCWlmIChvdXQpCisJCW91dF9yZWcgfD0gbWFzazsKKwllbHNlCisJCW91dF9yZWcgJj0gfm1hc2s7CiAKLQlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBBU0lDM19HUElPX09GRlNFVChBLCBNYXNrKSwgMHhmZmZmKTsKLQlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBBU0lDM19HUElPX09GRlNFVChCLCBNYXNrKSwgMHhmZmZmKTsKLQlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBBU0lDM19HUElPX09GRlNFVChDLCBNYXNrKSwgMHhmZmZmKTsKLQlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBBU0lDM19HUElPX09GRlNFVChELCBNYXNrKSwgMHhmZmZmKTsKKwlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBncGlvX2Jhc2UgKyBBU0lDM19HUElPX0RJUkVDVElPTiwgb3V0X3JlZyk7CiAKLQlhc2ljM19zZXRfZ3Bpb19hKGFzaWMsIFNsZWVwTWFzaywgMHhmZmZmLCAweGZmZmYpOwotCWFzaWMzX3NldF9ncGlvX2IoYXNpYywgU2xlZXBNYXNrLCAweGZmZmYsIDB4ZmZmZik7Ci0JYXNpYzNfc2V0X2dwaW9fYyhhc2ljLCBTbGVlcE1hc2ssIDB4ZmZmZiwgMHhmZmZmKTsKLQlhc2ljM19zZXRfZ3Bpb19kKGFzaWMsIFNsZWVwTWFzaywgMHhmZmZmLCAweGZmZmYpOwotCi0JaWYgKHBkYXRhKSB7Ci0JCWFzaWMzX3NldF9ncGlvX2JhbmtzKGFzaWMsIE91dCwgMHhmZmZmLCBwZGF0YSwgaW5pdCk7Ci0JCWFzaWMzX3NldF9ncGlvX2JhbmtzKGFzaWMsIERpcmVjdGlvbiwgMHhmZmZmLCBwZGF0YSwgZGlyKTsKLQkJYXNpYzNfc2V0X2dwaW9fYmFua3MoYXNpYywgU2xlZXBNYXNrLCAweGZmZmYsIHBkYXRhLAotCQkJCSAgICAgc2xlZXBfbWFzayk7Ci0JCWFzaWMzX3NldF9ncGlvX2JhbmtzKGFzaWMsIFNsZWVwT3V0LCAweGZmZmYsIHBkYXRhLCBzbGVlcF9vdXQpOwotCQlhc2ljM19zZXRfZ3Bpb19iYW5rcyhhc2ljLCBCYXR0RmF1bHRPdXQsIDB4ZmZmZiwgcGRhdGEsCi0JCQkJICAgICBiYXR0X2ZhdWx0X291dCk7Ci0JCWFzaWMzX3NldF9ncGlvX2JhbmtzKGFzaWMsIFNsZWVwQ29uZiwgMHhmZmZmLCBwZGF0YSwKLQkJCQkgICAgIHNsZWVwX2NvbmYpOwotCQlhc2ljM19zZXRfZ3Bpb19iYW5rcyhhc2ljLCBBbHRGdW5jdGlvbiwgMHhmZmZmLCBwZGF0YSwKLQkJCQkgICAgIGFsdF9mdW5jdGlvbik7Ci0JfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWMtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOworCiB9CiAKLXN0YXRpYyB2b2lkIGFzaWMzX2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGFzaWMzX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICAgdW5zaWduZWQgb2Zmc2V0KQogeworCXJldHVybiBhc2ljM19ncGlvX2RpcmVjdGlvbihjaGlwLCBvZmZzZXQsIDApOworfQorCitzdGF0aWMgaW50IGFzaWMzX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gYXNpYzNfZ3Bpb19kaXJlY3Rpb24oY2hpcCwgb2Zmc2V0LCAxKTsKK30KKworc3RhdGljIGludCBhc2ljM19ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJICB1bnNpZ25lZCBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50IGdwaW9fYmFzZTsKKwl1MzIgbWFzayA9IEFTSUMzX0dQSU9fVE9fTUFTSyhvZmZzZXQpOworCXN0cnVjdCBhc2ljMyAqYXNpYzsKKworCWFzaWMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFzaWMzLCBncGlvKTsKKwlncGlvX2Jhc2UgPSBBU0lDM19HUElPX1RPX0JBU0Uob2Zmc2V0KTsKKworCWlmIChncGlvX2Jhc2UgPiBBU0lDM19HUElPX0RfQkFTRSkgeworCQlkZXZfZXJyKGFzaWMtPmRldiwgIkludmFsaWQgYmFzZSAoMHgleCkgZm9yIGdwaW8gJWRcbiIsCisJCQlncGlvX2Jhc2UsIG9mZnNldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBhc2ljM19yZWFkX3JlZ2lzdGVyKGFzaWMsIGdwaW9fYmFzZSArIEFTSUMzX0dQSU9fU1RBVFVTKSAmIG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIGFzaWMzX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwl1MzIgbWFzaywgb3V0X3JlZzsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGFzaWMzICphc2ljOworCisJYXNpYyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXNpYzMsIGdwaW8pOworCWdwaW9fYmFzZSA9IEFTSUMzX0dQSU9fVE9fQkFTRShvZmZzZXQpOworCisJaWYgKGdwaW9fYmFzZSA+IEFTSUMzX0dQSU9fRF9CQVNFKSB7CisJCWRldl9lcnIoYXNpYy0+ZGV2LCAiSW52YWxpZCBiYXNlICgweCV4KSBmb3IgZ3BpbyAlZFxuIiwKKwkJCWdwaW9fYmFzZSwgb2Zmc2V0KTsKKwkJcmV0dXJuOworCX0KKworCW1hc2sgPSBBU0lDM19HUElPX1RPX01BU0sob2Zmc2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhc2ljLT5sb2NrLCBmbGFncyk7CisKKwlvdXRfcmVnID0gYXNpYzNfcmVhZF9yZWdpc3Rlcihhc2ljLCBncGlvX2Jhc2UgKyBBU0lDM19HUElPX09VVCk7CisKKwlpZiAodmFsdWUpCisJCW91dF9yZWcgfD0gbWFzazsKKwllbHNlCisJCW91dF9yZWcgJj0gfm1hc2s7CisKKwlhc2ljM193cml0ZV9yZWdpc3Rlcihhc2ljLCBncGlvX2Jhc2UgKyBBU0lDM19HUElPX09VVCwgb3V0X3JlZyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2ljLT5sb2NrLCBmbGFncyk7CisKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBfX2luaXQgaW50IGFzaWMzX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgICB1MTYgKmdwaW9fY29uZmlnLCBpbnQgbnVtKQoreworCXN0cnVjdCBhc2ljMyAqYXNpYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXUxNiBhbHRfcmVnW0FTSUMzX05VTV9HUElPX0JBTktTXTsKKwl1MTYgb3V0X3JlZ1tBU0lDM19OVU1fR1BJT19CQU5LU107CisJdTE2IGRpcl9yZWdbQVNJQzNfTlVNX0dQSU9fQkFOS1NdOworCWludCBpOworCisJbWVtemVybyhhbHRfcmVnLCBBU0lDM19OVU1fR1BJT19CQU5LUyAqIHNpemVvZih1MTYpKTsKKwltZW16ZXJvKG91dF9yZWcsIEFTSUMzX05VTV9HUElPX0JBTktTICogc2l6ZW9mKHUxNikpOworCW1lbXplcm8oZGlyX3JlZywgQVNJQzNfTlVNX0dQSU9fQkFOS1MgKiBzaXplb2YodTE2KSk7CisKKwkvKiBFbmFibGUgYWxsIEdQSU9zICovCisJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgQVNJQzNfR1BJT19PRkZTRVQoQSwgTUFTSyksIDB4ZmZmZik7CisJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgQVNJQzNfR1BJT19PRkZTRVQoQiwgTUFTSyksIDB4ZmZmZik7CisJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgQVNJQzNfR1BJT19PRkZTRVQoQywgTUFTSyksIDB4ZmZmZik7CisJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgQVNJQzNfR1BJT19PRkZTRVQoRCwgTUFTSyksIDB4ZmZmZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJdTggYWx0LCBwaW4sIGRpciwgaW5pdCwgYmFua19udW0sIGJpdF9udW07CisJCXUxNiBjb25maWcgPSBncGlvX2NvbmZpZ1tpXTsKKworCQlwaW4gPSBBU0lDM19DT05GSUdfR1BJT19QSU4oY29uZmlnKTsKKwkJYWx0ID0gQVNJQzNfQ09ORklHX0dQSU9fQUxUKGNvbmZpZyk7CisJCWRpciA9IEFTSUMzX0NPTkZJR19HUElPX0RJUihjb25maWcpOworCQlpbml0ID0gQVNJQzNfQ09ORklHX0dQSU9fSU5JVChjb25maWcpOworCisJCWJhbmtfbnVtID0gQVNJQzNfR1BJT19UT19CQU5LKHBpbik7CisJCWJpdF9udW0gPSBBU0lDM19HUElPX1RPX0JJVChwaW4pOworCisJCWFsdF9yZWdbYmFua19udW1dIHw9IChhbHQgPDwgYml0X251bSk7CisJCW91dF9yZWdbYmFua19udW1dIHw9IChpbml0IDw8IGJpdF9udW0pOworCQlkaXJfcmVnW2JhbmtfbnVtXSB8PSAoZGlyIDw8IGJpdF9udW0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBU0lDM19OVU1fR1BJT19CQU5LUzsgaSsrKSB7CisJCWFzaWMzX3dyaXRlX3JlZ2lzdGVyKGFzaWMsCisJCQkJICAgICBBU0lDM19CQU5LX1RPX0JBU0UoaSkgKworCQkJCSAgICAgQVNJQzNfR1BJT19ESVJFQ1RJT04sCisJCQkJICAgICBkaXJfcmVnW2ldKTsKKwkJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywKKwkJCQkgICAgIEFTSUMzX0JBTktfVE9fQkFTRShpKSArIEFTSUMzX0dQSU9fT1VULAorCQkJCSAgICAgb3V0X3JlZ1tpXSk7CisJCWFzaWMzX3dyaXRlX3JlZ2lzdGVyKGFzaWMsCisJCQkJICAgICBBU0lDM19CQU5LX1RPX0JBU0UoaSkgKworCQkJCSAgICAgQVNJQzNfR1BJT19BTFRfRlVOQ1RJT04sCisJCQkJICAgICBhbHRfcmVnW2ldKTsKKwl9CisKKwlyZXR1cm4gZ3Bpb2NoaXBfYWRkKCZhc2ljLT5ncGlvKTsKK30KKworc3RhdGljIGludCBhc2ljM19ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhc2ljMyAqYXNpYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIGdwaW9jaGlwX3JlbW92ZSgmYXNpYy0+Z3Bpbyk7Cit9CisKIAogLyogQ29yZSAqLwotc3RhdGljIGludCBhc2ljM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2luaXQgYXNpYzNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgYXNpYzNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgYXNpYzMgKmFzaWM7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAJdW5zaWduZWQgbG9uZyBjbGtzZWw7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWFzaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXNpYzMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFzaWMpCisJaWYgKGFzaWMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImt6YWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJc3Bpbl9sb2NrX2luaXQoJmFzaWMtPmxvY2spOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFzaWMpOwpAQCAtNTAxLDQ5ICs1NDgsNTggQEAKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghbWVtKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCXByaW50ayhLRVJOX0VSUiAiYXNpYzM6IG5vIE1FTSByZXNvdXJjZVxuIik7Ci0JCWdvdG8gZXJyX291dF8xOworCQlkZXZfZXJyKGFzaWMtPmRldiwgIm5vIE1FTSByZXNvdXJjZVxuIik7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0JYXNpYy0+bWFwcGluZyA9IGlvcmVtYXAobWVtLT5zdGFydCwgUEFHRV9TSVpFKTsKKwltYXBfc2l6ZSA9IG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDE7CisJYXNpYy0+bWFwcGluZyA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWFwX3NpemUpOwogCWlmICghYXNpYy0+bWFwcGluZykgewogCQlyZXQgPSAtRU5PTUVNOwotCQlwcmludGsoS0VSTl9FUlIgImFzaWMzOiBjb3VsZG4ndCBpb3JlbWFwXG4iKTsKLQkJZ290byBlcnJfb3V0XzE7CisJCWRldl9lcnIoYXNpYy0+ZGV2LCAiQ291bGRuJ3QgaW9yZW1hcFxuIik7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJYXNpYy0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CiAKLQlpZiAocGRhdGEgJiYgcGRhdGEtPmJ1c19zaGlmdCkKLQkJYXNpYy0+YnVzX3NoaWZ0ID0gMiAtIHBkYXRhLT5idXNfc2hpZnQ7Ci0JZWxzZQotCQlhc2ljLT5idXNfc2hpZnQgPSAwOworCS8qIGNhbGN1bGF0ZSBidXMgc2hpZnQgZnJvbSBtZW0gcmVzb3VyY2UgKi8KKwlhc2ljLT5idXNfc2hpZnQgPSAyIC0gKG1hcF9zaXplID4+IDEyKTsKIAogCWNsa3NlbCA9IDA7CiAJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgQVNJQzNfT0ZGU0VUKENMT0NLLCBTRUwpLCBjbGtzZWwpOwogCiAJcmV0ID0gYXNpYzNfaXJxX3Byb2JlKHBkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXNpYzM6IGNvdWxkbid0IHByb2JlIElSUXNcbiIpOwotCQlnb3RvIGVycl9vdXRfMjsKLQl9Ci0JYXNpYzNfZ3Bpb19wcm9iZShwZGV2KTsKLQotCWlmIChwZGF0YS0+Y2hpbGRyZW4pIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bl9jaGlsZHJlbjsgaSsrKSB7Ci0JCQlwZGF0YS0+Y2hpbGRyZW5baV0tPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkYXRhLT5jaGlsZHJlbltpXSk7Ci0JCX0KKwkJZGV2X2Vycihhc2ljLT5kZXYsICJDb3VsZG4ndCBwcm9iZSBJUlFzXG4iKTsKKwkJZ290byBvdXRfdW5tYXA7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQVNJQzMgQ29yZSBkcml2ZXJcbiIpOworCWFzaWMtPmdwaW8uYmFzZSA9IHBkYXRhLT5ncGlvX2Jhc2U7CisJYXNpYy0+Z3Bpby5uZ3BpbyA9IEFTSUMzX05VTV9HUElPUzsKKwlhc2ljLT5ncGlvLmdldCA9IGFzaWMzX2dwaW9fZ2V0OworCWFzaWMtPmdwaW8uc2V0ID0gYXNpYzNfZ3Bpb19zZXQ7CisJYXNpYy0+Z3Bpby5kaXJlY3Rpb25faW5wdXQgPSBhc2ljM19ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwlhc2ljLT5ncGlvLmRpcmVjdGlvbl9vdXRwdXQgPSBhc2ljM19ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisKKwlyZXQgPSBhc2ljM19ncGlvX3Byb2JlKHBkZXYsCisJCQkgICAgICAgcGRhdGEtPmdwaW9fY29uZmlnLAorCQkJICAgICAgIHBkYXRhLT5ncGlvX2NvbmZpZ19udW0pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoYXNpYy0+ZGV2LCAiR1BJTyBwcm9iZSBmYWlsZWRcbiIpOworCQlnb3RvIG91dF9pcnE7CisJfQorCisJZGV2X2luZm8oYXNpYy0+ZGV2LCAiQVNJQzMgQ29yZSBkcml2ZXJcbiIpOwogCiAJcmV0dXJuIDA7CiAKLSBlcnJfb3V0XzI6Cisgb3V0X2lycToKKwlhc2ljM19pcnFfcmVtb3ZlKHBkZXYpOworCisgb3V0X3VubWFwOgogCWlvdW5tYXAoYXNpYy0+bWFwcGluZyk7Ci0gZXJyX291dF8xOgorCisgb3V0X2ZyZWU6CiAJa2ZyZWUoYXNpYyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNTUxLDkgKzYwNywxMiBAQAogCiBzdGF0aWMgaW50IGFzaWMzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCWludCByZXQ7CiAJc3RydWN0IGFzaWMzICphc2ljID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlhc2ljM19ncGlvX3JlbW92ZShwZGV2KTsKKwlyZXQgPSBhc2ljM19ncGlvX3JlbW92ZShwZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlhc2ljM19pcnFfcmVtb3ZlKHBkZXYpOwogCiAJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgQVNJQzNfT0ZGU0VUKENMT0NLLCBTRUwpLCAwKTsKQEAgLTU3Myw3ICs2MzIsNiBAQAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJhc2ljMyIsCiAJfSwKLQkucHJvYmUJCT0gYXNpYzNfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhc2ljM19yZW1vdmUpLAogCS5zaHV0ZG93bgk9IGFzaWMzX3NodXRkb3duLAogfTsKQEAgLTU4MSw3ICs2MzksNyBAQAogc3RhdGljIGludCBfX2luaXQgYXNpYzNfaW5pdCh2b2lkKQogewogCWludCByZXR2YWwgPSAwOwotCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXNpYzNfZGV2aWNlX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZhc2ljM19kZXZpY2VfZHJpdmVyLCBhc2ljM19wcm9iZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWZkLWNvcmUuYyBiL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkODhjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBkcml2ZXJzL21mZC9tZmQtY29yZS5jCisgKgorICogY29yZSBNRkQgc3VwcG9ydAorICogQ29weXJpZ2h0IChjKSAyMDA2IElhbiBNb2x0b24KKyAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IERtaXRyeSBCYXJ5c2hrb3YKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKworc3RhdGljIGludCBtZmRfYWRkX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwYXJlbnQsCisJCWNvbnN0IHN0cnVjdCBtZmRfY2VsbCAqY2VsbCwKKwkJc3RydWN0IHJlc291cmNlICptZW1fYmFzZSwKKwkJaW50IGlycV9iYXNlKQoreworCXN0cnVjdCByZXNvdXJjZSByZXNbY2VsbC0+bnVtX3Jlc291cmNlc107CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwlpbnQgcjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoY2VsbC0+bmFtZSwgcGFyZW50LT5pZCk7CisJaWYgKCFwZGV2KQorCQlnb3RvIGZhaWxfYWxsb2M7CisKKwlwZGV2LT5kZXYucGFyZW50ID0gJnBhcmVudC0+ZGV2OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsCisJCQljZWxsLCBzaXplb2Yoc3RydWN0IG1mZF9jZWxsKSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX2RldmljZTsKKworCW1lbXplcm8ocmVzLCBzaXplb2YocmVzKSk7CisJZm9yIChyID0gMDsgciA8IGNlbGwtPm51bV9yZXNvdXJjZXM7IHIrKykgeworCQlyZXNbcl0ubmFtZSA9IGNlbGwtPnJlc291cmNlc1tyXS5uYW1lOworCQlyZXNbcl0uZmxhZ3MgPSBjZWxsLT5yZXNvdXJjZXNbcl0uZmxhZ3M7CisKKwkJLyogRmluZCBvdXQgYmFzZSB0byB1c2UgKi8KKwkJaWYgKGNlbGwtPnJlc291cmNlc1tyXS5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7CisJCQlyZXNbcl0ucGFyZW50ID0gbWVtX2Jhc2U7CisJCQlyZXNbcl0uc3RhcnQgPSBtZW1fYmFzZS0+c3RhcnQgKworCQkJCWNlbGwtPnJlc291cmNlc1tyXS5zdGFydDsKKwkJCXJlc1tyXS5lbmQgPSBtZW1fYmFzZS0+c3RhcnQgKworCQkJCWNlbGwtPnJlc291cmNlc1tyXS5lbmQ7CisJCX0gZWxzZSBpZiAoY2VsbC0+cmVzb3VyY2VzW3JdLmZsYWdzICYgSU9SRVNPVVJDRV9JUlEpIHsKKwkJCXJlc1tyXS5zdGFydCA9IGlycV9iYXNlICsKKwkJCQljZWxsLT5yZXNvdXJjZXNbcl0uc3RhcnQ7CisJCQlyZXNbcl0uZW5kICAgPSBpcnFfYmFzZSArCisJCQkJY2VsbC0+cmVzb3VyY2VzW3JdLmVuZDsKKwkJfSBlbHNlIHsKKwkJCXJlc1tyXS5wYXJlbnQgPSBjZWxsLT5yZXNvdXJjZXNbcl0ucGFyZW50OworCQkJcmVzW3JdLnN0YXJ0ID0gY2VsbC0+cmVzb3VyY2VzW3JdLnN0YXJ0OworCQkJcmVzW3JdLmVuZCAgID0gY2VsbC0+cmVzb3VyY2VzW3JdLmVuZDsKKwkJfQorCX0KKworCXBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgY2VsbC0+bnVtX3Jlc291cmNlcyk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9kZXZpY2U7CisKKwlyZXR1cm4gMDsKKworLyoJcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2KTsgKi8KK2ZhaWxfZGV2aWNlOgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CitmYWlsX2FsbG9jOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBtZmRfYWRkX2RldmljZXMoCisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBhcmVudCwKKwkJY29uc3Qgc3RydWN0IG1mZF9jZWxsICpjZWxscywgaW50IG5fZGV2cywKKwkJc3RydWN0IHJlc291cmNlICptZW1fYmFzZSwKKwkJaW50IGlycV9iYXNlKQoreworCWludCBpOworCWludCByZXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5fZGV2czsgaSsrKSB7CisJCXJldCA9IG1mZF9hZGRfZGV2aWNlKHBhcmVudCwgY2VsbHMgKyBpLCBtZW1fYmFzZSwgaXJxX2Jhc2UpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJbWZkX3JlbW92ZV9kZXZpY2VzKHBhcmVudCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChtZmRfYWRkX2RldmljZXMpOworCitzdGF0aWMgaW50IG1mZF9yZW1vdmVfZGV2aWNlc19mbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnVudXNlZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigKKwkJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldikpOworCXJldHVybiAwOworfQorCit2b2lkIG1mZF9yZW1vdmVfZGV2aWNlcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwYXJlbnQpCit7CisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZwYXJlbnQtPmRldiwgTlVMTCwgbWZkX3JlbW92ZV9kZXZpY2VzX2ZuKTsKK30KK0VYUE9SVF9TWU1CT0wobWZkX3JlbW92ZV9kZXZpY2VzKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSWFuIE1vbHRvbiwgRG1pdHJ5IEJhcnlzaGtvdiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4NzUwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKQEAgLTAsMCArMSw2MDAgQEAKKy8qCisgKiBUb3NoaWJhIFRDNjM5M1hCIFNvQyBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0KGMpIDIwMDUtMjAwNiBDaHJpcyBIdW1iZXJ0CisgKiBDb3B5cmlnaHQoYykgMjAwNSBEaXJrIE9wZmVyCisgKiBDb3B5cmlnaHQoYykgMjAwNSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICogQ29weXJpZ2h0KGMpIDIwMDcgRG1pdHJ5IEJhcnlzaGtvdgorICoKKyAqIEJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieSBTaGFycC9MaW5lbyBmb3IgMi40IGtlcm5lbHMKKyAqIEJhc2VkIG9uIGxvY29tby5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdGM2MzkzeGIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNkZWZpbmUgU0NSX1JFVklECTB4MDgJCS8qIGIgUmV2aXNpb24gSUQJKi8KKyNkZWZpbmUgU0NSX0lTUgkJMHg1MAkJLyogYiBJbnRlcnJ1cHQgU3RhdHVzCSovCisjZGVmaW5lIFNDUl9JTVIJCTB4NTIJCS8qIGIgSW50ZXJydXB0IE1hc2sJKi8KKyNkZWZpbmUgU0NSX0lSUgkJMHg1NAkJLyogYiBJbnRlcnJ1cHQgUm91dGluZwkqLworI2RlZmluZSBTQ1JfR1BFUgkweDYwCQkvKiB3IEdQIEVuYWJsZQkJKi8KKyNkZWZpbmUgU0NSX0dQSV9TUihpKQkoMHg2NCArIChpKSkJLyogYjMgR1BJIFN0YXR1cwkqLworI2RlZmluZSBTQ1JfR1BJX0lNUihpKQkoMHg2OCArIChpKSkJLyogYjMgR1BJIElOVCBNYXNrCSovCisjZGVmaW5lIFNDUl9HUElfRURFUihpKQkoMHg2YyArIChpKSkJLyogYjMgR1BJIEVkZ2UgRGV0ZWN0IEVuYWJsZSAqLworI2RlZmluZSBTQ1JfR1BJX0xJUihpKQkoMHg3MCArIChpKSkJLyogYjMgR1BJIExldmVsIEludmVydAkqLworI2RlZmluZSBTQ1JfR1BPX0RTUihpKQkoMHg3OCArIChpKSkJLyogYjMgR1BPIERhdGEgU2V0CSovCisjZGVmaW5lIFNDUl9HUE9fRE9FQ1IoaSkgKDB4N2MgKyAoaSkpCS8qIGIzIEdQTyBEYXRhIE9FIENvbnRyb2wgKi8KKyNkZWZpbmUgU0NSX0dQX0lBUkNSKGkpCSgweDgwICsgKGkpKQkvKiBiMyBHUCBJbnRlcm5hbCBBY3RpdmUgUmVnaXN0ZXIgQ29udHJvbCAqLworI2RlZmluZSBTQ1JfR1BfSUFSTENSKGkpICgweDg0ICsgKGkpKQkvKiBiMyBHUCBJTlRFUk5BTCBBY3RpdmUgUmVnaXN0ZXIgTGV2ZWwgQ29udHJvbCAqLworI2RlZmluZSBTQ1JfR1BJX0JDUihpKQkoMHg4OCArIChpKSkJLyogYjMgR1BJIEJ1ZmZlciBDb250cm9sICovCisjZGVmaW5lIFNDUl9HUEFfSUFSQ1IJMHg4YwkJLyogdyBHUGEgSW50ZXJuYWwgQWN0aXZlIFJlZ2lzdGVyIENvbnRyb2wgKi8KKyNkZWZpbmUgU0NSX0dQQV9JQVJMQ1IJMHg5MAkJLyogdyBHUGEgSW50ZXJuYWwgQWN0aXZlIFJlZ2lzdGVyIExldmVsIENvbnRyb2wgKi8KKyNkZWZpbmUgU0NSX0dQQV9CQ1IJMHg5NAkJLyogdyBHUGEgQnVmZmVyIENvbnRyb2wgKi8KKyNkZWZpbmUgU0NSX0NDUgkJMHg5OAkJLyogdyBDbG9jayBDb250cm9sCSovCisjZGVmaW5lIFNDUl9QTEwyQ1IJMHg5YQkJLyogdyBQTEwyIENvbnRyb2wJKi8KKyNkZWZpbmUgU0NSX1BMTDFDUgkweDljCQkvKiBsIFBMTDEgQ29udHJvbAkqLworI2RlZmluZSBTQ1JfRElBUkNSCTB4YTAJCS8qIGIgRGV2aWNlIEludGVybmFsIEFjdGl2ZSBSZWdpc3RlciBDb250cm9sICovCisjZGVmaW5lIFNDUl9EQk9DUgkweGExCQkvKiBiIERldmljZSBCdWZmZXIgT2ZmIENvbnRyb2wgKi8KKyNkZWZpbmUgU0NSX0ZFUgkJMHhlMAkJLyogYiBGdW5jdGlvbiBFbmFibGUJKi8KKyNkZWZpbmUgU0NSX01DUgkJMHhlNAkJLyogdyBNb2RlIENvbnRyb2wJKi8KKyNkZWZpbmUgU0NSX0NPTkZJRwkweGZjCQkvKiBiIENvbmZpZ3VyYXRpb24gQ29udHJvbCAqLworI2RlZmluZSBTQ1JfREVCVUcJMHhmZgkJLyogYiBEZWJ1ZwkJKi8KKworI2RlZmluZSBTQ1JfQ0NSX0NLMzJLCUJJVCgwKQorI2RlZmluZSBTQ1JfQ0NSX1VTQkNLCUJJVCgxKQorI2RlZmluZSBTQ1JfQ0NSX1VOSzEJQklUKDQpCisjZGVmaW5lIFNDUl9DQ1JfTUNMS19NQVNLCSg3IDw8IDgpCisjZGVmaW5lIFNDUl9DQ1JfTUNMS19PRkYJKDAgPDwgOCkKKyNkZWZpbmUgU0NSX0NDUl9NQ0xLXzEyCSgxIDw8IDgpCisjZGVmaW5lIFNDUl9DQ1JfTUNMS18yNAkoMiA8PCA4KQorI2RlZmluZSBTQ1JfQ0NSX01DTEtfNDgJKDMgPDwgOCkKKyNkZWZpbmUgU0NSX0NDUl9IQ0xLX01BU0sJKDMgPDwgMTIpCisjZGVmaW5lIFNDUl9DQ1JfSENMS18yNAkoMCA8PCAxMikKKyNkZWZpbmUgU0NSX0NDUl9IQ0xLXzQ4CSgxIDw8IDEyKQorCisjZGVmaW5lIFNDUl9GRVJfVVNCRU4JCUJJVCgwKQkvKiBVU0IgaG9zdCBlbmFibGUgKi8KKyNkZWZpbmUgU0NSX0ZFUl9MQ0RDVkVOCQlCSVQoMSkJLyogcG9seXNpbGljb24gVEZUIGVuYWJsZSAqLworI2RlZmluZSBTQ1JfRkVSX1NMQ0RFTgkJQklUKDIpCS8qIFNMQ0QgZW5hYmxlICovCisKKyNkZWZpbmUgU0NSX01DUl9SRFlfTUFTSwkJKDMgPDwgMCkKKyNkZWZpbmUgU0NSX01DUl9SRFlfT1BFTkRSQUlOCSgwIDw8IDApCisjZGVmaW5lIFNDUl9NQ1JfUkRZX1RSSVNUQVRFCSgxIDw8IDApCisjZGVmaW5lIFNDUl9NQ1JfUkRZX1BVU0hQVUxMCSgyIDw8IDApCisjZGVmaW5lIFNDUl9NQ1JfUkRZX1VOSwkJQklUKDIpCisjZGVmaW5lIFNDUl9NQ1JfUkRZX0VOCQlCSVQoMykKKyNkZWZpbmUgU0NSX01DUl9JTlRfTUFTSwkJKDMgPDwgNCkKKyNkZWZpbmUgU0NSX01DUl9JTlRfT1BFTkRSQUlOCSgwIDw8IDQpCisjZGVmaW5lIFNDUl9NQ1JfSU5UX1RSSVNUQVRFCSgxIDw8IDQpCisjZGVmaW5lIFNDUl9NQ1JfSU5UX1BVU0hQVUxMCSgyIDw8IDQpCisjZGVmaW5lIFNDUl9NQ1JfSU5UX1VOSwkJQklUKDYpCisjZGVmaW5lIFNDUl9NQ1JfSU5UX0VOCQlCSVQoNykKKy8qIGJpdHMgOCAtIDE2IGFyZSB1bmtub3duICovCisKKyNkZWZpbmUgVENfR1BJT19CSVQoaSkJCSgxIDw8IChpICYgMHg3KSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCB0YzYzOTN4YiB7CisJdm9pZCBfX2lvbWVtCQkqc2NyOworCisJc3RydWN0IGdwaW9fY2hpcAlncGlvOworCisJc3RydWN0IGNsawkJKmNsazsgLyogMyw2IE1oeiAqLworCisJc3BpbmxvY2tfdAkJbG9jazsgLyogcHJvdGVjdHMgUk1XIGN5Y2xlcyAqLworCisJc3RydWN0IHsKKwkJdTgJCWZlcjsKKwkJdTE2CQljY3I7CisJCXU4CQlncGlfYmNyWzNdOworCQl1OAkJZ3BvX2RzclszXTsKKwkJdTgJCWdwb19kb2VjclszXTsKKwl9IHN1c3BlbmRfc3RhdGU7CisKKwlzdHJ1Y3QgcmVzb3VyY2UJCXJzY3I7CisJc3RydWN0IHJlc291cmNlCQkqaW9tZW07CisJaW50CQkJaXJxOworCWludAkJCWlycV9iYXNlOworfTsKKworZW51bSB7CisJVEM2MzkzWEJfQ0VMTF9OQU5ELAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdGM2MzkzeGJfbmFuZF9lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbmFuZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UobmFuZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJLyogU01EIGJ1ZmZlciBvbiAqLworCWRldl9kYmcoJmRldi0+ZGV2LCAiU01EIGJ1ZmZlciBvblxuIik7CisJaW93cml0ZTgoMHhmZiwgdGM2MzkzeGItPnNjciArIFNDUl9HUElfQkNSKDEpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBfX2RldmluaXRkYXRhIHRjNjM5M3hiX25hbmRfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9IFRNSU9fTkFORF9DT05GSUcsCisJCS5zdGFydAk9IDB4MDEwMCwKKwkJLmVuZAk9IDB4MDFmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gVE1JT19OQU5EX0NPTlRST0wsCisJCS5zdGFydAk9IDB4MTAwMCwKKwkJLmVuZAk9IDB4MTAwNywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gVE1JT19OQU5EX0lSUSwKKwkJLnN0YXJ0CT0gSVJRX1RDNjM5M19OQU5ELAorCQkuZW5kCT0gSVJRX1RDNjM5M19OQU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBfX2RldmluaXRkYXRhIHRjNjM5M3hiX2NlbGxzW10gPSB7CisJW1RDNjM5M1hCX0NFTExfTkFORF0gPSB7CisJCS5uYW1lID0gInRtaW8tbmFuZCIsCisJCS5lbmFibGUgPSB0YzYzOTN4Yl9uYW5kX2VuYWJsZSwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX25hbmRfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRjNjM5M3hiX25hbmRfcmVzb3VyY2VzLAorCX0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB0YzYzOTN4Yl9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQl1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgdGM2MzkzeGIsIGdwaW8pOworCisJLyogWFhYOiBkb2VzIGRzciBhbHNvIHJlcHJlc2VudCBpbnB1dHM/ICovCisJcmV0dXJuIGlvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9HUE9fRFNSKG9mZnNldCAvIDgpKQorCQkmIFRDX0dQSU9fQklUKG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fdGM2MzkzeGJfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgdGM2MzkzeGIsIGdwaW8pOworCXU4ICBkc3I7CisKKwlkc3IgPSBpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RTUihvZmZzZXQgLyA4KSk7CisJaWYgKHZhbHVlKQorCQlkc3IgfD0gVENfR1BJT19CSVQob2Zmc2V0KTsKKwllbHNlCisJCWRzciAmPSB+VENfR1BJT19CSVQob2Zmc2V0KTsKKworCWlvd3JpdGU4KGRzciwgdGM2MzkzeGItPnNjciArIFNDUl9HUE9fRFNSKG9mZnNldCAvIDgpKTsKK30KKworc3RhdGljIHZvaWQgdGM2MzkzeGJfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgdGM2MzkzeGIsIGdwaW8pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCV9fdGM2MzkzeGJfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHRjNjM5M3hiX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQl1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgdGM2MzkzeGIsIGdwaW8pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggZG9lY3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWRvZWNyID0gaW9yZWFkOCh0YzYzOTN4Yi0+c2NyICsgU0NSX0dQT19ET0VDUihvZmZzZXQgLyA4KSk7CisJZG9lY3IgJj0gflRDX0dQSU9fQklUKG9mZnNldCk7CisJaW93cml0ZTgoZG9lY3IsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RPRUNSKG9mZnNldCAvIDgpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHRjNjM5M3hiLCBncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGRvZWNyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlfX3RjNjM5M3hiX2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOworCisJZG9lY3IgPSBpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RPRUNSKG9mZnNldCAvIDgpKTsKKwlkb2VjciB8PSBUQ19HUElPX0JJVChvZmZzZXQpOworCWlvd3JpdGU4KGRvZWNyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0dQT19ET0VDUihvZmZzZXQgLyA4KSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGM2MzkzeGJfcmVnaXN0ZXJfZ3BpbyhzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiLCBpbnQgZ3Bpb19iYXNlKQoreworCXRjNjM5M3hiLT5ncGlvLmxhYmVsID0gInRjNjM5M3hiIjsKKwl0YzYzOTN4Yi0+Z3Bpby5iYXNlID0gZ3Bpb19iYXNlOworCXRjNjM5M3hiLT5ncGlvLm5ncGlvID0gMTY7CisJdGM2MzkzeGItPmdwaW8uc2V0ID0gdGM2MzkzeGJfZ3Bpb19zZXQ7CisJdGM2MzkzeGItPmdwaW8uZ2V0ID0gdGM2MzkzeGJfZ3Bpb19nZXQ7CisJdGM2MzkzeGItPmdwaW8uZGlyZWN0aW9uX2lucHV0ID0gdGM2MzkzeGJfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CisJdGM2MzkzeGItPmdwaW8uZGlyZWN0aW9uX291dHB1dCA9IHRjNjM5M3hiX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKworCXJldHVybiBncGlvY2hpcF9hZGQoJnRjNjM5M3hiLT5ncGlvKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit0YzYzOTN4Yl9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBpbnQgaXNyOworCXVuc2lnbmVkIGludCBpLCBpcnFfYmFzZTsKKworCWlycV9iYXNlID0gdGM2MzkzeGItPmlycV9iYXNlOworCisJd2hpbGUgKChpc3IgPSBpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfSVNSKSAmCisJCQkJfmlvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9JTVIpKSkKKwkJZm9yIChpID0gMDsgaSA8IFRDNjM5M1hCX05SX0lSUVM7IGkrKykgeworCQkJaWYgKGlzciAmICgxIDw8IGkpKQorCQkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnFfYmFzZSArIGkpOworCQl9Cit9CisKK3N0YXRpYyB2b2lkIHRjNjM5M3hiX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgdGM2MzkzeGJfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGltcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCWltciA9IGlvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9JTVIpOworCWltciB8PSAxIDw8IChpcnEgLSB0YzYzOTN4Yi0+aXJxX2Jhc2UpOworCWlvd3JpdGU4KGltciwgdGM2MzkzeGItPnNjciArIFNDUl9JTVIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHRjNjM5M3hiX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGltcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCWltciA9IGlvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9JTVIpOworCWltciAmPSB+KDEgPDwgKGlycSAtIHRjNjM5M3hiLT5pcnFfYmFzZSkpOworCWlvd3JpdGU4KGltciwgdGM2MzkzeGItPnNjciArIFNDUl9JTVIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdGM2MzkzeGJfY2hpcCA9IHsKKwkubmFtZQk9ICJ0YzYzOTN4YiIsCisJLmFjawk9IHRjNjM5M3hiX2lycV9hY2ssCisJLm1hc2sJPSB0YzYzOTN4Yl9pcnFfbWFzaywKKwkudW5tYXNrCT0gdGM2MzkzeGJfaXJxX3VubWFzaywKK307CisKK3N0YXRpYyB2b2lkIHRjNjM5M3hiX2F0dGFjaF9pcnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBpcnEsIGlycV9iYXNlOworCisJaXJxX2Jhc2UgPSB0YzYzOTN4Yi0+aXJxX2Jhc2U7CisKKwlmb3IgKGlycSA9IGlycV9iYXNlOyBpcnEgPCBpcnFfYmFzZSArIFRDNjM5M1hCX05SX0lSUVM7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZ0YzYzOTN4Yl9jaGlwKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCB0YzYzOTN4Yik7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJc2V0X2lycV90eXBlKHRjNjM5M3hiLT5pcnEsIElSUVRfRkFMTElORyk7CisJc2V0X2lycV9kYXRhKHRjNjM5M3hiLT5pcnEsIHRjNjM5M3hiKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcih0YzYzOTN4Yi0+aXJxLCB0YzYzOTN4Yl9pcnEpOworfQorCitzdGF0aWMgdm9pZCB0YzYzOTN4Yl9kZXRhY2hfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgaXJxLCBpcnFfYmFzZTsKKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHRjNjM5M3hiLT5pcnEsIE5VTEwpOworCXNldF9pcnFfZGF0YSh0YzYzOTN4Yi0+aXJxLCBOVUxMKTsKKworCWlycV9iYXNlID0gdGM2MzkzeGItPmlycV9iYXNlOworCisJZm9yIChpcnEgPSBpcnFfYmFzZTsgaXJxIDwgaXJxX2Jhc2UgKyBUQzYzOTNYQl9OUl9JUlFTOyBpcnErKykgeworCQlzZXRfaXJxX2ZsYWdzKGlycSwgMCk7CisJCXNldF9pcnFfY2hpcChpcnEsIE5VTEwpOworCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIE5VTEwpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdGM2MzkzeGJfaHdfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgKnRjcGQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpOworCisJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZmVyLAl0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisJaW93cml0ZTE2KHRjcGQtPnNjcl9wbGwyY3IsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX1BMTDJDUik7CisJaW93cml0ZTE2KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmNjciwJdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWlvd3JpdGUxNihTQ1JfTUNSX1JEWV9PUEVORFJBSU4gfCBTQ1JfTUNSX1JEWV9VTksgfCBTQ1JfTUNSX1JEWV9FTiB8CisJCSAgU0NSX01DUl9JTlRfT1BFTkRSQUlOIHwgU0NSX01DUl9JTlRfVU5LIHwgU0NSX01DUl9JTlRfRU4gfAorCQkgIEJJVCgxNSksCQkJdGM2MzkzeGItPnNjciArIFNDUl9NQ1IpOworCWlvd3JpdGUxNih0Y3BkLT5zY3JfZ3BlciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BFUik7CisJaW93cml0ZTgoMCwJCQkJdGM2MzkzeGItPnNjciArIFNDUl9JUlIpOworCWlvd3JpdGU4KDB4YmYsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSU1SKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RzcltpXSwKKwkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUE9fRFNSKGkpKTsKKwkJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RvZWNyW2ldLAorCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQT19ET0VDUihpKSk7CisJCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwaV9iY3JbaV0sCisJCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BJX0JDUihpKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRjNjM5M3hiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSAqdGNwZCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtOworCXN0cnVjdCByZXNvdXJjZSAqcnNjcjsKKwlpbnQgcmV0dmFsLCB0ZW1wOworCWludCBpOworCisJaW9tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFpb21lbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0YzYzOTN4YiA9IGt6YWxsb2Moc2l6ZW9mICp0YzYzOTN4YiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YzYzOTN4YikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9remFsbG9jOworCX0KKworCXNwaW5fbG9ja19pbml0KCZ0YzYzOTN4Yi0+bG9jayk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHRjNjM5M3hiKTsKKwl0YzYzOTN4Yi0+aW9tZW0gPSBpb21lbTsKKwl0YzYzOTN4Yi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCXRjNjM5M3hiLT5pcnFfYmFzZSA9IHRjcGQtPmlycV9iYXNlOworCisJdGM2MzkzeGItPmNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiR1BJTzI3X0NMSyIgLyogIkNLM1A2TUkiICovKTsKKwlpZiAoSVNfRVJSKHRjNjM5M3hiLT5jbGspKSB7CisJCXJldHZhbCA9IFBUUl9FUlIodGM2MzkzeGItPmNsayk7CisJCWdvdG8gZXJyX2Nsa19nZXQ7CisJfQorCisJcnNjciA9ICZ0YzYzOTN4Yi0+cnNjcjsKKwlyc2NyLT5uYW1lID0gInRjNjM5M3hiLWNvcmUiOworCXJzY3ItPnN0YXJ0ID0gaW9tZW0tPnN0YXJ0OworCXJzY3ItPmVuZCA9IGlvbWVtLT5zdGFydCArIDB4ZmY7CisJcnNjci0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJldHZhbCA9IHJlcXVlc3RfcmVzb3VyY2UoaW9tZW0sIHJzY3IpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX3JlcXVlc3Rfc2NyOworCisJdGM2MzkzeGItPnNjciA9IGlvcmVtYXAocnNjci0+c3RhcnQsIHJzY3ItPmVuZCAtIHJzY3ItPnN0YXJ0ICsgMSk7CisJaWYgKCF0YzYzOTN4Yi0+c2NyKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJcmV0dmFsID0gY2xrX2VuYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9jbGtfZW5hYmxlOworCisJcmV0dmFsID0gdGNwZC0+ZW5hYmxlKGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfZW5hYmxlOworCisJdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZmVyID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kc3JbaV0gPQorCQkJKHRjcGQtPnNjcl9ncG9fZHNyID4+ICg4ICogaSkpICYgMHhmZjsKKwkJdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RvZWNyW2ldID0KKwkJCSh0Y3BkLT5zY3JfZ3BvX2RvZWNyID4+ICg4ICogaSkpICYgMHhmZjsKKwl9CisJLyoKKwkgKiBJdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNoYW5nZSB0aGlzIGJhY2sgdG8KKwkgKiBwbGF0Zm9ybS1kZXBlbmRhbnQgY29kZQorCSAqLworCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmNjciA9IFNDUl9DQ1JfVU5LMSB8CisJCQkJCVNDUl9DQ1JfSENMS180ODsKKworCXJldHZhbCA9IHRjNjM5M3hiX2h3X2luaXQoZGV2KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9od19pbml0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiVG9zaGliYSB0YzYzOTN4YiByZXZpc2lvbiAlZCBhdCAweCUwOGx4LCBpcnEgJWRcbiIsCisJCQlpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfUkVWSUQpLAorCQkJKHVuc2lnbmVkIGxvbmcpIGlvbWVtLT5zdGFydCwgdGM2MzkzeGItPmlycSk7CisKKwl0YzYzOTN4Yi0+Z3Bpby5iYXNlID0gLTE7CisKKwlpZiAodGNwZC0+Z3Bpb19iYXNlID49IDApIHsKKwkJcmV0dmFsID0gdGM2MzkzeGJfcmVnaXN0ZXJfZ3Bpbyh0YzYzOTN4YiwgdGNwZC0+Z3Bpb19iYXNlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyX2dwaW9fYWRkOworCX0KKworCWlmICh0YzYzOTN4Yi0+aXJxKQorCQl0YzYzOTN4Yl9hdHRhY2hfaXJxKGRldik7CisKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX05BTkRdLmRyaXZlcl9kYXRhID0gdGNwZC0+bmFuZF9kYXRhOworCisJcmV0dmFsID0gbWZkX2FkZF9kZXZpY2VzKGRldiwKKwkJCXRjNjM5M3hiX2NlbGxzLCBBUlJBWV9TSVpFKHRjNjM5M3hiX2NlbGxzKSwKKwkJCWlvbWVtLCB0Y3BkLT5pcnFfYmFzZSk7CisKKwlyZXR1cm4gMDsKKworCWlmICh0YzYzOTN4Yi0+aXJxKQorCQl0YzYzOTN4Yl9kZXRhY2hfaXJxKGRldik7CisKK2Vycl9ncGlvX2FkZDoKKwlpZiAodGM2MzkzeGItPmdwaW8uYmFzZSAhPSAtMSkKKwkJdGVtcCA9IGdwaW9jaGlwX3JlbW92ZSgmdGM2MzkzeGItPmdwaW8pOworZXJyX2h3X2luaXQ6CisJdGNwZC0+ZGlzYWJsZShkZXYpOworZXJyX2Nsa19lbmFibGU6CisJY2xrX2Rpc2FibGUodGM2MzkzeGItPmNsayk7CitlcnJfZW5hYmxlOgorCWlvdW5tYXAodGM2MzkzeGItPnNjcik7CitlcnJfaW9yZW1hcDoKKwlyZWxlYXNlX3Jlc291cmNlKCZ0YzYzOTN4Yi0+cnNjcik7CitlcnJfcmVxdWVzdF9zY3I6CisJY2xrX3B1dCh0YzYzOTN4Yi0+Y2xrKTsKK2Vycl9jbGtfZ2V0OgorCWtmcmVlKHRjNjM5M3hiKTsKK2Vycl9remFsbG9jOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRjNjM5M3hiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgKnRjcGQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwltZmRfcmVtb3ZlX2RldmljZXMoZGV2KTsKKworCWlmICh0YzYzOTN4Yi0+aXJxKQorCQl0YzYzOTN4Yl9kZXRhY2hfaXJxKGRldik7CisKKwlpZiAodGM2MzkzeGItPmdwaW8uYmFzZSAhPSAtMSkgeworCQlyZXQgPSBncGlvY2hpcF9yZW1vdmUoJnRjNjM5M3hiLT5ncGlvKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICJDYW4ndCByZW1vdmUgZ3BpbyBjaGlwOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSB0Y3BkLT5kaXNhYmxlKGRldik7CisKKwljbGtfZGlzYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKKworCWlvdW5tYXAodGM2MzkzeGItPnNjcik7CisKKwlyZWxlYXNlX3Jlc291cmNlKCZ0YzYzOTN4Yi0+cnNjcik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJY2xrX3B1dCh0YzYzOTN4Yi0+Y2xrKTsKKworCWtmcmVlKHRjNjM5M3hiKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdGM2MzkzeGJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSAqdGNwZCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaW50IGk7CisKKworCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmNjciA9IGlvcmVhZDE2KHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwl0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5mZXIgPSBpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RzcltpXSA9CisJCQlpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RTUihpKSk7CisJCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kb2VjcltpXSA9CisJCQlpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RPRUNSKGkpKTsKKwkJdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BpX2JjcltpXSA9CisJCQlpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BJX0JDUihpKSk7CisJfQorCisJcmV0dXJuIHRjcGQtPnN1c3BlbmQoZGV2KTsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhICp0Y3BkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0ID0gdGNwZC0+cmVzdW1lKGRldik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHRjNjM5M3hiX2h3X2luaXQoZGV2KTsKK30KKyNlbHNlCisjZGVmaW5lIHRjNjM5M3hiX3N1c3BlbmQgTlVMTAorI2RlZmluZSB0YzYzOTN4Yl9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRjNjM5M3hiX2RyaXZlciA9IHsKKwkucHJvYmUgPSB0YzYzOTN4Yl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodGM2MzkzeGJfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IHRjNjM5M3hiX3N1c3BlbmQsCisJLnJlc3VtZSA9IHRjNjM5M3hiX3Jlc3VtZSwKKworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRjNjM5M3hiIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRjNjM5M3hiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0YzYzOTN4Yl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGM2MzkzeGJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0YzYzOTN4Yl9kcml2ZXIpOworfQorCitzdWJzeXNfaW5pdGNhbGwodGM2MzkzeGJfaW5pdCk7Cittb2R1bGVfZXhpdCh0YzYzOTN4Yl9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSWFuIE1vbHRvbiwgRG1pdHJ5IEJhcnlzaGtvdiBhbmQgRGlyayBPcGZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ0YzYzOTN4YiBUb3NoaWJhIE1vYmlsZSBJTyBDb250cm9sbGVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnRjNjM5M3hiIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IDE5MjFiOGQuLmNlNjdkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC00MjAsNCArNDIwLDE3IEBACiAJICB0aGlzIGZlYXR1cmUgd2lsbCBhbGxvdyBmb3IgZGlyZWN0IGNvbW11bmljYXRpb24gYmV0d2VlbiBTU0lzCiAJICBiYXNlZCBvbiBhIG5ldHdvcmsgYWRhcHRlciBhbmQgRE1BIG1lc3NhZ2luZy4KIAorY29uZmlnIEhQX0lMTworCXRyaXN0YXRlICJDaGFubmVsIGludGVyZmFjZSBkcml2ZXIgZm9yIEhQIGlMTy9pTE8yIHByb2Nlc3NvciIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGUgY2hhbm5lbCBpbnRlcmZhY2UgZHJpdmVyIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gY29tbXVuaWNhdGUKKwkgIHdpdGggaUxPL2lMTzIgbWFuYWdlbWVudCBwcm9jZXNzb3JzIHByZXNlbnQgb24gSFAgUHJvTGlhbnQKKwkgIHNlcnZlcnMuICBVcG9uIGxvYWRpbmcsIHRoZSBkcml2ZXIgY3JlYXRlcyAvZGV2L2hwaWxvL2RYY2NiTiBmaWxlcywKKwkgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGdhdGhlciBkYXRhIGZyb20gdGhlIG1hbmFnZW1lbnQgcHJvY2Vzc29yLAorCSAgdmlhIHJlYWQgYW5kIHdyaXRlIHN5c3RlbSBjYWxscy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaHBpbG8uCisKIGVuZGlmICMgTUlTQ19ERVZJQ0VTCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggYTZkYWM2YS4uNjg4ZmU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtMjcsMyArMjcsNCBAQAogb2JqLSQoQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUykgKz0gZW5jbG9zdXJlLm8KIG9iai0kKENPTkZJR19LR0RCX1RFU1RTKQkrPSBrZ2RidHMubwogb2JqLSQoQ09ORklHX1NHSV9YUCkJCSs9IHNnaS14cC8KK29iai0kKENPTkZJR19IUF9JTE8pCQkrPSBocGlsby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaHBpbG8uYyBiL2RyaXZlcnMvbWlzYy9ocGlsby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTI5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvaHBpbG8uYwpAQCAtMCwwICsxLDc2OCBAQAorLyoKKyAqIERyaXZlciBmb3IgSFAgaUxPL2lMTzIgbWFuYWdlbWVudCBwcm9jZXNzb3IuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKglEYXZpZCBBbHRvYmVsbGkgPGRhdmlkLmFsdG9iZWxsaUBocC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJocGlsby5oIgorCitzdGF0aWMgc3RydWN0IGNsYXNzICppbG9fY2xhc3M7CitzdGF0aWMgdW5zaWduZWQgaW50IGlsb19tYWpvcjsKK3N0YXRpYyBjaGFyIGlsb19od2RldltNQVhfSUxPX0RFVl07CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9lbnRyeV9pZChpbnQgZW50cnkpCit7CisJcmV0dXJuIChlbnRyeSAmIEVOVFJZX01BU0tfREVTQ1JJUFRPUikgPj4gRU5UUllfQklUUE9TX0RFU0NSSVBUT1I7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9lbnRyeV9sZW4oaW50IGVudHJ5KQoreworCXJldHVybiAoKGVudHJ5ICYgRU5UUllfTUFTS19RV09SRFMpID4+IEVOVFJZX0JJVFBPU19RV09SRFMpIDw8IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1rX2VudHJ5KGludCBpZCwgaW50IGxlbikKK3sKKwlpbnQgcWxlbiA9IGxlbiAmIDcgPyAobGVuID4+IDMpICsgMSA6IGxlbiA+PiAzOworCXJldHVybiBpZCA8PCBFTlRSWV9CSVRQT1NfREVTQ1JJUFRPUiB8IHFsZW4gPDwgRU5UUllfQklUUE9TX1FXT1JEUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGVzY19tZW1fc3ooaW50IG5yX2VudHJ5KQoreworCXJldHVybiBucl9lbnRyeSA8PCBMMl9RRU5UUllfU1o7Cit9CisKKy8qCisgKiBGSUZPIHF1ZXVlcywgc2hhcmVkIHdpdGggaGFyZHdhcmUuCisgKgorICogSWYgYSBxdWV1ZSBoYXMgZW1wdHkgc2xvdHMsIGFuIGVudHJ5IGlzIGFkZGVkIHRvIHRoZSBxdWV1ZSB0YWlsLAorICogYW5kIHRoYXQgZW50cnkgaXMgbWFya2VkIGFzIG9jY3VwaWVkLgorICogRW50cmllcyBjYW4gYmUgZGVxdWV1ZWQgZnJvbSB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgd2hlbiB0aGUgZGV2aWNlCisgKiBoYXMgbWFya2VkIHRoZSBlbnRyeSBhcyBjb25zdW1lZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBxdWV1ZS9kZXF1ZXVlLCBmYWxzZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGZpZm9fZW5xdWV1ZShzdHJ1Y3QgaWxvX2h3aW5mbyAqaHcsIGNoYXIgKmZpZm9iYXIsIGludCBlbnRyeSkKK3sKKwlzdHJ1Y3QgZmlmbyAqZmlmb19xID0gRklGT0JBUlRPSEFORExFKGZpZm9iYXIpOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrKCZody0+Zmlmb19sb2NrKTsKKwlpZiAoIShmaWZvX3EtPmZpZm9iYXJbKGZpZm9fcS0+dGFpbCArIDEpICYgZmlmb19xLT5pbWFza10KKwkgICAgICAmIEVOVFJZX01BU0tfTykpIHsKKwkJZmlmb19xLT5maWZvYmFyW2ZpZm9fcS0+dGFpbCAmIGZpZm9fcS0+aW1hc2tdIHw9CisJCQkJKGVudHJ5ICYgRU5UUllfTUFTS19OT1NUQVRFKSB8IGZpZm9fcS0+bWVyZ2U7CisJCWZpZm9fcS0+dGFpbCArPSAxOworCQlyZXQgPSAxOworCX0KKwlzcGluX3VubG9jaygmaHctPmZpZm9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZpZm9fZGVxdWV1ZShzdHJ1Y3QgaWxvX2h3aW5mbyAqaHcsIGNoYXIgKmZpZm9iYXIsIGludCAqZW50cnkpCit7CisJc3RydWN0IGZpZm8gKmZpZm9fcSA9IEZJRk9CQVJUT0hBTkRMRShmaWZvYmFyKTsKKwlpbnQgcmV0ID0gMDsKKwl1NjQgYzsKKworCXNwaW5fbG9jaygmaHctPmZpZm9fbG9jayk7CisJYyA9IGZpZm9fcS0+Zmlmb2JhcltmaWZvX3EtPmhlYWQgJiBmaWZvX3EtPmltYXNrXTsKKwlpZiAoYyAmIEVOVFJZX01BU0tfQykgeworCQlpZiAoZW50cnkpCisJCQkqZW50cnkgPSBjICYgRU5UUllfTUFTS19OT1NUQVRFOworCisJCWZpZm9fcS0+Zmlmb2JhcltmaWZvX3EtPmhlYWQgJiBmaWZvX3EtPmltYXNrXSA9CisJCQkJCQkJKGMgfCBFTlRSWV9NQVNLKSArIDE7CisJCWZpZm9fcS0+aGVhZCArPSAxOworCQlyZXQgPSAxOworCX0KKwlzcGluX3VubG9jaygmaHctPmZpZm9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlsb19wa3RfZW5xdWV1ZShzdHJ1Y3QgaWxvX2h3aW5mbyAqaHcsIHN0cnVjdCBjY2IgKmNjYiwKKwkJCSAgIGludCBkaXIsIGludCBpZCwgaW50IGxlbikKK3sKKwljaGFyICpmaWZvYmFyOworCWludCBlbnRyeTsKKworCWlmIChkaXIgPT0gU0VORFEpCisJCWZpZm9iYXIgPSBjY2ItPmNjYl91MS5zZW5kX2ZpZm9iYXI7CisJZWxzZQorCQlmaWZvYmFyID0gY2NiLT5jY2JfdTMucmVjdl9maWZvYmFyOworCisJZW50cnkgPSBta19lbnRyeShpZCwgbGVuKTsKKwlyZXR1cm4gZmlmb19lbnF1ZXVlKGh3LCBmaWZvYmFyLCBlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgaWxvX3BrdF9kZXF1ZXVlKHN0cnVjdCBpbG9faHdpbmZvICpodywgc3RydWN0IGNjYiAqY2NiLAorCQkJICAgaW50IGRpciwgaW50ICppZCwgaW50ICpsZW4sIHZvaWQgKipwa3QpCit7CisJY2hhciAqZmlmb2JhciwgKmRlc2M7CisJaW50IGVudHJ5ID0gMCwgcGt0X2lkID0gMDsKKwlpbnQgcmV0OworCisJaWYgKGRpciA9PSBTRU5EUSkgeworCQlmaWZvYmFyID0gY2NiLT5jY2JfdTEuc2VuZF9maWZvYmFyOworCQlkZXNjID0gY2NiLT5jY2JfdTIuc2VuZF9kZXNjOworCX0gZWxzZSB7CisJCWZpZm9iYXIgPSBjY2ItPmNjYl91My5yZWN2X2ZpZm9iYXI7CisJCWRlc2MgPSBjY2ItPmNjYl91NC5yZWN2X2Rlc2M7CisJfQorCisJcmV0ID0gZmlmb19kZXF1ZXVlKGh3LCBmaWZvYmFyLCAmZW50cnkpOworCWlmIChyZXQpIHsKKwkJcGt0X2lkID0gZ2V0X2VudHJ5X2lkKGVudHJ5KTsKKwkJaWYgKGlkKQorCQkJKmlkID0gcGt0X2lkOworCQlpZiAobGVuKQorCQkJKmxlbiA9IGdldF9lbnRyeV9sZW4oZW50cnkpOworCQlpZiAocGt0KQorCQkJKnBrdCA9ICh2b2lkICopKGRlc2MgKyBkZXNjX21lbV9zeihwa3RfaWQpKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9vcmJlbGxfc2V0KHN0cnVjdCBjY2IgKmNjYikKK3sKKwlpb3dyaXRlOCgxLCBjY2ItPmNjYl91NS5kYl9iYXNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRvb3JiZWxsX2NscihzdHJ1Y3QgY2NiICpjY2IpCit7CisJaW93cml0ZTgoMiwgY2NiLT5jY2JfdTUuZGJfYmFzZSk7Cit9CitzdGF0aWMgaW5saW5lIGludCBjdHJsX3NldChpbnQgbDJzeiwgaW50IGlkeG1hc2ssIGludCBkZXNjbGltKQoreworCWludCBhY3RpdmUgPSAwLCBnbyA9IDE7CisJcmV0dXJuIGwyc3ogPDwgQ1RSTF9CSVRQT1NfTDJTWiB8CisJICAgICAgIGlkeG1hc2sgPDwgQ1RSTF9CSVRQT1NfRklGT0lOREVYTUFTSyB8CisJICAgICAgIGRlc2NsaW0gPDwgQ1RSTF9CSVRQT1NfREVTQ0xJTUlUIHwKKwkgICAgICAgYWN0aXZlIDw8IENUUkxfQklUUE9TX0EgfAorCSAgICAgICBnbyA8PCBDVFJMX0JJVFBPU19HOworfQorc3RhdGljIHZvaWQgY3RybF9zZXR1cChzdHJ1Y3QgY2NiICpjY2IsIGludCBucl9kZXNjLCBpbnQgbDJkZXNjX3N6KQoreworCS8qIGZvciBzaW1wbGljaXR5LCB1c2UgdGhlIHNhbWUgcGFyYW1ldGVycyBmb3Igc2VuZCBhbmQgcmVjdiBjdHJscyAqLworCWNjYi0+c2VuZF9jdHJsID0gY3RybF9zZXQobDJkZXNjX3N6LCBucl9kZXNjLTEsIG5yX2Rlc2MtMSk7CisJY2NiLT5yZWN2X2N0cmwgPSBjdHJsX3NldChsMmRlc2Nfc3osIG5yX2Rlc2MtMSwgbnJfZGVzYy0xKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmlmb19zeihpbnQgbnJfZW50cnkpCit7CisJLyogc2l6ZSBvZiBhIGZpZm8gaXMgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaXQgY29udGFpbnMgKi8KKwlyZXR1cm4gKG5yX2VudHJ5ICogc2l6ZW9mKHU2NCkpICsgRklGT0hBTkRMRVNJWkU7Cit9CisKK3N0YXRpYyB2b2lkIGZpZm9fc2V0dXAodm9pZCAqYmFzZV9hZGRyLCBpbnQgbnJfZW50cnkpCit7CisJc3RydWN0IGZpZm8gKmZpZm9fcSA9IGJhc2VfYWRkcjsKKwlpbnQgaTsKKworCS8qIHNldCB1cCBhbiBlbXB0eSBmaWZvICovCisJZmlmb19xLT5oZWFkID0gMDsKKwlmaWZvX3EtPnRhaWwgPSAwOworCWZpZm9fcS0+cmVzZXQgPSAwOworCWZpZm9fcS0+bnJlbnRzID0gbnJfZW50cnk7CisJZmlmb19xLT5pbWFzayA9IG5yX2VudHJ5IC0gMTsKKwlmaWZvX3EtPm1lcmdlID0gRU5UUllfTUFTS19POworCisJZm9yIChpID0gMDsgaSA8IG5yX2VudHJ5OyBpKyspCisJCWZpZm9fcS0+Zmlmb2JhcltpXSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGlsb19jY2JfY2xvc2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBjY2JfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2NiICpkcml2ZXJfY2NiOworCXN0cnVjdCBjY2IgX19pb21lbSAqZGV2aWNlX2NjYjsKKwlpbnQgcmV0cmllczsKKworCWRyaXZlcl9jY2IgPSAmZGF0YS0+ZHJpdmVyX2NjYjsKKwlkZXZpY2VfY2NiID0gZGF0YS0+bWFwcGVkX2NjYjsKKworCS8qIGNvbXBsaWNhdGVkIGRhbmNlIHRvIHRlbGwgdGhlIGh3IHdlIGFyZSBzdG9wcGluZyAqLworCWRvb3JiZWxsX2Nscihkcml2ZXJfY2NiKTsKKwlpb3dyaXRlMzIoaW9yZWFkMzIoJmRldmljZV9jY2ItPnNlbmRfY3RybCkgJiB+KDEgPDwgQ1RSTF9CSVRQT1NfRyksCisJCSAgJmRldmljZV9jY2ItPnNlbmRfY3RybCk7CisJaW93cml0ZTMyKGlvcmVhZDMyKCZkZXZpY2VfY2NiLT5yZWN2X2N0cmwpICYgfigxIDw8IENUUkxfQklUUE9TX0cpLAorCQkgICZkZXZpY2VfY2NiLT5yZWN2X2N0cmwpOworCisJLyogZ2l2ZSBpTE8gc29tZSB0aW1lIHRvIHByb2Nlc3Mgc3RvcCByZXF1ZXN0ICovCisJZm9yIChyZXRyaWVzID0gMTAwMDsgcmV0cmllcyA+IDA7IHJldHJpZXMtLSkgeworCQlkb29yYmVsbF9zZXQoZHJpdmVyX2NjYik7CisJCXVkZWxheSgxKTsKKwkJaWYgKCEoaW9yZWFkMzIoJmRldmljZV9jY2ItPnNlbmRfY3RybCkgJiAoMSA8PCBDVFJMX0JJVFBPU19BKSkKKwkJICAgICYmCisJCSAgICAhKGlvcmVhZDMyKCZkZXZpY2VfY2NiLT5yZWN2X2N0cmwpICYgKDEgPDwgQ1RSTF9CSVRQT1NfQSkpKQorCQkJYnJlYWs7CisJfQorCWlmIChyZXRyaWVzID09IDApCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNsb3NpbmcsIGJ1dCBjb250cm9sbGVyIHN0aWxsIGFjdGl2ZVxuIik7CisKKwkvKiBjbGVhciB0aGUgaHcgY2NiICovCisJbWVtc2V0X2lvKGRldmljZV9jY2IsIDAsIHNpemVvZihzdHJ1Y3QgY2NiKSk7CisKKwkvKiBmcmVlIHJlc291cmNlcyB1c2VkIHRvIGJhY2sgc2VuZC9yZWN2IHF1ZXVlcyAqLworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgZGF0YS0+ZG1hX3NpemUsIGRhdGEtPmRtYV92YSwgZGF0YS0+ZG1hX3BhKTsKK30KKworc3RhdGljIGludCBpbG9fY2NiX29wZW4oc3RydWN0IGlsb19od2luZm8gKmh3LCBzdHJ1Y3QgY2NiX2RhdGEgKmRhdGEsIGludCBzbG90KQoreworCWNoYXIgKmRtYV92YSwgKmRtYV9wYTsKKwlpbnQgcGt0X2lkLCBwa3Rfc3osIGksIGVycm9yOworCXN0cnVjdCBjY2IgKmRyaXZlcl9jY2IsICppbG9fY2NiOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJZHJpdmVyX2NjYiA9ICZkYXRhLT5kcml2ZXJfY2NiOworCWlsb19jY2IgPSAmZGF0YS0+aWxvX2NjYjsKKwlwZGV2ID0gaHctPmlsb19kZXY7CisKKwlkYXRhLT5kbWFfc2l6ZSA9IDIgKiBmaWZvX3N6KE5SX1FFTlRSWSkgKworCQkJIDIgKiBkZXNjX21lbV9zeihOUl9RRU5UUlkpICsKKwkJCSBJTE9fU1RBUlRfQUxJR04gKyBJTE9fQ0FDSEVfU1o7CisKKwllcnJvciA9IC1FTk9NRU07CisJZGF0YS0+ZG1hX3ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgZGF0YS0+ZG1hX3NpemUsCisJCQkJCSAgICAmZGF0YS0+ZG1hX3BhKTsKKwlpZiAoIWRhdGEtPmRtYV92YSkKKwkJZ290byBvdXQ7CisKKwlkbWFfdmEgPSAoY2hhciAqKWRhdGEtPmRtYV92YTsKKwlkbWFfcGEgPSAoY2hhciAqKWRhdGEtPmRtYV9wYTsKKworCW1lbXNldChkbWFfdmEsIDAsIGRhdGEtPmRtYV9zaXplKTsKKworCWRtYV92YSA9IChjaGFyICopcm91bmR1cCgodW5zaWduZWQgbG9uZylkbWFfdmEsIElMT19TVEFSVF9BTElHTik7CisJZG1hX3BhID0gKGNoYXIgKilyb3VuZHVwKCh1bnNpZ25lZCBsb25nKWRtYV9wYSwgSUxPX1NUQVJUX0FMSUdOKTsKKworCS8qCisJICogQ3JlYXRlIHR3byBjY2Incywgb25lIHdpdGggdmlydCBhZGRycywgb25lIHdpdGggcGh5cyBhZGRycy4KKwkgKiBDb3B5IHRoZSBwaHlzIGFkZHIgY2NiIHRvIGRldmljZSBzaGFyZWQgbWVtLgorCSAqLworCWN0cmxfc2V0dXAoZHJpdmVyX2NjYiwgTlJfUUVOVFJZLCBMMl9RRU5UUllfU1opOworCWN0cmxfc2V0dXAoaWxvX2NjYiwgTlJfUUVOVFJZLCBMMl9RRU5UUllfU1opOworCisJZmlmb19zZXR1cChkbWFfdmEsIE5SX1FFTlRSWSk7CisJZHJpdmVyX2NjYi0+Y2NiX3UxLnNlbmRfZmlmb2JhciA9IGRtYV92YSArIEZJRk9IQU5ETEVTSVpFOworCWlsb19jY2ItPmNjYl91MS5zZW5kX2ZpZm9iYXIgPSBkbWFfcGEgKyBGSUZPSEFORExFU0laRTsKKwlkbWFfdmEgKz0gZmlmb19zeihOUl9RRU5UUlkpOworCWRtYV9wYSArPSBmaWZvX3N6KE5SX1FFTlRSWSk7CisKKwlkbWFfdmEgPSAoY2hhciAqKXJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpZG1hX3ZhLCBJTE9fQ0FDSEVfU1opOworCWRtYV9wYSA9IChjaGFyICopcm91bmR1cCgodW5zaWduZWQgbG9uZylkbWFfcGEsIElMT19DQUNIRV9TWik7CisKKwlmaWZvX3NldHVwKGRtYV92YSwgTlJfUUVOVFJZKTsKKwlkcml2ZXJfY2NiLT5jY2JfdTMucmVjdl9maWZvYmFyID0gZG1hX3ZhICsgRklGT0hBTkRMRVNJWkU7CisJaWxvX2NjYi0+Y2NiX3UzLnJlY3ZfZmlmb2JhciA9IGRtYV9wYSArIEZJRk9IQU5ETEVTSVpFOworCWRtYV92YSArPSBmaWZvX3N6KE5SX1FFTlRSWSk7CisJZG1hX3BhICs9IGZpZm9fc3ooTlJfUUVOVFJZKTsKKworCWRyaXZlcl9jY2ItPmNjYl91Mi5zZW5kX2Rlc2MgPSBkbWFfdmE7CisJaWxvX2NjYi0+Y2NiX3UyLnNlbmRfZGVzYyA9IGRtYV9wYTsKKwlkbWFfcGEgKz0gZGVzY19tZW1fc3ooTlJfUUVOVFJZKTsKKwlkbWFfdmEgKz0gZGVzY19tZW1fc3ooTlJfUUVOVFJZKTsKKworCWRyaXZlcl9jY2ItPmNjYl91NC5yZWN2X2Rlc2MgPSBkbWFfdmE7CisJaWxvX2NjYi0+Y2NiX3U0LnJlY3ZfZGVzYyA9IGRtYV9wYTsKKworCWRyaXZlcl9jY2ItPmNoYW5uZWwgPSBzbG90OworCWlsb19jY2ItPmNoYW5uZWwgPSBzbG90OworCisJZHJpdmVyX2NjYi0+Y2NiX3U1LmRiX2Jhc2UgPSBody0+ZGJfdmFkZHIgKyAoc2xvdCA8PCBMMl9EQl9TSVpFKTsKKwlpbG9fY2NiLT5jY2JfdTUuZGJfYmFzZSA9IE5VTEw7IC8qIGh3IGNjYidzIGRvb3JiZWxsIGlzIG5vdCB1c2VkICovCisKKwkvKiBjb3B5IHRoZSBjY2Igd2l0aCBwaHlzaWNhbCBhZGRycyB0byBkZXZpY2UgbWVtb3J5ICovCisJZGF0YS0+bWFwcGVkX2NjYiA9IChzdHJ1Y3QgY2NiIF9faW9tZW0gKikKKwkJCQkoaHctPnJhbV92YWRkciArIChzbG90ICogSUxPSFdfQ0NCX1NaKSk7CisJbWVtY3B5X3RvaW8oZGF0YS0+bWFwcGVkX2NjYiwgaWxvX2NjYiwgc2l6ZW9mKHN0cnVjdCBjY2IpKTsKKworCS8qIHB1dCBwYWNrZXRzIG9uIHRoZSBzZW5kIGFuZCByZWNlaXZlIHF1ZXVlcyAqLworCXBrdF9zeiA9IDA7CisJZm9yIChwa3RfaWQgPSAwOyBwa3RfaWQgPCBOUl9RRU5UUlk7IHBrdF9pZCsrKSB7CisJCWlsb19wa3RfZW5xdWV1ZShodywgZHJpdmVyX2NjYiwgU0VORFEsIHBrdF9pZCwgcGt0X3N6KTsKKwkJZG9vcmJlbGxfc2V0KGRyaXZlcl9jY2IpOworCX0KKworCXBrdF9zeiA9IGRlc2NfbWVtX3N6KDEpOworCWZvciAocGt0X2lkID0gMDsgcGt0X2lkIDwgTlJfUUVOVFJZOyBwa3RfaWQrKykKKwkJaWxvX3BrdF9lbnF1ZXVlKGh3LCBkcml2ZXJfY2NiLCBSRUNWUSwgcGt0X2lkLCBwa3Rfc3opOworCisJZG9vcmJlbGxfY2xyKGRyaXZlcl9jY2IpOworCisJLyogbWFrZSBzdXJlIGlMTyBpcyByZWFsbHkgaGFuZGxpbmcgcmVxdWVzdHMgKi8KKwlmb3IgKGkgPSAxMDAwOyBpID4gMDsgaS0tKSB7CisJCWlmIChpbG9fcGt0X2RlcXVldWUoaHcsIGRyaXZlcl9jY2IsIFNFTkRRLCAmcGt0X2lkLCBOVUxMLCBOVUxMKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCisJaWYgKGkpIHsKKwkJaWxvX3BrdF9lbnF1ZXVlKGh3LCBkcml2ZXJfY2NiLCBTRU5EUSwgcGt0X2lkLCAwKTsKKwkJZG9vcmJlbGxfc2V0KGRyaXZlcl9jY2IpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk9wZW4gY291bGQgbm90IGRlcXVldWUgYSBwYWNrZXRcbiIpOworCQllcnJvciA9IC1FQlVTWTsKKwkJZ290byBmcmVlOworCX0KKworCXJldHVybiAwOworZnJlZToKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIGRhdGEtPmRtYV9zaXplLCBkYXRhLT5kbWFfdmEsIGRhdGEtPmRtYV9wYSk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX3Jlc2V0KHN0cnVjdCBjY2IgKmNjYikKK3sKKwkvKiBjaGVjayBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoYW5uZWwgbmVlZGluZyBhIHJlc2V0ICovCisJcmV0dXJuIEZJRk9CQVJUT0hBTkRMRShjY2ItPmNjYl91MS5zZW5kX2ZpZm9iYXIpLT5yZXNldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9jaGFubmVsX3Jlc2V0KHN0cnVjdCBjY2IgKmNjYikKK3sKKwkvKiBzZXQgYSBmbGFnIGluZGljYXRpbmcgdGhpcyBjaGFubmVsIG5lZWRzIGEgcmVzZXQgKi8KKwlGSUZPQkFSVE9IQU5ETEUoY2NiLT5jY2JfdTEuc2VuZF9maWZvYmFyKS0+cmVzZXQgPSAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19kZXZpY2VfcmVzZXQoc3RydWN0IGlsb19od2luZm8gKmh3KQoreworCS8qIGNoZWNrIGZvciBnbG9iYWwgcmVzZXQgY29uZGl0aW9uICovCisJcmV0dXJuIGlvcmVhZDMyKCZody0+bW1pb192YWRkcltEQl9PVVRdKSAmICgxIDw8IERCX1JFU0VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2RldmljZShzdHJ1Y3QgaWxvX2h3aW5mbyAqaHcpCit7CisJLyogY2xlYXIgdGhlIGRldmljZSAocmVzZXQgYml0cywgcGVuZGluZyBjaGFubmVsIGVudHJpZXMpICovCisJaW93cml0ZTMyKC0xLCAmaHctPm1taW9fdmFkZHJbREJfT1VUXSk7Cit9CisKK3N0YXRpYyB2b2lkIGlsb19sb2NrZWRfcmVzZXQoc3RydWN0IGlsb19od2luZm8gKmh3KQoreworCWludCBzbG90OworCisJLyoKKwkgKiBNYXBwZWQgbWVtb3J5IGlzIHplcm9lZCBvbiBpbG8gcmVzZXQsIHNvIHNldCBhIHBlciBjY2IgZmxhZworCSAqIHRvIGluZGljYXRlIHRoYXQgdGhpcyBjY2IgbmVlZHMgdG8gYmUgY2xvc2VkIGFuZCByZW9wZW5lZC4KKwkgKi8KKwlmb3IgKHNsb3QgPSAwOyBzbG90IDwgTUFYX0NDQjsgc2xvdCsrKSB7CisJCWlmICghaHctPmNjYl9hbGxvY1tzbG90XSkKKwkJCWNvbnRpbnVlOworCQlzZXRfY2hhbm5lbF9yZXNldCgmaHctPmNjYl9hbGxvY1tzbG90XS0+ZHJpdmVyX2NjYik7CisJfQorCisJY2xlYXJfZGV2aWNlKGh3KTsKK30KKworc3RhdGljIHZvaWQgaWxvX3Jlc2V0KHN0cnVjdCBpbG9faHdpbmZvICpodykKK3sKKwlzcGluX2xvY2soJmh3LT5hbGxvY19sb2NrKTsKKworCS8qIHJlc2V0IG1pZ2h0IGhhdmUgYmVlbiBoYW5kbGVkIGFmdGVyIGxvY2sgd2FzIHRha2VuICovCisJaWYgKGlzX2RldmljZV9yZXNldChodykpCisJCWlsb19sb2NrZWRfcmVzZXQoaHcpOworCisJc3Bpbl91bmxvY2soJmh3LT5hbGxvY19sb2NrKTsKK30KKworc3RhdGljIHNzaXplX3QgaWxvX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpvZmYpCit7CisJaW50IGVyciwgZm91bmQsIGNudCwgcGt0X2lkLCBwa3RfbGVuOworCXN0cnVjdCBjY2JfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgY2NiICpkcml2ZXJfY2NiOworCXN0cnVjdCBpbG9faHdpbmZvICpodzsKKwl2b2lkICpwa3Q7CisKKwlkYXRhID0gZnAtPnByaXZhdGVfZGF0YTsKKwlkcml2ZXJfY2NiID0gJmRhdGEtPmRyaXZlcl9jY2I7CisJaHcgPSBkYXRhLT5pbG9faHc7CisKKwlpZiAoaXNfZGV2aWNlX3Jlc2V0KGh3KSB8fCBpc19jaGFubmVsX3Jlc2V0KGRyaXZlcl9jY2IpKSB7CisJCS8qCisJCSAqIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gcmVzZXQsIGFwcGxpY2F0aW9ucworCQkgKiBuZWVkIHRvIGNsb3NlIGFuZCByZW9wZW4gYWxsIGNjYnMuCisJCSAqLworCQlpbG9fcmVzZXQoaHcpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgY2FsbGVkIHdoZW4gZGF0YSBpcyBleHBlY3RlZAorCSAqIGluIHRoZSBjaGFubmVsLCBhbmQgd2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgbm8gcGFja2V0IGlzIGZvdW5kCisJICogZHVyaW5nIHRoZSBsb29wIGJlbG93LiAgVGhlIHNsZWVwL3JldHJ5IGxvZ2ljIGlzIHRvIGFsbG93CisJICogYXBwbGljYXRpb25zIHRvIGNhbGwgcmVhZCgpIGltbWVkaWF0ZWx5IHBvc3Qgd3JpdGUoKSwKKwkgKiBhbmQgZ2l2ZSBpTE8gc29tZSB0aW1lIHRvIHByb2Nlc3MgdGhlIHNlbnQgcGFja2V0LgorCSAqLworCWNudCA9IDIwOworCWRvIHsKKwkJLyogbG9vayBmb3IgYSByZWNlaXZlZCBwYWNrZXQgKi8KKwkJZm91bmQgPSBpbG9fcGt0X2RlcXVldWUoaHcsIGRyaXZlcl9jY2IsIFJFQ1ZRLCAmcGt0X2lkLAorCQkJCQkmcGt0X2xlbiwgJnBrdCk7CisJCWlmIChmb3VuZCkKKwkJCWJyZWFrOworCQljbnQtLTsKKwkJbXNsZWVwKDEwMCk7CisJfSB3aGlsZSAoIWZvdW5kICYmIGNudCk7CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCS8qIG9ubHkgY29weSB0aGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBwYWNrZXQgKi8KKwlpZiAocGt0X2xlbiA8IGxlbikKKwkJbGVuID0gcGt0X2xlbjsKKworCWVyciA9IGNvcHlfdG9fdXNlcihidWYsIHBrdCwgbGVuKTsKKworCS8qIHJldHVybiB0aGUgcmVjZWl2ZWQgcGFja2V0IHRvIHRoZSBxdWV1ZSAqLworCWlsb19wa3RfZW5xdWV1ZShodywgZHJpdmVyX2NjYiwgUkVDVlEsIHBrdF9pZCwgZGVzY19tZW1fc3ooMSkpOworCisJcmV0dXJuIGVyciA/IC1FRkFVTFQgOiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlsb193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmYpCit7CisJaW50IGVyciwgcGt0X2lkLCBwa3RfbGVuOworCXN0cnVjdCBjY2JfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgY2NiICpkcml2ZXJfY2NiOworCXN0cnVjdCBpbG9faHdpbmZvICpodzsKKwl2b2lkICpwa3Q7CisKKwlkYXRhID0gZnAtPnByaXZhdGVfZGF0YTsKKwlkcml2ZXJfY2NiID0gJmRhdGEtPmRyaXZlcl9jY2I7CisJaHcgPSBkYXRhLT5pbG9faHc7CisKKwlpZiAoaXNfZGV2aWNlX3Jlc2V0KGh3KSB8fCBpc19jaGFubmVsX3Jlc2V0KGRyaXZlcl9jY2IpKSB7CisJCS8qCisJCSAqIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gcmVzZXQsIGFwcGxpY2F0aW9ucworCQkgKiBuZWVkIHRvIGNsb3NlIGFuZCByZW9wZW4gYWxsIGNjYnMuCisJCSAqLworCQlpbG9fcmVzZXQoaHcpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBnZXQgYSBwYWNrZXQgdG8gc2VuZCB0aGUgdXNlciBjb21tYW5kICovCisJaWYgKCFpbG9fcGt0X2RlcXVldWUoaHcsIGRyaXZlcl9jY2IsIFNFTkRRLCAmcGt0X2lkLCAmcGt0X2xlbiwgJnBrdCkpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBsaW1pdCB0aGUgbGVuZ3RoIHRvIHRoZSBsZW5ndGggb2YgdGhlIHBhY2tldCAqLworCWlmIChwa3RfbGVuIDwgbGVuKQorCQlsZW4gPSBwa3RfbGVuOworCisJLyogb24gZmFpbHVyZSwgc2V0IHRoZSBsZW4gdG8gMCB0byByZXR1cm4gZW1wdHkgcGFja2V0IHRvIHRoZSBkZXZpY2UgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcihwa3QsIGJ1ZiwgbGVuKTsKKwlpZiAoZXJyKQorCQlsZW4gPSAwOworCisJLyogc2VuZCB0aGUgcGFja2V0ICovCisJaWxvX3BrdF9lbnF1ZXVlKGh3LCBkcml2ZXJfY2NiLCBTRU5EUSwgcGt0X2lkLCBsZW4pOworCWRvb3JiZWxsX3NldChkcml2ZXJfY2NiKTsKKworCXJldHVybiBlcnIgPyAtRUZBVUxUIDogbGVuOworfQorCitzdGF0aWMgaW50IGlsb19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZnApCit7CisJaW50IHNsb3Q7CisJc3RydWN0IGNjYl9kYXRhICpkYXRhOworCXN0cnVjdCBpbG9faHdpbmZvICpodzsKKworCXNsb3QgPSBpbWlub3IoaXApICUgTUFYX0NDQjsKKwlodyA9IGNvbnRhaW5lcl9vZihpcC0+aV9jZGV2LCBzdHJ1Y3QgaWxvX2h3aW5mbywgY2Rldik7CisKKwlzcGluX2xvY2soJmh3LT5hbGxvY19sb2NrKTsKKworCWlmIChpc19kZXZpY2VfcmVzZXQoaHcpKQorCQlpbG9fbG9ja2VkX3Jlc2V0KGh3KTsKKworCWlmIChody0+Y2NiX2FsbG9jW3Nsb3RdLT5jY2JfY250ID09IDEpIHsKKworCQlkYXRhID0gZnAtPnByaXZhdGVfZGF0YTsKKworCQlpbG9fY2NiX2Nsb3NlKGh3LT5pbG9fZGV2LCBkYXRhKTsKKworCQlrZnJlZShkYXRhKTsKKwkJaHctPmNjYl9hbGxvY1tzbG90XSA9IE5VTEw7CisJfSBlbHNlCisJCWh3LT5jY2JfYWxsb2Nbc2xvdF0tPmNjYl9jbnQtLTsKKworCXNwaW5fdW5sb2NrKCZody0+YWxsb2NfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbG9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZnApCit7CisJaW50IHNsb3QsIGVycm9yOworCXN0cnVjdCBjY2JfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgaWxvX2h3aW5mbyAqaHc7CisKKwlzbG90ID0gaW1pbm9yKGlwKSAlIE1BWF9DQ0I7CisJaHcgPSBjb250YWluZXJfb2YoaXAtPmlfY2Rldiwgc3RydWN0IGlsb19od2luZm8sIGNkZXYpOworCisJLyogbmV3IGNjYiBhbGxvY2F0aW9uICovCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9jaygmaHctPmFsbG9jX2xvY2spOworCisJaWYgKGlzX2RldmljZV9yZXNldChodykpCisJCWlsb19sb2NrZWRfcmVzZXQoaHcpOworCisJLyogZWFjaCBmZCBwcml2YXRlX2RhdGEgaG9sZHMgc3cvaHcgdmlldyBvZiBjY2IgKi8KKwlpZiAoaHctPmNjYl9hbGxvY1tzbG90XSA9PSBOVUxMKSB7CisJCS8qIGNyZWF0ZSBhIGNoYW5uZWwgY29udHJvbCBibG9jayBmb3IgdGhpcyBtaW5vciAqLworCQllcnJvciA9IGlsb19jY2Jfb3BlbihodywgZGF0YSwgc2xvdCk7CisJCWlmICghZXJyb3IpIHsKKwkJCWh3LT5jY2JfYWxsb2Nbc2xvdF0gPSBkYXRhOworCQkJaHctPmNjYl9hbGxvY1tzbG90XS0+Y2NiX2NudCA9IDE7CisJCQlody0+Y2NiX2FsbG9jW3Nsb3RdLT5jY2JfZXhjbCA9IGZwLT5mX2ZsYWdzICYgT19FWENMOworCQkJaHctPmNjYl9hbGxvY1tzbG90XS0+aWxvX2h3ID0gaHc7CisJCX0gZWxzZQorCQkJa2ZyZWUoZGF0YSk7CisJfSBlbHNlIHsKKwkJa2ZyZWUoZGF0YSk7CisJCWlmIChmcC0+Zl9mbGFncyAmIE9fRVhDTCB8fCBody0+Y2NiX2FsbG9jW3Nsb3RdLT5jY2JfZXhjbCkgeworCQkJLyoKKwkJCSAqIFRoZSBjaGFubmVsIGV4aXN0cywgYW5kIGVpdGhlciB0aGlzIG9wZW4KKwkJCSAqIG9yIGEgcHJldmlvdXMgb3BlbiBvZiB0aGlzIGNoYW5uZWwgd2FudHMKKwkJCSAqIGV4Y2x1c2l2ZSBhY2Nlc3MuCisJCQkgKi8KKwkJCWVycm9yID0gLUVCVVNZOworCQl9IGVsc2UgeworCQkJaHctPmNjYl9hbGxvY1tzbG90XS0+Y2NiX2NudCsrOworCQkJZXJyb3IgPSAwOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZody0+YWxsb2NfbG9jayk7CisKKwlpZiAoIWVycm9yKQorCQlmcC0+cHJpdmF0ZV9kYXRhID0gaHctPmNjYl9hbGxvY1tzbG90XTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWxvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IGlsb19yZWFkLAorCS53cml0ZQkJPSBpbG9fd3JpdGUsCisJLm9wZW4gCQk9IGlsb19vcGVuLAorCS5yZWxlYXNlIAk9IGlsb19jbG9zZSwKK307CisKK3N0YXRpYyB2b2lkIGlsb191bm1hcF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBpbG9faHdpbmZvICpodykKK3sKKwlwY2lfaW91bm1hcChwZGV2LCBody0+ZGJfdmFkZHIpOworCXBjaV9pb3VubWFwKHBkZXYsIGh3LT5yYW1fdmFkZHIpOworCXBjaV9pb3VubWFwKHBkZXYsIGh3LT5tbWlvX3ZhZGRyKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaWxvX21hcF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBpbG9faHdpbmZvICpodykKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJLyogbWFwIHRoZSBtZW1vcnkgbWFwcGVkIGkvbyByZWdpc3RlcnMgKi8KKwlody0+bW1pb192YWRkciA9IHBjaV9pb21hcChwZGV2LCAxLCAwKTsKKwlpZiAoaHctPm1taW9fdmFkZHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBtYXBwaW5nIG1taW9cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBtYXAgdGhlIGFkYXB0ZXIgc2hhcmVkIG1lbW9yeSByZWdpb24gKi8KKwlody0+cmFtX3ZhZGRyID0gcGNpX2lvbWFwKHBkZXYsIDIsIE1BWF9DQ0IgKiBJTE9IV19DQ0JfU1opOworCWlmIChody0+cmFtX3ZhZGRyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgbWFwcGluZyBzaGFyZWQgbWVtXG4iKTsKKwkJZ290byBtbWlvX2ZyZWU7CisJfQorCisJLyogbWFwIHRoZSBkb29yYmVsbCBhcGVydHVyZSAqLworCWh3LT5kYl92YWRkciA9IHBjaV9pb21hcChwZGV2LCAzLCBNQVhfQ0NCICogT05FX0RCX1NJWkUpOworCWlmIChody0+ZGJfdmFkZHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBtYXBwaW5nIGRvb3JiZWxsXG4iKTsKKwkJZ290byByYW1fZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKK3JhbV9mcmVlOgorCXBjaV9pb3VubWFwKHBkZXYsIGh3LT5yYW1fdmFkZHIpOworbW1pb19mcmVlOgorCXBjaV9pb3VubWFwKHBkZXYsIGh3LT5tbWlvX3ZhZGRyKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGlsb19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGksIG1pbm9yOworCXN0cnVjdCBpbG9faHdpbmZvICppbG9faHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwljbGVhcl9kZXZpY2UoaWxvX2h3KTsKKworCW1pbm9yID0gTUlOT1IoaWxvX2h3LT5jZGV2LmRldik7CisJZm9yIChpID0gbWlub3I7IGkgPCBtaW5vciArIE1BWF9DQ0I7IGkrKykKKwkJZGV2aWNlX2Rlc3Ryb3koaWxvX2NsYXNzLCBNS0RFVihpbG9fbWFqb3IsIGkpKTsKKworCWNkZXZfZGVsKCZpbG9faHctPmNkZXYpOworCWlsb191bm1hcF9kZXZpY2UocGRldiwgaWxvX2h3KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlrZnJlZShpbG9faHcpOworCWlsb19od2RldlsobWlub3IgLyBNQVhfQ0NCKV0gPSAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpbG9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgZGV2bnVtLCBtaW5vciwgc3RhcnQsIGVycm9yOworCXN0cnVjdCBpbG9faHdpbmZvICppbG9faHc7CisKKwkvKiBmaW5kIGEgZnJlZSByYW5nZSBmb3IgZGV2aWNlIGZpbGVzICovCisJZm9yIChkZXZudW0gPSAwOyBkZXZudW0gPCBNQVhfSUxPX0RFVjsgZGV2bnVtKyspIHsKKwkJaWYgKGlsb19od2RldltkZXZudW1dID09IDApIHsKKwkJCWlsb19od2RldltkZXZudW1dID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGRldm51bSA9PSBNQVhfSUxPX0RFVikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBmaW5kaW5nIGZyZWUgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogdHJhY2sgZ2xvYmFsIGFsbG9jYXRpb25zIGZvciB0aGlzIGRldmljZSAqLworCWVycm9yID0gLUVOT01FTTsKKwlpbG9faHcgPSBremFsbG9jKHNpemVvZigqaWxvX2h3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbG9faHcpCisJCWdvdG8gb3V0OworCisJaWxvX2h3LT5pbG9fZGV2ID0gcGRldjsKKwlzcGluX2xvY2tfaW5pdCgmaWxvX2h3LT5hbGxvY19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaWxvX2h3LT5maWZvX2xvY2spOworCisJZXJyb3IgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZnJlZTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJZXJyb3IgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIElMT19OQU1FKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZGlzYWJsZTsKKworCWVycm9yID0gaWxvX21hcF9kZXZpY2UocGRldiwgaWxvX2h3KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZnJlZV9yZWdpb25zOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGlsb19odyk7CisJY2xlYXJfZGV2aWNlKGlsb19odyk7CisKKwljZGV2X2luaXQoJmlsb19ody0+Y2RldiwgJmlsb19mb3BzKTsKKwlpbG9faHctPmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKwlzdGFydCA9IGRldm51bSAqIE1BWF9DQ0I7CisJZXJyb3IgPSBjZGV2X2FkZCgmaWxvX2h3LT5jZGV2LCBNS0RFVihpbG9fbWFqb3IsIHN0YXJ0KSwgTUFYX0NDQik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhZGQgY2RldlxuIik7CisJCWdvdG8gdW5tYXA7CisJfQorCisJZm9yIChtaW5vciA9IDAgOyBtaW5vciA8IE1BWF9DQ0I7IG1pbm9yKyspIHsKKwkJc3RydWN0IGRldmljZSAqZGV2OworCQlkZXYgPSBkZXZpY2VfY3JlYXRlKGlsb19jbGFzcywgJnBkZXYtPmRldiwKKwkJCQkgICAgTUtERVYoaWxvX21ham9yLCBtaW5vciksIE5VTEwsCisJCQkJICAgICJocGlsbyFkJWRjY2IlZCIsIGRldm51bSwgbWlub3IpOworCQlpZiAoSVNfRVJSKGRldikpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgY3JlYXRlIGZpbGVzXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK3VubWFwOgorCWlsb191bm1hcF9kZXZpY2UocGRldiwgaWxvX2h3KTsKK2ZyZWVfcmVnaW9uczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitmcmVlOgorCWtmcmVlKGlsb19odyk7CitvdXQ6CisJaWxvX2h3ZGV2W2Rldm51bV0gPSAwOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlsb19kZXZpY2VzW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ09NUEFRLCAweEIyMDQpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlsb19kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlsb19kcml2ZXIgPSB7CisJLm5hbWUgCSAgPSBJTE9fTkFNRSwKKwkuaWRfdGFibGUgPSBpbG9fZGV2aWNlcywKKwkucHJvYmUgCSAgPSBpbG9fcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoaWxvX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbG9faW5pdCh2b2lkKQoreworCWludCBlcnJvcjsKKwlkZXZfdCBkZXY7CisKKwlpbG9fY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJpTE8iKTsKKwlpZiAoSVNfRVJSKGlsb19jbGFzcykpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKGlsb19jbGFzcyk7CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZGV2LCAwLCBNQVhfT1BFTiwgSUxPX05BTUUpOworCWlmIChlcnJvcikKKwkJZ290byBjbGFzc19kZXN0cm95OworCisJaWxvX21ham9yID0gTUFKT1IoZGV2KTsKKworCWVycm9yID0JcGNpX3JlZ2lzdGVyX2RyaXZlcigmaWxvX2RyaXZlcik7CisJaWYgKGVycm9yKQorCQlnb3RvIGNocl9yZW1vdmU7CisKKwlyZXR1cm4gMDsKK2Nocl9yZW1vdmU6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgTUFYX09QRU4pOworY2xhc3NfZGVzdHJveToKKwljbGFzc19kZXN0cm95KGlsb19jbGFzcyk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaWxvX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlsb19kcml2ZXIpOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihpbG9fbWFqb3IsIDApLCBNQVhfT1BFTik7CisJY2xhc3NfZGVzdHJveShpbG9fY2xhc3MpOworfQorCitNT0RVTEVfVkVSU0lPTigiMC4wNSIpOworTU9EVUxFX0FMSUFTKElMT19OQU1FKTsKK01PRFVMRV9ERVNDUklQVElPTihJTE9fTkFNRSk7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBBbHRvYmVsbGkgPGRhdmlkLmFsdG9iZWxsaUBocC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKK21vZHVsZV9pbml0KGlsb19pbml0KTsKK21vZHVsZV9leGl0KGlsb19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ocGlsby5oIGIvZHJpdmVycy9taXNjL2hwaWxvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4MTIwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9ocGlsby5oCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogbGludXgvZHJpdmVycy9jaGFyL2hwaWxvLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCURhdmlkIEFsdG9iZWxsaSA8ZGF2aWQuYWx0b2JlbGxpQGhwLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fSFBJTE9fSAorI2RlZmluZSBfX0hQSUxPX0gKKworI2RlZmluZSBJTE9fTkFNRSAiaHBpbG8iCisKKy8qIG1heCBudW1iZXIgb2Ygb3BlbiBjaGFubmVsIGNvbnRyb2wgYmxvY2tzIHBlciBkZXZpY2UsIGh3IGxpbWl0ZWQgdG8gMzIgKi8KKyNkZWZpbmUgTUFYX0NDQgkJOAorLyogbWF4IG51bWJlciBvZiBzdXBwb3J0ZWQgZGV2aWNlcyAqLworI2RlZmluZSBNQVhfSUxPX0RFVgkxCisvKiBtYXggbnVtYmVyIG9mIGZpbGVzICovCisjZGVmaW5lIE1BWF9PUEVOCShNQVhfQ0NCICogTUFYX0lMT19ERVYpCisKKy8qCisgKiBQZXIgZGV2aWNlLCB1c2VkIHRvIHRyYWNrIGdsb2JhbCBtZW1vcnkgYWxsb2NhdGlvbnMuCisgKi8KK3N0cnVjdCBpbG9faHdpbmZvIHsKKwkvKiBtbWlvIHJlZ2lzdGVycyBvbiBkZXZpY2UgKi8KKwljaGFyIF9faW9tZW0gKm1taW9fdmFkZHI7CisKKwkvKiBkb29yYmVsbCByZWdpc3RlcnMgb24gZGV2aWNlICovCisJY2hhciBfX2lvbWVtICpkYl92YWRkcjsKKworCS8qIHNoYXJlZCBtZW1vcnkgb24gZGV2aWNlIHVzZWQgZm9yIGNoYW5uZWwgY29udHJvbCBibG9ja3MgKi8KKwljaGFyIF9faW9tZW0gKnJhbV92YWRkcjsKKworCS8qIGZpbGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgY2NiX2RhdGEgKmNjYl9hbGxvY1tNQVhfQ0NCXTsKKworCXN0cnVjdCBwY2lfZGV2ICppbG9fZGV2OworCisJc3BpbmxvY2tfdCBhbGxvY19sb2NrOworCXNwaW5sb2NrX3QgZmlmb19sb2NrOworCisJc3RydWN0IGNkZXYgY2RldjsKK307CisKKy8qIG9mZnNldCBmcm9tIG1taW9fdmFkZHIgKi8KKyNkZWZpbmUgREJfT1VUCQkweEQ0CisvKiBEQl9PVVQgcmVzZXQgYml0ICovCisjZGVmaW5lIERCX1JFU0VUCTI2CisKKy8qCisgKiBDaGFubmVsIGNvbnRyb2wgYmxvY2suIFVzZWQgdG8gbWFuYWdlIGhhcmR3YXJlIHF1ZXVlcy4KKyAqIFRoZSBmb3JtYXQgbXVzdCBtYXRjaCBodydzIHZlcnNpb24uICBUaGUgaHcgY2NiIGlzIDEyOCBieXRlcywKKyAqIGJ1dCB0aGUgY29udGV4dCBhcmVhIHNob3VsZG4ndCBiZSB0b3VjaGVkIGJ5IHRoZSBkcml2ZXIuCisgKi8KKyNkZWZpbmUgSUxPU1dfQ0NCX1NaCTY0CisjZGVmaW5lIElMT0hXX0NDQl9TWiAJMTI4CitzdHJ1Y3QgY2NiIHsKKwl1bmlvbiB7CisJCWNoYXIgKnNlbmRfZmlmb2JhcjsKKwkJdTY0IHBhZGRpbmcxOworCX0gY2NiX3UxOworCXVuaW9uIHsKKwkJY2hhciAqc2VuZF9kZXNjOworCQl1NjQgcGFkZGluZzI7CisJfSBjY2JfdTI7CisJdTY0IHNlbmRfY3RybDsKKworCXVuaW9uIHsKKwkJY2hhciAqcmVjdl9maWZvYmFyOworCQl1NjQgcGFkZGluZzM7CisJfSBjY2JfdTM7CisJdW5pb24geworCQljaGFyICpyZWN2X2Rlc2M7CisJCXU2NCBwYWRkaW5nNDsKKwl9IGNjYl91NDsKKwl1NjQgcmVjdl9jdHJsOworCisJdW5pb24geworCQljaGFyIF9faW9tZW0gKmRiX2Jhc2U7CisJCXU2NCBwYWRkaW5nNTsKKwl9IGNjYl91NTsKKworCXU2NCBjaGFubmVsOworCisJLyogdW51c2VkIGNvbnRleHQgYXJlYSAoNjQgYnl0ZXMpICovCit9OworCisvKiBjY2IgcXVldWUgcGFyYW1ldGVycyAqLworI2RlZmluZSBTRU5EUQkJMQorI2RlZmluZSBSRUNWUSAJCTIKKyNkZWZpbmUgTlJfUUVOVFJZICAgIAk0CisjZGVmaW5lIEwyX1FFTlRSWV9TWiAJMTIKKworLyogY2NiIGN0cmwgYml0ZmllbGRzICovCisjZGVmaW5lIENUUkxfQklUUE9TX0wyU1ogICAgICAgICAgICAgMAorI2RlZmluZSBDVFJMX0JJVFBPU19GSUZPSU5ERVhNQVNLICAgIDQKKyNkZWZpbmUgQ1RSTF9CSVRQT1NfREVTQ0xJTUlUICAgICAgICAxOAorI2RlZmluZSBDVFJMX0JJVFBPU19BICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIENUUkxfQklUUE9TX0cgICAgICAgICAgICAgICAgMzEKKworLyogY2NiIGRvb3JiZWxsIG1hY3JvcyAqLworI2RlZmluZSBMMl9EQl9TSVpFCQkxNAorI2RlZmluZSBPTkVfREJfU0laRQkJKDEgPDwgTDJfREJfU0laRSkKKworLyoKKyAqIFBlciBmZCBzdHJ1Y3R1cmUgdXNlZCB0byB0cmFjayB0aGUgY2NiIGFsbG9jYXRlZCB0byB0aGF0IGRldiBmaWxlLgorICovCitzdHJ1Y3QgY2NiX2RhdGEgeworCS8qIHNvZnR3YXJlIHZlcnNpb24gb2YgY2NiLCB1c2luZyB2aXJ0dWFsIGFkZHJzICovCisJc3RydWN0IGNjYiAgZHJpdmVyX2NjYjsKKworCS8qIGhhcmR3YXJlIHZlcnNpb24gb2YgY2NiLCB1c2luZyBwaHlzaWNhbCBhZGRycyAqLworCXN0cnVjdCBjY2IgIGlsb19jY2I7CisKKwkvKiBoYXJkd2FyZSBjY2IgaXMgd3JpdHRlbiB0byB0aGlzIHNoYXJlZCBtYXBwZWQgZGV2aWNlIG1lbW9yeSAqLworCXN0cnVjdCBjY2IgX19pb21lbSAqbWFwcGVkX2NjYjsKKworCS8qIGRtYSdhYmxlIG1lbW9yeSB1c2VkIGZvciBzZW5kL3JlY3YgcXVldWVzICovCisJdm9pZCAgICAgICAqZG1hX3ZhOworCWRtYV9hZGRyX3QgIGRtYV9wYTsKKwlzaXplX3QgICAgICBkbWFfc2l6ZTsKKworCS8qIHBvaW50ZXIgdG8gaGFyZHdhcmUgZGV2aWNlIGluZm8gKi8KKwlzdHJ1Y3QgaWxvX2h3aW5mbyAqaWxvX2h3OworCisJLyogdXNhZ2UgY291bnQsIHRvIGFsbG93IGZvciBzaGFyZWQgY2NiJ3MgKi8KKwlpbnQJICAgIGNjYl9jbnQ7CisKKwkvKiBvcGVuIHdhbnRlZCBleGNsdXNpdmUgYWNjZXNzIHRvIHRoaXMgY2NiICovCisJaW50CSAgICBjY2JfZXhjbDsKK307CisKKy8qCisgKiBGSUZPIHF1ZXVlIHN0cnVjdHVyZSwgc2hhcmVkIHdpdGggaHcuCisgKi8KKyNkZWZpbmUgSUxPX1NUQVJUX0FMSUdOCTQwOTYKKyNkZWZpbmUgSUxPX0NBQ0hFX1NaIAkgMTI4CitzdHJ1Y3QgZmlmbyB7CisgICAgdTY0IG5yZW50czsJLyogdXNlciByZXF1ZXN0ZWQgbnVtYmVyIG9mIGZpZm8gZW50cmllcyAqLworICAgIHU2NCBpbWFzazsgIC8qIG1hc2sgdG8gZXh0cmFjdCB2YWxpZCBmaWZvIGluZGV4ICovCisgICAgdTY0IG1lcmdlOwkvKiAgTy9DIGJpdHMgdG8gbWVyZ2UgaW4gZHVyaW5nIGVucXVldWUgb3BlcmF0aW9uICovCisgICAgdTY0IHJlc2V0OwkvKiBzZXQgdG8gbm9uLXplcm8gd2hlbiB0aGUgdGFyZ2V0IGRldmljZSByZXNldHMgKi8KKyAgICB1OCAgcGFkXzBbSUxPX0NBQ0hFX1NaIC0gKHNpemVvZih1NjQpICogNCldOworCisgICAgdTY0IGhlYWQ7CisgICAgdTggIHBhZF8xW0lMT19DQUNIRV9TWiAtIChzaXplb2YodTY0KSldOworCisgICAgdTY0IHRhaWw7CisgICAgdTggIHBhZF8yW0lMT19DQUNIRV9TWiAtIChzaXplb2YodTY0KSldOworCisgICAgdTY0IGZpZm9iYXJbMV07Cit9OworCisvKiBjb252ZXJ0IGJldHdlZW4gc3RydWN0IGZpZm8sIGFuZCB0aGUgZmlmb2Jhciwgd2hpY2ggaXMgc2F2ZWQgaW4gdGhlIGNjYiAqLworI2RlZmluZSBGSUZPSEFORExFU0laRSAoc2l6ZW9mKHN0cnVjdCBmaWZvKSAtIHNpemVvZih1NjQpKQorI2RlZmluZSBGSUZPQkFSVE9IQU5ETEUoX2ZpZm8pIFwKKwkoKHN0cnVjdCBmaWZvICopKCgoY2hhciAqKShfZmlmbykpIC0gRklGT0hBTkRMRVNJWkUpKQorCisvKiB0aGUgbnVtYmVyIG9mIHF3b3JkcyB0byBjb25zdW1lIGZyb20gdGhlIGVudHJ5IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgRU5UUllfQklUUE9TX1FXT1JEUyAgICAgIDAKKy8qIGRlc2NyaXB0b3IgaW5kZXggbnVtYmVyICh3aXRoaW4gYSBzcGVjaWZpZWQgcXVldWUpICovCisjZGVmaW5lIEVOVFJZX0JJVFBPU19ERVNDUklQVE9SICAxMAorLyogc3RhdGUgYml0LCBmaWZvIGVudHJ5IGNvbnN1bWVkIGJ5IGNvbnN1bWVyICovCisjZGVmaW5lIEVOVFJZX0JJVFBPU19DICAgICAgICAgICAyMgorLyogc3RhdGUgYml0LCBmaWZvIGVudHJ5IGlzIG9jY3VwaWVkICovCisjZGVmaW5lIEVOVFJZX0JJVFBPU19PICAgICAgICAgICAyMworCisjZGVmaW5lIEVOVFJZX0JJVFNfUVdPUkRTICAgICAgICAxMAorI2RlZmluZSBFTlRSWV9CSVRTX0RFU0NSSVBUT1IgICAgMTIKKyNkZWZpbmUgRU5UUllfQklUU19DICAgICAgICAgICAgIDEKKyNkZWZpbmUgRU5UUllfQklUU19PICAgICAgICAgICAgIDEKKyNkZWZpbmUgRU5UUllfQklUU19UT1RBTAlcCisJKEVOVFJZX0JJVFNfQyArIEVOVFJZX0JJVFNfTyArIFwKKwkgRU5UUllfQklUU19RV09SRFMgKyBFTlRSWV9CSVRTX0RFU0NSSVBUT1IpCisKKy8qIGV4dHJhY3QgdmFyaW91cyBlbnRyeSBmaWVsZHMgKi8KKyNkZWZpbmUgRU5UUllfTUFTSyAoKDEgPDwgRU5UUllfQklUU19UT1RBTCkgLSAxKQorI2RlZmluZSBFTlRSWV9NQVNLX0MgKCgoMSA8PCBFTlRSWV9CSVRTX0MpIC0gMSkgPDwgRU5UUllfQklUUE9TX0MpCisjZGVmaW5lIEVOVFJZX01BU0tfTyAoKCgxIDw8IEVOVFJZX0JJVFNfTykgLSAxKSA8PCBFTlRSWV9CSVRQT1NfTykKKyNkZWZpbmUgRU5UUllfTUFTS19RV09SRFMgXAorCSgoKDEgPDwgRU5UUllfQklUU19RV09SRFMpIC0gMSkgPDwgRU5UUllfQklUUE9TX1FXT1JEUykKKyNkZWZpbmUgRU5UUllfTUFTS19ERVNDUklQVE9SIFwKKwkoKCgxIDw8IEVOVFJZX0JJVFNfREVTQ1JJUFRPUikgLSAxKSA8PCBFTlRSWV9CSVRQT1NfREVTQ1JJUFRPUikKKworI2RlZmluZSBFTlRSWV9NQVNLX05PU1RBVEUgKEVOVFJZX01BU0sgPj4gKEVOVFJZX0JJVFNfQyArIEVOVFJZX0JJVFNfTykpCisKKyNlbmRpZiAvKiBfX0hQSUxPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMgYi9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCmluZGV4IDE4NjE2MjQuLjRjZTNiZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKKysrIGIvZHJpdmVycy9taXNjL3BoYW50b20uYwpAQCAtMzk5LDggKzM5OSw5IEBACiAJCWdvdG8gZXJyX2lycTsKIAl9CiAKLQlpZiAoSVNfRVJSKGRldmljZV9jcmVhdGUocGhhbnRvbV9jbGFzcywgJnBkZXYtPmRldiwgTUtERVYocGhhbnRvbV9tYWpvciwKLQkJCW1pbm9yKSwgInBoYW50b20ldSIsIG1pbm9yKSkpCisJaWYgKElTX0VSUihkZXZpY2VfY3JlYXRlX2RydmRhdGEocGhhbnRvbV9jbGFzcywgJnBkZXYtPmRldiwKKwkJCQkJIE1LREVWKHBoYW50b21fbWFqb3IsIG1pbm9yKSwKKwkJCQkJIE5VTEwsICJwaGFudG9tJXUiLCBtaW5vcikpKQogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBjcmVhdGUgZGV2aWNlXG4iKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwaHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfbWFpbi5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfbWFpbi5jCmluZGV4IDA4MjU2ZWQuLjU3OWIwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX21haW4uYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19tYWluLmMKQEAgLTIyOSwxMCArMjI5LDExIEBACiAJaW50IGxhc3RfSVJRX2NvdW50ID0gMDsKIAlpbnQgbmV3X0lSUV9jb3VudDsKIAlpbnQgZm9yY2VfSVJRID0gMDsKKwljcHVtYXNrX29mX2NwdV9wdHIoY3B1bWFzaywgWFBDX0hCX0NIRUNLX0NQVSk7CiAKIAkvKiB0aGlzIHRocmVhZCB3YXMgbWFya2VkIGFjdGl2ZSBieSB4cGNfaGJfaW5pdCgpICovCiAKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KFhQQ19IQl9DSEVDS19DUFUpKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrKTsKIAogCS8qIHNldCBvdXIgaGVhcnRiZWF0aW5nIHRvIG90aGVyIHBhcnRpdGlvbnMgaW50byBtb3Rpb24gKi8KIAl4cGNfaGJfY2hlY2tfdGltZW91dCA9IGppZmZpZXMgKyAoeHBjX2hiX2NoZWNrX2ludGVydmFsICogSFopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jIGIvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCmluZGV4IGQ2YjliNDguLmEwNjdmZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKQEAgLTIxLDEzICsyMSwxNyBAQAogI2RlZmluZSBSRVNVTFRfVU5TVVBfSE9TVAkyCiAjZGVmaW5lIFJFU1VMVF9VTlNVUF9DQVJECTMKIAotI2RlZmluZSBCVUZGRVJfU0laRQkoUEFHRV9TSVpFICogNCkKKyNkZWZpbmUgQlVGRkVSX09SREVSCQkyCisjZGVmaW5lIEJVRkZFUl9TSVpFCQkoUEFHRV9TSVpFIDw8IEJVRkZFUl9PUkRFUikKIAogc3RydWN0IG1tY190ZXN0X2NhcmQgewogCXN0cnVjdCBtbWNfY2FyZAkqY2FyZDsKIAogCXU4CQlzY3JhdGNoW0JVRkZFUl9TSVpFXTsKIAl1OAkJKmJ1ZmZlcjsKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCXN0cnVjdCBwYWdlCSpoaWdobWVtOworI2VuZGlmCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM4NCwxNCArMzg4LDE2IEBACiAJaW50IHJldCwgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJQlVHX09OKGJsb2NrcyAqIGJsa3N6ID4gQlVGRkVSX1NJWkUpOworCiAJaWYgKHdyaXRlKSB7CiAJCWZvciAoaSA9IDA7aSA8IGJsb2NrcyAqIGJsa3N6O2krKykKIAkJCXRlc3QtPnNjcmF0Y2hbaV0gPSBpOwogCX0gZWxzZSB7Ci0JCW1lbXNldCh0ZXN0LT5zY3JhdGNoLCAwLCBCVUZGRVJfU0laRSk7CisJCW1lbXNldCh0ZXN0LT5zY3JhdGNoLCAwLCBibG9ja3MgKiBibGtzeik7CiAJfQogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlzZ19jb3B5X2Zyb21fYnVmZmVyKHNnLCBzZ19sZW4sIHRlc3QtPnNjcmF0Y2gsIEJVRkZFUl9TSVpFKTsKKwlzZ19jb3B5X2Zyb21fYnVmZmVyKHNnLCBzZ19sZW4sIHRlc3QtPnNjcmF0Y2gsIGJsb2NrcyAqIGJsa3N6KTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXQgPSBtbWNfdGVzdF9zZXRfYmxrc2l6ZSh0ZXN0LCBibGtzeik7CkBAIC00MzgsNyArNDQ0LDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJc2dfY29weV90b19idWZmZXIoc2csIHNnX2xlbiwgdGVzdC0+c2NyYXRjaCwgQlVGRkVSX1NJWkUpOworCQlzZ19jb3B5X3RvX2J1ZmZlcihzZywgc2dfbGVuLCB0ZXN0LT5zY3JhdGNoLCBibG9ja3MgKiBibGtzeik7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJZm9yIChpID0gMDtpIDwgYmxvY2tzICogYmxrc3o7aSsrKSB7CiAJCQlpZiAodGVzdC0+c2NyYXRjaFtpXSAhPSAodTgpaSkKQEAgLTc5OSw2ICs4MDUsMTU3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbW1jX3Rlc3RfYmlnc2dfd3JpdGUoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlpZiAodGVzdC0+Y2FyZC0+aG9zdC0+bWF4X2Jsa19jb3VudCA9PSAxKQorCQlyZXR1cm4gUkVTVUxUX1VOU1VQX0hPU1Q7CisKKwlzaXplID0gUEFHRV9TSVpFICogMjsKKwlzaXplID0gbWluKHNpemUsIHRlc3QtPmNhcmQtPmhvc3QtPm1heF9yZXFfc2l6ZSk7CisJc2l6ZSA9IG1pbihzaXplLCB0ZXN0LT5jYXJkLT5ob3N0LT5tYXhfc2VnX3NpemUpOworCXNpemUgPSBtaW4oc2l6ZSwgdGVzdC0+Y2FyZC0+aG9zdC0+bWF4X2Jsa19jb3VudCAqIDUxMik7CisKKwltZW1zZXQodGVzdC0+YnVmZmVyLCAwLCBCVUZGRVJfU0laRSk7CisKKwlpZiAoc2l6ZSA8IDEwMjQpCisJCXJldHVybiBSRVNVTFRfVU5TVVBfSE9TVDsKKworCXNnX2luaXRfdGFibGUoJnNnLCAxKTsKKwlzZ19pbml0X29uZSgmc2csIHRlc3QtPmJ1ZmZlciwgQlVGRkVSX1NJWkUpOworCisJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCBzaXplLzUxMiwgNTEyLCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW1jX3Rlc3RfYmlnc2dfcmVhZChzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCkKK3sKKwlpbnQgcmV0LCBpOworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCWlmICh0ZXN0LT5jYXJkLT5ob3N0LT5tYXhfYmxrX2NvdW50ID09IDEpCisJCXJldHVybiBSRVNVTFRfVU5TVVBfSE9TVDsKKworCXNpemUgPSBQQUdFX1NJWkUgKiAyOworCXNpemUgPSBtaW4oc2l6ZSwgdGVzdC0+Y2FyZC0+aG9zdC0+bWF4X3JlcV9zaXplKTsKKwlzaXplID0gbWluKHNpemUsIHRlc3QtPmNhcmQtPmhvc3QtPm1heF9zZWdfc2l6ZSk7CisJc2l6ZSA9IG1pbihzaXplLCB0ZXN0LT5jYXJkLT5ob3N0LT5tYXhfYmxrX2NvdW50ICogNTEyKTsKKworCWlmIChzaXplIDwgMTAyNCkKKwkJcmV0dXJuIFJFU1VMVF9VTlNVUF9IT1NUOworCisJbWVtc2V0KHRlc3QtPmJ1ZmZlciwgMHhDRCwgQlVGRkVSX1NJWkUpOworCisJc2dfaW5pdF90YWJsZSgmc2csIDEpOworCXNnX2luaXRfb25lKCZzZywgdGVzdC0+YnVmZmVyLCBCVUZGRVJfU0laRSk7CisJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCBzaXplLzUxMiwgNTEyLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogbW1jX3Rlc3RfdHJhbnNmZXIoKSBkb2Vzbid0IGNoZWNrIGZvciByZWFkIG92ZXJmbG93cyAqLworCWZvciAoaSA9IHNpemU7aSA8IEJVRkZFUl9TSVpFO2krKykgeworCQlpZiAodGVzdC0+YnVmZmVyW2ldICE9IDB4Q0QpCisJCQlyZXR1cm4gUkVTVUxUX0ZBSUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCitzdGF0aWMgaW50IG1tY190ZXN0X3dyaXRlX2hpZ2goc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2dfc2V0X3BhZ2UoJnNnLCB0ZXN0LT5oaWdobWVtLCA1MTIsIDApOworCisJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCAxLCA1MTIsIDEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbWNfdGVzdF9yZWFkX2hpZ2goc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2dfc2V0X3BhZ2UoJnNnLCB0ZXN0LT5oaWdobWVtLCA1MTIsIDApOworCisJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCAxLCA1MTIsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbWNfdGVzdF9tdWx0aV93cml0ZV9oaWdoKHN0cnVjdCBtbWNfdGVzdF9jYXJkICp0ZXN0KQoreworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJaWYgKHRlc3QtPmNhcmQtPmhvc3QtPm1heF9ibGtfY291bnQgPT0gMSkKKwkJcmV0dXJuIFJFU1VMVF9VTlNVUF9IT1NUOworCisJc2l6ZSA9IFBBR0VfU0laRSAqIDI7CisJc2l6ZSA9IG1pbihzaXplLCB0ZXN0LT5jYXJkLT5ob3N0LT5tYXhfcmVxX3NpemUpOworCXNpemUgPSBtaW4oc2l6ZSwgdGVzdC0+Y2FyZC0+aG9zdC0+bWF4X3NlZ19zaXplKTsKKwlzaXplID0gbWluKHNpemUsIHRlc3QtPmNhcmQtPmhvc3QtPm1heF9ibGtfY291bnQgKiA1MTIpOworCisJaWYgKHNpemUgPCAxMDI0KQorCQlyZXR1cm4gUkVTVUxUX1VOU1VQX0hPU1Q7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2dfc2V0X3BhZ2UoJnNnLCB0ZXN0LT5oaWdobWVtLCBzaXplLCAwKTsKKworCXJldCA9IG1tY190ZXN0X3RyYW5zZmVyKHRlc3QsICZzZywgMSwgMCwgc2l6ZS81MTIsIDUxMiwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tY190ZXN0X211bHRpX3JlYWRfaGlnaChzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCWlmICh0ZXN0LT5jYXJkLT5ob3N0LT5tYXhfYmxrX2NvdW50ID09IDEpCisJCXJldHVybiBSRVNVTFRfVU5TVVBfSE9TVDsKKworCXNpemUgPSBQQUdFX1NJWkUgKiAyOworCXNpemUgPSBtaW4oc2l6ZSwgdGVzdC0+Y2FyZC0+aG9zdC0+bWF4X3JlcV9zaXplKTsKKwlzaXplID0gbWluKHNpemUsIHRlc3QtPmNhcmQtPmhvc3QtPm1heF9zZWdfc2l6ZSk7CisJc2l6ZSA9IG1pbihzaXplLCB0ZXN0LT5jYXJkLT5ob3N0LT5tYXhfYmxrX2NvdW50ICogNTEyKTsKKworCWlmIChzaXplIDwgMTAyNCkKKwkJcmV0dXJuIFJFU1VMVF9VTlNVUF9IT1NUOworCisJc2dfaW5pdF90YWJsZSgmc2csIDEpOworCXNnX3NldF9wYWdlKCZzZywgdGVzdC0+aGlnaG1lbSwgc2l6ZSwgMCk7CisKKwlyZXQgPSBtbWNfdGVzdF90cmFuc2Zlcih0ZXN0LCAmc2csIDEsIDAsIHNpemUvNTEyLCA1MTIsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19ISUdITUVNICovCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX3Rlc3RfY2FzZSBtbWNfdGVzdF9jYXNlc1tdID0gewogCXsKIAkJLm5hbWUgPSAiQmFzaWMgd3JpdGUgKG5vIGRhdGEgdmVyaWZpY2F0aW9uKSIsCkBAIC05MTMsNiArMTA3MCw1MyBAQAogCQkubmFtZSA9ICJDb3JyZWN0IHhmZXJfc2l6ZSBhdCByZWFkIChtaWR3YXkgZmFpbHVyZSkiLAogCQkucnVuID0gbW1jX3Rlc3RfbXVsdGlfeGZlcnNpemVfcmVhZCwKIAl9LAorCisJeworCQkubmFtZSA9ICJPdmVyLXNpemVkIFNHIGxpc3Qgd3JpdGUiLAorCQkucHJlcGFyZSA9IG1tY190ZXN0X3ByZXBhcmVfd3JpdGUsCisJCS5ydW4gPSBtbWNfdGVzdF9iaWdzZ193cml0ZSwKKwkJLmNsZWFudXAgPSBtbWNfdGVzdF9jbGVhbnVwLAorCX0sCisKKwl7CisJCS5uYW1lID0gIk92ZXItc2l6ZWQgU0cgbGlzdCByZWFkIiwKKwkJLnByZXBhcmUgPSBtbWNfdGVzdF9wcmVwYXJlX3JlYWQsCisJCS5ydW4gPSBtbWNfdGVzdF9iaWdzZ19yZWFkLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2NsZWFudXAsCisJfSwKKworI2lmZGVmIENPTkZJR19ISUdITUVNCisKKwl7CisJCS5uYW1lID0gIkhpZ2htZW0gd3JpdGUiLAorCQkucHJlcGFyZSA9IG1tY190ZXN0X3ByZXBhcmVfd3JpdGUsCisJCS5ydW4gPSBtbWNfdGVzdF93cml0ZV9oaWdoLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2NsZWFudXAsCisJfSwKKworCXsKKwkJLm5hbWUgPSAiSGlnaG1lbSByZWFkIiwKKwkJLnByZXBhcmUgPSBtbWNfdGVzdF9wcmVwYXJlX3JlYWQsCisJCS5ydW4gPSBtbWNfdGVzdF9yZWFkX2hpZ2gsCisJCS5jbGVhbnVwID0gbW1jX3Rlc3RfY2xlYW51cCwKKwl9LAorCisJeworCQkubmFtZSA9ICJNdWx0aS1ibG9jayBoaWdobWVtIHdyaXRlIiwKKwkJLnByZXBhcmUgPSBtbWNfdGVzdF9wcmVwYXJlX3dyaXRlLAorCQkucnVuID0gbW1jX3Rlc3RfbXVsdGlfd3JpdGVfaGlnaCwKKwkJLmNsZWFudXAgPSBtbWNfdGVzdF9jbGVhbnVwLAorCX0sCisKKwl7CisJCS5uYW1lID0gIk11bHRpLWJsb2NrIGhpZ2htZW0gcmVhZCIsCisJCS5wcmVwYXJlID0gbW1jX3Rlc3RfcHJlcGFyZV9yZWFkLAorCQkucnVuID0gbW1jX3Rlc3RfbXVsdGlfcmVhZF9oaWdoLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2NsZWFudXAsCisJfSwKKworI2VuZGlmIC8qIENPTkZJR19ISUdITUVNICovCisKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggbW1jX3Rlc3RfbG9jazsKQEAgLTEwMTQsMTIgKzEyMTgsMjMgQEAKIAl0ZXN0LT5jYXJkID0gY2FyZDsKIAogCXRlc3QtPmJ1ZmZlciA9IGt6YWxsb2MoQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworI2lmZGVmIENPTkZJR19ISUdITUVNCisJdGVzdC0+aGlnaG1lbSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBCVUZGRVJfT1JERVIpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCWlmICh0ZXN0LT5idWZmZXIgJiYgdGVzdC0+aGlnaG1lbSkgeworI2Vsc2UKIAlpZiAodGVzdC0+YnVmZmVyKSB7CisjZW5kaWYKIAkJbXV0ZXhfbG9jaygmbW1jX3Rlc3RfbG9jayk7CiAJCW1tY190ZXN0X3J1bih0ZXN0LCB0ZXN0Y2FzZSk7CiAJCW11dGV4X3VubG9jaygmbW1jX3Rlc3RfbG9jayk7CiAJfQogCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlfX2ZyZWVfcGFnZXModGVzdC0+aGlnaG1lbSwgQlVGRkVSX09SREVSKTsKKyNlbmRpZgogCWtmcmVlKHRlc3QtPmJ1ZmZlcik7CiAJa2ZyZWUodGVzdCk7CiAKQEAgLTEwNDEsNiArMTI1Niw4IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCWRldl9pbmZvKCZjYXJkLT5kZXYsICJDYXJkIGNsYWltZWQgZm9yIHRlc3RpbmcuXG4iKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKaW5kZXggNzczMWRkZS4uM2RlZTk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIGFsbG9jYXRlICIKIAkJCQkiYm91bmNlIGJ1ZmZlclxuIiwgbW1jX2NhcmRfbmFtZShjYXJkKSk7CiAJCX0gZWxzZSB7Ci0JCQlibGtfcXVldWVfYm91bmNlX2xpbWl0KG1xLT5xdWV1ZSwgQkxLX0JPVU5DRV9ISUdIKTsKKwkJCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQobXEtPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CiAJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobXEtPnF1ZXVlLCBib3VuY2VzeiAvIDUxMik7CiAJCQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMobXEtPnF1ZXVlLCBib3VuY2VzeiAvIDUxMik7CiAJCQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKG1xLT5xdWV1ZSwgYm91bmNlc3ogLyA1MTIpOwpAQCAtMjkwLDU1ICsyOTAsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlfc2coc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHVuc2lnbmVkIGludCBkc3RfbGVuLAotCXN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjX2xlbikKLXsKLQl1bnNpZ25lZCBpbnQgY2h1bms7Ci0JY2hhciAqZHN0X2J1ZiwgKnNyY19idWY7Ci0JdW5zaWduZWQgaW50IGRzdF9zaXplLCBzcmNfc2l6ZTsKLQotCWRzdF9idWYgPSBOVUxMOwotCXNyY19idWYgPSBOVUxMOwotCWRzdF9zaXplID0gMDsKLQlzcmNfc2l6ZSA9IDA7Ci0KLQl3aGlsZSAoc3JjX2xlbikgewotCQlCVUdfT04oZHN0X2xlbiA9PSAwKTsKLQotCQlpZiAoZHN0X3NpemUgPT0gMCkgewotCQkJZHN0X2J1ZiA9IHNnX3ZpcnQoZHN0KTsKLQkJCWRzdF9zaXplID0gZHN0LT5sZW5ndGg7Ci0JCX0KLQotCQlpZiAoc3JjX3NpemUgPT0gMCkgewotCQkJc3JjX2J1ZiA9IHNnX3ZpcnQoc3JjKTsKLQkJCXNyY19zaXplID0gc3JjLT5sZW5ndGg7Ci0JCX0KLQotCQljaHVuayA9IG1pbihkc3Rfc2l6ZSwgc3JjX3NpemUpOwotCi0JCW1lbWNweShkc3RfYnVmLCBzcmNfYnVmLCBjaHVuayk7Ci0KLQkJZHN0X2J1ZiArPSBjaHVuazsKLQkJc3JjX2J1ZiArPSBjaHVuazsKLQkJZHN0X3NpemUgLT0gY2h1bms7Ci0JCXNyY19zaXplIC09IGNodW5rOwotCi0JCWlmIChkc3Rfc2l6ZSA9PSAwKSB7Ci0JCQlkc3QrKzsKLQkJCWRzdF9sZW4tLTsKLQkJfQotCi0JCWlmIChzcmNfc2l6ZSA9PSAwKSB7Ci0JCQlzcmMrKzsKLQkJCXNyY19sZW4tLTsKLQkJfQotCX0KLX0KLQorLyoKKyAqIFByZXBhcmUgdGhlIHNnIGxpc3QocykgdG8gYmUgaGFuZGVkIG9mIHRvIHRoZSBob3N0IGRyaXZlcgorICovCiB1bnNpZ25lZCBpbnQgbW1jX3F1ZXVlX21hcF9zZyhzdHJ1Y3QgbW1jX3F1ZXVlICptcSkKIHsKIAl1bnNpZ25lZCBpbnQgc2dfbGVuOworCXNpemVfdCBidWZsZW47CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaTsKIAogCWlmICghbXEtPmJvdW5jZV9idWYpCiAJCXJldHVybiBibGtfcnFfbWFwX3NnKG1xLT5xdWV1ZSwgbXEtPnJlcSwgbXEtPnNnKTsKQEAgLTM0OSw0NyArMzA5LDUyIEBACiAKIAltcS0+Ym91bmNlX3NnX2xlbiA9IHNnX2xlbjsKIAotCS8qCi0JICogU2hvcnRjdXQgaW4gdGhlIGV2ZW50IHdlIG9ubHkgZ2V0IGEgc2luZ2xlIGVudHJ5LgotCSAqLwotCWlmIChzZ19sZW4gPT0gMSkgewotCQltZW1jcHkobXEtPnNnLCBtcS0+Ym91bmNlX3NnLCBzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSk7Ci0JCXJldHVybiAxOwotCX0KKwlidWZsZW4gPSAwOworCWZvcl9lYWNoX3NnKG1xLT5ib3VuY2Vfc2csIHNnLCBzZ19sZW4sIGkpCisJCWJ1ZmxlbiArPSBzZy0+bGVuZ3RoOwogCi0Jc2dfaW5pdF9vbmUobXEtPnNnLCBtcS0+Ym91bmNlX2J1ZiwgMCk7Ci0KLQl3aGlsZSAoc2dfbGVuKSB7Ci0JCW1xLT5zZ1swXS5sZW5ndGggKz0gbXEtPmJvdW5jZV9zZ1tzZ19sZW4gLSAxXS5sZW5ndGg7Ci0JCXNnX2xlbi0tOwotCX0KKwlzZ19pbml0X29uZShtcS0+c2csIG1xLT5ib3VuY2VfYnVmLCBidWZsZW4pOwogCiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBJZiB3cml0aW5nLCBib3VuY2UgdGhlIGRhdGEgdG8gdGhlIGJ1ZmZlciBiZWZvcmUgdGhlIHJlcXVlc3QKKyAqIGlzIHNlbnQgdG8gdGhlIGhvc3QgZHJpdmVyCisgKi8KIHZvaWQgbW1jX3F1ZXVlX2JvdW5jZV9wcmUoc3RydWN0IG1tY19xdWV1ZSAqbXEpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmICghbXEtPmJvdW5jZV9idWYpCiAJCXJldHVybjsKIAotCWlmIChtcS0+Ym91bmNlX3NnX2xlbiA9PSAxKQotCQlyZXR1cm47CiAJaWYgKHJxX2RhdGFfZGlyKG1xLT5yZXEpICE9IFdSSVRFKQogCQlyZXR1cm47CiAKLQljb3B5X3NnKG1xLT5zZywgMSwgbXEtPmJvdW5jZV9zZywgbXEtPmJvdW5jZV9zZ19sZW4pOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzZ19jb3B5X3RvX2J1ZmZlcihtcS0+Ym91bmNlX3NnLCBtcS0+Ym91bmNlX3NnX2xlbiwKKwkJbXEtPmJvdW5jZV9idWYsIG1xLT5zZ1swXS5sZW5ndGgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorLyoKKyAqIElmIHJlYWRpbmcsIGJvdW5jZSB0aGUgZGF0YSBmcm9tIHRoZSBidWZmZXIgYWZ0ZXIgdGhlIHJlcXVlc3QKKyAqIGhhcyBiZWVuIGhhbmRsZWQgYnkgdGhlIGhvc3QgZHJpdmVyCisgKi8KIHZvaWQgbW1jX3F1ZXVlX2JvdW5jZV9wb3N0KHN0cnVjdCBtbWNfcXVldWUgKm1xKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoIW1xLT5ib3VuY2VfYnVmKQogCQlyZXR1cm47CiAKLQlpZiAobXEtPmJvdW5jZV9zZ19sZW4gPT0gMSkKLQkJcmV0dXJuOwogCWlmIChycV9kYXRhX2RpcihtcS0+cmVxKSAhPSBSRUFEKQogCQlyZXR1cm47CiAKLQljb3B5X3NnKG1xLT5ib3VuY2Vfc2csIG1xLT5ib3VuY2Vfc2dfbGVuLCBtcS0+c2csIDEpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzZ19jb3B5X2Zyb21fYnVmZmVyKG1xLT5ib3VuY2Vfc2csIG1xLT5ib3VuY2Vfc2dfbGVuLAorCQltcS0+Ym91bmNlX2J1ZiwgbXEtPnNnWzBdLmxlbmd0aCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCmluZGV4IDNmMTVlYjIuLjk5YjIwOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCkBAIC0xMDQzLDcgKzEwNDMsNyBAQAogCQlnb3RvIG91dDY7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKIAogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogTU1DIENvbnRyb2xsZXIgJWQgc2V0IHVwIGF0ICU4LjhYIgogCQkiIChtb2RlPSVzKVxuIiwgcGRldi0+aWQsIGhvc3QtPmlvYmFzZSwKQEAgLTEwODcsMTMgKzEwODcsMTAgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgYXUxeG1tY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdTF4bW1jX2hvc3QgKmhvc3Q7CisJc3RydWN0IGF1MXhtbWNfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JaWYgKG1tYykgewotCQlob3N0ICA9IG1tY19wcml2KG1tYyk7Ci0KLQkJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CisJaWYgKGhvc3QpIHsKKwkJbW1jX3JlbW92ZV9ob3N0KGhvc3QtPm1tYyk7CiAKICNpZmRlZiBDT05GSUdfTEVEU19DTEFTUwogCQlpZiAoaG9zdC0+cGxhdGRhdGEgJiYgaG9zdC0+cGxhdGRhdGEtPmxlZCkKQEAgLTExMDEsOCArMTA5OCw4IEBACiAjZW5kaWYKIAogCQlpZiAoaG9zdC0+cGxhdGRhdGEgJiYgaG9zdC0+cGxhdGRhdGEtPmNkX3NldHVwICYmCi0JCSAgICAhKG1tYy0+Y2FwcyAmIE1NQ19DQVBfTkVFRFNfUE9MTCkpCi0JCQlob3N0LT5wbGF0ZGF0YS0+Y2Rfc2V0dXAobW1jLCAwKTsKKwkJICAgICEoaG9zdC0+bW1jLT5jYXBzICYgTU1DX0NBUF9ORUVEU19QT0xMKSkKKwkJCWhvc3QtPnBsYXRkYXRhLT5jZF9zZXR1cChob3N0LT5tbWMsIDApOwogCiAJCWF1X3dyaXRlbCgwLCBIT1NUX0VOQUJMRShob3N0KSk7CiAJCWF1X3dyaXRlbCgwLCBIT1NUX0NPTkZJRyhob3N0KSk7CkBAIC0xMTIyLDE2ICsxMTE5LDQ5IEBACiAJCXJlbGVhc2VfcmVzb3VyY2UoaG9zdC0+aW9hcmVhKTsKIAkJa2ZyZWUoaG9zdC0+aW9hcmVhKTsKIAotCQltbWNfZnJlZV9ob3N0KG1tYyk7CisJCW1tY19mcmVlX2hvc3QoaG9zdC0+bW1jKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJfQogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGF1MXhtbWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGF1MXhtbWNfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KGhvc3QtPm1tYywgc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlhdV93cml0ZWwoMCwgSE9TVF9DT05GSUcyKGhvc3QpKTsKKwlhdV93cml0ZWwoMCwgSE9TVF9DT05GSUcoaG9zdCkpOworCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBIT1NUX1NUQVRVUyhob3N0KSk7CisJYXVfd3JpdGVsKDAsIEhPU1RfRU5BQkxFKGhvc3QpKTsKKwlhdV9zeW5jKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTF4bW1jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdTF4bW1jX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWF1MXhtbWNfcmVzZXRfY29udHJvbGxlcihob3N0KTsKKworCXJldHVybiBtbWNfcmVzdW1lX2hvc3QoaG9zdC0+bW1jKTsKK30KKyNlbHNlCisjZGVmaW5lIGF1MXhtbWNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGF1MXhtbWNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTF4bW1jX2RyaXZlciA9IHsKIAkucHJvYmUgICAgICAgICA9IGF1MXhtbWNfcHJvYmUsCiAJLnJlbW92ZSAgICAgICAgPSBhdTF4bW1jX3JlbW92ZSwKLQkuc3VzcGVuZCAgICAgICA9IE5VTEwsCi0JLnJlc3VtZSAgICAgICAgPSBOVUxMLAorCS5zdXNwZW5kICAgICAgID0gYXUxeG1tY19zdXNwZW5kLAorCS5yZXN1bWUgICAgICAgID0gYXUxeG1tY19yZXN1bWUsCiAJLmRyaXZlciAgICAgICAgPSB7CiAJCS5uYW1lICA9IERSSVZFUl9OQU1FLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCmluZGV4IGQzOWY1OTcuLmE4ZTE4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJaWYgKGRhbGduKQogCQlEQUxHTiB8PSAoMSA8PCBob3N0LT5kbWEpOwogCWVsc2UKLQkJREFMR04gJj0gKDEgPDwgaG9zdC0+ZG1hKTsKKwkJREFMR04gJj0gfigxIDw8IGhvc3QtPmRtYSk7CiAJRERBRFIoaG9zdC0+ZG1hKSA9IGhvc3QtPnNnX2RtYTsKIAlEQ1NSKGhvc3QtPmRtYSkgPSBEQ1NSX1JVTjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCmluZGV4IDZhMWU0OTkuLmJlNTUwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwpAQCAtMTMzMSwyMSArMTMzMSwzMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHMzY21jaV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdAkqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCWlmIChob3N0LT5pcnFfY2QgPj0gMCkKKwkJZnJlZV9pcnEoaG9zdC0+aXJxX2NkLCBob3N0KTsKKworCW1tY19yZW1vdmVfaG9zdChtbWMpOworCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZleGl0IHMzY21jaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QJCSptbWMgID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHMzY21jaV9ob3N0CSpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCW1tY19yZW1vdmVfaG9zdChtbWMpOworCXMzY21jaV9zaHV0ZG93bihwZGV2KTsKIAotCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CiAJY2xrX3B1dChob3N0LT5jbGspOwogCiAJdGFza2xldF9kaXNhYmxlKCZob3N0LT5waW9fdGFza2xldCk7CiAJczNjMjQxMF9kbWFfZnJlZShTM0NNQ0lfRE1BLCAmczNjbWNpX2RtYV9jbGllbnQpOwogCi0JaWYgKGhvc3QtPmlycV9jZCA+PSAwKQotCQlmcmVlX2lycShob3N0LT5pcnFfY2QsIGhvc3QpOwogCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiAKIAlpb3VubWFwKGhvc3QtPmJhc2UpOwpAQCAtMTM1NSwxNyArMTM2NCwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmVfMjQxMChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQxMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDApOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmVfMjQxMihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQxMl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDEpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmVfMjQ0MChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQ0MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDEpOwogfQpAQCAtMTM5MiwyOSArMTQwMSwzMiBAQAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY21jaV9kcml2ZXJfMjQxMCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY21jaV8yNDEwX2RyaXZlciA9IHsKIAkuZHJpdmVyLm5hbWUJPSAiczNjMjQxMC1zZGkiLAogCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCT0gczNjbWNpX3Byb2JlXzI0MTAsCisJLnByb2JlCQk9IHMzY21jaV8yNDEwX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczNjbWNpX3JlbW92ZSksCisJLnNodXRkb3duCT0gczNjbWNpX3NodXRkb3duLAogCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpX2RyaXZlcl8yNDEyID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpXzI0MTJfZHJpdmVyID0gewogCS5kcml2ZXIubmFtZQk9ICJzM2MyNDEyLXNkaSIsCiAJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJPSBzM2NtY2lfcHJvYmVfMjQxMiwKKwkucHJvYmUJCT0gczNjbWNpXzI0MTJfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NtY2lfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBzM2NtY2lfc2h1dGRvd24sCiAJLnN1c3BlbmQJPSBzM2NtY2lfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzY21jaV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NtY2lfZHJpdmVyXzI0NDAgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NtY2lfMjQ0MF9kcml2ZXIgPSB7CiAJLmRyaXZlci5uYW1lCT0gInMzYzI0NDAtc2RpIiwKIAkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQk9IHMzY21jaV9wcm9iZV8yNDQwLAorCS5wcm9iZQkJPSBzM2NtY2lfMjQ0MF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHMzY21jaV9yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHMzY21jaV9zaHV0ZG93biwKIAkuc3VzcGVuZAk9IHMzY21jaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjbWNpX3Jlc3VtZSwKIH07CkBAIC0xNDIyLDE3ICsxNDM0LDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHMzY21jaV9pbml0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NtY2lfZHJpdmVyXzI0MTApOwotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpX2RyaXZlcl8yNDEyKTsKLQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY21jaV9kcml2ZXJfMjQ0MCk7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NtY2lfMjQxMF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpXzI0MTJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY21jaV8yNDQwX2RyaXZlcik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzM2NtY2lfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfZHJpdmVyXzI0MTApOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfZHJpdmVyXzI0MTIpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfZHJpdmVyXzI0NDApOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQxMF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQxMl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQ0MF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzM2NtY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggMTc3MDFjMy4uYzNhNWRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtMTczLDExOSArMTczLDk1IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGlubGluZSBjaGFyKiBzZGhjaV9zZ190b19idWZmZXIoc3RydWN0IHNkaGNpX2hvc3QqIGhvc3QpCi17Ci0JcmV0dXJuIHNnX3ZpcnQoaG9zdC0+Y3VyX3NnKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc2RoY2lfbmV4dF9zZyhzdHJ1Y3Qgc2RoY2lfaG9zdCogaG9zdCkKLXsKLQkvKgotCSAqIFNraXAgdG8gbmV4dCBTRyBlbnRyeS4KLQkgKi8KLQlob3N0LT5jdXJfc2crKzsKLQlob3N0LT5udW1fc2ctLTsKLQotCS8qCi0JICogQW55IGVudHJpZXMgbGVmdD8KLQkgKi8KLQlpZiAoaG9zdC0+bnVtX3NnID4gMCkgewotCQlob3N0LT5vZmZzZXQgPSAwOwotCQlob3N0LT5yZW1haW4gPSBob3N0LT5jdXJfc2ctPmxlbmd0aDsKLQl9Ci0KLQlyZXR1cm4gaG9zdC0+bnVtX3NnOwotfQotCiBzdGF0aWMgdm9pZCBzZGhjaV9yZWFkX2Jsb2NrX3BpbyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKIHsKLQlpbnQgYmxrc2l6ZSwgY2h1bmtfcmVtYWluOwotCXUzMiBkYXRhOwotCWNoYXIgKmJ1ZmZlcjsKLQlpbnQgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNpemVfdCBibGtzaXplLCBsZW4sIGNodW5rOworCXUzMiBzY3JhdGNoOworCXU4ICpidWY7CiAKIAlEQkcoIlBJTyByZWFkaW5nXG4iKTsKIAogCWJsa3NpemUgPSBob3N0LT5kYXRhLT5ibGtzejsKLQljaHVua19yZW1haW4gPSAwOwotCWRhdGEgPSAwOworCWNodW5rID0gMDsKIAotCWJ1ZmZlciA9IHNkaGNpX3NnX3RvX2J1ZmZlcihob3N0KSArIGhvc3QtPm9mZnNldDsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAl3aGlsZSAoYmxrc2l6ZSkgewotCQlpZiAoY2h1bmtfcmVtYWluID09IDApIHsKLQkJCWRhdGEgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOwotCQkJY2h1bmtfcmVtYWluID0gbWluKGJsa3NpemUsIDQpOwotCQl9CisJCWlmICghc2dfbWl0ZXJfbmV4dCgmaG9zdC0+c2dfbWl0ZXIpKQorCQkJQlVHKCk7CiAKLQkJc2l6ZSA9IG1pbihob3N0LT5yZW1haW4sIGNodW5rX3JlbWFpbik7CisJCWxlbiA9IG1pbihob3N0LT5zZ19taXRlci5sZW5ndGgsIGJsa3NpemUpOwogCi0JCWNodW5rX3JlbWFpbiAtPSBzaXplOwotCQlibGtzaXplIC09IHNpemU7Ci0JCWhvc3QtPm9mZnNldCArPSBzaXplOwotCQlob3N0LT5yZW1haW4gLT0gc2l6ZTsKKwkJYmxrc2l6ZSAtPSBsZW47CisJCWhvc3QtPnNnX21pdGVyLmNvbnN1bWVkID0gbGVuOwogCi0JCXdoaWxlIChzaXplKSB7Ci0JCQkqYnVmZmVyID0gZGF0YSAmIDB4RkY7Ci0JCQlidWZmZXIrKzsKLQkJCWRhdGEgPj49IDg7Ci0JCQlzaXplLS07Ci0JCX0KKwkJYnVmID0gaG9zdC0+c2dfbWl0ZXIuYWRkcjsKIAotCQlpZiAoaG9zdC0+cmVtYWluID09IDApIHsKLQkJCWlmIChzZGhjaV9uZXh0X3NnKGhvc3QpID09IDApIHsKLQkJCQlCVUdfT04oYmxrc2l6ZSAhPSAwKTsKLQkJCQlyZXR1cm47CisJCXdoaWxlIChsZW4pIHsKKwkJCWlmIChjaHVuayA9PSAwKSB7CisJCQkJc2NyYXRjaCA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0JVRkZFUik7CisJCQkJY2h1bmsgPSA0OwogCQkJfQotCQkJYnVmZmVyID0gc2RoY2lfc2dfdG9fYnVmZmVyKGhvc3QpOworCisJCQkqYnVmID0gc2NyYXRjaCAmIDB4RkY7CisKKwkJCWJ1ZisrOworCQkJc2NyYXRjaCA+Pj0gODsKKwkJCWNodW5rLS07CisJCQlsZW4tLTsKIAkJfQogCX0KKworCXNnX21pdGVyX3N0b3AoJmhvc3QtPnNnX21pdGVyKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfd3JpdGVfYmxvY2tfcGlvKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQogewotCWludCBibGtzaXplLCBjaHVua19yZW1haW47Ci0JdTMyIGRhdGE7Ci0JY2hhciAqYnVmZmVyOwotCWludCBieXRlcywgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNpemVfdCBibGtzaXplLCBsZW4sIGNodW5rOworCXUzMiBzY3JhdGNoOworCXU4ICpidWY7CiAKIAlEQkcoIlBJTyB3cml0aW5nXG4iKTsKIAogCWJsa3NpemUgPSBob3N0LT5kYXRhLT5ibGtzejsKLQljaHVua19yZW1haW4gPSA0OwotCWRhdGEgPSAwOworCWNodW5rID0gMDsKKwlzY3JhdGNoID0gMDsKIAotCWJ5dGVzID0gMDsKLQlidWZmZXIgPSBzZGhjaV9zZ190b19idWZmZXIoaG9zdCkgKyBob3N0LT5vZmZzZXQ7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJd2hpbGUgKGJsa3NpemUpIHsKLQkJc2l6ZSA9IG1pbihob3N0LT5yZW1haW4sIGNodW5rX3JlbWFpbik7CisJCWlmICghc2dfbWl0ZXJfbmV4dCgmaG9zdC0+c2dfbWl0ZXIpKQorCQkJQlVHKCk7CiAKLQkJY2h1bmtfcmVtYWluIC09IHNpemU7Ci0JCWJsa3NpemUgLT0gc2l6ZTsKLQkJaG9zdC0+b2Zmc2V0ICs9IHNpemU7Ci0JCWhvc3QtPnJlbWFpbiAtPSBzaXplOworCQlsZW4gPSBtaW4oaG9zdC0+c2dfbWl0ZXIubGVuZ3RoLCBibGtzaXplKTsKIAotCQl3aGlsZSAoc2l6ZSkgewotCQkJZGF0YSA+Pj0gODsKLQkJCWRhdGEgfD0gKHUzMikqYnVmZmVyIDw8IDI0OwotCQkJYnVmZmVyKys7Ci0JCQlzaXplLS07Ci0JCX0KKwkJYmxrc2l6ZSAtPSBsZW47CisJCWhvc3QtPnNnX21pdGVyLmNvbnN1bWVkID0gbGVuOwogCi0JCWlmIChjaHVua19yZW1haW4gPT0gMCkgewotCQkJd3JpdGVsKGRhdGEsIGhvc3QtPmlvYWRkciArIFNESENJX0JVRkZFUik7Ci0JCQljaHVua19yZW1haW4gPSBtaW4oYmxrc2l6ZSwgNCk7Ci0JCX0KKwkJYnVmID0gaG9zdC0+c2dfbWl0ZXIuYWRkcjsKIAotCQlpZiAoaG9zdC0+cmVtYWluID09IDApIHsKLQkJCWlmIChzZGhjaV9uZXh0X3NnKGhvc3QpID09IDApIHsKLQkJCQlCVUdfT04oYmxrc2l6ZSAhPSAwKTsKLQkJCQlyZXR1cm47CisJCXdoaWxlIChsZW4pIHsKKwkJCXNjcmF0Y2ggfD0gKHUzMikqYnVmIDw8IChjaHVuayAqIDgpOworCisJCQlidWYrKzsKKwkJCWNodW5rKys7CisJCQlsZW4tLTsKKworCQkJaWYgKChjaHVuayA9PSA0KSB8fCAoKGxlbiA9PSAwKSAmJiAoYmxrc2l6ZSA9PSAwKSkpIHsKKwkJCQl3cml0ZWwoc2NyYXRjaCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQlVGRkVSKTsKKwkJCQljaHVuayA9IDA7CisJCQkJc2NyYXRjaCA9IDA7CiAJCQl9Ci0JCQlidWZmZXIgPSBzZGhjaV9zZ190b19idWZmZXIoaG9zdCk7CiAJCX0KIAl9CisKKwlzZ19taXRlcl9zdG9wKCZob3N0LT5zZ19taXRlcik7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNkaGNpX3RyYW5zZmVyX3BpbyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKQEAgLTI5NCw3ICsyNzAsNyBAQAogCiAJQlVHX09OKCFob3N0LT5kYXRhKTsKIAotCWlmIChob3N0LT5udW1fc2cgPT0gMCkKKwlpZiAoaG9zdC0+YmxvY2tzID09IDApCiAJCXJldHVybjsKIAogCWlmIChob3N0LT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCkBAIC0zMDgsNyArMjg0LDggQEAKIAkJZWxzZQogCQkJc2RoY2lfd3JpdGVfYmxvY2tfcGlvKGhvc3QpOwogCi0JCWlmIChob3N0LT5udW1fc2cgPT0gMCkKKwkJaG9zdC0+YmxvY2tzLS07CisJCWlmIChob3N0LT5ibG9ja3MgPT0gMCkKIAkJCWJyZWFrOwogCX0KIApAQCAtMzg5LDYgKzM2Niw3IEBACiAJCWlmIChvZmZzZXQpIHsKIAkJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSB7CiAJCQkJYnVmZmVyID0gc2RoY2lfa21hcF9hdG9taWMoc2csICZmbGFncyk7CisJCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgUEFHRV9NQVNLKSA+IChQQUdFX1NJWkUgLSAzKSk7CiAJCQkJbWVtY3B5KGFsaWduLCBidWZmZXIsIG9mZnNldCk7CiAJCQkJc2RoY2lfa3VubWFwX2F0b21pYyhidWZmZXIsICZmbGFncyk7CiAJCQl9CkBAIC01MTAsNiArNDg4LDcgQEAKIAkJCQlzaXplID0gNCAtIChzZ19kbWFfYWRkcmVzcyhzZykgJiAweDMpOwogCiAJCQkJYnVmZmVyID0gc2RoY2lfa21hcF9hdG9taWMoc2csICZmbGFncyk7CisJCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgUEFHRV9NQVNLKSA+IChQQUdFX1NJWkUgLSAzKSk7CiAJCQkJbWVtY3B5KGJ1ZmZlciwgYWxpZ24sIHNpemUpOwogCQkJCXNkaGNpX2t1bm1hcF9hdG9taWMoYnVmZmVyLCAmZmxhZ3MpOwogCkBAIC02ODcsNyArNjY2LDcgQEAKIAkJCQlXQVJOX09OKDEpOwogCQkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9VU0VfRE1BOwogCQkJfSBlbHNlIHsKLQkJCQlXQVJOX09OKGNvdW50ICE9IDEpOworCQkJCVdBUk5fT04oc2dfY250ICE9IDEpOwogCQkJCXdyaXRlbChzZ19kbWFfYWRkcmVzcyhkYXRhLT5zZyksCiAJCQkJCWhvc3QtPmlvYWRkciArIFNESENJX0RNQV9BRERSRVNTKTsKIAkJCX0KQEAgLTcxMSwxMSArNjkwLDkgQEAKIAl9CiAKIAlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX1JFUV9VU0VfRE1BKSkgewotCQlob3N0LT5jdXJfc2cgPSBkYXRhLT5zZzsKLQkJaG9zdC0+bnVtX3NnID0gZGF0YS0+c2dfbGVuOwotCi0JCWhvc3QtPm9mZnNldCA9IDA7Ci0JCWhvc3QtPnJlbWFpbiA9IGhvc3QtPmN1cl9zZy0+bGVuZ3RoOworCQlzZ19taXRlcl9zdGFydCgmaG9zdC0+c2dfbWl0ZXIsCisJCQlkYXRhLT5zZywgZGF0YS0+c2dfbGVuLCBTR19NSVRFUl9BVE9NSUMpOworCQlob3N0LT5ibG9ja3MgPSBkYXRhLT5ibG9ja3M7CiAJfQogCiAJLyogV2UgZG8gbm90IGhhbmRsZSBETUEgYm91bmRhcmllcywgc28gc2V0IGl0IHRvIG1heCAoNTEyIEtpQikgKi8KQEAgLTE1ODEsOSArMTU1OCwxNSBAQAogCQl9CiAJfQogCi0JLyogWFhYOiBIYWNrIHRvIGdldCBNTUMgbGF5ZXIgdG8gYXZvaWQgaGlnaG1lbSAqLwotCWlmICghKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkpCi0JCW1tY19kZXYoaG9zdC0+bW1jKS0+ZG1hX21hc2sgPSBOVUxMOworCS8qCisJICogSWYgd2UgdXNlIERNQSwgdGhlbiBpdCdzIHVwIHRvIHRoZSBjYWxsZXIgdG8gc2V0IHRoZSBETUEKKwkgKiBtYXNrLCBidXQgUElPIGRvZXMgbm90IG5lZWQgdGhlIGh3IHNoaW0gc28gd2Ugc2V0IGEgbmV3CisJICogbWFzayBoZXJlIGluIHRoYXQgY2FzZS4KKwkgKi8KKwlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpKSB7CisJCWhvc3QtPmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDY0KTsKKwkJbW1jX2Rldihob3N0LT5tbWMpLT5kbWFfbWFzayA9ICZob3N0LT5kbWFfbWFzazsKKwl9CiAKIAlob3N0LT5tYXhfY2xrID0KIAkJKGNhcHMgJiBTREhDSV9DTE9DS19CQVNFX01BU0spID4+IFNESENJX0NMT0NLX0JBU0VfU0hJRlQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKaW5kZXggNWJiMzU1Mi4uYTA2YmY4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaApAQCAtMjEyLDYgKzIxMiw3IEBACiAKIAkvKiBJbnRlcm5hbCBkYXRhICovCiAJc3RydWN0IG1tY19ob3N0CQkqbW1jOwkJLyogTU1DIHN0cnVjdHVyZSAqLworCXU2NAkJCWRtYV9tYXNrOwkvKiBjdXN0b20gRE1BIG1hc2sgKi8KIAogI2lmZGVmIENPTkZJR19MRURTX0NMQVNTCiAJc3RydWN0IGxlZF9jbGFzc2RldglsZWQ7CQkvKiBMRUQgY29udHJvbCAqLwpAQCAtMjM4LDEwICsyMzksOCBAQAogCXN0cnVjdCBtbWNfZGF0YQkJKmRhdGE7CQkvKiBDdXJyZW50IGRhdGEgcmVxdWVzdCAqLwogCXVuc2lnbmVkIGludAkJZGF0YV9lYXJseToxOwkvKiBEYXRhIGZpbmlzaGVkIGJlZm9yZSBjbWQgKi8KIAotCXN0cnVjdCBzY2F0dGVybGlzdAkqY3VyX3NnOwkvKiBXZSdyZSB3b3JraW5nIG9uIHRoaXMgKi8KLQlpbnQJCQludW1fc2c7CQkvKiBFbnRyaWVzIGxlZnQgKi8KLQlpbnQJCQlvZmZzZXQ7CQkvKiBPZmZzZXQgaW50byBjdXJyZW50IHNnICovCi0JaW50CQkJcmVtYWluOwkJLyogQnl0ZXMgbGVmdCBpbiBjdXJyZW50ICovCisJc3RydWN0IHNnX21hcHBpbmdfaXRlcglzZ19taXRlcjsJLyogU0cgc3RhdGUgZm9yIFBJTyAqLworCXVuc2lnbmVkIGludAkJYmxvY2tzOwkJLyogcmVtYWluaW5nIFBJTyBibG9ja3MgKi8KIAogCWludAkJCXNnX2NvdW50OwkvKiBNYXBwZWQgc2cgZW50cmllcyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYwppbmRleCA1MTlkOTQyLi43YjcyYTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKQEAgLTI0MSw2ICsyNDEsNyBAQAogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJc3RydWN0IGJsb2NrMm10ZF9kZXYgKmRldjsKKwljaGFyICpuYW1lOwogCiAJaWYgKCFkZXZuYW1lKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI3OSwxMiArMjgwLDEzIEBACiAKIAkvKiBTZXR1cCB0aGUgTVREIHN0cnVjdHVyZSAqLwogCS8qIG1ha2UgdGhlIG5hbWUgY29udGFpbiB0aGUgYmxvY2sgZGV2aWNlIGluICovCi0JZGV2LT5tdGQubmFtZSA9IGttYWxsb2Moc2l6ZW9mKCJibG9jazJtdGQ6ICIpICsgc3RybGVuKGRldm5hbWUpLAorCW5hbWUgPSBrbWFsbG9jKHNpemVvZigiYmxvY2sybXRkOiAiKSArIHN0cmxlbihkZXZuYW1lKSArIDEsCiAJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWRldi0+bXRkLm5hbWUpCisJaWYgKCFuYW1lKQogCQlnb3RvIGRldmluaXRfZXJyOwogCi0Jc3ByaW50ZihkZXYtPm10ZC5uYW1lLCAiYmxvY2sybXRkOiAlcyIsIGRldm5hbWUpOworCXNwcmludGYobmFtZSwgImJsb2NrMm10ZDogJXMiLCBkZXZuYW1lKTsKKwlkZXYtPm10ZC5uYW1lID0gbmFtZTsKIAogCWRldi0+bXRkLnNpemUgPSBkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfc2l6ZSAmIFBBR0VfTUFTSzsKIAlkZXYtPm10ZC5lcmFzZXNpemUgPSBlcmFzZV9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IDEyOWQ0MjkuLmFlZjlmNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYworKysgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKQEAgLTI4LDEwICsyOCwxMyBAQAogCWlmICghbXRkKQogCQlyZXR1cm47CiAKLQlkZXZpY2VfY3JlYXRlKG10ZF9jbGFzcywgTlVMTCwgTUtERVYoTVREX0NIQVJfTUFKT1IsIG10ZC0+aW5kZXgqMiksICJtdGQlZCIsIG10ZC0+aW5kZXgpOworCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShtdGRfY2xhc3MsIE5VTEwsCisJCQkgICAgICBNS0RFVihNVERfQ0hBUl9NQUpPUiwgbXRkLT5pbmRleCoyKSwKKwkJCSAgICAgIE5VTEwsICJtdGQlZCIsIG10ZC0+aW5kZXgpOwogCi0JZGV2aWNlX2NyZWF0ZShtdGRfY2xhc3MsIE5VTEwsCi0JCSAgICAgIE1LREVWKE1URF9DSEFSX01BSk9SLCBtdGQtPmluZGV4KjIrMSksICJtdGQlZHJvIiwgbXRkLT5pbmRleCk7CisJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG10ZF9jbGFzcywgTlVMTCwKKwkJCSAgICAgIE1LREVWKE1URF9DSEFSX01BSk9SLCBtdGQtPmluZGV4KjIrMSksCisJCQkgICAgICBOVUxMLCAibXRkJWRybyIsIG10ZC0+aW5kZXgpOwogfQogCiBzdGF0aWMgdm9pZCBtdGRfbm90aWZ5X3JlbW92ZShzdHJ1Y3QgbXRkX2luZm8qIG10ZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYwppbmRleCBjYjY2M2VmLi5mYzg1MjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NteDI3MF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jbXgyNzBfbmFuZC5jCkBAIC0yMCw5ICsyMCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgpAQCAtMzAsMjAgKzMyLDYgQEAKICNkZWZpbmUgR1BJT19OQU5EX0NTCSgxMSkKICNkZWZpbmUgR1BJT19OQU5EX1JCCSg4OSkKIAotLyogVGhpcyBtYWNybyBuZWVkZWQgdG8gZW5zdXJlIGluLW9yZGVyIG9wZXJhdGlvbiBvZiBHUElPIGFuZCBsb2NhbAotICogYnVzLiBXaXRob3V0IGJvdGggYXNtIGNvbW1hbmQgYW5kIGR1bW15IHVuY2FjaGVkIHJlYWQgdGhlcmUncmUKLSAqIHN0YXRlcyB3aGVuIE5BTkQgYWNjZXNzIGlzIGJyb2tlbi4gSSd2ZSBsb29rZWQgZm9yIHN1Y2ggbWFjcm8ocykgaW4KLSAqIGluY2x1ZGUvYXNtLWFybSBidXQgZm91bmQgbm90aGluZyBhcHByb3B0aWF0ZS4KLSAqIGRtYWNfY2xlYW5fcmFuZ2UgaXMgY2xvc2UsIGJ1dCBpcyBtYWtlcyBjYWNoZSBpbnZhbGlkYXRpb24KLSAqIHVubmVjZXNzYXJ5IGhlcmUgYW5kIGl0IGNhbm5vdCBiZSB1c2VkIGluIG1vZHVsZQotICovCi0jZGVmaW5lIERSQUlOX1dCKCkgXAotCWRvIHsgXAotCQl1bnNpZ25lZCBjaGFyIGR1bW15OyBcCi0JCWFzbSB2b2xhdGlsZSAoIm1jciBwMTUsIDAsIHIwLCBjNywgYzEwLCA0Ijo6OiJyMCIpOyBcCi0JCWR1bW15PSooKHVuc2lnbmVkIGNoYXIqKVVOQ0FDSEVEX0FERFIpOyBcCi0JfSB3aGlsZSgwKQotCiAvKiBNVEQgc3RydWN0dXJlIGZvciBDTS1YMjcwIGJvYXJkICovCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpjbXgyNzBfbmFuZF9tdGQ7CiAKQEAgLTEwMywxNCArOTEsMTQgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG5hbmRfY3Nfb24odm9pZCkKIHsKLQlHUENSKEdQSU9fTkFORF9DUykgPSBHUElPX2JpdChHUElPX05BTkRfQ1MpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTkFORF9DUywgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIG5hbmRfY3Nfb2ZmKHZvaWQpCiB7Ci0JRFJBSU5fV0IoKTsKKwlkc2IoKTsKIAotCUdQU1IoR1BJT19OQU5EX0NTKSA9IEdQSU9fYml0KEdQSU9fTkFORF9DUyk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OQU5EX0NTLCAxKTsKIH0KIAogLyoKQEAgLTEyMiw3ICsxMTAsNyBAQAogCXN0cnVjdCBuYW5kX2NoaXAqIHRoaXMgPSBtdGQtPnByaXY7CiAJdW5zaWduZWQgaW50IG5hbmRhZGRyID0gKHVuc2lnbmVkIGludCl0aGlzLT5JT19BRERSX1c7CiAKLQlEUkFJTl9XQigpOworCWRzYigpOwogCiAJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CiAJCWlmICggY3RybCAmIE5BTkRfQUxFICkKQEAgLTEzOSwxMiArMTI3LDEyIEBACiAJCQluYW5kX2NzX29mZigpOwogCX0KIAotCURSQUlOX1dCKCk7CisJZHNiKCk7CiAJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSopbmFuZGFkZHI7CiAJaWYgKGRhdCAhPSBOQU5EX0NNRF9OT05FKQogCQl3cml0ZWwoKGRhdCA8PCAxNiksIHRoaXMtPklPX0FERFJfVyk7CiAKLQlEUkFJTl9XQigpOworCWRzYigpOwogfQogCiAvKgpAQCAtMTUyLDkgKzE0MCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgY214MjcwX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlEUkFJTl9XQigpOworCWRzYigpOwogCi0JcmV0dXJuIChHUExSKEdQSU9fTkFORF9SQikgJiBHUElPX2JpdChHUElPX05BTkRfUkIpKTsKKwlyZXR1cm4gKGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTkFORF9SQikpOwogfQogCiAvKgpAQCAtMTY4LDIwICsxNTYsNDAgQEAKIAlpbnQgbXRkX3BhcnRzX25iID0gMDsKIAlpbnQgcmV0OwogCisJaWYgKCFtYWNoaW5lX2lzX2FybWNvcmUoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OQU5EX0NTLCAiTkFORCBDUyIpOworCWlmIChyZXQpIHsKKwkJcHJfd2FybmluZygiQ00tWDI3MDogZmFpbGVkIHRvIHJlcXVlc3QgTkFORCBDUyBncGlvXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OQU5EX0NTLCAxKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05BTkRfUkIsICJOQU5EIFIvQiIpOworCWlmIChyZXQpIHsKKwkJcHJfd2FybmluZygiQ00tWDI3MDogZmFpbGVkIHRvIHJlcXVlc3QgTkFORCBSL0IgZ3Bpb1xuIik7CisJCWdvdG8gZXJyX2dwaW9fcmVxdWVzdDsKKwl9CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05BTkRfUkIpOworCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCiAJY214MjcwX25hbmRfbXRkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArCiAJCQkJICBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksCiAJCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAoIWNteDI3MF9uYW5kX210ZCkgewotCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBDTS1YMjcwIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXByX2RlYnVnKCJVbmFibGUgdG8gYWxsb2NhdGUgQ00tWDI3MCBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2t6YWxsb2M7CiAJfQogCiAJY214MjcwX25hbmRfaW8gPSBpb3JlbWFwKFBYQV9DUzFfUEhZUywgMTIpOwogCWlmICghY214MjcwX25hbmRfaW8pIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gaW9yZW1hcCBOQU5EIGRldmljZVxuIik7CisJCXByX2RlYnVnKCJVbmFibGUgdG8gaW9yZW1hcCBOQU5EIGRldmljZVxuIik7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAKIAkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KQEAgLTIwOSw5ICsyMTcsOSBAQAogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCiAJaWYgKG5hbmRfc2NhbiAoY214MjcwX25hbmRfbXRkLCAxKSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vIE5BTkQgZGV2aWNlXG4iKTsKKwkJcHJfbm90aWNlKCJObyBOQU5EIGRldmljZVxuIik7CiAJCXJldCA9IC1FTlhJTzsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9zY2FuOwogCX0KIAogI2lmZGVmIENPTkZJR19NVERfQ01ETElORV9QQVJUUwpAQCAtMjI5LDE4ICsyMzcsMjIgQEAKIAl9CiAKIAkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwotCXByaW50ayhLRVJOX05PVElDRSAiVXNpbmcgJXMgcGFydGl0aW9uIGRlZmluaXRpb25cbiIsIHBhcnRfdHlwZSk7CisJcHJfbm90aWNlKCJVc2luZyAlcyBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIiwgcGFydF90eXBlKTsKIAlyZXQgPSBhZGRfbXRkX3BhcnRpdGlvbnMoY214MjcwX25hbmRfbXRkLCBtdGRfcGFydHMsIG10ZF9wYXJ0c19uYik7CiAJaWYgKHJldCkKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9zY2FuOwogCiAJLyogUmV0dXJuIGhhcHB5ICovCiAJcmV0dXJuIDA7CiAKLWVycjI6CitlcnJfc2NhbjoKIAlpb3VubWFwKGNteDI3MF9uYW5kX2lvKTsKLWVycjE6CitlcnJfaW9yZW1hcDoKIAlrZnJlZShjbXgyNzBfbmFuZF9tdGQpOworZXJyX2t6YWxsb2M6CisJZ3Bpb19mcmVlKEdQSU9fTkFORF9SQik7CitlcnJfZ3Bpb19yZXF1ZXN0OgorCWdwaW9fZnJlZShHUElPX05BTkRfQ1MpOwogCiAJcmV0dXJuIHJldDsKIApAQCAtMjU1LDYgKzI2Nyw5IEBACiAJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCiAJbmFuZF9yZWxlYXNlKGNteDI3MF9uYW5kX210ZCk7CiAKKwlncGlvX2ZyZWUoR1BJT19OQU5EX1JCKTsKKwlncGlvX2ZyZWUoR1BJT19OQU5EX0NTKTsKKwogCWlvdW5tYXAoY214MjcwX25hbmRfaW8pOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAzLmMgYi9kcml2ZXJzL25ldC8zYzUwMy5jCmluZGV4IDljMjMzMzYuLjkwMGIwZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAzLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDMuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAjaWZuZGVmIE1PRFVMRQogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgZWwyX3Byb2JlKGludCB1bml0KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZWlwX25ldGRldigpOwogCWludCBlcnI7CiAKIAlpZiAoIWRldikKQEAgLTM0MCw3ICszNDAsNyBAQAogICAgIGRldi0+c3RvcCA9ICZlbDJfY2xvc2U7CiAgICAgZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLSAgICBkZXYtPnBvbGxfY29udHJvbGxlciA9IGVpX3BvbGw7CisgICAgZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaXBfcG9sbDsKICNlbmRpZgogCiAgICAgcmV0dmFsID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC0zODYsNyArMzg2LDcgQEAKIAkJb3V0Yl9wKDB4MDAsIEUzM0dfSURDRlIpOwogCQlpZiAoKmlycXAgPT0gcHJvYmVfaXJxX29mZihjb29raWUpCS8qIEl0J3MgYSBnb29kIElSUSBsaW5lISAqLwogCQkgICAgJiYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSA9ICppcnFwLAotCQkgICAgZWlfaW50ZXJydXB0LCAwLCBkZXYtPm5hbWUsIGRldikpID09IDApKQorCQkgICAgZWlwX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpKSA9PSAwKSkKIAkJICAgIGJyZWFrOwogCSAgICB9CiAJfSB3aGlsZSAoKisraXJxcCk7CkBAIC0zOTUsMTMgKzM5NSwxMyBAQAogCSAgICByZXR1cm4gcmV0dmFsOwogCX0KICAgICB9IGVsc2UgewotCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpKSkgeworCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpcF9pbnRlcnJ1cHQsIDAsIGRldi0+bmFtZSwgZGV2KSkpIHsKIAkgICAgcmV0dXJuIHJldHZhbDsKIAl9CiAgICAgfQogCiAgICAgZWwyX2luaXRfY2FyZChkZXYpOwotICAgIGVpX29wZW4oZGV2KTsKKyAgICBlaXBfb3BlbihkZXYpOwogICAgIHJldHVybiAwOwogfQogCkBAIC00MTIsNyArNDEyLDcgQEAKICAgICBkZXYtPmlycSA9IGVpX3N0YXR1cy5zYXZlZF9pcnE7CiAgICAgb3V0YihFR0FDRlJfSVJRT0ZGLCBFMzNHX0dBQ0ZSKTsJLyogZGlzYWJsZSBpbnRlcnJ1cHRzLiAqLwogCi0gICAgZWlfY2xvc2UoZGV2KTsKKyAgICBlaXBfY2xvc2UoZGV2KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjk4LDcgKzY5OCw3IEBACiAJCQlpZiAodGhpc19kZXYgIT0gMCkgYnJlYWs7IC8qIG9ubHkgYXV0b3Byb2JlIDFzdCBvbmUgKi8KIAkJCXByaW50ayhLRVJOX05PVElDRSAiM2M1MDMuYzogUHJlc2VudGx5IGF1dG9wcm9iaW5nIChub3QgcmVjb21tZW5kZWQpIGZvciBhIHNpbmdsZSBjYXJkLlxuIik7CiAJCX0KLQkJZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJCWRldiA9IGFsbG9jX2VpcF9uZXRkZXYoKTsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKIAkJZGV2LT5pcnEgPSBpcnFbdGhpc19kZXZdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MTUuYyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKaW5kZXggMTA1YThjNy4uZTRlMzI0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MTUuYworKysgYi9kcml2ZXJzL25ldC8zYzUxNS5jCkBAIC01NzIsMTIgKzU3MiwxNiBAQAogCWludCBpcnE7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKKyNpZmRlZiBfX0lTQVBOUF9fCiAJaWYgKGlkZXYpIHsKIAkJaXJxID0gcG5wX2lycShpZGV2LCAwKTsKIAkJdnAtPmRldiA9ICZpZGV2LT5kZXY7CiAJfSBlbHNlIHsKIAkJaXJxID0gaW53KGlvYWRkciArIDB4MjAwMikgJiAxNTsKIAl9CisjZWxzZQorCWlycSA9IGludyhpb2FkZHIgKyAweDIwMDIpICYgMTU7CisjZW5kaWYKIAogCWRldi0+YmFzZV9hZGRyID0gaW9hZGRyOwogCWRldi0+aXJxID0gaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuYyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKaW5kZXggMjM5ZmM0Mi4uZGM2ZTQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC0yMDIsNyArMjAyLDYgQEAKIHN0YXRpYyB2b2lkIGVsbWNfcm5yX2ludChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogc3RydWN0IHByaXYgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAljaGFyICptZW10b3A7CiAJdW5zaWduZWQgbG9uZyBtYXBwZWRfc3RhcnQ7CQkvKiBTdGFydCBvZiBpb3JlbWFwICovCkBAIC05ODksMTggKzk4OCwxOCBAQAogCQkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCQkJCQluZXRpZl9yeChza2IpOwogCQkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQkJCQlwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQkJCXAtPnN0YXRzLnJ4X2J5dGVzICs9IHRvdGxlbjsKKwkJCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gdG90bGVuOwogCQkJCX0gZWxzZSB7Ci0JCQkJCXAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVjZWl2ZWQgb3ZlcnNpemVkIGZyYW1lLlxuIiwgZGV2LT5uYW1lKTsKLQkJCQlwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQl9CiAJCX0gZWxzZSB7CS8qIGZyYW1lICEob2spLCBvbmx5IHdpdGggJ3NhdmUtYmFkLWZyYW1lcycgKi8KIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBvb3BzISByZmQtZXJyb3Itc3RhdHVzOiAlMDR4XG4iLCBkZXYtPm5hbWUsIHN0YXR1cyk7Ci0JCQlwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCX0KIAkJcC0+cmZkX3RvcC0+c3RhdHVzID0gMDsKIAkJcC0+cmZkX3RvcC0+bGFzdCA9IFJGRF9TVVNQOwpAQCAtMTAxOCw3ICsxMDE3LDcgQEAKIHsKIAlzdHJ1Y3QgcHJpdiAqcCA9IChzdHJ1Y3QgcHJpdiAqKSBkZXYtPnByaXY7CiAKLQlwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAJV0FJVF80X1NDQl9DTUQoKTsJLyogd2FpdCBmb3IgdGhlIGxhc3QgY21kICovCiAJcC0+c2NiLT5jbWQgPSBSVUNfQUJPUlQ7CS8qIHVzdWFsbHkgdGhlIFJVIGlzIGluIHRoZSAnbm8gcmVzb3VyY2UnLXN0YXRlIC4uIGFib3J0IGl0IG5vdy4gKi8KQEAgLTEwNDYsMjQgKzEwNDUsMjQgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHN0cmFuZ2UgLi4geG1pdC1pbnQgd2l0aG91dCBhICdDT01QTEVURSdcbiIsIGRldi0+bmFtZSk7CiAJfQogCWlmIChzdGF0dXMgJiBTVEFUX09LKSB7Ci0JCXAtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJcC0+c3RhdHMuY29sbGlzaW9ucyArPSAoc3RhdHVzICYgVENNRF9NQVhDT0xMTUFTSyk7CisJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHN0YXR1cyAmIFRDTURfTUFYQ09MTE1BU0spOwogCX0gZWxzZSB7Ci0JCXAtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgVENNRF9MQVRFQ09MTCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGxhdGUgY29sbGlzaW9uIGRldGVjdGVkLlxuIiwgZGV2LT5uYW1lKTsKLQkJCXAtPnN0YXRzLmNvbGxpc2lvbnMrKzsKKwkJCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOwogCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFRDTURfTk9DQVJSSUVSKSB7Ci0JCQlwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG5vIGNhcnJpZXIgZGV0ZWN0ZWQuXG4iLCBkZXYtPm5hbWUpOwogCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFRDTURfTE9TVENUUykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGxvc3Mgb2YgQ1RTIGRldGVjdGVkLlxuIiwgZGV2LT5uYW1lKTsKIAkJfSBlbHNlIGlmIChzdGF0dXMgJiBUQ01EX1VOREVSUlVOKSB7Ci0JCQlwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB1bmRlcnJ1biBkZXRlY3RlZC5cbiIsIGRldi0+bmFtZSk7CiAJCX0gZWxzZSBpZiAoc3RhdHVzICYgVENNRF9NQVhDT0xMKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTWF4LiBjb2xsaXNpb25zIGV4Y2VlZGVkLlxuIiwgZGV2LT5uYW1lKTsKLQkJCXAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gMTY7CisJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gMTY7CiAJCX0KIAl9CiAKQEAgLTEyMTUsMTIgKzEyMTQsMTIgQEAKIAlvdnJuID0gcC0+c2NiLT5vdnJuX2VycnM7CiAJcC0+c2NiLT5vdnJuX2VycnMgLT0gb3ZybjsKIAotCXAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gY3JjOwotCXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzICs9IG92cm47Ci0JcC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGFsbjsKLQlwLT5zdGF0cy5yeF9kcm9wcGVkICs9IHJzYzsKKwlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gY3JjOworCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMgKz0gb3ZybjsKKwlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBhbG47CisJZGV2LT5zdGF0cy5yeF9kcm9wcGVkICs9IHJzYzsKIAotCXJldHVybiAmcC0+c3RhdHM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTI3LmMgYi9kcml2ZXJzL25ldC8zYzUyNy5jCmluZGV4IGZhZTI5NWIuLjZhY2EwYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTI3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MjcuYwpAQCAtMTU4LDcgKzE1OCw2IEBACiAJaW50IHNsb3Q7CiAKIAl1MzIgYmFzZTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CiAJdm9sYXRpbGUgc3RydWN0IG1jMzJfbWFpbGJveCAqcnhfYm94OwogCXZvbGF0aWxlIHN0cnVjdCBtYzMyX21haWxib3ggKnR4X2JveDsKIAl2b2xhdGlsZSBzdHJ1Y3QgbWMzMl9tYWlsYm94ICpleGVjX2JveDsKQEAgLTEwOTMsMjQgKzEwOTIsMjQgQEAKIAogCXUzMiByeF9lcnJvcnM9MDsKIAotCXJ4X2Vycm9ycys9bHAtPm5ldF9zdGF0cy5yeF9jcmNfZXJyb3JzICAgKz1zdC0+cnhfY3JjX2Vycm9yczsKKwlyeF9lcnJvcnMrPWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyAgICs9c3QtPnJ4X2NyY19lcnJvcnM7CiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5yeF9jcmNfZXJyb3JzPTA7Ci0JcnhfZXJyb3JzKz1scC0+bmV0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzICArPXN0LT5yeF9vdmVycnVuX2Vycm9yczsKKwlyeF9lcnJvcnMrPWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMgICs9c3QtPnJ4X292ZXJydW5fZXJyb3JzOwogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+cnhfb3ZlcnJ1bl9lcnJvcnM9MDsKLQlyeF9lcnJvcnMrPWxwLT5uZXRfc3RhdHMucnhfZnJhbWVfZXJyb3JzICs9c3QtPnJ4X2FsaWdubWVudF9lcnJvcnM7CisJcnhfZXJyb3JzKz1kZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPXN0LT5yeF9hbGlnbm1lbnRfZXJyb3JzOwogIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnJ4X2FsaWdubWVudF9lcnJvcnM9MDsKLQlyeF9lcnJvcnMrPWxwLT5uZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycys9c3QtPnJ4X3Rvb3Nob3J0X2Vycm9yczsKKwlyeF9lcnJvcnMrPWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycys9c3QtPnJ4X3Rvb3Nob3J0X2Vycm9yczsKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnJ4X3Rvb3Nob3J0X2Vycm9ycz0wOwotCXJ4X2Vycm9ycys9bHAtPm5ldF9zdGF0cy5yeF9taXNzZWRfZXJyb3JzKz1zdC0+cnhfb3V0b2ZyZXNvdXJjZV9lcnJvcnM7CisJcnhfZXJyb3JzKz1kZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrPXN0LT5yeF9vdXRvZnJlc291cmNlX2Vycm9yczsKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnJ4X291dG9mcmVzb3VyY2VfZXJyb3JzPTA7Ci0gICAgICAgIGxwLT5uZXRfc3RhdHMucnhfZXJyb3JzPXJ4X2Vycm9yczsKKyAgICAgICAgZGV2LT5zdGF0cy5yeF9lcnJvcnM9cnhfZXJyb3JzOwogCiAJLyogTnVtYmVyIG9mIHBhY2tldHMgd2hpY2ggc2F3IG9uZSBjb2xsaXNpb24gKi8KLQlscC0+bmV0X3N0YXRzLmNvbGxpc2lvbnMrPXN0LT5kYXRhQ1sxMF07CisJZGV2LT5zdGF0cy5jb2xsaXNpb25zKz1zdC0+ZGF0YUNbMTBdOwogCXN0LT5kYXRhQ1sxMF09MDsKIAogCS8qIE51bWJlciBvZiBwYWNrZXRzIHdoaWNoIHNhdyAyLS0xNSBjb2xsaXNpb25zICovCi0JbHAtPm5ldF9zdGF0cy5jb2xsaXNpb25zKz1zdC0+ZGF0YUNbMTFdOworCWRldi0+c3RhdHMuY29sbGlzaW9ucys9c3QtPmRhdGFDWzExXTsKIAlzdC0+ZGF0YUNbMTFdPTA7CiB9CiAKQEAgLTExNzgsNyArMTE3Nyw3IEBACiAJCQkJc2tiPWRldl9hbGxvY19za2IobGVuZ3RoKzIpOwogCiAJCQkJaWYoc2tiPT1OVUxMKSB7Ci0JCQkJCWxwLT5uZXRfc3RhdHMucnhfZHJvcHBlZCsrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCQkJZ290byBkcm9wcGVkOwogCQkJCX0KIApAQCAtMTE4OSw4ICsxMTg4LDggQEAKIAogCQkJc2tiLT5wcm90b2NvbD1ldGhfdHlwZV90cmFucyhza2IsZGV2KTsKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0gCQkJbHAtPm5ldF9zdGF0cy5yeF9wYWNrZXRzKys7Ci0gCQkJbHAtPm5ldF9zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGg7CisgCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisgCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGg7CiAJCQluZXRpZl9yeChza2IpOwogCQl9CiAKQEAgLTEyNTMsMzQgKzEyNTIsMzQgQEAKIAkJCS8qIE5vdCBDT01QTEVURUQgKi8KIAkJCWJyZWFrOwogCQl9Ci0JCWxwLT5uZXRfc3RhdHMudHhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJaWYoIShucC0+c3RhdHVzICYgKDE8PDYpKSkgLyogTm90IENPTVBMRVRFRF9PSyAqLwogCQl7Ci0JCQlscC0+bmV0X3N0YXRzLnR4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCQkJc3dpdGNoKG5wLT5zdGF0dXMmMHgwRikKIAkJCXsKIAkJCQljYXNlIDE6Ci0JCQkJCWxwLT5uZXRfc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJCQlicmVhazsgLyogTWF4IGNvbGxpc2lvbnMgKi8KIAkJCQljYXNlIDI6Ci0JCQkJCWxwLT5uZXRfc3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCQlicmVhazsKIAkJCQljYXNlIDM6Ci0JCQkJCWxwLT5uZXRfc3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJCQlicmVhazsKIAkJCQljYXNlIDQ6Ci0JCQkJCWxwLT5uZXRfc3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJCQkJYnJlYWs7ICAvKiBDVFMgTG9zdCAqLwogCQkJCWNhc2UgNToKLQkJCQkJbHAtPm5ldF9zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQkJCWJyZWFrOyAvKiBUcmFuc21pdCB0aW1lb3V0ICovCiAJCQl9CiAJCX0KIAkJLyogUGFja2V0cyBhcmUgc2VudCBpbiBvcmRlciAtIHRoaXMgaXMKIAkJICAgIGJhc2ljYWxseSBhIEZJRk8gcXVldWUgb2YgYnVmZmVycyBtYXRjaGluZwogCQkgICAgdGhlIGNhcmQgcmluZyAqLwotCQlscC0+bmV0X3N0YXRzLnR4X2J5dGVzKz1scC0+dHhfcmluZ1t0XS5za2ItPmxlbjsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcys9bHAtPnR4X3JpbmdbdF0uc2tiLT5sZW47CiAJCWRldl9rZnJlZV9za2JfaXJxKGxwLT50eF9yaW5nW3RdLnNrYik7CiAJCWxwLT50eF9yaW5nW3RdLnNrYj1OVUxMOwogCQlhdG9taWNfaW5jKCZscC0+dHhfY291bnQpOwpAQCAtMTM2Nyw3ICsxMzY2LDcgQEAKIAkJCWNhc2UgNjoKIAkJCQkvKiBPdXQgb2YgUlggYnVmZmVycyBzdGF0ICovCiAJCQkJLyogTXVzdCByZXN0YXJ0IHJ4ICovCi0JCQkJbHAtPm5ldF9zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJbWMzMl9yeF9yaW5nKGRldik7CiAJCQkJbWMzMl9zdGFydF90cmFuc2NlaXZlcihkZXYpOwogCQkJCWJyZWFrOwpAQCAtMTQ4OSwxMCArMTQ4OCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbWMzMl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWMzMl9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCiAJbWMzMl91cGRhdGVfc3RhdHMoZGV2KTsKLQlyZXR1cm4gJmxwLT5uZXRfc3RhdHM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IGFhYmFkOGMuLjhkYjRlNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlpbnQgcmV0dmFsLCBwcmludF9pbmZvOwogCXN0cnVjdCB2b3J0ZXhfY2hpcF9pbmZvICogY29uc3QgdmNpID0gJnZvcnRleF9pbmZvX3RibFtjaGlwX2lkeF07Ci0JY2hhciAqcHJpbnRfbmFtZSA9ICIzYzU5eCI7CisJY29uc3QgY2hhciAqcHJpbnRfbmFtZSA9ICIzYzU5eCI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldiA9IE5VTEw7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IGE0NTNlZGEuLjYwMTFkNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC0zNDAsNyArMzQwLDYgQEAKIAl1MzIJCQlyeF9jb25maWc7CiAJdTE2CQkJY3BjbWQ7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CiAJc3RydWN0IGNwX2V4dHJhX3N0YXRzCWNwX3N0YXRzOwogCiAJdW5zaWduZWQJCXJ4X2hlYWQJCV9fX19jYWNoZWxpbmVfYWxpZ25lZDsKQEAgLTQ1Nyw4ICs0NTYsOCBAQAogewogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyAoc2tiLCBjcC0+ZGV2KTsKIAotCWNwLT5uZXRfc3RhdHMucnhfcGFja2V0cysrOwotCWNwLT5uZXRfc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJY3AtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWNwLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCWNwLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCiAjaWYgQ1BfVkxBTl9UQUdfVVNFRApAQCAtNDc3LDE3ICs0NzYsMTcgQEAKIAkJcHJpbnRrIChLRVJOX0RFQlVHCiAJCQkiJXM6IHJ4IGVyciwgc2xvdCAlZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCiAJCQljcC0+ZGV2LT5uYW1lLCByeF90YWlsLCBzdGF0dXMsIGxlbik7Ci0JY3AtPm5ldF9zdGF0cy5yeF9lcnJvcnMrKzsKKwljcC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAlpZiAoc3RhdHVzICYgUnhFcnJGcmFtZSkKLQkJY3AtPm5ldF9zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJY3AtPmRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJaWYgKHN0YXR1cyAmIFJ4RXJyQ1JDKQotCQljcC0+bmV0X3N0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJY3AtPmRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCWlmICgoc3RhdHVzICYgUnhFcnJSdW50KSB8fCAoc3RhdHVzICYgUnhFcnJMb25nKSkKLQkJY3AtPm5ldF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWNwLT5kZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAlpZiAoKHN0YXR1cyAmIChGaXJzdEZyYWcgfCBMYXN0RnJhZykpICE9IChGaXJzdEZyYWcgfCBMYXN0RnJhZykpCi0JCWNwLT5uZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQljcC0+ZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJaWYgKHN0YXR1cyAmIFJ4RXJyRklGTykKLQkJY3AtPm5ldF9zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQljcC0+ZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcF9yeF9jc3VtX29rICh1MzIgc3RhdHVzKQpAQCAtNTM5LDcgKzUzOCw3IEBACiAJCQkgKiB0aGF0IFJYIGZyYWdtZW50cyBhcmUgbmV2ZXIgZW5jb3VudGVyZWQKIAkJCSAqLwogCQkJY3BfcnhfZXJyX2FjY3QoY3AsIHJ4X3RhaWwsIHN0YXR1cywgbGVuKTsKLQkJCWNwLT5uZXRfc3RhdHMucnhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQljcC0+Y3Bfc3RhdHMucnhfZnJhZ3MrKzsKIAkJCWdvdG8gcnhfbmV4dDsKIAkJfQpAQCAtNTU2LDcgKzU1NSw3IEBACiAJCWJ1ZmxlbiA9IGNwLT5yeF9idWZfc3ogKyBSWF9PRkZTRVQ7CiAJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiIChidWZsZW4pOwogCQlpZiAoIW5ld19za2IpIHsKLQkJCWNwLT5uZXRfc3RhdHMucnhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQlnb3RvIHJ4X25leHQ7CiAJCX0KIApAQCAtNzEwLDIwICs3MDksMjAgQEAKIAkJCQlpZiAobmV0aWZfbXNnX3R4X2VycihjcCkpCiAJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggZXJyLCBzdGF0dXMgMHgleFxuIiwKIAkJCQkJICAgICAgIGNwLT5kZXYtPm5hbWUsIHN0YXR1cyk7Ci0JCQkJY3AtPm5ldF9zdGF0cy50eF9lcnJvcnMrKzsKKwkJCQljcC0+ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgVHhPV0MpCi0JCQkJCWNwLT5uZXRfc3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJCQljcC0+ZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIFR4TWF4Q29sKQotCQkJCQljcC0+bmV0X3N0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQkJCWNwLT5kZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIFR4TGlua0ZhaWwpCi0JCQkJCWNwLT5uZXRfc3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQkJY3AtPmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgVHhGSUZPVW5kZXIpCi0JCQkJCWNwLT5uZXRfc3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCQkJY3AtPmRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCX0gZWxzZSB7Ci0JCQkJY3AtPm5ldF9zdGF0cy5jb2xsaXNpb25zICs9CisJCQkJY3AtPmRldi0+c3RhdHMuY29sbGlzaW9ucyArPQogCQkJCQkoKHN0YXR1cyA+PiBUeENvbENudFNoaWZ0KSAmIFR4Q29sQ250TWFzayk7Ci0JCQkJY3AtPm5ldF9zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQkJY3AtPm5ldF9zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCQljcC0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJY3AtPmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCQkJaWYgKG5ldGlmX21zZ190eF9kb25lKGNwKSkKIAkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBkb25lLCBzbG90ICVkXG4iLCBjcC0+ZGV2LT5uYW1lLCB0eF90YWlsKTsKIAkJCX0KQEAgLTk1Niw3ICs5NTUsNyBAQAogc3RhdGljIHZvaWQgX19jcF9nZXRfc3RhdHMoc3RydWN0IGNwX3ByaXZhdGUgKmNwKQogewogCS8qIG9ubHkgbG93ZXIgMjQgYml0cyB2YWxpZDsgd3JpdGUgYW55IHZhbHVlIHRvIGNsZWFyICovCi0JY3AtPm5ldF9zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IChjcHIzMiAoUnhNaXNzZWQpICYgMHhmZmZmZmYpOworCWNwLT5kZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gKGNwcjMyIChSeE1pc3NlZCkgJiAweGZmZmZmZik7CiAJY3B3MzIgKFJ4TWlzc2VkLCAwKTsKIH0KIApAQCAtOTcxLDcgKzk3MCw3IEBACiAgCQlfX2NwX2dldF9zdGF0cyhjcCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAmY3AtPm5ldF9zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIHN0YXRpYyB2b2lkIGNwX3N0b3BfaHcgKHN0cnVjdCBjcF9wcml2YXRlICpjcCkKQEAgLTExNDIsNyArMTE0MSw3IEBACiAJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCWlmIChsZTMyX3RvX2NwdShkZXNjLT5vcHRzMSkgJiBMYXN0RnJhZykKIAkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQljcC0+bmV0X3N0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWNwLT5kZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIApAQCAtMTIxNCw3ICsxMjEzLDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CiAKLQlzeW5jaHJvbml6ZV9pcnEoZGV2LT5pcnEpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCiAJY3BfZnJlZV9yaW5ncyhjcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKaW5kZXggNTNiZDkwMy4uOGE1YjBkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOXRvby5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwpAQCAtOTgsNyArOTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CkBAIC0xMDcsOCArMTA2LDggQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2RlZmluZSBSVEw4MTM5X0RSSVZFUl9OQU1FICAgRFJWX05BTUUgIiBGYXN0IEV0aGVybmV0IGRyaXZlciAiIERSVl9WRVJTSU9OCkBAIC0xMjAsMTEgKzExOSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRJRl9NU0dfTElOSykKIAogCi0vKiBlbmFibGUgUElPIGluc3RlYWQgb2YgTU1JTywgaWYgQ09ORklHXzgxMzlUT09fUElPIGlzIHNlbGVjdGVkICovCi0jaWZkZWYgQ09ORklHXzgxMzlUT09fUElPCi0jZGVmaW5lIFVTRV9JT19PUFMgMQotI2VuZGlmCi0KIC8qIGRlZmluZSB0byAxLCAyIG9yIDMgdG8gZW5hYmxlIGNvcGlvdXMgZGVidWdnaW5nIGluZm8gKi8KICNkZWZpbmUgUlRMODEzOV9ERUJVRyAwCiAKQEAgLTEzNCw3ICsxMjgsNyBAQAogCiAjaWYgUlRMODEzOV9ERUJVRwogLyogbm90ZTogcHJpbnRzIGZ1bmN0aW9uIG5hbWUgZm9yIHlvdSAqLwotIyAgZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKQorIyAgZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBfX2Z1bmNfXyAsICMjIGFyZ3MpCiAjZWxzZQogIyAgZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKQogI2VuZGlmCkBAIC0xNDUsNyArMTM5LDcgQEAKICMgIGRlZmluZSBhc3NlcnQoZXhwcikgXAogICAgICAgICBpZih1bmxpa2VseSghKGV4cHIpKSkgewkJCQkgICAgICAgIFwKICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLAlcCi0gICAgICAgICNleHByLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CQkgICAgICAgIFwKKwkjZXhwciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7CQkJXAogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMTU2LDYgKzE1MCwxMyBAQAogc3RhdGljIGludCBtZWRpYVtNQVhfVU5JVFNdID0gey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX07CiBzdGF0aWMgaW50IGZ1bGxfZHVwbGV4W01BWF9VTklUU10gPSB7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfTsKIAorLyogV2hldGhlciB0byB1c2UgTU1JTyBvciBQSU8uIERlZmF1bHQgdG8gTU1JTy4gKi8KKyNpZmRlZiBDT05GSUdfODEzOVRPT19QSU8KK3N0YXRpYyBpbnQgdXNlX2lvID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IHVzZV9pbyA9IDA7CisjZW5kaWYKKwogLyogTWF4aW11bSBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBmaWx0ZXIgKHZzLiBSeC1hbGwtbXVsdGljYXN0KS4KICAgIFRoZSBSVEwgY2hpcHMgdXNlIGEgNjQgZWxlbWVudCBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBFdGhlcm5ldCBDUkMuICAqLwogc3RhdGljIGludCBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMzI7CkBAIC0yMTksNyArMjIwLDcgQEAKICNkZWZpbmUgUlRMODEzOUJfSU9fU0laRSAyNTYKIAogI2RlZmluZSBSVEw4MTI5X0NBUFMJSEFTX01JSV9YQ1ZSCi0jZGVmaW5lIFJUTDgxMzlfQ0FQUwlIQVNfQ0hJUF9YQ1ZSfEhBU19MTktfQ0hORworI2RlZmluZSBSVEw4MTM5X0NBUFMJKEhBU19DSElQX1hDVlJ8SEFTX0xOS19DSE5HKQogCiB0eXBlZGVmIGVudW0gewogCVJUTDgxMzkgPSAwLApAQCAtNTc0LDcgKzU3NSw2IEBACiAJdTMyCQkJbXNnX2VuYWJsZTsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJbmFwaTsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOwogCiAJdW5zaWduZWQgY2hhcgkJKnJ4X3Jpbmc7CiAJdW5zaWduZWQgaW50CQljdXJfcng7CS8qIFJYIGJ1ZiBpbmRleCBvZiBuZXh0IHBrdCAqLwpAQCAtNjE1LDYgKzYxNSw4IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiAKK21vZHVsZV9wYXJhbSh1c2VfaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9pbywgIkZvcmNlIHVzZSBvZiBJL08gYWNjZXNzIG1vZGUuIDA9TU1JTyAxPVBJTyIpOwogbW9kdWxlX3BhcmFtKG11bHRpY2FzdF9maWx0ZXJfbGltaXQsIGludCwgMCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkobWVkaWEsIGludCwgTlVMTCwgMCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZnVsbF9kdXBsZXgsIGludCwgTlVMTCwgMCk7CkBAIC03MTAsMTMgKzcxMiw4IEBACiAJYXNzZXJ0ICh0cC0+cGNpX2RldiAhPSBOVUxMKTsKIAlwZGV2ID0gdHAtPnBjaV9kZXY7CiAKLSNpZmRlZiBVU0VfSU9fT1BTCi0JaWYgKHRwLT5tbWlvX2FkZHIpCi0JCWlvcG9ydF91bm1hcCAodHAtPm1taW9fYWRkcik7Ci0jZWxzZQogCWlmICh0cC0+bW1pb19hZGRyKQogCQlwY2lfaW91bm1hcCAocGRldiwgdHAtPm1taW9fYWRkcik7Ci0jZW5kaWYgLyogVVNFX0lPX09QUyAqLwogCiAJLyogaXQncyBvayB0byBjYWxsIHRoaXMgZXZlbiBpZiB3ZSBoYXZlIG5vIHJlZ2lvbnMgdG8gZnJlZSAqLwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMgKHBkZXYpOwpAQCAtNzkxLDMyICs3ODgsMzMgQEAKIAlEUFJJTlRLKCJQSU8gcmVnaW9uIHNpemUgPT0gMHglMDJYXG4iLCBwaW9fbGVuKTsKIAlEUFJJTlRLKCJNTUlPIHJlZ2lvbiBzaXplID09IDB4JTAybFhcbiIsIG1taW9fbGVuKTsKIAotI2lmZGVmIFVTRV9JT19PUFMKLQkvKiBtYWtlIHN1cmUgUENJIGJhc2UgYWRkciAwIGlzIFBJTyAqLwotCWlmICghKHBpb19mbGFncyAmIElPUkVTT1VSQ0VfSU8pKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lvbiAjMCBub3QgYSBQSU8gcmVzb3VyY2UsIGFib3J0aW5nXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXQ7CityZXRyeToKKwlpZiAodXNlX2lvKSB7CisJCS8qIG1ha2Ugc3VyZSBQQ0kgYmFzZSBhZGRyIDAgaXMgUElPICovCisJCWlmICghKHBpb19mbGFncyAmIElPUkVTT1VSQ0VfSU8pKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWdpb24gIzAgbm90IGEgUElPIHJlc291cmNlLCBhYm9ydGluZ1xuIik7CisJCQlyYyA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJLyogY2hlY2sgZm9yIHdlaXJkL2Jyb2tlbiBQQ0kgcmVnaW9uIHJlcG9ydGluZyAqLworCQlpZiAocGlvX2xlbiA8IFJUTF9NSU5fSU9fU0laRSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBQQ0kgSS9PIHJlZ2lvbiBzaXplKHMpLCBhYm9ydGluZ1xuIik7CisJCQlyYyA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiBtYWtlIHN1cmUgUENJIGJhc2UgYWRkciAxIGlzIE1NSU8gKi8KKwkJaWYgKCEobW1pb19mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaW9uICMxIG5vdCBhbiBNTUlPIHJlc291cmNlLCBhYm9ydGluZ1xuIik7CisJCQlyYyA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJaWYgKG1taW9fbGVuIDwgUlRMX01JTl9JT19TSVpFKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIFBDSSBtZW0gcmVnaW9uIHNpemUocyksIGFib3J0aW5nXG4iKTsKKwkJCXJjID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQogCX0KLQkvKiBjaGVjayBmb3Igd2VpcmQvYnJva2VuIFBDSSByZWdpb24gcmVwb3J0aW5nICovCi0JaWYgKHBpb19sZW4gPCBSVExfTUlOX0lPX1NJWkUpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBQQ0kgSS9PIHJlZ2lvbiBzaXplKHMpLCBhYm9ydGluZ1xuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0OwotCX0KLSNlbHNlCi0JLyogbWFrZSBzdXJlIFBDSSBiYXNlIGFkZHIgMSBpcyBNTUlPICovCi0JaWYgKCEobW1pb19mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWdpb24gIzEgbm90IGFuIE1NSU8gcmVzb3VyY2UsIGFib3J0aW5nXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCWlmIChtbWlvX2xlbiA8IFJUTF9NSU5fSU9fU0laRSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIFBDSSBtZW0gcmVnaW9uIHNpemUocyksIGFib3J0aW5nXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotI2VuZGlmCiAKIAlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMgKHBkZXYsIERSVl9OQU1FKTsKIAlpZiAocmMpCkBAIC04MjYsMjggKzgyNCwyOCBAQAogCS8qIGVuYWJsZSBQQ0kgYnVzLW1hc3RlcmluZyAqLwogCXBjaV9zZXRfbWFzdGVyIChwZGV2KTsKIAotI2lmZGVmIFVTRV9JT19PUFMKLQlpb2FkZHIgPSBpb3BvcnRfbWFwKHBpb19zdGFydCwgcGlvX2xlbik7Ci0JaWYgKCFpb2FkZHIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG1hcCBQSU8sIGFib3J0aW5nXG4iKTsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIGVycl9vdXQ7CisJaWYgKHVzZV9pbykgeworCQlpb2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJCWlmICghaW9hZGRyKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgbWFwIFBJTywgYWJvcnRpbmdcbiIpOworCQkJcmMgPSAtRUlPOworCQkJZ290byBlcnJfb3V0OworCQl9CisJCWRldi0+YmFzZV9hZGRyID0gcGlvX3N0YXJ0OworCQl0cC0+cmVnc19sZW4gPSBwaW9fbGVuOworCX0gZWxzZSB7CisJCS8qIGlvcmVtYXAgTU1JTyByZWdpb24gKi8KKwkJaW9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDEsIDApOworCQlpZiAoaW9hZGRyID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBNTUlPLCB0cnlpbmcgUElPXG4iKTsKKwkJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJCQl1c2VfaW8gPSAxOworCQkJZ290byByZXRyeTsKKwkJfQorCQlkZXYtPmJhc2VfYWRkciA9IChsb25nKSBpb2FkZHI7CisJCXRwLT5yZWdzX2xlbiA9IG1taW9fbGVuOwogCX0KLQlkZXYtPmJhc2VfYWRkciA9IHBpb19zdGFydDsKIAl0cC0+bW1pb19hZGRyID0gaW9hZGRyOwotCXRwLT5yZWdzX2xlbiA9IHBpb19sZW47Ci0jZWxzZQotCS8qIGlvcmVtYXAgTU1JTyByZWdpb24gKi8KLQlpb2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMSwgMCk7Ci0JaWYgKGlvYWRkciA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBNTUlPLCBhYm9ydGluZ1xuIik7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBlcnJfb3V0OwotCX0KLQlkZXYtPmJhc2VfYWRkciA9IChsb25nKSBpb2FkZHI7Ci0JdHAtPm1taW9fYWRkciA9IGlvYWRkcjsKLQl0cC0+cmVnc19sZW4gPSBtbWlvX2xlbjsKLSNlbmRpZiAvKiBVU0VfSU9fT1BTICovCiAKIAkvKiBCcmluZyBvbGQgY2hpcHMgb3V0IG9mIGxvdy1wb3dlciBtb2RlLiAqLwogCVJUTF9XOCAoSGx0Q2xrLCAnUicpOwpAQCAtOTUzLDYgKzk1MSwxNCBAQAogCQkJICAgIlVzZSB0aGUgXCI4MTM5Y3BcIiBkcml2ZXIgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuXG4iKTsKIAl9CiAKKwlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUkVBTFRFSyAmJgorCSAgICBwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9SRUFMVEVLXzgxMzkgJiYKKwkgICAgcGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FUSEVST1MgJiYKKwkgICAgcGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOSkgeworCQlwcmludGsoS0VSTl9JTkZPICI4MTM5dG9vOiBPUU8gTW9kZWwgMiBkZXRlY3RlZC4gRm9yY2luZyBQSU9cbiIpOworCQl1c2VfaW8gPSAxOworCX0KKwogCWkgPSBydGw4MTM5X2luaXRfYm9hcmQgKHBkZXYsICZkZXYpOwogCWlmIChpIDwgMCkKIAkJcmV0dXJuIGk7CkBAIC0xNzExLDcgKzE3MTcsNyBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfSBlbHNlIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQl0cC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzYyLDI3ICsxNzY4LDI3IEBACiAJCQlpZiAobmV0aWZfbXNnX3R4X2Vycih0cCkpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICU4Ljh4LlxuIiwKIAkJCQkJZGV2LT5uYW1lLCB0eHN0YXR1cyk7Ci0JCQl0cC0+c3RhdHMudHhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJaWYgKHR4c3RhdHVzICYgVHhBYm9ydGVkKSB7Ci0JCQkJdHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJCVJUTF9XMzIgKFR4Q29uZmlnLCBUeENsZWFyQWJ0KTsKIAkJCQlSVExfVzE2IChJbnRyU3RhdHVzLCBUeEVycik7CiAJCQkJd21iKCk7CiAJCQl9CiAJCQlpZiAodHhzdGF0dXMgJiBUeENhcnJpZXJMb3N0KQotCQkJCXRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCWlmICh0eHN0YXR1cyAmIFR4T3V0T2ZXaW5kb3cpCi0JCQkJdHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJfSBlbHNlIHsKIAkJCWlmICh0eHN0YXR1cyAmIFR4VW5kZXJydW4pIHsKIAkJCQkvKiBBZGQgNjQgdG8gdGhlIFR4IEZJRk8gdGhyZXNob2xkLiAqLwogCQkJCWlmICh0cC0+dHhfZmxhZyA8IDB4MDAzMDAwMDApCiAJCQkJCXRwLT50eF9mbGFnICs9IDB4MDAwMjAwMDA7Ci0JCQkJdHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJfQotCQkJdHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHR4c3RhdHVzID4+IDI0KSAmIDE1OwotCQkJdHAtPnN0YXRzLnR4X2J5dGVzICs9IHR4c3RhdHVzICYgMHg3ZmY7Ci0JCQl0cC0+c3RhdHMudHhfcGFja2V0cysrOworCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eHN0YXR1cyA+PiAyNCkgJiAxNTsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gdHhzdGF0dXMgJiAweDdmZjsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQl9CiAKIAkJZGlydHlfdHgrKzsKQEAgLTE4MTgsNyArMTgyNCw3IEBACiAJaWYgKG5ldGlmX21zZ19yeF9lcnIgKHRwKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBFdGhlcm5ldCBmcmFtZSBoYWQgZXJyb3JzLCBzdGF0dXMgJTguOHguXG4iLAogCQkJZGV2LT5uYW1lLCByeF9zdGF0dXMpOwotCXRwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWlmICghKHJ4X3N0YXR1cyAmIFJ4U3RhdHVzT0spKSB7CiAJCWlmIChyeF9zdGF0dXMgJiBSeFRvb0xvbmcpIHsKIAkJCURQUklOVEsgKCIlczogT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lLCBzdGF0dXMgJTQuNHghXG4iLApAQCAtMTgyNiwxMSArMTgzMiwxMSBAQAogCQkJLyogQS5DLjogVGhlIGNoaXAgaGFuZ3MgaGVyZS4gKi8KIAkJfQogCQlpZiAocnhfc3RhdHVzICYgKFJ4QmFkU3ltYm9sIHwgUnhCYWRBbGlnbikpCi0JCQl0cC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQlpZiAocnhfc3RhdHVzICYgKFJ4UnVudCB8IFJ4VG9vTG9uZykpCi0JCQl0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCWlmIChyeF9zdGF0dXMgJiBSeENSQ0VycikKLQkJCXRwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAl9IGVsc2UgewogCQl0cC0+eHN0YXRzLnJ4X2xvc3RfaW5fcmluZysrOwogCX0KQEAgLTE4OTAsNyArMTg5Niw3IEBACiB9CiAKICNpZiBSWF9CVUZfSURYID09IDMKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgd3JhcF9jb3B5KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJpbmcsCitzdGF0aWMgaW5saW5lIHZvaWQgd3JhcF9jb3B5KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJpbmcsCiAJCQkJIHUzMiBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplKQogewogCXUzMiBsZWZ0ID0gUlhfQlVGX0xFTiAtIG9mZnNldDsKQEAgLTE5MTMsOSArMTkxOSw5IEBACiAJLyogQ2xlYXIgb3V0IGVycm9ycyBhbmQgcmVjZWl2ZSBpbnRlcnJ1cHRzICovCiAJaWYgKGxpa2VseShzdGF0dXMgIT0gMCkpIHsKIAkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIChSeEZJRk9PdmVyIHwgUnhPdmVyZmxvdykpKSB7Ci0JCQl0cC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQl0cC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWlmIChzdGF0dXMgJiBSeEZJRk9PdmVyKQotCQkJCXRwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQkJCXRwLT5kZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCX0KIAkJUlRMX1cxNl9GIChJbnRyU3RhdHVzLCBSeEFja0JpdHMpOwogCX0KQEAgLTIwMTYsOCArMjAyMiw4IEBACiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMgKHNrYiwgZGV2KTsKIAogCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJCXRwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3Rfc2l6ZTsKLQkJCXRwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9zaXplOworCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKIAkJCW5ldGlmX3JlY2VpdmVfc2tiIChza2IpOwogCQl9IGVsc2UgewpAQCAtMjAyNSw3ICsyMDMxLDcgQEAKIAkJCQlwcmludGsgKEtFUk5fV0FSTklORwogCQkJCQkiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAogCQkJCQlkZXYtPm5hbWUpOwotCQkJdHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9CiAJCXJlY2VpdmVkKys7CiAKQEAgLTIwNzIsNyArMjA3OCw3IEBACiAJYXNzZXJ0IChpb2FkZHIgIT0gTlVMTCk7CiAKIAkvKiBVcGRhdGUgdGhlIGVycm9yIGNvdW50LiAqLwotCXRwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IFJUTF9SMzIgKFJ4TWlzc2VkKTsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gUlRMX1IzMiAoUnhNaXNzZWQpOwogCVJUTF9XMzIgKFJ4TWlzc2VkLCAwKTsKIAogCWlmICgoc3RhdHVzICYgUnhVbmRlcnJ1bikgJiYgbGlua19jaGFuZ2VkICYmCkBAIC0yMDgyLDEyICsyMDg4LDEyIEBACiAJfQogCiAJaWYgKHN0YXR1cyAmIChSeFVuZGVycnVuIHwgUnhFcnIpKQotCQl0cC0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAKIAlpZiAoc3RhdHVzICYgUENTVGltZW91dCkKLQkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJaWYgKHN0YXR1cyAmIFJ4VW5kZXJydW4pCi0JCXRwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJaWYgKHN0YXR1cyAmIFBDSUVycikgewogCQl1MTYgcGNpX2NtZF9zdGF0dXM7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkICh0cC0+cGNpX2RldiwgUENJX1NUQVRVUywgJnBjaV9jbWRfc3RhdHVzKTsKQEAgLTIyMjcsMTIgKzIyMzMsMTEgQEAKIAlSVExfVzE2IChJbnRyTWFzaywgMCk7CiAKIAkvKiBVcGRhdGUgdGhlIGVycm9yIGNvdW50cy4gKi8KLQl0cC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSBSVExfUjMyIChSeE1pc3NlZCk7CisJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IFJUTF9SMzIgKFJ4TWlzc2VkKTsKIAlSVExfVzMyIChSeE1pc3NlZCwgMCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHAtPmxvY2ssIGZsYWdzKTsKIAotCXN5bmNocm9uaXplX2lycSAoZGV2LT5pcnEpOwkvKiByYWN5LCBidXQgdGhhdCdzIG9rIGhlcmUgKi8KIAlmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7CiAKIAlydGw4MTM5X3R4X2NsZWFyICh0cCk7CkBAIC0yMzgzLDIwICsyMzg4LDI0IEBACiAJbnAtPm1zZ19lbmFibGUgPSBkYXR1bTsKIH0KIAotLyogVE9ETzogd2UgYXJlIHRvbyBzbGFjayB0byBkbyByZWcgZHVtcGluZyBmb3IgcGlvLCBmb3Igbm93ICovCi0jaWZkZWYgQ09ORklHXzgxMzlUT09fUElPCi0jZGVmaW5lIHJ0bDgxMzlfZ2V0X3JlZ3NfbGVuCU5VTEwKLSNkZWZpbmUgcnRsODEzOV9nZXRfcmVncwlOVUxMCi0jZWxzZQogc3RhdGljIGludCBydGw4MTM5X2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICpucDsKKwkvKiBUT0RPOiB3ZSBhcmUgdG9vIHNsYWNrIHRvIGRvIHJlZyBkdW1waW5nIGZvciBwaW8sIGZvciBub3cgKi8KKwlpZiAodXNlX2lvKQorCQlyZXR1cm4gMDsKKwlucCA9IG5ldGRldl9wcml2KGRldik7CiAJcmV0dXJuIG5wLT5yZWdzX2xlbjsKIH0KIAogc3RhdGljIHZvaWQgcnRsODEzOV9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpyZWdidWYpCiB7Ci0Jc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKm5wOworCisJLyogVE9ETzogd2UgYXJlIHRvbyBzbGFjayB0byBkbyByZWcgZHVtcGluZyBmb3IgcGlvLCBmb3Igbm93ICovCisJaWYgKHVzZV9pbykKKwkJcmV0dXJuOworCW5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXJlZ3MtPnZlcnNpb24gPSBSVExfUkVHU19WRVI7CiAKQEAgLTI0MDQsNyArMjQxMyw2IEBACiAJbWVtY3B5X2Zyb21pbyhyZWdidWYsIG5wLT5tbWlvX2FkZHIsIHJlZ3MtPmxlbik7CiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiB9Ci0jZW5kaWYgLyogQ09ORklHXzgxMzlUT09fTU1JTyAqLwogCiBzdGF0aWMgaW50IHJ0bDgxMzlfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCiB7CkBAIC0yNDcyLDEyICsyNDgwLDEyIEBACiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlICgmdHAtPmxvY2ssIGZsYWdzKTsKLQkJdHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gUlRMX1IzMiAoUnhNaXNzZWQpOworCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gUlRMX1IzMiAoUnhNaXNzZWQpOwogCQlSVExfVzMyIChSeE1pc3NlZCwgMCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ0cC0+bG9jaywgZmxhZ3MpOwogCX0KIAotCXJldHVybiAmdHAtPnN0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogLyogU2V0IG9yIGNsZWFyIHRoZSBtdWx0aWNhc3QgZmlsdGVyIGZvciB0aGlzIGFkYXB0b3IuCkBAIC0yNTYxLDcgKzI1NjksNyBAQAogCVJUTF9XOCAoQ2hpcENtZCwgMCk7CiAKIAkvKiBVcGRhdGUgdGhlIGVycm9yIGNvdW50cy4gKi8KLQl0cC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSBSVExfUjMyIChSeE1pc3NlZCk7CisJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IFJUTF9SMzIgKFJ4TWlzc2VkKTsKIAlSVExfVzMyIChSeE1pc3NlZCwgMCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHAtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuaCBiL2RyaXZlcnMvbmV0LzgzOTAuaAppbmRleCAwNGRkZWMwLi44ZTIwOWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmgKKysrIGIvZHJpdmVycy9uZXQvODM5MC5oCkBAIC0zMCw4ICszMCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIGV4dGVybiB2b2lkIGVpX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBlaXBfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgogCisvKiBXaXRob3V0IEkvTyBkZWxheSAtIG5vbiBJU0Egb3IgbGF0ZXIgY2hpcHMgKi8KIGV4dGVybiB2b2lkIE5TODM5MF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGFydHApOwogZXh0ZXJuIGludCBlaV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBlaV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTQyLDYgKzQ0LDE3IEBACiAJcmV0dXJuIF9fYWxsb2NfZWlfbmV0ZGV2KDApOwogfQogCisvKiBXaXRoIEkvTyBkZWxheSBmb3JtICovCitleHRlcm4gdm9pZCBOUzgzOTBwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXJ0cCk7CitleHRlcm4gaW50IGVpcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBlaXBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaXJxcmV0dXJuX3QgZWlwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpfX2FsbG9jX2VpcF9uZXRkZXYoaW50IHNpemUpOworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfZWlwX25ldGRldih2b2lkKQoreworCXJldHVybiBfX2FsbG9jX2VpcF9uZXRkZXYoMCk7Cit9CisKIC8qIFlvdSBoYXZlIG9uZSBvZiB0aGVzZSBwZXItYm9hcmQgKi8KIHN0cnVjdCBlaV9kZXZpY2UgewogCWNvbnN0IGNoYXIgKm5hbWU7CkBAIC02OSw3ICs4Miw2IEBACiAJdW5zaWduZWQgY2hhciByZWcwOwkJLyogUmVnaXN0ZXIgJzAnIGluIGEgV0Q4MDEzICovCiAJdW5zaWduZWQgY2hhciByZWc1OwkJLyogUmVnaXN0ZXIgJzUnIGluIGEgV0Q4MDEzICovCiAJdW5zaWduZWQgY2hhciBzYXZlZF9pcnE7CS8qIE9yaWdpbmFsIGRldi0+aXJxIHZhbHVlLiAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXQ7CS8qIFRoZSBuZXcgc3RhdGlzdGljcyB0YWJsZS4gKi8KIAl1MzIgKnJlZ19vZmZzZXQ7CQkvKiBSZWdpc3RlciBtYXBwaW5nIHRhYmxlICovCiAJc3BpbmxvY2tfdCBwYWdlX2xvY2s7CQkvKiBQYWdlIHJlZ2lzdGVyIGxvY2tzICovCiAJdW5zaWduZWQgbG9uZyBwcml2OwkJLyogUHJpdmF0ZSBmaWVsZCB0byBzdG9yZSBidXMgSURzIGV0Yy4gKi8KQEAgLTExNiwxMyArMTI4LDE0IEBACiAvKgogICoJT25seSBnZW5lcmF0ZSBpbmRpcmVjdCBsb2FkcyBnaXZlbiBhIG1hY2hpbmUgdGhhdCBuZWVkcyB0aGVtLgogICogICAgICAtIHJlbW92ZWQgQU1JR0FfUENNQ0lBIGZyb20gdGhpcyBsaXN0LCBoYW5kbGVkIGFzIElTQSBpbyBub3cKKyAqCS0gdGhlIF9wIGZvciBnZW5lcmF0ZXMgbm8gZGVsYXkgYnkgZGVmYXVsdCA4MzkwcC5jIG92ZXJyaWRlcyB0aGlzLgogICovCiAKICNpZm5kZWYgZWlfaW5iCiAjZGVmaW5lIGVpX2luYihfcCkJaW5iKF9wKQogI2RlZmluZSBlaV9vdXRiKF92LF9wKQlvdXRiKF92LF9wKQotI2RlZmluZSBlaV9pbmJfcChfcCkJaW5iX3AoX3ApCi0jZGVmaW5lIGVpX291dGJfcChfdixfcCkgb3V0Yl9wKF92LF9wKQorI2RlZmluZSBlaV9pbmJfcChfcCkJaW5iKF9wKQorI2RlZmluZSBlaV9vdXRiX3AoX3YsX3ApIG91dGIoX3YsX3ApCiAjZW5kaWYKIAogI2lmbmRlZiBFSV9TSElGVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODM5MHAuYyBiL2RyaXZlcnMvbmV0LzgzOTBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmMTk4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0LzgzOTBwLmMKQEAgLTAsMCArMSw2NiBAQAorLyogODM5MCBjb3JlIGZvciBJU0EgZGV2aWNlcyBuZWVkaW5nIGJ1cyBkZWxheXMgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0KKyAgICAiODM5MHAuYzp2MS4xMGN2cyA5LzIzLzk0IERvbmFsZCBCZWNrZXIgKGJlY2tlckBjZXNkaXMuZ3NmYy5uYXNhLmdvdilcbiI7CisKKyNkZWZpbmUgZWlfaW5iKF9wKQlpbmIoX3ApCisjZGVmaW5lIGVpX291dGIoX3YsX3ApCW91dGIoX3YsX3ApCisjZGVmaW5lIGVpX2luYl9wKF9wKQlpbmJfcChfcCkKKyNkZWZpbmUgZWlfb3V0Yl9wKF92LF9wKSBvdXRiX3AoX3YsX3ApCisKKyNpbmNsdWRlICJsaWI4MzkwLmMiCisKK2ludCBlaXBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBfX2VpX29wZW4oZGV2KTsKK30KKworaW50IGVpcF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBfX2VpX2Nsb3NlKGRldik7Cit9CisKK2lycXJldHVybl90IGVpcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXJldHVybiBfX2VpX2ludGVycnVwdChpcnEsIGRldl9pZCk7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgordm9pZCBlaXBfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCV9fZWlfcG9sbChkZXYpOworfQorI2VuZGlmCisKK3N0cnVjdCBuZXRfZGV2aWNlICpfX2FsbG9jX2VpcF9uZXRkZXYoaW50IHNpemUpCit7CisJcmV0dXJuIF9fX19hbGxvY19laV9uZXRkZXYoc2l6ZSk7Cit9CisKK3ZvaWQgTlM4MzkwcF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGFydHApCit7CisJcmV0dXJuIF9fTlM4MzkwX2luaXQoZGV2LCBzdGFydHApOworfQorCitFWFBPUlRfU1lNQk9MKGVpcF9vcGVuKTsKK0VYUE9SVF9TWU1CT0woZWlwX2Nsb3NlKTsKK0VYUE9SVF9TWU1CT0woZWlwX2ludGVycnVwdCk7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK0VYUE9SVF9TWU1CT0woZWlwX3BvbGwpOworI2VuZGlmCitFWFBPUlRfU1lNQk9MKE5TODM5MHBfaW5pdCk7CitFWFBPUlRfU1lNQk9MKF9fYWxsb2NfZWlwX25ldGRldik7CisKKyNpZiBkZWZpbmVkKE1PRFVMRSkKKworaW50IGluaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKK30KKworI2VuZGlmIC8qIE1PRFVMRSAqLworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggMjY4M2VlMy4uZmE1MzNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0yNiwxNCArMjYsNiBAQAogIyB0aGF0IGZvciBlYWNoIG9mIHRoZSBzeW1ib2xzLgogaWYgTkVUREVWSUNFUwogCi1jb25maWcgTkVUREVWSUNFU19NVUxUSVFVRVVFCi0JYm9vbCAiTmV0ZGV2aWNlIG11bHRpcGxlIGhhcmR3YXJlIHF1ZXVlIHN1cHBvcnQiCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBhbGxvdyB0aGUgbmV0d29yayBzdGFjayB0byB1c2UgbXVsdGlwbGUKLQkgIGhhcmR3YXJlIFRYIHF1ZXVlcyBvbiBhbiBldGhlcm5ldCBkZXZpY2UuCi0KLQkgIE1vc3QgcGVvcGxlIHdpbGwgc2F5IE4gaGVyZS4KLQogY29uZmlnIElGQgogCXRyaXN0YXRlICJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkVUX0NMU19BQ1QKQEAgLTMzMywxNSArMzI1LDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFwbmUuCiAKLWNvbmZpZyBBUE9MTE9fRUxQTFVTCi0JdHJpc3RhdGUgIkFwb2xsbyAzYzUwNSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVBPTExPCi0JaGVscAotCSAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdXIgQXBvbGxvIGhhcyBhIDNDb20gM2M1MDUgSVNBIEV0aGVybmV0IGNhcmQuCi0JICBJZiB5b3UgZG9uJ3QgaGF2ZSBvbmUgbWFkZSBmb3IgQXBvbGxvcywgeW91IGNhbiB1c2Ugb25lIGZyb20gYSBQQywKLQkgIGV4Y2VwdCB0aGF0IHlvdXIgQXBvbGxvIHdvbid0IGJlIGFibGUgdG8gYm9vdCBmcm9tIGl0IChiZWNhdXNlIHRoZQotCSAgY29kZSBpbiB0aGUgUk9NIHdpbGwgYmUgZm9yIGEgUEMpLgotCiBjb25maWcgTUFDODM5MAogCWJvb2wgIk1hY2ludG9zaCBOUyA4MzkwIGJhc2VkIGV0aGVybmV0IGNhcmRzIgogCWRlcGVuZHMgb24gTUFDCkBAIC01MjQsNiArNTA3LDE4IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBTSF9FVEgKKwl0cmlzdGF0ZSAiUmVuZXNhcyBTdXBlckggRXRoZXJuZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNVUEVSSCAmJiBcCisJCShDUFVfU1VCVFlQRV9TSDc3MTAgfHwgQ1BVX1NVQlRZUEVfU0g3NzEyKQorCXNlbGVjdCBDUkMzMgorCXNlbGVjdCBNSUkKKwlzZWxlY3QgTURJT19CSVRCQU5HCisJc2VsZWN0IFBIWUxJQgorCWhlbHAKKwkgIFJlbmVzYXMgU3VwZXJIIEV0aGVybmV0IGRldmljZSBkcml2ZXIuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0IFNINzcxMCBhbmQgU0g3NzEyLgorCiBjb25maWcgU1VOTEFOQ0UKIAl0cmlzdGF0ZSAiU3VuIExBTkNFIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTQlVTCkBAIC05MjYsNiArOTIxLDIzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgVGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgZG05MDAwLgogCitjb25maWcgRE05MDAwX0RFQlVHTEVWRUwKKwlpbnQgIkRNOTAwMCBtYXhpbXVtIGRlYnVnIGxldmVsIgorCWRlcGVuZHMgb24gRE05MDAwCisJZGVmYXVsdCA0CisJaGVscAorCSAgVGhlIG1heGltdW0gbGV2ZWwgb2YgZGVidWdnaW5nIGNvZGUgY29tcGlsZWQgaW50byB0aGUgRE05MDAwCisJICBkcml2ZXIuCisKK2NvbmZpZyBETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMCisJYm9vbCAiRm9yY2Ugc2ltcGxlIE5TUiBiYXNlZCBQSFkgcG9sbGluZyIKKwlkZXBlbmRzIG9uIERNOTAwMAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgY29uZmlndXJhdGlvbiBmb3JjZXMgdGhlIERNOTAwMCB0byB1c2UgdGhlIE5TUidzIExpbmtTdGF0dXMKKwkgIGJpdCB0byBkZXRlcm1pbmUgaWYgdGhlIGxpbmsgaXMgdXAgb3IgZG93biBpbnN0ZWFkIG9mIHRoZSBtb3JlCisJICBjb3N0bHkgTUlJIFBIWSByZWFkcy4gTm90ZSwgdGhpcyB3aWxsIG5vdCB3b3JrIGlmIHRoZSBjaGlwIGlzCisJICBvcGVyYXRpbmcgd2l0aCBhbiBleHRlcm5hbCBQSFkuCisKIGNvbmZpZyBFTkMyOEo2MAogCXRyaXN0YXRlICJFTkMyOEo2MCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFNQSSAmJiBORVRfRVRIRVJORVQKQEAgLTk0MywxOSArOTU1LDExIEBACiAJICBFbmFibGUgdGhlIHZlcmlmeSBhZnRlciB0aGUgYnVmZmVyIHdyaXRlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2UuCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgRE05MDAwX0RFQlVHTEVWRUwKLQlpbnQgIkRNOTAwMCBtYXhpbXVtIGRlYnVnIGxldmVsIgotCWRlcGVuZHMgb24gRE05MDAwCi0JZGVmYXVsdCA0Ci0JaGVscAotCSAgVGhlIG1heGltdW0gbGV2ZWwgb2YgZGVidWdnaW5nIGNvZGUgY29tcGlsZWQgaW50byB0aGUgRE05MDAwCi0JICBkcml2ZXIuCi0KIGNvbmZpZyBTTUM5MTFYCiAJdHJpc3RhdGUgIlNNU0MgTEFOOTExWzU2NzhdIHN1cHBvcnQiCiAJc2VsZWN0IENSQzMyCiAJc2VsZWN0IE1JSQotCWRlcGVuZHMgb24gQVJDSF9QWEEgfHwgU0hfTUFHSUNfUEFORUxfUjIKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBIHx8IFNVUEVSSAogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFNNU0MncyBMQU45MTF4IHNlcmllcyBvZiBFdGhlcm5ldCBjaGlwc2V0cwogCSAgaW5jbHVkaW5nIHRoZSBuZXcgTEFOOTExNSwgTEFOOTExNiwgTEFOOTExNywgYW5kIExBTjkxMTguCkBAIC0xMjQzLDcgKzEyNDcsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgaWJtdmV0aC4KIAotc291cmNlICJkcml2ZXJzL25ldC9pYm1fZW1hYy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9LY29uZmlnIgogCiBjb25maWcgTkVUX1BDSQpAQCAtMTI4NiwyMCArMTI4OSw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBhbWQ4MTExZS4KIAotY29uZmlnIEFNRDgxMTFFX05BUEkKLQlib29sICJVc2UgUlggcG9sbGluZyAoTkFQSSkiCi0JZGVwZW5kcyBvbiBBTUQ4MTExX0VUSAotCWhlbHAKLQkgIE5BUEkgaXMgYSBuZXcgZHJpdmVyIEFQSSBkZXNpZ25lZCB0byByZWR1Y2UgQ1BVIGFuZCBpbnRlcnJ1cHQgbG9hZAotCSAgd2hlbiB0aGUgZHJpdmVyIGlzIHJlY2VpdmluZyBsb3RzIG9mIHBhY2tldHMgZnJvbSB0aGUgY2FyZC4gSXQgaXMKLQkgIHN0aWxsIHNvbWV3aGF0IGV4cGVyaW1lbnRhbCBhbmQgdGh1cyBub3QgeWV0IGVuYWJsZWQgYnkgZGVmYXVsdC4KLQotCSAgSWYgeW91ciBlc3RpbWF0ZWQgUnggbG9hZCBpcyAxMGtwcHMgb3IgbW9yZSwgb3IgaWYgdGhlIGNhcmQgd2lsbCBiZQotCSAgZGVwbG95ZWQgb24gcG90ZW50aWFsbHkgdW5mcmllbmRseSBuZXR3b3JrcyAoZS5nLiBpbiBhIGZpcmV3YWxsKSwKLQkgIHRoZW4gc2F5IFkgaGVyZS4KLQotCSAgSWYgaW4gZG91YnQsIHNheSBOLgotCiBjb25maWcgQURBUFRFQ19TVEFSRklSRQogCXRyaXN0YXRlICJBZGFwdGVjIFN0YXJmaXJlL0R1cmFMQU4gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE5FVF9QQ0kgJiYgUENJCkBAIC0xMzE0LDIwICsxMzAzLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHN0YXJmaXJlLiAgVGhpcyBpcyByZWNvbW1lbmRlZC4KIAotY29uZmlnIEFEQVBURUNfU1RBUkZJUkVfTkFQSQotCWJvb2wgIlVzZSBSeCBQb2xsaW5nIChOQVBJKSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEFEQVBURUNfU1RBUkZJUkUgJiYgRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgTkFQSSBpcyBhIG5ldyBkcml2ZXIgQVBJIGRlc2lnbmVkIHRvIHJlZHVjZSBDUFUgYW5kIGludGVycnVwdCBsb2FkCi0JICB3aGVuIHRoZSBkcml2ZXIgaXMgcmVjZWl2aW5nIGxvdHMgb2YgcGFja2V0cyBmcm9tIHRoZSBjYXJkLiBJdCBpcwotCSAgc3RpbGwgc29tZXdoYXQgZXhwZXJpbWVudGFsIGFuZCB0aHVzIG5vdCB5ZXQgZW5hYmxlZCBieSBkZWZhdWx0LgotCi0JICBJZiB5b3VyIGVzdGltYXRlZCBSeCBsb2FkIGlzIDEwa3BwcyBvciBtb3JlLCBvciBpZiB0aGUgY2FyZCB3aWxsIGJlCi0JICBkZXBsb3llZCBvbiBwb3RlbnRpYWxseSB1bmZyaWVuZGx5IG5ldHdvcmtzIChlLmcuIGluIGEgZmlyZXdhbGwpLAotCSAgdGhlbiBzYXkgWSBoZXJlLgotCi0JICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KIGNvbmZpZyBBQzMyMDAKIAl0cmlzdGF0ZSAiQW5zZWwgQ29tbXVuaWNhdGlvbnMgRUlTQSAzMjAwIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBORVRfUENJICYmIChJU0EgfHwgRUlTQSkgJiYgRVhQRVJJTUVOVEFMCkBAIC0xNjcwLDcgKzE2NDUsNyBAQAogCiBjb25maWcgVExBTgogCXRyaXN0YXRlICJUSSBUaHVuZGVyTEFOIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfUENJICYmIChQQ0kgfHwgRUlTQSkgJiYgITY0QklUCisJZGVwZW5kcyBvbiBORVRfUENJICYmIChQQ0kgfHwgRUlTQSkKIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhIFBDSSBFdGhlcm5ldCBuZXR3b3JrIGNhcmQgYmFzZWQgb24gdGhlIFRodW5kZXJMQU4gY2hpcAogCSAgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBzYXkgWSBhbmQgcmVhZCB0aGUKQEAgLTE3MTAsMjYgKzE2ODUsNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCi1jb25maWcgVklBX1JISU5FX05BUEkKLQlib29sICJVc2UgUnggUG9sbGluZyAoTkFQSSkiCi0JZGVwZW5kcyBvbiBWSUFfUkhJTkUKLQloZWxwCi0JICBOQVBJIGlzIGEgbmV3IGRyaXZlciBBUEkgZGVzaWduZWQgdG8gcmVkdWNlIENQVSBhbmQgaW50ZXJydXB0IGxvYWQKLQkgIHdoZW4gdGhlIGRyaXZlciBpcyByZWNlaXZpbmcgbG90cyBvZiBwYWNrZXRzIGZyb20gdGhlIGNhcmQuCi0KLQkgIElmIHlvdXIgZXN0aW1hdGVkIFJ4IGxvYWQgaXMgMTBrcHBzIG9yIG1vcmUsIG9yIGlmIHRoZSBjYXJkIHdpbGwgYmUKLQkgIGRlcGxveWVkIG9uIHBvdGVudGlhbGx5IHVuZnJpZW5kbHkgbmV0d29ya3MgKGUuZy4gaW4gYSBmaXJld2FsbCksCi0JICB0aGVuIHNheSBZIGhlcmUuCi0KLWNvbmZpZyBMQU5fU0FBOTczMAotCWJvb2wgIlBoaWxpcHMgU0FBOTczMCBFdGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX1BDSSAmJiBQQ0kgJiYgTUlQU19BVExBUwotCWhlbHAKLQkgIFRoZSBTQUE5NzMwIGlzIGEgY29tYmluZWQgbXVsdGltZWRpYSBhbmQgcGVyaXBoZXJhbCBjb250cm9sbGVyIHVzZWQKLQkgIGluIHRoaW4gY2xpZW50cywgSW50ZXJuZXQgYWNjZXNzIHRlcm1pbmFscywgYW5kIGRpc2tsZXNzCi0JICB3b3Jrc3RhdGlvbnMuCi0JICBTZWUgPGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMucGhpbGlwcy5jb20vcGlwL1NBQTk3MzBfZmx5ZXJfMT4uCi0KIGNvbmZpZyBTQzkyMDMxCiAJdHJpc3RhdGUgIlNpbGFuIFNDOTIwMzEgUENJIEZhc3QgRXRoZXJuZXQgQWRhcHRlciBkcml2ZXIgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBORVRfUENJICYmIFBDSSAmJiBFWFBFUklNRU5UQUwKQEAgLTE5NzEsMjAgKzE5MjYsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgZTEwMDAuCiAKLWNvbmZpZyBFMTAwMF9OQVBJCi0JYm9vbCAiVXNlIFJ4IFBvbGxpbmcgKE5BUEkpIgotCWRlcGVuZHMgb24gRTEwMDAKLQloZWxwCi0JICBOQVBJIGlzIGEgbmV3IGRyaXZlciBBUEkgZGVzaWduZWQgdG8gcmVkdWNlIENQVSBhbmQgaW50ZXJydXB0IGxvYWQKLQkgIHdoZW4gdGhlIGRyaXZlciBpcyByZWNlaXZpbmcgbG90cyBvZiBwYWNrZXRzIGZyb20gdGhlIGNhcmQuIEl0IGlzCi0JICBzdGlsbCBzb21ld2hhdCBleHBlcmltZW50YWwgYW5kIHRodXMgbm90IHlldCBlbmFibGVkIGJ5IGRlZmF1bHQuCi0KLQkgIElmIHlvdXIgZXN0aW1hdGVkIFJ4IGxvYWQgaXMgMTBrcHBzIG9yIG1vcmUsIG9yIGlmIHRoZSBjYXJkIHdpbGwgYmUKLQkgIGRlcGxveWVkIG9uIHBvdGVudGlhbGx5IHVuZnJpZW5kbHkgbmV0d29ya3MgKGUuZy4gaW4gYSBmaXJld2FsbCksCi0JICB0aGVuIHNheSBZIGhlcmUuCi0KLQkgIElmIGluIGRvdWJ0LCBzYXkgTi4KLQogY29uZmlnIEUxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUCiAJYm9vbCAiRGlzYWJsZSBQYWNrZXQgU3BsaXQgZm9yIFBDSSBleHByZXNzIGFkYXB0ZXJzIgogCWRlcGVuZHMgb24gRTEwMDAKQEAgLTIwMTMsOSArMTk1NCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBlMTAwMGUuCiAKLWNvbmZpZyBFMTAwMEVfRU5BQkxFRAotCWRlZl9ib29sIEUxMDAwRSAhPSBuCi0KIGNvbmZpZyBJUDEwMDAKIAl0cmlzdGF0ZSAiSVAxMDAwIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBFWFBFUklNRU5UQUwKQEAgLTIwNDcsNiArMTk4NSwxNSBAQAogICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQogICAgICAgICAgd2lsbCBiZSBjYWxsZWQgaWdiLgogCitjb25maWcgSUdCX0xSTyAKKwlib29sICJVc2Ugc29mdHdhcmUgTFJPIgorCWRlcGVuZHMgb24gSUdCICYmIElORVQKKwlzZWxlY3QgSU5FVF9MUk8KKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBsYXJnZSByZWNlaXZlIG9mZmxvYWQuIAorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCisKIHNvdXJjZSAiZHJpdmVycy9uZXQvaXhwMjAwMC9LY29uZmlnIgogCiBjb25maWcgTVlSSV9TQlVTCkBAIC0yMTA0LDI3ICsyMDUxLDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCByODE2OS4gIFRoaXMgaXMgcmVjb21tZW5kZWQuCiAKLWNvbmZpZyBSODE2OV9OQVBJCi0JYm9vbCAiVXNlIFJ4IFBvbGxpbmcgKE5BUEkpIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUjgxNjkgJiYgRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgTkFQSSBpcyBhIG5ldyBkcml2ZXIgQVBJIGRlc2lnbmVkIHRvIHJlZHVjZSBDUFUgYW5kIGludGVycnVwdCBsb2FkCi0JICB3aGVuIHRoZSBkcml2ZXIgaXMgcmVjZWl2aW5nIGxvdHMgb2YgcGFja2V0cyBmcm9tIHRoZSBjYXJkLiBJdCBpcwotCSAgc3RpbGwgc29tZXdoYXQgZXhwZXJpbWVudGFsIGFuZCB0aHVzIG5vdCB5ZXQgZW5hYmxlZCBieSBkZWZhdWx0LgotCi0JICBJZiB5b3VyIGVzdGltYXRlZCBSeCBsb2FkIGlzIDEwa3BwcyBvciBtb3JlLCBvciBpZiB0aGUgY2FyZCB3aWxsIGJlCi0JICBkZXBsb3llZCBvbiBwb3RlbnRpYWxseSB1bmZyaWVuZGx5IG5ldHdvcmtzIChlLmcuIGluIGEgZmlyZXdhbGwpLAotCSAgdGhlbiBzYXkgWSBoZXJlLgotCi0JICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KIGNvbmZpZyBSODE2OV9WTEFOCiAJYm9vbCAiVkxBTiBzdXBwb3J0IgogCWRlcGVuZHMgb24gUjgxNjkgJiYgVkxBTl84MDIxUQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgZm9yIHRoZSByODE2OSBkcml2ZXIgdG8gc3VwcG9ydCB0aGUgZnVuY3Rpb25zIHJlcXVpcmVkCiAJICBieSB0aGUga2VybmVsIDgwMi4xUSBjb2RlLgotCSAgCisKIAkgIElmIGluIGRvdWJ0LCBzYXkgWS4KIAogY29uZmlnIFNCMTI1MF9NQUMKQEAgLTIyMjcsNiArMjE2MCw3IEBACiBjb25maWcgVElHT04zCiAJdHJpc3RhdGUgIkJyb2FkY29tIFRpZ29uMyBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEJyb2FkY29tIFRpZ29uMyBiYXNlZCBnaWdhYml0IEV0aGVybmV0IGNhcmRzLgogCkBAIC0yMjgyLDYgKzIyMTYsMTkgQEAKIAkgIHRoZSBkcml2ZXIgYXV0b21hdGljYWxseSBkaXN0aW5ndWlzaGVzIHRoZSBtb2RlbHMsIHlvdSBjYW4KIAkgIHNhZmVseSBlbmFibGUgdGhpcyBvcHRpb24gZXZlbiBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzLWxlc3MgbW9kZWwuCiAKK2NvbmZpZyBHRUxJQ19XSVJFTEVTU19PTERfUFNLX0lOVEVSRkFDRQorICAgICAgIGJvb2wgIlBTMyBXaXJlbGVzcyBwcml2YXRlIFBTSyBpbnRlcmZhY2UgKE9CU09MRVRFKSIKKyAgICAgICBkZXBlbmRzIG9uIEdFTElDX1dJUkVMRVNTCisgICAgICAgaGVscAorICAgICAgICAgIFRoaXMgb3B0aW9uIHJldGFpbnMgdGhlIG9ic29sZXRlIHByaXZhdGUgaW50ZXJmYWNlIHRvIHBhc3MKKyAgICAgICAgICB0aGUgUFNLIGZyb20gdXNlciBzcGFjZSBwcm9ncmFtcyB0byB0aGUgZHJpdmVyLiAgVGhlIFBTSworICAgICAgICAgIHN0YW5kcyBmb3IgJ1ByZSBTaGFyZWQgS2V5JyBhbmQgaXMgdXNlZCBmb3IgV1BBWzJdLVBTSworICAgICAgICAgIChXUEEtUGVyc29uYWwpIGVudmlyb25tZW50LgorICAgICAgICAgIElmIFdQQVsyXS1QU0sgaXMgdXNlZCBhbmQgeW91IG5lZWQgdG8gdXNlIG9sZCBwcm9ncmFtcyB0aGF0CisgICAgICAgICAgc3VwcG9ydCBvbmx5IHRoaXMgb2xkIGludGVyZmFjZSwgc2F5IFkuICBPdGhlcndpc2UgTi4KKworICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBHSUFORkFSCiAJdHJpc3RhdGUgIkdpYW5mYXIgRXRoZXJuZXQiCiAJZGVwZW5kcyBvbiBGU0xfU09DCkBAIC0yMjkxLDEwICsyMjM4LDYgQEAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IFRTRUMgb24gdGhlIE1QQzgzeHgsIE1QQzg1eHgsCiAJICBhbmQgTVBDODZ4eCBmYW1pbHkgb2YgY2hpcHMsIGFuZCB0aGUgRkVDIG9uIHRoZSA4NTQwLgogCi1jb25maWcgR0ZBUl9OQVBJCi0JYm9vbCAiVXNlIFJ4IFBvbGxpbmcgKE5BUEkpIgotCWRlcGVuZHMgb24gR0lBTkZBUgotCiBjb25maWcgVUNDX0dFVEgKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIFFFIEdpZ2FiaXQgRXRoZXJuZXQiCiAJZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkUKQEAgLTIzMDMsMTAgKzIyNDYsNiBAQAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgRXRoZXJuZXQgbW9kZSBvZiB0aGUgUVVJQ0MgRW5naW5lLAogCSAgd2hpY2ggaXMgYXZhaWxhYmxlIG9uIHNvbWUgRnJlZXNjYWxlIFNPQ3MuCiAKLWNvbmZpZyBVR0VUSF9OQVBJCi0JYm9vbCAiVXNlIFJ4IFBvbGxpbmcgKE5BUEkpIgotCWRlcGVuZHMgb24gVUNDX0dFVEgKLQogY29uZmlnIFVHRVRIX01BR0lDX1BBQ0tFVAogCWJvb2wgIk1hZ2ljIFBhY2tldCBkZXRlY3Rpb24gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVDQ19HRVRICkBAIC0yMzUxLDYgKzIyOTAsMTcgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBhdGwxLgogCitjb25maWcgQVRMMUUKKwl0cmlzdGF0ZSAiQXRoZXJvcyBMMUUgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gUENJICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBDUkMzMgorCXNlbGVjdCBNSUkKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQXRoZXJvcyBMMUUgZ2lnYWJpdCBldGhlcm5ldCBhZGFwdGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgVGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYXRsMWUuCisKIGVuZGlmICMgTkVUREVWXzEwMDAKIAogIwpAQCAtMjM5NiwxOCArMjM0NiwxMSBAQAogICAgICAgICAgIEVuYWJsZXMgc3VwcG9ydCBmb3IgQ2hlbHNpbydzIGdpZ2FiaXQgRXRoZXJuZXQgUENJIGNhcmRzLiAgSWYgeW91CiAgICAgICAgICAgYXJlIHVzaW5nIG9ubHkgMTBHIGNhcmRzIHNheSAnTicgaGVyZS4KIAotY29uZmlnIENIRUxTSU9fVDFfTkFQSQotCWJvb2wgIlVzZSBSeCBQb2xsaW5nIChOQVBJKSIKLQlkZXBlbmRzIG9uIENIRUxTSU9fVDEKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBOQVBJIGlzIGEgZHJpdmVyIEFQSSBkZXNpZ25lZCB0byByZWR1Y2UgQ1BVIGFuZCBpbnRlcnJ1cHQgbG9hZAotCSAgd2hlbiB0aGUgZHJpdmVyIGlzIHJlY2VpdmluZyBsb3RzIG9mIHBhY2tldHMgZnJvbSB0aGUgY2FyZC4KLQogY29uZmlnIENIRUxTSU9fVDMKIAl0cmlzdGF0ZSAiQ2hlbHNpbyBDb21tdW5pY2F0aW9ucyBUMyAxMEdiIEV0aGVybmV0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCiAJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBJTkVUX0xSTwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIENoZWxzaW8gVDMtYmFzZWQgZ2lnYWJpdCBhbmQgMTBHYiBFdGhlcm5ldAogCSAgYWRhcHRlcnMuCkBAIC0yNDM1LDcgKzIzNzgsOCBAQAogCiBjb25maWcgSVhHQkUKIAl0cmlzdGF0ZSAiSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIElORVQKKwlzZWxlY3QgSU5FVF9MUk8KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2YKIAkgIGFkYXB0ZXJzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28KQEAgLTI0NzMsMjAgKzI0MTcsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaXhnYi4KIAotY29uZmlnIElYR0JfTkFQSQotCWJvb2wgIlVzZSBSeCBQb2xsaW5nIChOQVBJKSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIElYR0IgJiYgRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgTkFQSSBpcyBhIG5ldyBkcml2ZXIgQVBJIGRlc2lnbmVkIHRvIHJlZHVjZSBDUFUgYW5kIGludGVycnVwdCBsb2FkCi0JICB3aGVuIHRoZSBkcml2ZXIgaXMgcmVjZWl2aW5nIGxvdHMgb2YgcGFja2V0cyBmcm9tIHRoZSBjYXJkLiBJdCBpcwotCSAgc3RpbGwgc29tZXdoYXQgZXhwZXJpbWVudGFsIGFuZCB0aHVzIG5vdCB5ZXQgZW5hYmxlZCBieSBkZWZhdWx0LgotCi0JICBJZiB5b3VyIGVzdGltYXRlZCBSeCBsb2FkIGlzIDEwa3BwcyBvciBtb3JlLCBvciBpZiB0aGUgY2FyZCB3aWxsIGJlCi0JICBkZXBsb3llZCBvbiBwb3RlbnRpYWxseSB1bmZyaWVuZGx5IG5ldHdvcmtzIChlLmcuIGluIGEgZmlyZXdhbGwpLAotCSAgdGhlbiBzYXkgWSBoZXJlLgotCi0JICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KIGNvbmZpZyBTMklPCiAJdHJpc3RhdGUgIlMySU8gMTBHYmUgWEZyYW1lIE5JQyIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtMjQ5NSwyMCArMjQyNSw2IEBACiAJICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW4gCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQ+LgogCi1jb25maWcgUzJJT19OQVBJCi0JYm9vbCAiVXNlIFJ4IFBvbGxpbmcgKE5BUEkpIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUzJJTyAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBOQVBJIGlzIGEgbmV3IGRyaXZlciBBUEkgZGVzaWduZWQgdG8gcmVkdWNlIENQVSBhbmQgaW50ZXJydXB0IGxvYWQKLQkgIHdoZW4gdGhlIGRyaXZlciBpcyByZWNlaXZpbmcgbG90cyBvZiBwYWNrZXRzIGZyb20gdGhlIGNhcmQuIEl0IGlzCi0JICBzdGlsbCBzb21ld2hhdCBleHBlcmltZW50YWwgYW5kIHRodXMgbm90IHlldCBlbmFibGVkIGJ5IGRlZmF1bHQuCi0KLQkgIElmIHlvdXIgZXN0aW1hdGVkIFJ4IGxvYWQgaXMgMTBrcHBzIG9yIG1vcmUsIG9yIGlmIHRoZSBjYXJkIHdpbGwgYmUKLQkgIGRlcGxveWVkIG9uIHBvdGVudGlhbGx5IHVuZnJpZW5kbHkgbmV0d29ya3MgKGUuZy4gaW4gYSBmaXJld2FsbCksCi0JICB0aGVuIHNheSBZIGhlcmUuCi0KLQkgIElmIGluIGRvdWJ0LCBzYXkgTi4KLQogY29uZmlnIE1ZUkkxMEdFCiAJdHJpc3RhdGUgIk15cmljb20gTXlyaS0xMEcgRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCkBAIC0yNTczLDYgKzI0ODksNyBAQAogCXRyaXN0YXRlICJCcm9hZGNvbSBOZXRYdHJlbWVJSSAxMEdiIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgWkxJQl9JTkZMQVRFCisJc2VsZWN0IExJQkNSQzMyQwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEJyb2FkY29tIE5ldFh0cmVtZUlJIDEwIGdpZ2FiaXQgRXRoZXJuZXQgY2FyZHMuCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IDkwMTBlNTguLjc2MjljOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC00LDcgKzQsNiBAQAogCiBvYmotJChDT05GSUdfRTEwMDApICs9IGUxMDAwLwogb2JqLSQoQ09ORklHX0UxMDAwRSkgKz0gZTEwMDBlLwotb2JqLSQoQ09ORklHX0lCTV9FTUFDKSArPSBpYm1fZW1hYy8KIG9iai0kKENPTkZJR19JQk1fTkVXX0VNQUMpICs9IGlibV9uZXdlbWFjLwogb2JqLSQoQ09ORklHX0lHQikgKz0gaWdiLwogb2JqLSQoQ09ORklHX0lYR0JFKSArPSBpeGdiZS8KQEAgLTE2LDYgKzE1LDcgQEAKIG9iai0kKENPTkZJR19DQU4pICs9IGNhbi8KIG9iai0kKENPTkZJR19CT05ESU5HKSArPSBib25kaW5nLwogb2JqLSQoQ09ORklHX0FUTDEpICs9IGF0bHgvCitvYmotJChDT05GSUdfQVRMMUUpICs9IGF0bDFlLwogb2JqLSQoQ09ORklHX0dJQU5GQVIpICs9IGdpYW5mYXJfZHJpdmVyLm8KIG9iai0kKENPTkZJR19URUhVVEkpICs9IHRlaHV0aS5vCiAKQEAgLTY3LDYgKzY3LDcgQEAKIG9iai0kKENPTkZJR19USUdPTjMpICs9IHRnMy5vCiBvYmotJChDT05GSUdfQk5YMikgKz0gYm54Mi5vCiBvYmotJChDT05GSUdfQk5YMlgpICs9IGJueDJ4Lm8KK2JueDJ4LW9ianMgOj0gYm54MnhfbWFpbi5vIGJueDJ4X2xpbmsubwogc3BpZGVybmV0LXkgKz0gc3BpZGVyX25ldC5vIHNwaWRlcl9uZXRfZXRodG9vbC5vCiBvYmotJChDT05GSUdfU1BJREVSX05FVCkgKz0gc3BpZGVybmV0Lm8gc3VuZ2VtX3BoeS5vCiBvYmotJChDT05GSUdfR0VMSUNfTkVUKSArPSBwczNfZ2VsaWMubwpAQCAtODAsNiArODEsNyBAQAogb2JqLSQoQ09ORklHX1ZJQV9WRUxPQ0lUWSkgKz0gdmlhLXZlbG9jaXR5Lm8KIG9iai0kKENPTkZJR19BREFQVEVDX1NUQVJGSVJFKSArPSBzdGFyZmlyZS5vCiBvYmotJChDT05GSUdfUklPTkVUKSArPSByaW9uZXQubworb2JqLSQoQ09ORklHX1NIX0VUSCkgKz0gc2hfZXRoLm8KIAogIwogIyBlbmQgbGluayBvcmRlciBzZWN0aW9uCkBAIC0xMDUsMTEgKzEwNywxMSBAQAogZW5kaWYKIG9iai0kKENPTkZJR182ODM2MF9FTkVUKSArPSA2ODM2MGVuZXQubwogb2JqLSQoQ09ORklHX1dEODB4MykgKz0gd2QubyA4MzkwLm8KLW9iai0kKENPTkZJR19FTDIpICs9IDNjNTAzLm8gODM5MC5vCi1vYmotJChDT05GSUdfTkUyMDAwKSArPSBuZS5vIDgzOTAubwotb2JqLSQoQ09ORklHX05FMl9NQ0EpICs9IG5lMi5vIDgzOTAubwotb2JqLSQoQ09ORklHX0hQTEFOKSArPSBocC5vIDgzOTAubwotb2JqLSQoQ09ORklHX0hQTEFOX1BMVVMpICs9IGhwLXBsdXMubyA4MzkwLm8KK29iai0kKENPTkZJR19FTDIpICs9IDNjNTAzLm8gODM5MHAubworb2JqLSQoQ09ORklHX05FMjAwMCkgKz0gbmUubyA4MzkwcC5vCitvYmotJChDT05GSUdfTkUyX01DQSkgKz0gbmUyLm8gODM5MHAubworb2JqLSQoQ09ORklHX0hQTEFOKSArPSBocC5vIDgzOTBwLm8KK29iai0kKENPTkZJR19IUExBTl9QTFVTKSArPSBocC1wbHVzLm8gODM5MHAubwogb2JqLSQoQ09ORklHX1VMVFJBKSArPSBzbWMtdWx0cmEubyA4MzkwLm8KIG9iai0kKENPTkZJR19VTFRSQU1DQSkgKz0gc21jLW1jYS5vIDgzOTAubwogb2JqLSQoQ09ORklHX1VMVFJBMzIpICs9IHNtYy11bHRyYTMyLm8gODM5MC5vCkBAIC0xNjUsNyArMTY3LDYgQEAKIG9iai0kKENPTkZJR184MTM5Q1ApICs9IDgxMzljcC5vCiBvYmotJChDT05GSUdfODEzOVRPTykgKz0gODEzOXRvby5vCiBvYmotJChDT05GSUdfWk5FVCkgKz0gem5ldC5vCi1vYmotJChDT05GSUdfTEFOX1NBQTk3MzApICs9IHNhYTk3MzAubwogb2JqLSQoQ09ORklHX0NQTUFDKSArPSBjcG1hYy5vCiBvYmotJChDT05GSUdfREVQQ0EpICs9IGRlcGNhLm8KIG9iai0kKENPTkZJR19FV1JLMykgKz0gZXdyazMubwpAQCAtMjM1LDYgKzIzNiw3IEBACiBvYmotJChDT05GSUdfVVNCX0tBV0VUSCkgICAgICAgICs9IHVzYi8KIG9iai0kKENPTkZJR19VU0JfUEVHQVNVUykgICAgICAgKz0gdXNiLwogb2JqLSQoQ09ORklHX1VTQl9SVEw4MTUwKSAgICAgICArPSB1c2IvCitvYmotJChDT05GSUdfVVNCX0hTTykJCSs9IHVzYi8KIG9iai0kKENPTkZJR19VU0JfVVNCTkVUKSAgICAgICAgKz0gdXNiLwogb2JqLSQoQ09ORklHX1VTQl9aRDEyMDEpICAgICAgICArPSB1c2IvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2EyMDY1LmMgYi9kcml2ZXJzL25ldC9hMjA2NS5jCmluZGV4IDZjNTcxOWEuLjljMDgzNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2EyMDY1LmMKKysrIGIvZHJpdmVycy9uZXQvYTIwNjUuYwpAQCAtNDc1LDE2ICs0NzUsMTIgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0cnVjdCBuZXRfZGV2aWNlICpsYXN0X2RldjsKLQogc3RhdGljIGludCBsYW5jZV9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX3JlZ3MgKmxsID0gbHAtPmxsOwogCWludCByZXQ7CiAKLQlsYXN0X2RldiA9IGRldjsKLQogCS8qIFN0b3AgdGhlIExhbmNlICovCiAJbGwtPnJhcCA9IExFX0NTUjA7CiAJbGwtPnJkcCA9IExFX0MwX1NUT1A7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuYyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCmluZGV4IDZjMTkyNjUuLmU0NDgzZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC0xNDU3LDExICsxNDU3LDYgQEAKIAlhY2Vfc2V0X3R4cHJkKHJlZ3MsIGFwLCAwKTsKIAl3cml0ZWwoMCwgJnJlZ3MtPlJ4UmV0Q3NtKTsKIAotCS8qCi0JICogWmVybyB0aGUgc3RhdHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBpbnRlcmZhY2UKLQkgKi8KLQltZW1zZXQoJmFwLT5zdGF0cywgMCwgc2l6ZW9mKGFwLT5zdGF0cykpOwotCiAgICAgICAgLyoKIAkqIEVuYWJsZSBETUEgZW5naW5lIG5vdy4KIAkqIElmIHdlIGRvIHRoaXMgc29vbmVyLCBNY2tpbmxleSBib3ggcHVrZXMuCkBAIC0yMDQxLDggKzIwMzYsOCBAQAogCQkJbmV0aWZfcngoc2tiKTsKIAogCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQlhcC0+c3RhdHMucnhfcGFja2V0cysrOwotCQlhcC0+c3RhdHMucnhfYnl0ZXMgKz0gcmV0ZGVzYy0+c2l6ZTsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcmV0ZGVzYy0+c2l6ZTsKIAogCQlpZHggPSAoaWR4ICsgMSkgJSBSWF9SRVRVUk5fUklOR19FTlRSSUVTOwogCX0KQEAgLTIwOTAsOCArMjA4NSw4IEBACiAJCX0KIAogCQlpZiAoc2tiKSB7Ci0JCQlhcC0+c3RhdHMudHhfcGFja2V0cysrOwotCQkJYXAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJCWluZm8tPnNrYiA9IE5VTEw7CiAJCX0KQEAgLTI4NjMsMTEgKzI4NTgsMTEgQEAKIAlzdHJ1Y3QgYWNlX21hY19zdGF0cyBfX2lvbWVtICptYWNfc3RhdHMgPQogCQkoc3RydWN0IGFjZV9tYWNfc3RhdHMgX19pb21lbSAqKWFwLT5yZWdzLT5TdGF0czsKIAotCWFwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gcmVhZGwoJm1hY19zdGF0cy0+ZHJvcF9zcGFjZSk7Ci0JYXAtPnN0YXRzLm11bHRpY2FzdCA9IHJlYWRsKCZtYWNfc3RhdHMtPmtlcHRfbWMpOwotCWFwLT5zdGF0cy5jb2xsaXNpb25zID0gcmVhZGwoJm1hY19zdGF0cy0+Y29sbCk7CisJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gcmVhZGwoJm1hY19zdGF0cy0+ZHJvcF9zcGFjZSk7CisJZGV2LT5zdGF0cy5tdWx0aWNhc3QgPSByZWFkbCgmbWFjX3N0YXRzLT5rZXB0X21jKTsKKwlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgPSByZWFkbCgmbWFjX3N0YXRzLT5jb2xsKTsKIAotCXJldHVybiAmYXAtPnN0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuaCBiL2RyaXZlcnMvbmV0L2FjZW5pYy5oCmluZGV4IDYwZWQxODMuLjQ0ODdmMzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hY2VuaWMuaAorKysgYi9kcml2ZXJzL25ldC9hY2VuaWMuaApAQCAtNjkzLDcgKzY5Myw2IEBACiAJCQkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKFNNUF9DQUNIRV9CWVRFUykpKTsKIAl1MzIJCQlsYXN0X3R4LCBsYXN0X3N0ZF9yeCwgbGFzdF9taW5pX3J4OwogI2VuZGlmCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJaW50CQkJcGNpX3VzaW5nX2RhYzsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCmluZGV4IDg1ZjcyNzYuLmM1NDk2N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKKysrIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwpAQCAtMTAxLDkgKzEwMSw5IEBACiAKICNpbmNsdWRlICJhbWQ4MTExZS5oIgogI2RlZmluZSBNT0RVTEVfTkFNRQkiYW1kODExMWUiCi0jZGVmaW5lIE1PRFVMRV9WRVJTCSIzLjAuNiIKKyNkZWZpbmUgTU9EVUxFX1ZFUlMJIjMuMC43IgogTU9EVUxFX0FVVEhPUigiQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiQU1EODExMSBiYXNlZCAxMC8xMDAgRXRoZXJuZXQgQ29udHJvbGxlci4gRHJpdmVyIFZlcnNpb24gMy4wLjYiKTsKK01PRFVMRV9ERVNDUklQVElPTiAoIkFNRDgxMTEgYmFzZWQgMTAvMTAwIEV0aGVybmV0IENvbnRyb2xsZXIuIERyaXZlciBWZXJzaW9uICJNT0RVTEVfVkVSUyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYW1kODExMWVfcGNpX3RibCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoc3BlZWRfZHVwbGV4LCBpbnQsIE5VTEwsIDApOwpAQCAtNjcxLDExICs2NzEsNyBAQAogKi8KIHN0YXRpYyBpbnQgYW1kODExMWVfdmxhbl9yeChzdHJ1Y3QgYW1kODExMWVfcHJpdiAqbHAsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiB2bGFuX3RhZykKIHsKLSNpZmRlZiBDT05GSUdfQU1EODExMUVfTkFQSQogCXJldHVybiB2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBscC0+dmxncnAsdmxhbl90YWcpOwotI2Vsc2UKLQlyZXR1cm4gdmxhbl9od2FjY2VsX3J4KHNrYiwgbHAtPnZsZ3JwLCB2bGFuX3RhZyk7Ci0jZW5kaWYgLyogQ09ORklHX0FNRDgxMTFFX05BUEkgKi8KIH0KICNlbmRpZgogCkBAIC03MjIsNyArNzE4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19BTUQ4MTExRV9OQVBJCiAvKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGRyaXZlciByZWNlaXZlIG9wZXJhdGlvbiBpbiBwb2xsaW5nIG1vZGUgKi8KIHN0YXRpYyBpbnQgYW1kODExMWVfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CkBAIC03MzQsNyArNzI5LDYgQEAKIAlpbnQgbWluX3BrdF9sZW4sIHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgaW50cjA7CiAJaW50IG51bV9yeF9wa3QgPSAwOwotCS8qaW50IG1heF9yeF9wa3QgPSBOVU1fUlhfQlVGRkVSUzsqLwogCXNob3J0IHBrdF9sZW47CiAjaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAogCXNob3J0IHZ0YWc7CkBAIC04NTAsMTA4ICs4NDQsNiBAQAogCXJldHVybiBudW1fcnhfcGt0OwogfQogCi0jZWxzZQotLyoKLVRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgb3duZXJzaGlwIG9mIHJlY2VpdmUgYnVmZmVycyBhbmQgZGVzY3JpcHRvcnMuIEl0IHdpbGwgaW5kaWNhdGUgdG8ga2VybmVsIHVwIHRvIGhhbGYgdGhlIG51bWJlciBvZiBtYXhpbXVtIHJlY2VpdmUgYnVmZmVycyBpbiB0aGUgZGVzY3JpcHRvciByaW5nLCBpbiBhIHNpbmdsZSByZWNlaXZlIGludGVycnVwdC4gSXQgd2lsbCBhbHNvIHJlcGxlbmlzaCB0aGUgZGVzY3JpcHRvcnMgd2l0aCBuZXcgc2ticy4KLSovCi1zdGF0aWMgaW50IGFtZDgxMTFlX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGFtZDgxMTFlX3ByaXYgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCpuZXdfc2tiOwotCWludCByeF9pbmRleCA9IGxwLT5yeF9pZHggJiBSWF9SSU5HX0RSX01PRF9NQVNLOwotCWludCBtaW5fcGt0X2xlbiwgc3RhdHVzOwotCWludCBudW1fcnhfcGt0ID0gMDsKLQlpbnQgbWF4X3J4X3BrdCA9IE5VTV9SWF9CVUZGRVJTOwotCXNob3J0IHBrdF9sZW47Ci0jaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAotCXNob3J0IHZ0YWc7Ci0jZW5kaWYKLQotCS8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQncyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCi0Jd2hpbGUoKytudW1fcnhfcGt0IDw9IG1heF9yeF9wa3QpewotCQlzdGF0dXMgPSBsZTE2X3RvX2NwdShscC0+cnhfcmluZ1tyeF9pbmRleF0ucnhfZmxhZ3MpOwotCQlpZihzdGF0dXMgJiBPV05fQklUKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogY2hlY2sgaWYgZXJyIHN1bW1hcnkgYml0IGlzIHNldCAqLwotCQlpZihzdGF0dXMgJiBFUlJfQklUKXsKLQkJCS8qCi0JCQkgKiBUaGVyZSBpcyBhIHRyaWNreSBlcnJvciBub3RlZCBieSBKb2huIE11cnBoeSwKLQkJCSAqIDxtdXJmQHBlcmZ0ZWNoLmNvbT4gdG8gUnVzcyBOZWxzb246IEV2ZW4gd2l0aCBmdWxsLXNpemVkCi0JCQkgKiBidWZmZXJzIGl0J3MgcG9zc2libGUgZm9yIGEgamFiYmVyIHBhY2tldCB0byB1c2UgdHdvCi0JCQkgKiBidWZmZXJzLCB3aXRoIG9ubHkgdGhlIGxhc3QgY29ycmVjdGx5IG5vdGluZyB0aGUgZXJyb3IuCQkJICovCi0JCQkvKiByZXNldGluZyBmbGFncyAqLwotCQkJbHAtPnJ4X3JpbmdbcnhfaW5kZXhdLnJ4X2ZsYWdzICY9IFJFU0VUX1JYX0ZMQUdTOwotCQkJZ290byBlcnJfbmV4dF9wa3Q7Ci0JCX0KLQkJLyogY2hlY2sgZm9yIFNUUCBhbmQgRU5QICovCi0JCWlmKCEoKHN0YXR1cyAmIFNUUF9CSVQpICYmIChzdGF0dXMgJiBFTlBfQklUKSkpewotCQkJLyogcmVzZXRpbmcgZmxhZ3MgKi8KLQkJCWxwLT5yeF9yaW5nW3J4X2luZGV4XS5yeF9mbGFncyAmPSBSRVNFVF9SWF9GTEFHUzsKLQkJCWdvdG8gZXJyX25leHRfcGt0OwotCQl9Ci0JCXBrdF9sZW4gPSBsZTE2X3RvX2NwdShscC0+cnhfcmluZ1tyeF9pbmRleF0ubXNnX2NvdW50KSAtIDQ7Ci0KLSNpZiBBTUQ4MTExRV9WTEFOX1RBR19VU0VECi0JCXZ0YWcgPSBzdGF0dXMgJiBUVF9NQVNLOwotCQkvKk1BQyB3aWxsIHN0cmlwIHZsYW4gdGFnKi8KLQkJaWYobHAtPnZsZ3JwICE9IE5VTEwgJiYgdnRhZyAhPTApCi0JCQltaW5fcGt0X2xlbiA9TUlOX1BLVF9MRU4gLSA0OwotCQllbHNlCi0jZW5kaWYKLQkJCW1pbl9wa3RfbGVuID1NSU5fUEtUX0xFTjsKLQotCQlpZiAocGt0X2xlbiA8IG1pbl9wa3RfbGVuKSB7Ci0JCQlscC0+cnhfcmluZ1tyeF9pbmRleF0ucnhfZmxhZ3MgJj0gUkVTRVRfUlhfRkxBR1M7Ci0JCQlscC0+ZHJ2X3J4X2Vycm9ycysrOwotCQkJZ290byBlcnJfbmV4dF9wa3Q7Ci0JCX0KLQkJaWYoIShuZXdfc2tiID0gZGV2X2FsbG9jX3NrYihscC0+cnhfYnVmZl9sZW4pKSl7Ci0JCQkvKiBpZiBhbGxvY2F0aW9uIGZhaWwsCi0JCQkJaWdub3JlIHRoYXQgcGt0IGFuZCBnbyB0byBuZXh0IG9uZSAqLwotCQkJbHAtPnJ4X3JpbmdbcnhfaW5kZXhdLnJ4X2ZsYWdzICY9IFJFU0VUX1JYX0ZMQUdTOwotCQkJbHAtPmRydl9yeF9lcnJvcnMrKzsKLQkJCWdvdG8gZXJyX25leHRfcGt0OwotCQl9Ci0KLQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgMik7Ci0JCXNrYiA9IGxwLT5yeF9za2J1ZmZbcnhfaW5kZXhdOwotCQlwY2lfdW5tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LGxwLT5yeF9kbWFfYWRkcltyeF9pbmRleF0sCi0JCQlscC0+cnhfYnVmZl9sZW4tMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwotCQlscC0+cnhfc2tidWZmW3J4X2luZGV4XSA9IG5ld19za2I7Ci0JCWxwLT5yeF9kbWFfYWRkcltyeF9pbmRleF0gPSBwY2lfbWFwX3NpbmdsZShscC0+cGNpX2RldiwKLQkJCW5ld19za2ItPmRhdGEsIGxwLT5yeF9idWZmX2xlbi0yLFBDSV9ETUFfRlJPTURFVklDRSk7Ci0KLQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQotI2lmIEFNRDgxMTFFX1ZMQU5fVEFHX1VTRUQKLQkJaWYobHAtPnZsZ3JwICE9IE5VTEwgJiYgKHZ0YWcgPT0gVFRfVkxBTl9UQUdHRUQpKXsKLQkJCWFtZDgxMTFlX3ZsYW5fcngobHAsIHNrYiwKLQkJCQkgbGUxNl90b19jcHUobHAtPnJ4X3JpbmdbcnhfaW5kZXhdLnRhZ19jdHJsX2luZm8pKTsKLQkJfSBlbHNlCi0jZW5kaWYKLQotCQkJbmV0aWZfcnggKHNrYik7Ci0JCQkvKkNPQUwgdXBkYXRlIHJ4IGNvYWxlc2NpbmcgcGFyYW1ldGVycyovCi0JCQlscC0+Y29hbF9jb25mLnJ4X3BhY2tldHMrKzsKLQkJCWxwLT5jb2FsX2NvbmYucnhfYnl0ZXMgKz0gcGt0X2xlbjsKLQotCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQotZXJyX25leHRfcGt0OgotCQlscC0+cnhfcmluZ1tyeF9pbmRleF0uYnVmZl9waHlfYWRkcgotCQkJID0gY3B1X3RvX2xlMzIobHAtPnJ4X2RtYV9hZGRyW3J4X2luZGV4XSk7Ci0JCWxwLT5yeF9yaW5nW3J4X2luZGV4XS5idWZmX2NvdW50ID0KLQkJCQljcHVfdG9fbGUxNihscC0+cnhfYnVmZl9sZW4tMik7Ci0JCXdtYigpOwotCQlscC0+cnhfcmluZ1tyeF9pbmRleF0ucnhfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoT1dOX0JJVCk7Ci0JCXJ4X2luZGV4ID0gKCsrbHAtPnJ4X2lkeCkgJiBSWF9SSU5HX0RSX01PRF9NQVNLOwotCX0KLQotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19BTUQ4MTExRV9OQVBJICovCiAvKgogVGhpcyBmdW5jdGlvbiB3aWxsIGluZGljYXRlIHRoZSBsaW5rIHN0YXR1cyB0byB0aGUga2VybmVsLgogKi8KQEAgLTEyODAsMjkgKzExNzIsMjIgQEAKIAl3cml0ZWwoaW50cjAsIG1taW8gKyBJTlQwKTsKIAogCS8qIENoZWNrIGlmIFJlY2VpdmUgSW50ZXJydXB0IGhhcyBvY2N1cnJlZC4gKi8KLSNpZmRlZiBDT05GSUdfQU1EODExMUVfTkFQSQotCWlmKGludHIwICYgUklOVDApewotCQlpZihuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldiwgJmxwLT5uYXBpKSl7CisJaWYgKGludHIwICYgUklOVDApIHsKKwkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2LCAmbHAtPm5hcGkpKSB7CiAJCQkvKiBEaXNhYmxlIHJlY2VpdmUgaW50ZXJ1cHRzICovCiAJCQl3cml0ZWwoUklOVEVOMCwgbW1pbyArIElOVEVOMCk7CiAJCQkvKiBTY2hlZHVsZSBhIHBvbGxpbmcgcm91dGluZSAqLwogCQkJX19uZXRpZl9yeF9zY2hlZHVsZShkZXYsICZscC0+bmFwaSk7Ci0JCX0KLQkJZWxzZSBpZiAoaW50cmVuMCAmIFJJTlRFTjApIHsKKwkJfSBlbHNlIGlmIChpbnRyZW4wICYgUklOVEVOMCkgewogCQkJcHJpbnRrKCIqKioqKioqKioqKipEcml2ZXIgYnVnISBcCiAJCQkJaW50ZXJydXB0IHdoaWxlIGluIHBvbGxcbiIpOwogCQkJLyogRml4IGJ5IGRpc2FibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzICovCiAJCQl3cml0ZWwoUklOVEVOMCwgbW1pbyArIElOVEVOMCk7CiAJCX0KIAl9Ci0jZWxzZQotCWlmKGludHIwICYgUklOVDApewotCQlhbWQ4MTExZV9yeChkZXYpOwotCQl3cml0ZWwoVkFMMiB8IFJETUQwLCBtbWlvICsgQ01EMCk7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19BTUQ4MTExRV9OQVBJICovCisKIAkvKiBDaGVjayBpZiAgVHJhbnNtaXQgSW50ZXJydXB0IGhhcyBvY2N1cnJlZC4gKi8KLQlpZihpbnRyMCAmIFRJTlQwKQorCWlmIChpbnRyMCAmIFRJTlQwKQogCQlhbWQ4MTExZV90eChkZXYpOwogCiAJLyogQ2hlY2sgaWYgIExpbmsgQ2hhbmdlIEludGVycnVwdCBoYXMgb2NjdXJyZWQuICovCkBAIC0xMzQwLDkgKzEyMjUsNyBAQAogCXN0cnVjdCBhbWQ4MTExZV9wcml2ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0jaWZkZWYgQ09ORklHX0FNRDgxMTFFX05BUEkKIAluYXBpX2Rpc2FibGUoJmxwLT5uYXBpKTsKLSNlbmRpZgogCiAJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwogCkBAIC0xMzc0LDkgKzEyNTcsNyBAQAogCQkJCQkgZGV2LT5uYW1lLCBkZXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotI2lmZGVmIENPTkZJR19BTUQ4MTExRV9OQVBJCiAJbmFwaV9lbmFibGUoJmxwLT5uYXBpKTsKLSNlbmRpZgogCiAJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwogCkBAIC0xMzg0LDkgKzEyNjUsNyBAQAogCiAJaWYoYW1kODExMWVfcmVzdGFydChkZXYpKXsKIAkJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7Ci0jaWZkZWYgQ09ORklHX0FNRDgxMTFFX05BUEkKIAkJbmFwaV9kaXNhYmxlKCZscC0+bmFwaSk7Ci0jZW5kaWYKIAkJaWYgKGRldi0+aXJxKQogCQkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjAzNiw5ICsxOTE1LDcgQEAKIAlkZXYtPmlycSA9cGRldi0+aXJxOwogCWRldi0+dHhfdGltZW91dCA9IGFtZDgxMTFlX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEFNRDgxMTFFX1RYX1RJTUVPVVQ7Ci0jaWZkZWYgQ09ORklHX0FNRDgxMTFFX05BUEkKIAluZXRpZl9uYXBpX2FkZChkZXYsICZscC0+bmFwaSwgYW1kODExMWVfcnhfcG9sbCwgMzIpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAlkZXYtPnBvbGxfY29udHJvbGxlciA9IGFtZDgxMTFlX3BvbGw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyaWFkbmUuYyBiL2RyaXZlcnMvbmV0L2FyaWFkbmUuYwppbmRleCAxMGYzYTE5Li4yOWU1M2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmlhZG5lLmMKKysrIGIvZHJpdmVycy9uZXQvYXJpYWRuZS5jCkBAIC05OCw3ICs5OCw2IEBACiAgICAgdm9sYXRpbGUgdV9zaG9ydCAqcnhfYnVmZltSWF9SSU5HX1NJWkVdOwogICAgIGludCBjdXJfdHgsIGN1cl9yeDsJCQkvKiBUaGUgbmV4dCBmcmVlIHJpbmcgZW50cnkgKi8KICAgICBpbnQgZGlydHlfdHg7CQkJLyogVGhlIHJpbmcgZW50cmllcyB0byBiZSBmcmVlKCllZC4gKi8KLSAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKICAgICBjaGFyIHR4X2Z1bGw7CiB9OwogCkBAIC0zNzgsMjAgKzM3NywxOSBAQAogCiBzdGF0aWMgaW50IGFyaWFkbmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgYXJpYWRuZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB2b2xhdGlsZSBzdHJ1Y3QgQW03OUM5NjAgKmxhbmNlID0gKHN0cnVjdCBBbTc5Qzk2MCopZGV2LT5iYXNlX2FkZHI7CiAKICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKICAgICBsYW5jZS0+UkFQID0gQ1NSMTEyOwkvKiBNaXNzZWQgRnJhbWUgQ291bnQgKi8KLSAgICBwcml2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gc3dhcHcobGFuY2UtPlJEUCk7CisgICAgZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gc3dhcHcobGFuY2UtPlJEUCk7CiAgICAgbGFuY2UtPlJBUCA9IENTUjA7CQkvKiBQQ25ldC1JU0EgQ29udHJvbGxlciBTdGF0dXMgKi8KIAogICAgIGlmIChhcmlhZG5lX2RlYnVnID4gMSkgewogCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTIuMnguXG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGxhbmNlLT5SRFApOwogCXByaW50ayhLRVJOX0RFQlVHICIlczogJWx1IHBhY2tldHMgbWlzc2VkXG4iLCBkZXYtPm5hbWUsCi0JICAgICAgIHByaXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMpOworCSAgICAgICBkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMpOwogICAgIH0KIAogICAgIC8qIFdlIHN0b3AgdGhlIExBTkNFIGhlcmUgLS0gaXQgb2NjYXNpb25hbGx5IHBvbGxzIG1lbW9yeSBpZiB3ZSBkb24ndC4gKi8KQEAgLTUwMiwxNiArNTAwLDE2IEBACiAJCWlmIChzdGF0dXMgJiBURl9FUlIpIHsKIAkJICAgIC8qIFRoZXJlIHdhcyBhbiBtYWpvciBlcnJvciwgbG9nIGl0LiAqLwogCQkgICAgaW50IGVycl9zdGF0dXMgPSBwcml2LT50eF9yaW5nW2VudHJ5XS0+VE1EMzsKLQkJICAgIHByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJICAgIGlmIChlcnJfc3RhdHVzICYgRUZfUlRSWSkKLQkJCXByaXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCSAgICBpZiAoZXJyX3N0YXR1cyAmIEVGX0xDQVIpCi0JCQlwcml2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkgICAgaWYgKGVycl9zdGF0dXMgJiBFRl9MQ09MKQotCQkJcHJpdi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CiAJCSAgICBpZiAoZXJyX3N0YXR1cyAmIEVGX1VGTE8pIHsKIAkJCS8qIEFja2shICBPbiBGSUZPIGVycm9ycyB0aGUgVHggdW5pdCBpcyB0dXJuZWQgb2ZmISAqLwotCQkJcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCS8qIFJlbW92ZSB0aGlzIHZlcmJvc2l0eSBsYXRlciEgKi8KIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFR4IEZJRk8gZXJyb3IhIFN0YXR1cyAlNC40eC5cbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBjc3IwKTsKQEAgLTUyMCw4ICs1MTgsOCBAQAogCQkgICAgfQogCQl9IGVsc2UgewogCQkgICAgaWYgKHN0YXR1cyAmIChURl9NT1JFfFRGX09ORSkpCi0JCQlwcml2LT5zdGF0cy5jb2xsaXNpb25zKys7Ci0JCSAgICBwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKKwkJICAgIGRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQl9CiAJCWRpcnR5X3R4Kys7CiAJICAgIH0KQEAgLTU0NywxMSArNTQ1LDExIEBACiAJLyogTG9nIG1pc2MgZXJyb3JzLiAqLwogCWlmIChjc3IwICYgQkFCTCkgewogCSAgICBoYW5kbGVkID0gMTsKLQkgICAgcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CS8qIFR4IGJhYmJsZS4gKi8KKwkgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsJLyogVHggYmFiYmxlLiAqLwogCX0KIAlpZiAoY3NyMCAmIE1JU1MpIHsKIAkgICAgaGFuZGxlZCA9IDE7Ci0JICAgIHByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOwkvKiBNaXNzZWQgYSBSeCBmcmFtZS4gKi8KKwkgICAgZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsJLyogTWlzc2VkIGEgUnggZnJhbWUuICovCiAJfQogCWlmIChjc3IwICYgTUVSUikgewogCSAgICBoYW5kbGVkID0gMTsKQEAgLTY3Miw3ICs2NzAsNyBAQAogCXByaXYtPmN1cl90eCAtPSBUWF9SSU5HX1NJWkU7CiAJcHJpdi0+ZGlydHlfdHggLT0gVFhfUklOR19TSVpFOwogICAgIH0KLSAgICBwcml2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CisgICAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CiAKICAgICAvKiBUcmlnZ2VyIGFuIGltbWVkaWF0ZSBzZW5kIHBvbGwuICovCiAgICAgbGFuY2UtPlJBUCA9IENTUjA7CQkvKiBQQ25ldC1JU0EgQ29udHJvbGxlciBTdGF0dXMgKi8KQEAgLTcwNywxNSArNzA1LDE1IEBACiAJCWJ1ZmZlcnMsIHdpdGggb25seSB0aGUgbGFzdCBjb3JyZWN0bHkgbm90aW5nIHRoZSBlcnJvci4gKi8KIAkgICAgaWYgKHN0YXR1cyAmIFJGX0VOUCkKIAkJLyogT25seSBjb3VudCBhIGdlbmVyYWwgZXJyb3IgYXQgdGhlIGVuZCBvZiBhIHBhY2tldC4qLwotCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkgICAgaWYgKHN0YXR1cyAmIFJGX0ZSQU0pCi0JCXByaXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCSAgICBpZiAoc3RhdHVzICYgUkZfT0ZMTykKLQkJcHJpdi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCSAgICBpZiAoc3RhdHVzICYgUkZfQ1JDKQotCQlwcml2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCSAgICBpZiAoc3RhdHVzICYgUkZfQlVGRikKLQkJcHJpdi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCSAgICBwcml2LT5yeF9yaW5nW2VudHJ5XS0+Uk1EMSAmPSAweGZmMDB8UkZfU1RQfFJGX0VOUDsKIAl9IGVsc2UgewogCSAgICAvKiBNYWxsb2MgdXAgbmV3IGJ1ZmZlciwgY29tcGF0aWJsZSB3aXRoIG5ldC0zLiAqLwpAQCAtNzMxLDcgKzcyOSw3IEBACiAJCQlicmVhazsKIAogCQlpZiAoaSA+IFJYX1JJTkdfU0laRS0yKSB7Ci0JCSAgICBwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCSAgICBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJICAgIHByaXYtPnJ4X3JpbmdbZW50cnldLT5STUQxIHw9IFJGX09XTjsKIAkJICAgIHByaXYtPmN1cl9yeCsrOwogCQl9CkBAIC03NjQsOCArNzYyLDggQEAKIAogCSAgICBuZXRpZl9yeChza2IpOwogCSAgICBkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCSAgICBwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JICAgIHByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisJICAgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJfQogCiAJcHJpdi0+cnhfcmluZ1tlbnRyeV0tPlJNRDEgfD0gUkZfT1dOOwpAQCAtNzgzLDcgKzc4MSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXJpYWRuZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgYXJpYWRuZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB2b2xhdGlsZSBzdHJ1Y3QgQW03OUM5NjAgKmxhbmNlID0gKHN0cnVjdCBBbTc5Qzk2MCopZGV2LT5iYXNlX2FkZHI7CiAgICAgc2hvcnQgc2F2ZWRfYWRkcjsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzkxLDExICs3ODgsMTEgQEAKICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAgICAgc2F2ZWRfYWRkciA9IGxhbmNlLT5SQVA7CiAgICAgbGFuY2UtPlJBUCA9IENTUjExMjsJCS8qIE1pc3NlZCBGcmFtZSBDb3VudCAqLwotICAgIHByaXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBzd2FwdyhsYW5jZS0+UkRQKTsKKyAgICBkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBzd2FwdyhsYW5jZS0+UkRQKTsKICAgICBsYW5jZS0+UkFQID0gc2F2ZWRfYWRkcjsKICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLSAgICByZXR1cm4gJnByaXYtPnN0YXRzOworICAgIHJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYwppbmRleCAxZTM5ZTc4Li5mZmFlMjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKQEAgLTY3Nyw3ICs2NzcsNyBAQAogewogCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Ci0Jc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYucGFyZW50LT5idXNfaWQsIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksIHNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF0OTFldGhlcl9ldGh0b29sX29wcyA9IHsKQEAgLTgyMCw3ICs4MjAsNyBAQAogCQlscC0+c2tiID0gc2tiOwogCQlscC0+c2tiX2xlbmd0aCA9IHNrYi0+bGVuOwogCQlscC0+c2tiX3BoeXNhZGRyID0gZG1hX21hcF9zaW5nbGUoTlVMTCwgc2tiLT5kYXRhLCBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7Ci0JCWxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCQkvKiBTZXQgYWRkcmVzcyBvZiB0aGUgZGF0YSBpbiB0aGUgVHJhbnNtaXQgQWRkcmVzcyByZWdpc3RlciAqLwogCQlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX1RBUiwgbHAtPnNrYl9waHlzYWRkcik7CkBAIC04NDMsMzQgKzg0MywzMyBAQAogICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF0OTFldGhlcl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBhdDkxX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgYWxlLCBsZW5lcnIsIHNlcWUsIGxjb2wsIGVjb2w7CiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWxwLT5zdGF0cy5yeF9wYWNrZXRzICs9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19PSyk7CQkvKiBHb29kIGZyYW1lcyByZWNlaXZlZCAqLworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMgKz0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX09LKTsJCS8qIEdvb2QgZnJhbWVzIHJlY2VpdmVkICovCiAJCWFsZSA9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19BTEUpOwotCQlscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGFsZTsJCQkJLyogQWxpZ25tZW50IGVycm9ycyAqLworCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBhbGU7CQkJCS8qIEFsaWdubWVudCBlcnJvcnMgKi8KIAkJbGVuZXJyID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0VMUikgKyBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfVVNGKTsKLQkJbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgKz0gbGVuZXJyOwkJCQkvKiBFeGNlc3NpdmUgTGVuZ3RoIG9yIFVuZGVyc2l6ZSBGcmFtZSBlcnJvciAqLworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgKz0gbGVuZXJyOwkJCQkvKiBFeGNlc3NpdmUgTGVuZ3RoIG9yIFVuZGVyc2l6ZSBGcmFtZSBlcnJvciAqLwogCQlzZXFlID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX1NFUUUpOwotCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSBzZXFlOwkJCQkvKiBDUkMgZXJyb3IgKi8KLQkJbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzICs9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19EUkZDKTsJLyogUmVjZWl2ZSBidWZmZXIgbm90IGF2YWlsYWJsZSAqLwotCQlscC0+c3RhdHMucnhfZXJyb3JzICs9IChhbGUgKyBsZW5lcnIgKyBzZXFlCisJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSBzZXFlOwkJCQkvKiBDUkMgZXJyb3IgKi8KKwkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyArPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfRFJGQyk7CS8qIFJlY2VpdmUgYnVmZmVyIG5vdCBhdmFpbGFibGUgKi8KKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMgKz0gKGFsZSArIGxlbmVyciArIHNlcWUKIAkJCSsgYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0NERSkgKyBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfUkpCKSk7CiAKLQkJbHAtPnN0YXRzLnR4X3BhY2tldHMgKz0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0ZSQSk7CQkvKiBGcmFtZXMgc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkICovCi0JCWxwLT5zdGF0cy50eF9maWZvX2Vycm9ycyArPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfVFVFKTsJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1bnMgKi8KLQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19DU0UpOwkvKiBDYXJyaWVyIFNlbnNlIGVycm9ycyAqLwotCQlscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycyArPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfU1FFRSk7LyogSGVhcnRiZWF0IGVycm9yICovCisJCWRldi0+c3RhdHMudHhfcGFja2V0cyArPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfRlJBKTsJCS8qIEZyYW1lcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgKi8KKwkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycyArPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfVFVFKTsJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1bnMgKi8KKwkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfQ1NFKTsJLyogQ2FycmllciBTZW5zZSBlcnJvcnMgKi8KKwkJZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzICs9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19TUUVFKTsvKiBIZWFydGJlYXQgZXJyb3IgKi8KIAogCQlsY29sID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0xDT0wpOwogCQllY29sID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0VDT0wpOwotCQlscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycyArPSBsY29sOwkJCS8qIExhdGUgY29sbGlzaW9ucyAqLwotCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gZWNvbDsJCQkvKiAxNiBjb2xsaXNpb25zICovCisJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycyArPSBsY29sOwkJCS8qIExhdGUgY29sbGlzaW9ucyAqLworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IGVjb2w7CQkJLyogMTYgY29sbGlzaW9ucyAqLwogCi0JCWxwLT5zdGF0cy5jb2xsaXNpb25zICs9IChhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfU0NPTCkgKyBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfTUNPTCkgKyBsY29sICsgZWNvbCk7CisJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAoYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX1NDT0wpICsgYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX01DT0wpICsgbGNvbCArIGVjb2wpOwogCX0KLQlyZXR1cm4gJmxwLT5zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIC8qCkBAIC04OTYsMTYgKzg5NSwxNiBAQAogCiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RsZW47CisJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdGxlbjsKIAkJCW5ldGlmX3J4KHNrYik7CiAJCX0KIAkJZWxzZSB7Ci0JCQlscC0+c3RhdHMucnhfZHJvcHBlZCArPSAxOworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkICs9IDE7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwgZGV2LT5uYW1lKTsKIAkJfQogCiAJCWlmIChkbGlzdC0+ZGVzY3JpcHRvcnNbbHAtPnJ4QnVmZkluZGV4XS5zaXplICYgRU1BQ19NVUxUSUNBU1QpCi0JCQlscC0+c3RhdHMubXVsdGljYXN0Kys7CisJCQlkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCiAJCWRsaXN0LT5kZXNjcmlwdG9yc1tscC0+cnhCdWZmSW5kZXhdLmFkZHIgJj0gfkVNQUNfREVTQ19ET05FOwkvKiByZXNldCBvd25lcnNoaXAgYml0ICovCiAJCWlmIChscC0+cnhCdWZmSW5kZXggPT0gTUFYX1JYX0RFU0NSLTEpCQkJCS8qIHdyYXAgYWZ0ZXIgbGFzdCBidWZmZXIgKi8KQEAgLTkzNCw3ICs5MzMsNyBAQAogCWlmIChpbnRzdGF0dXMgJiBBVDkxX0VNQUNfVENPTSkgewkvKiBUcmFuc21pdCBjb21wbGV0ZSAqLwogCQkvKiBUaGUgVENPTSBiaXQgaXMgc2V0IGV2ZW4gaWYgdGhlIHRyYW5zbWlzc2lvbiBmYWlsZWQuICovCiAJCWlmIChpbnRzdGF0dXMgJiAoQVQ5MV9FTUFDX1RVTkQgfCBBVDkxX0VNQUNfUlRSWSkpCi0JCQlscC0+c3RhdHMudHhfZXJyb3JzICs9IDE7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycyArPSAxOwogCiAJCWlmIChscC0+c2tiKSB7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShscC0+c2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmggYi9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5oCmluZGV4IGEzOGZkMmQuLjM1M2Y0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmgKKysrIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuaApAQCAtODQsNyArODQsNiBAQAogCiBzdHJ1Y3QgYXQ5MV9wcml2YXRlCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IG1paV9pZl9pbmZvIG1paTsJCQkvKiBldGh0b29sIHN1cHBvcnQgKi8KIAlzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBib2FyZF9kYXRhOwkvKiBib2FyZC1zcGVjaWZpYyBjb25maWd1cmF0aW9uICovCiAJc3RydWN0IGNsayAqZXRoZXJfY2xrOwkJCS8qIGNsb2NrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwppbmRleCBlY2Q4ZmM2Li43YTE0OTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTg0OCw3ICs4NDgsNyBAQAogCiAJZXAtPnJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKIAkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSwKLQkJCXBkZXYtPmRldi5idXNfaWQpOworCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOwogCWlmIChlcC0+cmVzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IHJlc2VydmUgbWVtb3J5IHJlZ2lvblxuIik7CiAJCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKaW5kZXggZTlkMTVlYy4uNWM1ZjFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYwpAQCAtNTM1LDcgKzUzNSw3IEBACiAJCiAJaWYgKCFlY2FyZF9yZWFkY2h1bmsoJmNkLCBlYywgMHhmNSwgMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHJlYWQgcG9kdWxlIGRlc2NyaXB0aW9uIHN0cmluZ1xuIiwKLQkJICAgICAgIGVjLT5kZXYuYnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKCZlYy0+ZGV2KSk7CiAJCWdvdG8gbm9fYWRkcjsKIAl9CiAKQEAgLTU1NCw3ICs1NTQsNyBAQAogCX0KIAogCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBwYXJzZSBNQUMgYWRkcmVzczogJXNcbiIsCi0JICAgICAgIGVjLT5kZXYuYnVzX2lkLCBjZC5kLnN0cmluZyk7CisJICAgICAgIGRldl9uYW1lKCZlYy0+ZGV2KSwgY2QuZC5zdHJpbmcpOwogCiAgbm9fYWRkcjoKIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTU4NSw3ICs1ODUsNyBAQAogewogCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Ci0Jc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYucGFyZW50LT5idXNfaWQsCisJc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKIAkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCmluZGV4IGM2MTdiNjQuLjliNzc3ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwpAQCAtNTIyLDcgKzUyMiw2IEBACiAjZW5kaWYKIAogCQlpZiAoKG4gPSBxdWV1ZV9nZXRfZGVzYyhyeHEsIHBvcnQsIDApKSA8IDApIHsKLQkJCXJlY2VpdmVkID0gMDsgLyogTm8gcGFja2V0IHJlY2VpdmVkICovCiAjaWYgREVCVUdfUlgKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXRoX3BvbGwgbmV0aWZfcnhfY29tcGxldGVcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKQEAgLTU0Myw3ICs1NDIsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcG9sbCBhbGwgZG9uZVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwogI2VuZGlmCi0JCQlyZXR1cm4gMDsgLyogYWxsIHdvcmsgZG9uZSAqLworCQkJcmV0dXJuIHJlY2VpdmVkOyAvKiBhbGwgd29yayBkb25lICovCiAJCX0KIAogCQlkZXNjID0gcnhfZGVzY19wdHIocG9ydCwgbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMgYi9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKaW5kZXggNGNjZWFhYy4uMDg2MGNjMjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIAogLyogUG9zc2libGUgbWVtb3J5L0lPIGFkZHJlc3NlcyBmb3IgcHJvYmluZyAqLwogCi1zdHJ1Y3QgbGFuY2VfYWRkciB7CitzdGF0aWMgc3RydWN0IGxhbmNlX2FkZHIgewogCXVuc2lnbmVkIGxvbmcJbWVtYWRkcjsKIAl1bnNpZ25lZCBsb25nCWlvYWRkcjsKIAlpbnQJCQkJc2xvd19mbGFnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9hdGwxZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzExYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfQVRMMUUpCSs9IGF0bDFlLm8KK2F0bDFlLW9ianMJCSs9IGF0bDFlX21haW4ubyBhdGwxZV9ody5vIGF0bDFlX2V0aHRvb2wubyBhdGwxZV9wYXJhbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZS5oIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ1ZmEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaApAQCAtMCwwICsxLDUwMyBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA3IEF0aGVyb3MgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyB4aW9uZyBodWFuZyA8eGlvbmcuaHVhbmdAYXRoZXJvcy5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIEludGVsIGUxMDAwIGRyaXZlcgorICogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX0FUTDFFX0hfCisjZGVmaW5lIF9BVEwxRV9IXworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKworI2luY2x1ZGUgImF0bDFlX2h3LmgiCisKKyNkZWZpbmUgUENJX1JFR19DT01NQU5ECSAweDA0ICAgIC8qIFBDSSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIENNRF9JT19TUEFDRQkgMHgwMDAxCisjZGVmaW5lIENNRF9NRU1PUllfU1BBQ0UgMHgwMDAyCisjZGVmaW5lIENNRF9CVVNfTUFTVEVSICAgMHgwMDA0CisKKyNkZWZpbmUgQkFSXzAgICAwCisjZGVmaW5lIEJBUl8xICAgMQorI2RlZmluZSBCQVJfNSAgIDUKKworLyogV2FrZSBVcCBGaWx0ZXIgQ29udHJvbCAqLworI2RlZmluZSBBVF9XVUZDX0xOS0MgMHgwMDAwMDAwMSAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBBVF9XVUZDX01BRyAgMHgwMDAwMDAwMiAvKiBNYWdpYyBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBBVF9XVUZDX0VYICAgMHgwMDAwMDAwNCAvKiBEaXJlY3RlZCBFeGFjdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEFUX1dVRkNfTUMgICAweDAwMDAwMDA4IC8qIE11bHRpY2FzdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEFUX1dVRkNfQkMgICAweDAwMDAwMDEwIC8qIEJyb2FkY2FzdCBXYWtldXAgRW5hYmxlICovCisKKyNkZWZpbmUgU1BFRURfMAkJICAgMHhmZmZmCisjZGVmaW5lIEhBTEZfRFVQTEVYICAgICAgICAxCisjZGVmaW5lIEZVTExfRFVQTEVYICAgICAgICAyCisKKy8qIEVycm9yIENvZGVzICovCisjZGVmaW5lIEFUX0VSUl9FRVBST00gICAgICAxCisjZGVmaW5lIEFUX0VSUl9QSFkgICAgICAgICAyCisjZGVmaW5lIEFUX0VSUl9DT05GSUcgICAgICAzCisjZGVmaW5lIEFUX0VSUl9QQVJBTSAgICAgICA0CisjZGVmaW5lIEFUX0VSUl9NQUNfVFlQRSAgICA1CisjZGVmaW5lIEFUX0VSUl9QSFlfVFlQRSAgICA2CisjZGVmaW5lIEFUX0VSUl9QSFlfU1BFRUQgICA3CisjZGVmaW5lIEFUX0VSUl9QSFlfUkVTICAgICA4CisjZGVmaW5lIEFUX0VSUl9USU1FT1VUICAgICA5CisKKyNkZWZpbmUgTUFYX0pVTUJPX0ZSQU1FX1NJWkUgMHgyMDAwCisKKyNkZWZpbmUgQVRfVkxBTl9UQUdfVE9fVFBEX1RBRyhfdmxhbiwgX3RwZCkgICAgXAorCV90cGQgPSAoKChfdmxhbikgPDwgKDQpKSB8ICgoKF92bGFuKSA+PiAxMykgJiA3KSB8XAorCQkgKCgoX3ZsYW4pID4+IDkpICYgOCkpCisKKyNkZWZpbmUgQVRfVFBEX1RBR19UT19WTEFOX1RBRyhfdHBkLCBfdmxhbikgICAgXAorCV92bGFuID0gKCgoX3RwZCkgPj4gOCkgfCAoKChfdHBkKSAmIDB4NzcpIDw8IDkpIHxcCisJCSAgICgoKF90ZHApICYgMHg4OCkgPDwgNSkpCisKKyNkZWZpbmUgQVRfTUFYX1JFQ0VJVkVfUVVFVUUgICAgNAorI2RlZmluZSBBVF9QQUdFX05VTV9QRVJfUVVFVUUgICAyCisKKyNkZWZpbmUgQVRfRE1BX0hJX0FERFJfTUFTSyAgICAgMHhmZmZmZmZmZjAwMDAwMDAwVUxMCisjZGVmaW5lIEFUX0RNQV9MT19BRERSX01BU0sgICAgIDB4MDAwMDAwMDBmZmZmZmZmZlVMTAorCisjZGVmaW5lIEFUX1RYX1dBVENIRE9HICAoNSAqIEhaKQorI2RlZmluZSBBVF9NQVhfSU5UX1dPUksJCTEwCisjZGVmaW5lIEFUX1RXU0lfRUVQUk9NX1RJTUVPVVQgCTEwMAorI2RlZmluZSBBVF9IV19NQVhfSURMRV9ERUxBWSAJMTAKKyNkZWZpbmUgQVRfU1VTUEVORF9MSU5LX1RJTUVPVVQgMjgKKworI2RlZmluZSBBVF9SRUdTX0xFTgk3NQorI2RlZmluZSBBVF9FRVBST01fTEVOIAk1MTIKKyNkZWZpbmUgQVRfQURWX01BU0sJKEFEVkVSVElTRV8xMF9IQUxGICB8XAorCQkJIEFEVkVSVElTRV8xMF9GVUxMICB8XAorCQkJIEFEVkVSVElTRV8xMDBfSEFMRiB8XAorCQkJIEFEVkVSVElTRV8xMDBfRlVMTCB8XAorCQkJIEFEVkVSVElTRV8xMDAwX0ZVTEwpCisKKy8qIHRwZCB3b3JkIDIgKi8KKyNkZWZpbmUgVFBEX0JVRkxFTl9NQVNLIAkweDNGRkYKKyNkZWZpbmUgVFBEX0JVRkxFTl9TSElGVCAgICAgICAgMAorI2RlZmluZSBUUERfRE1BSU5UX01BU0sJCTB4MDAwMQorI2RlZmluZSBUUERfRE1BSU5UX1NISUZUICAgICAgICAxNAorI2RlZmluZSBUUERfUEtUTlRfTUFTSyAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVFBEX1BLVElOVF9TSElGVCAgICAgICAgMTUKKyNkZWZpbmUgVFBEX1ZMQU5UQUdfTUFTSyAgICAgICAgMHhGRkZGCisjZGVmaW5lIFRQRF9WTEFOX1NISUZUICAgICAgICAgIDE2CisKKy8qIHRwZCB3b3JkIDMgYml0cyAwOjQgKi8KKyNkZWZpbmUgVFBEX0VPUF9NQVNLICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFRQRF9FT1BfU0hJRlQgICAgICAgICAgIDAKKyNkZWZpbmUgVFBEX0lQX1ZFUlNJT05fTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX0lQX1ZFUlNJT05fU0hJRlQJMQkvKiAwIDogSVBWNCwgMSA6IElQVjYgKi8KKyNkZWZpbmUgVFBEX0lOU19WTF9UQUdfTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX0lOU19WTF9UQUdfU0hJRlQJMgorI2RlZmluZSBUUERfQ0NfU0VHTUVOVF9FTl9NQVNLCTB4MDAwMQorI2RlZmluZSBUUERfQ0NfU0VHTUVOVF9FTl9TSElGVAkzCisjZGVmaW5lIFRQRF9TRUdNRU5UX0VOX01BU0sgICAgIDB4MDAwMQorI2RlZmluZSBUUERfU0VHTUVOVF9FTl9TSElGVCAgICA0CisKKy8qIHRkcCB3b3JkIDMgYml0cyA1OjcgaWYgaXAgdmVyc2lvbiBpcyAwICovCisjZGVmaW5lIFRQRF9JUF9DU1VNX01BU0sgICAgICAgIDB4MDAwMQorI2RlZmluZSBUUERfSVBfQ1NVTV9TSElGVCAgICAgICA1CisjZGVmaW5lIFRQRF9UQ1BfQ1NVTV9NQVNLICAgICAgIDB4MDAwMQorI2RlZmluZSBUUERfVENQX0NTVU1fU0hJRlQgICAgICA2CisjZGVmaW5lIFRQRF9VRFBfQ1NVTV9NQVNLICAgICAgIDB4MDAwMQorI2RlZmluZSBUUERfVURQX0NTVU1fU0hJRlQgICAgICA3CisKKy8qIHRkcCB3b3JkIDMgYml0cyA1OjcgaWYgaXAgdmVyc2lvbiBpcyAxICovCisjZGVmaW5lIFRQRF9WNl9JUEhMTE9fTUFTSwkweDAwMDcKKyNkZWZpbmUgVFBEX1Y2X0lQSExMT19TSElGVAk3CisKKy8qIHRwZCB3b3JkIDMgYml0cyA4OjkgYml0ICovCisjZGVmaW5lIFRQRF9WTF9UQUdHRURfTUFTSyAgICAgIDB4MDAwMQorI2RlZmluZSBUUERfVkxfVEFHR0VEX1NISUZUICAgICA4CisjZGVmaW5lIFRQRF9FVEhUWVBFX01BU0sgICAgICAgIDB4MDAwMQorI2RlZmluZSBUUERfRVRIVFlQRV9TSElGVCAgICAgICA5CisKKy8qIHRkcCB3b3JkIDMgYml0cyAxMDoxMyBpZiBpcCB2ZXJzaW9uIGlzIDAgKi8KKyNkZWZpbmUgVERQX1Y0X0lQSExfTUFTSwkweDAwMEYKKyNkZWZpbmUgVFBEX1Y0X0lQSExfU0hJRlQJMTAKKworLyogdGRwIHdvcmQgMyBiaXRzIDEwOjEzIGlmIGlwIHZlcnNpb24gaXMgMSAqLworI2RlZmluZSBUUERfVjZfSVBITEhJX01BU0sJMHgwMDBGCisjZGVmaW5lIFRQRF9WNl9JUEhMSElfU0hJRlQJMTAKKworLyogdHBkIHdvcmQgMyBiaXQgMTQ6MzEgaWYgc2VnbWVudCBlbmFibGVkICovCisjZGVmaW5lIFRQRF9UQ1BIRFJMRU5fTUFTSyAgICAgIDB4MDAwRgorI2RlZmluZSBUUERfVENQSERSTEVOX1NISUZUICAgICAxNAorI2RlZmluZSBUUERfSERSRkxBR19NQVNLICAgICAgICAweDAwMDEKKyNkZWZpbmUgVFBEX0hEUkZMQUdfU0hJRlQgICAgICAgMTgKKyNkZWZpbmUgVFBEX01TU19NQVNLICAgICAgICAgICAgMHgxRkZGCisjZGVmaW5lIFRQRF9NU1NfU0hJRlQgICAgICAgICAgIDE5CisKKy8qIHRkcCB3b3JkIDMgYml0IDE2OjMxIGlmIGN1c3RvbSBjc3VtIGVuYWJsZWQgKi8KKyNkZWZpbmUgVFBEX1BMT0FET0ZGU0VUX01BU0sgICAgMHgwMEZGCisjZGVmaW5lIFRQRF9QTE9BRE9GRlNFVF9TSElGVCAgIDE2CisjZGVmaW5lIFRQRF9DQ1NVTU9GRlNFVF9NQVNLICAgIDB4MDBGRgorI2RlZmluZSBUUERfQ0NTVU1PRkZTRVRfU0hJRlQgICAyNAorCitzdHJ1Y3QgYXRsMWVfdHBkX2Rlc2MgeworCV9fbGU2NCBidWZmZXJfYWRkcjsKKwlfX2xlMzIgd29yZDI7CisJX19sZTMyIHdvcmQzOworfTsKKworLyogaG93IGFib3V0IDB4MjAwMCAqLworI2RlZmluZSBNQVhfVFhfQlVGX0xFTiAgICAgIDB4MjAwMAorI2RlZmluZSBNQVhfVFhfQlVGX1NISUZUICAgIDEzCisvKiNkZWZpbmUgTUFYX1RYX0JVRl9MRU4gIDB4MzAwMCAqLworCisvKiBycnMgd29yZCAxIGJpdCAwOjMxICovCisjZGVmaW5lIFJSU19SWF9DU1VNX01BU0sJMHhGRkZGCisjZGVmaW5lIFJSU19SWF9DU1VNX1NISUZUCTAKKyNkZWZpbmUgUlJTX1BLVF9TSVpFX01BU0sJMHgzRkZGCisjZGVmaW5lIFJSU19QS1RfU0laRV9TSElGVAkxNgorI2RlZmluZSBSUlNfQ1BVX05VTV9NQVNLCTB4MDAwMworI2RlZmluZQlSUlNfQ1BVX05VTV9TSElGVAkzMAorCisjZGVmaW5lCVJSU19JU19SU1NfSVBWNAkJMHgwMDAxCisjZGVmaW5lIFJSU19JU19SU1NfSVBWNF9UQ1AJMHgwMDAyCisjZGVmaW5lIFJSU19JU19SU1NfSVBWNgkJMHgwMDA0CisjZGVmaW5lIFJSU19JU19SU1NfSVBWNl9UQ1AJMHgwMDA4CisjZGVmaW5lIFJSU19JU19JUFY2CQkweDAwMTAKKyNkZWZpbmUgUlJTX0lTX0lQX0ZSQUcJCTB4MDAyMAorI2RlZmluZSBSUlNfSVNfSVBfREYJCTB4MDA0MAorI2RlZmluZSBSUlNfSVNfODAyXzMJCTB4MDA4MAorI2RlZmluZSBSUlNfSVNfVkxBTl9UQUcJCTB4MDEwMAorI2RlZmluZSBSUlNfSVNfRVJSX0ZSQU1FCTB4MDIwMAorI2RlZmluZSBSUlNfSVNfSVBWNAkJMHgwNDAwCisjZGVmaW5lIFJSU19JU19VRFAJCTB4MDgwMAorI2RlZmluZSBSUlNfSVNfVENQCQkweDEwMDAKKyNkZWZpbmUgUlJTX0lTX0JDQVNUCQkweDIwMDAKKyNkZWZpbmUgUlJTX0lTX01DQVNUCQkweDQwMDAKKyNkZWZpbmUgUlJTX0lTX1BBVVNFCQkweDgwMDAKKworI2RlZmluZSBSUlNfRVJSX0JBRF9DUkMJCTB4MDAwMQorI2RlZmluZSBSUlNfRVJSX0NPREUJCTB4MDAwMgorI2RlZmluZSBSUlNfRVJSX0RSSUJCTEUJCTB4MDAwNAorI2RlZmluZSBSUlNfRVJSX1JVTlQJCTB4MDAwOAorI2RlZmluZSBSUlNfRVJSX1JYX09WRVJGTE9XCTB4MDAxMAorI2RlZmluZSBSUlNfRVJSX1RSVU5DCQkweDAwMjAKKyNkZWZpbmUgUlJTX0VSUl9JUF9DU1VNCQkweDAwNDAKKyNkZWZpbmUgUlJTX0VSUl9MNF9DU1VNCQkweDAwODAKKyNkZWZpbmUgUlJTX0VSUl9MRU5HVEgJCTB4MDEwMAorI2RlZmluZSBSUlNfRVJSX0RFU19BRERSCTB4MDIwMAorCitzdHJ1Y3QgYXRsMWVfcmVjdl9yZXRfc3RhdHVzIHsKKwl1MTYgc2VxX251bTsKKwl1MTYgaGFzaF9sbzsKKwlfX2xlMzIJd29yZDE7CisJdTE2IHBrdF9mbGFnOworCXUxNiBlcnJfZmxhZzsKKwl1MTYgaGFzaF9oaTsKKwl1MTYgdnRhZzsKK307CisKK2VudW0gYXRsMWVfZG1hX3JlcV9ibG9jayB7CisJYXRsMWVfZG1hX3JlcV8xMjggPSAwLAorCWF0bDFlX2RtYV9yZXFfMjU2ID0gMSwKKwlhdGwxZV9kbWFfcmVxXzUxMiA9IDIsCisJYXRsMWVfZG1hX3JlcV8xMDI0ID0gMywKKwlhdGwxZV9kbWFfcmVxXzIwNDggPSA0LAorCWF0bDFlX2RtYV9yZXFfNDA5NiA9IDUKK307CisKK2VudW0gYXRsMWVfcnJzX3R5cGUgeworCWF0bDFlX3Jyc19kaXNhYmxlID0gMCwKKwlhdGwxZV9ycnNfaXB2NCA9IDEsCisJYXRsMWVfcnJzX2lwdjRfdGNwID0gMiwKKwlhdGwxZV9ycnNfaXB2NiA9IDQsCisJYXRsMWVfcnJzX2lwdjZfdGNwID0gOAorfTsKKworZW51bSBhdGwxZV9uaWNfdHlwZSB7CisJYXRocl9sMWUgPSAwLAorCWF0aHJfbDJlX3JldkEgPSAxLAorCWF0aHJfbDJlX3JldkIgPSAyCit9OworCitzdHJ1Y3QgYXRsMWVfaHdfc3RhdHMgeworCS8qIHJ4ICovCisJdW5zaWduZWQgbG9uZyByeF9vazsJICAgICAgLyogVGhlIG51bWJlciBvZiBnb29kIHBhY2tldCByZWNlaXZlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2JjYXN0OyAgICAgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYnJvYWRjYXN0IHBhY2tldCByZWNlaXZlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X21jYXN0OyAgICAgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgbXVsdGljYXN0IHBhY2tldCByZWNlaXZlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X3BhdXNlOyAgICAgICAvKiBUaGUgbnVtYmVyIG9mIFBhdXNlIHBhY2tldCByZWNlaXZlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2N0cmw7ICAgICAgICAvKiBUaGUgbnVtYmVyIG9mIENvbnRyb2wgcGFja2V0IHJlY2VpdmVkIG90aGVyIHRoYW4gUGF1c2UgZnJhbWUuICovCisJdW5zaWduZWQgbG9uZyByeF9mY3NfZXJyOyAgICAgLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHdpdGggYmFkIEZDUy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2xlbl9lcnI7ICAgICAvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgd2l0aCBtaXNtYXRjaCBvZiBsZW5ndGggZmllbGQgYW5kIGFjdHVhbCBzaXplLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZV9jbnQ7ICAgIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZ29vZCBwYWNrZXQgcmVjZWl2ZWQuIEZDUyBpcyBOT1QgaW5jbHVkZWQuICovCisJdW5zaWduZWQgbG9uZyByeF9ydW50OyAgICAgICAgLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGxlc3MgdGhhbiA2NCBieXRlIGxvbmcgYW5kIHdpdGggZ29vZCBGQ1MuICovCisJdW5zaWduZWQgbG9uZyByeF9mcmFnOyAgICAgICAgLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGxlc3MgdGhhbiA2NCBieXRlIGxvbmcgYW5kIHdpdGggYmFkIEZDUy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X3N6XzY0OyAgICAgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIDY0IGJ5dGUgbG9uZy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X3N6XzY1XzEyNzsgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gNjUgYW5kIDEyNy1ieXRlIGxvbmcuICovCisJdW5zaWduZWQgbG9uZyByeF9zel8xMjhfMjU1OyAgLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyByZWNlaXZlZCB0aGF0IGFyZSBiZXR3ZWVuIDEyOCBhbmQgMjU1LWJ5dGUgbG9uZy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X3N6XzI1Nl81MTE7ICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gMjU2IGFuZCA1MTEtYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfc3pfNTEyXzEwMjM7IC8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCBhcmUgYmV0d2VlbiA1MTIgYW5kIDEwMjMtYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfc3pfMTAyNF8xNTE4OyAgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gMTAyNCBhbmQgMTUxOC1ieXRlIGxvbmcuICovCisJdW5zaWduZWQgbG9uZyByeF9zel8xNTE5X21heDsgLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyByZWNlaXZlZCB0aGF0IGFyZSBiZXR3ZWVuIDE1MTktYnl0ZSBhbmQgTVRVLiAqLworCXVuc2lnbmVkIGxvbmcgcnhfc3pfb3Y7ICAgICAgIC8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCBhcmUgbW9yZSB0aGFuIE1UVSBzaXplIHRydW5jYXRlZCBieSBTZWxlbmUuICovCisJdW5zaWduZWQgbG9uZyByeF9yeGZfb3Y7ICAgICAgLyogVGhlIG51bWJlciBvZiBmcmFtZSBkcm9wcGVkIGR1ZSB0byBvY2N1cnJlbmNlIG9mIFJYIEZJRk8gb3ZlcmZsb3cuICovCisJdW5zaWduZWQgbG9uZyByeF9ycmRfb3Y7ICAgICAgLyogVGhlIG51bWJlciBvZiBmcmFtZSBkcm9wcGVkIGR1ZSB0byBvY2N1cnJlbmNlIG9mIFJSRCBvdmVyZmxvdy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2FsaWduX2VycjsgICAvKiBBbGlnbm1lbnQgRXJyb3IgKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2JjYXN0X2J5dGVfY250OyAgLyogVGhlIGJ5dGUgY291bnQgb2YgYnJvYWRjYXN0IHBhY2tldCByZWNlaXZlZCwgZXhjbHVkaW5nIEZDUy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X21jYXN0X2J5dGVfY250OyAgLyogVGhlIGJ5dGUgY291bnQgb2YgbXVsdGljYXN0IHBhY2tldCByZWNlaXZlZCwgZXhjbHVkaW5nIEZDUy4gKi8KKwl1bnNpZ25lZCBsb25nIHJ4X2Vycl9hZGRyOyAgICAvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgZHJvcHBlZCBkdWUgdG8gYWRkcmVzcyBmaWx0ZXJpbmcuICovCisKKwkvKiB0eCAqLworCXVuc2lnbmVkIGxvbmcgdHhfb2s7ICAgICAgLyogVGhlIG51bWJlciBvZiBnb29kIHBhY2tldCB0cmFuc21pdHRlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X2JjYXN0OyAgICAgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYnJvYWRjYXN0IHBhY2tldCB0cmFuc21pdHRlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X21jYXN0OyAgICAgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgbXVsdGljYXN0IHBhY2tldCB0cmFuc21pdHRlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X3BhdXNlOyAgICAgICAvKiBUaGUgbnVtYmVyIG9mIFBhdXNlIHBhY2tldCB0cmFuc21pdHRlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X2V4Y19kZWZlcjsgICAvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgd2l0aCBleGNlc3NpdmUgZGVmZXJyYWwuICovCisJdW5zaWduZWQgbG9uZyB0eF9jdHJsOyAgICAgICAgLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkIGlzIGEgY29udHJvbCBmcmFtZSwgZXhjbHVkaW5nIFBhdXNlIGZyYW1lLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfZGVmZXI7ICAgICAgIC8qIFRoZSBudW1iZXIgb2YgcGFja2V0cyB0cmFuc21pdHRlZCB0aGF0IGlzIGRlZmVycmVkLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfYnl0ZV9jbnQ7ICAgIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSB0cmFuc21pdHRlZC4gRkNTIGlzIE5PVCBpbmNsdWRlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X3N6XzY0OyAgICAgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHRyYW5zbWl0dGVkIHRoYXQgYXJlIDY0IGJ5dGUgbG9uZy4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X3N6XzY1XzEyNzsgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHRyYW5zbWl0dGVkIHRoYXQgYXJlIGJldHdlZW4gNjUgYW5kIDEyNy1ieXRlIGxvbmcuICovCisJdW5zaWduZWQgbG9uZyB0eF9zel8xMjhfMjU1OyAgLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyB0cmFuc21pdHRlZCB0aGF0IGFyZSBiZXR3ZWVuIDEyOCBhbmQgMjU1LWJ5dGUgbG9uZy4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X3N6XzI1Nl81MTE7ICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHRyYW5zbWl0dGVkIHRoYXQgYXJlIGJldHdlZW4gMjU2IGFuZCA1MTEtYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfc3pfNTEyXzEwMjM7IC8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhhdCBhcmUgYmV0d2VlbiA1MTIgYW5kIDEwMjMtYnl0ZSBsb25nLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfc3pfMTAyNF8xNTE4OyAgICAvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHRyYW5zbWl0dGVkIHRoYXQgYXJlIGJldHdlZW4gMTAyNCBhbmQgMTUxOC1ieXRlIGxvbmcuICovCisJdW5zaWduZWQgbG9uZyB0eF9zel8xNTE5X21heDsgLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyB0cmFuc21pdHRlZCB0aGF0IGFyZSBiZXR3ZWVuIDE1MTktYnl0ZSBhbmQgTVRVLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfMV9jb2w7ICAgICAgIC8qIFRoZSBudW1iZXIgb2YgcGFja2V0cyBzdWJzZXF1ZW50bHkgdHJhbnNtaXR0ZWQgc3VjY2Vzc2Z1bGx5IHdpdGggYSBzaW5nbGUgcHJpb3IgY29sbGlzaW9uLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfMl9jb2w7ICAgICAgIC8qIFRoZSBudW1iZXIgb2YgcGFja2V0cyBzdWJzZXF1ZW50bHkgdHJhbnNtaXR0ZWQgc3VjY2Vzc2Z1bGx5IHdpdGggbXVsdGlwbGUgcHJpb3IgY29sbGlzaW9ucy4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X2xhdGVfY29sOyAgICAvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgd2l0aCBsYXRlIGNvbGxpc2lvbnMuICovCisJdW5zaWduZWQgbG9uZyB0eF9hYm9ydF9jb2w7ICAgLyogVGhlIG51bWJlciBvZiB0cmFuc21pdCBwYWNrZXRzIGFib3J0ZWQgZHVlIHRvIGV4Y2Vzc2l2ZSBjb2xsaXNpb25zLiAqLworCXVuc2lnbmVkIGxvbmcgdHhfdW5kZXJydW47ICAgIC8qIFRoZSBudW1iZXIgb2YgdHJhbnNtaXQgcGFja2V0cyBhYm9ydGVkIGR1ZSB0byB0cmFuc21pdCBGSUZPIHVuZGVycnVuLCBvciBUUkQgRklGTyB1bmRlcnJ1biAqLworCXVuc2lnbmVkIGxvbmcgdHhfcmRfZW9wOyAgICAgIC8qIFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCByZWFkIGJleW9uZCB0aGUgRU9QIGludG8gdGhlIG5leHQgZnJhbWUgYXJlYSB3aGVuIFRSRCB3YXMgbm90IHdyaXR0ZW4gdGltZWx5ICovCisJdW5zaWduZWQgbG9uZyB0eF9sZW5fZXJyOyAgICAgLyogVGhlIG51bWJlciBvZiB0cmFuc21pdCBwYWNrZXRzIHdpdGggbGVuZ3RoIGZpZWxkIGRvZXMgTk9UIG1hdGNoIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZS4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X3RydW5jOyAgICAgICAvKiBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0IHBhY2tldHMgdHJ1bmNhdGVkIGR1ZSB0byBzaXplIGV4Y2VlZGluZyBNVFUuICovCisJdW5zaWduZWQgbG9uZyB0eF9iY2FzdF9ieXRlOyAgLyogVGhlIGJ5dGUgY291bnQgb2YgYnJvYWRjYXN0IHBhY2tldCB0cmFuc21pdHRlZCwgZXhjbHVkaW5nIEZDUy4gKi8KKwl1bnNpZ25lZCBsb25nIHR4X21jYXN0X2J5dGU7ICAvKiBUaGUgYnl0ZSBjb3VudCBvZiBtdWx0aWNhc3QgcGFja2V0IHRyYW5zbWl0dGVkLCBleGNsdWRpbmcgRkNTLiAqLworfTsKKworc3RydWN0IGF0bDFlX2h3IHsKKwl1OCBfX2lvbWVtICAgICAgKmh3X2FkZHI7ICAgICAgICAgICAgLyogaW5uZXIgcmVnaXN0ZXIgYWRkcmVzcyAqLworCXJlc291cmNlX3NpemVfdCBtZW1fcmFuZzsKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcjsKKwllbnVtIGF0bDFlX25pY190eXBlICBuaWNfdHlwZTsKKwl1MTYgZGV2aWNlX2lkOworCXUxNiB2ZW5kb3JfaWQ7CisJdTE2IHN1YnN5c3RlbV9pZDsKKwl1MTYgc3Vic3lzdGVtX3ZlbmRvcl9pZDsKKwl1OCAgcmV2aXNpb25faWQ7CisJdTE2IHBjaV9jbWRfd29yZDsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcGVybV9tYWNfYWRkcltFVEhfQUxFTl07CisJdTggcHJlYW1ibGVfbGVuOworCXUxNiBtYXhfZnJhbWVfc2l6ZTsKKwl1MTYgcnhfanVtYm9fdGg7CisJdTE2IHR4X2p1bWJvX3RoOworCisJdTE2IG1lZGlhX3R5cGU7CisjZGVmaW5lIE1FRElBX1RZUEVfQVVUT19TRU5TT1IgIDAKKyNkZWZpbmUgTUVESUFfVFlQRV8xMDBNX0ZVTEwgICAgMQorI2RlZmluZSBNRURJQV9UWVBFXzEwME1fSEFMRiAgICAyCisjZGVmaW5lIE1FRElBX1RZUEVfMTBNX0ZVTEwgICAgIDMKKyNkZWZpbmUgTUVESUFfVFlQRV8xME1fSEFMRiAgICAgNAorCisJdTE2IGF1dG9uZWdfYWR2ZXJ0aXNlZDsKKyNkZWZpbmUgQURWRVJUSVNFXzEwX0hBTEYgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQURWRVJUSVNFXzEwX0ZVTEwgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQURWRVJUSVNFXzEwMF9IQUxGICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgQURWRVJUSVNFXzEwMF9GVUxMICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQURWRVJUSVNFXzEwMDBfSEFMRiAgICAgICAgICAgICAweDAwMTAgLyogTm90IHVzZWQsIGp1c3QgRllJICovCisjZGVmaW5lIEFEVkVSVElTRV8xMDAwX0ZVTEwgICAgICAgICAgICAgMHgwMDIwCisJdTE2IG1paV9hdXRvbmVnX2Fkdl9yZWc7CisJdTE2IG1paV8xMDAwdF9jdHJsX3JlZzsKKworCXUxNiBpbXQ7ICAgICAgICAvKiBJbnRlcnJ1cHQgTW9kZXJhdG9yIHRpbWVyICggMnVzIHJlc29sdXRpb24pICovCisJdTE2IGljdDsgICAgICAgIC8qIEludGVycnVwdCBDbGVhciB0aW1lciAoMnVzIHJlc29sdXRpb24pICovCisJdTMyIHNtYl90aW1lcjsKKwl1MTYgcnJkX3RocmVzaDsgLyogVGhyZXNob2xkIG9mIG51bWJlciBvZiBSUkQgcHJvZHVjZWQgdG8gdHJpZ2dlcgorCQkJICBpbnRlcnJ1cHQgcmVxdWVzdCAqLworCXUxNiB0cGRfdGhyZXNoOworCXUxNiByeF9jb3VudF9kb3duOyAvKiAydXMgcmVzb2x1dGlvbiAqLworCXUxNiB0eF9jb3VudF9kb3duOworCisJdTggdHBkX2J1cnN0OyAgIC8qIE51bWJlciBvZiBUUEQgdG8gcHJlZmV0Y2ggaW4gY2FjaGUtYWxpZ25lZCBidXJzdC4gKi8KKwllbnVtIGF0bDFlX3Jyc190eXBlIHJyc190eXBlOworCXUzMiBiYXNlX2NwdTsKKwl1MzIgaW5kaXJlY3RfdGFiOworCisJZW51bSBhdGwxZV9kbWFfcmVxX2Jsb2NrIGRtYXJfYmxvY2s7CisJZW51bSBhdGwxZV9kbWFfcmVxX2Jsb2NrIGRtYXdfYmxvY2s7CisJdTggZG1hd19kbHlfY250OworCXU4IGRtYXJfZGx5X2NudDsKKworCWJvb2wgcGh5X2NvbmZpZ3VyZWQ7CisJYm9vbCByZV9hdXRvbmVnOworCWJvb2wgZW1pX2NhOworfTsKKworLyoKKyAqIHdyYXBwZXIgYXJvdW5kIGEgcG9pbnRlciB0byBhIHNvY2tldCBidWZmZXIsCisgKiBzbyBhIERNQSBoYW5kbGUgY2FuIGJlIHN0b3JlZCBhbG9uZyB3aXRoIHRoZSBidWZmZXIKKyAqLworc3RydWN0IGF0bDFlX3R4X2J1ZmZlciB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgbGVuZ3RoOworCWRtYV9hZGRyX3QgZG1hOworfTsKKworc3RydWN0IGF0bDFlX3J4X3BhZ2UgeworCWRtYV9hZGRyX3QJZG1hOyAgICAvKiByZWNlaXZlIHJhZ2UgRE1BIGFkZHJlc3MgKi8KKwl1OAkJKmFkZHI7ICAgLyogcmVjZWl2ZSByYWdlIHZpcnR1YWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QJd3JpdGVfb2Zmc2V0X2RtYTsgIC8qIHRoZSBETUEgYWRkcmVzcyB3aGljaCBjb250YWluIHRoZQorCQkJCQkgICAgICByZWNlaXZlIGRhdGEgb2Zmc2V0IGluIHRoZSBwYWdlICovCisJdTMyCQkqd3JpdGVfb2Zmc2V0X2FkZHI7IC8qIHRoZSB2aXJ0YXVsIGFkZHJlc3Mgd2hpY2ggY29udGFpbgorCQkJCQkgICAgIHRoZSByZWNlaXZlIGRhdGEgb2Zmc2V0IGluIHRoZSBwYWdlICovCisJdTMyCQlyZWFkX29mZnNldDsgICAgICAgLyogdGhlIG9mZnNldCB3aGVyZSB3ZSBoYXZlIHJlYWQgKi8KK307CisKK3N0cnVjdCBhdGwxZV9yeF9wYWdlX2Rlc2MgeworCXN0cnVjdCBhdGwxZV9yeF9wYWdlICAgcnhfcGFnZVtBVF9QQUdFX05VTV9QRVJfUVVFVUVdOworCXU4ICByeF91c2luZzsKKwl1MTYgcnhfbnhzZXE7Cit9OworCisvKiB0cmFuc21pdCBwYWNrZXQgZGVzY3JpcHRvciAodHBkKSByaW5nICovCitzdHJ1Y3QgYXRsMWVfdHhfcmluZyB7CisJc3RydWN0IGF0bDFlX3RwZF9kZXNjICpkZXNjOyAgLyogZGVzY3JpcHRvciByaW5nIHZpcnR1YWwgYWRkcmVzcyAgKi8KKwlkbWFfYWRkcl90CSAgIGRtYTsgICAgLyogZGVzY3JpcHRvciByaW5nIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1MTYgICAgICAgCSAgIGNvdW50OyAgLyogdGhlIGNvdW50IG9mIHRyYW5zbWl0IHJpbmdzICAqLworCXJ3bG9ja190CSAgIHR4X2xvY2s7CisJdTE2CQkgICBuZXh0X3RvX3VzZTsKKwlhdG9taWNfdAkgICBuZXh0X3RvX2NsZWFuOworCXN0cnVjdCBhdGwxZV90eF9idWZmZXIgKnR4X2J1ZmZlcjsKKwlkbWFfYWRkcl90CSAgIGNtYl9kbWE7CisJdTMyCQkgICAqY21iOworfTsKKworLyogcmVjZWl2ZSBwYWNrZXQgZGVzY3JpcHRvciByaW5nICovCitzdHJ1Y3QgYXRsMWVfcnhfcmluZyB7CisJdm9pZCAgICAgICAgCSpkZXNjOworCWRtYV9hZGRyX3QgIAlkbWE7CisJaW50ICAgICAgICAgCXNpemU7CisJdTMyCSAgICAJcGFnZV9zaXplOyAvKiBieXRlcyBsZW5ndGggb2YgcnhmIHBhZ2UgKi8KKwl1MzIJCXJlYWxfcGFnZV9zaXplOyAvKiByZWFsX3BhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSArIGp1bWJvICsgYWxpYWduICovCisJc3RydWN0IGF0bDFlX3J4X3BhZ2VfZGVzYwlyeF9wYWdlX2Rlc2NbQVRfTUFYX1JFQ0VJVkVfUVVFVUVdOworfTsKKworLyogYm9hcmQgc3BlY2lmaWMgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IGF0bDFlX2FkYXB0ZXIgeworCXN0cnVjdCBuZXRfZGV2aWNlICAgKm5ldGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAgICAgICpwZGV2OworCXN0cnVjdCB2bGFuX2dyb3VwICAgKnZsZ3JwOworCXN0cnVjdCBuYXBpX3N0cnVjdCAgbmFwaTsKKwlzdHJ1Y3QgbWlpX2lmX2luZm8gIG1paTsgICAgLyogTUlJIGludGVyZmFjZSBpbmZvICovCisJc3RydWN0IGF0bDFlX2h3ICAgICAgICBodzsKKwlzdHJ1Y3QgYXRsMWVfaHdfc3RhdHMgIGh3X3N0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKworCWJvb2wgaGF2ZV9tc2k7CisJdTMyIHdvbDsKKwl1MTYgbGlua19zcGVlZDsKKwl1MTYgbGlua19kdXBsZXg7CisKKwlzcGlubG9ja190IG1kaW9fbG9jazsKKwlzcGlubG9ja190IHR4X2xvY2s7CisJYXRvbWljX3QgaXJxX3NlbTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsaW5rX2NoZ190YXNrOworCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IHBoeV9jb25maWdfdGltZXI7CisKKwkvKiBBbGwgRGVzY3JpcHRvciBtZW1vcnkgKi8KKwlkbWFfYWRkcl90ICAJcmluZ19kbWE7CisJdm9pZCAgICAgCSpyaW5nX3Zpcl9hZGRyOworCWludCAgICAgICAgICAgICByaW5nX3NpemU7CisKKwlzdHJ1Y3QgYXRsMWVfdHhfcmluZyB0eF9yaW5nOworCXN0cnVjdCBhdGwxZV9yeF9yaW5nIHJ4X3Jpbmc7CisJaW50IG51bV9yeF9xdWV1ZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNkZWZpbmUgX19BVF9URVNUSU5HICAgICAgICAweDAwMDEKKyNkZWZpbmUgX19BVF9SRVNFVFRJTkcgICAgICAweDAwMDIKKyNkZWZpbmUgX19BVF9ET1dOICAgICAgICAgICAweDAwMDMKKworCXUzMiBiZF9udW1iZXI7ICAgICAvKiBib2FyZCBudW1iZXI7Ki8KKwl1MzIgcGNpX3N0YXRlWzE2XTsKKwl1MzIgKmNvbmZpZ19zcGFjZTsKK307CisKKyNkZWZpbmUgQVRfV1JJVEVfUkVHKGEsIHJlZywgdmFsdWUpICggXAorCQl3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIHJlZykpKQorCisjZGVmaW5lIEFUX1dSSVRFX0ZMVVNIKGEpIChcCisJCXJlYWRsKChhKS0+aHdfYWRkcikpCisKKyNkZWZpbmUgQVRfUkVBRF9SRUcoYSwgcmVnKSAoIFwKKwkJcmVhZGwoKGEpLT5od19hZGRyICsgcmVnKSkKKworI2RlZmluZSBBVF9XUklURV9SRUdCKGEsIHJlZywgdmFsdWUpIChcCisJCXdyaXRlYigodmFsdWUpLCAoKGEpLT5od19hZGRyICsgcmVnKSkpCisKKyNkZWZpbmUgQVRfUkVBRF9SRUdCKGEsIHJlZykgKFwKKwkJcmVhZGIoKGEpLT5od19hZGRyICsgcmVnKSkKKworI2RlZmluZSBBVF9XUklURV9SRUdXKGEsIHJlZywgdmFsdWUpIChcCisJCXdyaXRldygodmFsdWUpLCAoKGEpLT5od19hZGRyICsgcmVnKSkpCisKKyNkZWZpbmUgQVRfUkVBRF9SRUdXKGEsIHJlZykgKFwKKwkJcmVhZHcoKGEpLT5od19hZGRyICsgcmVnKSkKKworI2RlZmluZSBBVF9XUklURV9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQsIHZhbHVlKSAoIFwKKwkJd3JpdGVsKCh2YWx1ZSksICgoKGEpLT5od19hZGRyICsgcmVnKSArICgob2Zmc2V0KSA8PCAyKSkpKQorCisjZGVmaW5lIEFUX1JFQURfUkVHX0FSUkFZKGEsIHJlZywgb2Zmc2V0KSAoIFwKKwkJcmVhZGwoKChhKS0+aHdfYWRkciArIHJlZykgKyAoKG9mZnNldCkgPDwgMikpKQorCitleHRlcm4gY2hhciBhdGwxZV9kcml2ZXJfbmFtZVtdOworZXh0ZXJuIGNoYXIgYXRsMWVfZHJpdmVyX3ZlcnNpb25bXTsKKworZXh0ZXJuIHZvaWQgYXRsMWVfY2hlY2tfb3B0aW9ucyhzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IGF0bDFlX3VwKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGF0bDFlX2Rvd24oc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgYXRsMWVfcmVpbml0X2xvY2tlZChzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gczMyIGF0bDFlX3Jlc2V0X2h3KHN0cnVjdCBhdGwxZV9odyAqaHcpOworZXh0ZXJuIHZvaWQgYXRsMWVfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworI2VuZGlmIC8qIF9BVEwxX0VfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGMzYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfZXRodG9vbC5jCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDcgQXRoZXJvcyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXJpdmVkIGZyb20gSW50ZWwgZTEwMDAgZHJpdmVyCisgKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKKyNpbmNsdWRlICJhdGwxZS5oIgorCitzdGF0aWMgaW50IGF0bDFlX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgIHwKKwkJCSAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgIHwKKwkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCSAgIFNVUFBPUlRFRF9BdXRvbmVnICAgICAgIHwKKwkJCSAgIFNVUFBPUlRFRF9UUCk7CisJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZSkKKwkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKKworCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9UUDsKKworCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKKwllY21kLT5hZHZlcnRpc2luZyB8PSBody0+YXV0b25lZ19hZHZlcnRpc2VkOworCisJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJZWNtZC0+cGh5X2FkZHJlc3MgPSAwOworCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKworCWlmIChhZGFwdGVyLT5saW5rX3NwZWVkICE9IFNQRUVEXzApIHsKKwkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlpZiAoYWRhcHRlci0+bGlua19kdXBsZXggPT0gRlVMTF9EVVBMRVgpCisJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJZWxzZQorCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJfSBlbHNlIHsKKwkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZWNtZC0+ZHVwbGV4ID0gLTE7CisJfQorCisJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bDFlX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19BVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncykpCisJCW1zbGVlcCgxKTsKKworCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CisJCXUxNiBhZHY0LCBhZHY5OworCisJCWlmICgoZWNtZC0+YWR2ZXJ0aXNpbmcmQURWRVJUSVNFXzEwMDBfRlVMTCkpIHsKKwkJCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMWUpIHsKKwkJCQlody0+YXV0b25lZ19hZHZlcnRpc2VkID0KKwkJCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgJiBBVF9BRFZfTUFTSzsKKwkJCX0gZWxzZSB7CisJCQkJY2xlYXJfYml0KF9fQVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UgaWYgKGVjbWQtPmFkdmVydGlzaW5nJkFEVkVSVElTRV8xMDAwX0hBTEYpIHsKKwkJCWNsZWFyX2JpdChfX0FUX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9CisJCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgJiBBVF9BRFZfTUFTSzsKKwkJfQorCQllY21kLT5hZHZlcnRpc2luZyA9IGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgfAorCQkJCSAgICBBRFZFUlRJU0VEX1RQIHwgQURWRVJUSVNFRF9BdXRvbmVnOworCisJCWFkdjQgPSBody0+bWlpX2F1dG9uZWdfYWR2X3JlZyAmIH5NSUlfQVJfU1BFRURfTUFTSzsKKwkJYWR2OSA9IGh3LT5taWlfMTAwMHRfY3RybF9yZWcgJiB+TUlJX0FUMDAxX0NSXzEwMDBUX1NQRUVEX01BU0s7CisJCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwX0hBTEYpCisJCQlhZHY0IHw9IE1JSV9BUl8xMFRfSERfQ0FQUzsKKwkJaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTBfRlVMTCkKKwkJCWFkdjQgfD0gTUlJX0FSXzEwVF9GRF9DQVBTOworCQlpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRV8xMDBfSEFMRikKKwkJCWFkdjQgfD0gTUlJX0FSXzEwMFRYX0hEX0NBUFM7CisJCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMF9GVUxMKQorCQkJYWR2NCB8PSBNSUlfQVJfMTAwVFhfRkRfQ0FQUzsKKwkJaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTAwMF9GVUxMKQorCQkJYWR2OSB8PSBNSUlfQVQwMDFfQ1JfMTAwMFRfRkRfQ0FQUzsKKworCQlpZiAoYWR2NCAhPSBody0+bWlpX2F1dG9uZWdfYWR2X3JlZyB8fAorCQkJCWFkdjkgIT0gaHctPm1paV8xMDAwdF9jdHJsX3JlZykgeworCQkJaHctPm1paV9hdXRvbmVnX2Fkdl9yZWcgPSBhZHY0OworCQkJaHctPm1paV8xMDAwdF9jdHJsX3JlZyA9IGFkdjk7CisJCQlody0+cmVfYXV0b25lZyA9IHRydWU7CisJCX0KKworCX0gZWxzZSB7CisJCWNsZWFyX2JpdChfX0FUX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogcmVzZXQgdGhlIGxpbmsgKi8KKworCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJYXRsMWVfZG93bihhZGFwdGVyKTsKKwkJYXRsMWVfdXAoYWRhcHRlcik7CisJfSBlbHNlCisJCWF0bDFlX3Jlc2V0X2h3KCZhZGFwdGVyLT5odyk7CisKKwljbGVhcl9iaXQoX19BVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXRsMWVfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICE9IDA7Cit9CisKK3N0YXRpYyB1MzIgYXRsMWVfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisjaWZkZWYgREJHCisJcmV0dXJuIDE7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGF0bDFlX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3sKK30KKworc3RhdGljIGludCBhdGwxZV9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gQVRfUkVHU19MRU4gKiBzaXplb2YodTMyKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWVfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnApCit7CisJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBhdGwxZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyICpyZWdzX2J1ZmYgPSBwOworCXUxNiBwaHlfZGF0YTsKKworCW1lbXNldChwLCAwLCBBVF9SRUdTX0xFTiAqIHNpemVvZih1MzIpKTsKKworCXJlZ3MtPnZlcnNpb24gPSAoMSA8PCAyNCkgfCAoaHctPnJldmlzaW9uX2lkIDw8IDE2KSB8IGh3LT5kZXZpY2VfaWQ7CisKKwlyZWdzX2J1ZmZbMF0gID0gQVRfUkVBRF9SRUcoaHcsIFJFR19WUERfQ0FQKTsKKwlyZWdzX2J1ZmZbMV0gID0gQVRfUkVBRF9SRUcoaHcsIFJFR19TUElfRkxBU0hfQ1RSTCk7CisJcmVnc19idWZmWzJdICA9IEFUX1JFQURfUkVHKGh3LCBSRUdfU1BJX0ZMQVNIX0NPTkZJRyk7CisJcmVnc19idWZmWzNdICA9IEFUX1JFQURfUkVHKGh3LCBSRUdfVFdTSV9DVFJMKTsKKwlyZWdzX2J1ZmZbNF0gID0gQVRfUkVBRF9SRUcoaHcsIFJFR19QQ0lFX0RFVl9NSVNDX0NUUkwpOworCXJlZ3NfYnVmZls1XSAgPSBBVF9SRUFEX1JFRyhodywgUkVHX01BU1RFUl9DVFJMKTsKKwlyZWdzX2J1ZmZbNl0gID0gQVRfUkVBRF9SRUcoaHcsIFJFR19NQU5VQUxfVElNRVJfSU5JVCk7CisJcmVnc19idWZmWzddICA9IEFUX1JFQURfUkVHKGh3LCBSRUdfSVJRX01PRFVfVElNRVJfSU5JVCk7CisJcmVnc19idWZmWzhdICA9IEFUX1JFQURfUkVHKGh3LCBSRUdfR1BIWV9DVFJMKTsKKwlyZWdzX2J1ZmZbOV0gID0gQVRfUkVBRF9SRUcoaHcsIFJFR19DTUJESVNETUFfVElNRVIpOworCXJlZ3NfYnVmZlsxMF0gPSBBVF9SRUFEX1JFRyhodywgUkVHX0lETEVfU1RBVFVTKTsKKwlyZWdzX2J1ZmZbMTFdID0gQVRfUkVBRF9SRUcoaHcsIFJFR19NRElPX0NUUkwpOworCXJlZ3NfYnVmZlsxMl0gPSBBVF9SRUFEX1JFRyhodywgUkVHX1NFUkRFU19MT0NLKTsKKwlyZWdzX2J1ZmZbMTNdID0gQVRfUkVBRF9SRUcoaHcsIFJFR19NQUNfQ1RSTCk7CisJcmVnc19idWZmWzE0XSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfTUFDX0lQR19JRkcpOworCXJlZ3NfYnVmZlsxNV0gPSBBVF9SRUFEX1JFRyhodywgUkVHX01BQ19TVEFfQUREUik7CisJcmVnc19idWZmWzE2XSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfTUFDX1NUQV9BRERSKzQpOworCXJlZ3NfYnVmZlsxN10gPSBBVF9SRUFEX1JFRyhodywgUkVHX1JYX0hBU0hfVEFCTEUpOworCXJlZ3NfYnVmZlsxOF0gPSBBVF9SRUFEX1JFRyhodywgUkVHX1JYX0hBU0hfVEFCTEUrNCk7CisJcmVnc19idWZmWzE5XSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfTUFDX0hBTEZfRFVQTFhfQ1RSTCk7CisJcmVnc19idWZmWzIwXSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfTVRVKTsKKwlyZWdzX2J1ZmZbMjFdID0gQVRfUkVBRF9SRUcoaHcsIFJFR19XT0xfQ1RSTCk7CisJcmVnc19idWZmWzIyXSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfU1JBTV9UUkRfQUREUik7CisJcmVnc19idWZmWzIzXSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfU1JBTV9UUkRfTEVOKTsKKwlyZWdzX2J1ZmZbMjRdID0gQVRfUkVBRF9SRUcoaHcsIFJFR19TUkFNX1JYRl9BRERSKTsKKwlyZWdzX2J1ZmZbMjVdID0gQVRfUkVBRF9SRUcoaHcsIFJFR19TUkFNX1JYRl9MRU4pOworCXJlZ3NfYnVmZlsyNl0gPSBBVF9SRUFEX1JFRyhodywgUkVHX1NSQU1fVFhGX0FERFIpOworCXJlZ3NfYnVmZlsyN10gPSBBVF9SRUFEX1JFRyhodywgUkVHX1NSQU1fVFhGX0xFTik7CisJcmVnc19idWZmWzI4XSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfU1JBTV9UQ1BIX0FERFIpOworCXJlZ3NfYnVmZlsyOV0gPSBBVF9SRUFEX1JFRyhodywgUkVHX1NSQU1fUEtUSF9BRERSKTsKKworCWF0bDFlX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNQ1IsICZwaHlfZGF0YSk7CisJcmVnc19idWZmWzczXSA9ICh1MzIpcGh5X2RhdGE7CisJYXRsMWVfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKKwlyZWdzX2J1ZmZbNzRdID0gKHUzMilwaHlfZGF0YTsKK30KKworc3RhdGljIGludCBhdGwxZV9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICghYXRsMWVfY2hlY2tfZWVwcm9tX2V4aXN0KCZhZGFwdGVyLT5odykpCisJCXJldHVybiBBVF9FRVBST01fTEVOOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRsMWVfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmJ5dGVzKQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiAqZWVwcm9tX2J1ZmY7CisJaW50IGZpcnN0X2R3b3JkLCBsYXN0X2R3b3JkOworCWludCByZXRfdmFsID0gMDsKKwlpbnQgaTsKKworCWlmIChlZXByb20tPmxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdGwxZV9jaGVja19lZXByb21fZXhpc3QoaHcpKSAvKiBub3QgZXhpc3QgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllZXByb20tPm1hZ2ljID0gaHctPnZlbmRvcl9pZCB8IChody0+ZGV2aWNlX2lkIDw8IDE2KTsKKworCWZpcnN0X2R3b3JkID0gZWVwcm9tLT5vZmZzZXQgPj4gMjsKKwlsYXN0X2R3b3JkID0gKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gLSAxKSA+PiAyOworCisJZWVwcm9tX2J1ZmYgPSBrbWFsbG9jKHNpemVvZih1MzIpICoKKwkJCShsYXN0X2R3b3JkIC0gZmlyc3RfZHdvcmQgKyAxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVlcHJvbV9idWZmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gZmlyc3RfZHdvcmQ7IGkgPCBsYXN0X2R3b3JkOyBpKyspIHsKKwkJaWYgKCFhdGwxZV9yZWFkX2VlcHJvbShodywgaSAqIDQsICYoZWVwcm9tX2J1ZmZbaS1maXJzdF9kd29yZF0pKSkgeworCQkJa2ZyZWUoZWVwcm9tX2J1ZmYpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwltZW1jcHkoYnl0ZXMsICh1OCAqKWVlcHJvbV9idWZmICsgKGVlcHJvbS0+b2Zmc2V0ICYgMyksCisJCQllZXByb20tPmxlbik7CisJa2ZyZWUoZWVwcm9tX2J1ZmYpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRsMWVfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpCit7CisJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBhdGwxZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyICplZXByb21fYnVmZjsKKwl1MzIgKnB0cjsKKwlpbnQgZmlyc3RfZHdvcmQsIGxhc3RfZHdvcmQ7CisJaW50IHJldF92YWwgPSAwOworCWludCBpOworCisJaWYgKGVlcHJvbS0+bGVuID09IDApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChlZXByb20tPm1hZ2ljICE9IChody0+dmVuZG9yX2lkIHwgKGh3LT5kZXZpY2VfaWQgPDwgMTYpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaXJzdF9kd29yZCA9IGVlcHJvbS0+b2Zmc2V0ID4+IDI7CisJbGFzdF9kd29yZCA9IChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuIC0gMSkgPj4gMjsKKwllZXByb21fYnVmZiA9IGttYWxsb2MoQVRfRUVQUk9NX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKGVlcHJvbV9idWZmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcHRyID0gKHUzMiAqKWVlcHJvbV9idWZmOworCisJaWYgKGVlcHJvbS0+b2Zmc2V0ICYgMykgeworCQkvKiBuZWVkIHJlYWQvbW9kaWZ5L3dyaXRlIG9mIGZpcnN0IGNoYW5nZWQgRUVQUk9NIHdvcmQgKi8KKwkJLyogb25seSB0aGUgc2Vjb25kIGJ5dGUgb2YgdGhlIHdvcmQgaXMgYmVpbmcgbW9kaWZpZWQgKi8KKwkJaWYgKCFhdGwxZV9yZWFkX2VlcHJvbShodywgZmlyc3RfZHdvcmQgKiA0LCAmKGVlcHJvbV9idWZmWzBdKSkpIHsKKwkJCXJldF92YWwgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwkJcHRyKys7CisJfQorCWlmICgoKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4pICYgMykpIHsKKwkJLyogbmVlZCByZWFkL21vZGlmeS93cml0ZSBvZiBsYXN0IGNoYW5nZWQgRUVQUk9NIHdvcmQgKi8KKwkJLyogb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgd29yZCBpcyBiZWluZyBtb2RpZmllZCAqLworCisJCWlmICghYXRsMWVfcmVhZF9lZXByb20oaHcsIGxhc3RfZHdvcmQgKiA0LAorCQkJCSYoZWVwcm9tX2J1ZmZbbGFzdF9kd29yZCAtIGZpcnN0X2R3b3JkXSkpKSB7CisJCQlyZXRfdmFsID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogRGV2aWNlJ3MgZWVwcm9tIGlzIGFsd2F5cyBsaXR0bGUtZW5kaWFuLCB3b3JkIGFkZHJlc3NhYmxlICovCisJbWVtY3B5KHB0ciwgYnl0ZXMsIGVlcHJvbS0+bGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCBsYXN0X2R3b3JkIC0gZmlyc3RfZHdvcmQgKyAxOyBpKyspIHsKKwkJaWYgKCFhdGwxZV93cml0ZV9lZXByb20oaHcsICgoZmlyc3RfZHdvcmQgKyBpKSAqIDQpLAorCQkJCSAgZWVwcm9tX2J1ZmZbaV0pKSB7CisJCQlyZXRfdmFsID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorb3V0OgorCWtmcmVlKGVlcHJvbV9idWZmKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIHZvaWQgYXRsMWVfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKK3sKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgIGF0bDFlX2RyaXZlcl9uYW1lLCAzMik7CisJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBhdGwxZV9kcml2ZXJfdmVyc2lvbiwgMzIpOworCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIkwxZSIsIDMyKTsKKwlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wZGV2KSwgMzIpOworCWRydmluZm8tPm5fc3RhdHMgPSAwOworCWRydmluZm8tPnRlc3RpbmZvX2xlbiA9IDA7CisJZHJ2aW5mby0+cmVnZHVtcF9sZW4gPSBhdGwxZV9nZXRfcmVnc19sZW4obmV0ZGV2KTsKKwlkcnZpbmZvLT5lZWR1bXBfbGVuID0gYXRsMWVfZ2V0X2VlcHJvbV9sZW4obmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgYXRsMWVfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX01BR0lDIHwgV0FLRV9QSFk7CisJd29sLT53b2xvcHRzID0gMDsKKworCWlmIChhZGFwdGVyLT53b2wgJiBBVF9XVUZDX0VYKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9VQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgQVRfV1VGQ19NQykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIEFUX1dVRkNfQkMpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX0JDQVNUOworCWlmIChhZGFwdGVyLT53b2wgJiBBVF9XVUZDX01BRykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUFHSUM7CisJaWYgKGFkYXB0ZXItPndvbCAmIEFUX1dVRkNfTE5LQykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfUEhZOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGF0bDFlX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9BUlAgfCBXQUtFX01BR0lDU0VDVVJFIHwKKwkJCSAgICBXQUtFX01DQVNUIHwgV0FLRV9CQ0FTVCB8IFdBS0VfTUNBU1QpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJLyogdGhlc2Ugc2V0dGluZ3Mgd2lsbCBhbHdheXMgb3ZlcnJpZGUgd2hhdCB3ZSBjdXJyZW50bHkgaGF2ZSAqLworCWFkYXB0ZXItPndvbCA9IDA7CisKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQUdJQykKKwkJYWRhcHRlci0+d29sIHw9IEFUX1dVRkNfTUFHOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX1BIWSkKKwkJYWRhcHRlci0+d29sIHw9IEFUX1dVRkNfTE5LQzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bDFlX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJYXRsMWVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBhdGwxZV9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzICAgICAgICAgICA9IGF0bDFlX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzICAgICAgICAgICA9IGF0bDFlX3NldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8gICAgICAgICAgICA9IGF0bDFlX2dldF9kcnZpbmZvLAorCS5nZXRfcmVnc19sZW4gICAgICAgICAgID0gYXRsMWVfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncyAgICAgICAgICAgICAgID0gYXRsMWVfZ2V0X3JlZ3MsCisJLmdldF93b2wgICAgICAgICAgICAgICAgPSBhdGwxZV9nZXRfd29sLAorCS5zZXRfd29sICAgICAgICAgICAgICAgID0gYXRsMWVfc2V0X3dvbCwKKwkuZ2V0X21zZ2xldmVsICAgICAgICAgICA9IGF0bDFlX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsICAgICAgICAgICA9IGF0bDFlX3NldF9tc2dsZXZlbCwKKwkubndheV9yZXNldCAgICAgICAgICAgICA9IGF0bDFlX253YXlfcmVzZXQsCisJLmdldF9saW5rICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfZWVwcm9tX2xlbiAgICAgICAgID0gYXRsMWVfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20gICAgICAgICAgICAgPSBhdGwxZV9nZXRfZWVwcm9tLAorCS5zZXRfZWVwcm9tICAgICAgICAgICAgID0gYXRsMWVfc2V0X2VlcHJvbSwKKwkuZ2V0X3R4X2NzdW0gICAgICAgICAgICA9IGF0bDFlX2dldF90eF9jc3VtLAorCS5nZXRfc2cgICAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZyAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKKyNpZmRlZiBORVRJRl9GX1RTTworCS5nZXRfdHNvICAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfdHNvLAorI2VuZGlmCit9OworCit2b2lkIGF0bDFlX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZhdGwxZV9ldGh0b29sX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ody5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDllNzUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfaHcuYwpAQCAtMCwwICsxLDY2NCBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA3IEF0aGVyb3MgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGVyaXZlZCBmcm9tIEludGVsIGUxMDAwIGRyaXZlcgorICogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorCisjaW5jbHVkZSAiYXRsMWUuaCIKKworLyoKKyAqIGNoZWNrX2VlcHJvbV9leGlzdAorICogcmV0dXJuIDAgaWYgZWVwcm9tIGV4aXN0CisgKi8KK2ludCBhdGwxZV9jaGVja19lZXByb21fZXhpc3Qoc3RydWN0IGF0bDFlX2h3ICpodykKK3sKKwl1MzIgdmFsdWU7CisKKwl2YWx1ZSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfU1BJX0ZMQVNIX0NUUkwpOworCWlmICh2YWx1ZSAmIFNQSV9GTEFTSF9DVFJMX0VOX1ZQRCkgeworCQl2YWx1ZSAmPSB+U1BJX0ZMQVNIX0NUUkxfRU5fVlBEOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19TUElfRkxBU0hfQ1RSTCwgdmFsdWUpOworCX0KKwl2YWx1ZSA9IEFUX1JFQURfUkVHVyhodywgUkVHX1BDSUVfQ0FQX0xJU1QpOworCXJldHVybiAoKHZhbHVlICYgMHhGRjAwKSA9PSAweDZDMDApID8gMCA6IDE7Cit9CisKK3ZvaWQgYXRsMWVfaHdfc2V0X21hY19hZGRyKHN0cnVjdCBhdGwxZV9odyAqaHcpCit7CisJdTMyIHZhbHVlOworCS8qCisJICogMDAtMEItNkEtRjYtMDAtREMKKwkgKiAwOiAgNkFGNjAwREMgMTogMDAwQgorCSAqIGxvdyBkd29yZAorCSAqLworCXZhbHVlID0gKCgodTMyKWh3LT5tYWNfYWRkclsyXSkgPDwgMjQpIHwKKwkJKCgodTMyKWh3LT5tYWNfYWRkclszXSkgPDwgMTYpIHwKKwkJKCgodTMyKWh3LT5tYWNfYWRkcls0XSkgPDwgOCkgIHwKKwkJKCgodTMyKWh3LT5tYWNfYWRkcls1XSkpIDsKKwlBVF9XUklURV9SRUdfQVJSQVkoaHcsIFJFR19NQUNfU1RBX0FERFIsIDAsIHZhbHVlKTsKKwkvKiBoaWdodCBkd29yZCAqLworCXZhbHVlID0gKCgodTMyKWh3LT5tYWNfYWRkclswXSkgPDwgOCkgfAorCQkoKCh1MzIpaHctPm1hY19hZGRyWzFdKSkgOworCUFUX1dSSVRFX1JFR19BUlJBWShodywgUkVHX01BQ19TVEFfQUREUiwgMSwgdmFsdWUpOworfQorCisvKgorICogYXRsMWVfZ2V0X3Blcm1hbmVudF9hZGRyZXNzCisgKiByZXR1cm4gMCBpZiBnZXQgdmFsaWQgbWFjIGFkZHJlc3MsCisgKi8KK3N0YXRpYyBpbnQgYXRsMWVfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKHN0cnVjdCBhdGwxZV9odyAqaHcpCit7CisJdTMyIGFkZHJbMl07CisJdTMyIGk7CisJdTMyIHR3c2lfY3RybF9kYXRhOworCXU4ICBldGhfYWRkcltFVEhfQUxFTl07CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihody0+cGVybV9tYWNfYWRkcikpCisJCXJldHVybiAwOworCisJLyogaW5pdCAqLworCWFkZHJbMF0gPSBhZGRyWzFdID0gMDsKKworCWlmICghYXRsMWVfY2hlY2tfZWVwcm9tX2V4aXN0KGh3KSkgeworCQkvKiBlZXByb20gZXhpc3QgKi8KKwkJdHdzaV9jdHJsX2RhdGEgPSBBVF9SRUFEX1JFRyhodywgUkVHX1RXU0lfQ1RSTCk7CisJCXR3c2lfY3RybF9kYXRhIHw9IFRXU0lfQ1RSTF9TV19MRFNUQVJUOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19UV1NJX0NUUkwsIHR3c2lfY3RybF9kYXRhKTsKKwkJZm9yIChpID0gMDsgaSA8IEFUX1RXU0lfRUVQUk9NX1RJTUVPVVQ7IGkrKykgeworCQkJbXNsZWVwKDEwKTsKKwkJCXR3c2lfY3RybF9kYXRhID0gQVRfUkVBRF9SRUcoaHcsIFJFR19UV1NJX0NUUkwpOworCQkJaWYgKCh0d3NpX2N0cmxfZGF0YSAmIFRXU0lfQ1RSTF9TV19MRFNUQVJUKSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID49IEFUX1RXU0lfRUVQUk9NX1RJTUVPVVQpCisJCQlyZXR1cm4gQVRfRVJSX1RJTUVPVVQ7CisJfQorCisJLyogbWF5YmUgTUFDLWFkZHJlc3MgaXMgZnJvbSBCSU9TICovCisJYWRkclswXSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfTUFDX1NUQV9BRERSKTsKKwlhZGRyWzFdID0gQVRfUkVBRF9SRUcoaHcsIFJFR19NQUNfU1RBX0FERFIgKyA0KTsKKwkqKHUzMiAqKSAmZXRoX2FkZHJbMl0gPSBzd2FiMzIoYWRkclswXSk7CisJKih1MTYgKikgJmV0aF9hZGRyWzBdID0gc3dhYjE2KCoodTE2ICopJmFkZHJbMV0pOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2FkZHIpKSB7CisJCW1lbWNweShody0+cGVybV9tYWNfYWRkciwgZXRoX2FkZHIsIEVUSF9BTEVOKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIEFUX0VSUl9FRVBST007Cit9CisKK2Jvb2wgYXRsMWVfd3JpdGVfZWVwcm9tKHN0cnVjdCBhdGwxZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBhdGwxZV9yZWFkX2VlcHJvbShzdHJ1Y3QgYXRsMWVfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKnBfdmFsdWUpCit7CisJaW50IGk7CisJdTMyIGNvbnRyb2w7CisKKwlpZiAob2Zmc2V0ICYgMykKKwkJcmV0dXJuIGZhbHNlOyAvKiBhZGRyZXNzIGRvIG5vdCBhbGlnbiAqLworCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfVlBEX0RBVEEsIDApOworCWNvbnRyb2wgPSAob2Zmc2V0ICYgVlBEX0NBUF9WUERfQUREUl9NQVNLKSA8PCBWUERfQ0FQX1ZQRF9BRERSX1NISUZUOworCUFUX1dSSVRFX1JFRyhodywgUkVHX1ZQRF9DQVAsIGNvbnRyb2wpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJbXNsZWVwKDIpOworCQljb250cm9sID0gQVRfUkVBRF9SRUcoaHcsIFJFR19WUERfQ0FQKTsKKwkJaWYgKGNvbnRyb2wgJiBWUERfQ0FQX1ZQRF9GTEFHKQorCQkJYnJlYWs7CisJfQorCWlmIChjb250cm9sICYgVlBEX0NBUF9WUERfRkxBRykgeworCQkqcF92YWx1ZSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfVlBEX0RBVEEpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOyAvKiB0aW1lb3V0ICovCit9CisKK3ZvaWQgYXRsMWVfZm9yY2VfcHMoc3RydWN0IGF0bDFlX2h3ICpodykKK3sKKwlBVF9XUklURV9SRUdXKGh3LCBSRUdfR1BIWV9DVFJMLAorCQkJR1BIWV9DVFJMX1BXX1dPTF9ESVMgfCBHUEhZX0NUUkxfRVhUX1JFU0VUKTsKK30KKworLyoKKyAqIFJlYWRzIHRoZSBhZGFwdGVyJ3MgTUFDIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqLworaW50IGF0bDFlX3JlYWRfbWFjX2FkZHIoc3RydWN0IGF0bDFlX2h3ICpodykKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IGF0bDFlX2dldF9wZXJtYW5lbnRfYWRkcmVzcyhodyk7CisJaWYgKGVycikKKwkJcmV0dXJuIEFUX0VSUl9FRVBST007CisJbWVtY3B5KGh3LT5tYWNfYWRkciwgaHctPnBlcm1fbWFjX2FkZHIsIHNpemVvZihody0+cGVybV9tYWNfYWRkcikpOworCXJldHVybiAwOworfQorCisvKgorICogYXRsMWVfaGFzaF9tY19hZGRyCisgKiAgcHVycG9zZQorICogICAgICBzZXQgaGFzaCB2YWx1ZSBmb3IgYSBtdWx0aWNhc3QgYWRkcmVzcworICogICAgICBoYXNoIGNhbGN1IHByb2Nlc3NpbmcgOgorICogICAgICAgICAgMS4gY2FsY3UgMzJiaXQgQ1JDIGZvciBtdWx0aWNhc3QgYWRkcmVzcworICogICAgICAgICAgMi4gcmV2ZXJzZSBjcmMgd2l0aCBNU0IgdG8gTFNCCisgKi8KK3UzMiBhdGwxZV9oYXNoX21jX2FkZHIoc3RydWN0IGF0bDFlX2h3ICpodywgdTggKm1jX2FkZHIpCit7CisJdTMyIGNyYzMyOworCXUzMiB2YWx1ZSA9IDA7CisJaW50IGk7CisKKwljcmMzMiA9IGV0aGVyX2NyY19sZSg2LCBtY19hZGRyKTsKKwljcmMzMiA9IH5jcmMzMjsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKwkJdmFsdWUgfD0gKCgoY3JjMzIgPj4gaSkgJiAxKSA8PCAoMzEgLSBpKSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qCisgKiBTZXRzIHRoZSBiaXQgaW4gdGhlIG11bHRpY2FzdCB0YWJsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBoYXNoIHZhbHVlLgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIGhhc2hfdmFsdWUgLSBNdWx0aWNhc3QgYWRkcmVzcyBoYXNoIHZhbHVlCisgKi8KK3ZvaWQgYXRsMWVfaGFzaF9zZXQoc3RydWN0IGF0bDFlX2h3ICpodywgdTMyIGhhc2hfdmFsdWUpCit7CisJdTMyIGhhc2hfYml0LCBoYXNoX3JlZzsKKwl1MzIgbXRhOworCisJLyoKKwkgKiBUaGUgSEFTSCBUYWJsZSAgaXMgYSByZWdpc3RlciBhcnJheSBvZiAyIDMyLWJpdCByZWdpc3RlcnMuCisJICogSXQgaXMgdHJlYXRlZCBsaWtlIGFuIGFycmF5IG9mIDY0IGJpdHMuICBXZSB3YW50IHRvIHNldAorCSAqIGJpdCBCaXRBcnJheVtoYXNoX3ZhbHVlXS4gU28gd2UgZmlndXJlIG91dCB3aGF0IHJlZ2lzdGVyCisJICogdGhlIGJpdCBpcyBpbiwgcmVhZCBpdCwgT1IgaW4gdGhlIG5ldyBiaXQsIHRoZW4gd3JpdGUKKwkgKiBiYWNrIHRoZSBuZXcgdmFsdWUuICBUaGUgcmVnaXN0ZXIgaXMgZGV0ZXJtaW5lZCBieSB0aGUKKwkgKiB1cHBlciA3IGJpdHMgb2YgdGhlIGhhc2ggdmFsdWUgYW5kIHRoZSBiaXQgd2l0aGluIHRoYXQKKwkgKiByZWdpc3RlciBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXIgNSBiaXRzIG9mIHRoZSB2YWx1ZS4KKwkgKi8KKwloYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDMxKSAmIDB4MTsKKwloYXNoX2JpdCA9IChoYXNoX3ZhbHVlID4+IDI2KSAmIDB4MUY7CisKKwltdGEgPSBBVF9SRUFEX1JFR19BUlJBWShodywgUkVHX1JYX0hBU0hfVEFCTEUsIGhhc2hfcmVnKTsKKworCW10YSB8PSAoMSA8PCBoYXNoX2JpdCk7CisKKwlBVF9XUklURV9SRUdfQVJSQVkoaHcsIFJFR19SWF9IQVNIX1RBQkxFLCBoYXNoX3JlZywgbXRhKTsKK30KKy8qCisgKiBSZWFkcyB0aGUgdmFsdWUgZnJvbSBhIFBIWSByZWdpc3RlcgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIHJlZ19hZGRyIC0gYWRkcmVzcyBvZiB0aGUgUEhZIHJlZ2lzdGVyIHRvIHJlYWQKKyAqLworaW50IGF0bDFlX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgYXRsMWVfaHcgKmh3LCB1MTYgcmVnX2FkZHIsIHUxNiAqcGh5X2RhdGEpCit7CisJdTMyIHZhbDsKKwlpbnQgaTsKKworCXZhbCA9ICgodTMyKShyZWdfYWRkciAmIE1ESU9fUkVHX0FERFJfTUFTSykpIDw8IE1ESU9fUkVHX0FERFJfU0hJRlQgfAorCQlNRElPX1NUQVJUIHwgTURJT19TVVBfUFJFQU1CTEUgfCBNRElPX1JXIHwKKwkJTURJT19DTEtfMjVfNCA8PCBNRElPX0NMS19TRUxfU0hJRlQ7CisKKwlBVF9XUklURV9SRUcoaHcsIFJFR19NRElPX0NUUkwsIHZhbCk7CisKKwl3bWIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBNRElPX1dBSVRfVElNRVM7IGkrKykgeworCQl1ZGVsYXkoMik7CisJCXZhbCA9IEFUX1JFQURfUkVHKGh3LCBSRUdfTURJT19DVFJMKTsKKwkJaWYgKCEodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkKKwkJCWJyZWFrOworCQl3bWIoKTsKKwl9CisJaWYgKCEodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkgeworCQkqcGh5X2RhdGEgPSAodTE2KXZhbDsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIEFUX0VSUl9QSFk7Cit9CisKKy8qCisgKiBXcml0ZXMgYSB2YWx1ZSB0byBhIFBIWSByZWdpc3RlcgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIHJlZ19hZGRyIC0gYWRkcmVzcyBvZiB0aGUgUEhZIHJlZ2lzdGVyIHRvIHdyaXRlCisgKiBkYXRhIC0gZGF0YSB0byB3cml0ZSB0byB0aGUgUEhZCisgKi8KK2ludCBhdGwxZV93cml0ZV9waHlfcmVnKHN0cnVjdCBhdGwxZV9odyAqaHcsIHUzMiByZWdfYWRkciwgdTE2IHBoeV9kYXRhKQoreworCWludCBpOworCXUzMiB2YWw7CisKKwl2YWwgPSAoKHUzMikocGh5X2RhdGEgJiBNRElPX0RBVEFfTUFTSykpIDw8IE1ESU9fREFUQV9TSElGVCB8CisJICAgICAgIChyZWdfYWRkciZNRElPX1JFR19BRERSX01BU0spIDw8IE1ESU9fUkVHX0FERFJfU0hJRlQgfAorCSAgICAgICBNRElPX1NVUF9QUkVBTUJMRSB8CisJICAgICAgIE1ESU9fU1RBUlQgfAorCSAgICAgICBNRElPX0NMS18yNV80IDw8IE1ESU9fQ0xLX1NFTF9TSElGVDsKKworCUFUX1dSSVRFX1JFRyhodywgUkVHX01ESU9fQ1RSTCwgdmFsKTsKKwl3bWIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBNRElPX1dBSVRfVElNRVM7IGkrKykgeworCQl1ZGVsYXkoMik7CisJCXZhbCA9IEFUX1JFQURfUkVHKGh3LCBSRUdfTURJT19DVFJMKTsKKwkJaWYgKCEodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkKKwkJCWJyZWFrOworCQl3bWIoKTsKKwl9CisKKwlpZiAoISh2YWwgJiAoTURJT19TVEFSVCB8IE1ESU9fQlVTWSkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBBVF9FUlJfUEhZOworfQorCisvKgorICogYXRsMWVfaW5pdF9wY2llIC0gaW5pdCBQQ0lFIG1vZHVsZQorICovCitzdGF0aWMgdm9pZCBhdGwxZV9pbml0X3BjaWUoc3RydWN0IGF0bDFlX2h3ICpodykKK3sKKwl1MzIgdmFsdWU7CisJLyogY29tbWVudCAybGluZXMgYmVsb3cgdG8gc2F2ZSBtb3JlIHBvd2VyIHdoZW4gc3VzdXNwZW5kCisJICAgdmFsdWUgPSBMVFNTTV9URVNUX01PREVfREVGOworCSAgIEFUX1dSSVRFX1JFRyhodywgUkVHX0xUU1NNX1RFU1RfTU9ERSwgdmFsdWUpOworCSAqLworCisJLyogcGNpZSBmbG93IGNvbnRyb2wgbW9kZSBjaGFuZ2UgKi8KKwl2YWx1ZSA9IEFUX1JFQURfUkVHKGh3LCAweDEwMDgpOworCXZhbHVlIHw9IDB4ODAwMDsKKwlBVF9XUklURV9SRUcoaHcsIDB4MTAwOCwgdmFsdWUpOworfQorLyoKKyAqIENvbmZpZ3VyZXMgUEhZIGF1dG9uZWcgYW5kIGZsb3cgY29udHJvbCBhZHZlcnRpc2VtZW50IHNldHRpbmdzCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqLworc3RhdGljIGludCBhdGwxZV9waHlfc2V0dXBfYXV0b25lZ19hZHYoc3RydWN0IGF0bDFlX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgbWlpX2F1dG9uZWdfYWR2X3JlZzsKKwl1MTYgbWlpXzEwMDB0X2N0cmxfcmVnOworCisJaWYgKDAgIT0gaHctPm1paV9hdXRvbmVnX2Fkdl9yZWcpCisJCXJldHVybiAwOworCS8qIFJlYWQgdGhlIE1JSSBBdXRvLU5lZyBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyIChBZGRyZXNzIDQvOSkuICovCisJbWlpX2F1dG9uZWdfYWR2X3JlZyA9IE1JSV9BUl9ERUZBVUxUX0NBUF9NQVNLOworCW1paV8xMDAwdF9jdHJsX3JlZyAgPSBNSUlfQVQwMDFfQ1JfMTAwMFRfREVGQVVMVF9DQVBfTUFTSzsKKworCS8qCisJICogTmVlZCB0byBwYXJzZSBhdXRvbmVnX2FkdmVydGlzZWQgIGFuZCBzZXQgdXAKKwkgKiB0aGUgYXBwcm9wcmlhdGUgUEhZIHJlZ2lzdGVycy4gIEZpcnN0IHdlIHdpbGwgcGFyc2UgZm9yCisJICogYXV0b25lZ19hZHZlcnRpc2VkIHNvZnR3YXJlIG92ZXJyaWRlLiAgU2luY2Ugd2UgY2FuIGFkdmVydGlzZQorCSAqIGEgcGxldGhvcmEgb2YgY29tYmluYXRpb25zLCB3ZSBuZWVkIHRvIGNoZWNrIGVhY2ggYml0CisJICogaW5kaXZpZHVhbGx5LgorCSAqLworCisJLyoKKwkgKiBGaXJzdCB3ZSBjbGVhciBhbGwgdGhlIDEwLzEwMCBtYiBzcGVlZCBiaXRzIGluIHRoZSBBdXRvLU5lZworCSAqIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKEFkZHJlc3MgNCkgYW5kIHRoZSAxMDAwIG1iIHNwZWVkIGJpdHMgaW4KKwkgKiB0aGUgIDEwMDBCYXNlLVQgY29udHJvbCBSZWdpc3RlciAoQWRkcmVzcyA5KS4KKwkgKi8KKwltaWlfYXV0b25lZ19hZHZfcmVnICY9IH5NSUlfQVJfU1BFRURfTUFTSzsKKwltaWlfMTAwMHRfY3RybF9yZWcgICY9IH5NSUlfQVQwMDFfQ1JfMTAwMFRfU1BFRURfTUFTSzsKKworCS8qCisJICogTmVlZCB0byBwYXJzZSBNZWRpYVR5cGUgYW5kIHNldHVwIHRoZQorCSAqIGFwcHJvcHJpYXRlIFBIWSByZWdpc3RlcnMuCisJICovCisJc3dpdGNoIChody0+bWVkaWFfdHlwZSkgeworCWNhc2UgTUVESUFfVFlQRV9BVVRPX1NFTlNPUjoKKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSAoTUlJX0FSXzEwVF9IRF9DQVBTICAgfAorCQkJCQlNSUlfQVJfMTBUX0ZEX0NBUFMgICB8CisJCQkJCU1JSV9BUl8xMDBUWF9IRF9DQVBTIHwKKwkJCQkJTUlJX0FSXzEwMFRYX0ZEX0NBUFMpOworCQlody0+YXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFXzEwX0hBTEYgIHwKKwkJCQkJIEFEVkVSVElTRV8xMF9GVUxMICB8CisJCQkJCSBBRFZFUlRJU0VfMTAwX0hBTEYgfAorCQkJCQkgQURWRVJUSVNFXzEwMF9GVUxMOworCQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDFlKSB7CisJCQltaWlfMTAwMHRfY3RybF9yZWcgfD0KKwkJCQlNSUlfQVQwMDFfQ1JfMTAwMFRfRkRfQ0FQUzsKKwkJCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgfD0gQURWRVJUSVNFXzEwMDBfRlVMTDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTUVESUFfVFlQRV8xMDBNX0ZVTEw6CisJCW1paV9hdXRvbmVnX2Fkdl9yZWcgICB8PSBNSUlfQVJfMTAwVFhfRkRfQ0FQUzsKKwkJaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRV8xMDBfRlVMTDsKKwkJYnJlYWs7CisKKwljYXNlIE1FRElBX1RZUEVfMTAwTV9IQUxGOgorCQltaWlfYXV0b25lZ19hZHZfcmVnICAgfD0gTUlJX0FSXzEwMFRYX0hEX0NBUFM7CisJCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VfMTAwX0hBTEY7CisJCWJyZWFrOworCisJY2FzZSBNRURJQV9UWVBFXzEwTV9GVUxMOgorCQltaWlfYXV0b25lZ19hZHZfcmVnICAgfD0gTUlJX0FSXzEwVF9GRF9DQVBTOworCQlody0+YXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFXzEwX0ZVTEw7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyAgIHw9IE1JSV9BUl8xMFRfSERfQ0FQUzsKKwkJaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRV8xMF9IQUxGOworCQlicmVhazsKKwl9CisKKwkvKiBmbG93IGNvbnRyb2wgZml4ZWQgdG8gZW5hYmxlIGFsbCAqLworCW1paV9hdXRvbmVnX2Fkdl9yZWcgfD0gKE1JSV9BUl9BU01fRElSIHwgTUlJX0FSX1BBVVNFKTsKKworCWh3LT5taWlfYXV0b25lZ19hZHZfcmVnID0gbWlpX2F1dG9uZWdfYWR2X3JlZzsKKwlody0+bWlpXzEwMDB0X2N0cmxfcmVnICA9IG1paV8xMDAwdF9jdHJsX3JlZzsKKworCXJldF92YWwgPSBhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfQURWRVJUSVNFLCBtaWlfYXV0b25lZ19hZHZfcmVnKTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKKwlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDFlIHx8IGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyZV9yZXZBKSB7CisJCXJldF92YWwgPSBhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfQVQwMDFfQ1IsCisJCQkJCSAgIG1paV8xMDAwdF9jdHJsX3JlZyk7CisJCWlmIChyZXRfdmFsKQorCQkJcmV0dXJuIHJldF92YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFJlc2V0cyB0aGUgUEhZIGFuZCBtYWtlIGFsbCBjb25maWcgdmFsaWRhdGUKKyAqCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICoKKyAqIFNldHMgYml0IDE1IGFuZCAxMiBvZiB0aGUgTUlJIGNvbnRyb2wgcmVnaXNlciAoZm9yIEYwMDEgYnVnKQorICovCitpbnQgYXRsMWVfcGh5X2NvbW1pdChzdHJ1Y3QgYXRsMWVfaHcgKmh3KQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhdGwxZV9hZGFwdGVyICopaHctPmFkYXB0ZXI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCByZXRfdmFsOworCXUxNiBwaHlfZGF0YTsKKworCXBoeV9kYXRhID0gTUlJX0NSX1JFU0VUIHwgTUlJX0NSX0FVVE9fTkVHX0VOIHwgTUlJX0NSX1JFU1RBUlRfQVVUT19ORUc7CisKKwlyZXRfdmFsID0gYXRsMWVfd3JpdGVfcGh5X3JlZyhodywgTUlJX0JNQ1IsIHBoeV9kYXRhKTsKKwlpZiAocmV0X3ZhbCkgeworCQl1MzIgdmFsOworCQlpbnQgaTsKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCSAqIHBjaWUgc2VyZGVzIGxpbmsgbWF5IGJlIGRvd24gIQorCQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWZvciAoaSA9IDA7IGkgPCAyNTsgaSsrKSB7CisJCQltc2xlZXAoMSk7CisJCQl2YWwgPSBBVF9SRUFEX1JFRyhodywgUkVHX01ESU9fQ1RSTCk7CisJCQlpZiAoISh2YWwgJiAoTURJT19TVEFSVCB8IE1ESU9fQlVTWSkpKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKDAgIT0gKHZhbCAmIChNRElPX1NUQVJUIHwgTURJT19CVVNZKSkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicGNpZSBsaW5rZG93biBhdCBsZWFzdCBmb3IgMjVtc1xuIik7CisJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJfQorCisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaWUgbGlua3VwIGFmdGVyICVkIG1zXG4iLCBpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBhdGwxZV9waHlfaW5pdChzdHJ1Y3QgYXRsMWVfaHcgKmh3KQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhdGwxZV9hZGFwdGVyICopaHctPmFkYXB0ZXI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXMzMiByZXRfdmFsOworCXUxNiBwaHlfdmFsOworCisJaWYgKGh3LT5waHlfY29uZmlndXJlZCkgeworCQlpZiAoaHctPnJlX2F1dG9uZWcpIHsKKwkJCWh3LT5yZV9hdXRvbmVnID0gZmFsc2U7CisJCQlyZXR1cm4gYXRsMWVfcmVzdGFydF9hdXRvbmVnKGh3KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBSRVNFVCBHUEhZIENvcmUgKi8KKwlBVF9XUklURV9SRUdXKGh3LCBSRUdfR1BIWV9DVFJMLCBHUEhZX0NUUkxfREVGQVVMVCk7CisJbXNsZWVwKDIpOworCUFUX1dSSVRFX1JFR1coaHcsIFJFR19HUEhZX0NUUkwsIEdQSFlfQ1RSTF9ERUZBVUxUIHwKKwkJICAgICAgR1BIWV9DVFJMX0VYVF9SRVNFVCk7CisJbXNsZWVwKDIpOworCisJLyogcGF0Y2hlcyAqLworCS8qIHAxLiBlYWJsZSBoaWJlcm5hdGlvbiBtb2RlICovCisJcmV0X3ZhbCA9IGF0bDFlX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfQUREUiwgMHhCKTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisJcmV0X3ZhbCA9IGF0bDFlX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgMHhCQzAwKTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisJLyogcDIuIHNldCBDbGFzcyBBL0IgZm9yIGFsbCBtb2RlcyAqLworCXJldF92YWwgPSBhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDApOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwlwaHlfdmFsID0gMHgwMmVmOworCS8qIHJlbW92ZSBDbGFzcyBBQiAqLworCS8qIHBoeV92YWwgPSBody0+ZW1pX2NhID8gMHgwMmVmIDogMHgwMmRmOyAqLworCXJldF92YWwgPSBhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIHBoeV92YWwpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwkvKiBwMy4gMTBCID8/PyAqLworCXJldF92YWwgPSBhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDB4MTIpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwlyZXRfdmFsID0gYXRsMWVfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAweDRDMDQpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwkvKiBwNC4gMTAwMFQgcG93ZXIgKi8KKwlyZXRfdmFsID0gYXRsMWVfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDQpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwlyZXRfdmFsID0gYXRsMWVfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAweDhCQkIpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCXJldF92YWwgPSBhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDB4NSk7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCXJldF92YWwgPSBhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIDB4MkM0Nik7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCisJbXNsZWVwKDEpOworCisJLypFbmFibGUgUEhZIExpbmtDaGFuZ2UgSW50ZXJydXB0ICovCisJcmV0X3ZhbCA9IGF0bDFlX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9JTlRfQ1RSTCwgMHhDMDApOworCWlmIChyZXRfdmFsKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIGVuYWJsZSBQSFkgbGlua0NoYW5nZSBJbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisJLyogc2V0dXAgQXV0b05lZyBwYXJhbWV0ZXJzICovCisJcmV0X3ZhbCA9IGF0bDFlX3BoeV9zZXR1cF9hdXRvbmVnX2Fkdihodyk7CisJaWYgKHJldF92YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgU2V0dGluZyB1cCBBdXRvLU5lZ290aWF0aW9uXG4iKTsKKwkJcmV0dXJuIHJldF92YWw7CisJfQorCS8qIFNXLlJlc2V0ICYgRW4tQXV0by1OZWcgdG8gcmVzdGFydCBBdXRvLU5lZyovCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiUmVzdGFydGluZyBBdXRvLU5lZyIpOworCXJldF92YWwgPSBhdGwxZV9waHlfY29tbWl0KGh3KTsKKwlpZiAocmV0X3ZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBSZXNldHRpbmcgdGhlIHBoeSIpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisKKwlody0+cGh5X2NvbmZpZ3VyZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXNldCB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgdW5pdHM7IG1hc2sgYW5kIGNsZWFyIGFsbCBpbnRlcnJ1cHRzLgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIHJldHVybiA6IDAgIG9yICBpZGxlIHN0YXR1cyAoaWYgZXJyb3IpCisgKi8KK2ludCBhdGwxZV9yZXNldF9odyhzdHJ1Y3QgYXRsMWVfaHcgKmh3KQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhdGwxZV9hZGFwdGVyICopaHctPmFkYXB0ZXI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJdTMyIGlkbGVfc3RhdHVzX2RhdGEgPSAwOworCXUxNiBwY2lfY2ZnX2NtZF93b3JkID0gMDsKKwlpbnQgdGltZW91dCA9IDA7CisKKwkvKiBXb3JrYXJvdW5kIGZvciBQQ0kgcHJvYmxlbSB3aGVuIEJJT1Mgc2V0cyBNTVJCQyBpbmNvcnJlY3RseS4gKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfUkVHX0NPTU1BTkQsICZwY2lfY2ZnX2NtZF93b3JkKTsKKwlpZiAoKHBjaV9jZmdfY21kX3dvcmQgJiAoQ01EX0lPX1NQQUNFIHwKKwkJCQlDTURfTUVNT1JZX1NQQUNFIHwgQ01EX0JVU19NQVNURVIpKQorCQkJIT0gKENNRF9JT19TUEFDRSB8IENNRF9NRU1PUllfU1BBQ0UgfCBDTURfQlVTX01BU1RFUikpIHsKKwkJcGNpX2NmZ19jbWRfd29yZCB8PSAoQ01EX0lPX1NQQUNFIHwKKwkJCQkgICAgIENNRF9NRU1PUllfU1BBQ0UgfCBDTURfQlVTX01BU1RFUik7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBQQ0lfUkVHX0NPTU1BTkQsIHBjaV9jZmdfY21kX3dvcmQpOworCX0KKworCS8qCisJICogSXNzdWUgU29mdCBSZXNldCB0byB0aGUgTUFDLiAgVGhpcyB3aWxsIHJlc2V0IHRoZSBjaGlwJ3MKKwkgKiB0cmFuc21pdCwgcmVjZWl2ZSwgRE1BLiAgSXQgd2lsbCBub3QgZWZmZWN0CisJICogdGhlIGN1cnJlbnQgUENJIGNvbmZpZ3VyYXRpb24uICBUaGUgZ2xvYmFsIHJlc2V0IGJpdCBpcyBzZWxmLQorCSAqIGNsZWFyaW5nLCBhbmQgc2hvdWxkIGNsZWFyIHdpdGhpbiBhIG1pY3Jvc2Vjb25kLgorCSAqLworCUFUX1dSSVRFX1JFRyhodywgUkVHX01BU1RFUl9DVFJMLAorCQkJTUFTVEVSX0NUUkxfTEVEX01PREUgfCBNQVNURVJfQ1RSTF9TT0ZUX1JTVCk7CisJd21iKCk7CisJbXNsZWVwKDEpOworCisJLyogV2FpdCBhdCBsZWFzdCAxMG1zIGZvciBBbGwgbW9kdWxlIHRvIGJlIElkbGUgKi8KKwlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgQVRfSFdfTUFYX0lETEVfREVMQVk7IHRpbWVvdXQrKykgeworCQlpZGxlX3N0YXR1c19kYXRhID0gQVRfUkVBRF9SRUcoaHcsIFJFR19JRExFX1NUQVRVUyk7CisJCWlmIChpZGxlX3N0YXR1c19kYXRhID09IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCQljcHVfcmVsYXgoKTsKKwl9CisKKwlpZiAodGltZW91dCA+PSBBVF9IV19NQVhfSURMRV9ERUxBWSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiTUFDIHN0YXRlIG1hY2hpbmUgY2Fubid0IGJlIGlkbGUgc2luY2UiCisJCQkiIGRpc2FibGVkIGZvciAxMG1zIHNlY29uZFxuIik7CisJCXJldHVybiBBVF9FUlJfVElNRU9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogUGVyZm9ybXMgYmFzaWMgY29uZmlndXJhdGlvbiBvZiB0aGUgYWRhcHRlci4KKyAqCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICogQXNzdW1lcyB0aGF0IHRoZSBjb250cm9sbGVyIGhhcyBwcmV2aW91c2x5IGJlZW4gcmVzZXQgYW5kIGlzIGluIGEKKyAqIHBvc3QtcmVzZXQgdW5pbml0aWFsaXplZCBzdGF0ZS4gSW5pdGlhbGl6ZXMgbXVsdGljYXN0IHRhYmxlLAorICogYW5kICBDYWxscyByb3V0aW5lcyB0byBzZXR1cCBsaW5rCisgKiBMZWF2ZXMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzIGRpc2FibGVkIGFuZCB1bmluaXRpYWxpemVkLgorICovCitpbnQgYXRsMWVfaW5pdF9odyhzdHJ1Y3QgYXRsMWVfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKworCWF0bDFlX2luaXRfcGNpZShodyk7CisKKwkvKiBaZXJvIG91dCB0aGUgTXVsdGljYXN0IEhBU0ggdGFibGUgKi8KKwkvKiBjbGVhciB0aGUgb2xkIHNldHRpbmdzIGZyb20gdGhlIG11bHRpY2FzdCBoYXNoIHRhYmxlICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUlhfSEFTSF9UQUJMRSwgMCk7CisJQVRfV1JJVEVfUkVHX0FSUkFZKGh3LCBSRUdfUlhfSEFTSF9UQUJMRSwgMSwgMCk7CisKKwlyZXRfdmFsID0gYXRsMWVfcGh5X2luaXQoaHcpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qCisgKiBEZXRlY3RzIHRoZSBjdXJyZW50IHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZ3Mgb2YgdGhlIGhhcmR3YXJlLgorICoKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKiBzcGVlZCAtIFNwZWVkIG9mIHRoZSBjb25uZWN0aW9uCisgKiBkdXBsZXggLSBEdXBsZXggc2V0dGluZyBvZiB0aGUgY29ubmVjdGlvbgorICovCitpbnQgYXRsMWVfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoc3RydWN0IGF0bDFlX2h3ICpodywgdTE2ICpzcGVlZCwgdTE2ICpkdXBsZXgpCit7CisJaW50IGVycjsKKwl1MTYgcGh5X2RhdGE7CisKKwkvKiBSZWFkICAgUEhZIFNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAoMTcpICovCisJZXJyID0gYXRsMWVfcmVhZF9waHlfcmVnKGh3LCBNSUlfQVQwMDFfUFNTUiwgJnBoeV9kYXRhKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCEocGh5X2RhdGEgJiBNSUlfQVQwMDFfUFNTUl9TUERfRFBMWF9SRVNPTFZFRCkpCisJCXJldHVybiBBVF9FUlJfUEhZX1JFUzsKKworCXN3aXRjaCAocGh5X2RhdGEgJiBNSUlfQVQwMDFfUFNTUl9TUEVFRCkgeworCWNhc2UgTUlJX0FUMDAxX1BTU1JfMTAwME1CUzoKKwkJKnNwZWVkID0gU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBNSUlfQVQwMDFfUFNTUl8xMDBNQlM6CisJCSpzcGVlZCA9IFNQRUVEXzEwMDsKKwkJYnJlYWs7CisJY2FzZSBNSUlfQVQwMDFfUFNTUl8xME1CUzoKKwkJKnNwZWVkID0gU1BFRURfMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBBVF9FUlJfUEhZX1NQRUVEOworCQlicmVhazsKKwl9CisKKwlpZiAocGh5X2RhdGEgJiBNSUlfQVQwMDFfUFNTUl9EUExYKQorCQkqZHVwbGV4ID0gRlVMTF9EVVBMRVg7CisJZWxzZQorCQkqZHVwbGV4ID0gSEFMRl9EVVBMRVg7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF0bDFlX3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgYXRsMWVfaHcgKmh3KQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gYXRsMWVfd3JpdGVfcGh5X3JlZyhodywgTUlJX0FEVkVSVElTRSwgaHctPm1paV9hdXRvbmVnX2Fkdl9yZWcpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDFlIHx8IGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyZV9yZXZBKSB7CisJCWVyciA9IGF0bDFlX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9BVDAwMV9DUiwKKwkJCQkgICAgICAgaHctPm1paV8xMDAwdF9jdHJsX3JlZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGF0bDFlX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9CTUNSLAorCQkJTUlJX0NSX1JFU0VUIHwgTUlJX0NSX0FVVE9fTkVHX0VOIHwKKwkJCU1JSV9DUl9SRVNUQVJUX0FVVE9fTkVHKTsKKwlyZXR1cm4gZXJyOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ody5oIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWEyZjRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfaHcuaApAQCAtMCwwICsxLDc5MyBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA3IEF0aGVyb3MgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGVyaXZlZCBmcm9tIEludGVsIGUxMDAwIGRyaXZlcgorICogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX0FUSEwxRV9IV19IXworI2RlZmluZSBfQVRITDFFX0hXX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorCitzdHJ1Y3QgYXRsMWVfYWRhcHRlcjsKK3N0cnVjdCBhdGwxZV9odzsKKworLyogZnVuY3Rpb24gcHJvdG90eXBlICovCitzMzIgYXRsMWVfcmVzZXRfaHcoc3RydWN0IGF0bDFlX2h3ICpodyk7CitzMzIgYXRsMWVfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgYXRsMWVfaHcgKmh3KTsKK3MzMiBhdGwxZV9pbml0X2h3KHN0cnVjdCBhdGwxZV9odyAqaHcpOworczMyIGF0bDFlX3BoeV9jb21taXQoc3RydWN0IGF0bDFlX2h3ICpodyk7CitzMzIgYXRsMWVfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoc3RydWN0IGF0bDFlX2h3ICpodywgdTE2ICpzcGVlZCwgdTE2ICpkdXBsZXgpOwordTMyIGF0bDFlX2F1dG9fZ2V0X2ZjKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgZHVwbGV4KTsKK3UzMiBhdGwxZV9oYXNoX21jX2FkZHIoc3RydWN0IGF0bDFlX2h3ICpodywgdTggKm1jX2FkZHIpOwordm9pZCBhdGwxZV9oYXNoX3NldChzdHJ1Y3QgYXRsMWVfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSk7CitzMzIgYXRsMWVfcmVhZF9waHlfcmVnKHN0cnVjdCBhdGwxZV9odyAqaHcsIHUxNiByZWdfYWRkciwgdTE2ICpwaHlfZGF0YSk7CitzMzIgYXRsMWVfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgYXRsMWVfaHcgKmh3LCB1MzIgcmVnX2FkZHIsIHUxNiBwaHlfZGF0YSk7CitzMzIgYXRsMWVfdmFsaWRhdGVfbWRpX3NldHRpbmcoc3RydWN0IGF0bDFlX2h3ICpodyk7Cit2b2lkIGF0bDFlX2h3X3NldF9tYWNfYWRkcihzdHJ1Y3QgYXRsMWVfaHcgKmh3KTsKK2Jvb2wgYXRsMWVfcmVhZF9lZXByb20oc3RydWN0IGF0bDFlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpwX3ZhbHVlKTsKK2Jvb2wgYXRsMWVfd3JpdGVfZWVwcm9tKHN0cnVjdCBhdGwxZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSk7CitzMzIgYXRsMWVfcGh5X2VudGVyX3Bvd2VyX3NhdmluZyhzdHJ1Y3QgYXRsMWVfaHcgKmh3KTsKK3MzMiBhdGwxZV9waHlfbGVhdmVfcG93ZXJfc2F2aW5nKHN0cnVjdCBhdGwxZV9odyAqaHcpOworczMyIGF0bDFlX3BoeV9pbml0KHN0cnVjdCBhdGwxZV9odyAqaHcpOworaW50IGF0bDFlX2NoZWNrX2VlcHJvbV9leGlzdChzdHJ1Y3QgYXRsMWVfaHcgKmh3KTsKK3ZvaWQgYXRsMWVfZm9yY2VfcHMoc3RydWN0IGF0bDFlX2h3ICpodyk7CitzMzIgYXRsMWVfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBhdGwxZV9odyAqaHcpOworCisvKiByZWdpc3RlciBkZWZpbml0aW9uICovCisjZGVmaW5lIFJFR19QTV9DVFJMU1RBVCAgICAgICAgICAgICAweDQ0CisKKyNkZWZpbmUgUkVHX1BDSUVfQ0FQX0xJU1QgICAgICAgICAgIDB4NTgKKworI2RlZmluZSBSRUdfREVWSUNFX0NBUCAgICAgICAgICAgICAgMHg1QworI2RlZmluZSAgICAgREVWSUNFX0NBUF9NQVhfUEFZTE9BRF9NQVNLICAgICAweDcKKyNkZWZpbmUgICAgIERFVklDRV9DQVBfTUFYX1BBWUxPQURfU0hJRlQgICAgMAorCisjZGVmaW5lIFJFR19ERVZJQ0VfQ1RSTCAgICAgICAgICAgICAweDYwCisjZGVmaW5lICAgICBERVZJQ0VfQ1RSTF9NQVhfUEFZTE9BRF9NQVNLICAgIDB4NworI2RlZmluZSAgICAgREVWSUNFX0NUUkxfTUFYX1BBWUxPQURfU0hJRlQgICA1CisjZGVmaW5lICAgICBERVZJQ0VfQ1RSTF9NQVhfUlJFUV9TWl9NQVNLICAgIDB4NworI2RlZmluZSAgICAgREVWSUNFX0NUUkxfTUFYX1JSRVFfU1pfU0hJRlQgICAxMgorCisjZGVmaW5lIFJFR19WUERfQ0FQICAgICAgICAgICAgICAgICAweDZDCisjZGVmaW5lICAgICBWUERfQ0FQX0lEX01BU0sgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgICAgIFZQRF9DQVBfSURfU0hJRlQgICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICAgVlBEX0NBUF9ORVhUX1BUUl9NQVNLICAgICAgICAgICAweEZGCisjZGVmaW5lICAgICBWUERfQ0FQX05FWFRfUFRSX1NISUZUICAgICAgICAgIDgKKyNkZWZpbmUgICAgIFZQRF9DQVBfVlBEX0FERFJfTUFTSyAgICAgICAgICAgMHg3RkZGCisjZGVmaW5lICAgICBWUERfQ0FQX1ZQRF9BRERSX1NISUZUICAgICAgICAgIDE2CisjZGVmaW5lICAgICBWUERfQ0FQX1ZQRF9GTEFHICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBSRUdfVlBEX0RBVEEgICAgICAgICAgICAgICAgMHg3MAorCisjZGVmaW5lIFJFR19TUElfRkxBU0hfQ1RSTCAgICAgICAgICAweDIwMAorI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NUUkxfU1RTX05PTl9SRFkgICAgICAweDEKKyNkZWZpbmUgICAgIFNQSV9GTEFTSF9DVFJMX1NUU19XRU4gICAgICAgICAgMHgyCisjZGVmaW5lICAgICBTUElfRkxBU0hfQ1RSTF9TVFNfV1BFTiAgICAgICAgIDB4ODAKKyNkZWZpbmUgICAgIFNQSV9GTEFTSF9DVFJMX0RFVl9TVFNfTUFTSyAgICAgMHhGRgorI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NUUkxfREVWX1NUU19TSElGVCAgICAwCisjZGVmaW5lICAgICBTUElfRkxBU0hfQ1RSTF9JTlNfTUFTSyAgICAgICAgIDB4NworI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NUUkxfSU5TX1NISUZUICAgICAgICA4CisjZGVmaW5lICAgICBTUElfRkxBU0hfQ1RSTF9TVEFSVCAgICAgICAgICAgIDB4ODAwCisjZGVmaW5lICAgICBTUElfRkxBU0hfQ1RSTF9FTl9WUEQgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NUUkxfTERTVEFSVCAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgICAgIFNQSV9GTEFTSF9DVFJMX0NTX0hJX01BU0sgICAgICAgMHgzCisjZGVmaW5lICAgICBTUElfRkxBU0hfQ1RSTF9DU19ISV9TSElGVCAgICAgIDE2CisjZGVmaW5lICAgICBTUElfRkxBU0hfQ1RSTF9DU19IT0xEX01BU0sgICAgIDB4MworI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NUUkxfQ1NfSE9MRF9TSElGVCAgICAxOAorI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NUUkxfQ0xLX0xPX01BU0sgICAgICAweDMKKyNkZWZpbmUgICAgIFNQSV9GTEFTSF9DVFJMX0NMS19MT19TSElGVCAgICAgMjAKKyNkZWZpbmUgICAgIFNQSV9GTEFTSF9DVFJMX0NMS19ISV9NQVNLICAgICAgMHgzCisjZGVmaW5lICAgICBTUElfRkxBU0hfQ1RSTF9DTEtfSElfU0hJRlQgICAgIDIyCisjZGVmaW5lICAgICBTUElfRkxBU0hfQ1RSTF9DU19TRVRVUF9NQVNLICAgIDB4MworI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NUUkxfQ1NfU0VUVVBfU0hJRlQgICAyNAorI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NUUkxfRVJPTV9QR1NaX01BU0sgICAweDMKKyNkZWZpbmUgICAgIFNQSV9GTEFTSF9DVFJMX0VST01fUEdTWl9TSElGVCAgMjYKKyNkZWZpbmUgICAgIFNQSV9GTEFTSF9DVFJMX1dBSVRfUkVBRFkgICAgICAgMHgxMDAwMDAwMAorCisjZGVmaW5lIFJFR19TUElfQUREUiAgICAgICAgICAgICAgICAweDIwNAorCisjZGVmaW5lIFJFR19TUElfREFUQSAgICAgICAgICAgICAgICAweDIwOAorCisjZGVmaW5lIFJFR19TUElfRkxBU0hfQ09ORklHICAgICAgICAweDIwQworI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NPTkZJR19MRF9BRERSX01BU0sgICAweEZGRkZGRgorI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NPTkZJR19MRF9BRERSX1NISUZUICAwCisjZGVmaW5lICAgICBTUElfRkxBU0hfQ09ORklHX1ZQRF9BRERSX01BU0sgIDB4MworI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NPTkZJR19WUERfQUREUl9TSElGVCAyNAorI2RlZmluZSAgICAgU1BJX0ZMQVNIX0NPTkZJR19MRF9FWElTVCAgICAgICAweDQwMDAwMDAKKworCisjZGVmaW5lIFJFR19TUElfRkxBU0hfT1BfUFJPR1JBTSAgICAweDIxMAorI2RlZmluZSBSRUdfU1BJX0ZMQVNIX09QX1NDX0VSQVNFICAgMHgyMTEKKyNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9DSElQX0VSQVNFIDB4MjEyCisjZGVmaW5lIFJFR19TUElfRkxBU0hfT1BfUkRJRCAgICAgICAweDIxMworI2RlZmluZSBSRUdfU1BJX0ZMQVNIX09QX1dSRU4gICAgICAgMHgyMTQKKyNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9SRFNSICAgICAgIDB4MjE1CisjZGVmaW5lIFJFR19TUElfRkxBU0hfT1BfV1JTUiAgICAgICAweDIxNgorI2RlZmluZSBSRUdfU1BJX0ZMQVNIX09QX1JFQUQgICAgICAgMHgyMTcKKworI2RlZmluZSBSRUdfVFdTSV9DVFJMICAgICAgICAgICAgICAgMHgyMTgKKyNkZWZpbmUgICAgIFRXU0lfQ1RSTF9MRF9PRkZTRVRfTUFTSyAgICAgICAgMHhGRgorI2RlZmluZSAgICAgVFdTSV9DVFJMX0xEX09GRlNFVF9TSElGVCAgICAgICAwCisjZGVmaW5lICAgICBUV1NJX0NUUkxfTERfU0xWX0FERFJfTUFTSyAgICAgIDB4NworI2RlZmluZSAgICAgVFdTSV9DVFJMX0xEX1NMVl9BRERSX1NISUZUICAgICA4CisjZGVmaW5lICAgICBUV1NJX0NUUkxfU1dfTERTVEFSVCAgICAgICAgICAgIDB4ODAwCisjZGVmaW5lICAgICBUV1NJX0NUUkxfSFdfTERTVEFSVCAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSAgICAgVFdTSV9DVFJMX1NNQl9TTFZfQUREUl9NQVNLICAgICAweDB4N0YKKyNkZWZpbmUgICAgIFRXU0lfQ1RSTF9TTUJfU0xWX0FERFJfU0hJRlQgICAgMTUKKyNkZWZpbmUgICAgIFRXU0lfQ1RSTF9MRF9FWElTVCAgICAgICAgICAgICAgMHg0MDAwMDAKKyNkZWZpbmUgICAgIFRXU0lfQ1RSTF9SRUFEX0ZSRVFfU0VMX01BU0sgICAgMHgzCisjZGVmaW5lICAgICBUV1NJX0NUUkxfUkVBRF9GUkVRX1NFTF9TSElGVCAgIDIzCisjZGVmaW5lICAgICBUV1NJX0NUUkxfRlJFUV9TRUxfMTAwSyAgICAgICAgIDAKKyNkZWZpbmUgICAgIFRXU0lfQ1RSTF9GUkVRX1NFTF8yMDBLICAgICAgICAgMQorI2RlZmluZSAgICAgVFdTSV9DVFJMX0ZSRVFfU0VMXzMwMEsgICAgICAgICAyCisjZGVmaW5lICAgICBUV1NJX0NUUkxfRlJFUV9TRUxfNDAwSyAgICAgICAgIDMKKyNkZWZpbmUgICAgIFRXU0lfQ1RSTF9TTUJfU0xWX0FERFIKKyNkZWZpbmUgICAgIFRXU0lfQ1RSTF9XUklURV9GUkVRX1NFTF9NQVNLICAgMHgzCisjZGVmaW5lICAgICBUV1NJX0NUUkxfV1JJVEVfRlJFUV9TRUxfU0hJRlQgIDI0CisKKworI2RlZmluZSBSRUdfUENJRV9ERVZfTUlTQ19DVFJMICAgICAgMHgyMUMKKyNkZWZpbmUgICAgIFBDSUVfREVWX01JU0NfQ1RSTF9FWFRfUElQRSAgICAgMHgyCisjZGVmaW5lICAgICBQQ0lFX0RFVl9NSVNDX0NUUkxfUkVUUllfQlVGRElTIDB4MQorI2RlZmluZSAgICAgUENJRV9ERVZfTUlTQ19DVFJMX1NQSVJPTV9FWElTVCAweDQKKyNkZWZpbmUgICAgIFBDSUVfREVWX01JU0NfQ1RSTF9TRVJERVNfRU5ESUFOICAgIDB4OAorI2RlZmluZSAgICAgUENJRV9ERVZfTUlTQ19DVFJMX1NFUkRFU19TRUxfRElOICAgMHgxMAorCisjZGVmaW5lIFJFR19QQ0lFX1BIWU1JU0MJICAgIDB4MTAwMAorI2RlZmluZSBQQ0lFX1BIWU1JU0NfRk9SQ0VfUkNWX0RFVAkweDQKKworI2RlZmluZSBSRUdfTFRTU01fVEVTVF9NT0RFICAgICAgICAgMHgxMkZDCisjZGVmaW5lICAgICAgICAgTFRTU01fVEVTVF9NT0RFX0RFRiAgICAgMHhFMDAwCisKKy8qIFNlbGVuZSBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfTUFTVEVSX0NUUkwgICAgICAgICAgICAgMHgxNDAwCisjZGVmaW5lICAgICBNQVNURVJfQ1RSTF9TT0ZUX1JTVCAgICAgICAgICAgIDB4MQorI2RlZmluZSAgICAgTUFTVEVSX0NUUkxfTVRJTUVSX0VOICAgICAgICAgICAweDIKKyNkZWZpbmUgICAgIE1BU1RFUl9DVFJMX0lUSU1FUl9FTiAgICAgICAgICAgMHg0CisjZGVmaW5lICAgICBNQVNURVJfQ1RSTF9NQU5VQUxfSU5UICAgICAgICAgIDB4OAorI2RlZmluZSAgICAgTUFTVEVSX0NUUkxfSVRJTUVSMl9FTiAgICAgICAgICAweDIwCisjZGVmaW5lICAgICBNQVNURVJfQ1RSTF9JTlRfUkRDTFIgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgICAgIE1BU1RFUl9DVFJMX0xFRF9NT0RFCSAgICAweDIwMAorI2RlZmluZSAgICAgTUFTVEVSX0NUUkxfUkVWX05VTV9TSElGVCAgICAgICAxNgorI2RlZmluZSAgICAgTUFTVEVSX0NUUkxfUkVWX05VTV9NQVNLICAgICAgICAweGZmCisjZGVmaW5lICAgICBNQVNURVJfQ1RSTF9ERVZfSURfU0hJRlQgICAgICAgIDI0CisjZGVmaW5lICAgICBNQVNURVJfQ1RSTF9ERVZfSURfTUFTSyAgICAgICAgIDB4ZmYKKworLyogVGltZXIgSW5pdGlhbCBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfTUFOVUFMX1RJTUVSX0lOSVQgICAgICAgMHgxNDA0CisKKworLyogSVJRIE1vZGVyYXRvclRpbWVyIEluaXRpYWwgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0lSUV9NT0RVX1RJTUVSX0lOSVQgICAgIDB4MTQwOCAgIC8qIHcgKi8KKyNkZWZpbmUgUkVHX0lSUV9NT0RVX1RJTUVSMl9JTklUICAgIDB4MTQwQSAgIC8qIHcgKi8KKworCisjZGVmaW5lIFJFR19HUEhZX0NUUkwgICAgICAgICAgICAgICAweDE0MEMKKyNkZWZpbmUgICAgIEdQSFlfQ1RSTF9FWFRfUkVTRVQgICAgICAgICAxCisjZGVmaW5lICAgICBHUEhZX0NUUkxfUElQRV9NT0QgICAgICAgICAgMgorI2RlZmluZSAgICAgR1BIWV9DVFJMX1RFU1RfTU9ERV9NQVNLICAgIDMKKyNkZWZpbmUgICAgIEdQSFlfQ1RSTF9URVNUX01PREVfU0hJRlQgICAyCisjZGVmaW5lICAgICBHUEhZX0NUUkxfQkVSVF9TVEFSVCAgICAgICAgMHgxMAorI2RlZmluZSAgICAgR1BIWV9DVFJMX0dBVEVfMjVNX0VOICAgICAgIDB4MjAKKyNkZWZpbmUgICAgIEdQSFlfQ1RSTF9MUFdfRVhJVCAgICAgICAgICAweDQwCisjZGVmaW5lICAgICBHUEhZX0NUUkxfUEhZX0lERFEgICAgICAgICAgMHg4MAorI2RlZmluZSAgICAgR1BIWV9DVFJMX1BIWV9JRERRX0RJUyAgICAgIDB4MTAwCisjZGVmaW5lICAgICBHUEhZX0NUUkxfUENMS19TRUxfRElTICAgICAgMHgyMDAKKyNkZWZpbmUgICAgIEdQSFlfQ1RSTF9ISUJfRU4gICAgICAgICAgICAweDQwMAorI2RlZmluZSAgICAgR1BIWV9DVFJMX0hJQl9QVUxTRSAgICAgICAgIDB4ODAwCisjZGVmaW5lICAgICBHUEhZX0NUUkxfU0VMX0FOQV9SU1QgICAgICAgMHgxMDAwCisjZGVmaW5lICAgICBHUEhZX0NUUkxfUEhZX1BMTF9PTiAgICAgICAgMHgyMDAwCisjZGVmaW5lICAgICBHUEhZX0NUUkxfUFdET1dOX0hXCQkweDQwMDAKKyNkZWZpbmUgICAgIEdQSFlfQ1RSTF9ERUZBVUxUIChcCisJCUdQSFlfQ1RSTF9QSFlfUExMX09OCXxcCisJCUdQSFlfQ1RSTF9TRUxfQU5BX1JTVAl8XAorCQlHUEhZX0NUUkxfSElCX1BVTFNFCXxcCisJCUdQSFlfQ1RSTF9ISUJfRU4pCisKKyNkZWZpbmUgICAgIEdQSFlfQ1RSTF9QV19XT0xfRElTIChcCisJCUdQSFlfQ1RSTF9QSFlfUExMX09OCXxcCisJCUdQSFlfQ1RSTF9TRUxfQU5BX1JTVAl8XAorCQlHUEhZX0NUUkxfSElCX1BVTFNFCXxcCisJCUdQSFlfQ1RSTF9ISUJfRU4JfFwKKwkJR1BIWV9DVFJMX1BXRE9XTl9IVwl8XAorCQlHUEhZX0NUUkxfUENMS19TRUxfRElTCXxcCisJCUdQSFlfQ1RSTF9QSFlfSUREUSkKKworLyogSVJRIEFudGktTG9zdCBUaW1lciBJbml0aWFsIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19DTUJESVNETUFfVElNRVIgICAgICAgICAweDE0MEUKKworCisvKiBCbG9jayBJRExFIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfSURMRV9TVEFUVVMgIAkweDE0MTAKKyNkZWZpbmUgICAgIElETEVfU1RBVFVTX1JYTUFDICAgICAgIDEgICAgLyogMTogUlhNQUMgc3RhdGUgbWFjaGluZSBpcyBpbiBub24tSURMRSBzdGF0ZS4gMDogUlhNQUMgaXMgaWRsaW5nICovCisjZGVmaW5lICAgICBJRExFX1NUQVRVU19UWE1BQyAgICAgICAyICAgIC8qIDE6IFRYTUFDIHN0YXRlIG1hY2hpbmUgaXMgaW4gbm9uLUlETEUgc3RhdGUuIDA6IFRYTUFDIGlzIGlkbGluZyAqLworI2RlZmluZSAgICAgSURMRV9TVEFUVVNfUlhRICAgICAgICAgNCAgICAvKiAxOiBSWFEgc3RhdGUgbWFjaGluZSBpcyBpbiBub24tSURMRSBzdGF0ZS4gICAwOiBSWFEgaXMgaWRsaW5nICAgKi8KKyNkZWZpbmUgICAgIElETEVfU1RBVFVTX1RYUSAgICAgICAgIDggICAgLyogMTogVFhRIHN0YXRlIG1hY2hpbmUgaXMgaW4gbm9uLUlETEUgc3RhdGUuICAgMDogVFhRIGlzIGlkbGluZyAgICovCisjZGVmaW5lICAgICBJRExFX1NUQVRVU19ETUFSICAgICAgICAweDEwIC8qIDE6IERNQVIgc3RhdGUgbWFjaGluZSBpcyBpbiBub24tSURMRSBzdGF0ZS4gIDA6IERNQVIgaXMgaWRsaW5nICAqLworI2RlZmluZSAgICAgSURMRV9TVEFUVVNfRE1BVyAgICAgICAgMHgyMCAvKiAxOiBETUFXIHN0YXRlIG1hY2hpbmUgaXMgaW4gbm9uLUlETEUgc3RhdGUuICAwOiBETUFXIGlzIGlkbGluZyAgKi8KKyNkZWZpbmUgICAgIElETEVfU1RBVFVTX1NNQiAgICAgICAgIDB4NDAgLyogMTogU01CIHN0YXRlIG1hY2hpbmUgaXMgaW4gbm9uLUlETEUgc3RhdGUuICAgMDogU01CIGlzIGlkbGluZyAgICovCisjZGVmaW5lICAgICBJRExFX1NUQVRVU19DTUIgICAgICAgICAweDgwIC8qIDE6IENNQiBzdGF0ZSBtYWNoaW5lIGlzIGluIG5vbi1JRExFIHN0YXRlLiAgIDA6IENNQiBpcyBpZGxpbmcgICAqLworCisvKiBNRElPIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX01ESU9fQ1RSTCAgICAgICAgICAgMHgxNDE0CisjZGVmaW5lICAgICBNRElPX0RBVEFfTUFTSyAgICAgICAgICAweGZmZmYgIC8qIE9uIE1ESU8gd3JpdGUsIHRoZSAxNi1iaXQgY29udHJvbCBkYXRhIHRvIHdyaXRlIHRvIFBIWSBNSUkgbWFuYWdlbWVudCByZWdpc3RlciAqLworI2RlZmluZSAgICAgTURJT19EQVRBX1NISUZUICAgICAgICAgMCAgICAgICAvKiBPbiBNRElPIHJlYWQsIHRoZSAxNi1iaXQgc3RhdHVzIGRhdGEgdGhhdCB3YXMgcmVhZCBmcm9tIHRoZSBQSFkgTUlJIG1hbmFnZW1lbnQgcmVnaXN0ZXIqLworI2RlZmluZSAgICAgTURJT19SRUdfQUREUl9NQVNLICAgICAgMHgxZiAgICAvKiBNRElPIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgICAgIE1ESU9fUkVHX0FERFJfU0hJRlQgICAgIDE2CisjZGVmaW5lICAgICBNRElPX1JXICAgICAgICAgICAgICAgICAweDIwMDAwMCAgICAgIC8qIDE6IHJlYWQsIDA6IHdyaXRlICovCisjZGVmaW5lICAgICBNRElPX1NVUF9QUkVBTUJMRSAgICAgICAweDQwMDAwMCAgICAgIC8qIFN1cHByZXNzIHByZWFtYmxlICovCisjZGVmaW5lICAgICBNRElPX1NUQVJUICAgICAgICAgICAgICAweDgwMDAwMCAgICAgIC8qIFdyaXRlIDEgdG8gaW5pdGlhdGUgdGhlIE1ESU8gbWFzdGVyLiBBbmQgdGhpcyBiaXQgaXMgc2VsZiBjbGVhcmVkIGFmdGVyIG9uZSBjeWNsZSovCisjZGVmaW5lICAgICBNRElPX0NMS19TRUxfU0hJRlQgICAgICAyNAorI2RlZmluZSAgICAgTURJT19DTEtfMjVfNCAgICAgICAgICAgMAorI2RlZmluZSAgICAgTURJT19DTEtfMjVfNiAgICAgICAgICAgMgorI2RlZmluZSAgICAgTURJT19DTEtfMjVfOCAgICAgICAgICAgMworI2RlZmluZSAgICAgTURJT19DTEtfMjVfMTAgICAgICAgICAgNAorI2RlZmluZSAgICAgTURJT19DTEtfMjVfMTQgICAgICAgICAgNQorI2RlZmluZSAgICAgTURJT19DTEtfMjVfMjAgICAgICAgICAgNgorI2RlZmluZSAgICAgTURJT19DTEtfMjVfMjggICAgICAgICAgNworI2RlZmluZSAgICAgTURJT19CVVNZICAgICAgICAgICAgICAgMHg4MDAwMDAwCisjZGVmaW5lICAgICBNRElPX0FQX0VOICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIE1ESU9fV0FJVF9USU1FUyAgICAgICAgIDEwCisKKy8qIE1JSSBQSFkgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19QSFlfU1RBVFVTICAgICAgICAgICAweDE0MTgKKyNkZWZpbmUgICAgIFBIWV9TVEFUVVNfMTAwTQkgICAgICAweDIwMDAwCisjZGVmaW5lICAgICBQSFlfU1RBVFVTX0VNSV9DQQkgICAgICAweDQwMDAwCisKKy8qIEJJU1QgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyMCAoZm9yIHRoZSBQYWNrZXQgTWVtb3J5KSAqLworI2RlZmluZSBSRUdfQklTVDBfQ1RSTCAgICAgICAgICAgICAgMHgxNDFjCisjZGVmaW5lICAgICBCSVNUMF9OT1cgICAgICAgICAgICAgICAgICAgMHgxIC8qIDE6IFRvIHRyaWdnZXIgQklTVDAgbG9naWMuIFRoaXMgYml0IHN0YXlzIGhpZ2ggZHVyaW5nIHRoZSAqLworLyogQklTVCBwcm9jZXNzIGFuZCByZXNldCB0byB6ZXJvIHdoZW4gQklTVCBpcyBkb25lICovCisjZGVmaW5lICAgICBCSVNUMF9TUkFNX0ZBSUwgICAgICAgICAgICAgMHgyIC8qIDE6IFRoZSBTUkFNIGZhaWx1cmUgaXMgdW4tcmVwYWlyYWJsZSBiZWNhdXNlIGl0IGhhcyBhZGRyZXNzICovCisvKiBkZWNvZGVyIGZhaWx1cmUgb3IgbW9yZSB0aGFuIDEgY2VsbCBzdHVjay10by14IGZhaWx1cmUgKi8KKyNkZWZpbmUgICAgIEJJU1QwX0ZVU0VfRkxBRyAgICAgICAgICAgICAweDQgLyogMTogSW5kaWNhdGluZyBvbmUgY2VsbCBoYXMgYmVlbiBmaXhlZCAqLworCisvKiBCSVNUIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcjEoZm9yIHRoZSByZXRyeSBidWZmZXIgb2YgUENJIEV4cHJlc3MpICovCisjZGVmaW5lIFJFR19CSVNUMV9DVFJMICAgICAgICAgICAgICAweDE0MjAKKyNkZWZpbmUgICAgIEJJU1QxX05PVyAgICAgICAgICAgICAgICAgICAweDEgLyogMTogVG8gdHJpZ2dlciBCSVNUMCBsb2dpYy4gVGhpcyBiaXQgc3RheXMgaGlnaCBkdXJpbmcgdGhlICovCisvKiBCSVNUIHByb2Nlc3MgYW5kIHJlc2V0IHRvIHplcm8gd2hlbiBCSVNUIGlzIGRvbmUgKi8KKyNkZWZpbmUgICAgIEJJU1QxX1NSQU1fRkFJTCAgICAgICAgICAgICAweDIgLyogMTogVGhlIFNSQU0gZmFpbHVyZSBpcyB1bi1yZXBhaXJhYmxlIGJlY2F1c2UgaXQgaGFzIGFkZHJlc3MgKi8KKy8qIGRlY29kZXIgZmFpbHVyZSBvciBtb3JlIHRoYW4gMSBjZWxsIHN0dWNrLXRvLXggZmFpbHVyZS4qLworI2RlZmluZSAgICAgQklTVDFfRlVTRV9GTEFHICAgICAgICAgICAgIDB4NAorCisvKiBTZXJEZXMgTG9jayBEZXRlY3QgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19TRVJERVNfTE9DSyAgICAgICAgICAgICAweDE0MjQKKyNkZWZpbmUgICAgIFNFUkRFU19MT0NLX0RFVEVDVCAgICAgICAgICAxICAvKiAxOiBTZXJEZXMgbG9jayBkZXRlY3RlZCAuIFRoaXMgc2lnbmFsIGNvbWVzIGZyb20gQW5hbG9nIFNlckRlcyAqLworI2RlZmluZSAgICAgU0VSREVTX0xPQ0tfREVURUNUX0VOICAgICAgIDIgIC8qIDE6IEVuYWJsZSBTZXJEZXMgTG9jayBkZXRlY3QgZnVuY3Rpb24gKi8KKworLyogTUFDIENvbnRyb2wgUmVnaXN0ZXIgICovCisjZGVmaW5lIFJFR19NQUNfQ1RSTCAgICAgICAgICAgICAgICAweDE0ODAKKyNkZWZpbmUgICAgIE1BQ19DVFJMX1RYX0VOICAgICAgICAgICAgICAxICAvKiAxOiBUcmFuc21pdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgIE1BQ19DVFJMX1JYX0VOICAgICAgICAgICAgICAyICAvKiAxOiBSZWNlaXZlIEVuYWJsZSAqLworI2RlZmluZSAgICAgTUFDX0NUUkxfVFhfRkxPVyAgICAgICAgICAgIDQgIC8qIDE6IFRyYW5zbWl0IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgICAgIE1BQ19DVFJMX1JYX0ZMT1cgICAgICAgICAgICA4ICAvKiAxOiBSZWNlaXZlIEZsb3cgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgICAgIE1BQ19DVFJMX0xPT1BCQUNLICAgICAgICAgICAweDEwICAgICAgLyogMTogTG9vcCBiYWNrIGF0IEcvTUlJIEludGVyZmFjZSAqLworI2RlZmluZSAgICAgTUFDX0NUUkxfRFVQTFggICAgICAgICAgICAgIDB4MjAgICAgICAvKiAxOiBGdWxsLWR1cGxleCBtb2RlICAwOiBIYWxmLWR1cGxleCBtb2RlICovCisjZGVmaW5lICAgICBNQUNfQ1RSTF9BRERfQ1JDICAgICAgICAgICAgMHg0MCAgICAgIC8qIDE6IEluc3RydWN0IE1BQyB0byBhdHRhY2ggQ1JDIG9uIGFsbCBlZ3Jlc3MgRXRoZXJuZXQgZnJhbWVzICovCisjZGVmaW5lICAgICBNQUNfQ1RSTF9QQUQgICAgICAgICAgICAgICAgMHg4MCAgICAgIC8qIDE6IEluc3RydWN0IE1BQyB0byBwYWQgc2hvcnQgZnJhbWVzIHRvIDYwLWJ5dGVzLCBhbmQgdGhlbiBhdHRhY2ggQ1JDLiBUaGlzIGJpdCBoYXMgaGlnaGVyIHByaW9yaXR5IG92ZXIgQ1JDX0VOICovCisjZGVmaW5lICAgICBNQUNfQ1RSTF9MRU5DSEsgICAgICAgICAgICAgMHgxMDAgICAgIC8qIDE6IEluc3RydWN0IE1BQyB0byBjaGVjayBpZiBsZW5ndGggZmllbGQgbWF0Y2hlcyB0aGUgcmVhbCBwYWNrZXQgbGVuZ3RoICovCisjZGVmaW5lICAgICBNQUNfQ1RSTF9IVUdFX0VOICAgICAgICAgICAgMHgyMDAgICAgIC8qIDE6IHJlY2VpdmUgSnVtYm8gZnJhbWUgZW5hYmxlICovCisjZGVmaW5lICAgICBNQUNfQ1RSTF9QUk1MRU5fU0hJRlQgICAgICAgMTAgICAgICAgIC8qIFByZWFtYmxlIGxlbmd0aCAqLworI2RlZmluZSAgICAgTUFDX0NUUkxfUFJNTEVOX01BU0sgICAgICAgIDB4ZgorI2RlZmluZSAgICAgTUFDX0NUUkxfUk1WX1ZMQU4gICAgICAgICAgIDB4NDAwMCAgICAvKiAxOiB0byByZW1vdmUgVkxBTiBUYWcgYXV0b21hdGljYWxseSBmcm9tIGFsbCByZWNlaXZlIHBhY2tldHMgKi8KKyNkZWZpbmUgICAgIE1BQ19DVFJMX1BST01JU19FTiAgICAgICAgICAweDgwMDAgICAgLyogMTogUHJvbWlzY3VvdXMgTW9kZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgIE1BQ19DVFJMX1RYX1BBVVNFICAgICAgICAgICAweDEwMDAwICAgLyogMTogdHJhbnNtaXQgdGVzdCBwYXVzZSAqLworI2RlZmluZSAgICAgTUFDX0NUUkxfU0NOVCAgICAgICAgICAgICAgIDB4MjAwMDAgICAvKiAxOiBzaG9ydGN1dCBzbG90IHRpbWUgY291bnRlciAqLworI2RlZmluZSAgICAgTUFDX0NUUkxfU1JTVF9UWCAgICAgICAgICAgIDB4NDAwMDAgICAvKiAxOiBzeW5jaHJvbml6ZWQgcmVzZXQgVHJhbnNtaXQgTUFDIG1vZHVsZSAqLworI2RlZmluZSAgICAgTUFDX0NUUkxfVFhfU0lNVVJTVCAgICAgICAgIDB4ODAwMDAgICAvKiAxOiB0cmFuc21pdCBzaW11bGF0aW9uIHJlc2V0ICovCisjZGVmaW5lICAgICBNQUNfQ1RSTF9TUEVFRF9TSElGVCAgICAgICAgMjAgICAgICAgIC8qIDEwOiBnaWdhYml0IDAxOjEwTS8xMDBNICovCisjZGVmaW5lICAgICBNQUNfQ1RSTF9TUEVFRF9NQVNLICAgICAgICAgMHgzMDAwMDAKKyNkZWZpbmUgICAgIE1BQ19DVFJMX1NQRUVEXzEwMDAgICAgICAgICAyCisjZGVmaW5lICAgICBNQUNfQ1RSTF9TUEVFRF8xMF8xMDAgICAgICAgMQorI2RlZmluZSAgICAgTUFDX0NUUkxfREJHX1RYX0JLUFJFU1VSRSAgIDB4NDAwMDAwICAvKiAxOiB0cmFuc21pdCBtYXhpbXVtIGJhY2tvZmYgKGhhbGYtZHVwbGV4IHRlc3QgYml0KSAqLworI2RlZmluZSAgICAgTUFDX0NUUkxfVFhfSFVHRSAgICAgICAgICAgIDB4ODAwMDAwICAvKiAxOiB0cmFuc21pdCBodWdlIGVuYWJsZSAqLworI2RlZmluZSAgICAgTUFDX0NUUkxfUlhfQ0hLU1VNX0VOICAgICAgIDB4MTAwMDAwMCAvKiAxOiBSWCBjaGVja3N1bSBlbmFibGUgKi8KKyNkZWZpbmUgICAgIE1BQ19DVFJMX01DX0FMTF9FTiAgICAgICAgICAweDIwMDAwMDAgLyogMTogdXBsb2FkIGFsbCBtdWx0aWNhc3QgZnJhbWUgd2l0aG91dCBlcnJvciB0byBzeXN0ZW0gKi8KKyNkZWZpbmUgICAgIE1BQ19DVFJMX0JDX0VOICAgICAgICAgICAgICAweDQwMDAwMDAgLyogMTogdXBsb2FkIGFsbCBicm9hZGNhc3QgZnJhbWUgd2l0aG91dCBlcnJvciB0byBzeXN0ZW0gKi8KKyNkZWZpbmUgICAgIE1BQ19DVFJMX0RCRyAgICAgICAgICAgICAgICAweDgwMDAwMDAgLyogMTogdXBsb2FkIGFsbCByZWNlaXZlZCBmcmFtZSB0byBzeXN0ZW0gKERlYnVnIE1vZGUpICovCisKKy8qIE1BQyBJUEcvSUZHIENvbnRyb2wgUmVnaXN0ZXIgICovCisjZGVmaW5lIFJFR19NQUNfSVBHX0lGRyAgICAgICAgICAgICAweDE0ODQKKyNkZWZpbmUgICAgIE1BQ19JUEdfSUZHX0lQR1RfU0hJRlQgICAgICAwICAgICAvKiBEZXNpcmVkIGJhY2sgdG8gYmFjayBpbnRlci1wYWNrZXQgZ2FwLiBUaGUgZGVmYXVsdCBpcyA5Ni1iaXQgdGltZSAqLworI2RlZmluZSAgICAgTUFDX0lQR19JRkdfSVBHVF9NQVNLICAgICAgIDB4N2YKKyNkZWZpbmUgICAgIE1BQ19JUEdfSUZHX01JRkdfU0hJRlQgICAgICA4ICAgICAvKiBNaW5pbXVtIG51bWJlciBvZiBJRkcgdG8gZW5mb3JjZSBpbiBiZXR3ZWVuIFJYIGZyYW1lcyAqLworI2RlZmluZSAgICAgTUFDX0lQR19JRkdfTUlGR19NQVNLICAgICAgIDB4ZmYgIC8qIEZyYW1lIGdhcCBiZWxvdyBzdWNoIElGUCBpcyBkcm9wcGVkICovCisjZGVmaW5lICAgICBNQUNfSVBHX0lGR19JUEdSMV9TSElGVCAgICAgMTYgICAgLyogNjRiaXQgQ2Fycmllci1TZW5zZSB3aW5kb3cgKi8KKyNkZWZpbmUgICAgIE1BQ19JUEdfSUZHX0lQR1IxX01BU0sgICAgICAweDdmCisjZGVmaW5lICAgICBNQUNfSVBHX0lGR19JUEdSMl9TSElGVCAgICAgMjQgICAgLyogOTYtYml0IElQRyB3aW5kb3cgKi8KKyNkZWZpbmUgICAgIE1BQ19JUEdfSUZHX0lQR1IyX01BU0sgICAgICAweDdmCisKKy8qIE1BQyBTVEFUSU9OIEFERFJFU1MgICovCisjZGVmaW5lIFJFR19NQUNfU1RBX0FERFIgICAgICAgICAgICAweDE0ODgKKworLyogSGFzaCB0YWJsZSBmb3IgbXVsdGljYXN0IGFkZHJlc3MgKi8KKyNkZWZpbmUgUkVHX1JYX0hBU0hfVEFCTEUgICAgICAgICAgIDB4MTQ5MAorCisKKy8qIE1BQyBIYWxmLUR1cGxleCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19NQUNfSEFMRl9EVVBMWF9DVFJMICAgICAweDE0OTgKKyNkZWZpbmUgICAgIE1BQ19IQUxGX0RVUExYX0NUUkxfTENPTF9TSElGVCAgIDAgICAgICAvKiBDb2xsaXNpb24gV2luZG93ICovCisjZGVmaW5lICAgICBNQUNfSEFMRl9EVVBMWF9DVFJMX0xDT0xfTUFTSyAgICAweDNmZgorI2RlZmluZSAgICAgTUFDX0hBTEZfRFVQTFhfQ1RSTF9SRVRSWV9TSElGVCAgMTIgICAgIC8qIFJldHJhbnNtaXNzaW9uIG1heGltdW0sIGFmdGVyd2FyZHMgdGhlIHBhY2tldCB3aWxsIGJlIGRpc2NhcmRlZCAqLworI2RlZmluZSAgICAgTUFDX0hBTEZfRFVQTFhfQ1RSTF9SRVRSWV9NQVNLICAgMHhmCisjZGVmaW5lICAgICBNQUNfSEFMRl9EVVBMWF9DVFJMX0VYQ19ERUZfRU4gICAweDEwMDAwIC8qIDE6IEFsbG93IHRoZSB0cmFuc21pc3Npb24gb2YgYSBwYWNrZXQgd2hpY2ggaGFzIGJlZW4gZXhjZXNzaXZlbHkgZGVmZXJyZWQgKi8KKyNkZWZpbmUgICAgIE1BQ19IQUxGX0RVUExYX0NUUkxfTk9fQkFDS19DICAgIDB4MjAwMDAgLyogMTogTm8gYmFjay1vZmYgb24gY29sbGlzaW9uLCBpbW1lZGlhdGVseSBzdGFydCB0aGUgcmV0cmFuc21pc3Npb24gKi8KKyNkZWZpbmUgICAgIE1BQ19IQUxGX0RVUExYX0NUUkxfTk9fQkFDS19QICAgIDB4NDAwMDAgLyogMTogTm8gYmFjay1vZmYgb24gYmFja3ByZXNzdXJlLCBpbW1lZGlhdGVseSBzdGFydCB0aGUgdHJhbnNtaXNzaW9uIGFmdGVyIGJhY2sgcHJlc3N1cmUgKi8KKyNkZWZpbmUgICAgIE1BQ19IQUxGX0RVUExYX0NUUkxfQUJFQkUgICAgICAgIDB4ODAwMDAgLyogMTogQWx0ZXJuYXRpdmUgQmluYXJ5IEV4cG9uZW50aWFsIEJhY2stb2ZmIEVuYWJsZWQgKi8KKyNkZWZpbmUgICAgIE1BQ19IQUxGX0RVUExYX0NUUkxfQUJFQlRfU0hJRlQgIDIwICAgICAgLyogTWF4aW11bSBiaW5hcnkgZXhwb25lbnRpYWwgbnVtYmVyICovCisjZGVmaW5lICAgICBNQUNfSEFMRl9EVVBMWF9DVFJMX0FCRUJUX01BU0sgICAweGYKKyNkZWZpbmUgICAgIE1BQ19IQUxGX0RVUExYX0NUUkxfSkFNSVBHX1NISUZUIDI0ICAgICAgLyogSVBHIHRvIHN0YXJ0IEpBTSBmb3IgY29sbGlzaW9uIGJhc2VkIGZsb3cgY29udHJvbCBpbiBoYWxmLWR1cGxleCAqLworI2RlZmluZSAgICAgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfTUFTSyAgMHhmICAgICAvKiBtb2RlLiBJbiB1bml0IG9mIDgtYml0IHRpbWUgKi8KKworLyogTWF4aW11bSBGcmFtZSBMZW5ndGggQ29udHJvbCBSZWdpc3RlciAgICovCisjZGVmaW5lIFJFR19NVFUgICAgICAgICAgICAgICAgICAgICAweDE0OWMKKworLyogV2FrZS1Pbi1MYW4gY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBSRUdfV09MX0NUUkwgICAgICAgICAgICAgICAgMHgxNGEwCisjZGVmaW5lICAgICBXT0xfUEFUVEVSTl9FTiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgICAgIFdPTF9QQVRURVJOX1BNRV9FTiAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSAgICAgV09MX01BR0lDX0VOICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lICAgICBXT0xfTUFHSUNfUE1FX0VOICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgICAgIFdPTF9MSU5LX0NIR19FTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSAgICAgV09MX0xJTktfQ0hHX1BNRV9FTiAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lICAgICBXT0xfUEFUVEVSTl9TVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgICAgIFdPTF9NQUdJQ19TVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSAgICAgV09MX0xJTktDSEdfU1QgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lICAgICBXT0xfQ0xLX1NXSVRDSF9FTiAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgICAgIFdPTF9QVDBfRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSAgICAgV09MX1BUMV9FTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lICAgICBXT0xfUFQyX0VOICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgICAgIFdPTF9QVDNfRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSAgICAgV09MX1BUNF9FTiAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lICAgICBXT0xfUFQ1X0VOICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgICAgIFdPTF9QVDZfRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorLyogV09MIExlbmd0aCAoIDIgRFdPUkQgKSAqLworI2RlZmluZSBSRUdfV09MX1BBVFRFUk5fTEVOICAgICAgICAgMHgxNGE0CisjZGVmaW5lICAgICBXT0xfUFRfTEVOX01BU0sgICAgICAgICAgICAgICAgIDB4N2YKKyNkZWZpbmUgICAgIFdPTF9QVDBfTEVOX1NISUZUICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICAgV09MX1BUMV9MRU5fU0hJRlQgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBXT0xfUFQyX0xFTl9TSElGVCAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBXT0xfUFQzX0xFTl9TSElGVCAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBXT0xfUFQ0X0xFTl9TSElGVCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgICAgIFdPTF9QVDVfTEVOX1NISUZUICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgV09MX1BUNl9MRU5fU0hJRlQgICAgICAgICAgICAgICAxNgorCisvKiBJbnRlcm5hbCBTUkFNIFBhcnRpdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfU1JBTV9UUkRfQUREUiAgICAgICAgICAgMHgxNTE4CisjZGVmaW5lIFJFR19TUkFNX1RSRF9MRU4gICAgICAgICAgICAweDE1MUMKKyNkZWZpbmUgUkVHX1NSQU1fUlhGX0FERFIgICAgICAgICAgIDB4MTUyMAorI2RlZmluZSBSRUdfU1JBTV9SWEZfTEVOICAgICAgICAgICAgMHgxNTI0CisjZGVmaW5lIFJFR19TUkFNX1RYRl9BRERSICAgICAgICAgICAweDE1MjgKKyNkZWZpbmUgUkVHX1NSQU1fVFhGX0xFTiAgICAgICAgICAgIDB4MTUyQworI2RlZmluZSBSRUdfU1JBTV9UQ1BIX0FERFIgICAgICAgICAgMHgxNTMwCisjZGVmaW5lIFJFR19TUkFNX1BLVEhfQUREUiAgICAgICAgICAweDE1MzIKKworLyogTG9hZCBQdHIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xPQURfUFRSICAgICAgICAgICAgICAgIDB4MTUzNCAgLyogU29mdHdhcmUgc2V0cyB0aGlzIGJpdCBhZnRlciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhlYWQgYW5kIHRhaWwgKi8KKworLyoKKyAqIGFkZHJlc3NlcyBvZiBhbGwgZGVzY3JpcHRvcnMsIGFzIHdlbGwgYXMgdGhlIGZvbGxvd2luZyBkZXNjcmlwdG9yCisgKiBjb250cm9sIHJlZ2lzdGVyLCB3aGljaCB0cmlnZ2VycyBlYWNoIGZ1bmN0aW9uIGJsb2NrIHRvIGxvYWQgdGhlIGhlYWQKKyAqIHBvaW50ZXIgdG8gcHJlcGFyZSBmb3IgdGhlIG9wZXJhdGlvbi4gVGhpcyBiaXQgaXMgdGhlbiBzZWxmLWNsZWFyZWQKKyAqIGFmdGVyIG9uZSBjeWNsZS4KKyAqLworCisvKiBEZXNjcmlwdG9yIENvbnRyb2wgcmVnaXN0ZXIgICovCisjZGVmaW5lIFJFR19SWEYzX0JBU0VfQUREUl9ISSAgICAgICAgICAgMHgxNTNDCisjZGVmaW5lIFJFR19ERVNDX0JBU0VfQUREUl9ISSAgICAgICAgICAgMHgxNTQwCisjZGVmaW5lIFJFR19SWEYwX0JBU0VfQUREUl9ISSAgICAgICAgICAgMHgxNTQwIC8qIHNoYXJlIHdpdGggREVTQyBCQVNFIEFERFIgSEkgKi8KKyNkZWZpbmUgUkVHX0hPU1RfUlhGMF9QQUdFMF9MTyAgICAgICAgICAweDE1NDQKKyNkZWZpbmUgUkVHX0hPU1RfUlhGMF9QQUdFMV9MTyAgICAgICAgICAweDE1NDgKKyNkZWZpbmUgUkVHX1RQRF9CQVNFX0FERFJfTE8gICAgICAgICAgICAweDE1NEMKKyNkZWZpbmUgUkVHX1JYRjFfQkFTRV9BRERSX0hJICAgICAgICAgICAweDE1NTAKKyNkZWZpbmUgUkVHX1JYRjJfQkFTRV9BRERSX0hJICAgICAgICAgICAweDE1NTQKKyNkZWZpbmUgUkVHX0hPU1RfUlhGUEFHRV9TSVpFICAgICAgICAgICAweDE1NTgKKyNkZWZpbmUgUkVHX1RQRF9SSU5HX1NJWkUgICAgICAgICAgICAgICAweDE1NUMKKy8qIFJTUyBhYm91dCAqLworI2RlZmluZSBSRUdfUlNTX0tFWTAgICAgICAgICAgICAgICAgICAgIDB4MTRCMAorI2RlZmluZSBSRUdfUlNTX0tFWTEgICAgICAgICAgICAgICAgICAgIDB4MTRCNAorI2RlZmluZSBSRUdfUlNTX0tFWTIgICAgICAgICAgICAgICAgICAgIDB4MTRCOAorI2RlZmluZSBSRUdfUlNTX0tFWTMgICAgICAgICAgICAgICAgICAgIDB4MTRCQworI2RlZmluZSBSRUdfUlNTX0tFWTQgICAgICAgICAgICAgICAgICAgIDB4MTRDMAorI2RlZmluZSBSRUdfUlNTX0tFWTUgICAgICAgICAgICAgICAgICAgIDB4MTRDNAorI2RlZmluZSBSRUdfUlNTX0tFWTYgICAgICAgICAgICAgICAgICAgIDB4MTRDOAorI2RlZmluZSBSRUdfUlNTX0tFWTcgICAgICAgICAgICAgICAgICAgIDB4MTRDQworI2RlZmluZSBSRUdfUlNTX0tFWTggICAgICAgICAgICAgICAgICAgIDB4MTREMAorI2RlZmluZSBSRUdfUlNTX0tFWTkgICAgICAgICAgICAgICAgICAgIDB4MTRENAorI2RlZmluZSBSRUdfSURUX1RBQkxFNCAgICAgICAgICAgICAgICAgIDB4MTRFMAorI2RlZmluZSBSRUdfSURUX1RBQkxFNSAgICAgICAgICAgICAgICAgIDB4MTRFNAorI2RlZmluZSBSRUdfSURUX1RBQkxFNiAgICAgICAgICAgICAgICAgIDB4MTRFOAorI2RlZmluZSBSRUdfSURUX1RBQkxFNyAgICAgICAgICAgICAgICAgIDB4MTRFQworI2RlZmluZSBSRUdfSURUX1RBQkxFMCAgICAgICAgICAgICAgICAgIDB4MTU2MAorI2RlZmluZSBSRUdfSURUX1RBQkxFMSAgICAgICAgICAgICAgICAgIDB4MTU2NAorI2RlZmluZSBSRUdfSURUX1RBQkxFMiAgICAgICAgICAgICAgICAgIDB4MTU2OAorI2RlZmluZSBSRUdfSURUX1RBQkxFMyAgICAgICAgICAgICAgICAgIDB4MTU2QworI2RlZmluZSBSRUdfSURUX1RBQkxFICAgICAgICAgICAgICAgICAgIFJFR19JRFRfVEFCTEUwCisjZGVmaW5lIFJFR19SU1NfSEFTSF9WQUxVRSAgICAgICAgICAgICAgMHgxNTcwCisjZGVmaW5lIFJFR19SU1NfSEFTSF9GTEFHICAgICAgICAgICAgICAgMHgxNTc0CisjZGVmaW5lIFJFR19CQVNFX0NQVV9OVU1CRVIgICAgICAgICAgICAgMHgxNTdDCisKKworLyogVFhRIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1RYUV9DVFJMICAgICAgICAgICAgICAgIDB4MTU4MAorI2RlZmluZSAgICAgVFhRX0NUUkxfTlVNX1RQRF9CVVJTVF9NQVNLICAgICAweEYKKyNkZWZpbmUgICAgIFRYUV9DVFJMX05VTV9UUERfQlVSU1RfU0hJRlQgICAgMAorI2RlZmluZSAgICAgVFhRX0NUUkxfRU4gICAgICAgICAgICAgICAgICAgICAweDIwICAvKiAxOiBFbmFibGUgVFhRICovCisjZGVmaW5lICAgICBUWFFfQ1RSTF9FTkhfTU9ERSAgICAgICAgICAgICAgIDB4NDAgIC8qIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50IG1vZGUsIGluIHdoaWNoIHVwIHRvIHR3byBiYWNrLXRvLWJhY2sgRE1BIHJlYWQgY29tbWFuZHMgbWlnaHQgYmUgZGlzcGF0Y2hlZC4gKi8KKyNkZWZpbmUgICAgIFRYUV9DVFJMX1RYRl9CVVJTVF9OVU1fU0hJRlQgICAgMTYgICAgLyogTnVtYmVyIG9mIGRhdGEgYnl0ZSB0byByZWFkIGluIGEgY2FjaGUtYWxpZ25lZCBidXJzdC4gRWFjaCBTUkFNIGVudHJ5IGlzIDgtYnl0ZSBpbiBsZW5ndGguICovCisjZGVmaW5lICAgICBUWFFfQ1RSTF9UWEZfQlVSU1RfTlVNX01BU0sgICAgIDB4ZmZmZgorCisvKiBKdW1ibyBwYWNrZXQgVGhyZXNob2xkIGZvciB0YXNrIG9mZmxvYWQgKi8KKyNkZWZpbmUgUkVHX1RYX0VBUkxZX1RIICAgICAgICAgICAgICAgICAgICAgMHgxNTg0IC8qIEp1bWJvIGZyYW1lIHRocmVzaG9sZCBpbiBRV09SRCB1bml0LiBQYWNrZXQgZ3JlYXRlciB0aGFuICovCisvKiBKVU1CT19UQVNLX09GRkxPQURfVEhSRVNIT0xEIHdpbGwgbm90IGJlIHRhc2sgb2ZmbG9hZGVkLiAqLworI2RlZmluZSAgICAgVFhfVFhfRUFSTFlfVEhfTUFTSyAgICAgICAgICAgICAweDdmZgorI2RlZmluZSAgICAgVFhfVFhfRUFSTFlfVEhfU0hJRlQgICAgICAgICAgICAwCisKKworLyogUlhRIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1JYUV9DVFJMICAgICAgICAgICAgICAgIDB4MTVBMAorI2RlZmluZSAgICAgICAgIFJYUV9DVFJMX1BCQV9BTElHTl8zMiAgICAgICAgICAgICAgICAgICAwICAgLyogcngtcGFja2V0IGFsaWdubWVudCAqLworI2RlZmluZSAgICAgICAgIFJYUV9DVFJMX1BCQV9BTElHTl82NCAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICAgICAgUlhRX0NUUkxfUEJBX0FMSUdOXzEyOCAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgICAgICBSWFFfQ1RSTF9QQkFfQUxJR05fMjU2ICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgICAgIFJYUV9DVFJMX1ExX0VOCQkJCTB4MTAKKyNkZWZpbmUgICAgICAgICBSWFFfQ1RSTF9RMl9FTgkJCQkweDIwCisjZGVmaW5lICAgICAgICAgUlhRX0NUUkxfUTNfRU4JCQkJMHg0MAorI2RlZmluZSAgICAgICAgIFJYUV9DVFJMX0lQVjZfWFNVTV9WRVJJRllfRU4JCTB4ODAKKyNkZWZpbmUgICAgICAgICBSWFFfQ1RSTF9IQVNIX1RMRU5fU0hJRlQgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgICAgIFJYUV9DVFJMX0hBU0hfVExFTl9NQVNLICAgICAgICAgICAgICAgICAweEZGCisjZGVmaW5lICAgICAgICAgUlhRX0NUUkxfSEFTSF9UWVBFX0lQVjQgICAgICAgICAgICAgICAgIDB4MTAwMDAKKyNkZWZpbmUgICAgICAgICBSWFFfQ1RSTF9IQVNIX1RZUEVfSVBWNF9UQ1AgICAgICAgICAgICAgMHgyMDAwMAorI2RlZmluZSAgICAgICAgIFJYUV9DVFJMX0hBU0hfVFlQRV9JUFY2ICAgICAgICAgICAgICAgICAweDQwMDAwCisjZGVmaW5lICAgICAgICAgUlhRX0NUUkxfSEFTSF9UWVBFX0lQVjZfVENQICAgICAgICAgICAgIDB4ODAwMDAKKyNkZWZpbmUgICAgICAgICBSWFFfQ1RSTF9SU1NfTU9ERV9ESVNBQkxFICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICAgICAgIFJYUV9DVFJMX1JTU19NT0RFX1NRU0lOVCAgICAgICAgICAgICAgICAweDQwMDAwMDAKKyNkZWZpbmUgICAgICAgICBSWFFfQ1RSTF9SU1NfTU9ERV9NUVVFU0lOVCAgICAgICAgICAgICAgMHg4MDAwMDAwCisjZGVmaW5lICAgICAgICAgUlhRX0NUUkxfUlNTX01PREVfTVFVRU1JTlQgICAgICAgICAgICAgIDB4QzAwMDAwMAorI2RlZmluZSAgICAgICAgIFJYUV9DVFJMX05JUF9RVUVVRV9TRUxfVEJMICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lICAgICAgICAgUlhRX0NUUkxfSEFTSF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgICAgICAgICBSWFFfQ1RSTF9DVVRfVEhSVV9FTiAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSAgICAgICAgIFJYUV9DVFJMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisKKy8qIFJ4IGp1bWJvIHBhY2tldCB0aHJlc2hvbGQgYW5kIHJyZCAgcmV0aXJlbWVudCB0aW1lciAgKi8KKyNkZWZpbmUgUkVHX1JYUV9KTUJPU1pfUlJEVElNICAgICAgIDB4MTVBNAorLyoKKyAqIEp1bWJvIHBhY2tldCB0aHJlc2hvbGQgZm9yIG5vbi1WTEFOIHBhY2tldCwgaW4gUVdPUkQgKDY0LWJpdCkgdW5pdC4KKyAqIFdoZW4gdGhlIHBhY2tldCBsZW5ndGggZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgdmFsdWUsIFJYUQorICogc2hhbGwgc3RhcnQgY3V0LXRocm91Z2ggZm9yd2FyZGluZyBvZiB0aGUgcmVjZWl2ZWQgcGFja2V0LgorICovCisjZGVmaW5lICAgICAgICAgUlhRX0pNQk9TWl9USF9NQVNLICAgICAgMHg3ZmYKKyNkZWZpbmUgICAgICAgICBSWFFfSk1CT1NaX1RIX1NISUZUICAgICAgICAgMCAgLyogUlJEIHJldGlyZW1lbnQgdGltZXIuIERlY3JlbWVudCBieSAxIGFmdGVyIGV2ZXJ5IDUxMm5zIHBhc3NlcyovCisjZGVmaW5lICAgICAgICAgUlhRX0pNQk9fTEtBSF9NQVNLICAgICAgICAgIDB4ZgorI2RlZmluZSAgICAgICAgIFJYUV9KTUJPX0xLQUhfU0hJRlQgICAgICAgICAxMQorCisvKiBSWEYgZmxvdyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19SWFFfUlhGX1BBVVNFX1RIUkVTSCAgICAweDE1QTgKKyNkZWZpbmUgICAgIFJYUV9SWEZfUEFVU0VfVEhfSElfU0hJRlQgICAgICAgMAorI2RlZmluZSAgICAgUlhRX1JYRl9QQVVTRV9USF9ISV9NQVNLICAgICAgICAweGZmZgorI2RlZmluZSAgICAgUlhRX1JYRl9QQVVTRV9USF9MT19TSElGVCAgICAgICAxNgorI2RlZmluZSAgICAgUlhRX1JYRl9QQVVTRV9USF9MT19NQVNLICAgICAgICAweGZmZgorCisKKy8qIERNQSBFbmdpbmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfRE1BX0NUUkwgICAgICAgICAgICAgICAgMHgxNUMwCisjZGVmaW5lICAgICBETUFfQ1RSTF9ETUFSX0lOX09SREVSICAgICAgICAgIDB4MQorI2RlZmluZSAgICAgRE1BX0NUUkxfRE1BUl9FTkhfT1JERVIgICAgICAgICAweDIKKyNkZWZpbmUgICAgIERNQV9DVFJMX0RNQVJfT1VUX09SREVSICAgICAgICAgMHg0CisjZGVmaW5lICAgICBETUFfQ1RSTF9SQ0JfVkFMVUUgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgICAgRE1BX0NUUkxfRE1BUl9CVVJTVF9MRU5fU0hJRlQgICA0CisjZGVmaW5lICAgICBETUFfQ1RSTF9ETUFSX0JVUlNUX0xFTl9NQVNLICAgIDcKKyNkZWZpbmUgICAgIERNQV9DVFJMX0RNQVdfQlVSU1RfTEVOX1NISUZUICAgNworI2RlZmluZSAgICAgRE1BX0NUUkxfRE1BV19CVVJTVF9MRU5fTUFTSyAgICA3CisjZGVmaW5lICAgICBETUFfQ1RSTF9ETUFSX1JFUV9QUkkgICAgICAgICAgIDB4NDAwCisjZGVmaW5lICAgICBETUFfQ1RSTF9ETUFSX0RMWV9DTlRfTUFTSyAgICAgIDB4MUYKKyNkZWZpbmUgICAgIERNQV9DVFJMX0RNQVJfRExZX0NOVF9TSElGVCAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9DVFJMX0RNQVdfRExZX0NOVF9NQVNLICAgICAgMHhGCisjZGVmaW5lICAgICBETUFfQ1RSTF9ETUFXX0RMWV9DTlRfU0hJRlQgICAgIDE2CisjZGVmaW5lICAgICBETUFfQ1RSTF9UWENNQl9FTiAgICAgICAgICAgICAgIDB4MTAwMDAwCisjZGVmaW5lICAgICBETUFfQ1RSTF9SWENNQl9FTgkJCQkweDIwMDAwMAorCisKKy8qIENNQi9TTUIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfU01CX1NUQVRfVElNRVIgICAgICAgICAgICAgICAgICAgICAgMHgxNUM0CisjZGVmaW5lIFJFR19UUklHX1JSRF9USFJFU0ggICAgICAgICAgICAgICAgICAgICAweDE1Q0EKKyNkZWZpbmUgUkVHX1RSSUdfVFBEX1RIUkVTSCAgICAgICAgICAgICAgICAgICAgIDB4MTVDOAorI2RlZmluZSBSRUdfVFJJR19UWFRJTUVSICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUNDCisjZGVmaW5lIFJFR19UUklHX1JYVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAweDE1Q0UKKworLyogSE9TVCBSWEYgUGFnZSAxLDIsMyBhZGRyZXNzICovCisjZGVmaW5lIFJFR19IT1NUX1JYRjFfUEFHRTBfTE8gICAgICAgICAgICAgICAgICAweDE1RDAKKyNkZWZpbmUgUkVHX0hPU1RfUlhGMV9QQUdFMV9MTyAgICAgICAgICAgICAgICAgIDB4MTVENAorI2RlZmluZSBSRUdfSE9TVF9SWEYyX1BBR0UwX0xPICAgICAgICAgICAgICAgICAgMHgxNUQ4CisjZGVmaW5lIFJFR19IT1NUX1JYRjJfUEFHRTFfTE8gICAgICAgICAgICAgICAgICAweDE1REMKKyNkZWZpbmUgUkVHX0hPU1RfUlhGM19QQUdFMF9MTyAgICAgICAgICAgICAgICAgIDB4MTVFMAorI2RlZmluZSBSRUdfSE9TVF9SWEYzX1BBR0UxX0xPICAgICAgICAgICAgICAgICAgMHgxNUU0CisKKy8qIE1haWwgYm94ICovCisjZGVmaW5lIFJFR19NQl9SWEYxX1JBRERSICAgICAgICAgICAgICAgICAgICAgICAweDE1QjQKKyNkZWZpbmUgUkVHX01CX1JYRjJfUkFERFIgICAgICAgICAgICAgICAgICAgICAgIDB4MTVCOAorI2RlZmluZSBSRUdfTUJfUlhGM19SQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHgxNUJDCisjZGVmaW5lIFJFR19NQl9UUERfUFJPRF9JRFggICAgICAgICAgICAgICAgICAgICAweDE1RjAKKworLyogUlhGLVBhZ2UgMC0zICBQYWdlTm8gJiBWYWxpZCBiaXQgKi8KKyNkZWZpbmUgUkVHX0hPU1RfUlhGMF9QQUdFMF9WTEQgICAgIDB4MTVGNAorI2RlZmluZSAgICAgSE9TVF9SWEZfVkFMSUQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEhPU1RfUlhGX1BBR0VOT19TSElGVCAgICAgICAxCisjZGVmaW5lICAgICBIT1NUX1JYRl9QQUdFTk9fTUFTSyAgICAgICAgMHg3RgorI2RlZmluZSBSRUdfSE9TVF9SWEYwX1BBR0UxX1ZMRCAgICAgMHgxNUY1CisjZGVmaW5lIFJFR19IT1NUX1JYRjFfUEFHRTBfVkxEICAgICAweDE1RjYKKyNkZWZpbmUgUkVHX0hPU1RfUlhGMV9QQUdFMV9WTEQgICAgIDB4MTVGNworI2RlZmluZSBSRUdfSE9TVF9SWEYyX1BBR0UwX1ZMRCAgICAgMHgxNUY4CisjZGVmaW5lIFJFR19IT1NUX1JYRjJfUEFHRTFfVkxEICAgICAweDE1RjkKKyNkZWZpbmUgUkVHX0hPU1RfUlhGM19QQUdFMF9WTEQgICAgIDB4MTVGQQorI2RlZmluZSBSRUdfSE9TVF9SWEYzX1BBR0UxX1ZMRCAgICAgMHgxNUZCCisKKy8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0lTUiAgICAweDE2MDAKKyNkZWZpbmUgIElTUl9TTUIgICAJCTEKKyNkZWZpbmUgIElTUl9USU1FUgkJMiAgICAgICAvKiBJbnRlcnJ1cHQgd2hlbiBUaW1lciBpcyBjb3VudGVkIGRvd24gdG8gemVybyAqLworLyoKKyAqIFNvZnR3YXJlIG1hbnVhbCBpbnRlcnJ1cHQsIGZvciBkZWJ1Zy4gU2V0IHdoZW4gU1dfTUFOX0lOVF9FTiBpcyBzZXQKKyAqIGluIFRhYmxlIDUxIFNlbGVuZSBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAoT2Zmc2V0IDB4MTQwMCkuCisgKi8KKyNkZWZpbmUgIElTUl9NQU5VQUwgICAgICAgICAJNAorI2RlZmluZSAgSVNSX0hXX1JYRl9PViAgICAgICAgICA4ICAgICAgICAvKiBSWEYgb3ZlcmZsb3cgaW50ZXJydXB0ICovCisjZGVmaW5lICBJU1JfSE9TVF9SWEYwX09WICAgICAgIDB4MTAKKyNkZWZpbmUgIElTUl9IT1NUX1JYRjFfT1YgICAgICAgMHgyMAorI2RlZmluZSAgSVNSX0hPU1RfUlhGMl9PViAgICAgICAweDQwCisjZGVmaW5lICBJU1JfSE9TVF9SWEYzX09WICAgICAgIDB4ODAKKyNkZWZpbmUgIElTUl9UWEZfVU4gICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgIElTUl9SWDBfUEFHRV9GVUxMICAgICAgMHgyMDAKKyNkZWZpbmUgIElTUl9ETUFSX1RPX1JTVCAgICAgICAgMHg0MDAKKyNkZWZpbmUgIElTUl9ETUFXX1RPX1JTVCAgICAgICAgMHg4MDAKKyNkZWZpbmUgIElTUl9HUEhZICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lICBJU1JfVFhfQ1JFRElUICAgICAgICAgIDB4MjAwMAorI2RlZmluZSAgSVNSX0dQSFlfTFBXICAgICAgICAgICAweDQwMDAgICAgLyogR1BIWSBsb3cgcG93ZXIgc3RhdGUgaW50ZXJydXB0ICovCisjZGVmaW5lICBJU1JfUlhfUEtUICAgICAgICAgICAgIDB4MTAwMDAgICAvKiBPbmUgcGFja2V0IHJlY2VpdmVkLCB0cmlnZ2VyZWQgYnkgUkZEICovCisjZGVmaW5lICBJU1JfVFhfUEtUICAgICAgICAgICAgIDB4MjAwMDAgICAvKiBPbmUgcGFja2V0IHRyYW5zbWl0dGVkLCB0cmlnZ2VyZWQgYnkgVFBEICovCisjZGVmaW5lICBJU1JfVFhfRE1BICAgICAgICAgICAgIDB4NDAwMDAKKyNkZWZpbmUgIElTUl9SWF9QS1RfMSAgICAgICAgICAgMHg4MDAwMAorI2RlZmluZSAgSVNSX1JYX1BLVF8yICAgICAgICAgICAweDEwMDAwMAorI2RlZmluZSAgSVNSX1JYX1BLVF8zICAgICAgICAgICAweDIwMDAwMAorI2RlZmluZSAgSVNSX01BQ19SWCAgICAgICAgICAgICAweDQwMDAwMAorI2RlZmluZSAgSVNSX01BQ19UWCAgICAgICAgICAgICAweDgwMDAwMAorI2RlZmluZSAgSVNSX1VSX0RFVEVDVEVEICAgICAgICAweDEwMDAwMDAKKyNkZWZpbmUgIElTUl9GRVJSX0RFVEVDVEVEICAgICAgMHgyMDAwMDAwCisjZGVmaW5lICBJU1JfTkZFUlJfREVURUNURUQgICAgIDB4NDAwMDAwMAorI2RlZmluZSAgSVNSX0NFUlJfREVURUNURUQgICAgICAweDgwMDAwMDAKKyNkZWZpbmUgIElTUl9QSFlfTElOS0RPV04gICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSAgSVNSX0RJU19JTlQgICAgICAgICAgICAweDgwMDAwMDAwCisKKworLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0lNUiAweDE2MDQKKworCisjZGVmaW5lIElNUl9OT1JNQUxfTUFTSyAoXAorCQlJU1JfU01CCSAgICAgICAgfFwKKwkJSVNSX1RYRl9VTiAgICAgIHxcCisJCUlTUl9IV19SWEZfT1YgICB8XAorCQlJU1JfSE9TVF9SWEYwX09WfFwKKwkJSVNSX01BTlVBTCAgICAgIHxcCisJCUlTUl9HUEhZICAgICAgICB8XAorCQlJU1JfR1BIWV9MUFcgICAgfFwKKwkJSVNSX0RNQVJfVE9fUlNUIHxcCisJCUlTUl9ETUFXX1RPX1JTVCB8XAorCQlJU1JfUEhZX0xJTktET1dOfFwKKwkJSVNSX1JYX1BLVCAgICAgIHxcCisJCUlTUl9UWF9QS1QpCisKKyNkZWZpbmUgSVNSX1RYX0VWRU5UIChJU1JfVFhGX1VOIHwgSVNSX1RYX1BLVCkKKyNkZWZpbmUgSVNSX1JYX0VWRU5UIChJU1JfSE9TVF9SWEYwX09WIHwgSVNSX0hXX1JYRl9PViB8IElTUl9SWF9QS1QpCisKKyNkZWZpbmUgUkVHX01BQ19SWF9TVEFUVVNfQklOIDB4MTcwMAorI2RlZmluZSBSRUdfTUFDX1JYX1NUQVRVU19FTkQgMHgxNzVjCisjZGVmaW5lIFJFR19NQUNfVFhfU1RBVFVTX0JJTiAweDE3NjAKKyNkZWZpbmUgUkVHX01BQ19UWF9TVEFUVVNfRU5EIDB4MTdjMAorCisvKiBIYXJkd2FyZSBPZmZzZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0hPU1RfUlhGMF9QQUdFT0ZGIDB4MTgwMAorI2RlZmluZSBSRUdfVFBEX0NPTlNfSURYICAgICAgMHgxODA0CisjZGVmaW5lIFJFR19IT1NUX1JYRjFfUEFHRU9GRiAweDE4MDgKKyNkZWZpbmUgUkVHX0hPU1RfUlhGMl9QQUdFT0ZGIDB4MTgwQworI2RlZmluZSBSRUdfSE9TVF9SWEYzX1BBR0VPRkYgMHgxODEwCisKKy8qIFJYRi1QYWdlIDAtMyBPZmZzZXQgRE1BIEFkZHJlc3MgKi8KKyNkZWZpbmUgUkVHX0hPU1RfUlhGMF9NQjBfTE8gIDB4MTgyMAorI2RlZmluZSBSRUdfSE9TVF9SWEYwX01CMV9MTyAgMHgxODI0CisjZGVmaW5lIFJFR19IT1NUX1JYRjFfTUIwX0xPICAweDE4MjgKKyNkZWZpbmUgUkVHX0hPU1RfUlhGMV9NQjFfTE8gIDB4MTgyQworI2RlZmluZSBSRUdfSE9TVF9SWEYyX01CMF9MTyAgMHgxODMwCisjZGVmaW5lIFJFR19IT1NUX1JYRjJfTUIxX0xPICAweDE4MzQKKyNkZWZpbmUgUkVHX0hPU1RfUlhGM19NQjBfTE8gIDB4MTgzOAorI2RlZmluZSBSRUdfSE9TVF9SWEYzX01CMV9MTyAgMHgxODNDCisKKy8qIFRwZCBDTUIgRE1BIEFkZHJlc3MgKi8KKyNkZWZpbmUgUkVHX0hPU1RfVFhfQ01CX0xPICAgIDB4MTg0MAorI2RlZmluZSBSRUdfSE9TVF9TTUJfQUREUl9MTyAgMHgxODQ0CisKKy8qIERFQlVHIEFERFIgKi8KKyNkZWZpbmUgUkVHX0RFQlVHX0RBVEEwIDB4MTkwMAorI2RlZmluZSBSRUdfREVCVUdfREFUQTEgMHgxOTA0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBNSUkgZGVmaW5pdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQSFkgQ29tbW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9CTUNSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBNSUlfQk1TUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTUlJX1BIWVNJRDEgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIE1JSV9QSFlTSUQyICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBNSUlfQURWRVJUSVNFICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTUlJX0xQQSAgICAgICAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIE1JSV9FWFBBTlNJT04gICAgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBNSUlfQVQwMDFfQ1IgICAgICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgTUlJX0FUMDAxX1NSICAgICAgICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIE1JSV9BVDAwMV9FU1IgICAgICAgICAgICAgICAgICAgMHgwRgorI2RlZmluZSBNSUlfQVQwMDFfUFNDUiAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgTUlJX0FUMDAxX1BTU1IgICAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIE1JSV9JTlRfQ1RSTCAgICAgICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBNSUlfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgTUlJX1NNQVJUU1BFRUQgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIE1JSV9SRVJSQ09VTlRFUiAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBNSUlfU1JFVklTSU9OICAgICAgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgTUlJX1JFU1YxICAgICAgICAgICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIE1JSV9MQlJFUlJPUiAgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBNSUlfUEhZQUREUiAgICAgICAgICAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgTUlJX1JFU1YyICAgICAgICAgICAgICAgICAgICAgICAweDFhCisjZGVmaW5lIE1JSV9UUElTVEFUVVMgICAgICAgICAgICAgICAgICAgMHgxYgorI2RlZmluZSBNSUlfTkNPTkZJRyAgICAgICAgICAgICAgICAgICAgIDB4MWMKKworI2RlZmluZSBNSUlfREJHX0FERFIJCQkweDFECisjZGVmaW5lIE1JSV9EQkdfREFUQQkJCTB4MUUKKworCisvKiBQSFkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQ1JfU1BFRURfU0VMRUNUX01TQiAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogYml0cyA2LDEzOiAxMD0xMDAwLCAwMT0xMDAsIDAwPTEwICovCisjZGVmaW5lIE1JSV9DUl9DT0xMX1RFU1RfRU5BQkxFICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBDb2xsaXNpb24gdGVzdCBlbmFibGUgKi8KKyNkZWZpbmUgTUlJX0NSX0ZVTExfRFVQTEVYICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEZEWCA9MSwgaGFsZiBkdXBsZXggPTAgKi8KKyNkZWZpbmUgTUlJX0NSX1JFU1RBUlRfQVVUT19ORUcgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiAqLworI2RlZmluZSBNSUlfQ1JfSVNPTEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSXNvbGF0ZSBQSFkgZnJvbSBNSUkgKi8KKyNkZWZpbmUgTUlJX0NSX1BPV0VSX0RPV04gICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFBvd2VyIGRvd24gKi8KKyNkZWZpbmUgTUlJX0NSX0FVVE9fTkVHX0VOICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEF1dG8gTmVnIEVuYWJsZSAqLworI2RlZmluZSBNSUlfQ1JfU1BFRURfU0VMRUNUX0xTQiAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogYml0cyA2LDEzOiAxMD0xMDAwLCAwMT0xMDAsIDAwPTEwICovCisjZGVmaW5lIE1JSV9DUl9MT09QQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiAwID0gbm9ybWFsLCAxID0gbG9vcGJhY2sgKi8KKyNkZWZpbmUgTUlJX0NSX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIDAgPSBub3JtYWwsIDEgPSBQSFkgcmVzZXQgKi8KKyNkZWZpbmUgTUlJX0NSX1NQRUVEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDIwNDAKKyNkZWZpbmUgTUlJX0NSX1NQRUVEXzEwMDAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgTUlJX0NSX1NQRUVEXzEwMCAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgTUlJX0NSX1NQRUVEXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKKworCisvKiBQSFkgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9TUl9FWFRFTkRFRF9DQVBTICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBFeHRlbmRlZCByZWdpc3RlciBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgTUlJX1NSX0pBQkJFUl9ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEphYmJlciBEZXRlY3RlZCAqLworI2RlZmluZSBNSUlfU1JfTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTGluayBTdGF0dXMgMSA9IGxpbmsgKi8KKyNkZWZpbmUgTUlJX1NSX0FVVE9ORUdfQ0FQUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEF1dG8gTmVnIENhcGFibGUgKi8KKyNkZWZpbmUgTUlJX1NSX1JFTU9URV9GQVVMVCAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJlbW90ZSBGYXVsdCBEZXRlY3QgKi8KKyNkZWZpbmUgTUlJX1NSX0FVVE9ORUdfQ09NUExFVEUgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEF1dG8gTmVnIENvbXBsZXRlICovCisjZGVmaW5lIE1JSV9TUl9QUkVBTUJMRV9TVVBQUkVTUyAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBQcmVhbWJsZSBtYXkgYmUgc3VwcHJlc3NlZCAqLworI2RlZmluZSBNSUlfU1JfRVhURU5ERURfU1RBVFVTICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRXh0LiBzdGF0dXMgaW5mbyBpbiBSZWcgMHgwRiAqLworI2RlZmluZSBNSUlfU1JfMTAwVDJfSERfQ0FQUyAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogMTAwVDIgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTAwVDJfRkRfQ0FQUyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogMTAwVDIgRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTBUX0hEX0NBUFMgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogMTBUICAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTBUX0ZEX0NBUFMgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogMTBUICAgRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTAwWF9IRF9DQVBTICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogMTAwWCAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTAwWF9GRF9DQVBTICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogMTAwWCAgRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTAwVDRfQ0FQUyAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogMTAwVDQgQ2FwYWJsZSAqLworCisvKiBMaW5rIHBhcnRuZXIgYWJpbGl0eSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTUlJX0xQQV9TTENUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWYgIC8qIFNhbWUgYXMgYWR2ZXJ0aXNlIHNlbGVjdG9yICAqLworI2RlZmluZSBNSUlfTFBBXzEwSEFMRiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQ2FuIGRvIDEwbWJwcyBoYWxmLWR1cGxleCAgICovCisjZGVmaW5lIE1JSV9MUEFfMTBGVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBDYW4gZG8gMTBtYnBzIGZ1bGwtZHVwbGV4ICAgKi8KKyNkZWZpbmUgTUlJX0xQQV8xMDBIQUxGICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIENhbiBkbyAxMDBtYnBzIGhhbGYtZHVwbGV4ICAqLworI2RlZmluZSBNSUlfTFBBXzEwMEZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQ2FuIGRvIDEwMG1icHMgZnVsbC1kdXBsZXggICovCisjZGVmaW5lIE1JSV9MUEFfMTAwQkFTRTQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiAxMDBCQVNFLVQ0ICAqLworI2RlZmluZSBNSUlfTFBBX1BBVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogUEFVU0UgKi8KKyNkZWZpbmUgTUlJX0xQQV9BU1lQQVVTRSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFzeW1tZXRyaWNhbCBQQVVTRSAqLworI2RlZmluZSBNSUlfTFBBX1JGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogTGluayBwYXJ0bmVyIGZhdWx0ZWQgICAgICAgICovCisjZGVmaW5lIE1JSV9MUEFfTFBBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBMaW5rIHBhcnRuZXIgYWNrZWQgdXMgICAgICAgKi8KKyNkZWZpbmUgTUlJX0xQQV9OUEFHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIE5leHQgcGFnZSBiaXQgICAgICAgICAgICAgICAqLworCisvKiBBdXRvbmVnIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0FSX1NFTEVDVE9SX0ZJRUxEICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogaW5kaWNhdGVzIElFRUUgODAyLjMgQ1NNQS9DRCAqLworI2RlZmluZSBNSUlfQVJfMTBUX0hEX0NBUFMgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiAxMFQgICBIYWxmIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE1JSV9BUl8xMFRfRkRfQ0FQUyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIDEwVCAgIEZ1bGwgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgTUlJX0FSXzEwMFRYX0hEX0NBUFMgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogMTAwVFggSGFsZiBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfQVJfMTAwVFhfRkRfQ0FQUyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiAxMDBUWCBGdWxsIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE1JSV9BUl8xMDBUNF9DQVBTICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIDEwMFQ0IENhcGFibGUgKi8KKyNkZWZpbmUgTUlJX0FSX1BBVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogUGF1c2Ugb3BlcmF0aW9uIGRlc2lyZWQgKi8KKyNkZWZpbmUgTUlJX0FSX0FTTV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQXN5bW1ldHJpYyBQYXVzZSBEaXJlY3Rpb24gYml0ICovCisjZGVmaW5lIE1JSV9BUl9SRU1PVEVfRkFVTFQgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFJlbW90ZSBGYXVsdCBkZXRlY3RlZCAqLworI2RlZmluZSBNSUlfQVJfTkVYVF9QQUdFICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBOZXh0IFBhZ2UgYWJpbGl0eSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgTUlJX0FSX1NQRUVEX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDFFMAorI2RlZmluZSBNSUlfQVJfREVGQVVMVF9DQVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwREUwCisKKy8qIDEwMDBCQVNFLVQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfSERfQ0FQUyAgICAgICAgICAgICAgMHgwMTAwICAvKiBBZHZlcnRpc2UgMTAwMFQgSEQgY2FwYWJpbGl0eSAqLworI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfRkRfQ0FQUyAgICAgICAgICAgICAgMHgwMjAwICAvKiBBZHZlcnRpc2UgMTAwMFQgRkQgY2FwYWJpbGl0eSAgKi8KKyNkZWZpbmUgTUlJX0FUMDAxX0NSXzEwMDBUX1JFUEVBVEVSX0RURSAgICAgICAgIDB4MDQwMCAgLyogMT1SZXBlYXRlci9zd2l0Y2ggZGV2aWNlIHBvcnQgKi8KKy8qIDA9RFRFIGRldmljZSAqLworI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfTVNfVkFMVUUgICAgICAgICAgICAgMHgwODAwICAvKiAxPUNvbmZpZ3VyZSBQSFkgYXMgTWFzdGVyICovCisvKiAwPUNvbmZpZ3VyZSBQSFkgYXMgU2xhdmUgKi8KKyNkZWZpbmUgTUlJX0FUMDAxX0NSXzEwMDBUX01TX0VOQUJMRSAgICAgICAgICAgIDB4MTAwMCAgLyogMT1NYXN0ZXIvU2xhdmUgbWFudWFsIGNvbmZpZyB2YWx1ZSAqLworLyogMD1BdXRvbWF0aWMgTWFzdGVyL1NsYXZlIGNvbmZpZyAqLworI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfVEVTVF9NT0RFX05PUk1BTCAgICAgMHgwMDAwICAvKiBOb3JtYWwgT3BlcmF0aW9uICovCisjZGVmaW5lIE1JSV9BVDAwMV9DUl8xMDAwVF9URVNUX01PREVfMSAgICAgICAgICAweDIwMDAgIC8qIFRyYW5zbWl0IFdhdmVmb3JtIHRlc3QgKi8KKyNkZWZpbmUgTUlJX0FUMDAxX0NSXzEwMDBUX1RFU1RfTU9ERV8yICAgICAgICAgIDB4NDAwMCAgLyogTWFzdGVyIFRyYW5zbWl0IEppdHRlciB0ZXN0ICovCisjZGVmaW5lIE1JSV9BVDAwMV9DUl8xMDAwVF9URVNUX01PREVfMyAgICAgICAgICAweDYwMDAgIC8qIFNsYXZlIFRyYW5zbWl0IEppdHRlciB0ZXN0ICovCisjZGVmaW5lIE1JSV9BVDAwMV9DUl8xMDAwVF9URVNUX01PREVfNCAgICAgICAgICAweDgwMDAgIC8qIFRyYW5zbWl0dGVyIERpc3RvcnRpb24gdGVzdCAqLworI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfU1BFRURfTUFTSyAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIE1JSV9BVDAwMV9DUl8xMDAwVF9ERUZBVUxUX0NBUF9NQVNLICAgICAweDAzMDAKKworLyogMTAwMEJBU0UtVCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0FUMDAxX1NSXzEwMDBUX0xQX0hEX0NBUFMgICAgICAgICAgIDB4MDQwMCAgLyogTFAgaXMgMTAwMFQgSEQgY2FwYWJsZSAqLworI2RlZmluZSBNSUlfQVQwMDFfU1JfMTAwMFRfTFBfRkRfQ0FQUyAgICAgICAgICAgMHgwODAwICAvKiBMUCBpcyAxMDAwVCBGRCBjYXBhYmxlICovCisjZGVmaW5lIE1JSV9BVDAwMV9TUl8xMDAwVF9SRU1PVEVfUlhfU1RBVFVTICAgICAweDEwMDAgIC8qIFJlbW90ZSByZWNlaXZlciBPSyAqLworI2RlZmluZSBNSUlfQVQwMDFfU1JfMTAwMFRfTE9DQUxfUlhfU1RBVFVTICAgICAgMHgyMDAwICAvKiBMb2NhbCByZWNlaXZlciBPSyAqLworI2RlZmluZSBNSUlfQVQwMDFfU1JfMTAwMFRfTVNfQ09ORklHX1JFUyAgICAgICAgMHg0MDAwICAvKiAxPUxvY2FsIFRYIGlzIE1hc3RlciwgMD1TbGF2ZSAqLworI2RlZmluZSBNSUlfQVQwMDFfU1JfMTAwMFRfTVNfQ09ORklHX0ZBVUxUICAgICAgMHg4MDAwICAvKiBNYXN0ZXIvU2xhdmUgY29uZmlnIGZhdWx0ICovCisjZGVmaW5lIE1JSV9BVDAwMV9TUl8xMDAwVF9SRU1PVEVfUlhfU1RBVFVTX1NISUZUICAgMTIKKyNkZWZpbmUgTUlJX0FUMDAxX1NSXzEwMDBUX0xPQ0FMX1JYX1NUQVRVU19TSElGVCAgICAxMworCisvKiBFeHRlbmRlZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0FUMDAxX0VTUl8xMDAwVF9IRF9DQVBTICAgICAgICAgICAgIDB4MTAwMCAgLyogMTAwMFQgSEQgY2FwYWJsZSAqLworI2RlZmluZSBNSUlfQVQwMDFfRVNSXzEwMDBUX0ZEX0NBUFMgICAgICAgICAgICAgMHgyMDAwICAvKiAxMDAwVCBGRCBjYXBhYmxlICovCisjZGVmaW5lIE1JSV9BVDAwMV9FU1JfMTAwMFhfSERfQ0FQUyAgICAgICAgICAgICAweDQwMDAgIC8qIDEwMDBYIEhEIGNhcGFibGUgKi8KKyNkZWZpbmUgTUlJX0FUMDAxX0VTUl8xMDAwWF9GRF9DQVBTICAgICAgICAgICAgIDB4ODAwMCAgLyogMTAwMFggRkQgY2FwYWJsZSAqLworCisvKiBBVDAwMSBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9KQUJCRVJfRElTQUJMRSAgICAgICAgICAgMHgwMDAxICAvKiAxPUphYmJlciBGdW5jdGlvbiBkaXNhYmxlZCAqLworI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9QT0xBUklUWV9SRVZFUlNBTCAgICAgICAgMHgwMDAyICAvKiAxPVBvbGFyaXR5IFJldmVyc2FsIGVuYWJsZWQgKi8KKyNkZWZpbmUgTUlJX0FUMDAxX1BTQ1JfU1FFX1RFU1QgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogMT1TUUUgVGVzdCBlbmFibGVkICovCisjZGVmaW5lIE1JSV9BVDAwMV9QU0NSX01BQ19QT1dFUkRPV04gICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgTUlJX0FUMDAxX1BTQ1JfQ0xLMTI1X0RJU0FCTEUgICAgICAgICAgIDB4MDAxMCAgLyogMT1DTEsxMjUgbG93LAorCQkJCQkJCSAqIDA9Q0xLMTI1IHRvZ2dsaW5nCisJCQkJCQkJICovCisjZGVmaW5lIE1JSV9BVDAwMV9QU0NSX01ESV9NQU5VQUxfTU9ERSAgICAgICAgICAweDAwMDAgIC8qIE1ESSBDcm9zc292ZXIgTW9kZSBiaXRzIDY6NSAqLworLyogTWFudWFsIE1ESSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1JSV9BVDAwMV9QU0NSX01ESVhfTUFOVUFMX01PREUgICAgICAgICAweDAwMjAgIC8qIE1hbnVhbCBNRElYIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTUlJX0FUMDAxX1BTQ1JfQVVUT19YXzEwMDBUICAgICAgICAgICAgIDB4MDA0MCAgLyogMTAwMEJBU0UtVDogQXV0byBjcm9zc292ZXIsCisJCQkJCQkJICogIDEwMEJBU0UtVFgvMTBCQVNFLVQ6CisJCQkJCQkJICogIE1ESSBNb2RlCisJCQkJCQkJICovCisjZGVmaW5lIE1JSV9BVDAwMV9QU0NSX0FVVE9fWF9NT0RFICAgICAgICAgICAgICAweDAwNjAgIC8qIEF1dG8gY3Jvc3NvdmVyIGVuYWJsZWQKKwkJCQkJCQkgKiBhbGwgc3BlZWRzLgorCQkJCQkJCSAqLworI2RlZmluZSBNSUlfQVQwMDFfUFNDUl8xMEJUX0VYVF9ESVNUX0VOQUJMRSAgICAgMHgwMDgwCisvKiAxPUVuYWJsZSBFeHRlbmRlZCAxMEJBU0UtVCBkaXN0YW5jZQorICogKExvd2VyIDEwQkFTRS1UIFJYIFRocmVzaG9sZCkKKyAqIDA9Tm9ybWFsIDEwQkFTRS1UIFJYIFRocmVzaG9sZCAqLworI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9NSUlfNUJJVF9FTkFCTEUgICAgICAgICAgMHgwMTAwCisvKiAxPTUtQml0IGludGVyZmFjZSBpbiAxMDBCQVNFLVRYCisgKiAwPU1JSSBpbnRlcmZhY2UgaW4gMTAwQkFTRS1UWCAqLworI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9TQ1JBTUJMRVJfRElTQUJMRSAgICAgICAgMHgwMjAwICAvKiAxPVNjcmFtYmxlciBkaXNhYmxlICovCisjZGVmaW5lIE1JSV9BVDAwMV9QU0NSX0ZPUkNFX0xJTktfR09PRCAgICAgICAgICAweDA0MDAgIC8qIDE9Rm9yY2UgbGluayBnb29kICovCisjZGVmaW5lIE1JSV9BVDAwMV9QU0NSX0FTU0VSVF9DUlNfT05fVFggICAgICAgICAweDA4MDAgIC8qIDE9QXNzZXJ0IENSUyBvbiBUcmFuc21pdCAqLworI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9QT0xBUklUWV9SRVZFUlNBTF9TSElGVCAgICAxCisjZGVmaW5lIE1JSV9BVDAwMV9QU0NSX0FVVE9fWF9NT0RFX1NISUZUICAgICAgICAgIDUKKyNkZWZpbmUgTUlJX0FUMDAxX1BTQ1JfMTBCVF9FWFRfRElTVF9FTkFCTEVfU0hJRlQgNworLyogQVQwMDEgUEhZIFNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQVQwMDFfUFNTUl9TUERfRFBMWF9SRVNPTFZFRCAgICAgICAgMHgwODAwICAvKiAxPVNwZWVkICYgRHVwbGV4IHJlc29sdmVkICovCisjZGVmaW5lIE1JSV9BVDAwMV9QU1NSX0RQTFggICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIDE9RHVwbGV4IDA9SGFsZiBEdXBsZXggKi8KKyNkZWZpbmUgTUlJX0FUMDAxX1BTU1JfU1BFRUQgICAgICAgICAgICAgICAgICAgIDB4QzAwMCAgLyogU3BlZWQsIGJpdHMgMTQ6MTUgKi8KKyNkZWZpbmUgTUlJX0FUMDAxX1BTU1JfMTBNQlMgICAgICAgICAgICAgICAgICAgIDB4MDAwMCAgLyogMDA9MTBNYnMgKi8KKyNkZWZpbmUgTUlJX0FUMDAxX1BTU1JfMTAwTUJTICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogMDE9MTAwTWJzICovCisjZGVmaW5lIE1JSV9BVDAwMV9QU1NSXzEwMDBNQlMgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIDEwPTEwMDBNYnMgKi8KKworI2VuZGlmIC8qX0FUSEwxRV9IV19IXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyNjRjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYwpAQCAtMCwwICsxLDI1OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAwNyBBdGhlcm9zIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERlcml2ZWQgZnJvbSBJbnRlbCBlMTAwMCBkcml2ZXIKKyAqIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiYXRsMWUuaCIKKworI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjAuNy1OQVBJIgorCitjaGFyIGF0bDFlX2RyaXZlcl9uYW1lW10gPSAiQVRMMUUiOworY2hhciBhdGwxZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDFFICAgICAgMHgxMDI2CisvKgorICogYXRsMWVfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKKyAqCisgKiBXaWxkY2FyZCBlbnRyaWVzIChQQ0lfQU5ZX0lEKSBzaG91bGQgY29tZSBsYXN0CisgKiBMYXN0IGVudHJ5IG11c3QgYmUgYWxsIDBzCisgKgorICogeyBWZW5kb3IgSUQsIERldmljZSBJRCwgU3ViVmVuZG9yIElELCBTdWJEZXZpY2UgSUQsCisgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGwxZV9wY2lfdGJsW10gPSB7CisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMUUpfSwKKwkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCisJeyAwIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRsMWVfcGNpX3RibCk7CisKK01PRFVMRV9BVVRIT1IoIkF0aGVyb3MgQ29ycG9yYXRpb24sIDx4aW9uZy5odWFuZ0BhdGhlcm9zLmNvbT4sIEppZSBZYW5nIDxqaWUueWFuZ0BhdGhlcm9zLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXRoZXJvcyAxMDAwTSBFdGhlcm5ldCBOZXR3b3JrIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworCitzdGF0aWMgaW5saW5lIHZvaWQgYXRsMWVfc2V0dXBfbWFjX2N0cmwoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpOworCitzdGF0aWMgY29uc3QgdTE2CithdGwxZV9yeF9wYWdlX3ZsZF9yZWdzW0FUX01BWF9SRUNFSVZFX1FVRVVFXVtBVF9QQUdFX05VTV9QRVJfUVVFVUVdID0KK3sKKwl7UkVHX0hPU1RfUlhGMF9QQUdFMF9WTEQsIFJFR19IT1NUX1JYRjBfUEFHRTFfVkxEfSwKKwl7UkVHX0hPU1RfUlhGMV9QQUdFMF9WTEQsIFJFR19IT1NUX1JYRjFfUEFHRTFfVkxEfSwKKwl7UkVHX0hPU1RfUlhGMl9QQUdFMF9WTEQsIFJFR19IT1NUX1JYRjJfUEFHRTFfVkxEfSwKKwl7UkVHX0hPU1RfUlhGM19QQUdFMF9WTEQsIFJFR19IT1NUX1JYRjNfUEFHRTFfVkxEfQorfTsKKworc3RhdGljIGNvbnN0IHUxNiBhdGwxZV9yeF9wYWdlX2hpX2FkZHJfcmVnc1tBVF9NQVhfUkVDRUlWRV9RVUVVRV0gPQoreworCVJFR19SWEYwX0JBU0VfQUREUl9ISSwKKwlSRUdfUlhGMV9CQVNFX0FERFJfSEksCisJUkVHX1JYRjJfQkFTRV9BRERSX0hJLAorCVJFR19SWEYzX0JBU0VfQUREUl9ISQorfTsKKworc3RhdGljIGNvbnN0IHUxNgorYXRsMWVfcnhfcGFnZV9sb19hZGRyX3JlZ3NbQVRfTUFYX1JFQ0VJVkVfUVVFVUVdW0FUX1BBR0VfTlVNX1BFUl9RVUVVRV0gPQoreworCXtSRUdfSE9TVF9SWEYwX1BBR0UwX0xPLCBSRUdfSE9TVF9SWEYwX1BBR0UxX0xPfSwKKwl7UkVHX0hPU1RfUlhGMV9QQUdFMF9MTywgUkVHX0hPU1RfUlhGMV9QQUdFMV9MT30sCisJe1JFR19IT1NUX1JYRjJfUEFHRTBfTE8sIFJFR19IT1NUX1JYRjJfUEFHRTFfTE99LAorCXtSRUdfSE9TVF9SWEYzX1BBR0UwX0xPLCBSRUdfSE9TVF9SWEYzX1BBR0UxX0xPfQorfTsKKworc3RhdGljIGNvbnN0IHUxNgorYXRsMWVfcnhfcGFnZV93cml0ZV9vZmZzZXRfcmVnc1tBVF9NQVhfUkVDRUlWRV9RVUVVRV1bQVRfUEFHRV9OVU1fUEVSX1FVRVVFXSA9Cit7CisJe1JFR19IT1NUX1JYRjBfTUIwX0xPLCAgUkVHX0hPU1RfUlhGMF9NQjFfTE99LAorCXtSRUdfSE9TVF9SWEYxX01CMF9MTywgIFJFR19IT1NUX1JYRjFfTUIxX0xPfSwKKwl7UkVHX0hPU1RfUlhGMl9NQjBfTE8sICBSRUdfSE9TVF9SWEYyX01CMV9MT30sCisJe1JFR19IT1NUX1JYRjNfTUIwX0xPLCAgUkVHX0hPU1RfUlhGM19NQjFfTE99Cit9OworCitzdGF0aWMgY29uc3QgdTE2IGF0bDFlX3BheV9sb2FkX3NpemVbXSA9IHsKKwkxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCA0MDk2LAorfTsKKworLyoKKyAqIGF0bDFlX2lycV9lbmFibGUgLSBFbmFibGUgZGVmYXVsdCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBzZXR0aW5ncworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGwxZV9pcnFfZW5hYmxlKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChsaWtlbHkoYXRvbWljX2RlY19hbmRfdGVzdCgmYWRhcHRlci0+aXJxX3NlbSkpKSB7CisJCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19JU1IsIDApOworCQlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSU1SLCBJTVJfTk9STUFMX01BU0spOworCQlBVF9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOworCX0KK30KKworLyoKKyAqIGF0bDFlX2lycV9kaXNhYmxlIC0gTWFzayBvZmYgaW50ZXJydXB0IGdlbmVyYXRpb24gb24gdGhlIE5JQworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGwxZV9pcnFfZGlzYWJsZShzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlhdG9taWNfaW5jKCZhZGFwdGVyLT5pcnFfc2VtKTsKKwlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSU1SLCAwKTsKKwlBVF9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOworCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworfQorCisvKgorICogYXRsMWVfaXJxX3Jlc2V0IC0gcmVzZXQgaW50ZXJydXB0IGNvbmZpdXJlIG9uIHRoZSBOSUMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRsMWVfaXJxX3Jlc2V0KHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCWF0b21pY19zZXQoJmFkYXB0ZXItPmlycV9zZW0sIDApOworCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19JU1IsIDApOworCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19JTVIsIDApOworCUFUX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7Cit9CisKKy8qCisgKiBhdGwxZV9waHlfY29uZmlnIC0gVGltZXIgQ2FsbC1iYWNrCisgKiBAZGF0YTogcG9pbnRlciB0byBuZXRkZXYgY2FzdCBpbnRvIGFuIHVuc2lnbmVkIGxvbmcKKyAqLworc3RhdGljIHZvaWQgYXRsMWVfcGh5X2NvbmZpZyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKikgZGF0YTsKKwlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bWRpb19sb2NrLCBmbGFncyk7CisJYXRsMWVfcmVzdGFydF9hdXRvbmVnKGh3KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5tZGlvX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBhdGwxZV9yZWluaXRfbG9ja2VkKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCisJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19BVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncykpCisJCW1zbGVlcCgxKTsKKwlhdGwxZV9kb3duKGFkYXB0ZXIpOworCWF0bDFlX3VwKGFkYXB0ZXIpOworCWNsZWFyX2JpdChfX0FUX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWVfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXI7CisJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRsMWVfYWRhcHRlciwgcmVzZXRfdGFzayk7CisKKwlhdGwxZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworfQorCitzdGF0aWMgaW50IGF0bDFlX2NoZWNrX2xpbmsoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICAgICpwZGV2ICAgPSBhZGFwdGVyLT5wZGV2OworCWludCBlcnIgPSAwOworCXUxNiBzcGVlZCwgZHVwbGV4LCBwaHlfZGF0YTsKKworCS8qIE1JSV9CTVNSIG11c3QgcmVhZCB0d2lzZSAqLworCWF0bDFlX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsICZwaHlfZGF0YSk7CisJYXRsMWVfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKKwlpZiAoKHBoeV9kYXRhICYgQk1TUl9MU1RBVFVTKSA9PSAwKSB7CisJCS8qIGxpbmsgZG93biAqLworCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7IC8qIG9sZCBsaW5rIHN0YXRlOiBVcCAqLworCQkJdTMyIHZhbHVlOworCQkJLyogZGlzYWJsZSByeCAqLworCQkJdmFsdWUgPSBBVF9SRUFEX1JFRyhodywgUkVHX01BQ19DVFJMKTsKKwkJCXZhbHVlICY9IH5NQUNfQ1RSTF9SWF9FTjsKKwkJCUFUX1dSSVRFX1JFRyhodywgUkVHX01BQ19DVFJMLCB2YWx1ZSk7CisJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gU1BFRURfMDsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCX0KKwl9IGVsc2UgeworCQkvKiBMaW5rIFVwICovCisJCWVyciA9IGF0bDFlX2dldF9zcGVlZF9hbmRfZHVwbGV4KGh3LCAmc3BlZWQsICZkdXBsZXgpOworCQlpZiAodW5saWtlbHkoZXJyKSkKKwkJCXJldHVybiBlcnI7CisKKwkJLyogbGluayByZXN1bHQgaXMgb3VyIHNldHRpbmcgKi8KKwkJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQgIT0gc3BlZWQgfHwKKwkJICAgIGFkYXB0ZXItPmxpbmtfZHVwbGV4ICE9IGR1cGxleCkgeworCQkJYWRhcHRlci0+bGlua19zcGVlZCAgPSBzcGVlZDsKKwkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gZHVwbGV4OworCQkJYXRsMWVfc2V0dXBfbWFjX2N0cmwoYWRhcHRlcik7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LAorCQkJCSIlczogJXMgTklDIExpbmsgaXMgVXA8JWQgTWJwcyAlcz5cbiIsCisJCQkJYXRsMWVfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSwKKwkJCQlhZGFwdGVyLT5saW5rX3NwZWVkLAorCQkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYID8KKwkJCQkiRnVsbCBEdXBsZXgiIDogIkhhbGYgRHVwbGV4Iik7CisJCX0KKworCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQkJLyogTGluayBkb3duIC0+IFVwICovCisJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CisJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhdGwxZV9saW5rX2NoZ190YXNrIC0gZGVhbCB3aXRoIGxpbmsgY2hhbmdlIGV2ZW50IE91dCBvZiBpbnRlcnJ1cHQgY29udGV4dAorICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBhdGwxZV9saW5rX2NoZ190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRsMWVfYWRhcHRlciwgbGlua19jaGdfdGFzayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm1kaW9fbG9jaywgZmxhZ3MpOworCWF0bDFlX2NoZWNrX2xpbmsoYWRhcHRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bWRpb19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFlX2xpbmtfY2hnX2V2ZW50KHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IHBjaV9kZXYgICAgKnBkZXYgICA9IGFkYXB0ZXItPnBkZXY7CisJdTE2IHBoeV9kYXRhID0gMDsKKwl1MTYgbGlua191cCA9IDA7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1kaW9fbG9jayk7CisJYXRsMWVfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgTUlJX0JNU1IsICZwaHlfZGF0YSk7CisJYXRsMWVfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgTUlJX0JNU1IsICZwaHlfZGF0YSk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1kaW9fbG9jayk7CisJbGlua191cCA9IHBoeV9kYXRhICYgQk1TUl9MU1RBVFVTOworCS8qIG5vdGlmeSB1cHBlciBsYXllciBsaW5rIGRvd24gQVNBUCAqLworCWlmICghbGlua191cCkgeworCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQkvKiBvbGQgbGluayBzdGF0ZTogVXAgKi8KKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlczogJXMgTklDIExpbmsgaXMgRG93blxuIiwKKwkJCQkJYXRsMWVfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7CisJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gU1BFRURfMDsKKwkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJfQorCX0KKwlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5saW5rX2NoZ190YXNrKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWVfZGVsX3RpbWVyKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5waHlfY29uZmlnX3RpbWVyKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWVfY2FuY2VsX3dvcmsoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bGlua19jaGdfdGFzayk7Cit9CisKKy8qCisgKiBhdGwxZV90eF90aW1lb3V0IC0gUmVzcG9uZCB0byBhIFR4IEhhbmcKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgYXRsMWVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7Cit9CisKKy8qCisgKiBhdGwxZV9zZXRfbXVsdGkgLSBNdWx0aWNhc3QgYW5kIFByb21pc2N1b3VzIG1vZGUgc2V0CisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogVGhlIHNldF9tdWx0aSBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIG11bHRpY2FzdCBhZGRyZXNzCisgKiBsaXN0IG9yIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmbGFncyBhcmUgdXBkYXRlZC4gIFRoaXMgcm91dGluZSBpcworICogcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBmb3IgcHJvcGVyIG11bHRpY2FzdCwKKyAqIHByb21pc2N1b3VzIG1vZGUsIGFuZCBhbGwtbXVsdGkgYmVoYXZpb3IuCisgKi8KK3N0YXRpYyB2b2lkIGF0bDFlX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOworCXUzMiBtYWNfY3RybF9kYXRhID0gMDsKKwl1MzIgaGFzaF92YWx1ZTsKKworCS8qIENoZWNrIGZvciBQcm9taXNjdW91cyBhbmQgQWxsIE11bHRpY2FzdCBtb2RlcyAqLworCW1hY19jdHJsX2RhdGEgPSBBVF9SRUFEX1JFRyhodywgUkVHX01BQ19DVFJMKTsKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9QUk9NSVNfRU47CisJfSBlbHNlIGlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfTUNfQUxMX0VOOworCQltYWNfY3RybF9kYXRhICY9IH5NQUNfQ1RSTF9QUk9NSVNfRU47CisJfSBlbHNlIHsKKwkJbWFjX2N0cmxfZGF0YSAmPSB+KE1BQ19DVFJMX1BST01JU19FTiB8IE1BQ19DVFJMX01DX0FMTF9FTik7CisJfQorCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIG1hY19jdHJsX2RhdGEpOworCisJLyogY2xlYXIgdGhlIG9sZCBzZXR0aW5ncyBmcm9tIHRoZSBtdWx0aWNhc3QgaGFzaCB0YWJsZSAqLworCUFUX1dSSVRFX1JFRyhodywgUkVHX1JYX0hBU0hfVEFCTEUsIDApOworCUFUX1dSSVRFX1JFR19BUlJBWShodywgUkVHX1JYX0hBU0hfVEFCTEUsIDEsIDApOworCisJLyogY29tb3V0ZSBtYyBhZGRyZXNzZXMnIGhhc2ggdmFsdWUgLGFuZCBwdXQgaXQgaW50byBoYXNoIHRhYmxlICovCisJZm9yIChtY19wdHIgPSBuZXRkZXYtPm1jX2xpc3Q7IG1jX3B0cjsgbWNfcHRyID0gbWNfcHRyLT5uZXh0KSB7CisJCWhhc2hfdmFsdWUgPSBhdGwxZV9oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZG1pX2FkZHIpOworCQlhdGwxZV9oYXNoX3NldChodywgaGFzaF92YWx1ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGwxZV92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKK3sKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXUzMiBtYWNfY3RybF9kYXRhID0gMDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgImF0bDFlX3ZsYW5fcnhfcmVnaXN0ZXJcbiIpOworCisJYXRsMWVfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisKKwlhZGFwdGVyLT52bGdycCA9IGdycDsKKwltYWNfY3RybF9kYXRhID0gQVRfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTUFDX0NUUkwpOworCisJaWYgKGdycCkgeworCQkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfUk1WX1ZMQU47CisJfSBlbHNlIHsKKwkJLyogZGlzYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KKwkJbWFjX2N0cmxfZGF0YSAmPSB+TUFDX0NUUkxfUk1WX1ZMQU47CisJfQorCisJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX01BQ19DVFJMLCBtYWNfY3RybF9kYXRhKTsKKwlhdGwxZV9pcnFfZW5hYmxlKGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZCBhdGwxZV9yZXN0b3JlX3ZsYW4oc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiYXRsMWVfcmVzdG9yZV92bGFuICEiKTsKKwlhdGwxZV92bGFuX3J4X3JlZ2lzdGVyKGFkYXB0ZXItPm5ldGRldiwgYWRhcHRlci0+dmxncnApOworfQorLyoKKyAqIGF0bDFlX3NldF9tYWMgLSBDaGFuZ2UgdGhlIEV0aGVybmV0IEFkZHJlc3Mgb2YgdGhlIE5JQworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICogQHA6IHBvaW50ZXIgdG8gYW4gYWRkcmVzcyBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IGF0bDFlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShhZGFwdGVyLT5ody5tYWNfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisKKwlhdGwxZV9od19zZXRfbWFjX2FkZHIoJmFkYXB0ZXItPmh3KTsKKworCXJldHVybiAwOworfQorCisvKgorICogYXRsMWVfY2hhbmdlX210dSAtIENoYW5nZSB0aGUgTWF4aW11bSBUcmFuc2ZlciBVbml0CisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAbmV3X210dTogbmV3IHZhbHVlIGZvciBtYXhpbXVtIGZyYW1lIHNpemUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IGF0bDFlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBvbGRfbXR1ICAgPSBuZXRkZXYtPm10dTsKKwlpbnQgbWF4X2ZyYW1lID0gbmV3X210dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBWTEFOX0hMRU47CisKKwlpZiAoKG1heF9mcmFtZSA8IEVUSF9aTEVOICsgRVRIX0ZDU19MRU4pIHx8CisJCQkobWF4X2ZyYW1lID4gTUFYX0pVTUJPX0ZSQU1FX1NJWkUpKSB7CisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJpbnZhbGlkIE1UVSBzZXR0aW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIHNldCBNVFUgKi8KKwlpZiAob2xkX210dSAhPSBuZXdfbXR1ICYmIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0FUX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKSkKKwkJCW1zbGVlcCgxKTsKKwkJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCQlhZGFwdGVyLT5ody5tYXhfZnJhbWVfc2l6ZSA9IG5ld19tdHU7CisJCWFkYXB0ZXItPmh3LnJ4X2p1bWJvX3RoID0gKG1heF9mcmFtZSArIDcpID4+IDM7CisJCWF0bDFlX2Rvd24oYWRhcHRlcik7CisJCWF0bDFlX3VwKGFkYXB0ZXIpOworCQljbGVhcl9iaXQoX19BVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncyk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogIGNhbGxlciBzaG91bGQgaG9sZCBtZGlvX2xvY2sKKyAqLworc3RhdGljIGludCBhdGwxZV9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IHJlZ19udW0pCit7CisJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiByZXN1bHQ7CisKKwlhdGwxZV9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCByZWdfbnVtICYgTURJT19SRUdfQUREUl9NQVNLLCAmcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBhdGwxZV9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsCisJCQkgICAgIGludCByZWdfbnVtLCBpbnQgdmFsKQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWF0bDFlX3dyaXRlX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCByZWdfbnVtICYgTURJT19SRUdfQUREUl9NQVNLLCB2YWwpOworfQorCisvKgorICogYXRsMWVfbWlpX2lvY3RsIC0KKyAqIEBuZXRkZXY6CisgKiBAaWZyZXE6CisgKiBAY21kOgorICovCitzdGF0aWMgaW50IGF0bDFlX21paV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkoaWZyKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWwgPSAwOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm1kaW9fbG9jaywgZmxhZ3MpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR01JSVBIWToKKwkJZGF0YS0+cGh5X2lkID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NHTUlJUkVHOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCXJldHZhbCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChhdGwxZV9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBkYXRhLT5yZWdfbnVtICYgMHgxRiwKKwkJCQkgICAgJmRhdGEtPnZhbF9vdXQpKSB7CisJCQlyZXR2YWwgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNJT0NTTUlJUkVHOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCXJldHZhbCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChkYXRhLT5yZWdfbnVtICYgfigweDFGKSkgeworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiPGF0bDFlX21paV9pb2N0bD4gd3JpdGUgJXggJXgiLAorCQkJCWRhdGEtPnJlZ19udW0sIGRhdGEtPnZhbF9pbik7CisJCWlmIChhdGwxZV93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywKKwkJCQkgICAgIGRhdGEtPnJlZ19udW0sIGRhdGEtPnZhbF9pbikpIHsKKwkJCXJldHZhbCA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bWRpb19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKKworfQorCisvKgorICogYXRsMWVfaW9jdGwgLQorICogQG5ldGRldjoKKyAqIEBpZnJlcToKKyAqIEBjbWQ6CisgKi8KK3N0YXRpYyBpbnQgYXRsMWVfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHTUlJUEhZOgorCWNhc2UgU0lPQ0dNSUlSRUc6CisJY2FzZSBTSU9DU01JSVJFRzoKKwkJcmV0dXJuIGF0bDFlX21paV9pb2N0bChuZXRkZXYsIGlmciwgY21kKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGwxZV9zZXR1cF9wY2ljbWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdTE2IGNtZDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwljbWQgJj0gfihQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUgfCBQQ0lfQ09NTUFORF9JTyk7CisJY21kIHw9ICAoUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsIGNtZCk7CisKKwkvKgorCSAqIHNvbWUgbW90aGVyYm9hcmRzIEJJT1MoUFhFL0VGSSkgZHJpdmVyIG1heSBzZXQgUE1FCisJICogd2hpbGUgdGhleSB0cmFuc2ZlciBjb250cm9sIHRvIE9TIChXaW5kb3dzL0xpbnV4KQorCSAqIHNvIHdlIHNob3VsZCBjbGVhciB0aGlzIGJpdCBiZWZvcmUgTklDIHdvcmsgbm9ybWFsbHkKKwkgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFJFR19QTV9DVFJMU1RBVCwgMCk7CisJbXNsZWVwKDEpOworfQorCisvKgorICogYXRsMWVfYWxsb2NfcXVldWVzIC0gQWxsb2NhdGUgbWVtb3J5IGZvciBhbGwgcmluZ3MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxZV9hbGxvY19xdWV1ZXMoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhdGwxZV9zd19pbml0IC0gSW5pdGlhbGl6ZSBnZW5lcmFsIHNvZnR3YXJlIHN0cnVjdHVyZXMgKHN0cnVjdCBhdGwxZV9hZGFwdGVyKQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBhdGwxZV9zd19pbml0IGluaXRpYWxpemVzIHRoZSBBZGFwdGVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuCisgKiBGaWVsZHMgYXJlIGluaXRpYWxpemVkIGJhc2VkIG9uIFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gYW5kCisgKiBPUyBuZXR3b3JrIGRldmljZSBzZXR0aW5ncyAoTVRVIHNpemUpLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxZV9zd19pbml0KHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxZV9odyAqaHcgICA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgcGNpX2RldgkqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJdTMyIHBoeV9zdGF0dXNfZGF0YSA9IDA7CisKKwlhZGFwdGVyLT53b2wgPSAwOworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBTUEVFRF8wOyAgIC8qIGhhcmR3YXJlIGluaXQgKi8KKwlhZGFwdGVyLT5saW5rX2R1cGxleCA9IEZVTExfRFVQTEVYOworCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSAxOworCisJLyogUENJIGNvbmZpZyBzcGFjZSBpbmZvICovCisJaHctPnZlbmRvcl9pZCA9IHBkZXYtPnZlbmRvcjsKKwlody0+ZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOworCWh3LT5zdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwlody0+c3Vic3lzdGVtX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJmh3LT5yZXZpc2lvbl9pZCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZody0+cGNpX2NtZF93b3JkKTsKKworCXBoeV9zdGF0dXNfZGF0YSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfUEhZX1NUQVRVUyk7CisJLyogbmljIHR5cGUgKi8KKwlpZiAoaHctPnJldmlzaW9uX2lkID49IDB4RjApIHsKKwkJaHctPm5pY190eXBlID0gYXRocl9sMmVfcmV2QjsKKwl9IGVsc2UgeworCQlpZiAocGh5X3N0YXR1c19kYXRhICYgUEhZX1NUQVRVU18xMDBNKQorCQkJaHctPm5pY190eXBlID0gYXRocl9sMWU7CisJCWVsc2UKKwkJCWh3LT5uaWNfdHlwZSA9IGF0aHJfbDJlX3JldkE7CisJfQorCisJcGh5X3N0YXR1c19kYXRhID0gQVRfUkVBRF9SRUcoaHcsIFJFR19QSFlfU1RBVFVTKTsKKworCWlmIChwaHlfc3RhdHVzX2RhdGEgJiBQSFlfU1RBVFVTX0VNSV9DQSkKKwkJaHctPmVtaV9jYSA9IHRydWU7CisJZWxzZQorCQlody0+ZW1pX2NhID0gZmFsc2U7CisKKwlody0+cGh5X2NvbmZpZ3VyZWQgPSBmYWxzZTsKKwlody0+cHJlYW1ibGVfbGVuID0gNzsKKwlody0+bWF4X2ZyYW1lX3NpemUgPSBhZGFwdGVyLT5uZXRkZXYtPm10dTsKKwlody0+cnhfanVtYm9fdGggPSAoaHctPm1heF9mcmFtZV9zaXplICsgRVRIX0hMRU4gKworCQkJCVZMQU5fSExFTiArIEVUSF9GQ1NfTEVOICsgNykgPj4gMzsKKworCWh3LT5ycnNfdHlwZSA9IGF0bDFlX3Jyc19kaXNhYmxlOworCWh3LT5pbmRpcmVjdF90YWIgPSAwOworCWh3LT5iYXNlX2NwdSA9IDA7CisKKwkvKiBuZWVkIGNvbmZpcm0gKi8KKworCWh3LT5pY3QgPSA1MDAwMDsgICAgICAgICAgICAgICAgIC8qIDEwMG1zICovCisJaHctPnNtYl90aW1lciA9IDIwMDAwMDsgICAgICAgICAgLyogMjAwbXMgICovCisJaHctPnRwZF9idXJzdCA9IDU7CisJaHctPnJyZF90aHJlc2ggPSAxOworCWh3LT50cGRfdGhyZXNoID0gYWRhcHRlci0+dHhfcmluZy5jb3VudCAvIDI7CisJaHctPnJ4X2NvdW50X2Rvd24gPSA0OyAgLyogMnVzIHJlc29sdXRpb24gKi8KKwlody0+dHhfY291bnRfZG93biA9IGh3LT5pbXQgKiA0IC8gMzsKKwlody0+ZG1hcl9ibG9jayA9IGF0bDFlX2RtYV9yZXFfMTAyNDsKKwlody0+ZG1hd19ibG9jayA9IGF0bDFlX2RtYV9yZXFfMTAyNDsKKwlody0+ZG1hcl9kbHlfY250ID0gMTU7CisJaHctPmRtYXdfZGx5X2NudCA9IDQ7CisKKwlpZiAoYXRsMWVfYWxsb2NfcXVldWVzKGFkYXB0ZXIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWF0b21pY19zZXQoJmFkYXB0ZXItPmlycV9zZW0sIDEpOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5tZGlvX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9sb2NrKTsKKworCXNldF9iaXQoX19BVF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhdGwxZV9jbGVhbl90eF9yaW5nIC0gRnJlZSBUeC1za2IKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBhdGwxZV9jbGVhbl90eF9yaW5nKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxZV90eF9yaW5nICp0eF9yaW5nID0gKHN0cnVjdCBhdGwxZV90eF9yaW5nICopCisJCQkJJmFkYXB0ZXItPnR4X3Jpbmc7CisJc3RydWN0IGF0bDFlX3R4X2J1ZmZlciAqdHhfYnVmZmVyID0gTlVMTDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJdTE2IGluZGV4LCByaW5nX2NvdW50OworCisJaWYgKHR4X3JpbmctPmRlc2MgPT0gTlVMTCB8fCB0eF9yaW5nLT50eF9idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcmluZ19jb3VudCA9IHR4X3JpbmctPmNvdW50OworCS8qIGZpcnN0IHVubW1hcCBkbWEgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCByaW5nX2NvdW50OyBpbmRleCsrKSB7CisJCXR4X2J1ZmZlciA9ICZ0eF9yaW5nLT50eF9idWZmZXJbaW5kZXhdOworCQlpZiAodHhfYnVmZmVyLT5kbWEpIHsKKwkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIHR4X2J1ZmZlci0+ZG1hLAorCQkJCQl0eF9idWZmZXItPmxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisJCQl0eF9idWZmZXItPmRtYSA9IDA7CisJCX0KKwl9CisJLyogc2Vjb25kIGZyZWUgc2tiICovCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcmluZ19jb3VudDsgaW5kZXgrKykgeworCQl0eF9idWZmZXIgPSAmdHhfcmluZy0+dHhfYnVmZmVyW2luZGV4XTsKKwkJaWYgKHR4X2J1ZmZlci0+c2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueSh0eF9idWZmZXItPnNrYik7CisJCQl0eF9idWZmZXItPnNrYiA9IE5VTEw7CisJCX0KKwl9CisJLyogWmVybyBvdXQgVHgtYnVmZmVycyAqLworCW1lbXNldCh0eF9yaW5nLT5kZXNjLCAwLCBzaXplb2Yoc3RydWN0IGF0bDFlX3RwZF9kZXNjKSAqCisJCQkJcmluZ19jb3VudCk7CisJbWVtc2V0KHR4X3JpbmctPnR4X2J1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBhdGwxZV90eF9idWZmZXIpICoKKwkJCQlyaW5nX2NvdW50KTsKK30KKworLyoKKyAqIGF0bDFlX2NsZWFuX3J4X3JpbmcgLSBGcmVlIHJ4LXJlc2VydmF0aW9uIHNrYnMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBhdGwxZV9jbGVhbl9yeF9yaW5nKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxZV9yeF9yaW5nICpyeF9yaW5nID0KKwkJKHN0cnVjdCBhdGwxZV9yeF9yaW5nICopJmFkYXB0ZXItPnJ4X3Jpbmc7CisJc3RydWN0IGF0bDFlX3J4X3BhZ2VfZGVzYyAqcnhfcGFnZV9kZXNjID0gcnhfcmluZy0+cnhfcGFnZV9kZXNjOworCXUxNiBpLCBqOworCisKKwlpZiAoYWRhcHRlci0+cmluZ192aXJfYWRkciA9PSBOVUxMKQorCQlyZXR1cm47CisJLyogWmVybyBvdXQgdGhlIGRlc2NyaXB0b3IgcmluZyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IEFUX1BBR0VfTlVNX1BFUl9RVUVVRTsgaisrKSB7CisJCQlpZiAocnhfcGFnZV9kZXNjW2ldLnJ4X3BhZ2Vbal0uYWRkciAhPSBOVUxMKSB7CisJCQkJbWVtc2V0KHJ4X3BhZ2VfZGVzY1tpXS5yeF9wYWdlW2pdLmFkZHIsIDAsCisJCQkJCQlyeF9yaW5nLT5yZWFsX3BhZ2Vfc2l6ZSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFlX2NhbF9yaW5nX3NpemUoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcmluZ19zaXplKQoreworCSpyaW5nX3NpemUgPSAoKHUzMikoYWRhcHRlci0+dHhfcmluZy5jb3VudCAqCisJCSAgICAgc2l6ZW9mKHN0cnVjdCBhdGwxZV90cGRfZGVzYykgKyA3CisJCQkvKiB0eCByaW5nLCBxd29yZCBhbGlnbiAqLworCQkgICAgICsgYWRhcHRlci0+cnhfcmluZy5yZWFsX3BhZ2Vfc2l6ZSAqIEFUX1BBR0VfTlVNX1BFUl9RVUVVRSAqCisJCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzICsgMzEKKwkJCS8qIHJ4IHJpbmcsICAzMiBieXRlcyBhbGlnbiAqLworCQkgICAgICsgKDEgKyBBVF9QQUdFX05VTV9QRVJfUVVFVUUgKiBhZGFwdGVyLT5udW1fcnhfcXVldWVzKSAqCisJCQlzaXplb2YodTMyKSArIDMpKTsKKwkJCS8qIHR4LCByeCBjbWQsIGR3b3JkIGFsaWduICAgKi8KK30KKworc3RhdGljIHZvaWQgYXRsMWVfaW5pdF9yaW5nX3Jlc291cmNlcyhzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMWVfdHhfcmluZyAqdHhfcmluZyA9IE5VTEw7CisJc3RydWN0IGF0bDFlX3J4X3JpbmcgKnJ4X3JpbmcgPSBOVUxMOworCisJdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nOworCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZzsKKworCXJ4X3JpbmctPnJlYWxfcGFnZV9zaXplID0gYWRhcHRlci0+cnhfcmluZy5wYWdlX3NpemUKKwkJCQkgKyBhZGFwdGVyLT5ody5tYXhfZnJhbWVfc2l6ZQorCQkJCSArIEVUSF9ITEVOICsgVkxBTl9ITEVOCisJCQkJICsgRVRIX0ZDU19MRU47CisJcnhfcmluZy0+cmVhbF9wYWdlX3NpemUgPSByb3VuZHVwKHJ4X3JpbmctPnJlYWxfcGFnZV9zaXplLCAzMik7CisJYXRsMWVfY2FsX3Jpbmdfc2l6ZShhZGFwdGVyLCAmYWRhcHRlci0+cmluZ19zaXplKTsKKworCWFkYXB0ZXItPnJpbmdfdmlyX2FkZHIgPSBOVUxMOworCWFkYXB0ZXItPnJ4X3JpbmcuZGVzYyA9IE5VTEw7CisJcndsb2NrX2luaXQoJmFkYXB0ZXItPnR4X3JpbmcudHhfbG9jayk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBSZWFkIC8gV3JpdGUgUHRyIEluaXRpYWxpemU6CisgKi8KK3N0YXRpYyB2b2lkIGF0bDFlX2luaXRfcmluZ19wdHJzKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxZV90eF9yaW5nICp0eF9yaW5nID0gTlVMTDsKKwlzdHJ1Y3QgYXRsMWVfcnhfcmluZyAqcnhfcmluZyA9IE5VTEw7CisJc3RydWN0IGF0bDFlX3J4X3BhZ2VfZGVzYyAqcnhfcGFnZV9kZXNjID0gTlVMTDsKKwlpbnQgaSwgajsKKworCXR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZzsKKwlyeF9yaW5nID0gJmFkYXB0ZXItPnJ4X3Jpbmc7CisJcnhfcGFnZV9kZXNjID0gcnhfcmluZy0+cnhfcGFnZV9kZXNjOworCisJdHhfcmluZy0+bmV4dF90b191c2UgPSAwOworCWF0b21pY19zZXQoJnR4X3JpbmctPm5leHRfdG9fY2xlYW4sIDApOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlyeF9wYWdlX2Rlc2NbaV0ucnhfdXNpbmcgID0gMDsKKwkJcnhfcGFnZV9kZXNjW2ldLnJ4X254c2VxID0gMDsKKwkJZm9yIChqID0gMDsgaiA8IEFUX1BBR0VfTlVNX1BFUl9RVUVVRTsgaisrKSB7CisJCQkqcnhfcGFnZV9kZXNjW2ldLnJ4X3BhZ2Vbal0ud3JpdGVfb2Zmc2V0X2FkZHIgPSAwOworCQkJcnhfcGFnZV9kZXNjW2ldLnJ4X3BhZ2Vbal0ucmVhZF9vZmZzZXQgPSAwOworCQl9CisJfQorfQorCisvKgorICogYXRsMWVfZnJlZV9yaW5nX3Jlc291cmNlcyAtIEZyZWUgVHggLyBSWCBkZXNjcmlwdG9yIFJlc291cmNlcworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogRnJlZSBhbGwgdHJhbnNtaXQgc29mdHdhcmUgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyB2b2lkIGF0bDFlX2ZyZWVfcmluZ19yZXNvdXJjZXMoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJYXRsMWVfY2xlYW5fdHhfcmluZyhhZGFwdGVyKTsKKwlhdGwxZV9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIpOworCisJaWYgKGFkYXB0ZXItPnJpbmdfdmlyX2FkZHIpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBhZGFwdGVyLT5yaW5nX3NpemUsCisJCQkJYWRhcHRlci0+cmluZ192aXJfYWRkciwgYWRhcHRlci0+cmluZ19kbWEpOworCQlhZGFwdGVyLT5yaW5nX3Zpcl9hZGRyID0gTlVMTDsKKwl9CisKKwlpZiAoYWRhcHRlci0+dHhfcmluZy50eF9idWZmZXIpIHsKKwkJa2ZyZWUoYWRhcHRlci0+dHhfcmluZy50eF9idWZmZXIpOworCQlhZGFwdGVyLT50eF9yaW5nLnR4X2J1ZmZlciA9IE5VTEw7CisJfQorfQorCisvKgorICogYXRsMWVfc2V0dXBfbWVtX3Jlc291cmNlcyAtIGFsbG9jYXRlIFR4IC8gUlggZGVzY3JpcHRvciByZXNvdXJjZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBhdGwxZV9zZXR1cF9yaW5nX3Jlc291cmNlcyhzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IGF0bDFlX3R4X3JpbmcgKnR4X3Jpbmc7CisJc3RydWN0IGF0bDFlX3J4X3JpbmcgKnJ4X3Jpbmc7CisJc3RydWN0IGF0bDFlX3J4X3BhZ2VfZGVzYyAgKnJ4X3BhZ2VfZGVzYzsKKwlpbnQgc2l6ZSwgaSwgajsKKwl1MzIgb2Zmc2V0ID0gMDsKKwlpbnQgZXJyID0gMDsKKworCWlmIChhZGFwdGVyLT5yaW5nX3Zpcl9hZGRyICE9IE5VTEwpCisJCXJldHVybiAwOyAvKiBhbGxvY2VkIGFscmVhZHkgKi8KKworCXR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZzsKKwlyeF9yaW5nID0gJmFkYXB0ZXItPnJ4X3Jpbmc7CisKKwkvKiByZWFsIHJpbmcgRE1BIGJ1ZmZlciAqLworCisJc2l6ZSA9IGFkYXB0ZXItPnJpbmdfc2l6ZTsKKwlhZGFwdGVyLT5yaW5nX3Zpcl9hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwKKwkJCWFkYXB0ZXItPnJpbmdfc2l6ZSwgJmFkYXB0ZXItPnJpbmdfZG1hKTsKKworCWlmIChhZGFwdGVyLT5yaW5nX3Zpcl9hZGRyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX2FsbG9jX2NvbnNpc3RlbnQgZmFpbGVkLCAiCisJCQkJICAgICJzaXplID0gRCVkIiwgc2l6ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChhZGFwdGVyLT5yaW5nX3Zpcl9hZGRyLCAwLCBhZGFwdGVyLT5yaW5nX3NpemUpOworCisJcnhfcGFnZV9kZXNjID0gcnhfcmluZy0+cnhfcGFnZV9kZXNjOworCisJLyogSW5pdCBUUEQgUmluZyAqLworCXR4X3JpbmctPmRtYSA9IHJvdW5kdXAoYWRhcHRlci0+cmluZ19kbWEsIDgpOworCW9mZnNldCA9IHR4X3JpbmctPmRtYSAtIGFkYXB0ZXItPnJpbmdfZG1hOworCXR4X3JpbmctPmRlc2MgPSAoc3RydWN0IGF0bDFlX3RwZF9kZXNjICopCisJCQkoYWRhcHRlci0+cmluZ192aXJfYWRkciArIG9mZnNldCk7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRsMWVfdHhfYnVmZmVyKSAqICh0eF9yaW5nLT5jb3VudCk7CisJdHhfcmluZy0+dHhfYnVmZmVyID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAodHhfcmluZy0+dHhfYnVmZmVyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAia3phbGxvYyBmYWlsZWQgLCBzaXplID0gRCVkIiwgc2l6ZSk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIEluaXQgUlhGLVBhZ2VzICovCisJb2Zmc2V0ICs9IChzaXplb2Yoc3RydWN0IGF0bDFlX3RwZF9kZXNjKSAqIHR4X3JpbmctPmNvdW50KTsKKwlvZmZzZXQgPSByb3VuZHVwKG9mZnNldCwgMzIpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgQVRfUEFHRV9OVU1fUEVSX1FVRVVFOyBqKyspIHsKKwkJCXJ4X3BhZ2VfZGVzY1tpXS5yeF9wYWdlW2pdLmRtYSA9CisJCQkJYWRhcHRlci0+cmluZ19kbWEgKyBvZmZzZXQ7CisJCQlyeF9wYWdlX2Rlc2NbaV0ucnhfcGFnZVtqXS5hZGRyID0KKwkJCQlhZGFwdGVyLT5yaW5nX3Zpcl9hZGRyICsgb2Zmc2V0OworCQkJb2Zmc2V0ICs9IHJ4X3JpbmctPnJlYWxfcGFnZV9zaXplOworCQl9CisJfQorCisJLyogSW5pdCBDTUIgZG1hIGFkZHJlc3MgKi8KKwl0eF9yaW5nLT5jbWJfZG1hID0gYWRhcHRlci0+cmluZ19kbWEgKyBvZmZzZXQ7CisJdHhfcmluZy0+Y21iICAgICA9ICh1MzIgKikoYWRhcHRlci0+cmluZ192aXJfYWRkciArIG9mZnNldCk7CisJb2Zmc2V0ICs9IHNpemVvZih1MzIpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgQVRfUEFHRV9OVU1fUEVSX1FVRVVFOyBqKyspIHsKKwkJCXJ4X3BhZ2VfZGVzY1tpXS5yeF9wYWdlW2pdLndyaXRlX29mZnNldF9kbWEgPQorCQkJCWFkYXB0ZXItPnJpbmdfZG1hICsgb2Zmc2V0OworCQkJcnhfcGFnZV9kZXNjW2ldLnJ4X3BhZ2Vbal0ud3JpdGVfb2Zmc2V0X2FkZHIgPQorCQkJCWFkYXB0ZXItPnJpbmdfdmlyX2FkZHIgKyBvZmZzZXQ7CisJCQlvZmZzZXQgKz0gc2l6ZW9mKHUzMik7CisJCX0KKwl9CisKKwlpZiAodW5saWtlbHkob2Zmc2V0ID4gYWRhcHRlci0+cmluZ19zaXplKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJvZmZzZXQoJWQpID4gcmluZyBzaXplKCVkKSAhIVxuIiwKKwkJCQlvZmZzZXQsIGFkYXB0ZXItPnJpbmdfc2l6ZSk7CisJCWVyciA9IC0xOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlyZXR1cm4gMDsKK2ZhaWxlZDoKKwlpZiAoYWRhcHRlci0+cmluZ192aXJfYWRkciAhPSBOVUxMKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgYWRhcHRlci0+cmluZ19zaXplLAorCQkJCWFkYXB0ZXItPnJpbmdfdmlyX2FkZHIsIGFkYXB0ZXItPnJpbmdfZG1hKTsKKwkJYWRhcHRlci0+cmluZ192aXJfYWRkciA9IE5VTEw7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGwxZV9jb25maWd1cmVfZGVzX3JpbmcoY29uc3Qgc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisKKwlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gKHN0cnVjdCBhdGwxZV9odyAqKSZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgYXRsMWVfcnhfcmluZyAqcnhfcmluZyA9CisJCQkoc3RydWN0IGF0bDFlX3J4X3JpbmcgKikmYWRhcHRlci0+cnhfcmluZzsKKwlzdHJ1Y3QgYXRsMWVfdHhfcmluZyAqdHhfcmluZyA9CisJCQkoc3RydWN0IGF0bDFlX3R4X3JpbmcgKikmYWRhcHRlci0+dHhfcmluZzsKKwlzdHJ1Y3QgYXRsMWVfcnhfcGFnZV9kZXNjICpyeF9wYWdlX2Rlc2MgPSBOVUxMOworCWludCBpLCBqOworCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfREVTQ19CQVNFX0FERFJfSEksCisJCQkodTMyKSgoYWRhcHRlci0+cmluZ19kbWEgJiBBVF9ETUFfSElfQUREUl9NQVNLKSA+PiAzMikpOworCUFUX1dSSVRFX1JFRyhodywgUkVHX1RQRF9CQVNFX0FERFJfTE8sCisJCQkodTMyKSgodHhfcmluZy0+ZG1hKSAmIEFUX0RNQV9MT19BRERSX01BU0spKTsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19UUERfUklOR19TSVpFLCAodTE2KSh0eF9yaW5nLT5jb3VudCkpOworCUFUX1dSSVRFX1JFRyhodywgUkVHX0hPU1RfVFhfQ01CX0xPLAorCQkJKHUzMikoKHR4X3JpbmctPmNtYl9kbWEpICYgQVRfRE1BX0xPX0FERFJfTUFTSykpOworCisJcnhfcGFnZV9kZXNjID0gcnhfcmluZy0+cnhfcGFnZV9kZXNjOworCS8qIFJYRiBQYWdlIFBoeXNpY2FsIGFkZHJlc3MgLyBQYWdlIExlbmd0aCAqLworCWZvciAoaSA9IDA7IGkgPCBBVF9NQVhfUkVDRUlWRV9RVUVVRTsgaSsrKSB7CisJCUFUX1dSSVRFX1JFRyhodywgYXRsMWVfcnhfcGFnZV9oaV9hZGRyX3JlZ3NbaV0sCisJCQkJICh1MzIpKChhZGFwdGVyLT5yaW5nX2RtYSAmCisJCQkJIEFUX0RNQV9ISV9BRERSX01BU0spID4+IDMyKSk7CisJCWZvciAoaiA9IDA7IGogPCBBVF9QQUdFX05VTV9QRVJfUVVFVUU7IGorKykgeworCQkJdTMyIHBhZ2VfcGh5X2FkZHI7CisJCQl1MzIgb2Zmc2V0X3BoeV9hZGRyOworCisJCQlwYWdlX3BoeV9hZGRyID0gcnhfcGFnZV9kZXNjW2ldLnJ4X3BhZ2Vbal0uZG1hOworCQkJb2Zmc2V0X3BoeV9hZGRyID0KKwkJCQkgICByeF9wYWdlX2Rlc2NbaV0ucnhfcGFnZVtqXS53cml0ZV9vZmZzZXRfZG1hOworCisJCQlBVF9XUklURV9SRUcoaHcsIGF0bDFlX3J4X3BhZ2VfbG9fYWRkcl9yZWdzW2ldW2pdLAorCQkJCQlwYWdlX3BoeV9hZGRyICYgQVRfRE1BX0xPX0FERFJfTUFTSyk7CisJCQlBVF9XUklURV9SRUcoaHcsIGF0bDFlX3J4X3BhZ2Vfd3JpdGVfb2Zmc2V0X3JlZ3NbaV1bal0sCisJCQkJCW9mZnNldF9waHlfYWRkciAmIEFUX0RNQV9MT19BRERSX01BU0spOworCQkJQVRfV1JJVEVfUkVHQihodywgYXRsMWVfcnhfcGFnZV92bGRfcmVnc1tpXVtqXSwgMSk7CisJCX0KKwl9CisJLyogUGFnZSBMZW5ndGggKi8KKwlBVF9XUklURV9SRUcoaHcsIFJFR19IT1NUX1JYRlBBR0VfU0laRSwgcnhfcmluZy0+cGFnZV9zaXplKTsKKwkvKiBMb2FkIGFsbCBvZiBiYXNlIGFkZHJlc3MgYWJvdmUgKi8KKwlBVF9XUklURV9SRUcoaHcsIFJFR19MT0FEX1BUUiwgMSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGwxZV9jb25maWd1cmVfdHgoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFlX2h3ICpodyA9IChzdHJ1Y3QgYXRsMWVfaHcgKikmYWRhcHRlci0+aHc7CisJdTMyIGRldl9jdHJsX2RhdGEgPSAwOworCXUzMiBtYXhfcGF5X2xvYWQgPSAwOworCXUzMiBqdW1ib190aHJlc2ggPSAwOworCXUzMiBleHRyYV9zaXplID0gMDsgICAgIC8qIEp1bWJvIGZyYW1lIHRocmVzaG9sZCBpbiBRV09SRCB1bml0ICovCisKKwkvKiBjb25maWd1cmUgVFhRIHBhcmFtICovCisJaWYgKGh3LT5uaWNfdHlwZSAhPSBhdGhyX2wyZV9yZXZCKSB7CisJCWV4dHJhX3NpemUgPSBFVEhfSExFTiArIFZMQU5fSExFTiArIEVUSF9GQ1NfTEVOOworCQlpZiAoaHctPm1heF9mcmFtZV9zaXplIDw9IDE1MDApIHsKKwkJCWp1bWJvX3RocmVzaCA9IGh3LT5tYXhfZnJhbWVfc2l6ZSArIGV4dHJhX3NpemU7CisJCX0gZWxzZSBpZiAoaHctPm1heF9mcmFtZV9zaXplIDwgNioxMDI0KSB7CisJCQlqdW1ib190aHJlc2ggPQorCQkJCShody0+bWF4X2ZyYW1lX3NpemUgKyBleHRyYV9zaXplKSAqIDIgLyAzOworCQl9IGVsc2UgeworCQkJanVtYm9fdGhyZXNoID0gKGh3LT5tYXhfZnJhbWVfc2l6ZSArIGV4dHJhX3NpemUpIC8gMjsKKwkJfQorCQlBVF9XUklURV9SRUcoaHcsIFJFR19UWF9FQVJMWV9USCwgKGp1bWJvX3RocmVzaCArIDcpID4+IDMpOworCX0KKworCWRldl9jdHJsX2RhdGEgPSBBVF9SRUFEX1JFRyhodywgUkVHX0RFVklDRV9DVFJMKTsKKworCW1heF9wYXlfbG9hZCAgPSAoKGRldl9jdHJsX2RhdGEgPj4gREVWSUNFX0NUUkxfTUFYX1BBWUxPQURfU0hJRlQpKSAmCisJCQlERVZJQ0VfQ1RSTF9NQVhfUEFZTE9BRF9NQVNLOworCisJaHctPmRtYXdfYmxvY2sgPSBtaW4obWF4X3BheV9sb2FkLCBody0+ZG1hd19ibG9jayk7CisKKwltYXhfcGF5X2xvYWQgID0gKChkZXZfY3RybF9kYXRhID4+IERFVklDRV9DVFJMX01BWF9SUkVRX1NaX1NISUZUKSkgJgorCQkJREVWSUNFX0NUUkxfTUFYX1JSRVFfU1pfTUFTSzsKKwlody0+ZG1hcl9ibG9jayA9IG1pbihtYXhfcGF5X2xvYWQsIGh3LT5kbWFyX2Jsb2NrKTsKKworCWlmIChody0+bmljX3R5cGUgIT0gYXRocl9sMmVfcmV2QikKKwkJQVRfV1JJVEVfUkVHVyhodywgUkVHX1RYUV9DVFJMICsgMiwKKwkJCSAgICAgIGF0bDFlX3BheV9sb2FkX3NpemVbaHctPmRtYXJfYmxvY2tdKTsKKwkvKiBlbmFibGUgVFhRICovCisJQVRfV1JJVEVfUkVHVyhodywgUkVHX1RYUV9DVFJMLAorCQkJKCgodTE2KWh3LT50cGRfYnVyc3QgJiBUWFFfQ1RSTF9OVU1fVFBEX0JVUlNUX01BU0spCisJCQkgPDwgVFhRX0NUUkxfTlVNX1RQRF9CVVJTVF9TSElGVCkKKwkJCXwgVFhRX0NUUkxfRU5IX01PREUgfCBUWFFfQ1RSTF9FTik7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRsMWVfY29uZmlndXJlX3J4KHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxZV9odyAqaHcgPSAoc3RydWN0IGF0bDFlX2h3ICopJmFkYXB0ZXItPmh3OworCXUzMiByeGZfbGVuICA9IDA7CisJdTMyIHJ4Zl9sb3cgID0gMDsKKwl1MzIgcnhmX2hpZ2ggPSAwOworCXUzMiByeGZfdGhyZXNoX2RhdGEgPSAwOworCXUzMiByeHFfY3RybF9kYXRhID0gMDsKKworCWlmIChody0+bmljX3R5cGUgIT0gYXRocl9sMmVfcmV2QikgeworCQlBVF9XUklURV9SRUdXKGh3LCBSRUdfUlhRX0pNQk9TWl9SUkRUSU0sCisJCQkgICAgICAodTE2KSgoaHctPnJ4X2p1bWJvX3RoICYgUlhRX0pNQk9TWl9USF9NQVNLKSA8PAorCQkJICAgICAgUlhRX0pNQk9TWl9USF9TSElGVCB8CisJCQkgICAgICAoMSAmIFJYUV9KTUJPX0xLQUhfTUFTSykgPDwKKwkJCSAgICAgIFJYUV9KTUJPX0xLQUhfU0hJRlQpKTsKKworCQlyeGZfbGVuICA9IEFUX1JFQURfUkVHKGh3LCBSRUdfU1JBTV9SWEZfTEVOKTsKKwkJcnhmX2hpZ2ggPSByeGZfbGVuICogNCAvIDU7CisJCXJ4Zl9sb3cgID0gcnhmX2xlbiAvIDU7CisJCXJ4Zl90aHJlc2hfZGF0YSA9ICgocnhmX2hpZ2ggICYgUlhRX1JYRl9QQVVTRV9USF9ISV9NQVNLKQorCQkJCSAgPDwgUlhRX1JYRl9QQVVTRV9USF9ISV9TSElGVCkgfAorCQkJCSAgKChyeGZfbG93ICYgUlhRX1JYRl9QQVVTRV9USF9MT19NQVNLKQorCQkJCSAgPDwgUlhRX1JYRl9QQVVTRV9USF9MT19TSElGVCk7CisKKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUlhRX1JYRl9QQVVTRV9USFJFU0gsIHJ4Zl90aHJlc2hfZGF0YSk7CisJfQorCisJLyogUlJTICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSURUX1RBQkxFLCBody0+aW5kaXJlY3RfdGFiKTsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19CQVNFX0NQVV9OVU1CRVIsIGh3LT5iYXNlX2NwdSk7CisKKwlpZiAoaHctPnJyc190eXBlICYgYXRsMWVfcnJzX2lwdjQpCisJCXJ4cV9jdHJsX2RhdGEgfD0gUlhRX0NUUkxfSEFTSF9UWVBFX0lQVjQ7CisKKwlpZiAoaHctPnJyc190eXBlICYgYXRsMWVfcnJzX2lwdjRfdGNwKQorCQlyeHFfY3RybF9kYXRhIHw9IFJYUV9DVFJMX0hBU0hfVFlQRV9JUFY0X1RDUDsKKworCWlmIChody0+cnJzX3R5cGUgJiBhdGwxZV9ycnNfaXB2NikKKwkJcnhxX2N0cmxfZGF0YSB8PSBSWFFfQ1RSTF9IQVNIX1RZUEVfSVBWNjsKKworCWlmIChody0+cnJzX3R5cGUgJiBhdGwxZV9ycnNfaXB2Nl90Y3ApCisJCXJ4cV9jdHJsX2RhdGEgfD0gUlhRX0NUUkxfSEFTSF9UWVBFX0lQVjZfVENQOworCisJaWYgKGh3LT5ycnNfdHlwZSAhPSBhdGwxZV9ycnNfZGlzYWJsZSkKKwkJcnhxX2N0cmxfZGF0YSB8PQorCQkJKFJYUV9DVFJMX0hBU0hfRU5BQkxFIHwgUlhRX0NUUkxfUlNTX01PREVfTVFVRVNJTlQpOworCisJcnhxX2N0cmxfZGF0YSB8PSBSWFFfQ1RSTF9JUFY2X1hTVU1fVkVSSUZZX0VOIHwgUlhRX0NUUkxfUEJBX0FMSUdOXzMyIHwKKwkJCSBSWFFfQ1RSTF9DVVRfVEhSVV9FTiB8IFJYUV9DVFJMX0VOOworCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfUlhRX0NUUkwsIHJ4cV9jdHJsX2RhdGEpOworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0bDFlX2NvbmZpZ3VyZV9kbWEoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgZG1hX2N0cmxfZGF0YSA9IDA7CisKKwlkbWFfY3RybF9kYXRhID0gRE1BX0NUUkxfUlhDTUJfRU47CisJZG1hX2N0cmxfZGF0YSB8PSAoKCh1MzIpaHctPmRtYXJfYmxvY2spICYgRE1BX0NUUkxfRE1BUl9CVVJTVF9MRU5fTUFTSykKKwkJPDwgRE1BX0NUUkxfRE1BUl9CVVJTVF9MRU5fU0hJRlQ7CisJZG1hX2N0cmxfZGF0YSB8PSAoKCh1MzIpaHctPmRtYXdfYmxvY2spICYgRE1BX0NUUkxfRE1BV19CVVJTVF9MRU5fTUFTSykKKwkJPDwgRE1BX0NUUkxfRE1BV19CVVJTVF9MRU5fU0hJRlQ7CisJZG1hX2N0cmxfZGF0YSB8PSBETUFfQ1RSTF9ETUFSX1JFUV9QUkkgfCBETUFfQ1RSTF9ETUFSX09VVF9PUkRFUjsKKwlkbWFfY3RybF9kYXRhIHw9ICgoKHUzMilody0+ZG1hcl9kbHlfY250KSAmIERNQV9DVFJMX0RNQVJfRExZX0NOVF9NQVNLKQorCQk8PCBETUFfQ1RSTF9ETUFSX0RMWV9DTlRfU0hJRlQ7CisJZG1hX2N0cmxfZGF0YSB8PSAoKCh1MzIpaHctPmRtYXdfZGx5X2NudCkgJiBETUFfQ1RSTF9ETUFXX0RMWV9DTlRfTUFTSykKKwkJPDwgRE1BX0NUUkxfRE1BV19ETFlfQ05UX1NISUZUOworCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfRE1BX0NUUkwsIGRtYV9jdHJsX2RhdGEpOworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0bDFlX3NldHVwX21hY19jdHJsKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwkvKiBDb25maWcgTUFDIENUUkwgUmVnaXN0ZXIgKi8KKwl2YWx1ZSA9IE1BQ19DVFJMX1RYX0VOIHwKKwkJTUFDX0NUUkxfUlhfRU4gOworCisJaWYgKEZVTExfRFVQTEVYID09IGFkYXB0ZXItPmxpbmtfZHVwbGV4KQorCQl2YWx1ZSB8PSBNQUNfQ1RSTF9EVVBMWDsKKworCXZhbHVlIHw9ICgodTMyKSgoU1BFRURfMTAwMCA9PSBhZGFwdGVyLT5saW5rX3NwZWVkKSA/CisJCQkgIE1BQ19DVFJMX1NQRUVEXzEwMDAgOiBNQUNfQ1RSTF9TUEVFRF8xMF8xMDApIDw8CisJCQkgIE1BQ19DVFJMX1NQRUVEX1NISUZUKTsKKwl2YWx1ZSB8PSAoTUFDX0NUUkxfVFhfRkxPVyB8IE1BQ19DVFJMX1JYX0ZMT1cpOworCisJdmFsdWUgfD0gKE1BQ19DVFJMX0FERF9DUkMgfCBNQUNfQ1RSTF9QQUQpOworCXZhbHVlIHw9ICgoKHUzMilhZGFwdGVyLT5ody5wcmVhbWJsZV9sZW4gJgorCQkgIE1BQ19DVFJMX1BSTUxFTl9NQVNLKSA8PCBNQUNfQ1RSTF9QUk1MRU5fU0hJRlQpOworCisJaWYgKGFkYXB0ZXItPnZsZ3JwKQorCQl2YWx1ZSB8PSBNQUNfQ1RSTF9STVZfVkxBTjsKKworCXZhbHVlIHw9IE1BQ19DVFJMX0JDX0VOOworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCXZhbHVlIHw9IE1BQ19DVFJMX1BST01JU19FTjsKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKKwkJdmFsdWUgfD0gTUFDX0NUUkxfTUNfQUxMX0VOOworCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIHZhbHVlKTsKK30KKworLyoKKyAqIGF0bDFlX2NvbmZpZ3VyZSAtIENvbmZpZ3VyZSBUcmFuc21pdCZSZWNlaXZlIFVuaXQgYWZ0ZXIgUmVzZXQKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSB0aGUgVHggL1J4IHVuaXQgb2YgdGhlIE1BQyBhZnRlciBhIHJlc2V0LgorICovCitzdGF0aWMgaW50IGF0bDFlX2NvbmZpZ3VyZShzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCXUzMiBpbnRyX3N0YXR1c19kYXRhID0gMDsKKworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KKwlBVF9XUklURV9SRUcoaHcsIFJFR19JU1IsIH4wKTsKKworCS8qIDEuIHNldCBNQUMgQWRkcmVzcyAqLworCWF0bDFlX2h3X3NldF9tYWNfYWRkcihodyk7CisKKwkvKiAyLiBJbml0IHRoZSBNdWx0aWNhc3QgSEFTSCB0YWJsZSBkb25lIGJ5IHNldF9tdXRpICovCisKKwkvKiAzLiBDbGVhciBhbnkgV09MIHN0YXR1cyAqLworCUFUX1dSSVRFX1JFRyhodywgUkVHX1dPTF9DVFJMLCAwKTsKKworCS8qIDQuIERlc2NyaXB0ZXIgUmluZyBCYXNlTWVtL0xlbmd0aC9SZWFkIHB0ci9Xcml0ZSBwdHIKKwkgKiAgICBUUEQgUmluZy9TTUIvUlhGMCBQYWdlIENNQnMsIHRoZXkgdXNlIHRoZSBzYW1lCisJICogICAgSGlnaCAzMmJpdHMgbWVtb3J5ICovCisJYXRsMWVfY29uZmlndXJlX2Rlc19yaW5nKGFkYXB0ZXIpOworCisJLyogNS4gc2V0IEludGVycnVwdCBNb2RlcmF0b3IgVGltZXIgKi8KKwlBVF9XUklURV9SRUdXKGh3LCBSRUdfSVJRX01PRFVfVElNRVJfSU5JVCwgaHctPmltdCk7CisJQVRfV1JJVEVfUkVHVyhodywgUkVHX0lSUV9NT0RVX1RJTUVSMl9JTklULCBody0+aW10KTsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19NQVNURVJfQ1RSTCwgTUFTVEVSX0NUUkxfTEVEX01PREUgfAorCQkJTUFTVEVSX0NUUkxfSVRJTUVSX0VOIHwgTUFTVEVSX0NUUkxfSVRJTUVSMl9FTik7CisKKwkvKiA2LiByeC90eCB0aHJlc2hvbGQgdG8gdHJpZyBpbnRlcnJ1cHQgKi8KKwlBVF9XUklURV9SRUdXKGh3LCBSRUdfVFJJR19SUkRfVEhSRVNILCBody0+cnJkX3RocmVzaCk7CisJQVRfV1JJVEVfUkVHVyhodywgUkVHX1RSSUdfVFBEX1RIUkVTSCwgaHctPnRwZF90aHJlc2gpOworCUFUX1dSSVRFX1JFR1coaHcsIFJFR19UUklHX1JYVElNRVIsIGh3LT5yeF9jb3VudF9kb3duKTsKKwlBVF9XUklURV9SRUdXKGh3LCBSRUdfVFJJR19UWFRJTUVSLCBody0+dHhfY291bnRfZG93bik7CisKKwkvKiA3LiBzZXQgSW50ZXJydXB0IENsZWFyIFRpbWVyICovCisJQVRfV1JJVEVfUkVHVyhodywgUkVHX0NNQkRJU0RNQV9USU1FUiwgaHctPmljdCk7CisKKwkvKiA4LiBzZXQgTVRVICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTVRVLCBody0+bWF4X2ZyYW1lX3NpemUgKyBFVEhfSExFTiArCisJCQlWTEFOX0hMRU4gKyBFVEhfRkNTX0xFTik7CisKKwkvKiA5LiBjb25maWcgVFhRIGVhcmx5IHR4IHRocmVzaG9sZCAqLworCWF0bDFlX2NvbmZpZ3VyZV90eChhZGFwdGVyKTsKKworCS8qIDEwLiBjb25maWcgUlhRICovCisJYXRsMWVfY29uZmlndXJlX3J4KGFkYXB0ZXIpOworCisJLyogMTEuIGNvbmZpZyAgRE1BIEVuZ2luZSAqLworCWF0bDFlX2NvbmZpZ3VyZV9kbWEoYWRhcHRlcik7CisKKwkvKiAxMi4gc21iIHRpbWVyIHRvIHRyaWcgaW50ZXJydXB0ICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfU01CX1NUQVRfVElNRVIsIGh3LT5zbWJfdGltZXIpOworCisJaW50cl9zdGF0dXNfZGF0YSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfSVNSKTsKKwlpZiAodW5saWtlbHkoKGludHJfc3RhdHVzX2RhdGEgJiBJU1JfUEhZX0xJTktET1dOKSAhPSAwKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhdGwxZV9jb25maWd1cmUgZmFpbGVkLCIKKwkJCQkiUENJRSBwaHkgbGluayBkb3duXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCUFUX1dSSVRFX1JFRyhodywgUkVHX0lTUiwgMHg3ZmZmZmZmZik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhdGwxZV9nZXRfc3RhdHMgLSBHZXQgU3lzdGVtIE5ldHdvcmsgU3RhdGlzdGljcworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBzdGF0aXN0aWNzIHN0cnVjdHVyZS4KKyAqIFRoZSBzdGF0aXN0aWNzIGFyZSBhY3R1YWxseSB1cGRhdGVkIGZyb20gdGhlIHRpbWVyIGNhbGxiYWNrLgorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF0bDFlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfaHdfc3RhdHMgICpod19zdGF0cyA9ICZhZGFwdGVyLT5od19zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0X3N0YXRzID0gJmFkYXB0ZXItPm5ldF9zdGF0czsKKworCW5ldF9zdGF0cy0+cnhfcGFja2V0cyA9IGh3X3N0YXRzLT5yeF9vazsKKwluZXRfc3RhdHMtPnR4X3BhY2tldHMgPSBod19zdGF0cy0+dHhfb2s7CisJbmV0X3N0YXRzLT5yeF9ieXRlcyAgID0gaHdfc3RhdHMtPnJ4X2J5dGVfY250OworCW5ldF9zdGF0cy0+dHhfYnl0ZXMgICA9IGh3X3N0YXRzLT50eF9ieXRlX2NudDsKKwluZXRfc3RhdHMtPm11bHRpY2FzdCAgPSBod19zdGF0cy0+cnhfbWNhc3Q7CisJbmV0X3N0YXRzLT5jb2xsaXNpb25zID0gaHdfc3RhdHMtPnR4XzFfY29sICsKKwkJCQlod19zdGF0cy0+dHhfMl9jb2wgKiAyICsKKwkJCQlod19zdGF0cy0+dHhfbGF0ZV9jb2wgKyBod19zdGF0cy0+dHhfYWJvcnRfY29sOworCisJbmV0X3N0YXRzLT5yeF9lcnJvcnMgID0gaHdfc3RhdHMtPnJ4X2ZyYWcgKyBod19zdGF0cy0+cnhfZmNzX2VyciArCisJCQkJaHdfc3RhdHMtPnJ4X2xlbl9lcnIgKyBod19zdGF0cy0+cnhfc3pfb3YgKworCQkJCWh3X3N0YXRzLT5yeF9ycmRfb3YgKyBod19zdGF0cy0+cnhfYWxpZ25fZXJyOworCW5ldF9zdGF0cy0+cnhfZmlmb19lcnJvcnMgICA9IGh3X3N0YXRzLT5yeF9yeGZfb3Y7CisJbmV0X3N0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0gaHdfc3RhdHMtPnJ4X2xlbl9lcnI7CisJbmV0X3N0YXRzLT5yeF9jcmNfZXJyb3JzICAgID0gaHdfc3RhdHMtPnJ4X2Zjc19lcnI7CisJbmV0X3N0YXRzLT5yeF9mcmFtZV9lcnJvcnMgID0gaHdfc3RhdHMtPnJ4X2FsaWduX2VycjsKKwluZXRfc3RhdHMtPnJ4X292ZXJfZXJyb3JzICAgPSBod19zdGF0cy0+cnhfcnJkX292ICsgaHdfc3RhdHMtPnJ4X3J4Zl9vdjsKKworCW5ldF9zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9IGh3X3N0YXRzLT5yeF9ycmRfb3YgKyBod19zdGF0cy0+cnhfcnhmX292OworCisJbmV0X3N0YXRzLT50eF9lcnJvcnMgPSBod19zdGF0cy0+dHhfbGF0ZV9jb2wgKyBod19zdGF0cy0+dHhfYWJvcnRfY29sICsKKwkJCSAgICAgICBod19zdGF0cy0+dHhfdW5kZXJydW4gKyBod19zdGF0cy0+dHhfdHJ1bmM7CisJbmV0X3N0YXRzLT50eF9maWZvX2Vycm9ycyAgICA9IGh3X3N0YXRzLT50eF91bmRlcnJ1bjsKKwluZXRfc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzID0gaHdfc3RhdHMtPnR4X2Fib3J0X2NvbDsKKwluZXRfc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMgID0gaHdfc3RhdHMtPnR4X2xhdGVfY29sOworCisJcmV0dXJuICZhZGFwdGVyLT5uZXRfc3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFlX3VwZGF0ZV9od19zdGF0cyhzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MTYgaHdfcmVnX2FkZHIgPSAwOworCXVuc2lnbmVkIGxvbmcgKnN0YXRzX2l0ZW0gPSBOVUxMOworCisJLyogdXBkYXRlIHJ4IHN0YXR1cyAqLworCWh3X3JlZ19hZGRyID0gUkVHX01BQ19SWF9TVEFUVVNfQklOOworCXN0YXRzX2l0ZW0gID0gJmFkYXB0ZXItPmh3X3N0YXRzLnJ4X29rOworCXdoaWxlIChod19yZWdfYWRkciA8PSBSRUdfTUFDX1JYX1NUQVRVU19FTkQpIHsKKwkJKnN0YXRzX2l0ZW0gKz0gQVRfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBod19yZWdfYWRkcik7CisJCXN0YXRzX2l0ZW0rKzsKKwkJaHdfcmVnX2FkZHIgKz0gNDsKKwl9CisJLyogdXBkYXRlIHR4IHN0YXR1cyAqLworCWh3X3JlZ19hZGRyID0gUkVHX01BQ19UWF9TVEFUVVNfQklOOworCXN0YXRzX2l0ZW0gID0gJmFkYXB0ZXItPmh3X3N0YXRzLnR4X29rOworCXdoaWxlIChod19yZWdfYWRkciA8PSBSRUdfTUFDX1RYX1NUQVRVU19FTkQpIHsKKwkJKnN0YXRzX2l0ZW0gKz0gQVRfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBod19yZWdfYWRkcik7CisJCXN0YXRzX2l0ZW0rKzsKKwkJaHdfcmVnX2FkZHIgKz0gNDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGwxZV9jbGVhcl9waHlfaW50KHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXUxNiBwaHlfZGF0YTsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+bWRpb19sb2NrKTsKKwlhdGwxZV9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBNSUlfSU5UX1NUQVRVUywgJnBoeV9kYXRhKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWRpb19sb2NrKTsKK30KKworc3RhdGljIGJvb2wgYXRsMWVfY2xlYW5fdHhfaXJxKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxZV90eF9yaW5nICp0eF9yaW5nID0gKHN0cnVjdCBhdGwxZV90eF9yaW5nICopCisJCQkJCSZhZGFwdGVyLT50eF9yaW5nOworCXN0cnVjdCBhdGwxZV90eF9idWZmZXIgKnR4X2J1ZmZlciA9IE5VTEw7CisJdTE2IGh3X25leHRfdG9fY2xlYW4gPSBBVF9SRUFEX1JFR1coJmFkYXB0ZXItPmh3LCBSRUdfVFBEX0NPTlNfSURYKTsKKwl1MTYgbmV4dF90b19jbGVhbiA9IGF0b21pY19yZWFkKCZ0eF9yaW5nLT5uZXh0X3RvX2NsZWFuKTsKKworCXdoaWxlIChuZXh0X3RvX2NsZWFuICE9IGh3X25leHRfdG9fY2xlYW4pIHsKKwkJdHhfYnVmZmVyID0gJnR4X3JpbmctPnR4X2J1ZmZlcltuZXh0X3RvX2NsZWFuXTsKKwkJaWYgKHR4X2J1ZmZlci0+ZG1hKSB7CisJCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCB0eF9idWZmZXItPmRtYSwKKwkJCQkJdHhfYnVmZmVyLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJdHhfYnVmZmVyLT5kbWEgPSAwOworCQl9CisKKwkJaWYgKHR4X2J1ZmZlci0+c2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2lycSh0eF9idWZmZXItPnNrYik7CisJCQl0eF9idWZmZXItPnNrYiA9IE5VTEw7CisJCX0KKworCQlpZiAoKytuZXh0X3RvX2NsZWFuID09IHR4X3JpbmctPmNvdW50KQorCQkJbmV4dF90b19jbGVhbiA9IDA7CisJfQorCisJYXRvbWljX3NldCgmdHhfcmluZy0+bmV4dF90b19jbGVhbiwgbmV4dF90b19jbGVhbik7CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChhZGFwdGVyLT5uZXRkZXYpICYmCisJCQluZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogYXRsMWVfaW50ciAtIEludGVycnVwdCBIYW5kbGVyCisgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCisgKiBAZGF0YTogcG9pbnRlciB0byBhIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwdF9yZWdzOiBDUFUgcmVnaXN0ZXJzIHN0cnVjdHVyZQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYXRsMWVfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgID0gZGF0YTsKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBhdGwxZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IG1heF9pbnRzID0gQVRfTUFYX0lOVF9XT1JLOworCWludCBoYW5kbGVkID0gSVJRX05PTkU7CisJdTMyIHN0YXR1czsKKworCWRvIHsKKwkJc3RhdHVzID0gQVRfUkVBRF9SRUcoaHcsIFJFR19JU1IpOworCQlpZiAoKHN0YXR1cyAmIElNUl9OT1JNQUxfTUFTSykgPT0gMCB8fAorCQkJCShzdGF0dXMgJiBJU1JfRElTX0lOVCkgIT0gMCkgeworCQkJaWYgKG1heF9pbnRzICE9IEFUX01BWF9JTlRfV09SSykKKwkJCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7CisJCQlicmVhazsKKwkJfQorCQkvKiBsaW5rIGV2ZW50ICovCisJCWlmIChzdGF0dXMgJiBJU1JfR1BIWSkKKwkJCWF0bDFlX2NsZWFyX3BoeV9pbnQoYWRhcHRlcik7CisJCS8qIEFjayBJU1IgKi8KKwkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSVNSLCBzdGF0dXMgfCBJU1JfRElTX0lOVCk7CisKKwkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOworCQkvKiBjaGVjayBpZiBQQ0lFIFBIWSBMaW5rIGRvd24gKi8KKwkJaWYgKHN0YXR1cyAmIElTUl9QSFlfTElOS0RPV04pIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicGNpZSBwaHkgbGlua2Rvd24gJXhcbiIsIHN0YXR1cyk7CisJCQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CisJCQkJLyogcmVzZXQgTUFDICovCisJCQkJYXRsMWVfaXJxX3Jlc2V0KGFkYXB0ZXIpOworCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogY2hlY2sgaWYgRE1BIHJlYWQvd3JpdGUgZXJyb3IgKi8KKwkJaWYgKHN0YXR1cyAmIChJU1JfRE1BUl9UT19SU1QgfCBJU1JfRE1BV19UT19SU1QpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIlBDSUUgRE1BIFJXIGVycm9yIChzdGF0dXMgPSAweCV4KVxuIiwKKwkJCQlzdGF0dXMpOworCQkJYXRsMWVfaXJxX3Jlc2V0KGFkYXB0ZXIpOworCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBJU1JfU01CKQorCQkJYXRsMWVfdXBkYXRlX2h3X3N0YXRzKGFkYXB0ZXIpOworCisJCS8qIGxpbmsgZXZlbnQgKi8KKwkJaWYgKHN0YXR1cyAmIChJU1JfR1BIWSB8IElTUl9NQU5VQUwpKSB7CisJCQlhZGFwdGVyLT5uZXRfc3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCWF0bDFlX2xpbmtfY2hnX2V2ZW50KGFkYXB0ZXIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB0cmFuc21pdCBldmVudCAqLworCQlpZiAoc3RhdHVzICYgSVNSX1RYX0VWRU5UKQorCQkJYXRsMWVfY2xlYW5fdHhfaXJxKGFkYXB0ZXIpOworCisJCWlmIChzdGF0dXMgJiBJU1JfUlhfRVZFTlQpIHsKKwkJCS8qCisJCQkgKiBkaXNhYmxlIHJ4IGludGVycnVwdHMsIHdpdGhvdXQKKwkJCSAqIHRoZSBzeW5jaHJvbml6ZV9pcnEgYml0CisJCQkgKi8KKwkJCUFUX1dSSVRFX1JFRyhodywgUkVHX0lNUiwKKwkJCQkgICAgIElNUl9OT1JNQUxfTUFTSyAmIH5JU1JfUlhfRVZFTlQpOworCQkJQVRfV1JJVEVfRkxVU0goaHcpOworCQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5ldGRldiwKKwkJCQkgICAmYWRhcHRlci0+bmFwaSkpKQorCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSk7CisJCX0KKwl9IHdoaWxlICgtLW1heF9pbnRzID4gMCk7CisJLyogcmUtZW5hYmxlIEludGVycnVwdCovCisJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX0lTUiwgMCk7CisKKwlyZXR1cm4gaGFuZGxlZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0bDFlX3J4X2NoZWNrc3VtKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyLAorCQkgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBhdGwxZV9yZWN2X3JldF9zdGF0dXMgKnBycnMpCit7CisJdTggKnBhY2tldCA9ICh1OCAqKShwcnJzICsgMSk7CisJc3RydWN0IGlwaGRyICppcGg7CisJdTE2IGhlYWRfbGVuID0gRVRIX0hMRU47CisJdTE2IHBrdF9mbGFnczsKKwl1MTYgZXJyX2ZsYWdzOworCisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXBrdF9mbGFncyA9IHBycnMtPnBrdF9mbGFnOworCWVycl9mbGFncyA9IHBycnMtPmVycl9mbGFnOworCWlmICgoKHBrdF9mbGFncyAmIFJSU19JU19JUFY0KSB8fCAocGt0X2ZsYWdzICYgUlJTX0lTX0lQVjYpKSAmJgorCQkoKHBrdF9mbGFncyAmIFJSU19JU19UQ1ApIHx8IChwa3RfZmxhZ3MgJiBSUlNfSVNfVURQKSkpIHsKKwkJaWYgKHBrdF9mbGFncyAmIFJSU19JU19JUFY0KSB7CisJCQlpZiAocGt0X2ZsYWdzICYgUlJTX0lTXzgwMl8zKQorCQkJCWhlYWRfbGVuICs9IDg7CisJCQlpcGggPSAoc3RydWN0IGlwaGRyICopIChwYWNrZXQgKyBoZWFkX2xlbik7CisJCQlpZiAoaXBoLT5mcmFnX29mZiAhPSAwICYmICEocGt0X2ZsYWdzICYgUlJTX0lTX0lQX0RGKSkKKwkJCQlnb3RvIGh3X3hzdW07CisJCX0KKwkJaWYgKCEoZXJyX2ZsYWdzICYgKFJSU19FUlJfSVBfQ1NVTSB8IFJSU19FUlJfTDRfQ1NVTSkpKSB7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJcmV0dXJuOworCQl9CisJfQorCitod194c3VtIDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRsMWVfcnhfcGFnZSAqYXRsMWVfZ2V0X3J4X3BhZ2Uoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSAgICAgICB1OCBxdWUpCit7CisJc3RydWN0IGF0bDFlX3J4X3BhZ2VfZGVzYyAqcnhfcGFnZV9kZXNjID0KKwkJKHN0cnVjdCBhdGwxZV9yeF9wYWdlX2Rlc2MgKikgYWRhcHRlci0+cnhfcmluZy5yeF9wYWdlX2Rlc2M7CisJdTggcnhfdXNpbmcgPSByeF9wYWdlX2Rlc2NbcXVlXS5yeF91c2luZzsKKworCXJldHVybiAoc3RydWN0IGF0bDFlX3J4X3BhZ2UgKikmKHJ4X3BhZ2VfZGVzY1txdWVdLnJ4X3BhZ2VbcnhfdXNpbmddKTsKK30KKworc3RhdGljIHZvaWQgYXRsMWVfY2xlYW5fcnhfaXJxKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyLCB1OCBxdWUsCisJCSAgIGludCAqd29ya19kb25lLCBpbnQgd29ya190b19kbykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiAgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGF0bDFlX3J4X3JpbmcgKnJ4X3JpbmcgPSAoc3RydWN0IGF0bDFlX3J4X3JpbmcgKikKKwkJCQkJICZhZGFwdGVyLT5yeF9yaW5nOworCXN0cnVjdCBhdGwxZV9yeF9wYWdlX2Rlc2MgKnJ4X3BhZ2VfZGVzYyA9CisJCShzdHJ1Y3QgYXRsMWVfcnhfcGFnZV9kZXNjICopIHJ4X3JpbmctPnJ4X3BhZ2VfZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3QgYXRsMWVfcnhfcGFnZSAqcnhfcGFnZSA9IGF0bDFlX2dldF9yeF9wYWdlKGFkYXB0ZXIsIHF1ZSk7CisJdTMyIHBhY2tldF9zaXplLCB3cml0ZV9vZmZzZXQ7CisJc3RydWN0IGF0bDFlX3JlY3ZfcmV0X3N0YXR1cyAqcHJyczsKKworCXdyaXRlX29mZnNldCA9ICoocnhfcGFnZS0+d3JpdGVfb2Zmc2V0X2FkZHIpOworCWlmIChsaWtlbHkocnhfcGFnZS0+cmVhZF9vZmZzZXQgPCB3cml0ZV9vZmZzZXQpKSB7CisJCWRvIHsKKwkJCWlmICgqd29ya19kb25lID49IHdvcmtfdG9fZG8pCisJCQkJYnJlYWs7CisJCQkoKndvcmtfZG9uZSkrKzsKKwkJCS8qIGdldCBuZXcgcGFja2V0J3MgIHJycyAqLworCQkJcHJycyA9IChzdHJ1Y3QgYXRsMWVfcmVjdl9yZXRfc3RhdHVzICopIChyeF9wYWdlLT5hZGRyICsKKwkJCQkJCSByeF9wYWdlLT5yZWFkX29mZnNldCk7CisJCQkvKiBjaGVjayBzZXF1ZW5jZSBudW1iZXIgKi8KKwkJCWlmIChwcnJzLT5zZXFfbnVtICE9IHJ4X3BhZ2VfZGVzY1txdWVdLnJ4X254c2VxKSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCQkicnggc2VxdWVuY2UgbnVtYmVyIgorCQkJCQkiIGVycm9yIChyeD0lZCkgKGV4cGVjdD0lZClcbiIsCisJCQkJCXBycnMtPnNlcV9udW0sCisJCQkJCXJ4X3BhZ2VfZGVzY1txdWVdLnJ4X254c2VxKTsKKwkJCQlyeF9wYWdlX2Rlc2NbcXVlXS5yeF9ueHNlcSsrOworCQkJCS8qIGp1c3QgZm9yIGRlYnVnIHVzZSAqLworCQkJCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19ERUJVR19EQVRBMCwKKwkJCQkJICAgICAoKCh1MzIpcHJycy0+c2VxX251bSkgPDwgMTYpIHwKKwkJCQkJICAgICByeF9wYWdlX2Rlc2NbcXVlXS5yeF9ueHNlcSk7CisJCQkJZ290byBmYXRhbF9lcnI7CisJCQl9CisJCQlyeF9wYWdlX2Rlc2NbcXVlXS5yeF9ueHNlcSsrOworCisJCQkvKiBlcnJvciBwYWNrZXQgKi8KKwkJCWlmIChwcnJzLT5wa3RfZmxhZyAmIFJSU19JU19FUlJfRlJBTUUpIHsKKwkJCQlpZiAocHJycy0+ZXJyX2ZsYWcgJiAoUlJTX0VSUl9CQURfQ1JDIHwKKwkJCQkJUlJTX0VSUl9EUklCQkxFIHwgUlJTX0VSUl9DT0RFIHwKKwkJCQkJUlJTX0VSUl9UUlVOQykpIHsKKwkJCQkvKiBoYXJkd2FyZSBlcnJvciwgZGlzY2FyZCB0aGlzIHBhY2tldCovCisJCQkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkJCSJyeCBwYWNrZXQgZGVzYyBlcnJvciAleFxuIiwKKwkJCQkJCSooKHUzMiAqKXBycnMgKyAxKSk7CisJCQkJCWdvdG8gc2tpcF9wa3Q7CisJCQkJfQorCQkJfQorCisJCQlwYWNrZXRfc2l6ZSA9ICgocHJycy0+d29yZDEgPj4gUlJTX1BLVF9TSVpFX1NISUZUKSAmCisJCQkJCVJSU19QS1RfU0laRV9NQVNLKSAtIDQ7IC8qIENSQyAqLworCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsCisJCQkJCSAgICAgICBwYWNrZXRfc2l6ZSArIE5FVF9JUF9BTElHTik7CisJCQlpZiAoc2tiID09IE5VTEwpIHsKKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXM6IE1lbW9yeSBzcXVlZXplLCIKKwkJCQkJImRlZmVycmluZyBwYWNrZXQuXG4iLCBuZXRkZXYtPm5hbWUpOworCQkJCWdvdG8gc2tpcF9wa3Q7CisJCQl9CisJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisJCQlza2ItPmRldiA9IG5ldGRldjsKKwkJCW1lbWNweShza2ItPmRhdGEsICh1OCAqKShwcnJzICsgMSksIHBhY2tldF9zaXplKTsKKwkJCXNrYl9wdXQoc2tiLCBwYWNrZXRfc2l6ZSk7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOworCQkJYXRsMWVfcnhfY2hlY2tzdW0oYWRhcHRlciwgc2tiLCBwcnJzKTsKKworCQkJaWYgKHVubGlrZWx5KGFkYXB0ZXItPnZsZ3JwICYmCisJCQkJKHBycnMtPnBrdF9mbGFnICYgUlJTX0lTX1ZMQU5fVEFHKSkpIHsKKwkJCQl1MTYgdmxhbl90YWcgPSAocHJycy0+dnRhZyA+PiA0KSB8CisJCQkJCSAgICAgICAoKHBycnMtPnZ0YWcgJiA3KSA8PCAxMykgfAorCQkJCQkgICAgICAgKChwcnJzLT52dGFnICYgOCkgPDwgOSk7CisJCQkJZGV2X2RiZygmcGRldi0+ZGV2LAorCQkJCQkiUlhEIFZMQU4gVEFHPFJSRD49MHglMDR4XG4iLAorCQkJCQlwcnJzLT52dGFnKTsKKwkJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGdycCwKKwkJCQkJCQkgdmxhbl90YWcpOworCQkJfSBlbHNlIHsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJfQorCisJCQluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworc2tpcF9wa3Q6CisJLyogc2tpcCBjdXJyZW50IHBhY2tldCB3aGV0aGVyIGl0J3Mgb2sgb3Igbm90LiAqLworCQkJcnhfcGFnZS0+cmVhZF9vZmZzZXQgKz0KKwkJCQkoKCh1MzIpKChwcnJzLT53b3JkMSA+PiBSUlNfUEtUX1NJWkVfU0hJRlQpICYKKwkJCQlSUlNfUEtUX1NJWkVfTUFTSykgKworCQkJCXNpemVvZihzdHJ1Y3QgYXRsMWVfcmVjdl9yZXRfc3RhdHVzKSArIDMxKSAmCisJCQkJCQkweEZGRkZGRkUwKTsKKworCQkJaWYgKHJ4X3BhZ2UtPnJlYWRfb2Zmc2V0ID49IHJ4X3JpbmctPnBhZ2Vfc2l6ZSkgeworCQkJCS8qIG1hcmsgdGhpcyBwYWdlIGNsZWFuICovCisJCQkJdTE2IHJlZ19hZGRyOworCQkJCXU4ICByeF91c2luZzsKKworCQkJCXJ4X3BhZ2UtPnJlYWRfb2Zmc2V0ID0KKwkJCQkJKihyeF9wYWdlLT53cml0ZV9vZmZzZXRfYWRkcikgPSAwOworCQkJCXJ4X3VzaW5nID0gcnhfcGFnZV9kZXNjW3F1ZV0ucnhfdXNpbmc7CisJCQkJcmVnX2FkZHIgPQorCQkJCQlhdGwxZV9yeF9wYWdlX3ZsZF9yZWdzW3F1ZV1bcnhfdXNpbmddOworCQkJCUFUX1dSSVRFX1JFR0IoJmFkYXB0ZXItPmh3LCByZWdfYWRkciwgMSk7CisJCQkJcnhfcGFnZV9kZXNjW3F1ZV0ucnhfdXNpbmcgXj0gMTsKKwkJCQlyeF9wYWdlID0gYXRsMWVfZ2V0X3J4X3BhZ2UoYWRhcHRlciwgcXVlKTsKKwkJCX0KKwkJCXdyaXRlX29mZnNldCA9ICoocnhfcGFnZS0+d3JpdGVfb2Zmc2V0X2FkZHIpOworCQl9IHdoaWxlIChyeF9wYWdlLT5yZWFkX29mZnNldCA8IHdyaXRlX29mZnNldCk7CisJfQorCisJcmV0dXJuOworCitmYXRhbF9lcnI6CisJaWYgKCF0ZXN0X2JpdChfX0FUX0RPV04sICZhZGFwdGVyLT5mbGFncykpCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOworfQorCisvKgorICogYXRsMWVfY2xlYW4gLSBOQVBJIFJ4IHBvbGxpbmcgY2FsbGJhY2sKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IGF0bDFlX2NsZWFuKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9CisJCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IGF0bDFlX2FkYXB0ZXIsIG5hcGkpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICAgICpwZGV2ICAgID0gYWRhcHRlci0+cGRldjsKKwl1MzIgaW1yX2RhdGE7CisJaW50IHdvcmtfZG9uZSA9IDA7CisKKwkvKiBLZWVwIGxpbmsgc3RhdGUgaW5mb3JtYXRpb24gd2l0aCBvcmlnaW5hbCBuZXRkZXYgKi8KKwlpZiAoIW5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkKKwkJZ290byBxdWl0X3BvbGxpbmc7CisKKwlhdGwxZV9jbGVhbl9yeF9pcnEoYWRhcHRlciwgMCwgJndvcmtfZG9uZSwgYnVkZ2V0KTsKKworCS8qIElmIG5vIFR4IGFuZCBub3QgZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworcXVpdF9wb2xsaW5nOgorCQluZXRpZl9yeF9jb21wbGV0ZShuZXRkZXYsIG5hcGkpOworCQlpbXJfZGF0YSA9IEFUX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkVHX0lNUik7CisJCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19JTVIsIGltcl9kYXRhIHwgSVNSX1JYX0VWRU5UKTsKKwkJLyogdGVzdCBkZWJ1ZyAqLworCQlpZiAodGVzdF9iaXQoX19BVF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKSB7CisJCQlhdG9taWNfZGVjKCZhZGFwdGVyLT5pcnFfc2VtKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiYXRsMWVfY2xlYW4gaXMgY2FsbGVkIHdoZW4gQVRfRE9XTlxuIik7CisJCX0KKwkJLyogcmVlbmFibGUgUlggaW50ciAqLworCQkvKmF0bDFlX2lycV9lbmFibGUoYWRhcHRlcik7ICovCisKKwl9CisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisKKy8qCisgKiBQb2xsaW5nICdpbnRlcnJ1cHQnIC0gdXNlZCBieSB0aGluZ3MgbGlrZSBuZXRjb25zb2xlIHRvIHNlbmQgc2ticworICogd2l0aG91dCBoYXZpbmcgdG8gcmUtZW5hYmxlIGludGVycnVwdHMuIEl0J3Mgbm90IGNhbGxlZCB3aGlsZQorICogdGhlIGludGVycnVwdCByb3V0aW5lIGlzIGV4ZWN1dGluZy4KKyAqLworc3RhdGljIHZvaWQgYXRsMWVfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWRpc2FibGVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSk7CisJYXRsMWVfaW50cihhZGFwdGVyLT5wZGV2LT5pcnEsIG5ldGRldik7CisJZW5hYmxlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdTE2IGF0bDFlX3RwZF9hdmFpbChzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMWVfdHhfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nOworCXUxNiBuZXh0X3RvX3VzZSA9IDA7CisJdTE2IG5leHRfdG9fY2xlYW4gPSAwOworCisJbmV4dF90b19jbGVhbiA9IGF0b21pY19yZWFkKCZ0eF9yaW5nLT5uZXh0X3RvX2NsZWFuKTsKKwluZXh0X3RvX3VzZSAgID0gdHhfcmluZy0+bmV4dF90b191c2U7CisKKwlyZXR1cm4gKHUxNikobmV4dF90b19jbGVhbiA+IG5leHRfdG9fdXNlKSA/CisJCShuZXh0X3RvX2NsZWFuIC0gbmV4dF90b191c2UgLSAxKSA6CisJCSh0eF9yaW5nLT5jb3VudCArIG5leHRfdG9fY2xlYW4gLSBuZXh0X3RvX3VzZSAtIDEpOworfQorCisvKgorICogZ2V0IG5leHQgdXNhYmxlIHRwZAorICogTm90ZTogc2hvdWxkIGNhbGwgYXRsMWVfdGRwX2F2YWlsIHRvIG1ha2Ugc3VyZQorICogdGhlcmUgaXMgZW5vdWdoIHRwZCB0byB1c2UKKyAqLworc3RhdGljIHN0cnVjdCBhdGwxZV90cGRfZGVzYyAqYXRsMWVfZ2V0X3RwZChzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMWVfdHhfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nOworCXUxNiBuZXh0X3RvX3VzZSA9IDA7CisKKwluZXh0X3RvX3VzZSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOworCWlmICgrK3R4X3JpbmctPm5leHRfdG9fdXNlID09IHR4X3JpbmctPmNvdW50KQorCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CisKKwltZW1zZXQoJnR4X3JpbmctPmRlc2NbbmV4dF90b191c2VdLCAwLCBzaXplb2Yoc3RydWN0IGF0bDFlX3RwZF9kZXNjKSk7CisJcmV0dXJuIChzdHJ1Y3QgYXRsMWVfdHBkX2Rlc2MgKikmdHhfcmluZy0+ZGVzY1tuZXh0X3RvX3VzZV07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRsMWVfdHhfYnVmZmVyICoKK2F0bDFlX2dldF90eF9idWZmZXIoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBhdGwxZV90cGRfZGVzYyAqdHBkKQoreworCXN0cnVjdCBhdGwxZV90eF9yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmc7CisKKwlyZXR1cm4gJnR4X3JpbmctPnR4X2J1ZmZlclt0cGQgLSB0eF9yaW5nLT5kZXNjXTsKK30KKworLyogQ2FsY3VsYXRlIHRoZSB0cmFuc21pdCBwYWNrZXQgZGVzY3JpcHQgbmVlZGVkKi8KK3N0YXRpYyB1MTYgYXRsMWVfY2FsX3RkcF9yZXEoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaSA9IDA7CisJdTE2IHRwZF9yZXEgPSAxOworCXUxNiBmZ19zaXplID0gMDsKKwl1MTYgcHJvdG9faGRyX2xlbiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCWZnX3NpemUgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CisJCXRwZF9yZXEgKz0gKChmZ19zaXplICsgTUFYX1RYX0JVRl9MRU4gLSAxKSA+PiBNQVhfVFhfQlVGX1NISUZUKTsKKwl9CisKKwlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CisJCWlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQKSB8fAorCQkgICAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1RDUFY2KSkgeworCQkJcHJvdG9faGRyX2xlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKworCQkJCQl0Y3BfaGRybGVuKHNrYik7CisJCQlpZiAocHJvdG9faGRyX2xlbiA8IHNrYl9oZWFkbGVuKHNrYikpIHsKKwkJCQl0cGRfcmVxICs9ICgoc2tiX2hlYWRsZW4oc2tiKSAtIHByb3RvX2hkcl9sZW4gKworCQkJCQkgICBNQVhfVFhfQlVGX0xFTiAtIDEpID4+CisJCQkJCSAgIE1BWF9UWF9CVUZfU0hJRlQpOworCQkJfQorCQl9CisKKwl9CisJcmV0dXJuIHRwZF9yZXE7Cit9CisKK3N0YXRpYyBpbnQgYXRsMWVfdHNvX2NzdW0oc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYXRsMWVfdHBkX2Rlc2MgKnRwZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJdTggaGRyX2xlbjsKKwl1MzIgcmVhbF9sZW47CisJdW5zaWduZWQgc2hvcnQgb2ZmbG9hZF90eXBlOworCWludCBlcnI7CisKKwlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CisJCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpKSB7CisJCQllcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQyk7CisJCQlpZiAodW5saWtlbHkoZXJyKSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwkJb2ZmbG9hZF90eXBlID0gc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZTsKKworCQlpZiAob2ZmbG9hZF90eXBlICYgU0tCX0dTT19UQ1BWNCkgeworCQkJcmVhbF9sZW4gPSAoKCh1bnNpZ25lZCBjaGFyICopaXBfaGRyKHNrYikgLSBza2ItPmRhdGEpCisJCQkJCSsgbnRvaHMoaXBfaGRyKHNrYiktPnRvdF9sZW4pKTsKKworCQkJaWYgKHJlYWxfbGVuIDwgc2tiLT5sZW4pCisJCQkJcHNrYl90cmltKHNrYiwgcmVhbF9sZW4pOworCisJCQloZHJfbGVuID0gKHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYikpOworCQkJaWYgKHVubGlrZWx5KHNrYi0+bGVuID09IGhkcl9sZW4pKSB7CisJCQkJLyogb25seSB4c3VtIG5lZWQgKi8KKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCSAgICAgICJJUFY0IHRzbyB3aXRoIHplcm8gZGF0YT8/XG4iKTsKKwkJCQlnb3RvIGNoZWNrX3N1bTsKKwkJCX0gZWxzZSB7CisJCQkJaXBfaGRyKHNrYiktPmNoZWNrID0gMDsKKwkJCQlpcF9oZHIoc2tiKS0+dG90X2xlbiA9IDA7CisJCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYygKKwkJCQkJCQlpcF9oZHIoc2tiKS0+c2FkZHIsCisJCQkJCQkJaXBfaGRyKHNrYiktPmRhZGRyLAorCQkJCQkJCTAsIElQUFJPVE9fVENQLCAwKTsKKwkJCQl0cGQtPndvcmQzIHw9IChpcF9oZHIoc2tiKS0+aWhsICYKKwkJCQkJVERQX1Y0X0lQSExfTUFTSykgPDwKKwkJCQkJVFBEX1Y0X0lQSExfU0hJRlQ7CisJCQkJdHBkLT53b3JkMyB8PSAoKHRjcF9oZHJsZW4oc2tiKSA+PiAyKSAmCisJCQkJCVRQRF9UQ1BIRFJMRU5fTUFTSykgPDwKKwkJCQkJVFBEX1RDUEhEUkxFTl9TSElGVDsKKwkJCQl0cGQtPndvcmQzIHw9ICgoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkgJgorCQkJCQlUUERfTVNTX01BU0spIDw8IFRQRF9NU1NfU0hJRlQ7CisJCQkJdHBkLT53b3JkMyB8PSAxIDw8IFRQRF9TRUdNRU5UX0VOX1NISUZUOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAob2ZmbG9hZF90eXBlICYgU0tCX0dTT19UQ1BWNikgeworCQkJcmVhbF9sZW4gPSAoKCh1bnNpZ25lZCBjaGFyICopaXB2Nl9oZHIoc2tiKSAtIHNrYi0+ZGF0YSkKKwkJCQkJKyBudG9ocyhpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbikpOworCQkJaWYgKHJlYWxfbGVuIDwgc2tiLT5sZW4pCisJCQkJcHNrYl90cmltKHNrYiwgcmVhbF9sZW4pOworCisJCQkvKiBjaGVjayBwYXlsb2FkID09IDAgYnl0ZSA/ICovCisJCQloZHJfbGVuID0gKHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYikpOworCQkJaWYgKHVubGlrZWx5KHNrYi0+bGVuID09IGhkcl9sZW4pKSB7CisJCQkJLyogb25seSB4c3VtIG5lZWQgKi8KKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCQkiSVBWNiB0c28gd2l0aCB6ZXJvIGRhdGE/P1xuIik7CisJCQkJZ290byBjaGVja19zdW07CisJCQl9IGVsc2UgeworCQkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSB+Y3N1bV9pcHY2X21hZ2ljKAorCQkJCQkJJmlwdjZfaGRyKHNrYiktPnNhZGRyLAorCQkJCQkJJmlwdjZfaGRyKHNrYiktPmRhZGRyLAorCQkJCQkJMCwgSVBQUk9UT19UQ1AsIDApOworCQkJCXRwZC0+d29yZDMgfD0gMSA8PCBUUERfSVBfVkVSU0lPTl9TSElGVDsKKwkJCQloZHJfbGVuID4+PSAxOworCQkJCXRwZC0+d29yZDMgfD0gKGhkcl9sZW4gJiBUUERfVjZfSVBITExPX01BU0spIDw8CisJCQkJCVRQRF9WNl9JUEhMTE9fU0hJRlQ7CisJCQkJdHBkLT53b3JkMyB8PSAoKGhkcl9sZW4gPj4gMykgJgorCQkJCQlUUERfVjZfSVBITEhJX01BU0spIDw8CisJCQkJCVRQRF9WNl9JUEhMSElfU0hJRlQ7CisJCQkJdHBkLT53b3JkMyB8PSAodGNwX2hkcmxlbihza2IpID4+IDIgJgorCQkJCQlUUERfVENQSERSTEVOX01BU0spIDw8CisJCQkJCVRQRF9UQ1BIRFJMRU5fU0hJRlQ7CisJCQkJdHBkLT53b3JkMyB8PSAoKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpICYKKwkJCQkJVFBEX01TU19NQVNLKSA8PCBUUERfTVNTX1NISUZUOworCQkJCQl0cGQtPndvcmQzIHw9IDEgPDwgVFBEX1NFR01FTlRfRU5fU0hJRlQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCitjaGVja19zdW06CisJaWYgKGxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkgeworCQl1OCBjc3MsIGNzbzsKKworCQljc28gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCQlpZiAodW5saWtlbHkoY3NvICYgMHgxKSkgeworCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJICAgInBheSBsb2FkIG9mZnNldCBzaG91bGQgbm90IGFudCBldmVudCBudW1iZXJcbiIpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJY3NzID0gY3NvICsgc2tiLT5jc3VtX29mZnNldDsKKwkJCXRwZC0+d29yZDMgfD0gKGNzbyAmIFRQRF9QTE9BRE9GRlNFVF9NQVNLKSA8PAorCQkJCQlUUERfUExPQURPRkZTRVRfU0hJRlQ7CisJCQl0cGQtPndvcmQzIHw9IChjc3MgJiBUUERfQ0NTVU1PRkZTRVRfTUFTSykgPDwKKwkJCQkJVFBEX0NDU1VNT0ZGU0VUX1NISUZUOworCQkJdHBkLT53b3JkMyB8PSAxIDw8IFRQRF9DQ19TRUdNRU5UX0VOX1NISUZUOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFlX3R4X21hcChzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGF0bDFlX3RwZF9kZXNjICp0cGQpCit7CisJc3RydWN0IGF0bDFlX3RwZF9kZXNjICp1c2VfdHBkID0gTlVMTDsKKwlzdHJ1Y3QgYXRsMWVfdHhfYnVmZmVyICp0eF9idWZmZXIgPSBOVUxMOworCXUxNiBidWZfbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOworCXUxNiBtYXBfbGVuID0gMDsKKwl1MTYgbWFwcGVkX2xlbiA9IDA7CisJdTE2IGhkcl9sZW4gPSAwOworCXUxNiBucl9mcmFnczsKKwl1MTYgZjsKKwlpbnQgc2VnbWVudDsKKworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlzZWdtZW50ID0gKHRwZC0+d29yZDMgPj4gVFBEX1NFR01FTlRfRU5fU0hJRlQpICYgVFBEX1NFR01FTlRfRU5fTUFTSzsKKwlpZiAoc2VnbWVudCkgeworCQkvKiBUU08gKi8KKwkJbWFwX2xlbiA9IGhkcl9sZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgdGNwX2hkcmxlbihza2IpOworCQl1c2VfdHBkID0gdHBkOworCisJCXR4X2J1ZmZlciA9IGF0bDFlX2dldF90eF9idWZmZXIoYWRhcHRlciwgdXNlX3RwZCk7CisJCXR4X2J1ZmZlci0+bGVuZ3RoID0gbWFwX2xlbjsKKwkJdHhfYnVmZmVyLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAorCQkJCQlza2ItPmRhdGEsIGhkcl9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQltYXBwZWRfbGVuICs9IG1hcF9sZW47CisJCXVzZV90cGQtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQodHhfYnVmZmVyLT5kbWEpOworCQl1c2VfdHBkLT53b3JkMiA9ICh1c2VfdHBkLT53b3JkMiAmICh+VFBEX0JVRkxFTl9NQVNLKSkgfAorCQkJKChjcHVfdG9fbGUzMih0eF9idWZmZXItPmxlbmd0aCkgJgorCQkJVFBEX0JVRkxFTl9NQVNLKSA8PCBUUERfQlVGTEVOX1NISUZUKTsKKwl9CisKKwl3aGlsZSAobWFwcGVkX2xlbiA8IGJ1Zl9sZW4pIHsKKwkJLyogbWFwcGVkX2xlbiA9PSAwLCBtZWFucyB3ZSBzaG91bGQgdXNlIHRoZSBmaXJzdCB0cGQsCisJCSAgIHdoaWNoIGlzIGdpdmVuIGJ5IGNhbGxlciAgKi8KKwkJaWYgKG1hcHBlZF9sZW4gPT0gMCkgeworCQkJdXNlX3RwZCA9IHRwZDsKKwkJfSBlbHNlIHsKKwkJCXVzZV90cGQgPSBhdGwxZV9nZXRfdHBkKGFkYXB0ZXIpOworCQkJbWVtY3B5KHVzZV90cGQsIHRwZCwgc2l6ZW9mKHN0cnVjdCBhdGwxZV90cGRfZGVzYykpOworCQl9CisJCXR4X2J1ZmZlciA9IGF0bDFlX2dldF90eF9idWZmZXIoYWRhcHRlciwgdXNlX3RwZCk7CisJCXR4X2J1ZmZlci0+c2tiID0gTlVMTDsKKworCQl0eF9idWZmZXItPmxlbmd0aCA9IG1hcF9sZW4gPQorCQkJKChidWZfbGVuIC0gbWFwcGVkX2xlbikgPj0gTUFYX1RYX0JVRl9MRU4pID8KKwkJCU1BWF9UWF9CVUZfTEVOIDogKGJ1Zl9sZW4gLSBtYXBwZWRfbGVuKTsKKwkJdHhfYnVmZmVyLT5kbWEgPQorCQkJcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgc2tiLT5kYXRhICsgbWFwcGVkX2xlbiwKKwkJCQkJbWFwX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCW1hcHBlZF9sZW4gICs9IG1hcF9sZW47CisJCXVzZV90cGQtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQodHhfYnVmZmVyLT5kbWEpOworCQl1c2VfdHBkLT53b3JkMiA9ICh1c2VfdHBkLT53b3JkMiAmICh+VFBEX0JVRkxFTl9NQVNLKSkgfAorCQkJKChjcHVfdG9fbGUzMih0eF9idWZmZXItPmxlbmd0aCkgJgorCQkJVFBEX0JVRkxFTl9NQVNLKSA8PCBUUERfQlVGTEVOX1NISUZUKTsKKwl9CisKKwlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgeworCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOworCQl1MTYgaTsKKwkJdTE2IHNlZ19udW07CisKKwkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZdOworCQlidWZfbGVuID0gZnJhZy0+c2l6ZTsKKworCQlzZWdfbnVtID0gKGJ1Zl9sZW4gKyBNQVhfVFhfQlVGX0xFTiAtIDEpIC8gTUFYX1RYX0JVRl9MRU47CisJCWZvciAoaSA9IDA7IGkgPCBzZWdfbnVtOyBpKyspIHsKKwkJCXVzZV90cGQgPSBhdGwxZV9nZXRfdHBkKGFkYXB0ZXIpOworCQkJbWVtY3B5KHVzZV90cGQsIHRwZCwgc2l6ZW9mKHN0cnVjdCBhdGwxZV90cGRfZGVzYykpOworCisJCQl0eF9idWZmZXIgPSBhdGwxZV9nZXRfdHhfYnVmZmVyKGFkYXB0ZXIsIHVzZV90cGQpOworCQkJaWYgKHR4X2J1ZmZlci0+c2tiKQorCQkJCUJVRygpOworCisJCQl0eF9idWZmZXItPnNrYiA9IE5VTEw7CisJCQl0eF9idWZmZXItPmxlbmd0aCA9CisJCQkJKGJ1Zl9sZW4gPiBNQVhfVFhfQlVGX0xFTikgPworCQkJCU1BWF9UWF9CVUZfTEVOIDogYnVmX2xlbjsKKwkJCWJ1Zl9sZW4gLT0gdHhfYnVmZmVyLT5sZW5ndGg7CisKKwkJCXR4X2J1ZmZlci0+ZG1hID0KKwkJCQlwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgZnJhZy0+cGFnZSwKKwkJCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0ICsKKwkJCQkJCShpICogTUFYX1RYX0JVRl9MRU4pLAorCQkJCQkJdHhfYnVmZmVyLT5sZW5ndGgsCisJCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCXVzZV90cGQtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQodHhfYnVmZmVyLT5kbWEpOworCQkJdXNlX3RwZC0+d29yZDIgPSAodXNlX3RwZC0+d29yZDIgJiAoflRQRF9CVUZMRU5fTUFTSykpIHwKKwkJCQkJKChjcHVfdG9fbGUzMih0eF9idWZmZXItPmxlbmd0aCkgJgorCQkJCQlUUERfQlVGTEVOX01BU0spIDw8IFRQRF9CVUZMRU5fU0hJRlQpOworCQl9CisJfQorCisJaWYgKCh0cGQtPndvcmQzID4+IFRQRF9TRUdNRU5UX0VOX1NISUZUKSAmIFRQRF9TRUdNRU5UX0VOX01BU0spCisJCS8qIG5vdGUgdGhpcyBvbmUgaXMgYSB0Y3AgaGVhZGVyICovCisJCXRwZC0+d29yZDMgfD0gMSA8PCBUUERfSERSRkxBR19TSElGVDsKKwkvKiBUaGUgbGFzdCB0cGQgKi8KKworCXVzZV90cGQtPndvcmQzIHw9IDEgPDwgVFBEX0VPUF9TSElGVDsKKwkvKiBUaGUgbGFzdCBidWZmZXIgaW5mbyBjb250YWluIHRoZSBza2IgYWRkcmVzcywKKwkgICBzbyBpdCB3aWxsIGJlIGZyZWUgYWZ0ZXIgdW5tYXAgKi8KKwl0eF9idWZmZXItPnNrYiA9IHNrYjsKK30KKworc3RhdGljIHZvaWQgYXRsMWVfdHhfcXVldWUoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBjb3VudCwKKwkJCSAgIHN0cnVjdCBhdGwxZV90cGRfZGVzYyAqdHBkKQoreworCXN0cnVjdCBhdGwxZV90eF9yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmc7CisJLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCisJICogc3VjaCBhcyBJQS02NCkuICovCisJd21iKCk7CisJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX01CX1RQRF9QUk9EX0lEWCwgdHhfcmluZy0+bmV4dF90b191c2UpOworfQorCitzdGF0aWMgaW50IGF0bDFlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgdHBkX3JlcSA9IDE7CisJc3RydWN0IGF0bDFlX3RwZF9kZXNjICp0cGQ7CisKKwlpZiAodGVzdF9iaXQoX19BVF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDw9IDApKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCXRwZF9yZXEgPSBhdGwxZV9jYWxfdGRwX3JlcShza2IpOworCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFkYXB0ZXItPnR4X2xvY2ssIGZsYWdzKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7CisKKwlpZiAoYXRsMWVfdHBkX2F2YWlsKGFkYXB0ZXIpIDwgdHBkX3JlcSkgeworCQkvKiBubyBlbm91Z2ggZGVzY3JpcHRvciwganVzdCBzdG9wIHF1ZXVlICovCisJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJdHBkID0gYXRsMWVfZ2V0X3RwZChhZGFwdGVyKTsKKworCWlmICh1bmxpa2VseShhZGFwdGVyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpKSB7CisJCXUxNiB2bGFuX3RhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQl1MTYgYXRsMWVfdmxhbl90YWc7CisKKwkJdHBkLT53b3JkMyB8PSAxIDw8IFRQRF9JTlNfVkxfVEFHX1NISUZUOworCQlBVF9WTEFOX1RBR19UT19UUERfVEFHKHZsYW5fdGFnLCBhdGwxZV92bGFuX3RhZyk7CisJCXRwZC0+d29yZDIgfD0gKGF0bDFlX3ZsYW5fdGFnICYgVFBEX1ZMQU5UQUdfTUFTSykgPDwKKwkJCQlUUERfVkxBTl9TSElGVDsKKwl9CisKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF84MDIxUSkpCisJCXRwZC0+d29yZDMgfD0gMSA8PCBUUERfVkxfVEFHR0VEX1NISUZUOworCisJaWYgKHNrYl9uZXR3b3JrX29mZnNldChza2IpICE9IEVUSF9ITEVOKQorCQl0cGQtPndvcmQzIHw9IDEgPDwgVFBEX0VUSFRZUEVfU0hJRlQ7IC8qIDgwMi4zIGZyYW1lICovCisKKwkvKiBkbyBUU08gYW5kIGNoZWNrIHN1bSAqLworCWlmIChhdGwxZV90c29fY3N1bShhZGFwdGVyLCBza2IsIHRwZCkgIT0gMCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncyk7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJYXRsMWVfdHhfbWFwKGFkYXB0ZXIsIHNrYiwgdHBkKTsKKwlhdGwxZV90eF9xdWV1ZShhZGFwdGVyLCB0cGRfcmVxLCB0cGQpOworCisJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFlX2ZyZWVfaXJxKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlmcmVlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIG5ldGRldik7CisKKwlpZiAoYWRhcHRlci0+aGF2ZV9tc2kpCisJCXBjaV9kaXNhYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKK30KKworc3RhdGljIGludCBhdGwxZV9yZXF1ZXN0X2lycShzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAgICAqcGRldiAgID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBmbGFncyA9IDA7CisJaW50IGVyciA9IDA7CisKKwlhZGFwdGVyLT5oYXZlX21zaSA9IHRydWU7CisJZXJyID0gcGNpX2VuYWJsZV9tc2koYWRhcHRlci0+cGRldik7CisJaWYgKGVycikgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGFsbG9jYXRlIE1TSSBpbnRlcnJ1cHQgRXJyb3I6ICVkXG4iLCBlcnIpOworCQlhZGFwdGVyLT5oYXZlX21zaSA9IGZhbHNlOworCX0gZWxzZQorCQluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKKworCisJaWYgKCFhZGFwdGVyLT5oYXZlX21zaSkKKwkJZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCAmYXRsMWVfaW50ciwgZmxhZ3MsCisJCQluZXRkZXYtPm5hbWUsIG5ldGRldik7CisJaWYgKGVycikgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CisJCWlmIChhZGFwdGVyLT5oYXZlX21zaSkKKwkJCXBjaV9kaXNhYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiYXRsMWVfcmVxdWVzdF9pcnEgT0tcbiIpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBhdGwxZV91cChzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBlcnIgPSAwOworCXUzMiB2YWw7CisKKwkvKiBoYXJkd2FyZSBoYXMgYmVlbiByZXNldCwgd2UgbmVlZCB0byByZWxvYWQgc29tZSB0aGluZ3MgKi8KKwllcnIgPSBhdGwxZV9pbml0X2h3KCZhZGFwdGVyLT5odyk7CisJaWYgKGVycikgeworCQllcnIgPSAtRUlPOworCQlyZXR1cm4gZXJyOworCX0KKwlhdGwxZV9pbml0X3JpbmdfcHRycyhhZGFwdGVyKTsKKwlhdGwxZV9zZXRfbXVsdGkobmV0ZGV2KTsKKwlhdGwxZV9yZXN0b3JlX3ZsYW4oYWRhcHRlcik7CisKKwlpZiAoYXRsMWVfY29uZmlndXJlKGFkYXB0ZXIpKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX3VwOworCX0KKworCWNsZWFyX2JpdChfX0FUX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CisJbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOworCWF0bDFlX2lycV9lbmFibGUoYWRhcHRlcik7CisJdmFsID0gQVRfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTUFTVEVSX0NUUkwpOworCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19NQVNURVJfQ1RSTCwKKwkJICAgICAgdmFsIHwgTUFTVEVSX0NUUkxfTUFOVUFMX0lOVCk7CisKK2Vycl91cDoKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGF0bDFlX2Rvd24oc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCS8qIHNpZ25hbCB0aGF0IHdlJ3JlIGRvd24gc28gdGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgbm90CisJICogcmVzY2hlZHVsZSBvdXIgd2F0Y2hkb2cgdGltZXIgKi8KKwlzZXRfYml0KF9fQVRfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKTsKKworI2lmZGVmIE5FVElGX0ZfTExUWAorCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKyNlbHNlCisJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOworI2VuZGlmCisKKwkvKiByZXNldCBNQUMgdG8gZGlzYWJsZSBhbGwgUlgvVFggKi8KKwlhdGwxZV9yZXNldF9odygmYWRhcHRlci0+aHcpOworCW1zbGVlcCgxKTsKKworCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJYXRsMWVfZGVsX3RpbWVyKGFkYXB0ZXIpOworCWF0bDFlX2lycV9kaXNhYmxlKGFkYXB0ZXIpOworCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gU1BFRURfMDsKKwlhZGFwdGVyLT5saW5rX2R1cGxleCA9IC0xOworCWF0bDFlX2NsZWFuX3R4X3JpbmcoYWRhcHRlcik7CisJYXRsMWVfY2xlYW5fcnhfcmluZyhhZGFwdGVyKTsKK30KKworLyoKKyAqIGF0bDFlX29wZW4gLSBDYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUgYWN0aXZlCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKKyAqCisgKiBUaGUgb3BlbiBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUKKyAqIGFjdGl2ZSBieSB0aGUgc3lzdGVtIChJRkZfVVApLiAgQXQgdGhpcyBwb2ludCBhbGwgcmVzb3VyY2VzIG5lZWRlZAorICogZm9yIHRyYW5zbWl0IGFuZCByZWNlaXZlIG9wZXJhdGlvbnMgYXJlIGFsbG9jYXRlZCwgdGhlIGludGVycnVwdAorICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIE9TLCB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgc3RhcnRlZCwKKyAqIGFuZCB0aGUgc3RhY2sgaXMgbm90aWZpZWQgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5LgorICovCitzdGF0aWMgaW50IGF0bDFlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGVycjsKKworCS8qIGRpc2FsbG93IG9wZW4gZHVyaW5nIHRlc3QgKi8KKwlpZiAodGVzdF9iaXQoX19BVF9URVNUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogYWxsb2NhdGUgcngvdHggZG1hIGJ1ZmZlciAmIGRlc2NyaXB0b3JzICovCisJYXRsMWVfaW5pdF9yaW5nX3Jlc291cmNlcyhhZGFwdGVyKTsKKwllcnIgPSBhdGwxZV9zZXR1cF9yaW5nX3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGF0bDFlX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIGVycl9yZXFfaXJxOworCisJZXJyID0gYXRsMWVfdXAoYWRhcHRlcik7CisJaWYgKHVubGlrZWx5KGVycikpCisJCWdvdG8gZXJyX3VwOworCisJcmV0dXJuIDA7CisKK2Vycl91cDoKKwlhdGwxZV9mcmVlX2lycShhZGFwdGVyKTsKK2Vycl9yZXFfaXJxOgorCWF0bDFlX2ZyZWVfcmluZ19yZXNvdXJjZXMoYWRhcHRlcik7CisJYXRsMWVfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBhdGwxZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAsIHRoaXMgaXMgbm90IGFsbG93ZWQgdG8gZmFpbAorICoKKyAqIFRoZSBjbG9zZSBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbiBhbiBpbnRlcmZhY2UgaXMgZGUtYWN0aXZhdGVkCisgKiBieSB0aGUgT1MuICBUaGUgaGFyZHdhcmUgaXMgc3RpbGwgdW5kZXIgdGhlIGRyaXZlcnMgY29udHJvbCwgYnV0CisgKiBuZWVkcyB0byBiZSBkaXNhYmxlZC4gIEEgZ2xvYmFsIE1BQyByZXNldCBpcyBpc3N1ZWQgdG8gc3RvcCB0aGUKKyAqIGhhcmR3YXJlLCBhbmQgYWxsIHRyYW5zbWl0IGFuZCByZWNlaXZlIHJlc291cmNlcyBhcmUgZnJlZWQuCisgKi8KK3N0YXRpYyBpbnQgYXRsMWVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlXQVJOX09OKHRlc3RfYml0KF9fQVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpKTsKKwlhdGwxZV9kb3duKGFkYXB0ZXIpOworCWF0bDFlX2ZyZWVfaXJxKGFkYXB0ZXIpOworCWF0bDFlX2ZyZWVfcmluZ19yZXNvdXJjZXMoYWRhcHRlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGwxZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGF0bDFlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgY3RybCA9IDA7CisJdTMyIG1hY19jdHJsX2RhdGEgPSAwOworCXUzMiB3b2xfY3RybF9kYXRhID0gMDsKKwl1MTYgbWlpX2FkdmVydGlzZV9kYXRhID0gMDsKKwl1MTYgbWlpX2Jtc3JfZGF0YSA9IDA7CisJdTE2IG1paV9pbnRyX3N0YXR1c19kYXRhID0gMDsKKwl1MzIgd3VmYyA9IGFkYXB0ZXItPndvbDsKKwl1MzIgaTsKKyNpZmRlZiBDT05GSUdfUE0KKwlpbnQgcmV0dmFsID0gMDsKKyNlbmRpZgorCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlXQVJOX09OKHRlc3RfYml0KF9fQVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpKTsKKwkJYXRsMWVfZG93bihhZGFwdGVyKTsKKwl9CisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisjaWZkZWYgQ09ORklHX1BNCisJcmV0dmFsID0gcGNpX3NhdmVfc3RhdGUocGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKyNlbmRpZgorCisJaWYgKHd1ZmMpIHsKKwkJLyogZ2V0IGxpbmsgc3RhdHVzICovCisJCWF0bDFlX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsICh1MTYgKikmbWlpX2Jtc3JfZGF0YSk7CisJCWF0bDFlX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsICh1MTYgKikmbWlpX2Jtc3JfZGF0YSk7CisKKwkJbWlpX2FkdmVydGlzZV9kYXRhID0gTUlJX0FSXzEwVF9IRF9DQVBTOworCisJCWlmICgoYXRsMWVfd3JpdGVfcGh5X3JlZyhodywgTUlJX0FUMDAxX0NSLCAwKSAhPSAwKSB8fAorCQkgICAgKGF0bDFlX3dyaXRlX3BoeV9yZWcoaHcsCisJCQkgICBNSUlfQURWRVJUSVNFLCBtaWlfYWR2ZXJ0aXNlX2RhdGEpICE9IDApIHx8CisJCSAgICAoYXRsMWVfcGh5X2NvbW1pdChodykpICE9IDApIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgInNldCBwaHkgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJCWdvdG8gd29sX2RpczsKKwkJfQorCisJCWh3LT5waHlfY29uZmlndXJlZCA9IGZhbHNlOyAvKiByZS1pbml0IFBIWSB3aGVuIHJlc3VtZSAqLworCisJCS8qIHR1cm4gb24gbWFnaWMgcGFja2V0IHdvbCAqLworCQlpZiAod3VmYyAmIEFUX1dVRkNfTUFHKQorCQkJd29sX2N0cmxfZGF0YSB8PSBXT0xfTUFHSUNfRU4gfCBXT0xfTUFHSUNfUE1FX0VOOworCisJCWlmICh3dWZjICYgQVRfV1VGQ19MTktDKSB7CisJCS8qIGlmIG9yaWduYWwgbGluayBzdGF0dXMgaXMgbGluaywganVzdCB3YWl0IGZvciByZXRyaXZlIGxpbmsgKi8KKwkJCWlmIChtaWlfYm1zcl9kYXRhICYgQk1TUl9MU1RBVFVTKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IEFUX1NVU1BFTkRfTElOS19USU1FT1VUOyBpKyspIHsKKwkJCQkJbXNsZWVwKDEwMCk7CisJCQkJCWF0bDFlX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsCisJCQkJCQkJKHUxNiAqKSZtaWlfYm1zcl9kYXRhKTsKKwkJCQkJaWYgKG1paV9ibXNyX2RhdGEgJiBCTVNSX0xTVEFUVVMpCisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoKG1paV9ibXNyX2RhdGEgJiBCTVNSX0xTVEFUVVMpID09IDApCisJCQkJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCQkJCSIlczogTGluayBtYXkgY2hhbmdlIgorCQkJCQkJIndoZW4gc3VzcGVuZFxuIiwKKwkJCQkJCWF0bDFlX2RyaXZlcl9uYW1lKTsKKwkJCX0KKwkJCXdvbF9jdHJsX2RhdGEgfD0gIFdPTF9MSU5LX0NIR19FTiB8IFdPTF9MSU5LX0NIR19QTUVfRU47CisJCQkvKiBvbmx5IGxpbmsgdXAgY2FuIHdha2UgdXAgKi8KKwkJCWlmIChhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfSU5UX0NUUkwsIDB4NDAwKSAhPSAwKSB7CisJCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6IHJlYWQgd3JpdGUgcGh5ICIKKwkJCQkJCSAgInJlZ2lzdGVyIGZhaWxlZC5cbiIsCisJCQkJCQkgIGF0bDFlX2RyaXZlcl9uYW1lKTsKKwkJCQlnb3RvIHdvbF9kaXM7CisJCQl9CisJCX0KKwkJLyogY2xlYXIgcGh5IGludGVycnVwdCAqLworCQlhdGwxZV9yZWFkX3BoeV9yZWcoaHcsIE1JSV9JTlRfU1RBVFVTLCAmbWlpX2ludHJfc3RhdHVzX2RhdGEpOworCQkvKiBDb25maWcgTUFDIEN0cmwgcmVnaXN0ZXIgKi8KKwkJbWFjX2N0cmxfZGF0YSA9IE1BQ19DVFJMX1JYX0VOOworCQkvKiBzZXQgdG8gMTAvMTAwTSBoYWx0IGR1cGxleCAqLworCQltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX1NQRUVEXzEwXzEwMCA8PCBNQUNfQ1RSTF9TUEVFRF9TSElGVDsKKwkJbWFjX2N0cmxfZGF0YSB8PSAoKCh1MzIpYWRhcHRlci0+aHcucHJlYW1ibGVfbGVuICYKKwkJCQkgTUFDX0NUUkxfUFJNTEVOX01BU0spIDw8CisJCQkJIE1BQ19DVFJMX1BSTUxFTl9TSElGVCk7CisKKwkJaWYgKGFkYXB0ZXItPnZsZ3JwKQorCQkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9STVZfVkxBTjsKKworCQkvKiBtYWdpYyBwYWNrZXQgbWF5YmUgQnJvYWRjYXN0Jm11bHRpY2FzdCZVbmljYXN0IGZyYW1lICovCisJCWlmICh3dWZjICYgQVRfV1VGQ19NQUcpCisJCQltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX0JDX0VOOworCisJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCSIlczogc3VzcGVuZCBNQUM9MHgleFxuIiwKKwkJCWF0bDFlX2RyaXZlcl9uYW1lLCBtYWNfY3RybF9kYXRhKTsKKworCQlBVF9XUklURV9SRUcoaHcsIFJFR19XT0xfQ1RSTCwgd29sX2N0cmxfZGF0YSk7CisJCUFUX1dSSVRFX1JFRyhodywgUkVHX01BQ19DVFJMLCBtYWNfY3RybF9kYXRhKTsKKwkJLyogcGNpZSBwYXRjaCAqLworCQljdHJsID0gQVRfUkVBRF9SRUcoaHcsIFJFR19QQ0lFX1BIWU1JU0MpOworCQljdHJsIHw9IFBDSUVfUEhZTUlTQ19GT1JDRV9SQ1ZfREVUOworCQlBVF9XUklURV9SRUcoaHcsIFJFR19QQ0lFX1BIWU1JU0MsIGN0cmwpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIDEpOworCQlnb3RvIHN1c3BlbmRfZXhpdDsKKwl9Cit3b2xfZGlzOgorCisJLyogV09MIGRpc2FibGVkICovCisJQVRfV1JJVEVfUkVHKGh3LCBSRUdfV09MX0NUUkwsIDApOworCisJLyogcGNpZSBwYXRjaCAqLworCWN0cmwgPSBBVF9SRUFEX1JFRyhodywgUkVHX1BDSUVfUEhZTUlTQyk7CisJY3RybCB8PSBQQ0lFX1BIWU1JU0NfRk9SQ0VfUkNWX0RFVDsKKwlBVF9XUklURV9SRUcoaHcsIFJFR19QQ0lFX1BIWU1JU0MsIGN0cmwpOworCisJYXRsMWVfZm9yY2VfcHMoaHcpOworCWh3LT5waHlfY29uZmlndXJlZCA9IGZhbHNlOyAvKiByZS1pbml0IFBIWSB3aGVuIHJlc3VtZSAqLworCisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCAwKTsKKworc3VzcGVuZF9leGl0OgorCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJYXRsMWVfZnJlZV9pcnEoYWRhcHRlcik7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGF0bDFlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgZXJyOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJBVEwxZTogQ2Fubm90IGVuYWJsZSBQQ0kiCisJCQkJIiBkZXZpY2UgZnJvbSBzdXNwZW5kXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCUFUX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkVHX1dPTF9DVFJMKTsgLyogY2xlYXIgV09MIHN0YXR1cyAqLworCisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOworCisJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX1dPTF9DVFJMLCAwKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCWVyciA9IGF0bDFlX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCWF0bDFlX3Jlc2V0X2h3KCZhZGFwdGVyLT5odyk7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlhdGwxZV91cChhZGFwdGVyKTsKKworCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGF0bDFlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWF0bDFlX3N1c3BlbmQocGRldiwgUE1TR19TVVNQRU5EKTsKK30KKworc3RhdGljIGludCBhdGwxZV9pbml0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBuZXRkZXYpOworCisJbmV0ZGV2LT5pcnEgID0gcGRldi0+aXJxOworCW5ldGRldi0+b3BlbiA9ICZhdGwxZV9vcGVuOworCW5ldGRldi0+c3RvcCA9ICZhdGwxZV9jbG9zZTsKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZhdGwxZV94bWl0X2ZyYW1lOworCW5ldGRldi0+Z2V0X3N0YXRzID0gJmF0bDFlX2dldF9zdGF0czsKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZhdGwxZV9zZXRfbXVsdGk7CisJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmYXRsMWVfc2V0X21hY19hZGRyOworCW5ldGRldi0+Y2hhbmdlX210dSA9ICZhdGwxZV9jaGFuZ2VfbXR1OworCW5ldGRldi0+ZG9faW9jdGwgPSAmYXRsMWVfaW9jdGw7CisJbmV0ZGV2LT50eF90aW1lb3V0ID0gJmF0bDFlX3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEFUX1RYX1dBVENIRE9HOworCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGF0bDFlX3ZsYW5fcnhfcmVnaXN0ZXI7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9IGF0bDFlX25ldHBvbGw7CisjZW5kaWYKKwlhdGwxZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKKworCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwKKwkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGF0bDFlX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAorICogQGVudDogZW50cnkgaW4gYXRsMWVfcGNpX3RibAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKgorICogYXRsMWVfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gYWRhcHRlciBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuCisgKiBUaGUgT1MgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyaW5nIG9mIHRoZSBhZGFwdGVyIHByaXZhdGUgc3RydWN0dXJlLAorICogYW5kIGEgaGFyZHdhcmUgcmVzZXQgb2NjdXIuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bDFlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOworCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CisKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKgorCSAqIFRoZSBhdGwxZSBjaGlwIGNhbiBETUEgdG8gNjQtYml0IGFkZHJlc3NlcywgYnV0IGl0IHVzZXMgYSBzaW5nbGUKKwkgKiBzaGFyZWQgcmVnaXN0ZXIgZm9yIHRoZSBoaWdoIDMyIGJpdHMsIHNvIG9ubHkgYSBzaW5nbGUsIGFsaWduZWQsCisJICogNCBHQiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGNhbiBiZSB1c2VkIGF0IGEgdGltZS4KKwkgKgorCSAqIFN1cHBvcnRpbmcgNjQtYml0IERNQSBvbiB0aGlzIGhhcmR3YXJlIGlzIG1vcmUgdHJvdWJsZSB0aGFuIGl0J3MKKwkgKiB3b3J0aC4gIEl0IGlzIGZhciBlYXNpZXIgdG8gbGltaXQgdG8gMzItYml0IERNQSB0aGFuIHVwZGF0ZQorCSAqIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMgdG8gc3VwcG9ydCB0aGUgbWVjaGFuaWNzIHJlcXVpcmVkIGJ5IGEKKwkgKiBmaXhlZC1oaWdoLTMyLWJpdCBzeXN0ZW0uCisJICovCisJaWYgKChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSAhPSAwKSB8fAorCSAgICAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSAhPSAwKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sYWJvcnRpbmdcbiIpOworCQlnb3RvIGVycl9kbWE7CisJfQorCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBhdGwxZV9kcml2ZXJfbmFtZSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycl9wY2lfcmVnOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhdGwxZV9hZGFwdGVyKSk7CisJaWYgKG5ldGRldiA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImV0aGVyZGV2IGFsbG9jIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OworCX0KKworCWVyciA9IGF0bDFlX2luaXRfbmV0ZGV2KG5ldGRldiwgcGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0IG5ldGRldmljZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9pbml0X25ldGRldjsKKwl9CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+YmRfbnVtYmVyID0gY2FyZHNfZm91bmQ7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBkZXYgPSBwZGV2OworCWFkYXB0ZXItPmh3LmFkYXB0ZXIgPSBhZGFwdGVyOworCWFkYXB0ZXItPmh3Lmh3X2FkZHIgPSBwY2lfaW9tYXAocGRldiwgQkFSXzAsIDApOworCWlmICghYWRhcHRlci0+aHcuaHdfYWRkcikgeworCQllcnIgPSAtRUlPOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnNcbiIpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKwluZXRkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXItPmh3Lmh3X2FkZHI7CisKKwkvKiBpbml0IG1paSBkYXRhICovCisJYWRhcHRlci0+bWlpLmRldiA9IG5ldGRldjsKKwlhZGFwdGVyLT5taWkubWRpb19yZWFkICA9IGF0bDFlX21kaW9fcmVhZDsKKwlhZGFwdGVyLT5taWkubWRpb193cml0ZSA9IGF0bDFlX21kaW9fd3JpdGU7CisJYWRhcHRlci0+bWlpLnBoeV9pZF9tYXNrID0gMHgxZjsKKwlhZGFwdGVyLT5taWkucmVnX251bV9tYXNrID0gTURJT19SRUdfQUREUl9NQVNLOworCisJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwgYXRsMWVfY2xlYW4sIDY0KTsKKworCWluaXRfdGltZXIoJmFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIpOworCWFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIuZnVuY3Rpb24gPSAmYXRsMWVfcGh5X2NvbmZpZzsKKwlhZGFwdGVyLT5waHlfY29uZmlnX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKKworCS8qIGdldCB1c2VyIHNldHRpbmdzICovCisJYXRsMWVfY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKKwkvKgorCSAqIE1hcmsgYWxsIFBDSSByZWdpb25zIGFzc29jaWF0ZWQgd2l0aCBQQ0kgZGV2aWNlCisJICogcGRldiBhcyBiZWluZyByZXNlcnZlZCBieSBvd25lciBhdGwxZV9kcml2ZXJfbmFtZQorCSAqIEVuYWJsZXMgYnVzLW1hc3RlcmluZyBvbiB0aGUgZGV2aWNlIGFuZCBjYWxscworCSAqIHBjaWJpb3Nfc2V0X21hc3RlciB0byBkbyB0aGUgbmVlZGVkIGFyY2ggc3BlY2lmaWMgc2V0dGluZ3MKKwkgKi8KKwlhdGwxZV9zZXR1cF9wY2ljbWQocGRldik7CisJLyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovCisJZXJyID0gYXRsMWVfc3dfaW5pdChhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5ldCBkZXZpY2UgcHJpdmF0ZSBkYXRhIGluaXQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfc3dfaW5pdDsKKwl9CisKKwkvKiBJbml0IEdQSFkgYXMgZWFybHkgYXMgcG9zc2libGUgZHVlIHRvIHBvd2VyIHNhdmluZyBpc3N1ZSAgKi8KKwlzcGluX2xvY2soJmFkYXB0ZXItPm1kaW9fbG9jayk7CisJYXRsMWVfcGh5X2luaXQoJmFkYXB0ZXItPmh3KTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWRpb19sb2NrKTsKKwkvKiByZXNldCB0aGUgY29udHJvbGxlciB0bworCSAqIHB1dCB0aGUgZGV2aWNlIGluIGEga25vd24gZ29vZCBzdGFydGluZyBzdGF0ZSAqLworCWVyciA9IGF0bDFlX3Jlc2V0X2h3KCZhZGFwdGVyLT5odyk7CisJaWYgKGVycikgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9yZXNldDsKKwl9CisKKwlpZiAoYXRsMWVfcmVhZF9tYWNfYWRkcigmYWRhcHRlci0+aHcpICE9IDApIHsKKwkJZXJyID0gLUVJTzsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ2V0IG1hYyBhZGRyZXNzIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2VlcHJvbTsKKwl9CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+aHcubWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgYWRhcHRlci0+aHcubWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCWRldl9kYmcoJnBkZXYtPmRldiwgIm1hYyBhZGRyZXNzIDogJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMnhcbiIsCisJCQlhZGFwdGVyLT5ody5tYWNfYWRkclswXSwgYWRhcHRlci0+aHcubWFjX2FkZHJbMV0sCisJCQlhZGFwdGVyLT5ody5tYWNfYWRkclsyXSwgYWRhcHRlci0+aHcubWFjX2FkZHJbM10sCisJCQlhZGFwdGVyLT5ody5tYWNfYWRkcls0XSwgYWRhcHRlci0+aHcubWFjX2FkZHJbNV0pOworCisJSU5JVF9XT1JLKCZhZGFwdGVyLT5yZXNldF90YXNrLCBhdGwxZV9yZXNldF90YXNrKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPmxpbmtfY2hnX3Rhc2ssIGF0bDFlX2xpbmtfY2hnX3Rhc2spOworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaXN0ZXIgbmV0ZGV2aWNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX3JlZ2lzdGVyOworCX0KKworCS8qIGFzc3VtZSB3ZSBoYXZlIG5vIGxpbmsgZm9yIG5vdyAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCisJY2FyZHNfZm91bmQrKzsKKworCXJldHVybiAwOworCitlcnJfcmVzZXQ6CitlcnJfcmVnaXN0ZXI6CitlcnJfc3dfaW5pdDoKK2Vycl9lZXByb206CisJaW91bm1hcChhZGFwdGVyLT5ody5od19hZGRyKTsKK2Vycl9pbml0X25ldGRldjoKK2Vycl9pb3JlbWFwOgorCWZyZWVfbmV0ZGV2KG5ldGRldik7CitlcnJfYWxsb2NfZXRoZXJkZXY6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9wY2lfcmVnOgorZXJyX2RtYToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIGF0bDFlX3JlbW92ZSAtIERldmljZSBSZW1vdmFsIFJvdXRpbmUKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAorICoKKyAqIGF0bDFlX3JlbW92ZSBpcyBjYWxsZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gdG8gYWxlcnQgdGhlIGRyaXZlcgorICogdGhhdCBpdCBzaG91bGQgcmVsZWFzZSBhIFBDSSBkZXZpY2UuICBUaGUgY291bGQgYmUgY2F1c2VkIGJ5IGEKKyAqIEhvdC1QbHVnIGV2ZW50LCBvciBiZWNhdXNlIHRoZSBkcml2ZXIgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmcm9tCisgKiBtZW1vcnkuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBhdGwxZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKgorCSAqIGZsdXNoX3NjaGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbworCSAqIGV4cGxpY2l0bHkgZGlzYWJsZSB3YXRjaGRvZyB0YXNrcyBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkCisJICovCisJc2V0X2JpdChfX0FUX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CisKKwlhdGwxZV9kZWxfdGltZXIoYWRhcHRlcik7CisJYXRsMWVfY2FuY2VsX3dvcmsoYWRhcHRlcik7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWF0bDFlX2ZyZWVfcmluZ19yZXNvdXJjZXMoYWRhcHRlcik7CisJYXRsMWVfZm9yY2VfcHMoJmFkYXB0ZXItPmh3KTsKKwlpb3VubWFwKGFkYXB0ZXItPmh3Lmh3X2FkZHIpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKKy8qCisgKiBhdGwxZV9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZAorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdAorYXRsMWVfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCWF0bDFlX2Rvd24oYWRhcHRlcik7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwkvKiBSZXF1ZXN0IGEgc2xvdCBzbG90IHJlc2V0LiAqLworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCisvKgorICogYXRsMWVfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4gSW1wbGVtZW50YXRpb24KKyAqIHJlc2VtYmxlcyB0aGUgZmlyc3QtaGFsZiBvZiB0aGUgZTEwMDBfcmVzdW1lIHJvdXRpbmUuCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGF0bDFlX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCSAgICAgICAiQVRMMWU6IENhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CisKKwlhdGwxZV9yZXNldF9odygmYWRhcHRlci0+aHcpOworCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworLyoKKyAqIGF0bDFlX2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXQKKyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4gSW1wbGVtZW50YXRpb24gcmVzZW1ibGVzIHRoZQorICogc2Vjb25kLWhhbGYgb2YgdGhlIGF0bDFlX3Jlc3VtZSByb3V0aW5lLgorICovCitzdGF0aWMgdm9pZCBhdGwxZV9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJaWYgKGF0bDFlX3VwKGFkYXB0ZXIpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkgICJBVEwxZTogY2FuJ3QgYnJpbmcgZGV2aWNlIGJhY2sgdXAgYWZ0ZXIgcmVzZXRcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBhdGwxZV9lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBhdGwxZV9pb19lcnJvcl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldCA9IGF0bDFlX2lvX3Nsb3RfcmVzZXQsCisJLnJlc3VtZSA9IGF0bDFlX2lvX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhdGwxZV9kcml2ZXIgPSB7CisJLm5hbWUgICAgID0gYXRsMWVfZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0gYXRsMWVfcGNpX3RibCwKKwkucHJvYmUgICAgPSBhdGwxZV9wcm9iZSwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChhdGwxZV9yZW1vdmUpLAorCS8qIFBvd2VyIE1hbmFnbWVudCBIb29rcyAqLworI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kICA9IGF0bDFlX3N1c3BlbmQsCisJLnJlc3VtZSAgID0gYXRsMWVfcmVzdW1lLAorI2VuZGlmCisJLnNodXRkb3duID0gYXRsMWVfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJmF0bDFlX2Vycl9oYW5kbGVyCit9OworCisvKgorICogYXRsMWVfaW5pdF9tb2R1bGUgLSBEcml2ZXIgUmVnaXN0cmF0aW9uIFJvdXRpbmUKKyAqCisgKiBhdGwxZV9pbml0X21vZHVsZSBpcyB0aGUgZmlyc3Qgcm91dGluZSBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzCisgKiBsb2FkZWQuIEFsbCBpdCBkb2VzIGlzIHJlZ2lzdGVyIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGF0bDFlX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmF0bDFlX2RyaXZlcik7Cit9CisKKy8qCisgKiBhdGwxZV9leGl0X21vZHVsZSAtIERyaXZlciBFeGl0IENsZWFudXAgUm91dGluZQorICoKKyAqIGF0bDFlX2V4aXRfbW9kdWxlIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgZHJpdmVyIGlzIHJlbW92ZWQKKyAqIGZyb20gbWVtb3J5LgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRsMWVfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0bDFlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGF0bDFlX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGF0bDFlX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MmFiYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDcgQXRoZXJvcyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXJpdmVkIGZyb20gSW50ZWwgZTEwMDAgZHJpdmVyCisgKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaW5jbHVkZSAiYXRsMWUuaCIKKworLyogVGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gYWRqdXN0IHRoZQorICogbWF4aW11bSBudW1iZXIgb2YgcG9ydHMgdGhhdCB0aGUgZHJpdmVyIGNhbiBtYW5hZ2UuCisgKi8KKworI2RlZmluZSBBVEwxRV9NQVhfTklDIDMyCisKKyNkZWZpbmUgT1BUSU9OX1VOU0VUICAgIC0xCisjZGVmaW5lIE9QVElPTl9ESVNBQkxFRCAwCisjZGVmaW5lIE9QVElPTl9FTkFCTEVEICAxCisKKy8qIEFsbCBwYXJhbWV0ZXJzIGFyZSB0cmVhdGVkIHRoZSBzYW1lLCBhcyBhbiBpbnRlZ2VyIGFycmF5IG9mIHZhbHVlcy4KKyAqIFRoaXMgbWFjcm8ganVzdCByZWR1Y2VzIHRoZSBuZWVkIHRvIHJlcGVhdCB0aGUgc2FtZSBkZWNsYXJhdGlvbiBjb2RlCisgKiBvdmVyIGFuZCBvdmVyIChwbHVzIHRoaXMgaGVscHMgdG8gYXZvaWQgdHlwbyBidWdzKS4KKyAqLworI2RlZmluZSBBVEwxRV9QQVJBTV9JTklUIHsgWzAgLi4uIEFUTDFFX01BWF9OSUNdID0gT1BUSU9OX1VOU0VUIH0KKworI2RlZmluZSBBVEwxRV9QQVJBTSh4LCBkZXNjKSBcCisJc3RhdGljIGludCBfX2RldmluaXRkYXRhIHhbQVRMMUVfTUFYX05JQyArIDFdID0gQVRMMUVfUEFSQU1fSU5JVDsgXAorCXN0YXRpYyBpbnQgbnVtXyMjeDsgXAorCW1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZCh4LCB4LCBpbnQsICZudW1fIyN4LCAwKTsgXAorCU1PRFVMRV9QQVJNX0RFU0MoeCwgZGVzYyk7CisKKy8qIFRyYW5zbWl0IE1lbW9yeSBjb3VudAorICoKKyAqIFZhbGlkIFJhbmdlOiA2NC0yMDQ4CisgKgorICogRGVmYXVsdCBWYWx1ZTogMTI4CisgKi8KKyNkZWZpbmUgQVRMMUVfTUlOX1RYX0RFU0NfQ05UCQkzMgorI2RlZmluZSBBVEwxRV9NQVhfVFhfREVTQ19DTlQJCTEwMjAKKyNkZWZpbmUgQVRMMUVfREVGQVVMVF9UWF9ERVNDX0NOVAkxMjgKK0FUTDFFX1BBUkFNKHR4X2Rlc2NfY250LCAiVHJhbnNtaXQgZGVzY3JpcHRpb24gY291bnQiKTsKKworLyogUmVjZWl2ZSBNZW1vcnkgQmxvY2sgQ291bnQKKyAqCisgKiBWYWxpZCBSYW5nZTogMTYtNTEyCisgKgorICogRGVmYXVsdCBWYWx1ZTogMTI4CisgKi8KKyNkZWZpbmUgQVRMMUVfTUlOX1JYX01FTV9TSVpFCQk4ICAgIC8qIDhLQiAgICovCisjZGVmaW5lIEFUTDFFX01BWF9SWF9NRU1fU0laRQkJMTAyNCAvKiAxTUIgICAqLworI2RlZmluZSBBVEwxRV9ERUZBVUxUX1JYX01FTV9TSVpFCTI1NiAgLyogMTI4S0IgKi8KK0FUTDFFX1BBUkFNKHJ4X21lbV9zaXplLCAibWVtb3J5IHNpemUgb2YgcnggYnVmZmVyKEtCKSIpOworCisvKiBVc2VyIFNwZWNpZmllZCBNZWRpYVR5cGUgT3ZlcnJpZGUKKyAqCisgKiBWYWxpZCBSYW5nZTogMC01CisgKiAgLSAwICAgIC0gYXV0by1uZWdvdGlhdGUgYXQgYWxsIHN1cHBvcnRlZCBzcGVlZHMKKyAqICAtIDEgICAgLSBvbmx5IGxpbmsgYXQgMTAwTWJwcyBGdWxsIER1cGxleAorICogIC0gMiAgICAtIG9ubHkgbGluayBhdCAxMDBNYnBzIEhhbGYgRHVwbGV4CisgKiAgLSAzICAgIC0gb25seSBsaW5rIGF0IDEwTWJwcyBGdWxsIER1cGxleAorICogIC0gNCAgICAtIG9ubHkgbGluayBhdCAxME1icHMgSGFsZiBEdXBsZXgKKyAqIERlZmF1bHQgVmFsdWU6IDAKKyAqLworCitBVEwxRV9QQVJBTShtZWRpYV90eXBlLCAiTWVkaWFUeXBlIFNlbGVjdCIpOworCisvKiBJbnRlcnJ1cHQgTW9kZXJhdGUgVGltZXIgaW4gdW5pdHMgb2YgMiB1cworICoKKyAqIFZhbGlkIFJhbmdlOiAxMC02NTUzNQorICoKKyAqIERlZmF1bHQgVmFsdWU6IDQ1MDAwKDkwbXMpCisgKi8KKyNkZWZpbmUgSU5UX01PRF9ERUZBVUxUX0NOVCAgICAgICAgICAgICAxMDAgLyogMjAwdXMgKi8KKyNkZWZpbmUgSU5UX01PRF9NQVhfQ05UICAgICAgICAgICAgICAgICA2NTAwMAorI2RlZmluZSBJTlRfTU9EX01JTl9DTlQgICAgICAgICAgICAgICAgIDUwCitBVEwxRV9QQVJBTShpbnRfbW9kX3RpbWVyLCAiSW50ZXJydXB0IE1vZGVyYXRvciBUaW1lciIpOworCisjZGVmaW5lIEFVVE9ORUdfQURWX0RFRkFVTFQgIDB4MkYKKyNkZWZpbmUgQVVUT05FR19BRFZfTUFTSyAgICAgMHgyRgorI2RlZmluZSBGTE9XX0NPTlRST0xfREVGQVVMVCBGTE9XX0NPTlRST0xfRlVMTAorCisjZGVmaW5lIEZMQVNIX1ZFTkRPUl9ERUZBVUxUICAgIDAKKyNkZWZpbmUgRkxBU0hfVkVORE9SX01JTiAgICAgICAgMAorI2RlZmluZSBGTEFTSF9WRU5ET1JfTUFYICAgICAgICAyCisKK3N0cnVjdCBhdGwxZV9vcHRpb24geworCWVudW0geyBlbmFibGVfb3B0aW9uLCByYW5nZV9vcHRpb24sIGxpc3Rfb3B0aW9uIH0gdHlwZTsKKwljaGFyICpuYW1lOworCWNoYXIgKmVycjsKKwlpbnQgIGRlZjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7IC8qIHJhbmdlX29wdGlvbiBpbmZvICovCisJCQlpbnQgbWluOworCQkJaW50IG1heDsKKwkJfSByOworCQlzdHJ1Y3QgeyAvKiBsaXN0X29wdGlvbiBpbmZvICovCisJCQlpbnQgbnI7CisJCQlzdHJ1Y3QgYXRsMWVfb3B0X2xpc3QgeyBpbnQgaTsgY2hhciAqc3RyOyB9ICpwOworCQl9IGw7CisJfSBhcmc7Cit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxZV92YWxpZGF0ZV9vcHRpb24oaW50ICp2YWx1ZSwgc3RydWN0IGF0bDFlX29wdGlvbiAqb3B0LCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAoKnZhbHVlID09IE9QVElPTl9VTlNFVCkgeworCQkqdmFsdWUgPSBvcHQtPmRlZjsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChvcHQtPnR5cGUpIHsKKwljYXNlIGVuYWJsZV9vcHRpb246CisJCXN3aXRjaCAoKnZhbHVlKSB7CisJCWNhc2UgT1BUSU9OX0VOQUJMRUQ6CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgRW5hYmxlZFxuIiwgb3B0LT5uYW1lKTsKKwkJCXJldHVybiAwOworCQljYXNlIE9QVElPTl9ESVNBQkxFRDoKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyBEaXNhYmxlZFxuIiwgb3B0LT5uYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCWNhc2UgcmFuZ2Vfb3B0aW9uOgorCQlpZiAoKnZhbHVlID49IG9wdC0+YXJnLnIubWluICYmICp2YWx1ZSA8PSBvcHQtPmFyZy5yLm1heCkgeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHNldCB0byAlaVxuIiwgb3B0LT5uYW1lLCAqdmFsdWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBsaXN0X29wdGlvbjp7CisJCQlpbnQgaTsKKwkJCXN0cnVjdCBhdGwxZV9vcHRfbGlzdCAqZW50OworCisJCQlmb3IgKGkgPSAwOyBpIDwgb3B0LT5hcmcubC5ucjsgaSsrKSB7CisJCQkJZW50ID0gJm9wdC0+YXJnLmwucFtpXTsKKwkJCQlpZiAoKnZhbHVlID09IGVudC0+aSkgeworCQkJCQlpZiAoZW50LT5zdHJbMF0gIT0gJ1wwJykKKwkJCQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlc1xuIiwKKwkJCQkJCQllbnQtPnN0cik7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludmFsaWQgJXMgc3BlY2lmaWVkICglaSkgJXNcbiIsCisJCQlvcHQtPm5hbWUsICp2YWx1ZSwgb3B0LT5lcnIpOworCSp2YWx1ZSA9IG9wdC0+ZGVmOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIGF0bDFlX2NoZWNrX29wdGlvbnMgLSBSYW5nZSBDaGVja2luZyBmb3IgQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgYWxsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGZvciB2YWxpZCB1c2VyCisgKiBpbnB1dC4gIElmIGFuIGludmFsaWQgdmFsdWUgaXMgZ2l2ZW4sIG9yIGlmIG5vIHVzZXIgc3BlY2lmaWVkCisgKiB2YWx1ZSBleGlzdHMsIGEgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkLiAgVGhlIGZpbmFsIHZhbHVlIGlzIHN0b3JlZAorICogaW4gYSB2YXJpYWJsZSBpbiB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgX19kZXZpbml0IGF0bDFlX2NoZWNrX29wdGlvbnMoc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBiZCA9IGFkYXB0ZXItPmJkX251bWJlcjsKKwlpZiAoYmQgPj0gQVRMMUVfTUFYX05JQykgeworCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJubyBjb25maWd1cmF0aW9uIGZvciBib2FyZCAjJWlcbiIsIGJkKTsKKwkJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAiVXNpbmcgZGVmYXVsdHMgZm9yIGFsbCB2YWx1ZXNcbiIpOworCX0KKworCXsgCQkvKiBUcmFuc21pdCBSaW5nIFNpemUgKi8KKwkJc3RydWN0IGF0bDFlX29wdGlvbiBvcHQgPSB7CisJCQkudHlwZSA9IHJhbmdlX29wdGlvbiwKKwkJCS5uYW1lID0gIlRyYW5zbWl0IERkZXNjcmlwdGlvbiBDb3VudCIsCisJCQkuZXJyICA9ICJ1c2luZyBkZWZhdWx0IG9mICIKKwkJCQlfX01PRFVMRV9TVFJJTkcoQVRMMUVfREVGQVVMVF9UWF9ERVNDX0NOVCksCisJCQkuZGVmICA9IEFUTDFFX0RFRkFVTFRfVFhfREVTQ19DTlQsCisJCQkuYXJnICA9IHsgLnIgPSB7IC5taW4gPSBBVEwxRV9NSU5fVFhfREVTQ19DTlQsCisJCQkJCSAubWF4ID0gQVRMMUVfTUFYX1RYX0RFU0NfQ05UfSB9CisJCX07CisJCWludCB2YWw7CisJCWlmIChudW1fdHhfZGVzY19jbnQgPiBiZCkgeworCQkJdmFsID0gdHhfZGVzY19jbnRbYmRdOworCQkJYXRsMWVfdmFsaWRhdGVfb3B0aW9uKCZ2YWwsICZvcHQsIHBkZXYpOworCQkJYWRhcHRlci0+dHhfcmluZy5jb3VudCA9ICh1MTYpIHZhbCAmIDB4RkZGQzsKKwkJfSBlbHNlCisJCQlhZGFwdGVyLT50eF9yaW5nLmNvdW50ID0gKHUxNilvcHQuZGVmOworCX0KKworCXsgCQkvKiBSZWNlaXZlIE1lbW9yeSBCbG9jayBDb3VudCAqLworCQlzdHJ1Y3QgYXRsMWVfb3B0aW9uIG9wdCA9IHsKKwkJCS50eXBlID0gcmFuZ2Vfb3B0aW9uLAorCQkJLm5hbWUgPSAiTWVtb3J5IHNpemUgb2YgcnggYnVmZmVyKEtCKSIsCisJCQkuZXJyICA9ICJ1c2luZyBkZWZhdWx0IG9mICIKKwkJCQlfX01PRFVMRV9TVFJJTkcoQVRMMUVfREVGQVVMVF9SWF9NRU1fU0laRSksCisJCQkuZGVmICA9IEFUTDFFX0RFRkFVTFRfUlhfTUVNX1NJWkUsCisJCQkuYXJnICA9IHsgLnIgPSB7IC5taW4gPSBBVEwxRV9NSU5fUlhfTUVNX1NJWkUsCisJCQkJCSAubWF4ID0gQVRMMUVfTUFYX1JYX01FTV9TSVpFfSB9CisJCX07CisJCWludCB2YWw7CisJCWlmIChudW1fcnhfbWVtX3NpemUgPiBiZCkgeworCQkJdmFsID0gcnhfbWVtX3NpemVbYmRdOworCQkJYXRsMWVfdmFsaWRhdGVfb3B0aW9uKCZ2YWwsICZvcHQsIHBkZXYpOworCQkJYWRhcHRlci0+cnhfcmluZy5wYWdlX3NpemUgPSAodTMyKXZhbCAqIDEwMjQ7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5yeF9yaW5nLnBhZ2Vfc2l6ZSA9ICh1MzIpb3B0LmRlZiAqIDEwMjQ7CisJCX0KKwl9CisKKwl7IAkJLyogSW50ZXJydXB0IE1vZGVyYXRlIFRpbWVyICovCisJCXN0cnVjdCBhdGwxZV9vcHRpb24gb3B0ID0geworCQkJLnR5cGUgPSByYW5nZV9vcHRpb24sCisJCQkubmFtZSA9ICJJbnRlcnJ1cHQgTW9kZXJhdGUgVGltZXIiLAorCQkJLmVyciAgPSAidXNpbmcgZGVmYXVsdCBvZiAiCisJCQkJX19NT0RVTEVfU1RSSU5HKElOVF9NT0RfREVGQVVMVF9DTlQpLAorCQkJLmRlZiAgPSBJTlRfTU9EX0RFRkFVTFRfQ05ULAorCQkJLmFyZyAgPSB7IC5yID0geyAubWluID0gSU5UX01PRF9NSU5fQ05ULAorCQkJCQkgLm1heCA9IElOVF9NT0RfTUFYX0NOVH0gfQorCQl9IDsKKwkJaW50IHZhbDsKKwkJaWYgKG51bV9pbnRfbW9kX3RpbWVyID4gYmQpIHsKKwkJCXZhbCA9IGludF9tb2RfdGltZXJbYmRdOworCQkJYXRsMWVfdmFsaWRhdGVfb3B0aW9uKCZ2YWwsICZvcHQsIHBkZXYpOworCQkJYWRhcHRlci0+aHcuaW10ID0gKHUxNikgdmFsOworCQl9IGVsc2UKKwkJCWFkYXB0ZXItPmh3LmltdCA9ICh1MTYpKG9wdC5kZWYpOworCX0KKworCXsgCQkvKiBNZWRpYVR5cGUgKi8KKwkJc3RydWN0IGF0bDFlX29wdGlvbiBvcHQgPSB7CisJCQkudHlwZSA9IHJhbmdlX29wdGlvbiwKKwkJCS5uYW1lID0gIlNwZWVkL0R1cGxleCBTZWxlY3Rpb24iLAorCQkJLmVyciAgPSAidXNpbmcgZGVmYXVsdCBvZiAiCisJCQkJX19NT0RVTEVfU1RSSU5HKE1FRElBX1RZUEVfQVVUT19TRU5TT1IpLAorCQkJLmRlZiAgPSBNRURJQV9UWVBFX0FVVE9fU0VOU09SLAorCQkJLmFyZyAgPSB7IC5yID0geyAubWluID0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUiwKKwkJCQkJIC5tYXggPSBNRURJQV9UWVBFXzEwTV9IQUxGfSB9CisJCX0gOworCQlpbnQgdmFsOworCQlpZiAobnVtX21lZGlhX3R5cGUgPiBiZCkgeworCQkJdmFsID0gbWVkaWFfdHlwZVtiZF07CisJCQlhdGwxZV92YWxpZGF0ZV9vcHRpb24oJnZhbCwgJm9wdCwgcGRldik7CisJCQlhZGFwdGVyLT5ody5tZWRpYV90eXBlID0gKHUxNikgdmFsOworCQl9IGVsc2UKKwkJCWFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPSAodTE2KShvcHQuZGVmKTsKKworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKaW5kZXggM2M3OThhZS4uZjEyZTNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKQEAgLTEzMDgsNyArMTMwOCw2IEBACiAJCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgImxpbmsgaXMgZG93blxuIik7CiAJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gU1BFRURfMDsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTM1OCw3ICsxMzU3LDYgQEAKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJCS8qIExpbmsgZG93biAtPiBVcCAqLwogCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwotCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwogCQl9CiAJCXJldHVybiAwOwogCX0KQEAgLTE4NTksNyArMTg1Nyw4IEBACiAKIAkJcmZkX2Rlc2MgPSBBVEwxX1JGRF9ERVNDKHJmZF9yaW5nLCByZmRfbmV4dF90b191c2UpOwogCi0JCXNrYiA9IGRldl9hbGxvY19za2IoYWRhcHRlci0+cnhfYnVmZmVyX2xlbiArIE5FVF9JUF9BTElHTik7CisJCXNrYiA9IG5ldGRldl9hbGxvY19za2IoYWRhcHRlci0+bmV0ZGV2LAorCQkJCSAgICAgICBhZGFwdGVyLT5yeF9idWZmZXJfbGVuICsgTkVUX0lQX0FMSUdOKTsKIAkJaWYgKHVubGlrZWx5KCFza2IpKSB7CiAJCQkvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kICovCiAJCQlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZHJvcHBlZCsrOwpAQCAtMjYyNiw2ICsyNjI1LDcgQEAKIAltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKIAlhdGx4X2lycV9lbmFibGUoYWRhcHRlcik7CiAJYXRsMV9jaGVja19saW5rKGFkYXB0ZXIpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAJcmV0dXJuIDA7CiAKIGVycl91cDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCA3MDIzZDc3Li5jYjhiZTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC05MTEsOSArOTExLDggQEAKIAlpZihwaHlkZXYtPmxpbmsgIT0gYXVwLT5vbGRfbGluaykgewogCQkvLyBsaW5rIHN0YXRlIGNoYW5nZWQKIAotCQlpZiAocGh5ZGV2LT5saW5rKSAvLyBsaW5rIHdlbnQgdXAKLQkJCW5ldGlmX3NjaGVkdWxlKGRldik7Ci0JCWVsc2UgeyAvLyBsaW5rIHdlbnQgZG93bgorCQlpZiAoIXBoeWRldi0+bGluaykgeworCQkJLyogbGluayB3ZW50IGRvd24gKi8KIAkJCWF1cC0+b2xkX3NwZWVkID0gMDsKIAkJCWF1cC0+b2xkX2R1cGxleCA9IC0xOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IDU5ZGNlNmEuLmMzYmRhNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2I0NC5jCisrKyBiL2RyaXZlcnMvbmV0L2I0NC5jCkBAIC0xNDgsOSArMTQ4LDkgQEAKIAkJCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHNkZXYtPmRtYV9kZXYsIGRtYV9iYXNlLAotCQkJCQkgb2Zmc2V0ICYgZG1hX2Rlc2NfYWxpZ25fbWFzaywKLQkJCQkJIGRtYV9kZXNjX3N5bmNfc2l6ZSwgZGlyKTsKKwlzc2JfZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc2RldiwgZG1hX2Jhc2UsCisJCQkJCSAgICAgb2Zmc2V0ICYgZG1hX2Rlc2NfYWxpZ25fbWFzaywKKwkJCQkJICAgICBkbWFfZGVzY19zeW5jX3NpemUsIGRpcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBiNDRfc3luY19kbWFfZGVzY19mb3JfY3B1KHN0cnVjdCBzc2JfZGV2aWNlICpzZGV2LApAQCAtMTU4LDkgKzE1OCw5IEBACiAJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHNkZXYtPmRtYV9kZXYsIGRtYV9iYXNlLAotCQkJCSAgICAgIG9mZnNldCAmIGRtYV9kZXNjX2FsaWduX21hc2ssCi0JCQkJICAgICAgZG1hX2Rlc2Nfc3luY19zaXplLCBkaXIpOworCXNzYl9kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzZGV2LCBkbWFfYmFzZSwKKwkJCQkJICBvZmZzZXQgJiBkbWFfZGVzY19hbGlnbl9tYXNrLAorCQkJCQkgIGRtYV9kZXNjX3N5bmNfc2l6ZSwgZGlyKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJyMzIoY29uc3Qgc3RydWN0IGI0NCAqYnAsIHVuc2lnbmVkIGxvbmcgcmVnKQpAQCAtNjEzLDEwICs2MTMsMTAgQEAKIAogCQlCVUdfT04oc2tiID09IE5VTEwpOwogCi0JCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsCi0JCQkJIHJwLT5tYXBwaW5nLAotCQkJCSBza2ItPmxlbiwKLQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LAorCQkJCSAgICAgcnAtPm1hcHBpbmcsCisJCQkJICAgICBza2ItPmxlbiwKKwkJCQkgICAgIERNQV9UT19ERVZJQ0UpOwogCQlycC0+c2tiID0gTlVMTDsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAl9CkBAIC02NTMsMjkgKzY1MywyOSBAQAogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIHNrYi0+ZGF0YSwKLQkJCQkgUlhfUEtUX0JVRl9TWiwKLQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwltYXBwaW5nID0gc3NiX2RtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LCBza2ItPmRhdGEsCisJCQkJICAgICBSWF9QS1RfQlVGX1NaLAorCQkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKIAogCS8qIEhhcmR3YXJlIGJ1ZyB3b3JrLWFyb3VuZCwgdGhlIGNoaXAgaXMgdW5hYmxlIHRvIGRvIFBDSSBETUEKIAkgICB0by9mcm9tIGFueXRoaW5nIGFib3ZlIDFHQiA6LSggKi8KLQlpZiAoZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykgfHwKKwlpZiAoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCBtYXBwaW5nKSB8fAogCQltYXBwaW5nICsgUlhfUEtUX0JVRl9TWiA+IERNQV8zMEJJVF9NQVNLKSB7CiAJCS8qIFNpZ2guLi4gKi8KLQkJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSkKLQkJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIG1hcHBpbmcsCi0JCQkJCVJYX1BLVF9CVUZfU1osIERNQV9GUk9NX0RFVklDRSk7CisJCWlmICghc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCBtYXBwaW5nKSkKKwkJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LCBtYXBwaW5nLAorCQkJCQkgICAgIFJYX1BLVF9CVUZfU1osIERNQV9GUk9NX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LCBSWF9QS1RfQlVGX1NaLCBHRlBfQVRPTUlDfEdGUF9ETUEpOwogCQlpZiAoc2tiID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBza2ItPmRhdGEsCi0JCQkJCSBSWF9QS1RfQlVGX1NaLAotCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpIHx8CisJCW1hcHBpbmcgPSBzc2JfZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYsIHNrYi0+ZGF0YSwKKwkJCQkJICAgICBSWF9QS1RfQlVGX1NaLAorCQkJCQkgICAgIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChzc2JfZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYsIG1hcHBpbmcpIHx8CiAJCQltYXBwaW5nICsgUlhfUEtUX0JVRl9TWiA+IERNQV8zMEJJVF9NQVNLKSB7Ci0JCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpKQotCQkJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIG1hcHBpbmcsIFJYX1BLVF9CVUZfU1osRE1BX0ZST01fREVWSUNFKTsKKwkJCWlmICghc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCBtYXBwaW5nKSkKKwkJCQlzc2JfZG1hX3VubWFwX3NpbmdsZShicC0+c2RldiwgbWFwcGluZywgUlhfUEtUX0JVRl9TWixETUFfRlJPTV9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC03NTAsOSArNzUwLDkgQEAKIAkJCQkJICAgICBkZXN0X2lkeCAqIHNpemVvZihkZXN0X2Rlc2MpLAogCQkJCQkgICAgIERNQV9CSURJUkVDVElPTkFMKTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5zZGV2LT5kbWFfZGV2LCBsZTMyX3RvX2NwdShzcmNfZGVzYy0+YWRkciksCi0JCQkJICAgUlhfUEtUX0JVRl9TWiwKLQkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOworCXNzYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+c2RldiwgbGUzMl90b19jcHUoc3JjX2Rlc2MtPmFkZHIpLAorCQkJCSAgICAgICBSWF9QS1RfQlVGX1NaLAorCQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOwogfQogCiBzdGF0aWMgaW50IGI0NF9yeChzdHJ1Y3QgYjQ0ICpicCwgaW50IGJ1ZGdldCkKQEAgLTc3Miw3ICs3NzIsNyBAQAogCQlzdHJ1Y3QgcnhfaGVhZGVyICpyaDsKIAkJdTE2IGxlbjsKIAotCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShicC0+c2Rldi0+ZG1hX2RldiwgbWFwLAorCQlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYnAtPnNkZXYsIG1hcCwKIAkJCQkJICAgIFJYX1BLVF9CVUZfU1osCiAJCQkJCSAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQlyaCA9IChzdHJ1Y3QgcnhfaGVhZGVyICopIHNrYi0+ZGF0YTsKQEAgLTgwNiw4ICs4MDYsOCBAQAogCQkJc2tiX3NpemUgPSBiNDRfYWxsb2Nfcnhfc2tiKGJwLCBjb25zLCBicC0+cnhfcHJvZCk7CiAJCQlpZiAoc2tiX3NpemUgPCAwKQogCQkJCWdvdG8gZHJvcF9pdDsKLQkJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIG1hcCwKLQkJCQkJIHNrYl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCQkJc3NiX2RtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYsIG1hcCwKKwkJCQkJICAgICBza2Jfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAkJCS8qIExlYXZlIG91dCByeF9oZWFkZXIgKi8KICAgICAgICAgICAgICAgICAJc2tiX3B1dChza2IsIGxlbiArIFJYX1BLVF9PRkZTRVQpOwogICAgICAgICAgICAgCSAgICAgICAgc2tiX3B1bGwoc2tiLCBSWF9QS1RfT0ZGU0VUKTsKQEAgLTk2NiwyNSArOTY2LDI1IEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIHNrYi0+ZGF0YSwgbGVuLCBETUFfVE9fREVWSUNFKTsKLQlpZiAoZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykgfHwgbWFwcGluZyArIGxlbiA+IERNQV8zMEJJVF9NQVNLKSB7CisJbWFwcGluZyA9IHNzYl9kbWFfbWFwX3NpbmdsZShicC0+c2Rldiwgc2tiLT5kYXRhLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCWlmIChzc2JfZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYsIG1hcHBpbmcpIHx8IG1hcHBpbmcgKyBsZW4gPiBETUFfMzBCSVRfTUFTSykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqYm91bmNlX3NrYjsKIAogCQkvKiBDaGlwIGNhbid0IGhhbmRsZSBETUEgdG8vZnJvbSA+MUdCLCB1c2UgYm91bmNlIGJ1ZmZlciAqLwotCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpKQotCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgbWFwcGluZywgbGVuLAotCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJaWYgKCFzc2JfZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYsIG1hcHBpbmcpKQorCQkJc3NiX2RtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYsIG1hcHBpbmcsIGxlbiwKKwkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKIAogCQlib3VuY2Vfc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCQlpZiAoIWJvdW5jZV9za2IpCiAJCQlnb3RvIGVycl9vdXQ7CiAKLQkJbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBib3VuY2Vfc2tiLT5kYXRhLAotCQkJCQkgbGVuLCBETUFfVE9fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpIHx8IG1hcHBpbmcgKyBsZW4gPiBETUFfMzBCSVRfTUFTSykgewotCQkJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSkKLQkJCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nLAotCQkJCQkgbGVuLCBETUFfVE9fREVWSUNFKTsKKwkJbWFwcGluZyA9IHNzYl9kbWFfbWFwX3NpbmdsZShicC0+c2RldiwgYm91bmNlX3NrYi0+ZGF0YSwKKwkJCQkJICAgICBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlpZiAoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCBtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gRE1BXzMwQklUX01BU0spIHsKKwkJCWlmICghc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCBtYXBwaW5nKSkKKwkJCQlzc2JfZG1hX3VubWFwX3NpbmdsZShicC0+c2RldiwgbWFwcGluZywKKwkJCQkJCSAgICAgbGVuLCBETUFfVE9fREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KGJvdW5jZV9za2IpOwogCQkJZ290byBlcnJfb3V0OwogCQl9CkBAIC0xMDgyLDggKzEwODIsOCBAQAogCiAJCWlmIChycC0+c2tiID09IE5VTEwpCiAJCQljb250aW51ZTsKLQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgcnAtPm1hcHBpbmcsIFJYX1BLVF9CVUZfU1osCi0JCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LCBycC0+bWFwcGluZywgUlhfUEtUX0JVRl9TWiwKKwkJCQkgICAgIERNQV9GUk9NX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHJwLT5za2IpOwogCQlycC0+c2tiID0gTlVMTDsKIAl9CkBAIC0xMDk0LDggKzEwOTQsOCBAQAogCiAJCWlmIChycC0+c2tiID09IE5VTEwpCiAJCQljb250aW51ZTsKLQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgcnAtPm1hcHBpbmcsIHJwLT5za2ItPmxlbiwKLQkJCQkJRE1BX1RPX0RFVklDRSk7CisJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LCBycC0+bWFwcGluZywgcnAtPnNrYi0+bGVuLAorCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHJwLT5za2IpOwogCQlycC0+c2tiID0gTlVMTDsKIAl9CkBAIC0xMTE3LDE0ICsxMTE3LDE0IEBACiAJbWVtc2V0KGJwLT50eF9yaW5nLCAwLCBCNDRfVFhfUklOR19CWVRFUyk7CiAKIAlpZiAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfUlhfUklOR19IQUNLKQotCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+c2Rldi0+ZG1hX2RldiwgYnAtPnJ4X3JpbmdfZG1hLAotCQkJICAgICAgICAgICAgICAgICAgRE1BX1RBQkxFX0JZVEVTLAotCQkJICAgICAgICAgICAgICAgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCQlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYnAtPnNkZXYsIGJwLT5yeF9yaW5nX2RtYSwKKwkJCQkJICAgICAgIERNQV9UQUJMRV9CWVRFUywKKwkJCQkJICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKIAogCWlmIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19UWF9SSU5HX0hBQ0spCi0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5zZGV2LT5kbWFfZGV2LCBicC0+dHhfcmluZ19kbWEsCi0JCQkgICAgICAgICAgICAgICAgICBETUFfVEFCTEVfQllURVMsCi0JCQkgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKKwkJc3NiX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5zZGV2LCBicC0+dHhfcmluZ19kbWEsCisJCQkJCSAgICAgICBETUFfVEFCTEVfQllURVMsCisJCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKIAogCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfcGVuZGluZzsgaSsrKSB7CiAJCWlmIChiNDRfYWxsb2Nfcnhfc2tiKGJwLCAtMSwgaSkgPCAwKQpAQCAtMTE0NCwyNSArMTE0NCwyNyBAQAogCWJwLT50eF9idWZmZXJzID0gTlVMTDsKIAlpZiAoYnAtPnJ4X3JpbmcpIHsKIAkJaWYgKGJwLT5mbGFncyAmIEI0NF9GTEFHX1JYX1JJTkdfSEFDSykgewotCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgYnAtPnJ4X3JpbmdfZG1hLAotCQkJCQlETUFfVEFCTEVfQllURVMsCi0JCQkJCURNQV9CSURJUkVDVElPTkFMKTsKKwkJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LCBicC0+cnhfcmluZ19kbWEsCisJCQkJCSAgICAgRE1BX1RBQkxFX0JZVEVTLAorCQkJCQkgICAgIERNQV9CSURJUkVDVElPTkFMKTsKIAkJCWtmcmVlKGJwLT5yeF9yaW5nKTsKIAkJfSBlbHNlCi0JCQlkbWFfZnJlZV9jb2hlcmVudChicC0+c2Rldi0+ZG1hX2RldiwgRE1BX1RBQkxFX0JZVEVTLAotCQkJCQkgICAgYnAtPnJ4X3JpbmcsIGJwLT5yeF9yaW5nX2RtYSk7CisJCQlzc2JfZG1hX2ZyZWVfY29uc2lzdGVudChicC0+c2RldiwgRE1BX1RBQkxFX0JZVEVTLAorCQkJCQkJYnAtPnJ4X3JpbmcsIGJwLT5yeF9yaW5nX2RtYSwKKwkJCQkJCUdGUF9LRVJORUwpOwogCQlicC0+cnhfcmluZyA9IE5VTEw7CiAJCWJwLT5mbGFncyAmPSB+QjQ0X0ZMQUdfUlhfUklOR19IQUNLOwogCX0KIAlpZiAoYnAtPnR4X3JpbmcpIHsKIAkJaWYgKGJwLT5mbGFncyAmIEI0NF9GTEFHX1RYX1JJTkdfSEFDSykgewotCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgYnAtPnR4X3JpbmdfZG1hLAotCQkJCQlETUFfVEFCTEVfQllURVMsCi0JCQkJCURNQV9UT19ERVZJQ0UpOworCQkJc3NiX2RtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYsIGJwLT50eF9yaW5nX2RtYSwKKwkJCQkJICAgICBETUFfVEFCTEVfQllURVMsCisJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCQlrZnJlZShicC0+dHhfcmluZyk7CiAJCX0gZWxzZQotCQkJZG1hX2ZyZWVfY29oZXJlbnQoYnAtPnNkZXYtPmRtYV9kZXYsIERNQV9UQUJMRV9CWVRFUywKLQkJCQkJICAgIGJwLT50eF9yaW5nLCBicC0+dHhfcmluZ19kbWEpOworCQkJc3NiX2RtYV9mcmVlX2NvbnNpc3RlbnQoYnAtPnNkZXYsIERNQV9UQUJMRV9CWVRFUywKKwkJCQkJCWJwLT50eF9yaW5nLCBicC0+dHhfcmluZ19kbWEsCisJCQkJCQlHRlBfS0VSTkVMKTsKIAkJYnAtPnR4X3JpbmcgPSBOVUxMOwogCQlicC0+ZmxhZ3MgJj0gfkI0NF9GTEFHX1RYX1JJTkdfSEFDSzsKIAl9CkBAIC0xMTg3LDcgKzExODksNyBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlzaXplID0gRE1BX1RBQkxFX0JZVEVTOwotCWJwLT5yeF9yaW5nID0gZG1hX2FsbG9jX2NvaGVyZW50KGJwLT5zZGV2LT5kbWFfZGV2LCBzaXplLCAmYnAtPnJ4X3JpbmdfZG1hLCBnZnApOworCWJwLT5yeF9yaW5nID0gc3NiX2RtYV9hbGxvY19jb25zaXN0ZW50KGJwLT5zZGV2LCBzaXplLCAmYnAtPnJ4X3JpbmdfZG1hLCBnZnApOwogCWlmICghYnAtPnJ4X3JpbmcpIHsKIAkJLyogQWxsb2NhdGlvbiBtYXkgaGF2ZSBmYWlsZWQgZHVlIHRvIHBjaV9hbGxvY19jb25zaXN0ZW50CiAJCSAgIGluc2lzdGluZyBvbiB1c2Ugb2YgR0ZQX0RNQSwgd2hpY2ggaXMgbW9yZSByZXN0cmljdGl2ZQpAQCAtMTE5OSwxMSArMTIwMSwxMSBAQAogCQlpZiAoIXJ4X3JpbmcpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJcnhfcmluZ19kbWEgPSBkbWFfbWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgcnhfcmluZywKLQkJCSAgICAgICAgICAgICAgICAgICAgRE1BX1RBQkxFX0JZVEVTLAotCQkJICAgICAgICAgICAgICAgICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJCXJ4X3JpbmdfZG1hID0gc3NiX2RtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LCByeF9yaW5nLAorCQkJCQkJIERNQV9UQUJMRV9CWVRFUywKKwkJCQkJCSBETUFfQklESVJFQ1RJT05BTCk7CiAKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHJ4X3JpbmdfZG1hKSB8fAorCQlpZiAoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKGJwLT5zZGV2LCByeF9yaW5nX2RtYSkgfHwKIAkJCXJ4X3JpbmdfZG1hICsgc2l6ZSA+IERNQV8zMEJJVF9NQVNLKSB7CiAJCQlrZnJlZShyeF9yaW5nKTsKIAkJCWdvdG8gb3V0X2VycjsKQEAgLTEyMTQsOSArMTIxNiw5IEBACiAJCWJwLT5mbGFncyB8PSBCNDRfRkxBR19SWF9SSU5HX0hBQ0s7CiAJfQogCi0JYnAtPnR4X3JpbmcgPSBkbWFfYWxsb2NfY29oZXJlbnQoYnAtPnNkZXYtPmRtYV9kZXYsIHNpemUsICZicC0+dHhfcmluZ19kbWEsIGdmcCk7CisJYnAtPnR4X3JpbmcgPSBzc2JfZG1hX2FsbG9jX2NvbnNpc3RlbnQoYnAtPnNkZXYsIHNpemUsICZicC0+dHhfcmluZ19kbWEsIGdmcCk7CiAJaWYgKCFicC0+dHhfcmluZykgewotCQkvKiBBbGxvY2F0aW9uIG1heSBoYXZlIGZhaWxlZCBkdWUgdG8gZG1hX2FsbG9jX2NvaGVyZW50CisJCS8qIEFsbG9jYXRpb24gbWF5IGhhdmUgZmFpbGVkIGR1ZSB0byBzc2JfZG1hX2FsbG9jX2NvbnNpc3RlbnQKIAkJICAgaW5zaXN0aW5nIG9uIHVzZSBvZiBHRlBfRE1BLCB3aGljaCBpcyBtb3JlIHJlc3RyaWN0aXZlCiAJCSAgIHRoYW4gbmVjZXNzYXJ5Li4uICAqLwogCQlzdHJ1Y3QgZG1hX2Rlc2MgKnR4X3Jpbmc7CkBAIC0xMjI2LDExICsxMjI4LDExIEBACiAJCWlmICghdHhfcmluZykKIAkJCWdvdG8gb3V0X2VycjsKIAotCQl0eF9yaW5nX2RtYSA9IGRtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCB0eF9yaW5nLAorCQl0eF9yaW5nX2RtYSA9IHNzYl9kbWFfbWFwX3NpbmdsZShicC0+c2RldiwgdHhfcmluZywKIAkJCSAgICAgICAgICAgICAgICAgICAgRE1BX1RBQkxFX0JZVEVTLAogCQkJICAgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAotCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IodHhfcmluZ19kbWEpIHx8CisJCWlmIChzc2JfZG1hX21hcHBpbmdfZXJyb3IoYnAtPnNkZXYsIHR4X3JpbmdfZG1hKSB8fAogCQkJdHhfcmluZ19kbWEgKyBzaXplID4gRE1BXzMwQklUX01BU0spIHsKIAkJCWtmcmVlKHR4X3JpbmcpOwogCQkJZ290byBvdXRfZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKaW5kZXggNDE0NDM0My4uYThlYzYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYworKysgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCkBAIC0zNTcsNyArMzU3LDYgQEAKIAkJaWYgKCFscC0+b2xkX2xpbmspIHsKIAkJCW5ld19zdGF0ZSA9IDE7CiAJCQlscC0+b2xkX2xpbmsgPSAxOwotCQkJbmV0aWZfc2NoZWR1bGUoZGV2KTsKIAkJfQogCX0gZWxzZSBpZiAobHAtPm9sZF9saW5rKSB7CiAJCW5ld19zdGF0ZSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggMzY3YjZkNC4uNWViZGU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC96bGliLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCiAjaW5jbHVkZSAiYm54Mi5oIgogI2luY2x1ZGUgImJueDJfZncuaCIKQEAgLTU2LDggKzU3LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjcuNSIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJBcHJpbCAyOSwgMjAwOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjcuOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKdWx5IDE4LCAyMDA4IgogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIApAQCAtNjgsNyArNjksNyBAQAogCSJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgIiBEUlZfTU9EVUxFX05BTUUgIiB2IiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIilcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgQ2hhbiA8bWNoYW5AYnJvYWRjb20uY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTcwNi81NzA4IERyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTcwNi81NzA4LzU3MDkgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfTU9EVUxFX1ZFUlNJT04pOwogCkBAIC04Nyw2ICs4OCw3IEBACiAJQkNNNTcwOFMsCiAJQkNNNTcwOSwKIAlCQ001NzA5UywKKwlCQ001NzE2LAogfSBib2FyZF90OwogCiAvKiBpbmRleGVkIGJ5IGJvYXJkX3QsIGFib3ZlICovCkBAIC0xMDIsOSArMTA0LDEwIEBACiAJeyAiQnJvYWRjb20gTmV0WHRyZW1lIElJIEJDTTU3MDggMTAwMEJhc2UtU1giIH0sCiAJeyAiQnJvYWRjb20gTmV0WHRyZW1lIElJIEJDTTU3MDkgMTAwMEJhc2UtVCIgfSwKIAl7ICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTcwOSAxMDAwQmFzZS1TWCIgfSwKKwl7ICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTcxNiAxMDAwQmFzZS1UIiB9LAogCX07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBibngyX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShibngyX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTcwNiwKIAkgIFBDSV9WRU5ET1JfSURfSFAsIDB4MzEwMSwgMCwgMCwgTkMzNzBUIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzA2LApAQCAtMTIzLDYgKzEyNiw4IEBACiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCQ001NzA5IH0sCiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzA5UywKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJDTTU3MDlTIH0sCisJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDE2M2IsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCQ001NzE2IH0sCiAJeyAwLCB9CiB9OwogCkBAIC0yMjYsNyArMjMxLDcgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJueDJfcGNpX3RibCk7CiAKLXN0YXRpYyBpbmxpbmUgdTMyIGJueDJfdHhfYXZhaWwoc3RydWN0IGJueDIgKmJwLCBzdHJ1Y3QgYm54Ml9uYXBpICpibmFwaSkKK3N0YXRpYyBpbmxpbmUgdTMyIGJueDJfdHhfYXZhaWwoc3RydWN0IGJueDIgKmJwLCBzdHJ1Y3QgYm54Ml90eF9yaW5nX2luZm8gKnR4cikKIHsKIAl1MzIgZGlmZjsKIApAQCAtMjM1LDcgKzI0MCw3IEBACiAJLyogVGhlIHJpbmcgdXNlcyAyNTYgaW5kaWNlcyBmb3IgMjU1IGVudHJpZXMsIG9uZSBvZiB0aGVtCiAJICogbmVlZHMgdG8gYmUgc2tpcHBlZC4KIAkgKi8KLQlkaWZmID0gYnAtPnR4X3Byb2QgLSBibmFwaS0+dHhfY29uczsKKwlkaWZmID0gdHhyLT50eF9wcm9kIC0gdHhyLT50eF9jb25zOwogCWlmICh1bmxpa2VseShkaWZmID49IFRYX0RFU0NfQ05UKSkgewogCQlkaWZmICY9IDB4ZmZmZjsKIAkJaWYgKGRpZmYgPT0gVFhfREVTQ19DTlQpCkBAIC0yODksNyArMjk0LDYgQEAKIAkJUkVHX1dSKGJwLCBCTlgyX0NUWF9DVFhfQ1RSTCwKIAkJICAgICAgIG9mZnNldCB8IEJOWDJfQ1RYX0NUWF9DVFJMX1dSSVRFX1JFUSk7CiAJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCXUzMiB2YWw7CiAJCQl2YWwgPSBSRUdfUkQoYnAsIEJOWDJfQ1RYX0NUWF9DVFJMKTsKIAkJCWlmICgodmFsICYgQk5YMl9DVFhfQ1RYX0NUUkxfV1JJVEVfUkVRKSA9PSAwKQogCQkJCWJyZWFrOwpAQCAtNDg4LDcgKzQ5Miw3IEBACiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmJwLT5pbnRyX3NlbSkpIHsKIAkJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKLQkJCW5ldGlmX3dha2VfcXVldWUoYnAtPmRldik7CisJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoYnAtPmRldik7CiAJCQlibngyX25hcGlfZW5hYmxlKGJwKTsKIAkJCWJueDJfZW5hYmxlX2ludChicCk7CiAJCX0KQEAgLTQ5Niw5ICs1MDAsMTM4IEBACiB9CiAKIHN0YXRpYyB2b2lkCitibngyX2ZyZWVfdHhfbWVtKHN0cnVjdCBibngyICpicCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBicC0+bnVtX3R4X3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVtpXTsKKwkJc3RydWN0IGJueDJfdHhfcmluZ19pbmZvICp0eHIgPSAmYm5hcGktPnR4X3Jpbmc7CisKKwkJaWYgKHR4ci0+dHhfZGVzY19yaW5nKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBUWEJEX1JJTkdfU0laRSwKKwkJCQkJICAgIHR4ci0+dHhfZGVzY19yaW5nLAorCQkJCQkgICAgdHhyLT50eF9kZXNjX21hcHBpbmcpOworCQkJdHhyLT50eF9kZXNjX3JpbmcgPSBOVUxMOworCQl9CisJCWtmcmVlKHR4ci0+dHhfYnVmX3JpbmcpOworCQl0eHItPnR4X2J1Zl9yaW5nID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitibngyX2ZyZWVfcnhfbWVtKHN0cnVjdCBibngyICpicCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBicC0+bnVtX3J4X3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVtpXTsKKwkJc3RydWN0IGJueDJfcnhfcmluZ19pbmZvICpyeHIgPSAmYm5hcGktPnJ4X3Jpbmc7CisJCWludCBqOworCisJCWZvciAoaiA9IDA7IGogPCBicC0+cnhfbWF4X3Jpbmc7IGorKykgeworCQkJaWYgKHJ4ci0+cnhfZGVzY19yaW5nW2pdKQorCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYnAtPnBkZXYsIFJYQkRfUklOR19TSVpFLAorCQkJCQkJICAgIHJ4ci0+cnhfZGVzY19yaW5nW2pdLAorCQkJCQkJICAgIHJ4ci0+cnhfZGVzY19tYXBwaW5nW2pdKTsKKwkJCXJ4ci0+cnhfZGVzY19yaW5nW2pdID0gTlVMTDsKKwkJfQorCQlpZiAocnhyLT5yeF9idWZfcmluZykKKwkJCXZmcmVlKHJ4ci0+cnhfYnVmX3JpbmcpOworCQlyeHItPnJ4X2J1Zl9yaW5nID0gTlVMTDsKKworCQlmb3IgKGogPSAwOyBqIDwgYnAtPnJ4X21heF9wZ19yaW5nOyBqKyspIHsKKwkJCWlmIChyeHItPnJ4X3BnX2Rlc2NfcmluZ1tqXSkKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBSWEJEX1JJTkdfU0laRSwKKwkJCQkJCSAgICByeHItPnJ4X3BnX2Rlc2NfcmluZ1tpXSwKKwkJCQkJCSAgICByeHItPnJ4X3BnX2Rlc2NfbWFwcGluZ1tpXSk7CisJCQlyeHItPnJ4X3BnX2Rlc2NfcmluZ1tpXSA9IE5VTEw7CisJCX0KKwkJaWYgKHJ4ci0+cnhfcGdfcmluZykKKwkJCXZmcmVlKHJ4ci0+cnhfcGdfcmluZyk7CisJCXJ4ci0+cnhfcGdfcmluZyA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50CitibngyX2FsbG9jX3R4X21lbShzdHJ1Y3QgYm54MiAqYnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnAtPm51bV90eF9yaW5nczsgaSsrKSB7CisJCXN0cnVjdCBibngyX25hcGkgKmJuYXBpID0gJmJwLT5ibngyX25hcGlbaV07CisJCXN0cnVjdCBibngyX3R4X3JpbmdfaW5mbyAqdHhyID0gJmJuYXBpLT50eF9yaW5nOworCisJCXR4ci0+dHhfYnVmX3JpbmcgPSBremFsbG9jKFNXX1RYQkRfUklOR19TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHR4ci0+dHhfYnVmX3JpbmcgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXR4ci0+dHhfZGVzY19yaW5nID0KKwkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGJwLT5wZGV2LCBUWEJEX1JJTkdfU0laRSwKKwkJCQkJICAgICAmdHhyLT50eF9kZXNjX21hcHBpbmcpOworCQlpZiAodHhyLT50eF9kZXNjX3JpbmcgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYm54Ml9hbGxvY19yeF9tZW0oc3RydWN0IGJueDIgKmJwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGJwLT5udW1fcnhfcmluZ3M7IGkrKykgeworCQlzdHJ1Y3QgYm54Ml9uYXBpICpibmFwaSA9ICZicC0+Ym54Ml9uYXBpW2ldOworCQlzdHJ1Y3QgYm54Ml9yeF9yaW5nX2luZm8gKnJ4ciA9ICZibmFwaS0+cnhfcmluZzsKKwkJaW50IGo7CisKKwkJcnhyLT5yeF9idWZfcmluZyA9CisJCQl2bWFsbG9jKFNXX1JYQkRfUklOR19TSVpFICogYnAtPnJ4X21heF9yaW5nKTsKKwkJaWYgKHJ4ci0+cnhfYnVmX3JpbmcgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbXNldChyeHItPnJ4X2J1Zl9yaW5nLCAwLAorCQkgICAgICAgU1dfUlhCRF9SSU5HX1NJWkUgKiBicC0+cnhfbWF4X3JpbmcpOworCisJCWZvciAoaiA9IDA7IGogPCBicC0+cnhfbWF4X3Jpbmc7IGorKykgeworCQkJcnhyLT5yeF9kZXNjX3Jpbmdbal0gPQorCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGJwLT5wZGV2LCBSWEJEX1JJTkdfU0laRSwKKwkJCQkJCSAgICAgJnJ4ci0+cnhfZGVzY19tYXBwaW5nW2pdKTsKKwkJCWlmIChyeHItPnJ4X2Rlc2NfcmluZ1tqXSA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCX0KKworCQlpZiAoYnAtPnJ4X3BnX3Jpbmdfc2l6ZSkgeworCQkJcnhyLT5yeF9wZ19yaW5nID0gdm1hbGxvYyhTV19SWFBHX1JJTkdfU0laRSAqCisJCQkJCQkgIGJwLT5yeF9tYXhfcGdfcmluZyk7CisJCQlpZiAocnhyLT5yeF9wZ19yaW5nID09IE5VTEwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCW1lbXNldChyeHItPnJ4X3BnX3JpbmcsIDAsIFNXX1JYUEdfUklOR19TSVpFICoKKwkJCSAgICAgICBicC0+cnhfbWF4X3BnX3JpbmcpOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IGJwLT5yeF9tYXhfcGdfcmluZzsgaisrKSB7CisJCQlyeHItPnJ4X3BnX2Rlc2NfcmluZ1tqXSA9CisJCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoYnAtPnBkZXYsIFJYQkRfUklOR19TSVpFLAorCQkJCQkJJnJ4ci0+cnhfcGdfZGVzY19tYXBwaW5nW2pdKTsKKwkJCWlmIChyeHItPnJ4X3BnX2Rlc2NfcmluZ1tqXSA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCiBibngyX2ZyZWVfbWVtKHN0cnVjdCBibngyICpicCkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3QgYm54Ml9uYXBpICpibmFwaSA9ICZicC0+Ym54Ml9uYXBpWzBdOworCisJYm54Ml9mcmVlX3R4X21lbShicCk7CisJYm54Ml9mcmVlX3J4X21lbShicCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYnAtPmN0eF9wYWdlczsgaSsrKSB7CiAJCWlmIChicC0+Y3R4X2Jsa1tpXSkgewpAQCAtNTA4LDg3ICs2NDEsMjEgQEAKIAkJCWJwLT5jdHhfYmxrW2ldID0gTlVMTDsKIAkJfQogCX0KLQlpZiAoYnAtPnN0YXR1c19ibGspIHsKKwlpZiAoYm5hcGktPnN0YXR1c19ibGsubXNpKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYnAtPnBkZXYsIGJwLT5zdGF0dXNfc3RhdHNfc2l6ZSwKLQkJCQkgICAgYnAtPnN0YXR1c19ibGssIGJwLT5zdGF0dXNfYmxrX21hcHBpbmcpOwotCQlicC0+c3RhdHVzX2JsayA9IE5VTEw7CisJCQkJICAgIGJuYXBpLT5zdGF0dXNfYmxrLm1zaSwKKwkJCQkgICAgYnAtPnN0YXR1c19ibGtfbWFwcGluZyk7CisJCWJuYXBpLT5zdGF0dXNfYmxrLm1zaSA9IE5VTEw7CiAJCWJwLT5zdGF0c19ibGsgPSBOVUxMOwogCX0KLQlpZiAoYnAtPnR4X2Rlc2NfcmluZykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBUWEJEX1JJTkdfU0laRSwKLQkJCQkgICAgYnAtPnR4X2Rlc2NfcmluZywgYnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JCWJwLT50eF9kZXNjX3JpbmcgPSBOVUxMOwotCX0KLQlrZnJlZShicC0+dHhfYnVmX3JpbmcpOwotCWJwLT50eF9idWZfcmluZyA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IGJwLT5yeF9tYXhfcmluZzsgaSsrKSB7Ci0JCWlmIChicC0+cnhfZGVzY19yaW5nW2ldKQotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChicC0+cGRldiwgUlhCRF9SSU5HX1NJWkUsCi0JCQkJCSAgICBicC0+cnhfZGVzY19yaW5nW2ldLAotCQkJCQkgICAgYnAtPnJ4X2Rlc2NfbWFwcGluZ1tpXSk7Ci0JCWJwLT5yeF9kZXNjX3JpbmdbaV0gPSBOVUxMOwotCX0KLQl2ZnJlZShicC0+cnhfYnVmX3JpbmcpOwotCWJwLT5yeF9idWZfcmluZyA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IGJwLT5yeF9tYXhfcGdfcmluZzsgaSsrKSB7Ci0JCWlmIChicC0+cnhfcGdfZGVzY19yaW5nW2ldKQotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChicC0+cGRldiwgUlhCRF9SSU5HX1NJWkUsCi0JCQkJCSAgICBicC0+cnhfcGdfZGVzY19yaW5nW2ldLAotCQkJCQkgICAgYnAtPnJ4X3BnX2Rlc2NfbWFwcGluZ1tpXSk7Ci0JCWJwLT5yeF9wZ19kZXNjX3JpbmdbaV0gPSBOVUxMOwotCX0KLQlpZiAoYnAtPnJ4X3BnX3JpbmcpCi0JCXZmcmVlKGJwLT5yeF9wZ19yaW5nKTsKLQlicC0+cnhfcGdfcmluZyA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQKIGJueDJfYWxsb2NfbWVtKHN0cnVjdCBibngyICpicCkKIHsKLQlpbnQgaSwgc3RhdHVzX2Jsa19zaXplOwotCi0JYnAtPnR4X2J1Zl9yaW5nID0ga3phbGxvYyhTV19UWEJEX1JJTkdfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJwLT50eF9idWZfcmluZyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWJwLT50eF9kZXNjX3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwgVFhCRF9SSU5HX1NJWkUsCi0JCQkJCQkmYnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JaWYgKGJwLT50eF9kZXNjX3JpbmcgPT0gTlVMTCkKLQkJZ290byBhbGxvY19tZW1fZXJyOwotCi0JYnAtPnJ4X2J1Zl9yaW5nID0gdm1hbGxvYyhTV19SWEJEX1JJTkdfU0laRSAqIGJwLT5yeF9tYXhfcmluZyk7Ci0JaWYgKGJwLT5yeF9idWZfcmluZyA9PSBOVUxMKQotCQlnb3RvIGFsbG9jX21lbV9lcnI7Ci0KLQltZW1zZXQoYnAtPnJ4X2J1Zl9yaW5nLCAwLCBTV19SWEJEX1JJTkdfU0laRSAqIGJwLT5yeF9tYXhfcmluZyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X21heF9yaW5nOyBpKyspIHsKLQkJYnAtPnJ4X2Rlc2NfcmluZ1tpXSA9Ci0JCQlwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwgUlhCRF9SSU5HX1NJWkUsCi0JCQkJCSAgICAgJmJwLT5yeF9kZXNjX21hcHBpbmdbaV0pOwotCQlpZiAoYnAtPnJ4X2Rlc2NfcmluZ1tpXSA9PSBOVUxMKQotCQkJZ290byBhbGxvY19tZW1fZXJyOwotCi0JfQotCi0JaWYgKGJwLT5yeF9wZ19yaW5nX3NpemUpIHsKLQkJYnAtPnJ4X3BnX3JpbmcgPSB2bWFsbG9jKFNXX1JYUEdfUklOR19TSVpFICoKLQkJCQkJIGJwLT5yeF9tYXhfcGdfcmluZyk7Ci0JCWlmIChicC0+cnhfcGdfcmluZyA9PSBOVUxMKQotCQkJZ290byBhbGxvY19tZW1fZXJyOwotCi0JCW1lbXNldChicC0+cnhfcGdfcmluZywgMCwgU1dfUlhQR19SSU5HX1NJWkUgKgotCQkgICAgICAgYnAtPnJ4X21heF9wZ19yaW5nKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X21heF9wZ19yaW5nOyBpKyspIHsKLQkJYnAtPnJ4X3BnX2Rlc2NfcmluZ1tpXSA9Ci0JCQlwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwgUlhCRF9SSU5HX1NJWkUsCi0JCQkJCSAgICAgJmJwLT5yeF9wZ19kZXNjX21hcHBpbmdbaV0pOwotCQlpZiAoYnAtPnJ4X3BnX2Rlc2NfcmluZ1tpXSA9PSBOVUxMKQotCQkJZ290byBhbGxvY19tZW1fZXJyOwotCi0JfQorCWludCBpLCBzdGF0dXNfYmxrX3NpemUsIGVycjsKKwlzdHJ1Y3QgYm54Ml9uYXBpICpibmFwaTsKKwl2b2lkICpzdGF0dXNfYmxrOwogCiAJLyogQ29tYmluZSBzdGF0dXMgYW5kIHN0YXRpc3RpY3MgYmxvY2tzIGludG8gb25lIGFsbG9jYXRpb24uICovCiAJc3RhdHVzX2Jsa19zaXplID0gTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHN0cnVjdCBzdGF0dXNfYmxvY2spKTsKQEAgLTU5OCwyNyArNjY1LDM3IEBACiAJYnAtPnN0YXR1c19zdGF0c19zaXplID0gc3RhdHVzX2Jsa19zaXplICsKIAkJCQlzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfYmxvY2spOwogCi0JYnAtPnN0YXR1c19ibGsgPSBwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwgYnAtPnN0YXR1c19zdGF0c19zaXplLAotCQkJCQkgICAgICAmYnAtPnN0YXR1c19ibGtfbWFwcGluZyk7Ci0JaWYgKGJwLT5zdGF0dXNfYmxrID09IE5VTEwpCisJc3RhdHVzX2JsayA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGJwLT5wZGV2LCBicC0+c3RhdHVzX3N0YXRzX3NpemUsCisJCQkJCSAgJmJwLT5zdGF0dXNfYmxrX21hcHBpbmcpOworCWlmIChzdGF0dXNfYmxrID09IE5VTEwpCiAJCWdvdG8gYWxsb2NfbWVtX2VycjsKIAotCW1lbXNldChicC0+c3RhdHVzX2JsaywgMCwgYnAtPnN0YXR1c19zdGF0c19zaXplKTsKKwltZW1zZXQoc3RhdHVzX2JsaywgMCwgYnAtPnN0YXR1c19zdGF0c19zaXplKTsKIAotCWJwLT5ibngyX25hcGlbMF0uc3RhdHVzX2JsayA9IGJwLT5zdGF0dXNfYmxrOworCWJuYXBpID0gJmJwLT5ibngyX25hcGlbMF07CisJYm5hcGktPnN0YXR1c19ibGsubXNpID0gc3RhdHVzX2JsazsKKwlibmFwaS0+aHdfdHhfY29uc19wdHIgPQorCQkmYm5hcGktPnN0YXR1c19ibGsubXNpLT5zdGF0dXNfdHhfcXVpY2tfY29uc3VtZXJfaW5kZXgwOworCWJuYXBpLT5od19yeF9jb25zX3B0ciA9CisJCSZibmFwaS0+c3RhdHVzX2Jsay5tc2ktPnN0YXR1c19yeF9xdWlja19jb25zdW1lcl9pbmRleDA7CiAJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19NU0lYX0NBUCkgewogCQlmb3IgKGkgPSAxOyBpIDwgQk5YMl9NQVhfTVNJWF9WRUM7IGkrKykgewotCQkJc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVtpXTsKKwkJCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeCAqc2JsazsKIAotCQkJYm5hcGktPnN0YXR1c19ibGtfbXNpeCA9ICh2b2lkICopCi0JCQkJKCh1bnNpZ25lZCBsb25nKSBicC0+c3RhdHVzX2JsayArCi0JCQkJIEJOWDJfU0JMS19NU0lYX0FMSUdOX1NJWkUgKiBpKTsKKwkJCWJuYXBpID0gJmJwLT5ibngyX25hcGlbaV07CisKKwkJCXNibGsgPSAodm9pZCAqKSAoc3RhdHVzX2JsayArCisJCQkJCSBCTlgyX1NCTEtfTVNJWF9BTElHTl9TSVpFICogaSk7CisJCQlibmFwaS0+c3RhdHVzX2Jsay5tc2l4ID0gc2JsazsKKwkJCWJuYXBpLT5od190eF9jb25zX3B0ciA9CisJCQkJJnNibGstPnN0YXR1c190eF9xdWlja19jb25zdW1lcl9pbmRleDsKKwkJCWJuYXBpLT5od19yeF9jb25zX3B0ciA9CisJCQkJJnNibGstPnN0YXR1c19yeF9xdWlja19jb25zdW1lcl9pbmRleDsKIAkJCWJuYXBpLT5pbnRfbnVtID0gaSA8PCAyNDsKIAkJfQogCX0KIAotCWJwLT5zdGF0c19ibGsgPSAodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcpIGJwLT5zdGF0dXNfYmxrICsKLQkJCQkgIHN0YXR1c19ibGtfc2l6ZSk7CisJYnAtPnN0YXRzX2JsayA9IHN0YXR1c19ibGsgKyBzdGF0dXNfYmxrX3NpemU7CiAKIAlicC0+c3RhdHNfYmxrX21hcHBpbmcgPSBicC0+c3RhdHVzX2Jsa19tYXBwaW5nICsgc3RhdHVzX2Jsa19zaXplOwogCkBAIC02MzQsNiArNzExLDE1IEBACiAJCQkJZ290byBhbGxvY19tZW1fZXJyOwogCQl9CiAJfQorCisJZXJyID0gYm54Ml9hbGxvY19yeF9tZW0oYnApOworCWlmIChlcnIpCisJCWdvdG8gYWxsb2NfbWVtX2VycjsKKworCWVyciA9IGJueDJfYWxsb2NfdHhfbWVtKGJwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGFsbG9jX21lbV9lcnI7CisKIAlyZXR1cm4gMDsKIAogYWxsb2NfbWVtX2VycjoKQEAgLTk5Myw5ICsxMDc5LDkgQEAKIH0KIAogc3RhdGljIHZvaWQKLWJueDJfaW5pdF9yeF9jb250ZXh0MChzdHJ1Y3QgYm54MiAqYnApCitibngyX2luaXRfcnhfY29udGV4dChzdHJ1Y3QgYm54MiAqYnAsIHUzMiBjaWQpCiB7Ci0JdTMyIHZhbCwgcnhfY2lkX2FkZHIgPSBHRVRfQ0lEX0FERFIoUlhfQ0lEKTsKKwl1MzIgdmFsLCByeF9jaWRfYWRkciA9IEdFVF9DSURfQUREUihjaWQpOwogCiAJdmFsID0gQk5YMl9MMkNUWF9DVFhfVFlQRV9DVFhfQkRfQ0hOX1RZUEVfVkFMVUU7CiAJdmFsIHw9IEJOWDJfTDJDVFhfQ1RYX1RZUEVfU0laRV9MMjsKQEAgLTEwMjgsNiArMTExNCwxOSBAQAogCWJueDJfY3R4X3dyKGJwLCByeF9jaWRfYWRkciwgQk5YMl9MMkNUWF9DVFhfVFlQRSwgdmFsKTsKIH0KIAorc3RhdGljIHZvaWQKK2JueDJfaW5pdF9hbGxfcnhfY29udGV4dHMoc3RydWN0IGJueDIgKmJwKQoreworCWludCBpOworCXUzMiBjaWQ7CisKKwlmb3IgKGkgPSAwLCBjaWQgPSBSWF9DSUQ7IGkgPCBicC0+bnVtX3J4X3JpbmdzOyBpKyssIGNpZCsrKSB7CisJCWlmIChpID09IDEpCisJCQljaWQgPSBSWF9SU1NfQ0lEOworCQlibngyX2luaXRfcnhfY29udGV4dChicCwgY2lkKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQKIGJueDJfc2V0X21hY19saW5rKHN0cnVjdCBibngyICpicCkKIHsKQEAgLTEwOTMsNyArMTE5Miw3IEBACiAJUkVHX1dSKGJwLCBCTlgyX0VNQUNfU1RBVFVTLCBCTlgyX0VNQUNfU1RBVFVTX0xJTktfQ0hBTkdFKTsKIAogCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKLQkJYm54Ml9pbml0X3J4X2NvbnRleHQwKGJwKTsKKwkJYm54Ml9pbml0X2FsbF9yeF9jb250ZXh0cyhicCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzOTIsNyArMTQ5MSw3IEBACiAJcmV0dXJuIGFkdjsKIH0KIAotc3RhdGljIGludCBibngyX2Z3X3N5bmMoc3RydWN0IGJueDIgKiwgdTMyLCBpbnQpOworc3RhdGljIGludCBibngyX2Z3X3N5bmMoc3RydWN0IGJueDIgKiwgdTMyLCBpbnQsIGludCk7CiAKIHN0YXRpYyBpbnQKIGJueDJfc2V0dXBfcmVtb3RlX3BoeShzdHJ1Y3QgYm54MiAqYnAsIHU4IHBvcnQpCkBAIC0xNDQ1LDcgKzE1NDQsNyBAQAogCWJueDJfc2htZW1fd3IoYnAsIEJOWDJfRFJWX01CX0FSRzAsIHNwZWVkX2FyZyk7CiAKIAlzcGluX3VubG9ja19iaCgmYnAtPnBoeV9sb2NrKTsKLQlibngyX2Z3X3N5bmMoYnAsIEJOWDJfRFJWX01TR19DT0RFX0NNRF9TRVRfTElOSywgMCk7CisJYm54Ml9md19zeW5jKGJwLCBCTlgyX0RSVl9NU0dfQ09ERV9DTURfU0VUX0xJTkssIDEsIDApOwogCXNwaW5fbG9ja19iaCgmYnAtPnBoeV9sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtMTg3NSw3ICsxOTc0LDcgQEAKIH0KIAogc3RhdGljIGludAotYm54Ml9pbml0XzU3MDlzX3BoeShzdHJ1Y3QgYm54MiAqYnApCitibngyX2luaXRfNTcwOXNfcGh5KHN0cnVjdCBibngyICpicCwgaW50IHJlc2V0X3BoeSkKIHsKIAl1MzIgdmFsOwogCkBAIC0xODkwLDcgKzE5ODksOCBAQAogCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk5YMl9BRVJfQUVSLCBNSUlfQk5YMl9BRVJfQUVSX0FOX01NRCk7CiAKIAlibngyX3dyaXRlX3BoeShicCwgTUlJX0JOWDJfQkxLX0FERFIsIE1JSV9CTlgyX0JMS19BRERSX0NPTUJPX0lFRUVCMCk7Ci0JYm54Ml9yZXNldF9waHkoYnApOworCWlmIChyZXNldF9waHkpCisJCWJueDJfcmVzZXRfcGh5KGJwKTsKIAogCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk5YMl9CTEtfQUREUiwgTUlJX0JOWDJfQkxLX0FERFJfU0VSREVTX0RJRyk7CiAKQEAgLTE5MjQsMTEgKzIwMjQsMTIgQEAKIH0KIAogc3RhdGljIGludAotYm54Ml9pbml0XzU3MDhzX3BoeShzdHJ1Y3QgYm54MiAqYnApCitibngyX2luaXRfNTcwOHNfcGh5KHN0cnVjdCBibngyICpicCwgaW50IHJlc2V0X3BoeSkKIHsKIAl1MzIgdmFsOwogCi0JYm54Ml9yZXNldF9waHkoYnApOworCWlmIChyZXNldF9waHkpCisJCWJueDJfcmVzZXRfcGh5KGJwKTsKIAogCWJwLT5taWlfdXAxID0gQkNNNTcwOFNfVVAxOwogCkBAIC0xOTgxLDkgKzIwODIsMTAgQEAKIH0KIAogc3RhdGljIGludAotYm54Ml9pbml0XzU3MDZzX3BoeShzdHJ1Y3QgYm54MiAqYnApCitibngyX2luaXRfNTcwNnNfcGh5KHN0cnVjdCBibngyICpicCwgaW50IHJlc2V0X3BoeSkKIHsKLQlibngyX3Jlc2V0X3BoeShicCk7CisJaWYgKHJlc2V0X3BoeSkKKwkJYm54Ml9yZXNldF9waHkoYnApOwogCiAJYnAtPnBoeV9mbGFncyAmPSB+Qk5YMl9QSFlfRkxBR19QQVJBTExFTF9ERVRFQ1Q7CiAKQEAgLTIwMTgsMTEgKzIxMjAsMTIgQEAKIH0KIAogc3RhdGljIGludAotYm54Ml9pbml0X2NvcHBlcl9waHkoc3RydWN0IGJueDIgKmJwKQorYm54Ml9pbml0X2NvcHBlcl9waHkoc3RydWN0IGJueDIgKmJwLCBpbnQgcmVzZXRfcGh5KQogewogCXUzMiB2YWw7CiAKLQlibngyX3Jlc2V0X3BoeShicCk7CisJaWYgKHJlc2V0X3BoeSkKKwkJYm54Ml9yZXNldF9waHkoYnApOwogCiAJaWYgKGJwLT5waHlfZmxhZ3MgJiBCTlgyX1BIWV9GTEFHX0NSQ19GSVgpIHsKIAkJYm54Ml93cml0ZV9waHkoYnAsIDB4MTgsIDB4MGMwMCk7CkBAIC0yMDcwLDcgKzIxNzMsNyBAQAogCiAKIHN0YXRpYyBpbnQKLWJueDJfaW5pdF9waHkoc3RydWN0IGJueDIgKmJwKQorYm54Ml9pbml0X3BoeShzdHJ1Y3QgYm54MiAqYnAsIGludCByZXNldF9waHkpCiB7CiAJdTMyIHZhbDsKIAlpbnQgcmMgPSAwOwpAQCAtMjA5NiwxNCArMjE5OSwxNCBAQAogCiAJaWYgKGJwLT5waHlfZmxhZ3MgJiBCTlgyX1BIWV9GTEFHX1NFUkRFUykgewogCQlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDYpCi0JCQlyYyA9IGJueDJfaW5pdF81NzA2c19waHkoYnApOworCQkJcmMgPSBibngyX2luaXRfNTcwNnNfcGh5KGJwLCByZXNldF9waHkpOwogCQllbHNlIGlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOCkKLQkJCXJjID0gYm54Ml9pbml0XzU3MDhzX3BoeShicCk7CisJCQlyYyA9IGJueDJfaW5pdF81NzA4c19waHkoYnAsIHJlc2V0X3BoeSk7CiAJCWVsc2UgaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQotCQkJcmMgPSBibngyX2luaXRfNTcwOXNfcGh5KGJwKTsKKwkJCXJjID0gYm54Ml9pbml0XzU3MDlzX3BoeShicCwgcmVzZXRfcGh5KTsKIAl9CiAJZWxzZSB7Ci0JCXJjID0gYm54Ml9pbml0X2NvcHBlcl9waHkoYnApOworCQlyYyA9IGJueDJfaW5pdF9jb3BwZXJfcGh5KGJwLCByZXNldF9waHkpOwogCX0KIAogc2V0dXBfcGh5OgpAQCAtMjE1OSw3ICsyMjYyLDcgQEAKIH0KIAogc3RhdGljIGludAotYm54Ml9md19zeW5jKHN0cnVjdCBibngyICpicCwgdTMyIG1zZ19kYXRhLCBpbnQgc2lsZW50KQorYm54Ml9md19zeW5jKHN0cnVjdCBibngyICpicCwgdTMyIG1zZ19kYXRhLCBpbnQgYWNrLCBpbnQgc2lsZW50KQogewogCWludCBpOwogCXUzMiB2YWw7CkBAIC0yMTY5LDYgKzIyNzIsOSBAQAogCiAJYm54Ml9zaG1lbV93cihicCwgQk5YMl9EUlZfTUIsIG1zZ19kYXRhKTsKIAorCWlmICghYWNrKQorCQlyZXR1cm4gMDsKKwogCS8qIHdhaXQgZm9yIGFuIGFja25vd2xlZGdlbWVudC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgKEZXX0FDS19USU1FX09VVF9NUyAvIDEwKTsgaSsrKSB7CiAJCW1zbGVlcCgxMCk7CkBAIC0yMzQ1LDI4ICsyNDUxLDI3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1ibngyX3NldF9tYWNfYWRkcihzdHJ1Y3QgYm54MiAqYnApCitibngyX3NldF9tYWNfYWRkcihzdHJ1Y3QgYm54MiAqYnAsIHU4ICptYWNfYWRkciwgdTMyIHBvcykKIHsKIAl1MzIgdmFsOwotCXU4ICptYWNfYWRkciA9IGJwLT5kZXYtPmRldl9hZGRyOwogCiAJdmFsID0gKG1hY19hZGRyWzBdIDw8IDgpIHwgbWFjX2FkZHJbMV07CiAKLQlSRUdfV1IoYnAsIEJOWDJfRU1BQ19NQUNfTUFUQ0gwLCB2YWwpOworCVJFR19XUihicCwgQk5YMl9FTUFDX01BQ19NQVRDSDAgKyAocG9zICogOCksIHZhbCk7CiAKIAl2YWwgPSAobWFjX2FkZHJbMl0gPDwgMjQpIHwgKG1hY19hZGRyWzNdIDw8IDE2KSB8CiAJCShtYWNfYWRkcls0XSA8PCA4KSB8IG1hY19hZGRyWzVdOwogCi0JUkVHX1dSKGJwLCBCTlgyX0VNQUNfTUFDX01BVENIMSwgdmFsKTsKKwlSRUdfV1IoYnAsIEJOWDJfRU1BQ19NQUNfTUFUQ0gxICsgKHBvcyAqIDgpLCB2YWwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotYm54Ml9hbGxvY19yeF9wYWdlKHN0cnVjdCBibngyICpicCwgdTE2IGluZGV4KQorYm54Ml9hbGxvY19yeF9wYWdlKHN0cnVjdCBibngyICpicCwgc3RydWN0IGJueDJfcnhfcmluZ19pbmZvICpyeHIsIHUxNiBpbmRleCkKIHsKIAlkbWFfYWRkcl90IG1hcHBpbmc7Ci0Jc3RydWN0IHN3X3BnICpyeF9wZyA9ICZicC0+cnhfcGdfcmluZ1tpbmRleF07CisJc3RydWN0IHN3X3BnICpyeF9wZyA9ICZyeHItPnJ4X3BnX3JpbmdbaW5kZXhdOwogCXN0cnVjdCByeF9iZCAqcnhiZCA9Ci0JCSZicC0+cnhfcGdfZGVzY19yaW5nW1JYX1JJTkcoaW5kZXgpXVtSWF9JRFgoaW5kZXgpXTsKKwkJJnJ4ci0+cnhfcGdfZGVzY19yaW5nW1JYX1JJTkcoaW5kZXgpXVtSWF9JRFgoaW5kZXgpXTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyk7CiAKIAlpZiAoIXBhZ2UpCkBAIC0yMzgxLDkgKzI0ODYsOSBAQAogfQogCiBzdGF0aWMgdm9pZAotYm54Ml9mcmVlX3J4X3BhZ2Uoc3RydWN0IGJueDIgKmJwLCB1MTYgaW5kZXgpCitibngyX2ZyZWVfcnhfcGFnZShzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX3J4X3JpbmdfaW5mbyAqcnhyLCB1MTYgaW5kZXgpCiB7Ci0Jc3RydWN0IHN3X3BnICpyeF9wZyA9ICZicC0+cnhfcGdfcmluZ1tpbmRleF07CisJc3RydWN0IHN3X3BnICpyeF9wZyA9ICZyeHItPnJ4X3BnX3JpbmdbaW5kZXhdOwogCXN0cnVjdCBwYWdlICpwYWdlID0gcnhfcGctPnBhZ2U7CiAKIAlpZiAoIXBhZ2UpCkBAIC0yMzk3LDEyICsyNTAyLDEyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1ibngyX2FsbG9jX3J4X3NrYihzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX25hcGkgKmJuYXBpLCB1MTYgaW5kZXgpCitibngyX2FsbG9jX3J4X3NrYihzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX3J4X3JpbmdfaW5mbyAqcnhyLCB1MTYgaW5kZXgpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc3dfYmQgKnJ4X2J1ZiA9ICZicC0+cnhfYnVmX3JpbmdbaW5kZXhdOworCXN0cnVjdCBzd19iZCAqcnhfYnVmID0gJnJ4ci0+cnhfYnVmX3JpbmdbaW5kZXhdOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKLQlzdHJ1Y3QgcnhfYmQgKnJ4YmQgPSAmYnAtPnJ4X2Rlc2NfcmluZ1tSWF9SSU5HKGluZGV4KV1bUlhfSURYKGluZGV4KV07CisJc3RydWN0IHJ4X2JkICpyeGJkID0gJnJ4ci0+cnhfZGVzY19yaW5nW1JYX1JJTkcoaW5kZXgpXVtSWF9JRFgoaW5kZXgpXTsKIAl1bnNpZ25lZCBsb25nIGFsaWduOwogCiAJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LCBicC0+cnhfYnVmX3NpemUpOwpAQCAtMjQyMiw3ICsyNTI3LDcgQEAKIAlyeGJkLT5yeF9iZF9oYWRkcl9oaSA9ICh1NjQpIG1hcHBpbmcgPj4gMzI7CiAJcnhiZC0+cnhfYmRfaGFkZHJfbG8gPSAodTY0KSBtYXBwaW5nICYgMHhmZmZmZmZmZjsKIAotCWJuYXBpLT5yeF9wcm9kX2JzZXEgKz0gYnAtPnJ4X2J1Zl91c2Vfc2l6ZTsKKwlyeHItPnJ4X3Byb2RfYnNlcSArPSBicC0+cnhfYnVmX3VzZV9zaXplOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDMwLDcgKzI1MzUsNyBAQAogc3RhdGljIGludAogYm54Ml9waHlfZXZlbnRfaXNfc2V0KHN0cnVjdCBibngyICpicCwgc3RydWN0IGJueDJfbmFwaSAqYm5hcGksIHUzMiBldmVudCkKIHsKLQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzYmxrID0gYm5hcGktPnN0YXR1c19ibGs7CisJc3RydWN0IHN0YXR1c19ibG9jayAqc2JsayA9IGJuYXBpLT5zdGF0dXNfYmxrLm1zaTsKIAl1MzIgbmV3X2xpbmtfc3RhdGUsIG9sZF9saW5rX3N0YXRlOwogCWludCBpc19zZXQgPSAxOwogCkBAIC0yNDY2LDExICsyNTcxLDkgQEAKIHsKIAl1MTYgY29uczsKIAotCWlmIChibmFwaS0+aW50X251bSA9PSAwKQotCQljb25zID0gYm5hcGktPnN0YXR1c19ibGstPnN0YXR1c190eF9xdWlja19jb25zdW1lcl9pbmRleDA7Ci0JZWxzZQotCQljb25zID0gYm5hcGktPnN0YXR1c19ibGtfbXNpeC0+c3RhdHVzX3R4X3F1aWNrX2NvbnN1bWVyX2luZGV4OwotCisJLyogVGVsbCBjb21waWxlciB0aGF0IHN0YXR1cyBibG9jayBmaWVsZHMgY2FuIGNoYW5nZS4gKi8KKwliYXJyaWVyKCk7CisJY29ucyA9ICpibmFwaS0+aHdfdHhfY29uc19wdHI7CiAJaWYgKHVubGlrZWx5KChjb25zICYgTUFYX1RYX0RFU0NfQ05UKSA9PSBNQVhfVFhfREVTQ19DTlQpKQogCQljb25zKys7CiAJcmV0dXJuIGNvbnM7CkBAIC0yNDc5LDExICsyNTgyLDE2IEBACiBzdGF0aWMgaW50CiBibngyX3R4X2ludChzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX25hcGkgKmJuYXBpLCBpbnQgYnVkZ2V0KQogeworCXN0cnVjdCBibngyX3R4X3JpbmdfaW5mbyAqdHhyID0gJmJuYXBpLT50eF9yaW5nOwogCXUxNiBod19jb25zLCBzd19jb25zLCBzd19yaW5nX2NvbnM7Ci0JaW50IHR4X3BrdCA9IDA7CisJaW50IHR4X3BrdCA9IDAsIGluZGV4OworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKKworCWluZGV4ID0gKGJuYXBpIC0gYnAtPmJueDJfbmFwaSk7CisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShicC0+ZGV2LCBpbmRleCk7CiAKIAlod19jb25zID0gYm54Ml9nZXRfaHdfdHhfY29ucyhibmFwaSk7Ci0Jc3dfY29ucyA9IGJuYXBpLT50eF9jb25zOworCXN3X2NvbnMgPSB0eHItPnR4X2NvbnM7CiAKIAl3aGlsZSAoc3dfY29ucyAhPSBod19jb25zKSB7CiAJCXN0cnVjdCBzd19iZCAqdHhfYnVmOwpAQCAtMjQ5Miw3ICsyNjAwLDcgQEAKIAogCQlzd19yaW5nX2NvbnMgPSBUWF9SSU5HX0lEWChzd19jb25zKTsKIAotCQl0eF9idWYgPSAmYnAtPnR4X2J1Zl9yaW5nW3N3X3JpbmdfY29uc107CisJCXR4X2J1ZiA9ICZ0eHItPnR4X2J1Zl9yaW5nW3N3X3JpbmdfY29uc107CiAJCXNrYiA9IHR4X2J1Zi0+c2tiOwogCiAJCS8qIHBhcnRpYWwgQkQgY29tcGxldGlvbnMgcG9zc2libGUgd2l0aCBUU08gcGFja2V0cyAqLwpAQCAtMjUyMiw3ICsyNjMwLDcgQEAKIAogCQkJcGNpX3VubWFwX3BhZ2UoYnAtPnBkZXYsCiAJCQkJcGNpX3VubWFwX2FkZHIoCi0JCQkJCSZicC0+dHhfYnVmX3JpbmdbVFhfUklOR19JRFgoc3dfY29ucyldLAorCQkJCQkmdHhyLT50eF9idWZfcmluZ1tUWF9SSU5HX0lEWChzd19jb25zKV0sCiAJCQkJICAgICAgIAltYXBwaW5nKSwKIAkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUsCiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CkBAIC0yNTM4LDQ0ICsyNjQ2LDQ2IEBACiAJCWh3X2NvbnMgPSBibngyX2dldF9od190eF9jb25zKGJuYXBpKTsKIAl9CiAKLQlibmFwaS0+aHdfdHhfY29ucyA9IGh3X2NvbnM7Ci0JYm5hcGktPnR4X2NvbnMgPSBzd19jb25zOworCXR4ci0+aHdfdHhfY29ucyA9IGh3X2NvbnM7CisJdHhyLT50eF9jb25zID0gc3dfY29uczsKKwogCS8qIE5lZWQgdG8gbWFrZSB0aGUgdHhfY29ucyB1cGRhdGUgdmlzaWJsZSB0byBibngyX3N0YXJ0X3htaXQoKQotCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKKwkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCiAJICogbWVtb3J5IGJhcnJpZXIsIHRoZXJlIGlzIGEgc21hbGwgcG9zc2liaWxpdHkgdGhhdCBibngyX3N0YXJ0X3htaXQoKQogCSAqIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQgZm9yZXZlci4KIAkgKi8KIAlzbXBfbWIoKTsKIAotCWlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpKSAmJgotCQkgICAgIChibngyX3R4X2F2YWlsKGJwLCBibmFwaSkgPiBicC0+dHhfd2FrZV90aHJlc2gpKSB7Ci0JCW5ldGlmX3R4X2xvY2soYnAtPmRldik7Ci0JCWlmICgobmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSkgJiYKLQkJICAgIChibngyX3R4X2F2YWlsKGJwLCBibmFwaSkgPiBicC0+dHhfd2FrZV90aHJlc2gpKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShicC0+ZGV2KTsKLQkJbmV0aWZfdHhfdW5sb2NrKGJwLT5kZXYpOworCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpICYmCisJCSAgICAgKGJueDJfdHhfYXZhaWwoYnAsIHR4cikgPiBicC0+dHhfd2FrZV90aHJlc2gpKSB7CisJCV9fbmV0aWZfdHhfbG9jayh0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCWlmICgobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSAmJgorCQkgICAgKGJueDJfdHhfYXZhaWwoYnAsIHR4cikgPiBicC0+dHhfd2FrZV90aHJlc2gpKQorCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOworCQlfX25ldGlmX3R4X3VubG9jayh0eHEpOwogCX0KKwogCXJldHVybiB0eF9wa3Q7CiB9CiAKIHN0YXRpYyB2b2lkCi1ibngyX3JldXNlX3J4X3NrYl9wYWdlcyhzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX25hcGkgKmJuYXBpLAorYm54Ml9yZXVzZV9yeF9za2JfcGFnZXMoc3RydWN0IGJueDIgKmJwLCBzdHJ1Y3QgYm54Ml9yeF9yaW5nX2luZm8gKnJ4ciwKIAkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc3dfcGcgKmNvbnNfcnhfcGcsICpwcm9kX3J4X3BnOwogCXN0cnVjdCByeF9iZCAqY29uc19iZCwgKnByb2RfYmQ7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCWludCBpOwotCXUxNiBod19wcm9kID0gYm5hcGktPnJ4X3BnX3Byb2QsIHByb2Q7Ci0JdTE2IGNvbnMgPSBibmFwaS0+cnhfcGdfY29uczsKKwl1MTYgaHdfcHJvZCA9IHJ4ci0+cnhfcGdfcHJvZCwgcHJvZDsKKwl1MTYgY29ucyA9IHJ4ci0+cnhfcGdfY29uczsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCXByb2QgPSBSWF9QR19SSU5HX0lEWChod19wcm9kKTsKIAotCQlwcm9kX3J4X3BnID0gJmJwLT5yeF9wZ19yaW5nW3Byb2RdOwotCQljb25zX3J4X3BnID0gJmJwLT5yeF9wZ19yaW5nW2NvbnNdOwotCQljb25zX2JkID0gJmJwLT5yeF9wZ19kZXNjX3JpbmdbUlhfUklORyhjb25zKV1bUlhfSURYKGNvbnMpXTsKLQkJcHJvZF9iZCA9ICZicC0+cnhfcGdfZGVzY19yaW5nW1JYX1JJTkcocHJvZCldW1JYX0lEWChwcm9kKV07CisJCXByb2RfcnhfcGcgPSAmcnhyLT5yeF9wZ19yaW5nW3Byb2RdOworCQljb25zX3J4X3BnID0gJnJ4ci0+cnhfcGdfcmluZ1tjb25zXTsKKwkJY29uc19iZCA9ICZyeHItPnJ4X3BnX2Rlc2NfcmluZ1tSWF9SSU5HKGNvbnMpXVtSWF9JRFgoY29ucyldOworCQlwcm9kX2JkID0gJnJ4ci0+cnhfcGdfZGVzY19yaW5nW1JYX1JJTkcocHJvZCldW1JYX0lEWChwcm9kKV07CiAKIAkJaWYgKGkgPT0gMCAmJiBza2IpIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMjYwNCwyNSArMjcxNCwyNSBAQAogCQljb25zID0gUlhfUEdfUklOR19JRFgoTkVYVF9SWF9CRChjb25zKSk7CiAJCWh3X3Byb2QgPSBORVhUX1JYX0JEKGh3X3Byb2QpOwogCX0KLQlibmFwaS0+cnhfcGdfcHJvZCA9IGh3X3Byb2Q7Ci0JYm5hcGktPnJ4X3BnX2NvbnMgPSBjb25zOworCXJ4ci0+cnhfcGdfcHJvZCA9IGh3X3Byb2Q7CisJcnhyLT5yeF9wZ19jb25zID0gY29uczsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1ibngyX3JldXNlX3J4X3NrYihzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX25hcGkgKmJuYXBpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCXUxNiBjb25zLCB1MTYgcHJvZCkKK2JueDJfcmV1c2Vfcnhfc2tiKHN0cnVjdCBibngyICpicCwgc3RydWN0IGJueDJfcnhfcmluZ19pbmZvICpyeHIsCisJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGNvbnMsIHUxNiBwcm9kKQogewogCXN0cnVjdCBzd19iZCAqY29uc19yeF9idWYsICpwcm9kX3J4X2J1ZjsKIAlzdHJ1Y3QgcnhfYmQgKmNvbnNfYmQsICpwcm9kX2JkOwogCi0JY29uc19yeF9idWYgPSAmYnAtPnJ4X2J1Zl9yaW5nW2NvbnNdOwotCXByb2RfcnhfYnVmID0gJmJwLT5yeF9idWZfcmluZ1twcm9kXTsKKwljb25zX3J4X2J1ZiA9ICZyeHItPnJ4X2J1Zl9yaW5nW2NvbnNdOworCXByb2RfcnhfYnVmID0gJnJ4ci0+cnhfYnVmX3JpbmdbcHJvZF07CiAKIAlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYnAtPnBkZXYsCiAJCXBjaV91bm1hcF9hZGRyKGNvbnNfcnhfYnVmLCBtYXBwaW5nKSwKLQkJYnAtPnJ4X29mZnNldCArIFJYX0NPUFlfVEhSRVNILCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlCTlgyX1JYX09GRlNFVCArIEJOWDJfUlhfQ09QWV9USFJFU0gsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKLQlibmFwaS0+cnhfcHJvZF9ic2VxICs9IGJwLT5yeF9idWZfdXNlX3NpemU7CisJcnhyLT5yeF9wcm9kX2JzZXEgKz0gYnAtPnJ4X2J1Zl91c2Vfc2l6ZTsKIAogCXByb2RfcnhfYnVmLT5za2IgPSBza2I7CiAKQEAgLTI2MzIsMzMgKzI3NDIsMzMgQEAKIAlwY2lfdW5tYXBfYWRkcl9zZXQocHJvZF9yeF9idWYsIG1hcHBpbmcsCiAJCQlwY2lfdW5tYXBfYWRkcihjb25zX3J4X2J1ZiwgbWFwcGluZykpOwogCi0JY29uc19iZCA9ICZicC0+cnhfZGVzY19yaW5nW1JYX1JJTkcoY29ucyldW1JYX0lEWChjb25zKV07Ci0JcHJvZF9iZCA9ICZicC0+cnhfZGVzY19yaW5nW1JYX1JJTkcocHJvZCldW1JYX0lEWChwcm9kKV07CisJY29uc19iZCA9ICZyeHItPnJ4X2Rlc2NfcmluZ1tSWF9SSU5HKGNvbnMpXVtSWF9JRFgoY29ucyldOworCXByb2RfYmQgPSAmcnhyLT5yeF9kZXNjX3JpbmdbUlhfUklORyhwcm9kKV1bUlhfSURYKHByb2QpXTsKIAlwcm9kX2JkLT5yeF9iZF9oYWRkcl9oaSA9IGNvbnNfYmQtPnJ4X2JkX2hhZGRyX2hpOwogCXByb2RfYmQtPnJ4X2JkX2hhZGRyX2xvID0gY29uc19iZC0+cnhfYmRfaGFkZHJfbG87CiB9CiAKIHN0YXRpYyBpbnQKLWJueDJfcnhfc2tiKHN0cnVjdCBibngyICpicCwgc3RydWN0IGJueDJfbmFwaSAqYm5hcGksIHN0cnVjdCBza19idWZmICpza2IsCitibngyX3J4X3NrYihzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX3J4X3JpbmdfaW5mbyAqcnhyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgaGRyX2xlbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKIAkgICAgdTMyIHJpbmdfaWR4KQogewogCWludCBlcnI7CiAJdTE2IHByb2QgPSByaW5nX2lkeCAmIDB4ZmZmZjsKIAotCWVyciA9IGJueDJfYWxsb2Nfcnhfc2tiKGJwLCBibmFwaSwgcHJvZCk7CisJZXJyID0gYm54Ml9hbGxvY19yeF9za2IoYnAsIHJ4ciwgcHJvZCk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJYm54Ml9yZXVzZV9yeF9za2IoYnAsIGJuYXBpLCBza2IsICh1MTYpIChyaW5nX2lkeCA+PiAxNiksIHByb2QpOworCQlibngyX3JldXNlX3J4X3NrYihicCwgcnhyLCBza2IsICh1MTYpIChyaW5nX2lkeCA+PiAxNiksIHByb2QpOwogCQlpZiAoaGRyX2xlbikgewogCQkJdW5zaWduZWQgaW50IHJhd19sZW4gPSBsZW4gKyA0OwogCQkJaW50IHBhZ2VzID0gUEFHRV9BTElHTihyYXdfbGVuIC0gaGRyX2xlbikgPj4gUEFHRV9TSElGVDsKIAotCQkJYm54Ml9yZXVzZV9yeF9za2JfcGFnZXMoYnAsIGJuYXBpLCBOVUxMLCBwYWdlcyk7CisJCQlibngyX3JldXNlX3J4X3NrYl9wYWdlcyhicCwgcnhyLCBOVUxMLCBwYWdlcyk7CiAJCX0KIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlza2JfcmVzZXJ2ZShza2IsIGJwLT5yeF9vZmZzZXQpOworCXNrYl9yZXNlcnZlKHNrYiwgQk5YMl9SWF9PRkZTRVQpOwogCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIGRtYV9hZGRyLCBicC0+cnhfYnVmX3VzZV9zaXplLAogCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKQEAgLTI2NjgsOCArMjc3OCw4IEBACiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgaW50IGksIGZyYWdfbGVuLCBmcmFnX3NpemUsIHBhZ2VzOwogCQlzdHJ1Y3Qgc3dfcGcgKnJ4X3BnOwotCQl1MTYgcGdfY29ucyA9IGJuYXBpLT5yeF9wZ19jb25zOwotCQl1MTYgcGdfcHJvZCA9IGJuYXBpLT5yeF9wZ19wcm9kOworCQl1MTYgcGdfY29ucyA9IHJ4ci0+cnhfcGdfY29uczsKKwkJdTE2IHBnX3Byb2QgPSByeHItPnJ4X3BnX3Byb2Q7CiAKIAkJZnJhZ19zaXplID0gbGVuICsgNCAtIGhkcl9sZW47CiAJCXBhZ2VzID0gUEFHRV9BTElHTihmcmFnX3NpemUpID4+IFBBR0VfU0hJRlQ7CkBAIC0yNjgwLDkgKzI3OTAsOSBAQAogCQkJaWYgKHVubGlrZWx5KGZyYWdfbGVuIDw9IDQpKSB7CiAJCQkJdW5zaWduZWQgaW50IHRhaWwgPSA0IC0gZnJhZ19sZW47CiAKLQkJCQlibmFwaS0+cnhfcGdfY29ucyA9IHBnX2NvbnM7Ci0JCQkJYm5hcGktPnJ4X3BnX3Byb2QgPSBwZ19wcm9kOwotCQkJCWJueDJfcmV1c2Vfcnhfc2tiX3BhZ2VzKGJwLCBibmFwaSwgTlVMTCwKKwkJCQlyeHItPnJ4X3BnX2NvbnMgPSBwZ19jb25zOworCQkJCXJ4ci0+cnhfcGdfcHJvZCA9IHBnX3Byb2Q7CisJCQkJYm54Ml9yZXVzZV9yeF9za2JfcGFnZXMoYnAsIHJ4ciwgTlVMTCwKIAkJCQkJCQlwYWdlcyAtIGkpOwogCQkJCXNrYi0+bGVuIC09IHRhaWw7CiAJCQkJaWYgKGkgPT0gMCkgewpAQCAtMjY5Niw3ICsyODA2LDcgQEAKIAkJCQl9CiAJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCQlyeF9wZyA9ICZicC0+cnhfcGdfcmluZ1twZ19jb25zXTsKKwkJCXJ4X3BnID0gJnJ4ci0+cnhfcGdfcmluZ1twZ19jb25zXTsKIAogCQkJcGNpX3VubWFwX3BhZ2UoYnAtPnBkZXYsIHBjaV91bm1hcF9hZGRyKHJ4X3BnLCBtYXBwaW5nKSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtMjcwNywxMSArMjgxNywxMiBAQAogCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgaSwgcnhfcGctPnBhZ2UsIDAsIGZyYWdfbGVuKTsKIAkJCXJ4X3BnLT5wYWdlID0gTlVMTDsKIAotCQkJZXJyID0gYm54Ml9hbGxvY19yeF9wYWdlKGJwLCBSWF9QR19SSU5HX0lEWChwZ19wcm9kKSk7CisJCQllcnIgPSBibngyX2FsbG9jX3J4X3BhZ2UoYnAsIHJ4ciwKKwkJCQkJCSBSWF9QR19SSU5HX0lEWChwZ19wcm9kKSk7CiAJCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJCWJuYXBpLT5yeF9wZ19jb25zID0gcGdfY29uczsKLQkJCQlibmFwaS0+cnhfcGdfcHJvZCA9IHBnX3Byb2Q7Ci0JCQkJYm54Ml9yZXVzZV9yeF9za2JfcGFnZXMoYnAsIGJuYXBpLCBza2IsCisJCQkJcnhyLT5yeF9wZ19jb25zID0gcGdfY29uczsKKwkJCQlyeHItPnJ4X3BnX3Byb2QgPSBwZ19wcm9kOworCQkJCWJueDJfcmV1c2Vfcnhfc2tiX3BhZ2VzKGJwLCByeHIsIHNrYiwKIAkJCQkJCQlwYWdlcyAtIGkpOwogCQkJCXJldHVybiBlcnI7CiAJCQl9CkBAIC0yNzI0LDggKzI4MzUsOCBAQAogCQkJcGdfcHJvZCA9IE5FWFRfUlhfQkQocGdfcHJvZCk7CiAJCQlwZ19jb25zID0gUlhfUEdfUklOR19JRFgoTkVYVF9SWF9CRChwZ19jb25zKSk7CiAJCX0KLQkJYm5hcGktPnJ4X3BnX3Byb2QgPSBwZ19wcm9kOwotCQlibmFwaS0+cnhfcGdfY29ucyA9IHBnX2NvbnM7CisJCXJ4ci0+cnhfcGdfcHJvZCA9IHBnX3Byb2Q7CisJCXJ4ci0+cnhfcGdfY29ucyA9IHBnX2NvbnM7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjczMyw4ICsyODQ0LDExIEBACiBzdGF0aWMgaW5saW5lIHUxNgogYm54Ml9nZXRfaHdfcnhfY29ucyhzdHJ1Y3QgYm54Ml9uYXBpICpibmFwaSkKIHsKLQl1MTYgY29ucyA9IGJuYXBpLT5zdGF0dXNfYmxrLT5zdGF0dXNfcnhfcXVpY2tfY29uc3VtZXJfaW5kZXgwOworCXUxNiBjb25zOwogCisJLyogVGVsbCBjb21waWxlciB0aGF0IHN0YXR1cyBibG9jayBmaWVsZHMgY2FuIGNoYW5nZS4gKi8KKwliYXJyaWVyKCk7CisJY29ucyA9ICpibmFwaS0+aHdfcnhfY29uc19wdHI7CiAJaWYgKHVubGlrZWx5KChjb25zICYgTUFYX1JYX0RFU0NfQ05UKSA9PSBNQVhfUlhfREVTQ19DTlQpKQogCQljb25zKys7CiAJcmV0dXJuIGNvbnM7CkBAIC0yNzQzLDEzICsyODU3LDE0IEBACiBzdGF0aWMgaW50CiBibngyX3J4X2ludChzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX25hcGkgKmJuYXBpLCBpbnQgYnVkZ2V0KQogeworCXN0cnVjdCBibngyX3J4X3JpbmdfaW5mbyAqcnhyID0gJmJuYXBpLT5yeF9yaW5nOwogCXUxNiBod19jb25zLCBzd19jb25zLCBzd19yaW5nX2NvbnMsIHN3X3Byb2QsIHN3X3JpbmdfcHJvZDsKIAlzdHJ1Y3QgbDJfZmhkciAqcnhfaGRyOwogCWludCByeF9wa3QgPSAwLCBwZ19yaW5nX3VzZWQgPSAwOwogCiAJaHdfY29ucyA9IGJueDJfZ2V0X2h3X3J4X2NvbnMoYm5hcGkpOwotCXN3X2NvbnMgPSBibmFwaS0+cnhfY29uczsKLQlzd19wcm9kID0gYm5hcGktPnJ4X3Byb2Q7CisJc3dfY29ucyA9IHJ4ci0+cnhfY29uczsKKwlzd19wcm9kID0gcnhyLT5yeF9wcm9kOwogCiAJLyogTWVtb3J5IGJhcnJpZXIgbmVjZXNzYXJ5IGFzIHNwZWN1bGF0aXZlIHJlYWRzIG9mIHRoZSByeAogCSAqIGJ1ZmZlciBjYW4gYmUgYWhlYWQgb2YgdGhlIGluZGV4IGluIHRoZSBzdGF0dXMgYmxvY2sKQEAgLTI3NjUsNyArMjg4MCw3IEBACiAJCXN3X3JpbmdfY29ucyA9IFJYX1JJTkdfSURYKHN3X2NvbnMpOwogCQlzd19yaW5nX3Byb2QgPSBSWF9SSU5HX0lEWChzd19wcm9kKTsKIAotCQlyeF9idWYgPSAmYnAtPnJ4X2J1Zl9yaW5nW3N3X3JpbmdfY29uc107CisJCXJ4X2J1ZiA9ICZyeHItPnJ4X2J1Zl9yaW5nW3N3X3JpbmdfY29uc107CiAJCXNrYiA9IHJ4X2J1Zi0+c2tiOwogCiAJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKQEAgLTI3NzMsNyArMjg4OCw4IEBACiAJCWRtYV9hZGRyID0gcGNpX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKTsKIAogCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYnAtPnBkZXYsIGRtYV9hZGRyLAotCQkJYnAtPnJ4X29mZnNldCArIFJYX0NPUFlfVEhSRVNILCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJQk5YMl9SWF9PRkZTRVQgKyBCTlgyX1JYX0NPUFlfVEhSRVNILAorCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQlyeF9oZHIgPSAoc3RydWN0IGwyX2ZoZHIgKikgc2tiLT5kYXRhOwogCQlsZW4gPSByeF9oZHItPmwyX2ZoZHJfcGt0X2xlbjsKQEAgLTI3ODUsNyArMjkwMSw3IEBACiAJCQlMMl9GSERSX0VSUk9SU19UT09fU0hPUlQgfAogCQkJTDJfRkhEUl9FUlJPUlNfR0lBTlRfRlJBTUUpKSB7CiAKLQkJCWJueDJfcmV1c2Vfcnhfc2tiKGJwLCBibmFwaSwgc2tiLCBzd19yaW5nX2NvbnMsCisJCQlibngyX3JldXNlX3J4X3NrYihicCwgcnhyLCBza2IsIHN3X3JpbmdfY29ucywKIAkJCQkJICBzd19yaW5nX3Byb2QpOwogCQkJZ290byBuZXh0X3J4OwogCQl9CkBAIC0yODA1LDIyICsyOTIxLDIzIEBACiAKIAkJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGxlbiArIDIpOwogCQkJaWYgKG5ld19za2IgPT0gTlVMTCkgewotCQkJCWJueDJfcmV1c2Vfcnhfc2tiKGJwLCBibmFwaSwgc2tiLCBzd19yaW5nX2NvbnMsCisJCQkJYm54Ml9yZXVzZV9yeF9za2IoYnAsIHJ4ciwgc2tiLCBzd19yaW5nX2NvbnMsCiAJCQkJCQkgIHN3X3JpbmdfcHJvZCk7CiAJCQkJZ290byBuZXh0X3J4OwogCQkJfQogCiAJCQkvKiBhbGlnbmVkIGNvcHkgKi8KLQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgYnAtPnJ4X29mZnNldCAtIDIsCisJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsCisJCQkJCQkJIEJOWDJfUlhfT0ZGU0VUIC0gMiwKIAkJCQkgICAgICBuZXdfc2tiLT5kYXRhLCBsZW4gKyAyKTsKIAkJCXNrYl9yZXNlcnZlKG5ld19za2IsIDIpOwogCQkJc2tiX3B1dChuZXdfc2tiLCBsZW4pOwogCi0JCQlibngyX3JldXNlX3J4X3NrYihicCwgYm5hcGksIHNrYiwKKwkJCWJueDJfcmV1c2Vfcnhfc2tiKGJwLCByeHIsIHNrYiwKIAkJCQlzd19yaW5nX2NvbnMsIHN3X3JpbmdfcHJvZCk7CiAKIAkJCXNrYiA9IG5ld19za2I7Ci0JCX0gZWxzZSBpZiAodW5saWtlbHkoYm54Ml9yeF9za2IoYnAsIGJuYXBpLCBza2IsIGxlbiwgaGRyX2xlbiwKKwkJfSBlbHNlIGlmICh1bmxpa2VseShibngyX3J4X3NrYihicCwgcnhyLCBza2IsIGxlbiwgaGRyX2xlbiwKIAkJCSAgIGRtYV9hZGRyLCAoc3dfcmluZ19jb25zIDw8IDE2KSB8IHN3X3JpbmdfcHJvZCkpKQogCQkJZ290byBuZXh0X3J4OwogCkBAIC0yODY5LDE2ICsyOTg2LDE1IEBACiAJCQlybWIoKTsKIAkJfQogCX0KLQlibmFwaS0+cnhfY29ucyA9IHN3X2NvbnM7Ci0JYm5hcGktPnJ4X3Byb2QgPSBzd19wcm9kOworCXJ4ci0+cnhfY29ucyA9IHN3X2NvbnM7CisJcnhyLT5yeF9wcm9kID0gc3dfcHJvZDsKIAogCWlmIChwZ19yaW5nX3VzZWQpCi0JCVJFR19XUjE2KGJwLCBNQl9SWF9DSURfQUREUiArIEJOWDJfTDJDVFhfSE9TVF9QR19CRElEWCwKLQkJCSBibmFwaS0+cnhfcGdfcHJvZCk7CisJCVJFR19XUjE2KGJwLCByeHItPnJ4X3BnX2JpZHhfYWRkciwgcnhyLT5yeF9wZ19wcm9kKTsKIAotCVJFR19XUjE2KGJwLCBNQl9SWF9DSURfQUREUiArIEJOWDJfTDJDVFhfSE9TVF9CRElEWCwgc3dfcHJvZCk7CisJUkVHX1dSMTYoYnAsIHJ4ci0+cnhfYmlkeF9hZGRyLCBzd19wcm9kKTsKIAotCVJFR19XUihicCwgTUJfUlhfQ0lEX0FERFIgKyBCTlgyX0wyQ1RYX0hPU1RfQlNFUSwgYm5hcGktPnJ4X3Byb2RfYnNlcSk7CisJUkVHX1dSKGJwLCByeHItPnJ4X2JzZXFfYWRkciwgcnhyLT5yeF9wcm9kX2JzZXEpOwogCiAJbW1pb3diKCk7CiAKQEAgLTI4OTIsMTEgKzMwMDgsMTEgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdAogYm54Ml9tc2koaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7Ci0Jc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgYm54Ml9uYXBpICpibmFwaSA9ICZicC0+Ym54Ml9uYXBpWzBdOworCXN0cnVjdCBibngyX25hcGkgKmJuYXBpID0gZGV2X2luc3RhbmNlOworCXN0cnVjdCBibngyICpicCA9IGJuYXBpLT5icDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnAtPmRldjsKIAotCXByZWZldGNoKGJuYXBpLT5zdGF0dXNfYmxrKTsKKwlwcmVmZXRjaChibmFwaS0+c3RhdHVzX2Jsay5tc2kpOwogCVJFR19XUihicCwgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTUQsCiAJCUJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX1VTRV9JTlRfSENfUEFSQU0gfAogCQlCTlgyX1BDSUNGR19JTlRfQUNLX0NNRF9NQVNLX0lOVCk7CkBAIC0yOTEzLDExICszMDI5LDExIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QKIGJueDJfbXNpXzFzaG90KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2luc3RhbmNlOwotCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVswXTsKKwlzdHJ1Y3QgYm54Ml9uYXBpICpibmFwaSA9IGRldl9pbnN0YW5jZTsKKwlzdHJ1Y3QgYm54MiAqYnAgPSBibmFwaS0+YnA7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJwLT5kZXY7CiAKLQlwcmVmZXRjaChibmFwaS0+c3RhdHVzX2Jsayk7CisJcHJlZmV0Y2goYm5hcGktPnN0YXR1c19ibGsubXNpKTsKIAogCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZC4gKi8KIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCkBAIC0yOTMxLDEwICszMDQ3LDEwIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QKIGJueDJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2luc3RhbmNlOwotCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVswXTsKLQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzYmxrID0gYm5hcGktPnN0YXR1c19ibGs7CisJc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSBkZXZfaW5zdGFuY2U7CisJc3RydWN0IGJueDIgKmJwID0gYm5hcGktPmJwOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBicC0+ZGV2OworCXN0cnVjdCBzdGF0dXNfYmxvY2sgKnNibGsgPSBibmFwaS0+c3RhdHVzX2Jsay5tc2k7CiAKIAkvKiBXaGVuIHVzaW5nIElOVHgsIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgaW50ZXJydXB0IHRvIGFycml2ZQogCSAqIGF0IHRoZSBDUFUgYmVmb3JlIHRoZSBzdGF0dXMgYmxvY2sgcG9zdGVkIHByaW9yIHRvIHRoZQpAQCAtMjk2OCwyMSArMzA4NCwxNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGlycXJldHVybl90Ci1ibngyX3R4X21zaXgoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQorc3RhdGljIGlubGluZSBpbnQKK2JueDJfaGFzX2Zhc3Rfd29yayhzdHJ1Y3QgYm54Ml9uYXBpICpibmFwaSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2luc3RhbmNlOwotCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVtCTlgyX1RYX1ZFQ107CisJc3RydWN0IGJueDJfdHhfcmluZ19pbmZvICp0eHIgPSAmYm5hcGktPnR4X3Jpbmc7CisJc3RydWN0IGJueDJfcnhfcmluZ19pbmZvICpyeHIgPSAmYm5hcGktPnJ4X3Jpbmc7CiAKLQlwcmVmZXRjaChibmFwaS0+c3RhdHVzX2Jsa19tc2l4KTsKLQotCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZC4gKi8KLQlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQotCW5ldGlmX3J4X3NjaGVkdWxlKGRldiwgJmJuYXBpLT5uYXBpKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaWYgKChibngyX2dldF9od19yeF9jb25zKGJuYXBpKSAhPSByeHItPnJ4X2NvbnMpIHx8CisJICAgIChibngyX2dldF9od190eF9jb25zKGJuYXBpKSAhPSB0eHItPmh3X3R4X2NvbnMpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogI2RlZmluZSBTVEFUVVNfQVRUTl9FVkVOVFMJKFNUQVRVU19BVFROX0JJVFNfTElOS19TVEFURSB8IFwKQEAgLTI5OTEsMTAgKzMxMDIsOSBAQAogc3RhdGljIGlubGluZSBpbnQKIGJueDJfaGFzX3dvcmsoc3RydWN0IGJueDJfbmFwaSAqYm5hcGkpCiB7Ci0Jc3RydWN0IHN0YXR1c19ibG9jayAqc2JsayA9IGJuYXBpLT5zdGF0dXNfYmxrOworCXN0cnVjdCBzdGF0dXNfYmxvY2sgKnNibGsgPSBibmFwaS0+c3RhdHVzX2Jsay5tc2k7CiAKLQlpZiAoKGJueDJfZ2V0X2h3X3J4X2NvbnMoYm5hcGkpICE9IGJuYXBpLT5yeF9jb25zKSB8fAotCSAgICAoYm54Ml9nZXRfaHdfdHhfY29ucyhibmFwaSkgIT0gYm5hcGktPmh3X3R4X2NvbnMpKQorCWlmIChibngyX2hhc19mYXN0X3dvcmsoYm5hcGkpKQogCQlyZXR1cm4gMTsKIAogCWlmICgoc2Jsay0+c3RhdHVzX2F0dG5fYml0cyAmIFNUQVRVU19BVFROX0VWRU5UUykgIT0KQEAgLTMwMDQsMzMgKzMxMTQsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJueDJfdHhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCitzdGF0aWMgdm9pZCBibngyX3BvbGxfbGluayhzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX25hcGkgKmJuYXBpKQogewotCXN0cnVjdCBibngyX25hcGkgKmJuYXBpID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBibngyX25hcGksIG5hcGkpOwotCXN0cnVjdCBibngyICpicCA9IGJuYXBpLT5icDsKLQlpbnQgd29ya19kb25lID0gMDsKLQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXggKnNibGsgPSBibmFwaS0+c3RhdHVzX2Jsa19tc2l4OwotCi0JZG8gewotCQl3b3JrX2RvbmUgKz0gYm54Ml90eF9pbnQoYnAsIGJuYXBpLCBidWRnZXQgLSB3b3JrX2RvbmUpOwotCQlpZiAodW5saWtlbHkod29ya19kb25lID49IGJ1ZGdldCkpCi0JCQlyZXR1cm4gd29ya19kb25lOwotCi0JCWJuYXBpLT5sYXN0X3N0YXR1c19pZHggPSBzYmxrLT5zdGF0dXNfaWR4OwotCQlybWIoKTsKLQl9IHdoaWxlIChibngyX2dldF9od190eF9jb25zKGJuYXBpKSAhPSBibmFwaS0+aHdfdHhfY29ucyk7Ci0KLQluZXRpZl9yeF9jb21wbGV0ZShicC0+ZGV2LCBuYXBpKTsKLQlSRUdfV1IoYnAsIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01ELCBibmFwaS0+aW50X251bSB8Ci0JICAgICAgIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOREVYX1ZBTElEIHwKLQkgICAgICAgYm5hcGktPmxhc3Rfc3RhdHVzX2lkeCk7Ci0JcmV0dXJuIHdvcmtfZG9uZTsKLX0KLQotc3RhdGljIGludCBibngyX3BvbGxfd29yayhzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX25hcGkgKmJuYXBpLAotCQkJICBpbnQgd29ya19kb25lLCBpbnQgYnVkZ2V0KQotewotCXN0cnVjdCBzdGF0dXNfYmxvY2sgKnNibGsgPSBibmFwaS0+c3RhdHVzX2JsazsKKwlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzYmxrID0gYm5hcGktPnN0YXR1c19ibGsubXNpOwogCXUzMiBzdGF0dXNfYXR0bl9iaXRzID0gc2Jsay0+c3RhdHVzX2F0dG5fYml0czsKIAl1MzIgc3RhdHVzX2F0dG5fYml0c19hY2sgPSBzYmxrLT5zdGF0dXNfYXR0bl9iaXRzX2FjazsKIApAQCAtMzA0NiwyNCArMzEzMiw2MCBAQAogCQkgICAgICAgYnAtPmhjX2NtZCB8IEJOWDJfSENfQ09NTUFORF9DT0FMX05PV19XT19JTlQpOwogCQlSRUdfUkQoYnAsIEJOWDJfSENfQ09NTUFORCk7CiAJfQorfQogCi0JaWYgKGJueDJfZ2V0X2h3X3R4X2NvbnMoYm5hcGkpICE9IGJuYXBpLT5od190eF9jb25zKQorc3RhdGljIGludCBibngyX3BvbGxfd29yayhzdHJ1Y3QgYm54MiAqYnAsIHN0cnVjdCBibngyX25hcGkgKmJuYXBpLAorCQkJICBpbnQgd29ya19kb25lLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBibngyX3R4X3JpbmdfaW5mbyAqdHhyID0gJmJuYXBpLT50eF9yaW5nOworCXN0cnVjdCBibngyX3J4X3JpbmdfaW5mbyAqcnhyID0gJmJuYXBpLT5yeF9yaW5nOworCisJaWYgKGJueDJfZ2V0X2h3X3R4X2NvbnMoYm5hcGkpICE9IHR4ci0+aHdfdHhfY29ucykKIAkJYm54Ml90eF9pbnQoYnAsIGJuYXBpLCAwKTsKIAotCWlmIChibngyX2dldF9od19yeF9jb25zKGJuYXBpKSAhPSBibmFwaS0+cnhfY29ucykKKwlpZiAoYm54Ml9nZXRfaHdfcnhfY29ucyhibmFwaSkgIT0gcnhyLT5yeF9jb25zKQogCQl3b3JrX2RvbmUgKz0gYm54Ml9yeF9pbnQoYnAsIGJuYXBpLCBidWRnZXQgLSB3b3JrX2RvbmUpOwogCiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KIAorc3RhdGljIGludCBibngyX3BvbGxfbXNpeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJueDJfbmFwaSwgbmFwaSk7CisJc3RydWN0IGJueDIgKmJwID0gYm5hcGktPmJwOworCWludCB3b3JrX2RvbmUgPSAwOworCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeCAqc2JsayA9IGJuYXBpLT5zdGF0dXNfYmxrLm1zaXg7CisKKwl3aGlsZSAoMSkgeworCQl3b3JrX2RvbmUgPSBibngyX3BvbGxfd29yayhicCwgYm5hcGksIHdvcmtfZG9uZSwgYnVkZ2V0KTsKKwkJaWYgKHVubGlrZWx5KHdvcmtfZG9uZSA+PSBidWRnZXQpKQorCQkJYnJlYWs7CisKKwkJYm5hcGktPmxhc3Rfc3RhdHVzX2lkeCA9IHNibGstPnN0YXR1c19pZHg7CisJCS8qIHN0YXR1cyBpZHggbXVzdCBiZSByZWFkIGJlZm9yZSBjaGVja2luZyBmb3IgbW9yZSB3b3JrLiAqLworCQlybWIoKTsKKwkJaWYgKGxpa2VseSghYm54Ml9oYXNfZmFzdF93b3JrKGJuYXBpKSkpIHsKKworCQkJbmV0aWZfcnhfY29tcGxldGUoYnAtPmRldiwgbmFwaSk7CisJCQlSRUdfV1IoYnAsIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01ELCBibmFwaS0+aW50X251bSB8CisJCQkgICAgICAgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTURfSU5ERVhfVkFMSUQgfAorCQkJICAgICAgIGJuYXBpLT5sYXN0X3N0YXR1c19pZHgpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKwogc3RhdGljIGludCBibngyX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBibngyX25hcGkgKmJuYXBpID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBibngyX25hcGksIG5hcGkpOwogCXN0cnVjdCBibngyICpicCA9IGJuYXBpLT5icDsKIAlpbnQgd29ya19kb25lID0gMDsKLQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzYmxrID0gYm5hcGktPnN0YXR1c19ibGs7CisJc3RydWN0IHN0YXR1c19ibG9jayAqc2JsayA9IGJuYXBpLT5zdGF0dXNfYmxrLm1zaTsKIAogCXdoaWxlICgxKSB7CisJCWJueDJfcG9sbF9saW5rKGJwLCBibmFwaSk7CisKIAkJd29ya19kb25lID0gYm54Ml9wb2xsX3dvcmsoYnAsIGJuYXBpLCB3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKIAkJaWYgKHVubGlrZWx5KHdvcmtfZG9uZSA+PSBidWRnZXQpKQpAQCAtMzEwNiw2ICszMjI4LDcgQEAKIHsKIAlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiByeF9tb2RlLCBzb3J0X21vZGU7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKnVjX3B0cjsKIAlpbnQgaTsKIAogCXNwaW5fbG9ja19iaCgmYnAtPnBoeV9sb2NrKTsKQEAgLTMxNjEsNiArMzI4NCwyNSBAQAogCQlzb3J0X21vZGUgfD0gQk5YMl9SUE1fU09SVF9VU0VSMF9NQ19IU0hfRU47CiAJfQogCisJdWNfcHRyID0gTlVMTDsKKwlpZiAoZGV2LT51Y19jb3VudCA+IEJOWDJfTUFYX1VOSUNBU1RfQUREUkVTU0VTKSB7CisJCXJ4X21vZGUgfD0gQk5YMl9FTUFDX1JYX01PREVfUFJPTUlTQ1VPVVM7CisJCXNvcnRfbW9kZSB8PSBCTlgyX1JQTV9TT1JUX1VTRVIwX1BST01fRU4gfAorCQkJICAgICBCTlgyX1JQTV9TT1JUX1VTRVIwX1BST01fVkxBTjsKKwl9IGVsc2UgaWYgKCEoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkgeworCQl1Y19wdHIgPSBkZXYtPnVjX2xpc3Q7CisKKwkJLyogQWRkIGFsbCBlbnRyaWVzIGludG8gdG8gdGhlIG1hdGNoIGZpbHRlciBsaXN0ICovCisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPnVjX2NvdW50OyBpKyspIHsKKwkJCWJueDJfc2V0X21hY19hZGRyKGJwLCB1Y19wdHItPmRhX2FkZHIsCisJCQkJCSAgaSArIEJOWDJfU1RBUlRfVU5JQ0FTVF9BRERSRVNTX0lOREVYKTsKKwkJCXNvcnRfbW9kZSB8PSAoMSA8PAorCQkJCSAgICAgIChpICsgQk5YMl9TVEFSVF9VTklDQVNUX0FERFJFU1NfSU5ERVgpKTsKKwkJCXVjX3B0ciA9IHVjX3B0ci0+bmV4dDsKKwkJfQorCisJfQorCiAJaWYgKHJ4X21vZGUgIT0gYnAtPnJ4X21vZGUpIHsKIAkJYnAtPnJ4X21vZGUgPSByeF9tb2RlOwogCQlSRUdfV1IoYnAsIEJOWDJfRU1BQ19SWF9NT0RFLCByeF9tb2RlKTsKQEAgLTMyMTMsNyArMzM1NSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfY3B1X2Z3KHN0cnVjdCBibngyICpicCwgc3RydWN0IGNwdV9yZWcgKmNwdV9yZWcsIHN0cnVjdCBmd19pbmZvICpmdykKK2xvYWRfY3B1X2Z3KHN0cnVjdCBibngyICpicCwgY29uc3Qgc3RydWN0IGNwdV9yZWcgKmNwdV9yZWcsIHN0cnVjdCBmd19pbmZvICpmdykKIHsKIAl1MzIgb2Zmc2V0OwogCXUzMiB2YWw7CkBAIC0zMjk3LDcgKzM0MzksNiBAQAogc3RhdGljIGludAogYm54Ml9pbml0X2NwdXMoc3RydWN0IGJueDIgKmJwKQogewotCXN0cnVjdCBjcHVfcmVnIGNwdV9yZWc7CiAJc3RydWN0IGZ3X2luZm8gKmZ3OwogCWludCByYywgcnYycF9sZW47CiAJdm9pZCAqdGV4dCwgKnJ2MnA7CkBAIC0zMzMzLDEyMiArMzQ3NCw1NyBAQAogCWxvYWRfcnYycF9mdyhicCwgdGV4dCwgcmMgLyogPT0gbGVuICovLCBSVjJQX1BST0MyKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIFJYIFByb2Nlc3Nvci4gKi8KLQljcHVfcmVnLm1vZGUgPSBCTlgyX1JYUF9DUFVfTU9ERTsKLQljcHVfcmVnLm1vZGVfdmFsdWVfaGFsdCA9IEJOWDJfUlhQX0NQVV9NT0RFX1NPRlRfSEFMVDsKLQljcHVfcmVnLm1vZGVfdmFsdWVfc3N0ZXAgPSBCTlgyX1JYUF9DUFVfTU9ERV9TVEVQX0VOQTsKLQljcHVfcmVnLnN0YXRlID0gQk5YMl9SWFBfQ1BVX1NUQVRFOwotCWNwdV9yZWcuc3RhdGVfdmFsdWVfY2xlYXIgPSAweGZmZmZmZjsKLQljcHVfcmVnLmdwcjAgPSBCTlgyX1JYUF9DUFVfUkVHX0ZJTEU7Ci0JY3B1X3JlZy5ldm1hc2sgPSBCTlgyX1JYUF9DUFVfRVZFTlRfTUFTSzsKLQljcHVfcmVnLnBjID0gQk5YMl9SWFBfQ1BVX1BST0dSQU1fQ09VTlRFUjsKLQljcHVfcmVnLmluc3QgPSBCTlgyX1JYUF9DUFVfSU5TVFJVQ1RJT047Ci0JY3B1X3JlZy5icCA9IEJOWDJfUlhQX0NQVV9IV19CUkVBS1BPSU5UOwotCWNwdV9yZWcuc3BhZF9iYXNlID0gQk5YMl9SWFBfU0NSQVRDSDsKLQljcHVfcmVnLm1pcHNfdmlld19iYXNlID0gMHg4MDAwMDAwOwotCiAJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQogCQlmdyA9ICZibngyX3J4cF9md18wOTsKIAllbHNlCiAJCWZ3ID0gJmJueDJfcnhwX2Z3XzA2OwogCiAJZnctPnRleHQgPSB0ZXh0OwotCXJjID0gbG9hZF9jcHVfZncoYnAsICZjcHVfcmVnLCBmdyk7CisJcmMgPSBsb2FkX2NwdV9mdyhicCwgJmNwdV9yZWdfcnhwLCBmdyk7CiAJaWYgKHJjKQogCQlnb3RvIGluaXRfY3B1X2VycjsKIAogCS8qIEluaXRpYWxpemUgdGhlIFRYIFByb2Nlc3Nvci4gKi8KLQljcHVfcmVnLm1vZGUgPSBCTlgyX1RYUF9DUFVfTU9ERTsKLQljcHVfcmVnLm1vZGVfdmFsdWVfaGFsdCA9IEJOWDJfVFhQX0NQVV9NT0RFX1NPRlRfSEFMVDsKLQljcHVfcmVnLm1vZGVfdmFsdWVfc3N0ZXAgPSBCTlgyX1RYUF9DUFVfTU9ERV9TVEVQX0VOQTsKLQljcHVfcmVnLnN0YXRlID0gQk5YMl9UWFBfQ1BVX1NUQVRFOwotCWNwdV9yZWcuc3RhdGVfdmFsdWVfY2xlYXIgPSAweGZmZmZmZjsKLQljcHVfcmVnLmdwcjAgPSBCTlgyX1RYUF9DUFVfUkVHX0ZJTEU7Ci0JY3B1X3JlZy5ldm1hc2sgPSBCTlgyX1RYUF9DUFVfRVZFTlRfTUFTSzsKLQljcHVfcmVnLnBjID0gQk5YMl9UWFBfQ1BVX1BST0dSQU1fQ09VTlRFUjsKLQljcHVfcmVnLmluc3QgPSBCTlgyX1RYUF9DUFVfSU5TVFJVQ1RJT047Ci0JY3B1X3JlZy5icCA9IEJOWDJfVFhQX0NQVV9IV19CUkVBS1BPSU5UOwotCWNwdV9yZWcuc3BhZF9iYXNlID0gQk5YMl9UWFBfU0NSQVRDSDsKLQljcHVfcmVnLm1pcHNfdmlld19iYXNlID0gMHg4MDAwMDAwOwotCiAJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQogCQlmdyA9ICZibngyX3R4cF9md18wOTsKIAllbHNlCiAJCWZ3ID0gJmJueDJfdHhwX2Z3XzA2OwogCiAJZnctPnRleHQgPSB0ZXh0OwotCXJjID0gbG9hZF9jcHVfZncoYnAsICZjcHVfcmVnLCBmdyk7CisJcmMgPSBsb2FkX2NwdV9mdyhicCwgJmNwdV9yZWdfdHhwLCBmdyk7CiAJaWYgKHJjKQogCQlnb3RvIGluaXRfY3B1X2VycjsKIAogCS8qIEluaXRpYWxpemUgdGhlIFRYIFBhdGNoLXVwIFByb2Nlc3Nvci4gKi8KLQljcHVfcmVnLm1vZGUgPSBCTlgyX1RQQVRfQ1BVX01PREU7Ci0JY3B1X3JlZy5tb2RlX3ZhbHVlX2hhbHQgPSBCTlgyX1RQQVRfQ1BVX01PREVfU09GVF9IQUxUOwotCWNwdV9yZWcubW9kZV92YWx1ZV9zc3RlcCA9IEJOWDJfVFBBVF9DUFVfTU9ERV9TVEVQX0VOQTsKLQljcHVfcmVnLnN0YXRlID0gQk5YMl9UUEFUX0NQVV9TVEFURTsKLQljcHVfcmVnLnN0YXRlX3ZhbHVlX2NsZWFyID0gMHhmZmZmZmY7Ci0JY3B1X3JlZy5ncHIwID0gQk5YMl9UUEFUX0NQVV9SRUdfRklMRTsKLQljcHVfcmVnLmV2bWFzayA9IEJOWDJfVFBBVF9DUFVfRVZFTlRfTUFTSzsKLQljcHVfcmVnLnBjID0gQk5YMl9UUEFUX0NQVV9QUk9HUkFNX0NPVU5URVI7Ci0JY3B1X3JlZy5pbnN0ID0gQk5YMl9UUEFUX0NQVV9JTlNUUlVDVElPTjsKLQljcHVfcmVnLmJwID0gQk5YMl9UUEFUX0NQVV9IV19CUkVBS1BPSU5UOwotCWNwdV9yZWcuc3BhZF9iYXNlID0gQk5YMl9UUEFUX1NDUkFUQ0g7Ci0JY3B1X3JlZy5taXBzX3ZpZXdfYmFzZSA9IDB4ODAwMDAwMDsKLQogCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKIAkJZncgPSAmYm54Ml90cGF0X2Z3XzA5OwogCWVsc2UKIAkJZncgPSAmYm54Ml90cGF0X2Z3XzA2OwogCiAJZnctPnRleHQgPSB0ZXh0OwotCXJjID0gbG9hZF9jcHVfZncoYnAsICZjcHVfcmVnLCBmdyk7CisJcmMgPSBsb2FkX2NwdV9mdyhicCwgJmNwdV9yZWdfdHBhdCwgZncpOwogCWlmIChyYykKIAkJZ290byBpbml0X2NwdV9lcnI7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBDb21wbGV0aW9uIFByb2Nlc3Nvci4gKi8KLQljcHVfcmVnLm1vZGUgPSBCTlgyX0NPTV9DUFVfTU9ERTsKLQljcHVfcmVnLm1vZGVfdmFsdWVfaGFsdCA9IEJOWDJfQ09NX0NQVV9NT0RFX1NPRlRfSEFMVDsKLQljcHVfcmVnLm1vZGVfdmFsdWVfc3N0ZXAgPSBCTlgyX0NPTV9DUFVfTU9ERV9TVEVQX0VOQTsKLQljcHVfcmVnLnN0YXRlID0gQk5YMl9DT01fQ1BVX1NUQVRFOwotCWNwdV9yZWcuc3RhdGVfdmFsdWVfY2xlYXIgPSAweGZmZmZmZjsKLQljcHVfcmVnLmdwcjAgPSBCTlgyX0NPTV9DUFVfUkVHX0ZJTEU7Ci0JY3B1X3JlZy5ldm1hc2sgPSBCTlgyX0NPTV9DUFVfRVZFTlRfTUFTSzsKLQljcHVfcmVnLnBjID0gQk5YMl9DT01fQ1BVX1BST0dSQU1fQ09VTlRFUjsKLQljcHVfcmVnLmluc3QgPSBCTlgyX0NPTV9DUFVfSU5TVFJVQ1RJT047Ci0JY3B1X3JlZy5icCA9IEJOWDJfQ09NX0NQVV9IV19CUkVBS1BPSU5UOwotCWNwdV9yZWcuc3BhZF9iYXNlID0gQk5YMl9DT01fU0NSQVRDSDsKLQljcHVfcmVnLm1pcHNfdmlld19iYXNlID0gMHg4MDAwMDAwOwotCiAJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQogCQlmdyA9ICZibngyX2NvbV9md18wOTsKIAllbHNlCiAJCWZ3ID0gJmJueDJfY29tX2Z3XzA2OwogCiAJZnctPnRleHQgPSB0ZXh0OwotCXJjID0gbG9hZF9jcHVfZncoYnAsICZjcHVfcmVnLCBmdyk7CisJcmMgPSBsb2FkX2NwdV9mdyhicCwgJmNwdV9yZWdfY29tLCBmdyk7CiAJaWYgKHJjKQogCQlnb3RvIGluaXRfY3B1X2VycjsKIAogCS8qIEluaXRpYWxpemUgdGhlIENvbW1hbmQgUHJvY2Vzc29yLiAqLwotCWNwdV9yZWcubW9kZSA9IEJOWDJfQ1BfQ1BVX01PREU7Ci0JY3B1X3JlZy5tb2RlX3ZhbHVlX2hhbHQgPSBCTlgyX0NQX0NQVV9NT0RFX1NPRlRfSEFMVDsKLQljcHVfcmVnLm1vZGVfdmFsdWVfc3N0ZXAgPSBCTlgyX0NQX0NQVV9NT0RFX1NURVBfRU5BOwotCWNwdV9yZWcuc3RhdGUgPSBCTlgyX0NQX0NQVV9TVEFURTsKLQljcHVfcmVnLnN0YXRlX3ZhbHVlX2NsZWFyID0gMHhmZmZmZmY7Ci0JY3B1X3JlZy5ncHIwID0gQk5YMl9DUF9DUFVfUkVHX0ZJTEU7Ci0JY3B1X3JlZy5ldm1hc2sgPSBCTlgyX0NQX0NQVV9FVkVOVF9NQVNLOwotCWNwdV9yZWcucGMgPSBCTlgyX0NQX0NQVV9QUk9HUkFNX0NPVU5URVI7Ci0JY3B1X3JlZy5pbnN0ID0gQk5YMl9DUF9DUFVfSU5TVFJVQ1RJT047Ci0JY3B1X3JlZy5icCA9IEJOWDJfQ1BfQ1BVX0hXX0JSRUFLUE9JTlQ7Ci0JY3B1X3JlZy5zcGFkX2Jhc2UgPSBCTlgyX0NQX1NDUkFUQ0g7Ci0JY3B1X3JlZy5taXBzX3ZpZXdfYmFzZSA9IDB4ODAwMDAwMDsKLQogCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKIAkJZncgPSAmYm54Ml9jcF9md18wOTsKIAllbHNlCiAJCWZ3ID0gJmJueDJfY3BfZndfMDY7CiAKIAlmdy0+dGV4dCA9IHRleHQ7Ci0JcmMgPSBsb2FkX2NwdV9mdyhicCwgJmNwdV9yZWcsIGZ3KTsKKwlyYyA9IGxvYWRfY3B1X2Z3KGJwLCAmY3B1X3JlZ19jcCwgZncpOwogCiBpbml0X2NwdV9lcnI6CiAJdmZyZWUodGV4dCk7CkBAIC0zNTExLDcgKzM1ODcsNyBAQAogCQkJYnAtPmF1dG9uZWcgPSBhdXRvbmVnOwogCQkJYnAtPmFkdmVydGlzaW5nID0gYWR2ZXJ0aXNpbmc7CiAKLQkJCWJueDJfc2V0X21hY19hZGRyKGJwKTsKKwkJCWJueDJfc2V0X21hY19hZGRyKGJwLCBicC0+ZGV2LT5kZXZfYWRkciwgMCk7CiAKIAkJCXZhbCA9IFJFR19SRChicCwgQk5YMl9FTUFDX01PREUpOwogCkBAIC0zNTYyLDcgKzM2MzgsOCBAQAogCQl9CiAKIAkJaWYgKCEoYnAtPmZsYWdzICYgQk5YMl9GTEFHX05PX1dPTCkpCi0JCQlibngyX2Z3X3N5bmMoYnAsIEJOWDJfRFJWX01TR19EQVRBX1dBSVQzIHwgd29sX21zZywgMCk7CisJCQlibngyX2Z3X3N5bmMoYnAsIEJOWDJfRFJWX01TR19EQVRBX1dBSVQzIHwgd29sX21zZywKKwkJCQkgICAgIDEsIDApOwogCiAJCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwogCQlpZiAoKENISVBfSUQoYnApID09IENISVBfSURfNTcwNl9BMCkgfHwKQEAgLTQyMDMsMzUgKzQyODAsNDMgQEAKIH0KIAogc3RhdGljIHZvaWQKLWJueDJfaW5pdF9yZW1vdGVfcGh5KHN0cnVjdCBibngyICpicCkKK2JueDJfaW5pdF9md19jYXAoc3RydWN0IGJueDIgKmJwKQogewotCXUzMiB2YWw7CisJdTMyIHZhbCwgc2lnID0gMDsKIAogCWJwLT5waHlfZmxhZ3MgJj0gfkJOWDJfUEhZX0ZMQUdfUkVNT1RFX1BIWV9DQVA7Ci0JaWYgKCEoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfU0VSREVTKSkKLQkJcmV0dXJuOworCWJwLT5mbGFncyAmPSB+Qk5YMl9GTEFHX0NBTl9LRUVQX1ZMQU47CisKKwlpZiAoIShicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQVNGX0VOQUJMRSkpCisJCWJwLT5mbGFncyB8PSBCTlgyX0ZMQUdfQ0FOX0tFRVBfVkxBTjsKIAogCXZhbCA9IGJueDJfc2htZW1fcmQoYnAsIEJOWDJfRldfQ0FQX01CKTsKIAlpZiAoKHZhbCAmIEJOWDJfRldfQ0FQX1NJR05BVFVSRV9NQVNLKSAhPSBCTlgyX0ZXX0NBUF9TSUdOQVRVUkUpCiAJCXJldHVybjsKIAotCWlmICh2YWwgJiBCTlgyX0ZXX0NBUF9SRU1PVEVfUEhZX0NBUEFCTEUpIHsKKwlpZiAoKHZhbCAmIEJOWDJfRldfQ0FQX0NBTl9LRUVQX1ZMQU4pID09IEJOWDJfRldfQ0FQX0NBTl9LRUVQX1ZMQU4pIHsKKwkJYnAtPmZsYWdzIHw9IEJOWDJfRkxBR19DQU5fS0VFUF9WTEFOOworCQlzaWcgfD0gQk5YMl9EUlZfQUNLX0NBUF9TSUdOQVRVUkUgfCBCTlgyX0ZXX0NBUF9DQU5fS0VFUF9WTEFOOworCX0KKworCWlmICgoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfU0VSREVTKSAmJgorCSAgICAodmFsICYgQk5YMl9GV19DQVBfUkVNT1RFX1BIWV9DQVBBQkxFKSkgeworCQl1MzIgbGluazsKKwogCQlicC0+cGh5X2ZsYWdzIHw9IEJOWDJfUEhZX0ZMQUdfUkVNT1RFX1BIWV9DQVA7CiAKLQkJdmFsID0gYm54Ml9zaG1lbV9yZChicCwgQk5YMl9MSU5LX1NUQVRVUyk7Ci0JCWlmICh2YWwgJiBCTlgyX0xJTktfU1RBVFVTX1NFUkRFU19MSU5LKQorCQlsaW5rID0gYm54Ml9zaG1lbV9yZChicCwgQk5YMl9MSU5LX1NUQVRVUyk7CisJCWlmIChsaW5rICYgQk5YMl9MSU5LX1NUQVRVU19TRVJERVNfTElOSykKIAkJCWJwLT5waHlfcG9ydCA9IFBPUlRfRklCUkU7CiAJCWVsc2UKIAkJCWJwLT5waHlfcG9ydCA9IFBPUlRfVFA7CiAKLQkJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKLQkJCXUzMiBzaWc7Ci0KLQkJCXNpZyA9IEJOWDJfRFJWX0FDS19DQVBfU0lHTkFUVVJFIHwKLQkJCSAgICAgIEJOWDJfRldfQ0FQX1JFTU9URV9QSFlfQ0FQQUJMRTsKLQkJCWJueDJfc2htZW1fd3IoYnAsIEJOWDJfRFJWX0FDS19DQVBfTUIsIHNpZyk7Ci0JCX0KKwkJc2lnIHw9IEJOWDJfRFJWX0FDS19DQVBfU0lHTkFUVVJFIHwKKwkJICAgICAgIEJOWDJfRldfQ0FQX1JFTU9URV9QSFlfQ0FQQUJMRTsKIAl9CisKKwlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSAmJiBzaWcpCisJCWJueDJfc2htZW1fd3IoYnAsIEJOWDJfRFJWX0FDS19DQVBfTUIsIHNpZyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00MjYxLDcgKzQzNDYsNyBAQAogCXVkZWxheSg1KTsKIAogCS8qIFdhaXQgZm9yIHRoZSBmaXJtd2FyZSB0byB0ZWxsIHVzIGl0IGlzIG9rIHRvIGlzc3VlIGEgcmVzZXQuICovCi0JYm54Ml9md19zeW5jKGJwLCBCTlgyX0RSVl9NU0dfREFUQV9XQUlUMCB8IHJlc2V0X2NvZGUsIDEpOworCWJueDJfZndfc3luYyhicCwgQk5YMl9EUlZfTVNHX0RBVEFfV0FJVDAgfCByZXNldF9jb2RlLCAxLCAxKTsKIAogCS8qIERlcG9zaXQgYSBkcml2ZXIgcmVzZXQgc2lnbmF0dXJlIHNvIHRoZSBmaXJtd2FyZSBrbm93cyB0aGF0CiAJICogdGhpcyBpcyBhIHNvZnQgcmVzZXQuICovCkBAIC00MzIyLDEzICs0NDA3LDEzIEBACiAJfQogCiAJLyogV2FpdCBmb3IgdGhlIGZpcm13YXJlIHRvIGZpbmlzaCBpdHMgaW5pdGlhbGl6YXRpb24uICovCi0JcmMgPSBibngyX2Z3X3N5bmMoYnAsIEJOWDJfRFJWX01TR19EQVRBX1dBSVQxIHwgcmVzZXRfY29kZSwgMCk7CisJcmMgPSBibngyX2Z3X3N5bmMoYnAsIEJOWDJfRFJWX01TR19EQVRBX1dBSVQxIHwgcmVzZXRfY29kZSwgMSwgMCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKIAlzcGluX2xvY2tfYmgoJmJwLT5waHlfbG9jayk7CiAJb2xkX3BvcnQgPSBicC0+cGh5X3BvcnQ7Ci0JYm54Ml9pbml0X3JlbW90ZV9waHkoYnApOworCWJueDJfaW5pdF9md19jYXAoYnApOwogCWlmICgoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfUkVNT1RFX1BIWV9DQVApICYmCiAJICAgIG9sZF9wb3J0ICE9IGJwLT5waHlfcG9ydCkKIAkJYm54Ml9zZXRfZGVmYXVsdF9yZW1vdGVfbGluayhicCk7CkBAIC00NDEyLDcgKzQ0OTcsNyBAQAogCiAJYm54Ml9pbml0X252cmFtKGJwKTsKIAotCWJueDJfc2V0X21hY19hZGRyKGJwKTsKKwlibngyX3NldF9tYWNfYWRkcihicCwgYnAtPmRldi0+ZGV2X2FkZHIsIDApOwogCiAJdmFsID0gUkVHX1JEKGJwLCBCTlgyX01RX0NPTkZJRyk7CiAJdmFsICY9IH5CTlgyX01RX0NPTkZJR19LTkxfQllQX0JMS19TSVpFOwpAQCAtNDQ5OCwxNSArNDU4MywyNSBAQAogCQkgICAgICBCTlgyX0hDX0NPTkZJR19DT0xMRUNUX1NUQVRTOwogCX0KIAotCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfVVNJTkdfTVNJWCkgewotCQl1MzIgYmFzZSA9ICgoQk5YMl9UWF9WRUMgLSAxKSAqIEJOWDJfSENfU0JfQ09ORklHX1NJWkUpICsKLQkJCSAgIEJOWDJfSENfU0JfQ09ORklHXzE7Ci0KKwlpZiAoYnAtPmlycV9udmVjcyA+IDEpIHsKIAkJUkVHX1dSKGJwLCBCTlgyX0hDX01TSVhfQklUX1ZFQ1RPUiwKIAkJICAgICAgIEJOWDJfSENfTVNJWF9CSVRfVkVDVE9SX1ZBTCk7CiAKKwkJdmFsIHw9IEJOWDJfSENfQ09ORklHX1NCX0FERFJfSU5DXzEyOEI7CisJfQorCisJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19PTkVfU0hPVF9NU0kpCisJCXZhbCB8PSBCTlgyX0hDX0NPTkZJR19PTkVfU0hPVDsKKworCVJFR19XUihicCwgQk5YMl9IQ19DT05GSUcsIHZhbCk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYnAtPmlycV9udmVjczsgaSsrKSB7CisJCXUzMiBiYXNlID0gKChpIC0gMSkgKiBCTlgyX0hDX1NCX0NPTkZJR19TSVpFKSArCisJCQkgICBCTlgyX0hDX1NCX0NPTkZJR18xOworCiAJCVJFR19XUihicCwgYmFzZSwKIAkJCUJOWDJfSENfU0JfQ09ORklHXzFfVFhfVE1SX01PREUgfAorCQkJQk5YMl9IQ19TQl9DT05GSUdfMV9SWF9UTVJfTU9ERSB8CiAJCQlCTlgyX0hDX1NCX0NPTkZJR18xX09ORV9TSE9UKTsKIAogCQlSRUdfV1IoYnAsIGJhc2UgKyBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF9PRkYsCkBAIC00NTE2LDE0ICs0NjExLDE0IEBACiAJCVJFR19XUihicCwgYmFzZSArIEJOWDJfSENfVFhfVElDS1NfT0ZGLAogCQkJKGJwLT50eF90aWNrc19pbnQgPDwgMTYpIHwgYnAtPnR4X3RpY2tzKTsKIAotCQl2YWwgfD0gQk5YMl9IQ19DT05GSUdfU0JfQUREUl9JTkNfMTI4QjsKKwkJUkVHX1dSKGJwLCBiYXNlICsgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfT0ZGLAorCQkgICAgICAgKGJwLT5yeF9xdWlja19jb25zX3RyaXBfaW50IDw8IDE2KSB8CisJCQlicC0+cnhfcXVpY2tfY29uc190cmlwKTsKKworCQlSRUdfV1IoYnAsIGJhc2UgKyBCTlgyX0hDX1JYX1RJQ0tTX09GRiwKKwkJCShicC0+cnhfdGlja3NfaW50IDw8IDE2KSB8IGJwLT5yeF90aWNrcyk7CiAJfQogCi0JaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19PTkVfU0hPVF9NU0kpCi0JCXZhbCB8PSBCTlgyX0hDX0NPTkZJR19PTkVfU0hPVDsKLQotCVJFR19XUihicCwgQk5YMl9IQ19DT05GSUcsIHZhbCk7Ci0KIAkvKiBDbGVhciBpbnRlcm5hbCBzdGF0cyBjb3VudGVycy4gKi8KIAlSRUdfV1IoYnAsIEJOWDJfSENfQ09NTUFORCwgQk5YMl9IQ19DT01NQU5EX0NMUl9TVEFUX05PVyk7CiAKQEAgLTQ1MzgsNyArNDYzMyw3IEBACiAJCVJFR19XUihicCwgQk5YMl9NSVNDX05FV19DT1JFX0NUTCwgdmFsKTsKIAl9CiAJcmMgPSBibngyX2Z3X3N5bmMoYnAsIEJOWDJfRFJWX01TR19EQVRBX1dBSVQyIHwgQk5YMl9EUlZfTVNHX0NPREVfUkVTRVQsCi0JCQkgIDApOworCQkJICAxLCAwKTsKIAogCVJFR19XUihicCwgQk5YMl9NSVNDX0VOQUJMRV9TRVRfQklUUywgQk5YMl9NSVNDX0VOQUJMRV9ERUZBVUxUKTsKIAlSRUdfUkQoYnAsIEJOWDJfTUlTQ19FTkFCTEVfU0VUX0JJVFMpOwpAQCAtNDU1NCwyMyArNDY0OSwyNyBAQAogYm54Ml9jbGVhcl9yaW5nX3N0YXRlcyhzdHJ1Y3QgYm54MiAqYnApCiB7CiAJc3RydWN0IGJueDJfbmFwaSAqYm5hcGk7CisJc3RydWN0IGJueDJfdHhfcmluZ19pbmZvICp0eHI7CisJc3RydWN0IGJueDJfcnhfcmluZ19pbmZvICpyeHI7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQk5YMl9NQVhfTVNJWF9WRUM7IGkrKykgewogCQlibmFwaSA9ICZicC0+Ym54Ml9uYXBpW2ldOworCQl0eHIgPSAmYm5hcGktPnR4X3Jpbmc7CisJCXJ4ciA9ICZibmFwaS0+cnhfcmluZzsKIAotCQlibmFwaS0+dHhfY29ucyA9IDA7Ci0JCWJuYXBpLT5od190eF9jb25zID0gMDsKLQkJYm5hcGktPnJ4X3Byb2RfYnNlcSA9IDA7Ci0JCWJuYXBpLT5yeF9wcm9kID0gMDsKLQkJYm5hcGktPnJ4X2NvbnMgPSAwOwotCQlibmFwaS0+cnhfcGdfcHJvZCA9IDA7Ci0JCWJuYXBpLT5yeF9wZ19jb25zID0gMDsKKwkJdHhyLT50eF9jb25zID0gMDsKKwkJdHhyLT5od190eF9jb25zID0gMDsKKwkJcnhyLT5yeF9wcm9kX2JzZXEgPSAwOworCQlyeHItPnJ4X3Byb2QgPSAwOworCQlyeHItPnJ4X2NvbnMgPSAwOworCQlyeHItPnJ4X3BnX3Byb2QgPSAwOworCQlyeHItPnJ4X3BnX2NvbnMgPSAwOwogCX0KIH0KIAogc3RhdGljIHZvaWQKLWJueDJfaW5pdF90eF9jb250ZXh0KHN0cnVjdCBibngyICpicCwgdTMyIGNpZCkKK2JueDJfaW5pdF90eF9jb250ZXh0KHN0cnVjdCBibngyICpicCwgdTMyIGNpZCwgc3RydWN0IGJueDJfdHhfcmluZ19pbmZvICp0eHIpCiB7CiAJdTMyIHZhbCwgb2Zmc2V0MCwgb2Zmc2V0MSwgb2Zmc2V0Miwgb2Zmc2V0MzsKIAl1MzIgY2lkX2FkZHIgPSBHRVRfQ0lEX0FERFIoY2lkKTsKQEAgLTQ1OTIsNDMgKzQ2OTEsNDMgQEAKIAl2YWwgPSBCTlgyX0wyQ1RYX0NNRF9UWVBFX1RZUEVfTDIgfCAoOCA8PCAxNik7CiAJYm54Ml9jdHhfd3IoYnAsIGNpZF9hZGRyLCBvZmZzZXQxLCB2YWwpOwogCi0JdmFsID0gKHU2NCkgYnAtPnR4X2Rlc2NfbWFwcGluZyA+PiAzMjsKKwl2YWwgPSAodTY0KSB0eHItPnR4X2Rlc2NfbWFwcGluZyA+PiAzMjsKIAlibngyX2N0eF93cihicCwgY2lkX2FkZHIsIG9mZnNldDIsIHZhbCk7CiAKLQl2YWwgPSAodTY0KSBicC0+dHhfZGVzY19tYXBwaW5nICYgMHhmZmZmZmZmZjsKKwl2YWwgPSAodTY0KSB0eHItPnR4X2Rlc2NfbWFwcGluZyAmIDB4ZmZmZmZmZmY7CiAJYm54Ml9jdHhfd3IoYnAsIGNpZF9hZGRyLCBvZmZzZXQzLCB2YWwpOwogfQogCiBzdGF0aWMgdm9pZAotYm54Ml9pbml0X3R4X3Jpbmcoc3RydWN0IGJueDIgKmJwKQorYm54Ml9pbml0X3R4X3Jpbmcoc3RydWN0IGJueDIgKmJwLCBpbnQgcmluZ19udW0pCiB7CiAJc3RydWN0IHR4X2JkICp0eGJkOwogCXUzMiBjaWQgPSBUWF9DSUQ7CiAJc3RydWN0IGJueDJfbmFwaSAqYm5hcGk7CisJc3RydWN0IGJueDJfdHhfcmluZ19pbmZvICp0eHI7CiAKLQlicC0+dHhfdmVjID0gMDsKLQlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSVgpIHsKLQkJY2lkID0gVFhfVFNTX0NJRDsKLQkJYnAtPnR4X3ZlYyA9IEJOWDJfVFhfVkVDOwotCQlSRUdfV1IoYnAsIEJOWDJfVFNDSF9UU1NfQ0ZHLCBCTlgyX1RYX0lOVF9OVU0gfAotCQkgICAgICAgKFRYX1RTU19DSUQgPDwgNykpOwotCX0KLQlibmFwaSA9ICZicC0+Ym54Ml9uYXBpW2JwLT50eF92ZWNdOworCWJuYXBpID0gJmJwLT5ibngyX25hcGlbcmluZ19udW1dOworCXR4ciA9ICZibmFwaS0+dHhfcmluZzsKKworCWlmIChyaW5nX251bSA9PSAwKQorCQljaWQgPSBUWF9DSUQ7CisJZWxzZQorCQljaWQgPSBUWF9UU1NfQ0lEICsgcmluZ19udW0gLSAxOwogCiAJYnAtPnR4X3dha2VfdGhyZXNoID0gYnAtPnR4X3Jpbmdfc2l6ZSAvIDI7CiAKLQl0eGJkID0gJmJwLT50eF9kZXNjX3JpbmdbTUFYX1RYX0RFU0NfQ05UXTsKKwl0eGJkID0gJnR4ci0+dHhfZGVzY19yaW5nW01BWF9UWF9ERVNDX0NOVF07CiAKLQl0eGJkLT50eF9iZF9oYWRkcl9oaSA9ICh1NjQpIGJwLT50eF9kZXNjX21hcHBpbmcgPj4gMzI7Ci0JdHhiZC0+dHhfYmRfaGFkZHJfbG8gPSAodTY0KSBicC0+dHhfZGVzY19tYXBwaW5nICYgMHhmZmZmZmZmZjsKKwl0eGJkLT50eF9iZF9oYWRkcl9oaSA9ICh1NjQpIHR4ci0+dHhfZGVzY19tYXBwaW5nID4+IDMyOworCXR4YmQtPnR4X2JkX2hhZGRyX2xvID0gKHU2NCkgdHhyLT50eF9kZXNjX21hcHBpbmcgJiAweGZmZmZmZmZmOwogCi0JYnAtPnR4X3Byb2QgPSAwOwotCWJwLT50eF9wcm9kX2JzZXEgPSAwOworCXR4ci0+dHhfcHJvZCA9IDA7CisJdHhyLT50eF9wcm9kX2JzZXEgPSAwOwogCi0JYnAtPnR4X2JpZHhfYWRkciA9IE1CX0dFVF9DSURfQUREUihjaWQpICsgQk5YMl9MMkNUWF9UWF9IT1NUX0JJRFg7Ci0JYnAtPnR4X2JzZXFfYWRkciA9IE1CX0dFVF9DSURfQUREUihjaWQpICsgQk5YMl9MMkNUWF9UWF9IT1NUX0JTRVE7CisJdHhyLT50eF9iaWR4X2FkZHIgPSBNQl9HRVRfQ0lEX0FERFIoY2lkKSArIEJOWDJfTDJDVFhfVFhfSE9TVF9CSURYOworCXR4ci0+dHhfYnNlcV9hZGRyID0gTUJfR0VUX0NJRF9BRERSKGNpZCkgKyBCTlgyX0wyQ1RYX1RYX0hPU1RfQlNFUTsKIAotCWJueDJfaW5pdF90eF9jb250ZXh0KGJwLCBjaWQpOworCWJueDJfaW5pdF90eF9jb250ZXh0KGJwLCBjaWQsIHR4cik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00NjU2LDE3ICs0NzU1LDI1IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1ibngyX2luaXRfcnhfcmluZyhzdHJ1Y3QgYm54MiAqYnApCitibngyX2luaXRfcnhfcmluZyhzdHJ1Y3QgYm54MiAqYnAsIGludCByaW5nX251bSkKIHsKIAlpbnQgaTsKIAl1MTYgcHJvZCwgcmluZ19wcm9kOwotCXUzMiB2YWwsIHJ4X2NpZF9hZGRyID0gR0VUX0NJRF9BRERSKFJYX0NJRCk7Ci0Jc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVswXTsKKwl1MzIgY2lkLCByeF9jaWRfYWRkciwgdmFsOworCXN0cnVjdCBibngyX25hcGkgKmJuYXBpID0gJmJwLT5ibngyX25hcGlbcmluZ19udW1dOworCXN0cnVjdCBibngyX3J4X3JpbmdfaW5mbyAqcnhyID0gJmJuYXBpLT5yeF9yaW5nOwogCi0JYm54Ml9pbml0X3J4YmRfcmluZ3MoYnAtPnJ4X2Rlc2NfcmluZywgYnAtPnJ4X2Rlc2NfbWFwcGluZywKKwlpZiAocmluZ19udW0gPT0gMCkKKwkJY2lkID0gUlhfQ0lEOworCWVsc2UKKwkJY2lkID0gUlhfUlNTX0NJRCArIHJpbmdfbnVtIC0gMTsKKworCXJ4X2NpZF9hZGRyID0gR0VUX0NJRF9BRERSKGNpZCk7CisKKwlibngyX2luaXRfcnhiZF9yaW5ncyhyeHItPnJ4X2Rlc2NfcmluZywgcnhyLT5yeF9kZXNjX21hcHBpbmcsCiAJCQkgICAgIGJwLT5yeF9idWZfdXNlX3NpemUsIGJwLT5yeF9tYXhfcmluZyk7CiAKLQlibngyX2luaXRfcnhfY29udGV4dDAoYnApOworCWJueDJfaW5pdF9yeF9jb250ZXh0KGJwLCBjaWQpOwogCiAJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CiAJCXZhbCA9IFJFR19SRChicCwgQk5YMl9NUV9NQVBfTDJfNSk7CkBAIC00Njc1LDU0ICs0NzgyLDEwMSBAQAogCiAJYm54Ml9jdHhfd3IoYnAsIHJ4X2NpZF9hZGRyLCBCTlgyX0wyQ1RYX1BHX0JVRl9TSVpFLCAwKTsKIAlpZiAoYnAtPnJ4X3BnX3Jpbmdfc2l6ZSkgewotCQlibngyX2luaXRfcnhiZF9yaW5ncyhicC0+cnhfcGdfZGVzY19yaW5nLAotCQkJCSAgICAgYnAtPnJ4X3BnX2Rlc2NfbWFwcGluZywKKwkJYm54Ml9pbml0X3J4YmRfcmluZ3MocnhyLT5yeF9wZ19kZXNjX3JpbmcsCisJCQkJICAgICByeHItPnJ4X3BnX2Rlc2NfbWFwcGluZywKIAkJCQkgICAgIFBBR0VfU0laRSwgYnAtPnJ4X21heF9wZ19yaW5nKTsKIAkJdmFsID0gKGJwLT5yeF9idWZfdXNlX3NpemUgPDwgMTYpIHwgUEFHRV9TSVpFOwogCQlibngyX2N0eF93cihicCwgcnhfY2lkX2FkZHIsIEJOWDJfTDJDVFhfUEdfQlVGX1NJWkUsIHZhbCk7CiAJCWJueDJfY3R4X3dyKGJwLCByeF9jaWRfYWRkciwgQk5YMl9MMkNUWF9SQkRDX0tFWSwKLQkJICAgICAgIEJOWDJfTDJDVFhfUkJEQ19KVU1CT19LRVkpOworCQkgICAgICAgQk5YMl9MMkNUWF9SQkRDX0pVTUJPX0tFWSAtIHJpbmdfbnVtKTsKIAotCQl2YWwgPSAodTY0KSBicC0+cnhfcGdfZGVzY19tYXBwaW5nWzBdID4+IDMyOworCQl2YWwgPSAodTY0KSByeHItPnJ4X3BnX2Rlc2NfbWFwcGluZ1swXSA+PiAzMjsKIAkJYm54Ml9jdHhfd3IoYnAsIHJ4X2NpZF9hZGRyLCBCTlgyX0wyQ1RYX05YX1BHX0JESEFERFJfSEksIHZhbCk7CiAKLQkJdmFsID0gKHU2NCkgYnAtPnJ4X3BnX2Rlc2NfbWFwcGluZ1swXSAmIDB4ZmZmZmZmZmY7CisJCXZhbCA9ICh1NjQpIHJ4ci0+cnhfcGdfZGVzY19tYXBwaW5nWzBdICYgMHhmZmZmZmZmZjsKIAkJYm54Ml9jdHhfd3IoYnAsIHJ4X2NpZF9hZGRyLCBCTlgyX0wyQ1RYX05YX1BHX0JESEFERFJfTE8sIHZhbCk7CiAKIAkJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQogCQkJUkVHX1dSKGJwLCBCTlgyX01RX01BUF9MMl8zLCBCTlgyX01RX01BUF9MMl8zX0RFRkFVTFQpOwogCX0KIAotCXZhbCA9ICh1NjQpIGJwLT5yeF9kZXNjX21hcHBpbmdbMF0gPj4gMzI7CisJdmFsID0gKHU2NCkgcnhyLT5yeF9kZXNjX21hcHBpbmdbMF0gPj4gMzI7CiAJYm54Ml9jdHhfd3IoYnAsIHJ4X2NpZF9hZGRyLCBCTlgyX0wyQ1RYX05YX0JESEFERFJfSEksIHZhbCk7CiAKLQl2YWwgPSAodTY0KSBicC0+cnhfZGVzY19tYXBwaW5nWzBdICYgMHhmZmZmZmZmZjsKKwl2YWwgPSAodTY0KSByeHItPnJ4X2Rlc2NfbWFwcGluZ1swXSAmIDB4ZmZmZmZmZmY7CiAJYm54Ml9jdHhfd3IoYnAsIHJ4X2NpZF9hZGRyLCBCTlgyX0wyQ1RYX05YX0JESEFERFJfTE8sIHZhbCk7CiAKLQlyaW5nX3Byb2QgPSBwcm9kID0gYm5hcGktPnJ4X3BnX3Byb2Q7CisJcmluZ19wcm9kID0gcHJvZCA9IHJ4ci0+cnhfcGdfcHJvZDsKIAlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X3BnX3Jpbmdfc2l6ZTsgaSsrKSB7Ci0JCWlmIChibngyX2FsbG9jX3J4X3BhZ2UoYnAsIHJpbmdfcHJvZCkgPCAwKQorCQlpZiAoYm54Ml9hbGxvY19yeF9wYWdlKGJwLCByeHIsIHJpbmdfcHJvZCkgPCAwKQogCQkJYnJlYWs7CiAJCXByb2QgPSBORVhUX1JYX0JEKHByb2QpOwogCQlyaW5nX3Byb2QgPSBSWF9QR19SSU5HX0lEWChwcm9kKTsKIAl9Ci0JYm5hcGktPnJ4X3BnX3Byb2QgPSBwcm9kOworCXJ4ci0+cnhfcGdfcHJvZCA9IHByb2Q7CiAKLQlyaW5nX3Byb2QgPSBwcm9kID0gYm5hcGktPnJ4X3Byb2Q7CisJcmluZ19wcm9kID0gcHJvZCA9IHJ4ci0+cnhfcHJvZDsKIAlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7Ci0JCWlmIChibngyX2FsbG9jX3J4X3NrYihicCwgYm5hcGksIHJpbmdfcHJvZCkgPCAwKSB7CisJCWlmIChibngyX2FsbG9jX3J4X3NrYihicCwgcnhyLCByaW5nX3Byb2QpIDwgMCkKIAkJCWJyZWFrOwotCQl9CiAJCXByb2QgPSBORVhUX1JYX0JEKHByb2QpOwogCQlyaW5nX3Byb2QgPSBSWF9SSU5HX0lEWChwcm9kKTsKIAl9Ci0JYm5hcGktPnJ4X3Byb2QgPSBwcm9kOworCXJ4ci0+cnhfcHJvZCA9IHByb2Q7CiAKLQlSRUdfV1IxNihicCwgTUJfUlhfQ0lEX0FERFIgKyBCTlgyX0wyQ1RYX0hPU1RfUEdfQkRJRFgsCi0JCSBibmFwaS0+cnhfcGdfcHJvZCk7Ci0JUkVHX1dSMTYoYnAsIE1CX1JYX0NJRF9BRERSICsgQk5YMl9MMkNUWF9IT1NUX0JESURYLCBwcm9kKTsKKwlyeHItPnJ4X2JpZHhfYWRkciA9IE1CX0dFVF9DSURfQUREUihjaWQpICsgQk5YMl9MMkNUWF9IT1NUX0JESURYOworCXJ4ci0+cnhfYnNlcV9hZGRyID0gTUJfR0VUX0NJRF9BRERSKGNpZCkgKyBCTlgyX0wyQ1RYX0hPU1RfQlNFUTsKKwlyeHItPnJ4X3BnX2JpZHhfYWRkciA9IE1CX0dFVF9DSURfQUREUihjaWQpICsgQk5YMl9MMkNUWF9IT1NUX1BHX0JESURYOwogCi0JUkVHX1dSKGJwLCBNQl9SWF9DSURfQUREUiArIEJOWDJfTDJDVFhfSE9TVF9CU0VRLCBibmFwaS0+cnhfcHJvZF9ic2VxKTsKKwlSRUdfV1IxNihicCwgcnhyLT5yeF9wZ19iaWR4X2FkZHIsIHJ4ci0+cnhfcGdfcHJvZCk7CisJUkVHX1dSMTYoYnAsIHJ4ci0+cnhfYmlkeF9hZGRyLCBwcm9kKTsKKworCVJFR19XUihicCwgcnhyLT5yeF9ic2VxX2FkZHIsIHJ4ci0+cnhfcHJvZF9ic2VxKTsKK30KKworc3RhdGljIHZvaWQKK2JueDJfaW5pdF9hbGxfcmluZ3Moc3RydWN0IGJueDIgKmJwKQoreworCWludCBpOworCXUzMiB2YWw7CisKKwlibngyX2NsZWFyX3Jpbmdfc3RhdGVzKGJwKTsKKworCVJFR19XUihicCwgQk5YMl9UU0NIX1RTU19DRkcsIDApOworCWZvciAoaSA9IDA7IGkgPCBicC0+bnVtX3R4X3JpbmdzOyBpKyspCisJCWJueDJfaW5pdF90eF9yaW5nKGJwLCBpKTsKKworCWlmIChicC0+bnVtX3R4X3JpbmdzID4gMSkKKwkJUkVHX1dSKGJwLCBCTlgyX1RTQ0hfVFNTX0NGRywgKChicC0+bnVtX3R4X3JpbmdzIC0gMSkgPDwgMjQpIHwKKwkJICAgICAgIChUWF9UU1NfQ0lEIDw8IDcpKTsKKworCVJFR19XUihicCwgQk5YMl9STFVQX1JTU19DT05GSUcsIDApOworCWJueDJfcmVnX3dyX2luZChicCwgQk5YMl9SWFBfU0NSQVRDSF9SU1NfVEJMX1NaLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBicC0+bnVtX3J4X3JpbmdzOyBpKyspCisJCWJueDJfaW5pdF9yeF9yaW5nKGJwLCBpKTsKKworCWlmIChicC0+bnVtX3J4X3JpbmdzID4gMSkgeworCQl1MzIgdGJsXzMyOworCQl1OCAqdGJsID0gKHU4ICopICZ0YmxfMzI7CisKKwkJYm54Ml9yZWdfd3JfaW5kKGJwLCBCTlgyX1JYUF9TQ1JBVENIX1JTU19UQkxfU1osCisJCQkJQk5YMl9SWFBfU0NSQVRDSF9SU1NfVEJMX01BWF9FTlRSSUVTKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQk5YMl9SWFBfU0NSQVRDSF9SU1NfVEJMX01BWF9FTlRSSUVTOyBpKyspIHsKKwkJCXRibFtpICUgNF0gPSBpICUgKGJwLT5udW1fcnhfcmluZ3MgLSAxKTsKKwkJCWlmICgoaSAlIDQpID09IDMpCisJCQkJYm54Ml9yZWdfd3JfaW5kKGJwLAorCQkJCQkJQk5YMl9SWFBfU0NSQVRDSF9SU1NfVEJMICsgaSwKKwkJCQkJCWNwdV90b19iZTMyKHRibF8zMikpOworCQl9CisKKwkJdmFsID0gQk5YMl9STFVQX1JTU19DT05GSUdfSVBWNF9SU1NfVFlQRV9BTExfWEkgfAorCQkgICAgICBCTlgyX1JMVVBfUlNTX0NPTkZJR19JUFY2X1JTU19UWVBFX0FMTF9YSTsKKworCQlSRUdfV1IoYnAsIEJOWDJfUkxVUF9SU1NfQ09ORklHLCB2YWwpOworCisJfQogfQogCiBzdGF0aWMgdTMyIGJueDJfZmluZF9tYXhfcmluZyh1MzIgcmluZ19zaXplLCB1MzIgbWF4X3NpemUpCkBAIC00NzUwLDEyICs0OTA0LDEyIEBACiAJdTMyIHJ4X3NpemUsIHJ4X3NwYWNlLCBqdW1ib19zaXplOwogCiAJLyogOCBmb3IgQ1JDIGFuZCBWTEFOICovCi0Jcnhfc2l6ZSA9IGJwLT5kZXYtPm10dSArIEVUSF9ITEVOICsgYnAtPnJ4X29mZnNldCArIDg7CisJcnhfc2l6ZSA9IGJwLT5kZXYtPm10dSArIEVUSF9ITEVOICsgQk5YMl9SWF9PRkZTRVQgKyA4OwogCiAJcnhfc3BhY2UgPSBTS0JfREFUQV9BTElHTihyeF9zaXplICsgQk5YMl9SWF9BTElHTikgKyBORVRfU0tCX1BBRCArCiAJCXNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKTsKIAotCWJwLT5yeF9jb3B5X3RocmVzaCA9IFJYX0NPUFlfVEhSRVNIOworCWJwLT5yeF9jb3B5X3RocmVzaCA9IEJOWDJfUlhfQ09QWV9USFJFU0g7CiAJYnAtPnJ4X3BnX3Jpbmdfc2l6ZSA9IDA7CiAJYnAtPnJ4X21heF9wZ19yaW5nID0gMDsKIAlicC0+cnhfbWF4X3BnX3JpbmdfaWR4ID0gMDsKQEAgLTQ3NzAsMTQgKzQ5MjQsMTQgQEAKIAkJYnAtPnJ4X21heF9wZ19yaW5nID0gYm54Ml9maW5kX21heF9yaW5nKGp1bWJvX3NpemUsCiAJCQkJCQkJTUFYX1JYX1BHX1JJTkdTKTsKIAkJYnAtPnJ4X21heF9wZ19yaW5nX2lkeCA9IChicC0+cnhfbWF4X3BnX3JpbmcgKiBSWF9ERVNDX0NOVCkgLSAxOwotCQlyeF9zaXplID0gUlhfQ09QWV9USFJFU0ggKyBicC0+cnhfb2Zmc2V0OworCQlyeF9zaXplID0gQk5YMl9SWF9DT1BZX1RIUkVTSCArIEJOWDJfUlhfT0ZGU0VUOwogCQlicC0+cnhfY29weV90aHJlc2ggPSAwOwogCX0KIAogCWJwLT5yeF9idWZfdXNlX3NpemUgPSByeF9zaXplOwogCS8qIGh3IGFsaWdubWVudCAqLwogCWJwLT5yeF9idWZfc2l6ZSA9IGJwLT5yeF9idWZfdXNlX3NpemUgKyBCTlgyX1JYX0FMSUdOOwotCWJwLT5yeF9qdW1ib190aHJlc2ggPSByeF9zaXplIC0gYnAtPnJ4X29mZnNldDsKKwlicC0+cnhfanVtYm9fdGhyZXNoID0gcnhfc2l6ZSAtIEJOWDJfUlhfT0ZGU0VUOwogCWJwLT5yeF9yaW5nX3NpemUgPSBzaXplOwogCWJwLT5yeF9tYXhfcmluZyA9IGJueDJfZmluZF9tYXhfcmluZyhzaXplLCBNQVhfUlhfUklOR1MpOwogCWJwLT5yeF9tYXhfcmluZ19pZHggPSAoYnAtPnJ4X21heF9yaW5nICogUlhfREVTQ19DTlQpIC0gMTsKQEAgLTQ3ODgsMzYgKzQ5NDIsNDIgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChicC0+dHhfYnVmX3JpbmcgPT0gTlVMTCkKLQkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBicC0+bnVtX3R4X3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVtpXTsKKwkJc3RydWN0IGJueDJfdHhfcmluZ19pbmZvICp0eHIgPSAmYm5hcGktPnR4X3Jpbmc7CisJCWludCBqOwogCi0JZm9yIChpID0gMDsgaSA8IFRYX0RFU0NfQ05UOyApIHsKLQkJc3RydWN0IHN3X2JkICp0eF9idWYgPSAmYnAtPnR4X2J1Zl9yaW5nW2ldOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhfYnVmLT5za2I7Ci0JCWludCBqLCBsYXN0OwotCi0JCWlmIChza2IgPT0gTlVMTCkgewotCQkJaSsrOworCQlpZiAodHhyLT50eF9idWZfcmluZyA9PSBOVUxMKQogCQkJY29udGludWU7Ci0JCX0KIAotCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBwY2lfdW5tYXBfYWRkcih0eF9idWYsIG1hcHBpbmcpLAorCQlmb3IgKGogPSAwOyBqIDwgVFhfREVTQ19DTlQ7ICkgeworCQkJc3RydWN0IHN3X2JkICp0eF9idWYgPSAmdHhyLT50eF9idWZfcmluZ1tqXTsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSB0eF9idWYtPnNrYjsKKwkJCWludCBrLCBsYXN0OworCisJCQlpZiAoc2tiID09IE5VTEwpIHsKKwkJCQlqKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsCisJCQkJCSBwY2lfdW5tYXBfYWRkcih0eF9idWYsIG1hcHBpbmcpLAogCQkJc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CiAKLQkJdHhfYnVmLT5za2IgPSBOVUxMOworCQkJdHhfYnVmLT5za2IgPSBOVUxMOwogCi0JCWxhc3QgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwotCQlmb3IgKGogPSAwOyBqIDwgbGFzdDsgaisrKSB7Ci0JCQl0eF9idWYgPSAmYnAtPnR4X2J1Zl9yaW5nW2kgKyBqICsgMV07Ci0JCQlwY2lfdW5tYXBfcGFnZShicC0+cGRldiwKLQkJCQlwY2lfdW5tYXBfYWRkcih0eF9idWYsIG1hcHBpbmcpLAotCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal0uc2l6ZSwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWxhc3QgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCQkJZm9yIChrID0gMDsgayA8IGxhc3Q7IGsrKykgeworCQkJCXR4X2J1ZiA9ICZ0eHItPnR4X2J1Zl9yaW5nW2ogKyBrICsgMV07CisJCQkJcGNpX3VubWFwX3BhZ2UoYnAtPnBkZXYsCisJCQkJCXBjaV91bm1hcF9hZGRyKHR4X2J1ZiwgbWFwcGluZyksCisJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal0uc2l6ZSwKKwkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQl9CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlqICs9IGsgKyAxOwogCQl9Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJaSArPSBqICsgMTsKIAl9Ci0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ4MjUsMjUgKzQ5ODUsMzMgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChicC0+cnhfYnVmX3JpbmcgPT0gTlVMTCkKLQkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBicC0+bnVtX3J4X3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVtpXTsKKwkJc3RydWN0IGJueDJfcnhfcmluZ19pbmZvICpyeHIgPSAmYm5hcGktPnJ4X3Jpbmc7CisJCWludCBqOwogCi0JZm9yIChpID0gMDsgaSA8IGJwLT5yeF9tYXhfcmluZ19pZHg7IGkrKykgewotCQlzdHJ1Y3Qgc3dfYmQgKnJ4X2J1ZiA9ICZicC0+cnhfYnVmX3JpbmdbaV07Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKKwkJaWYgKHJ4ci0+cnhfYnVmX3JpbmcgPT0gTlVMTCkKKwkJCXJldHVybjsKIAotCQlpZiAoc2tiID09IE5VTEwpCi0JCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGJwLT5yeF9tYXhfcmluZ19pZHg7IGorKykgeworCQkJc3RydWN0IHN3X2JkICpyeF9idWYgPSAmcnhyLT5yeF9idWZfcmluZ1tqXTsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKIAotCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAotCQkJYnAtPnJ4X2J1Zl91c2Vfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWlmIChza2IgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKIAotCQlyeF9idWYtPnNrYiA9IE5VTEw7CisJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LAorCQkJCQkgcGNpX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKKwkJCQkJIGJwLT5yeF9idWZfdXNlX3NpemUsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCi0JCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKKworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBicC0+cnhfbWF4X3BnX3JpbmdfaWR4OyBqKyspCisJCQlibngyX2ZyZWVfcnhfcGFnZShicCwgcnhyLCBqKTsKIAl9Ci0JZm9yIChpID0gMDsgaSA8IGJwLT5yeF9tYXhfcGdfcmluZ19pZHg7IGkrKykKLQkJYm54Ml9mcmVlX3J4X3BhZ2UoYnAsIGkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDg2NiwxNCArNTAzNCwxMiBAQAogCWlmICgocmMgPSBibngyX2luaXRfY2hpcChicCkpICE9IDApCiAJCXJldHVybiByYzsKIAotCWJueDJfY2xlYXJfcmluZ19zdGF0ZXMoYnApOwotCWJueDJfaW5pdF90eF9yaW5nKGJwKTsKLQlibngyX2luaXRfcnhfcmluZyhicCk7CisJYm54Ml9pbml0X2FsbF9yaW5ncyhicCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLWJueDJfaW5pdF9uaWMoc3RydWN0IGJueDIgKmJwKQorYm54Ml9pbml0X25pYyhzdHJ1Y3QgYm54MiAqYnAsIGludCByZXNldF9waHkpCiB7CiAJaW50IHJjOwogCkBAIC00ODgxLDcgKzUwNDcsNyBAQAogCQlyZXR1cm4gcmM7CiAKIAlzcGluX2xvY2tfYmgoJmJwLT5waHlfbG9jayk7Ci0JYm54Ml9pbml0X3BoeShicCk7CisJYm54Ml9pbml0X3BoeShicCwgcmVzZXRfcGh5KTsKIAlibngyX3NldF9saW5rKGJwKTsKIAlpZiAoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfUkVNT1RFX1BIWV9DQVApCiAJCWJueDJfcmVtb3RlX3BoeV9ldmVudChicCk7CkBAIC01MTQxLDExICs1MzA3LDEzIEBACiAJc3RydWN0IGwyX2ZoZHIgKnJ4X2hkcjsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAlzdHJ1Y3QgYm54Ml9uYXBpICpibmFwaSA9ICZicC0+Ym54Ml9uYXBpWzBdLCAqdHhfbmFwaTsKKwlzdHJ1Y3QgYm54Ml90eF9yaW5nX2luZm8gKnR4ciA9ICZibmFwaS0+dHhfcmluZzsKKwlzdHJ1Y3QgYm54Ml9yeF9yaW5nX2luZm8gKnJ4ciA9ICZibmFwaS0+cnhfcmluZzsKIAogCXR4X25hcGkgPSBibmFwaTsKLQlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSVgpCi0JCXR4X25hcGkgPSAmYnAtPmJueDJfbmFwaVtCTlgyX1RYX1ZFQ107CiAKKwl0eHIgPSAmdHhfbmFwaS0+dHhfcmluZzsKKwlyeHIgPSAmYm5hcGktPnJ4X3Jpbmc7CiAJaWYgKGxvb3BiYWNrX21vZGUgPT0gQk5YMl9NQUNfTE9PUEJBQ0spIHsKIAkJYnAtPmxvb3BiYWNrID0gTUFDX0xPT1BCQUNLOwogCQlibngyX3NldF9tYWNfbG9vcGJhY2soYnApOwpAQCAtNTE4Myw3ICs1MzUxLDcgQEAKIAogCW51bV9wa3RzID0gMDsKIAotCXR4YmQgPSAmYnAtPnR4X2Rlc2NfcmluZ1tUWF9SSU5HX0lEWChicC0+dHhfcHJvZCldOworCXR4YmQgPSAmdHhyLT50eF9kZXNjX3JpbmdbVFhfUklOR19JRFgodHhyLT50eF9wcm9kKV07CiAKIAl0eGJkLT50eF9iZF9oYWRkcl9oaSA9ICh1NjQpIG1hcCA+PiAzMjsKIAl0eGJkLT50eF9iZF9oYWRkcl9sbyA9ICh1NjQpIG1hcCAmIDB4ZmZmZmZmZmY7CkBAIC01MTkxLDExICs1MzU5LDExIEBACiAJdHhiZC0+dHhfYmRfdmxhbl90YWdfZmxhZ3MgPSBUWF9CRF9GTEFHU19TVEFSVCB8IFRYX0JEX0ZMQUdTX0VORDsKIAogCW51bV9wa3RzKys7Ci0JYnAtPnR4X3Byb2QgPSBORVhUX1RYX0JEKGJwLT50eF9wcm9kKTsKLQlicC0+dHhfcHJvZF9ic2VxICs9IHBrdF9zaXplOworCXR4ci0+dHhfcHJvZCA9IE5FWFRfVFhfQkQodHhyLT50eF9wcm9kKTsKKwl0eHItPnR4X3Byb2RfYnNlcSArPSBwa3Rfc2l6ZTsKIAotCVJFR19XUjE2KGJwLCBicC0+dHhfYmlkeF9hZGRyLCBicC0+dHhfcHJvZCk7Ci0JUkVHX1dSKGJwLCBicC0+dHhfYnNlcV9hZGRyLCBicC0+dHhfcHJvZF9ic2VxKTsKKwlSRUdfV1IxNihicCwgdHhyLT50eF9iaWR4X2FkZHIsIHR4ci0+dHhfcHJvZCk7CisJUkVHX1dSKGJwLCB0eHItPnR4X2JzZXFfYWRkciwgdHhyLT50eF9wcm9kX2JzZXEpOwogCiAJdWRlbGF5KDEwMCk7CiAKQEAgLTUyMDksNyArNTM3Nyw3IEBACiAJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwLCBwa3Rfc2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JaWYgKGJueDJfZ2V0X2h3X3R4X2NvbnModHhfbmFwaSkgIT0gYnAtPnR4X3Byb2QpCisJaWYgKGJueDJfZ2V0X2h3X3R4X2NvbnModHhfbmFwaSkgIT0gdHhyLT50eF9wcm9kKQogCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZG9uZTsKIAogCXJ4X2lkeCA9IGJueDJfZ2V0X2h3X3J4X2NvbnMoYm5hcGkpOwpAQCAtNTIxNywxMSArNTM4NSwxMSBAQAogCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZG9uZTsKIAl9CiAKLQlyeF9idWYgPSAmYnAtPnJ4X2J1Zl9yaW5nW3J4X3N0YXJ0X2lkeF07CisJcnhfYnVmID0gJnJ4ci0+cnhfYnVmX3Jpbmdbcnhfc3RhcnRfaWR4XTsKIAlyeF9za2IgPSByeF9idWYtPnNrYjsKIAogCXJ4X2hkciA9IChzdHJ1Y3QgbDJfZmhkciAqKSByeF9za2ItPmRhdGE7Ci0Jc2tiX3Jlc2VydmUocnhfc2tiLCBicC0+cnhfb2Zmc2V0KTsKKwlza2JfcmVzZXJ2ZShyeF9za2IsIEJOWDJfUlhfT0ZGU0VUKTsKIAogCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShicC0+cGRldiwKIAkJcGNpX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKQEAgLTUyNjksNyArNTQzNyw3IEBACiAKIAlibngyX3Jlc2V0X25pYyhicCwgQk5YMl9EUlZfTVNHX0NPREVfUkVTRVQpOwogCXNwaW5fbG9ja19iaCgmYnAtPnBoeV9sb2NrKTsKLQlibngyX2luaXRfcGh5KGJwKTsKKwlibngyX2luaXRfcGh5KGJwLCAxKTsKIAlzcGluX3VubG9ja19iaCgmYnAtPnBoeV9sb2NrKTsKIAlpZiAoYm54Ml9ydW5fbG9vcGJhY2soYnAsIEJOWDJfTUFDX0xPT1BCQUNLKSkKIAkJcmMgfD0gQk5YMl9NQUNfTE9PUEJBQ0tfRkFJTEVEOwpAQCAtNTUzMSw3ICs1Njk5LDYgQEAKIHN0YXRpYyBpbnQKIGJueDJfcmVxdWVzdF9pcnEoc3RydWN0IGJueDIgKmJwKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBicC0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGJueDJfaXJxICppcnE7CiAJaW50IHJjID0gMCwgaTsKQEAgLTU1NDQsNyArNTcxMSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGJwLT5pcnFfbnZlY3M7IGkrKykgewogCQlpcnEgPSAmYnAtPmlycV90YmxbaV07CiAJCXJjID0gcmVxdWVzdF9pcnEoaXJxLT52ZWN0b3IsIGlycS0+aGFuZGxlciwgZmxhZ3MsIGlycS0+bmFtZSwKLQkJCQkgZGV2KTsKKwkJCQkgJmJwLT5ibngyX25hcGlbaV0pOwogCQlpZiAocmMpCiAJCQlicmVhazsKIAkJaXJxLT5yZXF1ZXN0ZWQgPSAxOwpAQCAtNTU1NSwxNCArNTcyMiwxMyBAQAogc3RhdGljIHZvaWQKIGJueDJfZnJlZV9pcnEoc3RydWN0IGJueDIgKmJwKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBicC0+ZGV2OwogCXN0cnVjdCBibngyX2lycSAqaXJxOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGJwLT5pcnFfbnZlY3M7IGkrKykgewogCQlpcnEgPSAmYnAtPmlycV90YmxbaV07CiAJCWlmIChpcnEtPnJlcXVlc3RlZCkKLQkJCWZyZWVfaXJxKGlycS0+dmVjdG9yLCBkZXYpOworCQkJZnJlZV9pcnEoaXJxLT52ZWN0b3IsICZicC0+Ym54Ml9uYXBpW2ldKTsKIAkJaXJxLT5yZXF1ZXN0ZWQgPSAwOwogCX0KIAlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSSkKQEAgLTU1NzQsNyArNTc0MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1ibngyX2VuYWJsZV9tc2l4KHN0cnVjdCBibngyICpicCkKK2JueDJfZW5hYmxlX21zaXgoc3RydWN0IGJueDIgKmJwLCBpbnQgbXNpeF92ZWNzKQogewogCWludCBpLCByYzsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudFtCTlgyX01BWF9NU0lYX1ZFQ107CkBAIC01NTg3LDIxICs1NzUzLDE2IEBACiAJZm9yIChpID0gMDsgaSA8IEJOWDJfTUFYX01TSVhfVkVDOyBpKyspIHsKIAkJbXNpeF9lbnRbaV0uZW50cnkgPSBpOwogCQltc2l4X2VudFtpXS52ZWN0b3IgPSAwOworCisJCXN0cmNweShicC0+aXJxX3RibFtpXS5uYW1lLCBicC0+ZGV2LT5uYW1lKTsKKwkJYnAtPmlycV90YmxbaV0uaGFuZGxlciA9IGJueDJfbXNpXzFzaG90OwogCX0KIAogCXJjID0gcGNpX2VuYWJsZV9tc2l4KGJwLT5wZGV2LCBtc2l4X2VudCwgQk5YMl9NQVhfTVNJWF9WRUMpOwogCWlmIChyYyAhPSAwKQogCQlyZXR1cm47CiAKLQlicC0+aXJxX3RibFtCTlgyX0JBU0VfVkVDXS5oYW5kbGVyID0gYm54Ml9tc2lfMXNob3Q7Ci0JYnAtPmlycV90YmxbQk5YMl9UWF9WRUNdLmhhbmRsZXIgPSBibngyX3R4X21zaXg7Ci0KLQlzdHJjcHkoYnAtPmlycV90YmxbQk5YMl9CQVNFX1ZFQ10ubmFtZSwgYnAtPmRldi0+bmFtZSk7Ci0Jc3RyY2F0KGJwLT5pcnFfdGJsW0JOWDJfQkFTRV9WRUNdLm5hbWUsICItYmFzZSIpOwotCXN0cmNweShicC0+aXJxX3RibFtCTlgyX1RYX1ZFQ10ubmFtZSwgYnAtPmRldi0+bmFtZSk7Ci0Jc3RyY2F0KGJwLT5pcnFfdGJsW0JOWDJfVFhfVkVDXS5uYW1lLCAiLXR4Iik7Ci0KLQlicC0+aXJxX252ZWNzID0gQk5YMl9NQVhfTVNJWF9WRUM7CisJYnAtPmlycV9udmVjcyA9IG1zaXhfdmVjczsKIAlicC0+ZmxhZ3MgfD0gQk5YMl9GTEFHX1VTSU5HX01TSVggfCBCTlgyX0ZMQUdfT05FX1NIT1RfTVNJOwogCWZvciAoaSA9IDA7IGkgPCBCTlgyX01BWF9NU0lYX1ZFQzsgaSsrKQogCQlicC0+aXJxX3RibFtpXS52ZWN0b3IgPSBtc2l4X2VudFtpXS52ZWN0b3I7CkBAIC01NjEwLDEzICs1NzcxLDE2IEBACiBzdGF0aWMgdm9pZAogYm54Ml9zZXR1cF9pbnRfbW9kZShzdHJ1Y3QgYm54MiAqYnAsIGludCBkaXNfbXNpKQogeworCWludCBjcHVzID0gbnVtX29ubGluZV9jcHVzKCk7CisJaW50IG1zaXhfdmVjcyA9IG1pbihjcHVzICsgMSwgUlhfTUFYX1JJTkdTKTsKKwogCWJwLT5pcnFfdGJsWzBdLmhhbmRsZXIgPSBibngyX2ludGVycnVwdDsKIAlzdHJjcHkoYnAtPmlycV90YmxbMF0ubmFtZSwgYnAtPmRldi0+bmFtZSk7CiAJYnAtPmlycV9udmVjcyA9IDE7CiAJYnAtPmlycV90YmxbMF0udmVjdG9yID0gYnAtPnBkZXYtPmlycTsKIAotCWlmICgoYnAtPmZsYWdzICYgQk5YMl9GTEFHX01TSVhfQ0FQKSAmJiAhZGlzX21zaSkKLQkJYm54Ml9lbmFibGVfbXNpeChicCk7CisJaWYgKChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfTVNJWF9DQVApICYmICFkaXNfbXNpICYmIGNwdXMgPiAxKQorCQlibngyX2VuYWJsZV9tc2l4KGJwLCBtc2l4X3ZlY3MpOwogCiAJaWYgKChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfTVNJX0NBUCkgJiYgIWRpc19tc2kgJiYKIAkgICAgIShicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfVVNJTkdfTVNJWCkpIHsKQEAgLTU2MzEsNiArNTc5NSwxMSBAQAogCQkJYnAtPmlycV90YmxbMF0udmVjdG9yID0gYnAtPnBkZXYtPmlycTsKIAkJfQogCX0KKworCWJwLT5udW1fdHhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhicC0+aXJxX252ZWNzKTsKKwlicC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBicC0+bnVtX3R4X3JpbmdzOworCisJYnAtPm51bV9yeF9yaW5ncyA9IGJwLT5pcnFfbnZlY3M7CiB9CiAKIC8qIENhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwpAQCAtNTY0NSwyOSArNTgxNCwxOSBAQAogCWJueDJfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDApOwogCWJueDJfZGlzYWJsZV9pbnQoYnApOwogCi0JcmMgPSBibngyX2FsbG9jX21lbShicCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAlibngyX3NldHVwX2ludF9tb2RlKGJwLCBkaXNhYmxlX21zaSk7CiAJYm54Ml9uYXBpX2VuYWJsZShicCk7CisJcmMgPSBibngyX2FsbG9jX21lbShicCk7CisJaWYgKHJjKQorCQlnb3RvIG9wZW5fZXJyOworCiAJcmMgPSBibngyX3JlcXVlc3RfaXJxKGJwKTsKKwlpZiAocmMpCisJCWdvdG8gb3Blbl9lcnI7CiAKLQlpZiAocmMpIHsKLQkJYm54Ml9uYXBpX2Rpc2FibGUoYnApOwotCQlibngyX2ZyZWVfbWVtKGJwKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXJjID0gYm54Ml9pbml0X25pYyhicCk7Ci0KLQlpZiAocmMpIHsKLQkJYm54Ml9uYXBpX2Rpc2FibGUoYnApOwotCQlibngyX2ZyZWVfaXJxKGJwKTsKLQkJYm54Ml9mcmVlX3NrYnMoYnApOwotCQlibngyX2ZyZWVfbWVtKGJwKTsKLQkJcmV0dXJuIHJjOwotCX0KKwlyYyA9IGJueDJfaW5pdF9uaWMoYnAsIDEpOworCWlmIChyYykKKwkJZ290byBvcGVuX2VycjsKIAogCW1vZF90aW1lcigmYnAtPnRpbWVyLCBqaWZmaWVzICsgYnAtPmN1cnJlbnRfaW50ZXJ2YWwpOwogCkBAIC01NjkxLDE3ICs1ODUwLDE0IEBACiAKIAkJCWJueDJfc2V0dXBfaW50X21vZGUoYnAsIDEpOwogCi0JCQlyYyA9IGJueDJfaW5pdF9uaWMoYnApOworCQkJcmMgPSBibngyX2luaXRfbmljKGJwLCAwKTsKIAogCQkJaWYgKCFyYykKIAkJCQlyYyA9IGJueDJfcmVxdWVzdF9pcnEoYnApOwogCiAJCQlpZiAocmMpIHsKLQkJCQlibngyX25hcGlfZGlzYWJsZShicCk7Ci0JCQkJYm54Ml9mcmVlX3NrYnMoYnApOwotCQkJCWJueDJfZnJlZV9tZW0oYnApOwogCQkJCWRlbF90aW1lcl9zeW5jKCZicC0+dGltZXIpOwotCQkJCXJldHVybiByYzsKKwkJCQlnb3RvIG9wZW5fZXJyOwogCQkJfQogCQkJYm54Ml9lbmFibGVfaW50KGJwKTsKIAkJfQpAQCAtNTcxMSw5ICs1ODY3LDE2IEBACiAJZWxzZSBpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSVgpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJWFxuIiwgZGV2LT5uYW1lKTsKIAotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwogCiAJcmV0dXJuIDA7CisKK29wZW5fZXJyOgorCWJueDJfbmFwaV9kaXNhYmxlKGJwKTsKKwlibngyX2ZyZWVfc2ticyhicCk7CisJYm54Ml9mcmVlX2lycShicCk7CisJYm54Ml9mcmVlX21lbShicCk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTcyNiw3ICs1ODg5LDcgQEAKIAogCWJueDJfbmV0aWZfc3RvcChicCk7CiAKLQlibngyX2luaXRfbmljKGJwKTsKKwlibngyX2luaXRfbmljKGJwLCAxKTsKIAogCWF0b21pY19zZXQoJmJwLT5pbnRyX3NlbSwgMSk7CiAJYm54Ml9uZXRpZl9zdGFydChicCk7CkBAIC01NzUyLDYgKzU5MTUsOCBAQAogCiAJYnAtPnZsZ3JwID0gdmxncnA7CiAJYm54Ml9zZXRfcnhfbW9kZShkZXYpOworCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQ0FOX0tFRVBfVkxBTikKKwkJYm54Ml9md19zeW5jKGJwLCBCTlgyX0RSVl9NU0dfQ09ERV9LRUVQX1ZMQU5fVVBEQVRFLCAwLCAxKTsKIAogCWJueDJfbmV0aWZfc3RhcnQoYnApOwogfQpAQCAtNTc3MSwxOCArNTkzNiwyNiBAQAogCXUzMiBsZW4sIHZsYW5fdGFnX2ZsYWdzLCBsYXN0X2ZyYWcsIG1zczsKIAl1MTYgcHJvZCwgcmluZ19wcm9kOwogCWludCBpOwotCXN0cnVjdCBibngyX25hcGkgKmJuYXBpID0gJmJwLT5ibngyX25hcGlbYnAtPnR4X3ZlY107CisJc3RydWN0IGJueDJfbmFwaSAqYm5hcGk7CisJc3RydWN0IGJueDJfdHhfcmluZ19pbmZvICp0eHI7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCi0JaWYgKHVubGlrZWx5KGJueDJfdHhfYXZhaWwoYnAsIGJuYXBpKSA8CisJLyogIERldGVybWluZSB3aGljaCB0eCByaW5nIHdlIHdpbGwgYmUgcGxhY2VkIG9uICovCisJaSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCWJuYXBpID0gJmJwLT5ibngyX25hcGlbaV07CisJdHhyID0gJmJuYXBpLT50eF9yaW5nOworCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKKworCWlmICh1bmxpa2VseShibngyX3R4X2F2YWlsKGJwLCB0eHIpIDwKIAkgICAgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkpIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKIAkJCWRldi0+bmFtZSk7CiAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwotCXByb2QgPSBicC0+dHhfcHJvZDsKKwlwcm9kID0gdHhyLT50eF9wcm9kOwogCXJpbmdfcHJvZCA9IFRYX1JJTkdfSURYKHByb2QpOwogCiAJdmxhbl90YWdfZmxhZ3MgPSAwOwpAQCAtNTg0NCwxMSArNjAxNywxMSBAQAogCiAJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAKLQl0eF9idWYgPSAmYnAtPnR4X2J1Zl9yaW5nW3JpbmdfcHJvZF07CisJdHhfYnVmID0gJnR4ci0+dHhfYnVmX3JpbmdbcmluZ19wcm9kXTsKIAl0eF9idWYtPnNrYiA9IHNrYjsKIAlwY2lfdW5tYXBfYWRkcl9zZXQodHhfYnVmLCBtYXBwaW5nLCBtYXBwaW5nKTsKIAotCXR4YmQgPSAmYnAtPnR4X2Rlc2NfcmluZ1tyaW5nX3Byb2RdOworCXR4YmQgPSAmdHhyLT50eF9kZXNjX3JpbmdbcmluZ19wcm9kXTsKIAogCXR4YmQtPnR4X2JkX2hhZGRyX2hpID0gKHU2NCkgbWFwcGluZyA+PiAzMjsKIAl0eGJkLT50eF9iZF9oYWRkcl9sbyA9ICh1NjQpIG1hcHBpbmcgJiAweGZmZmZmZmZmOwpAQCAtNTg2MiwxMiArNjAzNSwxMiBAQAogCiAJCXByb2QgPSBORVhUX1RYX0JEKHByb2QpOwogCQlyaW5nX3Byb2QgPSBUWF9SSU5HX0lEWChwcm9kKTsKLQkJdHhiZCA9ICZicC0+dHhfZGVzY19yaW5nW3JpbmdfcHJvZF07CisJCXR4YmQgPSAmdHhyLT50eF9kZXNjX3JpbmdbcmluZ19wcm9kXTsKIAogCQlsZW4gPSBmcmFnLT5zaXplOwogCQltYXBwaW5nID0gcGNpX21hcF9wYWdlKGJwLT5wZGV2LCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKIAkJCWxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCXBjaV91bm1hcF9hZGRyX3NldCgmYnAtPnR4X2J1Zl9yaW5nW3JpbmdfcHJvZF0sCisJCXBjaV91bm1hcF9hZGRyX3NldCgmdHhyLT50eF9idWZfcmluZ1tyaW5nX3Byb2RdLAogCQkJCW1hcHBpbmcsIG1hcHBpbmcpOwogCiAJCXR4YmQtPnR4X2JkX2hhZGRyX2hpID0gKHU2NCkgbWFwcGluZyA+PiAzMjsKQEAgLTU4NzksMjAgKzYwNTIsMjAgQEAKIAl0eGJkLT50eF9iZF92bGFuX3RhZ19mbGFncyB8PSBUWF9CRF9GTEFHU19FTkQ7CiAKIAlwcm9kID0gTkVYVF9UWF9CRChwcm9kKTsKLQlicC0+dHhfcHJvZF9ic2VxICs9IHNrYi0+bGVuOworCXR4ci0+dHhfcHJvZF9ic2VxICs9IHNrYi0+bGVuOwogCi0JUkVHX1dSMTYoYnAsIGJwLT50eF9iaWR4X2FkZHIsIHByb2QpOwotCVJFR19XUihicCwgYnAtPnR4X2JzZXFfYWRkciwgYnAtPnR4X3Byb2RfYnNlcSk7CisJUkVHX1dSMTYoYnAsIHR4ci0+dHhfYmlkeF9hZGRyLCBwcm9kKTsKKwlSRUdfV1IoYnAsIHR4ci0+dHhfYnNlcV9hZGRyLCB0eHItPnR4X3Byb2RfYnNlcSk7CiAKIAltbWlvd2IoKTsKIAotCWJwLT50eF9wcm9kID0gcHJvZDsKKwl0eHItPnR4X3Byb2QgPSBwcm9kOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JaWYgKHVubGlrZWx5KGJueDJfdHhfYXZhaWwoYnAsIGJuYXBpKSA8PSBNQVhfU0tCX0ZSQUdTKSkgewotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCWlmIChibngyX3R4X2F2YWlsKGJwLCBibmFwaSkgPiBicC0+dHhfd2FrZV90aHJlc2gpCi0JCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJaWYgKHVubGlrZWx5KGJueDJfdHhfYXZhaWwoYnAsIHR4cikgPD0gTUFYX1NLQl9GUkFHUykpIHsKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOworCQlpZiAoYm54Ml90eF9hdmFpbChicCwgdHhyKSA+IGJwLT50eF93YWtlX3RocmVzaCkKKwkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKIAl9CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNjA5NSw2ICs2MjY4LDEyIEBACiAJICAgICEoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfUkVNT1RFX1BIWV9DQVApKQogCQlnb3RvIGVycl9vdXRfdW5sb2NrOwogCisJLyogSWYgZGV2aWNlIGlzIGRvd24sIHdlIGNhbiBzdG9yZSB0aGUgc2V0dGluZ3Mgb25seSBpZiB0aGUgdXNlcgorCSAqIGlzIHNldHRpbmcgdGhlIGN1cnJlbnRseSBhY3RpdmUgcG9ydC4KKwkgKi8KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSAmJiBjbWQtPnBvcnQgIT0gYnAtPnBoeV9wb3J0KQorCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCiAJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewogCQlhdXRvbmVnIHw9IEFVVE9ORUdfU1BFRUQ7CiAKQEAgLTYxNTIsNyArNjMzMSwxMiBAQAogCWJwLT5yZXFfbGluZV9zcGVlZCA9IHJlcV9saW5lX3NwZWVkOwogCWJwLT5yZXFfZHVwbGV4ID0gcmVxX2R1cGxleDsKIAotCWVyciA9IGJueDJfc2V0dXBfcGh5KGJwLCBjbWQtPnBvcnQpOworCWVyciA9IDA7CisJLyogSWYgZGV2aWNlIGlzIGRvd24sIHRoZSBuZXcgc2V0dGluZ3Mgd2lsbCBiZSBwaWNrZWQgdXAgd2hlbiBpdCBpcworCSAqIGJyb3VnaHQgdXAuCisJICovCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJZXJyID0gYm54Ml9zZXR1cF9waHkoYnAsIGNtZC0+cG9ydCk7CiAKIGVycl9vdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZicC0+cGh5X2xvY2spOwpAQCAtNjQxNCw3ICs2NTk4LDcgQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7CiAJCWJueDJfbmV0aWZfc3RvcChicCk7Ci0JCWJueDJfaW5pdF9uaWMoYnApOworCQlibngyX2luaXRfbmljKGJwLCAwKTsKIAkJYm54Ml9uZXRpZl9zdGFydChicCk7CiAJfQogCkBAIC02NDU3LDcgKzY2NDEsNyBAQAogCQlyYyA9IGJueDJfYWxsb2NfbWVtKGJwKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwotCQlibngyX2luaXRfbmljKGJwKTsKKwkJYm54Ml9pbml0X25pYyhicCwgMCk7CiAJCWJueDJfbmV0aWZfc3RhcnQoYnApOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY3MjUsNyArNjkwOSw3IEBACiAJCQlibngyX3Jlc2V0X2NoaXAoYnAsIEJOWDJfRFJWX01TR19DT0RFX1JFU0VUKTsKIAkJfQogCQllbHNlIHsKLQkJCWJueDJfaW5pdF9uaWMoYnApOworCQkJYm54Ml9pbml0X25pYyhicCwgMSk7CiAJCQlibngyX25ldGlmX3N0YXJ0KGJwKTsKIAkJfQogCkBAIC02OTUxLDcgKzcxMzUsNyBAQAogCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCWJueDJfc2V0X21hY19hZGRyKGJwKTsKKwkJYm54Ml9zZXRfbWFjX2FkZHIoYnAsIGJwLT5kZXYtPmRldl9hZGRyLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzEwOCw2ICs3MjkyLDcgQEAKIAl9CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCWJwLT5wbV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOwogCWlmIChicC0+cG1fY2FwID09IDApIHsKQEAgLTcxMjUsNyArNzMxMCw3IEBACiAJSU5JVF9XT1JLKCZicC0+cmVzZXRfdGFzaywgYm54Ml9yZXNldF90YXNrKTsKIAogCWRldi0+YmFzZV9hZGRyID0gZGV2LT5tZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JbWVtX2xlbiA9IE1CX0dFVF9DSURfQUREUihUWF9UU1NfQ0lEICsgMSk7CisJbWVtX2xlbiA9IE1CX0dFVF9DSURfQUREUihUWF9UU1NfQ0lEICsgVFhfTUFYX1RTU19SSU5HUyk7CiAJZGV2LT5tZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKyBtZW1fbGVuOwogCWRldi0+aXJxID0gcGRldi0+aXJxOwogCkBAIC03MjcyLDcgKzc0NTcsNiBAQAogCXJlZyAmPSBCTlgyX0NPTkRJVElPTl9NRldfUlVOX01BU0s7CiAJaWYgKHJlZyAhPSBCTlgyX0NPTkRJVElPTl9NRldfUlVOX1VOS05PV04gJiYKIAkgICAgcmVnICE9IEJOWDJfQ09ORElUSU9OX01GV19SVU5fTk9ORSkgewotCQlpbnQgaTsKIAkJdTMyIGFkZHIgPSBibngyX3NobWVtX3JkKGJwLCBCTlgyX01GV19WRVJfUFRSKTsKIAogCQlicC0+ZndfdmVyc2lvbltqKytdID0gJyAnOwpAQCAtNzI5NCw4ICs3NDc4LDYgQEAKIAlicC0+bWFjX2FkZHJbNF0gPSAodTgpIChyZWcgPj4gOCk7CiAJYnAtPm1hY19hZGRyWzVdID0gKHU4KSByZWc7CiAKLQlicC0+cnhfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBsMl9maGRyKSArIDI7Ci0KIAlicC0+dHhfcmluZ19zaXplID0gTUFYX1RYX0RFU0NfQ05UOwogCWJueDJfc2V0X3J4X3Jpbmdfc2l6ZShicCwgMjU1KTsKIApAQCAtNzM0NSw4ICs3NTI3LDYgQEAKIAkJCWlmIChyZWcgJiBCTlgyX1NIQVJFRF9IV19DRkdfUEhZXzJfNUcpCiAJCQkJYnAtPnBoeV9mbGFncyB8PSBCTlgyX1BIWV9GTEFHXzJfNUdfQ0FQQUJMRTsKIAkJfQotCQlibngyX2luaXRfcmVtb3RlX3BoeShicCk7Ci0KIAl9IGVsc2UgaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA2IHx8CiAJCSAgIENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA4KQogCQlicC0+cGh5X2ZsYWdzIHw9IEJOWDJfUEhZX0ZMQUdfQ1JDX0ZJWDsKQEAgLTczNTUsNiArNzUzNSw4IEBACiAJCSAgQ0hJUF9SRVYoYnApID09IENISVBfUkVWX0J4KSkKIAkJYnAtPnBoeV9mbGFncyB8PSBCTlgyX1BIWV9GTEFHX0RJU19FQVJMWV9EQUM7CiAKKwlibngyX2luaXRfZndfY2FwKGJwKTsKKwogCWlmICgoQ0hJUF9JRChicCkgPT0gQ0hJUF9JRF81NzA4X0EwKSB8fAogCSAgICAoQ0hJUF9JRChicCkgPT0gQ0hJUF9JRF81NzA4X0IwKSB8fAogCSAgICAoQ0hJUF9JRChicCkgPT0gQ0hJUF9JRF81NzA4X0IxKSkgewpAQCAtNzQ1MSwxNSArNzYzMywxOSBAQAogYm54Ml9pbml0X25hcGkoc3RydWN0IGJueDIgKmJwKQogewogCWludCBpOwotCXN0cnVjdCBibngyX25hcGkgKmJuYXBpOwogCiAJZm9yIChpID0gMDsgaSA8IEJOWDJfTUFYX01TSVhfVkVDOyBpKyspIHsKLQkJYm5hcGkgPSAmYnAtPmJueDJfbmFwaVtpXTsKKwkJc3RydWN0IGJueDJfbmFwaSAqYm5hcGkgPSAmYnAtPmJueDJfbmFwaVtpXTsKKwkJaW50ICgqcG9sbCkoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCk7CisKKwkJaWYgKGkgPT0gMCkKKwkJCXBvbGwgPSBibngyX3BvbGw7CisJCWVsc2UKKwkJCXBvbGwgPSBibngyX3BvbGxfbXNpeDsKKworCQluZXRpZl9uYXBpX2FkZChicC0+ZGV2LCAmYnAtPmJueDJfbmFwaVtpXS5uYXBpLCBwb2xsLCA2NCk7CiAJCWJuYXBpLT5icCA9IGJwOwogCX0KLQluZXRpZl9uYXBpX2FkZChicC0+ZGV2LCAmYnAtPmJueDJfbmFwaVswXS5uYXBpLCBibngyX3BvbGwsIDY0KTsKLQluZXRpZl9uYXBpX2FkZChicC0+ZGV2LCAmYnAtPmJueDJfbmFwaVtCTlgyX1RYX1ZFQ10ubmFwaSwgYm54Ml90eF9wb2xsLAotCQkgICAgICAgNjQpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNzQ3Niw3ICs3NjYyLDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKIAogCS8qIGRldiB6ZXJvZWQgaW4gaW5pdF9ldGhlcmRldiAqLwotCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqYnApKTsKKwlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKmJwKSwgVFhfTUFYX1JJTkdTKTsKIAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc0OTEsNyArNzY3Nyw3IEBACiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBibngyX3N0YXJ0X3htaXQ7CiAJZGV2LT5zdG9wID0gYm54Ml9jbG9zZTsKIAlkZXYtPmdldF9zdGF0cyA9IGJueDJfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gYm54Ml9zZXRfcnhfbW9kZTsKKwlkZXYtPnNldF9yeF9tb2RlID0gYm54Ml9zZXRfcnhfbW9kZTsKIAlkZXYtPmRvX2lvY3RsID0gYm54Ml9pb2N0bDsKIAlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJueDJfY2hhbmdlX21hY19hZGRyOwogCWRldi0+Y2hhbmdlX210dSA9IGJueDJfY2hhbmdlX210dTsKQEAgLTc2MTIsMTEgKzc3OTgsOTcgQEAKIAogCWJueDJfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDApOwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQlibngyX2luaXRfbmljKGJwKTsKKwlibngyX2luaXRfbmljKGJwLCAxKTsKIAlibngyX25ldGlmX3N0YXJ0KGJwKTsKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBibngyX2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZworICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGJueDJfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSAgICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJ0bmxfbG9jaygpOworCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJYm54Ml9uZXRpZl9zdG9wKGJwKTsKKwkJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CisJCWJueDJfcmVzZXRfbmljKGJwLCBCTlgyX0RSVl9NU0dfQ09ERV9SRVNFVCk7CisJfQorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJ0bmxfdW5sb2NrKCk7CisKKwkvKiBSZXF1ZXN0IGEgc2xvdCBzbG90IHJlc2V0LiAqLworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCisvKioKKyAqIGJueDJfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgYm54Ml9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJ0bmxfbG9jaygpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJYm54Ml9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7CisJCWJueDJfaW5pdF9uaWMoYnAsIDEpOworCX0KKworCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworLyoqCisgKiBibngyX2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXQKKyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgYm54Ml9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcnRubF9sb2NrKCk7CisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJYm54Ml9uZXRpZl9zdGFydChicCk7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJcnRubF91bmxvY2soKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgYm54Ml9lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQJPSBibngyX2lvX2Vycm9yX2RldGVjdGVkLAorCS5zbG90X3Jlc2V0CT0gYm54Ml9pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUJCT0gYm54Ml9pb19yZXN1bWUsCit9OworCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm54Ml9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9IERSVl9NT0RVTEVfTkFNRSwKIAkuaWRfdGFibGUJPSBibngyX3BjaV90YmwsCkBAIC03NjI0LDYgKzc4OTYsNyBAQAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYm54Ml9yZW1vdmVfb25lKSwKIAkuc3VzcGVuZAk9IGJueDJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGJueDJfcmVzdW1lLAorCS5lcnJfaGFuZGxlcgk9ICZibngyX2Vycl9oYW5kbGVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYm54Ml9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggMjM3N2NjMS4uYzNjNTc5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtMzA5LDYgKzMwOSw3IEBACiAjZW5kaWYKIH07CiAKKyNkZWZpbmUgQk5YMl9SWF9PRkZTRVQJCShzaXplb2Yoc3RydWN0IGwyX2ZoZHIpICsgMikKIAogLyoKICAqICBsMl9jb250ZXh0IGRlZmluaXRpb24KQEAgLTQxNTcsNiArNDE1OCwyMyBAQAogCiAKIC8qCisgKiAgcmx1cF9yZWcgZGVmaW5pdGlvbgorICogIG9mZnNldDogMHgyMDAwCisgKi8KKyNkZWZpbmUgQk5YMl9STFVQX1JTU19DT05GSUcJCQkJMHgwMDAwMjAxYworI2RlZmluZSBCTlgyX1JMVVBfUlNTX0NPTkZJR19JUFY0X1JTU19UWVBFX1hJCQkgKDB4M0w8PDApCisjZGVmaW5lIEJOWDJfUkxVUF9SU1NfQ09ORklHX0lQVjRfUlNTX1RZUEVfT0ZGX1hJCSAoMEw8PDApCisjZGVmaW5lIEJOWDJfUkxVUF9SU1NfQ09ORklHX0lQVjRfUlNTX1RZUEVfQUxMX1hJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfUkxVUF9SU1NfQ09ORklHX0lQVjRfUlNTX1RZUEVfSVBfT05MWV9YSQkgKDJMPDwwKQorI2RlZmluZSBCTlgyX1JMVVBfUlNTX0NPTkZJR19JUFY0X1JTU19UWVBFX1JFU19YSQkgKDNMPDwwKQorI2RlZmluZSBCTlgyX1JMVVBfUlNTX0NPTkZJR19JUFY2X1JTU19UWVBFX1hJCQkgKDB4M0w8PDIpCisjZGVmaW5lIEJOWDJfUkxVUF9SU1NfQ09ORklHX0lQVjZfUlNTX1RZUEVfT0ZGX1hJCSAoMEw8PDIpCisjZGVmaW5lIEJOWDJfUkxVUF9SU1NfQ09ORklHX0lQVjZfUlNTX1RZUEVfQUxMX1hJCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfUkxVUF9SU1NfQ09ORklHX0lQVjZfUlNTX1RZUEVfSVBfT05MWV9YSQkgKDJMPDwyKQorI2RlZmluZSBCTlgyX1JMVVBfUlNTX0NPTkZJR19JUFY2X1JTU19UWVBFX1JFU19YSQkgKDNMPDwyKQorCisKKy8qCiAgKiAgcmJ1Zl9yZWcgZGVmaW5pdGlvbgogICogIG9mZnNldDogMHgyMDAwMDAKICAqLwpAQCAtNTUyNyw2ICs1NTQ1LDkgQEAKICNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfT0ZGCShCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF8xIC0JXAogCQkJCQkgQk5YMl9IQ19TQl9DT05GSUdfMSkKICNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU19PRkYJKEJOWDJfSENfVFhfVElDS1NfMSAtIEJOWDJfSENfU0JfQ09ORklHXzEpCisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQX09GRgkoQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfMSAtIFwKKwkJCQkJIEJOWDJfSENfU0JfQ09ORklHXzEpCisjZGVmaW5lIEJOWDJfSENfUlhfVElDS1NfT0ZGCShCTlgyX0hDX1JYX1RJQ0tTXzEgLSBCTlgyX0hDX1NCX0NPTkZJR18xKQogCiAKIC8qCkBAIC01ODU1LDYgKzU4NzYsOSBAQAogI2RlZmluZSBCTlgyX1JYUF9GVFFfQ1RMX0NVUl9ERVBUSAkJCSAoMHgzZmZMPDwyMikKIAogI2RlZmluZSBCTlgyX1JYUF9TQ1JBVENICQkJCTB4MDAwZTAwMDAKKyNkZWZpbmUgQk5YMl9SWFBfU0NSQVRDSF9SU1NfVEJMX1NaCQkJIDB4MDAwZTAwMzgKKyNkZWZpbmUgQk5YMl9SWFBfU0NSQVRDSF9SU1NfVEJMCQkJIDB4MDAwZTAwM2MKKyNkZWZpbmUgQk5YMl9SWFBfU0NSQVRDSF9SU1NfVEJMX01BWF9FTlRSSUVTCQkgMTI4CiAKIAogLyoKQEAgLTY0MTIsMTAgKzY0MzYsMTUgQEAKICNkZWZpbmUgTUFYX0VUSEVSTkVUX1BBQ0tFVF9TSVpFCTE1MTQKICNkZWZpbmUgTUFYX0VUSEVSTkVUX0pVTUJPX1BBQ0tFVF9TSVpFCTkwMTQKIAotI2RlZmluZSBSWF9DT1BZX1RIUkVTSAkJCTEyOAorI2RlZmluZSBCTlgyX1JYX0NPUFlfVEhSRVNICQkxMjgKIAogI2RlZmluZSBCTlgyX01JU0NfRU5BQkxFX0RFRkFVTFQJMHgxN2ZmZmZmZgogCisjZGVmaW5lIEJOWDJfU1RBUlRfVU5JQ0FTVF9BRERSRVNTX0lOREVYCTQKKyNkZWZpbmUgQk5YMl9FTkRfVU5JQ0FTVF9BRERSRVNTX0lOREVYCQk3CisjZGVmaW5lIEJOWDJfTUFYX1VOSUNBU1RfQUREUkVTU0VTICAgICAJKEJOWDJfRU5EX1VOSUNBU1RfQUREUkVTU19JTkRFWCAtIFwKKwkJCQkJIEJOWDJfU1RBUlRfVU5JQ0FTVF9BRERSRVNTX0lOREVYICsgMSkKKwogI2RlZmluZSBETUFfUkVBRF9DSEFOUwk1CiAjZGVmaW5lIERNQV9XUklURV9DSEFOUwkzCiAKQEAgLTY0NzgsNiArNjUwNywxMSBAQAogI2RlZmluZSBUWF9DSUQJCTE2CiAjZGVmaW5lIFRYX1RTU19DSUQJMzIKICNkZWZpbmUgUlhfQ0lECQkwCisjZGVmaW5lIFJYX1JTU19DSUQJNAorI2RlZmluZSBSWF9NQVhfUlNTX1JJTkdTCTcKKyNkZWZpbmUgUlhfTUFYX1JJTkdTCQkoUlhfTUFYX1JTU19SSU5HUyArIDEpCisjZGVmaW5lIFRYX01BWF9UU1NfUklOR1MJNworI2RlZmluZSBUWF9NQVhfUklOR1MJCShUWF9NQVhfVFNTX1JJTkdTICsgMSkKIAogI2RlZmluZSBNQl9UWF9DSURfQUREUglNQl9HRVRfQ0lEX0FERFIoVFhfQ0lEKQogI2RlZmluZSBNQl9SWF9DSURfQUREUglNQl9HRVRfQ0lEX0FERFIoUlhfQ0lEKQpAQCAtNjU1Niw3ICs2NTkwLDcgQEAKIH07CiAKICNkZWZpbmUgQk5YMl9NQVhfTVNJWF9IV19WRUMJOQotI2RlZmluZSBCTlgyX01BWF9NU0lYX1ZFQwkyCisjZGVmaW5lIEJOWDJfTUFYX01TSVhfVkVDCTkKICNkZWZpbmUgQk5YMl9CQVNFX1ZFQwkJMAogI2RlZmluZSBCTlgyX1RYX1ZFQwkJMQogI2RlZmluZSBCTlgyX1RYX0lOVF9OVU0JKEJOWDJfVFhfVkVDIDw8IEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOVF9OVU1fU0hJRlQpCkBAIC02NTY4LDI0ICs2NjAyLDU2IEBACiAJY2hhcgkJbmFtZVsxNl07CiB9OwogCi1zdHJ1Y3QgYm54Ml9uYXBpIHsKLQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJbmFwaQkJX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCXN0cnVjdCBibngyCQkqYnA7Ci0Jc3RydWN0IHN0YXR1c19ibG9jawkqc3RhdHVzX2JsazsKLQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXgJKnN0YXR1c19ibGtfbXNpeDsKLQl1MzIgCQkJbGFzdF9zdGF0dXNfaWR4OwotCXUzMgkJCWludF9udW07CitzdHJ1Y3QgYm54Ml90eF9yaW5nX2luZm8geworCXUzMgkJCXR4X3Byb2RfYnNlcTsKKwl1MTYJCQl0eF9wcm9kOworCXUzMgkJCXR4X2JpZHhfYWRkcjsKKwl1MzIJCQl0eF9ic2VxX2FkZHI7CisKKwlzdHJ1Y3QgdHhfYmQJCSp0eF9kZXNjX3Jpbmc7CisJc3RydWN0IHN3X2JkCQkqdHhfYnVmX3Jpbmc7CiAKIAl1MTYJCQl0eF9jb25zOwogCXUxNgkJCWh3X3R4X2NvbnM7CiAKKwlkbWFfYWRkcl90CQl0eF9kZXNjX21hcHBpbmc7Cit9OworCitzdHJ1Y3QgYm54Ml9yeF9yaW5nX2luZm8gewogCXUzMgkJCXJ4X3Byb2RfYnNlcTsKIAl1MTYJCQlyeF9wcm9kOwogCXUxNgkJCXJ4X2NvbnM7CiAKKwl1MzIJCQlyeF9iaWR4X2FkZHI7CisJdTMyCQkJcnhfYnNlcV9hZGRyOworCXUzMgkJCXJ4X3BnX2JpZHhfYWRkcjsKKwogCXUxNgkJCXJ4X3BnX3Byb2Q7CiAJdTE2CQkJcnhfcGdfY29uczsKIAorCXN0cnVjdCBzd19iZAkJKnJ4X2J1Zl9yaW5nOworCXN0cnVjdCByeF9iZAkJKnJ4X2Rlc2NfcmluZ1tNQVhfUlhfUklOR1NdOworCXN0cnVjdCBzd19wZwkJKnJ4X3BnX3Jpbmc7CisJc3RydWN0IHJ4X2JkCQkqcnhfcGdfZGVzY19yaW5nW01BWF9SWF9QR19SSU5HU107CisKKwlkbWFfYWRkcl90CQlyeF9kZXNjX21hcHBpbmdbTUFYX1JYX1JJTkdTXTsKKwlkbWFfYWRkcl90CQlyeF9wZ19kZXNjX21hcHBpbmdbTUFYX1JYX1BHX1JJTkdTXTsKK307CisKK3N0cnVjdCBibngyX25hcGkgeworCXN0cnVjdCBuYXBpX3N0cnVjdAluYXBpCQlfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJc3RydWN0IGJueDIJCSpicDsKKwl1bmlvbiB7CisJCXN0cnVjdCBzdGF0dXNfYmxvY2sJCSptc2k7CisJCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeAkqbXNpeDsKKwl9IHN0YXR1c19ibGs7CisJdTE2CQkJKmh3X3R4X2NvbnNfcHRyOworCXUxNgkJCSpod19yeF9jb25zX3B0cjsKKwl1MzIgCQkJbGFzdF9zdGF0dXNfaWR4OworCXUzMgkJCWludF9udW07CisKKwlzdHJ1Y3QgYm54Ml9yeF9yaW5nX2luZm8JcnhfcmluZzsKKwlzdHJ1Y3QgYm54Ml90eF9yaW5nX2luZm8JdHhfcmluZzsKIH07CiAKIHN0cnVjdCBibngyIHsKQEAgLTY2MTIsMTQgKzY2NzgsNyBAQAogI2RlZmluZSBCTlgyX0ZMQUdfVVNJTkdfTVNJX09SX01TSVgJKEJOWDJfRkxBR19VU0lOR19NU0kgfCBcCiAJCQkJCSBCTlgyX0ZMQUdfVVNJTkdfTVNJWCkKICNkZWZpbmUgQk5YMl9GTEFHX0pVTUJPX0JST0tFTgkJMHgwMDAwMDgwMAotCi0JLyogUHV0IHR4IHByb2R1Y2VyIGFuZCBjb25zdW1lciBmaWVsZHMgaW4gc2VwYXJhdGUgY2FjaGUgbGluZXMuICovCi0KLQl1MzIJCXR4X3Byb2RfYnNlcSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKEwxX0NBQ0hFX0JZVEVTKSkpOwotCXUxNgkJdHhfcHJvZDsKLQl1OAkJdHhfdmVjOwotCXUzMgkJdHhfYmlkeF9hZGRyOwotCXUzMgkJdHhfYnNlcV9hZGRyOworI2RlZmluZSBCTlgyX0ZMQUdfQ0FOX0tFRVBfVkxBTgkJMHgwMDAwMTAwMAogCiAJc3RydWN0IGJueDJfbmFwaQlibngyX25hcGlbQk5YMl9NQVhfTVNJWF9WRUNdOwogCkBAIC02NjI3LDcgKzY2ODYsNiBAQAogCXN0cnVjdAkJCXZsYW5fZ3JvdXAgKnZsZ3JwOwogI2VuZGlmCiAKLQl1MzIJCQlyeF9vZmZzZXQ7CiAJdTMyCQkJcnhfYnVmX3VzZV9zaXplOwkvKiB1c2VhYmxlIHNpemUgKi8KIAl1MzIJCQlyeF9idWZfc2l6ZTsJCS8qIHdpdGggYWxpZ25tZW50ICovCiAJdTMyCQkJcnhfY29weV90aHJlc2g7CkBAIC02NjM3LDE0ICs2Njk1LDcgQEAKIAogCXUzMgkJCXJ4X2NzdW07CiAKLQlzdHJ1Y3Qgc3dfYmQJCSpyeF9idWZfcmluZzsKLQlzdHJ1Y3QgcnhfYmQJCSpyeF9kZXNjX3JpbmdbTUFYX1JYX1JJTkdTXTsKLQlzdHJ1Y3Qgc3dfcGcJCSpyeF9wZ19yaW5nOwotCXN0cnVjdCByeF9iZAkJKnJ4X3BnX2Rlc2NfcmluZ1tNQVhfUlhfUEdfUklOR1NdOwotCiAJLyogVFggY29uc3RhbnRzICovCi0Jc3RydWN0IHR4X2JkCSp0eF9kZXNjX3Jpbmc7Ci0Jc3RydWN0IHN3X2JkCSp0eF9idWZfcmluZzsKIAlpbnQJCXR4X3Jpbmdfc2l6ZTsKIAl1MzIJCXR4X3dha2VfdGhyZXNoOwogCkBAIC02NzIyLDE2ICs2NzczLDExIEBACiAJdTE2CQkJZndfd3Jfc2VxOwogCXUxNgkJCWZ3X2Rydl9wdWxzZV93cl9zZXE7CiAKLQlkbWFfYWRkcl90CQl0eF9kZXNjX21hcHBpbmc7Ci0KLQogCWludAkJCXJ4X21heF9yaW5nOwogCWludAkJCXJ4X3Jpbmdfc2l6ZTsKLQlkbWFfYWRkcl90CQlyeF9kZXNjX21hcHBpbmdbTUFYX1JYX1JJTkdTXTsKIAogCWludAkJCXJ4X21heF9wZ19yaW5nOwogCWludAkJCXJ4X3BnX3Jpbmdfc2l6ZTsKLQlkbWFfYWRkcl90CQlyeF9wZ19kZXNjX21hcHBpbmdbTUFYX1JYX1BHX1JJTkdTXTsKIAogCXUxNgkJCXR4X3F1aWNrX2NvbnNfdHJpcDsKIAl1MTYJCQl0eF9xdWlja19jb25zX3RyaXBfaW50OwpAQCAtNjc1MCw3ICs2Nzk2LDYgQEAKIAogCXUzMgkJCXN0YXRzX3RpY2tzOwogCi0Jc3RydWN0IHN0YXR1c19ibG9jawkqc3RhdHVzX2JsazsKIAlkbWFfYWRkcl90CQlzdGF0dXNfYmxrX21hcHBpbmc7CiAKIAlzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jawkqc3RhdHNfYmxrOwpAQCAtNjgxMiw2ICs2ODU3LDkgQEAKIAogCXN0cnVjdCBibngyX2lycQkJaXJxX3RibFtCTlgyX01BWF9NU0lYX1ZFQ107CiAJaW50CQkJaXJxX252ZWNzOworCisJdTgJCQludW1fdHhfcmluZ3M7CisJdTgJCQludW1fcnhfcmluZ3M7CiB9OwogCiAjZGVmaW5lIFJFR19SRChicCwgb2Zmc2V0KQkJCQkJXApAQCAtNjkxMiw2ICs2OTYwLDcgQEAKICNkZWZpbmUgQk5YMl9EUlZfTVNHX0NPREVfRElBRwkJCSAweDA3MDAwMDAwCiAjZGVmaW5lIEJOWDJfRFJWX01TR19DT0RFX1NVU1BFTkRfTk9fV09MCSAweDA5MDAwMDAwCiAjZGVmaW5lIEJOWDJfRFJWX01TR19DT0RFX1VOTE9BRF9MTktfRE4JCSAweDBiMDAwMDAwCisjZGVmaW5lIEJOWDJfRFJWX01TR19DT0RFX0tFRVBfVkxBTl9VUERBVEUJIDB4MGQwMDAwMDAKICNkZWZpbmUgQk5YMl9EUlZfTVNHX0NPREVfQ01EX1NFVF9MSU5LCQkgMHgxMDAwMDAwMAogCiAjZGVmaW5lIEJOWDJfRFJWX01TR19EQVRBCQkJIDB4MDBmZjAwMDAKQEAgLTcyNDAsNiArNzI4OSwxMCBAQAogI2RlZmluZSBCTlgyX0ZXX0NBUF9TSUdOQVRVUkVfTUFTSwkJIDB4ZmZmZjAwMDAKICNkZWZpbmUgQk5YMl9GV19DQVBfUkVNT1RFX1BIWV9DQVBBQkxFCQkgMHgwMDAwMDAwMQogI2RlZmluZSBCTlgyX0ZXX0NBUF9SRU1PVEVfUEhZX1BSRVNFTlQJCSAweDAwMDAwMDAyCisjZGVmaW5lIEJOWDJfRldfQ0FQX01GV19DQU5fS0VFUF9WTEFOCQkgMHgwMDAwMDAwOAorI2RlZmluZSBCTlgyX0ZXX0NBUF9CQ19DQU5fS0VFUF9WTEFOCQkgMHgwMDAwMDAxMAorI2RlZmluZSBCTlgyX0ZXX0NBUF9DQU5fS0VFUF9WTEFOCShCTlgyX0ZXX0NBUF9CQ19DQU5fS0VFUF9WTEFOIHwgXAorCQkJCQkgQk5YMl9GV19DQVBfTUZXX0NBTl9LRUVQX1ZMQU4pCiAKICNkZWZpbmUgQk5YMl9SUEhZX1NJR05BVFVSRQkJCTB4MzZjCiAjZGVmaW5lIEJOWDJfUlBIWV9MT0FEX1NJR05BVFVSRQkJIDB4NWE1YTVhNWEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJfZncuaCBiL2RyaXZlcnMvbmV0L2JueDJfZncuaAppbmRleCAzYjgzOWQ0Li5lNGIxZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyX2Z3LmgKKysrIGIvZHJpdmVycy9uZXQvYm54Ml9mdy5oCkBAIC04ODYsNiArODg2LDIzIEBACiAJLnJvZGF0YQkJCQk9IGJueDJfQ09NX2IwNkZ3Um9kYXRhLAogfTsKIAorLyogSW5pdGlhbGl6ZWQgVmFsdWVzIGZvciB0aGUgQ29tcGxldGlvbiBQcm9jZXNzb3IuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9yZWcgY3B1X3JlZ19jb20gPSB7CisJLm1vZGUgPSBCTlgyX0NPTV9DUFVfTU9ERSwKKwkubW9kZV92YWx1ZV9oYWx0ID0gQk5YMl9DT01fQ1BVX01PREVfU09GVF9IQUxULAorCS5tb2RlX3ZhbHVlX3NzdGVwID0gQk5YMl9DT01fQ1BVX01PREVfU1RFUF9FTkEsCisJLnN0YXRlID0gQk5YMl9DT01fQ1BVX1NUQVRFLAorCS5zdGF0ZV92YWx1ZV9jbGVhciA9IDB4ZmZmZmZmLAorCS5ncHIwID0gQk5YMl9DT01fQ1BVX1JFR19GSUxFLAorCS5ldm1hc2sgPSBCTlgyX0NPTV9DUFVfRVZFTlRfTUFTSywKKwkucGMgPSBCTlgyX0NPTV9DUFVfUFJPR1JBTV9DT1VOVEVSLAorCS5pbnN0ID0gQk5YMl9DT01fQ1BVX0lOU1RSVUNUSU9OLAorCS5icCA9IEJOWDJfQ09NX0NQVV9IV19CUkVBS1BPSU5ULAorCS5zcGFkX2Jhc2UgPSBCTlgyX0NPTV9TQ1JBVENILAorCS5taXBzX3ZpZXdfYmFzZSA9IDB4ODAwMDAwMCwKK307CisKKwogc3RhdGljIHU4IGJueDJfQ1BfYjA2RndUZXh0W10gPSB7CiAJMHg5ZCwgMHhiYywgMHgwZCwgMHg3OCwgMHgxMywgMHhlNywgMHg5OSwgMHgyZSwgMHg3YywgMHhjZiwgMHg0OCwgMHhiMiwKIAkweDY1LCAweDViLCAweGI2LCAweGM3LCAweGI2LCAweDBjLCAweDIyLCAweDY1LCAweDQxLCAweDgzLCAweDQ3LCAweDIwLApAQCAtMjE2Nyw2ICsyMTg0LDIyIEBACiAJLnJvZGF0YQkJCQk9IGJueDJfQ1BfYjA2RndSb2RhdGEsCiB9OwogCisvKiBJbml0aWFsaXplZCBWYWx1ZXMgdGhlIENvbW1hbmQgUHJvY2Vzc29yLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfcmVnIGNwdV9yZWdfY3AgPSB7CisJLm1vZGUgPSBCTlgyX0NQX0NQVV9NT0RFLAorCS5tb2RlX3ZhbHVlX2hhbHQgPSBCTlgyX0NQX0NQVV9NT0RFX1NPRlRfSEFMVCwKKwkubW9kZV92YWx1ZV9zc3RlcCA9IEJOWDJfQ1BfQ1BVX01PREVfU1RFUF9FTkEsCisJLnN0YXRlID0gQk5YMl9DUF9DUFVfU1RBVEUsCisJLnN0YXRlX3ZhbHVlX2NsZWFyID0gMHhmZmZmZmYsCisJLmdwcjAgPSBCTlgyX0NQX0NQVV9SRUdfRklMRSwKKwkuZXZtYXNrID0gQk5YMl9DUF9DUFVfRVZFTlRfTUFTSywKKwkucGMgPSBCTlgyX0NQX0NQVV9QUk9HUkFNX0NPVU5URVIsCisJLmluc3QgPSBCTlgyX0NQX0NQVV9JTlNUUlVDVElPTiwKKwkuYnAgPSBCTlgyX0NQX0NQVV9IV19CUkVBS1BPSU5ULAorCS5zcGFkX2Jhc2UgPSBCTlgyX0NQX1NDUkFUQ0gsCisJLm1pcHNfdmlld19iYXNlID0gMHg4MDAwMDAwLAorfTsKKwogc3RhdGljIHU4IGJueDJfUlhQX2IwNkZ3VGV4dFtdID0gewogCTB4ZWMsIDB4NWIsIDB4NWQsIDB4NzAsIDB4NWMsIDB4ZDcsIDB4NWQsIDB4ZmYsIDB4ZGYsIDB4YjMsIDB4MmIsIDB4NjksCiAJMHgyZCwgMHg0YiwgMHhmMiwgMHg5NSwgMHhiYywgMHg3MSwgMHg1NiwgMHhhOSwgMHg5MiwgMHhlYywgMHg1YSwgMHg1NywKQEAgLTI5NDYsNiArMjk3OSwyMiBAQAogCS5yb2RhdGEJCQkJPSBibngyX1JYUF9iMDZGd1JvZGF0YSwKIH07CiAKKy8qIEluaXRpYWxpemVkIFZhbHVlcyBmb3IgdGhlIFJYIFByb2Nlc3Nvci4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X3JlZyBjcHVfcmVnX3J4cCA9IHsKKwkubW9kZSA9IEJOWDJfUlhQX0NQVV9NT0RFLAorCS5tb2RlX3ZhbHVlX2hhbHQgPSBCTlgyX1JYUF9DUFVfTU9ERV9TT0ZUX0hBTFQsCisJLm1vZGVfdmFsdWVfc3N0ZXAgPSBCTlgyX1JYUF9DUFVfTU9ERV9TVEVQX0VOQSwKKwkuc3RhdGUgPSBCTlgyX1JYUF9DUFVfU1RBVEUsCisJLnN0YXRlX3ZhbHVlX2NsZWFyID0gMHhmZmZmZmYsCisJLmdwcjAgPSBCTlgyX1JYUF9DUFVfUkVHX0ZJTEUsCisJLmV2bWFzayA9IEJOWDJfUlhQX0NQVV9FVkVOVF9NQVNLLAorCS5wYyA9IEJOWDJfUlhQX0NQVV9QUk9HUkFNX0NPVU5URVIsCisJLmluc3QgPSBCTlgyX1JYUF9DUFVfSU5TVFJVQ1RJT04sCisJLmJwID0gQk5YMl9SWFBfQ1BVX0hXX0JSRUFLUE9JTlQsCisJLnNwYWRfYmFzZSA9IEJOWDJfUlhQX1NDUkFUQ0gsCisJLm1pcHNfdmlld19iYXNlID0gMHg4MDAwMDAwLAorfTsKKwogc3RhdGljIHU4IGJueDJfcnYycF9wcm9jMVtdID0gewogCS8qIERhdGU6ICAgICAgICAxMi8wNy8yMDA3IDE1OjAyICovCiAJMHhkNSwgMHg1NiwgMHg0MSwgMHg2YiwgMHgxMywgMHg1MSwgMHgxMCwgMHg5ZSwgMHhkZCwgMHg2YywgMHhiYiwgMHhkYiwKQEAgLTM2NTEsNiArMzcwMCwyMiBAQAogCS5yb2RhdGEJCQkJPSBibngyX1RQQVRfYjA2RndSb2RhdGEsCiB9OwogCisvKiBJbml0aWFsaXplZCBWYWx1ZXMgZm9yIHRoZSBUWCBQYXRjaC11cCBQcm9jZXNzb3IuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9yZWcgY3B1X3JlZ190cGF0ID0geworCS5tb2RlID0gQk5YMl9UUEFUX0NQVV9NT0RFLAorCS5tb2RlX3ZhbHVlX2hhbHQgPSBCTlgyX1RQQVRfQ1BVX01PREVfU09GVF9IQUxULAorCS5tb2RlX3ZhbHVlX3NzdGVwID0gQk5YMl9UUEFUX0NQVV9NT0RFX1NURVBfRU5BLAorCS5zdGF0ZSA9IEJOWDJfVFBBVF9DUFVfU1RBVEUsCisJLnN0YXRlX3ZhbHVlX2NsZWFyID0gMHhmZmZmZmYsCisJLmdwcjAgPSBCTlgyX1RQQVRfQ1BVX1JFR19GSUxFLAorCS5ldm1hc2sgPSBCTlgyX1RQQVRfQ1BVX0VWRU5UX01BU0ssCisJLnBjID0gQk5YMl9UUEFUX0NQVV9QUk9HUkFNX0NPVU5URVIsCisJLmluc3QgPSBCTlgyX1RQQVRfQ1BVX0lOU1RSVUNUSU9OLAorCS5icCA9IEJOWDJfVFBBVF9DUFVfSFdfQlJFQUtQT0lOVCwKKwkuc3BhZF9iYXNlID0gQk5YMl9UUEFUX1NDUkFUQ0gsCisJLm1pcHNfdmlld19iYXNlID0gMHg4MDAwMDAwLAorfTsKKwogc3RhdGljIHU4IGJueDJfVFhQX2IwNkZ3VGV4dFtdID0gewogCTB4YWQsIDB4N2IsIDB4N2YsIDB4NzAsIDB4OWIsIDB4NzUsIDB4N2EsIDB4ZTcsIDB4ZTcsIDB4ZDUsIDB4MGYsIDB4NWIsCiAJMHhiMiwgMHg2NSwgMHg1OSwgMHgwZSwgMHg0YSwgMHg5MCwgMHg3NywgMHhiZCwgMHg4ZCwgMHg1ZSwgMHhmNCwgMHhjYSwKQEAgLTQ1MzEsMyArNDU5NiwxOCBAQAogCS5yb2RhdGEJCQkJPSBibngyX1RYUF9iMDZGd1JvZGF0YSwKIH07CiAKKy8qIEluaXRpYWxpemVkIFZhbHVlcyBmb3IgdGhlIFRYIFByb2Nlc3Nvci4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X3JlZyBjcHVfcmVnX3R4cCA9IHsKKwkubW9kZSA9IEJOWDJfVFhQX0NQVV9NT0RFLAorCS5tb2RlX3ZhbHVlX2hhbHQgPSBCTlgyX1RYUF9DUFVfTU9ERV9TT0ZUX0hBTFQsCisJLm1vZGVfdmFsdWVfc3N0ZXAgPSBCTlgyX1RYUF9DUFVfTU9ERV9TVEVQX0VOQSwKKwkuc3RhdGUgPSBCTlgyX1RYUF9DUFVfU1RBVEUsCisJLnN0YXRlX3ZhbHVlX2NsZWFyID0gMHhmZmZmZmYsCisJLmdwcjAgPSBCTlgyX1RYUF9DUFVfUkVHX0ZJTEUsCisJLmV2bWFzayA9IEJOWDJfVFhQX0NQVV9FVkVOVF9NQVNLLAorCS5wYyA9IEJOWDJfVFhQX0NQVV9QUk9HUkFNX0NPVU5URVIsCisJLmluc3QgPSBCTlgyX1RYUF9DUFVfSU5TVFJVQ1RJT04sCisJLmJwID0gQk5YMl9UWFBfQ1BVX0hXX0JSRUFLUE9JTlQsCisJLnNwYWRfYmFzZSA9IEJOWDJfVFhQX1NDUkFUQ0gsCisJLm1pcHNfdmlld19iYXNlID0gMHg4MDAwMDAwLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJfZncyLmggYi9kcml2ZXJzL25ldC9ibngyX2Z3Mi5oCmluZGV4IGVkMDUxNGMuLmZlNzUzYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJfZncyLmgKKysrIGIvZHJpdmVycy9uZXQvYm54Ml9mdzIuaApAQCAtMTUsODQyICsxNSw4NDggQEAKICAqLwogCiBzdGF0aWMgdTggYm54Ml9DT01fYjA5RndUZXh0W10gPSB7Ci0JMHhjZCwgMHg3YywgMHg3ZiwgMHg2YywgMHg1YywgMHhkNywgMHg5NSwgMHhkZSwgMHg3OSwgMHg2ZiwgMHgxZSwgMHhjOSwKLQkweGUxLCAweDg4LCAweGEyLCAweDFlLCAweGU5LCAweDMxLCAweDNkLCAweDhlLCAweGI5LCAweGM5LCAweDBjLCAweGU3LAotCTB4OTEsIDB4YTIsIDB4NGQsIDB4MjYsIDB4ZmIsIDB4Y2MsIDB4OGUsIDB4NmQsIDB4M2EsIDB4OTksIDB4YjUsIDB4YzYsCi0JMHgzMywgMHg5NCwgMHhhZCwgMHhjNCwgMHg4YywgMHg0MSwgMHgzYiwgMHhjYSwgMHhkNiwgMHgyOCwgMHhkYywgMHg4MCwKLQkweDFkLCAweDUyLCAweDhlLCAweGIzLCAweDc1LCAweGJiLCAweDhlLCAweDFiLCAweGE0LCAweDg5LCAweDExLCAweDQ0LAotCTB4OTMsIDB4MjEsIDB4YTUsIDB4NTUsIDB4ODIsIDB4MjEsIDB4NjcsIDB4MjIsIDB4ZDMsIDB4ZGMsIDB4ZmMsIDB4YjEsCi0JMHg2OCwgMHhjNiwgMHg0MywgMHg1MiwgMHg3MSwgMHhiNiwgMHgyMywgMHhkMSwgMHg0ZSwgMHhiMiwgMHg0MSwgMHgxNiwKLQkweGQ4LCAweGMwLCAweDJjLCAweDI1LCAweGNiLCAweGMyLCAweDIyLCAweDJkLCAweGRjLCAweDM0LCAweDI4LCAweDgyLAotCTB4ZWMsIDB4ZmUsIDB4MjEsIDB4YzgsIDB4Y2UsIDB4YzYsIDB4MjksIDB4ZDIsIDB4YzIsIDB4ZWQsIDB4MDYsIDB4OGQsCi0JMHgzNywgMHg0OCwgMHhmMiwgMHhmYSwgMHg3ZCwgMHhmNywgMHhkZSwgMHgzNywgMHgxYSwgMHg4ZCwgMHg2OCwgMHgyNywKLQkweGRkLCAweGZlLCAweDUzLCAweDAyLCAweDgzLCAweGZiLCAweGRlLCAweGZkLCAweDc5LCAweGVlLCAweGI5LCAweGU3LAotCTB4OWUsIDB4ZjMsIDB4OWQsIDB4NzMsIDB4ZWYsIDB4ZTMsIDB4M2QsIDB4MjIsIDB4MzEsIDB4MzEsIDB4N2YsIDB4ZmIsCi0JMHhmMSwgMHhjYiwgMHhmYywgMHhhYiwgMHgzZiwgMHg1ZSwgMHhiOCwgMHhlMywgMHg3ZCwgMHhmZSwgMHhmYiwgMHhmOCwKLQkweDZlLCAweDc3LCAweDg5LCAweGMzLCAweDM0LCAweDgyLCAweDVmLCAweDFjLCAweGJmLCAweDI5LCAweGYzLCAweGJjLAotCTB4ZDcsIDB4OWYsIDB4OGIsIDB4ZGYsIDB4OWQsIDB4OTYsIDB4YzgsIDB4ZmMsIDB4N2YsIDB4MTMsIDB4YjEsIDB4M2EsCi0JMHhjYSwgMHhhMiwgMHg3YiwgMHhkNCwgMHgwZiwgMHg4MiwgMHhiNywgMHhlOSwgMHhjOCwgMHhmYywgMHhkOSwgMHhmOCwKLQkweDI1LCAweGRmLCAweGI5LCAweGNhLCAweGZmLCAweGYzLCAweDVmLCAweDQ0LCAweDkzLCAweGFkLCAweGU2LCAweGNkLAotCTB4OWYsIDB4NDQsIDB4ZWQsIDB4NmMsIDB4ZmQsIDB4ODEsIDB4YmMsIDB4MjcsIDB4ZDEsIDB4NDgsIDB4NzYsIDB4NmQsCi0JMHg3NiwgMHhjMSwgMHgxMywgMHhjOSwgMHgzNSwgMHgyNywgMHg5MiwgMHgwNSwgMHhmOSwgMHg3NSwgMHg1MCwgMHg4YSwKLQkweDNiLCAweGMyLCAweGZjLCAweGRmLCAweGNiLCAweGZlLCAweGVhLCAweGFiLCAweGRmLCAweGJkLCAweDJiLCAweGY1LAotCTB4NjYsIDB4M2QsIDB4MjIsIDB4NTEsIDB4MzcsIDB4ZmIsIDB4OTYsIDB4YjgsIDB4NjMsIDB4MTIsIDB4MWQsIDB4NDYsCi0JMHg5YiwgMHgzZiwgMHgzYiwgMHg3OCwgMHhjOSwgMHg5NiwgMHhmZSwgMHhiMCwgMHgyZiwgMHg3NywgMHgzZSwgMHg5MiwKLQkweDk1LCAweGI5LCAweDYzLCAweDk1LCAweGUzLCAweDgxLCAweGVkLCAweDQ5LCAweGM5LCAweGM5LCAweDdhLCAweGUzLAotCTB4MGQsIDB4ZTksIDB4OWIsIDB4ZGUsIDB4Y2EsIDB4ZGMsIDB4MjUsIDB4NzgsIDB4OWYsIDB4M2IsIDB4ZDYsIDB4OGMsCi0JMHg0YSwgMHhiOSwgMHg1OSwgMHhlYSwgMHhiMywgMHgzZCwgMHgwZiwgMHhhOSwgMHg0NCwgMHhiYiwgMHhiMywgMHg4YiwKLQkweGQxLCAweDhiLCAweDFlLCAweGM3LCAweGZlLCAweDIxLCAweGM2LCAweGJlLCAweDQ1LCAweGJhLCAweGJjLCAweDIwLAotCTB4ZDgsIDB4YzIsIDB4ZDgsIDB4ZjcsIDB4MzUsIDB4N2YsIDB4MWQsIDB4M2MsIDB4ZTcsIDB4ZTgsIDB4NzEsIDB4ZWQsCi0JMHhlYywgMHg5MywgMHgxMSwgMHhhNiwgMHg1NiwgMHhmNiwgMHhmMiwgMHgwMywgMHgyMywgMHg0ZCwgMHhiZSwgMHg3YiwKLQkweDNkLCAweDlhLCAweDRlLCAweDM3LCAweDA2LCAweDNhLCAweGEzLCAweDRlLCAweDc2LCAweDJlLCAweGI2LCAweDhjLAotCTB4YjQsIDB4MmIsIDB4ZmIsIDB4ZTgsIDB4ZWQsIDB4NWIsIDB4YWEsIDB4ZGUsIDB4ZWIsIDB4YTYsIDB4ZGUsIDB4MTMsCi0JMHg1ZCwgMHhiYSwgMHhkZCwgMHhmOCwgMHhlYywgMHg1OCwgMHg5MywgMHg2OSwgMHg2NiwgMHg3NiwgMHg1NCwgMHhhNSwKLQkweGQ5LCAweGQ5LCAweGI0LCAweDRhLCAweDczLCAweGIzLCAweDIzLCAweDJhLCAweDlkLCAweDk5LCAweGY1LCAweDU0LAotCTB4ZmEsIDB4YjcsIDB4MGYsIDB4ZTgsIDB4ZmMsIDB4MzcsIDB4MWUsIDB4NDgsIDB4YWEsIDB4ZjQsIDB4NjcsIDB4MjYsCi0JMHg3ZCwgMHhkMywgMHhhNCwgMHgzZiwgMHgzNywgMHhlOSwgMHg1YiwgMHgyNiwgMHhmZCwgMHg5NSwgMHg0OSwgMHg2NSwKLQkweDU2LCAweGE3LCAweDhlLCAweGU5LCAweDI3LCAweDZhLCAweGRlLCAweGZiLCAweDRjLCAweGVhLCAweDlhLCAweDM0LAotCTB4NmUsIDB4ZDIsIDB4ODQsIDB4NDksIDB4ODcsIDB4MGQsIDB4NWQsIDB4NDksIDB4OTMsIDB4N2EsIDB4MjYsIDB4OWQsCi0JMHgzNCwgMHhlNSwgMHhiZSwgMHhhMSwgMHg3NywgMHgxYSwgMHhmNCwgMHg3ZSwgMHhhMSwgMHhjYiwgMHhjOCwgMHgyYSwKLQkweGU2LCAweDlkLCAweDk0LCAweDg1LCAweDhhLCAweDIzLCAweGU1LCAweDZhLCAweDQ0LCAweDBhLCAweDZhLCAweDBkLAotCTB4MWYsIDB4ZDksIDB4MmYsIDB4MzEsIDB4NDcsIDB4OTYsIDB4YjYsIDB4YTMsIDB4NzIsIDB4NTksIDB4ODksIDB4ZTgsCi0JMHgxYiwgMHhjMSwgMHg3NywgMHgwZiwgMHg0YSwgMHhjOSwgMHhjZSwgMHhiYSwgMHhmMiwgMHhjMiwgMHg3NiwgMHg1YywKLQkweDVlLCAweGRhLCAweDE2LCAweDZiLCAweDJlLCAweGQzLCAweDJiLCAweGY2LCAweGU5LCAweDc3LCAweDQ5LCAweGNlLAotCTB4YjUsIDB4MjQsIDB4YTIsIDB4NzgsIDB4OWEsIDB4OTQsIDB4N2MsIDB4NjUsIDB4MDgsIDB4ZWYsIDB4YTksIDB4ODQsCi0JMHhjOCwgMHhlOSwgMHhmZCwgMHg3YSwgMHhmZCwgMHhhMiwgMHgxMiwgMHg1OSwgMHhlNywgMHg5YSwgMHgzYywgMHgzZCwKLQkweDdiLCAweDcxLCAweDJkLCAweDIxLCAweGNlLCAweGVhLCAweDI0LCAweGM2LCAweGU4LCAweDkzLCAweGFlLCAweDc1LAotCTB4MTksIDB4OGUsIDB4YzgsIDB4NjgsIDB4ZTIsIDB4MzEsIDB4ZDQsIDB4OTgsIDB4NjksIDB4M2EsIDB4NzIsIDB4YjgsCi0JMHg2OSwgMHg4OSwgMHhlMywgMHg0NSwgMHgyMSwgMHgxZiwgMHg3ZCwgMHhmOCwgMHhiOSwgMHhmOCwgMHhjNSwgMHhmMSwKLQkweDRiLCAweGUwLCAweGY3LCAweDk3LCAweGU4LCAweDY3LCAweDU4LCAweDBhLCAweDRkLCAweGY2LCAweDg5LCAweDcxLAotCTB4YWIsIDB4MTgsIDB4YmYsIDB4OWEsIDB4NzIsIDB4ZTcsIDB4ODUsIDB4NzQsIDB4MjUsIDB4ZTQsIDB4YmIsIDB4MDcsCi0JMHg0OSwgMHg5NywgMHg0YiwgMHg3YSwgMHg0MCwgMHg1YiwgMHhkNCwgMHhjYSwgMHhhZiwgMHhjOSwgMHg5MywgMHgwNSwKLQkweDVmLCAweDkyLCAweGI2LCAweDE3LCAweDkzLCAweGEyLCAweDZiLCAweDI1LCAweDE3LCAweGM3LCAweDA3LCAweGE1LAotCTB4NzQsIDB4MTQsIDB4ZTUsIDB4NTUsIDB4YzksIDB4ZDksIDB4ZTgsIDB4YmYsIDB4ZTgsIDB4Y2EsIDB4YmMsIDB4MmUsCi0JMHg2MywgMHhkZSwgMHg1YiwgMHhkOCwgMHhhYiwgMHgyOSwgMHg5NywgMHg0MiwgMHhmYiwgMHg1MiwgMHhmNSwgMHhkYiwKLQkweDc4LCAweDY2LCAweDdmLCAweGZmLCAweGUwLCAweDY4LCAweGJhLCAweDdmLCAweDgxLCAweDc3LCAweGU2LCAweGZmLAotCTB4N2QsIDB4OWYsIDB4N2UsIDB4ZTcsIDB4MzMsIDB4ZWIsIDB4ODYsIDB4ZTMsIDB4ODYsIDB4ZjMsIDB4ZTUsIDB4ZjgsCi0JMHhlMywgMHg5OCwgMHgzMywgMHg2OSwgMHgwOCwgMHhlNywgMHgyYywgMHhhNSwgMHgyZSwgMHhkMCwgMHhkMiwgMHg1OCwKLQkweGViLCAweGIzLCAweDM2LCAweGQ2LCAweDI2LCAweGU1LCAweDY0LCAweGY1LCAweDFlLCAweGM5LCAweGZiLCAweDQxLAotCTB4YjAsIDB4ZTAsIDB4NGIsIDB4ZGMsIDB4OTYsIDB4NTEsIDB4YjcsIDB4ODAsIDB4MGEsIDB4YmIsIDB4NGQsIDB4YjEsCi0JMHgxYSwgMHgxNSwgMHg4OSwgMHhmNiwgMHg4MCwgMHgyZiwgMHgzZiwgMHg1OSwgMHg2MywgMHhkZiwgMHgwZSwgMHhmMiwKLQkweDg2LCAweDUwLCAweGJmLCAweGRmLCAweGRhLCAweDVjLCAweDAzLCAweGZkLCAweDU5LCAweGYyLCAweDI3LCAweDA4LAotCTB4OTYsIDB4ZmQsIDB4ZDEsIDB4YzQsIDB4MjIsIDB4YzYsIDB4M2MsIDB4ZGYsIDB4MWMsIDB4OWQsIDB4YmUsIDB4MjIsCi0JMHgyZSwgMHhmYSwgMHgxYywgMHg0NCwgMHgxZCwgMHhmMiwgMHg4YSwgMHg3ZCwgMHhiMSwgMHg0ZiwgMHhmNiwgMHhkNywKLQkweDg3LCAweGI2LCAweDcxLCAweDk0LCAweDkxLCAweGFlLCAweDIwLCAweGM4LCAweGZiLCAweDJlLCAweGRmLCAweDY1LAotCTB4MDcsIDB4ZmMsIDB4ZGIsIDB4MjEsIDB4ZmYsIDB4NjIsIDB4YzMsIDB4ZjIsIDB4NGEsIDB4OTMsIDB4NjMsIDB4ZWMsCi0JMHg0NSwgMHhmYiwgMHhjNCwgMHhmZiwgMHg4NywgMHhiNCwgMHgyNywgMHhkMCwgMHg3ZiwgMHgxYywgMHhlOSwgMHgzZSwKLQkweGFiLCAweDUxLCAweDBiLCAweDMwLCAweDdlLCAweDAyLCAweGNmLCAweDdiLCAweGNkLCAweGUzLCAweGIyLCAweDVhLAotCTB4ZmIsIDB4MTcsIDB4YjAsIDB4ZjYsIDB4NmUsIDB4MzYsIDB4MmUsIDB4MmYsIDB4NmUsIDB4MGYsIDB4NjMsIDB4MWUsCi0JMHgwOSwgMHhmOSwgMHgwNiwgMHg2NCwgMHg3MywgMHhlMCwgMHhjZSwgMHg3ZCwgMHg5MiwgMHg4NiwgMHg2YywgMHg3MiwKLQkweGNkLCAweGE3LCAweGQ2LCAweDFmLCAweDk1LCAweDYyLCAweDNjLCAweDM1LCAweDRlLCAweDNkLCAweDlhLCAweDlmLAotCTB4ZWEsIDB4YzEsIDB4N2MsIDB4YjUsIDB4YjYsIDB4MWEsIDB4NTksIDB4OGQsIDB4NGIsIDB4N2EsIDB4M2QsIDB4NzcsCi0JMHg4MywgMHg5ZSwgMHg1NywgMHhkZCwgMHg5MiwgMHg1OCwgMHg0OSwgMHhlYywgMHg3MywgMHgyMSwgMHg2ZiwgMHhjNiwKLQkweDRkLCAweGJkLCAweDk2LCAweDFjLCAweDViLCAweGY2LCAweDdhLCAweDlmLCAweDE1LCAweDU5LCAweDlmLCAweDk0LAotCTB4MTMsIDB4N2IsIDB4ZjAsIDB4YTQsIDB4MDEsIDB4OWUsIDB4ZDgsIDB4YWIsIDB4YTEsIDB4OWMsIDB4M2IsIDB4NzgsCi0JMHgxZiwgMHg0MiwgMHhkZCwgMHg3ZSwgMHhjYiwgMHg1OSwgMHhiZiwgMHg5ZSwgMHgxZiwgMHgxYiwgMHhjZCwgMHg1MSwKLQkweDdmLCAweDE3LCAweGZjLCAweGIwLCAweGQ3LCAweDA3LCAweDUxLCAweGU3LCAweDdhLCAweDdlLCAweDM0LCAweGMwLAotCTB4MGYsIDB4N2IsIDB4NWQsIDB4ZjMsIDB4YTIsIDB4MDEsIDB4NWUsIDB4ZDgsIDB4YTAsIDB4YjMsIDB4MDEsIDB4NWUsCi0JMHhkOCwgMHhhNywgMHgzNSwgMHgyZiwgMHgxYSwgMHg2NiwgMHg0ZiwgMHg5YywgMHg1MSwgMHhmYSwgMHgyOCwgMHgwNywKLQkweDVhLCAweDJkLCAweGQxLCAweDNhLCAweDI5LCAweDI3LCAweGQ0LCAweDNkLCAweDkxLCAweGVjLCAweDBjLCAweGY2LAotCTB4YjIsIDB4OGQsIDB4YjksIDB4M2EsIDB4MzIsIDB4MzMsIDB4NjUsIDB4YzksIDB4ODIsIDB4MmEsIDB4OWIsIDB4OTEsCi0JMHg3NCwgMHhmMywgMHg1ZCwgMHg2MCwgMHhkNCwgMHhjNCwgMHgzOCwgMHgyYywgMHg0MSwgMHhhOSwgMHgzYiwgMHhmYiwKLQkweDFkLCAweDdiLCAweGI3LCAweDEyLCAweDk1LCAweDgyLCAweDkzLCAweDE0LCAweDZmLCAweDk1LCAweGZkLCAweGNjLAotCTB4YjcsIDB4ZjUsIDB4MzMsIDB4OGYsIDB4N2UsIDB4NzYsIDB4YzEsIDB4MGYsIDB4MGIsIDB4YmEsIDB4OTMsIDB4NjUsCi0JMHg4ZiwgMHhhYSwgMHg3ZCwgMHg5ZCwgMHg1ZSwgMHg3NywgMHg2NCwgMHg3NCwgMHg5NSwgMHg3NSwgMHg0YSwgMHhmNiwKLQkweDg1LCAweGU2LCAweGFmLCAweDAyLCAweGRkLCAweGVmLCAweGEzLCAweDFjLCAweGQzLCAweGI1LCAweGIzLCAweGNiLAotCTB4ZjYsIDB4ZjksIDB4Y2QsIDB4NTMsIDB4ZjYsIDB4Y2IsIDB4NGQsIDB4ZjQsIDB4ZGIsIDB4MjQsIDB4YWYsIDB4YjEsCi0JMHgxNiwgMHg1NSwgMHhhYywgMHg0NSwgMHgxNSwgMHhlYiwgMHg2MiwgMHhmNiwgMHg2YywgMHg1ZCwgMHhlZCwgMHg5ZCwKLQkweGE0LCAweDU5LCAweDM3LCAweGQyLCAweGMwLCAweGI1LCAweDRiLCAweDYwLCAweGNkLCAweGI4LCAweDc2LCAweDYyLAotCTB4YmQsIDB4OWEsIDB4ZDksIDB4MjcsIDB4OTEsIDB4ZDMsIDB4MTEsIDB4YjUsIDB4NjYsIDB4MDMsIDB4ZWIsIDB4MWYsCi0JMHg2OCwgMHhhZCwgMHhkOSwgMHhjOCwgMHhkNCwgMHg4MSwgMHhkNiwgMHg5YSwgMHhkOSwgMHhhYiwgMHhiOSwgMHg1YiwKLQkweDZjLCAweDM5LCAweDI0LCAweDc2LCAweDE2LCAweGZjLCAweGM5LCAweDRjLCAweDgwLCAweDVmLCAweDExLCAweDk0LAotCTB4YzUsIDB4YzUsIDB4NTksIDB4Y2YsIDB4MjEsIDB4MmYsIDB4OTUsIDB4MjgsIDB4ODIsIDB4OGYsIDB4NjUsIDB4ZjAsCi0JMHhiMSwgMHgyOCwgMHgyNSwgMHhjOCwgMHhjYywgMHhjZiwgMHgyYywgMHhhZCwgMHhkZiwgMHg3ZSwgMHgyOSwgMHg0NiwKLQkweGI2LCAweGRmLCAweDkxLCAweDVmLCAweDIzLCAweGUwLCAweDk3LCAweGY3LCAweDNiLCAweGYwLCAweGNiLCAweGQ5LAotCTB4OTMsIDB4NWYsIDB4ZmQsIDB4NzYsIDB4MjcsIDB4YmYsIDB4MjIsIDB4ZTAsIDB4NTcsIDB4ZDcsIDB4ZWYsIDB4Y2MsCi0JMHgyZiwgMHhmMCwgMHg2MSwgMHg0ZiwgMHg1ZSwgMHg0NSwgMHhhMSwgMHhkNywgMHg0YSwgMHg5MiwgMHhjZiwgMHg4OCwKLQkweGU0LCAweDZiLCAweDVhLCAweDE3LCAweDk3LCAweDk0LCAweDRlLCAweGE2LCAweDJlLCAweDBhLCAweDc1LCAweDMyLAotCTB4ZjUsIDB4YjEsIDB4ZGEsIDB4MDcsIDB4NTYsIDB4YTEsIDB4OTIsIDB4ODQsIDB4YWUsIDB4NzQsIDB4OTAsIDB4M2UsCi0JMHg4ZiwgMHg3NCwgMHg5ZiwgMHgzNSwgMHg1NywgMHg4MywgMHg2OCwgMHhmNSwgMHgwNywgMHhlMiwgMHg0ZSwgMHg4NSwKLQkweGY2LCAweGIwLCAweDk0LCAweDcwLCAweGIxLCAweDM2LCAweGVlLCAweGZiLCAweGJhLCAweDQ0LCAweDg2LCAweDUyLAotCTB4ZTAsIDB4ZDMsIDB4Y2QsIDB4MjgsIDB4NGYsIDB4MjUsIDB4NzIsIDB4OTIsIDB4YjEsIDB4NDMsIDB4ZGMsIDB4OTIsCi0JMHhhZiwgMHhmNCwgMHhiZSwgMHg5NSwgMHg1MywgMHg0ZiwgMHhjYywgMHg2NywgMHhiYiwgMHgwYywgMHhmMiwgMHhiYSwKLQkweDY0LCAweDFlLCAweDdhLCAweDdlLCAweGM2LCAweGUzLCAweDc4LCAweGVjLCAweDNmLCAweDM5LCAweGNmLCAweDcxLAotCTB4MGIsIDB4Y2QsIDB4NTAsIDB4MjcsIDB4NGIsIDB4MGUsIDB4MzYsIDB4MWEsIDB4NjUsIDB4ZGMsIDB4OTcsIDB4ZDMsCi0JMHg1NiwgMHg0MSwgMHhkYiwgMHg0NiwgMHhmMSwgMHg5YSwgMHhlZCwgMHhmNiwgMHhhMywgMHg0NSwgMHgyNywgMHhmNiwKLQkweDZiLCAweDhlLCAweDcyLCAweDhkLCAweGIxLCAweDkzLCAweGQ4LCAweDczLCAweGU1LCAweDQ4LCAweGI4LCAweDNlLAotCTB4NGUsIDB4NzYsIDB4NWEsIDB4NjAsIDB4NzcsIDB4YTUsIDB4NWMsIDB4NjEsIDB4N2YsIDB4OWYsIDB4YjEsIDB4MjIsCi0JMHhlNywgMHhjMiwgMHhmZSwgMHhjOSwgMHg0NywgMHhmNiwgMHhhZCwgMHhmYiwgMHgyYiwgMHgzNywgMHhkZiwgMHgzMCwKLQkweDdiLCAweDVmLCAweGQ5LCAweDIyLCAweGY0LCAweDU3LCAweDZhLCAweGViLCAweGFmLCAweDY0LCAweDQ1LCAweDU2LAotCTB4ZTUsIDB4ODAsIDB4ZDIsIDB4ZjcsIDB4NDcsIDB4YzksIDB4YmYsIDB4NTMsIDB4MjgsIDB4YmIsIDB4MmMsIDB4MTEsCi0JMHhjYSwgMHg4YywgMHhkYSwgMHg2MywgMHhkYywgMHhlNywgMHg5ZiwgMHhlNSwgMHg3YywgMHhkYiwgMHg3OCwgMHgzYiwKLQkweDA3LCAweDFiLCAweGM2LCAweGZkLCAweDg1LCAweDM1LCAweDhlLCAweDMzLCAweGZmLCAweDJlLCAweDQzLCAweDkzLAotCTB4MjMsIDB4MzksIDB4ZjUsIDB4ZmUsIDB4YjUsIDB4N2QsIDB4YTEsIDB4N2UsIDB4YzQsIDB4N2UsIDB4MDYsIDB4NmQsCi0JMHhkZiwgMHg1MSwgMHg3MywgMHhiNCwgMHhiMywgMHg1OSwgMHhmMCwgMHhhNiwgMHg5ZCwgMHg0NiwgMHg4NSwgMHgwNSwKLQkweGIwLCAweGM2LCAweGExLCAweDhlLCAweDBhLCAweGQ3LCAweDhhLCAweGI4LCAweGM1LCAweGIxLCAweDk2LCAweDJhLAotCTB4N2QsIDB4YjAsIDB4N2YsIDB4NTEsIDB4NjMsIDB4NjMsIDB4ZDksIDB4N2UsIDB4MTksIDB4ZWQsIDB4OTksIDB4Y2YsCi0JMHhiNiwgMHg3ZCwgMHhiMCwgMHhiNywgMHg2YywgMHhiZiwgMHg2YywgMHhkYSwgMHg1ZiwgMHhiNSwgMHhiYiwgMHhkYywKLQkweDJiLCAweGI0LCAweGI5LCAweDE3LCAweDMyLCAweGMwLCAweDNhLCAweDZiLCAweGI2LCAweDE0LCAweDdjLCAweGUwLAotCTB4MTgsIDB4N2YsIDB4ZDgsIDB4ZWMsIDB4MGIsIDB4MmQsIDB4OWIsIDB4ZjcsIDB4M2EsIDB4OTYsIDB4ZjQsIDB4NzgsCi0JMHg3YiwgMHhjOSwgMHhlNiwgMHhjYiwgMHhiNiwgMHhiNiwgMHg2NSwgMHg1NywgMHg2NSwgMHg3MywgMHgwOSwgMHgzYSwKLQkweGVhLCAweDA0LCAweDY0LCAweDY1LCAweGI5LCAweDU1LCAweDhmLCAweDcyLCAweGE5LCAweDY0LCAweDE0LCAweGIyLAotCTB4OTksIDB4OWEsIDB4ZTYsIDB4MzQsIDB4MmYsIDB4MzQsIDB4ZGIsIDB4NjUsIDB4MzQsIDB4ZWMsIDB4MjMsIDB4YWEsCi0JMHhlNCwgMHg0MCwgMHg4ZiwgMHhiMywgMHhkYywgMHgzNiwgMHhjZSwgMHg3MiwgMHhkYiwgMHgzOCwgMHgyNywgMHgwZCwKLQkweDc2LCAweDYzLCAweDNmLCAweGRhLCAweDZlLCAweDVlLCAweGJlLCAweGM2LCAweDVlLCAweDczLCAweGNkLCAweDNlLAotCTB4OGEsIDB4M2QsIDB4YTksIDB4NjUsIDB4MDEsIDB4NTgsIDB4NGMsIDB4YWYsIDB4NDEsIDB4YzUsIDB4OTUsIDB4ZjIsCi0JMHhmNiwgMHhkOSwgMHg3MCwgMHhhZiwgMHg5NiwgMHg3YSwgMHg5MCwgMHhmZiwgMHg1MywgMHhlNCwgMHg4ZiwgMHhhZiwKLQkweGI4LCAweGIwLCAweDQzLCAweGM0LCAweDYyLCAweDdmLCAweDI1LCAweDViLCAweDE1LCAweGNhLCAweGM4LCAweDc3LAotCTB4NDAsIDB4NzcsIDB4ZGEsIDB4ZWYsIDB4YjYsIDB4YzgsIDB4ZDcsIDB4ZDQsIDB4ZjgsIDB4MTksIDB4NDksIDB4MjUsCi0JMHhjYiwgMHgzMiwgMHhlMSwgMHgzMywgMHgzZCwgMHg0OSwgMHg0NSwgMHg4ZCwgMHg3YSwgMHgxYSwgMHhlMywgMHg3YywKLQkweDA3LCAweGYyLCAweDI3LCAweGYyLCAweDY2LCAweGE1LCAweDQ3LCAweGVjLCAweGE5LCAweDlmLCAweDA2LCAweGI0LAotCTB4NzMsIDB4YTcsIDB4YjYsIDB4M2IsIDB4ZmIsIDB4MTEsIDB4MTksIDB4NWIsIDB4NTEsIDB4ZmQsIDB4YTAsIDB4OGYsCi0JMHhiNCwgMHg3ZiwgMHg0OSwgMHhmNSwgMHgxNywgMHhmNiwgMHg4NSwgMHg3OSwgMHg0ZSwgMHg3NSwgMHhmNiwgMHhlNywKLQkweGM4LCAweDY1LCAweGQ3LCAweDQ2LCAweDdmLCAweGI3LCAweDk4LCAweDM5LCAweGYyLCAweDE5LCAweDMyLCAweGUyLAotCTB4M2EsIDB4NDgsIDB4ZWYsIDB4YjMsIDB4NDMsIDB4OTksIDB4YjEsIDB4YTcsIDB4ZmUsIDB4M2EsIDB4YzgsIDB4Y2QsCi0JMHg3MSwgMHg2ZSwgMHhmZiwgMHhjYywgMHhlNCwgMHhmZCwgMHg0NywgMHgyMywgMHg2ZiwgMHg1MiwgMHhiMywgMHhiMywKLQkweGUwLCAweDU5LCAweDY2LCAweDE0LCAweGUzLCAweGYxLCAweDNkLCAweDA5LCAweGZjLCAweDIzLCAweDI1LCAweGUyLAotCTB4YWYsIDB4NjIsIDB4ZTUsIDB4MzcsIDB4NDEsIDB4Y2UsIDB4ZDEsIDB4OTgsIDB4NDksIDB4YWYsIDB4M2QsIDB4Y2IsCi0JMHgyZCwgMHgyOSwgMHhhMCwgMHhlZSwgMHg5MiwgMHhkMSwgMHgwNywgMHgzMywgMHhjZCwgMHhjYiwgMHg4YSwgMHg3ZiwKLQkweDJmLCAweGFhLCAweDdkLCAweDk0LCAweDNhLCAweDU1LCAweGEyLCAweGRlLCAweGQ4LCAweDhlLCAweDQ2LCAweGI4LAotCTB4YzcsIDB4NWYsIDB4ZjAsIDB4MzcsIDB4ODMsIDB4YTUsIDB4NmEsIDB4MmEsIDB4OTksIDB4YjQsIDB4NDcsIDB4YTUsCi0JMHg1OCwgMHgxYiwgMHgyZCwgMHhkOSwgMHg0OCwgMHg5ZiwgMHhhYywgMHgyNywgMHhlNCwgMHhjOSwgMHgwYSwgMHhmYiwKLQkweGI5LCAweDAxLCAweDc1LCAweGEwLCAweDg4LCAweDZjLCAweDZjLCAweGYyLCAweDIxLCAweGVhLCAweDFhLCAweDhlLAotCTB4ZjksIDB4OTYsIDB4YTUsIDB4YzcsIDB4YzQsIDB4MWMsIDB4YmMsIDB4MWQsIDB4ZWIsIDB4OTMsIDB4Y2QsIDB4MGIsCi0JMHg1NiwgMHhiMSwgMHhjZSwgMHhmNSwgMHg0NywgMHg3ZSwgMHhiMywgMHg1ZCwgMHgxZiwgMHhiNSwgMHhlYiwgMHhlZCwKLQkweDUwLCAweDVmLCAweGViLCAweGI1LCAweDczLCAweGIwLCAweGVmLCAweDZhLCAweDk1LCAweDY1LCAweGFiLCAweGJjLAotCTB4MjYsIDB4NzYsIDB4ZGUsIDB4ZWYsIDB4MzIsIDB4ZjIsIDB4NjgsIDB4YjksIDB4N2EsIDB4Y2UsIDB4NGYsIDB4NDYsCi0JMHhhOCwgMHgxMywgMHgyMywgMHhkZSwgMHgyOSwgMHhhYiwgMHg1YywgMHhiOSwgMHg1NSwgMHg3MiwgMHgwZSwgMHgzMSwKLQkweDFjLCAweDlmLCAweDI1LCAweDg4LCAweDY0LCAweDNkLCAweGRhLCAweDRkLCAweDI3LCAweDkyLCAweDRkLCAweDYzLAotCTB4YmYsIDB4YjEsIDB4Y2UsIDB4NjYsIDB4ZjAsIDB4NjUsIDB4OGMsIDB4MzMsIDB4NzIsIDB4MWEsIDB4ZmEsIDB4ZDksCi0JMHg3ZiwgMHgwZiwgMHhmYSwgMHhlMSwgMHhmOCwgMHhiZCwgMHg3OCwgMHg3NywgMHhjYywgMHhiZSwgMHhlYywgMHg0MiwKLQkweGJkLCAweDE0LCAweDM2LCAweGY3LCAweGM1LCAweDdlLCAweGU5LCAweDdmLCAweDA2LCAweDdhLCAweDM2LCAweGVjLAotCTB4OWIsIDB4NzUsIDB4MTIsIDB4YTYsIDB4NGUsIDB4OWYsIDB4YTksIDB4NzMsIDB4MzcsIDB4Y2EsIDB4M2YsIDB4ODYsCi0JMHg3YSwgMHgyOSwgMHg5ZiwgMHhkMCwgMHgxNiwgMHgyOSwgMHhmMiwgMHgwNiwgMHgzMSwgMHg0NywgMHhkNCwgMHg2ZCwKLQkweGRjLCAweDYwLCAweGRlLCAweGMzLCAweGY2LCAweDc3LCAweGI2LCAweGQ1LCAweGU1LCAweGZiLCAweGI1LCAweDdhLAotCTB4NzgsIDB4YmUsIDB4YTUsIDB4ODcsIDB4YzksIDB4YzMsIDB4MWMsIDB4ZjQsIDB4OWUsIDB4ZDgsIDB4ZDgsIDB4ZjcsCi0JMHg2ZSwgMHgyNCwgMHhjYiwgMHhmYywgMHg2OSwgMHgzYywgMHgzZiwgMHgxZiwgMHg5NCwgMHhhYiwgMHhkNCwgMHhmYiwKLQkweGMwLCAweGMxLCAweDc1LCAweGE1LCAweGZmLCAweGQwLCAweDZmLCAweGNlLCAweDlhLCAweGE5LCAweDg0LCAweGViLAotCTB4YzQsIDB4NzksIDB4ODUsIDB4YjgsIDB4NDQsIDB4ZjEsIDB4MGMsIDB4ZjQsIDB4MjYsIDB4YWYsIDB4ZDIsIDB4ZWIsCi0JMHgyYSwgMHg5OSwgMHg0MCwgMHg5ZSwgMHg2ZiwgMHhmMiwgMHg3YSwgMHhkYSwgMHhmMiwgMHg0MiwgMHg5ZCwgMHhmNCwKLQkweDA1LCAweGNjLCAweDZiLCAweDU4LCAweGFkLCAweDk5LCAweDlkLCAweDNkLCAweDYyLCAweGU1LCAweDE1LCAweDI2LAotCTB4MGEsIDB4ODIsIDB4ODIsIDB4ZDcsIDB4MjUsIDB4YzUsIDB4YzksIDB4YTcsIDB4YzEsIDB4MmIsIDB4OTYsIDB4OTUsCi0JMHhkYywgMHg4OCwgMHhjMiwgMHhmMSwgMHg3MywgMHgwZiwgMHgyYywgMHg3OCwgMHgyOSwgMHg4NSwgMHg0OSwgMHhmMiwKLQkweGQwLCAweDA5LCAweDVhLCAweDhmLCAweDRiLCAweDY5LCAweDAwLCAweGI0LCAweDdiLCAweGFiLCAweGU0LCAweGM1LAotCTB4NjYsIDB4NzAsIDB4MWEsIDB4ZjgsIDB4N2IsIDB4NmUsIDB4NzUsIDB4YzYsIDB4MWEsIDB4NTksIDB4YzUsIDB4YmEsCi0JMHgwZiwgMHg1OSwgMHhlMCwgMHg0YiwgMHg5ZiwgMHhlNCwgMHhjZiwgMHg5MSwgMHgyZiwgMHhhYywgMHhjMywgMHhmYywKLQkweDZlLCAweDk5LCAweDhiLCAweDc3LCAweGRhLCAweGVmLCAweDNmLCAweDNlLCAweDIwLCAweDMxLCAweGYyLCAweDAxLAotCTB4NzUsIDB4NTcsIDB4MjEsIDB4ZWMsIDB4MzEsIDB4OGQsIDB4ODksIDB4NDcsIDB4ZDYsIDB4MjksIDB4NDcsIDB4MzMsCi0JMHhkNiwgMHg0MiwgMHg4NSwgMHhiYSwgMHhiNSwgMHgxNywgMHgzNiwgMHg1YiwgMHhhZCwgMHgzZiwgMHhmYSwgMHg0NCwKLQkweGQ5LCAweDk5LCAweGNlLCAweDNlLCAweDNlLCAweDFkLCAweGQxLCAweDdkLCAweGIwLCAweDVkLCAweGQ4LCAweDQ3LAotCTB4M2IsIDB4M2YsIDB4ZjYsIDB4MjksIDB4ZGQsIDB4M2IsIDB4OTgsIDB4MWQsIDB4ZWMsIDB4ZTgsIDB4MzcsIDB4ZDEsCi0JMHhkNiwgMHgyZiwgMHhjYSwgMHhjZSwgMHhmYywgMHgzNCwgMHg0MiwgMHgyYywgMHhmOCwgMHg1MiwgMHgxNSwgMHg3YywKLQkweDU2LCAweDczLCAweDYyLCAweDE5LCAweGRiLCAweGNjLCAweDU4LCAweDg1LCAweGQ1LCAweDIwLCAweDk4LCAweGYzLAotCTB4NmQsIDB4ODksIDB4MGMsIDB4ODUsIDB4NzUsIDB4ZjUsIDB4YmMsIDB4NjYsIDB4MzAsIDB4YWYsIDB4M2MsIDB4ZTYsCi0JMHg2NSwgMHgwZiwgMHg3NSwgMHhkMiwgMHhmNCwgMHgzOSwgMHg0MywgMHhkMywgMHg2MCwgMHgxYiwgMHg0ZCwgMHhmMSwKLQkweDc3LCAweDk4LCAweDU3LCAweDdjLCAweDhmLCAweDc5LCAweDlkLCAweDFjLCAweGQ0LCAweDdkLCAweGM0LCAweGRiLAotCTB4ZmEsIDB4MTgsIDB4ZWEsIDB4ZTgsIDB4MDMsIDB4YjYsIDB4MjgsIDB4Y2UsIDB4ZjYsIDB4NDMsIDB4N2IsIDB4YjQsCi0JMHhmZiwgMHg0OSwgMHhhZiwgMHg2ZSwgMHhjZiwgMHgzNiwgMHhkZCwgMHhiMCwgMHgzNywgMHhjMywgMHg0NiwgMHg1NywKLQkweDNmLCAweGQ5LCAweGE2LCAweDVmLCAweDlmLCAweDg0LCAweDdlLCAweDZkLCAweDZmLCAweDEzLCAweGNhLCAweDY1LAotCTB4YmIsIDB4NWYsIDB4NDYsIDB4OWYsIDB4MmMsIDB4YzQsIDB4YWYsIDB4ZWYsIDB4NTIsIDB4YjgsIDB4ZTgsIDB4MmEsCi0JMHhhZSwgMHg4ZiwgMHgwMiwgMHgyMywgMHhmNSwgMHgwMSwgMHg5MywgMHhmNCwgMHhkMywgMHhmNywgMHgzMiwgMHgzOCwKLQkweDk1LCAweGJlLCAweDE4LCAweGIxLCAweGE5LCAweDc4LCAweDQwLCAweDc2LCAweGQwLCAweDc3LCAweGEzLCAweDg5LAotCTB4NjMsIDB4MjIsIDB4Y2EsIDB4ZjcsIDB4MjIsIDB4YTYsIDB4YTcsIDB4MWYsIDB4YzYsIDB4NzEsIDB4ZTgsIDB4ODcsCi0JMHg3MSwgMHhkZCwgMHhmOSwgMHg1ZSwgMHg2OCwgMHhmOSwgMHg2NSwgMHhjMywgMHhkMCwgMHg0NSwgMHhjNCwgMHhlNCwKLQkweGM0LCAweGFmLCAweGExLCAweGZkLCAweDZiLCAweGQ3LCAweGYxLCAweDdiLCAweGQxLCAweDM0LCAweGRjLCAweDQxLAotCTB4MTMsIDB4ZjQsIDB4MjQsIDB4ZmMsIDB4YzEsIDB4MjUsIDB4YzgsIDB4MjMsIDB4NzAsIDB4MzIsIDB4ZjQsIDB4ZjIsCi0JMHhkMywgMHhiMywgMHg1YiwgMHg2YiwgMHgyMiwgMHhjNSwgMHgyNiwgMHg2ZCwgMHhmNiwgMHhhNCwgMHhjMCwgMHg5NywKLQkweDAzLCAweDVkLCAweGVjLCAweDViLCAweGQ5LCAweDZkLCAweGU4LCAweGNiLCAweGZlLCAweDljLCAweDlkLCAweDFkLAotCTB4ODUsIDB4ZWYsIDB4ZWYsIDB4YzgsIDB4YTIsIDB4YTEsIDB4NmQsIDB4NWUsIDB4ZjksIDB4OGQsIDB4N2QsIDB4NDgsCi0JMHgxMywgMHg0YSwgMHhhZSwgMHhlNiwgMHg0MSwgMHgxZiwgMHg5ZiwgMHhlNywgMHg4ZCwgMHhiZiwgMHg3MCwgMHhhYywKLQkweGQ5LCAweDQ5LCAweGRiLCAweDBmLCAweDQxLCAweDliLCAweDA3LCAweDFhLCAweDkyLCAweGYyLCAweDJkLCAweGY4LAotCTB4MGIsIDB4ZGYsIDB4NTQsIDB4ZmIsIDB4MzIsIDB4ZDQsIDB4NjcsIDB4NGEsIDB4NTcsIDB4ZDQsIDB4NGEsIDB4ZjIsCi0JMHg3YywgMHhiMCwgMHg1NiwgMHhlNSwgMHhiZSwgMHgyNSwgMHhhZSwgMHhlOCwgMHg5MywgMHgxMiwgMHhkNiwgMHg2YiwKLQkweDY0LCAweDM1LCAweDk1LCAweGNjLCAweGQ5LCAweDYyLCAweGRkLCAweDcwLCAweDI3LCAweGU1LCAweGU5LCAweDA5LAotCTB4MTksIDB4MzksIDB4MjcsIDB4OTYsIDB4YjMsIDB4OGEsIDB4YmQsIDB4ZGUsIDB4MWYsIDB4NjIsIDB4M2UsIDB4Y2UsCi0JMHhlZiwgMHhkZCwgMHg5OCwgMHgxZiwgMHhmYSwgMHhhZSwgMHg4NiwgMHhmMywgMHhlYiwgMHg5MywgMHhlMiwgMHgzYSwKLQkweGU3LCAweGQ3LCAweDlhLCAweDViLCAweDljLCAweDUxLCAweDk4LCAweGE3LCAweDYwLCAweDQzLCAweDMwLCAweDQ3LAotCTB4ZDAsIDB4MzgsIDB4MGQsIDB4ZWMsIDB4ZmQsIDB4MWUsIDB4MzMsIDB4YTcsIDB4M2UsIDB4Y2MsIDB4MDksIDB4YjgsCi0JMHg2MSwgMHg5NSwgMHhlZCwgMHg0MSwgMHgxNywgMHg2OCwgMHgyZSwgMHhhMiwgMHg1ZSwgMHg3OSwgMHg5NSwgMHg2YiwKLQkweDBlLCAweDVhLCAweGIxLCAweGVlLCAweGM1LCAweDI2LCAweGQ3LCAweDllLCAweDczLCAweGQzLCAweDU4LCAweGMzLAotCTB4ZjEsIDB4MzgsIDB4M2YsIDB4Y2UsIDB4NzMsIDB4MWMsIDB4ZjMsIDB4NjIsIDB4MWQsIDB4YjYsIDB4ZWIsIDB4OTQsCi0JMHg5MSwgMHhmMSwgMHg3NywgMHg1OCwgMHg4ZiwgMHg3NywgMHg3NywgMHhhYywgMHg4NywgMHg5OCwgMHhmNSwgMHg4OCwKLQkweDRhLCAweGY3LCAweGJhLCAweGYyLCAweGQxLCAweDE1LCAweDBkLCAweGY0LCAweDZiLCAweDFjLCAweGQwLCAweGJmLAotCTB4YmMsIDB4MjYsIDB4OTMsIDB4MGMsIDB4NjAsIDB4ZDEsIDB4MzYsIDB4MjAsIDB4MmYsIDB4ZDMsIDB4MmQsIDB4YTMsCi0JMHhmZSwgMHgwNSwgMHhjOCwgMHg1NSwgMHgxMSwgMHhiMiwgMHg0MCwgMHgxZiwgMHhlNSwgMHhhNSwgMHhhYSwgMHg1ZSwKLQkweDhiLCAweDYyLCAweDMzLCAweDI2LCAweGY2LCAweDY5LCAweDhlLCAweDRmLCAweDdlLCAweDczLCAweDZlLCAweGFlLAotCTB4NWEsIDB4ODcsIDB4ZjYsIDB4NzUsIDB4NzksIDB4ZWMsIDB4YmEsIDB4NzUsIDB4ZDksIDB4ODQsIDB4MWUsIDB4YTUsCi0JMHgxZSwgMHgyMCwgMHgxNiwgMHhhMywgMHgyZSwgMHgwOCwgMHhlMywgMHgxMCwgMHg3ZiwgMHhlNCwgMHhlYSwgMHhmZCwKLQkweDE0LCAweGRhLCAweGM0LCAweGNiLCAweDJkLCAweGNjLCAweGZiLCAweGEyLCAweGYyLCAweDFkLCAweGY0LCAweDljLAotCTB4ZjIsIDB4MTksIDB4ZTgsIDB4YTUsIDB4YjUsIDB4MWIsIDB4YjAsIDB4NzcsIDB4NjgsIDB4MTMsIDB4MzcsIDB4ODMsCi0JMHg1YSwgMHhiNSwgMHg0YiwgMHhkMSwgMHg5MCwgMHhmNywgMHhmYiwgMHg4OSwgMHhkZiwgMHg0NCwgMHhkYiwgMHgwMSwKLQkweGE2LCAweGNjLCAweGE3LCAweDhkLCAweDQ0LCAweDU5LCAweDg2LCAweDZiLCAweDg5LCAweGY3LCAweDA2LCAweGRmLAotCTB4ZGIsIDB4ZjUsIDB4ZmUsIDB4N2YsIDB4NzIsIDB4ZjQsIDB4N2UsIDB4NjQsIDB4ZWMsIDB4NjksIDB4MmYsIDB4M2IsCi0JMHg3OCwgMHgzNSwgMHhlNiwgMHhlMCwgMHhjMCwgMHg1NywgMHgyZSwgMHhhZiwgMHgwNSwgMHhjMCwgMHg2MywgMHhlZiwKLQkweGMxLCAweGRlLCAweGNlLCAweDQ5LCAweGQxLCAweDg1LCAweDFkLCAweDFmLCAweGJmLCAweDE5LCAweDdjLCAweDlkLAotCTB4MTYsIDB4MTUsIDB4NjcsIDB4MTgsIDB4ZGYsIDB4OGYsIDB4ZTcsIDB4N2QsIDB4Y2EsIDB4YTcsIDB4MjksIDB4OGUsCi0JMHhiZiwgMHg1NywgMHg3MiwgMHg3MywgMHhjNCwgMHg0MywgMHg4ZiwgMHhjYiwgMHgzYywgMHg2YywgMHg2ZSwgMHg3MSwKLQkweDFjLCAweDM2LCAweDMxLCAweGNlLCAweDc3LCAweGU4LCAweDI1LCAweDZmLCAweDhjLCAweGIxLCAweDA5LCAweGZjLAotCTB4ZmQsIDB4MWIsIDB4MTMsIDB4OTMsIDB4MzksIDB4ODgsIDB4ZjcsIDB4N2QsIDB4YTgsIDB4ZjMsIDB4MzEsIDB4NTMsCi0JMHhhNywgMHg3ZiwgMHg4ZiwgMHgzYSwgMHg3OSwgMHhiYywgMHhkZiwgMHg4ZCwgMHgzYSwgMHgzMSwgMHg4YywgMHgwMSwKLQkweDRjLCAweDBiLCAweDViLCAweDY2LCAweDdiLCAweDFmLCAweDQ2LCAweGRlLCAweDVkLCAweGM4LCAweGJiLCAweDBiLAotCTB4NzksIDB4NzcsIDB4ZTAsIDB4YmQsIDB4NjAsIDB4NjIsIDB4MWQsIDB4NjEsIDB4OWIsIDB4N2UsIDB4YmMsIDB4N2YsCi0JMHgwMSwgMHhlNSwgMHhkMCwgMHgzMywgMHhlZSwgMHgyNSwgMHg5NCwgMHhkZiwgMHhhZCwgMHhkYSwgMHg1ZCwgMHg1YiwKLQkweDY3LCAweGIwLCAweGUzLCAweDdkLCAweGNiLCAweGQxLCAweGIxLCAweDExLCAweGU2LCAweDBkLCAweDliLCAweDY3LAotCTB4YjEsIDB4OTYsIDB4MmIsIDB4N2MsIDB4ZmYsIDB4YTEsIDB4NzksIDB4YmYsIDB4YjcsIDB4MjMsIDB4ZmYsIDB4NzEsCi0JMHhmMywgMHhkZSwgMHhiOSwgMHhhZSwgMHhiNywgMHg2MSwgMHg1ZCwgMHg1OSwgMHhmZSwgMHhkMSwgMHgwMywgMHg3YSwKLQkweDNkLCAweGM2LCAweDc0LCAweGZjLCAweGUxLCAweDFhLCAweDNjLCAweGEyLCAweDQ0LCAweDExLCAweGNmLCAweDNiLAotCTB4YzAsIDB4MjEsIDB4YzQsIDB4MjYsIDB4ZWQsIDB4YjgsIDB4ODQsIDB4MzQsIDB4YTksIDB4ZmEsIDB4NjYsIDB4OWMsCi0JMHhlNywgMHhmYSwgMHhjMywgMHg3MSwgMHhjYiwgMHg5MCwgMHg4MSwgMHhjMywgMHg2YiwgMHg2MSwgMHhmZSwgMHhjNSwKLQkweGZlLCAweDZiLCAweGU5LCAweGY5LCAweDlmLCAweDZkLCAweGY1LCAweGY2LCAweGNiLCAweGUxLCAweDVhLCAweDk4LAotCTB4N2YsIDB4ZTgsIDB4YzAsIDB4YjUsIDB4ZjUsIDB4NmUsIDB4M2UsIDB4NzAsIDB4NzUsIDB4YWUsIDB4YWQsIDB4NzgsCi0JMHgwOSwgMHg2OCwgMHhmYiwgMHg4YywgMHg3ZCwgMHgxNSwgMHgyYiwgMHhlNSwgMHhlYywgMHhjNSwgMHhlNiwgMHg4YywKLQkweGFkLCAweDY5LCAweDYyLCAweDFkLCAweDk0LCAweDM1LCAweDc3LCAweDA2LCAweDFjLCAweDI1LCAweGEzLCAweDM5LAotCTB4OWIsIDB4N2UsIDB4NGEsIDB4NjksIDB4ODMsIDB4Y2YsIDB4MzcsIDB4MjMsIDB4NmQsIDB4NmYsIDB4M2IsIDB4MGMsCi0JMHg3ZCwgMHg5YiwgMHhiMywgMHhmNSwgMHg5YywgMHgzYSwgMHhkYiwgMHg4NywgMHhmMiwgMHhlZCwgMHhjYiwgMHg1MiwKLQkweDBkLCAweDMyLCAweGU5LCAweGE1LCAweGM2LCAweDRiLCAweGYwLCAweDczLCAweDE3LCAweGZjLCAweGQ0LCAweDFjLAotCTB4NjUsIDB4MTYsIDB4YmUsIDB4ZjAsIDB4MjMsIDB4MjIsIDB4YjMsIDB4NTIsIDB4YWUsIDB4M2QsIDB4MDgsIDB4ZWMsCi0JMHgxZSwgMHhjOCwgMHg4NywgMHg2MCwgMHhmZiwgMHhmZiwgMHgyNSwgMHhmMCwgMHg0MywgMHgxZCwgMHhiYSwgMHhhMCwKLQkweGRlLCAweGY0LCAweGYwLCAweDFiLCAweDk2LCAweGFmLCAweDU3LCAweDEyLCAweGYyLCAweDNjLCAweDdjLCAweDkxLAotCTB4YzYsIDB4MWEsIDB4ZjUsIDB4NjUsIDB4ZGEsIDB4ZmQsIDB4OTAsIDB4YzgsIDB4ODAsIDB4MmQsIDB4ZTcsIDB4ZWYsCi0JMHhiMiwgMHg2NSwgMHgyMiwgMHgzOSwgMHg2MiwgMHhhNSwgMHgxMywgMHhmOCwgMHhiOSwgMHhkZCwgMHhmOCwgMHhjZCwKLQkweGMwLCAweGZmLCAweGRiLCAweDY4LCAweDMyLCAweDhlLCAweDEwLCAweDk3LCAweDNmLCAweGRmLCAweDRjLCAweGUyLAotCTB4MzcsIDB4MjQsIDB4ZmYsIDB4N2UsIDB4OTMsIDB4ZTMsIDB4OGYsIDB4OTgsIDB4MzQsIDB4ZjQsIDB4NGQsIDB4YmUsCi0JMHgwNSwgMHgxZCwgMHg3MSwgMHgyOSwgMHg1OCwgMHhhZSwgMHgzMiwgMHgyNiwgMHgxNCwgMHhkYSwgMHhhMSwgMHg2ZiwKLQkweDI5LCAweDNiLCAweGI0LCAweDU0LCAweDA5LCAweDhlLCAweDZiLCAweDFmLCAweGRjLCAweDgzLCAweGNmLCAweDhkLAotCTB4ZjcsIDB4ZTYsIDB4NWIsIDB4NTYsIDB4YTMsIDB4MzUsIDB4YzcsIDB4MWQsIDB4YWIsIDB4NjEsIDB4ZDYsIDB4YWQsCi0JMHhkMSwgMHg5YSwgMHgyMywgMHhjYSwgMHg5YiwgMHgxNywgMHgyMCwgMHgwYiwgMHhkNCwgMHhiZiwgMHhhMSwgMHhlZSwKLQkweGY1LCAweDBjLCAweDJlLCAweDBhLCAweGY1LCAweDJmLCAweGY2LCAweDcwLCAweDRkLCAweGEyLCAweGYxLCAweGVjLAotCTB4MmYsIDB4NjQsIDB4ZWQsIDB4MzQsIDB4ZjcsIDB4MTQsIDB4ZWQsIDB4ZTUsIDB4MzQsIDB4NjQsIDB4MzEsIDB4ZjUsCi0JMHg5NSwgMHgxMiwgMHg3MSwgMHhiNiwgMHhjNywgMHg5OCwgMHhjMCwgMHgyNSwgMHhmNCwgMHgzMSwgMHgzZiwgMHhhOCwKLQkweDY1LCAweGU3LCAweDEyLCAweGY2LCAweGY5LCAweGFjLCAweDM4LCAweGE3LCAweDNmLCAweGRmLCAweDI1LCAweGZkLAotCTB4YzcsIDB4NjUsIDB4ZDksIDB4ODcsIDB4M2YsIDB4NmIsIDB4OTcsIDB4ODIsIDB4ODgsIDB4ZTcsIDB4MjUsIDB4MGEsCi0JMHhjYSwgMHhkZiwgMHg1YSwgMHgwMywgMHg1ZCwgMHhkZiwgMHgwMywgMHgyNiwgMHgzZSwgMHhhZSwgMHhmYywgMHhiYSwKLQkweDYzLCAweDM1LCAweGQ2LCAweGVkLCAweGM2LCAweDdhLCAweGE0LCAweDRhLCAweDA1LCAweGFjLCAweGQ1LCAweDg5LAotCTB4ZjgsIDB4MDUsIDB4OTQsIDB4MDUsIDB4ODEsIDB4ZWQsIDB4MGQsIDB4NDgsIDB4YjEsIDB4MWUsIDB4M2UsIDB4NDMsCi0JMHhmNiwgMHgzNywgMHhmZiwgMHgwMSwgMHgzMiwgMHhjNiwgMHg2NywgMHhjMCwgMHhjNCwgMHg3NSwgMHg5NiwgMHg4ZCwKLQkweDIwLCAweDY1LCAweDM5LCAweGNiLCAweDNjLCAweGE1LCAweGViLCAweDhhLCAweDRkLCAweGQyLCAweDMxLCAweDJiLAotCTB4ODUsIDB4MWEsIDB4ZTcsIDB4MDQsIDB4YmIsIDB4NTgsIDB4YmYsIDB4MTQsIDB4OWMsIDB4YTgsIDB4NWUsIDB4MDAsCi0JMHhhZiwgMHgzOCwgMHg1ZSwgMHg1NiwgMHgxYSwgMHg1OCwgMHg4YiwgMHg3MiwgMHhmMywgMHg3MSwgMHg2MCwgMHhmYSwKLQkweGQ3LCAweDkxLCAweDJlLCAweDIyLCAweGJkLCAweDhjLCAweGY0LCAweDA5LCAweGE0LCAweDZmLCAweDIwLCAweGU1LAotCTB4YmMsIDB4MWUsIDB4OTcsIDB4NDYsIDB4M2QsIDB4ZDEsIDB4MmQsIDB4MzEsIDB4ZjYsIDB4ZjMsIDB4ZDksIDB4ZDYsCi0JMHg3YywgMHhjYSwgMHhkMCwgMHgwZCwgMHhiOSwgMHg1NiwgMHgzZSwgMHg5ZiwgMHg5OSwgMHg3ZSwgMHgwMiwgMHhlOSwKLQkweDQ3LCAweDkxLCAweGY3LCAweDNkLCAweDNjLCAweDRmLCAweDRiLCAweGExLCAweGYyLCAweDA0LCAweGVjLCAweDMwLAotCTB4YjEsIDB4ZWEsIDB4MjcsIDB4MzAsIDB4MmUsIDB4YzcsIDB4N2YsIDB4MTksIDB4NzQsIDB4YjAsIDB4MmMsIDB4OTAsCi0JMHg0ZiwgMHg2MiwgMHg5ZSwgMHhmOSwgMHhkYSwgMHg3MSwgMHg3OSwgMHhkOCwgMHhiZiwgMHg0NSwgMHhhNiwgMHgxZSwKLQkweDI2LCAweDNkLCAweGU0LCAweDBkLCAweGY1LCAweGRiLCAweDVlLCAweGJjLCAweDIxLCAweDVmLCAweDQyLCAweDdlLAotCTB4ZjQsIDB4NjEsIDB4NWUsIDB4ZDQsIDB4NTUsIDB4YzQsIDB4YzYsIDB4MTAsIDB4YzAsIDB4N2UsIDB4OGQsIDB4NzcsCi0JMHg0NiwgMHhjNiwgMHgwMiwgMHg3OSwgMHhjOCwgMHhjZiwgMHg0YSwgMHhlNCwgMHhmNCwgMHg5OCwgMHg5YiwgMHhiMSwKLQkweDI3LCAweGUwLCAweGY5LCAweGE0LCAweGYxLCAweDNiLCAweDBlLCAweGI5LCAweGY0LCAweDRlLCAweDhkLCAweGQ4LAotCTB4MjMsIDB4YTAsIDB4MDksIDB4NjUsIDB4MGQsIDB4OGUsIDB4NzMsIDB4MjksIDB4ZjgsIDB4OTMsIDB4ZWEsIDB4YWIsCi0JMHhmMCwgMHhkYiwgMHhiMywgMHg3MiwgMHhhNSwgMHhmOSwgMHgyYSwgMHhlNCwgMHg4MywgMHhmNCwgMHgwOCwgMHhlOCwKLQkweDljLCAweDk1LCAweDFmLCAweGQ3LCAweDVlLCAweDk2LCAweDkzLCAweGUwLCAweGZkLCAweDZiLCAweDQ4LCAweDk3LAotCTB4NmIsIDB4MjUsIDB4ZjAsIDB4OTUsIDB4ZjEsIDB4N2IsIDB4ZjYsIDB4MTEsIDB4NjAsIDB4Y2QsIDB4NDYsIDB4ZTEsCi0JMHg2ZiwgMHhkZCwgMHg5NiwgMHg1OCwgMHhjNCwgMHhmYSwgMHhjZSwgMHhiYiwgMHg4MSwgMHg2YywgMHhmOSwgMHgyNSwKLQkweGQ5LCAweDlhLCAweDQ2LCAweDliLCAweDNhLCAweGRiLCAweGY3LCAweGNhLCAweDYxLCAweDk1LCAweDUyLCAweGZlLAotCTB4ZmEsIDB4MzEsIDB4YzcsIDB4OTgsIDB4ZTIsIDB4ZjMsIDB4NzIsIDB4MzUsIDB4OTQsIDB4M2QsIDB4Y2EsIDB4NjEsCi0JMHhhNywgMHhmYywgMHg5MSwgMHhlZSwgMHgxZCwgMHhlYiwgMHg5YiwgMHg0ZCwgMHhkYSwgMHhkMSwgMHhiZCwgMHg2YywKLQkweDYyLCAweDI4LCAweDk3LCAweGI0LCAweDhiLCAweGVkLCAweGIyLCAweDI5LCAweGQyLCAweGE4LCAweDY5LCAweGZmLAotCTB4ZTYsIDB4MWIsIDB4ZGIsIDB4NGEsIDB4ZDYsIDB4YjEsIDB4M2UsIDB4YzQsIDB4ZDMsIDB4M2YsIDB4MTcsIDB4ZTAsCi0JMHgzNywgMHhmMCwgMHgyOSwgMHg4YywgMHgyZiwgMHg2YSwgMHhiZiwgMHhhYiwgMHgwZSwgMHg3YSwgMHhlMSwgMHg2YiwKLQkweDAwLCAweDJiLCAweDg4LCAweGQ0LCAweGViLCAweDlmLCAweDU3LCAweGZjLCAweGYyLCAweDRlLCAweDBmLCAweDRiLAotCTB4YWQsIDB4NGEsIDB4MWUsIDB4YTcsIDB4NWMsIDB4ZGIsIDB4NTYsIDB4ZmUsIDB4MGQsIDB4NzgsIDB4ZWIsIDB4NDEsCi0JMHg1NiwgMHhjMiwgMHhmMiwgMHgxNCwgMHhmYywgMHhhZiwgMHhlMywgMHhlMiwgMHg0ZSwgMHhjNSwgMHg2MCwgMHhiZiwKLQkweGY4LCAweDJjLCAweDMyLCAweDc3LCAweGFlLCAweDEzLCAweDBiLCAweDg2LCAweDM2LCAweGE2LCAweDFiLCAweDdlLAotCTB4N2UsIDB4MTcsIDB4NzQsIDB4NDEsIDB4MWYsIDB4ZmMsIDB4NzQsIDB4ZjgsIDB4YmYsIDB4OTAsIDB4YTcsIDB4M2YsCi0JMHgwMSwgMHg3ZSwgMHgzYSwgMHhhNSwgMHg3YywgMHg3NiwgMHhlZSwgMHhjMywgMHgwNywgMHg2NywgMHg0NywgMHgzNiwKLQkweDk5LCAweDdlLCAweDc4LCAweDM2LCAweDVkLCAweDY3LCAweDdhLCAweGQ0LCAweGM0LCAweGY1LCAweDFmLCAweDMxLAotCTB4ZjEsIDB4ZmUsIDB4ZjksIDB4ZDksIDB4ODMsIDB4MmEsIDB4NWQsIDB4OWMsIDB4MWQsIDB4NTcsIDB4ZTksIDB4ZTMsCi0JMHhiMywgMHg1NywgMHg2MywgMHgzMSwgMHgxNywgMHgyMCwgMHhhYiwgMHhhNCwgMHg0ZCwgMHg5YywgMHg2MiwgMHgyNiwKLQkweDIzLCAweDliLCAweDE1LCAweDFmLCAweDdlLCAweGY3LCAweDM0LCAweGYwLCAweGM3LCAweDM0LCAweGU0LCAweDM2LAotCTB4MGIsIDB4N2EsIDB4YTEsIDB4N2YsIDB4YjIsIDB4M2UsIDB4NTIsIDB4MzEsIDB4N2YsIDB4NjEsIDB4YmIsIDB4NmUsCi0JMHhjNiwgMHhkZCwgMHhiOCwgMHg2NiwgMHhjNiwgMHg3NywgMHhmNSwgMHhlOSwgMHhiYiwgMHhiNiwgMHhmZiwgMHhiMSwKLQkweDRmLCAweGM4LCAweDM4LCAweGVkLCAweGVlLCAweGFmLCAweGUxLCAweDZmLCAweGIzLCAweDdmLCAweGI2LCAweDY1LAotCTB4ZmYsIDB4MjIsIDB4YmIsIDB4NmIsIDB4MTIsIDB4OGQsIDB4NjYsIDB4ZmYsIDB4NWEsIDB4YTIsIDB4Y2YsIDB4MDYsCi0JMHhjMSwgMHg0ZiwgMHhmYywgMHhkNCwgMHg5MSwgMHg5MiwgMHg4MCwgMHg0ZiwgMHgxNiwgMHhmMiwgMHgzNywgMHg1OSwKLQkweDQ2LCAweDlkLCAweDM1LCAweGUxLCAweDVlLCAweDgxLCAweGNjLCAweGU1LCAweDhlLCAweDhhLCAweGJjLCAweDgyLAotCTB4YmMsIDB4YzYsIDB4MWEsIDB4ZjksIDB4ZmYsIDB4M2QsIDB4ZjAsIDB4ZGYsIDB4YWMsIDB4ODcsIDB4Y2EsIDB4NjMsCi0JMHgzZCwgMHhmOCwgMHg0OCwgMHg3MSwgMHhjYSwgMHhkYywgMHg4NCwgMHhkYiwgMHg4MywgMHhmNiwgMHhmNSwgMHg0ZCwKLQkweGI2LCAweDQ5LCAweDRkLCAweGYzLCAweDk4LCAweGVjLCAweDk1LCAweGNkLCAweDBiLCAweDRhLCAweDVmLCAweDc1LAotCTB4NjcsIDB4YzcsIDB4MTksIDB4NDMsIDB4OTIsIDB4OGQsIDB4YjUsIDB4ZGYsIDB4MDQsIDB4MGIsIDB4ZmUsIDB4MGUsCi0JMHg4MCwgMHg1YSwgMHgwYSwgMHg3MiwgMHg5ZiwgMHg5NSwgMHhmMywgMHhjMCwgMHg1OCwgMHhlNywgMHgyYiwgMHg2OSwKLQkweGFjLCAweDBkLCAweGYwLCAweDZkLCAweDgyLCAweDI0LCAweDdiLCAweGE4LCAweGY3LCAweDY2LCAweDM3LCAweDcxLAotCTB4NmMsIDB4OWUsIDB4ZTcsIDB4NDcsIDB4OTUsIDB4NjksIDB4ZDksIDB4NmQsIDB4Y2UsIDB4MDksIDB4YjEsIDB4NTIsCi0JMHgzZSwgMHhjMywgMHhmOSwgMHhiNCwgMHhmMywgMHg0MSwgMHhmZiwgMHgxNSwgMHhiMSwgMHgwNiwgMHg2NiwgMHg3ZSwKLQkweGVhLCAweDBmLCAweDc0LCAweDYyLCAweDNmLCAweGExLCAweGJkLCAweGJmLCAweDgzLCAweGJkLCAweDkxLCAweDgyLAotCTB4N2UsIDB4MTUsIDB4MDcsIDB4N2UsIDB4YTIsIDB4YTQsIDB4Y2YsIDB4M2EsIDB4NGUsIDB4YmUsIDB4ZTIsIDB4YzgsCi0JMHhjOCwgMHg1OSwgMHg2YywgMHhhOSwgMHhhYywgMHhlMSwgMHg0MywgMHgzMywgMHg5NCwgMHhiMSwgMHg1MCwgMHhlNywKLQkweDUxLCAweGE2LCAweDM4LCAweGZmLCAweDU0LCAweDY5LCAweDA3LCAweDhjLCAweDFlLCAweGNjLCAweDVlLCAweDk0LAotCTB4ODcsIDB4ZDcsIDB4ZjUsIDB4N2MsIDB4ZWQsIDB4MzMsIDB4YzIsIDB4YjMsIDB4MTMsIDB4YjksIDB4YjIsIDB4OTYsCi0JMHhmMiwgMHgyZiwgMHgwYiwgMHhmZCwgMHg1ZiwgMHgxZiwgMHgzMiwgMHg3MiwgMHhiMSwgMHgxYiwgMHhmYiwgMHg3OSwKLQkweDNhLCAweDY3LCAweDFmLCAweGVjLCAweGQxLCAweGI2LCAweGQ5LCAweGMxLCAweDFlLCAweDAwLCAweDRlLCAweGFjLAotCTB4YzAsIDB4NmYsIDB4ZjYsIDB4N2EsIDB4ZTQsIDB4NWYsIDB4MzgsIDB4NzgsIDB4MjYsIDB4NmUsIDB4NDQsIDB4OWUsCi0JMHhiMSwgMHhhMywgMHg3OCwgMHhkNiwgMHhmZCwgMHg5NSwgMHgzMSwgMHgwZiwgMHgxZCwgMHg1NywgMHhiNiwgMHhlNCwKLQkweDYxLCAweDU4LCAweDE1LCAweDQxLCAweGZmLCAweDIzLCAweDY2LCAweGFjLCAweDkxLCAweDMzLCAweDE3LCAweGQ0LAotCTB4N2UsIDB4NGQsIDB4YWYsIDB4NjcsIDB4ODEsIDB4YTMsIDB4MWMsIDB4ZTMsIDB4NmYsIDB4NTIsIDB4NGYsIDB4YzksCi0JMHgxZSwgMHhmZSwgMHg0YSwgMHgyOCwgMHhhMywgMHgxNywgMHg4MiwgMHgyZiwgMHg1NiwgMHhjMywgMHg5OCwgMHg0MCwKLQkweDQ2LCAweDQ2LCAweDU2LCAweGI0LCAweDRjLCAweDNkLCAweDllLCAweDgxLCAweGNlLCAweDg2LCAweDJjLCAweDhkLAotCTB4YWMsIDB4MDQsIDB4ZjIsIDB4MTMsIDB4ZGYsIDB4OTcsIDB4NTMsIDB4ZGIsIDB4N2IsIDB4YzksIDB4NTQsIDB4ZTcsCi0JMHg1ZiwgMHgxZiwgMHhlOCwgMHhlNCwgMHg2ZiwgMHg0OCwgMHg5NiwgMHhmZSwgMHgxNCwgMHg3NCwgMHg5ZSwgMHg3NSwKLQkweGYxLCAweDljLCAweDlhLCAweDliLCAweGE3LCAweDhmLCAweDcwLCAweDE2LCAweGJhLCAweDE0LCAweGJlLCAweGFjLAotCTB4N2QsIDB4NzYsIDB4NTgsIDB4ZDUsIDB4YjEsIDB4Y2YsIDB4YzIsIDB4YzYsIDB4NDEsIDB4YzYsIDB4NmMsIDB4ZjAsCi0JMHhiNSwgMHgwYywgMHg3YiwgMHg2NywgMHg5ZiwgMHhlZCwgMHg4MiwgMHg1ZCwgMHhlNCwgMHgxZSwgMHg5NSwgMHg0MSwKLQkweDFiLCAweGJhLCAweDgwLCAweGY1LCAweDFiLCAweGQ4LCAweDJiLCAweGY2LCAweGQ5LCAweDNlLCAweGE0LCAweDQ5LAotCTB4ZDUsIDB4NTcsIDB4YTMsIDB4ZTIsIDB4YTksIDB4ZjYsIDB4OGQsIDB4Y2EsIDB4YjgsIDB4NmEsIDB4ZDcsIDB4YTgsCi0JMHg0YywgMHgyMiwgMHg4NSwgMHg4ZSwgMHhjZiwgMHhmOCwgMHhkMiwgMHg3ZCwgMHgzNiwgMHgyMywgMHg3MiwgMHhkNiwKLQkweDkyLCAweGUyLCAweDVjLCAweDEwLCAweGM0LCAweDQwLCAweDdiLCAweGVjLCAweGVjLCAweDAxLCAweGI5LCAweGFjLAotCTB4ZDYsIDB4NzYsIDB4NGUsIDB4NDYsIDB4OWUsIDB4MjUsIDB4YmYsIDB4YjIsIDB4YTgsIDB4M2IsIDB4MjMsIDB4ZTksCi0JMHg2NywgMHg2NywgMHhjNCwgMHg3YiwgMHg5NiwgMHgzYywgMHg2MSwgMHhhYywgMHg3ZSwgMHg1NywgMHhjOSwgMHhkNCwKLQkweDI3LCAweGU0LCAweDI4LCAweGVjLCAweDRhLCAweDBmLCAweGY2LCAweDg0LCAweGUzLCAweDk2LCAweDY1LCAweDA1LAotCTB4NmIsIDB4MzIsIDB4ZWEsIDB4MWUsIDB4ODYsIDB4OWMsIDB4YzksIDB4ZGIsIDB4ZDYsIDB4NjcsIDB4NWQsIDB4YjYsCi0JMHg2MSwgMHhmZCwgMHg4MywgMHg5MCwgMHgxNywgMHgwZiwgMHhmNSwgMHg4ZiwgMHhjMiwgMHhjNiwgMHhiNCwgMHhmMywKLQkweDgyLCAweGZiLCAweDJjLCAweGY3LCAweDBlLCAweGYyLCAweDE3LCAweGVlLCAweGFmLCAweDBiLCAweGMxLCAweGM5LAotCTB4MmEsIDB4ZjcsIDB4MTgsIDB4ZjcsIDB4ZDcsIDB4ODcsIDB4ZTQsIDB4MTUsIDB4NmYsIDB4NGUsIDB4NzYsIDB4YmQsCi0JMHg4YywgMHg1YywgMHgwMCwgMHgwZSwgMHg3ZCwgMHhkOSwgMHg5YiwgMHg5MSwgMHg4YiwgMHg1ZSwgMHhiNCwgMHg4NywKLQkweDMxLCAweGI2LCAweDA2LCAweDcxLCAweDcyLCAweDZiLCAweGNkLCAweGUyLCAweGM2LCAweDFmLCAweDc5LCAweDQzLAotCTB4YjYsIDB4MmEsIDB4YjQsIDB4ZDUsIDB4YzEsIDB4YTEsIDB4MDUsIDB4YmYsIDB4NzQsIDB4MzMsIDB4NjgsIDB4MDMsCi0JMHgxZCwgMHg4YywgMHgxYiwgMHg1YywgMHhiNSwgMHgxMSwgMHg1ZCwgMHhkOCwgMHg0MywgMHgxYiwgMHhjYSwgMHg0NiwKLQkweGY0LCAweGQxLCAweDQ2LCAweGY4LCAweDA1LCAweGQ5LCAweDJmLCAweGJiLCAweDM1LCAweDFkLCAweGQzLCAweGNiLAotCTB4MDMsIDB4NDMsIDB4ZWQsIDB4ZDYsIDB4YjksIDB4ZmUsIDB4NzEsIDB4ZjksIDB4NTIsIDB4OTUsIDB4NzMsIDB4MmQsCi0JMHhkZiwgMHgxMCwgMHg5MywgMHg4OCwgMHgxYywgMHg1MSwgMHgzNiwgMHhiYiwgMHg1ZiwgMHhjZSwgMHg2ZiwgMHgwMiwKLQkweGYzLCAweDAyLCAweDdkLCAweGQ4LCAweGI3LCAweDMyLCAweDI2LCAweDY0LCAweGFiLCAweDE4LCAweDgzLCAweDBjLAotCTB4ZDAsIDB4NjYsIDB4ZmQsIDB4MTcsIDB4ZjAsIDB4ODgsIDB4NzEsIDB4MjAsIDB4Y2MsIDB4NzEsIDB4ODAsIDB4YjMsCi0JMHgwOSwgMHhkZiwgMHgyNywgMHg2NSwgMHhiNywgMHhjMiwgMHg2NywgMHg0YiwgMHgwYSwgMHhmMCwgMHgyNywgMHg3NywKLQkweDJiLCAweDRjLCAweDEzLCAweDQ4LCAweDRkLCAweDhjLCAweDVmLCAweDYxLCAweGY4LCAweGJmLCAweDU1LCAweGU1LAotCTB4M2QsIDB4ZGUsIDB4MmMsIDB4ZDYsIDB4ODUsIDB4NzIsIDB4OGIsIDB4NzQsIDB4NGIsIDB4OGYsIDB4NWIsIDB4ODAsCi0JMHhjZiwgMHg1ZiwgMHg5YywgMHhlYywgMHhhNSwgMHhmZCwgMHgwMiwgMHg2ZSwgMHg3MiwgMHg2NCwgMHg1ZSwgMHhkNSwKLQkweGNmLCAweGM4LCAweGM1LCAweGNhLCAweGNmLCAweGNjLCAweDNlLCAweDk5LCAweDM2LCAweGNmLCAweDJjLCAweDY3LAotCTB4YWMsIDB4ODcsIDB4M2UsIDB4Y2QsIDB4OTEsIDB4ZDksIDB4NjUsIDB4ZWYsIDB4MDMsIDB4YTYsIDB4NWMsIDB4YzUsCi0JMHg1YywgMHhhYywgMHgwZiwgMHgwMiwgMHg0MywgMHg4ZSwgMHhhYywgMHg3NCwgMHg2MywgMHgzZSwgMHhmNiwgMHg5MCwKLQkweDNlLCAweDkzLCAweDM5LCAweDI0LCAweDMzLCAweGZlLCAweDQxLCAweGQwLCAweDdmLCAweDQwLCAweGNhLCAweGYwLAotCTB4OTUsIDB4OTYsIDB4YjYsIDB4YTEsIDB4NTcsIDB4YzYsIDB4ZTEsIDB4MTMsIDB4YmIsIDB4YjcsIDB4MTMsIDB4YTMsCi0JMHhhOSwgMHg5OCwgMHg1MiwgMHhkOSwgMHgxZCwgMHg0NSwgMHhkYSwgMHg4MywgMHhmNCwgMHg2NiwgMHgyOSwgMHgzZiwKLQkweDczLCAweDQzLCAweDU0LCAweGY3LCAweGQ3LCAweGQ1LCAweGYxLCAweGZlLCAweDNjLCAweGM3LCAweDRlLCAweDI2LAotCTB4YWQsIDB4ZGYsIDB4ODYsIDB4MDcsIDB4ZGIsIDB4YjEsIDB4MjAsIDB4ZTksIDB4ZTgsIDB4MTIsIDB4ZWYsIDB4Y2IsCi0JMHg3ZCwgMHgzMiwgMHhiYSwgMHhlMiwgMHhjYSwgMHhkOCwgMHg0YSwgMHg0MiwgMHgwZSwgMHhhZSwgMHgwYywgMHhjYiwKLQkweGY4LCAweDRhLCAweDUyLCAweDZlLCAweDVkLCAweDA5LCAweGYxLCAweGQ4LCAweDgzLCAweGIzLCAweDY5LCAweDYzLAotCTB4MDcsIDB4YmMsIDB4ZGYsIDB4ZDEsIDB4MGUsIDB4ZGMsIDB4ZGEsIDB4ZDQsIDB4ZDgsIDB4YjQsIDB4YmMsIDB4NzEsCi0JMHgwMSwgMHgzNiwgMHg3YiwgMHgwNywgMHhmYiwgMHgzNywgMHgwMywgMHgyYywgMHhlNiwgMHg0MywgMHgyNywgMHg0ZCwKLQkweDQyLCAweDI3LCAweDhkLCAweDQzLCAweDI3LCAweDRkLCAweDUzLCAweDI3LCAweDAxLCAweGZmLCAweGJkLCAweDBhLAotCTB4ZmMsIDB4NzcsIDB4OGYsIDB4YmMsIDB4MDYsIDB4OWQsIDB4ZmIsIDB4ODIsIDB4ZGYsIDB4ZTMsIDB4Y2UsIDB4ODEsCi0JMHgxZiwgMHg4NywgMHhkNSwgMHhiOSwgMHg1NywgMHhlYSwgMHgyYiwgMHgzYiwgMHg5MCwgMHg4MSwgMHhjNiwgMHhkNywKLQkweDI0LCAweDNhLCAweDAwLCAweDdkLCAweDc1LCAweGZiLCAweDdhLCAweDhmLCAweDZjLCAweGM0LCAweDgzLCAweGUwLAotCTB4MzQsIDB4ZjYsIDB4ZmEsIDB4OTUsIDB4OGEsIDB4OTYsIDB4ZDksIDB4YmMsIDB4YzcsIDB4M2QsIDB4ZmYsIDB4MjAsCi0JMHhlNiwgMHgzZSwgMHg4OSwgMHhiYywgMHgxYywgMHg3NCwgMHg5OCwgMHg4ZSwgMHhhMywgMHgzNCwgMHg4ZSwgMHgyNiwKLQkweDY0LCAweGYzLCAweGUwLCAweDc0LCAweDQ3LCAweGJkLCAweDBjLCAweGRlLCAweGE5LCAweDMzLCAweGZlLCAweDM5LAotCTB4ZWEsIDB4NTMsIDB4N2YsIDB4YmIsIDB4YjIsIDB4MDUsIDB4OGMsIDB4NzgsIDB4ZTYsIDB4NjAsIDB4NmEsIDB4M2EsCi0JMHg2OSwgMHg1MywgMHhkZiwgMHgyNSwgMHhhNSwgMHhmZSwgMHhiNSwgMHg4NCwgMHg2YywgMHg1NCwgMHhiNSwgMHhjZCwKLQkweDU5LCAweDAwLCAweDI2LCAweDJjLCAweDAwLCAweGVmLCAweDZlLCAweDAwLCAweDY3LCAweDE1LCAweDlhLCAweDVhLAotCTB4ZGYsIDB4ZGIsIDB4ZDksIDB4MmUsIDB4NjEsIDB4N2YsIDB4ODUsIDB4NjYsIDB4MWUsIDB4ZjgsIDB4NTgsIDB4OWMsCi0JMHg3YywgMHg4NiwgMHg3NCwgMHg0ZSwgMHgyNCwgMHgyMiwgMHg3NiwgMHgwZiwgMHg2NCwgMHg4MSwgMHhmYiwgMHhlMywKLQkweDQxLCAweGQ4LCAweDUzLCAweDk2LCAweGQxLCAweDM2LCAweDUzLCAweGZmLCAweDNmLCAweDE1LCAweDI1LCAweGM2LAotCTB4MmIsIDB4ZjgsIDB4YzQsIDB4ZDMsIDB4NzksIDB4OTQsIDB4YTUsIDB4MTIsIDB4NjksIDB4ZTQsIDB4Y2YsIDB4NDksCi0JMHg1YSwgMHg5ZCwgMHgyMSwgMHgyZCwgMHg2MCwgMHhjZiwgMHg5NywgMHgxNSwgMHhjZCwgMHgxMSwgMHhjNiwgMHhhNCwKLQkweDI4LCAweDFlLCAweDUxLCAweDFkLCAweDJmLCAweDBjLCAweGYzLCAweDI3LCAweGRjLCAweDIyLCAweGQ2LCAweDM4LAotCTB4YzcsIDB4YmUsIDB4YWIsIDB4Y2MsIDB4NGIsIDB4YmIsIDB4NmMsIDB4NTcsIDB4ZjAsIDB4ZjksIDB4MmUsIDB4ZjIsCi0JMHg5MSwgMHgyNiwgMHhlMywgMHgyNywgMHg1MSwgMHg3OSwgMHhiOCwgMHhkOSwgMHgwNywgMHg5YSwgMHhiYSwgMHg3ZiwKLQkweDhiLCAweDNkLCAweDcxLCAweGRiLCAweGVjLCAweGM5LCAweDZlLCAweGMyLCAweDg1LCAweDllLCAweDU4LCAweDM0LAotCTB4N2EsIDB4YzUsIDB4OTksIDB4ZDIsIDB4MTgsIDB4ZjgsIDB4YTUsIDB4MmEsIDB4ZDYsIDB4YTgsIDB4OGEsIDB4MzUsCi0JMHhhYSwgMHg2MiwgMHg4ZCwgMHhhYSwgMHg1OCwgMHhhMywgMHgyYSwgMHhmNSwgMHgwNywgMHg3NSwgMHg0ZCwgMHhjZSwKLQkweDljLCAweDMxLCAweDUwLCAweDg3LCAweDNjLCAweDhmLCAweGI1LCAweDljLCAweDkzLCAweDZmLCAweDZmLCAweGNmLAotCTB4Y2EsIDB4NWYsIDB4NmMsIDB4MWYsIDB4MDEsIDB4YzYsIDB4OWUsIDB4YzEsIDB4YmEsIDB4ZTYsIDB4YjAsIDB4YWUsCi0JMHhkMywgMHg1OCwgMHhkMywgMHhhMywgMHg1OCwgMHhkMywgMHgyYywgMHhjZiwgMHhkOSwgMHhlNCwgMHhjYiwgMHg5NSwKLQkweGQ0LCAweDBiLCAweDI1LCAweDg1LCAweGVmLCAweGRmLCAweGMwLCAweGZhLCAweDRlLCAweDg5LCAweGI3LCAweDNlLAotCTB4MGMsIDB4OWQsIDB4NTAsIDB4MGEsIDB4ZTIsIDB4NWUsIDB4NzAsIDB4MDgsIDB4MTgsIDB4MWEsIDB4ZjMsIDB4MmYsCi0JMHhhNSwgMHgxYywgMHg0NSwgMHg4MywgMHhlNywgMHg3ZSwgMHgwYSwgMHgxMywgMHhiZiwgMHgyMSwgMHg5YiwgMHhhYSwKLQkweDUxLCAweDNkLCAweDZkLCAweGQ1LCAweGM2LCAweGE1LCAweDc4LCAweDBlLCAweGY1LCAweDRmLCAweGY3LCAweDgxLAotCTB4ZGYsIDB4YzQsIDB4NmYsIDB4YTksIDB4NTIsIDB4NTEsIDB4NzYsIDB4YTAsIDB4Y2YsIDB4NzIsIDB4YTAsIDB4ZjEsCi0JMHhiZCwgMHg1MiwgMHg4ZSwgMHhhNywgMHg5ZSwgMHhlNywgMHgzZSwgMHhiYiwgMHg3MSwgMHg5NSwgMHhmMSwgMHgwMSwKLQkweDFiLCAweGJjLCAweDIxLCAweGVkLCAweDc4LCAweDNlLCAweDk3LCAweDU1LCAweDMxLCAweGJlLCAweGJjLCAweDdmLAotCTB4YzAsIDB4ZWMsIDB4NjMsIDB4OGQsIDB4NDksIDB4ZWIsIDB4YzIsIDB4NzEsIDB4MzksIDB4ZGUsIDB4NjcsIDB4NjQsCi0JMHgxMSwgMHhiOCwgMHhjZiwgMHhjZSwgMHgxMiwgMHg1NywgMHg3OCwgMHgwOSwgMHg4YywgMHgxOSwgMHg1ZCwgMHgzOCwKLQkweGU3LCAweDQ2LCAweDE3LCAweGNmLCAweGIxLCAweDlmLCAweGE4LCAweGE0LCAweDU3LCAweGE5LCAweDk3LCAweGQ4LAotCTB4MGYsIDB4NzQsIDB4MzYsIDB4ZmEsIDB4OGUsIDB4YTgsIDB4MzMsIDB4YjUsIDB4MDksIDB4YjQsIDB4ZmIsIDB4MDMsCi0JMHg2MCwgMHg0NiwgMHhjZCwgMHhjMywgMHhmYywgMHg2OSwgMHg2ZCwgMHhjNywgMHhmMiwgMHg4ZCwgMHg3NiwgMHhjYywKLQkweDA2LCAweDFkLCAweDAyLCAweDNiLCAweDk3LCAweDZiLCAweDY4LCAweGZjLCAweDM1LCAweGEzLCAweGYwLCAweDk5LAotCTB4YzYsIDB4NjYsIDB4NDcsIDB4ZTUsIDB4NTAsIDB4YWYsIDB4YzQsIDB4M2MsIDB4MzUsIDB4OWYsIDB4ZjQsIDB4ZTksCi0JMHgxZCwgMHg2MiwgMHg1MiwgMHg4YywgMHhhMSwgMHhlMywgMHhjYywgMHg1NywgMHhlOSwgMHhjZSwgMHg2MCwgMHgyZSwKLQkweDM3LCAweGY3LCAweDg2LCAweDMxLCAweDQxLCAweDdiLCAweDU1LCAweDlmLCAweDQxLCAweGQ5LCAweGU3LCAweDdjLAotCTB4Y2MsIDB4NDcsIDB4ODYsIDB4MTgsIDB4NjUsIDB4YjQsIDB4MzEsIDB4ODcsIDB4N2IsIDB4OTUsIDB4OWQsIDB4OWQsCi0JMHg2MiwgMHhlYywgMHgwZiwgMHhiMiwgMHg0ZCwgMHhmZCwgMHgzMiwgMHg4NCwgMHhiZCwgMHhjMSwgMHg3NywgMHgxZCwKLQkweDUzLCAweGVlLCAweGYxLCAweDI4LCAweDJmLCAweDcxLCAweGM4LCAweDIwLCAweDc0LCAweDRkLCAweGZmLCAweGIwLAotCTB4ZDQsIDB4YjcsIDB4NTksIDB4MzYsIDB4YWMsIDB4ZjQsIDB4YjAsIDB4ODMsIDB4MzUsIDB4NTgsIDB4YWUsIDB4MDQsCi0JMHg4NywgMHhmMiwgMHg3ZSwgMHgwOSwgMHhkYSwgMHg5MiwgMHgzYywgMHgyNywgMHgzZiwgMHhjOCwgMHhmNywgMHg0OSwKLQkweGQwLCAweDQ2LCAweDFlLCAweGY3LCAweDk3LCAweGY0LCAweGI5LCAweGU2LCAweDdlLCAweDI5LCAweGQ2LCAweGE4LAotCTB4OGIsIDB4OTEsIDB4ZDYsIDB4ZjcsIDB4OWIsIDB4ZDgsIDB4NDYsIDB4NWMsIDB4NzIsIDB4NzMsIDB4OWMsIDB4M2IsCi0JMHg3ZCwgMHgxMywgMHhhMCwgMHhiYSwgMHhkNSwgMHg5NCwgMHg1ZiwgMHhiNywgMHg2NywgMHhhNSwgMHg0OCwgMHhmOSwKLQkweDg0LCAweDZlLCAweDJjLCAweDZlLCAweDRlLCAweGM5LCAweGYyLCAweDFhLCAweGUzLCAweDdkLCAweDNjLCAweDdiLAotCTB4OWUsIDB4ODgsIDB4NGEsIDB4N2YsIDB4MTAsIDB4NmMsIDB4ZjksIDB4YjQsIDB4ZjMsIDB4NzksIDB4MjksIDB4MjAsCi0JMHhkZiwgMHg1ZSwgMHg4NywgMHg5ZCwgMHgzZiwgMHhhYSwgMHg3OSwgMHhjNywgMHhmOSwgMHg5NiwgMHgzNywgMHhmZSwKLQkweDZmLCAweGY4LCAweGY4LCAweGY2LCAweDM4LCAweDc3LCAweDY2LCAweDBmLCAweDljLCAweGZiLCAweGVhLCAweDM5LAotCTB4YzgsIDB4NWYsIDB4MTUsIDB4YjIsIDB4MDksIDB4OWYsIDB4ZTksIDB4MmYsIDB4YWEsIDB4OTAsIDB4NGQsIDB4ZDgsCi0JMHg4YywgMHg2ZiwgMHg1NiwgMHgyMSwgMHg5YiwgMHhkOCwgMHgzYiwgMHgyZiwgMHhjMiwgMHhhNywgMHhkMSwgMHg5OCwKLQkweGUyLCAweDExLCAweDg1LCAweDI5LCAweDRlLCAweDU0LCAweDg5LCAweGY5LCAweDJmLCAweDQxLCAweDk2LCAweDI3LAotCTB4MjEsIDB4YzcsIDB4NDksIDB4YzgsIDB4YWYsIDB4MGYsIDB4ZDksIDB4MWQsIDB4ODcsIDB4M2MsIDB4N2IsIDB4OTAsCi0JMHhlNywgMHg2MSwgMHgxNSwgMHhmNywgMHg3OSwgMHg2MSwgMHgzYiwgMHgyYSwgMHhmNywgMHhjMywgMHg5ZiwgMHgzOCwKLQkweDUzLCAweDIzLCAweDFmLCAweDhmLCAweGNiLCAweGZmLCAweDgyLCAweDJmLCAweGIxLCAweGViLCAweGVmLCAweDgwLAotCTB4ODcsIDB4MzksIDB4NTksIDB4ZjQsIDB4YzgsIDB4YWYsIDB4OWMsIDB4YmQsIDB4ZTAsIDB4ZDEsIDB4ZDcsIDB4NzAsCi0JMHhlNSwgMHhjYywgMHgwNiwgMHg3ZCwgMHgwNCwgMHhlYSwgMHg4OCwgMHg1NywgMHhlNSwgMHg5YiwgMHg5NSwgMHgxZiwKLQkweGM4LCAweGI3LCAweDgwLCAweDA1LCAweDBhLCAweGYwLCAweDliLCAweDM3LCAweDllLCAweGExLCAweGNmLCAweGE4LAotCTB4NjgsIDB4ODQsIDB4ZGMsIDB4YzUsIDB4NjUsIDB4NzMsIDB4ZmIsIDB4NzYsIDB4NzksIDB4Y2EsIDB4YTUsIDB4MGMsCi0JMHhjNywgMHhhMSwgMHg1YiwgMHhmMCwgMHg3ZSwgMHg5MCwgMHg3YSwgMHgyOCwgMHg4MywgMHhmZCwgMHgwOSwgMHgzOSwKLQkweDg3LCAweDZlLCAweGE4LCAweGQ5LCAweDNjLCAweGMzLCAweDI4LCAweDA1LCAweDAzLCAweGQ0LCAweDU5LCAweDM1LAotCTB4Y2YsIDB4MWQsIDB4YjEsIDB4YzksIDB4OWIsIDB4NWIsIDB4MTgsIDB4NzMsIDB4ZmEsIDB4MGEsIDB4ODQsIDB4MTcsCi0JMHg3OSwgMHhiNCwgMHhkOSwgMHg0OCwgMHhlYiwgMHhkMCwgMHg4ZCwgMHhjZiwgMHg5MCwgMHg4ZiwgMHhmNCwgMHg2MSwKLQkweGYxLCAweGJjLCAweGMxLCAweGJkLCAweGY2LCAweDczLCAweDE1LCAweGNiLCAweDJkLCAweGNlLCAweGMxLCAweDVmLAotCTB4ZGYsIDB4MjAsIDB4OWYsIDB4MjAsIDB4MmIsIDB4Y2YsIDB4OTAsIDB4OGYsIDB4ZTQsIDB4OWQsIDB4ZTYsIDB4ZTMsCi0JMHg0MywgMHgxMiwgMHhmMiwgMHg5MCwgMHg2NSwgMHg5ZCwgMHgzYywgMHhmYywgMHg3NywgMHg5MCwgMHhjMywgMHgzOCwKLQkweGU2LCAweGZkLCAweGQ1LCAweDI4LCAweDYzLCAweDhlLCAweDM3LCAweDdhLCAweDVjLCAweGYzLCAweDU3LCAweGU1LAotCTB4YzksIDB4MjYsIDB4YzcsIDB4N2EsIDB4ZDksIDB4OGMsIDB4ZjksIDB4ZmQsIDB4ZTAsIDB4ZTEsIDB4MzgsIDB4NjksCi0JMHhlNywgMHg3YSwgMHhlZSwgMHg5MywgMHhjNiwgMHg5MCwgMHg2ZiwgMHhlMiwgMHgyYSwgMHhiZiwgMHhjZCwgMHhkZSwKLQkweGIwLCAweDFlLCAweDc4LCAweDBkLCAweGJkLCAweGYyLCAweGFkLCAweDJhLCAweDc4LCAweDBjLCAweGJmLCAweGU5LAotCTB4MWIsIDB4ZjAsIDB4OWIsIDB4MTgsIDB4NmIsIDB4ZDQsIDB4ZWIsIDB4MzIsIDB4NmQsIDB4ZTIsIDB4YTYsIDB4OWQsCi0JMHhmMSwgMHhkMiwgMHgyNCwgMHhkNiwgMHg4NSwgMHhiZSwgMHg3OSwgMHhhYSwgMHg3NCwgMHgxOSwgMHhiYSwgMHhlZiwKLQkweDQ1LCAweDlmLCAweDcxLCAweGM0LCAweDQwLCAweGJlLCAweGVmLCAweGI3LCAweDZiLCAweDM3LCAweDE1LCAweDYzLAotCTB4OTYsIDB4ODcsIDB4YTAsIDB4MGYsIDB4MWYsIDB4ODYsIDB4M2UsIDB4ZmMsIDB4YzgsIDB4NzUsIDB4ZjcsIDB4N2IsCi0JMHgyOCwgMHg2NywgMHg0ZiwgMHhjZiwgMHgyZSwgMHhhYywgMHg4ZCwgMHg5NiwgMHgyMiwgMHhmNiwgMHhiMCwgMHhjYywKLQkweDVkLCAweGEzLCAweDFiLCAweDE5LCAweDRmLCAweDRjLCAweDlhLCAweDc4LCAweDY4LCAweDNiLCAweGZlLCAweDBjLAotCTB4NjMsIDB4OWUsIDB4OTQsIDB4ZTcsIDB4NDAsIDB4MmUsIDB4ZmEsIDB4YTUsIDB4YmUsIDB4ODgsIDB4M2EsIDB4OTcsCi0JMHhlNiwgMHhiYSwgMHhlZSwgMHg4NSwgMHgyZCwgMHhiZiwgMHg2ZCwgMHhmNiwgMHgzMCwgMHg2NSwgMHhhYiwgMHhmMywKLQkweGRjLCAweDk4LCAweGU3LCAweGQwLCAweGZkLCAweGYwLCAweDEzLCAweGI4LCAweDU3LCAweDUzLCAweGM5LCAweDFjLAotCTB4ZjYsIDB4NzMsIDB4NzksIDB4OWIsIDB4ZmEsIDB4OWYsIDB4ZDgsIDB4YjAsIDB4OWIsIDB4ZjEsIDB4YmMsIDB4ZjksCi0JMHg5ZSwgMHgyYywgMHg2MywgMHgwMSwgMHhmZCwgMHhmMCwgMHgzZiwgMHg3ZSwgMHgyNCwgMHg1YiwgMHg2YiwgMHg3ZiwKLQkweGQzLCAweGFiLCAweGY3LCAweDkxLCAweGJlLCAweDZmLCAweDY2LCAweDlmLCAweGViLCAweDhjLCAweDYzLCAweGQyLAotCTB4YTYsIDB4NGEsIDB4YjQsIDB4MTcsIDB4NzYsIDB4ZjEsIDB4ZDYsIDB4NjcsIDB4ZmIsIDB4OTUsIDB4ZGQsIDB4YmIsCi0JMHhjZiwgMHg3NywgMHg2NCwgMHgyNywgMHhjZSwgMHhmZSwgMHg3ZSwgMHgyNCwgMHgzZiwgMHg1ZSwgMHgxYiwgMHg4OSwKLQkweDMxLCAweGZlLCAweGI5LCAweDBjLCAweDNlLCAweGVmLCAweDJhLCAweGRkLCAweGY1LCAweDIwLCAweGVhLCAweDY0LAotCTB4ZTUsIDB4ZjUsIDB4MzUsIDB4ZGEsIDB4ZDYsIDB4YjQsIDB4N2IsIDB4NDYsIDB4MjYsIDB4MTIsIDB4NjcsIDB4YzAsCi0JMHhjYiwgMHg1MywgMHg2OCwgMHgwMywgMHg3ZiwgMHgzOCwgMHg5OCwgMHg0MSwgMHhkZSwgMHhjYiwgMHhmNCwgMHhiOSwKLQkweDJkLCAweDNlLCAweDRmLCAweGI4LCAweDVmLCAweDA0LCAweDRlLCAweGNlLCAweGI5LCAweDY5LCAweGI3LCAweGQ3LAotCTB4YmEsIDB4YTQsIDB4Y2UsIDB4OWQsIDB4MjIsIDB4MWUsIDB4ZmIsIDB4MWEsIDB4OTIsIDB4YzIsIDB4YTYsIDB4YTYsCi0JMHhmMSwgMHhjYSwgMHgyNiwgMHhjNywgMHhlMCwgMHg1YywgMHg0OCwgMHhlMywgMHhkZiwgMHhmMCwgMHg1YywgMHgwMSwKLQkweGY0LCAweGRmLCAweDA2LCAweDlmLCAweDg0LCAweDk4LCAweGU1LCAweDEyLCAweDY0LCAweDY2LCAweDA4LCAweGZhLAotCTB4ODEsIDB4YmUsIDB4MGEsIDB4Y2YsIDB4MmMsIDB4YzksIDB4YjMsIDB4Y2YsIDB4MDMsIDB4ZWYsIDB4YzcsIDB4MjEsCi0JMHhhYiwgMHhjOCwgMHhkZiwgMHhiYywgMHhlYSwgMHgxZiwgMHgyZSwgMHhiNywgMHg3MCwgMHgzZCwgMHg2ZCwgMHhlMywKLQkweDJjLCAweDZjLCAweGU0LCAweGJiLCAweDE0LCAweDNkLCAweDQ3LCAweDdjLCAweGY4LCAweGRhLCAweGNmLCAweDUwLAotCTB4YmUsIDB4MGUsIDB4NGEsIDB4MzEsIDB4NGUsIDB4NWMsIDB4NDksIDB4N2QsIDB4YjIsIDB4OWIsIDB4ODgsIDB4MDIsCi0JMHhkNywgMHg0NiwgMHg2ZiwgMHhlNywgMHhiZSwgMHgzYiwgMHgyMiwgMHhmNywgMHg3YiwgMHgwZiwgMHhjYSwgMHgwNywKLQkweGJkLCAweDQ5LCAweDk5LCAweGYxLCAweGVlLCAweDkxLCAweGMzLCAweDVlLCAweDVlLCAweGVlLCAweGYzLCAweDYwLAotCTB4OWIsIDB4MTQsIDB4M2UsIDB4ZWYsIDB4YzEsIDB4M2MsIDB4MzgsIDB4ZjYsIDB4OTAsIDB4MzksIDB4ZGYsIDB4ZDMsCi0JMHhmOCwgMHhmNCwgMHhlYiwgMHhkYiwgMHg1YSwgMHgyNywgMHhlNSwgMHhkNywgMHhiMiwgMHgzMSwgMHhkYSwgMHhlNCwKLQkweDIzLCAweGZlLCAweDhjLCAweGIxLCAweGM5LCAweGYwLCAweGY5LCAweDU1LCAweGJkLCAweDE5LCAweDY1LCAweGJiLAotCTB4Y2IsIDB4OWIsIDB4NzMsIDB4NDgsIDB4NjEsIDB4YzcsIDB4MzcsIDB4YTcsIDB4ODEsIDB4ZmIsIDB4ZTksIDB4NGIsCi0JMHhlNSwgMHhmMCwgMHg3ZSwgMHgwZiwgMHhkZSwgMHgzZiwgMHg4NCwgMHhmNCwgMHgwOCwgMHg1MiwgMHg3NSwgMHhhZSwKLQkweDE5LCAweGQzLCAweGIxLCAweGRiLCAweGQ2LCAweGI5LCAweDFkLCAweGU0LCAweGViLCAweGU4LCAweGVjLCAweDQyLAotCTB4MmQsIDB4OGMsIDB4ODEsIDB4MWYsIDB4OTIsIDB4YzcsIDB4N2QsIDB4N2QsIDB4OTYsIDB4N2UsIDB4MTgsIDB4N2UsCi0JMHg3NCwgMHgwYywgMHhmOCwgMHhlOSwgMHg0MywgMHhjZiwgMHg0ZSwgMHg0OSwgMHhlNCwgMHhlZSwgMHg0MywgMHg2MiwKLQkweGRmLCAweDZkLCAweGM5LCAweGMyLCAweDI0LCAweGU4LCAweDliLCAweDFjLCAweGM1LCAweDNjLCAweDg2LCAweGU1LAotCTB4YzQsIDB4YjYsIDB4ZjIsIDB4NTEsIDB4MGQsIDB4NWUsIDB4YTQsIDB4MWUsIDB4MDcsIDB4ZDYsIDB4ZGQsIDB4MGUsCi0JMHg3MSwgMHg2MywgMHgzNywgMHg3MCwgMHgwNSwgMHhlMywgMHg3YiwgMHg0OSwgMHg4NSwgMHg3NywgMHhlZCwgMHgxYiwKLQkweGI5LCAweGJlLCAweDdkLCAweDkyLCAweGJmLCAweDkxLCAweGZjLCAweDYzLCAweDFlLCAweGZjLCAweDlkLCAweDFiLAotCTB4YjUsIDB4ZGQsIDB4NDgsIDB4YWYsIDB4NzAsIDB4NmQsIDB4N2EsIDB4NGMsIDB4ZWMsIDB4OTYsIDB4MzYsIDB4ODAsCi0JMHhlOSwgMHg2YSwgMHhhYywgMHg4NSwgMHgwYiwgMHgxOSwgMHg5ZiwgMHhiMSwgMHg2ZSwgMHg4ZiwgMHg1ZCwgMHhiZCwKLQkweDY3LCAweDE2LCAweGNhLCAweDczLCAweDc4LCAweDdmLCAweGMwLCAweDUzLCAweDM4LCAweGU3LCAweDQ0LCAweGY1LAotCTB4MDUsIDB4Y2MsIDB4ODEsIDB4MzYsIDB4M2QsIDB4MjIsIDB4ZGQsIDB4ZDAsIDB4NmIsIDB4NWIsIDB4MWUsIDB4ZjcsCi0JMHgxZSwgMHg2ZCwgMHhjZSwgMHgxMSwgMHhjYywgMHg4NywgMHgzNiwgMHg5ZSwgMHhiNiwgMHhmZSwgMHhkZSwgMHg3ZSwKLQkweGU5LCAweGE3LCAweDlkLCAweDY3LCAweGZkLCAweDI0LCAweGNhLCAweDU4LCAweDk3LCAweDc5LCAweDk3LCAweDUxLAotCTB4OWYsIDB4YjEsIDB4MjksIDB4ZjgsIDB4M2UsIDB4ZDUsIDB4NDUsIDB4ZTgsIDB4MTksIDB4MGYsIDB4ZTksIDB4ZTMsCi0JMHg0OCwgMHhjNywgMHg5MSwgMHgzZSwgMHg4MSwgMHg1NCwgMHhjNywgMHhiMSwgMHgzNiwgMHg5ZiwgMHg2MSwgMHgyYywKLQkweDQ5LCAweGM1LCAweDY4LCAweDE0LCAweGJlLCAweGEwLCAweDRkLCAweDljLCAweGYzLCAweGE5LCAweDI3LCAweDhmLAotCTB4OGIsIDB4M2QsIDB4NzUsIDB4MWIsIDB4ZjIsIDB4ZTgsIDB4NmIsIDB4NjMsIDB4ZDQsIDB4ZjcsIDB4N2YsIDB4ZGUsCi0JMHhjNCwgMHg4OCwgMHg1YSwgMHg3MSwgMHgyNSwgMHg2MywgMHgwNywgMHhkNiwgMHhkMCwgMHgxNywgMHhmYiwgMHhhMSwKLQkweDJmLCAweGZiLCAweDBiLCAweDc5LCAweGY4LCAweDlhLCAweGQ4LCAweDVjLCAweDJiLCAweGRlLCAweDM0LCAweDVkLAotCTB4NTAsIDB4M2EsIDB4OTYsIDB4N2MsIDB4ODEsIDB4N2UsIDB4NzUsIDB4MzMsIDB4ZjIsIDB4YjUsIDB4ZWQsIDB4MDEsCi0JMHhlOCwgMHhhZiwgMHgzOCwgMHhiMSwgMHgyNiwgMHhmMCwgMHhiNiwgMHhjNiwgMHg2ZSwgMHg4YiwgMHg5OCwgMHg5YiwKLQkweGI2LCAweGVmLCAweDcxLCAweGY5LCAweGJiLCAweGI1LCAweDYxLCAweGY5LCAweDcxLCAweDI1LCAweDIxLCAweGFmLAotCTB4NTcsIDB4ODIsIDB4ZTAsIDB4YTIsIDB4OWYsIDB4ZjYsIDB4ZWYsIDB4MTMsIDB4YjksIDB4YmQsIDB4NWIsIDB4OWYsCi0JMHhmZCwgMHhhMywgMHg4NiwgMHgzZSwgMHhhZiwgMHgyZiwgMHhhYiwgMHgzMywgMHg3YiwgMHhkNCwgMHg4MywgMHg1ZSwKLQkweDc5LCAweGJkLCAweGY5LCAweGY3LCAweGUwLCAweGFmLCAweGVlLCAweGIzLCAweGIzLCAweGVkLCAweGFlLCAweDZlLAotCTB4Y2IsIDB4MzMsIDB4ZmYsIDB4YzQsIDB4OGUsIDB4YTQsIDB4Y2QsIDB4ZGQsIDB4ODEsIDB4MzQsIDB4ZGEsIDB4YTYsCi0JMHhjNywgMHgzNywgMHg1YSwgMHhlZCwgMHhkOSwgMHgzNiwgMHhhMywgMHhlYywgMHg0MCwgMHg3MSwgMHg3MywgMHg1MCwKLQkweDFhLCAweDdmLCAweGNhLCAweGZkLCAweDAxLCAweGJmLCAweDUzLCAweDlkLCAweGNiLCAweDMwLCAweGU1LCAweDM5LAotCTB4MDcsIDB4ZWIsIDB4MjQsIDB4NGQsIDB4ZjksIDB4ODgsIDB4MjksIDB4ZjcsIDB4NTQsIDB4NmMsIDB4NzAsIDB4YjksCi0JMHg0YSwgMHgxOSwgMHg4NSwgMHgxZiwgMHg0YSwgMHg2YywgMHhkOCwgMHgyNCwgMHg3NiwgMHgwZCwgMHhlMywgMHg2MSwKLQkweGQ0LCAweGQzLCAweGIzLCAweDUyLCAweDU2LCAweDcxLCAweDJkLCAweGRhLCAweGEwLCAweDVlLCAweDE1LCAweGQzLAotCTB4ZDIsIDB4YjEsIDB4M2UsIDB4OTYsIDB4M2QsIDB4MmMsIDB4NzMsIDB4ZWUsIDB4NzEsIDB4MTksIDB4OTgsIDB4YmEsCi0JMHgzNiwgMHg2ZSwgMHhkNywgMHhlYiwgMHgxZCwgMHg4NywgMHg2ZiwgMHhhNSwgMHhlYywgMHhhYywgMHhmYiwgMHg0MSwKLQkweDIxLCAweDhmLCAweGJiLCAweDY5LCAweDE3LCAweDcyLCAweGI2LCAweDA1LCAweGRmLCAweGY0LCAweGNiLCAweDE5LAotCTB4NzksIDB4N2UsIDB4M2IsIDB4OTUsIDB4MTQsIDB4YWMsIDB4ZDcsIDB4MDcsIDB4ZTEsIDB4N2IsIDB4ZGEsIDB4Y2YsCi0JMHhlMSwgMHg5ZCwgMHg3MSwgMHhhZSwgMHg2NywgMHhlMywgMHgxMiwgMHg3OSwgMHg3NiwgMHg1OCwgMHg3YSwgMHg1NiwKLQkweDg4LCAweDNmLCAweGM4LCAweGQzLCAweDg0LCAweDc0LCAweGFmLCAweDEwLCAweGZiLCAweDMyLCAweDJlLCAweDljLAotCTB4OWEsIDB4YmUsIDB4MjIsIDB4OGMsIDB4YjcsIDB4YTQsIDB4ZmMsIDB4MGIsIDB4ZjgsIDB4ZWQsIDB4NjIsIDB4ZGUsCi0JMHgzZCwgMHhmMCwgMHg5YiwgMHhiYiwgMHhjZiwgMHhlYSwgMHg3NiwgMHhmNiwgMHhkNiwgMHgxMCwgMHgwMCwgMHgxZiwKLQkweDdjLCAweGVlLCAweDE1LCAweGZhLCAweGQ5LCAweDRjLCAweGU5LCAweDc3LCAweGIzLCAweDBjLCAweGIyLCAweGJkLAotCTB4MzUsIDB4NjIsIDB4Y2EsIDB4ZTgsIDB4NTMsIDB4NzMsIDB4N2MsIDB4OWUsIDB4ZDksIDB4ZWIsIDB4N2IsIDB4YTAsCi0JMHhmNiwgMHgxOCwgMHg3ZCwgMHg1MiwgMHg1ZiwgMHg1ZSwgMHhkYywgMHg2MCwgMHgwYywgMHhmYywgMHg1NSwgMHhmOCwKLQkweDZmLCAweDE5LCAweDg5LCAweGFjLCAweDY0LCAweDIwLCAweDg3LCAweDNlLCAweDZjLCAweDI5LCAweDcxLCAweDFjLAotCTB4ZWQsIDB4MTcsIDB4ZjIsIDB4NjEsIDB4NzMsIDB4MzYsIDB4OWUsIDB4NTEsIDB4MzEsIDB4ODcsIDB4OTIsIDB4OTMsCi0JMHg4NSwgMHhjYywgMHhkNSwgMHgzZiwgMHg2MywgMHg5NywgMHhkYiwgMHg2YywgMHg1NCwgMHhkOSwgMHhkOCwgMHhhOCwKLQkweGIyLCAweGIxLCAweDUxLCAweGU1LCAweDY2LCAweGI4LCAweDNmLCAweDM4LCAweGM2LCAweDcxLCAweGQ4LCAweGQ1LAotCTB4MmUsIDB4NzksIDB4MmEsIDB4NGUsIDB4NTksIDB4ZDEsIDB4YjIsIDB4MTcsIDB4YjEsIDB4YzcsIDB4OTQsIDB4YWMsCi0JMHhjZSwgMHhkMCwgMHhkZSwgMHgzZSwgMHhlMywgMHhlZSwgMHg4MywgMHhhZiwgMHg1NSwgMHg1MiwgMHg3YiwgMHhlMywKLQkweDk5LCAweDUwLCAweGNlLCAweDc4LCAweGU3LCAweDMzLCAweDkwLCAweDFhLCAweGIwLCAweDRjLCAweGQ5LCAweGIzLAotCTB4NjQsIDB4YzksIDB4M2IsIDB4YWUsIDB4YjAsIDB4ZGUsIDB4YzMsIDB4ZTgsIDB4ZTMsIDB4NDksIDB4ZDMsIDB4YzcsCi0JMHg5MiwgMHg4YywgMHgxOSwgMHg3OSwgMHhlNywgMHhkYSwgMHg0NCwgMHhkNSwgMHg3OSwgMHhjNSwgMHg0MywgMHhmZSwKLQkweGVmLCAweGM5LCAweGMwLCAweDIwLCAweGQ3LCAweDkzLCAweGYyLCAweDRmLCAweDdjLCAweGMxLCAweGY1LCAweDYwLAotCTB4OGMsIDB4ZmYsIDB4NmQsIDB4NjMsIDB4YTksIDB4ZWEsIDB4MGUsIDB4NWYsIDB4YTEsIDB4NDIsIDB4NWIsIDB4YjIsCi0JMHgxZiwgMHhmMiwgMHg5YiwgMHg4MSwgMHhmZiwgMHgxZCwgMHhjNiwgMHg1MywgMHhkNSwgMHhiZSwgMHg0YSwgMHhkOCwKLQkweDM2LCAweGVjLCAweGRhLCAweGQ4LCAweGQ4LCAweDc4LCAweDUxLCAweDhlLCAweDRiLCAweDE5LCAweDdlLCAweDJiLAotCTB4NjksIDB4NTgsIDB4ODIsIDB4MWQsIDB4ZGIsIDB4ZjAsIDB4ZmYsIDB4MmUsIDB4ZjgsIDB4NjQsIDB4M2MsIDB4NTUsCi0JMHg5YSwgMHg5NywgMHhjZSwgMHgxOCwgMHgyNywgMHg3ZCwgMHhmMSwgMHhiNywgMHg4YiwgMHg3MywgMHgxZSwgMHg1MSwKLQkweGZhLCAweGYxLCAweDVhLCAweDJjLCAweDE1LCAweGM2LCAweDM4LCAweGU3LCAweDNhLCAweDYyLCAweDljLCAweGZhLAotCTB4ZWMsIDB4YWMsIDB4MjcsIDB4NGIsIDB4YmQsIDB4N2UsIDB4Y2EsIDB4ZmEsIDB4NzEsIDB4MjYsIDB4MjIsIDB4MGQsCi0JMHg2MCwgMHhjYSwgMHhmYiwgMHg3YywgMHg2MiwgMHhhNCwgMHg5MiwgMHhmNSwgMHg3YSwgMHg0NSwgMHhkNCwgMHg3YiwKLQkweGMxLCAweDhmLCAweGU4LCAweDU4LCAweGJiLCAweDBiLCAweGRiLCAweGIyLCAweGVkLCAweDk4LCAweGIzLCAweDIyLAotCTB4MDcsIDB4NzksIDB4YjYsIDB4ZjIsIDB4NzcsIDB4OGIsIDB4NGEsIDB4MjcsIDB4MjcsIDB4ZmEsIDB4MjQsIDB4NDYsCi0JMHgzZCwgMHg3NSwgMHgyZiwgMHhkZSwgMHg3OSwgMHg1ZSwgMHg3MSwgMHhhNCwgMHgyMywgMHg3ZiwgMHg2NywgMHg4MCwKLQkweDdiLCAweGFjLCAweDBjLCAweDNjLCAweGI2LCAweGU0LCAweDY5LCAweDdlLCAweDM5LCAweGUwLCAweGYxLCAweDBjLAotCTB4MzAsIDB4Y2UsIDB4OTUsIDB4MjYsIDB4NzEsIDB4NmQsIDB4Y2MsIDB4ZTAsIDB4NWEsIDB4ZTIsIDB4MjYsIDB4YWMsCi0JMHhkMSwgMHhmNiwgMHgyOCwgMHhjYSwgMHg4OCwgMHg5ZCwgMHhlMiwgMHhjYSwgMHhhZiwgMHg1MywgMHg1OCwgMHhjYSwKLQkweDJmLCAweDE4LCAweDNiLCAweDQxLCAweDk5LCAweGEyLCAweDNjLCAweDExLCAweDkzLCAweDY5LCAweDk5LCAweDVhLAotCTB4YTgsIDB4YjgsIDB4MWQsIDB4ZjIsIDB4ZTQsIDB4ZmUsIDB4MjMsIDB4ZTUsIDB4ZTksIDB4YTYsIDB4M2UsIDB4OWUsCi0JMHhmNywgMHhiYywgMHg4NCwgMHhmZCwgMHg3OSwgMHgxMiwgMHhmNiwgMHg3NCwgMHhhMywgMHhiNiwgMHg0ZiwgMHg3NiwKLQkweDZiLCAweGEzLCAweGMwLCAweGM1LCAweGNjLCAweGUzLCAweGJlLCAweDRjLCAweGM4LCAweGZkLCAweDk1LCAweDU5LAotCTB4MzksIDB4NWMsIDB4OGIsIDB4Y2EsIDB4YzUsIDB4OWEsIDB4N2QsIDB4NGYsIDB4OGYsIDB4MzAsIDB4NDYsIDB4NGQsCi0JMHhjYywgMHhmMSwgMHgwZCwgMHhhNSwgMHhkNywgMHg3ZSwgMHhlMiwgMHg1ZiwgMHg2ZCwgMHhiZiwgMHg4NCwgMHhmNiwKLQkweDBkLCAweGI0LCAweDVmLCAweGE4LCAweGRkLCAweDI4LCAweDQ1LCAweGQ1LCAweDdlLCAweGZkLCAweGJhLCAweDMxLAotCTB4YWUsIDB4ZDYsIDB4ZTksIDB4MzMsIDB4ZjYsIDB4MzMsIDB4M2MsIDB4OTcsIDB4YTQsIDB4NmQsIDB4ZWUsIDB4YzIsCi0JMHhiYywgMHhlMSwgMHgyNywgMHg2NSwgMHg5MCwgMHhkNiwgMHg3OSwgMHgzNiwgMHg0OSwgMHhkYiwgMHhmZSwgMHg0NywKLQkweGFlLCAweDRlLCAweDEzLCAweDZkLCAweDc2LCAweDIxLCAweGQ5LCAweDY2LCAweDE3LCAweGRlLCAweDY4LCAweGJiLAotCTB4NGIsIDB4YTksIDB4ZWYsIDB4NjUsIDB4YmYsIDB4OWMsIDB4MDEsIDB4ZjYsIDB4YWIsIDB4MGQsIDB4YjUsIDB4ZGQsCi0JMHhhOSwgMHg0OCwgMHg5NSwgMHg2OCwgMHg5MywgMHgxOCwgMHgwYiwgMHhkYiwgMHhhYywgMHg4NCwgMHhiYSwgMHgzYSwKLQkweDM3LCAweGMwLCAweDM4LCAweGZlLCAweGIyLCAweDRmLCAweGJlLCAweDRiLCAweDMyLCAweDkyLCAweGE1LCAweGFlLAotCTB4ZjcsIDB4YTMsIDB4YmIsIDB4YzAsIDB4NjgsIDB4MGQsIDB4NzUsIDB4NGUsIDB4MWQsIDB4YzEsIDB4MGYsIDB4YjYsCi0JMHhkMCwgMHhiMSwgMHhjNCwgMHhmNSwgMHg5OCwgMHg1NywgMHhkMiwgMHg1OCwgMHhkNywgMHg4NSwgMHhkZSwgMHhiNCwKLQkweDU1LCAweDlkLCAweDY0LCAweGRlLCAweGJmLCAweGM5LCAweGJjLCAweDQzLCAweGJmLCAweDU1LCAweGRlLCAweDNiLAotCTB4NmMsIDB4NjcsIDB4ZmYsIDB4ZmIsIDB4Y2QsIDB4ZjksIDB4MGMsIDB4Y2YsIDB4MGUsIDB4OTksIDB4NDcsIDB4Y2MsCi0JMHhmYiwgMHgwMywgMHg2MCwgMHg1ZSwgMHhkZSwgMHhiNywgMHhlNSwgMHhiYSwgMHhiYywgMHg4OSwgMHhmNSwgMHhiZiwKLQkweDA4LCAweGRiLCAweGUyLCAweDQxLCAweGFmLCAweDNiLCAweGIyLCAweDkwLCAweGI5LCAweDY4LCAweGNlLCAweDJlLAotCTB4MzgsIDB4YjcsIDB4NmUsIDB4ZDgsIDB4YTgsIDB4MWYsIDB4YzksIDB4ZTEsIDB4YjUsIDB4MTQsIDB4YjAsIDB4NGEsCi0JMHg4OCwgMHhhZiwgMHhkOCwgMHhjNywgMHhmNSwgMHhkOCwgMHhlYSwgMHg0NCwgMHhiNSwgMHhmZCwgMHhmYywgMHgzNywKLQkweGJjLCAweDNmLCAweDRhLCAweGQ5LCAweDUwLCAweGU3LCAweGRhLCAweDU2LCAweDgxLCAweGYxLCAweGMwLCAweGQ1LAotCTB4MWYsIDB4NjAsIDB4OWUsIDB4YTksIDB4NTMsIDB4MjIsIDB4M2MsIDB4ZWIsIDB4NjIsIDB4OWMsIDB4MTcsIDB4M2UsCi0JMHhjMiwgMHgzNiwgMHhmMywgMHhlNywgMHhkMCwgMHhmNywgMHgwZiwgMHg3OCwgMHg5NywgMHgxNiwgMHhmZSwgMHg5MywKLQkweDZkLCAweGY4LCAweGYzLCAweGZiLCAweGM2LCAweGJmLCAweDhmLCAweDMyLCAweDM2LCAweDBhLCAweGQ5LCAweDJmLAotCTB4MmIsIDB4ZGIsIDB4NWQsIDB4OGMsIDB4MmYsIDB4MjMsIDB4ZmQsIDB4MWYsIDB4YzYsIDB4NTYsIDB4N2YsIDB4YmQsCi0JMHg0ZiwgMHhkYiwgMHg2YSwgMHhkZSwgMHgwMywgMHhmOSwgMHgwMiwgMHhmNywgMHg5NiwgMHhhMSwgMHg5YiwgMHhmNCwKLQkweDkyLCAweGVlLCAweDJlLCAweGU5LCAweDNlLCAweDRkLCAweDlhLCAweGJmLCAweDgyLCAweDdhLCAweDk0LCAweDhkLAotCTB4ODMsIDB4ZTYsIDB4YmUsIDB4MDgsIDB4Y2YsIDB4YzEsIDB4ZDksIDB4MjcsIDB4NmMsIDB4ODQsIDB4YzIsIDB4NWIsCi0JMHgzOSwgMHhhNCwgMHg2YywgMHhiNywgMHg4NiwgMHg3YSwgMHgzOSwgMHhjYywgMHg1OSwgMHg2MSwgMHhiMCwgMHhhMSwKLQkweDg4LCAweDg0LCAweDc5LCAweGY3LCAweDIyLCAweDhmLCAweDNlLCAweGU1LCAweDRkLCAweGYwLCAweDI5LCAweDk5LAotCTB4OTcsIDB4YzcsIDB4M2IsIDB4YzcsIDB4YmEsIDB4ZDksIDB4OGMsIDB4NjMsIDB4MzAsIDB4ZGQsIDB4MzUsIDB4MzQsCi0JMHg3MSwgMHgyZSwgMHhlMSwgMHg1YSwgMHg3NywgMHg5YiwgMHgzMywgMHg3MywgMHhlNiwgMHhkZCwgMHg2NCwgMHhmMiwKLQkweDFjLCAweDMzLCAweGJmLCAweDYxLCAweDczLCAweDhmLCAweDNkLCAweDc1LCAweDJhLCAweDI3LCAweGExLCAweGVjLAotCTB4OTMsIDB4YmUsIDB4NjgsIDB4MWIsIDB4MTYsIDB4ZmMsIDB4ODMsIDB4YzEsIDB4YWIsIDB4NzcsIDB4MWMsIDB4MjksCi0JMHg2YiwgMHg5NCwgMHhhZiwgMHg4NCwgMHhiYSwgMHhiZiwgMHhjNywgMHhmMywgMHhmMiwgMHgxNywgMHgxNCwgMHhmZSwKLQkweDBlLCAweDcxLCAweDk1LCAweGQyLCAweDY1LCAweDNjLCAweDA3LCAweGE4LCAweGQ5LCAweGQ5LCAweDllLCAweGRmLAotCTB4ZjksIDB4M2UsIDB4NWIsIDB4MjQsIDB4MWIsIDB4YjYsIDB4MDMsIDB4MWUsIDB4NTIsIDB4NmQsIDB4OTIsIDB4YjIsCi0JMHhkOCwgMHg3YywgMHhiYiwgMHhiYiwgMHg2ZiwgMHhjMCwgMHg2OCwgMHhkNywgMHhkYywgMHg2NywgMHg0OSwgMHgyOCwKLQkweGZkLCAweGIzLCAweDUxLCAweDhiLCAweDgwLCAweGJmLCAweDQzLCAweDc4LCAweGJlLCAweDBjLCAweDFlLCAweDQ0LAotCTB4MzEsIDB4NGYsIDB4ZTAsIDB4ZjQsIDB4ZjgsIDB4NGQsIDB4ZWEsIDB4YmUsIDB4NGYsIDB4YzQsIDB4YmIsIDB4YTQsCi0JMHhjZSwgMHg4ZCwgMHgwYSwgMHhmNSwgMHg5ZiwgMHhhOSwgMHhiMiwgMHhhZiwgMHhhZCwgMHhmNSwgMHhmMCwgMHgwZSwKLQkweDI4LCAweDUyLCAweDllLCAweDQzLCAweGZmLCAweDA2LCAweDMyLCAweGQ4LCAweDY1LCAweDY0LCAweDEwLCAweDY5LAotCTB4OWQsIDB4ZjksIDB4YjcsIDB4YzAsIDB4ODcsIDB4MTQsIDB4YzgsIDB4NGIsIDB4MzcsIDB4YjAsIDB4YmQsIDB4ZjIsCi0JMHgxMywgMHgzMCwgMHg5YiwgMHhhYiwgMHgzNCwgMHg3NCwgMHg2NywgMHhjMywgMHgzYiwgMHg5NywgMHg4MSwgMHgxYywKLQkweDg2LCAweDZjLCAweDZjLCAweDRjLCAweDJmLCAweDRiLCAweDYzLCAweGJhLCAweDFkLCAweDI3LCAweDAyLCAweDA3LAotCTB4YmEsIDB4YTUsIDB4YTAsIDB4ZTEsIDB4MzEsIDB4ZDYsIDB4ZDcsIDB4NmYsIDB4ZWUsIDB4YmYsIDB4MmQsIDB4MWEsCi0JMHg2YywgMHg0NywgMHhmZSwgMHhkYiwgMHg1MiwgMHg5OCwgMHg1YywgMHg1MiwgMHgzMiwgMHhkNSwgMHg1MCwgMHhlYiwKLQkweGUwLCAweDU4LCAweGU3LCAweGQ1LCAweGRkLCAweDU5LCAweDhlLCAweGMxLCAweGZiLCAweGIzLCAweDExLCAweDgzLAotCTB4NzEsIDB4ZmUsIDB4YTksIDB4NTksIDB4Y2YsIDB4ZWYsIDB4ZjcsIDB4ODUsIDB4ZGYsIDB4NjQsIDB4NzQsIDB4NjUsCi0JMHg0ZiwgMHhmMiwgMHhjZSwgMHgwOCwgMHhmMCwgMHg2YiwgMHg2ZCwgMHg3NiwgMHhhMSwgMHg0MiwgMHhiZCwgMHgxNiwKLQkweDA0LCAweDBkLCAweDdmLCAweDA3LCAweDNkLCAweGJlLCAweGE5LCAweGYwLCAweGQ5LCAweGFlLCAweDY4LCAweGZkLAotCTB4YjksIDB4YTQsIDB4ZWUsIDB4YTEsIDB4NTYsIDB4NjYsIDB4ZjMsIDB4MmEsIDB4YTYsIDB4MDYsIDB4ZGMsIDB4ZDEsCi0JMHgzYSwgMHhiZiwgMHg3OCwgMHhhNywgMHhiMywgMHg4YiwgMHgyOCwgMHhmYywgMHhlNSwgMHg1ZSwgMHhiMywgMHhlZSwKLQkweDUxLCAweGE3LCAweDU4LCAweGU5LCAweDczLCAweDE2LCAweGQ0LCAweGI5LCAweGQyLCAweGU3LCAweGNjLCAweGY3LAotCTB4MmIsIDB4YTUsIDB4ZDksIDB4NzQsIDB4MzMsIDB4YmIsIDB4OWYsIDB4NTgsIDB4OWEsIDB4MzEsIDB4ZmQsIDB4NDIsCi0JMHg4NSwgMHg2NywgMHgxOSwgMHhiYSwgMHgzYywgMHg2ZCwgMHhjYSwgMHg0NywgMHg5YSwgMHhhYSwgMHg0YywgMHhjNSwKLQkweGU0LCAweGUwLCAweDc3LCAweGMxLCAweGFlLCAweDMwLCAweGZlLCAweDQ3LCAweGRkLCAweDgyLCAweGZlLCAweGUzLAotCTB4N2EsIDB4MGUsIDB4OTEsIDB4ZWMsIDB4MzIsIDB4N2MsIDB4M2IsIDB4ZDIsIDB4NzcsIDB4NmEsIDB4MzYsIDB4YmYsCi0JMHhjNiwgMHg3YiwgMHg0NywgMHg1ZiwgMHg5YSwgMHhiZCwgMHgwOCwgMHhmZiwgMHg2MywgMHhjYiwgMHhkMywgMHg3NywKLQkweGI1LCAweDM3LCAweDE5LCAweDNiLCAweDYyLCAweDNiLCAweGQ1LCAweGU3LCAweGIyLCAweDg5LCAweDY1LCAweDllLAotCTB4OWMsIDB4MWQsIDB4ZGQsIDB4OGMsIDB4YzgsIDB4NDksIDB4ZDMsIDB4MDcsIDB4ZGYsIDB4OTMsIDB4MmQsIDB4ZGYsCi0JMHg0NCwgMHhlOSwgMHgzYiwgMHg2MCwgMHhmMCwgMHgyNywgMHg4MCwgMHhjMSwgMHg2MywgMHhiMCwgMHg4YiwgMHhjNCwKLQkweGYyLCAweGM0LCAweGI3LCAweDMxLCAweGVjLCAweDE1LCAweDhlLCAweGYzLCAweGFmLCAweGQ1LCAweDM4LCAweDExLAotCTB4OGMsIDB4YjMsIDB4YjAsIDB4NzYsIDB4NDAsIDB4ZGQsIDB4MjMsIDB4YzksIDB4N2IsIDB4MGUsIDB4ZWMsIDB4MzQsCi0JMHhlYywgMHhhOSwgMHhjNywgMHg1OCwgMHhiMiwgMHg4ZCwgMHgzOSwgMHg4ZiwgMHg0MywgMHgxZiwgMHhmMCwgMHg2ZSwKLQkweGM3LCAweDYwLCAweDc4LCAweGVmLCAweDg1LCAweDc3LCAweGFkLCAweDRjLCAweGJiLCAweDRmLCAweGEzLCAweDFkLAotCTB4MzEsIDB4MzgsIDB4ZGIsIDB4Y2EsIDB4OGQsIDB4YjYsIDB4OGMsIDB4MmEsIDB4YmIsIDB4YWIsIDB4NzUsIDB4MGUsCi0JMHg2OSwgMHhhOCwgMHg2MywgMHhhZSwgMHhiNCwgMHg1ZCwgMHhkOCwgMHg2YiwgMHg2YSwgMHg1ZSwgMHg5ZiwgMHg1NiwKLQkweGVkLCAweGFjLCAweGVjLCAweDUzLCAweGEwLCAweDlkLCAweGQ4LCAweDBhLCAweDdkLCAweDU3LCAweDc1LCAweDdjLAotCTB4YjAsIDB4YTAsIDB4ZTQsIDB4MDgsIDB4NzIsIDB4MzIsIDB4MWQsIDB4ZGUsIDB4MTcsIDB4ZDEsIDB4ZWQsIDB4YzIsCi0JMHhmYSwgMHgyMywgMHg5YiwgMHg5ZiwgMHgzNSwgMHhlMywgMHhmZiwgMHgzMiwgMHhjOCwgMHgxZCwgMHg4ZCwgMHhhOSwKLQkweGZiLCAweDM5LCAweDJmLCAweDVkLCAweDczLCAweDg3LCAweDhhLCAweDZkLCAweGMyLCAweDNhLCAweDExLCAweDIzLAotCTB4NWIsIDB4MjcsIDB4ZGEsIDB4NjgsIDB4ZmUsIDB4OWMsIDB4NTksIDB4NzMsIDB4YjYsIDB4NjMsIDB4ZmMsIDB4OTQsCi0JMHg3OSwgMHgyNSwgMHhlNiwgMHgzOSwgMHg4YiwgMHgxOSwgMHhmNiwgMHhkMSwgMHg3ZSwgMHhlZSwgMHgzMiwgMHgwOSwKLQkweDViLCAweGFlLCAweDZkLCAweDQ2LCAweDY5LCAweGRiLCAweDgzLCAweDRkLCAweGVjLCAweGM2LCAweGRhLCAweGQxLAotCTB4MDYsIDB4OGMsIDB4MWEsIDB4ZGMsIDB4ZmUsIDB4OGUsIDB4NzEsIDB4NDksIDB4YTcsIDB4OTgsIDB4ODEsIDB4MWYsCi0JMHhkZiwgMHg2YSwgMHhjZiwgMHg3NSwgMHgyYywgMHhjZCwgMHg1ZSwgMHhhYywgMHg3OCwgMHg3MiwgMHhhMiwgMHhhYSwKLQkweGVmLCAweDM3LCAweDY5LCAweDNlLCAweDUwLCAweDM3LCAweDczLCAweDZkLCAweDkzLCAweGIyLCAweGUwLCAweDMxLAotCTB4ZmUsIDB4OTEsIDB4OTQsIDB4NTcsIDB4YmMsIDB4NzYsIDB4M2QsIDB4OGQsIDB4ZmEsIDB4ZGIsIDB4OTMsIDB4ZTYsCi0JMHg4ZSwgMHhmMywgMHhhNywgMHgzMSwgMHg3ZiwgMHhlMiwgMHgzMSwgMHgyZCwgMHg0YiwgMHgwNywgMHg2MSwgMHg3NywKLQkweGZlLCAweDgzLCAweDQzLCAweDlkLCAweGRkLCAweDJkLCAweDk3LCAweDlkLCAweGY2LCAweGY5LCAweDg1LCAweDcxLAotCTB4NmUsIDB4MmQsIDB4OTcsIDB4MGUsIDB4NjQsIDB4NjQsIDB4YjksIDB4YzUsIDB4NzcsIDB4ZjgsIDB4YmYsIDB4ZWYsCi0JMHgxYiwgMHg4MywgMHg4ZSwgMHhiNywgMHg2NCwgMHg2NiwgMHhkMiwgMHg0YiwgMHgyYywgMHgzMSwgMHhlZSwgMHhlZiwKLQkweDRlLCAweGI4LCAweGFlLCAweGJhLCAweGE3LCAweDk3LCAweDA0LCAweGJkLCAweDdjLCAweDFlLCAweDA1LCAweDA2LAotCTB4ZTEsIDB4OWQsIDB4M2EsIDB4YmMsIDB4ZjMsIDB4NGUsIDB4NWIsIDB4ZGMsIDB4MDMsIDB4YmQsIDB4YWUsIDB4OGEsCi0JMHhlNywgMHg2YiwgMHgxZCwgMHhmZCwgMHhmNSwgMHhmZCwgMHg4YywgMHhhNywgMHgwYywgMHg3OCwgMHhlMSwgMHhkYSwKLQkweGFiLCAweDdiLCAweGNkLCAweGU4LCAweDNiLCAweDYyLCAweGNhLCAweDA3LCAweDViLCAweGZjLCAweDk3LCAweDIxLAotCTB4YTYsIDB4YWQsIDB4YmIsIDB4NTIsIDB4MjYsIDB4NmUsIDB4YzEsIDB4ZmEsIDB4OWYsIDB4NTEsIDB4YjQsIDB4MmMsCi0JMHg3OCwgMHg0MSwgMHhiMCwgMHhhOCwgMHhlNiwgMHhmMywgMHgzNCwgMHg2NCwgMHgyMSwgMHgyMiwgMHhlNSwgMHg5NiwKLQkweGZjLCAweDNlLCAweDBkLCAweGY5LCAweGRkLCAweGM3LCAweDZiLCAweDM1LCAweDdiLCAweGM4LCAweDVhLCAweDI4LAotCTB4NjMsIDB4OTQsIDB4MmYsIDB4Y2EsIDB4NTYsIDB4YTIsIDB4OWYsIDB4N2IsIDB4YWUsIDB4ZDQsIDB4NWEsIDB4NzcsCi0JMHg0NywgMHhkOSwgMHhkOCwgMHhhNCwgMHgxZCwgMHhhZSwgMHgzYiwgMHg5ZiwgMHhmNywgMHhiYSwgMHg5MywgMHgxNCwKLQkweGVlLCAweDhmLCAweGNjLCAweDNmLCAweDYyLCAweDZkLCAweDdkLCAweGIzLCAweGI2LCAweDk5LCAweGI2LCAweDZmLAotCTB4MGIsIDB4YzIsIDB4ZmUsIDB4MTgsIDB4M2IsIDB4NTQsIDB4ZjYsIDB4MzgsIDB4MjEsIDB4ZDAsIDB4ZDksIDB4MjUsCi0JMHg3ZCwgMHhiZiwgMHg1NywgMHhlMSwgMHhkNiwgMHg5YywgMHg5YiwgMHg0ZiwgMHgzMiwgMHg0ZSwgMHg3YywgMHg0YywKLQkweGVlLCAweDAyLCAweGNkLCAweGI5LCAweGYxLCAweDJlLCAweGQxLCAweDZkLCAweGU3LCAweGMxLCAweGVmLCAweDFkLAotCTB4MTcsIDB4YmUsIDB4MTYsIDB4Y2YsIDB4NmMsIDB4MmIsIDB4OGUsIDB4NmMsIDB4YTksIDB4YjMsIDB4NDcsIDB4ZWMsCi0JMHhkMSwgMHg5OCwgMHgyMywgMHhjYiwgMHg1ZSwgMHhkOCwgMHg2ZiwgMHg1NCwgMHhlYSwgMHhhOCwgMHhiMywgMHg4MSwKLQkweGIyLCAweDkzLCAweDJkLCAweGRhLCAweDg4LCAweGQzLCAweGUxLCAweGE3LCAweDc4LCAweGJmLCAweDBjLCAweDhhLAotCTB4ZjEsIDB4NmIsIDB4ZWEsIDB4OWEsIDB4N2IsIDB4ZmEsIDB4OGMsIDB4NzcsIDB4ZjQsIDB4MjksIDB4MWYsIDB4YWEsCi0JMHgwMCwgMHg5ZiwgMHhhYiwgMHgwMCwgMHg3ZiwgMHhhYiwgMHhhMCwgMHhmNCwgMHgwMiwgMHhlMywgMHgxZiwgMHg4YywKLQkweDRmLCAweDk1LCAweDgwLCAweGVkLCAweDRiLCAweDQxLCAweDhmLCAweDc3LCAweDVjLCAweGM1LCAweGRkLCAweDVlLAotCTB4ZDgsIDB4YTYsIDB4MGYsIDB4ZTAsIDB4MjUsIDB4ZWYsIDB4OTcsIDB4ZDAsIDB4ODYsIDB4ZjQsIDB4OTcsIDB4YTIsCi0JMHhkOSwgMHhmNiwgMHgxOCwgMHg1NiwgMHg1MiwgMHhjNSwgMHg4MCwgMHg3YSwgMHg4MSwgMHg0MywgMHgxZiwgMHg4NywKLQkweGFlLCAweDdlLCAweGQxLCAweDY3LCAweGVjLCAweGVhLCAweDU2LCAweGYyLCAweGZiLCAweDJiLCAweDljLCAweGE0LAotCTB4M2QsIDB4MzYsIDB4MjksIDB4ZGUsIDB4NTksIDB4NmYsIDB4ZmMsIDB4N2UsIDB4MjEsIDB4YjYsIDB4NGYsIDB4MjUsCi0JMHg4ZiwgMHg5MCwgMHg2ZiwgMHhhZCwgMHhlZiwgMHgwNCwgMHg0MiwgMHhiYiwgMHgzYSwgMHgyOSwgMHhhMywgMHg2NywKLQkweDdmLCAweGE0LCAweGNlLCAweDA0LCAweDNlLCAweGUyLCAweDc3LCAweGNhLCAweDg2LCAweDhhLCAweDdkLCAweDRkLAotCTB4MGUsIDB4YzgsIDB4MjgsIDB4ZmMsIDB4NGEsIDB4ODEsIDB4NzUsIDB4ZTIsIDB4NzcsIDB4MDMsIDB4OTYsIDB4MmMsCi0JMHg2NywgMHhkNCwgMHhiYiwgMHhjYywgMHgzNSwgMHg5MywgMHhlNiwgMHg5ZSwgMHgyNSwgMHg2MywgMHg1YiwgMHg4YywKLQkweDhkLCAweDcxLCAweDRkLCAweGZiLCAweGQ0LCAweGRkLCAweDRhLCAweGRlLCAweGZmLCAweDliLCAweDY5LCAweDZhLAotCTB4OWIsIDB4OWIsIDB4NTMsIDB4NzcsIDB4MWMsIDB4MTksIDB4MmIsIDB4NjMsIDB4Y2MsIDB4NGIsIDB4ZGYsIDB4OWYsCi0JMHgzYiwgMHhkYywgMHhkYywgMHgyYiwgMHgyZSwgMHgxNiwgMHhkZSwgMHhmNywgMHhkMywgMHg3NiwgMHg2YiwgMHgzNywKLQkweDczLCAweDAwLCAweGI2LCAweGNlLCAweDU1LCAweGYxLCAweDg5LCAweGEyLCAweDNiLCAweDIwLCAweGM3LCAweGM2LAotCTB4N2IsIDB4YzAsIDB4ZjMsIDB4NDEsIDB4NzUsIDB4MTcsIDB4Y2QsIDB4ZjYsIDB4ZGUsIDB4MmYsIDB4NWQsIDB4YjQsCi0JMHg5YiwgMHhhZSwgMHhiYSwgMHgyMywgMHg2ZCwgMHhmOCwgMHg3YywgMHgwNywgMHhmMiwgMHg3ZSwgMHgwNSwgMHhkZSwKLQkweDMzLCAweGVmLCAweDYzLCAweGZkLCAweGRhLCAweDBlLCAweDdkLCAweDBhLCAweDc4LCAweDliLCAweGY3LCAweGNhLAotCTB4ZWIsIDB4MDcsIDB4ZjIsIDB4NmEsIDB4M2QsIDB4ZTgsIDB4ZjcsIDB4ODYsIDB4YmEsIDB4MjksIDB4YmMsIDB4ZmYsCi0JMHgxOCwgMHg4NSwgMHg2ZCwgMHg3MiwgMHhjZCwgMHg3OSwgMHg3MSwgMHg0OSwgMHg5NiwgMHg4OCwgMHgwMSwgMHgzNywKLQkweGE5LCAweDdmLCAweDJjLCAweDM1LCAweGQ2LCAweGU1LCAweGM4LCAweGJiLCAweGE0LCAweDU0LCAweGRmLCAweGViLAotCTB4ZGMsIDB4M2IsIDB4MDgsIDB4YmUsIDB4ZTEsIDB4YWIsIDB4M2IsIDB4OTcsIDB4YTcsIDB4NGEsIDB4NjYsIDB4OGQsCi0JMHhmNSwgMHgzNywgMHg4NSwgMHg0ZSwgMHhkYiwgMHg3ZCwgMHhlZSwgMHhhOCwgMHhkMiwgMHhiYiwgMHhiOSwgMHg0MSwKLQkweDYwLCAweDE1LCAweGVmLCAweGEzLCAweGZkLCAweDU3LCAweGVmLCAweGYwLCAweGZkLCAweGM2LCAweGUwLCAweDU4LAotCTB4ZGUsIDB4ZGYsIDB4ZDMsIDB4NzcsIDB4YmIsIDB4ZWQsIDB4NDYsIDB4MjgsIDB4MjcsIDB4ZjQsIDB4OWIsIDB4ODksCi0JMHg5ZiwgMHgwZiwgMHhjMiwgMHhhNywgMHg4NiwgMHhkZSwgMHgxYywgMHhlMiwgMHhmYiwgMHg1ZiwgMHg5YSwgMHhiNiwKLQkweDdjLCAweDBlLCAweGU0LCAweGJlLCAweGE5LCAweGNlLCAweDMzLCAweGVkLCAweDY5LCAweDdkLCAweDBmLCAweDNjLAotCTB4MTYsIDB4ZGUsIDB4NzMsIDB4MWYsIDB4ZWUsIDB4YjgsIDB4OWIsIDB4YTQsIDB4ZTgsIDB4ODQsIDB4M2MsIDB4ODUsCi0JMHgzNCwgMHhlOCwgMHhiMSwgMHgwZSwgMHg4MywgMHhkZSwgMHg0NiwgMHgyZCwgMHgyMSwgMHg4MywgMHgxZSwgMHg3ZCwKLQkweGM1LCAweDg4LCAweDRjLCAweDBkLCAweGE2LCAweDVhLCAweDc3LCAweGNkLCAweDFiLCAweDc1LCAweGQ4LCAweGZjLAotCTB4NWEsIDB4NDgsIDB4YTcsIDB4YmUsIDB4NmIsIDB4ZDgsIDB4YTgsIDB4YjMsIDB4M2MsIDB4ODksIDB4YjEsIDB4N2EsCi0JMHg2NCwgMHg2YSwgMHg4OCwgMHg3YywgMHhlZSwgMHhhNCwgMHgyMywgMHg2MSwgMHhlZSwgMHgyMywgMHg3NywgMHhlNiwKLQkweGRmLCAweGRkLCAweDQ2LCAweGRmLCAweGY1LCAweGRmLCAweDYyLCAweGVhLCAweGZiLCAweDhmLCAweGJjLCAweGNiLAotCTB4NGUsIDB4MWEsIDB4NzksIDB4Y2UsIDB4ODIsIDB4MzksIDB4ZmEsIDB4YTEsIDB4NmYsIDB4MTEsIDB4ZjIsIDB4NjUsCi0JMHg1MCwgMHhkZCwgMHg5NywgMHgyZiwgMHhkNCwgMHhiYiwgMHg5NCwgMHg1YywgMHgyYywgMHg2NCwgMHgzOCwgMHgxNywKLQkweGUyLCAweGEwLCAweGYwLCAweDRlLCAweGZjLCAweDNmLCAweDM5LCAweGEwLCAweGQ3LCAweGZjLCAweDYzLCAweGUxLAotCTB4MWMsIDB4NGQsIDB4M2UsIDB4ZGIsIDB4ZGYsIDB4ODIsIDB4MzYsIDB4NWYsIDB4MGQsIDB4ZDAsIDB4M2YsIDB4ODMsCi0JMHg1YiwgMHhkOCwgMHhmMywgMHgyMSwgMHgzNiwgMHhiZiwgMHg0NSwgMHhiNywgMHg4ZiwgMHg4NSwgMHhkZiwgMHhlMywKLQkweGI1LCAweDdmLCAweDFmLCAweGMwLCAweDNkLCAweDE1LCAweGYyLCAweDhkLCAweDdkLCAweDcwLCAweDdjLCAweGQyLAotCTB4YzEsIDB4NzEsIDB4N2IsIDB4ZGIsIDB4YzYsIDB4NTUsIDB4M2YsIDB4ZmYsIDB4NWEsIDB4YmQsIDB4NzYsIDB4NDcsCi0JMHhkYiwgMHg3YywgMHgyOSwgMHg1ZiwgMHhmZCwgMHhiMiwgMHg1NCwgMHg4YiwgMHg0OSwgMHhiOSwgMHhhNiwgMHhmYywKLQkweDk5LCAweDcxLCAweDIwLCAweDM2LCAweGUwLCAweDM5LCAweGVlLCAweDQ1LCAweDc1LCAweGZmLCAweGQ2LCAweGRjLAotCTB4MmQsIDB4MGMsIDB4ZjcsIDB4NjQsIDB4M2YsIDB4ZWEsIDB4ZDEsIDB4NmUsIDB4MjAsIDB4YWQsIDB4NmIsIDB4OWQsCi0JMHg1NCwgMHg5NywgMHhlYiwgMHhiZiwgMHg3NywgMHg1OCwgMHg2YywgMHg3ZCwgMHhlZiwgMHhhMCwgMHhmZCwgMHhlMywKLQkweDYyLCAweGViLCAweDZlLCAweDQ2LCAweGI0LCAweDM0LCAweDk4LCAweDZkLCAweGJmLCAweGVmLCAweDUzLCAweDkyLAotCTB4ODcsIDB4ZWUsIDB4ZTQsIDB4NzcsIDB4MDYsIDB4MzEsIDB4MjMsIDB4OTcsIDB4ZWYsIDB4MzcsIDB4ZTMsIDB4NjAsCi0JMHhiYywgMHhkNSwgMHg2OSwgMHgxOSwgMHg1OSwgMHhmZCwgMHhiYywgMHgxNCwgMHhlNywgMHhkNCwgMHg5ZCwgMHhlZCwKLQkweGI2LCAweDNiLCAweGZiLCAweGEzLCAweGU2LCAweDNiLCAweGEyLCAweDljLCAweGM1LCAweDNiLCAweDIwLCAweDg1LAotCTB4NTUsIDB4YWMsIDB4ZDEsIDB4OWQsIDB4YTksIDB4ZjEsIDB4YTQsIDB4Y2QsIDB4NmYsIDB4NTksIDB4MWYsIDB4OTUsCi0JMHg5MSwgMHhmNSwgMHg2OSwgMHg0OSwgMHhhZiwgMHgxMiwgMHgyNywgMHhmMCwgMHg3NCwgMHgzYywgMHhhNSwgMHhlMiwKLQkweDhkLCAweGU5LCAweDczLCAweGJhLCAweDNmLCAweDZmLCAweDk1LCAweGU1LCAweDY5LCAweDYwLCAweDU0LCAweDk2LAotCTB4MTcsIDB4MTIsIDB4MTEsIDB4NzUsIDB4ODIsIDB4N2UsIDB4MWIsIDB4NjQsIDB4YTgsIDB4ZGIsIDB4NjAsIDB4MDAsCi0JMHg0NywgMHhmMiwgMHhhYiwgMHg2YywgMHg0ZiwgMHhiYywgMHhmMSwgMHgxYywgMHhkNiwgMHhhYywgMHg5MCwgMHhiNCwKLQkweDg1LCAweDZkLCAweDU0LCAweDdmLCAweDc4LCAweDhlLCAweDJhLCAweGVjLCAweDVjLCAweGM4LCAweDkwLCAweGQ3LAotCTB4OTMsIDB4YjIsIDB4ZDksIDB4ZjQsIDB4YjAsIDB4MGYsIDB4ZjQsIDB4M2QsIDB4ZmYsIDB4NjIsIDB4M2QsIDB4YmMsCi0JMHg3NywgMHhmOSwgMHg5MCwgMHhmOSwgMHg2ZSwgMHg0MCwgMHhkMywgMHgzOCwgMHg1MywgMHhlOSwgMHg5NCwgMHhiNywKLQkweGM3LCAweGNjLCAweDdkLCAweDdmLCAweGNlLCAweGRiLCAweDZkLCAweGQ3LCAweDc5LCAweGE2LCAweGZlLCAweDZiLAotCTB4MDcsIDB4NzgsIDB4OTYsIDB4NGUsIDB4OWYsIDB4NjgsIDB4YTQsIDB4ZGQsIDB4ZmYsIDB4ODgsIDB4YzcsIDB4Y2QsCi0JMHg3NywgMHgxNiwgMHg2MSwgMHhiZCwgMHhmZiwgMHg3ZCwgMHg0MCwgMHhkZiwgMHhkNSwgMHgyNywgMHg5ZiwgMHhiMiwKLQkweDg2LCAweGU2LCAweDI5LCAweGU1LCAweGRmLCAweGJjLCAweDU0LCAweDNkLCAweDg4LCAweGI2LCAweDVjLCAweDI3LAotCTB4YTQsIDB4MGQsIDB4M2UsIDB4NTMsIDB4NmYsIDB4MWUsIDB4MzEsIDB4NjcsIDB4NGUsIDB4NDMsIDB4NmEsIDB4MmMsCi0JMHgzNywgMHhkYiwgMHhmZSwgMHgwZCwgMHg0OCwgMHg2ZiwgMHhkYiwgMHhmOCwgMHg5ZCwgMHhmNCwgMHhmMiwgMHg5YiwKLQkweDkwLCAweDhiLCAweDQ2LCAweDVlLCAweDU4LCAweGNlLCAweGY3LCAweGNlLCAweDNhLCAweDg3LCAweDBlLCAweDg0LAotCTB4ZTUsIDB4NGUsIDB4ZWIsIDB4YmIsIDB4MDEsIDB4ZjIsIDB4OTIsIDB4ZTcsIDB4NjUsIDB4NDgsIDB4NzksIDB4NGUsCi0JMHhhOSwgMHg5ZSwgMHg5MSwgMHg5YSwgMHhlZiwgMHgyMSwgMHg5YywgMHg1NSwgMHhmZSwgMHgzYSwgMHhmYiwgMHg3MSwKLQkweGQwLCAweDc3LCAweGI4LCAweDRmLCAweGY3LCAweGJhLCAweDE3LCAweDQzLCAweGZkLCAweDdiLCAweGNhLCAweGRhLAotCTB4YWQsIDB4NDQsIDB4ZTksIDB4ZWYsIDB4YzgsIDB4YjEsIDB4NGMsIDB4M2YsIDB4ZmMsIDB4N2QsIDB4OWIsIDB4ZGYsCi0JMHg3OCwgMHgzMiwgMHhiNiwgMHhjOSwgMHgzMywgMHgzZCwgMHg1OSwgMHg1NCwgMHg3YSwgMHg2ZCwgMHg0YywgMHhmNCwKLQkweGY3LCAweGFkLCAweGJkLCAweDMyLCAweGUzLCAweDUyLCAweDllLCAweGM3LCAweDY0LCAweGIzLCAweDNlLCAweGQ3LAotCTB4NzYsIDB4NTcsIDB4YjYsIDB4ZGIsIDB4YzgsIDB4ZDksIDB4MmIsIDB4NWQsIDB4MTIsIDB4MmIsIDB4NTksIDB4MTcsCi0JMHgyYSwgMHhlMSwgMHgzZSwgMHgxZSwgMHg5MywgMHg5OSwgMHg3YSwgMHhmYiwgMHg3ZCwgMHg2OCwgMHhkZSwgMHhiMywKLQkweGExLCAweGRjLCAweDBlLCAweGI3LCAweGVkLCAweDNkLCAweGRlLCAweDRkLCAweDAzLCAweDk2LCAweDhhLCAweGQzLAotCTB4MWYsIDB4NjUsIDB4YmQsIDB4ZmQsIDB4YzYsIDB4YzYsIDB4N2UsIDB4ZDQsIDB4OTUsIDB4OTgsIDB4NmIsIDB4ODksCi0JMHg0NywgMHhkYSwgMHhmYSwgMHg0ZCwgMHg1YywgMHgzZSwgMHgyZCwgMHhmNywgMHhjNSwgMHg0YiwgMHhmMCwgMHhjNywKLQkweGM2LCAweGNjLCAweGI4LCAweGVmLCAweGMxLCAweDNiLCAweGViLCAweDFlLCAweDMwLCAweGU1LCAweGI3LCAweDk4LAotCTB4ZjcsIDB4OTgsIDB4NzksIDB4OGYsIDB4ZTAsIDB4OWQsIDB4NzcsIDB4YWMsIDB4ZDksIDB4MjcsIDB4ZDMsIDB4ZTcsCi0JMHg1NSwgMHhkYywgMHg2NSwgMHgyMCwgMHg5YiwgMHg5NSwgMHhhZSwgMHg3MywgMHgwMiwgMHhkYiwgMHgxNCwgMHg5MywKLQkweGM3LCAweGVhLCAweDhhLCAweGJmLCAweDk2LCAweGI3LCAweDRhLCAweDEwLCAweDcwLCAweDgzLCAweDc5LCAweGJlLAotCTB4N2UsIDB4MGYsIDB4M2UsIDB4NzUsIDB4Y2QsIDB4MzcsIDB4NDcsIDB4N2YsIDB4ZTgsIDB4NmEsIDB4NTksIDB4NjksCi0JMHhhNywgMHhmNywgMHg2ZSwgMHhkMCwgMHhmYSwgMHg3NiwgMHhmNywgMHg4ZiwgMHg2OCwgMHg5NywgMHhiNCwgMHg5ZiwKLQkweDM4LCAweDUzLCAweGExLCAweDBlLCAweGNjLCAweGNhLCAweGIxLCAweDBhLCAweDY4LCAweGFkLCAweDBkLCAweGJiLAotCTB4ZmEsIDB4OWUsIDB4MDgsIDB4ZjksIDB4YTUsIDB4ZWYsIDB4MGQsIDB4ZTYsIDB4NmIsIDB4NjMsIDB4ZTYsIDB4N2MsCi0JMHg5NywgMHg2ZCwgMHg3OSwgMHg4ZiwgMHg5MSwgMHg3YywgMHg4YiwgMHg3NiwgMHhjNCwgMHgxMSwgMHg2OCwgMHg3ZiwKLQkweDY4LCAweDViLCAweGY4LCAweDJkLCAweDhlLCAweDhmLCAweGJhLCAweGNiLCAweGQ0LCAweDM1LCAweGIwLCAweDRkLAotCTB4MjEsIDB4N2UsIDB4ZjgsIDB4ODIsIDB4ODksIDB4NDcsIDB4ODUsIDB4NzYsIDB4OWUsIDB4ZGYsIDB4NDcsIDB4OGIsCi0JMHhmYywgMHg2NywgMHg2MCwgMHg1NywgMHhmYiwgMHg3NCwgMHhhZiwgMHg0NCwgMHg0ZSwgMHg4NywgMHg3NywgMHg5MCwKLQkweGI4LCAweGM2LCAweGEzLCAweGVhLCAweDhlLCAweGQ5LCAweDZlLCAweGYzLCAweGMzLCAweDI4LCAweDBiLCAweGNmLAotCTB4OGEsIDB4YmIsIDB4Y2MsIDB4NTksIDB4NzEsIDB4MjgsIDB4ZTcsIDB4NzAsIDB4MzQsIDB4NjIsIDB4NTEsIDB4YzgsCi0JMHgzOCwgMHhkYiwgMHhlNywgMHgxNCwgMHg1ZiwgMHg3MywgMHg3MSwgMHhlMiwgMHhhYywgMHg4MywgMHgyNiwgMHg2ZSwKLQkweGMwLCAweGIyLCAweDkyLCAweDBjLCAweGRjLCAweGY5LCAweDYxLCAweGVlLCAweDhkLCAweDc3LCAweDQ3LCAweDI0LAotCTB4ZmMsIDB4OGUsIDB4NDAsIDB4OGQsIDB4MTMsIDB4ZDcsIDB4YjgsIDB4OTEsIDB4ZGYsIDB4NTcsIDB4ZmIsIDB4ZDgsCi0JMHg1NywgMHhmYiwgMHg3NiwgMHhjMiwgMHhlZiwgMHgwOCwgMHhjZSwgMHgzNywgMHgzMywgMHhlYSwgMHg3YiwgMHgwNSwKLQkweDllLCAweDI1LCAweGVjLCAweGYyLCAweDFlLCAweGQ2LCAweDJhLCAweGJmLCAweGE1LCAweGE2LCAweDZjLCAweDliLAotCTB4ZWYsIDB4YTgsIDB4ZmIsIDB4ODcsIDB4ZTUsIDB4ZTUsIDB4YTYsIDB4ZmUsIDB4ZjYsIDB4NDIsIDB4ZGYsIDB4ZWQsCi0JMHgyNSwgMHgzZSwgMHg0YiwgMHhhMiwgMHg5YywgMHg3NywgMHhjNywgMHhmOCwgMHhhZCwgMHgwMywgMHhmZiwgMHg5ZiwKLQkweGMyLCAweDIzLCAweDQ4LCAweDNmLCAweDI1LCAweDFiLCAweDE1LCAweDFkLCAweGNmLCAweDJjLCAweGMzLCAweDdmLAotCTB4MTgsIDB4NTksIDB4NzUsIDB4ZDUsIDB4OTksIDB4Y2IsIDB4YzgsIDB4ZWEsIDB4MGMsIDB4YzYsIDB4MGIsIDB4YmYsCi0JMHg3ZCwgMHg4ZSwgMHgyMywgMHg4ZiwgMHhmNCwgMHg5NSwgMHhjYywgMHgxZSwgMHgwZCwgMHhlZiwgMHg0YiwgMHhmYywKLQkweDU3LCAweDk3LCAweDM2LCAweGExLCAweGQ0LCAweGVjLCAweDQzLCAweDVkLCAweGNiLCAweDYwLCAweDEwLCAweGUyLAotCTB4YmIsIDB4ZjAsIDB4MWIsIDB4YWYsIDB4MTgsIDB4NmQsIDB4NTQsIDB4NDAsIDB4OWQsIDB4OTQsIDB4YzYsIDB4MzgsCi0JMHg4ZCwgMHgwYSwgMHhlZiwgMHg1ZCwgMHhhOCwgMHhmZiwgMHhjMywgMHhlMCwgMHgxNiwgMHhlOSwgMHhhMywgMHgyOSwKLQkweDFkLCAweDlmLCAweDFhLCAweDlmLCAweDk3LCAweDgyLCAweGRiLCAweDI1LCAweDA5LCAweGY1LCAweDdmLCAweDFkLAotCTB4NmMsIDB4Y2MsIDB4M2QsIDB4YmYsIDB4ZDYsIDB4YjcsIDB4MTMsIDB4YzksIDB4NzIsIDB4NmUsIDB4MWMsIDB4OWIsCi0JMHhiZSwgMHg4NywgMHg5ZSwgMHgwZiwgMHhiZiwgMHgxOSwgMHg3MSwgMHhiMiwgMHhiYywgMHhkYiwgMHhjZCwgMHhlZiwKLQkweDllLCAweDk4LCAweDVmLCAweDAyLCAweGNlLCAweDBhLCAweGJmLCAweDczLCAweGQxLCAweGRmLCAweDMxLCAweGNjLAotCTB4MzcsIDB4OGYsIDB4YzgsIDB4ODksIDB4Y2EsIDB4N2UsIDB4N2UsIDB4NmYsIDB4ZTEsIDB4ZWYsIDB4ODIsIDB4NmYsCi0JMHhjNywgMHg5YSwgMHg3ZCwgMHhlYSwgMHg1YiwgMHg4YSwgMHhmOSwgMHgyNiwgMHhlZiwgMHg4ZiwgMHg4NSwgMHhiNiwKLQkweDg3LCAweDZiLCAweDE1LCAweDU3LCAweDY3LCAweDE4LCAweDJmLCAweGE4LCAweDZmLCAweDJkLCAweGY0LCAweDc3LAotCTB4MTYsIDB4OGYsIDB4YTksIDB4ZWYsIDB4MTYsIDB4ZjQsIDB4N2UsIDB4YmYsIDB4MWUsIDB4N2IsIDB4NTMsIDB4MDYsCi0JMHgzZiwgMHgwNywgMHg3ZiwgMHg1MCwgMHhlYiwgMHhkZCwgMHhmYiwgMHgzMiwgMHhiYywgMHgyMywgMHgxOSwgMHgwNCwKLQkweGM3LCAweDdjLCAweGM2LCAweDQ1LCAweDczLCAweGQzLCAweDFiLCAweDk4LCAweGUzLCAweDg1LCAweDNhLCAweDc4LAotCTB4NzgsIDB4OTQsIDB4NzksIDB4YmMsIDB4NDMsIDB4ZDUsIDB4MjMsIDB4ZjksIDB4NDksIDB4ZjUsIDB4MWQsIDB4YmEsCi0JMHhiNSwgMHhlMSwgMHhlZCwgMHg5NywgMHhmMywgMHgzNSwgMHhlZSwgMHgwNSwgMHgwNywgMHhmMywgMHg0ZSwgMHhiOSwKLQkweDBkLCAweGI5LCAweDYxLCAweDgwLCAweDY3LCAweDYwLCAweDg3LCAweDU1LCAweGZiLCAweDcwLCAweGJmLCAweGViLAotCTB4NTgsIDB4YzEsIDB4ZTEsIDB4NGQsIDB4YWQsIDB4NGYsIDB4NzgsIDB4YmYsIDB4YWUsIDB4ZWIsIDB4YWMsIDB4NTgsCi0JMHgxZiwgMHhjZiwgMHgwYywgMHhjMywgMHhkZiwgMHhlNiwgMHg1OCwgMHg2OSwgMHhiNCwgMHg4MywgMHhlYywgMHgyNCwKLQkweGI4LCAweGQ3LCAweDdmLCAweDE1LCAweDM0LCAweDQwLCAweGVmLCAweDk1LCAweDI2LCAweDMxLCAweDNhLCAweDcwLAotCTB4ZDMsIDB4MWMsIDB4ZGIsIDB4NjQsIDB4YzUsIDB4NWUsIDB4NjEsIDB4OWQsIDB4NDEsIDB4YzgsIDB4NWYsIDB4MTcsCi0JMHhlNiwgMHhlMywgMHgwMCwgMHhmZiwgMHgxZiwgMHg5MCwgMHg4NiwgMHhjYiwgMHgzMiwgMHgzZSwgMHgyNywgMHg0YywKLQkweDZjLCAweDQyLCAweDdkLCAweDIzLCAweDBjLCAweGZlLCAweDI1LCAweDk1LCAweDRlLCAweGNhLCAweGI5LCAweDdhLAotCTB4N2MsIDB4ZGUsIDB4ZTEsIDB4NWMsIDB4YTgsIDB4Y2QsIDB4NjIsIDB4MGYsIDB4MzksIDB4MDYsIDB4OGYsIDB4MzksCi0JMHhlOCwgMHhlMywgMHhkNywgMHhlNiwgMHhiYiwgMHg4YywgMHg5MiwgMHgxNCwgMHgzMiwgMHgxYSwgMHg3ZiwgMHg2OCwKLQkweDFiLCAweGMzLCAweGYzLCAweDEyLCAweDA3LCAweGY4LCAweDNmLCAweGRjLCAweDk3LCAweDhmLCAweDFkLCAweGI4LAotCTB4ZjYsIDB4ZmIsIDB4MGQsIDB4NjIsIDB4OTcsIDB4NzQsIDB4ZTIsIDB4MGMsIDB4Y2YsIDB4YjksIDB4YjYsIDB4MWYsCi0JMHg5NCwgMHg3OSwgMHhkMCwgMHg3YywgMHhjYSwgMHhjYywgMHhmMywgMHhmZSwgMHg4YywgMHgyNywgMHg5NywgMHhlYiwKLQkweDY4LCAweDkzLCAweDM5LCAweDg4LCAweDk0LCAweDc3LCAweGZkLCAweDQ4LCAweGYzLCAweDg0LCAweGI5LCAweGM3LAotCTB4OTgsIDB4YzUsIDB4NWMsIDB4MWYsIDB4OTUsIDB4ZDcsIDB4ODAsIDB4YTksIDB4NWYsIDB4YWYsIDB4YTQsIDB4ZmQsCi0JMHhjMywgMHhlYSwgMHg4ZSwgMHg0ZSwgMHgyYSwgMHg3MSwgMHg1ZSwgMHgyNiwgMHg5MiwgMHhmNCwgMHhmYiwgMHg0YSwKLQkweDZlLCAweDJhLCAweDcxLCAweDU5LCAweDc4LCAweGQ3LCAweGU4LCAweGIxLCAweDAxLCAweGZlLCAweDRmLCAweDg3LAotCTB4MDYsIDB4ZWMsIDB4YTEsIDB4YmUsIDB4NzMsIDB4OTQsIDB4NjIsIDB4OWMsIDB4MDQsIDB4ZWYsIDB4YzMsIDB4ZTYsCi0JMHhiYiwgMHgyMiwgMHg4ZSwgMHhjMywgMHhiMiwgMHg2MSwgMHg3OSwgMHhhZCwgMHhkMiwgMHhiMiwgMHhiZiwgMHgxYywKLQkweGM3LCAweDdjLCAweDRiLCAweGNlLCAweGIxLCAweGZlLCAweGVkLCAweDAwLCAweGY1LCAweDEwLCAweGM3LCAweGQzLAotCTB4N2QsIDB4ODQsIDB4NzUsIDB4YzgsIDB4NTcsIDB4YmQsIDB4YzYsIDB4ZjksIDB4OGMsIDB4ZmEsIDB4YWUsIDB4MzUsCi0JMHgyOSwgMHg5NiwgMHgyNSwgMHhkZCwgMHgxZSwgMHhlNywgMHg3ZSwgMHhkMywgMHg4MCwgMHhjNiwgMHg0MCwgMHg2YywKLQkweDk3LCAweDc2LCAweGVmLCAweDUzLCAweGZkLCAweGYxLCAweGFjLCAweDhjLCAweGU3LCAweDQ5LCAweDYxLCAweDNmLAotCTB4YmMsIDB4MzMsIDB4ODQsIDB4NzUsIDB4OGYsIDB4NzMsIDB4YmQsIDB4ZGIsIDB4NjksIDB4ZDAsIDB4ZjYsIDB4ZmYsCi0JMHgzNSwgMHgxNSwgMHhhMywgMHg5ZSwgMHg0NiwgMHg3ZCwgMHhkYSwgMHg2OCwgMHhjOCwgMHg0YiwgMHgzZCwgMHhkMSwKLQkweGZhLCAweDM2LCAweDQyLCAweGYzLCAweDkyLCAweGNmLCAweDhmLCAweGI1LCAweGJlLCAweDRmLCAweGIwLCAweDZmLAotCTB4NzcsIDB4NGQsIDB4NzksIDB4ODgsIDB4NDUsIDB4ODcsIDB4YjEsIDB4NWYsIDB4MWYsIDB4OTUsIDB4YzYsIDB4NWEsCi0JMHgzYSwgMHhmMSwgMHg5OCwgMHg4NCwgMHhmZCwgMHgwNiwgMHg4NywgMHg3OCwgMHg4ZSwgMHgzMCwgMHg5MywgMHg5OSwKLQkweDcwLCAweDk3LCAweDE0LCAweDNkLCAweGE5LCAweDA0LCAweGVmLCAweGRkLCAweDllLCAweGM3LCAweDc4LCAweDhkLAotCTB4NjYsIDB4NjcsIDB4YmMsIDB4MjEsIDB4OTUsIDB4ZGIsIDB4OTEsIDB4YjQsIDB4YWYsIDB4ZDcsIDB4NjYsIDB4NGMsCi0JMHg3NiwgMHhiMCwgMHgzNiwgMHg1ZiwgMHgzMiwgMHg2YiwgMHhmMywgMHg0MSwgMHhmNCwgMHhlZCwgMHhhZCwgMHg0YywKLQkweDRhLCAweDdhLCAweDI1LCAweDlkLCAweDNjLCAweDI1LCAweDNjLCAweDliLCAweDNiLCAweGMwLCAweGI4LCAweDk1LAotCTB4NzUsIDB4N2YsIDB4MjYsIDB4ODksIDB4ZjksIDB4YTYsIDB4MzAsIDB4NWYsIDB4YTQsIDB4NGQsIDB4M2UsIDB4NGYsCi0JMHhjMCwgMHgxZiwgMHhkZiwgMHhjNywgMHhiZCwgMHg3ZCwgMHg4OCwgMHgzYSwgMHg5MywgMHhiYywgMHg5OCwgMHg1MSwKLQkweDY1LCAweDhmLCAweDlhLCAweGJiLCAweDk0LCAweGRmLCAweGUzLCAweGZhLCAweGE4LCAweGI4LCAweGRmLCAweGU1LAotCTB4MjYsIDB4Y2YsIDB4ZWIsIDB4MzQsIDB4N2QsIDB4MDUsIDB4ZDAsIDB4YjcsIDB4YTgsIDB4ZTksIDB4NGIsIDB4Y2UsCi0JMHhiNywgMHhmMCwgMHg2YSwgMHgyYSwgMHg3MSwgMHg0MiwgMHg4OCwgMHg5NywgMHg4OCwgMHg1ZiwgMHg4OCwgMHhlNSwKLQkweDZmLCAweDE5LCAweGQ0LCAweGRmLCAweDdlLCAweGMwLCAweDc3LCAweGJkLCAweDNkLCAweGQ3LCAweDlhLCAweDdiLAotCTB4MzcsIDB4ZWEsIDB4NWUsIDB4ODAsIDB4ZWUsIDB4YTcsIDB4YmMsIDB4MWMsIDB4OTEsIDB4MGYsIDB4NDgsIDB4ZWUsCi0JMHg5MSwgMHg1NCwgMHgzMiwgMHg2NywgMHg3OSwgMHgwNiwgMHgwMywgMHgyMiwgMHhhZCwgMHhmMywgMHg5OSwgMHgzYSwKLQkweGQ3LCAweDMzLCAweGQ4LCAweDgyLCAweDZiLCAweDkzLCAweGMxLCAweDU4LCAweGZhLCAweDNiLCAweDkyLCAweDVkLAotCTB4Y2MsIDB4MmQsIDB4YWYsIDB4NjQsIDB4ZWQsIDB4ZjcsIDB4YjEsIDB4ODcsIDB4ZjQsIDB4ZmYsIDB4YjMsIDB4MzgsCi0JMHgwZiwgMHgzZSwgMHg5NiwgMHhjMSwgMHhjNywgMHhjNywgMHhhZiwgMHhjMywgMHg2MCwgMHg1ZCwgMHgyZCwgMHgwYywKLQkweGI2LCAweGFiLCAweGM2LCAweGIzLCAweDQwLCAweDUzLCAweGMxLCAweDI1LCAweGZlLCAweDJhLCAweGI3LCAweDY0LAotCTB4ODUsIDB4MzQsIDB4NGQsIDB4ZjIsIDB4N2YsIDB4ZDIsIDB4YzgsIDB4Y2IsIDB4MTksIDB4YWUsIDB4MDcsIDB4MzAsCi0JMHgxOCwgMHhmYSwgMHhkYiwgMHhiOCwgMHgyYSwgMHg0YiwgMHg5OCwgMHhiZiwgMHg5MiwgMHg1ZiwgMHhjOCwgMHg2ZSwKLQkweGNhLCAweDc1LCAweDJjLCAweGFlLCAweDA1LCAweGZiLCAweDEzLCAweGViLCAweDIyLCAweDY4LCAweGQ5LCAweDU1LAotCTB4NzIsIDB4YTAsIDB4NjUsIDB4NjAsIDB4YjcsIDB4MWUsIDB4N2IsIDB4MDcsIDB4MTksIDB4ZTAsIDB4M2MsIDB4MjksCi0JMHg3ZiwgMHhhMSwgMHhlYywgMHhiNSwgMHhiZSwgMHgzOSwgMHg4NywgMHg0ZiwgMHg1YiwgMHg5MiwgMHhkYiwgMHhlZSwKLQkweGM4LCAweDRhLCAweDdlLCAweDg1LCAweDY3LCAweDRiLCAweDYyLCAweDRkLCAweGRjLCAweDQxLCAweDk5LCAweDI0LAotCTB4NGUsIDB4MDAsIDB4ODYsIDB4NGMsIDB4OTAsIDB4YzcsIDB4MWEsIDB4MGYsIDB4Y2UsIDB4M2YsIDB4YjcsIDB4MWYsCi0JMHhiZiwgMHg3MywgMHgwMywgMHhiYywgMHg1YiwgMHg5MiwgMHhkZiwgMHhhMiwgMHhiZSwgMHgxMiwgMHhlYiwgMHhkNiwKLQkweDNiLCAweGI0LCAweDRmLCAweDc4LCAweDI1LCAweDBlLCAweDllLCAweGEzLCAweDdjLCAweGU0LCAweGNiLCAweGRkLAotCTB4ZDAsIDB4NTcsIDB4OGUsIDB4OTksIDB4MzcsIDB4ZGYsIDB4YzksIDB4NTcsIDB4YTQsIDB4Y2YsIDB4NzEsIDB4NWMsCi0JMHhlZCwgMHg1ZiwgMHhlOCwgMHgzOCwgMHgyMCwgMHhmNywgMHg0NSwgMHg0OSwgMHgxNiwgMHhhMSwgMHgwZiwgMHgxNiwKLQkweDMyLCAweDMxLCAweDM5LCAweDVjLCAweDhiLCAweGNiLCAweDkxLCAweGNhLCAweGI0LCAweDdjLCAweGIxLCAweGQyLAotCTB4YTcsIDB4NzAsIDB4YzMsIDB4OWYsIDB4ZmIsIDB4ZTksIDB4YzQsIDB4YjgsIDB4MTUsIDB4YzgsIDB4ZmQsIDB4YzAsCi0JMHgzZiwgMHhmMywgMHhjMywgMHhkZCwgMHhmMiwgMHhmYSwgMHhhNCwgMHhhNSwgMHhmNCwgMHhkZSwgMHgxNSwgMHg3ZSwKLQkweDE4LCAweGVkLCAweGYyLCAweDBlLCAweDI3LCAweGU3LCAweDAzLCAweGJkLCAweDZmLCAweGMxLCAweDE3LCAweGIwLAotCTB4NzgsIDB4NmYsIDB4YWYsIDB4NGYsIDB4MWUsIDB4ZjAsIDB4OTEsIDB4ZGUsIDB4ZTgsIDB4YWIsIDB4ZWYsIDB4NjIsCi0JMHhjZCwgMHg3NywgMHg1YywgMHg0NiwgMHg4ZiwgMHg5YywgMHgzMywgMHg2MywgMHgxZiwgMHgzMSwgMHg2OSwgMHg2YSwKLQkweGIwLCAweDhkLCAweDE2LCAweDZiLCAweDMxLCAweDEzLCAweDUxLCAweGYzLCAweDJiLCAweGQ3LCAweGE5LCAweGRmLAotCTB4ZDgsIDB4MDYsIDB4ZmEsIDB4MDQsIDB4N2IsIDB4YjcsIDB4MGIsIDB4N2MsIDB4ZDksIDB4ODAsIDB4N2UsIDB4MjksCi0JMHhkNiwgMHhjNCwgMHhkYSwgMHhjYSwgMHgwMCwgMHg1MSwgMHg3YiwgMHgxYSwgMHg3ZiwgMHgxNiwgMHgyMSwgMHg1ZiwKLQkweDBiLCAweDM1LCAweGVhLCAweGJmLCAweDIzLCAweDkwLCAweDA1LCAweGRhLCAweDZmLCAweDg3LCAweGRmLCAweGRjLAotCTB4MDAsIDB4NDMsIDB4OTgsIDB4M2IsIDB4MWYsIDB4MzEsIDB4YzYsIDB4NDAsIDB4ZGEsIDB4NzUsIDB4NTgsIDB4ZjgsCi0JMHgzZiwgMHg2NywgMHgzZSwgMHgzZSwgMHgyOCwgMHhmZCwgMHgyNSwgMHhhYywgMHg0YiwgMHg4OCwgMHhiOSwgMHhjMSwKLQkweDUzLCAweDhjLCAweDk5LCAweDU3LCAweGViLCAweDE0LCAweGFlLCAweDA5LCAweDc1LCAweDRmLCAweDg4LCAweDM3LAotCTB4ZGEsIDB4ZmQsIDB4MjMsIDB4ZWUsIDB4NTksIDB4ZGEsIDB4MGIsIDB4MjksIDB4NDUsIDB4ODEsIDB4NjksIDB4N2IsCi0JMHg1NywgMHg2MCwgMHhiYiwgMHg2YiwgMHg1OSwgMHhjOCwgMHgwYSwgMHhlZiwgMHhlMSwgMHg0ZiwgMHg0YiwgMHgxOSwKLQkweGQ4LCAweGVkLCAweGUzLCAweGZlLCAweGU3LCAweGM0LCAweDdlLCAweGY2LCAweGEwLCAweDZjLCAweGQ0LCAweDdhLAotCTB4YzEsIDB4MGYsIDB4ZGEsIDB4ODUsIDB4MmUsIDB4ZTUsIDB4NTMsIDB4NWYsIDB4MzksIDB4NGEsIDB4N2IsIDB4NDcsCi0JMHg1YiwgMHhhMiwgMHhkNywgMHg2MiwgMHhiNywgMHgwZSwgMHgyNywgMHgzOCwgMHhhNiwgMHhmMywgMHg3NiwgMHhlYSwKLQkweGExLCAweDJkLCAweGU0LCAweGY3LCAweDM0LCAweDVkLCAweGM2LCAweDJlLCAweGM3LCAweGEwLCAweGJiLCAweGQ3LAotCTB4YTUsIDB4YTEsIDB4ZmMsIDB4NzMsIDB4Y2UsIDB4OWYsIDB4MzYsIDB4YTgsIDB4OGIsIDB4ZjcsIDB4YzcsIDB4YWMsCi0JMHg4NiwgMHhjNywgMHhiOSwgMHhiNywgMHhkYiwgMHgyMCwgMHg4ZCwgMHgzYiwgMHhkYywgMHgzYiwgMHgzOSwgMHgxZSwKLQkweGVmLCAweDI2LCAweDcwLCAweDhlLCAweDcxLCAweGU5LCAweDNhLCAweGYzLCAweGE4LCAweGQ4LCAweGYwLCAweDViLAotCTB4MjIsIDB4YWIsIDB4YzQsIDB4N2EsIDB4ZDcsIDB4ZmEsIDB4MmUsIDB4OTEsIDB4NzMsIDB4NTEsIDB4ZjMsIDB4ZmQsCi0JMHhmMCwgMHhhOCwgMHhjNiwgMHgzMiwgMHgxOSwgMHhhNCwgMHg4ZCwgMHhmMCwgMHg5YiwgMHg2MiwgMHhmZSwgMHhkYSwKLQkweGVkLCAweDY2LCAweGU4LCAweDViLCAweGVjLCAweDY5LCAweDRiLCAweGYxLCAweGY3LCAweDdmLCAweDAwLCAweGI2LAotCTB4OWQsIDB4M2MsIDB4MzIsIDB4NDQsIDB4NGIsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwkweGNkLCAweDdjLCAweDdmLCAweDZjLCAweDVjLCAweGQ3LCAweDc1LCAweGU2LCAweDc5LCAweDZmLCAweGRlLCAweDkwLAorCTB4NDMsIDB4OGEsIDB4YTIsIDB4MWUsIDB4OTksIDB4MzEsIDB4MzMsIDB4OGUsIDB4ZDgsIDB4N2EsIDB4ODYsIDB4ZjMsCisJMHg0OCwgMHhkMSwgMHgyMSwgMHhlMywgMHgzZSwgMHgzMywgMHg2MywgMHg5OSwgMHg3NiwgMHhhNiwgMHhkNiwgMHg2NCwKKwkweDY2LCAweDI4LCAweDJiLCAweDBlLCAweDY5LCAweGQwLCAweDhlLCAweDgyLCAweDRkLCAweDAxLCAweDAzLCAweGU1LAorCTB4MGUsIDB4YTksIDB4NTQsIDB4ZDksIDB4ZjUsIDB4MjIsIDB4ZGEsIDB4MzQsIDB4NDUsIDB4OGEsIDB4YTIsIDB4ODgsCisJMHgyNiwgMHgyNCwgMHhlNSwgMHgyYSwgMHhjZCwgMHg4OCwgMHgxYywgMHhjYiwgMHgzNCwgMHgxYiwgMHgxNCwgMHg1ZSwKKwkweDY0LCAweDNjLCAweGE0LCAweDE0LCAweGI3LCAweDFkLCAweDg5LCAweDcyLCAweGUyLCAweDJkLCAweGJjLCAweDU4LAorCTB4MDcsIDB4NjYsIDB4YTksIDB4MWYsIDB4NGUsIDB4ODMsIDB4MTQsIDB4ZjAsIDB4MmUsIDB4YmMsIDB4NjgsIDB4NjAsCisJMHhhNCwgMHg4MCwgMHgyMCwgMHhiYiwgMHg4ZCwgMHhiMywgMHhjOCwgMHg2MiwgMHg4MywgMHhkZCwgMHgwMCwgMHg3MSwKKwkweDAyLCAweDI3LCAweDZmLCAweGJmLCAweGVmLCAweGRlLCAweGZiLCAweGM4LCAweGQxLCAweDg4LCAweDc2LCAweGQyLAorCTB4ZmMsIDB4YjUsIDB4MDQsIDB4MDYsIDB4ZjcsIDB4ZmQsIDB4YjgsIDB4M2YsIDB4Y2UsIDB4M2QsIDB4ZjcsIDB4ZGMsCisJMHg3MywgMHhiZSwgMHg3MywgMHhlZSwgMHg3OSwgMHg3YywgMHg0MCwgMHhhNCwgMHg1MywgMHhjYywgMHhkZiwgMHg1ZSwKKwkweGZjLCAweDMyLCAweGZmLCAweGUxLCAweGIzLCAweGIzLCAweDYzLCAweDc3LCAweDY1LCAweGVlLCAweGMyLCAweGU1LAorCTB4ODcsIDB4ZWQsIDB4ZjcsIDB4M2IsIDB4MGUsIDB4OWYsIDB4NDcsIDB4ZjAsIDB4OGIsIDB4ZTMsIDB4MzcsIDB4NjYsCisJMHhhZSwgMHg3NywgMHhmYiwgMHg3MywgMHhmMSwgMHgzYiwgMHg2OCwgMHg4OSwgMHhjYywgMHhmYywgMHg0ZiwgMHgxMSwKKwkweGFiLCAweGU1LCAweDVkLCAweGVjLCAweDVkLCAweGRhLCAweGJjLCAweGQ3LCAweDlmLCAweGZkLCAweDFiLCAweGI0LAorCTB4ZjksIDB4ZDcsIDB4ZmUsIDB4NDUsIDB4MzQsIDB4ZDksIDB4NmEsIDB4ZGUsIDB4ZmMsIDB4NDksIDB4Y2MsIDB4Y2UsCisJMHhjZSwgMHg0YywgMHhlNiwgMHgzZCwgMHg4OSwgMHg0NSwgMHhiMiwgMHg0NywgMHhhNywgMHg2NiwgMHgzZCwgMHg5MSwKKwkweDVjLCAweDYzLCAweDI0LCAweDU5LCAweDkwLCAweDVmLCAweDA0LCAweGU1LCAweGI4LCAweDIzLCAweDdjLCAweGZlLAorCTB4NWIsIDB4ZDksIDB4NzcsIDB4YmUsIDB4ZjYsIDB4YWQsIDB4N2IsIDB4NTMsIDB4M2YsIDB4YWUsIDB4NDUsIDB4MjQsCisJMHhlNiwgMHg2NiwgMHhkZiwgMHgxNiwgMHg3NywgMHg0OCwgMHg2MiwgMHhmZCwgMHg2OCwgMHhmMywgMHhjYywgMHg4MSwKKwkweDU3LCAweDZkLCAweGU5LCAweDBlLCAweGZiLCAweDcyLCAweDY3LCAweDIyLCAweDU5LCAweDk5LCAweDNlLCAweDU2LAorCTB4MzksIDB4MTksIDB4ZDgsIDB4OWUsIDB4OTQsIDB4OWQsIDB4YWMsIDB4MzcsIDB4NWMsIDB4OTcsIDB4YWUsIDB4ZjEsCisJMHg3MywgMHg5OSwgMHg3YiwgMHgwNSwgMHhmNywgMHhkMywgMHhjNywgMHgxYSwgMHgzMSwgMHg5OSwgMHg2ZiwgMHg5NCwKKwkweGJiLCAweDZjLCAweGNmLCAweDQzLCAweDI5LCAweGIxLCAweGI2LCAweGVjLCAweDYyLCAweGVjLCAweDlhLCAweGM3LAorCTB4YjEsIDB4YmYsIDB4OGEsIDB4YjEsIDB4ZjcsIDB4NGIsIDB4ZDQsIDB4MGIsIDB4ODIsIDB4NzMsIDB4MTgsIDB4ZmIsCisJMHg3MCwgMHhlMywgMHgxNywgMHhjMSwgMHhiMywgMHg4ZSwgMHgxZSwgMHhkNywgMHhjZSwgMHg5ZSwgMHg4OCwgMHhiMCwKKwkweGI0LCAweGIyLCAweGI1LCAweGM5LCAweDgxLCAweDA2LCAweGVmLCAweDhiLCAweGVkLCAweDlhLCAweDRlLCAweGJmLAorCTB4MTMsIDB4NzQsIDB4YzYsIDB4OWMsIDB4ZWMsIDB4ODksIDB4Y2UsIDB4NDUsIDB4OTQsIDB4ZDEsIDB4NmMsIDB4N2MsCisJMHhlYywgMHg5YywgMHhhYSwgMHhiNywgMHg2ZSwgMHhlYSwgMHgzZCwgMHgxZSwgMHhkNSwgMHhlZCwgMHhkZSwgMHg5YSwKKwkweDFjLCAweDZhLCAweGIwLCAweGZjLCAweGM5LCAweGU0LCAweGEwLCAweDJhLCAweGRmLCAweDk5LCAweDRjLCAweGFiLAorCTB4NTIsIDB4YTYsIDB4MDYsIDB4NTQsIDB4ZTksIDB4NGMsIDB4NzksIDB4YWEsIDB4N2MsIDB4YzYsIDB4M2MsIDB4N2YsCisJMHg2ZSwgMHgzMiwgMHhhOSwgMHhjYSwgMHg4NiwgMHgyOSwgMHgyZiwgMHg5OSwgMHhmMiwgMHgwNSwgMHg1MywgMHhiZSwKKwkweDY4LCAweGNhLCAweDk3LCAweDRjLCAweGI5LCAweDY5LCAweGNhLCAweDJiLCAweDkzLCAweGJhLCAweDlmLCAweDZmLAorCTB4OWIsIDB4ZmIsIDB4ZWYsIDB4OWEsIDB4ZjIsIDB4NTUsIDB4NTMsIDB4YmUsIDB4NjYsIDB4Y2EsIDB4ZWYsIDB4OTksCisJMHhmMiwgMHhmYiwgMHg4NiwgMHhhZSwgMHhlYiwgMHhhNiwgMHg3YywgMHhkMywgMHg5NCwgMHgzZiwgMHgzMiwgMHhlZiwKKwkweDdmLCAweDZjLCAweGU4LCAweDdkLCAweDFiLCAweDc0LCAweGZkLCAweDQ5LCAweGQ0LCAweGM4LCAweDJhLCAweGU2LAorCTB4OWQsIDB4OTQsIDB4ZDksIDB4OGEsIDB4MjMsIDB4ZjMsIDB4Y2IsIDB4MTEsIDB4MjksIDB4YTgsIDB4MzUsIDB4ZmMsCisJMHhjYSwgMHg1ZSwgMHhlOSwgMHg3NCwgMHg2NCwgMHg2MSwgMHgyMywgMHgyNiwgMHhkNywgMHg5NSwgMHg4OCwgMHhiZSwKKwkweDE1LCAweDdjLCAweGViLCAweDgwLCAweDk0LCAweGVkLCAweGFjLCAweDJiLCAweDk3LCAweDM2LCAweGUyLCAweGYyLAorCTB4ZjIsIDB4ODYsIDB4NTgsIDB4ZDMsIDB4OTksIDB4MGUsIDB4YjEsIDB4Y2YsIDB4N2UsIDB4NDAsIDB4NzIsIDB4YWUsCisJMHgyNSwgMHgxMSwgMHhjNSwgMHhkMywgMHhhNCwgMHhlNCwgMHgyYiwgMHg3ZCwgMHhiOCwgMHg0ZiwgMHgyNSwgMHg0NCwKKwkweGFlLCAweGVlLCAweGQ1LCAweGViLCAweDE3LCAweDkzLCAweGM4LCAweDJhLCAweGQ3LCAweGU0LCAweGZlLCAweGE5LAorCTB4NmIsIDB4MmIsIDB4MDksIDB4NzEsIDB4OTYsIDB4NDYsIDB4MzEsIDB4NDYsIDB4OTcsIDB4NDQsIDB4NTcsIDB4YTUsCisJMHgzZiwgMHgyMiwgMHg4MywgMHg4OSwgMHg0ZiwgMHhhMywgMHg0NiwgMHhiMSwgMHhlMSwgMHhjOCwgMHg0NCwgMHhjMywKKwkweDEyLCAweGM3LCAweDhiLCAweDQxLCAweDNlLCAweGJhLCAweGYwLCAweDczLCAweGYxLCAweDhiLCAweGUzLCAweDk3LAorCTB4YzAsIDB4ZWYsIDB4NDcsIDB4ZTgsIDB4YTcsIDB4NWYsIDB4MGEsIDB4MGQsIDB4ZjYsIDB4ODksIDB4NzEsIDB4OTcsCisJMHgzMSwgMHhmZSwgMHg3MiwgMHhjYSwgMHg5ZCwgMHgxMSwgMHhkMiwgMHg5NSwgMHg5MCwgMHg2ZiwgMHgxZCwgMHgyMCwKKwkweDVkLCAweDJlLCAweGU5LCAweDAxLCAweDZkLCAweDMxLCAweDJiLCAweGJmLCAweDIyLCAweDI3LCAweDBhLCAweGJlLAorCTB4MjQsIDB4NmQsIDB4YWYsIDB4NTMsIDB4NGEsIDB4YWUsIDB4OTUsIDB4OWMsIDB4MWIsIDB4ZWUsIDB4OTUsIDB4ZjIsCisJMHg1MSwgMHhiYywgMHg1ZiwgMHg5NiwgMHg5YywgMHg4ZCwgMHhmZSwgMHg0YiwgMHhhZSwgMHhjYywgMHhlOCwgMHg3NywKKwkweDdjLCAweGY2LCAweDM2LCAweGY2LCAweDZhLCAweGNhLCAweGE1LCAweGQwLCAweGJlLCAweGJjLCAweGZjLCAweGI3LAorCTB4YjgsIDB4NjYsIDB4N2YsIDB4M2YsIDB4NzcsIDB4MzQsIDB4ZGQsIDB4M2YsIDB4YzUsIDB4M2QsIDB4OWYsIDB4MGYsCisJMHg5OSwgMHg3OSwgMHhmMCwgMHg5YSwgMHg3NSwgMHhjMywgMHg3MSwgMHhjMywgMHhmOSwgMHg3MiwgMHhmYywgMHg2MSwKKwkweGNjLCAweDk5LCAweDM0LCAweDg0LCAweDczLCAweDk2LCAweDcyLCAweDE0LCAweGI0LCAweGQ0LCAweDU3LCAweGJhLAorCTB4YWMsIDB4YjUsIDB4OTUsIDB4NTEsIDB4NzksIDB4NjIsIDB4ZjksIDB4MDEsIDB4YzksIDB4ZmIsIDB4NDEsIDB4MzAsCisJMHhlYiwgMHg0YiwgMHhkYywgMHg5NiwgMHg0MSwgMHhiNywgMHg4MCwgMHgwYSwgMHg1YiwgMHgwZCwgMHhiMSwgMHhlYSwKKwkweDE1LCAweDg5LCAweGI1LCAweDgzLCAweDJmLCAweDNmLCAweDU4LCAweDYxLCAweGRmLCAweDBlLCAweDllLCAweGY1LAorCTB4YTEsIDB4N2UsIDB4YjcsIDB4YjUsIDB4YmUsIDB4MDIsIDB4ZmEsIDB4YjMsIDB4ZTQsIDB4NGYsIDB4MTAsIDB4MmMsCisJMHhmYSwgMHg4MywgMHg4OSwgMHgzOSwgMHg4YywgMHg3OSwgMHhiOSwgMHgzMSwgMHgzOCwgMHg3ZSwgMHg0MywgMHg1YywKKwkweGY0LCAweGQ5LCAweDhiLCAweDNhLCAweGU0LCAweDE1LCAweGZiLCAweDYyLCAweDlmLCAweGVjLCAweGFmLCAweDBiLAorCTB4NmQsIDB4ZTMsIDB4NzgsIDB4NDcsIDB4YmEsIDB4ODIsIDB4MjAsIDB4ZWYsIDB4YmIsIDB4YmMsIDB4OTcsIDB4NGQsCisJMHhmMCwgMHg2ZiwgMHg5MywgMHhmYywgMHhlYiwgMHhlYywgMHg5NywgMHg1NywgMHgxYSwgMHgxYywgMHg2MywgMHgzNywKKwkweGRhLCAweDQ3LCAweGZlLCAweDNmLCAweGE0LCAweDNkLCAweDgxLCAweGZlLCAweGUzLCAweDI4LCAweGY3LCAweDU4LAorCTB4ZjUsIDB4NmEsIDB4ODAsIDB4ZjEsIDB4MTMsIDB4YjgsIDB4ZGUsIDB4NmQsIDB4MWUsIDB4ZDcsIDB4ZDUsIDB4ZGEsCisJMHg1ZiwgMHhjMiwgMHhkYSwgMHhiYiwgMHhkOSwgMHhiOCwgMHgzYywgMHhiZiwgMHhkMSwgMHg4ZiwgMHg3OSwgMHgyNCwKKwkweGU0LCAweDFiLCAweDkwLCAweGNkLCAweDllLCAweDgzLCAweDdiLCAweDI0LCAweDBkLCAweGQ5LCAweGU0LCAweDlhLAorCTB4OGYsIDB4YWQsIDB4Y2UsIDB4NDksIDB4MjksIDB4OWUsIDB4MWEsIDB4YTYsIDB4MWUsIDB4Y2QsIDB4OGYsIDB4ZWQsCisJMHhjMywgMHg3YywgMHhiNSwgMHhiNiwgMHgxYSwgMHg1OCwgMHhjYSwgMHhlZCwgMHhiNywgMHhlNSwgMHg5MCwgMHhkOCwKKwkweDU5LCAweDhjLCAweDliLCAweDE5LCAweDAxLCAweDJkLCAweDExLCAweGJjLCAweDhiLCAweDhiLCAweGI3LCAweDlhLAorCTB4YzMsIDB4YjMsIDB4NTQsIDB4YTIsIDB4MDQsIDB4MWEsIDB4ZTcsIDB4NDEsIDB4NjMsIDB4NDksIDB4Y2EsIDB4NjIsCisJMHg1ZiwgMHg3YywgMHhjZSwgMHgwYSwgMHhmNywgMHg4YSwgMHhlNiwgMHhkZCwgMHhiMCwgMHhlOSwgMHg2NywgMHg1YiwKKwkweGNlLCAweDJkLCAweDdiLCAweGI1LCAweGNiLCAweDhhLCAweGFjLCAweDhlLCAweGNhLCAweGE5LCAweDVkLCAweDc4LAorCTB4NTYsIDB4MDcsIDB4Y2YsIDB4ZWMsIDB4YTUsIDB4NzAsIDB4MWYsIDB4MzgsIDB4YjgsIDB4ZWYsIDB4NDMsIDB4ZGQsCisJMHg2ZSwgMHhjYiwgMHg1OSwgMHhiZCwgMHg5NSwgMHg1ZiwgMHg2YiwgMHg4ZCwgMHg0MSwgMHg3ZiwgMHgwYiwgMHhmYywKKwkweGIyLCAweDU3LCAweDdiLCAweDUxLCAweGU3LCAweDU2LCAweDdlLCAweGQ1LCAweGMxLCAweDJmLCAweDdiLCAweDU1LAorCTB4ZjMsIDB4YWEsIDB4MGUsIDB4NWUsIDB4ZDksIDB4NGIsIDB4NzEsIDB4OTQsIDB4N2IsIDB4MmMsIDB4ZmIsIDB4YWMsCisJMHhlNiwgMHg1NSwgMHhkZCwgMHhlYywgMHg5OSwgMHhmMywgMHg0YSwgMHg1ZiwgMHhlNSwgMHg0MCwgMHhhYiwgMHgyNSwKKwkweDVhLCAweDY3LCAweGU1LCAweDg0LCAweGJhLCAweDI5LCAweDkyLCAweDJkLCAweDYyLCAweGFmLCAweGRiLCAweGUwLAorCTB4ODUsIDB4MjMsIDB4YzUsIDB4MzEsIDB4NGIsIDB4NjYsIDB4ZDUsIDB4YmIsIDB4YTIsIDB4YTQsIDB4MWIsIDB4MWYsCisJMHgwMCwgMHgyMywgMHg0NywgMHg4NiwgMHg2MSwgMHgyOSwgMHhjYSwgMHg2ZCwgMHhkOSwgMHgxNywgMHhlZCwgMHhhZCwKKwkweDRhLCAweDRjLCAweDBhLCAweDRlLCAweDUyLCAweGJjLCAweDI1LCAweGE1LCAweGM3LCAweDliLCAweGZhLCAweDk5LAorCTB4NDEsIDB4M2YsIDB4ZGYsIDB4MDEsIDB4M2YsIDB4MmMsIDB4ZTgsIDB4NTYsIDB4YmUsIDB4N2IsIDB4NGMsIDB4ZWQsCisJMHhmYiwgMHhmNCwgMHhhYSwgMHgyMywgMHg4MywgMHg0YiwgMHhhYywgMHg1MywgMHhiNiwgMHhhZiwgMHgzNCwgMHhkZSwKKwkweDA5LCAweDc0LCAweGJmLCAweDhmLCAweDcxLCAweDRjLCAweGQ3LCAweGNlLCAweDJlLCAweGRhLCAweDk3LCAweGQ3LAorCTB4NGYsIDB4ZGIsIDB4NTcsIDB4MWIsIDB4ZTgsIDB4YjcsIDB4YzEsIDB4YjUsIDB4YzAsIDB4NWEsIDB4MmQsIDB4NjMsCisJMHhhZCwgMHg5NiwgMHhiMSwgMHg2ZSwgMHg2NiwgMHg0ZiwgMHhkNywgMHhkNCwgMHhkZSwgMHg0YSwgMHg5YSwgMHg3NSwKKwkweDI1LCAweDBkLCAweDVjLCAweGRiLCAweDA0LCAweGQ2LCAweDk0LCAweDZiLCAweDJiLCAweGQ2LCAweGFiLCAweDk5LAorCTB4M2QsIDB4MTIsIDB4MzksIDB4MWIsIDB4NTEsIDB4NmIsIDB4ZGEsIDB4YjMsIDB4ZmEsIDB4OTEsIDB4ZWQsIDB4MzUsCisJMHgxZCwgMHg2OCwgMHg1YSwgMHg1MywgMHhmYiwgMHg1ZCwgMHhkNiwgMHhkNCwgMHhkOSwgMHg2NSwgMHg0ZCwgMHhiNywKKwkweDFhLCAweDNmLCAweDMxLCAweDZiLCAweGZhLCAweDczLCAweDMxLCAweGIyLCAweGZmLCAweDllLCAweGZjLCAweDFhLAorCTB4MDAsIDB4YmYsIDB4YmMsIDB4NWYsIDB4ODMsIDB4NWYsIDB4Y2UsIDB4YWUsIDB4ZmMsIDB4ZWEsIDB4YjMsIDB4NWIsCisJMHhmOSwgMHgxNSwgMHgwMSwgMHhiZiwgMHhhMiwgMHhiZiwgMHgzNiwgMHhiZiwgMHhjMCwgMHg4NywgMHg1ZCwgMHg3OSwKKwkweDE1LCAweDgzLCAweGRlLCAweDJiLCAweDRiLCAweDNlLCAweDIzLCAweDkyLCAweGFmLCAweDZhLCAweDVkLCAweDVkLAorCTB4NTYsIDB4M2EsIDB4OWIsIDB4YmEsIDB4MmEsIDB4ZDQsIDB4ZDksIDB4ZDQsIDB4ZDcsIDB4NmEsIDB4OWYsIDB4NTgsCisJMHg4NSwgMHg0YSwgMHgxMiwgMHhiYSwgMHhkNCwgMHg0MSwgMHhmOSwgMHgxYywgMHhjYSwgMHgzZCwgMHhkNiwgMHg3NCwKKwkweGI1LCAweDFmLCAweDc2LCAweDM2LCAweDEwLCAweDc3LCAweDJjLCAweGI0LCAweDk3LCAweGU1LCAweDg0LCAweDhiLAorCTB4YjUsIDB4NzEsIDB4ZWYsIDB4OGEsIDB4OGEsIDB4ZjQsIDB4YTUsIDB4YzAsIDB4YTcsIDB4MTQsIDB4ZGUsIDB4YTcsCisJMHgxMiwgMHgzOSwgMHhjOSwgMHhkYSwgMHgyMSwgMHhhZSwgMHhjOSwgMHg1NywgMHgzYSwgMHhkZSwgMHhjZSwgMHhhOSwKKwkweDJiLCAweDNlLCAweDY3LCAweGJiLCAweDBjLCAweDllLCAweDQ1LCAweDY1LCAweDA2LCAweDc2LCAweGEwLCAweGU4LAorCTB4NzEsIDB4M2MsIDB4ZjYsIDB4OWYsIDB4OWMsIDB4ZTEsIDB4YjgsIDB4ODUsIDB4NDYsIDB4YTgsIDB4YjMsIDB4MjUsCisJMHgwNywgMHgxYiwgMHg4ZSwgMHg3NywgMHhkYywgMHhiNywgMHhlMywgMHg1NiwgMHg0MSwgMHhkOSwgMHhhMCwgMHg4YywKKwkweDc4LCAweDhkLCAweDY2LCAweGZiLCAweGIyLCAweDRkLCAweDI3LCAweGY2LCAweDczLCAweDBlLCAweDcyLCAweDRkLAorCTB4ZGEsIDB4OTIsIDB4ZDgsIDB4N2IsIDB4YzcsIDB4MjIsIDB4ZTEsIDB4ZmEsIDB4MzgsIDB4ZDksIDB4NzEsIDB4ODEsCisJMHg1ZCwgMHg5NiwgMHhmOSwgMHgwYSwgMHhmYiwgMHhmYiwgMHg2MywgMHgyYiwgMHg3MiwgMHgzMSwgMHhlYywgMHg5ZiwKKwkweDdjLCAweDY0LCAweGRmLCAweGJhLCAweGJmLCAweGY5LCAweGM2LCAweDViLCAweDQ2LCAweDM3LCAweDI4LCAweDViLAorCTB4ODUsIDB4ZmUsIDB4Y2EsIDB4NGQsIDB4ZmQsIDB4OTUsIDB4YWQsIDB4YzgsIDB4OTIsIDB4ZWMsIDB4NTMsIDB4ZjYsCisJMHhlMCwgMHgyOCwgMHhmOSwgMHg3NywgMHgxYSwgMHhlZiwgMHhhZSwgMHg0YiwgMHg4NCwgMHgzMiwgMHhhMywgMHhmNiwKKwkweDE4LCAweGY3LCAweGZiLCAweDk3LCAweDM4LCAweGRmLCAweDI2LCAweGRlLCAweDRlLCAweGMzLCAweGM2LCAweDcxLAorCTB4N2YsIDB4NjEsIDB4OGQsIDB4ZTMsIDB4N2MsIDB4N2UsIDB4YzgsIDB4ZDAsIDB4ZTQsIDB4NDgsIDB4NGUsIDB4ZGQsCisJMHg3ZiwgMHg2MywgMHg0ZiwgMHhhOCwgMHgzZiwgMHhiMSwgMHg5ZiwgMHg0MSwgMHhkYiwgMHg4YiwgMHg2YSwgMHg4ZSwKKwkweDc2LCAweDM2LCAweDBiLCAweGRlLCAweDM0LCAweGQzLCAweGM4LCAweDc5LCAweDY3LCAweGIxLCAweGM2LCAweGExLAorCTB4MGUsIDB4MGIsIDB4ZDcsIDB4OGEsIDB4YjgsIDB4YzYsIDB4YjEsIDB4MTYsIDB4MmEsIDB4NWQsIDB4YjAsIDB4OGYsCisJMHgzMSwgMHg2MywgMHg4MywgMHhkOSwgMHg3ZSwgMHgxMSwgMHhlZCwgMHhmOSwgMHg5YywgMHg2ZCwgMHhiYiwgMHg2MCwKKwkweDhmLCAweGQ5LCAweDdlLCAweGQxLCAweGI0LCAweGRmLCAweGIxLCAweGNiLCAweGRjLCAweDJiLCAweGI0LCAweGM5LAorCTB4NTcsIDB4MzIsIDB4YzAsIDB4NDIsIDB4MmIsIDB4YjYsIDB4MTQsIDB4N2MsIDB4ZTAsIDB4MWMsIDB4YmYsIDB4ZGYsCisJMHhlYywgMHgwYiwgMHgyZCwgMHg5YiwgMHgxZiwgMHg3NSwgMHgyYywgMHg2OSwgMHhmNywgMHg3NiwgMHg5MywgMHhjZCwKKwkweDdmLCAweGIwLCAweGI1LCAweGFkLCAweGRiLCAweDkxLCAweGNkLCAweDA1LCAweGU4LCAweGE4LCAweDUzLCAweDkwLAorCTB4OTUsIDB4YzUsIDB4ZWQsIDB4N2EsIDB4OTQsIDB4NGIsIDB4MjUsIDB4YTMsIDB4OTAsIDB4Y2QsIDB4ZDQsIDB4MzgsCisJMHhhNywgMHg3OSwgMHhhNSwgMHhkMSwgMHgyYywgMHhhMywgMHg2MSwgMHgxZiwgMHgzMSwgMHgyNSwgMHgwNywgMHg3YSwKKwkweDljLCAweGM1LCAweGE2LCAweDcxLCAweDE2LCAweDliLCAweGM2LCAweDU5LCAweDMyLCAweGQ4LCAweDhlLCAweGZkLAorCTB4NjgsIDB4YmIsIDB4N2EsIDB4ZmQsIDB4MjYsIDB4N2IsIDB4Y2UsIDB4MzUsIDB4ZmIsIDB4MjQsIDB4ZjYsIDB4YTQsCisJMHg5NiwgMHgwNSwgMHg2MCwgMHgzNSwgMHhiZCwgMHgwNiwgMHgxNSwgMHg1NywgMHhlNiwgMHgzNywgMHgyZSwgMHg4NCwKKwkweDdiLCAweGI1LCAweGRjLCAweDhlLCAweGU3LCAweDNmLCAweGM0LCAweGYzLCAweGUxLCAweDMzLCAweDJlLCAweGVjLAorCTB4MTQsIDB4YjEsIDB4ZGEsIDB4NGIsIDB4NzIsIDB4YWUsIDB4NDIsIDB4MTksIDB4NzksIDB4MTEsIDB4NzQsIDB4YTcsCisJMHhmZCwgMHgzNiwgMHg4YiwgMHg3YywgMHg0ZCwgMHgwZCwgMHg5ZiwgMHg5NywgMHg1NCwgMHg3MiwgMHg1ZSwgMHg0NiwKKwkweDdjLCAweDk2LCAweDRmLCAweDg4LCAweGMyLCAweDU4LCAweGEyLCAweDMxLCAweGQwLCAweDhiLCAweDkwLCAweDNmLAorCTB4OTEsIDB4MWYsIDB4NTcsIDB4ZGEsIDB4YzUsIDB4MWUsIDB4ZmIsIDB4NjEsIDB4NDAsIDB4M2IsIDB4NzgsIDB4N2EsCisJMHhhMywgMHhiNSwgMHgxZiwgMHg5MSwgMHhhMSwgMHgzMywgMHhhYSwgMHgxZiwgMHhmNCwgMHg5MSwgMHhmNiwgMHhiZiwKKwkweGFkLCAweGZhLCAweDBiLCAweGZiLCAweGMyLCAweDNjLCAweGM3LCAweDVhLCAweGZiLCAweDczLCAweGU0LCAweGJhLAorCTB4NmIsIDB4YTMsIDB4YmYsIDB4YjQsIDB4OTksIDB4MjMsIDB4YWYsIDB4MjEsIDB4MjMsIDB4YWUsIDB4ODMsIDB4ZjIsCisJMHg2MSwgMHgzYiwgMHg5NCwgMHgxOSwgMHg3YiwgMHhlYywgMHgzYiwgMHg0MSwgMHg2ZSwgMHg5YSwgMHg3MywgMHgyYiwKKwkweDk5LCAweDY3LCAweGZmLCAweGMzLCAweGM4LCAweDliLCAweDU0LCAweGVkLCAweDJjLCAweDc4LCAweDk2LCAweDE5LAorCTB4YzQsIDB4NzgsIDB4YmMsIDB4NGYsIDB4MDIsIDB4MWYsIDB4NDksIDB4OTksIDB4ZjgsIDB4YWMsIDB4NTQsIDB4ZjksCisJMHg2NSwgMHg5MCwgMHg3MywgMHgzNCwgMHhhNiwgMHhkMiwgMHg2YiwgMHhjZiwgMHhmNywgMHg5NiwgMHgxNCwgMHg1MCwKKwkweDc3LCAweGMxLCAweGU4LCAweDgzLCAweDYyLCAweGUzLCAweGJhLCAweGUyLCAweGRmLCAweGYzLCAweDZhLCAweDFmLAorCTB4YTUsIDB4NGUsIDB4OTcsIDB4YTksIDB4MzcsIDB4MzYsIDB4ZGMsIDB4MDgsIDB4ZjcsIDB4ZjgsIDB4MjUsIDB4ZmYsCisJMHhhNSwgMHg2MCwgMHg2MSwgMHgzOSwgMHg5NSwgMHg0YywgMHhkYSwgMHg4MywgMHg1MiwgMHhhYSwgMHgwZSwgMHg5NiwKKwkweDZkLCAweDk0LCAweDI3LCAweDZhLCAweDA5LCAweDM5LCAweDUxLCAweDYxLCAweDNmLCAweGZiLCAweDUxLCAweDA3LAorCTB4OGEsIDB4YzgsIDB4YzYsIDB4MjYsIDB4ZWYsIDB4YTMsIDB4YWUsIDB4ZTEsIDB4OTgsIDB4NmYsIDB4NWIsIDB4N2EsCisJMHg0YywgMHhjYywgMHhjMSwgMHhkYiwgMHhiNCwgMHhmZSwgMHg2MywgMHhlMywgMHg4YSwgMHg1NSwgMHhhYSwgMHg3MSwKKwkweGZkLCAweGYxLCAweGJjLCAweGQxLCAweGFjLCAweDhmLCAweDQyLCAweDVkLCAweGI0LCAweDgzLCAweGM1LCAweDIyLAorCTB4ZDksIDB4NDUsIDB4YWIsIDB4YjQsIDB4MjIsIDB4NzYsIDB4ZGUsIDB4OGYsIDB4MTIsIDB4MGYsIDB4MjYsIDB4NDUsCisJMHhlZSwgMHg3NSwgMHhmNSwgMHgzYywgMHgzZiwgMHgxOSwgMHhhMSwgMHgxZSwgMHg3NCwgMHhiYywgMHhkMywgMHhlOCwKKwkweGJiLCAweDUzLCAweDcyLCAweDBlLCAweGQ3LCAweDlmLCAweGQ3LCAweDEyLCAweDQ0LCAweGIyLCAweDFlLCAweDZkLAorCTB4YTUsIDB4MTMsIDB4YzksIDB4M2EsIDB4ZDgsIDB4NjMsIDB4YWMsIDB4ZjMsIDB4NTIsIDB4YzAsIDB4YmQsIDB4OTAsCisJMHhhZiwgMHg2YSwgMHgxOSwgMHgyOSwgMHhlZiwgMHg2MCwgMHgyZiwgMHhkMCwgMHg5YiwgMHg4MywgMHg4ZSwgMHgxMSwKKwkweDFiLCAweDdiLCAweGNjLCAweDhkLCAweDY0LCAweGY5LCAweDdjLCAweDFjLCAweGQ3LCAweDliLCAweGE4LCAweDRmLAorCTB4MWQsIDB4MGIsIDB4NGMsIDB4NWEsIDB4NTMsIDB4YmMsIDB4YzMsIDB4NTgsIDB4MzksIDB4YWIsIDB4NTgsIDB4MDksCisJMHg3OSwgMHhmMiwgMHg1MiwgMHhmMCwgMHhlNCwgMHg3MiwgMHg4OCwgMHgxMSwgMHg5NCwgMHg2YywgMHhjOSwgMHhjMCwKKwkweGQ5LCAweGE0LCAweGQ5LCAweGQ3LCAweDVkLCAweGRjLCAweDczLCAweGU0LCAweDNmLCAweDllLCAweGY5LCAweGU2LAorCTB4NTksIDB4N2IsIDB4ZDMsIDB4YjMsIDB4NzAsIDB4ZmYsIDB4N2YsIDB4MDksIDB4YjQsIDB4ZjUsIDB4MmIsIDB4ZmUsCisJMHhkOCwgMHhkOSwgMHgyMywgMHg1NiwgMHg1ZSwgMHhlMSwgMHg5MywgMHgyMCwgMHgyOCwgMHg3OCwgMHg1MSwgMHgyOSwKKwkweDhkLCAweGZlLCAweDA5LCAweGU2LCAweGNhLCAweDc3LCAweDY1LCAweDMwLCAweDljLCAweDc2LCAweDYzLCAweDc4LAorCTB4NzIsIDB4ZDYsIDB4NGIsIDB4MjksIDB4ZmIsIDB4OWYsIDB4YzcsIDB4ZmUsIDB4ZDMsIDB4M2EsIDB4NTMsIDB4Y2EsCisJMHgzZCwgMHhhMCwgMHhkZCwgMHg1YiwgMHhlMiwgMHg5YSwgMHhiYywgMHgxNCwgMHg5YywgMHgwNSwgMHgxNiwgMHg5ZSwKKwkweDVlLCAweDJhLCAweDVhLCAweDAzLCAweGQ4LCAweDEyLCAweDc2LCAweDlmLCAweDA1LCAweDNlLCAweDc3LCAweDQ5LAorCTB4ZmUsIDB4MjIsIDB4ZDcsIDB4ODIsIDB4NzUsIDB4ZjgsIDB4YmMsIDB4NGQsIDB4YTYsIDB4ZTMsIDB4YWQsIDB4YjYsCisJMHhmMiwgMHhkYywgMHgzZSwgMHhlOSwgMHgyNCwgMHhiZiwgMHg1MSwgMHg3NywgMHhlOSwgMHhmZiwgMHg0NiwgMHhiNCwKKwkweDVlLCAweDc2LCAweDY1LCAweDYwLCAweDk1LCAweDdjLCAweDJmLCAweDVhLCAweGIzLCAweDE1LCAweGVhLCAweGIxLAorCTB4MGUsIDB4ZDgsIDB4NDcsIDB4M2UsIDB4NjcsIDB4OWYsIDB4NzgsIDB4NzcsIDB4YmUsIDB4YjUsIDB4OGYsIDB4ZGYsCisJMHg4YiwgMHhlOCwgMHgzZSwgMHhkOCwgMHgyZSwgMHhlYywgMHhhMywgMHg5OSwgMHgxZiwgMHg3YiwgMHg5NCwgMHg5ZSwKKwkweGViLCAweGNkLCAweGY2LCAweGI2LCAweGY0LCAweDliLCAweDY4LCAweGVhLCAweDE3LCAweGVmLCAweGNlLCAweDdmLAorCTB4MzcsIDB4NDIsIDB4NWMsIDB4ZjYsIDB4ZjIsIDB4MzIsIDB4ZjgsIDB4YWMsIDB4ZTYsIDB4YzQsIDB4NzcsIDB4NmMsCisJMHg1MywgMHhiNCwgMHgwYSwgMHg0YiwgMHg0MSwgMHgzMCwgMHhlZCwgMHhkYiwgMHgxMiwgMHhlOSwgMHgwYiwgMHhlYiwKKwkweGVhLCAweDc5LCAweDE1LCAweDMxLCAweGFmLCAweDNjLCAweGU2LCAweDY1LCAweGY3LCAweGI1LCAweGQyLCAweGY0LAorCTB4ZmIsIDB4ODYsIDB4YTYsIDB4ZGUsIDB4MjYsIDB4OWEsIDB4ZTIsIDB4ZWYsIDB4MzEsIDB4YWYsIDB4ZjgsIDB4MmUsCisJMHhmMywgMHg3YSwgMHhhOSwgMHg1NywgMHhmNywgMHgxMSwgMHg2ZiwgMHhlYSwgMHhhMywgMHhhZiwgMHhhNSwgMHgwZiwKKwkweGU4LCAweGZkLCAweDM4LCAweGRiLCAweGY3LCAweGVkLCAweGQyLCAweGZlLCAweDg3LCAweDFkLCAweGJhLCAweDNkLAorCTB4ZGIsIDB4YjQsIDB4NDEsIDB4YjcsIDB4ZjcsIDB4MWIsIDB4YmQsIDB4NzgsIDB4YTIsIDB4NDksIDB4OTcsIDB4OWQsCisJMHg4MCwgMHgyZSwgMHg2YiwgMHg2ZSwgMHhkMywgMHgyYywgMHhmZiwgMHhhMSwgMHg4ZiwgMHg0NCwgMHhmZiwgMHgyOCwKKwkweGM0LCAweDhhLCAweDFmLCAweDUwLCAweDE4LCAweDY0LCAweDA3LCAweDYzLCAweGM3LCAweDgwLCAweDQ3LCAweGJhLAorCTB4NjAsIDB4ZmYsIDB4YmIsIDB4ZTksIDB4MDcsIDB4MTksIDB4NGMsIDB4NDgsIDB4YmYsIDB4ODgsIDB4MzgsIDB4NTAsCisJMHgzYywgMHhhMCwgMHgyOCwgMHhlOCwgMHg5NiwgMHhjMSwgMHhjNCwgMHgzMSwgMHgxMSwgMHhlNSwgMHgwNywgMHgxMSwKKwkweDVmLCAweGQzLCAweDI3LCAweGUyLCAweDM4LCAweGY0LCAweDg5LCAweGI4LCAweGVlLCAweGJjLCAweDJmLCAweDZjLAorCTB4ZmIsIDB4NDgsIDB4ZmQsIDB4ZDgsIDB4ZjcsIDB4YzQsIDB4YzcsIDB4ZGMsIDB4MzMsIDB4YTEsIDB4YWQsIDB4NjksCisJMHhkNiwgMHhhNywgMHhiYiwgMHhkMSwgMHhkNCwgMHhkZiwgMHg0MiwgMHgxMywgMHg3NCwgMHgxMiwgMHg3YywgMHhiMywKKwkweDA1LCAweGM4LCAweDIzLCAweDMwLCAweDI5LCAweDc0LCAweGUwLCAweGZkLCAweDUzLCAweGU3LCAweDU2LCAweDQ0LAorCTB4NGEsIDB4MGQsIDB4ZGEsIDB4YzcsIDB4NTEsIDB4ODEsIDB4NWYsIDB4MDUsIDB4YmEsIDB4ZDgsIDB4YjcsIDB4YjIsCisJMHg5MSwgMHhkMCwgMHg0ZCwgMHhkZCwgMHgzOSwgMHgzYiwgMHgzYiwgMHgwOCwgMHgzZiwgMHhkYywgMHg5MSwgMHgzOSwKKwkweDQzLCAweGRiLCAweDhjLCAweGYyLCAweGUxLCAweGJhLCAweDUwLCAweDI2LCAweDk0LCAweDVjLCAweGNkLCAweDgwLAorCTB4M2UsIDB4NWUsIDB4Y2YsIDB4MTgsIDB4ZWMsIDB4N2UsIDB4YWMsIDB4ZDEsIDB4NGEsIDB4ZGIsIDB4ZjcsIDB4NDAsCisJMHg5YiwgMHgwNywgMHgxYSwgMHg5MiwgMHhmMiwgMHgwMiwgMHhiMCwgMHhmYiwgMHgzNywgMHhkNSwgMHhiZSwgMHgwYywKKwkweDc1LCAweDE3LCAweDY1LCAweDI5LCAweDU1LCAweDJkLCAweGNiLCAweDY2LCAweGIwLCAweGIyLCAweGNjLCAweDdkLAorCTB4NGIsIDB4MWIsIDB4ZGUsIDB4MjUsIDB4NjUsIDB4YWMsIDB4ZDcsIDB4YzAsIDB4NTIsIDB4MmEsIDB4OTksIDB4YjMsCisJMHhjNSwgMHg3YSwgMHhkZiwgMHg0MSwgMHhjYSwgMHhkMywgMHhlMywgMHgzMiwgMHg3MCwgMHg1MSwgMHgyYywgMHg2NywKKwkweDA5LCAweDdiLCAweGJkLCAweDNiLCAweGM0LCAweDU3LCAweDljLCAweGRmLCAweDZmLCAweDYzLCAweDdlLCAweGU4LAorCTB4N2IsIDB4MzksIDB4OWMsIDB4NWYsIDB4OTcsIDB4OTQsIDB4NTYsIDB4MzksIDB4YmYsIDB4ZWQsIDB4YjksIDB4YzUsCisJMHgxOSwgMHgxMSwgMHhmOSwgMHgxYywgMHhmNCwgMHgzNSwgMHhlNiwgMHgwOCwgMHgxYSwgMHhjNywgMHg4MSwgMHg3MywKKwkweGVmLCAweDMwLCAweDczLCAweGVhLCAweGMyLCAweDljLCAweDYwLCAweGEzLCAweDk3LCAweGQ4LCAweDFlLCAweDc0LAorCTB4ODEsIDB4ZTYsIDB4MTIsIDB4ZWEsIDB4Y2QsIDB4MmYsIDB4NzEsIDB4Y2QsIDB4NDEsIDB4MmIsIDB4ZDYsIDB4YmQsCisJMHhkNCwgMHhlMCwgMHhkYSwgMHg3MywgMHg2ZSwgMHhkYSwgMHhhZSwgMHgzYiwgMHgxZSwgMHhlNywgMHhjNywgMHg3OSwKKwkweDBlLCAweDYzLCAweDVlLCAweGFjLCAweGMzLCAweDc2LCAweGFkLCAweDMyLCAweDMyLCAweGZjLCAweDFlLCAweGViLAorCTB4ZjEsIDB4ZGIsIDB4MmQsIDB4ZWIsIDB4MjEsIDB4NjYsIDB4M2QsIDB4NjIsIDB4ZDIsIDB4YjYsIDB4YWEsIDB4ZmMsCisJMHg2NSwgMHg0NSwgMHgwMywgMHg3ZCwgMHgwOCwgMHgwNywgMHhmNCwgMHgyZiwgMHhhZSwgMHhjOCwgMHg2OCwgMHg1NCwKKwkweDQ4LCAweDdiLCAweDgyLCAweGNmLCAweDMyLCAweDZkLCAweDMyLCAweGU4LCAweDVmLCAweDgxLCAweDVjLCAweDk1LAorCTB4MjAsIDB4MGIsIDB4ZjQsIDB4MDcsIDB4NWUsIDB4NWUsIDB4ZDYsIDB4NmIsIDB4NTEsIDB4NmEsIDB4NzQsIDB4YzIsCisJMHg0NywgMHhlNywgMHhmOCwgMHhlNCwgMHgzNywgMHhlNywgMHhlNiwgMHhhYSwgMHg3NSwgMHg2OCwgMHg1ZSwgMHg5NywKKwkweDRmLCAweGRmLCAweGIyLCAweDJlLCAweGQ0LCAweGJiLCAweGQ0LCAweDAzLCAweGM0LCAweDNkLCAweGQ0LCAweDA1LAorCTB4NjEsIDB4NGMsIDB4YTAsIDB4ZTYsIDB4ZWEsIDB4ZmQsIDB4MTQsIDB4ZGEsIDB4OWYsIDB4ZWIsIDB4ZGIsIDB4ZjgsCisJMHg1MiwgMHhhZiwgMHg1OSwgMHhjMiwgMHhjNCwgMHgwNSwgMHhiYSwgMHhjNCwgMHg1ZSwgMHhiZCwgMHg4MywgMHg3YSwKKwkweDFmLCAweGY2LCAweDI3LCAweDljLCAweGRmLCAweGVmLCAweGUwLCAweDNlLCAweDcxLCAweGQzLCAweDdhLCAweGQ4LAorCTB4OTgsIDB4OTMsIDB4YTMsIDB4ZTYsIDB4YTgsIDB4ZDYsIDB4NjIsIDB4NWIsIDB4ZTYsIDB4ZTYsIDB4MWEsIDB4N2EsCisJMHg1ZSwgMHhjZSwgMHhkMiwgMHgxZSwgMHhiMywgMHgxZSwgMHgzMSwgMHgzYywgMHhlMywgMHhiYywgMHg0MiwgMHg5YiwKKwkweGMzLCAweDc5LCAweDkxLCAweDVlLCAweGQ3LCAweGM4LCAweDFjLCAweGU3LCAweGMzLCAweGZkLCAweGQ3LCAweDJjLAorCTB4NmIsIDB4MmYsIDB4MDUsIDB4ZDUsIDB4ZTUsIDB4YTgsIDB4OWEsIDB4N2IsIDB4ZGUsIDB4ZWYsIDB4MjYsIDB4NDYsCisJMHhhMywgMHg4ZSwgMHgzNCwgMHhmYSwgMHg4OSwgMHhjZiwgMHg2OSwgMHgwNywgMHhmMSwgMHgyZSwgMHg0MywgMHgxOSwKKwkweGMyLCAweDdkLCAweDlkLCAweGY3LCAweGNkLCAweDM2LCAweGVkLCAweDc5LCAweDQ3LCAweGViLCAweDAxLCAweGM2LAorCTB4OWYsIDB4ZGUsIDB4ZGIsIDB4ZDYsIDB4NDUsIDB4YjMsIDB4NjIsIDB4YWQsIDB4NTcsIDB4ZTgsIDB4MzMsIDB4MDcsCisJMHhjMCwgMHg1ZCwgMHg3NywgMHg0MCwgMHhhZiwgMHgxYywgMHg5MiwgMHg5MiwgMHgwYiwgMHg3YiwgMHgzZCwgMHg3YywKKwkweDNiLCAweGU2LCAweDNjLCAweDJlLCAweDJhLCAweGRlLCAweDMwLCAweGJjLCAweDE3LCAweGQ3LCAweDdiLCAweDk0LAorCTB4ZWYsIDB4NTIsIDB4MWEsIDB4ZmUsIDB4OTAsIDB4ZTQsIDB4YTYsIDB4NjksIDB4ZDMsIDB4N2UsIDB4NWYsIDB4NjYsCisJMHg2MCwgMHg1YiwgMHg0YiwgMHhjMywgMHg3NywgMHg4MiwgMHgzZSwgMHhkZSwgMHg0MywgMHgyNywgMHg3YSwgMHg0MywKKwkweDhjLCAweDUxLCAweGUwLCAweGVmLCAweDcxLCAweDEzLCAweDliLCAweDM5LCAweDgwLCAweGZiLCAweDNkLCAweGE4LAorCTB4ZjMsIDB4NDksIDB4NTMsIDB4YTcsIDB4MWIsIDB4NzUsIDB4MDYsIDB4NWIsIDB4ZWEsIDB4NzAsIDB4YmMsIDB4ZmIsCisJMHg1MCwgMHgwNywgMHhmNiwgMHgxNCwgMHg1NiwgMHhkMiwgMHhmNiwgMHgwZSwgMHhlMiwgMHgzNywgMHg4MSwgMHg2NywKKwkweGY3LCAweGUyLCAweGQ5LCAweDNkLCAweDc4LCAweDc2LCAweDBmLCAweGVlLCAweDdmLCAweGQ3LCAweGM0LCAweDNjLAorCTB4YzIsIDB4MzYsIDB4ZGQsIDB4YjgsIDB4ZmYsIDB4MTIsIDB4ZGUsIDB4NDMsIDB4YzcsIDB4YjksIDB4ZGYsIDB4YzYsCisJMHhmYiwgMHhmYiwgMHhmMCwgMHgxYiwgMHg2YiwgMHhhOSwgMHhlMywgMHhiNiwgMHhkYywgMHg5ZiwgMHg3NiwgMHg3NCwKKwkweDhjLCAweDg0LCAweGNmLCAweDgyLCAweGM4LCAweGNlLCAweGY1LCAweDdmLCAweDM1LCAweGNmLCAweGJkLCAweGE2LAorCTB4ZjcsIDB4MWYsIDB4MzcsIDB4ZDcsIDB4YWQsIDB4YjIsIDB4OTQsIDB4ODYsIDB4MmMsIDB4ZjEsIDB4ZmQsIDB4NTcsCisJMHhmNiwgMHhlOSwgMHhiNSwgMHhiOCwgMHg0MywgMHhjNywgMHgxZiwgMHg2ZSwgMHhjMiwgMHgxYiwgMHg0YSwgMHhmYywKKwkweDcxLCAweGJkLCAweDA5LCAweDljLCAweDQxLCAweGVjLCAweGQxLCAweDhjLCAweDNiLCAweDQ4LCAweDhiLCAweGFiLAorCTB4ZTQsIDB4ZjUsIDB4ZTUsIDB4ZTUsIDB4ZDcsIDB4YmEsIDB4ZjUsIDB4MTgsIDB4NjIsIDB4ZDUsIDB4MjEsIDB4NzMsCisJMHgxMywgMHgyYSwgMHgxNiwgMHhmMSwgMHgzMywgMHhmMywgMHhjYywgMHhkYiwgMHhiNywgMHhmMywgMHg2ZSwgMHhhZiwKKwkweDRjLCAweDU0LCAweGZmLCAweDY4LCAweGRmLCAweDBlLCAweDZkLCAweDkzLCAweDRkLCAweGQ3LCAweDNiLCAweDk4LAorCTB4MDIsIDB4ZmUsIDB4ODQsIDB4YmQsIDB4ODMsIDB4NzcsIDB4NzIsIDB4ZjYsIDB4NWMsIDB4YTMsIDB4NjgsIDB4ZWIsCisJMHg3MSwgMHg1OSwgMHgwNywgMHhlZiwgMHgxYSwgMHg5YiwgMHgzZCwgMHg4ZSwgMHg5MiwgMHhmZCwgMHg5YywgMHg0ZCwKKwkweDVmLCAweGEzLCAweGJjLCAweGM2LCAweGViLCAweGRiLCAweDUxLCAweDM2LCAweGI3LCAweGVkLCAweDg3LCAweDFlLAorCTB4Y2YsIDB4ZDksIDB4OWEsIDB4ZWUsIDB4ZDYsIDB4ZjYsIDB4ZTEsIDB4YmUsIDB4ZjEsIDB4NjUsIDB4YTEsIDB4MGEsCisJMHg5OSwgMHhmMywgMHg1MiwgMHhjMywgMHg2NSwgMHhhYywgMHhkZCwgMHhhYywgMHg5ZiwgMHg5YSwgMHhhNiwgMHg0YywKKwkweGMyLCAweDlmLCAweGZkLCAweDk0LCAweGM4LCAweGE0LCAweGNjLCAweDU3LCAweDFmLCAweDA2LCAweGZlLCAweDBlLAorCTB4ZTQsIDB4MjEsIDB4ZTAsIDB4OGEsIDB4N2YsIDB4MGYsIDB4NWMsIDB4NTIsIDB4ODMsIDB4YWMsIDB4ZDcsIDB4MWEsCisJMHgxZSwgMHg3ZSwgMHhmZCwgMHhmMiwgMHg1NywgMHg5NSwgMHg4NCwgMHgzYywgMHgwNywgMHg3ZiwgMHgwMiwgMHhiMiwKKwkweDA2LCAweDNkLCAweDljLCAweDc2LCAweDFmLCAweDEyLCAweGU5LCAweGIxLCAweGU1LCAweGYyLCAweGJkLCAweGI2LAorCTB4OGMsIDB4MjQsIDB4MDcsIDB4YWMsIDB4NzQsIDB4MDIsIDB4M2YsIDB4YjcsIDB4MGQsIDB4YmYsIDB4MjIsIDB4N2MsCisJMHhiOCwgMHhiNSwgMHgwNiwgMHg2MywgMHgwMSwgMHg3MSwgMHhmOSwgMHhlYiwgMHhmNSwgMHgyNCwgMHg3ZSwgMHg3ZCwKKwkweGYyLCAweDM3LCAweGViLCAweDFjLCAweDdmLCAweGMwLCAweDk0LCAweDZhLCAweDFmLCAweGMzLCAweGU3LCAweDI4LAorCTB4Y2IsIDB4NjIsIDB4MjYsIDB4MjEsIDB4MGIsIDB4OTUsIDB4ZTAsIDB4YTQsIDB4ZjYsIDB4OTksIDB4M2QsIDB4ZjgsCisJMHhjOCwgMHhkYywgMHhiMywgMHgyZiwgMHg2MCwgMHhjZiwgMHhlMiwgMHhiOSwgMHhjMiwgMHg5ZSwgMHhhMSwgMHhkZCwKKwkweDdiLCAweDAxLCAweDc2LCAweDJmLCAweDVjLCAweDIzLCAweGNlLCAweGIzLCAweDc1LCAweDdkLCAweGQ4LCAweDJmLAorCTB4ZDcsIDB4ODgsIDB4N2EsIDB4OWQsIDB4YmEsIDB4M2MsIDB4MDYsIDB4ZmMsIDB4MTAsIDB4ZWEsIDB4NzYsIDB4ZWEsCisJMHgwOCwgMHg2ZiwgMHhkYiwgMHgwZiwgMHg3ZCwgMHhlNCwgMHg2MCwgMHgxNywgMHhiMCwgMHg4NiwgMHhjNCwgMHhlMiwKKwkweGQ5LCAweDlmLCAweGNhLCAweGNhLCAweDU5LCAweGVlLCAweDFiLCAweGRhLCAweGUzLCAweGJiLCAweDIxLCAweDZmLAorCTB4YTksIDB4YWYsIDB4OTYsIDB4ODksIDB4OTksIDB4YmQsIDB4MGMsIDB4ZjgsIDB4NTEsIDB4OTYsIDB4ZTksIDB4ODMsCisJMHhhYiwgMHhiZCwgMHg1YSwgMHg0ZSwgMHgyNiwgMHhjNSwgMHgzOSwgMHhmYiwgMHg4NSwgMHhhOCwgMHg3NCwgMHg5ZiwKKwkweDk0LCAweDQ1LCAweDFmLCAweDdlLCAweGE5LCAweDVkLCAweDBlLCAweDIyLCAweDllLCAweDk3LCAweDI4LCAweDI4LAorCTB4YmYsIDB4NjksIDB4MDUsIDB4NzQsIDB4YzYsIDB4NjQsIDB4ZTIsIDB4MmMsIDB4ZWIsIDB4OWMsIDB4ODQsIDB4OGMsCisJMHhiNSwgMHg4MSwgMHhlNiwgMHg3NiwgMHgzOSwgMHgxNSwgMHg0ZiwgMHg5NSwgMHgwYiwgMHhmMCwgMHhmNywgMHg2ZCwKKwkweGFmLCAweDQ3LCAweDA2LCAweGVhLCAweDJjLCAweDg5LCAweDQxLCAweGZlLCAweDM3LCAweGU0LCAweDg3LCAweGQ3LAorCTB4ZjAsIDB4MDMsIDB4NTcsIDB4ZjksIDB4N2MsIDB4MDAsIDB4MjUsIDB4OWYsIDB4N2IsIDB4ZDAsIDB4MmYsIDB4ZTQsCisJMHgwNywgMHg3MCwgMHhjMywgMHhjNSwgMHhiMiwgMHg5YywgMHhjYSwgMHg0YywgMHg0YSwgMHhiZCwgMHgyYSwgMHhkNiwKKwkweDQyLCAweDA2LCAweDdiLCAweGEwLCAweDk2LCAweDk1LCAweDNhLCAweDc4LCAweDUxLCAweDZhLCAweDFjLCAweDg3LAorCTB4ZGYsIDB4ZjksIDB4MjYsIDB4Y2EsIDB4MzksIDB4OTQsIDB4ZDcsIDB4NTEsIDB4M2UsIDB4OGUsIDB4ZjIsIDB4MmQsCisJMHg5NCwgMHhhNCwgMHhmZCwgMHhiOCwgMHhkNCwgMHg2YiwgMHg3YiwgMHhkYSwgMHhhNCwgMHg5MywgMHg3ZCwgMHg2YywKKwkweDE4LCAweDlhLCAweGUxLCAweDNiLCAweDFlLCAweDNjLCAweDBlLCAweDJjLCAweDFhLCAweDNlLCAweDNmLCAweDJlLAorCTB4NTIsIDB4ZmYsIDB4MGMsIDB4N2UsIDB4MGYsIDB4YWEsIDB4N2IsIDB4ZmEsIDB4OTYsIDB4MGIsIDB4OTksIDB4NzEsCisJMHhlMCwgMHg3YSwgMHhiMSwgMHg0ZSwgMHg2NSwgMHgxZSwgMHgzNywgMHhmZCwgMHg3YywgMHgwNiwgMHhlMywgMHg1ZCwKKwkweGM1LCAweGQ4LCAweDMxLCAweGM4LCAweDQ4LCAweDIwLCAweDhmLCAweGY4LCAweDI3LCAweGU1LCAweDczLCAweGZlLAorCTB4N2UsIDB4MTksIDB4ZWIsIDB4OGQsIDB4OTUsIDB4NjMsIDB4NTksIDB4Y2UsIDB4OWYsIDB4N2EsIDB4NmEsIDB4YjcsCisJMHhmOSwgMHg4NywgMHhmMywgMHhlNiwgMHg5YywgMHhhMSwgMHg1YiwgMHg5NywgMHhmNiwgMHg2YSwgMHhkYywgMHg2ZCwKKwkweDdmLCAweDM5LCAweGFhLCAweDY5LCAweGIxLCAweDY0LCAweDYwLCAweDg4LCAweGZkLCAweDY1LCAweDI1LCAweDcyLAorCTB4NzYsIDB4YzgsIDB4Y2QsIDB4ZDgsIDB4MjMsIDB4ZjAsIDB4NTIsIDB4ZDIsIDB4ZjgsIDB4OWQsIDB4ODQsIDB4ZmMsCisJMHg3OSwgMHhhNywgMHgwNywgMHhlYywgMHhkYiwgMHg0MCwgMHgxMywgMHhkZSwgMHhkNSwgMHgzOSwgMHgwZSwgMHhlYywKKwkweGU5LCAweDNkLCAweGFmLCAweDYyLCAweDZlLCAweDY1LCAweDY5LCAweGJmLCAweDI3LCAweDJiLCAweDM3LCAweDFhLAorCTB4YmMsIDB4ODYsIDB4M2QsIDB4YmEsIDB4MzAsIDB4MjksIDB4ZmYsIDB4NWMsIDB4YmQsIDB4MmEsIDB4NGYsIDB4NTQsCisJMHgyNywgMHhlNSwgMHgwZCwgMHg5NCwgMHg4YiwgMHhkNSwgMHgzMiwgMHhmOCwgMHhjOCwgMHg1OCwgMHgzYywgMHhmYiwKKwkweDA4LCAweGIwLCAweDJlLCAweDgzLCAweGYwLCAweDhkLCAweDNlLCAweDk4LCAweDk4LCAweGMzLCAweGZhLCAweGNkLAorCTB4YjgsIDB4ODEsIDB4OWMsIDB4ZjMsIDB4Y2IsIDB4NzIsIDB4NmUsIDB4MWMsIDB4NmQsIDB4NmEsIDB4MWQsIDB4MTIsCisJMHg3ZCwgMHg5NiwgMHhmMywgMHhlZCwgMHg5NiwgMHgwMiwgMHgyYywgMHg3YSwgMHgzMSwgMHg0MywgMHg5ZCwgMHhkOSwKKwkweDI5LCAweDg1LCAweDVhLCAweGFiLCAweGRjLCAweDUxLCAweGRlLCAweGRlLCAweGI2LCAweGVhLCAweGRiLCAweDNhLAorCTB4NjAsIDB4ZDMsIDB4ZmEsIDB4NjYsIDB4ODMsIDB4MzYsIDB4NzgsIDB4MzcsIDB4N2IsIDB4YWEsIDB4ZTUsIDB4YWUsCisJMHg1ZSwgMHhhMywgMHg0ZCwgMHhkZCwgMHg5MSwgMHhiZCwgMHgzYSwgMHhmYywgMHhiOSwgMHg3YSwgMHhmNSwgMHhiYSwKKwkweDkxLCAweDNmLCAweDI1LCAweGI3LCAweDU4LCAweDE3LCAweDYyLCAweGYxLCAweDlmLCAweDA4LCAweGIwLCAweDFmLAorCTB4NzgsIDB4MTQsIDB4YzYsIDB4MDksIDB4YjUsIDB4N2YsIDB4NTQsIDB4MDMsIDB4YWQsIDB4ODUsIDB4MzgsIDB4NzEsCisJMHgwNiwgMHhhYywgMHg1YiwgMHhlZCwgMHgwYiwgMHg4YSwgMHg1NywgMHhkZSwgMHhkOSwgMHg3ZSwgMHhhOSwgMHgyZSwKKwkweDkzLCAweGJmLCAweDI5LCAweGQ3LCAweGI2LCAweDk1LCAweDRmLCAweDAyLCAweGJlLCAweDdhLCAweDU4LCAweDlmLAorCTB4ZjAsIDB4N2QsIDB4MGEsIDB4N2UsIDB4ZDIsIDB4NDksIDB4NzEsIDB4YzcsIDB4M2EsIDB4MzEsIDB4MjcsIDB4NWUsCisJMHg4YiwgMHg0YywgMHg1ZiwgMHg2YywgMHhjNSwgMHg5MSwgMHhhMSwgMHg5ZCwgMHg2OCwgMHg4MywgMHgzZiwgMHgxZSwKKwkweGM1LCAweDVhLCAweDc2LCAweGMxLCAweDlmLCAweDg2LCAweDlmLCAweDBhLCAweDM5LCAweGZhLCAweDMzLCAweDYwLAorCTB4YWYsIDB4ZDMsIDB4Y2EsIDB4YjcsIDB4ZTYsIDB4OWUsIDB4ZWEsIDB4OWUsIDB4MWEsIDB4NTgsIDB4NjcsIDB4YjksCisJMHg3NywgMHgyYSwgMHg1ZCwgMHg2MywgMHgxOSwgMHg5ZiwgMHhkMiwgMHhiZSwgMHg2NCwgMHg2MiwgMHg0YSwgMHhjNywKKwkweGVkLCAweDkzLCAweDUzLCAweDA3LCAweDU0LCAweGU5LCAweDRkLCAweDBkLCAweGFiLCAweDcyLCAweDc4LCAweDZhLAorCTB4MjcsIDB4NjYsIDB4NDIsIDB4OWUsIDB4OGEsIDB4OTUsIDB4Y2YsIDB4NjQsIDB4YTQsIDB4NTgsIDB4MjEsIDB4OGQsCisJMHhlMiwgMHgxYywgMHg4MywgMHgzYywgMHhjZCwgMHgwMSwgMHhjYiwgMHhlNCwgMHgyYiwgMHhiZSwgMHg5YywgMHhkYSwKKwkweGM4LCAweDgyLCAweDY2LCAweGU4LCAweDk5LCAweGFjLCAweDhmLCAweDUyLCAweGNjLCAweDVmLCAweGQ4LCAweGI2LAorCTB4OGQsIDB4MzEsIDB4MzIsIDB4YWUsIDB4OTksIDB4ZjEsIDB4MzMsIDB4N2QsIDB4ZmEsIDB4OTksIDB4Y2QsIDB4N2YsCisJMHhlYywgMHgwZiwgMHhiMiwgMHg0OSwgMHhmYiwgMHhmOSwgMHgwYiwgMHhmOCwgMHhjNiwgMHhlMiwgMHg5NCwgMHgzMiwKKwkweDZjLCAweGViLCAweGMzLCAweDA3LCAweDE3LCAweGQ5LCAweDVhLCAweDkxLCAweDU4LCAweDJjLCAweGZiLCAweDFkLAorCTB4ODksIDB4M2QsIDB4MWQsIDB4MDQsIDB4M2YsIDB4ZjAsIDB4NTMsIDB4NDcsIDB4Y2EsIDB4MDIsIDB4NWUsIDB4NTksCisJMHg3OCwgMHhiZSwgMHhjZSwgMHg3NywgMHhkNCwgMHg0ZCwgMHgyMywgMHhlZSwgMHgwZCwgMHhjOCwgMHg1YywgMHhlZSwKKwkweGE4LCAweGM4LCAweDJiLCAweDc4LCAweDU2LCAweDVmLCAweGUxLCAweDFhLCAweDdjLCAweDE3LCAweDZiLCAweDYwLAorCTB4ZDYsIDB4NDQsIDB4M2QsIDB4NjMsIDB4M2QsIDB4ZjgsIDB4NTgsIDB4NzEsIDB4Y2UsIDB4NjMsIDB4YzQsIDB4NmQsCisJMHg0NywgMHhmYiwgMHhkYSwgMHgzYSwgMHhkYiwgMHhhNCwgMHhjNiwgMHg3OSwgMHhlNCwgMHhmNSwgMHhjYSwgMHhiYSwKKwkweDllLCAweGRmLCAweGUxLCAweGNjLCAweGIwLCAweDVjLCAweGFlLCAweGE4LCAweDNlLCAweDIwLCAweGViLCAweGJmLAorCTB4NDQsIDB4OWIsIDB4NGQsIDB4YzgsIDB4MmQsIDB4NjMsIDB4NTMsIDB4NTksIDB4OTksIDB4MDcsIDB4NGUsIDB4OWIsCisJMHhhZiwgMHhhNCwgMHgyMSwgMHgzYiwgMHg4ZSwgMHhjYywgMHgyNCwgMHg0OCwgMHhiNiwgMHgyNywgMHg1YiwgMHg5NSwKKwkweDM3LCAweGRiLCAweDg4LCAweDg1LCAweGYzLCAweDFlLCAweGFmLCAweGM3LCAweDUxLCAweDY3LCAweDVhLCAweDg4LAorCTB4YjcsIDB4ZjIsIDB4MTksIDB4Y2UsIDB4YTksIDB4OTksIDB4MTcsIDB4ZmEsIDB4YWYsIDB4ODQsIDB4YjUsIDB4MzAsCisJMHg3MywgMHg1NCwgMHg3ZiwgMHg3YSwgMHgxYywgMHhiNCwgMHgzNywgMHhlMywgMHgxNCwgMHgwMSwgMHg1MywgMHhlMCwKKwkweDZiLCAweDRhLCAweGZhLCAweDgyLCAweGUzLCAweGU0LCAweDJiLCAweDhlLCAweDBjLCAweDVjLCAweGMwLCAweGI2LAorCTB4Y2EsIDB4MWEsIDB4NWUsIDB4MzQsIDB4NDIsIDB4NTksIDB4MGIsIDB4MzEsIDB4MTAsIDB4NjUsIDB4OGIsIDB4M2MsCisJMHg0OCwgMHg5NSwgMHgzNywgMHhjMSwgMHhlYywgMHhkZSwgMHhlYywgMHgzNSwgMHg3OSwgMHg3NCwgMHg1NSwgMHhjZiwKKwkweGQ5LCAweDNlLCAweDJmLCAweDNjLCAweDBiLCAweDkxLCAweDFiLCAweDJiLCAweDI5LCAweGZmLCAweDNhLCAweGY0LAorCTB4N2QsIDB4MjEsIDB4ZWUsIDB4NDMsIDB4NTYsIDB4ZmUsIDB4NGIsIDB4MWIsIDB4ZjYsIDB4ZjQsIDB4NzgsIDB4Y2UsCisJMHhkZSwgMHhkZiwgMHhhZSwgMHg2ZCwgMHhhYywgMHg4MywgMHgzZCwgMHgwMSwgMHhhYywgMHg1OSwgMHhjOSwgMHhhMSwKKwkweDRkLCAweGJiLCAweGZjLCAweDViLCAweDA3LCAweGQ3LCAweGM0LCAweDllLCAweDc4LCAweDY2LCAweGVjLCAweDIyLAorCTB4YWUsIDB4NzUsIDB4N2YsIDB4ZjMsIDB4OTgsIDB4ODcsIDB4OGUsIDB4MDMsIDB4NWIsIDB4ZjIsIDB4MjgsIDB4MmMsCisJMHg4OCwgMHhhMCwgMHhmZiwgMHgwMSwgMHgzMywgMHhkNiwgMHhjMCwgMHhmOSwgMHg1MCwgMHgzNiwgMHg0MCwgMHhmNywKKwkweDZhLCAweDE2LCAweGY4LCAweGRkLCAweDMxLCAweDdlLCAweDJiLCAweDc1LCAweDhjLCAweGVjLCAweGUyLCAweGY3LAorCTB4MzQsIDB4YzcsIDB4NWUsIDB4NjMsIDB4MmEsIDB4NGUsIDB4NDcsIDB4MmMsIDB4NDcsIDB4ZDksIDB4M2EsIDB4NjIsCisJMHg2NCwgMHhlYiwgMHgzMywgMHg5MCwgMHhhZCwgMHhlMywgMHg0YSwgMHhiNiwgMHgwMiwgMHhmOSwgMHg4MSwgMHhlZiwKKwkweGNiLCAweDk3LCAweDc3LCAweDk1LCAweGFmLCAweGQ2LCAweGJmLCAweDJlLCAweGQwLCAweGNiLCAweDVmLCAweDlmLAorCTB4MmMsIDB4ZmMsIDB4MDUsIDB4YzYsIDB4YmQsIDB4ZTAsIDB4ZTIsIDB4M2EsIDB4OTUsIDB4OWIsIDB4MTEsIDB4ZjIsCisJMHgzMSwgMHg4MSwgMHhlYiwgMHgxOCwgMHhjYSwgMHg3ZSwgMHg1NSwgMHg2NywgMHhlMCwgMHgwMiwgMHhlYywgMHgxYSwKKwkweGU0LCAweDhkLCAweGZjLCAweDlkLCAweDg3LCAweDhkLCAweDFiLCAweGI4LCAweDEwLCAweDg1LCAweDJkLCAweGU0LAorCTB4OWUsIDB4OTUsIDB4NWUsIDB4MWIsIDB4YmEsIDB4ODEsIDB4ZjUsIDB4ZWIsIDB4ZDgsIDB4M2IsIDB4MDMsIDB4MTcsCisJMHhiYSwgMHg1MCwgMHgyNiwgMHg1NSwgMHg1ZiwgMHhmNSwgMHg4YSwgMHhhNywgMHhkYSwgMHhkNywgMHgyYiwgMHhjMywKKwkweGFhLCAweDVkLCAweGJkLCAweDMyLCAweDhhLCAweDEyLCAweGZhLCAweDNkLCAweGUzLCAweGNiLCAweGQwLCAweDg1LAorCTB4OGMsIDB4MjQsIDB4MmYsIDB4NTgsIDB4NTIsIDB4OWEsIDB4MGUsIDB4ODIsIDB4MTgsIDB4NjgsIDB4MWYsIDB4YmUsCisJMHhkMCwgMHgyMywgMHhkNywgMHhhNywgMHgzOSwgMHgzNywgMHhlYSwgMHg2MiwgMHhiMSwgMHgxNiwgMHgzMywgMHhkMywKKwkweGQ4LCAweDliLCAweGU0LCAweDFmLCAweGIwLCAweGZlLCAweDg1LCAweDIyLCAweDZjLCAweDZlLCAweDUxLCAweDRlLAorCTB4YWQsIDB4OTAsIDB4M2YsIDB4OGMsIDB4YjUsIDB4NmYsIDB4MjUsIDB4MjIsIDB4OTIsIDB4ODIsIDB4MmUsIDB4M2IsCisJMHgyYSwgMHg3MywgMHhkNSwgMHg3NiwgMHhlOCwgMHgzMiwgMHhjNywgMHhhZCwgMHhjYiwgMHgxMywgMHg1OCwgMHhhMywKKwkweDQxLCAweGNhLCAweDAzLCAweGY4LCAweDkyLCAweDQ1LCAweGRmLCAweDQ1LCAweDI5LCAweGEwLCAweDRkLCAweDcxLAorCTB4NjUsIDB4YTcsIDB4N2UsIDB4NDksIDB4ZGEsIDB4YjEsIDB4YTcsIDB4OGUsIDB4Y2EsIDB4YjEsIDB4MmEsIDB4ZmIsCisJMHg3MSwgMHhkYywgMHg3OSwgMHgzOSwgMHgwMCwgMHgxOSwgMHhmMiwgMHhkYywgMHgwOSwgMHhmNCwgMHgwMywgMHgxYiwKKwkweGQ5LCAweGY0LCAweGM3LCAweGZkLCAweDk3LCAweDdiLCAweDBmLCAweDk5LCAweDBjLCAweGY3LCAweDVkLCAweGFjLAorCTB4ZGMsIDB4OTYsIDB4OWQsIDB4YjYsIDB4YjYsIDB4MzIsIDB4ZTIsIDB4Y2MsIDB4NjYsIDB4MWUsIDB4YjIsIDB4NWUsCisJMHhjOSwgMHg2NCwgMHhhYywgMHgyYiwgMHg5OSwgMHg5YywgMHg3NSwgMHgzNSwgMHg1MywgMHhiNCwgMHhhZSwgMHhjMSwKKwkweDM2LCAweGQ1LCAweDM3LCAweGRlLCAweDgxLCAweGZjLCAweDAwLCAweDRmLCAweDEwLCAweDdiLCAweDZmLCAweGFmLAorCTB4NjEsIDB4ZGMsIDB4ZjgsIDB4MzksIDB4NmYsIDB4YzksIDB4YjksIDB4MGEsIDB4ZWQsIDB4NzQsIDB4NzAsIDB4NjgsCisJMHhkNiwgMHgyZiwgMHhkZiwgMHgwZSwgMHhmYSwgMHg0MCwgMHgwNywgMHhlMywgMHgxMSwgMHgzYiwgMHhiNiwgMHgyMywKKwkweDlhLCAweDFkLCAweDA2LCAweDRlLCAweGEwLCAweGVkLCAweGU4LCAweGEyLCAweGVkLCAweGYwLCAweDBiLCAweGIyLAorCTB4NTcsIDB4YjYsIDB4YWEsIDB4M2EsIDB4MmUsIDB4OTcsIDB4MDcsIDB4NmUsIDB4ZGEsIDB4YWEsIDB4YzUsIDB4ZTUsCisJMHhjYiwgMHhjYiwgMHhhMSwgMHgyYywgMHg3MSwgMHhiZSwgMHhmMywgMHhlZiwgMHhlYiwgMHg5MCwgMHg4OCwgMHgxYywKKwkweDUxLCAweGY2LCAweGJhLCAweDViLCAweDJlLCAweGFmLCAweDAzLCAweGQzLCAweDAyLCAweDgxLCAweGQ4LCAweDc3LAorCTB4MzIsIDB4Y2UsIDB4NjMsIDB4YWIsIDB4ZjgsIDB4ODUsIDB4ZjQsIDB4ZjAsIDB4M2MsIDB4ZjAsIDB4MWYsIDB4YzAsCisJMHgyYiwgMHg5ZSwgMHhkOSwgMHg2MSwgMHg5ZSwgMHgzZCwgMHg5YywgMHg1MSwgMHg3OCwgMHgzZiwgMHg4YSwgMHgzZCwKKwkweGM5LCAweDZiLCAweDRiLCAweDBhLCAweGMwLCAweGVkLCAweDViLCAweDE1LCAweDk2LCAweDA5LCAweDk0LCAweDI2LAorCTB4NTYsIDB4MGYsIDB4NWQsIDB4MTAsIDB4YzksIDB4ZmUsIDB4YTMsIDB4N2EsIDB4ZGYsIDB4ZWUsIDB4ODksIDB4MzUsCisJMHgwYiwgMHgzYiwgMHg1YywgMHg1YSwgMHhhMSwgMHg0YywgMHhhMywgMHg1YywgMHhkNywgMHg2MywgMHgxNywgMHg3YywKKwkweDYwLCAweGU2LCAweGQxLCAweDBlLCAweGRhLCAweDM3LCAweGUwLCAweDI3LCAweGVjLCAweDdiLCAweDg1LCAweGVkLAorCTB4MzMsIDB4ZDgsIDB4NzMsIDB4M2YsIDB4NjgsIDB4YTcsIDB4NmQsIDB4M2YsIDB4ZWMsIDB4OGYsIDB4Y2IsIDB4YjUsCisJMHgwYSwgMHhhZiwgMHhmOSwgMHgzZSwgMHhlNSwgMHg4YiwgMHg4YSwgMHgxYiwgMHhjNywgMHhhNiwgMHgxNiwgMHgzZCwKKwkweGRmLCAweGVjLCAweDMxLCAweDE1LCAweGQzLCAweGIxLCAweDNlLCAweDA2LCAweGNjLCAweDM4LCAweDcwLCAweGE2LAorCTB4NGQsIDB4ZDIsIDB4NGYsIDB4ZGIsIDB4N2QsIDB4ZmEsIDB4N2MsIDB4ZTUsIDB4OTAsIDB4MTQsIDB4ZmQsIDB4MDMsCisJMHg5OCwgMHhjMywgMHgzZSwgMHg5OSwgMHg4NywgMHgyZiwgMHhiNiwgMHhiMCwgMHgzMSwgMHgyYywgMHhmMywgMHhjMywKKwkweGYwLCAweGI5LCAweGRkLCAweGJiLCAweDg5LCAweGQ1LCAweGYwLCAweGViLCAweGMwLCAweGYzLCAweDQxLCAweDk0LAorCTB4ZWQsIDB4MjgsIDB4NmYsIDB4OTcsIDB4ZjksIDB4YTcsIDB4YmEsIDB4NjMsIDB4YmEsIDB4YmYsIDB4NjgsIDB4Y2IsCisJMHhmZCwgMHhiMywgMHgxYywgMHgzYiwgMHg5OSwgMHhiNCwgMHg3ZSwgMHgxNSwgMHgyZSwgMHg2YywgMHhjNiwgMHg4NCwKKwkweGE0LCAweDIzLCAweDJhLCAweGRlLCAweDkzLCAweDVkLCAweDMyLCAweDc4LCAweGM2LCAweDk1LCAweGExLCAweDMzLAorCTB4MDksIDB4MzksIDB4NzAsIDB4YTYsIDB4NWYsIDB4ODYsIDB4Y2YsIDB4MjQsIDB4ZTUsIDB4Y2UsIDB4MzMsIDB4MjEsCisJMHhmZSwgMHhlYSwgMHg5ZSwgMHg0YSwgMHgxYiwgMHg1YiwgMHhlMSwgMHhmZCwgMHg5YSwgMHhiNiwgMHhlMiwgMHhjZSwKKwkweDg2LCAweGM2LCAweGE4LCAweGYzLCAweDZiLCAweGM0LCAweDc0LCAweGFmLCAweDYyLCAweGVmLCAweDZlLCAweGFhLAorCTB4ZjMsIDB4Y2EsIDB4NGIsIDB4MWIsIDB4NDEsIDB4NzAsIDB4YzksIDB4NmYsIDB4NzcsIDB4YTcsIDB4ODUsIDB4ZmMsCisJMHhjZSwgMHgwMCwgMHg5ZiwgMHhmOSwgMHhkMCwgMHg2MSwgMHhhMywgMHhkMCwgMHg2MSwgMHhlMywgMHhjYSwgMHgzNiwKKwkweGQ2LCAweGJmLCAweDJlLCAweGQ2LCAweGIxLCAweGNjLCAweDAzLCAweGIyLCAweDA2LCAweGQ5LCAweDdlLCAweGQwLAorCTB4NGYsIDB4N2QsIDB4NzUsIDB4NTMsIDB4ZjEsIDB4NDcsIDB4NjIsIDB4M2QsIDB4ZDAsIDB4NjcsIDB4NzcsIDB4YWYsCisJMHhiNiwgMHhjYiwgMHgxYiwgMHhmMSwgMHgyMCwgMHgzOCwgMHgwYiwgMHgxZCwgMHg1MCwgMHhhZiwgMHg2OCwgMHhmOSwKKwkweGNkLCAweDdiLCAweGQ0LCAweDA1LCAweDBmLCAweDYxLCAweGZlLCAweGEzLCAweDc4LCAweDk2LCAweDMzLCAweGJhLAorCTB4YmQsIDB4NDMsIDB4NmUsIDB4YzQsIDB4MTMsIDB4YjIsIDB4N2UsIDB4NjAsIDB4YmMsIDB4YTUsIDB4NWUsIDB4MDYsCisJMHhmNywgMHhjMCwgMHgzZCwgMHg4ZCwgMHhkZiwgMHgyMywgMHhiZiwgMHhmMCwgMHhkYywgMHg5NSwgMHg3MywgMHhmMCwKKwkweDk5LCAweGNmLCAweDFmLCAweDQ4LCAweDhkLCAweDI3LCAweDZkLCAweGVhLCAweGMzLCAweGE0LCAweGQ0LCAweGJlLAorCTB4OWUsIDB4OTAsIDB4YjUsIDB4NjUsIDB4NmQsIDB4OTcsIDB4NjYsIDB4YmQsIDB4NzEsIDB4MjksIDB4MDAsIDB4ZmIsCisJMHhhZSwgMHgyZCwgMHg2NywgMHg1MSwgMHhiMiwgMHg3ZSwgMHhhOCwgMHg3MywgMHhiNCwgMHg1YywgMHgxNiwgMHgzMywKKwkweDc5LCAweGVjLCAweDYzLCAweGVlLCAweDBmLCAweDZkLCAweDc3LCAweDZjLCAweGJiLCAweDFkLCAweDcyLCAweGM0LAorCTB4M2QsIDB4ZjEsIDB4MzAsIDB4OWUsIDB4ZTcsIDB4YjEsIDB4YWYsIDB4NjksIDB4YzcsIDB4ZDMsIDB4OTAsIDB4YWYsCisJMHhjZiwgMHhjNiwgMHgyOCwgMHgxZiwgMHgwNSwgMHg5ZiwgMHhmOCwgMHg5YSwgMHg2ZCwgMHg1MiwgMHg4OSwgMHgzNCwKKwkweDllLCAweDRmLCAweDRiLCAweDVhLCAweDlkLCAweDBiLCAweGNkLCAweGZhLCAweDYxLCAweDdmLCAweDU5LCAweGEzLAorCTB4MTcsIDB4MjIsIDB4OGMsIDB4ODEsIDB4ZTEsIDB4ZWYsIDB4NjQsIDB4OGMsIDB4ZjIsIDB4MTgsIDB4ZjEsIDB4YzIsCisJMHhlNywgMHgyMywgMHhiMCwgMHgzZCwgMHg1MSwgMHgzNSwgMHhjNiwgMHhmYywgMHgzMiwgMHg5ZiwgMHhhNSwgMHg1ZCwKKwkweGI2LCAweDJmLCAweGY4LCAweGJjLCAweDE3LCAweGY5LCAweDQ0LCAweDgzLCAweGYxLCAweDlhLCAweDk4LCAweDNjLAorCTB4ZGEsIDB4ZTgsIDB4MDIsIDB4YmQsIDB4NmQsIDB4YmYsIDB4YzIsIDB4ZjYsIDB4ZWMsIDB4ZWMsIDB4NzMsIDB4M2IsCisJMHhiYiwgMHg5NSwgMHg3MCwgMHg5NSwgMHg2ZSwgMHhhMSwgMHgxZSwgMHhhMSwgMHgwZSwgMHg2OSwgMHgxNywgMHg2NywKKwkweDhjLCAweGZiLCAweDBjLCAweDZiLCAweGIyLCAweDhjLCAweDM1LCAweDVhLCAweGM2LCAweDFhLCAweDJkLCAweDYzLAorCTB4OGQsIDB4OTYsIDB4YjEsIDB4N2UsIDB4Y2IsIDB4ZDQsIDB4MmQsIDB4ODMsIDB4ZDgsIDB4Y2YsIDB4MzksIDB4NzMsCisJMHg4NiwgMHg0MCwgMHhmZCwgMHhmMiwgMHgxYywgMHhkNiwgMHg3NiwgMHg1YSwgMHhmZSwgMHg3NiwgMHg2MywgMHg1MiwKKwkweGZlLCAweGYzLCAweGM2LCAweDExLCAweGUwLCAweGVlLCAweDIyLCAweGQ2LCAweDM1LCAweDg3LCAweDc1LCAweGNkLAorCTB4NjIsIDB4NWQsIDB4OGYsIDB4NjIsIDB4NWQsIDB4YzcsIDB4NTUsIDB4Y2MsIDB4YjMsIDB4NWEsIDB4NDksIDB4NWQsCisJMHgyYSwgMHgyYiwgMHg4YywgMHhmZiwgMHgxNiwgMHhlNCwgMHg2MSwgMHg0YywgMHg5YywgMHhkNSwgMHg3ZSwgMHhlOCwKKwkweDhiLCAweDcyLCAweDEwLCAweGY3LCAweDgyLCAweDQzLCAweGMwLCAweGQ2LCAweDE4LCAweGJiLCAweDljLCAweDcyLAorCTB4OTQsIDB4ZWUsIDB4ZjMsIDB4ZGMsIDB4Y2YsIDB4NjMsIDB4YWYsIDB4YmMsIDB4MmYsIDB4OWIsIDB4YWEsIDB4NTIsCisJMHg3NSwgMHg5ZCwgMHhhYiwgMHgwZSwgMHg0YiwgMHhlOSwgMHgyMiwgMHhlYSwgMHg5ZiwgMHhlZCwgMHgwMiwgMHhhZCwKKwkweGM0LCAweDdjLCAweGE5LCAweGQzLCAweDI1LCAweGQ5LCAweDg0LCAweGJlLCAweGNiLCAweDgxLCAweGM2LCAweDBmLAorCTB4YzksIDB4N2MsIDB4M2MsIDB4ZjUsIDB4OWMsIDB4YzgsIDB4YjgsIDB4ZGMsIDB4MDMsIDB4M2YsIDB4OWQsIDB4ZjEsCisJMHhjYywgMHg5YywgMHg4YSwgMHhiMSwgMHhlMSwgMHhmYSwgMHg2MiwgMHgxNiwgMHhmZSwgMHgzNiwgMHg2ZCwgMHhlYywKKwkweDNlLCAweGUzLCAweDg3LCAweDZiLCAweDFjLCAweDViLCAweDEzLCAweDhlLCAweGNiLCAweGYxLCAweGZlLCAweDU4LAorCTB4ZTYsIDB4ODAsIDB4MTUsIDB4ZTEsIDB4ZWIsIDB4MDMsIDB4OGIsIDB4NzgsIDB4MDksIDB4OGMsIDB4MTksIDB4OWIsCisJMHhiZCwgMHhlOCwgMHhjNiwgMHhlNiwgMHgyZSwgMHhiMiwgMHg5ZiwgMHg5OCwgMHg0NCwgMHg5NiwgMHhhOCwgMHhiMywKKwkweGQ4LCAweDBmLCAweDc0LCAweDNiLCAweGZhLCAweDRlLCAweGFiLCAweDMzLCAweGIzLCAweDExLCAweGI0LCAweGZiLAorCTB4NWQsIDB4ZTAsIDB4NGMsIDB4Y2QsIDB4YzcsIDB4ZmMsIDB4NTksIDB4NmQsIDB4ZjcsIDB4ZjIsIDB4ZjUsIDB4NjYsCisJMHhhYywgMHgwNywgMHhkZCwgMHgwMiwgMHhiYiwgMHg5OCwgMHhhYiwgMHg2YiwgMHhkYywgMHg1NiwgMHg1NCwgMHhiOCwKKwkweDRlLCAweDYzLCAweGJhLCAweGEzLCAweDcyLCAweGE4LCAweDQzLCAweDNhLCAweDNkLCAweDM1LCAweDlmLCAweGM4LAorCTB4ZDksIDB4NGQsIDB4ZTIsIDB4NTgsIDB4OGMsIDB4YzEsIDB4MzYsIDB4ZDEsIDB4MjYsIDB4YmEsIDB4MzMsIDB4YjAsCisJMHhhNywgMHhiNywgMHg3NywgMHg1MCwgMHg2NiwgMHgzZSwgMHgwOSwgMHhkYywgMHgzOCwgMHhiMCwgMHhhNCwgMHhjZiwKKwkweDk4LCAweDA2LCAweDJlLCAweGZhLCAweDk4LCAweDhmLCAweGY0LCAweDMxLCAweGIyLCAweDY5LCAweDYzLCAweDBlLAorCTB4MWYsIDB4NTUsIDB4NzYsIDB4NzksIDB4MGMsIDB4YjYsIDB4ZDgsIDB4ODUsIDB4YWMsIDB4NTMsIDB4ZTcsIDB4ZjQsCisJMHg2MSwgMHhmZiwgMHhmMCwgMHg5ZSwgMHhiYSwgMHg4NywgMHg3YSwgMHg4YywgMHgzMiwgMHgxMywgMHgwNywgMHg2ZSwKKwkweDgyLCAweGZlLCAweGU5LCAweGVlLCAweDk3LCAweGRhLCAweDA2LCAweGRmLCAweGY1LCAweDJiLCAweDFkLCAweGVkLAorCTB4NjAsIDB4MGQsIDB4MTYsIDB4MmIsIDB4YzEsIDB4YTEsIDB4YmMsIDB4NWYsIDB4ODYsIDB4MTYsIDB4MjUsIDB4Y2YsCisJMHhjOSwgMHgwZiwgMHhmMiwgMHg3ZCwgMHgxNCwgMHhiNCwgMHg5MSwgMHhjNywgMHhkZCwgMHg2NSwgMHg3ZCwgMHg2ZSwKKwkweGI5LCAweDU3LCAweDRhLCAweDU1LCAweGVhLCAweDY5LCAweDk0LCAweGI1LCAweGJkLCAweGYwLCAweDlkLCAweDVjLAorCTB4ODUsIDB4NjUsIDB4NzMsIDB4ZDMsIDB4OWMsIDB4N2IsIDB4YWMsIDB4ZWMsIDB4NDIsIDB4NmUsIDB4ZGQsIDB4ODMsCisJMHg5MywgMHgyYSwgMHhhNiwgMHg3MiwgMHg3OSwgMHgyOSwgMHhlNSwgMHhkNywgMHg2YywgMHg4YywgMHgwOSwgMHg5ZCwKKwkweDY5LCAweDlmLCAweDFmLCAweDkzLCAweGI5LCAweDk1LCAweDZlLCAweDE5LCAweDVjLCAweGU1LCAweGY5LCAweGYyLAorCTB4NTAsIDB4NGMsIDB4YmEsIDB4ODMsIDB4ZTAsIDB4OWMsIDB4OWYsIDB4NTcsIDB4YjEsIDB4YzcsIDB4ODEsIDB4NTUsCisJMHg2MCwgMHg4MiwgMHhhMywgMHg5YSwgMHg3NywgMHg5YywgMHgyZiwgMHg3NCwgMHhjNCwgMHhiZiwgMHg4MiwgMHg4ZiwKKwkweGVmLCAweDhlLCAweDhmLCAweDhiLCAweGJiLCAweGUwLCAweGUzLCAweDU3LCAweDJmLCAweDQyLCAweGZlLCAweDk2LAorCTB4MjEsIDB4OWIsIDB4Y2IsIDB4OTAsIDB4Y2QsIDB4NjUsIDB4YzgsIDB4ZTYsIDB4MzIsIDB4NjQsIDB4NzMsIDB4MTksCisJMHhiMiwgMHg4OSwgMHhmZCwgMHhmMywgMHhmYywgMHhmMiwgMHhiOCwgMHhjMSwgMHgxZiwgMHg5ZiwgMHg4MiwgMHgyYywKKwkweDdmLCAweGRiLCAweGUwLCAweDhmLCAweDUxLCAweGM4LCAweDcwLCAweDEyLCAweGIyLCAweGViLCAweDQzLCAweDZlLAorCTB4ODcsIDB4MjEsIDB4Y2IsIDB4MWUsIDB4NjQsIDB4YjksIDB4MWYsIDB4NzIsIDB4OWMsIDB4NTAsIDB4ZmUsIDB4ZTMsCisJMHgwNCwgMHhiMCwgMHhlOCwgMHg4MywgMHhmMCwgMHg0MSwgMHhjZSwgMHg1NywgMHhmYiwgMHg2NSwgMHg1MSwgMHhkMSwKKwkweDEyLCAweGM4LCAweDk2LCAweGJmLCAweDQ5LCAweDFlLCAweDYyLCAweDVmLCAweGQwLCAweDNmLCAweDc3LCAweGU1LAorCTB4ZmMsIDB4NWEsIDB4NDgsIDB4ZGIsIDB4YWIsIDB4ZjIsIDB4Y2QsIDB4Y2EsIDB4NmIsIDB4ZjIsIDB4NDIsIDB4ODUsCisJMHgzNCwgMHhlNiwgMHg2NCwgMHgxMSwgMHhlZiwgMHhkNiwgMHg5ZSwgMHhhMiwgMHgxZiwgMHhhOSwgMHhlOCwgMHg4MywKKwkweGNjLCAweDlkLCAweDk0LCAweGZmLCAweDAzLCAweDVlLCAweGFlLCAweDZmLCAweDdjLCAweDU4LCAweDNlLCAweGU3LAorCTB4NTIsIDB4ODYsIDB4ZTMsIDB4ZDAsIDB4MzUsIDB4YjgsIDB4M2YsIDB4NDAsIDB4YmQsIDB4MDQsIDB4M2YsIDB4YjQsCisJMHg5MiwgMHgyYSwgMHg5NywgMHhhMCwgMHgyNywgMHhhYSwgMHhmNiwgMHgwOCwgMHgzMCwgMHg1OCwgMHgzOSwgMHhlOCwKKwkweGExLCAweDBlLCAweGFiLCAweDdhLCAweGVlLCAweDgwLCAweDRkLCAweGRlLCAweGVjLCAweDg3LCAweGJjLCAweGE0LAorCTB4YmUsIDB4MGEsIDB4ZTEsIDB4YzUsIDB4MzMsIDB4ZGEsIDB4NzMsIDB4OTQsIDB4MzUsIDB4ZTgsIDB4Y2YsIDB4YTcsCisJMHhjOCwgMHg0NywgMHhmYSwgMHhiNSwgMHhiOCwgMHg1NiwgMHhiYSwgMHhmNywgMHgyNywgMHgyYSwgMHg3ZSwgMHg1YywKKwkweDlhLCAweDg2LCAweDJmLCAweGJmLCAweDQ2LCAweDNlLCAweDQxLCAweDU2LCAweDllLCAweDIyLCAweDFmLCAweDQ5LAorCTB4OWYsIDB4ZTYsIDB4ZTMsIDB4MjMsIDB4MTIsIDB4ZjIsIDB4OTAsIDB4ZWYsIDB4NWEsIDB4NzksIDB4MDgsIDB4MjcsCisJMHhhYSwgMHgzMywgMHg4ZSwgMHhiOSwgMHg3ZiwgMHgyZCwgMHg2NiwgMHg2MiwgMHhjOCwgMHhjNiwgMHgyNiwgMHhiZiwKKwkweDJhLCAweGQzLCAweDBkLCAweGNlLCAweGM3LCAweDkyLCAweGRiLCAweGJjLCAweGFiLCAweGYwLCAweGE5LCAweDM4LAorCTB4ZjYsIDB4YWIsIDB4YzEsIDB4YTMsIDB4NzEsIDB4Y2UsIDB4ODEsIDB4ZWIsIDB4YmEsIDB4NDcsIDB4ZWEsIDB4N2QsCisJMHhiZSwgMHg4OSwgMHhhZiwgMHhmYywgMHgyYSwgMHg1YiwgMHhjNCwgMHg3YSwgMHhlMCwgMHgzYiwgMHhmNCwgMHhjYiwKKwkweDBiLCAweGNiLCAweGUwLCAweDM3LCAweGZjLCAweGFlLCAweDZmLCAweGMwLCAweGVmLCAweDYyLCAweDljLCAweDUzLAorCTB4YWYsIDB4Y2YsIDB4YjgsIDB4ODksIDB4ZDksIDB4YjYsIDB4YzYsIDB4NmEsIDB4OTMsIDB4NTgsIDB4MjMsIDB4ZmEsCisJMHhlZCwgMHhhOSwgMHhmMiwgMHg3NSwgMHhlOCwgMHhjMSwgMHhlNywgMHg3ZCwgMHhjNiwgMHhmOCwgMHgwMiwgMHhmOSwKKwkweGVmLCAweDdlLCAweGIzLCAweGE2LCAweDUzLCAweGYxLCAweDZkLCAweDc5LCAweDA0LCAweGJhLCAweGYxLCAweDUxLAorCTB4ZTgsIDB4YzYsIDB4NGYsIDB4ZGMsIDB4OTIsIDB4ZTcsIDB4NDMsIDB4NzksIDB4YmIsIDB4N2YsIDB4NmEsIDB4NzYsCisJMHg2NSwgMHhiMCwgMHgxYywgMHhiMSwgMHhmYiwgMHgzMSwgMHhhNywgMHhlNiwgMHhiNiwgMHg4YywgMHhmMSwgMHgyNSwKKwkweDRkLCAweDJjLCAweGI2LCAweDE5LCAweGIzLCAweDg2LCAweGYxLCAweDU2LCAweGNhLCAweDc0LCAweDIwLCAweGQ3LAorCTB4ZmMsIDB4NzIsIDB4NTcsIDB4NDQsIDB4OWQsIDB4M2YsIDB4N2IsIDB4YjQsIDB4MTMsIDB4YmIsIDB4ZmMsIDB4YmQsCisJMHhkOCwgMHhhMSwgMHhlZCwgMHhmMywgMHg1YiwgMHg0NiwgMHhjNiwgMHg3NiwgMHg3MiwgMHg5OSwgMHgyNiwgMHgzMiwKKwkweGUxLCAweDk5LCAweDczLCAweDM3LCAweDZjLCAweDFlLCAweGY3LCAweDZkLCAweDJhLCAweDk5LCAweGMzLCAweGRlLAorCTB4OWUsIDB4ZGYsIDB4YTAsIDB4NWQsIDB4MjAsIDB4OWUsIDB4NmMsIDB4NjMsIDB4NGMsIDB4NmYsIDB4YTYsIDB4M2QsCisJMHhjYiwgMHhkOCwgMHg0MSwgMHgzNywgMHhmYywgMHg5NywgMHhkNywgMHhlNSwgMHhkYywgMHhjYSwgMHgzZiwgMHg3NSwKKwkweGU4LCAweGZkLCAweGE0LCAweDczLCAweGNmLCAweGVjLCAweDhiLCAweGFkLCAweDcxLCAweDU0LCAweGJkLCAweDQ2LAorCTB4ODUsIDB4NGMsIDB4MzcsIDB4MzAsIDB4MGMsIDB4ZmQsIDB4YTUsIDB4NmIsIDB4Y2EsIDB4NWYsIDB4M2EsIDB4ZWMsCisJMHgzYiwgMHhiMiwgMHgxOSwgMHg2NywgMHg5ZiwgMHhhZiwgMHhjYiwgMHhiMSwgMHg5NSwgMHhlMSwgMHg0ZSwgMHhjNiwKKwkweDJiLCAweDE3LCAweDk3LCAweDBmLCAweGM4LCAweDk2LCAweGQyLCAweDY1LCAweDBmLCAweGEzLCAweDZlLCAweDE2LAorCTB4N2IsIDB4MzYsIDB4MDgsIDB4MjYsIDB4ZmMsIDB4YjQsIDB4N2IsIDB4NWUsIDB4NDYsIDB4MTIsIDB4ZTcsIDB4YzEsCisJMHhkMywgMHgzZiwgMHg0MywgMHgxYiwgMHhmOCwgMHhkNCwgMHg0MSwgMHgxMSwgMHhjZiwgMHhhZSwgMHhjMiwgMHg2ZiwKKwkweGJmLCAweDIxLCAweGJjLCAweDFlLCAweDcxLCAweDRmLCAweDQzLCAweDE4LCAweDcyLCAweDZlLCAweGRhLCAweDdkLAorCTB4NGIsIDB4NDIsIDB4ZGIsIDB4NDUsIDB4M2IsIDB4YzUsIDB4MzMsIDB4ZWIsIDB4M2UsIDB4MjksIDB4YWMsIDB4NmIsCisJMHg1YSwgMHhlNywgMHg0MSwgMHhlYiwgMHhhOSwgMHgxNSwgMHg4ZSwgMHhjMSwgMHg3OSwgMHg5MSwgMHhkZSwgMHg3ZiwKKwkweGUyLCAweDE5LCAweDA3LCAweGU2LCAweGYyLCAweDQxLCAweDYwLCAweDU5LCAweGUyLCAweDI4LCAweDFkLCAweDhiLAorCTB4MjgsIDB4YTAsIDB4OGQsIDB4YzIsIDB4NWEsIDB4M2UsIDB4Y2YsIDB4MmIsIDB4YzksIDB4YzcsIDB4MmYsIDB4YzIsCisJMHg2ZiwgMHg4OCwgMHg0MywgMHg4ZSwgMHhmMSwgMHg3YywgMHhiZCwgMHgzOSwgMHhlNiwgMHhjYiwgMHhmYSwgMHhmYSwKKwkweDFjLCAweGVkLCAweDkyLCAweGYyLCAweDExLCAweGYyLCAweGMwLCAweDg1LCAweDkzLCAweGE4LCAweGNiLCAweDc4LAorCTB4NjcsIDB4MTAsIDB4MWMsIDB4ZjcsIDB4ZTEsIDB4YzcsIDB4M2YsIDB4NDUsIDB4ZDksIDB4YmIsIDB4NTMsIDB4NGEsCisJMHhjYSwgMHhlNywgMHgyMCwgMHg4NiwgMHg2NSwgMHhmZSwgMHhjNiwgMHg5NiwgMHgxYiwgMHhjMywgMHhmZSwgMHg5YywKKwkweDg2LCAweDZkLCAweGNiLCAweGMzLCAweGI2LCAweDQ1LCAweGVlLCAweDNlLCAweDAyLCAweDNjLCAweGFiLCAweGNlLAorCTB4ZDksIDB4NjAsIDB4M2YsIDB4MzksIDB4ZWUsIDB4YzMsIDB4ZDYsIDB4ZGYsIDB4NjcsIDB4NDYsIDB4ODEsIDB4NmYsCisJMHgxZiwgMHgwMCwgMHhiZSwgMHg2NSwgMHgxZSwgMHg1OSwgMHgxZSwgMHgxOCwgMHg5NywgMHhmOCwgMHhkNiwgMHg5NSwKKwkweGJmLCAweGRhLCAweGM4LCAweDQzLCAweGI3LCAweDRkLCAweDc0LCAweDUyLCAweDE3LCAweDFmLCAweGQ5LCAweGI2LAorCTB4ZDMsIDB4NDUsIDB4NjMsIDB4YzcsIDB4ZjcsIDB4NDksIDB4NDEsIDB4OWQsIDB4YmIsIDB4MTUsIDB4OTUsIDB4YmQsCisJMHg5ZiwgMHg1ZiwgMHgyNywgMHhhZSwgMHg4NywgMHhlZCwgMHg1ZiwgMHg4NywgMHhlZiwgMHg1NywgMHhhMSwgMHg4ZiwKKwkweDk2LCAweGMzLCAweGZkLCAweDAzLCAweGI4LCAweDdmLCAweDA4LCAweGU1LCAweDExLCAweDk0LCAweGRhLCAweGY3LAorCTB4YjksIDB4YjQsIDB4MWMsIDB4ZTksIDB4ZDQsIDB4MzEsIDB4ZGUsIDB4NDQsIDB4OTMsIDB4ZmYsIDB4NDMsIDB4MzksCisJMHg4YywgMHg0ZiwgMHhjZCwgMHg1NiwgMHhjMywgMHgzOCwgMHhmZCwgMHgyMSwgMHgzOSwgMHhlZSwgMHhlYiwgMHhiMywKKwkweGY1LCAweDA5LCAweGY4LCAweGViLCAweDlkLCAweGMwLCAweDYwLCAweDBmLCAweDNkLCAweDBkLCAweDliLCAweDcxLAorCTB4ZGYsIDB4MjEsIDB4YjEsIDB4ZWYsIDB4YjMsIDB4NjQsIDB4NzYsIDB4MTQsIDB4NzQsIDB4OGYsIDB4MGUsIDB4NDIsCisJMHgzZiwgMHhmNywgMHhjMywgMHhkZiwgMHg1NiwgMHg3ZSwgMHhiMCwgMHhjMSwgMHg5YywgMHhkNCwgMHhmYiwgMHg3MSwKKwkweGY5LCAweGYzLCAweDhkLCAweDEwLCAweDdiLCAweGI2LCAweDAxLCAweGE3LCAweDMyLCAweDU2LCAweDk4LCAweDU0LAorCTB4YjgsIDB4ZDksIDB4YmUsIDB4OGQsIDB4ZWIsIDB4ZGYsIDB4MjUsIDB4ZjksIDB4ZGIsIDB4YzgsIDB4NTMsIDB4M2UsCisJMHgwMywgMHhhNiwgMHg1MSwgMHhkNywgMHg3MSwgMHg0OSwgMHg5ZiwgMHhlMSwgMHhiYSwgMHhiNSwgMHg5YiwgMHgxOCwKKwkweDJmLCAweDZkLCAweDA2LCAweGNiLCAweGJmLCAweGVjLCAweGRjLCAweGM2LCAweDk2LCAweDhjLCAweDAxLCAweDU5LAorCTB4ZTMsIDB4OWQsIDB4M2IsIDB4NzksIDB4NjksIDB4YTEsIDB4ZGMsIDB4ODcsIDB4ZjksIDB4MDQsIDB4OTQsIDB4ZmYsCisJMHg0YiwgMHhhMCwgMHg5ZiwgMHhmNiwgMHg5ZSwgMHhiNiwgMHhjMSwgMHhiNSwgMHhhMiwgMHgwNywgMHg4OSwgMHgwNSwKKwkweDIyLCAweGQyLCAweGU2LCAweDcxLCAweDlmLCAweGQyLCAweDRlLCAweDFkLCAweGMxLCAweDljLCAweDg4LCAweDBkLAorCTB4M2UsIDB4ZGYsIDB4MmQsIDB4ZGQsIDB4YzQsIDB4MDcsIDB4NDksIDB4M2MsIDB4YmIsIDB4OGUsIDB4N2EsIDB4YmMsCisJMHg2NywgMHgzZCwgMHhmOCwgMHg1MiwgMHhjYiwgMHg2MiwgMHg0NSwgMHgwZSwgMHhjZSwgMHg0MSwgMHhhZSwgMHgzZCwKKwkweDVjLCAweDFmLCAweDQ3LCAweDM5LCAweDhjLCAweGYyLCAweDcxLCAweDk0LCAweGQ0LCAweDRmLCAweDU3LCAweDY1LAorCTB4NTYsIDB4YzcsIDB4N2YsIDB4MTQsIDB4MGUsIDB4YTEsIDB4ZWQsIDB4OWMsIDB4ZjYsIDB4YTksIDB4NTMsIDB4NGYsCisJMHg4YSwgMHgzZCwgMHhmNiwgMHg0MSwgMHgzYywgMHhhMywgMHgxZiwgMHg4ZiwgMHg5MSwgMHhlZSwgMHhmZiwgMHg4MiwKKwkweDg5LCAweDNmLCAweDZkLCAweGM3LCAweGFjLCAweDhjLCAweDRlLCAweDVlLCAweDUxLCAweDMxLCAweGZjLCAweGY1LAorCTB4YTcsIDB4ZTgsIDB4MjMsIDB4ZmYsIDB4NTQsIDB4MWUsIDB4YmQsIDB4MjksIDB4YjYsIDB4YjcsIDB4MWQsIDB4Y2IsCisJMHgxYSwgMHgyZiwgMHgyOCwgMHg1ZCwgMHg0YywgMHg3ZSwgMHg0MCwgMHgwZiwgMHhiYiwgMHgxOSwgMHhmOSwgMHhmYSwKKwkweDQ2LCAweDBmLCAweGY0LCAweDViLCAweDVjLCAweGRlLCAweDU4LCAweDA5LCAweDgwLCAweGQ1LCAweGI5LCAweDM3LAorCTB4NDcsIDB4NjAsIDB4MzMsIDB4NWQsIDB4ODMsIDB4MDMsIDB4ZTIsIDB4ZjIsIDB4MmYsIDB4OTAsIDB4ZjMsIDB4N2YsCisJMHhhZSwgMHgyNCwgMHhlNCwgMHhjZCwgMHg0YSwgMHgxMCwgMHg1YywgMHhmMywgMHhkMywgMHhmZSwgMHg2MSwgMHg5MSwKKwkweGJiLCAweGRiLCAweDc0LCAweDBlLCAweDAwLCAweDZhLCAweGU4LCAweDczLCAweGZiLCAweDc5LCAweDc1LCAweDc2LAorCTB4OGYsIDB4N2EsIDB4ZDAsIDB4M2IsIDB4NmYsIDB4MzYsIDB4N2UsIDB4MDEsIDB4YmUsIDB4ZWEsIDB4M2UsIDB4NWIsCisJMHhkYiwgMHg2ZSwgMHhlOSwgMHhiNiwgMHgzYywgMHhmYiwgMHg0ZiwgMHg2YywgMHg0YSwgMHhkYSwgMHhlNCwgMHgxMCwKKwkweGE0LCAweGQxLCAweDM2LCAweDNkLCAweGJjLCAweGI2LCAweGRkLCAweDllLCAweDZkLCAweDMzLCAweGNhLCAweDVlLAorCTB4OTQsIDB4ZDYsIDB4N2IsIDB4YTUsIDB4ZmUsIDB4MTcsIDB4ZGMsIDB4MmIsIDB4ZjAsIDB4NjMsIDB4ZDUsIDB4OTksCisJMHgxMSwgMHg0YiwgMHg5ZSwgMHg1NSwgMHhiMCwgMHg0ZSwgMHhkMiwgMHhiYywgMHgxZiwgMHgzMCwgMHhlZiwgMHgzZCwKKwkweDg1LCAweDVmLCAweDlkLCAweGVkLCAweDE4LCAweDIwLCAweDdjLCAweGRiLCAweGU1LCAweGQ0LCAweDY5LCAweDY1LAorCTB4NDcsIDB4MTgsIDB4YjcsIDB4NWQsIDB4YTYsIDB4N2YsIDB4NGYsIDB4NWQsIDB4M2UsIDB4NjksIDB4ZWMsIDB4MDksCisJMHg3YywgMHg4ZiwgMHhkYSwgMHg3MSwgMHg5OSwgMHg1MSwgMHhkNywgMHg5ZiwgMHg5MCwgMHg0NywgMHg1YywgMHhmMiwKKwkweGVlLCAweGE0LCAweGY4LCAweDYzLCAweDFhLCAweDRiLCAweDg5LCAweDg5LCAweDA5LCAweDc2LCAweDc4LCAweDI3LAorCTB4ZTEsIDB4OWIsIDB4MjksIDB4N2IsIDB4ZWMsIDB4N2UsIDB4NGMsIDB4YzgsIDB4ZTMsIDB4MzYsIDB4ZGEsIDB4OGYsCisJMHg5YywgMHg2ZCwgMHgwMSwgMHg4MywgMHgzZCwgMHg5OSwgMHg5MSwgMHhlNywgMHgzNiwgMHg1MCwgMHgxNywgMHhlYiwKKwkweGY1LCAweDMxLCAweGMxLCAweGZkLCAweGIzLCAweGI4LCAweDY3LCAweDFjLCAweGVkLCAweGU5LCAweGI4LCAweDQ0LAorCTB4OWUsIDB4ZWUsIDB4OTcsIDB4ZjYsIDB4MzMsIDB4YzQsIDB4MjksIDB4ZTQsIDB4NjksIDB4NDIsIDB4ZGEsIDB4Y2UsCisJMHgxMCwgMHgyZiwgMHgzMywgMHhiNiwgMHg5YywgMHgxYSwgMHhiZiwgMHgyMSwgMHg4YywgMHhlNSwgMHhhNCwgMHhmYywKKwkweDJiLCAweGY4LCAweDZkLCAweDYxLCAweGRlLCAweGVkLCAweGYwLCAweGMzLCAweGRiLCAweDJlLCAweGU4LCAweDc2LAorCTB4ZjYsIDB4YjksIDB4M2UsIDB4MDAsIDB4YzMsIDB4OTgsIDB4ZDgsIDB4ZjAsIDB4NTksIDB4ZWMsIDB4MGIsIDB4MmMsCisJMHhiYiwgMHg1MCwgMHhmMiwgMHgxZCwgMHg0OCwgMHgzYSwgMHgzNywgMHg2MCwgMHhkZSwgMHg0MSwgMHgzNywgMHg1ZSwKKwkweGUwLCAweGY4LCAweGIwLCAweDhmLCAweGJlLCAweGNlLCAweDE3LCAweDFkLCAweDE4LCAweGYyLCAweGU1LCAweGQyLAorCTB4MWEsIDB4NjUsIDB4OTMsIDB4NzEsIDB4NzQsIDB4NjIsIDB4OTcsIDB4NTcsIDB4YzUsIDB4NWUsIDB4Y2EsIDB4NDgsCisJMHhlNCwgMHg0YywgMHgwNiwgMHg3MiwgMHhlOCwgMHhjMywgMHhlZSwgMHgxMiwgMHhmMywgMHhkMSwgMHhkNiwgMHhlMSwKKwkweDM5LCAweGYwLCAweDU2LCAweGZkLCAweDI5LCAweGNlLCAweGU5LCAweGFhLCAweGQ4LCAweGY1LCAweDVmLCAweDY1LAorCTB4YzMsIDB4YzIsIDB4N2QsIDB4YzEsIDB4MzEsIDB4NGUsIDB4YzIsIDB4ZmUsIDB4NDYsIDB4ZTUsIDB4NzMsIDB4NzEsCisJMHhjYSwgMHg4YSwgMHg5NiwgMHhiZCwgMHhiNCwgMHgzZCwgMHhhNCwgMHg2NCwgMHhiNSwgMHg0OCwgMHhiYiwgMHhmYywKKwkweGQ0LCAweGVkLCAweDdiLCAweGUwLCAweGE3LCAweDlkLCAweDJlLCAweDZmLCAweGNiLCAweDE4LCAweGYzLCAweDQyLAorCTB4MDMsIDB4YTksIDB4MDIsIDB4ZWYsIDB4Y2MsIDB4N2IsIDB4OTYsIDB4MmMsIDB4NzgsIDB4MjcsIDB4MTUsIDB4MWUsCisJMHg3YywgMHgxNCwgMHhlZCwgMHg0ZiwgMHg5OCwgMHhmNiwgMHgwYiwgMHgzMiwgMHg2NCwgMHg2NCwgMHg1ZCwgMHhjNSwKKwkweDExLCAweGEwLCAweGM3LCAweGI4LCAweDY2LCAweGJjLCAweGZmLCAweDJkLCAweGYxLCAweDdiLCAweGI5LCAweDllLAorCTB4MjcsIDB4NjUsIDB4NjAsIDB4NGMsIDB4ZTMsIDB4OTAsIDB4OTIsIDB4NGQsIDB4MWMsIDB4ZjIsIDB4YWUsIDB4NzEsCisJMHg1YSwgMHg5NSwgMHhjYiwgMHg1NywgMHhhOCwgMHhkMCwgMHhjZSwgMHhlYywgMHg4NSwgMHhmYywgMHhjMiwgMHgyNywKKwkweGRhLCAweDA4LCAweDYzLCAweGI1LCAweDZhLCAweDVmLCAweDI1LCAweDA2LCAweDZjLCAweDRiLCAweGJjLCAweGExLAorCTB4YTEsIDB4ZTEsIDB4MTIsIDB4ZjAsIDB4YzksIDB4M2MsIDB4N2MsIDB4NWUsIDB4ZDIsIDB4YjEsIDB4MDAsIDB4M2IsCisJMHhiNywgMHhlNiwgMHhmZiwgMHg0YiwgMHg3MCwgMHgyMiwgMHg5ZSwgMHgzYSwgMHgzZCwgMHhmMywgMHhhZSwgMHhmMSwKKwkweGZiLCAweDMwLCAweDZlLCAweGRmLCAweDdjLCAweDllLCAweGIyLCAweDY5LCAweGZkLCAweDYxLCAweGUzLCAweDg4LAorCTB4ZDIsIDB4OTEsIDB4MzcsIDB4ZTMsIDB4YWUsIDB4MzAsIDB4N2UsIDB4M2YsIDB4N2QsIDB4NTMsIDB4MWMsIDB4YjUsCisJMHhkNCwgMHgwOCwgMHg3MywgMHhmMCwgMHg0MiwgMHgzZCwgMHg3ZiwgMHgxYSwgMHhiYSwgMHgzYSwgMHgyMiwgMHgzNywKKwkweDgwLCAweDQxLCAweDI3LCAweGMwLCAweGJiLCAweDczLCAweDZiLCAweDY1LCAweGViLCAweDRhLCAweDQ1LCAweGQ0LAorCTB4N2QsIDB4YzEsIDB4NjcsIDB4NGUsIDB4ZGUsIDB4NDcsIDB4YzAsIDB4M2IsIDB4ZDgsIDB4OTgsIDB4MGQsIDB4YzcsCisJMHg5YywgMHgyOSwgMHgzOSwgMHg3OCwgMHg2NiwgMHgyYiwgMHg5ZiwgMHhiOSwgMHhhNCwgMHg3NCwgMHhmMywgMHhlMSwKKwkweDJlLCAweDllLCAweGI5LCAweDVjLCAweDVhLCAweGZlLCAweDI4LCAweGVlLCAweDc5LCAweGY2LCAweDcxLCAweGE0LAorCTB4ZTUsIDB4ZjksIDB4NjYsIDB4NGYsIDB4NTQsIDB4NjMsIDB4MzcsIDB4ZjAsIDB4NWQsIDB4ZjMsIDB4Y2QsIDB4MDEsCisJMHhiZiwgMHg4YiwgMHg4YywgMHhlNywgMHgzNSwgMHg4OCwgMHg4MywgMHgzYiwgMHgwZCwgMHgwZSwgMHgyNiwgMHhjZSwKKwkweGMyLCAweDdhLCAweDZkLCAweDMwLCAweDBlLCAweDQzLCAweGFjLCAweDE1LCAweDU3LCAweDdlLCAweGExLCAweGMyLAorCTB4NWUsIDB4ZmUsIDB4MzEsIDB4OTMsIDB4N2YsIDB4NzEsIDB4YWIsIDB4NWMsIDB4Y2QsIDB4NTYsIDB4NDIsIDB4M2MsCisJMHhkNywgMHgyYywgMHg1NywgMHhlZSwgMHg2ZiwgMHgyMCwgMHg1NywgMHgxMywgMHg1ZCwgMHgzYSwgMHhkZiwgMHg4MSwKKwkweDM2LCAweGNkLCAweDkyLCAweDM3LCAweGFhLCAweDdiLCAweDY0LCAweGFiLCAweGZhLCAweDIwLCAweDcwLCAweGI0LAorCTB4Y2EsIDB4ZmIsIDB4OTAsIDB4MmQsIDB4YWMsIDB4YzUsIDB4ODMsIDB4OTUsIDB4NDksIDB4OTksIDB4YTgsIDB4YzYsCisJMHhlNCwgMHg1YSwgMHhkNSwgMHg3ZSwgMHhhMCwgMHg1ZCwgMHgxOCwgMHgwNywgMHgyNywgMHgzNiwgMHhmOSwgMHgxYiwKKwkweGE1LCAweGRmLCAweDdlLCAweGUwLCAweGVmLCAweGI0LCAweGU3LCAweGI5LCAweGNhLCAweDBkLCAweGI0LCAweDlmLAorCTB4YWQsIDB4ZGUsIDB4MmIsIDB4MjUsIDB4ZDUsIDB4YmUsIDB4N2UsIDB4Y2IsIDB4MTgsIDB4NTEsIDB4MzMsIDB4NDYsCisJMHhiZCwgMHg3YSwgMHg5NywgMHg4OSwgMHhkZiwgMHg5NSwgMHhlNSwgMHgxMiwgMHhiMCwgMHhhZiwgMHg3ZCwgMHg5NiwKKwkweGYzLCAweGJkLCAweGMzLCAweGU0LCAweDc3LCAweGM1LCAweDlhLCAweGZjLCAweDkxLCAweGE4LCAweGYxLCAweDQ3LAorCTB4N2UsIDB4MDYsIDB4M2QsIDB4ZmUsIDB4OTQsIDB4NDQsIDB4YmQsIDB4YjAsIDB4MmYsIDB4ZTYsIDB4NmEsIDB4MjcsCisJMHg0YywgMHg2ZSwgMHhjNywgMHg1ZSwgMHhmNCwgMHg3NSwgMHgxMCwgMHhlZiwgMHhlZSwgMHhjMywgMHhlZiwgMHg0OSwKKwkweGQ0LCAweGEzLCAweGJkLCAweGUyLCAweGQ5LCAweDI4LCAweDMxLCAweDAyLCAweGNmLCAweGViLCAweDdhLCAweDUxLAorCTB4YWYsIDB4MDMsIDB4NTgsIDB4NzIsIDB4YmYsIDB4NzksIDB4MTYsIDB4ZjYsIDB4MTEsIDB4ZDYsIDB4MGQsIDB4ZWYsCisJMHg5YiwgMHhjZiwgMHg1MywgMHg1OSwgMHgyZiwgMHhkOSwgMHg3NCwgMHg5ZSwgMHgwYSwgMHg0NSwgMHhhNSwgMHhkYSwKKwkweDg2LCAweGI2LCAweDM2LCAweGI0LCAweDUxLCAweGM5LCAweDI2LCAweDFiLCAweGY1LCAweDU2LCAweDUzLCAweDllLAorCTB4YTcsIDB4YzYsIDB4NjEsIDB4NTcsIDB4MzMsIDB4OWMsIDB4NmIsIDB4NWYsIDB4NTMsIDB4MGUsIDB4NGEsIDB4YWEsCisJMHg0YywgMHhmYiwgMHhjOCwgMHg3OCwgMHhkZiwgMHg3YSwgMHgyNSwgMHhiNCwgMHgxZiwgMHhiOSwgMHgxZSwgMHg5ZSwKKwkweDViLCAweDJjLCAweGZhLCAweDJhLCAweDE2LCAweDk3LCAweDhjLCAweDY0LCAweDY5LCAweDdmLCAweGZjLCAweGQ4LAorCTB4MTYsIDB4NzAsIDB4NjUsIDB4NWQsIDB4OWQsIDB4ZWIsIDB4NDcsIDB4ZjAsIDB4ODMsIDB4NWQsIDB4NzYsIDB4MmMsCisJMHg3MSwgMHgzZCwgMHgzZSwgMHgyYiwgMHgxYiwgMHhiZCwgMHgwMywgMHg1ZCwgMHg2ZSwgMHhhYiwgMHgzYSwgMHhjOSwKKwkweGJjLCAweGRmLCAweDY3LCAweGVlLCAweDEzLCAweGIyLCAweDU2LCAweGY5LCAweDUwLCAweGJmLCAweDlkLCAweGZkLAorCTB4NWYsIDB4YjcsIDB4ZTcsIDB4MzMsIDB4M2QsIDB4M2MsIDB4N2YsIDB4YzIsIDB4MzMsIDB4ZTIsIDB4ZjUsIDB4ZDcsCisJMHg1NCwgMHg0ZSwgMHhhMywgMHhjNiwgMHg0NiwgMHgwZSwgMHhjZiwgMHgyZiwgMHg4MSwgMHg3MywgMHg3ZSwgMHgwNCwKKwkweDllLCAweDg0LCAweGI4LCAweGZiLCAweDc1LCAweDk5LCAweDUwLCAweDk4LCAweGFhLCAweDBkLCAweGI2LCAweGQyLAorCTB4NjAsIDB4YWEsIDB4ZWUsIDB4MTQsIDB4MzAsIDB4MTUsIDB4ZGIsIDB4YjcsIDB4ZTIsIDB4NDAsIDB4YmQsIDB4OTcsCisJMHgyMiwgMHg1OSwgMHgxZCwgMHg1NywgMHg2ZCwgMHg4OSwgMHgxNSwgMHg1YiwgMHg4ZiwgMHg2NCwgMHhjNCwgMHgzYSwKKwkweDgxLCAweDFmLCAweDY1LCAweGQ0LCAweDVlLCAweDdhLCAweDRkLCAweGJjLCAweGE1LCAweDU0LCAweDk1LCAweGY5LAorCTB4YjEsIDB4MGIsIDB4MWIsIDB4M2MsIDB4YzcsIDB4MDMsIDB4MTYsIDB4NGIsIDB4NTAsIDB4OTYsIDB4ZjksIDB4NmUsCisJMHgxYSwgMHg2MywgMHhiYywgMHgwNiwgMHhmZiwgMHg3MywgMHgwZiwgMHhmOCwgMHg2ZCwgMHgxYiwgMHgxZSwgMHhmOSwKKwkweDI2LCAweDQ2LCAweDExLCAweDYzLCAweDJjLCAweDE4LCAweDdiLCAweDcxLCAweDVlLCAweDYxLCAweDg5LCAweDUyLAorCTB4N2MsIDB4MTEsIDB4ZTUsIDB4MGYsIDB4MGQsIDB4NzYsIDB4NzgsIDB4YmQsIDB4MmIsIDB4M2MsIDB4YjcsIDB4MmYsCisJMHhjNSwgMHhiZiwgMHg4NCwgMHhlNywgMHhhZiwgMHhjMywgMHgxZiwgMHg4YywgMHg0YSwgMHg5YiwgMHg1YSwgMHhiMywKKwkweDEwLCAweDNiLCAweGZmLCAweDNkLCAweGVhLCAweDkwLCAweGZlLCAweDNiLCAweDRkLCAweDdlLCAweDBkLCAweGYzLAorCTB4MDYsIDB4ZDgsIDB4MWYsIDB4ZWMsIDB4OTYsIDB4Y2EsIDB4ZTEsIDB4Y2EsIDB4YTEsIDB4NjQsIDB4M2IsIDB4YjYsCisJMHg3OSwgMHgwNSwgMHg3NSwgMHg3MywgMHg5OCwgMHgzNywgMHg5ZiwgMHg0YiwgMHg1ZiwgMHg0NCwgMHg5YSwgMHg5ZiwKKwkweDdmLCAweDE0LCAweGNmLCAweDI5LCAweDg3LCAweGVmLCAweDM3LCAweDcyLCAweDE4LCAweGJlLCAweGNiLCAweDFiLAorCTB4M2UsIDB4ZGQsIDB4OGUsIDB4MzEsIDB4YzgsIDB4YWIsIDB4NjYsIDB4YmEsIDB4MzgsIDB4OWYsIDB4NzAsIDB4Y2QsCisJMHhkYiwgMHg0YywgMHhhZSwgMHgwMSwgMHg5ZiwgMHhiZCwgMHhkZiwgMHgzYywgMHg3MywgMHhjYywgMHgxYywgMHgzZiwKKwkweGRlLCAweDY1LCAweGIwLCAweDA0LCAweDc2LCAweDdiLCAweGI4LCAweDFmLCAweDQ5LCAweDY3LCAweGFjLCAweDA5LAorCTB4YjMsIDB4ZmUsIDB4NjEsIDB4ZWYsIDB4NGUsIDB4MWUsIDB4MjYsIDB4NjUsIDB4Y2UsIDB4NTMsIDB4YjEsIDB4MjMsCisJMHhlNiwgMHg4ZiwgMHhlNSwgMHg2YywgMHg5ZCwgMHhiMywgMHhmMSwgMHg4ZCwgMHg5YiwgMHhlMiwgMHhkZCwgMHg0YSwKKwkweGQ3LCAweGYyLCAweDBjLCAweGE0LCAweDZhLCAweDY3LCAweGRiLCAweDdmLCAweGVkLCAweGJjLCAweGJiLCAweDQ4LAorCTB4MzYsIDB4NmMsIDB4MDcsIDB4OWMsIDB4YTYsIDB4ZGEsIDB4MjQsIDB4NjUsIDB4YWUsIDB4ZjEsIDB4NmUsIDB4MzksCisJMHg3YSwgMHhjYSwgMHhiZiwgMHgzMCwgMHg3OSwgMHgxMCwgMHhmYiwgMHg1NSwgMHgxZSwgMHgwNCwgMHhmNSwgMHhlMiwKKwkweDVhLCAweDM1LCAweDAyLCAweDVlLCAweGY3LCAweDMxLCAweDM3LCAweDBhLCAweDdlLCAweDRjLCAweDBjLCAweDczLAorCTB4NDUsIDB4NWYsIDB4ZjEsIDB4ZjcsIDB4YWIsIDB4NWMsIDB4YTksIDB4ODgsIDB4MTcsIDB4ZTYsIDB4ZjUsIDB4NzIsCisJMHgxZiwgMHhkZSwgMHhhMSwgMHhkZSwgMHg3ZiwgMHg3ZCwgMHhhNSwgMHg5ZCwgMHhmOSwgMHhhYSwgMHgyOCwgMHhiOSwKKwkweDQ3LCAweDdmLCAweDA5LCAweGZkLCAweDE4LCAweDk1LCAweDQyLCAweGQ1LCAweDAzLCAweGZlLCAweDg5LCAweDUyLAorCTB4MmUsIDB4ZjEsIDB4N2MsIDB4M2YsIDB4ZmMsIDB4NjEsIDB4YzEsIDB4M2UsIDB4NjksIDB4ODMsIDB4NmYsIDB4YTIsCisJMHg3YywgMHgxZCwgMHhjYywgMHg2OCwgMHg4NywgMHgwZSwgMHg2MiwgMHg3MCwgMHg5ZCwgMHgxZiwgMHgxYSwgMHg0MCwKKwkweDg3LCAweGNmLCAweGNiLCAweGRhLCAweGY4LCAweGEyLCAweGQ0LCAweGM3LCAweDliLCAweDMxLCAweDJjLCAweDMwLAorCTB4YWEsIDB4NWIsIDB4MGUsIDB4ZWEsIDB4OWUsIDB4OGEsIDB4NjUsIDB4MWEsIDB4ZGQsIDB4NzIsIDB4YzIsIDB4ZTAsCisJMHg0ZSwgMHhhZSwgMHg4MywgMHgyZCwgMHg4NSwgMHhkMSwgMHgwNSwgMHgyNSwgMHg1ZiwgMHg3NSwgMHhiNSwgMHgxZSwKKwkweDhlLCAweDc1LCAweDU5LCAweGU1LCAweGY5LCAweDcyLCAweDBjLCAweGU2LCAweGZhLCAweDQ2LCAweDBjLCAweDBlLAorCTB4M2IsIDB4NjUsIDB4ZDYsIDB4ZDUsIDB4ZDksIDB4MWIsIDB4ZTYsIDB4Y2MsIDB4NDcsIDB4YjMsIDB4ODcsIDB4OTksCisJMHhkYiwgMHgwMSwgMHg2YywgMHgzZCwgMHgzZCwgMHgzNSwgMHg1YiwgMHhhMSwgMHgyZCwgMHgwYywgMHg4MiwgMHhiYSwKKwkweGJmLCAweDg5LCAweDFlLCAweDdmLCAweGFjLCAweDMwLCAweGU0LCAweDk2LCAweDY4LCAweGRkLCAweGJlLCAweGEwLAorCTB4NzIsIDB4NjYsIDB4MjcsIDB4YTcsIDB4ZjIsIDB4MmEsIDB4NWUsIDB4ZDgsIDB4N2MsIDB4NzYsIDB4ZjMsIDB4NWUsCisJMHhlNywgMHgzNiwgMHgzMSwgMHhmOCwgMHhmZSwgMHgxZCwgMHg2NiwgMHhmZCwgMHg2MywgMHg0ZSwgMHhhOSwgMHhkMiwKKwkweGU1LCAweGNjLCAweGFhLCAweGIzLCAweGI1LCAweGFjLCAweGY5LCAweDE2LCAweDI3LCAweDM3LCAweDk1LCAweDZlLAorCTB4N2MsIDB4NzYsIDB4MmYsIDB4YjEsIDB4M2UsIDB4Y2YsIDB4MzEsIDB4MGEsIDB4MTUsIDB4OWUsIDB4ZTMsIDB4ZTgsCisJMHhmNywgMHg2OSwgMHhmMywgMHg3ZSwgMHhhMCwgMHhhMSwgMHhkZSwgMHhhOSwgMHg3OCwgMHgyMywgMHg2MywgMHg4YywKKwkweGVkLCAweDI4LCAweDZmLCAweDU0LCAweGE4LCAweDZiLCAweGQwLCAweDdmLCAweDVjLCAweGNmLCAweDIxLCAweDkyLAorCTB4MmQsIDB4YzIsIDB4M2YsIDB4MjUsIDB4N2QsIDB4NDcsIDB4YTYsIDB4ZjIsIDB4MmIsIDB4Y2MsIDB4ZGIsIDB4N2EsCisJMHg2OCwgMHhlYSwgMHgxYSwgMHhmYywgMHhhNSwgMHg3MywgMHg5ZSwgMHhjZSwgMHgyYiwgMHg1ZiwgMHg2NywgMHgxYywKKwkweDhjLCAweGVkLCAweDU0LCAweDlmLCAweDQ1LCAweDEzLCAweGFiLCAweDNkLCAweDNjLCAweDM1LCAweGI4LCAweDFlLAorCTB4OTEsIDB4MjcsIDB4NGMsIDB4MWYsIDB4YmMsIDB4NGYsIDB4NmUsIDB4ZmIsIDB4NTIsIDB4NGEsIDB4ZmYsIDB4YzEsCisJMHgzZiwgMHgxOCwgMHg4NSwgMHg3ZiwgMHhkMCwgMHgwOSwgMHg1ZCwgMHg0ZiwgMHgzZiwgMHg4MywgMHhmOCwgMHhiYiwKKwkweDEzLCAweDdiLCAweDg1LCAweGUzLCAweGRjLCAweGE1LCAweGM2LCAweDg5LCAweDYwLCAweDljLCAweDU5LCAweGY4LAorCTB4MzgsIDB4OGMsIDB4NDcsIDB4ZTYsIDB4M2QsIDB4MDcsIDB4NTgsIDB4MDIsIDB4YjYsIDB4ZGUsIDB4NjMsIDB4YmMsCisJMHhkYywgMHhjNiwgMHg5YywgMHg4NywgMHhhMSwgMHgyNywgMHg5OCwgMHhhMywgMHgzMiwgMHgxMSwgMHhlNiwgMHgwZCwKKwkweGExLCAweDlkLCAweDZmLCAweGRhLCAweDFkLCAweDQ0LCAweDNiLCAweGZhLCAweDA3LCAweDZjLCAweDJiLCAweGI3LAorCTB4ZDksIDB4MzIsIDB4YTgsIDB4YjAsIDB4ODEsIDB4ZjYsIDB4NmIsIDB4NDgsIDB4NDMsIDB4MGQsIDB4NzMsIDB4YTUsCisJMHg1ZCwgMHhjNSwgMHg5ZSwgMHg1MywgMHhmMywgMHgzYSwgMHhhOCwgMHhkYSwgMHg1OSwgMHhkOSwgMHgzMSwgMHhkMCwKKwkweDRlLCAweGZjLCAweDg3LCAweGJlLCAweDk3LCAweDc1LCAweGJjLCAweGIzLCAweGEwLCAweGU0LCAweDA4LCAweDcyLAorCTB4MzIsIDB4MWUsIDB4ZTYsIDB4YmQsIDB4ZTgsIDB4NzYsIDB4NjEsIDB4ZmQsIDB4ODEsIDB4ZjUsIDB4ODYsIDB4MTksCisJMHhmZiwgMHhlNywgMHg0MSwgMHhlZSwgMHg2OCwgMHhhNywgMHhmMiwgMHhhZCwgMHg1ZiwgMHhiZSwgMHgyOSwgMHgwNywKKwkweDhkLCAweDZkLCAweGMyLCAweDNhLCAweDkxLCAweDMwLCAweDJmLCAweGI5LCAweDg5LCAweGU2LCAweGFjLCAweDU5LAorCTB4NzMsIDB4YjYsIDB4NjMsIDB4NmMsIDB4NTgsIDB4ZTUsIDB4ZTIsIDB4ZjMsIDB4OTksIDB4MzMsIDB4OTcsIDB4NjEsCisJMHgxZiwgMHhjZCwgMHg2NywgMHg0ZCwgMHhhMywgMHhjMCwgMHgxOSwgMHhkYSwgMHg4NiwgMHg5NCwgMHgzNywgMHgzYywKKwkweGQ4LCAweGViLCAweDM2LCAweGFjLCAweDFkLCAweDZkLCAweGMyLCAweGEwLCAweGYxLCAweDJkLCAweGRlLCAweDJiLAorCTB4Y2UsIDB4Y2EsIDB4NzMsIDB4Y2MsIDB4NTEsIDB4ZjgsIDB4ZjUsIDB4NjEsIDB4N2IsIDB4YWUsIDB4NjMsIDB4NmUsCisJMHhlYSwgMHg1YSwgMHhjNSwgMHg5MywgMHg1MywgMHhjYiwgMHgzYSwgMHgzZiwgMHg0YywgMHhmMywgMHg4MSwgMHgzYSwKKwkweDliLCAweDZiLCAweDliLCAweDk0LCAweDU5LCAweDhmLCAweGIxLCAweDljLCAweGE0LCAweGJjLCAweGUyLCAweDM1LAorCTB4ZTcsIDB4MzksIDB4YTEsIDB4ZmUsIDB4YzYsIDB4YTgsIDB4YzksIDB4YzcsIDB4M2UsIDB4ODgsIDB4ZjksIDB4MTMsCisJMHgzNywgMHg2YSwgMHg1OSwgMHgzYSwgMHgwMCwgMHgzYiwgMHhmNCwgMHg3NywgMHgwZSwgMHg3MCwgMHgyMSwgMHhmNiwKKwkweGQzLCAweDc1LCAweGE3LCAweDc5LCAweDdlLCAweGRiLCAweGY5LCAweGRmLCAweDRhLCAweDJlLCAweDFkLCAweGM4LAorCTB4YzgsIDB4ZTIsIDB4MzYsIDB4ZGYsIDB4ZTEsIDB4YjcsIDB4ZGYsIDB4MzUsIDB4MDQsIDB4N2QsIDB4NmYsIDB4NDksCisJMHg3MSwgMHhkNCwgMHg0YiwgMHgyYywgMHhmMCwgMHg1YywgMHhjMywgMHgxZCwgMHgwMSwgMHhjYSwgMHhhNywgMHgxZiwKKwkweDlkLCAweDA0LCAweGJkLCAweGJjLCAweDFlLCAweDA0LCAweDNlLCAweDYyLCAweDRlLCAweDIyLCAweGVlLCAweDk5LAorCTB4MTMsIDB4MTgsIDB4ZjcsIDB4NDAsIDB4YWYsIDB4YWIsIDB4Y2UsIDB4MmIsIDB4YjQsIDB4Y2UsIDB4ZmUsIDB4ZmUsCisJMHg1ZSwgMHhlNiwgMHhjMCwgMHhmNSwgMHg3OCwgMHhlMSwgMHhkYSwgMHhhYiwgMHhlZiwgMHhkYSwgMHhkMCwgMHg3NywKKwkweGM0LCAweGJjLCAweDlmLCAweGQ4LCAweGU2LCAweGJmLCAweGY0LCAweGIxLCAweGRjLCAweGNlLCAweDM1LCAweDMzLAorCTB4YjEsIDB4MTcsIDB4ZDYsIDB4MWYsIDB4NTcsIDB4YjQsIDB4Y2MsIDB4NDIsIDB4NTcsIDB4Y2YsIDB4YTksIDB4ZjksCisJMHhkYywgMHgwZiwgMHg1OSwgMHg4OCwgMHhjOCwgMHhmYywgMHhiNiwgMHhmYywgMHhkZSwgMHgwZiwgMHhmOSwgMHhkZCwKKwkweGMzLCAweDE0LCAweGNmLCAweDVkLCAweDY0LCAweDJkLCAweDk0LCAweDMxLCAweGNhLCAweDE3LCAweDY1LCAweGViLAorCTB4ZTMsIDB4ZGQsIDB4ZGMsIDB4NzMsIDB4ZTUsIDB4ZWQsIDB4NzUsIDB4NzcsIDB4OTQsIDB4Y2QsIDB4NGQsIDB4ZGEsCisJMHhlMSwgMHhiYSwgMHhmMywgMHg3YSwgMHhiNywgMHhkYywgMHhhYSwgMHg3MCwgMHg3ZiwgMHg2NCwgMHg3ZSwgMHg4MywKKwkweGI1LCAweGY1LCAweGNkLCAweGRhLCAweDY2LCAweDlhLCAweGJlLCAweDgzLCAweDA4LCAweGZiLCAweDYzLCAweDBjLAorCTB4OTQsIDB4MzYsIDB4ODgsIDB4ZTcsIDB4NTAsIDB4ZWQsIDB4NTIsIDB4NTYsIDB4MzIsIDB4NjgsIDB4MjksIDB4NmMsCisJMHg5ZCwgMHg3MywgMHhmMywgMHg0OSwgMHhjNiwgMHhiYywgMHg4ZiwgMHhjOSwgMHhiZiwgMHgwMywgMHhjZCwgMHhiOSwKKwkweGUxLCAweGE4LCAweGU4LCAweGI2LCAweDMzLCAweGUwLCAweGY3LCAweGE2LCAweDBiLCAweDdmLCAweDkwLCAweDY3LAorCTB4ZDYsIDB4MTUsIDB4NDcsIDB4Y2UsIDB4YTksIDB4NzMsIDB4NTcsIDB4ZWMsIDB4ZDEsIDB4NGUsIDB4NDcsIDB4MTYsCisJMHhiZCwgMHhlZCwgMHg3MywgMHg3OCwgMHhhOSwgMHhhMSwgMHhjZSwgMHgxYSwgMHhkZSwgMHgzZCwgMHhiMSwgMHg0ZCwKKwkweDFiLCAweGZkLCAweDA5LCAweGY4LCAweDUyLCAweGRlLCAweGNmLCAweDgzLCAweDUyLCAweGZjLCAweGE2LCAweGJhLAorCTB4NDYsIDB4YWYsIDB4MzMsIDB4NGUsIDB4YzMsIDB4ZjMsIDB4MDEsIDB4NTcsIDB4MGEsIDB4ZjAsIDB4MGIsIDB4MGIsCisJMHhmMCwgMHgwOSwgMHgwYiwgMHg0YSwgMHgyZiwgMHgzMCwgMHg2ZSwgMHhjMywgMHgxOCwgMHg1YiwgMHgxOSwgMHgzZSwKKwkweDQ4LCAweDM5LCAweDY4LCAweGY3LCAweDRlLCAweGFhLCAweDE4LCAweGUyLCAweGE1LCAweDhkLCAweDU0LCAweGI5LAorCTB4MmMsIDB4NWUsIDB4ZjIsIDB4YzEsIDB4ZWQsIDB4N2MsIDB4YmEsIDB4ZWUsIDB4NzIsIDB4MmMsIDB4ZGIsIDB4MWMsCisJMHg4NywgMHg0YiwgMHhhYSwgMHg1YywgMHhiNCwgMHgwZSwgMHg2MCwgMHhlNCwgMHhlMywgMHhkMCwgMHhkNSwgMHhjZiwKKwkweGZiLCAweDhjLCAweGJmLCAweGRkLCAweDQ5LCAweDdlLCAweDdmLCAweDk1LCAweDkzLCAweGI0LCAweDg3LCAweDQ2LAorCTB4YzUsIDB4YmIsIDB4ZTAsIDB4MGQsIDB4M2YsIDB4MjgsIDB4ZjQsIDB4M2YsIDB4NTIsIDB4YzksIDB4MjMsIDB4ZTQsCisJMHhkYiwgMHhmNiwgMHgzNywgMHgwZCwgMHhhMSwgMHg3ZCwgMHgxZCwgMHg5NSwgMHhjMSwgMHgwYiwgMHhhZiwgMHhhYiwKKwkweDMzLCAweDhlLCAweDRmLCAweGY4LCAweGFkLCAweGIyLCAweGExLCAweGUyLCAweDc3LCAweGEzLCAweDNkLCAweDMyLAorCTB4MDgsIDB4ZGYsIDB4NTcsIDB4NjAsIDB4YTEsIDB4ZjgsIDB4OGQsIDB4ODMsIDB4MDUsIDB4ZGYsIDB4NDMsIDB4ZGQsCisJMHhjYiwgMHg3NCwgMHgyMywgMHg2OSwgMHhmMiwgMHg1NCwgMHg2OSwgMHg1ZiwgMHgxOSwgMHhkZiwgMHhkMywgMHg3OSwKKwkweDdhLCAweGNjLCAweDRkLCAweDY1LCAweGZlLCAweDY0LCAweDUxLCAweGU1LCAweGViLCAweDMxLCAweGQ2LCAweGM3LAorCTB4NTgsIDB4MWUsIDB4ZTMsIDB4N2QsIDB4OGMsIDB4ZGIsIDB4ZTksIDB4NWMsIDB4YmQsIDB4ODksIDB4YzYsIDB4NmUsCisJMHhiMSwgMHhiZCwgMHgzMCwgMHg1ZiwgMHg1MiwgMHhkYiwgMHhhZCwgMHhhZCwgMHhjYywgMHgzZSwgMHhkOCwgMHgzYSwKKwkweDU3LCAweGM1LCAweDRlLCAweDRhLCAweDZlLCAweDhmLCAweDFjLCAweDFiLCAweDZlLCAweDA3LCAweGNmLCAweDdiLAorCTB4NTUsIDB4M2UsIDB4OWQsIDB4ZWQsIDB4ZGQsIDB4MGYsIDB4MWMsIDB4Y2IsIDB4ZjgsIDB4MWMsIDB4YjEsIDB4NjksCisJMHhjOCwgMHhlNywgMHg3YiwgMHhmMCwgMHhlYywgMHgxZCwgMHhmMCwgMHg5ZSwgMHhjZiwgMHg4MCwgMHg1YiwgMHg5NSwKKwkweDFkLCAweGZhLCAweGJjLCAweDZjLCAweDU1LCAweDk4LCAweDAzLCAweDVmLCAweGRiLCAweDk3LCAweDU3LCAweGViLAorCTB4NDEsIDB4ZGYsIDB4M2MsIDB4ZDQsIDB4NGQsIDB4NjEsIDB4ZmUsIDB4MjgsIDB4N2QsIDB4MmEsIDB4ZDcsIDB4OWMsCisJMHg5MywgMHhkMywgMHgzNywgMHhlZiwgMHg4NSwgMHhiZiwgMHg0ZSwgMHhmZCwgMHg2MywgMHhhOSwgMHhiMSwgMHhhZSwKKwkweDQ3LCAweDNlLCAweDIwLCAweGU1LCAweGRhLCAweDZlLCAweDY3LCAweGZlLCAweDQxLCAweGYwLCAweDBkLCAweDVmLAorCTB4ZTUsIDB4YWMsIDB4YzIsIDB4OWYsIDB4ZDQsIDB4NmIsIDB4YWMsIDB4YmYsIDB4OGYsIDB4NzQsIDB4NzYsIDB4ZjIsCisJMHhjYiwgMHhlMywgMHhkYSwgMHg2NywgMHhjYywgMHhmNSwgMHgwMiwgMHhiMywgMHg3OCwgMHhhNywgMHhiYiwgMHg3NywKKwkweGIwLCAweGYzLCAweDJmLCAweDBkLCAweGFlLCAweDI1LCAweDZlLCAweGVlLCAweDU1LCAweGQ4LCAweGMwLCAweGFlLAorCTB4ODcsIDB4NzIsIDB4YzIsIDB4N2MsIDB4MWYsIDB4NjIsIDB4ZWEsIDB4MDMsIDB4OTIsIDB4YWIsIDB4NDEsIDB4NmYsCisJMHhmNiwgMHhmMSwgMHhmZSwgMHg0NywgMHhhNiwgMHgyZCwgMHhhZiwgMHgwMywgMHgzOSwgMHgzYywgMHhkNiwgMHg3YSwKKwkweDk2LCAweDNmLCAweGFlLCAweDcxLCAweDdkLCAweDY3LCAweDc4LCAweDllLCAweDFmLCAweGU2LCAweGJjLCAweGRmLAorCTB4OTQsIDB4NWIsIDB4MGIsIDB4NzksIDB4MGEsIDB4NjksIDB4ZDAsIDB4NjMsIDB4NGQsIDB4ODAsIDB4ZGUsIDB4N2EsCisJMHgzNSwgMHgyMSwgMHhiZCwgMHgxZSwgMHhmMywgMHg4NCwgMHgyMiwgMHgzMiwgMHhkNiwgMHg5YiwgMHg4MiwgMHgxMywKKwkweGFmLCAweGU5LCAweGE5LCAweGQ3LCAweDYwLCAweGYzLCAweGFiLCAweDIxLCAweDlkLCAweDFhLCAweGUzLCAweGQ3LAorCTB4NmIsIDB4N2MsIDB4OWYsIDB4YzQsIDB4NTgsIDB4ZWQsIDB4MzIsIDB4ZDYsIDB4NDcsIDB4M2UsIDB4YjcsIDB4ZDIsCisJMHg5MSwgMHgzNCwgMHhmOSwgMHhkYywgMHhhZCwgMHhjZiwgMHhlZiwgMHg2YiwgMHhhMiwgMHhlZiwgMHhkNiwgMHhlZiwKKwkweDRhLCAweGYzLCAweDhjLCAweDhiLCAweGFkLCAweGQwLCAweDNmLCAweDIxLCAweDhkLCAweGJkLCAweGQwLCAweDczLAorCTB4OTgsIDB4YTMsIDB4MWYsIDB4ZmEsIDB4MWEsIDB4MjEsIDB4NWYsIDB4NDIsIDB4MWYsIDB4MjUsIDB4YWEsIDB4ZTQsCisJMHg2MiwgMHgzNiwgMHhjMywgMHhiOSwgMHg0NCwgMHg4ZCwgMHhjZiwgMHg0MiwgMHhiYSwgMHgxNCwgMHg2ZCwgMHgxMSwKKwkweDllLCAweDI1LCAweDQ2LCAweGJkLCAweGNmLCAweGVjLCAweGQzLCAweGViLCAweGZmLCAweGE0LCAweDk5LCAweGFmLAorCTB4NmIsIDB4ZWEsIDB4YjAsIDB4YWYsIDB4ZmQsIDB4NjgsIDB4ZmYsIDB4YjUsIDB4MDAsIDB4NjMsIDB4MzEsIDB4MDgsCisJMHg4NywgMHhmZCwgMHgxZiwgMHg2MiwgMHhmNywgMHhmZCwgMHhiYSwgMHhhZiwgMHhjZSwgMHgxMCwgMHhiZiwgMHg4NywKKwkweGRmLCAweGExLCAweDkxLCAweDRlLCAweGVlLCAweGFmLCAweDkwLCAweDg3LCAweGVjLCAweGEzLCAweGQ3LCAweGM0LAorCTB4NWMsIDB4NDksIDB4NDMsIDB4NDcsIDB4MGIsIDB4MGQsIDB4MjksIDB4ZmYsIDB4NjYsIDB4MWQsIDB4NzcsIDB4NGYsCisJMHhkMywgMHhkYywgMHgyOSwgMHg2YiwgMHhkZCwgMHhiMiwgMHg1MCwgMHhlZCwgMHg5NCwgMHhmOSwgMHhhYSwgMHhmMiwKKwkweDc1LCAweDg2LCAweDQ1LCAweDg4LCAweGVkLCAweGI4LCAweDJmLCAweDU1LCAweDJlLCAweGIzLCAweGM5LCAweDk5LAorCTB4MGMsIDB4ZjcsIDB4NjcsIDB4MzcsIDB4ZWEsIDB4ZDEsIDB4ODYsIDB4YTAsIDB4YWMsIDB4NjksIDB4ZmQsIDB4NTQsCisJMHg5MywgMHg1YiwgMHhiZiwgMHhkMywgMHg5OCwgMHg2YiwgMHhiNCwgMHhlNiwgMHhlMywgMHg1ZCwgMHg2ZiwgMHhjYSwKKwkweGM3LCAweDZiLCAweGNlLCAweDdmLCAweDJhLCAweGNiLCAweDIzLCAweDA3LCAweDNiLCAweDY0LCAweGUwLCAweDZjLAorCTB4YTcsIDB4OTEsIDB4ZDEsIDB4ZmIsIDB4Y2QsIDB4MzgsIDB4MTgsIDB4NmYsIDB4NjksIDB4NWMsIDB4MDYsIDB4OTYsCisJMHhiZSwgMHgyOCwgMHhhNSwgMHg2OSwgMHg5NSwgMHhmZiwgMHhkZSwgMHhmNCwgMHhmZCwgMHhjMywgMHhhMCwgMHhmOSwKKwkweGZlLCAweDI5LCAweDY3LCAweDMxLCAweDE3LCAweGE2LCAweGIwLCAweDg0LCAweGY1LCAweDNhLCAweDk4LCAweDFhLAorCTB4NGUsIDB4ZGEsIDB4ZmMsIDB4NDYsIDB4ZjcsIDB4MzEsIDB4MTksIDB4NTgsIDB4MWQsIDB4OTcsIDB4ZjQsIDB4MTIsCisJMHgzMSwgMHgwMywgMHhiMywgMHgwMSwgMHg1MiwgMHgyYSwgMHgyZSwgMHg5YSwgMHhiZSwgMHhhOCwgMHhmYiwgMHhmMywKKwkweDk2LCAweGY4LCAweDNlLCAweDBkLCAweGJjLCAweGNhLCAweGY3LCAweDg1LCAweDQ0LCAweDQ0LCAweDY1LCAweDBjLAorCTB4N2MsIDB4MTAsIDB4ZjIsIDB4ZDQsIDB4NjYsIDB4ZjAsIDB4ODAsIDB4MjMsIDB4ZjksIDB4MjUsIDB4YjYsIDB4MjcsCisJMHhmNiwgMHhmOCwgMHg0NywgMHhhYywgMHg1OSwgMHgyMSwgMHg2OSwgMHgwYiwgMHhkYiwgMHhhOCwgMHhmZSwgMHg3MCwKKwkweDFkLCAweGM2LCAweGQzLCAweGM5LCAweGViLCAweDUxLCAweDU5LCAweDZmLCAweDc4LCAweGQ4LCAweDEzLCAweGZhLAorCTB4OWIsIDB4ODksIDB4NTIsIDB4MmQsIDB4Y2MsIDB4MjcsIDB4N2QsIDB4YzQsIDB4YzQsIDB4MDAsIDB4MzQsIDB4OGQsCisJMHhjNSwgMHg0YSwgMHhhYiwgMHhlYywgMHgzZCwgMHg2MywgMHhiZSwgMHg5ZCwgMHhlOCwgMHg1MCwgMHg2NywgMHg2OCwKKwkweDRkLCAweGZhLCAweGNmLCAweGQ0LCAweGJmLCAweGRkLCAweDY1LCAweGRlLCAweDgwLCAweDA4LCAweGRmLCAweDM3LAorCTB4ZjksIDB4MjQsIDB4ZjEsIDB4YjgsIDB4ZGEsIDB4MDcsIDB4MDMsIDB4ZjUsIDB4YjAsIDB4ZGUsIDB4YTgsIDB4YWIsCisJMHg3ZCwgMHg2MCwgMHhmMiwgMHgyOSwgMHg2YiwgMHg2OCwgMHgxZSwgMHg4MywgMHhjZiwgMHhjMywgMHg2NywgMHgwNywKKwkweGQwLCAweDk2LCAweGViLCAweDg0LCAweGIyLCAweDdlLCAweDQwLCAweGU1LCAweDM5LCAweDQ2LCAweGIyLCAweDQ3LAorCTB4Y2MsIDB4NTksIDB4NWEsIDB4OWYsIDB4MWEsIDB4Y2IsIDB4Y2QsIDB4YjIsIDB4ZmYsIDB4NTAsIDB4MzcsIDB4NzQsCisJMHgzNCwgMHg4ZCwgMHhkZiwgMHg0YSwgMHgyZiwgMHg3ZCwgMHhmOCwgMHg5ZiwgMHgxOSwgMHg3OSwgMHhlMSwgMHg3YiwKKwkweGRlLCAweGI3LCAweGQ2LCAweGY5LCAweGEzLCAweDdkLCAweGUxLCAweDdiLCAweDY3LCAweGZiLCAweDFiLCAweDBjLAorCTB4ZjIsIDB4OTIsIDB4NjcsIDB4ODAsIDB4MjgsIDB4MmYsIDB4MzIsIDB4OTcsIDB4OWQsIDB4ZDcsIDB4MjgsIDB4Y2QsCisJMHhiNywgMHgyNSwgMHhjZSwgMHgxMiwgMHg3ZiwgMHhhZCwgMHhmZCwgMHgzOCwgMHhlOCwgMHgzYiwgMHhkYywgMHhiMywKKwkweGJiLCAweGU1LCAweDA2LCAweDUxLCAweDE3LCAweDlmLCAweGI2LCAweGI2LCAweDJhLCAweDhjLCAweDVkLCAweDk0LAorCTB4ZTUsIDB4NTgsIDB4YTYsIDB4NWIsIDB4NjYsIDB4YWIsIDB4MzYsIDB4YmYsIDB4NGQsIDB4NjUsIDB4MmMsIDB4OTYsCisJMHg2NywgMHg5NSwgMHgzMiwgMHhhNywgMHg3NCwgMHhkYywgMHg5MCwgMHhlOCwgMHhlZiwgMHg3NiwgMHgzYiwgMHhhNCwKKwkweGU4LCAweDUyLCAweDllLCAweDg3LCAweDY0LCAweGJkLCAweDM2LCAweGRkLCAweDk0LCAweDAzLCAweGRjLCAweDY2LAorCTB4ZTQsIDB4ZWMsIDB4ZWYsIDB4YTIsIDB4ZDIsIDB4YzksIDB4MzgsIDB4NTIsIDB4YjgsIDB4YTcsIDB4ODcsIDB4YTQsCisJMHg1OCwgMHg2YiwgMHgzZSwgMHg2NywgMHg2MCwgMHg5ZSwgMHgxMSwgMHhlNSwgMHhiNiwgMHhiZiwgMHg2OSwgMHhlZiwKKwkweDMxLCAweDU3LCAweDBmLCAweGI4LCAweDJhLCAweDRlLCAweDlmLCAweDk1LCAweGY1LCAweGY2LCAweDFhLCAweDdiLAorCTB4ZmIsIDB4MTUsIDB4YWMsIDB4YzcsIDB4ZmIsIDB4MmQsIDB4ZjEsIDB4NDgsIDB4MWIsIDB4NmMsIDB4ODQsIDB4YzksCisJMHgzNSwgMHgzZSwgMHgxYywgMHgyZiwgMHhjMywgMHgzZiwgMHgxYiwgMHgzMiwgMHhlMywgMHhkZSwgMHg4MSwgMHg3YiwKKwkweGQ2LCAweGRkLCAweDY3LCAweGRlLCAweGVmLCAweDM3LCAweGY3LCAweDlkLCAweGU2LCAweDNlLCAweDgyLCAweDdiLAorCTB4ZTYsIDB4OGQsIDB4YjMsIDB4NGYsIDB4OTYsIDB4ZmMsIDB4OWUsIDB4ODgsIDB4ZGYsIDB4ZWIsIDB4NjQsIDB4MjUsCisJMHg3YSwgMHgxMSwgMHhlOCwgMHhhOSwgMHhkMSwgMHgyOSwgMHg5ZiwgMHhhZSwgMHgyOSwgMHhmZSwgMHg1YSwgMHhkZSwKKwkweDEyLCAweDAxLCAweGMxLCAweDdlLCAweDczLCAweDdkLCAweGViLCAweDFlLCAweGZjLCAweGRjLCAweDRkLCAweGRmLAorCTB4NGEsIDB4NTUsIDB4OGMsIDB4YWMsIDB4MzQsIDB4ZDMsIDB4OWIsIDB4MDMsIDB4YWQsIDB4ZWYsIDB4OTYsIDB4ODMsCisJMHg0NSwgMHgxYiwgMHhhNSwgMHhmZCwgMHhjNiwgMHg2MiwgMHg0NSwgMHhlNywgMHgxYSwgMHgxZCwgMHg4MywgMHhkZiwKKwkweDc4LCAweGI4LCAweGZhLCAweGE4LCAweGFiLCAweGYzLCAweDYyLCAweGMyLCAweDVjLCAweGNhLCAweDRlLCAweGNjLAorCTB4NmIsIDB4YzgsIDB4OWMsIDB4NWIsIDB4YjMsIDB4MmQsIDB4NzMsIDB4M2EsIDB4YzMsIDB4ZjMsIDB4OTksIDB4NjYsCisJMHhhYywgMHg0YSwgMHg1YiwgMHg0NCwgMHgzYiwgMHhjMywgMHhlZiwgMHg5YSwgMHg3YywgMHhkNCwgMHg1ZCwgMHhhNCwKKwkweGFlLCAweDY5LCAweGNhLCAweGNkLCAweGZmLCAweDUyLCAweDRiLCAweDZlLCAweDNlLCAweGJmLCAweGZiLCAweDE2LAorCTB4ZjksIDB4NmYsIDB4MGQsIDB4YzYsIDB4OTUsIDB4M2EsIDB4MjQsIDB4NzIsIDB4MzYsIDB4Y2MsIDB4YzEsIDB4ZTIsCisJMHgxYSwgMHgxMywgMHg4NywgMHhmMSwgMHg3YiwgMHhlZiwgMHhhOSwgMHg1ZCwgMHg2MiwgMHg0ZSwgMHhhMSwgMHg5YywKKwkweDdmLCAweGM3LCAweDY1LCAweDdlLCAweGFiLCAweDliLCAweDBkLCAweGUzLCAweDU0LCAweGNjLCAweGViLCAweDIxLAorCTB4ZTYsIDB4M2EsIDB4NjAsIDB4NjIsIDB4MGEsIDB4N2MsIDB4NTcsIDB4OTYsIDB4OWUsIDB4ODMsIDB4NTMsIDB4ZGMsCisJMHgxYiwgMHhiZiwgMHgxZCwgMHhkOSwgMHhjZSwgMHhmZCwgMHg1NywgMHhlMywgMHhjNCwgMHgzNSwgMHg4NiwgMHhlNCwKKwkweDc3LCAweGUzLCAweDNlLCAweGY2LCAweGQ1LCAweDllLCAweGNkLCAweGYwLCAweDliLCAweDhjLCAweGNiLCAweDhkLAorCTB4OGMsIDB4ZmEsIDB4ZjYsIDB4ODMsIDB4NjcsIDB4MWUsIDB4NWIsIDB4MGQsIDB4ZWUsIDB4M2IsIDB4N2UsIDB4MjMsCisJMHg5ZSwgMHg1NSwgMHgzOSwgMHgwMSwgMHg1YiwgMHhlNiwgMHg5YiwgMHhlNywgMHhhYiwgMHgwZCwgMHhmZCwgMHgxZCwKKwkweGNiLCAweGUyLCAweGIyLCAweGNhLCAweGNiLCAweDA3LCAweDU2LCAweDRiLCAweGUyLCAweDNkLCAweDczLCAweGU4LAorCTB4ZmEsIDB4NTUsIDB4MmUsIDB4YzEsIDB4N2MsIDB4ZTMsIDB4NTMsIDB4MjgsIDB4M2YsIDB4MmYsIDB4NmIsIDB4MTUsCisJMHgxZCwgMHg3ZiwgMHg5ZCwgMHg2ZiwgMHgzMCwgMHhhNywgMHhjMCwgMHg1NSwgMHg2NywgMHg0NCwgMHgwMywgMHg0YiwKKwkweDQ1LCAweDhjLCAweDE3LCAweDdlLCAweGIzLCAweDFkLCAweGM3LCAweDMzLCAweGQyLCAweDU3LCAweDM2LCAweDdiLAorCTB4MzQsIDB4Y2MsIDB4MDUsIDB4ZTksIDB4ZWEsIDB4YTEsIDB4NGQsIDB4MjgsIDB4MzcsIDB4YmEsIDB4NTQsIDB4MWUsCisJMHg4MiwgMHhjNiwgMHgyMywgMHhjNCwgMHg3YSwgMHgzMSwgMHhkNCwgMHhlNSwgMHg1YywgMHgzYiwgMHg2OSwgMHhhZiwKKwkweDAyLCAweGVhLCAweGE0LCAweDM0LCAweGM2LCAweGE5LCAweGFiLCAweGRjLCAweDQ0LCAweGYyLCAweGQ5LCAweDczLAorCTB4NGIsIDB4ZjQsIDB4ZDcsIDB4OTQsIDB4OGUsIDB4NGYsIDB4MGQsIDB4Y2YsIDB4NDgsIDB4YzEsIDB4OGQsIDB4YzIsCisJMHgxNywgMHg5YiwgMHg1NywgMHg3ZSwgMHhjZSwgMHhmZCwgMHhjMCwgMHhkMCwgMHg1ZCwgMHg5YiwgMHg5MSwgMHgyYywKKwkweGU3LCAweGM2LCAweGIxLCAweGU5LCAweDg3LCAweGU4LCAweGY5LCAweGU4LCAweDMzLCAweDAyLCAweGIxLCAweGU2LAorCTB4ZDUsIDB4ZjcsIDB4OGYsIDB4N2MsIDB4Y2UsIDB4NzgsIDB4NmYsIDB4ZjgsIDB4Y2QsIDB4OTAsIDB4ZmUsIDB4MjYsCisJMHg2NCwgMHhhNiwgMHg3MSwgMHg0NCwgMHg0ZSwgMHg1NSwgMHhmNiwgMHhmMiwgMHg1YiwgMHgwOSwgMHg3ZiwgMHgwYiwKKwkweDdjLCAweDNiLCAweGQ2LCAweGU4LCAweDUyLCAweGRmLCAweGE1LCAweGNjLCAweDM0LCAweDk4LCAweDNmLCAweDE3LAorCTB4ZGEsIDB4MWUsIDB4YWUsIDB4NTUsIDB4ZGMsIDB4N2MsIDB4MzcsIDB4OTEsIDB4MzAsIDB4ZGYsIDB4NGQsIDB4ZjAsCisJMHhkYiwgMHg4ZiwgMHgxZiwgMHhlZCwgMHgwZCwgMHhmNywgMHhmYiwgMHhhZCwgMHgzOCwgMHg5YywgMHgzMiwgMHhmOCwKKwkweGE3LCAweGYwLCAweDBkLCAweGMzLCAweDNjLCAweDRjLCAweGU2LCAweDhiLCAweDA2LCAweGMxLCAweDMxLCAweDlmLAorCTB4ZjEsIDB4ZGIsIDB4ZTksIDB4YzMsIDB4NmIsIDB4OTgsIDB4ZTMsIDB4OTUsIDB4MWEsIDB4NzgsIDB4NzgsIDB4OTQsCisJMHhjZiwgMHg5OCwgMHgzNywgMHhkNiwgMHgyZSwgMHhmOSwgMHhkMSwgMHg3NiwgMHhlYSwgMHhmMiwgMHhjZSwgMHgzNSwKKwkweDZmLCAweGFmLCAweDVjLCAweGFlLCAweGM2LCAweDU1LCAweDBlLCAweDVjLCAweDA5LCAweDM4LCAweGJmLCAweDJlLAorCTB4MWYsIDB4ZWIsIDB4ZTEsIDB4ZDksIDB4ZGQsIDB4ODQsIDB4NmEsIDB4MWYsIDB4ZWUsIDB4NzcsIDB4MWQsIDB4MzcsCisJMHg5OCwgMHg1OCwgMHhkNywgMHhmYSwgMHhlNCwgMHg3OCwgMHgwNiwgMHhiOCwgMHhlNSwgMHg4MiwgMHg1OCwgMHg3ZiwKKwkweDkwLCAweGU5LCAweDg3LCAweGVmLCAweGNkLCAweGIxLCAweGQyLCAweDY4LCAweDA3LCAweGQ5LCAweDQ5LCAweDcwLAorCTB4YWYsIDB4YmYsIDB4MTMsIDB4ZDQsIDB4NDEsIDB4ZWYsIDB4OGQsIDB4MDYsIDB4ZjEsIDB4M2EsIDB4MzAsIDB4ZDQsCisJMHgzNCwgMHhkYiwgMHg2NCwgMHhjNSwgMHgzZSwgMHhjMywgMHgzYSwgMHhiZCwgMHg5MCwgMHhiZiwgMHgyOCwgMHhlNiwKKwkweGUzLCAweGMwLCAweDE3LCAweGQ4LCAweDI3LCAweDc1LCAweDk3LCAweGVmLCAweDFjLCAweDdkLCAweGE2LCAweDEyLAorCTB4MGYsIDB4ZmQsIDB4OTQsIDB4ZWYsIDB4ODEsIDB4N2YsIDB4NDksIDB4YTUsIDB4OTMsIDB4YzIsIDB4ZjMsIDB4NGUsCisJMHhlNiwgMHhiMywgMHhjZSwgMHg1NiwgMHgyNywgMHhiMSwgMHg4NywgMHgxYywgMHg4MywgMHhjZCwgMHgxYywgMHhmNCwKKwkweGYxLCAweGUxLCAweDFlLCAweDhkLCAweDE1LCAweDc4LCAweDFlLCAweGFhLCAweGIxLCAweDg4LCAweGI2LCAweDMxLAorCTB4M2MsIDB4ZGYsIDB4NzEsIDB4ZTAsIDB4MGIsIDB4ODQsIDB4ZmIsIDB4ZjIsIDB4OTksIDB4N2QsIDB4MzcsIDB4N2YsCisJMHgwYiwgMHg0MywgMHgxYywgMHg5MywgMHg0ZSwgMHg5YywgMHhlNywgMHg3OSwgMHhkYywgMHhjNiwgMHhjMywgMHgzMiwKKwkweDAzLCAweDlhLCAweDRmLCAweDliLCAweDc5LCAweDNlLCAweDk4LCAweGYxLCAweGU0LCAweDdhLCAweDhkLCAweGU3LAorCTB4OTUsIDB4MDcsIDB4NTAsIDB4MzIsIDB4ZDcsIDB4OTEsIDB4MzQsIDB4OGYsIDB4OTgsIDB4N2MsIDB4Y2UsIDB4MmMsCisJMHhlNiwgMHhmYSwgMHg5OCwgMHhiYywgMHgwMSwgMHg3YywgMHhmZCwgMHg2NiwgMHgyNSwgMHhlZCwgMHg0ZiwgMHhhOCwKKwkweDNjLCAweGE0LCAweDU0LCAweGUyLCAweGIyLCAweDhjLCAweDI0LCAweGU5LCAweDAzLCAweDk2LCAweGRkLCAweDU0LAorCTB4ZTIsIDB4M2EsIDB4ZTQsIDB4ZTEsIDB4NDYsIDB4ZTUsIDB4OTksIDB4MWUsIDB4ZmUsIDB4YWYsIDB4OGEsIDB4M2EsCisJMHhlYywgMHhlMSwgMHgwZCwgMHg5NSwgMHg4MywgMHg5NCwgMHg2MiwgMHhjYywgMHgwNCwgMHhmNywgMHhmZCwgMHgyNiwKKwkweDBmLCAweDhhLCAweGUzLCAweGYwLCAweDVkLCAweGJmLCAweGJjLCAweDUxLCAweGQ5LCAweGI2LCAweGJmLCAweDFjLAorCTB4YzcsIDB4N2MsIDB4MDMsIDB4Y2YsIDB4YjEsIDB4MmUsIDB4ZjQsIDB4NTAsIDB4MGYsIDB4NzEsIDB4M2MsIDB4ZGQsCisJMHg0NywgMHg1OCwgMHg4NywgMHg3YywgMHgwZCwgMHhlMywgMHg5YSwgMHhlYSwgMHg1YiwgMHhjYiwgMHhhNCwgMHg1OCwKKwkweDk2LCAweGI0LCAweDc5LCAweDljLCAweGZiLCAweDU0LCAweDhmLCAweGM2LCAweDQwLCAweDZjLCAweDk3LCAweDc2LAorCTB4MGYsIDB4YWIsIDB4ZmUsIDB4NzgsIDB4YjYsIDB4YzcsIDB4ZjMsIDB4YWYsIDB4YjAsIDB4MWYsIDB4ZTYsIDB4NDMsCisJMHgzMSwgMHhlNywgMHg4YSwgMHhiYSwgMHhhZiwgMHg5OSwgMHgwNiwgMHg2ZCwgMHhmZiwgMHhkZiwgMHg1MCwgMHhiMSwKKwkweGY0LCAweDcxLCAweGQ0LCAweGE3LCAweDhkLCAweDg2LCAweGJjLCAweGQ0LCAweDEyLCAweGRiLCAweGRmLCAweDdjLAorCTB4NjgsIDB4NWUsIDB4ZjIsIDB4ZmEsIDB4OTksIDB4ZWQsIDB4NmYsIDB4MzIsIDB4ZWMsIDB4YmIsIDB4NWQsIDB4ZjMsCisJMHgzZSwgMHhjNCwgMHhhNSwgMHhmZCwgMHhkOCwgMHhhZiwgMHg4ZiwgMHg0OSwgMHg3ZCwgMHgyNSwgMHg5ZCwgMHhmOCwKKwkweGI0LCAweDg0LCAweGZkLCAweDA2LCAweDg3LCAweDc4LCAweGRlLCAweDUxLCAweGNjLCAweDhjLCAweGI4LCAweDBiLAorCTB4OGEsIDB4OWUsIDB4NTQsIDB4ODIsIDB4MzksIDB4YzgsIDB4OTcsIDB4MzEsIDB4NWUsIDB4YmQsIDB4ZDEsIDB4MWEsCisJMHg3YiwgMHg0OCwgMHhlNSwgMHgzNiwgMHgyNSwgMHhlZCwgMHhlYiwgMHhiNSwgMHgxOSwgMHg5MiwgMHg0ZCwgMHhhYywKKwkweGNkLCAweDlmLCAweDliLCAweGI1LCAweGY5LCAweDE4LCAweGZhLCAweGY2LCAweGNlLCAweDhjLCAweDRhLCAweGZhLAorCTB4NGMsIDB4M2EsIDB4NzksIDB4NWEsIDB4NzgsIDB4OTYsIDB4YjgsIDB4OGYsIDB4MzEsIDB4MmMsIDB4ZWIsIDB4YzEsCisJMHg0YywgMHgxMiwgMHhmMywgMHg0ZCwgMHg2MSwgMHhiZSwgMHgyOCwgMHgxYiwgMHhiYywgMHgxZSwgMHg4MSwgMHg2ZiwKKwkweGJlLCAweDg3LCAweDdiLCAweGZiLCAweDEwLCAweDc1LCAweDI2LCAweDc5LCAweDUxLCAweDU0LCAweGVmLCAweDgwLAorCTB4NGYsIDB4OWUsIDB4MjYsIDB4NGQsIDB4MDAsIDB4Y2EsIDB4OWQsIDB4MjksIDB4MTUsIDB4MDcsIDB4YmMsIDB4ZGUsCisJMHhlMCwgMHhmOSwgMHhhMiwgMHhhNiwgMHhhZiwgMHgwMCwgMHhmYSwgMHhlNiwgMHgzNCwgMHg3ZCwgMHhjOSwgMHg5OSwKKwkweDZkLCAweGVjLCAweDlhLCAweDRhLCAweDljLCAweDEyLCAweGUyLCAweDI1LCAweGUyLCAweDE3LCAweGUyLCAweGZhLAorCTB4NDcsIDB4N2EsIDB4YzMsIDB4NmYsIDB4NWEsIDB4ZjIsIDB4NzcsIDB4ZTcsIDB4YjYsIDB4ZTcsIDB4ZGUsIDB4ODYsCisJMHhiYSwgMHg1NywgMHgzMiwgMHgyYSwgMHhiZiwgMHhkOSwgMHgzZCwgMHgyMiwgMHgxZiwgMHg5MSwgMHhkYywgMHhhNywKKwkweDUyLCAweGM5LCAweDljLCAweGU1LCAweDE5LCAweDBjLCAweDg4LCAweGIyLCAweGM2LCAweDZiLCAweGVhLCAweDVjLAorCTB4Y2YsIDB4NjAsIDB4MGIsIDB4YWUsIDB4NGQsIDB4MDYsIDB4NjMsIDB4MjksIDB4ZGUsIDB4YzIsIDB4NjcsIDB4ZWEsCisJMHg4NywgMHhjYywgMHg1MywgMHhkNiwgMHg3ZSwgMHgwNywgMHg3YiwgMHg0OCwgMHhmZiwgMHg5ZiwgMHg4ZSwgMHhjYiwKKwkweGUwLCAweGUzLCAweDNjLCAweGY4LCAweDc4LCAweGZjLCAweDE2LCAweDBjLCAweDE2LCAweGRkLCAweGM2LCAweDYwLAorCTB4NWIsIDB4NmEsIDB4YmMsIDB4N2IsIDB4NDEsIDB4NTMsIDB4YzEsIDB4MjUsIDB4ZmUsIDB4OWEsIDB4ZGYsIDB4OTYsCisJMHgxNSwgMHhkMiwgMHgzNCwgMHhjYSwgMHhmZiwgMHhiNSwgMHgyMywgMHg1NywgMHgzMywgMHg1YywgMHgwZiwgMHg2MCwKKwkweDMwLCAweGY0LCAweGI3LCAweGI2LCAweDIzLCAweDRiLCAweDk4LCAweGJmLCAweDkyLCAweDVmLCAweGM4LCAweDZlLAorCTB4Y2EsIDB4NzUsIDB4MmMsIDB4YWUsIDB4MDUsIDB4ZmIsIDB4MTMsIDB4ZWIsIDB4MWEsIDB4NjgsIDB4ZDksIDB4NTIsCisJMHg3MiwgMHhhMCwgMHg2NSwgMHg2MCwgMHhhYiwgMHhkNiwgMHhmOSwgMHgxZSwgMHgzMiwgMHhjMCwgMHg3OSwgMHg1MiwKKwkweGZlLCAweDQyLCAweGQ5LCAweGRiLCAweGM5LCAweGE3LCAweGU4LCAweDAwLCAweDRmLCAweDNlLCAweDc4LCAweDRmLAorCTB4NTYsIDB4ZjIsIDB4NjcsIDB4NzgsIDB4MTYsIDB4MjYsIDB4ZDYsIDB4YzgsIDB4M2QsIDB4OTQsIDB4NDksIDB4ZTIsCisJMHgwNCwgMHg2MCwgMHhjOCwgMHgwNCwgMHg3OSwgMHhhYywgMHhmMSwgMHhlMCwgMHhjYywgMHhiMywgMHg3YiwgMHhmMSwKKwkweDdiLCAweGIzLCAweDg3LCAweDM5LCAweDMzLCAweGY5LCAweDczLCAweGQ0LCAweDU3LCAweDYyLCAweGRkLCAweDc5LAorCTB4OGYsIDB4ZjYsIDB4MGYsIDB4NmYsIDB4YzQsIDB4YzEsIDB4NzMsIDB4YmMsIDB4MWYsIDB4NzgsIDB4YjIsIDB4MGQsCisJMHhmYSwgMHhjYSwgMHgzMSwgMHhmMywgMHhlNiwgMHgzZCwgMHhmOSwgMHg4YSwgMHhmMiwgMHhkOSwgMHgyOSwgMHhhMywKKwkweDAzLCAweGE4LCAweDQ3LCAweGM0LCAweGVjLCAweDhiLCAweGIyLCAweGNjLCAweDMxLCAweDQ2LCAweDlmLCAweGU5LAorCTB4OTQsIDB4MDksIDB4ZTgsIDB4YjUsIDB4MjMsIDB4OTUsIDB4NzEsIDB4ZjksIDB4NzIsIDB4YTUsIDB4NGIsIDB4ZTEsCisJMHg4NiwgMHhiZiwgMHhmNiwgMHhkMywgMHg4OSwgMHg2MSwgMHgyYiwgMHg5MCwgMHgwNywgMHg4MSwgMHg3ZiwgMHg2NiwKKwkweGZhLCAweGRiLCAweGU0LCAweGNkLCAweDUxLCAweDlkLCAweGZiLCAweDdiLCAweDgzLCAweGM5LCAweDhkLCAweDJlLAorCTB4ZjMsIDB4NTUsIDB4MzksIDB4MWYsIDB4ZTgsIDB4N2QsIDB4MGIsIDB4YmUsIDB4ODAsIDB4ZDUsIDB4MmUsIDB4MzMsCisJMHhmMSwgMHgyZSwgMHhmOSwgMHhiOCwgMHg4ZiwgMHhmMiwgMHgzNiwgMHg1ZiwgMHg3ZCwgMHg2MywgMHg5YywgMHg4YiwKKwkweDM3LCAweGViLCAweDkxLCAweDM3LCAweGNkLCAweGQ4LCAweDVmLCAweDM0LCAweGU1LCAweGJmLCAweGU5LCAweDZkLAorCTB4YTIsIDB4YzUsIDB4OWEsIDB4Y2IsIDB4NDQsIDB4ZDQsIDB4ZmMsIDB4ZTYsIDB4NmIsIDB4ZDQsIDB4NmYsIDB4NmMsCisJMHgwMywgMHg3ZCwgMHhkMiwgMHhlMCwgMHgzOSwgMHg1MSwgMHg1OSwgMHhkNiwgMHhhMCwgMHg1ZiwgMHg0YSwgMHg1NSwKKwkweGIxLCAweGNlLCAweDY1LCAweDgwLCAweGE4LCAweDNkLCAweDhkLCAweDNmLCAweDRiLCAweDkwLCAweGFmLCAweGQ5LAorCTB4YWEsIDB4OGEsIDB4NTksIDB4YWEsIDB4YmMsIDB4ZWQsIDB4NTksIDB4NjAsIDB4NWQsIDB4ZjgsIDB4YzQsIDB4YzAsCisJMHgxMCwgMHgyNiwgMHg3ZiwgMHhhNSwgMHg5MywgMHhmMSwgMHg5MCwgMHg2NiwgMHgxZCwgMHgxNiwgMHhmZSwgMHgyZiwKKwkweDlkLCAweGZmLCAweGQ0LCAweDJiLCAweGRkLCAweDY1LCAweGFjLCAweDRiLCAweDg4LCAweGI5LCAweGMxLCAweDUzLAorCTB4OGMsIDB4OTksIDB4NTcsIDB4ZWIsIDB4MTQsIDB4YWUsIDB4MDksIDB4NzUsIDB4NGYsIDB4NzMsIDB4YmUsIDB4NzgsCisJMHg4OCwgMHgzOSwgMHhiOCwgMHg2NywgMHg2OSwgMHgyZiwgMHhhNCwgMHgxYywgMHgwMywgMHhhNiwgMHhlZCwgMHgzOCwKKwkweDAzLCAweGRiLCAweDVkLCAweGNkLCAweDQyLCAweDU2LCAweGM2LCAweDU1LCAweGRlLCAweGU3LCAweDNjLCAweGIwLAorCTB4ZGIsIDB4MWYsIDB4ZjgsIDB4N2YsIDB4MmEsIDB4ZjYsIDB4ZDMsIDB4MDcsIDB4NjQsIDB4YWQsIDB4ZGEsIDB4MDEsCisJMHg3ZSwgMHhkMCwgMHgyZSwgMHg0NCwgMHg5NSwgMHg3ZiwgMHg3ZCwgMHhlMywgMHgyOCwgMHhlZCwgMHgxZCwgMHg2ZCwKKwkweDg5LCAweDVlLCAweDhiLCAweGFkLCAweGRhLCAweGY3LCAweDdhLCAweGY1LCAweGI3LCAweDMzLCAweDdiLCAweDY1LAorCTB4YjMsIDB4MTYsIDB4ZGEsIDB4NDIsIDB4ZjgsIDB4ODcsIDB4ZDUsIDB4YTgsIDB4YjEsIDB4Y2IsIDB4OWQsIDB4ZDAsCisJMHhkZCwgMHhkZiwgMHg4ZiwgMHhkNiwgMHg5NSwgMHhhZiwgMHhjZSwgMHhmOSwgMHhkMywgMHgwNiwgMHg0NSwgMHg5OSwKKwkweDE3LCAweGQ3LCAweDU5LCAweGY3LCAweDM4LCAweGY3LCAweDY2LCAweDFiLCAweGE0LCAweDcxLCAweDg3LCAweDdiLAorCTB4OTAsIDB4ZTMsIDB4MzEsIDB4ODcsIDB4ODIsIDB4NzMsIDB4OGMsIDB4NGIsIDB4ZjQsIDB4ZmMsIDB4NjMsIDB4NjIsCisJMHhjMywgMHg2ZiwgMHg4OSwgMHgyYywgMHgxMSwgMHhlYiwgMHhkZCwgMHhlYywgMHhiYiwgMHg0NCwgMHgyZSwgMHhiYSwKKwkweGU2LCAweDViLCAweGVjLCAweDQxLCAweDhkLCAweDY1LCAweDMyLCAweDI4LCAweGViLCAweGUxLCAweGY3LCAweGQ5LAorCTB4ZmMsIDB4MzUsIDB4ZGIsIDB4Y2QsIDB4ZDAsIDB4YjcsIDB4ZDgsIDB4ZDUsIDB4OTYsIDB4ZTIsIDB4ZWYsIDB4ZmYsCisJMHgwMSwgMHgzNywgMHg2NCwgMHgyNiwgMHgyYiwgMHgxYywgMHg0YywgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGJueDJfQ09NX2IwOUZ3RGF0YVsoMHgwLzQpICsgMV0gPSB7IDB4MCB9Owogc3RhdGljIGNvbnN0IHUzMiBibngyX0NPTV9iMDlGd1JvZGF0YVsoMHgzMC80KSArIDFdID0gewotCTB4ODAwODAxMDAsIDB4ODAwODAwODAsIDB4ODAwODAwMDAsIDB4ODAwODAyNDAsIDB4MDgwMDBlOTQsIDB4MDgwMDBlZWMsCi0JMHgwODAwMGYzMCwgMHgwODAwMGZjNCwgMHgwODAwMTAwOCwgMHg4MDA4MDEwMCwgMHg4MDA4MDA4MCwgMHg4MDA4MDAwMCwKKwkweDgwMDgwMTAwLCAweDgwMDgwMDgwLCAweDgwMDgwMDAwLCAweDgwMDgwMjQwLCAweDA4MDAwZTIwLCAweDA4MDAwZTc4LAorCTB4MDgwMDBlYmMsIDB4MDgwMDBmNTAsIDB4MDgwMDBmOTQsIDB4ODAwODAxMDAsIDB4ODAwODAwODAsIDB4ODAwODAwMDAsCiAJMHgwMDAwMDAwMCB9OwogCiBzdGF0aWMgc3RydWN0IGZ3X2luZm8gYm54Ml9jb21fZndfMDkgPSB7Ci0JLyogRmlybXdhcmUgdmVyc2lvbjogNC4wLjUgKi8KKwkvKiBGaXJtd2FyZSB2ZXJzaW9uOiA0LjQuMjMgKi8KIAkudmVyX21ham9yCQkJPSAweDQsCi0JLnZlcl9taW5vcgkJCT0gMHgwLAotCS52ZXJfZml4CQkJPSAweDUsCisJLnZlcl9taW5vcgkJCT0gMHg0LAorCS52ZXJfZml4CQkJPSAweDE3LAogCiAJLnN0YXJ0X2FkZHIJCQk9IDB4MDgwMDAwZjgsCiAKIAkudGV4dF9hZGRyCQkJPSAweDA4MDAwMDAwLAotCS50ZXh0X2xlbgkJCT0gMHg0YjQwLAorCS50ZXh0X2xlbgkJCT0gMHg0YzE4LAogCS50ZXh0X2luZGV4CQkJPSAweDAsCiAJLmd6X3RleHQJCQk9IGJueDJfQ09NX2IwOUZ3VGV4dCwKIAkuZ3pfdGV4dF9sZW4JCQk9IHNpemVvZihibngyX0NPTV9iMDlGd1RleHQpLApAQCAtODYwLDEyMDIgKzg2NiwxMjEwIEBACiAJLmRhdGFfaW5kZXgJCQk9IDB4MCwKIAkuZGF0YQkJCQk9IGJueDJfQ09NX2IwOUZ3RGF0YSwKIAotCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDRiYTAsCisJLnNic3NfYWRkcgkJCT0gMHgwODAwNGM2MCwKIAkuc2Jzc19sZW4JCQk9IDB4MzgsCiAJLnNic3NfaW5kZXgJCQk9IDB4MCwKIAotCS5ic3NfYWRkcgkJCT0gMHgwODAwNGJkOCwKKwkuYnNzX2FkZHIJCQk9IDB4MDgwMDRjOTgsCiAJLmJzc19sZW4JCQk9IDB4YmMsCiAJLmJzc19pbmRleAkJCT0gMHgwLAogCi0JLnJvZGF0YV9hZGRyCQkJPSAweDA4MDA0YjQwLAorCS5yb2RhdGFfYWRkcgkJCT0gMHgwODAwNGMxOCwKIAkucm9kYXRhX2xlbgkJCT0gMHgzMCwKIAkucm9kYXRhX2luZGV4CQkJPSAweDAsCiAJLnJvZGF0YQkJCQk9IGJueDJfQ09NX2IwOUZ3Um9kYXRhLAogfTsKIAogc3RhdGljIHU4IGJueDJfQ1BfYjA5RndUZXh0W10gPSB7Ci0JMHhhZCwgMHhiYywgMHgwZiwgMHg3NCwgMHg1MywgMHhkNywgMHg5NSwgMHgyZSwgMHhmZSwgMHhkZCwgMHgyYiwgMHhjOSwKLQkweDk2LCAweDZkLCAweGQ5LCAweDk2LCAweDhkLCAweDcwLCAweGU0LCAweGM0LCAweDBkLCAweDUyLCAweDdjLCAweDA1LAotCTB4MGEsIDB4MzYsIDB4ZTksIDB4OTUsIDB4MTEsIDB4ODksIDB4ZDMsIDB4NzcsIDB4MTMsIDB4NTQsIDB4NzAsIDB4ODIsCi0JMHg0OSwgMHg2OCwgMHhlMiwgMHgxMCwgMHhhNiwgMHg3NSwgMHg2NywgMHg5OCwgMHhhOSwgMHgxZSwgMHgyMSwgMHgwOSwKLQkweDQ5LCAweDk5LCAweDNjLCAweGI3LCAweGFmLCAweGVkLCAweDIzLCAweGY5LCAweGQxLCAweGYxLCAweGFkLCAweGNkLAotCTB4MWYsIDB4MDMsIDB4OTIsIDB4MjUsIDB4MWIsIDB4ZjMsIDB4MjcsIDB4NmYsIDB4YmEsIDB4NWUsIDB4ODQsIDB4MzEsCi0JMHgxOCwgMHgxMiwgMHhkOSwgMHg0ZSwgMHhkYSwgMHg0YywgMHg4NywgMHhiYywgMHhkNSwgMHg3OSwgMHg3OCwgMHgwYywKLQkweDI0LCAweDkwLCAweDM0LCAweDdmLCAweDlhLCAweGI0LCAweGFiLCAweDY5LCAweGE3LCAweDZmLCAweGUyLCAweDEyLAotCTB4OTIsIDB4OTIsIDB4N2YsIDB4OTQsIDB4MzQsIDB4OWQsIDB4MGUsIDB4NzQsIDB4ODYsIDB4ZGUsIDB4ZGYsIDB4YjcsCi0JMHhhZiwgMHgyNCwgMHgzMCwgMHg5NCwgMHhhNCwgMHhlZCwgMHg1YSwgMHhjZiwgMHg2YiwgMHg2OSwgMHg0OSwgMHhmNywKLQkweGRlLCAweDczLCAweGY2LCAweDM5LCAweDY3LCAweDlmLCAweGJkLCAweGJmLCAweGZkLCAweGVkLCAweDczLCAweGNlLAotCTB4ZjUsIDB4YTcsIDB4ODAsIDB4NTIsIDB4ZTQsIDB4ZmYsIDB4Y2EsIDB4ZjksIDB4YjksIDB4MmUsIDB4ZGEsIDB4NzEsCi0JMHgwZiwgMHhlNiwgMHg1ZCwgMHhhNywgMHhjYiwgMHhiNSwgMHhkMywgMHgwNSwgMHgyNywgMHhmZSwgMHhjNCwgMHhiZiwKLQkweGMwLCAweDlmLCAweDVhLCAweDMwLCAweGZmLCAweGU3LCAweDAwLCAweGJjLCAweDg1LCAweDM2LCAweGU1LCAweDAzLAotCTB4YjcsIDB4NmEsIDB4YWMsIDB4ZmIsIDB4ZTIsIDB4MDIsIDB4MGQsIDB4NmUsIDB4ODcsIDB4MTEsIDB4NWQsIDB4N2UsCi0JMHg4ZiwgMHgwNiwgMHhjNCwgMHhiMiwgMHgwZCwgMHg4MSwgMHg4NSwgMHgzOCwgMHg2NywgMHg5OSwgMHgzZSwgMHgyNywKLQkweGU0LCAweGZlLCAweGE3LCAweDhjLCAweGZmLCAweDdjLCAweGVjLCAweDlmLCAweDZlLCAweDA4LCAweDllLCAweGNlLAotCTB4MzgsIDB4ZTAsIDB4ZjYsIDB4MWEsIDB4NWYsIDB4ODMsIDB4NzcsIDB4MjYsIDB4ZGMsIDB4NzUsIDB4YWMsIDB4ZjMsCi0JMHhlZCwgMHg1OSwgMHhiMywgMHg1NSwgMHg1NCwgMHgxNCwgMHg2NCwgMHgwNSwgMHhmZCwgMHgxOSwgMHgwNCwgMHhiZCwKLQkweDI2LCAweDgyLCAweDYxLCAweDEzLCAweDg4LCAweDNiLCAweDBkLCAweGM0LCAweDhiLCAweDBkLCAweDM3LCAweDhhLAotCTB4YjQsIDB4MjIsIDB4YzQsIDB4YmQsIDB4NmIsIDB4MDIsIDB4ZWIsIDB4YTIsIDB4YzAsIDB4ODIsIDB4ODQsIDB4M2IsCi0JMHg3MCwgMHgzYywgMHgwYiwgMHhkYywgMHg5MywgMHg3MCwgMHg2MywgMHhkMiwgMHhlMSwgMHgwOSwgMHhiYywgMHg5OSwKLQkweGJkLCAweGI5LCAweDMyLCAweGE3LCAweDgzLCAweDE4LCAweDFjLCAweDFhLCAweGUyLCAweGFhLCAweDIxLCAweGY3LAotCTB4MTEsIDB4NTgsIDB4OTgsIDB4OGQsIDB4NjIsIDB4N2QsIDB4Y2EsIDB4YjIsIDB4OWMsIDB4MWEsIDB4OWMsIDB4ODMsCi0JMHg4ZCwgMHgwZSwgMHhjNCwgMHhiYywgMHgwYSwgMHg3NiwgMHg2YiwgMHg1MSwgMHg3NCwgMHg4ZiwgMHgwNSwgMHgzOSwKLQkweDU4LCAweDI5LCAweDIzLCAweGVkLCAweGZjLCAweGU2LCAweGRjLCAweGM2LCAweGQ0LCAweDQ5LCAweGViLCAweDlmLAotCTB4NjYsIDB4NzksIDB4ZjEsIDB4ZTQsIDB4OTgsIDB4MGYsIDB4MDcsIDB4YzcsIDB4ODIsIDB4YTYsIDB4ODksIDB4MmEsCi0JMHg5YywgMHg0OCwgMHgzNywgMHhlMiwgMHhhNCwgMHg1NiwgMHg4NywgMHgzNywgMHgzNSwgMHgwYiwgMHhlYiwgMHhmNSwKLQkweDMwLCAweDU0LCAweDJkLCAweGE4LCAweDQzLCAweGYxLCAweDYzLCAweGQwLCAweDFiLCAweDBjLCAweGM0LCAweGMxLAotCTB4NGUsIDB4NTQsIDB4MDQsIDB4YzMsIDB4ZTMsIDB4YWMsIDB4OWIsIDB4NGEsIDB4MjEsIDB4NWUsIDB4NjQsIDB4MzgsCi0JMHg1MSwgMHhhMiwgMHhkZCwgMHg4YywgMHg1MywgMHhkYiwgMHgwYywgMHg3YywgMHhiMCwgMHgwZCwgMHhjYiwgMHgyYiwKLQkweDYwLCAweDU5LCAweGQ5LCAweDQ4LCAweGE4LCAweDZkLCAweGI1LCAweGUyLCAweDBkLCAweDNjLCAweDlmLCAweDQ1LAotCTB4ZTAsIDB4NTgsIDB4NzYsIDB4YWEsIDB4ZGUsIDB4MzgsIDB4MjEsIDB4ZDUsIDB4NmMsIDB4MjcsIDB4MTUsIDB4YzUsCi0JMHg0ZSwgMHhmNiwgMHhjZCwgMHgzYiwgMHgyYiwgMHg4YSwgMHhmNCwgMHgxOCwgMHhkYiwgMHg0ZSwgMHg0OSwgMHg3ZiwKLQkweGZjLCAweGY4LCAweGE3LCAweDU5LCAweDdmLCAweGNkLCAweGY5LCAweDY0LCAweDViLCAweDk0LCAweGJkLCAweDIxLAotCTB4ZjUsIDB4M2EsIDB4ZmIsIDB4NTUsIDB4ODcsIDB4ZWYsIDB4OGUsIDB4ZjksIDB4ZjEsIDB4MWQsIDB4ZjYsIDB4ZWQsCi0JMHgyOSwgMHgyOSwgMHgzNywgMHgxNiwgMHg2MCwgMHgxZiwgMHhhYiwgMHg3MCwgMHg4NCwgMHhmZCwgMHhmYiwgMHgyMSwKLQkweGZiLCAweGY3LCAweDBhLCAweGZiLCAweGI3LCAweDliLCAweGZkLCAweDViLCAweGQxLCAweDFjLCAweGRjLCAweDY5LAotCTB4NDIsIDB4YzEsIDB4ZDIsIDB4YzYsIDB4MzYsIDB4ZTksIDB4MWIsIDB4YzcsIDB4YzcsIDB4OGYsIDB4YWEsIDB4MjIsCi0JMHg1NiwgMHgxZCwgMHgwYywgMHgwNywgMHhkNCwgMHg2MCwgMHgxOCwgMHg3NiwgMHg5ZiwgMHhhNSwgMHhmZCwgMHhkZiwKLQkweDljLCAweDRiLCAweGE2LCAweDYwLCAweGJhLCAweGE5LCAweDU3LCAweDk3LCAweDcxLCAweDMzLCAweGIyLCAweGVjLAotCTB4ZjMsIDB4MTMsIDB4ZGIsIDB4NDIsIDB4Y2QsIDB4YWIsIDB4NTQsIDB4MmMsIDB4ZjEsIDB4YjAsIDB4ZGYsIDB4MGYsCi0JMHg0NiwgMHg0MiwgMHg4MSwgMHhkOSwgMHhlYywgMHhmNywgMHg1MCwgMHg1NiwgMHg1NSwgMHg1NSwgMHhjZCwgMHgxNywKLQkweDE4LCAweGNlLCAweDJhLCAweDg4LCAweDJkLCAweDU1LCAweDM5LCAweDdlLCAweGI2LCAweDliLCAweDYyLCAweDVmLAotCTB4NTIsIDB4ZWMsIDB4NGIsIDB4OGEsIDB4N2QsIDB4NDksIDB4NDksIDB4OWYsIDB4YzMsIDB4ZWMsIDB4NmYsIDB4NGUsCi0JMHhkNywgMHg4MywgMHhkOSwgMHhjYiwgMHhmNSwgMHgzNSwgMHhkOCwgMHhjMywgMHhiOSwgMHhhNCwgMHgzZSwgMHhhNSwKLQkweGNmLCAweDk2LCAweGY1LCAweGFhLCAweGJlLCAweDg4LCAweDdkLCAweGIwLCAweGFjLCAweDhmLCAweDc0LCAweGU5LAotCTB4OWIsIDB4ZjQsIDB4YWIsIDB4MWMsIDB4MzEsIDB4NWYsIDB4OGEsIDB4NzMsIDB4NTYsIDB4ZTgsIDB4MWIsIDB4OGMsCi0JMHg2YSwgMHhjYywgMHgzMCwgMHg1ZCwgMHg4NiwgMHhjYywgMHhiYiwgMHhjYSwgMHhmYiwgMHgyMSwgMHhmZCwgMHgyMywKLQkweGMwLCAweDFhLCAweDhjLCAweDdhLCAweDAzLCAweDFiLCAweGIyLCAweGJlLCAweDQwLCAweDE3LCAweDc1LCAweGQ5LAotCTB4OWQsIDB4MGQsIDB4ZmEsIDB4YzUsIDB4NTYsIDB4ZmYsIDB4YjAsIDB4MmYsIDB4NDEsIDB4NmYsIDB4ZGMsIDB4OWUsCi0JMHg1MywgMHhlOSwgMHhkMywgMHg2NCwgMHg3ZSwgMHgzZSwgMHgyZCwgMHhlYiwgMHgxNSwgMHhkZCwgMHhjZiwgMHhiNiwKLQkweGE1LCAweDNmLCAweDUxLCAweGJiLCAweGVkLCAweDBmLCAweDc1LCAweDQ0LCAweGJkLCAweDEwLCAweGJiLCAweDA4LAotCTB4OTksIDB4M2YsIDB4YjQsIDB4ZWQsIDB4Y2IsIDB4MWIsIDB4NDgsIDB4NjcsIDB4NTksIDB4ZTYsIDB4YmMsIDB4MWMsCi0JMHgyNywgMHhjNywgMHgwYSwgMHhiNiwgMHg2NSwgMHg1OSwgMHhiYiwgMHhiNSwgMHhhMCwgMHg1NywgMHhkYSwgMHhjYSwKLQkweDhkLCAweDUxLCAweGVjLCAweDQ2LCAweGVjLCAweGM0LCAweDFmLCAweGY3LCAweDE4LCAweDVlLCAweGNhLCAweDQ0LAotCTB4ZGIsIDB4Y2UsIDB4NjQsIDB4YTcsIDB4NTUsIDB4YWIsIDB4ODksIDB4MmUsIDB4YjUsIDB4MzUsIDB4YjUsIDB4MGUsCi0JMHg0ZiwgMHhmMywgMHhhOSwgMHg3OSwgMHg1ZiwgMHgzMSwgMHhjYiwgMHhhMywgMHgxMSwgMHg5NCwgMHg2YSwgMHhmMCwKLQkweDk0LCAweDY4LCAweDY4LCAweGViLCAweDFkLCAweDI5LCAweDM1LCAweGNiLCAweDhjLCAweGVmLCAweGRmLCAweDlkLAotCTB4MWMsIDB4NzEsIDB4YTMsIDB4NzQsIDB4NDQsIDB4NDMsIDB4YzksIDB4NDgsIDB4YzgsIDB4ODksIDB4MGEsIDB4MDMsCi0JMHg1YiwgMHhjNiwgMHhkZSwgMHg3MSwgMHhlNCwgMHhjNiwgMHhiYiwgMHhiMCwgMHgzMCwgMHg2ZSwgMHhiMSwgMHg3MSwKLQkweGY3LCAweDViLCAweDg5LCAweGQzLCAweDU2LCAweDkxLCAweDU2LCAweGYyLCAweDA1LCAweDg3LCAweGExLCAweDA1LAotCTB4ZjYsIDB4MDIsIDB4YTcsIDB4NTcsIDB4NDQsIDB4ZmQsIDB4ZTgsIDB4YTIsIDB4Y2QsIDB4Y2UsIDB4ZDAsIDB4N2UsCi0JMHhlMiwgMHg0MSwgMHg0NSwgMHgyYiwgMHhjYywgMHhiMSwgMHgxYSwgMHhmMSwgMHgwNywgMHhhYywgMHg0ZiwgMHg1OCwKLQkweDU2LCAweDkxLCAweDcxLCAweGY3LCAweGRkLCAweDJjLCAweGU3LCAweGRkLCAweDhiLCAweDVhLCAweDJjLCAweGY0LAotCTB4NjIsIDB4ZWQsIDB4ZmEsIDB4ZTgsIDB4YWYsIDB4OTUsIDB4N2QsIDB4MDMsIDB4Y2IsIDB4NjEsIDB4MGUsIDB4YWYsCi0JMHhlNiwgMHg0NywgMHgwNSwgMHhhYSwgMHhhZSwgMHhiZSwgMHhkYSwgMHg3MSwgMHhlMywgMHg3MiwgMHg3NCwgMHgwZiwKLQkweGIzLCAweGFmLCAweGE5LCAweDE4LCAweGVkLCAweDUzLCAweDZjLCAweDZiLCAweDM1LCAweDM2LCAweDBkLCAweDNmLAotCTB4MDQsIDB4NzMsIDB4ZjcsIDB4NGEsIDB4OTYsIDB4OTEsIDB4MzEsIDB4NzUsIDB4ZjEsIDB4YmIsIDB4MTUsIDB4OGYsCi0JMHg4ZCwgMHg4OSwgMHg3YywgMHhlOSwgMHhjNiwgMHhlNSwgMHhlNCwgMHhiZiwgMHg2MywgMHgyZCwgMHhmNCwgMHg4OSwKLQkweDdjLCAweDI3LCAweDM2LCAweDI2LCAweGVjLCAweDc5LCAweDUxLCAweDY4LCAweDlmLCAweGUxLCAweDEzLCAweGI0LAotCTB4OTUsIDB4NmUsIDB4ZGQsIDB4NDAsIDB4NGYsIDB4YWEsIDB4MTksIDB4MWIsIDB4NTMsIDB4YjEsIDB4MjAsIDB4ZDEsCi0JMHg4MCwgMHhmMywgMHhkNiwgMHgwNiwgMHhkNSwgMHgwOCwgMHhiNSwgMHg3NiwgMHg0MSwgMHg3YywgMHgwMiwgMHg0YSwKLQkweGE5LCAweDAxLCAweDY3LCAweDM2LCAweDNhLCAweGU5LCAweDdlLCAweDMxLCAweGExLCAweGI1LCAweDNmLCAweGFlLAotCTB4YjgsIDB4MTAsIDB4YWYsIDB4OTIsIDB4MzYsIDB4MjYsIDB4ZGQsIDB4MmYsIDB4MjcsIDB4MTQsIDB4ZmMsIDB4NTIsCi0JMHgwYiwgMHg3NSwgMHhiYywgMHhhYiwgMHg0YywgMHhiYSwgMHg1ZiwgMHhjYSwgMHg3YSwgMHg1MSwgMHg5YiwgMHgwYywKLQkweGI2LCAweDliLCAweDRhLCAweDMzLCAweDllLCAweGM5LCAweGZhLCAweGUwLCAweDRmLCAweDFhLCAweDM4LCAweDkwLAotCTB4ZDUsIDB4YjEsIDB4ZmYsIDB4MjIsIDB4OWYsIDB4YjksIDB4ZWMsIDB4OWYsIDB4ZTksIDB4NjAsIDB4NWYsIDB4NTcsCi0JMHgyNiwgMHgwMiwgMHhlOCwgMHhkMiwgMHhjZiwgMHg1OSwgMHgzMSwgMHgyZiwgMHhlMiwgMHg5NSwgMHhjNiwgMHhhNCwKLQkweGZiLCAweDgzLCAweDI0LCAweDk0LCAweDBhLCAweDQzLCAweGYzLCAweDhmLCAweDJhLCAweGJmLCAweGIwLCAweGUyLAotCTB4M2UsIDB4MjksIDB4YzYsIDB4ZmUsIDB4OGQsIDB4YzksIDB4NTgsIDB4OTcsIDB4NTAsIDB4ZWYsIDB4MDYsIDB4ZTcsCi0JMHhmZCwgMHhiNCwgMHg1NSwgMHhjNiwgMHgzOSwgMHgyYiwgMHgzMiwgMHhhZSwgMHhjNCwgMHhmMCwgMHg4MCwgMHg4NiwKLQkweGZkLCAweDFjLCAweGViLCAweGZiLCAweGZhLCAweDc4LCAweGIzLCAweDA3LCAweDVhLCAweGRiLCAweDdiLCAweDA4LAotCTB4YzYsIDB4NjYsIDB4MmIsIDB4MDYsIDB4OGUsIDB4NjYsIDB4MzUsIDB4MGMsIDB4MjUsIDB4MGMsIDB4MWMsIDB4NGEsCi0JMHhkNCwgMHg3YiwgMHhiYiwgMHgzMSwgMHgxNywgMHgzMSwgMHg3ZiwgMHgwZSwgMHgxZiwgMHg0NywgMHhkOCwgMHhlZiwKLQkweGMxLCAweDUwLCAweDFiLCAweDJhLCAweDhkLCAweDY2LCAweDRjLCAweGIwLCAweGRmLCAweGE3LCAweGU2LCAweDg5LAotCTB4MWMsIDB4MWQsIDB4MmYsIDB4ZmQsIDB4MDksIDB4N2QsIDB4MTUsIDB4YmQsIDB4M2UsIDB4Y2EsIDB4YmUsIDB4MzYsCi0JMHhjZiwgMHgzZCwgMHg2NywgMHg2MSwgMHg5YSwgMHgxYiwgMHhjNywgMHhmNSwgMHgyYiwgMHg4OCwgMHg0NywgMHgzMCwKLQkweDRiLCAweDBjLCAweGI3LCAweGIzLCAweDI3LCAweGUxLCAweGM1LCAweGJlLCAweGFjLCAweGM3LCAweGQ5LCAweDlkLAotCTB4ZjAsIDB4NjEsIDB4NzcsIDB4MzYsIDB4ODAsIDB4NWEsIDB4MDMsIDB4YTYsIDB4OWYsIDB4NzIsIDB4NmIsIDB4ZTksCi0JMHg0YiwgMHhhMywgMHgwMywgMHg3NSwgMHgxOCwgMHgxYiwgMHgwOCwgMHhlYSwgMHgyZiwgMHgxMywgMHg3YiwgMHhmNiwKLQkweDBlLCAweDVkLCAweDg5LCAweDkxLCAweDAxLCAweDA1LCAweGMzLCAweDIxLCAweGY2LCAweDlkLCAweGJmLCAweDlmLAotCTB4MTgsIDB4YjgsIDB4MWEsIDB4ZDksIDB4MDEsIDB4MDcsIDB4YjYsIDB4ZDgsIDB4N2EsIDB4YjUsIDB4ZmQsIDB4MzAsCi0JMHhmZiwgMHg3ZCwgMHgyNSwgMHgzMiwgMHg0MywgMHg3MCwgMHhjZSwgMHg0ZSwgMHg3YSwgMHhmMSwgMHg3OCwgMHhkNiwKLQkweGU5LCAweGQ0LCAweDkyLCAweDNlLCAweDBjLCAweDY1LCAweGJmLCAweGNlLCAweDc5LCAweDEzLCAweGQ5LCAweDAxLAotCTB4MGMsIDB4MjYsIDB4ZmUsIDB4OWEsIDB4YmYsIDB4NjUsIDB4MWMsIDB4YjcsIDB4MmIsIDB4ZjksIDB4ZDgsIDB4NDEsCi0JMHhjYywgMHgwZSwgMHgxMCwgMHg0ZiwgMHg1YiwgMHhkMCwgMHg5NSwgMHg3MiwgMHg2MCwgMHg4NSwgMHg4ZCwgMHhlYiwKLQkweDI5LCAweDNlLCAweDZiLCAweGExLCAweGNkLCAweDE3LCAweGU0LCAweDBhLCAweGJlLCAweDA3LCAweDg4LCAweGJkLAotCTB4NDcsIDB4ZTksIDB4MDMsIDB4NTEsIDB4ZGEsIDB4YmYsIDB4OGUsIDB4ZmYsIDB4MzMsIDB4ZDYsIDB4ODgsIDB4N2YsCi0JMHgxYywgMHgwYiwgMHhlMywgMHg3YiwgMHg2MywgMHgxYSwgMHhmZSwgMHg4MSwgMHhiOCwgMHhmNCwgMHhmNCwgMHhkOCwKLQkweDU0LCAweGZmLCAweGJmLCAweDliLCAweGUzLCAweDEzLCAweDFmLCAweDM0LCAweGIwLCAweDJlLCAweDU1LCAweDg0LAotCTB4MGQsIDB4MDMsIDB4YTUsIDB4ZTgsIDB4MWUsIDB4YTgsIDB4MGYsIDB4MWYsIDB4YTIsIDB4ZGQsIDB4N2MsIDB4NGYsCi0JMHhmZiwgMHgxYywgMHhjNiwgMHhhYiwgMHgyOSwgMHg4MywgMHhmZSwgMHhiYiwgMHg4OSwgMHhmNywgMHgzNywgMHgwZiwKLQkweGQ0LCAweDUzLCAweGVmLCAweDk2LCAweGE1LCAweDQ2LCAweDFhLCAweDlhLCAweDI3LCAweDg4LCAweDU5LCAweDkzLAotCTB4YmUsIDB4NjAsIDB4NjAsIDB4NWMsIDB4MGQsIDB4MDYsIDB4NjIsIDB4NzAsIDB4MjEsIDB4ZDEsIDB4YTgsIDB4YzIsCi0JMHg5YywgMHgxZSwgMHhjYywgMHg5OCwgMHhjNCwgMHg0ZCwgMHg5ZiwgMHg3NiwgMHhiNSwgMHgyMiwgMHhkOCwgMHg2NiwKLQkweGFhLCAweDA2LCAweDZkLCAweDhlLCAweDc4LCAweGE3LCAweGM2LCAweGU4LCAweDEzLCAweGE1LCAweGY4LCAweDYwLAotCTB4MjAsIDB4ZDgsIDB4NjMsIDB4YWEsIDB4NzcsIDB4YzEsIDB4YWMsIDB4YjYsIDB4YWMsIDB4ZWYsIDB4NDQsIDB4ZDAsCi0JMHg3MSwgMHg4NSwgMHg4MSwgMHhkOCwgMHg3NCwgMHg2MiwgMHhjOCwgMHhkNSwgMHhjNiwgMHgxMiwgMHgxMCwgMHg5ZiwKLQkweDcxLCAweDJhLCAweGE5LCAweGY5LCAweDdmLCAweGEyLCAweGRjLCAweDhkLCAweGFmLCAweGI3LCAweDA1LCAweDAzLAotCTB4MDEsIDB4YjUsIDB4YzEsIDB4ZGMsIDB4YWQsIDB4MzYsIDB4ZDMsIDB4ZDQsIDB4MTEsIDB4ZjAsIDB4MWIsIDB4YjcsCi0JMHg2MSwgMHg4ZCwgMHgzZCwgMHg1NiwgMHgwNSwgMHg1ZSwgMHgyZCwgMHg4NiwgMHhlZSwgMHgxNCwgMHgyYiwgMHhmOSwKLQkweGVhLCAweGRiLCAweGZiLCAweGQ0LCAweGZhLCAweDMzLCAweGJhLCAweDFhLCAweDNjLCAweGRhLCAweGE2LCAweDEyLAotCTB4MmYsIDB4ZTYsIDB4OWUsIDB4YjIsIDB4MDIsIDB4MzUsIDB4OTYsIDB4ZDUsIDB4MzQsIDB4NTcsIDB4ZGEsIDB4MGMsCi0JMHhhMCwgMHg5YSwgMHg3MywgMHg1MywgMHhjNSwgMHhiOSwgMHg2OSwgMHgxYSwgMHgyZCwgMHhjNSwgMHhiYiwgMHgwMywKLQkweDMwLCAweGFmLCAweDMwLCAweDgyLCAweGFkLCAweDBmLCAweGFhLCAweGE1LCAweDc4LCAweDY3LCAweGE4LCAweDE0LAotCTB4NmYsIDB4MGUsIDB4MzgsIDB4NzEsIDB4NzIsIDB4YzAsIDB4YjIsIDB4ZWUsIDB4ZDUsIDB4MmIsIDB4NTEsIDB4MTQsCi0JMHhjMSwgMHhmNCwgMHgyMiwgMHg4NCwgMHg0ZSwgMHgwZiwgMHhjMiwgMHhjNCwgMHhlZiwgMHg1OSwgMHhmNiwgMHgzNywKLQkweDAzLCAweDdlLCAweGZjLCAweGRiLCAweGMwLCAweDY3LCAweGYwLCAweDc0LCAweDc1LCAweGVjLCAweGQ4LCAweDM0LAotCTB4ZjgsIDB4NzAsIDB4ODYsIDB4NzMsIDB4N2UsIDB4MmEsIDB4MTEsIDB4NmMsIDB4YWYsIDB4NzUsIDB4MDQsIDB4ZDcsCi0JMHgwMCwgMHgwZCwgMHhhYiwgMHgxZSwgMHg1NiwgMHg4MiwgMHhmMSwgMHg5NywgMHg5NSwgMHg2MCwgMHgyMCwgMHhhOSwKLQkweGY4LCAweGYwLCAweDFlLCAweDZkLCAweGViLCAweDQ0LCAweGI2LCAweGJlLCAweGY5LCAweDM1LCAweGI2LCAweGZmLAotCTB4NWIsIDB4ZmQsIDB4N2IsIDB4ZDYsIDB4NzgsIDB4OGQsIDB4ZTgsIDB4NTAsIDB4ZjQsIDB4NDUsIDB4OWQsIDB4YTcsCi0JMHhhOCwgMHg3MywgMHhlMiwgMHhlZSwgMHhmNywgMHg1MiwgMHhkNCwgMHgzOSwgMHhmYiwgMHhmMywgMHhmNCwgMHgxZiwKLQkweGUwLCAweGEwLCAweGNjLCAweDU3LCAweDMzLCAweDdkLCAweGZkLCAweDJhLCAweGZjLCAweDlkLCAweDNkLCAweGI2LAotCTB4NjMsIDB4ZDYsIDB4ZmYsIDB4ZjAsIDB4YzksIDB4ZjgsIDB4N2UsIDB4MzQsIDB4M2QsIDB4ZTcsIDB4ZTMsIDB4MzIsCi0JMHhjZSwgMHhhMywgMHg1NiwgMHhkYywgMHgyYiwgMHg2MywgMHg5NCwgMHhiMSwgMHhkYSwgMHhiYSwgMHgwYywgMHg3NCwKLQkweDI4LCAweGQzLCAweDU1LCAweDk0LCAweDVhLCAweGQ2LCAweDU2LCAweDNkLCAweGZmLCAweGRjLCAweDU3LCAweDE4LAotCTB4ZWIsIDB4YmYsIDB4ZDIsIDB4MGUsIDB4NjQsIDB4YmMsIDB4NmIsIDB4MWQsIDB4YTIsIDB4ZmIsIDB4ODAsIDB4ZmEsCi0JMHhhYSwgMHhmOCwgMHhiZiwgMHgxOSwgMHg0MywgMHhiOSwgMHg0NywgMHg2MiwgMHg2MCwgMHhlYywgMHhmYywgMHhmNSwKLQkweDUzLCAweDE1LCAweDE3LCAweDNmLCAweGE3LCAweDZkLCAweGQ5LCAweGVkLCAweGZkLCAweDNiLCAweGFmLCAweDY1LAotCTB4MmMsIDB4YWYsIDB4ZDAsIDB4NmUsIDB4YzQsIDB4NGUsIDB4MzgsIDB4OWQsIDB4ODYsIDB4ZDgsIDB4Y2MsIDB4YTUsCi0JMHhmNiwgMHgyMiwgMHhiNiwgMHhkMiwgMHg0OCwgMHhiYiwgMHhmYSwgMHgxNywgMHg2MiwgMHg2MiwgMHgwNywgMHg5ZSwKLQkweGJjLCAweGRlLCAweDJkLCAweGQzLCAweDFjLCAweDcwLCAweDE4LCAweDI2LCAweDNlLCAweDFmLCAweDc1LCAweGUwLAotCTB4YWIsIDB4NTEsIDB4MDUsIDB4ZDMsIDB4YjQsIDB4NjAsIDB4MDYsIDB4YWEsIDB4NjksIDB4NTUsIDB4OTEsIDB4NWIsCi0JMHg2YywgMHhlOCwgMHg0ZCwgMHg2MywgMHhjMywgMHgxOCwgMHg1MCwgMHhkOSwgMHgwYiwgMHg3NywgMHg4NSwgMHg2MSwKLQkweGUwLCAweGE1LCAweDI0LCAweGRjLCAweDY1LCAweGY0LCAweGNiLCAweDJmLCAweDI3LCAweGViLCAweGM3LCAweGRmLAotCTB4NTYsIDB4ODIsIDB4YjEsIDB4ZDcsIDB4YTksIDB4NGYsIDB4ZWEsIDB4YjUsIDB4Y2QsIDB4YWYsIDB4MDQsIDB4NWIsCi0JMHg1NywgMHgyYiwgMHhjMSwgMHhlNiwgMHhkOSwgMHgwYSwgMHhkYywgMHgwYSwgMHhjYiwgMHg4NSwgMHhiMywgMHg2OSwKLQkweGE0LCAweGM2LCAweGU0LCAweDc3LCAweDMzLCAweDY2LCAweDY1LCAweGZiLCAweGYyLCAweDdkLCAweDE0LCAweDNmLAotCTB4MDYsIDB4OGUsIDB4ZDAsIDB4YmYsIDB4ODcsIDB4OWEsIDB4MTUsIDB4ZTIsIDB4YzksIDB4M2IsIDB4NTYsIDB4Y2MsCi0JMHg0NywgMHhmOSwgMHgyOSwgMHhiOCwgMHg0YiwgMHg1OSwgMHhlNywgMHhiNiwgMHg2NCwgMHgxYSwgMHg4YywgMHg5OSwKLQkweGVlLCAweDEyLCAweGQ2LCAweGI5LCAweDM2LCAweDA5LCAweDc4LCAweDdhLCAweDA1LCAweGYzLCAweDgzLCAweDgxLAotCTB4NmIsIDB4OTQsIDB4ZmEsIDB4ZjYsIDB4YTQsIDB4MTIsIDB4MGMsIDB4ZGYsIDB4YWUsIDB4MzQsIDB4ZTgsIDB4NGYsCi0JMHg5MCwgMHhiNywgMHg2YywgMHg0MCwgMHhhZSwgMHg4ZCwgMHg1MCwgMHgzNiwgMHgyNywgMHhiZiwgMHgzZSwgMHgwYiwKLQkweDY1LCAweDQ2LCAweDEyLCAweDllLCAweDVhLCAweDZkLCAweDI2LCAweGNlLCAweDRlLCAweGIzLCAweGRiLCAweDUxLAotCTB4MmEsIDB4OTMsIDB4MDEsIDB4M2IsIDB4OTYsIDB4NTYsIDB4OGUsIDB4MDAsIDB4MmYsIDB4ZjUsIDB4NWIsIDB4MzgsCi0JMHgxNCwgMHhhOSwgMHhhNywgMHhiZiwgMHhiNSwgMHhjMSwgMHhjZiwgMHgzMiwgMHgzOSwgMHg1YiwgMHhiNCwgMHhiMSwKLQkweDQyLCAweGU5LCAweDQ5LCAweGQwLCAweGU5LCAweGE2LCAweGNiLCAweGE1LCAweDBmLCAweGYxLCAweGNmLCAweDIzLAotCTB4MjYsIDB4ZjcsIDB4NzYsIDB4MjYsIDB4YTAsIDB4ZjQsIDB4MjYsIDB4ODIsIDB4M2IsIDB4MDEsIDB4NmQsIDB4NGQsCi0JMHg5NSwgMHgyMywgMHhmNiwgMHg0MCwgMHgyNSwgMHgzYSwgMHgzMSwgMHgxMSwgMHgwOSwgMHhjNSwgMHgwNywgMHg5NSwKLQkweDUwLCAweDdiLCAweGJmLCAweGEyLCAweGJiLCAweGI3LCAweGIwLCAweGJkLCAweGNkLCAweDJjLCAweGIzLCAweDgxLAotCTB4OWYsIDB4NDUsIDB4MjEsIDB4YWQsIDB4ZjUsIDB4NDMsIDB4YzQsIDB4YWUsIDB4MmQsIDB4NjEsIDB4OTksIDB4NDMsCi0JMHg3YSwgMHhlOCwgMHhjYywgMHg2ZSwgMHg4NCwgMHg4ZSwgMHhmZSwgMHhkYSwgMHhhMSwgMHhiYiwgMHgxZiwgMHhjZCwKLQkweDhhLCAweGFjLCAweDY2LCAweDY1LCAweDY4LCAweGY0LCAweDI2LCAweDM1LCAweGU3LCAweGZiLCAweGZmLCAweDMzLAotCTB4YWYsIDB4ODMsIDB4YWYsIDB4Y2IsIDB4YjUsIDB4ZGQsIDB4YjYsIDB4MzMsIDB4NzksIDB4YjQsIDB4ZjQsIDB4MGYsCi0JMHhlZiwgMHg3MSwgMHg5MiwgMHgyZSwgMHhiYSwgMHhkNywgMHhlMCwgMHgxZCwgMHhhMiwgMHhkZiwgMHgzOCwgMHhiNCwKLQkweDEyLCAweGZhLCAweGI5LCAweGYwLCAweDk1LCAweDU4LCAweGQ4LCAweDA1LCAweGI5LCAweGU3LCAweDQwLCAweGM2LAotCTB4MTksIDB4ZjMsIDB4M2IsIDB4ZjAsIDB4OWYsIDB4NTYsIDB4NmMsIDB4OTksIDB4ZGMsIDB4MmIsIDB4NDUsIDB4YmMsCi0JMHhhZCwgMHhjMSwgMHhlZiwgMHg0NCwgMHg0MywgMHhmMywgMHg3YSwgMHhmYSwgMHhmMCwgMHhlNCwgMHhiMiwgMHgwNSwKLQkweDdjLCAweDE2LCAweGQyLCAweDBmLCAweGExLCAweDNlLCAweGIwLCAweDFlLCAweGYyLCAweGZiLCAweDJjLCAweDZkLAotCTB4NmQsIDB4ODEsIDB4ZDQsIDB4NjUsIDB4OTksIDB4MWMsIDB4MjcsIDB4MTMsIDB4OGMsIDB4NTgsIDB4YTcsIDB4NWIsCi0JMHg3OCwgMHg1NiwgMHg4NywgMHg1OSwgMHg2YywgMHgxYywgMHg1MCwgMHg4ZSwgMHgyNywgMHg3ZSwgMHg2ZiwgMHhjNSwKLQkweDljLCAweDU4LCAweDQyLCAweDdmLCAweGQyLCAweDM1LCAweDA1LCAweDAxLCAweGI3LCAweDExLCAweDBhLCAweDFjLAotCTB4MjUsIDB4ZmIsIDB4YTQsIDB4NmQsIDB4MjgsIDB4OTMsIDB4ZDksIDB4NzUsIDB4Y2EsIDB4NWIsIDB4ZDksIDB4MWUsCi0JMHhlNSwgMHg0NCwgMHg1NiwgMHhlYSwgMHgxZSwgMHg1MCwgMHhkZSwgMHhjYywgMHg0YSwgMHhlYywgMHhhOSwgMHgwYiwKLQkweDFjLCAweDYxLCAweDJjLCAweDY1LCAweDFjLCAweDU3LCAweGJiLCAweGM5LCAweGRhLCAweDM2LCAweGU4LCAweDE1LAotCTB4ZTQsIDB4OGUsIDB4NWEsIDB4NzgsIDB4OTAsIDB4ZmQsIDB4ZGQsIDB4MTMsIDB4ODUsIDB4YmUsIDB4NTEsIDB4NzcsCi0JMHg2MSwgMHhkMiwgMHgwYiwgMHg0ZiwgMHhiNywgMHhlZSwgMHg5NCwgMHg2YiwgMHhjNiwgMHgzNCwgMHhhOSwgMHg1YiwKLQkweDE3LCAweDU4LCAweDlmLCAweDNkLCAweDQ3LCAweGJmLCAweGM4LCAweDVkLCAweGVmLCAweDg5LCAweDE2LCAweGVlLAotCTB4N2QsIDB4NjQsIDB4OGQsIDB4MmYsIDB4NTMsIDB4NzksIDB4ZmQsIDB4YTIsIDB4OGMsIDB4OWIsIDB4NzUsIDB4YTcsCi0JMHg3MiwgMHg0NSwgMHg4OSwgMHhkYiwgMHgyYSwgMHhiOSwgMHg2OSwgMHgxNSwgMHg0YywgMHg2ZiwgMHhkMCwgMHhjYywKLQkweDYwLCAweDA5LCAweDdkLCAweGU3LCAweDMwLCAweGI5LCAweGFjLCAweDlmLCAweDcxLCAweDY5LCAweDA5LCAweGIxLAotCTB4NTQsIDB4NzgsIDB4OTgsIDB4YzIsIDB4ZTcsIDB4MWUsIDB4ZGMsIDB4OTIsIDB4ZjgsIDB4ODcsIDB4M2MsIDB4YzcsCi0JMHg2NSwgMHg2YywgMHhhZSwgMHg3MSwgMHgwOCwgMHg5ZiwgMHhmNCwgMHhjYSwgMHhkYywgMHgxZSwgMHg0YywgMHg0ZCwKLQkweGU1LCAweDdlLCAweDc1LCAweDgxLCAweDkzLCAweGVjLCAweDc3LCAweDg5LCAweGE2LCAweDg1LCAweDRiLCAweDk0LAotCTB4YmEsIDB4YzAsIDB4NWIsIDB4ZDksIDB4MjUsIDB4ZjQsIDB4Y2QsIDB4NzcsIDB4ZDksIDB4YWUsIDB4MDcsIDB4NmYsCi0JMHgyNSwgMHgyYSwgMHhjOCwgMHg2YiwgMHg4MywgMHgzMSwgMHg5MywgMHgwMiwgMHg2ZiwgMHgyNSwgMHgyZiwgMHgyMCwKLQkweGJmLCAweDk4LCAweGYyLCAweGQ3LCAweDA2LCAweGM2LCAweDVhLCAweDg5LCAweDg3LCAweGVhLCAweGEyLCAweDc5LAotCTB4Y2QsIDB4NTgsIDB4OTUsIDB4ODUsIDB4NzMsIDB4NjUsIDB4ZDQsIDB4YzAsIDB4YmQsIDB4OGMsIDB4YTMsIDB4ZjcsCi0JMHgzMywgMHgzNiwgMHhhZCwgMHg2NiwgMHhkYywgMHhkOSwgMHgxMiwgMHhlMSwgMHhkOCwgMHhhYSwgMHgyYywgMHhhYiwKLQkweDU4LCAweGViLCAweDE0LCAweDhlLCAweDhjLCAweDI0LCAweGUzLCAweGRlLCAweDNkLCAweDlhLCAweDEzLCAweGViLAotCTB4ZjgsIDB4ZmIsIDB4YzUsIDB4ZWMsIDB4N2YsIDB4NTgsIDB4ZjcsIDB4OTMsIDB4YTMsIDB4M2YsIDB4N2IsIDB4OTEsCi0JMHg0YywgMHhhOCwgMHg0MywgMHg1YSwgMHg0MywgMHg3OCwgMHgzZCwgMHhlMywgMHgxZSwgMHhlNSwgMHg5YSwgMHgxNSwKLQkweDg2LCAweDY1LCAweDVkLCAweDFiLCAweDBhLCAweGM2LCAweDVjLCAweDhhLCAweDhlLCAweDQzLCAweDIzLCAweDkzLAotCTB4NTYsIDB4NjAsIDB4YmEsIDB4ZjAsIDB4ZjMsIDB4NDIsIDB4NmMsIDB4OTAsIDB4YjEsIDB4MTYsIDB4ZjgsIDB4OWYsCi0JMHg3MCwgMHhiZCwgMHhhOSwgMHgzZSwgMHhhZCwgMHhlMiwgMHhkNiwgMHgwMSwgMHhlMSwgMHhhNiwgMHg3ZSwgMHgyYywKLQkweDRkLCAweDdjLCAweDBiLCAweDg3LCAweDFhLCAweDlkLCAweDY4LCAweDI1LCAweDZmLCAweDVmLCAweDk0LCAweGYwLAotCTB4ZTAsIDB4MmUsIDB4NjIsIDB4ZTAsIDB4ZTIsIDB4NDQsIDB4MzEsIDB4ZTcsIDB4YzYsIDB4ODcsIDB4ZGIsIDB4MTIsCi0JMHg0ZSwgMHgxYywgMHg2ZSwgMHg5YywgMHgwNiwgMHhkMywgMHg1NywgMHg4YywgMHhmNywgMHg3NCwgMHgwNywgMHg4ZSwKLQkweGU4LCAweDVlLCAweDY0LCAweDZjLCAweDdmLCAweGQ4LCAweDQyLCAweGVjLCAweDBhLCAweGU2LCAweGY5LCAweGEyLAotCTB4ZTgsIDB4ZDAsIDB4NDEsIDB4N2QsIDB4YWEsIDB4ODgsIDB4OWYsIDB4ZDcsIDB4ZTEsIDB4ZTUsIDB4YjgsIDB4NjAsCi0JMHg4MSwgMHgwNywgMHg3ZSwgMHg2OCwgMHhjNSwgMHhhNywgMHg0YiwgMHg3ZCwgMHg5OCwgMHgxZSwgMHg0MywgMHhjNiwKLQkweDIxLCAweDVjLCAweDRhLCAweDQ3LCAweGY3LCAweDQ4LCAweDhjLCAweDljLCAweDY3LCAweGVhLCAweDUwLCAweDRmLAotCTB4OTMsIDB4YzcsIDB4NTUsIDB4ZTIsIDB4NzUsIDB4NGQsIDB4NzgsIDB4ZGMsIDB4MmIsIDB4ZjAsIDB4ZDIsIDB4NzcsCi0JMHg3YiwgMHg0NiwgMHg0MiwgMHgxZCwgMHhhNywgMHgxNSwgMHgwNywgMHg1ZSwgMHhkNCwgMHgyYSwgMHhlMiwgMHg2ZSwKLQkweGZhLCAweGY0LCAweGM2LCAweDExLCAweDM4LCAweGQ3LCAweGNmLCAweGQzLCAweGQxLCAweDNiLCAweGQyLCAweGQ1LAotCTB4NWMsIDB4MGUsIDB4MTIsIDB4OWIsIDB4NzksIDB4MzksIDB4ZmUsIDB4ZjEsIDB4NjUsIDB4ZWEsIDB4NzYsIDB4NDUsCi0JMHhjNCwgMHhlNiwgMHgxZiwgMHhiOSwgMHhkOCwgMHhlYiwgMHhiNSwgMHgyYywgMHhlNiwgMHgwYywgMHhkNCwgMHgzMywKLQkweGIwLCAweDJmLCAweGFmLCAweGUzLCAweDNkLCAweGZjLCAweGRkLCAweDkzLCAweGQ3LCAweGYxLCAweDNhLCAweGNhLAotCTB4YTMsIDB4ZmYsIDB4NjEsIDB4YzMsIDB4NDUsIDB4OWMsIDB4MjEsIDB4ODAsIDB4NjIsIDB4NDMsIDB4MzAsIDB4ODgsCi0JMHhmOCwgMHg0OSwgMHgzYywgMHg4OSwgMHg1MSwgMHhjNywgMHhjZiwgMHg2NSwgMHg3ZiwgMHhjNywgMHhiMSwgMHgwNiwKLQkweDM5LCAweGRkLCAweDYyLCAweDRmLCAweDhjLCAweDg1LCAweGVhLCAweDY3LCAweDFjLCAweGM0LCAweDU1LCAweGVhLAotCTB4NDEsIDB4ZjQsIDB4MmMsIDB4ZmEsIDB4YjUsIDB4YWMsIDB4N2UsIDB4NWQsIDB4NzQsIDB4MmMsIDB4ZmEsIDB4MTYsCi0JMHhiZCwgMHhlNywgMHhmMCwgMHg5MywgMHg3YywgMHhiZiwgMHgwNywgMHg0OCwgMHhiMywgMHhhYywgMHg4MywgMHg3OCwKLQkweDY5LCAweGUwLCAweGJiLCAweDZkLCAweDYyLCAweDNiLCAweGU1LCAweDc2LCAweDhjLCAweDliLCAweDMzLCAweGQzLAotCTB4YjIsIDB4OWUsIDB4OGEsIDB4MDQsIDB4ZjAsIDB4YmUsIDB4ZDYsIDB4ZDAsIDB4ZGMsIDB4YTQsIDB4MDYsIDB4ZDksCi0JMHhkNywgMHgyNSwgMHg0OCwgMHg4YywgMHhjNSwgMHgzOCwgMHg3NywgMHg1NywgMHg5MywgMHg4NywgMHg4YiwgMHhhZCwKLQkweGExLCAweGEzLCAweGM4LCAweGM2LCAweDVjLCAweGUwLCAweDQ0LCAweDQyLCAweDBiLCAweDZmLCAweGUwLCAweDljLAotCTB4ZWQsIDB4ZjYsIDB4MmQsIDB4MjMsIDB4NjcsIDB4NTIsIDB4NWIsIDB4OTgsIDB4YjUsIDB4OTAsIDB4YWIsIDB4NjgsCi0JMHhlNiwgMHgyNiwgMHhiYywgMHg2YiwgMHg2NSwgMHg3YywgMHgxNiwgMHhlMywgMHg5YiwgMHgwYSwgMHhhNywgMHgzNiwKLQkweDAzLCAweDg3LCAweGJkLCAweDBlLCAweDNjLCAweDFmLCAweGFlLCAweDQxLCAweGFjLCAweDRhLCAweDQxLCAweDk5LAotCTB4ZjYsIDB4NGIsIDB4ZWIsIDB4MDUsIDB4OWYsIDB4YjQsIDB4YzMsIDB4N2MsIDB4NDMsIDB4ZmQsIDB4MzksIDB4ZmIsCi0JMHhhZCwgMHhiMCwgMHg4YywgMHhjOCwgMHg1ZCwgMHg4NiwgMHhhZSwgMHhiMSwgMHg0YiwgMHhkYiwgMHhmZiwgMHg4NSwKLQkweDM1LCAweGU5LCAweDkzLCAweGY2LCAweDgzLCAweGRlLCAweDgwLCAweGZhLCAweDQ5LCAweDczLCAweGY4LCAweGFhLAotCTB4ZjUsIDB4NWEsIDB4NGUsIDB4YTYsIDB4MWQsIDB4N2YsIDB4YTAsIDB4OGEsIDB4YmMsIDB4YzcsIDB4MzksIDB4M2UsCi0JMHg5MSwgMHg1OSwgMHg2OCwgMHg0NywgMHhmYywgMHg2YywgMHgzZiwgMHhlZiwgMHhjOSwgMHgzMywgMHhiMSwgMHg5MSwKLQkweDc1LCAweDZjLCAweGY3LCAweDkwLCAweDg1LCAweDFhLCAweGI5LCAweGRlLCAweDZjLCAweDk3LCAweDM1LCAweGM3LAotCTB4MjYsIDB4MTYsIDB4M2IsIDB4MzEsIDB4MWYsIDB4YjMsIDB4MjIsIDB4MGIsIDB4MTYsIDB4Y2EsIDB4NTgsIDB4NTQsCi0JMHgyMywgMHgxNiwgMHg3MCwgMHhjMywgMHhhYywgMHg3MSwgMHgxMCwgMHg4YiwgMHhkZiwgMHg2ZSwgMHg2YywgMHhjNCwKLQkweGMyLCAweGVjLCAweGE0LCAweGY1LCAweDJlLCAweGMxLCAweGE1LCAweDRiLCAweDczLCAweDYwLCAweDljLCAweGUzLAotCTB4ZGIsIDB4YWYsIDB4NGIsIDB4NmUsIDB4NjgsIDB4NjEsIDB4NTEsIDB4YzQsIDB4OGMsIDB4ZDMsIDB4NjMsIDB4Y2QsCi0JMHg3MiwgMHhkYSwgMHg0ZSwgMHhhOSwgMHgyNiwgMHhmMSwgMHhiOSwgMHgwMiwgMHg2NSwgMHg4NiwgMHgzMywgMHhmYywKLQkweDJlLCAweDgyLCAweGZhLCAweDE2LCAweGYyLCAweDkzLCAweDQwLCAweGQ1LCAweGFjLCAweDY2LCAweDE3LCAweGI1LAotCTB4ZmIsIDB4NTIsIDB4MjIsIDB4ZDQsIDB4N2MsIDB4NDQsIDB4YzksIDB4ZjksIDB4YzMsIDB4NzMsIDB4OWMsIDB4ZGIsCi0JMHhkNywgMHgxMywgMHhkYSwgMHg5YSwgMHg2MiwgMHg0NywgMHhlZSwgMHhmYSwgMHhlNSwgMHhhYywgMHhlNCwgMHgyMywKLQkweDA1LCAweDdmLCAweGYwLCAweGU3LCAweDcxLCAweGMzLCAweGVkLCAweDNlLCAweDkxLCAweGMwLCAweDY5LCAweDk1LAotCTB4ZjgsIDB4NTMsIDB4NjUsIDB4ZTAsIDB4NzQsIDB4YjcsIDB4OWUsIDB4NTEsIDB4NWMsIDB4NWEsIDB4MDUsIDB4NzEsCi0JMHg1NSwgMHhiMCwgMHhiNCwgMHg4OCwgMHgzMSwgMHg0MSwgMHg2MiwgMHhiNiwgMHhkYiwgMHhmZCwgMHgyZSwgMHhjYiwKLQkweDJjLCAweDhlLCAweDYwLCAweDMyLCAweDdjLCAweDYzLCAweDQzLCAweGIzLCAweDFiLCAweDMxLCAweGIzLCAweDk4LAotCTB4N2UsIDB4NTksIDB4NmUsIDB4ZjgsIDB4ZGMsIDB4NzMsIDB4NDYsIDB4Y2QsIDB4MWEsIDB4MGYsIDB4ZWQsIDB4YmEsCi0JMHhjYywgMHg0MCwgMHhjYiwgMHhhYywgMHhkZSwgMHhkNiwgMHg0YSwgMHg1NCwgMHgzNCwgMHg2MiwgMHhmNSwgMHg4OCwKLQkweGU0LCAweDk2LCAweDdkLCAweDM1LCAweDJhLCAweGZiLCAweGVhLCAweGQyLCAweGNhLCAweGUxLCAweGFhLCAweDVlLAotCTB4M2QsIDB4NWYsIDB4MzUsIDB4N2UsIDB4ODAsIDB4YjYsIDB4YTgsIDB4YmIsIDB4NDUsIDB4MWYsIDB4OWQsIDB4OWEsCi0JMHhlMywgMHgwOCwgMHg0NiwgMHg5YSwgMHgzNSwgMHg5NSwgMHhjNCwgMHhjNywgMHgwYSwgMHg0MywgMHhmMiwgMHg5YiwKLQkweDQwLCAweGNiLCAweGNiLCAweDM2LCAweDdlLCAweDdhLCAweGM5LCAweGM3LCAweDdmLCAweGU2LCAweGZmLCAweGYzLAotCTB4ZWIsIDB4M2MsIDB4NGYsIDB4MWQsIDB4NGIsIDB4OWIsIDB4ZjIsIDB4MmQsIDB4YjksIDB4MjYsIDB4OWMsIDB4Y2MsCi0JMHgxZCwgMHhkMSwgMHgzNSwgMHhlYywgMHg2MSwgMHg3ZSwgMHgyMSwgMHg3MywgMHgwMywgMHg3NywgMHg5MSwgMHgxMSwKLQkweGZlLCAweGNiLCAweDY3LCAweGU5LCAweDE3LCAweDJlLCAweGVhLCAweDc4LCAweDkzLCAweDY2LCAweDEyLCAweGNlLAotCTB4MmQsIDB4NGIsIDB4OGIsIDB4MDQsIDB4ZmQsIDB4NDUsIDB4NGEsIDB4MDAsIDB4MWIsIDB4MWIsIDB4N2YsIDB4NDcsCi0JMHg1YiwgMHgwMCwgMHhmMSwgMHgwYSwgMHgyNCwgMHhhYiwgMHgzNSwgMHg1OCwgMHgzNywgMHg1YywgMHgzMSwgMHhhNSwKLQkweGRlLCAweGJlLCAweGYzLCAweGY1LCAweDkyLCAweDlhLCAweDE5LCAweDk3LCAweDdhLCAweDQzLCAweDkxLCAweDYwLAotCTB4ZmIsIDB4MDYsIDB4ZDYsIDB4ZGIsIDB4Y2MsIDB4N2EsIDB4MzEsIDB4YzYsIDB4YzgsIDB4N2IsIDB4ZTksIDB4OWIsCi0JMHgyZSwgMHhlNiwgMHgzNywgMHhlYiwgMHg5OSwgMHhlYiwgMHg0YywgMHg2OSwgMHhlZiwgMHhhZiwgMHgwYSwgMHhmNSwKLQkweDFlLCAweGQ1LCAweGNjLCAweDcxLCAweGJiLCAweGJkLCAweGI5LCAweGMxLCAweDM1LCAweDQ1LCAweDhlLCAweDAwLAotCTB4N2EsIDB4NTksIDB4NmYsIDB4OWMsIDB4ZjUsIDB4ZGUsIDB4MWEsIDB4YTksIDB4Y2UsIDB4OTcsIDB4NzcsIDB4NjIsCi0JMHhjMywgMHhhYywgMHg1YywgMHhkOSwgMHgxZSwgMHhjZCwgMHhmNCwgMHg0YiwgMHg1OSwgMHg2NywgMHgyNCwgMHhkOCwKLQkweDdjLCAweDFmLCAweGIxLCAweGJhLCAweDRiLCAweGRhLCAweDYwLCAweGRmLCAweGRlLCAweGIyLCAweGUzLCAweDBhLAotCTB4NmUsIDB4N2EsIDB4MjEsIDB4OTEsIDB4OWEsIDB4NzQsIDB4NmEsIDB4NWEsIDB4ZGIsIDB4NGEsIDB4MjUsIDB4YTYsCi0JMHgyYywgMHg5ZSwgMHg2NywgMHhjZiwgMHhlZiwgMHg0ZCwgMHhjNywgMHhiMiwgMHg5ZCwgMHhkOCwgMHhhOCwgMHg0ZCwKLQkweDQ0LCAweDhhLCAweDU5LCAweGVmLCAweDg4LCAweDM2LCAweGUxLCAweDc3LCAweGQxLCAweGQ3LCAweDU2LCAweGIyLAotCTB4ZWQsIDB4MmUsIDB4ZTYsIDB4MTUsIDB4MmEsIDB4N2QsIDB4N2IsIDB4ZGQsIDB4YjAsIDB4ZjAsIDB4MDEsIDB4OWQsCi0JMHg3YywgMHhhMywgMHg4ZSwgMHg3NiwgMHgyOCwgMHhmYSwgMHg5MSwgMHgzNiwgMHg2NSwgMHg5ZSwgMHg0NSwgMHgxNywKLQkweGMxLCAweGYwLCAweGIwLCAweGFkLCAweDBiLCAweGE1LCAweDdhLCAweDVmLCAweDIzLCAweDhkLCAweGE1LCAweDhhLAotCTB4ZmMsIDB4YWIsIDB4NTEsIDB4NjIsIDB4YTIsIDB4NDIsIDB4M2MsIDB4YmUsIDB4MTIsIDB4MWIsIDB4ZWMsIDB4M2MsCi0JMHhhZCwgMHg4ZSwgMHg1YywgMHhjNywgMHhiMiwgMHhmNiwgMHhlOCwgMHg5NiwgMHhmNSwgMHhhYywgMHgzZSwgMHgwMywKLQkweGZiLCAweGY0LCAweDYwLCAweDVjLCAweDZjLCAweGYzLCAweDk3LCAweGZhLCAweDgyLCAweDZiLCAweDVkLCAweDA4LAotCTB4MzIsIDB4ZTEsIDB4ZmYsIDB4MTQsIDB4YzYsIDB4NjksIDB4MmYsIDB4MjUsIDB4OWEsIDB4ZjgsIDB4YTAsIDB4MDIsCi0JMHg3ZiwgMHhjOCwgMHgxOSwgMHgyOCwgMHg1MywgMHgyYywgMHhiOCwgMHhlNywgMHhjZSwgMHg1YywgMHgzMywgMHg5MywKLQkweDdhLCAweGFhLCAweGI4LCAweDUxLCAweGMxLCAweDA3LCAweDczLCAweDE0LCAweDRjLCAweGNjLCAweDA5LCAweGY5LAotCTB4MDcsIDB4OTUsIDB4NzIsIDB4ZTIsIDB4NmQsIDB4YTgsIDB4YWQsIDB4NDUsIDB4MzEsIDB4OGYsIDB4YjIsIDB4NmUsCi0JMHhhYywgMHhkMSwgMHhjMSwgMHg3YywgMHg1YSwgMHhhOSwgMHgyNCwgMHgxNiwgMHhjYywgMHgwYSwgMHgwOCwgMHgxZCwKLQkweDcwLCAweDI2LCAweDQzLCAweGZlLCAweGNkLCAweGZjLCAweDc2LCAweDhjLCAweDI4LCAweDE4LCAweGQxLCAweDgyLAotCTB4MzEsIDB4ZDgsIDB4ZjIsIDB4ZDksIDB4NzYsIDB4NDQsIDB4YzEsIDB4NzUsIDB4MjEsIDB4Y2IsIDB4M2EsIDB4MTYsCi0JMHg2OSwgMHhmMCwgMHgxZSwgMHhjMywgMHgyZiwgMHgyZCwgMHg1OSwgMHg0YiwgMHhmMSwgMHg4NywgMHhjZSwgMHhlNywKLQkweDA2LCAweDI4LCAweDRkLCAweDZhLCAweGIxLCAweDE2LCAweDY1LCAweGJiLCAweDUzLCAweDM4LCAweGM1LCAweGFhLAotCTB4YWMsIDB4YzQsIDB4YzgsIDB4NDIsIDB4N2YsIDB4MGIsIDB4YjEsIDB4ZDIsIDB4YjIsIDB4N2UsIDB4YTksIDB4ZTcsCi0JMHg2NCwgMHg3OSwgMHhhMywgMHhjMiwgMHhjZCwgMHg2NiwgMHg2MCwgMHg0YywgMHgwYiwgMHhiNiwgMHg4ZSwgMHg1MywKLQkweDA3LCAweDdlLCAweGZhLCAweDYwLCAweDJkLCAweGU3LCAweDdkLCAweGQyLCAweDE1LCAweGY0LCAweDRlLCAweDJhLAotCTB4MGIsIDB4Y2YsIDB4YWEsIDB4OTgsIDB4YmQsIDB4ZWEsIDB4MzEsIDB4YTUsIDB4YTEsIDB4YTMsIDB4MDQsIDB4NWEsCi0JMHg2YywgMHg1NCwgMHhiOSwgMHg4MiwgMHgzYSwgMHgzMSwgMHhmZCwgMHgxZSwgMHgwNCwgMHhiZCwgMHgyYiwgMHg2MSwKLQkweGM3LCAweDZkLCAweGRjLCAweDllLCAweDcwLCAweGM2LCAweGNlLCAweGEwLCAweDllLCAweGZlLCAweGEwLCAweGI1LAotCTB4ZGYsIDB4NGYsIDB4NmUsIDB4MDcsIDB4N2MsIDB4OTYsIDB4ODQsIDB4NWYsIDB4ZmEsIDB4NWEsIDB4ODMsIDB4ZjgsCi0JMHg1ZiwgMHg1OCwgMHhkNiwgMHgwMywgMHhlYywgMHhlYiwgMHgxNiwgMHhmNiwgMHg3NSwgMHg3NSwgMHhlNCwgMHg3ZCwKLQkweGViLCAweDE3LCAweGI2LCAweGNjLCAweDliLCAweDMxLCAweGE4LCAweDVkLCAweDJhLCAweGY3LCAweDNkLCAweDBiLAotCTB4ZDMsIDB4NDUsIDB4YWUsIDB4MGIsIDB4YjcsIDB4NGUsIDB4NjcsIDB4ZWUsIDB4MTEsIDB4MTUsIDB4MmMsIDB4NzksCi0JMHg4NCwgMHhmOSwgMHhiOSwgMHhjOCwgMHg2MywgMHg1YywgMHg1MSwgMHgyZiwgMHg4ZCwgMHhjZCwgMHgwZSwgMHgzMCwKLQkweGU2LCAweGY5LCAweGUzLCAweDhhLCAweDVhLCAweDU3LCAweDA2LCAweDJmLCAweGRjLCAweDlhLCAweDg1LCAweDA3LAotCTB4YzksIDB4MjMsIDB4NjIsIDB4ZDMsIDB4MmIsIDB4ZjEsIDB4OTAsIDB4ZWUsIDB4NDYsIDB4NzksIDB4NDgsIDB4YmQsCi0JMHhkMiwgMHhjMSwgMHgzOSwgMHhkOSwgMHgxNywgMHg5MSwgMHg2YiwgMHgxNywgMHhjNiwgMHhhNywgMHgzYiwgMHhkMCwKLQkweDQ5LCAweDdlLCAweGUxLCAweDBkLCAweGE5LCAweGI1LCAweDcyLCAweGRmLCAweGRkLCAweDI0LCAweGQ3LCAweGVjLAotCTB4ZmYsIDB4MTUsIDB4MGEsIDB4MWUsIDB4YTAsIDB4NTUsIDB4YTgsIDB4YTEsIDB4MmUsIDB4YmYsIDB4ZGMsIDB4NmYsCi0JMHhkNSwgMHhlNSwgMHg1YSwgMHg0MSwgMHg3ZCwgMHhjNCwgMHhjOSwgMHg3OSwgMHhiMSwgMHhlMCwgMHg2MCwgMHhkZiwKLQkweDRiLCAweDQzLCAweGJjLCAweDFmLCAweDkxLCAweGRmLCAweGIxLCAweDA3LCAweDM4LCAweGVlLCAweGQ4LCAweDZlLAotCTB4NDUsIDB4YjAsIDB4ZTcsIDB4YzcsIDB4ZDYsIDB4ZjMsIDB4OGMsIDB4MmQsIDB4NWUsIDB4M2UsIDB4N2YsIDB4ODgsCi0JMHg2ZCwgMHgxZiwgMHg4ZCwgMHgzYywgMHg2YiwgMHhkNSwgMHgxMiwgMHg3MywgMHg4ZiwgMHgzNSwgMHgwNywgMHgzMCwKLQkweDYzLCAweDRlLCAweDFkLCAweDI2LCAweGVmLCAweDk2LCAweDMxLCAweDJiLCAweDI4LCAweGQ3LCAweGNhLCAweDVkLAotCTB4OTIsIDB4ZTcsIDB4NTUsIDB4NjgsIDB4NTcsIDB4ZTAsIDB4ZDYsIDB4YmIsIDB4NzIsIDB4ZjcsIDB4NGEsIDB4MjgsCi0JMHgyZiwgMHg0YywgMHhkYywgMHgyZCwgMHg5OSwgMHg1MywgMHg4ZCwgMHg0MCwgMHhmZSwgMHhkZSwgMHhjMiwgMHg5MCwKLQkweGIzLCAweGFkLCAweDVjLCAweGQxLCAweGJjLCAweGI3LCAweDJiLCAweGYyLCAweGZjLCAweDM3LCAweGI0LCAweDcxLAotCTB4Y2IsIDB4N2EsIDB4OTAsIDB4ZjMsIDB4MzUsIDB4MmIsIDB4ZTIsIDB4YzEsIDB4MjksIDB4YjYsIDB4ZDMsIDB4NDUsCi0JMHhmZCwgMHgyZCwgMHgzOSwgMHgzZiwgMHg1ZiwgMHg4NSwgMHhmYSwgMHhiZiwgMHhiNiwgMHgwMiwgMHg3ZiwgMHgyMSwKLQkweDc1LCAweDQ1LCAweGM2LCAweGNjLCAweGQ2LCAweDViLCAweDk1LCAweGU3LCAweDljLCAweDkyLCAweDMzLCAweGFjLAotCTB4OGUsIDB4ZDgsIDB4M2EsIDB4NjMsIDB4ZDksIDB4NWEsIDB4OTcsIDB4NWMsIDB4N2IsIDB4YTMsIDB4YWYsIDB4OWYsCi0JMHg1ZiwgMHg3ZiwgMHgzOSwgMHg2ZCwgMHhjNywgMHhhOCwgMHgwNSwgMHgzNywgMHg3YSwgMHgzMSwgMHg2OSwgMHg1NSwKLQkweDM1LCAweDk5LCAweGRlLCAweDYyLCAweDQ4LCAweGFjLCAweGFhLCAweDBmLCAweDNmLCAweDQ1LCAweGI5LCAweGFmLAotCTB4ZTksIDB4YjksIDB4MzgsIDB4YjYsIDB4NDcsIDB4MGYsIDB4YTYsIDB4NGQsIDB4ZmEsIDB4NDMsIDB4OWMsIDB4MzksCi0JMHg1ZiwgMHg4YiwgMHhiZCwgMHg1NiwgMHhiNCwgMHg4NywgMHhmMywgMHgzMCwgMHgwMywgMHhjNSwgMHg0ZCwgMHhjMSwKLQkweDllLCAweDZiLCAweDk4LCAweDAzLCAweDM5LCAweGEyLCAweDEyLCAweGZmLCAweDY0LCAweDdlLCAweGVjLCAweDMyLAotCTB4NmMsIDB4YWIsIDB4MDQsIDB4MGIsIDB4ZDksIDB4YzcsIDB4NDgsIDB4ZDMsIDB4MWYsIDB4OGIsIDB4MWQsIDB4MjIsCi0JMHg0NywgMHhhYywgMHgzMywgMHhkOCwgMHgxMywgMHhjMywgMHgxZiwgMHgyYiwgMHgwYiwgMHg0NiwgMHg2YSwgMHhjNCwKLQkweDFkLCAweDg2LCAweGZiLCAweGE2LCAweDc4LCAweDU2LCAweDI1LCAweGY3LCAweDI4LCAweGYyLCAweDc2LCAweDQ1LAotCTB4NmIsIDB4ZjgsIDB4OTEsIDB4ZTcsIDB4Y2UsIDB4OWIsIDB4NTYsIDB4NjQsIDB4Y2YsIDB4YWYsIDB4MjksIDB4MjEsCi0JMHhhZCwgMHgxNywgMHg0MSwgMHhiZCwgMHg0ZSwgMHg3MCwgMHg5YywgMHg4OCwgMHhlYywgMHg5NSwgMHhmMSwgMHg5OSwKLQkweGNkLCAweDVlLCAweDNiLCAweDg3LCAweDVlLCAweGZiLCAweDg1LCAweDdiLCAweGI0LCAweGEwLCAweGZlLCAweDI2LAotCTB4NWIsIDB4M2MsIDB4NGMsIDB4OGUsIDB4NjMsIDB4ZGEsIDB4OWUsIDB4MjEsIDB4YmUsIDB4M2UsIDB4MTUsIDB4NDcsCi0JMHgyNSwgMHhhZSwgMHg4OCwgMHg0YywgMHhjMSwgMHhkMCwgMHgyYiwgMHhkMSwgMHhiNywgMHhhMywgMHgwMywgMHg4MSwKLQkweDlhLCAweDFjLCAweDY2LCAweGI5LCAweDhjLCAweGI5LCAweGQ4LCAweDkzLCAweGRlLCAweGVjLCAweGNhLCAweGYxLAotCTB4ZjIsIDB4NGUsIDB4M2MsIDB4NDUsIDB4NGMsIDB4ZGIsIDB4YjgsIDB4NjMsIDB4YTIsIDB4YjYsIDB4OGEsIDB4YmEsCi0JMHhlYSwgMHhkMCwgMHgxYiwgMHhmNCwgMHhkMywgMHhiOCwgMHg4MywgMHg3ZSwgMHgyZSwgMHg2NSwgMHgyNywgMHhiZSwKLQkweDUyLCAweDA1LCAweDI5LCAweDY3LCAweGUxLCAweDQ4LCAweGE0LCAweDA2LCAweGM5LCAweDFkLCAweDlmLCAweDQ2LAotCTB4NjYsIDB4YmEsIDB4ZGMsIDB4OTcsIDB4N2IsIDB4NmUsIDB4ZTIsIDB4YjAsIDB4MGYsIDB4ZWIsIDB4NzcsIDB4ZjgsCi0JMHg5MSwgMHhmMSwgMHhjOSwgMHg1YSwgMHg5OSwgMHhhYywgMHg1NywgMHgwYSwgMHgzNiwgMHhiZiwgMHg2MSwgMHg5OSwKLQkweDVlLCAweGU5LCAweDg3LCAweGM0LCAweGY3LCAweDUwLCAweDczLCAweDM3LCAweDYzLCAweDlhLCAweGQ3LCAweDg4LAotCTB4MTEsIDB4M2YsIDB4YzgsIDB4M2QsIDB4NDYsIDB4N2YsIDB4NjIsIDB4NjUsIDB4NmMsIDB4MGUsIDB4ZWYsIDB4MzYsCi0JMHg4NSwgMHgyMywgMHgzZCwgMHhhYiwgMHgzNSwgMHhjNCwgMHg4ZSwgMHhiMCwgMHgwNywgMHhmMSwgMHhlYywgMHg3ZiwKLQkweGQyLCAweDQ3LCAweDljLCAweGI4LCAweDQ3LCAweGZiLCAweGI4LCAweGZlLCAweDdiLCAweGQ4LCAweDNmLCAweGI4LAotCTB4OWQsIDB4YzQsIDB4NzYsIDB4ZjIsIDB4NDgsIDB4NjIsIDB4NzAsIDB4YzgsIDB4MjUsIDB4MzEsIDB4YmYsIDB4ODgsCi0JMHhlZCwgMHg2ZiwgMHhkOSwgMHhhMSwgMHhhMCwgMHg4NSwgMHgxOCwgMHhiOCwgMHg5OSwgMHgzNiwgMHhmNSwgMHg0MCwKLQkweDA4LCAweGNlLCAweGQ2LCAweDM5LCAweGU0LCAweDM1LCAweGY4LCAweDAyLCAweDczLCAweDFhLCAweDFmLCAweDM2LAotCTB4MGQsIDB4NjMsIDB4NmUsIDB4NTYsIDB4MWIsIDB4YWYsIDB4ZjUsIDB4YTAsIDB4YzcsIDB4MjUsIDB4ZGMsIDB4ZDYsCi0JMHgyNCwgMHhkZSwgMHhlNywgMHhlNCwgMHhlYywgMHhiYiwgMHg0NCwgMHg0ZSwgMHgwZCwgMHgxZSwgMHhjZCwgMHhjYiwKLQkweGQ5LCAweDQ5LCAweDM5LCAweDlmLCAweDllLCAweDA1LCAweDY3LCAweGM1LCAweGE3LCAweDY1LCAweDJlLCAweDE3LAotCTB4ZDIsIDB4YmYsIDB4NmEsIDB4OTAsIDB4YjIsIDB4ZTMsIDB4MDQsIDB4NzksIDB4ZTAsIDB4NjcsIDB4YTAsIDB4NjgsCi0JMHgzMywgMHgyNSwgMHg2NywgMHg1OCwgMHg2YSwgMHhkNywgMHhiYiwgMHhhNSwgMHg3MSwgMHhmYywgMHg0YywgMHgxNSwKLQkweGMxLCAweGY1LCAweGY0LCAweGFjLCAweDcxLCAweDNhLCAweDcyLCAweDQxLCAweDI3LCAweGRlLCAweDQyLCAweDVmLAotCTB4ZmYsIDB4ZWEsIDB4NDIsIDB4MWIsIDB4MWMsIDB4MzMsIDB4ZWQsIDB4Y2IsIDB4MWQsIDB4OTUsIDB4YmUsIDB4M2QsCi0JMHg2ZSwgMHhiNSwgMHg3YSwgMHg3MywgMHg3MywgMHg5NSwgMHhkOCwgMHgxMSwgMHgwYywgMHhiNCwgMHg1MSwgMHhlNywKLQkweDViLCAweGY0LCAweGZhLCAweGI2LCAweDM0LCAweDI5LCAweGNjLCAweDAzLCAweDczLCAweDNlLCAweDRkLCAweGRmLAotCTB4ZjcsIDB4NjMsIDB4ZjMsIDB4MzAsIDB4NmUsIDB4MTgsIDB4ZDEsIDB4MjQsIDB4YzYsIDB4OGMsIDB4MDcsIDB4Y2IsCi0JMHgyZiwgMHg5YSwgMHg4MywgMHhhYiwgMHhhOSwgMHhlZiwgMHg2YSwgMHhjYSwgMHgyNywgMHhiZiwgMHg5YiwgMHg1NSwKLQkweGU4LCAweDNiLCAweGZiLCAweDQxLCAweGZjLCAweDdlLCAweDc0LCAweDg3LCAweGU0LCAweGMyLCAweDc1LCAweGU0LAotCTB4NTgsIDB4OTYsIDB4NzUsIDB4OTAsIDB4NjMsIDB4NjgsIDB4OWUsIDB4ZDUsIDB4YjAsIDB4ZTYsIDB4YjgsIDB4YTMsCi0JMHgxNiwgMHg5MywgMHhkMywgMHhhZiwgMHhjNCwgMHhjZSwgMHg2MSwgMHg4OSwgMHgzZiwgMHgwMSwgMHhkNiwgMHg2ZCwKLQkweGFhLCAweGNjLCAweDcxLCAweDFiLCAweGI4LCAweDZlLCAweGU1LCAweDU4LCAweDBmLCAweGU3LCAweGM3LCAweGUxLAotCTB4ZDIsIDB4YzQsIDB4MjYsIDB4OWEsIDB4YjAsIDB4NjcsIDB4ZTAsIDB4ZmMsIDB4ZjMsIDB4ZTAsIDB4MmQsIDB4ZGEsCi0JMHg3OCwgMHhkMCwgMHhmNSwgMHgwNywgMHhiNiwgMHgzMiwgMHhjZSwgMHhlZiwgMHgwYSwgMHg4OSwgMHgzMywgMHgxNywKLQkweGU5LCAweDc1LCAweGRkLCAweGYwLCAweDY5LCAweDdlLCAweDU3LCAweDMzLCAweDJlLCAweGU2LCAweGZhLCAweGJkLAotCTB4NmUsIDB4ZjgsIDB4NWYsIDB4NzksIDB4MmQsIDB4N2QsIDB4YjcsIDB4YjAsIDB4Y2UsIDB4Y2UsIDB4NjMsIDB4OGEsCi0JMHgxOCwgMHhkZiwgMHgwNCwgMHg5YiwgMHhjNSwgMHhhZSwgMHg2YiwgMHgyNCwgMHg4ZiwgMHg2YiwgMHhjZSwgMHg0MCwKLQkweDYyLCAweGIzLCAweGQ4LCAweGYyLCAweDgwLCAweGQ4LCAweDcyLCAweGQ4LCAweGExLCAweDAwLCAweDQzLCAweGU3LAotCTB4NmQsIDB4YjksIDB4MTMsIDB4M2YsIDB4ZDAsIDB4MjYsIDB4ZWUsIDB4MmEsIDB4YzYsIDB4YzQsIDB4MTcsIDB4NjUsCi0JMHhhZCwgMHhiOCwgMHgyMywgMHg4MiwgMHg2MywgMHg4YiwgMHg4OCwgMHgxMywgMHg2ZiwgMHhlOSwgMHgwNSwgMHhiZCwKLQkweDhhLCAweDNlLCAweDA1LCAweDQzLCAweDE1LCAweDE0LCAweGQzLCAweDY2LCAweDM2LCAweDUwLCAweDhmLCAweDQ1LAotCTB4YWEsIDB4OWYsIDB4ZWQsIDB4NWUsIDB4OGEsIDB4YTUsIDB4ZDIsIDB4N2YsIDB4MWQsIDB4N2IsIDB4MTIsIDB4MTMsCi0JMHgwZiwgMHgxNywgMHhlMywgMHg3ZiwgMHg0OSwgMHg1ZSwgMHhmNCwgMHhjNiwgMHgwOSwgMHhjYSwgMHhiOSwgMHg0NSwKLQkweDE3LCAweGZkLCAweDg5LCAweGVlLCAweDBhLCAweDMyLCAweGFlLCAweDQ0LCAweGVmLCAweDhlLCAweDQyLCAweDVkLAotCTB4MDUsIDB4MmYsIDB4ODYsIDB4ZmMsIDB4ZjksIDB4YjUsIDB4ZDgsIDB4MmIsIDB4OTEsIDB4MWMsIDB4OWUsIDB4MzgsCi0JMHg0NiwgMHgyZSwgMHg0NCwgMHg3ZCwgMHg0ZSwgMHhhYywgMHhmMSwgMHhiMywgMHgyZiwgMHhhNywgMHgyMywgMHgwNSwKLQkweGZiLCAweDExLCAweDljLCAweDk4LCAweDJhLCAweDQzLCAweGZjLCAweDAzLCAweDRhLCAweGM1LCAweDRjLCAweGFjLAotCTB4YWIsIDB4YTAsIDB4MWYsIDB4NjQsIDB4NDMsIDB4ODgsIDB4OTcsIDB4MTksIDB4MzUsIDB4NDgsIDB4MGMsIDB4ZDMsCi0JMHhjZiwgMHg0NywgMHg4YSwgMHhlMCwgMHhiYywgMHg1ZSwgMHhlYywgMHg1ZSwgMHhmOCwgMHg5OCwgMHhmMywgMHhhNiwKLQkweGUzLCAweDg5LCAweDIyLCAweDdjLCAweDQ5LCAweDNmLCAweDY3LCAweDA5LCAweDQ2LCAweDFmLCAweGQzLCAweDcwLAotCTB4NTUsIDB4MTEsIDB4ZjUsIDB4MzQsIDB4MzMsIDB4MTIsIDB4OGEsIDB4YWQsIDB4MjQsIDB4M2YsIDB4MzgsIDB4ZDIsCi0JMHhlOCwgMHhiYywgMHhlOSwgMHg2NCwgMHhmNiwgMHhiNywgMHhlNCwgMHhiZSwgMHg5NywgMHg4ZSwgMHg0NSwgMHhmNCwKLQkweDgxLCAweDE3LCAweDE3LCAweDg3LCAweDcyLCAweDczLCAweDRlLCAweGRlLCAweDlmLCAweGY3LCAweDA3LCAweDY5LAotCTB4ZGYsIDB4YjIsIDB4NDIsIDB4MTEsIDB4MWYsIDB4ZWQsIDB4ZTIsIDB4YzIsIDB4MTgsIDB4ZGUsIDB4ZDYsIDB4MGEsCi0JMHg2MywgMHhmMCwgMHgzMSwgMHhiNiwgMHgyZiwgMHgyMSwgMHhiNywgMHgxNiwgMHhkZSwgMHhlZiwgMHg2NiwgMHg5ZSwKLQkweGViLCAweDY0LCAweGJlLCAweGQwLCAweDA2LCAweGUxLCAweGEzLCAweDQ3LCAweGM5LCAweGFiLCAweGY2LCAweDI3LAotCTB4ODAsIDB4NzcsIDB4ZDMsIDB4MTYsIDB4MTYsIDB4NDQsIDB4Y2EsIDB4ODksIDB4NzUsIDB4M2QsIDB4OTQsIDB4MmQsCi0JMHhlYiwgMHhhYiwgMHgwNywgMHg5NCwgMHg2MSwgMHhlNiwgMHhjMiwgMHg5MywgMHhjZSwgMHg5MiwgMHg5OCwgMHhjYSwKLQkweGRjLCAweDc3LCAweDVmLCAweDM2LCAweGU0LCAweDlmLCAweDYwLCAweDFlLCAweGVjLCAweDY2LCAweDJlLCAweDRlLAotCTB4Y2QsIDB4MjksIDB4ZmIsIDB4OTksIDB4MDcsIDB4ZWYsIDB4Y2UsIDB4ZTcsIDB4YzEsIDB4ZmIsIDB4YjIsIDB4MWUsCi0JMHg2NCwgMHg2OSwgMHhiYywgMHg1YiwgMHgyMiwgMHhjYywgMHhiZiwgMHhlZCwgMHg3NSwgMHgwNCwgMHgwZiwgMHhjNiwKLQkweGQyLCAweDJhLCAweDRlLCAweDQ1LCAweDNlLCAweGIwLCAweGM2LCAweGFiLCAweDY0LCAweGNjLCAweDNlLCAweDNjLAotCTB4OTMsIDB4YTgsIDB4YzYsIDB4ODEsIDB4ODEsIDB4M2EsIDB4OWMsIDB4Y2QsIDB4M2UsIDB4NTIsIDB4ODQsIDB4ZDIsCi0JMHgyYiwgMHg3MSwgMHg2NiwgMHhhOCwgMHgwMiwgMHgyMywgMHgwMywgMHg5YiwgMHhmOSwgMHhiYiwgMHgxMSwgMHgxZiwKLQkweDBjLCAweGQ5LCAweDM5LCAweDM4LCAweGIxLCAweDU5LCAweGZhLCAweDc3LCAweDQwLCAweDk5LCAweGIwLCAweDczLAotCTB4NzAsIDB4MzMsIDB4YzYsIDB4ZGMsIDB4YmIsIDB4YjksIDB4MjcsIDB4OWYsIDB4N2IsIDB4OGYsIDB4MzMsIDB4ZjcsCi0JMHgzZSwgMHhjMiwgMHgzNiwgMHg5ZiwgMHhjYiwgMHhiNywgMHg3OSwgMHhjOCwgMHhmZSwgMHg5NiwgMHhiZSwgMHg0OCwKLQkweGRkLCAweGE5LCAweGY1LCAweDlhLCAweDU5LCAweDBmLCAweDE4LCAweDRlLCAweDg0LCAweGMyLCAweDg1LCAweGJhLAotCTB4Y2YsIDB4YjEsIDB4ZGUsIDB4OTEsIDB4ZjMsIDB4ZjUsIDB4NzIsIDB4MzksIDB4MzUsIDB4NzksIDB4MzEsIDB4MzYsCi0JMHgyNCwgMHhlYywgMHg3NSwgMHgxZiwgMHhlYSwgMHgyMywgMHg0YywgMHg1ZCwgMHg0OCwgMHg4ZSwgMHg0OSwgMHg3ZSwKLQkweDllLCAweGZkLCAweDE2LCAweGY5LCAweGZjLCAweDllLCAweDIyLCAweDU0LCAweDU0LCAweDYxLCAweDYxLCAweDQ2LAotCTB4ZDYsIDB4YjMsIDB4NGIsIDB4OTgsIDB4ZmIsIDB4MTUsIDB4ZjQsIDB4MWYsIDB4NDcsIDB4MzIsIDB4YjUsIDB4OGEsCi0JMHhmZSwgMHgwNSwgMHhiNywgMHhjNywgMHhjOCwgMHhmZSwgMHg1NSwgMHg4MiwgMHhmMywgMHhmMCwgMHg0NCwgMHg2OCwKLQkweGJjLCAweGFkLCAweDFjLCAweDk1LCAweDU4LCAweDE1LCAweGIxLCAweGY5LCAweDIzLCAweDc5LCAweDYwLCAweGIwLAotCTB4NzksIDB4MDksIDB4ZTMsIDB4OWMsIDB4MjMsIDB4MTQsIDB4NjQsIDB4Y2MsIDB4MDIsIDB4NDIsIDB4MjMsIDB4Y2MsCi0JMHg2ZiwgMHhiMiwgMHg5NSwgMHhiOCwgMHg4NywgMHg3OSwgMHhhNiwgMHg1YSwgMHgxNSwgMHg0NywgMHhjZiwgMHhmOSwKLQkweDM1LCAweDRlLCAweGY5LCAweDVlLCAweDg1LCAweGVlLCAweDMxLCAweDkxLCAweDE3LCAweDY3LCAweGVlLCAweDUwLAotCTB4ODYsIDB4NDUsIDB4YjksIDB4MzUsIDB4MTksIDB4YjcsIDB4OWIsIDB4YjIsIDB4ZGQsIDB4YTEsIDB4ZjEsIDB4MzAsCi0JMHg1ZCwgMHg1MCwgMHhkZiwgMHhjNywgMHgxYiwgMHg4NywgMHgxMiwgMHgwYSwgMHgxNiwgMHg2OCwgMHgyZSwgMHhhYywKLQkweGY0LCAweDU2LCAweDYyLCAweDgxLCAweGZlLCAweDNiLCAweDZiLCAweGQxLCAweDMyLCAweDc5LCAweDc2LCAweDYxLAotCTB4YWQsIDB4YjQsIDB4OTgsIDB4ZWQsIDB4ZmUsIDB4OTIsIDB4ZjksIDB4YzIsIDB4YjAsIDB4NzgsIDB4NjcsIDB4MzYsCi0JMHg3NywgMHhkZiwgMHhjYywgMHg1MiwgMHgzNiwgMHhlNSwgMHg2ZSwgMHhhMCwgMHhkYywgMHhmYiwgMHhiYywgMHg3NiwKLQkweDJlLCAweDlmLCAweDJmLCAweDM3LCAweDFlLCAweDc2LCAweDMwLCAweDNlLCAweDQ5LCAweGQ5LCAweDE2LCAweGNhLAotCTB4YmQsIDB4ODcsIDB4NzIsIDB4N2IsIDB4YmMsIDB4ZDIsIDB4YmYsIDB4ZGYsIDB4NTksIDB4ZjcsIDB4MmQsIDB4OTMsCi0JMHg2NywgMHhiOSwgMHg3NSwgMHg5MSwgMHg5YywgMHhkYywgMHhhYywgMHhjOCwgMHhkNSwgMHg4NywgMHhmMywgMHg2ZCwKLQkweDRkLCAweDI0LCAweDk4LCAweGVjLCAweDExLCAweGIzLCAweDU3LCAweDQ0LCAweDQzLCAweDgxLCAweDJlLCAweDdiLAotCTB4NGQsIDB4M2MsIDB4ODAsIDB4OTUsIDB4ZDksIDB4MDAsIDB4ZWUsIDB4YTUsIDB4ZGUsIDB4MzMsIDB4Y2UsIDB4YzIsCi0JMHg5OCwgMHhlYywgMHgzZSwgMHg5OSwgMHg5MiwgMHgxNywgMHgyYywgMHg2NCwgMHhiOSwgMHhlZSwgMHgzYywgMHg3ZSwKLQkweGI3LCAweDY0LCAweGM1LCAweGZlLCAweDI2LCAweGYzLCAweGY5LCAweGE0LCAweGM0LCAweGIxLCAweGJhLCAweDNjLAotCTB4MTYsIDB4MzgsIDB4ZjEsIDB4NjQsIDB4ZTIsIDB4MzcsIDB4ZTcsIDB4ZmEsIDB4NTIsIDB4MTIsIDB4OTcsIDB4NjUsCi0JMHhhZCwgMHgyNywgMHg4MCwgMHg3NCwgMHhmNiwgMHgyYSwgMHhkNCwgMHhmNywgMHg3YiwgMHhiMSwgMHg0MiwgMHg5ZiwKLQkweDQ2LCAweDljLCAweGY4LCAweGQ2LCAweDc5LCAweDdiLCAweGRjLCAweGM3LCAweDc2LCAweGUwLCAweGIyLCAweGM1LAotCTB4MmIsIDB4NGYsIDB4NjYsIDB4MWIsIDB4YmMsIDB4ZDUsIDB4YzQsIDB4YmEsIDB4ODMsIDB4MTcsIDB4YzUsIDB4ZDcsCi0JMHgxOSwgMHhiMSwgMHgzMiwgMHgyMywgMHhkNCwgMHhmNiwgMHgwMiwgMHhlNywgMHhiZCwgMHhjNCwgMHhjZSwgMHgxYiwKLQkweGQ2LCAweDI5LCAweDE5LCAweGNlLCAweGZkLCAweGUzLCAweGY5LCAweGI5LCAweGRmLCAweDlmLCAweDQ1LCAweDcxLAotCTB4MGUsIDB4ZGIsIDB4YWUsIDB4YzIsIDB4YWMsIDB4N2UsIDB4ZjksIDB4ZjYsIDB4ZTIsIDB4ZWQsIDB4NjgsIDB4MjksCi0JMHhlZiwgMHg1ZCwgMHg4NSwgMHg5OSwgMHg4MywgMHg1NywgMHgxNywgMHhlNywgMHhmNiwgMHhjMiwgMHg2NCwgMHg3ZCwKLQkweGUxLCAweGQyLCAweDFjLCAweDJhLCAweGQ4LCAweDYzLCAweGUyLCAweDNkLCAweGRhLCAweDQ0LCAweDFkLCAweDc1LAotCTB4MjYsIDB4MTgsIDB4MmIsIDB4ZmQsIDB4ZGEsIDB4NzQsIDB4YmUsIDB4NWYsIDB4NGYsIDB4YjAsIDB4NWYsIDB4NzEsCi0JMHg5NywgMHhhYywgMHhmZiwgMHg0YSwgMHhiZiwgMHg5NCwgMHg1OCwgMHg4NSwgMHg1MSwgMHg4NywgMHgwZiwgMHg5MiwKLQkweGYwLCAweDdhLCAweDhkLCAweDUwLCAweGZjLCAweDI1LCAweGZhLCAweGNhLCAweDA4LCAweGZiLCAweDVhLCAweDg1LAotCTB4MWUsIDB4MjUsIDB4NmIsIDB4ZWYsIDB4ZmQsIDB4MWMsIDB4NjAsIDB4OTksIDB4YTksIDB4N2MsIDB4NDAsIDB4ZmEsCi0JMHhlOSwgMHhhNCwgMHhjZCwgMHhmZCwgMHgyNSwgMHg3MSwgMHg1OCwgMHgyNywgMHgwZSwgMHg4YiwgMHhmYywgMHg3NywKLQkweGM4LCAweDc5LCAweGJiLCAweDI5LCAweDdmLCAweDA5LCAweGU3LCAweGNmLCAweDJkLCAweDdiLCAweDU0LCAweDY2LAotCTB4YTksIDB4ZDEsIDB4NjYsIDB4NzMsIDB4NmUsIDB4MjcsIDB4N2QsIDB4NzYsIDB4MDEsIDB4NmQsIDB4NmEsIDB4N2YsCi0JMHg0NiwgMHhjMSwgMHgxMCwgMHg5NSwgMHg3ZSwgMHgzNCwgMHgyZCwgMHg2YiwgMHhkNywgMHg3ZSwgMHhlYywgMHhjYiwKLQkweGI4LCAweGYwLCAweDVjLCAweGJhLCAweDE2LCAweGMzLCAweDk5LCAweDIyLCAweDFjLCAweDRhLCAweDVmLCAweDg5LAotCTB4ZGQsIDB4MTksIDB4MjIsIDB4NjcsIDB4ZmEsIDB4MmEsIDB4MGMsIDB4NjYsIDB4ZGMsIDB4NzgsIDB4MjMsIDB4NGQsCi0JMHgzZCwgMHg2NSwgMHg0YSwgMHhmMCwgMHhkMywgMHhmNCwgMHhhNywgMHhmMCwgMHg0YywgMHhhNiwgMHgxNCwgMHhhZiwKLQkweGE3LCAweGFmLCAweGM2LCAweDgxLCAweDRjLCAweDE5LCAweDVlLCAweDRlLCAweDkzLCAweDE3LCAweDY3LCAweDNjLAotCTB4NzgsIDB4MjksIDB4MWQsIDB4YzAsIDB4NjgsIDB4YTYsIDB4MWMsIDB4MmYsIDB4YTYsIDB4ODMsIDB4MTgsIDB4YzksCi0JMHg1NCwgMHhlMCwgMHgwNywgMHhlOSwgMHg2YiwgMHg5MCwgMHhjZCwgMHg1NCwgMHhlMiwgMHg4NSwgMHg3NCwgMHgzZCwKLQkweDllLCAweGEwLCAweDBmLCAweDNjLCAweDlmLCAweGQ2LCAweGYwLCAweDc4LCAweGE2LCAweDBhLCAweGM3LCAweGQyLAotCTB4MjEsIDB4YjYsIDB4ZWIsIDB4YzMsIDB4ZDEsIDB4ODEsIDB4MzAsIDB4ZjYsIDB4MGQsIDB4ZDUsIDB4ZTAsIDB4YjksCi0JMHg4MSwgMHhkOSwgMHgxOCwgMHgxZSwgMHhmMiwgMHhlMywgMHhkMCwgMHg0MCwgMHgyMywgMHg3NiwgMHgwZiwgMHg4ZCwKLQkweGRiLCAweGZhLCAweDM5LCAweDkyLCAweDY4LCAweDM5LCAweGFmLCAweGM3LCAweDBkLCAweDFmLCAweDMzLCAweGRmLAotCTB4YWYsIDB4MjQsIDB4NDQsIDB4NmYsIDB4NmUsIDB4YjMsIDB4OGEsIDB4NzMsIDB4ZjQsIDB4NjQsIDB4ZDYsIDB4OWUsCi0JMHg3NywgMHg2OCwgMHhmZCwgMHg2ZCwgMHhmNCwgMHgzMywgMHgwYiwgMHhkZCwgMHhmYSwgMHg5NSwgMHhjYywgMHg0NywKLQkweDdiLCAweDI0LCAweDFlLCAweGQxLCAweDE2LCAweDBlLCAweDI4LCAweDFiLCAweDZkLCAweDBjLCAweGFhLCAweDg4LAotCTB4OTUsIDB4NTMsIDB4OTcsIDB4MWMsIDB4YjYsIDB4YjcsIDB4OGMsIDB4ZmUsIDB4OWMsIDB4MjYsIDB4MTYsIDB4OTgsCi0JMHg5YywgMHhkNywgMHg0NCwgMHhmNiwgMHg4MCwgMHhiMiwgMHg4NSwgMHhmOSwgMHhlZiwgMHhiNSwgMHhmZCwgMHhhNiwKLQkweDU1LCAweDZhLCAweDYzLCAweDcxLCAweDI4LCAweDM2LCAweDliLCAweDNlLCAweDE3LCAweDFlLCAweDE0LCAweDdkLAotCTB4OTYsIDB4MTcsIDB4ODksIDB4M2UsIDB4OGIsIDB4YjQsIDB4Y2IsIDB4ZDksIDB4NDksIDB4NDEsIDB4ZWYsIDB4M2YsCi0JMHgyZSwgMHhjYSwgMHhkOSwgMHhjMywgMHhkZiwgMHgxNywgMHhlNywgMHg3MiwgMHhjOSwgMHhjMiwgMHhiYywgMHg1YiwKLQkweDU2LCAweDlmLCAweDVlLCAweDk4LCAweDdiLCAweGYyLCAweGQ4LCAweDZhLCAweDU5LCAweDZmLCAweDAzLCAweDYzLAotCTB4NDgsIDB4MTUsIDB4NzksIDB4OGUsIDB4YWMsIDB4NDUsIDB4NGMsIDB4YzUsIDB4MWIsIDB4YzQsIDB4OGEsIDB4OGQsCi0JMHg1MCwgMHg2MCwgMHg5NiwgMHg3YSwgMHg1MSwgMHhmZSwgMHhlYSwgMHg3NSwgMHhkOCwgMHhmNiwgMHg2NywgMHhkYSwKLQkweDk4LCAweDc1LCAweGY4LCAweDNjLCAweGY2LCAweDRjLCAweDE0LCAweDRiLCAweDBjLCAweGRkLCAweDkzLCAweDkwLAotCTB4YmUsIDB4NDEsIDB4MmQsIDB4OTIsIDB4M2UsIDB4MjMsIDB4NzcsIDB4MGYsIDB4YTMsIDB4YjIsIDB4OWUsIDB4NzcsCi0JMHgzOSwgMHhiYiwgMHg1MywgMHhiMSwgMHg3MiwgMHhjMCwgMHg4OSwgMHgyZSwgMHhmZCwgMHhiZiwgMHg0OCwgMHhjYywKLQkweDY0LCAweDNmLCAweGVhLCAweGU4LCAweDZmLCAweDJhLCAweGZlLCAweDc2LCAweDgwLCAweGYxLCAweDI1LCAweDcyLAotCTB4MzcsIDB4NGMsIDB4ZTIsIDB4YWQsIDB4NmIsIDB4ZDQsIDB4ODksIDB4MTUsIDB4ODksIDB4NjUsIDB4N2MsIDB4ZWUsCi0JMHg4NiwgMHgzYSwgMHg0YSwgMHg1NiwgMHhkMSwgMHhlYiwgMHgzNiwgMHgyYiwgMHg2OCwgMHgzMywgMHhiMiwgMHhmZiwKLQkweGQyLCAweDNjLCAweDY2LCAweGUyLCAweGYwLCAweDNjLCAweDNmLCAweDUyLCAweDA5LCAweDU5LCAweDNmLCAweDVkLAotCTB4ODIsIDB4OWQsIDB4YTksIDB4ZDAsIDB4YWEsIDB4YjMsIDB4OGEsIDB4MWYsIDB4YzksIDB4YWMsIDB4MGIsIDB4MjYsCi0JMHhlNywgMHhiZSwgMHg5YiwgMHg3ZCwgMHhmMywgMHhmNCwgMHg3YSwgMHhkMSwgMHgzZCwgMHg1NCwgMHhjZCwgMHhjZiwKLQkweGM0LCAweDY3LCAweDNkLCAweGM0LCAweGVhLCAweDZlLCAweGNlLCAweDZkLCAweGY3LCAweDkwLCAweDA3LCAweDQ3LAotCTB4ZjcsIDB4YjgsIDB4NTEsIDB4OTYsIDB4ODIsIDB4ZjIsIDB4ZWMsIDB4M2MsIDB4YTIsIDB4OGQsIDB4ZDYsIDB4ODgsCi0JMHgxNywgMHg0NiwgMHgzYywgMHgyOCwgMHgyNSwgMHhhNywgMHg3ZCwgMHg3ZSwgMHhjNCwgMHg4YiwgMHg5MiwgMHhhZCwKLQkweGI0LCAweDg3LCAweDVkLCAweDU1LCAweDI4LCAweGRlLCAweGVhLCAweGM2LCAweDczLCAweDk5LCAweDZhLCAweGI4LAotCTB4YjYsIDB4ZGUsIDB4ODEsIDB4ZjUsIDB4OTksIDB4NjksIDB4NTAsIDB4YjcsIDB4NTYsIDB4NjMsIDB4NjIsIDB4OTcsCi0JMHgwZiwgMHgzMywgMHg3NiwgMHgxOCwgMHg3OCwgMHg2MywgMHg0ZiwgMHgwZCwgMHg2YSwgMHg3NywgMHhkYywgMHg4YywKLQkweDlmLCAweGVlLCAweGYxLCAweGEzLCAweDkyLCAweGJhLCAweDc5LCAweDc5LCAweGM0LCAweDI5LCAweGZjLCAweDkzLAotCTB4ZjMsIDB4NzQsIDB4YTAsIDB4MzgsIDB4YmYsIDB4NmYsIDB4MWMsIDB4YmIsIDB4OTQsIDB4YWYsIDB4NDIsIDB4MjksCi0JMHhjYywgMHgwZCwgMHg5MCwgMHhjOSwgMHhjYSwgMHhmYSwgMHg2OCwgMHg2MywgMHg0YiwgMHg3NywgMHg2MiwgMHhlNCwKLQkweDVmLCAweDhiLCAweDhkLCAweDVmLCAweGZkLCAweDlmLCAweGI3LCAweGEzLCAweDBkLCAweGM0LCAweDMyLCAweGYxLAotCTB4ZmYsIDB4MTUsIDB4YWIsIDB4NGIsIDB4OGMsIDB4OGUsIDB4ODcsIDB4YzMsIDB4ZjMsIDB4OGEsIDB4YjEsIDB4Y2EsCi0JMHg5ZSwgMHg4ZiwgMHg5NSwgMHhlNCwgMHg4MCwgMHhjYiwgMHhkMSwgMHhiZCwgMHhhMywgMHhhMSwgMHhlZCwgMHgxZSwKLQkweGM1LCAweDg3LCAweDU4LCAweDU1LCAweDNmLCAweGVmLCAweGE5LCAweDc5LCAweDlmLCAweDgyLCAweDJhLCAweGY5LAotCTB4YmEsIDB4YWMsIDB4OTksIDB4YTksIDB4YTMsIDB4OGIsIDB4ZjIsIDB4N2IsIDB4YTAsIDB4M2UsIDB4N2IsIDB4MGQsCi0JMHhhYSwgMHgzYiwgMHg1NSwgMHhkMCwgMHhlMywgMHg5OCwgMHg2NSwgMHhkYSwgMHhmYiwgMHg1YSwgMHhlMiwgMHhlMywKLQkweDRlLCAweGFjLCAweDRjLCAweDhjLCAweDMyLCAweDQ3LCAweDExLCAweDVkLCAweDRhLCAweDVmLCAweDM3LCAweDUyLAotCTB4OGUsIDB4ZjQsIDB4NTcsIDB4OWUsIDB4MzcsIDB4YzQsIDB4YWEsIDB4M2UsIDB4YjYsIDB4YmYsIDB4ODUsIDB4NzEsCi0JMHg3NSwgMHhiMywgMHhmYywgMHg2NywgMHhkZCwgMHgyOCwgMHg5NSwgMHhiMiwgMHhkMiwgMHhmNywgMHg3YSwgMHhmZSwKLQkweDk2LCAweGZlLCAweDVhLCAweGQ2LCAweGM2LCAweDhiLCAweGUyLCAweDU0LCAweDUxLCAweGFjLCAweDk0LCAweDcxLAotCTB4NmEsIDB4N2YsIDB4MjIsIDB4MTQsIDB4N2IsIDB4OTcsIDB4NzgsIDB4NzYsIDB4MmMsIDB4ZWIsIDB4MjQsIDB4ZjcsCi0JMHgxMSwgMHhiYiwgMHg1OSwgMHg0NywgMHg3YiwgMHhlOSwgMHg1MSwgMHg4ZSwgMHg5ZSwgMHhiNywgMHg5OSwgMHg0MiwKLQkweDJlLCAweGIwLCAweDA0LCAweGU5LCAweGQ0LCAweDU0LCAweDVmLCAweDkyLCAweGZkLCAweDZlLCAweDI3LCAweDVjLAotCTB4YmQsIDB4MDUsIDB4ZGMsIDB4NjQsIDB4YWMsIDB4MTksIDB4MjUsIDB4YmYsIDB4Y2IsIDB4M2EsIDB4ZTAsIDB4ZTgsCi0JMHhhNywgMHgzZCwgMHhlOCwgMHgyYSwgMHhjNywgMHg1OCwgMHhjNCwgMHgzOSwgMHhhZiwgMHhlNiwgMHhjNywgMHg2ZCwKLQkweDU2LCAweDFhLCAweDI2LCAweDRlLCAweGNkLCAweDJiLCAweGMxLCAweGExLCAweDVkLCAweDU3LCAweGExLCAweGJjLAotCTB4N2YsIDB4ZGMsIDB4ZjIsIDB4ZjAsIDB4NWUsIDB4YTksIDB4MzEsIDB4MWYsIDB4NGYsIDB4NDQsIDB4NDIsIDB4YWQsCi0JMHhhYiwgMHgxNSwgMHgxMywgMHhhZCwgMHhmMywgMHhkYywgMHgyOCwgMHhkOSwgMHhlNSwgMHg0MCwgMHg3MSwgMHgzZiwKLQkweDc5LCAweDgzLCAweDdlLCAweDAzLCAweGM2LCAweDdkLCAweDM5LCAweDNjLCAweDU3LCAweDdiLCAweDY3LCAweGRiLAotCTB4NzYsIDB4NzUsIDB4Y2QsIDB4YTgsIDB4ZGIsIDB4ZjQsIDB4MWIsIDB4MTMsIDB4MzcsIDB4YWEsIDB4OGMsIDB4ZWQsCi0JMHhjNSwgMHhjMywgMHgxZSwgMHgxNCwgMHhmNSwgMHg5YSwgMHg5OCwgMHg3MSwgMHg4MywgMHhlMCwgMHg1MSwgMHgyMywKLQkweDhhLCAweDY4LCAweGFmLCAweGFlLCAweDVlLCAweDFmLCAweGYzLCAweGVhLCAweDNhLCAweGI4LCAweGM4LCAweGVkLAotCTB4MWMsIDB4ZGIsIDB4MGQsIDB4MzgsIDB4YzgsIDB4YzMsIDB4ZDQsIDB4ZWQsIDB4MzcsIDB4NDMsIDB4NjUsIDB4ZDksCi0JMHgxMywgMHg3YywgMHg3ZSwgMHg4MiwgMHhmYywgMHhmMywgMHgwNCwgMHhlZiwgMHg5ZCwgMHgxOCwgMHhhZSwgMHhlMSwKLQkweGE3LCAweDBhLCAweGI1LCAweGJiLCAweGNiLCAweDEwLCAweDViLCAweDJhLCAweGViLCAweGFjLCAweDBlLCAweDU0LAotCTB4ZjcsIDB4OGIsIDB4N2YsIDB4YWEsIDB4YjgsIDB4YWIsIDB4NDksIDB4ODEsIDB4N2UsIDB4MWQsIDB4ZGIsIDB4OWMsCi0JMHg3OSwgMHgzOSwgMHg1ZiwgMHhiZCwgMHhkMywgMHg4ZCwgMHg4YSwgMHgyZSwgMHhiNiwgMHg3NywgMHhhOSwgMHgyZiwKLQkweDRiLCAweGFjLCAweGJhLCAweDMwLCAweDA3LCAweDAxLCAweDU1LCAweDYyLCAweGI3LCAweGNjLCAweGQ5LCAweDI3LAotCTB4ZjksIDB4YmQsIDB4MWIsIDB4Y2UsIDB4NWUsIDB4OTksIDB4NmIsIDB4MTksIDB4ZTMsIDB4MzcsIDB4ZGQsIDB4MzksCi0JMHg1ZSwgMHg3YiwgMHhkMSwgMHg1YSwgMHgzYiwgMHhiMiwgMHg4OSwgMHgyNSwgMHhkOCwgMHg2MiwgMHg5ZiwgMHg1ZCwKLQkweDA4LCAweGMwLCAweDMzLCAweDEyLCAweDZjLCAweGNkLCAweGUwLCAweGY0LCAweGI5LCAweDllLCAweDk0LCAweDEzLAotCTB4ZjcsIDB4MjYsIDB4ZTUsIDB4MGMsIDB4ODcsIDB4OWMsIDB4MzMsIDB4ZTAsIDB4NTgsIDB4NDcsIDB4ZGMsIDB4NzgsCi0JMHhiMCwgMHhjZiwgMHgyZCwgMHg2YiwgMHhkYywgMHgwMSwgMHg5NywgMHg1NiwgMHg4YiwgMHg3NywgMHgzMywgMHg4MiwKLQkweDc5LCAweDI1LCAweDM4LCAweDljLCAweGY2LCAweGUzLCAweDg0LCAweGZkLCAweGJiLCAweDk0LCAweDE4LCAweDZjLAotCTB4YTEsIDB4NDUsIDB4MmYsIDB4NDcsIDB4YjcsIDB4YjcsIDB4MDQsIDB4YzksIDB4ZjAsIDB4Y2QsIDB4YzgsIDB4ZGMsCi0JMHhjNSwgMHgxYywgMHg5YSwgMHhiNiwgMHg1OSwgMHg0MSwgMHg0ZSwgMHg0MSwgMHhiNywgMHg2MywgMHg2ZSwgMHhlMCwKLQkweDQwLCAweDJhLCAweGZjLCAweDM5LCAweDRjLCAweDU2LCAweDM5LCAweGE5LCAweDNmLCAweDU5LCAweDlmLCAweDUwLAotCTB4YjEsIDB4OTMsIDB4NTYsIDB4NDUsIDB4ZmMsIDB4OGIsIDB4ODksIDB4ZGQsIDB4OTYsIDB4MjcsIDB4NjEsIDB4NTUsCi0JMHgxOCwgMHg1YSwgMHg3YywgMHg1NCwgMHgwOSwgMHhiNSwgMHhhZiwgMHhhNywgMHhkZiwgMHg5NiwgMHg4ZCwgMHg5NCwKLQkweDExLCAweDhmLCAweDY3LCAweGExLCAweDc0LCAweDk3LCAweGQ4LCAweGFmLCAweDg3LCAweGQ4LCAweDcwLCAweGJkLAotCTB4ZWMsIDB4MDcsIDB4ODQsIDB4MDMsIDB4OGEsIDB4MDcsIDB4ZjcsIDB4MGQsIDB4MDgsIDB4YWUsIDB4MmUsIDB4NDcsCi0JMHhkMSwgMHg5ZSwgMHgwYSwgMHgzYywgMHg5YywgMHg3NiwgMHgxMiwgMHhmYiwgMHhkYywgMHhhOCwgMHhkZCwgMHgyNSwKLQkweDNlLCAweDVmLCAweDg5LCAweGNhLCAweGFkLCAweDA3LCAweDJkLCAweGJmLCAweDU2LCAweDgyLCAweDRhLCAweDVlLAotCTB4M2YsIDB4NDYsIDB4NWQsIDB4N2MsIDB4OTAsIDB4ZmEsIDB4MWEsIDB4NDYsIDB4MTMsIDB4ZjUsIDB4OTQsIDB4ZGIsCi0JMHhjZSwgMHhmMSwgMHhmOSwgMHhmMCwgMHg1ZSwgMHhhYSwgMHg5MSwgMHhiMiwgMHhmZCwgMHg3OCwgMHg3NywgMHg4NywKLQkweDY1LCAweGI1LCAweDQ0LCAweDYyLCAweDcwLCAweDhlLCAweDVjLCAweDg5LCAweDVmLCAweGYyLCAweGY3LCAweDcxLAotCTB4YmQsIDB4MDUsIDB4ZWEsIDB4NDgsIDB4MWQsIDB4ZGUsIDB4NGMsIDB4YjUsIDB4YzIsIDB4MzEsIDB4NTIsIDB4ODEsCi0JMHhiMywgMHg1YiwgMHg0NSwgMHhhNiwgMHgxYiwgMHg5NSwgMHg3ZCwgMHg1YSwgMHhmOCwgMHgwYywgMHg2ZCwgMHhkZiwKLQkweGI1LCAweDhiLCAweDgxLCAweGJmLCAweDQ2LCAweGRhLCAweDJmLCAweGNjLCAweDRmLCAweDhlLCAweGVmLCAweDFkLAotCTB4Y2MsIDB4Y2YsIDB4Y2QsIDB4MzgsIDB4MGEsIDB4ZGMsIDB4ZTksIDB4MDcsIDB4ZDYsIDB4NjMsIDB4NGMsIDB4NjcsCi0JMHg1YywgMHhkMSwgMHgyMCwgMHhiYSwgMHhjMywgMHhjNywgMHg2NCwgMHhiZiwgMHg5YywgMHhlMywgMHg4YiwgMHgxMSwKLQkweGYzLCAweDlmLCAweGI1LCAweGU0LCAweGRjLCAweDgxLCAweDhiLCAweGY2LCAweDU5LCAweGFjLCAweDFkLCAweGIyLAotCTB4MzYsIDB4MmUsIDB4OTMsIDB4ZmIsIDB4M2YsIDB4ZTcsIDB4OWMsIDB4MzAsIDB4NDEsIDB4MzEsIDB4NDQsIDB4ZTYsCi0JMHgxNiwgMHg5OSwgMHg0YiwgMHhhMiwgMHhmMSwgMHhlNSwgMHg2NCwgMHhmZSwgMHhhMywgMHhmNSwgMHhlOCwgMHhmOSwKLQkweGYyLCAweGYwLCAweGJhLCAweGVjLCAweDc1LCAweDcwLCAweDU5LCAweDg3LCAweDk1LCAweGI5LCAweDk0LCAweGY1LAotCTB4Y2EsIDB4MDAsIDB4NTYsIDB4OGQsIDB4NzgsIDB4ZWQsIDB4ZGMsIDB4ZjksIDB4ZGQsIDB4ODQsIDB4Y2MsIDB4OWYsCi0JMHg5YywgMHhhMSwgMHhmMSwgMHg5MCwgMHg5YiwgMHhlOCwgMHgyOCwgMHhlNSwgMHhkYywgMHg3ZCwgMHg5MCwgMHg4MCwKLQkweDcyLCAweDViLCAweGI0LCAweDBkLCAweGU1LCAweGM0LCAweGI1LCAweDc3LCAweDEyLCAweGMxLCAweDU1LCAweDI2LAotCTB4MTIsIDB4NmMsIDB4MmIsIDB4OGEsIDB4MTIsIDB4ZDYsIDB4NzksIDB4MzMsIDB4ZTEsIDB4NjAsIDB4YmMsIDB4NmQsCi0JMHhlNiwgMHg5OCwgMHhiZCwgMHhiMCwgMHg2YywgMHhhZSwgMHhiYywgMHgwYywgMHgzMywgMHhhOCwgMHhhNywgMHhiMywKLQkweDA5LCAweDAzLCAweGI1LCAweGQ0LCAweGQzLCAweDk5LCAweDg0LCAweDEzLCAweDY3LCAweGE4LCAweDk3LCAweDUzLAotCTB4ODksIDB4MDAsIDB4MmEsIDB4MTgsIDB4OTgsIDB4OGEsIDB4ZmEsIDB4MmMsIDB4NGMsIDB4ZTgsIDB4OTUsIDB4NzIsCi0JMHgzZSwgMHgwMiwgMHg3MiwgMHhmZSwgMHhjNSwgMHg5ZiwgMHhkNCwgMHg1MSwgMHg5YiwgMHhhYywgMHg1ZiwgMHg1MywKLQkweGViLCAweDcwLCAweDYwLCAweGQyLCAweGU2LCAweDJjLCAweDRlLCAweGU2LCAweGNkLCAweGEyLCAweDFmLCAweDE5LAotCTB4OTMsIDB4OWQsIDB4YWIsIDB4YjcsIDB4Y2EsIDB4YTEsIDB4YTYsIDB4ODMsIDB4MWMsIDB4NGYsIDB4NDAsIDB4MjksCi0JMHg4YywgMHg2NywgMHgxOSwgMHg0MCwgMHg1OSwgMHhhMywgMHg4OSwgMHgzMCwgMHgxZSwgMHg2MiwgMHg1YiwgMHg2ZiwKLQkweDI3LCAweDVlLCAweGMxLCAweGFkLCAweGZjLCAweDdlLCAweDNmLCAweGYxLCAweDIzLCAweDJjLCAweDYxLCAweDNmLAotCTB4ZGUsIDB4MjMsIDB4NmUsIDB4ZGMsIDB4MWYsIDB4YmEsIDB4YWQsIDB4MDQsIDB4YTUsIDB4NzUsIDB4NTgsIDB4MzQsCi0JMHg3MiwgMHhmYSwgMHg1YywgMHhiNywgMHgzZCwgMHhjZSwgMHg0MiwgMHg0ZSwgMHhlNSwgMHhjNiwgMHhmZCwgMHhlOSwKLQkweGMyLCAweDU5LCAweGE2LCAweDE4LCAweDdkLCAweDU4LCAweGYwLCAweGQ1LCAweGNkLCAweDFjLCAweDFlLCAweDY4LAotCTB4NGIsIDB4N2MsIDB4MjMsIDB4NzcsIDB4NGUsIDB4NDcsIDB4OTUsIDB4Y2YsIDB4NzksIDB4M2QsIDB4M2EsIDB4NTEsCi0JMHhlYSwgMHhjZiwgMHhmYiwgMHg5NSwgMHhmNCwgMHhlNywgMHg5MywgMHhjYSwgMHg1YywgMHhlMCwgMHhjYywgMHhhMywKLQkweGI2LCAweDdlLCAweDY1LCAweDdkLCAweDNlLCAweDgwLCAweGViLCAweDg4LCAweGU3LCAweDI3LCAweGM5LCAweGExLAotCTB4MTksIDB4OTMsIDB4YjEsIDB4N2EsIDB4ZGUsIDB4MGEsIDB4ZjQsIDB4ZWMsIDB4MTEsIDB4OWQsIDB4MDYsIDB4ZGIsCi0JMHhkOSwgMHg4NywgMHhiNiwgMHgwYywgMHg1NiwgMHgyMiwgMHhiOSwgMHhjNywgMHhjMywgMHgzMSwgMHg4OCwgMHhkZSwKLQkweGM5LCAweDQzLCAweGY3LCAweGQwLCAweGZmLCAweGQzLCAweDdmLCAweDgzLCAweDc1LCAweGJiLCAweGE2LCAweGUxLAotCTB4YWQsIDB4ZjQsIDB4OTcsIDB4YjAsIDB4OWUsIDB4MzYsIDB4ZTQsIDB4YTAsIDB4ZWYsIDB4YWMsIDB4ZDAsIDB4YWYsCi0JMHg0MiwgMHg2ZSwgMHgzZiwgMHhjMywgMHhjNywgMHgzOSwgMHg3OCwgMHg5ZiwgMHhiZSwgMHhiNSwgMHgwZSwgMHhlZiwKLQkweDY0LCAweDY3LCAweDYxLCAweDQ2LCAweDlmLCAweDhhLCAweGM5LCAweDY5LCAweDBhLCAweGVkLCAweDQzLCAweGY2LAotCTB4NWUsIDB4ZGMsIDB4YzQsIDB4YjcsIDB4YWYsIDB4NDAsIDB4ZGQsIDB4NjUsIDB4NjIsIDB4N2QsIDB4ZDQsIDB4OGQsCi0JMHhkZCwgMHhjYywgMHgyZCwgMHg1NiwgMHhjOCwgMHg3YSwgMHg5OCwgMHg1ZCwgMHhhZiwgMHgxOSwgMHg3YiwgMHgzOSwKLQkweDE3LCAweDg5LCAweDA0LCAweDc5LCAweDhiLCAweDM3LCAweGE3LCAweGU3LCAweGY4LCAweGY0LCAweDYyLCAweGQ2LAotCTB4YjksIDB4YTcsIDB4YzQsIDB4ZGUsIDB4Y2IsIDB4NTAsIDB4MDQsIDB4MWYsIDB4NDQsIDB4Y2YsIDB4MDUsIDB4MWQsCi0JMHg3ZiwgMHgwZCwgMHgzNywgMHgyNiwgMHhkZiwgMHhhNywgMHgxZCwgMHg4NCwgMHhjNiwgMHhhZiwgMHg3NSwgMHhmYywKLQkweDRmLCAweGVhLCAweDcyLCAweDFkLCAweGU3LCAweGYxLCAweDZmLCAweDMwLCAweDk0LCAweGY2LCAweGQwLCAweDhmLAotCTB4NjQsIDB4ZWYsIDB4NjksIDB4MmQsIDB4OGUsIDB4NmUsIDB4OGIsIDB4MzMsIDB4MzcsIDB4MDksIDB4ZWEsIDB4MTksCi0JMHhmMiwgMHhmYSwgMHg0YywgMHg5NSwgMHg2NSwgMHgzOSwgMHgyMiwgMHg3MSwgMHgwYywgMHgwZSwgMHg1OCwgMHhkNiwKLQkweDYyLCAweDNkLCAweGQ2LCAweDVjLCAweDQyLCAweGZkLCAweGRlLCAweDhmLCAweGZkLCAweGFjLCAweGU3LCAweGMzLAotCTB4OTEsIDB4YTEsIDB4MTUsIDB4YmMsIDB4MmYsIDB4M2MsIDB4NzgsIDB4MmQsIDB4MWUsIDB4ZTYsIDB4ZjMsIDB4MmYsCi0JMHhlOSwgMHhiMSwgMHhmMSwgMHgxOSwgMHgwOCwgMHg3MiwgMHhjZSwgMHg3MywgMHhjZiwgMHhjNywgMHg4NiwgMHg1NiwKLQkweDdlLCAweDRjLCAweGJkLCAweDBiLCAweGZhLCAweDdjLCAweDIyLCAweGFmLCAweGNmLCAweDUyLCAweGVhLCAweGYzLAotCTB4ZjYsIDB4OTEsIDB4ZjcsIDB4Y2YsIDB4NmQsIDB4NDgsIDB4MDUsIDB4NjMsIDB4MTksIDB4YzYsIDB4OTgsIDB4YjcsCi0JMHhhOCwgMHhiNywgMHg4ZCwgMHhiNCwgMHg1NywgMHhlNiwgMHgxYSwgMHgzOCwgMHg5MiwgMHg2ZCwgMHhhNiwgMHg2ZSwKLQkweDVjLCAweGU0LCAweDQ0LCAweDRlLCAweDFjLCAweGNiLCAweDFhLCAweGI0LCAweDRkLCAweDYwLCAweDIxLCAweGUzLAotCTB4ODUsIDB4ZTksIDB4Y2QsIDB4ZDksIDB4NGYsIDB4ZTYsIDB4YmMsIDB4M2YsIDB4NzAsIDB4ZWUsIDB4OTQsIDB4NjYsCi0JMHgxYywgMHg0ZiwgMHhjOCwgMHhkOCwgMHhhNSwgMHg5YywgMHhmZCwgMHg1YywgMHhkNiwgMHg4MCwgMHhhNywgMHg5NCwKLQkweGI5LCAweGQwLCAweGY2LCAweGVlLCAweDg0LCAweGYwLCAweGY0LCAweDAwLCAweDY1LCAweDE1LCAweDUzLCAweGQ2LAotCTB4ZTksIDB4NzMsIDB4OWIsIDB4NTIsIDB4NmQsIDB4ZjYsIDB4ZDksIDB4MzcsIDB4ZjIsIDB4MWIsIDB4ODQsIDB4NjksCi0JMHhjZiwgMHhjNSwgMHg5MSwgMHgzMiwgMHhiYywgMHhlZCwgMHgxMywgMHgxOSwgMHgzOSwgMHg1ZCwgMHgwYSwgMHgwNiwKLQkweDZlLCAweDYxLCAweDE5LCAweDc5LCAweGZlLCAweDIwLCAweDlmLCAweGRmLCAweDEyLCAweDI5LCAweGMyLCAweDkwLAotCTB4YjcsIDB4YjAsIDB4ZWUsIDB4OTQsIDB4ZWIsIDB4OGIsIDB4NzksIDB4YmUsIDB4OWQsIDB4NmIsIDB4MmIsIDB4NzMsCi0JMHg3NiwgMHg1NSwgMHg1YywgMHg2YSwgMHhlZiwgMHgyNSwgMHhkOSwgMHhkYywgMHhhYSwgMHhlZSwgMHg5MiwgMHhmZCwKLQkweDNhLCAweDg5LCAweDdmLCAweDgyLCAweDkzLCAweDM5LCAweDljLCAweDJkLCAweGExLCAweDNkLCAweDNkLCAweDk3LAotCTB4OTAsIDB4NzUsIDB4MjEsIDB4OTMsIDB4MzksIDB4NDYsIDB4MTgsIDB4OGIsIDB4YjIsIDB4ZjYsIDB4OTksIDB4MmUsCi0JMHhjNiwgMHgzNywgMHhlYSwgMHg4YywgMHhiYywgMHg3NywgMHg2NSwgMHg1NCwgMHhmNiwgMHhlMywgMHg2ZSwgMHhhZSwKLQkweDE0LCAweDVlLCAweGQ3LCAweDExLCAweDk1LCAweDdjLCAweDQyLCAweDZjLCAweGI1LCAweDcwLCAweGNmLCAweDhkLAotCTB4M2QsIDB4ZjksIDB4MzksIDB4MGYsIDB4YTgsIDB4OWYsIDB4ODQsIDB4ZmQsIDB4YWYsIDB4NWYsIDB4YzIsIDB4ZjEsCi0JMHgwYSwgMHg3YiwgMHg1YSwgMHhkMiwgMHhhZiwgMHhmMywgMHg1YywgMHhjZiwgMHhlNiwgMHhmNSwgMHg0MywgMHhmNCwKLQkweDM3LCAweGQzLCAweDU5LCAweDQ2LCAweDdlLCAweDI3LCAweGJjLCAweDNlLCAweGE0LCAweGNmLCAweDUyLCAweDg1LAotCTB4ZDMsIDB4NGIsIDB4NGUsIDB4MjEsIDB4NmIsIDB4N2IsIDB4M2QsIDB4Y2EsIDB4ZGUsIDB4YWMsIDB4YWMsIDB4ZWYsCi0JMHgwOSwgMHg5ZiwgMHhiZiwgMHhkYywgMHgxYSwgMHg5ZiwgMHg5YywgMHg4ZCwgMHg5MywgMHhmOCwgMHg3OCwgMHhmYSwKLQkweDVjLCAweDdmLCAweGFhLCAweGNkLCAweGRlLCAweDA3LCAweDVkLCAweGQwLCAweDZmLCAweGUxLCAweDZlLCAweGM2LAotCTB4ODIsIDB4N2IsIDB4YWEsIDB4ZWQsIDB4MWMsIDB4MjksIDB4OWYsIDB4OGIsIDB4OWMsIDB4M2UsIDB4YjcsIDB4MzMsCi0JMHhmNSwgMHg3YiwgMHg0YiwgMHhiNSwgMHhmNywgMHgxZCwgMHg1ZCwgMHg3MCwgMHg2YywgMHhkNSwgMHhjZSwgMHhhYywKLQkweDIwLCAweGU3LCAweDNiLCAweDdiLCAweDgzLCAweGU0LCAweDI1LCAweDJlLCAweGM2LCAweGM5LCAweGZmLCAweDUyLAotCTB4MmEsIDB4N2IsIDB4ZTAsIDB4ZTQsIDB4Y2IsIDB4YjgsIDB4YTUsIDB4M2YsIDB4ODYsIDB4MjEsIDB4ZmQsIDB4NDMsCi0JMHhjYiwgMHhmNCwgMHg0ZCwgMHhhZCwgMHhlZiwgMHhjMiwgMHg5MiwgMHhmZSwgMHhkZiwgMHg1YiwgMHhlNSwgMHg3NiwKLQkweDdkLCAweGFkLCAweDNkLCAweGE5LCAweGE4LCAweDc4LCAweDcwLCAweDllLCAweDBiLCAweGI3LCAweDBkLCAweDg2LAotCTB4YjAsIDB4YjgsIDB4NWYsIDB4NDUsIDB4NzgsIDB4OWUsIDB4YzgsIDB4MDksIDB4YTEsIDB4NzUsIDB4YjAsIDB4ZGUsCi0JMHg5OSwgMHg1ZiwgMHhkNywgMHhjMSwgMHgyMiwgMHhmNiwgMHhlMywgMHg2ZCwgMHhiZCwgMHgwYywgMHhhZiwgMHgxMSwKLQkweDc3LCAweDJiLCAweDZjLCAweDllLCAweGJkLCAweDQ2LCAweDQ5LCAweDA5LCAweGNmLCAweDc2LCAweGE5LCAweDk4LAotCTB4YTYsIDB4YzEsIDB4NWIsIDB4NmQsIDB4YzQsIDB4YzgsIDB4YjEsIDB4NWIsIDB4OTQsIDB4YWQsIDB4OTksIDB4MzUsCi0JMHg0YSwgMHg3ZiwgMHhiNiwgMHhkMCwgMHhiZSwgMHgwNywgMHg3NywgMHg4YywgMHg3YSwgMHg3MSwgMHhjNywgMHhkZSwKLQkweDZhLCAweDdlLCAweDdjLCAweGZjLCAweGQ0LCAweGYwLCAweGYzLCAweDhkLCAweGQyLCAweGRjLCAweGZlLCAweGZjLAotCTB4MTIsIDB4YWMsIDB4NGIsIDB4MTUsIDB4ZWMsIDB4Y2EsIDB4YzksIDB4YmMsIDB4NWEsIDB4NmMsIDB4NTcsIDB4ZWEsCi0JMHgwNCwgMHhiMCwgMHg5NywgMHhmYywgMHhmYywgMHg2NCwgMHg1YSwgMHhiOCwgMHhmZCwgMHgwNiwgMHhlYSwgMHg0MiwKLQkweGQ2LCAweDk5LCAweDhiLCAweGM5LCAweGVmLCAweGU1LCAweDNjLCAweDYzLCAweDI0LCAweGJmLCAweGVmLCAweDlmLAotCTB4YjMsIDB4MWIsIDB4OWMsIDB4YjcsIDB4MWIsIDB4MTcsIDB4ZGUsIDB4YTEsIDB4N2YsIDB4Y2YsIDB4OGEsIDB4ZmMsCi0JMHhiYiwgMHgzNSwgMHhlOSwgMHhiZCwgMHg2MCwgMHg1NywgMHgxNywgMHg5ZSwgMHgxNywgMHhmOCwgMHhkMCwgMHhlOSwKLQkweDczLCAweGU5LCAweGQ0LCAweDU0LCAweDdiLCAweDUyLCAweDUwLCAweGQ0LCAweDJmLCAweDdjLCAweDU5LCAweGY0LAotCTB4ZTIsIDB4YzQsIDB4YWIsIDB4YzQsIDB4MDcsIDB4NjcsIDB4ZmYsIDB4YzQsIDB4YjUsIDB4NDIsIDB4ZWIsIDB4NWMsCi0JMHg3YiwgMHg2MywgMHhlOCwgMHg4ZSwgMHg1MiwgMHhiNywgMHg4MywgMHhhNSwgMHhjNSwgMHgzOSwgMHhmYiwgMHhjOCwKLQkweGU5LCAweDIyLCAweGEwLCAweDBhLCAweGJlLCAweDc4LCAweDZjLCAweDllLCAweDE3LCAweDYwLCAweDJlLCAweGE4LAotCTB4ZWUsIDB4MTUsIDB4Y2UsIDB4NTgsIDB4Y2QsIDB4NmYsIDB4ZTEsIDB4ZTYsIDB4ZTQsIDB4MmYsIDB4N2IsIDB4ODUsCi0JMHhhNywgMHhkNywgMHhmMCwgMHg5YiwgMHgyNCwgMHhiZiwgMHg0NiwgMHhlYywgMHg2OSwgMHgyNSwgMHg3YSwgMHgxOCwKLQkweDEzLCAweDhiLCAweDQzLCAweDJiLCAweGIxLCAweDcxLCAweGY4LCAweDcyLCAweGI2LCAweDk1LCAweGNiLCAweDc3LAotCTB4MGUsIDB4NWUsIDB4YjAsIDB4NmYsIDB4NjksIDB4OGYsIDB4N2QsIDB4M2EsIDB4N2QsIDB4NGUsIDB4NmMsIDB4MzUsCi0JMHhjMCwgMHhiOSwgMHhkYSwgMHg5ZCwgMHg5NiwgMHgzZSwgMHg1OCwgMHhlOCwgMHhkMCwgMHhjOSwgMHg4ZCwgMHhlOCwKLQkweDZiLCAweDZhLCAweGI1LCAweGRjLCAweDlmLCAweGNhLCAweDI5LCAweDBiLCAweGIyLCAweGE2LCAweGRlLCAweGRiLAotCTB4NTUsIDB4MmEsIDB4ZWIsIDB4ZWMsIDB4MTcsIDB4YzYsIDB4NWUsIDB4NjgsIDB4NDMsIDB4ZDYsIDB4NTUsIDB4MDMsCi0JMHhhOCwgMHhlYSwgMHgxNSwgMHgzZCwgMHhjYSwgMHg5OCwgMHgwMiwgMHg3MCwgMHg5MiwgMHgwMywgMHg1NiwgMHg4ZCwKLQkweDVlLCAweDRlLCAweDFlLCAweDZhLCAweDRhLCAweGVjLCAweGYzLCAweDgzLCAweDYxLCAweGZhLCAweDk5LCAweGM3LAotCTB4MmMsIDB4MjYsIDB4NWYsIDB4N2MsIDB4M2IsIDB4MjEsIDB4ZTcsIDB4MzIsIDB4NWIsIDB4NWIsIDB4NzYsIDB4MjcsCi0JMHg2NiwgMHg3YSwgMHgwZiwgMHhlNywgMHhmMywgMHhmZSwgMHgxNSwgMHg3MCwgMHg5MywgMHhhMywgMHg5YSwgMHg5OCwKLQkweDg4LCAweDJhLCAweDM2LCAweGRlLCAweDM4LCAweGI0LCAweDEwLCAweDE2LCAweDMyLCAweGI3LCAweGJjLCAweDI1LAotCTB4MjMsIDB4ZjMsIDB4YjksIDB4MjYsIDB4YmYsIDB4MjYsIDB4MjQsIDB4ZWQsIDB4YzUsIDB4OTQsIDB4YTEsIDB4YWMsCi0JMHhlNCwgMHgwNSwgMHhmMCwgMHgzYSwgMHg4ZCwgMHgxNiwgMHg2NSwgMHg1ZiwgMHg0NiwgMHhlYSwgMHhhZiwgMHhlMSwKLQkweGJkLCAweGMyLCAweDllLCAweGYxLCAweDEyLCAweGY0LCAweGE3LCAweDBhLCAweGJlLCAweDU1LCAweGQwLCAweDQ3LAotCTB4MDUsIDB4NmQsIDB4NTUsIDB4ZjIsIDB4M2UsIDB4MTMsIDB4ZmEsIDB4ZjUsIDB4YjUsIDB4NjgsIDB4MWMsIDB4MmMsCi0JMHhjNywgMHhlZCwgMHhmZCwgMHhiOSwgMHhmZCwgMHhmYSwgMHg4NiwgMHhjMSwgMHg2YSwgMHhkYywgMHhiNiwgMHg3ZCwKLQkweDM5LCAweDRhLCAweGY3LCAweDdhLCAweGIxLCAweDc4LCAweGJiLCAweGVjLCAweDBkLCAweDJjLCAweDQzLCAweGYxLAotCTB4ZTgsIDB4YWYsIDB4NGEsIDB4ZWQsIDB4OWMsIDB4YmIsIDB4YjcsIDB4OTksIDB4NzMsIDB4ZDQsIDB4NGMsIDB4Y2UsCi0JMHgxOSwgMHg2YywgMHg4ZSwgMHg0MSwgMHhkNiwgMHgzYSwgMHgwZCwgMHgxNCwgMHg4ZCwgMHgxYSwgMHhlNCwgMHhhNiwKLQkweDU2LCAweGU3LCAweDBjLCAweDgzLCAweGYzLCAweGNjLCAweDdlLCAweDVlLCAweGMzLCAweGJjLCAweDY3LCAweDE2LAotCTB4YzcsIDB4ZWUsIDB4ZTIsIDB4YzcsIDB4ZDEsIDB4NmIsIDB4NTksIDB4NjcsIDB4NmYsIDB4NDAsIDB4NjcsIDB4MTksCi0JMHhmMywgMHg3MCwgMHhjNywgMHhlOCwgMHg1NSwgMHgwOCwgMHgwYywgMHgzNiwgMHhhMiwgMHg3NiwgMHhiNCwgMHgxYSwKLQkweGRhLCAweGEwLCAweDBmLCAweGFkLCAweGJkLCAweGUyLCAweDhiLCAweGMxLCAweDQwLCAweDVjLCAweDhkLCAweGMyLAotCTB4M2QsIDB4Y2EsIDB4MzgsIDB4ZGQsIDB4ZmIsIDB4N2IsIDB4ZWIsIDB4MjQsIDB4ZTcsIDB4YmEsIDB4OTksIDB4M2EsCi0JMHhiYiwgMHhiMywgMHhiNywgMHgxNSwgMHg5NSwgMHhhMywgMHhiNCwgMHhmMywgMHhmZSwgMHgzYiwgMHg1MCwgMHgzMSwKLQkweGU4LCAweDI2LCAweDRmLCAweDBlLCAweDIwLCAweDRiLCAweDVlLCAweGVjLCAweDE5LCAweGY0LCAweGEzLCAweGI0LAotCTB4NTcsIDB4NmIsIDB4YmQsIDB4NWQsIDB4NDEsIDB4NmMsIDB4MjYsIDB4NzMsIDB4YTksIDB4MjIsIDB4YjYsIDB4ZTUsCi0JMHhhMiwgMHgwZiwgMHgwZCwgMHhkMiwgMHg5NywgMHgxNywgMHhkMiwgMHhjZCwgMHgzYiwgMHg3YiwgMHgwNSwgMHg3NywKLQkweDQ0LCAweDI3LCAweDY3LCAweDZkLCAweDliLCAweDVlLCAweGQ5LCAweDdiLCAweGY5LCAweDMzLCAweGEzLCAweDM4LAotCTB4N2YsIDB4NjYsIDB4ZDQsIDB4YjQsIDB4Y2YsIDB4NzIsIDB4NTYsIDB4MWEsIDB4NTAsIDB4Y2UsIDB4Y2MsIDB4ZDIsCi0JMHg3YSwgMHg2YSwgMHg3OSwgMHhlZiwgMHg0MywgMHhjNiwgMHhmZCwgMHhhZiwgMHhmNiwgMHg3YSwgMHgxOCwgMHg3ZiwKLQkweDNhLCAweGYxLCAweGI5LCAweGE2LCAweGEwLCAweDM5LCAweGFhLCAweGJjLCAweGMyLCAweGYxLCAweGZmLCAweDg4LAotCTB4MDEsIDB4YjcsIDB4OGUsIDB4ZmQsIDB4ZmMsIDB4NzMsIDB4ZTUsIDB4NWYsIDB4YmEsIDB4MjYsIDB4MzYsIDB4ZWYsCi0JMHhhMiwgMHhiNSwgMHhiNCwgMHgyMywgMHhjYywgMHg5ZiwgMHhjNywgMHgyZiwgMHg1YSwgMHg0YiwgMHgxMywgMHgyYywKLQkweGJkLCAweGY0LCAweDRjLCAweDZkLCAweDYwLCAweGNhLCAweGZhLCAweDhjLCAweGNjLCAweDk5LCAweGNjLCAweDUzLAotCTB4NjEsIDB4N2QsIDB4YzYsIDB4NDQsIDB4ZDMsIDB4ZjUsIDB4MmUsIDB4MmMsIDB4ZWMsIDB4OTcsIDB4OWMsIDB4NDcsCi0JMHg2MiwgMHg3MSwgMHg4OCwgMHhiOSwgMHhjNiwgMHg2NiwgMHhjZSwgMHg4MywgMHhiZCwgMHhhZSwgMHhjMiwgMHg3YiwKLQkweDAxLCAweGUyLCAweDRiLCAweDgwLCAweDM5LCAweDQ0LCAweDkyLCAweGY3LCAweDRhLCAweDcwLCAweDViLCAweDdmLAotCTB4YjUsIDB4YmQsIDB4ODcsIDB4YjUsIDB4MzgsIDB4NzIsIDB4MTUsIDB4YzIsIDB4NTUsIDB4YjIsIDB4YmUsIDB4NzYsCi0JMHg2MSwgMHgxZCwgMHg2NiwgMHgwZSwgMHg3MywgMHg5NSwgMHgzMiwgMHgxYiwgMHhiYiwgMHgxNiwgMHg1MCwgMHhkNywKLQkweDU3LCAweGQxLCAweDI2LCAweDcyLCAweDc4LCAweDc1LCAweGZiLCAweDYwLCAweDBlLCAweDk3LCAweDdhLCAweGQ5LAotCTB4ZmYsIDB4NzEsIDB4NTcsIDB4Y2UsIDB4ZGUsIDB4ZDIsIDB4YjQsIDB4MzcsIDB4YWYsIDB4ZDYsIDB4YTIsIDB4YTQsCi0JMHgzMywgMHgwZCwgMHhkZSwgMHg2OSwgMHg5NywgMHgzZCwgMHg4YiwgMHgwMSwgMHg2ZiwgMHhhNSwgMHg1MSwgMHgzOCwKLQkweDI3LCAweDRjLCAweDRjLCAweGNiLCAweDNlLCAweDU4LCAweDk2LCAweGNmLCAweGRiLCAweDNlLCAweGE2LCAweGZjLAotCTB4YzcsIDB4ZTksIDB4ZWIsIDB4ZmEsIDB4M2YsIDB4NTEsIDB4NWYsIDB4NzIsIDB4YWUsIDB4YWMsIDB4YTAsIDB4MmYsCi0JMHg2ZCwgMHhjYSwgMHhkOSwgMHg4OCwgMHg5YywgMHhjZSwgMHhhYSwgMHgwZCwgMHgzOSwgMHg0YiwgMHg3OCwgMHg0MSwKLQkweDY3LCAweDc3LCAweDUxLCAweDY3LCAweGY1LCAweGU3LCAweDc1LCAweDc2LCAweDVkLCAweDVlLCAweDY3LCAweDI1LAotCTB4ZDQsIDB4NTksIDB4MzUsIDB4NzEsIDB4NTcsIDB4MzAsIDB4ZjksIDB4NWEsIDB4NjIsIDB4ZjIsIDB4YjcsIDB4ZWMsCi0JMHg3YiwgMHhiMywgMHhhOSwgMHg5NywgMHg5YywgMHhjZSwgMHgzNCwgMHhlYSwgMHg2YywgMHgyYSwgMHhkZSwgMHg1ZiwKLQkweDg1LCAweDc2LCAweGUyLCAweDdkLCAweDA1LCAweGUzLCAweDYxLCAweDk5LCAweDljLCAweGVkLCAweGJhLCAweGUxLAotCTB4MmEsIDB4ZGMsIDB4MzksIDB4NTgsIDB4ODIsIDB4YjksIDB4ODMsIDB4MmUsIDB4ZWEsIDB4ZDIsIDB4OGUsIDB4MDEsCi0JMHhlNCwgMHhmNCwgMHhhZSwgMHhmMywgMHg3YSwgMHg2YywgMHgxOCwgMHg5NCwgMHg3MSwgMHhhZCwgMHg1MSwgMHg3ZSwKLQkweGM4LCAweDcxLCAweDA1LCAweDhhLCAweDcyLCAweDdhLCAweDdjLCAweDI1LCAweDliLCAweGViLCAweDQzLCAweGI1LAotCTB4MjYsIDB4ZjEsIDB4YWMsIDB4NDUsIDB4NzksIDB4MzUsIDB4MjMsIDB4MzgsIDB4ZmIsIDB4M2QsIDB4ZWEsIDB4NmEsCi0JMHgwZCwgMHg5ZiwgMHgzNSwgMHg3OCwgMHg3ZCwgMHhlMCwgMHg1OCwgMHgzZSwgMHhmNiwgMHhiYywgMHg5ZiwgMHhlOCwKLQkweGViLCAweDdiLCAweGU3LCAweGY1LCAweGZhLCAweGM3LCAweGNiLCAweDE2LCAweGVjLCAweDRhLCAweGNlLCAweGZiLAotCTB4MTUsIDB4ZjQsIDB4YTUsIDB4NGQsIDB4YzEsIDB4NDgsIDB4Y2IsIDB4N2EsIDB4NWEsIDB4OWYsIDB4ODUsIDB4NzgsCi0JMHg3NSwgMHgzMCwgMHgyZCwgMHg2YiwgMHg0NiwgMHg2OSwgMHhmMiwgMHgxZCwgMHg0NywgMHhhZiwgMHhmNCwgMHg1OSwKLQkweDcyLCAweDAzLCAweGY1LCAweDY2LCAweGIyLCAweGJmLCAweDQ2LCAweDA3LCAweDNhLCAweDcxLCAweDQyLCAweGQ3LAotCTB4N2EsIDB4ZWUsIDB4YzMsIDB4YTcsIDB4ZDAsIDB4ZTUsIDB4YjMsIDB4YjAsIDB4NDcsIDB4NmYsIDB4NjcsIDB4ZWUsCi0JMHg1MywgMHg4YSwgMHg1NSwgMHg4ZCwgMHgzNCwgMHhmOSwgMHhiYiwgMHg2MiwgMHhlOCwgMHg0YiwgMHg5OSwgMHhlZCwKLQkweDBlLCAweGM4LCAweDlhLCAweGVjLCAweGY3LCAweGJmLCAweDkwLCAweDA4LCAweDA1LCAweGRiLCAweDU2LCAweDJiLAotCTB4YzAsIDB4ZTIsIDB4YTQsIDB4MWIsIDB4MDEsIDB4YzUsIDB4ZTYsIDB4MjYsIDB4ZTEsIDB4N2UsIDB4NTUsIDB4ZDYsCi0JMHg5NiwgMHhiNywgMHgxNywgMHhlNSwgMHhjZSwgMHg2YSwgMHhhOCwgMHgwOCwgMHhkNCwgMHg0OCwgMHgzYiwgMHhlZCwKLQkweDMwLCAweGM3LCAweGE0LCAweDJlLCAweGY1LCAweDM4LCAweDUzLCAweGMxLCAweDZkLCAweDMzLCAweDgzLCAweDY2LAotCTB4NWMsIDB4YjEsIDB4YWMsIDB4YTUsIDB4MTEsIDB4YTcsIDB4ZmQsIDB4N2MsIDB4Y2IsIDB4NTgsIDB4NDMsIDB4ZmMsCi0JMHg2ZSwgMHhmNSwgMHhlNywgMHg5NiwgMHg2OSwgMHhhZiwgMHg2NywgMHgwNywgMHhiZCwgMHgzMSwgMHhmNSwgMHg4ZiwKLQkweDhkLCAweDkzLCAweDc5LCAweDAzLCAweDczLCAweDg0LCAweGZkLCAweGY5LCAweDM1LCAweDVjLCAweDk3LCAweDExLAotCTB4NWUsIDB4YmUsIDB4YzcsIDB4NWUsIDB4NDcsIDB4ZmUsIDB4OTYsIDB4N2QsIDB4MmUsIDB4MjUsIDB4OWQsIDB4OTIsCi0JMHgzNSwgMHhjMCwgMHhhOCwgMHgwNywgMHhhNSwgMHhlZCwgMHhlOCwgMHgxYSwgMHhiYiwgMHgwMSwgMHgyMywgMHg4ZCwKLQkweGJmLCAweGIwLCAweDMyLCAweGI5LCAweGJlLCAweDhiLCAweDc5LCAweGJiLCAweDZiLCAweDhkLCAweDEzLCAweDVmLAotCTB4YjgsIDB4NzEsIDB4OTYsIDB4NzAsIDB4NDcsIDB4MzksIDB4NDMsIDB4NGEsIDB4ZGUsIDB4YWUsIDB4ZTQsIDB4YjgsCi0JMHhlYywgMHgwYywgMHhlZCwgMHgxNiwgMHgxYywgMHhiYywgMHg0OCwgMHhhNiwgMHhhYywgMHgzMSwgMHgxNCwgMHg2NCwKLQkweGI2LCAweDUxLCAweDllLCAweGM4LCAweDc1LCAweDUxLCAweDU3LCAweGZmLCAweDZlLCAweDBkLCAweGZhLCAweGE2LAotCTB4OTYsIDB4ZmIsIDB4NDcsIDB4NzcsIDB4MmUsIDB4YzYsIDB4NDksIDB4YjksIDB4NDIsIDB4YmIsIDB4YzIsIDB4ZWQsCi0JMHgzZSwgMHhiMCwgMHg4NiwgMHgyZSwgMHgyYSwgMHhmNywgMHg2YSwgMHg5ZSwgMHgzMywgMHgzZCwgMHhlNCwgMHg5MSwKLQkweDMzLCAweDJkLCAweGU5LCAweDU0LCAweDMxLCAweGY5LCAweGQ0LCAweDA5LCAweDZiLCAweGVmLCAweDQ1LCAweDY1LAotCTB4M2UsIDB4YmMsIDB4YTQsIDB4NGMsIDB4M2QsIDB4NzMsIDB4YjUsIDB4N2YsIDB4YjEsIDB4ODYsIDB4MmYsIDB4MmEsCi0JMHg1MywgMHg1OSwgMHg3YSwgMHg3MSwgMHg5OSwgMHg2YiwgMHg4OCwgMHhiMywgMHhhZiwgMHg1YSwgMHhiYiwgMHgyZiwKLQkweDJhLCAweGYzLCAweDc3LCAweDk3LCAweGM4LCAweDk5LCAweDRiLCAweDFiLCAweDdmLCAweGRhLCAweGRhLCAweDk3LAotCTB4MmYsIDB4ZTMsIDB4NjQsIDB4OTksIDB4NzUsIDB4ZGEsIDB4NTMsIDB4ZjksIDB4YmMsIDB4YmMsIDB4NTAsIDB4YTYsCi0JMHg3MCwgMHhiZiwgMHhhNCwgMHhlYywgMHhkMiwgMHhmYiwgMHgzOSwgMHg5OSwgMHhlMSwgMHg0YiwgMHg2NCwgMHgwNiwKLQkweDRkLCAweDk5LCAweDZmLCAweDU3LCAweDUzLCAweDYxLCAweGJlLCAweGEzLCAweGY5LCAweGZiLCAweGRmLCAweDI4LAotCTB4YmIsIDB4YjgsIDB4ZGMsIDB4YzQsIDB4MjUsIDB4ZDcsIDB4MDUsIDB4NzksIDB4N2YsIDB4ZWQsIDB4YmUsIDB4ZjgsCi0JMHg3ZSwgMHg2NSwgMHhmMSwgMHhjNSwgMHhkNywgMHhiYiwgMHg4YiwgMHg3MiwgMHhkNywgMHgwNSwgMHg5ZCwgMHg2ZSwKLQkweGI5LCAweGU0LCAweGY5LCAweDdmLCAweDJiLCAweGJhLCAweGY4LCAweGZhLCAweGM2LCAweGUyLCAweGNiLCAweGI3LAotCTB4ZjMsIDB4OTMsIDB4NGIsIDB4ZWUsIDB4MmIsIDB4NWQsIDB4ZjIsIDB4ZmUsIDB4ODksIDB4YzMsIDB4NTAsIDB4MmIsCi0JMHhiYSwgMHhhMiwgMHhhYiwgMHg2ZSwgMHg4YSwgMHg2NywgMHg3YiwgMHg2OCwgMHg5ZiwgMHg2MiwgMHg1YiwgMHhhYiwKLQkweDZmLCAweDVhLCAweDkxLCAweDNkLCAweDc5LCAweDdlLCAweDhmLCAweDNiLCAweGFkLCAweDJmLCAweGYwLCAweDdiLAotCTB4ZjEsIDB4NTksIDB4YWMsIDB4YjAsIDB4ZjcsIDB4ZDIsIDB4NjQsIDB4OGQsIDB4YzcsIDB4ZTQsIDB4MTgsIDB4ZWQsCi0JMHg3NywgMHg1MSwgMHhkYywgMHg4YSwgMHgxMSwgMHg4NywgMHg2ZSwgMHg5ZiwgMHgwNywgMHg1ZCwgMHg4OSwgMHhmYSwKLQkweGFjLCAweGJkLCAweDhmLCAweDE3LCAweDhlLCAweGUzLCAweGEwLCAweGRhLCAweGFhLCAweDk5LCAweGY5LCAweDczLAotCTB4N2UsIDB4ZTYsIDB4OGQsIDB4NWUsIDB4YzQsIDB4YTYsIDB4ZTYsIDB4ZDIsIDB4ODEsIDB4NjEsIDB4ZmIsIDB4MmMsCi0JMHg2OSwgMHgwNywgMHhiYSwgMHhlZCwgMHg3MywgMHhhYSwgMHhlZCwgMHhmOSwgMHhmMywgMHhhNCwgMHhjYiwgMHhhMSwKLQkweDY1LCAweDBiLCAweDdjLCAweDRiLCAweGQ2LCAweDY0LCAweGU1LCAweDZjLCAweDg1LCAweDQ1LCAweDFmLCAweDE0LAotCTB4ZmUsIDB4NzAsIDB4NDAsIDB4NTEsIDB4OTMsIDB4ZjYsIDB4YmEsIDB4ZTcsIDB4MzIsIDB4MDcsIDB4NDIsIDB4Y2QsCi0JMHgyZCwgMHgwYSwgMHhlMiwgMHgyNSwgMHg0NiwgMHgyOCwgMHhmMCwgMHg0ZSwgMHgxZSwgMHgyYiwgMHg1ZCwgMHgyMywKLQkweGViLCAweDk0LCAweGEyLCAweDkxLCAweDFlLCAweGM1LCAweDM5LCAweDkyLCAweGMzLCAweDRhLCAweGM3LCAweDg4LAotCTB4ZjAsIDB4ZmIsIDB4NmEsIDB4OTYsIDB4ZjEsIDB4NjIsIDB4ZDYsIDB4M2MsIDB4MjcsIDB4NWUsIDB4NDgsIDB4NTQsCi0JMHhkOCwgMHhlZiwgMHgzNCwgMHhhYywgMHg5ZiwgMHg1NywgMHg4NCwgMHgwNywgMHgyMywgMHgwYSwgMHg1YSwgMHhlNywKLQkweDFjLCAweGM2LCAweDQ5LCAweGU2LCAweDMyLCAweDg3LCAweDEzLCAweDY2LCAweDY0LCAweDg4LCAweDZkLCAweDRlLAotCTB4MjQsIDB4NTQsIDB4MWMsIDB4MWEsIDB4NTgsIDB4MTcsIDB4MTksIDB4YjQsIDB4ZGIsIDB4MzcsIDB4ZDEsIDB4NmQsCi0JMHhlZiwgMHg1YiwgMHgyZCwgMHhiMywgMHgzNiwgMHhhNiwgMHg5NiwgMHg1YiwgMHgxYiwgMHg1MiwgMHg0ZSwgMHhlNiwKLQkweDlmLCAweGQ1LCAweGYxLCAweDRhLCAweGQ2LCAweDNmLCAweDM5LCAweDZmLCAweDE1LCAweDRlLCAweGIxLCAweGNjLAotCTB4NDgsIDB4NjIsIDB4MzUsIDB4M2UsIDB4YzgsIDB4N2EsIDB4ZWQsIDB4ZjUsIDB4OWEsIDB4MWYsIDB4NjQsIDB4M2QsCi0JMHhjYywgMHhhNywgMHg1YSwgMHhmMSwgMHg0MiwgMHg3NiwgMHgxOSwgMHg5ZSwgMHgxZiwgMHg5MCwgMHgzMywgMHhlNCwKLQkweDJkLCAweDU4LCAweDkwLCAweDUwLCAweGIwLCAweDM4LCAweGI0LCAweDBjLCAweGM3LCAweDg2LCAweDk2LCAweGUxLAotCTB4ZjAsIDB4ODAsIDB4YmMsIDB4NDcsIDB4NzAsIDB4NDUsIDB4ZmUsIDB4Y2MsIDB4YjksIDB4M2MsIDB4OGYsIDB4ZjEsCi0JMHhmOSwgMHg1MiwgMHg0YywgMHgwYywgMHhmOSwgMHg5OSwgMHgwYiwgMHhlOSwgMHg3OCwgMHgzMywgMHhlYiwgMHhjMywKLQkweDYwLCAweGEyLCAweDExLCAweGM3LCAweGM5LCAweGU3LCAweDlmLCAweDQ5LCAweDM0LCAweGUzLCAweDJjLCAweGFmLAotCTB4MGYsIDB4MjQsIDB4ODQsIDB4MDcsIDB4NDUsIDB4NzEsIDB4MjYsIDB4ZmIsIDB4N2QsIDB4MTQsIDB4MjUsIDB4NmIsCi0JMHg3MSwgMHhhNCwgMHhlZCwgMHg2OSwgMHhhOCwgMHhjOSwgMHgwMywgMHhmYywgMHhiNCwgMHhlMiwgMHhmOCwgMHg1MCwKLQkweDJiLCAweDRlLCAweDBjLCAweGRjLCAweDg2LCAweDEzLCAweDQzLCAweDNmLCAweGMzLCAweGM5LCAweDAxLCAweGU5LAotCTB4YWYsIDB4OWMsIDB4MmIsIDB4MTcsIDB4YjksIDB4MWEsIDB4ZTUsIDB4MmUsIDB4YzMsIDB4ZjgsIDB4ZDAsIDB4OWYsCi0JMHgyMywgMHhmYiwgMHgzZCwgMHhlYiwgMHhjOCwgMHgzMiwgMHg5MSwgMHhmYiwgMHhmNCwgMHgyNywgMHhjOCwgMHhjZSwKLQkweGU1LCAweDRhLCAweDcyLCAweDY2LCAweGY0LCAweDU4LCAweGMyLCAweDhkLCAweGEzLCAweDg5LCAweGYxLCAweDZiLAotCTB4NGIsIDB4MzAsIDB4N2UsIDB4MjMsIDB4OTEsIDB4MGUsIDB4MWIsIDB4OTksIDB4YzMsIDB4MWQsIDB4NGEsIDB4Y2IsCi0JMHhiYSwgMHhkZiwgMHg2NywgMHg5OCwgMHgxNywgMHhhZiwgMHhjMywgMHhmYSwgMHhiMSwgMHg2MiwgMHhiYywgMHg5MCwKLQkweDc2LCAweDUzLCAweGM3LCAweDM3LCAweDIyLCAweDU2LCAweGQ1LCAweDRlLCAweGZkLCAweDc5LCAweGYwLCAweDYyLAotCTB4YzIsIDB4ODcsIDB4OTcsIDB4MTIsIDB4MGQsIDB4OGMsIDB4MGYsIDB4NGQsIDB4YzgsIDB4YWQsIDB4NzcsIDB4N2EsCi0JMHhhOCwgMHhlZiwgMHgwZSwgMHhiYiwgMHg0ZiwgMHgyZiwgMHgyNCwgMHg5NiwgMHg1OSwgMHhlYiwgMHhhOSwgMHhlMywKLQkweDllLCAweGQ0LCAweGQ3LCAweGVjLCAweDMzLCAweGUxLCAweGNmLCAweDI3LCAweGNlLCAweDMwLCAweDI3LCAweDM5LAotCTB4OGEsIDB4YzcsIDB4YTksIDB4ZDMsIDB4NjMsIDB4ODksIDB4MzgsIDB4MzksIDB4NjMsIDB4MWQsIDB4ZTcsIDB4NjgsCi0JMHgxYywgMHg0MywgMHhkOSwgMHhiNSwgMHg3OCwgMHgzMywgMHhhZCwgMHgxZCwgMHg1ZCwgMHg4MSwgMHhiNSwgMHgzOCwKLQkweDliLCAweDI5LCAweGM2LCAweGViLCAweDZjLCAweGEzLCAweDcyLCAweGFlLCAweDEzLCAweDkzLCAweGI2LCAweGJjLAotCTB4YjUsIDB4ZjgsIDB4MjAsIDB4YWQsIDB4MzAsIDB4OGUsIDB4YWYsIDB4YzUsIDB4ZmIsIDB4N2MsIDB4ZjYsIDB4MzIsCi0JMHg3ZiwgMHg5ZiwgMHg4YSwgMHhiMCwgMHg4NywgMHhmOSwgMHg2NywgMHgyNywgMHhjOCwgMHhlYiwgMHg2NSwgMHg3ZCwKLQkweGFiLCAweDJiLCAweGJhLCAweDE2LCAweGM3LCAweDMzLCAweGNmLCAweDkyLCAweDBiLCAweDU3LCAweGUyLCAweDYxLAotCTB4N2QsIDB4MWEsIDB4OWEsIDB4YTcsIDB4OTEsIDB4OGIsIDB4NjksIDB4YzUsIDB4MzgsIDB4YzYsIDB4ZTcsIDB4MzMsCi0JMHg4OSwgMHhiZiwgMHhlMywgMHhkZSwgMHg1YywgMHhmOSwgMHhmNywgMHgzOCwgMHg5ZSwgMHgwNywgMHgyOSwgMHhlYiwKLQkweGRkLCAweGNjLCAweDM3LCAweDI5LCAweDc3LCAweDNlLCAweGIyLCAweDkxLCAweDZmLCAweDUyLCAweGVlLCAweGNmLAotCTB4MzAsIDB4OWMsIDB4ZDcsIDB4YzcsIDB4NzEsIDB4NWQsIDB4YzYsIDB4ZjUsIDB4ZjUsIDB4NzIsIDB4YzksIDB4YTksCi0JMHgyNywgMHgxMiwgMHhkZiwgMHhlMCwgMHg3NywgMHgwNywgMHgyNiwgMHhiMywgMHgzYiwgMHhmOCwgMHhmZCwgMHgwMywKLQkweGVjLCAweDYzLCAweDhjLCAweDRlLCAweGE0LCAweDJlLCAweGU1LCAweGUzLCAweGQzLCAweGIxLCAweGE5LCAweGFmLAotCTB4MjIsIDB4NWUsIDB4NDUsIDB4ZmIsIDB4ODksIDB4NWMsIDB4NWYsIDB4ODksIDB4ZDksIDB4OTEsIDB4MDQsIDB4MzYsCi0JMHhlZiwgMHg3NiwgMHg2MiwgMHgxMywgMHhmMSwgMHg3NiwgMHg3MywgMHhiMiwgMHgxYSwgMHgzYiwgMHhiNywgMHg3OSwKLQkweDkxLCAweGRhLCAweDc2LCAweDI1LCAweDdhLCAweGI3LCAweDVkLCAweDhkLCAweGU0LCAweGI2LCAweDNhLCAweDZjLAotCTB4ZGMsIDB4NDYsIDB4OWQsIDB4Y2YsIDB4YjUsIDB4YWMsIDB4OTMsIDB4MTEsIDB4Y2IsIDB4M2EsIDB4Y2MsIDB4Y2YsCi0JMHg1ZSwgMHg3ZSwgMHhkZSwgMHhkMywgMHhjNSwgMHgzZiwgMHg2MiwgMHgwOCwgMHhkYiwgMHg3ZSwgMHhkMiwgMHg0MiwKLQkweDNmLCAweDkxLCAweDZmLCAweDBkLCAweGQ3LCAweDY0LCAweGQ3LCAweDQ0LCAweDY2LCAweDhlLCAweGFlLCAweDhkLAotCTB4MzQsIDB4OGMsIDB4NGUsIDB4NDcsIDB4NzcsIDB4NWYsIDB4MGQsIDB4ZDYsIDB4NmYsIDB4YWIsIDB4OGUsIDB4N2IsCi0JMHhkOSwgMHg4ZSwgMHhmNywgMHg3YSwgMHgwYiwgMHg5ZCwgMHhmNCwgMHg5ZiwgMHg2NywgMHhmNCwgMHg5ZSwgMHhjOCwKLQkweGZjLCAweGQxLCAweGE3LCAweGM5LCAweDQzLCAweDdkLCAweGQ4LCAweGQ5LCAweGU3LCAweDY3LCAweDFiLCAweDBhLAotCTB4MmEsIDB4MzUsIDB4ZTcsIDB4YWEsIDB4NGEsIDB4OGUsIDB4ZTMsIDB4NjgsIDB4ZTQsIDB4MDAsIDB4Y2EsIDB4NDcsCi0JMHhiZiwgMHg0ZiwgMHg5ZSwgMHhlNywgMHhjMywgMHhjNiwgMHhiZSwgMHgyMiwgMHg3OSwgMHg0ZiwgMHgwOCwgMHhiZCwKLQkweDUxLCAweDBiLCAweGVmLCAweGU5LCAweGUzLCAweDI4LCAweGEzLCAweGJjLCAweGFlLCAweGJlLCAweDBhLCAweDc0LAotCTB4NmYsIDB4ZjMsIDB4NTAsIDB4NjYsIDB4MDUsIDB4MWUsIDB4ZGIsIDB4NTYsIDB4MWEsIDB4MmYsIDB4MzIsIDB4NDQsCi0JMHhkZSwgMHgxMiwgMHhmYywgMHg3NCwgMHhlNCwgMHg2YiwgMHhkOCwgMHgzNCwgMHhlNiwgMHg0MSwgMHgwZiwgMHhlZiwKLQkweGFmLCAweGRiLCAweGU2LCAweDc1LCAweGJmLCAweGMwLCAweDNhLCAweGVkLCAweDZjLCAweGViLCAweGJmLCAweGYxLAotCTB4ZjMsIDB4MDEsIDB4ZmIsIDB4NWQsIDB4MWMsIDB4NTksIDB4ODMsIDB4Y2QsIDB4NjMsIDB4YzIsIDB4NmQsIDB4OGUsCi0JMHhjMiwgMHgzZiwgMHhkYSwgMHg4YSwgMHg5NywgMHg0NywgMHhkYSwgMHhmMCwgMHhiNywgMHgyMywgMHhmZiwgMHhlYSwKLQkweDQxLCAweGM1LCAweDMyLCAweGRjLCAweDNmLCAweDIyLCAweGZiLCAweGVlLCAweDcxLCAweGRjLCAweDkzLCAweDEwLAotCTB4M2MsIDB4NWEsIDB4ODksIDB4M2QsIDB4MDksIDB4ZDksIDB4YmYsIDB4NmMsIDB4YzcsIDB4YjMsIDB4MDksIDB4YjEsCi0JMHhkZiwgMHhlNSwgMHhiNCwgMHhkZiwgMHgwZSwgMHhlNiwgMHg3NCwgMHg5MiwgMHg0NywgMHg2NCwgMHgyMiwgMHhmNSwKLQkweGEzLCAweGRmLCAweDhlLCAweDVjLCAweDMzLCAweGZhLCAweDczLCAweDcyLCAweGYwLCAweGExLCAweDQ4LCAweDY4LAotCTB4NzQsIDB4MjcsIDB4YzcsIDB4MzksIDB4NDksIDB4NWUsIDB4N2QsIDB4ODIsIDB4NWMsIDB4ZmIsIDB4NzUsIDB4NzIsCi0JMHhlMSwgMHg0MiwgMHgxYywgMHhmYywgMHhhZiwgMHhjZSwgMHg1YywgMHg4ZSwgMHg1MiwgMHhjOCwgMHgwMywgMHgwYiwKLQkweDZiLCAweGVkLCAweDk2LCAweGU1LCAweDYwLCAweDllLCAweGIzLCAweGQwLCAweDJiLCAweGI5LCAweDQyLCAweDE3LAotCTB4ZDYsIDB4ZWYsIDB4NTgsIDB4OGQsIDB4MGQsIDB4M2IsIDB4MWEsIDB4YmMsIDB4N2IsIDB4MTksIDB4YjMsIDB4NjIsCi0JMHgzZSwgMHhlMSwgMHhlZSwgMHhmOSwgMHhmYywgMHhlZSwgMHhmYywgMHgxYSwgMHg5OCwgMHhhYywgMHhkOSwgMHg3NywKLQkweGQwLCAweGU3LCAweGQ3LCAweGQ5LCAweGU3LCAweDM4LCAweDRiLCAweDM1LCAweDA0LCAweDRhLCAweGI0LCAweGRmLAotCTB4NWEsIDB4YjEsIDB4ZjMsIDB4ZjUsIDB4ZGIsIDB4MmQsIDB4NTksIDB4OTcsIDB4MmQsIDB4MzYsIDB4MTQsIDB4OGMsCi0JMHg2OSwgMHg2ZCwgMHhmNiwgMHg3ZSwgMHhkOCwgMHg3MSwgMHg5YiwgMHg4ZiwgMHg3NSwgMHgyMSwgMHgzNSwgMHg0YywKLQkweDZlLCAweGJjLCAweDRiLCAweGM2LCAweGIxLCAweDUyLCAweGM2LCAweDYxLCAweGFhLCAweGRhLCAweDMyLCAweDZiLAotCTB4NWQsIDB4MGEsIDB4YjcsIDB4MTYsIDB4MzEsIDB4YmYsIDB4NTgsIDB4MzUsIDB4NTIsIDB4ODQsIDB4ZjgsIDB4OWUsCi0JMHg1MiwgMHhkYywgMHhiMywgMHg2ZCwgMHhiOSwgMHg5NSwgMHg0YSwgMHgwOSwgMHhmZiwgMHg5NiwgMHgzYywgMHhiYiwKLQkweDE0LCAweDlkLCAweGJjLCAweGI3LCAweGE2LCAweDRmLCAweGY2LCAweDIxLCAweDQyLCAweDFkLCAweGI1LCAweDhlLAotCTB4NTIsIDB4M2MsIDB4YjQsIDB4OGIsIDB4ZmQsIDB4ZDgsIDB4YjUsIDB4MDQsIDB4ZjEsIDB4NWQsIDB4NDcsIDB4NjAsCi0JMHg2NiwgMHg1NCwgMHg4YywgMHgwYywgMHgzOCwgMHhlMSwgMHgzNywgMHg0ZSwgMHg5MywgMHg2ZiwgMHhmZCwgMHgwYywKLQkweGM5LCAweDIxLCAweDE1LCAweGQ5LCAweDAxLCAweDQ1LCAweGRiLCAweDE4LCAweDFhLCAweGM1LCAweGM2LCAweDIxLAotCTB4MjcsIDB4ZjYsIDB4MjYsIDB4NWEsIDB4ZjAsIDB4MzYsIDB4NzEsIDB4NmUsIDB4MzAsIDB4MTEsIDB4YzMsIDB4NzEsCi0JMHhlYSwgMHg3NiwgMHg3MiwgMHhjZiwgMHgzMiwgMHg3ZSwgMHgzYywgMHhmNCwgMHhmNywgMHg4MywgMHhmNCwgMHg5ZCwKLQkweDMwLCAweGJhLCAweGU5LCAweDQ3LCAweDA3LCAweDEzLCAweDFhLCAweDFlLCAweGNiLCAweGRlLCAweDBjLCAweDczLAotCTB4ZTgsIDB4MGUsIDB4NmMsIDB4MWUsIDB4MzIsIDB4ZjEsIDB4ZTgsIDB4OGUsIDB4MzYsIDB4N2UsIDB4MWIsIDB4NzgsCi0JMHg3NCwgMHhlOCwgMHg2YiwgMHg1OCwgMHgzMywgMHg3MiwgMHgxNCwgMHg5YiwgMHhiMiwgMHg3MSwgMHhiYywgMHgzMywKLQkweGYyLCAweDJjLCAweDkyLCAweDY5LCAweDlkLCAweGJlLCAweDIxLCAweGRjLCAweDRkLCAweGMxLCAweGU2LCAweDc5LAotCTB4Y2YsIDB4NjIsIDB4NzMsIDB4ZTYsIDB4MzAsIDB4MzYsIDB4YTYsIDB4M2IsIDB4YzksIDB4MDksIDB4MGYsIDB4NjMsCi0JMHgwMywgMHg3ZiwgMHhhZiwgMHg0ZiwgMHg2YiwgMHhmZSwgMHg0MSwgMHgxYywgMHg0NiwgMHg3NywgMHg2NiwgMHgyZCwKLQkweDNhLCAweGZiLCAweDQ0LCAweDVmLCAweDBhLCAweGNlLCAweGRlLCAweGIwLCAweDE2LCAweDBmLCAweGVmLCAweGVhLAotCTB4YzAsIDB4MDMsIDB4MjMsIDB4M2YsIDB4YzAsIDB4Y2UsIDB4ZWMsIDB4YjMsIDB4ZTgsIDB4NGQsIDB4MjcsIDB4OTAsCi0JMHhkYSwgMHgyYSwgMHhmYSwgMHhhYywgMHhjNCwgMHgwZiwgMHgyMiwgMHg3OCwgMHhhMCwgMHgxMiwgMHhhMSwgMHhiNiwKLQkweGE0LCAweDIyLCAweGIyLCAweGQ2LCAweDYwLCAweDEzLCAweGZkLCAweDdhLCAweDYzLCAweDRhLCAweGY0LCAweGZiLAotCTB4MzQsIDB4ZGIsIDB4M2MsIDB4NDAsIDB4YmMsIDB4NTgsIDB4NDMsIDB4N2QsIDB4M2MsIDB4YzIsIDB4NGYsIDB4NjEsCi0JMHhjZiwgMHg3NiwgMHhlYSwgMHgzZSwgMHg4MywgMHhmOCwgMHg4YiwgMHhkZiwgMHhjZSwgMHhlNSwgMHg0YiwgMHg3YiwKLQkweDI1LCAweGFmLCAweDFjLCAweDBmLCAweDk2LCAweDkyLCAweDhiLCAweDk0LCAweGY0LCAweDhhLCAweDNlLCAweGRiLAotCTB4YWQsIDB4YWUsIDB4ZDQsIDB4ZjgsIDB4NjcsIDB4NGIsIDB4MjAsIDB4NzMsIDB4MTAsIDB4MjAsIDB4NzYsIDB4ZmYsCi0JMHgwYywgMHhlYiwgMHhlOSwgMHg4ZiwgMHhiNywgMHhjYSwgMHhlMSwgMHgxNSwgMHhjNiwgMHhhMSwgMHg0MywgMHhmNCwKLQkweGU3LCAweGI4LCAweGNmLCAweGIyLCAweDllLCAweGQyLCAweDU5LCAweGFkLCAweGI3LCAweDgzLCAweDc4LCAweGU1LAotCTB4Y2EsIDB4ZWYsIDB4YzUsIDB4OGQsIDB4NWYsIDB4NWIsIDB4NDEsIDB4MTksIDB4ZTUsIDB4YmQsIDB4NWQsIDB4NzIsCi0JMHhlNiwgMHg0NSwgMHhjZiwgMHhlNSwgMHhiYywgMHg5NiwgMHhiNSwgMHgyNSwgMHg1NCwgMHhiMCwgMHg5ZiwgMHhmMSwKLQkweDZiLCAweGNiLCAweDMxLCAweDRkLCAweGQ2LCAweDhmLCAweDliLCAweDczLCAweGVmLCAweGMxLCAweDlkLCAweDYzLAotCTB4NWMsIDB4ZWMsIDB4YzIsIDB4OTYsIDB4ZTEsIDB4YjYsIDB4YmMsIDB4MWQsIDB4ZmQsIDB4YmYsIDB4OTIsIDB4NzcsCi0JMHhiOSwgMHgzZCwgMHhiZSwgMHg2YiwgMHhlYywgMHg3NSwgMHgxZiwgMHhkOCwgMHg2NywgMHhlYSwgMHg4MSwgMHg3YiwKLQkweDEzLCAweGIyLCAweDZmLCAweGEyLCAweGRlLCAweDQwLCAweDU2LCAweDQ1LCAweDBiLCAweDJkLCAweGM2LCAweDYxLAotCTB4ZmQsIDB4NGEsIDB4NzQsIDB4OTMsIDB4NzcsIDB4ZGUsIDB4YTIsIDB4MTcsIDB4NjEsIDB4YjgsIDB4ZDEsIDB4YzAsCi0JMHhhNCwgMHhkNywgMHg2YywgMHgxMywgMHhjZSwgMHg1NiwgMHg2NiwgMHg4YywgMHhiNywgMHg3ZiwgMHgzOSwgMHgxNCwKLQkweDk0LCAweGJjLCAweDEwLCAweDYxLCAweDYyLCAweDA4LCAweDZjLCAweGNlLCAweGQ2LCAweDgzLCAweDY0LCAweDRhLAotCTB4ODEsIDB4NDcsIDB4YmIsIDB4MDMsIDB4ZDksIDB4MmEsIDB4OWYsIDB4YjQsIDB4MWYsIDB4MmUsIDB4OWMsIDB4YmYsCi0JMHgyYywgMHhkNiwgMHhjZSwgMHhlNSwgMHhkZiwgMHg3ZCwgMHg1YiwgMHhjMiwgMHhmOSwgMHhhMCwgMHg2ZCwgMHhjZiwKLQkweGI0LCAweGFjLCAweGI2LCAweDQ4LCAweDAwLCAweGY1LCAweGExLCAweDg2LCAweDQwLCAweDk1LCAweGZhLCAweDBiLAotCTB4Y2IsIDB4OTQsIDB4M2QsIDB4YTksIDB4MzEsIDB4MzksIDB4MGYsIDB4NzgsIDB4YjksIDB4ZmMsIDB4ZmQsIDB4MjEsCi0JMHg2YywgMHhkYywgMHgzYSwgMHgwNywgMHg5MywgMHgzZSwgMHg5MSwgMHhmOSwgMHg0NCwgMHg3OSwgMHg0ZSwgMHg4ZSwKLQkweGFjLCAweDVmLCAweGJjLCAweDVhLCAweDgxLCAweGQyLCAweDFlLCAweGZhLCAweDRhLCAweDBmLCAweDdhLCAweDUyLAotCTB4MmEsIDB4ZGIsIDB4NzgsIDB4ZDMsIDB4MmEsIDB4OWUsIDB4MmUsIDB4ZTMsIDB4ZmUsIDB4MWYsIDB4MTUsIDB4YjksCi0JMHgzMiwgMHhhZiwgMHg1NSwgMHgwOCwgMHhiZiwgMHhkOCwgMHg5NCwgMHhlYSwgMHhhMSwgMHhlZSwgMHg1NCwgMHhjNiwKLQkweDliLCAweDdmLCAweGIxLCAweDhlLCAweGY4LCAweGFhLCAweGY5LCAweDNjLCAweDllLCAweDk3LCAweGIxLCAweDRlLAotCTB4ZDYsIDB4ZDEsIDB4ZjQsIDB4MTgsIDB4ZTQsIDB4ZGUsIDB4MmIsIDB4MmMsIDB4MmIsIDB4ZmEsIDB4ZWEsIDB4YTEsCi0JMHgxZSwgMHgxYywgMHhlNCwgMHg5ZSwgMHgzZSwgMHg3NCwgMHg3YSwgMHg3MywgMHg2YiwgMHgzNCwgMHgxNywgMHhjNiwKLQkweDIxLCAweDY1LCAweDY0LCAweDJjLCAweDNkLCAweDQ4LCAweGE1LCAweDY0LCAweDFmLCAweGUzLCAweGFjLCAweDc1LAotCTB4NmEsIDB4YmEsIDB4M2MsIDB4MmYsIDB4YzksIDB4YjcsIDB4NTcsIDB4NmIsIDB4ZWYsIDB4YWQsIDB4M2QsIDB4OWEsCi0JMHg3MiwgMHg0YywgMHhlOSwgMHg5YiwgMHhkNCwgMHhiNSwgMHg2NSwgMHhiMywgMHhmZSwgMHhhNywgMHgyZSwgMHg2OSwKLQkweGQ3LCAweDZiLCAweDczLCAweDcyLCAweGQ1LCAweDllLCAweGE3LCAweDU3LCAweGYyLCAweGU1LCAweGNiLCAweGNiLAotCTB4MGIsIDB4ZWYsIDB4MmYsIDB4YzgsIDB4ZDksIDB4ZGUsIDB4MGIsIDB4NmQsIDB4NGYsIDB4MmQsIDB4MjMsIDB4NmIsCi0JMHgwMSwgMHhiOSwgMHhiYSwgMHhjZCwgMHgzYiwgMHgwYSwgMHhmMiwgMHgyZCwgMHhhYiwgMHg2OCwgMHg2ZSwgMHgzYiwKLQkweDZkLCAweGQ0LCAweGVhLCAweDJjLCAweDI2LCAweDQ2LCAweGJlLCAweDFkLCAweGY1LCAweDYzLCAweDdkLCAweDQyLAotCTB4NzQsIDB4YTQsIDB4ZjksIDB4ZjcsIDB4MTIsIDB4MDMsIDB4YmEsIDB4NmQsIDB4NGUsIDB4ZTEsIDB4NDIsIDB4NTcsCi0JMHhhNiwgMHg3MCwgMHhkZSwgMHg0NCwgMHhkNiwgMHgzZCwgMHhlNSwgMHhkYywgMHg5YSwgMHhiYywgMHg4NywgMHg0MywKLQkweDJlLCAweGU1LCAweDVkLCAweDEwLCAweDcwLCAweDkyLCAweDBmLCAweGRkLCAweDhiLCAweGZmLCAweGUwLCAweDVjLAotCTB4YzgsIDB4ZmIsIDB4MjQsIDB4YjksIDB4MzUsIDB4OTEsIDB4MzgsIDB4NmQsIDB4MjAsIDB4MTcsIDB4OTMsIDB4NDAsCi0JMHg1ZiwgMHgyNywgMHgxNywgMHhjYSwgMHg5ZiwgMHhiMywgMHhlZiwgMHhjYSwgMHhmZSwgMHg4NywgMHgzNSwgMHg2ZSwKLQkweDlmLCAweGIzLCAweGJmLCAweDcwLCAweGE2LCAweDIzLCAweGUzLCAweDk1LCAweDc3LCAweDM5LCAweDMxLCAweGU1LAotCTB4Y2MsIDB4M2QsIDB4NjMsIDB4ODgsIDB4MjYsIDB4NjcsIDB4ZjMsIDB4N2YsIDB4NjcsIDB4YWQsIDB4YjgsIDB4YTgsCi0JMHhlYywgMHg3OCwgMHg1NSwgMHhlZSwgMHgxZCwgMHg5NCwgMHg5OCwgMHhiYSwgMHg0MCwgMHgyYiwgMHhmMCwgMHgzYiwKLQkweGQ5LCAweDU3LCAweDEyLCAweDVlLCAweDc3LCAweDc3LCAweDY1LCAweDZlLCAweGJkLCAweDM1LCAweGQ4LCAweGRhLAotCTB4MDYsIDB4ZDksIDB4ZGIsIDB4MmUsIDB4ZjAsIDB4MzUsIDB4NGQsIDB4OWYsIDB4YWQsIDB4NzQsIDB4NjIsIDB4NTYsCi0JMHhhNCwgMHg1NCwgMHhkZSwgMHhhOSwgMHgwZCwgMHgzYSwgMHg4ZCwgMHhhMCwgMHhmNywgMHgyNCwgMHg0MiwgMHhlMSwKLQkweGMzLCAweGY2LCAweDU5LCAweDBjLCAweGYxLCAweDZkLCAweDBkLCAweGY3LCAweDY2LCAweDFiLCAweGE5LCAweDFiLAotCTB4NzksIDB4MWYsIDB4NWEsIDB4N2UsIDB4ZGIsIDB4ZjIsIDB4ZjksIDB4MWIsIDB4ZWUsIDB4NzIsIDB4NjIsIDB4ZmIsCi0JMHg0OCwgMHhkMiwgMHhmYywgMHhhZiwgMHgyZSwgMHg1YiwgMHg1ZSwgMHhiMCwgMHg3ZCwgMHhjOCwgMHg3ZSwgMHg1NywKLQkweGE5LCAweDIwLCAweGNmLCAweDczLCAweDE5LCAweDc5LCAweDYxLCAweGQ2LCAweDBmLCAweDUzLCAweDk2LCAweGM4LAotCTB4ZDAsIDB4MjgsIDB4ZTMsIDB4ZDIsIDB4ZjMsIDB4MzksIDB4ZDMsIDB4ZTMsIDB4OTIsIDB4MjMsIDB4ZWYsIDB4Y2IsCi0JMHhmMywgMHhiZSwgMHhjMywgMHg3ZiwgMHg5MCwgMHgyMywgMHg1ZiwgMHhiNiwgMHhjZCwgMHgxOCwgMHhkYiwgMHg2YywKLQkweDJkLCAweDU1LCAweDYyLCAweDExLCAweDc5LCAweDU3LCAweGE4LCAweDM4LCAweDEyLCAweDBhLCAweDNmLCAweDQ3LAotCTB4ZTcsIDB4NzQsIDB4MWEsIDB4MjEsIDB4ZmYsIDB4OTAsIDB4N2QsIDB4NjYsIDB4NDQsIDB4NzcsIDB4MmYsIDB4Y2MsCi0JMHhlNiwgMHhmMiwgMHgyOSwgMHg3MywgMHhlYywgMHg5MywgMHg3NSwgMHg1MiwgMHhhNiwgMHg2OSwgMHg2ZCwgMHgwZCwKLQkweDRhLCAweGVjLCAweDQ2LCAweDIyLCAweDM4LCAweGMyLCAweDExLCAweDA0LCAweDhhLCAweDhjLCAweDgyLCAweDhlLAotCTB4NDIsIDB4ZTEsIDB4OTMsIDB4OWMsIDB4Y2YsIDB4ODksIDB4NjgsIDB4ODgsIDB4NzgsIDB4MjksIDB4NWMsIDB4NDksCi0JMHhmNCwgMHhhMiwgMHhiYiwgMHg3MywgMHg3MywgMHhkZiwgMHgyOCwgMHg5YywgMHhkYSwgMHg3NCwgMHgzMSwgMHhlZSwKLQkweDBkLCAweDI3LCAweDY0LCAweDlkLCAweGFiLCAweGMxLCAweGJiLCAweDExLCAweDU1LCAweGI0LCAweDU3LCAweGM0LAotCTB4YmEsIDB4MWIsIDB4ZTMsIDB4ZDgsIDB4OTcsIDB4NDAsIDB4Y2MsIDB4MzEsIDB4YTcsIDB4MTIsIDB4NzEsIDB4OTIsCi0JMHg2NCwgMHg4NywgMHgxNiwgMHgyNywgMHhlZiwgMHg2OSwgMHgwOCwgMHg2ZiwgMHhhMiwgMHgwZCwgMHhjYSwgMHhkOSwKLQkweDQ2LCAweDEzLCAweDcxLCAweDFjLCAweDRhLCAweDJjLCAweGY4LCAweDRiLCAweDA3LCAweDRjLCAweGJkLCAweDBjLAotCTB4ZjIsIDB4YWUsIDB4MTYsIDB4YmUsIDB4NzgsIDB4NWIsIDB4MjgsIDB4MTgsIDB4NzgsIDB4M2UsIDB4N2YsIDB4ZTYsCi0JMHhhNSwgMHgyYiwgMHhmMSwgMHg5MSwgMHhiZCwgMHhhNywgMHhlNSwgMHhkMCwgMHgzZSwgMHhhOSwgMHg4YywgMHhkYiwKLQkweDVlLCAweGM3LCAweGRkLCAweDliLCAweGZlLCAweDM2LCAweGQ2LCAweDZkLCAweDY1LCAweDFmLCAweDk5LCAweGRmLAotCTB4MmYsIDB4ZDAsIDB4M2IsIDB4YjEsIDB4NTAsIDB4ZjcsIDB4NjAsIDB4YTUsIDB4NzcsIDB4NTYsIDB4YjMsIDB4OWMsCi0JMHhlOSwgMHgxOSwgMHhjYywgMHhlNCwgMHhkNiwgMHgzZCwgMHhkNiwgMHhkYiwgMHg2NywgMHg2YSwgMHgwNiwgMHhiMCwKLQkweDk5LCAweDNlLCAweDU2LCAweGEyLCAweGM5LCAweGI5LCAweGFiLCAweDk4LCAweGIyLCAweDM5LCAweGRiLCAweGEyLAotCTB4NmMsIDB4Y2EsIDB4YWYsIDB4YjMsIDB4ZjUsIDB4NjQsIDB4NWYsIDB4YWYsIDB4NDQsIDB4YTksIDB4ODksIDB4ZTMsCi0JMHhiYSwgMHhiYywgMHgyMywgMHgyOSwgMHg3MiwgMHg0ZCwgMHgwYywgMHg0NSwgMHhmZiwgMHg5NCwgMHg3NywgMHgyNSwKLQkweDQ1LCAweGE3LCAweDZiLCAweGQwLCAweDNkLCAweGYwLCAweDA4LCAweGJhLCAweDA2LCAweDVlLCAweGI0LCAweGNmLAotCTB4YjYsIDB4YmEsIDB4MzQsIDB4YjcsIDB4NzksIDB4YjUsIDB4MTEsIDB4M2MsIDB4NjAsIDB4ZTIsIDB4NjksIDB4YWYsCi0JMHhhYywgMHhlNywgMHhkNiwgMHgxOCwgMHg0NywgMHhiMSwgMHhkOSwgMHgyYiwgMHhlZiwgMHgwMCwgMHgwZSwgMHg5MCwKLQkweDAzLCAweDA4LCAweGNlLCAweDJkLCAweGM3LCAweDk3LCAweDkzLCAweDMyLCAweDg3LCAweDE1LCAweGM0LCAweGZjLAotCTB4NjAsIDB4NmMsIDB4YTUsIDB4M2QsIDB4ODcsIDB4OGQsIDB4MzgsIDB4MzYsIDB4ZmEsIDB4MDgsIDB4ZGUsIDB4ZGUsCi0JMHhkZSwgMHgwOSwgMHgzNSwgMHgxMiwgMHhmNCwgMHgyZiwgMHg4MiwgMHhkNSwgMHg3OSwgMHg0NCwgMHg4ZiwgMHg5OSwKLQkweDJlLCAweDA0LCAweGY3LCAweDM5LCAweDU0LCAweGUwLCAweGUwLCAweDc2LCAweGM5LCAweDY5LCAweGRiLCAweDcxLAotCTB4MjMsIDB4NjMsIDB4NmQsIDB4YTUsIDB4NjYsIDB4Y2QsIDB4ZmYsIDB4YjcsIDB4YjksIDB4YzEsIDB4MWUsIDB4Y2QsCi0JMHg2MSwgMHhmZSwgMHhmMywgMHg3NCwgMHgwNCwgMHhkMywgMHhjZCwgMHhhYSwgMHhkNiwgMHg3ZSwgMHhhNywgMHgwYSwKLQkweGM1LCAweDYzLCAweGM4LCAweDdiLCAweGViLCAweDlkLCAweGI4LCAweGEzLCAweGM5LCAweDYzLCAweDk2LCAweDFiLAotCTB4YzEsIDB4ZjQsIDB4OGIsIDB4NGEsIDB4MzAsIDB4NmMsIDB4YWEsIDB4OWYsIDB4ZTcsIDB4M2MsIDB4ODcsIDB4ZjEsCi0JMHhmYywgMHhhOCwgMHgxNywgMHhhZCwgMHhiZCwgMHgzYSwgMHgxNiwgMHhmNywgMHgzNiwgMHhkYSwgMHhiOCwgMHhhNSwKLQkweDZhLCAweGY1LCAweGNkLCAweDI1LCAweDhhLCAweDE3LCAweDhiLCAweDQ2LCAweDgxLCAweDg5LCAweGNjLCAweDcyLAotCTB4YmMsIDB4YjksIDB4NWQsIDB4NDcsIDB4MGIsIDB4OWYsIDB4ZjUsIDB4YTUsIDB4OWUsIDB4YWEsIDB4OTQsIDB4YjMsCi0JMHg2ZiwgMHgxZCwgMHhiYSwgMHhkOSwgMHhhMCwgMHgyMiwgMHg3NCwgMHhkNCwgMHhhNSwgMHg2MiwgMHhjMSwgMHgwYywKLQkweDIzLCAweDM0LCAweDNlLCAweGRmLCAweGUxLCAweDQ0LCAweGYzLCAweGE4LCAweDEzLCAweDc3LCAweGIxLCAweGNjLAotCTB4NDYsIDB4NjIsIDB4ZmEsIDB4OWQsIDB4YmQsIDB4NmUsIDB4ZjIsIDB4ODcsIDB4M2EsIDB4N2MsIDB4NDgsIDB4YWUsCi0JMHhmYiwgMHgyYiwgMHg3MiwgMHhkYSwgMHg0OSwgMHhjNiwgMHhlNiwgMHhjOSwgMHg2YywgMHgyOSwgMHhkYSwgMHhmYSwKLQkweDVkLCAweDcyLCAweDhlLCAweDY3LCAweGRjLCAweGM1LCAweGI5LCAweGE4LCAweDY4LCAweGYyLCAweGUxLCAweGQ0LAotCTB4OTAsIDB4MWIsIDB4OWYsIDB4ZGIsIDB4MWUsIDB4ZGMsIDB4MzksIDB4YTksIDB4ZDYsIDB4ZTAsIDB4ODMsIDB4YTEsCi0JMHg1MiwgMHg3YiwgMHhiZCwgMHhiMiwgMHhkYywgMHhiMCwgMHhiMCwgMHg4NSwgMHgzOCwgMHhmZCwgMHgxZSwgMHg5ZiwKLQkweGI1LCAweDZjLCAweDg3LCAweDkyLCAweDlkLCAweDc3LCAweDBkLCAweDc5LCAweGI5LCAweGM2LCAweGZhLCAweDY1LAotCTB4YjgsIDB4YWQsIDB4NWYsIDB4ZDYsIDB4NjgsIDB4NTQsIDB4YmMsIDB4MzMsIDB4YTQsIDB4ZTAsIDB4NjQsIDB4NDYsCi0JMHhjNywgMHgwMiwgMHhiNiwgMHhkNywgMHg5ZCwgMHgzYSwgMHg2OCwgMHhiOSwgMHhlOSwgMHhlNywgMHgyYiwgMHhiMiwKLQkweDNhLCAweGVlLCAweGNiLCAweDM0LCAweGEyLCAweDM3LCAweGY1LCAweDA2LCAweDM5LCAweDUwLCAweDEzLCAweGRlLAotCTB4ZDgsIDB4YTYsIDB4MWQsIDB4N2QsIDB4Y2IsIDB4MTEsIDB4MWEsIDB4OWYsIDB4ZTcsIDB4NjgsIDB4YzIsIDB4ZWIsCi0JMHg3YiwgMHg5YSwgMHhmMCwgMHhjMywgMHhiZSwgMHhmOSwgMHhmOCwgMHg3NCwgMHg1MywgMHgwYywgMHhhNywgMHhlNywKLQkweDM1LCAweGUxLCAweDk1LCAweDVkLCAweDhkLCAweGM0LCAweGU4LCAweDI4LCAweDAyLCAweDIzLCAweGUzLCAweGQ4LAotCTB4OTIsIDB4NmMsIDB4NDYsIDB4YzMsIDB4ODgsIDB4MDEsIDB4YWQsIDB4Y2YsIDB4ZWEsIDB4MmMsIDB4MzMsIDB4M2EsCi0JMHhiMSwgMHg1OSwgMHgzNywgMHgzMCwgMHg3YiwgMHg5NywgMHhlOCwgMHhjMSwgMHhiMiwgMHg1NiwgMHhjZSwgMHgzMywKLQkweGYwLCAweDVjLCAweDVhLCAweGEzLCAweDlmLCAweDFhLCAweGQ0LCAweDQzLCAweDIzLCAweDcxLCAweGQ2LCAweDQwLAotCTB4NjgsIDB4YWIsIDB4NzYsIDB4NjYsIDB4MzcsIDB4YWYsIDB4ZTcsIDB4ZWYsIDB4OGUsIDB4YTIsIDB4OWQsIDB4ZWQsCi0JMHgyNywgMHg1MiwgMHgzMSwgMHhlYywgMHgxYywgMHg2OSwgMHhlNCwgMHg5OCwgMHg3NSwgMHg4ZSwgMHhiZiwgMHhkZSwKLQkweGZjLCAweDUwLCAweDY5LCAweDQxLCAweDdhLCAweGE0LCAweDE1LCAweGJkLCAweDdkLCAweDlkLCAweDc4LCAweDMxLAotCTB4ZDIsIDB4OGEsIDB4MjQsIDB4NjUsIDB4YWQsIDB4NGYsIDB4ZTksIDB4YjgsIDB4YWQsIDB4YjcsIDB4MTUsIDB4ZmIsCi0JMHgxMywgMHg3MiwgMHg5NiwgMHg1ZSwgMHg2YiwgMHhiZSwgMHg1ZSwgMHgwOSwgMHhlOSwgMHgyNywgMHhkMSwgMHg4YSwKLQkweGJkLCAweGQ0LCAweGM5LCAweDgyLCAweGZlLCAweDI1LCAweGY2LCAweGI5LCAweGExLCAweDg1LCAweGRiLCAweDFiLAotCTB4ZjEsIDB4NTgsIDB4ZWEsIDB4MGUsIDB4YmMsIDB4MzksIDB4YWMsIDB4YTMsIDB4YWQsIDB4NTcsIDB4ZjQsIDB4MmQsCi0JMHhlNywgMHgyNywgMHhlMywgMHgzOCwgMHg5MiwgMHg1YSwgMHg4YiwgMHgwZiwgMHhmYiwgMHg2MywgMHhmZiwgMHhjYywKLQkweDY5LCAweDNlLCAweGE2LCAweGRhLCAweGZiLCAweDVkLCAweDJhLCAweGFlLCAweDZiLCAweDkyLCAweDczLCAweGFkLAotCTB4MGUsIDB4YTIsIDB4NWEsIDB4ZDAsIDB4YWMsIDB4NTQsIDB4Y2QsIDB4MDAsIDB4ZWYsIDB4OWIsIDB4NGUsIDB4NzUsCi0JMHgyZCwgMHhmZSwgMHhiNiwgMHhkZiwgMHg0OSwgMHhkZSwgMHhhZSwgMHgzMiwgMHhkZiwgMHgzMCwgMHgzYiwgMHg2OCwKLQkweDFiLCAweDY2LCAweDg1LCAweDlhLCAweDliLCAweDM3LCAweDdiLCAweDdmLCAweDQwLCAweDczLCAweDQwLCAweGNlLAotCTB4YmQsIDB4OTYsIDB4YjEsIDB4ZGUsIDB4ZTIsIDB4NDgsIDB4MzAsIDB4NTYsIDB4YTIsIDB4NDYsIDB4YzksIDB4MjcsCi0JMHgxZSwgMHhjMSwgMHhjYSwgMHhlZCwgMHg4ZiwgMHg2MCwgMHgwNSwgMHgzZiwgMHgxZCwgMHhkYiwgMHhhZCwgMHhjZSwKLQkweDViLCAweDc1LCAweDA1LCAweDg3LCAweDM0LCAweGFiLCAweGIzLCAweDUzLCAweGQ3LCAweDM4LCAweGI3LCAweDMyLAotCTB4YWYsIDB4OGYsIDB4NjAsIDB4Y2QsIDB4ZGUsIDB4NDcsIDB4ZjAsIDB4MTUsIDB4ZGEsIDB4NTcsIDB4MzUsIDB4ZmQsCi0JMHg3OCwgMHg2OSwgMHhhZiwgMHhkNSwgMHhmOSwgMHhlOSwgMHhhNiwgMHgzMCwgMHg3ZSwgMHg2ZCwgMHhlNywgMHgxOCwKLQkweDYyLCAweGFmLCAweDViLCAweGVjLCAweGJjLCAweDM3LCAweGEzLCAweGNhLCAweGVmLCAweGJmLCAweGI3LCAweDdmLAotCTB4OWIsIDB4ZWEsIDB4MmIsIDB4ZjksIDB4YmQsIDB4YTgsIDB4MzUsIDB4ZjgsIDB4ODgsIDB4NzIsIDB4N2YsIDB4YjMsCi0JMHhiZCwgMHgxMiwgMHg1YiwgMHhhYiwgMHgyNSwgMHg2NiwgMHhiOCwgMHhjZCwgMHgxMiwgMHgwMywgMHg4YSwgMHgzNiwKLQkweDhmLCAweGI5LCAweGQ0LCAweGQ2LCAweDIzLCAweDM2LCAweGRmLCAweGYyLCAweDQ1LCAweDI0LCAweGNmLCAweDZkLAotCTB4ZDAsIDB4ZDcsIDB4YTksIDB4MzcsIDB4MTMsIDB4ZGIsIDB4YzksIDB4YzUsIDB4NjYsIDB4N2UsIDB4MWIsIDB4NDksCi0JMHhmYSwgMHhlYSwgMHg5NiwgMHg5OSwgMHhjMSwgMHg3OCwgMHgxMiwgMHg4NiwgMHhiNSwgMHg2NSwgMHhmYSwgMHhjMCwKLQkweDlmLCAweGYxLCAweDdlLCAweDZjLCAweDYxLCAweGRmLCAweDRkLCAweGRlLCAweDkxLCAweDdkLCAweDA0LCAweDlkLAotCTB4ZGIsIDB4NjUsIDB4ZmUsIDB4MWYsIDB4YzEsIDB4YzMsIDB4ZWMsIDB4ZmYsIDB4OWEsIDB4ZmUsIDB4NDcsIDB4ZjAsCi0JMHgxMCwgMHg2ZCwgMHhhNywgMHg2YSwgMHhlZSwgMHhjNCwgMHhjMywgMHg1NSwgMHg5OCwgMHhjNSwgMHg0YywgMHg2OCwKLQkweGZjLCAweDgxLCAweDZhLCAweDM5LCAweGYzLCAweDRhLCAweDRjLCAweDRjLCAweDJhLCAweDhmLCAweGUwLCAweGRlLAotCTB4YzEsIDB4ZmQsIDB4ZjQsIDB4NDUsIDB4ZGIsIDB4ZmYsIDB4ODgsIDB4YzUsIDB4ODUsIDB4NzgsIDB4ZTUsIDB4YzcsCi0JMHhjYSwgMHg2YywgMHg1ZCwgMHgxZSwgMHhkNywgMHg3ZCwgMHg1OCwgMHg5MSwgMHg3OCwgMHhkMiwgMHhmNiwgMHhmZCwKLQkweDIyLCAweDYzLCAweDA5LCAweGZkLCAweGJlLCAweDk1LCAweDdlLCAweGRmLCAweDQyLCAweGJmLCAweDhmLCAweGQxLAotCTB4ZWYsIDB4MGQsIDB4ZmEsIDB4N2QsIDB4MzMsIDB4ZmQsIDB4M2UsIDB4NGEsIDB4YmYsIDB4ZDcsIDB4ZTksIDB4ZjcsCi0JMHg4ZCwgMHhmNCwgMHhmYiwgMHhiMCwgMHhlYywgMHg0NywgMHgyOCwgMHg0NywgMHhhMywgMHg0NywgMHhlMCwgMHhlYSwKLQkweDczLCAweGQzLCAweDg2LCAweDcyLCAweGVmLCAweDNkLCAweGVlLCAweDIxLCAweGZlLCAweDFjLCAweGQ3LCAweDY3LAotCTB4ZmIsIDB4NmYsIDB4NjEsIDB4MmMsIDB4MWQsIDB4MjIsIDB4NDYsIDB4NjQsIDB4ODYsIDB4YmYsIDB4NmQsIDB4YmYsCi0JMHgyMywgMHg5NywgMHgyMSwgMHhlZSwgMHgzZiwgMHg0ZiwgMHg3ZCwgMHgyYywgMHg4ZSwgMHhkNCwgMHhlYiwgMHhmYiwKLQkweDE5LCAweGMzLCAweDdlLCAweGE0LCAweDM1LCAweGY0LCAweGY4LCAweDU4LCAweGU2LCAweGJiLCAweGE5LCAweDg2LAotCTB4ZjQsIDB4MzQsIDB4NjgsIDB4NjYsIDB4OTMsIDB4YmEsIDB4MWUsIDB4NTgsIDB4ZWEsIDB4ZTMsIDB4OTgsIDB4NjUsCi0JMHhiZiwgMHg2ZSwgMHgyOSwgMHgxZSwgMHgxZSwgMHg2OCwgMHhjMywgMHhkZiwgMHgwZCwgMHg3OCwgMHhhOSwgMHg4YiwKLQkweGZhLCAweGYxLCAweDliLCAweDFkLCAweGY4LCAweGJlLCAweDFmLCAweDBlLCAweGRmLCAweDE1LCAweGMwLCAweDdmLAotCTB4ZDYsIDB4NjAsIDB4ZjYsIDB4M2UsIDB4NzksIDB4Y2YsIDB4M2EsIDB4NTMsIDB4ZTMsIDB4NjgsIDB4OWMsIDB4MDEsCi0JMHhiMSwgMHgxMSwgMHgxMCwgMHhhOSwgMHgxZCwgMHhjYywgMHhmNiwgMHg2NiwgMHhkYiwgMHhlZiwgMHg3NCwgMHhjNiwKLQkweDk2LCAweDA5LCAweGE2LCAweDk3LCAweDYwLCAweDdkLCAweGQ4LCAweGM2LCAweGQ5LCAweDI3LCAweDY1LCAweGZmLAotCTB4YjAsIDB4ODYsIDB4NzgsIDB4ZTQsIDB4MzEsIDB4NWEsIDB4YjEsIDB4MjEsIDB4NjksIDB4N2UsIDB4YjEsIDB4ODYsCi0JMHg1YywgMHhhOSwgMHgyNywgMHg5OSwgMHhkMywgMHhjMSwgMHgwMywgMHgxMSwgMHhhYSwgMHhjNCwgMHg5MCwgMHhmZiwKLQkweDE5LCAweDAxLCAweDY3LCAweDQ3LCAweGI0LCAweDE5LCAweGY3LCAweDY1LCAweDc3LCAweDIyLCAweGNkLCAweGIxLAotCTB4YWUsIDB4YTIsIDB4OWYsIDB4YWQsIDB4ZmMsIDB4ZTMsIDB4ZWYsIDB4YzUsIDB4ZTMsIDB4YTEsIDB4NDQsIDB4ODAsCi0JMHhmNiwgMHg3ZiwgMHhjZSwgMHhjYSwgMHg1NCwgMHhjZCwgMHg0ZSwgMHhkNywgMHg0MCwgMHg1YiwgMHg3MywgMHg5NywKLQkweDdhLCAweDNkLCAweGYzLCAweGQ2LCAweGUwLCAweDAxLCAweDNlLCAweDMyLCAweGE3LCAweGRiLCAweGU3LCAweGQxLAotCTB4ZGMsIDB4YjgsIDB4YTYsIDB4MWYsIDB4Y2EsIDB4NTAsIDB4YWYsIDB4YmMsIDB4ZDcsIDB4ZDYsIDB4ODksIDB4YmYsCi0JMHhkMSwgMHgzZiwgMHg2ZiwgMHhkYiwgMHhjZiwgMHhiOCwgMHhjMywgMHg4YiwgMHgxOSwgMHhiZCwgMHg3MiwgMHhkZiwKLQkweDlhLCAweDdmLCAweDc2LCAweDZlLCAweDMwLCAweDFjLCAweDcwLCAweDNjLCAweDU0LCAweDI5LCAweGZiLCAweDEyLAotCTB4Y2YsIDB4MzAsIDB4Y2UsIDB4ZmEsIDB4ZmIsIDB4ZTcsIDB4NDMsIDB4OWQsIDB4ZWIsIDB4YzYsIDB4ZGQsIDB4OGQsCi0JMHhlNSwgMHg4OCwgMHgyZiwgMHgxNSwgMHgwZSwgMHg2OSwgMHhlZiwgMHg5YiwgMHg1MCwgMHg5ZiwgMHg3ZiwgMHg4ZCwKLQkweGZiLCAweGY1LCAweGE3LCAweGM4LCAweGQ3LCAweDc2LCAweGEyLCAweDlmLCAweGY4LCAweGI1LCAweDUyLCAweGZmLAotCTB4OWMsIDB4NjIsIDB4ZjIsIDB4ZjcsIDB4ODYsIDB4OTQsIDB4ODksIDB4NTUsIDB4ZmEsIDB4NmQsIDB4YzAsIDB4NWYsCi0JMHg1NCwgMHhhMywgMHg3NCwgMHhiYiwgMHg5NCwgMHgxNywgMHhiOSwgMHg1YiwgMHg2YywgMHg3OSwgMHg3YiwgMHg1MiwKLQkweGYyLCAweGZiLCAweGVmLCAweGYzLCAweDZkLCAweGRlLCAweDA5LCAweDU0LCAweGJiLCAweGVkLCAweDNjLCAweGU3LAotCTB4NTcsIDB4MzMsIDB4NzcsIDB4NjIsIDB4NmIsIDB4MGEsIDB4ZGYsIDB4YWYsIDB4NDQsIDB4N2QsIDB4YTYsIDB4NGYsCi0JMHg3NSwgMHg3YywgMHhmZiwgMHgwYSwgMHhjYywgMHg0ZSwgMHhmZiwgMHg1NiwgMHg5NSwgMHhmOSwgMHg4OCwgMHhlMSwKLQkweGJlLCAweDk5LCAweDBhLCAweDcxLCAweDRkLCAweDNiLCAweDdkLCAweDk3LCAweDFhLCAweDM0LCAweGM3LCAweDQxLAotCTB4ZjksIDB4NjMsIDB4MmYsIDB4NWEsIDB4ZTMsIDB4NTcsIDB4ZjgsIDB4YjAsIDB4NmYsIDB4NGMsIDB4ZWEsIDB4YjYsCi0JMHhjMSwgMHhlMiwgMHg5YywgMHhlYywgMHhiNywgMHhmNywgMHhlMiwgMHg4MiwgMHg0NywgMHgyZCwgMHgzNSwgMHgwMCwKLQkweDI3LCAweGVmLCAweDlkLCAweDFkLCAweGQyLCAweDk5LCAweGM3LCAweGI3LCAweGUxLCAweGRmLCAweDA2LCAweDk2LAotCTB4ZTIsIDB4YjcsIDB4MDMsIDB4ZjUsIDB4MWQsIDB4MzcsIDB4MjgsIDB4OTYsIDB4NzUsIDB4MjgsIDB4ZjIsIDB4NTksCi0JMHhmYywgMHhiOCwgMHhkYSwgMHg4YiwgMHhkZCwgMHhlNCwgMHhmZiwgMHhiZiwgMHg0ZCwgMHg5OCwgMHhiNSwgMHg1NywKLQkweDEwLCAweDBiLCAweGZlLCAweDNkLCAweDExLCAweDRjLCAweDFmLCAweDUyLCAweGVkLCAweDc3LCAweGM2LCAweGY1LAotCTB4ODUsIDB4NmEsIDB4NzAsIDB4ZTcsIDB4YWYsIDB4ZDgsIDB4YzYsIDB4N2QsIDB4ZWEsIDB4MTIsIDB4ZmMsIDB4M2EsCi0JMHhkYiwgMHg4YSwgMHhkMywgMHhkOSwgMHhhOSwgMHhiNiwgMHhkMCwgMHg2OSwgMHhhMSwgMHg0NiwgMHhlYywgMHg0MCwKLQkweGVjLCAweDgxLCAweGI2LCAweDk4LCAweGEyLCAweDJkLCAweDkyLCAweGRmLCAweDc2LCAweDdkLCAweDg2LCAweGY2LAotCTB4NDgsIDB4MmMsIDB4ZmEsIDB4MWUsIDB4MzEsIDB4ZWEsIDB4MWYsIDB4NTIsIDB4YjQsIDB4NDcsIDB4ZmEsIDB4Y2QsCi0JMHg3NywgMHhlOSwgMHgzNywgMHhkZiwgMHhhMSwgMHhkZiwgMHgzYywgMHg0NSwgMHhiZiwgMHhjOSwgMHg3MSwgMHhkYiwKLQkweDM2LCAweDdiLCAweGJkLCAweGZlLCAweDY1LCAweGM2LCAweGM0LCAweGM0LCAweGQ2LCAweDRlLCAweDljLCAweDhhLAotCTB4ZDQsIDB4YWYsIDB4MWEsIDB4NDUsIDB4YjAsIDB4M2QsIDB4YTksIDB4NTgsIDB4NWUsIDB4ZTEsIDB4NzMsIDB4NWYsCi0JMHgwYiwgMHg4OSwgMHgwZiwgMHhjOCwgMHhmYiwgMHg2OSwgMHg3ZSwgMHgzYywgMHgzZSwgMHhkYywgMHg1OSwgMHgyOSwKLQkweGVmLCAweGJiLCAweGVlLCAweGQ5LCAweGYxLCAweDcxLCAweDNhLCAweGZiLCAweDA3LCAweGY2LCAweDQzLCAweGY0LAotCTB4ZjUsIDB4ZTcsIDB4OGUsIDB4NWQsIDB4NzQsIDB4ZjksIDB4Y2YsIDB4ZDYsIDB4OGYsIDB4NmIsIDB4NjQsIDB4ZmMsCi0JMHhjYiwgMHhmMCwgMHhmYiwgMHg4MSwgMHgxNiwgMHg5YywgMHg2NiwgMHhmYywgMHg3ZCwgMHg3ZSwgMHhlZSwgMHhiOCwKLQkweGI3LCAweDE0LCAweGMxLCAweGI4LCAweGFhLCAweDFhLCAweGM4LCAweDY2LCAweDViLCAweDcwLCAweDI2LCAweDYxLAotCTB4ZTAsIDB4ODksIDB4NDQsIDB4ZmQsIDB4YWEsIDB4MzIsIDB4YzcsIDB4Y2YsIDB4ZDUsIDB4NGMsIDB4YWQsIDB4NTgsCi0JMHg1NCwgMHgwYywgMHgyNywgMHg4NSwgMHg1ZiwgMHg4NiwgMHhkYSwgMHg1MCwgMHg2YywgMHgzNCwgMHg2MywgMHgzMCwKLQkweDJiLCAweDc2LCAweGVhLCAweGM1LCAweDViLCAweDUxLCAweDVkLCAweGRlLCAweDJmLCAweGZiLCAweGEzLCAweDdmLAotCTB4ZjcsIDB4ZDEsIDB4MWUsIDB4NWYsIDB4OTUsIDB4ZmYsIDB4MjcsIDB4YzEsIDB4NzksIDB4ZjYsIDB4MWEsIDB4Y2IsCi0JMHhlMCwgMHhkYywgMHgyZSwgMHhlZiwgMHhmOCwgMHg4YiwgMHgzZiwgMHgyYiwgMHhkOCwgMHhhNCwgMHg4ZiwgMHg3NywKLQkweDk0LCAweDIwLCAweGY4LCAweGU0LCAweDRmLCAweDY4LCAweGViLCAweDg3LCAweDdhLCAweGU1LCAweDJjLCAweDZlLAotCTB4MGIsIDB4N2UsIDB4YzksIDB4ZjIsIDB4OTUsIDB4ZjQsIDB4OGIsIDB4NDMsIDB4NTksIDB4YTcsIDB4ZjMsIDB4YzcsCi0JMHhiZCwgMHhmMiwgMHg4ZSwgMHhmYSwgMHgxMiwgMHhmYywgMHgzOCwgMHgzYiwgMHhhMSwgMHg3ZSwgMHhlNCwgMHhkNSwKLQkweGYxLCAweGFiLCAweGQxLCAweGE1LCAweGI0LCAweDI3LCAweGM5LCAweGU1LCAweDYzLCAweGNjLCAweGU1LCAweDgzLAotCTB4ZGUsIDB4YzcsIDB4YjEsIDB4MTQsIDB4ZWEsIDB4ZGUsIDB4NjUsIDB4ZjAsIDB4NmMsIDB4OTcsIDB4ZjcsIDB4NjcsCi0JMHg5NiwgMHhhMSwgMHg4YywgMHhiZiwgMHhmZCwgMHhkYiwgMHgyZCwgMHhjYiwgMHgzOSwgMHhiNywgMHhkMiwgMHhkYSwKLQkweGI4LCAweDRjLCAweGU2LCAweDRlLCAweGYwLCAweGU0LCAweGZmLCAweDdhLCAweDY1LCAweDJkLCAweDAwLCAweDdiLAotCTB4NDUsIDB4YmUsIDB4NDYsIDB4ZjksIDB4NGIsIDB4ZTEsIDB4ZGUsIDB4NWUsIDB4MWYsIDB4NWUsIDB4ODQsIDB4ZmEsCi0JMHhkMywgMHgyZSwgMHg2NSwgMHgyOSwgMHhhZSwgMHhkZSwgMHhhYiwgMHg1NCwgMHhhMSwgMHg1NCwgMHhjYSwgMHg4NiwKLQkweDY5LCAweDdmLCAweDI2LCAweGU0LCAweDljLCAweDc0LCAweDRiLCAweGVmLCAweGFmLCAweGFjLCAweDE5LCAweDg2LAotCTB4YmQsIDB4YmYsIDB4ODYsIDB4OTUsIDB4YTMsIDB4MWEsIDB4ZTMsIDB4NWQsIDB4MjksIDB4ZTIsIDB4ODMsIDB4OGYsCi0JMHg1OSwgMHg5NSwgMHg4NiwgMHgxMywgMHgyYiwgMHg0NiwgMHgxYiwgMHg3MSwgMHg0YiwgMHhiZiwgMHg2NSwgMHg5ZCwKLQkweDlhLCAweDE3LCAweDgzLCAweGM3LCAweGYwLCAweDEwLCAweGMzLCAweDNjLCAweGY4LCAweDRhLCAweDZmLCAweDE5LAotCTB4YmYsIDB4MmQsIDB4MTQsIDB4MzEsIDB4MjYsIDB4Y2YsIDB4NTIsIDB4YjUsIDB4NTUsIDB4YjUsIDB4MGUsIDB4YWQsCi0JMHg3ZCwgMHg1NCwgMHg5MSwgMHhiOCwgMHhlZiwgMHhjMSwgMHg4MywgMHg4YywgMHhjZiwgMHg4YiwgMHg3YiwgMHhmZCwKLQkweDg4LCAweDhmLCAweDVhLCAweGQ2LCAweDJiLCAweDUxLCAweDFmLCAweDFlLCAweDYwLCAweGZkLCAweGQ2LCAweGRlLAotCTB4MDEsIDB4NzQsIDB4ZDEsIDB4MmUsIDB4ZTIsIDB4N2IsIDB4YjUsIDB4ODAsIDB4OTcsIDB4ZjEsIDB4N2UsIDB4ZTUsCi0JMHhhOCwgMHg5YiwgMHgzMSwgMHhhYywgMHgxYSwgMHg4YiwgMHhiNiwgMHgwNywgMHhmMCwgMHg5NSwgMHg1MSwgMHgwZiwKLQkweGUzLCAweDliLCAweDM1LCAweGZmLCAweDRkLCAweGRkLCAweGJjLCAweGQ2LCAweDAxLCAweDBkLCAweDZiLCAweDQ2LAotCTB4N2QsIDB4NTgsIDB4ZDIsIDB4MWIsIDB4M2MsIDB4MjMsIDB4ZWYsIDB4NWEsIDB4OWYsIDB4ZDUsIDB4YzMsIDB4NTgsCi0JMHgzZCwgMHhlYSwgMHhjNywgMHhlZCwgMHhiZCwgMHgxMywgMHg1ZiwgMHg5OSwgMHgwMSwgMHhmMywgMHhmZiwgMHhhYiwKLQkweDQ1LCAweDIzLCAweGJlLCAweDNjLCAweDVhLCAweDQ3LCAweGY5LCAweGMxLCAweDU1LCAweDJmLCAweDJiLCAweDc1LAotCTB4ZjgsIDB4ZGIsIDB4YmQsIDB4M2EsIDB4ZTUsIDB4YWIsIDB4YjgsIDB4OGQsIDB4NzIsIDB4NmUsIDB4ZWQsIDB4YmQsCi0JMHgxYSwgMHgwZiwgMHhlZSwgMHg4ZCwgMHhlMiwgMHhiZSwgMHhkMSwgMHhiOSwgMHg1OCwgMHhjOCwgMHhmOCwgMHhkNCwKLQkweGMxLCAweGJjLCAweDBlLCAweDlmLCAweDA3LCAweDZlLCAweGVmLCAweDE3LCAweGRkLCAweDQzLCAweDc5LCAweDI1LAotCTB4M2EsIDB4MGUsIDB4MzcsIDB4ZTMsIDB4MWQsIDB4MGQsIDB4OTEsIDB4ZjcsIDB4MWEsIDB4YzksIDB4YzEsIDB4NzQsCi0JMHhkYywgMHhiZSwgMHg2YiwgMHhhZSwgMHhiZCwgMHg5ZiwgMHg1ZSwgMHgxZiwgMHgyOSwgMHg0NiwgMHhiYywgMHg0ZCwKLQkweDQxLCAweDRiLCAweGJmLCAweGM0LCAweDU5LCAweGUxLCAweDM2LCAweDNhLCAweGUzLCAweDZhLCAweDg4LCAweDZkLAotCTB4ZTgsIDB4OGMsIDB4YWIsIDB4YjksIDB4ZmIsIDB4NWQsIDB4MjksIDB4MzksIDB4NmIsIDB4ZjUsIDB4MDYsIDB4ZjksCi0JMHg1MiwgMHgwNCwgMHgyZCwgMHg3NiwgMHg4YywgMHg3NiwgMHg5MywgMHg1ZiwgMHg5YiwgMHg3MCwgMHgzMiwgMHg3NiwKLQkweDQ3LCAweDY4LCAweGUzLCAweGYzLCAweDliLCAweDI0LCAweDU2LCAweDM3LCAweDMyLCAweDRmLCAweDM0LCAweDMwLAotCTB4ZDYsIDB4YTcsIDB4NzUsIDB4OWMsIDB4NTEsIDB4MGMsIDB4OGMsIDB4ZWUsIDB4OTIsIDB4OTgsIDB4ZTgsIDB4YzMsCi0JMHhlYSwgMHg1ZSwgMHgwMywgMHg2ZiwgMHhjYSwgMHg1OSwgMHhmYSwgMHgzOSwgMHhiMSwgMHhjNSwgMHg2NSwgMHhkMCwKLQkweGY0LCAweDA3LCAweDExLCAweDMyLCAweDhmLCAweDMxLCAweGI2LCAweDlmLCAweGNlLCAweDU0LCAweGUzLCAweDk2LAotCTB4ZWQsIDB4NTIsIDB4YTYsIDB4MDksIDB4NmYsIDB4MGQsIDB4MzksIDB4NzEsIDB4NGIsIDB4ZWYsIDB4NWEsIDB4M2MsCi0JMHg5NiwgMHg3NiwgMHg2MCwgMHg1MCwgMHhhZiwgMHhlZiwgMHg1MSwgMHgxOSwgMHgzZiwgMHg2ZiwgMHg2YywgMHgwYSwKLQkweDdhLCAweDlmLCAweDIxLCAweDU3LCAweDNkLCAweDMzLCAweDk3LCAweDUxLCAweGY5LCAweDhhLCAweDI4LCAweDVhLAotCTB4ZDgsIDB4YWYsIDB4MTYsIDB4MmQsIDB4NzcsIDB4OTYsIDB4ZTIsIDB4YmUsIDB4ZTgsIDB4NWEsIDB4MWMsIDB4NGIsCi0JMHg2YiwgMHhlNiwgMHg3ZSwgMHhlNiwgMHhjYiwgMHhlZSwgMHgyNiwgMHgzZSwgMHg5ZiwgMHhlZSwgMHg0NCwgMHhiNywKLQkweDI2LCAweDljLCAweGI2LCAweDkxLCAweGJlLCAweDI1LCAweGViLCAweDJhLCAweDUxLCAweGJjLCAweDQ5LCAweDdiLAotCTB4ZWQsIDB4YzksIDB4Y2MsIDB4NjcsIDB4ZWMsIDB4OTcsIDB4OTgsIDB4MmYsIDB4NjcsIDB4ZmQsIDB4NGMsIDB4NTQsCi0JMHhkZSwgMHhhMCwgMHhlMCwgMHhmOCwgMHg2ZSwgMHhlMSwgMHg1OCwgMHhmMywgMHhmMSwgMHg0NSwgMHhlYSwgMHhhOSwKLQkweGE1LCAweDU3LCAweGM1LCAweDhkLCAweDdiLCAweDk3LCAweGUzLCAweGQ0LCAweGI2LCAweDFjLCAweGU3LCAweDdhLAotCTB4MjUsIDB4NjIsIDB4N2UsIDB4OTksIDB4OWMsIDB4YWIsIDB4YmQsIDB4OWMsIDB4OWMsIDB4OGIsIDB4NWMsIDB4MmUsCi0JMHhiYywgMHg1YSwgMHg3MSwgMHgyMiwgMHgzNCwgMHhkYSwgMHg0YywgMHg1ZSwgMHgyMSwgMHhmYywgMHg4MiwgMHhmZSwKLQkweDlhLCAweDhkLCAweDYyLCAweDUxLCAweDZmLCAweDFkLCAweDg2LCAweGM5LCAweGI3LCAweDMyLCAweGM0LCAweDhiLAotCTB4NGMsIDB4OTYsIDB4NzEsIDB4NjUsIDB4YTgsIDB4ODYsIDB4OWYsIDB4MDAsIDB4M2YsIDB4ZDcsIDB4ZjAsIDB4YTMsCi0JMHhkOSwgMHhmNywgMHg1NiwgMHhkMCwgMHg5NiwgMHg2MywgMHg2ZCwgMHg4YSwgMHg3ZCwgMHhjZSwgMHg3ZSwgMHgzMCwKLQkweDJiLCAweGIxLCAweDVhLCAweDQxLCAweDk1LCAweGY2LCAweDE3LCAweDU1LCAweDkyLCAweDY3LCAweDdhLCAweDM1LAotCTB4MDUsIDB4YWYsIDB4YTUsIDB4MDMsIDB4ZjgsIDB4NmEsIDB4ZDMsIDB4NWEsIDB4MjUsIDB4NTYsIDB4NmQsIDB4YmYsCi0JMHhhNywgMHg2YSwgMHg5NiwgMHhiMiwgMHg2ZiwgMHg4YiwgMHhlNiwgMHhjOSwgMHgzYSwgMHg2NCwgMHg5OCwgMHgzOSwKLQkweGFmLCAweGZjLCAweDhmLCAweDAyLCAweDA1LCAweDBmLCAweDMwLCAweDk3LCAweDBmLCAweDU0LCAweDA1LCAweGU0LAotCTB4MWMsIDB4MTQsIDB4ZmQsIDB4ZGQsIDB4ODcsIDB4MTcsIDB4MTIsIDB4NzEsIDB4NjQsIDB4MTMsIDB4MGQsIDB4M2QsCi0JMHhhYiwgMHgxNSwgMHhkOSwgMHhlZiwgMHgwOSwgMHgzNiwgMHhjNywgMHg5NSwgMHgxYywgMHhlNywgMHgyZiwgMHg2NywKLQkweGRkLCAweGRkLCAweGYzLCAweDNhLCAweGQwLCAweDQxLCAweDZlLCAweDdmLCAweDNhLCAweGM3LCAweGVkLCAweDAzLAotCTB4OTMsIDB4ZTgsIDB4YzAsIDB4Y2EsIDB4ODQsIDB4ZWMsIDB4NmYsIDB4YzYsIDB4YWQsIDB4MmUsIDB4Y2UsIDB4YzEsCi0JMHhlMSwgMHg0NCwgMHgwNywgMHhlZSwgMHg0YywgMHgzNCwgMHg3NCwgMHgxMCwgMHg1YSwgMHgzMCwgMHg3ZSwgMHg1NywKLQkweDA3LCAweDVhLCAweDEyLCAweGY1LCAweGUzLCAweDViLCAweGU1LCAweDdmLCAweDUwLCAweDRkLCAweGQzLCAweDcwLAotCTB4NjAsIDB4NGMsIDB4NDUsIDB4YWQsIDB4MTYsIDB4MjAsIDB4ZjYsIDB4MDcsIDB4MzAsIDB4OTgsIDB4NmEsIDB4MzgsCi0JMHhkMywgMHhhNSwgMHhkZSwgMHhhOSwgMHg0YywgMHg1ZSwgMHgyMSwgMHgzOSwgMHg2NCwgMHgzMywgMHg5ZSwgMHg0ZiwKLQkweDc4LCAweDUwLCAweDk2LCAweDM0LCAweDY5LCAweGZiLCAweDQwLCAweGU5LCAweDQ4LCAweDk0LCAweGY5LCAweGMzLAotCTB4NjMsIDB4NTYsIDB4OTUsIDB4MTEsIDB4NGEsIDB4OGIsIDB4NWUsIDB4NGEsIDB4NDYsIDB4ZTYsIDB4ZTMsIDB4MGQsCi0JMHhjNiwgMHhkYywgMHhmYSwgMHhlYiwgMHgzNSwgMHhlZiwgMHg0MiwgMHgxYiwgMHg4YiwgMHg3ZSwgMHg2NSwgMHhkNSwKLQkweDFhLCAweDY1LCAweDk4LCAweGIxLCAweDJiLCAweGQ0LCAweGRjLCAweGMyLCAweGY4LCAweGRhLCAweDdjLCAweDAzLAotCTB4ZWQsIDB4ODAsIDB4YjEsIDB4YWYsIDB4ZDIsIDB4ZDgsIDB4YzksIDB4MzksIDB4MTYsIDB4N2IsIDB4ZjIsIDB4YTAsCi0JMHg3YywgMHhjNCwgMHg0NywgMHgxYywgMHhhMiwgMHhlOCwgMHgxMSwgMHgwZCwgMHg3YiwgMHhkOSwgMHgyZiwgMHhlZiwKLQkweDg4LCAweDljLCAweDBiLCAweDBhLCAweGI2LCAweGRmLCAweDI3LCAweGZmLCAweDUzLCAweDY0LCAweDRmLCAweGVlLAotCTB4ZmMsIDB4ZTEsIDB4ZmIsIDB4ODksIDB4Y2YsIDB4NDAsIDB4OTIsIDB4NTEsIDB4Y2YsIDB4ODgsIDB4MDcsIDB4MWYsCi0JMHgyNiwgMHhlNCwgMHgwYywgMHgxZiwgMHg2OSwgMHhjZCwgMHg0OCwgMHgwMCwgMHg1NSwgMHhhYywgMHhmYiwgMHg2NiwKLQkweGEyLCAweDNlLCAweGZkLCAweGRmLCAweDUxLCAweDFmLCAweGI4LCAweDU1LCAweGFkLCAweGI0LCAweGNmLCAweDBhLAotCTB4MzksIDB4NDcsIDB4NmUsIDB4YzIsIDB4ODksIDB4NzQsIDB4NzAsIDB4OWMsIDB4NzksIDB4ZjQsIDB4YWEsIDB4NzYsCi0JMHhhYSwgMHg5OCwgMHhiOSwgMHhhZSwgMHg3OSwgMHg4ZCwgMHhkMiwgMHhkMCwgMHhhMSwgMHhhYSwgMHhjMSwgMHhmMCwKLQkweGE4LCAweDAyLCAweGNhLCAweDczLCAweGIyLCAweDhkLCAweDliLCAweGYwLCAweDc2LCAweGJhLCAweDE0LCAweDQ1LAotCTB4YmIsIDB4NzYsIDB4ZDIsIDB4ZWUsIDB4OGIsIDB4YjAsIDB4NzgsIDB4OWIsIDB4MWIsIDB4MjUsIDB4N2IsIDB4YzQsCi0JMHg1NiwgMHg0NSwgMHhhZiwgMHg5MiwgMHhlZiwgMHg4MywgMHhiNiwgMHg2YSwgMHg2MiwgMHg2ZiwgMHg3NCwgMHgzOSwKLQkweDllLCAweDFmLCAweDkwLCAweDdkLCAweGY0LCAweDBiLCAweDFjLCAweGJjLCAweDJkLCAweDYyLCAweGRlLCAweGFlLAotCTB4MzIsIDB4MDYsIDB4YWQsIDB4NGYsIDB4ODUsIDB4ZTIsIDB4MjUsIDB4YjQsIDB4MDksIDB4ODcsIDB4MTEsIDB4NmEsCi0JMHhlZiwgMHhlNiwgMHhkOCwgMHgxYiwgMHg0NiwgMHhjNSwgMHhjZSwgMHg5YSwgMHhmMSwgMHgxZCwgMHg4ZSwgMHhhNSwKLQkweDlmLCAweDM2LCAweDMxLCAweDljLCAweGE4LCAweGMzLCAweDQ2LCAweGRhLCAweDg0LCAweDQ5LCAweDliLCAweDMwLAotCTB4MzksIDB4ZmYsIDB4MjYsIDB4NmQsIDB4YzIsIDB4YTQsIDB4NGQsIDB4OTgsIDB4YjQsIDB4MDksIDB4OTMsIDB4MzYsCi0JMHg2MSwgMHg2NiwgMHhlNywgMHg2MywgMHg1ZiwgMHg1YSwgMHg0NSwgMHhjZiwgMHg1MCwgMHgxOSwgMHhlMiwgMHhkNSwKLQkweGYyLCAweDFlLCAweGJkLCAweDg2LCAweGIxLCAweDU0LCAweDk3LCAweDMyLCAweDc5LCAweGQ3LCAweDRkLCAweDE4LAotCTB4NGMsIDB4ZGYsIDB4Y2MsIDB4OGYsIDB4ODIsIDB4NzYsIDB4ZGEsIDB4YzUsIDB4Y2UsIDB4OGMsIDB4ZDgsIDB4OTksCi0JMHgxYiwgMHhkZiwgMHhjZCwgMHhjZSwgMHg5OSwgMHg4NiwgMHhkMiwgMHg1YywgMHhhYywgMHg3YywgMHhjYywgMHhiZSwKLQkweGE3LCAweDcwLCAweDhlLCAweGRjLCAweDc4LCAweDI2LCAweDJiLCAweGY3LCAweDRjLCAweDljLCAweGEwLCAweGZkLAotCTB4ZjcsIDB4NTAsIDB4OWUsIDB4MWEsIDB4OTEsIDB4ZmQsIDB4OTIsIDB4MjgsIDB4ZjksIDB4YmUsIDB4OWMsIDB4MGIsCi0JMHhkZiwgMHhjOSwgMHg3ZSwgMHgwYiwgMHhjZiwgMHgzMCwgMHhiMSwgMHg2NSwgMHgxZSwgMHhkMCwgMHhkNCwgMHhiZiwKLQkweDE2LCAweDBmLCAweGY1LCAweDYxLCAweGJjLCAweDljLCAweGNmLCAweGJlLCAweDkzLCAweGQ5LCAweDQ5LCAweDFmLAotCTB4NmUsIDB4YjQsIDB4ZDcsIDB4MzAsIDB4ZWUsIDB4NmYsIDB4NTIsIDB4ZjAsIDB4YTUsIDB4YjQsIDB4OWMsIDB4MjcsCi0JMHhhZiwgMHg4ZiwgMHg2ZCwgMHg0NCwgMHhjNCwgMHhmNiwgMHhkYiwgMHhmZSwgMHhkNCwgMHg0ZSwgMHhhNCwgMHhmOCwKLQkweGNjLCAweDFmLCAweDY5LCAweGEyLCAweDRmLCAweDU2LCAweGUzLCAweGRkLCAweDZkLCAweDQxLCAweGZkLCAweDM1LAotCTB4NjgsIDB4YWQsIDB4MjMsIDB4YjAsIDB4ZTYsIDB4MmYsIDB4OGMsIDB4ODQsIDB4Y2MsIDB4N2EsIDB4YTUsIDB4MDksCi0JMHg2ZCwgMHg3YiwgMHg5YiwgMHg5OCwgMHgzYiwgMHgwNCwgMHhmNSwgMHhkNywgMHhlOSwgMHg3MywgMHhjZiwgMHg0NSwKLQkweGU2LCAweDMzLCAweDdmLCAweDg4LCAweGUxLCAweDJiLCAweGU0LCAweGY5LCAweDc3LCAweDBkLCAweGFhLCAweDFjLAotCTB4NTMsIDB4YTMsIDB4YmQsIDB4ZjYsIDB4ZjEsIDB4OWMsIDB4ZmQsIDB4MGUsIDB4NWMsIDB4NTQsIDB4Y2UsIDB4YzgsCi0JMHgyOCwgMHgwZiwgMHgxMiwgMHg3MywgMHgxNiwgMHgyNywgMHgwZiwgMHg1YSwgMHhmMiwgMHg0ZSwgMHhlZCwgMHhjYSwKLQkweGViLCAweDlhLCAweGIxLCAweDNmLCAweDZiLCAweGUwLCAweGM5LCAweGY0LCAweDFiLCAweDk2LCAweGFhLCAweGM1LAotCTB4Y2UsIDB4M2EsIDB4YzksIDB4NDUsIDB4M2MsIDB4YzQsIDB4OGMsIDB4NmMsIDB4NDYsIDB4ZmMsIDB4NWYsIDB4ZjYsCi0JMHhjMCwgMHgwZCwgMHg3YywgMHg5OCwgMHhkNiwgMHhkMiwgMHgwZCwgMHg4YywgMHg0YiwgMHhiZiwgMHhlNiwgMHhiZCwKLQkweDlkLCAweGM0LCAweDExLCAweGY3LCAweDU2LCAweGVkLCAweGE4LCAweDRhLCAweDBlLCAweDNmLCAweGRmLCAweDYxLAotCTB4YTAsIDB4NjgsIDB4YjcsIDB4Y2MsIDB4ODEsIDB4ZTAsIDB4NTYsIDB4MDAsIDB4NjMsIDB4ODksIDB4MTgsIDB4ZWUsCi0JMHhhNCwgMHhmZCwgMHg4YywgMHgyNiwgMHg1YSwgMHg3MCwgMHgwNywgMHg2ZCwgMHg2MywgMHgyNCwgMHhkMSwgMHg4YSwKLQkweGNmLCAweDMxLCAweDM3LCAweGQ4LCAweDlkLCAweDEwLCAweDNmLCAweDViLCAweDgyLCAweDg1LCAweGI0LCAweDk1LAotCTB4ZmQsIDB4YTksIDB4ZmYsIDB4MDUsIDB4N2QsIDB4N2EsIDB4MDAsIDB4YmIsIDB4NmQsIDB4YWUsIDB4MjksIDB4ZmIsCi0JMHhkNiwgMHg1MCwgMHg1NiwgMHgyNiwgMHhkYywgMHhjYywgMHg2ZCwgMHhlMiwgMHg1NiwgMHg3ZiwgMHg0YSwgMHgzOCwKLQkweDUwLCAweDI3LCAweDZlLCAweDg5LCAweDM0LCAweDYyLCAweDBiLCAweGU1LCAweDY1LCAweGM5LCAweDc1LCAweDg3LAotCTB4OTgsIDB4NGYsIDB4YWQsIDB4ZGUsIDB4YjUsIDB4OWMsIDB4OTgsIDB4N2MsIDB4NjEsIDB4ZWUsIDB4NGYsIDB4ZWIsCi0JMHhlNiwgMHgyMSwgMHg2MiwgMHg0MSwgMHhkOCwgMHhjZiwgMHg3OSwgMHg1NywgMHg2OSwgMHhjMywgMHg3MiwgMHhjZSwKLQkweDdjLCAweDkwLCAweDYzLCAweDlmLCAweDQzLCAweDNjLCAweDcwLCAweGE3LCAweGM0LCAweDdlLCAweDgyLCAweDQ3LAotCTB4MTksIDB4ZjIsIDB4MWUsIDB4YWUsIDB4OTUsIDB4NzcsIDB4MTUsIDB4ZTgsIDB4MWIsIDB4MzMsIDB4NTIsIDB4NTYsCi0JMHhhNywgMHg5MywgMHg3MSwgMHg2NCwgMHg1MywgMHhiNCwgMHgwZSwgMHgwNywgMHg0NywgMHg2ZSwgMHg4NiwgMHg3NywKLQkweDZiLCAweDFkLCAweDQ2LCAweDkzLCAweDdlLCAweDY0LCAweDkzLCAweGE4LCAweGY1LCAweDQyLCAweGJkLCAweGMxLAotCTB4OGIsIDB4NjAsIDB4ZjMsIDB4MjEsIDB4YzYsIDB4ODksIDB4YjcsIDB4OTUsIDB4ODYsIDB4ZjYsIDB4MzcsIDB4MTEsCi0JMHhlYywgMHhkOSwgMHhhYywgMHgwNCwgMHhiZCwgMHgwZCwgMHhhYSwgMHhiNCwgMHg0ZCwgMHgzYywgMHhhMSwgMHgxZiwKLQkweDBjLCAweGQyLCAweGRlLCAweDMzLCAweDIzLCAweGM0LCAweDE0LCAweGQ2LCAweDc1LCAweDZkLCAweDc1LCAweGM5LAotCTB4M2EsIDB4ZjEsIDB4NzgsIDB4OTUsIDB4ZTYsIDB4YzMsIDB4OWUsIDB4M2QsIDB4YzQsIDB4YjgsIDB4MWQsIDB4ZjIsCi0JMHhiZiwgMHgwMywgMHg2YSwgMHhiMCwgMHg2ZiwgMHhjZiwgMHhjZCwgMHg5OCwgMHhiMSwgMHgzNSwgMHg4MCwgMHg4MywKLQkweGJjLCAweDU3LCAweGJiLCAweGUzLCAweDFhLCAweDNjLCAweDQzLCAweDNmLCAweGM5LCAweGQwLCAweDBmLCAweDhiLAotCTB4YjYsIDB4YWEsIDB4ZDgsIDB4YmIsIDB4ZTcsIDB4MjYsIDB4NTQsIDB4OTIsIDB4ZDcsIDB4OWYsIDB4MGEsIDB4MjksCi0JMHgzNiwgMHhmNiwgMHgyNiwgMHgzOCwgMHhhZSwgMHhkZCwgMHgyOSwgMHhmYiwgMHhkYywgMHhiYywgMHhmMiwgMHgyMiwKLQkweGYzLCAweDgxLCAweGVlLCAweDExLCAweDFkLCAweDliLCAweDc5LCAweDNmLCAweGM1LCAweGI5LCAweGRlLCAweDQyLAotCTB4Y2MsIDB4M2QsIDB4YmUsIDB4YWQsIDB4MWEsIDB4ZjcsIDB4NmYsIDB4ZDMsIDB4NjIsIDB4ZDcsIDB4YTgsIDB4ZDYsCi0JMHhmYywgMHhiNywgMHhmNCwgMHhkMCwgMHgxOSwgMHgxNywgMHhlNywgMHhkOCwgMHg2MiwgMHgwZSwgMHg3NywgMHhiNiwKLQkweGVmLCAweGEwLCAweDU1LCAweDQ1LCAweGFjLCAweDc3LCAweDY5LCAweGYzLCAweDMxLCAweDczLCAweDZlLCAweDBjLAotCTB4YWYsIDB4NDcsIDB4OWIsIDB4NzAsIDB4NjYsIDB4OTcsIDB4ZTgsIDB4Y2EsIDB4NjIsIDB4MGMsIDB4OTAsIDB4ZjgsCi0JMHgxMCwgMHg0NSwgMHg5YywgMHgzOSwgMHhkZCwgMHg2ZSwgMHhlNiwgMHg3NCwgMHhmNywgMHgzMCwgMHhhNywgMHg3YiwKLQkweGIwLCAweDRmLCAweDc0LCAweGRjLCAweDg5LCAweDI1LCAweDExLCAweDgzLCAweDNhLCAweDZjLCAweDI0LCAweDdlLAotCTB4MTksIDB4NTAsIDB4ZmIsIDB4YjQsIDB4ZTYsIDB4YmIsIDB4ODgsIDB4ZjEsIDB4YzUsIDB4NzYsIDB4OGUsIDB4NjcsCi0JMHgxMCwgMHgyNywgMHgyNCwgMHg0ZiwgMHgzMCwgMHhmMCwgMHhkMywgMHg0YywgMHhjZSwgMHhlZiwgMHg2YSwgMHgxOSwKLQkweGQzLCAweDBmLCAweDhjLCAweGI0LCAweGUwLCAweGJiLCAweGNjLCAweGUxLCAweDQ2LCAweGZiLCAweDQyLCAweDNiLAotCTB4NWYsIDB4NTYsIDB4NWEsIDB4ZjEsIDB4NWQsIDB4M2IsIDB4NWUsIDB4ODgsIDB4MGQsIDB4YjcsIDB4ZTIsIDB4ZGQsCi0JMHg4NCwgMHgxNiwgMHg1ZiwgMHhhOCwgMHg4NCwgMHhkYSwgMHhkMywgMHhiYywgMHhmZiwgMHg1ZSwgMHhmNiwgMHg2NiwKLQkweDcyLCAweGQ4LCAweDI1LCAweDM4LCAweDRlLCAweDFiLCAweGVlLCAweDQ5LCAweDA5LCAweDk2LCAweDNiLCAweGUxLAotCTB4ZGEsIDB4NzYsIDB4MDcsIDB4ZGUsIDB4MWEsIDB4Y2UsIDB4ZTUsIDB4NmUsIDB4MjEsIDB4ZTYsIDB4NmUsIDB4NzcsCi0JMHhmNiwgMHhkMywgMHgxZSwgMHg1MiwgMHgxMCwgMHg2ZiwgMHg2MCwgMHgwZSwgMHgxNywgMHg1YywgMHg1NSwgMHhjNCwKLQkweGZjLCAweGVkLCAweGEzLCAweDQ4LCAweDJlLCAweDdmLCAweDhiLCAweDU3LCAweDA3LCAweGY1LCAweDE3LCAweDE1LAotCTB4NzMsIDB4YTcsIDB4YmMsIDB4N2IsIDB4ZjQsIDB4MWEsIDB4NzIsIDB4ZTcsIDB4YzYsIDB4NGYsIDB4MTAsIDB4NmIsCi0JMHgzNywgMHhkMSwgMHgwNywgMHhhZSwgMHg4YiwgMHg0OCwgMHg3ZSwgMHhhNywgMHg2MSwgMHgzOCwgMHg2NSwgMHhiZiwKLQkweGNmLCAweGFkLCAweGZmLCAweDk0LCAweGYzLCAweGViLCAweGQ3LCAweGM0LCAweDA2LCAweDFjLCAweDM4LCAweGFkLAotCTB4ZDcsIDB4N2IsIDB4YmQsIDB4MGUsIDB4MDcsIDB4NmUsIDB4ZDEsIDB4ODMsIDB4YWIsIDB4OGUsIDB4MjAsIDB4Y2EsCi0JMHg3OSwgMHg5NywgMHhiZCwgMHhjMiwgMHg1YywgMHgzYywgMHg3NSwgMHgyNiwgMHhlNSwgMHgxZCwgMHg5NCwgMHg0ZSwKLQkweGJjLCAweDM1LCAweGY3LCAweGVmLCAweGYzLCAweDc5LCAweDU4LCAweDIxLCAweDFmLCAweDEzLCAweDliLCAweDZiLAotCTB4NjgsIDB4NzYsIDB4YTAsIDB4ZGUsIDB4MmMsIDB4ODYsIDB4OTYsIDB4NDksIDB4OTMsIDB4NWYsIDB4YzYsIDB4MzksCi0JMHhkNywgMHg3MSwgMHgwOCwgMHhmNiwgMHgzNywgMHg5OCwgMHg1ZSwgMHg4NCwgMHhlZCwgMHhmZiwgMHhmOSwgMHhmNSwKLQkweDdjLCAweGMyLCAweDNlLCAweDAzLCAweDRhLCAweDljLCAweGNiLCAweGUxLCAweGVhLCAweDczLCAweDg5LCAweDUyLAotCTB4ODAsIDB4ZjgsIDB4OTQsIDB4ZTAsIDB4ZDgsIDB4OGEsIDB4NDcsIDB4NGMsIDB4YjgsIDB4MGMsIDB4ZmEsIDB4NTcsCi0JMHg5ZiwgMHgwNywgMHhlYSwgMHgyZSwgMHgwZiwgMHhmYywgMHhjOSwgMHhjNywgMHhhYywgMHg3MiwgMHhlMiwgMHg2YSwKLQkweGQ5LCAweDJlLCAweGNlLCAweDkxLCAweGMzLCAweGIyLCAweDllLCAweDlhLCAweDI3LCAweDM4LCAweDJiLCAweDY1LAotCTB4YjUsIDB4ZDYsIDB4MGYsIDB4NzksIDB4YWQsIDB4MTEsIDB4NjcsIDB4MzUsIDB4NjIsIDB4NmIsIDB4MDUsIDB4ZjEsCi0JMHhiMSwgMHgzYiwgMHg1OSwgMHg4ZCwgMHhjZCwgMHhkYiwgMHgwNiwgMHhhOCwgMHg3MywgMHgyZiwgMHgxYywgMHhiYywKLQkweDRlLCAweDI1LCAweGZkLCAweDM2LCAweDc2LCAweDgyLCAweGJmLCAweDJiLCAweGU5LCAweDMzLCAweGEwLCAweDlkLAotCTB4NmQsIDB4NGQsIDB4NWEsIDB4ZjMsIDB4ZWYsIDB4OGMsIDB4OTgsIDB4N2QsIDB4OTUsIDB4ZWMsIDB4Y2IsIDB4MzQsCi0JMHhlMiwgMHhlZCwgMHhjNiwgMHg2NCwgMHhkMCwgMHg3YiwgMHhhYiwgMHhhYSwgMHhlMCwgMHhmNiwgMHg4OCwgMHhjZSwKLQkweGI2LCAweDNkLCAweGU4LCAweDRiLCAweDBhLCAweDRlLCAweDRjLCAweDUwLCAweDhmLCAweDY2LCAweDQzLCAweDE5LAotCTB4NzUsIDB4ZTksIDB4YTIsIDB4MmUsIDB4NjcsIDB4ZDgsIDB4ZTcsIDB4NTUsIDB4ZWIsIDB4NTAsIDB4YmUsIDB4MjcsCi0JMHhjYSwgMHgzZSwgMHgzNywgMHgxMiwgMHg4YiwgMHg0ZCwgMHg2YywgMHhlMiwgMHhjZiwgMHhmOSwgMHhiYiwgMHg5NywKLQkweGUzLCAweGJhLCAweDZkLCAweDc2LCAweGVlLCAweGJiLCAweDQwLCAweGYyLCAweDk5LCAweGQ3LCAweDIyLCAweDIxLAotCTB4ZmQsIDB4MWUsIDB4ZDUsIDB4ODksIDB4YjcsIDB4YjMsIDB4ODIsIDB4YjUsIDB4ZjIsIDB4M2UsIDB4M2QsIDB4YzYsCi0JMHg2NywgMHg2OCwgMHhjZCwgMHg1OCwgMHg5YSwgMHgxNCwgMHg4YywgMHhmMiwgMHg5MywgMHg2NywgMHg0NywgMHhiMSwKLQkweDI0LCAweDI5LCAweGZlLCAweDY4LCAweGUyLCAweGI2LCAweGViLCAweGViLCAweGYwLCAweGZlLCAweGY5LCAweDc1LAotCTB4MGIsIDB4MWYsIDB4MjYsIDB4ODksIDB4OTksIDB4OTMsIDB4YzQsIDB4Y2MsIDB4NDksIDB4NjIsIDB4ZTYsIDB4YTQsCi0JMHhiZCwgMHgxNiwgMHhhMSwgMHhlMiwgMHhmNCwgMHg5MCwgMHg4MiwgMHhmNywgMHg2YywgMHhmYywgMHhkYiwgMHg2OSwKLQkweDczLCAweGE4LCAweDI3LCAweDE5LCAweGQzLCAweGRiLCAweGQzLCAweDNhLCAweDBlLCAweGQwLCAweDE2LCAweDkyLAotCTB4MjksIDB4YjEsIDB4MzUsIDB4MDUsIDB4NGYsIDB4ZjUsIDB4NDUsIDB4NTAsIDB4NDUsIDB4ZGIsIDB4ZDksIDB4NGEsCi0JMHg5YiwgMHg3ZSwgMHg3OCwgMHhiYiwgMHgxNiwgMHg5OCwgMHhlZiwgMHgwOCwgMHhiNSwgMHhhNiwgMHhkMCwgMHg4NCwKLQkweDA3LCAweDg4LCAweDU3LCAweDBmLCAweDMxLCAweDk3LCAweDM5LCAweDQ0LCAweDRjLCAweGJiLCAweDY3LCAweDcwLAotCTB4MmQsIDB4OTYsIDB4ZjQsIDB4YTksIDB4YzQsIDB4MmMsIDB4NjIsIDB4ZDUsIDB4NzQsIDB4YzEsIDB4NmUsIDB4YzEsCi0JMHg0YiwgMHg3OSwgMHg1NywgMHgyZSwgMHgyYSwgMHhlYiwgMHg5YSwgMHhjYSwgMHg1ZCwgMHhjNCwgMHhhYSwgMHhjNiwKLQkweDVlLCAweGUxLCAweDM4LCAweGNjLCAweDkzLCAweDE4LCAweDhiLCAweDEyLCAweGM0LCAweGFhLCAweDJkLCAweDY5LAotCTB4OTksIDB4YWYsIDB4NGUsIDB4ZGMsIDB4NGIsIDB4YmIsIDB4NWUsIDB4OWYsIDB4NWYsIDB4OTcsIDB4OTgsIDB4YjMsCi0JMHg1NSwgMHgzYiwgMHg3MywgMHg0MCwgMHhjOSwgMHg3MSwgMHg5ZCwgMHg1ZSwgMHg1ZSwgMHgxZiwgMHhlZSwgMHgwYiwKLQkweDUwLCAweDBmLCAweDA2LCAweDhlLCAweGVkLCAweDkyLCAweDNjLCAweDQ4LCAweGZhLCAweDEzLCAweGMwLCAweDIxLAotCTB4ZTIsIDB4OTMsIDB4ODMsIDB4YmEsIDB4N2UsIDB4OTksIDB4ZjgsIDB4NTQsIDB4NDksIDB4N2MsIDB4N2EsIDB4OGQsCi0JMHhmOCwgMHgzNCwgMHg4ZCwgMHhmOCwgMHhmNCwgMHg2YSwgMHgxZSwgMHg5ZiwgMHhhYSwgMHg0NywgMHhjNCwgMHgxNiwKLQkweDcyLCAweDVjLCAweGZiLCAweDc4LCAweGUyLCAweGI5LCAweDJhLCAweGY5LCAweDVmLCAweDYyLCAweDgyLCAweGYzLAotCTB4OTcsIDB4YzcsIDB4ZmYsIDB4YTUsIDB4NzgsIDB4NzEsIDB4MDAsIDB4ZWUsIDB4MTksIDB4ZTQsIDB4YjIsIDB4MTYsCi0JMHhmMSwgMHhlNiwgMHgwMywgMHhjNywgMHg1MiwgMHhmYywgMHg3NCwgMHhhOCwgMHhjMCwgMHg2MSwgMHgyNywgMHhlZCwKLQkweDVjLCAweGI5LCAweGRjLCAweDkwLCAweDc1LCAweDMwLCAweDU5LCAweDAzLCAweGFiLCAweGNiLCAweGVmLCAweDBiLAotCTB4OWEsIDB4ZjgsIDB4Y2UsIDB4M2MsIDB4ZTEsIDB4OGQsIDB4YjIsIDB4YWUsIDB4NTMsIDB4NDQsIDB4N2UsIDB4ZDgsCi0JMHg4NiwgMHhlMSwgMHg2ZCwgMHhjZiwgMHg2MiwgMHg1MywgMHg5ZiwgMHg3YSwgMHg2YiwgMHgxOSwgMHhjOCwgMHg4NSwKLQkweDk1LCAweDRlLCAweDM4LCAweDIyLCAweDk1LCAweDk4LCAweDE5LCAweDExLCAweDFiLCAweDY0LCAweDJlLCAweDMyLAotCTB4ZjYsIDB4NmQsIDB4NzQsIDB4ZWYsIDB4MmUsIDB4YzMsIDB4ODQsIDB4ZDcsIDB4YjIsIDB4OWUsIDB4ZDQsIDB4NmIsCi0JMHhlNSwgMHhkZiwgMHgwMCwgMHgwOCwgMHg1ZSwgMHg3YSwgMHg4YSwgMHgxOCwgMHhhMywgMHg2ZSwgMHgxZCwgMHhmZCwKLQkweGI4LCAweDMzLCAweGE3LCAweDZiLCAweGYwLCAweGM1LCAweGVkLCAweDhmLCAweGEwLCAweDdkLCAweGZiLCAweDM3LAotCTB4ZTksIDB4N2IsIDB4MzMsIDB4N2IsIDB4NmEsIDB4NjksIDB4ODcsIDB4ZDcsIDB4MzUsIDB4OGQsIDB4ZTMsIDB4NDQsCi0JMHg4NCwgMHhiMSwgMHhjZiwgMHhhNywgMHhlMCwgMHg4NywgMHg3MywgMHg2NiwgMHg4YSwgMHgxYywgMHhmZSwgMHg3ZCwKLQkweDYwLCAweDA1LCAweDZjLCAweDc5LCAweDZmLCAweGU1LCAweGZkLCAweGUzLCAweDM5LCAweDFmLCAweGM3LCAweDRlLAotCTB4ZDksIDB4MjcsIDB4YmMsIDB4ZjksIDB4YjMsIDB4OWIsIDB4N2YsIDB4NDIsIDB4NWIsIDB4M2YsIDB4MTMsIDB4MTksCi0JMHhmYywgMHgyYiwgMHhjOCwgMHg3OCwgMHhkZCwgMHg4YSwgMHgyZCwgMHg5MywgMHg3YSwgMHg0NSwgMHhmOSwgMHgzNiwKLQkweGJlLCAweDQ5LCAweDhlLCAweDQ3LCAweDllLCAweGE3LCAweGYzLCAweDdiLCAweGYwLCAweDU5LCAweDkxLCAweGNmLAotCTB4NjcsIDB4MDUsIDB4ZjksIDB4MmYsIDB4NWEsIDB4YjEsIDB4MzYsIDB4YjksIDB4OTYsIDB4MzIsIDB4MWYsIDB4ZjEsCi0JMHg5OSwgMHg5NCwgMHgyYiwgMHgzYywgMHg3YiwgMHgzNiwgMHgyZiwgMHhhNywgMHgxOCwgMHg4MSwgMHhlYSwgMHg5YywKLQkweDljLCAweDJmLCAweDUxLCAweGNlLCAweDY5LCAweDYyLCAweDllLCAweDdhLCAweGZkLCAweDU0LCAweDU5LCAweDg1LAotCTB4NzYsIDB4ZmYsIDB4ZjcsIDB4NzksIDB4NTksIDB4YjksIDB4NzIsIDB4NDUsIDB4ZDMsIDB4NTEsIDB4MmEsIDB4NjUsCi0JMHhhNywgMHhhZSwgMHg3YiwgMHgxNywgMHhkMSwgMHg3NywgMHg0MywgMHhkZSwgMHhmNSwgMHhmNiwgMHg3YSwgMHhiMywKLQkweDhlLCAweDE1LCAweDE3LCAweGU3LCAweDRjLCAweGYyLCAweGRlLCAweDFiLCAweGI5LCAweDgyLCAweDE3LCAweDZmLAotCTB4MzMsIDB4NDcsIDB4Y2EsIDB4YWQsIDB4YmYsIDB4NGIsIDB4ZmUsIDB4NjUsIDB4ZTAsIDB4ZjEsIDB4NDQsIDB4YjAsCi0JMHg3NSwgMHhhNSwgMHhkMiwgMHgxMCwgMHg5YiwgMHg0ZCwgMHg2ZSwgMHg4MSwgMHgyYSwgMHg1OSwgMHg5MywgMHg2ZSwKLQkweGI2LCAweGZmLCAweDVmLCAweDVlLCAweDM2LCAweGQ0LCAweGNjLCAweDNjLCAweGNkLCAweGEwLCAweDJkLCAweDA1LAotCTB4M2IsIDB4NGUsIDB4ZDgsIDB4ZmIsIDB4ODksIDB4MDYsIDB4NWUsIDB4Y2EsIDB4YmUsIDB4OTIsIDB4M2YsIDB4OGYsCi0JMHgyOCwgMHg3MywgMHgxZSwgMHhlNiwgMHg5YywgMHg0ZiwgMHg1ZCwgMHgxMywgMHg5NSwgMHhmOSwgMHgwZiwgMHhhNiwKLQkweDMzLCAweGE4LCAweDE2LCAweDFlLCAweDY4LCAweDlhLCAweGQwLCAweGU5LCAweDM3LCAweDI2LCAweDQzLCAweGQ4LAotCTB4MGQsIDB4ODgsIDB4ZmIsIDB4NjQsIDB4NmYsIDB4YzEsIDB4OTcsIDB4ZmYsIDB4M2YsIDB4NjYsIDB4YWMsIDB4ZjcsCi0JMHgwOSwgMHg2YiwgMHgzYywgMHg2MCwgMHhiZCwgMHhkYywgMHg5OSwgMHgzMywgMHgxZCwgMHhlNiwgMHhkOCwgMHhkNSwKLQkweGM4LCAweDc4LCAweDY1LCAweGZkLCAweDAwLCAweGU2LCAweDM0LCAweDIzLCAweDAwLCAweDlmLCAweDc2LCAweDM3LAotCTB4YzcsIDB4ZWQsIDB4YzIsIDB4NzQsIDB4ZTYsIDB4NDcsIDB4OTEsIDB4OTksIDB4MGQsIDB4NmQsIDB4NGQsIDB4ZWEsCi0JMHgxNSwgMHg4OCwgMHg1NSwgMHhjOSwgMHg3OSwgMHgyMiwgMHg5ZCwgMHhmNiwgMHgwZiwgMHgxNCwgMHhmNywgMHhjYSwKLQkweGY5LCAweDBkLCAweGIzLCAweGQ1LCAweDhkLCAweGEwLCAweDdmLCAweGFlLCAweGEyLCAweGEwLCAweDI4LCAweDA0LAotCTB4ZTcsIDB4ZmQsIDB4NTksIDB4ZjIsIDB4YjAsIDB4OTksIDB4MWYsIDB4NTksIDB4M2YsIDB4ZjIsIDB4ZTksIDB4Y2MsCi0JMHhlNywgMHgwYiwgMHg3ZCwgMHhkMCwgMHhmMSwgMHhmNSwgMHhkMSwgMHg0YiwgMHgzMywgMHhjOCwgMHg4MiwgMHhjYywKLQkweGY3LCAweGFkLCAweGQ4LCAweDc0LCAweDY5LCAweDViLCAweGU0LCAweDdlLCAweDUyLCAweDVmLCAweDczLCAweDdkLAotCTB4ZmMsIDB4YTcsIDB4NTksIDB4ZjUsIDB4MDEsIDB4MDcsIDB4MmEsIDB4YjEsIDB4NWUsIDB4MzcsIDB4YTYsIDB4Y2IsCi0JMHhkOSwgMHhlYywgMHg3YiwgMHg2NSwgMHg4ZCwgMHhjNSwgMHgzZSwgMHhjZiwgMHgzNiwgMHhmNSwgMHg1YywgMHhkNiwKLQkweGQ0LCAweDc1LCAweDYzLCAweDJmLCAweGFhLCAweDg5LCAweGUxLCAweDI1LCAweDQ5LCAweGQxLCAweGY1LCAweDM1LAotCTB4NTAsIDB4YTksIDB4ZWYsIDB4NjMsIDB4YzQsIDB4YTIsIDB4ZTIsIDB4YTQsIDB4ODcsIDB4NzksIDB4YWIsIDB4ODcsCi0JMHg1OCwgMHg2NywgMHhlMCwgMHhiOSwgMHg2YywgMHgwNywgMHg1YywgMHhlNCwgMHg0ZSwgMHgxMywgMHhkOSwgMHgzMCwKLQkweDVlLCAweGNkLCAweGNlLCAweDk5LCAweDJlLCAweGU3LCAweDVlLCAweGE5LCAweDAyLCAweDM4LCAweDY3LCAweGNhLAotCTB4NmYsIDB4NTMsIDB4ZGUsIDB4ZTcsIDB4NTMsIDB4NzIsIDB4YmYsIDB4ZGYsIDB4YjcsIDB4ZGYsIDB4MzUsIDB4NzcsCi0JMHgxOCwgMHgyYiwgMHg3MSwgMHg0ZiwgMHhhMiwgMHg0YSwgMHhkNiwgMHhkYSwgMHg0ZCwgMHg5ZiwgMHg2MSwgMHg1YSwKLQkweGQzLCAweGI0LCAweGFhLCAweGU5LCAweGI5LCAweGYzLCAweDMwLCAweGMxLCAweGY2LCAweGE1LCAweGM0LCAweDkxLAotCTB4ZDUsIDB4MTEsIDB4YWQsIDB4ZWQsIDB4YmYsIDB4MmIsIDB4YzEsIDB4NDAsIDB4NWEsIDB4NjksIDB4NjMsIDB4ZjksCi0JMHgzMCwgMHgzNiwgMHg4ZiwgMHg0YSwgMHg1ZCwgMHg4NSwgMHhlMywgMHgyZCwgMHhlYywgMHg1NywgMHgzNywgMHgwNCwKLQkweDQyLCAweGVhLCAweGFmLCAweDBiLCAweDY3LCAweGExLCAweGRkLCAweDQ1LCAweDQ2LCAweDFjLCAweGNmLCAweDI2LAotCTB4YTYsIDB4Y2IsIDB4ZmYsIDB4MmMsIDB4OTAsIDB4MzUsIDB4OTUsIDB4YmMsIDB4NGMsIDB4OGYsIDB4NTksIDB4NjUsCi0JMHg0OCwgMHg1YiwgMHhlZCwgMHg2YywgMHhjYiwgMHgzYywgMHhlYiwgMHgyNSwgMHg4NiwgMHhiOCwgMHhiNCwgMHhlMCwKLQkweGQxLCAweGFmLCAweDIyLCAweGI4LCAweDY2LCAweGJlLCAweGEzLCAweDEzLCAweDY3LCAweDIyLCAweDVhLCAweGM3LAotCTB4NDcsIDB4NmMsIDB4YTMsIDB4Y2EsIDB4MTEsIDB4NDYsIDB4NmYsIDB4NWUsIDB4YmUsIDB4ZmMsIDB4OWYsIDB4ZDgsCi0JMHg5YywgMHhhYywgMHg4NiwgMHg1NSwgMHg0NSwgMHhlYSwgMHg2OSwgMHgyYiwgMHgzMywgMHgzZCwgMHgyNywgMHhiZiwKLQkweGQ4LCAweDU4LCAweGNlLCAweGZjLCAweGQ4LCAweDQzLCAweGI5LCAweDcyLCAweGU2LCAweDM2LCAweGI4LCAweGYzLAotCTB4ZDcsIDB4MzAsIDB4YWQsIDB4NmEsIDB4NGQsIDB4ZWIsIDB4ZjksIDB4YWEsIDB4ZGEsIDB4ODksIDB4MTUsIDB4NGQsCi0JMHhjMSwgMHhjMCwgMHgzMiwgMHhkYSwgMHg0OCwgMHg5NSwgMHgyZCwgMHgyMywgMHgxNiwgMHgyZSwgMHhmYSwgMHhkOCwKLQkweDMzLCAweDcxLCAweGY0LCAweDIzLCAweGM4LCAweGJhLCAweDIzLCAweGNiLCAweDk1LCAweGNhLCAweDk5LCAweDMxLAotCTB4NzksIDB4ZDcsIDB4ZDQsIDB4ODksIDB4ODUsIDB4OGMsIDB4NmYsIDB4ZjEsIDB4YzIsIDB4ZmYsIDB4NzQsIDB4YjIsCi0JMHhmNywgMHg4NiwgMHhiZSwgMHgzMSwgMHhmZCwgMHhjMiwgMHhmZiwgMHhkOSwgMHhmZCwgMHhmZiwgMHgwMSwgMHgwMiwKLQkweDhiLCAweDBjLCAweDZlLCAweDc0LCAweDU3LCAweDAwLCAweDAwLCAweDAwIH07CisJMHhhZCwgMHhiYywgMHgwYiwgMHg3NCwgMHgxYywgMHhkNSwgMHg5NSwgMHgyZSwgMHhmYywgMHg1NSwgMHg3NSwgMHhiNywKKwkweGQ0LCAweDkyLCAweGRhLCAweDUyLCAweDRiLCAweDZlLCAweGNiLCAweDZkLCAweGQwLCAweGUwLCAweDZhLCAweGFiLAorCTB4ZGEsIDB4NmEsIDB4MmMsIDB4MDEsIDB4ZDUsIDB4YjIsIDB4MGMsIDB4NGQsIDB4YTYsIDB4YzAsIDB4MWQsIDB4NWIsCisJMHg4MCwgMHgwYywgMHgyNiwgMHgxMSwgMHhjNiwgMHhiOSwgMHgyMywgMHhlNiwgMHg3YSwgMHhmZSwgMHhmNCwgMHgxOCwKKwkweDAzLCAweDg2LCAweDkwLCAweDVjLCAweDMzLCAweDkzLCAweDliLCAweDcxLCAweGI4LCAweDllLCAweGViLCAweDhhLAorCTB4ZTQsIDB4ODcsIDB4YzAsIDB4YTUsIDB4ZWUsIDB4OTYsIDB4OTAsIDB4MWYsIDB4YWMsIDB4MzUsIDB4ZWIsIDB4YTcsCisJMHgyZCwgMHhjYiwgMHg5MiwgMHgyMSwgMHhhZCwgMHgxNiwgMHg0OSwgMHg5OCwgMHgxOSwgMHhlNywgMHhlNiwgMHg4MSwKKwkweGM2LCAweGQ4LCAweDYwLCAweDkzLCAweGYwLCAweGM4LCAweDZiLCAweGZkLCAweDRjLCAweGZlLCAweGI5LCAweDdmLAorCTB4M2MsIDB4YjYsIDB4NzksIDB4ODMsIDB4ZTMsIDB4M2MsIDB4NDcsIDB4OWUsIDB4YzEsIDB4YTksIDB4ZmYsIDB4ZGIsCisJMHhkNSwgMHhkZCwgMHhiNiwgMHhlYywgMHg0MCwgMHgxZSwgMHhlYiwgMHg4ZSwgMHhkNiwgMHhhYSwgMHhhNSwgMHhlZSwKKwkweGFhLCAweDczLCAweGY2LCAweDM5LCAweDY3LCAweDlmLCAweGJkLCAweGJmLCAweGZkLCAweGVkLCAweDczLCAweDRlLAorCTB4YjUsIDB4MDYsIDB4NTQsIDB4YTMsIDB4ZjQsIDB4MzcsIDB4OGIsIDB4ZDcsIDB4ZDUsIDB4MWQsIDB4MWIsIDB4ZWUsCisJMHg1ZSwgMHhkYywgMHg3ZSwgMHg3NSwgMHg4NywgMHg3YywgMHhmNywgMHhjZSwgMHhmNSwgMHg3YSwgMHhmMSwgMHg2MSwKKwkweDdmLCAweDI2LCAweDEyLCAweDk3LCAweGRlLCAweGQyLCAweDNlLCAweGI0LCAweGUwLCAweDQ3LCAweGZjLCAweDI1LAorCTB4MTAsIDB4OTEsIDB4N2YsIDB4YWQsIDB4YTUsIDB4YWYsIDB4MWUsIDB4MjAsIDB4NTgsIDB4NmUsIDB4NWYsIDB4MmUsCisJMHhmOCwgMHg1NSwgMHhiMywgMHhmMywgMHhiZiwgMHgyZSwgMHhkMywgMHhlMSwgMHhmNywgMHg5OCwgMHg5ZiwgMHhmZiwKKwkweDhiLCAweGJiLCAweDc1LCAweDIwLCAweDk5LCAweDZmLCAweGQ1LCAweDk2LCAweGUzLCAweDljLCAweDYzLCAweDg1LAorCTB4YmMsIDB4OTAsIDB4ZmIsIDB4N2YsIDB4NjIsIDB4N2UsIDB4ZjAsIDB4YzQsIDB4YjcsIDB4YWUsIDB4OGIsIDB4OWMsCisJMHhjOSwgMHg3OSwgMHhlMCwgMHgwZiwgMHg5YSwgMHgxNiwgMHg4MiwgMHgwYiwgMHhlMSwgMHg2ZiwgMHg2MiwgMHg5ZCwKKwkweGJmLCAweDZiLCAweGQ5LCAweGE2LCAweGEyLCAweGI2LCAweDJjLCAweDJiLCAweDEyLCAweGNlLCAweDIxLCAweDEyLAorCTB4YjQsIDB4MTAsIDB4ODksIDB4NTksIDB4NDAsIDB4Y2EsIDB4NmIsIDB4MjIsIDB4NTUsIDB4NjksIDB4ZmEsIDB4NTEsCisJMHhhMSwgMHg1NywgMHgyMCwgMHgxNSwgMHhkYywgMHhhOCwgMHg2ZCwgMHhlMSwgMHgxOCwgMHg5NywgMHhkOSwgMHg3ZSwKKwkweGVkLCAweDQ0LCAweDFlLCAweGI4LCAweGRiLCAweGY2LCAweGUzLCAweGI4LCAweDI3LCAweGEwLCAweDlkLCAweGNjLAorCTB4ZWYsIDB4YWIsIDB4MmIsIDB4ZWEsIDB4MjMsIDB4MDksIDB4OGYsIDB4OGUsIDB4OTQsIDB4NmEsIDB4Y2EsIDB4N2QsCisJMHg2OCwgMHhjYiwgMHhmMywgMHg0OCwgMHhmOSwgMHhjYywgMHhjZiwgMHg2YiwgMHhlMywgMHgzNiwgMHhkMCwgMHg5YiwKKwkweDY5LCAweDM2LCAweDRlLCAweGEwLCAweDM1LCAweDdjLCAweDE4LCAweDk1LCAweDQ4LCAweDg1LCAweDIyLCAweDMxLAorCTB4ZTAsIDB4ODMsIDB4NzMsIDB4OGYsIDB4NjYsIDB4MTQsIDB4ZjgsIDB4ZjQsIDB4ZDksIDB4ZTgsIDB4ZGMsIDB4MGIsCisJMHgzYywgMHg5MiwgMHg4OSwgMHgyNCwgMHg3NSwgMHgwNSwgMHhlOCwgMHg5ZiwgMHg5NCwgMHhiYSwgMHg5MSwgMHg2MCwKKwkweDhlLCAweGNmLCAweGI3LCAweDY0LCAweDgwLCAweGFkLCAweDk5LCAweGQ5LCAweGQ4LCAweDk2LCAweDc1LCAweGYwLAorCTB4OWMsIDB4ZDEsIDB4MWMsIDB4ZGMsIDB4YzcsIDB4MTYsIDB4N2EsIDB4ZGQsIDB4ZTcsIDB4YjMsIDB4NjEsIDB4ZTUsCisJMHhlNCwgMHhmOSwgMHg1YiwgMHhjZSwgMHhiNywgMHg1YSwgMHg4MiwgMHg3OCwgMHg3YSwgMHgzMiwgMHg4NCwgMHg2NywKKwkweDI3LCAweGViLCAweGYxLCAweDQ4LCAweGI2LCAweDFlLCAweGRiLCAweGIzLCAweDMxLCAweGE4LCAweGJhLCAweDgzLAorCTB4NTgsIDB4M2MsIDB4ODYsIDB4OGEsIDB4ZWIsIDB4MWQsIDB4OWMsIDB4MzQsIDB4ZGEsIDB4YjAsIDB4OTUsIDB4ODIsCisJMHg1ZiwgMHg2ZCwgMHg2YiwgMHhjNCwgMHhkYSwgMHg2MCwgMHgxMywgMHhiNiwgMHhlOCwgMHhkNywgMHhhMSwgMHgzOCwKKwkweGQ2LCAweDBmLCAweGNlLCAweDY1LCAweDMyLCAweGQyLCAweDNmLCAweGFmLCAweGFhLCAweGVhLCAweDM3LCAweGUyLAorCTB4ZjQsIDB4NGUsIDB4MTMsIDB4ZWYsIDB4ZWYsIDB4YzQsIDB4OWEsIDB4NWEsIDB4MzgsIDB4NGUsIDB4M2UsIDB4MWUsCisJMHhlZCwgMHg3ZSwgMHg1MCwgMHgwOSwgMHg2YSwgMHg0ZiwgMHhlNSwgMHhkOSwgMHhhMSwgMHg1NSwgMHg1ZSwgMHhjYSwKKwkweDgzLCAweDM2LCAweDkyLCAweDlmLCAweDM5LCAweDE1LCAweDZjLCAweDJmLCAweGMzLCAweDc2LCAweDMzLCAweGQyLAorCTB4OTcsIDB4MzAsIDB4YmUsIDB4ZDUsIDB4ZjIsIDB4ZGYsIDB4NjgsIDB4MGYsIDB4YzUsIDB4MzEsIDB4NmQsIDB4Y2QsCisJMHhiYywgMHhjNiwgMHgzZSwgMHg2OSwgMHhlYywgMHg0ZiwgMHgxMywgMHhiZSwgMHgzNiwgMHgxOSwgMHhjNiwgMHg1NywKKwkweGQ5LCAweGI3LCAweGFmLCAweDRjLCAweDRhLCAweDFmLCAweDIzLCAweDdiLCAweDJjLCAweGQ0LCAweDYzLCAweDM0LAorCTB4ZGIsIDB4ODQsIDB4YTcsIDB4ZjUsIDB4MzYsIDB4N2MsIDB4ODUsIDB4N2QsIDB4ZWMsIDB4MzMsIDB4NjIsIDB4NTgsCisJMHg5YiwgMHhiOCwgMHg4YiwgMHhmZCwgMHg1MSwgMHhiMCwgMHhhYSwgMHhlZCwgMHgyZiwgMHg0YiwgMHhmZCwgMHg4YSwKKwkweDY4LCAweDUwLCAweDU1LCAweDI0LCAweDFiLCAweDIyLCAweDMxLCAweDRkLCAweDE1LCAweDk5LCAweDE3LCAweGZhLAorCTB4M2IsIDB4OTAsIDB4ODEsIDB4ZTUsIDB4MzcsIDB4YTUsIDB4Y2YsIDB4MzcsIDB4MjIsIDB4Y2YsIDB4ZmUsIDB4N2UsCisJMHg3OSwgMHg2NywgMHhkNCwgMHg1OCwgMHhhZiwgMHg2MiwgMHg2NSwgMHg4MCwgMHg3ZCwgMHg3ZSwgMHgyMCwgMHgxZSwKKwkweDRkLCAweDJjLCAweDYyLCAweDlmLCAweGM3LCAweGYzLCAweDJhLCAweGM3LCAweDEzLCAweGQyLCAweGM2LCAweGQ4LAorCTB4ZjcsIDB4ZTQsIDB4MmEsIDB4OTUsIDB4N2QsIDB4NjcsIDB4NWYsIDB4MzIsIDB4ZWMsIDB4NGIsIDB4ODYsIDB4N2QsCisJMHhjOSwgMHhiMCwgMHgyZiwgMHg2ZSwgMHhiZiwgMHg2MywgMHhlYywgMHg3MywgMHg3MSwgMHg4ZSwgMHg0NiwgMHhmMiwKKwkweGM3LCAweGQ5LCAweGRmLCAweDk5LCAweGZkLCAweDZjLCAweDYyLCAweGRmLCAweDkxLCAweGFhLCAweGU3LCAweGJjLAorCTB4MzUsIDB4YTcsIDB4NjUsIDB4ZGUsIDB4MWMsIDB4ZTcsIDB4NTUsIDB4YzMsIDB4NzEsIDB4N2UsIDB4NmUsIDB4MDQsCisJMHhhOCwgMHhiZiwgMHgwYywgMHhlZCwgMHhhMCwgMHhkYywgMHg5ZiwgMHhmOSwgMHg1NiwgMHg4NSwgMHg4OSwgMHg0ZSwKKwkweDlhLCAweGEwLCAweDczLCAweGE0LCAweDIzLCAweDlhLCAweDY4LCAweDUwLCAweDU0LCAweDc4LCAweGY1LCAweGEwLAorCTB4ZDYsIDB4NTIsIDB4ODgsIDB4MTgsIDB4ZDQsIDB4OGYsIDB4MTYsIDB4MmQsIDB4NDAsIDB4ZDMsIDB4MGIsIDB4OTQsCisJMHg3NSwgMHg1MSwgMHhiYiwgMHg5MSwgMHhlMCwgMHgxNCwgMHhhNCwgMHg1ZCwgMHg4ZCwgMHhlZCwgMHgxZiwgMHgyZiwKKwkweGNkLCAweDlkLCAweGM4LCAweDBmLCAweGIzLCAweDRkLCAweDY5LCAweDVmLCAweDY0LCAweDNiLCAweGNlLCAweGNmLAorCTB4MGMsIDB4ZTgsIDB4NDEsIDB4NDQsIDB4YWQsIDB4NDEsIDB4ZGEsIDB4OWYsIDB4YzcsIDB4MGMsIDB4NmEsIDB4MWIsCisJMHhmMiwgMHg3YywgMHg3ZSwgMHg1ZSwgMHg0NiwgMHg3MSwgMHgzZSwgMHhkNiwgMHhlNiwgMHhiNSwgMHhkMiwgMHgxOCwKKwkweDIyLCAweGVjLCAweDgyLCAweGQ4LCAweDQxLCAweDM4LCAweDE1LCAweDMwLCAweDgzLCAweGQyLCAweGY3LCAweGVlLAorCTB4M2QsIDB4MDMsIDB4OWIsIDB4OWQsIDB4NzksIDB4YmEsIDB4ZTgsIDB4NGEsIDB4ZGYsIDB4MzgsIDB4Y2YsIDB4MTMsCisJMHg0OCwgMHg5YywgMHg1ZSwgMHhmMiwgMHg5MCwgMHgzNSwgMHhhYiwgMHgyMywgMHg4ZSwgMHg2YSwgMHgxZCwgMHg4MSwKKwkweDJhLCAweDFkLCAweGRkLCAweGU5LCAweDg5LCAweDZhLCAweGFiLCAweGM2LCAweGZjLCAweGU2LCAweDlkLCAweDAzLAorCTB4MTMsIDB4N2UsIDB4NTQsIDB4NGYsIDB4ZTgsIDB4YTgsIDB4OWEsIDB4NzgsIDB4ZGMsIDB4OGIsIDB4NWEsIDB4MDMsCisJMHgzYiwgMHgyNiwgMHhmZiwgMHhjYywgMHg1YiwgMHgxYywgMHhkYiwgMHhjZCwgMHhhNSwgMHgzMSwgMHhiYSwgMHhiNiwKKwkweGVmLCAweDdmLCAweGRkLCAweDNlLCAweGUzLCAweDU0LCAweGU4LCAweDU1LCAweDdmLCAweGU2LCAweDMxLCAweDc1LAorCTB4NmQsIDB4MGMsIDB4MzgsIDB4YjMsIDB4YjYsIDB4NjMsIDB4MzksIDB4N2EsIDB4ODMsIDB4MGEsIDB4ZTYsIDB4ZWIsCisJMHg3ZiwgMHgzMiwgMHgwYiwgMHhiNSwgMHgyNiwgMHhhYywgMHhjOSwgMHhjNiwgMHg1NCwgMHg4NSwgMHgxOSwgMHg0YSwKKwkweDcxLCAweDZlLCAweGYwLCAweDgyLCAweDlkLCAweDgzLCAweDZmLCAweGMwLCAweDcxLCAweGE0LCAweGVjLCAweDQ5LAorCTB4ZGMsIDB4NzksIDB4YTcsIDB4NmEsIDB4MWUsIDB4YmEsIDB4YzYsIDB4ODcsIDB4NGUsIDB4OTYsIDB4YzcsIDB4YTYsCisJMHhhMywgMHgxZCwgMHgzZiwgMHg1NywgMHhkNCwgMHg5ZCwgMHhkZCwgMHhiMCwgMHhjNiwgMHgzZCwgMHg0OCwgMHgwNiwKKwkweDUzLCAweGZjLCAweDdmLCAweGM1LCAweDE1LCAweDJiLCAweDEzLCAweGRkLCAweGIwLCAweGM3LCAweGE3LCAweDc5LAorCTB4ZGYsIDB4Y2IsIDB4N2IsIDB4MjYsIDB4ZDIsIDB4OTksIDB4MmIsIDB4YWUsIDB4YjgsIDB4M2QsIDB4OTEsIDB4YzIsCisJMHhjMCwgMHhiOCwgMHg3YywgMHhmNiwgMHg2MiwgMHhhYSwgMHgzZSwgMHg4NSwgMHhlZCwgMHhiYiwgMHgzNSwgMHhkNCwKKwkweGU5LCAweGRkLCAweGM4LCAweDhjLCAweGNiLCAweDY3LCAweGM3LCAweDM5LCAweDY1LCAweDdjLCAweDA5LCAweDdiLAorCTB4ZGEsIDB4ZTgsIDB4ZmYsIDB4NzMsIDB4YmIsIDB4YjEsIDB4NmQsIDB4YjcsIDB4ODUsIDB4NGEsIDB4ZGQsIDB4YTIsCisJMHhlZSwgMHgxNSwgMHhlZiwgMHgzZiwgMHhiNywgMHgyOSwgMHhkMCwgMHhlZSwgMHg4NCwgMHhiNywgMHg0MiwgMHgxNywKKwkweGJkLCAweDI1LCAweGJjLCAweGY3LCAweGQ4LCAweDY2LCAweDcwLCAweGJlLCAweGVlLCAweDM4LCAweDIzLCAweGM2LAorCTB4MjIsIDB4N2MsIDB4YmEsIDB4N2IsIDB4MmQsIDB4YWMsIDB4N2QsIDB4MDEsIDB4NTgsIDB4YWIsIDB4ZTUsIDB4N2YsCisJMHgzNywgMHg3NSwgMHhiOCwgMHgxNiwgMHhiZCwgMHhmYiwgMHhkNiwgMHhhMiwgMHhmZiwgMHgzMSwgMHgzYSwgMHg2ZSwKKwkweDdkLCAweGQwLCAweDlkLCAweGE3LCAweDZmLCAweGI1LCAweDQ4LCAweDlmLCAweGE0LCAweDdmLCAweDNkLCAweGJjLAorCTB4NDQsIDB4YjcsIDB4NWYsIDB4ZTAsIDB4N2YsIDB4MjksIDB4MzMsIDB4ZWQsIDB4NjAsIDB4Y2UsIDB4ODUsIDB4MzIsCisJMHhkYiwgMHg1OSwgMHg2NiwgMHhkYiwgMHg0NSwgMHg2NSwgMHg0YywgMHgzYywgMHgzMSwgMHgyOSwgMHhiYSwgMHgxMCwKKwkweDk1LCAweGZkLCAweDNlLCAweDVkLCAweDdjLCAweGRiLCAweGU5LCAweDBkLCAweDg5LCAweDJlLCAweGFjLCAweDFlLAorCTB4MWYsIDB4MjIsIDB4ZGQsIDB4ZjcsIDB4MmEsIDB4NWUsIDB4YWMsIDB4MTgsIDB4MDAsIDB4ZWIsIDB4ZDAsIDB4MDksCisJMHhhYSwgMHgyMywgMHhjOSwgMHg4NSwgMHg4YSwgMHg4OSwgMHhlYSwgMHgwMSwgMHgwNSwgMHgyYiwgMHhlMiwgMHg1NSwKKwkweGQwLCAweGVhLCAweDQ1LCAweGRlLCAweDhmLCAweDFjLCAweDJiLCAweDI4LCAweGZkLCAweDNkLCAweDhhLCAweDFhLAorCTB4ZGUsIDB4NWYsIDB4MTcsIDB4ZmYsIDB4MDEsIDB4ZjEsIDB4NGMsIDB4ZmEsIDB4MTQsIDB4NjcsIDB4ZjksIDB4M2IsCisJMHg3OCwgMHhmZiwgMHg5NSwgMHgxOSwgMHhkZiwgMHhhNSwgMHg5YywgMHhlMywgMHhmNCwgMHgxOSwgMHgwNiwgMHhmYSwKKwkweDMzLCAweDZkLCAweGQ4LCAweDllLCAweDQ5LCAweDQ2LCAweGE4LCAweDI1LCAweGNiLCAweDY3LCAweGYyLCAweGJlLAorCTB4MTksIDB4ZWQsIDB4ZWEsIDB4ODUsIDB4YjQsIDB4MDMsIDB4YTUsIDB4ZGEsIDB4ODQsIDB4MzcsIDB4ZGYsIDB4NzEsCisJMHhkYywgMHhmZiwgMHg5MiwgMHhhZCwgMHhmNywgMHgzYywgMHhhNSwgMHhmOCwgMHg2OCwgMHhlYywgMHhkMiwgMHhjZSwKKwkweDcxLCAweGZmLCAweDJiLCAweGI2LCAweDgyLCAweDM3LCAweGY1LCAweGU4LCAweDg2LCAweDc3LCAweDk0LCAweGUzLAorCTB4ZmUsIDB4OTcsIDB4ZjMsIDB4NDEsIDB4Y2MsIDB4MWIsIDB4ODgsIDB4ZjQsIDB4NTgsIDB4NGEsIDB4MDIsIDB4NWYsCisJMHhjZiwgMHg4NywgMHgxMCwgMHgxZSwgMHgzMCwgMHg3MSwgMHgzMCwgMHg2ZiwgMHhlMCwgMHhjOSwgMHg4YiwgMHg3MCwKKwkweGUwLCAweDQzLCAweGZmLCAweDJjLCAweDBmLCAweGM3LCAweGJlLCAweGNlLCAweGQ2LCAweGQwLCAweDZiLCAweDljLAorCTB4NzMsIDB4OTIsIDB4NDEsIDB4YTQsIDB4ZWEsIDB4Y2MsIDB4ZTMsIDB4ZmUsIDB4ZjcsIDB4MDcsIDB4YTAsIDB4ZDQsCisJMHg5YSwgMHg3YSwgMHhiOCwgMHhhMCwgMHhmYywgMHhhYiwgMHg5MywgMHgwYSwgMHg0OSwgMHgzMSwgMHhmNiwgMHhjZiwKKwkweGM1LCAweGIyLCAweDI0LCAweGVkLCAweGNlLCAweDIwLCAweGNlLCAweDlkLCAweDcxLCAweDZhLCAweDY4LCAweGIzLAorCTB4MTUsIDB4ZTYsIDB4NjUsIDB4MTgsIDB4MWYsIDB4ZDYsIDB4ZjEsIDB4YTQsIDB4ZWQsIDB4MzgsIDB4ZWYsIDB4MTksCisJMHg1MywgMHg4OSwgMHgwMCwgMHhmNCwgMHhlZSwgMHg3NywgMHgxMSwgMHg0OSwgMHgyZSwgMHhhMiwgMHg1ZSwgMHg4ZSwKKwkweGU2LCAweDc1LCAweDhjLCAweGRhLCAweDI2LCAweDllLCAweGIzLCAweDliLCAweDgzLCAweDdkLCAweDU4LCAweDhjLAorCTB4NjQsIDB4YjgsIDB4MTgsIDB4NDMsIDB4MjYsIDB4ZDgsIDB4ZWYsIDB4OTEsIDB4NjgsIDB4MzcsIDB4ZWEsIDB4Y2MsCisJMHgwNCwgMHgwZSwgMHhiMSwgMHhkZiwgMHhhNywgMHg5NywgMHg4OCwgMHgxYywgMHgwMywgMHgyZiwgMHhmZiwgMHgwMSwKKwkweDdkLCAweDI1LCAweGJlLCAweGUzLCAweDcxLCAweGY2LCAweDM1LCAweGIxLCAweGY4LCAweDljLCAweDgzLCAweGQ5LAorCTB4N2UsIDB4OWMsIDB4MzAsIDB4ZTYsIDB4ZDIsIDB4MGUsIDB4NjEsIDB4NTUsIDB4OTksIDB4N2UsIDB4NmYsIDB4YmYsCisJMHgxZCwgMHhjNCwgMHg4MSwgMHg3YywgMHhjMCwgMHhkYiwgMHg2NywgMHg4NywgMHhiMCwgMHg4ZiwgMHhmZSwgMHgzNiwKKwkweDhmLCAweGE2LCAweDFlLCAweGE2LCAweGRjLCAweDc5LCAweGM0LCAweGI1LCAweGMyLCAweDcwLCAweDEzLCAweDI2LAorCTB4ODcsIDB4MjMsIDB4YzYsIDB4MmIsIDB4NGEsIDB4MTgsIDB4NjMsIDB4YTMsIDB4OTcsIDB4NjEsIDB4NjIsIDB4NTgsCisJMHhjMSwgMHg3OCwgMHg5NCwgMHg3ZCwgMHhlNywgMHhlNywgMHgyZiwgMHgwZiwgMHg1ZiwgMHg4MSwgMHhmYywgMHhiMCwKKwkweDA3LCAweDNiLCAweDVjLCAweGJkLCAweGJhLCAweDM4LCAweDUzLCAweGZhLCAweDdmLCAweDE5LCAweDcyLCAweGEzLAorCTB4ZjAsIDB4MmUsIDB4MWEsIDB4MDgsIDB4ZTIsIDB4YTksIDB4YmMsIDB4ZDcsIDB4YWIsIDB4MGYsIDB4ODQsIDB4MzAsCisJMHg5YSwgMHhmZiwgMHgzNiwgMHhlNywgMHg0ZCwgMHg2NCwgMHg2YiwgMHgxOCwgMHhiMSwgMHhjNywgMHhkYywgMHgzOSwKKwkweGFjLCAweDMzLCAweDI5LCAweGFjLCAweDE4LCAweDVmLCAweDE5LCAweGNiLCAweDM0LCAweGM2LCAweDk5LCAweDA0LAorCTB4NzEsIDB4NDgsIDB4N2MsIDB4ZGMsIDB4NGYsIDB4MGMsIDB4MTIsIDB4MWYsIDB4N2YsIDB4NGQsIDB4NDEsIDB4NmQsCisJMHgwMiwgMHg3ZCwgMHg5MywgMHhlNSwgMHhlNywgMHgwYSwgMHhlZCwgMHhkZiwgMHg4YiwgMHg3NSwgMHg0MSwgMHgwMywKKwkweDc2LCAweDQ2LCAweGVjLCAweGI0LCAweDhjLCAweGNiLCAweGYyLCAweDU5LCAweGU2LCAweGJmLCAweDFhLCAweGQ2LAorCTB4ZmUsIDB4NmEsIDB4ZWMsIDB4YTAsIDB4OGYsIDB4M2QsIDB4YmEsIDB4NTMsIDB4ZWUsIDB4M2IsIDB4Y2UsIDB4N2QsCisJMHhmMSwgMHgzYSwgMHhkYSwgMHgxOCwgMHg2ZSwgMHhhYSwgMHg0MiwgMHhkNCwgMHg3OCwgMHhjYiwgMHhlZCwgMHg5YiwKKwkweDg1LCAweGIxLCAweGJjLCAweGM0LCAweDUwLCAweDhkLCAweGYxLCAweGVkLCAweDI4LCAweGRiLCAweGVhLCAweDYwLAorCTB4M2IsIDB4MDYsIDB4YmUsIDB4M2QsIDB4ZDksIDB4ODYsIDB4N2YsIDB4OWMsIDB4OGMsIDB4ZTEsIDB4MWYsIDB4MjYsCisJMHg3NSwgMHhmYywgMHhmZCwgMHhhNCwgMHg4NiwgMHg2NywgMHgyZSwgMHhjMiwgMHhmNSwgMHgzYiwgMHhhOSwgMHgyYiwKKwkweGMxLCAweDMwLCAweDAzLCAweDViLCAweDMyLCAweDE1LCAweGQ4LCAweDM2LCAweDVjLCAweDhkLCAweGJlLCAweGUxLAorCTB4ZTYsIDB4ZDgsIDB4NzMsIDB4YzQsIDB4ZTMsIDB4N2YsIDB4MzAsIDB4NmUsIDB4YzcsIDB4NTQsIDB4NDMsIDB4ODcsCisJMHhlYiwgMHgzMywgMHg4ZiwgMHhmMCwgMHhmZSwgMHhhMywgMHhjMywgMHhjZCwgMHg5YywgMHg0MywgMHhjNywgMHg1MSwKKwkweGUzLCAweGFkLCAweDg5LCAweDQzLCAweGM0LCAweGY3LCAweGUzLCAweGExLCAweDg4LCAweDM2LCAweGE1LCAweDQ2LAorCTB4YjQsIDB4MjQsIDB4N2MsIDB4YjAsIDB4ZGIsIDB4NTQsIDB4NTgsIDB4NzMsIDB4MjIsIDB4MzksIDB4N2EsIDB4MzEsCisJMHg0MiwgMHhmYSwgMHg3ZCwgMHgxYywgMHg1YiwgMHg0NCwgMHhiMywgMHg1NCwgMHg4MywgMHhmNiwgMHhjYiwgMHg5OCwKKwkweGExLCAweDc2LCAweDEwLCAweDVmLCAweGFhLCAweGYxLCAweGZlLCAweDcwLCAweGE0LCAweGRmLCAweDUyLCAweGVmLAorCTB4ODAsIDB4ZDUsIDB4ZTAsIDB4MzgsIDB4NWYsIDB4OGQsIDB4NjMsIDB4YzMsIDB4NWMsIDB4MTMsIDB4YzksIDB4MzksCisJMHg4YywgMHgwNSwgMHg1NywgMHg5OCwgMHg0OSwgMHgzMCwgMHg4ZSwgMHhlMSwgMHhmNCwgMHg4MCwgMHgxZSwgMHhmZSwKKwkweDdmLCAweDk0LCAweDNiLCAweGYxLCAweGRmLCAweGJiLCAweDIzLCAweDlhLCAweGE2LCAweGI2LCAweDVhLCAweGZiLAorCTB4NTQsIDB4OTIsIDB4OGQsIDB4NDYsIDB4NjgsIDB4NjEsIDB4ZjMsIDB4NTYsIDB4NmMsIDB4NzQsIDB4NzksIDB4ODIsCisJMHg4MiwgMHhhMCwgMHhkZSwgMHg4MSwgMHhiZSwgMHgwYywgMHgyYiwgMHg4NSwgMHg5YSwgMHg3YiwgMHgwNiwgMHhkNSwKKwkweGU2LCAweDY5LCAweDQzLCAweDhkLCAweDFjLCAweGVkLCAweDU2LCAweDg5LCAweGI3LCAweDhiLCAweDRmLCAweDNiLAorCTB4NWEsIDB4YTMsIDB4ZTMsIDB4YjQsIDB4MmYsIDB4OTYsIDB4MzYsIDB4MzUsIDB4MzQsIDB4NzAsIDB4OWUsIDB4ZWIsCisJMHgzOSwgMHhjZiwgMHhlZCwgMHg4NSwgMHg2YSwgMHhiYywgMHgzMywgMHgwYywgMHg2YiwgMHhhZSwgMHgxOSwgMHhlOSwKKwkweDdhLCAweDQwLCAweGFkLCAweGM2LCAweGRiLCAweGEzLCAweGQ1LCAweDM4LCAweDM5LCAweGVjLCAweGM1LCAweDViLAorCTB4YzMsIDB4OGUsIDB4NzMsIDB4OGYsIDB4NTEsIDB4ODcsIDB4OGEsIDB4MzgsIDB4ZTYsIDB4NTQsIDB4MjAsIDB4N2EsCisJMHg2NiwgMHgwNCwgMHgxNiwgMHg3ZSwgMHhjMywgMHhiMiwgMHhiZiwgMHgxYywgMHgwZSwgMHhlMywgMHg1NywgMHhjMywKKwkweDFmLCAweGMzLCAweDMzLCAweDBkLCAweGM5LCAweDYzLCAweGIzLCAweDE5LCAweDIzLCAweGE3LCAweDY5LCAweDNmLAorCTB4YTcsIDB4ZWQsIDB4NDgsIDB4Y2YsIDB4M2MsIDB4NGYsIDB4NjQsIDB4MjMsIDB4NzksIDB4Y2IsIDB4ZmEsIDB4MmYsCisJMHgyYSwgMHg5MSwgMHhkNCwgMHgyYiwgMHg0YSwgMHg0NCwgMHgxYiwgMHg1MCwgMHg0MiwgMHg3OCwgMHg5NywgMHg3NiwKKwkweDdhLCAweDJhLCAweGRmLCAweDljLCAweGY4LCAweDAxLCAweGRiLCAweGZmLCAweGI1LCAweGYxLCAweDBmLCAweGNlLAorCTB4NTQsIDB4YTMsIDB4ZTgsIDB4NTAsIDB4ZjQsIDB4NDUsIDB4OWQsIDB4ZDMsIDB4NzcsIDB4ZmYsIDB4OTEsIDB4MzEsCisJMHhlYSwgMHgxZiwgMHgzMiwgMHhkNCwgMHgzOSwgMHhmYiwgMHhmMywgMHhjYywgMHg2ZiwgMHhjNSwgMHgyZiwgMHg5OSwKKwkweGFmLCAweDA0LCAweGU3LCAweGYxLCAweDcyLCAweGZjLCAweDRmLCAweDc3LCAweDZjLCAweGM3LCAweDljLCAweGJmLAorCTB4MDksIDB4YzksIDB4ZjgsIDB4M2EsIDB4MWIsIDB4OGIsIDB4MTgsIDB4MjQsIDB4ZTMsIDB4M2MsIDB4ZWEsIDB4YTQsCisJMHg4MiwgMHgzMiwgMHg0NiwgMHgxOSwgMHhhYiwgMHhhYiwgMHg0YiwgMHg2ZCwgMHg4MywgMHhmMiwgMHg5MCwgMHg4YSwKKwkweDZhLCAweGM3LCAweDc5LCAweGNjLCAweDI4LCAweDNkLCAweDBmLCAweDk1LCAweGM3LCAweGZhLCAweDMxLCAweGRlLAorCTB4OTcsIDB4ZjEsIDB4YmUsIDB4ZTMsIDB4MTEsIDB4ZGQsIDB4NmIsIDB4ZWEsIDB4ZDUsIDB4ZmMsIDB4MWUsIDB4YjEsCisJMHg5MiwgMHhiOCwgMHgzMywgMHhjMCwgMHhlZiwgMHhiMSwgMHhlNCwgMHhmOSwgMHhlZiwgMHhkZSwgMHhiYSwgMHg4YiwKKwkweDlmLCAweGQzLCAweDRlLCAweGRkLCAweGY2LCAweGVlLCAweGU0LCAweDc3LCAweDE5LCAweGNiLCAweGFiLCAweGI0LAorCTB4OWIsIDB4MGYsIDB4YjMsIDB4MTMsIDB4YjEsIDB4OTEsIDB4MTgsIDB4ZWQsIDB4ZTksIDB4OTQsIDB4YzQsIDB4MTUsCisJMHgyYiwgMHg2NCwgMHhmYSwgMHgyZCwgMHhkNSwgMHg4NCwgMHg0NiwgMHg5YywgMHhmMCwgMHgyYiwgMHhlNiwgMHgwNiwKKwkweDY4LCAweDc5LCAweDBiLCAweDlmLCAweGVhLCAweGYwLCAweGUwLCAweGFmLCAweDNhLCAweDE0LCAweGNjLCAweGQ2LAorCTB4MzcsIDB4MjAsIDB4N2IsIDB4YWQsIDB4ZTUsIDB4ZDQsIDB4ZWIsIDB4N2IsIDB4NTUsIDB4ZjEsIDB4ODEsIDB4OGEsCisJMHgzNCwgMHgyYywgMHhmYSwgMHgxZCwgMHgxMiwgMHhlNCwgMHg0YSwgMHg3NSwgMHg3ZiwgMHhhYSwgMHhlMCwgMHg0NCwKKwkweDNjLCAweDRhLCAweDliLCAweGRiLCAweDgyLCAweDZkLCAweDljLCAweGYzLCAweDU5LCAweDY5LCAweGY4LCAweDAzLAorCTB4YTYsIDB4MDksIDB4N2IsIDB4MDAsIDB4ZmUsIDB4MmEsIDB4ZmEsIDB4ZmUsIDB4OTUsIDB4MDMsIDB4Y2QsIDB4MWIsCisJMHhjNiwgMHg5NCwgMHg0OCwgMHgyMiwgMHhhZCwgMHg0NCwgMHhiYSwgMHhhOSwgMHg2ZiwgMHhlMywgMHhiNCwgMHg4YiwKKwkweDFiLCAweDExLCAweGFkLCAweDQyLCAweDkxLCAweDc2LCAweDRjLCAweGI0LCAweGU0LCAweGI3LCAweDYwLCAweDYwLAorCTB4NTIsIDB4M2UsIDB4MjcsIDB4YTAsIDB4ZTcsIDB4N2YsIDB4NWMsIDB4ZWEsIDB4M2IsIDB4ZmMsIDB4M2UsIDB4ZjYsCisJMHg2MSwgMHhiZiwgMHhmZCwgMHhiYSwgMHg5MywgMHgwYiwgMHg0NiwgMHhiNCwgMHg5YywgMHhmYiwgMHg3ZCwgMHgzZCwKKwkweGJmLCAweGMzLCAweDVmLCAweDYxLCAweDNlLCAweDg4LCAweGU3LCAweGVkLCAweDM3LCAweGU3LCAweDk0LCAweGNiLAorCTB4MTUsIDB4ZmIsIDB4N2EsIDB4NjksIDB4N2YsIDB4ZmUsIDB4YjcsIDB4OTMsIDB4MGMsIDB4YjksIDB4ZmQsIDB4ZjEsCisJMHhkNywgMHhiMCwgMHg4ZCwgMHhjZiwgMHgwYywgMHhiMCwgMHg4ZCwgMHg0YywgMHhiOSwgMHgzZiwgMHg0MCwgMHgyMCwKKwkweDJkLCAweDcxLCAweDM4LCAweGEyLCAweDJkLCAweDUwLCAweDlhLCAweDhkLCAweDAxLCAweDI1LCAweDEyLCAweGJiLAorCTB4NTcsIDB4NjksIDB4NGQsIDB4OGMsIDB4OTEsIDB4NWYsIDB4NmUsIDB4NDcsIDB4YjEsIDB4NGYsIDB4ZDEsIDB4N2MsCisJMHhiMSwgMHgzZiwgMHgwYiwgMHhmMiwgMHg1MCwgMHgzYywgMHgwMywgMHgwOCwgMHhjYywgMHhkNywgMHgxNywgMHg2MiwKKwkweGIzLCAweDNiLCAweGE3LCAweDUwLCAweGMyLCAweDAzLCAweDFhLCAweDZhLCAweGM5LCAweDVmLCAweGMyLCAweDEzLAorCTB4YzAsIDB4ZTQsIDB4MTAsIDB4YjksIDB4NWMsIDB4YmMsIDB4MTksIDB4OWYsIDB4NjMsIDB4MmMsIDB4OTgsIDB4YzcsCisJMHgzMiwgMHg1ZiwgMHgwYywgMHg5ZSwgMHhjNywgMHgyZiwgMHhhNSwgMHhkZiwgMHgyNiwgMHhjMCwgMHhjYywgMHgyOSwKKwkweGYyLCAweGIyLCAweGQ0LCAweDdmLCAweDQxLCAweDUyLCAweGVlLCAweDNkLCAweDZlLCAweDQzLCAweGM5LCAweGQ4LAorCTB4OTEsIDB4M2QsIDB4ODAsIDB4M2UsIDB4MTUsIDB4ZjcsIDB4MjQsIDB4ZWYsIDB4MGYsIDB4NjMsIDB4MzMsIDB4NGUsCisJMHhjNywgMHhhMywgMHhhOSwgMHg4MiwgMHgxMiwgMHgzNSwgMHg4NiwgMHgxNCwgMHhjMywgMHhiZiwgMHg4ZCwgMHhlZCwKKwkweGVkLCAweDYwLCAweDk5LCAweGVkLCAweGJjLCAweDFlLCAweDg4LCAweGVhLCAweDVkLCAweDc3LCAweDI4LCAweGM5LAorCTB4MmIsIDB4YWIsIDB4NTgsIDB4ZTYsIDB4YTQsIDB4MTEsIDB4MjUsIDB4Y2YsIDB4OGMsIDB4NGUsIDB4YWYsIDB4ODIsCisJMHhlMSwgMHg3ZiwgMHgyMiwgMHgyZiwgMHhiMiwgMHgxMiwgMHhjYSwgMHg5NiwgMHhjMiwgMHhlMywgMHg2YSwgMHgxMSwKKwkweDhmLCAweDdlLCAweDVkLCAweGQyLCAweGQ5LCAweDQ5LCAweGY5LCAweGVlLCAweGI2LCAweGVkLCAweDFkLCAweDY4LAorCTB4YWEsIDB4ZjksIDB4ZWQsIDB4N2IsIDB4ZGEsIDB4OWMsIDB4OGIsIDB4ZWYsIDB4YjUsIDB4MDYsIDB4NDcsIDB4ZTksCisJMHg3ZiwgMHgxZSwgMHhiZCwgMHg4YSwgMHg3MywgMHgyNywgMHhmYywgMHgyOCwgMHgxOSwgMHhmMywgMHg0MSwgMHhlZSwKKwkweDc5LCAweDkwLCAweGYzLCAweDI2LCAweGMzLCAweDFlLCAweDdjLCAweGUwLCAweDI0LCAweDU3LCAweGNiLCAweGJkLAorCTB4NmEsIDB4YTQsIDB4YmEsIDB4NWIsIDB4YzMsIDB4NWUsIDB4YjQsIDB4MjYsIDB4YjYsIDB4MTIsIDB4MGIsIDB4OGUsCisJMHhhZiwgMHg1ZSwgMHhjNiwgMHg2NywgMHg1MSwgMHhlMywgMHgzOSwgMHgzNCwgMHg2YiwgMHg1YiwgMHgyMSwgMHg5ZiwKKwkweGNmLCAweGQyLCAweDY2LCAweDk3LCAweDQ5LCAweDVkLCAweDk2LCAweDI5LCAweDcyLCAweDFmLCAweGMxLCAweDlhLAorCTB4MmQsIDB4ODYsIDB4ODMsIDB4ZTcsIDB4MGQsIDB4NTgsIDB4OTUsIDB4ZTYsIDB4NDEsIDB4ZTUsIDB4ODQsIDB4ZmQsCisJMHgxYiwgMHgyNywgMHhlOSwgMHhjNSwgMHg0YSwgMHhmYSwgMHhhNSwgMHg0MSwgMHhkYSwgMHhhYiwgMHhmOSwgMHhjZCwKKwkweGE4LCAweDc2LCAweDk0LCAweDk5LCAweDgyLCAweGM3LCAweGI0LCAweDk0LCAweGUzLCAweGY5LCAweDJkLCAweGNhLAorCTB4ZWIsIDB4ZjksIDB4N2UsIDB4ZTUsIDB4NTQsIDB4NWUsIDB4ZWEsIDB4MWUsIDB4NTQsIDB4NGUsIDB4ZTYsIDB4MjUsCisJMHgxZSwgMHgzNiwgMHg2OSwgMHg0NywgMHhjOCwgMHg2ZiwgMHhjOCwgMHhhOSwgMHhkNCwgMHgzZSwgMHgwMywgMHhjYSwKKwkweDM2LCAweGEzLCAweDk2LCAweDNjLCAweDVmLCAweDhmLCAweDhkLCAweGIwLCAweGJmLCAweGZiLCAweDNiLCAweDYwLAorCTB4NmMsIDB4MzcsIDB4N2MsIDB4MzgsIDB4MWUsIDB4NDQsIDB4YTAsIDB4Y2YsIDB4ZjAsIDB4Y2EsIDB4NzcsIDB4ZTYsCisJMHgwMywgMHg1MiwgMHhiNywgMHg0OSwgMHhkYiwgMHg5YSwgMHgzZiwgMHg0NywgMHhmZiwgMHgyYSwgMHg3ZSwgMHhkZiwKKwkweGRmLCAweDUxLCAweGJlLCAweGY3LCAweDBiLCAweDY3LCAweDZhLCAweGI1LCAweGNhLCAweGVmLCAweDdmLCAweGVhLAorCTB4ZTEsIDB4NTAsIDB4NTgsIDB4NzcsIDB4MjYsIDB4M2YsIDB4MTcsIDB4MmUsIDB4YTUsIDB4OTIsIDB4M2YsIDB4ZDYsCisJMHhjMywgMHgwYSwgMHg0NiwgMHhhYywgMHgxYywgMHg3MywgMHg4NSwgMHhiZSwgMHg0YywgMHgzYiwgMHhmZCwgMHgyZCwKKwkweGNjLCAweDU4LCAweDk5LCAweDI0LCAweGJlLCAweDkzLCAweGY3LCAweGIyLCAweGNkLCAweDBhLCAweDNkLCAweDgwLAorCTB4OWIsIDB4ZWMsIDB4NjYsIDB4NGYsIDB4NTEsIDB4N2YsIDB4MmEsIDB4MzEsIDB4Y2MsIDB4YzMsIDB4OTgsIDB4MmUsCisJMHgxYywgMHhlZiwgMHg1MiwgMHhjZSwgMHhkZCwgMHhhNCwgMHhiZCwgMHhjNSwgMHg3ZSwgMHg1NywgMHhlOSwgMHg3YSwKKwkweGFjLCAweDRhLCAweDY5LCAweGQyLCAweDVlLCAweGNmLCAweDI3LCAweGU5LCAweGUzLCAweDNkLCAweDZjLCAweDM3LAorCTB4ODAsIDB4ZDcsIDB4ZWQsIDB4NWEsIDB4ZTYsIDB4MjAsIDB4OTEsIDB4YTQsIDB4NDUsIDB4ODEsIDB4MzcsIDB4NzcsCisJMHg4NCwgMHg0MSwgMHhjZSwgMHgzNywgMHhlMywgMHhhZiwgMHgxYiwgMHg4YywgMHhmZiwgMHgxMiwgMHhhMywgMHhkNSwKKwkweDViLCAweDk2LCAweDI0LCAweGIwLCAweDNlLCAweDBmLCAweGVmLCAweGJhLCAweDBlLCAweDEzLCAweGY3LCAweDMwLAorCTB4YjYsIDB4ZGYsIDB4YzcsIDB4NzgsIDB4ZjksIDB4MjAsIDB4NjMsIDB4ZTEsIDB4OGUsIDB4MzgsIDB4YzcsIDB4NTYsCisJMHhlZiwgMHgzOCwgMHg5NSwgMHhmYSwgMHg2NiwgMHhjOSwgMHg2NywgMHgzMCwgMHhjMCwgMHg1OCwgMHg3YywgMHgzNywKKwkweGUzLCAweGNiLCAweDE2LCAweDdlLCAweDdlLCAweDI5LCAweGZmLCAweDFmLCAweGNlLCAweDdkLCAweGNjLCAweGE3LAorCTB4OWUsIDB4YmYsIDB4NDgsIDB4MjYsIDB4ZDQsIDB4NTEsIDB4YmQsIDB4MzUsIDB4YjYsIDB4OTUsIDB4YjEsIDB4OTgsCisJMHg3MiwgMHhhZCwgMHg1YSwgMHhkMywgMHg3MSwgMHhhZSwgMHg4YywgMHg0NiwgMHg5MiwgMHgzZSwgMHhjNSwgMHhjMCwKKwkweDczLCAweDEzLCAweGM3LCAweDFkLCAweDZkLCAweDhlLCAweGU0LCAweDUyLCAweGU1LCAweDM4LCAweDI4LCAweDYzLAorCTB4OTUsIDB4MWMsIDB4NDEsIDB4ZjAsIDB4NDEsIDB4ZjIsIDB4ODQsIDB4OTksIDB4MTgsIDB4YTEsIDB4ZTIsIDB4ZTYsCisJMHg2MSwgMHhjOSwgMHgxMywgMHhjMiwgMHg1OCwgMHg2NSwgMHg3ZiwgMHgwOSwgMHhjZiwgMHhiNSwgMHg3OSwgMHhkMSwKKwkweGM1LCAweDFjLCAweGViLCAweDE2LCAweDNiLCAweDgwLCAweDNiLCAweDg4LCAweGE1LCAweDJiLCAweDZjLCAweGU2LAorCTB4NGUsIDB4YzEsIDB4MTAsIDB4NmUsIDB4YjUsIDB4YmQsIDB4MzgsIDB4ZGMsIDB4YzYsIDB4MWMsIDB4MjgsIDB4NTQsCisJMHg4OSwgMHg3NywgMHgwZCwgMHgwZiwgMHg4ZSwgMHgxOCwgMHg0MSwgMHhlNCwgMHg1YywgMHg3ZiwgMHhkOCwgMHg0MSwKKwkweDBjLCAweGE0LCAweDFlLCAweDU1LCAweGM5LCAweDFkLCAweDQ0LCAweDg3LCAweDFlLCAweGVhLCAweDUzLCAweDQ1LAorCTB4ZWEsIDB4YmMsIDB4MGUsIDB4M2YsIDB4MmMsIDB4MTcsIDB4OTAsIDB4N2UsIDB4NDksIDB4M2UsIDB4ZjAsIDB4MzMsCisJMHgyNywgMHgzNSwgMHg0NywgMHhlYSwgMHhjMywgMHgwYSwgMHg5OCwgMHgzMiwgMHgwZSwgMHhlMSwgMHhiNywgMHgwNiwKKwkweGZhLCAweDI2LCAweDNhLCAweGM4LCAweGVkLCAweDY2LCAweDBlLCAweGY1LCAweDBjLCAweGI5LCAweDc1LCAweDFkLAorCTB4NWUsIDB4ZDMsIDB4ODUsIDB4NWIsIDB4YmYsIDB4OGEsIDB4MjAsIDB4N2QsIDB4YjcsIDB4N2YsIDB4MjIsIDB4YmEsCisJMHhlMSwgMHg4YywgMHhlMiwgMHhjMSwgMHg0YiwgMHg3YSwgMHgyZCwgMHg3OSwgMHg5ZiwgMHg4OSwgMHhlZCwgMHgxMywKKwkweGYwLCAweDZlLCAweDVkLCAweDYyLCAweDIwLCAweDNkLCAweGQxLCAweDliLCAweDk4LCAweGM1LCAweGI0LCAweGQ3LAorCTB4YmIsIDB4YTQsIDB4YzgsIDB4ODksIDB4M2UsIDB4NDMsIDB4ZGQsIDB4YWUsIDB4OGQsIDB4YmIsIDB4OWMsIDB4YTgsCisJMHhjOCwgMHgwNywgMHg4MiwgMHg4ZSwgMHg3MywgMHg1MiwgMHgxNywgMHgzZCwgMHgwMywgMHgwNywgMHg0YSwgMHgzYSwKKwkweGRlLCAweGNmLCAweGNmLCAweGZkLCAweDI1LCAweDFkLCAweDZmLCAweGExLCAweDNjLCAweGZhLCAweDFmLCAweGI2LAorCTB4NWQsIDB4YzQsIDB4NjMsIDB4MzQsIDB4NTQsIDB4OWEsIDB4YzIsIDB4NmYsIDB4ODgsIDB4YzMsIDB4YzQsIDB4OTMsCisJMHgyNCwgMHg3NSwgMHhmYywgMHg0MiwgMHg3ZSwgMHhiZCwgMHhlMCwgMHgzNiwgMHhhNywgMHhiYiwgMHhkZCwgMHhjNSwKKwkweGVmLCAweGE0LCAweDdhLCAweDgwLCAweDc2LCAweDIwLCAweDdhLCAweDc4LCAweGFkLCAweDk0LCAweGRiLCAweDM4LAorCTB4Y2UsIDB4OTAsIDB4MjEsIDB4M2EsIDB4MmUsIDB4ZTcsIDB4NjUsIDB4YTIsIDB4ZWIsIDB4MzYsIDB4YzksIDB4YjEsCisJMHhmYSwgMHg4MSwgMHhkZiwgMHhiMCwgMHhhYywgMHg4NywgMHhiOCwgMHg2YiwgMHhlMiwgMHg2YiwgMHhkZCwgMHg2MiwKKwkweDNiLCAweGIzLCAweGRjLCAweDU4LCAweDc5LCAweGQ1LCAweDQyLCAweGM3LCAweGY5LCAweDRhLCAweDVjLCAweGMzLAorCTB4N2IsIDB4N2EsIDB4NmIsIDB4YTIsIDB4NWQsIDB4OGQsIDB4YjAsIDB4YWYsIDB4NDksIDB4ZDgsIDB4OTMsIDB4MWQsCisJMHg5YywgMHhiYiwgMHgyYiwgMHg5MCwgMHgwYywgMHg4OSwgMHhhZCwgMHg2MSwgMHg0MywgMHg0NSwgMHgxMSwgMHhjMywKKwkweDcxLCAweGNhLCAweGQ2LCAweDYzLCAweGRiLCAweDM4LCAweDY3LCAweGZiLCAweDQyLCAweDVkLCAweGU0LCAweDcxLAorCTB4NmEsIDB4MjcsIDB4ZDMsIDB4N2YsIDB4ZjIsIDB4MjcsIDB4ZGQsIDB4N2EsIDB4MDQsIDB4ZWYsIDB4MzgsIDB4YjksCisJMHg5MCwgMHhjMywgMHgzOCwgMHgyOSwgMHhiOSwgMHhkMSwgMHg3YywgMHgxYywgMHgwZSwgMHg3YSwgMHhmMCwgMHg2MiwKKwkweGFjLCAweDExLCAweGM5LCAweDdhLCAweDA1LCAweDM1LCAweGZhLCAweDliLCAweGNlLCAweDc3LCAweDQyLCAweGQyLAorCTB4MGUsIDB4NzMsIDB4M2MsIDB4ZjUsIDB4NTYsIDB4OGYsIDB4ZTQsIDB4ODAsIDB4NWUsIDB4NWQsIDB4ZTQsIDB4NzYsCisJMHgzMSwgMHhjNywgMHhiZCwgMHhiNCwgMHhmZCwgMHg3ZiwgMHg3NSwgMHg4ZSwgMHg4NywgMHhhNCwgMHhmZCwgMHg0OCwKKwkweDUwLCAweDUzLCAweDdmLCAweGQ3LCAweDFjLCAweDdlLCAweGRmLCAweGY5LCAweDgxLCAweDJiLCAweDMzLCAweGUzLAorCTB4ZWEsIDB4MDEsIDB4YWEsIDB4YzgsIDB4MjMsIDB4NTQsIDB4NTQsIDB4OGIsIDB4Y2MsIDB4NzIsIDB4M2IsIDB4ZTIsCisJMHg2NywgMHg3MywgMHg3OSwgMHg0ZiwgMHg5ZSwgMHg4OSwgMHg4ZCwgMHg2YywgMHg2MSwgMHhiYiwgMHhjZiwgMHgzOSwKKwkweDY4LCAweDk0LCAweGVmLCAweGQzLCAweDFlLCAweDI5LCAweDZiLCAweDRkLCAweDFlLCAweDVhLCAweGUxLCAweGM1LAorCTB4NTIsIDB4YjQsIDB4YzQsIDB4OTcsIDB4MmQsIDB4OTcsIDB4YjEsIDB4YTgsIDB4NjYsIDB4NTIsIDB4ZjMsIDB4YzMsCisJMHg2YSwgMHhmNCwgMHgxMCwgMHg4YiwgMHhkZiwgMHg2OCwgMHg2YiwgMHhjMywgMHg3MiwgMHhlNiwgMHg4YywgMHhlZiwKKwkweDEwLCAweDVjLCAweDdhLCAweDc1LCAweDBmLCAweGE2LCAweDM4LCAweGJlLCAweDI3LCAweDBkLCAweDU5LCAweDJmLAorCTB4NzAsIDB4NzAsIDB4NGIsIDB4ZGMsIDB4NGEsIDB4ZDEsIDB4NjMsIDB4YWQsIDB4NTksIDB4YjQsIDB4OWQsIDB4NmEsCisJMHg1ZCwgMHhlMiwgMHg3YywgMHgyZCwgMHg2YSwgMHg0YywgMHg2ZiwgMHhlYywgMHgxZCwgMHg0NCwgMHg4YywgMHgxZCwKKwkweGU0LCAweDM5LCAweDVhLCAweDdkLCAweDRiLCAweGMyLCAweDQ3LCAweGVkLCAweGJlLCAweDZjLCAweDQ3LCAweDEzLAorCTB4NDcsIDB4OTQsIDB4YTIsIDB4M2YsIDB4YmMsIDB4YzAsIDB4YjksIDB4N2QsIDB4Y2QsIDB4ZDYsIDB4MzcsIDB4NTYsCisJMHg3YSwgMHg4YSwgMHhkZiwgMHg1ZiwgMHg3MSwgMHhmMywgMHhkMSwgMHhiMiwgMHgzZiwgMHg4NCwgMHg0YiwgMHhiOCwKKwkweGUxLCAweGY3LCAweDlmLCAweGIyLCAweDcxLCAweDg2LCAweDU0LCAweDg4LCAweDc5LCAweDI5LCAweGNlLCAweGY0LAorCTB4MTksIDB4NTMsIDB4OGEsIDB4NGYsIDB4YWYsIDB4MjUsIDB4YWUsIDB4MGEsIDB4OTYsIDB4NTYsIDB4OTAsIDB4MTMsCisJMHg0YSwgMHhlYywgMHhmNywgMHhmYiwgMHhkZiwgMHg2MSwgMHgxOSwgMHg3MiwgMHhiYSwgMHhlMywgMHhiMSwgMHhlYiwKKwkweDViLCAweDEzLCAweDdlLCAweDI0LCAweGFkLCAweDRhLCAweGZhLCAweGU1LCAweDJjLCAweDMzLCAweGU0LCAweGJmLAorCTB4YWEsIDB4NjAsIDB4MzUsIDB4MDYsIDB4NjgsIDB4ZDcsIDB4MzUsIDB4Y2MsIDB4NTcsIDB4NWIsIDB4ZDIsIDB4MTMsCisJMHg4YywgMHhlMSwgMHg2ZCwgMHg3OCwgMHg3MCwgMHg4MiwgMHgyMywgMHg2YiwgMHgxOCwgMHg2YywgMHg1NCwgMHg0ZCwKKwkweDU5LCAweDgzLCAweDA4LCAweGMyLCAweGQ3LCAweGYwLCAweGUwLCAweDBkLCAweGFhLCAweDc5LCAweDFjLCAweDNkLAorCTB4MWQsIDB4ZmUsIDB4Y2UsIDB4NDQsIDB4MDEsIDB4ZmUsIDB4N2EsIDB4NzMsIDB4MTMsIDB4ZTIsIDB4NjksIDB4YzksCisJMHgzYiwgMHgwNSwgMHgyMywgMHg5MywgMHg1YiwgMHg4OSwgMHg1YSwgMHg4ZCwgMHg3NSwgMHhkNywgMHg5NiwgMHhmNSwKKwkweDBkLCAweGI1LCAweGQ2LCAweDk0LCAweGZjLCAweDUzLCAweGViLCAweDdjLCAweGM1LCAweGM1LCAweGQyLCAweDIwLAorCTB4ZjMsIDB4ODUsIDB4MWYsIDB4ODcsIDB4ZmYsIDB4Y2YsIDB4ZWEsIDB4MjcsIDB4MzgsIDB4MjcsIDB4ZDIsIDB4MTcsCisJMHhmOSwgMHgyZiwgMHg3OSwgMHgzZiwgMHhiYywgMHgyYSwgMHhiMSwgMHhiMCwgMHg3NywgMHhkYywgMHhjYiwgMHhmYywKKwkweDRhLCAweGU2LCAweDRjLCAweGUyLCAweGYxLCAweDZiLCAweGZmLCAweGY1LCAweDc5LCAweGZhLCAweDhiLCAweDhmLAorCTB4YmEsIDB4N2YsIDB4NDQsIDB4YjcsIDB4MDgsIDB4ZjMsIDB4OGUsIDB4YTMsIDB4YzcsIDB4MjMsIDB4ZTEsIDB4MGEsCisJMHg0NSwgMHhjMywgMHhmNiwgMHhiNiwgMHg3ZiwgMHhhNywgMHg4ZCwgMHg4MCwgMHgzOCwgMHgwNiwgMHgxMiwgMHhlYiwKKwkweDVhLCAweDZjLCAweDE5LCAweGFmLCAweDk4LCAweDUxLCAweGFmLCAweDY3LCAweDRkLCAweGI5LCAweGRlLCAweDgwLAorCTB4NmUsIDB4YTUsIDB4YTQsIDB4ZGUsIDB4NjgsIDB4M2MsIDB4ZDIsIDB4YjMsIDB4OGQsIDB4ZjUsIDB4MWUsIDB4NjUsCisJMHhiZCwgMHgyNCwgMHg2MywgMHhlNywgMHgzZCwgMHgxMywgMHg0MSwgMHgzNywgMHg5ZiwgMHhiMywgMHhjNiwgMHhhYiwKKwkweDY3LCAweGI2LCAweDc3LCAweGJlLCAweGRlLCAweGUzLCAweGJhLCAweDM1LCAweGU1LCAweGI2LCAweGI3LCAweDM4LAorCTB4YjIsIDB4YjEsIDB4YzIsIDB4ZTMsIDB4NDUsIDB4OWEsIDB4ZjUsIDB4YTYsIDB4NTgsIDB4ZWYsIDB4ZjUsIDB4MDksCisJMHg1OSwgMHg4ZiwgMHhjMCwgMHgwZCwgMHhlMywgMHg3NiwgMHhlNiwgMHhiOCwgMHg0NywgMHhkNywgMHg4MywgMHgyNywKKwkweDkxLCAweDI0LCAweGU2LCAweGJhLCAweDczLCAweDc5LCAweGMzLCAweDU4LCAweDdlLCAweDMzLCAweGI2LCAweGViLAorCTB4ODcsIDB4ZTIsIDB4OTUsIDB4YWMsIDB4NzcsIDB4NDQsIDB4M2YsIDB4MTQsIDB4ZjYsIDB4ZDEsIDB4YWYsIDB4ZDYsCisJMHg1MSwgMHg1ZSwgMHgyZiwgMHhmMywgMHgxYSwgMHg5NSwgMHhmZSwgMHhiMiwgMHg2NSwgMHg1YywgMHg2MiwgMHhiZiwKKwkweDQxLCAweDVlLCAweDEyLCAweGEyLCAweGNkLCAweGM5LCAweDk4LCAweGE1LCAweDVkLCAweDk5LCAweDUzLCAweDE5LAorCTB4NWYsIDB4MjQsIDB4MzYsIDB4ZWUsIDB4OGUsIDB4NGYsIDB4OTksIDB4N2IsIDB4NDAsIDB4NzIsIDB4ZGQsIDB4N2EsCisJMHgwYiwgMHg3ZCwgMHg2ZCwgMHgxMiwgMHhmZiwgMHgxNCwgMHg2MiwgMHg2ZiwgMHgwMywgMHhmMywgMHg0ZiwgMHg2OSwKKwkweDIzLCAweDg0LCAweDZkLCAweGY0LCAweGVkLCAweGZkLCAweDg2LCAweGUzLCAweDNjLCAweDZmLCAweGNjLCAweGM3LAorCTB4MDEsIDB4MjMsIDB4OTIsIDB4MTIsIDB4M2IsIDB4N2MsIDB4ZDMsIDB4NTgsIDB4NzYsIDB4YTUsIDB4ZTQsIDB4OTYsCisJMHhjMCwgMHg5ZiwgMHg2MCwgMHg4YSwgMHhiNiwgMHg1MSwgMHhhNSwgMHg4YiwgMHhiZiwgMHgyOSwgMHgwOCwgMHg0NywKKwkweGJkLCAweDVhLCAweDhkLCAweGUyLCAweGMwLCAweGJmLCAweDc4LCAweGUxLCAweGM2LCAweDg1LCAweDFjLCAweDdiLAorCTB4ZWQsIDB4ZjUsIDB4MGEsIDB4ZGUsIDB4YmYsIDB4NGEsIDB4YzEsIDB4YTEsIDB4YWIsIDB4YTIsIDB4ZTEsIDB4MTEsCisJMHg2NSwgMHgxNiwgMHhiMSwgMHgzNSwgMHhkYSwgMHhkZCwgMHhhOSwgMHg1OCwgMHg0NywgMHg1OSwgMHgzNywgMHhkOSwKKwkweGU2LCAweDg5LCAweDg0LCAweGExLCAweGQ0LCAweGQxLCAweGVmLCAweDViLCAweDM0LCAweDA5LCAweGZkLCAweGRlLAorCTB4ODEsIDB4NjgsIDB4ZjgsIDB4NTEsIDB4ZmUsIDB4ZjcsIDB4NGMsIDB4MjgsIDB4OTgsIDB4ZDAsIDB4MjMsIDB4NDksCisJMHhiOCwgMHhmMiwgMHhkOSwgMHgzNiwgMHhkMywgMHhjZSwgMHhhYiwgMHhhMywgMHg4ZSwgMHg3MywgMHgyYywgMHhkZSwKKwkweDFhLCAweDNjLCAweDg2LCAweDM3LCAweDg5LCAweDZkLCAweGQyLCAweDRlLCAweDE5LCAweGViLCAweGMxLCAweDVjLAorCTB4NTYsIDB4NGYsIDB4NzYsIDB4MmEsIDB4OGUsIDB4NTcsIDB4ZjgsIDB4YzMsIDB4ZmEsIDB4YmMsIDB4YzQsIDB4YzMsCisJMHg3MiwgMHg3ZiwgMHhjYiwgMHg3MSwgMHhkMSwgMHg3MSwgMHhkZSwgMHgzNCwgMHg4YSwgMHhiMiwgMHg4MiwgMHgxZCwKKwkweDkxLCAweDE0LCAweDMwLCAweDFmLCAweDkzLCAweDdhLCAweGE0LCAweDZiLCAweDhhLCAweDNhLCAweDA4LCAweGQzLAorCTB4ZGYsIDB4ZTYsIDB4ZTksIDB4OGQsIDB4MzgsIDB4ZWUsIDB4OGIsIDB4MDQsIDB4OGYsIDB4MmIsIDB4Y2IsIDB4Y2YsCisJMHhhYSwgMHg1OCwgMHhiNCwgMHhmZSwgMHgwOSwgMHhhNSwgMHg3NSwgMHg0MywgMHgxNSwgMHhmNCwgMHg2NCwgMHg0MSwKKwkweDk5LCAweDJiLCAweDNhLCAweDA5LCAweDA3LCAweGM4LCAweGE1LCAweGQ2LCAweGMxLCAweDhkLCAweGQxLCAweGI4LAorCTB4Y2QsIDB4ZjYsIDB4MjYsIDB4YTcsIDB4ZDEsIDB4NGMsIDB4ZGIsIDB4ZDcsIDB4N2IsIDB4ZWUsIDB4MjMsIDB4MGYsCisJMHgwNCwgMHgzZSwgMHhjZSwgMHgyNCwgMHg0MSwgMHhmYSwgMHhkYSwgMHg4OCwgMHhkNCwgMHhhNywgMHgxYywgMHhlNywKKwkweDdlLCAweGY2LCAweDc1LCAweDA3LCAweGZiLCAweGZhLCAweDYwLCAweGZjLCAweDNkLCAweGU3LCAweDVmLCAweDVkLAorCTB4OTksIDB4MzcsIDB4NjIsIDB4NDQsIDB4YmYsIDB4NTQsIDB4ZWUsIDB4YmIsIDB4Y2MsIDB4ZjUsIDB4NDUsIDB4YWUsCisJMHgwZiwgMHgzNywgMHhjZiwgMHg2MSwgMHhiZSwgMHhkMiwgMHgyMSwgMHhiOCwgMHg3MSwgMHhkMiwgMHg0YiwgMHhkYywKKwkweGEwLCAweDNjLCAweGM2LCAweDEwLCAweGY1LCAweGQyLCAweDM4LCAweGVjLCAweDAxLCAweGUzLCAweDViLCAweDM4LAorCTB4YTUsIDB4YTgsIDB4MjQsIDB4NDIsIDB4NDEsIDB4ZjgsIDB4NzUsIDB4MDcsIDB4MGYsIDB4OTAsIDB4MzMsIDB4MjQsCisJMHhlNywgMHhkNCwgMHhlMSwgMHg3MywgMHg4NiwgMHgxZiwgMHhiMywgMHhhMiwgMHhlYSwgMHg2NSwgMHgxZSwgMHhjZSwKKwkweGM5LCAweDgxLCAweGI4LCAweDdjLCAweGY3LCAweDYxLCAweDZhLCAweDhlLCAweDA3LCAweDliLCAweGM5LCAweDI1LAorCTB4ODIsIDB4NTEsIDB4NzUsIDB4OWUsIDB4ZGMsIDB4ZjcsIDB4YjcsIDB4Y2IsIDB4NzcsIDB4ZjYsIDB4N2YsIDB4YWUsCisJMHg4MiwgMHhmYiwgMHg2OSwgMHgxNSwgMHg2YSwgMHhiNCwgMHgzNywgMHgyYywgMHhmNywgMHhiYiwgMHgwYywgMHhmOSwKKwkweGFlLCAweGEwLCAweDM5LCAweGVlLCAweGU1LCAweGJjLCAweDM4LCAweGYwLCAweDQ4LCAweDdhLCAweDFmLCAweGU1LAorCTB4ZmQsIDB4YjgsIDB4N2MsIDB4NGUsIDB4ZGUsIDB4Y2YsIDB4NzEsIDB4MjcsIDB4ZjcsIDB4MjksIDB4ODIsIDB4MzMsCisJMHgzZiwgMHg3MiwgMHg1ZSwgMHg2NCwgMHgxYywgMHgwOSwgMHhmMiwgMHhmOSwgMHhlNywgMHhkOCwgMHhmNiwgMHhkMSwKKwkweGY4LCAweGYzLCAweGNlLCAweDNjLCAweGUyLCAweGViLCAweGIxLCAweDg0LCAweDg2LCAweGY5LCAweDU3LCAweDM1LAorCTB4ZTEsIDB4ZjgsIDB4OWQsIDB4MzIsIDB4NjYsIDB4MDUsIDB4YjMsIDB4ZjQsIDB4MmYsIDB4ZjgsIDB4MjQsIDB4Y2YsCisJMHhhYywgMHhkNSwgMHhlNywgMHhlMiwgMHhlNiwgMHgzYiwgMHg4YSwgMHhmNywgMHhhYSwgMHhhMiwgMHhiMiwgMHg0ZSwKKwkweGE4LCAweGExLCAweGVhLCAweGFhLCAweDA2LCAweDY4LCAweGE1LCAweDdiLCAweGNiLCAweGEzLCAweGRlLCAweGVlLAorCTB4NTksIDB4OGEsIDB4MWUsIDB4YmMsIDB4NGQsIDB4OTEsIDB4ZTcsIDB4YmYsIDB4MjQsIDB4YjcsIDB4NzUsIDB4OWMsCisJMHgwNywgMHgzOCwgMHg1ZiwgMHgyZCwgMHhmMSwgMHgwMCwgMHg0ZSwgMHhiMywgMHg5ZCwgMHg1ZSwgMHhlYSwgMHg2ZiwKKwkweGU1LCAweGY5LCAweGY5LCAweDJhLCAweGQ3LCAweGZmLCAweGI5LCAweGEzLCAweDdkLCAweDRhLCAweGVhLCAweDhhLAorCTB4OGMsIDB4ODUsIDB4NWQsIDB4MzcsIDB4MmIsIDB4MWMsIDB4NTAsIDB4YjUsIDB4ZTgsIDB4ZDksIDB4ZDUsIDB4MTksCisJMHhjYiwgMHhmNiwgMHhiYSwgMHhkZiwgMHg4MywgMHgxZCwgMHhhZiwgMHg5ZCwgMHg1ZiwgMHhmMywgMHgzYSwgMHhlMywKKwkweGM2LCAweGEzLCAweDY1LCAweGQ3LCAweDA3LCAweDcxLCAweGRjLCAweGE5LCAweDZmLCAweGI3LCAweDgyLCAweDk1LAorCTB4OTAsIDB4YjgsIDB4ZDQsIDB4MWMsIDB4ZmIsIDB4MGEsIDB4ZTUsIDB4ZmUsIDB4YzAsIDB4MjgsIDB4YzYsIDB4YWMsCisJMHhmZCwgMHg0NiwgMHgyNCwgMHg2YiwgMHhkMSwgMHgxZiwgMHg1MiwgMHhjYywgMHgxMywgMHgzYiwgMHgyNSwgMHg3NiwKKwkweDRmLCAweGQ2LCAweGZhLCAweDUwLCAweDNiLCAweDFmLCAweDk1LCAweGVkLCAweDkxLCAweGZlLCAweDA1LCAweGNjLAorCTB4OWIsIDB4M2MsIDB4MWQsIDB4MTIsIDB4ZWIsIDB4NjQsIDB4N2UsIDB4ZGMsIDB4MzIsIDB4NmMsIDB4YWIsIDB4MGEsCisJMHhjYiwgMHhkOSwgMHhjNywgMHg3OCwgMHhmYiwgMHhlZiwgMHg4YiwgMHgxMywgMHgyMiwgMHg0NywgMHhhYywgMHgzMywKKwkweGQyLCAweDlmLCAweGM0LCAweGVmLCAweDJiLCAweDBiLCAweDQ2LCAweDY1LCAweDU5LCAweDRmLCAweGYyLCAweGRmLAorCTB4OTAsIDB4Y2EsIDB4YWIsIDB4ZTQsIDB4MTksIDB4MTUsIDB4YzEsIDB4ZGUsIDB4OGUsIDB4NDYsIDB4NWUsIDB4ZjIsCisJMHhkYywgMHg3YiwgMHhjMywgMHhkYSwgMHhmYywgMHhmOSwgMHg3NSwgMHgzYywgMHg2NCwgMHg4ZCwgMHgwYSwgMHhhOCwKKwkweDU3LCAweDBiLCAweDY2LCAweDEzLCAweDdkLCAweDgzLCAweDMyLCAweDNlLCAweDhiLCAweDU2LCAweDJlLCAweDM5LAorCTB4N2EsIDB4ZTcsIDB4NWQsIDB4NzcsIDB4ZDMsIDB4OWYsIDB4OWYsIDB4NjMsIDB4OGIsIDB4YTMsIDB4ZTQsIDB4MzMsCisJMHg5NiwgMHhlYiwgMHgxOSwgMHhlMiwgMHhlYiwgMHgzMywgMHhkNywgMHhmNSwgMHgyNCwgMHg4NiwgMHg5NCwgMHhkNywKKwkweDA2LCAweDFiLCAweDMwLCAweGI4LCAweGZiLCAweDBlLCAweDY4LCAweDhkLCAweDQ1LCAweDFjLCAweDUyLCAweGNkLAorCTB4YzUsIDB4NTgsIDB4OTYsIDB4N2QsIDB4ZGIsIDB4NTcsIDB4ZTQsIDB4ZTAsIDB4YjUsIDB4MTgsIDB4ZDgsIDB4MWQsCisJMHg0NywgMHg2ZSwgMHg4ZSwgMHgzYywgMHg5MywgMHg3YiwgMHg3ZSwgMHgwOCwgMHg0ZSwgMHg2ZSwgMHhkZiwgMHg3ZCwKKwkweDk5LCAweGU0LCAweGQ0LCAweDYxLCAweDkxLCAweDliLCAweGEyLCAweGVmLCAweGE4LCAweGZhLCAweGRiLCAweDhlLAorCTB4MTUsIDB4MTQsIDB4ZjksIDB4ODcsIDB4YWUsIDB4ZjQsIDB4NTIsIDB4ODcsIDB4MzcsIDB4YTEsIDB4YjUsIDB4NjcsCisJMHgwYywgMHhhNywgMHhjOCwgMHhlYiwgMHhkYywgMHgzNSwgMHg1NCwgMHhhZCwgMHhkMiwgMHg5YywgMHhiYSwgMHhkZiwKKwkweDg3LCAweDY4LCAweDZhLCAweDljLCAweDM4LCAweDEwLCAweDk4LCAweGYwLCAweDkzLCAweDlmLCAweGNjLCAweDc3LAorCTB4ZDcsIDB4OGUsIDB4OTYsIDB4OTEsIDB4N2YsIDB4YTQsIDB4YzgsIDB4NmQsIDB4M2YsIDB4ZWUsIDB4ZjUsIDB4ZTIsCisJMHg2ZSwgMHg2MiwgMHhjNiwgMHg3ZSwgMHhiZCwgMHg3NSwgMHhjMywgMHgxOCwgMHg3ZSwgMHg0NSwgMHhhYywgMHg5MywKKwkweGYyLCAweDNmLCAweDYwLCAweDdiLCAweDIyLCAweGQzLCAweGNiLCAweGY2LCAweGUwLCAweGY3LCAweDEyLCAweDhmLAorCTB4YzksIDB4MDksIDB4YmQsIDB4M2UsIDB4M2QsIDB4ZWQsIDB4OTMsIDB4ZjgsIDB4MmQsIDB4ZGMsIDB4NzUsIDB4YzcsCisJMHg2ZSwgMHgwNSwgMHg5ZCwgMHg5NCwgMHhmMywgMHgyOCwgMHg2ZCwgMHhlNiwgMHhmZSwgMHgyOCwgMHhiYywgMHg1ZCwKKwkweDU3LCAweDkxLCAweGEzLCAweDkwLCAweGYzLCAweDYxLCAweDRlLCAweDAwLCAweDhmLCAweDhjLCAweDIzLCAweDkxLAorCTB4ZDcsIDB4YTcsIDB4ZTYsIDB4MDUsIDB4ZjAsIDB4MjYsIDB4ZTUsIDB4MDgsIDB4YWUsIDB4NTcsIDB4OTQsIDB4ZTQsCisJMHhmNCwgMHhhYywgMHhiOSwgMHg1OCwgMHg0ZSwgMHgyZCwgMHgxZSwgMHgyZiwgMHhjOSwgMHhkOSwgMHg0MywgMHgzOSwKKwkweGQ3LCAweGI0LCAweGMwLCAweDViLCAweDdiLCAweDhkLCAweGNjLCAweDU1LCAweDFiLCAweGZkLCAweGE3LCAweDE2LAorCTB4MTksIDB4MTcsIDB4ZGIsIDB4YzksIDB4ZTksIDB4M2UsIDB4MDYsIDB4NDUsIDB4NWYsIDB4MjgsIDB4ZmMsIDB4ZmYsCisJMHgxYiwgMHg2ZSwgMHhiZCwgMHg5YiwgMHhkYSwgMHhhNiwgMHhhNiwgMHhlYiwgMHgwOSwgMHg5ZSwgMHg2NywgMHg1YSwKKwkweGE2LCAweGU4LCAweGE4LCAweDY1LCAweGRkLCAweDM0LCAweDYyLCAweGViLCAweGVlLCAweGVhLCAweDcyLCAweDdmLAorCTB4ZDksIDB4NGUsIDB4YjksIDB4OGQsIDB4MDYsIDB4ZGUsIDB4MGIsIDB4ZTEsIDB4MTEsIDB4ZTYsIDB4NzEsIDB4MzcsCisJMHhiMSwgMHg5ZCwgMHgwMywgMHg4NiwgMHg3MCwgMHhiMSwgMHg1NiwgMHhhMywgMHg0YSwgMHg5MSwgMHhiYywgMHgzNiwKKwkweGNjLCAweGI4LCAweGRlLCAweDgwLCAweDNlLCAweDM3LCAweDE2LCAweDg0LCAweDU5LCAweDdmLCAweDc3LCAweDVkLAorCTB4OTEsIDB4NGYsIDB4YzAsIDB4NzcsIDB4MmIsIDB4Y2IsIDB4NzYsIDB4YzYsIDB4OGIsIDB4ZWQsIDB4ZjksIDB4NzQsCisJMHhjOSwgMHgxNSwgMHhkYiwgMHhiMSwgMHg3ZiwgMHhmOCwgMHhmYywgMHhmMywgMHhjOCwgMHg0ZCwgMHhmYSwgMHhjYywKKwkweGY5LCAweDlhLCAweDhhLCAweDEwLCAweDRiLCAweDJiLCAweDUwLCAweDVkLCAweDIxLCAweDU4LCAweDdmLCAweGQxLAorCTB4ZDgsIDB4YjcsIDB4OGMsIDB4ZmYsIDB4MjksIDB4ZWYsIDB4NTcsIDB4NjMsIDB4ZWIsIDB4YjgsIDB4ODMsIDB4MmQsCisJMHg2ZSwgMHg5ZSwgMHg1MCwgMHg4MSwgMHhkZSwgMHgzNiwgMHhjMSwgMHg0MywgMHhiMSwgMHhhNSwgMHgzOSwgMHg5MiwKKwkweDI3LCAweDI1LCAweDcyLCAweDkwLCAweDE4LCAweDI3LCAweGY2LCAweGIzLCAweGM2LCAweGI1LCAweDFmLCAweDhmLAorCTB4MzIsIDB4ZDMsIDB4N2UsIDB4MzYsIDB4ZTMsIDB4YmIsIDB4ZmEsIDB4YTEsIDB4M2IsIDB4MmEsIDB4NzEsIDB4ZTgsCisJMHgyZSwgMHg1OSwgMHhmZiwgMHhkZSwgMHgxMCwgMHhjNywgMHhlMSwgMHg1YiwgMHhlOCwgMHg5YiwgMHhhZiwgMHgxMywKKwkweDViLCAweGI2LCAweGI0LCAweDMwLCAweDg2LCAweGI4LCAweDk4LCAweGE1LCAweGEwLCAweDkyLCAweGIxLCAweDdkLAorCTB4ZGIsIDB4NmUsIDB4ZTYsIDB4YzAsIDB4NmEsIDB4OTAsIDB4NmQsIDB4NWUsIDB4OGEsIDB4NWQsIDB4ZDIsIDB4N2YsCisJMHg4MywgMHhiOSwgMHhlZSwgMHhhMSwgMHgyZiwgMHg1NiwgMHgyMiwgMHgyMCwgMHgzOSwgMHhjNywgMHg0ZiwgMHg0ZSwKKwkweDUxLCAweGM2LCAweDRkLCAweDQ2LCAweDU5LCAweDU3LCAweGEyLCAweGE3LCAweGIyLCAweDljLCAweDA2LCAweGE0LAorCTB4NzcsIDB4OTcsIDB4ZWIsIDB4MmIsIDB4NzgsIDB4MjksIDB4MWEsIDB4MmUsIDB4YWQsIDB4M2YsIDB4MzcsIDB4NjAsCisJMHg2MCwgMHhmYywgMHhkMCwgMHgzMSwgMHg3MiwgMHgwZCwgMHgyNywgMHhkMSwgMHg3MiwgMHg2OCwgMHg2MywgMHg5OCwKKwkweDdkLCAweDM5LCAweDEzLCAweDJmLCAweGNmLCAweGE5LCAweGY4LCAweGU2LCAweDRjLCAweDE5LCAweDYyLCAweGJiLAorCTB4NTAsIDB4NmEsIDB4MTcsIDB4NjIsIDB4NGIsIDB4MmQsIDB4NmQsIDB4MzQsIDB4MWYsIDB4NDUsIDB4YWEsIDB4YzYsCisJMHhhYywgMHg4NSwgMHgzZCwgMHg0ZSwgMHhkZiwgMHg5YSwgMHhhOCwgMHg4MCwgMHhmNywgMHg1YSwgMHg4OSwgMHg3ZCwKKwkweGMyLCAweDc3LCAweGJjLCAweDM3LCAweDljLCAweGIwLCAweDJiLCAweGYwLCAweDY5LCAweGUzLCAweDljLCAweDIzLAorCTB4YjgsIDB4NzgsIDB4NGMsIDB4YzcsIDB4ZTUsIDB4MTUsIDB4YzQsIDB4YzQsIDB4ODUsIDB4ZjEsIDB4NjgsIDB4NzIsCisJMHgxZCwgMHhmMywgMHhjMiwgMHgyMywgMHg2ZCwgMHhkZSwgMHgxYiwgMHhkZSwgMHhjYSwgMHhmZiwgMHg5YSwgMHhkYywKKwkweGYyLCAweGQyLCAweGYxLCAweDg4LCAweDNlLCAweDcwLCAweDc0LCAweDQ1LCAweDU0LCAweGRhLCAweDk0LCAweGY2LAorCTB4Y2EsIDB4MzYsIDB4MmEsIDB4ZWQsIDB4M2IsIDB4NGUsIDB4MzQsIDB4MWUsIDB4NzAsIDB4ZTcsIDB4YmMsIDB4M2MsCisJMHg4NiwgMHgzNywgMHhmNCwgMHhmMiwgMHgxOCwgMHgwMiwgMHg4YywgMHhhNywgMHg0OSwgMHg3MiwgMHg1NywgMHhlMSwKKwkweGQ1LCAweDdlLCAweGU2LCAweDkxLCAweDVlLCAweGYyLCAweGYxLCAweDZlLCAweDA4LCAweGRmLCAweDNiLCAweDRhLAorCTB4N2UsIDB4ZjIsIDB4YTQsIDB4MGQsIDB4YmMsIDB4OTMsIDB4NzUsIDB4YjAsIDB4MmMsIDB4M2UsIDB4OGIsIDB4ZjgsCisJMHhkMiwgMHg0ZiwgMHhkOSwgMHhiMiwgMHhhNiwgMHg3NiwgMHg1MCwgMHgxOSwgMHg2NywgMHhhZSwgMHg3OSwgMHhkYywKKwkweDViLCAweDk1LCAweDU0LCAweDk5LCAweDViLCAweDFlLCAweGM4LCAweDQ3LCAweGMzLCAweDg3LCAweDk4LCAweDY3LAorCTB4ZmEsIDB4OTksIDB4ZWIsIDB4NzIsIDB4MDYsIDB4OTQsIDB4MjcsIDB4OTksIDB4NjcsIDB4ZWUsIDB4MmIsIDB4ZTUsCisJMHg5OSwgMHgwNywgMHhmMiwgMHgwMSwgMHhlNCwgMHhiMywgMHhjNCwgMHhjNiwgMHgzOCwgMHhmMywgMHg1YiwgMHgzNywKKwkweDRmLCAweDBmLCAweDYwLCAweDMyLCAweGFiLCAweDMyLCAweDFmLCAweDdmLCAweGRmLCAweDk5LCAweGFhLCAweDc3LAorCTB4ZjcsIDB4MGIsIDB4ZjAsIDB4NzUsIDB4YmIsIDB4MDEsIDB4MDcsIDB4ODcsIDB4OWIsIDB4NzAsIDB4MzYsIDB4M2YsCisJMHg0NSwgMHhiYiwgMHhiOCwgMHgwYywgMHhkMywgMHhhMywgMHhiNSwgMHg5OCwgMHgxOCwgMHg3ZSwgMHg5NSwgMHg5ZiwKKwkweGRiLCAweGYwLCAweGZlLCAweGE4LCAweDliLCAweGUzLCAweDEyLCAweDBmLCAweGE1LCAweDdmLCAweDA3LCAweDk1LAorCTB4NDMsIDB4NmUsIDB4OGUsIDB4NmIsIDB4MjUsIDB4OTksIDB4ZGIsIDB4MjYsIDB4ZmEsIDB4NGIsIDB4YjksIDB4ZWQsCisJMHgxNCwgMHg3MywgMHhkYiwgMHgyMywgMHg2YywgMHhmMywgMHg4NSwgMHg1MiwgMHg5YiwgMHhjZiwgMHhiOSwgMHhmZiwKKwkweGE1LCAweDJmLCAweDUyLCAweDc3LCAweDY2LCAweGJkLCAweDQ0LCAweDUyLCAweGQ2LCAweGE2LCAweGM3LCAweGVkLAorCTB4NjgsIDB4YWMsIDB4NWMsIDB4ZjcsIDB4MDUsIDB4ZDYsIDB4M2IsIDB4NzIsIDB4YmUsIDB4ZGUsIDB4NmEsIDB4MGMsCisJMHg2NCwgMHhkNiwgMHg5MCwgMHhlNywgMHhjYiwgMHhkYSwgMHhjYSwgMHg3YiwgMHg2YiwgMHg2YywgMHhlYSwgMHhmMiwKKwkweGNiLCAweGQxLCAweGE5LCAweGVlLCAweDU5LCAweGE4LCAweGMzLCAweGZhLCAweGI4LCAweDcwLCAweGEyLCAweGI3LAorCTB4YzgsIDB4ODksIDB4MjIsIDB4ODksIDB4OTUsIDB4OGMsIDB4MGYsIDB4OWUsIDB4NjgsIDB4ODQsIDB4NTgsIDB4MGYsCisJMHg0NCwgMHgyNywgMHg5OCwgMHgwMywgMHhlNCwgMHhlYiwgMHg3MCwgMHgzNywgMHg3MywgMHgzMSwgMHhiNSwgMHg3ZSwKKwkweDc1LCAweDY5LCAweDBmLCAweGFiLCAweDk0LCAweGUzLCAweDc4LCAweGQ2LCAweGEwLCAweDZmLCAweDUyLCAweGU0LAorCTB4YWQsIDB4MjYsIDB4YmYsIDB4YWUsIDB4YzEsIDB4MmQsIDB4YzUsIDB4NzUsIDB4MGIsIDB4YmYsIDB4OWYsIDB4YjIsCisJMHhmZCwgMHhkMSwgMHhhOSwgMHgxOCwgMHg1ZCwgMHhjNiwgMHgzOCwgMHhjMCwgMHgxYiwgMHhjZiwgMHhkOSwgMHgwYSwKKwkweDk2LCAweGU5LCAweDNlLCAweGFjLCAweDBiLCAweGQ2LCAweDYxLCAweDk5LCAweGYxLCAweGVmLCAweGNlLCAweDJkLAorCTB4YWIsIDB4ZTUsIDB4ZDksIDB4NzksIDB4MWUsIDB4ZTEsIDB4YWYsIDB4NjQsIDB4YmIsIDB4NmYsIDB4OTIsIDB4NTMsCisJMHg4ZiwgMHhmMywgMHhjYiwgMHg1NCwgMHhiZSwgMHg3OCwgMHhkZiwgMHhjYSwgMHg1MywgMHgzNiwgMHhlNSwgMHg2ZSwKKwkweGEzLCAweGRjLCAweDdiLCAweDgzLCAweDZlLCAweGJlLCAweDViLCAweDJhLCAweDM3LCAweDE1LCAweGYzLCAweDEwLAorCTB4ZDcsIDB4YTUsIDB4NmMsIDB4MjcsIDB4ZTUsIDB4ZGUsIDB4NGQsIDB4YjksIDB4ZmQsIDB4NDEsIDB4ZTksIDB4ZGYsCisJMHhiZiwgMHgzYiwgMHhmNywgMHhhZSwgMHg5NiwgMHg2NywgMHhlNSwgMHg3ZCwgMHgxMywgMHgyOSwgMHhmZiwgMHg5ZSwKKwkweGM4LCAweDM1LCAweGM2LCAweDRiLCAweDZkLCAweDFkLCAweGIyLCAweDkxLCAweDk1LCAweGRjLCAweDZmLCAweDZkLAorCTB4NDcsIDB4NTQsIDB4ZWIsIDB4NzUsIDB4ZDcsIDB4YjIsIDB4MzUsIDB4YWMsIDB4Y2IsIDB4NmIsIDB4YjgsIDB4ODcsCisJMHhiYSwgMHhjYiwgMHg3OSwgMHhjYiwgMHg2MywgMHg3MiwgMHhmYiwgMHg2NCwgMHgwOSwgMHg3NywgMHg1ZSwgMHhjZSwKKwkweDcyLCAweDdkLCAweDI1LCAweGRjLCAweGVlLCAweGNjLCAweDhiLCAweDBkLCAweGNkLCAweGRjLCAweDRmLCAweDZhLAorCTB4MmEsIDB4ZjksIDB4YjMsIDB4MTcsIDB4NGYsIDB4ZGIsIDB4MWYsIDB4OWMsIDB4MWIsIDB4Y2MsIDB4NDgsIDB4M2MsCisJMHg5MywgMHhmNSwgMHgxMCwgMHgwZCwgMHhkOSwgMHhmYywgMHhlNSwgMHg2OCwgMHgxZSwgMHgwYSwgMHg2MiwgMHhhZCwKKwkweDMxLCAweDliLCAweGJlLCAweGZlLCAweGE1LCAweGYzLCAweDM2LCAweDc1LCAweDgwLCAweGVkLCAweGMwLCAweGU3LAorCTB4OGEsIDB4NTcsIDB4OWUsIDB4Y2UsIDB4YjcsIDB4MDYsIDB4MWIsIDB4NzAsIDB4ZTksIDB4MWUsIDB4ZDIsIDB4ZmMsCisJMHg2NCwgMHg4ZCwgMHgxOSwgMHhlZCwgMHhmZSwgMHgwZSwgMHhlNywgMHhhZSwgMHhjYSwgMHhlNSwgMHhkMCwgMHg1YiwKKwkweDk0LCAweDFjLCAweGU3LCAweGVmLCAweGE5LCAweGQyLCAweGZjLCAweDNkLCAweDk5LCAweGJmLCAweGFlLCAweGIyLAorCTB4ODgsIDB4NDUsIDB4OTcsIDB4YTMsIDB4NjUsIDB4NDgsIDB4ZmUsIDB4MDcsIDB4ZjEsIDB4NDYsIDB4YzcsIDB4YzcsCisJMHg3OSwgMHhlZiwgMHg3MiwgMHgyYywgMHgxYywgMHhmOSwgMHg1NCwgMHgyNSwgMHhiOSwgMHhiNSwgMHg1MSwgMHhjYywKKwkweGMxLCAweDJmLCAweGNkLCAweDMzLCAweDIyLCAweGZkLCAweDE2LCAweDE2LCAweGIwLCAweDVjLCAweDEzLCAweDc1LAorCTB4MjYsIDB4MTgsIDB4MjgsIDB4ZmQsIDB4N2EsIDB4ZTQsIDB4N2MsIDB4YmYsIDB4YmUsIDB4Y2MsIDB4N2UsIDB4YTUsCisJMHg3YywgMHhiMiwgMHhkNiwgMHgyYSwgMHhmZCwgMHg1MiwgMHg5MiwgMHhiNSwgMHg2NiwgMHgxMywgMHhkZSwgMHgxZiwKKwkweDQwLCAweDMwLCAweDY4LCAweDQ2LCAweDUzLCAweDJmLCAweGQzLCAweGRlLCAweDI3LCAweGQ4LCAweGQ3LCAweDdhLAorCTB4ZjQsIDB4MmIsIDB4NzksIDB4NzcsIDB4YWYsIDB4ZWEsIDB4MjAsIDB4Y2IsIDB4Y2MsIDB4OGMsIDB4YTMsIDB4ZDIsCisJMHg0ZiwgMHhhZiwgMHhlNCwgMHg1OSwgMHgzZSwgMHhkOSwgMHg2NywgMHhmMiwgMHhlOSwgMHgyMiwgMHhmZiwgMHg2ZCwKKwkweDcyLCAweGM1LCAweDNlLCAweGNhLCAweDRmLCAweDcyLCAweGZlLCAweGZjLCAweDZjLCAweDAzLCAweDU2LCAweGI1LAorCTB4ZDksIDB4ZWQsIDB4NzIsIDB4NTUsIDB4MmYsIDB4ZmQsIDB4NmUsIDB4MTksIDB4NmQsIDB4ZWEsIDB4YzksIDB4OWMsCisJMHg4MiwgMHg1MSwgMHgyYSwgMHhmZCwgMHg2OCwgMHg1NiwgMHhkNiwgMHg4OSwgMHhjMywgMHgzOCwgMHg5MCwgMHhmMywKKwkweGUxLCAweDg1LCAweGVjLCAweDNjLCAweDhjLCAweGU3LCAweDJhLCAweGYwLCAweDVjLCAweGY2LCAweDMyLCAweGVjLAorCTB4Y2IsIDB4MTEsIDB4ZmQsIDB4YjIsIDB4OTcsIDB4NjMsIDB4MjQsIDB4ZTcsIDB4YzcsIDB4NGYsIDB4YjIsIDB4ZDQsCisJMHg1MywgMHhhZSwgMHgwYSwgMHhmZiwgMHg5YywgMHhmZCwgMHgxMywgMHg3YywgMHgzZCwgMHg1NywgMHg4ZCwgMHhkNywKKwkweGIyLCAweDU3LCAweGUwLCAweDYwLCAweGFlLCAweDA2LCAweGFmLCAweDY0LCAweGM5LCAweDI3LCAweDczLCAweDAxLAorCTB4YmMsIDB4OWMsIDB4ZDUsIDB4NTAsIDB4YzgsIDB4Y2QsIDB4YzIsIDB4NGIsIDB4ZDksIDB4MDgsIDB4MjYsIDB4NzIsCisJMHhiNSwgMHhmOCwgMHg2ZSwgMHg3NiwgMHgwMSwgMHhmMiwgMHhiOSwgMHgzYSwgMHg3YywgMHgyNywgMHhkYiwgMHg4YywKKwkweDJmLCAweGU3LCAweDgyLCAweDc4LCAweDMxLCAweGFiLCAweGUzLCAweGE5LCAweDVjLCAweDNkLCAweDhlLCAweDY1LAorCTB4YTMsIDB4NmMsIDB4MzcsIDB4ODQsIDB4YTMsIDB4YzMsIDB4MzEsIDB4MWMsIDB4MTgsIDB4NmQsIDB4YzQsIDB4MGIsCisJMHhjMywgMHg4YiwgMHgzMCwgMHgzZSwgMHgxYSwgMHhjNiwgMHg3MywgMHhjMywgMHg2ZCwgMHhkOCwgMHgzNywgMHhmYSwKKwkweDZmLCAweDE1LCAweGEyLCAweDlmLCAweDIzLCAweGY2LCAweGZmLCAweDM4LCAweGFmLCAweGM3LCAweDZkLCAweDFmLAorCTB4MzEsIDB4ZGYsIDB4YWYsIDB4ZGEsIDB4YTIsIDB4MzcsIDB4YmYsIDB4NTUsIDB4Y2YsIDB4MzksIDB4N2EsIDB4M2EsCisJMHhlZiwgMHhjZSwgMHgzYiwgMHhmNCwgMHgyMSwgMHg3NywgMHg3ZiwgMHgwNiwgMHg3ZCwgMHhjNiwgMHg2NSwgMHhjYywKKwkweGQ5LCAweGZhLCAweDI1LCAweDdlLCAweGQwLCAweDE2LCAweDBlLCAweDJhLCAweGRiLCAweDVkLCAweDFjLCAweGE5LAorCTB4NGQsIDB4Y2UsIDB4YTIsIDB4MmUsIDB4MzksIDB4ZWMsIDB4NjAsIDB4MGQsIDB4N2QsIDB4MzIsIDB4NGIsIDB4N2YsCisJMHhiNiwgMHgzOCwgMHhhZiwgMHg3NiwgMHhmZSwgMHhhMCwgMHhiMiwgMHg4MywgMHgzOSwgMHhlMiwgMHg5NSwgMHg0MywKKwkweDk2LCAweDUzLCAweGVkLCAweGUyLCAweDY5LCAweDM0LCAweGI5LCAweDg4LCAweDNlLCAweDE3LCAweDFiLCAweDExLAorCTB4N2QsIDB4ZGUsIDB4NTksIDB4MjEsIDB4ZmEsIDB4YWMsIDB4ZDAsIDB4M2YsIDB4Y2MsIDB4NGUsIDB4Y2EsIDB4N2EsCisJMHgwZiwgMHg5NCwgMHhlYywgMHhlMSwgMHhmYiwgMHg5NSwgMHhjNSwgMHhiYywgMHhhYSwgMHgzYywgMHhlZiwgMHg4ZSwKKwkweDMzLCAweDY4LCAweDk0LCAweGU3LCAweDllLCAweGZjLCAweGFmLCAweDQxLCAweGQ2LCAweGE0LCAweGMwLCAweDU4LAorCTB4NTAsIDB4OGYsIDB4NWMsIDB4NDgsIDB4ZjIsIDB4ZjUsIDB4OTksIDB4OTgsIDB4ODEsIDB4NjQsIDB4YTUsIDB4MTksCisJMHhkNSwgMHg1YSwgMHhkNCwgMHg5OSwgMHg3YywgMHg0NSwgMHhiMCwgMHg0MywgMHhlNCwgMHg1YiwgMHgyZSwgMHhlZSwKKwkweDFjLCAweDNlLCAweDhmLCAweDFmLCAweDY3LCAweDJiLCAweDg1LCAweGE3LCAweGVjLCAweGI3LCAweGE1LCAweDZmLAorCTB4NTAsIDB4MmIsIDB4YTQsIDB4Y2YsIDB4MjgsIDB4ZGUsIDB4NDMsIDB4YTEsIDB4YWMsIDB4YWYsIDB4OTksIDB4NzYsCisJMHhhNywgMHg1MiwgMHhiNywgMHg2MiwgMHg3YiwgMHg1ZSwgMHhmYSwgMHhjMiwgMHg3MiwgMHg4OSwgMHg3YiwgMHhlYywKKwkweDQ3LCAweDEzLCAweDVlLCAweGIwLCAweDhiLCAweDdiLCAweDMzLCAweGUzLCAweDc5LCAweGQxLCAweGI3LCAweDg2LAorCTB4YWQsIDB4ZTQsIDB4NWUsIDB4ODcsIDB4ODcsIDB4MTUsIDB4ZWEsIDB4ZWUsIDB4MmYsIDB4NTEsIDB4ZGMsIDB4M2YsCisJMHhmMiwgMHhkMiwgMHg1NywgMHhkNywgMHhiMiwgMHgzYywgMHg2MywgMHg3YywgMHg2MSwgMHhkYSwgMHhkZCwgMHgxYiwKKwkweGFlLCAweDczLCAweGYzLCAweGVlLCAweDMwLCAweDBhLCAweDAzLCAweDFmLCAweDljLCAweGRiLCAweDk2LCAweGY5LAorCTB4ZTUsIDB4YjksIDB4M2QsIDB4OTksIDB4NjgsIDB4NGEsIDB4ZjYsIDB4NjcsIDB4ZjIsIDB4MTMsIDB4M2UsIDB4ZTQsCisJMHhmNiwgMHgwNiwgMHhmMCwgMHhkNCwgMHg4NCwgMHgxZiwgMHgzNSwgMHg2OSwgMHhjOSwgMHhmMywgMHg4MywgMHg3OCwKKwkweDZhLCAweGZmLCAweGExLCAweDE1LCAweDM1LCAweDY4LCAweGUwLCAweGZmLCAweDEwLCAweGFmLCAweDQ2LCAweDVlLAorCTB4MDEsIDB4MWMsIDB4MWIsIDB4ZjUsIDB4ZTMsIDB4MmQsIDB4NWIsIDB4N2MsIDB4NTgsIDB4ZmMsIDB4YTMsIDB4OGQsCisJMHhkOCwgMHgxZiwgMHg2MCwgMHhiYywgMHg1NSwgMHgxOSwgMHg0NywgMHg5YSwgMHg3MCwgMHgzOCwgMHgxZiwgMHhjNCwKKwkweGYyLCAweDZjLCAweDNkLCAweDllLCAweGNiLCAweDI1LCAweGYxLCAweDQ0LCAweGE2LCAweDFlLCAweDY3LCAweDFmLAorCTB4ZjMsIDB4NjMsIDB4ZGUsIDB4M2UsIDB4ZjEsIDB4ODcsIDB4MDYsIDB4OWMsIDB4MWUsIDB4ZmMsIDB4MDQsIDB4MGEsCisJMHg3YiwgMHg5MywgMHhiMCwgMHgzMywgMHhiMywgMHhiMSwgMHg2MywgMHhiMCwgMHgwMSwgMHhkZiwgMHg2MSwgMHg5OSwKKwkweDdlLCAweGVhLCAweGE5LCAweDdhLCAweGE3LCAweDg5LCAweDE3LCAweDY5LCAweDQzLCAweDU1LCAweDNiLCAweDZmLAorCTB4YTQsIDB4ZWMsIDB4MzAsIDB4N2MsIDB4MDMsIDB4MjEsIDB4MWMsIDB4YzksIDB4N2IsIDB4ODUsIDB4ZDcsIDB4NzEsCisJMHgxZSwgMHg3ZiwgMHg1YSwgMHg5YywgMHgxNywgMHgwOCwgMHg2ZiwgMHhiZCwgMHg5OCwgMHgwNywgMHgxZSwgMHgzZiwKKwkweGNmLCAweDAzLCAweDgxLCAweDVjLCAweDVlLCAweGQ2LCAweDE4LCAweGRiLCAweDNhLCAweGZiLCAweGVjLCAweDg5LAorCTB4ZmYsIDB4Y2YsIDB4NmYsIDB4ZmUsIDB4ZjQsIDB4ZGIsIDB4MTUsIDB4NGIsIDB4MGMsIDB4NjIsIDB4OWQsIDB4OGMsCisJMHg3ZiwgMHhlZCwgMHg4MywgMHhkNSwgMHhlNiwgMHg4NiwgMHgyZiwgMHhhZSwgMHg1OCwgMHg1MiwgMHg4OSwgMHhmYiwKKwkweGRkLCAweGY5LCAweGVhLCAweDgxLCAweGJkLCAweGJiLCAweDliLCAweGYxLCAweGI1LCAweGI1LCAweDY3LCAweDQwLAorCTB4YjksIDB4MDIsIDB4YTksIDB4ZmEsIDB4MjEsIDB4ZGUsIDB4NTMsIDB4NGIsIDB4M2UsIDB4MDcsIDB4NTUsIDB4NmMsCisJMHhhZCwgMHg4ZSwgMHhmYSwgMHg1NCwgMHgwYiwgMHgxYSwgMHg0ZSwgMHhkMCwgMHhjOCwgMHg2YSwgMHhkMywgMHgxMSwKKwkweDRjLCAweGQ1LCAweGNiLCAweDM4LCAweDYzLCAweGNjLCAweGIzLCAweDNjLCAweGIyLCAweDc3LCAweDhkLCAweDRmLAorCTB4MzMsIDB4YzYsIDB4OWQsIDB4NWQsIDB4YWMsIDB4MjAsIDB4ZjEsIDB4NjcsIDB4ZTIsIDB4ODMsIDB4YjcsIDB4OTYsCisJMHhmNiwgMHg4MCwgMHg2NSwgMHgzZiwgMHg0YywgMHhlNiwgMHhhZCwgMHhhYywgMHhmZiwgMHhiZCwgMHhiMiwgMHhlZSwKKwkweGM5LCAweDNmLCAweGMxLCAweDBhLCAweDJmLCAweDBlLCAweGRiLCAweDM5LCAweGU2LCAweDA4LCAweDMyLCAweDA3LAorCTB4MzIsIDB4YTYsIDB4ZWQsIDB4YWMsIDB4MjcsIDB4ZTMsIDB4OTIsIDB4ZTcsIDB4YWQsIDB4ODksIDB4ZmEsIDB4OGYsCisJMHgxYywgMHg5NywgMHg4YywgMHg2NywgMHhhZCwgMHgxZiwgMHhkNSwgMHgzMiwgMHg4NiwgMHhiMiwgMHgyZSwgMHhmYSwKKwkweDU4LCAweGY3LCAweDUxLCAweGRlLCAweDkzLCAweDdhLCAweDhlLCAweGIzLCAweGZkLCAweGEyLCAweDk4LCAweDU1LAorCTB4OTEsIDB4YWMsIDB4NjYsIDB4ZGYsIDB4OWYsIDB4YjQsIDB4YTMsIDB4YzksIDB4NzcsIDB4ODgsIDB4OGIsIDB4YzcsCisJMHhhOCwgMHhjMywgMHg1MSwgMHg1YiwgMHhlYywgMHg2ZiwgMHgwYiwgMHhlZCwgMHhhZSwgMHg1ZiwgMHgzOSwgMHg3YSwKKwkweGRlLCAweGY2LCAweDgwLCAweDgzLCAweGI2LCAweGNjLCAweGFmLCAweGYwLCAweDI5LCAweDE5LCAweGFmLCAweDg2LAorCTB4ZTksIDB4ODksIDB4YTAsIDB4Y2IsIDB4YzcsIDB4ZGYsIDB4YjYsIDB4YzUsIDB4MjYsIDB4NjIsIDB4Y2MsIDB4Y2YsCisJMHhhNiwgMHhjZiwgMHhmNSwgMHg2NiwgMHgwYywgMHgxYywgMHhlMywgMHhkYywgMHg5ZSwgMHhiNiwgMHhhYiwgMHg4OCwKKwkweDM3LCAweDFkLCAweDkwLCAweGJkLCAweGNlLCAweGY3LCAweGVkLCAweDA0LCAweDVlLCAweDIyLCAweDY2LCAweGJkLAorCTB4NDcsIDB4NWIsIDB4ZmIsIDB4MmUsIDB4MzEsIDB4ZWMsIDB4NWQsIDB4NWIsIDB4YzcsIDB4NzcsIDB4NjgsIDB4N2IsCisJMHhlZiwgMHhkOCwgMHgzMSwgMHhiYywgMHg5OCwgMHhhZiwgMHhjNywgMHg1MSwgMHhlMiwgMHhkMCwgMHg0OSwgMHg3ZSwKKwkweDVlLCAweDllLCAweGY3LCAweGMxLCAweDBhLCAweGM5LCAweGJlLCAweGRhLCAweDFlLCAweDNmLCAweDZhLCAweDdiLAorCTB4ZDksIDB4ZTcsIDB4NDgsIDB4OTcsIDB4MWMsIDB4NDQsIDB4NzksIDB4OTYsIDB4ZTMsIDB4ZDMsIDB4OTQsIDB4MzIsCisJMHgwZiwgMHgyOSwgMHhlNywgMHgwNCwgMHg0OSwgMHg2NCwgMHgzMywgMHgzMywgMHhiMSwgMHgyMSwgMHhkMiwgMHg5ZiwKKwkweGEzLCAweGRkLCAweGZhLCAweGQyLCAweGU1LCAweDM4LCAweGMwLCAweGQ4LCAweDU5LCAweDEwLCAweGRiLCAweGY2LAorCTB4YzAsIDB4MzMsIDB4MjQsIDB4ZjYsIDB4N2YsIDB4MGQsIDB4NzUsIDB4M2QsIDB4N2QsIDB4NGUsIDB4ZjYsIDB4ZDIsCisJMHg1NCwgMHg3ZCwgMHg4YSwgMHhmZSwgMHg1ZSwgMHg4NSwgMHhkZSwgMHhkYywgMHhlNSwgMHhhOCwgMHgxOSwgMHg1YSwKKwkweDhhLCAweGZiLCAweGUzLCAweGUyLCAweGY3LCAweDdlLCAweGY0LCAweGU3LCAweDNjLCAweGE4LCAweDFjLCAweDIyLAorCTB4NzcsIDB4NjEsIDB4ZDksIDB4YTksIDB4NTAsIDB4MzEsIDB4MWUsIDB4YTksIDB4NjksIDB4YzMsIDB4ZjUsIDB4ODMsCisJMHgwNSwgMHg4NSwgMHgwZiwgMHhjZSwgMHhkOSwgMHg5OSwgMHg0MywgMHhmMywgMHg1NCwgMHg0YywgMHg5ZiwgMHg0YiwKKwkweDY3LCAweDAyLCAweGU4LCAweGEzLCAweDRkLCAweGFiLCAweDY5LCAweDA1LCAweDc1LCAweDdhLCAweDg4LCAweGY5LAorCTB4NWYsIDB4MWIsIDB4N2EsIDB4YTksIDB4OGIsIDB4ZjksIDB4ZTksIDB4MjYsIDB4M2MsIDB4MzEsIDB4ZDEsIDB4ODgsCisJMHg3OSwgMHhiYiwgMHg0YywgMHgzYywgMHg0ZSwgMHhkYiwgMHgwZiwgMHhlZiwgMHhiYSwgMHgxMSwgMHg3YiwgMHg1OCwKKwkweGVlLCAweDE1LCAweDNlLCAweDdiLCAweDY1LCAweDdmLCAweDAzLCAweGFmLCAweDEwLCAweGFmLCAweDQ2LCAweDVlLAorCTB4ZjUsIDB4MTgsIDB4ZDgsIDB4YWIsIDB4OTcsIDB4Y2UsIDB4NjEsIDB4NzgsIDB4ZDAsIDB4MzAsIDB4MjQsIDB4ZjgsCisJMHhhMiwgMHhlMiwgMHg4ZSwgMHg3NiwgMHgwNSwgMHhjNiwgMHhkNSwgMHg2YywgMHg3MywgMHhlMSwgMHg4NywgMHg2MSwKKwkweDRkLCAweGMzLCAweDFmLCAweGQwLCAweGVmLCAweDFmLCAweDM4LCAweDUzLCAweGU3LCAweGVkLCAweGM3LCAweDBmLAorCTB4NmYsIDB4ZmEsIDB4ZmIsIDB4YWUsIDB4ZmQsIDB4MmMsIDB4MjgsIDB4NDgsIDB4M2IsIDB4ZWYsIDB4MTIsIDB4MzMsCisJMHhjNCwgMHg4NiwgMHg3ZSwgMHgxNywgMHg5ZSwgMHg5NSwgMHhmNSwgMHhmZSwgMHhkYiwgMHg2NywgMHgyYiwgMHg3MCwKKwkweGRlLCAweGJlLCAweDJlLCAweDVhLCAweDc3LCAweDQ3LCAweDllLCAweDM2LCAweGIxLCAweGMzLCAweDNkLCAweDNiLAorCTB4MjIsIDB4YjksIDB4NGUsIDB4YTQsIDB4MmIsIDB4NDcsIDB4ZmQsIDB4ZjQsIDB4MzMsIDB4ODcsIDB4YjksIDB4ODcsCisJMHgzOCwgMHhiMSwgMHgzZCwgMHgxMywgMHhiMSwgMHgyYywgMHhiNiwgMHhlNSwgMHgyMywgMHgzNiwgMHgzYywgMHgzMCwKKwkweGU4LCAweDk3LCAweGY1LCAweDZlLCAweGNkLCAweGE3LCAweGNmLCAweGMzLCAweDNiLCAweDM5LCAweGIxLCAweGY5LAorCTB4MmEsIDB4MWMsIDB4Y2UsIDB4ODYsIDB4NzEsIDB4Y2EsIDB4ZmQsIDB4NWMsIDB4Y2QsIDB4NTgsIDB4ZTMsIDB4YTAsCisJMHhkMywgMHg5OCwgMHg4NSwgMHhiZSwgMHg2MCwgMHgxNSwgMHgwNiwgMHg2MiwgMHgzNywgMHgyMiwgMHg3NywgMHgwNywKKwkweDczLCAweDZjLCAweGZhLCAweDU4LCAweGFkLCAweGVlLCAweDQ3LCAweDNhLCAweDI4LCAweGY5LCAweDhiLCAweDA3LAorCTB4OTksIDB4ZDgsIDB4ZWQsIDB4MzgsIDB4NWUsIDB4ZWYsIDB4YzUsIDB4M2MsIDB4NTksIDB4NmYsIDB4ZTEsIDB4YjMsCisJMHgzZCwgMHg0MSwgMHgyOCwgMHhmNCwgMHhiZCwgMHhhNCwgMHg4ZiwgMHhiOCwgMHgzNCwgMHg2YiwgMHgwMCwgMHg0ZSwKKwkweGFkLCAweGE5LCAweGNiLCAweDFlLCAweDRjLCAweGNmLCAweDU2LCAweGUyLCAweDUyLCAweGNkLCAweDQ0LCAweDBkLAorCTB4ZTMsIDB4NGUsIDB4MGIsIDB4YWEsIDB4ZjcsIDB4Y2EsIDB4NWUsIDB4NDAsIDB4MDAsIDB4ZWIsIDB4ODYsIDB4YWYsCisJMHg5NSwgMHhiZCwgMHg4MSwgMHg5OCwgMHhhNiwgMHgwNCwgMHg3MCwgMHhlZiwgMHhiMCwgMHhjNCwgMHg4ZiwgMHgzNSwKKwkweGE4LCAweGQ4LCAweDVmLCAweDhiLCAweDJmLCAweDY2LCAweGJkLCAweGM0LCAweDc4LCAweGUyLCAweDBkLCAweGNiLAorCTB4ZWQsIDB4YzksIDB4ZDQsIDB4YTEsIDB4ZWUsIDB4YjEsIDB4NjcsIDB4OWQsIDB4MzAsIDB4NzUsIDB4NWMsIDB4YjcsCisJMHg1NywgMHhiMCwgMHg4OCwgMHhiNiwgMHg5YiwgMHhmOSwgMHgzYywgMHgwYSwgMHg3NiwgMHgzMywgMHhlNSwgMHhmNiwKKwkweDcwLCAweDdjLCAweDIxLCAweGJjLCAweDRiLCAweGVjLCAweGFhLCAweDk5LCAweDA4LCAweGUzLCAweDlkLCAweGRkLAorCTB4OTIsIDB4YWIsIDB4MjQsIDB4ZTEsIDB4OWQsIDB4YjgsIDB4MGMsIDB4NmYsIDB4ZjIsIDB4ZjMsIDB4MDksIDB4YTMsCisJMHgxMywgMHhlYSwgMHg0NCwgMHgxMywgMHg0ZSwgMHg2NiwgMHhiYSwgMHhlMCwgMHg5OSwgMHhhOCwgMHgyZCwgMHg2MiwKKwkweGQ4LCAweDVlLCAweDNmLCAweGVhLCAweDA2LCAweGY1LCAweGQ4LCAweDM0LCAweGU3LCAweGM4LCAweGI3LCAweDk3LAorCTB4MDQsIDB4YTcsIDB4NTEsIDB4ZGEsIDB4M2YsIDB4NmYsIDB4ZGIsIDB4YzYsIDB4ODUsIDB4N2QsIDB4ODcsIDB4ZjIsCisJMHhkOSwgMHgxNSwgMHhiMSwgMHhlZiwgMHhlZiwgMHgzYSwgMHg0ZiwgMHgwNCwgMHhkOSwgMHhiZiwgMHg4ZSwgMHgwOCwKKwkweGZhLCAweDYyLCAweGM3LCAweDY0LCAweDNmLCAweDlmLCAweGUzLCAweDRiLCAweDcyLCAweGVlLCAweDlmLCAweDc3LAorCTB4ZTQsIDB4NWMsIDB4ODgsIDB4Y2YsIDB4OTQsIDB4MzMsIDB4MTksIDB4Y2YsIDB4MzksIDB4ZGIsIDB4NTcsIDB4Y2IsCisJMHhmZCwgMHhkYiwgMHhhYiwgMHg1MCwgMHhjZCwgMHhjNCwgMHhjOSwgMHgxNCwgMHg5OSwgMHgzYiwgMHg2NCwgMHg2ZSwKKwkweDE5LCAweDc1LCAweDNlLCAweDRjLCAweGU2LCAweDNmLCAweDNhLCAweDhmLCAweDlmLCAweDJmLCAweDhmLCAweGEwLAorCTB4Y2YsIDB4NWQsIDB4MTMsIDB4YmYsIDB4ZTAsIDB4Y2IsIDB4MzUsIDB4OWMsIDB4YmIsIDB4ZjUsIDB4MjUsIDB4NWYsCisJMHg3ZSwgMHhjNywgMHg5NiwgMHhmOSwgMHg5MywgMHhmMywgMHg0YiwgMHgwMSwgMHg3MiwgMHgzMCwgMHgwMywgMHhkNSwKKwkweDljLCAweGJiLCAweGY3LCAweDZkLCAweDI4LCAweGI3LCAweDc2LCAweDc0LCAweDYzLCAweGQ2LCAweDQ0LCAweDgwLAorCTB4YmUsIDB4MWUsIDB4NTksIDB4NmYsIDB4YzEsIDB4NjYsIDB4NWIsIDB4MWQsIDB4YTgsIDB4NjIsIDB4OWQsIDB4OTMsCisJMHhiNiwgMHg4NywgMHg3ZSwgMHg5ZSwgMHhlMCwgMHg5OCwgMHg4MywgMHg3MCwgMHg1YywgMHg1ZSwgMHhiZiwgMHgxYSwKKwkweGYzLCAweGE5LCAweGE3LCAweGIzLCAweGI2LCAweDg5LCAweDc5LCAweGQ0LCAweGQzLCAweGI0LCAweGVkLCAweDI1LAorCTB4NGUsIDB4MzQsIDB4MTEsIDB4MGYsIDB4MzQsIDB4ZDQsIDB4MTIsIDB4MWIsIDB4MmIsIDB4MDYsIDB4MWQsIDB4MWMsCisJMHgzMiwgMHhlYSwgMHhjOCwgMHhmNSwgMHhjNSwgMHg0ZSwgMHgzYiwgMHgxMCwgMHgxZSwgMHgzMCwgMHgzMCwgMHg2ZiwKKwkweGEwLCAweDc5LCAweGUzLCAweDNjLCAweDhmLCAweDA3LCAweGM3LCAweDdkLCAweGM1LCAweGQ4LCAweDkzLCAweDliLAorCTB4MjMsIDB4ZmEsIDB4OTEsIDB4MzEsIDB4YjksIDB4YjksIDB4ZmMsIDB4ODcsIDB4NjAsIDB4YzAsIDB4NmEsIDB4ODAsCisJMHhiMiwgMHgwYSwgMHhjNCwgMHg4YywgMHhjZiwgMHhiMSwgMHhhZCwgMHgzNywgMHhlYywgMHg1NywgMHg3MSwgMHhmMywKKwkweDg0LCAweGUwLCAweGNiLCAweDBmLCAweGIxLCAweDkyLCAweGZkLCAweDc4LCAweDk3LCAweGI4LCAweDc2LCAweDVmLAorCTB4ZjQsIDB4MWIsIDB4MWMsIDB4NmIsIDB4MTMsIDB4NmUsIDB4OTksIDB4OTgsIDB4M2UsIDB4ZDcsIDB4ZTcsIDB4OGUsCisJMHhiMywgMHg5YywgMHhmZiwgMHhmOSwgMHg3MSwgMHg1ZiwgMHhiNiwgMHg3YywgMHgwNiwgMHgyZCwgMHg0OSwgMHg5ZiwKKwkweDkxLCAweDM4LCAweGUxLCAweDg3LCAweGY4LCAweDRkLCAweGI3LCAweGJkLCAweDBkLCAweGM1LCAweDc4LCAweDJlLAorCTB4NTcsIDB4NTksIDB4OGYsIDB4M2IsIDB4YmQsIDB4OTIsIDB4OTcsIDB4MTcsIDB4N2QsIDB4NDMsIDB4ZmEsIDB4ZjMsCisJMHhiYiwgMHhjYSwgMHgxNCwgMHg3ZCwgMHg0MywgMHhmYywgMHhlMiwgMHhjYiwgMHhhZSwgMHg3ZSwgMHg4NSwgMHg3NywKKwkweDY5LCAweGI4LCAweDZkLCAweGUyLCAweDk3LCAweGM0LCAweGM3LCAweDQ4LCAweDMyLCAweDQ3LCAweGNjLCAweDdlLAorCTB4OWQsIDB4ZmEsIDB4ZGQsIDB4NGUsIDB4ZmQsIDB4MzIsIDB4MDcsIDB4NjAsIDB4YmMsIDB4NGEsIDB4NTAsIDB4OWYsCisJMHgzZSwgMHg3MiwgMHgxNSwgMHgyZiwgMHgzMSwgMHhkMywgMHhhNCwgMHgyZSwgMHg0MSwgMHgwYywgMHg2NCwgMHhlZSwKKwkweDFlLCAweDJjLCAweDhlLCAweDM3LCAweDc3LCAweDdlLCAweGZlLCAweGQ4LCAweDk2LCAweDkyLCAweGMwLCAweDA5LAorCTB4ZmIsIDB4ODcsIDB4NTUsIDB4NzIsIDB4MjYsIDB4ZTgsIDB4YTQsIDB4ZWQsIDB4M2UsIDB4OTcsIDB4MzUsIDB4Y2QsCisJMHgxOSwgMHg2NSwgMHgyZSwgMHhiNCwgMHhiZCwgMHhjZiwgMHgxNiwgMHhmZSwgMHg1YywgMHg0OSwgMHhiYiwgMHhkNiwKKwkweDI4LCAweGFmLCAweGE2LCAweDg0LCAweGE5LCAweDUyLCAweDU3LCAweGY2LCAweDYwLCAweGE1LCAweGZkLCAweDZlLAorCTB4ZTEsIDB4MjAsIDB4NzgsIDB4ODMsIDB4M2UsIDB4NzcsIDB4YzQsIDB4YTgsIDB4YzAsIDB4YTgsIDB4M2IsIDB4MTcsCisJMHg2MiwgMHg4ZiwgMHhjNSwgMHg3NiwgMHgyZiwgMHhkOCwgMHg0ZCwgMHhiYSwgMHhhZSwgMHg3NCwgMHgxZSwgMHhhYiwKKwkweGJhLCAweGM4LCAweGM5LCAweDJlLCAweDZkLCAweGEzLCAweGUyLCAweDNmLCAweGIxLCAweDhkLCAweDQ0LCAweGE5LAorCTB4OGQsIDB4OGYsIDB4M2EsIDB4ZTMsIDB4MDYsIDB4M2MsIDB4NjUsIDB4NGIsIDB4ZWMsIDB4OTcsIDB4ZmQsIDB4MGYsCisJMHgwZCwgMHg4YiwgMHgyNiwgMHgwNCwgMHg1ZiwgMHhlOCwgMHhiYiwgMHgwMywgMHhkMywgMHgyZSwgMHhmNywgMHhjZiwKKwkweDQxLCAweGY2LCAweGI2LCAweDQyLCAweGYwLCAweDQ1LCAweDM1LCAweDljLCAweGQyLCAweDYzLCAweDU4LCAweDU4LAorCTB4OTAsIDB4ZmQsIDB4YTksIDB4N2QsIDB4NzUsIDB4YzIsIDB4ZTEsIDB4Y2UsIDB4ZTgsIDB4YzIsIDB4M2IsIDB4NjQsCisJMHhiZSwgMHhjYSwgMHhmNywgMHhmYywgMHhkOCwgMHhhZiwgMHgxNywgMHhmYiwgMHg5YSwgMHg1NCwgMHg4YiwgMHhkYywKKwkweGQxLCAweDQzLCAweGVlLCAweGQ4LCAweDZiLCAweGY4LCAweDY5LCAweDk3LCAweGFkLCAweGMxLCAweGQ5LCAweGJmLAorCTB4NzMsIDB4MmYsIDB4YWIsIDB4ZGMsIDB4ZGYsIDB4ZGYsIDB4NTcsIDB4ZWUsIDB4YzIsIDB4N2EsIDB4NWMsIDB4ZjYsCisJMHhhMiwgMHhmZCwgMHgyMSwgMHgxOSwgMHhkMywgMHg1YywgMHhhMCwgMHg0MSwgMHhlMiwgMHg1NSwgMHg5MSwgMHhhMywKKwkweDZlLCAweDNkLCAweDlmLCAweGZmLCAweDU4LCAweGNhLCAweDYwLCAweGZlLCAweDMxLCAweGQ0LCAweGViLCAweDBiLAorCTB4NTAsIDB4ZGYsIDB4NTAsIDB4YzMsIDB4YjgsIDB4MWMsIDB4ZWQsIDB4YTIsIDB4N2IsIDB4NGIsIDB4MmMsIDB4YjMsCisJMHg4MiwgMHhhNiwgMHhlNCwgMHhiZiwgMHhjMiwgMHg1YiwgMHhhNSwgMHhjZCwgMHg3ZSwgMHhhNSwgMHhhYSwgMHgyMCwKKwkweGVkLCAweDFlLCAweDU0LCAweGZjLCAweDg1LCAweDBmLCAweDZiLCAweDViLCAweGNlLCAweGZiLCAweDRkLCAweDlmLAorCTB4MWIsIDB4Y2EsIDB4NzQsIDB4YmIsIDB4N2IsIDB4OGMsIDB4Y2IsIDB4ODYsIDB4MWMsIDB4ZGMsIDB4NjksIDB4MzQsCisJMHhlMSwgMHhlZSwgMHgwNiwgMHg2OSwgMHhhMywgMHg5OCwgMHhjMywgMHg2OCwgMHhlYSwgMHgzNCwgMHgzOSwgMHhkYywKKwkweDZmLCAweDFjLCAweDU1LCAweDk3LCAweGNmLCAweDNlLCAweDc4LCAweDFlLCAweGQzLCAweGE3LCAweGQ3LCAweDQyLAorCTB4YzUsIDB4ZDksIDB4ZWIsIDB4MjQsIDB4OWYsIDB4ZjEsIDB4OTEsIDB4N2YsIDB4NmQsIDB4YWEsIDB4MmUsIDB4ZWUsCisJMHgyZiwgMHg4YiwgMHgxZCwgMHg0YiwgMHgzZiwgMHhmYywgMHhmNCwgMHhiMywgMHgwYiwgMHhmZCwgMHhkOCwgMHhmNiwKKwkweDA3LCAweGY1LCAweGMzLCAweDhmLCAweDliLCAweDg2LCAweDkyLCAweDE4LCAweDM1LCAweDRlLCAweDM4LCAweDU2LAorCTB4NjgsIDB4NjYsIDB4ZGIsIDB4M2UsIDB4YWMsIDB4MWMsIDB4ZmEsIDB4OGQsIDB4MzMsIDB4Y2IsIDB4NmQsIDB4NWIsCisJMHgyNywgMHhhNywgMHg1MiwgMHhmMSwgMHhjMCwgMHgxMiwgMHgxZiwgMHg2ZSwgMHgxZCwgMHg4OSwgMHg2MiwgMHhjNSwKKwkweDkwLCAweDhhLCAweGQ4LCAweDEyLCAweGU5LCAweDQzLCAweDE0LCAweDVkLCAweDIzLCAweGJiLCAweGJkLCAweGM1LAorCTB4ZjIsIDB4YzAsIDB4MmQsIDB4MWMsIDB4YzMsIDB4MWIsIDB4NDYsIDB4MGQsIDB4N2UsIDB4NDAsIDB4MGMsIDB4YWMsCisJMHg3NSwgMHhiOSwgMHhmZCwgMHg0NiwgMHgyNSwgMHgyMywgMHhkYywgMHhkZSwgMHhhNywgMHg2MiwgMHhiNiwgMHg4ZSwKKwkweDYwLCAweDgzLCAweDk5LCAweGE0LCAweGVlLCAweDNhLCAweDk1LCAweGM3LCAweDcyLCAweDFiLCAweDk1LCAweGExLAorCTB4N2MsIDB4YjksIDB4ZWYsIDB4MDEsIDB4N2MsIDB4YTIsIDB4MTAsIDB4YzQsIDB4MjcsIDB4YzYsIDB4MWEsIDB4NzgsCisJMHg4NSwgMHg3OCwgMHgzNSwgMHhmMiwgMHg3YSwgMHhmMSwgMHhmYywgMHhiOCwgMHhjYSwgMHg2NywgMHgzYywgMHg5ZiwKKwkweDY1LCAweDRlLCAweGIxLCAweGNkLCAweGY1LCAweDRiLCAweDg5LCAweDBiLCAweDlhLCAweDljLCAweGQ1LCAweGMxLAorCTB4NWIsIDB4NTksIDB4YzksIDB4MjcsIDB4YjYsIDB4ZDEsIDB4ODYsIDB4NjUsIDB4NGQsIDB4YjgsIDB4OTIsIDB4MzksCisJMHg0NSwgMHgyNCwgMHgzNiwgMHg4NSwgMHhiZiwgMHhhYSwgMHgyZSwgMHhjZSwgMHg3ZCwgMHhkMSwgMHg4NiwgMHg3MSwKKwkweGRlLCAweDg2LCAweDdkLCAweDc4LCAweDNiLCAweGFiLCAweGEyLCAweDI1LCAweGZlLCAweDZmLCAweGNlLCAweGYxLAorCTB4YTAsIDB4ZTAsIDB4YzksIDB4YTUsIDB4Y2YsIDB4Y2IsIDB4OWMsIDB4NjUsIDB4ZmEsIDB4NWMsIDB4MzYsIDB4ZDMsCisJMHgzNCwgMHg2MywgMHg1ZiwgMHg1NiwgMHg0MSwgMHhjNSwgMHg5MCwgMHhmMCwgMHhmMywgMHhlYiwgMHg1YywgMHhiZSwKKwkweGY3LCAweDdkLCAweGMzLCAweDA3LCAweGVmLCAweGQwLCAweGExLCAweDJiLCAweGU1LCAweDY4LCAweDkzLCAweDZmLAorCTB4OGMsIDB4NzEsIDB4YWIsIDB4ODMsIDB4ZjMsIDB4MzIsIDB4ZjIsIDB4ZjEsIDB4OTIsIDB4Y2UsIDB4Y2EsIDB4YmEsCisJMHg1MCwgMHhkYywgMHgzNSwgMHg0OSwgMHhkNSwgMHg4ZCwgMHhlOSwgMHg0MSwgMHhhOCwgMHg2MywgMHhjMiwgMHg0MywKKwkweGM5LCAweDBkLCAweGM2LCAweDI0LCAweDFmLCAweDA4LCAweGYxLCAweGJmLCAweGU0LCAweDA2LCAweDhkLCAweGZjLAorCTB4Y2YsIDB4YzQsIDB4YTIsIDB4NTEsIDB4ZTIsIDB4NzgsIDB4MGYsIDB4ZmEsIDB4MTksIDB4OWYsIDB4MmEsIDB4YTMsCisJMHgzZCwgMHhkOCwgMHgzZSwgMHhmZSwgMHg2MSwgMHgzMSwgMHhiZiwgMHg5OCwgMHg2MywgMHgzZCwgMHg3YiwgMHhkZSwKKwkweGNmLCAweGRjLCAweDM5LCAweDYyLCAweDlmLCAweGE2LCAweGNmLCAweDg5LCAweGNmLCAweGM4LCAweDVjLCAweGVkLAorCTB4Y2IsIDB4NGEsIDB4MWYsIDB4MWMsIDB4NmMsIDB4MzAsIDB4NmUsIDB4NjQsIDB4ZGIsIDB4M2UsIDB4YTgsIDB4MGQsCisJMHgzMywgMHhiOSwgMHhlNywgMHg3OSwgMHgzZSwgMHg0ZCwgMHhkZCwgMHg2ZCwgMHg1NCwgMHg0NiwgMHgzOSwgMHgyNywKKwkweDk2LCAweGI3LCAweDUyLCAweGQ2LCAweDg3LCAweDgyLCAweDE1LCAweDljLCAweDkzLCAweGFmLCAweGU0LCAweDQ1LAorCTB4NDYsIDB4YTcsIDB4MzIsIDB4OWUsIDB4OWIsIDB4NTksIDB4NjcsIDB4YTMsIDB4MzIsIDB4OTYsIDB4ZmYsIDB4NTUsCisJMHhiNSwgMHhhYywgMHg5OSwgMHg1ZiwgMHhkMCwgMHg0ZCwgMHhiOSwgMHgwZiwgMHg2MiwgMHg2MywgMHgxYSwgMHhlYSwKKwkweGQzLCAweGEyLCAweDY3LCAweDE5LCAweGIzLCAweDA2LCAweDJmLCAweDc5LCAweDVjLCAweDdkLCAweGUxLCAweDQzLAorCTB4ZGIsIDB4NmMsIDB4YWMsIDB4NzIsIDB4Y2YsIDB4NjIsIDB4YzYsIDB4MTgsIDB4OGIsIDB4MDIsIDB4NTYsIDB4MjUsCisJMHgzOSwgMHgxZiwgMHg2ZCwgMHgzNCwgMHhlNSwgMHgzMywgMHhiYiwgMHgzYSwgMHhmNywgMHhkOSwgMHgwYiwgMHg4MywKKwkweDg3LCAweDRiLCAweDZiLCAweDExLCAweDZiLCAweDIxLCAweGJjLCAweDU0LCAweDcxLCAweDcxLCAweGQ2LCAweGEzLAorCTB4NDcsIDB4YjEsIDB4OWMsIDB4YjksIDB4ZWUsIDB4NGQsIDB4YjksIDB4NjIsIDB4N2YsIDB4YzcsIDB4ZDgsIDB4ZGYsCisJMHgyOSwgMHhkNywgMHhmNywgMHg5MiwgMHhjYSwgMHg2OCwgMHg1ZSwgMHg3NSwgMHhmYiwgMHhlZCwgMHgzNSwgMHhhNSwKKwkweGJmLCAweDUyLCAweDk3LCAweGUzLCAweGM5LCAweGJmLCAweDU2LCAweGNhLCAweGE5LCAweDkyLCAweDE4LCAweGNjLAorCTB4Y2MsIDB4ZjQsIDB4NjEsIDB4ZTksIDB4NzMsIDB4MmQsIDB4ZGEsIDB4ODYsIDB4M2UsIDB4YTAsIDB4OWYsIDB4YzksCisJMHhiYywgMHgwYSwgMHhmZSwgMHhjYywgMHhjMywgMHhjYSwgMHg5MSwgMHg1OSwgMHg2OCwgMHgxZCwgMHgwYSwgMHhlMywKKwkweGI2LCAweDkxLCAweDA2LCAweDJjLCAweGRhLCAweGI1LCAweDA2LCAweGQ1LCAweDYzLCAweDQxLCAweDVjLCAweGI5LAorCTB4NGIsIDB4ZDYsIDB4ZjgsIDB4NTcsIDB4YTMsIDB4YjIsIDB4NzAsIDB4NWIsIDB4OGQsIDB4ZTQsIDB4YjgsIDB4N2EsCisJMHgzYSwgMHhjMSwgMHhmOSwgMHg0YiwgMHhhMCwgMHgyMiwgMHgxZCwgMHg0OSwgMHgyNCwgMHgyMSwgMHg2YiwgMHhhNCwKKwkweDI2LCAweDJhLCAweDBhLCAweDI2LCAweGY5LCAweGE0LCAweGIzLCAweDc5LCAweGJlLCAweGU5LCAweDczLCAweGNmLAorCTB4OWIsIDB4MmQsIDB4MmIsIDB4ZDAsIDB4ZTYsIDB4MzksIDB4NmUsIDB4MWYsIDB4MmYsIDB4NGYsIDB4ZGEsIDB4NzEsCisJMHhjZSwgMHg1ZSwgMHg4NywgMHhjZCwgMHgzNSwgMHg2NiwgMHgxMywgMHgzYywgMHg4NSwgMHhjYiwgMHg5MSwgMHgxYywKKwkweDY5LCAweGMzLCAweGJjLCAweDQyLCAweDAzLCAweDNhLCAweDQ3LCAweDQyLCAweDg4LCAweGE1LCAweGM1LCAweGM3LAorCTB4MjMsIDB4NWEsIDB4NGEsIDB4ZWQsIDB4ODAsIDB4YmYsIDB4YzAsIDB4NzgsIDB4OWEsIDB4ZmUsIDB4OGQsIDB4ZjMsCisJMHgxNiwgMHhlZCwgMHhhMCwgMHg4NywgMHhmYSwgMHhiYSwgMHgyNiwgMHhkZCwgMHg4NSwgMHhiYSwgMHg0MiwgMHgwMCwKKwkweDU3LCAweDBmLCAweDdkLCAweDAyLCAweGI1LCAweDIzLCAweDdlLCAweGNjLCAweDFhLCAweGQyLCAweDkwLCAweDVmLAorCTB4ZTIsIDB4NDcsIDB4NjAsIDB4MjQsIDB4OGMsIDB4ZWEsIDB4YjQsIDB4ZGUsIDB4NzUsIDB4OWIsIDB4ODIsIDB4ZTQsCisJMHhjMiwgMHgyNSwgMHg2MSwgMHhiNiwgMHg0ZCwgMHg3YiwgMHhhMywgMHg3ZiwgMHg4ZCwgMHg5MCwgMHg3ZiwgMHgyZCwKKwkweGVmLCAweDA2LCAweDM2LCAweGE3LCAweDA1LCAweDFiLCAweDQ1LCAweDI3LCAweDlmLCAweDcyLCAweGNmLCAweDlmLAorCTB4YWMsIDB4NGIsIDB4N2YsIDB4MTgsIDB4Y2UsIDB4OTUsIDB4ZWQsIDB4NWIsIDB4ZmMsIDB4ZGMsIDB4NzIsIDB4Y2YsCisJMHhjNCwgMHgzMiwgMHgwNywgMHg1MiwgMHhhNiwgMHg1YiwgMHhmNCwgMHhlYywgMHgzYywgMHhkZSwgMHhmYiwgMHgzOSwKKwkweGUzLCAweGYzLCAweDQzLCAweGU5LCAweDgwLCAweDU1LCAweDZiLCAweDZlLCAweGM2LCAweDU1LCAweGVkLCAweDExLAorCTB4YWIsIDB4YTAsIDB4YmMsIDB4Y2EsIDB4ZjEsIDB4ZmYsIDB4OTAsIDB4NDEsIDB4YmIsIDB4ODksIDB4ZmQsIDB4ZmMsCisJMHg2MywgMHhlNSwgMHg1ZiwgMHhiYSwgMHhjZSwgMHhiNiwgMHhlNCwgMHhhMiwgMHhmNSwgMHhiOSwgMHgyMywgMHhjYywKKwkweGU3LCAweGE3LCAweDJlLCAweDVhLCAweDlmLCAweDEzLCAweGJjLCAweDJmLCAweDlmLCAweDgzLCAweDkwLCAweGI5LAorCTB4ZDIsIDB4NjYsIDB4ZDgsIDB4YjcsIDB4YWMsIDB4MTcsIDB4MDksIDB4MzYsIDB4Y2EsIDB4N2MsIDB4OTUsIDB4ZDcsCisJMHg4YiwgMHg3YywgMHg1OCwgMHgzZSwgMHgyNCwgMHhiOSwgMHg5MiwgMHhjYSwgMHgzYywgMHhhMSwgMHgwNSwgMHhjOSwKKwkweGQwLCAweGEzLCAweDljLCAweDAzLCAweDc3LCAweDRkLCAweDg5LCAweGY3LCAweDA2LCAweGY4LCAweDU5LCAweGQ2LAorCTB4N2IsIDB4MzQsIDB4ZTIsIDB4OGYsIDB4NTYsIDB4Y2EsIDB4MGIsIDB4YWEsIDB4NzAsIDB4ZWIsIDB4NTAsIDB4ODMsCisJMHhiYiwgMHgxZiwgMHhiNSwgMHgyMiwgMHg3ZSwgMHgzOSwgMHg2MiwgMHhmNSwgMHg1ZiwgMHg2MiwgMHg5OSwgMHgwYiwKKwkweDZiLCAweDQzLCAweDU3LCAweDMxLCAweGRmLCAweGE4LCAweDcxLCAweGNmLCAweDRhLCAweDJjLCAweGEzLCAweGJlLAorCTB4MmYsIDB4NDcsIDB4ZGIsIDB4NDgsIDB4MTEsIDB4Y2YsIDB4NmUsIDB4MWIsIDB4MjksIDB4ZTIsIDB4NTYsIDB4NWEsCisJMHg2YywgMHhjZSwgMHg1NywgMHhiNCwgMHhiOSwgMHgyYywgMHg2ZCwgMHgyZSwgMHhhOCwgMHg3NywgMHgyYSwgMHhkOSwKKwkweGRjLCAweDQ3LCAweGM1LCAweDEzLCAweDA0LCAweGViLCAweGNjLCAweGYyLCAweDk5LCAweDZhLCAweDYyLCAweDVlLAorCTB4ZmUsIDB4NDgsIDB4Y2QsIDB4MWYsIDB4MTYsIDB4N2YsIDB4MmUsIDB4ZDUsIDB4ZDksIDB4YjUsIDB4N2YsIDB4YTQsCisJMHhjZSwgMHhjYSwgMHgzMSwgMHhlYiwgMHg4MiwgMHhjZSwgMHgwNiwgMHgyZiwgMHhkMSwgMHhkOSwgMHgwMiwgMHhlYSwKKwkweGEwLCAweDQxLCAweDJmLCAweGVhLCAweDZkLCAweGI5LCAweDcxLCAweDE5LCAweDUyLCAweGFlLCAweGRlLCAweGFhLAorCTB4NjQsIDB4NmQsIDB4OGMsIDB4ZjcsIDB4MDQsIDB4YWYsIDB4ZTcsIDB4ZTAsIDB4ZmIsIDB4YzEsIDB4MmYsIDB4YjksCisJMHhmNywgMHgxNiwgMHg1MSwgMHgyNywgMHg0NSwgMHg3ZCwgMHgwNSwgMHhhOSwgMHhhZiwgMHgwYiwgMHhiMSwgMHgwMCwKKwkweGVhLCAweDA3LCAweGNjLCAweGE3LCAweDhhLCAweGIxLCAweDQwLCAweDc0LCAweGY3LCAweGRhLCAweGEwLCAweDg2LAorCTB4YmEsIDB4ZWIsIDB4MmUsIDB4YzcsIDB4MmIsIDB4N2IsIDB4YWIsIDB4ZDAsIDB4M2UsIDB4ZTIsIDB4YTMsIDB4N2YsCisJMHg0OSwgMHg3YywgMHgyOCwgMHhjNiwgMHhhNCwgMHhkNiwgMHgxMSwgMHg3NywgMHgzZiwgMHg4YSwgMHhmOCwgMHhkYSwKKwkweDEwLCAweGY4LCAweGMzLCAweDYzLCAweGIwLCAweDhjLCAweDQ3LCAweGNlLCAweGU1LCAweGM5LCAweGI5LCAweDM5LAorCTB4MTksIDB4OTcsIDB4M2UsIDB4YzMsIDB4MTYsIDB4MWMsIDB4ZTcsIDB4MTksIDB4Y2UsIDB4NzcsIDB4YWEsIDB4MjEsCisJMHg5MiwgMHg5NSwgMHhmNSwgMHhhNiwgMHgyYywgMHgzOSwgMHg5OSwgMHgyNywgMHgyZCwgMHgzYSwgMHgxMywgMHhiZSwKKwkweGFkLCAweGRlLCAweGU4LCAweDgxLCAweGRhLCAweGU2LCAweGMxLCAweDY2LCAweDljLCAweDMyLCAweGY0LCAweGZlLAorCTB4N2IsIDB4ZjEsIDB4MjcsIDB4ZTgsIDB4MGQsIDB4MzksIDB4ZDgsIDB4NmYsIDB4YWMsIDB4NjQsIDB4M2UsIDB4NTEsCisJMHg4ZCwgMHhmNSwgMHg2ZCwgMHgzNCwgMHhjZiwgMHgzYiwgMHgzYSwgMHg4OCwgMHgwOSwgMHg1NiwgMHg4ZiwgMHgwNywKKwkweGIyLCAweDllLCAweGJiLCAweGYxLCAweDJlLCAweDNiLCAweDFhLCAweGU5LCAweDdlLCAweDUwLCAweDAxLCAweDU2LAorCTB4MGMsIDB4ZjgsIDB4YTEsIDB4MjksIDB4MmUsIDB4ZGYsIDB4ODksIDB4MGQsIDB4YTksIDB4YjIsIDB4YjYsIDB4ZmMsCisJMHgyZiwgMHgxNSwgMHhjNSwgMHhiMywgMHgxMCwgMHgyYSwgMHhiNCwgMHg0NiwgMHg2OSwgMHg2NywgMHgyNSwgMHhhYywKKwkweGM5LCAweDBlLCAweDE3LCAweDRmLCAweDZhLCAweDE2LCAweDJhLCAweGI4LCAweDc1LCAweDYxLCAweGM0LCAweDRhLAorCTB4MjksIDB4OGUsIDB4YjMsIDB4MmEsIDB4ZWUsIDB4NzUsIDB4OWYsIDB4ZWYsIDB4OTgsIDB4NmMsIDB4NGQsIDB4ZGQsCisJMHhhOSwgMHhmZSwgMHg4YiwgMHg2MywgMHhiOSwgMHhlYiwgMHhkOSwgMHg5MSwgMHg2MCwgMHg1MiwgMHg2NSwgMHg5ZiwKKwkweDNmLCAweGYyLCAweGFjLCAweGEyLCAweDhjLCAweDkzLCAweDVjLCAweDljLCAweGJjLCAweGZiLCAweGM5LCAweGQyLAorCTB4ZmEsIDB4YWYsIDB4Y2YsIDB4NWMsIDB4ZmYsIDB4MTcsIDB4ZmIsIDB4NzUsIDB4YzksIDB4ZjcsIDB4YmUsIDB4ZTQsCisJMHg5ZSwgMHhmYiwgMHhjOCwgMHg2NiwgMHg2NCwgMHhmZCwgMHhmMCwgMHhlMSwgMHgwMCwgMHhhYSwgMHg1NywgMHhhMiwKKwkweDc3LCAweGYyLCAweDNhLCAweDRjLCAweGI0LCAweGZkLCAweGFiLCAweDkzLCAweDJiLCAweGY2LCAweDVkLCAweGNjLAorCTB4ZDAsIDB4M2YsIDB4Y2YsIDB4Y2MsIDB4ZGQsIDB4NzUsIDB4N2QsIDB4NGIsIDB4ODQsIDB4MWMsIDB4NWMsIDB4Y2UsCisJMHg3YSwgMHg5MiwgMHgwYiwgMHgyYiwgMHg0NSwgMHgxZSwgMHgzZSwgMHg1ZiwgMHhiZiwgMHgwOSwgMHhjZiwgMHg1ZSwKKwkweDI0LCAweDUzLCAweGQ2LCAweDEyLCAweGNhLCAweDMyLCAweDc3LCAweDUxLCAweDllLCAweGM4LCAweDY1LCAweDNjLAorCTB4ZDAsIDB4ZmYsIDB4Y2QsIDB4MTksIDB4MDksIDB4Y2QsIDB4MmMsIDB4MTcsIDB4YWIsIDB4MmEsIDB4YzYsIDB4MmEsCisJMHgyOSwgMHg1NywgMHg2ZSwgMHhiNywgMHg4MiwgMHhmNSwgMHhkZSwgMHg3NywgMHg0NiwgMHgyZiwgMHgyYSwgMHhmNywKKwkweGQzLCAweDUyLCAweGI5LCAweDY3LCAweDAyLCAweDcyLCAweDY2LCAweDI0LCAweDliLCAweDExLCAweGNlLCAweDdhLAorCTB4Y2EsIDB4MTksIDB4YmIsIDB4YTgsIDB4NGMsIDB4NGIsIDB4ZjUsIDB4YzUsIDB4NjUsIDB4OWEsIDB4ODksIDB4ZDEsCisJMHhmZiwgMHhhZiwgMHgzMywgMHg3ZSwgMHg1MSwgMHg5OSwgMHhlNCwgMHgyNSwgMHg2NSwgMHgxNiwgMHgxMCwgMHgxMywKKwkweGJmLCAweGVmLCAweGVjLCAweGJiLCAweGE4LCAweDRjLCAweGVkLCAweDI1LCAweDY1LCAweDE2LCAweGQzLCAweDFlLAorCTB4OWYsIDB4NzEsIDB4MGUsIDB4NWMsIDB4NTQsIDB4NjYsIDB4Y2MsIDB4N2YsIDB4NzEsIDB4MTksIDB4ZDksIDB4ZTMsCisJMHg1OCwgMHhmZiwgMHgxNywgMHg1YiwgMHhmNCwgMHg3NSwgMHgyNSwgMHg5ZiwgMHhiYiwgMHg3MCwgMHhiZiwgMHg1OCwKKwkweGZlLCAweGYxLCAweDRiLCAweGZhLCAweDFmLCAweGIxLCAweDY0LCAweGJlLCAweDdkLCAweGVkLCAweGU1LCAweGY5LAorCTB4N2UsIDB4YjgsIDB4NzQsIDB4ZmYsIDB4N2IsIDB4MzUsIDB4MTcsIDB4OTcsIDB4YmIsIDB4MjIsIDB4NzAsIDB4NjksCisJMHgzYiwgMHg0NSwgMHg3OSwgMHg0NywgMHgyZiwgMHg2OSwgMHhmZiwgMHhlNiwgMHhjYSwgMHg4YiwgMHhiZiwgMHhiZiwKKwkweDVkLCAweDUxLCAweGZjLCAweDVlLCAweGQ2LCAweGU5LCAweGExLCAweDRiLCAweDllLCAweGZmLCAweDdkLCAweGM1LAorCTB4YzUsIDB4ZGYsIDB4MzcsIDB4NTQsIDB4N2UsIDB4NzgsIDB4M2IsIDB4YjUsIDB4OTcsIDB4YjQsIDB4YTMsIDB4ZjQsCisJMHhjYSwgMHhiYiwgMHgzOCwgMHgxZSwgMHg1MywgMHhhZCwgMHhlZCwgMHhlZCwgMHg1OCwgMHg3ZiwgMHg0MywgMHgyYSwKKwkweGJmLCAweDg5LCAweGY2LCAweDI5LCAweGI2LCAweGY1LCAweGUwLCAweDBkLCAweDZiLCAweGYzLCAweDZmLCAweGNkLAorCTB4ZTAsIDB4YjEsIDB4Y2IsIDB4YzIsIDB4NDEsIDB4N2MsIDB4MWMsIDB4NmIsIDB4ZGQsIDB4YmQsIDB4MzQsIDB4OTUsCisJMHgzOCwgMHg2OSwgMHhiOSwgMHhiNiwgMHg0MCwgMHg4ZSwgMHhlOSwgMHg1NywgMHhjYywgMHgxNCwgMHgwYywgMHhmNywKKwkweGJjLCAweGU1LCAweDNhLCAweDM0LCAweGU3LCAweGRkLCAweDNkLCAweGJiLCAweDU4LCAweDBhLCAweGNmLCAweGFhLAorCTB4NWQsIDB4YmEsIDB4NTUsIDB4M2EsIDB4NDcsIDB4NjcsIDB4NWQsIDB4MWYsIDB4NDQsIDB4NzIsIDB4NjYsIDB4N2UsCisJMHhhYSwgMHg4ZCwgMHgyMywgMHgxMiwgMHhkZSwgMHg4NiwgMHg3NSwgMHhlZSwgMHg1OSwgMHg2YiwgMHhjNSwgMHhlYywKKwkweDI5LCAweDlkLCAweGQ3LCAweDVjLCAweDAzLCAweDNkLCAweDVmLCAweGU2LCAweDRkLCAweGIyLCAweDllLCAweDJiLAorCTB4ZTcsIDB4MTksIDB4MWMsIDB4ZmEsIDB4YTAsIDB4YzQsIDB4ZjksIDB4ODMsIDB4OGEsIDB4M2EsIDB4ZTAsIDB4YWUsCisJMHg5OSwgMHhhZSwgMHhmNiwgMHgyMCwgMHg5YSwgMHhlOCwgMHg1NCwgMHg5MCwgMHhhYSwgMHgzMiwgMHhhMywgMHhkYSwKKwkweGRiLCAweDI1LCAweDRjLCAweGYzLCAweDRkLCAweDZjLCAweDUxLCAweDJhLCAweDI2LCAweGZhLCAweDE1LCAweGVmLAorCTB4NDQsIDB4MTEsIDB4ZDMsIDB4M2MsIDB4MTMsIDB4YjIsIDB4YjYsIDB4ZDAsIDB4YzAsIDB4MzIsIDB4NDEsIDB4YjQsCisJMHgyYywgMHhmMSwgMHhlMiwgMHgzYiwgMHg3NiwgMHhhZCwgMHhmYiwgMHgxZSwgMHhjNywgMHhkNiwgMHgyNSwgMHgxNSwKKwkweDc4LCAweDIwLCAweGFlLCAweGEwLCAweGViLCAweGFhLCAweGMzLCAweDc4LCAweDJiLCAweDJmLCAweGViLCAweDZjLAorCTB4NTYsIDB4N2MsIDB4OTQsIDB4NmQsIDB4MWUsIDB4YjIsIDB4NjUsIDB4YmQsIDB4NzQsIDB4NGIsIDB4N2MsIDB4YzQsCisJMHg2ZCwgMHhmZiwgMHhmMywgMHhlOCwgMHg3MywgMHhmNywgMHhhZCwgMHhiYSwgMHg5ZCwgMHhlZCwgMHg5OSwgMHgxZSwKKwkweDY3LCAweDFiLCAweDczLCAweDhkLCAweDgyLCAweGRkLCAweDkwLCAweGFhLCAweDYzLCAweGZkLCAweGI3LCAweDk2LAorCTB4YWMsIDB4YzcsIDB4NjksIDB4OTYsIDB4OTksIDB4YjAsIDB4MWYsIDB4YzQsIDB4ZmIsIDB4ZjksIDB4MjAsIDB4ZjIsCisJMHhmNiwgMHg0YSwgMHg3YywgMHgzNywgMHgxZiwgMHg2MCwgMHhjZSwgMHhkNywgMHg4NSwgMHhlZiwgMHhlNCwgMHg1NywKKwkweGUzLCAweGM1LCAweDYxLCAweGY3LCAweDdkLCAweDI5LCAweDJjLCAweGIzLCAweDE1LCAweGFjLCAweDg4LCAweGFlLAorCTB4YzYsIDB4YjEsIDB4ZDEsIDB4ZDUsIDB4MzgsIDB4M2MsIDB4MmMsIDB4ZWYsIDB4MGUsIDB4Y2MsIDB4MjUsIDB4OGYsCisJMHgyYywgMHhkYSwgMHg5YiwgMHg0YSwgMHg4YywgMHg1OSwgMHg2NiwgMHhhZiwgMHhjMiwgMHhhMSwgMHhkMSwgMHgzMCwKKwkweDczLCAweDI5LCAweDAzLCAweDI3LCAweGYzLCAweDIxLCAweDhjLCAweGQ4LCAweDZkLCAweDM4LCAweDkxLCAweDBmLAorCTB4ZTMsIDB4ZWIsIDB4NzYsIDB4MDIsIDB4NjcsIDB4ZjksIDB4ZmQsIDB4YTAsIDB4MmQsIDB4OWMsIDB4YTUsIDB4MDMsCisJMHhkMywgMHhmOSwgMHg2ZiwgMHgzMiwgMHhjZiwgMHg5OSwgMHg4NywgMHgyMywgMHhkZCwgMHhjZiwgMHgzMCwgMHgxYywKKwkweDFkLCAweGU0LCAweGQ1LCAweDg1LCAweDEzLCAweGEzLCAweDVkLCAweDM4LCAweDM1LCAweDdjLCAweDJiLCAweDRlLAorCTB4OGQsIDB4ZmUsIDB4MTgsIDB4NmYsIDB4MGQsIDB4NGIsIDB4N2YsIDB4ZTUsIDB4ZmMsIDB4YjcsIDB4YzgsIDB4ZDUsCisJMHgyOSwgMHg3NywgMHgzNSwgMHhhNiwgMHg0NiwgMHhmZiwgMHgxOCwgMHhkOSwgMHhlZiwgMHgzYSwgMHg0NywgMHg1NiwKKwkweDhiLCAweGRjLCAweDY3LCAweDdlLCAweDg3LCAweDZjLCAweGQxLCAweGE1LCAweDYwLCAweGJmLCAweDFmLCAweGM3LAorCTB4NmMsIDB4M2YsIDB4OGUsIDB4ZGEsIDB4NTMsIDB4NTcsIDB4NTYsIDB4NjEsIDB4ZWEsIDB4N2EsIDB4MjIsIDB4MWQsCisJMHhiNiwgMHhlNywgMHgyYiwgMHhmMSwgMHg1YywgMHg1NiwgMHhkNiwgMHhkOCwgMHgzZSwgMHg4NiwgMHg2NCwgMHg3MCwKKwkweDIzLCAweGI2LCAweDRlLCAweDU2LCAweGUyLCAweDNiLCAweDU5LCAweDNmLCAweDc1LCAweDdjLCAweDNkLCAweDkyLAorCTB4ZjUsIDB4YWIsIDB4YTksIDB4YmYsIDB4MDAsIDB4NWUsIDB4YjIsIDB4NDMsIDB4NzgsIDB4ZDksIDB4NmUsIDB4NGQsCisJMHgxNSwgMHg5NCwgMHg3NiwgMHg1OCwgMHgyZSwgMHhmZSwgMHgwNywgMHhhOCwgMHhlZiwgMHgwZCwgMHg2ZSwgMHg5ZiwKKwkweGJlLCAweDYzLCAweDc3LCAweDNiLCAweDViLCAweGE5LCAweGUzLCAweGZlLCAweGNjLCAweGU3LCAweGRkLCAweGIzLAorCTB4ZGIsIDB4MmYsIDB4ZGEsIDB4ZDMsIDB4OGUsIDB4YmMsIDB4OTMsIDB4ZjEsIDB4MTQsIDB4NzUsIDB4N2EsIDB4Y2MsCisJMHg0ZSwgMHg5MSwgMHhkYiwgMHgzNSwgMHg3MSwgMHg4ZSwgMHhhNiwgMHgzMCwgMHg0YSwgMHhiYiwgMHgzYywgMHg5OSwKKwkweGQ1LCAweDhmLCAweGFlLCAweGM1LCAweDI2LCAweDljLCAweGNkLCAweDU1LCAweGUyLCAweDM1LCAweGI2LCAweDUxLAorCTB4YjcsIDB4ZDgsIDB4OGIsIDB4ZTMsIDB4YWUsIDB4YmMsIDB4NGQsIDB4NzgsIDB4M2YsIDB4YWIsIDB4MzAsIDB4ZGUsCisJMHg2ZSwgMHhjMiwgMHg3YiwgMHg3YywgMHhmNiwgMHgwYSwgMHgzZiwgMHg5ZiwgMHg4ZSwgMHhiMywgMHg4NywgMHhhNSwKKwkweDY3LCAweGE3LCAweGM4LCAweGNmLCAweDY1LCAweGNkLCAweGE4LCAweGI3LCAweDYzLCAweDEzLCAweDRlLCAweGU0LAorCTB4ZGUsIDB4MjMsIDB4YTcsIDB4NzUsIDB4ZjAsIDB4NDUsIDB4NjMsIDB4MzYsIDB4MTIsIDB4YjMsIDB4YzksIDB4OWIsCisJMHhmNCwgMHg0YSwgMHgxYywgMHhlMywgMHhmMywgMHg4NSwgMHhjNCwgMHhkZiwgMHhlMiwgMHhmYSwgMHhkOSwgMHgyNiwKKwkweGJjLCAweGNiLCAweGYxLCAweDNjLCAweDQwLCAweDU5LCAweGVmLCAweGU0LCAweGZlLCAweDk2LCAweDcyLCAweDk3LAorCTB4MjIsIDB4MWYsIDB4ZmYsIDB4NWIsIDB4Y2EsIDB4ZmQsIDB4MzEsIDB4YzYsIDB4NGIsIDB4ZmEsIDB4MzgsIDB4NjEsCisJMHhjOCwgMHhiOCwgMHhiZSwgMHgzMSwgMHgwYiwgMHhkNSwgMHgyMSwgMHg4ZSwgMHhlMywgMHg5YiwgMHhmYywgMHhiZiwKKwkweDAxLCAweGM3LCAweGYzLCAweGZmLCAweDliLCAweGZmLCAweGJmLCAweDhiLCAweDAzLCAweDc5LCAweDU5LCAweGFmLAorCTB4OWUsIDB4MTksIDB4NGIsIDB4YzUsIDB4N2YsIDB4Y2EsIDB4MWMsIDB4NjQsIDB4MGUsIDB4MzIsIDB4ODMsIDB4YjUsCisJMHhhOSwgMHhkOSwgMHhiNCwgMHhhMywgMHhiZiwgMHhiZSwgMHhiNiwgMHgwZSwgMHhlZiwgMHhjNiwgMHgyZCwgMHhlYywKKwkweGQ4LCAweGU3LCAweDQ1LCAweDg2LCAweGI4LCAweGJiLCAweDYzLCAweGEwLCAweDAxLCAweDRmLCAweGVjLCAweDBjLAorCTB4ZTIsIDB4ZjEsIDB4OWQsIDB4OTcsIDB4NjEsIDB4Y2IsIDB4Y2UsIDB4MmIsIDB4YjAsIDB4NjcsIDB4NjcsIDB4MTMsCisJMHhkMiwgMHgzYiwgMHgxZCwgMHhlNywgMHhmZCwgMHhjNSwgMHg4ZSwgMHhiMywgMHg4OCwgMHhkNywgMHgyMywgMHhmNCwKKwkweDA1LCAweDNmLCAweGZmLCAweGJmLCAweDEwLCAweDE3LCAweDNmLCAweGQxLCAweDcxLCAweDk1LCAweGViLCAweDJmLAorCTB4OWQsIDB4YjgsIDB4ZDIsIDB4ZmQsIDB4OWYsIDB4YzQsIDB4YTIsIDB4ZmMsIDB4YzYsIDB4ZjgsIDB4ZmEsIDB4YzIsCisJMHhhNiwgMHhmOCwgMHg3ZCwgMHg4NSwgMHgzOSwgMHhkOCwgMHgzYSwgMHhkOCwgMHg4OCwgMHhjMSwgMHg5ZCwgMHgwZCwKKwkweGE5LCAweDA2LCAweGI2LCAweGIzLCAweGVhLCAweDVhLCAweGUxLCAweDc2LCAweDhlLCAweDYzLCAweGI0LCAweGY3LAorCTB4YzcsIDB4ZDcsIDB4MTYsIDB4OWUsIDB4NDEsIDB4NzcsIDB4MjEsIDB4ODQsIDB4YmUsIDB4YzEsIDB4MzAsIDB4ZGIsCisJMHg5MiwgMHhiZCwgMHg1YywgMHhlZiwgMHhkMSwgMHg3YiwgMHhlMSwgMHgzOCwgMHhkMywgMHg4YiwgMHgwZiwgMHhlMiwKKwkweGFlLCAweGMyLCAweDM3LCAweGM5LCAweDFiLCAweDQzLCAweDQ4LCAweDBmLCAweGFlLCAweDQ3LCAweDY2LCAweGIyLAorCTB4MjIsIDB4ZTUsIDB4MzcsIDB4MWQsIDB4YmMsIDB4MTQsIDB4OWYsIDB4YzIsIDB4ZWQsIDB4OTQsIDB4ZjcsIDB4ZTgsCisJMHg2MCwgMHgyZCwgMHhmYiwgMHg1NCwgMHg5ZCwgMHhhYSwgMHgzNCwgMHgyNSwgMHg4NiwgMHgzZiwgMHhjOCwgMHgxOCwKKwkweDI1LCAweGZjLCAweGUyLCAweDI4LCAweDU2LCAweDMwLCAweGJmLCAweGFhLCAweDVmLCAweGEyLCAweGNmLCAweDQyLAorCTB4NmQsIDB4ZDAsIDB4N2IsIDB4YTYsIDB4NDMsIDB4ZWMsIDB4MmYsIDB4NDUsIDB4ZmIsIDB4OTMsIDB4N2QsIDB4ZjUsCisJMHg3NSwgMHhiOCwgMHhkYiwgMHgzZCwgMHhlNywgMHhkZCwgMHg4MywgMHhlNywgMHg2ZCwgMHhjMSwgMHg5ZCwgMHgzNSwKKwkweGQ4LCAweDZmLCAweGFmLCAweDYzLCAweGNlLCAweDI1LCAweGYxLCAweDdhLCAweDI1LCAweDlhLCAweDBiLCAweDdmLAorCTB4MTcsIDB4YmYsIDB4YTcsIDB4YjAsIDB4OWEsIDB4N2MsIDB4ZjYsIDB4NWYsIDB4NzAsIDB4NTMsIDB4MjEsIDB4YzcsCisJMHg3ZSwgMHg4ZCwgMHhjNiwgMHhlZiwgMHgyZSwgMHhlYywgMHg4OSwgMHhkZiwgMHg1YiwgMHhlOCwgMHhjMiwgMHgwMiwKKwkweDM3LCAweGE3LCAweDY0LCAweGZlLCAweDU1LCAweDkwLCAweDM4LCAweDc3LCAweDljLCAweDVjLCAweGY4LCAweDE0LAorCTB4OTYsIDB4MTcsIDB4NWUsIDB4YzMsIDB4Y2QsIDB4MDUsIDB4YzEsIDB4MGQsIDB4ODksIDB4N2YsIDB4MmYsIDB4N2EsCisJMHg1MSwgMHgyZCwgMHg3MSwgMHhlZiwgMHgwYiwgMHhkOCwgMHhiYSwgMHgzYiwgMHg4NSwgMHhiZSwgMHhkZCwgMHg2NSwKKwkweDhjLCAweDZhLCAweDBkLCAweGVlLCAweDEzLCAweDdjLCAweDk5LCAweGY0LCAweDk1LCAweDYyLCAweGQ0LCAweGE3LAorCTB4NjgsIDB4OGYsIDB4MmEsIDB4NjMsIDB4YTMsIDB4YWMsIDB4ZDMsIDB4YWYsIDB4YTMsIDB4MmYsIDB4NmYsIDB4MjQsCisJMHg2NiwgMHhjYSwgMHg3YSwgMHhmYywgMHgyNywgMHg0YiwgMHhmNywgMHgyNSwgMHhkNiwgMHhjYiwgMHg1YSwgMHhiYywKKwkweDg2LCAweDQzLCAweDc5LCAweDc3LCAweDRmLCAweDViLCAweGYzLCAweGViLCAweGI3LCAweGYzLCAweDk5LCAweGQ0LAorCTB4ZmYsIDB4MDIsIDB4ZDIsIDB4YmIsIDB4NTcsIDB4M2IsIDB4OGYsIDB4NjYsIDB4OGEsIDB4ZmIsIDB4NjYsIDB4NDcsCisJMHhhMiwgMHg2YywgMHg2YiwgMHg5YywgMHhiMSwgMHg3ZCwgMHgyZiwgMHhmYywgMHhiMywgMHgzOCwgMHhiNiwgMHg4OSwKKwkweDAxLCAweDU4LCAweDFlLCAweGJkLCAweGRiLCAweGQ5LCAweDkyLCAweGMxLCAweGJkLCAweGIzLCAweDEwLCAweGM2LAorCTB4Y2EsIDB4ODksIDB4MGEsIDB4MjQsIDB4ZjcsIDB4NTcsIDB4ZTMsIDB4YjYsIDB4OWQsIDB4M2QsIDB4YjQsIDB4NjUsCisJMHg4YiwgMHhmNiwgMHhhYiwgMHgxYiwgMHg3NywgMHgyYiwgMHhkNSwgMHhiOCwgMHg5OSwgMHhmNywgMHgzZSwgMHgzZCwKKwkweDI4LCAweDZiLCAweDU4LCAweGQxLCAweGEzLCAweDI3LCAweDNjLCAweGQ1LCAweGI4LCAweDZiLCAweGFmLCAweDFmLAorCTB4YjksIDB4ZGMsIDB4NGEsIDB4MjQsIDB4ZjcsIDB4MWUsIDB4ODEsIDB4OTUsIDB4YTMsIDB4NGQsIDB4ZWUsIDB4MjIsCisJMHhjZSwgMHgzMCwgMHhjZCwgMHg1MSwgMHhjZCwgMHgxZiwgMHg2MywgMHhjZiwgMHhhOCwgMHg4YSwgMHhiYSwgMHg1ZCwKKwkweGIyLCAweGZlLCAweGE4LCAweGU4LCAweGE3LCAweGEzLCAweDA1LCAweGE0LCAweDQ3LCAweGJkLCAweDk4LCAweDk1LAorCTB4ZWUsIDB4YzQsIDB4MDQsIDB4YjEsIDB4MjYsIDB4OTAsIDB4NGUsIDB4MjIsIDB4OWYsIDB4ZWYsIDB4NDYsIDB4OGUsCisJMHg1OCwgMHg5MiwgMHgxYiwgMHgwZCwgMHhhMCwgMHgyNiwgMHg2ZCwgMHgyMCwgMHhhMCwgMHhjNywgMHhiMCwgMHg4MywKKwkweGZlLCAweDUyLCAweDkxLCAweGQ2LCAweGIxLCAweDJkLCAweDdmLCAweDIzLCAweGFjLCAweGQxLCAweDRmLCAweDYwLAorCTB4ZmIsIDB4NjgsIDB4MzcsIDB4MmYsIDB4MTMsIDB4N2QsIDB4YTMsIDB4OWYsIDB4YzcsIDB4YjIsIDB4ODksIDB4YTMsCisJMHhlOCwgMHhjZiwgMHhhNywgMHg2OCwgMHg4ZiwgMHhlZiwgMHg2MSwgMHg3YiwgMHhlZSwgMHgzMCwgMHg5ZSwgMHhjOCwKKwkweDZlLCAweGM2LCAweGQ5LCAweGM1LCAweDg3LCAweGYxLCAweDM4LCAweDNmLCAweDY3LCAweGIzLCAweGZhLCAweGM2LAorCTB4YjAsIDB4N2EsIDB4MTgsIDB4OTksIDB4ZGMsIDB4MjYsIDB4N2MsIDB4NjIsIDB4NTAsIDB4YzEsIDB4NGIsIDB4YjQsCisJMHhmNSwgMHhkYiwgMHhmNywgMHhkMiwgMHgxNiwgMHgxZiwgMHhkYiwgMHg4MCwgMHhhZSwgMHg4OSwgMHhlZiwgMHhjMiwKKwkweGNlLCAweDNmLCAweDhmLCAweDFkLCAweGI5LCAweDA3LCAweGQxLCAweDlmLCAweDU5LCAweGNmLCAweGZjLCAweGZmLAorCTB4MTksIDB4Y2EsIDB4MzksIDB4NDgsIDB4M2YsIDB4ZGYsIDB4YzgsIDB4MzEsIDB4M2UsIDB4Y2MsIDB4ZWIsIDB4YzIsCisJMHgxYSwgMHhlMywgMHg4NSwgMHgzNSwgMHgzOSwgMHhmYSwgMHg3ZCwgMHg0NiwgMHg3MiwgMHhjZiwgMHg3NSwgMHhjNCwKKwkweDg5LCAweDI3LCAweDZiLCAweDY1LCAweDVkLCAweGIyLCAweDRhLCAweDlmLCAweGI5LCAweDU2LCAweDJmLCAweGI2LAorCTB4MWYsIDB4NzYsIDB4NzMsIDB4ZWQsIDB4YWEsIDB4YjQsIDB4ZTQsIDB4NzUsIDB4NTMsIDB4OTEsIDB4MmEsIDB4NzIsCisJMHgwYywgMHg3ZiwgMHg1YSwgMHg3NCwgMHhkOCwgMHhlMywgMHhmNCwgMHg2NiwgMHgwNCwgMHg0YiwgMHg2NCwgMHgzZSwKKwkweDM0LCAweGJjLCAweDkwLCAweGZmLCAweDMxLCAweGI2LCAweDBlLCAweGNmLCAweGM2LCAweGYyLCAweDZjLCAweDFiLAorCTB4MzksIDB4YTUsIDB4ZTMsIDB4N2MsIDB4ODUsIDB4YmUsIDB4NjYsIDB4OTMsIDB4ZWIsIDB4ZWMsIDB4MTgsIDB4NGMsCisJMHgxMiwgMHg1MywgMHg2NiwgMHgyMywgMHgzOSwgMHhhNywgMHhjOCwgMHg0ZiwgMHhjMiwgMHg2OSwgMHg2OSwgMHhjYiwKKwkweDU3LCAweGRhLCAweGFiLCAweDliLCAweGJhLCAweDMyLCAweGNjLCAweDdiLCAweDc1LCAweDY5LCAweDk5LCAweGI3LAorCTB4ODgsIDB4YTEsIDB4YjksIDB4ZmIsIDB4NjksIDB4OGUsIDB4ZjMsIDB4NTIsIDB4YjQsIDB4Y2MsIDB4OTUsIDB4YTYsCisJMHhhZSwgMHhhYywgMHhjMywgMHg2YywgMHg1OSwgMHg3NywgMHg0ZCwgMHhjOCwgMHgzOSwgMHhkZiwgMHg2ZiwgMHhiNSwKKwkweDJjLCAweGE3LCAweGFmLCAweDdlLCAweDAxLCAweDAzLCAweGUzLCAweGU1LCAweDc3LCAweDIzLCAweGZmLCAweGIzLAorCTB4ZTQsIDB4ZGQsIDB4ZjUsIDB4OWYsIDB4MmMsIDB4YWYsIDB4YmMsIDB4MDcsIDB4MmEsIDB4ZTcsIDB4OGMsIDB4Y2IsCisJMHhlZiwgMHg1MCwgMHg4YSwgMHgyZSwgMHhhZiwgMHg5MCwgMHhmZCwgMHgwMywgMHhhYiwgMHhiOCwgMHg0ZiwgMHgwYSwKKwkweDFjLCAweGIxLCAweDJiLCAweDE4LCAweDg3LCAweGQ1LCAweGE1LCAweDY0LCAweDYzLCAweDIxLCAweDFmLCAweDJhLAorCTB4MTksIDB4MmYsIDB4MWIsIDB4ZDEsIDB4NDcsIDB4YmUsIDB4N2EsIDB4OTMsIDB4NTEsIDB4ODEsIDB4MDMsIDB4NmQsCisJMHg0OSwgMHgzOSwgMHhjZiwgMHhkNywgMHhlMywgMHg3MywgMHg3OSwgMHhlYSwgMHhhNiwgMHgzZiwgMHhmZiwgMHg2ZCwKKwkweDllLCAweGJhLCAweDA5LCAweGU5LCAweDhjLCAweDljLCAweDYzLCAweGViLCAweGM2LCAweDRiLCAweGY1LCAweGYyLAorCTB4NWUsIDB4ZTcsIDB4MjYsIDB4ZjcsIDB4OWMsIDB4NzAsIDB4ZDUsIDB4NDIsIDB4NjIsIDB4NDYsIDB4NWMsIDB4YzMsCisJMHg1MSwgMHhiZCwgMHg1NSwgMHg2YiwgMHg1MCwgMHgyMywgMHgwNiwgMHg5NCwgMHhkNywgMHgxZCwgMHgyYiwgMHg5NCwKKwkweDQ0LCAweGZmLCAweGE0LCAweDljLCAweGQ1LCAweGZiLCAweGE4LCAweDNkLCAweDg0LCAweGI1LCAweGQ4LCAweGZlLAorCTB4NTgsIDB4MDcsIDB4OGUsIDB4YWYsIDB4OTYsIDB4YjUsIDB4YmMsIDB4OWYsIDB4OTUsIDB4ZGUsIDB4ZGIsIDB4OTMsCisJMHgzZSwgMHg0NiwgMHhlYSwgMHhlNCwgMHgwYywgMHhhYSwgMHhjOCwgMHhkZSwgMHg5ZSwgMHg1MSwgMHgxOSwgMHg3YiwKKwkweGUyLCAweDc4LCAweDNkLCAweGU4LCAweDhlLCAweDM3LCAweDU2LCAweDNlLCAweDk3LCAweDU5LCAweGE5LCAweDJmLAorCTB4MmYsIDB4OTUsIDB4NWYsIDB4NTAsIDB4MjcsIDB4YmMsIDB4NjQsIDB4NWIsIDB4NjYsIDB4MTMsIDB4YjksIDB4YjYsCisJMHhmNCwgMHhlNywgMHhkNywgMHhjZSwgMHhkYSwgMHg1MCwgMHgwMywgMHhjYiwgMHg4ZSwgMHg5NSwgMHg5ZSwgMHg4YiwKKwkweGFkLCAweDQ1LCAweDhjLCAweDI0LCAweGU0LCAweDllLCAweGQ0LCAweDExLCAweDlkLCAweGNkLCAweGFjLCAweGUzLAorCTB4NDEsIDB4YmQsIDB4N2UsIDB4MjUsIDB4MWUsIDB4YTIsIDB4OGYsIDB4Y2YsIDB4ZDcsIDB4NWYsIDB4NzYsIDB4MzYsCisJMHhjYiwgMHgzOSwgMHhjZCwgMHg4NSwgMHhjMSwgMHgxOSwgMHg2ZCwgMHgyZCwgMHg3NSwgMHhmYiwgMHg1MiwgMHhjOSwKKwkweGJlLCAweDBjLCAweDY2LCAweGU0LCAweGJkLCAweDgxLCAweGIzLCAweGNlLCAweGMyLCAweDQ2LCAweDc5LCAweDdlLAorCTB4NWIsIDB4NmQsIDB4NTEsIDB4N2UsIDB4YjMsIDB4N2IsIDB4MGUsIDB4N2IsIDB4NGYsIDB4YTYsIDB4ZGMsIDB4NmYsCisJMHgzOSwgMHhlMywgMHgxZSwgMHgyYSwgMHhiNywgMHgxNSwgMHhiYiwgMHgzMCwgMHgxZSwgMHhlOSwgMHhkYiwgMHhkNywKKwkweDZhLCAweDJmLCAweGVlLCAweGYzLCAweDlkLCAweGIzLCAweGNhLCAweGVmLCAweDE3LCAweGNjLCAweDczLCAweGViLAorCTB4OTQsIDB4ZGIsIDB4OTQsIDB4M2UsIDB4NmUsIDB4YzIsIDB4ZTMsIDB4OTMsIDB4OTcsIDB4OGUsIDB4ZjEsIDB4ZWUsCisJMHgxOSwgMHg2MywgMHg5MiwgMHgzYSwgMHgzMiwgMHhhZSwgMHg2MCwgMHhjOSwgMHgwZSwgMHgzNiwgMHhiMiwgMHg4YywKKwkweGQ0LCAweDkxLCAweDc1LCAweDgyLCAweGEwLCAweDliLCAweDNmLCAweGQ0LCAweGVkLCAweDE2LCAweDc5LCAweDIyLAorCTB4YzMsIDB4NzEsIDB4ZGUsIDB4NzAsIDB4NjMsIDB4ZjIsIDB4MDIsIDB4YjcsIDB4Y2MsIDB4ZTAsIDB4ZTQsIDB4NmEsCisJMHhmYSwgMHg5MSwgMHhiMywgMHg5OSwgMHhmOCwgMHhlYywgMHhiYywgMHhkMSwgMHgxMSwgMHhjNiwgMHg1NiwgMHg1YiwKKwkweDc0LCAweGFkLCAweDg3LCAweGM3LCAweDg4LCAweDRkLCAweDdkLCAweDJlLCAweDlmLCAweGYxLCAweGExLCAweDM3LAorCTB4NTcsIDB4M2UsIDB4ZWIsIDB4NTIsIDB4MjksIDB4N2IsIDB4MjEsIDB4NjEsIDB4ZDEsIDB4NzksIDB4YWYsIDB4NDEsCisJMHgxZSwgMHgxNywgMHg1YywgMHhhNiwgMHg3OSwgMHhjOSwgMHhjNSwgMHhlZSwgMHhjMSwgMHg3ZiwgMHhjOCwgMHhmYywKKwkweGM2LCAweDdjLCAweGE1LCAweDc1LCAweDkzLCAweDE0LCAweGVkLCAweGE4LCAweDE4LCAweDBmLCAweDQxLCAweGZlLAorCTB4NDAsIDB4MWUsIDB4NTYsIDB4M2EsIDB4NDMsIDB4ZGYsIDB4OWIsIDB4ZmYsIDB4MGYsIDB4NjcsIDB4Y2EsIDB4M2QsCisJMHg0MywgMHg3ZiwgMHhlMSwgMHgyYywgMHg0YSwgMHgyZSwgMHhlOCwgMHgzOCwgMHhmYiwgMHhmOCwgMHhlYywgMHhjMiwKKwkweDc5LCAweDdhLCAweDcyLCAweDA2LCAweDVkLCAweGNlLCAweGRkLCAweGZmLCAweDNiLCAweGU3LCAweDZlLCAweDY2LAorCTB4ZDksIDB4YTksIDB4ZmEsIDB4ZTIsIDB4ZmIsIDB4MjUsIDB4NDksIDB4NzUsIDB4OTksIDB4NWUsIDB4YzYsIDB4NmQsCisJMHhkOSwgMHgyNywgMHgxMiwgMHhkYywgMHgzZSwgMHg1OCwgMHg1NywgMHg1YywgMHgzZiwgMHg4ZSwgMHg3NCwgMHg3NSwKKwkweDQzLCAweGY2LCAweGU0LCAweGNiLCAweDM4LCAweGEzLCAweDFiLCAweDhiLCAweDk0LCAweGNkLCAweDY4LCAweDg5LAorCTB4NTcsIDB4Y2IsIDB4ZjksIDB4YmEsIDB4ODgsIDB4ZDcsIDB4OGMsIDB4MDQsIDB4ZGYsIDB4NDIsIDB4MzQsIDB4NzYsCisJMHhkOCwgMHgzZCwgMHg0MywgMHgyMiwgMHhkOCwgMHhhMywgMHhlMywgMHg5ZSwgMHhiYywgMHg0ZSwgMHg5YiwgMHg5NSwKKwkweGY3LCAweGQyLCAweGU1LCAweDczLCAweGYxLCAweGRkLCAweGM3LCAweDY0LCAweDVlLCAweGIwLCAweGJhLCAweDg3LAorCTB4NTgsIDB4NmQsIDB4ZmQsIDB4YTUsIDB4Y2YsIDB4OTUsIDB4MTcsIDB4ZTksIDB4MTksIDB4NTUsIDB4MjIsIDB4NWQsCisJMHgwZiwgMHgyYSwgMHg2NSwgMHg3OSwgMHg4MSwgMHgwZiwgMHg5MSwgMHgxNywgMHg2MywgMHg3ZCwgMHhhZCwgMHhmNCwKKwkweDJlLCAweGI4LCAweDRlLCAweDE5LCAweDk3LCAweDllLCAweDBkLCAweDlhLCAweDkzLCAweDkyLCAweDNjLCAweGZhLAorCTB4NDAsIDB4ODksIDB4NzMsIDB4MWUsIDB4ZmUsIDB4YWQsIDB4M2MsIDB4ZmEsIDB4NDMsIDB4ZGIsIDB4NGMsIDB4YjIsCisJMHhjZCwgMHhhZSwgMHg2YSwgMHgyNSwgMHgxOSwgMHg5NywgMHhmNywgMHg4MCwgMHgyYSwgMHhlMywgMHhkMSwgMHhkOCwKKwkweDBiLCAweDc0LCAweDcyLCAweGFmLCAweDE5LCAweDBkLCAweDhmLCAweGJhLCAweDY3LCAweDVkLCAweDBjLCAweGZmLAorCTB4ZjIsIDB4N2MsIDB4ZDEsIDB4N2YsIDB4YWMsIDB4YzksIDB4ZGYsIDB4YWQsIDB4OTMsIDB4MWEsIDB4NWQsIDB4ZWYsCisJMHg2ZSwgMHg1NSwgMHg5MiwgMHhkNywgMHg1NywgMHg1MywgMHg0ZSwgMHgyYywgMHgwZSwgMHhhZCwgMHhjMiwgMHgyYywKKwkweGViLCAweDI4LCAweDFhLCAweDdiLCAweDhiLCAweGYzLCAweDc5LCAweGE4LCAweDIzLCAweDFhLCAweDFlLCAweDcxLAorCTB4NzMsIDB4NzQsIDB4ZDEsIDB4OGIsIDB4ZTEsIDB4MmYsIDB4Y2UsIDB4YmQsIDB4MmUsIDB4N2MsIDB4ZGUsIDB4ZjIsCisJMHgzMSwgMHgzNiwgMHg4ZiwgMHhkYiwgMHg3ZSwgMHg4ZSwgMHhhNSwgMHgzNSwgMHhiOCwgMHgxZCwgMHhmNSwgMHhiNCwKKwkweDcxLCAweDI0LCAweGZiLCAweGRhLCAweDE4LCAweDFmLCAweDZjLCAweDI0LCAweDNkLCAweDU3LCAweGQ1LCAweDIxLAorCTB4NDUsIDB4ODIsIDB4ZWUsIDB4ZDEsIDB4NTMsIDB4ZTQsIDB4NWMsIDB4YWQsIDB4YjEsIDB4NDcsIDB4NjgsIDB4YmYsCisJMHhiOSwgMHg1MCwgMHgyNCwgMHg2YywgMHgyMSwgMHg4NSwgMHhlNywgMHhlYywgMHg2NSwgMHg3ZiwgMHhlZSwgMHg4MSwKKwkweDY1LCAweGQ0LCAweDcwLCAweGEyLCAweGFiLCAweGNkLCAweGE5LCAweDNmLCAweGJmLCAweDM1LCAweDFhLCAweGQxLAorCTB4NWUsIDB4MmMsIDB4OWQsIDB4ZDUsIDB4ZTksIDB4YjUsIDB4N2YsIDB4ZTEsIDB4ZWUsIDB4NTEsIDB4NzksIDB4ZjQsCisJMHhkZiwgMHg1NSwgMHg0NiwgMHhkYSwgMHhmNiwgMHg2MywgMHgyYywgMHg5YiwgMHhjNSwgMHg5NiwgMHhjNywgMHhkOCwKKwkweDQ3LCAweGRkLCAweGMxLCAweDMyLCAweDYzLCAweDMzLCAweDk2LCAweDFiLCAweDAxLCAweGFjLCAweDBiLCAweGI2LAorCTB4MjQsIDB4ZTQsIDB4MmMsIDB4ZDIsIDB4NDgsIDB4YWUsIDB4YjgsIDB4MzYsIDB4NTIsIDB4NWMsIDB4MGIsIDB4ZWYsCisJMHhjNywgMHhhMywgMHgxOSwgMHgzNywgMHgzZSwgMHgwNywgMHhmZCwgMHg2NiwgMHg1MiwgMHg3OSwgMHgzNCwgMHhkZiwKKwkweGE5LCAweDNjLCAweDUyLCAweDVhLCAweDhmLCAweGViLCAweGNmLCAweGRmLCAweDEwLCAweDQ0LCAweGI1LCAweDg1LAorCTB4MTMsIDB4ODYsIDB4YmMsIDB4NDcsIDB4MjksIDB4NzIsIDB4MmQsIDB4OGMsIDB4NzYsIDB4ZmMsIDB4MjEsIDB4ZWYsCisJMHg1MywgMHg4YSwgMHg0ZSwgMHgzNywgMHhhMiwgMHg2ZiwgMHhmOCwgMHg2MSwgMHhmNCwgMHgwZSwgMHhiZiwgMHhlNCwKKwkweDllLCAweDY1LCAweGY1LCAweGU5LCAweDdlLCAweGViLCAweDBhLCAweDMzLCAweDcyLCAweGQwLCAweGMyLCAweGJjLAorCTB4N2EsIDB4NTksIDB4MTMsIDB4NmUsIDB4MzQsIDB4OGYsIDB4ZTIsIDB4ZDEsIDB4YTAsIDB4YmMsIDB4MjcsIDB4ZDgsCisJMHg0ZiwgMHg5ZSwgMHgyMiwgMHhlZiwgMHg5YywgMHhhZCwgMHhjMSwgMHg2NywgMHgwNiwgMHg2NCwgMHgwZSwgMHg2YiwKKwkweGFkLCAweDRhLCAweDMzLCAweDkyLCAweDVjLCAweGU3LCAweGNlLCAweDYxLCAweDFiLCAweDhlLCAweDE1LCAweDFlLAorCTB4YzYsIDB4MWIsIDB4YmIsIDB4MzYsIDB4NDMsIDB4OGQsIDB4NDcsIDB4YzIsIDB4YjcsIDB4YzAsIDB4ZDksIDB4N2MsCisJMHhjNCwgMHg0OCwgMHg1YSwgMHgzZSwgMHg0NCwgMHgwZSwgMHg3OCwgMHg1NCwgMHhlMCwgMHhkOSwgMHg1ZCwgMHg5MiwKKwkweDRmLCAweGY3LCAweGUwLCAweDdhLCAweDcyLCAweDgwLCAweDNhLCAweGRkLCAweDU5LCAweGZhLCAweGFiLCAweGM1LAorCTB4OTEsIDB4N2UsIDB4ZGQsIDB4NjMsIDB4ZmQsIDB4ZDMsIDB4MWMsIDB4NDQsIDB4YjIsIDB4MDksIDB4NTUsIDB4ZWYsCisJMHhmOSwgMHhhNCwgMHgwYSwgMHgyNSwgMHg2MCwgMHhjYSwgMHg2ZiwgMHgwMCwgMHg2YywgMHhjNiwgMHgyNywgMHhkYSwKKwkweDAzLCAweGQ2LCAweDJjLCAweDMzLCAweDkyLCAweDdkLCAweDQ5LCAweDg5LCAweGM0LCAweDJjLCAweGY1LCAweDFiLAorCTB4OWMsIDB4ZTcsIDB4MTgsIDB4NWUsIDB4MjQsIDB4YzcsIDB4ZTksIDB4NjIsIDB4NmMsIDB4NWYsIDB4MjEsIDB4MzEsCisJMHhkZCwgMHhjNSwgMHhiZSwgMHhlNiwgMHg0NCwgMHg5NSwgMHgxMiwgMHhjNCwgMHgyZCwgMHgwNSwgMHhlMCwgMHg1MCwKKwkweDZlLCAweDBkLCAweDRlLCAweGVlLCAweDMyLCAweGQwLCAweGM5LCAweDY3LCAweDgzLCAweDE5LCAweDAyLCAweDE2LAorCTB4MzEsIDB4NjAsIDB4ODMsIDB4NjEsIDB4YjUsIDB4YWEsIDB4ZTQsIDB4MTYsIDB4M2UsIDB4MTUsIDB4Y2IsIDB4ZTYsCisJMHg5YiwgMHhkMSwgMHhhOSwgMHhhNSwgMHgxZSwgMHgyZiwgMHgxMiwgMHgwNSwgMHgyZiwgMHhlZSwgMHg2MCwgMHg5OSwKKwkweGVkLCAweDhjLCAweDBiLCAweDlmLCAweDRjLCAweGZiLCAweGM5LCAweDZmLCAweDliLCAweGYwLCAweDMzLCAweGYyLAorCTB4ZWMsIDB4OWYsIDB4OTIsIDB4NGYsIDB4MWYsIDB4MjcsIDB4NWYsIDB4MzgsIDB4OWUsIDB4YWYsIDB4NDYsIDB4ZjcsCisJMHg5MCwgMHg0ZiwgMHhjZSwgMHgxZiwgMHg0ZCwgMHhmOSwgMHgzOCwgMHgxNywgMHhiNSwgMHhlZCwgMHgyMSwgMHg5YywKKwkweDFlLCAweGY1LCAweGUzLCAweGY2LCAweDVkLCAweDkxLCAweDNkLCAweGM3LCAweGQ1LCAweDQ2LCAweGJjLCAweDNmLAorCTB4NWEsIDB4OGQsIDB4OTUsIDB4NDMsIDB4N2UsIDB4ZjYsIDB4Y2QsIDB4YzEsIDB4MGUsIDB4ZTIsIDB4ZmYsIDB4YmIsCisJMHg3YywgMHhkNiwgMHhiOSwgMHgwYiwgMHg0YSwgMHg3ZSwgMHhjOSwgMHgwMiwgMHhlNiwgMHgwNCwgMHgzYSwgMHhlYiwKKwkweGQ3LCAweGUwLCAweGQ2LCAweDIxLCAweGUxLCAweDgxLCAweDJhLCAweGRlLCAweDFlLCAweDU1LCAweGYwLCAweDU2LAorCTB4Y2UsIDB4YzAsIDB4MzIsIDB4YjYsIDB4ZDcsIDB4OTcsIDB4NzksIDB4ZDYsIDB4ZjEsIDB4ZDMsIDB4Y2YsIDB4ZDcsCisJMHhlNiwgMHgwZCwgMHhkYywgMHg5YiwgMHhkMywgMHgxOSwgMHg1MywgMHg3ZSwgMHhlMiwgMHg3OCwgMHhmNCwgMHg3NiwKKwkweGZjLCAweDY0LCAweGE3LCAweDdlLCAweGY0LCAweDc1LCAweDRmLCAweDc0LCAweDZhLCAweDg5LCAweGE3LCAweDFkLAorCTB4YWYsIDB4ZWQsIDB4NmYsIDB4YzcsIDB4ZjcsIDB4MDYsIDB4OTcsIDB4ZTIsIDB4OWEsIDB4ZjYsIDB4MjQsIDB4Y2UsCisJMHgyYywgMHg2OSwgMHhjNywgMHhhYiwgMHg3YiwgMHg3NSwgMHgzYywgMHg5MiwgMHhlOSwgMHg4MCwgMHgzNiwgMHgzMSwKKwkweDQ1LCAweGZlLCAweDliLCAweDQwLCAweGViLCAweDg0LCAweDA5LCAweDdkLCAweGQwLCAweGQ5LCAweDVjLCAweDYzLAorCTB4NmUsIDB4YzYsIDB4YTMsIDB4ODYsIDB4ODksIDB4NDUsIDB4N2IsIDB4NDUsIDB4MGYsIDB4OGUsIDB4YjMsIDB4NmUsCisJMHg4OSwgMHg4OSwgMHgxNywgMHhiMiwgMHgzYSwgMHhmZCwgMHhkNCwgMHhhNCwgMHgxZSwgMHg3NCwgMHgzYywgMHg5ZSwKKwkweDMxLCAweDExLCAweDdkLCAweDRjLCAweDlmLCAweGRlLCAweGM3LCAweGVmLCAweDRiLCAweGY3LCAweDc1LCAweGEwLAorCTB4ODcsIDB4ZWQsIDB4ZGIsIDB4YzQsIDB4ZWIsIDB4M2QsIDB4MTMsIDB4NmQsIDB4MWMsIDB4YjMsIDB4YzEsIDB4ZjEsCisJMHgzNywgMHg1YiwgMHgzZiwgMHg1MywgMHgzYSwgMHg5MSwgMHg5ZCwgMHhlOCwgMHgyMiwgMHg5ZiwgMHhkZCwgMHg0YywKKwkweDFlLCAweGRiLCAweGU1LCAweGVlLCAweGI5LCAweDZmLCAweGNkLCAweDE4LCAweGI4LCAweDM1LCAweGRkLCAweDg1LAorCTB4MjcsIDB4NmQsIDB4MzksIDB4M2IsIDB4YWYsIDB4MjcsIDB4YWUsIDB4NTUsIDB4ZTQsIDB4MWQsIDB4ZGQsIDB4MmUsCisJMHg4YywgMHg1MSwgMHgyNywgMHhjYiwgMHg4NiwgMHg1NiwgMHhiYSwgMHhlNywgMHg5ZCwgMHg5NiwgMHhlZiwgMHhkMiwKKwkweGYxLCAweDQ0LCAweGU2LCAweDEzLCAweDM4LCAweDM5LCAweDZlLCAweGEwLCAweDNiLCAweDJkLCAweGZhLCAweDk2LAorCTB4ZjMsIDB4OWIsIDB4MjksIDB4MWMsIDB4NjEsIDB4NmMsIDB4ZjksIDB4ZDksIDB4NTAsIDB4ZjIsIDB4OWYsIDB4MzgsCisJMHhjZCwgMHhjNywgMHg1NCwgMHhjOCwgMHg3YSwgMHg4OSwgMHg4YSwgMHhhYiwgMHhkYiwgMHhlNSwgMHgwYywgMHhhZSwKKwkweDg3LCAweGE4LCAweDE2LCAweGIxLCAweGVhLCAweDU0LCAweDRiLCAweGUzLCAweDdkLCAweGNiLCAweGFiLCAweDZlLAorCTB4YzIsIDB4NjcsIDB4ODcsIDB4YmMsIDB4Y2MsIDB4MTksIDB4NTQsIDB4ZTYsIDB4M2EsIDB4ZDYsIDB4MDYsIDB4ZGEsCisJMHg4NiwgMHg1NSwgMHhhYiwgMHgxNiwgMHhlNywgMHhjZCwgMHhkZCwgMHg2MywgMHhkMCwgMHgzZCwgMHhkOCwgMHg2MSwKKwkweDM0LCAweDc3LCAweGQ3LCAweGIwLCAweGRlLCAweDhhLCAweDc4LCAweDI0LCAweDU5LCAweGE1LCAweDc2LCAweDMwLAorCTB4MGYsIDB4N2QsIDB4MTgsIDB4ZWIsIDB4NzYsIDB4M2QsIDB4OGMsIDB4YjUsIDB4YmMsIDB4MzYsIDB4ZWMsIDB4NzIsCisJMHgzNiwgMHhkZiwgMHg2YywgMHgyOCwgMHg3OCwgMHg0ZSwgMHg3NywgMHgzNiwgMHg2ZiwgMHgzNiwgMHg3NCwgMHhjZSwKKwkweGFkLCAweGNjLCAweGViLCAweGMzLCAweGQ4LCAweDM4LCAweGY2LCAweDMwLCAweDFlLCAweGEyLCAweDdkLCAweDM1LAorCTB4ZDAsIDB4OGYsIDB4NTcsIDB4YTUsIDB4OWQsIDB4Y2QsIDB4ZDcsIDB4YjQsIDB4YzcsIDB4ZjAsIDB4NzMsIDB4MzcsCisJMHhiZiwgMHgxMSwgMHg3YiwgMHgzZCwgMHhlMywgMHhlNiwgMHhkYywgMHgzOSwgMHhkNSwgMHhiNSwgMHhkZCwgMHhhMCwKKwkweDdjLCAweGI2LCAweGQ0LCAweDI1LCAweGMxLCAweDcyLCAweDZjLCAweGY5LCAweDA1LCAweGU1LCAweGZlLCAweDcyLAorCTB4NTcsIDB4MWQsIDB4MWUsIDB4NmIsIDB4OTAsIDB4ZjgsIDB4ZTEsIDB4YjcsIDB4YWEsIDB4NGMsIDB4MjgsIDB4ZmEsCisJMHgxMiwgMHhlNiwgMHg3MSwgMHg4ZiwgMHgxZCwgMHhjMSwgMHg3NiwgMHhmMiwgMHhjMiwgMHg1MCwgMHg1YywgMHg3MiwKKwkweGVjLCAweDU2LCAweDYzLCAweDhiLCAweDdhLCAweDIzLCAweGIxLCAweDVkLCAweGMxLCAweGEzLCAweDBiLCAweGIzLAorCTB4MTgsIDB4YTAsIDB4YWYsIDB4ZWUsIDB4NTgsIDB4MTgsIDB4NDksIDB4MGQsIDB4YzAsIDB4NzQsIDB4NzYsIDB4Y2MsCisJMHhlOSwgMHhmZiwgMHgyMywgMHhkZSwgMHhhMSwgMHgyZCwgMHhlZiwgMHg0YiwgMHhjYSwgMHg3YiwgMHhiNCwgMHgwZiwKKwkweDYzLCAweGYzLCAweDJlLCAweDk5LCAweGZmLCAweDg3LCAweGYxLCAweDQ1LCAweGY2LCAweDdmLCAweGUzLCAweGQwLAorCTB4YzMsIDB4ZjgsIDB4MWMsIDB4NmQsIDB4YTcsIDB4N2UsIDB4ZjEsIDB4YTEsIDB4MmYsIDB4ZDYsIDB4YTMsIDB4MjUsCisJMHg1YiwgMHg4NywgMHhhOSwgMHhmYiwgMHgxYiwgMHhlNCwgMHhiYywgMHgyZCwgMHgzMSwgMHg3MSwgMHg0MCwgMHg3OSwKKwkweDE4LCAweGY3LCAweDhjLCAweGQ0LCAweGQyLCAweDE3LCAweGRkLCAweDMxLCAweDEwLCAweDhiLCAweGNiLCAweGYxLAorCTB4MmEsIDB4OGMsIDB4NzUsIDB4ZjksIDB4YTYsIDB4MTIsIDB4YWUsIDB4ODcsIDB4YjAsIDB4ZDYsIDB4M2UsIDB4ZTAsCisJMHhmYSwgMHg3ZSwgMHg4NSwgMHhiOSwgMHg5YSwgMHg3ZSwgMHhkZiwgMHg0ZCwgMHhiZiwgMHg1ZiwgMHg0OSwgMHhiZiwKKwkweGVmLCAweGEyLCAweGRmLCAweDc3LCAweGQyLCAweGVmLCAweDkzLCAweGY0LCAweDdiLCAweDkzLCAweDdlLCAweDlmLAorCTB4YTAsIDB4ZGYsIDB4NzcsIDB4ZDAsIDB4ZWYsIDB4MGQsIDB4ZDksIDB4M2IsIDB4NTQsIDB4OGUsIDB4NzYsIDB4MWMsCisJMHg4MSwgMHg2ZiwgMHhkMCwgMHg0ZiwgMHgxYiwgMHgyYSwgMHhiZSwgMHhkMywgMHhiOCwgMHg5ZiwgMHhmOCwgMHg3MywKKwkweGMyLCAweDU4LCAweDE0LCAweGJlLCAweDg5LCAweGFhLCAweDFhLCAweDI1LCAweDQ2LCAweGU0LCAweGM2LCAweGZmLAorCTB4Y2UsIDB4N2QsIDB4ZmYsIDB4MmQsIDB4NDcsIDB4ZGMsIDB4N2YsIDB4OTEsIDB4ZmEsIDB4NTgsIDB4MTEsIDB4NmYsCisJMHgzNiwgMHg5ZSwgMHg2NCwgMHgwYywgMHhmYiwgMHhhMSwgMHhkZSwgMHhkYSwgMHgxZiwgMHg2MiwgMHg5OSwgMHhhZiwKKwkweDY1LCAweDVhLCAweGIzLCAweGIzLCAweGExLCAweDViLCAweGVkLCAweGVhLCAweDU2LCAweDYwLCAweDU1LCAweDg4LAorCTB4NjMsIDB4OTYsIDB4NzMsIDB4ZGQsIDB4YWIsIDB4ZjAsIDB4YzUsIDB4ZTEsIDB4NmUsIDB4ZmMsIDB4Y2YsIDB4ZTEsCisJMHgyMCwgMHg3NSwgMHhkMSwgMHgzYywgMHg3NSwgMHhhMywgMHgwNywgMHhkZiwgMHgwYywgMHhjMywgMHgxMywgMHg5YSwKKwkweDBiLCAweDdjLCAweGQwLCAweDg4LCAweDQ1LCAweDA3LCAweGU0LCAweDVkLCAweGVjLCAweDVjLCAweGEzLCAweGE3LAorCTB4NmQsIDB4M2UsIDB4YzQsIDB4NDYsIDB4NDAsIDB4YTQsIDB4ZjYsIDB4MzAsIDB4ZDMsIDB4NWMsIDB4ZTQsIDB4YmUsCisJMHhhZiwgMHg5OSwgMHg1YywgMHgyZCwgMHg5OCwgMHg1ZSwgMHg4NSwgMHhhZCwgMHgzMSwgMHgxNywgMHg2NywgMHg5ZiwKKwkweDk2LCAweGYzLCAweGU5LCAweDhkLCAweGM0LCAweGEzLCAweDgwLCAweGQ5LCAweDg1LCAweDZkLCAweDAzLCAweGQ2LAorCTB4NWQsIDB4OGQsIDB4NTgsIDB4ODksIDB4ZmUsIDB4ODEsIDB4YTIsIDB4MGUsIDB4ZWUsIDB4OGYsIDB4MTMsIDB4ZjIsCisJMHhjYywgMHhhOCwgMHhiNiwgMHg0OCwgMHg4MSwgMHg3NywgMHg0MywgMHg0NywgMHgwMiwgMHhmNywgMHhlNiwgMHg2ZCwKKwkweDY0LCAweDM5LCAweGM2LCAweGY1LCAweGY0LCAweGIzLCAweDc1LCAweGJmLCAweGZmLCAweDNkLCAweDdjLCAweDdjLAorCTB4Y2UsIDB4ZDYsIDB4NjgsIDB4ZmYsIDB4ZTcsIDB4OWMsIDB4NWMsIDB4ZmQsIDB4YTIsIDB4NmMsIDB4MjMsIDB4ZjQsCisJMHg4ZCwgMHg3NywgMHhhOCwgMHhkNywgMHgzMiwgMHg2NywgMHg4ZSwgMHgxYywgMHhlNCwgMHgyMywgMHg2YiwgMHg4ZSwKKwkweDdiLCAweDhlLCAweGNlLCAweDhmLCAweDA1LCAweDQzLCAweDUwLCAweDQ2LCAweGQzLCAweGYyLCAweGNlLCAweGRhLAorCTB4NjYsIDB4ZmMsIDB4NWYsIDB4YzYsIDB4MzcsIDB4NWMsIDB4NWIsIDB4OWEsIDB4ZjIsIDB4YzgsIDB4OTksIDB4MTYsCisJMHhiOSwgMHhlZiwgMHgyYywgMHgzZCwgMHhiYiwgMHgzOCwgMHgxMiwgMHhkMywgMHgzYywgMHgzZiwgMHhhOCwgMHg5MywKKwkweGZkLCAweDhiLCAweGFmLCAweDMzLCAweGNlLCAweDg2LCAweDg3LCAweDk2LCAweDQyLCAweDVkLCAweGVjLCAweGM3LAorCTB4OWQsIDB4NmQsIDB4YjMsIDB4OTAsIDB4NWEsIDB4MjUsIDB4M2MsIDB4ZDQsIDB4ZGQsIDB4NWYsIDB4YTEsIDB4M2UsCisJMHhmZiwgMHgwMiwgMHhmNywgMHgxOSwgMHg1ZiwgMHhjMSwgMHhmMSwgMHg5MCwgMHg4ZCwgMHgyMSwgMHhlMiwgMHhkNywKKwkweDNhLCAweGUzLCAweDc2LCAweGM1LCAweGUyLCAweDY3LCAweGU2LCAweDQ0LCAweDU4LCAweDZmLCAweDMwLCAweGQ3LAorCTB4ZmEsIDB4NTQsIDB4MDMsIDB4MWEsIDB4NzYsIDB4NDksIDB4NzksIDB4OTEsIDB4N2IsIDB4YzYsIDB4OTUsIDB4YjcsCisJMHgzZiwgMHgyMywgMHg5ZiwgMHg4YiwgMHgzNiwgMHgzYiwgMHhlNSwgMHhmOSwgMHgyNCwgMHhkMCwgMHgyMCwgMHhlNywKKwkweDg0LCAweDE1LCAweGJjLCAweGJkLCAweGQwLCAweGM2LCAweDYzLCAweDE5LCAweDdjLCAweGIzLCAweDBhLCAweGNkLAorCTB4YjksIDB4NDEsIDB4ZDUsIDB4ZjMsIDB4Y2QsIDB4YjksIDB4NTgsIDB4NjQsIDB4ZmMsIDB4NWEsIDB4OTUsIDB4ZjksCisJMHg0OCwgMHhlMiwgMHhiZSwgMHg4NSwgMHg3MiwgMHgxZSwgMHg0ZCwgMHgzZiwgMHhmMywgMHgzZCwgMHhmYSwgMHhkNiwKKwkweDcxLCAweGQ4LCAweGQ4LCAweDNlLCAweGY5LCAweDkyLCAweDMzLCAweDM1LCAweDM3LCAweDg0LCAweGE3LCAweDI2LAorCTB4YTUsIDB4NmUsIDB4MzcsIDB4NGUsIDB4NzAsIDB4NGUsIDB4YmUsIDB4ZWMsIDB4ZWUsIDB4ZTcsIDB4NDUsIDB4OTIsCisJMHgyNywgMHg1NCwgMHg3OSwgMHhlNywgMHhiMCwgMHgxYiwgMHg2ZiwgMHg4ZCwgMHgxYSwgMHhkOCwgMHhjNywgMHgxYywKKwkweGVhLCAweDU3LCAweGMzLCAweGFiLCAweGYwLCAweGViLCAweGUxLCAweDY2LCAweGVkLCAweDZmLCAweDE0LCAweDM5LAorCTB4MDMsIDB4ZmYsIDB4NzEsIDB4ZmMsIDB4YTgsIDB4MjEsIDB4ODgsIDB4ODMsIDB4YjQsIDB4YTEsIDB4NjksIDB4YmIsCisJMHgwYiwgMHg2ZiwgMHhkYiwgMHg1NiwgMHg2NCwgMHgyZSwgMHgyMiwgMHg3YiwgMHhiYywgMHg5ZSwgMHhjOCwgMHgwMSwKKwkweDc5LCAweGNmLCAweDc5LCAweDlkLCAweDFhLCAweDM5LCAweGI4LCAweDQ0LCAweDg5LCAweDU4LCAweDZmLCAweGE4LAorCTB4MmIsIDB4ZjEsIDB4OGIsIDB4N2MsIDB4MTcsIDB4Y2UsIDB4ZTQsIDB4NjcsIDB4ZGEsIDB4YzIsIDB4NjYsIDB4MDcsCisJMHg4ZCwgMHg2MiwgMHgwNywgMHg2MiwgMHgwZiwgMHhiNCwgMHg0NSwgMHhlNiwgMHg4YSwgMHhkZiwgMHgyNiwgMHg4ZiwKKwkweGVlLCAweGZkLCAweDE4LCAweGVkLCAweDMxLCAweDQzLCAweDdiLCAweGNjLCAweGQwLCAweDFlLCAweDg5LCAweDQ5LAorCTB4Y2YsIDB4MTAsIDB4YWIsIDB4YmUsIDB4OTYsIDB4YTEsIDB4M2QsIDB4ZDIsIDB4N2YsIDB4YmUsIDB4NDIsIDB4ZmYsCisJMHgyOSwgMHg3MiwgMHhlNSwgMHgxZSwgMHg3NywgMHg0ZCwgMHhmZiwgMHgxNSwgMHhjNiwgMHg0NCwgMHhmYiwgMHgzMSwKKwkweDc5LCAweDdmLCAweGI4LCAweDc5LCAweDdkLCAweDAxLCAweDkxLCAweDllLCAweDAxLCAweDY1LCAweDVkLCAweGJkLAorCTB4YmMsIDB4Y2YsIDB4ZjEsIDB4ZjksIDB4YTgsIDB4ZjgsIDB4ODAsIDB4YmMsIDB4N2IsIDB4NDYsIDB4YmYsIDB4MWEsCisJMHgzZiwgMHg1NSwgMHgyNywgMHhlZiwgMHhiMiwgMHhlZSwgMHhkZiwgMHhmZCwgMHg1MSwgMHgzYSwgMHhmYiwgMHg3YiwKKwkweGY2LCAweDQzLCAweGY0LCAweGY1LCAweGM3LCAweDhlLCAweDVkLCAweDc0LCAweGY5LCAweDRmLCAweGNlLCAweDhmLAorCTB4MWEsIDB4NjUsIDB4ZmMsIDB4YWIsIDB4ZjEsIDB4ZjMsIDB4ZTEsIDB4NGUsIDB4OWMsIDB4NjUsIDB4ZmMsIDB4ZmQsCisJMHg3NCwgMHhmYiwgMHg5NCwgMHg0NSwgMHg5YiwgMHhkZCwgMHg2OCwgMHg3OCwgMHg0YywgMHg0YywgMHhlNiwgMHgzYiwKKwkweDcxLCAweGRhLCAweDM2LCAweDkxLCAweGI3LCAweDliLCAweGQ3LCAweDdmLCAweDU3LCAweDc5LCAweDUzLCAweGNkLAorCTB4Y2QsIDB4MmIsIDB4ZjIsIDB4ZjksIDB4ZGYsIDB4OTAsIDB4NWYsIDB4MWUsIDB4NmEsIDB4OTEsIDB4ZjcsIDB4NWQsCisJMHgxMywgMHgxOCwgMHhjOSwgMHg4YiwgMHg5ZCwgMHgwNiwgMHg3MSwgMHhkMywgMHgxMiwgMHg0MywgMHhkZSwgMHgxMSwKKwkweGZiLCAweGJkLCAweDdmLCAweGY3LCAweGQ5LCAweGIyLCAweDk3LCAweDcyLCAweGNlLCAweDk5LCAweDBhLCAweGZhLAorCTB4YWQsIDB4MjAsIDB4N2QsIDB4ZDgsIDB4YjMsIDB4NGIsIDB4N2UsIDB4MDcsIDB4NDAsIDB4ZmMsIDB4NTksIDB4YzEsCisJMHg2NywgMHg4YywgMHgyOSwgMHhhZCwgMHgwNiwgMHg5MSwgMHhhNywgMHg3NywgMHgzMywgMHg4MSwgMHg3YSwgMHgyZCwKKwkweDJkLCAweDY3LCAweDg4LCAweDNiLCAweGYxLCAweDI2LCAweGNiLCAweDU3LCAweGQxLCAweDJmLCAweDVlLCAweGNiLAorCTB4N2IsIDB4YmQsIDB4M2YsIDB4NGEsIDB4Y2IsIDB4N2IsIDB4ZWMsIDB4MmIsIDB4ZjEsIDB4YTMsIDB4ZmMsIDB4Y2IsCisJMHhlYSwgMHgyZiwgMHg4MiwgMHgwNiwgMHhkZSwgMHgyZSwgMHhhYywgMHhjMiwgMHhmYywgMHg1ZCwgMHhiMiwgMHhiZSwKKwkweDkwLCAweGM0LCAweDdlLCAweDNiLCAweDcyLCAweGY0LCAweDU5LCAweGFjLCAweGMyLCAweGJjLCAweGIxLCAweGQ1LAorCTB4Y2MsIDB4YTMsIDB4MTUsIDB4YmMsIDB4MTcsIDB4NWQsIDB4OGQsIDB4MDAsIDB4M2YsIDB4ZDcsIDB4ZWUsIDB4NzIsCisJMHg5YywgMHhjMywgMHhmMSwgMHgzYSwgMHg2NywgMHhmYiwgMHg2YSwgMHg5OSwgMHgzYiwgMHhjMSwgMHg5MywgMHg2NSwKKwkweGY1LCAweGE4LCAweDVkLCAweDBkLCAweDhjLCAweDA5LCAweDU3LCAweGQxLCAweDcxLCAweGViLCAweGMwLCAweDJhLAorCTB4NWMsIDB4YjEsIDB4YWIsIDB4MzksIDB4NzYsIDB4MmIsIDB4OWEsIDB4YjMsIDB4NDcsIDB4M2MsIDB4YWIsIDB4ZDAsCisJMHgzMCwgMHg3NiwgMHgyZiwgMHhlNywgMHg0MCwgMHhjYSwgMHg2YSwgMHhiNCwgMHgzZiwgMHgwYiwgMHg5NSwgMHhlNCwKKwkweDg0LCAweDlkLCAweGU5LCAweDlmLCAweDNhLCAweGYzLCAweDRkLCAweDc3LCAweDFmLCAweDBlLCAweGViLCAweDBhLAorCTB4M2EsIDB4ZTMsIDB4NWQsIDB4MzUsIDB4NTIsIDB4MjMsIDB4NGYsIDB4MzgsIDB4NzUsIDB4YTYsIDB4MTcsIDB4NmIsCisJMHgwYiwgMHg2ZCwgMHhiOCwgMHg2OSwgMHhjOCwgMHg3MSwgMHg0ZSwgMHgyZiwgMHg0OSwgMHgyMiwgMHg2MCwgMHgwNiwKKwkweDg4LCAweDYxLCAweDAxLCAweDNjLCAweDk0LCAweGFlLCAweGUxLCAweDdmLCAweDA3LCAweDE1LCAweDhjLCAweGM5LAorCTB4MmQsIDB4YWEsIDB4YmUsIDB4N2UsIDB4OWUsIDB4NDcsIDB4ZWYsIDB4MjksIDB4MjgsIDB4MTIsIDB4ZjcsIDB4MDMsCisJMHg3OCwgMHg4MCwgMHhmMSwgMHg3OSwgMHg0NSwgMHgzYSwgMHg4YywgMHg1NCwgMHhjMSwgMHg3MSwgMHg1ZSwgMHhlZCwKKwkweDA4LCAweGUxLCAweDdlLCAweGQ2LCAweGVmLCAweDRhLCAweGY3LCAweGEzLCAweDk3LCAweDc2LCAweDkxLCAweDFhLAorCTB4ZDMsIDB4YjUsIDB4MjAsIDB4ZTMsIDB4ZmQsIDB4YmEsIDB4ODIsIDB4OWYsIDB4MzEsIDB4YWMsIDB4MDEsIDB4YjcsCisJMHhlYywgMHhkMiwgMHhmMCwgMHg1MCwgMHgyMSwgMHhjMCwgMHhmOCwgMHhlNiwgMHgyYywgMHgzZCwgMHg2OSwgMHg1OCwKKwkweDU3LCAweDdhLCAweGEwLCAweDYzLCAweDYzLCAweDIxLCAweDg0LCAweDk1LCAweGU5LCAweGM4LCAweGI0LCAweGJjLAorCTB4NDcsIDB4N2QsIDB4ZDYsIDB4ODgsIDB4ZTEsIDB4YzEsIDB4NDIsIDB4MTgsIDB4YjcsIDB4YTUsIDB4MGYsIDB4M2QsCisJMHgzNCwgMHgxZiwgMHhkNiwgMHhmZiwgMHg5OCwgMHg4NywgMHgzNiwgMHg3YywgMHhhNiwgMHhkMCwgMHg0NCwgMHhmOSwKKwkweDkxLCAweGY1LCAweGFmLCAweDI4LCAweDRkLCAweGY4LCAweGVjLCAweDk4LCAweDQxLCAweGY5LCAweDJhLCAweDZlLAorCTB4YTUsIDB4OWMsIDB4OWIsIDB4ZDMsIDB4NTcsIDB4ZTAsIDB4ODEsIDB4YjEsIDB4MGUsIDB4ZGMsIDB4NWIsIDB4NTgsCisJMHg4YywgMHhlNSwgMHg4YywgMHg0ZiwgMHgxYiwgMHg5OCwgMHgxYiwgMHhlMiwgMHhiZiwgMHgwMCwgMHhiNywgMHgwZCwKKwkweDg5LCAweGVlLCAweGExLCAweGJjLCAweGRhLCAweDMxLCAweGM1LCAweDdjLCAweGRjLCAweDAwLCAweDBkLCAweDkxLAorCTB4ZjcsIDB4NzQsIDB4NzIsIDB4MzAsIDB4MDMsIDB4YjcsIDB4ZWQsIDB4NWQsIDB4ZWMsIDB4ZWUsIDB4YzksIDB4MzcsCisJMHhjNywgMHgyYiwgMHg5MSwgMHhlYSwgMHg1NiwgMHhkMCwgMHgzOSwgMHgyNCwgMHg3MSwgMHg1NiwgMHhiOCwgMHg4ZCwKKwkweGMxLCAweGI4LCAweDFhLCAweDY1LCAweDFiLCAweDA2LCAweGUzLCAweDZhLCAweGYxLCAweDdlLCAweDZmLCAweDQ2LAorCTB4ZDYsIDB4MmUsIDB4N2UsIDB4NDIsIDB4YmUsIDB4MTQsIDB4NDcsIDB4YTcsIDB4MWIsIDB4YTMsIDB4ZmQsIDB4ZTQsCisJMHhkNywgMHgxNiwgMHhiYywgMHg4YywgMHhkZCwgMHg3MSwgMHhkYSwgMHhmOCwgMHhkMiwgMHg3NiwgMHg4OSwgMHhkNSwKKwkweDNhLCAweDA2LCAweGU4LCAweDBmLCAweDkzLCAweDgzLCAweGZhLCAweDg2LCAweDY5LCAweGM1LCAweDQ0LCAweDYxLAorCTB4YWYsIDB4YzQsIDB4YzQsIDB4MTAsIDB4MWUsIDB4NGMsIDB4OWIsIDB4MzgsIDB4MjksIDB4ZTcsIDB4ZjgsIDB4YWYsCisJMHg0YSwgMHhhZSwgMHhhOCwgMHg4MSwgMHg2ZSwgMHgzYywgMHg4MCwgMHhhOCwgMHg3NSwgMHg4YywgMHhiMSwgMHhmZCwKKwkweDRjLCAweGFlLCAweDAxLCAweDM3LCAweGVkLCAweDkyLCAweDMyLCAweGVkLCAweDc4LCAweDdkLCAweGQ0LCAweDhiLAorCTB4OWIsIDB4ZDIsIDB4OWIsIDB4ZjAsIDB4NDQsIDB4ZDYsIDB4ODMsIDB4MTEsIDB4YTMsIDB4YjksIDB4NWYsIDB4NjUsCisJMHhmYywgMHhiYywgMHhiZSwgMHgzZCwgMHgxMiwgMHhmYywgMHgzYSwgMHhiOSwgMHhlYSwgMHhmNCwgMHg2MiwgMHg0NiwKKwkweGU1LCAweGI5LCAweDFkLCAweGU4LCAweDY0LCAweGJmLCAweDNhLCAweDc1LCAweGYxLCAweDQ5LCAweDBiLCAweGY3LAorCTB4NzYsIDB4NmMsIDB4YzIsIDB4YjEsIDB4YWMsIDB4NmUsIDB4M2QsIDB4MjksIDB4ZWIsIDB4MGMsIDB4ZWQsIDB4N2MsCisJMHgzZSwgMHhjNywgMHg4YiwgMHgzZSwgMHg1ZCwgMHgzOCwgMHhhZCwgMHg0ZSwgMHhkZiwgMHgyMiwgMHhlYiwgMHhkNCwKKwkweDNiLCAweDcwLCAweDkyLCAweGY2LCAweGRhLCAweDlmLCAweDViLCAweGNhLCAweGQ4LCAweDJmLCAweDMxLCAweGRmLAorCTB4NmYsIDB4ODUsIDB4NTksIDB4YWYsIDB4ZWUsIDB4M2EsIDB4MDUsIDB4MjcsIDB4ZjYsIDB4MDksIDB4YzcsIDB4NWEsCisJMHg4YSwgMHhiYiwgMHhhOCwgMHhhNywgMHhjZSwgMHhiNCwgMHg4YSwgMHhlYiwgMHhjNywgMHhkNiwgMHhlMCwgMHhmNCwKKwkweGNlLCAweDIyLCAweGU3LCAweDdhLCAweDM1LCAweDZlLCAweDdkLCAweDg2LCAweDljLCAweGFiLCAweDY3LCAweDE2LAorCTB4MzksIDB4MTcsIDB4YjksIDB4NWMsIDB4ZWMsIDB4NDEsIDB4YzUsIDB4OGIsIDB4NjgsIDB4MjEsIDB4NDEsIDB4NWUsCisJMHgyMSwgMHhmYywgMHgyMiwgMHg4YywgMHhhNywgMHhmMiwgMHgxZCwgMHhiOCwgMHgyNSwgMHhkZCwgMHg4NCwgMHg3MSwKKwkweGYyLCAweGFkLCAweDFjLCAweGYxLCAweDIyLCAweDk3LCAweDY3LCAweDVjLCAweDE5LCAweDZkLCAweGU0LCAweGE1LAorCTB4ZjEsIDB4NWEsIDB4YzAsIDB4NGIsIDB4NzcsIDB4ZWYsIDB4YWQsIDB4YTUsIDB4MmQsIDB4MjcsIDB4YmIsIDB4MjUsCisJMHg0ZiwgMHgyMywgMHhmZiwgMHhjZCwgMHg0YiwgMHhhYywgMHg1NiwgMHg5OCwgMHhiNywgMHhmZSwgMHhhZiwgMHg3YSwKKwkweGM5LCAweDRkLCAweDgzLCAweGJhLCAweDgyLCAweGFmLCAweDY1LCAweDM1LCAweGZjLCAweDU1LCAweGZiLCAweDc2LAorCTB4MjUsIDB4ZDksIDB4ZTAsIDB4YmUsIDB4ODMsIDB4NGEsIDB4ZGYsIDB4YjYsIDB4NzAsIDB4OTIsIDB4NjMsIDB4YmEsCisJMHgzNywgMHgyYiwgMHg3NiwgMHg0OSwgMHgxOSwgMHhjYywgMHhkMSwgMHg4ZiwgMHgxOSwgMHhmNSwgMHhkMCwgMHhlYSwKKwkweDM1LCAweDM5LCAweGQ3LCAweGM0LCAweGQ4LCAweGMxLCAweGY4LCAweDZiLCAweGE3LCAweGM4LCAweGEzLCAweDVhLAorCTB4YmIsIDB4NWIsIDB4NTUsIDB4OGYsIDB4YmMsIDB4OWYsIDB4NjcsIDB4NjgsIDB4YWEsIDB4ZjgsIDB4NTgsIDB4MGEsCisJMHgxNSwgMHg2OSwgMHhiZiwgMHg1NSwgMHgyNywgMHhmNSwgMHg5NywgMHg2YywgMHg2MCwgMHgzYywgMHg2OCwgMHg1ZCwKKwkweGZmLCAweGIyLCAweGYwLCAweGZiLCAweDM5LCAweDExLCAweDZkLCAweDBhLCAweDFiLCAweGIwLCAweGNlLCAweGQ2LAorCTB4MTksIDB4MDMsIDB4ZDcsIDB4MzgsIDB4YmQsIDB4OWMsIDB4ODcsIDB4NTEsIDB4N2IsIDB4MDMsIDB4ZWUsIDB4YjIsCisJMHg1YiwgMHhhNywgMHgxZSwgMHhhNywgMHg2ZCwgMHhlMSwgMHhjZSwgMHgwZCwgMHhlOCwgMHhlNCwgMHhiMywgMHg5MSwKKwkweDRjLCAweGYzLCAweDc0LCAweDJmLCAweDc1LCAweDdkLCAweDdjLCAweDc2LCAweGNjLCAweDVkLCAweGY3LCAweDk3LAorCTB4MzMsIDB4ZTQsIDB4YTMsIDB4ZTQsIDB4ZDcsIDB4NWYsIDB4Y2QsIDB4YjQsIDB4MjYsIDB4ODcsIDB4ZDQsIDB4MWUsCisJMHgwNSwgMHg3MywgMHgyNCwgMHg5NywgMHg0YywgMHg5MCwgMHg1MywgMHgwNSwgMHhmMCwgMHg5OSwgMHhiNCwgMHg0NSwKKwkweDFmLCAweDAwLCAweDZkLCAweGFlLCAweDgzLCAweDc5LCAweGM1LCAweDEzLCAweDRlLCAweGJkLCAweDE5LCAweDM1LAorCTB4NDQsIDB4M2YsIDB4ZWIsIDB4MGIsIDB4NGIsIDB4ZjEsIDB4MTQsIDB4NjMsIDB4NmYsIDB4ZjMsIDB4YjUsIDB4N2EsCisJMHhmMCwgMHgzOSwgMHg2OCwgMHhmMCwgMHg5OSwgMHgzZiwgMHg3NSwgMHgxYSwgMHhjYywgMHgxYSwgMHgzYywgMHgzMCwKKwkweDEyLCAweDRkLCAweGRjLCAweGM0LCAweDM4LCAweGRiLCAweDc5LCAweGFkLCAweDdlLCAweGY0LCAweDE0LCAweDYzLAorCTB4ZTAsIDB4N2MsIDB4ZDMsIDB4OTYsIDB4ZjMsIDB4MjYsIDB4ZTQsIDB4M2IsIDB4MDEsIDB4ZDcsIDB4Y2UsIDB4NGYsCisJMHhkYiwgMHhlMiwgMHgyNywgMHgzYSwgMHg3MSwgMHgzMywgMHg4NCwgMHhjZiwgMHhkMSwgMHhjZSwgMHhkZiwgMHhiNywKKwkweDYzLCAweDk4LCAweDI0LCAweGRmLCAweGY4LCAweDJjLCAweGZkLCAweGUzLCAweDhjLCAweDFkLCAweDQ5LCAweDVkLAorCTB4YTMsIDB4ZWEsIDB4ZDgsIDB4NDAsIDB4ZmYsIDB4NzgsIDB4ZDcsIDB4NGUsIDB4ZDAsIDB4NzcsIDB4M2UsIDB4YzYsCisJMHhhYiwgMHg4ZCwgMHhmZSwgMHgxMCwgMHg2MywgMHgxZCwgMHg4ZCwgMHg3ZSwgMHgxMCwgMHg3MiwgMHhjZiwgMHg5NSwKKwkweDhlLCAweDY1LCAweDlhLCAweGJiLCAweDFmLCAweDQyLCAweDczLCAweGVjLCAweDY2LCAweGE1LCAweDhlLCAweDc5LAorCTB4NmEsIDB4MTAsIDB4ZjcsIDB4MTQsIDB4NmUsIDB4YzAsIDB4ODksIDB4NmMsIDB4NjQsIDB4OWEsIDB4MzksIDB4ZjksCisJMHhjNiwgMHhhNSwgMHgwYSwgMHhlZSwgMHgyMCwgMHg2NywgMHg1YiwgMHg1ZiwgMHhhZCwgMHhiNCwgMHg0ZSwgMHgzZCwKKwkweGE1LCAweDQ0LCAweDY4LCAweDkzLCAweDhjLCAweDk3LCAweGY0LCAweGNmLCAweGNmLCAweGIyLCAweGNjLCAweDk5LAorCTB4NmMsIDB4MzUsIDB4MzYsIDB4OGMsIDB4ZDgsIDB4ZTgsIDB4Y2YsIDB4NTQsIDB4YTAsIDB4NmEsIDB4YTcsIDB4MWYsCisJMHhmNywgMHg4ZiwgMHhlOSwgMHhjOCwgMHg2NCwgMHg2NCwgMHgxZCwgMHhkOSwgMHg2ZiwgMHhkNSwgMHgxMiwgMHgzNywKKwkweDQ2LCAweDg5LCAweDBkLCAweDJmLCAweDJkLCAweDAxLCAweGE2LCAweGY3LCAweGFlLCAweGMxLCAweDgxLCAweDlkLAorCTB4M2EsIDB4ZTMsIDB4NWQsIDB4ZDEsIDB4M2UsIDB4ODIsIDB4NzEsIDB4OTcsIDB4OTMsIDB4YTcsIDB4ODQsIDB4OTMsCisJMHg1NywgMHg5OSwgMHgxMiwgMHhmYiwgMHhhMiwgMHgzZCwgMHg4ZiwgMHg1MCwgMHgwNywgMHhiNywgMHgxNSwgMHhjNCwKKwkweGVlLCAweDEyLCAweDljLCAweGEzLCAweDMwLCAweDA2LCAweDY5LCAweDIzLCAweGZiLCAweGVjLCAweDI2LCAweGU2LAorCTB4ZTYsIDB4MDEsIDB4NTgsIDB4YjQsIDB4MTEsIDB4NGIsIDB4ZGUsIDB4NTMsIDB4YTUsIDB4OGQsIDB4NTgsIDB4YjQsCisJMHgxMSwgMHg4YiwgMHgzNiwgMHg2MiwgMHhkMSwgMHg0NiwgMHhhYywgMHhmYywgMHg1MiwgMHhlNiwgMHg0YywgMHgzYSwKKwkweGM2LCAweGQ5LCAweGU2LCAweGI2LCAweDUxLCAweDcyLCAweGY3LCAweGEwLCAweGQ4LCAweDRhLCAweDBjLCAweDVmLAorCTB4Y2YsIDB4ZjQsIDB4MmIsIDB4ZGEsIDB4OWQsIDB4MzcsIDB4NjAsIDB4MjQsIDB4N2IsIDB4MjMsIDB4MmYsIDB4MDUsCisJMHhiNywgMHhkMiwgMHg1NiwgMHgxZSwgMHhjZCwgMHg4OSwgMHhlZCwgMHhlOSwgMHhlZSwgMHhlZiwgMHhkMywgMHgzYywKKwkweDliLCAweGRmLCAweDMzLCAweDFiLCAweGQ1LCAweGUyLCAweDAzLCAweDhjLCAweDQ1LCAweGVlLCAweDdkLCAweDM5LAorCTB4NzMsIDB4ZWMsIDB4YzcsIDB4NjgsIDB4ZmUsIDB4ODIsIDB4NWYsIDB4N2MsIDB4NGYsIDB4Y2UsIDB4YWIsIDB4YjQsCisJMHhjYiwgMHg2ZiwgMHhjNSwgMHg3NCwgMHgzMCwgMHgwZiwgMHg5MCwgMHg3MywgMHhlZSwgMHgzMiwgMHg0ZSwgMHgxOSwKKwkweDU3LCAweDcxLCAweDRjLCAweDU1LCAweDgzLCAweDliLCAweGYwLCAweGY1LCAweDQxLCAweDlkLCAweGIxLCAweGNhLAorCTB4YzAsIDB4OTMsIDB4MzksIDB4ODksIDB4ZTUsIDB4ZTIsIDB4ZGYsIDB4MzIsIDB4MGYsIDB4ZTIsIDB4ZWIsIDB4MWUsCisJMHhkNCwgMHhiNCwgMHg3YiwgMHgxMSwgMHg3MCwgMHhmZCwgMHhiYywgMHgzOSwgMHhiYywgMHg0MywgMHhiMSwgMHhlOSwKKwkweDNiLCAweGJhLCAweDljLCAweDAzLCAweDlkLCAweDBhLCAweGViLCAweDBkLCAweDM4LCAweGJkLCAweGJiLCAweDFkLAorCTB4ZmYsIDB4NmQsIDB4YTcsIDB4ODcsIDB4M2MsIDB4YzAsIDB4NTksIDB4ZmEsIDB4NTIsIDB4NWMsIDB4NGYsIDB4NGUsCisJMHgyYiwgMHhkMSwgMHhkOCwgMHgyYywgMHhhNSwgMHgxZCwgMHhmNywgMHg5MCwgMHhmYiwgMHg2ZiwgMHgxOCwgMHg4YywKKwkweDc0LCAweDMzLCAweDY2LCAweDFiLCAweGI3LCAweDI4LCAweDRiLCAweDUxLCAweGM1LCAweDFjLCAweGEwLCAweDhkLAorCTB4MzksIDB4YzAsIDB4ODMsIDB4YzQsIDB4ODAsIDB4YWYsIDB4NjYsIDB4YmMsIDB4NjgsIDB4NTksIDB4MmMsIDB4YmYsCisJMHg0ZCwgMHhhNiwgMHhiYiwgMHg2YiwgMHgzYiwgMHgyZiwgMHg5MCwgMHhhMywgMHhjZSwgMHgzNywgMHgzYiwgMHhlNCwKKwkweDJjLCAweDhlLCAweDcyLCAweGY2LCAweGJhLCAweDI5LCAweDI0LCAweDI4LCAweDdmLCAweGNjLCAweGNkLCAweDJmLAorCTB4MTIsIDB4MzgsIDB4OTgsIDB4MjcsIDB4NmUsIDB4NzAsIDB4ZGMsIDB4YWYsIDB4YjQsIDB4ZmQsIDB4ODQsIDB4ZjksCisJMHhiMCwgMHg3MCwgMHg3YiwgMHgxMywgMHgxMywgMHgzOSwgMHg5NywgMHhmZiwgMHg0NywgMHhlYSwgMHg4OCwgMHgxOSwKKwkweGQ5LCAweDQxLCAweGJkLCAweGNiLCAweGFmLCAweDlhLCAweDc4LCAweDY0LCAweGFmLCAweGY4LCAweGIwLCAweDg5LAorCTB4ZjYsIDB4MjEsIDB4M2QsIDB4N2MsIDB4OWIsIDB4MWEsIDB4MGQsIDB4YWUsIDB4ZTMsIDB4YjMsIDB4MDUsIDB4OWMsCisJMHhjZiwgMHhjNywgMHgzMywgMHgzMiwgMHg4ZiwgMHgxYSwgMHg1YSwgMHgxOCwgMHg5YiwgMHhkZiwgMHg5YywgMHhkMCwKKwkweGIxLCAweDg4LCAweDcxLCAweGZhLCAweDlkLCAweDg5LCAweDE4LCAweDk2LCAweDMyLCAweDY2LCAweDNiLCAweGNjLAorCTB4MWYsIDB4MTIsIDB4MTksIDB4ZjEsIDB4NDUsIDB4ZjIsIDB4ODEsIDB4MDksIDB4OGQsIDB4NzEsIDB4NTYsIDB4ZDYsCisJMHg4NywgMHg5ZSwgMHhjMCwgMHhkOCwgMHg2YSwgMHgwZCwgMHhmYiwgMHhkYywgMHhmMywgMHg3YywgMHg3ZSwgMHhhYiwKKwkweDgxLCAweDU4LCAweGQ5LCAweDM5LCAweGUwLCAweGM3LCAweGE3LCAweDg3LCAweDM2LCAweGUzLCAweGY1LCAweGM1LAorCTB4YzIsIDB4OTUsIDB4ZDYsIDB4MzgsIDB4YTIsIDB4OWYsIDB4YzcsIDB4MjksIDB4NzMsIDB4OGMsIDB4YmMsIDB4NzgsCisJMHg5NCwgMHg3OSwgMHhkNywgMHhjMiwgMHg3ZCwgMHg2YiwgMHhmMCwgMHhjOSwgMHg1ZCwgMHgxNywgMHhmMiwgMHhiNCwKKwkweDMzLCAweDcxLCAweGViLCAweDZlLCAweGRhLCAweGM0LCAweGZhLCAweDAwLCAweDZkLCAweGEyLCAweDk2LCAweDM2LAorCTB4NjEsIDB4NjcsIDB4YTIsIDB4YzksIDB4MDIsIDB4NmQsIDB4MjIsIDB4NDYsIDB4ZGMsIDB4YzgsIDB4MGUsIDB4NDgsCisJMHgzOSwgMHhmNywgMHg5ZCwgMHg5OSwgMHhiYiwgMHhlNCwgMHhkZCwgMHg2NSwgMHg4MywgMHhiZSwgMHhiMywgMHg3NSwKKwkweGMwLCAweGQ5LCAweGVjLCAweDY1LCAweGJjLCAweDc5LCAweGE0LCAweGEzLCAweDg5LCAweGQ4LCAweDcyLCAweDIzLAorCTB4ZjYsIDB4MGMsIDB4MzYsIDB4YTEsIDB4ODUsIDB4MzEsIDB4NjMsIDB4NjEsIDB4MWEsIDB4NzcsIDB4ODQsIDB4YTEsCisJMHhjZSwgMHgwZiwgMHgyMywgMHhiMiwgMHhlMSwgMHgxZCwgMHg0NCwgMHhhNywgMHhlZiwgMHg1NiwgMHg1YSwgMHg4ZiwKKwkweGJlLCAweGE4LCAweDQ0LCAweDM2LCAweGZlLCAweDg0LCAweDM2LCAweDdjLCAweDU2LCAweDkxLCAweGI2LCAweDliLAorCTB4NzAsIDB4MzUsIDB4ZmQsIDB4ZTQsIDB4MmEsIDB4ZmEsIDB4ODQsIDB4YzYsIDB4NWMsIDB4NTIsIDB4NjMsIDB4ZGQsCisJMHhmZSwgMHg0MSwgMHgxZiwgMHhlNiwgMHgzMywgMHhkNywgMHg5MywgMHhiMywgMHhjYSwgMHhiMSwgMHgzMSwgMHgyZiwKKwkweGIyLCAweDNiLCAweGY1LCAweGE5LCAweDQ3LCAweGQwLCAweDA4LCAweDYzLCAweGVjLCAweDQ2LCAweDZjLCAweDFkLAorCTB4ZDQsIDB4MTAsIDB4ZTUsIDB4YmQsIDB4YmUsIDB4OWQsIDB4MGIsIDB4ZDAsIDB4NGMsIDB4ZmIsIDB4ZDYsIDB4ZTgsCisJMHhhNywgMHhiZCwgMHg4MywgMHgyYSwgMHgxNiwgMHg4YywgMHhkZCwgMHg4MCwgMHgxZCwgMHg4MywgMHgwYSwgMHhlZSwKKwkweDhiLCAweDJhLCAweDY4LCAweDE5LCAweDkxLCAweDFjLCAweDJjLCAweDg2LCAweGE3LCAweDMyLCAweGMyLCAweDE1LAorCTB4YTEsIDB4YjQsIDB4NWMsIDB4NGIsIDB4OGUsIDB4NGMsIDB4ZWUsIDB4ZjksIDB4OTMsIDB4OWMsIDB4Y2MsIDB4YjksCisJMHhlOCwgMHg1MywgMHg3ZSwgMHg1MywgMHhhNiwgMHgxZCwgMHg5ZiwgMHhkYiwgMHhkOSwgMHg4MCwgMHhhYiwgMHg3NiwKKwkweGViLCAweGQ2LCAweDY5LCAweGM1LCAweDU5LCAweDdhLCAweDgwLCAweDdjLCAweGRlLCAweGFmLCAweDE2LCAweGU3LAorCTB4ZmMsIDB4YzEsIDB4YzEsIDB4NjcsIDB4MTksIDB4MmYsIDB4N2UsIDB4ZTIsIDB4MDQsIDB4ZjUsIDB4YTUsIDB4ZTgsCisJMHg4YiwgMHgyNywgMHhiMSwgMHhiNiwgMHhhMywgMHgxZCwgMHg2YiwgMHhmNywgMHg4YSwgMHhiZSwgMHgxYywgMHhlNiwKKwkweDg3LCAweGNjLCAweGZkLCAweDI2LCAweGE3LCAweGYwLCAweDBlLCAweGZkLCAweDc3LCAweDExLCAweDM5LCAweGVkLAorCTB4NTIsIDB4YzYsIDB4ODksIDB4MzcsIDB4MTYsIDB4OWIsIDB4ZDQsIDB4OWYsIDB4ZWUsIDB4OWUsIDB4ZjUsIDB4OWIsCisJMHg2NywgMHg5YSwgMHhhOCwgMHgxZCwgMHhkNCwgMHgxOSwgMHg2NywgMHg0YywgMHhjYywgMHhkYSwgMHgyYiwgMHhlZCwKKwkweDk5LCAweGI4LCAweDY3LCAweDUwLCAweDRmLCAweDNkLCAweGNkLCAweGI5LCAweDE0LCAweGJiLCAweDExLCAweGNjLAorCTB4YWUsIDB4NjEsIDB4ZWMsIDB4M2YsIDB4MzksIDB4MjksIDB4MzgsIDB4ZDUsIDB4ODksIDB4MTMsIDB4Y2MsIDB4MDMsCisJMHhkZSwgMHg3YywgMHgyYywgMHhkYSwgMHhmZCwgMHgzMywgMHhlNiwgMHg3NCwgMHhlZiwgMHg1MCwgMHg0NiwgMHg5NiwKKwkweGZkLCAweDFiLCAweGUwLCAweGJjLCAweDU2LCAweGE0LCAweGY1LCAweDhkLCAweGZmLCAweDhjLCAweDI4LCAweGZkLAorCTB4YmIsIDB4MGIsIDB4YjUsIDB4ZDQsIDB4YzksIDB4ODEsIDB4YzEsIDB4OTUsIDB4ZjAsIDB4ZDMsIDB4MTYsIDB4MWUsCisJMHhjOSwgMHg4OCwgMHhkZCwgMHgxMCwgMHhiZiwgMHg3NywgMHg3ZSwgMHgwMiwgMHg1YiwgMHhmNywgMHgxNywgMHhmMywKKwkweGJjLCAweDdiLCAweDA2LCAweDM2LCAweGQxLCAweGM2LCAweDg1LCAweGIzLCAweGM3LCAweDY4LCAweGVmLCAweDk4LAorCTB4ZTcsIDB4NDMsIDB4YjIsIDB4OWUsIDB4MTgsIDB4OTEsIDB4NTgsIDB4NGUsIDB4Y2MsIDB4N2MsIDB4ZDQsIDB4MjAsCisJMHhhZSwgMHhkNiwgMHg0NywgMHhjMiwgMHgyZCwgMHhhYSwgMHg5NSwgMHg2MCwgMHg1ZSwgMHgxNywgMHhiZSwgMHgwZiwKKwkweGQyLCAweGJlLCAweDg1LCAweDc1LCAweDRiLCAweDM2LCAweDYxLCAweDRmLCAweGQ2LCAweDhiLCAweGFhLCAweGM1LAorCTB4MWUsIDB4ZTIsIDB4YjEsIDB4NjAsIDB4OTQsIDB4MTUsIDB4OTQsIDB4ZTcsIDB4NmIsIDB4MjEsIDB4N2UsIDB4MjIsCisJMHhmMywgMHhlYiwgMHhjMSwgMHg5OSwgMHg3OCwgMHhmMywgMHg4NiwgMHhhYywgMHhmYywgMHg5NiwgMHgwNSwgMHg3MywKKwkweGJlLCAweGNmLCAweGEyLCAweDgzLCAweDczLCAweDJmLCAweGZlLCAweDk4LCAweGMwLCAweDNkLCAweDYzLCAweGMyLAorCTB4ZDUsIDB4YzgsIDB4ZTcsIDB4NmMsIDB4M2YsIDB4ZmUsIDB4M2EsIDB4MmIsIDB4OWMsIDB4NmUsIDB4MzMsIDB4ZWUsCisJMHg2OSwgMHgyZiwgMHhlNywgMHg2ZSwgMHg2MiwgMHg3NywgMHhhZCwgMHhkMywgMHgxZSwgMHgzNCwgMHg5MywgMHg5MywKKwkweGU5LCAweGI5LCAweGFjLCAweDFhLCAweGIxLCAweDUyLCAweDg4LCAweGY0LCAweGE3LCAweDIwLCAweDcxLCAweGEyLAorCTB4ZDUsIDB4ZTIsIDB4MGMsIDB4NTMsIDB4MzYsIDB4YjksIDB4YTUsIDB4ZWQsIDB4NDEsIDB4MWQsIDB4N2QsIDB4NWMsCisJMHg3ZSwgMHg0NCwgMHhhZSwgMHg5ZCwgMHhmNiwgMHhmMywgMHhhYywgMHg1ZCwgMHgwZCwgMHhjZCwgMHhiNSwgMHg3NSwKKwkweDJmLCAweDk2LCAweDE2LCAweDJjLCAweGUyLCAweGVkLCAweDUyLCAweGI0LCAweDNkLCAweDE2LCAweGMwLCAweDM1LAorCTB4ZTQsIDB4MjYsIDB4NTcsIDB4YTcsIDB4OWYsIDB4NzAsIDB4NjYsIDB4MTEsIDB4N2IsIDB4ZGIsIDB4NDYsIDB4YTIsCisJMHhjMSwgMHgyMywgMHhlNCwgMHg4MSwgMHgwNywgMHg5NiwgMHhmYywgMHhkNCwgMHhmMSwgMHg5OCwgMHhhZSwgMHg1ZiwKKwkweDY4LCAweGY0LCAweDAwLCAweGU3LCAweDMzLCAweDFkLCAweGZhLCAweGQ0LCAweDBlLCAweDA0LCAweDkwLCAweDIwLAorCTB4N2UsIDB4NWUsIDB4OTksIDB4NjksIDB4NDAsIDB4ZmIsIDB4ZWUsIDB4N2UsIDB4Y2UsIDB4N2YsIDB4MTAsIDB4NTcsCisJMHhmMiwgMHhmYiwgMHg2MiwgMHhjNiwgMHgzNywgMHg4ZCwgMHhkOCwgMHhhYSwgMHhjOSwgMHhlNywgMHg4MiwgMHhkOCwKKwkweDRiLCAweDk4LCAweDdlLCAweGU0LCAweDJjLCAweGJkLCAweGIzLCAweGRkLCAweGJhLCAweDYzLCAweDM2LCAweGY1LAorCTB4ZDUsIDB4NDIsIDB4NWMsIDB4NWUsIDB4OWEsIDB4ODksIDB4NmMsIDB4YmMsIDB4NTksIDB4NTEsIDB4YjAsIDB4YjIsCisJMHhkZCwgMHg2MCwgMHhkYiwgMHgwMSwgMHhjNCwgMHgzMiwgMHhiMiwgMHgzNiwgMHg3MCwgMHhlOCwgMHhhMSwgMHgzYSwKKwkweDU4LCAweGFkLCAweDAxLCAweGRhLCAweGU5LCAweDExLCAweDQ1LCAweGQ2LCAweDM1LCAweDQ0LCAweDZmLCAweDRkLAorCTB4YjgsIDB4OGEsIDB4N2MsIDB4NDQsIDB4MjMsIDB4NjYsIDB4YzcsIDB4MGEsIDB4YTIsIDB4NDMsIDB4NjAsIDB4NmQsCisJMHg2ZSwgMHgwZCwgMHhmNiwgMHgwYywgMHg4YiwgMHg3ZiwgMHgwYSwgMHg3NiwgMHgzYSwgMHg0ZSwgMHhlNSwgMHhlMiwKKwkweGE4LCAweGYxLCAweDM2LCAweDc1LCAweGY4LCAweGM2LCAweDg0LCAweDYwLCAweDkwLCAweDgyLCAweDc5LCAweGI0LAorCTB4NjMsIDB4NTUsIDB4OTcsIDB4NTgsIDB4MmIsIDB4YjgsIDB4MTUsIDB4YTYsIDB4ZGYsIDB4NzYsIDB4ZTAsIDB4ZDMsCisJMHg4YywgMHg2ZCwgMHhkNSwgMHg5YywgMHg4MywgMHg1NSwgMHg0YiwgMHg5YSwgMHhlOCwgMHhiZiwgMHhjNCwgMHhjOSwKKwkweDg5LCAweDIwLCAweGFmLCAweDEwLCAweDhlLCAweGVmLCAweDZmLCAweGU0LCAweGE1LCAweGYxLCAweDVhLCAweGMwLAorCTB4NGIsIDB4ZTcsIDB4M2QsIDB4MTUsIDB4NjcsIDB4ZjYsIDB4OTMsIDB4MzMsIDB4ZWQsIDB4MTUsIDB4MGUsIDB4MjIsCisJMHgzZSwgMHhlOCwgMHhjNywgMHhkMywgMHgxMywgMHgyMCwgMHg4ZiwgMHgzMSwgMHhjOCwgMHg0MywgMHgwNCwgMHhmZiwKKwkweDY0LCAweDllLCAweDk4LCAweGM3LCAweDBjLCAweGM2LCAweDExLCAweDFkLCAweDI5LCAweDcyLCAweDhlLCAweDkzLAorCTB4YzMsIDB4N2EsIDB4Y2YsIDB4NWEsIDB4NDQsIDB4YjUsIDB4YmYsIDB4MjYsIDB4N2UsIDB4OWQsIDB4MWEsIDB4NmQsCisJMHhjNywgMHg3NCwgMHg5NiwgMHhiOCwgMHhiNSwgMHhiOCwgMHgxZCwgMHg2ZiwgMHhlNywgMHgzNiwgMHhkMSwgMHhmZiwKKwkweDU1LCAweDljLCAweDI1LCAweDY2LCAweDY5LCAweDczLCAweDA1LCAweGQ3LCAweDA1LCAweDQzLCAweGZkLCAweGI0LAorCTB4ZDcsIDB4MGUsIDB4NTksIDB4MDMsIDB4NTUsIDB4ZTIsIDB4YzQsIDB4YWMsIDB4NmIsIDB4ZDIsIDB4Y2YsIDB4M2EsCisJMHhiNSwgMHgzYSwgMHg3MywgMHgyYSwgMHgzNSwgMHg4MSwgMHgwYywgMHgzMSwgMHhjYiwgMHhjZSwgMHhjYSwgMHg3YywKKwkweDZkLCAweGM2LCAweDU2LCAweGUyLCAweGQ1LCAweGQ2LCAweDljLCAweGQ4LCAweDM3LCAweDZkLCAweDdhLCAweDUwLAorCTB4MGYsIDB4MTYsIDB4NjgsIDB4ZGIsIDB4ZWEsIDB4NWUsIDB4OTEsIDB4NjEsIDB4YTIsIDB4OGYsIDB4YjEsIDB4ZmQsCisJMHgzMywgMHgxZCwgMHgyNiwgMHg3NiwgMHhlNCwgMHgyNCwgMHgwZSwgMHgwYSwgMHgwNywgMHhkMywgMHg5OCwgMHg5NywKKwkweDI0LCAweGQxLCAweDQzLCAweDljLCAweDdhLCAweGRiLCAweGVlLCAweGM0LCAweDBhLCAweGUyLCAweGQ0LCAweDJmLAorCTB4OTgsIDB4YTcsIDB4ZGMsIDB4NDksIDB4OWMsIDB4N2EsIDB4YzMsIDB4MmUsIDB4ZTIsIDB4ZDQsIDB4Y2QsIDB4MTMsCisJMHg2MiwgMHgwYiwgMHg0NSwgMHg1ZSwgMHg3ZSwgMHhjMiwgMHg2ZSwgMHg2YiwgMHg5MCwgMHhkZiwgMHgzOSwgMHhhYiwKKwkweDM2LCAweDdmLCAweDU3LCAweDVjLCAweDU4LCAweDg1LCAweDk3LCAweDg2LCAweGNiLCAweDdiLCAweGM1LCAweDkxLAorCTB4ZTQsIDB4ZWQsIDB4ZTQsIDB4Y2MsIDB4NDcsIDB4NDcsIDB4Y2IsIDB4OWMsIDB4ZjcsIDB4YjgsIDB4OWIsIDB4NWIsCisJMHhjZiwgMHgzMiwgMHhjYiwgMHhmYiwgMHg5NiwgMHhlNSwgMHhmZCwgMHgwNiwgMHgwYiwgMHg1ZiwgMHg1ZCwgMHgyMiwKKwkweDNjLCAweDUzLCAweGQ2LCAweDgxLCAweDJhLCAweGM4LCAweDI3LCAweGJiLCAweDMxLCAweGJlLCAweGYzLCAweDNkLAorCTB4M2MsIDB4MzIsIDB4YTgsIDB4ZGUsIDB4NWMsIDB4YzMsIDB4ZDgsIDB4N2EsIDB4OGIsIDB4YjIsIDB4MTksIDB4OWUsCisJMHhiOCwgMHhiYywgMHg0NywgMHgyYSwgMHg2YiwgMHhlNSwgMHhjYywgMHg1ZCwgMHgyNiwgMHhiMywgMHhlOCwgMHhkYiwKKwkweDU3LCAweDgzLCAweDQzLCAweDQxLCAweGM3LCAweDc5LCAweGRhLCAweDk4LCAweDI3LCAweDNmLCAweDEzLCAweDIwLAorCTB4YjgsIDB4MTksIDB4YTgsIDB4YTAsIDB4MmYsIDB4ZGMsIDB4ZmMsIDB4NWIsIDB4YmYsIDB4ZGQsIDB4NTgsIDB4ZGUsCisJMHgzYiwgMHhkOCwgMHg4OCwgMHhiYiwgMHg3NiwgMHgzZCwgMHg4YywgMHg5ZSwgMHg1ZCwgMHg3ZiwgMHg4YiwgMHg0ZiwKKwkweDBlLCAweDJkLCAweGVjLCAweDlmLCAweGU3LCAweDcxLCAweDljLCAweGFiLCAweGRiLCAweGE3LCAweDcwLCAweDJhLAorCTB4Y2UsIDB4ZDgsIDB4MTgsIDB4NTIsIDB4ZjAsIDB4YmQsIDB4YWIsIDB4MTYsIDB4OGEsIDB4MWMsIDB4ZmUsIDB4YmQsCisJMHhlZiwgMHg2OCwgMHhhZSwgMHhiYywgMHg1YiwgMHg0YiwgMHgzZSwgMHg5MiwgMHg5OCwgMHhjMywgMHhmMSwgMHg1MywKKwkweGY2LCAweDhhLCAweGZhLCAweGQyLCAweGJiLCAweGMyLCAweDdmLCAweDQwLCAweDViLCAweDNmLCAweDE2LCAweDE5LAorCTB4ZmMsIDB4MmIsIDB4Y2IsIDB4NzgsIDB4Y2QsIDB4NDksIDB4YWUsIDB4OTYsIDB4N2EsIDB4MTUsIDB4YTUsIDB4MzYsCisJMHhmZSwgMHg5NiwgMHg5YywgMHg5MCwgMHhiYywgMHhkMCwgMHhlMCwgMHhmZiwgMHg5MSwgMHhlYiwgMHg0NCwgMHgzZSwKKwkweDlmLCAweDk1LCAweGU1LCAweGJmLCAweGU0LCAweDI0LCAweGJiLCAweGU1LCAweGJiLCAweDk0LCAweDU5LCAweGM3LAorCTB4NjcsIDB4NTIsIDB4YWUsIDB4ZmMsIDB4ZWMsIDB4ZjksIDB4OTIsIDB4OWMsIDB4NGEsIDB4NjgsIDB4MGQsIDB4NDUsCisJMHgzOSwgMHg5ZiwgMHhhNiwgMHg5YywgMHgzMywgMHg4YiwgMHg5MywgMHg1MCwgMHhhZiwgMHg5ZCwgMHgyOSwgMHhhYiwKKwkweGRjLCAweGVlLCAweGZmLCAweDNhLCAweDJmLCAweGFiLCAweDU4LCAweGVlLCAweDZmLCAweGU2LCAweGM4LCAweGJlLAorCTB4ODAsIDB4N2EsIDB4ZWQsIDB4Y2MsIDB4NzUsIDB4ZjIsIDB4MGEsIDB4ZmEsIDB4NmYsIDB4MzQsIDB4YjgsIDB4ZDUsCisJMHg1ZCwgMHg5ZiwgMHgzNiwgMHhiMCwgMHhmNiwgMHhlMiwgMHgxYywgMHg0YiwgMHhiMCwgMHgwMywgMHhlMywgMHg3NiwKKwkweGIwLCAweDk0LCAweDUzLCAweGM5LCAweDJkLCAweDEzLCAweDVmLCAweDY2LCAweGNlLCAweGY2LCAweDk0LCAweDFkLAorCTB4ZTksIDB4NWEsIDB4YTcsIDB4YjQsIDB4MjYsIDB4MTcsIDB4MzEsIDB4Y2UsIDB4YTAsIDB4NWUsIDB4ZDYsIDB4YjAsCisJMHgxMywgMHhlZSwgMHhlZiwgMHhmOSwgMHhlNSwgMHhhMywgMHgwOSwgMHhlNCwgMHg2OSwgMHg4ZiwgMHhhZiwgMHhkOCwKKwkweDkxLCAweDBkLCAweGE3LCAweGRjLCAweGZkLCAweDNiLCAweDEzLCAweDJmLCAweGU3LCAweDVmLCAweDJkLCAweGVkLAorCTB4MzMsIDB4OTUsIDB4N2YsIDB4NGYsIDB4NmMsIDB4ZTYsIDB4MWEsIDB4YWEsIDB4Y2MsIDB4YmYsIDB4OWMsIDB4YjEsCisJMHg2ZSwgMHg5MCwgMHhiNSwgMHgwYSwgMHhjYiwgMHhhMiwgMHg5ZiwgMHhmNywgMHg2NiwgMHhhYywgMHhiMCwgMHg4YSwKKwkweGViLCAweDkwLCAweDBhLCAweGM5LCAweGJlLCAweGM0LCAweGQ2LCAweGQyLCAweDZmLCAweDUyLCAweGIxLCAweGRlLAorCTB4ZWYsIDB4NTgsIDB4MTMsIDB4MDIsIDB4OGMsIDB4ZDIsIDB4MzksIDB4YjYsIDB4MTgsIDB4YWMsIDB4YzksIDB4MmIsCisJMHhjOCwgMHhjNSwgMHg2NCwgMHhiZCwgMHgwMSwgMHhkNiwgMHg2YywgMHg1MywgMHg0MywgMHg0OCwgMHgzZiwgMHhjYywKKwkweDcxLCAweGZiLCAweDMwLCAweDg3LCAweGY5LCAweDU0LCAweDdjLCAweDYxLCAweDZiLCAweDc3LCAweGJiLCAweDNhLAorCTB4NTcsIDB4NzAsIDB4MzYsIDB4OTgsIDB4NTQsIDB4NjMsIDB4MTIsIDB4MDcsIDB4NTAsIDB4OTksIDB4OTYsIDB4YjMsCisJMHgyNiwgMHg1NiwgMHg5NywgMHg5ZiwgMHg5OCwgMHhiYSwgMHg5OCwgMHhkOCwgMHg1MiwgMHgxMSwgMHg4NSwgMHhmNywKKwkweGJlLCAweGJjLCAweDE3LCAweGMxLCAweDg1LCAweGJmLCAweDcwLCAweDdlLCAweDE4LCAweDhhLCAweDYxLCAweGRiLAorCTB4NjQsIDB4YjksIDB4MGYsIDB4MDYsIDB4ZmUsIDB4N2IsIDB4ZTEsIDB4ZDIsIDB4OGMsIDB4YjMsIDB4MmMsIDB4ZjMsCisJMHgzZCwgMHgyNywgMHgzOSwgMHg0NywgMHhkYSwgMHgyZSwgMHhjYSwgMHhmZCwgMHhlOCwgMHhiZSwgMHg0YSwgMHgxZiwKKwkweGE1LCAweGFmLCAweGNkLCAweDFhLCAweDUxLCAweDE1LCAweDViLCAweDhkLCAweDg5LCAweDM5LCAweGYyLCAweDliLAorCTB4M2YsIDB4ZjcsIDB4YjgsIDB4NjcsIDB4ZDMsIDB4NjUsIDB4MGUsIDB4ZTQsIDB4ZmQsIDB4ZjEsIDB4MDQsIDB4ZWUsCisJMHg5MywgMHhmNywgMHgzMCwgMHgxOSwgMHhiMywgMHhlZSwgMHhjZCwgMHhiYiwgMHhlZiwgMHg3NywgMHg0MiwgMHg3ZSwKKwkweDE3LCAweGYxLCAweGRlLCAweDdjLCAweDUxLCAweDdmLCAweDBmLCAweGU1LCAweDAzLCAweGU0LCAweGRkLCAweDAxLAorCTB4Y2IsIDB4NmIsIDB4NmUsIDB4ODAsIDB4NGYsIDB4OTcsIDB4MzMsIDB4NjcsIDB4NjUsIDB4NWQsIDB4ZmUsIDB4ZGYsCisJMHg3MywgMHgyNCwgMHg5NywgMHhmZiwgMHgyYSwgMHhmZCwgMHhjOSwgMHhiYiwgMHg1MCwgMHgzZSwgMHg1YiwgMHhmMiwKKwkweGFlLCAweGEyLCAweDUyLCAweGZjLCAweDdjLCAweGM2LCAweDdkLCAweGVmLCAweDVkLCAweDM1LCAweGQ3LCAweGQxLAorCTB4MmYsIDB4NjcsIDB4YmIsIDB4ZWYsIDB4ZWIsIDB4ODksIDB4N2UsIDB4NDIsIDB4YTYsIDB4ZTUsIDB4Y2MsIDB4ZDYsCisJMHgwMywgMHhiNCwgMHg5MSwgMHhkZSwgMHgzOSwgMHhhNSwgMHg3NywgMHgwZiwgMHhiYSwgMHhlZSwgMHgyMCwgMHg4ZSwKKwkweDJjLCAweDIyLCAweGI3LCAweDVhLCAweGFjLCAweDQ0LCAweGI0LCAweDU1LCAweDRhLCAweDM3LCAweGViLCAweDUxLAorCTB4NGYsIDB4MDUsIDB4OTEsIDB4YTEsIDB4YjgsIDB4YmYsIDB4YmQsIDB4ZWIsIDB4YTMsIDB4OGMsIDB4ZmQsIDB4NzYsCisJMHhhYiwgMHhlNiwgMHg1MywgMHg3ZiwgMHg1ZSwgMHgzYSwgMHg3YiwgMHgyZCwgMHg3YiwgMHhmMSwgMHgyOSwgMHgzYywKKwkweDZmLCAweGNmLCAweGMxLCAweGQ0LCAweDZmLCAweGM5LCAweDNkLCAweGJmLCAweDY2LCAweGZkLCAweDRmLCAweDQxLAorCTB4NjIsIDB4ODgsIDB4NGYsIDB4OGYsIDB4NmMsIDB4OGMsIDB4N2IsIDB4MjIsIDB4ZWIsIDB4YTcsIDB4ZTksIDB4ZDMsCisJMHg4NSwgMHhiOCwgMHg5ZSwgMHhmYSwgMHgxYSwgMHhkYiwgMHhmOCwgMHgzZSwgMHhiOSwgMHg4NSwgMHgzZCwgMHg0MywKKwkweDdlLCAweDUxLCAweDU2LCAweDZiLCAweDRmLCAweDg1LCAweDdhLCAweGM2LCAweDI5LCAweGJlLCAweDc3LCAweDJkLAorCTB4YmYsIDB4ZmIsIDB4YmIsIDB4MDYsIDB4YzEsIDB4YjQsIDB4ZTUsIDB4ODQsIDB4MjgsIDB4NzMsIDB4YmUsIDB4MTksCisJMHhkOSwgMHg1MywgMHhhZiwgMHhlYSwgMHhkOSwgMHhjZiwgMHhhYiwgMHg5YiwgMHhiMSwgMHg1NiwgMHg4ZSwgMHg3YywKKwkweDk4LCAweDExLCAweGVkLCAweGQzLCAweGI0LCAweDhmLCAweDc2LCAweDU3LCAweDQ2LCAweDMyLCAweDU2LCAweDgxLAorCTB4OGYsIDB4M2EsIDB4ZDMsIDB4YzYsIDB4ZjEsIDB4NDEsIDB4ZDYsIDB4MjgsIDB4NTksIDB4Y2UsIDB4ZGQsIDB4ZTMsCisJMHg5NywgMHhmNywgMHg3NywgMHg5OCwgMHg2MywgMHhkYiwgMHhmMiwgMHhiYiwgMHhhNiwgMHg2ZSwgMHgzMywgMHhhNSwKKwkweDdkLCAweDI0LCAweGU2LCAweGM4LCAweDhjLCAweDk3LCAweGY3LCAweGM4LCAweDZmLCAweGM4LCAweDU1LCAweDA3LAorCTB4NzAsIDB4YWYsIDB4MmQsIDB4ZWIsIDB4MGUsIDB4ZmYsIDB4M2YsIDB4NDUsIDB4MTgsIDB4ZmYsIDB4NjQsIDB4M2MsCisJMHg1OSwgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGJueDJfQ1BfYjA5RndEYXRhWygweDg0LzQpICsgMV0gPSB7CiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAxYiwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwNiwKQEAgLTIwNjQsMTA5MSArMjA3OCwxMDc3IEBACiAJMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwKIAkweDAwMDAwMDAyLCAweDAwMDAwMDAyLCAweDAwMDAwMDAyLCAweDAwMDAwMDAyLCAweDAwMDAwMDAyLCAweDAwMDAwMDAyLAogCTB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDAgfTsKLXN0YXRpYyBjb25zdCB1MzIgYm54Ml9DUF9iMDlGd1JvZGF0YVsoMHgxNzgvNCkgKyAxXSA9IHsKLQkweDgwMDgwMTAwLCAweDgwMDgwMDgwLCAweDgwMDgwMDAwLCAweDA4MDAxNWEwLCAweDA4MDAxNWQ4LCAweDA4MDAxNjAwLAotCTB4MDgwMDE2MDAsIDB4MDgwMDE2MTQsIDB4MDgwMDE1YmMsIDB4MDgwMDE4YTQsIDB4MDgwMDE4NmMsIDB4MDgwMDE4ZjgsCi0JMHgwODAwMThmOCwgMHgwODAwMTk4MCwgMHgwODAwMThiNCwgMHg4MDA4MDI0MCwgMHg4MDA4MDEwMCwgMHg4MDA4MDA4MCwKLQkweDgwMDgwMDAwLCAweDA4MDAzMTQ4LCAweDA4MDAzMGI0LCAweDA4MDAzMTcwLCAweDA4MDAzMTk4LCAweDA4MDAzMWMwLAotCTB4MDgwMDMxZTQsIDB4MDgwMDMyMmMsIDB4MDgwMDMyMDgsIDB4MDgwMDMyNTAsIDB4MDgwMDMxMWMsIDB4MDgwMDMzNDQsCi0JMHgwODAwMzMzNCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzJhNCwgMHgwODAwMzJhNCwKLQkweDA4MDAzMGQwLCAweDA4MDAzMGQwLCAweDA4MDAzMzI0LCAweDA4MDAzMGQwLCAweDA4MDAzMGQwLCAweDA4MDAzMGQwLAotCTB4MDgwMDMwZDAsIDB4MDgwMDMzMTQsIDB4MDgwMDMwZDAsIDB4MDgwMDMwZDAsIDB4MDgwMDMwZDAsIDB4MDgwMDMwZDAsCi0JMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwKLQkweDA4MDAzMGQwLCAweDA4MDAzMGQwLCAweDA4MDAzMGQwLCAweDA4MDAzMGQwLCAweDA4MDAzMzA0LCAweDA4MDAzMGQwLAotCTB4MDgwMDMwZDAsIDB4MDgwMDMyZjQsIDB4MDgwMDMwZDAsIDB4MDgwMDMwZDAsIDB4MDgwMDMwZDAsIDB4MDgwMDMwZDAsCi0JMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwgMHgwODAwMzBkMCwKLQkweDA4MDAzMGQwLCAweDA4MDAzMGQwLCAweDA4MDAzMGQwLCAweDA4MDAzMGQwLCAweDA4MDAzMGQwLCAweDA4MDAzMGQwLAotCTB4MDgwMDMwZDAsIDB4MDgwMDMyZGMsIDB4MDgwMDMwZDAsIDB4MDgwMDMwZDAsIDB4MDgwMDMyY2MsIDB4MDgwMDMyYmMsCi0JMHgwODAwM2MwYywgMHgwODAwM2JlOCwgMHgwODAwM2JiYywgMHgwODAwM2I5YywgMHgwODAwM2I3YywgMHgwODAwM2IyNCwKLQkweDgwMDgwMTAwLCAweDgwMDgwMDgwLCAweDgwMDgwMDAwLCAweDgwMDgwMDgwLCAweDAwMDAwMDAwIH07CitzdGF0aWMgY29uc3QgdTMyIGJueDJfQ1BfYjA5RndSb2RhdGFbKDB4MTZjLzQpICsgMV0gPSB7CisJMHg4MDA4MDEwMCwgMHg4MDA4MDA4MCwgMHg4MDA4MDAwMCwgMHgwODAwMTc0NCwgMHgwODAwMTc0NCwgMHgwODAwMTc3YywKKwkweDA4MDAxNzdjLCAweDA4MDAxNzkwLCAweDA4MDAxNzYwLCAweDA4MDAxOWI4LCAweDA4MDAxOTg0LCAweDA4MDAxYTEwLAorCTB4MDgwMDFhMTAsIDB4MDgwMDFhOTgsIDB4MDgwMDE5YzgsIDB4ODAwODAyNDAsIDB4MDgwMDMyNjAsIDB4MDgwMDMxY2MsCisJMHgwODAwMzI4OCwgMHgwODAwMzJiMCwgMHgwODAwMzJkOCwgMHgwODAwMzJmYywgMHgwODAwMzM0NCwgMHgwODAwMzMyMCwKKwkweDA4MDAzMzY4LCAweDA4MDAzMjM0LCAweDA4MDAzNDVjLCAweDA4MDAzNDRjLCAweDA4MDAzMWU4LCAweDA4MDAzMWU4LAorCTB4MDgwMDMxZTgsIDB4MDgwMDMzYmMsIDB4MDgwMDMzYmMsIDB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsIDB4MDgwMDM0M2MsCisJMHgwODAwMzFlOCwgMHgwODAwMzFlOCwgMHgwODAwMzFlOCwgMHgwODAwMzFlOCwgMHgwODAwMzQyYywgMHgwODAwMzFlOCwKKwkweDA4MDAzMWU4LCAweDA4MDAzMWU4LCAweDA4MDAzMWU4LCAweDA4MDAzMWU4LCAweDA4MDAzMWU4LCAweDA4MDAzMWU4LAorCTB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsCisJMHgwODAwMzFlOCwgMHgwODAwMzQxYywgMHgwODAwMzFlOCwgMHgwODAwMzFlOCwgMHgwODAwMzQwYywgMHgwODAwMzFlOCwKKwkweDA4MDAzMWU4LCAweDA4MDAzMWU4LCAweDA4MDAzMWU4LCAweDA4MDAzMWU4LCAweDA4MDAzMWU4LCAweDA4MDAzMWU4LAorCTB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsIDB4MDgwMDMxZTgsCisJMHgwODAwMzFlOCwgMHgwODAwMzFlOCwgMHgwODAwMzFlOCwgMHgwODAwMzFlOCwgMHgwODAwMzNmNCwgMHgwODAwMzFlOCwKKwkweDA4MDAzMWU4LCAweDA4MDAzM2U0LCAweDA4MDAzM2Q0LCAweDA4MDAzZDZjLCAweDA4MDAzZDQwLCAweDA4MDAzZDBjLAorCTB4MDgwMDNjZTAsIDB4MDgwMDNjYzAsIDB4MDgwMDNjNzQsIDB4ODAwODAxMDAsIDB4ODAwODAwODAsIDB4ODAwODAwMDAsCisJMHg4MDA4MDA4MCwgMHgwMDAwMDAwMCB9OwogCiBzdGF0aWMgc3RydWN0IGZ3X2luZm8gYm54Ml9jcF9md18wOSA9IHsKLQkvKiBGaXJtd2FyZSB2ZXJzaW9uOiA0LjAuNSAqLworCS8qIEZpcm13YXJlIHZlcnNpb246IDQuNC4yMyAqLwogCS52ZXJfbWFqb3IJCQk9IDB4NCwKLQkudmVyX21pbm9yCQkJPSAweDAsCi0JLnZlcl9maXgJCQk9IDB4NSwKKwkudmVyX21pbm9yCQkJPSAweDQsCisJLnZlcl9maXgJCQk9IDB4MTcsCiAKLQkuc3RhcnRfYWRkcgkJCT0gMHgwODAwMDA3NCwKKwkuc3RhcnRfYWRkcgkJCT0gMHgwODAwMDA4MCwKIAogCS50ZXh0X2FkZHIJCQk9IDB4MDgwMDAwMDAsCi0JLnRleHRfbGVuCQkJPSAweDU3NzAsCisJLnRleHRfbGVuCQkJPSAweDU5MzgsCiAJLnRleHRfaW5kZXgJCQk9IDB4MCwKIAkuZ3pfdGV4dAkJCT0gYm54Ml9DUF9iMDlGd1RleHQsCiAJLmd6X3RleHRfbGVuCQkJPSBzaXplb2YoYm54Ml9DUF9iMDlGd1RleHQpLAogCi0JLmRhdGFfYWRkcgkJCT0gMHgwODAwNTkwMCwKKwkuZGF0YV9hZGRyCQkJPSAweDA4MDA1YWMwLAogCS5kYXRhX2xlbgkJCT0gMHg4NCwKIAkuZGF0YV9pbmRleAkJCT0gMHgwLAogCS5kYXRhCQkJCT0gYm54Ml9DUF9iMDlGd0RhdGEsCiAKLQkuc2Jzc19hZGRyCQkJPSAweDA4MDA1OTg4LAotCS5zYnNzX2xlbgkJCT0gMHg5OSwKKwkuc2Jzc19hZGRyCQkJPSAweDA4MDA1YjQ0LAorCS5zYnNzX2xlbgkJCT0gMHg5MSwKIAkuc2Jzc19pbmRleAkJCT0gMHgwLAogCi0JLmJzc19hZGRyCQkJPSAweDA4MDA1YTI4LAotCS5ic3NfbGVuCQkJPSAweDIwYywKKwkuYnNzX2FkZHIJCQk9IDB4MDgwMDViZDgsCisJLmJzc19sZW4JCQk9IDB4MTljLAogCS5ic3NfaW5kZXgJCQk9IDB4MCwKIAotCS5yb2RhdGFfYWRkcgkJCT0gMHgwODAwNTc3MCwKLQkucm9kYXRhX2xlbgkJCT0gMHgxNzgsCisJLnJvZGF0YV9hZGRyCQkJPSAweDA4MDA1OTM4LAorCS5yb2RhdGFfbGVuCQkJPSAweDE2YywKIAkucm9kYXRhX2luZGV4CQkJPSAweDAsCiAJLnJvZGF0YQkJCQk9IGJueDJfQ1BfYjA5RndSb2RhdGEsCiB9OwogCiBzdGF0aWMgdTggYm54Ml9SWFBfYjA5RndUZXh0W10gPSB7Ci0JMHhlYywgMHg1YiwgMHg3ZiwgMHg3MCwgMHgxYywgMHhmNSwgMHg3NSwgMHhmZiwgMHg3YywgMHhmNywgMHhmNiwgMHhhNCwKLQkweDk1LCAweDc0LCAweGJhLCAweDViLCAweDQ5LCAweDI3LCAweGY5LCAweDE0LCAweDhjLCAweGI1LCAweDhiLCAweDU2LAotCTB4MjcsIDB4NjEsIDB4MTksIDB4NzcsIDB4NGYsIDB4M2EsIDB4ZDksIDB4NGEsIDB4NjYsIDB4MWIsIDB4MmUsIDB4YjYsCi0JMHg2MywgMHhlNCwgMHg4MSwgMHg4MiwgMHhiMCwgMHgwOSwgMHgzMSwgMHg1MywgMHgyNiwgMHhhOCwgMHhiNiwgMHg2MywKLQkweGM0LCAweDhmLCAweDM0LCAweDI2LCAweDYxLCAweDA2LCAweDExLCAweDY4LCAweGQ4LCAweDQ4LCAweDM2LCAweGE2LAotCTB4ZjYsIDB4OWUsIDB4ZDYsIDB4MzYsIDB4MTIsIDB4ZTAsIDB4OTksIDB4NzQsIDB4MjIsIDB4NjQsIDB4NTksIDB4MzYsCi0JMHhlNCwgMHhhNCwgMHgzMywgMHg5MCwgMHgxZiwgMHg2NiwgMHg1YSwgMHg2YSwgMHg4MSwgMHhmOSwgMHg2MSwgMHg4OCwKLQkweDBkLCAweDg0LCAweDQyLCAweDAyLCAweDMzLCAweDk5LCAweDg5LCAweGY5LCAweDExLCAweGM3LCAweDY2LCAweDY4LAotCTB4NTAsIDB4NWEsIDB4OTIsIDB4OGEsIDB4ODksIDB4ZWEsIDB4NmYsIDB4ZGYsIDB4YmIsIDB4OTMsIDB4ZjgsIDB4NjEsCi0JMHgzYSwgMHg0ZCwgMHgzYiwgMHhkMywgMHgzZiwgMHhmNywgMHhjZCwgMHhkYywgMHg2OCwgMHhmNywgMHhmYiwgMHg3ZCwKLQkweGVmLCAweDdkLCAweGRmLCAweGVmLCAweGY3LCAweGJlLCAweDNiLCAweGEzLCAweDViLCAweDIzLCAweDI4LCAweGM3LAotCTB4MWMsIDB4NTQsIDB4ZDIsIDB4MmYsIDB4YmQsIDB4YTUsIDB4ZWYsIDB4NWIsIDB4MWQsIDB4NGIsIDB4ZWQsIDB4YTUsCi0JMHhmYywgMHgxZSwgMHgwYSwgMHg0MywgMHhlNSwgMHhiZiwgMHgwMiwgMHgwMSwgMHgwNCwgMHgxMCwgMHg0MCwgMHgwMCwKLQkweDAxLCAweDA0LCAweDEwLCAweDQwLCAweDAwLCAweDAxLCAweDA0LCAweDEwLCAweDQwLCAweDAwLCAweDAxLCAweDA0LAotCTB4MTAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MTAsIDB4NDAsCi0JMHgwMCwgMHgwMSwgMHgwNCwgMHgxMCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNCwgMHgxMCwgMHg0MCwgMHgwMCwgMHgwMSwKLQkweDA0LCAweDEwLCAweDQwLCAweDAwLCAweDAxLCAweDA0LCAweDEwLCAweDQwLCAweDAwLCAweDAxLCAweDA0LCAweDEwLAotCTB4NDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4ZmMsIDB4N2YsIDB4NDIsIDB4MDgsCi0JMHhkMCwgMHhmOSwgMHg2ZiwgMHhlNSwgMHhkYywgMHgwZiwgMHg5YSwgMHhlMiwgMHg4YywgMHg3YywgMHg2NywgMHg4NSwKLQkweDA1LCAweDJkLCAweGU0LCAweGM0LCAweGVmLCAweGQ4LCAweDY4LCAweDAxLCAweDk5LCAweDVjLCAweGFiLCAweGIxLAotCTB4MTIsIDB4ZmYsIDB4MjksIDB4ZGQsIDB4YjgsIDB4MGEsIDB4NWUsIDB4M2YsIDB4ZGYsIDB4OTksIDB4ZmQsIDB4YzEsCi0JMHgxMywgMHhjYiwgMHhjZCwgMHhlOSwgMHg5MSwgMHgxMCwgMHgzNCwgMHhkZCwgMHg3OSwgMHgzOSwgMHhhNSwgMHgyNywKLQkweGExLCAweDJkLCAweDI0LCAweDlhLCAweGVmLCAweDM3LCAweDZmLCAweGFiLCAweDQ2LCAweDc0LCAweDllLCAweDE3LAotCTB4NWMsIDB4YzUsIDB4OTEsIDB4NzIsIDB4YmYsIDB4MmQsIDB4ZjEsIDB4YWMsIDB4ZWQsIDB4OGEsIDB4YWUsIDB4MzQsCi0JMHhkYywgMHg5MCwgMHg3MywgMHg1OCwgMHhkYywgMHhlMCwgMHg5ZCwgMHg5NSwgMHg0NiwgMHhiOCwgMHg3OCwgMHhiMiwKLQkweDNhLCAweGExLCAweDIxLCAweGJjLCAweDFmLCAweGJhLCAweGVhLCAweDI4LCAweDA4LCAweDViLCAweGU1LCAweDI4LAotCTB4NzksIDB4YjAsIDB4MDIsIDB4ZTEsIDB4MDcsIDB4MTMsIDB4MjgsIDB4OWQsIDB4MzgsIDB4MjQsIDB4N2EsIDB4NDYsCi0JMHgzNCwgMHg5YywgMHgwYywgMHgxZCwgMHgxNiwgMHg5YiwgMHg3MiwgMHhlOCwgMHgwOSwgMHgzYiwgMHgzMywgMHg1NywKLQkweDhjLCAweDEyLCAweDVkLCAweGE2LCAweGYwLCAweGZmLCAweDI1LCAweDUzLCAweDU3LCAweDhjLCAweGU1LCAweGEwLAotCTB4ODcsIDB4MWMsIDB4MjgsIDB4YWEsIDB4ZjMsIDB4MzQsIDB4M2QsIDB4MzMsIDB4ZGUsIDB4Y2MsIDB4MTUsIDB4ZmIsCi0JMHg3MiwgMHhhNywgMHhlNSwgMHgxMywgMHhjZCwgMHg3MSwgMHgxYywgMHhjOSwgMHhlYiwgMHgzOCwgMHg5NCwgMHhmZiwKLQkweDI1LCAweGM5LCAweDYxLCAweGJhLCAweDJlLCAweDM0LCAweDU3LCAweDc1LCAweDVjLCAweDZjLCAweDRiLCAweDg3LAotCTB4MzEsIDB4YmUsIDB4ZWIsIDB4YWMsIDB4MGMsIDB4NTksIDB4YTYsIDB4MDEsIDB4YzUsIDB4ZDIsIDB4OGYsIDB4ODIsCi0JMHhmMCwgMHg3YywgMHhjMiwgMHhmMywgMHhjMywgMHgxOCwgMHgxZCwgMHg3OSwgMHhiMywgMHgxYSwgMHhlNSwgMHgwOSwKLQkweDNjLCAweGQxLCAweGNjLCAweGY0LCAweDRjLCAweGNiLCAweDNjLCAweDQyLCAweGIxLCAweDc5LCAweGZhLCAweDEyLAotCTB4YTIsIDB4N2YsIDB4MjYsIDB4MGQsIDB4OGMsIDB4ZWQsIDB4ZWEsIDB4MjYsIDB4NTIsIDB4ODksIDB4MDEsIDB4YmIsCi0JMHgxNCwgMHgxYiwgMHg3NCwgMHhiOCwgMHg2NSwgMHgwZSwgMHhmMywgMHg5YSwgMHhlNywgMHhlMywgMHgwYSwgMHg2MywKLQkweDIyLCAweGFhLCAweDE3LCAweGY5LCAweDQwLCAweDY4LCAweDE2LCAweGRjLCAweGQyLCAweDczLCAweGY2LCAweDRmLAotCTB4ZTcsIDB4ZTYsIDB4ZjcsIDB4ZWYsIDB4YTEsIDB4NzMsIDB4MzQsIDB4ZGEsIDB4ZWYsIDB4YzUsIDB4NGYsIDB4ZjIsCi0JMHg5YiwgMHhmMCwgMHhlMywgMHhmYywgMHhiNSwgMHg3OCwgMHgyYywgMHhkZiwgMHg0ZCwgMHhlNywgMHhkZSwgMHg0YSwKLQkweGU3LCAweDZlLCAweGMxLCAweDNmLCAweGU3LCAweDZmLCAweGM2LCAweDRmLCAweGYzLCAweDNkLCAweGY4LCAweDUxLAotCTB4N2UsIDB4M2QsIDB4MWUsIDB4Y2QsIDB4NWYsIDB4ODUsIDB4NDcsIDB4ZjIsIDB4MjgsIDB4YzgsIDB4NzAsIDB4M2EsCi0JMHhkZCwgMHgyMiwgMHg3ZSwgMHhlZSwgMHg5NSwgMHg0MSwgMHhkZCwgMHhiZCwgMHgxNSwgMHg1MywgMHhiOSwgMHgzMCwKLQkweGMyLCAweGJiLCAweDI1LCAweDc2LCAweGQ5LCAweGU2LCAweDAzLCAweDQwLCAweGIzLCAweDFlLCAweDg2LCAweGMwLAotCTB4NGEsIDB4ZGIsIDB4M2MsIDB4MDgsIDB4N2MsIDB4MDEsIDB4M2QsIDB4NzEsIDB4ZjMsIDB4MTAsIDB4NTAsIDB4MjcsCi0JMHg1ZSwgMHgxOSwgMHhhYSwgMHgxMywgMHgyNywgMHg4NiwgMHg1NCwgMHhmMSwgMHhhMiwgMHgyNywgMHgxMCwgMHg3MywKLQkweDEwLCAweDc5LCAweDIxLCAweDJkLCAweGU1LCAweGE1LCAweDZkLCAweDUyLCAweGU2LCAweDUyLCAweDU2LCAweGQ3LAotCTB4NGIsIDB4YzIsIDB4YjQsIDB4NzcsIDB4ODgsIDB4NDUsIDB4MzAsIDB4NmEsIDB4Y2QsIDB4Y2MsIDB4OGQsIDB4NDIsCi0JMHg3MywgMHhjYiwgMHg4OSwgMHhmZiwgMHg5YSwgMHgwZSwgMHhjMCwgMHhkYSwgMHg2ZCwgMHg5MCwgMHgxZiwgMHg1OCwKLQkweGM3LCAweDZkLCAweGY4LCAweDdhLCAweDIxLCAweDI2LCAweGJhLCAweDUxLCAweDYzLCAweGFkLCAweGM0LCAweGI3LAotCTB4YmIsIDB4NmQsIDB4OGMsIDB4ZTQsIDB4YTEsIDB4NTUsIDB4MzksIDB4MWYsIDB4MjAsIDB4MzUsIDB4MjgsIDB4NjAsCi0JMHg5MywgMHhiZiwgMHgwNSwgMHgzZCwgMHhkYiwgMHhiOSwgMHgyNywgMHg2YiwgMHg4YSwgMHhmZSwgMHgyNiwgMHhkOSwKLQkweDdkLCAweDkyLCAweGRkLCAweDI3LCAweGQ5LCAweDdkLCAweGQyLCAweGNiLCAweDI3LCAweGJkLCAweDdjLCAweGQyLAotCTB4YzEsIDB4MjcsIDB4ZGQsIDB4N2MsIDB4ZDIsIDB4YzMsIDB4MjcsIDB4M2QsIDB4N2MsIDB4ZDIsIDB4ZDEsIDB4NjcsCi0JMHg1ZiwgMHhmNSwgMHg5MSwgMHgwZCwgMHgyMiwgMHhmOCwgMHhhNSwgMHhiNywgMHgxMCwgMHgxZiwgMHg3OCwgMHhlNywKLQkweGUzLCAweDgzLCAweGI1LCAweDNhLCAweDVlLCAweDI3LCAweDE5LCAweDE1LCAweGViLCAweGZmLCAweGNhLCAweGUzLAotCTB4YTcsIDB4MTEsIDB4ZjIsIDB4OTEsIDB4ZjEsIDB4YmYsIDB4M2YsIDB4ZGIsIDB4MjQsIDB4OGQsIDB4ZTYsIDB4NjksCi0JMHg5NywgMHhlMCwgMHg5NCwgMHhmNywgMHhiNiwgMHgyYywgMHg1OSwgMHhjMCwgMHhlNywgMHg3ZSwgMHgxMSwgMHg3MiwKLQkweDA4LCAweDU4LCAweDM0LCAweDJjLCAweGU1LCAweDg3LCAweGVkLCAweGJmLCAweDk2LCAweDZmLCAweDdjLCAweDk1LAotCTB4ZjksIDB4MzksIDB4NzgsIDB4NmIsIDB4NDgsIDB4NDEsIDB4ODgsIDB4ZDYsIDB4MmUsIDB4YjEsIDB4ZGYsIDB4OTAsCi0JMHhkNywgMHhjNywgMHgxOSwgMHhlZiwgMHg4ZiwgMHgxMSwgMHg5NCwgMHhiMywgMHhhZCwgMHhhMCwgMHhkNSwgMHgzOCwKLQkweGVhLCAweDFkLCAweGRmLCAweDRlLCAweGMyLCAweDhkLCAweDNhLCAweGFhLCAweDc4LCAweDM1LCAweDZiLCAweDYwLAotCTB4ODEsIDB4OTMsIDB4NDEsIDB4YTUsIDB4NjMsIDB4ZWQsIDB4YmEsIDB4NWYsIDB4NjksIDB4ZWQsIDB4YWIsIDB4NDYsCi0JMHhlNiwgMHhjMiwgMHgxOCwgMHg2YywgMHhlYywgMHhjZiwgMHhhYiwgMHhlMiwgMHg3OCwgMHhiNiwgMHgxMiwgMHhkNSwKLQkweGJiLCAweGFkLCAweGY1LCAweDU5LCAweGExLCAweGEwLCAweGE3LCAweDM2LCAweDgzLCAweGIxLCAweGI0LCAweDY5LAotCTB4OGMsIDB4YzAsIDB4YzAsIDB4ZmEsIDB4MzYsIDB4MDUsIDB4NTgsIDB4ZTAsIDB4ZTIsIDB4ZWUsIDB4YjQsIDB4NjksCi0JMHhiYiwgMHhlOCwgMHhjNywgMHg1NCwgMHhkYywgMHhjNiwgMHg3OCwgMHg1ZSwgMHhhMywgMHhmYywgMHg3MCwgMHg3MSwKLQkweDdkLCAweDVhLCAweDgzLCAweGRjLCAweDk1LCAweGMxLCAweGE5LCAweGY2LCAweDUyLCAweDRjLCAweDc1LCAweDczLAotCTB4OWMsIDB4YTgsIDB4NzQsIDB4ZjYsIDB4NzYsIDB4MjgsIDB4ZDUsIDB4ZDUsIDB4ZTQsIDB4OWIsIDB4YjQsIDB4MDgsCi0JMHg1NywgMHgxNywgMHg1MiwgMHg5NCwgMHhkNiwgMHgyMSwgMHhmZSwgMHgzNSwgMHhjZCwgMHgzMiwgMHg3YywgMHg0ZSwKLQkweDFjLCAweDFmLCAweDhlLCAweGEyLCAweDdjLCAweDU4LCAweGMzLCAweDBmLCAweDc3LCAweGFiLCAweDU4LCAweDQzLAotCTB4M2UsIDB4YmUsIDB4M2YsIDB4YTUsIDB4MWEsIDB4MzcsIDB4MGEsIDB4MDcsIDB4NjMsIDB4NzksIDB4MTUsIDB4ZjEsCi0JMHg2YywgMHgzZCwgMHg4YywgMHgyYSwgMHgwZCwgMHg4YiwgMHhiMiwgMHgyZSwgMHhkZSwgMHgyNiwgMHhkZSwgMHg3ZCwKLQkweGM0LCAweDNiLCAweGQ2LCAweGFlLCAweGUzLCAweDY0LCAweDZkLCAweGQxLCAweGJmLCAweGI3LCAweDc4LCAweDhkLAotCTB4ZWUsIDB4NmUsIDB4YTUsIDB4MDQsIDB4MjgsIDB4ODEsIDB4YWIsIDB4MzksIDB4NjksIDB4ZGMsIDB4ZTYsIDB4MzUsCi0JMHg5MiwgMHgxZSwgMHhkNywgMHg2MCwgMHg0NSwgMHg4OSwgMHg4NiwgMHgwZCwgMHg4MywgMHhiYywgMHhiNiwgMHgwYSwKLQkweDk4LCAweDU4LCAweDUwLCAweDg5LCAweDcyLCAweGI2LCAweDAxLCAweGU3LCAweGY1LCAweDRhLCAweDdhLCAweGU2LAotCTB4NzgsIDB4YjgsIDB4MzcsIDB4Y2UsIDB4ZjYsIDB4NzcsIDB4OTUsIDB4ZmYsIDB4OTAsIDB4OTksIDB4MzgsIDB4ZTMsCi0JMHgxNSwgMHg3MywgMHhlNSwgMHg2OCwgMHgzYSwgMHg4ZCwgMHhkYiwgMHhiZCwgMHhjNiwgMHhjYywgMHg1ZSwgMHhhNSwKLQkweDA2LCAweDA4LCAweDliLCAweDg2LCAweGExLCAweDQwLCAweDhiLCAweDNiLCAweDQ4LCAweDBkLCAweDUxLCAweGRjLAotCTB4ZGMsIDB4NWIsIDB4ODgsIDB4MWIsIDB4YTQsIDB4ZGEsIDB4NzMsIDB4OWMsIDB4OWYsIDB4OWEsIDB4YWIsIDB4MTMsCi0JMHg3ZSwgMHhjMywgMHhiMiwgMHgyNiwgMHhmYywgMHhmMSwgMHg1ZSwgMHhjNiwgMHg1MywgMHhmMSwgMHgzYywgMHgzZCwKLQkweDlmLCAweGQ5LCAweGY3LCAweGU2LCAweDVjLCAweDBkLCAweGY5LCAweDg3LCAweDgyLCAweDdmLCAweDBkLCAweDY1LAotCTB4ZmUsIDB4NmMsIDB4MWIsIDB4ZDcsIDB4N2IsIDB4OGQsIDB4MzMsIDB4ZGIsIDB4MTUsIDB4ZjIsIDB4ZTEsIDB4NzksCi0JMHgxMSwgMHg5NCwgMHg1MSwgMHgxZCwgMHgwYSwgMHgxMywgMHhhZiwgMHhmZCwgMHhkZSwgMHgyYywgMHhkNiwgMHhiNiwKLQkweDk5LCAweDg3LCAweGY5LCAweGZmLCAweGNlLCAweDQ2LCAweGFkLCAweDIyLCAweGZmLCAweDBiLCAweDcyLCAweDM2LAotCTB4MWUsIDB4Y2EsIDB4ZGIsIDB4ZDgsIDB4NDgsIDB4NzIsIDB4ZGMsIDB4OGEsIDB4MzcsIDB4ODEsIDB4ZmEsIDB4YzUsCi0JMHhjNiwgMHg2OSwgMHhlNSwgMHgyZCwgMHhlOSwgMHg1ZSwgMHhjNSwgMHhmYywgMHgxNiwgMHhlMiwgMHg3NCwgMHg3NSwKLQkweDYzLCAweGNmLCAweDY5LCAweGM1LCAweDFjLCAweGI5LCAweDQ3LCAweDYxLCAweDViLCAweDI5LCAweGY4LCAweGFiLAotCTB4YjYsIDB4MzQsIDB4NDYsIDB4YWEsIDB4NzQsIDB4NWMsIDB4ZDMsIDB4YTYsIDB4YjksIDB4OGIsIDB4NDgsIDB4YTYsCi0JMHg5NywgMHg5NywgMHg2YiwgMHhhOCwgMHhkYiwgMHg5MywgMHhjMSwgMHg2YiwgMHg2ZCwgMHhhZiwgMHg2MiwgMHg2NCwKLQkweDJkLCAweGRiLCAweDgxLCAweGU5LCAweDU4LCAweGU2LCAweDA0LCAweGFhLCAweGFkLCAweDMyLCAweDU0LCAweDhmLAotCTB4ODYsIDB4MTEsIDB4ZGIsIDB4NzMsIDB4NTYsIDB4MjYsIDB4MmMsIDB4NWUsIDB4YjcsIDB4YjYsIDB4Y2MsIDB4MDgsCi0JMHg5NiwgMHgzOSwgMHg4YywgMHhlOCwgMHhlOCwgMHhlNywgMHhhMSwgMHg1YSwgMHg2NiwgMHgwYiwgMHhmMCwgMHg4ZCwKLQkweDM4LCAweGUzLCAweDk2LCAweDU4LCAweGYzLCAweGIyLCAweDBiLCAweDVjLCAweGZhLCAweDA1LCAweDgxLCAweDFiLAotCTB4NTMsIDB4NGYsIDB4Y2EsIDB4NGMsIDB4MmQsIDB4ZDMsIDB4M2MsIDB4NDYsIDB4ZWIsIDB4MmMsIDB4NDMsIDB4ZDksCi0JMHg0YywgMHgwNiwgMHg3NSwgMHg0NCwgMHgzMywgMHg4ZiwgMHgxNywgMHg0MSwgMHhlZiwgMHg5ZSwgMHhhMiwgMHgwYywKLQkweDZmLCAweDJjLCAweGM3LCAweDYzLCAweDFhLCAweDNhLCAweGQxLCAweGVjLCAweDdmLCAweDBmLCAweGFmLCAweDJkLAotCTB4NjMsIDB4OWEsIDB4ZWYsIDB4NGQsIDB4ZWYsIDB4NmYsIDB4ZGIsIDB4NDksIDB4MzYsIDB4ZTEsIDB4N2EsIDB4N2EsCi0JMHhhZSwgMHg1ZiwgMHg3OCwgMHhiZiwgMHhiYiwgMHg5NiwgMHhlYywgMHhkNSwgMHgwMiwgMHg5MSwgMHhhMCwgMHgzNSwKLQkweDhlLCAweGUxLCAweGRkLCAweGQyLCAweDU4LCAweDU3LCAweGY0LCAweDRiLCAweDI5LCAweGYxLCAweDNiLCAweDkzLAotCTB4ZWUsIDB4NDQsIDB4NjMsIDB4NTYsIDB4ODUsIDB4ZjQsIDB4MWEsIDB4ZWQsIDB4NWYsIDB4ODcsIDB4NzYsIDB4YzgsCi0JMHhhOSwgMHg2YiwgMHg3OSwgMHhhZiwgMHg1MSwgMHgzZiwgMHgxYSwgMHgxMiwgMHg1OCwgMHhhMSwgMHg5YSwgMHhkMywKLQkweDNkLCAweDQ4LCAweGUwLCAweDIwLCAweGQ1LCAweDlhLCAweDdhLCAweDQ3LCAweGE3LCAweGRhLCAweDEzLCAweGE3LAotCTB4MWEsIDB4NjQsIDB4ODgsIDB4ZTYsIDB4ZmIsIDB4NmQsIDB4MmMsIDB4Y2UsIDB4NWUsIDB4OGIsIDB4OGIsIDB4ODcsCi0JMHgxZCwgMHgxYywgMHhmNiwgMHg2ZCwgMHhmYywgMHhkMCwgMHg5NywgMHhmMiwgMHg5NCwgMHgyZCwgMHhlNSwgMHhmYiwKLQkweGVkLCAweDY2LCAweGVmLCAweDMxLCAweDZhLCAweDBiLCAweDRiLCAweDk3LCAweGI3LCAweGY2LCAweGM0LCAweDQyLAotCTB4MmEsIDB4ZDksIDB4YTcsIDB4YzksIDB4YjgsIDB4NTksIDB4OTgsIDB4ODksIDB4NDksIDB4NjEsIDB4NTMsIDB4Y2MsCi0JMHg3NSwgMHg5MSwgMHhlZCwgMHgwZCwgMHhlYywgMHhjYiwgMHhiNywgMHhlMCwgMHhlMSwgMHhiYywgMHg0NSwgMHhiZiwKLQkweDI1LCAweDE0LCAweDJiLCAweDY5LCAweGFhLCAweDZiLCAweGFjLCAweGFiLCAweDhlLCAweGIxLCAweDY2LCAweGNhLAotCTB4MGQsIDB4NWYsIDB4YzEsIDB4NDEsIDB4OWIsIDB4NzIsIDB4YTAsIDB4OGEsIDB4NzAsIDB4ZmQsIDB4YjMsIDB4ZTQsCi0JMHgzZiwgMHgwZCwgMHgyZCwgMHhiYiwgMHgzMywgMHgyOCwgMHg0YiwgMHhkNSwgMHhjMCwgMHhiOCwgMHhkMiwgMHhjMiwKLQkweDk4LCAweGFmLCAweGI5LCAweDYxLCAweDhhLCAweGZiLCAweDUxLCAweGVmLCAweDYxLCAweDdjLCAweDRkLCAweDhmLAotCTB4YTMsIDB4OWMsIDB4ZWMsIDB4YjcsIDB4YmUsIDB4MmQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4YmQsIDB4MDgsIDB4ZWEsCi0JMHhhZCwgMHhlNywgMHg1MCwgMHg1ZiwgMHg1ZCwgMHg4OSwgMHg5MiwgMHhjNSwgMHg0ZiwgMHg2MiwgMHg0YSwgMHg4ZiwKLQkweGEyLCAweDk0LCAweDdhLCAweDQ3LCAweDAzLCAweGUxLCAweDM0LCAweDkwLCAweGFmLCAweDZhLCAweDJkLCAweDhiLAotCTB4NzgsIDB4MGEsIDB4NTgsIDB4NGQsIDB4ODQsIDB4NGIsIDB4MzksIDB4OTUsIDB4MjAsIDB4ZGQsIDB4YzMsIDB4Y2IsCi0JMHhlMywgMHhjOCwgMHg5MywgMHhmYywgMHg5MywgMHg5ZSwgMHg5NCwgMHg5MSwgMHhiNCwgMHhkOSwgMHhlYiwgMHg1MywKLQkweDdlLCAweDRlLCAweGU0LCAweDNhLCAweDMxLCAweDk5LCAweGJmLCAweDljLCAweGVhLCAweGJhLCAweDhkLCAweDdkLAotCTB4OWUsIDB4ODMsIDB4NTEsIDB4NWYsIDB4NWQsIDB4ZWYsIDB4YzEsIDB4ZWMsIDB4YmUsIDB4MDksIDB4NjksIDB4M2MsCi0JMHg0YywgMHhmMSwgMHgzMywgMHhlZSwgMHg5YiwgMHhjNiwgMHg1MywgMHgyMSwgMHgwZCwgMHhjNywgMHhlYywgMHgwYSwKLQkweDkyLCAweDkzLCAweDcyLCAweDk3LCAweDc0LCAweDdhLCAweGRjLCAweGJiLCAweDBmLCAweDU2LCAweDBkLCAweGRiLAotCTB4OWYsIDB4ZmQsIDB4OTQsIDB4YzYsIDB4MDEsIDB4YmYsIDB4MTAsIDB4ZGYsIDB4OTcsIDB4NmEsIDB4NzAsIDB4NjEsCi0JMHg3NywgMHhiMCwgMHg2ZiwgMHhkYywgMHhlOSwgMHg3MCwgMHg1YiwgMHhiMSwgMHg5ZSwgMHg3NiwgMHg3NywgMHhkOCwKLQkweDI4LCAweDFkLCAweGVjLCAweDI0LCAweGJlLCAweDhkLCAweGY2LCAweDViLCAweGI4LCAweDA5LCAweDUzLCAweDA5LAotCTB4MTcsIDB4NGIsIDB4MjksIDB4ZmUsIDB4NTUsIDB4ZTcsIDB4ODEsIDB4ZDQsIDB4NTYsIDB4Y2YsIDB4OTUsIDB4MzEsCi0JMHhjYiwgMHhlYSwgMHg3ZCwgMHg0OSwgMHhkYywgMHg4NSwgMHhlMywgMHgyOSwgMHhhZSwgMHhlZiwgMHgyYSwgMHhlNSwKLQkweGJlLCAweDhlLCAweDlkLCAweGY2LCAweDJlLCAweDljLCAweGM4LCAweDdkLCAweDA5LCAweDNkLCAweDU1LCAweDY2LAotCTB4Y2IsIDB4ODAsIDB4YjgsIDB4MDksIDB4ODcsIDB4NzcsIDB4NWQsIDB4MGMsIDB4N2MsIDB4OTUsIDB4ZjMsIDB4ODQsCi0JMHg3NCwgMHhiMywgMHg2ZSwgMHhjMiwgMHg5MSwgMHg5MSwgMHhlZiwgMHhlMCwgMHg5OSwgMHhhMSwgMHg3MiwgMHgzYywKLQkweDZlLCAweDU1LCAweGEzLCAweDdlLCAweGJjLCAweDc4LCAweGNlLCAweDk3LCAweDNiLCAweDM0LCAweDhjLCAweDUyLAotCTB4NGUsIDB4NWYsIDB4NjIsIDB4YWIsIDB4MzgsIDB4MTksIDB4ZTcsIDB4MWEsIDB4NDIsIDB4YjEsIDB4ZDYsIDB4ZjYsCi0JMHgyZCwgMHhhYSwgMHgzNywgMHg4NSwgMHgxNiwgMHg4YywgMHg0ZCwgMHg2OSwgMHgwMywgMHg5ZSwgMHg5NywgMHhhMSwKLQkweDNhLCAweDU4LCAweDg2LCAweDNkLCAweDU1LCAweDEwLCAweDFiLCAweGE5LCAweDk3LCAweGZkLCAweGFkLCAweGQ3LAotCTB4ZDgsIDB4M2IsIDB4YTgsIDB4NTQsIDB4NjMsIDB4YTQsIDB4M2UsIDB4NDMsIDB4YmUsIDB4MTAsIDB4YTgsIDB4YjMsCi0JMHgwYywgMHg2YywgMHhjYiwgMHg1MSwgMHgyNSwgMHhjZCwgMHhhOSwgMHhmOCwgMHg2ZSwgMHhhZSwgMHgxZCwgMHgyMywKLQkweDc1LCAweDRjLCAweDdiLCAweDExLCAweGE2LCAweDBhLCAweDdmLCAweGMzLCAweDM4LCAweDU5LCAweDZkLCAweDI2LAotCTB4NDAsIDB4MzYsIDB4MWIsIDB4ZjMsIDB4NTUsIDB4MGMsIDB4ZGIsIDB4YzMsIDB4NjcsIDB4NDcsIDB4ZDYsIDB4OWEsCi0JMHg3YSwgMHgwZiwgMHhlNSwgMHg1YiwgMHhhOCwgMHgxMCwgMHhiNywgMHhmYywgMHgwYywgMHg3YywgMHhkMywgMHhmYiwKLQkweGJkLCAweGZjLCAweGEwLCAweDcwLCAweGE2LCAweGNhLCAweGY5LCAweDNmLCAweGY1LCAweDQ2LCAweGU4LCAweDhjLAotCTB4MTQsIDB4YTUsIDB4Y2MsIDB4ZmYsIDB4ZjYsIDB4NjgsIDB4ZjEsIDB4N2YsIDB4NDYsIDB4N2YsIDB4Y2MsIDB4YjgsCi0JMHgxOSwgMHg4MCwgMHhlMywgMHg2MCwgMHhjMSwgMHgyNywgMHg2MiwgMHg3ZSwgMHhiZSwgMHg4ZSwgMHg5ZiwgMHgxYiwKLQkweGQzLCAweGM1LCAweGZhLCAweGEwLCAweDJmLCAweDYzLCAweGY5LCAweGU2LCAweGYzLCAweGFmLCAweDFhLCAweDc1LAotCTB4ZTMsIDB4NGQsIDB4MjgsIDB4ZGIsIDB4YzMsIDB4ZWYsIDB4YmMsIDB4MmUsIDB4NzAsIDB4NDEsIDB4MDcsIDB4ZTcsCi0JMHg1ZSwgMHgxMywgMHg5NCwgMHhkMSwgMHg0ZCwgMHhkMSwgMHg2MiwgMHg3ZCwgMHg5ZSwgMHhhZiwgMHgxYiwgMHg3ZiwKLQkweDM3LCAweDc3LCAweDZlLCAweDYxLCAweDE2LCAweGEwLCAweGY3LCAweDYyLCAweDdkLCAweGZkLCAweDZlLCAweDlhLAotCTB4OWYsIDB4OTksIDB4YTYsIDB4MGMsIDB4YWYsIDB4ZWQsIDB4MzMsIDB4ZWQsIDB4MTEsIDB4NjUsIDB4MzksIDB4YzksCi0JMHhjMiwgMHhmOSwgMHhjYSwgMHg3OSwgMHg3YiwgMHhjNywgMHgxYywgMHgwZCwgMHhlNSwgMHg4MiwgMHg3ZiwgMHg1MCwKLQkweGUyLCAweDFhLCAweGU2LCAweDM3LCAweDRmLCAweGRmLCAweDg0LCAweDkyLCAweDhmLCAweGNlLCAweDU1LCAweGYxLAotCTB4NTQsIDB4ZmEsIDB4ZGMsIDB4NzMsIDB4YWYsIDB4OTYsIDB4ZTUsIDB4NmIsIDB4YWIsIDB4MjksIDB4ZmUsIDB4NmEsCi0JMHhhMSwgMHgyZSwgMHhhNiwgMHgwMSwgMHg0MCwgMHhhZiwgMHg0MywgMHgwNSwgMHhlNSwgMHg3MywgMHhjOCwgMHhiYSwKLQkweDUyLCAweDg2LCAweGFlLCAweGU2LCAweGY4LCAweGQ1LCAweGRjLCAweDg4LCAweDczLCAweDFlLCAweDA2LCAweDc3LAotCTB4M2YsIDB4NDEsIDB4YmUsIDB4OGYsIDB4NzIsIDB4OWMsIDB4OTIsIDB4ZmYsIDB4Y2YsIDB4NDMsIDB4ZjYsIDB4YzEsCi0JMHg4NiwgMHgyOCwgMHhlYiwgMHhiYiwgMHhiZSwgMHgwZCwgMHg2ZSwgMHgwMywgMHhkNSwgMHhmMiwgMHhkZiwgMHhkYywKLQkweGRmLCAweDJiLCAweDQ3LCAweGJhLCAweDc1LCAweDNjLCAweDliLCAweDVlLCAweDQ5LCAweGViLCAweDFjLCAweDY3LAotCTB4MzYsIDB4N2UsIDB4ZTQsIDB4NjksIDB4YjgsIDB4NmQsIDB4MzAsIDB4NDEsIDB4NzIsIDB4NzIsIDB4MGQsIDB4MmQsCi0JMHg5YiwgMHgzOSwgMHhhOSwgMHhkOCwgMHg3OCwgMHg4YywgMHg2MiwgMHhmNCwgMHgxMSwgMHg5ZiwgMHg2ZCwgMHhhNSwKLQkweGUyLCAweDgyLCAweGI2LCAweDk1LCAweGIyLCAweGI0LCAweDhlLCAweGUzLCAweDdlLCAweDMxLCAweGQxLCAweGU4LAotCTB4YzQsIDB4M2IsIDB4MGEsIDB4ZGQsIDB4ZmEsIDB4NGIsIDB4NzksIDB4NjgsIDB4MmQsIDB4M2YsIDB4NWYsIDB4NDgsCi0JMHg2YiwgMHg3NSwgMHhmNCwgMHhmNywgMHgyZiwgMHg2NCwgMHhjNSwgMHg2NywgMHhlNCwgMHhkMCwgMHhmZiwgMHgzYiwKLQkweDM5LCAweDI4LCAweDFmLCAweDRjLCAweDdiLCAweDMzLCAweDVhLCAweDY5LCAweDRlLCAweDUyLCAweDkxLCAweGExLAotCTB4YWUsIDB4MzksIDB4NGUsIDB4YjEsIDB4YjEsIDB4OWQsIDB4N2EsIDB4ZjQsIDB4NmYsIDB4NjgsIDB4MTYsIDB4ZGMsCi0JMHg1NiwgMHg5OCwgMHhiNywgMHgwYSwgMHhlMywgMHg1YiwgMHg2MSwgMHg5ZSwgMHhkYiwgMHg1MCwgMHg5YywgMHhjYiwKLQkweDM0LCAweGQ1LCAweGUyLCAweDU5LCAweDZkLCAweDdlLCAweDhmLCAweDZkLCAweGRkLCAweDg1LCAweDBkLCAweDQzLAotCTB4NTIsIDB4NmUsIDB4YjUsIDB4ZTMsIDB4YzQsIDB4YTMsIDB4MWEsIDB4NWIsIDB4YWQsIDB4MmUsIDB4ZjQsIDB4MGUsCi0JMHg4MSwgMHhmMiwgMHg1YSwgMHhjYSwgMHhkMiwgMHhkNCwgMHhlMiwgMHhjNCwgMHgzYiwgMHg1NCwgMHhlNCwgMHg3YiwKLQkweDc0LCAweDU3LCAweDhjLCAweGE3LCAweDNmLCAweDQ3LCAweDc2LCAweGFhLCAweGMwLCAweGNmLCAweDY4LCAweGRlLAotCTB4ZGIsIDB4ZTEsIDB4MjMsIDB4YjMsIDB4MjYsIDB4NTUsIDB4NDksIDB4ZmQsIDB4NGEsIDB4ODcsIDB4ZWYsIDB4MWIsCi0JMHg2MiwgMHg3MiwgMHg0OCwgMHg0NywgMHhkNiwgMHgzZiwgMHgyYiwgMHg4ZiwgMHgzNywgMHgwOSwgMHhlYywgMHhlZiwKLQkweDg4LCAweGUzLCAweGY4LCAweDE4LCAweGYzLCAweGQ3LCAweGIxLCAweDJkLCAweGNmLCAweGIzLCAweDY1LCAweDg4LAotCTB4ZWMsIDB4ZTEsIDB4OGEsIDB4NmIsIDB4ZDIsIDB4YmMsIDB4NTYsIDB4MDEsIDB4NmIsIDB4MWYsIDB4ZDcsIDB4NjMsCi0JMHhjYiwgMHg5ZSwgMHgxMSwgMHg0NSwgMHg5YywgMHhiYiwgMHhmMywgMHhhZiwgMHhkMywgMHg5YywgMHg2NSwgMHg1MCwKLQkweDJkLCAweDViLCAweDQ4LCAweGYzLCAweDU1LCAweDgyLCAweDY2LCAweGE5LCAweDM4LCAweGNkLCAweDUyLCAweGQ2LAotCTB4ZGMsIDB4N2MsIDB4NjgsIDB4NTIsIDB4MzYsIDB4NGEsIDB4ZjksIDB4MTgsIDB4ZDUsIDB4YjIsIDB4NTcsIDB4ZTgsCi0JMHhmNywgMHgwMSwgMHhkNSwgMHhkMywgMHgyYSwgMHhkMiwgMHhlNSwgMHg4MiwgMHg0MSwgMHhkNiwgMHhjNSwgMHgxNSwKLQkweDM2LCAweGQ1LCAweGRiLCAweDhjLCAweDUyLCAweDFlLCAweGUzLCAweDNlLCAweDE0LCAweDlhLCAweDI0LCAweDVlLAotCTB4MzQsIDB4NzMsIDB4NmMsIDB4ZjMsIDB4ODEsIDB4MDEsIDB4MWYsIDB4ZWUsIDB4ZDMsIDB4OTQsIDB4ZmIsIDB4MzUsCi0JMHhlMywgMHg1MSwgMHg1NCwgMHg4ZiwgMHhlYiwgMHgwOCwgMHg4ZiwgMHhiNywgMHhkMCwgMHhiZSwgMHg4NiwgMHgzOCwKLQkweGJkLCAweGJiLCAweDM0LCAweDEzLCAweGM2LCAweDljLCAweDNhLCAweGIxLCAweGU0LCAweGJlLCAweDU5LCAweGI5LAotCTB4MzMsIDB4YTUsIDB4ZTIsIDB4YzYsIDB4MjYsIDB4YjMsIDB4ZWIsIDB4NGEsIDB4ODEsIDB4NGMsIDB4NGIsIDB4OTYsCi0JMHhmNSwgMHgyZCwgMHhhNSwgMHhkYywgMHg5NCwgMHg0NywgMHhlMiwgMHg5NiwgMHg5NCwgMHg1MSwgMHg0NywgMHhkZSwKLQkweDc1LCAweGEyLCAweGMzLCAweGIyLCAweDRmLCAweDgwLCAweDY1LCAweDY0LCAweDFhLCAweDVlLCAweDc3LCAweGM1LAotCTB4ZWYsIDB4M2IsIDB4YWMsIDB4MDcsIDB4NWUsIDB4NDUsIDB4MTIsIDB4ZWQsIDB4ZTMsIDB4YWEsIDB4ZjgsIDB4YjcsCi0JMHhlYywgMHgxMiwgMHhiNCwgMHg0ZCwgMHg0MiwgMHgyZiwgMHg3MSwgMHgwZSwgMHg4OSwgMHg5MywgMHgwZiwgMHgxZSwKLQkweDE2LCAweGE3LCAweDI2LCAweDQ4LCAweDZlLCAweDlmLCAweDc0LCAweGYxLCAweDQ5LCAweDE3LCAweDlmLCAweDc0LAotCTB4ZjEsIDB4NDksIDB4OTcsIDB4YzIsIDB4NWMsIDB4YzksIDB4YmEsIDB4YjYsIDB4ZDAsIDB4M2MsIDB4ZjMsIDB4N2EsCi0JMHg2MSwgMHhmNiwgMHhlNSwgMHg1OSwgMHhiMSwgMHhjYSwgMHgzMSwgMHgzMywgMHgyZSwgMHg1OCwgMHg2ZiwgMHhkNiwKLQkweDUzLCAweGNhLCAweDU3LCAweGVkLCAweGEyLCAweDNlLCAweDJlLCAweDk1LCAweDViLCAweDZkLCAweDcyLCAweGRlLAotCTB4MTYsIDB4NTIsIDB4ZmUsIDB4YmIsIDB4Y2QsIDB4YjYsIDB4NjAsIDB4MWQsIDB4YTUsIDB4N2MsIDB4ZDQsIDB4MjYsCi0JMHg5YiwgMHgxMiwgMHhhZiwgMHgwMSwgMHg1ZiwgMHgxZSwgMHgyOSwgMHhiMSwgMHgyYywgMHg2MywgMHgxYywgMHgxMSwKLQkweGQyLCAweDJmLCAweDRhLCAweDdhLCAweDY5LCAweGE0LCAweDZiLCAweDEyLCAweDJhLCAweGU5LCAweDFhLCAweDFhLAotCTB4ODcsIDB4YWUsIDB4OTAsIDB4M2MsIDB4YzYsIDB4MjgsIDB4ZDksIDB4NjksIDB4ZjIsIDB4Y2YsIDB4YzksIDB4YzMsCi0JMHhmZSwgMHg3MSwgMHhjNSwgMHg5NywgMHg2OSwgMHgzZSwgMHg1MSwgMHhjOSwgMHhhZSwgMHgwMywgMHgxNCwgMHgyMywKLQkweDNkLCAweDJhLCAweDhjLCAweDUyLCAweDRiLCAweGExLCAweDllLCAweGE4LCAweGUxLCAweGMwLCAweDU4LCAweDA1LAotCTB4YzYsIDB4NDcsIDB4NzQsIDB4OGMsIDB4OGMsIDB4NDEsIDB4MGYsIDB4MTMsIDB4NGYsIDB4NzcsIDB4ZTQsIDB4YjAsCi0JMHhmOCwgMHg2NCwgMHg1YywgMHg5NSwgMHgzYSwgMHg1YiwgMHhmMCwgMHgwZSwgMHhkNSwgMHhhOSwgMHg0MSwgMHhhZiwKLQkweDVhLCAweDljLCAweGRhLCAweGE1LCAweDYxLCAweGFiLCAweGNmLCAweGI5LCAweDI5LCAweDcxLCAweGQ0LCAweGVlLAotCTB4NGYsIDB4MTAsIDB4OGEsIDB4ZTgsIDB4YjcsIDB4ZDcsIDB4NTAsIDB4NGMsIDB4ODUsIDB4YjAsIDB4ZDksIDB4NDIsCi0JMHg2NiwgMHg5YiwgMHhkZCwgMHgwNSwgMHg2MiwgMHg2NSwgMHhlYywgMHhhNSwgMHhmYSwgMHhkNywgMHg2NywgMHhiOSwKLQkweDdkLCAweDM0LCAweGM2LCAweGY0LCAweDI2LCAweDYwLCAweGFlLCAweGZmLCAweGFkLCAweDMwLCAweDdiLCAweDBlLAotCTB4OTAsIDB4ZmQsIDB4MzcsIDB4NjcsIDB4OTEsIDB4ZDksIDB4OTksIDB4YWQsIDB4MTMsIDB4ZWYsIDB4MGUsIDB4Y2QsCi0JMHhjYSwgMHgzNSwgMHgyOSwgMHgzMywgMHhkMywgMHg0YywgMHg2YiwgMHg5NSwgMHg1OSwgMHgyNSwgMHg1OSwgMHg4MiwKLQkweGZlLCAweDhkLCAweDg0LCAweGRiLCAweGEyLCAweDYyLCAweDM2LCAweGI0LCAweDNkLCAweGQ1LCAweDVmLCAweDQ1LAotCTB4MTMsIDB4OTAsIDB4MTYsIDB4YTEsIDB4MWEsIDB4ZWMsIDB4MzUsIDB4OTksIDB4ODksIDB4MWMsIDB4YWQsIDB4YWQsCi0JMHhhNywgMHg3YiwgMHhjYiwgMHhmMywgMHhiNiwgMHg3OSwgMHhlYywgMHgzZCwgMHg0YywgMHg2MywgMHg4MywgMHgzNywKLQkweGFkLCAweDM2LCAweGZiLCAweDY2LCAweDVmLCAweDI0LCAweGU0LCAweDc2LCAweDk3LCAweDQxLCAweDU5LCAweDVkLAotCTB4ODEsIDB4NjksIDB4ZWQsIDB4NGMsIDB4ZDYsIDB4YjQsIDB4MmYsIDB4MTMsIDB4NmUsIDB4OGIsIDB4ODYsIDB4ZmUsCi0JMHg0NiwgMHg3YSwgMHg4ZiwgMHgxYywgMHhmMywgMHg4YSwgMHg3NCwgMHg3YiwgMHhlZCwgMHhmZSwgMHgyNywgMHgyYiwKLQkweDkwLCAweGVjLCAweGJiLCAweDg0LCAweDdhLCAweGM5LCAweDkyLCAweDkwLCAweGM0LCAweGY1LCAweGE5LCAweDY5LAotCTB4N2QsIDB4YjMsIDB4MzcsIDB4MWIsIDB4MGEsIDB4YjcsIDB4MjcsIDB4ZjUsIDB4MzMsIDB4YzIsIDB4NGQsIDB4OTQsCi0JMHg2MiwgMHgzYSwgMHg3ZSwgMHg0NSwgMHhkNiwgMHgzNCwgMHg3MiwgMHg0OCwgMHgxZSwgMHhlYiwgMHhjMiwgMHg3NCwKLQkweDYyLCAweDg3LCAweDY3LCAweDRlLCAweGRkLCAweDhjLCAweGU0LCAweGZhLCAweDY0LCAweDY4LCAweDdhLCAweDYxLAotCTB4OTksIDB4OWYsIDB4Y2MsIDB4N2MsIDB4NTMsIDB4MjQsIDB4M2IsIDB4Y2IsIDB4NjksIDB4MzYsIDB4MWYsIDB4YTksCi0JMHg0ZCwgMHg2NiwgMHhjZSwgMHgxNCwgMHg3MiwgMHg4YywgMHhlNywgMHgxYywgMHg5NSwgMHhlNiwgMHg5YywgMHgyZCwKLQkweGI4LCAweDlkLCAweDZjLCAweGQyLCAweDQ5LCAweDc2LCAweDlmLCAweDU4LCAweDUyLCAweDRhLCAweGYzLCAweDRhLAotCTB4YTMsIDB4MWQsIDB4MGQsIDB4YjksIDB4OWQsIDB4NjEsIDB4OTgsIDB4ZmEsIDB4N2IsIDB4NTQsIDB4OGIsIDB4MjcsCi0JMHhhZCwgMHgxOSwgMHg3YiwgMHg3NSwgMHg4ZSwgMHhlNywgMHgxZiwgMHgzNSwgMHhiNSwgMHg5NCwgMHhmMiwgMHhmNSwKLQkweDllLCAweGJjLCAweGEwLCAweDc5LCAweDkxLCAweDZkLCAweDZhLCAweGVhLCAweDIzLCAweDc0LCAweDc3LCAweDMzLAotCTB4NmEsIDB4ZDgsIDB4ODYsIDB4MmEsIDB4YmUsIDB4NmUsIDB4YjksIDB4MDYsIDB4ZTksIDB4NmQsIDB4MzMsIDB4ZGQsCi0JMHg3MywgMHgzMCwgMHgxMywgMHhkYiwgMHhhOSwgMHg4ZiwgMHg2ZiwgMHhmNiwgMHg5MCwgMHhiOSwgMHhkNCwgMHg3YiwKLQkweDM0LCAweDQ2LCAweGY1LCAweGI5LCAweDE3LCAweDUwLCAweDJlLCAweGFmLCAweDg0LCAweGRiLCAweDU3LCAweDg2LAotCTB4ZmUsIDB4NzUsIDB4OTUsIDB4MzAsIDB4ZWQsIDB4ZjcsIDB4YzQsIDB4NmMsIDB4ZTgsIDB4ZDIsIDB4NTQsIDB4ZmYsCi0JMHg4NSwgMHg5NSwgMHg5OCwgMHgzNiwgMHg1ZSwgMHhmNywgMHg0YywgMHhlYSwgMHhmMywgMHgxMiwgMHhhMywgMHhhOSwKLQkweGQ5LCAweGQwLCAweDAxLCAweDdiLCAweGRhLCAweGYyLCAweDQ5LCAweGU3LCAweGY3LCAweGUwLCAweDFlLCAweDUzLAotCTB4MzAsIDB4ZGQsIDB4YjIsIDB4ZDksIDB4MzMsIDB4YmIsIDB4OTYsIDB4ODQsIDB4OTIsIDB4ZGQsIDB4MDksIDB4MzEsCi0JMHhiZCwgMHhlNCwgMHhhMiwgMHg2YywgMHgzMiwgMHg3MywgMHg4NSwgMHg0OCwgMHhhZSwgMHgyZiwgMHgxMSwgMHhiZiwKLQkweDIyLCAweDllLCAweGM5LCAweGNjLCAweDM3LCAweDA0LCAweGU3LCAweGNmLCAweGM5LCAweGI5LCAweGZiLCAweDE1LAotCTB4MzIsIDB4YTMsIDB4NzYsIDB4ODIsIDB4NjIsIDB4OGYsIDB4ZTMsIDB4NTUsIDB4MjcsIDB4M2YsIDB4ZjIsIDB4M2QsCi0JMHhjYiwgMHg4MCwgMHhlYSwgMHg1OCwgMHg4OSwgMHgzMSwgMHhiYSwgMHgzNywgMHhmNiwgMHg1MCwgMHgxZSwgMHgxZCwKLQkweGI0LCAweDM5LCAweGU3LCAweGU0LCAweDkxLCAweDUyLCAweGNiLCAweDZhLCAweDM5LCAweDQwLCAweGI3LCAweGQzLAotCTB4YTMsIDB4OTQsIDB4ZTMsIDB4OTQsIDB4ZjMsIDB4YzYsIDB4MjQsIDB4ZjUsIDB4ZTIsIDB4YTksIDB4NWEsIDB4MTUsCi0JMHg1NSwgMHhjZSwgMHgxMSwgMHhjYSwgMHg3NSwgMHg0MiwgMHgyYSwgMHhiNywgMHhmNCwgMHgzZSwgMHgzMCwgMHhmZSwKLQkweDE2LCAweGEwLCAweGQ2LCAweDAwLCAweGNkLCAweGU2LCAweDg0LCAweDMzLCAweDIzLCAweGE3LCAweGE4LCAweDdlLAotCTB4MGMsIDB4ZjgsIDB4OGMsIDB4NjcsIDB4ZjUsIDB4M2QsIDB4ODIsIDB4M2YsIDB4YzgsIDB4OTMsIDB4NTUsIDB4OGMsCi0JMHg5ZiwgMHhjMSwgMHg4NiwgMHgzNCwgMHhjNCwgMHhlMywgMHg3NiwgMHgwYywgMHg0NiwgMHg4ZCwgMHg4ZSwgMHg3ZSwKLQkweGVhLCAweGU3LCAweDhhLCAweDYzLCAweGNkLCAweDhjLCAweDcyLCAweDdmLCAweGFiLCAweDgxLCAweDViLCAweDQxLAotCTB4ZjMsIDB4NDYsIDB4NTEsIDB4ODYsIDB4ZDMsIDB4MmMsIDB4MDMsIDB4YzEsIDB4MjIsIDB4NzEsIDB4ZTMsIDB4ZjAsCi0JMHg0MiwgMHg3MSwgMHgwMywgMHhkZiwgMHgwMSwgMHg1MiwgMHg1OCwgMHg1NSwgMHg4NiwgMHgyNiwgMHhmYiwgMHgzNCwKLQkweGFkLCAweDcyLCAweGNlLCAweDQ2LCAweDlkLCAweDg4LCAweDM4LCAweDMxLCAweDBjLCAweDNkLCAweDY3LCAweDUzLAotCTB4ZTcsIDB4YWYsIDB4OTIsIDB4ZjIsIDB4NjAsIDB4Y2EsIDB4NDAsIDB4ZGUsIDB4MmUsIDB4YTEsIDB4OTksIDB4M2EsCi0JMHg4YywgMHgyYSwgMHgwYiwgMHg3YSwgMHhjMiwgMHhiMSwgMHhlZSwgMHgzOSwgMHg4YywgMHhhZiwgMHhjMCwgMHhhOCwKLQkweDQzLCAweDU0LCAweGE1LCAweDdlLCAweDRjLCAweDZiLCAweDYyLCAweGRjLCAweDJlLCAweGEzLCAweDM5LCAweDVmLAotCTB4MjAsIDB4ZTEsIDB4MjQsIDB4YjAsIDB4ZGQsIDB4ZTcsIDB4N2EsIDB4NjAsIDB4ZjUsIDB4MWQsIDB4YTYsIDB4MWEsCi0JMHg1MCwgMHhhYywgMHg3OSwgMHgzZiwgMHhhMCwgMHhiOSwgMHg0NywgMHgzNCwgMHg1NCwgMHgzYSwgMHhiYywgMHhjZiwKLQkweGViLCAweDk3LCAweGYzLCAweDdjLCAweDVlLCAweDk4LCAweGM1LCAweGI2LCAweGQzLCAweGJlLCAweGU0LCAweGRlLAotCTB4NWUsIDB4ODMsIDB4MTgsIDB4YzksIDB4OWIsIDB4MTgsIDB4YTUsIDB4ZmIsIDB4MDIsIDB4ZGIsIDB4MjgsIDB4ZTIsCi0JMHg5MCwgMHhlNiwgMHg3NSwgMHhkMCwgMHhjYiwgMHgxYywgMHhjYiwgMHg3ZCwgMHgwOCwgMHg1ZCwgMHg0MCwgMHgzNSwKLQkweGNmLCAweDExLCAweGQwLCAweDRhLCAweDFjLCAweDFiLCAweGNmLCAweDdhLCAweGRmLCAweGE3LCAweGIzLCAweDkwLAotCTB4NzksIDB4ZDcsIDB4ODYsIDB4NDYsIDB4ZmMsIDB4OTAsIDB4YTAsIDB4YmMsIDB4OGMsIDB4YjUsIDB4NTMsIDB4MmMsCi0JMHg1MCwgMHhmZiwgMHgzZiwgMHg2MCwgMHgyMywgMHhkNiwgMHhlMCwgMHg1OCwgMHhjNywgMHg4ZSwgMHg1MCwgMHgyYywKLQkweDE4LCAweDBiLCAweGEwLCAweDI4LCAweGE5LCAweDU3LCAweGMwLCAweGYzLCAweGJiLCAweGVhLCAweGYwLCAweGRlLAotCTB4MDQsIDB4NGUsIDB4ZWEsIDB4ODgsIDB4OTUsIDB4MzgsIDB4NTYsIDB4ZDcsIDB4MzgsIDB4MDUsIDB4ODIsIDB4ZWUsCi0JMHgzYywgMHgwNCwgMHhiYiwgMHhhYSwgMHg5MCwgMHg5MywgMHhjNCwgMHhhNywgMHg5MywgMHhmOCwgMHg4MCwgMHhlYiwKLQkweGEwLCAweDE2LCAweGE1LCAweGU3LCAweDE3LCAweDliLCAweGE0LCAweDhjLCAweDM1LCAweDViLCAweGJkLCAweDc5LAotCTB4OTgsIDB4M2QsIDB4OTMsIDB4NDIsIDB4YzUsIDB4Y2UsIDB4ZGQsIDB4NWMsIDB4ZjMsIDB4YTYsIDB4NGMsIDB4NmEsCi0JMHg5ZiwgMHhkNCwgMHhiNywgMHhhMywgMHhhMiwgMHhlNCwgMHgzZSwgMHgwNSwgMHhjZCwgMHhjYiwgMHg1NCwgMHhiYywKLQkweDQ4LCAweDM1LCAweGVmLCAweGQ5LCAweDE0LCAweGRmLCAweGVmLCAweDViLCAweDYzLCAweGM1LCAweGI5LCAweDllLAotCTB4N2MsIDB4ZmYsIDB4NTEsIDB4YmQsIDB4OTgsIDB4YmYsIDB4OTMsIDB4MTksIDB4NTQsIDB4MzMsIDB4YWMsIDB4YWUsCi0JMHg4NywgMHhiMSwgMHg0YiwgMHgxYSwgMHg1NSwgMHhlYywgMHg0MywgMHg5YSwgMHg4NSwgMHg2OCwgMHhkNiwgMHhhYywKLQkweGE0LCAweDVhLCAweDk5LCAweGViLCAweGIwLCAweDVhLCAweDI4LCAweDljLCAweGRkLCAweDhkLCAweDFkLCAweDBkLAotCTB4ZTQsIDB4NmYsIDB4OGUsIDB4MDMsIDB4NTksIDB4YTksIDB4MTQsIDB4ZmMsIDB4MjQsIDB4ZTUsIDB4NzUsIDB4ZTksCi0JMHhkNiwgMHg2MywgMHg2ZiwgMHg4NywgMHgwZSwgMHhkMiwgMHg5YywgMHhjYiwgMHgzNiwgMHhiZSwgMHg5YywgMHhmNiwKLQkweGQ5LCAweGZlLCAweDUxLCAweDkxLCAweGJhLCAweGRmLCAweGE1LCAweGRlLCAweGMwLCAweDY3LCAweDRhLCAweDk5LAotCTB4NmMsIDB4YTMsIDB4ODMsIDB4Y2EsIDB4NDMsIDB4MzQsIDB4MjMsIDB4MjIsIDB4ZjMsIDB4YmEsIDB4MDcsIDB4MTEsCi0JMHg2YiwgMHhkZiwgMHg1NCwgMHhiMCwgMHhjMywgMHhlMywgMHg3NiwgMHgyZCwgMHhjNSwgMHgwMSwgMHg2MiwgMHg5YSwKLQkweDYzLCAweGU5LCAweDc0LCAweDcxLCAweDU2LCAweDFhLCAweDljLCAweDJhLCAweDVjLCAweDQ3LCAweGQyLCAweDY0LAotCTB4N2QsIDB4Y2UsIDB4YjcsIDB4NGUsIDB4ZWMsIDB4ZjcsIDB4ZjgsIDB4ZmIsIDB4NDcsIDB4MjcsIDB4MzYsIDB4MTIsCi0JMHg4ZiwgMHg0OSwgMHhjYiwgMHgyMiwgMHgxZCwgMHhjZCwgMHhmNSwgMHgwMywgMHgyMiwgMHgyYSwgMHg5ZSwgMHgxZiwKLQkweDIyLCAweDNkLCAweDc3LCAweDMzLCAweDZmLCAweDE1LCAweGNkLCAweDRkLCAweDJhLCAweDU2LCAweDM1LCAweGYxLAotCTB4NGMsIDB4M2MsIDB4NjUsIDB4YWEsIDB4NjAsIDB4ZmQsIDB4ZmUsIDB4MjQsIDB4OWIsIDB4ZGIsIDB4OTgsIDB4Y2UsCi0JMHhhMiwgMHhiYiwgMHg4NywgMHhhMCwgMHg1YSwgMHg5NywgMHhjNSwgMHg2NiwgMHg1ZCwgMHhhMCwgMHhjZiwgMHhhNiwKLQkweDI4LCAweDVlLCAweGEwLCAweGMyLCAweDZlLCAweDUzLCAweGQxLCAweDZiLCAweGVmLCAweDA1LCAweDg1LCAweDA2LAotCTB4ZDUsIDB4MzgsIDB4MGQsIDB4OWIsIDB4ZWMsIDB4MmMsIDB4ZGMsIDB4MzgsIDB4ZmIsIDB4ZjIsIDB4MWYsIDB4MjUsCi0JMHhhZSwgMHg2NiwgMHhiYiwgMHhlYywgMHg5OCwgMHhiMywgMHhkMSwgMHg5ZSwgMHhjMiwgMHhiNywgMHg4MiwgMHgyMywKLQkweDNlLCAweGUzLCAweDQ1LCAweGM1LCAweGE5LCAweDIxLCAweDU3LCAweGIwLCAweDNlLCAweDFmLCAweGRiLCAweDkzLAotCTB4NzUsIDB4NjIsIDB4MTksIDB4ZWEsIDB4YzQsIDB4Y2UsIDB4NjEsIDB4NjQsIDB4NzYsIDB4NzQsIDB4NDgsIDB4YjksCi0JMHgzOSwgMHg2NSwgMHg3NiwgMHhiZCwgMHgwMCwgMHgwNSwgMHhjOSwgMHhlMSwgMHgzMCwgMHg5ZSwgMHg1ZSwgMHhkMiwKLQkweDI3LCAweDVkLCAweDdkLCAweDg1LCAweDQ5LCAweDc5LCAweGFlLCAweDUzLCAweDU0LCAweDYzLCAweGEwLCAweGQ5LAotCTB4OWMsIDB4NTksIDB4NDksIDB4NWMsIDB4N2YsIDB4ZTcsIDB4MzcsIDB4ZTAsIDB4MGQsIDB4OWIsIDB4NjIsIDB4Y2MsCi0JMHg1MiwgMHhmYiwgMHgzYSwgMHg0MywgMHhkYywgMHhmNywgMHgzNywgMHgxMiwgMHg5ZiwgMHgyNiwgMHhiNywgMHg1MiwKLQkweGIxLCAweDdhLCAweDI2LCAweDI4LCAweGNmLCAweDJhLCAweDljLCAweDFlLCAweGI5LCAweGIzLCAweDk2LCAweDYzLAotCTB4MTAsIDB4NGEsIDB4MzQsIDB4ZjUsIDB4MzUsIDB4MzksIDB4NTUsIDB4Y2IsIDB4YjEsIDB4YzgsIDB4NzMsIDB4NTksCi0JMHg1NCwgMHhlOCwgMHhjMywgMHg3YywgMHgzZSwgMHhjZiwgMHg2OSwgMHgyYSwgMHhjMiwgMHg0OSwgMHgyOSwgMHhjNywKLQkweGVkLCAweGNkLCAweDI0LCAweDJiLCAweGNiLCAweDMwLCAweDJmLCAweGViLCAweDI2LCAweDk5LCAweGE5LCAweDQyLAotCTB4MmMsIDB4ZWEsIDB4NTgsIDB4YmQsIDB4OTMsIDB4NTQsIDB4YTMsIDB4MjMsIDB4NGUsIDB4MmIsIDB4ZGQsIDB4N2IsCi0JMHhhZiwgMHg5MywgMHhjNSwgMHgzOSwgMHg5NCwgMHhmYiwgMHg3ZSwgMHg1NCwgMHg4YywgMHgwZiwgMHgzMSwgMHgwZiwKLQkweGY2LCAweGNkLCAweGI5LCAweDdhLCAweDQwLCAweGEzLCAweGZiLCAweDMzLCAweDI2LCAweGIyLCAweDAyLCAweGZiLAotCTB4NTIsIDB4N2QsIDB4YjIsIDB4NDcsIDB4NjcsIDB4N2UsIDB4NTEsIDB4ZjEsIDB4ZWMsIDB4ZDAsIDB4YzcsIDB4NjcsCi0JMHg3ZSwgMHgxYSwgMHg3ZiwgMHhlZiwgMHg5YywgMHg5ZCwgMHhiZSwgMHg1NCwgMHg4YywgMHgwOSwgMHhiZiwgMHgxOCwKLQkweGEzLCAweDI1LCAweGNlLCAweGNiLCAweDE0LCAweGZiLCAweGNhLCAweDZhLCAweGJhLCAweDlkLCAweDQxLCAweDRmLAotCTB4MDksIDB4M2MsIDB4ZDUsIDB4MjksIDB4NzAsIDB4ZGQsIDB4MTIsIDB4OWEsIDB4YzEsIDB4OTYsIDB4NWEsIDB4MTQsCi0JMHgyNywgMHhkNywgMHg0OCwgMHg2MywgMHhjMSwgMHgxNCwgMHgwNSwgMHhkYywgMHhhYywgMHgyYywgMHg0ZCwgMHhhYSwKLQkweDc4LCAweDY3LCAweDA5LCAweDI1LCAweGQxLCAweDU1LCAweDFjLCAweGFiLCAweDBhLCAweDVlLCAweDIwLCAweGJjLAotCTB4ZDUsIDB4MTcsIDB4NTksIDB4NWQsIDB4NDcsIDB4NTEsIDB4MDEsIDB4ZTMsIDB4MmIsIDB4YmMsIDB4YjYsIDB4NjIsCi0JMHg0MywgMHgxOCwgMHhhZCwgMHgwOSwgMHgxZCwgMHgxNiwgMHhmOSwgMHhiYywgMHg4NiwgMHg2NywgMHg2OSwgMHg5MiwKLQkweDlmLCAweDY5LCAweGU3LCAweDYzLCAweGRiLCAweDJiLCAweGM4LCAweGQxLCAweGJjLCAweDhjLCAweDlmLCAweDU5LAotCTB4YmUsIDB4OGYsIDB4ZGYsIDB4MDcsIDB4ODYsIDB4NTgsIDB4M2UsIDB4ZjYsIDB4MTcsIDB4ZjksIDB4OWEsIDB4NjQsCi0JMHgyZSwgMHg0OSwgMHhjZCwgMHhjNywgMHhjNSwgMHg2ZCwgMHg3MywgMHhiMiwgMHg0NiwgMHg2OSwgMHhhZSwgMHg2MSwKLQkweDlhLCAweDYyLCAweDBjLCAweDlkLCAweGEwLCAweGY4LCAweDE5LCAweGZmLCAweDA4LCAweDg3LCAweDJjLCAweDU4LAotCTB4Y2UsIDB4ZTcsIDB4NzAsIDB4YWMsIDB4MDgsIDB4NjAsIDB4YWQsIDB4ODIsIDB4ZDQsIDB4MzIsIDB4OWUsIDB4MTEsCi0JMHgyOCwgMHgwNiwgMHg4NiwgMHhjZCwgMHg0ZSwgMHg0MywgMHg1OSwgMHg0NCwgMHhmYiwgMHg0YywgMHgxYiwgMHgyNSwKLQkweGJmLCAweGYzLCAweDdiLCAweGYxLCAweDljLCAweDViLCAweDlhLCAweDM4LCAweGNlLCAweDViLCAweGU3LCAweGZjLAotCTB4ZjEsIDB4MGIsIDB4YmQsIDB4MzgsIDB4YzMsIDB4NDYsIDB4YTksIDB4ZTcsIDB4ODEsIDB4ZjYsIDB4MTksIDB4NGYsCi0JMHhjNSwgMHgxYSwgMHhjNiwgMHg0OSwgMHhjZCwgMHhlMywgMHhjYywgMHhjNywgMHhlOCwgMHhiZiwgMHgxMCwgMHhlZSwKLQkweDlmLCAweDY0LCAweGFhLCAweDhkLCAweGZiLCAweDc1LCAweDU0LCAweDVjLCAweDM3LCAweGM0LCAweGI4LCAweDQ1LAotCTB4N2IsIDB4N2YsIDB4ZDgsIDB4NGMsIDB4ZjgsIDB4ZWQsIDB4ZTcsIDB4ZTIsIDB4YmYsIDB4ZmMsIDB4MDksIDB4ZmMsCi0JMHhjZiwgMHhmNCwgMHg3NywgMHg4MiwgMHgyZSwgMHhiMSwgMHhjMywgMHhhMywgMHgwYiwgMHhiZiwgMHhhNSwgMHg1YywKLQkweDU2LCAweDRlLCAweDc5LCAweGZkLCAweDEwLCAweGY1LCAweGY5LCAweDgzLCAweDIzLCAweDVkLCAweDYyLCAweDNiLAotCTB4OTksIDB4ZTcsIDB4YzAsIDB4ZDgsIDB4MmEsIDB4NzEsIDB4YjcsIDB4NjcsIDB4ZjEsIDB4MmMsIDB4MzksIDB4ZDcsCi0JMHhmMywgMHg4YiwgMHhkZiwgMHhmNywgMHhiNiwgMHg3ZCwgMHhlYSwgMHhiYiwgMHg1ZCwgMHhhNCwgMHg0NywgMHg3NywKLQkweGQwLCAweDVkLCAweDNmLCAweDc4LCAweDk3LCAweDZjLCAweGIwLCAweGI4LCAweDllLCAweDU5LCAweDUzLCAweDE3LAotCTB4ODcsIDB4MjIsIDB4OWQsIDB4YjEsIDB4ZTUsIDB4MjEsIDB4NDQsIDB4MmQsIDB4NzQsIDB4YzcsIDB4NjgsIDB4ZDYsCi0JMHg3YSwgMHhiMSwgMHhkMCwgMHhlMywgMHgwYywgMHgxOCwgMHhiOSwgMHg4MSwgMHhkYSwgMHg2MiwgMHgwYywgMHg0OCwKLQkweDQ5LCAweDc1LCAweDVmLCAweGFkLCAweDc0LCAweGQwLCAweDUzLCAweGUyLCAweDk0LCAweDY4LCAweDk3LCAweDc0LAotCTB4NDQsIDB4OTAsIDB4ZWIsIDB4ZTgsIDB4YWEsIDB4M2YsIDB4OWUsIDB4YmIsIDB4YWMsIDB4ZmUsIDB4YjksIDB4NWMsCi0JMHg1ZCwgMHgwZiwgMHhkZCwgMHg3ZCwgMHhlYiwgMHg3ZiwgMHhlNiwgMHgwMSwgMHg2NywgMHg0OCwgMHg4NiwgMHhiMCwKLQkweDczLCAweGE1LCAweGJiLCAweDJmLCAweDBkLCAweGE1LCAweGI3LCAweGMzLCAweDMyLCAweDE2LCAweDhiLCAweDc1LAotCTB4ZWIsIDB4NDgsIDB4ODcsIDB4ZmEsIDB4NjMsIDB4YjksIDB4M2IsIDB4ZDcsIDB4ODUsIDB4MjYsIDB4YTksIDB4ZGIsCi0JMHhlOSwgMHhiOCwgMHhmMywgMHhlZCwgMHhmNCwgMHg5ZCwgMHhkOCwgMHhlMiwgMHhmNSwgMHg2MSwgMHg5MywgMHgxNywKLQkweDJmLCAweGQ0LCAweGE4LCAweDVkLCAweDJjLCAweDkzLCAweGNmLCAweGRmLCAweGVjLCAweDU4LCAweGQ2LCAweDA4LAotCTB4YjYsIDB4ZTYsIDB4NTUsIDB4YmMsIDB4NTUsIDB4ZDgsIDB4MzMsIDB4MTMsIDB4YWIsIDB4ZjEsIDB4MzEsIDB4ZWUsCi0JMHg2NywgMHhmMSwgMHgzZSwgMHhmOSwgMHgyZCwgMHg5MSwgMHg2MywgMHgwNiwgMHg5OSwgMHhkMCwgMHhhMCwgMHg5NCwKLQkweDRhLCAweDlhLCAweGVmLCAweDdmLCAweGQzLCAweDM0LCAweDBiLCAweDczLCAweDhkLCAweDc5LCAweDBmLCAweGZiLAotCTB4YWQsIDB4MDUsIDB4ZmMsIDB4MmQsIDB4OTEsIDB4MjEsIDB4NTMsIDB4M2EsIDB4YzgsIDB4N2IsIDB4YTcsIDB4ZTcsCi0JMHhmNiwgMHhkZSwgMHhhMSwgMHgzZCwgMHg4OCwgMHg1MywgMHhkNCwgMHhhYiwgMHhhOCwgMHg4ZSwgMHgxNywgMHhmNiwKLQkweGNiLCAweDA3LCAweDIzLCAweGY4LCAweDdiLCAweDlmLCAweDcxLCAweDRlLCAweGNlLCAweGUxLCAweGZjLCAweDhhLAotCTB4NzAsIDB4ZTIsIDB4NTgsIDB4NTMsIDB4MDUsIDB4YjcsIDB4OTIsIDB4NzMsIDB4NmIsIDB4NzgsIDB4ZmUsIDB4NWIsCi0JMHgyMywgMHhlNSwgMHg4OSwgMHhmZCwgMHg2MSwgMHhiNCwgMHhmOCwgMHhhZCwgMHgzMSwgMHgyYSwgMHhiNCwgMHhmYiwKLQkweGU4LCAweDM5LCAweGNhLCAweDcxLCAweGM4LCAweGIxLCAweGNhLCAweGY0LCAweGM3LCAweDUzLCAweDQ1LCAweGZhLAotCTB4NjMsIDB4MjksIDB4YTYsIDB4ZmYsIDB4MmMsIDB4OGQsIDB4OWEsIDB4ODksIDB4MGMsIDB4YzYsIDB4YTksIDB4ZmUsCi0JMHhiZSwgMHg0YiwgMHhiNSwgMHhhMCwgMHhjOCwgMHhiYiwgMHg0OCwgMHhmNywgMHg0ZiwgMHg3MywgMHg3NCwgMHg4NywKLQkweDg5LCAweGVlLCAweDBmLCAweDE0LCAweDg3LCAweDRjLCAweGNiLCAweDdhLCAweDcyLCAweDZlLCAweGNjLCAweGZiLAotCTB4YWYsIDB4NDUsIDB4MWMsIDB4ZjIsIDB4MGMsIDB4MWMsIDB4Y2EsIDB4YTksIDB4NjIsIDB4MWYsIDB4ZDUsIDB4ZGEsCi0JMHgzMSwgMHhiYSwgMHhiNywgMHgwYywgMHgxNCwgMHhiZSwgMHhhNSwgMHhlYSwgMHg2NCwgMHg5MywgMHgxNywgMHhhYSwKLQkweDhhLCAweGZlLCAweGUyLCAweGVmLCAweGNiLCAweDUzLCAweDU4LCAweGUxLCAweDI1LCAweGE5LCAweGY3LCAweDZiLAotCTB4MDUsIDB4OWQsIDB4NGEsIDB4OWQsIDB4YTcsIDB4ZjEsIDB4NWIsIDB4YWEsIDB4OTcsIDB4YTcsIDB4MGEsIDB4ZGYsCi0JMHg2ZiwgMHg5ZSwgMHg0NiwgMHgzMiwgMHhjNywgMHg3MywgMHg4ZiwgMHgyNSwgMHgzNiwgMHg3OSwgMHg0NiwgMHg4ZiwKLQkweDQyLCAweGJjLCAweDU3LCAweGU1LCAweDhhLCAweDM1LCAweDg0LCAweGZhLCAweDViLCAweDg2LCAweDZhLCAweGIzLAotCTB4NzgsIDB4YTYsIDB4ZjAsIDB4NWUsIDB4NDMsIDB4M2QsIDB4OGYsIDB4NjUsIDB4YzgsIDB4ODgsIDB4NDQsIDB4ZDIsCi0JMHg0NSwgMHg0MywgMHhkMiwgMHg5NSwgMHhhYSwgMHg2NSwgMHgxZCwgMHg1MywgMHg0MywgMHg5NiwgMHhmZSwgMHg0ZSwKLQkweDI4LCAweDczLCAweDhiLCAweDgyLCAweGJiLCAweGYwLCAweDdlLCAweDdiLCAweGU2LCAweDZmLCAweGVhLCAweGU5LAotCTB4NmYsIDB4NjUsIDB4M2IsIDB4OGMsIDB4MGEsIDB4Y2EsIDB4ZjMsIDB4MWIsIDB4M2EsIDB4OWEsIDB4MzIsIDB4MmYsCi0JMHg4OSwgMHhhNiwgMHhlZSwgMHhhYywgMHg2OCwgMHg3MiwgMHhkNywgMHg4OCwgMHhhNiwgMHhjZSwgMHgzMiwgMHg2MSwKLQkweDZiLCAweGNmLCAweDUxLCAweDEzLCAweDdmLCAweDM5LCAweDM3LCAweDZmLCAweDA3LCAweGY2LCAweDFmLCAweGRiLAotCTB4ODAsIDB4YzIsIDB4ZGMsIDB4YjEsIDB4MzIsIDB4OGIsIDB4NDUsIDB4OGMsIDB4ZWUsIDB4ZmUsIDB4OWMsIDB4MGYsCi0JMHgwZCwgMHhhMCwgMHg1ZSwgMHg3NCwgMHgzNiwgMHhkNywgMHhkMSwgMHhiYSwgMHg3ZSwgMHg5NywgMHgyOCwgMHhhMywKLQkweDdhLCAweGEwLCAweDYzLCAweDJmLCAweGNkLCAweDI3LCAweDBkLCAweDE2LCAweGM3LCAweDI3LCAweDM1LCAweGM4LAotCTB4MDUsIDB4MmMsIDB4Y2YsIDB4Y2YsIDB4MjMsIDB4NDUsIDB4ZmQsIDB4ZDYsIDB4NTUsIDB4MTcsIDB4ZjMsIDB4NGYsCi0JMHg1MCwgMHg5ZCwgMHg4MywgMHgxNiwgMHhhMywgMHg1OCwgMHg3ZCwgMHg5ZiwgMHhlYSwgMHhkYSwgMHhlZiwgMHg5YSwKLQkweDhhLCAweDcxLCAweGJiLCAweDk0LCAweGJmLCAweDAzLCAweDE3LCAweGYwLCAweDhlLCAweDRiLCAweGJhLCAweDViLAotCTB4OTEsIDB4NGUsIDB4ZTcsIDB4MzEsIDB4M2UsIDB4ZTksIDB4M2IsIDB4NTUsIDB4ZmQsIDB4NjksIDB4ZmEsIDB4YTIsCi0JMHg2ZCwgMHgxNSwgMHg5YSwgMHgwMSwgMHg4ZSwgMHhlNCwgMHgzMywgMHg2MiwgMHhiNSwgMHg4NywgMHgyZCwgMHhhMSwKLQkweDgyLCAweGZlLCAweDA2LCAweDU2LCAweGU3LCAweGJhLCAweGM0LCAweDJhLCAweGNmLCAweDMyLCAweDA2LCAweGM4LAotCTB4MDYsIDB4ZGIsIDB4ZjQsIDB4NTYsIDB4N2QsIDB4OGMsIDB4ZWEsIDB4MTYsIDB4ZjEsIDB4MzIsIDB4NGEsIDB4MjksCi0JMHgwNywgMHgzNCwgMHg2NywgMHgwMSwgMHhlZSwgMHg5OSwgMHg4YiwgMHgyOSwgMHhjYSwgMHgwYiwgMHhiNywgMHhjYywKLQkweGU5LCAweDEzLCAweDhiLCAweDI3LCAweGY4LCAweDk1LCAweGY4LCAweDdjLCAweGE0LCAweGRmLCAweDg3LCAweDcyLAotCTB4ZmIsIDB4NTUsIDB4YmMsIDB4ZGYsIDB4M2YsIDB4ZTcsIDB4OTMsIDB4OWIsIDB4ZjksIDB4NGMsIDB4N2EsIDB4M2YsCi0JMHgzNSwgMHgyNywgMHhjMywgMHhmZiwgMHg0NCwgMHgzYiwgMHg3MSwgMHhmZSwgMHhhNywgMHg2OSwgMHg3OCwgMHhhZSwKLQkweGUzLCAweDNiLCAweDA1LCAweGRjLCAweDZhLCAweDg3LCAweDY3LCAweGJhLCAweDg1LCAweDczLCAweGIxLCAweDMwLAotCTB4NGMsIDB4YmMsIDB4YjcsIDB4ZTAsIDB4Y2EsIDB4NjUsIDB4NDAsIDB4ZjMsIDB4ZTAsIDB4NDIsIDB4NmMsIDB4Y2YsCi0JMHgwMywgMHgyZCwgMHg4MywgMHgzYywgMHg2MywgMHhjZiwgMHhjMiwgMHhjYiwgMHg0MiwgMHgyYiwgMHg3MywgMHg2NiwKLQkweDcwLCAweDYxLCAweGI2LCAweGIxLCAweGI3LCAweDU0LCAweDk4LCAweDJkLCAweDU5LCAweDYxLCAweDc2LCAweDAzLAotCTB4YWQsIDB4MzQsIDB4N2QsIDB4OTgsIDB4ODksIDB4YzUsIDB4YzIsIDB4MzQsIDB4MzYsIDB4ODMsIDB4NmQsIDB4MzUsCi0JMHg4YiwgMHhhNiwgMHg0MiwgMHhhZSwgMHhjZiwgMHhjMCwgMHgyMiwgMHg3ZiwgMHg3NywgMHgwZiwgMHg4NiwgMHhhMCwKLQkweGI0LCAweGZkLCAweDhlLCAweDZjLCAweDY2LCAweDc2LCAweDQyLCAweDJjLCAweGE0LCAweGY5LCAweDk2LCAweDYzLAotCTB4NzIsIDB4MTYsIDB4NWIsIDB4YTksIDB4NGYsIDB4ZDcsIDB4MTMsIDB4Y2UsIDB4ZTcsIDB4YTksIDB4MDcsIDB4MzQsCi0JMHgwZSwgMHg5YSwgMHgzMywgMHg4MCwgMHhkOSwgMHg3NywgMHg3MSwgMHhhOCwgMHhiMSwgMHhhNSwgMHgxNywgMHhlNiwKLQkweDk2LCAweDZkLCAweDY4LCAweDlkLCAweDdhLCAweDQ2LCAweDk4LCAweDk5LCAweDE5LCAweDIxLCAweDUwLCAweGRhLAotCTB4NTYsIDB4ZTQsIDB4YjksIDB4NzQsIDB4OGUsIDB4NjcsIDB4MGIsIDB4ZGYsIDB4MzcsIDB4MGEsIDB4YjksIDB4NDUsCi0JMHg3NywgMHg5MiwgMHhiNiwgMHg1ZiwgMHhjOCwgMHhhOSwgMHg4MiwgMHhjZCwgMHhmZSwgMHg3YSwgMHg0ZSwgMHhmZiwKLQkweGVjLCAweDljLCAweDBmLCAweGQ0LCAweGI5LCAweGY3LCAweDlmLCAweDU0LCAweDczLCAweDdkLCAweDJmLCAweDY5LAotCTB4MmIsIDB4Y2MsIDB4ZTMsIDB4MTQsIDB4OTcsIDB4NWYsIDB4NDQsIDB4M2YsIDB4Y2QsIDB4N2UsIDB4OTksIDB4MDIsCi0JMHg3ZCwgMHgxNywgMHg3YSwgMHg3MiwgMHgxMCwgMHg5YiwgMHhiZCwgMHhhOSwgMHhkMiwgMHg2NywgMHg2OCwgMHhhYSwKLQkweDFlLCAweDI5LCAweGYwLCAweGI5LCAweDhjLCAweGQ2LCAweGJhLCAweGU5LCAweGM3LCAweDM2LCAweGZiLCAweGFmLAotCTB4NGEsIDB4YmUsIDB4M2QsIDB4MzgsIDB4YWEsIDB4ZmIsIDB4NGEsIDB4ZjMsIDB4YmIsIDB4ZmQsIDB4OTAsIDB4NWEsCi0JMHhlZiwgMHhhYiwgMHgyNywgMHgyZCwgMHgwMywgMHg1NiwgMHgzNywgMHg3ZCwgMHg1YiwgMHg2YSwgMHg1YiwgMHhiMiwKLQkweGI5LCAweDBkLCAweGNkLCAweDIyLCAweDdiLCAweGI1LCAweDRiLCAweDFiLCAweDg0LCAweDJjLCAweDgyLCAweGIxLAotCTB4NjUsIDB4MWIsIDB4YzcsIDB4YjgsIDB4ZDYsIDB4YjUsIDB4NTYsIDB4YjAsIDB4MzEsIDB4MTgsIDB4M2IsIDB4ODksCi0JMHhlYywgMHhlMSwgMHgwZiwgMHgyNSwgMHg5ZSwgMHgxZCwgMHhmNSwgMHg0OCwgMHgyMCwgMHgwNCwgMHhmNCwgMHg0YiwKLQkweDEyLCAweDJjLCAweGIwLCAweDU1LCAweDUzLCAweDZlLCAweGY0LCAweDAwLCAweGUyLCAweGI0LCAweDI0LCAweGJjLAotCTB4OTksIDB4ZDQsIDB4MmEsIDB4YTksIDB4OWEsIDB4YjEsIDB4NjIsIDB4YzQsIDB4MmIsIDB4MzYsIDB4YzYsIDB4OWUsCi0JMHhjOSwgMHg2YywgMHg5MSwgMHgyZCwgMHhiYiwgMHhjYywgMHg0MCwgMHgwMCwgMHgyNywgMHg3ZSwgMHhlMSwgMHhjYywKLQkweDRjLCAweDJjLCAweGM2LCAweDg5LCAweGVmLCAweDdlLCAweGU3LCAweGRlLCAweDZlLCAweDEwLCAweDg0LCAweGM0LAotCTB4MzUsIDB4NTQsIDB4YTksIDB4ZGEsIDB4ZGQsIDB4ZjcsIDB4ZjcsIDB4M2MsIDB4YmYsIDB4NzMsIDB4YmUsIDB4ZjMsCi0JMHg5ZCwgMHg3MywgMHg3ZSwgMHhkNywgMHg5MiwgMHhjYiwgMHg1OCwgMHhjYiwgMHhmZiwgMHgwZSwgMHg5YiwgMHhlZCwKLQkweDM2LCAweDQ1LCAweGQxLCAweDk4LCAweDFiLCAweGJjLCAweDZhLCAweDljLCAweDUzLCAweDJkLCAweDFkLCAweGIxLAotCTB4OTksIDB4MWMsIDB4YmQsIDB4NTksIDB4OWUsIDB4MjUsIDB4MjUsIDB4NzcsIDB4YjMsIDB4M2UsIDB4ZTQsIDB4ZjcsCi0JMHg3NCwgMHg5YiwgMHhiYywgMHhkZiwgMHg4MywgMHg2NywgMHhkMiwgMHgxZSwgMHg2YywgMHgyMCwgMHhiNiwgMHhhNiwKLQkweDRjLCAweDZjLCAweGJkLCAweDFlLCAweDFmLCAweGQ5LCAweGQ4LCAweDZlLCAweDA1LCAweGRiLCAweGY1LCAweDY0LAotCTB4YjgsIDB4NTMsIDB4NzMsIDB4ZmEsIDB4YWMsIDB4YTksIDB4MmIsIDB4OGUsIDB4MjYsIDB4MzksIDB4MDcsIDB4OTEsCi0JMHhiZCwgMHhjNCwgMHg3NiwgMHhkOSwgMHhkOCwgMHg1NywgMHhjZSwgMHgyNCwgMHhhYywgMHgwYywgMHg0NiwgMHg1YiwKLQkweDk1LCAweGZlLCAweDY4LCAweDMxLCAweGU3LCAweDhiLCAweDI4LCAweGM5LCAweDkwLCAweDZkLCAweDc3LCAweDI5LAotCTB4ZTMsIDB4YTksIDB4MTUsIDB4OGIsIDB4NTYsIDB4MTIsIDB4N2YsIDB4YjQsIDB4ODAsIDB4NjYsIDB4MmIsIDB4YzEsCi0JMHhiMywgMHg4MSwgMHgzOSwgMHg5OCwgMHg1MiwgMHg5NywgMHg2MiwgMHg3MywgMHgyMCwgMHg4NywgMHg1YywgMHg2OSwKLQkweDNmLCAweDM2LCAweGFhLCAweGI5LCAweGQ4LCAweDE0LCAweGY4LCAweDBiLCAweGUwLCAweGUxLCAweDNjLCAweGVhLAotCTB4YjEsIDB4YzUsIDB4MzksIDB4NzMsIDB4MzgsIDB4NmYsIDB4MWUsIDB4MzEsIDB4ZTMsIDB4MzksIDB4NzMsIDB4ZGYsCi0JMHhlMywgMHhiMiwgMHg1NywgMHhhZSwgMHhiMywgMHg1OSwgMHg0OSwgMHgxMiwgMHhmMywgMHgyYiwgMHg0YywgMHhkYiwKLQkweDlkLCAweGY5LCAweDdlLCAweDI4LCAweDY1LCAweGU2LCAweDYwLCAweDVmLCAweDVlLCAweDZjLCAweGNhLCAweGY5LAotCTB4ZjcsIDB4ZGYsIDB4ZDcsIDB4ZDMsIDB4YWIsIDB4Y2IsIDB4YzksIDB4ZDMsIDB4YTksIDB4M2YsIDB4Y2IsIDB4MTEsCi0JMHhhZSwgMHg1YywgMHg4MiwgMHhlNywgMHgwMywgMHg4ZCwgMHgyOCwgMHhkMiwgMHg5YSwgMHhmMSwgMHg2ZCwgMHgzNSwKLQkweDQyLCAweDRjLCAweDFmLCAweGMyLCAweDc3LCAweGNjLCAweDMxLCAweDY0LCAweDNjLCAweGIzLCAweDY2LCAweGM0LAotCTB4N2YsIDB4YmYsIDB4YjMsIDB4NDMsIDB4ZmIsIDB4YmEsIDB4ZjgsIDB4ZDIsIDB4Y2EsIDB4YzksIDB4YjQsIDB4ZGIsCi0JMHg5YywgMHhlOCwgMHgxOSwgMHg5MCwgMHg0ZiwgMHgwNywgMHhiZSwgMHgxMywgMHhiMiwgMHg3MiwgMHhiMCwgMHhmMSwKLQkweDIxLCAweDI3LCAweDYyLCAweDAzLCAweDBlLCAweGE0LCAweDgzLCAweDY0LCAweDNmLCAweDk1LCAweDM3LCAweDhmLAotCTB4M2QsIDB4YzQsIDB4YjEsIDB4YWQsIDB4YmMsIDB4YzUsIDB4NzcsIDB4MjksIDB4ZDcsIDB4NzMsIDB4NGUsIDB4MjcsCi0JMHhiOSwgMHgxMCwgMHhkNCwgMHgwYSwgMHhiNiwgMHgyOSwgMHgxZiwgMHgyZiwgMHg4MCwgMHg3YiwgMHg0OCwgMHhlYSwKLQkweDRlLCAweDkzLCAweGNhLCAweDk2LCAweGI0LCAweGQ1LCAweGU2LCAweDdiLCAweDUyLCAweGFiLCAweGNhLCAweGI1LAotCTB4ODEsIDB4YmUsIDB4ODgsIDB4ZGIsIDB4NzUsIDB4YjAsIDB4OGQsIDB4OGIsIDB4NzEsIDB4NzEsIDB4M2UsIDB4NmEsCi0JMHg4NiwgMHgwYSwgMHhmOCwgMHhhNywgMHhhMiwgMHhmNCwgMHgyMCwgMHgxZiwgMHg4YywgMHgzNywgMHgyYiwgMHgyZiwKLQkweDQ2LCAweDAzLCAweDI4LCAweDY1LCAweGJjLCAweDVlLCAweGQ2LCAweDY0LCAweGY1LCAweDdmLCAweDI5LCAweGZkLAotCTB4NzUsIDB4ZWIsIDB4NzcsIDB4YTIsIDB4YmQsIDB4NTQsIDB4Y2UsIDB4YWIsIDB4MDYsIDB4ODUsIDB4ZGEsIDB4OTQsCi0JMHhmMSwgMHg4MiwgMHg4NSwgMHhmMSwgMHhhNiwgMHgyZiwgMHhlZCwgMHhiZSwgMHg1NiwgMHhlNywgMHg5MiwgMHgzNSwKLQkweDI5LCAweGMyLCAweDViLCAweGQ1LCAweGYyLCAweDI2LCAweDg5LCAweDliLCAweGY5LCAweGEzLCAweDE5LCAweDc3LAotCTB4Y2IsIDB4MWEsIDB4NjQsIDB4ZWMsIDB4N2MsIDB4ZTQsIDB4MGUsIDB4YzksIDB4ZDgsIDB4MDUsIDB4YzgsIDB4YjksCi0JMHhiNiwgMHgxNiwgMHg5OSwgMHg4NywgMHg2MSwgMHhkZSwgMHhiOCwgMHhmOCwgMHg1NywgMHg5OSwgMHg2ZiwgMHg1MiwKLQkweDE5LCAweDRjLCAweGNiLCAweDFhLCAweGIyLCAweGYzLCAweDllLCAweDMyLCAweDllLCAweDUxLCAweDBiLCAweGU4LAotCTB4Y2YsIDB4ODcsIDB4OGQsIDB4MGQsIDB4MTUsIDB4ODYsIDB4ZTEsIDB4NWYsIDB4NzQsIDB4ZGMsIDB4NDgsIDB4YWQsCi0JMHgzNSwgMHhiMSwgMHhkNiwgMHhkOCwgMHg5ZCwgMHg3MCwgMHg2MiwgMHgxNywgMHhlNSwgMHhiNiwgMHgzOSwgMHg3OCwKLQkweDU4LCAweDc4LCAweDVjLCAweGU2LCAweDVmLCAweDU2LCAweDZlLCAweDQ3LCAweDI4LCAweGI3LCAweGI5LCAweDk5LAotCTB4NzMsIDB4OWMsIDB4NTQsIDB4OGUsIDB4NWUsIDB4ZjMsIDB4ZjcsIDB4YjIsIDB4NDYsIDB4NTksIDB4OTcsIDB4ODIsCi0JMHg3MiwgMHg0ZCwgMHhkNiwgMHg2NSwgMHg0MywgMHg5OSwgMHg5NiwgMHg4ZiwgMHg3MiwgMHhjYSwgMHhhNywgMHhjYywKLQkweDVjLCAweDUzLCAweGIzLCAweGYyLCAweDZlLCAweDE0LCAweDZhLCAweDA5LCAweGI5LCAweDQzLCAweGU5LCAweGI4LAotCTB4YjUsIDB4YWUsIDB4MjksIDB4Y2EsIDB4ZTcsIDB4Y2MsIDB4MzUsIDB4OWQsIDB4OTgsIDB4MmQsIDB4NjcsIDB4YTEsCi0JMHg1NywgMHg2MiwgMHhkMywgMHgzMywgMHhkZiwgMHhkZiwgMHg5YSwgMHg5NCwgMHg3MSwgMHhlZCwgMHg3NCwgMHg5YywKLQkweDBhLCAweGI2LCAweDg3LCAweGM0LCAweDVmLCAweGUwLCAweGU1LCAweGU1LCAweDUxLCAweDRiLCAweDA2LCAweDM2LAotCTB4ZjMsIDB4MGMsIDB4YzQsIDB4MDYsIDB4NjQsIDB4ZmYsIDB4ZDksIDB4YmQsIDB4MzcsIDB4MmIsIDB4NGYsIDB4NDUsCi0JMHhhNSwgMHhiZiwgMHg4NiwgMHgxYSwgMHhiMywgMHg5ZiwgMHgxNSwgMHgzNywgMHhkYiwgMHhhOCwgMHg3ZiwgMHhjYiwKLQkweDc5LCAweDM2LCAweGI2LCAweDcxLCAweDRiLCAweDM3LCAweDNkLCAweGE5LCAweDU2LCAweGNlLCAweDJiLCAweGU3LAotCTB4MzQsIDB4YTksIDB4NzQsIDB4NzIsIDB4NGUsIDB4OTgsIDB4NjcsIDB4ZmIsIDB4NWYsIDB4Y2IsIDB4MmQsIDB4NWIsCi0JMHg5ZiwgMHhhNCwgMHg2ZCwgMHhmMiwgMHgzNywgMHhhNywgMHg4ZCwgMHhmYSwgMHg1ZSwgMHgwMCwgMHhjNywgMHg5MCwKLQkweGNiLCAweGNjLCAweGYxLCAweGM4LCAweGQ4LCAweGNmLCAweDQ1LCAweGNiLCAweDkwLCAweDc3LCAweDMwLCAweGRiLAotCTB4ZDcsIDB4ZjIsIDB4ZWQsIDB4NTYsIDB4OGQsIDB4MzAsIDB4NmIsIDB4OGYsIDB4ODIsIDB4OGYsIDB4ZTIsIDB4MjcsCi0JMHgyMiwgMHg0YSwgMHhmOCwgMHg1YSwgMHg5ZCwgMHg0ZiwgMHg3MiwgMHg1ZiwgMHg1MiwgMHhmZiwgMHhjYywgMHhlNSwKLQkweDdhLCAweDI0LCAweDdmLCAweGFhLCAweDEwLCAweDMzLCAweDZjLCAweGM0LCAweGU5LCAweGU1LCAweDFlLCAweDA3LAotCTB4NzEsIDB4NmUsIDB4MDMsIDB4YmUsIDB4MzQsIDB4MjIsIDB4MTUsIDB4ZTEsIDB4ODAsIDB4MTMsIDB4NTYsIDB4OGMsCi0JMHhkZSwgMHg4ZSwgMHg1YywgMHg1OCwgMHgxOCwgMHg0NCwgMHgyZCwgMHg4ZCwgMHhkMiwgMHgxZiwgMHg3MywgMHhhZiwKLQkweGU0LCAweDAwLCAweGU4LCAweDRlLCAweDdmLCAweDY5LCAweDRjLCAweDU1LCAweDM4LCAweGU4LCAweGYzLCAweGFmLAotCTB4ZTUsIDB4ZDYsIDB4NjgsIDB4NzcsIDB4ODYsIDB4MzEsIDB4Y2MsIDB4NjcsIDB4YmQsIDB4ZTksIDB4ZWMsIDB4MzksCi0JMHg5MSwgMHg1YiwgMHg5MCwgMHg2YiwgMHgzZSwgMHhhZCwgMHhmZCwgMHhiYiwgMHhiMSwgMHhmZSwgMHg4NiwgMHhiNiwKLQkweDU5LCAweDZjLCAweGI2LCAweDYyLCAweGVkLCAweDIzLCAweDI2LCAweDM2LCAweDE3LCAweGEyLCAweDc3LCAweGI3LAotCTB4MzcsIDB4OTksIDB4MDIsIDB4NzksIDB4OGIsIDB4NjYsIDB4OWIsIDB4MmIsIDB4MzEsIDB4ODIsIDB4MWQsIDB4ZGUsCi0JMHhiZSwgMHg2NiwgMHhjNiwgMHhmYSwgMHhjNCwgMHg0ZSwgMHg0ZiwgMHgwYSwgMHhmZiwgMHg1YywgMHgyZSwgMHg3NiwKLQkweGM0LCAweDc4LCAweGNkLCAweDUzLCAweDZhLCAweDJiLCAweDkzLCAweGI1LCAweDliLCAweGFiLCAweGIyLCAweDBmLAotCTB4ZTQsIDB4NjEsIDB4NDMsIDB4NDMsIDB4MWUsIDB4NTIsIDB4NmQsIDB4YzQsIDB4YWMsIDB4ODEsIDB4NDgsIDB4MmIsCi0JMHg4NywgMHg3NywgMHhlNSwgMHgzNywgMHhiZCwgMHhmNSwgMHhiZCwgMHg2ZiwgMHhmOCwgMHhiZCwgMHhmNCwgMHg5MywKLQkweDQwLCAweDZlLCAweDhjLCAweDczLCAweDIyLCAweDgzLCAweDY5LCAweDAzLCAweGRlLCAweDg4LCAweGNkLCAweDI2LAotCTB4ZmQsIDB4N2YsIDB4NmIsIDB4OTAsIDB4NjMsIDB4YjMsIDB4YWYsIDB4OGMsIDB4YzEsIDB4YjksIDB4ZmYsIDB4YzgsCi0JMHgxNiwgMHgyNCwgMHhlZSwgMHhmYiwgMHhiMiwgMHg1YywgMHhmMiwgMHg4ZSwgMHg2YSwgMHhhZCwgMHg4MiwgMHhjMiwKLQkweDgxLCAweDQyLCAweDE0LCAweDMwLCAweDRlLCAweGRmLCAweDU1LCAweGU5LCAweGViLCAweGQwLCAweDZkLCAweGY5LAotCTB4MzgsIDB4N2QsIDB4ZDcsIDB4N2YsIDB4NDEsIDB4YWEsIDB4MzIsIDB4MDcsIDB4YWUsIDB4NWEsIDB4NjAsIDB4NDUsCi0JMHhkYywgMHgwNiwgMHg1YiwgMHgyZCwgMHhiMSwgMHgzNywgMHgwNCwgMHgzNCwgMHg4ZiwgMHhmMywgMHhkYywgMHgwNiwKLQkweDE0LCAweDNjLCAweDkxLCAweGI0LCAweGUxLCAweGMxLCAweGE0LCAweDFkLCAweGFiLCAweDkzLCAweGY4LCAweGFiLAotCTB4MWEsIDB4NjAsIDB4YmEsIDB4MWEsIDB4ZmUsIDB4ZjYsIDB4MTksIDB4MDUsIDB4OWIsIDB4OGIsIDB4NjEsIDB4ZmEsCi0JMHhmOCwgMHhkNiwgMHhkNSwgMHg4YywgMHg0YiwgMHg1NywgMHg4ZCwgMHgxMywgMHhjZiwgMHhkOCwgMHhkNiwgMHhjOSwKLQkweDk4LCAweGNkLCAweGQxLCAweDZmLCAweDQ3LCAweDc1LCAweDNmLCAweDZlLCAweGNmLCAweDA1LCAweDQyLCAweDRlLAotCTB4ZjgsIDB4NjcsIDB4ZTgsIDB4NjcsIDB4Y2EsIDB4MWMsIDB4ZjAsIDB4NGYsIDB4OWQsIDB4YjcsIDB4ZmIsIDB4M2IsCi0JMHhhYiwgMHhlZCwgMHgzYywgMHhkYywgMHg1YSwgMHg1OSwgMHg4YiwgMHgwYiwgMHgwZiwgMHg1MSwgMHg5ZiwgMHg2YiwKLQkweDA2LCAweGQ4LCAweGJlLCAweGQ2LCAweDA2LCAweDU1LCAweDUzLCAweDcwLCAweGU1LCAweDcxLCAweGM5LCAweGZiLAotCTB4Y2EsIDB4MzMsIDB4YzksIDB4NTUsIDB4MjgsIDB4MjgsIDB4MWUsIDB4YjAsIDB4MTMsIDB4YzMsIDB4ZGUsIDB4MzQsCi0JMHg0ZSwgMHg1NywgMHgwYSwgMHg3ZSwgMHgwMywgMHg0ZiwgMHg3MCwgMHg2ZCwgMHg2ZSwgMHhmZSwgMHhhNiwgMHhkNiwKLQkweGJhLCAweGIwLCAweDcwLCAweGE5LCAweDhhLCAweDc1LCAweDQzLCAweDVmLCAweDlhLCAweDNhLCAweDI1LCAweGUzLAotCTB4MzgsIDB4NjksIDB4NTMsIDB4MzksIDB4YjQsIDB4ZjEsIDB4ODMsIDB4NjYsIDB4MGQsIDB4ZDEsIDB4YzYsIDB4M2QsCi0JMHhkYSwgMHg1MSwgMHgzMCwgMHgwMCwgMHhhYywgMHg4YSwgMHhlMywgMHg5MSwgMHg0MiwgMHhmOCwgMHhjMywgMHhiMiwKLQkweGM2LCAweGJhLCAweDI1LCAweDBlLCAweGY2LCAweDJkLCAweDQ0LCAweGViLCAweGI4LCAweGQ1LCAweGVmLCAweGZlLAotCTB4ZjEsIDB4OTIsIDB4MGEsIDB4MmIsIDB4MDcsIDB4ZmUsIDB4YTcsIDB4NmIsIDB4ZGEsIDB4M2QsIDB4MjEsIDB4M2YsCi0JMHgzNiwgMHgyNCwgMHhhOSwgMHg3MywgMHgzNiwgMHgwZiwgMHg4NiwgMHgzMiwgMHhiOSwgMHhlOCwgMHhmNSwgMHgyOSwKLQkweGVmLCAweGFjLCAweDlhLCAweGYzLCAweGRmLCAweDE0LCAweDY2LCAweGVhLCAweGQxLCAweGI0LCAweDg1LCAweDE5LAotCTB4OGUsIDB4MTMsIDB4NTEsIDB4ZDYsIDB4NTMsIDB4NzYsIDB4NDMsIDB4MTMsIDB4MDYsIDB4YTIsIDB4YmEsIDB4ODEsCi0JMHgzMSwgMHhmZSwgMHhiZCwgMHhhZCwgMHg0YiwgMHhkZSwgMHg2MywgMHg1MiwgMHg3OSwgMHgyNiwgMHhmNiwgMHg5NSwKLQkweDExLCAweGM5LCAweGQ4LCAweGYzLCAweDBmLCAweDEyLCAweDAxLCAweDY1LCAweDUzLCAweDBjLCAweDc4LCAweDk1LAotCTB4ZmUsIDB4ZjQsIDB4MTAsIDB4ZmYsIDB4NDYsIDB4MTIsIDB4OTIsIDB4NDcsIDB4YTIsIDB4ZWMsIDB4NjksIDB4ZDcsCi0JMHhkYiwgMHg1MiwgMHhjMCwgMHg3MCwgMHgwMiwgMHhlMSwgMHhmZCwgMHg0YiwgMHg4NCwgMHhjMywgMHgxNywgMHg3MCwKLQkweDNlLCAweDVhLCAweDBkLCAweGRiLCAweGE0LCAweGY5LCAweDc3LCAweDkwLCAweDdmLCAweDEzLCAweDNjLCAweDUzLAotCTB4Y2UsIDB4ODcsIDB4YzAsIDB4OTgsIDB4MDMsIDB4ZTEsIDB4MzEsIDB4MDIsIDB4ZWQsIDB4NTgsIDB4MDAsIDB4NTMsCi0JMHhmNCwgMHg4MSwgMHg1NywgMHg0NywgMHg1NCwgMHgxNCwgMHgxZCwgMHgyYSwgMHhjMywgMHhhNywgMHhhMywgMHhjNCwKLQkweGM3LCAweDAzLCAweDE2LCAweGVmLCAweGRmLCAweDMwLCAweDI2LCAweGY1LCAweDQyLCAweGQ5LCAweDlmLCAweGQ0LAotCTB4ZDcsIDB4YzUsIDB4OWUsIDB4ZjIsIDB4NzAsIDB4MjgsIDB4NTksIDB4NjYsIDB4ZDYsIDB4ZDgsIDB4MmYsIDB4ZTgsCi0JMHgxYywgMHg1YiwgMHg5NSwgMHhkYSwgMHg2OCwgMHgxYiwgMHgwZSwgMHg0NywgMHg3ZCwgMHg5ZSwgMHgzZSwgMHhlYSwKLQkweDdjLCAweGM0LCAweDIxLCAweDM2LCAweDE2LCAweGMyLCAweGFiLCAweGQxLCAweDZjLCAweDhkLCAweGNkLCAweGM3LAotCTB4NzgsIDB4ZDcsIDB4MDksIDB4OGYsIDB4YjMsIDB4OGMsIDB4ZjIsIDB4OTUsIDB4NjcsIDB4NTksIDB4NWYsIDB4MmEsCi0JMHg3YiwgMHg5NiwgMHg3YywgMHg3ZSwgMHg5NiwgMHhiNywgMHhjYywgMHhmZSwgMHhmZCwgMHhhNCwgMHgyMSwgMHhiNSwKLQkweGRmLCAweGQ3LCAweDI2LCAweGJjLCAweDdkLCAweDI5LCAweGU4LCAweGE2LCAweGFmLCAweDFjLCAweGFkLCAweGYzLAotCTB4MjYsIDB4MjMsIDB4OTAsIDB4ZjMsIDB4MGQsIDB4NzEsIDB4MGQsIDB4MWYsIDB4NTMsIDB4ZjcsIDB4MDMsIDB4OTQsCi0JMHhmNSwgMHg1ZiwgMHhkMywgMHhiNywgMHg0YiwgMHg5ZSwgMHhiYywgMHgxNCwgMHhiYiwgMHhmYSwgMHhjYiwgMHhiMCwKLQkweGIzLCAweDNmLCAweDgyLCAweGRlLCAweDI1LCAweDZiLCAweDcxLCAweDMyLCAweDZhLCAweDYwLCAweDQzLCAweGQwLAotCTB4YzAsIDB4YWEsIDB4YTAsIDB4MzcsIDB4ZjAsIDB4MDMsIDB4ZDQsIDB4MzcsIDB4MWUsIDB4YzYsIDB4NDMsIDB4ZTQsCi0JMHgxMCwgMHgyYSwgMHg2NSwgMHhmMiwgMHgyNCwgMHgzZSwgMHhkOCwgMHhlZCwgMHhjMCwgMHhiMywgMHhmYSwgMHgzNywKLQkweDY5LCAweGMzLCAweDg2LCAweGYxLCAweGFiLCAweGM1LCAweGYzLCAweDMwLCAweDk0LCAweGE4LCAweDU3LCAweGJiLAotCTB4YjksIDB4YmUsIDB4ZjAsIDB4NWEsIDB4OWUsIDB4NTUsIDB4ODMsIDB4MDMsIDB4MWIsIDB4ZjUsIDB4YmYsIDB4NjIsCi0JMHg1YiwgMHhiNywgMHhjZCwgMHhhMSwgMHhjOSwgMHg3NywgMHgxYiwgMHhmZCwgMHhhOSwgMHg5YywgMHg2NSwgMHg4NCwKLQkweGZhLCAweDY1LCAweGY5LCAweGIyLCAweDcwLCAweGE2LCAweDNlLCAweGYxLCAweDZjLCAweDQ4LCAweDMwLCAweGJmLAotCTB4MTAsIDB4MjcsIDB4MjgsIDB4YjcsIDB4MzcsIDB4OTIsIDB4NjEsIDB4NDksIDB4NDUsIDB4MjksIDB4MWIsIDB4NDMsCi0JMHg1ZCwgMHg3OCwgMHg4YSwgMHg3YywgMHhlMywgMHgwMywgMHgxMiwgMHg4MSwgMHg3YiwgMHhlMiwgMHgwYSwgMHgxYSwKLQkweGViLCAweDc0LCAweDljLCAweDRkLCAweDNmLCAweDg5LCAweDc3LCAweDQ2LCAweDlhLCAweGYwLCAweDM2LCAweDdkLAotCTB4ZmEsIDB4YzIsIDB4ZmYsIDB4ZTksIDB4NjUsIDB4MmMsIDB4ZWYsIDB4YzEsIDB4ZTksIDB4NzQsIDB4MTMsIDB4ZGUsCi0JMHg4YywgMHg3YSwgMHhkYiwgMHg1ZSwgMHgyMCwgMHgzZiwgMHhmYSwgMHg3OSwgMHhkYSwgMHg4MSwgMHgzYiwgMHhlMiwKLQkweDhjLCAweDdiLCAweDM4LCAweDhlLCAweDNmLCAweGVlLCAweGMwLCAweGM1LCAweGI0LCAweDhhLCAweGMzLCAweDNjLAotCTB4MWYsIDB4NDcsIDB4NzAsIDB4MjEsIDB4ZTMsIDB4NWUsIDB4MGYsIDB4MGUsIDB4MGUsIDB4M2UsIDB4ODgsIDB4YTksCi0JMHhkNCwgMHg4MywgMHgzOCwgMHg5NiwgMHhmYywgMHhjMCwgMHg3MCwgMHg2OSwgMHg1MiwgMHgyNywgMHg3MywgMHhlMSwKLQkweDIyLCAweDYzLCAweGIyLCAweDY5LCAweDRhLCAweGEzLCAweDcwLCAweDY5LCAweDFiLCAweGZkLCAweGJjLCAweDE2LAotCTB4MTEsIDB4YjksIDB4YmYsIDB4YzMsIDB4ZGYsIDB4ZWUsIDB4ODksIDB4MzcsIDB4NjIsIDB4ZmYsIDB4MTgsIDB4NDUsCi0JMHg5YSwgMHhkMCwgMHg5MSwgMHg4OCwgMHhjOSwgMHg1YywgMHgyMSwgMHhjNCwgMHhjOCwgMHgwYiwgMHg3NywgMHhmNSwKLQkweDFiLCAweGY0LCAweDE3LCAweDc3LCAweDQ4LCAweDBjLCAweGEyLCAweGI0LCAweGQ2LCAweGZlLCAweDczLCAweDY2LAotCTB4MWYsIDB4OGQsIDB4YjMsIDB4NmEsIDB4YTAsIDB4ZjksIDB4M2MsIDB4MWIsIDB4Y2EsIDB4OTUsIDB4ZmQsIDB4ZmUsCi0JMHg3NywgMHhhMiwgMHhjMSwgMHhmNCwgMHg0ZCwgMHg0NywgMHhhZSwgMHg5ZCwgMHg0NywgMHgyMywgMHhjZiwgMHhlMywKLQkweDQ5LCAweDljLCAweGRkLCAweGJkLCAweDE2LCAweGVmLCAweDEwLCAweGVmLCAweDhhLCAweDE3LCAweGZiLCAweDNhLAotCTB4OWQsIDB4YjYsIDB4N2EsIDB4OGUsIDB4OWQsIDB4MzYsIDB4NTIsIDB4OTUsIDB4MjIsIDB4ZDMsIDB4YjUsIDB4ZjgsCi0JMHg2NSwgMHg1NCwgMHg2NCwgMHg5YSwgMHgyNiwgMHhmZSwgMHhmOSwgMHgzYywgMHg3ZSwgMHhmYiwgMHg1YiwgMHhiNCwKLQkweDA5LCAweGI3LCAweGFkLCAweGJiLCAweGMxLCAweGFhLCAweGU5LCAweDE1LCAweDJlLCAweDc1LCAweGUxLCAweDkyLAotCTB4YjksIDB4MzYsIDB4NTksIDB4ZWIsIDB4OWYsIDB4NWIsIDB4ZGYsIDB4MmYsIDB4OGQsIDB4NTUsIDB4OTUsIDB4YjIsCi0JMHhiZSwgMHg4OCwgMHg5MSwgMHhhMywgMHg2OSwgMHg4MSwgMHgxYywgMHg0NSwgMHhmYywgMHg2YywgMHhjMCwgMHhhYywKLQkweDYzLCAweGQ0LCAweGM1LCAweGJiLCAweDYwLCAweDBmLCAweDE2LCAweDMyLCAweDNlLCAweGYzLCAweGNlLCAweDc0LAotCTB4ZTAsIDB4MWQsIDB4NWMsIDB4OWUsIDB4NzAsIDB4NjEsIDB4NDEsIDB4M2MsIDB4ODAsIDB4NTcsIDB4MjYsIDB4NzIsCi0JMHgyYiwgMHg5MSwgMHhmZiwgMHgwYiwgMHg5YywgMHhlNywgMHg3NywgMHg1ZiwgMHhkYywgMHhiMiwgMHhiNywgMHhlZSwKLQkweGQwLCAweDVhLCAweGFjLCAweDQ4LCAweGNiLCAweGZlLCAweDllLCAweGU0LCAweDQ0LCAweDNhLCAweGMyLCAweDY5LAotCTB4ZDksIDB4NjcsIDB4OGMsIDB4YjYsIDB4MjEsIDB4ZmIsIDB4MmMsIDB4ZmIsIDB4OWEsIDB4N2QsIDB4YmUsIDB4Y2IsCi0JMHhiNSwgMHhjZiwgMHhhMywgMHgyZCwgMHg2NSwgMHg3ZCwgMHg0NywgMHgxMSwgMHgwZSwgMHgyNiwgMHg1NSwgMHg5YywKLQkweGQwLCAweDhiLCAweDcwLCAweDRlLCAweDk1LCAweDdjLCAweGJkLCAweDhiLCAweDNlLCAweGM0LCAweDgxLCAweDY2LAotCTB4YzYsIDB4NGIsIDB4YzMsIDB4ZDEsIDB4M2MsIDB4M2MsIDB4YTMsIDB4M2EsIDB4NzAsIDB4NGEsIDB4NzcsIDB4ZTAsCi0JMHg5OCwgMHg3ZSwgMHgxYiwgMHhiMSwgMHg1ZSwgMHhlMiwgMHgwOCwgMHhkMywgMHhiZiwgMHg5MCwgMHgzMSwgMHg2NSwKLQkweGY1LCAweDU4LCAweDllLCAweDE3LCAweGMyLCAweDUzLCAweDVhLCAweDg2LCAweDM3LCAweDI1LCAweGVmLCAweDY4LAotCTB4YjYsIDB4NzEsIDB4NDksIDB4YWQsIDB4MTcsIDB4ODcsIDB4MjgsIDB4YjMsIDB4OWMsIDB4NTgsIDB4MzksIDB4MmUsCi0JMHhiNSwgMHgzNSwgMHhkZSwgMHhhMiwgMHgxZiwgMHg2OSwgMHhhYywgMHhmNiwgMHhiMSwgMHhiMSwgMHhiOSwgMHhmMiwKLQkweGRhLCAweDk4LCAweDFlLCAweDI4LCAweDQ3LCAweDJhLCAweDJjLCAweDljLCAweGM4LCAweGQ2LCAweGUxLCAweGIyLAotCTB4YmUsIDB4NmMsIDB4NzYsIDB4YmYsIDB4ZDksIDB4ZmIsIDB4N2MsIDB4YTEsIDB4NTIsIDB4YjAsIDB4YzksIDB4NjEsCi0JMHhjNiwgMHg4MiwgMHg2ZCwgMHhkZiwgMHhhNCwgMHg4ZiwgMHhhMiwgMHhjZiwgMHg1ZSwgMHhiYiwgMHg0NSwgMHg2MiwKLQkweDQzLCAweDViLCAweGQzLCAweGJhLCAweDZmLCAweDJlLCAweGQ3LCAweDcyLCAweDYwLCAweDM3LCAweGI5LCAweGEwLAotCTB4ZTMsIDB4NjUsIDB4OGIsIDB4YmYsIDB4YmIsIDB4NWUsIDB4ZDYsIDB4Y2MsIDB4Y2YsIDB4YzIsIDB4OTcsIDB4MTcsCi0JMHg5OCwgMHg5ZiwgMHhlYSwgMHhjYiwgMHhiZSwgMHhkNCwgMHg3NSwgMHg1ZiwgMHg2NiwgMHhmMSwgMHg2MywgMHhmMywKLQkweGFlLCAweDEwLCAweGZhLCAweGY0LCAweDg4LCAweDcyLCAweDdmLCAweDQ4LCAweDc4LCAweGU2LCAweDZjLCAweDhlLAotCTB4MTEsIDB4NTAsIDB4NGUsIDB4NDUsIDB4MjMsIDB4NDYsIDB4YjUsIDB4OTYsIDB4MWYsIDB4MjksIDB4MjYsIDB4ZjcsCi0JMHg2ZSwgMHhmNCwgMHg2YiwgMHhjNCwgMHg2YSwgMHg4OSwgMHhlOSwgMHgzNCwgMHg5YywgMHhlMSwgMHg3OSwgMHgxMCwKLQkweDYyLCAweGE5LCAweGUzLCAweGZmLCAweDBmLCAweGQxLCAweGRkLCAweDY4LCAweGNmLCAweDM3LCAweDcxLCAweGM5LAotCTB4MzAsIDB4NzYsIDB4MDUsIDB4MjUsIDB4MDcsIDB4MjEsIDB4ZTMsIDB4M2EsIDB4ZjAsIDB4MTEsIDB4Y2YsIDB4ZjksCi0JMHgzNywgMHgyMywgMHgwNSwgMHhmOCwgMHgzMCwgMHhhNSwgMHhlMSwgMHg1YywgMHg3YSwgMHgyZCwgMHg3NiwgMHg0YywKLQkweDU4LCAweDFjLCAweGU0LCAweDU4LCAweGRhLCAweGUyLCAweDQ0LCAweDEyLCAweGQzLCAweGVmLCAweDI3LCAweDQ3LAotCTB4ODgsIDB4MjUsIDB4NWUsIDB4MzcsIDB4ZjIsIDB4MzQsIDB4ZGYsIDB4OTQsIDB4ZGYsIDB4ZWUsIDB4YzAsIDB4YmUsCi0JMHhmNCwgMHgzNCwgMHgyNiwgMHhmYSwgMHgzZiwgMHgzMywgMHhlYywgMHg1YSwgMHgxNywgMHgzZSwgMHgwZCwgMHg0ZSwKLQkweDYzLCAweGZjLCAweDgwLCAweGQ0LCAweDUwLCAweDQzLCAweGQ4LCAweDM1LCAweDE4LCAweDQwLCAweDZmLCAweGMyLAotCTB4ODYsIDB4OWQsIDB4NGIsIDB4NWEsIDB4YjEsIDB4NmIsIDB4YTIsIDB4MDUsIDB4OTEsIDB4NDMsIDB4MWUsIDB4ZWMsCi0JMHg0YywgMHhhNywgMHgzMSwgMHgzNSwgMHgzMiwgMHg4ZCwgMHg5MywgMHg0OSwgMHg4ZCwgMHhmMSwgMHhlNCwgMHgzNCwKLQkweDRlLCAweGE0LCAweDM4LCAweDY2LCAweGUyLCAweDNkLCAweDQ0LCAweDM4LCAweGM2LCAweGI2LCAweGE0LCAweGE2LAotCTB4MGUsIDB4OWIsIDB4N2IsIDB4OWMsIDB4NDYsIDB4NzcsIDB4ZWEsIDB4NTYsIDB4MzksIDB4MTMsIDB4YWUsIDB4MjcsCi0JMHhkMSwgMHhkMywgMHg2ZSwgMHhkNSwgMHg0NSwgMHg4OCwgMHhiZCwgMHg2OSwgMHg0ZCwgMHhlOSwgMHhlMywgMHhmOSwKLQkweDFkLCAweDRlLCAweDY3LCAweDZiLCAweDI0LCAweDM3LCAweGU3LCAweDRhLCAweDQyLCAweGU4LCAweDFiLCAweDZjLAotCTB4NjUsIDB4OWYsIDB4MDAsIDB4YmEsIDB4MTMsIDB4NTIsIDB4ODcsIDB4ZjYsIDB4NzEsIDB4NGUsIDB4MDMsIDB4YmYsCi0JMHhkNiwgMHhiZCwgMHhlZSwgMHgwNSwgMHhmYywgMHgxYywgMHhkNSwgMHgzYiwgMHhiMSwgMHg4OSwgMHg2MywgMHg0ZCwKLQkweDMxLCAweDQ2LCAweGQyLCAweDE0LCAweDZmLCAweDYzLCAweDA0LCAweDc2LCAweGZjLCAweDRhLCAweDI3LCAweDFmLAotCTB4YWEsIDB4YjAsIDB4ZTMsIDB4NTUsIDB4ZWEsIDB4NWEsIDB4YjgsIDB4ZDQsIDB4OGUsIDB4ZmEsIDB4MjAsIDB4N2QsCi0JMHg3OCwgMHhjNiwgMHhhNywgMHg3ZiwgMHg5MiwgMHg1NCwgMHhmMCwgMHgyMCwgMHhmMSwgMHhmNiwgMHg4ZCwgMHg2MCwKLQkweDdkLCAweGZiLCAweDRhLCAweDYxLCAweDdiLCAweDA3LCAweDE0LCAweDVjLCAweGQ2LCAweGFlLCAweDFhLCAweDExLAotCTB4ZWEsIDB4ODcsIDB4Y2IsIDB4OWYsIDB4M2QsIDB4YTMsIDB4N2YsIDB4YzksIDB4ZTQsIDB4ZjAsIDB4YmUsIDB4MzQsCi0JMHhiMiwgMHhmZCwgMHg2NiwgMHhiOCwgMHhjNiwgMHgyNywgMHhkOCwgMHg2ZiwgMHhjMSwgMHhlMiwgMHhmYSwgMHg0ZSwKLQkweGU5LCAweGU3LCAweDI2LCAweGRlLCAweDRiLCAweGJmLCAweDczLCAweDk1LCAweDhlLCAweDU5LCAweGZkLCAweDQyLAotCTB4ZDgsIDB4MzYsIDB4ZDgsIDB4NmMsIDB4YWUsIDB4NzcsIDB4N2IsIDB4MDIsIDB4OGIsIDB4MWMsIDB4MTAsIDB4NWIsCi0JMHhhYiwgMHg1NywgMHgyZiwgMHgwMiwgMHg1ZCwgMHhkMywgMHg3YSwgMHgwOSwgMHg3OSwgMHg5MCwgMHgzZiwgMHhmMCwKLQkweDBjLCAweDQ0LCAweDU2LCAweDEyLCAweDY3LCAweGJlLCAweDg3LCAweDlkLCAweGQxLCAweDExLCAweDMwLCAweGQ2LAotCTB4MjQsIDB4MDYsIDB4ZmEsIDB4ZDcsIDB4MGQsIDB4MjMsIDB4ODUsIDB4ZTcsIDB4ZDMsIDB4MjksIDB4YmMsIDB4NDAsCi0JMHgxOSwgMHg0NSwgMHhjYywgMHhiYiwgMHg2MiwgMHg2OSwgMHg3YywgMHgzYiwgMHhmYSwgMHgxZSwgMHg2MiwgMHhlNiwKLQkweDk5LCAweDFkLCAweGM2LCAweGZhLCAweGE4LCAweGJiLCAweDBhLCAweGY5LCAweGQyLCAweDc3LCAweDI1LCAweGM3LAotCTB4MTcsIDB4YjksIDB4N2EsIDB4ZGIsIDB4MjIsIDB4ZjgsIDB4OGEsIDB4ZTMsIDB4YWYsIDB4NDQsIDB4Y2YsIDB4YjAsCi0JMHg2MSwgMHhmYywgMHg5MCwgMHhiZSwgMHhlZCwgMHgyZCwgMHg3MiwgMHhhZiwgMHhjYiwgMHg5OSwgMHg3YiwgMHg2NywKLQkweDc5LCAweDk0LCAweGI3LCAweDY2LCAweGZhLCAweGI4LCAweGI1LCAweDNjLCAweGU3LCAweDJhLCAweGUxLCAweGZjLAotCTB4MjgsIDB4MWEsIDB4ZDMsIDB4OTQsIDB4MDUsIDB4MzEsIDB4MzksIDB4NzcsIDB4NzIsIDB4Y2EsIDB4MzEsIDB4MGYsCi0JMHg5ZSwgMHgyMCwgMHg3ZiwgMHhjOSwgMHgxZCwgMHhmZCwgMHg1YiwgMHg0NSwgMHhmYywgMHg1YywgMHhmNSwgMHgwMSwKLQkweGM2LCAweDAyLCAweDA3LCAweDNjLCAweGNhLCAweGMyLCAweDNkLCAweDJlLCAweDNjLCAweDE4LCAweDczLCAweGUwLAotCTB4ZmUsIDB4NTgsIDB4MGIsIDB4N2EsIDB4ZjYsIDB4NmEsIDB4NmMsIDB4ZTMsIDB4ZDUsIDB4Y2YsIDB4MzAsIDB4NWUsCi0JMHgzZCwgMHgwMSwgMHg5ZiwgMHg2NywgMHg5OCwgMHg5YywgMHhjYiwgMHg0ZCwgMHg5YywgMHg3NiwgMHg4YywgMHgxNiwKLQkweGEzLCAweDYwLCAweDU0LCAweDg1LCAweDZkLCAweGI0LCAweDBjLCAweDg1LCAweGEzLCAweDZlLCAweDU0LCAweGQzLAotCTB4ZWYsIDB4YjksIDB4YzcsIDB4Y2UsIDB4NjIsIDB4NjIsIDB4OGYsIDB4ZTQsIDB4NTMsIDB4YmYsIDB4MzAsIDB4NzIsCi0JMHhjOSwgMHhjYiwgMHgzZSwgMHgwZCwgMHgwNiwgMHg1MCwgMHgzYywgMHhiNiwgMHgwNSwgMHhlOSwgMHg1OCwgMHgwMywKLQkweDBhLCAweGM3LCAweDQ4LCAweGIzLCAweGM2LCAweDI2LCAweDk1LCAweDdhLCAweGNlLCAweGQ5LCAweDEyLCAweGQzLAotCTB4MzgsIDB4OTYsIDB4YzUsIDB4ODMsIDB4NTYsIDB4ZDIsIDB4NTcsIDB4ZjYsIDB4MjUsIDB4YmMsIDB4ZWIsIDB4YTQsCi0JMHgyZSwgMHg3OSwgMHg1OSwgMHgzZiwgMHg4ZSwgMHhiYywgMHhmZSwgMHhlYywgMHhmZCwgMHgzOSwgMHg3OCwgMHhmMywKLQkweDgwLCAweDkyLCAweDFlLCAweGRkLCAweGRmLCAweGI2LCAweDExLCAweGQ2LCAweDVkLCAweGJhLCAweGZiLCAweDMzLAotCTB4N2IsIDB4NmEsIDB4OTAsIDB4M2QsIDB4MzksIDB4ZDcsIDB4NTIsIDB4MTcsIDB4ZTYsIDB4YTAsIDB4ODQsIDB4N2IsCi0JMHgzYSwgMHg0ZiwgMHhmZCwgMHhiOSwgMHg4NywgMHhlYiwgMHhiZCwgMHhjYSwgMHhiOCwgMHhiMSwgMHgzMywgMHgyNiwKLQkweDdhLCAweGZmLCAweGI3LCAweDBhLCAweGVkLCAweDA2LCAweDMzLCAweGE5LCAweDAyLCAweDdjLCAweDk2LCAweGYyLAotCTB4MjgsIDB4M2UsIDB4ZWUsIDB4ZTcsIDB4M2IsIDB4N2MsIDB4ZmUsIDB4NmQsIDB4ZWUsIDB4NjcsIDB4ZWIsIDB4NWUsCi0JMHg2ZiwgMHhkYiwgMHg1MSwgMHhjNSwgMHhkYiwgMHhiZSwgMHg0NiwgMHhmMSwgMHhhOSwgMHg1YiwgMHg5NSwgMHg0MiwKLQkweDljLCAweDFmLCAweDI5LCAweGM2LCAweDQ1LCAweGZhLCAweGU5LCAweGFiLCAweDIzLCAweDY1LCAweGI4LCAweDM0LAotCTB4NTIsIDB4NDEsIDB4NWIsIDB4ZDEsIDB4MzgsIDB4ODYsIDB4NjEsIDB4MTQsIDB4NjksIDB4NmUsIDB4Y2MsIDB4YTQsCi0JMHg1ZiwgMHg0MCwgMHg0OSwgMHg2YywgMHgxZSwgMHgzZSwgMHg0YiwgMHg2ZiwgMHg0MiwgMHg3MSwgMHg0YywgMHhmOCwKLQkweGJjLCAweDA3LCAweDlmLCAweGYyLCAweGY5LCAweDI3LCAweGU5LCAweDcxLCAweGU0LCAweGVmLCAweGY5LCAweDgyLAotCTB4NmQsIDB4MGMsIDB4YTMsIDB4ODUsIDB4N2IsIDB4YmMsIDB4OTQsIDB4ZWUsIDB4NDAsIDB4ZTEsIDB4OWUsIDB4OTcsCi0JMHhlMCwgMHhkOCwgMHg2MywgMHg3NCwgMHhmNSwgMHgwNCwgMHhmMSwgMHg3MywgMHgzYiwgMHhmNywgMHhkMiwgMHhhZCwKLQkweDdiLCAweGE3LCAweDE2LCAweGQ4LCAweDFiLCAweDM4LCAweDg2LCAweGNlLCAweDMxLCAweDI3LCAweDk1LCAweDg1LAotCTB4NjMsIDB4MmYsIDB4YTEsIDB4NzgsIDB4OGYsIDB4MDcsIDB4OWIsIDB4MjksIDB4Y2IsIDB4NzEsIDB4NjgsIDB4ODEsCi0JMHgzNSwgMHhjYSwgMHg0YiwgMHhjOCwgMHgxOSwgMHhiNSwgMHg2NCwgMHhiMCwgMHg2MSwgMHhjYywgMHhiMiwgMHg5MSwKLQkweDk2LCAweDkwLCAweGU0LCAweDk0LCAweDI2LCAweDk1LCAweDYxLCAweGQzLCAweDQ2LCAweGRjLCAweDcyLCAweGQ3LAotCTB4MDcsIDB4ZDMsIDB4ZTksIDB4MDIsIDB4OWMsIDB4NGEsIDB4ODksIDB4OGMsIDB4ZTQsIDB4YmUsIDB4ZTAsIDB4MzgsCi0JMHg3MiwgMHhmNywgMHgxMCwgMHgzZiwgMHg0NywgMHg3NCwgMHg5MywgMHg1ZiwgMHg4OCwgMHg2ZCwgMHg4YywgMHhhNCwKLQkweDZmLCAweDY1LCAweDVmLCAweDNhLCAweDc2LCAweDI2LCAweGFhLCAweDY5LCAweDViLCAweGYzLCAweGIwLCAweDZhLAotCTB4OGYsIDB4NjEsIDB4MDQsIDB4ODIsIDB4NTMsIDB4ZjcsIDB4YjgsIDB4YTgsIDB4NGQsIDB4ODcsIDB4ZDIsIDB4YjcsCi0JMHhiMiwgMHhhZCwgMHg0NiwgMHhlYSwgMHhhOSwgMHhiNywgMHgzNSwgMHg2MiwgMHhlNiwgMHhiYiwgMHgwZCwgMHg0YywKLQkweGViLCAweDkzLCAweDhhLCAweDJkLCAweDI2LCAweGIxLCAweGQ4LCAweDVhLCAweGRhLCAweDdjLCAweDFiLCAweDdhLAotCTB4MDYsIDB4ZDEsIDB4YmUsIDB4M2YsIDB4MjQsIDB4YjUsIDB4NzAsIDB4MjcsIDB4ODYsIDB4MTksIDB4NWIsIDB4OWQsCi0JMHg2NywgMHgzYywgMHg0MiwgMHg5OSwgMHhhYiwgMHgzOSwgMHg0ZCwgMHgzOSwgMHgxOCwgMHgxYSwgMHg3MSwgMHhlMSwKLQkweDI3LCAweDIzLCAweDFlLCAweDM0LCAweGM2LCAweGJlLCAweDIwLCAweDY2LCAweGU0LCAweDYzLCAweDkyLCAweGYyLAotCTB4OWUsIDB4MjAsIDB4MzcsIDB4ZmEsIDB4MzQsIDB4YWEsIDB4NjIsIDB4OWMsIDB4N2UsIDB4ZjgsIDB4OTMsIDB4NjgsCi0JMHgwNSwgMHhjNiwgMHgxOCwgMHg4NywgMHg3ZCwgMHgxYywgMHhkNSwgMHg5MCwgMHhlNiwgMHhkOSwgMHg3YywgMHg0NCwKLQkweGJjLCAweGY5LCAweDYxLCAweGJhLCAweDAxLCAweGJmLCAweDg5LCAweDM2LCAweGUwLCAweDU1LCAweGNhLCAweGIxLAotCTB4MmUsIDB4ZTYsIDB4ZTYsIDB4OWEsIDB4OGUsIDB4MjgsIDB4MzgsIDB4MzAsIDB4YTksIDB4ZTQsIDB4NTAsIDB4MmYsCi0JMHhmYywgMHgzMSwgMHhjZCwgMHgzMywgMHg5YywgMHhkMSwgMHgwYiwgMHg2ZCwgMHhhYywgMHg4ZCwgMHg3NiwgMHgyNCwKLQkweDc3LCAweDJkLCAweGM0LCAweDc3LCAweDM4LCAweGY0LCAweDYxLCAweDkwLCAweGVmLCAweDM1LCAweDY0LCAweDczLAotCTB4OGIsIDB4NWUsIDB4ZjcsIDB4MTQsIDB4YWEsIDB4NjgsIDB4NGIsIDB4NWYsIDB4MTksIDB4YWEsIDB4MjYsIDB4NzksCi0JMHhiNCwgMHg2NCwgMHhmMCwgMHg3MiwgMHg1NCwgMHg1MywgMHgyZiwgMHg5OSwgMHg3YiwgMHg4OCwgMHgyOCwgMHhjZSwKLQkweDI1LCAweDkyLCAweGEzLCAweGQ4LCAweGNhLCAweGZkLCAweDA3LCAweDg4LCAweDE5LCAweDU3LCAweGNjLCAweDczLAotCTB4NTIsIDB4YjUsIDB4ZTMsIDB4NjgsIDB4MzAsIDB4ZWYsIDB4YTQsIDB4MzEsIDB4ZDYsIDB4NWIsIDB4NzIsIDB4MWMsCi0JMHg3NywgMHgxZSwgMHhmOCwgMHgzZiwgMHg1NSwgMHgxNiwgMHg1NywgMHhhMiwgMHg2ZCwgMHhkYiwgMHg2ZSwgMHhjZSwKLQkweDgzLCAweDQ5LCAweDRlLCAweDdkLCAweDc3LCAweGYwLCAweDc4LCAweGY0LCAweDM3LCAweDU1LCAweDUyLCAweDZiLAotCTB4M2IsIDB4NGEsIDB4Y2UsIDB4YjQsIDB4M2QsIDB4NzEsIDB4YWIsIDB4OTgsIDB4YzIsIDB4YzAsIDB4M2IsIDB4YzQsCi0JMHg5NywgMHg0YiwgMHg0OSwgMHhlMSwgMHg1NSwgMHhjMiwgMHhhNywgMHhiYSwgMHhlOCwgMHhiYiwgMHg4YSwgMHhjOCwKLQkweDI3LCAweGU4LCAweDY3LCAweGM5LCAweGY5LCAweDdkLCAweGYxLCAweDI5LCAweGM2LCAweDM0LCAweDc3LCAweDkzLAotCTB4ZDMsIDB4MTUsIDB4NzMsIDB4OTgsIDB4ZjcsIDB4MzksIDB4NWYsIDB4MWIsIDB4NzYsIDB4ZDIsIDB4NGUsIDB4ZjMsCi0JMHhiNCwgMHgwNSwgMHg1OCwgMHg0NSwgMHhiZSwgMHhlNCwgMHhkMCwgMHhlOCwgMHg2ZSwgMHgxZSwgMHgxMSwgMHg5ZiwKLQkweDAzLCAweGQ0LCAweGM2LCAweDU1LCAweDE0LCAweDM2LCAweDY5LCAweGViLCAweGRlLCAweGMyLCAweDNkLCAweDY4LAotCTB4YWYsIDB4NzQsIDB4NDEsIDB4ZWEsIDB4MDksIDB4NmYsIDB4NjMsIDB4MTksIDB4NTIsIDB4OGYsIDB4ODksIDB4ZWYsCi0JMHhiNSwgMHg0OSwgMHg3ZCwgMHgyYywgMHg3MiwgMHgxNiwgMHgzNSwgMHgyNiwgMHg3MywgMHhjZiwgMHg2ZiwgMHg5MiwKLQkweGY1LCAweDU0LCAweGYwLCAweDJjLCAweDU0LCAweDVjLCAweGEwLCAweDhjLCAweDJmLCAweDQ2LCAweDdkLCAweDMzLAotCTB4MmIsIDB4NTAsIDB4N2YsIDB4ZjIsIDB4YTIsIDB4OWQsIDB4YmMsIDB4YjAsIDB4NWMsIDB4ZGEsIDB4MzcsIDB4NDAsCi0JMHhlMywgMHg3OCwgMHg5ZiwgMHg0NywgMHg4MywgMHhlOCwgMHg1NywgMHhlNSwgMHhiYiwgMHhmMCwgMHhjYiwgMHgzNiwKLQkweDc0LCAweDBmLCAweGNiLCAweDFhLCAweDBjLCAweGEzLCAweDhjLCAweDU4LCAweGY5LCAweDg4LCAweDM5LCAweGJmLAotCTB4Y2MsIDB4N2QsIDB4NzMsIDB4N2MsIDB4OTIsIDB4ZjUsIDB4N2YsIDB4MTIsIDB4YTMsIDB4NGMsIDB4ZTMsIDB4NzAsCi0JMHhkMiwgMHgwMywgMHhjNywgMHg5MiwgMHhhYSwgMHgzOSwgMHhjOCwgMHg5ZiwgMHhjNiwgMHg0OCwgMHg0YSwgMHgyMywKLQkweGY3LCAweDJjLCAweDgwLCAweGE3LCAweDUyLCAweGM3LCAweDJlLCAweGZhLCAweGZjLCAweDE4LCAweGRiLCAweGE3LAotCTB4NjMsIDB4MDUsIDB4ODgsIDB4NTQsIDB4NWEsIDB4NzMsIDB4ZGUsIDB4MWQsIDB4ZmYsIDB4ZDgsIDB4OTgsIDB4N2EsCi0JMHhkOCwgMHhmNCwgMHhhMSwgMHhmYywgMHgxZSwgMHg2NCwgMHg5ZiwgMHgzOSwgMHg3MiwgMHhlZCwgMHgxNCwgMHhjZiwKLQkweGM2LCAweDJlLCAweDE5LCAweDUzLCAweDZkLCAweGIzLCAweDdmLCAweDJmLCAweDM1LCAweGVmLCAweDZlLCAweDg1LAotCTB4NmQsIDB4OTUsIDB4ZmMsIDB4YjQsIDB4ZTQsIDB4ZDIsIDB4NGQsIDB4YjksIDB4OTQsIDB4NjgsIDB4ZWYsIDB4MTksCi0JMHgwZiwgMHg1OSwgMHg3MiwgMHg5OSwgMHgyMywgMHhmMSwgMHg0MCwgMHg2ZCwgMHhmYywgMHhmMSwgMHgzOSwgMHg5MiwKLQkweDZmLCAweDE1LCAweDdmLCAweGU2LCAweDZhLCAweGQyLCAweDFhLCAweDRmLCAweGUyLCAweDE3LCAweGM2LCAweGI5LAotCTB4MWIsIDB4YzYsIDB4MjksIDB4ZTcsIDB4MzMsIDB4ZjEsIDB4NGQsIDB4ZTcsIDB4MzIsIDB4ZjcsIDB4MDAsIDB4ZGMsCi0JMHg5OSwgMHg5OCwgMHg2MSwgMHgxYSwgMHg0NywgMHg5MywgMHhlMiwgMHgxNywgMHgzYywgMHg1OCwgMHgyZiwgMHhmOSwKLQkweDJhLCAweGQ1LCAweGRiLCAweDE3LCAweGMxLCAweDE0LCAweDM5LCAweGUyLCAweDA3LCAweDk0LCAweGJkLCAweDIyLAotCTB4ZjUsIDB4M2EsIDB4ZjIsIDB4YzQsIDB4ZDksIDB4YmUsIDB4MmIsIDB4OGMsIDB4OTQsIDB4NTksIDB4OGYsIDB4MTIsCi0JMHg2YywgMHg5ZCwgMHhjNiwgMHhmNiwgMHhhNCwgMHhkNCwgMHg0ZCwgMHgzZiwgMHgyMywgMHg2ZiwgMHhlYSwgMHgyMiwKLQkweDI3LCAweDlmLCAweDQ2LCAweDRmLCAweGFhLCAweDA1LCAweGFmLCAweGVjLCAweDZkLCAweDI1LCAweGRlLCAweDA4LAotCTB4NmUsIDB4ZmEsIDB4NGUsIDB4OWUsIDB4YjcsIDB4YjcsIDB4NjAsIDB4ZmYsIDB4YTEsIDB4MzQsIDB4NTIsIDB4YTMsCi0JMHhlMiwgMHgyZiwgMHhlNSwgMHgxZSwgMHg5YywgMHhmOCwgMHhjYSwgMHgwMCwgMHhhMiwgMHg4OSwgMHgxMywgMHg4OCwKLQkweGYwLCAweDczLCAweDY3LCAweGUyLCAweDI1LCAweDg0LCAweDQ3LCAweGRmLCAweDYzLCAweDJjLCAweDMwLCAweDhkLAotCTB4OTUsIDB4ZDQsIDB4YjksIDB4ODMsIDB4OTgsIDB4YzYsIDB4ZWEsIDB4MDMsIDB4MWEsIDB4OTIsIDB4ODksIDB4NTYsCi0JMHg4ZSwgMHhkZiwgMHg4MiwgMHhkZSwgMHhiZCwgMHhkZSwgMHg4MCwgMHhjMywgMHg1NiwgMHg0MiwgMHg3ZiwgMHhhNSwKLQkweDYxLCAweGRiLCAweDQ0LCAweDMzLCAweDIyLCAweGMzLCAweDU2LCAweDVkLCAweGFjLCAweDIxLCAweGVlLCAweDUxLAotCTB4M2UsIDB4MjEsIDB4OWYsIDB4YWUsIDB4OGYsIDB4N2IsIDB4MTksIDB4YzcsIDB4NzksIDB4MjMsIDB4YWIsIDB4MTUsCi0JMHg5ZiwgMHgyNywgMHhjNywgMHg2NiwgMHgxOCwgMHhiZCwgMHhmNCwgMHgxYiwgMHgyNywgMHg3NSwgMHgwNSwgMHg3OSwKLQkweGY3LCAweDI4LCAweDA4LCAweGQyLCAweDhmLCAweDc5LCAweGFhLCAweGU4LCAweDVmLCAweDg2LCAweDQzLCAweGU4LAotCTB4MWQsIDB4OWMsIDB4NWQsIDB4NTMsIDB4OTQsIDB4ZjMsIDB4N2EsIDB4ODAsIDB4ZTMsIDB4YzksIDB4ZDksIDB4YjUsCi0JMHhhMiwgMHg3NywgMHhjMiwgMHhkNywgMHg3MSwgMHhkMiwgMHhhYywgMHgzOSwgMHg0YSwgMHhiYiwgMHg2YywgMHgxYiwKLQkweDE0LCAweDdlLCAweDE2LCAweGYyLCAweDA2LCAweDRhLCAweDE0LCAweDY5LCAweGJiLCAweDk1LCAweDU4LCAweDM2LAotCTB4YmIsIDB4N2QsIDB4NDQsIDB4NDksIDB4MmUsIDB4MjEsIDB4N2YsIDB4YjUsIDB4ODksIDB4NWQsIDB4NzQsIDB4OWIsCi0JMHhiNiwgMHgyMywgMHhiMiwgMHhlOCwgMHg0ZCwgMHg4NiwgMHhhOSwgMHhkMywgMHgzZiwgMHgzNSwgMHg1MiwgMHg2ZCwKLQkweDZkLCAweDVjLCAweDY3LCAweGEzLCAweGQ0LCAweDljLCAweDRjLCAweDllLCAweDcyLCAweDVhLCAweGYyLCAweDczLAotCTB4NGUsIDB4ZjEsIDB4ZTMsIDB4ZGQsIDB4ZWQsIDB4MmUsIDB4ZWEsIDB4NTMsIDB4MmUsIDB4YjEsIDB4MmEsIDB4NmYsCi0JMHhkYywgMHgwNSwgMHhkNywgMHhjMSwgMHgwMiwgMHhlNCwgMHgwZSwgMHgwOSwgMHg5ZiwgMHg4MywgMHg1YSwgMHhkYywKLQkweGE0LCAweGMyLCAweDNlLCAweDVlLCAweDQ4LCAweDFiLCAweGUwLCAweDE5LCAweDhlLCAweGQzLCAweGM2LCAweGEyLAotCTB4NmUsIDB4ZDQsIDB4OGMsIDB4YmIsIDB4ZjEsIDB4MTMsIDB4ZTIsIDB4NDEsIDB4ZjUsIDB4YjgsIDB4ODYsIDB4NDksCi0JMHhlMiwgMHg4MSwgMHg3YiwgMHgzYywgMHg4MCwgMHgwOSwgMHhlMiwgMHg0MSwgMHg0OSwgMHgyNiwgMHg0NywgMHhmMiwKLQkweDc2LCAweGZhLCAweDY1LCAweDllLCAweGFiLCAweGNjLCAweDI1LCAweDcyLCAweGNjLCAweDllLCAweGFiLCAweDljLAotCTB4NjksIDB4MmIsIDB4MzEsIDB4NTAsIDB4Y2UsIDB4YjcsIDB4MDEsIDB4M2IsIDB4MDYsIDB4ZDMsIDB4NTgsIDB4YmUsCi0JMHhjNywgMHhjMCwgMHhiYiwgMHg3YSwgMHhiZCwgMHgzYiwgMHg0ZiwgMHg5MSwgMHg3OCwgMHhjMiwgMHg0MCwgMHg1YSwKLQkweDk3LCAweDNiLCAweGFiLCAweGRlLCAweDc1LCAweDcyLCAweGFmLCAweGJiLCAweGJkLCAweGMyLCAweDQwLCAweDRlLAotCTB4ZDAsIDB4YWIsIDB4MTMsIDB4ZjksIDB4ZDcsIDB4ZTUsIDB4MjksIDB4ZTIsIDB4YzMsIDB4ZWEsIDB4M2QsIDB4OWIsCi0JMHgzMCwgMHg1NywgMHg2YSwgMHg4ZSwgMHhmYywgMHhiNywgMHgwMiwgMHg5YiwgMHhjOCwgMHgxYiwgMHhmMywgMHhiNSwKLQkweDU2LCAweGVjLCAweDJjLCAweDhkLCAweGI4LCAweDJlLCAweDg3LCAweDBjLCAweDYzLCAweDQzLCAweGYwLCAweGYxLAotCTB4MmEsIDB4OTMsIDB4MDMsIDB4ZGEsIDB4ZjYsIDB4ZjEsIDB4NzMsIDB4MmQsIDB4ZjcsIDB4MmQsIDB4N2IsIDB4ZWYsCi0JMHg0MCwgMHg2YywgMHhiNywgMHg4MiwgMHhiNCwgMHhiZiwgMHgwMywgMHhkMSwgMHg5MSwgMHgwZSwgMHhlYywgMHhkYSwKLQkweDJkLCAweDk4LCAweGQwLCAweDQ3LCAweDRjLCAweDMwLCAweGJhLCAweDM2LCAweDA2LCAweDFmLCAweGMyLCAweDI1LAotCTB4OTMsIDB4MTEsIDB4NDgsIDB4MWYsIDB4NmYsIDB4YzAsIDB4NjMsIDB4OWIsIDB4N2QsIDB4MGUsIDB4MWIsIDB4YjksCi0JMHg3ZSwgMHhjYiwgMHg3NiwgMHg5YSwgMHhmYiwgMHg4NSwgMHg3YiwgMHhmYiwgMHhmYiwgMHg3YSwgMHg3OSwgMHhmZSwKLQkweDBmLCAweDFmLCAweDEwLCAweGRmLCAweDYzLCAweDE4LCAweDdkLCAweGZhLCAweDNjLCAweGEwLCAweDU0LCAweGY2LAotCTB4MTAsIDB4NDAsIDB4M2MsIDB4NjEsIDB4N2MsIDB4NTYsIDB4YWQsIDB4ZjksIDB4NjYsIDB4NzYsIDB4ZDEsIDB4Y2YsCi0JMHg5ZiwgMHhkZCwgMHg1MywgMHhiZiwgMHg2OSwgMHg5MywgMHg3MCwgMHg5YSwgMHhjNSwgMHhjMiwgMHhmMywgMHhkMiwKLQkweDM4LCAweDMzLCAweDdhLCAweDI3LCAweDUyLCAweDBmLCAweDczLCAweDNmLCAweDNjLCAweDJiLCAweDY3LCAweGZjLAotCTB4NGIsIDB4NDMsIDB4NzgsIDB4OWQsIDB4NWQsIDB4OTMsIDB4OWEsIDB4MmQsIDB4YTcsIDB4MWMsIDB4ZjcsIDB4YTMsCi0JMHhhNywgMHgxNCwgMHg5MSwgMHhjYiwgMHgyMSwgMHg5OSwgMHhmZiwgMHhkYSwgMHhmYSwgMHhiOSwgMHhkZiwgMHgxNiwKLQkweGVjLCAweGRhLCAweDJiLCAweGJjLCAweDQzLCAweDM4LCAweDlhLCAweDJmLCAweGYyLCAweDExLCAweDVhLCAweDkxLAotCTB4OWMsIDB4YjAsIDB4ZTYsIDB4OGEsIDB4MjYsIDB4NmUsIDB4ZDYsIDB4MTUsIDB4MzksIDB4ZjcsIDB4MTMsIDB4ZDgsCi0JMHg0MSwgMHg4ZSwgMHhlNywgMHhlMiwgMHhmOCwgMHhmNCwgMHgzNSwgMHgxYywgMHg0ZiwgMHgwYiwgMHhlNCwgMHhjOSwKLQkweDdjLCAweGUzLCAweDNmLCAweDM1LCAweDc2LCAweDU2LCAweDhhLCAweDZjLCAweDY0LCAweDdjLCAweGNkLCAweGM0LAotCTB4OGMsIDB4MGQsIDB4YzEsIDB4M2YsIDB4YjcsIDB4ZDcsIDB4MWEsIDB4MzcsIDB4ZjIsIDB4YmQsIDB4YWQsIDB4OTYsCi0JMHgzYywgMHhhNCwgMHhhZCwgMHhmNiwgMHgyNywgMHhkNiwgMHhiMywgMHg5MCwgMHhlZCwgMHg2NCwgMHg0ZCwgMHgxZCwKLQkweGQ4LCAweGIxLCAweDFiLCAweDkxLCAweDdjLCAweDRkLCAweDZhLCAweDBkLCAweDFkLCAweGU4LCAweGEzLCAweDdjLAotCTB4YjcsIDB4MjUsIDB4M2IsIDB4YjAsIDB4OWYsIDB4MzYsIDB4M2IsIDB4YTQsIDB4YmYsIDB4NTEsIDB4NmQsIDB4NDMsCi0JMHhkZCwgMHg4YywgMHgxZCwgMHg1MywgMHgzZiwgMHhhYiwgMHgyMSwgMHg5ZSwgMHgyZSwgMHg1YywgMHhlYywgMHhhNywKLQkweDdkLCAweDc1LCAweDIwLCAweDllLCAweGNhLCAweDc1LCAweDliLCAweDM1LCAweDQwLCAweDliLCAweGY4LCAweDQyLAotCTB4OTEsIDB4NDUsIDB4MjcsIDB4ZjIsIDB4ZmIsIDB4NGYsIDB4YzAsIDB4ZDksIDB4ZGYsIDB4ODksIDB4M2MsIDB4ZmYsCi0JMHgzMiwgMHhkYywgMHgxZiwgMHgzYywgMHg2NywgMHg1YywgMHhkMiwgMHgxYywgMHhlZSwgMHhhMywgMHg5NCwgMHhjZiwKLQkweDFiLCAweDBkLCAweGQ1LCAweDhjLCAweDNiLCAweDFiLCAweGIwLCAweDZkLCAweGY4LCAweDM2LCAweGRhLCAweDdlLAotCTB4MjMsIDB4YjksIDB4MmYsIDB4ZTcsIDB4NmEsIDB4YjIsIDB4NjEsIDB4ZjUsIDB4MTIsIDB4ODksIDB4ZTksIDB4YTUsCi0JMHgzZSwgMHg1ZCwgMHgyNSwgMHhmNywgMHgxMCwgMHhkNCwgMHhlNywgMHgyMSwgMHhmMSwgMHgxYSwgMHgzOSwgMHg1OSwKLQkweDg1LCAweDA3LCAweDRmLCAweGQzLCAweGM2LCAweGRhLCAweDU1LCAweDc5LCAweGJlLCAweDg1LCAweDcxLCAweGM0LAotCTB4MTYsIDB4NTQsIDB4YzcsIDB4MjIsIDB4ODYsIDB4YzgsIDB4ZmIsIDB4MjgsIDB4YzIsIDB4ZGYsIDB4OTMsIDB4OWEsCi0JMHg0YSwgMHhlMywgMHg2MiwgMHhmZiwgMHhhNiwgMHgxOSwgMHg0NSwgMHg3NCwgMHhkYSwgMHhkZiwgMHgzZSwgMHhhZSwKLQkweGU4LCAweGFlLCAweDA3LCAweGM2LCAweDE0LCAweDA0LCAweGZhLCAweDM5LCAweDU2LCAweGYwLCAweGZkLCAweDM5LAotCTB4NTYsIDB4MWUsIDB4MmQsIDB4Y2IsIDB4ZmYsIDB4YjYsIDB4OTAsIDB4MzMsIDB4NmMsIDB4NDEsIDB4MTEsIDB4ZmIsCi0JMHhiYiwgMHgzNSwgMHhjMSwgMHg4NiwgMHhmMCwgMHg3ZCwgMHhjNSwgMHhlYywgMHg5ZiwgMHgwZSwgMHhmYSwgMHhkYiwKLQkweDBhLCAweDE1LCAweGUxLCAweDQ2LCAweGZlLCAweGM2LCAweGQ1LCAweDhhLCAweGYwLCAweDE4LCAweGU5LCAweGE3LAotCTB4YmIsIDB4ZWEsIDB4YzYsIDB4Y2UsIDB4NjYsIDB4NmEsIDB4NjYsIDB4OGQsIDB4YzQsIDB4MDcsIDB4OGYsIDB4NzksCi0JMHgwNywgMHhkNSwgMHhiYSwgMHhhZiwgMHg5NSwgMHhiZCwgMHhiMywgMHhhNCwgMHhmMiwgMHhmYywgMHgyNSwgMHhjNiwKLQkweDM4LCAweDEyLCAweDVjLCAweDFlLCAweDZkLCAweDkyLCAweGZiLCAweDIxLCAweGNiLCAweDBlLCAweDUxLCAweGVmLAotCTB4Y2YsIDB4YTMsIDB4MDIsIDB4ZmYsIDB4MTAsIDB4MTUsIDB4NWMsIDB4ZjMsIDB4ZTAsIDB4MWYsIDB4YTMsIDB4YjksCi0JMHgxMiwgMHg1NywgMHhhNywgMHgyNCwgMHg2ZiwgMHhmOSwgMHg2NiwgMHgzMiwgMHg2MiwgMHg1MCwgMHhhZSwgMHhhZCwKLQkweGFiLCAweGE5LCAweDRiLCAweDgxLCAweDYwLCAweDIxLCAweDUwLCAweGQ5LCAweGZkLCAweGI0LCAweGQzLCAweDhjLAotCTB4ZjMsIDB4OGIsIDB4NTAsIDB4NGEsIDB4MWYsIDB4ZDAsIDB4M2YsIDB4ZmMsIDB4YTcsIDB4NzIsIDB4YjQsIDB4ZWYsCi0JMHg5YiwgMHhkYywgMHhmMiwgMHhlZiwgMHhlYSwgMHhlYywgMHhkOCwgMHgxNiwgMHhmYywgMHg1NywgMHgyMywgMHg5NSwKLQkweGI5LCAweDMzLCAweDdjLCAweDY2LCAweGI3LCAweGU4LCAweDY5LCAweDAwLCAweGI5LCAweGYxLCAweGIzLCAweGQ0LAotCTB4NDksIDB4MTUsIDB4YTcsIDB4YTMsIDB4M2UsIDB4N2QsIDB4OGQsIDB4ZWQsIDB4NDksIDB4ZWEsIDB4N2YsIDB4Y2QsCi0JMHgwZCwgMHhkOCwgMHg1ZCwgMHhhMywgMHgzZCwgMHg4OCwgMHhhNywgMHg0YywgMHhlYywgMHgwZSwgMHhhMywgMHg4NywKLQkweGJlLCAweDgxLCAweDljLCAweDZlLCAweGRmLCAweGQzLCAweDM2LCAweDE1LCAweDc5LCAweDMxLCAweDlmLCAweGVhLAotCTB4YTMsIDB4NGUsIDB4ZjUsIDB4NzAsIDB4MGUsIDB4ZTEsIDB4OWIsIDB4ZTUsIDB4ZTQsIDB4ODMsIDB4MWIsIDB4YTMsCi0JMHhmNSwgMHg5ZSwgMHg3ZiwgMHhjMSwgMHg3YSwgMHhkYSwgMHhhMywgMHhjYywgMHgyMSwgMHg3YiwgMHhkMiwgMHg1MCwKLQkweDE4LCAweGQ3LCAweDcwLCAweDhjLCAweGZiLCAweGQ4LCAweDU2LCAweDZhLCAweGNkLCAweDViLCAweDljLCAweDE5LAotCTB4M2IsIDB4M2UsIDB4MmMsIDB4NWMsIDB4NmMsIDB4MjksIDB4ZDYsIDB4OTgsIDB4NjMsIDB4ZWIsIDB4YjQsIDB4NGIsCi0JMHgwZCwgMHhmYiwgMHhlNCwgMHg2ZSwgMHg3ZiwgMHg5ZCwgMHg4NiwgMHg0NCwgMHhiYSwgMHgxOSwgMHgyZiwgMHg5NSwKLQkweDc5LCAweGIwLCAweDNmLCAweGIxLCAweDA1LCAweDhiLCAweDEyLCAweGY3LCAweGUxLCAweGQxLCAweGIyLCAweDg4LAotCTB4ZGMsIDB4ODUsIDB4NDEsIDB4NWUsIDB4NWMsIDB4NTMsIDB4ZWYsIDB4NTQsIDB4ZWUsIDB4Y2QsIDB4ZDQsIDB4MjksCi0JMHgyYSwgMHhlMCwgMHg4OCwgMHg4YiwgMHhjZiwgMHhjYiwgMHhjMSwgMHg4MCwgMHgzYSwgMHgxNywgMHgwNSwgMHhlNiwKLQkweDlkLCAweDRhLCAweDZiLCAweGVjLCAweDVkLCAweGMzLCAweGRlLCAweDhjLCAweDFmLCAweDI0LCAweDZhLCAweGM0LAotCTB4MTUsIDB4ZjEsIDB4YmYsIDB4ODEsIDB4MTcsIDB4NTAsIDB4Y2UsIDB4MzgsIDB4MjEsIDB4ODIsIDB4OWMsIDB4MjYsCi0JMHgyZCwgMHhmNSwgMHgyYywgMHhmMiwgMHgxMCwgMHhhOSwgMHgxMiwgMHg0YywgMHg5NCwgMHgzZSwgMHhiNywgMHhkZCwKLQkweGI0LCAweGE2LCAweGIyLCAweGNjLCAweDlhLCAweGIyLCAweGNmLCAweDMxLCAweDA3LCAweGM1LCAweGEyLCAweDViLAotCTB4YzIsIDB4MzUsIDB4ZTQsIDB4ZjcsIDB4N2MsIDB4YjQsIDB4NTEsIDB4OWYsIDB4MmEsIDB4YjgsIDB4ZTYsIDB4ODQsCi0JMHg3OSwgMHg1ZiwgMHhkNiwgMHhhYiwgMHg0NywgMHg2YywgMHgyMSwgMHhmYywgMHg3NiwgMHg4ZiwgMHhhNSwgMHg4MywKLQkweGViLCAweDZhLCAweDc5LCAweGZlLCAweGM1LCAweDIxLCAweGNjLCAweDhjLCAweDhhLCAweDNmLCAweGZiLCAweDUzLAotCTB4NjcsIDB4OTIsIDB4ZjUsIDB4YzUsIDB4NzIsIDB4MmUsIDB4MjIsIDB4NTcsIDB4ZWYsIDB4YzksIDB4MGIsIDB4YTgsCi0JMHg5ZiwgMHg3YSwgMHhjMiwgMHg3NiwgMHhkOCwgMHg0MCwgMHhiOSwgMHhjOCwgMHhmOCwgMHhiOCwgMHg1YiwgMHg2MiwKLQkweDU4LCAweDFiLCAweDc5LCAweDQ0LCAweDI0LCAweDdkLCAweGM1LCAweDJkLCAweGJlLCAweGQyLCAweDExLCAweDA3LAotCTB4NmEsIDB4ZTIsIDB4MTEsIDB4ZTQsIDB4MzYsIDB4NjksIDB4ZmIsIDB4MmUsIDB4ZGIsIDB4YWYsIDB4MWEsIDB4ZWQsCi0JMHg1NSwgMHhiNywgMHgzMSwgMHgyNiwgMHhiYywgMHhiZSwgMHhlNywgMHgzZSwgMHhhZSwgMHhkZCwgMHhhZSwgMHhmZCwKLQkweGQ0LCAweDU4LCAweDUxLCAweDIxLCAweDZiLCAweGFjLCAweGFlLCAweGI2LCAweGYyLCAweGQxLCAweGYzLCAweDI5LAotCTB4OTcsIDB4YWMsIDB4NGMsIDB4MGMsIDB4ZWEsIDB4Y2YsIDB4ZmYsIDB4MzIsIDB4YmUsIDB4NzEsIDB4YzMsIDB4NzMsCi0JMHhlMSwgMHgzMywgMHhhMiwgMHhhNywgMHhiMywgMHhlZiwgMHgxNCwgMHg4YSwgMHhjZSwgMHg3YSwgMHhhOCwgMHhhNywKLQkweGQzLCAweDM4LCAweDk0LCAweDZjLCAweDQ0LCAweDdmLCAweDQyLCAweDY0LCAweDFjLCAweGM2LCAweDc5LCAweDcyLAotCTB4YzUsIDB4ZGEsIDB4ODEsIDB4NjksIDB4MGMsIDB4OTEsIDB4MmIsIDB4ZmEsIDB4ZTIsIDB4ZGUsIDB4N2QsIDB4OTQsCi0JMHgyNCwgMHg1ZSwgMHg1MiwgMHg5NywgMHg5OSwgMHgzYywgMHhjOSwgMHhhNSwgMHg2NSwgMHhkNywgMHg3MCwgMHhiNywKLQkweDI5LCAweDc3LCAweGYxLCAweDMxLCAweDNiLCAweGI5LCAweGRmLCAweDNiLCAweGM4LCAweDkzLCAweDlhLCAweDYzLAotCTB4YjksIDB4ZDAsIDB4NGEsIDB4OGIsIDB4NTEsIDB4YTgsIDB4NDksIDB4NWQsIDB4YzMsIDB4NmEsIDB4MTcsIDB4ZTUsCi0JMHg1YSwgMHgwYSwgMHgzNCwgMHgxZiwgMHg1NiwgMHg5YiwgMHg2ZCwgMHgzZCwgMHhlNiwgMHhmZCwgMHgwOSwgMHg0NywKLQkweDk5LCAweGY4LCAweDYwLCAweGYxLCAweGJiLCAweGU0LCAweGUyLCAweDRiLCAweGM0LCAweGVmLCAweDg2LCAweGI5LAotCTB4YjYsIDB4MDUsIDB4M2MsIDB4YjMsIDB4NDUsIDB4NzAsIDB4ZGYsIDB4ZWIsIDB4NDEsIDB4ZjUsIDB4YmQsIDB4ZjQsCi0JMHg5MSwgMHgwYiwgMHgxNSwgMHg5NCwgMHgyZCwgMHhmNCwgMHg0NywgMHgxNiwgMHhkOSwgMHg5YSwgMHg4MSwgMHhhYSwKLQkweDAwLCAweGYxLCAweDQ3LCAweDMzLCAweDdhLCAweDEyLCAweDdmLCAweGUwLCAweDE4LCAweDFkLCAweDMwLCAweDc2LAotCTB4ZTcsIDB4NjMsIDB4ZmQsIDB4ZWUsIDB4MTIsIDB4ZWEsIDB4YWEsIDB4NDcsIDB4ZjIsIDB4ZjAsIDB4MmUsIDB4NTcsCi0JMHg1MywgMHgzNCwgMHhlOCwgMHg4YSwgMHhkNSwgMHhlYiwgMHg0ZSwgMHg2NSwgMHgwMSwgMHhmZCwgMHhiMSwgMHg5YywKLQkweDlmLCAweGNjLCAweDdmLCAweGQ3LCAweDBkLCAweDdjLCAweGE5LCAweDljLCAweGZlLCAweGVkLCAweDUxLCAweDczLAotCTB4MGQsIDB4OTIsIDB4MmIsIDB4OTYsIDB4N2UsIDB4N2YsIDB4N2MsIDB4NGUsIDB4NTMsIDB4ZDcsIDB4Y2UsIDB4ZTksCi0JMHg0ZSwgMHgzOCwgMHgxZSwgMHhhOSwgMHgyMCwgMHhmZiwgMHhiYSwgMHhiNSwgMHgwZiwgMHhjOSwgMHhhMywgMHgwZiwKLQkweGI5LCAweDIzLCAweDY2LCAweDc0LCAweDZkLCAweDBlLCAweDE2LCAweDQ4LCAweGZlLCAweGM4LCAweGY0LCAweDIxLAotCTB4ZWQsIDB4YjYsIDB4OGQsIDB4YTYsIDB4ZWUsIDB4MzgsIDB4YjUsIDB4MWUsIDB4Y2EsIDB4ZGIsIDB4Y2EsIDB4NDcsCi0JMHg1MywgMHgwNiwgMHg3MywgMHhhYywgMHhiYiwgMHhiOSwgMHhkOSwgMHhkZiwgMHgzYSwgMHhiMCwgMHg5ZCwgMHg5OCwKLQkweDI5LCAweDc3LCAweGVhLCAweDlkLCAweDlhLCAweDQ2LCAweGZiLCAweGVmLCAweDQwLCAweDBmLCAweGM3LCAweDdjLAotCTB4ODUsIDB4YjgsIDB4ZDksIDB4NGYsIDB4ZGMsIDB4YmMsIDB4YmEsIDB4ZjgsIDB4OGQsIDB4OWYsIDB4NTUsIDB4YTMsCi0JMHgyZSwgMHhlOSwgMHhjNiwgMHhkNCwgMHg1ZiwgMHg5NywgMHgwOSwgMHg2ZSwgMHgyZSwgMHhmMiwgMHg3NywgMHg1YywKLQkweDMxLCAweDcxLCAweDUzLCAweGM2LCAweDk2LCAweGYxLCAweDY2LCAweDhmLCAweGZkLCAweDNmLCAweGY4LCAweGRmLAotCTB4ZjksIDB4OTIsIDB4NzMsIDB4MzQsIDB4OWMsIDB4ZGEsIDB4ZmYsIDB4MzUsIDB4YjYsIDB4NTUsIDB4YzgsIDB4NWEsCi0JMHg2ZiwgMHhiNSwgMHgwZSwgMHhjMSwgMHhkYSwgMHhkOSwgMHgzNSwgMHhmZCwgMHg2OSwgMHg2MiwgMHhhZSwgMHgxOSwKLQkweDJmLCAweGQwLCAweGU3LCAweDg2LCAweGIxLCAweDZhLCAweDg5LCAweDhhLCAweDRiLCAweGQxLCAweDY5LCAweGU0LAotCTB4MWQsIDB4YzgsIDB4ZTIsIDB4OTMsIDB4YjEsIDB4ZWMsIDB4MTgsIDB4YjEsIDB4NjksIDB4MDgsIDB4ODIsIDB4NDcsCi0JMHg0ZCwgMHgzYywgMHg5NywgMHgwOCwgMHhlZCwgMHhhNCwgMHgwOCwgMHhlMywgMHg0OSwgMHhiOSwgMHg0NywgMHg2NCwKLQkweDYwLCAweDU3LCAweGQwLCAweDQ1LCAweDZlLCAweGRiLCAweDdkLCAweDM0LCAweGM3LCAweGY0LCAweDEzLCAweDQ1LAotCTB4NTQsIDB4YWQsIDB4MmMsIDB4ZWYsIDB4MTYsIDB4Y2UsIDB4MmQsIDB4ZjgsIDB4MjMsIDB4ZmMsIDB4ZDgsIDB4OGUsCi0JMHg5MiwgMHhjNSwgMHg5MiwgMHgxNywgMHhmOCwgMHhjMiwgMHhiOCwgMHhmNCwgMHg5OCwgMHhiNCwgMHg5YiwgMHg4NywKLQkweGExLCAweGRkLCAweGEyLCAweDdmLCAweDNlLCAweDU0LCAweDZiLCAweDY3LCAweDE5LCAweDczLCAweDgwLCAweDczLAotCTB4ZGEsIDB4NmUsIDB4Y2YsIDB4MjEsIDB4MzcsIDB4ZWUsIDB4ZDIsIDB4OTcsIDB4ZTAsIDB4NmEsIDB4NzksIDB4MGYsCi0JMHgwYSwgMHg5YSwgMHhkYywgMHhmOCwgMHgzMCwgMHgzYSwgMHg4NSwgMHg0MywgMHhjNCwgMHg4ZiwgMHg1YywgMHhlYSwKLQkweDUwLCAweDVlLCAweDQ2LCAweGNmLCAweDc2LCAweDBjLCAweGNiLCAweGZlLCAweGFhLCAweGIxLCAweGQyLCAweGI0LAotCTB4NTMsIDB4MTksIDB4NjMsIDB4MWEsIDB4YWYsIDB4OTIsIDB4Y2YsIDB4MzYsIDB4MmYsIDB4MTEsIDB4MmUsIDB4YWIsCi0JMHg2MywgMHg1ZiwgMHhhMiwgMHgwOCwgMHgzNSwgMHg4MywgMHg1ZCwgMHg5NCwgMHg1ZCwgMHgxMSwgMHhhYSwgMHg4NywKLQkweGM1LCAweGJlLCAweGU2LCAweDBiLCAweDhlLCAweGNhLCAweDA1LCAweDM5LCAweGNhLCAweDQzLCAweGM1LCAweGY2LAotCTB4NjgsIDB4YmQsIDB4N2EsIDB4ODEsIDB4NDEsIDB4NDIsIDB4ZjgsIDB4OWEsIDB4YWYsIDB4NzcsIDB4ZDMsIDB4ZWYsCi0JMHgzMCwgMHgyNiwgMHhjYSwgMHhlOCwgMHg4NSwgMHg0YSwgMHhiZCwgMHg2OCwgMHhiYiwgMHhjNiwgMHhhMywgMHhiMywKLQkweDdiLCAweDk5LCAweDlkLCAweDNmLCAweDUyLCAweGIxLCAweDIzLCAweDZhLCAweDYyLCAweDIxLCAweGZiLCAweGZhLAotCTB4MDIsIDB4M2UsIDB4ODUsIDB4NTgsIDB4M2UsIDB4MjYsIDB4M2EsIDB4ZjYsIDB4N2UsIDB4NDYsIDB4Y2UsIDB4NzksCi0JMHhiNywgMHg1OSwgMHhmNywgMHg1YSwgMHgzNiwgMHhkZSwgMHhmNCwgMHg1ZCwgMHg2YiwgMHg3ZiwgMHgxMywgMHg2NywKLQkweDhkLCAweDVkLCAweDhmLCAweGM5LCAweDFhLCAweDhmLCAweGUzLCAweDYwLCAweGYyLCAweDhhLCAweGRjLCAweDliLAotCTB4ZWYsIDB4MzgsIDB4MDMsIDB4MWIsIDB4NGUsIDB4MzMsIDB4NzYsIDB4MTksIDB4NGIsIDB4ZmQsIDB4YWUsIDB4NWEsCi0JMHhkZSwgMHg0NSwgMHhkOSwgMHg5NywgMHg5OCwgMHhlZCwgMHgzYiwgMHhjNCwgMHgyZSwgMHgzZCwgMHgxOSwgMHhiZiwKLQkweDYxLCAweGQ5LCAweDY3LCAweDY5LCAweDVjLCAweGVlLCAweGFmLCAweDFjLCAweDA5LCAweDNlLCAweGNkLCAweDczLAotCTB4ZjEsIDB4MmYsIDB4YWEsIDB4MzcsIDB4NzMsIDB4MzIsIDB4ZTQsIDB4YzIsIDB4OGMsIDB4NTMsIDB4MDQsIDB4NzMsCi0JMHgyMywgMHhmNCwgMHhmOSwgMHg0NSwgMHhmOCwgMHg3OSwgMHg1MiwgMHg3YywgMHhiMCwgMHg4MSwgMHg1YywgMHhlYSwKLQkweGUzLCAweGI5LCAweDhhLCAweGVlLCAweGU3LCAweDRiLCAweDRkLCAweDZlLCAweDVkLCAweDg0LCAweDMyLCAweGVlLAotCTB4NzMsIDB4NjAsIDB4ZjgsIDB4NTYsIDB4YmEsIDB4N2UsIDB4ZGQsIDB4NGYsIDB4YTQsIDB4ODMsIDB4MGEsIDB4NzEsCi0JMHhlMywgMHg1ZiwgMHhiOSwgMHg0ZSwgMHhhYiwgMHhjZiwgMHg5OSwgMHhhNCwgMHgwYiwgMHg5ZiwgMHgwNiwgMHhkYiwKLQkweDMxLCAweDU1LCAweDFhLCAweGM2LCAweDYwLCAweDIyLCAweDBmLCAweGVkLCAweDU1LCAweDc1LCAweGU2LCAweGJiLAotCTB4MWQsIDB4ZDUsIDB4NzEsIDB4MGYsIDB4Y2UsIDB4NDYsIDB4OWQsIDB4NjgsIDB4OWMsIDB4ZTMsIDB4MzEsIDB4NzMsCi0JMHg4MywgMHgzNiwgMHg2MiwgMHhmZCwgMHgwNywgMHhkMSwgMHhiMCwgMHg2OSwgMHg4MywgMHhiMywgMHg3ZCwgMHg0OCwKLQkweDhlLCAweGI2LCAweDE4LCAweDJkLCAweDE5LCAweDljLCAweGRmLCAweDlmLCAweGY4LCAweDgyLCAweDM4LCAweDU0LAotCTB4MWMsIDB4MjksIDB4NmYsIDB4MmEsIDB4YzIsIDB4MWQsIDB4ODMsIDB4NzIsIDB4YzcsIDB4NDEsIDB4ZWUsIDB4NjQsCi0JMHg2OCwgMHgzMywgMHg3NywgMHgyYSwgMHg0NSwgMHg1OCwgMHgzNiwgMHgyYywgMHg5OCwgMHgyZiwgMHhiNiwgMHg5YiwKLQkweGE2LCAweGVkLCAweGFlLCAweGU1LCAweGI5LCAweDc1LCAweDQyLCAweGRlLCAweGQ5LCAweDc4LCAweDg1LCAweGIyLAotCTB4YjcsIDB4MmIsIDB4NDYsIDB4ZDcsIDB4NDUsIDB4M2QsIDB4MmMsIDB4ZjcsIDB4M2MsIDB4M2IsIDB4NWIsIDB4NjgsCi0JMHgwNywgMHgzMywgMHg0MSwgMHg2ZiwgMHg3YiwgMHhiOSwgMHg1ZCwgMHhlYiwgMHhmOCwgMHg5NSwgMHhkMiwgMHg4MCwKLQkweGYxLCAweDMxLCAweGEwLCAweDdmLCAweDM0LCAweDgwLCAweDhmLCAweDEyLCAweDEyLCAweDAzLCAweDA0LCAweGYwLAotCTB4MWIsIDB4NzIsIDB4YTMsIDB4MGIsIDB4ODksIDB4MDYsIDB4ZmEsIDB4MGIsIDB4NmYsIDB4ZjgsIDB4MzksIDB4MzQsCi0JMHhlMCwgMHg0MywgMHg3ZSwgMHhjZiwgMHg4ZCwgMHhlYiwgMHhiOCwgMHg0YywgMHhmOSwgMHgzOSwgMHhlMywgMHgyMSwKLQkweDVjLCAweDljLCAweGI4LCAweDE3LCAweDk3LCAweGY2LCAweDJhLCAweDc4LCAweDQzLCAweGJiLCAweDE3LCAweGU3LAotCTB4MGYsIDB4NzUsIDB4NjIsIDB4ZjEsIDB4NWUsIDB4NzksIDB4ZWYsIDB4ZWYsIDB4NDgsIDB4NTAsIDB4YTUsIDB4YWYsCi0JMHg3OCwgMHhiYSwgMHhkNiwgMHhlOCwgMHg3YSwgMHg1MSwgMHhhZiwgMHg4MywgMHg1ZSwgMHhlNiwgMHhkNSwgMHhkYiwKLQkweDg5LCAweDA5LCAweDgyLCAweGYxLCAweDYxLCAweDliLCAweDljLCAweGExLCAweDljLCAweDY1LCAweDI3LCAweDJlLAotCTB4OTksIDB4YjgsIDB4N2UsIDB4NmIsIDB4YWMsIDB4YjgsIDB4OGUsIDB4ZTksIDB4MzIsIDB4OGYsIDB4ZTAsIDB4Y2IsCi0JMHg3YywgMHhmYywgMHg0OCwgMHgwZCwgMHg3MCwgMHgxZiwgMHg2ZSwgMHg3MiwgMHhiMSwgMHgyOSwgMHhmYSwgMHhjNywKLQkweDNjLCAweGU0LCAweDU2LCAweDRhLCAweGNkLCAweDVhLCAweDQzLCAweDNlLCAweDcxLCAweGU0LCAweDE0LCAweDY1LAotCTB4YjcsIDB4YWEsIDB4ZDIsIDB4NmIsIDB4YzYsIDB4M2EsIDB4YjksIDB4ZjEsIDB4MDYsIDB4YzYsIDB4MzEsIDB4ZTUsCi0JMHhmOCwgMHhlOCwgMHgwNiwgMHhmZiwgMHhmYiwgMHgyMywgMHhlMywgMHg1MSwgMHgxMywgMHhhZiwgMHgxMywgMHhiNywKLQkweDA5LCAweDFmLCAweDdiLCAweDNkLCAweGYxLCAweGY4LCAweDZkLCAweDgyLCAweGRiLCAweDkyLCAweDVmLCAweDJjLAotCTB4ZDYsIDB4YjQsIDB4NGQsIDB4ZGYsIDB4ODEsIDB4YmMsIDB4ZmYsIDB4ZjYsIDB4YzYsIDB4N2YsIDB4MmIsIDB4MjQsCi0JMHg0ZiwgMHg3ZSwgMHgzMSwgMHg1OCwgMHgxNywgMHgyOSwgMHg0NSwgMHgxZiwgMHg5ZiwgMHg0ZiwgMHgyZCwgMHg1NiwKLQkweDcxLCAweDkwLCAweDlmLCAweDdlLCAweGI2LCAweDZiLCAweGUwLCAweDNhLCAweDNlLCAweDM2LCAweDUyLCAweGFhLAotCTB4Y2YsIDB4ZjQsIDB4MjUsIDB4NzEsIDB4ZmEsIDB4ZDMsIDB4ZDMsIDB4YjEsIDB4ZmEsIDB4ZjYsIDB4NTEsIDB4ZTUsCi0JMHhiMiwgMHgxMSwgMHhhOSwgMHhhYywgMHhlNSwgMHg2ZiwgMHgxNSwgMHgzOCwgMHgxMywgMHhmNSwgMHg0ZSwgMHgxZCwKLQkweDQyLCAweGJkLCAweDY3LCAweDQ2LCAweGQ5LCAweDZmLCAweDQ0LCAweDU0LCAweDM5LCAweDFmLCAweGQ5LCAweGFmLAotCTB4ZjQsIDB4NWYsIDB4YzAsIDB4ZTcsIDB4ZTcsIDB4NjYsIDB4ZTksIDB4ZTEsIDB4ZjUsIDB4MzgsIDB4Y2MsIDB4NzksCi0JMHg0ZCwgMHhmZiwgMHg4NCwgMHhhNywgMHgxOCwgMHhjYiwgMHg0NiwgMHhmNCwgMHg3YSwgMHhiNSwgMHg4NywgMHhkOCwKLQkweDEwLCAweDU2LCAweDZmLCAweGE1LCAweDdmLCAweDc5LCAweGQ0LCAweGJmLCAweDMwLCAweGUzLCAweGNhLCAweDIyLAotCTB4YTgsIDB4ZDYsIDB4N2IsIDB4M2QsIDB4NDgsIDB4MGUsIDB4Y2YsIDB4ZTYsIDB4OWEsIDB4YTIsIDB4NzcsIDB4MTYsCi0JMHg2ZiwgMHg2ZCwgMHgyZiwgMHhlZCwgMHgzZSwgMHhlYSwgMHgyNCwgMHgzNiwgMHgyNSwgMHg4OCwgMHhlYiwgMHg3MSwKLQkweGUyLCAweDdhLCAweDJlLCAweDcxLCAweGZkLCAweGUzLCAweDNkLCAweGY5LCAweDM4LCAweGJkLCAweGE3LCAweDExLAotCTB4ZTksIDB4NTIsIDB4ZTksIDB4NjMsIDB4ODcsIDB4OTMsIDB4YmIsIDB4NGIsIDB4NjUsIDB4ZWUsIDB4MzksIDB4NTQsCi0JMHgwZiwgMHhkYywgMHgyNywgMHg3NywgMHgxZSwgMHgyMSwgMHg3ZSwgMHgzNiwgMHgyNywgMHhjZSwgMHhiOCwgMHhhYiwKLQkweGNkLCAweDBlLCAweDg3LCAweGY5LCAweDRlLCAweDQzLCAweGM5LCAweDBkLCAweGZhLCAweGU3LCAweGQyLCAweDcyLAotCTB4ZDEsIDB4NGEsIDB4MzksIDB4ZTYsIDB4NmEsIDB4YmUsIDB4YjksIDB4ZDYsIDB4ZGQsIDB4YmUsIDB4MjIsIDB4YzYsCi0JMHg5MSwgMHg3MiwgMHg1ZiwgMHg3MSwgMHhhOSwgMHhkNCwgMHgwMywgMHhkOSwgMHg1ZSwgMHhmYSwgMHg0OSwgMHhhYywKLQkweDYzLCAweDYwLCAweDA3LCAweDM1LCAweGFjLCAweGFlLCAweGQyLCAweDQwLCAweDQyLCAweDBmLCAweGQzLCAweDg3LAotCTB4MDUsIDB4MTEsIDB4MjYsIDB4YTcsIDB4MmYsIDB4ZDQsIDB4ZTQsIDB4YmIsIDB4OGEsIDB4OGIsIDB4OGMsIDB4ZDMsCi0JMHhjNiwgMHgxYSwgMHgxNCwgMHg3YywgMHg3YSwgMHg5NywgMHg3MCwgMHgwMywgMHhiZiwgMHg3ZSwgMHg1YSwgMHhjMSwKLQkweDFjLCAweGViLCAweDVkLCAweDBhLCAweGMxLCAweDhjLCAweDYyLCAweDEzLCAweDMzLCAweDcyLCAweDRkLCAweDllLAotCTB4MzQsIDB4YzcsIDB4YzQsIDB4MWIsIDB4NzksIDB4NTcsIDB4YWMsIDB4OWEsIDB4N2UsIDB4ZTgsIDB4OWUsIDB4NDQsCi0JMHhmZCwgMHg5NCwgMHhjZiwgMHg0ZSwgMHhjZSwgMHhmNiwgMHhmOCwgMHg1ZCwgMHhlNCwgMHg2YSwgMHgyNiwgMHg2NywKLQkweDIwLCAweGZlLCAweGJmLCAweDlmLCAweGUxLCAweDE1LCAweGRlLCAweGM2LCAweDliLCAweGVmLCAweDkwLCAweDllLAotCTB4YmIsIDB4MTYsIDB4YTcsIDB4NWIsIDB4N2IsIDB4ZTgsIDB4MWYsIDB4ZmUsIDB4OWQsIDB4ZDEsIDB4NzYsIDB4YzMsCi0JMHhmYSwgMHhiMywgMHhiOCwgMHhiMiwgMHg4MCwgMHhkZiwgMHhhNSwgMHhiZiwgMHhkOCwgMHgxZCwgMHhmNSwgMHgyMiwKLQkweGZlLCAweDMzLCAweGUzLCAweDI5LCAweDkzLCAweGRmLCAweGQ5LCAweGU3LCAweGNhLCAweDFkLCAweDUxLCAweGM3LAotCTB4YzAsIDB4MTcsIDB4YjcsIDB4YzksIDB4ZmIsIDB4MTMsIDB4YjYsIDB4NTksIDB4M2MsIDB4YzEsIDB4ZjIsIDB4YmQsCi0JMHgxNywgMHg4YywgMHhkNSwgMHhlNiwgMHg1YSwgMHhmMywgMHgzMywgMHhlZCwgMHgyNCwgMHhhNiwgMHg5NiwgMHhiNSwKLQkweDI4LCAweGY4LCAweDgxLCAweDU2LCAweGFmLCAweDllLCAweDQyLCAweGExLCAweGUwLCAweDQ5LCAweDU4LCAweDZhLAotCTB4OWYsIDB4ZjksIDB4OWEsIDB4Y2YsIDB4N2QsIDB4OTAsIDB4OWYsIDB4YmIsIDB4ZjgsIDB4ZmMsIDB4YjgsIDB4ZTYsCi0JMHg2OCwgMHhkYywgMHgwYywgMHhhOSwgMHhmNywgMHhkYSwgMHg3OCwgMHg1NiwgMHhmNSwgMHhlZSwgMHg1MywgMHhmMCwKLQkweDg3LCAweDczLCAweDk1LCAweDE5LCAweGEzLCAweGJkLCAweDQyLCAweGRhLCAweDU4LCAweDc1LCAweDVmLCAweDI4LAotCTB4NjcsIDB4Y2QsIDB4N2MsIDB4OGEsIDB4YTUsIDB4MzMsIDB4ZjMsIDB4YTgsIDB4MzMsIDB4ODIsIDB4NWQsIDB4YzIsCi0JMHg0ZCwgMHgxNiwgMHg3MiwgMHhlZiwgMHgyYSwgMHg4NiwgMHgyNywgMHg4MCwgMHg5YywgMHgwMSwgMHg5NywgMHhjOSwKLQkweDk1LCAweGQ0LCAweGRhLCAweDVhLCAweGNmLCAweGIzLCAweDU4LCAweDNlLCAweDU3LCAweGRlLCAweDAxLCAweGRiLAotCTB4YWEsIDB4ZTMsIDB4NzYsIDB4MWIsIDB4ZGUsIDB4YmIsIDB4ZGQsIDB4ZDYsIDB4NzQsIDB4ZGYsIDB4NzcsIDB4NWIsCi0JMHg0MiwgMHg5YiwgMHg2NSwgMHg1ZiwgMHg0NCwgMHg2NywgMHgzMywgMHhiNywgMHhlYiwgMHg5NiwgMHgxYSwgMHhlNSwKLQkweDRhLCAweGZhLCAweGI0LCAweDIxLCAweGM2LCAweGZjLCAweDJiLCAweDFiLCAweGZlLCAweGRkLCAweGY4LCAweDk2LAotCTB4MjMsIDB4ZWMsIDB4YjEsIDB4YTMsIDB4ZDYsIDB4ZDMsIDB4OGIsIDB4YWIsIDB4NDYsIDB4YWEsIDB4NDIsIDB4OWUsCi0JMHhjYiwgMHgxOCwgMHhmMiwgMHhhZSwgMHhhNywgMHhkNCwgMHg1OSwgMHgwYywgMHhlMywgMHg4ZSwgMHg1YSwgMHg4MywKLQkweGYxLCAweGI0LCAweDZkLCAweGI5LCAweDlkLCAweDc2LCAweDkxLCAweGFiLCAweDlkLCAweDM3LCAweGVhLCAweGFhLAotCTB4NmEsIDB4ZGQsIDB4MzYsIDB4YTUsIDB4OGUsIDB4ZGEsIDB4NTEsIDB4ODEsIDB4NTcsIDB4YTksIDB4YmYsIDB4YWYsCi0JMHg0ZSwgMHg4OCwgMHgwZiwgMHg1NCwgMHg3MSwgMHg5OCwgMHg3NiwgMHg3YSwgMHhhOCwgMHhjZSwgMHhkNywgMHg3OSwKLQkweDg5LCAweGIxLCAweGU1LCAweDI3LCAweGU0LCAweGZjLCAweDZmLCAweDZiLCAweGRlLCAweGY2LCAweDkzLCAweDkyLAotCTB4OTMsIDB4MGMsIDB4M2EsIDB4ZjAsIDB4NjYsIDB4YzMsIDB4NTUsIDB4MzMsIDB4NGYsIDB4MWMsIDB4M2IsIDB4YTAsCi0JMHg2MiwgMHgyOCwgMHg2MSwgMHhkOSwgMHhmYiwgMHg2YiwgMHhiNCwgMHhlMywgMHhlYiwgMHg3NywgMHgxZSwgMHg0MiwKLQkweGU4LCAweDE5LCAweDE0LCAweGZiLCAweDA4LCAweDk5LCAweDc2LCAweDc0LCAweDNkLCAweDc3LCAweDI0LCAweDc4LAotCTB4MmQsIDB4NzYsIDB4YjEsIDB4NWUsIDB4NmEsIDB4N2UsIDB4OTEsIDB4MTQsIDB4YzgsIDB4NmQsIDB4MDYsIDB4NTYsCi0JMHg5MiwgMHgxMywgMHg4YiwgMHhjZiwgMHg2ZCwgMHg2MCwgMHhmYywgMHhlYiwgMHhhMCwgMHhmZCwgMHg5YywgMHg2NCwKLQkweDJjLCAweGMyLCAweGI1LCAweDM1LCAweDE5LCAweGM2LCAweDA1LCAweGM2LCAweDY2LCAweGMzLCAweGE4LCAweDU3LAotCTB4OGYsIDB4NjEsIDB4MGQsIDB4NzksIDB4MmQsIDB4MzksIDB4Y2YsIDB4NDQsIDB4MGIsIDB4NzYsIDB4OWEsIDB4YjEsCi0JMHg5NSwgMHg0ZiwgMHhiZCwgMHg1ZiwgMHg1OSwgMHhjNCwgMHhmZCwgMHhiNywgMHhhMCwgMHhmYiwgMHg5MCwgMHg4NywKLQkweDNlLCAweGMxLCAweDMwLCAweDFlLCAweGQwLCAweGZmLCAweDEyLCAweDY1LCAweDgzLCAweGRkLCAweDlkLCAweDY1LAotCTB4OTQsIDB4YzcsIDB4ZTcsIDB4YzEsIDB4NDgsIDB4MDcsIDB4MzEsIDB4N2QsIDB4ZDMsIDB4MzEsIDB4NDUsIDB4ZWUsCi0JMHhhNSwgMHg3ZSwgMHg4YiwgMHhlNywgMHgxMSwgMHgzMCwgMHhmOSwgMHhmNiwgMHg4ZSwgMHhjNCwgMHgwMywgMHhmNCwKLQkweDcxLCAweGZmLCAweDFkLCAweDNiLCAweDU0LCAweDY1LCAweDE5LCAweGRkLCAweDFkLCAweDM5LCAweDIzLCAweGZjLAotCTB4NmEsIDB4OTMsIDB4NzYsIDB4ZjIsIDB4YmMsIDB4ZmQsIDB4ZmIsIDB4ZDAsIDB4ZTcsIDB4MzQsIDB4ZjIsIDB4OTksCi0JMHhmOCwgMHg3OSwgMHg2OSwgMHgwYiwgMHg1YywgMHg4OCwgMHg3NiwgMHhlMiwgMHg2OCwgMHg5YSwgMHg3YSwgMHgxZCwKLQkweGVkLCAweGMzLCAweGIxLCAweGI0LCAweGNjLCAweDI5LCAweDljLCAweGFiLCAweDAxLCAweGIxLCAweDQxLCAweDNiLAotCTB4YzYsIDB4NzUsIDB4NWYsIDB4YjgsIDB4OTgsIDB4NzIsIDB4YzksIDB4MGYsIDB4N2EsIDB4YzMsIDB4NmIsIDB4ODgsCi0JMHhiMSwgMHg3ZCwgMHhjMywgMHg2OSwgMHhiYywgMHhiOSwgMHhkYiwgMHhkYiwgMHg1ZSwgMHhhNywgMHg2OCwgMHg4OCwKLQkweDRlLCAweDQwLCAweDdkLCAweDZlLCAweDQ5LCAweDFhLCAweGE3LCAweDQ2LCAweDFlLCAweDg2LCAweGE3LCAweGNhLAotCTB4ZWIsIDB4NTksIDB4YTksIDB4YjQsIDB4NjIsIDB4ZWIsIDB4YzQsIDB4ZDcsIDB4ZTUsIDB4OWMsIDB4MzQsIDB4Y2UsCi0JMHhkZCwgMHg4YSwgMHgwOCwgMHg2NSwgMHhiZiwgMHgxZCwgMHhmZiwgMHgzOCwgMHg1NywgMHg3MCwgMHhhYywgMHg3NywKLQkweGEyLCAweDEwLCAweDM1LCAweGY0LCAweDQ3LCAweGFmLCAweDk4LCAweDdlLCAweGQ3LCAweGIyLCAweGEzLCAweDZhLAotCTB4ZWQsIDB4NTMsIDB4ZTMsIDB4ODksIDB4OGMsIDB4NWYsIDB4ZmYsIDB4ZjMsIDB4ZjIsIDB4ZmEsIDB4YjEsIDB4MTEsCi0JMHg1NiwgMHg0NSwgMHg1ZSwgMHhkMiwgMHhhZiwgMHg5YSwgMHhkYywgMHg0MCwgMHg3OCwgMHg4MSwgMHhlNSwgMHhiZiwKLQkweDRiLCAweGI1LCAweGY3LCAweDhkLCAweDg3LCAweGNkLCAweDMxLCAweDQ2LCAweDM5LCAweDhmLCAweGVjLCAweDI5LAotCTB4OTAsIDB4ZDksIDB4YjcsIDB4OGUsIDB4ZGYsIDB4NDYsIDB4MjUsIDB4ZjcsIDB4YTEsIDB4ZTIsIDB4OTgsIDB4MmUsCi0JMHgzOCwgMHhkMiwgMHg0YSwgMHg1YiwgMHg3NSwgMHg2MiwgMHg1MywgMHgwMywgMHhjZCwgMHhkMSwgMHhhYywgMHgwOSwKLQkweDRjLCAweDYzLCAweDY3LCAweGYyLCAweGY3LCAweGM2LCAweGYzLCAweGQ0LCAweGEzLCAweDU1LCAweGU0LCAweDM0LAotCTB4MWUsIDB4ZTIsIDB4YzAsIDB4MzMsIDB4YzEsIDB4MDcsIDB4YzgsIDB4NGIsIDB4YjksIDB4ZTcsIDB4ODQsIDB4ODMsCi0JMHgxOCwgMHhhNCwgMHgyMCwgMHhkMSwgMHg0OCwgMHhmYiwgMHgwZiwgMHgyZSwgMHhjNCwgMHg5NCwgMHhkOSwgMHhmZSwKLQkweGIxLCAweGI5LCAweDU2LCAweGFlLCAweGIxLCAweDYxLCAweDllLCAweDE1LCAweDJiLCAweDhhLCAweGZjLCAweGZmLAotCTB4MjMsIDB4ZjIsIDB4N2IsIDB4Y2QsIDB4ZjAsIDB4OTQsIDB4ODksIDB4ZmMsIDB4MWMsIDB4NzAsIDB4ZmIsIDB4MWIsCi0JMHhiMCwgMHg4ZiwgMHg2ZCwgMHhjZSwgMHhlYywgMHg3NiwgMHg2MCwgMHg0MCwgMHg2YiwgMHhjNSwgMHhjMCwgMHgwNCwKLQkweDNjLCAweDlmLCAweGIzLCAweGNkLCAweGJiLCAweDIzLCAweGJmLCAweDk4LCAweDZiLCAweDcxLCAweDg3LCAweGY3LAotCTB4ZDAsIDB4MWQsIDB4N2QsIDB4YzEsIDB4NTgsIDB4NWUsIDB4MjYsIDB4ZmIsIDB4OTUsIDB4N2IsIDB4M2UsIDB4NmQsCi0JMHg2YywgMHg5ZiwgMHhjZCwgMHhmYiwgMHgzZCwgMHg2YiwgMHgzYywgMHg2MiwgMHhmYSwgMHg4OSwgMHg3ZiwgMHg5YSwKLQkweDJiLCAweDc1LCAweGI5LCAweGQ3LCAweDEzLCAweDA2LCAweDJlLCAweGVhLCAweGU3LCAweGU0LCAweGZkLCAweDQ5LAotCTB4OTMsIDB4ZWIsIDB4ZjUsIDB4MjYsIDB4ZTQsIDB4NmMsIDB4NjUsIDB4NmQsIDB4YzcsIDB4MzIsIDB4ZjIsIDB4MjgsCi0JMHhhOCwgMHhiYSwgMHg3MSwgMHhkZCwgMHg2NywgMHgzMywgMHgzOSwgMHg1MCwgMHhlMSwgMHgxMCwgMHgyMiwgMHhhYiwKLQkweDJjLCAweGQ3LCAweGYwLCAweDY0LCAweGYyLCAweDZlLCAweGM3LCAweGQxLCAweDkzLCAweDk0LCAweDlhLCAweGI5LAotCTB4YmMsIDB4OWYsIDB4NWQsIDB4ODIsIDB4MTcsIDB4ZjUsIDB4ODcsIDB4YjAsIDB4YTAsIDB4ZWMsIDB4MGYsIDB4OWMsCi0JMHg0ZiwgMHg3MiwgMHgzMCwgMHhhZCwgMHgxYywgMHhjZiwgMHgzMCwgMHgzNiwgMHhlYSwgMHhmNSwgMHhmYSwgMHg0NSwKLQkweDdjLCAweDEzLCAweDUzLCAweDE1LCAweDIxLCAweGIzLCAweDg2LCAweDkxLCAweGQ3LCAweGU0LCAweDUxLCAweGI0LAotCTB4M2QsIDB4NmIsIDB4ZTAsIDB4MmMsIDB4ZDUsIDB4ODgsIDB4ZmQsIDB4YTIsIDB4OTMsIDB4ODIsIDB4MzEsIDB4YjIsCi0JMHgyNiwgMHhjMSwgMHgxOSwgMHhjOSwgMHhmMSwgMHg0YiwgMHg0ZSwgMHgzYywgMHgxMiwgMHhhZSwgMHg2OSwgMHhlYSwKLQkweDU0LCAweDFlLCAweDY0LCAweGNjLCAweGZmLCAweDRlLCAweDUwLCAweGRlLCAweDIxLCAweGY0LCAweGI3LCAweGQ3LAotCTB4ZDgsIDB4OTAsIDB4MzcsIDB4MTksIDB4Y2EsIDB4YzUsIDB4MmYsIDB4ODMsIDB4NzIsIDB4OWYsIDB4MWIsIDB4YWUsCi0JMHhiMSwgMHhiNCwgMHgzNywgMHhkMiwgMHg2OCwgMHg1NywgMHg1ZCwgMHg2OSwgMHhiMywgMHg1NiwgMHgyOSwgMHhiOCwKLQkweDliLCAweGEwLCAweGNjLCAweDg5LCAweDJkLCAweDI2LCAweGE2LCAweGRjLCAweDg1LCAweDE1LCAweGU2LCAweDM5LAotCTB4YWIsIDB4ZjQsIDB4YTcsIDB4YzIsIDB4MWIsIDB4OGUsIDB4OTAsIDB4MzcsIDB4MDAsIDB4YjksIDB4MDMsIDB4YzYsCi0JMHhiMiwgMHhlNiwgMHg2MCwgMHhiZCwgMHhkZSwgMHg4NywgMHhkYiwgMHhjOSwgMHhmZCwgMHg5NywgMHhlMSwgMHgyMywKLQkweDVkLCAweGVhLCAweDI0LCAweDkxLCAweDZmLCAweDM5LCAweGNjLCAweGZiLCAweDM4LCAweDg3LCAweDgzLCAweDViLAotCTB4YTMsIDB4MmIsIDB4YjEsIDB4N2YsIDB4MzAsIDB4YTIsIDB4MzgsIDB4OWIsIDB4YmMsIDB4YWQsIDB4MzEsIDB4ZjIsCi0JMHgyMiwgMHg0MiwgMHhiYSwgMHg5OSwgMHgyMywgMHhkYywgMHg0MSwgMHhmZSwgMHg3MCwgMHgzOCwgMHhkNCwgMHg4OSwKLQkweGVkLCAweDdhLCAweDJlLCAweDdhLCAweGY1LCAweDcwLCAweDVlLCAweGNmLCAweDkyLCAweDJlLCAweGJjLCAweGEyLAotCTB4MTcsIDB4NGEsIDB4MWUsIDB4OWUsIDB4ZjgsIDB4YWUsIDB4NmQsIDB4NGEsIDB4YzIsIDB4ZGYsIDB4ZjEsIDB4MjEsCi0JMHhiYywgMHg1MywgMHg0NywgMHhjOSwgMHg0MSwgMHhjZSwgMHhkYiwgMHgxNSwgMHhmOCwgMHg5NywgMHgzYSwgMHg1YywKLQkweGIxLCAweGIxLCAweDI2LCAweGVjLCAweDliLCAweGE4LCAweDcwLCAweGM1LCAweGM3LCAweDE4LCAweDBmLCAweDRlLAotCTB4MzAsIDB4ODYsIDB4NjEsIDB4MWMsIDB4YWMsIDB4OGQsIDB4YWQsIDB4YzQsIDB4YjYsIDB4NjEsIDB4YjksIDB4ZTMsCi0JMHgxYiwgMHhjMCwgMHhkZCwgMHg2NSwgMHhlNywgMHg4YywgMHhhNywgMHhmZCwgMHg4MiwgMHhhMywgMHhmMywgMHg3MSwKLQkweDY3LCAweDk5LCAweGNmLCAweGY0LCAweDgxLCAweGVkLCAweGI2LCAweGFmLCAweGUzLCAweDBmLCAweDc2LCAweDZjLAotCTB4MGUsIDB4ZmUsIDB4YzgsIDB4MDgsIDB4M2YsIDB4MjYsIDB4NzIsIDB4N2IsIDB4OWUsIDB4NjcsIDB4ZjQsIDB4MDAsCi0JMHhiMSwgMHhkNCwgMHg5MiwgMHhlMSwgMHg4NiwgMHg2YiwgMHgzMiwgMHgwYywgMHhhMSwgMHg3YiwgMHgzMCwgMHg0NCwKLQkweGZiLCAweDcxLCAweDkzLCAweDZmLCAweDVkLCAweDNmLCAweDg3LCAweGY1LCAweGJhLCAweDZmLCAweDY2LCAweDA4LAotCTB4YWQsIDB4NzgsIDB4NjUsIDB4ZTIsIDB4NmYsIDB4ZDgsIDB4NGYsIDB4ZjIsIDB4MzMsIDB4NGIsIDB4ZDEsIDB4OTEsCi0JMHg4OSwgMHg0NywgMHhjMiwgMHhiNiwgMHgwMiwgMHhmMiwgMHgzZiwgMHhjYiwgMHgwZiwgMHgwYywgMHgwYywgMHhjYiwKLQkweDczLCAweGVmLCAweGJlLCAweDMwLCAweGI5LCAweGNjLCAweDhiLCAweDBkLCAweDMzLCAweGQ0LCAweGMzLCAweDQ4LAotCTB4YTcsIDB4ZGQsIDB4N2MsIDB4MmYsIDB4ZTIsIDB4Y2EsIDB4ZjcsIDB4ZGMsIDB4NzUsIDB4ZGUsIDB4NzUsIDB4MzMsCi0JMHgwYSwgMHhmMCwgMHgxNywgMHgzMSwgMHhmYSwgMHg2NCwgMHg5YiwgMHhmNCwgMHg5NSwgMHhiMSwgMHg5ZCwgMHgzOCwKLQkweGQ4LCAweDMwLCAweDFmLCAweDUzLCAweDZiLCAweDY1LCAweDRjLCAweDk5LCAweGNmLCAweDMwLCAweDllLCAweGEzLAotCTB4OGUsIDB4ZmYsIDB4MDAsIDB4NGUsIDB4ZTQsIDB4ZGUsIDB4NjUsIDB4YzcsIDB4MzksIDB4OTUsIDB4YjYsIDB4YTIsCi0JMHhmZiwgMHhkZSwgMHg0OCwgMHhkMywgMHg1NywgMHg2ZSwgMHhjZCwgMHhkOCwgMHhjYywgMHgzNiwgMHhkYSwgMHhjYywKLQkweDI4LCAweDZkLCAweGE2LCAweDlmLCAweDM2LCAweDczLCAweGY3LCAweGEyLCAweDNiLCAweDMyLCAweDM2LCAweDIzLAotCTB4YjEsIDB4ZTEsIDB4MzQsIDB4MWUsIDB4ZTksIDB4NTcsIDB4ZDEsIDB4ZjYsIDB4OWYsIDB4YTYsIDB4ZDEsIDB4NzYsCi0JMHgyMCwgMHhiYiwgMHg3NiwgMHhkMSwgMHhiYiwgMHhlYywgMHhmYSwgMHhhNSwgMHhkZSwgMHgyOCwgMHhmMywgMHhjOCwKLQkweDFhLCAweDY1LCAweDJmLCAweGQ5LCAweGRmLCAweGFmLCAweDdmLCAweGFmLCAweGQ2LCAweDljLCAweDc4LCAweGMyLAotCTB4ZGMsIDB4ZDcsIDB4ZGYsIDB4NTcsIDB4NWIsIDB4NzUsIDB4ZmEsIDB4ZWMsIDB4N2UsIDB4YzIsIDB4MzcsIDB4N2QsCi0JMHhhZiwgMHhiZCwgMHhlZCwgMHhjNiwgMHhlZiwgMHg3YiwgMHhkZCwgMHgzNywgMHg3ZSwgMHgzZiwgMHg3OSwgMHhkMywKLQkweGYzLCAweGFjLCAweDZkLCAweDVjLCAweDk3LCAweDY5LCAweGE3LCAweGVlLCAweGViLCAweDljLCAweGU0LCAweDNlLAotCTB4M2YsIDB4YmEsIDB4ZWIsIDB4YjAsIDB4ZDEsIDB4ZmUsIDB4YjAsIDB4YWMsIDB4MjUsIDB4NDAsIDB4OWUsIDB4MjQsCi0JMHhlYiwgMHg3YiwgMHgwZiwgMHgwYiwgMHhmZSwgMHg2OCwgMHg2ZCwgMHhlZiwgMHg2NCwgMHg2YywgMHhjOSwgMHg3YywKLQkweDM3LCAweGM4LCAweGQ0LCAweGFiLCAweGQ3LCAweDI3LCAweDM0LCAweGZjLCAweGY4LCAweDg2LCAweGZiLCAweDhiLAotCTB4MDEsIDB4NjUsIDB4NDcsIDB4NGMsIDB4NzQsIDB4Y2EsIDB4MTEsIDB4NzEsIDB4MzUsIDB4NDEsIDB4YjksIDB4ZDMsCi0JMHgxZiwgMHhjMSwgMHg0MiwgMHg3ZiwgMHgxNywgMHgzZSwgMHhhMiwgMHhjZSwgMHhiNywgMHgyOSwgMHgxYSwgMHhlMywKLQkweGJiLCAweDI0LCAweGUyLCAweDYzLCAweDVlLCAweDdkLCAweDEzLCAweGIxLCAweDIyLCAweDM2LCAweGY2LCAweDk3LAotCTB4MzgsIDB4OTEsIDB4Y2MsIDB4YTcsIDB4MGUsIDB4NzYsIDB4NjEsIDB4NjUsIDB4ZDAsIDB4MWIsIDB4MTgsIDB4YTIsCi0JMHhlZiwgMHhiZCwgMHhhMCwgMHg4YiwgMHg5ZCwgMHg0YSwgMHhlZCwgMHhkNywgMHg0MywgMHgwYywgMHgwZCwgMHgwOCwKLQkweDA2LCAweGFhLCAweDI5LCAweGYxLCAweGM5LCAweGI0LCAweDNkLCAweGUxLCAweGQ4LCAweDBlLCAweGVhLCAweGM2LAotCTB4ZDYsIDB4ZTEsIDB4YjcsIDB4ZDAsIDB4MTIsIDB4OTUsIDB4N2MsIDB4ZWIsIDB4NzEsIDB4M2MsIDB4OWEsIDB4YTQsCi0JMHgwZiwgMHhkMiwgMHg2OCwgMHhiNywgMHg4YiwgMHgxYywgMHhkMCwgMHhjYSwgMHgyNCwgMHgyNywgMHhlYywgMHhjMCwKLQkweGRhLCAweGY4LCAweDdjLCAweDQ0LCAweGFhLCAweGE0LCAweGFlLCAweGIyLCAweDEyLCAweGRiLCAweDA3LCAweDE1LAotCTB4ZmMsIDB4NTYsIDB4NmEsIDB4OTgsIDB4OGMsIDB4YzEsIDB4NWYsIDB4MjcsIDB4NDcsIDB4OWMsIDB4OGMsIDB4NmUsCi0JMHhjMSwgMHg4OCwgMHg1OSwgMHhhMywgMHhkNiwgMHhmYSwgMHhhYSwgMHhlZCwgMHhlMSwgMHgxNywgMHg0YiwgMHhjOSwKLQkweGI3LCAweDEzLCAweGJhLCAweGJmLCAweDlkLCAweGY2LCAweGU4LCAweDI5LCAweDZhLCAweGYyLCAweDg3LCAweDYzLAotCTB4Y2EsIDB4NTcsIDB4ZjgsIDB4MzcsIDB4ZjMsIDB4YWUsIDB4OGQsIDB4ZWUsIDB4ZGEsIDB4NDQsIDB4NWQsIDB4ZGYsCi0JMHgzMywgMHgyYywgMHhmZCwgMHhiOCwgMHhjNywgMHg1YiwgMHhlNiwgMHgzYSwgMHhhYywgMHg3NywgMHhkZCwgMHhhZCwKLQkweGJjLCAweGU0LCAweDViLCAweDM4LCAweDk4LCAweDc2LCAweGUxLCAweGE5LCAweGI4LCAweDQ3LCAweGIxLCAweGVmLAotCTB4NTEsIDB4ZDEsIDB4MTIsIDB4ZjcsIDB4OWUsIDB4YmMsIDB4NjAsIDB4MzcsIDB4OGMsIDB4YmEsIDB4YzUsIDB4MjUsCi0JMHg5OCwgMHgyMSwgMHhiZiwgMHhhOCwgMHg1YywgMHgyYywgMHgzZSwgMHhlMSwgMHgzZiwgMHgyMywgMHg1NSwgMHhkNSwKLQkweDRjLCAweDZjLCAweDQzLCAweGExLCAweDZkLCAweDg5LCAweDU3LCAweGI3LCAweGQ5LCAweDdkLCAweGFkLCAweDMzLAotCTB4ZDgsIDB4OGEsIDB4YmMsIDB4YjEsIDB4MDcsIDB4Y2MsIDB4NzUsIDB4N2YsIDB4MjMsIDB4MmUsIDB4ZWYsIDB4MmYsCi0JMHhkNSwgMHg1MywgMHhkZiwgMHhlOCwgMHgyNywgMHgwZiwgMHg4OSwgMHgwYywgMHgxMSwgMHhhOSwgMHg2YywgMHg4MiwKLQkweGE3LCAweGEyLCAweDY5LCAweGQ3LCAweDdjLCAweGU0LCAweDdmLCAweDQ1LCAweGNlLCAweDNkLCAweDhkLCAweDg5LAotCTB4YTQsIDB4ZDYsIDB4NTEsIDB4NjIsIDB4MzMsIDB4NzAsIDB4M2EsIDB4NzgsIDB4MjcsIDB4NTIsIDB4NjYsIDB4MGQsCi0JMHg2MywgMHgyNSwgMHhmYSwgMHgwNywgMHgyNSwgMHgzZiwgMHhhZiwgMHg0MCwgMHg1YiwgMHg1NCwgMHg0MCwgMHhjZSwKLQkweGE3LCAweDA1LCAweDVlLCAweGI0LCAweDQ5LCAweGNkLCAweDc5LCAweDBiLCAweGJlLCAweGMxLCAweGJkLCAweGRlLAotCTB4MWYsIDB4MTUsIDB4N2IsIDB4ZDUsIDB4ZGMsIDB4NmQsIDB4NGEsIDB4ZjgsIDB4YWEsIDB4OWQsIDB4N2IsIDB4ZmQsCi0JMHhiNSwgMHhlZSwgMHgzZiwgMHhmOSwgMHg2YiwgMHhiYiwgMHg3ZiwgMHgyYSwgMHg2NCwgMHhkNywgMHg1ZCwgMHg5MywKLQkweGUzLCAweDJhLCAweDMxLCAweGM0LCAweDhhLCAweDMxLCAweGQzLCAweGU0LCAweGI0LCAweDg1LCAweDFjLCAweGI3LAotCTB4MjAsIDB4NzgsIDB4ODksIDB4ZGMsIDB4NDAsIDB4YzYsIDB4NWQsIDB4M2UsIDB4MGYsIDB4YzUsIDB4MmQsIDB4ZTgsCi0JMHhkZiwgMHhmYiwgMHhhMSwgMHgxMSwgMHg2ZSwgMHg5MywgMHgzOSwgMHhmZSwgMHhjMCwgMHhiOCwgMHhkNCwgMHg4OSwKLQkweDk1LCAweDZiLCAweDNkLCAweDU4LCAweDExLCAweDk3LCAweDljLCAweGVhLCAweDhmLCAweDJiLCAweDJkLCAweGRkLAotCTB4OTIsIDB4ZWYsIDB4MGUsIDB4NzQsIDB4ZTgsIDB4MDQsIDB4ZGIsIDB4YWEsIDB4MmYsIDB4OGQsIDB4MGEsIDB4MzMsCi0JMHg2NiwgMHhiZCwgMHg2ZiwgMHhiZSwgMHhlOCwgMHg0YiwgMHg2ZiwgMHhlMiwgMHg4NSwgMHhmOSwgMHg2MiwgMHhkZiwKLQkweGJkLCAweDEzLCAweDRmLCAweGJiLCAweDJkLCAweGJkLCAweDdiLCAweDk5LCAweGRmLCAweDY1LCAweDJjLCAweDZkLAotCTB4ZGYsIDB4MTYsIDB4OWMsIDB4YTksIDB4MTQsIDB4NWUsIDB4ZjMsIDB4ZTgsIDB4ZjgsIDB4ZWMsIDB4ZjYsIDB4NTYsCi0JMHhiZCwgMHhlYSwgMHhmNSwgMHg2YiwgMHhiOSwgMHgxYSwgMHhhOSwgMHgxMywgMHg4NiwgMHg5NSwgMHhiNiwgMHg2OCwKLQkweGFiLCAweGIyLCAweDNhLCAweDJhLCAweGI1LCAweDQyLCAweDViLCAweGE4LCAweDgwLCAweDFjLCAweGU2LCAweDk4LAotCTB4MmUsIDB4ZWYsIDB4ZWEsIDB4NjUsIDB4ZWIsIDB4ODYsIDB4MTEsIDB4YTUsIDB4MmYsIDB4NDQsIDB4YzYsIDB4MzMsCi0JMHhkNiwgMHhhYywgMHhlYywgMHg4OCwgMHg5NiwgMHhjOSwgMHg1ZCwgMHgwNywgMHhlYSwgMHhhNSwgMHg4MywgMHgzMiwKLQkweDc1LCAweDIxLCAweDY3LCAweDU0LCAweDYyLCAweGYyLCAweDAyLCAweGU0LCAweDFjLCAweGQwLCAweDkwLCAweDNiLAotCTB4ZDYsIDB4OGUsIDB4MTEsIDB4MzIsIDB4YjgsIDB4OTIsIDB4ZGEsIDB4NzIsIDB4MWMsIDB4MGEsIDB4YzgsIDB4NWQsCi0JMHg4ZSwgMHgwYSwgMHgxNCwgMHgwOSwgMHhiNiwgMHg2YSwgMHgzZCwgMHg3OCwgMHhiNSwgMHgwZCwgMHg0YSwgMHg0MSwKLQkweGVkLCAweDZjLCAweDllLCAweDZhLCAweGRlLCAweDVmLCAweDU3LCAweGRkLCAweDRkLCAweGUyLCAweGRiLCAweDI1LAotCTB4YzcsIDB4NmYsIDB4ZDUsIDB4MWQsIDB4Y2YsIDB4YTYsIDB4MzcsIDB4NjAsIDB4NGMsIDB4ZTUsIDB4YjIsIDB4YjUsCi0JMHg3ZiwgMHgzMywgMHhjNiwgMHgyYiwgMHhjYywgMHg3NywgMHg3ZSwgMHhjOCwgMHg4MSwgMHgwZiwgMHg5MywgMHgwMywKLQkweDFiLCAweGNiLCAweGJhLCAweDgyLCAweDkxLCAweDlmLCAweGQ1LCAweGMwLCAweGRiLCAweGE3LCAweGRiLCAweGJkLAotCTB4OWUsIDB4NDYsIDB4OWIsIDB4ZTQsIDB4MTAsIDB4YTAsIDB4ZTQsIDB4ZDQsIDB4NDYsIDB4OTAsIDB4NWIsIDB4NWIsCi0JMHgxOCwgMHhiMSwgMHg1MywgMHhiZiwgMHhjZiwgMHhlOCwgMHgyMiwgMHhmYiwgMHgyZSwgMHhlYywgMHhkNCwgMHhmMywKLQkweGU1LCAweDdkLCAweGY5LCAweDQ4LCAweDMxLCAweDc5LCAweDRiLCAweDBjLCAweDlhLCAweDdhLCAweDFhLCAweGRhLAotCTB4Y2MsIDB4MjcsIDB4ZWMsIDB4YjcsIDB4ODIsIDB4ZjYsIDB4ZDAsIDB4M2QsIDB4ZTYsIDB4MGQsIDB4NWYsIDB4NTQsCi0JMHhiYywgMHg1MywgMHg3NywgMHhkMywgMHg0NiwgMHg1ZSwgMHgxOSwgMHhhMywgMHgxZCwgMHgxMiwgMHg3NywgMHhmYiwKLQkweDY5LCAweDAzLCAweDdkLCAweGI0LCAweDg1LCAweDdkLCAweDEzLCAweDg3LCAweDg0LCAweDQ3LCAweGY0LCAweGI1LAotCTB4MmIsIDB4ZDYsIDB4M2QsIDB4NGMsIDB4YWIsIDB4ZGUsIDB4MmUsIDB4MzUsIDB4YjUsIDB4ODgsIDB4YjIsIDB4MjEsCi0JMHgyNCwgMHg3ZSwgMHhiMCwgMHgwOCwgMHhlNywgMHg5MywgMHhjMCwgMHg5MSwgMHg3NCwgMHgwZSwgMHg1ZSwgMHgxYiwKLQkweDQxLCAweDhiLCAweDBkLCAweGY2LCAweDVlLCAweDE3LCAweGVhLCAweGQ2LCAweGE5LCAweDc4LCAweGEzLCAweGFlLAotCTB4NDAsIDB4ZmUsIDB4ODcsIDB4MTEsIDB4MTUsIDB4OWQsIDB4OGMsIDB4MDksIDB4Y2IsIDB4YjAsIDB4NjIsIDB4YjcsCi0JMHhiMSwgMHhlYywgMHhhZSwgMHg0NSwgMHhjNiwgMHhiMiwgMHhjZCwgMHhmYSwgMHg2MywgMHg1OCwgMHg2MywgMHg2MiwKLQkweDRjLCAweDc3LCAweDdiLCAweDAxLCAweGUzLCAweGRiLCAweDFmLCAweDhlLCAweDM4LCAweDkxLCAweDRhLCAweGIxLAotCTB4MTcsIDB4ZTUsIDB4MzUsIDB4OWMsIDB4YzIsIDB4MDMsIDB4MGUsIDB4NjIsIDB4MjcsIDB4ZmQsIDB4NTgsIDB4NWQsCi0JMHg3MSwgMHg5MywgMHhiZiwgMHhlZCwgMHg2ZSwgMHg4NSwgMHhiYywgMHgzMiwgMHg1ZCwgMHg4MSwgMHg1NCwgMHg1YSwKLQkweGUzLCAweDVmLCAweDgwLCAweDdmLCAweDBkLCAweGZjLCAweDZiLCAweGM0LCAweDlhLCAweGE4LCAweGU4LCAweGE4LAotCTB4MWIsIDB4NjMsIDB4ZTksIDB4MjIsIDB4N2MsIDB4OTgsIDB4ZDQsIDB4MDIsIDB4MmUsIDB4ZWEsIDB4Y2YsIDB4ODgsCi0JMHgzZSwgMHg2ZSwgMHg0NCwgMHhkYSwgMHhhYywgMHgzOCwgMHhlNCwgMHhmMywgMHhhNCwgMHhlNCwgMHg3NCwgMHg4YSwKLQkweGYwLCAweDU5LCAweGVhLCAweGY0LCAweDdjLCAweDhiLCAweGRiLCAweDc3LCAweGUxLCAweDYyLCAweDMwLCAweDNmLAotCTB4NTIsIDB4NmEsIDB4ZmEsIDB4MWMsIDB4NmYsIDB4ZTAsIDB4MzUsIDB4NjgsIDB4ZWIsIDB4YWUsIDB4NzAsIDB4ZGYsCi0JMHhiYiwgMHhjNiwgMHg1MiwgMHhjNiwgMHhiOSwgMHgwYSwgMHhiMSwgMHhmNSwgMHhlMywgMHhmOCwgMHg0OSwgMHhmMiwKLQkweDhhLCAweDUxLCAweDIzLCAweDljLCAweDMzLCAweDIxLCAweGY3LCAweGY1LCAweGFkLCAweDNjLCAweDhiLCAweGM0LAotCTB4NDYsIDB4ODUsIDB4NGIsIDB4NjcsIDB4OWYsIDB4YzksIDB4NzEsIDB4YTQsIDB4NTMsIDB4YjMsIDB4Y2YsIDB4MDUsCi0JMHhlZCwgMHg4ZSwgMHgyNiwgMHg1NywgMHhjMywgMHg4ZSwgMHhhOCwgMHhmZCwgMHg0YSwgMHgzZSwgMHg3OSwgMHhkNCwKLQkweGZkLCAweDRiLCAweDM0LCAweGJkLCAweDRlLCAweDcxLCAweDM1LCAweGY0LCAweGE2LCAweDVkLCAweDBkLCAweDdkLAotCTB4ZDEsIDB4ZDksIDB4ZTcsIDB4N2EsIDB4NDQsIDB4YjEsIDB4MzcsIDB4YzksIDB4MzgsIDB4N2UsIDB4YzYsIDB4ZGMsCi0JMHhkOSwgMHhiMSwgMHg1YywgMHgwZCwgMHhkZCwgMHhlOSwgMHhkOSwgMHg2MywgMHg3NSwgMHhhMSwgMHgyMywgMHgyOCwKLQkweDY3LCAweGU0LCAweGRkLCAweGU0LCAweGJjLCAweGExLCAweDZlLCAweDIwLCAweDNlLCAweGRjLCAweDdjLCAweGNmLAotCTB4YTUsIDB4ZTMsIDB4YmIsIDB4ZDcsIDB4ZmEsIDB4NmEsIDB4YzQsIDB4MzIsIDB4ZmEsIDB4YzUsIDB4ODksIDB4ZDksCi0JMHhmZCwgMHhhNywgMHhmMSwgMHg2ZSwgMHhkMiwgMHhmYywgMHg3ZiwgMHgwNiwgMHg3NCwgMHg3YywgMHhjZSwgMHgxOCwKLQkweGYxLCAweDU0LCAweGYwLCAweGIwLCAweGUxLCAweDI5LCAweDE1LCAweDE5LCAweDFmLCAweGM3LCAweDA3LCAweGRjLAotCTB4NWIsIDB4YTEsIDB4YjYsIDB4YjUsIDB4ZGQsIDB4YWQsIDB4NjksIDB4MjcsIDB4M2YsIDB4YjYsIDB4M2IsIDB4NTAsCi0JMHhiNywgMHhmNCwgMHgzOCwgMHg0ZSwgMHhhNCwgMHhlNCwgMHgwYywgMHg4YiwgMHhjYywgMHg3NywgMHg2ZCwgMHgyNywKLQkweDc5LCAweDA2LCAweDA3LCAweDUzLCAweGM1LCAweGI3LCAweGNiLCAweGZkLCAweDc1LCAweGJiLCAweGRjLCAweDYzLAotCTB4YzYsIDB4ZmYsIDB4MDcsIDB4YjYsIDB4MGIsIDB4Y2EsIDB4ZWEsIDB4YzQsIDB4NzksIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwkweGVjLCAweDVjLCAweDdmLCAweDcwLCAweDFjLCAweGQ1LCAweDdkLCAweGZmLCAweGJjLCAweGJkLCAweGJkLCAweGJiLAorCTB4OTUsIDB4NzQsIDB4M2UsIDB4ZWQsIDB4OWQsIDB4NGUsIDB4YjIsIDB4MDQsIDB4MDYsIDB4ZWYsIDB4YTIsIDB4OTUsCisJMHg3NCwgMHg1OCwgMHhjNiwgMHhlYywgMHg5ZCwgMHg0ZSwgMHhiNiwgMHg0OCwgMHhiNywgMHhjOSwgMHhkNSwgMHgzNiwKKwkweDIwLCAweDE3LCAweDUyLCAweDg0LCAweGExLCAweGMxLCAweGNjLCAweDMwLCAweDlkLCAweDFiLCAweDYzLCAweDhjLAorCTB4YjAsIDB4MWQsIDB4YTIsIDB4MDAsIDB4MzMsIDB4YzgsIDB4MjksIDB4MTMsIDB4MTYsIDB4ZmMsIDB4YjMsIDB4ZjgsCisJMHhhNCwgMHg5MywgMHg4ZCwgMHg4YywgMHhjOSwgMHhmNCwgMHhkNywgMHgyMSwgMHhjYiwgMHg4YSwgMHg4MSwgMHg5MywKKwkweGNlLCAweDA0LCAweGRhLCAweDk4LCAweDY5LCAweGE4LCAweDE1LCAweDZjLCAweDUzLCAweDg3LCAweDVmLCAweDIxLAorCTB4MTksIDB4NjgsIDB4NGQsIDB4OWIsIDB4OTksIDB4YTgsIDB4MDYsIDB4MWMsIDB4ZDMsIDB4YTYsIDB4ZDQsIDB4YjQsCisJMHgwZSwgMHhiNSwgMHg4YiwgMHhlYiwgMHhkNywgMHhlZiwgMHg3NywgMHg0ZiwgMHg5NywgMHg1MCwgMHg0MiwgMHhjYiwKKwkweDY0LCAweGE2LCAweDdmLCAweGVlLCAweDc3LCAweGU2LCAweGU2LCAweGY2LCAweGRlLCAweGZiLCAweGJlLCAweGVmLAorCTB4N2IsIDB4ZGYsIDB4ZGYsIDB4OWYsIDB4YjcsIDB4MWEsIDB4ZmIsIDB4YmUsIDB4MDgsIDB4NmEsIDB4MzEsIDB4NGIsCisJMHg3MywgMHhlOCwgMHg5MywgMHgxOSwgMHgxOCwgMHhiYywgMHgyNywgMHhiZCwgMHgyOCwgMHhiMywgMHg4OCwgMHgxZSwKKwkweGJiLCAweDAyLCAweDczLCAweDU1LCAweDk1LCAweGM3LCAweDA1LCAweDdjLCAweGYyLCAweGM5LCAweDI3LCAweDlmLAorCTB4N2MsIDB4ZjIsIDB4YzksIDB4MjcsIDB4OWYsIDB4N2MsIDB4ZjIsIDB4YzksIDB4MjcsIDB4OWYsIDB4N2MsIDB4ZjIsCisJMHhjOSwgMHgyNywgMHg5ZiwgMHg3YywgMHhmMiwgMHhjOSwgMHgyNywgMHg5ZiwgMHg3YywgMHhmMiwgMHhjOSwgMHgyNywKKwkweDlmLCAweDdjLCAweGYyLCAweGM5LCAweDI3LCAweDlmLCAweDdjLCAweGYyLCAweGM5LCAweDI3LCAweDlmLCAweDdjLAorCTB4ZjIsIDB4YzksIDB4MjcsIDB4OWYsIDB4N2MsIDB4ZjIsIDB4YzksIDB4MjcsIDB4OWYsIDB4N2MsIDB4ZjIsIDB4YzksCisJMHgyNywgMHg5ZiwgMHg3YywgMHhmMiwgMHhjOSwgMHgyNywgMHg5ZiwgMHg3YywgMHhmYSwgMHhmZiwgMHhhNCwgMHgwMCwKKwkweGEwLCAweGYzLCAweGY3LCAweDljLCAweGQ5LCAweDBmLCAweDM0LCAweGM1LCAweDcxLCAweDM3LCAweDJlLCAweGI1LAorCTB4YTAsIDB4MDUsIDB4OWMsIDB4MzMsIDB4MWIsIDB4NmYsIDB4YjcsIDB4ODAsIDB4NmMsIDB4YTksIDB4ZDMsIDB4NTgsCisJMHg4NiwgMHhmZiwgMHg5MiwgMHg2ZSwgMHg0MiwgMHgwNSwgMHg4ZiwgMHg1ZiwgMHhlMiwgMHg5YywgMHhmZiwgMHhmMywKKwkweDE3LCAweDk2LCAweDk4LCAweGE3LCAweDhiLCAweDAxLCAweDY4LCAweGJhLCAweGYzLCAweDQ2LCAweDRhLCAweDZmLAorCTB4ODcsIDB4MzYsIDB4OGYsIDB4ZDYsIDB4ZmMsIDB4NDksIDB4YzcsIDB4OTUsIDB4NzEsIDB4NDQsIDB4YWIsIDB4YjIsCisJMHhlMCwgMHgyYSwgMHg4ZSwgMHg5NCwgMHhmYiwgMHg2YywgMHg4OSwgMHg5NywgMHg2YywgMHg1NywgMHhmNCwgMHg2NiwKKwkweGUwLCAweDA2LCAweDljLCAweDgzLCAweGUyLCAweGFlLCAweGZjLCAweDA1LCAweDY5LCAweDA0LCAweDJiLCAweDNiLAorCTB4YWIsIDB4OTMsIDB4MWEsIDB4ODIsIDB4ZmIsIDB4YTAsIDB4YWIsIDB4OGUsIDB4ODIsIDB4YTAsIDB4NTUsIDB4OGIsCisJMHhkMCwgMHgxMywgMHg3NSwgMHgwOCwgMHgzZSwgMHhkMSwgMHg4YywgMHhmMCwgMHhlNCwgMHgwMSwgMHg5MSwgMHgyYiwKKwkweDZhLCAweDk4LCAweDA5LCAweDFjLCAweDE0LCAweDZiLCAweDRhLCAweGM4LCAweDA1LCAweDlkLCAweGIzLCAweDM3LAorCTB4OGMsIDB4ZDEsIDB4YmEsIDB4YWMsIDB4ZjcsIDB4ZWYsIDB4NGIsIDB4YTYsIDB4NmYsIDB4MTgsIDB4MmYsIDB4NDEsCisJMHgwZiwgMHgzOCwgMHg1MCwgMHg1NCwgMHhlNywgMHgwOCwgMHgzZCwgMHgzMywgMHhkZiwgMHhkOSwgMHgxYiwgMHhmNiwKKwkweDk2LCAweDRlLCAweGM5LCAweDE3LCAweDNhLCAweDEyLCAweDM4LCAweDU0LCAweGQ2LCAweDcxLCAweGEwLCAweGZjLAorCTB4MTAsIDB4OWQsIDB4YzMsIDB4NzQsIDB4NWQsIDB4NjgsIDB4YWUsIDB4ZWEsIDB4YjgsIDB4ZDgsIDB4OTIsIDB4MDksCisJMHg2MiwgMHg2MiwgMHhlNCwgMHg4MiwgMHgwYywgMHg1OCwgMHhhNiwgMHgwMSwgMHhjNSwgMHhkMiwgMHgwZiwgMHg4MywKKwkweGY4LCAweDBhLCAweGM0LCAweDU3LCAweDA4LCAweDYyLCAweGFjLCAweGI4LCAweDIzLCAweDhlLCAweGRhLCAweDY2LAorCTB4YmMsIDB4ZDAsIDB4YzEsIDB4ZWIsIDB4NzksIDB4MmQsIDB4Y2IsIDB4ZjgsIDB4MzgsIDB4NWEsIDB4NWQsIDB4MWYsCisJMHhhMiwgMHhmNSwgMHg0NywgMHgzMywgMHhjMCwgMHhmOCwgMHg0OCwgMHgxZiwgMHgyZCwgMHg5NSwgMHhkOCwgMHg2NCwKKwkweDg3LCAweGIxLCAweDVhLCAweDg3LCAweDViLCAweGUzLCAweGIwLCAweGFjLCAweGFhLCAweDFjLCAweDU3LCAweDE4LAorCTB4OTMsIDB4ZmYsIDB4NWMsIDB4NWYsIDB4OTEsIDB4MDMsIDB4YTEsIDB4NTksIDB4NzAsIDB4YzMsIDB4OWYsIDB4OWEsCisJMHgzZiwgMHg1NSwgMHhhYSwgMHhjZSwgMHg2ZiwgMHhhNywgMHg3ZCwgMHgzNCwgMHg5YSwgMHhlZiwgMHhjNywgMHg1ZiwKKwkweDk2LCAweGQ3LCAweGUwLCAweDJmLCAweGNhLCAweGI3LCAweGUxLCAweGQ5LCAweDcyLCAweDFmLCAweGVkLCAweDdiLAorCTB4MWYsIDB4ZWQsIDB4M2IsIDB4ODAsIDB4YmYsIDB4MmUsIDB4NmYsIDB4YzAsIDB4NzcsIDB4Y2IsIDB4MzksIDB4M2MsCisJMHg1NywgMHg1ZSwgMHg4NSwgMHhlZiwgMHg5NCwgMHg2ZiwgMHhjNiwgMHgzMywgMHg2NSwgMHg3OCwgMHg2NywgMHgzOCwKKwkweDk1LCAweDQ5LCAweDhhLCAweDFmLCAweGU1LCAweDZiLCAweGEwLCAweGVlLCAweGRjLCAweDhjLCAweGU5LCAweDUyLAorCTB4MTAsIDB4YzEsIDB4OWQsIDB4MTIsIDB4MjMsIDB4YjYsIDB4ZjksIDB4MzgsIDB4ZDAsIDB4YTEsIDB4MDcsIDB4MjEsCisJMHhiMCwgMHhjYywgMHgzNiwgMHhmNywgMHgwMywgMHg1ZiwgMHg0MCwgMHgyZSwgMHg2MSwgMHgxZSwgMHgwMCwgMHg5YSwKKwkweGM0LCAweDhmLCAweDQ3LCAweDliLCAweGM0LCAweDZiLCAweGEzLCAweGFhLCAweDc4LCAweDNkLCAweDJmLCAweDUwLAorCTB4ZWYsIDB4MjAsIDB4ZjIsIDB4NzIsIDB4NDYsIDB4Y2EsIDB4ZWIsIDB4ZDIsIDB4NTIsIDB4OTYsIDB4NTIsIDB4NTYsCisJMHhlZiwgMHgwZiwgMHg4NSwgMHg2OSwgMHgzZiwgMHgyMiwgMHgyZSwgMHg4NSwgMHhkMSwgMHg2OCwgMHg2NiwgMHhkNywKKwkweDA5LCAweGNkLCAweGFkLCAweDI1LCAweGY5LCAweDJiLCAweGJhLCAweDAxLCAweDZiLCAweGE3LCAweDQxLCAweDdlLAorCTB4NjAsIDB4MWQsIDB4MzcsIDB4ZTEsIDB4MGUsIDB4MmYsIDB4MjYsIDB4ZmEsIDB4ZDAsIDB4NjAsIDB4MmQsIDB4YzUsCisJMHhiZCwgMHg3ZCwgMHgzNiwgMHg4YSwgMHg2NSwgMHg2OCwgMHgzMSwgMHhlNywgMHgwYywgMHg1MiwgMHhjMywgMHgwMiwKKwkweDM2LCAweGY5LCAweDViLCAweGQwLCAweGIzLCAweDVkLCAweDVhLCAweGRmLCAweDUwLCAweGYxLCAweDM3LCAweDlkLAorCTB4YmQsIDB4NDAsIDB4NjcsIDB4MmYsIDB4ZDAsIDB4ZDksIDB4MGIsIDB4YTQsIDB4NTcsIDB4ODEsIDB4ZjQsIDB4MmEsCisJMHg5MCwgMHgwZSwgMHgwNSwgMHhkMiwgMHhhZCwgMHg0MCwgMHg3YSwgMHgxNCwgMHg0OCwgMHg4ZiwgMHgwMiwgMHhlOSwKKwkweDU4LCAweDYwLCAweDVmLCAweDBkLCAweDkyLCAweDBkLCAweDIyLCAweGY4LCAweGJiLCAweGZjLCAweDNjLCAweDljLAorCTB4ZTEsIDB4Y2YsIDB4NGEsIDB4MWQsIDB4YzcsIDB4ZTksIDB4OGMsIDB4OGEsIDB4ZjUsIDB4OWIsIDB4Y2EsIDB4ZjgsCisJMHg2ZSwgMHg4NCwgMHg3YywgMHg2NCwgMHhmYywgMHhlNiwgMHg3YiwgMHgyZiwgMHhjNCwgMHhjOSwgMHhmYywgMHhiYiwKKwkweDMyLCAweDM0LCAweDk3LCAweGY3LCAweGZjLCAweDIyLCAweGU0LCAweDI4LCAweDcwLCAweGU5LCAweDZlLCAweDI5LAorCTB4Y2YsIDB4NzUsIDB4Y2QsIDB4YzgsIDB4YjcsIDB4NmYsIDB4NjEsIDB4NTksIDB4MGUsIDB4NGUsIDB4OGMsIDB4MmEsCisJMHgwOCwgMHhkMCwgMHhkOCwgMHhiNSwgMHhmNiwgMHhkZiwgMHhjYiwgMHgzYiwgMHgxMywgMHhjYywgMHhmNywgMHg1MSwKKwkweDA0LCAweGI1LCAweDZjLCAweDI3LCAweDY4LCAweDBkLCAweGNlLCAweGJiLCAweDFiLCAweGVmLCAweDZkLCAweDg3LAorCTB4MWIsIDB4NzUsIDB4NTQsIDB4ZjEsIDB4ZTYsIDB4OTAsIDB4ODEsIDB4YjksIDB4NGUsIDB4MTYsIDB4NzMsIDB4MWMsCisJMHg2YiwgMHg2NCwgMHg4ZiwgMHhkMiwgMHgzOSwgMHgxOCwgMHg0NywgMHhmNiwgMHhmMiwgMHg3YSwgMHhkOCwgMHhkOCwKKwkweDU3LCAweDU2LCAweGM1LCAweGFiLCAweDQzLCAweDczLCAweDEwLCAweGRmLCAweDY5LCAweGFkLCAweDFhLCAweDEyLAorCTB4MGEsIDB4NzIsIDB4OGQsIDB4NTksIDB4OGMsIDB4NjcsIDB4NGMsIDB4YTMsIDB4MDgsIDB4MDMsIDB4YWIsIDB4ZDIsCisJMHgwYSwgMHgzMCwgMHhkNywgMHhjNSwgMHhkNiwgMHg4YywgMHg2OSwgMHhiYiwgMHg3OCwgMHgwOCwgMHhkMywgMHgwOSwKKwkweDFiLCAweDEzLCAweDY1LCAweDhkLCAweDcyLCAweGMzLCAweGM1LCAweDlkLCAweDE5LCAweDBkLCAweDcyLCAweDI0LAorCTB4OGIsIDB4OTMsIDB4NWQsIDB4MjEsIDB4NGMsIDB4ZjcsIDB4NzEsIDB4OGMsIDB4YTgsIDB4YjQsIDB4ZjcsIDB4NTYsCisJMHgyOCwgMHhmMSwgMHgzOCwgMHhmOSwgMHhlNSwgMHhiMCwgMHgwYywgMHhjNiwgMHg3OSwgMHgwYywgMHhlMiwgMHg1ZiwKKwkweDMyLCAweGJjLCAweGZmLCAweDQ1LCAweGUyLCAweGQ1LCAweGRkLCAweDUxLCAweGQ0LCAweGVlLCAweGQ2LCAweGYwLAorCTB4ZjQsIDB4NGUsIDB4MTUsIDB4MmIsIDB4YzgsIDB4YjcsIDB4N2IsIDB4NTIsIDB4YWEsIDB4YjEsIDB4NGUsIDB4MzgsCisJMHgxOCwgMHgyZiwgMHhhYiwgMHg0OCwgMHgwYywgMHhiNSwgMHhjMCwgMHg4OCwgMHg2OSwgMHhiOCwgMHg3NCwgMHhjOCwKKwkweGM1LCAweDNiLCAweDI0LCAweDc3LCAweDkwLCAweGU0LCAweGQ2LCAweDc3LCAweGU5LCAweDk4LCAweDY5LCAweGFjLAorCTB4ZjgsIDB4ZjUsIDB4ZWIsIDB4ZjksIDB4NTYsIDB4NzcsIDB4YTcsIDB4MTIsIDB4MDIsIDB4NDIsIDB4NzAsIDB4MzUsCisJMHgyNywgMHg4MywgMHhmYiwgMHhmMywgMHhhZCwgMHhhNCwgMHhjMywgMHhhZCwgMHg1OCwgMHgxYSwgMHhkMiwgMHhiMCwKKwkweDdhLCAweDk4LCAweGM3LCAweDk2LCAweDAzLCAweDkzLCAweDczLCAweGU3LCAweGEwLCAweDk2LCAweGY1LCAweGU3LAorCTB4N2MsIDB4NWUsIDB4NGEsIDB4Y2YsIDB4MWMsIDB4MDcsIDB4YmYsIDB4OWQsIDB4NjAsIDB4YmIsIDB4YmIsIDB4Y2EsCisJMHg3ZiwgMHhjOCwgMHg2YywgMHg4MiwgMHhmOSwgMHgyYSwgMHgzOSwgMHg3MiwgMHgzOCwgMHg5MywgMHhjMSwgMHhjNiwKKwkweDdjLCAweDZiLCAweGY2LCAweDViLCAweDRhLCAweDAzLCAweDEwLCAweDM0LCAweDBkLCAweDQzLCAweDgxLCAweDk2LAorCTB4NzAsIDB4OTAsIDB4MWEsIDB4YTUsIDB4NzgsIDB4NzksIDB4ZDQsIDB4OGIsIDB4MTcsIDB4YTQsIDB4YmEsIDB4NGEsCisJMHg5YywgMHg5NywgMHg5YSwgMHhhYiwgMHgxMywgMHhmZiwgMHhmYywgMHhjNSwgMHg2ZCwgMHhmOCwgMHhlOCwgMHg1MSwKKwkweGU2LCAweDUzLCAweGYxLCAweDAzLCAweDdhLCAweDdlLCAweDdmLCAweGVmLCAweDhlLCAweGQ5LCAweGRhLCAweGYxLAorCTB4YTcsIDB4OWUsIDB4NWYsIDB4MGQsIDB4YTUsIDB4YmEsIDB4YjcsIDB4OGQsIDB4M2IsIDB4ZjMsIDB4YWQsIDB4NjcsCisJMHhiNywgMHgyOSwgMHhlNCwgMHhiZiwgMHg4YiwgMHgyMywgMHhhOCwgMHhhMSwgMHhmYSwgMHgxMywgMHgyNCwgMHg1OSwKKwkweGZiLCAweGYyLCAweGU3LCAweGIxLCAweDMyLCAweDZkLCAweDFlLCAweGU0LCAweDdmLCAweDZmLCAweDM2LCAweDY2LAorCTB4NTUsIDB4ZTQsIDB4NWYsIDB4NTYsIDB4YjIsIDB4ZjEsIDB4NjQsIDB4ZDksIDB4YzYsIDB4ZWQsIDB4NzQsIDB4OGUsCisJMHhmYiwgMHhmMCwgMHg4ZiwgMHg0MCwgMHhjYiwgMHgwMiwgMHhlMywgMHg5NCwgMHg3MiwgMHg0MiwgMHhiYSwgMHgzNywKKwkweGIzLCAweGJjLCAweDc5LCAweDM4LCAweDE1LCAweDZmLCAweGNkLCAweDlkLCAweDUyLCAweGNjLCAweGUyLCAweDc2LAorCTB4ODUsIDB4NmQsIDB4YTUsIDB4ZTAsIDB4Y2IsIDB4ZTksIDB4MGMsIDB4OGEsIDB4MzEsIDB4MWQsIDB4YjcsIDB4YTYsCisJMHgzNSwgMHhmNywgMHg1MiwgMHgzYSwgMHhkMywgMHgxYiwgMHg0YiwgMHgzNCwgMHgzNCwgMHhlZCwgMHhjYSwgMHhlMiwKKwkweGFkLCAweGY0LCAweDliLCAweDI4LCAweGFlLCAweDY0LCAweDNiLCAweGYwLCAweDNhLCAweDNlLCAweDczLCAweDMzLAorCTB4ZTIsIDB4NTYsIDB4MGQsIDB4ZTIsIDB4NjMsIDB4NDEsIDB4ZDQsIDB4ZWYsIDB4YmEsIDB4MjAsIDB4OWIsIDB4MmQsCisJMHgxZSwgMHhiNywgMHgwNiwgMHhjZSwgMHgwYSwgMHgzZSwgMHg3MywgMHgxMCwgMHhkMSwgMHhiMSwgMHhhYiwgMHhhMCwKKwkweDVhLCAweDY2LCAweDkyLCAweDFjLCAweDliLCAweDYwLCAweGRlLCAweDkwLCAweDU1LCAweDNkLCAweGJiLCAweGMwLAorCTB4NzUsIDB4NWYsIDB4MTAsIDB4NTgsIDB4OTcsIDB4ZmEsIDB4YmUsIDB4Y2MsIDB4MzYsIDB4ZjIsIDB4OWEsIDB4NjcsCisJMHg2OCwgMHg5YywgMHhjZiwgMHg1MCwgMHg3MywgMHgzNiwgMHg4YiwgMHgyNiwgMHg1YSwgMHg1MywgMHhlNSwgMHg4YiwKKwkweGEwLCAweDdmLCAweDU3LCAweGU1LCAweDBjLCAweDZmLCAweDJmLCAweGMxLCAweGIzLCAweDFhLCAweDdhLCAweGQwLAorCTB4NTEsIDB4NzgsIDB4MDgsIDB4NmYsIDB4MmQsIDB4ZjYsIDB4ZjYsIDB4M2YsIDB4YmQsIDB4MmYsIDB4YmQsIDB4ODMsCisJMHg2YywgMHhjMiwgMHg3NSwgMHhmNCwgMHhkMywgMHg3ZSwgMHhlMSwgMHhmOSwgMHhmZiwgMHg2NCwgMHg3ZiwgMHgyNCwKKwkweDIxLCAweDlhLCAweDY5LCAweDhjLCAweGUzLCAweDc3LCAweGE3LCAweDM0LCAweDZlLCAweGFhLCAweGY4LCAweDI1LAorCTB4NGMsIDB4ZjIsIDB4ZGUsIDB4Y2YsIDB4ZjQsIDB4YTAsIDB4NzUsIDB4NDgsIDB4ODUsIDB4Y2MsIDB4YjcsIDB4ZGEsCisJMHgzZiwgMHgwZCwgMHgzYywgMHgyMiwgMHhhNywgMHg2ZiwgMHhlMywgMHhiOSwgMHg1NiwgMHhmZCwgMHg3MCwgMHg0MCwKKwkweDYwLCAweGE5LCAweDZhLCAweDllLCAweGNlLCAweGExLCAweDE5LCAweGZiLCAweGE5LCAweGM2LCAweGI0LCAweDM4LAorCTB4M2EsIDB4ZDUsIDB4OWMsIDB4MDQsIDB4ZDUsIDB4MWUsIDB4NDMsIDB4NzQsIDB4ZWMsIDB4YjEsIDB4YjEsIDB4NjAsCisJMHhlOCwgMHgzNiwgMHg3YywgMHg2OSwgMHhiNywgMHg4MywgMHg4MywgMHgwNSwgMHgxYiwgMHg0ZiwgMHgxNywgMHhhNCwKKwkweDNjLCAweDY5LCAweDRiLCAweGY5LCAweGFmLCAweDVkLCAweDY2LCAweGZmLCAweDMxLCAweDZhLCAweDA3LCAweDhiLAorCTB4OTYsIDB4NzQsIDB4ZTYsIDB4ZWEsIDB4MDMsIDB4MmEsIDB4ZDksIDB4YTcsIDB4Y2QsIDB4ZDgsIDB4MjAsIDB4Y2MsCisJMHhlNiwgMHgyOSwgMHg2MSwgMHg1MywgMHhjYywgMHhmNSwgMHg5MiwgMHhlZCwgMHgwZCwgMHhlYywgMHgyZCwgMHgyNywKKwkweGYxLCAweDU0LCAweGQ5LCAweGEyLCAweGNmLCAweDQyLCAweDhhLCAweDk1LCAweDBjLCAweGQ1LCAweDMzLCAweGQ2LAorCTB4NTUsIDB4YzcsIDB4NzgsIDB4MDcsIDB4ZTUsIDB4NDUsIDB4NDEsIDB4YzEsIDB4N2UsIDB4OWIsIDB4ZTIsIDB4M2YsCisJMHg0NiwgMHhiYywgMHg4NSwgMHgwYiwgMHhlNCwgMHgzZiwgMHgwZCwgMHhjOSwgMHg5ZCwgMHg1OSwgMHhkNCwgMHhhNCwKKwkweDFhLCAweDYwLCAweGRjLCAweDY4LCAweDYxLCAweGJjLCAweGEwLCAweGI5LCAweDQxLCAweDhhLCAweGY5LCAweGIxLAorCTB4ZmMsIDB4MzgsIDB4ZmUsIDB4NDAsIDB4NGYsIDB4YTAsIDB4OTYsIDB4ZWMsIDB4YjcsIDB4MmEsIDB4MWQsIDB4MDEsCisJMHg2ZSwgMHhlMiwgMHhiOSwgMHgwOCwgMHg1YSwgMHhhYywgMHhlZiwgMHhhMywgMHgyNSwgMHgzZSwgMHgwNywgMHhhMSwKKwkweDA1LCAweDdmLCAweDg1LCAweDY5LCAweDNkLCAweDhhLCAweDMwLCAweGY1LCAweDhjLCAweGY5LCAweGM0LCAweDMzLAorCTB4OWYsIDB4N2MsIDB4ZDUsIDB4NjgsIDB4NTksIDB4MjQsIDB4NTMsIDB4YzAsIDB4NmEsIDB4MjMsIDB4NWUsIDB4Y2EsCisJMHhhNywgMHg2NiwgMHhkMiwgMHgzZCwgMHhiOCwgMHgyNCwgMHg4MSwgMHgzMiwgMHg5ZCwgMHg3ZiwgMHgyYSwgMHgyZiwKKwkweDY1LCAweDI0LCAweDYzLCAweGY2LCAweDE3LCAweDI4LCAweDM3LCAweDI3LCAweDRiLCAweDNkLCAweDk4LCAweDJhLAorCTB4ZmYsIDB4MWUsIDB4ZDUsIDB4NzMsIDB4MWIsIDB4N2IsIDB4ZjMsIDB4MGUsIDB4YzYsIDB4MGEsIDB4ZWEsIDB4YWEsCisJMHgzYywgMHhjYywgMHhiZSwgMHhmNSwgMHhjOCwgMHhlMCwgMHgyOSwgMHg4YSwgMHg5ZiwgMHg4OSwgMHg4MiwgMHg2OSwKKwkweGJjLCAweDE4LCAweGQwLCAweDcwLCAweGNjLCAweGFlLCAweGEzLCAweDczLCAweDUyLCAweGRlLCAweDkyLCAweDRlLAorCTB4Y2YsIDB4ZTcsIDB4NDcsIDB4NjAsIDB4MzUsIDB4YjAsIDB4ZmQsIDB4ZDksIDB4NGYsIDB4MTksIDB4N2MsIDB4YmIsCisJMHhlMCwgMHhjNSwgMHhmNywgMHg3NSwgMHgxYSwgMHg1YywgMHhkOCwgMHhkZCwgMHhlYywgMHgxYiwgMHhmNywgMHg3NCwKKwkweDMwLCAweDVkLCAweGE5LCAweGEzLCAweDdkLCAweGRkLCAweDM2LCAweGMyLCAweGMzLCAweDNkLCAweDI0LCAweGI3LAorCTB4ZDUsIDB4M2UsIDB4ODEsIDB4M2IsIDB4MzAsIDB4ZGQsIDB4ZWMsIDB4NjIsIDB4MTEsIDB4YzUsIDB4YmYsIDB4ZWEsCisJMHgzYywgMHg5ZSwgMHhkYSwgMHg5YywgMHg3NywgMHg2NSwgMHhiZCwgMHg2NSwgMHhmNSwgMHhmZiwgMHg1MCwgMHgzYywKKwkweDg4LCAweDU3LCAweDUzLCAweDVjLCAweGQ3LCAweDU1LCAweGNhLCAweDdiLCAweDFkLCAweDNiLCAweGVjLCAweDExLAorCTB4YmMsIDB4NTYsIDB4ZmEsIDB4MmQsIDB4ZTQsIDB4NjIsIDB4NjYsIDB4NzIsIDB4OTMsIDB4NTgsIDB4OGYsIDB4ODMsCisJMHgyMywgMHg1NywgMHgwMSwgMHhiNywgMHg3MCwgMHg5ZSwgMHg5MCwgMHg2ZSwgMHhkNiwgMHg3YSwgMHgxYywgMHgyYSwKKwkweDdlLCAweDAzLCAweDQ3LCAweDQ3LCAweDZiLCAweGYxLCAweGJjLCAweDE1LCAweDQ3LCAweGNiLCAweDQ0LCAweDY1LAorCTB4OWYsIDB4YWIsIDB4YmIsIDB4MzUsIDB4OGMsIDB4NTEsIDB4NGUsIDB4NWYsIDB4NmIsIDB4YWIsIDB4OTgsIDB4NDksCisJMHg3MCwgMHhmZCwgMHhhMCwgMHg1OCwgMHg0YiwgMHg2ZiwgMHhhMCwgMHg1YSwgMHhlMywgMHhiNSwgMHg1ZSwgMHhhYywKKwkweGM5LCAweDE4LCAweGM4LCAweGU3LCAweGIzLCAweDU0LCAweGZmLCAweDZhLCAweGIwLCAweDJiLCAweDA2LCAweDcxLAorCTB4M2IsIDB4ZjUsIDB4YjAsIDB4YmIsIDB4ZjMsIDB4YWQsIDB4ZmQsIDB4YzMsIDB4NGEsIDB4MWMsIDB4YzUsIDB4OTYsCisJMHgyYywgMHhmOSwgMHg0MiwgMHhhMCwgMHhjOSwgMHgzMiwgMHhiMCwgMHhhNSwgMHg0NCwgMHgxNSwgMHhiNCwgMHhhNCwKKwkweGUyLCAweDliLCAweGE1LCAweDJiLCAweDUwLCAweDZjLCAweGUyLCAweGI1LCAweDFkLCAweDk4LCAweGY2LCAweGJlLAorCTB4ODMsIDB4OTgsIDB4ODksIDB4OWIsIDB4Y2QsIDB4MjAsIDB4OWIsIDB4OGQsIDB4MTcsIDB4NTQsIDB4ZWMsIDB4YjYsCisJMHhmNywgMHg1YywgMHgyOCwgMHhhZSwgMHgzNCwgMHhmNSwgMHgxYywgMHhlNSwgMHg1YiwgMHhjMCwgMHg4YiwgMHg1YiwKKwkweDdlLCAweDA2LCAweGJlLCAweDk2LCAweGZmLCAweDUwLCAweDllLCAweGYxLCAweGY2LCAweDU0LCAweDM5LCAweGZmLAorCTB4YTcsIDB4ZGYsIDB4MGUsIDB4YmMsIDB4MmYsIDB4NDUsIDB4OTgsIDB4ZTUsIDB4ZGYsIDB4MWYsIDB4YWQsIDB4ZmMsCisJMHg1YiwgMHhkMSwgMHg2NywgMHg5OSwgMHgzNywgMHgwYiwgMHg3MCwgMHgxYywgMHhjYywgMHhmZCwgMHg0NCwgMHhjYywKKwkweDU3LCAweGVhLCAweDgwLCAweGJlLCAweDk4LCAweGNmLCAweDUxLCAweGNkLCAweGIzLCAweDM4LCAweDlhLCAweDI2LAorCTB4ZGEsIDB4NTAsIDB4YjMsIDB4OGIsIDB4N2YsIDB4ZjMsIDB4YjgsIDB4YzAsIDB4NjUsIDB4ZGQsIDB4OWMsIDB4NjMsCisJMHg2ZCwgMHg1MCwgMHhjNiwgMHg1NiwgMHg0NywgMHgyYiwgMHgzNSwgMHhiOCwgMHg1YSwgMHgxZiwgMHhmZSwgMHg3MCwKKwkweDU2LCAweGJlLCAweGQ3LCAweGViLCAweGU5LCAweDc3LCAweGE1LCAweDg2LCAweDdlLCAweDMzLCAweGMzLCAweGNmLAorCTB4YmMsIDB4YTYsIDB4MDYsIDB4NmYsIDB4ZWQsIDB4MzUsIDB4ZWQsIDB4YTIsIDB4YjIsIDB4ODQsIDB4ZjcsIDB4YWMsCisJMHhlNCwgMHgwOCwgMHgzNiwgMHhjZSwgMHhhZSwgMHhhMSwgMHg5OCwgMHgyZiwgMHg0YywgMHg0OSwgMHhkYywgMHhjYSwKKwkweGYyLCAweGFhLCAweGViLCAweGRiLCAweDEwLCAweGZhLCAweGU1LCAweGJlLCAweDJhLCAweDVlLCAweGNjLCAweDdjLAorCTB4N2EsIDB4ZGYsIDB4ZGIsIDB4NjQsIDB4ZWQsIDB4Y2EsIDB4MzgsIDB4YzUsIDB4NTksIDB4MjMsIDB4ZDQsIDB4MDUsCisJMHhkNCwgMHhlMCwgMHhmNSwgMHgyNiwgMHhkNCwgMHg1MSwgMHhkZSwgMHgwNiwgMHhhYywgMHg1YiwgMHg2NCwgMHhlMCwKKwkweDJiLCAweDFjLCAweGE3LCAweDlhLCAweDFiLCAweDcxLCAweDJlLCAweGM2LCAweGYwLCAweGNlLCAweDE3LCAweGM4LAorCTB4YzcsIDB4NTEsIDB4OGUsIDB4NDcsIDB4ZjIsIDB4ZjMsIDB4YzUsIDB4MTgsIDB4N2EsIDB4ZTIsIDB4OTIsIDB4MjgsCisJMHhlYiwgMHhiYiwgMHgyYSwgMHgwZCwgMHg3NywgMHgzZSwgMHhkNSwgMHhlYywgMHhmNywgMHhmNiwgMHhkYywgMHgyZCwKKwkweDhiLCAweDdkLCAweDNhLCAweDVlLCAweGNhLCAweGZjLCAweDBlLCAweDhkLCAweDczLCAweDNjLCAweGQ5LCAweDc4LAorCTB4MmUsIDB4YWYsIDB4ZTEsIDB4ZmUsIDB4ZTEsIDB4NjYsIDB4M2EsIDB4MjcsIDB4ZDcsIDB4Y2EsIDB4OWEsIDB4YjMsCisJMHgzMywgMHg4YSwgMHg4ZCwgMHg2NywgMHgyOSwgMHgxNiwgMHg5ZiwgMHgyOSwgMHhiMCwgMHhhZCwgMHg1NCwgMHg1YywKKwkweDk2LCAweDVlLCAweDIxLCAweGMzLCAweDRkLCAweDFjLCAweGRmLCAweDQ5LCAweDVhLCAweGEzLCAweDkzLCAweGVjLAorCTB4MjgsIDB4NzQsIDB4NmIsIDB4OTksIDB4M2MsIDB4YjAsIDB4OTIsIDB4OWYsIDB4M2IsIDB4NjgsIDB4YWMsIDB4ODksCisJMHhiZSwgMHhiYiwgMHg2NSwgMHhkZCwgMHhhZiwgMHg5ZCwgMHg0MywgMHhmZiwgMHhhYywgMHg3MywgMHg1MCwgMHhkYywKKwkweDliLCAweGY2LCAweDVhLCAweDc0LCAweDEyLCAweDBlLCAweDUyLCAweDkxLCAweGE1LCAweDNlLCAweDNmLCAweDQxLAorCTB4MzEsIDB4YjAsIDB4OGQsIDB4N2EsIDB4ZjAsIDB4N2IsIDB4ODQsIDB4ZjUsIDB4YjYsIDB4NzgsIDB4NzgsIDB4Y2EsCisJMHg4MywgMHg2NywgMHgxZSwgMHg1ZSwgMHg1YiwgMHg1ZCwgMHhjMSwgMHg1ZCwgMHg5YSwgMHg2YSwgMHgzMSwgMHgxNiwKKwkweGFiLCAweGNlLCAweDcxLCAweDllLCAweGY2LCAweDYyLCAweDZjLCAweDU0LCAweGNhLCAweGNkLCAweDc2LCAweDBiLAorCTB4YzksIDB4ODgsIDB4NjMsIDB4YjMsIDB4NDUsIDB4MzksIDB4M2QsIDB4Y2EsIDB4NmIsIDB4YTQsIDB4NGMsIDB4YTYsCisJMHgxNiwgMHhmNCwgMHhhOCwgMHhhMiwgMHgwMSwgMHgzMywgMHhiYSwgMHgyYiwgMHhkNiwgMHg2NiwgMHgwYywgMHhmMSwKKwkweGQ1LCAweDUxLCAweDE1LCAweGY5LCAweGMyLCAweDQ1LCAweDY0LCAweDJmLCAweDI5LCAweDlmLCAweDRhLCAweDIxLAorCTB4YmIsIDB4MjksIDB4NTUsIDB4ODcsIDB4NTcsIDB4OGEsIDB4M2EsIDB4NzIsIDB4ZmEsIDB4MDUsIDB4YjksIDB4YmMsCisJMHhhZCwgMHgxNywgMHg2NSwgMHg5MiwgMHhmMywgMHg0MSwgMHhhYSwgMHgzMywgMHg3OSwgMHg0NCwgMHg0NCwgMHg1MCwKKwkweDRjLCAweDQ0LCAweGYwLCAweDc4LCAweDIxLCAweDgxLCAweDIzLCAweGUzLCAweDExLCAweDZjLCAweGE1LCAweDE4LAorCTB4N2QsIDB4MzEsIDB4YzMsIDB4N2IsIDB4NDYsIDB4ZjAsIDB4NzAsIDB4OTksIDB4MzEsIDB4NTUsIDB4ODAsIDB4NmMsCisJMHhlNCwgMHg4YSwgMHgxMywgMHhkZSwgMHg1OCwgMHgxZCwgMHg5NiwgMHgxNywgMHg5OSwgMHhmNywgMHg4MiwgMHg2YywKKwkweGIxLCAweDJjLCAweGJkLCAweDI1LCAweDUwLCAweGU1LCAweDNiLCAweDRlLCAweGY4LCAweGNhLCAweGEwLCAweDVhLAorCTB4MzYsIDB4OGYsIDB4NzAsIDB4NTUsIDB4MzMsIDB4NjEsIDB4YTgsIDB4MDQsIDB4NjEsIDB4MjgsIDB4NmIsIDB4MTYsCisJMHgxNywgMHg5YSwgMHg5NCwgMHg4ZCwgMHg1MiwgMHgzZSwgMHg0YiwgMHhiNSwgMHhlYywgMHhjNywgMHhmNCwgMHgzOSwKKwkweDQzLCAweGY1LCAweDM0LCAweDQ2LCAweDNhLCAweDVlLCAweDM2LCAweGNjLCAweDNhLCAweGJhLCAweGMyLCAweGE2LAorCTB4N2EsIDB4OWIsIDB4NTUsIDB4OTQsIDB4N2EsIDB4ZWUsIDB4NDMsIDB4ODEsIDB4MjksIDB4ZGUsIDB4NWYsIDB4YzUsCisJMHg5NiwgMHgwMiwgMHhiMCwgMHhhOSwgMHgwMCwgMHhmNywgMHgwOCwgMHhlNSwgMHg3ZSwgMHhjMywgMHg0NCwgMHgxNCwKKwkweGYxLCAweDA5LCAweDFkLCAweGMxLCAweDg5LCAweDI0LCAweGNkLCAweDZiLCAweDQ4LCAweGQwLCAweDZmLCAweDk3LAorCTB4YjAsIDB4NjAsIDB4YmQsIDB4ZDMsIDB4MjQsIDB4MTYsIDB4M2UsIDB4NzYsIDB4NWUsIDB4ZWUsIDB4NDgsIDB4YTksCisJMHg1OCwgMHhkNywgMHg2NiwgMHhmNiwgMHhkZSwgMHgyOCwgMHg5MCwgMHg0ZCwgMHgwZSwgMHg0OSwgMHgxOSwgMHg0ZSwKKwkweDg1LCAweDI5LCAweDM3LCAweGU1LCAweGExLCAweDA0LCAweGU5LCAweDFkLCAweDc1LCAweGU0LCAweDgzLCAweGFmLAorCTB4NzUsIDB4NWIsIDB4ZjYsIDB4NmIsIDB4MjAsIDB4YjksIDB4NjUsIDB4NWUsIDB4YzMsIDB4ZTMsIDB4YWUsIDB4ZjgsCisJMHhiMCwgMHhkYiwgMHg3YSwgMHhmYywgMHg0ZCwgMHhiNCwgMHhhMywgMHg2YiwgMHg0MiwgMHgxNSwgMHhmZiwgMHgzNiwKKwkweGI0LCAweDEwLCAweGU5LCAweDI5LCAweGU4LCAweDIxLCAweGU3LCAweDgwLCAweDk4LCAweDc5LCAweGUyLCAweGEwLAorCTB4MzgsIDB4MzksIDB4NDksIDB4ZTcsIDB4MmUsIDB4OTAsIDB4MmUsIDB4MDUsIDB4ZDIsIDB4YTUsIDB4NDAsIDB4YmEsCisJMHg5MCwgMHg1ZCwgMHg5ZSwgMHhmMSwgMHhmMCwgMHgyNCwgMHhlYiwgMHg5YSwgMHgyNCwgMHgyYywgMHg3MywgMHhkYywKKwkweGMzLCAweGJjLCAweDhjLCAweDExLCAweDYzLCAweDhlLCAweDk5LCAweDc1LCAweGMxLCAweDdhLCAweGIzLCAweDllLAorCTB4NTIsIDB4YmUsIDB4NjksIDB4NTcsIDB4ZjQsIDB4NzEsIDB4YTksIDB4ZGMsIDB4NmEsIDB4NTMsIDB4NTUsIDB4NWIsCisJMHg0OCwgMHhmOSwgMHhlZiwgMHgzNiwgMHhkYiwgMHg4MiwgMHg3NSwgMHg5NCwgMHhmMiwgMHgzYiwgMHhhNCwgMHhkMywKKwkweDE2LCAweGQyLCAweDcxLCAweDUzLCAweDQxLCAweDFlLCAweDBhLCAweDU5LCAweDk2LCAweDMxLCAweDQxLCAweDY3LAorCTB4OGIsIDB4OTMsIDB4NGUsIDB4ODksIDB4MDksIDB4OGQsIDB4NzQsIDB4NmQsIDB4ODcsIDB4NGEsIDB4YmEsIDB4MDYsCisJMHgyNiwgMHhhMCwgMHgyYiwgMHg3NCwgMHgxZSwgMHg2MywgMHg4YywgMHhlYywgMHgzNCwgMHhmNSwgMHg3OSwgMHhlNywKKwkweDYxLCAweGNjLCAweGVmLCAweDhhLCAweGFiLCAweDA5LCAweDlmLCAweGE4LCAweDY0LCAweGQ3LCAweDRkLCAweDE0LAorCTB4M2IsIDB4MzksIDB4MTUsIDB4NDYsIDB4ZDgsIDB4NTIsIDB4YTgsIDB4MjcsIDB4NmEsIDB4ZjgsIDB4ZjYsIDB4NzgsCisJMHgxZCwgMHgyNiwgMHhjOCwgMHhlZiwgMHhjNSwgMHg3MSwgMHhlOCwgMHg0MSwgMHg5MiwgMHhlOSwgMHgxNiwgMHgwZiwKKwkweDhhLCAweDRmLCAweGM2LCAweDViLCAweGQwLCAweDE5LCAweDIwLCAweDljLCAweDA0LCAweDNjLCAweDkyLCAweDhmLAorCTB4OGIsIDB4ODksIDB4MTEsIDB4MTUsIDB4OWIsIDB4MGIsIDB4YTcsIDB4NDksIDB4M2YsIDB4ODksIDB4YzMsIDB4ZjYsCisJMHhjMywgMHhjZCwgMHhjNCwgMHgyMiwgMHgxZSwgMHhiNiwgMHhjZCwgMHgxZSwgMHhlMCwgMHgyYSwgMHg4YSwgMHhiNywKKwkweDAwLCAweGQ2LCAweDVhLCAweGM4LCAweDZlLCAweGIzLCAweGFmLCAweGMyLCAweDRjLCAweDFmLCAweDhjLCAweGVkLAorCTB4YjYsIDB4YWIsIDB4ODcsIDB4NjAsIDB4MWUsIDB4YmIsIDB4OWEsIDB4N2EsIDB4ZDMsIDB4OTUsIDB4YTQsIDB4Y2YsCisJMHhhMCwgMHhlNSwgMHgwZSwgMHg1MCwgMHhlMSwgMHg0MiwgMHhiOSwgMHg2YywgMHhmNiwgMHgxZiwgMHgyNSwgMHg1ZiwKKwkweDk0LCAweGE4LCAweGZmLCAweDk1LCAweGNhLCAweDRkLCAweGUyLCAweGU5LCAweGQxLCAweGYzLCAweGYyLCAweGFlLAorCTB4OTQsIDB4OTksIDB4NmQsIDB4YTMsIDB4YjEsIDB4ZTAsIDB4OTAsIDB4NDYsIDB4MzgsIDB4NGQsIDB4YTMsIDB4OWMsCisJMHgzMiwgMHg2ZCwgMHg4MCwgMHg2YiwgMHgwMywgMHhiNCwgMHgzMCwgMHhkNSwgMHhlMiwgMHg5ZiwgMHg1OSwgMHg0NywKKwkweDA4LCAweGE3LCAweDZiLCAweDIwLCAweDBjLCAweDhmLCAweGE1LCAweDIzLCAweDAyLCAweGZiLCAweDI4LCAweGM3LAorCTB4MjcsIDB4MTcsIDB4OWEsIDB4YzcsIDB4NTYsIDB4YzMsIDB4OWQsIDB4NmUsIDB4ODEsIDB4MzksIDB4MTgsIDB4MGUsCisJMHg5YywgMHhjNiwgMHgwNywgMHg0MywgMHgyMSwgMHhjMiwgMHgwZCwgMHhlZCwgMHhmNiwgMHhlYiwgMHgzMCwgMHhmNSwKKwkweDdkLCAweDgxLCAweDVmLCAweGM4LCAweGZkLCAweDA5LCAweDVjLCAweDE0LCAweGM0LCAweDE5LCAweDY5LCAweGZjLAorCTB4M2UsIDB4YWYsIDB4NjEsIDB4ZGQsIDB4MDcsIDB4YjAsIDB4MmQsIDB4YzMsIDB4MzgsIDB4NDUsIDB4MjUsIDB4OWMsCisJMHgwMiwgMHhiYywgMHg5MywgMHgzNywgMHhiMCwgMHg3ZiwgMHg2MSwgMHgwZCwgMHhmNSwgMHg5MywgMHhkNiwgMHg5ZSwKKwkweDc1LCAweDcwLCAweDU3LCAweGQxLCAweGY1LCAweDQ3LCAweDhiLCAweGQwLCAweDVlLCAweDc5LCAweDhhLCAweDk1LAorCTB4MGQsIDB4NDIsIDB4ZTAsIDB4MjksIDB4ZWIsIDB4YWMsIDB4ZGQsIDB4MzEsIDB4YzksIDB4MTgsIDB4NDYsIDB4NGQsCisJMHgyZCwgMHhhMCwgMHg1YywgMHhkYywgMHg1YSwgMHgxNiwgMHhkNCwgMHhkYiwgMHg0YywgMHg3ZCwgMHgwNiwgMHg2YywKKwkweDFiLCAweDlkLCAweGVjLCAweDdhLCAweDVlLCAweDIyLCAweGM2LCAweGJhLCAweGJiLCAweDM5LCAweGQyLCAweDczLAorCTB4ZDUsIDB4MTYsIDB4M2EsIDB4ZmYsIDB4MWEsIDB4ZDIsIDB4ZTksIDB4MmUsIDB4Y2IsIDB4ZWQsIDB4MjEsIDB4YTksCisJMHhkNCwgMHhhMywgMHhjYywgMHhlNiwgMHhmNywgMHg0OCwgMHhmNywgMHhiNSwgMHg1NCwgMHg0NywgMHg4YSwgMHhlNSwKKwkweGU3LCAweGVhLCAweGI5LCAweDY2LCAweDRjLCAweDk0LCAweGY5LCAweDFlLCAweGQ3LCAweDgzLCAweGE1LCAweGY5LAorCTB4NmEsIDB4M2UsIDB4YjAsIDB4ZmYsIDB4ZDksIDB4ZjcsIDB4MWMsIDB4MGIsIDB4MWMsIDB4MzMsIDB4MWMsIDB4MjcsCisJMHg4YywgMHhkMSwgMHg3YSwgMHgzMCwgMHhkYSwgMHhhZSwgMHgyMCwgMHg5YiwgMHg5MCwgMHg3MiwgMHhhNSwgMHg2NSwKKwkweDhlLCAweDcwLCAweDFkLCAweGE3LCAweDk4LCAweGNmLCAweGVlLCAweGI1LCAweGViLCAweDI5LCAweDNmLCAweGUxLAorCTB4M2UsIDB4NjksIDB4MWIsIDB4MDgsIDB4MzksIDB4MWMsIDB4MWIsIDB4NzUsIDB4MTQsIDB4ZWIsIDB4MTEsIDB4NmMsCisJMHhhMywgMHg1OCwgMHhkMSwgMHgyYywgMHgyYiwgMHg0OSwgMHg5NywgMHgwZCwgMHhmZCwgMHg5ZCwgMHgwYywgMHhmMSwKKwkweDk2LCAweDYxLCAweDk0LCAweGVkLCAweDVhLCAweGMyLCAweDk1LCAweDJhLCAweDYyLCAweGNlLCAweDIxLCAweGQ5LAorCTB4NjAsIDB4MzUsIDB4ZWEsIDB4ZDQsIDB4YjgsIDB4ZjUsIDB4N2IsIDB4YjEsIDB4OWEsIDB4ZWUsIDB4MTcsIDB4MDYsCisJMHhlYSwgMHgxYywgMHg5ZSwgMHgzZiwgMHgyNywgMHg2NywgMHg2MiwgMHgxMSwgMHg4YSwgMHgzMywgMHhlNiwgMHhiMSwKKwkweGRjLCAweDY3LCAweGYwLCAweDkxLCAweDQ0LCAweDljLCAweDc5LCAweGIzLCAweDU4LCAweDlkLCAweDgxLCAweDM4LAorCTB4NDgsIDB4N2IsIDB4YTEsIDB4ODEsIDB4NzMsIDB4ZDcsIDB4YzAsIDB4N2MsIDB4YzcsIDB4M2EsIDB4NzYsIDB4ODgsCisJMHg3YSwgMHg4ZiwgMHhkMSwgMHgwMCwgMHhhYSwgMHhiOSwgMHgyYSwgMHgwMiwgMHg4ZSwgMHhhNSwgMHhlZiwgMHhjNSwKKwkweDUxLCAweGFmLCAweDRlLCAweDExLCAweDUyLCAweDE3LCAweDJiLCAweDc2LCAweGNmLCAweDEzLCAweGJkLCAweDg0LAorCTB4Y2QsIDB4ZGIsIDB4NTMsIDB4NzAsIDB4MzQsIDB4YjQsIDB4MTksIDB4N2YsIDB4NDMsIDB4YTMsIDB4OWIsIDB4MjksCisJMHhmZSwgMHhlNywgMHgzOCwgMHgxMSwgMHg1MSwgMHhkYSwgMHgwZCwgMHhmZCwgMHg2OSwgMHg1YiwgMHhhMywgMHgzZSwKKwkweDJhLCAweGU1LCAweGQ2LCAweDk0LCAweDgxLCAweDI5LCAweDliLCAweDcwLCAweDc0LCAweDYzLCAweDEwLCAweDMxLAorCTB4MGIsIDB4YmEsIDB4ZWUsIDB4NTgsIDB4ODMsIDB4MDcsIDB4MzAsIDB4YzAsIDB4ZjgsIDB4MzcsIDB4M2EsIDB4OWYsCisJMHg3YSwgMHgyNSwgMHg4ZCwgMHg4OSwgMHgzMSwgMHhiYiwgMHgwNiwgMHhkOSwgMHg5YiwgMHgwNSwgMHgyMiwgMHg0ZSwKKwkweDgyLCAweGNlLCAweDE2LCAweDQyLCAweGNlLCAweDdiLCAweDY2LCAweDFkLCAweDkxLCAweDdkLCAweGQ3LCAweGRlLAorCTB4NDMsIDB4ZmEsIDB4OGEsIDB4ZjksIDB4YjUsIDB4MGUsIDB4OGYsIDB4NTksIDB4NzYsIDB4MDksIDB4NzcsIDB4MTEsCisJMHg1NiwgMHhhNywgMHgyMSwgMHg5YSwgMHhkZiwgMHg0YywgMHhmMywgMHg4ZiwgMHg5MiwgMHhlYywgMHg1YywgMHhkYywKKwkweGJiLCAweDg3LCAweGQ2LCAweGI3LCAweDM4LCAweGQ2LCAweGY0LCAweGYzLCAweGQ4LCAweDRlLCAweDNhLCAweDcwLAorCTB4OGQsIDB4ZTcsIDB4MzEsIDB4M2UsIDB4ZjMsIDB4NDIsIDB4M2UsIDB4MzMsIDB4ZjUsIDB4NzgsIDB4OGUsIDB4MmIsCisJMHgxYiwgMHgzZiwgMHhjYiwgMHhkMywgMHhkZSwgMHgwOSwgMHg2NCwgMHhiNywgMHhkYiwgMHgxMCwgMHgxMywgMHhmNiwKKwkweDZlLCAweGMyLCAweDJmLCAweGE4LCAweDhmLCAweDNhLCAweDU2LCAweGZmLCAweDE0LCAweGEwLCAweDQ0LCAweDljLAorCTB4OWQsIDB4MjgsIDB4YzUsIDB4ODAsIDB4NDcsIDB4MGIsIDB4OTYsIDB4N2IsIDB4OGYsIDB4NjIsIDB4MGUsIDB4MjYsCisJMHgwOCwgMHgxMywgMHg5ZiwgMHgyMSwgMHg0YywgMHhiZiwgMHhhYiwgMHg3ZCwgMHhkYSwgMHg4YywgMHg4MywgMHhiMSwKKwkweDdlLCAweDU0LCAweGJjLCAweGI0LCAweDViLCAweDQxLCAweGM3LCAweDYyLCAweGVhLCAweDRiLCAweDU0LCAweDRiLAorCTB4YWUsIDB4YjEsIDB4ZjksIDB4YmUsIDB4N2MsIDB4NzksIDB4N2QsIDB4MDUsIDB4MmYsIDB4ZmYsIDB4NmYsIDB4MzksCisJMHg2OSwgMHg5MiwgMHhjNSwgMHhhYSwgMHg3OSwgMHg2OSwgMHhmNSwgMHgzZCwgMHg4ZCwgMHgzZiwgMHg5MywgMHhkOSwKKwkweDE4LCAweGZiLCAweDIyLCAweDQyLCAweGI1LCAweGY4LCAweDk3LCAweGY1LCAweDI4LCAweDM5LCAweDQ5LCAweGYyLAorCTB4MzcsIDB4NzUsIDB4MDcsIDB4NzUsIDB4OGUsIDB4MTksIDB4ZjIsIDB4NjUsIDB4ZjYsIDB4OGQsIDB4M2MsIDB4NDQsCisJMHg3ZCwgMHg5YSwgMHhmMiwgMHgyYSwgMHhjNiwgMHg3ZSwgMHhlMSwgMHhmYiwgMHgzZCwgMHgxOSwgMHg2ZiwgMHgzOCwKKwkweDQxLCAweGJhLCAweGE5LCAweGU4LCAweDRhLCAweGEzLCAweDVlLCAweDcxLCAweGFjLCAweGIzLCAweDYzLCAweDc0LAorCTB4ZTYsIDB4MTYsIDB4YTcsIDB4MWUsIDB4ZTcsIDB4MWEsIDB4YjgsIDB4MzYsIDB4NDYsIDB4YzUsIDB4MGYsIDB4NDYsCisJMHhjZCwgMHgxZSwgMHhjMiwgMHhjMywgMHhhYiwgMHhlZSwgMHgyMSwgMHgxYywgMHg3NSwgMHg5ZiwgMHg1MCwgMHhkMSwKKwkweDRiLCAweDY3LCAweGI3LCAweGRhLCAweGM4LCAweDA3LCAweDg0LCAweDRkLCAweDEyLCAweDZkLCAweGQzLCAweDY2LAorCTB4MDIsIDB4ZDUsIDB4ZjMsIDB4NWUsIDB4OTAsIDB4NzEsIDB4Y2IsIDB4NzIsIDB4ZTMsIDB4Y2EsIDB4YzcsIDB4MzIsCisJMHg5NSwgMHhlNiwgMHgxOCwgMHhkZiwgMHg4MCwgMHg3MCwgMHg1YywgMHgyMCwgMHg5NCwgMHgxZSwgMHhmMiwgMHg2YywKKwkweDRiLCAweDc3LCAweDJhLCAweGQ0LCAweGE3LCAweDFmLCAweDYyLCAweDFmLCAweDExLCAweDdlLCAweDdiLCAweDU5LAorCTB4ZTYsIDB4YmUsIDB4YzIsIDB4YmEsIDB4NmQsIDB4OWYsIDB4ZDUsIDB4NzMsIDB4MmQsIDB4YzcsIDB4MTUsIDB4ZmQsCisJMHg5NiwgMHg3MywgMHhkOCwgMHhkZSwgMHg4NywgMHhhOCwgMHg4ZSwgMHg3NywgMHgyZCwgMHhlOSwgMHhkYywgMHgzZSwKKwkweGE4LCAweDBjLCAweDQ5LCAweDYzLCAweDI1LCAweGZiLCAweDkzLCAweDJlLCAweDM3LCAweGI1LCAweDllLCAweGFmLAorCTB4YjUsIDB4YTgsIDB4NzMsIDB4MWMsIDB4YWYsIDB4MGYsIDB4NDUsIDB4NDUsIDB4ZmQsIDB4NjMsIDB4YWUsIDB4ZDcsCisJMHg1MywgMHg1ZiwgMHhhMywgMHhiMywgMHg5YywgMHg0YywgMHhmMSwgMHgxOSwgMHgzOCwgMHhjNywgMHg4ZSwgMHhlMywKKwkweDhhLCAweGQyLCAweGVkLCAweGM0LCAweDFiLCAweGEwLCAweGZkLCAweGExLCAweDUxLCAweGJjLCAweDQxLCAweDUyLAorCTB4OWYsIDB4MzksIDB4ZDcsIDB4MzUsIDB4MjUsIDB4OGQsIDB4MDYsIDB4OTYsIDB4NGYsIDB4YjYsIDB4MWUsIDB4NjUsCisJMHg1YiwgMHhmMywgMHhkZCwgMHhiMiwgMHg2YSwgMHg2ZiwgMHhlNiwgMHhlNywgMHhmNSwgMHg3NCwgMHhlOSwgMHg4ZSwKKwkweGIxLCAweGZmLCAweDUwLCAweDVmLCAweGU3LCAweGIwLCAweDRkLCAweDIxLCAweDZhLCAweDljLCAweDRlLCAweDYzLAorCTB4ODEsIDB4ZDgsIDB4MjEsIDB4ZGQsIDB4NDQsIDB4YjUsIDB4ODYsIDB4NDUsIDB4YzUsIDB4ODQsIDB4YjcsIDB4OWUsCisJMHhmNywgMHhmZSwgMHhmNCwgMHhmYSwgMHgyNiwgMHhmMSwgMHhjZSwgMHg5ZSwgMHhkZiwgMHhhNSwgMHg2NywgMHgyZiwKKwkweDQ2LCAweDdhLCAweDlmLCAweGEyLCAweDFjLCAweGQyLCAweDljLCAweDdlLCAweDk5LCAweDZjLCAweGU0LCAweDE4LAorCTB4ODMsIDB4ZjIsIDB4OGEsIDB4YmQsIDB4NTYsIDB4ZTYsIDB4MWEsIDB4MzksIDB4ZDYsIDB4ZTAsIDB4MjYsIDB4NDgsCisJMHhjZSwgMHhhZSwgMHhjNywgMHg3ZSwgMHg3NSwgMHg4ZSwgMHhhYiwgMHhkYiwgMHhhNSwgMHg5YywgMHhiMCwgMHhkNywKKwkweDkwLCAweDJkLCAweDU4LCAweDRlLCAweGQ1LCAweDE2LCAweDdiLCAweDY2LCAweDZkLCAweGQzLCAweDVlLCAweGYxLAorCTB4NWYsIDB4YzEsIDB4M2IsIDB4ODMsIDB4MTYsIDB4NzIsIDB4ZGUsIDB4YzAsIDB4NGIsIDB4NzksIDB4YTUsIDB4ODksCisJMHg2ZSwgMHgyYiwgMHhlOCwgMHhiMywgMHgwNSwgMHg3ZSwgMHhkYSwgMHg0MywgMHhmYSwgMHg1ZCwgMHg0OSwgMHg1OCwKKwkweDY1LCAweDkxLCAweDM1LCAweGRkLCAweDFhLCAweDU4LCAweDJmLCAweDMxLCAweDc3LCAweDlhLCAweDgyLCAweGUzLAorCTB4YmMsIDB4ZDQsIDB4ZGEsIDB4NTUsIDB4ODQsIDB4YWYsIDB4ZTAsIDB4MWUsIDB4YzUsIDB4YjYsIDB4NTcsIDB4ZjAsCisJMHgzMiwgMHhmMSwgMHhhZCwgMHhiOCwgMHhjMiwgMHgzMiwgMHg1YSwgMHgwNSwgMHhmNSwgMHhiNSwgMHhiZSwgMHhhNSwKKwkweGU5LCAweGUwLCAweDJmLCAweDYzLCAweDhmLCAweGNmLCAweDkwLCAweGYzLCAweDc0LCAweGUwLCAweDE4LCAweGVjLAorCTB4MjIsIDB4ZGYsIDB4ZTUsIDB4NTYsIDB4MmEsIDB4NDgsIDB4MmQsIDB4MDYsIDB4NjEsIDB4OGQsIDB4YTgsIDB4ZDgsCisJMHhiYSwgMHg5YiwgMHhmZCwgMHhmZiwgMHgzZCwgMHg5YSwgMHg2NywgMHhiZSwgMHhjZSwgMHg2NiwgMHgxZCwgMHhkNiwKKwkweGFhLCAweGMzLCAweDc0LCAweGIxLCAweDI0LCAweDJjLCAweDRhLCAweGY2LCAweGUwLCAweGJkLCAweGFhLCAweDcyLAorCTB4YWEsIDB4MzIsIDB4YTIsIDB4NjIsIDB4NzIsIDB4OTQsIDB4NzksIDB4NTksIDB4MTcsIDB4YWEsIDB4Y2QsIDB4MWMsCisJMHgyYiwgMHgyOSwgMHg4ZSwgMHg4ZiwgMHg4ZiwgMHg2NSwgMHg0NywgMHgzYSwgMHgxYSwgMHg0MywgMHgyZCwgMHhhZiwKKwkweDg5LCAweDBhLCAweDdkLCAweDBmLCAweGNiLCAweDg1LCAweDYwLCAweDNiLCAweGM2LCAweDQ4LCAweGZmLCAweGY2LAorCTB4ZjQsIDB4ZTUsIDB4YjMsIDB4ZmEsIDB4ZmYsIDB4YjEsIDB4NWUsIDB4YzEsIDB4NzEsIDB4NTEsIDB4NzEsIDB4ZDQsCisJMHhkYiwgMHhiYiwgMHg2MiwgMHhhMywgMHg0OSwgMHhiMiwgMHhmNSwgMHg0NCwgMHhhYSwgMHhjYSwgMHhmMywgMHgzOCwKKwkweGYxLCAweDcwLCAweDljLCAweDdkLCAweDY2LCAweDRmLCAweDIyLCAweGVhLCAweDE1LCAweDhmLCAweGU0LCAweGU5LAorCTB4OTIsIDB4NmEsIDB4MjksIDB4ZDcsIDB4ZDcsIDB4NTIsIDB4OWUsIDB4M2MsIDB4NDksIDB4YmQsIDB4NjksIDB4N2YsCisJMHhiMSwgMHg1NywgMHg2YywgMHhjYiwgMHhlYiwgMHhkNCwgMHhhNywgMHg5NiwgMHg4YiwgMHhhZCwgMHg3OSwgMHg4YiwKKwkweDcxLCAweGQxLCAweDZjLCAweDlmLCAweGFhLCAweGJjLCAweDhiLCAweGRhLCAweDUyLCAweGZhLCAweGU0LCAweDNiLAorCTB4YTIsIDB4NDgsIDB4NGUsIDB4NzcsIDB4ZDAsIDB4MzcsIDB4N2YsIDB4ZjgsIDB4NDEsIDB4YTksIDB4NTgsIDB4ZmMsCisJMHgzZSwgMHhjOCwgMHgzYSwgMHg3NiwgMHgyMiwgMHgxMCwgMHhlOSwgMHhlOSwgMHg1OSwgMHgxMiwgMHg0MCwgMHhiZCwKKwkweDg1LCAweGJlLCAweDY2LCAweGMyLCAweDA3LCAweDU3LCAweDdhLCAweDM1LCAweGRkLCAweDgwLCAweDUxLCAweDZhLAorCTB4NmYsIDB4YWMsIDB4ZjgsIDB4ODksIDB4ZjMsIDB4MGUsIDB4NmEsIDB4YWQsIDB4ODMsIDB4NWMsIDB4MGQsIDB4ZDUsCisJMHg5MSwgMHg2YiwgMHhiYSwgMHg0MywgMHhkYSwgMHhkMSwgMHhlZSwgMHhkZSwgMHg5NiwgMHhmNiwgMHhjOSwgMHhhNiwKKwkweDVjLCAweGFkLCAweDczLCAweDdkLCAweDRiLCAweGRiLCAweGE0LCAweGRiLCAweGIyLCAweDcwLCAweDA4LCAweGY4LAorCTB4ZjIsIDB4OTAsIDB4MGUsIDB4Y2QsIDB4YjksIDB4ZDEsIDB4MGQsIDB4NzQsIDB4MjMsIDB4YTcsIDB4NTIsIDB4NWMsCisJMHhlYywgMHhlOCwgMHhiNiwgMHg3YSwgMHhhNiwgMHhjNCwgMHg0ZCwgMHgzNywgMHg5MSwgMHgxZSwgMHgyZCwgMHg5ZCwKKwkweDkzLCAweDg2LCAweGIxLCAweDM5LCAweGYzLCAweGMwLCAweDRkLCAweDgxLCAweDI5LCAweGVlLCAweDJmLCAweDFiLAorCTB4MDYsIDB4ZjcsIDB4ZjEsIDB4N2IsIDB4MzMsIDB4YmEsIDB4OWIsIDB4OWUsIDB4ZDAsIDB4ZjEsIDB4YzAsIDB4YjIsCisJMHhlZSwgMHg0MSwgMHgwYywgMHhlNCwgMHgxZiwgMHg0MCwgMHg3ZiwgMHg5ZSwgMHhkZiwgMHgzYiwgMHg2OSwgMHgxOCwKKwkweGUxLCAweDFhLCAweDVmLCAweGUwLCAweDc3LCAweDRlLCAweDBmLCAweDM1LCAweDMwLCAweDZlLCAweGRjLCAweDVlLAorCTB4NTYsIDB4NzEsIDB4ZWQsIDB4MTAsIDB4Y2YsIDB4OTksIDB4Y2QsIDB4ZWYsIDB4YTMsIDB4Y2EsIDB4ZmIsIDB4NTksCisJMHg3YywgMHg5ZiwgMHhkNCwgMHg5MywgMHg2YiwgMHgxZSwgMHhiMiwgMHg4MSwgMHg2MSwgMHgyOSwgMHg5NSwgMHgwYywKKwkweGRmLCAweDYzLCAweDRlLCAweDEzLCAweGQ2LCAweGUzLCAweGJkLCAweDdmLCAweDRlLCAweGJkLCAweDcxLCAweDJlLAorCTB4YmYsIDB4MGIsIDB4NjMsIDB4Y2EsIDB4ODYsIDB4ODcsIDB4NzksIDB4ZWUsIDB4ZDQsIDB4ZWMsIDB4ZGMsIDB4YmIsCisJMHgzNCwgMHgwNywgMHg3MSwgMHg5MiwgMHhlYSwgMHhmYSwgMHg3NCwgMHgyNSwgMHgyZiwgMHhiMiwgMHhiNSwgMHhjMywKKwkweDFhLCAweGZlLCAweGE4LCAweGMwLCAweDNjLCAweDMzLCAweGIzLCAweDNjLCAweDNmLCAweDIxLCAweDllLCAweDA0LAorCTB4NTYsIDB4YzQsIDB4YjgsIDB4NzYsIDB4NTMsIDB4Y2UsIDB4ZWMsIDB4YWUsIDB4YmUsIDB4MmIsIDB4OTMsIDB4ZjIsCisJMHgyNSwgMHhmYiwgMHhjMywgMHg2OCwgMHhlNSwgMHg1ZCwgMHg1OSwgMHg1NCwgMHg2OCwgMHg4ZiwgMHhkMSwgMHgzMywKKwkweDYxLCAweDk1LCAweDUwLCAweDJhLCAweDJhLCAweDQyLCAweDhmLCAweGYxLCAweGZhLCAweDU3LCAweDUzLCAweDk1LAorCTB4ZjUsIDB4YzcsIDB4NTIsIDB4YmMsIDB4ZmUsIDB4ZDcsIDB4ZDcsIDB4YTgsIDB4ZDksIDB4YzgsIDB4MzAsIDB4ZGQsCisJMHhhOSwgMHgwYSwgMHhmZiwgMHgyNCwgMHg3NywgMHgzNCwgMHg1NiwgMHg2NCwgMHg1NywgMHhkNiwgMHg3ZCwgMHg2ZiwKKwkweDc2LCAweGRkLCAweDQxLCAweDVhLCAweGI3LCAweDhmLCAweDYyLCAweDhjLCAweGQ3LCAweGIyLCAweDllLCAweDFjLAorCTB4YTMsIDB4ZDUsIDB4ZjcsIDB4ODYsIDB4NDksIDB4NzEsIDB4ODAsIDB4N2EsIDB4ZjUsIDB4ODEsIDB4OTIsIDB4MmEsCisJMHhmNiwgMHg1MiwgMHgxZCwgMHgxYywgMHhjZiwgMHgxMywgMHgzNiwgMHhmMiwgMHhkZSwgMHgwNSwgMHg1MiwgMHhjZCwKKwkweDJmLCAweDdmLCAweDIzLCAweDU2LCAweGYxLCAweDIxLCAweGY3LCAweGQ1LCAweDY5LCAweGVhLCAweGFiLCAweGVkLAorCTB4NTQsIDB4ZGYsIDB4NTUsIDB4NGYsIDB4YTcsIDB4YjAsIDB4NzMsIDB4ODQsIDB4ZWEsIDB4YmIsIDB4YzAsIDB4NDksCisJMHhhZiwgMHhiZSwgMHgxYywgMHg0MSwgMHg3YiwgMHg4OSwgMHhmYiwgMHg4MCwgMHgyNSwgMHhjZSwgMHgxNSwgMHg4YywKKwkweDVjLCAweDMzLCAweGM5LCAweDZlLCAweDI5LCAweDU3LCAweDZhLCAweDAzLCAweGY1LCAweDgyLCAweDJjLCAweGY1LAorCTB4NjQsIDB4ZjEsIDB4NjIsIDB4ODksIDB4N2YsIDB4NTIsIDB4ZjEsIDB4OGMsIDB4ZjMsIDB4MTksIDB4YjIsIDB4NjIsCisJMHg0ZSwgMHhiYiwgMHg4YiwgMHhmYSwgMHg3NiwgMHg5NywgMHg3MSwgMHhlYywgMHhjMCwgMHhmMywgMHhjMiwgMHg5YSwKKwkweDNlLCAweDI3LCAweGIyLCAweGI3LCAweDM2LCAweGUzLCAweDQxLCAweGZjLCAweDNjLCAweDk1LCAweDVkLCAweDExLAorCTB4YTUsIDB4NmYsIDB4YzIsIDB4Y2MsIDB4ODYsIDB4YzYsIDB4ZWYsIDB4NDgsIDB4YmIsIDB4ZGIsIDB4N2EsIDB4MzYsCisJMHg4OCwgMHgzNiwgMHhhYSwgMHgzNywgMHg2ZCwgMHhlZSwgMHgxNiwgMHhiNCwgMHg1MSwgMHhjZiwgMHhiNywgMHhiNSwKKwkweGMzLCAweDI1LCAweDViLCAweDdiLCAweGEzLCAweDU0LCAweGI1LCAweDAzLCAweGM3LCAweDI5LCAweGRiLCAweDgwLAorCTB4NDIsIDB4ZGYsIDB4YjEsIDB4YjIsIDB4MGIsIDB4MDQsIDB4ZjUsIDB4NTUsIDB4ZWEsIDB4YmIsIDB4YzMsIDB4ZDQsCisJMHhiMywgMHgyYiwgMHhmNywgMHhjZSwgMHgzMCwgMHhlMSwgMHgxNiwgMHhkZSwgMHg3YiwgMHhkZCwgMHhlYywgMHhiYiwKKwkweDk2LCAweDdmLCAweDkwLCAweDk1LCAweDFlLCAweGY1LCAweDBhLCAweGQ5LCAweDgzLCAweGNmLCAweGZjLCAweGEzLAorCTB4NDgsIDB4NjUsIDB4ZmMsIDB4NGMsIDB4NmMsIDB4ZjYsIDB4ZmYsIDB4ZjksIDB4MjEsIDB4OWMsIDB4NDIsIDB4ZjcsCisJMHhjOCwgMHgyMSwgMHg4MSwgMHgxZCwgMHg2ZCwgMHg5NSwgMHg1OCwgMHhlZSwgMHhlNCwgMHhmNywgMHg5OCwgMHhkZSwKKwkweDdiLCAweGI3LCAweDJhLCAweDRmLCAweGM1LCAweDg2LCAweDBhLCAweGUxLCAweDk5LCAweDQzLCAweGU1LCAweGFjLAorCTB4YjgsIDB4MjYsIDB4OGYsIDB4MDEsIDB4ZWEsIDB4ODksIDB4ZDksIDB4MjAsIDB4ZjEsIDB4NWUsIDB4NTMsIDB4ZWEsCisJMHgxNSwgMHhjYiwgMHhmMywgMHg5NiwgMHhiMSwgMHg4OSwgMHg3NCwgMHhkZCwgMHhhMiwgMHg3NywgMHhlYSwgMHhlMywKKwkweDg0LCAweDIxLCAweDY4LCAweDNmLCAweDIzLCAweDRjLCAweGYxLCAweGFmLCAweDM5LCAweDczLCAweGIxLCAweDdkLAorCTB4MzYsIDB4NzYsIDB4MjgsIDB4MWYsIDB4MjgsIDB4N2YsIDB4MDYsIDB4YzUsIDB4ODIsIDB4NDksIDB4ZmUsIDB4YTksCisJMHg3YiwgMHhiMSwgMHg1YiwgMHhkMSwgMHhlMywgMHg5YywgMHhkYywgMHg3NiwgMHgzMywgMHhjZiwgMHg1ZiwgMHgzMSwKKwkweDZiLCAweGZiLCAweGE2LCAweDM4LCAweGVkLCAweDQ5LCAweGJmLCAweDQ3LCAweDY2LCAweGNmLCAweGZmLCAweDdmLAorCTB4YWQsIDB4YmQsIDB4ZjYsIDB4OTIsIDB4ZmYsIDB4YjksIDB4NjYsIDB4ODYsIDB4Y2UsIDB4YzksIDB4MTgsIDB4MDgsCisJMHg2ZSwgMHhkYywgMHg2MSwgMHhmYywgMHgzMywgMHg2ZiwgMHhkNiwgMHhlNywgMHhkNCwgMHgxNSwgMHhhMywgMHgwMywKKwkweGI4LCAweDcxLCAweDMxLCAweGRkLCAweDdjLCAweGU5LCAweDBlLCAweGI2LCAweDhkLCAweDdjLCAweDk1LCAweDFjLAorCTB4NjYsIDB4YmQsIDB4Y2YsIDB4OTMsIDB4ZGUsIDB4ZDAsIDB4NmEsIDB4OWMsIDB4YjMsIDB4YjgsIDB4N2MsIDB4YTgsCisJMHhiNSwgMHgzZiwgMHgyYywgMHhjYywgMHhlNCwgMHg5MCwgMHgzMCwgMHhmYiwgMHhhOCwgMHhiZSwgMHhkOSwgMHg5MywKKwkweDMwLCAweDliLCAweDE3LCAweDA4LCAweGQzLCAweDU4LCAweDBiLCAweGI2LCAweGM5LCAweDc5LCAweGI0LCAweDk1LAorCTB4ZjgsIDB4ZmIsIDB4MmMsIDB4MmMsIDB4ZjIsIDB4NmIsIDB4ZGYsIDB4NzAsIDB4MDAsIDB4NGEsIDB4ZmEsIDB4MDMsCisJMHhiMiwgMHgyYiwgMHhlMSwgMHgzNSwgMHhkMSwgMHg0YywgMHhiOSwgMHhjNCwgMHhiMSwgMHg3NywgMHgxZSwgMHg5YiwKKwkweGYzLCAweGQwLCAweDVhLCAweDg4LCAweGU3LCAweDJhLCAweGFhLCAweGQxLCAweGFkLCAweGMzLCAweGU2LCAweDU5LAorCTB4YzIsIDB4OWMsIDB4ODMsIDB4NWYsIDB4MGEsIDB4YjQsIDB4MjYsIDB4ZmIsIDB4NjEsIDB4MGUsIDB4NmMsIDB4NDEsCisJMHhlNywgMHhmNCwgMHg1MSwgMHg2MSwgMHg2NiwgMHhjZiwgMHgxMiwgMHgxNiwgMHgwYywgMHhhNywgMHgyYiwgMHgzMiwKKwkweDE3LCAweGNkLCAweGNhLCAweDRjLCAweDMyLCAweDNlLCAweGY2LCAweDcyLCAweDg4LCAweDMwLCAweDc0LCAweGZhLAorCTB4NmYsIDB4ZTUsIDB4YjQsIDB4NjcsIDB4YjMsIDB4ZTAsIDB4YWMsIDB4ZmUsIDB4NGIsIDB4ZTIsIDB4MTUsIDB4MWYsCisJMHgzYywgMHgzNywgMHg2YiwgMHgxZiwgMHg0MiwgMHgyNCwgMHhiNSwgMHhjYywgMHhjNywgMHhmNywgMHgzMCwgMHg4OCwKKwkweDM1LCAweGY5LCAweDJmLCAweGUyLCAweDYxLCAweGMyLCAweDQzLCAweDU5LCAweDZmLCAweDdkLCAweDJmLCAweDcyLAorCTB4MjUsIDB4ODgsIDB4YjUsIDB4ZjksIDB4ZTksIDB4ZjAsIDB4NTEsIDB4M2IsIDB4ODgsIDB4YTIsIDB4MjcsIDB4ZTcsCisJMHg3YSwgMHgxYSwgMHhlYiwgMHhhMywgMHgwZiwgMHhkYiwgMHg4YywgMHhlZiwgMHhlNCwgMHgzNywgMHhkMywgMHg3MywKKwkweGQ2LCAweGUzLCAweGViLCAweGNmLCAweGEzLCAweDI3LCAweDljLCAweDIyLCAweGRjLCAweGU2LCAweGYxLCAweDc5LAorCTB4ZjcsIDB4NzUsIDB4ZTIsIDB4NTksIDB4Y2UsIDB4NzMsIDB4MjMsIDB4ZmMsIDB4YWUsIDB4NjEsIDB4NzUsIDB4YTYsCisJMHhjZCwgMHg3OCwgMHhkOCwgMHhiYiwgMHgyMywgMHgxYSwgMHg1OCwgMHg1MywgMHgzMiwgMHg3MCwgMHgwNywgMHhkNSwKKwkweGQ1LCAweGEyLCAweDU3LCAweDU3LCAweDdmLCAweDg1LCAweGU3LCAweDE1LCAweGUyLCAweDViLCAweDQ2LCAweDdjLAorCTB4OWIsIDB4YmMsIDB4MzEsIDB4MDMsIDB4Y2IsIDB4NGIsIDB4YzcsIDB4YmQsIDB4NTgsIDB4NTEsIDB4MWQsIDB4ZjYsCisJMHgwMywgMHhkYiwgMHg5ZSwgMHhmMSwgMHg2OCwgMHhmNSwgMHhhZSwgMHhjNiwgMHgzZSwgMHhjOSwgMHg4YSwgMHg0NywKKwkweGYzLCAweGJkLCAweDYyLCAweDY3LCAweDNlLCAweDRhLCAweGZiLCAweGI5LCAweDYyLCAweDI0LCAweGEzLCAweDhjLAorCTB4YzYsIDB4MjAsIDB4YjEsIDB4MmMsIDB4N2QsIDB4MzUsIDB4ZDUsIDB4MTksIDB4MmIsIDB4NjksIDB4ZDEsIDB4YjUsCisJMHg2NSwgMHg2ZCwgMHg3MiwgMHgyZSwgMHg2MSwgMHhhNywgMHgyNSwgMHg1OCwgMHg5NywgMHgwYywgMHg1MSwgMHhmZiwKKwkweGZlLCAweDE2LCAweGVlLCAweGQ0LCAweGMzLCAweGU4LCAweDRmLCAweGRlLCAweDBiLCAweGRjLCAweDU4LCAweDQzLAorCTB4ZmQsIDB4ZjYsIDB4NjEsIDB4MGYsIDB4YjMsIDB4ODYsIDB4NjgsIDB4ZGYsIDB4MWEsIDB4YWEsIDB4MGQsIDB4NzcsCisJMHg3OSwgMHg3YSwgMHg0ZiwgMHhiMSwgMHhhZSwgMHg3NCwgMHhjZSwgMHhlNSwgMHg2MiwgMHg4NCwgMHhlYSwgMHg3ZCwKKwkweGEyLCAweDgyLCAweDAxLCAweDM2LCAweDY2LCAweDhhLCAweGZjLCAweDNkLCAweGIzLCAweGIxLCAweGNiLCAweGIzLAorCTB4ZjMsIDB4NGYsIDB4MzYsIDB4ZGEsIDB4YTUsIDB4NWYsIDB4YzQsIDB4MmIsIDB4M2QsIDB4NzUsIDB4MjksIDB4YjIsCisJMHg4ZCwgMHhkZCwgMHg1OCwgMHg5ZiwgMHhlYywgMHhjMSwgMHgxYywgMHg2YiwgMHgzOSwgMHhiZSwgMHhhYSwgMHhiYiwKKwkweDg4LCAweDVhLCAweDYzLCAweGI4LCAweGRiLCAweDkzLCAweGMxLCAweGYyLCAweGJjLCAweGJmLCAweDZkLCAweDEwLAorCTB4NGQsIDB4MTMsIDB4YzgsIDB4ZjksIDB4YmMsIDB4ZmIsIDB4NTAsIDB4ZTUsIDB4ZGQsIDB4NDIsIDB4NGUsIDB4MDksCisJMHg2MiwgMHhkMywgMHgyZSwgMHhmZSwgMHg1NiwgMHg3MSwgMHg3NywgMHhhNiwgMHhmMiwgMHhjZSwgMHg3MCwgMHg3OCwKKwkweDJjLCAweDg4LCAweGExLCAweDVkLCAweGQ0LCAweGZiLCAweDUyLCAweDIxLCAweGI4LCAweDhkLCAweDlmLCAweDk2LAorCTB4ZGQsIDB4NGYsIDB4YjIsIDB4MmIsIDB4ZjcsIDB4ZWYsIDB4YWYsIDB4OTEsIDB4NWQsIDB4NjcsIDB4ODIsIDB4NDEsCisJMHgzNCwgMHgxMywgMHgwYywgMHg0YiwgMHgxMCwgMHg0ZiwgMHhjMywgMHg1NCwgMHgxZCwgMHg5YSwgMHhjNywgMHhmOCwKKwkweGVmLCAweDIzLCAweDA3LCAweGM1LCAweDdkLCAweGE1LCAweDBhLCAweGNmLCAweDQ2LCAweGZlLCAweDliLCAweDRhLAorCTB4NTgsIDB4YzEsIDB4N2MsIDB4OGIsIDB4ZDUsIDB4NTUsIDB4ODksIDB4NDcsIDB4YTMsIDB4N2IsIDB4NWMsIDB4MmQsCisJMHhlNiwgMHg4ZiwgMHhkNSwgMHhkMSwgMHg0NywgMHg0NywgMHg2YywgMHg4MiwgMHgyNiwgMHhhNiwgMHg5NiwgMHg4YiwKKwkweGFmLCAweGU3LCAweDkzLCAweDg4LCAweGQxLCAweGZkLCAweDMyLCAweGVlLCAweDU0LCAweGQ2LCAweGRmLCAweDUzLAorCTB4ZmEsIDB4YmMsIDB4ZjMsIDB4MDcsIDB4ZmYsIDB4YmIsIDB4YjIsIDB4NmYsIDB4MDEsIDB4OGUsIDB4ZWEsIDB4YmMsCisJMHhkMiwgMHhmYywgMHg2ZSwgMHgzZiwgMHhhNCwgMHhkNiwgMHg5MywgMHhhYiwgMHgyNywgMHgyZCwgMHgxZSwgMHhhNiwKKwkweDliLCAweGJlLCAweDJkLCAweGI1LCAweGFkLCAweDRlLCAweGI4LCAweDBkLCAweGEyLCAweDkwLCAweDNkLCAweGJkLAorCTB4YTUsIDB4MDYsIDB4MGIsIDB4NWIsIDB4MDQsIDB4NjMsIDB4Y2IsIDB4YjYsIDB4MzIsIDB4ODMsIDB4NjcsIDB4NTMsCisJMHg2MywgMHgwNSwgMHgwMywgMHhjNiwgMHhkOCwgMHgzMywgMHg5MSwgMHgwOSwgMHgzNSwgMHgyNSwgMHhlZiwgMHhjZSwKKwkweDQ0LCAweDc3LCAweDI1LCAweDEwLCAweDAyLCAweGY1LCAweDRiLCAweDEyLCAweDA0LCAweDk4LCAweGFhLCAweDJkLAorCTB4MzcsIDB4OTIsIDB4NDAsIDB4ZDgsIDB4NjksIDB4NDksIDB4NzgsIDB4OTIsIDB4ZWMsIDB4OTAsIDB4NGMsIDB4ZDUsCisJMHg1OCwgMHgwMSwgMHg2MSwgMHgyMCwgMHgwNCwgMHhlMywgMHhlYywgMHg0ZSwgMHg2ZCwgMHg5MSwgMHg1ZCwgMHhjZiwKKwkweDk4LCAweGMyLCAweDA2LCAweDljLCAweDE4LCAweDNmLCAweDMzLCAweDU5LCAweDhiLCAweDc4LCAweGUyLCAweGJiLAorCTB4ZGYsIDB4YjksIDB4ZGQsIDB4MGQsIDB4ODIsIDB4MjEsIDB4OTksIDB4MWEsIDB4NTcsIDB4NzUsIDB4ODksIDB4ZWUsCisJMHg3YiwgMHhmZiwgMHhmZiwgMHg5ZSwgMHhmZiwgMHhmYywgMHhlNywgMHg3YywgMHhlNywgMHgzYiwgMHhlNywgMHhmYywKKwkweGI3LCAweDRjLCAweDJlLCAweDJkLCAweGZiLCAweGI1LCAweDA4LCAweGM1LCAweGRhLCAweDk0LCAweGY5LCAweDQyLAorCTB4OTYsIDB4ZTMsIDB4NDgsIDB4MWMsIDB4ZWQsIDB4YmUsIDB4ZDksIDB4OGYsIDB4MTEsIDB4OTksIDB4ODQsIDB4Y2IsCisJMHg0MSwgMHhhZCwgMHgwOCwgMHg0YiwgMHg5ZSwgMHhjNywgMHgxZiwgMHhhZCwgMHgzYywgMHg1MSwgMHg2NCwgMHg5MCwKKwkweGI5LCAweDBiLCAweDkxLCAweDNmLCAweDJjLCAweDczLCAweDE3LCAweDIxLCAweGVmLCAweGE2LCAweDJjLCAweGYyLAorCTB4MWMsIDB4YTYsIDB4NWMsIDB4MTMsIDB4MTIsIDB4NWIsIDB4ZTUsIDB4NzksIDB4YzcsIDB4OTUsIDB4YTEsIDB4YjQsCisJMHhjOCwgMHg5MCwgMHg3YiwgMHhlZSwgMHg1OSwgMHg3MywgMHhhMywgMHg1YSwgMHhjNCwgMHgxOCwgMHgzZSwgMHg2MiwKKwkweDZlLCAweDYyLCAweDVlLCAweGUyLCAweDVmLCAweGZhLCAweDg2LCAweDk5LCAweDZhLCAweDkzLCAweGI1LCAweGJhLAorCTB4Y2QsIDB4YmQsIDB4MDksIDB4MjcsIDB4ZmEsIDB4YTksIDB4YjcsIDB4YWQsIDB4YTEsIDB4YTMsIDB4YzIsIDB4NjcsCisJMHhiMywgMHhmZiwgMHhlNSwgMHhmNCwgMHhmNiwgMHg5NywgMHhkNCwgMHhkYiwgMHhhOSwgMHhlYywgMHgzZSwgMHgxZSwKKwkweDU3LCAweDRlLCAweGRlLCAweDhjLCAweGY1LCAweDIyLCAweGEzLCAweGM4LCAweGE1LCAweGEwLCAweDQyLCAweDEzLAorCTB4YjksIDB4NmMsIDB4MjgsIDB4NjcsIDB4ZGMsIDB4YWMsIDB4YTAsIDB4N2UsIDB4Y2EsIDB4MmQsIDB4OTksIDB4OWEsCisJMHg5NSwgMHg5ZiwgMHg0NywgMHhhMSwgMHhjZSwgMHgyMSwgMHgxNywgMHgyYywgMHg5YiwgMHhjOCwgMHhjOCwgMHgzNSwKKwkweDQ1LCAweGZkLCAweDVjLCAweGI4LCAweDY5LCAweDEzLCAweGIzLCAweGY1LCAweDJjLCAweDc0LCAweDQ2LCAweDdjLAorCTB4ZmEsIDB4ZTIsIDB4NGIsIDB4M2IsIDB4OTIsIDB4MzIsIDB4YWYsIDB4NWQsIDB4ZjIsIDB4MDQsIDB4MmIsIDB4ZGYsCisJMHhiMywgMHhkMSwgMHg5ZSwgMHg1NiwgMHg0NSwgMHgzMywgMHgzYSwgMHhiMCwgMHg1OSwgMHg3YiwgMHgyMCwgMHgzZSwKKwkweDIwLCAweGViLCAweGNmLCAweGFkLCAweGJkLCAweDU5LCAweDc5LCAweDNhLCAweDJhLCAweGUzLCAweDM1LCAweDJjLAorCTB4YjIsIDB4YzYsIDB4NTksIDB4ZmIsIDB4Y2UsIDB4NzEsIDB4NmYsIDB4NzMsIDB4NWMsIDB4ODAsIDB4NjMsIDB4MzIsCisJMHhiNiwgMHhlOSwgMHg0OSwgMHg3ZCwgMHgyNiwgMHg3ZSwgMHhjZCwgMHg3ZCwgMHgzYSwgMHhhZSwgMHg3NCwgMHhmMiwKKwkweDk5LCAweGIwLCAweGY2LCAweGY2LCAweGZkLCAweGFjLCAweGFmLCAweDFmLCAweGE3LCAweDZmLCAweGYyLCAweDM3LAorCTB4YTcsIDB4OGQsIDB4ZjYsIDB4NWUsIDB4MDQsIDB4YzcsIDB4YjAsIDB4Y2IsIDB4YWEsIDB4NDksIDB4YzgsIDB4ZGMsCisJMHhjZiwgMHg0NSwgMHhjYiwgMHg1MSwgMHg3MCwgMHgyNCwgMHgzNywgMHgzNiwgMHgxMywgMHhjMywgMHgzMywgMHhiZCwKKwkweGFjLCAweDljLCAweDNmLCAweDBhLCAweDNlLCAweDBhLCAweDc2LCAweDFiLCAweDRhLCAweGU0LCAweDY2LCAweDNmLAorCTB4NGEsIDB4NmEsIDB4MzgsIDB4ZDIsIDB4YTcsIDB4Y2IsIDB4YTcsIDB4M2MsIDB4NTIsIDB4ZWYsIDB4NTMsIDB4ODgsCisJMHgxOSwgMHhjYywgMHgwNywgMHhkNSwgMHg1NSwgMHgxZSwgMHgwNywgMHg3MSwgMHg2ZSwgMHgxMywgMHhiZSwgMHgyMCwKKwkweGI3LCAweDhkLCAweDA0LCAweDljLCAweDk2LCAweDBmLCAweDRiLCAweGNkLCAweDJmLCAweDFmLCAweDE5LCAweDBjLAorCTB4MDIsIDB4ODYsIDB4YTMsIDB4OGMsIDB4YmIsIDB4NWMsIDB4MmIsIDB4NjMsIDB4M2QsIDB4YmEsIDB4ZDMsIDB4NWYsCisJMHg5OCwgMHg1MywgMHg5NSwgMHhjYywgMHhkOSwgMHhiNSwgMHg5YiwgMHgzNSwgMHgyMiwgMHhmYSwgMHg5ZCwgMHg2OSwKKwkweDhlLCAweGYwLCAweDVhLCAweDZmLCAweDNhLCAweGI3LCAweDRmLCAweGU0LCAweDEwLCAweGU0LCAweDY4LCAweGNmLAorCTB4NjgsIDB4YmYsIDB4MzUsIDB4MzcsIDB4ZGMsIDB4NzYsIDB4NmYsIDB4MGUsIDB4OWIsIDB4NzMsIDB4NzksIDB4YTksCisJMHg2MCwgMHg3MywgMHgzMSwgMHg3YSwgMHhmNywgMHg3YSwgMHg5MywgMHgyOSwgMHg1NCwgMHgyMiwgMHhhOSwgMHhkOSwKKwkweGU2LCAweGQzLCAweDRiLCAweDk4LCAweGY1LCAweDdiLCAweGZiLCAweDlhLCAweDYxLCAweGU1LCAweGViLCAweDllLAorCTB4MTQsIDB4ZmEsIDB4MmIsIDB4YzQsIDB4OGYsIDB4OWMsIDB4NWEsIDB4YmQsIDB4YTcsIDB4Y2MsIDB4NTYsIDB4MmUsCisJMHhiMiwgMHg1YiwgMHg1MiwgMHhkOSwgMHgwNywgMHgwYiwgMHhiMCwgMHg4OSwgMHhiOSwgMHg3NiwgMHhhYSwgMHg5NSwKKwkweDk4LCAweDM1LCAweDY4LCAweGI0LCAweDcwLCAweDdhLCAweDU3LCAweDYxLCAweDM4LCAweGQ1LCAweGY5LCAweDM1LAorCTB4YmYsIDB4OTcsIDB4ZjEsIDB4MTAsIDB4YzgsIDB4NjcsIDB4ZGUsIDB4N2YsIDB4MDksIDB4NTksIDB4NGMsIDB4MWIsCisJMHhmNCwgMHgxYSwgMHgzNiwgMHg5YiwgMHg4YywgMHhmZiwgMHhjYywgMHgzNCwgMHhkYSwgMHg2NCwgMHhhYywgMHhjYywKKwkweGMxLCAweDY3LCAweGZmLCAweDFiLCAweDVmLCAweGYwLCAweDUwLCAweDRmLCAweDg3LCAweDJiLCAweGE0LCAweDdlLAorCTB4YTYsIDB4ZDYsIDB4OTIsIDB4YWIsIDB4MGYsIDB4MTYsIDB4YTMsIDB4ODgsIDB4YjksIDB4NmIsIDB4N2YsIDB4OTUsCisJMHhhZiwgMHg0MywgMHhiNywgMHgxNSwgMHhlMiwgMHhmYywgMHg1NywgMHhmZSwgMHgxMywgMHg1MiwgMHg1NSwgMHg3OSwKKwkweDcwLCAweGQ1LCAweDAyLCAweDBmLCAweGM2LCAweDZkLCAweGIwLCAweGQ1LCAweDEyLCAweDdiLCAweDFiLCAweDgwLAorCTB4ZTYsIDB4MDksIDB4ZWUsIDB4ZGIsIDB4YTAsIDB4ODIsIDB4YTcsIDB4OTIsIDB4MzYsIDB4M2MsIDB4OWEsIDB4YjQsCisJMHg2MywgMHg2ZCwgMHgxMiwgMHhkZiwgMHg1OSwgMHgwNCwgMHg0YywgMHhkNywgMHhjMCwgMHhkZiwgMHgzZSwgMHhhMywKKwkweDYwLCAweDZiLCAweDI5LCAweGZjLCAweGFkLCAweDMxLCAweGM1LCAweGRmLCAweGIyLCAweDk2LCAweDM5LCAweGQzLAorCTB4OWEsIDB4MDksIDB4ZTIsIDB4MTksIDB4ZWYsIDB4NzUsIDB4MGUsIDB4NzAsIDB4NWYsIDB4MDcsIDB4ZWMsIDB4YTgsCisJMHgxOSwgMHhjMCwgMHgzZCwgMHhmOSwgMHg0MCwgMHg4MywgMHgxMywgMHhmZSwgMHgxOSwgMHhjNiwgMHg5OSwgMHg3MiwKKwkweDA3LCAweGZjLCAweDUzLCAweDk3LCAweGVkLCAweGZlLCAweGNlLCAweDFhLCAweDNiLCAweDM3LCAweGI3LCAweDU2LAorCTB4NjQsIDB4NzEsIDB4ZTEsIDB4MzEsIDB4ZGEsIDB4ZjMsIDB4YTIsIDB4NDEsIDB4ZGUsIDB4Y2YsIDB4ZmMsIDB4NWQsCisJMHg2NSwgMHg5ZSwgMHhmMywgMHhjOSwgMHg5ZiwgMHg0OCwgMHhmZCwgMHg1MiwgMHhhZSwgMHg0OSwgMHhlZiwgMHg1MiwKKwkweDQxLCAweGU5LCAweGEwLCAweDlkLCAweDE4LCAweDc2LCAweGNlLCAweDNjLCAweDVmLCAweDI1LCAweGY4LCAweDBkLAorCTB4M2MsIDB4NDUsIDB4ZDksIDB4ZGMsIDB4ZmMsIDB4NGQsIDB4YWQsIDB4MjUsIDB4MzcsIDB4NWQsIDB4YTEsIDB4NjIsCisJMHhmZCwgMHhiMCwgMHhkYywgMHgwYiwgMHg2YiwgMHgxZSwgMHgyNywgMHg3ZCwgMHgyYSwgMHg4ZiwgMHgzZSwgMHg3ZSwKKwkweGM0LCAweGVhLCAweDc3LCAweGQ5LCAweGI4LCAweDQ2LCAweDNiLCAweDhhLCAweDA2LCAweDgxLCAweDM1LCAweDcxLAorCTB4M2MsIDB4NTEsIDB4MGMsIDB4N2YsIDB4NDQsIDB4NjQsIDB4YWMsIDB4NWIsIDB4ZWUsIDB4ZTAsIDB4ZDgsIDB4NjIsCisJMHhiNCwgMHg0YywgMHg2NCwgMHhjNiwgMHgzZCwgMHgzYywgMHhmMSwgMHhhMywgMHg4YSwgMHg0YywgMHgyZCwgMHhmNywKKwkweGY3LCAweGY3LCAweDVlLCAweDdiLCAweDFhLCAweGZjLCAweGQ4LCAweDk0LCAweGE0LCAweGNkLCAweGQ5LCAweDNjLAorCTB4MTgsIDB4Y2UsIDB4ZDYsIDB4NTQsIDB4MzcsIDB4YTQsIDB4YmMsIDB4YjMsIDB4N2EsIDB4YTMsIDB4ZmYsIDB4YmQsCisJMHgzOCwgMHhkYiwgMHgzNywgMHhhNSwgMHgyZiwgMHhjYywgMHg3MCwgMHgxZSwgMHg0MywgMHhkOSwgMHg0MCwgMHhkZCwKKwkweDBkLCAweDRmLCAweDlhLCAweDg4LCAweGVhLCAweDI2LCAweGM2LCAweGY5LCAweDc5LCAweDUzLCAweDg3LCAweDUxLAorCTB4NDQsIDB4NWYsIDB4ZDgsIDB4MTgsIDB4ZmIsIDB4ZDIsIDB4MzQsIDB4YjIsIDB4ZmUsIDB4ZmMsIDB4NGEsIDB4MjIsCisJMHhhMCwgMHg2YywgMHgyMSwgMHg1NywgMHg3ZSwgMHg5NSwgMHhmMSwgMHg3NCwgMHg4YywgMHg5ZiwgMHg1MSwgMHhlNiwKKwkweDcwLCAweDRlLCAweGNhLCAweDZkLCAweGEzLCAweDVmLCAweGVmLCAweDRjLCAweDAxLCAweDIzLCAweGNjLCAweGQxLAorCTB4MGYsIDB4MmUsIDB4MTcsIDB4ZmUsIDB4NWUsIDB4YzQsIDB4ZTcsIDB4ZDEsIDB4NmIsIDB4NzgsIDB4NGYsIDB4OWEsCisJMHg5ZiwgMHgyMywgMHhmYywgMHg0YywgMHg3MiwgMHg0ZiwgMHhmOSwgMHgzYywgMHgwNCwgMHhjNiwgMHgxZCwgMHg4OCwKKwkweDhjLCAweDEzLCAweDY4LCAweGM3LCAweDAzLCAweDk4LCAweDYyLCAweDBjLCAweGJjLCAweDMxLCAweGFhLCAweGEyLAorCTB4NjQsIDB4YWMsIDB4MWMsIDB4MWYsIDB4MWQsIDB4MjYsIDB4M2UsIDB4MWUsIDB4Y2EsIDB4NzAsIDB4ZmUsIDB4NGQsCisJMHhlMywgMHhkMiwgMHhkZiwgMHg5MiwgMHhmNSwgMHg0OSwgMHgxZiwgMHg1OCwgMHhmYywgMHhhOSwgMHgwMCwgMHg2MywKKwkweGE0LCAweDFmLCAweGQyLCAweDBiLCAweDdlLCAweDU3LCAweGU3LCAweGRjLCAweGFhLCAweGY0LCAweGYxLCAweDVhLAorCTB4NzEsIDB4MzQsIDB4ZWEsIDB4ZjMsIDB4ZjQsIDB4ZDEsIDB4ZTYsIDB4MGQsIDB4ODcsIDB4ZjgsIDB4NTgsIDB4MDMsCisJMHg1ZSwgMHg4ZCwgMHhlNiwgMHg3YSwgMHg0MiwgMHhiZSwgMHg5NiwgMHg5ZiwgMHg0YSwgMHgzZCwgMHg4MywgMHgyMSwKKwkweDNiLCAweDRmLCAweDkzLCAweDZiLCAweGI5LCAweDU4LCAweDJhLCAweDZiLCAweDk2LCAweGJhLCAweDc0LCAweDhlLAorCTB4YjcsIDB4Y2MsIDB4ZmUsIDB4ZmQsIDB4OGMsIDB4MjksIDB4N2QsIDB4Y2EsIDB4ZDcsIDB4MjYsIDB4YmQsIDB4N2QsCisJMHgyOSwgMHhlOCwgMHg1NiwgMHhhYywgMHgzYywgMHg1YywgMHhlNywgMHg0ZCwgMHgxYSwgMHg5MCwgMHhmZCwgMHg2ZCwKKwkweGEwLCAweDBjLCAweGRmLCAweGE1LCAweGVkLCAweDA3LCAweDQ0LCAweGQ3LCAweDhjLCAweGVkLCAweDUyLCAweGVmLAorCTB4MmQsIDB4NDMsIDB4ZmYsIDB4NDAsIDB4MzksIDB4ZjYsIDB4MGMsIDB4MTgsIDB4ZTgsIDB4NWQsIDB4ZGUsIDB4ODYsCisJMHgzMywgMHg1MSwgMHgxMywgMHg5YiwgMHg0MiwgMHgyNiwgMHhkNiwgMHg4NCwgMHhiYywgMHg4MSwgMHg1NywgMHg1MCwKKwkweGRmLCAweDc4LCAweDE0LCAweDhmLCAweDkxLCAweDQzLCAweGE4LCAweGQ0LCAweGM5LCAweDM3LCAweGYwLCAweGNlLAorCTB4NWUsIDB4MDcsIDB4MzYsIDB4ZWIsIDB4N2YsIDB4NGMsIDB4MWYsIDB4MzYsIDB4Y2QsIDB4ZjcsIDB4OTYsIDB4MmQsCisJMHhjMCwgMHg3MCwgMHhhMiwgMHg1ZSwgMHhlZCwgMHhhNiwgMHg3YywgMHg5MSwgMHgzNiwgMHhlZSwgMHg1NSwgMHhkMCwKKwkweDgxLCAweDY3LCAweGY1LCAweGVmLCAweGYwLCAweDVlLCAweGI3LCAweGNkLCAweGExLCAweGM5LCAweDc3LCAweDFiLAorCTB4ZTMsIDB4YTksIDB4ZWMsIDB4YTUsIDB4NDEsIDB4ZmIsIDB4Y2EsIDB4YzQsIDB4YjIsIDB4NDgsIDB4YjYsIDB4Y2UsCisJMHhiZSwgMHhiOSwgMHg0MSwgMHgzMCwgMHhiZiwgMHgxOCwgMHhhNywgMHhhOSwgMHhiNywgMHgxMywgMHhjOSwgMHgwOCwKKwkweGMzLCAweDJlLCAweDk0LCAweDY3LCAweDFiLCAweGJhLCAweGYwLCAweDM0LCAweGY5LCAweGM2LCAweDNiLCAweDI0LAorCTB4MDIsIDB4ZjcsIDB4YzcsIDB4MTUsIDB4MzQsIDB4ZDYsIDB4ZTksIDB4YjgsIDB4OTgsIDB4ZmUsIDB4MDYsIDB4ZGUsCisJMHgxYSwgMHgwZCwgMHhlMywgMHg0ZCwgMHhjNiwgMHhmNCwgMHgyNSwgMHhkZiwgMHhmNSwgMHg5MiwgMHg4MywgMHg3YSwKKwkweDcwLCAweDNlLCAweDFkLCAweGM2LCAweGI5LCAweGE4LCAweGI3LCAweGY1LCAweDA1LCAweDY1LCAweDAxLCAweDdlLAorCTB4OWEsIDB4NzYsIDB4ZTAsIDB4ZGUsIDB4MzgsIDB4ZjAsIDB4NGIsIDB4Y2UsIDB4ZTMsIDB4OGYsIDB4M2IsIDB4NzAsCisJMHgyNSwgMHhhZCwgMHhlMiwgMHgyOCwgMHhmNywgMHhjNywgMHgxMSwgMHg1YSwgMHgwMiwgMHhhMywgMHhjZCwgMHg4MywKKwkweDIzLCAweDQzLCAweDhmLCAweDYyLCAweDJhLCAweGY1LCAweDI4LCAweDRlLCAweDI1LCAweGRmLCAweDMxLCAweDVkLAorCTB4OWEsIDB4ZjQsIDB4NzUsIDB4NWMsIDB4YjgsIDB4YzIsIDB4N2MsIDB4NmMsIDB4OWEsIDB4ZGEsIDB4MjgsIDB4NWUsCisJMHhkMSwgMHhjYSwgMHgzOCwgMHhhZiwgMHgxOSwgMHhhMiwgMHhmNywgMHhiNywgMHhmOCwgMHhkYiwgMHhmZCwgMHhmMSwKKwkweDQ2LCAweDFjLCAweDFjLCAweGE3LCAweDRhLCAweDEzLCAweDNhLCAweDEyLCAweDMxLCAweDc5LCAweDU2LCAweDAzLAorCTB4NjIsIDB4ZTQsIDB4ODUsIDB4ZmQsIDB4NGMsIDB4ZGIsIDB4YjcsIDB4ODYsIDB4ZWUsIDB4OTUsIDB4NWMsIDB4NDMsCisJMHg2OSwgMHhhOSwgMHhlZCwgMHhjZiwgMHhhZSwgMHhhMywgMHg3MSwgMHg1NiwgMHhjZiwgMHg0ZSwgMHg3MiwgMHgyOCwKKwkweGVhLCAweDk1LCAweGUzLCAweGZlLCAweDM2LCAweDExLCAweGI0LCAweDYyLCAweGQzLCAweGIxLCAweDliLCAweGZiLAorCTB4ZDEsIDB4YzgsIDB4ZmQsIDB4ZjgsIDB4MDYsIDB4MmUsIDB4ZWUsIDB4NmQsIDB4YzMsIDB4NWIsIDB4YzQsIDB4YmIsCisJMHhkMiwgMHg2NSwgMHhiZSwgMHg0ZSwgMHhhNywgMHhhZCwgMHg5ZSwgMHg3MywgMHhhNywgMHhjZCwgMHg1NCwgMHg5NSwKKwkweGU4LCAweGI0LCAweDBkLCAweGJmLCAweDg4LCAweDhhLCAweDRlLCAweGQzLCAweGM0LCAweDNmLCAweDlmLCAweGM3LAorCTB4NmYsIDB4ZmYsIDB4Y2IsIDB4NGEsIDB4ZGEsIDB4YjMsIDB4YWQsIDB4M2IsIDB4OTgsIDB4ZTksIDB4NDEsIDB4MTUsCisJMHhhZiwgMHg3MCwgMHhlMSwgMHhhYSwgMHgyNSwgMHg5YiwgMHhjOCwgMHhmYSwgMHg4NywgMHhlNCwgMHhmYiwgMHg4NSwKKwkweGI5LCAweGE2LCAweDRhLCAweGU0LCAweDMzLCAweGNjLCAweDNjLCAweDRkLCAweDBiLCAweGU0LCAweDI5LCAweDEyLAorCTB4NjcsIDB4MDMsIDB4NTYsIDB4M2QsIDB4YmUsIDB4MmUsIDB4ZGUsIDB4MDUsIDB4N2IsIDB4YTgsIDB4OTgsIDB4NzksCisJMHg5OCwgMHg3NywgMHhhNiwgMHgwMywgMHg2ZiwgMHhlMSwgMHhkYSwgMHhhNCwgMHgwYiwgMHg4YiwgMHhlMywgMHgxYSwKKwkweDVlLCAweDllLCAweDdjLCAweDhkLCAweGNmLCAweGZhLCAweDQ3LCAweDVjLCAweGU2LCAweDc3LCAweDVmLCAweDNjLAorCTB4ZTMsIDB4NmYsIDB4ZGQsIDB4MGQsIDB4NmQsIDB4NzgsIDB4MzAsIDB4MmQsIDB4ZWIsIDB4Y2IsIDB4ZTMsIDB4ODMsCisJMHg3NCwgMHg0NCwgMHhkMiwgMHhiMiwgMHhjZSwgMHgxOCwgMHg3ZCwgMHg0MywgMHhkNiwgMHg1OSwgMHhmZSwgMHhlZiwKKwkweGFjLCAweGYzLCAweGJmLCAweDcyLCAweGJlLCAweDA1LCAweGY0LCAweGE1LCAweDVjLCAweGVjLCAweDI4LCAweGMxLAorCTB4OTEsIDB4YTQsIDB4OGEsIDB4ZDMsIDB4N2EsIDB4MzEsIDB4MmUsIDB4YTksIDB4NTIsIDB4NWYsIDB4NzYsIDB4MzEsCisJMHg4NiwgMHgzOCwgMHhkMCwgMHhjYywgMHg5YywgMHg3MSwgMHg4NCwgMHg5ZiwgMHg4ZCwgMHhjYywgMHg3ZiwgMHhjZSwKKwkweGVhLCAweDBlLCAweDljLCAweGQyLCAweDE3LCAweDEwLCAweGViLCAweGVmLCAweGI0LCAweDYxLCAweGI5LCAweDQ2LAorCTB4YjIsIDB4NWYsIDB4NTYsIDB4OGUsIDB4NzMsIDB4NTIsIDB4ZmYsIDB4YjMsIDB4YWUsIDB4YmIsIDB4YTQsIDB4MmYsCisJMHg4OSwgMHgzMSwgMHhlYSwgMHgyYiwgMHgyZiwgMHhmNiwgMHgxYiwgMHhmMywgMHhhYSwgMHg4NSwgMHgzNSwgMHg3NywKKwkweGNhLCAweDc3LCAweGU3LCAweDNjLCAweDEyLCAweDgyLCAweDdmLCAweDY5LCAweDZlLCAweGFkLCAweGNhLCAweGM2LAorCTB4MmUsIDB4ZTUsIDB4NGYsIDB4MmIsIDB4MzMsIDB4NzgsIDB4MjEsIDB4NzEsIDB4ZWMsIDB4ZWYsIDB4NzIsIDB4ZDgsCisJMHgyMSwgMHhmOSwgMHg2NCwgMHgxYiwgMHhlMywgMHgxMCwgMHhlMywgMHhmMiwgMHhmMSwgMHg2ZCwgMHg5MiwgMHhlNywKKwkweGQ5LCAweGMyLCAweGVmLCAweGI1LCAweGFkLCAweGQyLCAweGYyLCAweDYwLCAweGI3LCAweGY4LCAweGRlLCAweDdiLAorCTB4MmYsIDB4NjUsIDB4MzgsIDB4ZmEsIDB4ZmIsIDB4MmYsIDB4NjksIDB4ZDYsIDB4ZGYsIDB4ZWIsIDB4MmYsIDB4MmQsCisJMHhiNiwgMHhmZSwgMHg3ZSwgMHhmMiwgMHg5MiwgMHgyZiwgMHg3NSwgMHgyYiwgMHg1ZSwgMHg2NSwgMHgzOCwgMHhiMCwKKwkweDc1LCAweDZlLCAweDA1LCAweDdkLCAweGJhLCAweGExLCAweDNjLCAweGRjLCAweDIwLCAweDVjLCAweDcyLCAweDM2LAorCTB4OGYsIDB4MDgsIDB4MjgsIDB4NjcsIDB4YTMsIDB4OTIsIDB4YTcsIDB4MTUsIDB4MWEsIDB4Y2MsIDB4ZTMsIDB4OTUsCisJMHg0NiwgMHhiZiwgMHg0NiwgMHgzYywgMHhlZSwgMHg0MiwgMHhjOSwgMHgzMiwgMHgwZCwgMHgxNywgMHhhOCwgMHg3MywKKwkweGMyLCAweDI4LCAweGVkLCAweGY4LCAweGZmLCAweDIwLCAweGJhLCAweDE3LCAweGVkLCAweDg1LCAweDE2LCAweGY2LAorCTB4OTgsIDB4NjYsIDB4N2YsIDB4NDgsIDB4NmEsIDB4MGMsIDB4MzIsIDB4YWYsIDB4MDMsIDB4MWYsIDB4NzAsIDB4MmYsCisJMHg3ZiwgMHgzNSwgMHg1YSwgMHg4NCwgMHhmNywgMHg1MywgMHgxYSwgMHgyZSwgMHhhNSwgMHhkYiwgMHhiMCwgMHg3YiwKKwkweDMyLCAweGMzLCAweDMzLCAweDRlLCAweDU5LCAweGZjLCAweDViLCAweDYzLCAweDhlLCAweGU5LCAweGMwLCAweGMxLAorCTB4YTgsIDB4ODYsIDB4NTgsIDB4ZTIsIDB4NzUsIDB4YjMsIDB4NDAsIDB4ZjMsIDB4NGQsIDB4ZjksIDB4ZWQsIDB4MGUsCisJMHgxYywgMHg0OCwgMHg0ZiwgMHg2MywgMHg3MiwgMHhlMCwgMHg2MywgMHhkMywgMHhhZSwgMHg3NSwgMHhlMSwgMHhhMywKKwkweGQwLCAweDM0LCAweDI2LCAweDBlLCAweDQ5LCAweDVmLCAweDRmLCAweDQ3LCAweGZmLCAweDkwLCAweDg2LCAweGRlLAorCTB4ODQsIDB4MGQsIDB4N2IsIDB4OTYsIDB4YjcsIDB4YTAsIDB4N2YsIDB4YjIsIDB4MTksIDB4YzYsIDB4OTgsIDB4MDcsCisJMHg3YiwgMHhkMiwgMHg2OSwgMHg0YywgMHg4ZCwgMHg0ZSwgMHhlMywgMHg0YywgMHg1MiwgMHg2YiwgMHgyYywgMHg1MCwKKwkweGE2LCAweDcxLCAweDlhLCAweGNmLCAweGQ5LCAweDkxLCAweDc4LCAweDFiLCAweDA2LCAweGU3LCAweGQ4LCAweDk5LAorCTB4OTQsIDB4OWEsIDB4YTQsIDB4M2MsIDB4NjcsIDB4MWEsIDB4ZGQsIDB4YTksIDB4YmIsIDB4ZDUsIDB4NDQsIDB4MjgsCisJMHg0ZiwgMHhhMiwgMHhhNywgMHgzZCwgMHg1MywgMHhhYiwgMHgyNywgMHhiZSwgMHhhNiwgMHgzNSwgMHhhNSwgMHg4ZiwKKwkweGZiLCAweDc0LCAweDM0LCAweDlkLCAweGFiLCAweGRiLCAweGRmLCAweDU5LCAweDBiLCAweGQxLCAweGQxLCAweDM3LAorCTB4ZDQsIDB4YzIsIDB4MzEsIDB4MWEsIDB4YmEsIDB4MTMsIDB4ZDIsIDB4MWIsIDB4ZjUsIDB4ZjEsIDB4OTksIDB4MjYsCisJMHg3ZSwgMHhhOSwgMHg3YiwgMHhkZCwgMHg4YiwgMHhmOSwgMHhmNywgMHhiMCwgMHhkZSwgMHg4OSwgMHgyZCwgMHg5YywKKwkweDZiLCAweDhhLCAweDc5LCAweDkwLCAweGE2LCAweDc4LCAweDFiLCAweDBkLCAweGQ4LCAweGYxLCAweDllLCAweDRlLAorCTB4Y2UsIDB4NTMsIDB4NjksIDB4YzcsIDB4YWIsIDB4N2EsIDB4MDksIDB4MjIsIDB4NjUsIDB4NzYsIDB4ZDQsIDB4ODcsCisJMHgxOCwgMHhhNywgMHhiMywgMHg3MSwgMHhmYiwgMHhjMywgMHhhNCwgMHg4MiwgMHg0NywgMHg4OSwgMHhhOSwgMHgyNywKKwkweDQyLCAweGY1LCAweGVkLCAweGFiLCAweDg1LCAweGQxLCAweDFkLCAweDUyLCAweDcwLCAweDRkLCAweGJiLCAweDYxLAorCTB4MWEsIDB4OGMsIDB4NWQsIDB4MmUsIDB4N2YsIDB4NmUsIDB4OGYsIDB4N2UsIDB4NmQsIDB4NjYsIDB4ZmEsIDB4OWIsCisJMHg1ZiwgMHg5OCwgMHhiOSwgMHg3MSwgMHgzMywgMHg5NCwgMHhmMSwgMHgyOSwgMHg4ZSwgMHg1YiwgMHhiYywgMHhhYywKKwkweGJlLCAweDUzLCAweGM2LCAweGI5LCAweDg5LCAweGU5LCAweDMyLCAweDRlLCAweGVhLCAweGQxLCAweGI3LCAweGM2LAorCTB4ZTksIDB4ZDgsIDB4MzksIDB4MTQsIDB4YjEsIDB4ZTQsIDB4ZGQsIDB4OTUsIDB4YzAsIDB4NTIsIDB4MDcsIDB4YzQsCisJMHg5ZiwgMHhlYSwgMHhkNSwgMHgyYiwgMHg0MCwgMHhkNywgMHhiNCwgMHgzZSwgMHg4NywgMHg1YywgMHhjNywgMHgxZiwKKwkweGQ4LCAweDA4LCAweGQxLCAweDk1LCAweGU0LCAweDkyLCAweDZmLCAweDYzLCAweDRmLCAweDc0LCAweDE0LCAweGNjLAorCTB4MjcsIDB4ODksIDB4NzMsIDB4ZmUsIDB4ZjUsIDB4MjMsIDB4NDgsIDB4ZTEsIDB4ZjksIDB4NzQsIDB4MGEsIDB4MmYsCisJMHg1MCwgMHg0NywgMHg4NiwgMHg3NSwgMHg2ZSwgMHgyOSwgMHg4ZCwgMHgzZiwgMHg4ZiwgMHhiZSwgMHg4ZCwgMHg5OCwKKwkweGI1LCAweDY3LCAweDQ3LCAweGIxLCAweDIxLCAweGZhLCAweGY3LCAweDU1LCAweGMyLCAweDExLCAweDc3LCAweDI0LAorCTB4NTYsIDB4NzIsIDB4N2UsIDB4ZDEsIDB4YWIsIDB4YjcsIDB4ZDUsIDB4YzAsIDB4OTcsIDB4OWMsIDB4N2YsIDB4MjUsCisJMHg3YSwgMHg0NiwgMHg0YywgMHhmMywgMHg3YiwgMHg4YywgMHg1ZiwgMHgzZiwgMHgyMywgMHhiZiwgMHhiYSwgMHg5NiwKKwkweDNkLCAweDAzLCAweDU1LCAweDQwLCAweDdkLCAweDZiLCAweDU2LCAweDFjLCAweDZiLCAweGUzLCAweDNlLCAweDU3LAorCTB4MGIsIDB4YWYsIDB4NDcsIDB4YzksIDB4YjgsIDB4YTYsIDB4MmMsIDB4OGUsIDB4YzksIDB4YmUsIDB4OTMsIDB4MzcsCisJMHg4ZSwgMHg3YiwgMHhmMCwgMHgxNCwgMHgzOSwgMHg0YSwgMHhmZSwgMHhlMSwgMHgxZiwgMHgyOCwgMHgxMiwgMHhjYiwKKwkweDZhLCAweDBlLCAweDkxLCAweGVmLCAweDFmLCAweGYyLCAweDI4LCAweDRiLCAweGY2LCAweGI5LCAweGYwLCAweDY4LAorCTB4NGMsIDB4ZWEsIDB4MzcsIDB4Y2QsIDB4ZTgsIDB4ZDksIDB4YWYsIDB4ZjEsIDB4MWUsIDB4YWYsIDB4N2UsIDB4ODEsCisJMHgzOSwgMHhlOSwgMHg2OSwgMHhmOCwgMHgzYywgMHgyMywgMHhlNCwgMHg1NSwgMHg2ZSwgMHg2MiwgMHhiMSwgMHhlMywKKwkweDcwLCAweDI5LCAweDhhLCAweDBlLCAweGFiLCAweGIwLCAweDFkLCAweDJlLCAweDQ3LCAweGYxLCAweDYxLCAweDM3LAorCTB4NmEsIDB4MTgsIDB4ZGIsIDB4ZGMsIDB4ZTMsIDB4MTcsIDB4MzEsIDB4YjksIDB4MGYsIDB4NmEsIDB4NTEsIDB4ZjgsCisJMHg3MywgMHgzMywgMHg1ZiwgMHg5MywgMHgzZSwgMHg1YiwgMHgwMCwgMHhhNSwgMHhlMywgMHhkYiwgMHg5MSwgMHg4ZSwKKwkweDA1LCAweDUxLCAweDNjLCAweDRlLCAweDJhLCAweDM1LCAweDdlLCAweDVjLCAweGE5LCAweGU3LCAweDMzLCAweDFmLAorCTB4OGEsIDB4NjksIDB4OWMsIDB4MmIsIDB4YzMsIDB4NzUsIDB4NTYsIDB4NzMsIDB4NWMsIDB4NWYsIDB4YzIsIDB4YmIsCisJMHg1ZSwgMHg3YSwgMHg2NSwgMHhkNywgMHhmNCwgMHgzNywgMHg1MCwgMHgzMCwgMHg3MCwgMHhlYiwgMHgyYywgMHg5NywKKwkweDE2LCAweGMyLCAweDNjLCAweDcyLCAweDkxLCAweGQ2LCAweDY3LCAweDkxLCAweDM5LCAweGQ3LCAweGY1LCAweDcwLAorCTB4NzYsIDB4NGQsIDB4NDEsIDB4NTksIDB4OTMsIDB4YjMsIDB4OGQsIDB4YjYsIDB4MzAsIDB4NTcsIDB4ZWEsIDB4NWYsCisJMHhiOCwgMHg0YywgMHhmYiwgMHhiOSwgMHg5ZiwgMHhmMiwgMHhkZSwgMHg2MCwgMHg2ZSwgMHhkOCwgMHgxOSwgMHgxMywKKwkweGJiLCAweGZmLCAweDgxLCAweDQyLCAweGJmLCAweGMxLCAweDRjLCAweGFhLCAweDA4LCAweDFmLCAweGE3LCAweDNjLAorCTB4OGEsIDB4OGYsIDB4ZWIsIDB4ZjksIDB4MGIsIDB4NWUsIDB4ZmYsIDB4NzMsIDB4YWUsIDB4NjcsIDB4YzcsIDB4N2UsCisJMHg2ZiwgMHhlYiwgMHg0OSwgMHhjNSwgMHhkYiwgMHhiZSwgMHg0ZSwgMHhmMSwgMHhhOSwgMHgzYiwgMHg5NCwgMHg2MiwKKwkweDVjLCAweDFlLCAweDJkLCAweGM1LCAweDE1LCAweGM2LCAweGUyLCAweDFiLCAweGEzLCAweGU1LCAweGI4LCAweDNhLAorCTB4NWEsIDB4NDksIDB4NWYsIDB4ZDEsIDB4MzgsIDB4ODcsIDB4NjksIDB4OTYsIDB4NjgsIDB4NmUsIDB4Y2MsIDB4YTQsCisJMHg1ZiwgMHhjMCwgMHg5YywgMHhkOCwgMHgwMiwgMHg3YywgMHg5YywgMHhkZSwgMHg4MiwgMHhkMiwgMHg5OCwgMHg3MCwKKwkweDc2LCAweDBmLCAweDNlLCAweGUyLCAweGY1LCAweDBmLCAweGQzLCAweDEzLCAweDI4LCAweGRjLCAweGY3LCAweDM5LAorCTB4ZWYsIDB4MzEsIDB4Y2QsIDB4ODcsIDB4YjgsIDB4YzYsIDB4YWIsIDB4ZTksIDB4MGUsIDB4MTQsIDB4ZWYsIDB4ZGIsCisJMHgwNiwgMHhjNywgMHgzZSwgMHhiMywgMHhhYiwgMHgyNywgMHg4NCwgMHg5ZiwgMHhkYSwgMHhiOSwgMHg5NiwgMHg2ZSwKKwkweGRkLCAweDNiLCAweGI1LCAweGQ4LCAweDFlLCAweGU0LCAweDFjLCAweDNhLCAweGU3LCAweDNjLCAweGFlLCAweDJjLAorCTB4MTksIDB4ZGYsIDB4ODYsIDB4ZDIsIDB4N2QsIDB4MWUsIDB4NmMsIDB4YTUsIDB4MmUsIDB4MjcsIDB4YTAsIDB4MDUsCisJMHhkNiwgMHgyOSwgMHhkYiwgMHg5MCwgMHg3NywgMHgzOCwgMHhhMywgMHg4MywgMHg0ZCwgMHhlMywgMHgxOSwgMHgxZiwKKwkweDc5LCAweGE4LCAweDQxLCAweGVhLCAweDQzLCAweGM3LCAweDk1LCAweDExLCAweGNiLCAweDQ3LCAweGRjLCAweDcyLAorCTB4ZmUsIDB4MDQsIDB4ZDMsIDB4ZTksIDB4MjIsIDB4OWMsIDB4NGQsIDB4ODksIDB4OGUsIDB4ZTQsIDB4ZWMsIDB4ZGEsCisJMHgwNCwgMHhmMiwgMHhmNywgMHgxMSwgMHgyMywgMHg0NywgMHg3NSwgMHg4YiwgMHg0MywgMHg4OCwgMHg2ZiwgMHg4YywKKwkweGE2LCAweGVmLCAweGU2LCAweDVmLCAweDQxLCAweGVjLCAweDQ5LCAweGQ0LCAweGQwLCAweGI3LCAweDE2LCAweDYwLAorCTB4Y2QsIDB4M2UsIDB4ZTksIDB4OTEsIDB4NGUsIDB4ZGQsIDB4ZWYsIDB4YTIsIDB4MzUsIDB4OGQsIDB4YTUsIDB4ZWYsCisJMHhlNiwgMHg1YiwgMHgwZCwgMHhiNCwgMHg1MywgMHg2ZiwgMHg4YiwgMHgwMSwgMHgzOSwgMHhhYiwgMHg2MSwgMHg2MiwKKwkweDVhLCAweDNmLCAweGFlLCAweGQ4LCAweDYyLCAweDkyLCAweDZmLCAweGI1LCAweGQxLCAweGU3LCAweDViLCAweGQxLAorCTB4MzMsIDB4ODQsIDB4ZjYsIDB4ODMsIDB4MGQsIDB4ZDIsIDB4YjcsIDB4NzUsIDB4NjIsIDB4ODQsIDB4ZjksIDB4ZDMsCisJMHg2NSwgMHhlNiwgMHgxYywgMHhkNCwgMHhiOSwgMHg5YSwgMHgxNywgMHhjZSwgMHhjMywgMHhmMCwgMHhhOCwgMHgwYiwKKwkweDNmLCAweDFhLCAweGY1LCAweGEwLCAweDMxLCAweGY2LCAweDM5LCAweDMxLCAweGEzLCAweDEwLCAweGM3LCAweGE5LAorCTB4ZWYsIDB4NDksIDB4ZjIsIDB4OWYsIDB4OGYsIDB4YTIsIDB4MmEsIDB4MjYsIDB4MTgsIDB4NmIsIDB4M2YsIDB4OGMsCisJMHg1NiwgMHg2MiwgMHg5YywgMHhiOSwgMHhkNiwgMHg3NSwgMHhlMiwgMHg0YywgMHg5YSwgMHg3YiwgMHhmMywgMHgwMSwKKwkweGYzLCAweDhlLCAweGVmLCAweGE1LCAweDgzLCAweGY4LCAweDU1LCAweDM0LCAweDg4LCAweDU3LCAweGE5LCAweGM3LAorCTB4YmEsIDB4OTgsIDB4OWIsIDB4MzIsIDB4MWQsIDB4NTMsIDB4NzAsIDB4ZTgsIDB4YjgsIDB4OTIsIDB4NDcsIDB4YmIsCisJMHhmMCwgMHhjNywgMHgzNCwgMHhjZiwgMHg0OCwgMHhkNiwgMHgyZSwgMHhiNCwgMHhmMSwgMHg1NiwgMHhmYSwgMHg5MSwKKwkweGY0LCAweGZmLCAweDI1LCAweDNlLCAweDM4LCAweGY0LCAweDExLCAweDkwLCAweGQzLCAweDA1LCAweDczLCAweDc1LAorCTB4NDIsIDB4YWYsIDB4N2IsIDB4MGEsIDB4MTUsIDB4ZjQsIDB4YTUsIDB4MmYsIDB4NGQsIDB4NTUsIDB4OTMsIDB4OWEsCisJMHg1OCwgMHgzMiwgMHg3NCwgMHgyZCwgMHhhYSwgMHhhOSwgMHg1NywgMHhhZCwgMHgzNSwgMHgxOCwgMHg4YSwgMHg3MywKKwkweDM5LCAweDM5LCAweDQ2LCAweGU1LCAweDBlLCAweGFlLCAweDVmLCAweDIzLCAweDY2LCAweDM4LCAweGU4LCAweDMyLAorCTB4MjYsIDB4ZWYsIDB4YmIsIDB4OGUsIDB4ZmIsIDB4MGUsIDB4ZmQsIDB4NjksIDB4NzUsIDB4ODYsIDB4MDMsIDB4ZDEsCisJMHg5ZiwgMHg2ZCwgMHg3NywgMHhkNiwgMHhiMSwgMHhhNCwgMHg5NiwgMHhiZCwgMHgzNywgMHhmNCwgMHg0NiwgMHgzNCwKKwkweDU2LCAweDJkLCAweDNkLCAweGE1LCAweDkzLCAweDA4LCAweDUyLCAweDJmLCAweDc3LCAweGNiLCAweDE1LCAweDRjLAorCTB4YmMsIDB4NDUsIDB4NGMsIDB4YjksIDB4OWEsIDB4MTQsIDB4YmUsIDB4MjQsIDB4M2MsIDB4YTksIDB4OGIsIDB4MzEsCisJMHhhOSwgMHg4NCwgMHgzYywgMHg0MSwgMHhjMywgMHg0ZSwgMHg3MiwgMHg3OSwgMHg1ZiwgMHg3YywgMHg4YSwgMHhiOSwKKwkweGNhLCAweDU3LCAweGM5LCAweGQ1LCAweDRhLCAweDM5LCAweDhkLCAweGMxLCAweGU3LCAweGI1LCAweDYyLCAweDBmLAorCTB4N2QsIDB4YjMsIDB4NDAsIDB4NWIsIDB4OGMsIDB4MzUsIDB4ZTQsIDB4NDEsIDB4MGUsIDB4OGQsIDB4YTEsIDB4ZTQsCisJMHgwOSwgMHg4OSwgMHgyNywgMHg0MCwgMHg2ZCwgMHg1YywgMHg5NSwgMHg3ZSwgMHhjZiwgMHhmYSwgMHg5ZiwgMHhlMSwKKwkweDdlLCAweGI0LCAweDU3LCAweGI5LCAweDIwLCAweDNkLCAweDlhLCAweDM3LCAweGQxLCAweDg0LCAweGQ0LCAweGQ3LAorCTB4YWQsIDB4ZGUsIDB4MzAsIDB4ZGMsIDB4NjEsIDB4Y2QsIDB4YjgsIDB4ODgsIDB4NDUsIDB4MTYsIDB4MjMsIDB4MmYsCisJMHgwYywgMHg4YiwgMHgzYywgMHg5NSwgMHhkNCwgMHhiZiwgMHg4YSwgMHg3NywgMHhhOSwgMHhkNywgMHgyYiwgMHg1MSwKKwkweGRmLCAweGNjLCAweDgzLCAweGE4LCAweDNmLCAweDczLCAweGM1LCAweDJlLCAweGZkLCAweDJiLCAweGI5LCAweDNmLAorCTB4MDgsIDB4OGQsIDB4ZjMsIDB4N2QsIDB4MWEsIDB4MGQsIDB4NjEsIDB4NDAsIDB4OTUsIDB4ZWYsIDB4YzIsIDB4MWIsCisJMHg1YiwgMHhkMSwgMHgzZCwgMHgyMiwgMHgzMiwgMHg5OCwgMHg2NiwgMHgzOSwgMHhmMSwgMHhmMSwgMHgwOSwgMHhlYiwKKwkweGY5LCAweGYyLCAweGVjLCAweDNiLCAweGYzLCAweDBlLCAweGFmLCAweDZhLCAweDIwLCAweDk3LCAweDdiLCAweDRjLAorCTB4ZTMsIDB4NjgsIDB4ZDIsIDB4MDMsIDB4YzcsIDB4ZjIsIDB4ZmYsIDB4NDEsIDB4M2QsIDB4NGMsIDB4NjMsIDB4MzQsCisJMHhhNSwgMHg5MSwgMHg1MywgMHgxNiwgMHhjMSwgMHg1MywgMHgxNSwgMHg0NCwgMHgzZiwgMHhlMywgMHg3OCwgMHg4YywKKwkweGY3LCAweGE3LCAweDYzLCAweDQ1LCAweDMwLCAweGFhLCAweDMyLCAweGNmLCAweGZjLCAweDZhLCAweGZjLCAweGJhLAorCTB4MzksIDB4ZjUsIDB4YjgsIDB4Y2MsIDB4MjksIDB4ZGYsIDB4N2YsIDB4Y2UsIDB4MzEsIDB4NzMsIDB4ZTUsIDB4ZDgsCisJMHgyMywgMHgzNiwgMHhjNywgMHhhZSwgMHg5YSwgMHg1MywgMHhhZCwgMHhiMywgMHg3ZiwgMHgyZiwgMHhiMywgMHhjZSwKKwkweDEwLCAweDQ1LCAweDZjLCAweDU1LCAweDUyLCAweDZmLCAweGIxLCAweGY0LCAweGQyLCAweDRkLCAweGJkLCAweGNjLAorCTB4ZDEsIDB4ZGUsIDB4MzYsIDB4MWYsIDB4YjMsIDB4ZTQsIDB4OWEsIDB4YWEsIDB4MTYsIDB4OWUsIDB4NWYsIDB4MWIsCisJMHhmZiwgMHhiYywgMHg1YSwgMHhlYSwgMHhhNSwgMHgxMiwgMHhjMywgMHg1YywgMHg2MSwgMHhhZCwgMHhmMSwgMHgwYywKKwkweGZlLCAweGQxLCAweGJjLCAweDc0LCAweGRiLCAweDNjLCAweDE1LCAweGJjLCAweDI2LCAweGYxLCAweGU4LCAweDUyLAorCTB4YjYsIDB4MWYsIDB4ZWQsIDB4Y2UsIDB4ZTYsIDB4MDIsIDB4ZDMsIDB4MzgsIDB4OTksIDB4OTQsIDB4NTgsIDB4ZTAsCisJMHhjMSwgMHgwNiwgMHhhOSwgMHg0MywgMHhhOSwgMHhkZSwgMHgzZSwgMHgwMywgMHg1MywgMHhlNCwgMHg3ZSwgMHhlZiwKKwkweDUwLCAweGY3LCAweDRjLCAweDgwLCAweGZjLCAweDUzLCAweGU0LCAweDdmLCAweGIzLCAweGUzLCAweDU1LCAweDA0LAorCTB4YTksIDB4NGEsIDB4ZTksIDB4MjksIDB4MDgsIDB4OWUsIDB4NGUsIDB4NjMsIDB4NTcsIDB4ZjIsIDB4NzUsIDB4ZTIsCisJMHhkYSwgMHhjNywgMHhlNCwgMHg0MywgMHg1ZCwgMHhlNCwgMHhkYSwgMHhkMywgMHhlOCwgMHg0OSwgMHgzNSwgMHhlMywKKwkweGU1LCAweGZkLCAweDJkLCAweGM0LCAweDE4LCAweGMxLCAweDRhLCAweGRmLCAweDk5LCAweGNiLCAweGY2LCAweDY2LAorCTB4MWMsIDB4MWMsIDB4NGIsIDB4MjMsIDB4NzUsIDB4NTgsIDB4NjIsIDB4YTQsIDB4OWMsIDB4YzcsIDB4OTIsIDB4ZjgsCisJMHhhOCwgMHgyMSwgMHg5YSwgMHgzOCwgMHgwZCwgMHg4MywgMHg3ZiwgMHhmNywgMHgyNCwgMHhiNiwgMHgyMSwgMHg3MiwKKwkweGY4LCAweDZkLCAweDcyLCAweGZjLCAweDY5LCAweGFjLCAweDFlLCAweGQwLCAweGQ2LCAweDFmLCAweGMxLCAweDM0LAorCTB4ZDYsIDB4MzIsIDB4N2UsIDB4MjYsIDB4MTMsIDB4MmQsIDB4OWMsIDB4YmYsIDB4MTksIDB4YmQsIDB4ZmIsIDB4YmQsCisJMHgwMSwgMHg4NywgMHg2ZCwgMHgwZSwgMHg2MywgMHg5NCwgMHgwNywgMHgzYiwgMHgyNywgMHgyMywgMHgzMCwgMHg0NiwKKwkweGU0LCAweDhjLCAweDgxLCAweDBiLCAweGMxLCAweGI4LCAweDQ3LCAweGY5LCAweDkwLCAweDNjLCAweGI5LCAweDNlLAorCTB4ZWUsIDB4NjUsIDB4N2UsIDB4ZTYsIDB4MzUsIDB4ZDYsIDB4MmEsIDB4M2UsIDB4NGYsIDB4OWUsIDB4NGQsIDB4ZmEsCisJMHg1OSwgMHg3MywgMHg3MCwgMHg0NiwgMHg1NywgMHg1MCwgMHg3MCwgMHhiZiwgMHg4MiwgMHgxMCwgMHg2MywgMHg5NywKKwkweGE3LCAweDlhLCAweDMxLCAweDY1LCAweDQ0LCAweDQ3LCAweGVmLCAweDEwLCAweGQ3LCAweDdiLCAweDczLCAweGRmLAorCTB4NjQsIDB4YmYsIDB4MWUsIDB4ZTEsIDB4N2MsIDB4YjIsIDB4NzcsIDB4MmQsIDB4ZTgsIDB4OWQsIDB4ZjQsIDB4NzUsCisJMHg5YywgMHg4MSwgMHhkYiwgMHhlMiwgMHg1YywgMHhiZCwgMHg0MywgMHhiOSwgMHg3YiwgMHg1MCwgMHhmYywgMHg3MSwKKwkweDgzLCAweDM3LCAweDMwLCAweDQ3LCAweDkxLCAweDdiLCAweDc3LCAweDEwLCAweGJmLCAweDY2LCAweGRmLCAweDZmLAorCTB4MjgsIDB4YzksIDB4ZTUsIDB4ZTQsIDB4YTUsIDB4MzYsIDB4ZjEsIDB4OGIsIDB4NmUsIDB4Y2IsIDB4NWYsIDB4NDQsCisJMHgxNywgMHhiZCwgMHhjOSwgMHgwOCwgMHg2ZCwgMHhmYSwgMHhjNywgMHg2NiwgMHhhYSwgMHhiNSwgMHg5NSwgMHg3MiwKKwkweDM2LCAweDQ4LCAweGFmLCAweGM3LCAweGUyLCAweDI2LCAweGU3LCAweGE1LCAweGVlLCAweGU2LCAweDk0LCAweGQ4LAorCTB4ZGQsIDB4ZGQsIDB4ZWUsIDB4YTIsIDB4M2QsIDB4ZTUsIDB4MTMsIDB4OWYsIDB4MGEsIDB4MjYsIDB4NWMsIDB4NzAsCisJMHgxZCwgMHgyOSwgMHg0MiwgMHhmZSwgMHhiMCwgMHhmMCwgMHgzNCwgMHhhOCwgMHhhNSwgMHhjYywgMHhmYiwgMHhlNSwKKwkweDNjLCAweGMzLCAweDMwLCAweDZkLCAweGQ0LCAweDM2LCAweDQxLCAweDFmLCAweDhiLCAweGJhLCAweGIxLCAweDY4LAorCTB4YzIsIDB4OGQsIDB4MWYsIDB4MTEsIDB4MDMsIDB4NmEsIDB4MjYsIDB4MzQsIDB4MWMsIDB4MjcsIDB4MDYsIDB4YjgsCisJMHgyNywgMHgwMiwgMHg5OCwgMHgyNCwgMHgwNiwgMHhjYywgMHhjOSwgMHhkNiwgMHgzZSwgMHhkZSwgMHg0YywgMHhjZiwKKwkweDlmLCAweDhiLCAweDQyLCAweDc5LCAweDk2LCAweGU4LCAweDMxLCAweGI3LCAweGFmLCAweGIyLCAweGE3LCAweDJkLAorCTB4YzQsIDB4M2QsIDB4ZDksIDB4ZGYsIDB4MDAsIDB4NzYsIDB4MGYsIDB4YTUsIDB4YjEsIDB4NmEsIDB4OWYsIDB4ODksCisJMHg5ZiwgMHhlYiwgMHhmNSwgMHhlZSwgMHgwMiwgMHg0NSwgMHhmMiwgMHgwNCwgMHgxMywgMHg2OSwgMHg1ZCwgMHhjZSwKKwkweDRkLCAweDdhLCAweGQ3LCAweGNiLCAweGI5LCAweGUyLCAweGY2LCAweDRhLCAweDEzLCAweDc5LCAweDIxLCAweGFmLAorCTB4NGUsIDB4YjQsIDB4NWYsIDB4NWYsIDB4YTAsIDB4NDgsIDB4ZGMsIDB4YWEsIDB4ZjcsIDB4NmMsIDB4YzEsIDB4N2MsCisJMHg2NCwgMHg3YSwgMHg2NSwgMHgwZiwgMHg2MiwgMHg4YiwgMHhhYSwgMHhkMCwgMHgxZiwgMHg1YiwgMHhiMCwgMHhhNywKKwkweGNjLCAweDcwLCAweDVkLCAweDZiLCAweDMwLCAweGNkLCAweDRkLCAweGExLCAweGRmLCAweDU2LCAweDU5LCAweGI1LAorCTB4NjUsIDB4ZGIsIDB4MWYsIDB4NzEsIDB4ZWQsIDB4NmQsIDB4NWMsIDB4YjcsIDB4YWMsIDB4YmQsIDB4MDMsIDB4YjEsCisJMHhiZCwgMHgwYSwgMHhkMiwgMHhmZSwgMHgwZSwgMHg0NCwgMHg0NywgMHgzYiwgMHhkMCwgMHhiZiwgMHg1NywgMHgzMCwKKwkweGExLCAweDhmLCAweDk4LCAweDYwLCAweDc2LCAweDNkLCAweDFiLCAweDdhLCAweDBjLCAweDU3LCAweDJkLCAweDE2LAorCTB4MjAsIDB4NjMsIDB4YmMsIDB4MDEsIDB4OGYsIDB4NmQsIDB4ZjYsIDB4M2UsIDB4ZTQsIDB4NTMsIDB4ZmUsIDB4OGMsCisJMHhlZiwgMHgzNCwgMHgwZiwgMHgwOCwgMHhhNywgMHhmNiwgMHhmNywgMHhmNSwgMHg3MiwgMHhmZiwgMHgxZiwgMHgzZiwKKwkweDI0LCAweGYxLCAweGM2LCAweDM0LCAweGZiLCAweGM4LCAweDU5LCAweDUxLCAweDI2LCAweDZiLCAweGQwLCAweGE0LAorCTB4M2UsIDB4ZmUsIDB4NzEsIDB4OGQsIDB4ZTYsIDB4OWIsIDB4ZTksIDB4NjcsIDB4NmMsIDB4YmYsIDB4YjgsIDB4YWYsCisJMHg3ZSwgMHhjYiwgMHgxNiwgMHhlMSwgMHgzMSwgMHhjYiwgMHg4NCwgMHhkYiwgMHhhNSwgMHg3MSwgMHhlMSwgMHhmMCwKKwkweDdkLCAweDQ4LCAweDNkLCAweGNlLCAweGY1LCAweDcwLCAweGFmLCAweDljLCAweGYxLCAweDJmLCAweDRjLCAweGUxLAorCTB4NzIsIDB4NzYsIDB4NGQsIDB4NTMsIDB4OGYsIDB4MTIsIDB4ZmIsIDB4NmMsIDB4MTMsIDB4N2UsIDB4ZjQsIDB4OTQsCisJMHhjMSwgMHhiOCwgMHhkNiwgMHgyMCwgMHhjZiwgMHhiZiwgMHgyOSwgMHgzZiwgMHhkNywgMHhkYiwgMHg4YywgMHhmZSwKKwkweGZkLCAweGMyLCAweDM1LCAweDg0LCAweDk3LCAweGY5LCAweDhjLCAweDBmLCAweGQwLCAweDgyLCAweGU0LCAweDY0LAorCTB4ZTYsIDB4NTksIDB4ZDEsIDB4YzQsIDB4OWQsIDB4YjYsIDB4MjIsIDB4ZmIsIDB4N2UsIDB4MWEsIDB4YmIsIDB4NjksCisJMHg5NywgMHgyZSwgMHhjZSwgMHhjZiwgMHhmOCwgMHhjMiwgMHhmOSwgMHhiNCwgMHg0MCwgMHg4MSwgMHgzYywgMHg2ZiwKKwkweGUyLCAweGM3LCAweGU2LCAweDllLCAweDJhLCAweGQxLCAweDhkLCAweGNjLCAweDdmLCAweGJhLCAweDRhLCAweDMwLAorCTB4NjMsIDB4NTMsIDB4ZTgsIDB4MGYsIDB4YWQsIDB4ZjUsIDB4NzUsIDB4ZmUsIDB4ZjUsIDB4YjYsIDB4NjQsIDB4ZjQsCisJMHgyMSwgMHhmNywgMHg5ZSwgMHhmZSwgMHgzZCwgMHhmMiwgMHg1YywgMHhlMCwgMHg3ZCwgMHgyMiwgMHg1MywgMHgwNywKKwkweDc2LCAweGVmLCAweDg1LCAweDUxLCAweGE4LCAweDQ5LCAweGFmLCAweGEwLCAweDAzLCAweDdkLCAweGQ0LCAweGVmLAorCTB4Y2UsIDB4NjQsIDB4MDcsIDB4MGUsIDB4ZDIsIDB4NjcsIDB4ODcsIDB4ZjUsIDB4MTMsIDB4MzUsIDB4MzYsIDB4ZDQsCisJMHhjZCwgMHhkOCwgMHgzMSwgMHhmNSwgMHg5MywgMHg0NSwgMHhjNCwgMHhkMywgMHgyNSwgMHhjYiwgMHhmYywgMHhmNCwKKwkweGFmLCAweDBlLCAweGM0LCAweDUzLCAweDYzLCAweDczLCAweGFkLCAweDNlLCAweDlmLCAweDRkLCAweGUyLCAweDlmLAorCTB4ZTgsIDB4YTIsIDB4MTMsIDB4ODUsIDB4MDMsIDB4YTcsIDB4ZTEsIDB4MWMsIDB4ZTgsIDB4NDQsIDB4ODEsIDB4YmYsCisJMHgwOSwgMHgwZiwgMHg4NywgMHgyZSwgMHg5OSwgMHg1NywgMHgzNSwgMHg4NywgMHhmYiwgMHgyNCwgMHhmNSwgMHg3MywKKwkweDIyLCAweDU4LCAweGMzLCAweDdjLCAweDkyLCAweDM5LCAweGNjLCAweGM4LCAweDNjLCAweGZhLCAweDdlLCAweDAzLAorCTB4ZjksIDB4YWUsIDB4ZjQsIDB4ZjQsIDB4NmQsIDB4NTgsIDB4YmIsIDB4NWMsIDB4NzIsIDB4NzUsIDB4ODUsIDB4YjYsCisJMHg1ZCwgMHhjZCwgMHg1YywgMHg1MywgMHg1MywgMHg5ZiwgMHhiNywgMHhjZSwgMHg1ZiwgMHg5MCwgMHg4NywgMHg1NSwKKwkweDdhLCAweGYwLCAweDhjLCAweDc1LCAweGVlLCAweDQwLCAweGFlLCAweDZmLCAweDY3LCAweDhlLCAweGIwLCAweDFkLAorCTB4MzUsIDB4MzEsIDB4YzMsIDB4MTQsIDB4N2QsIDB4OWYsIDB4NDQsIDB4ZTQsIDB4MjUsIDB4MWIsIDB4ZTUsIDB4NjgsCisJMHg1YywgMHhlNiwgMHhkZiwgMHgzMiwgMHhhMywgMHg4OCwgMHg0ZCwgMHhmYiwgMHhkYiwgMHgyNywgMHgxNCwgMHhkZCwKKwkweGY1LCAweGM4LCAweGI4LCAweDgyLCAweGMwLCAweDAwLCAweGU3LCAweDBhLCAweGZkLCAweGY1LCAweGRjLCAweDRjLAorCTB4N2QsIDB4MmMsIDB4YzcsIDB4ZjksIDB4YjYsIDB4OTMsIDB4MjcsIDB4NmMsIDB4NDcsIDB4MDksIDB4YzcsIDB4YmIsCisJMHgzNSwgMHhjMSwgMHg4NiwgMHhjOCwgMHg0YSwgMHhlOSwgMHhhNSwgMHhhNCwgMHg0MywgMHhmZSwgMHhkNiwgMHg2MiwKKwkweDQ1LCAweGY4LCAweDkwLCAweGJmLCAweDcxLCAweGFkLCAweDIyLCAweGRjLCAweDQ1LCAweGM2LCAweGU5LCAweGFlLAorCTB4YmEsIDB4ZjEsIDB4OGIsIDB4ZDksIDB4OWUsIDB4NTcsIDB4MDMsIDB4ZjEsIDB4YzEsIDB4NjMsIDB4OWQsIDB4ODUsCisJMHg3YywgMHhlZCwgMHhlNiwgMHg3OSwgMHg4OSwgMHg0YywgMHhiZCwgMHhkYSwgMHgxOSwgMHg5NywgMHhiYywgMHhlMiwKKwkweDU4LCAweDY4LCAweDU1LCAweGI0LCAweDkxLCAweDU4LCAweDY3LCAweDM2LCAweDhkLCAweGQxLCAweGVlLCAweDJmLAorCTB4YTMsIDB4MTIsIDB4ZmYsIDB4MzMsIDB4MmEsIDB4YjgsIDB4ZTYsIDB4YzEsIDB4ZmYsIDB4OGEsIDB4ZTYsIDB4NGIsCisJMHhiZSwgMHg5YywgMHg5MiwgMHg3YSwgMHhlNCwgMHhiOSwgMHhhNCwgMHg2MSwgMHg1MiwgMHhhZiwgMHgyZCwgMHg2YiwKKwkweDY5LCAweDRiLCAweDgxLCAweDUwLCAweDMxLCAweDUwLCAweGQ1LCAweGZkLCAweDhjLCAweGQzLCAweGNhLCAweGRmLAorCTB4NGIsIDB4NTAsIDB4YzYsIDB4MTgsIDB4MzAsIDB4MzAsIDB4ZjIsIDB4ZmIsIDB4NmEsIDB4YWYsIDB4YzQsIDB4ZTEsCisJMHg0MiwgMHhhOSwgMHg4MSwgMHhkYSwgMHhiMSwgMHgzMywgMHhmNCwgMHgyZiwgMHg2NiwgMHgyYSwgMHg3YiwgMHg3NiwKKwkweGY1LCAweGMyLCAweDVlLCAweGIxLCAweGQzLCAweDAwLCAweGYyLCAweGUzLCAweDE3LCAweDY5LCAweDkzLCAweDJhLAorCTB4Y2UsIDB4NDcsIDB4N2QsIDB4ZmEsIDB4M2EsIDB4ZGIsIDB4MzcsIDB4NjgsIDB4ZmYsIDB4OGIsIDB4NmUsIDB4YzMsCisJMHhlZSwgMHg0NSwgMHhkYSwgMHhhMywgMHg3OCwgMHhkYSwgMHhjMiwgMHhlZSwgMHgzMCwgMHg3YSwgMHgxOCwgMHgxYiwKKwkweGM4LCAweGUzLCAweDBlLCAweDNjLCAweDYzLCAweDUzLCAweDUxLCAweDEwLCAweGYzLCAweGE5LCAweDNlLCAweGU2LAorCTB4ZGIsIDB4M2QsIDB4N2MsIDB4ODYsIDB4NzAsIDB4Y2MsIDB4MGEsIDB4NzIsIDB4YzAsIDB4NjcsIDB4YTMsIDB4ZjUsCisJMHg5ZSwgMHg1ZiwgMHg2MywgMHgwMywgMHhmZCwgMHg1MSwgMHg5ZSwgMHgyMSwgMHg2YiwgMHhkMiwgMHg1MCwgMHhjYywKKwkweGJjLCAweGYyLCAweDE0LCAweGQ3LCAweGIxLCAweGIzLCAweDJjLCAweGYzLCAweGRjLCAweGQyLCAweGVjLCAweGRjLAorCTB4ZjEsIDB4MTEsIDB4ZTEsIDB4NWYsIDB4MmIsIDB4YjAsIDB4Y2UsIDB4OWEsIDB4M2IsIDB4NjgsIDB4ZjksIDB4ZTYsCisJMHgwMSwgMHgzOSwgMHg1YiwgMHg1ZSwgMHhhNywgMHgyMSwgMHg5MSwgMHg2ZSwgMHhjNiwgMHhiNiwgMHhmMiwgMHgwNSwKKwkweDM4LCAweDk4LCAweGQ4LCAweDhlLCAweGE1LCAweGU0LCAweGMxLCAweDRmLCAweDk2LCAweDFiLCAweDhjLCAweDhkLAorCTB4YzQsIDB4YTEsIDB4YjgsIDB4YTYsIDB4ZGUsIDB4YTcsIDB4M2MsIDB4OTAsIDB4ZWQsIDB4M2YsIDB4NTQsIDB4YzIsCisJMHgxMSwgMHg5NywgMHg5OCwgMHg5NywgMHg4NywgMHg0MSwgMHg3NSwgMHgzZSwgMHg4YSwgMHhhYywgMHgzMywgMHg3ZiwKKwkweDk5LCAweGI5LCAweGZiLCAweDQ3LCAweGJjLCAweGQ5LCAweDM4LCAweDQ4LCAweGQ0LCAweDg4LCAweDViLCAweGU3LAorCTB4MmQsIDB4MDIsIDB4MmYsIDB4OTAsIDB4NGIsIDB4YTQsIDB4MTgsIDB4MDEsIDB4ZjMsIDB4YzIsIDB4NWEsIDB4NmEsCisJMHgzMywgMHgwYSwgMHg2MCwgMHg1NCwgMHgwYiwgMHgyNiwgMHhjYSwgMHg5OCwgMHg3OSwgMHg3NywgMHhjOCwgMHg1NCwKKwkweDllLCAweDk1LCAweDI5LCAweDc3LCAweDNkLCAweGM1LCAweDZiLCAweDYyLCAweDViLCAweGMyLCAweDJmLCAweGU0LAorCTB4ZjcsIDB4NDIsIDB4YjQsIDB4ZDIsIDB4OWUsIDB4MmEsIDB4MjksIDB4NzMsIDB4YzIsIDB4M2EsIDB4YjcsIDB4ZTksCisJMHhkNSwgMHgwZCwgMHg1YiwgMHgwMywgMHgzZSwgMHhkYiwgMHg5NywgMHhiMSwgMHhjMSwgMHhmNSwgMHhiNSwgMHhkYywKKwkweGZmLCAweGQyLCAweDA2LCAweGNjLCAweDFjLCAweDk2LCAweDc4LCAweGY2LCAweGZiLCAweGNmLCAweDUyLCAweDE4LAorCTB4MzcsIDB4Y2YsIDB4NTIsIDB4ODgsIDB4NWUsIDB4YmQsIDB4NjcsIDB4ZGUsIDB4NDUsIDB4ZmQsIDB4ZDQsIDB4NTMsCisJMHhiNiwgMHhhMywgMHgyNiwgMHgyYSwgMHg0NCwgMHhjNywgMHg5YiwgMHhkZCwgMHg5MiwgMHg4NywgMHhkYSwgMHhjOCwKKwkweDIzLCAweDhjLCAweDc0LCAweGQyLCAweDJkLCAweGIxLCAweGQyLCAweDExLCAweDA3LCAweDE2LCAweGM1LCAweDBkLAorCTB4ZTQsIDB4ODcsIDB4YjUsIDB4MDMsIDB4ZDcsIDB4ZWMsIDB4MzcsIDB4Y2MsIDB4ZjYsIDB4ZWEsIDB4NzksIDB4Y2MsCisJMHgwMywgMHg2ZiwgMHhhZCwgMHhiOSwgMHg4ZiwgMHhiMiwgMHhkYiwgMHhiNSwgMHgxZiwgMHg5YiwgMHgwZiwgMHg1NiwKKwkweDhhLCAweDhjLCAweDNmLCAweDcyLCAweDY3LCAweGVhLCAweGNjLCAweDBiLCAweGE5LCAweDk3LCAweDljLCAweDRlLAorCTB4NGMsIDB4ZGEsIDB4Y2YsIDB4ZGYsIDB4OTgsIDB4NWYsIDB4YmIsIDB4ZWQsIDB4YmEsIDB4ZjAsIDB4MTksIDB4YjEsCisJMHhkMywgMHhkOSwgMHg2NywgMHhkYiwgMHhjNCwgMHg2NiwgMHgzZCwgMHhiNCwgMHhkMywgMHg2OSwgMHg4YywgMHgyNSwKKwkweDFiLCAweDMwLCAweDkwLCAweDEwLCAweDFkLCAweDQ3LCAweDcwLCAweDk5LCAweGZjLCAweGIwLCAweDc2LCAweDcwLAorCTB4MWEsIDB4YzMsIDB4ZTQsIDB4ODcsIDB4YmUsIDB4YjgsIDB4ZjcsIDB4MDAsIDB4MzUsIDB4ODksIDB4NmQsIDB4NmEsCisJMHg5MywgMHhjNSwgMHg5MywgMHg1YywgMHg1YSwgMHg0ZSwgMHg4NiwgMHhhZiwgMHg1YSwgMHg3YSwgMHg5NywgMHgxOCwKKwkweGIzLCAweDg3LCAweGViLCAweGJkLCAweDk3LCAweDNjLCAweGE5LCAweDM5LCAweDk2LCAweDBmLCAweGFkLCAweGFjLAorCTB4MTQsIDB4YzUsIDB4OWEsIDB4ZjQsIDB4MmIsIDB4MzIsIDB4ZjcsIDB4NDUsIDB4MjksIDB4NGIsIDB4OTEsIDB4ZTYsCisJMHhjMywgMHg1YSwgMHhlYiwgMHg1ZSwgMHg4ZiwgMHg3NSwgMHhhZSwgMHhjMSwgMHg1MSwgMHgyZSwgMHgzMSwgMHg1OCwKKwkweGUyLCAweDJlLCAweGY5LCAweGY3LCAweDcyLCAweDg5LCAweGJiLCAweDYxLCAweGNhLCAweGI2LCAweDk4LCAweDdiLAorCTB4YjYsIDB4MTQsIDB4ZWUsIDB4MDcsIDB4M2MsIDB4YTgsIDB4NzksIDB4ODAsIDB4MzEsIDB4NzIsIDB4ODksIDB4ODIsCisJMHhmMiwgMHgyNSwgMHg3ZSwgMHg2MywgMHhhOSwgMHhhZCwgMHgxOSwgMHhhOCwgMHhkNiwgMHg4OCwgMHgzZiwgMHg2ZSwKKwkweGIzLCAweDI3LCAweGYxLCAweDNiLCAweGNlLCAweGQxLCAweDAxLCAweDczLCAweDZmLCAweDIxLCAweDM2LCAweGVjLAorCTB4OWQsIDB4NDMsIDB4NWIsIDB4ZjUsIDB4NDgsIDB4N2QsIDB4ZGQsIDB4ZTUsIDB4MGEsIDB4NDcsIDB4NDMsIDB4YWUsCisJMHg1OCwgMHhiZCwgMHhlZSwgMHg1NCwgMHgxNiwgMHgzMywgMHgxZSwgMHhjYiwgMHhmZSwgMHhjOSwgMHhmMywgMHhiZiwKKwkweDcyLCAweDFiLCAweDVmLCAweGFhLCAweDYwLCAweDdjLCAweDdiLCAweGQyLCAweDkyLCAweDQxLCAweDZhLCAweGMwLAorCTB4MzIsIDB4ZWUsIDB4ZGYsIDB4ZWUsIDB4ZDMsIDB4ZDQsIDB4Y2QsIDB4N2QsIDB4YmEsIDB4MGYsIDB4OGUsIDB4MjcsCisJMHgyYSwgMHhjOSwgMHhiZiwgMHhlZSwgMHgxZSwgMHg0MywgMHgwYSwgMHgxOCwgMHg0MywgMHhlZSwgMHg4ZCwgMHg5OSwKKwkweDVkLCAweDViLCAweDQzLCAweDQ1LCAweDUyLCAweDE3LCAweGIyLCAweDYyLCAweDQ4LCAweGJiLCAweDhkLCAweDM4LAorCTB4NWEsIDB4MmEsIDB4NzYsIDB4ZTEsIDB4YWIsIDB4MjEsIDB4YzYsIDB4ZTksIDB4OTksIDB4ZGYsIDB4YzQsIDB4M2UsCisJMHhhYywgMHgzYSwgMHg1ZSwgMHhmNiwgMHhiNywgMHgwZSwgMHhlYywgMHgyMiwgMHg2NiwgMHhjYSwgMHhkOSwgMHg2ZSwKKwkweGE3LCAweGE2LCAweGQxLCAweGZmLCAweDNiLCAweGQwLCAweGMzLCAweDM5LCAweDVmLCAweDI2LCAweDZlLCAweDBlLAorCTB4MTAsIDB4MzcsIDB4NmYsIDB4MmMsIDB4M2IsIDB4ZjEsIDB4OTMsIDB4MWEsIDB4ZDQsIDB4ZDEsIDB4MDgsIDB4YTYsCisJMHhmZSwgMHg1YiwgMHhiOSwgMHhlMCwgMHhlNiwgMHg1MiwgMHg3ZiwgMHhjNywgMHgyNywgMHgxNiwgMHg2ZSwgMHhjYSwKKwkweGRjLCAweDMyLCAweGRmLCAweGVjLCAweGI5LCAweDE3LCAweGYyLCAweGRmLCAweDg1LCAweDUyLCAweDRiLCAweDM0LAorCTB4OWQsIDB4ZGEsIDB4ZmYsIDB4MzYsIDB4NzcsIDB4NTYsIDB4OGEsIDB4YWMsIDB4NzcsIDB4OTMsIDB4NDMsIDB4YjAsCisJMHg3NiwgMHg3NiwgMHg0ZiwgMHg3ZSwgMHg5YSwgMHg5OCwgMHg2YiwgMHhlNSwgMHgwOCwgMHg4YywgMHhiOSwgMHgxMSwKKwkweGFjLCAweDU5LCAweGFlLCAweGUyLCAweDZhLCAweDc0LCAweDFhLCAweDA1LCAweDg3LCAweDcyLCAweGY4LCAweDY0LAorCTB4MzYsIDB4OWQsIDB4MjIsIDB4MzYsIDB4MGQsIDB4NDMsIDB4ZjAsIDB4YTgsIDB4OTEsIDB4ZmIsIDB4NjIsIDB4ZDAsCisJMHg0ZiwgMHg0YSwgMHgzMCwgMHg5MSwgMHhkNCwgMHg4OCwgMHg5OSwgMHgyNiwgMHhmYSwgMHg0MywgMHgyZSwgMHg3MiwKKwkweGRiLCAweGVlLCAweDkzLCAweDc5LCAweDU2LCAweDljLCAweDI4LCAweDIxLCAweDg2LCAweGU3LCAweDc4LCAweGI3LAorCTB4NzAsIDB4NmUsIDB4YzEsIDB4MWYsIDB4ZTYsIDB4MTgsIDB4MjMsIDB4NzYsIDB4ZTQsIDB4MmQsIDB4OTMsIDB4YmMsCisJMHhlMiwgMHg3MywgMHhmMywgMHg0MiwgMHg5YiwgMHhkYywgMHhiNywgMHgwMCwgMHhjMywgMHg3YiwgMHhjNSwgMHhmZSwKKwkweDdjLCAweGE4LCAweGQxLCAweDJlLCAweDMyLCAweGNmLCAweDAwLCAweGRlLCAweDhmLCAweGRhLCAweGVlLCAweDcxLAorCTB4OTEsIDB4MWIsIDB4NzcsIDB4ZTksIDB4Y2IsIDB4NzEsIDB4YTMsIDB4YTIsIDB4ODcsIDB4M2UsIDB4ZWYsIDB4ZTYsCisJMHg2ZiwgMHg1MywgMHgzOCwgMHgxMiwgMHg3NSwgMHgyMSwgMHhjZiwgMHhkMiwgMHg2OSwgMHgyOSwgMHhkNywgMHg5MCwKKwkweGIxLCAweGExLCAweDlkLCAweGI0LCAweGExLCAweDdjLCAweGU2LCAweDZmLCAweDBmLCAweDViLCAweGJlLCAweDJhLAorCTB4ZjMsIDB4NGMsIDB4ZTMsIDB4MTUsIDB4NzIsIDB4NWEsIDB4NmQsIDB4YjksIDB4ZjAsIDB4ZDksIDB4MjAsIDB4ZTMsCisJMHg2MiwgMHgwOSwgMHhlMiwgMHgwMywgMHg1ZCwgMHgzOCwgMHgxZiwgMHgyYSwgMHg0MSwgMHhlYywgMHg5MCwgMHhmOCwKKwkweGQ4LCAweDAyLCAweGMxLCAweDUyLCAweDNlLCAweGI3LCAweDkxLCAweDNhLCAweDUxLCAweDg5LCAweDM1LCAweGY1LAorCTB4OWQsIDB4NzYsIDB4N2IsIDB4MDksIDB4MmUsIDB4OTUsIDB4MzEsIDB4YWYsIDB4YjUsIDB4ZGUsIDB4ZTMsIDB4NjksCisJMHhjNSwgMHhjMSwgMHhhYywgMHg1ZCwgMHhhOCwgMHhiNCwgMHg4YiwgMHhkNiwgMHg5YiwgMHgzYywgMHgzYSwgMHhiNywKKwkweDk2LCAweDljLCAweGNmLCAweDY2LCAweGZhLCAweGUxLCAweGJkLCAweGU0LCAweDM2LCAweDJmLCAweDRiLCAweGZkLAorCTB4YzgsIDB4ZTYsIDB4NjMsIDB4MmMsIDB4NjEsIDB4Y2UsIDB4MzQsIDB4MjksIDB4ZmEsIDB4ZmQsIDB4ZWIsIDB4YjksCisJMHgxOSwgMHhhYywgMHg3OCwgMHhhNSwgMHgyNiwgMHg3MywgMHg3NiwgMHgyNSwgMHhhNywgMHhmNywgMHhkYywgMHg3NywKKwkweDZkLCAweDdkLCAweGExLCAweGYyLCAweDBiLCAweDczLCAweDZiLCAweDk1LCAweGM4LCAweDc3LCAweDlkLCAweDc5LAorCTB4ZGEsIDB4NzcsIDB4ZjksIDB4ZmIsIDB4MmEsIDB4ZjQsIDB4OGUsIDB4Y2MsIDB4OGUsIDB4MTUsIDB4ZTIsIDB4ODcsCisJMHg5ZSwgMHhkYiwgMHhjZSwgMHhkNSwgMHg5NSwgMHhjNSwgMHhlNSwgMHhkZCwgMHhhOSwgMHg2MywgMHhhMSwgMHg2NywKKwkweGI4LCAweDBmLCAweGZlLCAweGE1LCAweGY1LCAweDU2LCAweGRkLCAweDg1LCAweGRjLCAweDk3LCAweDc5LCAweDg5LAorCTB4NjAsIDB4YWMsIDB4YzEsIDB4MTgsIDB4NWYsIDB4ODIsIDB4OWYsIDB4MjYsIDB4MjUsIDB4ZTYsIDB4OWEsIDB4YzgsCisJMHhhNywgMHhmZCwgMHg1ZCwgMHhhYSwgMHhlYywgMHg3ZSwgMHhiZSwgMHhjYywgMHhlMiwgMHhkMiwgMHgyNSwgMHgyOCwKKwkweGE3LCAweGJkLCAweDBmLCAweDhlLCAweGRjLCAweGNkLCAweGI2LCAweDZmLCAweGM1LCAweDg1LCAweDc0LCAweDQ4LAorCTB4MjEsIDB4NGUsIDB4ZmMsIDB4OGIsIDB4ZDksIDB4ZmYsIDB4ZjUsIDB4Y2MsIDB4OTgsIDB4MGIsIDB4NDksIDB4MTcsCisJMHgzZSwgMHgwYSwgMHhiNSwgMHg2MywgMHhhYSwgMHgyYywgMHg4YywgMHhhMSwgMHg0NCwgMHgwMSwgMHhkYSwgMHhhYiwKKwkweGViLCAweGFjLCAweDc3LCAweDBhLCAweDZhLCAweGUyLCAweDFlLCAweDVjLCAweDhjLCAweDNhLCAweGQxLCAweDM4LAorCTB4ZDcsIDB4NjMsIDB4ZDUsIDB4ZDMsIDB4NmMsIDB4ZjQsIDB4ODUsIDB4NzcsIDB4YTIsIDB4MTEsIDB4Y2IsIDB4ZTcsCisJMHg2NiwgMHhjNywgMHg4YywgMHgzYywgMHg2ZCwgMHgxOSwgMHgxZSwgMHhjYSwgMHhlMiwgMHhmYSwgMHhjMSwgMHhjNCwKKwkweGU3LCAweGM0LCAweDlkLCAweDUyLCAweGEzLCAweDIyLCAweDVjLCAweDgyLCAweDdiLCAweDg3LCAweDBjLCAweGMxLAorCTB4NjQsIDB4YTMsIDB4MjQsIDB4YWMsIDB4Y2QsIDB4ZGMsIDB4YTcsIDB4OTQsIDB4YTAsIDB4NjksIDB4NDQsIDB4MzAsCisJMHg1ZSwgMHg3YywgMHgzNSwgMHg0ZCwgMHg1ZiwgMHg2ZCwgMHhlMywgMHgxZSwgMHg3NSwgMHhhMiwgMHg2ZSwgMHhiZiwKKwkweGE1LCAweDU3LCAweGQ1LCAweGFlLCAweDk4LCAweDVkLCAweDU3LCAweGY0LCAweDg4LCAweGNlLCAweDE4LCAweGQ3LAorCTB4ZjksIDB4MTAsIDB4ZWQsIDB4N2UsIDB4MjYsIDB4ZTQsIDB4NmQsIDB4YWYsIDB4YjAsIDB4NmIsIDB4MWQsIDB4ZWYsCisJMHgyOSwgMHg0MSwgMHg0YywgMHg4YywgMHgwMywgMHgwMywgMHg4NywgMHgwMywgMHhmOCwgMHgyMCwgMHgyMSwgMHg5YywKKwkweDNmLCAweDgwLCAweDVmLCAweDRkLCAweDA2LCAweGYxLCAweDJlLCAweDYzLCAweDUzLCAweDQxLCAweGRjLCAweDFiLAorCTB4NzksIDB4OGUsIDB4MzksIDB4ZGQsIDB4ZmIsIDB4ZmMsIDB4OWUsIDB4MWYsIDB4ZDcsIDB4NzEsIDB4OGQsIDB4ZmEsCisJMHg3MywgMHhjNiwgMHgxYiwgMHg3MCwgMHg2NSwgMHhmMiwgMHgwMSwgMHg1YywgMHhkZCwgMHhhZiwgMHhlMCwgMHg4NCwKKwkweGY2LCAweDAwLCAweDJlLCAweDhmLCAweDc1LCAweDYyLCAweGQ5LCAweDdlLCAweDM5LCAweDg3LCAweDc2LCAweDJjLAorCTB4YTQsIDB4MzIsIDB4MzYsIDB4M2MsIDB4NTMsIDB4NmIsIDB4NzYsIDB4YmQsIDB4YTgsIDB4ZDcsIDB4NDEsIDB4MmYsCisJMHhmNywgMHhlYSwgMHhlZCwgMHhjYywgMHg5OSwgMHgwNCwgMHhkMywgMHgyMywgMHgzNiwgMHhkOSwgMHgzMywgMHhkOSwKKwkweGJiLCAweDRlLCAweDVjLCAweGI1LCAweDcwLCAweGZjLCAweGVlLCAweGQ4LCAweDcwLCAweDBiLCAweGMzLCAweGU1LAorCTB4MzksIDB4ODIsIDB4MjcsIDB4MGIsIDB4ZjEsIDB4N2QsIDB4MjYsIDB4YWIsIDB4M2QsIDB4YmMsIDB4Y2YsIDB4NDUsCisJMHhlYywgMHg3YiwgMHgzNiwgMHg1YSwgMHg4MCwgMHhmYywgMHhhYSwgMHg1MiwgMHgyYiwgMHg5NywgMHgyOSwgMHg4YywKKwkweDA3LCAweDcwLCAweDk2LCAweGJhLCAweDViLCAweDUzLCAweGU1LCAweGU1LCAweDc3LCAweDg5LCAweGJiLCAweDQxLAorCTB4ZTYsIDB4MmQsIDB4MTUsIDB4ZjgsIDB4ZTAsIDB4YjYsIDB4NzgsIDB4ZmIsIDB4N2QsIDB4ZjMsIDB4NDksIDB4MGIsCisJMHg5ZiwgMHhlYiwgMHhlNywgMHgwOSwgMHhmZiwgMHg3YSwgMHgzZCwgMHhmMSwgMHhlYiwgMHgxYSwgMHhjMSwgMHg2OSwKKwkweGE5LCAweDIxLCAweDk2LCAweDZhLCAweGRhLCAweDk2LCAweGJmLCAweDgwLCAweGJjLCAweDZmLCAweDc1LCAweGUyLAorCTB4M2YsIDB4MTcsIDB4OTMsIDB4MTcsIDB4YmYsIDB4MTgsIDB4YWEsIDB4MzMsIDB4Y2EsIDB4YTAsIDB4ZjEsIDB4YmUsCisJMHhhOSwgMHg2NSwgMHgyYSwgMHg1NiwgMHhmMSwgMHhhZiwgMHg5ZiwgMHhmNywgMHgwNSwgMHgyOSwgMHhjNywgMHg3NSwKKwkweDMzLCAweGE1LCAweGZhLCAweGY4LCAweGVmLCAweDA1LCAweDhjLCAweGVmLCAweGRiLCAweDcxLCAweDNlLCAweDU2LAorCTB4ZGYsIDB4N2UsIDB4NTgsIDB4YjksIDB4NjYsIDB4MWEsIDB4NTUsIDB4YjUsIDB4ZmMsIDB4YWQsIDB4MTIsIDB4MTcsCisJMHhhMiwgMHhkZSwgMHhhOSwgMHgzMSwgMHhkNCwgMHg3YiwgMHg2NiwgMHg5NCwgMHg4MywgMHhhNiwgMHhhMSwgMHhjYSwKKwkweGZlLCAweGM4LCAweDdhLCAweDY1LCAweGZjLCAweDYyLCAweDVlLCAweGJmLCAweDM0LCAweGNiLCAweDBlLCAweDZmLAorCTB4ZTUsIDB4NWQsIDB4Y2UsIDB4OWIsIDB4ZjYsIDB4MjcsIDB4YmMsIDB4YzQsIDB4NmMsIDB4MWEsIDB4ZDUsIDB4ZWIsCisJMHhkNSwgMHgxZSwgMHg2MiwgMHg0MSwgMHg0NCwgMHhiZCwgMHg5YiwgMHhmZCwgMHgxNSwgMHhkMCwgMHhmZSwgMHhjMiwKKwkweGNjLCAweDIzLCAweDRiLCAweGEwLCAweDVhLCAweGYxLCAweGE5LCAweDE1LCAweGM5LCAweDkxLCAweGQ5LCAweGRjLAorCTB4NTIsIDB4ZWMsIDB4MmUsIDB4YzMsIDB4NTMsIDB4ZGIsIDB4Y2IsIDB4YmEsIDB4NGYsIDB4M2EsIDB4ODksIDB4NDUsCisJMHgwOSwgMHhlMiwgMHg3OCwgMHg5YywgMHgzOCwgMHg5ZSwgMHg0ZiwgMHgxYywgMHhiZiwgMHhiZSwgMHhhZiwgMHgxMCwKKwkweGU3LCAweGY3LCAweDM1LCAweDIyLCAweDVkLCAweDI2LCAweDYzLCAweGVjLCAweDcwLCAweDcyLCAweDc1LCAweGE5LAorCTB4ZWMsIDB4NzksIDB4ODUsIDB4OWEsIDB4YzEsIDB4OTUsIDB4NzIsIDB4OGUsIDB4MTMsIDB4ODIsIDB4NWYsIDB4NzksCisJMHg3MSwgMHhlNiwgMHg1OSwgMHhhZCwgMHg3NiwgMHgzOCwgMHhhYywgMHgzMywgMHhmNiwgMHg3MywgMHg2ZSwgMHhiMywKKwkweDNmLCAweDk3LCAweDk2LCAweDhmLCAweDk2LCAweDRhLCAweGMxLCAweDg3LCAweGQ3LCAweGU3LCAweDQ5LCAweDFjLAorCTB4N2QsIDB4OWQsIDB4YjIsIDB4OWMsIDB4YTQsIDB4NGQsIDB4NmYsIDB4ZDQsIDB4NTcsIDB4NDgsIDB4NWYsIDB4OGYsCisJMHhmNywgMHhjYiwgMHgzOCwgMHhjOSwgMHg2ZCwgMHg0YywgMHhlYywgMHhhNiwgMHg4NSwgMHhkNSwgMHg1NSwgMHg5OSwKKwkweDQ4LCAweGU4LCAweDYxLCAweGM2LCAweGFjLCAweDEwLCAweDIyLCAweDY1LCAweDQxLCAweGM2LCAweDJhLCAweGY5LAorCTB4YWUsIDB4ZTIsIDB4MGEsIDB4ZjMsIDB4YjIsIDB4ZjEsIDB4YTAsIDB4ODIsIDB4OGYsIDB4YmUsIDB4MjIsIDB4NWMsCisJMHhjMCwgMHhhZiwgMHg5ZiwgMHg1NywgMHg4NCwgMHgwYiwgMHhjOCwgMHg3OCwgMHhjMSwgMHg4OCwgMHg1MiwgMHgwYiwKKwkweDIzLCAweGYyLCAweDJkLCAweDVlLCAweDM0LCAweGQ3LCAweGMyLCAweDE2LCAweDc5LCAweDQ3LCAweGE5LCAweDg2LAorCTB4NzEsIDB4ZTcsIDB4ZmUsIDB4NDQsIDB4ZmQsIDB4OTQsIDB4Y2YsIDB4NGUsIDB4OGUsIDB4ZjYsIDB4MjcsIDB4NWYsCisJMHgyMSwgMHgzNywgMHhiMywgMHgzOCwgMHgwMiwgMHhmMSwgMHgzZSwgMHg4NywgMHgwZCwgMHg3MiwgMHhlZSwgMHg3NiwKKwkweGI2LCAweDNlLCAweDcyLCAweGU3LCAweDcyLCAweDNkLCAweDE5LCAweGFjLCAweDJjLCAweDE1LCAweDJlLCAweGY3LAorCTB4ZmYsIDB4Y2MsIDB4ZDYsIDB4ZGIsIDB4ZTQsIDB4Y2YsIDB4ZTEsIDB4YzgsIDB4M2YsIDB4ZjAsIDB4YmIsIDB4OGMsCisJMHgxNywgMHhiZiwgMHhhMywgMHg1ZCwgMHhjNCwgMHg3ZiwgMHg2MiwgMHgzZSwgMHg2ZCwgMHhmMSwgMHhiOSwgMHg5NywKKwkweGU3LCAweGM5LCAweGY5LCAweDQzLCAweGM3LCAweGUwLCAweGQwLCAweDNjLCAweDM5LCAweDZmLCAweDY1LCAweDliLAorCTB4YzUsIDB4MGIsIDB4MzIsIDB4YjEsIDB4ZjYsIDB4NWQsIDB4NzMsIDB4YWQsIDB4MjUsIDB4ZWIsIDB4OTEsIDB4ZWMsCisJMHg3ZCwgMHg5MiwgMHg0MywgMHg4YiwgMHgyYywgMHgwYSwgMHg1ZSwgMHhkMSwgMHhlYSwgMHhkNSwgMHhiMywgMHgyOCwKKwkweDE2LCAweDNjLCAweDg5LCAweDQ4LCAweDBmLCAweGIzLCAweDUwLCAweGYzLCAweGI5LCAweDhmLCAweGYwLCAweDZmLAorCTB4M2YsIDB4YWYsIDB4YmYsIDB4YTEsIDB4MzksIDB4MWEsIDB4YjcsIDB4NDIsIDB4ZmEsIDB4YjYsIDB4MzYsIDB4ZWUsCisJMHg1NSwgMHhiZCwgMHhmYiwgMHgyYywgMHhmYywgMHg5MSwgMHg3YywgMHg2NSwgMHhjNiwgMHg2YywgMHhhZiwgMHg5NCwKKwkweDdiLCAweDMyLCAweGZkLCAweDViLCAweDI4LCAweDE3LCAweGFkLCAweGZhLCAweDQ5LCAweGM2LCAweDY2LCAweDE2LAorCTB4ZDAsIDB4NjYsIDB4MDQsIDB4YmIsIDB4ODQsIDB4OGIsIDB4MmMsIDB4ZTEsIDB4ZGEsIDB4NTUsIDB4OGMsIDB4NGMsCisJMHgwMiwgMHg3OSwgMHg4MywgMHgyZSwgMHg4YiwgMHgxYiwgMHhhOSwgMHhiNSwgMHhiNSwgMHg5ZSwgMHhjZCwgMHhmOCwKKwkweGU3LCAweDc5LCAweGYyLCAweGVlLCAweGQxLCAweDBlLCAweDFkLCAweGY3LCAweGQ4LCAweGYwLCAweGY2LCAweDNkLAorCTB4YjYsIDB4ZjAsIDB4Y2EsIDB4NmYsIDB4M2QsIDB4ZDQsIDB4OTAsIDB4MzcsIDB4NWYsIDB4ZGUsIDB4ZmYsIDB4MjAsCisJMHhjMywgMHg5MywgMHhmYSwgMHhhZCwgMHg1YiwgMHg3YSwgMHg4ZCwgMHhhYiwgMHgxOSwgMHhjMywgMHg4NiwgMHg5OSwKKwkweGUzLCAweGFmLCAweDBlLCAweGZlLCAweGQ2LCAweGZjLCAweGE2LCAweDIzLCAweGUyLCAweGIxLCAweGEzLCAweGQ2LAorCTB4ZDMsIDB4OGIsIDB4MWIsIDB4NjYsIDB4YWEsIDB4NTIsIDB4YWUsIDB4Y2IsIDB4MWMsIDB4ZjIsIDB4NmUsIDB4YTEsCisJMHhmNCwgMHg0YiwgMHg0YywgMHhmMywgMHhkZSwgMHg1YSwgMHg5MywgMHhmOSwgMHhiMywgMHg2ZCwgMHg5NSwgMHg5ZCwKKwkweDdlLCAweDkxLCAweGFmLCAweDVkLCAweDM2LCAweGViLCAweGFhLCAweDZiLCAweGRkLCAweDM2LCAweGE1LCAweDhlLAorCTB4ZDYsIDB4NTEsIDB4ODksIDB4NTcsIDB4NjksIDB4YmYsIDB4YWYsIDB4NGUsIDB4NGEsIDB4Y2MsIDB4NTMsIDB4NzEsCisJMHg5NCwgMHg3ZSwgMHgzYSwgMHg1NiwgMHhlNywgMHhlYiwgMHhiYywgMHhjYSwgMHg1YywgMHhmMiwgMHg0MywgMHg3MiwKKwkweGZjLCAweDM3LCAweDM1LCAweDZmLCAweGZiLCAweDE5LCAweGE5LCAweDNiLCAweDg2LCAweDFjLCAweDM4LCAweDE3LAorCTB4YmMsIDB4NjEsIDB4ZDUsIDB4ODIsIDB4NjMsIDB4ODcsIDB4NTQsIDB4MGMsIDB4MjcsIDB4MzIsIDB4ZmUsIDB4ZmUsCisJMHgxYSwgMHhmZCwgMHhmOCwgMHhkNiwgMHhkOSwgMHgwNSwgMHgxZCwgMHgzZCwgMHg0MywgMHhlMiwgMHgxZiwgMHgwZCwKKwkweDk2LCAweDFmLCAweGRkLCAweGFhLCAweDE1LCAweDA5LCAweDVlLCAweDhiLCAweDVmLCAweDZjLCAweDkwLCAweGRlLAorCTB4OWQsIDB4OTEsIDB4MDIsIDB4YjksIDB4Y2MsIDB4ZTAsIDB4NmEsIDB4NzIsIDB4NjAsIDB4ODksIDB4YjEsIDB4MDEsCisJMHhlNiwgMHhiYiwgMHgwZSwgMHhmYSwgMHhjZiwgMHgxOSwgMHhlNiwgMHgxZSwgMHg5NCwgMHgyZCwgMHg2YywgMHg5YSwKKwkweGVmLCAweDMyLCAweDE3LCAweDFiLCAweDQxLCAweGJkLCAweDdhLCAweDBhLCAweGViLCAweGM4LCAweDYzLCAweGM5LAorCTB4NzEsIDB4MjYsIDB4OWIsIDB4YjEsIDB4YzcsIDB4Y2EsIDB4YTUsIDB4N2MsIDB4ZWEsIDB4YzMsIDB4Y2EsIDB4NTIsCisJMHhhZSwgMHhiZiwgMHgxOSwgMHhkZCwgMHg2MywgMHgwYiwgMHg3MCwgMHg4MCwgMHhlYiwgMHg3YSwgMHg0NCwgMHhmZiwKKwkweDJiLCAweDk0LCAweDBmLCAweDc1LCAweDc3LCAweDk2LCAweDUzLCAweDFmLCAweDlmLCAweDg2LCAweDhjLCAweDBlLAorCTB4NjIsIDB4ZmEsIDB4OTYsIDB4NTMsIDB4NGEsIDB4ZmQsIDB4ZmEsIDB4OTgsIDB4ZjIsIDB4NGQsIDB4ZWUsIDB4ODcsCisJMHhkNCwgMHg0NywgMHgzYywgMHhjYywgMHhkMywgMHgxZiwgMHg2MSwgMHgzYywgMHhmYiwgMHgzMywgMHhlYywgMHg1NiwKKwkweDk1LCAweDI2LCAweDViLCAweDU4LCAweDM4LCAweDIyLCAweGZjLCAweGFhLCAweDc1LCAweDc2LCAweGYwLCAweGJmLAorCTB4NDAsIDB4OWYsIDB4ZGIsIDB4YzAsIDB4NmIsIDB4MTIsIDB4ZDcsIDB4ZTUsIDB4NWUsIDB4MzksIDB4MzcsIDB4ZGUsCisJMHg4OSwgMHg5MywgMHg2OSwgMHhkYSwgMHg3NSwgMHhiNCwgMHgwZiwgMHhhNywgMHhkMiwgMHhmMiwgMHg0YywgMHhlMSwKKwkweDU4LCAweDAxLCAweGM0LCAweDg2LCAweGVjLCAweDk4LCAweGQwLCAweDdkLCAweDkxLCAweDUyLCAweGVhLCAweGE1LAorCTB4MzAsIDB4ZTQsIDB4OGQsIDB4YWMsIDB4NTMsIDB4MDIsIDB4ZTQsIDB4NzIsIDB4NjksIDB4OWMsIDB4ZGIsIDB4ZWIsCisJMHg2ZCwgMHhhZiwgMHg2MywgMHhkZSwgMHgxOCwgMHg5ZCwgMHg4NCwgMHhmYSwgMHhkYywgMHhmMiwgMHgzNCwgMHhjZSwKKwkweDhlLCAweDNlLCAweDBlLCAweDRmLCAweGI1LCAweGQ3LCAweGIzLCAweDVhLCAweDY5LCAweGMxLCAweDhlLCAweGM5LAorCTB4N2YsIDB4YWYsIDB4YzYsIDB4ZTQsIDB4ZTEsIDB4YjMsIDB4NWIsIDB4NjAsIDB4NTAsIDB4ZjcsIDB4YmIsIDB4ZjAsCisJMHhhZCwgMHhmOSwgMHhlMiwgMHhmMywgMHhiZCwgMHg5MywgMHhjNSwgMHg1OCwgMHhjNCwgMHg3OCwgMHhmNCwgMHhiMiwKKwkweDE1LCAweDY3LCAweDMzLCAweDdlLCAweDU0LCAweGEzLCAweDdkLCAweDY0LCAweDNlLCAweDk1LCAweDhkLCAweGUxLAorCTB4N2YsIDB4NTgsIDB4NWYsIDB4M2YsIDB4MzQsIDB4MjMsIDB4YWEsIDB4ZTgsIDB4NGIsIDB4YzYsIDB4ZDUsIDB4YTAsCisJMHg4MCwgMHhmMywgMHhlYywgMHhjZSwgMHhjNiwgMHhlYiwgMHgzMiwgMHhlZCwgMHg5ZiwgMHhjYywgMHhjNywgMHhhZCwKKwkweDM5LCAweDU2LCAweGNlLCAweDk3LCAweDQ0LCAweDYxLCAweGE3LCAweDk1LCAweGU3LCAweGNiLCAweGJhLCAweDc1LAorCTB4N2MsIDB4MTYsIDB4OTUsIDB4NWEsIDB4ODcsIDB4OGEsIDB4NTMsIDB4YmEsIDB4ZTAsIDB4NDgsIDB4MGIsIDB4N2QsCisJMHhkNSwgMHg4OSwgMHgyZCwgMHg0MSwgMHhiYSwgMHhhMywgMHg1NSwgMHhmNywgMHg5ZiwgMHhjNiwgMHg5ZSwgMHhlNCwKKwkweGJmLCAweDlhLCAweGNmLCAweGQzLCAweDhlLCAweGQ2LCAweDkwLCAweGMzLCAweDc4LCAweDg4LCAweDAzLCAweDFiLAorCTB4NDMsIDB4OGYsIDB4OTAsIDB4ODcsIDB4NzIsIDB4Y2QsIDB4MDksIDB4MDcsIDB4MzEsIDB4NDgsIDB4NDEsIDB4YTIsCisJMHg5MSwgMHhmZSwgMHgxZiwgMHg1YSwgMHg4MiwgMHgyOSwgMHhlYiwgMHhmZSwgMHg0ZiwgMHhlNywgMHg2NSwgMHg2YSwKKwkweDhiLCAweDY3LCAweGU2LCAweDY3LCAweDcyLCAweDQzLCAweGQxLCAweGZmLCAweDdmLCAweDQ0LCAweDdmLCAweGFmLAorCTB4OTksIDB4OWUsIDB4NzIsIDB4ZDEsIDB4OWYsIDB4MDMsIDB4NmUsIDB4YzYsIDB4YWQsIDB4MDMsIDB4YmMsIDB4ZTcsCisJMHhjMiwgMHg1ZSwgMHgwNywgMHgwNiwgMHhiNSwgMHgxNiwgMHgwYywgMHg0ZSwgMHhjMiwgMHhmMywgMHgyOSwgMHhlZiwKKwkweGY5LCAweGY5LCAweDY4LCAweGM3LCAweGZjLCAweDBjLCAweDU3LCAweDc4LCAweDFiLCAweGRkLCAweGQxLCAweDE3LAorCTB4Y2MsIDB4NTUsIDB4ZTUsIDB4YjIsIDB4NWUsIDB4MzksIDB4YWYsIDB4ZDMsIDB4Y2EsIDB4ZmIsIDB4NzMsIDB4NzUsCisJMHhiZSwgMHhjZCwgMHhlNiwgMHgxMywgMHg1NiwgMHg5YywgMHg3OCwgMHg3MSwgMHhiZSwgMHhmNCwgMHhkNywgMHg1ZSwKKwkweDRmLCAweDk4LCAweGI4LCAweGEyLCAweGY3LCAweDU4LCAweGI5LCAweGI5LCAweDYwLCAweDQzLCAweDZmLCAweDQyLAorCTB4ZjYsIDB4NTYsIDB4NjQsIDB4ZmIsIDB4NjYsIDB4NTYsIDB4MWYsIDB4MTMsIDB4NTUsIDB4YjcsIDB4Y2IsIDB4YmQsCisJMHgyYSwgMHg2YiwgMHhjYiwgMHhkMiwgMHhkZiwgMHhjZSwgMHhmMSwgMHg3ZSwgMHhiMSwgMHg2NSwgMHhiMSwgMHg2MywKKwkweGViLCAweGJkLCAweDk2LCAweGE0LCAweGJjLCAweGQzLCAweGI5LCAweDQxLCAweGZkLCAweDFkLCAweDlmLCAweDIxLAorCTB4NzUsIDB4OTYsIDB4MTYsIDB4Y2UsIDB4NjEsIDB4OWEsIDB4OWIsIDB4ZjUsIDB4N2EsIDB4Y2YsIDB4MjksIDB4ZmMsCisJMHgzMSwgMHg2ZCwgMHg1YiwgMHhjNywgMHhhZSwgMHgyMSwgMHhhOSwgMHhjMywgMHg3YSwgMHgxNCwgMHhjNywgMHhiZSwKKwkweDc1LCAweGI4LCAweGMyLCAweGY4LCAweGJmLCAweGM3LCAweGIyLCAweDQzLCAweGMxLCAweDE1LCAweDkxLCAweDQzLAorCTB4YjAsIDB4YTUsIDB4OGQsIDB4NzEsIDB4NWMsIDB4NmEsIDB4ZGQsIDB4NDYsIDB4YTQsIDB4MjYsIDB4ZGMsIDB4YTksCisJMHg3YywgMHg1OCwgMHhkNywgMHg4OSwgMHg2MywgMHgyMSwgMHhjMywgMHgyYywgMHhkNSwgMHhmYywgMHhlYiwgMHg2YiwKKwkweDZjLCAweDI4LCAweDk4LCAweDZjLCAweGM4LCAweGM3LCAweGYxLCAweDkwLCAweGYwLCAweDQ3LCAweGI4LCAweGQyLAorCTB4NjksIDB4YWYsIDB4MzEsIDB4YzcsIDB4YWUsIDB4YmEsIDB4YmUsIDB4OTcsIDB4Y2UsIDB4NjIsIDB4YTUsIDB4YWQsCisJMHg3ZSwgMHhiZSwgMHhlNCwgMHg1MCwgMHg0OSwgMHgwYiwgMHg0NywgMHhiZSwgMHg4YSwgMHgwNywgMHhhZCwgMHhiZCwKKwkweDU1LCAweDE5LCAweDQzLCAweGE1LCAweDBlLCAweDdjLCAweDJjLCAweDc0LCAweDJkLCAweDJhLCAweDk4LCAweDYyLAorCTB4MzYsIDB4MzUsIDB4ODcsIDB4ZWEsIDB4ZDUsIDB4NWQsIDB4YjgsIDB4ODcsIDB4ZDgsIDB4ZDUsIDB4ODQsIDB4NzMsCisJMHhiYSwgMHhmNCwgMHgzZiwgMHg4YywgMHg2ZiwgMHgzYSwgMHhhYywgMHhiMywgMHgzNCwgMHg0NywgMHg0MywgMHgzYiwKKwkweGEyLCAweDJiLCAweDcxLCAweDYwLCAweGM4LCAweDUwLCAweDljLCAweDYxLCAweDZmLCAweDI0LCAweDQ2LCAweDJlLAorCTB4YzQsIDB4MWMsIDB4ZGQsIDB4YWEsIDB4MDMsIDB4NGEsIDB4OGQsIDB4NjEsIDB4YjgsIDB4YTEsIDB4MTMsIDB4YmIsCisJMHhmNCwgMHg3YywgMHhmNCwgMHhlYSwgMHg5MSwgMHg4MiwgMHg5ZSwgMHhlNSwgMHg1ZCwgMHgzOCwgMHhhOCwgMHgxNywKKwkweDFiLCAweDhiLCAweGMyLCAweDA2LCAweDMxLCAweDVkLCAweGRiLCAweDkyLCAweDg0LCAweGJmLCAweGU1LCAweDMyLAorCTB4MzksIDB4YzcsIDB4NDksIDB4NzgsIDB4M2IsIDB4OWEsIDB4ZWMsIDB4YzQsIDB4ZGMsIDB4MTUsIDB4MGUsIDB4NTcsCisJMHg2YywgMHhiYywgMHgxMSwgMHg4OSwgMHhjOSwgMHg0YSwgMHhkNywgMHhlZSwgMHhmMSwgMHgyMCwgMHhlMiwgMHg5MywKKwkweGRjLCAweDZmLCAweGU2LCAweGJhLCAweDhlLCAweGYxLCAweDk1LCAweGU0LCAweGEwLCAweGEyLCAweDQ3LCAweDNiLAorCTB4NmQsIDB4YjEsIDB4MGUsIDB4Y2YsIDB4YjUsIDB4NWUsIDB4MzIsIDB4OWYsIDB4ZjEsIDB4MGIsIDB4N2UsIDB4MmUsCisJMHhjMCwgMHg1NiwgMHhkNSwgMHg2NywgMHg3MSwgMHhjYSwgMHg4OCwgMHhlZCwgMHgwZiwgMHhmOSwgMHg4NywgMHg5ZCwKKwkweDM2LCAweGY3LCAweDdkLCAweGQzLCAweGYzLCAweDc1LCAweGQxLCAweDliLCAweDYzLCAweDAxLCAweDBhLCAweDFmLAorCTB4MjEsIDB4N2UsIDB4Y2EsIDB4YmYsIDB4NDUsIDB4NzcsIDB4YTIsIDB4NDMsIDB4MTMsIDB4OWIsIDB4NzQsIDB4YTksCisJMHhmMSwgMHgzNSwgMHhkMCwgMHg2NywgMHhkYywgMHg3OCwgMHg0NywgMHhiZCwgMHhiNSwgMHgwZiwgMHhjZiwgMHhlYSwKKwkweDNlLCAweDdkLCAweDBjLCAweDUyLCAweGRiLCAweDViLCAweGMxLCAweDcxLCAweDUyLCAweDgzLCAweDY5LCAweGM0LAorCTB4NGIsIDB4ZDksIDB4OWMsIDB4YzMsIDB4NjMsIDB4MmIsIDB4MjIsIDB4ZWUsIDB4ZTYsIDB4ZTIsIDB4ODgsIDB4NWMsCisJMHhmNywgMHgyNiwgMHgyMywgMHhiNCwgMHhkMywgMHg2ZCwgMHhjMSwgMHgxOSwgMHgzMywgMHg1MiwgMHg2ZSwgMHg3NCwKKwkweGNhLCAweGY5LCAweDE1LCAweDc3LCAweDc4LCAweGJhLCAweGQzLCAweDVkLCAweGU3LCAweGVkLCAweDk4LCAweDUxLAorCTB4ODAsIDB4NzMsIDB4MzEsIDB4YzYsIDB4NjEsIDB4ZWIsIDB4N2YsIDB4YjEsIDB4MjgsIDB4NzMsIDB4M2IsIDB4MzEsCisJMHgxMiwgMHg1YywgMHg4OCwgMHhmNiwgMHgzNiwgMHg3OSwgMHg1NiwgMHgzMywgMHhmYSwgMHhmNiwgMHg5YiwgMHg2NiwKKwkweDcxLCAweGM4LCAweGE3LCAweGE2LCAweGUxLCAweGM0LCAweGMzLCAweDQxLCAweDNiLCAweDJlLCAweGE5LCAweDI2LAorCTB4MWMsIDB4YTEsIDB4N2YsIDB4MzUsIDB4YzcsIDB4MTksIDB4MWYsIDB4NDcsIDB4ZTksIDB4MjcsIDB4YmIsIDB4NjksCisJMHg2MywgMHhmMiwgMHhiZSwgMHg4ZiwgMHg5ZiwgMHg3ZSwgMHgxMiwgMHhhNywgMHg5ZiwgMHg5YywgMHgwYiwgMHhkZCwKKwkweDk3LCAweDdkLCAweDVmLCAweDUwLCAweDIzLCAweGFmLCAweDk4LCAweDQ2LCAweGQzLCAweDkwLCAweDhhLCAweDRmLAorCTB4NTcsIDB4NGMsIDB4MjMsIDB4MzQsIDB4OTIsIDB4OTMsIDB4NWQsIDB4ZmMsIDB4MzIsIDB4MjcsIDB4YmYsIDB4ZjQsCisJMHgxMSwgMHg0NSwgMHg3NiwgMHg5MSwgMHg1MSwgMHhkNiwgMHgyMiwgMHhmZiwgMHhjZSwgMHg1ZCwgMHhjYiwgMHhmZCwKKwkweDI2LCAweDcxLCAweGQ2LCAweDg5LCAweDU2LCAweDZiLCAweDZkLCAweDdmLCAweDU2LCAweDkzLCAweGMxLCAweDhjLAorCTB4ZGMsIDB4OWEsIDB4MmUsIDB4YjksIDB4NmYsIDB4ZmYsIDB4N2UsIDB4ZTIsIDB4OGUsIDB4ZWIsIDB4MmIsIDB4ZWUsCisJMHhiOCwgMHhiZSwgMHg3MSwgMHhkZSwgMHhlZCwgMHhkZiwgMHg3MywgMHgzZSwgMHg3MSwgMHg0YiwgMHhhZiwgMHgxZCwKKwkweGJhLCAweDZmLCAweGVhLCAweDE4LCAweGQ3LCAweDNhLCAweDY3LCAweGM5LCAweDk4LCAweDc5LCAweGE5LCAweDRjLAorCTB4NjQsIDB4OTEsIDB4M2MsIDB4MzYsIDB4MjMsIDB4ZWIsIDB4YWEsIDB4ZjEsIDB4ZDksIDB4YjIsIDB4YmUsIDB4OTUsCisJMHhlZCwgMHgxOSwgMHg1OCwgMHg2NywgMHg3YywgMHhlOSwgMHgzNywgMHgxYSwgMHg3ZSwgMHg3OCwgMHhkYiwgMHhiOSwKKwkweDQzLCAweGIxLCAweGI1LCAweDgwLCAweGQyLCAweDE3LCAweDkzLCAweGY3LCAweDMzLCAweDBiLCAweGFkLCAweDc3LAorCTB4YWMsIDB4NTUsIDB4YmYsIDB4ODEsIDB4MjIsIDB4YmYsIDB4YjYsIDB4NjUsIDB4OGUsIDB4YWQsIDB4MGIsIDB4Y2UsCisJMHhhNSwgMHg1YSwgMHhjNywgMHhiNywgMHg5NCwgMHgyNCwgMHhlMiwgMHhlMywgMHhkZSwgMHhjMCwgMHgxOCwgMHg3NSwKKwkweDE1LCAweDFiLCAweGJmLCAweGNlLCAweDVjLCAweGJiLCAweDBiLCAweGNmLCAweDg1LCAweDFjLCAweDQ2LCAweDYxLAorCTB4NTgsIDB4Y2UsIDB4ODIsIDB4YWUsIDB4YzIsIDB4YWUsIDB4OTEsIDB4YmYsIDB4YzIsIDB4ZTYsIDB4YTQsIDB4NzAsCisJMHhmYywgMHgwNSwgMHhlOCwgMHg5OSwgMHhiNCwgMHhlMSwgMHgwNCwgMHhlZCwgMHhiYiwgMHg4ZiwgMHhjZiwgMHgyMSwKKwkweGZlLCAweGI5LCAweDUzLCAweDkwLCAweGY3LCAweDZiLCAweDFhLCAweDk4LCAweDM3LCAweGViLCAweGQ2LCAweDY3LAorCTB4YzcsIDB4YzgsIDB4Y2YsIDB4YjAsIDB4MzksIDB4NmEsIDB4ZTIsIDB4NTMsIDB4OWQsIDB4YjEsIDB4NDcsIDB4MTMsCisJMHhmOSwgMHgxYywgMHhkMCwgMHhjYSwgMHg1YiwgMHgyZCwgMHgyYywgMHg3ZCwgMHgzMiwgMHhjZSwgMHhmZCwgMHhhYywKKwkweDE2LCAweDVmLCAweDVkLCAweDQ5LCAweDlmLCAweDU1LCAweGYwLCAweDk5LCAweGY0LCAweDI3LCAweGNiLCAweDI5LAorCTB4MzMsIDB4YjksIDB4ZTEsIDB4ZjEsIDB4ZTgsIDB4NzYsIDB4OGMsIDB4NWEsIDB4ZmQsIDB4NjcsIDB4YWQsIDB4YWYsCisJMHhjNiwgMHgxZSwgMHg3OSwgMHhiMSwgMHg4YywgMHgzYywgMHgzYiwgMHhhMSwgMHhmYiwgMHhkYiwgMHgyZiwgMHgyOCwKKwkweGYwLCAweDk0LCAweDg0LCAweGZkLCAweDhjLCAweDMzLCAweDVmLCAweGUyLCAweDM3LCAweGJhLCAweGQ0LCAweGQ4LAorCTB4NzQsIDB4ZDcsIDB4NWEsIDB4ZGEsIDB4ZmIsIDB4YmUsIDB4OTEsIDB4ODAsIDB4NTUsIDB4MzMsIDB4ZjgsIDB4ZTEsCisJMHg1ZCwgMHg2YiwgMHgxYSwgMHg5OSwgMHg3NywgMHhhYiwgMHgzMywgMHhmNSwgMHhjNywgMHg5ZiwgMHhlMSwgMHg0OCwKKwkweGRhLCAweDg1LCAweGE3LCAweGUyLCAweDFlLCAweDY1LCAweGQxLCAweDNlLCAweDE1LCAweDBmLCAweGM1LCAweGJkLAorCTB4NTMsIDB4NGQsIDB4NzYsIDB4ZjIsIDB4OGYsIDB4NjUsIDB4NzMsIDB4MzgsIDB4OWYsIDB4ODIsIDB4MWYsIDB4MmMsCisJMHg5NSwgMHg1OCwgMHhmMCwgMHg0NywgMHgzMCwgMHhhYSwgMHgyMywgMHg5YywgMHgxMywgMHhjNSwgMHg3OSwgMHhjYiwKKwkweGJkLCAweGVhLCAweDExLCAweDliLCAweGNmLCAweGZkLCAweDFiLCAweGVjLCAweDgwLCAweDdkLCAweGZjLCAweDExLAorCTB4NzQsIDB4NTMsIDB4ZmUsIDB4MzUsIDB4NzEsIDB4ZTksIDB4NjksIDB4ZDUsIDB4MDMsIDB4NjUsIDB4Y2QsIDB4ZDgsCisJMHgzZCwgMHgyNiwgMHhiZSwgMHgwOSwgMHhhMywgMHgyYSwgMHgwYywgMHg0ZiwgMHg2NSwgMHhkOCwgMHhiZiwgMHgxMCwKKwkweDg1LCAweDVmLCAweDkyLCAweDZiLCAweDRmLCAweDRiLCAweGZlLCAweGI5LCAweGE1LCAweGQ0LCAweDY2LCAweDMyLAorCTB4N2YsIDB4YjksIDB4MmYsIDB4ZGIsIDB4YWIsIDB4NTgsIDB4ODksIDB4MWQsIDB4NDMsIDB4NTIsIDB4ODcsIDB4MjcsCisJMHg2ZSwgMHhlYiwgMHhjYywgMHg4MywgMHhjYSwgMHhiNCwgMHhjMCwgMHg0NiwgMHg5YiwgMHhmNCwgMHg4NywgMHhiNiwKKwkweGMzLCAweDE3LCAweGRiLCAweDhlLCAweDQwLCAweDRjLCAweDdjLCAweDU2LCAweDUzLCAweDNiLCAweDEwLCAweDM5LAorCTB4MmIsIDB4YjUsIDB4YmYsIDB4NDUsIDB4MjEsIDB4M2YsIDB4ZTUsIDB4ZjIsIDB4ZjcsIDB4NTUsIDB4ZGEsIDB4NzUsCisJMHhkNywgMHg2YiwgMHgxMywgMHgyYSwgMHhhNiwgMHhkNCwgMHg0YywgMHgxZSwgMHgzOSwgMHg5NiwgMHhkNCwgMHhkNiwKKwkweGU3LCAweGRiLCAweGU0LCAweDBjLCAweGM1LCAweDU1LCAweGViLCAweDNkLCAweGViLCAweDg4LCAweGVkLCAweDlmLAorCTB4ODksIDB4NDcsIDB4Y2QsIDB4MTgsIDB4ZDgsIDB4ZmYsIDB4M2UsIDB4NjMsIDB4OTAsIDB4M2MsIDB4ZTMsIDB4NzcsCisJMHhjYywgMHhhZiwgMHg5ZCwgMHg1OCwgMHhkZCwgMHhlNiwgMHhjMSwgMHg4MywgMHg3MSwgMHhhOSwgMHg5ZCwgMHhhZSwKKwkweGFmLCAweGNhLCAweDljLCAweDAxLCAweDkxLCAweGVmLCAweDBlLCAweDc0LCAweGU4LCAweDA0LCAweGQ5LCAweGVhLAorCTB4MmYsIDB4Y2MsIDB4NGEsIDB4MmIsIDB4MmYsIDB4ZmQsIDB4YmYsIDB4MTksIDB4OWIsIDB4NDksIDB4ZTQsIDB4MmQsCisJMHgxNCwgMHgxZiwgMHhlZiwgMHg5ZCwgMHg2NCwgMHgwMiwgMHg2OSwgMHhkOSwgMHg1ZCwgMHgxNSwgMHhiZiwgMHhjYiwKKwkweDVjLCAweGRhLCAweDgxLCAweGVkLCAweGQ4LCAweDU2LCAweDI1LCAweDdjLCAweGU2LCAweGM5LCAweDg5LCAweGQ5LAorCTB4ZjcsIDB4ZTcsIDB4ZWEsIDB4MzIsIDB4OTUsIDB4NTksIDB4NGUsIDB4OTUsIDB4YjMsIDB4MzcsIDB4ZTksIDB4MDUsCisJMHg0NiwgMHg5NCwgMHgyNywgMHhhMiwgMHgyZCwgMHhjYSwgMHhkYSwgMHhhOCwgMHhmNCwgMHgwMywgMHg2ZCwgMHhkMSwKKwkweDIyLCAweDcyLCAweDE4LCAweGRmLCAweDUyLCAweDEzLCAweGRmLCAweDBlLCAweDFkLCAweDU3LCAweDc2LCAweDVhLAorCTB4ZTcsIDB4NjYsIDB4ZTUsIDB4YWMsIDB4MmIsIDB4NTAsIDB4M2UsIDB4ZDEsIDB4YWMsIDB4ZWMsIDB4OGEsIDB4N2UsCisJMHg2MiwgMHg2ZSwgMHhiNCwgMHg3YSwgMHhmMCwgMHg3OSwgMHhkNiwgMHg3OSwgMHg5YywgMHhmYywgMHgwOSwgMHgxNywKKwkweGNhLCAweDhlLCAweGM4LCAweGY5LCAweDQxLCAweDBkLCAweDE1LCAweDEzLCAweDhmLCAweDkxLCAweGI3LCAweDBhLAorCTB4ZDcsIDB4MzEsIDB4NWEsIDB4MWMsIDB4ZDYsIDB4YjksIDB4YjYsIDB4ZTYsIDB4OTcsIDB4NzIsIDB4ZTcsIDB4ZGEsCisJMHgxYywgMHgzMSwgMHg3OSwgMHgxYiwgMHhkOSwgMHhmYSwgMHg4ZiwgMHhiOSwgMHhkMiwgMHg1MSwgMHhlNiwgMHg0YSwKKwkweDY2LCAweGQzLCAweGI3LCAweDQzLCAweGM2LCAweGVlLCAweDBhLCAweDc4LCAweDAzLCAweGU1LCAweDM2LCAweGMzLAorCTB4OTQsIDB4N2EsIDB4Y2UsIDB4NmIsIDB4MjQsIDB4OGMsIDB4ZWIsIDB4NmEsIDB4MGQsIDB4M2MsIDB4NWMsIDB4MmIsCisJMHhlZiwgMHgxZiwgMHhjYSwgMHhiYiwgMHhjNywgMHg1ZCwgMHgzOCwgMHgxYSwgMHhlYSwgMHhjMiwgMHgyZiwgMHhmNSwKKwkweDJlLCAweGVjLCAweGQxLCAweGU1LCAweDRjLCAweDQzLCAweDMxLCAweDY1LCAweGQ1LCAweGE2LCAweGEyLCAweGQwLAorCTB4ZjQsIDB4YjQsIDB4YTIsIDB4OWQsIDB4YjksIDB4MGUsIDB4ZWYsIDB4MDEsIDB4OWYsIDB4ZTIsIDB4MzUsIDB4NTYsCisJMHgyOSwgMHgxYSwgMHhhZSwgMHg4ZSwgMHg3YiwgMHg2NywgMHg0YSwgMHhlOSwgMHgwMywgMHgzNywgMHhjNiwgMHgwMywKKwkweDk4LCAweDIxLCAweGFlLCAweDI2LCAweDI3LCAweGU1LCAweGZjLCAweGM5LCAweDAyLCAweDBjLCAweDRkLCAweDdlLAorCTB4NGQsIDB4YjgsIDB4ODEsIDB4NDEsIDB4NGMsIDB4YjIsIDB4Y2UsIDB4NDgsIDB4M2UsIDB4MmYsIDB4YmQsIDB4NGUsCisJMHg2NywgMHgzMCwgMHhjYiwgMHg2MSwgMHgwYywgMHg2NSwgMHg1MywgMHg0MywgMHgwOSwgMHg2ZSwgMHgzMCwgMHgzYSwKKwkweGZkLCAweDZkLCAweGJhLCAweDkzLCAweGY5LCAweDFjLCAweGRlLCAweGE4LCAweDgxLCAweGZkLCAweDNiLCAweDZlLAorCTB4ZDQsIDB4MjUsIDB4ZTcsIDB4ZTAsIDB4NDQsIDB4NWQsIDB4MzksIDB4ZjIsIDB4NzAsIDB4NmMsIDB4ZjQsIDB4NDUsCisJMHg3MiwgMHhmYywgMHhlZSwgMHhmNiwgMHg1MiwgMHhlNiwgMHhhNywgMHgxMywgMHhhMywgMHg0ZSwgMHhhNCwgMHg1MiwKKwkweDUyLCAweDczLCAweGIwLCAweDdhLCAweDk2LCAweGQzLCAweDBlLCAweGZhLCAweDUyLCAweDdmLCAweDAyLCAweDc1LAorCTB4MzUsIDB4NjEsIDB4N2YsIDB4YjIsIDB4YzYsIDB4YWUsIDB4NzIsIDB4OGUsIDB4NGEsIDB4YTQsIDB4ZDIsIDB4MWEsCisJMHgzZiwgMHgwMSwgMHg3ZSwgMHg4MiwgMHhmYywgMHgzNCwgMHhlMiwgMHhkYiwgMHhmNCwgMHhkOSwgMHgzMiwgMHhlMiwKKwkweGVkLCAweGY3LCAweGQzLCAweDI1LCAweGY4LCAweDI0LCAweGE5LCAweDA1LCAweDc0LCAweGRhLCAweGMxLCAweDI4LAorCTB4NzMsIDB4MDQsIDB4YzMsIDB4ZDIsIDB4NTMsIDB4MDksIDB4YWUsIDB4ZDMsIDB4NGYsIDB4NWYsIDB4MGUsIDB4OTUsCisJMHhjMCwgMHg0YywgMHhkZCwgMHgyZCwgMHgyNywgMHg5NCwgMHhkYywgMHgxNiwgMHg2YSwgMHg2MSwgMHg1OCwgMHhmOCwKKwkweGUyLCAweDMxLCAweDI1LCAweDk1LCAweDNkLCAweGYzLCAweGY1LCAweGVhLCAweDM4LCAweGRhLCAweGNiLCAweGMzLAorCTB4YWUsIDB4ZTAsIDB4ZWEsIDB4YjgsIDB4ZmQsIDB4MTMsIDB4NzksIDB4OWYsIDB4NzUsIDB4NDMsIDB4ODMsIDB4YmMsCisJMHhmMywgMHhlNCwgMHgwYSwgMHgzZSwgMHgzZCwgMHhlMSwgMHgwYSwgMHhhZSwgMHg4ZiwgMHgxZiwgMHg1MywgMHgyOCwKKwkweGNmLCAweDgxLCAweDFhLCAweGJiLCAweDJiLCAweGY4LCAweGU0LCAweGM0LCAweGIxLCAweDg1LCAweDk5LCAweGJjLAorCTB4MGYsIDB4Y2EsIDB4ZDMsIDB4YjUsIDB4MDYsIDB4NmQsIDB4OGMsIDB4NzksIDB4ZWYsIDB4MzIsIDB4ZTksIDB4Y2IsCisJMHg2OCwgMHg5ZCwgMHg1NywgMHhlYywgMHg4NSwgMHg0NiwgMHg0ZCwgMHhkOCwgMHhlYiwgMHhhOSwgMHhiMSwgMHhjYiwKKwkweGQ5LCAweDkwLCAweDY5LCAweGM0LCAweDkzLCAweGYyLCAweGFlLCAweDk3LCAweGQ4LCAweGZlLCAweDNmLCAweDk5LAorCTB4NDYsIDB4OTksIDB4OWMsIDB4ZjUsIDB4ZTgsIDB4NDQsIDB4NWMsIDB4MmIsIDB4NjcsIDB4ZWUsIDB4MjQsIDB4NjcsCisJMHhjZCwgMHg4ZiwgMHg4NiwgMHhhMiwgMHhiMSwgMHg2MiwgMHg3OSwgMHg3NywgMHhiNiwgMHhlOSwgMHg3YiwgMHgyMSwKKwkweDZmLCAweGNiLCAweGEwLCAweDYyLCAweDNjLCAweDVlLCAweDA0LCAweGQ5LCAweGQ3LCAweDJlLCAweGUyLCAweGI3LAorCTB4YTYsIDB4M2EsIDB4MTUsIDB4NmYsIDB4NjMsIDB4MGYsIDB4MDIsIDB4MzgsIDB4OTEsIDB4MTYsIDB4NWQsIDB4MDcsCisJMHhlNSwgMHg4YywgMHhiYSwgMHhhNSwgMHhlYiwgMHg1YiwgMHg2NywgMHhhZSwgMHgzMywgMHhiNiwgMHhiMywgMHgyZCwKKwkweGVhLCAweGUwLCAweDVmLCAweGIxLCAweDE3LCAweDFiLCAweDYzLCAweDBhLCAweGUzLCAweDhhLCAweDY1LCAweDMzLAorCTB4YjcsIDB4NjQsIDB4NWMsIDB4NTcsIDB4ZGIsIDB4ODUsIDB4YzksIDB4NTAsIDB4YTEsIDB4YmMsIDB4NzcsIDB4Y2QsCisJMHhiOCwgMHhlZSwgMHgwZCwgMHg3YywgMHhhMiwgMHg1OCwgMHhmMSwgMHhkYywgMHgyOCwgMHg2MiwgMHg5YywgMHg3ZCwKKwkweDYxLCAweGZjLCAweGVmLCAweGNjLCAweGY2LCAweDZhLCAweGMxLCAweDJiLCAweDNiLCAweGM3LCAweDVlLCAweGM3LAorCTB4NmIsIDB4YTksIDB4NWIsIDB4ZTMsIDB4NWEsIDB4MzgsIDB4YWUsIDB4OTAsIDB4ZTMsIDB4OGEsIDB4YzIsIDB4OTIsCisJMHgzYiwgMHg3YSwgMHhmNSwgMHhiNSwgMHg4YSwgMHhlNiwgMHgyOSwgMHg1MCwgMHhhNCwgMHg1NywgMHhhNiwgMHhlMSwKKwkweGJkLCAweGY0LCAweGU0LCAweDQyLCAweGM5LCAweDc5LCAweDdiLCAweDI3LCAweGNiLCAweGIxLCAweDZlLCAweGFmLAorCTB4ZDksIDB4YjQsIDB4NjgsIDB4YTksIDB4ZDksIDB4OTQsIDB4MGUsIDB4NDUsIDB4Y2QsIDB4OTcsIDB4YWIsIDB4NjQsCisJMHg0ZiwgMHhhNSwgMHhmZiwgMHgyNywgMHg2MywgMHgzNCwgMHhkNSwgMHhjNywgMHg1YywgMHhmMywgMHg2YiwgMHg3YSwKKwkweDZmLCAweGY2LCAweGNjLCAweDJlLCAweGVkLCAweDlhLCAweGNmLCAweDM4LCAweDlkLCAweDEyLCAweDNiLCAweGQ5LAorCTB4ZDEsIDB4ZWUsIDB4NjIsIDB4M2UsIDB4MmEsIDB4ZWYsIDB4ODcsIDB4MWUsIDB4ZTUsIDB4ZmUsIDB4MWYsIDB4NDksCisJMHhmZCwgMHhjZCwgMHg0MiwgMHgzOSwgMHhjMywgMHgyZSwgMHg2NywgMHgwOCwgMHg4MCwgMHhmZiwgMHgwZiwgMHgxZCwKKwkweGFiLCAweDIyLCAweDk3LCAweDcwLCAweDc4LCAweDAwLCAweDAwLCAweDAwIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYm54Ml9SWFBfYjA5RndEYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07Ci1zdGF0aWMgY29uc3QgdTMyIGJueDJfUlhQX2IwOUZ3Um9kYXRhWygweGIwLzQpICsgMV0gPSB7Ci0JMHg4MDA4MDEwMCwgMHg4MDA4MDA4MCwgMHg4MDA4MDAwMCwgMHgwODAwNTA1NCwgMHgwODAwNTA1NCwgMHgwODAwNTEzMCwKLQkweDA4MDA1MTA0LCAweDA4MDA1MGU4LCAweDA4MDA1MDI0LCAweDA4MDA1MDI0LCAweDA4MDA1MDI0LCAweDA4MDA1MDVjLAotCTB4MDgwMDczYjgsIDB4MDgwMDc0MDQsIDB4MDgwMDczYzQsIDB4MDgwMDcyZWMsIDB4MDgwMDczYzQsIDB4MDgwMDczZjQsCi0JMHgwODAwNzNjNCwgMHgwODAwNzJlYywgMHgwODAwNzJlYywgMHgwODAwNzJlYywgMHgwODAwNzJlYywgMHgwODAwNzJlYywKLQkweDA4MDA3MmVjLCAweDA4MDA3MmVjLCAweDA4MDA3MmVjLCAweDA4MDA3MmVjLCAweDA4MDA3MmVjLCAweDA4MDA3M2U0LAotCTB4MDgwMDczZDQsIDB4MDgwMDcyZWMsIDB4MDgwMDcyZWMsIDB4MDgwMDcyZWMsIDB4MDgwMDcyZWMsIDB4MDgwMDcyZWMsCi0JMHgwODAwNzJlYywgMHgwODAwNzJlYywgMHgwODAwNzJlYywgMHgwODAwNzJlYywgMHgwODAwNzJlYywgMHgwODAwNzJlYywKLQkweDA4MDA3MmVjLCAweDA4MDA3M2Q0LCAweDAwMDAwMDAwIH07CitzdGF0aWMgY29uc3QgdTMyIGJueDJfUlhQX2IwOUZ3Um9kYXRhWygweGYwLzQpICsgMV0gPSB7CisJMHg1Zjg2NTQzNywgMHhlNGFjNjJjYywgMHg1MDEwM2E0NSwgMHgzNjYyMTk4NSwgMHhiZjE0YzBlOCwgMHgxYmMyN2ExZSwKKwkweDg0ZjRiNTU2LCAweDA5NGVhNmZlLCAweDdkZGEwMWU3LCAweGMwNGQ3NDgxLCAweDgwMDgwMTAwLCAweDgwMDgwMDgwLAorCTB4ODAwODAwMDAsIDB4MDgwMDRlZmMsIDB4MDgwMDRlZmMsIDB4MDgwMDRmZDgsIDB4MDgwMDRmYWMsIDB4MDgwMDRmOTAsCisJMHgwODAwNGVjYywgMHgwODAwNGVjYywgMHgwODAwNGVjYywgMHgwODAwNGYwNCwgMHgwODAwNzIyMCwgMHgwODAwNzI2YywKKwkweDA4MDA3MjJjLCAweDA4MDA3MTUwLCAweDA4MDA3MjJjLCAweDA4MDA3MjVjLCAweDA4MDA3MjJjLCAweDA4MDA3MTUwLAorCTB4MDgwMDcxNTAsIDB4MDgwMDcxNTAsIDB4MDgwMDcxNTAsIDB4MDgwMDcxNTAsIDB4MDgwMDcxNTAsIDB4MDgwMDcxNTAsCisJMHgwODAwNzE1MCwgMHgwODAwNzE1MCwgMHgwODAwNzE1MCwgMHgwODAwNzI0YywgMHgwODAwNzIzYywgMHgwODAwNzE1MCwKKwkweDA4MDA3MTUwLCAweDA4MDA3MTUwLCAweDA4MDA3MTUwLCAweDA4MDA3MTUwLCAweDA4MDA3MTUwLCAweDA4MDA3MTUwLAorCTB4MDgwMDcxNTAsIDB4MDgwMDcxNTAsIDB4MDgwMDcxNTAsIDB4MDgwMDcxNTAsIDB4MDgwMDcxNTAsIDB4MDgwMDcyM2MsCisJMHgwODAwNzdmNCwgMHgwODAwNzZiYywgMHgwODAwNzdiYywgMHgwODAwNzcxOCwgMHgwODAwNzZlOCwgMHgwODAwNzVhNCwKKwkweDAwMDAwMDAwIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZndfaW5mbyBibngyX3J4cF9md18wOSA9IHsKLQkvKiBGaXJtd2FyZSB2ZXJzaW9uOiA0LjAuNSAqLworCS8qIEZpcm13YXJlIHZlcnNpb246IDQuNC4yMyAqLwogCS52ZXJfbWFqb3IJCQk9IDB4NCwKLQkudmVyX21pbm9yCQkJPSAweDAsCi0JLnZlcl9maXgJCQk9IDB4NSwKKwkudmVyX21pbm9yCQkJPSAweDQsCisJLnZlcl9maXgJCQk9IDB4MTcsCiAKIAkuc3RhcnRfYWRkcgkJCT0gMHgwODAwMzFkMCwKIAogCS50ZXh0X2FkZHIJCQk9IDB4MDgwMDAwMDAsCi0JLnRleHRfbGVuCQkJPSAweDc5YzAsCisJLnRleHRfbGVuCQkJPSAweDc4NmMsCiAJLnRleHRfaW5kZXgJCQk9IDB4MCwKIAkuZ3pfdGV4dAkJCT0gYm54Ml9SWFBfYjA5RndUZXh0LAogCS5nel90ZXh0X2xlbgkJCT0gc2l6ZW9mKGJueDJfUlhQX2IwOUZ3VGV4dCksCkBAIC0zMTU4LDUyMiArMzE1OCw1MzIgQEAKIAkuZGF0YV9pbmRleAkJCT0gMHgwLAogCS5kYXRhCQkJCT0gYm54Ml9SWFBfYjA5RndEYXRhLAogCi0JLnNic3NfYWRkcgkJCT0gMHgwODAwN2FhMCwKKwkuc2Jzc19hZGRyCQkJPSAweDA4MDA3OTgwLAogCS5zYnNzX2xlbgkJCT0gMHg1OCwKIAkuc2Jzc19pbmRleAkJCT0gMHgwLAogCi0JLmJzc19hZGRyCQkJPSAweDA4MDA3YWY4LAorCS5ic3NfYWRkcgkJCT0gMHgwODAwNzlkOCwKIAkuYnNzX2xlbgkJCT0gMHgxYywKIAkuYnNzX2luZGV4CQkJPSAweDAsCiAKLQkucm9kYXRhX2FkZHIJCQk9IDB4MDgwMDc5YzAsCi0JLnJvZGF0YV9sZW4JCQk9IDB4YjAsCisJLnJvZGF0YV9hZGRyCQkJPSAweDA4MDA3ODZjLAorCS5yb2RhdGFfbGVuCQkJPSAweGYwLAogCS5yb2RhdGFfaW5kZXgJCQk9IDB4MCwKIAkucm9kYXRhCQkJCT0gYm54Ml9SWFBfYjA5RndSb2RhdGEsCiB9OwogCiBzdGF0aWMgdTggYm54Ml94aV9ydjJwX3Byb2MxW10gPSB7Ci0JLyogRGF0ZTogICAgICAgIDA0LzI1LzIwMDggMjI6MDIgKi8KLQkweGJkLCAweDU2LCAweDRmLCAweDY4LCAweDFjLCAweDU1LCAweDE4LCAweGZmLCAweDc2LCAweDc2LCAweDc3LCAweDY2LAotCTB4MzMsIDB4M2IsIDB4YmIsIDB4YjMsIDB4ZDgsIDB4MzQsIDB4NGMsIDB4YjcsIDB4MmIsIDB4NTksIDB4ODMsIDB4OTcsCi0JMHhkZCwgMHg2YywgMHg2OSwgMHhhMiwgMHgxNSwgMHgwNCwgMHg1MywgMHg1YSwgMHg3MiwgMHgwOSwgMHhkOCwgMHg5ZSwKLQkweDAyLCAweGI1LCAweDUyLCAweDg0LCAweGI2LCAweDhiLCAweGY0LCAweDUyLCAweDVhLCAweDI4LCAweDc4LCAweDExLAotCTB4ODQsIDB4MGUsIDB4NmQsIDB4OTMsIDB4ODIsIDB4ZTgsIDB4NjEsIDB4YzEsIDB4MDYsIDB4MTIsIDB4NDQsIDB4YTMsCi0JMHgwNywgMHg5NSwgMHg2MCwgMHg2MSwgMHgwNywgMHgzYywgMHg3OCwgMHgxMCwgMHgxNCwgMHgxNSwgMHgxMSwgMHg2YywKLQkweDBmLCAweDg1LCAweDg4LCAweGY2LCAweGQyLCAweDU0LCAweDRiLCAweDBiLCAweDFlLCAweDViLCAweDNjLCAweGQ2LAotCTB4OGMsIDB4ZWYsIDB4ZmIsIDB4ZjMsIDB4OTIsIDB4OTksIDB4OTcsIDB4OWQsIDB4MjQsIDB4YTcsIDB4MmUsIDB4YjQsCi0JMHgzZiwgMHhiZSwgMHgzNywgMHhkZiwgMHhiZiwgMHhmNywgMHhmZCwgMHhmOSwgMHhiZCwgMHhkNCwgMHgwMCwgMHhjMCwKLQkweDgyLCAweDMwLCAweDFhLCAweDU1LCAweDA4LCAweDY1LCAweDJiLCAweDVmLCAweDUyLCAweDkwLCAweDAzLCAweGY4LAotCTB4MWEsIDB4ZjgsIDB4NTcsIDB4ZjQsIDB4NDgsIDB4MGUsIDB4MGYsIDB4OGEsIDB4M2MsIDB4Y2UsIDB4MTAsIDB4OGUsCi0JMHhkNywgMHhkNCwgMHhmZiwgMHgxNywgMHhlMCwgMHg0OCwgMHgxMywgMHgzMSwgMHgwZiwgMHg0NywgMHg1ZSwgMHg0MCwKLQkweDNjLCAweDBjLCAweGRmLCAweDM3LCAweDAzLCAweDg1LCAweGZmLCAweGM1LCAweDEwLCAweGEyLCAweDNjLCAweGRjLAotCTB4ZmYsIDB4MzYsIDB4MmEsIDB4OTMsIDB4ZmYsIDB4MzUsIDB4YjEsIDB4ZmYsIDB4MzMsIDB4Y2YsIDB4ZjgsIDB4NmEsCi0JMHhhNywgMHhjNCwgMHg3ZSwgMHgwNCwgMHhlMSwgMHg0MCwgMHg4ZCwgMHg2MCwgMHhiNSwgMHg4NywgMHhmMiwgMHg4OSwKLQkweDEzLCAweDYwLCAweGEzLCAweDlmLCAweDRmLCAweDk0LCAweDAyLCAweGNhLCAweDhkLCAweDVjLCAweDc4LCAweDQwLAotCTB4ZjIsIDB4YjIsIDB4NTgsIDB4ZWYsIDB4NWUsIDB4Y2YsIDB4YzcsIDB4NzMsIDB4YjgsIDB4M2YsIDB4OGQsIDB4ZjIsCi0JMHgzZSwgMHhmNywgMHg1YSwgMHgwZiwgMHgzMSwgMHg4MCwgMHg3MywgMHgyNSwgMHg4ZiwgMHhlZiwgMHgzMywgMHhjYSwKLQkweDZlLCAweGQ3LCAweGRhLCAweDY4LCAweGE3LCAweDc0LCAweGRiLCAweGUyLCAweGI3LCAweDg4LCAweDdlLCAweGZmLAotCTB4ODksIDB4ZDksIDB4MmYsIDB4ZmEsIDB4NGIsIDB4ZmEsIDB4NjksIDB4MjgsIDB4M2YsIDB4NzgsIDB4NmUsIDB4NGIsCi0JMHg1ZSwgMHhiNiwgMHg5MSwgMHg5NywgMHhhZCwgMHhmMiwgMHg5MCwgMHgzYSwgMHg4MCwgMHhjZSwgMHgwMywgMHg3MSwKLQkweGFmLCAweDhhLCAweDhiLCAweDdlLCAweDFmLCAweGNiLCAweGJkLCAweDAxLCAweDRlLCAweDM3LCAweGM1LCAweDdmLAotCTB4ODQsIDB4ZTgsIDB4ZTUsIDB4ZDgsIDB4OWYsIDB4ZmEsIDB4MjcsIDB4ZjcsIDB4ZDgsIDB4ZWEsIDB4NDcsIDB4ZDcsCi0JMHgyOSwgMHg5ZCwgMHhiZiwgMHhkMywgMHhkMSwgMHhkZiwgMHg3NSwgMHgzZiwgMHgzMCwgMHhjZSwgMHgxZCwgMHgxNSwKLQkweDI3LCAweGE5LCAweDBmLCAweDNiLCAweGU4LCAweGZmLCAweGE2LCAweGY0LCAweGQzLCAweDdlLCAweGY5LCAweGZjLAotCTB4ZDcsIDB4Y2QsIDB4ZjMsIDB4ZDYsIDB4YTAsIDB4YmEsIDB4MTUsIDB4OGQsIDB4YmEsIDB4ZmQsIDB4MjgsIDB4NzUsCi0JMHg5YiwgMHg4MSwgMHgxNywgMHhhZCwgMHg4MCwgMHhmNCwgMHgwYSwgMHg4MCwgMHhiOCwgMHg1ZiwgMHgyNSwgMHg4MCwKLQkweGY4LCAweGJjLCAweGUwLCAweDQ1LCAweGMxLCAweGNmLCAweDA0LCAweDk3LCAweDA1LCAweGY3LCAweDBhLCAweDBlLAotCTB4MGIsIDB4ZWUsIDB4MTEsIDB4N2MsIDB4NGUsIDB4ZjAsIDB4NmYsIDB4YzEsIDB4OWEsIDB4YTAsIDB4MmYsIDB4NTgsCi0JMHgxNSwgMHhiYywgMHgyNywgMHhlOCwgMHgwOSwgMHg5NiwgMHgwZCwgMHg3ZiwgMHg3NSwgMHhjMSwgMHg5MiwgMHg2MCwKLQkweDI0LCAweGY4LCAweDlhLCAweDYxLCAweGVmLCAweGU2LCAweDE4LCAweDU3LCAweDQ1LCAweDNlLCAweDI4LCAweGYyLAotCTB4NDksIDB4OTEsIDB4YjEsIDB4YTAsIDB4MzIsIDB4ZjcsIDB4YTksIDB4N2EsIDB4N2QsIDB4YmUsIDB4ZDEsIDB4ZGYsCi0JMHhkNSwgMHg5ZSwgMHg3YywgMHg2ZiwgMHg2OSwgMHhiZCwgMHgxMiwgMHhkNSwgMHgwZiwgMHhkYSwgMHg0OSwgMHhmZCwKLQkweDhmLCAweGI3LCAweGQxLCAweDY3LCAweGI1LCAweGU5LCAweGQ2LCAweDIwLCAweGJiLCAweDFiLCAweDMxLCAweGU3LAotCTB4ZjEsIDB4OTEsIDB4ZDgsIDB4MDcsIDB4ZmQsIDB4ZWYsIDB4MzIsIDB4ZjYsIDB4NjgsIDB4YWEsIDB4NjMsIDB4Y2UsCi0JMHhkNywgMHhhMCwgMHgzZCwgMHg3YSwgMHg0NSwgMHhmNiwgMHhlOCwgMHhkMCwgMHg5NiwgMHhmOSwgMHhlNSwgMHgzOSwKLQkweDNkLCAweDJhLCAweGY2LCAweDUzLCAweDMyLCAweDlmLCAweDhkLCAweDBjLCAweGJkLCAweDMwLCAweGIxLCAweGFmLAotCTB4MTQsIDB4MmYsIDB4NjMsIDB4MWYsIDB4NmUsIDB4ZTYsIDB4YmEsIDB4MWQsIDB4OGMsIDB4NWIsIDB4OTQsIDB4YjgsCi0JMHg1OSwgMHhmOSwgMHhhMSwgMHhiZCwgMHhjYywgMHg2ZiwgMHg0YiwgMHhjZiwgMHg3MSwgMHg3YSwgMHg3ZSwgMHg3OSwKLQkweDBlLCAweDZkLCAweDYzLCAweDBlLCAweDJmLCAweGVkLCAweGQwLCAweDg3LCAweGIyLCAweDUxLCAweGNmLCAweGYzLAotCTB4NGEsIDB4OWYsIDB4NDUsIDB4Y2IsIDB4NjIsIDB4NWMsIDB4NjIsIDB4ZWMsIDB4NzgsIDB4NzYsIDB4MDEsIDB4ZjEsCi0JMHg5MCwgMHhmNywgMHgwYiwgMHhmYiwgMHgxYiwgMHhhNSwgMHg3YiwgMHg3OCwgMHhjMSwgMHgwMiwgMHhlZCwgMHg2ZCwKLQkweDAxLCAweDE2LCAweGVjLCAweDIxLCAweDg1LCAweDRmLCAweGUzLCAweDBmLCAweDU5LCAweGFmLCAweDVlLCAweGJjLAotCTB4NGQsIDB4MTgsIDB4MmMsIDB4ZGQsIDB4NjIsIDB4ZmQsIDB4M2YsIDB4OWEsIDB4OWMsIDB4ZjcsIDB4MWIsIDB4ZTMsCi0JMHg2MCwgMHhmYywgMHhmNCwgMHg3NywgMHhkOSwgMHg3NywgMHgxZiwgMHhlNSwgMHg3ZiwgMHg3MywgMHg2MSwgMHhhNCwKLQkweGUzLCAweDg4LCAweGRkLCAweDc5LCAweGJkLCAweDQ3LCAweGZjLCAweGJiLCAweDYyLCAweGQ3LCAweGE4LCAweDZlLAotCTB4ZWYsIDB4NDcsIDB4MjQsIDB4MGUsIDB4N2IsIDB4ZjMsIDB4Y2MsIDB4YWYsIDB4MWYsIDB4NDQsIDB4ZmEsIDB4M2UsCi0JMHhjMiwgMHgyYiwgMHg2ZCwgMHhiNiwgMHhhYiwgMHg1MCwgMHg5YywgMHgzZCwgMHhmZCwgMHg2NSwgMHg2MywgMHgzZSwKLQkweDlhLCAweGJiLCAweGUyLCAweGQ3LCAweDI3LCAweGYxLCAweDI2LCAweGJmLCAweDI2LCAweGVmLCAweGFmLCAweGY5LAotCTB4YjUsIDB4MDQsIDB4NjcsIDB4NjYsIDB4N2MsIDB4OGEsIDB4NTcsIDB4YjUsIDB4ZDksIDB4Y2QsIDB4OWIsIDB4M2UsCi0JMHhlMywgMHhkYiwgMHgyZSwgMHhlMywgMHg0MywgMHgxNywgMHhlYiwgMHgxMywgMHhjNywgMHhlNywgMHhjYSwgMHgyYywKLQkweDlmLCAweGFkLCAweGU4LCAweGJkLCAweGQ2LCAweGY2LCAweDNhLCAweGFmLCAweGVkLCAweGYyLCAweGMxLCAweGY4LAotCTB4M2EsIDB4OGUsIDB4Y2UsIDB4NDMsIDB4YzcsIDB4NGIsIDB4Y2YsIDB4NDMsIDB4NzYsIDB4NWMsIDB4YzYsIDB4YWUsCi0JMHg5NSwgMHhhZSwgMHhjMywgMHhkMiwgMHgwNCwgMHg2MywgMHg2MSwgMHgxMiwgMHhmMywgMHhmYSwgMHgyMSwgMHhkZSwKLQkweGQ4LCAweGViLCAweDU2LCAweDhkLCAweGY0LCAweGM2LCAweDgwLCAweGU1LCAweDU5LCAweDk5LCAweGJmLCAweDU5LAotCTB4ZGEsIDB4NDcsIDB4YzUsIDB4MzcsIDB4MTYsIDB4NjIsIDB4MWQsIDB4NDIsIDB4N2EsIDB4NmYsIDB4MmMsIDB4ZjcsCi0JMHg2NywgMHg5YSwgMHg4NywgMHhiYywgMHg5YywgMHhhYiwgMHhmYSwgMHg4ZiwgMHhhNSwgMHhmNywgMHg3OCwgMHg4ZCwKLQkweGU3LCAweGFkLCAweDk0LCAweDllLCAweGQzLCAweDQ2LCAweDNjLCAweDc4LCAweGZlLCAweGRkLCAweGZlLCAweDcyLAotCTB4NmYsIDB4NTAsIDB4M2YsIDB4NzQsIDB4N2UsIDB4MDEsIDB4NzQsIDB4MjcsIDB4YjMsIDB4ZGUsIDB4MDksIDB4ZmQsCi0JMHgzZSwgMHg2YiwgMHg5ZSwgMHhhNCwgMHhlMywgMHg3ZSwgMHg5OCwgMHg0ZiwgMHhkZCwgMHhmYiwgMHgyOCwgMHg3NCwKLQkweDA2LCAweGY5LCAweGZmLCAweDQ2LCAweGJmLCAweDdiLCAweDAzLCAweGY2LCAweDc2LCAweGE3LCAweGI4LCAweDI5LAotCTB4ZmYsIDB4NTUsIDB4YjUsIDB4MzksIDB4YjAsIDB4NzUsIDB4ZWYsIDB4MWMsIDB4NjMsIDB4NGYsIDB4OWYsIDB4YWUsCi0JMHhmMywgMHg5ZSwgMHgzNiwgMHhiNiwgMHhjYywgMHhhNywgMHhlNiwgMHhhZiwgMHhlNiwgMHhiNiwgMHhmYywgMHhmNSwKLQkweGFjLCAweGY4LCAweGNhLCAweDAyLCAweGU2LCAweDJiLCAweDdjLCAweDRmLCAweGQyLCAweDc5LCAweDNhLCAweGZhLAotCTB4OWUsIDB4MDYsIDB4MmYsIDB4ZjEsIDB4ZmQsIDB4ZWUsIDB4YWYsIDB4ZWYsIDB4OGUsIDB4ZGYsIDB4OTIsIDB4NzUsCi0JMHgxYSwgMHhjNCwgMHg2ZiwgMHhhZSwgMHhjMSwgMHg1NywgMHhiZiwgMHhhZiwgMHg2ZiwgMHhmMiwgMHgxYiwgMHg3ZSwKLQkweDVmLCAweDU5LCAweGUxLCAweGZlLCAweGJkLCAweDk3LCAweDk4LCAweGRmLCAweDY0LCAweGRkLCAweDg3LCAweGE0LAotCTB4ZWUsIDB4NGEsIDB4OGYsIDB4ZWMsIDB4NmYsIDB4MWIsIDB4ZjYsIDB4YmEsIDB4ZmYsIDB4ZWYsIDB4MDgsIDB4NmYsCi0JMHg1YSwgMHg1MywgMHgzYywgMHg3ZiwgMHg0ZSwgMHhmNywgMHg5MSwgMHhkMSwgMHg5NywgMHhjOSwgMHgwZSwgMHhlZSwKLQkweGQ1LCAweDY1LCAweDg4LCAweGE0LCAweDZlLCAweDc3LCAweDUzLCAweGY1LCAweGFiLCAweDA4LCAweDRmLCAweDM4LAotCTB4ZjAsIDB4NTUsIDB4YTQsIDB4ZWIsIDB4YWMsIDB4ZmIsIDB4YzgsIDB4ZjgsIDB4MjUsIDB4ZTksIDB4ZDcsIDB4NzYsCi0JMHhhOCwgMHg3NywgMHgwZCwgMHhiZSwgMHhkOCwgMHhlMCwgMHg0MSwgMHg5ZiwgMHhmYywgMHg0ZCwgMHgwOCwgMHhhZiwKLQkweDljLCAweDkxLCAweGZkLCAweGZlLCAweGNiLCAweDY1LCAweGZlLCAweGU4LCAweDFlLCAweGEzLCAweDNkLCAweDg3LAotCTB4MTEsIDB4ZDksIDB4ZjMsIDB4NmUsIDB4ODUsIDB4ZTUsIDB4N2EsIDB4ODUsIDB4NzksIDB4NzEsIDB4YzIsIDB4ZjEsCi0JMHg0OCwgMHhhZiwgMHg1ZSwgMHg2MSwgMHgxYywgMHgyOSwgMHhhMywgMHg1ZCwgMHgwMCwgMHgwZiwgMHg4ZSwgMHg5MywKLQkweDdhLCAweDY3LCAweGQxLCAweDYzLCAweDdlLCAweDVmLCAweGJjLCAweDI1LCAweGZjLCAweGUzLCAweGViLCAweGZhLAotCTB4YzksIDB4N2QsIDB4NWYsIDB4YzYsIDB4ZjMsIDB4MTEsIDB4YjUsIDB4Y2YsIDB4YzksIDB4N2UsIDB4MjgsIDB4OWQsCi0JMHgzNiwgMHhlNywgMHhmNywgMHhhOSwgMHg2NCwgMHhkZiwgMHhmNCwgMHg5MywgMHhmNSwgMHhkNiwgMHhmMywgMHhiZCwKLQkweDljLCAweGQxLCAweGE3LCAweDk5LCAweDU4LCAweGYzLCAweGRmLCAweGQ4LCAweDBjLCAweGU2LCAweGViLCAweDQzLAotCTB4ZDUsIDB4ZTEsIDB4ZjksIDB4NjAsIDB4NTQsIDB4N2UsIDB4MmMsIDB4MDcsIDB4Y2QsIDB4MWEsIDB4NzMsIDB4YzIsCi0JMHgyNywgMHg3MywgMHg1NywgMHhjOCwgMHhjZCwgMHhmMSwgMHgzOSwgMHg3ZCwgMHgzZSwgMHg0ZCwgMHgwYiwgMHgzMiwKLQkweGJiLCAweGYyLCAweDEzLCAweDlkLCAweDU3LCAweGEzLCAweDNjLCAweDlmLCAweDNiLCAweGM3LCAweDc0LCAweGJkLAotCTB4N2MsIDB4YmEsIDB4ZmYsIDB4MDIsIDB4ZDcsIDB4ZWIsIDB4YWQsIDB4MWIsIDB4OGMsIDB4YTcsIDB4ZTAsIDB4NzUsCi0JMHg0MiwgMHg3NywgMHhjMSwgMHg2MywgMHg3ZSwgMHg1YywgMHhmNCwgMHg0YSwgMHg4NCwgMHg0MCwgMHhmNSwgMHhiMiwKLQkweDVlLCAweGUyLCAweDc3LCAweGFkLCAweDI4LCAweGVmLCAweGQxLCAweDUwLCAweGEyLCAweDhmLCAweGU2LCAweGZiLAotCTB4YjEsIDB4ZGIsIDB4N2UsIDB4MjYsIDB4ZjksIDB4NTQsIDB4YmYsIDB4NmIsIDB4MzksIDB4ZTMsIDB4ZWYsIDB4YzgsCi0JMHg4YSwgMHgzMSwgMHg5ZiwgMHhlZiwgMHg2NiwgMHhjYywgMHg2NywgMHgzMywgMHg2MywgMHhiZSwgMHg0ZCwgMHg1ZSwKLQkweGI5LCAweDI0LCAweDdiLCAweDU3LCAweDgwLCAweDYyLCAweDllLCAweDFlLCAweDI2LCAweGFmLCAweDcwLCAweDk1LAotCTB4ZmEsIDB4NmIsIDB4Y2QsIDB4ZjEsIDB4YmIsIDB4ZWUsIDB4MTUsIDB4ZTcsIDB4NzMsIDB4NTQsIDB4MzcsIDB4NmYsCi0JMHg5ZSwgMHhmNSwgMHgwYSwgMHg3YywgMHgxZSwgMHg2OCwgMHhiYywgMHg3ZSwgMHg5NSwgMHhkZiwgMHg0ZiwgMHgwYiwKLQkweGZlLCAweDA3LCAweDg5LCAweDZlLCAweDFlLCAweDEzLCAweDAwLCAweDBkLCAweDAwLCAweDAwLCAweDAwIH07CisJLyogRGF0ZTogICAgICAgIDA2LzE3LzIwMDggMTY6NTIgKi8KKwkweGJkLCAweDU2LCAweGNmLCAweDZiLCAweDFjLCAweDc1LCAweDE0LCAweDdmLCAweDNiLCAweGJiLCAweDMzLCAweDNiLAorCTB4OTksIDB4OWQsIDB4ZGQsIDB4OTksIDB4ZGEsIDB4MzQsIDB4NGMsIDB4YjcsIDB4MmIsIDB4ZDksIDB4ODYsIDB4NWUsCisJMHgzNiwgMHg5OSwgMHg2MiwgMHhhMiwgMHgxMSwgMHgwYSwgMHg0NiwgMHg1YiwgMHg3MiwgMHgwOSwgMHhkOCwgMHg5ZSwKKwkweDAyLCAweDk1LCAweDIyLCAweDgyLCAweDcxLCAweGE5LCAweDNkLCAweGQ4LCAweDk2LCAweGUyLCAweDVmLCAweGUwLAorCTB4OTAsIDB4OWEsIDB4MDgsIDB4NDUsIDB4MGYsIDB4MGIsIDB4MzYsIDB4OTAsIDB4MjAsIDB4MWEsIDB4N2IsIDB4NTAsCisJMHgwOSwgMHgwYSwgMHgzYiwgMHgwNywgMHg0MSwgMHg0NCwgMHgyZCwgMHhhOCwgMHg4OCwgMHg2MCwgMHgzZCwgMHgwOCwKKwkweDg1LCAweGRhLCAweDhiLCAweDUxLCAweDhiLCAweDhhLCAweDA3LCAweDBmLCAweDAxLCAweDhmLCAweDlhLCAweGYxLAorCTB4ZmIsIDB4N2UsIDB4N2MsIDB4MzcsIDB4MzMsIDB4OTMsIDB4ZGQsIDB4MjQsIDB4MjcsIDB4MDMsIDB4ZWQsIDB4ODcsCisJMHhmNywgMHg5ZCwgMHhmNywgMHg3ZCwgMHhkZiwgMHhmNywgMHhkZSwgMHhmNywgMHhmMywgMHgzZSwgMHhkZiwgMHhmNSwKKwkweDAxLCAweGMwLCAweDgwLCAweDI4LCAweDFlLCAweDU1LCAweDA4LCAweDg3LCAweDhjLCAweGEyLCAweGFkLCAweGEwLAorCTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZjAsIDB4OWYsIDB4ZTksIDB4OTIsIDB4MWQsIDB4M2QsIDB4MjIsIDB4ZjYsIDB4MDQsCisJMHg0MywgMHgzNCwgMHhlMSwgMHhhYiwgMHhmZiwgMHhhZiwgMHhjMiwgMHhlOSwgMHgyNiwgMHg2MiwgMHgxMSwgMHg0ZSwKKwkweDFmLCAweDQ3LCAweDdjLCAweDEyLCAweDZlLCAweDM3LCAweDAzLCAweDg1LCAweGZmLCAweDI2LCAweDEwLCAweGExLAorCTB4M2QsIDB4ZGMsIDB4ZmQsIDB4MjQsIDB4YWUsIDB4NTAsIDB4ZmMsIDB4NGQsIDB4ZDksIDB4ZmYsIDB4NjMsIDB4OTEsCisJMHhmMSwgMHg1NCwgMHg2OCwgMHg3MywgMHgxYywgMHg0MSwgMHgzOCwgMHhlOSwgMHgxMywgMHhkYywgMHhlZCwgMHhhMCwKKwkweDdkLCAweGZlLCAweDNjLCAweDU4LCAweDE4LCAweGU3LCAweDZkLCAweGU1LCAweDgwLCAweDc2LCAweGEzLCAweDEwLAorCTB4OWQsIDB4OTQsIDB4YmMsIDB4MGMsIDB4ZjYsIDB4ZmIsIDB4YTksIDB4ZTMsIDB4ZTEsIDB4M2EsIDB4ZmMsIDB4M2MsCisJMHg4YiwgMHhmNiwgMHg1MSwgMHhlNywgMHhkNSwgMHgwZSwgMHg2MiwgMHgwMCwgMHg5NywgMHg2YywgMHg5NywgMHhlYiwKKwkweDE5LCAweGU1LCAweGIwLCAweDliLCAweGUzLCAweGI4LCAweDRmLCAweGY5LCAweDhlLCAweDRiLCAweDVjLCAweDEzLAorCTB4ZTMsIDB4ZmUsIDB4OTksIDB4NzAsIDB4NWMsIDB4OGMsIDB4OTcsIDB4OGUsIDB4ZDMsIDB4NTAsIDB4NzEsIDB4NzAsCisJMHhkZCwgMHg5MiwgMHhiYywgMHhhYywgMHg1YywgMHg1ZSwgMHg5NiwgMHhjYSwgMHg0MywgMHhmYSwgMHgwMCwgMHgzYSwKKwkweDBmLCAweGM0LCAweDIzLCAweGVhLCAweDVjLCAweDhjLCAweGJiLCAweDI1LCAweDc1LCAweDAzLCAweDNjLCAweGRmLAorCTB4OTQsIDB4ZjgsIDB4MzEsIDB4YTIsIDB4NWIsIDB4ZTAsIDB4NzgsIDB4ZWEsIDB4OWYsIDB4ZDQsIDB4YjEsIDB4M2IsCisJMHg4ZSwgMHhlZSwgMHg1MywgMHgzNiwgMHhmZiwgMHg3MiwgMHhhOCwgMHhiZiwgMHhlYiwgMHhmYiwgMHhjMCwgMHg3MywKKwkweDdlLCAweDUwLCAweGU3LCAweGE0LCAweGZkLCAweDYxLCAweDFmLCAweGZmLCAweGVmLCAweDk0LCAweDdmLCAweDM2LAorCTB4MmUsIDB4YWYsIDB4N2YsIDB4YmIsIDB4YjMsIDB4ZGUsIDB4ZWEsIDB4ZDcsIDB4MzcsIDB4MzMsIDB4ZDcsIDB4YjcsCisJMHgyZiwgMHhhNSwgMHg2ZiwgMHg3MywgMHg3MCwgMHhjMiwgMHgwOCwgMHhjOCwgMHhhZiwgMHgwNCwgMHg4OCwgMHhjNywKKwkweDU0LCAweDAyLCAweDg4LCAweDBmLCAweDBiLCAweDVlLCAweDEzLCAweGJjLCAweDI1LCAweGY4LCAweGFlLCAweGUwLAorCTB4MTEsIDB4YzEsIDB4NjEsIDB4YzEsIDB4YzMsIDB4ODIsIDB4MGYsIDB4MDksIDB4NmUsIDB4MDksIDB4ZmEsIDB4ODIsCisJMHg5ZSwgMHg2MCwgMHg0ZCwgMHhmMCwgMHgyZiwgMHg0MSwgMHg1NywgMHhiMCwgMHg5MiwgMHg4YiwgMHg1NywgMHgxNywKKwkweGI0LCAweDA1LCAweDNmLCAweDE3LCAweDdjLCAweDIyLCAweGI3LCAweGZmLCAweDY4LCAweDgxLCAweGYxLCAweDgxLAorCTB4ZDgsIDB4NGYsIDB4ODksIDB4N2QsIDB4NDEsIDB4NmMsIDB4NmMsIDB4YTgsIDB4ZjAsIDB4M2UsIDB4ZDMsIDB4YWYsCisJMHg1YiwgMHhiZCwgMHhmYiwgMHhiZCwgMHhkYiwgMHg5MSwgMHhlZiwgMHgyZCwgMHhlZCwgMHg2NywgMHg1MywgMHhmZiwKKwkweDYwLCAweDNjLCAweGVkLCAweGZmLCAweGQ2LCAweDFlLCAweGZlLCAweGVjLCAweDM2LCAweGRiLCAweGVhLCAweGI3LAorCTB4ZWYsIDB4NjYsIDB4YzIsIDB4NzksIDB4YmMsIDB4MjksIDB4ZmIsIDB4ODMsIDB4ZWUsIDB4NjcsIDB4MDMsIDB4ZTYsCisJMHg2OCwgMHgyNiwgMHhjYywgMHhmMywgMHhhYiwgMHhkZiwgMHgxYywgMHgzZCwgMHgyZSwgMHg3MywgMHgzNCwgMHhiZCwKKwkweDhiLCAweGJmLCAweGNjLCAweGQzLCAweDMzLCAweGIyLCAweDdmLCAweDQ2LCAweGY4LCAweGQ5LCAweDE4LCAweGUwLAorCTB4MTcsIDB4YTUsIDB4ZTYsIDB4OTUsIDB4Y2UsIDB4MWIsIDB4MzAsIDB4MGYsIDB4MWYsIDB4MTUsIDB4ZGEsIDB4NjEsCisJMHhjMCwgMHhmYywgMHg4OSwgMHhmNiwgMHhjYSwgMHgwZiwgMHhmNywgMHgwYiwgMHg3ZiwgMHg1YiwgMHg5YSwgMHhjNywKKwkweDU5LCAweGZlLCAweDMyLCAweDBmLCAweGFkLCAweDFjLCAweDBmLCAweDVmLCAweGRlLCAweGU3LCAweDFlLCAweDJhLAorCTB4YjksIDB4N2UsIDB4NWUsIDB4NTYsIDB4ZmUsIDB4NmMsIDB4MWEsIDB4MDYsIDB4ZTMsIDB4MWEsIDB4NjMsIDB4ZTgsCisJMHg1YSwgMHgyNSwgMHhjNCwgMHg2OSwgMHhmNywgMHgxYiwgMHg4ZSwgMHgzNywgMHg0YSwgMHg3NSwgMHhiOCwgMHhjMSwKKwkweDBhLCAweGNkLCAweDZkLCAweDA5LCAweDU2LCAweGFjLCAweDIxLCAweDg1LCAweGZmLCAweDI0LCAweDZmLCAweGIwLAorCTB4NWYsIDB4ZGQsIDB4ZmMsIDB4OWUsIDB4MzAsIDB4NTgsIDB4YmIsIDB4YzMsIDB4ZmUsIDB4ZjcsIDB4OWEsIDB4OWMsCisJMHhmNywgMHgzMywgMHgxMywgMHg5MCwgMHhmYiwgMHhkMywgMHhkZiwgMHg2NSwgMHhkZSwgMHgzZCwgMHhiNCwgMHhmZiwKKwkweDJlLCAweDQ0LCAweGIxLCAweDNlLCAweDQ3LCAweGY2LCAweDVkLCAweGQ2LCAweDczLCAweGM0LCAweDdmLCAweDhiLAorCTB4OTYsIDB4NGYsIDB4ZjUsIDB4ZGUsIDB4ODgsIDB4YzksIDB4MWMsIDB4NzYsIDB4OTcsIDB4N2QsIDB4ZmEsIDB4ZmEsCisJMHg3YSwgMHhhYywgMHhlYiwgMHgxMSwgMHg1ZCwgMHgxOSwgMHhkNywgMHhmNSwgMHhmMywgMHhmZSwgMHgyYSwgMHg5ZCwKKwkweDc3LCAweGI4LCAweGJiLCAweDllLCAweGUzLCAweDQ5LCAweGYzLCAweDQwLCAweDNhLCAweGJiLCAweDk1LCAweGVjLAorCTB4ZTgsIDB4NmMsIDB4YmEsIDB4MGYsIDB4NWEsIDB4NjcsIDB4NmQsIDB4NTgsIDB4OTgsIDB4ZjMsIDB4ZTgsIDB4ZGMsCisJMHg5YSwgMHhjNSwgMHg2MSwgMHgyZSwgMHg3OCwgMHg4YywgMHgxNywgMHgxZCwgMHhjNiwgMHhkZiwgMHgxYywgMHhlYywKKwkweDUzLCAweDkyLCAweDVjLCAweGFhLCAweGIwLCAweGZkLCAweDQyLCAweDU1LCAweGNmLCAweGI3LCAweGRlLCAweGFmLAorCTB4ZjMsIDB4ZGEsIDB4MmIsIDB4MWYsIDB4M2MsIDB4NWYsIDB4OWYsIDB4YTMsIDB4ZjMsIDB4ZDAsIDB4ZTcsIDB4NjUsCisJMHg3OSwgMHgzMSwgMHhmOCwgMHg1YywgMHhjNiwgMHhiNiwgMHg5MSwgMHhlZCwgMHhjMywgMHhkYSwgMHgyNCwgMHg2MywKKwkweDY5LCAweDBhLCAweGYzLCAweGJhLCAweDlkLCAweGY0LCAweGU2LCAweGJiLCAweGU1LCAweDkzLCAweGRmLCAweDE4LAorCTB4YjAsIDB4M2QsIDB4MmYsIDB4M2MsIDB4OWMsIDB4YTcsIDB4YjksIDB4NTQsIDB4YmEsIDB4NjMsIDB4MjAsIDB4ZDYsCisJMHgyMSwgMHhhMiwgMHg3NywgMHhjNywgMHg3MCwgMHhiZSwgMHgyNiwgMHg1ZSwgMHgxNCwgMHg2NSwgMHg1ZCwgMHhkZCwKKwkweGMzLCAweDU4LCAweDc2LCAweDllLCAweDM3LCAweDk5LCAweDc3LCAweDc2LCAweDk2LCAweGFmLCAweGM3LCAweDg0LAorCTB4YWYsIDB4NGUsIDB4NzcsIDB4YmQsIDB4YjMsIDB4ZGYsIDB4M2MsIDB4NDgsIDB4YzEsIDB4YmQsIDB4ZmUsIDB4NmIsCisJMHgzZCwgMHhkNCwgMHhlZiwgMHhiMiwgMHhkNiwgMHgzZCwgMHhmYSwgMHhkYywgMHg4ZCwgMHg4YSwgMHg5OSwgMHgzYSwKKwkweGNmLCAweDQwLCAweGQ4LCAweGVmLCAweDdlLCAweDNmLCAweDE2LCAweDNkLCAweDk5LCAweDE2LCAweDdkLCAweDUzLAorCTB4OTcsIDB4MTgsIDB4NjUsIDB4ZjYsIDB4ZDUsIDB4ODAsIDB4ZjIsIDB4MjksIDB4ZTcsIDB4ZTYsIDB4YWMsIDB4ZDQsCisJMHg5YiwgMHg5YiwgMHg0NSwgMHg2YiwgMHg4MCwgMHhkZSwgMHg5OSwgMHhmYywgMHg3ZSwgMHgyZSwgMHhjYywgMHhlMSwKKwkweGI5LCAweDc2LCAweGUzLCAweDA2LCAweGNkLCAweDdmLCAweDE5LCAweGZlLCAweDcwLCAweGY5LCAweDVlLCAweGRhLAorCTB4MjYsIDB4ZGEsIDB4ZTYsIDB4ZjAsIDB4OTUsIDB4NGYsIDB4MzMsIDB4ZmQsIDB4MDEsIDB4MzgsIDB4YWUsIDB4ZGYsCisJMHg5NywgMHhmNCwgMHgxYywgMHgwNywgMHhkMCwgMHg5ZSwgMHgzYSwgMHhlOCwgMHg3YiwgMHg5OSwgMHhlNiwgMHg3ZCwKKwkweDZkLCAweDE3LCAweGVmLCAweGI1LCAweDNlLCAweDM2LCAweGMzLCAweGY0LCAweDljLCAweGUwLCAweDNiLCAweGMxLAorCTB4ZjcsIDB4Y2QsIDB4ZmEsIDB4NTQsIDB4YzksIDB4ZjcsIDB4NDEsIDB4YmQsIDB4OWYsIDB4YmEsIDB4YmUsIDB4N2UsCisJMHhlZiwgMHhlOCwgMHhhZiwgMHhkYiwgMHgwNywgMHhkMywgMHhiMywgMHg3NCwgMHg5ZiwgMHhmYSwgMHhlOSwgMHg5OSwKKwkweDkzLCAweGQzLCAweGE3LCAweDdiLCAweGRiLCAweDNkLCAweDdkLCAweDMyLCAweGZiLCAweGQ1LCAweGZmLCAweDdmLAorCTB4ZTgsIDB4MzYsIDB4ZjcsIDB4ZDMsIDB4ODEsIDB4NzQsIDB4M2QsIDB4MWIsIDB4MWIsIDB4Y2MsIDB4OWYsIDB4YWIsCisJMHhhOSwgMHg3OSwgMHg0OSwgMHhkZiwgMHhmZiwgMHg5MCwgMHhmMCwgMHg0NSwgMHhmOSwgMHg1MSwgMHgxZCwgMHg1ZiwKKwkweDZjLCAweGVmLCAweGU4LCAweDcyLCAweDlhLCAweDdmLCAweDJmLCAweDBhLCAweGZmLCAweDhkLCAweDk5LCAweDc1LAorCTB4ZTYsIDB4NDcsIDB4ZmIsIDB4ZjcsIDB4ZGMsIDB4N2QsIDB4NGQsIDB4ODUsIDB4YzgsIDB4OTcsIDB4NTcsIDB4MjAsCisJMHg5NiwgMHgzYywgMHhlZiwgMHg2NywgMHhmMiwgMHhhZCwgMHg4YSwgMHgyZSwgMHg5NSwgMHhlMSwgMHg4MywgMHg1OCwKKwkweGQ3LCAweGM1LCAweDlmLCAweDliLCAweDIxLCAweGUzLCAweGZiLCAweGU0LCAweGVmLCAweGVmLCAweGYzLCAweDJlLAorCTB4ZjksIDB4ZjAsIDB4NWUsIDB4NGYsIDB4N2YsIDB4M2QsIDB4OGEsIDB4MzcsIDB4MjksIDB4M2EsIDB4YjYsIDB4MjAsCisJMHg3YSwgMHhmMiwgMHg4YiwgMHhjMywgMHg3YSwgMHhkNSwgMHgzZSwgMHg0YiwgMHhmYywgMHg4NSwgMHgxMSwgMHhkMSwKKwkweDk1LCAweDc2LCAweDk1LCAweGVkLCAweDdhLCAweDk1LCAweDdmLCAweGVmLCAweDRlLCAweDk2LCAweDVkLCAweGYyLAorCTB4YWIsIDB4NTcsIDB4MTksIDB4NDcsIDB4MmEsIDB4YjgsIDB4MmYsIDB4ODAsIDB4MDcsIDB4ZTcsIDB4YzgsIDB4M2QsCisJMHg1YywgMHg3NSwgMHhmOSwgMHg1ZCwgMHg1OSwgMHhiZCwgMHgyMywgMHg3YSwgMHhlNywgMHhlOSwgMHhmZSwgMHg0OSwKKwkweGJkLCAweDhmLCAweGUxLCAweGZhLCAweDg4LCAweGQyLCAweDBmLCAweGI2LCAweDk5LCAweDE3LCAweDZlLCAweDZmLAorCTB4MWUsIDB4ZGUsIDB4OTEsIDB4ZWMsIDB4OWIsIDB4NWUsIDB4YmEsIDB4ZGYsIDB4N2EsIDB4MmUsIDB4M2IsIDB4YjksCisJMHgzZSwgMHhlYiwgMHg3YiwgMHgzYSwgMHg5NSwgMHg2OCwgMHhiZCwgMHgxZCwgMHg5YiwgMHhjMywgMHg3YywgMHgzZCwKKwkweGE4LCAweDk1LCAweDk5LCAweDQ3LCAweDhjLCAweDJhLCAweDhlLCAweDUxLCAweGM2LCAweDZkLCAweDhkLCAweDI1LAorCTB4ZDEsIDB4YWYsIDB4YTUsIDB4NDUsIDB4MGEsIDB4NzMsIDB4NmUsIDB4NDksIDB4YWYsIDB4Y2YsIDB4ZDIsIDB4ZTAsCisJMHhjYywgMHg2ZiwgMHg3YywgMHg0NSwgMHhlYiwgMHhiNSwgMHhiOCwgMHhjOCwgMHhlYiwgMHhlNSwgMHhiMywgMHhiYSwKKwkweDVmLCAweDFlLCAweGQ1LCAweGJmLCAweGMyLCAweGZkLCAweDdhLCAweGVlLCAweDI2LCAweGUzLCAweGIzLCAweGYwLAorCTB4MzQsIDB4YTEsIDB4YjMsIDB4MjIsIDB4NzMsIDB4YmYsIDB4ZWEsIDB4ZGEsIDB4ODQsIDB4NDAsIDB4ZmQsIDB4MzIsCisJMHgxZSwgMHhlNSwgMHhmNywgMHhkNCwgMHg5NCwgMHg3NywgMHg3MCwgMHgyOCwgMHg3NSwgMHg4ZiwgMHhmOSwgMHhmNywKKwkweGVhLCAweGEwLCAweGY3LCAweDk5LCAweGQ2LCAweDZmLCAweGZkLCAweDllLCAweDE2LCAweDcyLCAweGJmLCAweDVmLAorCTB4YWIsIDB4MzksIDB4N2UsIDB4YmUsIDB4MzQsIDB4ODAsIDB4OWYsIDB4ODcsIDB4MDYsIDB4ZjAsIDB4M2IsIDB4YWYsCisJMHg4NywgMHg2ZCwgMHg5OSwgMHhmZiwgMHgxMiwgMHg5OCwgMHg0NSwgMHg3YSwgMHgwOCwgMHhkZCwgMHhkMiwgMHg3NSwKKwkweGJhLCAweDVmLCAweDYzLCAweDg5LCAweDdmLCAweDRmLCAweGI4LCAweGU2LCAweDcyLCAweDgxLCAweGZhLCAweGU2LAorCTB4MmUsIDB4YjMsIDB4NWYsIDB4ODksIDB4ZDcsIDB4MDMsIDB4OGQsIDB4YWYsIDB4NWQsIDB4ZTcsIDB4MzksIDB4MzMsCisJMHhlMCwgMHgzZiwgMHhkZCwgMHhkMSwgMHg5OSwgMHgwNywgMHg3OCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiBzdGF0aWMgdTggYm54Ml94aV9ydjJwX3Byb2MyW10gPSB7Ci0JLyogRGF0ZTogICAgICAgIDA0LzI1LzIwMDggMjI6MDIgKi8KKwkvKiBEYXRlOiAgICAgICAgMDYvMTcvMjAwOCAxNjo1MiAqLwogI2RlZmluZSBYSV9SVjJQX1BST0MyX01BWF9CRF9QQUdFX0xPQyAgIDUKICNkZWZpbmUgWElfUlYyUF9QUk9DMl9CRF9QQUdFX1NJWkVfTVNLCTB4ZmZmZgotI2RlZmluZSBYSV9SVjJQX1BST0MyX0JEX1BBR0VfU0laRQkoKFBBR0VfU0laRSAvIDE2KSAtIDEpCi0JMHhhZCwgMHg1OCwgMHg1YiwgMHg2YywgMHg1NCwgMHg1NSwgMHgxNCwgMHgzZCwgMHhmMywgMHhlOCwgMHhjYywgMHhlZCwKLQkweGNjLCAweDlkLCAweDk5LCAweGQyLCAweGQ2LCAweGU5LCAweDhiLCAweDQ4LCAweDY5LCAweGE1LCAweDc0LCAweDcwLAotCTB4MGEsIDB4NjUsIDB4NWEsIDB4MWUsIDB4M2UsIDB4MTIsIDB4NDksIDB4ZDEsIDB4MDIsIDB4M2UsIDB4NDIsIDB4YTksCi0JMHg4NiwgMHg5OCwgMHgxOCwgMHgwMywgMHg5ZCwgMHg0YSwgMHhlOSwgMHg0MCwgMHg0YiwgMHgyYSwgMHgyNSwgMHg3YywKLQkweGYwLCAweGUzLCAweDg0LCAweDYyLCAweGY5LCAweDk5LCAweDQ0LCAweDRiLCAweDgwLCAweDE2LCAweDYzLCAweDQ4LAotCTB4MjMsIDB4M2YsIDB4YzQsIDB4YmYsIDB4MjYsIDB4MjgsIDB4NDUsIDB4M2YsIDB4NGMsIDB4ODgsIDB4MzYsIDB4MDQsCi0JMHgzZSwgMHhjMCwgMHg0NCwgMHg2MywgMHhmYywgMHgyMSwgMHgxMiwgMHhjNCwgMHg1YSwgMHhhMCwgMHhjMSwgMHg4MiwKLQkweDM2LCAweGM2LCAweDQ4LCAweGViLCAweDNkLCAweDdiLCAweGVkLCAweDczLCAweGU3LCAweGRlLCAweGU5LCAweDJkLAotCTB4OGYsIDB4NDgsIDB4M2YsIDB4NTgsIDB4OWMsIDB4NzMsIDB4ZjcsIDB4MzksIDB4NjcsIDB4ZWYsIDB4YjUsIDB4MWYsCi0JMHg2NywgMHg5ZiwgMHgyOSwgMHgxMCwgMHg0MiwgMHg3OCwgMHg0NSwgMHg3YSwgMHg2NCwgMHg5MSwgMHg4MSwgMHgyMiwKLQkweGU4LCAweGY2LCAweDY4LCAweDA2LCAweGNjLCAweDBhLCAweDkxLCAweDU3LCAweDJhLCAweGM3LCAweGMyLCAweDJkLAotCTB4ZjgsIDB4NmYsIDB4NTksIDB4MDEsIDB4YzEsIDB4MGYsIDB4MjMsIDB4ZjIsIDB4YmIsIDB4NWYsIDB4YmMsIDB4ZTUsCi0JMHhjNiwgMHg3NywgMHhhZiwgMHg5MCwgMHgxOCwgMHgxMSwgMHgyMiwgMHgyZCwgMHhiMSwgMHg4MCwgMHgzMSwgMHhjNiwKLQkweGU4LCAweDcyLCAweDAxLCAweDRiLCAweDE4LCAweDVmLCAweDYxLCAweDE0LCAweDhjLCAweGJhLCAweDFiLCAweGU4LAotCTB4NjYsIDB4ZjQsIDB4YWEsIDB4NzksIDB4NWUsIDB4YWYsIDB4ZjEsIDB4N2MsIDB4M2IsIDB4ZTMsIDB4NzYsIDB4OWUsCi0JMHhmZiwgMHhkZCwgMHg0MCwgMHhhNSwgMHg5NywgMHgxYywgMHg0ZiwgMHhjZSwgMHg4YSwgMHhiNCwgMHg4ZSwgMHg2ZCwKLQkweDYzLCAweDZhLCAweDVlLCAweDI3LCAweDQ4LCAweGM3LCAweGEwLCAweGY3LCAweDliLCAweDk1LCAweGI0LCAweGNlLAotCTB4NDEsIDB4NGUsIDB4Y2UsIDB4ZGYsIDB4OTgsIDB4NTUsIDB4ZmIsIDB4MWQsIDB4ZjQsIDB4YzgsIDB4ZjEsIDB4MmYsCi0JMHhjNiwgMHhkOCwgMHgyNSwgMHg4NywgMHhjNSwgMHg1MSwgMHg2YywgMHg1MywgMHg1YywgMHg5YSwgMHg5MSwgMHhmYiwKLQkweDc4LCAweGM0LCAweGQwLCAweDgwLCAweDQ2LCAweGFjLCAweDFjLCAweGQ3LCAweDMxLCAweDRlLCAweDEzLCAweDFmLAotCTB4MmUsIDB4NjMsIDB4Y2MsIDB4ZmIsIDB4MzEsIDB4OTYsIDB4ODUsIDB4NzAsIDB4ZWUsIDB4ZDYsIDB4NGEsIDB4OWMsCi0JMHhmNywgMHhkMywgMHhiMywgMHg5MCwgMHg0YiwgMHg0NywgMHgxNCwgMHhhMSwgMHhmOCwgMHhiZSwgMHg0OCwgMHhmMCwKLQkweGY3LCAweGRkLCAweDcyLCAweDNjLCAweGU1LCAweDJhLCAweDcyLCAweDgxLCAweDU3LCAweGJmLCAweDUwLCAweDdhLAotCTB4NDIsIDB4ZWUsIDB4ZWEsIDB4NDAsIDB4YWUsIDB4M2MsIDB4MGQsIDB4M2YsIDB4NGYsIDB4YWYsIDB4NTAsIDB4NzYsCi0JMHgwMCwgMHhkYSwgMHg0MiwgMHhjMCwgMHhhNCwgMHgwNywgMHhiOCwgMHgyZSwgMHg0ZSwgMHg5MCwgMHg2OSwgMHg2NywKLQkweDQ3LCAweDM2LCAweGQ3LCAweDQ4LCAweDNkLCAweDBhLCAweDg1LCAweGQ3LCAweDJkLCAweGY3LCAweDViLCAweGExLAotCTB4ZjksIDB4Y2UsIDB4NjEsIDB4ZmUsIDB4NmQsIDB4ZDYsIDB4ZWIsIDB4YmQsIDB4MDAsIDB4ZjAsIDB4NDYsIDB4MjAsCi0JMHhkZiwgMHhmOCwgMHg3NywgMHg3NiwgMHhiNiwgMHgyMywgMHg2OCwgMHhiNywgMHgyYiwgMHgxZCwgMHhjNCwgMHhmYSwKLQkweDMxLCAweGRkLCAweGM5LCAweDNlLCAweGNmLCAweDAzLCAweGVjLCAweGMzLCAweGJhLCAweDA1LCAweDRiLCAweGYxLAotCTB4ZjUsIDB4ZTMsIDB4MGUsIDB4OGMsIDB4MmIsIDB4NGUsIDB4NDksIDB4MzksIDB4OWYsIDB4MTgsIDB4MWEsIDB4NzEsCi0JMHhlMiwgMHgyMywgMHg3NywgMHg3ZiwgMHgyMywgMHg0ZSwgMHgyMywgMHgzOCwgMHg0NywgMHg1NCwgMHg2OSwgMHhhNCwKLQkweDU0LCAweDNhLCAweDBlLCAweDE0LCAweDc1LCAweDhlLCAweGZjLCAweDg4LCAweGUzLCAweDRiLCAweGU0LCAweGJjLAotCTB4NWIsIDB4YjQsIDB4N2EsIDB4NzQsIDB4M2EsIDB4YTcsIDB4MzUsIDB4YTUsIDB4ZTIsIDB4MDIsIDB4ZGYsIDB4M2IsCi0JMHg3YywgMHgwNCwgMHhhNSwgMHg2ZCwgMHhmZCwgMHhkMiwgMHhkZSwgMHg4OCwgMHhkOCwgMHhlZSwgMHg4ZSwgMHg5MCwKLQkweDNjLCAweGY4LCAweGYxLCAweDY4LCAweGZhLCAweDk3LCAweDkwLCAweGZmLCAweDY2LCAweDkxLCAweDRlLCAweDM2LAotCTB4NzUsIDB4MzQsIDB4NjAsIDB4NWQsIDB4NzEsIDB4MDIsIDB4NzgsIDB4MmMsIDB4OTEsIDB4MjcsIDB4MjEsIDB4ZGUsCi0JMHhkMSwgMHg0YiwgMHhjMywgMHhlNSwgMHhkNywgMHg1NywgMHg2YSwgMHgyNCwgMHg5NywgMHhhZSwgMHg1MywgMHg3MSwKLQkweGE3LCAweGZjLCAweDI3LCAweGZkLCAweDNhLCAweDY0LCAweGM2LCAweDk5LCAweGE4LCAweDA2LCAweGJmLCAweGJmLAotCTB4MmQsIDB4OTEsIDB4ZjIsIDB4MDYsIDB4YzksIDB4NTUsIDB4MzgsIDB4MjcsIDB4YWIsIDB4OWYsIDB4MzUsIDB4NmUsCi0JMHgwNywgMHgyYywgMHg3MSwgMHhmYiwgMHg3OCwgMHhmMSwgMHhiMCwgMHg4ZSwgMHhmOCwgMHg1OSwgMHhjNywgMHgzYywKLQkweDU1LCAweDFhLCAweDNjLCAweDQ5LCAweDVjLCAweGU4LCAweDRhLCAweGQ3LCAweGQ5LCAweGZkLCAweDc0LCAweDc1LAotCTB4MjAsIDB4NDIsIDB4ZmYsIDB4YmYsIDB4ZDksIDB4NTQsIDB4NDAsIDB4M2MsIDB4NmYsIDB4YzYsIDB4ZmMsIDB4OTEsCi0JMHhlNiwgMHhiMywgMHhmMCwgMHhkMywgMHgyNiwgMHhlMiwgMHg0MywgMHgwNCwgMHgwZSwgMHg3ZCwgMHg4MSwgMHg1NSwKLQkweDZkLCAweDE0LCAweGRmLCAweGRkLCAweDhkLCAweDFkLCAweDVmLCAweDYxLCAweDljLCAweGY0LCAweGM4LCAweGYxLAotCTB4NmUsIDB4YmQsIDB4N2QsIDB4MTQsIDB4ZjIsIDB4NzksIDB4N2QsIDB4ZTAsIDB4N2QsIDB4MzMsIDB4OWYsIDB4YjIsCi0JMHhjOSwgMHg0MywgMHhmOSwgMHg5NCwgMHhmMSwgMHhmNSwgMHhkMSwgMHg1MCwgMHgxZiwgMHhhMywgMHhlZiwgMHgwNSwKLQkweGUyLCAweGYwLCAweDA4LCAweGJlLCAweGVmLCAweDA5LCAweDRhLCAweDNiLCAweGRmLCAweDM3LCAweGYzLCAweDJlLAotCTB4ZTUsIDB4YzMsIDB4ZmEsIDB4Y2MsIDB4MDAsIDB4ZjIsIDB4NjYsIDB4ZTIsIDB4OGMsIDB4MWMsIDB4NmYsIDB4OGIsCi0JMHg0ZiwgMHg0MCwgMHgzZSwgMHg5ZSwgMHhlYSwgMHhlNywgMHg4ZCwgMHhkZCwgMHhlMCwgMHhmMSwgMHhhNiwgMHgxYiwKLQkweGYyLCAweDFjLCAweGE2LCAweDAxLCAweDJmLCAweGY5LCAweGQxLCAweDI1LCAweGY0LCAweDY2LCAweGUwLCAweDg3LAotCTB4ZjQsIDB4ZmQsIDB4NWYsIDB4NTcsIDB4ODYsIDB4NzgsIDB4ZGIsIDB4MWEsIDB4ZjYsIDB4OWUsIDB4NTUsIDB4ZmMsCi0JMHgzMCwgMHg0NiwgMHg5NCwgMHg1ZCwgMHhjMCwgMHg0NywgMHhjZCwgMHg4MywgMHhmZSwgMHg3OSwgMHhmMywgMHg4MCwKLQkweGZkLCAweDE5LCAweDdiLCAweDU4LCAweDFlLCAweDAwLCAweDliLCAweDZiLCAweDgwLCAweGJlLCAweDZhLCAweDI5LAotCTB4OWYsIDB4ZmYsIDB4MTgsIDB4ZjksIDB4YzAsIDB4N2EsIDB4Y2QsIDB4YzksIDB4MzcsIDB4Y2MsIDB4NjYsIDB4ZTMsCi0JMHg5NCwgMHhjMCwgMHg4OCwgMHg0ZiwgMHg1YiwgMHhiYywgMHg3MiwgMHg3ZSwgMHgyYywgMHgzNiwgMHhmYywgMHhhMCwKLQkweGUyLCAweDRlLCAweDZlLCAweGU4LCAweDE3LCAweGJiLCAweDc5LCAweGRmLCAweDE0LCAweGYzLCAweGQxLCAweGM1LAotCTB4N2MsIDB4NGMsIDB4MzIsIDB4ZWUsIDB4MDksIDB4MmEsIDB4MWUsIDB4ODAsIDB4ODcsIDB4NzUsIDB4OWMsIDB4ZGIsCi0JMHg5YSwgMHg5MiwgMHg3ZSwgMHg1YywgMHhlYiwgMHg1MCwgMHgzZiwgMHg1NSwgMHg5ZCwgMHg4NCwgMHg5ZiwgMHg4NiwKLQkweGQ4LCAweGFmLCAweDI3LCAweGNjLCAweDdhLCAweGE5LCAweGY4LCAweDlkLCAweGFmLCAweDZlLCAweGRhLCAweGYzLAotCTB4MjksIDB4YzcsIDB4Y2UsIDB4Y2MsIDB4NzcsIDB4NTUsIDB4NTgsIDB4NWUsIDB4NTgsIDB4MGQsIDB4MzQsIDB4ZjksCi0JMHhhZCwgMHhhMSwgMHgzYywgMHgwZSwgMHg5NywgMHg4YywgMHgyYSwgMHhmYiwgMHhhNCwgMHg3ZSwgMHhiNywgMHg1NSwKLQkweDFlLCAweDg2LCAweDA3LCAweDBmLCAweDEyLCAweDA2LCAweDBhLCAweDRmLCAweGM5LCAweDczLCAweGNhLCAweDFkLAotCTB4ZWEsIDB4OGEsIDB4M2QsIDB4OWYsIDB4NzMsIDB4ZjksIDB4ZGQsIDB4MTMsIDB4YTIsIDB4NDIsIDB4ZGIsIDB4NzgsCi0JMHg3OSwgMHhkYywgMHg5ZSwgMHhiNywgMHhjOCwgMHg0ZiwgMHhiZiwgMHgxOSwgMHhkZiwgMHhjNSwgMHhhYiwgMHhkOSwKLQkweDBmLCAweDhjLCAweGQxLCAweDM1LCAweDcyLCAweGRmLCAweDE2LCAweDNlLCAweGE3LCAweDllLCAweGNmLCAweGQxLAotCTB4MmQsIDB4NzUsIDB4NDMsIDB4ZWEsIDB4NTksIDB4NjgsIDB4ZDYsIDB4MGIsIDB4MTUsIDB4MWYsIDB4ZDksIDB4YmEsCi0JMHhhMSwgMHhmYywgMHg0MCwgMHhlNywgMHhjNywgMHgyZiwgMHg4ZiwgMHhjYiwgMHhmNSwgMHgxNSwgMHgwZiwgMHhhOSwKLQkweDIzLCAweDlhLCAweGI5LCAweGRmLCAweDhmLCAweDY2LCAweDlkLCAweDkwLCAweGRmLCAweDgzLCAweGUyLCAweDI1LAotCTB4MWUsIDB4ZGEsIDB4ZWIsIDB4ZTEsIDB4MWYsIDB4NDYsIDB4M2QsIDB4MjQsIDB4M2IsIDB4MzQsIDB4ZmQsIDB4MmMsCi0JMHhkNywgMHhiZiwgMHg1ZSwgMHg3OSwgMHg0ZSwgMHgyOSwgMHhlYiwgMHg1ZCwgMHhjYSwgMHg3YSwgMHgxYiwgMHhkNywKLQkweDczLCAweDFkLCAweGQ3LCAweGM5LCAweDZkLCAweGQ2LCAweDdhLCAweGY3LCAweGNmLCAweDRjLCAweGI2LCAweDZlLAotCTB4YzksIDB4ZjEsIDB4ZGYsIDB4MzMsIDB4NzMsIDB4ZWYsIDB4NWYsIDB4NDcsIDB4NWUsIDB4ZDMsIDB4MjIsIDB4ODIsCi0JMHgzZSwgMHgyMywgMHgxZCwgMHg1MSwgMHg3ZCwgMHg0MSwgMHg2ZSwgMHhmZCwgMHhjYiwgMHhiNSwgMHgwMywgMHhiYywKLQkweGI0LCAweGI5LCAweDQzLCAweDI0LCAweDc3LCAweGFkLCAweGM3LCAweGRlLCAweDI3LCAweGEwLCAweDBlLCAweDU2LAotCTB4YmEsIDB4YTAsIDB4ZjcsIDB4NDIsIDB4ZDYsIDB4ZGIsIDB4ZDgsIDB4YWYsIDB4OGUsIDB4ZjIsIDB4NDEsIDB4YmIsCi0JMHhkNiwgMHg2MywgMHhkNSwgMHhmYiwgMHhmYSwgMHhjYywgMHhmYywgMHhlNywgMHgzOSwgMHhjNywgMHg0MSwgMHgwZiwKLQkweGRmLCAweGFmLCAweDQ5LCAweGM0LCAweGIxLCAweGQ2LCAweGZlLCAweGI1LCAweGQyLCAweDhiLCAweGNmLCAweDhmLAotCTB4MjgsIDB4M2QsIDB4NzQsIDB4ZjIsIDB4ZDMsIDB4NzgsIDB4YWYsIDB4ZGMsIDB4YTcsIDB4NDgsIDB4NzAsIDB4ZDgsCi0JMHg4OCwgMHhlZSwgMHg1YSwgMHhkNCwgMHhkZiwgMHhjOSwgMHgxZCwgMHhiMCwgMHhhMywgMHhiYiwgMHg0NiwgMHhlYSwKLQkweDYxLCAweDc4LCAweDI1LCAweDhkLCAweDNjLCAweDE3LCAweDdjLCAweDFmLCAweDdkLCAweDNiLCAweGUwLCAweGU0LAotCTB4ZDcsIDB4NGIsIDB4MmMsIDB4NTcsIDB4Y2MsIDB4ZjYsIDB4MTUsIDB4YjAsIDB4N2QsIDB4NzEsIDB4OTEsIDB4NWIsCi0JMHhlNywgMHhiNywgMHg1NSwgMHhkMiwgMHg3ZCwgMHhjMCwgMHg3MiwgMHgyZiwgMHhhYSwgMHhmYiwgMHhjMCwgMHg5MCwKLQkweDkzLCAweGZiLCAweGU0LCAweGYxLCAweDNlLCAweDRlLCAweDNjLCAweDM5LCAweGVkLCAweDMzLCAweGNhLCAweDcxLAotCTB4ZDAsIDB4YzksIDB4NzIsIDB4NWUsIDB4ODcsIDB4N2IsIDB4MDUsIDB4YTMsIDB4ZTksIDB4YTUsIDB4NzQsIDB4YWYsCi0JMHg5YywgMHgzYywgMHg0MCwgMHhmNywgMHg0MywgMHhjOCwgMHg4YywgMHg1MywgMHhiYiwgMHgxZCwgMHg2NywgMHg5ZSwKLQkweDIwLCAweGVmLCAweDUyLCAweDNlLCAweDJhLCAweDc2LCAweDg2LCAweGU3LCAweGUzLCAweGQ3LCAweDJiLCAweGE3LAotCTB4ODcsIDB4YTcsIDB4NDYsIDB4OTUsIDB4N2YsIDB4NzQsIDB4YjIsIDB4NzcsIDB4YmMsIDB4NTcsIDB4ZjUsIDB4YjEsCi0JMHg1NiwgMHhkZSwgMHhkZCwgMHgxNiwgMHhkZSwgMHgyMSwgMHhmZiwgMHg3NCwgMHhmYywgMHhmZiwgMHhmMiwgMHhlZCwKLQkweGQ0LCAweDFmLCAweDFjLCAweDlkLCAweDMxLCAweGZiLCAweDUwLCAweDlmLCAweDUzLCAweGZkLCAweDVmLCAweDYxLAotCTB4YzYsIDB4Y2IsIDB4NWUsIDB4ZWUsIDB4ZWYsIDB4YTYsIDB4NzUsIDB4ZmEsIDB4NGYsIDB4NjIsIDB4MzIsIDB4NDMsCi0JMHg0MywgMHhiZCwgMHhlYywgMHhiNCwgMHg5NCwgMHg1YiwgMHg5NiwgMHhkOCwgMHhjYiwgMHg3NiwgMHg1ZCwgMHhmNCwKLQkweGMwLCAweGVlLCAweGNlLCAweDFkLCAweDE4LCAweDVmLCAweGU2LCAweDdhLCAweDdkLCAweDk3LCAweGViLCAweGUzLAotCTB4MTYsIDB4MGQsIDB4MzgsIDB4NTksIDB4NGIsIDB4N2MsIDB4MjQsIDB4ZjYsIDB4OWUsIDB4NTMsIDB4ZmIsIDB4ZDMsCi0JMHhiZSwgMHhmYSwgMHgzNCwgMHhmMywgMHhmOSwgMHhiMiwgMHg4NywgMHhlZCwgMHhhYywgMHgyMiwgMHgzZiwgMHgyNiwKLQkweGVlLCAweDUwLCAweDNkLCAweGYwLCAweDhhLCAweGE2LCAweGM1LCAweDEyLCAweGNiLCAweDBjLCAweGRlLCAweDU4LAotCTB4OWYsIDB4MTcsIDB4ODAsIDB4YWQsIDB4N2UsIDB4YTYsIDB4MjEsIDB4OTYsIDB4ZWIsIDB4NjcsIDB4NGMsIDB4ZmIsCi0JMHhhYSwgMHg3OCwgMHg3ZCwgMHgxYiwgMHhjNiwgMHg3ZSwgMHhhZSwgMHg2NywgMHg4MywgMHhhYywgMHhkNywgMHhkMSwKLQkweDVhLCAweDYwLCAweDM4LCAweDg2LCAweDNlLCAweDYxLCAweDljLCAweGVlLCAweDg1LCAweDQ4LCAweGEyLCAweDc3LAotCTB4MTQsIDB4ZjYsIDB4NzQsIDB4YWQsIDB4ODcsIDB4YmQsIDB4ZjcsIDB4OTgsIDB4MDcsIDB4YzYsIDB4ZjAsIDB4ODksCi0JMHgzZSwgMHhiYSwgMHg3NywgMHhjMiwgMHhmZCwgMHhlOCwgMHgzMywgMHhjMiwgMHhiZSwgMHgzZSwgMHhkOCwgMHhkMSwKLQkweDM1LCAweDhkLCAweGYxLCAweGJkLCAweGU3LCAweDgwLCAweDdmLCAweDNkLCAweDhmLCAweDc1LCAweGZiLCAweDBlLAotCTB4MzAsIDB4M2YsIDB4ZWIsIDB4OWQsIDB4ZDcsIDB4NzUsIDB4ZmUsIDB4MDksIDB4YjksIDB4ZWUsIDB4NWEsIDB4NzksCi0JMHhmZSwgMHhiYiwgMHhjMywgMHhkYywgMHg3ZiwgMHg4OCwgMHgxNCwgMHhmNSwgMHgzYiwgMHhlZiwgMHhlOCwgMHhkMywKLQkweDNjLCAweGRlLCAweGM1LCAweGY3LCAweGUyLCAweDJkLCAweGVlLCAweDE3LCAweGJhLCAweDcyLCAweGZhLCAweDg1LAotCTB4MDksIDB4ZDQsIDB4ZTksIDB4ZTEsIDB4ZTksIDB4OGMsIDB4OWMsIDB4MzAsIDB4ZWEsIDB4NjUsIDB4YmUsIDB4OTMsCi0JMHg3ZiwgMHhmNSwgMHg0NCwgMHgwOSwgMHhmYiwgMHhhZCwgMHg3OCwgMHgxNSwgMHhmMCwgMHhkOCwgMHgyYSwgMHhkYywKLQkweGQ3LCAweDVkLCAweGZiLCAweDk5LCAweDlmLCAweDQ2LCAweGYyLCAweGQzLCAweGYyLCAweGE5LCAweGQxLCAweGRjLAotCTB4ZjUsIDB4MzIsIDB4N2UsIDB4M2EsIDB4OGQsIDB4ZjgsIDB4NTEsIDB4ZTcsIDB4NDAsIDB4M2UsIDB4MTksIDB4OTIsCi0JMHhmMywgMHhmNywgMHhjYywgMHhiYSwgMHgzZiwgMHg0MSwgMHg3YSwgMHg1NywgMHgwYywgMHg0ZiwgMHhkMywgMHhmYSwKLQkweDcyLCAweDUxLCAweDQ0LCAweGYxLCAweDU3LCAweDE2LCAweDllLCAweDgyLCAweDFkLCAweDg5LCAweDQxLCAweGI2LAotCTB4YmYsIDB4NjcsIDB4MmQsIDB4NzAsIDB4M2YsIDB4ZmIsIDB4NWYsIDB4ZjksIDB4ZjUsIDB4Y2EsIDB4MWEsIDB4OWQsCi0JMHhkNiwgMHg4ZCwgMHhmNywgMHhlMiwgMHgxYywgMHg5NSwgMHgzZiwgMHhiOSwgMHhmZCwgMHhiMCwgMHg4YSwgMHg4NywKLQkweGIyLCAweDA2LCAweDFhLCAweDhiLCAweGNlLCAweDdkLCAweGYyLCAweDljLCAweDkwLCAweGUxLCAweDQ3LCAweDE5LAotCTB4NDcsIDB4MDYsIDB4NDcsIDB4N2MsIDB4NWYsIDB4ZGIsIDB4ZTMsIDB4NDQsIDB4YzYsIDB4OTEsIDB4OGEsIDB4NTcsCi0JMHg2YiwgMHg3YywgMHg1OSwgMHhlMywgMHhjNywgMHgxZSwgMHgzNywgMHg2MSwgMHhiYSwgMHg1NywgMHg4YywgMHgyMiwKLQkweDkwLCAweGE2LCAweDc3LCAweDQ0LCAweDYyLCAweDcwLCAweGUwLCAweGMxLCAweGZjLCAweDlkLCAweDAwLCAweDdmLAotCTB4MDksIDB4ZDYsIDB4NWIsIDB4NGYsIDB4NTEsIDB4MWYsIDB4ZmEsIDB4OTQsIDB4ZTgsIDB4NjcsIDB4M2YsIDB4NGUsCi0JMHhkNCwgMHg3MiwgMHhkZSwgMHg1NywgMHhjMSwgMHg4ZiwgMHgzZCwgMHhjZiwgMHg0MCwgMHg5ZiwgMHgxZSwgMHhjZSwKLQkweDlmLCAweGRiLCAweGRjLCAweDVmLCAweGMwLCAweGZmLCAweDdlLCAweGJkLCAweDYzLCAweDk0LCAweGZkLCAweGNkLAotCTB4NzEsIDB4YjgsIDB4OGIsIDB4NzksIDB4YjgsIDB4MDUsIDB4MWUsIDB4NzQsIDB4YzUsIDB4NDMsIDB4Y2EsIDB4ZTQsCi0JMHg0MSwgMHhkNSwgMHgxOSwgMHhlYiwgMHgzZSwgMHg4NSwgMHg0NiwgMHgxYywgMHg0OSwgMHg1YywgMHhhMCwgMHg1ZiwKLQkweGExLCAweDNlLCAweDJjLCAweDhmLCAweGVkLCAweDM2LCAweGU0LCAweDFhLCAweGE0LCAweDdkLCAweDYxLCAweGI2LAotCTB4MmYsIDB4MjQsIDB4NzYsIDB4MmUsIDB4YjcsIDB4YWUsIDB4MGIsIDB4ZjIsIDB4YmEsIDB4ODAsIDB4YjEsIDB4MGUsCi0JMHhmMywgMHhjOCwgMHg1MywgMHg3ZCwgMHgxZSwgMHg3ZSwgMHgyNSwgMHg4ZiwgMHg2YSwgMHhkZiwgMHhkYywgMHg3YywKLQkweGI0LCAweGYyLCAweDQ5LCAweDE1LCAweDlhLCAweGZlLCAweDUwLCAweDg3LCAweDBjLCAweGJmLCAweDUxLCAweGJkLAotCTB4ZDIsIDB4Y2QsIDB4ZmEsIDB4NzMsIDB4OTcsIDB4ZWEsIDB4NzksIDB4ZTAsIDB4NjQsIDB4MzcsIDB4ZWEsIDB4YzUsCi0JMHhjOSwgMHhlZSwgMHhkMywgMHg3YywgMHhmZiwgMHgzMiwgMHgyZiwgMHgyZCwgMHhmNCwgMHg2ZSwgMHgzMCwgMHhiOCwKLQkweGFiLCAweGIyLCAweGQ3LCAweDFmLCAweGJiLCAweDFlLCAweDE1LCAweDE2LCAweDNkLCAweGQ0LCAweGI5LCAweDBmLAotCTB4ZWIsIDB4MGYsIDB4ZDAsIDB4OWYsIDB4NmUsIDB4YTAsIDB4ZmUsIDB4NDAsIDB4MzMsIDB4ZmIsIDB4NmMsIDB4ZmIsCi0JMHgzZCwgMHg3MiwgMHhlYiwgMHhmZSwgMHhlMywgMHhkZSwgMHgyMywgMHg1YiwgMHgxYSwgMHhhYywgMHhlNywgMHhjNSwKLQkweGM0LCAweGQ4LCAweDA4LCAweGNlLCAweDY5LCAweGUxLCAweDdiLCAweDdiLCAweDNiLCAweGU3LCAweGY3LCAweGI1LAotCTB4NDAsIDB4ODQsIDB4Y2UsIDB4NGQsIDB4YmUsIDB4NDYsIDB4ZjYsIDB4OGEsIDB4NjgsIDB4MTAsIDB4ZjYsIDB4MjUsCi0JMHg1ZiwgMHhjNywgMHhmNywgMHg2NCwgMHgwOCwgMHhmMywgMHhlNSwgMHgyMSwgMHhmYywgMHgzZSwgMHhkMCwgMHhlMiwKLQkweGQ3LCAweDQ5LCAweGJlLCAweDNjLCAweDA0LCAweDhjLCAweDcyLCAweDVkLCAweDE4LCAweDMzLCAweGRmLCAweDExLAotCTB4YzAsIDB4MjEsIDB4ZGYsIDB4N2MsIDB4ZWYsIDB4MDgsIDB4YmMsIDB4YzcsIDB4Y2UsIDB4ZmIsIDB4NTAsIDB4MzcsCi0JMHg0NCwgMHgwYywgMHhmZCwgMHg3MywgMHg1MywgMHg4ZCwgMHg0ZSwgMHhkZiwgMHg1YiwgMHg2MywgMHhiOCwgMHg5ZiwKLQkweDUxLCAweDk3LCAweGU3LCAweGRhLCAweDU1LCAweDgxLCAweDc4LCAweDJkLCAweGNmLCAweGJlLCAweDM3LCAweGFjLAotCTB4ZWYsIDB4MTIsIDB4M2QsIDB4MzEsIDB4NjgsIDB4ZjYsIDB4ZmQsIDB4NzYsIDB4M2QsIDB4OTAsIDB4NjcsIDB4NzIsCi0JMHg3ZiwgMHgxYSwgMHgxYSwgMHhmZCwgMHhmNSwgMHhhMywgMHhiYywgMHg0NywgMHgzYywgMHhkYywgMHhhZiwgMHhkZCwKLQkweDk5LCAweDQ1LCAweGJjLCAweDE2LCAweDg5LCAweDBiLCAweDIzLCAweGUwLCAweDYxLCAweDZjLCAweGM0LCAweDI5LAotCTB4OGYsIDB4YTUsIDB4MWUsIDB4ZWEsIDB4MWMsIDB4ZDgsIDB4YTUsIDB4ZWMsIDB4Y2MsIDB4OWUsIDB4MGIsIDB4YmQsCi0JMHg3NiwgMHhiMCwgMHhmZSwgMHhiZiwgMHhkMiwgMHhlZiwgMHgxNywgMHg1MSwgMHhiNiwgMHg1NywgMHhlZSwgMHg4YiwKLQkweGY5LCAweDhkLCAweGY0LCAweDZlLCAweGNhLCAweDEzLCAweDY5LCAweDczLCAweDZjLCAweDdmLCAweGNmLCAweGI0LAotCTB4OTAsIDB4NWUsIDB4ODUsIDB4N2MsIDB4YWYsIDB4NDcsIDB4MmQsIDB4ZmQsIDB4MDcsIDB4ZTQsIDB4OGIsIDB4ZWIsCi0JMHg4MSwgMHhjNywgMHhlYSwgMHg5NSwgMHhkZiwgMHg5NCwgMHg3ZiwgMHg5NSwgMHgzZiwgMHhlMSwgMHhmNywgMHhlOCwKLQkweDRhLCAweDEyLCAweDZiLCAweDRjLCAweGFlLCAweGE0LCAweDg0LCAweGFmLCAweDRmLCAweDRlLCAweGE5LCAweDdiLAotCTB4MWUsIDB4ZWIsIDB4YjcsIDB4YzQsIDB4YTUsIDB4ZmMsIDB4MDcsIDB4ZTIsIDB4ZmIsIDB4MzgsIDB4MmUsIDB4ZDYsCi0JMHg5ZiwgMHgxOSwgMHhiMywgMHhmZCwgMHhiZCwgMHhlMCwgMHgzZiwgMHhlYiwgMHgzYiwgMHhjMSwgMHgyMywgMHhjZSwKLQkweGU3LCAweGYxLCAweDc0LCAweDgzLCAweGVhLCAweDdiLCAweGU3LCAweDdiLCAweGVmLCAweDQ4LCAweDNiLCAweDNlLAotCTB4YmEsIDB4OWYsIDB4ZGIsIDB4NDcsIDB4NjcsIDB4ZmIsIDB4NjAsIDB4NjUsIDB4YWYsIDB4NWMsIDB4NTcsIDB4Y2YsCi0JMHg3MSwgMHhhYywgMHg4OSwgMHhhNiwgMHgwZCwgMHhmOCwgMHg3ZCwgMHgyMywgMHhlYywgMHg0NywgMHhkZSwgMHg4NCwKLQkweGZkLCAweDRlLCAweGVmLCAweDUyLCAweDIzLCAweDhlLCAweGYyLCAweGE5LCAweDYwLCAweDJjLCAweDJjLCAweGNjLAotCTB4MjcsIDB4ZmIsIDB4OGUsIDB4NWMsIDB4YmMsIDB4NDQsIDB4NjIsIDB4OWYsIDB4MGQsIDB4MDYsIDB4MzEsIDB4NWYsCi0JMHhkMiwgMHg4NCwgMHg2MywgMHhiYywgMHgxNCwgMHhmNywgMHgxZSwgMHg3MSwgMHgwOCwgMHg3OSwgMHhmMSwgMHhlOSwKLQkweDMxLCAweGUwLCAweDI3LCAweGUyLCAweDU1LCAweGVjLCAweDUzLCAweDc4LCAweDkwLCAweGVlLCAweDUzLCAweGFkLAotCTB4MDQsIDB4MzQsIDB4NjcsIDB4MDYsIDB4MzksIDB4ZGUsIDB4NGIsIDB4ZGQsIDB4ZjQsIDB4ZmIsIDB4ZTIsIDB4YWMsCi0JMHgwOCwgMHg0OSwgMHhmNCwgMHg5OSwgMHhmOSwgMHg4YiwgMHhiOCwgMHhmNiwgMHg1YSwgMHhmYywgMHhmZiwgMHhhOCwKLQkweDcxLCAweDRlLCAweGY1LCAweGM5LCAweDg4LCAweDYzLCAweDZjLCAweGMzLCAweGYxLCAweGFlLCAweGU1LCAweGM2LAotCTB4YmIsIDB4ZTIsIDB4YTksIDB4ZDQsIDB4ZWQsIDB4MTgsIDB4ZGYsIDB4YWIsIDB4ZTcsIDB4YzYsIDB4YjcsIDB4ZDIsCi0JMHg0ZiwgMHhmMiwgMHg3ZCwgMHhkNywgMHhiYywgMHgzZiwgMHhlNywgMHhlZSwgMHg4ZiwgMHhmNywgMHhkMywgMHg4NSwKLQkweDI3LCAweDE2LCAweGRmLCAweGMwLCAweDhkLCAweGQ1LCAweGYyLCAweGZjLCAweDkyLCAweDM5LCAweDdkLCAweDcyLAotCTB4NmUsIDB4ZmUsIDB4YTEsIDB4ZGUsIDB4YmQsIDB4NjEsIDB4YzQsIDB4YzMsIDB4N2YsIDB4NjksIDB4NGEsIDB4NzcsCi0JMHg4ZiwgMHhjOCwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCB9OworI2RlZmluZSBYSV9SVjJQX1BST0MyX0JEX1BBR0VfU0laRQkoKEJDTV9QQUdFX1NJWkUgLyAxNikgLSAxKQorCTB4YWQsIDB4NTgsIDB4NGQsIDB4NGMsIDB4NTQsIDB4NTcsIDB4MTQsIDB4YmUsIDB4ZjMsIDB4YzMsIDB4Y2MsIDB4MzAsCisJMHhiYywgMHg5OSwgMHg0MSwgMHg5OCwgMHgwZSwgMHg3ZiwgMHhhNiwgMHgyMiwgMHgyOCwgMHg4MiwgMHgxZCwgMHgxNCwKKwkweDA2LCAweGQ0LCAweGI2LCAweDM2LCAweGE5LCAweGMxLCAweDA2LCAweGI1LCAweGI1LCAweDExLCAweDY5LCAweDYzLAorCTB4YmEsIDB4NjgsIDB4OGEsIDB4NjAsIDB4NDUsIDB4MDYsIDB4YzEsIDB4MTAsIDB4MzEsIDB4MmUsIDB4ZGMsIDB4NzQsCisJMHgwMiwgMHgxNiwgMHhiYiwgMHg5OCwgMHg4NSwgMHg5OCwgMHhlMiwgMHg2MCwgMHhkMywgMHgxOCwgMHg1MiwgMHgzNywKKwkweGE2LCAweDNiLCAweDkyLCAweGI2LCAweDYyLCAweGJiLCAweDMwLCAweDMxLCAweDJkLCAweGIxLCAweGI2LCAweDg5LAorCTB4MzYsIDB4YjEsIDB4N2YsIDB4OWIsIDB4YTYsIDB4YTYsIDB4NWEsIDB4OGEsIDB4NGEsIDB4MmQsIDB4ZGEsIDB4YjIsCisJMHhhYSwgMHhkMCwgMHg3NywgMHhjZiwgMHg3NywgMHhlZSwgMHg5YiwgMHgzNywgMHgzMywgMHg2ZiwgMHg0NCwgMHg1MywKKwkweGQ5LCAweDFjLCAweGVlLCAweDdkLCAweGU3LCAweDllLCAweDdiLCAweGNlLCAweDc3LCAweDdlLCAweGVmLCAweGU0LAorCTB4MGIsIDB4MjEsIDB4OWMsIDB4MjIsIDB4MzYsIDB4YmUsIDB4NGMsIDB4YTcsIDB4NjIsIDB4ODksIDB4ZGQsIDB4ZTEsCisJMHhkMSwgMHhjOSwgMHg4MiwgMHgxMCwgMHgzOSwgMHhjNSwgMHg3MiwgMHgyZCwgMHhlYywgMHg4MiwgMHhmZiwgMHg1NiwKKwkweGU3LCAweDEzLCAweGI5LCAweDM2LCAweDJlLCAweGJmLCAweGJiLCAweGM1LCAweGViLCAweDc2LCAweDdjLCAweDc3LAorCTB4MGEsIDB4NDksIDB4MDMsIDB4NDIsIDB4YzQsIDB4MjQsIDB4Y2QsIDB4NjcsIDB4YmEsIDB4OWQsIDB4ZTksIDB4NGEsCisJMHgxYiwgMHhlOCwgMHg0NiwgMHhhNiwgMHg1MSwgMHhhNiwgMHgyYiwgMHg5OCwgMHhkNiwgMHhkYiwgMHg0MSwgMHg1NywKKwkweDMxLCAweGFkLCAweGU2LCAweDdkLCAweDhkLCAweGNmLCAweGQ3LCAweGYyLCAweGZlLCAweDdiLCAweDRjLCAweDhmLAorCTB4ZjIsIDB4YmUsIDB4YTYsIDB4ZjMsIDB4MjksIDB4YmQsIDB4ZTQsIDB4N2EsIDB4NjYsIDB4NDEsIDB4YzQsIDB4ZjQsCisJMHgzMywgMHg0MiwgMHhkZiwgMHhhZSwgMHg1MSwgMHhmYiwgMHgxYSwgMHg5MSwgMHg1OCwgMHgwZCwgMHhmNCwgMHg3ZSwKKwkweGFkLCAweDVjLCAweGYyLCAweGZkLCAweDYxLCAweGMxLCAweDI3LCAweGY3LCAweDZmLCAweDJlLCAweDI4LCAweDc5LAorCTB4MDMsIDB4MGUsIDB4YjksIDB4ZmUsIDB4NTUsIDB4NWYsIDB4ZGIsIDB4ZTQsIDB4MzIsIDB4MTgsIDB4ODIsIDB4OTgsCisJMHg2MCwgMHg3MSwgMHg1YywgMHhjYSwgMHg3MSwgMHg4OCwgMHhkMSwgMHg2MSwgMHgwZiwgMHhhMSwgMHg3MiwgMHg1MiwKKwkweGMzLCAweDNhLCAweDQ2LCAweDc4LCAweGQ4LCAweGY0LCAweDM1LCAweGNiLCAweDYzLCAweDVhLCAweGUyLCAweGMzLAorCTB4YmQsIDB4YmIsIDB4Y2EsIDB4NzEsIDB4ZGYsIDB4OGYsIDB4Y2YsIDB4ODAsIDB4MmYsIDB4MTYsIDB4NTAsIDB4ODAsCisJMHhlMiwgMHhmYiwgMHgzMiwgMHhjMSwgMHhkZiwgMHhmNywgMHhjYiwgMHhmNSwgMHhhYywgMHhhZCwgMHhkMCwgMHgwNiwKKwkweDVjLCAweGRkLCAweGNjLCAweDY1LCAweGNmLCAweDkxLCAweGZiLCAweGNiLCAweDFiLCAweDRmLCAweDBlLCAweDgzLAorCTB4YmYsIDB4YWQsIDB4MWMsIDB4ZmIsIDB4NGYsIDB4ODcsIDB4YTUsIDB4M2MsIDB4OTcsIDB4ODgsIDB4MzEsIDB4MTUsCisJMHhiNSwgMHhhNCwgMHg5NywgMHgyZCwgMHg1NiwgMHg5YiwgMHgyYSwgMHhmZiwgMHg5NywgMHg2MSwgMHhhYywgMHhkYSwKKwkweDdkLCAweDkwLCAweGViLCAweDRkLCAweDkxLCAweDFiLCAweGNhLCAweDkwLCAweGZiLCAweDUzLCAweGFlLCAweDU5LAorCTB4YmUsIDB4ZGYsIDB4MDYsIDB4ZjksIDB4ZGUsIDB4NDUsIDB4ZTUsIDB4NzcsIDB4ZjgsIDB4NDAsIDB4MGIsIDB4YzMsCisJMHg1NiwgMHhmNywgMHhlNCwgMHgyZSwgMHhhMiwgMHg3ZiwgMHhmNywgMHhhMiwgMHhmMiwgMHg4ZiwgMHgxOCwgMHhmYSwKKwkweDJiLCAweGZmLCAweGE5LCAweGVmLCAweGU5LCAweDM4LCAweGQyLCAweGYyLCAweGUzLCAweGQ4LCAweDVhLCAweDE2LAorCTB4YjMsIDB4NWEsIDB4ZDksIDB4Y2YsIDB4N2EsIDB4M2EsIDB4NDAsIDB4MzcsIDB4ODUsIDB4ODksIDB4YzQsIDB4ZjcsCisJMHg3MCwgMHg4MCwgMHgzNywgMHg1NywgMHhjOSwgMHhmYiwgMHgwYiwgMHg4NCwgMHhkMywgMHgyZSwgMHhlNSwgMHhkNSwKKwkweDc5LCAweDVjLCAweGU3LCAweGIxLCAweGZmLCAweDA2LCAweGZiLCAweGViLCAweDZkLCAweDM2LCAweGU4LCAweGE2LAorCTB4NTcsIDB4MDIsIDB4YjQsIDB4YjAsIDB4ZDAsIDB4OTksIDB4YzcsIDB4ZjIsIDB4ZDksIDB4ZGYsIDB4YjEsIDB4M2MsCisJMHg5YywgMHg5ZiwgMHhkNCwgMHhhNCwgMHg5ZSwgMHg1ZiwgMHhlYiwgMHhmMSwgMHg2MywgMHhlNSwgMHg3ZiwgMHhjNywKKwkweDQzLCAweGZjLCAweDhmLCAweGYzLCAweDRiLCAweDU2LCAweGUxLCAweGViLCAweGYxLCAweDRlLCAweGFjLCAweGNiLAorCTB4Y2UsIDB4ZTQsIDB4MTMsIDB4NGUsIDB4YTMsIDB4ZTMsIDB4NTYsIDB4ZjEsIDB4OTIsIDB4MmUsIDB4NWYsIDB4Y2YsCisJMHhlMywgMHgwMCwgMHhlZSwgMHgxMSwgMHgxNSwgMHgxZSwgMHg1MiwgMHgwZSwgMHhmOCwgMHhlYSwgMHgzYywgMHhiNSwKKwkweDk2LCAweDM4LCAweDg5LCAweDkzLCAweDJiLCAweGU1LCAweGJlLCAweDVkLCAweGI0LCAweDNhLCAweDM0LCAweGJhLAorCTB4YTcsIDB4MzUsIDB4YWEsIDB4ZjIsIDB4MDYsIDB4ZGYsIDB4M2IsIDB4NWQsIDB4NDQsIDB4OGEsIDB4ZGIsIDB4ODcsCisJMHhhNCwgMHhkZCwgMHgwMSwgMHhiMSwgMHhkYiwgMHgxZSwgMHgyMCwgMHg3ZSwgMHhlMCwgMHhlNCwgMHhmMCwgMHg2OCwKKwkweDlmLCAweDgxLCAweGZmLCAweGMyLCAweDMyLCAweDhkLCAweDZjLCAweGVhLCAweDZjLCAweGMwLCAweGI5LCAweDYwLAorCTB4MDQsIDB4NzQsIDB4MjQsIDB4OTIsIDB4MjMsIDB4NDksIDB4YjgsIDB4YjMsIDB4OWYsIDB4OTYsIDB4NmIsIDB4N2UsCisJMHhhYiwgMHhmNywgMHgxMCwgMHg1ZiwgMHhhYywgMHg1NiwgMHhlNSwgMHhhNSwgMHhmMiwgMHhhMywgMHhjNCwgMHhlZCwKKwkweDkwLCAweDkxLCAweDg3LCAweGEyLCAweDEyLCAweDM4LCAweGZmLCAweGJlLCAweDUyLCAweGYyLCAweGViLCAweDYwLAorCTB4NTcsIDB4ZTAsIDB4OWUsIDB4YTQsIDB4N2UsIDB4ZTYsIDB4YmMsIDB4ZWUsIDB4MzUsIDB4ZTUsIDB4ZjUsIDB4ZTMsCisJMHhjNSwgMHhjNSwgMHgyNiwgMHhjMiwgMHg2NywgMHgxMywgMHhlMywgMHg1NCwgMHhjZSwgMHg3MSwgMHhiOCwgMHhkNCwKKwkweDIyLCAweDBlLCAweDAzLCAweGY0LCAweGZmLCAweGFkLCAweGE2LCAweDdjLCAweGMyLCAweDc5LCAweDA3LCAweGY2LAorCTB4NGYsIDB4MzQsIDB4OWYsIDB4ODMsIDB4OWYsIDB4YjYsIDB4MTEsIDB4MWUsIDB4YzIsIDB4N2IsIDB4ZjQsIDB4NTMsCisJMHg5YywgMHg2YSwgMHhhNywgMHhmYywgMHhlZiwgMHg2ZCwgMHhlYywgMHhmYywgMHgxYywgMHhlYiwgMHgwZSwgMHg4NywKKwkweDVjLCAweGVmLCAweGQ3LCAweGY2LCAweDRjLCAweDgwLCAweDNmLCAweDY3LCAweDEwLCAweGI4LCAweGVmLCAweGUwLAorCTB4NWIsIDB4YjYsIDB4MzksIDB4YTgsIDB4ZGUsIDB4YzQsIDB4NWQsIDB4ODMsIDB4YjQsIDB4ZDQsIDB4MjYsIDB4ZTksCisJMHg3YiwgMHhiZSwgMHgzOCwgMHgzNiwgMHg4ZSwgMHhlZiwgMHgwNywgMHhmMiwgMHhhNCwgMHg5ZCwgMHhhZiwgMHgxYSwKKwkweDc1LCAweDI5LCAweGVhLCAweGMyLCAweGY5LCAweGY4LCAweDMwLCAweGVhLCAweGNhLCAweGY0LCAweDI3LCAweDcyLAorCTB4ZGQsIDB4MTYsIDB4OWUsIDB4MDYsIDB4N2YsIDB4MzgsIDB4M2EsIDB4YzQsIDB4ODIsIDB4ZWQsIDB4YzAsIDB4ZjEsCisJMHg5NiwgMHgxZCwgMHhmYywgMHgxYywgMHhhZSwgMHg1ZSwgMHgyNywgMHhmOSwgMHhkMSwgMHgyNiwgMHhiNCwgMHg2NiwKKwkweGQwLCAweDc3LCAweGU5LCAweGZiLCAweGJmLCAweGI2LCAweDM4LCAweGUxLCAweGI2LCAweGNiLCAweGVmLCAweDNjLAorCTB4YTcsIDB4ZjAsIDB4NjEsIDB4MWEsIDB4NTAsIDB4NzYsIDB4ODEsIDB4M2UsIDB4NmEsIDB4M2UsIDB4MGMsIDB4NjksCisJMHhkOSwgMHhmMiwgMHg4MCwgMHhmZCwgMHg1OSwgMHhiMywgMHg1OCwgMHgxZSwgMHg4MCwgMHgzNiwgMHg1NywgMHg4MSwKKwkweGJhLCAweDJhLCAweGE5LCAweDllLCAweDNjLCAweDQ2LCAweDNlLCAweGIwLCAweDVlLCAweDE5LCAweGY5LCAweDg2LAorCTB4ZGQsIDB4NjQsIDB4OWMsIDB4MTIsIDB4ZDEsIDB4ZTMsIDB4MzMsIDB4MjUsIDB4NWUsIDB4MzksIDB4M2YsIDB4OTYsCisJMHhlYiwgMHg3ZSwgMHg1MCwgMHg3MSwgMHgyNywgMHgwNSwgMHhiYSwgMHhjNSwgMHg3ZSwgMHg5NiwgMHgxYiwgMHg2NSwKKwkweDNjLCAweDdhLCAweDE4LCAweDhmLCAweDE5LCAweGE2LCAweDA3LCAweGYyLCAweDE0LCAweDBlLCAweGEwLCAweGM3LAorCTB4MzQsIDB4ZGMsIDB4ZGIsIDB4MWEsIDB4OTUsIDB4N2UsIDB4MGMsIDB4NWEsIDB4ZjQsIDB4MTcsIDB4ZDUsIDB4NDcsCisJMHhlMCwgMHhhNywgMHg1MSwgMHhmNiwgMHhlYiwgMHgyOSwgMHhhMywgMHg5ZiwgMHgyOCwgMHg3YywgMHhiMywgMHhmNSwKKwkweDk1LCAweGQ0LCAweDdjLCAweDRhLCAweGIzLCAweDMzLCAweGZlLCAweDU1LCAweDA1LCAweDhlLCAweDE3LCAweDU0LAorCTB4ODIsIDB4MWEsIDB4ZjgsIDB4NTYsIDB4NTEsIDB4MWUsIDB4ZmIsIDB4OGIsIDB4MjYsIDB4OTQsIDB4N2QsIDB4NTIsCisJMHhiZiwgMHgzYiwgMHgyYSwgMHgwZiwgMHhmZCwgMHg4OSwgMHgwMSwgMHhhMiwgMHhkZSwgMHg4MiwgMHgzMywgMHhmMiwKKwkweDllLCAweDUyLCAweDhiLCAweGJhLCAweDkyLCAweDlhLCAweGNmLCAweGU5LCAweGY4LCAweDFlLCAweGYwLCAweDUxLAorCTB4YzEsIDB4NmQsIDB4YmMsIDB4MzIsIDB4OTUsIDB4OWEsIDB4YjcsIDB4YzgsIDB4NGYsIDB4YjcsIDB4MTEsIDB4ZGYsCisJMHhjMSwgMHhmNSwgMHhlYywgMHgwNywgMHhhNiwgMHhhMSwgMHgwZCwgMHg1MiwgMHg2ZSwgMHgwYiwgMHhkZiwgMHg1MywKKwkweGM3LCAweGY3LCAweDY4LCAweGE2LCAweGJhLCAweDIxLCAweGY1LCAweGZjLCAweDczLCAweDVlLCAweGQ1LCAweDBiLAorCTB4MTUsIDB4MWYsIDB4YzksIDB4YmEsIDB4YTEsIDB4ZmMsIDB4NDAsIDB4ZjcsIDB4ODcsIDB4YWYsIDB4NGMsIDB4YzksCisJMHhmMywgMHg2NSwgMHg4YiwgMHhkNCwgMHg5MSwgMHgxYiwgMHg4NiwgMHhiYywgMHhlZiwgMHg4ZCwgMHgzYSwgMHgyMSwKKwkweGJmLCAweGU3LCAweDg5LCAweDE3LCAweDc5LCAweDk5LCAweDVhLCAweDBmLCAweGZmLCAweGQyLCAweGViLCAweDIxLAorCTB4ZDksIDB4ZTEsIDB4ZDEsIDB4Y2UsIDB4NzEsIDB4ZmQsIDB4ZWIsIDB4OTcsIDB4ZjcsIDB4MTQsIDB4YjMsIDB4ZGUsCisJMHhjNSwgMHhhYSwgMHhhZiwgMHhlOSwgMHg3YSwgMHg3MywgMHg5ZCwgMHg2YywgMHgzMywgMHhkNywgMHhiYiwgMHgxZiwKKwkweGU2LCAweDkzLCAweDc1LCAweDRiLCAweGFlLCAweGFmLCAweGNkLCAweDY3LCAweGNlLCAweDI3LCAweDk2LCAweGI4LAorCTB4YzYsIDB4NDQsIDB4MDAsIDB4NzMsIDB4NTgsIDB4MmMsIDB4MjAsIDB4Y2YsIDB4ZTUsIDB4ZDgsIDB4MzIsIDB4ZWIsCisJMHg1ZiwgMHhiYSwgMHgxZCwgMHhjMCwgMHhhNSwgMHhkZCwgMHhlZSwgMHgyMywgMHhiZSwgMHhlYiwgMHg3ZCwgMHhmMiwKKwkweGRjLCAweGI0LCAweDUwLCAweGY2LCAweGEyLCAweDBlLCAweDk2LCAweDczLCAweGJmLCAweDVmLCAweGNhLCAweDdhLAorCTB4ZWIsIDB4ZjIsIDB4NmEsIDB4MjksIDB4MWYsIDB4M2MsIDB4ZDcsIDB4ZmIsIDB4Y2MsIDB4N2EsIDB4NWYsIDB4OTgsCisJMHhjZiwgMHg3ZSwgMHg5ZiwgMHg3NSwgMHgxYywgMHhmNCwgMHg3MSwgMHg5ZiwgMHhlNSwgMHgzOSwgMHhjMSwgMHhiMywKKwkweGU3LCAweDBiLCAweGE1LCAweDE3LCAweGRmLCAweDFmLCAweDUwLCAweDdhLCAweDY4LCAweGU0LCAweGE3LCAweGE5LAorCTB4N2UsIDB4MjksIDB4YTcsIDB4NTAsIDB4NzAsIDB4ZDgsIDB4ODgsIDB4ZGUsIDB4NmEsIDB4ZDQsIDB4ZGYsIDB4OTksCisJMHhiZCwgMHhiMCwgMHhhMywgMHhiNywgMHg0YSwgMHhlYSwgMHhhMSwgMHg3YiwgMHgyNSwgMHg4NiwgMHgzYywgMHgxNywKKwkweGRjLCAweDhmLCAweGJlLCAweDFjLCAweGI2LCAweGYyLCAweGViLCAweGI3LCAweGNjLCAweDE3LCAweDY0LCAweGZiLAorCTB4ZjIsIDB4ZDksIDB4YmUsIDB4YjAsIDB4NDgsIDB4YWYsIDB4ZjMsIDB4NmQsIDB4ZTUsIDB4ZDQsIDB4MGYsIDB4OTgsCisJMHhlZiwgMHgwNSwgMHhkNSwgMHgwZiwgMHg3NCwgMHgzZSwgMHhjMiwgMHg5OSwgMHhlNSwgMHg1OCwgMHhlMSwgMHg2NCwKKwkweDI1LCAweDY3LCAweDgyLCAweGUzLCAweGEwLCAweDhiLCAweGY5LCAweDljLCAweDU5LCAweGU3LCAweDliLCAweGI5LAorCTB4NTUsIDB4ZDQsIDB4NTcsIDB4NGUsIDB4MWYsIDB4YTEsIDB4ZmUsIDB4ZTAsIDB4MzMsIDB4ZTIsIDB4MzQsIDB4ZDUsCisJMHg4ZSwgMHhlMywgMHg0ZiwgMHgxMCwgMHg3NywgMHg5YSwgMHhmZiwgMHhjNCwgMHgzZSwgMHg3ZiwgMHgzNiwgMHg3YywKKwkweDlkLCAweDcyLCAweDdiLCAweDZjLCAweDc2LCAweDQyLCAweGY5LCAweDQ3LCAweDIzLCAweDdiLCAweGE3LCAweGZhLAorCTB4ZDUsIDB4OWMsIDB4NmYsIDB4YzYsIDB4ZGQsIDB4NmUsIDB4YzIsIDB4MWQsIDB4ZmMsIDB4OTgsIDB4ZWYsIDB4ZmUsCisJMHgwZiwgMHhkZSwgMHg1NiwgMHhmMywgMHg0MSwgMHg5ZiwgMHg5MSwgMHg5ZiwgMHgwMywgMHgyZSwgMHhhYiwgMHhmYSwKKwkweGJmLCAweGQ2LCAweDg4LCAweDk3LCAweDgzLCAweDNjLCAweGU3LCAweGNkLCAweDY5LCAweGY0LCAweDRmLCAweDY0LAorCTB4MjYsIDB4NGUsIDB4NGIsIDB4YWQsIDB4ZTQsIDB4YWMsIDB4ZTQsIDB4NWIsIDB4MWQsIDB4MzksIDB4YzgsIDB4NzYsCisJMHg1ZCwgMHg3NiwgMHhjMCwgMHhlZSwgMHhhZSwgMHhiZCwgMHg1OCwgMHg1ZiwgMHhlMSwgMHg3YSwgMHg3ZCwgMHg4ZiwKKwkweGViLCAweGUzLCAweDRlLCAweDBmLCAweGU4LCAweDRjLCAweDM1LCAweGUxLCAweDExLCAweDM5LCAweDc4LCAweDVlLAorCTB4YzksIDB4MjcsIDB4YjksIDB4ZGEsIDB4MWMsIDB4ZTMsIDB4ZjksIDB4OTIsIDB4ODMsIDB4ZWQsIDB4YWMsIDB4MjAsCisJMHgzZiwgMHg0NiwgMHhlZSwgMHg1MiwgMHgzZCwgMHg3MCwgMHg4YSwgMHhhNiwgMHhlNSwgMHg5MiwgMHg5NiwgMHhlOCwKKwkweGI4LCAweGIxLCAweDNlLCAweDFiLCAweDQxLCAweDViLCAweGQ1LCAweDgwLCAweDVmLCAweDkzLCAweGVlLCAweDY3LAorCTB4NmMsIDB4YmIsIDB4MmEsIDB4ZjgsIDB4N2MsIDB4M2IsIDB4ZDYsIDB4NmUsIDB4YWUsIDB4NjcsIDB4MDksIDB4ZDYsCisJMHhlYiwgMHhmZCwgMHg2YSwgMHg1MCwgMHg3ZiwgMHgwZCwgMHhlNiwgMHg4NCwgMHgyOSwgMHhlYSwgMHgwYiwgMHg4MSwKKwkweDQ4LCAweGZmLCAweDA0LCAweGVjLCAweGU5LCAweGQ5LCAweDBjLCAweDdiLCAweGVmLCAweDMzLCAweDBlLCAweDRjLAorCTB4ZmQsIDB4YTcsIDB4MDYsIDB4YTksIDB4ZWYsIDB4ZjgsIDB4ODcsIDB4MzAsIDB4NjcsIDB4ZjgsIDB4NWQsIDB4ODMsCisJMHhiMCwgMHhhMywgMHg2NywgMHgwZSwgMHhlYiwgMHhmYiwgMHhjZiwgMHg4MSwgMHhmZSwgMHhmMywgMHgzYywgMHhjZSwKKwkweDFkLCAweDNhLCAweGMyLCAweGY4LCAweDZjLCAweGI2LCAweDNlLCAweGQ3LCAweGY1LCAweDM3LCAweGY4LCAweDdhLAorCTB4YWIsIDB4ZTUsIDB4ZmQsIDB4NmYsIDB4OGQsIDB4ZjEsIDB4ZmMsIDB4MjEsIDB4YTIsIDB4MzQsIDB4ZWYsIDB4YmMsCisJMHhhOSwgMHhjZCwgMHhmMSwgMHhiYSwgMHg5YiwgMHhmYiwgMHhlMiwgMHg2ZCwgMHg5ZSwgMHgxNywgMHg3YSwgMHhkMiwKKwkweGU2LCAweDg1LCAweDY5LCAweGQ0LCAweGU5LCAweGIxLCAweGI5LCAweGI4LCAweGRjLCAweGQwLCAweGViLCAweDY1LAorCTB4YWUsIDB4OTUsIDB4N2YsIDB4N2QsIDB4OTEsIDB4MjIsIDB4ZjYsIDB4NWIsIDB4NzAsIDB4MWQsIDB4ZTgsIDB4YzgsCisJMHgzYSwgMHhmNCwgMHhlYiwgMHg5ZSwgMHhjMywgMHg4YywgMHg0ZiwgMHgyMywgMHhmOSwgMHg2OSwgMHhjZCwgMHhlYywKKwkweDQ0LCAweGZhLCAweDc5LCAweDE5LCAweDNmLCAweGVkLCAweGYzLCAweDc4LCAweDNmLCAweDZlLCAweGQ2LCAweGE5LAorCTB4YmEsIDB4MGYsIDB4ZTcsIDB4M2EsIDB4ZTgsIDB4N2QsIDB4NzEsIDB4Y2YsIDB4OTgsIDB4M2YsIDB4YTcsIDB4NDksCisJMHhmZiwgMHhiMiwgMHhiMSwgMHgzOSwgMHg5MiwgMHg1MywgMHgyYSwgMHgwYSwgMHgyOSwgMHgwZSwgMHg0YiwgMHhmYywKKwkweGIzLCAweGIwLCAweDI3LCAweDkyLCAweDYwLCAweDFjLCAweGZhLCAweDllLCAweDA1LCAweDNkLCAweGNjLCAweDcxLAorCTB4YTAsIDB4ZmMsIDB4N2IsIDB4NzUsIDB4ODMsIDB4NDYsIDB4ZTcsIDB4YTYsIDB4ZmEsIDB4NzEsIDB4OGYsIDB4Y2EsCisJMHhhMywgMHhmNCwgMHhiOSwgMHg1OCwgMHhjNSwgMHg0NSwgMHg0OSwgMHgwMywgMHhhZCwgMHg0NSwgMHhkNywgMHgyMSwKKwkweGIyLCAweDUzLCAweGY3LCAweGE3LCAweDhjLCAweDI3LCAweDFkLCAweDJiLCAweGVlLCAweGRiLCAweGE5LCAweGYxLAorCTB4MjIsIDB4ZTMsIDB4NDksIDB4YzUsIDB4YWQsIDB4MzksIDB4Y2UsIDB4Y2MsIDB4NzEsIDB4OTQsIDB4MWEsIDB4M2YsCisJMHg3ZSwgMHhlYSwgMHgyZiwgMHg3YSwgMHgzMSwgMHhhMCwgMHg3NywgMHg4OSwgMHgyYiwgMHg5MiwgMHgxOCwgMHg3ZSwKKwkweDM4LCAweDhlLCAweGE3LCAweDgwLCAweDYzLCAweDg0LCAweGY1LCAweGQ2LCAweGEyLCAweDM0LCAweDhmLCAweDNlLAorCTB4MjUsIDB4ODYsIDB4ZDgsIDB4OWYsIDB4ZDMsIDB4ZDUsIDB4OWMsIDB4ZmYsIDB4MTUsIDB4ZjAsIDB4NjcsIDB4ZGYsCisJMHgwYSwgMHhlOCwgMHhkMywgMHhjNywgMHg3OSwgMHg3NCwgMHg4NywgMHhlNywgMHgwYywgMHhjNCwgMHg4MSwgMHg1YiwKKwkweGViLCAweDljLCAweDYwLCAweGJmLCAweDczLCAweDNjLCAweDc2LCAweDMzLCAweDBlLCAweGI3LCAweDgxLCAweDgzLAorCTB4YTYsIDB4NzAsIDB4ODgsIDB4MWEsIDB4MzgsIDB4YTgsIDB4N2EsIDB4NjMsIDB4OTYsIDB4NTMsIDB4YTAsIDB4YzcsCisJMHg5MywgMHhhNCwgMHg0YiwgMHhiNCwgMHhhYiwgMHgzNCwgMHg4ZiwgMHhlNSwgMHhiMCwgMHhkZCwgMHgzYSwgMHg1ZiwKKwkweDgzLCAweGI0LCAweGNmLCAweGNmLCAweGY2LCAweGY5LCAweGM0LCAweGJlLCAweDM1LCAweGU2LCAweDczLCAweDc5LAorCTB4N2MsIDB4Y2UsIDB4YWIsIDB4OWYsIDB4YzMsIDB4M2UsIDB4ZjIsIDB4NTUsIDB4Y2IsIDB4ODIsIDB4YWYsIDB4YzQsCisJMHg1MSwgMHhjOSwgMHg0ZCwgMHhjZiwgMHg0YiwgMHgzMywgMHg5ZSwgMHg1NCwgMHhhOSwgMHhlOSwgMHgwZiwgMHhmNSwKKwkweDQ4LCAweGY3LCAweDFiLCAweGQ1LCAweDJkLCAweGNkLCAweGE4LCAweDQzLCAweGY3LCAweGE4LCAweGFlLCAweDdiLAorCTB4NGYsIDB4ZjcsIDB4YTIsIDB4NmUsIDB4OWMsIDB4ZWUsIDB4M2QsIDB4Y2IsIDB4N2QsIDB4OTgsIDB4NzEsIDB4NjksCisJMHhhMSwgMHhmNywgMHg4MywgMHg4ZSwgMHg1ZCwgMHg0NSwgMHg2YSwgMHgxZCwgMHg0YSwgMHhkNSwgMHhhMywgMHhjYywKKwkweGE0LCAweDg3LCAweGJhLCAweDc3LCAweGIxLCAweDM5LCAweDAxLCAweDczLCAweGVhLCAweDE2LCAweDlhLCAweDEzLAorCTB4M2MsIDB4YzYsIDB4YmMsIDB4OWQsIDB4ZGEsIDB4NGYsIDB4MjYsIDB4MWYsIDB4M2MsIDB4NmUsIDB4M2YsIDB4ZDksCisJMHhkOSwgMHg2MCwgMHhiZSwgMHhhZiwgMHg0NiwgMHg0YywgMHg4ZSwgMHhlMywgMHg5ZSwgMHgxNiwgMHhlZSwgMHhkZiwKKwkweGJiLCAweDM5LCAweGNmLCAweGFmLCAweDdiLCAweDAzLCAweDc0LCAweDZmLCAweGM3LCAweDJiLCAweDY0LCAweGFmLAorCTB4MDgsIDB4ZTUsIDB4YzEsIDB4YmUsIDB4OGUsIDB4ZWQsIDB4ZjgsIDB4ZGUsIDB4ZTEsIDB4YzMsIDB4N2UsIDB4YTksCisJMHgwZiwgMHhiZiwgMHhhMywgMHhiNCwgMHhiOCwgMHgzNSwgMHhlMiwgMHgyZiwgMHhmNSwgMHg4MSwgMHg4NiwgMHhiOCwKKwkweDNlLCAweDRjLCAweDFhLCAweGVmLCAweDA5LCAweGQwLCAweDUxLCAweDU3LCAweGI2LCAweGY3LCAweDA0LCAweGRlLAorCTB4NjUsIDB4MTcsIDB4NWQsIDB4YTgsIDB4MWYsIDB4YTIsIDB4MDYsIDB4NzMsIDB4NzQsIDB4NTMsIDB4OTUsIDB4NDYsCisJMHhkZiwgMHg1YiwgMHg2YiwgMHhkMCwgMHhhNywgMHg1MSwgMHg5ZiwgMHgzMywgMHhlZCwgMHgyYSwgMHg0MywgMHhiYywKKwkweDk2LCAweDI2LCAweGRmLCAweDFkLCAweGU2LCAweGY3LCAweDg5LCAweDE2LCAweDQ5LCAweDE4LCAweGYzLCAweDdmLAorCTB4YWEsIDB4MWUsIDB4YzgsIDB4MzMsIDB4MjksIDB4OWYsIDB4OTYsIDB4ZmEsIDB4OWMsIDB4ZmQsIDB4MjgsIDB4ZWYsCisJMHgxMiwgMHgwNywgMHhjZiwgMHg2ZCwgMHg3NywgMHhmOSwgMHg3NywgMHg4MiwgMHg0MiwgMHg3MSwgMHg2OSwgMHgxYywKKwkweDM4LCAweDRjLCAweDhlLCAweDViLCAweGU1LCAweGIxLCAweGQ0LCAweDQzLCAweGRkLCAweDAzLCAweGJiLCAweDk0LAorCTB4OWQsIDB4YzksIDB4N2IsIDB4YTEsIDB4ZDcsIDB4NWUsIDB4ZDYsIDB4ZmYsIDB4MDYsIDB4ZmQsIDB4OWUsIDB4MTEsCisJMHg2MiwgMHg3YiwgMHhhNSwgMHg1YywgMHhlYywgMHg2ZiwgMHhhNSwgMHhmNywgMHg1MywgMHg4ZSwgMHg4OCwgMHgxOSwKKwkweGViLCAweGQ0LCAweDc3LCAweDRkLCAweDBiLCAweGU5LCAweDU1LCAweGMwLCAweGZkLCAweDNkLCAweDY0LCAweDlhLAorCTB4NDMsIDB4YzAsIDB4MWYsIDB4YWMsIDB4MDMsIDB4MWQsIDB4YTksIDB4NTMsIDB4N2UsIDB4NTMsIDB4ZmUsIDB4NTUsCisJMHhmZSwgMHg4NCwgMHhkZiwgMHg0MywgMHhmNSwgMHhjNCwgMHhkNiwgMHhkOCwgMHg1MSwgMHg0ZiwgMHgwOSwgMHg1ZiwKKwkweGQ3LCAweDMxLCAweGFiLCAweGZhLCAweDNkLCAweGNlLCAweGVmLCAweDBjLCAweDRiLCAweGZlLCAweDc3LCAweGM0LAorCTB4NzcsIDB4NjEsIDB4MzQsIDB4ZDgsIDB4OWYsIDB4OTksIDB4MjYsIDB4ZTcsIDB4N2MsIDB4YzEsIDB4N2YsIDB4ZTYsCisJMHhmNywgMHg4MiwgMHg0MywgMHg1YywgMHhjYywgMHhlMSwgMHhlZCwgMHgwNiwgMHgzNSwgMHhmZiwgMHg2NiwgMHg3YiwKKwkweGY3LCAweDQ4LCAweDNiLCAweGJhLCAweDFmLCAweGE0LCAweGNmLCAweGQzLCAweGM5LCAweDc5LCAweDU4LCAweGQ5LAorCTB4MmIsIDB4Y2YsIDB4ZDUsIDB4NzEsIDB4MWMsIDB4N2IsIDB4NDQsIDB4ZDMsIDB4MTYsIDB4ZmMsIDB4Y2UsIDB4ZTEsCisJMHg3NywgMHgyMywgMHg2ZiwgMHhmYywgMHg2ZSwgMHhhYiwgMHhmNywgMHhhOSwgMHgxZSwgMHg0NywgMHhiOSwgMHg1NCwKKwkweDMwLCAweDk2LCAweDE2LCAweGU0LCAweDkyLCAweDdkLCAweDI3LCAweDJlLCAweDdmLCAweDQzLCAweDZjLCAweDFmLAorCTB4MjUsIDB4ZjIsIDB4YjAsIDB4NWYsIDB4ZDQsIDB4ODQsIDB4NmIsIDB4OWMsIDB4MTQsIDB4ZjcsIDB4MGUsIDB4NzEsCisJMHgxNCwgMHg3OSwgMHhmMSwgMHhlMSwgMHgwOCwgMHhlOCwgMHgwNywgMHhlMiwgMHg2NSwgMHhjOCwgMHgyOSwgMHgxOCwKKwkweGEwLCAweGJlLCAweGVhLCAweDI5LCAweDAyLCAweGNjLCAweGYxLCAweDA0LCAweGM3LCAweDdiLCAweGIxLCAweDlkLAorCTB4N2UsIDB4ODcsIDB4NWQsIDB4MTAsIDB4M2UsIDB4ZmUsIDB4OWQsIDB4OGMsIDB4ZjMsIDB4MTcsIDB4NzEsIDB4ZWQsCisJMHgzNCwgMHhmOSwgMHhmZiwgMHg1MSwgMHhlMywgMHgxYywgMHhmZCwgMHgzMywgMHhjMSwgMHg3ZSwgMHhlNywgMHg3OCwKKwkweGY3LCAweGE0LCAweGM3LCAweGJiLCAweGMyLCAweGE5LCAweGQ4LCAweDZlLCAweDE5LCAweGRmLCAweGViLCAweDMzLAorCTB4ZTMsIDB4NWIsIDB4ZTksIDB4OTcsIDB4ZGEsIDB4M2YsIDB4MzMsIDB4ZTUsIDB4ZTMsIDB4MWQsIDB4NzUsIDB4ZTksCisJMHg4OSwgMHhjNSwgMHgzNywgMHhlOCwgMHhkNiwgMHg0YSwgMHg3OSwgMHg3ZiwgMHg1MSwgMHhjNiwgMHhiYywgMHg5YywKKwkweDllLCAweDdmLCAweGE4LCAweDc3LCAweGQ1LCAweDdhLCAweDNjLCAweGZjLCAweDA3LCAweGQ3LCAweDBkLCAweDM2LAorCTB4NGYsIDB4ZjAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDAgfTsKIAogc3RhdGljIHU4IGJueDJfVFBBVF9iMDlGd1RleHRbXSA9IHsKLQkweGJkLCAweDU4LCAweDVkLCAweDZjLCAweDFjLCAweGQ1LCAweDE1LCAweDNlLCAweDczLCAweDY3LCAweGQ2LCAweDNiLAotCTB4YjYsIDB4OWMsIDB4NzgsIDB4NGMsIDB4YjYsIDB4YjAsIDB4MTQsIDB4NDcsIDB4Y2MsIDB4YzQsIDB4ZTMsIDB4OWYsCi0JMHhjYSwgMHgxNiwgMHgwYywgMHhlOSwgMHg5NiwgMHgxYSwgMHg2OSwgMHg1NSwgMHgwZCwgMHhiYiwgMHgxYiwgMHg2MywKLQkweGE1LCAweDNjLCAweDE4LCAweDI5LCAweDUyLCAweDkxLCAweGEwLCAweGM4LCAweDVkLCAweDEzLCAweGUwLCAweDgxLAotCTB4ODcsIDB4YTAsIDB4ZjYsIDB4YTEsIDB4MTUsIDB4MGYsIDB4NTksIDB4ZDYsIDB4OWIsIDB4OTAsIDB4ODcsIDB4NmQsCi0JMHgwNiwgMHg5NiwgMHgyYSwgMHg3OSwgMHg2OCwgMHg1NSwgMHg0NSwgMHgwZSwgMHg4ZSwgMHhhMywgMHg3NiwgMHhlNSwKLQkweDI1LCAweDQ4LCAweDdkLCAweDhjLCAweDQwLCAweGExLCAweDRhLCAweDVmLCAweDc5LCAweGEwLCAweDE1LCAweDdkLAotCTB4MjIsIDB4NTIsIDB4NWYsIDB4NzgsIDB4ZTgsIDB4NGYsIDB4ODQsIDB4ZDQsIDB4MTYsIDB4YjUsIDB4MzQsIDB4YjcsCi0JMHhkZiwgMHg3NywgMHg2NywgMHhjNiwgMHg2YywgMHg0ZCwgMHgyMiwgMHhjNCwgMHg0YiwgMHg1NywgMHg1YSwgMHhkZCwKLQkweDk5LCAweDdiLCAweGNmLCAweDM5LCAweGY3LCAweGRjLCAweGYzLCAweGYzLCAweDlkLCAweDczLCAweGU3LCAweDkwLAotCTB4OTIsIDB4MzEsIDB4YzksIDB4N2UsIDB4ZmIsIDB4ZjAsIDB4YWYsIDB4ZmMsIDB4ZTAsIDB4YzQsIDB4OGYsIDB4YmUsCi0JMHhmNSwgMHg0MCwgMHhmNCwgMHgwMCwgMHhkZiwgMHhhZCwgMHg4MiwgMHgzOCwgMHhmMiwgMHg3ZiwgMHhmYywgMHhkOSwKLQkweDIyLCAweDVlLCAweGFlLCAweDA3LCAweGZmLCAweGUyLCAweGFhLCAweGVhLCAweGRhLCAweGMxLCAweDVhLCAweDI4LAotCTB4YWUsIDB4NWQsIDB4NWQsIDB4NzksIDB4NjAsIDB4M2QsIDB4MTQsIDB4ODksIDB4ZmIsIDB4MGIsIDB4N2UsIDB4NWQsCi0JMHhmZSwgMHhhMywgMHg1YiwgMHgyNSwgMHg0NywgMHgzOCwgMHg3ZiwgMHhiMCwgMHhmYSwgMHhkOSwgMHg4MywgMHg1NywKLQkweGJmLCAweDFkLCAweGRjLCAweGJjLCAweDYwLCAweDhiLCAweGViLCAweDU1LCAweGNmLCAweGI4LCAweGRlLCAweGFjLAotCTB4YjgsIDB4NTMsIDB4ZTAsIDB4ZjksIDB4YzUsIDB4NWMsIDB4NmYsIDB4NDQsIDB4ZjYsIDB4ZTcsIDB4YjIsIDB4NWEsCi0JMHg1YSwgMHg4NSwgMHgzNywgMHhmNCwgMHhkNSwgMHhiOSwgMHhkMCwgMHg2YiwgMHg0YiwgMHg0OSwgMHhhZSwgMHgwYywKLQkweDdjLCAweGE5LCAweDBkLCAweGE2LCAweGU0LCAweDlkLCAweDQxLCAweDU5LCAweGRlLCAweDFlLCAweDc4LCAweGYyLAotCTB4ZDYsIDB4YzAsIDB4OTEsIDB4ZTMsIDB4NmYsIDB4OWMsIDB4OTQsIDB4NGUsIDB4MTQsIDB4OTQsIDB4MWIsIDB4YjYsCi0JMHgyYiwgMHhhYSwgMHgxYSwgMHg5NCwgMHg5YiwgMHhlMiwgMHhjYiwgMHg1NiwgMHgxNCwgMHg5YywgMHg1OSwgMHhiMywKLQkweDI3LCAweDJkLCAweGI3LCAweGVhLCAweGNhLCAweGNiLCAweDczLCAweDRhLCAweDJlLCAweDk0LCAweDllLCAweDk2LAotCTB4ZTcsIDB4YzIsIDB4MjcsIDB4ZjEsIDB4NzcsIDB4ZTQsIDB4NTAsIDB4Y2YsIDB4YjEsIDB4ZWEsIDB4ZTcsIDB4MWQsCi0JMHgwOSwgMHg3YiwgMHgxMywgMHhmMiwgMHg1OCwgMHhhNCwgMHhmNSwgMHg3YSwgMHgxNCwgMHg4MywgMHg3ZiwgMHg3YSwKLQkweGZlLCAweDc5LCAweDE5LCAweDk1LCAweDk2LCAweDE3LCAweGFjLCAweDg4LCAweDE0LCAweDQ4LCAweDIzLCAweGI1LAotCTB4YTgsIDB4MjAsIDB4YjEsIDB4OTcsIDB4OWUsIDB4ZWQsIDB4ODIsIDB4MTksIDB4M2YsIDB4ZDMsIDB4NWIsIDB4ZTAsCi0JMHgxZiwgMHgwZCwgMHhmMywgMHhmNSwgMHhiYiwgMHhiMiwgMHg3NSwgMHgyZiwgMHg1YiwgMHg1NywgMHg3MiwgMHhlOCwKLQkweDVjLCAweGUwLCAweDZmLCAweGNiLCAweDRjLCAweGVjLCAweDU4LCAweGI3LCAweDc0LCAweDJkLCAweGJjLCAweGRiLAotCTB4YWIsIDB4NmQsIDB4M2IsIDB4MzIsIDB4ZGQsIDB4ZTMsIDB4MTksIDB4NDIsIDB4YWYsIDB4MmUsIDB4MWEsIDB4M2MsCi0JMHgzNiwgMHg3OSwgMHgxYywgMHg1NSwgMHhmZCwgMHgyMSwgMHg3YywgMHgzNywgMHgxMywgMHgyYiwgMHg0YiwgMHhlNCwKLQkweDVhLCAweGI3LCAweGVjLCAweGQ1LCAweDA2LCAweDNmLCAweGI2LCAweDZhLCAweGM5LCAweDJkLCAweDFkLCAweDNiLAotCTB4NjMsIDB4YTIsIDB4YzIsIDB4ZDgsIDB4YWEsIDB4NmQsIDB4NTMsIDB4ZDYsIDB4YTgsIDB4MzgsIDB4NjEsIDB4MTEsCi0JMHgzYywgMHhkMywgMHg5ZSwgMHgxMiwgMHg4ZSwgMHhiNSwgMHg2YywgMHg5ZSwgMHhiMiwgMHgxYiwgMHg3OCwgMHg1ZSwKLQkweGI2LCAweGUyLCAweDZkLCAweGM3LCAweGFhLCAweDlkLCAweDVmLCAweGMxLCAweGIzLCAweDBiLCAweDdlLCAweGQ4LAotCTB4MjYsIDB4YjIsIDB4MjQsIDB4NWUsIDB4YjUsIDB4YzAsIDB4YzcsIDB4NzMsIDB4N2EsIDB4NzgsIDB4NTcsIDB4MTIsCi0JMHg5NywgMHgzYywgMHhkOSwgMHhhOCwgMHgwNCwgMHhlNSwgMHg5NiwgMHgxYywgMHhiNSwgMHhlYSwgMHhkYiwgMHg1ZiwKLQkweDcwLCAweDljLCAweGI3LCAweDMyLCAweGY4LCAweGUyLCAweDFjLCAweDc1LCAweDc5LCAweGQ0LCAweGQxLCAweDVhLAotCTB4M2QsIDB4NTQsIDB4Y2MsIDB4Y2UsIDB4NDgsIDB4NzksIDB4NzEsIDB4YWEsIDB4N2YsIDB4ODksIDB4ZWYsIDB4ZDAsCi0JMHgzOSwgMHg4MSwgMHhlZSwgMHhmZCwgMHgxMSwgMHhlOCwgMHhhMywgMHgzNSwgMHhmNywgMHhhOSwgMHg4NSwgMHhlZCwKLQkweGQ3LCAweDE0LCAweDJjLCAweDc4LCAweDk3LCAweDA0LCAweGFkLCAweGE3LCAweDY4LCAweDhkLCAweGIzLCAweDA3LAotCTB4YzQsIDB4OWYsIDB4NTQsIDB4YTEsIDB4OTIsIDB4YzAsIDB4ZGIsIDB4OTYsIDB4MjksIDB4ZDksIDB4NDgsIDB4YTYsCi0JMHhiYywgMHgyMywgMHg0OSwgMHhkYiwgMHgyMywgMHgwZCwgMHhlNywgMHhlYSwgMHhhMCwgMHgzOSwgMHhkMiwgMHhkNywKLQkweGZhLCAweDUyLCAweDc0LCAweDVmLCAweDUxLCAweGY2LCAweGFiLCAweGM1LCAweDgyLCAweDA0LCAweDdlLCAweDZjLAotCTB4ZjgsIDB4NjQsIDB4Y2EsIDB4MTEsIDB4Y2EsIDB4YzQsIDB4ZjMsIDB4MGUsIDB4ZGYsIDB4NjcsIDB4MGMsIDB4YWQsCi0JMHhkYSwgMHhkOSwgMHg2YiwgMHhjYiwgMHhiOSwgMHg0YywgMHgzNywgMHhmYSwgMHg0MywgMHhkMSwgMHg0ZSwgMHhkOSwKLQkweGZiLCAweGI4LCAweDU3LCAweDNiLCAweDlmLCAweGRiLCAweGRmLCAweDljLCAweDA3LCAweGY2LCAweDhlLCAweGE0LAotCTB4NTYsIDB4YzEsIDB4YjksIDB4ZWUsIDB4NzgsIDB4ZDYsIDB4OWMsIDB4OGYsIDB4M2EsIDB4NzIsIDB4ZWYsIDB4ODgsCi0JMHhlNywgMHhkOSwgMHhkNSwgMHhmNSwgMHhhOSwgMHgyZiwgMHhlOCwgMHhkYSwgMHhmMiwgMHg3MSwgMHg0ZSwgMHhmZiwKLQkweGU3LCAweDk4LCAweGRmLCAweGU4LCAweDRhLCAweDQ5LCAweDA5LCAweGUzLCAweDA4LCAweGNmLCAweDdkLCAweGJlLAotCTB4Y2YsIDB4MjAsIDB4MDYsIDB4ZjksIDB4YWMsIDB4MjQsIDB4M2MsIDB4ZTcsIDB4NGEsIDB4MjcsIDB4N2MsIDB4YzYsCi0JMHg5NiwgMHhmZCwgMHg1YSwgMHg3NywgMHgyMiwgMHhjNywgMHg2YSwgMHg5YywgMHg3ZiwgMHgzMSwgMHg3YiwgMHg0NiwKLQkweDBjLCAweDI3LCAweDg4LCAweGUxLCAweDA0LCAweDMxLCAweDlkLCAweDIwLCAweDhlLCAweDEzLCAweGYxLCAweDU0LAotCTB4ZDUsIDB4OTcsIDB4YWIsIDB4NzMsIDB4YWUsIDB4ZGMsIDB4YjAsIDB4MTEsIDB4MGIsIDB4ODMsIDB4MDUsIDB4ZWYsCi0JMHg0ZCwgMHhjNCwgMHg2MywgMHhlYywgMHg1OSwgMHg2MiwgMHg4NywgMHhmMSwgMHg3YywgMHg0MSwgMHhmOCwgMHg4ZSwKLQkweDM4LCAweDc0LCAweGUyLCAweGIyLCAweDhkLCAweDM4LCAweDhjLCAweDhmLCAweDcxLCAweGFlLCAweDI4LCAweDZiLAotCTB4ZTYsIDB4YmMsIDB4MGIsIDB4ZGUsIDB4MjksIDB4YTEsIDB4OWYsIDB4NmIsIDB4NTgsIDB4OWIsIDB4ZjYsIDB4NGYsCi0JMHgzMSwgMHg2MCwgMHhjNywgMHg2YSwgMHg1OCwgMHhhNywgMHhhYywgMHhjMCwgMHg2YiwgMHg4MSwgMHhhMiwgMHg5ZCwKLQkweDdjLCAweDhjLCAweDFjLCAweDJhLCAweDIxLCAweDZmLCAweGU2LCAweGNhLCAweDRhLCAweDJjLCAweDU5LCAweDVmLAotCTB4ODQsIDB4YmQsIDB4MTYsIDB4NjksIDB4NTcsIDB4ZTYsIDB4MTAsIDB4NjMsIDB4ZjIsIDB4ZWYsIDB4YjMsIDB4NGUsCi0JMHg3OCwgMHgxMiwgMHhiMSwgMHgwNywgMHg1YSwgMHhkOCwgMHhlOCwgMHg1NCwgMHgzMiwgMHgwNywgMHhmZSwgMHhjNSwKLQkweDIyLCAweDc1LCAweGRkLCAweDhhLCAweDFjLCAweGU5LCAweDI0LCAweDU3LCAweDU1LCAweDIxLCAweGZjLCAweGE3LAotCTB4OTIsIDB4ZmQsIDB4NDEsIDB4MmIsIDB4ODYsIDB4N2YsIDB4OTUsIDB4NTIsIDB4MjUsIDB4NmUsIDB4ZmQsIDB4ZGEsCi0JMHgwMCwgMHgzMiwgMHg4ZCwgMHhmZSwgMHgwZSwgMHhmOCwgMHhjYSwgMHg5OSwgMHhmZSwgMHhmNCwgMHg4ZCwgMHhjOCwKLQkweDY2LCAweDM3LCAweDg4LCAweDk2LCAweGExLCAweGRiLCAweDM1LCAweGM0LCAweDBlLCAweGZkLCAweDcyLCAweDA5LAotCTB4YjYsIDB4NjksIDB4NzcsIDB4MmQsIDB4ZTYsIDB4YmUsIDB4YjQsIDB4ZmIsIDB4YTQsIDB4MzMsIDB4MzAsIDB4YjEsCi0JMHhlNiwgMHg1NCwgMHg2NSwgMHhiNSwgMHhkZCwgMHgzZCwgMHhhOSwgMHhlZCwgMHg1MCwgMHhkNiwgMHgwYSwgMHg1NSwKLQkweGZhLCAweDc2LCAweDdjLCAweDA5LCAweGJlLCAweDVhLCAweDZkLCAweGY3LCAweGE3LCAweDFlLCAweGRmLCAweGVjLAotCTB4NGEsIDB4ZWIsIDB4ZWIsIDB4NTUsIDB4NjksIDB4ZDksIDB4MTUsIDB4NzUsIDB4YjcsIDB4OTIsIDB4MDksIDB4YzgsCi0JMHhhZCwgMHg2MiwgMHgxZiwgMHhjNiwgMHg2NCwgMHhlMCwgMHhkNywgMHhlZCwgMHhhOSwgMHhjNywgMHgyZiwgMHg3NiwKLQkweGVmLCAweDQ3LCAweGNlLCAweGNiLCAweDY3LCAweGI1LCAweDRhLCAweDA4LCAweDliLCAweDVmLCAweGJiLCAweGQ3LAotCTB4OTYsIDB4NTAsIDB4MzYsIDB4MDYsIDB4YWUsIDB4ZDQsIDB4OTIsIDB4MjksIDB4ZTksIDB4MGMsIDB4MjQsIDB4N2UsCi0JMHg2YSwgMHgwZSwgMHhmYiwgMHg1NSwgMHhmMCwgMHgzZSwgMHg1OCwgMHg5NCwgMHhkNiwgMHg2MCwgMHg2YSwgMHg0ZCwKLQkweDU1LCAweDViLCAweDEyLCAweDBmLCAweDNhLCAweGY4LCAweGJiLCAweGQyLCAweGU4LCAweGJhLCAweGVlLCAweGM1LAotCTB4NmUsIDB4OGIsIDB4ZmMsIDB4YWUsIDB4NTUsIDB4ZjUsIDB4ZGQsIDB4NDMsIDB4ZmQsIDB4OWIsIDB4OGMsIDB4MmQsCi0JMHhjOCwgMHgxOSwgMHhmZCwgMHg5ZSwgMHhhYSwgMHgzYSwgMHhkMiwgMHgyYywgMHg5NSwgMHgyMCwgMHhjMywgMHg4MiwKLQkweDRkLCAweGE4LCAweGViLCAweDNjLCAweGY2LCAweDRkLCAweGM3LCAweGQ2LCAweDgwLCAweGZlLCAweDJiLCAweDRhLAotCTB4M2IsIDB4NWEsIDB4ODQsIDB4OWQsIDB4NjAsIDB4NzcsIDB4YWYsIDB4MjgsIDB4MWIsIDB4ZTEsIDB4YTcsIDB4ZmEsCi0JMHhkOSwgMHgyOCwgMHg4MCwgMHg4ZiwgMHhmNCwgMHhmZCwgMHgzNSwgMHg2MCwgMHg1MSwgMHgwZCwgMHgyNiwgMHg3ZCwKLQkweDM5LCAweDJjLCAweGNiLCAweDI5LCAweGVjLCAweDliLCAweGYyLCAweDc1LCAweGEwLCAweDAzLCAweGY5LCAweDI2LAotCTB4YzAsIDB4ZDcsIDB4MDAsIDB4NWYsIDB4NDksIDB4NGUsIDB4MWIsIDB4ZGUsIDB4MDksIDB4ZjAsIDB4ZGUsIDB4Y2MsCi0JMHg3OCwgMHgxNywgMHhjYSwgMHhjYiwgMHgxMiwgMHg4MSwgMHg2NywgMHhkYSwgMHg1ZiwgMHg4NiwgMHgzZiwgMHhkNywKLQkweDRhLCAweDBkLCAweGYwLCAweDM2LCAweGEwLCAweDAzLCAweGM2LCAweDQ0LCAweDVhLCAweDRlLCAweDg1LCAweDcyLAotCTB4ODMsIDB4ZjIsIDB4YjMsIDB4Y2MsIDB4MjUsIDB4MjMsIDB4YjMsIDB4MDUsIDB4OTksIDB4ZDAsIDB4MmIsIDB4NzEsCi0JMHgyMSwgMHg2NywgMHgwOSwgMHhlMywgMHgwNywgMHhiYSwgMHg5ZCwgMHgwMCwgMHhiMywgMHg0YSwgMHg3YywgMHg3ZSwKLQkweDQ3LCAweGFiLCAweDJhLCAweGUyLCAweGI4LCAweDEyLCAweGZhLCAweDZkLCAweGUxLCAweGZiLCAweDg4LCAweGQ0LAotCTB4OTEsIDB4YTMsIDB4MmEsIDB4OWMsIDB4OTAsIDB4YTYsIDB4NjcsIDB4NTksIDB4YWEsIDB4NmEsIDB4NGIsIDB4MTMsCi0JMHg1MSwgMHgxYywgMHhhZiwgMHgzYSwgMHg2NiwgMHg2ZSwgMHgwZCwgMHg3MSwgMHhhNiwgMHhhYSwgMHg1YiwgMHg3NiwKLQkweDVhLCAweDRmLCAweDBhLCAweGEwLCAweDE5LCAweGMxLCAweGZjLCAweDM4LCAweDZjLCAweDMwLCAweDA5LCAweGRhLAotCTB4NWYsIDB4NjIsIDB4N2UsIDB4MDYsIDB4ZjgsIDB4M2IsIDB4MDksIDB4MWEsIDB4OGUsIDB4Y2MsIDB4MjMsIDB4ZGEsCi0JMHg4NSwgMHhmNCwgMHgxNSwgMHhlOCwgMHg5OCwgMHhjZiwgMHg1NSwgMHg2MCwgMHg5YiwgMHhlMSwgMHhkNCwgMHhjYSwKLQkweDdkLCAweDBjLCAweDlhLCAweGM0LCAweGM5LCAweDcyLCAweDczLCAweDM4LCAweGRmLCAweGYyLCAweDc1LCAweDFmLAotCTB4ZWIsIDB4ZDcsIDB4YmUsIDB4YTEsIDB4ZTQsIDB4YTYsIDB4YmUsIDB4MTgsIDB4MzIsIDB4ODYsIDB4ZTUsIDB4ZDMsCi0JMHg0NiwgMHgxOCwgMHg0ZiwgMHhkYSwgMHgwNiwgMHgyMywgMHg3MiwgMHhhYywgMHhlMCwgMHhjOCwgMHg1YSwgMHg3MiwKLQkweGY5LCAweGUwLCAweDdhLCAweDY4LCAweGQ5LCAweDlkLCAweGM1LCAweDAzLCAweGQyLCAweDJhLCAweDA1LCAweDUxLAotCTB4MWQsIDB4ZmUsIDB4ZWUsIDB4MjQsIDB4Y2MsIDB4OGQsIDB4MDksIDB4OWMsIDB4M2IsIDB4NDAsIDB4ZDQsIDB4NGQsCi0JMHhlMywgMHgzOSwgMHhiZSwgMHgxNywgMHgzYywgMHhmMCwgMHg2MywgMHgwYiwgMHhiMiwgMHgzOCwgMHgyMiwgMHg2NiwKLQkweDkyLCAweDAwLCAweDNhLCAweGMyLCAweDFlLCAweGUxLCAweDgyLCAweDc3LCAweDg0LCAweGYxLCAweDU4LCAweGUyLAotCTB4MWEsIDB4NmIsIDB4ZDQsIDB4NjUsIDB4ZDQsIDB4YTgsIDB4MjAsIDB4NmEsIDB4NjYsIDB4YjksIDB4ZjIsIDB4MmUsCi0JMHg2YywgMHhkYiwgMHg0ZSwgMHg1OCwgMHg2ZiwgMHhjYSwgMHhjOCwgMHgxNSwgMHhkNiwgMHgxYiwgMHhlNiwgMHgwNywKLQkweDYzLCAweDI1LCAweGM3LCAweDY3LCAweGYwLCAweDg0LCAweGNjLCAweDRmLCAweDM3LCAweGMzLCAweGU5LCAweDVhLAotCTB4ODYsIDB4YzEsIDB4NGIsIDB4ZDAsIDB4NDMsIDB4ZWIsIDB4MjcsIDB4ODAsIDB4YmYsIDB4ZWQsIDB4YzgsIDB4YzQsCi0JMHg2NywgMHhjYiwgMHg1NywgMHhiNywgMHhmNCwgMHhmNCwgMHgyYywgMHg2ZCwgMHhhZSwgMHhmNSwgMHg4OSwgMHg2OCwKLQkweDE5LCAweGI0LCAweDdmLCAweDgzLCAweGJkLCAweDU2LCAweDgwLCAweGMxLCAweGM0LCAweDZkLCAweGVlLCAweDVkLAotCTB4NzUsIDB4NmIsIDB4ZGQsIDB4N2QsIDB4ZDAsIDB4YzUsIDB4MDcsIDB4MzYsIDB4YzIsIDB4MDYsIDB4MDYsIDB4YWIsCi0JMHg0NywgMHg5MSwgMHhlZiwgMHhjYywgMHhmOSwgMHhjMCwgMHg1ZiwgMHgxMywgMHhjZSwgMHhjYiwgMHhhOCwgMHhjMiwKLQkweDdiLCAweDEzLCAweDdlLCAweGVhLCAweDU0LCAweDhlLCAweDVhLCAweDhkLCAweGVkLCAweDMxLCAweDI3LCAweGFiLAotCTB4ZjksIDB4MTMsIDB4MGEsIDB4NzUsIDB4YTgsIDB4NTksIDB4MjIsIDB4ZGYsIDB4MDgsIDB4ZjgsIDB4ZjYsIDB4ODEsCi0JMHg2NywgMHgxNCwgMHg2YiwgMHgwNSwgMHg4YywgMHhjMywgMHg3MiwgMHgwYywgMHhlNiwgMHg2MywgMHgyZiwgMHgxZiwKLQkweDdiLCAweGFkLCAweDg4LCAweDUzLCAweDdkLCAweDA1LCAweGY4LCAweDMzLCAweGUzLCAweDM3LCAweGU0LCAweDU3LAotCTB4NzYsIDB4NWEsIDB4NjMsIDB4ZTksIDB4OWIsIDB4ZWYsIDB4MGMsIDB4ZjksIDB4YzYsIDB4MTcsIDB4ZGIsIDB4ZTQsCi0JMHhlMCwgMHgyMywgMHg1OSwgMHg0YywgMHgxMSwgMHg1NywgMHgxZiwgMHhjZSwgMHhkNiwgMHg0YiwgMHhjMCwgMHhjNywKLQkweDZmLCAweDY2LCAweGY4LCAweGVmLCAweDEyLCAweDJiLCAweGU1LCAweDhjLCAweGMxLCAweGNhLCAweDExLCAweDYyLAotCTB4MjUsIDB4NzAsIDB4YTUsIDB4YjUsIDB4MDQsIDB4N2IsIDB4NDcsIDB4MWYsIDB4MDMsIDB4NWYsIDB4ZWEsIDB4ZjAsCi0JMHhjNCwgMHg2ZiwgMHhiYiwgMHgwZSwgMHhlMiwgMHhjYSwgMHgwNiwgMHgzZiwgMHhlYiwgMHhmOCwgMHg3NywgMHhhMSwKLQkweDViLCAweGUwLCAweDdkLCAweDBjLCAweGJjLCAweDg5LCAweDhmLCAweDMxLCAweDBmLCAweGI0LCAweDQ2LCAweGFlLAotCTB4MDMsIDB4YWIsIDB4NjYsIDB4Y2IsIDB4YTcsIDB4MTAsIDB4ZjcsIDB4MzYsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MTksCi0JMHhmYiwgMHhlNiwgMHgzNSwgMHgzNywgMHhhZiwgMHhmZiwgMHhmYywgMHhiZCwgMHg2ZiwgMHhjMSwgMHhjZCwgMHhhOCwKLQkweDkzLCAweDQ3LCAweDIxLCAweDYzLCAweGM2LCAweDNmLCAweDAyLCAweDNmLCAweDZlLCAweDJjLCAweDdkLCAweDE5LAotCTB4Y2YsIDB4MWYsIDB4MzMsIDB4MWUsIDB4YWQsIDB4MWIsIDB4MTUsIDB4ZWUsIDB4MmIsIDB4ZDIsIDB4ZTgsIDB4ZDMsCi0JMHgwZSwgMHgxMSwgMHhlYywgMHg2MCwgMHgzMCwgMHgwOCwgMHgzOSwgMHgxZiwgMHgyMSwgMHhlNywgMHg0NSwgMHg5YSwKLQkweGM0LCAweDBhLCAweDYwLCAweDE4LCAweDcxLCAweDZmLCAweDAzLCAweGY0LCAweGFhLCAweDUyLCAweDg0LCAweDVkLAotCTB4MTEsIDB4NGIsIDB4NGEsIDB4NWMsIDB4YTcsIDB4N2EsIDB4Y2MsIDB4ZWQsIDB4ODAsIDB4YjYsIDB4NTAsIDB4NWQsCi0JMHg3NSwgMHhiNywgMHhjMiwgMHgxNywgMHg3MywgMHhkYiwgMHgwMywgMHhjNywgMHhjNCwgMHhhYSwgMHhhNSwgMHg3ZSwKLQkweGNlLCAweGU4LCAweDFlLCAweGNmLCAweGU4LCAweDU2LCAweDg2LCAweGU5LCAweDMwLCAweGRmLCAweGM4LCAweGU2LAotCTB4NjMsIDB4Y2MsIDB4Y2YsIDB4NjUsIDB4MzYsIDB4NjcsIDB4M2QsIDB4NzAsIDB4NTEsIDB4YTMsIDB4NTksIDB4MGIsCi0JMHgwMiwgMHhkZiwgMHg1NywgMHg4OCwgMHhiNSwgMHgzYiwgMHhkNiwgMHg4MSwgMHhhNSwgMHgyMSwgMHhlYywgMHgxNiwKLQkweDY1LCAweDdhLCAweDkyLCAweDEyLCAweDYzLCAweDcyLCAweGY4LCAweGFjLCAweGEzLCAweDI4LCAweDM0LCAweGJiLAotCTB4ZjEsIDB4ODksIDB4ZGYsIDB4ZGIsIDB4ZDksIDB4M2UsIDB4YTQsIDB4MjUsIDB4NWUsIDB4MGYsIDB4ZDMsIDB4MjIsCi0JMHg4ZCwgMHg0MiwgMHhkNiwgMHhkNCwgMHhkYiwgMHhkOSwgMHhlYywgMHgwMCwgMHhkNiwgMHg5MCwgMHhmMywgMHg4OSwKLQkweDJkLCAweDhmLCAweDNhLCAweGNjLCAweGVmLCAweGMzLCAweDA1LCAweDczLCAweDBlLCAweGQ2LCAweGUwLCAweDlkLAotCTB4MjksIDB4ODMsIDB4MzMsIDB4MmIsIDB4ZGQsIDB4MjIsIDB4ODAsIDB4N2QsIDB4NWMsIDB4OGUsIDB4MjMsIDB4OWYsCi0JMHg5ZiwgMHg4NSwgMHhlZiwgMHgyZiwgMHg0NiwgMHgwYSwgMHg5ZCwgMHgwNiwgMHg2YiwgMHg4ZSwgMHg0NiwgMHgxYywKLQkweDA2LCAweGM2LCAweDE3LCAweGI1LCAweDcwLCAweDAzLCAweDkxLCAweGZjLCAweDhhLCAweDVjLCAweDViLCAweDFjLAotCTB4OTMsIDB4YzIsIDB4MjUsIDB4ZWEsIDB4ZTAsIDB4ODgsIDB4YjMsIDB4MzksIDB4YmMsIDB4Y2YsIDB4MDIsIDB4ZjYsCi0JMHg5OSwgMHgwMiwgMHgwNiwgMHgzZSwgMHg4MiwgMHhmYSwgMHg1MiwgMHgxMiwgMHg2NywgMHgxNiwgMHg1OCwgMHg5YiwKLQkweGI4LCAweDU2LCAweDFkLCAweGYyLCAweGQ1LCAweDI1LCAweDllLCAweDlmLCAweDE4LCAweGVjLCAweDY2LCAweGI1LAotCTB4OGQsIDB4YjksIDB4NTUsIDB4MTQsIDB4YmIsIDB4ZjcsIDB4NjcsIDB4ZTQsIDB4YWUsIDB4OTIsIDB4ZjUsIDB4OGEsCi0JMHhkNiwgMHg0NywgMHhhMiwgMHhmNywgMHg2MCwgMHg1ZiwgMHhjYywgMHg2ZCwgMHg3MiwgMHhlZCwgMHgyNiwgMHhlNiwKLQkweDM5LCAweDQ3LCAweDE5LCAweDhjLCAweGM1LCAweDAzLCAweGE4LCAweDZiLCAweGQ4LCAweGYzLCAweDE4LCAweDc5LAotCTB4OGEsIDB4YTIsIDB4N2EsIDB4YzQsIDB4N2YsIDB4OGMsIDB4OWIsIDB4N2MsIDB4ZTcsIDB4OTksIDB4ODgsIDB4NmQsCi0JMHgzNiwgMHhjNiwgMHgzMSwgMHg4YywgMHgzYywgMHhkMywgMHg0NywgMHg5OSwgMHhhZiwgMHhmOCwgMHhhYywgMHhiNSwKLQkweDUzLCAweDFkLCAweDk3LCAweDdhLCAweDM3LCAweDA0LCAweGM2LCAweGNlLCAweDk0LCAweDhmLCAweDBiLCAweGQ3LAotCTB4ZjAsIDB4ZGUsIDB4ZTcsIDB4YmMsIDB4MzcsIDB4MzQsIDB4OGYsIDB4ZTcsIDB4YmUsIDB4ZDEsIDB4NTksIDB4OWMsCi0JMHhkZCwgMHhkZSwgMHg2NywgMHgwMywgMHg4NiwgMHgyZCwgMHg2MCwgMHgxZiwgMHhmNiwgMHgzOSwgMHhhYywgMHg3ZiwKLQkweDA2LCAweGI3LCAweGU2LCAweGQ5LCAweGI3LCAweDVjLCAweGVlLCAweGIyLCAweDE2LCAweDNhLCAweGNjLCAweGNiLAotCTB4N2IsIDB4OTQsIDB4MWMsIDB4OTAsIDB4N2EsIDB4MjksIDB4M2YsIDB4MTcsIDB4ZTIsIDB4MzgsIDB4MjIsIDB4ZmYsCi0JMHgzNCwgMHhmYiwgMHgxOSwgMHg4ZCwgMHhiYywgMHgyYiwgMHhkYiwgMHhhNiwgMHg2ZiwgMHg5YywgMHg4OSwgMHhkOSwKLQkweDNmLCAweDVjLCAweGVlLCAweDIzLCAweDk3LCAweDdiLCAweDVhLCAweDlhLCAweGE5LCAweDJjLCAweDZmLCAweDE1LAotCTB4ZmQsIDB4NmYsIDB4ZWQsIDB4MzUsIDB4ZDYsIDB4NDAsIDB4ZGEsIDB4ZjksIDB4NWUsIDB4ZjgsIDB4MDYsIDB4MTgsCi0JMHhiZCwgMHhlOSwgMHhjOCwgMHhjNSwgMHg2ZSwgMHgyYSwgMHg4YiwgMHgzOSwgMHhmNSwgMHg0MiwgMHgyNiwgMHhhZiwKLQkweDIxLCAweDdmLCAweDgwLCAweDFjLCAweGY2LCAweDI1LCAweGVjLCAweDMxLCAweGQxLCAweDUzLCAweDllLCAweDczLAotCTB4MjAsIDB4OGYsIDB4MzYsIDB4YzAsIDB4YjUsIDB4YTAsIDB4MzcsIDB4OWYsIDB4ZTksIDB4MWIsIDB4ODAsIDB4Y2UsCi0JMHg4MSwgMHg0ZCwgMHg2OSwgMHg0YiwgMHhjYSwgMHg2MiwgMHhhYywgMHhmZCwgMHg1YiwgMHgxMywgMHgzZiwgMHg1MCwKLQkweDM3LCAweGIwLCAweDA3LCAweGRlLCAweDA3LCAweDIzLCAweGUwLCAweDk5LCAweDkyLCAweDU3LCAweDEzLCAweDgzLAotCTB4YTUsIDB4ZGUsIDB4MDksIDB4NjAsIDB4NTIsIDB4YTMsIDB4ZmIsIDB4OGYsIDB4YmMsIDB4YjYsIDB4YzQsIDB4NmQsCi0JMHhlMCwgMHhlYiwgMHhmMywgMHgzMiwgMHgyZSwgMHhjZSwgMHhjZSwgMHhiOCwgMHhiYywgMHg4MCwgMHg1ZSwgMHhiMCwKLQkweGQwLCAweDQzLCAweDFkLCAweDg3LCAweDBkLCAweGQ1LCAweGQ5LCAweGQ2LCAweDNjLCAweGZiLCAweGI5LCAweGI3LAotCTB4ZDgsIDB4MTcsIDB4NTUsIDB4YzIsIDB4YzgsIDB4YjYsIDB4NjYsIDB4ZTUsIDB4Y2MsIDB4Y2YsIDB4ODIsIDB4ZjksCi0JMHg2ZCwgMHg5MywgMHhhZiwgMHg1OCwgMHhkZiwgMHhmMSwgMHhlNSwgMHg3NCwgMHgzZiwgMHg5NCwgMHgzMywgMHg3ZCwKLQkweDBmLCAweDdhLCAweDc5LCAweGJiLCAweDNkLCAweGFmLCAweDBhLCAweDg5LCAweGE3LCAweDBkLCAweGZjLCAweDg5LAotCTB4OTcsIDB4M2MsIDB4MTcsIDB4NmMsIDB4NWMsIDB4YTUsIDB4NGQsIDB4ZDgsIDB4ZTMsIDB4ZDIsIDB4N2YsIDB4YzQsCi0JMHhhZiwgMHhhMywgMHg3OCwgMHgxZSwgMHgxMywgMHgxYiwgMHg2NywgMHg1MiwgMHgzZCwgMHhkYSwgMHg4MiwgMHhmNiwKLQkweDFmLCAweGVlLCAweDkzLCAweDg5LCAweDZkLCAweDllLCAweGU5LCAweDFkLCAweDliLCAweDQ5LCAweDllLCAweDdiLAotCTB4NzksIDB4MmUsIDB4MzIsIDB4Y2YsIDB4MWQsIDB4NmIsIDB4MTksIDB4ZjYsIDB4YmEsIDB4MWUsIDB4MzEsIDB4MWYsCi0JMHg2ZiwgMHhlOSwgMHhlYiwgMHhhNiwgMHgzZiwgMHhmMywgMHhkOCwgMHgzMywgMHgwZiwgMHhmNSwgMHg2NywgMHg3OSwKLQkweDVmLCAweGMzLCAweDc4LCAweDJjLCAweDBmLCAweGU1LCAweGUzLCAweDBkLCAweDkzLCAweDhiLCAweDU3LCAweDkwLAotCTB4OTcsIDB4YWYsIDB4MjcsIDB4NjUsIDB4OTMsIDB4OTMsIDB4ODcsIDB4MGUsIDB4ZGYsIDB4MmUsIDB4MjcsIDB4N2YsCi0JMHhmZCwgMHgxNSwgMHg3MiwgMHhmMiwgMHhlZCwgMHgyYywgMHgyNywgMHg0NywgMHg0YywgMHhkYywgMHhhYSwgMHhkZSwKLQkweGYwLCAweGRhLCAweDZmLCAweGIwLCAweGM2LCAweDM5LCAweGRlLCAweDM3LCAweDU4LCAweDQzLCAweGQxLCAweGZmLAotCTB4M2YsIDB4NGMsIDB4MWYsIDB4ZTUsIDB4ZmUsIDB4NDksIDB4ZTMsIDB4YjAsIDB4ZWUsIDB4OTAsIDB4MDYsIDB4M2UsCi0JMHhlYywgMHg4ZCwgMHg4YiwgMHg3ZCwgMHg5NiwgMHgzOSwgMHg5YiwgMHhjNywgMHg4YywgMHg4ZiwgMHg1OCwgMHhjZCwKLQkweGY5LCAweGQxLCAweDRmLCAweDFlLCAweDYzLCAweDJjLCAweDE0LCAweDRjLCAweDVlLCAweGQ4LCAweGQ1LCAweDljLAotCTB4YTYsIDB4MmMsIDB4Y2IsIDB4ZTgsIDB4ZDUsIDB4ZGUsIDB4ZTMsIDB4ZDgsIDB4NGYsIDB4NjMsIDB4NjUsIDB4YTQsCi0JMHhlNywgMHhjYSwgMHg0YiwgMHg3MywgMHhjNCwgMHhhNiwgMHgyMCwgMHhiYSwgMHgwNiwgMHg5ZCwgMHhhZiwgMHg4NywKLQkweDI1LCAweDI5LCAweGNjLCAweDMyLCAweDVmLCAweDU5LCAweDZkLCAweDQ2LCAweDEwLCAweDQzLCAweGI4LCAweDc3LAotCTB4MjUsIDB4ZmEsIDB4MjQsIDB4ZmEsIDB4MjksIDB4ZGYsIDB4ODEsIDB4OWYsIDB4NWYsIDB4NDcsIDB4MWMsIDB4MTEsCi0JMHgzYiwgMHgxMSwgMHgxMywgMHhmMywgMHg5YiwgMHg4OCwgMHg4OSwgMHhlMywgMHg3YywgMHgzNywgMHhmYiwgMHgxNiwKLQkweDBjLCAweGFkLCAweDZkLCAweGY2LCAweDJmLCAweDQxLCAweDdmLCAweDU3LCAweDhhLCAweGU3LCAweDM0LCAweGVlLAotCTB4NWIsIDB4OWYsIDB4ZjMsIDB4OWQsIDB4MzYsIDB4ZjEsIDB4MGIsIDB4YWMsIDB4YzAsIDB4ZmMsIDB4YmEsIDB4ODksCi0JMHg1ZiwgMHhmYSwgMHgzNCwgMHhmMCwgMHg4OCwgMHhmMywgMHg3ZiwgMHgzMiwgMHhiOSwgMHhmMSwgMHhhMSwgMHhjOSwKLQkweGYxLCAweGViLCAweDkxLCAweDg5LCAweGU3LCAweDg4LCAweGZkLCAweGU0LCAweGU5LCAweGZlLCAweGZiLCAweDA1LAotCTB4ODMsIDB4MDEsIDB4YzgsIDB4OGYsIDB4NTMsIDB4OTEsIDB4ODksIDB4YjUsIDB4ZjksIDB4MmIsIDB4MzgsIDB4ZjYsCi0JMHg5YiwgMHg2OSwgMHgyZSwgMHgwYywgMHhjOSwgMHg5OSwgMHhmNiwgMHgxZSwgMHg0YiwgMHg3MywgMHhjYiwgMHhkZiwKLQkweDMwLCAweDc3LCAweDhhLCAweDE5LCAweGY0LCAweDQzLCAweGEwLCAweGViLCAweGVmLCAweGM1LCAweDgzLCAweDQ5LAotCTB4OGMsIDB4YjQsIDB4ZjcsIDB4MjcsIDB4OTAsIDB4ZWIsIDB4YzEsIDB4ODYsIDB4OTQsIDB4NDMsIDB4YmQsIDB4YTksCi0JMHhkNywgMHhiOCwgMHg4NCwgMHg2NywgMHg3MywgMHg5ZCwgMHgzZSwgMHgzMSwgMHhiYSwgMHhmYywgMHhhZiwgMHgzYywKLQkweGFjLCAweGVmLCAweGRjLCAweDhlLCAweGNmLCAweDFiLCAweGUyLCAweGZiLCAweGViLCAweDZkLCAweGY4LCAweGIwLAotCTB4YmUsIDB4NDMsIDB4OWUsIDB4YjEsIDB4ZGQsIDB4NWUsIDB4YTIsIDB4YmUsIDB4MWIsIDB4ZDcsIDB4MzEsIDB4ZTIsCi0JMHg5ZSwgMHhiYywgMHg3YiwgMHhlZiwgMHg3OSwgMHhjMywgMHgzOSwgMHg5MCwgMHhkNywgMHg3MCwgMHhjNiwgMHgzOSwKLQkweGY3LCAweGNjLCAweDYzLCAweDNkLCAweDhmLCAweGYxLCAweDNjLCAweGU2LCAweGYzLCAweDU4LCAweDBmLCAweGEyLAotCTB4ZTcsIDB4MjQsIDB4ZjUsIDB4YWYsIDB4ZDMsIDB4MGIsIDB4YjAsIDB4ZmYsIDB4ZDgsIDB4MWQsIDB4ZWUsIDB4MjYsCi0JMHg1ZiwgMHg1NiwgMHg4ZiwgMHgyNCwgMHhmZSwgMHhmYywgMHgxZSwgMHhmOCwgMHhmYiwgMHhhYywgMHg2NywgMHg3NCwKLQkweDk5LCAweDZiLCAweGY4LCAweGIzLCAweDRmLCAweGJmLCAweDg5LCAweGZhLCAweDFmLCAweDY1LCAweGI2LCAweDhkLAotCTB4YjMsIDB4MzEsIDB4YTUsIDB4NDksIDB4ZmIsIDB4YmQsIDB4OWYsIDB4NjQsIDB4OTgsIDB4ZmIsIDB4ZmQsIDB4YjQsCi0JMHhiZSwgMHg0OCwgMHg5ZSwgMHg1MywgMHhjYywgMHgyMSwgMHg5MywgMHg1MywgMHgzYywgMHgwZiwgMHhlZSwgMHhlOCwKLQkweDVhLCAweGFmLCAweGMyLCAweDhmLCAweDJmLCAweDQ1LCAweDc5LCAweDFlLCAweDIxLCAweDllLCAweDBlLCAweGU3LAotCTB4MzksIDB4MGUsIDB4M2IsIDB4ODUsIDB4YjcsIDB4YjQsIDB4MzMsIDB4MWIsIDB4YzMsIDB4NjYsIDB4YmMsIDB4MTcsCi0JMHgzNywgMHhkMCwgMHgxYiwgMHhkMSwgMHg0ZSwgMHgyYiwgMHhkNiwgMHgxMywgMHhiYiwgMHg3NywgMHhlMSwgMHhiZCwKLQkweDdkLCAweDEwLCAweGVkLCAweDQ2LCAweGJiLCAweDBlLCAweGRiLCAweDJkLCAweDg4LCAweDI2LCAweDE1LCAweDMxLAotCTB4ZTAsIDB4NzYsIDB4MzgsIDB4OTEsIDB4ZDcsIDB4NmIsIDB4NjAsIDB4ZDAsIDB4NmMsIDB4NmUsIDB4YTcsIDB4YWYsCi0JMHg1YywgMHhiMywgMHhlMywgMHhmNCwgMHgzYiwgMHhjMiwgMHg1ZSwgMHg3YywgMHhkOCwgMHhiNCwgMHg4NywgMHhmMCwKLQkweGUxLCAweDM2LCAweDNkLCAweDI1LCAweDY1LCAweGQwLCAweDA2LCAweGE4LCAweDVmLCAweGE2LCAweGNmLCAweDYwLAotCTB4MGYsIDB4NzksIDB4NGIsIDB4ZGIsIDB4YTYsIDB4OWYsIDB4MjQsIDB4MzYsIDB4YjIsIDB4OGYsIDB4ZWMsIDB4OGMsCi0JMHhjOCwgMHhkOCwgMHgzZSwgMHhmMywgMHgxZSwgMHg2ZiwgMHg3MywgMHg2NCwgMHg0YywgMHg0OCwgMHg1YSwgMHg5NywKLQkweDhjLCAweGZlLCAweGNmLCAweDY0LCAweGZhLCAweGE3LCAweDNhLCAweDhiLCAweGJhLCAweDEzLCAweGE2LCAweDUxLAotCTB4NTcsIDB4MGYsIDB4YmEsIDB4M2UsIDB4OTQsIDB4ZGIsIDB4YTUsIDB4YTUsIDB4YWEsIDB4MjcsIDB4YTQsIDB4NTEsCi0JMHgzMSwgMHg3NywgMHg1YiwgMHhkYywgMHhhNSwgMHhhMCwgMHhjMywgMHgxMiwgMHhmNSwgMHgyOCwgMHg0MywgMHg4ZiwKLQkweDcxLCAweGRjLCAweDNkLCAweDgyLCAweDk1LCAweDk2LCAweDA0LCAweGYxLCAweDFhLCAweDA4LCAweGU3LCAweDdlLAotCTB4NGEsIDB4YmIsIDB4M2QsIDB4ZWQsIDB4NmUsIDB4NzUsIDB4NjksIDB4YjcsIDB4MjcsIDB4ZGQsIDB4NGUsIDB4NzcsCi0JMHgxYSwgMHhmZCwgMHg1ZiwgMHgwMCwgMHg2ZiwgMHgwNywgMHhmMywgMHg5NywgMHg4NCwgMHgzMSwgMHhiNiwgMHgxMCwKLQkweDcxLCAweDNjLCAweDJkLCAweGVjLCAweGI3LCAweDllLCAweDc2LCAweDY3LCAweGZhLCAweDFjLCAweDlmLCAweDc0LAotCTB4YzMsIDB4ZmUsIDB4YjAsIDB4ZGMsIDB4YmYsIDB4NjgsIDB4NjAsIDB4NjIsIDB4N2MsIDB4MDMsIDB4NzksIDB4ZjQsCi0JMHhlYSwgMHgyMCwgMHhkZCwgMHgxYiwgMHhmNywgMHhiZiwgMHg0YywgMHgyZSwgMHhlNiwgMHg5MiwgMHg1YywgMHhiNiwKLQkweDEwLCAweGE3LCAweDI4LCAweDFiLCAweDcyLCAweGE3LCAweGEzLCAweGRmLCAweDk5LCAweDNkLCAweDc4LCAweGZmLAotCTB4YjksIDB4ZDMsIDB4MWUsIDB4NzcsIDB4ZTcsIDB4ZGYsIDB4MmUsIDB4OTAsIDB4M2IsIDB4MDUsIDB4ODMsIDB4M2QsCi0JMHgxYiwgMHgwOSwgMHhlZSwgMHhjYywgMHgyNSwgMHhhZCwgMHg5YiwgMHhlMSwgMHg4NywgMHhiMCwgMHgxZCwgMHg3YSwKLQkweDgwLCAweDQ1LCAweDBmLCAweDdmLCAweGUwLCAweGVhLCAweDJhLCAweGQ3LCAweGQwLCAweDY3LCAweGUzLCAweGFlLAotCTB4YzcsIDB4ZmIsIDB4ZGEsIDB4NDYsIDB4YzIsIDB4MzUsIDB4YzYsIDB4MzgsIDB4N2EsIDB4YzEsIDB4YzUsIDB4OGYsCi0JMHg0MCwgMHhmYiwgMHg4MSwgMHg2ZSwgMHgwZCwgMHg5NCwgMHhiOSwgMHg4ZiwgMHhhYiwgMHgxMCwgMHhmNywgMHhhYywKLQkweDAxLCAweGZiLCAweDE1LCAweGIxLCAweDFhLCAweDg5LCAweGY4LCAweGNkLCAweDY4LCAweGM5LCAweGRjLCAweGM3LAotCTB4NjIsIDB4Y2YsIDB4ZTcsIDB4OWQsIDB4MTMsIDB4M2QsIDB4ZTYsIDB4ZTIsIDB4NTAsIDB4OGYsIDB4YjksIDB4ODgsCi0JMHgxZSwgMHhmMywgMHg5ZSwgMHgyMiwgMHhlMiwgMHgzYywgMHhjNiwgMHgzZCwgMHg1MywgMHgzNSwgMHhkMywgMHhiYywKLQkweDk5LCAweGUwLCAweDlkLCAweGIyLCAweDVkLCAweDkyLCAweDdkLCAweGU4LCAweDllLCAweGEwLCAweDViLCAweDg4LAotCTB4ZmQsIDB4YjksIDB4N2UsIDB4MzAsIDB4ZmIsIDB4ZWUsIDB4ODUsIDB4NGQsIDB4YzcsIDB4NjIsIDB4ZDMsIDB4NmYsCi0JMHhiNSwgMHg0YiwgMHgyMywgMHhhOCwgMHhmZiwgMHhhNCwgMHhiOSwgMHgyZiwgMHhhMywgMHg3OSwgMHg2ZSwgMHgwZiwKLQkweGNkLCAweGQ3LCAweDc4LCAweDQ2LCAweGNhLCAweDk2LCAweGU2LCAweDFiLCAweGNjLCAweDNiLCAweGQ2LCAweGQyLAotCTB4OTEsIDB4MmMsIDB4ZGYsIDB4NGUsIDB4ZTAsIDB4YjksIDB4OTgsIDB4M2QsIDB4ZTcsIDB4ZjQsIDB4ODcsIDB4ZjcsCi0JMHhmMCwgMHgzZiwgMHhhMiwgMHhkMiwgMHg3NywgMHgzZSwgMHg1MywgMHhlNywgMHg5OCwgMHg3ZCwgMHgzMCwgMHhlNCwKLQkweDJkLCAweDU5LCAweGU5LCAweGI3LCAweDkyLCAweGYzLCAweDM4LCAweDNiLCAweDdkLCAweDkyLCAweGY2LCAweDE3LAotCTB4YzAsIDB4NjAsIDB4NzQsIDB4NTcsIDB4MzMsIDB4YjAsIDB4YmIsIDB4ZDYsIDB4ZWQsIDB4MjUsIDB4ZTIsIDB4ZGEsCi0JMHhjMiwgMHhmYywgMHgxMSwgMHg4MywgMHg2ZiwgMHg2YSwgMHg0YSwgMHg0OSwgMHg4ZSwgMHhiOSwgMHhjMywgMHhjZiwKLQkweDE4LCAweDk3LCAweGNjLCAweDM3LCAweDAxLCAweGJjLCAweGE3LCAweDMyLCAweGI2LCAweDcwLCAweDNmLCAweDE2LAotCTB4ZTQsIDB4NzAsIDB4Y2IsIDB4ZTgsIDB4NjUsIDB4YTUsIDB4ZjcsIDB4MWUsIDB4YWYsIDB4YzYsIDB4N2EsIDB4ODAsCi0JMHhiYSwgMHhmMSwgMHgyMCwgMHhmNSwgMHhkYSwgMHhmZCwgMHg3NiwgMHhiMSwgMHg4NiwgMHg1YSwgMHhmMywgMHgyZSwKLQkweDYyLCAweDFmLCAweGY5LCAweDY5LCAweDdhLCAweGE4LCAweDJkLCAweGYzLCAweGVkLCAweDAwLCAweDc1LCAweDA4LAotCTB4ZDcsIDB4YTAsIDB4NGUsIDB4YjgsIDB4ZmIsIDB4MGQsIDB4NDEsIDB4MmUsIDB4ODAsIDB4ZTYsIDB4MjIsIDB4ZDYsCi0JMHg0ZSwgMHhmNywgMHhmMywgMHg5ZSwgMHgxNiwgMHg3ZCwgMHgzYywgMHg3MCwgMHg2ZiwgMHgzZCwgMHhmYywgMHg5NywKLQkweDZlLCAweDk2LCAweDg2LCAweDY5LCAweGY5LCAweGZiLCAweDJmLCAweGI0LCAweDc4LCAweGQ1LCAweDc5LCAweDM4LAorCTB4YmQsIDB4NTgsIDB4NWQsIDB4NmMsIDB4MWMsIDB4NTcsIDB4MTUsIDB4M2UsIDB4NzMsIDB4ZTcsIDB4ZWUsIDB4N2EsCisJMHg2ZCwgMHgzOSwgMHhmMSwgMHhiOCwgMHg5OSwgMHg5NiwgMHg0ZCwgMHg2MywgMHhkNCwgMHg5OSwgMHg3OCwgMHhmYywKKwkweDQzLCAweDZkLCAweDk1LCAweDY5LCAweDU5LCAweDE1LCAweDE3LCAweDU2LCAweDY4LCAweGJhLCAweGJiLCAweDcxLAorCTB4YWQsIDB4YWEsIDB4YWEsIDB4NWMsIDB4MjksIDB4ODgsIDB4NGEsIDB4OGQsIDB4OTAsIDB4NTksIDB4MzcsIDB4NmQsCisJMHg3OSwgMHg0YiwgMHgxMSwgMHgwZiwgMHg0OCwgMHg0NSwgMHhjYSwgMHhiMiwgMHg3NiwgMHhkMiwgMHgwOCwgMHgyZCwKKwkweDk5LCAweGQ2LCAweDg1LCAweDQ0LCAweDQyLCAweDdkLCAweDg4LCAweDljLCAweDNhLCAweGVlLCAweGMzLCAweGNhLAorCTB4OWIsIDB4OGEsIDB4MDcsIDB4MjQsIDB4YTQsIDB4YTgsIDB4NTUsIDB4ODAsIDB4YzAsIDB4MWIsIDB4N2QsIDB4YTgsCisJMHhmOCwgMHg3OSwgMHgyMiwgMHgxMiwgMHgwZiwgMHg1NCwgMHgwOCwgMHg5MCwgMHg4NSwgMHgwNCwgMHgyYSwgMHhhNSwKKwkweGU0LCAweGYyLCAweDdkLCAweDc3LCAweDY3LCAweDkyLCAweGM1LCAweDRkLCAweDQxLCAweGU1LCAweDgxLCAweDk1LAorCTB4NTYsIDB4NzcsIDB4ZTYsIDB4ZGUsIDB4NzMsIDB4Y2UsIDB4M2QsIDB4ZjcsIDB4ZmMsIDB4N2MsIDB4ZTcsIDB4ZGMsCisJMHgzOSwgMHhlYywgMHhjOCwgMHg4OCwgMHg2NCwgMHhiZiwgMHg3ZCwgMHhmOCwgMHg1NywgMHhiZSwgMHg3MiwgMHhlMiwKKwkweGViLCAweDBmLCAweGRjLCAweDU3LCAweGI5LCAweDBmLCAweDhmLCAweDBmLCAweDNhLCAweDc3LCAweDZiLCAweDJkLAorCTB4ZmYsIDB4YzcsIDB4OWYsIDB4MmIsIDB4ZTIsIDB4ZTUsIDB4N2EsIDB4ZjAsIDB4MmYsIDB4MjUsIDB4NTUsIDB4NGQsCisJMHgwZSwgMHhkNiwgMHgyMiwgMHgyOSwgMHhiOSwgMHhkNSwgMHhlYSwgMHhmYywgMHg2YSwgMHgyNCwgMHg5MiwgMHg3NCwKKwkweGU3LCAweDgyLCAweGJhLCAweGZjLCAweGQzLCAweGI0LCAweDdjLCAweDJkLCAweDljLCAweGZmLCAweDY0LCAweGY1LAorCTB4ODMsIDB4NGYsIDB4NWYsIDB4ZjksIDB4NmMsIDB4YjgsIDB4N2IsIDB4YzEsIDB4OTUsIDB4OTIsIDB4NTcsIDB4M2QsCisJMHhhMywgMHhiZCwgMHg2OSwgMHgyOSwgMHg0ZCwgMHg4MCwgMHhlNywgMHhkNSwgMHg5OSwgMHg2ZiwgMHgxNywgMHg2NCwKKwkweDdmLCAweDJlLCAweGFiLCAweDY1LCAweDU0LCAweDc0LCAweGRkLCAweDVjLCAweDk5LCAweDg5LCAweGJjLCAweDM2LAorCTB4MzYsIDB4YjgsIDB4ZGMsIDB4MGIsIDB4YTQsIDB4ZDYsIDB4MmIsIDB4Y2IsIDB4OWIsIDB4M2QsIDB4NWYsIDB4ZGUsCisJMHhlOCwgMHg2OSwgMHgzOSwgMHhmZSwgMHhjYSwgMHg0OSwgMHg1OSwgMHg4ZiwgMHhjMywgMHg3MiwgMHhjMywgMHgyZCwKKwkweDg5LCAweGFhLCAweDg2LCAweGU1LCAweGE2LCAweDA0LCAweGIyLCAweDE1LCAweDg3LCAweGFkLCAweDE1LCAweDc3LAorCTB4ZGMsIDB4MjksIDB4NTUsIDB4NGIsIDB4ZjIsIDB4YzIsIDB4OGMsIDB4OTIsIDB4MGIsIDB4ZmUsIDB4MzEsIDB4NzksCisJMHgyNiwgMHg3YSwgMHgxMiwgMHg3ZiwgMHgyZCwgMHg2YSwgMHg0MywgMHgzYiwgMHhmNSwgMHhmMywgMHg1YSwgMHhmNCwKKwkweGM2LCAweDk4LCAweDNjLCAweDEyLCAweDFiLCAweGIzLCAweDFhLCAweDI3LCAweGUwLCAweDlmLCAweDljLCAweDdkLAorCTB4NTYsIDB4ODYsIDB4YTUsIDB4ZTUsIDB4ODUsIDB4NGIsIDB4MjIsIDB4MDUsIDB4ZDIsIDB4NDgsIDB4MmQsIDB4MmUsCisJMHg0OCwgMHhlMiwgMHhmNSwgMHhjZiwgMHg3NSwgMHhjMSwgMHg4ZSwgMHgxZiwgMHg5OCwgMHgyZCwgMHhmMCwgMHgwZiwKKwkweDQ3LCAweGY5LCAweGZhLCAweDFkLCAweGQ5LCAweGJhLCAweDk3LCAweGFkLCAweDJiLCAweDUxLCAweGU3LCAweGMyLAorCTB4NjAsIDB4NWIsIDB4YTYsIDB4MTIsIDB4ZWQsIDB4ZGMsIDB4MzAsIDB4YjUsIDB4ZTgsIDB4MmUsIDB4YWYsIDB4YjYsCisJMHhhZCwgMHhjNSwgMHhkZCwgMHhhMCwgMHhmZSwgMHg5MSwgMHg1NywgMHgxNywgMHgwMywgMHgxZSwgMHg5NywgMHgzYywKKwkweDVhLCAweDU1LCAweGJmLCAweDA2LCAweGJmLCAweDRkLCAweDI1LCAweGNhLCAweDExLCAweGI5LCAweGRhLCAweDI5LAorCTB4N2IsIDB4YjUsIDB4ZGUsIDB4MzcsIDB4OWMsIDB4NWEsIDB4N2EsIDB4YzMsIDB4MjQsIDB4N2EsIDB4NDQsIDB4NTQsCisJMHg5NCwgMHgzOCwgMHhiNSwgMHg2ZCwgMHhjYSwgMHgxYSwgMHgxNiwgMHgxZCwgMHgwZCwgMHg4MSwgMHg2NywgMHhkMiwKKwkweDUzLCAweGMyLCAweGIxLCAweDk2LCAweGNkLCAweDUzLCAweDc2LCAweDAzLCAweGNmLCAweDhiLCAweDRlLCAweGIyLAorCTB4YWQsIDB4OWQsIDB4ZGEsIDB4ZjksIDB4MjUsIDB4M2MsIDB4OTcsIDB4YzAsIDB4MGYsIDB4YmIsIDB4YzQsIDB4OGUsCisJMHgyNCwgMHhjYiwgMHgwZSwgMHhmOCwgMHg3OCwgMHg0ZSwgMHgwZiwgMHhlZiwgMHg0YSwgMHgxMiwgMHhkZiwgMHg5MywKKwkweGI1LCAweDRhLCAweDU4LCAweDZlLCAweGM5LCAweGEzLCAweDRlLCAweDdkLCAweGZiLCAweDQzLCAweDRlLCAweGYzLAorCTB4OTYsIDB4N2EsIDB4MWYsIDB4OWUsIDB4YTMsIDB4MmUsIDB4MGYsIDB4NmIsIDB4NjMsIDB4ZDQsIDB4ZmQsIDB4NDMsCisJMHhkOSwgMHgxOSwgMHgyOSwgMHgyZiwgMHhlOSwgMHhlYiwgMHhlZiwgMHhmMywgMHgxZCwgMHgzYSwgMHhhNywgMHhkMCwKKwkweGJkLCAweDViLCAweDg0LCAweDNlLCAweGM2LCAweDcwLCAweDlmLCAweDVhLCAweDU0LCAweDg3LCAweDllLCAweDA5LAorCTB4ZmUsIDB4ZTEsIDB4OTksIDB4MjYsIDB4NDIsIDB4ZTEsIDB4ZjAsIDB4YjksIDB4N2QsIDB4MTIsIDB4OGMsIDB4MWIsCisJMHhkMywgMHg4OCwgMHg0MywgMHg2ZiwgMHg1YiwgMHgyNiwgMHg2NCwgMHgyZCwgMHg5ZCwgMHhmMCwgMHg4ZSwgMHhhNCwKKwkweDZkLCAweGFjLCAweGI3LCAweDQ4LCAweDAzLCAweDdiLCAweDg4LCAweDFjLCAweGU5LCAweDFhLCAweDczLCAweDI5LAorCTB4M2UsIDB4NTAsIDB4OTQsIDB4ZmQsIDB4NmEsIDB4YmUsIDB4MjAsIDB4NjEsIDB4OTAsIDB4NjAsIDB4ZWUsIDB4ZjAsCisJMHhhNSwgMHhiZCwgMHgzNiwgMHhiYiwgMHgyNywgMHhkMywgMHg4MSwgMHg3NiwgMHhjNywgMHgzZSwgMHhmMSwgMHhhMSwKKwkweGVjLCAweDdkLCAweGQ0LCAweGFiLCAweDlkLCAweGNmLCAweGVkLCAweDZjLCAweGY1LCAweDg2LCAweDVkLCAweDYzLAorCTB4YTksIDB4NTUsIDB4YTAsIDB4ZmYsIDB4NDcsIDB4OWUsIDB4MjksIDB4ZTcsIDB4YTMsIDB4MmUsIDB4ZDQsIDB4MWIsCisJMHhmNCwgMHhkMSwgMHgyZCwgMHg5ZCwgMHg5ZSwgMHhmYSwgMHg5MCwgMHg0ZSwgMHhkNCwgMHg0NywgMHg4OSwgMHgzZSwKKwkweDU3LCAweDkyLCAweGY1LCAweGU4LCAweDcxLCAweDI1LCAweGZiLCAweDhkLCAweDU5LCAweDhmLCAweGI1LCAweGQzLAorCTB4MzgsIDB4N2YsIDB4MmMsIDB4N2IsIDB4NDYsIDB4MWMsIDB4YTYsIDB4ODgsIDB4YzMsIDB4MTQsIDB4NzEsIDB4OTksCisJMHg4YSwgMHhhNywgMHhhYSwgMHg4MSwgMHg1YywgMHg5OSwgMHgyOSwgMHhjOSwgMHg3NSwgMHgxNywgMHhmZSwgMHhlYywKKwkweGNkLCAweDc5LCAweGFmLCAweDIxLCAweGE2LCAweDEyLCAweGNmLCAweDExLCAweDM3LCAweDRhLCAweDY2LCAweDBiLAorCTB4YzIsIDB4NzcsIDB4YzQsIDB4OTIsIDB4NGUsIDB4Y2EsIDB4MmUsIDB4NjIsIDB4MjksIDB4MzksIDB4Y2EsIDB4YjksCisJMHgyMSwgMHg1OSwgMHhiMSwgMHg2NywgMHg5OSwgMHhmMywgMHg0ZSwgMHgwOSwgMHg3ZCwgMHg1NSwgMHhjMywgMHhkYSwKKwkweDY0LCAweDcwLCAweDRhLCAweDc2LCAweDExLCAweDFmLCAweDM1LCAweGFjLCAweDUzLCAweDU2LCAweGU4LCAweGI1LAorCTB4NDAsIDB4ZDEsIDB4NGUsIDB4ZGYsIDB4NDUsIDB4MGUsIDB4ZjgsIDB4ODgsIDB4ZmIsIDB4OTksIDB4YjIsIDB4MTIsCisJMHg0NywgMHg1NiwgMHhlNywgMHg2MSwgMHg4YiwgMHhmOSwgMHgyOSwgMHhkOCwgMHg4OCwgMHgzOSwgMHhjMSwgMHhiOCwKKwkweGZhLCAweGViLCAweGI0LCAweDhlLCAweDRlLCAweDIyLCAweDdlLCAweDQwLCAweDhiLCAweGYzLCAweDlmLCAweDRhLAorCTB4NjcsIDB4YzAsIDB4MWYsIDB4MTUsIDB4YTksIDB4ZTcsIDB4NTYsIDB4YWMsIDB4NjUsIDB4M2QsIDB4YmQsIDB4YTIsCisJMHgwYSwgMHhkMSwgMHhlZiwgMHgxZCwgMHhkOSwgMHgxZiwgMHhiNiwgMHgxMiwgMHgwOSwgMHg1YiwgMHg0YSwgMHgyOSwKKwkweDlmLCAweDViLCAweGJmLCAweDg0LCAweDNjLCAweDdhLCAweGQzLCAweGVhLCAweGFmLCAweGMxLCAweDU3LCAweGNlLAorCTB4ZjQsIDB4YTcsIDB4ZGQsIDB4NDUsIDB4MzYsIDB4M2IsIDB4NjEsIDB4YmMsIDB4MDgsIDB4ZGQsIDB4YWUsIDB4YzIsCisJMHhmZiwgMHhiNCwgMHhmOSwgMHhhNSwgMHgyZSwgMHg2NCwgMHg3NywgMHgxYywgMHhlNiwgMHhhZSwgMHhiNCwgMHhiYiwKKwkweGE0LCAweGIzLCAweDY5LCAweGJlLCAweGEyLCAweGFiLCAweGIyLCAweGRjLCAweGVlLCAweDljLCAweDM0LCAweDZlLAorCTB4MjQsIDB4MmIsIDB4ODUsIDB4MmEsIDB4ZmQsIDB4MzYsIDB4YmEsIDB4MDAsIDB4M2YsIDB4MmMsIDB4YjcsIDB4YmIsCisJMHgxMywgMHg4ZiwgMHg2ZCwgMHg3NiwgMHhhNCwgMHg3NSwgMHg3NywgMHg1NSwgMHg1YSwgMHg2ZSwgMHg0NSwgMHhkZCwKKwkweGE1LCAweDY0LCAweDBjLCAweDcyLCAweGFiLCAweGQ4LCAweDg3LCAweDcxLCAweDE1LCAweDA2LCAweDc1LCAweDc3LAorCTB4ZTIsIDB4YjEsIDB4OGIsIDB4OWQsIDB4N2IsIDB4OTAsIDB4YjcsIDB4ZjIsIDB4NDEsIDB4YWQsIDB4MTIsIDB4MjEsCisJMHg3NywgMHhhZiwgMHgxZSwgMHg3NCwgMHgyNSwgMHg5MiwgMHhiNSwgMHg1ZSwgMHg0OSwgMHg2YSwgMHhlOSwgMHg4NCwKKwkweGFjLCAweGY3LCAweDI0LCAweDc5LCAweDZhLCAweDA2LCAweGZiLCAweDU1LCAweGYwLCAweGRlLCAweDliLCAweDk3LAorCTB4NTYsIDB4NmYsIDB4NjIsIDB4NDUsIDB4NTUsIDB4NWIsIDB4OTIsIDB4ZjQsIDB4ZDYsIDB4ZjEsIDB4MmYsIDB4NDksCisJMHhhMywgMHg1MywgMHgyYSwgMHg1ZCwgMHhlYywgMHhiNCwgMHhjOCwgMHg1ZiwgMHg3MiwgMHhhYSwgMHg4MSwgMHgzZSwKKwkweGRjLCAweGRkLCAweDY1LCAweGRjLCAweDQwLCAweGNlLCAweGYwLCAweDk3LCAweDU0LCAweDU1LCAweDRiLCAweGQzLAorCTB4ZjcsIDB4MjEsIDB4YzMsIDB4ODEsIDB4NGQsIDB4YTgsIDB4ZWIsIDB4MmMsIDB4ZjYsIDB4ZWQsIDB4OGYsIDB4YWQsCisJMHgxZSwgMHg3ZCwgMHgzNywgMHgyNCwgMHhlZCwgMHg3OCwgMHgxZSwgMHg3NiwgMHg2MiwgMHhkNCwgMHgwZSwgMHhjOSwKKwkweDVhLCAweGY0LCAweDllLCAweDc5LCAweDFhLCAweGIxLCAweGZhLCAweDlhLCAweDk4LCAweDdiLCAweDZhLCAweGMwLAorCTB4OTMsIDB4MWEsIDB4NGMsIDB4ZmEsIDB4NDIsIDB4NTQsIDB4OTYsIDB4NTMsIDB4ZDgsIDB4YjcsIDB4Y2YsIDB4YjcsCisJMHgwZSwgMHgxZCwgMHhjOCwgMHgzNywgMHgwNiwgMHhiZSwgMHgwNiwgMHhmOCwgMHg3YywgMHgzOSwgMHg2ZCwgMHg3OSwKKwkweGM3LCAweGMwLCAweGJiLCAweDliLCAweGYxLCAweGNlLCAweDk1LCAweDE3LCAweDI1LCAweDA2LCAweGNmLCAweDY0LAorCTB4YjAsIDB4MDgsIDB4N2YsIDB4YWUsIDB4ZjgsIDB4MGQsIDB4ZjAsIDB4MzYsIDB4YTAsIDB4MDMsIDB4YzYsIDB4NTQsCisJMHg1YSwgMHhiYSwgMHg0MiwgMHhiOSwgMHg2MSwgMHhmOSwgMHg2OSwgMHhlNiwgMHg4MywgMHg5NSwgMHhkOSwgMHg4MiwKKwkweDRjLCAweGU4LCAweDk1LCAweDk2LCAweDIwLCAweDY3LCAweDAxLCAweGUzLCAweDNiLCAweGE2LCAweDlkLCAweDAyLAorCTB4NzcsIDB4N2MsIDB4M2UsIDB4YmYsIDB4NjksIDB4NTQsIDB4MTUsIDB4MzEsIDB4NWEsIDB4ODksIDB4ODIsIDB4YjYsCisJMHhmMCwgMHhiZCwgMHgyOCwgMHg3NSwgMHhlNCwgMHg5OSwgMHg4YSwgMHhjNiwgMHhhNCwgMHhlOSwgMHgzOSwgMHg4ZSwKKwkweGFhLCAweGJhLCAweGQyLCAweDQ0LCAweDg0LCAweDI2LCAweGNiLCAweGRhLCAweGNlLCAweGFkLCAweDIwLCAweGNlLAorCTB4NTQsIDB4ZjUsIDB4N2IsIDB4YWEsIDB4NWYsIDB4MGYsIDB4MGEsIDB4YTAsIDB4NDEsIDB4NmUsIDB4NDYsIDB4YTMsCisJMHhiMCwgMHhjMSwgMHgzOCwgMHg2OCwgMHhjZiwgMHg2MiwgMHg3ZSwgMHgwYSwgMHhmOCwgMHgzOSwgMHgwZSwgMHgxYSwKKwkweDhlLCAweGNjLCAweDExLCAweGRhLCAweDg1LCAweGY0LCAweDE1LCAweGU4LCAweDk4LCAweGNmLCAweDU1LCAweDYwLAorCTB4OWIsIDB4YzEsIDB4YjQsIDB4YzksIDB4N2QsIDB4MGMsIDB4OWEsIDB4NTQsIDB4NjcsIDB4NzksIDB4MzcsIDB4OTgsCisJMHg0YiwgMHhmOSwgMHg3YSwgMHg4MCwgMHhmNSwgMHhhYiwgMHg5ZiwgMHg1MiwgMHhiMiwgMHg2YiwgMHgyZSwgMHg0NiwKKwkweDhjLCAweDYxLCAweDc5LCAweGFmLCAweDExLCAweDI1LCAweGUzLCAweGFlLCAweGNkLCAweGYzLCAweDNjLCAweGRmLAorCTB4MzksIDB4YjIsIDB4MTYsIDB4OWMsIDB4MzksIDB4YjgsIDB4MWEsIDB4MzksIDB4ZWUsIDB4ZmEsIDB4ZmMsIDB4MDEsCisJMHg2OSwgMHhmOSwgMHg2MSwgMHg1YywgMHg4NywgMHhiZiwgMHhkNywgMHg1MywgMHhlNiwgMHhjNiwgMHgxOCwgMHhjZSwKKwkweDFkLCAweDIyLCAweGVhLCAweDI2LCAweGYxLCAweDljLCAweDFjLCAweDA0LCAweDBmLCAweGZjLCAweGQ4LCAweDgyLAorCTB4MmMsIDB4OGUsIDB4ODgsIDB4OTksIDB4MzQsIDB4ODQsIDB4OGUsIDB4YjAsIDB4NDcsIDB4MzQsIDB4ZTcsIDB4MWQsCisJMHg2MSwgMHgzYywgMHhmYSwgMHg1YywgMHg2MywgMHg4ZCwgMHg3OSwgMHhmNSwgMHg1MCwgMHgyZCwgMHgwYSwgMHhlMywKKwkweDY2LCAweDk2LCAweDJiLCAweDZmLCAweGMxLCAweGI2LCAweGVkLCAweDk0LCAweGY1LCAweDIyLCAweGFmLCAweDExLAorCTB4Y2MsIDB4MGYsIDB4YzYsIDB4NGEsIDB4OGUsIDB4YjEsIDB4ZTAsIDB4ODksIDB4OTgsIDB4OWYsIDB4YTUsIDB4MGMsCisJMHg2YiwgMHg2YiwgMHgxOSwgMHg4ZSwgMHgyZSwgMHg0MCwgMHgwZiwgMHg2MywgMHg5ZSwgMHgwMCwgMHg4NiwgMHhiNiwKKwkweDYzLCAweDFiLCAweDlmLCAweGFkLCAweDQwLCAweGRkLCAweDMwLCAweDkzLCAweGQzLCAweGI0LCAweGI5LCAweDMxLAorCTB4MjcsIDB4ZTIsIDB4NDUsIDB4ZDAsIDB4ZmUsIDB4MTYsIDB4ZjYsIDB4NWEsIDB4MDIsIDB4OGUsIDB4MTIsIDB4N2IsCisJMHhiOSwgMHg3NywgMHg1NSwgMHhkNywgMHgzYSwgMHhmYiwgMHhhMCwgMHg0YiwgMHgwMCwgMHg3YywgMHg4MywgMHgwZCwKKwkweDJjLCAweGRlLCAweDBlLCAweDIzLCAweGRmLCAweDk5LCAweGYzLCAweDYxLCAweGIwLCAweDIyLCAweDljLCAweDk3LAorCTB4NjEsIDB4ODUsIDB4ZjcsIDB4MjYsIDB4ZmMsIDB4YjQsIDB4NWUsIDB4NzksIDB4ZDQsIDB4NjksIDB4NmMsIDB4YmYsCisJMHg5ZiwgMHhmOSwgMHg0OCwgMHhjNiwgMHgxNCwgMHg2YSwgMHg0OSwgMHhkMywgMHgyNywgMHg1ZiwgMHgxMSwgMHg3YywKKwkweGZiLCAweGMwLCAweGYzLCAweDc3LCAweGFjLCAweDE1LCAweDMwLCAweDBlLCAweGNhLCAweGIxLCAweGI4LCAweDhkLAorCTB4YmQsIDB4MDIsIDB4ZWMsIDB4YjUsIDB4MjQsIDB4YmEsIDB4ZmEsIDB4M2MsIDB4YjAsIDB4NjcsIDB4MmEsIDB4NjgsCisJMHhjOCwgMHhmNywgMHg1NSwgMHhiZiwgMHg0NiwgMHhkMiwgMHgzNywgMHg1ZiwgMHgxOCwgMHhmMCwgMHg0ZCwgMHgyMCwKKwkweGFlLCAweGNkLCAweGMxLCAweDg3LCAweGIyLCAweDk4LCAweDIyLCAweDY2LCAweDNlLCAweDk4LCAweGFkLCAweGZiLAorCTB4YzAsIDB4YmUsIDB4Y2YsIDB4NjQsIDB4MTgsIDB4NWUsIDB4MjIsIDB4MGUsIDB4Y2EsIDB4MTksIDB4OGIsIDB4ODMsCisJMHg0NSwgMHhlMiwgMHgyMCwgMHg3MCwgMHhhNSwgMHhiNSwgMHgwMCwgMHg3YiwgMHhjNywgMHhlZiwgMHgwMiwgMHg1ZiwKKwkweGVhLCAweGYwLCAweGM0LCAweDRmLCAweDNhLCAweDFhLCAweDcxLCAweGU1LCAweDgyLCAweDlmLCAweDc1LCAweGY4LAorCTB4ZjMsIDB4YWUsIDB4OGMsIDB4ODQsIDB4ZGUsIDB4YmIsIDB4YzAsIDB4OWIsIDB4ZTQsIDB4MjgsIDB4ZjMsIDB4YzAsCisJMHgxOCwgMHhlNCwgMHgzYSwgMHhiMCwgMHg2YSwgMHhiYSwgMHg3YywgMHgwYSwgMHg3MSwgMHhlZiwgMHgwMiwgMHgyNywKKwkweGI0LCAweDcwLCAweGRmLCAweGJjLCAweDZlLCAweGU2LCAweGY1LCAweDliLCAweGJmLCAweGI3LCAweDFkLCAweGI4LAorCTB4MTksIDB4YjUsIDB4ZWUsIDB4NzMsIDB4OTAsIDB4MzEsIDB4MTUsIDB4MWMsIDB4ODEsIDB4MWYsIDB4ZDcsIDB4MTYsCisJMHhmZSwgMHgxYiwgMHhjZiwgMHg2ZiwgMHgzMiwgMHgxZSwgMHhkNCwgMHg5MCwgMHgwYSwgMHhmNywgMHgxNSwgMHg2OSwKKwkweDc0LCAweDY5LCAweDg3LCAweDE4LCAweDc2LCAweGIwLCAweDE4LCAweDg0LCAweDljLCAweDhmLCAweDkxLCAweGYzLAorCTB4MjIsIDB4NGQsIDB4NjIsIDB4MDUsIDB4MzAsIDB4OGMsIDB4YjgsIDB4YjcsIDB4MDYsIDB4N2EsIDB4NTUsIDB4MTksCisJMHg4MiwgMHg1ZCwgMHgxMSwgMHg0YiwgMHg0YSwgMHg0YSwgMHhiYSwgMHg3YSwgMHg1NCwgMHhhZiwgMHg4MywgMHhiNiwKKwkweDUwLCAweDVkLCAweGQ2LCAweDViLCAweGQxLCAweDMxLCAweDM3LCAweGVmLCAweDk3LCAweGRhLCAweDFkLCAweDcxLAorCTB4NmEsIDB4N2QsIDB4M2YsIDB4NjcsIDB4NzQsIDB4OGYsIDB4NjUsIDB4NzQsIDB4NGIsIDB4ODMsIDB4NzQsIDB4OTgsCisJMHg2ZiwgMHg2NCwgMHhmMywgMHgwOSwgMHhlNiwgMHgzZiwgMHg5MSwgMHhkOSwgMHg5YywgMHhiNSwgMHhhMCwgMHg4NCwKKwkweDNhLCAweGNiLCAweDNhLCAweDEwLCAweDA2LCAweDgxLCAweGZhLCAweDRmLCAweDc1LCAweDYwLCAweDYxLCAweDAwLAorCTB4YmIsIDB4NDUsIDB4ZDksIDB4YmUsIDB4YzIsIDB4NjcsIDB4NGMsIDB4MGUsIDB4OWUsIDB4NzUsIDB4NTgsIDB4NDksCisJMHg3NCwgMHgzMywgMHgzZSwgMHhmMSwgMHhkYiwgMHhjYywgMHhmNiwgMHgyMSwgMHgyZCwgMHhmMSwgMHg3YSwgMHg5MCwKKwkweDE2LCAweDY5LCAweDA0LCAweGJiLCAweGE4LCAweGIzLCAweGI3LCAweGIzLCAweGQ5LCAweDAxLCAweGFjLCAweDIxLAorCTB4ZTcsIDB4NTMsIDB4NTcsIDB4MWUsIDB4ZDYsIDB4Y2MsIDB4ZWYsIDB4N2IsIDB4YjUsIDB4M2QsIDB4YzcsIDB4MGUsCisJMHhlOCwgMHg3NywgMHgyNiwgMHgyYywgMHhjZSwgMHgyYywgMHg3NSwgMHg4NiwgMHgyMCwgMHg3ZSwgMHg1NCwgMHg4ZSwKKwkweDIzLCAweDlmLCAweDlmLCAweDg2LCAweGVmLCAweDJmLCAweGM2LCAweDBhLCAweGRkLCAweDAyLCAweDZiLCAweDhlLAorCTB4NDEsIDB4MWMsIDB4ODYsIDB4ZDYsIDB4MTcsIDB4YjUsIDB4NjgsIDB4MGQsIDB4OTEsIDB4ZmMsIDB4MmQsIDB4YjksCisJMHgzYSwgMHgzZiwgMHgyMiwgMHg4NSwgMHg0YiwgMHhkNCwgMHgwMSwgMHhmZCwgMHhkMiwgMHhlNiwgMHhlMCwgMHgzZSwKKwkweDczLCAweGQ4LCAweDY3LCAweDAyLCAweDE4LCAweDc4LCAweDNmLCAweGVhLCAweDhiLCAweDJmLCAweDdhLCAweDFhLAorCTB4NTgsIDB4OWIsIDB4OTYsIDB4OWMsIDB4M2EsIDB4ZTQsIDB4YWIsIDB4NGIsIDB4M2MsIDB4M2YsIDB4MzEsIDB4YjgsCisJMHg5NCwgMHhkNSwgMHgzNiwgMHhlNiwgMHhkNiwgMHgxMCwgMHg2YSwgMHhmYSwgMHgxZiwgMHg5MSwgMHhiYiwgMHg0YSwKKwkweDU2LCAweDJiLCAweGM2LCAweDFjLCAweDg5LCAweDdmLCAweDAwLCAweGZiLCAweDYyLCAweDZlLCAweDkzLCAweDZiLAorCTB4YmIsIDB4OTgsIDB4ZTcsIDB4MWMsIDB4NjUsIDB4MzAsIDB4MTYsIDB4MGYsIDB4YTAsIDB4YWUsIDB4NjEsIDB4Y2YsCisJMHhhMywgMHhlNCwgMHgxOSwgMHg0MiwgMHhjZCwgMHgyNywgMHhmZSwgMHg2MywgMHhkYywgMHhlNCwgMHgzYiwgMHhjZiwKKwkweDQ0LCAweDZjLCAweDczLCAweDMxLCAweDhlLCAweDYwLCAweGU0LCAweDk5LCAweDdlLCAweDkxLCAweGY5LCAweDhhLAorCTB4Y2YsIDB4YzYsIDB4ZTgsIDB4ZWEsIDB4YTgsIDB4ZDQsIDB4M2IsIDB4MTEsIDB4MzAsIDB4NzYsIDB4YWEsIDB4N2MsCisJMHg1YywgMHhiOCwgMHg4NiwgMHhmNywgMHgyZSwgMHhlNywgMHhiZCwgMHg4MSwgMHg3OSwgMHgzYywgMHg3NywgMHhhZCwKKwkweGNlLCAweGE4LCAweGVkLCAweDc5LCAweGZmLCAweGIyLCAweDA2LCAweGMzLCAweGEyLCAweGM3LCAweGQ4LCAweDY0LAorCTB4YWYsIDB4YzIsIDB4ZmEsIDB4NjcsIDB4NzEsIDB4NmIsIDB4OTYsIDB4N2QsIDB4Y2EsIDB4ZWIsIDB4MWQsIDB4ZDYsCisJMHg0MiwgMHhjZCwgMHhiYywgMHg0NCwgMHgwMCwgMHgxYywgMHg5MiwgMHhiYSwgMHg5ZiwgMHg5ZiwgMHgwYiwgMHg3MSwKKwkweDFjLCAweDUzLCAweDM2LCAweDY1LCAweDRjLCAweGMyLCAweDc2LCAweGVjLCAweDQ3LCAweGEyLCAweGIyLCAweDc2LAorCTB4YTYsIDB4OTIsIDB4MjYsIDB4ZjksIDB4YmEsIDB4MDUsIDB4MjksIDB4NmMsIDB4Y2MsIDB4OGIsIDB4N2IsIDB4ZDYsCisJMHhjOCwgMHg2NiwgMHg1ZiwgMHg5ZSwgMHhiNywgMHgyYywgMHhiZSwgMHhkNCwgMHg1ZSwgMHhhMiwgMHgxZSwgMHg5OCwKKwkweGRmLCAweDYxLCAweDNkLCAweDBjLCAweDgxLCAweDY3LCAweGM1LCAweDZjLCAweGRmLCAweGIyLCAweDM0LCAweDNiLAorCTB4OTEsIDB4ZDcsIDB4MTAsIDB4OGMsIDB4ZGQsIDB4M2IsIDB4ZTAsIDB4YmIsIDB4MjIsIDB4Y2UsIDB4YWMsIDB4ZTUsCisJMHg2MiwgMHhhNywgMHhiZiwgMHgxNywgMHg3MywgMHhlZSwgMHhiOSwgMHhiOCwgMHhiZiwgMHg1NywgMHg0MywgMHg3ZSwKKwkweDg5LCAweGJkLCAweGM0LCAweDU3LCAweGMyLCAweDNlLCAweDEyLCAweDdkLCAweGUzLCAweDM5LCAweDhkLCAweGZkLAorCTB4NjgsIDB4YTMsIDB4MDIsIDB4N2EsIDB4ZGIsIDB4ZDksIDB4ZWMsIDB4M2MsIDB4MjEsIDB4ZTgsIDB4MzQsIDB4NmMsCisJMHg0ZSwgMHg1YiwgMHg3MywgMHgwZiwgMHhjNiwgMHhlMiwgMHgzZiwgMHgwYywgMHhmMSwgMHgwNSwgMHg3NSwgMHgwNSwKKwkweGZhLCAweGUyLCAweGJkLCAweGM3LCAweDNkLCAweDI2LCAweGU0LCAweGM1LCAweGQ0LCAweDYyLCAweGFkLCAweDc3LAorCTB4MDIsIDB4OTgsIDB4ZDUsIDB4ZTgsIDB4ZmMsIDB4MmQsIDB4YWYsIDB4M2QsIDB4NDksIDB4MWIsIDB4ZjgsIDB4ZmIsCisJMHhhYywgMHg4YywgMHg4YSwgMHhkZSwgMHgxOSwgMHg5NSwgMHhlNywgMHhkMCwgMHhlZiwgMHgxNSwgMHgzNiwgMHg1MCwKKwkweGU3LCAweDYxLCAweDYzLCAweDc1LCAweGI2LCAweDM1LCAweGNiLCAweDllLCAweGVkLCAweDMyLCAweDcyLCAweDc5LAorCTB4YjUsIDB4MTIsIDB4YzUsIDB4YWUsIDB4MzMsIDB4MmQsIDB4NjcsIDB4YmUsIDB4MWIsIDB4Y2UsIDB4NmUsIDB4ZGIsCisJMHg3YywgMHhjNiwgMHhmYSwgMHg0ZSwgMHgyMCwgMHhhNywgMHhiYiwgMHg5MSwgMHg5YywgMHhlOSwgMHg3YSwgMHhkMCwKKwkweGNiLCAweGJiLCAweGQ1LCAweGQ3LCAweDQ2LCAweGM0LCAweGRiLCAweDA2LCAweGZlLCAweGM0LCAweDUzLCAweDllLAorCTB4MGIsIDB4M2UsIDB4YTgsIDB4ZDIsIDB4NmUsIDB4ZWMsIDB4NjMsIDB4ZTksIDB4NWYsIDB4ZTIsIDB4ZGIsIDB4YTMsCisJMHg3OCwgMHgxZSwgMHgxMSwgMHhmNywgMHgxYywgMHhmYiwgMHg0ZSwgMHhjNiwgMHgyNCwgMHhmZCwgMHgzMywgMHhkOCwKKwkweDBiLCAweDEzLCAweGZiLCAweDIwLCAweDczLCAweDg3LCAweGI5LCAweDlmLCAweGU3LCAweDY2LCAweDllLCAweGFiLAorCTB4YzQsIDB4MDEsIDB4ZWQsIDB4MmMsIDB4YzIsIDB4NWUsIDB4ZDcsIDB4NjIsIDB4ZTYsIDB4ZWIsIDB4MGQsIDB4NzMsCisJMHhjZCwgMHhmNiwgMHg2ZSwgMHgxZSwgMHhmYiwgMHhlMiwgMHg4MSwgMHhkZSwgMHgyZCwgMHhlZiwgMHg3YiwgMHgxOCwKKwkweGFmLCAweGU1LCAweDgxLCAweDdjLCAweGJkLCAweDZlLCAweDczLCAweGY1LCAweDBkLCAweGU0LCAweGVkLCAweGNiLAorCTB4NjksIDB4ZDksIDB4ZTYsIDB4ZWMsIDB4ZTEsIDB4MDcsIDB4NmUsIDB4OTcsIDB4YjMsIDB4OTcsIDB4M2YsIDB4NDYsCisJMHhjZSwgMHhmZSwgMHgzMCwgMHhjYiwgMHhkOSwgMHhhMiwgMHg4ZCwgMHg2YiwgMHhiNSwgMHgzMSwgMHhiOCwgMHhmNiwKKwkweDIzLCAweGFjLCAweDBkLCAweDY1LCAweDc3LCAweDBhLCAweDZkLCAweDNiLCAweGU4LCAweGMzLCAweDBmLCAweGQyLAorCTB4NDcsIDB4YjksIDB4N2YsIDB4ZmEsIDB4NzEsIDB4NWEsIDB4ZDcsIDB4YTQsIDB4ODEsIDB4MGYsIDB4MzcsIDB4NDYsCisJMHgxMSwgMHg0ZiwgMHhjYywgMHhlOSwgMHgzYywgMHg5ZSwgMHgwMiwgMHhjNCwgMHg3MiwgMHhjZSwgMHg4ZiwgMHg3ZSwKKwkweGYzLCAweDI4LCAweDYzLCAweGExLCAweDYwLCAweGYzLCAweGM2LCAweGFkLCAweGU2LCAweDM0LCAweDY1LCAweDU5LAorCTB4NDQsIDB4MmYsIDB4ZjcsIDB4NjMsIDB4OGUsIDB4ZGQsIDB4N2UsIDB4YWMsIDB4MTQsIDB4MzcsIDB4NGEsIDB4ZjIsCisJMHhmYywgMHgwYywgMHhiMSwgMHgyYiwgMHg4YywgMHhhZiwgMHg0MiwgMHhlNywgMHg2YiwgMHg5MSwgMHgyZiwgMHg4NSwKKwkweDY5LCAweGU2LCAweDMzLCAweGFiLCAweDUxLCAweDExLCAweDMxLCAweDg0LCAweGJiLCAweDU1LCAweDZhLCAweDRlLAorCTB4YTIsIDB4ZGYsIDB4MGEsIDB4MzQsIDB4ZmMsIDB4ZmMsIDB4MzIsIDB4ZTIsIDB4ODgsIDB4ZDgsIDB4OGEsIDB4OTgsCisJMHg5OCwgMHhkZCwgMHg0NCwgMHg0YywgMHgxYywgMHhlNywgMHhiYiwgMHhkZCwgMHhiNywgMHg2MCwgMHg2OSwgMHg1ZCwKKwkweGJiLCAweGJmLCAweDBmLCAweGZkLCAweDRiLCAweDMyLCAweDc0LCAweGNlLCAweGUwLCAweDRlLCAweDc1LCAweDhiLAorCTB4ZWYsIDB4YjQsIDB4OGQsIDB4NWYsIDB4NjAsIDB4MDksIDB4ZTYsIDB4NTcsIDB4NmQsIDB4ZmMsIDB4ZDIsIDB4YTcsCisJMHg4YywgMHg3YiwgMHg2MywgMHg3ZSwgMHg2NywgMHhmMywgMHhlNiwgMHhkNywgMHgxNiwgMHgwMywgMHhhZSwgMHhjNSwKKwkweDM2LCAweDllLCAweDYzLCAweGY2LCAweDliLCAweGE3LCAweGJiLCAweDNmLCAweGQ3LCAweDE2LCAweDIzLCAweDM2LAorCTB4OGMsIDB4OWMsIDB4OGEsIDB4NmQsIDB4YWMsIDB4Y2QsIDB4YmUsIDB4ODEsIDB4NjMsIDB4YmYsIDB4ZDYsIDB4Y2YsCisJMHg4NSwgMHgwMSwgMHgzOSwgMHg5MywgMHhkZSwgMHgyMywgMHg5MCwgMHg4MywgMHg5YSwgMHgxNywgMHhhYywgMHhiMSwKKwkweDNmLCAweDg4LCAweGE3LCAweGQwLCAweDJmLCAweDgxLCAweGFlLCAweGJiLCAweDE3LCAweDJmLCAweGM2LCAweDMxLAorCTB4ZDIsIDB4ZGUsIDB4N2YsIDB4ODAsIDB4NWMsIDB4MGYsIDB4MzYsIDB4YTQsIDB4MWMsIDB4ZWEsIDB4NGQsIDB4YmQsCisJMHg0NiwgMHgyNSwgMHgzYSwgMHg5YiwgMHhlYiwgMHhmNCwgMHgxNywgMHhhYiwgMHhjYiwgMHhiZiwgMHhjYiwgMHhjMywKKwkweGZhLCAweGNlLCAweGVkLCAweGY4LCAweGJjLCAweDAxLCAweGJlLCAweDNmLCAweGRmLCAweDg2LCAweDBmLCAweGViLAorCTB4M2IsIDB4ZTQsIDB4MTksIDB4YjksIDB4ZDksIDB4NmIsIDB4ZDQsIDB4NmYsIDB4YzYsIDB4NzUsIDB4ODIsIDB4YjgsCisJMHgyNywgMHhlZiwgMHhkZSwgMHhiYiwgMHhkYywgMHg2MCwgMHgwZSwgMHhlNCwgMHgzNSwgMHg5ZSwgMHg3MSwgMHhjZSwKKwkweDNkLCAweGYzLCAweDU4LCAweGNmLCAweDYzLCAweDNjLCAweDhmLCAweGY5LCAweDNjLCAweGQ2LCAweGMzLCAweGY4LAorCTB4MTksIDB4ZTksIDB4ZmIsIDB4NTcsIDB4NmYsIDB4ODQsIDB4ZDgsIDB4N2YsIDB4ZTQsIDB4N2YsIDB4YjgsIDB4YjcsCisJMHgxMCwgMHgyMywgMHgyNCwgMHhiOSwgMHg3NSwgMHhkNywgMHhmYiwgMHg2OSwgMHhkNiwgMHhhZiwgMHg5NCwgMHg5OCwKKwkweDZiLCAweGY4LCAweGIzLCAweDhmLCAweGRmLCAweDQ1LCAweDdmLCAweDEwLCAweDY3LCAweGI2LCAweDRkLCAweGIyLAorCTB4YjEsIDB4NGYsIDB4ZDMsIDB4ZWYsIDB4MDcsIDB4YmYsIDB4OWEsIDB4NjEsIDB4ZjIsIDB4MTcsIDB4ZmIsIDB4ZjUsCisJMHg0NywgMHhmMiwgMHg5YywgMHg2MiwgMHgwZSwgMHhkOSwgMHg5YywgMHhlMiwgMHg3OSwgMHg3MCwgMHgwZiwgMHgzNywKKwkweDY2LCAweDE5LCAweDdlLCAweDdjLCAweDNlLCAweGNlLCAweGYzLCAweDA4LCAweGYxLCAweGY0LCAweDQwLCAweDllLAorCTB4ZTMsIDB4YjAsIDB4NTMsIDB4NzQsIDB4YzMsIDB4ZTgsIDB4ZTksIDB4MDQsIDB4MzYsIDB4ZTMsIDB4ZGQsIDB4YjcsCisJMHg4MSwgMHhkZSwgMHg4OSwgMHg3NiwgMHg1YSwgMHg3MiwgMHg5ZSwgMHhiOCwgMHg3OSwgMHhkZiwgMHhkZCwgMHhkYiwKKwkweDI3LCAweGQxLCAweDZlLCAweGI0LCAweGViLCAweGEwLCAweGRkLCAweGMyLCAweDc4LCAweDVjLCAweDExLCAweDAzLAorCTB4NmUsIDB4ODcsIDB4MTMsIDB4NzksIDB4M2QsIDB4MDcsIDB4MDYsIDB4NGQsIDB4ZTcsIDB4NzYsIDB4ZmEsIDB4ZDgsCisJMHgzNSwgMHgzZCwgMHhlOSwgMHg3ZiwgMHgyYiwgMHhkOCwgMHg4YiwgMHgwZiwgMHhkYiwgMHhlZSwgMHgwMCwgMHgzZSwKKwkweGRjLCAweGE2LCAweGU3LCAweGE0LCAweDBjLCAweGRhLCAweDAwLCAweGY1LCAweGNkLCAweGY2LCAweDIxLCAweGVjLAorCTB4MzEsIDB4NmYsIDB4MTgsIDB4ZDcsIDB4ZjYsIDB4OWIsIDB4YzQsIDB4NDYsIDB4ZjYsIDB4OTksIDB4ZGYsIDB4MmMsCisJMHhjOCwgMHhjOCwgMHgzZSwgMHhmYiwgMHg5ZSwgMHg2YywgMHg3MywgMHg2NCwgMHg0YywgMHg0OCwgMHhiZiwgMHg2ZSwKKwkweDU5LCAweGZkLCAweDFmLCAweGNmLCAweGY0LCAweGVmLCAweGViLCAweDJjLCAweGVhLCAweGEzLCAweDMwLCAweDhkLAorCTB4YmEsIDB4N2EsIDB4ZDAsIDB4MzUsIDB4Y2MsIDB4ZWQsIDB4ZDIsIDB4NTIsIDB4ZDUsIDB4MTMsIDB4ZDIsIDB4YTgsCisJMHhiMCwgMHg1ZiwgMHgxMiwgMHhkYywgMHhiNSwgMHhhMCwgMHhjMywgMHgwMiwgMHhmNSwgMHgyOCwgMHg0MywgMHg4ZiwKKwkweDUxLCAweGRjLCAweDRkLCAweGMyLCAweGE1LCAweDk2LCAweDg0LCAweGM5LCAweDBhLCAweDA4LCAweDY3LCAweGJlLAorCTB4NDMsIDB4YmIsIDB4MWQsIDB4ZDMsIDB4NWIsIDB4MWQsIDB4ZGEsIDB4ZWQsIDB4NDksIDB4YmQsIDB4ZGUsIDB4OTksCisJMHg0NCwgMHg3ZiwgMHgxOCwgMHhjMiwgMHhkYiwgMHhlMSwgMHhlYywgMHgyNSwgMHg2MSwgMHg4YywgMHhjZCwgMHhjNSwKKwkweDFjLCAweDRmLCAweDBiLCAweGZiLCAweGIxLCAweDYzLCAweDdhLCAweGFhLCAweGNiLCAweGYxLCAweDQ5LCAweDFkLAorCTB4NzUsIDB4MDcsIDB4ZTUsIDB4ZmUsIDB4YzksIDB4MDAsIDB4MTMsIDB4OTMsIDB4ZWIsIDB4YzgsIDB4YTMsIDB4MTcsCisJMHg3YiwgMHhmZCwgMHhiZCwgMHg3MSwgMHgzZiwgMHhjYywgMHhlNCwgMHg2MiwgMHgyZSwgMHhjZCwgMHg2NSwgMHgwYiwKKwkweDcxLCAweDhhLCAweGIyLCAweDIxLCAweDc3LCAweDMyLCAweGZlLCAweDk5LCAweGRkLCAweDgzLCAweGY3LCAweGEzLAorCTB4OGYsIDB4ZGEsIDB4ZTMsIDB4YWUsIDB4ZmMsIDB4ZmIsIDB4MDQsIDB4NzIsIDB4YTcsIDB4NjAsIDB4YjEsIDB4NjcsCisJMHgyZCwgMHhjNSwgMHg5ZCwgMHhkYSwgMHgzNywgMHhhNiwgMHgxOSwgMHhiZCwgMHgwZCwgMHhkYiwgMHhhMSwgMHg0NywKKwkweDk4LCAweGY3LCAweGYwLCAweDA3LCAweGFlLCAweDJlLCAweDczLCAweDBkLCAweDdkLCAweDM4LCAweGVlLCAweDgyLAorCTB4YmMsIDB4Y2YsIDB4YWQsIDB4YTUsIDB4NWMsIDB4NjMsIDB4OGMsIDB4YTMsIDB4NTcsIDB4OWMsIDB4ZmYsIDB4MTUsCisJMHg2OCwgMHhkZiwgMHgzMSwgMHhhZCwgMHg5ZSwgMHhiMiwgMHhmNywgMHg3NSwgMHgxNSwgMHhlMSwgMHgxZSwgMHhkNiwKKwkweDYzLCAweDNmLCAweDIzLCAweDRlLCAweDIzLCAweDk1LCAweGEwLCAweDE5LCAweDJmLCAweGQ4LCAweGZiLCAweDVhLAorCTB4ZTIsIDB4MDUsIDB4YmMsIDB4OTMsIDB4YTIsIDB4MDcsIDB4OWQsIDB4MWYsIDB4ZTgsIDB4NDEsIDB4ZTcsIDB4ZDEsCisJMHg4MywgMHg4ZSwgMHgxNSwgMHgxMSwgMHhlNywgMHgwOSwgMHhlZSwgMHhhMSwgMHhhYSwgMHhkOSwgMHhjZiwgMHg5YiwKKwkweDMxLCAweGRlLCAweDM5LCAweGRiLCAweGJlLCAweGVjLCAweDQzLCAweDc3LCAweDA1LCAweGRkLCAweDIyLCAweGVjLAorCTB4Y2YsIDB4ZjUsIDB4M2IsIDB4YjMsIDB4ZWYsIDB4NWEsIDB4YTMsIDB4YTAsIDB4NGYsIDB4NmMsIDB4M2YsIDB4ZDYsCisJMHhmNiwgMHg4YiwgMHhkMiwgMHg4YywgMHg0OSwgMHg3MywgMHgyOCwgMHhhMywgMHhmOSwgMHhmMiwgMHgxZSwgMHg5YSwKKwkweDNiLCAweDc5LCAweDQ2LCAweGNhLCAweDk2LCAweGU2LCAweDJiLCAweGNjLCAweDNiLCAweGQ2LCAweGQyLCAweDYyLAorCTB4OTYsIDB4NmYsIDB4MjcsIDB4ZjAsIDB4M2MsIDB4OTQsIDB4M2QsIDB4ZTcsIDB4ZjQsIDB4ZjcsIDB4ZWUsIDB4ZTEsCisJMHg3ZiwgMHhjOCwgMHhlOSwgMHhiZiwgMHhmMywgMHg5OSwgMHgzYSwgMHgyNywgMHhlYywgMHg5MywgMHgyMSwgMHg2ZiwKKwkweGMxLCAweGU5LCAweDdmLCAweDI3LCAweGMxLCAweDg1LCAweDczLCAweDg0LCAweDNlLCAweGU5LCAweGY3LCAweDE3LAorCTB4YzAsIDB4NjAsIDB4NzQsIDB4NWYsIDB4NTMsIDB4YjAsIDB4YmIsIDB4MzEsIDB4ZWQsIDB4MDUsIDB4ZTIsIDB4ZGEsCisJMHhkYywgMHhlYywgMHgxMSwgMHg4YiwgMHg2ZiwgMHg2YSwgMHg0MiwgMHg0OSwgMHg4ZSwgMHhiOSwgMHg4MywgMHhjZiwKKwkweDE4LCAweDE3LCAweGVjLCAweDM3LCAweDAzLCAweGJjLCAweGY3LCAweDY1LCAweDZjLCAweGUxLCAweGZlLCAweDJjLAorCTB4YzgsIDB4ZTEsIDB4OTYsIDB4ZDUsIDB4Y2IsIDB4ZTksIDB4ZGYsIDB4OGIsIDB4YmMsIDB4MWEsIDB4ZWIsIDB4MDEsCisJMHhlYSwgMHhjNiwgMHgwYywgMHhmNSwgMHhiYSwgMHhmOSwgMHg2ZCwgMHg2MywgMHgwNSwgMHhiNSwgMHhlNiwgMHgyZCwKKwkweGM0LCAweDNlLCAweGYyLCAweGQzLCAweGY2LCAweDU4LCAweDViLCAweGY2LCAweGRiLCAweDAyLCAweGVhLCAweGQwLAorCTB4MDgsIDB4ZWUsIDB4NGIsIDB4ZDEsIDB4Y2QsIDB4NmYsIDB4MGMsIDB4NzIsIDB4MDEsIDB4MzQsIDB4MTcsIDB4YjEsCisJMHg3NiwgMHhiYSwgMHg5YiwgMHhmNywgMHhiYywgMHhlOCwgMHhmMywgMHg4MSwgMHg3YiwgMHhhYiwgMHhkMSwgMHhmYiwKKwkweGE2LCAweGU5LCAweDBmLCAweGQyLCAweGYyLCAweGY3LCAweDJmLCAweDk3LCAweGEyLCAweDE1LCAweDNhLCAweDE4LAogCTB4MTUsIDB4MDAsIDB4MDAsIDB4MDAgfTsKIAogc3RhdGljIGNvbnN0IHUzMiBibngyX1RQQVRfYjA5RndEYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CkBAIC0zNjgxLDE1ICszNjkxLDE1IEBACiAJMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCB9OwogCiBzdGF0aWMgc3RydWN0IGZ3X2luZm8gYm54Ml90cGF0X2Z3XzA5ID0gewotCS8qIEZpcm13YXJlIHZlcnNpb246IDQuMC41ICovCisJLyogRmlybXdhcmUgdmVyc2lvbjogNC40LjI2ICovCiAJLnZlcl9tYWpvcgkJCT0gMHg0LAotCS52ZXJfbWlub3IJCQk9IDB4MCwKLQkudmVyX2ZpeAkJCT0gMHg1LAorCS52ZXJfbWlub3IJCQk9IDB4NCwKKwkudmVyX2ZpeAkJCT0gMHgxYSwKIAotCS5zdGFydF9hZGRyCQkJPSAweDA4MDAwODg4LAorCS5zdGFydF9hZGRyCQkJPSAweDA4MDAwNDg4LAogCi0JLnRleHRfYWRkcgkJCT0gMHgwODAwMDgwMCwKLQkudGV4dF9sZW4JCQk9IDB4MTUzNCwKKwkudGV4dF9hZGRyCQkJPSAweDA4MDAwNDAwLAorCS50ZXh0X2xlbgkJCT0gMHgxNTE0LAogCS50ZXh0X2luZGV4CQkJPSAweDAsCiAJLmd6X3RleHQJCQk9IGJueDJfVFBBVF9iMDlGd1RleHQsCiAJLmd6X3RleHRfbGVuCQkJPSBzaXplb2YoYm54Ml9UUEFUX2IwOUZ3VGV4dCksCkBAIC0zNjk5LDg2MyArMzcwOSw4NzEgQEAKIAkuZGF0YV9pbmRleAkJCT0gMHgwLAogCS5kYXRhCQkJCT0gYm54Ml9UUEFUX2IwOUZ3RGF0YSwKIAotCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDFkNjAsCisJLnNic3NfYWRkcgkJCT0gMHgwODAwMTk0MCwKIAkuc2Jzc19sZW4JCQk9IDB4NDgsCiAJLnNic3NfaW5kZXgJCQk9IDB4MCwKIAotCS5ic3NfYWRkcgkJCT0gMHgwODAwMWRhOCwKLQkuYnNzX2xlbgkJCT0gMHgxMGEwLAorCS5ic3NfYWRkcgkJCT0gMHgwODAwMTk4OCwKKwkuYnNzX2xlbgkJCT0gMHgxMmI0LAogCS5ic3NfaW5kZXgJCQk9IDB4MCwKIAotCS5yb2RhdGFfYWRkcgkJCT0gMHgwODAwMWQzNCwKKwkucm9kYXRhX2FkZHIJCQk9IDB4MDgwMDE5MTQsCiAJLnJvZGF0YV9sZW4JCQk9IDB4NCwKIAkucm9kYXRhX2luZGV4CQkJPSAweDAsCiAJLnJvZGF0YQkJCQk9IGJueDJfVFBBVF9iMDlGd1JvZGF0YSwKIH07CiAKIHN0YXRpYyB1OCBibngyX1RYUF9iMDlGd1RleHRbXSA9IHsKLQkweGE1LCAweDdiLCAweDBiLCAweDc0LCAweDFjLCAweDU1LCAweDdhLCAweGU2LCAweDc3LCAweGFiLCAweGJhLCAweGE1LAotCTB4ZWEsIDB4NTYsIDB4YWIsIDB4NTUsIDB4OTIsIDB4ZGIsIDB4YTYsIDB4OTUsIDB4ZDEsIDB4ZTAsIDB4MmUsIDB4NzcsCi0JMHhiNSwgMHhkYywgMHg1OCwgMHhjMiwgMHg1NCwgMHhjYiwgMHgyZCwgMHhkMywgMHg0NCwgMHhlNSwgMHhiOCwgMHhjNywKLQkweDA4LCAweDViLCAweDA2LCAweDRkLCAweDQ2LCAweDM4LCAweGNhLCAweGFjLCAweDk4LCAweGMzLCAweDJlLCAweDFkLAotCTB4NjMsIDB4ODMsIDB4MzAsIDB4MDYsIDB4MDQsIDB4YzMsIDB4NjYsIDB4OTUsIDB4MmMsIDB4ODksIDB4NmEsIDB4ZTQsCi0JMHgwNywgMHg3ZSwgMHhiNCwgMHhiYSwgMHhmNSwgMHgzMiwgMHgzMiwgMHhkOSwgMHg5YywgMHhiOCwgMHgyZCwgMHhjOSwKLQkweDk2LCAweDgxLCAweDdlLCAweGMwLCAweDAwLCAweDMzLCAweDQzLCAweDc2LCAweDY3LCAweGU5LCAweDM1LCAweDYwLAotCTB4MGMsIDB4OGMsIDB4NjEsIDB4OTIsIDB4M2QsIDB4NjcsIDB4OTcsIDB4YzksIDB4OTksIDB4NDksIDB4N2MsIDB4MzAsCi0JMHg3OCwgMHg2YywgMHhkZSwgMHg5YiwgMHg5OSwgMHhkZCwgMHgxNSwgMHgwOSwgMHg5MywgMHhkYSwgMHhmZiwgMHhhZiwKLQkweDk2LCAweDhjLCAweDYxLCAweGQ4LCAweDI0LCAweDliLCAweGQ1LCAweDM5LCAweDdkLCAweDRhLCAweDVkLCAweDc1LAotCTB4ZWIsIDB4ZGUsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4NmYsIDB4NDcsIDB4MDAsIDB4MmYsIDB4MTYsCi0JMHhmZSwgMHg2YSwgMHhlOSwgMHgxMywgMHgxZiwgMHgxOCwgMHg3YywgMHhiMCwgMHg3ZCwgMHhiNSwgMHhiMSwgMHhkYSwKLQkweGI5LCAweGUxLCAweDg2LCAweDhiLCAweDFmLCAweGFlLCAweDE1LCAweDQwLCAweGVhLCAweDVkLCAweGZjLCAweDhiLAotCTB4ZmUsIDB4YmUsIDB4ZmEsIDB4MmYsIDB4N2IsIDB4MGQsIDB4MzIsIDB4YTAsIDB4MmUsIDB4ZDIsIDB4YzQsIDB4MWYsCi0JMHgyOCwgMHg5MiwgMHg5OSwgMHhmYiwgMHhjZCwgMHgwZCwgMHgzYSwgMHgxNCwgMHhkOSwgMHhlYywgMHg1YiwgMHg3NywKLQkweGJiLCAweDBlLCAweDI0LCAweGYzLCAweDJkLCAweGExLCAweGViLCAweGYxLCAweDJiLCAweGRiLCAweDBhLCAweGI4LAotCTB4YzAsIDB4ZjcsIDB4YmYsIDB4NmEsIDB4N2UsIDB4M2EsIDB4ZjQsIDB4YzMsIDB4NmIsIDB4YjUsIDB4OGYsIDB4NzMsCi0JMHgzMiwgMHgxNCwgMHhkNSwgMHg5YywgMHg4NCwgMHhkYSwgMHgwYywgMHhhNSwgMHg4OSwgMHhkZSwgMHhmOSwgMHhkMywKLQkweDk1LCAweGRmLCAweDc3LCAweGMxLCAweGJmLCAweDM4LCAweDE3LCAweDJjLCAweGI3LCAweDY5LCAweDYwLCAweDU3LAotCTB4NzYsIDB4MDAsIDB4NzMsIDB4NzEsIDB4ZTAsIDB4NDIsIDB4M2EsIDB4NjIsIDB4ZWMsIDB4MDIsIDB4NDYsIDB4MjUsCi0JMHgzMywgMHgxMiwgMHgzYSwgMHg4OSwgMHgxMCwgMHg2NiwgMHhmMywgMHhiMCwgMHhhYSwgMHg0ZCwgMHgxZCwgMHhmYiwKLQkweDRhLCAweDIxLCAweDVjLCAweDRjLCAweGZmLCAweDgzLCAweDFkLCAweDcyLCAweDBmLCAweGUwLCAweGVkLCAweDM4LAotCTB4OTQsIDB4YTAsIDB4ZjksIDB4MTAsIDB4ODIsIDB4NTksIDB4MjgsIDB4YjUsIDB4ZTYsIDB4MjAsIDB4MGEsIDB4MjMsCi0JMHhjMCwgMHg5ZSwgMHhiNCwgMHgzNiwgMHgwMCwgMHg2OCwgMHg3ZCwgMHg0NSwgMHgxMSwgMHgzZSwgMHg3ZCwgMHgwMiwKLQkweDVhLCAweDRmLCAweGEzLCAweGRjLCAweDkyLCAweGJhLCAweDQ1LCAweDY4LCAweGM5LCAweDlkLCAweDAyLCAweDhhLAotCTB4YTAsIDB4YjEsIDB4YWIsIDB4ZjIsIDB4N2MsIDB4MWQsIDB4NDQsIDB4MzQsIDB4YWYsIDB4ZTAsIDB4YWMsIDB4Y2MsCi0JMHhjYiwgMHg5YSwgMHgyNCwgMHg2NywgMHgwMSwgMHg5NywgMHg2ZSwgMHg2MCwgMHg0ZiwgMHgxNiwgMHg5NiwgMHhjYiwKLQkweDE0LCAweGQ4LCAweDE1LCAweDhmLCAweGE4LCAweDMzLCAweGUwLCAweGU3LCAweDIxLCAweDBjLCAweDNiLCAweGUzLAotCTB4MzQsIDB4ZTIsIDB4ZDgsIDB4YjYsIDB4NzcsIDB4MWIsIDB4YjYsIDB4N2QsIDB4Y2MsIDB4YTgsIDB4ODYsIDB4YTUsCi0JMHg2YSwgMHg0MSwgMHg0MCwgMHg2MCwgMHhkOCwgMHg5MCwgMHg5MCwgMHg1NCwgMHgzNywgMHg4NCwgMHg1YywgMHhkMCwKLQkweDgyLCAweGRiLCAweGYxLCAweGY3LCAweGM0LCAweDZmLCAweDMyLCAweGVhLCAweDQ2LCAweDY1LCAweDdjLCAweDBhLAotCTB4ZDUsIDB4MjgsIDB4YWIsIDB4MTUsIDB4ODksIDB4NGQsIDB4YTcsIDB4NmQsIDB4ZmIsIDB4OTQsIDB4ZWUsIDB4YzIsCi0JMHgzMSwgMHg5MiwgMHhjZCwgMHg3MCwgMHhmZSwgMHhlZiwgMHhlZCwgMHgzMiwgMHhjOSwgMHg2NSwgMHhiNywgMHhiZSwKLQkweGI4LCAweGJlLCAweDgyLCAweDljLCAweDZhLCAweGRiLCAweDMzLCAweGY0LCAweDZjLCAweDZmLCAweDdlLCAweDUxLAotCTB4YzYsIDB4YjYsIDB4MmQsIDB4ZTksIDB4YjYsIDB4N2QsIDB4YmIsIDB4ZmUsIDB4NzcsIDB4ZjYsIDB4ZDYsIDB4Y2YsCi0JMHg4ZCwgMHg4ZCwgMHhlMSwgMHhmMSwgMHg1MSwgMHgxNSwgMHg0ZiwgMHg2NCwgMHg5MywgMHhjOCwgMHhhNywgMHg2ZCwKLQkweGM4LCAweGE2LCAweDBiLCAweGZkLCAweDIzLCAweDIxLCAweGVjLCAweDJjLCAweDc0LCAweGEyLCAweDkwLCAweGQ2LAotCTB4NTIsIDB4NjcsIDB4ZTksIDB4YmQsIDB4YWQsIDB4NzEsIDB4MWQsIDB4ZjcsIDB4MTQsIDB4YmEsIDB4MzAsIDB4OTcsCi0JMHg4NiwgMHhlZCwgMHgzMSwgMHhmNSwgMHhiMiwgMHg0NywgMHg0NCwgMHg3MSwgMHg2NywgMHhhMSwgMHgxYiwgMHhjNSwKLQkweGI0LCAweDdlLCAweDdhLCAweDU4LCAweDQ0LCAweDA2LCAweDFiLCAweDY1LCAweDE3LCAweGVlLCAweDJiLCAweGI0LAotCTB4ZTIsIDB4ZGUsIDB4NDIsIDB4ODIsIDB4ZGUsIDB4YjEsIDB4NzEsIDB4NjMsIDB4YWMsIDB4ODksIDB4YzYsIDB4YjcsCi0JMHhlMSwgMHhiMSwgMHg0OSwgMHhkYiwgMHg4ZSwgMHhjNiwgMHg1NCwgMHhmNCwgMHgxNywgMHgwYywgMHhjYywgMHg4ZCwKLQkweDRhLCAweDQ4LCAweDFkLCAweDczLCAweDIxLCAweDc1LCAweDE0LCAweGI4LCAweGYzLCAweDY4LCAweDFiLCAweDY2LAotCTB4NDYsIDB4NmQsIDB4NmMsIDB4MzUsIDB4ODYsIDB4MWIsIDB4MjUsIDB4MzIsIDB4YmIsIDB4OTQsIDB4MmEsIDB4ZTAsCi0JMHhkNiwgMHhmZCwgMHhkOCwgMHhhZSwgMHg1NiwgMHg2OCwgMHgzZiwgMHgyYiwgMHgwYiwgMHhlYywgMHgzOCwgMHgxYSwKLQkweGM1LCAweDliLCAweDY5LCAweDBiLCAweDM3LCAweGI2LCAweDA3LCAweDMxLCAweDU4LCAweDA4LCAweGUwLCAweDhkLAotCTB4NzQsIDB4ODAsIDB4ZDYsIDB4MzAsIDB4ZjAsIDB4N2EsIDB4NWEsIDB4YTEsIDB4NzUsIDB4NWEsIDB4ZjEsIDB4NjIsCi0JMHg5YSwgMHhjNywgMHhmMCwgMHg1OCwgMHgxZiwgMHhiNiwgMHgxNSwgMHg5YSwgMHg3MCwgMHgyNiwgMHgxZCwgMHhhNCwKLQkweDM1LCAweDAzLCAweDc4LCAweDg1LCAweGM2LCAweGRkLCAweDU1LCAweGQwLCAweDcxLCAweDlhLCAweGM2LCAweGY1LAotCTB4MTcsIDB4NDIsIDB4NzgsIDB4MzksIDB4ZWQsIDB4MjMsIDB4NWEsIDB4MDMsIDB4MzgsIDB4OTksIDB4MWUsIDB4YzAsCi0JMHhhZSwgMHg3NCwgMHhjYiwgMHhlOSwgMHhlYiwgMHg0OSwgMHg4NiwgMHhhMSwgMHgyNSwgMHhiYywgMHgwZSwgMHhkZiwKLQkweDdiLCAweGRiLCAweGVlLCAweDBlLCAweDM4LCAweDY2LCAweDQyLCAweGViLCAweDJjLCAweGFlLCAweDNiLCAweDgwLAotCTB4ZTEsIDB4ZjQsIDB4OGIsIDB4MGIsIDB4N2UsIDB4NjIsIDB4NjAsIDB4ZmYsIDB4ZTgsIDB4YmMsIDB4ZmQsIDB4YzMsCi0JMHg5NSwgMHg0ZCwgMHgzOCwgMHg5MSwgMHgwNSwgMHgxZSwgMHg5YiwgMHgwMSwgMHg2NiwgMHhiMiwgMHg5NiwgMHg1ZCwKLQkweDZiLCAweGRhLCAweGY2LCAweDc0LCAweDdiLCAweDJiLCAweGM5LCAweDRiLCAweGVmLCAweGRiLCAweDRhLCAweGEzLAotCTB4OWUsIDB4MjgsIDB4YjksIDB4ODAsIDB4YTMsIDB4NWEsIDB4NWYsIDB4MTksIDB4MTIsIDB4NzIsIDB4NzMsIDB4MmUsCi0JMHg1NCwgMHg4ZCwgMHg2OCwgMHg1ZCwgMHgzOSwgMHg2OCwgMHhhNywgMHhlZiwgMHgyNCwgMHg0ZiwgMHgzYSwgMHg5NiwKLQkweGQ1LCAweDdhLCAweDJjLCAweDBjLCAweGQ5LCAweDQxLCAweGIzLCAweDM5LCAweGQ0LCAweDJhLCAweGRiLCAweGYwLAotCTB4OTMsIDB4MmQsIDB4YTQsIDB4NWIsIDB4NmQsIDB4YmIsIDB4ZWUsIDB4NWEsIDB4ZGIsIDB4M2UsIDB4ZDMsIDB4MGUsCi0JMHg1YiwgMHgzMiwgMHhmNSwgMHhkMywgMHgyNSwgMHhlOCwgMHhlNSwgMHgwZiwgMHhhMCwgMHgwZiwgMHg5ZSwgMHg0NCwKLQkweGY5LCAweGFiLCAweDNlLCAweDQ0LCAweGZhLCAweGMzLCAweDcyLCAweDY0LCAweDYwLCAweDllLCAweGRlLCAweGFkLAotCTB4MmQsIDB4OTAsIDB4MjksIDB4MTMsIDB4MmYsIDB4M2EsIDB4ZDksIDB4NjAsIDB4YTEsIDB4YTQsIDB4YzAsIDB4NDUsCi0JMHhmYywgMHhiNCwgMHg4ZSwgMHhkOCwgMHhiNiwgMHg0YiwgMHhmNywgMHhjMSwgMHg0NywgMHhmMiwgMHhkZCwgMHg3NCwKLQkweGM4LCAweGI2LCAweGNmLCAweDFiLCAweDJhLCAweGFhLCAweDQ4LCAweDM3LCAweDM3LCAweDhjLCAweGQ5LCAweDk4LAotCTB4MzYsIDB4NGUsIDB4OTIsIDB4M2MsIDB4MDUsIDB4NTIsIDB4M2QsIDB4NzEsIDB4N2EsIDB4MjcsIDB4NDAsIDB4ZTMsCi0JMHgxMywgMHhkOCwgMHgzNCwgMHgxMiwgMHhjNCwgMHhlMywgMHg1OSwgMHgwNSwgMHgzZiwgMHg1YywgMHgxOSwgMHg0NSwKLQkweDBkLCAweGNkLCAweGU1LCAweDI1LCAweDU5LCAweDU1LCAweDkzLCAweGZjLCAweDUwLCAweDIwLCAweDczLCAweDJiLAotCTB4NTQsIDB4ZWMsIDB4MTEsIDB4ODUsIDB4YjMsIDB4YzQsIDB4NjMsIDB4MTAsIDB4ZGYsIDB4MmQsIDB4MDUsIDB4ZjAsCi0JMHg1NCwgMHg0OSwgMHhjNSwgMHg5MywgMHhhNSwgMHgyNiwgMHgzYywgMHg1ZiwgMHgzMiwgMHg5MCwgMHgxZCwgMHhkNSwKLQkweGY2LCAweDk1LCAweDYxLCAweGEzLCAweDk2LCAweGNjLCAweGY5LCAweDhkLCAweDVjLCAweDBjLCAweDk5LCAweDUxLAotCTB4ZGIsIDB4Y2UsIDB4MTMsIDB4Y2QsIDB4NWUsIDB4ZTIsIDB4ZTEsIDB4ZjUsIDB4ZGMsIDB4OTUsIDB4MzgsIDB4M2UsCi0JMHhlOSwgMHg0MiwgMHg2OCwgMHgzYSwgMHg4MCwgMHgyNywgMHhkMiwgMHgyZSwgMHg1YywgMHg5NSwgMHhkMSwgMHhhYywKLQkweDFjLCAweGY0LCAweGU4LCAweDRlLCAweGExLCAweDI3LCAweDU3LCAweDA5LCAweDZkLCAweGQ0LCAweDQyLCAweDI0LAotCTB4ZTQsIDB4MTYsIDB4MTIsIDB4OWEsIDB4OGYsIDB4YmIsIDB4YTAsIDB4MTcsIDB4NDMsIDB4NzAsIDB4MzcsIDB4MmIsCi0JMHhkMCwgMHg5YiwgMHhjOSwgMHg4ZCwgMHhmYywgMHgxMiwgMHhhYSwgMHhjOCwgMHgyZiwgMHgzNiwgMHg4ZCwgMHg0NywKLQkweGU5LCAweDVlLCAweDgwLCAweGVlLCAweGUxLCAweGNhLCAweDZhLCAweGM4LCAweGNiLCAweDY0LCAweDkwLCAweGRjLAotCTB4NzQsIDB4MTksIDB4NDksIDB4OTcsIDB4NmQsIDB4Y2IsIDB4N2EsIDB4MWIsIDB4ZmEsIDB4MWUsIDB4YTEsIDB4ZWIsCi0JMHgxYSwgMHgxZSwgMHhhZiwgMHgyMiwgMHg1YywgMHgyNCwgMHgxOSwgMHgzNCwgMHgxMywgMHg0ZCwgMHg1OSwgMHhhMiwKLQkweDMxLCAweDRiLCAweDM0LCAweDY2LCAweDg5LCAweGM2LCAweGFjLCAweDRjLCAweDM2LCAweGEzLCAweDE5LCAweGMwLAotCTB4MWYsIDB4OTIsIDB4YWUsIDB4NDIsIDB4YzQsIDB4ZGYsIDB4OWIsIDB4OGUsIDB4OWUsIDB4OWUsIDB4MmEsIDB4MDUsCi0JMHg4OSwgMHhmZSwgMHg5MCwgMHg0MywgMHhmZiwgMHg2MywgMHhhMywgMHgwMiwgMHg5MiwgMHhhZSwgMHhmNSwgMHg5YywKLQkweGM1LCAweDdhLCAweDg0LCAweDYzLCAweDVhLCAweDMyLCAweDg3LCAweDI0LCAweGJkLCAweGE3LCAweGVkLCAweGIzLAotCTB4YTAsIDB4NzUsIDB4OTUsIDB4NDksIDB4ZmYsIDB4NWIsIDB4ZDUsIDB4MDQsIDB4ZTYsIDB4YjIsIDB4NmUsIDB4ZDQsCi0JMHhlOCwgMHg1YSwgMHg4OCwgMHhmNCwgMHgxNSwgMHgyZCwgMHg2MywgMHgwOSwgMHhlZSwgMHg1NiwgMHg2OSwgMHg0ZSwKLQkweGE5LCAweDRhLCAweDU0LCAweDYyLCAweGM4LCAweDQzLCAweDg4LCAweDhjLCAweDRiLCAweDk4LCAweDM1LCAweDY0LAotCTB4ZjIsIDB4NGYsIDB4MDMsIDB4NzIsIDB4MzMsIDB4MmQsIDB4NTcsIDB4OGMsIDB4ZDMsIDB4OTUsIDB4ZTYsIDB4Y2YsCi0JMHhkMiwgMHg1YSwgMHg0NCwgMHgwZiwgMHhjZCwgMHg0NywgMHg3ZSwgMHhjOSwgMHg3MiwgMHg4YywgMHgxMiwgMHgwZCwKLQkweDdiLCAweDFjLCAweDdhLCAweDlmLCAweDJjLCAweDc1LCAweDhiLCAweDhhLCAweGZkLCAweDk4LCAweDY0LCAweDJmLAotCTB4NWEsIDB4MDgsIDB4NDIsIDB4OGIsIDB4ODYsIDB4ODQsIDB4NjYsIDB4MjQsIDB4ODUsIDB4OGEsIDB4OTksIDB4ZDIsCi0JMHg4ZiwgMHg2OCwgMHg0YywgMHhlMCwgMHhiMiwgMHgzMSwgMHgzZCwgMHgxOCwgMHhjZSwgMHgwYSwgMHg1YywgMHhhZiwKLQkweGRiLCAweGQ4LCAweDYwLCAweGY0LCAweDYwLCAweDU3LCAweDY5LCAweGQxLCAweDJmLCAweDM5LCAweDc2LCAweGE5LAotCTB4ZmUsIDB4OTksIDB4NzQsIDB4MjcsIDB4NzYsIDB4NjcsIDB4NDMsIDB4ZDgsIDB4OTUsIDB4MGYsIDB4ZmEsIDB4YTcsCi0JMHhkMywgMHhmYywgMHg0YywgMHgyNywgMHg3ZiwgMHhlNywgMHg2NywgMHg4MSwgMHhjYiwgMHg5ZSwgMHgzNSwgMHg1ZCwKLQkweGY2LCAweDJjLCAweDgxLCAweGUxLCAweDg5LCAweGFmLCAweDUwLCAweDBjLCAweGE5LCAweGMzLCAweDJlLCAweGZkLAotCTB4NjMsIDB4YjIsIDB4MTUsIDB4M2QsIDB4YjEsIDB4MGQsIDB4OGQsIDB4MzgsIDB4YWIsIDB4YjYsIDB4ZTIsIDB4ZTAsCi0JMHg1NCwgMHgzNywgMHg3NiwgMHg0ZiwgMHhhZCwgMHhjNiwgMHhmZSwgMHg4OSwgMHhhNiwgMHg5NCwgMHhkNywgMHgxYywKLQkweGExLCAweGY1LCAweGMzLCAweGM5LCAweDZkLCAweDQyLCAweDFiLCAweDkwLCAweDQ1LCAweDM4LCAweGJhLCAweDhkLAotCTB4NmMsIDB4YjcsIDB4YjksIDB4ZGUsIDB4YjYsIDB4NGYsIDB4YzYsIDB4YzgsIDB4YjYsIDB4OGQsIDB4MTYsIDB4NjMsCi0JMHgxMywgMHgwOSwgMHhhMCwgMHhkYywgMHhhMywgMHg3NSwgMHhiZCwgMHgwZCwgMHgxZiwgMHhiZSwgMHg0ZSwgMHgzNiwKLQkweDM3LCAweDEzLCAweGMzLCAweDM2LCAweDE5LCAweDcyLCAweGFiLCAweDBmLCAweGJmLCAweGIwLCAweDhmLCAweGJhLAotCTB4NTgsIDB4ZWUsIDB4ZjYsIDB4ZDAsIDB4ZWQsIDB4YzYsIDB4MWUsIDB4YzEsIDB4NzEsIDB4YWUsIDB4ZWEsIDB4NTIsCi0JMHgyYywgMHhlMSwgMHhmOSwgMHhmOSwgMHgxZCwgMHhkYiwgMHgwZSwgMHhkMywgMHgzYywgMHhmZCwgMHhiMSwgMHg5NiwKLQkweDQ0LCAweDNmLCAweGU2LCAweGVkLCAweGIzLCAweGJkLCAweGRkLCAweGQ4LCAweDM1LCAweGI3LCAweDFhLCAweDA3LAotCTB4MjYsIDB4ZGMsIDB4NDgsIDB4ZDYsIDB4MGIsIDB4ZDQsIDB4ZTksIDB4ZTEsIDB4ZjIsIDB4ZGQsIDB4NTgsIDB4MGQsCi0JMHg2YiwgMHg4NiwgMHhkZiwgMHhlYiwgMHhjNiwgMHhlMSwgMHhiOSwgMHhjYSwgMHhmNywgMHhlYywgMHhhNSwgMHhlZiwKLQkweDhiLCAweGYzLCAweDVkLCAweDIwLCAweDlkLCAweGIyLCAweDNjLCAweDM5LCAweDRlLCAweDkyLCAweDBhLCAweGNjLAotCTB4MTYsIDB4OWMsIDB4OTgsIDB4MDgsIDB4OTAsIDB4NmUsIDB4M2IsIDB4ODUsIDB4ZWIsIDB4ZjgsIDB4MzIsIDB4YmYsCi0JMHhmNywgMHgxMSwgMHgxYiwgMHhhNywgMHgwYywgMHhkMiwgMHg3MywgMHg3NiwgMHhhMywgMHhmMCwgMHgxZSwgMHhlZiwKLQkweDEyLCAweGVlLCAweGUyLCAweDE2LCAweDUxLCAweDM1LCAweGZkLCAweDJkLCAweGExLCAweDFjLCAweDRmLCAweDg5LAotCTB4ZWEsIDB4NjIsIDB4MmIsIDB4YzksIDB4YmUsIDB4NGYsIDB4NzgsIDB4OGUsIDB4NmIsIDB4YTEsIDB4OTAsIDB4ZjgsCi0JMHgwMywgMHhkMiwgMHg2NywgMHhhZiwgMHg5MCwgMHg4YiwgMHg1MCwgMHgyNSwgMHg3MywgMHg1MCwgMHg0OCwgMHg0NSwKLQkweDlhLCAweGMzLCAweGIxLCAweDIxLCAweDVlLCAweDI3LCAweDQ4LCAweDdhLCAweDgzLCAweDI1LCAweDliLCAweDAzLAotCTB4ZDgsIDB4NGEsIDB4MzksIDB4ZTIsIDB4YTYsIDB4YjQsIDB4ODksIDB4MDMsIDB4ZDksIDB4NmEsIDB4OGEsIDB4OGYsCi0JMHhlYywgMHhmNywgMHhmMywgMHhiNCwgMHhhZSwgMHg4ZSwgMHg4MywgMHgyNSwgMHg1OCwgMHgxZSwgMHhmMywgMHgwMCwKLQkweDU2LCAweDkzLCAweGJmLCAweDlkLCAweDg5LCAweGIxLCAweDJmLCAweDAyLCAweGY5LCAweDZjLCAweDM4LCAweDc5LAotCTB4NDAsIDB4ZDgsIDB4NzYsIDB4NzUsIDB4YzQsIDB4NWUsIDB4N2UsIDB4ZGUsIDB4NjgsIDB4ODksIDB4YmUsIDB4ODgsCi0JMHhmZiwgMHg2ZCwgMHhlNywgMHgwMiwgMHgwMywgMHg4OCwgMHhiNiwgMHg0MywgMHhhOSwgMHgzNiwgMHg3NywgMHhlMywKLQkweGU3LCAweDY5LCAweDI4LCAweDU1LCAweGE2LCAweDg1LCAweDUzLCAweDY5LCAweGMwLCAweDM3LCAweDMyLCAweGFjLAotCTB4N2EsIDB4NDEsIDB4NzYsIDB4ODAsIDB4NzAsIDB4ZjAsIDB4YTAsIDB4ZDAsIDB4N2EsIDB4Y2UsIDB4NTEsIDB4M2EsCi0JMHg0YiwgMHhiNCwgMHg1YiwgMHg4MywgMHgxMiwgMHgyOCwgMHgxZSwgMHgwOSwgMHhhZCwgMHhlZiwgMHg0NSwgMHhiMiwKLQkweGM3LCAweDNmLCAweDEwLCAweDlhLCAweDNhLCAweDJmLCAweGQ4LCAweDRmLCAweDM5LCAweDk3LCAweGVjLCAweDVlLAotCTB4YzgsIDB4MjksIDB4MTYsIDB4YWUsIDB4YmEsIDB4MmMsIDB4YTcsIDB4MGMsIDB4MTMsIDB4NWQsIDB4N2IsIDB4ODksCi0JMHhhZSwgMHg5NywgMHgwYywgMHgyZCwgMHgzOCwgMHgwZCwgMHg3YiwgMHhmOSwgMHgzNiwgMHg4MywgMHg5ZiwgMHg5OSwKLQkweGQ4LCAweDVkLCAweGIyLCAweDQzLCAweDJlLCAweDkzLCAweDY1LCAweDA1LCAweDRiLCAweDMxLCAweDdmLCAweDY1LAotCTB4MGYsIDB4YzcsIDB4NTUsIDB4OTIsIDB4MTEsIDB4NzksIDB4NWEsIDB4ZTEsIDB4Y2IsIDB4NzIsIDB4YWQsIDB4OGQsCi0JMHhlNSwgMHgzNCwgMHhlNiwgMHg5MywgMHg2YiwgMHhlMSwgMHg2ZiwgMHgyYywgMHhiOCwgMHg1MiwgMHgzNSwgMHgyNiwKLQkweDdhLCAweGVlLCAweDFiLCAweGExLCAweGY4LCAweGE0LCAweDRiLCAweDE0LCAweDliLCAweGY0LCAweGM0LCAweGJjLAotCTB4ZjAsIDB4MjUsIDB4ZGUsIDB4OGYsIDB4N2IsIDB4MDQsIDB4YzUsIDB4YTYsIDB4NTQsIDB4YjUsIDB4MTksIDB4ZWMsCi0JMHhmZSwgMHgyMCwgMHhlZiwgMHgyMSwgMHhmZCwgMHhhMiwgMHg2NywgMHg2NywgMHgyMSwgMHhlMSwgMHg3YSwgMHg5NywKLQkweDZjLCAweGFjLCAweDhhLCAweDYyLCAweDI5LCAweDBhLCAweDRkLCAweGRkLCAweDE3LCAweDI5LCAweGZmLCAweGRjLAotCTB4MTAsIDB4ZjMsIDB4ZmMsIDB4YWIsIDB4MmEsIDB4NTMsIDB4YmEsIDB4ZDIsIDB4ODMsIDB4ZmIsIDB4YWYsIDB4OTksCi0JMHg0ZCwgMHhkNCwgMHg1MSwgMHgzYywgMHg1NywgMHg3MSwgMHgzYSwgMHhkZSwgMHg4NSwgMHhlMSwgMHg1MiwgMHgzNSwKLQkweGQ5LCAweGRmLCAweGQzLCAweGU1LCAweDNkLCAweDdhLCAweDUzLCAweGY3LCAweGJiLCAweGU5LCAweGU1LCAweGYwLAotCTB4OTksIDB4ZjgsIDB4ZjQsIDB4NjAsIDB4YmIsIDB4ZGUsIDB4NzUsIDB4OTMsIDB4MzgsIDB4ZDksIDB4ZTgsIDB4NDEsCi0JMHg5YywgMHg2ZCwgMHg1YywgMHg5OSwgMHg0ZiwgMHhlMywgMHhlMywgMHg0NiwgMHg1ZCwgMHhhNywgMHhkYywgMHhkMSwKLQkweDNjLCAweDcwLCAweDQxLCAweDM0LCAweDI3LCAweGNlLCAweDBiLCAweDgxLCAweGYzLCAweGFkLCAweDAyLCAweDY3LAotCTB4YWUsIDB4OGUsIDB4MjQsIDB4Y2YsIDB4YzAsIDB4MDMsIDB4ZGMsIDB4OWMsIDB4MjAsIDB4ZmIsIDB4NjgsIDB4NGEsCi0JMHhjOSwgMHhhNiwgMHg4MiwgMHg2ZCwgMHg2OSwgMHhmNiwgMHg2MywgMHhiMiwgMHhlYiwgMHgxOSwgMHgzYywgMHg3NCwKLQkweGM0LCAweGU4LCAweDg2LCAweDM1LCAweGM3LCAweGI2LCAweGQzLCAweDhhLCAweDIzLCAweDczLCAweDNkLCAweGIwLAotCTB4NGEsIDB4MzIsIDB4NzIsIDB4MDEsIDB4OTMsIDB4YWUsIDB4NDgsIDB4YjksIDB4Y2QsIDB4ZDYsIDB4Y2UsIDB4NWMsCi0JMHg3ZSwgMHhhYiwgMHhiYiwgMHhlMiwgMHhiYiwgMHgyNCwgMHg4MywgMHhlYywgMHhiZCwgMHg3ZSwgMHg3OCwgMHg1OSwKLQkweGJmLCAweGE3LCAweDQ5LCAweDM2LCAweGFkLCAweDc4LCAweGJhLCAweDE0LCAweGE1LCAweDE4LCAweDY3LCAweDkwLAotCTB4NmMsIDB4NzQsIDB4OGEsIDB4MTMsIDB4MjEsIDB4YjIsIDB4MmIsIDB4MDUsIDB4NWIsIDB4MjcsIDB4YjQsIDB4YzMsCi0JMHgxNCwgMHgwZiwgMHg0NiwgMHg3MywgMHg2OCwgMHg0NywgMHgzMiwgMHhhMCwgMHg1MiwgMHhjZSwgMHgzZSwgMHhiNSwKLQkweGUwLCAweGZiLCAweGRiLCAweGU5LCAweGFhLCAweDU5LCAweDQ5LCAweGUwLCAweDQ1LCAweDA5LCAweDY4LCAweDZiLAotCTB4MzQsIDB4MjMsIDB4ZmIsIDB4MWEsIDB4NDksIDB4MGYsIDB4ZjUsIDB4NDUsIDB4MGYsIDB4ZWUsIDB4OWIsIDB4NjgsCi0JMHhjMCwgMHhiZCwgMHg1MywgMHg1ZSwgMHhlYywgMHg5OCwgMHhiMCwgMHhmMSwgMHg3ZSwgMHg4YywgMHg2ZCwgMHg0MiwKLQkweGViLCAweDIzLCAweDZmLCAweGVhLCAweGFjLCAweDIxLCAweGQ5LCAweDZlLCAweDhlLCAweDQ1LCAweDEyLCAweDFlLAotCTB4ZTEsIDB4NDIsIDB4NzUsIDB4YjEsIDB4ODcsIDB4NzIsIDB4N2YsIDB4OTIsIDB4ZmQsIDB4YzEsIDB4YTAsIDB4MzksCi0JMHg0MiwgMHhiYiwgMHg4YywgMHhhZiwgMHgyMywgMHgxNSwgMHg1MCwgMHhlMCwgMHgyZSwgMHhmYSwgMHgyOCwgMHg4NiwKLQkweGIwLCAweGZmLCAweGYyLCAweGIzLCAweDZmLCAweDYwLCAweDZiLCAweDk1LCAweDBmLCAweDcyLCAweDQ2LCAweGMxLAotCTB4MjgsIDB4ZTUsIDB4N2QsIDB4MmMsIDB4YWIsIDB4NDIsIDB4NTcsIDB4YjMsIDB4NDQsIDB4OWYsIDB4ODAsIDB4N2YsCi0JMHg3NiwgMHhiMiwgMHhjOSwgMHg3ZiwgMHg4YywgMHhlMiwgMHhlYSwgMHg5ZCwgMHg1OSwgMHg4OSwgMHhkNywgMHg2MSwKLQkweDljLCAweDQwLCAweDczLCAweGFiLCAweDc4LCAweDhjLCAweDYyLCAweGY0LCAweDAzLCAweDE0LCAweDc3LCAweDRlLAotCTB4OTQsIDB4ZjIsIDB4ODIsIDB4ZTMsIDB4ODgsIDB4YzMsIDB4NGYsIDB4OTYsIDB4NzgsIDB4Y2IsIDB4MTIsIDB4NmYsCi0JMHg1OSwgMHhlMiwgMHg4YiwgMHhlMiwgMHhjMSwgMHg5MywgMHg1OSwgMHhlNiwgMHhlMywgMHgyMywgMHhmMiwgMHhjZCwKLQkweDA0LCAweGYxLCAweGVlLCAweGMxLCAweDc2LCAweGEyLCAweGY3LCAweGZlLCAweGE5LCAweDFhLCAweGRjLCAweDQzLAotCTB4ZjQsIDB4MTYsIDB4MGQsIDB4YWQsIDB4ZWYsIDB4MmYsIDB4ODQsIDB4OGQsIDB4N2MsIDB4NGMsIDB4YjMsIDB4NzYsCi0JMHgwYSwgMHgyZiwgMHhhNCwgMHg2NiwgMHhkYiwgMHhlZSwgMHgzMSwgMHg5OCwgMHg2NywgMHhiMiwgMHg0ZiwgMHhjOSwKLQkweGUxLCAweDc5LCAweDVmLCAweDkyLCAweGU0LCAweGRmLCAweDRmLCAweGVmLCAweDZjLCAweDliLCAweGMyLCAweGE3LAotCTB4MTIsIDB4ZjEsIDB4ZTQsIDB4MjEsIDB4MWUsIDB4MGYsIDB4MTgsIDB4NWEsIDB4NjIsIDB4MTUsIDB4YzUsIDB4ZjMsCi0JMHg3MywgMHg3YSwgMHhhNCwgMHg3YywgMHg0ZSwgMHhjNiwgMHhkNywgMHg0OCwgMHgxZSwgMHgwNiwgMHhjYiwgMHhhMywKLQkweDk5LCAweGY4LCAweGI5LCAweDhmLCAweDMwLCAweDhlLCAweGRmLCAweDY0LCAweDNlLCAweDIzLCAweGQxLCAweDVmLAotCTB4MTAsIDB4ZWYsIDB4OTEsIDB4NjIsIDB4YzAsIDB4N2YsIDB4ZTYsIDB4NTAsIDB4OTMsIDB4ZmYsIDB4YTUsIDB4OTEsCi0JMHgwYSwgMHhmZCwgMHgzYiwgMHg4OSwgMHhmZSwgMHhkOSwgMHg5OCwgMHg4ZCwgMHg4MywgMHg0NCwgMHhmZiwgMHgxMywKLQkweDQ0LCAweDdmLCAweDNmLCAweGM3LCAweGYxLCAweDA1LCAweGZhLCAweDRmLCAweDk0LCAweDc4LCAweGRkLCAweDJmLAotCTB4ZTMsIDB4NjEsIDB4OTEsIDB4ZmUsIDB4MDYsIDB4NmMsIDB4OWQsIDB4NWEsIDB4OTQsIDB4OTcsIDB4NmQsIDB4ZGYsCi0JMHg2NiwgMHgzYywgMHg2MywgMHhmZiwgMHgxZSwgMHhjOSwgMHg2YywgMHg3OSwgMHg5MSwgMHhlNSwgMHhjNiwgMHhmOCwKLQkweDJkLCAweDcyLCAweGY4LCAweDRlLCAweGRjLCAweDIxLCAweGMxLCAweGViLCAweGMzLCAweDkyLCAweDIyLCAweGU3LAotCTB4ODAsIDB4MTAsIDB4OWUsIDB4MjEsIDB4ZmQsIDB4M2UsIDB4NGYsIDB4MzksIDB4ZWMsIDB4ZTksIDB4ZDIsIDB4ZTUsCi0JMHgzOSwgMHg4ZCwgMHg3NSwgMHgzZCwgMHg0OSwgMHgzYSwgMHhkNiwgMHg3MiwgMHgxNiwgMHhjNSwgMHhiNCwgMHg1NCwKLQkweDI5LCAweDg5LCAweDNkLCAweDUzLCAweDQ4LCAweGNlLCAweDFhLCAweDdmLCAweDQ2LCAweDgxLCAweDY1LCAweDE5LAotCTB4NjQsIDB4YmQsIDB4M2EsIDB4YTksIDB4ZWEsIDB4NWUsIDB4ZGMsIDB4M2UsIDB4MTMsIDB4YzAsIDB4NDAsIDB4NjksCi0JMHgwMywgMHhiMiwgMHgxNCwgMHg2NywgMHg3NiwgMHg1MiwgMHg1YywgMHhmZSwgMHgzMCwgMHg5NiwgMHhkYywgMHhlMSwKLQkweDQ3LCAweDg0LCAweGY0LCAweDFiLCAweGMwLCAweGRkLCAweGY0LCAweGNlLCAweDgxLCAweDI5LCAweGE2LCAweDVmLAotCTB4NWQsIDB4ZDAsIDB4NzMsIDB4MDAsIDB4NzcsIDB4ZDIsIDB4YmQsIDB4YmQsIDB4NTMsIDB4MGEsIDB4NWUsIDB4MzAsCi0JMHg4ZSwgMHgxMCwgMHg4ZSwgMHhhOSwgMHhlMCwgMHg4YSwgMHgzYiwgMHhiMiwgMHg1MCwgMHhjOSwgMHgyZCwgMHgwOSwKLQkweGY3LCAweDQ1LCAweGEyLCAweDJmLCAweGQwLCAweGY3LCAweGVkLCAweDI1LCAweGFmLCAweDdmLCAweDc4LCAweDEyLAotCTB4ZGYsIDB4NTksIDB4NmUsIDB4ZmEsIDB4YjEsIDB4ODQsIDB4MzAsIDB4ZDgsIDB4MmQsIDB4NDYsIDB4YTQsIDB4YmMsCi0JMHg5ZSwgMHgzMCwgMHhkMywgMHg2MCwgMHg0OSwgMHhjMiwgMHhiNywgMHg2NywgMHhiYywgMHg3OCwgMHg2MCwgMHhlMiwKLQkweDUzLCAweGJiLCAweDJhLCAweGVlLCAweGMyLCAweGNkLCAweGNkLCAweDVlLCAweGRjLCAweDNmLCAweDkzLCAweGM0LAotCTB4YmUsIDB4MjksIDB4ODQsIDB4YWEsIDB4NjMsIDB4NjMsIDB4MTQsIDB4YjMsIDB4MmIsIDB4NzksIDB4YTAsIDB4ODYsCi0JMHg3OCwgMHhkZiwgMHgzZiwgMHhlNSwgMHhmMywgMHhmNywgMHgxZiwgMHg2MiwgMHgxOSwgMHg2YywgMHgwOCwgMHg5MiwKLQkweDc3LCAweDk0LCAweGFiLCAweDYzLCAweDMyLCAweGI2LCAweDFiLCAweGYyLCAweDkyLCAweDZhLCAweDMyLCAweGY0LAotCTB4MjMsIDB4MzQsIDB4ZGYsIDB4MzQsIDB4ZTQsIDB4NTcsIDB4OTcsIDB4MjMsIDB4NzIsIDB4YjgsIDB4NTEsIDB4MmUsCi0JMHg4ZiwgMHgyZSwgMHg0MSwgMHgwMywgMHgxZSwgMHg5OCwgMHg0YiwgMHg2MiwgMHg4YywgMHg2YywgMHhmNCwgMHhiZSwKLQkweDg5LCAweGUxLCAweGVmLCAweGQ0LCAweDUzLCAweGVjLCAweGYwLCAweGI3LCAweDY5LCAweGZkLCAweDZmLCAweDA4LAotCTB4MTMsIDB4ZjksIDB4ODgsIDB4MDcsIDB4M2IsIDB4NjcsIDB4N2MsIDB4ZmUsIDB4MWQsIDB4ODcsIDB4ZWMsIDB4ZjUsCi0JMHg2YywgMHg0ZiwgMHg3NywgMHhjZCwgMHgzNSwgMHhlMCwgMHg5ZSwgMHgyOSwgMHhiYSwgMHgzNywgMHhjMSwgMHgzNiwKLQkweDRjLCAweGI2LCAweDE2LCAweGE5LCAweDI2LCAweGRlLCAweGMyLCAweDQ5LCAweDBmLCAweGUxLCAweDI0LCAweDM5LAotCTB4NTYsIDB4NDMsIDB4ZjIsIDB4ZjAsIDB4ZTAsIDB4NGUsIDB4YzcsIDB4MTYsIDB4NTQsIDB4NmMsIDB4OWYsIDB4YjIsCi0JMHhmMSwgMHg5NiwgMHgxMSwgMHhjNSwgMHgyOCwgMHhkOSwgMHhmNSwgMHhlMSwgMHgyOSwgMHg2ZCwgMHhiZSwgMHg5MywKLQkweDMwLCAweGNlLCAweDNiLCAweGIyLCAweDc2LCAweGI4LCAweDU5LCAweDRlLCAweGEyLCAweDYxLCAweDBkLCAweGM1LAotCTB4ZjYsIDB4MDYsIDB4ZGIsIDB4YmUsIDB4YTMsIDB4YWQsIDB4NjUsIDB4ZTAsIDB4YzcsIDB4NDQsIDB4NzMsIDB4YmQsCi0JMHhiOSwgMHgwYywgMHhlNSwgMHg3YSwgMHg2ZCwgMHgxNCwgMHg2OCwgMHgxOSwgMHhhYywgMHg5MiwgMHhhZSwgMHhjNiwKLQkweGQ5LCAweGE1LCAweDFjLCAweGZmLCAweDM4LCAweDg2LCAweDA3LCAweGZjLCAweDBkLCAweDk5LCAweDRhLCAweDZlLAotCTB4NmIsIDB4MjgsIDB4MzYsIDB4ZjksIDB4ZWIsIDB4MzMsIDB4NDEsIDB4N2YsIDB4N2QsIDB4MTEsIDB4ZmUsIDB4YWEsCi0JMHgyMiwgMHhmMCwgMHgwMywgMHg4YSwgMHgyZiwgMHg0YiwgMHhkNiwgMHhmYywgMHhjYSwgMHg0ZSwgMHgzNSwgMHgzOCwKLQkweDM4LCAweGQwLCAweGZmLCAweGRjLCAweGE0LCAweDY2LCAweDk1LCAweGExLCAweGVkLCAweGEzLCAweDcwLCAweDg5LAotCTB4NDcsIDB4ZTcsIDB4NWMsIDB4ZmUsIDB4ZTMsIDB4MTQsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MjgsIDB4ZjYsIDB4OTIsCi0JMHgzZSwgMHg4NywgMHhjOCwgMHgxNiwgMHg3ZSwgMHhiMSwgMHgwNiwgMHhkOCwgMHg5ZiwgMHgwOSwgMHg4NywgMHgwYywKLQkweGQxLCAweDQ3LCAweDEzLCAweDAzLCAweGJiLCAweDhiLCAweDE0LCAweGViLCAweGE1LCAweGRmLCAweGEyLCAweDQwLAotCTB4YTYsIDB4NDUsIDB4MjksIDB4OWQsIDB4MjEsIDB4OWQsIDB4NzEsIDB4YzMsIDB4NWEsIDB4NWEsIDB4ZDEsIDB4YzksCi0JMHgzZCwgMHhkOSwgMHhlNywgMHg2ZCwgMHhiZiwgMHhhZSwgMHhlNywgMHg4YSwgMHhhNCwgMHhiMywgMHgwNywgMHg0YiwKLQkweDNlLCAweDBjLCAweDEyLCAweDBlLCAweDU4LCAweDQyLCAweGQ4LCAweGYxLCAweDdlLCAweGIyLCAweDhiLCAweGZiLAotCTB4MjYsIDB4NjQsIDB4YTIsIDB4OGYsIDB4YzcsIDB4MjUsIDB4OTEsIDB4NWMsIDB4NTYsIDB4YzEsIDB4YTAsIDB4MGYsCi0JMHhjYywgMHhiMCwgMHg1ZCwgMHg5MiwgMHgxZCwgMHg5MSwgMHgyZCwgMHgzZSwgMHg0MywgMHhiOSwgMHhmZSwgMHhlOSwKLQkweGNmLCAweDYxLCAweDBmLCAweDRkLCAweGI1LCAweDJlLCAweGU1LCAweGZjLCAweDhhLCAweDNjLCAweDg2LCAweGE3LAotCTB4OTgsIDB4NjcsIDB4ZWQsIDB4MzAsIDB4YTQsIDB4MjQsIDB4NmUsIDB4MzAsIDB4N2UsIDB4NDIsIDB4YjksIDB4ODAsCi0JMHg3OSwgMHgyNywgMHhlYywgMHgzYiwgMHgxNSwgMHhjNSwgMHhjMywgMHg1OSwgMHhjMiwgMHgzMiwgMHhiMSwgMHhmNywKLQkweGVkLCAweDNiLCAweDAzLCAweDJjLCAweDAzLCAweGU2LCAweDI3LCAweDJlLCAweDczLCAweGRlLCAweDZjLCAweDIwLAotCTB4Y2MsIDB4ZmIsIDB4ZmYsIDB4NmYsIDB4NzcsIDB4YjcsIDB4ZGIsIDB4MjksIDB4MDcsIDB4YzMsIDB4MTIsIDB4YjYsCi0JMHgyNiwgMHg3YiwgMHg0YSwgMHg1ZCwgMHhiMiwgMHg5ZiwgMHhmYiwgMHhlZCwgMHhiMywgMHgwMSwgMHhjZSwgMHhkMywKLQkweDBkLCAweDQ4LCAweDVkLCAweGIyLCAweDA1LCAweGI2LCAweDI1LCAweDJjLCAweDM3LCAweGRhLCAweDc2LCAweGRkLAotCTB4YWYsIDB4ODIsIDB4ZWQsIDB4MjEsIDB4N2EsIDB4OTksIDB4M2QsIDB4YjgsIDB4ODksIDB4MjYsIDB4MTUsIDB4M2IsCi0JMHhlNiwgMHhkOCwgMHg3ZSwgMHhlZCwgMHg4ZiwgMHg5NiwgMHg5YiwgMHhmZiwgMHg0MCwgMHgzOSwgMHg0MiwgMHgzZiwKLQkweGZjLCAweDEzLCAweGRjLCAweDQ4LCAweGY3LCAweDAzLCAweGY4LCAweDM2LCAweGY5LCAweGQxLCAweGRkLCAweGM0LAotCTB4ZTcsIDB4OGUsIDB4ZjYsIDB4YmIsIDB4MWQsIDB4YmYsIDB4ZGQsIDB4NTEsIDB4YmEsIDB4OGUsIDB4ZWUsIDB4YjMsCi0JMHhiYywgMHgzYiwgMHhiMSwgMHgyZiwgMHg2YiwgMHgyMCwgMHg5ZCwgMHgyZCwgMHgzYiwgMHhmOSwgMHhjNywgMHg2NSwKLQkweGM2LCAweGYxLCAweDdkLCAweDhhLCAweGIzLCAweGNmLCAweDk0LCAweDE4LCAweDhiLCAweDI1LCAweDFjLCAweDFjLAotCTB4ZjYsIDB4YmQsIDB4NTIsIDB4MmIsIDB4OWUsIDB4MjUsIDB4OWYsIDB4N2MsIDB4OWEsIDB4NjIsIDB4ZWUsIDB4NzcsCi0JMHgxZCwgMHg3YywgMHhlNiwgMHgxMiwgMHgwNywgMHhkMywgMHg4NCwgMHg0NSwgMHg0NywgMHgyYywgMHhhNCwgMHhmMywKLQkweDIxLCAweDc4LCAweDBlLCAweDg1LCAweGY3LCAweGVkLCAweDEwLCAweGRhLCAweDBmLCAweDQ4LCAweDVlLCAweGZlLAotCTB4ZmQsIDB4YjMsIDB4MmIsIDB4NTAsIDB4N2QsIDB4NDgsIDB4Y2IsIDB4MTEsIDB4ZGQsIDB4ZmUsIDB4ODcsIDB4NjcsCi0JMHg3NSwgMHhjMiwgMHhkMiwgMHg0MSwgMHhmZiwgMHhkZSwgMHhiYywgMHhlYSwgMHhkZiwgMHgzMywgMHgxOSwgMHhmMCwKLQkweGVmLCAweDk5LCAweDZkLCAweDIwLCAweDNmLCAweDVhLCAweGU2LCAweDFmLCAweDllLCAweDBkLCAweGZhLCAweDc3LAotCTB4YTUsIDB4OWIsIDB4ZmMsIDB4YmIsIDB4ZjIsIDB4NmIsIDB4MTAsIDB4NmEsIDB4ODAsIDB4YjUsIDB4OGMsIDB4NzIsCi0JMHhjNCwgMHgzZCwgMHgxMywgMHhkZiwgMHg0NCwgMHhhZSwgMHhiZSwgMHgxMiwgMHhmNywgMHgwNywgMHhjOCwgMHgzNiwKLQkweGVhLCAweGM4LCAweDBlLCAweGFmLCAweDkxLCAweDZlLCAweDQ2LCAweDc5LCAweDY5LCAweGU1LCAweGRlLCAweGI3LAotCTB4ZTksIDB4ZGUsIDB4MDMsIDB4NmQsIDB4ZjAsIDB4ZmYsIDB4YTUsIDB4MTMsIDB4N2IsIDB4ODEsIDB4NjcsIDB4YzksCi0JMHhkNiwgMHg5ZSwgMHg2OSwgMHhhMywgMHg3YSwgMHhmMiwgMHg5MiwgMHhhZCwgMHhiOSwgMHgyOCwgMHhkZSwgMHhkYSwKLQkweGI2LCAweGIxLCAweDQ2LCAweDIwLCAweGQ4LCAweGI2LCAweDExLCAweDU4LCAweGIyLCAweDU4LCAweDQzLCAweDI2LAotCTB4NzMsIDB4YWUsIDB4YjYsIDB4MjQsIDB4OTYsIDB4ZWIsIDB4OWIsIDB4NzAsIDB4NDQsIDB4YTUsIDB4NTQsIDB4ZDMsCi0JMHhmNiwgMHgzNSwgMHgyYywgMHhiYywgMHg4MywgMHg2ZiwgMHg0ZiwgMHg3OCwgMHg5MCwgMHhkYSwgMHhhMiwgMHg2MiwKLQkweDk2LCAweDMwLCAweGNhLCAweDVkLCAweDM0LCAweGZmLCAweGNhLCAweDU4LCAweDhiLCAweDNhLCAweDQ3LCAweDdhLAotCTB4NDgsIDB4YWEsIDB4N2MsIDB4OGYsIDB4N2MsIDB4YTIsIDB4NmQsIDB4MmQsIDB4ZjksIDB4NDQsIDB4NjUsIDB4ZmQsCi0JMHhhNywgMHg0OCwgMHg1ZiwgMHhhMywgMHg3MywgMHg1MSwgMHhlYywgMHgyOSwgMHhmZCwgMHg0MCwgMHhhYSwgMHhlNCwKLQkweDE3LCAweDJkLCAweDk3LCAweGM0LCAweDY5LCAweDY3LCAweGVjLCAweDUzLCAweGQ5LCAweDM3LCAweGVjLCAweDkwLAotCTB4NjMsIDB4NzcsIDB4MDIsIDB4OGYsIDB4YWMsIDB4OGUsIDB4ZWMsIDB4ZmIsIDB4ZWYsIDB4NTIsIDB4MjMsIDB4ZjEsCi0JMHg0NSwgMHhiMiwgMHhjYiwgMHgzYSwgMHhmNSwgMHg2MywgMHhkZCwgMHgxNSwgMHhmYSwgMHhiZiwgMHhjNSwgMHhmNywKLQkweDU1LCAweDk2LCAweGVkLCAweGEwLCAweGQ4LCAweDQ3LCAweDc1LCAweDJhLCAweDk1LCAweDRjLCAweDc1LCAweDRiLAotCTB4ZjQsIDB4NDMsIDB4NzgsIDB4YmEsIDB4ODcsIDB4ZWYsIDB4MDUsIDB4ZmMsIDB4ZmIsIDB4MjcsIDB4OTMsIDB4NTIsCi0JMHg0MCwgMHg4NywgMHhlYSwgMHgzNiwgMHgzYiwgMHhjNSwgMHhmZSwgMHhkOSwgMHg2NSwgMHhmZSwgMHg4NywgMHgyNywKLQkweDM3LCAweDhhLCAweDg3LCAweDY3LCAweDliLCAweGZjLCAweGMzLCAweGU5LCAweDJlLCAweDMxLCAweDljLCAweGRmLAotCTB4MjIsIDB4YWMsIDB4ZGMsIDB4YjcsIDB4ODQsIDB4MzUsIDB4OWIsIDB4MTIsIDB4NTYsIDB4YmUsIDB4OGYsIDB4YWUsCi0JMHhiZCwgMHg2MiwgMHgzMiwgMHgzZiwgMHgyOCwgMHhmNiwgMHhlNCwgMHg3OSwgMHg3ZSwgMHhkMiwgMHgxNSwgMHhhZCwKLQkweGYxLCAweDNkLCAweDhhLCAweGJkLCAweGNmLCAweDUyLCAweGVjLCAweDdkLCAweDg2LCAweDYyLCAweGVmLCAweGQzLAotCTB4NjQsIDB4ZWYsIDB4ZGYsIDB4YmQsIDB4ODQsIDB4NmQsIDB4ZDksIDB4YzYsIDB4OTMsIDB4OGMsIDB4NDksIDB4ZmMsCi0JMHg3ZiwgMHg1MSwgMHgzYywgMHg0OSwgMHhmYSwgMHg2NiwgMHhkOSwgMHhmZCwgMHgyNywgMHhiMiwgMHg2ZCwgMHg5NiwKLQkweGM5LCAweDAzLCAweDljLCAweDJiLCAweDQ4LCAweDRmLCAweDE3LCAweDFkLCAweDViLCAweDdlLCAweDY0LCAweDM1LAotCTB4NjMsIDB4YTgsIDB4NDEsIDB4YjEsIDB4OTUsIDB4ZTgsIDB4NGIsIDB4YmEsIDB4MDgsIDB4ZmIsIDB4ZTgsIDB4ODQsCi0JMHg0YiwgMHhiMiwgMHg4MywgMHhlMiwgMHg4ZSwgMHgzYywgMHhkZiwgMHgzZiwgMHg4MCwgMHg5ZCwgMHg1NCwgMHgwYiwKLQkweDFlLCAweDhjLCAweDg1LCAweDdiLCAweGI2LCAweDExLCAweDY2LCAweGRhLCAweDRjLCAweDk4LCAweDY5LCAweDY1LAotCTB4NGMsIDB4YzEsIDB4ODUsIDB4ZDYsIDB4NGYsIDB4NmMsIDB4MmMsIDB4NDUsIDB4ZjIsIDB4ZGUsIDB4YjgsIDB4OTYsCi0JMHhjYiwgMHg1NSwgMHhmMiwgMHhlZCwgMHg2OCwgMHgwNiwgMHg1YywgMHhhZiwgMHhhMywgMHhhZSwgMHg1NiwgMHhkNywKLQkweDRlLCAweDI0LCAweDExLCAweGRlLCAweDE3LCAweDk3LCAweDYwLCAweDU1LCAweDk5LCAweDZlLCAweGRjLCAweGUzLAotCTB4ZDQsIDB4ODgsIDB4MWIsIDB4MzAsIDB4MzEsIDB4MjEsIDB4YjAsIDB4YmQsIDB4MmQsIDB4ZjksIDB4ODcsIDB4NmUsCi0JMHg5MiwgMHhkNSwgMHgzYiwgMHhlZCwgMHgwOCwgMHg5MCwgMHg3YSwgMHg4NSwgMHg0MiwgMHhmNSwgMHg3YywgMHgxNywKLQkweDQ5LCAweGFmLCAweDkzLCAweDcyLCAweGVlLCAweDkxLCAweGVjLCAweDVhLCAweDM0LCAweGI2LCAweDI5LCAweGE0LAotCTB4NDMsIDB4MTcsIDB4NmUsIDB4MmIsIDB4ZGUsIDB4NDAsIDB4N2EsIDB4OGMsIDB4MWMsIDB4N2UsIDB4MGUsIDB4NWUsCi0JMHhmZiwgMHgwYiwgMHg5MywgMHgyNiwgMHg0NiwgMHhiMiwgMHhmOCwgMHg4ZSwgMHg4ZiwgMHg2YSwgMHhiNywgMHhiYiwKLQkweDA5LCAweDM3LCAweDdkLCAweDk3LCAweDY4LCAweGQ4LCAweGQ0LCAweDE2LCAweGU5LCAweGEyLCAweDFhLCAweDVlLAotCTB4ZjUsIDB4OWEsIDB4NTUsIDB4MTgsIDB4NmYsIDB4ZjYsIDB4NDMsIDB4ZDUsIDB4NTMsIDB4ZTIsIDB4OTUsIDB4N2MsCi0JMHhlNCwgMHhmMCwgMHgwZSwgMHhlOSwgMHg1YiwgMHhlMiwgMHhjNywgMHhiMywgMHgyNiwgMHgxZSwgMHgyZSwgMHhmNSwKLQkweDg5LCAweGJmLCAweDljLCAweDU1LCAweDQwLCAweGJhLCAweGExLCAweGI4LCAweDY1LCAweGUwLCAweDMwLCAweGQxLAotCTB4ZTUsIDB4MjYsIDB4OWMsIDB4ZTQsIDB4ZmUsIDB4MWQsIDB4ODEsIDB4MmIsIDB4ZjQsIDB4MjQsIDB4YmUsIDB4YmQsCi0JMHg5NiwgMHg3ZCwgMHhhMSwgMHgxMiwgMHhkMywgMHg1YywgMHg2YiwgMHg4MSwgMHg3ZCwgMHg2NCwgMHg5MywgMHg4ZCwKLQkweDk5LCAweDRlLCAweGIxLCAweDljLCAweGZlLCAweGJmLCAweDQwLCAweDc5LCAweDJkLCAweDI5LCAweDc1LCAweDg5LAotCTB4NDYsIDB4YzIsIDB4YTQsIDB4NGIsIDB4YTcsIDB4N2IsIDB4YzUsIDB4OTIsIDB4MjIsIDB4NjMsIDB4NTAsIDB4YTgsCi0JMHg0YiwgMHg0OSwgMHg0NiwgMHg0YiwgMHg4YiwgMHhlNywgMHhlNSwgMHgwYSwgMHhmNiwgMHg3NywgMHhiMywgMHgyZCwKLQkweDU5LCAweDNlLCAweDUzLCAweGYxLCAweDFmLCAweGE0LCAweGQ4LCAweGJlLCAweDIzLCAweGQ2LCAweDQ1LCAweGY4LAotCTB4OTgsIDB4ZWYsIDB4MGYsIDB4OGEsIDB4MTEsIDB4OTIsIDB4NjMsIDB4Y2UsIDB4ZWQsIDB4ZDgsIDB4OGUsIDB4ZmYsCi0JMHhjOCwgMHgyNCwgMHhkYywgMHg4ZCwgMHgyNiwgMHg0MiwgMHg1NSwgMHg5NCwgMHgzYiwgMHhmZSwgMHhlNywgMHg5YSwKLQkweDg4LCAweGY1LCAweDljLCAweGQ0LCAweDJkLCAweDQ2LCAweGYzLCAweDAxLCAweGZmLCAweGUxLCAweDQ5LCAweGNlLAotCTB4MzMsIDB4OWQsIDB4ZTIsIDB4MzAsIDB4ZTksIDB4M2MsIDB4NGIsIDB4M2EsIDB4Y2YsIDB4OTIsIDB4Y2UsIDB4MzMsCi0JMHhhNCwgMHhmMywgMHhjYywgMHg5NywgMHhlOCwgMHg3YywgMHgyZiwgMHhlOSwgMHg3YywgMHg1NywgMHhmZSwgMHg2MywKLQkweDQ3LCAweDg3LCAweDJlLCAweGQzLCAweDQ0LCAweDk2LCAweGYyLCAweGYyLCAweDc4LCAweDczLCAweDg1LCAweGJmLAotCTB4MGYsIDB4NDksIDB4MTYsIDB4YTcsIDB4NjIsIDB4NWYsIDB4NzcsIDB4YzEsIDB4NmIsIDB4NTIsIDB4NmMsIDB4ZWQsCi0JMHhhNiwgMHg3NywgMHhiZSwgMHhiMiwgMHg2MCwgMHhlMywgMHhhYSwgMHg3ZiwgMHg2YywgMHhiMiwgMHg1MywgMHg4YywKLQkweDkxLCAweGRmLCAweDhkLCAweGQzLCAweGZjLCAweGUzLCAweGU0LCAweDc3LCAweGMzLCAweGU5LCAweDdmLCAweDhlLAotCTB4ZGQsIDB4YjAsIDB4ZGQsIDB4YzEsIDB4ZjIsIDB4NTIsIDB4ZGUsIDB4YWEsIDB4MjEsIDB4YmIsIDB4NzQsIDB4OTksCi0JMHg2YywgMHg0MywgMHg1YiwgMHg0NCwgMHhmMiwgMHhlOCwgMHhiNywgMHg0NCwgMHhmMiwgMHg1OCwgMHg0YSwgMHgyNCwKLQkweDBiLCAweDdkLCAweDc0LCAweGVkLCAweDE1LCAweDM3LCAweDM5LCAweGY1LCAweGU3LCAweGEwLCAweGU4LCAweDJjLAotCTB4MDQsIDB4ZmMsIDB4NTMsIDB4YjQsIDB4Y2UsIDB4MTQsIDB4ZjEsIDB4ZjEsIDB4MDgsIDB4YWQsIDB4ZjMsIDB4ODgsCi0JMHg2MywgMHhiYiwgMHhlMywgMHgyZSwgMHhjZSwgMHhmZiwgMHhjZiwgMHg2NywgMHhkOSwgMHhjZSwgMHhkOCwgMHhiZSwKLQkweGRlLCAweDI1LCAweGRhLCAweGQ5LCAweDM3LCAweDJlLCAweGY1LCAweDc2LCAweGU4LCAweGFmLCAweDVkLCAweDg2LAotCTB4YmUsIDB4YzMsIDB4NTUsIDB4ZTEsIDB4ODksIDB4NzMsIDB4M2YsIDB4ZTcsIDB4N2EsIDB4OGUsIDB4YzMsIDB4YWEsCi0JMHg1MywgMHgwMywgMHgzZSwgMHg3MywgMHgwOSwgMHgwMywgMHgzMCwgMHgxZSwgMHg4MCwgMHhiMiwgMHhjNCwgMHg3YywKLQkweGIwLCAweGUzLCAweGRiLCAweGNkLCAweGZmLCAweDhiLCAweGU2LCAweDFiLCAweDgwLCAweGIxLCAweDE2LCAweDRhLAotCTB4YzAsIDB4ZmMsIDB4NjUsIDB4YzcsIDB4NjQsIDB4MzMsIDB4YzUsIDB4NjksIDB4OWEsIDB4NTMsIDB4YzksIDB4MDAsCi0JMHg3YSwgMHg0NiwgMHg2MCwgMHg1NywgMHg0MiwgMHgxMCwgMHg4ZSwgMHg1ZCwgMHg0NiwgMHg3ZSwgMHhjOSwgMHhmNCwKLQkweDZiLCAweDVkLCAweDQ5LCAweDdhLCAweGI2LCAweDYyLCAweDA0LCAweGNhLCAweDcyLCAweDczLCAweDI3LCAweGVjLAotCTB4MmMsIDB4OTQsIDB4M2EsIDB4YjMsIDB4MWYsIDB4MWYsIDB4OGQsIDB4ODQsIDB4ODMsIDB4NWQsIDB4ZDAsIDB4NTIsCi0JMHhlNywgMHg2NCwgMHhhZCwgMHg0YywgMHhmOSwgMHg2ZCwgMHg2MCwgMHg5NywgMHhkMCwgMHhmYSwgMHhlNywgMHgwNSwKLQkweGY3LCAweDg3LCAweDE4LCAweGIzLCAweGVmLCAweDQ0LCAweGFiLCAweDgzLCAweGRkLCAweGZiLCAweGQxLCAweDkyLAotCTB4MDcsIDB4ZDUsIDB4ZGYsIDB4ODQsIDB4NmIsIDB4NjksIDB4Y2UsIDB4OTcsIDB4OGMsIDB4MGYsIDB4MzgsIDB4MjcsCi0JMHgyNCwgMHgwOSwgMHgwYiwgMHg3ZSwgMHg2MSwgMHgyZSwgMHgxMCwgMHg4ZSwgMHhlMSwgMHg3OSwgMHg3OCwgMHg4ZSwKLQkweGIwLCAweGRhLCAweDRmLCAweGYzLCAweGJlLCAweDI1LCAweGI3LCAweDBjLCAweDBjLCAweDBiLCAweDJkLCAweGYxLAotCTB4YzUsIDB4ZjksIDB4NTYsIDB4ZTYsIDB4MjEsIDB4NTYsIDB4NjYsIDB4MmMsIDB4YmIsIDB4NDYsIDB4ZjcsIDB4MzIsCi0JMHgxZSwgMHg5MiwgMHhjZSwgMHhlYiwgMHg3YSwgMHhmMiwgMHgzNSwgMHg4NCwgMHhiMCwgMHg5MiwgMHhlYSwgMHhlMywKLQkweDY4LCAweDkxLCAweDc5LCAweDE4LCAweGMyLCAweDhiLCAweDg2LCAweGQ2LCAweDQzLCAweDU1LCAweDI4LCAweGQ1LAotCTB4MmIsIDB4OWQsIDB4MzgsIDB4NDAsIDB4YjEsIDB4ZjcsIDB4ZTEsIDB4MTIsIDB4ZjcsIDB4YjcsIDB4MDYsIDB4YzUsCi0JMHhhYSwgMHgxMSwgMHhmMiwgMHg0YiwgMHhjNywgMHg5ZSwgMHhhMCwgMHgzNCwgMHg5YSwgMHgwZiwgMHhlMiwgMHgzYSwKLQkweDVhLCAweGRmLCAweDRmLCAweDM1LCAweGNmLCAweGViLCAweGI0LCAweGJlLCAweDk0LCAweGQxLCAweDA2LCAweDY5LAotCTB4ZmQsIDB4ZDQsIDB4MWIsIDB4MjIsIDB4M2MsIDB4NGYsIDB4N2MsIDB4ZjUsIDB4YWQsIDB4OTcsIDB4NWIsIDB4ZmEsCi0JMHg4NywgMHg4NCwgMHg5NiwgMHgyNCwgMHhkMiwgMHhjOSwgMHg4ZiwgMHg3OSwgMHhlZCwgMHgwNywgMHg5OSwgMHgxNywKLQkweGJhLCAweDUyLCAweDdkLCAweDQzLCAweDc2LCAweGQ0LCAweDVjLCAweDUwLCAweDQ0LCAweDY0LCAweDZjLCAweDAzLAotCTB4ZjYsIDB4Y2MsIDB4NmMsIDB4YzAsIDB4NmUsIDB4ZjIsIDB4YzcsIDB4ZmQsIDB4NDYsIDB4MWQsIDB4NDIsIDB4ZjUsCi0JMHhhOCwgMHhhZCwgMHhkMywgMHgzMSwgMHg3ZiwgMHg0ZSwgMHgxNywgMHhmMiwgMHg4ZSwgMHhkNiwgMHgyNiwgMHhiMiwKLQkweGUzLCAweDkzLCAweDhkLCAweGQ1LCAweGY4LCAweGQ4LCAweGRlLCAweGE2LCAweDZmLCAweGU4LCAweGEyLCAweDg4LAotCTB4NzgsIDB4OWQsIDB4MDcsIDB4ODcsIDB4NjQsIDB4ZjIsIDB4ZWYsIDB4MzcsIDB4N2YsIDB4NDEsIDB4MDEsIDB4ZDUsCi0JMHg2MywgMHgzMiwgMHg2ZSwgMHg0YiwgMHg4OCwgMHg4YiwgMHhmOSwgMHg1MywgMHhhZSwgMHg4YSwgMHgxZiwgMHgzNCwKLQkweGUzLCAweDIzLCAweDE1LCAweDc1LCAweDQxLCAweDdkLCAweDE1LCAweGU2LCAweDU1LCAweDg1LCAweGUyLCAweDg1LAotCTB4ZTUsIDB4ZDQsIDB4NjIsIDB4MzcsIDB4OGUsIDB4ZjYsIDB4YTAsIDB4OTEsIDB4ZWEsIDB4ZTIsIDB4ZGIsIDB4NjIsCi0JMHhiZiwgMHhiMCwgMHgzZiwgMHhiOSwgMHg4MiwgMHhkZiwgMHhmYiwgMHgyMywgMHg0ZiwgMHgyNSwgMHg3NiwgMHg3ZSwKLQkweGQ5LCAweDFjLCAweDcxLCAweDhhLCAweDM3LCAweDJkLCAweDU0LCAweGM3LCAweGQ2LCAweDUwLCAweDkwLCAweGVlLAotCTB4YTIsIDB4N2MsIDB4YTQsIDB4ZjUsIDB4YTUsIDB4YTksIDB4MGUsIDB4ZWQsIDB4OGYsIDB4YjQsIDB4MTgsIDB4YjIsCi0JMHhhOCwgMHg0MiwgMHgzOSwgMHgxMCwgMHgxZSwgMHhkOCwgMHg4NiwgMHhlNCwgMHg1ZCwgMHhmZSwgMHgwNSwgMHgzYSwKLQkweDllLCAweDExLCAweDJiLCAweGRjLCAweGY0LCAweDFlLCAweGNmLCAweDczLCAweDk5LCAweDNkLCAweGU1LCAweGM5LAotCTB4OWUsIDB4ZjgsIDB4MzksIDB4ZmYsIDB4N2YsIDB4ZTksIDB4YjksIDB4ZjIsIDB4MTUsIDB4ZjMsIDB4OTcsIDB4ZTYsCi0JMHhiZiwgMHg1ZiwgMHhmOSwgMHg2NSwgMHhmNywgMHgwMywgMHhlYiwgMHg3ZSwgMHhmZCwgMHhmZSwgMHhmZiwgMHhhZCwKLQkweDllLCAweDJmLCAweGQ3LCAweGJiLCAweDFjLCAweGNjLCAweDkwLCAweDk0LCAweGI4LCAweDdmLCAweGU5LCAweDMyLAotCTB4N2QsIDB4MWQsIDB4YmIsIDB4ZjUsIDB4ZGYsIDB4YTAsIDB4OTgsIDB4YzYsIDB4ZmQsIDB4MGIsIDB4Y2UsIDB4ZDMsCi0JMHg2NywgMHg5ZCwgMHhmZSwgMHhjNSwgMHhmMywgMHg5ZiwgMHhjMywgMHhhYywgMHgxYywgMHg1YiwgMHgzYywgMHhhMiwKLQkweDY2LCAweGRjLCAweGIyLCAweDFiLCAweGY0LCAweGRiLCAweGE4LCAweGFlLCAweDE5LCAweGMyLCAweGI2LCAweDk4LAotCTB4ODEsIDB4YjEsIDB4YWMsIDB4ZDYsIDB4NzMsIDB4MzMsIDB4ZjQsIDB4ZTQsIDB4MTYsIDB4NDEsIDB4MTMsIDB4MTUsCi0JMHgzZCwgMHg0MiwgMHgxZSwgMHg1ZiwgMHg3OCwgMHg2NiwgMHg1OCwgMHg1NCwgMHhhYiwgMHg5NSwgMHg1MSwgMHg0ZCwKLQkweGIxLCAweGM5LCAweGE1LCAweGFiLCAweDBhLCAweDhhLCAweDAxLCAweGM1LCAweDU1LCAweDBjLCAweDJhLCAweDU1LAotCTB4YzUsIDB4MjYsIDB4YTUsIDB4OWEsIDB4YzYsIDB4ZjksIDB4YzYsIDB4YjUsIDB4ZjksIDB4OWIsIDB4MzEsIDB4ODQsCi0JMHhmOSwgMHgzNSwgMHg1ZSwgMHhhYiwgMHhkMSwgMHhkNCwgMHhkNCwgMHg0NiwgMHg3OSwgMHgwOCwgMHhiYiwgMHg2MywKLQkweGZjLCAweDZlLCAweDI3LCAweGQ1LCAweDZjLCAweDEwLCAweGY1LCAweDE5LCAweDQyLCAweGM2LCAweGE2LCAweGMwLAotCTB4OWUsIDB4NzYsIDB4NmQsIDB4NzAsIDB4ODUsIDB4YTQsIDB4NzcsIDB4ZmQsIDB4YWQsIDB4NzAsIDB4MjksIDB4OWUsCi0JMHgyMiwgMHg4NCwgMHgzZiwgMHgyMywgMHhlMSwgMHg3MCwgMHgzYiwgMHgzYywgMHg5ZSwgMHhiNSwgMHg1YSwgMHhmZiwKLQkweDQ5LCAweDMxLCAweDg4LCAweDI3LCAweDYyLCAweDkxLCAweDllLCAweGVkLCAweDIyLCAweGE0LCAweDc4LCAweGU5LAotCTB4OTksIDB4M2IsIDB4NDMsIDB4ZjEsIDB4MzcsIDB4NjMsIDB4NzksIDB4ZGMsIDB4NmIsIDB4YjUsIDB4YTAsIDB4MjQsCi0JMHg5MiwgMHhkOCwgMHhhNiwgMHhlYiwgMHhjNiwgMHgzOCwgMHgxNCwgMHg1YSwgMHgxMywgMHhhMiwgMHgzYSwgMHhhMywKLQkweGNkLCAweGJmLCAweDQ1LCAweDk4LCAweGVhLCAweDkzLCAweDk1LCAweDgzLCAweDY4LCAweDViLCAweDEzLCAweGQ5LAotCTB4ZDcsIDB4MjcsIDB4ZTksIDB4MGEsIDB4NjEsIDB4M2QsIDB4ZTEsIDB4Y2EsIDB4ZjgsIDB4NzAsIDB4Y2QsIDB4YTEsCi0JMHhjNSwgMHg3ZSwgMHg4ZSwgMHg2ZCwgMHg3ZiwgMHgxOCwgMHgyYiwgMHg5MywgMHg1ZSwgMHhhMCwgMHhkNCwgMHgxNiwKLQkweGEzLCAweDhhLCAweDhmLCAweDcwLCAweDdkLCAweGNiLCAweDIxLCAweGM2LCAweDU5LCAweGI2LCAweGJkLCAweDIzLAotCTB4NTYsIDB4ZmUsIDB4OWEsIDB4MTcsIDB4YWQsIDB4YzQsIDB4NjMsIDB4MGYsIDB4NjYsIDB4ZDIsIDB4OGMsIDB4YmIsCi0JMHg0YywgMHg0YywgMHg1MywgMHg0ZCwgMHhhNCwgMHg4ZiwgMHgzNCwgMHhlMSwgMHgzOCwgMHhjNSwgMHhhMSwgMHhiOSwKLQkweDM0LCAweGY3LCAweDdkLCAweGZhLCAweDQ5LCAweGM2LCAweDdkLCAweDQ0LCAweDdmLCAweDJmLCAweGQ1LCAweGMxLAotCTB4MjksIDB4OGEsIDB4NWYsIDB4MmMsIDB4ZTMsIDB4NmQsIDB4NjQsIDB4ZjcsIDB4NTAsIDB4YmMsIDB4NjYsIDB4YWMsCi0JMHhlMywgMHhjNiwgMHgzMSwgMHgyOCwgMHgxZSwgMHg3MywgMHg1NSwgMHhjNywgMHg1NSwgMHg4NywgMHg1MCwgMHg0ZiwKLQkweDc5LCAweGRmLCAweGE0LCAweDhhLCAweDA3LCAweGQxLCAweDQ4LCAweGM0LCAweGI4LCAweDgwLCAweDQ4LCAweGYwLAotCTB4MjUsIDB4ZDIsIDB4YzcsIDB4YjAsIDB4MGUsIDB4ZWMsIDB4NzIsIDB4NmEsIDB4NmMsIDB4MTcsIDB4YWMsIDB4M2MsCi0JMHhkNywgMHhjZiwgMHhmMCwgMHg1NCwgMHhiNywgMHhkNywgMHhlMywgMHhmYywgMHhhOCwgMHhjYiwgMHhlOSwgMHgxZCwKLQkweDU5LCAweDU0LCAweGZmLCAweGJjLCAweDYwLCAweDY4LCAweGE5LCAweDFjLCAweGJkLCAweGI3LCAweDU1LCAweGZkLAotCTB4ZDksIDB4ZGUsIDB4OWEsIDB4MzgsIDB4MTQsIDB4OGEsIDB4NjksIDB4NjQsIDB4N2IsIDB4N2YsIDB4ZTIsIDB4N2QsCi0JMHg4YiwgMHg2YywgMHhmNCwgMHg5NiwgMHhjOSwgMHgzZiwgMHhmNSwgMHg3ZSwgMHgxNCwgMHhjZiwgMHg3OSwgMHgzZiwKLQkweDg4LCAweGRiLCAweDc2LCAweDgyLCAweGYwLCAweDY4LCAweDFmLCAweGQ1LCAweGRjLCAweDFmLCAweDhlLCAweDU4LAotCTB4ZGUsIDB4MGIsIDB4NzEsIDB4ZWUsIDB4ZmYsIDB4YmEsIDB4ZjAsIDB4ZGIsIDB4ZjQsIDB4ZmQsIDB4YjEsIDB4MTEsCi0JMHgwNSwgMHg5YiwgMHgwYiwgMHg4ZCwgMHg3MCwgMHg4ZiwgMHhjOSwgMHg5OCwgMHgzMSwgMHhhZSwgMHhjNywgMHgzNiwKLQkweDU1LCAweGMyLCAweDFkLCAweGQxLCAweDI3LCAweGM5LCAweDI2LCAweDI1LCAweDFhLCAweDczLCAweDkwLCAweGJlLAotCTB4NzMsIDB4MmYsIDB4ZWIsIDB4MTEsIDB4NmMsIDB4NTcsIDB4NjcsIDB4YmQsIDB4ZTcsIDB4ZTMsIDB4NGMsIDB4NmYsCi0JMHg4OCwgMHhlOSwgMHg1NSwgMHgyNCwgMHhmZCwgMHhlYiwgMHhkOCwgMHg3YSwgMHgzMywgMHhkNywgMHg1NiwgMHhjZSwKLQkweGM3LCAweGYzLCAweDUyLCAweDdiLCAweDAzLCAweDhlLCAweDhmLCAweDM2LCAweGUyLCAweGI5LCAweDUxLCAweGNiLAotCTB4ZjMsIDB4NWEsIDB4N2IsIDB4MTQsIDB4ZmQsIDB4MjMsIDB4MzYsIDB4NWUsIDB4MzYsIDB4YWMsIDB4YzEsIDB4NmEsCi0JMHhiMiwgMHhmMywgMHgwNCwgMHhkNSwgMHg1NywgMHhlMSwgMHgzNSwgMHhkYywgMHg0MywgMHg0MCwgMHg0NCwgMHg0NiwKLQkweDY0LCAweDgwLCAweDQwLCAweGU2LCAweGFkLCAweDE0LCAweGJhLCAweDUyLCAweGI1LCAweDU0LCAweGE3LCAweDlkLAotCTB4MTEsIDB4NzYsIDB4ZDUsIDB4NWQsIDB4ZWQsIDB4MmUsIDB4YTIsIDB4MDEsIDB4ZDgsIDB4NTgsIDB4NjgsIDB4MjUsCi0JMHhiOSwgMHg0NSwgMHhiMSwgMHgzOSwgMHhhMiwgMHg2MCwgMHg1MywgMHhjMSwgMHhjMCwgMHg3MywgMHg2OSwgMHgxZiwKLQkweDZlLCAweDI5LCAweGM0LCAweDA5LCAweDdiLCAweGFiLCAweDQ0LCAweDdiLCAweDAyLCAweGE1LCAweDc0LCAweDAwLAotCTB4ZGYsIDB4MjgsIDB4MzQsIDB4OTEsIDB4YmMsIDB4ODMsIDB4YjgsIDB4YmUsIDB4MTAsIDB4YzIsIDB4ODksIDB4MzQsCi0JMHhlNywgMHg2ZiwgMHhkMywgMHhiMywgMHgzNSwgMHhkZSwgMHg4NCwgMHhhZSwgMHg4MiwgMHg4ZSwgMHhkOSwgMHgzNCwKLQkweDNjLCAweGY3LCAweGM1LCAweDQzLCAweGU4LCAweDJjLCAweDQ0LCAweDUxLCAweDIwLCAweDBjLCAweGY3LCAweDc1LAotCTB4OWEsIDB4ZjMsIDB4MTYsIDB4ZDIsIDB4NDksIDB4NmIsIDB4MjEsIDB4ODAsIDB4MTUsIDB4MTEsIDB4ZTAsIDB4YmEsCi0JMHg4MiwgMHg0ZiwgMHgwYywgMHgxMiwgMHhiNiwgMHg0YSwgMHgxNCwgMHgxYSwgMHg3MCwgMHg2MSwgMHg4YywgMHhlZCwKLQkweGRjLCAweGU4LCAweGQ4LCAweDNkLCAweGFhLCAweDIyLCAweDU0LCAweGMwLCAweDM1LCAweDBhLCAweGIwLCAweDkzLAotCTB4YWEsIDB4YzMsIDB4NTQsIDB4ODEsIDB4ZTgsIDB4M2QsIDB4ZDAsIDB4NWUsIDB4ZTksIDB4ZGQsIDB4YWUsIDB4MmEsCi0JMHg3YywgMHhjNiwgMHg2ZiwgMHgxZCwgMHhlOSwgMHhlOSwgMHhhMywgMHg0MywgMHhiMywgMHhkZSwgMHg0ZiwgMHhlMiwKLQkweDFjLCAweDliLCAweDlhLCAweDNhLCAweDVlLCAweDNmLCAweDA0LCAweDQ0LCAweGE3LCAweDk4LCAweDM3LCAweDI3LAotCTB4MzYsIDB4NzIsIDB4M2MsIDB4NmMsIDB4NTUsIDB4ZjAsIDB4YjcsIDB4MzYsIDB4ZDUsIDB4YTAsIDB4YTEsIDB4MTksCi0JMHhkZSwgMHgyMywgMHhkMCwgMHg3ZCwgMHg0NCwgMHg4NywgMHg4YSwgMHgyNCwgMHhhZCwgMHg3ZCwgMHg1MywgMHhlMSwKLQkweDdiLCAweGY2LCAweGQ2LCAweGE1LCAweDQxLCAweGRjLCAweDE4LCAweGE5LCAweGM4LCAweGVhLCAweDBjLCAweGU5LAotCTB4NzAsIDB4N2EsIDB4YWMsIDB4MTEsIDB4NzMsIDB4NDQsIDB4ODMsIDB4ZGIsIDB4NmMsIDB4ZWUsIDB4MzgsIDB4MzYsCi0JMHg2OSwgMHg2MywgMHhhMywgMHg2MSwgMHg3OSwgMHg1ZiwgMHg2YiwgMHg1ZiwgMHg4NSwgMHg3YiwgMHgwZiwgMHgwZCwKLQkweDlmLCAweGFlLCAweDIyLCAweGJkLCAweGNlLCAweDFiLCAweGI3LCAweGUyLCAweGUxLCAweDI5LCAweDVjLCAweGQ5LAotCTB4MDgsIDB4M2MsIDB4MTQsIDB4MDQsIDB4ZjcsIDB4YWEsIDB4YjUsIDB4ZDAsIDB4MDksIDB4NDQsIDB4YmEsIDB4ZWUsCi0JMHg0MywgMHg0NCwgMHhkNSwgMHg4NSwgMHg2NiwgMHhiYywgMHgyYywgMHg5MCwgMHhhYywgMHgzMSwgMHgyMywgMHhhNywKLQkweDZmLCAweDAyLCAweDVlLCAweGFjLCAweDIyLCAweDBmLCAweGJlLCAweGE1LCAweGUwLCAweDIyLCAweDE5LCAweDA1LAotCTB4NTEsIDB4MWEsIDB4YWIsIDB4ODIsIDB4NGMsIDB4N2UsIDB4NzIsIDB4NTEsIDB4YzcsIDB4YzYsIDB4M2EsIDB4OTIsCi0JMHhiNSwgMHgyYywgMHgxNCwgMHhkMiwgMHg3MywgMHgyYiwgMHg4ZSwgMHg4ZCwgMHgyYywgMHhjYSwgMHhjYSwgMHg4NywKLQkweDFiLCAweDQ4LCAweDg2LCAweDRmLCAweDhjLCAweGQ4LCAweDQzLCAweDdhLCAweDJjLCAweDQwLCAweGIyLCAweDU2LAotCTB4ODksIDB4YmUsIDB4NDUsIDB4MzksIDB4YjEsIDB4ZmMsIDB4MTYsIDB4ZTUsIDB4NzQsIDB4MmIsIDB4NzYsIDB4Y2YsCi0JMHhiMSwgMHhkYywgMHhmZSwgMHg1ZiwgMHhlNCwgMHgzNSwgMHhlYiwgMHhkOCwgMHhkZCwgMHhjNiwgMHhjOSwgMHgyOCwKLQkweDFhLCAweDBmLCAweDVkLCAweDkyLCAweDFkLCAweGQzLCAweGY3LCAweDEwLCAweGYxLCAweGYxLCAweDFkLCAweGZmLAotCTB4YjUsIDB4OTEsIDB4ZmUsIDB4ZjcsIDB4ODQsIDB4OGYsIDB4ZTgsIDB4NTEsIDB4NDksIDB4MzcsIDB4ZWYsIDB4YjksCi0JMHgxOSwgMHhiYiwgMHg5MywgMHg0YywgMHgyZSwgMHhjOSwgMHgzOCwgMHg0OCwgMHgzMiwgMHgwZSwgMHg0ZSwgMHhiMSwKLQkweGFjLCAweDliLCAweDQ4LCAweGQ2LCAweGMwLCAweGViLCAweDg0LCAweGNiLCAweGFlLCAweDhiLCAweDQ1LCAweDUxLAotCTB4N2IsIDB4NDgsIDB4NGIsIDB4MzYsIDB4Y2EsIDB4ZTEsIDB4NDQsIDB4OWQsIDB4MDAsIDB4NTUsIDB4MjUsIDB4NjgsCi0JMHhhZCwgMHhjNSwgMHg4NywgMHgyYywgMHg2NywgMHg4MywgMHhlNCwgMHhmYywgMHg5ZCwgMHg2MSwgMHhlMiwgMHg2NywKLQkweDAzLCAweGNkLCAweGI3LCAweDkxLCAweGU0LCAweDljLCAweDI0LCAweGZlLCAweDZmLCAweDcyLCAweGU2LCAweDZkLAotCTB4YTIsIDB4NzksIDB4N2IsIDB4YTksIDB4ZjYsIDB4OTgsIDB4ZjUsIDB4NWUsIDB4MjQsIDB4N2EsIDB4YTIsIDB4OWYsCi0JMHhkMSwgMHg0MiwgMHg2OCwgMHgzYywgMHgxMiwgMHg3YywgMHg4ZiwgMHg2YSwgMHhlYywgMHhlYiwgMHg5ZCwgMHg3MSwKLQkweDJhLCAweDhkLCAweDYzLCAweGRhLCAweDdmLCAweDVjLCAweDJkLCAweGU5LCAweDVmLCAweGQ2LCAweDY3LCAweGZlLAotCTB4MTYsIDB4YjgsIDB4ZTcsIDB4NjAsIDB4YTEsIDB4OGYsIDB4ZWEsIDB4ODgsIDB4NWUsIDB4YWEsIDB4OTUsIDB4MTQsCi0JMHhjYSwgMHg2ZCwgMHgxNiwgMHhiZSwgMHgxYiwgMHhkNywgMHhhMiwgMHhmNSwgMHg4MiwgMHhlMywgMHg5ZiwgMHg0NSwKLQkweDdlLCAweDU4LCAweGE2LCAweDNhLCAweDI5LCAweDFjLCAweDlhLCAweDQzLCAweDUwLCAweDkxLCAweDhhLCAweDBhLAotCTB4ZTEsIDB4YzEsIDB4MjYsIDB4NDUsIDB4MmUsIDB4OTIsIDB4YmYsIDB4MDYsIDB4ZmIsIDB4MDgsIDB4NGYsIDB4YmIsCi0JMHhmMCwgMHg1MiwgMHhkZSwgMHg4NSwgMHg1NywgMHhkMiwgMHhiZCwgMHhkOCwgMHg1ZiwgMHhmMiwgMHgxMCwgMHg2ZSwKLQkweGI2LCAweDNjLCAweGFlLCAweGI1LCAweDdmLCAweDU2LCAweDU1LCAweDg5LCAweGM5LCAweDJiLCAweGQxLCAweDNkLAotCTB4ZmUsIDB4MjAsIDB4NmEsIDB4MzIsIDB4YWUsIDB4MWUsIDB4Y2EsIDB4YTcsIDB4YzYsIDB4NGQsIDB4MjQsIDB4OTcsCi0JMHg4ZCwgMHg0NSwgMHg3ZSwgMHhkZSwgMHg4NCwgMHg0YywgMHgzYSwgMHg0NSwgMHgxOCwgMHgyOCwgMHg0YywgMHgzNSwKLQkweDkwLCAweDBiLCAweGI5LCAweGM2LCAweDI2LCAweGE3LCAweDlmLCAweDNiLCAweDRhLCAweGY3LCAweDQ2LCAweDRiLAotCTB4NWYsIDB4ZWMsIDB4MzMsIDB4ZGYsIDB4YmEsIDB4ZDAsIDB4NWYsIDB4ZWUsIDB4YzcsIDB4ZGUsIDB4NmMsIDB4MWYsCi0JMHg2MSwgMHhkMywgMHg1ZSwgMHg4YSwgMHhlZiwgMHgxNSwgMHgxYSwgMHg2NywgMHhlMywgMHgzZCwgMHhkOCwgMHg5YiwKLQkweDM3LCAweDJmLCAweGM1LCAweDhmLCAweDY5LCAweDI3LCAweDdlLCAweDBjLCAweGEwLCAweGJhLCAweDlkLCAweGY3LAotCTB4YWQsIDB4N2EsIDB4NzEsIDB4N2IsIDB4MWEsIDB4NzgsIDB4MzcsIDB4Y2QsIDB4N2QsIDB4NDQsIDB4YzIsIDB4MTQsCi0JMHg5NCwgMHgwZiwgMHgwZSwgMHgxYSwgMHg5YywgMHg0MywgMHg3YiwgMHhiMSwgMHgyMiwgMHg2ZiwgMHgyMywgMHg2ZiwKLQkweGQ4LCAweDM4LCAweDZkLCAweGU4LCAweDk0LCAweGEzLCAweDM5LCAweDU3LCAweDBmLCAweDBhLCAweDlkLCAweGYyLAotCTB4YjMsIDB4ZTUsIDB4MWEsIDB4NDAsIDB4YTQsIDB4OWQsIDB4NzUsIDB4ZjQsIDB4ZTAsIDB4YzIsIDB4ZmUsIDB4ZDMsCi0JMHg4MCwgMHhiMywgMHhmZiwgMHgzNCwgMHg5NywgMHg5NiwgMHhmMSwgMHgwNCwgMHgyOSwgMHhlMiwgMHhiOSwgMHg2YywKLQkweDM4LCAweGY0LCAweDJlLCAweGVjLCAweDIxLCAweGQ5LCAweGQ0LCAweDEyLCAweDJlLCAweDk5LCAweGY3LCAweDY1LAotCTB4NzgsIDB4NWYsIDB4NGEsIDB4ZWYsIDB4NTksIDB4MjEsIDB4NmIsIDB4NDYsIDB4NTEsIDB4YjQsIDB4ZjQsIDB4YmQsCi0JMHg4ZCwgMHhmMiwgMHgyNiwgMHgwNSwgMHg1YSwgMHhlOCwgMHgzNSwgMHg0NCwgMHhhMiwgMHg1ZCwgMHhiYywgMHhmNywKLQkweDUwLCAweGFhLCAweGU0LCAweGVlLCAweDk1LCAweDBiLCAweGI5LCAweDViLCAweGNmLCAweDdiLCAweDQ1LCAweDc4LAotCTB4NGMsIDB4NDIsIDB4NmUsIDB4YzYsIDB4YjYsIDB4MjQsIDB4YjIsIDB4ZGYsIDB4MTksIDB4OWEsIDB4ZjMsIDB4MDcsCi0JMHhkOSwgMHgyMSwgMHg2NCwgMHg2MywgMHhiNiwgMHg3ZCwgMHg0YiwgMHg1YywgMHhlZiwgMHg2ZiwgMHg5NCwgMHhmMSwKLQkweGZiLCAweDk0LCAweGM5LCAweDQxLCAweDM2LCAweDlmLCAweDIyLCAweDVmLCAweDBiLCAweGVkLCAweDY4LCAweGI3LAotCTB4ZWMsIDB4MmEsIDB4YTcsIDB4YWUsIDB4ZTAsIDB4YmUsIDB4NjQsIDB4YjcsIDB4NjgsIDB4MmQsIDB4ZjQsIDB4OGEsCi0JMHg1NSwgMHg4NCwgMHhkZCwgMHg0MiwgMHhjNywgMHhiNiwgMHg4OCwgMHhlNiwgMHhhMywgMHgxNSwgMHhlYywgMHgxNiwKLQkweDI5LCAweDdjLCAweGQ2LCAweDNiLCAweGJkLCAweDMxLCAweDZkLCAweDIzLCAweDRkLCAweDdjLCAweDNkLCAweGYxLAotCTB4NmIsIDB4N2MsIDB4YjEsIDB4MmUsIDB4MDYsIDB4NzAsIDB4NTUsIDB4M2IsIDB4ZmIsIDB4ZTIsIDB4ODMsIDB4MzgsCi0JMHg5NiwgMHg2NiwgMHgzYiwgMHgxZiwgMHhjMCwgMHg2ZSwgMHg5MiwgMHhjZiwgMHhlYSwgMHgxMSwgMHhkZSwgMHgwNywKLQkweGQzLCAweDRlLCAweDBmLCAweDIzLCAweGRjLCAweGZmLCAweGFhLCAweGQwLCAweGNhLCAweDA1LCAweGI0LCAweDE4LAotCTB4YjUsIDB4MzIsIDB4YzcsIDB4NTcsIDB4NmQsIDB4YjAsIDB4NTksIDB4YWUsIDB4ZDAsIDB4OWYsIDB4YzgsIDB4ODMsCi0JMHhlMiwgMHg2OSwgMHg4NSwgMHg4NywgMHg2YiwgMHhmMiwgMHgyYiwgMHhjOCwgMHg1NiwgMHgyZCwgMHhjZiwgMHhjNSwKLQkweDc4LCAweGNiLCAweDQwLCAweDBkLCAweDM2LCAweDhhLCAweDBmLCAweDY2LCAweDQzLCAweGYwLCAweDFlLCAweDRhLAotCTB4MmUsIDB4ZjUsIDB4YTMsIDB4NTMsIDB4YmMsIDB4ZWIsIDB4ZDQsIDB4OGIsIDB4NWQsIDB4ZTIsIDB4N2MsIDB4YmUsCi0JMHg0NywgMHhiYywgMHg5ZiwgMHhlYiwgMHg0NiwgMHg2NCwgMHhlYywgMHgxZSwgMHhmMSwgMHg0ZSwgMHg4ZSwgMHhlOSwKLQkweGVjLCAweDEzLCAweDY3LCAweDY3LCAweGI5LCAweDNmLCAweDZhLCAweDYzLCAweGI3LCAweGMxLCAweGJkLCAweGQxLAotCTB4YTUsIDB4ZDUsIDB4ZjAsIDB4ZGIsIDB4MzgsIDB4NjYsIDB4YjAsIDB4M2UsIDB4YjksIDB4NGYsIDB4NTgsIDB4ZTksCi0JMHgyZiwgMHg2ZCwgMHg4YywgMHg4ZiwgMHhkYSwgMHgyZSwgMHg5ZCwgMHg3YiwgMHhjNCwgMHg0MSwgMHg4NywgMHhkZiwKLQkweDE5LCAweGMyLCAweGQxLCAweGIzLCAweGI5LCAweDVlLCAweDcxLCAweDNjLCAweDVmLCAweGUxLCAweDc1LCAweDNhLAotCTB4Y2YsIDB4ZjYsIDB4YWIsIDB4OTAsIDB4OGUsIDB4YmYsIDB4OTgsIDB4YTcsIDB4MmQsIDB4YTgsIDB4ZWQsIDB4NDEsCi0JMHg1NCwgMHgzOSwgMHhmZCwgMHgyOCwgMHgxYiwgMHhlMywgMHg0NiwgMHgyNCwgMHhmNCwgMHgzMiwgMHg4MiwgMHg3MCwKLQkweDE1LCAweGQ5LCAweGI2LCAweDZkLCAweDNjLCAweDY1LCAweGI4LCAweDIxLCAweDhmLCAweDJiLCAweDI0LCAweDIzLAotCTB4YjIsIDB4MjUsIDB4YmYsIDB4MWIsIDB4ZDIsIDB4MzQsIDB4ZDcsIDB4MDYsIDB4ZWIsIDB4YWIsIDB4YjksIDB4NGYsCi0JMHgxMSwgMHg5MiwgMHhmOCwgMHhmZiwgMHgyZiwgMHhkYSwgMHg5YywgMHg5YiwgMHhmMiwgMHgwMSwgMHhmNywgMHhkNSwKLQkweGRmLCAweGFjLCAweGFhLCAweGQ4LCAweDVlLCAweGE1LCAweGI3LCAweGViLCAweDMxLCAweGI5LCAweGY3LCAweGVkLAotCTB4YWMsIDB4ZTcsIDB4NTksIDB4ZDksIDB4ZWUsIDB4YzEsIDB4M2IsIDB4YTMsIDB4NTUsIDB4ZGMsIDB4YTIsIDB4NTAsCi0JMHg2YSwgMHgyOCwgMHhiZSwgMHhkZCwgMHg3ZCwgMHhjOCwgMHhhNiwgMHhkYywgMHgwMiwgMHg0ZiwgMHhiNCwgMHhmZCwKLQkweDRkLCAweGZiLCAweDAwLCAweGU1LCAweDFkLCAweGI3LCAweDllLCAweGEwLCAweDdjLCAweGM1LCAweDdiLCAweDJkLAotCTB4YjcsIDB4NjIsIDB4N2UsIDB4ZDIsIDB4MjUsIDB4YTksIDB4MjYsIDB4ZTIsIDB4MTQsIDB4ZjMsIDB4ZWMsIDB4YmEsCi0JMHgzNSwgMHg5MSwgMHg4MSwgMHg4ZiwgMHhjOSwgMHgzNiwgMHgzMiwgMHhjNCwgMHhkMywgMHgwNywgMHhhMywgMHgyMSwKLQkweGU0LCAweGE5LCAweDBlLCAweGIzLCAweDljLCAweDlhLCAweGUzLCAweGI3LCAweDcxLCAweDZlLCAweDU0LCAweDE2LAotCTB4M2UsIDB4MTMsIDB4ZjIsIDB4NzAsIDB4YmIsIDB4OGQsIDB4MjEsIDB4MjMsIDB4NzIsIDB4ZmEsIDB4MmQsIDB4NTksCi0JMHhhMSwgMHg3OSwgMHg1YywgMHg3OCwgMHgzNCwgMHg1ZiwgMHgwZiwgMHgzZiwgMHhjNSwgMHg1MiwgMHg2OSwgMHg2YywKLQkweDM4LCAweGU1LCAweGE2LCAweGI4LCAweGY5LCAweGUzLCAweGQ4LCAweDcwLCAweDUwLCAweGE1LCAweGViLCAweDZkLAotCTB4MDYsIDB4NGUsIDB4MTEsIDB4YjQsIDB4ZjksIDB4ZDEsIDB4NzIsIDB4ZjAsIDB4MWUsIDB4NjAsIDB4NjQsIDB4ZTAsCi0JMHhiZCwgMHg0YSwgMHhiYywgMHhiNCwgMHg1ZSwgMHgxMywgMHg2ZiwgMHhkYSwgMHhhMywgMHhmOSwgMHgwNiwgMHhjOCwKLQkweDYzLCAweDcxLCAweDdjLCAweDkyLCAweGY2LCAweDg5LCAweGY1LCAweDIzLCAweGJjLCAweGQ3LCAweGE3LCAweDk1LAotCTB4YmIsIDB4MTEsIDB4MWUsIDB4NTgsIDB4MmYsIDB4NjMsIDB4MjgsIDB4ODgsIDB4NDgsIDB4ZGYsIDB4NzksIDB4YWEsCi0JMHgwMywgMHg1ZiwgMHg4YSwgMHg1OSwgMHhmZCwgMHgzZSwgMHg4YSwgMHhiNywgMHhkYiwgMHgwOSwgMHg2YiwgMHgzZSwKLQkweDJlLCAweDQyLCAweDk0LCAweDlmLCAweDU4LCAweDVlLCAweDUxLCAweGE4LCAweDExLCAweDg1LCAweGU0LCAweGM4LAotCTB4ZmIsIDB4NDEsIDB4MTYsIDB4ZGUsIDB4NzYsIDB4NjQsIDB4ZTYsIDB4YzEsIDB4ZGUsIDB4MWMsIDB4ZDksIDB4ODksCi0JMHhmNCwgMHhjNSwgMHhiZSwgMHhmZCwgMHgxZiwgMHg1NSwgMHhjMywgMHhkYiwgMHhjMCwgMHg3MiwgMHg1YSwgMHhlOCwKLQkweGZiLCAweDJkLCAweGUyLCAweDdkLCAweDk2LCAweDExLCAweDYzLCAweGZlLCAweDRhLCAweDNkLCAweDUwLCAweDY1LAotCTB4ZDYsIDB4ODgsIDB4MTcsIDB4NDYsIDB4NTksIDB4MmYsIDB4MzYsIDB4OWUsIDB4MzYsIDB4MGMsIDB4YTYsIDB4ODUsCi0JMHhlYSwgMHhkNiwgMHhkZiwgMHgyNywgMHg4YywgMHhhZiwgMHg1OSwgMHgwYywgMHg5NSwgMHg1ZiwgMHg4YSwgMHgyYiwKLQkweDM4LCAweDMxLCAweDhhLCAweGRmLCAweDUyLCAweDIwLCAweDM3LCAweDU3LCAweGUzLCAweDA4LCAweDE1LCAweDEzLAotCTB4MmMsIDB4M2YsIDB4YjYsIDB4MzcsIDB4YTMsIDB4MjMsIDB4OTIsIDB4ODMsIDB4NTUsIDB4NmIsIDB4NzYsIDB4MjEsCi0JMHhlNywgMHhkOCwgMHg3OSwgMHg4ZCwgMHhiOCwgMHg5ZiwgMHg2NCwgMHgxNiwgMHg2OSwgMHgyMywgMHg4YywgMHhhOSwKLQkweDcyLCAweDJmLCAweGM1LCAweGEyLCAweDU4LCAweGFmLCAweGUwLCAweGI2LCAweDUxLCAweGJjLCAweGJlLCAweDFjLAotCTB4ZjIsIDB4YTksIDB4NDYsIDB4MWMsIDB4MDMsIDB4YWEsIDB4NTksIDB4OWYsIDB4ZmMsIDB4M2UsIDB4ZTksIDB4Y2UsCi0JMHhjZiwgMHhiOCwgMHg4ZSwgMHhjNywgMHhkNSwgMHg4OCwgMHgxZCwgMHg2MywgMHg0OSwgMHg2YywgMHg4ZSwgMHhjOSwKLQkweDg0LCAweDkzLCAweGZiLCAweDA4LCAweGJmLCAweGY1LCAweDExLCAweDNlLCAweGI1LCAweGVkLCAweGIxLCAweDA4LAotCTB4ZWIsIDB4OTQsIDB4NzUsIDB4NjYsIDB4NzksIDB4YzMsIDB4ZWQsIDB4YWQsIDB4YjgsIDB4NzcsIDB4YjIsIDB4MWUsCi0JMHhhZSwgMHhiMSwgMHgwNiwgMHg1NCwgMHg4ZiwgMHgwNSwgMHhiMSwgMHg5ZCwgMHhlOCwgMHgzZCwgMHg2MiwgMHg3MCwKLQkweGJmLCAweGNkLCAweDNhLCAweDJkLCAweDQxLCAweDJiLCAweGFmLCAweDk3LCAweGI1LCAweDdlLCAweDU1LCAweGI2LAotCTB4ZjEsIDB4YTQsIDB4YTEsIDB4MTksIDB4NGYsIDB4MGEsIDB4MmYsIDB4ZGUsIDB4YTAsIDB4NWEsIDB4ZjAsIDB4ZTMsCi0JMHhkOCwgMHhhZCwgMHhjOCwgMHhjYywgMHgzMSwgMHg5ZCwgMHhjZCwgMHgxZCwgMHg1NywgMHhjZiwgMHhmMiwgMHgzNSwKLQkweGRhLCAweGQxLCAweGVjLCAweDVjLCAweDU3LCAweDJkLCAweDVjLCAweDQzLCAweDFkLCAweDIxLCAweGU3LCAweGRhLAotCTB4NDQsIDB4ZDcsIDB4YzUsIDB4MWUsIDB4ZWYsIDB4N2YsIDB4NzQsIDB4ZjMsIDB4MzUsIDB4MDksIDB4ZmUsIDB4OWMsCi0JMHg3NiwgMHg1NywgMHg2YywgMHhmMCwgMHhkZiwgMHhjMCwgMHg3MiwgMHhmYSwgMHgwZiwgMHgxZiwgMHgyZCwgMHg4YywKLQkweDgxLCAweDUyLCAweDRmLCAweGJjLCAweGM3LCAweGM2LCAweDY1LCAweGM0LCAweGRiLCAweGE4LCAweGY4LCAweDZkLAotCTB4NjAsIDB4N2QsIDB4ZjQsIDB4MjEsIDB4NDMsIDB4NzEsIDB4YWYsIDB4OTYsIDB4ZTIsIDB4ZGUsIDB4ZjEsIDB4NzYsCi0JMHg4MSwgMHgxZiwgMHg0NSwgMHg0YywgMHhmYywgMHgyOCwgMHhjZiwgMHg3MSwgMHhkMCwgMHg4NSwgMHgyNywgMHhkMiwKLQkweDVhLCAweGM4LCAweDEyLCAweGUxLCAweDllLCAweDlkLCAweDQyLCAweDQyLCAweGIyLCAweDkxLCAweDc4LCAweGEzLAotCTB4OTgsIDB4M2MsIDB4OWIsIDB4ZTYsIDB4MTgsIDB4ZWMsIDB4NzIsIDB4ZjYsIDB4ZDgsIDB4YjksIDB4ZGUsIDB4NDgsCi0JMHgyYywgMHhjNCwgMHhjYywgMHg1MiwgMHg1YywgMHhiMywgMHhmYSwgMHgyOCwgMHgzNywgMHg3YywgMHg1YywgMHhlMCwKLQkweDM5LCAweDJkLCAweGJjLCAweDE1LCAweDY3LCAweDc5LCAweDY5LCAweGQxLCAweDk0LCAweDc0LCAweDM3LCAweDkyLAotCTB4MzksIDB4ZjYsIDB4NGIsIDB4NWEsIDB4OGUsIDB4ZDYsIDB4M2EsIDB4OTIsIDB4YWQsIDB4NDIsIDB4NmYsIDB4YmMsCi0JMHg1YiwgMHhkYywgMHg1NiwgMHhiYywgMHg4NSwgMHhmYiwgMHhmOSwgMHhlYSwgMHgxMiwgMHg3MywgMHg4YiwgMHhkOCwKLQkweDMwLCAweGNkLCAweGZkLCAweGI4LCAweDVlLCAweGQxLCAweDViLCAweDY0LCAweDNmLCAweDE5LCAweDE0LCAweGJmLAotCTB4NTMsIDB4YmMsIDB4YmMsIDB4MzcsIDB4YjcsIDB4NjgsIDB4MTcsIDB4ZGMsIDB4OTMsIDB4YjMsIDB4M2MsIDB4MmYsCi0JMHg5MCwgMHg1ZSwgMHhlZSwgMHgxZiwgMHhjNSwgMHgxZiwgMHhkNywgMHg0MywgMHhhNiwgMHg5OCwgMHhkNiwgMHg4ZSwKLQkweDcyLCAweGE1LCAweGY2LCAweGExLCAweGZiLCAweDVmLCAweGMxLCAweDEwLCAweGU1LCAweDU3LCAweDY5LCAweDQxLAotCTB4YmYsIDB4MmIsIDB4NzIsIDB4MTIsIDB4M2UsIDB4NTksIDB4YjMsIDB4ZGYsIDB4MGUsIDB4MmQsIDB4NjEsIDB4ZmQsCi0JMHgxMiwgMHg2ZSwgMHgyNCwgMHhkZCwgMHhlYywgMHhjZSwgMHhlZSwgMHhiMSwgMHhkZiwgMHg3NiwgMHg3YSwgMHg2YSwKLQkweDZjLCAweDhmLCAweDRlLCAweGM5LCAweGM0LCAweGJhLCAweGM2LCAweDc2LCAweGYyLCAweGI5LCAweGM3LCAweDQ3LAotCTB4OTcsIDB4NDEsIDB4ZDEsIDB4YjksIDB4MTcsIDB4NWYsIDB4OGIsIDB4YTgsIDB4ZTMsIDB4MzcsIDB4MWUsIDB4MTQsCi0JMHg0NiwgMHgxOSwgMHhhZiwgMHgxOCwgMHgxZCwgMHhhZiwgMHg4ZiwgMHgyOSwgMHhmMCwgMHhkMSwgMHhiMywgMHhkOSwKLQkweDk4LCAweGMwLCAweGE5LCAweGY2LCAweGNhLCAweGZjLCAweGNkLCAweGI5LCAweGFiLCAweDkxLCAweDU2LCAweGJkLAotCTB4YTgsIDB4ZDMsIDB4OWIsIDB4OTEsIDB4NTUsIDB4N2QsIDB4YjQsIDB4ZWUsIDB4YWQsIDB4MGIsIDB4NzMsIDB4ZmUsCi0JMHhiOCwgMHg5YSwgMHhlYiwgMHg1NiwgMHhkOSwgMHhiYywgMHhiNywgMHhiYSwgMHhhMiwgMHgwZiwgMHg0NSwgMHhhOSwKLQkweGQ0LCAweDMxLCAweDhhLCAweGU1LCAweGEzLCAweGI1LCAweDBlLCAweGI2LCAweGY3LCAweDYyLCAweGM3LCAweDg4LAotCTB4NGYsIDB4YmMsIDB4OTIsIDB4ZmUsIDB4ZDcsIDB4MzYsIDB4ZGIsIDB4Y2MsIDB4MDEsIDB4YjIsIDB4ZTUsIDB4MmEsCi0JMHg3ZCwgMHg3MSwgMHhjZSwgMHhkNywgMHg5ZCwgMHg3NywgMHg2YiwgMHgyOSwgMHgyZSwgMHgwZiwgMHg4YywgMHg0YSwKLQkweDA4LCAweDJjLCAweGRjLCAweDhmLCAweGU3LCAweDQyLCAweDA4LCAweGI2LCAweDA5LCAweGZhLCAweGRlLCAweDZiLAotCTB4ZTMsIDB4MGEsIDB4MDUsIDB4YWEsIDB4ZmUsIDB4MDYsIDB4OGQsIDB4NzMsIDB4ZDEsIDB4NTUsIDB4YTEsIDB4ZmEsCi0JMHhkOCwgMHhjMiwgMHhjMywgMHhmMSwgMHgwNCwgMHgyZSwgMHgxMCwgMHgwNiwgMHhkOSwgMHg0NywgMHhmOSwgMHg3MiwKLQkweDU3LCAweGRhLCAweGM0LCAweGI5LCAweGZjLCAweDVmLCAweDNiLCAweGYzLCAweGQ0LCAweDk4LCAweDFlLCAweDRjLAotCTB4ZTcsIDB4YmUsIDB4NDgsIDB4NTcsIDB4ODAsIDB4NjgsIDB4N2QsIDB4OTgsIDB4NjgsIDB4ZTIsIDB4NjcsIDB4MTcsCi0JMHg5YywgMHhkYSwgMHhmYSwgMHhmOSwgMHhjYiwgMHg2YSwgMHgxMiwgMHg2OSwgMHg5YywgMHhmYiwgMHgzMSwgMHg5NSwKLQkweDM4LCAweGRhLCAweDY5LCAweDI4LCAweDE2LCAweGY3LCAweGI2LCAweGU3LCAweDI3LCAweDJjLCAweDljLCAweGJiLAotCTB4YjYsIDB4MGUsIDB4OWYsIDB4NGMsIDB4MzQsIDB4ZTMsIDB4ZGUsIDB4NTEsIDB4MmYsIDB4MmUsIDB4NGUsIDB4ZDgsCi0JMHhiOCwgMHg2NiwgMHgwZCwgMHhlZSwgMHgwOCwgMHgxMiwgMHg4ZSwgMHhhOSwgMHhhMywgMHg3OCwgMHhmMSwgMHgxYSwKLQkweGQ1LCAweDBkLCAweDU0LCAweDUzLCAweDkyLCAweGY3LCAweDQ0LCAweDEyLCAweDFiLCAweDg1LCAweDhkLCAweDY4LAotCTB4MGMsIDB4YTksIDB4MWIsIDB4ZTIsIDB4OTEsIDB4ZDAsIDB4MDUsIDB4N2MsIDB4YzcsIDB4MjYsIDB4N2QsIDB4YTgsCi0JMHhiMiwgMHhkOSwgMHgyZCwgMHg1YywgMHhjZSwgMHhkZSwgMHg1YywgMHhhZiwgMHhiMywgMHg5NywgMHgyNywgMHg0ZCwKLQkweDBmLCAweDBhLCAweGI5LCAweDc4LCAweGI5LCAweGJmLCAweDdmLCAweDU5LCAweDBjLCAweGU3LCAweGI4LCAweGNkLAotCTB4ZjUsIDB4ZmYsIDB4YjgsIDB4ZWQsIDB4ZDYsIDB4YjksIDB4Y2YsIDB4YjEsIDB4NDUsIDB4ZWMsIDB4YzksIDB4NWQsCi0JMHg4YSwgMHhlYiwgMHg5NywgMHg2MiwgMHhmOSwgMHhhZSwgMHg4NSwgMHgxOCwgMHgzZSwgMHg5YywgMHg3ZiwgMHhmMywKLQkweDBiLCAweDE4LCAweDI0LCAweGI0LCAweGIwLCAweDU3LCAweGMwLCAweGIxLCAweGRiLCAweDIzLCAweGRlLCAweDIyLAotCTB4YmYsIDB4ZGIsIDB4NmIsIDB4YjAsIDB4OWYsIDB4OWQsIDB4MGMsIDB4NTIsIDB4NzQsIDB4ODUsIDB4OGIsIDB4ZTQsCi0JMHg3OSwgMHgzZiwgMHg5ZiwgMHhjZiwgMHgwOCwgMHhkOCwgMHhkOCwgMHg0MiwgMHg3YywgMHg3YSwgMHg0OCwgMHg4ZSwKLQkweDZiLCAweGRhLCAweGRkLCAweGU4LCAweGE3LCAweDc4LCAweGVlLCAweDhlLCAweGY5LCAweDI4LCAweDBlLCAweGE4LAotCTB4NzgsIDB4ZDUsIDB4NjAsIDB4MWIsIDB4ZWUsIDB4NTksIDB4ODgsIDB4ZTcsIDB4YmMsIDB4NTcsIDB4NTUsIDB4ZDksCi0JMHgxZiwgMHhmZSwgMHg3YywgMHhjZiwgMHg3OCwgMHhkMSwgMHgzNiwgMHgwZCwgMHgyNCwgMHg5NywgMHhjMiwgMHhmYiwKLQkweDRlLCAweDVjLCAweDI3LCAweGVjLCAweGFkLCAweDEwLCAweGVlLCAweGRlLCAweDg0LCAweGM0LCAweDEyLCAweDhkLAotCTB4ZGIsIDB4MDIsIDB4ODQsIDB4NWIsIDB4MmQsIDB4ZmMsIDB4ZDcsIDB4ZjYsIDB4N2UsIDB4ZGMsIDB4MzMsIDB4MmUsCi0JMHhhMSwgMHg0NiwgMHhlNywgMHgzZCwgMHgxYSwgMHhiMiwgMHg4MywgMHg3YSwgMHg4ZSwgMHg1ZiwgMHhkZCwgMHgxOCwKLQkweDFhLCAweGY3LCAweDg4LCAweDE3LCAweGE5LCAweDI2LCAweDM5LCAweGQyLCAweGYzLCAweDEwLCAweDk2LCAweGI0LAotCTB4ZGQsIDB4MDksIDB4MzgsIDB4YjYsIDB4YzcsIDB4ZmYsIDB4N2YsIDB4MGIsIDB4YTksIDB4NjUsIDB4YmMsIDB4M2UsCi0JMHhmNywgMHhhOSwgMHgwNCwgMHg3YywgMHg2ZCwgMHhjYywgMHgwNywgMHhiYywgMHhlZiwgMHhkMSwgMHhmYywgMHhkYiwKLQkweDQ3LCAweDVjLCAweGUyLCAweDQyLCAweGZhLCAweGE3LCAweGY2LCAweDg5LCAweDAwLCAweGU3LCAweDU4LCAweDdlLAotCTB4NTYsIDB4NGIsIDB4YjEsIDB4OWUsIDB4YzcsIDB4YjIsIDB4MGUsIDB4N2QsIDB4NTQsIDB4ZDcsIDB4ZjUsIDB4NjMsCi0JMHg4NCwgMHhlOCwgMHgzYSwgMHhlMywgMHhjYywgMHhmNSwgMHhiZCwgMHgwNSwgMHhmYSwgMHg3ZCwgMHhhMiwgMHgyZSwKLQkweGEzLCAweDU4LCAweDQxLCAweGEyLCAweDQ1LCAweGJkLCAweGI2LCAweDA3LCAweDc1LCAweGM1LCAweGNiLCAweDczLAotCTB4ZDUsIDB4NWYsIDB4MjksIDB4ZGMsIDB4ZWIsIDB4NjMsIDB4ZGYsIDB4YTksIDB4MjYsIDB4NWYsIDB4ZjksIDB4NzksCi0JMHg1YSwgMHhlMCwgMHhiYywgMHg2MywgMHg3YiwgMHhkYiwgMHhkMCwgMHg5YywgMHhhNywgMHgxYSwgMHhkYSwgMHg4OSwKLQkweDIxLCAweDNjLCAweDZlLCAweDdkLCAweGM1LCAweGE2LCAweGE1LCAweDdlLCAweGRjLCAweDQ3LCAweGJjLCAweGQ0LAotCTB4MTIsIDB4MmYsIDB4MWYsIDB4YzYsIDB4NTYsIDB4ZDAsIDB4M2EsIDB4N2MsIDB4MmYsIDB4YTMsIDB4NTQsIDB4ZWMsCi0JMHg2YywgMHg3MSwgMHgyZSwgMHgyYSwgMHhjMCwgMHhmZCwgMHg1YywgMHgyYiwgMHg0NSwgMHhiMCwgMHg3MywgMHgzYywKLQkweGQyLCAweGU3LCAweDkzLCAweGQ4LCAweDBlLCAweDIzLCAweGI4LCAweDdiLCAweGZhLCAweDM3LCAweDNjLCAweDU0LAotCTB4MTcsIDB4ZDMsIDB4NWMsIDB4NDEsIDB4ZGMsIDB4OWUsIDB4NzEsIDB4ODksIDB4YjcsIDB4YTksIDB4ZDYsIDB4NzgsCi0JMHgzZSwgMHgyZCwgMHgyZCwgMHg5MywgMHhmMSwgMHhhYywgMHg3ZCwgMHgyNCwgMHgzMCwgMHg4NCwgMHgxYiwgMHg4YywKLQkweDZlLCAweGRjLCAweDQ1LCAweDM2LCAweGQ4LCAweGQ5LCAweDNjLCAweDg0LCAweDA5LCAweGIyLCAweDgxLCAweGVkLAotCTB4MGQsIDB4NTQsIDB4ZmYsIDB4YzQsIDB4NGEsIDB4ZjYsIDB4YjYsIDB4MDAsIDB4Y2IsIDB4NTEsIDB4YTAsIDB4OGIsCi0JMHhlZSwgMHhkNywgMHg1MywgMHg0ZCwgMHgyNCwgMHhjNSwgMHhjOCwgMHhkYSwgMHgxYSwgMHgwNCwgMHhmOSwgMHhhYywKLQkweDM2LCAweDlhLCAweGM0LCAweGNmLCAweDlkLCAweDM1LCAweGViLCAweGY1LCAweGM1LCAweGY4LCAweGNjLCAweDM5LAotCTB4ZjYsIDB4OGIsIDB4ZjQsIDB4NTgsIDB4NzYsIDB4YjUsIDB4YWUsIDB4NDcsIDB4MzcsIDB4NDksIDB4Y2QsIDB4YTMsCi0JMHg3MywgMHg2NCwgMHhiMywgMHgxYiwgMHhkYSwgMHgyZSwgMHg3ZiwgMHg2ZiwgMHg1MSwgMHg0NiwgMHgwNiwgMHhhYSwKLQkweGRhLCAweDY2LCAweGVjLCAweGIyLCAweDNhLCAweDBjLCAweGI1LCAweGVkLCAweDcyLCAweGRkLCAweDJmLCAweGNlLAotCTB4YzEsIDB4MzQsIDB4NTcsIDB4ZTIsIDB4NWEsIDB4NDgsIDB4OGEsIDB4YTgsIDB4NzcsIDB4ZTAsIDB4NDksIDB4NWEsCi0JMHgyMywgMHg4OCwgMHhhZCwgMHhjNSwgMHg2ZSwgMHg2YywgMHgxYiwgMHg5NywgMHgzZiwgMHhjYiwgMHhlZCwgMHg3ZSwKLQkweGI2LCAweGU1LCAweGNmLCAweGY4LCAweGRmLCAweDMxLCAweDFlLCAweGU5LCAweGYyLCAweDJlLCAweGYwLCAweDdmLAotCTB4ZDcsIDB4ZjQsIDB4NjcsIDB4NzMsIDB4MGQsIDB4NjYsIDB4MzgsIDB4ODYsIDB4ZjIsIDB4N2MsIDB4OWMsIDB4NjcsCi0JMHgxNywgMHhlNSwgMHgxYiwgMHhjNCwgMHg3ZCwgMHhjZSwgMHg3YywgMHg1YiwgMHgzZCwgMHhlYywgMHhlMywgMHg2ZSwKLQkweGNhLCAweDk1LCAweDFiLCAweGRiLCAweDJjLCAweGJjLCAweDlhLCAweGI4LCAweGQ3LCAweGRlLCAweGUxLCAweGM4LAotCTB4YTAsIDB4YzMsIDB4YzMsIDB4ZWYsIDB4NzcsIDB4MzUsIDB4OWYsIDB4NWUsIDB4ZDgsIDB4NDMsIDB4YWYsIDB4ZjQsCi0JMHgzMCwgMHg5ZiwgMHgyZiwgMHhiNSwgMHgzYSwgMHhmZCwgMHhmOSwgMHhlZiwgMHg1MSwgMHg3ZSwgMHg3YywgMHhmNiwKLQkweDczLCAweDNkLCAweGIyLCAweDNiLCAweGRkLCAweGRjLCAweGQ3LCAweDdmLCAweGFhLCAweGE0LCAweDA4LCAweGQ3LAotCTB4NzgsIDB4OGQsIDB4NzAsIDB4OGYsIDB4MzMsIDB4NmQsIDB4ZmYsIDB4NDUsIDB4YTksIDB4ZjgsIDB4ZDgsIDB4NWYsCi0JMHgyMywgMHgxOSwgMHhlMCwgMHgzZCwgMHhiYSwgMHg4YSwgMHhmZCwgMHg0NywgMHhkYiwgMHhlZiwgMHgwNiwgMHg4ZSwKLQkweDVhLCAweDllLCAweGVhLCAweGI1LCAweGEwLCAweDNhLCAweGI5LCAweGM3LCAweGIxLCAweDg3LCAweGE1LCAweDY2LAotCTB4N2MsIDB4ZGQsIDB4YjMsIDB4Y2QsIDB4NWMsIDB4MmIsIDB4NzMsIDB4NWYsIDB4YWQsIDB4NzMsIDB4ZGQsIDB4MjQsCi0JMHg4MSwgMHhiNywgMHhhZCwgMHgyYSwgMHhhZiwgMHhhOSwgMHg5ZCwgMHhlMCwgMHg1ZSwgMHgzNywgMHhmNywgMHhjMCwKLQkweDk3LCAweGViLCAweGYwLCAweGQ2LCAweGFmLCAweGI1LCAweDNjLCAweDRiLCAweGQ2LCAweGJhLCAweGM0LCAweDE1LAotCTB4OTksIDB4M2UsIDB4YjIsIDB4M2QsIDB4MWQsIDB4ODksIDB4OGMsIDB4ZTUsIDB4NmQsIDB4NWMsIDB4MWIsIDB4YzIsCi0JMHgwMywgMHg5OSwgMHg0YSwgMHgwYywgMHg1YiwgMHg5ZiwgMHg2YiwgMHg0NSwgMHhlYiwgMHgxNCwgMHg1OSwgMHg2MywKLQkweDI2LCAweDg4LCAweDk2LCAweDg5LCAweGYwLCAweGMwLCAweGQ3LCAweGE1LCAweGYwLCAweGUwLCAweGJjLCAweGM0LAotCTB4Y2YsIDB4N2MsIDB4MWQsIDB4ZDcsIDB4MzgsIDB4MzgsIDB4NTYsIDB4ZWQsIDB4NTgsIDB4ZWQsIDB4NWMsIDB4ZTMsCi0JMHgxZCwgMHg1NywgMHhlNywgMHg2ZiwgMHg0NSwgMHg3YSwgMHhjZSwgMHgzMywgMHg1ZiwgMHg5NiwgMHg2YywgMHgzYywKLQkweDEwLCAweDkzLCAweDcwLCAweGEzLCAweGYxLCAweDlmLCAweGM5LCAweGI3LCAweDA0LCAweGQ5LCAweGM2LCAweGFiLAotCTB4OWMsIDB4OWYsIDB4OWQsIDB4ZTAsIDB4YmMsIDB4N2MsIDB4YWQsIDB4OGUsIDB4YjUsIDB4OTksIDB4N2EsIDB4OGEsCi0JMHg0OSwgMHgwZCwgMHgxNCwgMHg5ZiwgMHhlYSwgMHhmMSwgMHgxMSwgMHhjNSwgMHhhNCwgMHhkNSwgMHg2YiwgMHgyOCwKLQkweDNjLCAweGFlLCAweGIxLCAweGZhLCAweGFmLCAweDAwLCAweGVmLCAweGRmLCAweDZhLCAweDU2LCAweDUxLCAweDY4LAotCTB4N2QsIDB4ZGQsIDB4OTIsIDB4ZDYsIDB4ZDMsIDB4MjAsIDB4YTksIDB4YjgsIDB4MmIsIDB4YzIsIDB4NzMsIDB4MjcsCi0JMHgzYSwgMHhkNiwgMHhlNiwgMHgyYiwgMHhmOSwgMHg3NCwgMHg5NSwgMHg5MywgMHgzZiwgMHhmNSwgMHg4ZSwgMHhhYiwKLQkweDY2LCAweDJiLCAweDc5LCAweGQ2LCAweDk4LCAweGQ1LCAweDdlLCAweDkwLCAweDkyLCAweDc4LCAweGNmLCAweGExLAotCTB4MGYsIDB4ZTMsIDB4ZDksIDB4MTQsIDB4ZjYsIDB4NjQsIDB4NDMsIDB4ZjgsIDB4NDUsIDB4YTYsIDB4OGEsIDB4NmMsCi0JMHgyMywgMHg2YywgMHg3YywgMHgxNywgMHgzYywgMHhhNiwgMHhiNSwgMHgyMywgMHg5NiwgMHgwZiwgMHg0NywgMHgxZiwKLQkweDkwLCAweGZlLCAweDFjLCAweDY1LCAweDk3LCAweDc2LCAweDk4LCAweDEwLCAweDM2LCAweDcyLCAweGFlLCAweDk2LAotCTB4ZDAsIDB4NGIsIDB4ZjgsIDB4NzMsIDB4NjcsIDB4OGYsIDB4MGEsIDB4YTgsIDB4ZjAsIDB4ZDAsIDB4OWMsIDB4MDcsCi0JMHg0NiwgMHgzMywgMHg5ZSwgMHg3OSwgMHgzOCwgMHhmZCwgMHg0YywgMHhkZSwgMHg3MywgMHg5NSwgMHhiMCwgMHhjMSwKLQkweGI4LCAweDk3LCAweGU0LCAweDJjLCAweGQwLCAweGRjLCAweDU2LCAweDhmLCAweDcyLCAweGFmLCAweDBiLCAweGUzLAotCTB4MjQsIDB4MTMsIDB4YzUsIDB4MGMsIDB4NzQsIDB4MjgsIDB4MjMsIDB4MjgsIDB4MmYsIDB4ZWMsIDB4MjcsIDB4MjYsCi0JMHg2NCwgMHhjYSwgMHhkMCwgMHgyZiwgMHgxNywgMHg4MSwgMHgwMywgMHgxNCwgMHgzYiwgMHgzNiwgMHhjNywgMHg3ZSwKLQkweDQ1LCAweGI5LCAweGExLCAweGIyLCAweDdmLCAweDkxLCAweDllLCAweDE0LCAweDU4LCAweGEyLCAweDI3LCAweDQ5LAotCTB4MWUsIDB4MmUsIDB4ZmYsIDB4NDEsIDB4YWEsIDB4ZWYsIDB4MGYsIDB4OTYsIDB4ZjgsIDB4N2QsIDB4Y2YsIDB4N2MsCi0JMHhkMiwgMHg5OSwgMHgzZiwgMHhiMiwgMHg2ZiwgMHg4NSwgMHgyNCwgMHhlMSwgMHhlYSwgMHhiNiwgMHhhMywgMHhjOCwKLQkweDJkLCAweGFkLCAweGQwLCAweDEwLCAweDI0LCAweDRjLCAweGMwLCAweDc1LCAweDYwLCAweDAzLCAweGYxLCAweGI4LAotCTB4ZTUsIDB4MTEsIDB4ZWUsIDB4MDksIDB4NWUsIDB4ZDksIDB4NzEsIDB4ZGQsIDB4MTQsIDB4ZmIsIDB4NzUsIDB4YTAsCi0JMHhlMywgMHhlNywgMHg2OSwgMHgyZCwgMHhkOSwgMHgyMCwgMHgzMywgMHhhZSwgMHg0YywgMHg3NCwgMHhkYywgMHgzZCwKLQkweGMyLCAweGI5LCAweGFkLCAweDhkLCAweDZiLCAweDcxLCAweGNhLCAweGNiLCAweGRhLCAweDYwLCAweGEzLCAweGYwLAotCTB4ODksIDB4MWIsIDB4MzMsIDB4NTQsIDB4OGYsIDB4MTMsIDB4YmQsIDB4ZWYsIDB4NDcsIDB4YjQsIDB4MjAsIDB4YzksCi0JMHhhZSwgMHhlYiwgMHg0ZSwgMHhkMSwgMHhjZiwgMHg3OCwgMHhkZiwgMHg5MSwgMHhkYiwgMHg1NSwgMHhmOSwgMHgwYSwKLQkweGVlLCAweDA4LCAweDJmLCAweGUwLCAweDkwLCAweGE4LCAweDgzLCAweDNiLCAweDZjLCAweDdiLCAweDc3LCAweDhjLAotCTB4ZjMsIDB4YjgsIDB4YjMsIDB4OWYsIDB4NGUsIDB4ZjcsIDB4NjMsIDB4OTQsIDB4NzcsIDB4MTUsIDB4MGMsIDB4MzMsCi0JMHg3ZCwgMHg3YywgMHgyZSwgMHg0MiwgMHhhMiwgMHgzYSwgMHgyZSwgMHg3YiwgMHg3YSwgMHgwMSwgMHg5NywgMHhmOCwKLQkweGIwLCAweDk3LCAweGVlLCAweDk3LCAweDFkLCAweDdjLCAweGMyLCAweDY3LCAweGZiLCAweDU2LCAweDc1LCAweGE4LAotCTB4OGYsIDB4ZjAsIDB4NzksIDB4YzAsIDB4MmIsIDB4M2IsIDB4MzYsIDB4NGMsIDB4NmEsIDB4MjEsIDB4ODksIDB4ZjgsCi0JMHhkOCwgMHhjMywgMHg3YiwgMHhkYiwgMHgzNCwgMHhlNywgMHhhYywgMHhjMSwgMHg3NCwgMHhmYiwgMHgzYSwgMHhiOCwKLQkweDk3LCAweGI5LCAweDljLCAweGU4LCAweGI2LCAweGIzLCAweDYxLCAweGMyLCAweDQ5LCAweDE1LCAweDViLCAweDQ5LAotCTB4ZTQsIDB4YTksIDB4MjIsIDB4YmUsIDB4YTIsIDB4YzIsIDB4YWIsIDB4OWIsIDB4NzQsIDB4NzIsIDB4MmMsIDB4OWQsCi0JMHhjNCwgMHhmMywgMHhmMSwgMHg4YSwgMHg3ZSwgMHhkNiwgMHhlNywgMHhiZiwgMHg4MSwgMHg1NCwgMHg0MywgMHgyNywKLQkweDQ2LCAweGIzLCAweGFhLCAweDdmLCAweDYzLCAweGE2LCAweDEzLCAweDEzLCAweGE0LCAweGMzLCAweDNiLCAweDhhLAotCTB4NDEsIDB4N2YsIDB4NjcsIDB4NDYsIDB4YzcsIDB4YjYsIDB4MjIsIDB4ZDcsIDB4MjYsIDB4YTEsIDB4OGUsIDB4ZGQsCi0JMHg5MywgMHhiOSwgMHg4NSwgMHgxYSwgMHhiMiwgMHg5MiwgMHg0YiwgMHhmNiwgMHg2NywgMHgyYSwgMHgzNiwgMHgxNywKLQkweGNlLCAweDdiLCAweGU2LCAweDQzLCAweGEyLCAweDMyLCAweGFmLCAweDQyLCAweGViLCAweDI4LCAweDIzLCAweDdmLAotCTB4NmMsIDB4NjMsIDB4MjksIDB4ZGIsIDB4YzIsIDB4YWQsIDB4OTgsIDB4OWMsIDB4ZjIsIDB4NWIsIDB4NTcsIDB4OTgsCi0JMHgyYSwgMHhkNiwgMHhiNiwgMHhiZCwgMHg0MSwgMHhlZiwgMHhiNiwgMHhlMiwgMHg5NywgMHhjNywgMHhiZiwgMHg4NiwKLQkweGYyLCAweDM3LCAweDVkLCAweDc4LCAweDNjLCAweDkzLCAweDQ0LCAweDRiLCAweGRiLCAweDRkLCAweDQ4LCAweGZkLAotCTB4YWUsIDB4ODIsIDB4YTcsIDB4MzIsIDB4M2UsIDB4M2MsIDB4OTcsIDB4YTksIDB4ZWMsIDB4NzcsIDB4N2YsIDB4M2YsCi0JMHg0YiwgMHg3ZSwgMHg0OCwgMHgzZSwgMHhmMCwgMHhlYywgMHg5NywgMHhlZSwgMHgzMSwgMHg1MiwgMHgzYywgMHg5NywKLQkweDc5LCAweGZmLCAweGZiLCAweDlmLCAweDFlLCAweDc3LCAweGQ2LCAweDE5LCAweGU3LCAweDExLCAweGY1LCAweGUzLAotCTB4OGIsIDB4ZjMsIDB4ZGEsIDB4ZDAsIDB4ZGIsIDB4ZmUsIDB4YjEsIDB4NzcsIDB4YjQsIDB4MjgsIDB4NDAsIDB4MzEsCi0JMHhhNCwgMHg3MiwgMHgzZSwgMHg0MCwgMHgyOCwgMHhlMywgMHhjZSwgMHg5ZSwgMHgwYiwgMHhlMSwgMHhkZiwgMHg4OCwKLQkweDcxLCAweDBlLCAweDE2LCAweGFhLCAweDA4LCAweDU3LCAweGFkLCAweDIwLCAweDU5LCAweGU4LCAweDk5LCAweDgwLAotCTB4NWYsIDB4MmEsIDB4YWEsIDB4ZjQsIDB4NjksIDB4ZjIsIDB4YmIsIDB4NDgsIDB4M2UsIDB4YWUsIDB4ZTIsIDB4MGYsCi0JMHgyOSwgMHhhNiwgMHhiMCwgMHg0ZiwgMHg1NSwgMHg3MiwgMHg5YywgMHg1NCwgMHhkYywgMHhlYywgMHg4NSwgMHg1NywKLQkweGE3LCAweDZiLCAweGM1LCAweGE2LCAweDQzLCAweGY5LCAweGI3LCAweGY5LCAweDM5LCAweGQ5LCAweDc1LCAweGU1LAotCTB4N2IsIDB4ZTQsIDB4ZDIsIDB4NzcsIDB4ZDIsIDB4YjMsIDB4MjMsIDB4YjMsIDB4ZGIsIDB4NjgsIDB4M2MsIDB4Y2IsCi0JMHhlMiwgMHg1OSwgMHgzYiwgMHhiNSwgMHg4NSwgMHhlNSwgMHgxNSwgMHhmMCwgMHhiZiwgMHg0MSwgMHhmMiwgMHg5ZiwKLQkweDI0LCAweDFhLCAweGIzLCAweGI0LCAweGM2LCAweGViLCAweGI0LCAweDY2LCAweGE2LCAweGQ4LCAweDQ3LCAweDYzLAotCTB4ZjgsIDB4MTksIDB4YzksIDB4ZDksIDB4YjEsIDB4ZGQsIDB4YWQsIDB4NWUsIDB4ZGUsIDB4ZGIsIDB4N2YsIDB4MmUsCi0JMHgwMywgMHhhYSwgMHhiYiwgMHgyZCwgMHhjZCwgMHhiNSwgMHg3MCwgMHgxNiwgMHg3MiwgMHgxOCwgMHg4YiwgMHhmOCwKLQkweGYxLCAweDJlLCAweDVjLCAweDNmLCAweGFhLCAweDI1LCAweDJkLCAweGMyLCAweDYxLCAweDI5LCAweDE1LCAweGMyLAotCTB4NjUsIDB4YjIsIDB4MGQsIDB4YzcsIDB4YzksIDB4ODYsIDB4OWIsIDB4ODgsIDB4YTcsIDB4NzAsIDB4ZTgsIDB4MWMsCi0JMHg4ZCwgMHhiNywgMHg1YywgMHgwYSwgMHhmNiwgMHg0ZiwgMHhjOCwgMHgzOCwgMHhjNywgMHhmYiwgMHhhZiwgMHhhMiwKLQkweGYyLCAweDNlLCAweDAxLCAweDdmLCAweDFhLCAweGJiLCAweGY4LCAweDdmLCAweDBkLCAweGUxLCAweGYyLCAweDcwLAotCTB4ODIsIDB4YjIsIDB4MmEsIDB4ZTMsIDB4NWIsIDB4NGYsIDB4YmUsIDB4ZmQsIDB4MjEsIDB4MWMsIDB4YTQsIDB4M2EsCi0JMHg3OSwgMHg0NywgMHgyYywgMHg4NCwgMHg2NCwgMHg3ZCwgMHgxYywgMHgxZSwgMHhiZCwgMHg2NSwgMHhlMCwgMHgyMiwKLQkweGZlLCAweDg3LCAweDVkLCAweGU2LCAweDNkLCAweDZjLCAweDExLCAweDRlLCAweDVjLCAweGM0LCAweGE3LCAweGI2LAotCTB4YWMsIDB4ZWIsIDB4YTcsIDB4NjcsIDB4YTAsIDB4OTcsIDB4Y2YsIDB4YTEsIDB4NjUsIDB4ZjAsIDB4MTMsIDB4YmMsCi0JMHg2YiwgMHhmMywgMHhmZSwgMHhiNiwgMHgyMiwgMHhjYiwgMHg3OCwgMHhkMSwgMHgwOCwgMHhhYiwgMHgyZSwgMHgwNCwKLQkweDUwLCAweDBlLCAweGM4LCAweGQ4LCAweDZjLCAweDMwLCAweGZlLCAweGQ3LCAweDA2LCAweDFmLCAweDgzLCAweDM2LAotCTB4NzAsIDB4NWUsIDB4YjQsIDB4ZjQsIDB4N2YsIDB4ODgsIDB4YjMsIDB4NzYsIDB4YWUsIDB4OWUsIDB4ZDcsIDB4MTUsCi0JMHg0OCwgMHg1YywgMHhkZCwgMHg3MiwgMHhiYSwgMHgwYSwgMHg1YSwgMHg5NywgMHg1YiwgMHhlOCwgMHg4OSwgMHg0NiwKLQkweGY5LCAweGFmLCAweGVjLCAweGIzLCAweDgxLCAweDRmLCAweDZkLCAweDNkLCAweGYyLCAweDI5LCAweGUxLCAweDIwLAotCTB4M2QsIDB4MzgsIDB4NGQsIDB4YjYsIDB4ZGYsIDB4OGYsIDB4NDUsIDB4ZGEsIDB4NWUsIDB4MjcsIDB4ZmUsIDB4YTksCi0JMHhiMCwgMHhkMywgMHg3OSwgMHg5ZiwgMHhjOCwgMHhmMiwgMHhlYywgMHgyNSwgMHhkYSwgMHg1ZSwgMHgyMywgMHgxYywKLQkweGIwLCAweDIzLCAweDc2LCAweGQxLCAweDRlLCAweDJlLCAweGU1LCAweDFhLCAweGU5LCAweDY3LCAweGRlLCAweDRhLAotCTB4ZmYsIDB4OTgsIDB4N2IsIDB4MGUsIDB4YjcsIDB4ZTIsIDB4NzYsIDB4YzIsIDB4NzcsIDB4YzMsIDB4ZDksIDB4NDUsCi0JMHhiYywgMHhlNiwgMHhhNiwgMHgxOCwgMHhjYywgMHhiMSwgMHhiZiwgMHg3YywgMHgxNSwgMHg5NSwgMHhkNCwgMHgxMiwKLQkweDk1LCAweGM3LCAweGQ4LCAweDRkLCAweDcxLCAweDYxLCAweDk3LCAweDkzLCAweDBiLCAweGUwLCAweDVkLCAweGJlLAotCTB4YjYsIDB4MGQsIDB4OWYsIDB4NGMsIDB4OTUsIDB4YmMsIDB4ZTQsIDB4NGIsIDB4ZWIsIDB4ZjUsIDB4MzUsIDB4MTAsCi0JMHhjMSwgMHg4YywgMHgyNSwgMHhlYSwgMHg0YywgMHgxOSwgMHgxZiwgMHhiNiwgMHg2YiwgMHg1ZCwgMHg5MiwgMHgzYywKLQkweDg4LCAweGFiLCAweDYzLCAweDk2LCAweGVkLCAweGQzLCAweGY1LCAweGJlLCAweDU2LCAweDExLCAweGU5LCAweDI5LAotCTB4OGEsIDB4MjgsIDB4NmEsIDB4OGEsIDB4M2UsIDB4YTUsIDB4YTYsIDB4ZDgsIDB4YWEsIDB4NzgsIDB4OGIsIDB4OTYsCi0JMHg0NywgMHg1ZCwgMHg3YiwgMHgxNywgMHhkNSwgMHhiNCwgMHg0MywgMHg1OCwgMHgxOSwgMHhmMywgMHg1MSwgMHgzZCwKLQkweGFjLCAweDE5LCAweDE3LCAweDUwLCAweDQ1LCAweGYyLCAweDBmLCAweDYxLCAweDZmLCAweGM5LCAweDg0LCAweDJiLAotCTB4YjMsIDB4MTMsIDB4ZWUsIDB4NGMsIDB4NTgsIDB4ZGQsIDB4ODMsIDB4MjEsIDB4MjQsIDB4ODMsIDB4MTUsIDB4NGMsCi0JMHhhYiwgMHg5MCwgMHhhZSwgMHhhYSwgMHhkYiwgMHgxOSwgMHhjYiwgMHhkYywgMHg4NSwgMHhiMywgMHgzOSwgMHhjNiwKLQkweGU3LCAweDU0LCAweDlmLCAweGE2LCAweGY5LCAweDNiLCAweGJjLCAweDJmLCAweGM1LCAweDRkLCAweDNjLCAweDQ5LAotCTB4NzUsIDB4OTUsIDB4YTcsIDB4YWQsIDB4OTEsIDB4ZjQsIDB4ZDAsIDB4ODQsIDB4ZTEsIDB4OTIsIDB4NjAsIDB4YjMsCi0JMHgyMiwgMHg1ZCwgMHhjMCwgMHhmYiwgMHg2NCwgMHhiYiwgMHg4MiwgMHgwMywgMHgzMywgMHg5NCwgMHg0OCwgMHgyOCwKLQkweDVmLCAweGI5LCAweDMyLCAweDJhLCAweGM1LCAweDA5LCAweGM2LCAweGQ4LCAweDNlLCAweGZhLCAweDFlLCAweGUwLAotCTB4MzMsIDB4M2YsIDB4NjQsIDB4NjcsIDB4NTcsIDB4NzYsIDB4YjQsIDB4M2EsIDB4YjEsIDB4YTYsIDB4OGQsIDB4NmEsCi0JMHg5YywgMHhhNywgMHhiZCwgMHg5NSwgMHg5YSwgMHhjYiwgMHg0NCwgMHhjZCwgMHhmOCwgMHg2MiwgMHhhZCwgMHhiOCwKLQkweGUxLCAweGU2LCAweDFhLCAweGFhLCAweGM1LCAweDg3LCAweDRiLCAweDhjLCAweDAzLCAweDJiLCAweDY3LCAweDNjLAotCTB4MzcsIDB4YzQsIDB4ZGEsIDB4MDgsIDB4YjMsIDB4OGIsIDB4MDUsIDB4OGMsIDB4MzUsIDB4YWMsIDB4ZjksIDB4YjAsCi0JMHgxZSwgMHgwNywgMHhhOSwgMHg1NiwgMHhmNiwgMHhlYiwgMHg1YiwgMHg5MSwgMHg1MSwgMHhjYiwgMHhkZSwgMHgzNywKLQkweGUzLCAweDhjLCAweDdmLCAweGUxLCAweGRkLCAweDQ2LCAweDE4LCAweDZhLCAweDI0LCAweGZkLCAweDU1LCAweDhlLAotCTB4OTksIDB4OWUsIDB4M2IsIDB4ZTIsIDB4MDYsIDB4MGUsIDB4OGYsIDB4NTIsIDB4ODgsIDB4ZDIsIDB4ZDcsIDB4YTMsCi0JMHg2ZSwgMHg0ZCwgMHgzNywgMHgzZSwgMHhhYywgMHg2NywgMHhmYywgMHg0YiwgMHhiMSwgMHg4YSwgMHhlOCwgMHhkOSwKLQkweDMzLCAweDEzLCAweDcwLCAweGNlLCAweDI0LCAweGVjLCAweDJkLCAweDJkLCAweGQyLCAweDdjLCAweDM5LCAweGFkLAotCTB4NWYsIDB4NDYsIDB4MjMsIDB4Y2IsIDB4ZTQsIDB4OWYsIDB4YTIsIDB4OTEsIDB4NmMsIDB4OTYsIDB4MzAsIDB4Y2YsCi0JMHg2OCwgMHg3YSwgMHgxYiwgMHg1ZSwgMHg0ZSwgMHhmMywgMHhiYywgMHhlMSwgMHhhNCwgMHgyMSwgMHg1NCwgMHhlZSwKLQkweDZiLCAweDNiLCAweDMyLCAweGIxLCAweDY2LCAweDc4LCAweDBkLCAweDVlLCAweDdmLCAweDcxLCAweDlkLCAweDAwLAotCTB4ZjYsIDB4N2QsIDB4YTksIDB4M2MsIDB4ZmUsIDB4MzksIDB4NmIsIDB4NTEsIDB4ZGMsIDB4MTgsIDB4NWQsIDB4NGYsCi0JMHg3NSwgMHg1MCwgMHgxNCwgMHhmYSwgMHhlZiwgMHg5NCwgMHg0OSwgMHgxZiwgMHhkYywgMHhlNywgMHg1ZCwgMHg0MSwKLQkweDk4LCAweDE3LCAweDllLCAweDU3LCAweGUyLCAweDdjLCAweGVlLCAweGQ3LCAweDFlLCAweDUyLCAweDRjLCAweGRiLAotCTB4NzYsIDB4YjcsIDB4ZWIsIDB4ZWEsIDB4M2IsIDB4NjAsIDB4M2IsIDB4ZjQsIDB4ZjEsIDB4N2UsIDB4ODEsIDB4NjcsCi0JMHg0ZiwgMHhiYiwgMHgwZiwgMHgwNywgMHgyOCwgMHgwNywgMHgzZSwgMHg5MSwgMHg2ZSwgMHhiMSwgMHg2ZSwgMHgxMiwKLQkweDdjLCAweDdlLCAweDg5LCAweDYyLCAweGI2LCAweDQ4LCAweGQxLCAweGJiLCAweDM3LCAweGQ2LCAweGIwLCAweGNmLAotCTB4ZWUsIDB4MmUsIDB4ZWQsIDB4ODQsIDB4OTQsIDB4ODksIDB4ZDQsIDB4NzAsIDB4M2QsIDB4NTEsIDB4NDUsIDB4MzUsCi0JMHhmNCwgMHg3MCwgMHg5YSwgMHhlOSwgMHhiNSwgMHg4NywgMHg1YywgMHgzNCwgMHhkNywgMHhhZSwgMHhiOCwgMHgzZSwKLQkweDdmLCAweDNkLCAweGQ5LCAweDQ1LCAweGEzLCAweGM5LCAweDcyLCAweDBjLCAweGUwLCAweDA4LCAweDhkLCAweDBkLAotCTB4OTUsIDB4NTgsIDB4OTYsIDB4N2QsIDB4MzUsIDB4ZGMsIDB4MzMsIDB4ZGMsIDB4NGIsIDB4ZmEsIDB4YWQsIDB4Y2IsCi0JMHg1NiwgMHhlNiwgMHhjOSwgMHg5NiwgMHhmYSwgMHhiMSwgMHg2MiwgMHg2NCwgMHhkYywgMHg5OSwgMHg4NywgMHg3ZCwKLQkweGUwLCAweGM1LCAweGY4LCAweDAwLCAweGY2LCAweGE2LCAweDAzLCAweDk4LCAweDQ5LCAweGI3LCAweGE4LCAweDJmLAotCTB4MzgsIDB4ZmIsIDB4ZWQsIDB4OTUsIDB4ZmUsIDB4ZDIsIDB4NzAsIDB4N2EsIDB4NzEsIDB4NGMsIDB4MDAsIDB4ZDMsCi0JMHg5NywgMHhmZSwgMHg2NywgMHhmOSwgMHg1NCwgMHhmYSwgMHg4ZSwgMHg5NSwgMHg3ZSwgMHg4MCwgMHg4MiwgMHg1YywKLQkweGEwLCAweDgyLCAweDg3LCAweDI4LCAweDU2LCAweDc4LCAweDFmLCAweDI2LCAweGJkLCAweDllLCAweDI3LCAweGJkLAotCTB4NGEsIDB4YTQsIDB4ZDcsIDB4MTcsIDB4OGMsIDB4ZWYsIDB4MzMsIDB4NjYsIDB4ZjEsIDB4ZWMsIDB4OGUsIDB4ZmIsCi0JMHg3OCwgMHg4ZiwgMHhjNSwgMHgyMiwgMHhkMCwgMHhlMiwgMHg4YywgMHhjOSwgMHhjNCwgMHg1ZCwgMHgzOCwgMHgzMywKLQkweGMyLCAweGU3LCAweGY5LCAweGQ0LCAweDhlLCAweDUzLCAweDY5LCAweDdiLCAweGZkLCAweDVjLCAweGFjLCAweDI1LAotCTB4NzUsIDB4OWUsIDB4ZjAsIDB4YjQsIDB4ZjUsIDB4YmIsIDB4OWEsIDB4NzEsIDB4OTYsIDB4ZmMsIDB4MzQsIDB4M2IsCi0JMHhmMSwgMHhmYiwgMHgzOCwgMHg1YiwgMHhkZiwgMHhhMiwgMHhmZSwgMHg5OCwgMHhjYSwgMHhmOSwgMHg0NywgMHhlMywKLQkweDBmLCAweDIxLCAweDMxLCAweDQxLCAweDc1LCAweGMzLCAweDlhLCAweDdmLCAweDQ3LCAweDRlLCAweDE2LCAweDg3LAotCTB4YWMsIDB4YjcsIDB4Y2MsIDB4YmYsIDB4ODAsIDB4ZmYsIDB4ODYsIDB4YjMsIDB4NTcsIDB4ODQsIDB4OGQsIDB4MTcsCi0JMHhjMCwgMHg2MywgMHgyYSwgMHhmNSwgMHg3OCwgMHg3OCwgMHhmNiwgMHgxZSwgMHgzZSwgMHg4YiwgMHgxNCwgMHhlNCwKLQkweDVhLCAweGRiLCAweGQ5LCAweDBiLCAweDRhLCAweGYzLCAweGRlLCAweDk1LCAweDQwLCAweGFlLCAweDU3LCAweDBiLAotCTB4YTUsIDB4OWMsIDB4YjMsIDB4OWYsIDB4ZjAsIDB4M2UsIDB4NDYsIDB4N2UsIDB4MTEsIDB4MWQsIDB4ZTMsIDB4ZjEsCi0JMHg4MSwgMHgwZSwgMHgzZCwgMHgxZiwgMHg4MiwgMHg0YywgMHgxOCwgMHgyNywgMHgxNSwgMHhkMCwgMHhiYSwgMHg4MCwKLQkweGEwLCAweGZmLCAweGIxLCAweDc0LCAweDEwLCAweGZiLCAweGIyLCAweDJkLCAweDNkLCAweDUxLCAweDcxLCAweGRiLAotCTB4YzIsIDB4OWUsIDB4MzEsIDB4ZTcsIDB4YjksIDB4MDAsIDB4ZTUsIDB4MzksIDB4MmQsIDB4ZjUsIDB4MTgsIDB4NWEsCi0JMHhmYSwgMHg3YywgMHhlMiwgMHg1NiwgMHhhNCwgMHhlYSwgMHg1YiwgMHhmYSwgMHg5ZiwgMHg0NCwgMHgzOCwgMHhlMSwKLQkweDExLCAweDVhLCAweGY0LCAweDJjLCAweDJhLCAweGYzLCAweGFjLCAweGNjLCAweGNiLCAweDQwLCAweDAzLCAweGM3LAotCTB4OTksIDB4MzQsIDB4OWUsIDB4NTQsIDB4NjUsIDB4YWMsIDB4NmEsIDB4ZDMsIDB4ZTcsIDB4YTcsIDB4YjEsIDB4NjgsCi0JMHgyZiwgMHg5NSwgMHgzMSwgMHhlYiwgMHhmMywgMHgzNCwgMHg1ZSwgMHg1NiwgMHhhOSwgMHgwZSwgMHhhZSwgMHg4MiwKLQkweGFiLCAweDgxLCAweGY3LCAweGUzLCAweDc2LCAweDYyLCAweDQ3LCAweDlhLCAweGYzLCAweDM0LCAweGM5LCAweDg1LAotCTB4N2MsIDB4YjMsIDB4MjcsIDB4YjIsIDB4MTMsIDB4MDMsIDB4ZjksIDB4MDAsIDB4MGUsIDB4NjYsIDB4YzMsIDB4ZmIsCi0JMHhmNiwgMHgxMCwgMHhhZSwgMHgxYiwgMHgyYiwgMHg4NSwgMHg0MywgMHhkYiwgMHg0NSwgMHg4MCwgMHhmNCwgMHgyZCwKLQkweDIxLCAweGQ0LCAweDEwLCAweDQ0LCAweGI1LCAweGFlLCAweGQyLCAweGE3LCAweDUyLCAweGNmLCAweDljLCAweGEyLAotCTB4N2EsIDB4ZTYsIDB4MGMsIDB4ZjksIDB4OWEsIDB4NmYsIDB4YTEsIDB4NDYsIDB4NWQsIDB4OTksIDB4YjMsIDB4MzEsCi0JMHgxNywgMHhkYiwgMHg4NCwgMHhmNywgMHgxZCwgMHg5ZCwgMHgwNSwgMHhjOSwgMHhjNiwgMHgzOCwgMHgxNywgMHgzOSwKLQkweDM1LCAweGE4LCAweGQ4LCAweDNlLCAweDY2LCAweDc5LCAweGVlLCAweDZmLCAweDBmLCAweDIyLCAweDljLCAweDYxLAotCTB4Y2MsIDB4MjksIDB4N2QsIDB4NTMsIDB4MjYsIDB4NzksIDB4Y2MsIDB4ZTgsIDB4NDMsIDB4ZDgsIDB4MTgsIDB4MWIsCi0JMHhjMiwgMHg4MCwgMHhmMSwgMHhjNywgMHhhOCwgMHg2YSwgMHhlMCwgMHg3OCwgMHhhNCwgMHg1OCwgMHg3NSwgMHgzNCwKLQkweGVmLCAweGM1LCAweGY2LCAweDZlLCAweDg0LCAweDhmLCAweDcyLCAweDBlLCAweDZlLCAweGE1LCAweDFjLCAweGNjLAotCTB4YmUsIDB4Y2IsIDB4ZjMsIDB4ZGYsIDB4ZGYsIDB4YjEsIDB4OWEsIDB4NzAsIDB4NDUsIDB4NmQsIDB4N2IsIDB4MjUsCi0JMHhjZiwgMHg1ZiwgMHg5ZCwgMHg1NywgMHhiOSwgMHg4ZiwgMHg0MywgMHhiNSwgMHgyOSwgMHhiYywgMHg2ZiwgMHg1ZiwKLQkweDZiLCAweGUyLCAweDUxLCAweDhhLCAweDMxLCAweDg5LCAweDM1LCAweDZlLCAweDYwLCAweDA5LCAweDlmLCAweGY3LAotCTB4MTUsIDB4MGIsIDB4M2QsIDB4ODAsIDB4NDAsIDB4YzcsIDB4OGEsIDB4YmMsIDB4YzAsIDB4NmMsIDB4OWMsIDB4ZWMsCi0JMHhlMywgMHhkNywgMHhjZSwgMHhmNywgMHg4NCwgMHgxNiwgMHhjZSwgMHg2MywgMHg3MiwgMHhmZiwgMHhlNCwgMHg5MCwKLQkweDlkLCAweGU0LCAweDMzLCAweGZhLCAweGQyLCAweDNiLCAweDY0LCAweDU3LCAweDVhLCAweGIwLCAweDhjLCAweDlmLAotCTB4ZDUsIDB4NzAsIDB4NWMsIDB4OTYsIDB4ZjUsIDB4NDUsIDB4YjksIDB4YjMsIDB4YWMsIDB4NGYsIDB4ZDgsIDB4YjksCi0JMHgwNSwgMHg1ZCwgMHhiOCwgMHhlOCwgMHg5ZCwgMHhkZCwgMHg5MywgMHhkYSwgMHhlMCwgMHgxZSwgMHhiNCwgMHgwYywKLQkweGZjLCAweDVjLCAweDU0LCAweDNiLCAweGJiLCAweDdmLCAweGQzLCAweGFkLCAweDQ4LCAweDJkLCAweDM3LCAweDVkLAotCTB4YmQsIDB4OWYsIDB4NjQsIDB4ZDcsIDB4MTMsIDB4MWQsIDB4ZTcsIDB4MDgsIDB4ODQsIDB4NmUsIDB4NzAsIDB4ZjYsCi0JMHg4OCwgMHhhNiwgMHg1YiwgMHhmZiwgMHg4NCwgMHhlNiwgMHhlNiwgMHhmZiwgMHhiYiwgMHg3YywgMHg3YywgMHg1ZSwKLQkweGYxLCAweGY5LCAweGVjLCAweDczLCAweDc2LCAweDc0LCAweDY5LCAweDQ1LCAweDNlLCAweDI3LCAweGM5LCAweGY3LAotCTB4ODMsIDB4YTYsIDB4ODQsIDB4NDYsIDB4M2QsIDB4MzIsIDB4ZGYsIDB4NDcsIDB4ZGYsIDB4ZmYsIDB4MjYsIDB4NGYsCi0JMHg2OCwgMHhmZiwgMHhkYSwgMHg3ZSwgMHhmYywgMHgyNCwgMHg2NywgMHg2MiwgMHgzZiwgMHhlNSwgMHg4MSwgMHgzYSwKLQkweDVkLCAweDUzLCAweDczLCAweDA4LCAweDcxLCAweDJkLCAweGVkLCAweGYwLCAweDdmLCAweDRkLCAweDhlLCAweGZjLAotCTB4YjAsIDB4NWUsIDB4NzUsIDB4NmEsIDB4OGMsIDB4MGEsIDB4N2YsIDB4M2UsIDB4ZTIsIDB4ZWYsIDB4YjcsIDB4N2MsCi0JMHhlYywgMHgwYiwgMHg4NCwgMHg5MSwgMHhjOCwgMHg2NiwgMHg1MiwgMHgxNCwgMHg1NywgMHg1YSwgMHhhMiwgMHg1NCwKLQkweGMxLCAweDkzLCAweDFmLCAweDY4LCAweGZiLCAweDQwLCAweGZlLCAweDNhLCAweDk2LCAweDY2LCAweGY5LCAweDA3LAotCTB4ZmQsIDB4ZGIsIDB4ZjgsIDB4NDgsIDB4YjAsIDB4ZWUsIDB4ZjQsIDB4MjQsIDB4OGQsIDB4OTAsIDB4YzQsIDB4NzEsCi0JMHhkNywgMHg4OSwgMHhhNywgMHg1NiwgMHg0OCwgMHhmYSwgMHg1MSwgMHgwZCwgMHhkMywgMHgzNSwgMHg1YywgMHgwYSwKLQkweDA3LCAweGJkLCAweDdjLCAweDdlLCAweDllLCAweGMwLCAweGUxLCAweDM2LCAweGEzLCAweDkyLCAweDJiLCAweGU3LAotCTB4MjgsIDB4MWYsIDB4YmQsIDB4NGYsIDB4NzQsIDB4MWMsIDB4OGMsIDB4MzUsIDB4MjIsIDB4NDUsIDB4ZjksIDB4MjgsCi0JMHhhMywgMHg1NywgMHg2YywgMHg0OSwgMHg5ZiwgMHg2NSwgMHg4YywgMHhkOSwgMHg0NiwgMHgxOCwgMHg1MywgMHgwYiwKLQkweGI5LCAweGU1LCAweDk2LCAweGMxLCAweDE3LCAweGIxLCAweGQzLCAweDNlLCAweDViLCAweGNmLCAweDM2LCAweGU1LAotCTB4YzYsIDB4ZjEsIDB4ZDYsIDB4NTksIDB4YmIsIDB4MWMsIDB4NjAsIDB4N2UsIDB4NjUsIDB4M2MsIDB4NjcsIDB4OTAsCi0JMHhjZCwgMHg1YywgMHgxMSwgMHgwZSwgMHgzZSwgMHg0NywgMHgzOSwgMHg3NSwgMHg2NiwgMHg0MSwgMHgxZiwgMHhlMSwKLQkweGZjLCAweGEyLCAweDNkLCAweGQ2LCAweGY4LCAweGI4LCAweDA2LCAweDRjLCAweDQxLCAweDRmLCAweGU0LCAweDQxLAotCTB4YzUsIDB4YjYsIDB4YjcsIDB4MzksIDB4ZjgsIDB4ZmUsIDB4ODIsIDB4YWQsIDB4YWUsIDB4OWUsIDB4ZmQsIDB4MGYsCi0JMHhiZSwgMHg4NSwgMHhkZiwgMHhiMiwgMHgzOCwgMHhlZiwgMHg4NCwgMHhmMiwgMHg5YiwgMHhlOCwgMHgzYiwgMHhjZiwKLQkweDE5LCAweDYwLCAweDJjLCAweGMzLCAweGU3LCAweDljLCAweGJjLCAweDNiLCAweGRhLCAweGFiLCAweGQ4LCAweDVmLAotCTB4NTQsIDB4M2UsIDB4YzcsIDB4YmYsIDB4NzEsIDB4OGMsIDB4N2IsIDB4YWEsIDB4MzYsIDB4ZTUsIDB4NjcsIDB4MTksCi0JMHg3YiwgMHgyZSwgMHhmZCwgMHhjZSwgMHg4MCwgMHhhZiwgMHg1ZCwgMHhkOCwgMHgzYywgMHhjNiwgMHhiZCwgMHg4OCwKLQkweDkzLCAweGQ3LCAweDI5LCAweGY4LCAweDNiLCAweGNhLCAweGMzLCAweGRjLCAweDJiLCAweDYxLCAweDVmLCAweDZmLAotCTB4ZWEsIDB4MzgsIDB4MzUsIDB4YzksIDB4MzksIDB4MzUsIDB4ZGUsIDB4NzEsIDB4N2IsIDB4N2EsIDB4NTEsIDB4YzcsCi0JMHg5NywgMHg3OCwgMHgzYSwgMHg3ZCwgMHgwNywgMHhjNSwgMHg5ZCwgMHg0YywgMHg1YSwgMHgxYiwgMHg4YywgMHhjOCwKLQkweGNlLCAweGRlLCAweDU0LCAweGFhLCAweDI4LCAweGJlLCAweDRhLCAweDQ1LCAweDFhLCAweGNmLCAweGE3LCAweGZhLAotCTB4MDcsIDB4MGYsIDB4ODUsIDB4OTAsIDB4YzksIDB4NzYsIDB4ZTMsIDB4MWIsIDB4NjMsIDB4YjYsIDB4NWQsIDB4YjUsCi0JMHhjNiwgMHg4NSwgMHg1NywgMHg0NiwgMHg2YywgMHg3YywgMHgxMCwgMHgwMywgMHg1ZSwgMHgxZSwgMHgwOSwgMHgwZiwKLQkweDllLCAweDAxLCAweDdlLCAweGFmLCAweDhlLCAweDZhLCAweGU0LCAweDU2LCAweGExLCAweGY1LCAweDEwLCAweDM2LAotCTB4MDgsIDB4YmQsIDB4OGIsIDB4OTYsIDB4NjAsIDB4MWUsIDB4ZGEsIDB4ZTksIDB4NWQsIDB4MzQsIDB4ZGYsIDB4NGIsCi0JMHgwNSwgMHhlMCwgMHgyNywgMHgwNSwgMHgyZiwgMHhkZSwgMHgxYywgMHhlMywgMHgzOSwgMHhiZCwgMHgzOCwgMHg3MywKLQkweGI0LCAweGMxLCAweGJmLCAweDkzLCAweGU2LCAweDNhLCAweDQwLCAweGYxLCAweGJkLCAweGZiLCAweDU4LCAweDAyLAotCTB4OWIsIDB4MGYsIDB4MDksIDB4NDQsIDB4MjMsIDB4MDksIDB4NzQsIDB4MWQsIDB4YWIsIDB4YzUsIDB4YTYsIDB4MzEsCi0JMHgwNSwgMHhlZiwgMHhjNSwgMHg2YiwgMHg3MSwgMHhkMywgMHhkMSwgMHg0NSwgMHgzZSwgMHgyYSwgMHg3ZCwgMHgwZCwKLQkweDNlLCAweGU3LCAweGM4LCAweDY3LCAweGM4LCAweDllLCAweGNjLCAweDcyLCAweGNjLCAweGE2LCAweDdjLCAweDkxLAotCTB4ZTUsIDB4MTgsIDB4NjgsIDB4ZGIsIDB4YzEsIDB4ZjYsIDB4NGEsIDB4OWYsIDB4ZTMsIDB4MjksIDB4Y2EsIDB4MWYsCi0JMHg4ZiwgMHhiNiwgMHhlYiwgMHhjMSwgMHhhMCwgMHg2NCwgMHg2MiwgMHhkNSwgMHg0NCwgMHhmOSwgMHhiNiwgMHgzYSwKLQkweGQ4LCAweGNmLCAweGYzLCAweDVlLCAweGMwLCAweGM3LCAweGFkLCAweGI2LCAweGJkLCAweDM5LCAweDFlLCAweDk5LAotCTB4YmYsIDB4ZGIsIDB4YzEsIDB4YjUsIDB4NzEsIDB4ZjIsIDB4YTksIDB4MjYsIDB4M2MsIDB4OWEsIDB4NWQsIDB4ZGMsCi0JMHgyZiwgMHhkMiwgMHhmYiwgMHgyZSwgMHhjYSwgMHhkNiwgMHg5MCwgMHgwYSwgMHhmYiwgMHhhMywgMHg2YSwgMHhkMywKLQkweGZlLCAweGQ4LCAweDZkLCAweDQ2LCAweDgyLCAweGY3LCAweDA5LCAweDNlLCAweDY3LCAweDExLCAweGEyLCAweDFhLAotCTB4YzQsIDB4YjYsIDB4ZGYsIDB4OGEsIDB4ZGIsIDB4NzYsIDB4MjEsIDB4NmUsIDB4NzksIDB4NTYsIDB4YWYsIDB4NTUsCi0JMHg3MSwgMHg2YywgMHgyNSwgMHhmNywgMHg5YywgMHhjMywgMHhjOSwgMHg0NiwgMHhiMiwgMHgyZiwgMHhlZiwgMHg0YSwKLQkweDNkLCAweGI4LCAweDE1LCAweDlhLCAweDY1LCAweDUxLCAweDkwLCAweDBiLCAweDJkLCAweGQ1LCAweGZhLCAweDgwLAotCTB4MjYsIDB4ZmYsIDB4YzEsIDB4OTEsIDB4MDYsIDB4M2MsIDB4M2UsIDB4ZjcsIDB4OWIsIDB4N2MsIDB4ZjQsIDB4ODUsCi0JMHg2MiwgMHg4NCwgMHg4ZCwgMHg4ZiwgMHgwYywgMHhhYywgMHhhZiwgMHg0MywgMHgyNCwgMHg3OSwgMHgyNywgMHhlNSwKLQkweDAyLCAweGM5LCAweGU0LCAweGYzLCAweGEwLCAweDE2LCAweDZlLCAweDhhLCAweGY3LCAweDYzLCAweGM3LCAweDE4LAotCTB4ZWYsIDB4NTEsIDB4YzUsIDB4M2EsIDB4M2UsIDB4MWEsIDB4YjMsIDB4ZmYsIDB4YzYsIDB4NDMsIDB4ZjQsIDB4YWYsCi0JMHg2ZiwgMHg2ZiwgMHg0OSwgMHg3OSwgMHg5ZCwgMHhkZiwgMHgwNSwgMHhlOSwgMHg1NCwgMHgwNywgMHhkNCwgMHhhMywKLQkweDM0LCAweGEzLCAweDk3LCAweDk3LCAweDhiLCAweGU0LCAweDFiLCAweDNlLCAweDQ0LCAweDgyLCAweDhkLCAweDE0LAotCTB4YWIsIDB4ZTYsIDB4YzgsIDB4NzcsIDB4NjcsIDB4NGEsIDB4NWMsIDB4MDcsIDB4YWMsIDB4ZTksIDB4YjAsIDB4MjcsCi0JMHg5NiwgMHg2MSwgMHg3YSwgMHg4ZSwgMHhlNiwgMHhjYSwgMHhlYSwgMHg1ZCwgMHgxZiwgMHgxMCwgMHhjZSwgMHhhYiwKLQkweDMxLCAweGVkLCAweDNhLCAweGFmLCAweDE5LCAweDM5LCAweGRkLCAweDIyLCAweDY0LCAweGNjLCAweGFmLCAweGIxLAotCTB4ZWQsIDB4ZWUsIDB4NzYsIDB4N2QsIDB4YjAsIDB4NTYsIDB4NjAsIDB4ODAsIDB4ZTYsIDB4NGEsIDB4YjQsIDB4Y2EsCi0JMHhiOCwgMHgzMiwgMHg4OCwgMHg0OCwgMHhkNywgMHg1YiwgMHg4OCwgMHhmNCwgMHg5ZCwgMHhhMywgMHgxOCwgMHhmNiwKLQkweDQ0LCAweDg5LCAweGNmLCAweGQ4LCAweDNlLCAweDg0LCAweGJmLCAweDE5LCAweDViLCAweDhhLCAweGU3LCAweDY3LAotCTB4MDYsIDB4MTYsIDB4N2EsIDB4NjIsIDB4ZjAsIDB4NWUsIDB4YmQsIDB4ZDYsIDB4YzQsIDB4ZjEsIDB4YjEsIDB4MTAsCi0JMHhkOSwgMHg0ZiwgMHgxNSwgMHhjNSwgMHg3NSwgMHgwNSwgMHg1MiwgMHgzMywgMHhmNywgMHg0OCwgMHg0MywgMHgxZCwKLQkweGIxLCAweDQ3LCAweDZjLCAweDdiLCAweDc1LCAweDczLCAweGE1LCAweGU2LCAweDU5LCAweDNkLCAweDdiLCAweGY5LAotCTB4ZWYsIDB4MDIsIDB4MTYsIDB4ZmIsIDB4M2QsIDB4NDEsIDB4ZDIsIDB4NWYsIDB4NGIsIDB4NmEsIDB4ODcsIDB4NzgsCi0JMHhkMSwgMHhiNiwgMHg3ZSwgMHg1NywgMHgxMCwgMHhjZiwgMHg5MSwgMHg1YSwgMHg3OCwgMHg5OSwgMHg2ZiwgMHgwNSwKLQkweGJiLCAweDI2LCAweDA4LCAweDk0LCAweDM5LCAweGU3LCAweDU2LCAweGUwLCAweGVkLCAweDhhLCAweGYzLCAweDVlLAotCTB4MzMsIDB4ZWIsIDB4YTgsIDB4ZWMsIDB4ZGQsIDB4MTgsIDB4YTcsIDB4OTgsIDB4MjgsIDB4ZmMsIDB4ODQsIDB4YTcsCi0JMHgyYywgMHg0ZiwgMHgyNywgMHhlNSwgMHhhNywgMHhlYSwgMHgzMSwgMHhmZSwgMHg4ZCwgMHg4MiwgMHgwZiwgMHhmYiwKLQkweDI5LCAweDZlLCAweGJjLCAweDZmLCAweGQ0LCAweGUwLCAweDYwLCAweGJkLCAweDk2LCAweGUwLCAweDdhLCAweGZhLAotCTB4YjEsIDB4MTIsIDB4ZjcsIDB4MjUsIDB4NzcsIDB4ZTIsIDB4MmUsIDB4ZmUsIDB4OGQsIDB4NDcsIDB4ZTksIDB4NWEsCi0JMHhlNywgMHg1YywgMHgxZSwgMHhkZCwgMHgyMywgMHg2YywgMHhjMCwgMHg3NCwgMHgyYywgMHhhZSwgMHhkZiwgMHg4NSwKLQkweGU1LCAweDIzLCAweGFjLCAweGM3LCAweDQwLCAweDQ3LCAweDkwLCAweDY0LCAweGY0LCAweDI4LCAweGQ5LCAweDg1LAotCTB4NjQsIDB4NzYsIDB4NDIsIDB4MTksIDB4YjEsIDB4ZWQsIDB4ZWIsIDB4ZTMsIDB4OTcsIDB4Y2YsIDB4YTEsIDB4MGYsCi0JMHg5YywgMHg5MywgMHhhOSwgMHhiZSwgMHg5MywgMHg3OSwgMHg0ZiwgMHg0YywgMHg0YiwgMHg5YywgMHgxMCwgMHg5NywKLQkweGNmLCAweGY5LCAweDg3LCAweDQ0LCAweDMzLCAweGNmLCAweDViLCAweGM5LCAweDRiLCAweGM3LCAweDI5LCAweDJmLAotCTB4YmQsIDB4M2MsIDB4Y2EsIDB4M2UsIDB4ZDIsIDB4ZTYsIDB4ZjgsIDB4ODgsIDB4NDQsIDB4YjEsIDB4NzYsIDB4NDMsCi0JMHgzYSwgMHg4NCwgMHg3MywgMHgwNiwgMHhmNCwgMHgyYSwgMHhjNCwgMHg4OCwgMHhlZSwgMHg0OCwgMHg0ZiwgMHhlNywKLQkweDAyLCAweGU2LCAweDczLCAweDUzLCAweGZjLCAweDlmLCAweDE5LCAweGU1LCAweDdkLCAweDJhLCAweDgxLCAweDVhLAotCTB4OWQsIDB4NmQsIDB4YzAsIDB4YzksIDB4MDUsIDB4MTQsIDB4ZDMsIDB4MDYsIDB4NTAsIDB4NzcsIDB4MmQsIDB4NzAsCi0JMHg3MSwgMHg4NCwgMHhmNywgMHhjYywgMHg3NCwgMHhlYywgMHgyZiwgMHgwZCwgMHg4YSwgMHhjNiwgMHg5MSwgMHg3ZiwKLQkweGIwLCAweDQzLCAweGQ1LCAweDhiLCAweGZiLCAweDY3LCAweDBmLCAweGYyLCAweGZlLCAweDE5LCAweGQ5LCAweGMwLAotCTB4ODAsIDB4NzMsIDB4NDYsIDB4ZTYsIDB4YWQsIDB4MzQsIDB4OWYsIDB4OTEsIDB4MDksIDB4ODcsIDB4MzYsIDB4OTMsCi0JMHhlZiwgMHg2YywgMHg0MywgMHg4YiwgMHgzMSwgMHg0YiwgMHhkOCwgMHg3OSwgMHg5ZSwgMHhlOCwgMHg2YywgMHgxNiwKLQkweDk1LCAweDNkLCAweGEyLCAweGM4LCAweGMyLCAweDFlLCAweGQ3LCAweGNhLCAweDdjLCAweDk3LCAweGE4LCAweDJkLAotCTB4MzAsIDB4NGQsIDB4NzEsIDB4YTIsIDB4YTksIDB4NTMsIDB4ZDQsIDB4MWMsIDB4ZGIsIDB4MjgsIDB4N2MsIDB4YzcsCi0JMHhiYSwgMHg4NSwgMHg1NCwgMHhlMCwgMHg5OCwgMHgxYywgMHhlYiwgMHhkOCwgMHgzZCwgMHhjYSwgMHhmOSwgMHg2YywKLQkweDhiLCAweDcwLCAweDFkLCAweGVkLCAweDE1LCAweGRlLCAweDQyLCAweDlmLCAweGYwLCAweDFmLCAweGIzLCAweDcwLAotCTB4NmYsIDB4YmMsIDB4MWIsIDB4NjcsIDB4YzYsIDB4ZjgsIDB4MWMsIDB4ZDgsIDB4M2QsIDB4YTIsIDB4NzYsIDB4NjEsCi0JMHg1ZiwgMHhjYiwgMHg1YiwgMHg2OCwgMHhmMiwgMHgxNywgMHg2OCwgMHg3ZCwgMHhjMiwgMHgxMiwgMHgxZCwgMHhlOSwKLQkweDkxLCAweDY1LCAweGZlLCAweDI3LCAweDI2LCAweDAzLCAweGZlLCAweGM3LCAweDI2LCAweGI1LCAweDgxLCAweGJkLAotCTB4YzIsIDB4YjYsIDB4NzcsIDB4YzYsIDB4YTYsIDB4NTksIDB4ODcsIDB4NzYsIDB4NGIsIDB4YWMsIDB4ODIsIDB4MGYsCi0JMHg3NiwgMHg5MSwgMHgzYywgMHhiNiwgMHg1MywgMHg2ZSwgMHg5OSwgMHgzNiwgMHg1YSwgMHgxNiwgMHhiMCwgMHg4OCwKLQkweDk2LCAweGUyLCAweGRmLCAweDhiLCAweGQxLCAweGE3LCAweDg3LCAweDczLCAweDFiLCAweGVmLCAweDA5LCAweGJhLAotCTB4ZGEsIDB4NDEsIDB4NzEsIDB4ZjcsIDB4MzMsIDB4NWUsIDB4NmIsIDB4NDcsIDB4ZjgsIDB4N2MsIDB4ZDcsIDB4MDAsCi0JMHhmYywgMHg1ZiwgMHhiMiwgMHgyNywgMHg3NiwgMHhlNiwgMHhiMywgMHgzZCwgMHhiMSwgMHhjNCwgMHg2MywgMHg0MiwKLQkweDJiLCAweGNmLCAweDExLCAweGJmLCAweGQ1LCAweGYyLCAweGU3LCAweGY2LCAweGMzLCAweDE2LCAweGY2LCAweGMyLAotCTB4YmEsIDB4ODQsIDB4YWYsIDB4YzAsIDB4ZjUsIDB4NzksIDB4YmMsIDB4ZTMsIDB4ZjUsIDB4OTEsIDB4NGUsIDB4ZTEsCi0JMHgzZCwgMHgzNiwgMHg0NiwgMHhmOSwgMHg3MSwgMHgyMywgMHhmMSwgMHhjYywgMHhlNywgMHhhZSwgMHhiYSwgMHg4NSwKLQkweGJmLCAweGIwLCAweDQ1LCAweGY4LCAweDg4LCAweGNmLCAweDFhLCAweGUyLCAweDEzLCAweGM3LCAweDNjLCAweGMyLAotCTB4NGIsIDB4M2MsIDB4N2EsIDB4ODgsIDB4NDcsIDB4ZWYsIDB4MDIsIDB4OGYsIDB4OWUsIDB4NDIsIDB4ZDAsIDB4OWYsCi0JMHg0ZSwgMHgzNywgMHhmOCwgMHgxZiwgMHg5ZSwgMHg1NCwgMHhmZCwgMHg3YiwgMHgyNywgMHg2ZCwgMHhmYiwgMHgzZCwKLQkweGUzLCAweDY3LCAweDBlLCAweDVmLCAweGFmLCAweDFhLCAweDVmLCAweGU0LCAweGViLCAweDNhLCAweGUyLCAweGFiLAotCTB4YjIsIDB4OGYsIDB4NDksIDB4M2EsIDB4NGMsIDB4YjEsIDB4MGUsIDB4ZjksIDB4MGMsIDB4YzQsIDB4MjIsIDB4NWYsCi0JMHgwNywgMHhkMiwgMHhiYywgMHg4ZiwgMHhjMSwgMHg3YiwgMHg3ZSwgMHg4MywgMHg2MiwgMHgzNSwgMHhmMSwgMHg1NSwKLQkweDI2LCAweGJlLCAweGFlLCAweGY5LCAweDEyLCAweGJlLCAweDNlLCAweGJjLCAweDhjLCAweGFmLCAweDU3LCAweGZmLAotCTB4NTEsIDB4YmUsIDB4M2MsIDB4NjIsIDB4ZDUsIDB4MTgsIDB4YzcsIDB4YTEsIDB4ZmIsIDB4M2IsIDB4OTQsIDB4MzEsCi0JMHg5YiwgMHhiMCwgMHhhMywgMHg4YywgMHhjNywgMHg2NywgMHg4MCwgMHg2MiwgMHg3NiwgMHgwOCwgMHgwYSwgMHhjNSwKLQkweDliLCAweDkzLCAweGYxLCAweDQ4LCAweGU4LCAweDE1LCAweGFhLCAweDI3LCAweDY3LCAweDRiLCAweDVlLCAweGIxLAotCTB4ZDIsIDB4ZDksIDB4Y2YsIDB4YzQsIDB4NmEsIDB4ODUsIDB4NjgsIDB4OWEsIDB4NzMsIDB4N2UsIDB4OWYsIDB4MDUsCi0JMHhhMywgMHg0ZSwgMHg2NywgMHg1ZCwgMHhlYSwgMHhhNywgMHhiNywgMHgyMiwgMHg1MiwgMHg4ZSwgMHhjOCwgMHhkZCwKLQkweDIyLCAweDUxLCAweGUwLCAweGZkLCAweGNiLCAweDVlLCAweDcxLCAweDhkLCAweGIzLCAweDc3LCAweGQ5LCAweDI1LAotCTB4YWUsIDB4MmUsIDB4NzQsIDB4OGEsIDB4NTYsIDB4YjIsIDB4OGIsIDB4OTYsIDB4NjMsIDB4N2MsIDB4OTYsIDB4NmEsCi0JMHg4YiwgMHg2OCwgMHg1OSwgMHg5MCwgMHhjNywgMHgyYSwgMHg5MiwgMHhjNywgMHhjOCwgMHhlNywgMHhlNCwgMHhiMSwKLQkweGM0LCAweGNmLCAweGYyLCAweGY4LCAweDkxLCAweDcxLCAweGUxLCAweGIyLCAweDFlLCAweDFhLCAweGQ3LCAweDU1LAotCTB4OTQsIDB4MGQsIDB4YTksIDB4NzYsIDB4YWEsIDB4NWIsIDB4YTgsIDB4OWQsIDB4ZGUsIDB4OGUsIDB4ZjEsIDB4MTksCi0JMHgxOSwgMHhjYiwgMHhhZSwgMHhkNSwgMHgxMSwgMHg3MiwgMHg5OSwgMHg1YSwgMHhkZiwgMHg0OSwgMHhhMSwgMHhhNywKLQkweGVlLCAweDExLCAweGM5LCAweGNkLCAweDNlLCAweGFhLCAweDdmLCAweDc2LCAweGM0LCAweDIyLCAweGM5LCAweDU1LAotCTB4MjIsIDB4OTIsIDB4NzAsIDB4MDksIDB4Y2UsIDB4MmIsIDB4ODYsIDB4NTIsIDB4NWQsIDB4YjQsIDB4YjAsIDB4OTcsCi0JMHhlMiwgMHhkYiwgMHg0YiwgMHhhMywgMHgxMiwgMHg2MSwgMHgwNywgMHhmZSwgMHhjZCwgMHg5NiwgMHgwYiwgMHhkNywKLQkweGFiLCAweDNlLCAweDFjLCAweDIxLCAweGRjLCAweGYxLCAweDY4LCAweGI2LCAweDFmLCAweDQ3LCAweGYyLCAweGRiLAotCTB4ZjAsIDB4NjgsIDB4ZmUsIDB4ZDcsIDB4N2UsIDB4OWYsIDB4YTIsIDB4NzgsIDB4Y2QsIDB4OWUsIDB4NmIsIDB4MmIsCi0JMHhmYiwgMHhmOCwgMHhkMSwgMHhjNCwgMHg1NSwgMHgxMSwgMHg5NiwgMHhjZCwgMHg0ZiwgMHg1YiwgMHg5NCwgMHgwOCwKLQkweGQ3LCAweGJhLCAweDg5LCAweGViLCAweDdlLCAweGFlLCAweGIzLCAweDJmLCAweGE2LCAweGRiLCAweDRmLCAweDM5LAotCTB4NTgsIDB4ZTQsIDB4ZWQsIDB4YjYsIDB4NjMsIDB4Y2UsIDB4ZjksIDB4YTIsIDB4NWYsIDB4YWUsIDB4ZGUsIDB4ZWQsCi0JMHhmYywgMHg3ZSwgMHgzMiwgMHhiOSwgMHhmNiwgMHg3NiwgMHg5ZCwgMHhmZCwgMHhlMSwgMHhhNywgMHg2YiwgMHgzNiwKLQkweDM4LCAweGY5LCAweGQ1LCAweDVjLCAweDU3LCAweGY5LCAweDZkLCAweDQ5LCAweDYyLCAweDVkLCAweGE1LCAweDU3LAotCTB4MTMsIDB4NWYsIDB4MTcsIDB4NzUsIDB4YWUsIDB4YzksIDB4NzUsIDB4OTUsIDB4N2QsIDB4ZTIsIDB4OWUsIDB4NzUsCi0JMHhjZCwgMHhjZSwgMHhiNSwgMHg2YiwgMHg1ZCwgMHhjNSwgMHhhNywgMHgzYSwgMHhkNywgMHhlOSwgMHhjZSwgMHhiNSwKLQkweDc3LCAweDVkLCAweDI1LCAweDJmLCAweDc3LCAweGFmLCAweDViLCAweDcxLCAweGU5LCAweDM3LCAweDI5LCAweGZjLAotCTB4ZjcsIDB4N2YsIDB4MDAsIDB4MmYsIDB4YzEsIDB4NjcsIDB4OGEsIDB4NTQsIDB4M2EsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwkweGM1LCAweDdiLCAweDdiLCAweDc0LCAweDFjLCAweDU1LCAweDlhLCAweGRmLCAweGVmLCAweDU2LCAweDNmLCAweDU0LAorCTB4ZGQsIDB4NmEsIDB4YjUsIDB4NGEsIDB4NzIsIDB4ZGIsIDB4NmUsIDB4ZWQsIDB4NjgsIDB4YzYsIDB4NWQsIDB4ZWUsCisJMHg2YSwgMHhiOSwgMHhiMSwgMHg4NCwgMHg1ZCwgMHgyZCwgMHhiNSwgMHhlYywgMHg2NiwgMHg1ZCwgMHhiMSwgMHg3YiwKKwkweDhjLCAweGIwLCAweDY1LCAweDEwLCAweDNiLCAweGMyLCAweGViLCAweDlkLCAweDg4LCAweDA5LCAweDI3LCAweGY0LAorCTB4MTgsIDB4MTksIDB4NjQsIDB4NjMsIDB4NDAsIDB4MzAsIDB4NjQsIDB4YTMsIDB4ZDksIDB4MjUsIDB4ZWIsIDB4MWEsCisJMHhmOSwgMHg4MSwgMHgxZiwgMHhhZCwgMHhlZSwgMHhkNiwgMHhjMywgMHhjOCwgMHhlYywgMHhkOSwgMHgxMywgMHg2NCwKKwkweDQ5LCAweGI2LCAweGNjLCAweGQwLCAweDBmLCAweDMzLCAweGMwLCAweGNjLCAweDMwLCAweDI3LCAweDEzLCAweDc3LAorCTB4OGMsIDB4MDEsIDB4MDMsIDB4NjMsIDB4OTgsIDB4ZGQsIDB4NmMsIDB4OTIsIDB4OTksIDB4M2QsIDB4NDksIDB4ZDYsCisJMHgwNywgMHhmMywgMHhiMCwgMHhjMSwgMHg2MCwgMHgzMiwgMHg0MywgMHgxMiwgMHhiMSwgMHhjYiwgMHg0YywgMHhlNSwKKwkweGZiLCAweGFhLCAweDI1LCAweDYzLCAweDU4LCAweGIyLCAweDliLCAweDZjLCAweGZlLCAweDg4LCAweGNlLCAweGQxLAorCTB4ZTksIDB4ZWUsIDB4YWEsIDB4NWIsIDB4ZjcsIDB4N2UsIDB4ZWYsIDB4ZWYsIDB4ZjcsIDB4N2QsIDB4ZjcsIDB4NTYsCisJMHgwNCwgMHhmMCwgMHg2MiwgMHhlZSwgMHhhZiwgMHg4NiwgMHhmZSwgMHhlMywgMHhmZCwgMHgwMywgMHgwZiwgMHhiNywKKwkweGFlLCAweDg4LCAweGFmLCAweGEwLCAweGFmLCAweDZkLCAweDU4LCAweGVjLCAweDc0LCAweGYyLCAweGNkLCAweDU1LAorCTB4MDIsIDB4NDgsIDB4YmQsIDB4ODcsIDB4N2YsIDB4ZDQsIDB4ZGYsIDB4NTcsIDB4ZmYsIDB4NzEsIDB4OGYsIDB4YzEsCisJMHgwMSwgMHgyOCwgMHhmMywgMHgzNCwgMHhmMSwgMHgzZiwgMHg2NCwgMHhjOSwgMHgzMCwgMHhkNywgMHhhYywgMHhkNywKKwkweDIwLCAweDNiLCAweDhjLCAweGM0LCAweGRhLCAweGJiLCAweDM0LCAweDIwLCAweDk5LCAweDZmLCAweDBlLCAweGRkLAorCTB4ODgsIDB4ZGYsIDB4NTgsIDB4NjYsIDB4YzAsIDB4MDksIDB4YmUsIDB4ZmUsIDB4NTUsIDB4ZTMsIDB4ZDMsIDB4NWQsCisJMHgzZiwgMHg1ZCwgMHhhZCwgMHg3ZSwgMHgzNCwgMHhlMSwgMHg4MCwgMHhhYywgMHgxOCwgMHg2MywgMHg1MCwgMHg5YSwKKwkweDIwLCAweDM3LCAweGQyLCAweDMzLCAweDdmLCAweGI2LCAweGVjLCAweDc5LCAweDI3LCAweGZjLCAweGYzLCAweDczLAorCTB4YzEsIDB4NzQsIDB4MTksIDB4M2EsIDB4NzYsIDB4NjcsIDB4ZmIsIDB4MzEsIDB4MTMsIDB4MDcsIDB4MmUsIDB4YTYsCisJMHgyMywgMHhmYSwgMHg2ZSwgMHgyMCwgMHgyNywgMHgxOSwgMHg5MSwgMHhkMCwgMHg2OSwgMHg4NCwgMHgzMCwgMHg5ZCwKKwkweDg3LCAweDU5LCAweDY1LCAweDY4LCAweGQ4LCAweDVmLCAweDBhLCAweGUxLCAweDUyLCAweGZhLCAweGI3LCAweDU2LAorCTB4YzgsIDB4ZDUsIDB4OGYsIDB4YjcsIDB4ZTIsIDB4OTAsIDB4ODMsIDB4YzYsIDB4MjMsIDB4MDgsIDB4NjYsIDB4MjEsCisJMHhkNywgMHgxOCwgMHgwMywgMHgyOCwgMHgwYywgMHgwMSwgMHg3YiwgMHhkMywgMHg2YSwgMHgzZiwgMHhhMCwgMHhmNiwKKwkweDE0LCAweDQ1LCAweGY4LCAweGVjLCAweDA5LCAweGE4LCAweGRkLCAweDBkLCAweDhlLCAweGU2LCAweGQ0LCAweGVkLAorCTB4NDIsIDB4NGQsIDB4ZWUsIDB4MTQsIDB4OTAsIDB4MDUsIDB4OGQsIDB4NWQsIDB4OWUsIDB4ZTcsIDB4Y2YsIDB4MDEsCisJMHg0NCwgMHhmMywgMHgzMiwgMHhjZSwgMHgzYiwgMHg3OCwgMHg1OSwgMHg4MywgMHhlNCwgMHgyYywgMHhlMCwgMHhkNCwKKwkweDc0LCAweGVjLCAweGNkLCAweGMyLCAweDc0LCAweDFhLCAweDAyLCAweGJiLCAweGUzLCAweDExLCAweDY1LCAweDBhLAorCTB4N2MsIDB4M2YsIDB4ODQsIDB4NDEsIDB4N2IsIDB4OWMsIDB4NGEsIDB4MWMsIDB4NWIsIDB4ZDYsIDB4MWUsIDB4ZGQsCisJMHhiMiwgMHg4ZSwgMHhlOSwgMHg1NSwgMHgzMCwgMHgxNSwgMHgzNSwgMHgwOCwgMHgwOCwgMHgwYywgMHhlYSwgMHgxMiwKKwkweDkyLCAweGNhLCAweGZhLCAweDkwLCAweDEzLCAweDZhLCAweDcwLCAweDFiLCAweGZlLCAweDk2LCAweGY4LCAweDRkLAorCTB4NDYsIDB4NWQsIDB4YTgsIDB4OGMsIDB4NGYsIDB4YTEsIDB4MGEsIDB4NjUsIDB4YTUsIDB4MjIsIDB4YjEsIDB4YzksCisJMHhiNCwgMHg2NSwgMHhiZCwgMHhhNCwgMHgzOSwgMHg3MSwgMHg4YywgMHg2NCwgMHgzMywgMHg5OCwgMHhmZiwgMHg1YiwKKwkweGFiLCAweDRjLCAweDcyLCAweGQ5LCAweGEzLCAweGNkLCAweGFmLCAweDJmLCAweDYzLCAweDQyLCAweGIxLCAweGFjLAorCTB4MjksIDB4YmEsIDB4YjcsIDB4MmYsIDB4M2YsIDB4MmYsIDB4NjMsIDB4Y2IsIDB4OTIsIDB4MzQsIDB4Y2IsIDB4YmEsCisJMHg0YiwgMHhmYiwgMHgxYiwgMHg2YiwgMHhlYiwgMHhlNywgMHhjNiwgMHhjNiwgMHhmMCwgMHhmZCwgMHg5YywgMHg4MiwKKwkweGE3LCAweGIyLCAweDQ5LCAweGU0LCAweGQzLCAweDE2LCAweDFjLCAweDg2LCAweDEzLCAweDdkLCAweDQzLCAweDIxLAorCTB4ZWMsIDB4MmMsIDB4NzQsIDB4YTAsIDB4OTAsIDB4NTYsIDB4NTMsIDB4ZTcsIDB4ZTksIDB4YjksIDB4YWQsIDB4NzEsCisJMHgwZCwgMHhmNywgMHgxNSwgMHgzYSwgMHgzMSwgMHg5MywgMHg4NiwgMHhlNSwgMHgzMSwgMHhiNCwgMHhiMiwgMHg0NywKKwkweDQ0LCAweDcxLCAweDRmLCAweGExLCAweDBiLCAweGM1LCAweGI0LCAweDc2LCAweDc2LCAweDUwLCAweDQ0LCAweDA2LAorCTB4MWEsIDB4MWMsIDB4NGUsIDB4M2MsIDB4NTAsIDB4NjgsIDB4YzEsIDB4ZmQsIDB4ODUsIDB4MDQsIDB4M2QsIDB4NjMsCisJMHhlMSwgMHhlNiwgMHg1OCwgMHgyMywgMHg4ZCwgMHg2ZiwgMHhjNSwgMHg5MywgMHg2MywgMHg5NiwgMHgxNSwgMHg4ZCwKKwkweDI5LCAweGU4LCAweDJiLCAweGU4LCAweDk4LCAweGM5LCAweDQ5LCAweDQ4LCAweDFkLCAweDczLCAweDIyLCAweDc1LAorCTB4MTQsIDB4YjgsIDB4ZTcsIDB4NjgsIDB4MmIsIDB4YTYsIDB4NzIsIDB4MTYsIDB4YjYsIDB4ZWEsIDB4ODMsIDB4MGQsCisJMHgxMiwgMHg1YywgMHg0OCwgMHgyOSwgMHgwMiwgMHgyZSwgMHhjZCwgMHg4ZiwgMHg2ZCwgMHg0YSwgMHg4NSwgMHhmNiwKKwkweGYzLCAweDBlLCAweDgxLCAweDFkLCAweDQ3LCAweGEzLCAweGY4LCAweDQ1LCAweGRhLCAweGM0LCAweGNkLCAweGVkLAorCTB4NDEsIDB4MGMsIDB4MTQsIDB4MDIsIDB4NzgsIDB4MjMsIDB4MWQsIDB4YTAsIDB4MzUsIDB4NzQsIDB4YmMsIDB4OWUsCisJMHg5NiwgMHg2OSwgMHg5ZCwgMHgxNiwgMHg5YywgMHg0OSwgMHhmMywgMHgxOCwgMHgxZSwgMHhlYiwgMHg0MywgMHg2ZiwKKwkweGExLCAweDExLCAweGU3LCAweGQyLCAweDQxLCAweDVhLCAweDMzLCAweDgwLCAweDU3LCAweDY4LCAweGRjLCAweGY2LAorCTB4ODIsIDB4ODYsIDB4YjMsIDB4MzQsIDB4YWUsIDB4YWYsIDB4MTAsIDB4YzIsIDB4Y2IsIDB4NjksIDB4MWYsIDB4ZDEsCisJMHgxYSwgMHhjMCwgMHhlOSwgMHg3NCwgMHgzZiwgMHg3NiwgMHhhNywgMHg5YiwgMHhjZiwgMHhkZSwgMHg0OCwgMHgzMiwKKwkweDBjLCAweDJkLCAweGUwLCAweDc1LCAweGY4LCAweGRhLCAweDViLCAweDU2LCAweDU3LCAweGMwLCAweDM2LCAweDEzLAorCTB4NWEsIDB4NjcsIDB4N2UsIDB4ZGQsIDB4N2UsIDB4MGMsIDB4YTYsIDB4Y2YsIDB4Y2MsIDB4ZjksIDB4ODksIDB4OGUsCisJMHgwMywgMHhiOSwgMHg1OSwgMHhlYiwgMHhhNywgMHhjYiwgMHgxYSwgMHg3MSwgMHgyMiwgMHgwYiwgMHgzYywgMHgzOSwKKwkweDA1LCAweDRjLCAweDY1LCAweDRkLCAweGFiLCAweGM2LCAweGIwLCAweGFjLCAweGM5LCAweGY2LCAweDE2LCAweDkyLAorCTB4OTcsIDB4ZDYsIDB4YjMsIDB4OTUsIDB4NDYsIDB4M2QsIDB4NTUsIDB4NzIsIDB4MDIsIDB4NDcsIDB4ZDUsIDB4OWUsCisJMHgzMiwgMHgyNCwgMHg0YywgMHhjYywgMHgzOCwgMHhlMSwgMHgxZSwgMHg1MiwgMHgzYiwgMHgyNywgMHhhMCwgMHg5ZSwKKwkweGJkLCAweDg3LCAweDNjLCAweGU5LCAweDU4LCAweDU2LCAweGVkLCAweDM2LCAweGIxLCAweGNiLCAweDBhLCAweDFhLAorCTB4NGQsIDB4YTEsIDB4MTYsIDB4ODcsIDB4MDUsIDB4M2YsIDB4ZDksIDB4NDIsIDB4YmEsIDB4YzUsIDB4YjIsIDB4NmEsCisJMHg1NywgMHg1YiwgMHhkNiwgMHhiOSwgMHg3NiwgMHg1OCwgMHg5MiwgMHhhMSwgMHg5ZCwgMHgyZCwgMHg0MSwgMHgyYiwKKwkweDdmLCAweDAwLCAweDZkLCAweGUwLCAweDM0LCAweGNhLCAweDVmLCAweGY1LCAweDIxLCAweGQyLCAweDE3LCAweDc2LAorCTB4NDQsIDB4ZmEsIDB4NjcsIDB4ZTksIDB4ZDksIDB4OWEsIDB4MDIsIDB4OTksIDB4MzIsIDB4ZjEsIDB4YTIsIDB4OTEsCisJMHgwZCwgMHgxNiwgMHg0YSwgMHgzMiwgMHg5YywgMHhjNCwgMHg0ZiwgMHhjYiwgMHg5MCwgMHg2NSwgMHgzOSwgMHgzNSwKKwkweDFmLCAweDdjLCAweDI0LCAweGRmLCAweDhkLCAweDg3LCAweDJkLCAweGViLCAweDFkLCAweDVkLCAweDgxLCAweDliLAorCTB4NzQsIDB4NzMsIDB4ZDMsIDB4YjAsIDB4ODUsIDB4NDksIDB4ZmQsIDB4MzQsIDB4YzksIDB4NTMsIDB4MjAsIDB4ZDUsCisJMHgxZCwgMHhhNywgMHg2NywgMHgwMiwgMHgzNCwgMHgzZSwgMHg4MSwgMHg4ZCwgMHg0MywgMHg0MSwgMHg3YywgMHgzZiwKKwkweDJiLCAweGUzLCAweGE3LCAweGNiLCAweGEyLCAweGE4LCAweGE2LCAweGI5LCAweGJjLCAweDI0LCAweGFiLCAweDJhLAorCTB4OTIsIDB4MWYsIDB4MGEsIDB4NjQsIDB4NmUsIDB4ODUsIDB4OGEsIDB4M2QsIDB4YTIsIDB4NzAsIDB4OWUsIDB4NzgsCisJMHgwYywgMHhlMiwgMHgwNywgMHhhNSwgMHgwMCwgMHg5ZSwgMHgyZSwgMHgyOSwgMHgzOCwgMHg1OSwgMHg2YSwgMHhjNCwKKwkweGE5LCAweDkyLCAweDhlLCAweDZjLCAweDRlLCAweGRkLCAweDVmLCAweDg2LCAweDg1LCAweDFhLCAweDMyLCAweGU3LAorCTB4MzcsIDB4MjYsIDB4NjIsIDB4YzgsIDB4ZTQsIDB4MmMsIDB4MmIsIDB4NGYsIDB4MzQsIDB4N2IsIDB4ODksIDB4ODcsCisJMHhkNywgMHgyNywgMHhiZSwgMHg4NiwgMHhlMywgMHg2MywgMHg0ZSwgMHg4NCwgMHgyNiwgMHgwMywgMHg3OCwgMHgyYSwKKwkweGVkLCAweGM0LCAweDc1LCAweDE5LCAweGQ1LCAweDljLCAweDgwLCAweDE2LCAweGRkLCAweDI5LCAweGI0LCAweGU0LAorCTB4NzIsIDB4YTEsIDB4ZTYsIDB4NGMsIDB4NDQsIDB4NDIsIDB4MmUsIDB4MjEsIDB4YTEsIDB4ZTksIDB4YjgsIDB4MTMsCisJMHg1YSwgMHgzMSwgMHgwNCwgMHg1NywgMHg5MywgMHgwYywgMHhhZCwgMHg4OSwgMHhkYywgMHhjOCwgMHgyZiwgMHhjMSwKKwkweDRkLCAweDdlLCAweGIxLCAweDcxLCAweDI0LCAweDRhLCAweGQ3LCAweDAyLCAweDc0LCAweDBkLCAweDVmLCAweGFiLAorCTB4ODIsIDB4NjMsIDB4OTEsIDB4MDMsIDB4MjQsIDB4MzcsIDB4Y2QsIDB4ODEsIDB4YTQsIDB4ZDMsIDB4YjIsIDB4MWMsCisJMHg1YSwgMHgyYiwgMHg3YSwgMHgxZSwgMHhhMywgMHhjZiwgMHgzNiwgMHgxZSwgMHhhZiwgMHgyMCwgMHg1YywgMHgyNCwKKwkweDE5LCAweDM0LCAweDExLCAweDRkLCAweDU5LCAweGEyLCAweDMxLCAweDRiLCAweDM0LCAweDY2LCAweDg5LCAweGM2LAorCTB4YWMsIDB4ODMsIDB4NmMsIDB4NDYsIDB4ZDUsIDB4ODEsIDB4M2YsIDB4MjIsIDB4NWQsIDB4ODUsIDB4ODgsIDB4YmYsCisJMHg1ZiwgMHhkOCwgMHg3YSwgMHg3YSwgMHhiYSwgMHgxNCwgMHgyNCwgMHhmYSwgMHg0MywgMHgzNiwgMHhmZCwgMHg0ZiwKKwkweGU2LCAweDA0LCAweDI0LCAweDRkLCAweGVkLCAweDNlLCAweDhmLCAweDc1LCAweDA4LCAweGM3LCAweGQ0LCAweGU0LAorCTB4MDQsIDB4OTIsIDB4ZjQsIDB4OWMsIDB4YmEsIDB4ZGYsIDB4ODQsIDB4ZGEsIDB4NTksIDB4MjYsIDB4ZmQsIDB4NmYsCisJMHg1NSwgMHgxMiwgMHg5OCwgMHhjOSwgMHhiYSwgMHg1MCwgMHhhZCwgMHhhOSwgMHgyMSwgMHhkMiwgMHg1NywgMHhiNCwKKwkweDhjLCAweDA1LCAweGI4LCAweDU3LCAweGExLCAweDM5LCAweDI1LCAweGI3LCAweGE4LCAweGM0LCAweDkwLCAweDQ3LAorCTB4MTAsIDB4MTksIDB4OTEsIDB4MzAsIDB4YWQsIDB4M2IsIDB4YzgsIDB4M2YsIDB4NzUsIDB4MzgsIDB4OWEsIDB4NjgsCisJMHhiOSwgMHg2MiwgMHg5YywgMHgzZSwgMHg2OSwgMHhmZSwgMHgyYywgMHhhZCwgMHg0NSwgMHhmNCwgMHhkMCwgMHg3YywKKwkweGU0LCAweDk3LCAweDJjLCAweGM3LCAweDI4LCAweGQxLCAweGIwLCAweGQ3LCAweGE2LCAweGY3LCAweDY0LCAweGE5LAorCTB4NGIsIDB4NTQsIDB4ZWMsIDB4YzcsIDB4MjAsIDB4N2IsIDB4NTEsIDB4NDMsIDB4MTAsIDB4NmEsIDB4MzQsIDB4MjQsCisJMHg1NCwgMHgzZCwgMHgyOSwgMHgxNCwgMHg0YywgMHg5NSwgMHg3ZSwgMHg0NiwgMHg2MywgMHgwMiwgMHhkNywgMHg4YywKKwkweGU5LCAweGM2LCAweDYwLCAweDU2LCAweGUwLCAweDQ2LCAweGNkLCAweGMyLCAweDdhLCAweGJkLCAweDFiLCAweGJiLAorCTB4NGIsIDB4ZjMsIDB4N2UsIDB4YzksIDB4YjEsIDB4NGIsIDB4ZjEsIDB4NGYsIDB4YTUsIDB4M2IsIDB4YjAsIDB4MjcsCisJMHgxYiwgMHhjMiwgMHhlZSwgMHg3YywgMHhkMCwgMHgzZiwgMHg5OSwgMHhlNiwgMHg3YiwgMHgxYSwgMHhmOSwgMHgzYiwKKwkweGRmLCAweDBiLCAweDVjLCAweDczLCAweGFmLCAweGYxLCAweDlhLCAweDdiLCAweDA5LCAweDBjLCAweDhlLCAweDdlLAorCTB4ODUsIDB4NjIsIDB4NDgsIDB4MmQsIDB4NzYsIDB4NmIsIDB4MWYsIDB4OTEsIDB4YWQsIDB4NjgsIDB4ODksIDB4NWUsCisJMHgzNCwgMHhlMCwgMHhiYywgMHhkMiwgMHg4MiwgMHg0MywgMHhlMywgMHg1ZCwgMHhkOCwgMHgzMywgMHhiZSwgMHgwMiwKKwkweDA3LCAweDQ2LCAweDFiLCAweDUzLCAweDVlLCAweDYzLCAweDg4LCAweGQ2LCAweDBmLCAweDI3LCAweDdiLCAweDg1LAorCTB4ZGEsIDB4ZWYsIDB4MTAsIDB4ZTEsIDB4NjgsIDB4MmYsIDB4ZDksIDB4NmUsIDB4NTMsIDB4OWQsIDB4NjUsIDB4OWQsCisJMHg4ZSwgMHg5MSwgMHg2ZCwgMHhlYiwgMHhjZCwgMHhmYSwgMHg0NiwgMHgxMiwgMHg0MCwgMHhiOSwgMHg1YiwgMHhlZCwKKwkweDdjLCAweDBiLCAweDNlLCAweGRjLCAweDRhLCAweDM2LCAweDM3LCAweDE1LCAweDQzLCAweGFmLCAweDAzLCAweDhlLAorCTB4MTYsIDB4MWYsIDB4N2UsIDB4NmQsIDB4MWQsIDB4NzUsIDB4YjIsIDB4ZGMsIDB4YWQsIDB4NWQsIDB4NzcsIDB4ZTksCisJMHg3YiwgMHgwNSwgMHhjNywgMHgzOSwgMHhmNywgMHhkNSwgMHg1OCwgMHhjMiwgMHhmMywgMHhmMywgMHgzMywgMHg5NiwKKwkweDE1LCAweGE2LCAweDc5LCAweGZhLCAweDYyLCAweGNkLCAweDg5LCAweDNlLCAweGNjLCAweDVhLCAweGU3LCAweGI3LAorCTB4NzQsIDB4NjEsIDB4ZjcsIDB4Y2MsIDB4MGEsIDB4MWMsIDB4MWMsIDB4NzUsIDB4MjEsIDB4NTksIDB4MjcsIDB4NTAsCisJMHhhYiwgMHg4NSwgMHhjYiwgMHhmNywgMHg2MiwgMHgwNSwgMHhjYywgMHgyOSwgMHg3ZSwgMHhhZSwgMHgwYiwgMHg0NywKKwkweDY2LCAweDJhLCAweGJmLCAweGIzLCAweDU3LCAweDdmLCAweGNmLCAweGNmLCAweDc3LCAweDkxLCAweDc0LCAweGNhLAorCTB4ZjIsIDB4ZTQsIDB4MzgsIDB4NDksIDB4MmEsIDB4MzAsIDB4OWEsIDB4NzEsIDB4NjIsIDB4MzQsIDB4NDAsIDB4YmEsCisJMHhlZCwgMHgxMCwgMHhjZSwgMHhlMywgMHg4YiwgMHhmYywgMHhkZSwgMHhjNywgMHgyYywgMHhiYywgMHhhNCwgMHg5MywKKwkweDllLCAweGIzLCAweDFiLCAweDg0LCAweGY3LCAweDc4LCAweGE3LCAweDcwLCAweDE1LCAweDM3LCAweDBiLCAweGY3LAorCTB4ZTQsIDB4YjcsIDB4ODQsIDB4N2MsIDB4M2MsIDB4MjUsIDB4YWEsIDB4OGEsIDB4MmQsIDB4MjQsIDB4ZmIsIDB4MWUsCisJMHhlMSwgMHgzOSwgMHhhZSwgMHg4NiwgMHg0MiwgMHhlMiwgMHhiYiwgMHhhNCwgMHhjZiwgMHgyZCwgMHhjMiwgMHg1MSwKKwkweDg0LCAweDIyLCAweDE5LCAweDAzLCAweDQyLCAweDJhLCAweGQyLCAweDFjLCAweGI2LCAweDBkLCAweGYxLCAweDNhLAorCTB4NDEsIDB4ZDIsIDB4MWIsIDB4NGMsIDB4ODcsIDB4ZDEsIDB4OGYsIDB4YWQsIDB4OTQsIDB4MjMsIDB4NmUsIDB4NDksCisJMHgxYiwgMHgzOCwgMHg5OCwgMHhhZCwgMHhhMiwgMHhmOCwgMHhjOCwgMHg3ZSwgMHgzZiwgMHg0YiwgMHhlYiwgMHg2YSwKKwkweDM4LCAweDU0LCAweDgyLCAweGU5LCAweDMxLCAweDBlLCAweDYyLCAweDA1LCAweGY5LCAweGRiLCAweGI5LCAweDE4LAorCTB4ZmIsIDB4MjIsIDB4OTAsIDB4Y2YsIDB4ODYsIDB4OTMsIDB4MDcsIDB4ODUsIDB4NjUsIDB4NTUsIDB4NDUsIDB4YWMsCisJMHgyNSwgMHhlZiwgMHhlOCwgMHhjZCwgMHhkMSwgMHgzMywgMHhmOCwgMHg5ZiwgMHhkNiwgMHg0NCwgMHhhMCwgMHgxZiwKKwkweGQxLCAweDc2LCAweGM4LCAweDU1LCAweGM2LCAweDFlLCAweGJjLCAweDliLCAweDg2LCAweGVjLCAweDM2LCAweDRjLAorCTB4YmMsIDB4OTQsIDB4MDYsIDB4N2MsIDB4NDMsIDB4ODMsIDB4OGEsIDB4MTcsIDB4NjQsIDB4MDcsIDB4MDgsIDB4MDcsCisJMHgwZiwgMHgwOSwgMHhiNSwgMHhmYiwgMHgwMiwgMHhhNSwgMHhiMywgMHg0NCwgMHhiYiwgMHgzOSwgMHgyMCwgMHg4MSwKKwkweGUyLCAweDkxLCAweDUwLCAweDdiLCAweGNlLCAweDkwLCAweDNkLCAweDdlLCAweDU3LCAweGE4LCAweGNhLCAweGFjLAorCTB4NjAsIDB4M2YsIDB4ZTUsIDB4NWMsIDB4YjIsIDB4NjcsIDB4MmUsIDB4YTcsIDB4OTgsIDB4YjgsIDB4ZWUsIDB4OWEsCisJMHg5YywgMHgzMiwgMHg0OCwgMHg3NCwgMHhlZCwgMHgyMywgMHhiYSwgMHg1ZSwgMHhkNCwgMHhkNSwgMHhlMCwgMHgyNCwKKwkweGFjLCAweDI1LCAweGJkLCAweDNhLCAweGRmLCAweDMzLCAweGIwLCAweGE3LCAweDY0LCAweDg1LCAweDFjLCAweDA2LAorCTB4Y2IsIDB4MGEsIDB4YTksIDB4MmEsIDB4MDMsIDB4YTYsIDB4NmMsIDB4MjgsIDB4ZTQsIDB4MWIsIDB4YmYsIDB4YjEsCisJMHg3YSwgMHhlMywgMHhiMiwgMHhmZSwgMHg3NiwgMHg1ZSwgMHgyMSwgMHg3OSwgMHhjMSwgMHhlZiwgMHgyYywgMHg3YywKKwkweDU5LCAweGRlLCAweGI1LCAweDIwLCAweDE5LCAweGJmLCAweGIxLCAweGVlLCAweDhjLCAweGMzLCAweGJmLCAweGE0LAorCTB4ZTAsIDB4NGMsIDB4NTUsIDB4MWIsIDB4ZTgsIDB4MWUsIDB4MTgsIDB4ZGEsIDB4NjUsIDB4MzUsIDB4NjgsIDB4MTIsCisJMHhjNSwgMHgyOSwgMHg4ZCwgMHhlMiwgMHhiYSwgMHgyZiwgMHg3MSwgMHhiOSwgMHhkZCwgMHgyMywgMHhjZSwgMHhiNSwKKwkweDA3LCAweGJiLCAweDNlLCAweGM4LCAweDdiLCAweDQ4LCAweGNmLCAweGU4LCAweGRlLCAweDU5LCAweDQ4LCAweDM4LAorCTB4ZGYsIDB4MjMsIDB4NWIsIDB4NzMsIDB4NTMsIDB4NGMsIDB4NDUsIDB4YTEsIDB4YjEsIDB4ZWIsIDB4MTIsIDB4ZTUsCisJMHhhMSwgMHg5YiwgMHg2MiwgMHg5ZSwgMHg3ZiwgMHhlYSwgMHgzNiwgMHhhNCwgMHhhZiwgMHg3OSwgMHhmMCwgMHhlMCwKKwkweGNhLCAweGU5LCAweDQ0LCAweDJkLCAweGM1LCAweDc1LCAweDA1LCAweDY3LCAweGUzLCAweDlkLCAweDE4LCAweDJjLAorCTB4NTUsIDB4OTEsIDB4MWQsIDB4M2UsIDB4NTMsIDB4ZGUsIDB4YWIsIDB4MzUsIDB4NzYsIDB4YmQsIDB4OWYsIDB4NWUsCisJMHhjMiwgMHg3MSwgMHhlNCwgMHhkMywgMHg3YywgMHhiYiwgMHhkNiwgMHhiZCwgMHg1MywgMHg5YywgMHhkZSwgMHhlNCwKKwkweDQ1LCAweDFjLCAweDA3LCAweDRhLCAweGIyLCAweGZjLCAweDQ5LCAweDFhLCAweDFmLCAweDJkLCAweGQxLCAweGI0LAorCTB4ZjIsIDB4M2EsIDB4NDcsIDB4NTMsIDB4YmYsIDB4ZWMsIDB4NjgsIDB4MWEsIDB4NzAsIDB4NTMsIDB4MGMsIDB4YmUsCisJMHg3OCwgMHhiZCwgMHhjMCwgMHg0YiwgMHhkNywgMHg0NywgMHgxMiwgMHg2ZSwgMHhlMSwgMHhjMSwgMHhmOSwgMHhlZSwKKwkweDA0LCAweGQ5LCAweDQ5LCAweDYzLCAweGNhLCAweDYzLCAweDUwLCAweGZjLCAweDIwLCAweDkzLCAweDc1LCAweDY4LAorCTB4MDksIDB4ZWMsIDB4OWUsIDB4YzIsIDB4MjMsIDB4ODMsIDB4N2EsIDB4MTcsIDB4Y2MsIDB4MTksIDB4YjYsIDB4YTEsCisJMHgxNiwgMHgwYywgMHhjZSwgMHg3NCwgMHhjMywgMHgyYywgMHgzOSwgMHgzMCwgMHgxMSwgMHgyMCwgMHhlNiwgMHg0YiwKKwkweDQ4LCAweGI5LCAweDhjLCAweDk2LCAweDhlLCAweDg5LCAweDdjLCAweGFmLCAweGFiLCAweGUyLCAweGMzLCAweGM0LAorCTB4N2YsIDB4ZjYsIDB4YTgsIDB4MWYsIDB4NWUsIDB4ZDYsIDB4ZjMsIDB4NTksIDB4OTIsIDB4NTEsIDB4MGIsIDB4OWUsCisJMHgyOSwgMHg0NSwgMHgyOSwgMHhkNiwgMHhlOSwgMHgyNCwgMHgxNywgMHg4ZCwgMHhlMiwgMHg0NSwgMHg4OCwgMHhlYywKKwkweDRiLCAweGM2LCAweGQ2LCAweDUxLCAweGY1LCAweDA4LCAweGM1LCAweDg1LCAweGRjLCAweDA0LCAweGRhLCAweDkxLAorCTB4MGMsIDB4MjgsIDB4OTQsIDB4YmIsIDB4NWYsIDB4OWEsIDB4OGIsIDB4MDEsIDB4ZGIsIDB4ZTgsIDB4NTMsIDB4MzUsCisJMHg5MywgMHhjMCwgMHgxOSwgMHgwOSwgMHg2OCwgMHg2ZCwgMHgzMCwgMHgyMiwgMHhmYiwgMHgxYiwgMHg0OCwgMHgxZiwKKwkweDc1LCAweDQ1LCAweDBmLCAweDFlLCAweDE4LCAweGFkLCAweGM3LCAweGZkLCAweGUzLCAweDVlLCAweGVjLCAweDE4LAorCTB4YjUsIDB4NzAsIDB4MzksIDB4YzYsIDB4YjYsIDB4YTEsIDB4ZjYsIDB4MTAsIDB4ODksIDB4MWQsIDB4ZDUsIDB4MjQsCisJMHhkNywgMHg0ZCwgMHhiMSwgMHg0OCwgMHhjMiwgMHgyMywgMHg5YywgMHhhOCwgMHgyYSwgMHg3NiwgMHgxMywgMHgwNiwKKwkweDQ4LCAweGIyLCAweDVmLCAweGU4LCAweDM0LCAweDQ3LCAweDY4LCAweGI3LCAweDdlLCAweDJiLCAweDUyLCAweDAxLAorCTB4MTksIDB4YWUsIDB4YTIsIDB4OGYsIDB4NjIsIDB4MDksIDB4ZmIsIDB4MzEsIDB4ZGYsIDB4ZmIsIDB4MDYsIDB4YjYsCisJMHhiYSwgMHg3ZCwgMHg3MCwgMHg2NCwgMHg2NCwgMHhlNCwgMHgyOCwgMHhmZiwgMHg2MywgMHg5MSwgMHgxYiwgMHg5ZCwKKwkweDRkLCAweDEyLCAweGZkLCAweDA3LCAweGZjLCAweGQzLCAweDYzLCAweDhkLCAweGZlLCAweDYzLCAweDE0LCAweDVmLAorCTB4ZWYsIDB4YzksIDB4NGEsIDB4YmMsIDB4MGUsIDB4ZTMsIDB4MDUsIDB4OWEsIDB4NWIsIDB4YzEsIDB4OTMsIDB4MTQsCisJMHhhYiwgMHgxZiwgMHhhMiwgMHhmOCwgMHg3MywgMHhhMiwgMHg5NCwgMHgxNywgMHgxYywgMHg0ZiwgMHg2YywgMHg3ZSwKKwkweGIyLCAweGM0LCAweDViLCAweDk2LCAweDc4LCAweGNiLCAweDEyLCAweDVmLCAweDE0LCAweDE3LCAweDRlLCAweDY2LAorCTB4OTksIDB4OGYsIDB4MmIsIDB4ZTQsIDB4YTMsIDB4MDksIDB4ZTIsIDB4ZGQsIDB4ODMsIDB4NmQsIDB4NDQsIDB4ZWYsCisJMHg4MywgMHhlMywgMHhkNSwgMHhiOCwgMHg4ZiwgMHhlOCwgMHgyZCwgMHhlYSwgMHg2YSwgMHhjZiwgMHg5ZiwgMHgwYiwKKwkweDBiLCAweGY5LCAweDk4LCAweDZhLCAweGVlLCAweDE0LCAweDVlLCAweDQ4LCAweDRkLCAweDk2LCAweGQ1LCAweGFkLAorCTB4MzMsIDB4Y2YsIDB4NjQsIDB4YTcsIDB4OTIsIDB4Y2QsIDB4ZjMsIDB4ZmUsIDB4MjQsIDB4M2MsIDB4ZTgsIDB4YTMsCisJMHg2NywgMHg3YSwgMHhjNywgMHhmMSwgMHhhOSwgMHg0NCwgMHgzYywgMHg3OSwgMHg4OCwgMHhjNywgMHg4MywgMHhiYSwKKwkweDlhLCAweDU4LCAweDRlLCAweDcxLCAweGZkLCAweDgyLCAweDE2LCAweDI5LCAweDVmLCAweDcwLCAweGUwLCAweGViLAorCTB4MjQsIDB4MGYsIDB4OWQsIDB4ZTUsIDB4ZDEsIDB4NDQsIDB4ZmMsIDB4M2MsIDB4NDAsIDB4NTgsIDB4YzcsIDB4NmYsCisJMHgzMCwgMHg5ZiwgMHg5MSwgMHhlOCwgMHhhZiwgMHg4OSwgMHhmNywgMHg0OCwgMHgzMSwgMHhlMCwgMHgzZiwgMHg3NywKKwkweGI4LCAweGQxLCAweGZmLCAweGUyLCAweDUwLCAweDg1LCAweGZlLCAweDlkLCAweDQ0LCAweGZmLCAweDc0LCAweGNjLAorCTB4YzIsIDB4MjEsIDB4YTIsIDB4ZmYsIDB4MjksIDB4YTIsIDB4YmYsIDB4OGYsIDB4ZTMsIDB4ZjksIDB4MWMsIDB4ZmQsCisJMHgyNywgMHg0YSwgMHhiYywgMHhlZSwgMHg5NywgMHhmMSwgMHgzMCwgMHg0ZiwgMHg3ZiwgMHgzZCwgMHhiNiwgMHg4ZSwKKwkweGNmLCAweGNiLCAweGNiLCAweGIyLCAweGVlLCAweGQ0LCAweDlmLCAweGI1LCAweGJlLCAweDRkLCAweDMyLCAweDViLAorCTB4NTIsIDB4NjQsIDB4YjksIDB4MzEsIDB4OGUsIDB4OGIsIDB4MWMsIDB4YjksIDB4MDcsIDB4N2QsIDB4MTIsIDB4YmMsCisJMHgzZSwgMHgyYywgMHgyOCwgMHg3MiwgMHgyZSwgMHgwOCwgMHhlMSwgMHg1OSwgMHhkMiwgMHhlZiwgMHgyOSwgMHhjYSwKKwkweDY1LCAweGNmLCAweDk0LCAweGFlLCAweGNkLCAweDZkLCAweGFjLCAweGViLCAweDMxLCAweGQyLCAweGIxLCAweDNhLAorCTB4NjEsIDB4NTIsIDB4NmMsIDB4NGIsIDB4OTUsIDB4OTIsIDB4ZDgsIDB4M2IsIDB4OGUsIDB4ZTQsIDB4YjQsIDB4ZmUsCisJMHhhZiwgMHgyOSwgMHhjMCwgMHgyYywgMHgyMiwgMHhmYiwgMHhhYSwgMHg0YSwgMHgyYSwgMHg5YSwgMHgxNywgMHg3NywKKwkweDRkLCAweDA1LCAweGQwLCAweDVmLCAweDVhLCAweDhmLCAweDJjLCAweGM1LCAweDliLCAweDlkLCAweDE0LCAweDlmLAorCTB4M2YsIDB4OGMsIDB4MjUsIDB4NzcsIDB4ZjgsIDB4MTEsIDB4MjEsIDB4ZmQsIDB4MDYsIDB4NzAsIDB4MmYsIDB4M2QsCisJMHg3MywgMHg3MCwgMHg5YywgMHhlOSwgMHg1NywgMHhlNiwgMHhmNCwgMHgxYywgMHhjMCwgMHgzZCwgMHg3NCwgMHg2ZCwKKwkweGRmLCAweGI4LCAweDhjLCAweDE3LCAweGY0LCAweDI3LCAweDA4LCAweGNmLCAweDU0LCAweGYwLCAweGM1LCAweGRkLAorCTB4NTksIDB4MjgsIDB4ZTQsIDB4OWUsIDB4ODQsIDB4ZmYsIDB4MjIsIDB4ZDEsIDB4MTcsIDB4ZTgsIDB4ZjcsIDB4YjYsCisJMHg5MiwgMHhkNywgMHgzZiwgMHgzOCwgMHg4NiwgMHhlZiwgMHgyZCwgMHgzMSwgMHhmYywgMHg1OCwgMHg0MCwgMHg1OCwKKwkweGVjLCAweDc2LCAweDNkLCAweDQyLCAweDc2LCAweGVmLCAweGM0LCAweDQwLCAweDQ5LCAweGMyLCAweDc3LCAweGE2LAorCTB4YmMsIDB4NzgsIDB4NjgsIDB4ZjQsIDB4NTMsIDB4Y2IsIDB4MWQsIDB4NzcsIDB4ZTIsIDB4YjYsIDB4MjYsIDB4MmYsCisJMHgxZSwgMHg5YywgMHg0YSwgMHg2MiwgMHhmZiwgMHgzOCwgMHg0MiwgMHg1NSwgMHhiMSwgMHg2MSwgMHg4YSwgMHhkZCwKKwkweDk1LCAweDdjLCAweDUwLCAweDRkLCAweGJjLCAweDFmLCAweDE4LCAweGY3LCAweGY5LCAweGZiLCAweDBlLCAweGIzLAorCTB4MGMsIDB4ZDYsIDB4MDcsIDB4M2QsIDB4NDAsIDB4YjksIDB4MmEsIDB4ZTYsIDB4YzAsIDB4MzYsIDB4ZGQsIDB4YjEsCisJMHhhMCwgMHg4YSwgMHgwYywgMHhmZCwgMHgwOSwgMHg5YSwgMHg2ZiwgMHgxMiwgMHg4ZSwgMHg1NywgMHg5NywgMHgyMCwKKwkweDcyLCAweGE0LCAweGMxLCAweDUxLCAweGNlLCAweDJkLCAweDQwLCAweDNkLCAweDFlLCAweDlhLCAweDQ5LCAweDYyLAorCTB4OTgsIDB4NmMsIDB4ZjQsIDB4ODEsIDB4ZDEsIDB4YzEsIDB4ZWYsIDB4ZDUsIDB4NTEsIDB4MGMsIDB4ZjEsIDB4YjcsCisJMHhhYSwgMHg3ZCwgMHg2ZiwgMHgwOCwgMHgwMywgMHhmOSwgMHg4OCwgMHgwNywgMHgzYiwgMHhhNywgMHg3YywgMHhmZSwKKwkweDFkLCAweDg3LCAweGFkLCAweDc1LCAweDZjLCAweDRmLCAweGRiLCAweDY3LCAweGVhLCAweDcxLCAweGRmLCAweDM4LAorCTB4NWQsIDB4MWIsIDB4NjUsIDB4MWIsIDB4MjYsIDB4NWIsIDB4OGIsIDB4NTQsIDB4MTEsIDB4NmYsIDB4ZTEsIDB4YTQsCisJMHg4NywgMHhmMCwgMHg5MiwgMHgyMywgMHg1NiwgMHg0ZCwgMHhmMiwgMHhmMCwgMHhlMCwgMHgxZSwgMHhkYiwgMHgxNiwKKwkweDE0LCAweDZjLCAweDFiLCAweGI3LCAweGYwLCAweGE2LCAweDFlLCAweDQ1LCAweDhlLCAweGVjLCAweGZhLCAweGM4LAorCTB4YjgsIDB4M2EsIDB4ZGIsIDB4NDEsIDB4NTgsIDB4ZTcsIDB4NmQsIDB4ODcsIDB4N2EsIDB4YTQsIDB4YzksIDB4OTEsCisJMHg0NCwgMHg3ZCwgMHgxYiwgMHhjNSwgMHhmOCwgMHg3YSwgMHhjYiwgMHhiYSwgMHhiYiwgMHhiNSwgMHhiOSwgMHhmZiwKKwkweGU3LCAweDQ0LCAweDczLCAweDlkLCAweGIxLCAweDA4LCAweGU1LCAweDNhLCAweDM1LCAweDA3LCAweDM0LCAweDBmLAorCTB4YjgsIDB4YTUsIDB4ZWIsIDB4NzEsIDB4N2UsIDB4MjEsIDB4YzcsIDB4NDEsIDB4OGUsIDB4ZTUsIDB4MDEsIDB4N2YsCisJMHg3ZCwgMHhhNiwgMHg5MiwgMHhlMywgMHhlYSwgMHg4YiwgMHg4ZCwgMHhmZSwgMHhiYSwgMHg0YywgMHhkMCwgMHg1ZiwKKwkweDU3LCAweDg0LCAweGRmLCAweDVkLCAweDA0LCAweDdlLCAweDRjLCAweGYxLCAweDY1LCAweDQxLCAweGRiLCAweDZmLAorCTB4YWMsIDB4NTQsIDB4YmQsIDB4OGQsIDB4MDcsIDB4ZmQsIDB4Y2YsIDB4OGYsIDB4YTksIDB4NjYsIDB4MTksIDB4ZWEsCisJMHg3ZSwgMHgwYSwgMHg5YiwgMHg3OCwgMHg3YywgMHhjNiwgMHhlOSwgMHgzZiwgMHg0ZSwgMHhkOCwgMHhhZiwgMHg1ZSwKKwkweDhiLCAweDYyLCAweDFmLCAweGU5LCAweDczLCAweDE3LCAweGQ5LCAweGMyLCAweGFmLCAweGRiLCAweDgwLCAweDAzLAorCTB4OTksIDB4NzAsIDB4NDgsIDB4MTcsIDB4M2QsIDB4MzQsIDB4MzEsIDB4YjAsIDB4YTcsIDB4NDgsIDB4MzEsIDB4NWYsCisJMHg0YSwgMHg1MiwgMHgxMCwgMHg1MywgMHhhMywgMHg5NCwgMHhkNiwgMHg5MCwgMHhjZSwgMHhiOCwgMHg2MCwgMHgyZSwKKwkweGFjLCAweGU4LCAweGU0LCAweGJlLCAweGVjLCAweDI5LCAweGNiLCAweGFmLCAweDY5LCAweDEzLCAweDQ1LCAweGQyLAorCTB4ZDksIDB4YzMsIDB4MjUsIDB4MWYsIDB4MDYsIDB4MDgsIDB4MGYsIDB4MmMsIDB4MjAsIDB4MGMsIDB4ZjksIDB4MjAsCisJMHhkOSwgMHhjNSwgMHgwMywgMHhhMywgMHgwZSwgMHhhMiwgMHg4ZiwgMHhjNywgMHgyNSwgMHg5MSwgMHg1YywgMHg1NCwKKwkweGMxLCAweGEyLCAweDBmLCAweDRkLCAweGIxLCAweDVkLCAweDkyLCAweDFkLCAweDkxLCAweDJkLCAweDNlLCAweDRiLAorCTB4MzksIDB4ZmYsIDB4OTksIDB4Y2YsIDB4NjEsIDB4MTAsIDB4NTUsIDB4MzEsIDB4YWYsIDB4ZTYsIDB4ZmUsIDB4OGEsCisJMHgzYywgMHgwNiwgMHhjNywgMHg5OSwgMHg2NywgMHhmNSwgMHgwOCwgMHhhNCwgMHgyNCwgMHg2ZSwgMHhkMiwgMHg3ZiwKKwkweDQ5LCAweDM5LCAweDgxLCAweDc5LCAweDI3LCAweDBjLCAweDNjLCAweDFlLCAweGM1LCAweGEzLCAweDU5LCAweGMyLAorCTB4MzQsIDB4YjEsIDB4Y2IsIDB4ZDYsIDB4M2QsIDB4MDEsIDB4OTYsIDB4MDEsIDB4ZjMsIDB4YjMsIDB4Y2EsIDB4YzEsCisJMHhmOSwgMHhiMywgMHg5ZSwgMHhiMCwgMHhlZiwgMHhmZiwgMHhiYiwgMHhkZCwgMHhkZCwgMHg2NSwgMHhhNSwgMHg2YywKKwkweDJjLCAweDRiLCAweDE4LCAweDliLCAweGVjLCAweDI5LCAweDc1LCAweGQ1LCAweDdlLCAweDFlLCAweGI0LCAweGNlLAorCTB4MDcsIDB4MzgsIDB4NWYsIDB4ZDcsIDB4MjMsIDB4NzUsIDB4ZDUsIDB4MTYsIDB4ZDgsIDB4OTYsIDB4YjAsIDB4NDQsCisJMHg2ZiwgMHhkZCwgMHhmZCwgMHhhMCwgMHgwMiwgMHhiNiwgMHg4NywgMHhlOCwgMHgzNSwgMHhmNiwgMHg1MCwgMHg0NSwKKwkweDM0LCAweDI5LCAweGQ4LCAweDMxLCAweGMzLCAweGY2LCAweDZiLCAweDVkLCAweDU5LCAweDYyLCAweGZjLCAweGQ2LAorCTB4ZmEsIDB4NjQsIDB4YjUsIDB4NzYsIDB4ZTQsIDB4OTcsIDB4ZTgsIDB4YTIsIDB4ZWIsIDB4MDEsIDB4N2MsIDB4ODcsCisJMHhmYywgMHhlOCwgMHg1ZSwgMHhlMiwgMHg3MywgMHg0NywgMHhmYiwgMHhiZCwgMHhiNiwgMHhkZiwgMHhlZSwgMHgyOCwKKwkweGFkLCAweGExLCAweGViLCAweDJjLCAweGVmLCAweDBlLCAweGVjLCAweGNmLCAweGVhLCAweDQ4LCAweDY3LCAweGNiLAorCTB4OWMsIDB4ODcsIDB4YzgsIDB4ZTYsIDB4ZTMsIDB4ZjgsIDB4MTEsIDB4YzUsIDB4ZDksIDB4NjcsIDB4NGIsIDB4OGMsCisJMHhjOSwgMHgxMiwgMHgzNiwgMHgxZSwgMHhmYiwgMHg2MSwgMHhhOSwgMHgwNSwgMHhjZiwgMHg5MSwgMHg0ZiwgMHgzZSwKKwkweDQzLCAweDMxLCAweGY3LCAweDA3LCAweDM2LCAweDRlLCAweDczLCAweDhhLCAweDQzLCAweDY5LCAweGMyLCAweGE0LAorCTB4NDMsIDB4MjYsIDB4ZDIsIDB4ZjksIDB4MTAsIDB4M2MsIDB4ODcsIDB4YzMsIDB4ZmIsIDB4NzcsIDB4MDgsIDB4ZjUsCisJMHhjNywgMHgyNCwgMHgyZiwgMHhmZiwgMHg4MSwgMHhlOSwgMHhhNSwgMHhhOCwgMHgzYSwgMHhhYywgMHg0ZSwgMHgxMCwKKwkweGRkLCAweGZlLCAweDQ3LCAweGE3LCAweDM1LCAweGMyLCAweGQ0LCAweDQxLCAweGZmLCAweGJlLCAweGJjLCAweGUyLAorCTB4ZGYsIDB4M2IsIDB4MTYsIDB4ZjAsIDB4ZWYsIDB4OWQsIDB4YWUsIDB4MjcsIDB4M2YsIDB4NWEsIDB4ZTQsIDB4MWYsCisJMHg5YywgMHgwZSwgMHhmYSwgMHg3NywgMHhhNywgMHgxYiwgMHhmZCwgMHhiYiwgMHhmMywgMHg2ZCwgMHgwOCwgMHhkNSwKKwkweGMzLCAweDVjLCAweDQ0LCAweDM5LCAweGUyLCAweGJlLCAweGQxLCAweDZmLCAweDYyLCAweGEyLCAweGFlLCAweDEyLAorCTB4ZjcsIDB4ZmIsIDB4YzksIDB4MzYsIDB4NmEsIDB4YzksIDB4MGUsIDB4NTcsIDB4NGEsIDB4YjcsIDB4YTEsIDB4YmMsCisJMHhiMCwgMHg3MiwgMHhlZCwgMHgzYiwgMHg3NCwgMHhlZCwgMHhhMSwgMHg1NiwgMHhmOCwgMHhmZiwgMHhjMiwgMHg4ZSwKKwkweGJkLCAweGMwLCAweDczLCAweDY0LCAweDZiLCAweGNmLCAweGI2LCAweDUyLCAweDVkLCAweDc5LCAweGQ1LCAweGQ2LAorCTB4OWMsIDB4MTQsIDB4NmYsIDB4MmQsIDB4NGIsIDB4NmYsIDB4MTMsIDB4MDgsIDB4YjYsIDB4NmUsIDB4MDAsIDB4MTYsCisJMHhjYywgMHhkNywgMHg5MiwgMHhjOSwgMHgwOSwgMHg2NywgMHg2YiwgMHgxMiwgMHg0YiwgMHhiNCwgMHg4ZCwgMHg3OCwKKwkweDQyLCAweGExLCAweDU0LCAweGQzLCAweGZhLCAweDc1LCAweGNjLCAweDNkLCAweDgzLCAweGVmLCAweDhjLCAweDdhLAorCTB4OTAsIDB4ZGEsIDB4YWMsIDB4NjAsIDB4OWEsIDB4YjAsIDB4Y2EsIDB4NzYsIDB4OWEsIDB4N2YsIDB4NTksIDB4YWMsCisJMHg1OSwgMHg5OSwgMHgyMSwgMHgzZCwgMHgyNCwgMHgxNSwgMHhiZSwgMHg0NiwgMHgzZSwgMHhkMSwgMHhiYSwgMHg4YSwKKwkweDdjLCAweGEyLCAweGIyLCAweGZlLCAweGQzLCAweGE0LCAweGFmLCAweGRjLCAweDRjLCAweDE0LCAweDdiLCAweDRiLAorCTB4M2YsIDB4OTEsIDB4MmEsIDB4ZjksIDB4NDUsIDB4OWQsIDB4NDgsIDB4ZTIsIDB4YWMsIDB4M2QsIDB4ZjYsIDB4ZTksCisJMHhlYywgMHgxYiwgMHg1NiwgMHhjOCwgMHhiNiwgMHgzYiwgMHg4MSwgMHhjNywgMHg1NiwgMHg0NCwgMHhmNiwgMHhmZiwKKwkweDI3LCAweGE5LCAweDgxLCAweGY4LCAweDIyLCAweGQ5LCAweDY1LCAweGVkLCAweDNhLCAweGIyLCAweDc2LCAweGIxLAorCTB4ZjYsIDB4MmYsIDB4ZjAsIDB4MjMsIDB4ODUsIDB4NjUsIDB4M2IsIDB4MjAsIDB4ZjYsIDB4NTMsIDB4YmQsIDB4NGEsCisJMHhhNSwgMHg1MywgMHhlZCwgMHgwMiwgMHhlZCwgMHgzMCwgMHg5ZSwgMHhlOSwgMHhlNiwgMHg2YiwgMHgwMSwgMHhmZiwKKwkweDgxLCAweGIxLCAweGE0LCAweDE0LCAweGQwLCAweGEwLCAweGI4LCAweDhjLCAweDBlLCAweDcxLCAweDYwLCAweDdhLAorCTB4OTEsIDB4ZmYsIDB4ZDEsIDB4YjEsIDB4MGQsIDB4ZTIsIDB4ZDEsIDB4ZTksIDB4NDYsIDB4ZmYsIDB4NjAsIDB4YmEsCisJMHg1MywgMHgwYywgMHhlNiwgMHgzNywgMHgwYiwgMHg3MywgMHhlMiwgMHg1YiwgMHhjMiwgMHg5YywgMHg0ZSwgMHgwOSwKKwkweDMzLCAweGRmLCAweDQzLCAweDlmLCAweDViLCAweGM0LCAweDU4LCAweDdlLCAweDQwLCAweGVjLCAweGNkLCAweGYzLAorCTB4ZmMsIDB4YTQsIDB4MmIsIDB4NWEsIDB4ZTMsIDB4ODcsIDB4MTQsIDB4N2IsIDB4OWYsIDB4YTMsIDB4ZDgsIDB4ZmIsCisJMHgyYywgMHhjNSwgMHhkZSwgMHg2NywgMHhjOCwgMHhkZSwgMHg3ZiwgMHg3MCwgMHgxNSwgMHhlMywgMHhiMiwgMHg4ZCwKKwkweDI3LCAweDE5LCAweDliLCAweGY4LCAweGZmLCAweGJjLCAweDc4LCAweDg2LCAweGY0LCAweGNkLCAweGIyLCAweGZiLAorCTB4MzcsIDB4NjQsIDB4ZGIsIDB4MmMsIDB4OTMsIDB4ODcsIDB4MzgsIDB4NTcsIDB4OTAsIDB4OWUsIDB4ZGUsIDB4YjcsCisJMHg2ZCwgMHhmOSwgMHhiMSwgMHgxNSwgMHg4YywgMHhhNSwgMHgwNiwgMHhjNCwgMHg1NiwgMHhhMiwgMHgyZiwgMHhlOSwKKwkweDI0LCAweDBjLCAweGE0LCAweDExLCAweDNlLCAweGM5LCAweDBlLCAweDg4LCAweGJiLCAweGYzLCAweDdjLCAweGZkLAorCTB4MjAsIDB4NzYsIDB4NTIsIDB4NGQsIDB4NzgsIDB4MjgsIDB4MTYsIDB4ZWUsIDB4ZWUsIDB4MjUsIDB4ZWMsIDB4YjQsCisJMHg4OSwgMHhiMCwgMHhkMywgMHhiMiwgMHg5OCwgMHg4YywgMHg4YiwgMHgyZCwgMHg5ZiwgMHg1OCwgMHg1OCwgMHg4OCwKKwkweGU0LCAweGZkLCAweDcxLCAweDc1LCAweDYyLCAweGEyLCAweDkyLCAweDZmLCAweDczLCAweDE5LCAweDcwLCAweGRkLAorCTB4OGUsIDB4ZGEsIDB4MWEsIDB4NGQsIDB4M2QsIDB4OTEsIDB4NDQsIDB4NzgsIDB4N2YsIDB4NWMsIDB4ODIsIDB4ZTksCisJMHgzNiwgMHg1YywgMHhiOCwgMHhjZiwgMHhhZSwgMHgxNSwgMHhkNywgMHg2MywgMHg3NCwgMHg1NCwgMHg2MCwgMHg1YiwKKwkweDZiLCAweGYyLCAweDhmLCAweDVjLCAweDI0LCAweGFiLCAweGI3LCAweGRiLCAweDExLCAweDIwLCAweGY1LCAweDBhLAorCTB4OTksIDB4ZWEsIDB4ZmEsIDB4NGUsIDB4OTIsIDB4NWUsIDB4MDcsIDB4ZTUsIDB4ZGMsIDB4MjcsIDB4YjIsIDB4YWIsCisJMHhkMCwgMHhkMCwgMHgyYSwgMHg5MywgMHgwZSwgMHg5ZCwgMHhiOCwgMHhiMywgMHg3OCwgMHgxMywgMHhlOSwgMHgzMSwKKwkweDcyLCAweGU0LCAweDc5LCAweDc4LCAweGZkLCAweDJmLCAweDhjLCAweDE5LCAweDE4LCAweGNhLCAweGUyLCAweDdiLAorCTB4M2UsIDB4YWEsIDB4ZTEsIDB4ZWUsIDB4MjUsIDB4ZmMsIDB4ZjQsIDB4MDMsIDB4YTIsIDB4NjEsIDB4NjMsIDB4NmIsCisJMHhhNCwgMHg5MywgMHg2YSwgMHg3OSwgMHhjNSwgMHg2YiwgMHhiOCwgMHgzMSwgMHhkMiwgMHhlNCwgMHg4NywgMHhhMiwKKwkweGE1LCAweGM0LCAweDJiLCAweGY5LCAweGM4LCAweDkxLCAweDFkLCAweGQyLCAweGI3LCAweGM0LCAweGNmLCAweGE3LAorCTB4MGQsIDB4M2MsIDB4NWEsIDB4ZWEsIDB4MTEsIDB4N2YsIDB4MzEsIDB4MmQsIDB4ODMsIDB4NzQsIDB4NDMsIDB4NzEsCisJMHg0YiwgMHhjNywgMHgxMSwgMHhhMiwgMHhjYiwgMHg0NSwgMHgxOCwgMHhjOSwgMHhmNSwgMHhmYiwgMHgwMiwgMHg4YiwKKwkweGI1LCAweDI0LCAweGJlLCAweGIzLCAweDhhLCAweDdkLCAweGExLCAweDEyLCAweGQzLCAweDljLCAweGFiLCAweDgwLAorCTB4ZmQsIDB4NjQsIDB4OTMsIDB4MGQsIDB4OTksIDB4MGUsIDB4YjEsIDB4ODQsIDB4YmUsIDB4NWYsIDB4YTQsIDB4YmMsCisJMHg5NiwgMHg5NCwgMHgzYSwgMHg0NSwgMHgwMywgMHg2MSwgMHhkMywgMHg4NSwgMHg5MywgMHg1YiwgMHhjNCwgMHg4MiwKKwkweDIyLCAweDYzLCAweDUxLCAweDI4LCAweDBiLCAweDQ5LCAweDQ2LCAweDBiLCAweDhiLCAweDE3LCAweDFkLCAweDk1LAorCTB4MWEsIDB4YzAsIDB4YzUsIDB4YjYsIDB4NjQsIDB4ZmEsIDB4MGMsIDB4ZDksIDB4N2YsIDB4ODgsIDB4NjIsIDB4ZmIsCisJMHg4ZSwgMHg1OCwgMHgyNywgMHhlMSwgMHg2NCwgMHhiZSwgMHgzZSwgMHgyMCwgMHg4NiwgMHg0OCwgMHg4ZSwgMHgxMywKKwkweDJlLCAweGRiLCAweDc2LCAweGZjLCAweDRmLCAweDhjLCAweGMxLCAweGQ1LCAweDYwLCAweDIwLCAweGU0LCAweGE2LAorCTB4ZGMsIDB4ZjEsIDB4ZGYsIDB4ZGIsIDB4MjIsIDB4ZTYsIDB4ZjMsIDB4NTIsIDB4OTcsIDB4YzgsIDB4ZTUsIDB4MDMsCisJMHhmZSwgMHgyMywgMHg2MywgMHg5YywgMHg2NywgMHgzYSwgMHhjNCwgMHgxMSwgMHhkMiwgMHg3OSwgMHg5NiwgMHg3NCwKKwkweDllLCAweDI1LCAweDlkLCAweDY3LCAweDQ4LCAweGU3LCAweDk5LCAweDJmLCAweGQxLCAweGY5LCAweDNlLCAweGQyLAorCTB4ZjksIDB4ZWUsIDB4ZmMsIDB4YWYsIDB4NmMsIDB4MWQsIDB4M2EsIDB4MGQsIDB4MDMsIDB4NTksIDB4Y2EsIDB4Y2IsCisJMHgyMywgMHg0ZCwgMHgxNSwgMHhmZSwgMHgzZSwgMHgyNCwgMHg1OSwgMHhiYywgMHgxNCwgMHhmYiwgMHg4NiwgMHgxMywKKwkweDVlLCAweDgzLCAweDYyLCAweDZiLCAweDE3LCAweDNkLCAweGYzLCAweDk1LCAweDM5LCAweDFiLCAweDU3LCAweGZjLAorCTB4YzMsIDB4NjMsIDB4MWQsIDB4NjIsIDB4OTgsIDB4ZmMsIDB4NmUsIDB4ODQsIDB4ZTYsIDB4MWYsIDB4MjEsIDB4YmYsCisJMHgxYiwgMHg0YywgMHhmZiwgMHg5ZiwgMHhkOCwgMHgwZCwgMHhkYiwgMHgxZCwgMHg0YywgMHgyZiwgMHhlNSwgMHhhZCwKKwkweDZhLCAweGIyLCAweDRiLCAweGE3LCAweGMxLCAweDM2LCAweGI0LCAweDU5LCAweDI0LCAweDhmLCAweDdlLCAweDRiLAorCTB4MjQsIDB4OGYsIDB4YTUsIDB4NDQsIDB4YjIsIDB4ZDAsIDB4NDMsIDB4OWYsIDB4NWIsIDB4YzQsIDB4MmQsIDB4NzYsCisJMHgxZCwgMHgzYSwgMHgyMCwgMHgzYSwgMHgwYSwgMHgwMSwgMHhmZiwgMHgzOCwgMHhhZCwgMHgzMywgMHg0ZSwgMHg3YywKKwkweDNjLCAweDQ2LCAweGViLCAweDNjLCAweDY2LCAweGRiLCAweDJlLCAweDE1LCAweDk5LCAweDVlLCAweDVlLCAweDhiLAorCTB4ZWQsIDB4OGMsIDB4ZWQsIDB4ZWIsIDB4MzIsIDB4ZDEsIDB4Y2UsIDB4YmUsIDB4NzEsIDB4YjUsIDB4YzcsIDB4NDMsCisJMHg3ZiwgMHgzNywgMHgzOCwgMHhhMCwgMHhlZCwgMHg3NCwgMHg1NiwgMHg3OCwgMHhlMiwgMHhkYywgMHhjZiwgMHhiOSwKKwkweDllLCAweGUzLCAweGIwLCAweDYyLCAweGQ3LCAweDgyLCAweGNmLCAweDVlLCAweGM1LCAweDAwLCAweDhjLCAweDA3LAorCTB4MjAsIDB4MmYsIDB4MzAsIDB4YjYsIDB4MTgsIDB4ZGYsIDB4NjksIDB4ZmEsIDB4MWYsIDB4MzQsIDB4NWYsIDB4M2YsCisJMHhmNCwgMHg1NSwgMHg5MCwgMHgwMywgMHhjNiwgMHg1ZiwgMHgxYSwgMHg2MywgMHg0ZCwgMHgxNCwgMHhhNywgMHg2OSwKKwkweDRlLCAweDM5LCAweDAzLCAweDY4LCAweDE5LCAweDgxLCAweGRkLCAweDA5LCAweDQxLCAweDM4LCAweDc2LCAweDExLAorCTB4ZjksIDB4MjUsIDB4ZDMsIDB4YWYsIDB4NzYsIDB4NTIsIDB4MzYsIDB4YzEsIDB4ZDIsIDB4MjEsIDB4YzgsIDB4NGIsCisJMHg4YywgMHg5ZCwgMHhiMCwgMHhiMiwgMHg5MCwgMHg2YiwgMHg4ZCwgMHgzZSwgMHg1YywgMHgxOSwgMHgwYSwgMHgwNywKKwkweDNiLCAweGExLCAweGE2LCAweDJlLCAweDM4LCAweGQ0LCAweDMyLCAweGU1LCAweGI3LCAweGZlLCAweGRkLCAweDQyLAorCTB4ZWQsIDB4OWIsIDB4MTUsIDB4ZGMsIDB4MjcsIDB4NjIsIDB4ZWMsIDB4YmUsIDB4MTMsIDB4MmQsIDB4MzYsIDB4ODYsCisJMHhlZiwgMHg0MywgMHg3MywgMHgxZSwgMHg1NCwgMHg4NywgMHgwYiwgMHhiYywgMHg0MywgMHg3MywgMHhiZSwgMHhhOCwKKwkweDdmLCAweGMwLCAweDM5LCAweDIxLCAweDQ5LCAweDU4LCAweGYwLCAweDBiLCAweDczLCAweDgxLCAweDcwLCAweDBjLAorCTB4Y2YsIDB4YzMsIDB4NzMsIDB4ODQsIDB4OTUsIDB4M2UsIDB4OWEsIDB4ZjcsIDB4NGQsIDB4NDcsIDB4NzMsIDB4ZmYsCisJMHhhMCwgMHg1MCwgMHgxMywgMHg1ZiwgMHg5YywgMHg2ZiwgMHg1OSwgMHgxZSwgMHg2MiwgMHg1OSwgMHhjNiwgMHhiNCwKKwkweGFhLCAweDM1LCAweDJmLCAweGUzLCAweDIxLCAweGU5LCAweDFkLCAweDRkLCAweDRiLCAweGJlLCAweDg2LCAweDEwLAorCTB4OTYsIDB4NTEsIDB4OWQsIDB4MWMsIDB4MmQsIDB4MzIsIDB4MGYsIDB4YmIsIDB4NzAsIDB4NDYsIDB4NTcsIDB4YmIsCisJMHhhOSwgMHgxYSwgMHhhNSwgMHhiYSwgMHhhNSwgMHgwMywgMHgwNywgMHgyOSwgMHhmNiwgMHgzZSwgMHg1YSwgMHhlMiwKKwkweDNlLCAweGQ3LCAweDgwLCAweDU4LCAweDNlLCAweDQ0LCAweDdlLCAweDY5LCAweGRiLCAweDEzLCAweGU0LCAweDA2LAorCTB4ZTMsIDB4NjEsIDB4ZGMsIDB4NDAsIDB4ZWIsIDB4ZmIsIDB4YTksIDB4ZjYsIDB4NzksIDB4OWQsIDB4ZDYsIDB4OTcsCisJMHgzMiwgMHhlYSwgMHgwMCwgMHhhZCwgMHg5ZiwgMHg3YSwgMHg0MywgMHg4NCwgMHg2NywgMHg4OSwgMHhhZiwgMHg5ZSwKKwkweDc1LCAweDhlLCAweGU2LCAweGJlLCAweDVkLCAweDQyLCAweDRkLCAweDEyLCAweGU5LCAweGU0LCAweGM3LCAweGJjLAorCTB4ZjYsIDB4YzMsIDB4Y2MsIDB4MGIsIDB4N2QsIDB4NTIsIDB4OWQsIDB4NDMsIDB4NzYsIDB4ZDQsIDB4NTQsIDB4OTAsCisJMHg0NSwgMHg2NCwgMHg3OCwgMHgzZCwgMHhmNiwgMHg0ZSwgMHhhZCwgMHhjNywgMHgxZSwgMHhmMiwgMHhjNywgMHgwMywKKwkweDdhLCAweDJkLCAweDQyLCAweDc1LCAweGE4LCAweGE5LCAweGQ1LCAweDMwLCAweDdiLCAweDQxLCAweDEzLCAweDhlLAorCTB4MWQsIDB4MmQsIDB4OGQsIDB4NjQsIDB4YzcsIDB4YTcsIDB4MWIsIDB4YWEsIDB4ZjAsIDB4OTEsIDB4ZDUsIDB4YWIsCisJMHhhZCwgMHhlZiwgMHhhNCwgMHg4OCwgMHg3OCwgMHg4MywgMHgwNywgMHhlMywgMHgwZSwgMHhmMiwgMHhlZiwgMHg1ZiwKKwkweGZjLCAweDlhLCAweDAyLCAweGFhLCAweGM3LCAweDYwLCAweGRjLCAweDk2LCAweDEwLCAweDk3LCAweGYyLCAweDY3LAorCTB4OWQsIDB4MTUsIDB4M2YsIDB4NjgsIDB4YzIsIDB4MTUsIDB4MDUsIDB4YjUsIDB4NDEsIDB4NmQsIDB4MzksIDB4NjYsCisJMHgxNSwgMHg5OSwgMHhlMiwgMHg4NSwgMHg2OSwgMHhkNywgMHg2NCwgMHgzNywgMHhlNywgMHhiYSwgMHhkMSwgMHg0MCwKKwkweGY1LCAweGYxLCAweDlkLCAweGIxLCAweDVmLCAweDViLCAweDlmLCAweDJjLCAweGU2LCAweGU3LCAweDRlLCAweDdhLAorCTB4MmEsIDB4YjEsIDB4ZjMsIDB4Y2IsIDB4ZTYsIDB4ODgsIDB4NTMsIDB4YmMsIDB4NjksIDB4YTYsIDB4N2EsIDB4YjYsCisJMHg5YSwgMHg4MiwgMHg3NCwgMHgyNywgMHhlNSwgMHgyMywgMHhiNSwgMHgyNywgMHg0ZCwgMHhmNSwgMHg2OCwgMHg1ZiwKKwkweGE0LCAweDU5LCAweDc3LCAweDA4LCAweDM3LCAweGNhLCAweDgxLCAweDcwLCAweDdmLCAweDJmLCAweDkyLCAweGRiLAorCTB4ZmQsIDB4NzMsIDB4NzQsIDB4M2MsIDB4MmIsIDB4MzQsIDB4MTcsIDB4M2QsIDB4YzcsIDB4ZjMsIDB4NWMsIDB4NjMsCisJMHg0ZiwgMHgyNywgMHhjOSwgMHg5ZSwgMHhmOCwgMHgzZSwgMHg3ZiwgMHhiZiwgMHg3YSwgMHg1ZiwgMHhmZSwgMHg4YSwKKwkweGYxLCAweDk3LCAweGZmLCAweGU0LCAweDhmLCAweDk3LCAweDdkLCAweGQ5LCAweGY1LCAweDhmLCAweGJmLCAweGU0LAorCTB4ZmEsIDB4ZmYsIDB4YWUsIDB4YWUsIDB4MmYsIDB4ZDcsIDB4MzksIDB4NmQsIDB4Y2MsIDB4OTAsIDB4OTQsIDB4YjgsCisJMHg4ZiwgMHhlOSwgMHgzNCwgMHgyZSwgMHhhZiwgMHhkOSwgMHhhMywgMHhmZCwgMHgwZSwgMHhjNSwgMHgzNCwgMHhlZSwKKwkweDYzLCAweDcwLCAweDllLCAweDNlLCAweDZmLCAweGY3LCAweDMxLCAweDRlLCAweDdkLCAweDBlLCAweGIzLCAweDcyLAorCTB4NmMsIDB4ZjEsIDB4ODgsIDB4ZWEsIDB4MTEsIDB4ZDMsIDB4YWEsIDB4ZDcsIDB4YmUsIDB4NGQsIDB4NzUsIDB4Y2QsCisJMHgyZSwgMHhmNCwgMHhjNiwgMHg3NCwgMHgwYywgMHg2NywgMHhkNSwgMHhlZSwgMHhkYiwgMHhhMCwgMHgyNSwgMHgzNywKKwkweDBiLCAweDlhLCAweGE4LCAweGU4LCAweDExLCAweDhlLCAweDkxLCAweGI5LCAweDdiLCAweGJhLCAweDQ5LCAweGI1LAorCTB4NWEsIDB4MTksIDB4NTUsIDB4MTQsIDB4OWIsIDB4OWMsIDB4OWEsIDB4MjIsIDB4YTMsIDB4MTgsIDB4OTAsIDB4OWQsCisJMHhjNSwgMHhhMCwgMHhlYywgMHgyZSwgMHgzNiwgMHhjYSwgMHg1NSwgMHgzNCwgMHhjZSwgMHgzNywgMHhhMiwgMHhjZSwKKwkweGRlLCAweDg2LCAweDVkLCAweDk4LCAweDZkLCAweGYzLCAweDlhLCAweDBkLCAweDg2LCAweGFhLCAweDM0LCAweDM4LAorCTB4NzYsIDB4NjEsIDB4NGYsIDB4OGMsIDB4OWYsIDB4ZWQsIDB4YTAsIDB4OWEsIDB4MGQsIDB4YTIsIDB4MmUsIDB4NDMsCisJMHhjOCwgMHhkOCwgMHgxMCwgMHhkOCwgMHhkYiwgMHhhZSwgMHgwZSwgMHgyYywgMHg5NSwgMHhiNCwgMHhjZSwgMHg1ZiwKKwkweDA5LCAweGE3LCAweGVjLCAweDI5LCAweDQyLCAweGY4LCAweDMzLCAweDEyLCAweDhlLCAweGI0LCAweGMzLCAweGUzLAorCTB4NTksIDB4YTUsIDB4ZjYsIDB4OWQsIDB4MTYsIDB4MDMsIDB4NzgsIDB4MmEsIDB4MTYsIDB4ZTksIDB4ZGUsIDB4MjYsCisJMHg0MiwgMHhiMiwgMHg5NywgMHhlZSwgMHhiOSwgMHgzMiwgMHgxNCwgMHg3ZiwgMHgzMywgMHhhNiwgMHhjNywgMHhiNSwKKwkweDRhLCAweDBkLCAweDRhLCAweDIyLCAweDg5LCAweDVlLCAweDRkLCAweGQzLCAweDQ3LCAweDIwLCAweGQzLCAweDlhLAorCTB4MTAsIDB4NTUsIDB4MTksIDB4NzUsIDB4ZjYsIDB4NGQsIDB4YzIsIDB4NTQsIDB4OWYsIDB4MmMsIDB4MWIsIDB4NDAsCisJMHg2YiwgMHg1YiwgMHg2NCwgMHg3ZiwgMHg4ZiwgMHhhNCwgMHhjOSwgMHg4NCwgMHhmNSwgMHg4NCwgMHgzMywgMHhlMywKKwkweGMzLCAweGNhLCAweGMzLCAweGYzLCAweDdkLCAweDFkLCAweGNiLCAweGZhLCAweDMwLCAweDU2LCAweDI2LCAweGJkLAorCTB4NDAsIDB4YWUsIDB4MjksIDB4NDYsIDB4NjUsIDB4MWYsIDB4ZTEsIDB4ZmEsIDB4ZTYsIDB4YzMsIDB4OGMsIDB4YjMsCisJMHgyYywgMHg2YiwgMHg0NywgMHhhYywgMHhmYywgMHg3NSwgMHgyZiwgMHg1YSwgMHg4OCwgMHhjNywgMHg2ZSwgMHg0YywKKwkweGE1LCAweDE5LCAweDc3LCAweDE5LCAweDk4LCAweGE0LCAweDlhLCAweDQ4LCAweDFiLCAweDZhLCAweGM0LCAweDcxLAorCTB4OGEsIDB4NDMsIDB4MzMsIDB4NjksIDB4ZWUsIDB4ZmYsIDB4ZjQsIDB4OTEsIDB4OGMsIDB4N2IsIDB4ODgsIDB4ZmUsCisJMHgyZCwgMHg1NCwgMHgwZiwgMHhhNywgMHgyOCwgMHg3ZSwgMHhiMSwgMHg4YywgMHg3YiwgMHhjOSwgMHhlZSwgMHgyMSwKKwkweDdiLCAweDhkLCAweDNhLCAweGUzLCAweGU2LCAweDYxLCAweGM4LCAweDFlLCAweGMzLCAweDZiLCAweDVjLCAweDc3LAorCTB4MTgsIDB4NzUsIDB4OTQsIDB4ZjcsIDB4MGQsIDB4YWEsIDB4NzgsIDB4MTAsIDB4OGQsIDB4NDQsIDB4ZjQsIDB4OGIsCisJMHg4OCwgMHgwNCwgMHg1ZiwgMHgyNCwgMHg3ZCwgMHgwYywgMHg2YSwgMHhjMCwgMHg2ZSwgMHhiYiwgMHhkNiwgMHg3NiwKKwkweGMyLCAweGNjLCAweDczLCAweDBkLCAweDBkLCAweDRmLCAweDU1LCAweDdiLCAweDFkLCAweGRlLCAweGM5LCAweDQ1LAorCTB4ZWQsIDB4MWUsIDB4OTIsIDB4NDksIDB4ZjUsIDB4Y2YsIDB4MGIsIDB4YmEsIDB4OWEsIDB4OWEsIDB4YTAsIDB4ZTcsCisJMHhiNiwgMHgyYSwgMHhmZiwgMHg2NSwgMHg1ZiwgMHg3NSwgMHgxYywgMHgzMiwgMHhjNSwgMHgzNCwgMHhiMiwgMHhiZCwKKwkweDNmLCAweGY1LCAweGJlLCAweDQ5LCAweDM2LCAweDdhLCAweGZiLCAweGQ4LCAweDlmLCAweDc5LCAweGFmLCAweGM0LAorCTB4MjcsIDB4YmMsIDB4MWYsIDB4YzQsIDB4MmQsIDB4MmIsIDB4NDEsIDB4NzgsIDB4YjQsIDB4ODcsIDB4ZWEsIDB4ZWQsCisJMHgwZiwgMHg4NywgMHg0YywgMHhlZiwgMHhjNSwgMHgzOCwgMHhmNywgMHg4MSwgMHg5ZCwgMHhmOCwgMHgzZCwgMHhmYSwKKwkweGZkLCAweGU0LCAweDkwLCAweDhjLCAweDRkLCAweDg1LCAweDA2LCAweGI4LCAweDg2LCAweDFkLCAweDk4LCAweGQyLAorCTB4NmYsIDB4NDQsIDB4YWYsIDB4MjIsIDB4ZTEsIDB4ZWUsIDB4ZTgsIDB4NDksIDB4YjIsIDB4NDksIDB4ODksIDB4YzYsCisJMHgxYywgMHhhMiwgMHhkZiwgMHhkYywgMHhkMywgMHg3YSwgMHgwYywgMHhkYiwgMHg5NCwgMHg2OSwgMHhlZiwgMHgzYiwKKwkweDcxLCAweGE2LCAweDE3LCAweDRjLCAweGFmLCAweDJjLCAweDY5LCAweGI3LCAweDYyLCAweGViLCAweDZkLCAweDVjLAorCTB4NWIsIDB4ZDksIDB4ZmYsIDB4OWUsIDB4MTcsIDB4ZGIsIDB4ZWIsIDB4NzEsIDB4M2MsIDB4ZDcsIDB4ODAsIDB4ZTcsCisJMHg3MywgMHhhNiwgMHhlNywgMHhiNSwgMHhmNiwgMHgyOCwgMHhmYSwgMHg4NiwgMHgyYywgMHhiYywgMHhhYywgMHg5YiwKKwkweDAzLCAweDU1LCAweDY0LCAweGU3LCAweDA5LCAweGFhLCAweGFmLCAweGMyLCAweDZkLCAweGRjLCAweDRiLCAweDQwLAorCTB4YzQsIDB4ODEsIDB4NDgsIDB4M2YsIDB4ODEsIDB4Y2MsIDB4M2IsIDB4MjgsIDB4NzQsIDB4YTUsIDB4NmEsIDB4YTgsCisJMHg0ZSwgMHgzYiwgMHgyNywgMHgyYywgMHhmNywgMHhmNiwgMHg3NiwgMHgyNywgMHhkMSwgMHgwMCwgMHg2YywgMHgyOCwKKwkweGI0LCAweDkwLCAweGRjLCAweGEyLCAweGQ4LCAweDE0LCAweDkxLCAweGIxLCAweGIxLCAweGEwLCAweGUzLCAweGY5LAorCTB4YjQsIDB4MGYsIDB4YjcsIDB4MTcsIDB4ZTIsIDB4ODQsIDB4YmQsIDB4MTUsIDB4YTIsIDB4M2QsIDB4ODEsIDB4NTIsCisJMHgzYSwgMHg4MCwgMHg2ZiwgMHgxNCwgMHgxYSwgMHg0OSwgMHhkZSwgMHg0MSwgMHhkYywgMHg1OCwgMHgwOCwgMHhlMSwKKwkweDQ0LCAweDlhLCAweGYzLCAweGI3LCAweGUxLCAweGQ5LCAweDFhLCAweDZmLCAweDQ0LCAweDY3LCAweDQxLCAweGMzLAorCTB4NzQsIDB4MWEsIDB4OWUsIDB4MDcsIDB4ZTIsIDB4MjEsIDB4NzQsIDB4MTQsIDB4YTIsIDB4MjgsIDB4MTAsIDB4ODYsCisJMHhiYiwgMHg5NSwgMHhlNiwgMHhiYywgMHg5ZCwgMHg3NCwgMHhkMiwgMHg1MiwgMHgwOCwgMHg2MCwgMHg2OSwgMHg4NCwKKwkweDIyLCAweDcyLCAweGMxLCAweDI3LCAweDA2LCAweDA4LCAweDViLCAweDI1LCAweDBhLCAweGY1LCAweGI4LCAweDM4LAorCTB4Y2MsIDB4NzYsIDB4YWUsIDB4MTgsIDB4N2IsIDB4NzIsIDB4MGEsIDB4NDIsIDB4MDUsIDB4YWMsIDB4OTQsIDB4MDEsCisJMHgwYSwgMHhkNiwgMHg5MSwgMHg1NCwgMHg4MSwgMHhlOCwgMHgzZCwgMHhkOCwgMHg1ZSwgMHhlOSwgMHhlMSwgMHgyZSwKKwkweDJmLCAweDdjLCAweGM2LCAweDZmLCAweDJkLCAweGU5LCAweGU5LCAweGNhLCAweGUxLCAweDY5LCAweGVmLCAweDI3LAorCTB4NzEsIDB4OGUsIDB4NGQsIDB4OWYsIDB4YWUsIDB4NzksIDB4ZmQsIDB4MzAsIDB4MTAsIDB4MWQsIDB4NjcsIDB4ZGUsCisJMHhlYywgMHhkOCwgMHhjOCwgMHhmMSwgMHhiMCwgMHg0NSwgMHhjNiwgMHhhZiwgMHgyYywgMHhhYSwgMHg0MSwgMHg0MywKKwkweDUzLCAweGJjLCAweDU3LCAweGEwLCAweGY5LCAweDg4LCAweDBlLCAweDA1LCAweDQ5LCAweDVhLCAweGZiLCAweDk2LAorCTB4YzIsIDB4MGYsIDB4YWQsIDB4YWQsIDB4MGIsIDB4ODMsIDB4YjgsIDB4MzksIDB4NTIsIDB4OTEsIDB4ZDUsIDB4MzksCisJMHhkMiwgMHhlMSwgMHhlNCwgMHg3MCwgMHgwMywgMHg2NiwgMHg4OCwgMHgwNiwgMHg5NywgMHhlMSwgMHgzNiwgMHg4ZSwKKwkweDhkLCAweDU5LCAweGQ4LCAweGEwLCAweDliLCAweGRlLCAweGQ3LCAweGRhLCAweDk3LCAweGUzLCAweGZlLCAweGMzLAorCTB4ODMsIDB4NjcsIDB4ZGQsIDB4YTQsIDB4ZDcsIDB4NTksIDB4ZmQsIDB4MGUsIDB4M2MsIDB4M2EsIDB4OGUsIDB4YWYsCisJMHgzNSwgMHgwMCwgMHg4ZiwgMHgwNCwgMHhjMSwgMHgzZCwgMHg2YiwgMHgzNSwgMHg3NCwgMHgwMiwgMHg5MSwgMHhjZSwKKwkweDA3LCAweDEwLCAweDUxLCAweDM0LCAweGExLCAweGVhLCAweDJmLCAweDBiLCAweDI0LCAweGFiLCAweDhkLCAweGM4LAorCTB4ZDksIDB4NWIsIDB4ODAsIDB4MzMsIDB4NmUsIDB4ZjIsIDB4ZTAsIDB4ZGIsIDB4MGIsIDB4NGUsIDB4OTIsIDB4NTEsCisJMHgxMCwgMHhhNSwgMHg2MSwgMHgzNywgMHgxYywgMHhlNCwgMHgyNywgMHg5NywgMHgzNCwgMHg2YywgMHhhOCwgMHgyNSwKKwkweDU5LCAweDNiLCAweDg0LCAweDRjLCAweDdhLCAweDZlLCAweGMxLCAweGIxLCAweGExLCAweDc5LCAweDU5LCAweGY5LAorCTB4NzAsIDB4MTMsIDB4YzksIDB4ZjAsIDB4YTksIDB4MjEsIDB4NmIsIDB4OTcsIDB4MTYsIDB4MGIsIDB4OTAsIDB4YWMsCisJMHgxNSwgMHhhMiwgMHg2ZiwgMHg1ZSwgMHg0ZSwgMHgyYywgMHhiZiwgMHg3OSwgMHgzOSwgMHhkZCwgMHg4MSwgMHgzZCwKKwkweDMzLCAweDJjLCAweGI3LCAweGZmLCAweDFiLCAweDc5LCAweDRkLCAweGRiLCAweDc2LCAweGI3LCAweDYxLCAweDJjLAorCTB4OGEsIDB4ODYsIDB4YzMsIDB4NTcsIDB4NjUsIDB4YzcsIDB4ZjQsIDB4M2QsIDB4NDIsIDB4N2MsIDB4N2MsIDB4Y2YsCisJMHhiZiwgMHgzYSwgMHhkMiwgMHhmNywgMHhiZSwgMHhmMCwgMHgxMSwgMHgzZCwgMHgwYSwgMHhlOSwgMHhlNiwgMHgwMywKKwkweDE3LCAweDYzLCAweDc3LCAweDkyLCAweGM5LCAweDU1LCAweDE5LCAweDA3LCAweDQ5LCAweGM2LCAweGMxLCAweDcxLAorCTB4OTYsIDB4ZjUsIDB4YTcsIDB4NmIsIDB4YWUsIDB4OTAsIDB4N2MsIDB4NWYsIDB4MjcsIDB4NWMsIDB4NzYsIDB4NDMsCisJMHgyYywgMHg4YSwgMHg5YSwgMHhjMywgMHg2YSwgMHhiMiwgMHhjMSwgMHgxMSwgMHg0ZSwgMHhkNCwgMHgwYSwgMHg1MCwKKwkweDU1LCAweDgyLCAweDk2LCAweDFhLCAweDdjLCAweGM4LCAweDcyLCAweGQ2LCAweDQ5LCAweGNlLCAweGRmLCAweDFiLAorCTB4MjQsIDB4N2UsIDB4ZDYsIDB4ZDMsIDB4N2MsIDB4MWIsIDB4NDgsIDB4Y2UsIDB4NDksIDB4ZTIsIDB4ZmYsIDB4MTYsCisJMHg3YiwgMHhkZSwgMHg0NiwgMHg5YSwgMHg3NywgMHgwYiwgMHhkNSwgMHgxZSwgMHhkMywgMHhkZSwgMHg0YiwgMHg0NCwKKwkweDRmLCAweGY0LCAweDMzLCAweDVhLCAweDA4LCAweDhkLCAweDQ3LCAweDgyLCAweGVmLCAweDUzLCAweDhkLCAweDdkLAorCTB4YTMsIDB4M2QsIDB4NGUsIDB4YTEsIDB4NzEsIDB4NGMsIDB4ZmIsIDB4Y2YsIDB4YWIsIDB4MjQsIDB4ZWQsIDB4Y2IsCisJMHhmYSwgMHhjZCwgMHhkZiwgMHgwMiwgMHhmNywgMHgxYywgMHg0YywgMHhmNCwgMHg1MCwgMHgxZCwgMHhiMSwgMHg4NSwKKwkweDZhLCAweDI1LCAweDk5LCAweDcyLCAweDliLCAweDg5LCAweDFmLCAweGM0LCAweGQ1LCAweDY4LCAweDlkLCAweGUwLAorCTB4ZjgsIDB4NjcsIDB4OTIsIDB4MWYsIDB4OTYsIDB4YTksIDB4NGUsIDB4MGEsIDB4ODcsIDB4NjYsIDB4MTAsIDB4OTQsCisJMHhhNSwgMHhhMiwgMHg0YywgMHg3OCwgMHhiMCwgMHg1MSwgMHg3NiwgMHgxNCwgMHhjOSwgMHg1ZiwgMHg4MywgMHgzZCwKKwkweDg0LCAweGE3LCAweDlkLCAweDc4LCAweDMxLCAweGVmLCAweGM0LCAweDJiLCAweGU5LCAweDJkLCAweDM4LCAweDUwLAorCTB4ZjIsIDB4MTAsIDB4NmUsIDB4MzYsIDB4M2QsIDB4Y2UsIDB4NTUsIDB4MTMsIDB4ZWUsIDB4NGEsIDB4NGMsIDB4NWUsCisJMHg4NiwgMHhhZSwgMHg5MSwgMHg4NywgMHg1MSwgMHg5ZCwgMHg3MSwgMHg3NiwgMHg1MywgMHgzZSwgMHhkNSwgMHg2ZiwKKwkweDIxLCAweGI5LCAweDZjLCAweDI4LCAweGYyLCAweGZkLCAweDQ2LCAweDY0LCAweGQyLCAweDI5LCAweGMyLCAweDQwLAorCTB4NjEsIDB4YWEsIDB4ODEsIDB4OWMsIDB4OTgsIDB4NjgsIDB4NjgsIDB4YjQsIDB4ZmIsIDB4YmEsIDB4MzksIDB4YmEsCisJMHg5NiwgMHgyYiwgMHg3ZCwgMHhiMSwgMHhkZiwgMHg3YywgMHhjNywgMHg1YywgMHg5ZiwgMHhiOSwgMHgwZiwgMHhmYiwKKwkweGIyLCAweDNkLCAweDg0LCAweDRkLCAweGI3LCAweDUwLCAweDdjLCAweGFmLCAweGQwLCAweDM4LCAweDFkLCAweGVmLAorCTB4YzYsIDB4YmUsIDB4YmMsIDB4NzEsIDB4MzUsIDB4N2UsIDB4NGMsIDB4ZGEsIDB4ZjEsIDB4YTMsIDB4MWYsIDB4NTUsCisJMHhlZCwgMHhiYywgMHg3ZiwgMHhiNSwgMHgwNSwgMHg3NywgMHhhNSwgMHg4MSwgMHhmNywgMHhkMiwgMHhkYywgMHg0ZiwKKwkweDI0LCAweDRjLCAweDQxLCAweGY5LCAweGUwLCAweDkwLCAweGNlLCAweDM5LCAweDc0LCAweDBiLCAweDk2LCAweGU2LAorCTB4MmQsIDB4ZTQsIDB4NzUsIDB4MGIsIDB4NjcsIDB4NzUsIDB4OGQsIDB4NzIsIDB4MzQsIDB4ZTcsIDB4ZWEsIDB4MDEsCisJMHhhMSwgMHg1MSwgMHg3ZSwgMHgzNiwgMHg5ZCwgMHhmZCwgMHg4OCwgMHhiNCwgMHhiMywgMHg4ZSwgMHgxZSwgMHg5ZSwKKwkweGRiLCAweDg3LCAweGVhLCAweGI3LCAweGY3LCAweGExLCAweDY2LCAweGQyLCAweDBlLCAweDNjLCAweDQ1LCAweDhhLAorCTB4NzgsIDB4M2UsIDB4MWIsIDB4MGUsIDB4YmQsIDB4MDcsIDB4NmIsIDB4OTcsIDB4YzMsIDB4NTAsIDB4MTMsIDB4NGUsCisJMHgwNywgMHhlZiwgMHhjZiwgMHhmMCwgMHhmZSwgMHg5NCwgMHhkNiwgMHhiZCwgMHhkNCwgMHhhMSwgMHhlYSwgMHg0NSwKKwkweGQxLCAweGRjLCAweGYzLCAweDE2LCAweGNhLCAweDFiLCAweDY1LCAweGE4LCAweGExLCAweGQ3LCAweDEwLCAweDg5LAorCTB4NzYsIDB4ZjIsIDB4MWUsIDB4NDQsIDB4YTksIDB4OTIsIDB4YmIsIDB4OTcsIDB4Y2QsIDB4ZTUsIDB4NmUsIDB4MmQsCisJMHhlZiwgMHgxNSwgMHhlMSwgMHg2MSwgMHgwOSwgMHgxMywgMHg1MywgMHg5NiwgMHgyOSwgMHg5MSwgMHhmZCwgMHg0ZSwKKwkweGQxLCAweDljLCAweDNmLCAweGNlLCAweGVlLCAweDQyLCAweDM2LCAweDY2LCAweDU5LCAweGI3LCAweGM3LCAweGI1LAorCTB4YmUsIDB4MDYsIDB4MDcsIDB4ZmUsIDB4OTAsIDB4MzIsIDB4MzksIDB4YzgsIDB4ZTYsIDB4NTMsIDB4ZTQsIDB4NmIsCisJMHhhMSwgMHgxZCwgMHhlZCwgMHhhNiwgMHhlNSwgMHhiNiwgMHhlYiwgMHgwYSwgMHhlZSwgMHg0ZiwgMHg3NiwgMHg4OSwKKwkweDk2LCAweGMyLCAweDE2LCAweGIxLCAweDljLCAweGIwLCAweDViLCAweGU4LCAweGQ4LCAweDY2LCAweGQxLCAweDc0LAorCTB4YjQsIDB4ODIsIDB4ZGQsIDB4MjIsIDB4ODUsIDB4Y2YsIDB4N2EsIDB4YTgsIDB4MzcsIDB4YTcsIDB4MmQsIDB4YTQsCisJMHg4OSwgMHhhZiwgMHhhNywgMHhmZSwgMHgwZSwgMHg1ZiwgMHhhYywgMHg4YiwgMHg3ZSwgMHg1YywgMHhkNywgMHhjZSwKKwkweGJlLCAweGY4LCAweDMwLCAweDhlLCAweGE1LCAweGQ5LCAweGNlLCAweGZiLCAweGIxLCAweDg3LCAweGU0LCAweGIzLAorCTB4NjIsIDB4ODgsIDB4ZjcsIDB4YzMsIDB4ZDQsIDB4YjMsIDB4ODMsIDB4MDgsIDB4ZjcsIDB4YmQsIDB4MmEsIDB4ZDQsCisJMHg3MiwgMHgwMSwgMHhjZCwgMHg3YSwgMHg4ZCwgMHg4MywgMHhlMywgMHhhYiwgMHgzYSwgMHhkMCwgMHhlNCwgMHhhOCwKKwkweGQwLCAweDlmLCAweGM4LCAweDgzLCAweGUyLCAweDY5LCAweDg1LCAweDg3LCAweDk1LCAweGY5LCAweGE1LCAweDY0LAorCTB4YWIsIDB4YTYsIDB4ZTcsIDB4NTIsIDB4YmMsIDB4YjksIDB4YmYsIDB4MWEsIDB4MWIsIDB4YzQsIDB4MDcsIDB4ZDMsCisJMHgyMSwgMHg3OCwgMHgwZiwgMHgyNywgMHgxNywgMHhmYSwgMHhkMSwgMHgyMSwgMHhkZSwgMHhiMywgMHhlYiwgMHhjNSwKKwkweDRlLCAweGYxLCAweDRlLCAweGJlLCAweDViLCAweDVjLCAweDllLCAweGU4LCAweDQyLCAweDY0LCAweGY4LCAweDNlLAorCTB4ZjEsIDB4ZjYsIDB4MDQsIDB4ZDMsIDB4ZDksIDB4MjMsIDB4Y2UsIDB4NGYsIDB4NzMsIDB4OWYsIDB4ZDQsIDB4YzIsCisJMHgxZSwgMHg5ZCwgMHhmYiwgMHhhMiwgMHg4YiwgMHhhYiwgMHhlMCwgMHhiNywgMHg3MCwgMHg0YywgMHg2NywgMHg3ZCwKKwkweDcyLCAweDlmLCAweGIwLCAweGQyLCAweDVmLCAweGRhLCAweDEwLCAweGNmLCAweDU5LCAweDRlLCAweDhkLCAweDdiLAorCTB4YzUsIDB4NDEsIDB4OWIsIDB4ZGYsIDB4MjksIDB4YzIsIDB4ZDEsIDB4ZDMsIDB4MTMsIDB4NWIsIDB4YzQsIDB4ZjEsCisJMHg3YywgMHg4NSwgMHhkNywgMHhjOSwgMHgzYywgMHhkYiwgMHhhZiwgMHg0YywgMHgzYSwgMHhmZSwgMHg2MiwgMHg5ZSwKKwkweDM2LCAweGExLCAweGI0LCAweDA3LCAweGUxLCAweGI2LCAweGZiLCAweDUxLCAweDE2LCAweDQ2LCAweGY0LCAweDQ4LAorCTB4ZTgsIDB4NjUsIDB4MDQsIDB4ZTEsIDB4MmMsIDB4YjIsIDB4NmQsIDB4NWIsIDB4NzgsIDB4NWEsIDB4NzcsIDB4YzEsCisJMHgzMSwgMHgyMiwgMHg5MywgMHg4YywgMHhjOCwgMHg5NiwgMHhmYywgMHgyZSwgMHg0OCwgMHg5MywgMHg1YywgMHgxYiwKKwkweDdjLCAweGJkLCAweDhhLCAweGZiLCAweDE0LCAweDIxLCAweDg5LCAweGJmLCAweDdmLCAweGQxLCAweGU2LCAweDVjLAorCTB4OTQsIDB4MGYsIDB4YjgsIDB4YmYsIDB4ZmUsIDB4NTcsIDB4ZWUsIDB4OGEsIDB4ZWQsIDB4YjEsIDB4NWQsIDB4Y2QsCisJMHhmNywgMHhjNCwgMHgyOSwgMHhkNywgMHhiNiwgMHg3MywgMHgyZiwgMHhkYywgMHg4MywgMHg5OSwgMHg5YywgMHg5YiwKKwkweDViLCAweDE0LCAweDFlLCAweDc3LCAweGJiLCAweDg1LCAweDBiLCAweGJhLCAweDkzLCAweGVhLCAweDk3LCAweDg3LAorCTB4MjgsIDB4NDcsIDB4NDksIDB4OTAsIDB4YjUsIDB4M2IsIDB4NTAsIDB4MWMsIDB4NzMsIDB4NGEsIDB4YmMsIDB4NWYsCisJMHhmNSwgMHhiMywgMHgxOCwgMHhmNywgMHgxMCwgMHg4MCwgMHg0MywgMHhjNCwgMHhjMywgMHhmNywgMHg3MywgMHgyMSwKKwkweDZjLCAweGEyLCAweGJhLCAweDJiLCAweDY0LCAweGQ3LCAweDE4LCAweGJmLCAweDg3LCAweDUzLCAweDM5LCAweDg3LAorCTB4YTAsIDB4YmEsIDB4YzIsIDB4OTEsIDB4NTgsIDB4NmQsIDB4ZTEsIDB4NGEsIDB4NWIsIDB4MjQsIDB4Y2EsIDB4N2QsCisJMHg2OCwgMHg4NSwgMHg3MiwgMHhkNiwgMHhkZSwgMHg3YywgMHgxZCwgMHg3ZSwgMHg5NiwgMHhhYiwgMHhjMywgMHgyYiwKKwkweDM5LCAweDBiLCAweDA3LCAweDYzLCAweDgzLCAweDNkLCAweDVlLCAweDhhLCAweDk1LCAweGNiLCAweDYyLCAweDJlLAorCTB4ZWMsIDB4ODgsIDB4OTgsIDB4OGEsIDB4MTcsIDB4NTEsIDB4NWMsIDB4NDgsIDB4NWMsIDB4ODcsIDB4NTQsIDB4MjAsCisJMHhkYywgMHgzOSwgMHg4OCwgMHg3YSwgMHhiYywgMHg5MSwgMHgwMywgMHg2MSwgMHgwOSwgMHg3OCwgMHg5NiwgMHhkMiwKKwkweDFjLCAweDZmLCAweGM3LCAweGNjLCAweDdlLCAweDE3LCAweGUxLCAweGQ4LCAweDlmLCAweDBiLCAweGM0LCAweDZiLAorCTB4NjAsIDB4YjksIDB4Y2YsIDB4YzQsIDB4MjksIDB4NTcsIDB4MTcsIDB4ZWEsIDB4ZDAsIDB4OTUsIDB4YWIsIDB4NDcsCisJMHgwZiwgMHhlNSwgMHhhYywgMHg3NSwgMHhhYiwgMHhlMywgMHg3OCwgMHgyYiwgMHhlYiwgMHgxMywgMHgyYiwgMHhiMywKKwkweDgzLCAweDNkLCAweDBhLCAweGNkLCAweGU5LCAweDZhLCAweDUzLCAweGZiLCAweDlmLCAweDIyLCAweGUwLCAweDI2LAorCTB4MjMsIDB4NGMsIDB4ZTYsIDB4OGUsIDB4MDcsIDB4ZmMsIDB4MTQsIDB4NzcsIDB4OGYsIDB4OGIsIDB4NGYsIDB4ZjEsCisJMHgwNCwgMHhkOSwgMHhlMywgMHgzZCwgMHhiYSwgMHg1YSwgMHhiZSwgMHhlNCwgMHg4OCwgMHg5YywgMHhkZCwgMHgwOCwKKwkweDc1LCAweGUwLCAweDE2LCAweDYxLCAweDQ2LCAweDZiLCAweDI5LCAweDllLCAweDM0LCAweDU0LCAweDYyLCAweDg1LAorCTB4MTksIDB4MTEsIDB4MzIsIDB4NjEsIDB4NzMsIDB4MjcsIDB4M2MsIDB4OWEsIDB4ODksIDB4Y2UsIDB4NzYsIDB4OTYsCisJMHhhOSwgMHgwNywgMHg5ZSwgMHhhMywgMHg2NCwgMHg0NywgMHhkMiwgMHgxNywgMHhmYiwgMHhmYiwgMHg3NSwgMHg3OCwKKwkweDlkLCAweGYyLCAweGU1LCAweGI5LCAweDFjLCAweGY3LCAweGU2LCAweGRkLCAweGM2LCAweGJiLCAweDk0LCAweDAzLAorCTB4NWUsIDB4OGEsIDB4MGQsIDB4ODYsIDB4MzgsIDB4ZjYsIDB4ZTcsIDB4NjMsIDB4ZjgsIDB4ZTcsIDB4NjQsIDB4OTYsCisJMHg4ZCwgMHgzZSwgMHg1YSwgMHhmMywgMHgyZSwgMHhjMSwgMHhlYiwgMHgyMCwgMHhiOSwgMHhjNCwgMHhlMCwgMHhiZSwKKwkweDljLCAweGNkLCAweDBmLCAweGM1LCAweDYzLCAweGU2LCAweGU5LCAweGZmLCAweDI3LCAweGVkLCAweDhmLCAweDU0LAorCTB4YzEsIDB4NWIsIDB4NGYsIDB4YmEsIDB4OWMsIDB4ZWYsIDB4NjksIDB4NWUsIDB4ZGIsIDB4Y2YsIDB4ZTQsIDB4N2EsCisJMHhhNiwgMHg4MiwgMHgwZiwgMHhkZCwgMHg0NiwgMHhiNSwgMHg3OCwgMHgyMSwgMHhjNywgMHgzNiwgMHg2NywgMHhlMSwKKwkweDE5LCAweDVkLCAweGE3LCAweGRhLCAweDg1LCAweDZiLCAweGYyLCAweDdlLCAweGFhLCAweDVmLCAweGI4LCAweGNmLAorCTB4NjQsIDB4N2EsIDB4Y2UsIDB4MTAsIDB4ODUsIDB4ZmIsIDB4NzMsIDB4NTgsIDB4MmIsIDB4YzMsIDB4YjEsIDB4YTIsCisJMHgwYSwgMHhlMywgMHg5OCwgMHg3MCwgMHgzYSwgMHgwOSwgMHg3MywgMHg3MCwgMHhhYywgMHg2NSwgMHg3ZiwgMHg1MiwKKwkweDBjLCAweDZkLCAweDgyLCAweGViLCAweGNmLCAweDRlLCAweDk4LCAweGI2LCAweDFmLCAweDU3LCAweDhiLCAweGZiLAorCTB4YzksIDB4NDYsIDB4NWUsIDB4OGMsIDB4NTUsIDB4NjEsIDB4ODIsIDB4ZWEsIDB4MWYsIDB4YzksIDB4MzAsIDB4M2QsCisJMHhkZiwgMHhhNSwgMHhlNywgMHgxMywgMHhhMywgMHhkOCwgMHgxNywgMHg4NCwgMHhlMywgMHg0ZiwgMHgxNCwgMHhmYywKKwkweDE5LCAweGRlLCAweDc0LCAweGM5LCAweDc0LCAweDFkLCAweDllLCAweGVlLCAweGI4LCAweGU5LCAweGRkLCAweDE4LAorCTB4YWYsIDB4MTYsIDB4YjcsIDB4ZTYsIDB4NWEsIDB4ZjAsIDB4ZmUsIDB4NTgsIDB4MWQsIDB4ZDksIDB4NzcsIDB4M2QsCisJMHg5NiwgMHg4YywgMHgwNCwgMHhmMSwgMHgzNiwgMHhkMSwgMHgzMiwgMHg0MCwgMHhiNCwgMHg3YywgMHhkMiwgMHg2NiwKKwkweDBlLCAweDM0LCAweDQwLCAweGVkLCAweGE3LCAweGJhLCAweGE4LCAweDliLCAweGZiLCAweGNkLCAweDRmLCAweGViLAorCTB4NmEsIDB4ZTcsIDB4NmQsIDB4YzIsIDB4MGIsIDB4MmQsIDB4OTIsIDB4MjQsIDB4ZDksIDB4NWIsIDB4ZDYsIDB4YjAsCisJMHhkZSwgMHhhYywgMHhmYiwgMHhjMCwgMHhmZCwgMHhhMywgMHgzYiwgMHg3MCwgMHg2OCwgMHg4NiwgMHg2OSwgMHg3MSwKKwkweDFiLCAweGNiLCAweGE3LCAweGY5LCAweDUzLCAweDM2LCAweGFlLCAweGIzLCAweDNmLCAweGJkLCAweDczLCAweDlmLAorCTB4MzAsIDB4NDIsIDB4ZjYsIDB4ZTcsIDB4YTcsIDB4NmIsIDB4NDIsIDB4ZDMsIDB4ZGMsIDB4YTcsIDB4MGUsIDB4OWIsCisJMHg2ZSwgMHhmMSwgMHg1MywgMHgxNywgMHhmNywgMHhhYiwgMHg5MywgMHhlMCwgMHhmZiwgMHg1NywgMHg1ZCwgMHg5NSwKKwkweDdlLCAweGRmLCAweDFkLCAweDMwLCAweGVkLCAweDFlLCAweGNhLCAweDE1LCAweGJiLCAweDk3LCAweDFkLCAweDIyLAorCTB4MzcsIDB4OTAsIDB4ODksIDB4M2YsIDB4OTksIDB4MzAsIDB4NTcsIDB4MjAsIDB4NDYsIDB4MDUsIDB4N2MsIDB4YmQsCisJMHg2YywgMHgyZSwgMHgzMSwgMHg3YSwgMHhhOCwgMHg0NiwgMHg5MCwgMHg4OSwgMHg1ZiwgMHgxMywgMHhmYiwgMHhkYSwKKwkweDA1LCAweDBlLCAweDY5LCAweDA2LCAweDVlLCAweGNiLCAweDczLCAweDJjLCAweDc3LCAweGUyLCAweGZiLCAweDY5LAorCTB4MzUsIDB4OTQsIDB4MTIsIDB4ZTEsIDB4Y2UsIDB4NWIsIDB4ODQsIDB4ODQsIDB4NTAsIDB4NDMsIDB4MGYsIDB4MGUsCisJMHg1MSwgMHg1ZSwgMHg5OSwgMHg0ZSwgMHg3MywgMHgxZSwgMHg3MSwgMHhkYSwgMHhlNywgMHgwNSwgMHg2YSwgMHgyOSwKKwkweDBlLCAweDdkLCAweDM4LCAweDU0LCAweDg5LCAweGZiLCAweDg1LCAweGI4LCAweGJhLCAweGZmLCAweGY3LCAweDQ4LAorCTB4YTcsIDB4NGYsIDB4MTcsIDB4NzgsIDB4NGUsIDB4MTMsIDB4OWYsIDB4YWMsIDB4NjYsIDB4MWYsIDB4NTYsIDB4YTMsCisJMHgyOSwgMHhlOSwgMHg1ZSwgMHg4NCwgMHhhNiwgMHgzOCwgMHhiNiwgMHhkMCwgMHg3MiwgMHhiNCwgMHhkNiwgMHg5MSwKKwkweGFjLCAweDFiLCAweGRkLCAweGYxLCAweDJlLCAweGQxLCAweDUzLCAweGZjLCAweDY3LCAweGJjLCAweDI3LCAweGExLAorCTB4MmMsIDB4MzAsIDB4MzYsIDB4OGIsIDB4ZjUsIDB4OTMsIDB4ZGMsIDB4NTMsIDB4ZGMsIDB4MjIsIDB4YmEsIDB4OGIsCisJMHhkYywgMHg1NywgMHgxYywgMHgxMCwgMHhiZiwgMHg1ZiwgMHg2NCwgMHg5ZiwgMHg5ZiwgMHhlZiwgMHgyZiwgMHhjZSwKKwkweGViLCAweDlmLCAweGZiLCAweDhhLCAweGE2LCAweGU3LCAweDA1LCAweDkyLCAweGZkLCAweDAzLCAweDM5LCAweDhlLAorCTB4YzksIDB4OGUsIDB4ZmIsIDB4ZmQsIDB4NjgsIDB4YzMsIDB4ODQsIDB4MGIsIDB4OWUsIDB4ZDMsIDB4ZjEsIDB4YWYsCisJMHhlMCwgMHg3NiwgMHhjMiwgMHgwNywgMHg0YiwgMHhiNCwgMHg4YSwgMHhmZSwgMHhkNiwgMHg0ZCwgMHg0OCwgMHg0OCwKKwkweGI0LCAweDkxLCAweGQwLCAweDE3LCAweGIwLCAweDRlLCAweDdiLCAweDI5LCAweDllLCAweDY1LCAweGFjLCAweGJlLAorCTB4MDAsIDB4ZWIsIDB4OTIsIDB4ZWQsIDB4Y2QsIDB4MmUsIDB4ZjcsIDB4MjgsIDB4MGUsIDB4OWIsIDB4OTQsIDB4NTcsCisJMHgzYywgMHg5OCwgMHhjZSwgMHgyZCwgMHhhMiwgMHhkYSwgMHhjMCwgMHhjMiwgMHg3ZSwgMHhiZCwgMHgwNiwgMHg1NSwKKwkweDc2LCAweDBjLCAweGYwLCAweDEwLCAweDllLCAweDg0LCAweGVjLCAweGEzLCAweDc5LCAweGQyLCAweGMzLCAweDMyLAorCTB4YmMsIDB4NzQsIDB4ZWYsIDB4OGMsIDB4NGUsIDB4NzIsIDB4NjksIDB4YWYsIDB4Y2MsIDB4ZGQsIDB4M2MsIDB4YjEsCisJMHgxMiwgMHgwNywgMHhjOSwgMHhlMywgMHg2YiwgMHhiNCwgMHgyOCwgMHg4NiwgMHgxNCwgMHgxZiwgMHhjNSwgMHg5YSwKKwkweDNiLCAweGU2LCAweGU2LCAweGY0LCAweGQwLCAweDYwLCAweDVlLCAweGFmLCAweGJmLCAweGFhLCAweGEyLCAweDg3LAorCTB4MzUsIDB4NzIsIDB4YTUsIDB4MDYsIDB4OTMsIDB4Y2QsIDB4NmEsIDB4NWEsIDB4NmIsIDB4NDcsIDB4ZmIsIDB4MTYsCisJMHg3NCwgMHgwZSwgMHhmOSwgMHhjNCwgMHgyYiwgMHhlOSwgMHhiYiwgMHhhZCwgMHg1MCwgMHgxZCwgMHg4ZCwgMHgyMywKKwkweDliLCAweDc1LCAweGNmLCAweGQxLCAweGRiLCAweDM0LCAweDIxLCAweGYzLCAweDU4LCAweGVlLCAweDc5LCAweGUwLAorCTB4YzEsIDB4OWMsIDB4ODQsIDB4YzAsIDB4ZGMsIDB4ZjUsIDB4ZjgsIDB4NDQsIDB4MDgsIDB4N2EsIDB4NmIsIDB4MzUsCisJMHg1MCwgMHgyZiwgMHhlOCwgMHgxYSwgMHhjZiwgMHhjZCwgMHg2YiwgMHhjOCwgMHhhOCwgMHgyMywgMHgzZiwgMHhiOSwKKwkweDMzLCAweDllLCAweGMwLCAweGJiLCAweDU5LCAweDI3LCAweDM2LCAweDUyLCAweDllLCAweGJmLCAweDMxLCAweDZkLAorCTB4ZTAsIDB4NDIsIDB4MjksIDB4NjAsIDB4Y2YsIDB4MjEsIDB4MTksIDB4ZjMsIDB4ZTMsIDB4OWMsIDB4MzQsIDB4Y2UsCisJMHg4MywgMHhjOSwgMHg4OSwgMHgyZiwgMHhkMiwgMHgxNywgMHgyMCwgMHg5YSwgMHg3ZiwgMHg0MiwgMHhkZiwgMHhmOSwKKwkweGRlLCAweDQ1LCAweGJiLCAweDNmLCAweDcwLCAweGVhLCAweDlhLCAweGJhLCAweDRhLCAweDFhLCAweGUxLCAweDllLAorCTB4NTIsIDB4MjUsIDB4MTcsIDB4NzQsIDB4ZTgsIDB4YWMsIDB4NGIsIDB4M2YsIDB4NjYsIDB4NDcsIDB4NGQsIDB4NWMsCisJMHg1OCwgMHg1ZCwgMHg4YiwgMHg0ZiwgMHg0NiwgMHg5YiwgMHg3MCwgMHg3ZiwgMHhjZSwgMHg4YiwgMHg0YiwgMHhhMywKKwkweDE2LCAweDU2LCAweGI2LCAweGUxLCAweGVlLCAweDIwLCAweDYxLCAweGIxLCAweDVhLCAweGYyLCAweGZiLCAweGQ3LAorCTB4YTgsIDB4ZjYsIDB4YTEsIDB4NzgsIDB4NGEsIDB4OTQsIDB4NDYsIDB4MTIsIDB4MWIsIDB4YzgsIDB4YWUsIDB4YTMsCisJMHgzMSwgMHhhNCwgMHg2ZSwgMHg4YSwgMHg0NywgMHg0MiwgMHgxNywgMHhmMSwgMHgzZCwgMHg4YiwgMHg2MiwgMHhiMSwKKwkweGUyLCAweDMwLCAweGJhLCAweDg0LCAweGQzLCAweGRlLCAweDY3LCAweGRjLCAweDYyLCAweGVmLCAweDRiLCAweDRhLAorCTB4OTMsIDB4MDMsIDB4YzIsIDB4NTEsIDB4YmMsIDB4ZDYsIDB4YWYsIDB4YmYsIDB4MmMsIDB4MGYsIDB4NzEsIDB4ZWUsCisJMHhlMSwgMHgxZSwgMHhjNiwgMHg4OCwgMHhlNSwgMHhkMiwgMHhiOCwgMHg1NywgMHhiMywgMHg1OSwgMHhlYywgMHg5ZCwKKwkweGI4LCAweDlhLCAweDliLCAweGFlLCAweGU2LCAweGEzLCAweGRkLCAweDczLCAweDc5LCAweDY4LCAweDMwLCAweGZmLAorCTB4OGIsIDB4MmYsIDB4ZTAsIDB4YTgsIDB4ZDAsIDB4ZGMsIDB4N2UsIDB4MDcsIDB4ZTcsIDB4MWYsIDB4OGYsIDB4NzgsCisJMHg5MywgMHhjYywgMHg2MSwgMHgxZiwgMHhmOSwgMHhlMCwgMHg0OSwgMHhmZCwgMHg3NCwgMHg5MCwgMHgzMiwgMHgwNCwKKwkweDljLCAweGFkLCAweDAyLCAweDBmLCAweGYyLCAweDU5LCAweDkzLCAweDgwLCAweDg1LCAweGNkLCAweDdhLCAweGM1LAorCTB4MWUsIDB4ZGEsIDB4ZGEsIDB4NWQsIDB4ZTgsIDB4YTMsIDB4OWMsIDB4ZTQsIDB4OGEsIDB4ZjksIDB4YzgsIDB4ZDcsCisJMHgxNSwgMHhiYywgMHhhYSwgMHhiMywgMHgwZCwgMHg2ZiwgMHg5ZSwgMHhjYiwgMHg0OSwgMHhiYywgMHg3ZiwgMHg1ZSwKKwkweGQ5LCAweGViLCAweGZlLCAweDdjLCAweGRmLCAweDdiLCAweGRlLCAweDM2LCAweDc1LCAweDI0LCAweDE3LCAweGMyLAorCTB4ZmIsIDB4NzYsIDB4NWMsIDB4YTMsIDB4ZmEsIDB4NDEsIDB4YTYsIDB4ZGEsIDB4NjEsIDB4MjMsIDB4MTIsIDB4MGIsCisJMHg1NCwgMHg2ZSwgMHg2ZCwgMHgxMCwgMHhmNiwgMHgzNiwgMHhmMSwgMHhlZiwgMHhkYiwgMHhmYiwgMHg3MCwgMHhkZiwKKwkweDg4LCAweDg0LCAweDZhLCAweDhkLCAweGUzLCAweGFjLCAweDg5LCAweDQzLCAweDc1LCAweDFjLCAweGE3LCAweGJhLAorCTB4YjAsIDB4NmIsIDB4YzQsIDB4MjMsIDB4Y2UsIDB4ZTQsIDB4OWMsIDB4NzgsIDB4YTIsIDB4ZmIsIDB4MTEsIDB4MmMsCisJMHg2OCwgMHhiZCwgMHgwNywgMHhiMCwgMHg2ZCwgMHg5MCwgMHhiZiwgMHg3ZiwgMHgwYiwgMHhhOSwgMHg0NSwgMHhiYywKKwkweDNlLCAweGY3LCAweGRhLCAweDA0LCAweDdjLCAweGFkLCAweGNjLCAweDA3LCAweGJjLCAweGVmLCAweGQzLCAweGZjLAorCTB4ZGIsIDB4ODYsIDB4OWMsIDB4ZTIsIDB4NjIsIDB4ZmEsIDB4M2YsIDB4NWIsIDB4MjcsIDB4MDIsIDB4OGMsIDB4MTMsCisJMHhmOCwgMHg1ZSwgMHgwZCwgMHhjYywgMHgzYSwgMHgxZSwgMHhjYiwgMHgzYSwgMHhmNCwgMHg1MSwgMHg2ZCwgMHhkYSwKKwkweDg3LCAweDIxLCAweGEyLCAweGViLCAweDljLCAweDNkLCAweGQ3LCAweDk1LCAweDM5LCAweGZhLCAweDdkLCAweGEyLAorCTB4MzYsIDB4MjMsIDB4OWIsIDB4NDEsIDB4YTIsIDB4NDUsIDB4NTksIDB4ZGQsIDB4OGQsIDB4ZGEsIDB4ZTIsIDB4YjUsCisJMHhmOSwgMHhiNiwgMHhjNiwgMHhjMywgMHhmZCwgMHg0YSwgMHhkMiwgMHgxNSwgMHhlNSwgMHg4NCwgMHg1ZSwgMHhiYywKKwkweDliLCAweDE2LCAweDc4LCAweGM3LCAweGI2LCAweGMxLCAweDVlLCAweDM0LCAweGU1LCAweDZiLCAweDAwLCAweDNiLAorCTB4ODYsIDB4ZjAsIDB4YjgsIDB4YWYsIDB4NTcsIDB4NmMsIDB4NWIsIDB4ZWEsIDB4YzMsIDB4MDMsIDB4YzQsIDB4NGIsCisJMHgwZCwgMHhmMSwgMHhmMiwgMHg2MSwgMHg2YywgMHgyOSwgMHhhZCwgMHhjMywgMHhkNywgMHhmZSwgMHg5ZCwgMHgzYywKKwkweDc3LCAweGQ2LCAweDY4LCAweDZlLCAweDJlLCAweDRhLCAweDE4LCAweDdlLCAweGFlLCAweGY3LCAweDIyLCAweGQ4LAorCTB4MzksIDB4MTIsIDB4ZTksIDB4ZjEsIDB4NDksIDB4NmMsIDB4ODcsIDB4MTEsIDB4ZGMsIDB4M2IsIDB4NzksIDB4MmIsCisJMHhkZCwgMHhlNywgMHhiOSwgMHg4MiwgMHhiOCwgMHgyYiwgMHhlMywgMHgxNCwgMHg2ZiwgMHg1MSwgMHhiZCwgMHg3NCwKKwkweDJhLCAweDJkLCAweDJkLCAweDcyLCAweGUwLCAweDM5LCAweGViLCAweDg5LCAweGMwLCAweDJlLCAweGRjLCAweGE0LAorCTB4NzcsIDB4NjEsIDB4M2IsIDB4ZDksIDB4NjAsIDB4NDcsIDB4ZDMsIDB4MmUsIDB4OGMsIDB4OTIsIDB4MGQsIDB4NmMsCisJMHhhYiwgMHhhNywgMHgxYSwgMHgyZSwgMHg1NiwgMHhiMiwgMHg3YSwgMHgwMywgMHgyYywgMHg0NywgMHg4MSwgMHg0ZSwKKwkweGJhLCAweDVlLCAweDQ3LCAweDc1LCAweDlkLCAweDE0LCAweDIzLCAweDZiLCAweDIzLCAweGJmLCAweDkwLCAweDM1LAorCTB4MzUsIDB4OTcsIDB4YzQsIDB4ZWYsIDB4ZDgsIDB4NmIsIDB4ZDYsIDB4NTEsIDB4OWUsIDB4NzYsIDB4MzEsIDB4M2UsCisJMHhmMCwgMHgzMywgMHg0ZSwgMHhmOCwgMHgyMiwgMHgzZCwgMHhhNiwgMHg1NSwgMHhhNSwgMHg2OSwgMHhkMSwgMHg4ZCwKKwkweDUyLCAweDUzLCAweDZlLCAweDg2LCAweDZjLCAweDc2LCAweDdkLCAweGViLCAweGI1LCAweGNmLCAweGNkLCAweGNiLAorCTB4NDgsIDB4ODcsIDB4YmIsIDB4NzUsIDB4Y2EsIDB4MmEsIDB4MmIsIDB4ODMsIDB4NTAsIDB4NWEsIDB4YWYsIDB4ZDUsCisJMHhmZCwgMHhmYywgMHgxYywgMHg0YywgMHg3MywgMHgyNSwgMHhhZSwgMHg4NSwgMHhhNCwgMHg4OCwgMHg3MiwgMHgzNywKKwkweDJlLCAweGQwLCAweDFhLCAweDQxLCAweDZjLCAweDJkLCAweDc2LCAweGExLCAweDc3LCAweGM0LCAweGYxLCAweDE5LAorCTB4M2UsIDB4ZjEsIDB4YjMsIDB4MmQsIDB4N2YsIDB4YzYsIDB4ZmYsIDB4OGUsIDB4OTEsIDB4NDgsIDB4YTcsIDB4NzcsCisJMHg4ZSwgMHhmZiwgMHhlZCwgMHg5MywgMHg5ZiwgMHhjZCwgMHgzNSwgMHg5MCwgMHhlMSwgMHhiYywgMHhjYSwgMHhmMywKKwkweGYxLCAweGI5LCAweGExLCAweDc5LCAweGY5LCAweDA2LCAweGYxLCAweDgwLCAweDNkLCAweGRmLCAweDYxLCAweDBmLAorCTB4ZmIsIDB4YjAsIDB4OGIsIDB4N2MsIDB4N2QsIDB4NDMsIDB4YWIsIDB4ODksIDB4NTcsIDB4MTMsIDB4ZjcsIDB4NWIsCisJMHgzYiwgMHg2YywgMHgxOSwgMHhkYywgMHg2ZiwgMHgzZiwgMHhkZiwgMHhkOSwgMHg3NCwgMHg3NiwgMHgwZSwgMHhmYiwKKwkweDU0LCAweGZhLCAweGIwLCAweGE3LCAweDRhLCAweDJkLCAweGY2LCAweDFlLCAweGMzLCAweDBmLCAweDI5LCAweDBmLAorCTB4M2UsIDB4ZjcsIDB4YjksIDB4M2UsIDB4ZGYsIDB4NzYsIDB4MTcsIDB4ZWYsIDB4NGQsIDB4M2MsIDB4NWQsIDB4OTIsCisJMHg4NSwgMHg3MywgMHhhNCwgMHg1YSwgMHhiOCwgMHg0NiwgMHg5OCwgMHhiNiwgMHg4ZiwgMHhlNSwgMHg4YSwgMHg4ZiwKKwkweGZkLCAweDU3LCAweDI0LCAweDAzLCAweGJjLCAweGNmLCAweDU4LCAweGIxLCAweGZmLCAweDY4LCAweGZiLCAweGJkLAorCTB4YzAsIDB4NTEsIDB4ZDMsIDB4NTMsIDB4YjUsIDB4MGEsIDB4NTQsIDB4ZWIsIDB4NzcsIDB4ZGIsIDB4ZjYsIDB4YjAsCisJMHhkMCwgMHgwOCwgMHhhYywgMHg3ZCwgMHhhZSwgMHg4OSwgMHhlYiwgMHg3ZCwgMHhlZSwgMHgwZCwgMHg2YSwgMHg2YiwKKwkweGM3LCAweDA4LCAweDgwLCAweDZlLCAweDU1LCAweDc4LCAweDRkLCAweGY1LCAweDA0LCAweGY3LCAweGViLCAweGI5LAorCTB4OGYsIDB4NGYsIDB4NzEsIDB4ZDcsIDB4NWIsIDB4YjcsIDB4Y2EsIDB4ZjQsIDB4MmMsIDB4NTgsIDB4ZTUsIDB4MTQsCisJMHg4YiwgMHgzMywgMHgzZCwgMHg2NCwgMHg3YiwgMHgxYSwgMHgxMiwgMHgxOSwgMHhkMywgMHhkYiwgMHhiMCwgMHgyYSwKKwkweDg0LCAweDg3LCAweDMyLCAweGYzLCAweDMxLCAweGI5LCAweDA1LCAweDJkLCAweGUzLCAweGMwLCAweDBmLCAweDMzLAorCTB4NDEsIDB4MzQsIDB4OGYsIDB4ODYsIDB4ZmIsIDB4NmYsIDB4OTUsIDB4YzIsIDB4MDMsIDB4YjMsIDB4MTIsIDB4ZGYsCisJMHhiYiwgMHhiYywgMHg2NiwgMHhhNSwgMHg4ZCwgMHhjNSwgMHgzZiwgMHg1YSwgMHhiMywgMHhjMiwgMHhmZSwgMHgwYywKKwkweDE4LCAweGQ3LCAweGU3LCAweGVmLCAweDQwLCAweDdhLCAweGM2LCAweDMzLCAweDViLCAweDk2LCAweDJjLCAweDNjLAorCTB4MTQsIDB4OTMsIDB4NzAsIDB4YjMsIDB4ZmUsIDB4NmYsIDB4YzksIDB4YjcsIDB4MDQsIDB4ZDksIDB4YzYsIDB4YWIsCisJMHg5YywgMHg4MywgMHhlZCwgMHg2MCwgMHhiNiwgMHg2NCwgMHg5NSwgMHg4NiwgMHg1NSwgMHg5OSwgMHgzYSwgMHg4YSwKKwkweDQ5LCAweGY1LCAweDE0LCAweDlmLCAweGVhLCAweDcwLCAweDg1LCAweDYyLCAweGQyLCAweDhhLCAweDM2LCAweDBiLAorCTB4OGIsIDB4ZGIsIDB4Y2MsIDB4YmUsIDB4YzUsIDB4ZTAsIDB4M2QsIDB4NjgsIDB4ZDUsIDB4MmMsIDB4MGEsIDB4YjUsCisJMHhhNywgMHg0YiwgMHg1MiwgMHhiYiwgMHhlYiwgMHgyNSwgMHgwNSwgMHhkYiwgMHgyMywgMHgzYywgMHg3NywgMHhkMCwKKwkweDU4LCAweDk1LCAweGFmLCAweGU0LCAweGQzLCAweDRhLCAweDVlLCAweDc1LCAweGNlLCAweGU1LCAweDUzLCAweGI3LAorCTB4YTEsIDB4NGYsIDB4YWIsIDB4M2YsIDB4NGUsIDB4NDksIDB4YmMsIDB4NmYsIDB4ZDIsIDB4ODMsIDB4OTEsIDB4NmMsCisJMHgwYSwgMHg3YiwgMHhiMywgMHgyMSwgMHhmYywgMHgzYSwgMHhlMywgMHgyNiwgMHhkYiwgMHgwOCwgMHhlYiwgMHgzZiwKKwkweDAwLCAweDhmLCAweGYxLCAweDE5LCAweGIxLCAweDdjLCAweDM4LCAweGZhLCAweDkwLCAweGY0LCAweDEzLCAweDk0LAorCTB4OWQsIDB4ZWEsIDB4MTEsIDB4YWEsIDB4MTIsIDB4MDgsIDB4MzcsIDB4MzQsIDB4ODcsIDB4NWUsIDB4YzQsIDB4NGYsCisJMHhlYywgMHg3ZCwgMHgzNiwgMHhhMCwgMHhjMiwgMHg0MywgMHg1MywgMHgxZSwgMHhjOCwgMHg2NSwgMHgzYywgMHhiMywKKwkweGIwLCAweDdiLCAweGIyLCAweGJjLCAweDZmLCAweDJjLCAweDYxLCAweGJkLCAweDdlLCAweDNmLCAweGM5LCAweDU5LAorCTB4YTAsIDB4YTksIDB4YjUsIDB4MGUsIDB4ZTUsIDB4MmQsIDB4NGUsIDB4OGMsIDB4NjQsIDB4MzgsIDB4MGYsIDB4N2YsCisJMHhiYywgMHg0NiwgMHgxZSwgMHg0MiwgMHg3OSwgMHg2ZSwgMHg0ZiwgMHgzNCwgMHhlMSwgMHhhMCwgMHgwYywgMHhmZCwKKwkweDcyLCAweDExLCAweDM4LCAweDQ4LCAweGIxLCAweDYzLCAweDUzLCAweGVjLCAweDM3LCAweDU2LCAweDA1LCAweDhmLAorCTB4Y2EsIDB4ZmUsIDB4ZjQsIDB4OTgsIDB4YzAsIDB4MDIsIDB4MmQsIDB4NDksIDB4ZjIsIDB4NzAsIDB4ZmEsIDB4MGYsCisJMHhhNSwgMHhhMywgMHg3NiwgMHgwZSwgMHgxZSwgMHhhMSwgMHhmOSwgMHg5MywgMHhmNiwgMHhmYywgMHg5MSwgMHhmZCwKKwkweDRiLCAweDI1LCAweDA5LCAweGQ3LCAweGI3LCAweDFlLCAweGM1LCAweGM0LCAweGMyLCAweDBhLCAweDBkLCAweDQxLAorCTB4YzIsIDB4MDQsIDB4NWMsIDB4Y2IsIDB4ZDYsIDB4MTMsIDB4OGYsIDB4OWIsIDB4MWYsIDB4ZTMsIDB4YmUsIDB4ZTYsCisJMHg2ZiwgMHhkNywgMHhkYywgMHgzMCwgMHhjZSwgMHg3ZSwgMHhmZCwgMHhmMSwgMHg5YSwgMHg3NywgMHhkMywgMHg2YSwKKwkweGIyLCAweDllLCAweGVhLCAweDg3LCAweDZhLCAweDkyLCAweGMzLCAweGJkLCAweDQzLCAweGRjLCAweDRmLCAweGE4LAorCTB4MzcsIDB4NWUsIDB4M2YsIDB4Y2MsIDB4NzksIDB4NTksIDB4MWQsIDB4NjgsIDB4MTAsIDB4M2UsIDB4NzEsIDB4NzMsCisJMHg0NiwgMHhlZCwgMHg2MywgMHhjMiwgMHgyZiwgMHg0NywgMHhkNCwgMHgyMCwgMHhjOSwgMHhhZSwgMHhmMywgMHgxZSwKKwkweGQxLCAweGM3LCAweDM1LCAweDhiLCAweDJkLCAweGI3LCAweGViLCAweGYyLCAweDE1LCAweGRjLCAweDExLCAweDllLAorCTB4YzMsIDB4MjEsIDB4NTEsIDB4MWIsIDB4NzcsIDB4NTgsIDB4ZDYsIDB4OWUsIDB4MTgsIDB4ZTcsIDB4NzEsIDB4ZmIsCisJMHg0YywgMHgwMCwgMHg1ZCwgMHhhZiwgMHgzMywgMHg5NiwgMHg1MiwgMHg2ZCwgMHgzMSwgMHhjOCwgMHhmNCwgMHhmMSwKKwkweDE5LCAweDBmLCAweDg5LCAweDZhLCAweGQxLCAweGVjLCAweGFiLCAweDczLCAweGI4LCAweGM0LCAweDg3LCAweDdkLAorCTB4NzQsIDB4YmQsIDB4NmMsIDB4ZTMsIDB4MTMsIDB4M2UsIDB4YTcsIDB4ZTgsIDB4MzUsIDB4OTQsIDB4YzcsIDB4ZjgsCisJMHg2YywgMHhlMywgMHg2ZiwgMHhkNywgMHhhYywgMHgxZiwgMHg1MywgMHg0MywgMHgxMiwgMHhmMSwgMHhiMSwgMHg5NywKKwkweGY3LCAweGU3LCAweDY5LCAweGNlLCAweDY5LCAweDlkLCAweGU5LCAweGJlLCAweGJjLCAweDg2LCAweGZiLCAweGIxLAorCTB4NGIsIDB4ODgsIDB4NmUsIDB4MmIsIDB4MWIsIDB4NjYsIDB4MGMsIDB4NmEsIDB4ZGIsIDB4NGEsIDB4MjIsIDB4NGYsCisJMHg1NSwgMHhmZCwgMHhlMiwgMHgwYSwgMHhhZiwgMHgyZSwgMHhkMiwgMHhjOSwgMHhiMSwgMHg3NCwgMHgxMiwgMHhhNywKKwkweGUyLCAweDE1LCAweGZkLCAweGFjLCAweGNiLCAweDdmLCAweDAzLCAweGE5LCAweGZhLCAweDBlLCAweGU0LCAweGIyLAorCTB4OGEsIDB4N2YsIDB4NDMsIDB4YTYsIDB4MDMsIDB4YTMsIDB4YTQsIDB4YzMsIDB4YmIsIDB4OGIsIDB4NDEsIDB4N2YsCisJMHg0NywgMHg0NiwgMHg0MywgMHg2ZiwgMHg5MSwgMHhlYiwgMHgyYiwgMHgxOCwgMHg3YiwgMHhjNiwgMHgyNiwgMHhlNywKKwkweGVhLCAweGUwLCAweDRhLCAweDJlLCAweDM5LCAweDkwLCAweGE5LCAweGQ4LCAweDVjLCAweDM4LCAweGVmLCAweDk5LAorCTB4MGQsIDB4ODksIDB4Y2EsIDB4YmMsIDB4MzIsIDB4YWQsIDB4MjMsIDB4MGYsIDB4ZmQsIDB4ODksIDB4ODUsIDB4ODUsCisJMHg2YywgMHgwYiwgMHg3NywgMHg2MCwgMHg2YywgMHhkYywgMHg2ZiwgMHgyZSwgMHgzNiwgMHgxNCwgMHhhYywgMHg2YSwKKwkweGZkLCAweDczLCAweDdhLCAweGI2LCAweDA1LCAweDFmLCAweDFmLCAweGZmLCAweDNhLCAweGNhLCAweGRmLCAweDI0LAorCTB4N2MsIDB4OTQsIDB4NDksIDB4YTIsIDB4YjksIDB4ZjUsIDB4MTYsIDB4YTQsIDB4ZmUsIDB4NDAsIDB4YzYsIDB4ZDMsCisJMHgxOSwgMHgxZiwgMHg5ZSwgMHhjZiwgMHg1NCwgMHhmNiwgMHhlYywgMHg3ZiwgMHg5NCwgMHgyNSwgMHgzZiwgMHgyNCwKKwkweDFmLCAweDc4LCAweGVlLCAweDRiLCAweGY3LCAweDQ5LCAweDI5LCAweDllLCAweDNiLCAweDc4LCAweDBmLCAweGZmLAorCTB4MWYsIDB4MWUsIDB4NzcsIDB4ZGUsIDB4MWUsIDB4ZTcsIDB4MTEsIDB4NzUsIDB4MjMsIDB4ZjMsIDB4ZjMsIDB4NWEsCisJMHhkMCwgMHg1YSwgMHhmZiwgMHhiZSwgMHg2NywgMHgwOCwgMHhmMywgMHg4MSwgMHg2MiwgMHg0OCwgMHhlNSwgMHg4YywKKwkweDgzLCAweDkwLCAweDQ3LCAweGVjLCAweDdkLCAweDIzLCAweGMyLCAweGI5LCAweDExLCAweGZkLCAweDAyLCAweDRjLAorCTB4YjgsIDB4MDksIDB4NWYsIDB4MmQsIDB4MjUsIDB4NTksIDB4NjgsIDB4OTksIDB4ODAsIDB4NWYsIDB4MmEsIDB4MmEsCisJMHhmNCwgMHhkZiwgMHhlOCwgMHg3NywgMHg5MiwgMHg3YywgMHg5YywgMHhjNSwgMHg4ZiwgMHgyOCwgMHhhNiwgMHhiMCwKKwkweDRmLCAweDU1LCAweDcyLCAweDljLCAweDU0LCAweDdjLCAweGM0LCAweDRiLCAweGMwLCAweDg3LCAweDNlLCAweDJiLAorCTB4MzYsIDB4MWQsIDB4Y2EsIDB4MmYsIDB4ZjYsIDB4MzIsIDB4OTYsIDB4YzksIDB4NjUsIDB4MmEsIDB4YmYsIDB4MjMsCisJMHg1NywgMHg3ZiwgMHg5MywgMHg5ZSwgMHg2ZCwgMHg5OSwgMHg4ZCwgMHhkMCwgMHg2ZiwgMHg5NiwgMHhjNSwgMHg3MywKKwkweDU2LCAweDZhLCAweDMzLCAweGNiLCAweDJiLCAweGUwLCAweDdmLCAweDgzLCAweGU0LCAweDNmLCAweDQ2LCAweDM0LAorCTB4NjYsIDB4NjksIDB4OGQsIDB4ZDcsIDB4NjksIDB4Y2QsIDB4NGMsIDB4ZjEsIDB4MTAsIDB4OGQsIDB4ZTEsIDB4N2IsCisJMHgyNCwgMHg2NywgMHhkYiwgMHg3NiwgMHgwZiwgMHg3YiwgMHhmOSwgMHg3YywgMHhjMiwgMHhmMywgMHgxOSwgMHg2MCwKKwkweDMwLCAweDZiLCAweGFhLCAweGNlLCAweGI5LCAweDczLCAweDlkLCAweDgzLCAweDk0LCAweDJmLCAweGFiLCAweDI4LAorCTB4MTYsIDB4YmQsIDB4MTksIDB4ZGYsIDB4OGUsIDB4MWIsIDB4NzMsIDB4NmEsIDB4ZDIsIDB4MjQsIDB4M2MsIDB4OTYsCisJMHg1MiwgMHgyMCwgMHg0OCwgMHg3NywgMHg2NCwgMHhjMywgMHgwMSwgMHhlMywgMHhkZCwgMHg3NCwgMHgyMywgMHhmMSwKKwkweDE0LCAweDBlLCAweDVkLCAweGEwLCAweGYxLCAweGE2LCAweDUzLCAweGM2LCAweDgxLCAweDUxLCAweDA3LCAweDJlLAorCTB4ZjAsIDB4MWUsIDB4YjIsIDB4YTgsIDB4M2MsIDB4NmYsIDB4ODIsIDB4YzcsIDB4Y2UsIDB4N2YsIDB4YWYsIDB4YTYsCisJMHhiYSwgMHgyZSwgMHg5YywgMHhhMCwgMHhhYywgMHg2YSwgMHhkNiwgMHgxMCwgMHg2ZSwgMHhjZiwgMHhiNywgMHgzZiwKKwkweDgyLCAweDQzLCAweDU0LCAweGViLCAweGVmLCAweDg4LCAweDg1LCAweDkwLCAweGFjLCAweDhiLCAweDUzLCAweGJkLAorCTB4ZDEsIDB4ZGMsIDB4N2YsIDB4MDksIDB4ZmYsIDB4Y2QsIDB4MmEsIDB4ZjMsIDB4M2UsIDB4YmMsIDB4MDgsIDB4MjcsCisJMHgyZSwgMHhlMSwgMHg1MywgMHhjYiwgMHhhMSwgMHg2OSwgMHg2NywgMHhhNywgMHhhMCwgMHg5NSwgMHgyZiwgMHhhMCwKKwkweDc5LCAweGUwLCAweDEzLCAweGJjLCAweDY3LCAweGYxLCAweDFlLCAweGJkLCAweGVjLCAweDcwLCAweDEwLCAweDA2LAorCTB4MGMsIDB4MmIsIDB4NGUsIDB4MDQsIDB4NTAsIDB4MGUsIDB4MzgsIDB4YjAsIDB4NDksIDB4ZTcsIDB4ZGUsIDB4YjQsCisJMHgzYSwgMHhmMCwgMHgyNCwgMHg2MSwgMHhmOSwgMHg3NywgMHg0NCwgMHg3MywgMHhkZiwgMHg4NywgMHgzOCwgMHg2ZiwKKwkweDRkLCAweGQ0LCAweGYxLCAweGJhLCAweDAyLCAweDg5LCAweGViLCAweDliLCAweGNmLCAweGJhLCAweGExLCAweDc2LAorCTB4YmEsIDB4ODQsIDB4OTYsIDB4NjgsIDB4NzAsIDB4ZmMsIDB4OTUsIDB4NzUsIDB4M2UsIDB4ZjAsIDB4YTksIDB4YTUsCisJMHg0NSwgMHgzZSwgMHgyNSwgMHgxYywgMHhhNCwgMHgwNSwgMHgyNywgMHhjOSwgMHhmNiwgMHhmYiwgMHgzMCwgMHg0ZiwKKwkweDliLCAweGE4LCAweDg2LCAweDU3LCAweDI3LCAweDFhLCAweDE4LCAweGY3LCAweDk5LCAweDllLCAweDdkLCAweDQ0LAorCTB4ZGIsIDB4NmIsIDB4ODQsIDB4MDMsIDB4NzYsIDB4YzQsIDB4MmUsIDB4NTksIDB4YzksIDB4ODUsIDB4N2MsIDB4ZmUsCisJMHg0ZiwgMHhhOSwgMHhhZSwgMHhmNCwgMHhjMCwgMHhiOSwgMHg2ZiwgMHg3MiwgMHgwNywgMHhlZSwgMHg0YSwgMHgzYiwKKwkweDQ5LCAweDRlLCAweGYzLCAweDc4LCAweGNkLCAweDQ1LCAweDMxLCAweDk4LCAweDYzLCAweDdmLCAweGY5LCAweDNhLAorCTB4MmEsIDB4Y2QsIDB4MjQsIDB4MmEsIDB4ZjEsIDB4YjEsIDB4ODcsIDB4ZTIsIDB4YzIsIDB4NmUsIDB4M2IsIDB4MTcsCisJMHhjMCwgMHhiYiwgMHg2NCwgMHg1NSwgMHgyYiwgMHgzZSwgMHgxOSwgMHg3ZiwgMHhkMywgMHg0YiwgMHhiZSwgMHhiNCwKKwkweDRlLCAweDZiLCAweDgzLCAweDA4LCAweDY2LCAweDRjLCAweDUxLCAweDZiLCAweDM4LCAweGYwLCAweDYxLCAweGJiLAorCTB4ZGEsIDB4MjksIDB4MzksIDB4MDYsIDB4NzAsIDB4N2QsIDB4Y2MsIDB4YjQsIDB4N2MsIDB4OWEsIDB4ZDYsIDB4ZDMsCisJMHgyMiwgMHgyMiwgMHhkZCwgMHg0NSwgMHgxMSwgMHg0NSwgMHg3NSwgMHhkMSwgMHgyNywgMHg1NywgMHgxNywgMHg1YiwKKwkweDY0LCAweDZmLCAweGQxLCAweGY0LCAweDI4LCAweGFiLCAweGI2LCAweDUzLCAweGRkLCAweGIyLCAweDhiLCAweDZhLAorCTB4NWIsIDB4MWYsIDB4ZDUsIDB4ZDcsIDB4YWEsIDB4N2UsIDB4MTEsIDB4NmUsIDB4OTIsIDB4N2YsIDB4MDgsIDB4ZmIsCisJMHg0YSwgMHgwNiwgMHg5YywgMHg5OSwgMHg5ZCwgMHg3MCwgMHg2NSwgMHhjMiwgMHhjYSwgMHg1ZSwgMHhlYywgMHg0MiwKKwkweDMyLCAweDU4LCAweGMxLCAweGI2LCAweDMyLCAweGU5LCAweGFhLCAweGFhLCAweDlkLCAweGIxLCAweGNjLCAweDc2LAorCTB4OWMsIDB4OWYsIDB4NjAsIDB4N2MsIDB4OWUsIDB4YzAsIDB4ZDYsIDB4MzQsIDB4ZmYsIDB4ODYsIDB4ZjcsIDB4YzUsCisJMHhiOCwgMHg4MSwgMHg5MywgMHg1NCwgMHgzYiwgMHg3OSwgMHg1YSwgMHgxYiwgMHg0OCwgMHgwZiwgMHg4ZCwgMHgxOCwKKwkweDJjLCAweDA5LCAweDM2LCAweDJiLCAweGQyLCAweDA1LCAweGJjLCAweDI3LCAweGRiLCAweDY1LCAweDFjLCAweDljLAorCTB4YTIsIDB4NDQsIDB4NDIsIDB4ZjksIDB4Y2EsIDB4OTksIDB4NTEsIDB4MjgsIDB4NGUsIDB4YzgsIDB4ZjAsIDB4NjksCisJMHgzZSwgMHhmYSwgMHgxZCwgMHhlMCwgMHg3MywgMHg0YiwgMHg2NCwgMHg2NywgMHhiZiwgMHg1ZCwgMHhkMywgMHg2MiwKKwkweGM3LCAweDlhLCAweDdhLCAweGFhLCAweDc1LCAweGRlLCAweDIxLCAweDVlLCAweDU4LCAweDE2LCAweDA2LCAweGFhLAorCTB4NDcsIDB4ZTYsIDB4NmIsIDB4YzIsIDB4ZjUsIDB4YjcsIDB4NTUsIDB4MjMsIDB4NDgsIDB4NzMsIDB4MzIsIDB4MGUsCisJMHhhYywgMHg5YywgMHg1NywgMHg1ZCwgMHgxZiwgMHg2YiwgMHg0NSwgMHgyMSwgMHgyNywgMHhlNiwgMHgzMCwgMHhkNiwKKwkweGEwLCAweGVhLCAweGMzLCAweDNhLCAweDFjLCAweGEyLCAweGRhLCAweGRmLCAweGFmLCAweDZkLCAweDQ1LCAweDQ2LAorCTB4MjksIDB4N2IsIDB4N2YsIDB4MTEsIDB4ZTcsIDB4MWEsIDB4MDAsIDB4ZGUsIDB4NWUsIDB4YzIsIDB4NTAsIDB4NDMsCisJMHhlOSwgMHhhZiwgMHg3MiwgMHhjYywgMHhmNCwgMHhkYywgMHgxZCwgMHhkNywgMHg3MSwgMHgyNCwgMHg0NywgMHgyMSwKKwkweDRhLCAweDViLCAweDg3LCAweGRhLCAweGI2LCAweDJlLCAweDdjLCAweDU4LCAweGM3LCAweGY4LCAweDk3LCAweDYyLAorCTB4MTUsIDB4ZDEsIDB4YjMsIDB4NzcsIDB4MmEsIDB4NjAsIDB4OWYsIDB4YWIsIDB4ZDgsIDB4NTcsIDB4OWEsIDB4YTcsCisJMHhmOSwgMHg1YSwgMHg1YSwgMHhiZiwgMHg4YywgMHg0NiwgMHg5NiwgMHhjOSwgMHgzZiwgMHg0NCwgMHgyMywgMHhkOSwKKwkweDJjLCAweDYxLCAweDllLCAweDVjLCAweGJhLCAweDE3LCAweDJmLCAweGE3LCAweDc5LCAweGRlLCAweDcwLCAweDUyLAorCTB4MTcsIDB4MGEsIDB4ZjcsIDB4ZTYsIDB4NmQsIDB4OTksIDB4OTgsIDB4NTMsIDB4YmMsIDB4MDYsIDB4YWYsIDB4M2YsCisJMHhiZiwgMHg0ZSwgMHg4MCwgMHg2YSwgMHg4NSwgMHg3ZiwgMHhlYywgMHg1YSwgMHgxNCwgMHgzNywgMHg3MiwgMHhlYiwKKwkweGE4LCAweGVlLCAweDhjLCAweDQyLCAweGZiLCAweGZkLCAweDMyLCAweGU5LCAweDgzLCAweDdiLCAweGQ1LCAweDRiLAorCTB4MDksIDB4ZjMsIDB4YzIsIDB4ZjMsIDB4NGEsIDB4OWMsIDB4Y2YsIDB4MzAsIDB4NWIsIDB4YmIsIDB4NjQsIDB4YzMsCisJMHhiMiwgMHg1YywgMHhlZCwgMHg5YSwgMHhmMiwgMHgzNiwgMHhkOCwgMHgwZSwgMHg3ZCwgMHhiYywgMHhlNywgMHhlMSwKKwkweGQ5LCAweGRiLCAweGVlLCAweGMzLCAweDQxLCAweGNhLCAweDgxLCAweDRmLCAweGE1LCAweDliLCAweDRkLCAweGFlLAorCTB4ZmQsIDB4YzAsIDB4MzgsIDB4NTQsIDB4YTQsIDB4ZTgsIDB4ZDksIDB4N2YsIDB4NTUsIDB4Y2QsIDB4M2UsIDB4YmIsCisJMHhhNywgMHhiNCwgMHgxMywgMHg1MiwgMHhhNiwgMHhhNywgMHg5YSwgMHhlYiwgMHgwZCwgMHgzNywgMHhkNSwgMHhjOSwKKwkweDgzLCAweDY5LCAweGE2LCAweGQ3LCAweGRhLCAweGU1LCAweGE0LCAweGI5LCAweDc2LCAweGM3LCAweGI1LCAweGQ5LAorCTB4MWIsIDB4YzksIDB4MmUsIDB4MWEsIDB4MGMsIDB4OTYsIDB4NjMsIDB4MDAsIDB4NGYsIDB4ZDAsIDB4ZDgsIDB4NTAsCisJMHg4OSwgMHg2NSwgMHg3OSwgMHhhOCwgMHg5YSwgMHhmYiwgMHg5ZSwgMHhmYiwgMHg0OCwgMHhiZiwgMHhiNSwgMHhkOSwKKwkweGNhLCAweDNjLCAweGQ5LCAweDUyLCAweDFmLCAweDk2LCAweDBlLCAweGJkLCAweDU4LCAweDVkLCAweGE5LCAweDdkLAorCTB4YjgsIDB4MmUsIDB4ZWYsIDB4YzcsIDB4YmUsIDB4NzQsIDB4MDAsIDB4NTMsIDB4ZTksIDB4NjYsIDB4ZTUsIDB4MDUsCisJMHhmYiwgMHhjYywgMHg0MCwgMHhhNSwgMHg0NywgMHgzNiwgMHg5OCwgMHg5ZSwgMHgxZiwgMHgxMywgMHhjMCwgMHhlNCwKKwkweGQ1LCAweGVmLCAweDJjLCAweDlmLCAweDRhLCAweGVmLCAweGY0LCAweDk0LCAweDhkLCAweGY5LCAweDY1LCAweDRjLAorCTB4MDQsIDB4MmEsIDB4NzgsIDB4ODgsIDB4NjIsIDB4ODUsIDB4ZjcsIDB4NTEsIDB4ZDIsIDB4ZWIsIDB4M2IsIDB4YTQsCisJMHg1NywgMHg4OSwgMHhmNCwgMHhmYSwgMHg4MiwgMHhmZSwgMHgyMywgMHhjNiwgMHgyYywgMHg5ZSwgMHgzZCwgMHg3MSwKKwkweDFmLCAweGVmLCAweDEzLCAweDk5LCAweDA0LCAweDVhLCAweGVjLCAweDMxLCAweDk5LCAweGI4LCAweDEzLCAweGU3LAorCTB4ODYsIDB4ZjgsIDB4NmMsIDB4ZTIsIDB4NDcsIDB4NmIsIDB4NWUsIDB4NGEsIDB4NWIsIDB4ZWIsIDB4NjYsIDB4NjIsCisJMHhjZCwgMHhhOSwgMHg3NywgMHgwOCwgMHg0ZiwgMHg5YiwgMHg3ZiwgMHhhMCwgMHhlYSwgMHhlNywgMHhjOSwgMHg0ZiwKKwkweGIzLCAweGEzLCAweDdmLCAweDg4LCAweGYzLCAweDc1LCAweGNkLCAweGNhLCAweGNmLCAweDYxLCAweDdhLCAweDFlLAorCTB4OGYsIDB4M2YsIDB4NDIsIDB4MzUsIDB4M2YsIDB4ZDUsIDB4MGQsIDB4NmQsIDB4ZmYsIDB4OTIsIDB4OWMsIDB4MmMsCisJMHgwZSwgMHg4NywgMHhkNiwgMHgzYywgMHhmYiwgMHgwMiwgMHhmZSwgMHgyMywgMHhjZSwgMHgyZiwgMHgwZSwgMHhlYiwKKwkweDJmLCAweDgwLCAweGM3LCAweDU0LCAweGVhLCAweGYxLCAweGYwLCAweGY0LCAweDdkLCAweDdjLCAweDllLCAweDJhLAorCTB4NDgsIDB4NjksIDB4YjQsIDB4YjIsIDB4OWYsIDB4OTUsIDB4ZTYsIDB4ZmQsIDB4MzcsIDB4ODEsIDB4ODksIDB4MmQsCisJMHg1NCwgMHg0YiwgMHhkYiwgMHhlNywgMHg1OCwgMHhlMSwgMHg3ZCwgMHg5MiwgMHhmYywgMHgyMiwgMHgzYSwgMHhjYywKKwkweGUzLCAweDNmLCAweDVlLCAweGEzLCAweGU1LCAweDQzLCAweDcwLCAweDEwLCAweGM2LCAweDQ5LCAweDA1LCAweGQ0LAorCTB4NGUsIDB4MjAsIDB4ZTgsIDB4N2YsIDB4MzIsIDB4MWQsIDB4YTQsIDB4MWEsIDB4YWQsIDB4YjksIDB4M2IsIDB4MmEsCisJMHhlZSwgMHg5YywgMHhkYiwgMHhmNywgMHhlNiwgMHgzYywgMHhmNywgMHhmMSwgMHg5YSwgMHg2MywgMHg2OSwgMHgzNSwKKwkweGY1LCAweDI0LCAweDlhLCAweDdiLCAweDdjLCAweGUyLCAweDBlLCAweGE0LCAweGVhLCAweDlhLCAweGZiLCAweDRlLAorCTB4MjIsIDB4OWMsIDB4ZjAsIDB4MDgsIDB4MzUsIDB4N2EsIDB4MWUsIDB4OTUsIDB4NzksIDB4OTYsIDB4ZTUsIDB4MWQsCisJMHg1NCwgMHgyNywgMHg3MiwgMHg5YywgMHg0OSwgMHhlMywgMHhhNCwgMHhlMiwgMHhjMCwgMHhmMiwgMHg1NiwgMHg2ZCwKKwkweDc2LCAweDEyLCAweGYzLCAweGY2LCAweDUyLCAweDE5LCAweGIzLCAweDJlLCAweDRmLCAweGUzLCAweDFkLCAweDBhLAorCTB4ZDUsIDB4ZmIsIDB4NmUsIDB4MzgsIDB4ZWIsIDB4NzksIDB4NGYsIDB4NzEsIDB4MjcsIDB4NzYsIDB4YTQsIDB4MzksCisJMHg0ZiwgMHg5MywgMHg1YywgMHhjOCwgMHgzNywgMHhiYiwgMHgyMywgMHgzYiwgMHhkMSwgMHg5ZiwgMHgwZiwgMHhlMCwKKwkweDUwLCAweDM2LCAweGJjLCAweDdmLCAweDJmLCAweGUxLCAweGJhLCAweGUxLCAweDUyLCAweDM4LCAweGI0LCAweDRkLAorCTB4MDQsIDB4NDgsIDB4ZGYsIDB4NTQsIDB4ZmYsIDB4ZDcsIDB4MDcsIDB4YTksIDB4NGUsIDB4NTYsIDB4ZTgsIDB4YmYsCisJMHg1MiwgMHhjZiwgMHhiYywgMHg0NCwgMHhmNSwgMHhjYywgMHgzOSwgMHhmMiwgMHgzNSwgMHhkZiwgMHg1YywgMHhhZCwKKwkweGJhLCAweDZjLCAweGMyLCAweGMyLCAweDRjLCAweDZjLCAweDIzLCAweDJlLCAweGRiLCAweDNhLCAweDBiLCAweDkyLAorCTB4OGQsIDB4NzEsIDB4MmUsIDB4ZTIsIDB4YjMsIDB4MzUsIDB4MWUsIDB4YjEsIDB4NmQsIDB4ZDgsIDB4ZjQsIDB4M2MsCisJMHhkOCwgMHgxZSwgMHg0NCwgMHgzOCwgMHhjMywgMHg5OCwgMHg1MywgMHhmYSwgMHhhNiwgMHg4MywgMHhlNCwgMHgzMSwKKwkweGE1LCAweGVkLCAweGMyLCAweDg2LCAweGQ4LCAweDJlLCAweGY0LCAweGViLCAweDdmLCAweDAyLCAweDc3LCAweDNkLAorCTB4YzcsIDB4MjMsIDB4ZDksIDB4YWMsIDB4YTUsIDB4NzksIDB4MmYsIDB4YjUsIDB4NzcsIDB4MjEsIDB4N2MsIDB4OTQsCisJMHg3MywgMHgzMCwgMHg1NSwgMHhjMywgMHg0MywgMHhlYywgMHhiYiwgMHgzYywgMHhmZiwgMHg2ZCwgMHhjNiwgMHgwYSwKKwkweGMyLCAweDE1LCAweDM1LCAweGVkLCAweDk1LCAweDNjLCAweDdmLCAweDdkLCAweDllLCAweGNmLCAweDc0LCAweDgyLAorCTB4NmEsIDB4NTMsIDB4NzgsIDB4ZGYsIDB4NWEsIDB4NmQsIDB4ZTAsIDB4NzEsIDB4OGEsIDB4MzEsIDB4ODksIDB4MzYsCisJMHgxNywgMHhiMCwgMHg4MCwgMHhjZiwgMHgyZSwgMHg1NywgMHhlYSwgMHgxOCwgMHhlNiwgMHg3NywgMHg2OSwgMHg1ZSwKKwkweDYwLCAweDNhLCAweDRlLCAweGY2LCAweGYxLCAweDc3LCAweGNlLCAweDI4LCAweDg1LCAweGU2LCAweGNlLCAweDk2LAorCTB4NzIsIDB4ZmYsIDB4ZTQsIDB4YjAsIDB4OTUsIDB4ZTQsIDB4ZjcsIDB4MGQsIDB4YTQsIDB4YTAsIDB4OGYsIDB4ZTIsCisJMHg2ZCwgMHhiMCwgMHgwYywgMHgyYSwgMHhlYSwgMHgyOSwgMHgyZSwgMHgzYiwgMHhiNCwgMHg3OSwgMHhiOSwgMHhiMywKKwkweGFjLCAweDRmLCAweDU4LCAweDEzLCAweDczLCAweGJhLCAweDcwLCAweGQyLCAweDMzLCAweDdiLCAweGM2LCAweGQ0LAorCTB4ODEsIDB4YmQsIDB4NjgsIDB4ZWUsIDB4N2YsIDB4NTcsIDB4NTQsIDB4ZDksIDB4M2IsIDB4OTgsIDB4OTMsIDB4MmQsCisJMHg0OCwgMHgyZCwgMHgzMSwgMHg5YywgMHg1YiwgMHgzZSwgMHhjOSwgMHhhZSwgMHgyMywgMHgzYSwgMHgyZSwgMHgxMCwKKwkweDA4LCAweDVkLCAweDZmLCAweGVmLCAweDczLCAweDRkLCAweGI2LCAweGZjLCAweDI5LCAweGNkLCAweGNkLCAweGRmLAorCTB4ZmYsIDB4ZDgsIDB4YzcsIDB4NjcsIDB4MmUsIDB4NGYsIDB4NjUsIDB4OWYsIDB4YjcsIDB4YTIsIDB4MGIsIDB4MmIsCisJMHhmMiwgMHgzOSwgMHg0ZCwgMHhiZSwgMHgxZiwgMHgzNCwgMHgyNCwgMHgzNCwgMHg2OCwgMHg5MSwgMHhkOSwgMHgxZSwKKwkweGZhLCAweGZkLCAweGQ3LCAweDc5LCAweDQyLCAweGZiLCAweGFiLCAweGZiLCAweGYwLCAweGNiLCAweDA5LCAweDAzLAorCTB4MDcsIDB4MjgsIDB4MGYsIDB4ZDQsIDB4NmEsIDB4YWEsIDB4MzIsIDB4ODEsIDB4MTAsIDB4ZDcsIDB4ZDIsIDB4MzYsCisJMHhmZiwgMHgyYiwgMHgyNywgMHhjOCwgMHgwZiwgMHhlYiwgMHgxNCwgMHhiYiwgMHhjNiwgMHhhOCwgMHhmMCwgMHg3NywKKwkweDk5LCAweGY4LCAweDdiLCAweGQwLCAweGM3LCAweGJlLCAweGIwLCAweDg0LCAweGZjLCAweDYyLCAweDNmLCAweGY5LAorCTB4ZWIsIDB4MDEsIDB4YjIsIDB4MzUsIDB4YWEsIDB4ZTAsIDB4YzksIDB4MGYsIDB4ZDQsIDB4ZmQsIDB4MjAsIDB4N2YsCisJMHgxZCwgMHg0ZSwgMHhiMywgMHhmYywgMHg4MywgMHhmZSwgMHg1ZSwgMHgzZSwgMHhkZSwgMHhhYywgMHhkOSwgMHg3ZCwKKwkweDU1LCAweDNkLCAweDI0LCAweDcxLCAweGRjLCAweGI1LCAweGUzLCAweGE5LCAweDE5LCAweDkyLCAweGFjLCAweDZhLAorCTB4YTYsIDB4NmIsIDB4YjAsIDB4MTQsIDB4MGUsIDB4N2EsIDB4ZjksIDB4NWQsIDB4MDAsIDB4MDIsIDB4ODcsIDB4YmQsCisJMHg3YSwgMHgyNSwgMHg1NywgMHhjZSwgMHg1MCwgMHgzZSwgMHhiYSwgMHg0YywgMHg3NCwgMHgxYywgMHg4YSwgMHgzNSwKKwkweDIwLCAweDQ1LCAweGY5LCAweDI4LCAweGEzLCAweDU1LCAweDZjLCAweDQ5LCAweDliLCAweDY2LCAweDhjLCAweDU5LAorCTB4NmYsIDB4MDQsIDB4YzcsIDB4ZDUsIDB4OTAsIDB4Y2IsIDB4ZDEsIDB4M2MsIDB4NzAsIDB4MDYsIDB4M2IsIDB4YWQsCisJMHhmMywgMHg3NSwgMHg2YywgMHg1MywgMHgyZSwgMHgxYywgMHg2ZiwgMHg5OSwgMHhiNiwgMHhjYSwgMHgwMSwgMHhlNiwKKwkweGQ3LCAweDgxLCAweGU3LCAweDc1LCAweGIyLCAweDk5LCAweGM1LCAweGUxLCAweGUwLCAweGYzLCAweDk0LCAweDUzLAorCTB4YTcsIDB4ZTYsIDB4ZjQsIDB4MTEsIDB4Y2UsIDB4Y2YsIDB4ZGIsIDB4ZTMsIDB4NWEsIDB4OTYsIDB4NzUsIDB4MzQsCisJMHgwNSwgMHgyZCwgMHg5MSwgMHg0NywgMHgyZiwgMHg3ZCwgMHg2ZiwgMHgwYSwgMHg1ZSwgMHg5ZSwgMHhiMywgMHhkNSwKKwkweDE1LCAweGQzLCAweGFmLCAweGZiLCAweGU2LCAweGRlLCAweGNiLCAweGIxLCAweDlmLCAweDA5LCAweGU1LCAweGZmLAorCTB4ODgsIDB4N2UsIDB4ZjMsIDB4OWMsIDB4MDEsIDB4YzYsIDB4MzIsIDB4N2MsIDB4NTYsIDB4Y2IsIDB4YmIsIDB4YTMsCisJMHhkZCwgMHhjZCwgMHhmZSwgMHhhMiwgMHhmMCwgMHgzYiwgMHgwOSwgMHgxYiwgMHg4NiwgMHhiOSwgMHgyZiwgMHhjYywKKwkweDNkLCAweDFhLCAweDA3LCAweGY2LCAweDVlLCAweDdkLCAweDY3LCAweDgyLCAweDNmLCAweDNiLCAweGIxLCAweDY5LAorCTB4OTgsIDB4N2IsIDB4MTEsIDB4YTcsIDB4NmYsIDB4OTAsIDB4ZjEsIDB4MzcsIDB4OTQsIDB4ODcsIDB4NjUsIDB4ZjYsCisJMHg3OSwgMHhmMiwgMHhmNSwgMHg0ZiwgMHhkNywgMHhiYywgMHgzNCwgMHhjNiwgMHgzOSwgMHgzNSwgMHg2MCwgMHhkYywKKwkweDk1LCAweDllLCAweGQ3LCAweGYxLCAweDU1LCAweDllLCAweGNlLCAweGRlLCAweDRkLCAweDcxLCAweDI3LCAweDkzLAorCTB4NTYsIDB4MDcsIDB4MjIsIDB4MGUsIDB4N2IsIDB4N2YsIDB4MmQsIDB4NTUsIDB4MTQsIDB4NWYsIDB4YTUsIDB4MjIsCisJMHg4ZCwgMHhlNywgMHg1MywgMHhmYywgMHgwMywgMHg4NywgMHg0MywgMHhjOCwgMHg2NCwgMHhiYiwgMHhmMCwgMHg4ZCwKKwkweDYxLCAweGNiLCAweDcyLCAweGI3LCAweDM5LCAweGYxLCAweGNhLCAweDkwLCAweDg1LCAweDBmLCAweDYyLCAweGMwLAorCTB4Y2IsIDB4NDMsIDB4ZTEsIDB4ODEsIDB4NzMsIDB4YzAsIDB4YjcsIDB4NmIsIDB4YTksIDB4NDYsIDB4NmUsIDB4MTEsCisJMHg2YSwgMHgzNywgMHg2MSwgMHg4MywgMHhkMCwgMHg3YiwgMHg2OCwgMHgwZSwgMHhlNiwgMHhhMSwgMHg5ZSwgMHhkZCwKKwkweDRkLCAweGYzLCAweGJkLCAweDU4LCAweDAwLCAweDdlLCAweDU5LCAweGYwLCAweGUyLCAweDE3LCAweGMzLCAweDNjLAorCTB4YTcsIDB4MTcsIDB4ZTcsIDB4OGUsIDB4ZDYsIDB4ZmIsIDB4NzcsIDB4ZDIsIDB4NWMsIDB4MDcsIDB4MjksIDB4YmUsCisJMHg3NywgMHgxZCwgMHg0YiwgMHg2MCwgMHhkMywgMHg2MSwgMHg4MSwgMHg2OCwgMHgyNCwgMHg4MSwgMHhjZSwgMHg2MywKKwkweDM1LCAweGQ4LCAweDM4LCAweDJjLCAweGUzLCAweGZkLCAweDc4LCAweDBkLCAweDZlLCAweDM5LCAweDNhLCAweGNmLAorCTB4NDcsIDB4YTUsIDB4YWYsIDB4YzEsIDB4NjcsIDB4MzUsIDB4ZjksIDB4MWMsIDB4ZGMsIDB4YzksIDB4MmMsIDB4YzcsCisJMHg2YywgMHhjYSwgMHgxNywgMHg1OSwgMHg4ZSwgMHg4MSwgMHg5NiwgMHgxNSwgMHg2YywgMHhhZiwgMHhmNCwgMHgzOSwKKwkweDllLCAweGE2LCAweGZjLCAweGYxLCAweDc4LCAweGJiLCAweDE2LCAweDBjLCAweDRhLCAweDA2LCAweDk2LCAweDhmLAorCTB4OTYsIDB4ZWYsIDB4YWMsIDB4ODUsIDB4NzUsIDB4OGEsIDB4ZjcsIDB4MzMsIDB4M2UsIDB4NmEsIDB4YjEsIDB4YWMsCisJMHg0ZCwgMHhmMSwgMHhjOCwgMHhlYywgMHhiZCwgMHgzNiwgMHhhZSwgMHgwZCwgMHg5MCwgMHg0ZiwgMHgzNSwgMHhlMiwKKwkweGYxLCAweGVjLCAweGZjLCAweDllLCAweDk3LCAweGQ2LCAweDczLCAweGM5LCAweDYxLCAweGVlLCAweDUyLCAweDYwLAorCTB4NWQsIDB4YTksIDB4MzIsIDB4YWMsIDB4OGYsIDB4NWMsIDB4NDYsIDB4MjQsIDB4ZjgsIDB4ODAsIDB4ZTAsIDB4YjMsCisJMHgyMiwgMHhkYywgMHgxMywgMHhiNywgMHhhYywgMHgzNywgMHhlMywgMHg5NiwgMHg1NSwgMHg4OCwgMHg5YiwgMHg5ZSwKKwkweDE1LCAweGFiLCAweDE0LCAweDFjLCAweDViLCAweGM2LCAweGVmLCAweDJhLCAweDg0LCAweDkzLCAweDBkLCAweDY0LAorCTB4NWYsIDB4ZGUsIDB4NjUsIDB4NWEsIDB4NzAsIDB4MmIsIDB4NTQsIDB4ZDMsIDB4YTQsIDB4MjAsIDB4MTcsIDB4NWEsCisJMHhhOCwgMHhmNiwgMHgwMCwgMHg4ZCwgMHhmZSwgMHg0MywgMHg0MywgMHhmNSwgMHhmOCwgMHhmZSwgMHhjYywgMHhlZiwKKwkweGYyLCAweGYxLCAweDFkLCAweGJiLCAweDlmLCAweDc2LCAweDQ1LCAweGM3LCAweGJhLCAweDVhLCAweDQ0LCAweDkyLAorCTB4ZjcsIDB4ODAsIDB4N2IsIDB4YTMsIDB4N2MsIDB4YTYsIDB4ZDUsIDB4YzQsIDB4MmQsIDB4ZjEsIDB4M2UsIDB4ZWMsCisJMHgxOCwgMHhlNiwgMHg3ZCwgMHhiNiwgMHgzYSwgMHhlMywgMHhjYSwgMHhiMCwgMHhmNSwgMHhkNywgMHgxZSwgMHhhMiwKKwkweDdmLCAweDVkLCAweDdiLCAweDczLCAweGNhLCAweDZiLCAweGJmLCAweGUzLCAweGU0LCAweDM0LCAweGQ2LCAweDhmLAorCTB4ZDUsIDB4YTEsIDB4MzQsIDB4YTUsIDB4OTUsIDB4OTcsIDB4ODgsIDB4ZTQsIDB4MWIsIDB4M2UsIDB4NDQsIDB4ODIsCisJMHgwZCwgMHgxNCwgMHhhYiwgMHg2NiwgMHhjOCwgMHg3NywgMHhhNywgMHg0YSwgMHg1YywgMHgwNywgMHgyYywgMHgzMCwKKwkweGFjLCAweGQxLCAweDQ1LCAweDk4LCAweDljLCAweGExLCAweGI5LCAweGIyLCAweDVhLCAweGU3LCAweDA3LCAweDg0LAorCTB4ZjMsIDB4YWEsIDB4MGQsIDB4YWIsIDB4ZDYsIDB4NmIsIDB4NDQsIDB4Y2UsIDB4MzYsIDB4MGIsIDB4MDcsIDB4NjYsCisJMHhkYiwgMHgyYywgMHhhYiwgMHhhYiwgMHg1ZCwgMHgxYiwgMHhhOCwgMHgxMSwgMHhlOCwgMHg5NywgMHgwYywgMHgyZCwKKwkweGQxLCAweGUyLCAweGMwLCAweGQ3LCAweDgyLCAweDg4LCAweDc0LCAweGJlLCAweDg5LCAweDQ4LCAweGNmLCAweDA1LAorCTB4OGEsIDB4NjEsIDB4NGYsIDB4OTUsIDB4ZjgsIDB4OWMsIDB4ZjAsIDB4MjMsIDB4ZjgsIDB4ZWIsIDB4ZTEsIDB4ODUsCisJMHgzOCwgMHgzNSwgMHhkNSwgMHgzZiwgMHhkNywgMHgxMywgMHg4MywgMHhmNywgMHhmYSwgMHg1NSwgMHgwNiwgMHg4ZSwKKwkweDBmLCAweDg3LCAweGM4LCAweDdlLCAweGRjLCAweDE0LCAweGQ3LCAweDY1LCAweDQ4LCAweDRkLCAweDkwLCAweGViLAorCTB4YTgsIDB4NGUsIDB4ODgsIDB4M2QsIDB4NjYsIDB4NTksIDB4MmIsIDB4OWEsIDB4MmEsIDB4MzUsIDB4Y2YsIDB4OGEsCisJMHhlOSwgMHg2YiwgMHhkZiwgMHg3MSwgMHg5OCwgMHhlZiwgMHhmNywgMHgwNCwgMHg0OSwgMHg3ZiwgMHhjZCwgMHhhOSwKKwkweDFkLCAweGUyLCAweDhjLCAweDY1LCAweGZlLCAweDgxLCAweDIwLCAweDllLCAweDdiLCAweDZhLCAweGUwLCAweDY1LAorCTB4YmUsIDB4NjUsIDB4ZWMsIDB4MWUsIDB4ZTUsIDB4M2UsIDB4MWMsIDB4ZWIsIDB4MGQsIDB4ZGUsIDB4Y2UsIDB4MzgsCisJMHhlZiwgMHg5NywgMHhiMywgMHg4ZSwgMHhjYSwgMHhkZSwgMHgwZCwgMHg3MSwgMHg4YSwgMHg4OSwgMHhjMiwgMHg0ZiwKKwkweDc4LCAweGNhLCAweGY0LCAweDc0LCAweDUwLCAweDdlLCAweGFhLCAweDFhLCAweGU2LCAweGY3LCAweDJkLCAweDdjLAorCTB4MzgsIDB4NDAsIDB4NzEsIDB4ZTMsIDB4YjIsIDB4NWUsIDB4OGQsIDB4NDMsIDB4NzUsIDB4NmEsIDB4ODIsIDB4ZWIsCisJMHhlOSwgMHgyNywgMHg0YiwgMHhkYywgMHgzMywgMHhkYywgMHg4OSwgMHhlZCwgMHhmYywgMHhiZSwgMHg0YSwgMHg2OSwKKwkweGI1LCAweDdkLCAweGI2LCAweDkwLCAweGFlLCAweDExLCAweDM2LCAweDYwLCAweDNhLCAweGU2LCAweGQ3LCAweGVmLAorCTB4YzQsIDB4OTIsIDB4MjEsIDB4ZDYsIDB4ZTMsIDB4YzcsIDB4NmIsIDB4ODIsIDB4MjQsIDB4YTMsIDB4YzcsIDB4YzksCisJMHgyZSwgMHgyNCwgMHhhMywgMHgwMywgMHhmMiwgMHg5MCwgMHg2NSwgMHhkZCwgMHgxOCwgMHhiZiwgMHg3NiwgMHgwZSwKKwkweGFkLCAweGZmLCAweDgyLCAweDgzLCAweGVhLCAweDNiLCAweDA3LCAweGVmLCAweGViLCAweGE5LCAweDg5LCAweDEzLAorCTB4ZTIsIDB4ZGEsIDB4MzksIDB4MGIsIDB4MzUsIDB4ZGMsIDB4NGYsIDB4MzQsIDB4YTcsIDB4MmEsIDB4NzksIDB4ZTksCisJMHgzOCwgMHhlNSwgMHhhNSwgMHg5NywgMHg3MywgMHhlYywgMHgyMywgMHhmNSwgMHgwNiwgMHhmYiwgMHg4OCwgMHg0NCwKKwkweGIxLCAweDc2LCAweDdkLCAweDNhLCAweDg0LCAweDBiLCAweDNhLCAweDM0LCAweDM3LCAweDYyLCAweDQ0LCAweDc3LAorCTB4YTQsIDB4YmIsIDB4NjMsIDB4MGUsIDB4ZjMsIDB4YjksIDB4MjgsIDB4ZmUsIDB4NGYsIDB4ZTUsIDB4NzgsIDB4YWYsCisJMHg0ZCwgMHhhMCwgMHg0NiwgMHg2MywgMHgxYiwgMHhiMCwgMHg3MywgMHgwMSwgMHhjNSwgMHhiNCwgMHg3ZSwgMHhkNCwKKwkweGFlLCAweDA2LCAweDJlLCAweDBkLCAweGYxLCAweGZlLCAweDhjLCAweDg2LCAweDAzLCAweGE1LCAweDAxLCAweGQxLAorCTB4MzAsIDB4ZjQsIDB4NWIsIDB4MmIsIDB4NTQsIDB4MzUsIDB4YmYsIDB4MDcsIDB4ZjgsIDB4MzAsIDB4ZWYsIDB4MDEsCisJMHg5MiwgMHgwZCwgMHhmNCwgMHhkYiwgMHhlNywgMHg3YywgMHhkZSwgMHg0YywgMHhmMywgMHgzOSwgMHg5ZiwgMHg3MCwKKwkweDY4LCAweDEzLCAweGY5LCAweDRlLCAweDJmLCAweDlhLCAweGY1LCAweDY5LCAweGMyLCAweGNlLCAweGIzLCAweDQ0LAorCTB4NjcsIDB4OTMsIDB4YTgsIDB4ZWMsIDB4NzMsIDB4NDUsIDB4ZTYsIDB4ZjYsIDB4ZTksIDB4OTYsIDB4ZTUsIDB4M2IsCisJMHg0NSwgMHg0ZCwgMHg4MSwgMHg2OSwgMHgwYSwgMHgxMCwgMHg0ZCwgMHgxZCwgMHhhMiwgMHhmYSwgMHhkOCwgMHgwNiwKKwkweGUxLCAweDNiLCAweGQ2LCAweDI1LCAweGE0LCAweDAyLCAweGM3LCAweGU0LCAweDNhLCAweDYzLCAweDRmLCAweDhlLAorCTB4ZjMsIDB4ZDksIDB4NjYsIDB4ZTEsIDB4M2MsIDB4YmEsIDB4NDUsIDB4NzgsIDB4MGIsIDB4M2QsIDB4YzIsIDB4N2YsCisJMHhjYywgMHhjNCwgMHhmZCwgMHhmMSwgMHgyZSwgMHg5YywgMHgxYiwgMHhlNiwgMHhiMywgMHg2YywgMHhmNywgMHg4OSwKKwkweDlhLCAweGI5LCAweGJkLCAweDM5LCAweDZmLCAweGExLCAweGQxLCAweDVmLCAweDQ4LCAweDczLCAweDdmLCAweGY3LAorCTB4ZTMsIDB4MzUsIDB4ZTksIDB4YTEsIDB4NDUsIDB4ZmUsIDB4YTcsIDB4YzYsIDB4MDIsIDB4ZmUsIDB4MjcsIDB4YzcsCisJMHhkNCwgMHhmZSwgMHg3ZCwgMHhjMiwgMHhiMiwgMHg3NiwgMHhjNiwgMHhmZSwgMHgwMywgMHhlYiwgMHhkMCwgMHg2YSwKKwkweDhlLCAweDU1LCAweGYwLCAweGMxLCAweDZlLCAweDkyLCAweGM3LCAweDM2LCAweGNhLCAweDJkLCAweDkzLCAweDdhLAorCTB4ZjMsIDB4MWMsIDB4MTYsIDB4NTEsIDB4NTMsIDB4ZmMsIDB4ZWUsIDB4MWIsIDB4ZmQsIDB4NzcsIDB4NzMsIDB4NmUsCisJMHhlMywgMHg3ZCwgMHg0ZCwgMHg2NywgMHgzYiwgMHgyOCwgMHhlZSwgMHg3ZSwgMHhjNiwgMHg2YiwgMHhjZCwgMHgxMCwKKwkweDlmLCAweDUxLCAweGViLCAweDg3LCAweGZmLCAweDRiLCAweGY2LCAweGY1LCAweGNlLCAweDdkLCAweGI2LCAweGFmLAorCTB4OTcsIDB4NzgsIDB4NTIsIDB4YTgsIDB4ZTUsIDB4MTksIDB4ZTIsIDB4YjcsIDB4Y2EsIDB4ZjEsIDB4YjksIDB4M2QsCisJMHhiZCwgMHhiOSwgMHhmZCwgMHhiYywgMHg0ZSwgMHhlMSwgMHgyYiwgMHg3MCwgMHg3ZCwgMHgxZSwgMHgzMCwgMHg1ZSwKKwkweDFmLCAweGVhLCAweDEwLCAweGRlLCAweDYzLCAweGMzLCAweDk0LCAweDFmLCAweDM3LCAweDEwLCAweGNmLCAweDdjLAorCTB4NzYsIDB4YWMsIDB4NGIsIDB4ZjgsIDB4MGIsIDB4OWIsIDB4ODUsIDB4OGYsIDB4ZjgsIDB4YWMsIDB4MjYsIDB4M2UsCisJMHg3MSwgMHhjYywgMHgyMywgMHhiYywgMHhjNCwgMHhhMywgMHg4NywgMHg3OCwgMHhmNCwgMHhjZSwgMHhmMSwgMHhlOCwKKwkweDI5LCAweDA0LCAweGZkLCAweGU5LCAweDc0LCAweGJkLCAweGZmLCAweGQxLCAweDMxLCAweGM1LCAweGJmLCAweDZmLAorCTB4Y2MsIDB4YjIsIDB4ZGUsIDB4ZDcsIDB4MTUsIDB4M2YsIDB4ZjMsIDB4ZjUsIDB4YWEsIDB4ZmUsIDB4NDUsIDB4YmUsCisJMHg2ZSwgMHgyMCwgMHhiZSwgMHgyYSwgMHg3YiwgMHhiMSwgMHhhNCwgMHhjMywgMHgxNCwgMHhlYiwgMHg5MCwgMHhjZiwKKwkweDcxLCAweGNjLCAweGYzLCAweDc1LCAweDMwLCAweGNkLCAweGZiLCAweDk1LCAweGJjLCAweDZmLCAweDM5LCAweDIwLAorCTB4NTYsIDB4MTAsIDB4NWYsIDB4NjUsIDB4ZTIsIDB4NmIsIDB4ZTUsIDB4OTcsIDB4ZjAsIDB4ZjUsIDB4ZTEsIDB4MzUsCisJMHg3YywgMHhiZCwgMHhmYSwgMHhmNywgMHhmMiwgMHhlNSwgMHgxMSwgMHhjYiwgMHg4NywgMHgzOSwgMHgwZSwgMHhkZCwKKwkweDY2LCAweGM4LCAweGMzLCAweDE2LCAweDYxLCAweDQ3LCAweDA3LCAweGJlLCAweDNmLCAweDA1LCAweDE0LCAweGIzLAorCTB4YmIsIDB4MjAsIDB4NTMsIDB4YmMsIDB4MzksIDB4MWQsIDB4OGYsIDB4ODQsIDB4NWUsIDB4YTEsIDB4N2EsIDB4NzIsCisJMHhiYSwgMHhlNCwgMHgxNSwgMHhjYiwgMHhlYywgMHgzZCwgMHg1OSwgMHhhYywgMHg5MCwgMHg4OSwgMHhhNiwgMHgxOSwKKwkweGZiLCAweDVkLCAweDMzLCAweGU4LCAweGI1LCAweDFhLCAweGViLCAweDUyLCAweDNiLCAweGJiLCAweDE1LCAweDkxLAorCTB4NzIsIDB4YzQsIDB4ZDEsIDB4MjUsIDB4MTIsIDB4MDUsIDB4ZGUsIDB4ODMsIDB4ZGQsIDB4MjIsIDB4NTYsIDB4ZGEsCisJMHhmYiwgMHhhZiwgMHg5ZCwgMHhlMiwgMHhmYSwgMHg0MiwgMHg4NywgMHg2OCwgMHgyMSwgMHhiYiwgMHg2OCwgMHgzZSwKKwkweGM2LCAweGU3LCAweGMxLCAweDM2LCAweDhiLCAweGU2LCAweDM5LCAweDc5LCAweDJjLCAweDI3LCAweDc5LCAweDBjLAorCTB4N2QsIDB4NGUsIDB4MWUsIDB4MWIsIDB4NmMsIDB4NzksIDB4ZmMsIDB4NGMsIDB4YmYsIDB4NzgsIDB4NGQsIDB4MGYsCisJMHg4ZCwgMHhlYiwgMHgyYSwgMHhjYSwgMHg4NiwgMHg1NCwgMHgzYiwgMHhkNSwgMHhjZSwgMHhkNSwgMHg0ZSwgMHg2ZiwKKwkweGM1LCAweGY4LCAweDljLCAweDhmLCAweDY5LCAweGQ1LCAweDY4LCAweDA4LCAweDM5LCAweDBkLCAweGI1LCAweGU3LAorCTB4YjQsIDB4ZDAsIDB4NTIsIDB4ZjcsIDB4ODksIDB4ZTQsIDB4MjYsIDB4MWYsIDB4ZDUsIDB4M2YsIDB4M2IsIDB4NjIsCisJMHg5MSwgMHhlNCwgMHg3MiwgMHgxMSwgMHg0OSwgMHgzOCwgMHgwNSwgMHhlNywgMHgxNSwgMHg1ZCwgMHhhZSwgMHgyYSwKKwkweDlhLCAweGQ4LCAweDQ3LCAweGYxLCAweGVkLCAweGM1LCAweDljLCAweDQ0LCAweGQ4LCAweDgxLCAweGRmLCAweDNmLAorCTB4NzMsIDB4ZTIsIDB4NDYsIDB4ODIsIDB4MTIsIDB4NGYsIDB4MTAsIDB4ZWUsIDB4NzgsIDB4M2MsIDB4ZGIsIDB4ODcsCisJMHgyNywgMHhmMiwgMHhiZCwgMHg3OCwgMHgzYywgMHhmZiwgMHg3NywgMHhkZSwgMHhiNSwgMHg5MSwgMHhiZCwgMHg0NiwKKwkweDYzLCAweGEyLCAweDcyLCAweDE2LCAweGUxLCAweGUzLCAweGM0LCAweDc1LCAweDExLCAweDk2LCAweGNkLCAweDg5LAorCTB4MTYsIDB4MzksIDB4YzIsIDB4YjUsIDB4YWUsIDB4ZjMsIDB4NzcsIDB4ZGYsIDB4ZDUsIDB4ZDgsIDB4MTcsIDB4N2IsCisJMHg1NiwgMHhiZCwgMHg2NCwgMHg2MywgMHg5MSwgMHg5MywgMHg2ZCwgMHhjNywgMHhlYywgMHgzMywgMHg1MiwgMHhlNSwKKwkweDk1LCAweDdiLCAweGVjLCAweDc3LCAweDQxLCAweDdkLCAweGFiLCAweGVmLCAweGQyLCAweGQ4LCAweDFmLCAweDRlLAorCTB4YzQsIDB4ZDcsIDB4ZGIsIDB4ZjksIDB4YjUsIDB4NzEsIDB4NmQsIDB4ZTUsIDB4M2QsIDB4OTksIDB4ZTAsIDB4ZGEsCisJMHg0YSwgMHhhZiwgMHgyNiwgMHhiMCwgMHgzNiwgMHg2YSwgMHg3ZiwgMHg4NiwgMHhkNiwgMHg1NiwgMHhmNiwgMHhiYSwKKwkweGY1LCAweGI1LCAweDRkLCAweGY2LCAweDY3LCAweDc0LCAweDZkLCAweGM1LCAweGE3LCAweGI0LCAweGI1LCAweDlhLAorCTB4ZmQsIDB4MTksIDB4NWYsIDB4NWIsIDB4YzksIDB4Y2IsIDB4MmQsIDB4NmIsIDB4OTcsIDB4NWUsIDB4N2QsIDB4YmYsCisJMHg4NiwgMHhmZiwgMHhmZSwgMHgxNywgMHg5ZiwgMHhlZCwgMHg0ZSwgMHhiMiwgMHgyMCwgMHgzYiwgMHgwMCwgMHgwMCwKKwkweDAwIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYm54Ml9UWFBfYjA5RndEYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CiBzdGF0aWMgY29uc3QgdTMyIGJueDJfVFhQX2IwOUZ3Um9kYXRhWygweDMwLzQpICsgMV0gPSB7CkBAIC00NTY0LDE1ICs0NTgyLDE1IEBACiAJMHgwMDAwMDAwMCB9OwogCiBzdGF0aWMgc3RydWN0IGZ3X2luZm8gYm54Ml90eHBfZndfMDkgPSB7Ci0JLyogRmlybXdhcmUgdmVyc2lvbjogNC4wLjUgKi8KKwkvKiBGaXJtd2FyZSB2ZXJzaW9uOiA0LjQuMjMgKi8KIAkudmVyX21ham9yCQkJPSAweDQsCi0JLnZlcl9taW5vcgkJCT0gMHgwLAotCS52ZXJfZml4CQkJPSAweDUsCisJLnZlcl9taW5vcgkJCT0gMHg0LAorCS52ZXJfZml4CQkJPSAweDE3LAogCiAJLnN0YXJ0X2FkZHIJCQk9IDB4MDgwMDAwOTQsCiAKIAkudGV4dF9hZGRyCQkJPSAweDA4MDAwMDAwLAotCS50ZXh0X2xlbgkJCT0gMHgzYTUwLAorCS50ZXh0X2xlbgkJCT0gMHgzYjFjLAogCS50ZXh0X2luZGV4CQkJPSAweDAsCiAJLmd6X3RleHQJCQk9IGJueDJfVFhQX2IwOUZ3VGV4dCwKIAkuZ3pfdGV4dF9sZW4JCQk9IHNpemVvZihibngyX1RYUF9iMDlGd1RleHQpLApAQCAtNDU4MiwxNSArNDYwMCwxNSBAQAogCS5kYXRhX2luZGV4CQkJPSAweDAsCiAJLmRhdGEJCQkJPSBibngyX1RYUF9iMDlGd0RhdGEsCiAKLQkuc2Jzc19hZGRyCQkJPSAweDA4MDAzYWEwLAorCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDNiODAsCiAJLnNic3NfbGVuCQkJPSAweDZjLAogCS5zYnNzX2luZGV4CQkJPSAweDAsCiAKLQkuYnNzX2FkZHIJCQk9IDB4MDgwMDNiMGMsCisJLmJzc19hZGRyCQkJPSAweDA4MDAzYmVjLAogCS5ic3NfbGVuCQkJPSAweDI0YywKIAkuYnNzX2luZGV4CQkJPSAweDAsCiAKLQkucm9kYXRhX2FkZHIJCQk9IDB4MDgwMDNhNTAsCisJLnJvZGF0YV9hZGRyCQkJPSAweDA4MDAzYjFjLAogCS5yb2RhdGFfbGVuCQkJPSAweDMwLAogCS5yb2RhdGFfaW5kZXgJCQk9IDB4MCwKIAkucm9kYXRhCQkJCT0gYm54Ml9UWFBfYjA5RndSb2RhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC5jIGIvZHJpdmVycy9uZXQvYm54MnguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBjYmE2NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTk4OCArMCwwIEBACi0vKiBibngyeC5jOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIE1haW50YWluZWQgYnk6IEVpbG9uIEdyZWVuc3RlaW4gPGVpbG9uZ0Bicm9hZGNvbS5jb20+Ci0gKiBXcml0dGVuIGJ5OiBFbGllemVyIFRhbWlyCi0gKiBCYXNlZCBvbiBjb2RlIGZyb20gTWljaGFlbCBDaGFuJ3MgYm54MiBkcml2ZXIKLSAqIFVEUCBDU1VNIGVycmF0YSB3b3JrYXJvdW5kIGJ5IEFyaWsgR2VuZGVsbWFuCi0gKiBTbG93cGF0aCByZXdvcmsgYnkgVmxhZGlzbGF2IFpvbG90YXJvdgotICogU3RhdGlzdGljcyBhbmQgTGluayBtYW5hZ2VtZW50IGJ5IFlpdGNoYWsgR2VydG5lcgotICoKLSAqLwotCi0vKiBkZWZpbmUgdGhpcyB0byBtYWtlIHRoZSBkcml2ZXIgZnJlZXplIG9uIGVycm9yCi0gKiB0byBhbGxvdyBnZXR0aW5nIGRlYnVnIGluZm8KLSAqICh5b3Ugd2lsbCBuZWVkIHRvIHJlYm9vdCBhZnRlcndhcmRzKQotICovCi0vKiNkZWZpbmUgQk5YMlhfU1RPUF9PTl9FUlJPUiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPiAgLyogZm9yIGRldl9pbmZvKCkgKi8KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaWZkZWYgTkVUSUZfRl9IV19WTEFOX1RYCi0JI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KLQkjZGVmaW5lIEJDTV9WTEFOIDEKLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pcC5oPgotI2luY2x1ZGUgPG5ldC90Y3AuaD4KLSNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+Ci0jaW5jbHVkZSA8bGludXgvemxpYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSAiYm54MnhfcmVnLmgiCi0jaW5jbHVkZSAiYm54MnhfZndfZGVmcy5oIgotI2luY2x1ZGUgImJueDJ4X2hzaS5oIgotI2luY2x1ZGUgImJueDJ4LmgiCi0jaW5jbHVkZSAiYm54MnhfaW5pdC5oIgotCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAgICAgICIxLjQyLjQiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURSAgICAgICIyMDA4LzQvOSIKLSNkZWZpbmUgQk5YMlhfQkNfVkVSICAgIAkweDA0MDIwMAotCi0vKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCi0jZGVmaW5lIFRYX1RJTUVPVVQgICAgICAJKDUqSFopCi0KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLQkiQnJvYWRjb20gTmV0WHRyZW1lIElJIDU3NzFYIDEwR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgIgotCURSVl9NT0RVTEVfTkFNRSAiICIgRFJWX01PRFVMRV9WRVJTSU9OICIgKCIgRFJWX01PRFVMRV9SRUxEQVRFICIpXG4iOwotCi1NT0RVTEVfQVVUSE9SKCJFbGllemVyIFRhbWlyIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBCQ001NzcxMCBEcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKERSVl9NT0RVTEVfVkVSU0lPTik7Ci0KLXN0YXRpYyBpbnQgdXNlX2ludGE7Ci1zdGF0aWMgaW50IHBvbGw7Ci1zdGF0aWMgaW50IG9uZWZ1bmM7Ci1zdGF0aWMgaW50IG5vbWNwOwotc3RhdGljIGludCBkZWJ1ZzsKLXN0YXRpYyBpbnQgdXNlX211bHRpOwotCi1tb2R1bGVfcGFyYW0odXNlX2ludGEsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ocG9sbCwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShvbmVmdW5jLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh1c2VfaW50YSwgInVzZSBJTlQjQSBpbnN0ZWFkIG9mIE1TSS1YIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvbGwsICJ1c2UgcG9sbGluZyAoZm9yIGRlYnVnKSIpOwotTU9EVUxFX1BBUk1fREVTQyhvbmVmdW5jLCAiZW5hYmxlIG9ubHkgZmlyc3QgZnVuY3Rpb24iKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm9tY3AsICJpZ25vcmUgbWFuYWdlbWVudCBDUFUgKEltcGxpZXMgb25lZnVuYykiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWZhdWx0IGRlYnVnIG1zZ2xldmVsIik7Ci0KLSNpZmRlZiBCTlgyWF9NVUxUSQotbW9kdWxlX3BhcmFtKHVzZV9tdWx0aSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModXNlX211bHRpLCAidXNlIHBlci1DUFUgcXVldWVzIik7Ci0jZW5kaWYKLQotZW51bSBibngyeF9ib2FyZF90eXBlIHsKLQlCQ001NzcxMCA9IDAsCi19OwotCi0vKiBpbmRleGVkIGJ5IGJvYXJkX3QsIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IHsKLQljaGFyICpuYW1lOwotfSBib2FyZF9pbmZvW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7ICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTc3MTAgWEdiIiB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYm54MnhfcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTAsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJDTTU3NzEwIH0sCi0JeyAwIH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBibngyeF9wY2lfdGJsKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogR2VuZXJhbCBzZXJ2aWNlIGZ1bmN0aW9ucwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogdXNlZCBvbmx5IGF0IGluaXQKLSAqIGxvY2tpbmcgaXMgZG9uZSBieSBtY3AKLSAqLwotc3RhdGljIHZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCkKLXsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0FERFJFU1MsIGFkZHIpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfREFUQSwgdmFsKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0FERFJFU1MsCi0JCQkgICAgICAgUENJQ0ZHX1ZFTkRPUl9JRF9PRkZTRVQpOwotfQotCi0jaWZkZWYgQk5YMlhfSU5EX1JECi1zdGF0aWMgdTMyIGJueDJ4X3JlZ19yZF9pbmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIpCi17Ci0JdTMyIHZhbDsKLQotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywgYWRkcik7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0RBVEEsICZ2YWwpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywKLQkJCSAgICAgICBQQ0lDRkdfVkVORE9SX0lEX09GRlNFVCk7Ci0KLQlyZXR1cm4gdmFsOwotfQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCB1MzIgZG1hZV9yZWdfZ29fY1tdID0gewotCURNQUVfUkVHX0dPX0MwLCBETUFFX1JFR19HT19DMSwgRE1BRV9SRUdfR09fQzIsIERNQUVfUkVHX0dPX0MzLAotCURNQUVfUkVHX0dPX0M0LCBETUFFX1JFR19HT19DNSwgRE1BRV9SRUdfR09fQzYsIERNQUVfUkVHX0dPX0M3LAotCURNQUVfUkVHX0dPX0M4LCBETUFFX1JFR19HT19DOSwgRE1BRV9SRUdfR09fQzEwLCBETUFFX1JFR19HT19DMTEsCi0JRE1BRV9SRUdfR09fQzEyLCBETUFFX1JFR19HT19DMTMsIERNQUVfUkVHX0dPX0MxNCwgRE1BRV9SRUdfR09fQzE1Ci19OwotCi0vKiBjb3B5IGNvbW1hbmQgaW50byBETUFFIGNvbW1hbmQgbWVtb3J5IGFuZCBzZXQgRE1BRSBjb21tYW5kIGdvICovCi1zdGF0aWMgdm9pZCBibngyeF9wb3N0X2RtYWUoc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSwKLQkJCSAgICBpbnQgaWR4KQotewotCXUzMiBjbWRfb2Zmc2V0OwotCWludCBpOwotCi0JY21kX29mZnNldCA9IChETUFFX1JFR19DTURfTUVNICsgc2l6ZW9mKHN0cnVjdCBkbWFlX2NvbW1hbmQpICogaWR4KTsKLQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKS80KTsgaSsrKSB7Ci0JCVJFR19XUihicCwgY21kX29mZnNldCArIGkqNCwgKigoKHUzMiAqKWRtYWUpICsgaSkpOwotCi0vKiAgICAgIAlEUChORVRJRl9NU0dfRE1BRSwgIkRNQUUgY21kWyVkXS4lZCAoMHglMDh4KSA6IDB4JTA4eFxuIiwKLQkJICAgaWR4LCBpLCBjbWRfb2Zmc2V0ICsgaSo0LCAqKCgodTMyICopZG1hZSkgKyBpKSk7ICovCi0JfQotCVJFR19XUihicCwgZG1hZV9yZWdfZ29fY1tpZHhdLCAxKTsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfd3JpdGVfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCBkbWFfYWRkcl90IGRtYV9hZGRyLAotCQkJICAgICB1MzIgZHN0X2FkZHIsIHUzMiBsZW4zMikKLXsKLQlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlID0gJmJwLT5kbWFlOwotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0JdTMyICp3Yl9jb21wID0gYm54Mnhfc3AoYnAsIHdiX2NvbXApOwotCWludCB0aW1lb3V0ID0gMjAwOwotCi0JbWVtc2V0KGRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7Ci0KLQlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAotCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAotCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAotI2Vsc2UKLQkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKLSNlbmRpZgotCQkJKHBvcnQgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApKTsKLQlkbWFlLT5zcmNfYWRkcl9sbyA9IFU2NF9MTyhkbWFfYWRkcik7Ci0JZG1hZS0+c3JjX2FkZHJfaGkgPSBVNjRfSEkoZG1hX2FkZHIpOwotCWRtYWUtPmRzdF9hZGRyX2xvID0gZHN0X2FkZHIgPj4gMjsKLQlkbWFlLT5kc3RfYWRkcl9oaSA9IDA7Ci0JZG1hZS0+bGVuID0gbGVuMzI7Ci0JZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKLQlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwotCWRtYWUtPmNvbXBfdmFsID0gQk5YMlhfV0JfQ09NUF9WQUw7Ci0KLS8qCi0JRFAoTkVUSUZfTVNHX0RNQUUsICJkbWFlOiBvcGNvZGUgMHglMDh4XG4iCi0JICAgRFBfTEVWRUwgInNyY19hZGRyICBbJXg6JTA4eF0gIGxlbiBbJWQgKjRdICAiCi0JCSAgICAiZHN0X2FkZHIgWyV4OiUwOHggKCUwOHgpXVxuIgotCSAgIERQX0xFVkVMICJjb21wX2FkZHIgWyV4OiUwOHhdICBjb21wX3ZhbCAweCUwOHhcbiIsCi0JICAgZG1hZS0+b3Bjb2RlLCBkbWFlLT5zcmNfYWRkcl9oaSwgZG1hZS0+c3JjX2FkZHJfbG8sCi0JICAgZG1hZS0+bGVuLCBkbWFlLT5kc3RfYWRkcl9oaSwgZG1hZS0+ZHN0X2FkZHJfbG8sIGRzdF9hZGRyLAotCSAgIGRtYWUtPmNvbXBfYWRkcl9oaSwgZG1hZS0+Y29tcF9hZGRyX2xvLCBkbWFlLT5jb21wX3ZhbCk7Ci0qLwotLyoKLQlEUChORVRJRl9NU0dfRE1BRSwgImRhdGEgWzB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eF1cbiIsCi0JICAgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzBdLCBicC0+c2xvd3BhdGgtPndiX2RhdGFbMV0sCi0JICAgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzJdLCBicC0+c2xvd3BhdGgtPndiX2RhdGFbM10pOwotKi8KLQotCSp3Yl9jb21wID0gMDsKLQotCWJueDJ4X3Bvc3RfZG1hZShicCwgZG1hZSwgcG9ydCAqIDgpOwotCi0JdWRlbGF5KDUpOwotCS8qIGFkanVzdCB0aW1lb3V0IGZvciBlbXVsYXRpb24vRlBHQSAqLwotCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKLQkJdGltZW91dCAqPSAxMDA7Ci0Jd2hpbGUgKCp3Yl9jb21wICE9IEJOWDJYX1dCX0NPTVBfVkFMKSB7Ci0vKiAgICAgIAlEUChORVRJRl9NU0dfRE1BRSwgIndiX2NvbXAgMHglMDh4XG4iLCAqd2JfY29tcCk7ICovCi0JCXVkZWxheSg1KTsKLQkJaWYgKCF0aW1lb3V0KSB7Ci0JCQlCTlgyWF9FUlIoImRtYWUgdGltZW91dCFcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdGltZW91dC0tOwotCX0KLX0KLQotI2lmZGVmIEJOWDJYX0RNQUVfUkQKLXN0YXRpYyB2b2lkIGJueDJ4X3JlYWRfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc3JjX2FkZHIsIHUzMiBsZW4zMikKLXsKLQlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlID0gJmJwLT5kbWFlOwotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0JdTMyICp3Yl9jb21wID0gYm54Mnhfc3AoYnAsIHdiX2NvbXApOwotCWludCB0aW1lb3V0ID0gMjAwOwotCi0JbWVtc2V0KGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgMCwgc2l6ZW9mKHUzMikgKiA0KTsKLQltZW1zZXQoZG1hZSwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFlX2NvbW1hbmQpKTsKLQotCWRtYWUtPm9wY29kZSA9IChETUFFX0NNRF9TUkNfR1JDIHwgRE1BRV9DTURfRFNUX1BDSSB8Ci0JCQlETUFFX0NNRF9DX0RTVF9QQ0kgfCBETUFFX0NNRF9DX0VOQUJMRSB8Ci0JCQlETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAotI2lmZGVmIF9fQklHX0VORElBTgotCQkJRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8Ci0jZWxzZQotCQkJRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAotI2VuZGlmCi0JCQkocG9ydCA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkpOwotCWRtYWUtPnNyY19hZGRyX2xvID0gc3JjX2FkZHIgPj4gMjsKLQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfZGF0YSkpOwotCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2RhdGEpKTsKLQlkbWFlLT5sZW4gPSBsZW4zMjsKLQlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwotCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7Ci0JZG1hZS0+Y29tcF92YWwgPSBCTlgyWF9XQl9DT01QX1ZBTDsKLQotLyoKLQlEUChORVRJRl9NU0dfRE1BRSwgImRtYWU6IG9wY29kZSAweCUwOHhcbiIKLQkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKLQkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCi0JICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKLQkgICBkbWFlLT5vcGNvZGUsIGRtYWUtPnNyY19hZGRyX2hpLCBkbWFlLT5zcmNfYWRkcl9sbywKLQkgICBkbWFlLT5sZW4sIGRtYWUtPmRzdF9hZGRyX2hpLCBkbWFlLT5kc3RfYWRkcl9sbywgc3JjX2FkZHIsCi0JICAgZG1hZS0+Y29tcF9hZGRyX2hpLCBkbWFlLT5jb21wX2FkZHJfbG8sIGRtYWUtPmNvbXBfdmFsKTsKLSovCi0KLQkqd2JfY29tcCA9IDA7Ci0KLQlibngyeF9wb3N0X2RtYWUoYnAsIGRtYWUsIHBvcnQgKiA4KTsKLQotCXVkZWxheSg1KTsKLQl3aGlsZSAoKndiX2NvbXAgIT0gQk5YMlhfV0JfQ09NUF9WQUwpIHsKLQkJdWRlbGF5KDUpOwotCQlpZiAoIXRpbWVvdXQpIHsKLQkJCUJOWDJYX0VSUigiZG1hZSB0aW1lb3V0IVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQl0aW1lb3V0LS07Ci0JfQotLyoKLQlEUChORVRJRl9NU0dfRE1BRSwgImRhdGEgWzB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eF1cbiIsCi0JICAgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzBdLCBicC0+c2xvd3BhdGgtPndiX2RhdGFbMV0sCi0JICAgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzJdLCBicC0+c2xvd3BhdGgtPndiX2RhdGFbM10pOwotKi8KLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGJueDJ4X21jX2Fzc2VydChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpLCBqLCByYyA9IDA7Ci0JY2hhciBsYXN0X2lkeDsKLQljb25zdCBjaGFyIHN0b3JtW10gPSB7IlhUQ1UifTsKLQljb25zdCB1MzIgaW50bWVtX2Jhc2VbXSA9IHsKLQkJQkFSX1hTVFJPUk1fSU5UTUVNLAotCQlCQVJfVFNUUk9STV9JTlRNRU0sCi0JCUJBUl9DU1RST1JNX0lOVE1FTSwKLQkJQkFSX1VTVFJPUk1fSU5UTUVNCi0JfTsKLQotCS8qIEdvIHRocm91Z2ggYWxsIGluc3RhbmNlcyBvZiBhbGwgU0VNSXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWxhc3RfaWR4ID0gUkVHX1JEOChicCwgWFNUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCArCi0JCQkJICAgaW50bWVtX2Jhc2VbaV0pOwotCQlpZiAobGFzdF9pZHgpCi0JCQlCTlgyWF9MT0coIkRBVEEgJWNTVE9STV9BU1NFUlRfTElTVF9JTkRFWCAweCV4XG4iLAotCQkJCSAgc3Rvcm1baV0sIGxhc3RfaWR4KTsKLQotCQkvKiBwcmludCB0aGUgYXNzZXJ0cyAqLwotCQlmb3IgKGogPSAwOyBqIDwgU1RST01fQVNTRVJUX0FSUkFZX1NJWkU7IGorKykgewotCQkJdTMyIHJvdzAsIHJvdzEsIHJvdzIsIHJvdzM7Ci0KLQkJCXJvdzAgPSBSRUdfUkQoYnAsIFhTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaikgKwotCQkJCSAgICAgIGludG1lbV9iYXNlW2ldKTsKLQkJCXJvdzEgPSBSRUdfUkQoYnAsIFhTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaikgKyA0ICsKLQkJCQkgICAgICBpbnRtZW1fYmFzZVtpXSk7Ci0JCQlyb3cyID0gUkVHX1JEKGJwLCBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGopICsgOCArCi0JCQkJICAgICAgaW50bWVtX2Jhc2VbaV0pOwotCQkJcm93MyA9IFJFR19SRChicCwgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChqKSArIDEyICsKLQkJCQkgICAgICBpbnRtZW1fYmFzZVtpXSk7Ci0KLQkJCWlmIChyb3cwICE9IENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFKSB7Ci0JCQkJQk5YMlhfTE9HKCJEQVRBICVjU1RPUk1fQVNTRVJUX0lOREVYIDB4JXggPSIKLQkJCQkJICAiIDB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKLQkJCQkJICBzdG9ybVtpXSwgaiwgcm93Mywgcm93Miwgcm93MSwgcm93MCk7Ci0JCQkJcmMrKzsKLQkJCX0gZWxzZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9md19kdW1wKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIG1hcmssIG9mZnNldDsKLQl1MzIgZGF0YVs5XTsKLQlpbnQgd29yZDsKLQotCW1hcmsgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9TQ1JBVENIICsgMHhmMTA0KTsKLQltYXJrID0gKChtYXJrICsgMHgzKSAmIH4weDMpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImJlZ2luIGZ3IGR1bXAgKG1hcmsgMHgleClcbiIgS0VSTl9FUlIsIG1hcmspOwotCi0JZm9yIChvZmZzZXQgPSBtYXJrIC0gMHgwODAwMDAwMDsgb2Zmc2V0IDw9IDB4RjkwMDsgb2Zmc2V0ICs9IDB4OCo0KSB7Ci0JCWZvciAod29yZCA9IDA7IHdvcmQgPCA4OyB3b3JkKyspCi0JCQlkYXRhW3dvcmRdID0gaHRvbmwoUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfU0NSQVRDSCArCi0JCQkJCQkgIG9mZnNldCArIDQqd29yZCkpOwotCQlkYXRhWzhdID0gMHgwOwotCQlwcmludGsoS0VSTl9DT05UICIlcyIsIChjaGFyICopZGF0YSk7Ci0JfQotCWZvciAob2Zmc2V0ID0gMHhGMTA4OyBvZmZzZXQgPD0gbWFyayAtIDB4MDgwMDAwMDA7IG9mZnNldCArPSAweDgqNCkgewotCQlmb3IgKHdvcmQgPSAwOyB3b3JkIDwgODsgd29yZCsrKQotCQkJZGF0YVt3b3JkXSA9IGh0b25sKFJFR19SRChicCwgTUNQX1JFR19NQ1BSX1NDUkFUQ0ggKwotCQkJCQkJICBvZmZzZXQgKyA0KndvcmQpKTsKLQkJZGF0YVs4XSA9IDB4MDsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCAoY2hhciAqKWRhdGEpOwotCX0KLQlwcmludGsoIlxuIiBLRVJOX0VSUiBQRlggImVuZCBvZiBmdyBkdW1wXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfcGFuaWNfZHVtcChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpOwotCXUxNiBqLCBzdGFydCwgZW5kOwotCi0JQk5YMlhfRVJSKCJiZWdpbiBjcmFzaCBkdW1wIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCQlzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEgKmh3X3Byb2RzID0gZnAtPmh3X3R4X3Byb2RzOwotCi0JCUJOWDJYX0VSUigicXVldWVbJWRdOiB0eF9wa3RfcHJvZCgleCkgIHR4X3BrdF9jb25zKCV4KSIKLQkJCSAgIiAgdHhfYmRfcHJvZCgleCkgIHR4X2JkX2NvbnMoJXgpICAqdHhfY29uc19zYigleCkiCi0JCQkgICIgICpyeF9jb25zX3NiKCV4KSAgcnhfY29tcF9wcm9kKCV4KSIKLQkJCSAgIiAgcnhfY29tcF9jb25zKCV4KSAgZnBfY19pZHgoJXgpICBmcF91X2lkeCgleCkiCi0JCQkgICIgIGJkIGRhdGEoJXgsJXgpXG4iLAotCQkJICBpLCBmcC0+dHhfcGt0X3Byb2QsIGZwLT50eF9wa3RfY29ucywgZnAtPnR4X2JkX3Byb2QsCi0JCQkgIGZwLT50eF9iZF9jb25zLCAqZnAtPnR4X2NvbnNfc2IsICpmcC0+cnhfY29uc19zYiwKLQkJCSAgZnAtPnJ4X2NvbXBfcHJvZCwgZnAtPnJ4X2NvbXBfY29ucywgZnAtPmZwX2NfaWR4LAotCQkJICBmcC0+ZnBfdV9pZHgsIGh3X3Byb2RzLT5wYWNrZXRzX3Byb2QsCi0JCQkgIGh3X3Byb2RzLT5iZHNfcHJvZCk7Ci0KLQkJc3RhcnQgPSBUWF9CRChsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpIC0gMTApOwotCQllbmQgPSBUWF9CRChsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpICsgMjQ1KTsKLQkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgewotCQkJc3RydWN0IHN3X3R4X2JkICpzd19iZCA9ICZmcC0+dHhfYnVmX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigicGFja2V0WyV4XT1bJXAsJXhdXG4iLCBqLAotCQkJCSAgc3dfYmQtPnNrYiwgc3dfYmQtPmZpcnN0X2JkKTsKLQkJfQotCi0JCXN0YXJ0ID0gVFhfQkQoZnAtPnR4X2JkX2NvbnMgLSAxMCk7Ci0JCWVuZCA9IFRYX0JEKGZwLT50eF9iZF9jb25zICsgMjU0KTsKLQkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgewotCQkJdTMyICp0eF9iZCA9ICh1MzIgKikmZnAtPnR4X2Rlc2NfcmluZ1tqXTsKLQotCQkJQk5YMlhfRVJSKCJ0eF9iZFsleF09WyV4OiV4OiV4OiV4XVxuIiwKLQkJCQkgIGosIHR4X2JkWzBdLCB0eF9iZFsxXSwgdHhfYmRbMl0sIHR4X2JkWzNdKTsKLQkJfQotCi0JCXN0YXJ0ID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSAtIDEwKTsKLQkJZW5kID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSArIDUwMyk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXUzMiAqcnhfYmQgPSAodTMyICopJmZwLT5yeF9kZXNjX3Jpbmdbal07Ci0JCQlzdHJ1Y3Qgc3dfcnhfYmQgKnN3X2JkID0gJmZwLT5yeF9idWZfcmluZ1tqXTsKLQotCQkJQk5YMlhfRVJSKCJyeF9iZFsleF09WyV4OiV4XSAgc3dfYmQ9WyVwXVxuIiwKLQkJCQkgIGosIHJ4X2JkWzBdLCByeF9iZFsxXSwgc3dfYmQtPnNrYik7Ci0JCX0KLQotCQlzdGFydCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zIC0gMTApOwotCQllbmQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyArIDUwMyk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXUzMiAqY3FlID0gKHUzMiAqKSZmcC0+cnhfY29tcF9yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoImNxZVsleF09WyV4OiV4OiV4OiV4XVxuIiwKLQkJCQkgIGosIGNxZVswXSwgY3FlWzFdLCBjcWVbMl0sIGNxZVszXSk7Ci0JCX0KLQl9Ci0KLQlCTlgyWF9FUlIoImRlZl9jX2lkeCgldSkgIGRlZl91X2lkeCgldSkgIGRlZl94X2lkeCgldSkiCi0JCSAgIiAgZGVmX3RfaWR4KCV1KSAgZGVmX2F0dF9pZHgoJXUpICBhdHRuX3N0YXRlKCV1KSIKLQkJICAiICBzcHFfcHJvZF9pZHgoJXUpXG4iLAotCQkgIGJwLT5kZWZfY19pZHgsIGJwLT5kZWZfdV9pZHgsIGJwLT5kZWZfeF9pZHgsIGJwLT5kZWZfdF9pZHgsCi0JCSAgYnAtPmRlZl9hdHRfaWR4LCBicC0+YXR0bl9zdGF0ZSwgYnAtPnNwcV9wcm9kX2lkeCk7Ci0KLQotCWJueDJ4X21jX2Fzc2VydChicCk7Ci0JQk5YMlhfRVJSKCJlbmQgY3Jhc2ggZHVtcCAtLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0KLQlicC0+c3RhdHNfc3RhdGUgPSBTVEFUU19TVEFURV9ESVNBQkxFOwotCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRzX3N0YXRlIC0gRElTQUJMRVxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2ludF9lbmFibGUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCXUzMiBhZGRyID0gcG9ydCA/IEhDX1JFR19DT05GSUdfMSA6IEhDX1JFR19DT05GSUdfMDsKLQl1MzIgdmFsID0gUkVHX1JEKGJwLCBhZGRyKTsKLQlpbnQgbXNpeCA9IChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpID8gMSA6IDA7Ci0KLQlpZiAobXNpeCkgewotCQl2YWwgJj0gfkhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzA7Ci0JCXZhbCB8PSAoSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKLQkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKLQl9IGVsc2UgewotCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgfAotCQkJSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKLQkJCUhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wIHwKLQkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKLQotCQkvKiBFcnJhdGEgQTAuMTU4IHdvcmthcm91bmQgKi8KLQkJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgTVNJLVggJWRcbiIsCi0JCSAgIHZhbCwgcG9ydCwgYWRkciwgbXNpeCk7Ci0KLQkJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOwotCi0JCXZhbCAmPSB+SENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wOwotCX0KLQotCURQKE5FVElGX01TR19JTlRSLCAid3JpdGUgJXggdG8gSEMgJWQgKGFkZHIgMHgleCkgIE1TSS1YICVkXG4iLAotCSAgIHZhbCwgcG9ydCwgYWRkciwgbXNpeCk7Ci0KLQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2ludF9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQl1MzIgYWRkciA9IHBvcnQgPyBIQ19SRUdfQ09ORklHXzEgOiBIQ19SRUdfQ09ORklHXzA7Ci0JdTMyIHZhbCA9IFJFR19SRChicCwgYWRkcik7Ci0KLQl2YWwgJj0gfihIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKLQkJIEhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8Ci0JCSBIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMCB8Ci0JCSBIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7Ci0KLQlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpXG4iLAotCSAgIHZhbCwgcG9ydCwgYWRkcik7Ci0KLQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7Ci0JaWYgKFJFR19SRChicCwgYWRkcikgIT0gdmFsKQotCQlCTlgyWF9FUlIoIkJVRyEgcHJvcGVyIHZhbCBub3QgcmVhZCBmcm9tIElHVSFcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9pbnRfZGlzYWJsZV9zeW5jKHN0cnVjdCBibngyeCAqYnApCi17Ci0KLQlpbnQgbXNpeCA9IChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpID8gMSA6IDA7Ci0JaW50IGk7Ci0KLQlhdG9taWNfaW5jKCZicC0+aW50cl9zZW0pOwotCS8qIHByZXZlbnQgdGhlIEhXIGZyb20gc2VuZGluZyBpbnRlcnJ1cHRzICovCi0JYm54MnhfaW50X2Rpc2FibGUoYnApOwotCi0JLyogbWFrZSBzdXJlIGFsbCBJU1JzIGFyZSBkb25lICovCi0JaWYgKG1zaXgpIHsKLQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpCi0JCQlzeW5jaHJvbml6ZV9pcnEoYnAtPm1zaXhfdGFibGVbaV0udmVjdG9yKTsKLQotCQkvKiBvbmUgbW9yZSBmb3IgdGhlIFNsb3cgUGF0aCBJUlEgKi8KLQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2ldLnZlY3Rvcik7Ci0JfSBlbHNlCi0JCXN5bmNocm9uaXplX2lycShicC0+cGRldi0+aXJxKTsKLQotCS8qIG1ha2Ugc3VyZSBzcF90YXNrIGlzIG5vdCBydW5uaW5nICovCi0JY2FuY2VsX3dvcmtfc3luYygmYnAtPnNwX3Rhc2spOwotCi19Ci0KLS8qIGZhc3QgcGF0aCBjb2RlICovCi0KLS8qCi0gKiBnZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2Fja19zYihzdHJ1Y3QgYm54MnggKmJwLCB1OCBpZCwKLQkJCQl1OCBzdG9ybSwgdTE2IGluZGV4LCB1OCBvcCwgdTggdXBkYXRlKQotewotCXUzMiBpZ3VfYWRkciA9IChJR1VfQUREUl9JTlRfQUNLICsgSUdVX1BPUlRfQkFTRSAqIGJwLT5wb3J0KSAqIDg7Ci0Jc3RydWN0IGlndV9hY2tfcmVnaXN0ZXIgaWd1X2FjazsKLQotCWlndV9hY2suc3RhdHVzX2Jsb2NrX2luZGV4ID0gaW5kZXg7Ci0JaWd1X2Fjay5zYl9pZF9hbmRfZmxhZ3MgPQotCQkJKChpZCA8PCBJR1VfQUNLX1JFR0lTVEVSX1NUQVRVU19CTE9DS19JRF9TSElGVCkgfAotCQkJIChzdG9ybSA8PCBJR1VfQUNLX1JFR0lTVEVSX1NUT1JNX0lEX1NISUZUKSB8Ci0JCQkgKHVwZGF0ZSA8PCBJR1VfQUNLX1JFR0lTVEVSX1VQREFURV9JTkRFWF9TSElGVCkgfAotCQkJIChvcCA8PCBJR1VfQUNLX1JFR0lTVEVSX0lOVEVSUlVQVF9NT0RFX1NISUZUKSk7Ci0KLS8qICAgICAgRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAweCUwOHggdG8gSUdVIGFkZHIgMHgleFxuIiwKLQkgICAoKih1MzIgKikmaWd1X2FjayksIEJBUl9JR1VfSU5UTUVNICsgaWd1X2FkZHIpOyAqLwotCVJFR19XUihicCwgQkFSX0lHVV9JTlRNRU0gKyBpZ3VfYWRkciwgKCoodTMyICopJmlndV9hY2spKTsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgYm54MnhfdXBkYXRlX2Zwc2JfaWR4KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCi17Ci0Jc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrICpmcHNiID0gZnAtPnN0YXR1c19ibGs7Ci0JdTE2IHJjID0gMDsKLQotCWJhcnJpZXIoKTsgLyogc3RhdHVzIGJsb2NrIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGNoaXAgKi8KLQlpZiAoZnAtPmZwX2NfaWR4ICE9IGZwc2ItPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCkgewotCQlmcC0+ZnBfY19pZHggPSBmcHNiLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXg7Ci0JCXJjIHw9IDE7Ci0JfQotCWlmIChmcC0+ZnBfdV9pZHggIT0gZnBzYi0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KSB7Ci0JCWZwLT5mcF91X2lkeCA9IGZwc2ItPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleDsKLQkJcmMgfD0gMjsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBibngyeF9oYXNfd29yayhzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQotewotCXUxNiByeF9jb25zX3NiID0gbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKTsKLQotCWlmICgocnhfY29uc19zYiAmIE1BWF9SQ1FfREVTQ19DTlQpID09IE1BWF9SQ1FfREVTQ19DTlQpCi0JCXJ4X2NvbnNfc2IrKzsKLQotCWlmICgocnhfY29uc19zYiAhPSBmcC0+cnhfY29tcF9jb25zKSB8fAotCSAgICAobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAhPSBmcC0+dHhfcGt0X2NvbnMpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTE2IGJueDJ4X2Fja19pbnQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgaWd1X2FkZHIgPSAoSUdVX0FERFJfU0lNRF9NQVNLICsgSUdVX1BPUlRfQkFTRSAqIGJwLT5wb3J0KSAqIDg7Ci0JdTMyIHJlc3VsdCA9IFJFR19SRChicCwgQkFSX0lHVV9JTlRNRU0gKyBpZ3VfYWRkcik7Ci0KLS8qICAgICAgRFAoTkVUSUZfTVNHX0lOVFIsICJyZWFkIDB4JTA4eCBmcm9tIElHVSBhZGRyIDB4JXhcbiIsCi0JICAgcmVzdWx0LCBCQVJfSUdVX0lOVE1FTSArIGlndV9hZGRyKTsgKi8KLQotI2lmZGVmIElHVV9ERUJVRwotI3dhcm5pbmcgSUdVX0RFQlVHIGFjdGl2ZQotCWlmIChyZXN1bHQgPT0gMCkgewotCQlCTlgyWF9FUlIoInJlYWQgJXggZnJvbSBJR1VcbiIsIHJlc3VsdCk7Ci0JCVJFR19XUihicCwgVE1fUkVHX1RJTUVSX1NPRlRfUlNULCAwKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0KLS8qCi0gKiBmYXN0IHBhdGggc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi0vKiBmcmVlIHNrYiBpbiB0aGUgcGFja2V0IHJpbmcgYXQgcG9zIGlkeAotICogcmV0dXJuIGlkeCBvZiBsYXN0IGJkIGZyZWVkCi0gKi8KLXN0YXRpYyB1MTYgYm54MnhfZnJlZV90eF9wa3Qoc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKLQkJCSAgICAgdTE2IGlkeCkKLXsKLQlzdHJ1Y3Qgc3dfdHhfYmQgKnR4X2J1ZiA9ICZmcC0+dHhfYnVmX3JpbmdbaWR4XTsKLQlzdHJ1Y3QgZXRoX3R4X2JkICp0eF9iZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhfYnVmLT5za2I7Ci0JdTE2IGJkX2lkeCA9IHR4X2J1Zi0+Zmlyc3RfYmQ7Ci0JaW50IG5iZDsKLQotCURQKEJOWDJYX01TR19PRkYsICJwa3RfaWR4ICVkICBidWZmIEAoJXApLT5za2IgJXBcbiIsCi0JICAgaWR4LCB0eF9idWYsIHNrYik7Ci0KLQkvKiB1bm1hcCBmaXJzdCBiZCAqLwotCURQKEJOWDJYX01TR19PRkYsICJmcmVlIGJkX2lkeCAlZFxuIiwgYmRfaWR4KTsKLQl0eF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX2lkeF07Ci0JcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgQkRfVU5NQVBfQUREUih0eF9iZCksCi0JCQkgQkRfVU5NQVBfTEVOKHR4X2JkKSwgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQluYmQgPSBsZTE2X3RvX2NwdSh0eF9iZC0+bmJkKSAtIDE7Ci0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWlmIChuYmQgPiAoTUFYX1NLQl9GUkFHUyArIDIpKSB7Ci0JCUJOWDJYX0VSUigiYmFkIG5iZCFcbiIpOwotCQlibngyeF9wYW5pYygpOwotCX0KLSNlbmRpZgotCi0JLyogU2tpcCBhIHBhcnNlIGJkIGFuZCB0aGUgVFNPIHNwbGl0IGhlYWRlciBiZAotCSAgIHNpbmNlIHRoZXkgaGF2ZSBubyBtYXBwaW5nICovCi0JaWYgKG5iZCkKLQkJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7Ci0KLQlpZiAodHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkICYgKEVUSF9UWF9CRF9GTEFHU19JUF9DU1VNIHwKLQkJCQkJICAgRVRIX1RYX0JEX0ZMQUdTX1RDUF9DU1VNIHwKLQkJCQkJICAgRVRIX1RYX0JEX0ZMQUdTX1NXX0xTTykpIHsKLQkJaWYgKC0tbmJkKQotCQkJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7Ci0JCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfaWR4XTsKLQkJLyogaXMgdGhpcyBhIFRTTyBzcGxpdCBoZWFkZXIgYmQ/ICovCi0JCWlmICh0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgJiBFVEhfVFhfQkRfRkxBR1NfU1dfTFNPKSB7Ci0JCQlpZiAoLS1uYmQpCi0JCQkJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7Ci0JCX0KLQl9Ci0KLQkvKiBub3cgZnJlZSBmcmFncyAqLwotCXdoaWxlIChuYmQgPiAwKSB7Ci0KLQkJRFAoQk5YMlhfTVNHX09GRiwgImZyZWUgZnJhZyBiZF9pZHggJWRcbiIsIGJkX2lkeCk7Ci0JCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfaWR4XTsKLQkJcGNpX3VubWFwX3BhZ2UoYnAtPnBkZXYsIEJEX1VOTUFQX0FERFIodHhfYmQpLAotCQkJICAgICAgIEJEX1VOTUFQX0xFTih0eF9iZCksIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlpZiAoLS1uYmQpCi0JCQliZF9pZHggPSBUWF9CRChORVhUX1RYX0lEWChiZF9pZHgpKTsKLQl9Ci0KLQkvKiByZWxlYXNlIHNrYiAqLwotCUJVR19UUkFQKHNrYik7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCXR4X2J1Zi0+Zmlyc3RfYmQgPSAwOwotCXR4X2J1Zi0+c2tiID0gTlVMTDsKLQotCXJldHVybiBiZF9pZHg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGJueDJ4X3R4X2F2YWlsKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCi17Ci0JdTE2IHVzZWQ7Ci0JdTMyIHByb2Q7Ci0JdTMyIGNvbnM7Ci0KLQkvKiBUZWxsIGNvbXBpbGVyIHRoYXQgcHJvZCBhbmQgY29ucyBjYW4gY2hhbmdlICovCi0JYmFycmllcigpOwotCXByb2QgPSBmcC0+dHhfYmRfcHJvZDsKLQljb25zID0gZnAtPnR4X2JkX2NvbnM7Ci0KLQl1c2VkID0gKE5VTV9UWF9CRCAtIE5VTV9UWF9SSU5HUyArIHByb2QgLSBjb25zICsKLQkJKGNvbnMgLyBUWF9ERVNDX0NOVCkgLSAocHJvZCAvIFRYX0RFU0NfQ05UKSk7Ci0KLQlpZiAocHJvZCA+PSBjb25zKSB7Ci0JCS8qIHVzZWQgPSBwcm9kIC0gY29ucyAtIHByb2Qvc2l6ZSArIGNvbnMvc2l6ZSAqLwotCQl1c2VkIC09IE5VTV9UWF9CRCAtIE5VTV9UWF9SSU5HUzsKLQl9Ci0KLQlCVUdfVFJBUCh1c2VkIDw9IGZwLT5icC0+dHhfcmluZ19zaXplKTsKLQlCVUdfVFJBUCgoZnAtPmJwLT50eF9yaW5nX3NpemUgLSB1c2VkKSA8PSBNQVhfVFhfQVZBSUwpOwotCi0JcmV0dXJuIChmcC0+YnAtPnR4X3Jpbmdfc2l6ZSAtIHVzZWQpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF90eF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgaW50IHdvcmspCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQl1MTYgaHdfY29ucywgc3dfY29ucywgYmRfY29ucyA9IGZwLT50eF9iZF9jb25zOwotCWludCBkb25lID0gMDsKLQotI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKLQkJcmV0dXJuOwotI2VuZGlmCi0KLQlod19jb25zID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKLQlzd19jb25zID0gZnAtPnR4X3BrdF9jb25zOwotCi0Jd2hpbGUgKHN3X2NvbnMgIT0gaHdfY29ucykgewotCQl1MTYgcGt0X2NvbnM7Ci0KLQkJcGt0X2NvbnMgPSBUWF9CRChzd19jb25zKTsKLQotCQkvKiBwcmVmZXRjaChicC0+dHhfYnVmX3JpbmdbcGt0X2NvbnNdLnNrYik7ICovCi0KLQkJRFAoTkVUSUZfTVNHX1RYX0RPTkUsICJod19jb25zICV1ICBzd19jb25zICV1ICBwa3RfY29ucyAlZFxuIiwKLQkJICAgaHdfY29ucywgc3dfY29ucywgcGt0X2NvbnMpOwotCi0vKiAgICAgIAlpZiAoTkVYVF9UWF9JRFgoc3dfY29ucykgIT0gaHdfY29ucykgewotCQkJcm1iKCk7Ci0JCQlwcmVmZXRjaChmcC0+dHhfYnVmX3JpbmdbTkVYVF9UWF9JRFgoc3dfY29ucyldLnNrYik7Ci0JCX0KLSovCi0JCWJkX2NvbnMgPSBibngyeF9mcmVlX3R4X3BrdChicCwgZnAsIHBrdF9jb25zKTsKLQkJc3dfY29ucysrOwotCQlkb25lKys7Ci0KLQkJaWYgKGRvbmUgPT0gd29yaykKLQkJCWJyZWFrOwotCX0KLQotCWZwLT50eF9wa3RfY29ucyA9IHN3X2NvbnM7Ci0JZnAtPnR4X2JkX2NvbnMgPSBiZF9jb25zOwotCi0JLyogTmVlZCB0byBtYWtlIHRoZSB0eF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQotCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKLQkgKiBtZW1vcnkgYmFycmllciwgdGhlcmUgaXMgYSBzbWFsbCBwb3NzaWJpbGl0eSB0aGF0IHN0YXJ0X3htaXQoKQotCSAqIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQgZm9yZXZlci4KLQkgKi8KLQlzbXBfbWIoKTsKLQotCS8qIFRCRCBuZWVkIGEgdGhyZXNoPyAqLwotCWlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpKSkgewotCi0JCW5ldGlmX3R4X2xvY2soYnAtPmRldik7Ci0KLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikgJiYKLQkJICAgIChibngyeF90eF9hdmFpbChmcCkgPj0gTUFYX1NLQl9GUkFHUyArIDMpKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShicC0+ZGV2KTsKLQotCQluZXRpZl90eF91bmxvY2soYnAtPmRldik7Ci0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NwX2V2ZW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCi0JCQkgICB1bmlvbiBldGhfcnhfY3FlICpycl9jcWUpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQlpbnQgY2lkID0gU1dfQ0lEKHJyX2NxZS0+cmFtcm9kX2NxZS5jb25uX2FuZF9jbWRfZGF0YSk7Ci0JaW50IGNvbW1hbmQgPSBDUUVfQ01EKHJyX2NxZS0+cmFtcm9kX2NxZS5jb25uX2FuZF9jbWRfZGF0YSk7Ci0KLQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAotCSAgICJmcCAlZCAgY2lkICVkICBnb3QgcmFtcm9kICMlZCAgc3RhdGUgaXMgJXggIHR5cGUgaXMgJWRcbiIsCi0JICAgZnAtPmluZGV4LCBjaWQsIGNvbW1hbmQsIGJwLT5zdGF0ZSwgcnJfY3FlLT5yYW1yb2RfY3FlLnR5cGUpOwotCi0JYnAtPnNwcV9sZWZ0Kys7Ci0KLQlpZiAoZnAtPmluZGV4KSB7Ci0JCXN3aXRjaCAoY29tbWFuZCB8IGZwLT5zdGF0ZSkgewotCQljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAgfAotCQkJCQkJQk5YMlhfRlBfU1RBVEVfT1BFTklORyk6Ci0JCQlEUChORVRJRl9NU0dfSUZVUCwgImdvdCBNVUxUSVslZF0gc2V0dXAgcmFtcm9kXG4iLAotCQkJICAgY2lkKTsKLQkJCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX09QRU47Ci0JCQlicmVhazsKLQotCQljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9IQUxUIHwgQk5YMlhfRlBfU1RBVEVfSEFMVElORyk6Ci0JCQlEUChORVRJRl9NU0dfSUZET1dOLCAiZ290IE1VTFRJWyVkXSBoYWx0IHJhbXJvZFxuIiwKLQkJCSAgIGNpZCk7Ci0JCQlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxURUQ7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJQk5YMlhfRVJSKCJ1bmV4cGVjdGVkIE1DIHJlcGx5KCVkKSAgc3RhdGUgaXMgJXhcbiIsCi0JCQkJICBjb21tYW5kLCBmcC0+c3RhdGUpOwotCQl9Ci0JCW1iKCk7IC8qIGZvcmNlIGJueDJ4X3dhaXRfcmFtcm9kIHRvIHNlZSB0aGUgY2hhbmdlICovCi0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGNvbW1hbmQgfCBicC0+c3RhdGUpIHsKLQljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX1NFVFVQIHwgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9QT1JUKToKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJnb3Qgc2V0dXAgcmFtcm9kXG4iKTsKLQkJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfT1BFTjsKLQkJYnJlYWs7Ci0KLQljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9IQUxUIHwgQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9IQUxUKToKLQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImdvdCBoYWx0IHJhbXJvZFxuIik7Ci0JCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfREVMRVRFOwotCQlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxURUQ7Ci0JCWJyZWFrOwotCi0JY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfQ0ZDX0RFTCB8IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfSEFMVCk6Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJnb3QgZGVsZXRlIHJhbXJvZCBmb3IgTVVMVElbJWRdXG4iLAotCQkgICBjaWQpOwotCQlibngyeF9mcChicCwgY2lkLCBzdGF0ZSkgPSBCTlgyWF9GUF9TVEFURV9DTE9TRUQ7Ci0JCWJyZWFrOwotCi0JY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyB8IEJOWDJYX1NUQVRFX09QRU4pOgotCQlEUChORVRJRl9NU0dfSUZVUCwgImdvdCBzZXQgbWFjIHJhbXJvZFxuIik7Ci0JCWJyZWFrOwotCi0JY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyB8IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfSEFMVCk6Ci0JCURQKE5FVElGX01TR19JRlVQLCAiZ290ICh1bilzZXQgbWFjIHJhbXJvZFxuIik7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJQk5YMlhfRVJSKCJ1bmV4cGVjdGVkIHJhbXJvZCAoJWQpICBzdGF0ZSBpcyAleFxuIiwKLQkJCSAgY29tbWFuZCwgYnAtPnN0YXRlKTsKLQl9Ci0KLQltYigpOyAvKiBmb3JjZSBibngyeF93YWl0X3JhbXJvZCB0byBzZWUgdGhlIGNoYW5nZSAqLwotfQotCi1zdGF0aWMgaW5saW5lIGludCBibngyeF9hbGxvY19yeF9za2Ioc3RydWN0IGJueDJ4ICpicCwKLQkJCQkgICAgIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIHUxNiBpbmRleCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBzd19yeF9iZCAqcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tpbmRleF07Ci0Jc3RydWN0IGV0aF9yeF9iZCAqcnhfYmQgPSAmZnAtPnJ4X2Rlc2NfcmluZ1tpbmRleF07Ci0JZG1hX2FkZHJfdCBtYXBwaW5nOwotCi0Jc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LCBicC0+cnhfYnVmX3NpemUpOwotCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsIGJwLT5yeF9idWZfdXNlX3NpemUsCi0JCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpKSkgewotCi0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcnhfYnVmLT5za2IgPSBza2I7Ci0JcGNpX3VubWFwX2FkZHJfc2V0KHJ4X2J1ZiwgbWFwcGluZywgbWFwcGluZyk7Ci0KLQlyeF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7Ci0JcnhfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIG5vdGUgdGhhdCB3ZSBhcmUgbm90IGFsbG9jYXRpbmcgYSBuZXcgc2tiLAotICogd2UgYXJlIGp1c3QgbW92aW5nIG9uZSBmcm9tIGNvbnMgdG8gcHJvZAotICogd2UgYXJlIG5vdCBjcmVhdGluZyBhIG5ldyBtYXBwaW5nLAotICogc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgZG1hX21hcHBpbmdfZXJyb3IoKS4KLSAqLwotc3RhdGljIHZvaWQgYm54MnhfcmV1c2Vfcnhfc2tiKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCi0JCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGNvbnMsIHUxNiBwcm9kKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7Ci0Jc3RydWN0IHN3X3J4X2JkICpjb25zX3J4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbY29uc107Ci0Jc3RydWN0IHN3X3J4X2JkICpwcm9kX3J4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbcHJvZF07Ci0Jc3RydWN0IGV0aF9yeF9iZCAqY29uc19iZCA9ICZmcC0+cnhfZGVzY19yaW5nW2NvbnNdOwotCXN0cnVjdCBldGhfcnhfYmQgKnByb2RfYmQgPSAmZnAtPnJ4X2Rlc2NfcmluZ1twcm9kXTsKLQotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+cGRldiwKLQkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoY29uc19yeF9idWYsIG1hcHBpbmcpLAotCQkJCSAgICAgICBicC0+cnhfb2Zmc2V0ICsgUlhfQ09QWV9USFJFU0gsCi0JCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0KLQlwcm9kX3J4X2J1Zi0+c2tiID0gY29uc19yeF9idWYtPnNrYjsKLQlwY2lfdW5tYXBfYWRkcl9zZXQocHJvZF9yeF9idWYsIG1hcHBpbmcsCi0JCQkgICBwY2lfdW5tYXBfYWRkcihjb25zX3J4X2J1ZiwgbWFwcGluZykpOwotCSpwcm9kX2JkID0gKmNvbnNfYmQ7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfcnhfaW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIGludCBidWRnZXQpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQl1MTYgYmRfY29ucywgYmRfcHJvZCwgY29tcF9yaW5nX2NvbnM7Ci0JdTE2IGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zLCBzd19jb21wX3Byb2Q7Ci0JaW50IHJ4X3BrdCA9IDA7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybiAwOwotI2VuZGlmCi0KLQlod19jb21wX2NvbnMgPSBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpOwotCWlmICgoaHdfY29tcF9jb25zICYgTUFYX1JDUV9ERVNDX0NOVCkgPT0gTUFYX1JDUV9ERVNDX0NOVCkKLQkJaHdfY29tcF9jb25zKys7Ci0KLQliZF9jb25zID0gZnAtPnJ4X2JkX2NvbnM7Ci0JYmRfcHJvZCA9IGZwLT5yeF9iZF9wcm9kOwotCXN3X2NvbXBfY29ucyA9IGZwLT5yeF9jb21wX2NvbnM7Ci0Jc3dfY29tcF9wcm9kID0gZnAtPnJ4X2NvbXBfcHJvZDsKLQotCS8qIE1lbW9yeSBiYXJyaWVyIG5lY2Vzc2FyeSBhcyBzcGVjdWxhdGl2ZSByZWFkcyBvZiB0aGUgcngKLQkgKiBidWZmZXIgY2FuIGJlIGFoZWFkIG9mIHRoZSBpbmRleCBpbiB0aGUgc3RhdHVzIGJsb2NrCi0JICovCi0Jcm1iKCk7Ci0KLQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAotCSAgICJxdWV1ZVslZF06ICBod19jb21wX2NvbnMgJXUgIHN3X2NvbXBfY29ucyAldVxuIiwKLQkgICBmcC0+aW5kZXgsIGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zKTsKLQotCXdoaWxlIChzd19jb21wX2NvbnMgIT0gaHdfY29tcF9jb25zKSB7Ci0JCXVuc2lnbmVkIGludCBsZW4sIHBhZDsKLQkJc3RydWN0IHN3X3J4X2JkICpyeF9idWY7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCXVuaW9uIGV0aF9yeF9jcWUgKmNxZTsKLQotCQljb21wX3JpbmdfY29ucyA9IFJDUV9CRChzd19jb21wX2NvbnMpOwotCQliZF9wcm9kID0gUlhfQkQoYmRfcHJvZCk7Ci0JCWJkX2NvbnMgPSBSWF9CRChiZF9jb25zKTsKLQotCQljcWUgPSAmZnAtPnJ4X2NvbXBfcmluZ1tjb21wX3JpbmdfY29uc107Ci0KLQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgImh3X2NvbXBfY29ucyAldSAgc3dfY29tcF9jb25zICV1IgotCQkgICAiICBjb21wX3JpbmcgKCV1KSAgYmRfcmluZyAoJXUsJXUpXG4iLAotCQkgICBod19jb21wX2NvbnMsIHN3X2NvbXBfY29ucywKLQkJICAgY29tcF9yaW5nX2NvbnMsIGJkX3Byb2QsIGJkX2NvbnMpOwotCQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLCAiQ1FFIHR5cGUgJXggIGVyciAleCAgc3RhdHVzICV4IgotCQkgICAiICBxdWV1ZSAleCAgdmxhbiAleCAgbGVuICV4XG4iLAotCQkgICBjcWUtPmZhc3RfcGF0aF9jcWUudHlwZSwKLQkJICAgY3FlLT5mYXN0X3BhdGhfY3FlLmVycm9yX3R5cGVfZmxhZ3MsCi0JCSAgIGNxZS0+ZmFzdF9wYXRoX2NxZS5zdGF0dXNfZmxhZ3MsCi0JCSAgIGNxZS0+ZmFzdF9wYXRoX2NxZS5yc3NfaGFzaF9yZXN1bHQsCi0JCSAgIGNxZS0+ZmFzdF9wYXRoX2NxZS52bGFuX3RhZywgY3FlLT5mYXN0X3BhdGhfY3FlLnBrdF9sZW4pOwotCi0JCS8qIGlzIHRoaXMgYSBzbG93cGF0aCBtc2c/ICovCi0JCWlmICh1bmxpa2VseShjcWUtPmZhc3RfcGF0aF9jcWUudHlwZSkpIHsKLQkJCWJueDJ4X3NwX2V2ZW50KGZwLCBjcWUpOwotCQkJZ290byBuZXh0X2NxZTsKLQotCQkvKiB0aGlzIGlzIGFuIHJ4IHBhY2tldCAqLwotCQl9IGVsc2UgewotCQkJcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tiZF9jb25zXTsKLQkJCXNrYiA9IHJ4X2J1Zi0+c2tiOwotCi0JCQlsZW4gPSBsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGt0X2xlbik7Ci0JCQlwYWQgPSBjcWUtPmZhc3RfcGF0aF9jcWUucGxhY2VtZW50X29mZnNldDsKLQotCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5wZGV2LAotCQkJCQlwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAotCQkJCQkJICAgICAgIHBhZCArIFJYX0NPUFlfVEhSRVNILAotCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwcmVmZXRjaChza2IpOwotCQkJcHJlZmV0Y2goKChjaGFyICopKHNrYikpICsgMTI4KTsKLQotCQkJLyogaXMgdGhpcyBhbiBlcnJvciBwYWNrZXQ/ICovCi0JCQlpZiAodW5saWtlbHkoY3FlLT5mYXN0X3BhdGhfY3FlLmVycm9yX3R5cGVfZmxhZ3MgJgotCQkJCQkJCUVUSF9SWF9FUlJPUl9GQUxHUykpIHsKLQkJCS8qIGRvIHdlIHNvbWV0aW1lcyBmb3J3YXJkIGVycm9yIHBhY2tldHMgYW55d2F5PyAqLwotCQkJCURQKE5FVElGX01TR19SWF9FUlIsCi0JCQkJICAgIkVSUk9SIGZsYWdzKCV1KSBSeCBwYWNrZXQoJXUpXG4iLAotCQkJCSAgIGNxZS0+ZmFzdF9wYXRoX2NxZS5lcnJvcl90eXBlX2ZsYWdzLAotCQkJCSAgIHN3X2NvbXBfY29ucyk7Ci0JCQkJLyogVEJEIG1ha2Ugc3VyZSBNQyBjb3VudHMgdGhpcyBhcyBhIGRyb3AgKi8KLQkJCQlnb3RvIHJldXNlX3J4OwotCQkJfQotCi0JCQkvKiBTaW5jZSB3ZSBkb24ndCBoYXZlIGEganVtYm8gcmluZwotCQkJICogY29weSBzbWFsbCBwYWNrZXRzIGlmIG10dSA+IDE1MDAKLQkJCSAqLwotCQkJaWYgKChicC0+ZGV2LT5tdHUgPiBFVEhfTUFYX1BBQ0tFVF9TSVpFKSAmJgotCQkJICAgIChsZW4gPD0gUlhfQ09QWV9USFJFU0gpKSB7Ci0JCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0KLQkJCQluZXdfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LAotCQkJCQkJCSAgIGxlbiArIHBhZCk7Ci0JCQkJaWYgKG5ld19za2IgPT0gTlVMTCkgewotCQkJCQlEUChORVRJRl9NU0dfUlhfRVJSLAotCQkJCQkgICAiRVJST1IgcGFja2V0IGRyb3BwZWQgIgotCQkJCQkgICAiYmVjYXVzZSBvZiBhbGxvYyBmYWlsdXJlXG4iKTsKLQkJCQkJLyogVEJEIGNvdW50IHRoaXMgYXMgYSBkcm9wPyAqLwotCQkJCQlnb3RvIHJldXNlX3J4OwotCQkJCX0KLQotCQkJCS8qIGFsaWduZWQgY29weSAqLwotCQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgcGFkLAotCQkJCQkJICAgIG5ld19za2ItPmRhdGEgKyBwYWQsIGxlbik7Ci0JCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgcGFkKTsKLQkJCQlza2JfcHV0KG5ld19za2IsIGxlbik7Ci0KLQkJCQlibngyeF9yZXVzZV9yeF9za2IoZnAsIHNrYiwgYmRfY29ucywgYmRfcHJvZCk7Ci0KLQkJCQlza2IgPSBuZXdfc2tiOwotCi0JCQl9IGVsc2UgaWYgKGJueDJ4X2FsbG9jX3J4X3NrYihicCwgZnAsIGJkX3Byb2QpID09IDApIHsKLQkJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LAotCQkJCQlwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAotCQkJCQkJIGJwLT5yeF9idWZfdXNlX3NpemUsCi0JCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCQlza2JfcmVzZXJ2ZShza2IsIHBhZCk7Ci0JCQkJc2tiX3B1dChza2IsIGxlbik7Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJRFAoTkVUSUZfTVNHX1JYX0VSUiwKLQkJCQkgICAiRVJST1IgcGFja2V0IGRyb3BwZWQgYmVjYXVzZSAiCi0JCQkJICAgIm9mIGFsbG9jIGZhaWx1cmVcbiIpOwotcmV1c2Vfcng6Ci0JCQkJYm54MnhfcmV1c2Vfcnhfc2tiKGZwLCBza2IsIGJkX2NvbnMsIGJkX3Byb2QpOwotCQkJCWdvdG8gbmV4dF9yeDsKLQkJCX0KLQotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYnAtPmRldik7Ci0KLQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJCWlmIChicC0+cnhfY3N1bSAmJiBCTlgyWF9SWF9TVU1fT0soY3FlKSkKLQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCi0JCQkvKiBUQkQgZG8gd2UgcGFzcyBiYWQgY3N1bSBwYWNrZXRzIGluIHByb21pc2MgKi8KLQkJfQotCi0jaWZkZWYgQkNNX1ZMQU4KLQkJaWYgKChsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGFyc19mbGFncy5mbGFncykKLQkJCQkmIFBBUlNJTkdfRkxBR1NfTlVNQkVSX09GX05FU1RFRF9WTEFOUykKLQkJICAgICYmIChicC0+dmxncnAgIT0gTlVMTCkpCi0JCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBicC0+dmxncnAsCi0JCQkJbGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnZsYW5fdGFnKSk7Ci0JCWVsc2UKLSNlbmRpZgotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCi0JCWJwLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCi1uZXh0X3J4OgotCQlyeF9idWYtPnNrYiA9IE5VTEw7Ci0KLQkJYmRfY29ucyA9IE5FWFRfUlhfSURYKGJkX2NvbnMpOwotCQliZF9wcm9kID0gTkVYVF9SWF9JRFgoYmRfcHJvZCk7Ci1uZXh0X2NxZToKLQkJc3dfY29tcF9wcm9kID0gTkVYVF9SQ1FfSURYKHN3X2NvbXBfcHJvZCk7Ci0JCXN3X2NvbXBfY29ucyA9IE5FWFRfUkNRX0lEWChzd19jb21wX2NvbnMpOwotCQlyeF9wa3QrKzsKLQotCQlpZiAoKHJ4X3BrdCA9PSBidWRnZXQpKQotCQkJYnJlYWs7Ci0JfSAvKiB3aGlsZSAqLwotCi0JZnAtPnJ4X2JkX2NvbnMgPSBiZF9jb25zOwotCWZwLT5yeF9iZF9wcm9kID0gYmRfcHJvZDsKLQlmcC0+cnhfY29tcF9jb25zID0gc3dfY29tcF9jb25zOwotCWZwLT5yeF9jb21wX3Byb2QgPSBzd19jb21wX3Byb2Q7Ci0KLQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JICAgICAgIFRTVE9STV9SQ1FfUFJPRF9PRkZTRVQoYnAtPnBvcnQsIGZwLT5pbmRleCksIHN3X2NvbXBfcHJvZCk7Ci0KLQltbWlvd2IoKTsgLyoga2VlcCBwcm9kIHVwZGF0ZXMgb3JkZXJlZCAqLwotCi0JZnAtPnJ4X3BrdCArPSByeF9wa3Q7Ci0JZnAtPnJ4X2NhbGxzKys7Ci0KLQlyZXR1cm4gcnhfcGt0OwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgYm54MnhfbXNpeF9mcF9pbnQoaW50IGlycSwgdm9pZCAqZnBfY29va2llKQotewotCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSBmcF9jb29raWU7Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnAtPmRldjsKLQlpbnQgaW5kZXggPSBmcC0+aW5kZXg7Ci0KLQlEUChORVRJRl9NU0dfSU5UUiwgImdvdCBhbiBtc2l4IGludGVycnVwdCBvbiBbJWRdXG4iLCBpbmRleCk7Ci0JYm54MnhfYWNrX3NiKGJwLCBpbmRleCwgVVNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOwotCi0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0jZW5kaWYKLQotCXByZWZldGNoKGZwLT5yeF9jb25zX3NiKTsKLQlwcmVmZXRjaChmcC0+dHhfY29uc19zYik7Ci0JcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwotCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKLQotCW5ldGlmX3J4X3NjaGVkdWxlKGRldiwgJmJueDJ4X2ZwKGJwLCBpbmRleCwgbmFwaSkpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGJueDJ4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pbnN0YW5jZTsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYgc3RhdHVzID0gYm54MnhfYWNrX2ludChicCk7Ci0KLQlpZiAodW5saWtlbHkoc3RhdHVzID09IDApKSB7Ci0JCURQKE5FVElGX01TR19JTlRSLCAibm90IG91ciBpbnRlcnJ1cHQhXG4iKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQotCURQKE5FVElGX01TR19JTlRSLCAiZ290IGFuIGludGVycnVwdCBzdGF0dXMgaXMgJXVcbiIsIHN0YXR1cyk7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLSNlbmRpZgotCi0JLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIHNoYXJlZCBhbmQgaXMgZGlzYWJsZWQgKi8KLQlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKLQkJRFAoTkVUSUZfTVNHX0lOVFIsICJjYWxsZWQgYnV0IGludHJfc2VtIG5vdCAwLCByZXR1cm5pbmdcbiIpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIDB4MikgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFswXTsKLQotCQlwcmVmZXRjaChmcC0+cnhfY29uc19zYik7Ci0JCXByZWZldGNoKGZwLT50eF9jb25zX3NiKTsKLQkJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwotCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7Ci0KLQkJbmV0aWZfcnhfc2NoZWR1bGUoZGV2LCAmYm54MnhfZnAoYnAsIDAsIG5hcGkpKTsKLQotCQlzdGF0dXMgJj0gfjB4MjsKLQkJaWYgKCFzdGF0dXMpCi0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JaWYgKHVubGlrZWx5KHN0YXR1cyAmIDB4MSkpIHsKLQotCQlzY2hlZHVsZV93b3JrKCZicC0+c3BfdGFzayk7Ci0KLQkJc3RhdHVzICY9IH4weDE7Ci0JCWlmICghc3RhdHVzKQotCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCURQKE5FVElGX01TR19JTlRSLCAiZ290IGFuIHVua25vd24gaW50ZXJydXB0ISAoc3RhdHVzIGlzICV1KVxuIiwKLQkgICBzdGF0dXMpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi0vKiBlbmQgb2YgZmFzdCBwYXRoICovCi0KLS8qIFBIWS9NQUMgKi8KLQotLyoKLSAqIEdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi1zdGF0aWMgdm9pZCBibngyeF9sZWRzX3NldChzdHJ1Y3QgYm54MnggKmJwLCB1bnNpZ25lZCBpbnQgc3BlZWQpCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQotCU5JR19XUihOSUdfUkVHX0xFRF9NT0RFX1AwICsgcG9ydCo0LAotCSAgICAgICAoKGJwLT5od19jb25maWcgJiBTSEFSRURfSFdfQ0ZHX0xFRF9NT0RFX01BU0spID4+Ci0JCVNIQVJFRF9IV19DRkdfTEVEX01PREVfU0hJRlQpKTsKLQlOSUdfV1IoTklHX1JFR19MRURfQ09OVFJPTF9PVkVSUklERV9UUkFGRklDX1AwICsgcG9ydCo0LCAwKTsKLQotCS8qIFNldCBibGlua2luZyByYXRlIHRvIH4xNS45SHogKi8KLQlOSUdfV1IoTklHX1JFR19MRURfQ09OVFJPTF9CTElOS19SQVRFX1AwICsgcG9ydCo0LAotCSAgICAgICBMRURfQkxJTktfUkFURV9WQUwpOwotCU5JR19XUihOSUdfUkVHX0xFRF9DT05UUk9MX0JMSU5LX1JBVEVfRU5BX1AwICsgcG9ydCo0LCAxKTsKLQotCS8qIE9uIEF4IGNoaXAgdmVyc2lvbnMgZm9yIHNwZWVkcyBsZXNzIHRoYW4gMTBHCi0JICAgTEVEIHNjaGVtZSBpcyBkaWZmZXJlbnQgKi8KLQlpZiAoKENISVBfUkVWKGJwKSA9PSBDSElQX1JFVl9BeCkgJiYgKHNwZWVkIDwgU1BFRURfMTAwMDApKSB7Ci0JCU5JR19XUihOSUdfUkVHX0xFRF9DT05UUk9MX09WRVJSSURFX1RSQUZGSUNfUDAgKyBwb3J0KjQsIDEpOwotCQlOSUdfV1IoTklHX1JFR19MRURfQ09OVFJPTF9UUkFGRklDX1AwICsgcG9ydCo0LCAwKTsKLQkJTklHX1dSKE5JR19SRUdfTEVEX0NPTlRST0xfQkxJTktfVFJBRkZJQ19QMCArIHBvcnQqNCwgMSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9sZWRzX3Vuc2V0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQotCU5JR19XUihOSUdfUkVHX0xFRF8xMEdfUDAgKyBwb3J0KjQsIDApOwotCU5JR19XUihOSUdfUkVHX0xFRF9NT0RFX1AwICsgcG9ydCo0LCBTSEFSRURfSFdfQ0ZHX0xFRF9NQUMxKTsKLX0KLQotc3RhdGljIHUzMiBibngyeF9iaXRzX2VuKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiBiaXRzKQotewotCXUzMiB2YWwgPSBSRUdfUkQoYnAsIHJlZyk7Ci0KLQl2YWwgfD0gYml0czsKLQlSRUdfV1IoYnAsIHJlZywgdmFsKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdTMyIGJueDJ4X2JpdHNfZGlzKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiBiaXRzKQotewotCXUzMiB2YWwgPSBSRUdfUkQoYnAsIHJlZyk7Ci0KLQl2YWwgJj0gfmJpdHM7Ci0JUkVHX1dSKGJwLCByZWcsIHZhbCk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGludCBibngyeF9od19sb2NrKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZXNvdXJjZSkKLXsKLQl1MzIgY250OwotCXUzMiBsb2NrX3N0YXR1czsKLQl1MzIgcmVzb3VyY2VfYml0ID0gKDEgPDwgcmVzb3VyY2UpOwotCXU4IGZ1bmMgPSBicC0+cG9ydDsKLQotCS8qIFZhbGlkYXRpbmcgdGhhdCB0aGUgcmVzb3VyY2UgaXMgd2l0aGluIHJhbmdlICovCi0JaWYgKHJlc291cmNlID4gSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUpIHsKLQkJRFAoTkVUSUZfTVNHX0hXLAotCQkgICAicmVzb3VyY2UoMHgleCkgPiBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSgweCV4KVxuIiwKLQkJICAgcmVzb3VyY2UsIEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVmFsaWRhdGluZyB0aGF0IHRoZSByZXNvdXJjZSBpcyBub3QgYWxyZWFkeSB0YWtlbiAqLwotCWxvY2tfc3RhdHVzID0gUkVHX1JEKGJwLCBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xICsgZnVuYyo4KTsKLQlpZiAobG9ja19zdGF0dXMgJiByZXNvdXJjZV9iaXQpIHsKLQkJRFAoTkVUSUZfTVNHX0hXLCAibG9ja19zdGF0dXMgMHgleCAgcmVzb3VyY2VfYml0IDB4JXhcbiIsCi0JCSAgIGxvY2tfc3RhdHVzLCByZXNvdXJjZV9iaXQpOwotCQlyZXR1cm4gLUVFWElTVDsKLQl9Ci0KLQkvKiBUcnkgZm9yIDEgc2Vjb25kIGV2ZXJ5IDVtcyAqLwotCWZvciAoY250ID0gMDsgY250IDwgMjAwOyBjbnQrKykgewotCQkvKiBUcnkgdG8gYWNxdWlyZSB0aGUgbG9jayAqLwotCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEgKyBmdW5jKjggKyA0LAotCQkgICAgICAgcmVzb3VyY2VfYml0KTsKLQkJbG9ja19zdGF0dXMgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEgKyBmdW5jKjgpOwotCQlpZiAobG9ja19zdGF0dXMgJiByZXNvdXJjZV9iaXQpCi0JCQlyZXR1cm4gMDsKLQotCQltc2xlZXAoNSk7Ci0JfQotCURQKE5FVElGX01TR19IVywgIlRpbWVvdXRcbiIpOwotCXJldHVybiAtRUFHQUlOOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X2h3X3VubG9jayhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVzb3VyY2UpCi17Ci0JdTMyIGxvY2tfc3RhdHVzOwotCXUzMiByZXNvdXJjZV9iaXQgPSAoMSA8PCByZXNvdXJjZSk7Ci0JdTggZnVuYyA9IGJwLT5wb3J0OwotCi0JLyogVmFsaWRhdGluZyB0aGF0IHRoZSByZXNvdXJjZSBpcyB3aXRoaW4gcmFuZ2UgKi8KLQlpZiAocmVzb3VyY2UgPiBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSkgewotCQlEUChORVRJRl9NU0dfSFcsCi0JCSAgICJyZXNvdXJjZSgweCV4KSA+IEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKDB4JXgpXG4iLAotCQkgICByZXNvdXJjZSwgSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBWYWxpZGF0aW5nIHRoYXQgdGhlIHJlc291cmNlIGlzIGN1cnJlbnRseSB0YWtlbiAqLwotCWxvY2tfc3RhdHVzID0gUkVHX1JEKGJwLCBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xICsgZnVuYyo4KTsKLQlpZiAoIShsb2NrX3N0YXR1cyAmIHJlc291cmNlX2JpdCkpIHsKLQkJRFAoTkVUSUZfTVNHX0hXLCAibG9ja19zdGF0dXMgMHgleCAgcmVzb3VyY2VfYml0IDB4JXhcbiIsCi0JCSAgIGxvY2tfc3RhdHVzLCByZXNvdXJjZV9iaXQpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlSRUdfV1IoYnAsIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEgKyBmdW5jKjgsIHJlc291cmNlX2JpdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSkKLXsKLQkvKiBUaGUgR1BJTyBzaG91bGQgYmUgc3dhcHBlZCBpZiBzd2FwIHJlZ2lzdGVyIGlzIHNldCBhbmQgYWN0aXZlICovCi0JaW50IGdwaW9fcG9ydCA9IChSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKSAmJgotCQkJIFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSkpIF4gYnAtPnBvcnQ7Ci0JaW50IGdwaW9fc2hpZnQgPSBncGlvX251bSArCi0JCQkoZ3Bpb19wb3J0ID8gTUlTQ19SRUdJU1RFUlNfR1BJT19QT1JUX1NISUZUIDogMCk7Ci0JdTMyIGdwaW9fbWFzayA9ICgxIDw8IGdwaW9fc2hpZnQpOwotCXUzMiBncGlvX3JlZzsKLQotCWlmIChncGlvX251bSA+IE1JU0NfUkVHSVNURVJTX0dQSU9fMykgewotCQlCTlgyWF9FUlIoIkludmFsaWQgR1BJTyAlZFxuIiwgZ3Bpb19udW0pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibngyeF9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX0dQSU8pOwotCS8qIHJlYWQgR1BJTyBhbmQgbWFzayBleGNlcHQgdGhlIGZsb2F0IGJpdHMgKi8KLQlncGlvX3JlZyA9IChSRUdfUkQoYnAsIE1JU0NfUkVHX0dQSU8pICYgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVCk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVzoKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgR1BJTyAlZCAoc2hpZnQgJWQpIC0+IG91dHB1dCBsb3dcbiIsCi0JCSAgIGdwaW9fbnVtLCBncGlvX3NoaWZ0KTsKLQkJLyogY2xlYXIgRkxPQVQgYW5kIHNldCBDTFIgKi8KLQkJZ3Bpb19yZWcgJj0gfihncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVF9QT1MpOwotCQlncGlvX3JlZyB8PSAgKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0NMUl9QT1MpOwotCQlicmVhazsKLQotCWNhc2UgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSDoKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgR1BJTyAlZCAoc2hpZnQgJWQpIC0+IG91dHB1dCBoaWdoXG4iLAotCQkgICBncGlvX251bSwgZ3Bpb19zaGlmdCk7Ci0JCS8qIGNsZWFyIEZMT0FUIGFuZCBzZXQgU0VUICovCi0JCWdwaW9fcmVnICY9IH4oZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVRfUE9TKTsKLQkJZ3Bpb19yZWcgfD0gIChncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19TRVRfUE9TKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5QVVRfSElfWiA6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiU2V0IEdQSU8gJWQgKHNoaWZ0ICVkKSAtPiBpbnB1dFxuIiwKLQkJICAgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOwotCQkvKiBzZXQgRkxPQVQgKi8KLQkJZ3Bpb19yZWcgfD0gKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0ZMT0FUX1BPUyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JUkVHX1dSKGJwLCBNSVNDX1JFR19HUElPLCBncGlvX3JlZyk7Ci0JYm54MnhfaHdfdW5sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX0dQSU8pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3NwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IHNwaW9fbnVtLCB1MzIgbW9kZSkKLXsKLQl1MzIgc3Bpb19tYXNrID0gKDEgPDwgc3Bpb19udW0pOwotCXUzMiBzcGlvX3JlZzsKLQotCWlmICgoc3Bpb19udW0gPCBNSVNDX1JFR0lTVEVSU19TUElPXzQpIHx8Ci0JICAgIChzcGlvX251bSA+IE1JU0NfUkVHSVNURVJTX1NQSU9fNykpIHsKLQkJQk5YMlhfRVJSKCJJbnZhbGlkIFNQSU8gJWRcbiIsIHNwaW9fbnVtKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYm54MnhfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9TUElPKTsKLQkvKiByZWFkIFNQSU8gYW5kIG1hc2sgZXhjZXB0IHRoZSBmbG9hdCBiaXRzICovCi0Jc3Bpb19yZWcgPSAoUkVHX1JEKGJwLCBNSVNDX1JFR19TUElPKSAmIE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVQpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBNSVNDX1JFR0lTVEVSU19TUElPX09VVFBVVF9MT1cgOgotCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBTUElPICVkIC0+IG91dHB1dCBsb3dcbiIsIHNwaW9fbnVtKTsKLQkJLyogY2xlYXIgRkxPQVQgYW5kIHNldCBDTFIgKi8KLQkJc3Bpb19yZWcgJj0gfihzcGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVF9QT1MpOwotCQlzcGlvX3JlZyB8PSAgKHNwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19TUElPX0NMUl9QT1MpOwotCQlicmVhazsKLQotCWNhc2UgTUlTQ19SRUdJU1RFUlNfU1BJT19PVVRQVVRfSElHSCA6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiU2V0IFNQSU8gJWQgLT4gb3V0cHV0IGhpZ2hcbiIsIHNwaW9fbnVtKTsKLQkJLyogY2xlYXIgRkxPQVQgYW5kIHNldCBTRVQgKi8KLQkJc3Bpb19yZWcgJj0gfihzcGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVF9QT1MpOwotCQlzcGlvX3JlZyB8PSAgKHNwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19TUElPX1NFVF9QT1MpOwotCQlicmVhazsKLQotCWNhc2UgTUlTQ19SRUdJU1RFUlNfU1BJT19JTlBVVF9ISV9aOgotCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBTUElPICVkIC0+IGlucHV0XG4iLCBzcGlvX251bSk7Ci0JCS8qIHNldCBGTE9BVCAqLwotCQlzcGlvX3JlZyB8PSAoc3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVRfUE9TKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlSRUdfV1IoYnAsIE1JU0NfUkVHX1NQSU8sIHNwaW9fcmVnKTsKLQlibngyeF9od191bmxvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfU1BJTyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBibngyeF9tZGlvMjJfd3JpdGUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlZywgdTMyIHZhbCkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCXUzMiBlbWFjX2Jhc2UgPSBwb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7Ci0JdTMyIHRtcDsKLQlpbnQgaSwgcmM7Ci0KLS8qICAgICAgRFAoTkVUSUZfTVNHX0hXLCAicGh5X2FkZHIgMHgleCAgcmVnIDB4JXggIHZhbCAweCUwOHhcbiIsCi0JICAgYnAtPnBoeV9hZGRyLCByZWcsIHZhbCk7ICovCi0KLQlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9JTlRfTU9ERV9BVVRPX1BPTExJTkdfRkxBRykgewotCi0JCXRtcCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwotCQl0bXAgJj0gfkVNQUNfTURJT19NT0RFX0FVVE9fUE9MTDsKLQkJRU1BQ19XUihFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdG1wKTsKLQkJUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JCXVkZWxheSg0MCk7Ci0JfQotCi0JdG1wID0gKChicC0+cGh5X2FkZHIgPDwgMjEpIHwgKHJlZyA8PCAxNikgfAotCSAgICAgICAodmFsICYgRU1BQ19NRElPX0NPTU1fREFUQSkgfAotCSAgICAgICBFTUFDX01ESU9fQ09NTV9DT01NQU5EX1dSSVRFXzIyIHwKLQkgICAgICAgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSk7Ci0JRU1BQ19XUihFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgdG1wKTsKLQotCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7Ci0JCXVkZWxheSgxMCk7Ci0KLQkJdG1wID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSk7Ci0JCWlmICghKHRtcCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpKSB7Ci0JCQl1ZGVsYXkoNSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICh0bXAgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSB7Ci0JCUJOWDJYX0VSUigid3JpdGUgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7Ci0KLQkJcmMgPSAtRUJVU1k7Ci0JfSBlbHNlIHsKLQkJcmMgPSAwOwotCX0KLQotCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX0lOVF9NT0RFX0FVVE9fUE9MTElOR19GTEFHKSB7Ci0KLQkJdG1wID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JCXRtcCB8PSBFTUFDX01ESU9fTU9ERV9BVVRPX1BPTEw7Ci0JCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19NRElPX01PREUsIHRtcCk7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X21kaW8yMl9yZWFkKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiAqcmV0X3ZhbCkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCXUzMiBlbWFjX2Jhc2UgPSBwb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7Ci0JdTMyIHZhbDsKLQlpbnQgaSwgcmM7Ci0KLQlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9JTlRfTU9ERV9BVVRPX1BPTExJTkdfRkxBRykgewotCi0JCXZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwotCQl2YWwgJj0gfkVNQUNfTURJT19NT0RFX0FVVE9fUE9MTDsKLQkJRU1BQ19XUihFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdmFsKTsKLQkJUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JCXVkZWxheSg0MCk7Ci0JfQotCi0JdmFsID0gKChicC0+cGh5X2FkZHIgPDwgMjEpIHwgKHJlZyA8PCAxNikgfAotCSAgICAgICBFTUFDX01ESU9fQ09NTV9DT01NQU5EX1JFQURfMjIgfAotCSAgICAgICBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKTsKLQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB2YWwpOwotCi0JZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKLQkJdWRlbGF5KDEwKTsKLQotCQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NKTsKLQkJaWYgKCEodmFsICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKLQkJCXZhbCAmPSBFTUFDX01ESU9fQ09NTV9EQVRBOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAodmFsICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkgewotCQlCTlgyWF9FUlIoInJlYWQgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7Ci0KLQkJKnJldF92YWwgPSAweDA7Ci0JCXJjID0gLUVCVVNZOwotCX0gZWxzZSB7Ci0JCSpyZXRfdmFsID0gdmFsOwotCQlyYyA9IDA7Ci0JfQotCi0JaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfSU5UX01PREVfQVVUT19QT0xMSU5HX0ZMQUcpIHsKLQotCQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKLQkJdmFsIHw9IEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTDsKLQkJRU1BQ19XUihFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdmFsKTsKLQl9Ci0KLS8qICAgICAgRFAoTkVUSUZfTVNHX0hXLCAicGh5X2FkZHIgMHgleCAgcmVnIDB4JXggIHJldF92YWwgMHglMDh4XG4iLAotCSAgIGJwLT5waHlfYWRkciwgcmVnLCAqcmV0X3ZhbCk7ICovCi0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoc3RydWN0IGJueDJ4ICpicCwgdTMyIG1kaW9fY3RybCwKLQkJCQkgICB1MzIgcGh5X2FkZHIsIHUzMiByZWcsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCXUzMiB0bXA7Ci0JaW50IGksIHJjID0gMDsKLQotCS8qIHNldCBjbGF1c2UgNDUgbW9kZSwgc2xvdyBkb3duIHRoZSBNRElPIGNsb2NrIHRvIDIuNU1IegotCSAqIChhIHZhbHVlIG9mIDQ5PT0weDMxKSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIEFVVE8gcG9sbCBpcyBvZmYKLQkgKi8KLQl0bXAgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKLQl0bXAgJj0gfihFTUFDX01ESU9fTU9ERV9BVVRPX1BPTEwgfCBFTUFDX01ESU9fTU9ERV9DTE9DS19DTlQpOwotCXRtcCB8PSAoRU1BQ19NRElPX01PREVfQ0xBVVNFXzQ1IHwKLQkJKDQ5IDw8IEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVF9CSVRTSElGVCkpOwotCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUsIHRtcCk7Ci0JUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JdWRlbGF5KDQwKTsKLQotCS8qIGFkZHJlc3MgKi8KLQl0bXAgPSAoKHBoeV9hZGRyIDw8IDIxKSB8IChyZWcgPDwgMTYpIHwgYWRkciB8Ci0JICAgICAgIEVNQUNfTURJT19DT01NX0NPTU1BTkRfQUREUkVTUyB8Ci0JICAgICAgIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpOwotCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIHRtcCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgewotCQl1ZGVsYXkoMTApOwotCi0JCXRtcCA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOwotCQlpZiAoISh0bXAgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSkgewotCQkJdWRlbGF5KDUpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHRtcCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpIHsKLQkJQk5YMlhfRVJSKCJ3cml0ZSBwaHkgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQotCQlyYyA9IC1FQlVTWTsKLQotCX0gZWxzZSB7Ci0JCS8qIGRhdGEgKi8KLQkJdG1wID0gKChwaHlfYWRkciA8PCAyMSkgfCAocmVnIDw8IDE2KSB8IHZhbCB8Ci0JCSAgICAgICBFTUFDX01ESU9fQ09NTV9DT01NQU5EX1dSSVRFXzQ1IHwKLQkJICAgICAgIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpOwotCQlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB0bXApOwotCi0JCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7Ci0JCQl1ZGVsYXkoMTApOwotCi0JCQl0bXAgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NKTsKLQkJCWlmICghKHRtcCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpKSB7Ci0JCQkJdWRlbGF5KDUpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKHRtcCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpIHsKLQkJCUJOWDJYX0VSUigid3JpdGUgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7Ci0KLQkJCXJjID0gLUVCVVNZOwotCQl9Ci0JfQotCi0JLyogdW5zZXQgY2xhdXNlIDQ1IG1vZGUsIHNldCB0aGUgTURJTyBjbG9jayB0byBhIGZhc3RlciB2YWx1ZQotCSAqICgweDEzID0+IDYuMjVNaHopIGFuZCByZXN0b3JlIHRoZSBBVVRPIHBvbGwgaWYgbmVlZGVkCi0JICovCi0JdG1wID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JdG1wICY9IH4oRU1BQ19NRElPX01PREVfQ0xBVVNFXzQ1IHwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UKTsKLQl0bXAgfD0gKDB4MTMgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKTsKLQlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9JTlRfTU9ERV9BVVRPX1BPTExJTkdfRkxBRykKLQkJdG1wIHw9IEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTDsKLQlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCB0bXApOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X21kaW80NV93cml0ZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcGh5X2FkZHIsIHUzMiByZWcsCi0JCQkgICAgICB1MzIgYWRkciwgdTMyIHZhbCkKLXsKLQl1MzIgZW1hY19iYXNlID0gYnAtPnBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKLQotCXJldHVybiBibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgZW1hY19iYXNlLCBwaHlfYWRkciwKLQkJCQkgICAgICAgcmVnLCBhZGRyLCB2YWwpOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X21kaW80NV9jdHJsX3JlYWQoc3RydWN0IGJueDJ4ICpicCwgdTMyIG1kaW9fY3RybCwKLQkJCQkgIHUzMiBwaHlfYWRkciwgdTMyIHJlZywgdTMyIGFkZHIsCi0JCQkJICB1MzIgKnJldF92YWwpCi17Ci0JdTMyIHZhbDsKLQlpbnQgaSwgcmMgPSAwOwotCi0JLyogc2V0IGNsYXVzZSA0NSBtb2RlLCBzbG93IGRvd24gdGhlIE1ESU8gY2xvY2sgdG8gMi41TUh6Ci0JICogKGEgdmFsdWUgb2YgNDk9PTB4MzEpIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgQVVUTyBwb2xsIGlzIG9mZgotCSAqLwotCXZhbCA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwotCXZhbCAmPSB+KEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8IEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCk7Ci0JdmFsIHw9IChFTUFDX01ESU9fTU9ERV9DTEFVU0VfNDUgfAotCQkoNDkgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKSk7Ci0JUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdmFsKTsKLQlSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKLQl1ZGVsYXkoNDApOwotCi0JLyogYWRkcmVzcyAqLwotCXZhbCA9ICgocGh5X2FkZHIgPDwgMjEpIHwgKHJlZyA8PCAxNikgfCBhZGRyIHwKLQkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9BRERSRVNTIHwKLQkgICAgICAgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSk7Ci0JUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgdmFsKTsKLQotCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7Ci0JCXVkZWxheSgxMCk7Ci0KLQkJdmFsID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSk7Ci0JCWlmICghKHZhbCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpKSB7Ci0JCQl1ZGVsYXkoNSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAodmFsICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkgewotCQlCTlgyWF9FUlIoInJlYWQgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7Ci0KLQkJKnJldF92YWwgPSAwOwotCQlyYyA9IC1FQlVTWTsKLQotCX0gZWxzZSB7Ci0JCS8qIGRhdGEgKi8KLQkJdmFsID0gKChwaHlfYWRkciA8PCAyMSkgfCAocmVnIDw8IDE2KSB8Ci0JCSAgICAgICBFTUFDX01ESU9fQ09NTV9DT01NQU5EX1JFQURfNDUgfAotCQkgICAgICAgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSk7Ci0JCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIHZhbCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKLQkJCXVkZWxheSgxMCk7Ci0KLQkJCXZhbCA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOwotCQkJaWYgKCEodmFsICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKLQkJCQl2YWwgJj0gRU1BQ19NRElPX0NPTU1fREFUQTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmICh2YWwgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSB7Ci0JCQlCTlgyWF9FUlIoInJlYWQgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7Ci0KLQkJCXZhbCA9IDA7Ci0JCQlyYyA9IC1FQlVTWTsKLQkJfQotCi0JCSpyZXRfdmFsID0gdmFsOwotCX0KLQotCS8qIHVuc2V0IGNsYXVzZSA0NSBtb2RlLCBzZXQgdGhlIE1ESU8gY2xvY2sgdG8gYSBmYXN0ZXIgdmFsdWUKLQkgKiAoMHgxMyA9PiA2LjI1TWh6KSBhbmQgcmVzdG9yZSB0aGUgQVVUTyBwb2xsIGlmIG5lZWRlZAotCSAqLwotCXZhbCA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwotCXZhbCAmPSB+KEVNQUNfTURJT19NT0RFX0NMQVVTRV80NSB8IEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCk7Ci0JdmFsIHw9ICgweDEzIDw8IEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVF9CSVRTSElGVCk7Ci0JaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfSU5UX01PREVfQVVUT19QT0xMSU5HX0ZMQUcpCi0JCXZhbCB8PSBFTUFDX01ESU9fTU9ERV9BVVRPX1BPTEw7Ci0JUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdmFsKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBibngyeF9tZGlvNDVfcmVhZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcGh5X2FkZHIsIHUzMiByZWcsCi0JCQkgICAgIHUzMiBhZGRyLCB1MzIgKnJldF92YWwpCi17Ci0JdTMyIGVtYWNfYmFzZSA9IGJwLT5wb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7Ci0KLQlyZXR1cm4gYm54MnhfbWRpbzQ1X2N0cmxfcmVhZChicCwgZW1hY19iYXNlLCBwaHlfYWRkciwKLQkJCQkgICAgICByZWcsIGFkZHIsIHJldF92YWwpOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X21kaW80NV92d3JpdGUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHBoeV9hZGRyLCB1MzIgcmVnLAotCQkJICAgICAgIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCWludCBpOwotCXUzMiByZF92YWw7Ci0KLQltaWdodF9zbGVlcCgpOwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWJueDJ4X21kaW80NV93cml0ZShicCwgcGh5X2FkZHIsIHJlZywgYWRkciwgdmFsKTsKLQkJbXNsZWVwKDUpOwotCQlibngyeF9tZGlvNDVfcmVhZChicCwgcGh5X2FkZHIsIHJlZywgYWRkciwgJnJkX3ZhbCk7Ci0JCS8qIGlmIHRoZSByZWFkIHZhbHVlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgdmFsdWUgd2Ugd3JvdGUsCi0JCSAgIHdlIHNob3VsZCB3cml0ZSBpdCBhZ2FpbiAqLwotCQlpZiAocmRfdmFsID09IHZhbCkKLQkJCXJldHVybiAwOwotCX0KLQlCTlgyWF9FUlIoIk1ESU8gd3JpdGUgaW4gQ0w0NSBmYWlsZWRcbiIpOwotCXJldHVybiAtRUJVU1k7Ci19Ci0KLS8qCi0gKiBsaW5rIG1hbmFnZW1lbnQKLSAqLwotCi1zdGF0aWMgdm9pZCBibngyeF9wYXVzZV9yZXNvbHZlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBwYXVzZV9yZXN1bHQpCi17Ci0Jc3dpdGNoIChwYXVzZV9yZXN1bHQpIHsJCQkvKiBBU1lNIFAgQVNZTSBQICovCi0JY2FzZSAweGI6CQkJCS8qICAgMSAgMCAgIDEgIDEgKi8KLQkJYnAtPmZsb3dfY3RybCA9IEZMT1dfQ1RSTF9UWDsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4ZToJCQkJLyogICAxICAxICAgMSAgMCAqLwotCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX1JYOwotCQlicmVhazsKLQotCWNhc2UgMHg1OgkJCQkvKiAgIDAgIDEgICAwICAxICovCi0JY2FzZSAweDc6CQkJCS8qICAgMCAgMSAgIDEgIDEgKi8KLQljYXNlIDB4ZDoJCQkJLyogICAxICAxICAgMCAgMSAqLwotCWNhc2UgMHhmOgkJCQkvKiAgIDEgIDEgICAxICAxICovCi0JCWJwLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfQk9USDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB1OCBibngyeF9leHRfcGh5X3Jlc292ZV9mYyhzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiBleHRfcGh5X2FkZHI7Ci0JdTMyIGxkX3BhdXNlOwkvKiBsb2NhbCAqLwotCXUzMiBscF9wYXVzZTsJLyogbGluayBwYXJ0bmVyICovCi0JdTMyIGFuX2NvbXBsZXRlOyAvKiBBTiBjb21wbGV0ZSAqLwotCXUzMiBwYXVzZV9yZXN1bHQ7Ci0JdTggcmV0ID0gMDsKLQotCWV4dF9waHlfYWRkciA9ICgoYnAtPmV4dF9waHlfY29uZmlnICYKLQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7Ci0KLQkvKiByZWFkIHR3aWNlICovCi0JYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKLQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKLQkJCSAgRVhUX1BIWV9LUl9TVEFUVVMsICZhbl9jb21wbGV0ZSk7Ci0JYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKLQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKLQkJCSAgRVhUX1BIWV9LUl9TVEFUVVMsICZhbl9jb21wbGV0ZSk7Ci0KLQlpZiAoYW5fY29tcGxldGUgJiBFWFRfUEhZX0tSX0FVVE9fTkVHX0NPTVBMRVRFKSB7Ci0JCXJldCA9IDE7Ci0JCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJICBFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFELAotCQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19BRFZFUlQsICZsZF9wYXVzZSk7Ci0JCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJICBFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFELAotCQkJCSAgRVhUX1BIWV9LUl9MUF9BVVRPX05FRywgJmxwX3BhdXNlKTsKLQkJcGF1c2VfcmVzdWx0ID0gKGxkX3BhdXNlICYKLQkJCQlFWFRfUEhZX0tSX0FVVE9fTkVHX0FEVkVSVF9QQVVTRV9NQVNLKSA+PiA4OwotCQlwYXVzZV9yZXN1bHQgfD0gKGxwX3BhdXNlICYKLQkJCQkgRVhUX1BIWV9LUl9BVVRPX05FR19BRFZFUlRfUEFVU0VfTUFTSykgPj4gMTA7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiRXh0IFBIWSBwYXVzZSByZXN1bHQgMHgleCBcbiIsCi0JCSAgIHBhdXNlX3Jlc3VsdCk7Ci0JCWJueDJ4X3BhdXNlX3Jlc29sdmUoYnAsIHBhdXNlX3Jlc3VsdCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2Zsb3dfY3RybF9yZXNvbHZlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBncF9zdGF0dXMpCi17Ci0JdTMyIGxkX3BhdXNlOwkvKiBsb2NhbCBkcml2ZXIgKi8KLQl1MzIgbHBfcGF1c2U7CS8qIGxpbmsgcGFydG5lciAqLwotCXUzMiBwYXVzZV9yZXN1bHQ7Ci0KLQlicC0+Zmxvd19jdHJsID0gMDsKLQotCS8qIHJlc29sdmUgZnJvbSBncF9zdGF0dXMgaW4gY2FzZSBvZiBBTiBjb21wbGV0ZSBhbmQgbm90IHNnbWlpICovCi0JaWYgKChicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX0ZMT1dfQ1RSTCkgJiYKLQkgICAgKGdwX3N0YXR1cyAmIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSkgJiYKLQkgICAgKCEoYnAtPnBoeV9mbGFncyAmIFBIWV9TR01JSV9GTEFHKSkgJiYKLQkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKGJwKSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpKSB7Ci0KLQkJTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTApOwotCQlibngyeF9tZGlvMjJfcmVhZChicCwgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFYsCi0JCQkJICAmbGRfcGF1c2UpOwotCQlibngyeF9tZGlvMjJfcmVhZChicCwKLQkJCU1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxLAotCQkJCSAgJmxwX3BhdXNlKTsKLQkJcGF1c2VfcmVzdWx0ID0gKGxkX3BhdXNlICYKLQkJCQlNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9NQVNLKT4+NTsKLQkJcGF1c2VfcmVzdWx0IHw9IChscF9wYXVzZSAmCi0JCQkJIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX01BU0spPj43OwotCQlEUChORVRJRl9NU0dfTElOSywgInBhdXNlX3Jlc3VsdCAweCV4XG4iLCBwYXVzZV9yZXN1bHQpOwotCQlibngyeF9wYXVzZV9yZXNvbHZlKGJwLCBwYXVzZV9yZXN1bHQpOwotCX0gZWxzZSBpZiAoIShicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX0ZMT1dfQ1RSTCkgfHwKLQkJICAgIShibngyeF9leHRfcGh5X3Jlc292ZV9mYyhicCkpKSB7Ci0JCS8qIGZvcmNlZCBzcGVlZCAqLwotCQlpZiAoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19GTE9XX0NUUkwpIHsKLQkJCXN3aXRjaCAoYnAtPnJlcV9mbG93X2N0cmwpIHsKLQkJCWNhc2UgRkxPV19DVFJMX0FVVE86Ci0JCQkJaWYgKGJwLT5kZXYtPm10dSA8PSA0NTAwKQotCQkJCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX0JPVEg7Ci0JCQkJZWxzZQotCQkJCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX1RYOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIEZMT1dfQ1RSTF9UWDoKLQkJCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX1RYOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIEZMT1dfQ1RSTF9SWDoKLQkJCQlpZiAoYnAtPmRldi0+bXR1IDw9IDQ1MDApCi0JCQkJCWJwLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfUlg7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgRkxPV19DVFJMX0JPVEg6Ci0JCQkJaWYgKGJwLT5kZXYtPm10dSA8PSA0NTAwKQotCQkJCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX0JPVEg7Ci0JCQkJZWxzZQotCQkJCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX1RYOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIEZMT1dfQ1RSTF9OT05FOgotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsgLyogZm9yY2VkIG1vZGUgKi8KLQkJCXN3aXRjaCAoYnAtPnJlcV9mbG93X2N0cmwpIHsKLQkJCWNhc2UgRkxPV19DVFJMX0FVVE86Ci0JCQkJRFAoTkVUSUZfTVNHX0xJTkssICJyZXFfZmxvd19jdHJsIDB4JXggd2hpbGUiCi0JCQkJCQkgICAiIHJlcV9hdXRvbmVnIDB4JXhcbiIsCi0JCQkJICAgYnAtPnJlcV9mbG93X2N0cmwsIGJwLT5yZXFfYXV0b25lZyk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgRkxPV19DVFJMX1RYOgotCQkJY2FzZSBGTE9XX0NUUkxfUlg6Ci0JCQljYXNlIEZMT1dfQ1RSTF9CT1RIOgotCQkJCWJwLT5mbG93X2N0cmwgPSBicC0+cmVxX2Zsb3dfY3RybDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBGTE9XX0NUUkxfTk9ORToKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJmbG93X2N0cmwgMHgleFxuIiwgYnAtPmZsb3dfY3RybCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfc2V0dGluZ3Nfc3RhdHVzKHN0cnVjdCBibngyeCAqYnAsIHUzMiBncF9zdGF0dXMpCi17Ci0JYnAtPmxpbmtfc3RhdHVzID0gMDsKLQotCWlmIChncF9zdGF0dXMgJiBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9MSU5LX1NUQVRVUykgewotCQlEUChORVRJRl9NU0dfTElOSywgInBoeSBsaW5rIHVwXG4iKTsKLQotCQlicC0+cGh5X2xpbmtfdXAgPSAxOwotCQlicC0+bGlua19zdGF0dXMgfD0gTElOS19TVEFUVVNfTElOS19VUDsKLQotCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfRFVQTEVYX1NUQVRVUykKLQkJCWJwLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJZWxzZQotCQkJYnAtPmR1cGxleCA9IERVUExFWF9IQUxGOwotCi0JCWJueDJ4X2Zsb3dfY3RybF9yZXNvbHZlKGJwLCBncF9zdGF0dXMpOwotCi0JCXN3aXRjaCAoZ3Bfc3RhdHVzICYgR1BfU1RBVFVTX1NQRUVEX01BU0spIHsKLQkJY2FzZSBHUF9TVEFUVVNfMTBNOgotCQkJYnAtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDsKLQkJCWlmIChicC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJCWJwLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEwVEZEOwotCQkJZWxzZQotCQkJCWJwLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEwVEhEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBHUF9TVEFUVVNfMTAwTToKLQkJCWJwLT5saW5lX3NwZWVkID0gU1BFRURfMTAwOwotCQkJaWYgKGJwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQkJYnAtPmxpbmtfc3RhdHVzIHw9IExJTktfMTAwVFhGRDsKLQkJCWVsc2UKLQkJCQlicC0+bGlua19zdGF0dXMgfD0gTElOS18xMDBUWEhEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBHUF9TVEFUVVNfMUc6Ci0JCWNhc2UgR1BfU1RBVFVTXzFHX0tYOgotCQkJYnAtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJaWYgKGJwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQkJYnAtPmxpbmtfc3RhdHVzIHw9IExJTktfMTAwMFRGRDsKLQkJCWVsc2UKLQkJCQlicC0+bGlua19zdGF0dXMgfD0gTElOS18xMDAwVEhEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBHUF9TVEFUVVNfMl81RzoKLQkJCWJwLT5saW5lX3NwZWVkID0gU1BFRURfMjUwMDsKLQkJCWlmIChicC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJCWJwLT5saW5rX3N0YXR1cyB8PSBMSU5LXzI1MDBURkQ7Ci0JCQllbHNlCi0JCQkJYnAtPmxpbmtfc3RhdHVzIHw9IExJTktfMjUwMFRIRDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgR1BfU1RBVFVTXzVHOgotCQljYXNlIEdQX1NUQVRVU182RzoKLQkJCUJOWDJYX0VSUigibGluayBzcGVlZCB1bnN1cHBvcnRlZCAgZ3Bfc3RhdHVzIDB4JXhcbiIsCi0JCQkJICBncF9zdGF0dXMpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBHUF9TVEFUVVNfMTBHX0tYNDoKLQkJY2FzZSBHUF9TVEFUVVNfMTBHX0hJRzoKLQkJY2FzZSBHUF9TVEFUVVNfMTBHX0NYNDoKLQkJCWJwLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7Ci0JCQlicC0+bGlua19zdGF0dXMgfD0gTElOS18xMEdURkQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdQX1NUQVRVU18xMkdfSElHOgotCQkJYnAtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMjAwMDsKLQkJCWJwLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEyR1RGRDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgR1BfU1RBVFVTXzEyXzVHOgotCQkJYnAtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMjUwMDsKLQkJCWJwLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEyXzVHVEZEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBHUF9TVEFUVVNfMTNHOgotCQkJYnAtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMzAwMDsKLQkJCWJwLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEzR1RGRDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgR1BfU1RBVFVTXzE1RzoKLQkJCWJwLT5saW5lX3NwZWVkID0gU1BFRURfMTUwMDA7Ci0JCQlicC0+bGlua19zdGF0dXMgfD0gTElOS18xNUdURkQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdQX1NUQVRVU18xNkc6Ci0JCQlicC0+bGluZV9zcGVlZCA9IFNQRUVEXzE2MDAwOwotCQkJYnAtPmxpbmtfc3RhdHVzIHw9IExJTktfMTZHVEZEOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCUJOWDJYX0VSUigibGluayBzcGVlZCB1bnN1cHBvcnRlZCAgZ3Bfc3RhdHVzIDB4JXhcbiIsCi0JCQkJICBncF9zdGF0dXMpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlicC0+bGlua19zdGF0dXMgfD0gTElOS19TVEFUVVNfU0VSREVTX0xJTks7Ci0KLQkJaWYgKGJwLT5yZXFfYXV0b25lZyAmIEFVVE9ORUdfU1BFRUQpIHsKLQkJCWJwLT5saW5rX3N0YXR1cyB8PSBMSU5LX1NUQVRVU19BVVRPX05FR09USUFURV9FTkFCTEVEOwotCi0JCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFKQotCQkJCWJwLT5saW5rX3N0YXR1cyB8PQotCQkJCQlMSU5LX1NUQVRVU19BVVRPX05FR09USUFURV9DT01QTEVURTsKLQotCQkJaWYgKGJwLT5hdXRvbmVnICYgQVVUT05FR19QQVJBTExFTCkKLQkJCQlicC0+bGlua19zdGF0dXMgfD0KLQkJCQkJTElOS19TVEFUVVNfUEFSQUxMRUxfREVURUNUSU9OX1VTRUQ7Ci0JCX0KLQotCQlpZiAoYnAtPmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9UWCkKLQkJICAgICAgIGJwLT5saW5rX3N0YXR1cyB8PSBMSU5LX1NUQVRVU19UWF9GTE9XX0NPTlRST0xfRU5BQkxFRDsKLQotCQlpZiAoYnAtPmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9SWCkKLQkJICAgICAgIGJwLT5saW5rX3N0YXR1cyB8PSBMSU5LX1NUQVRVU19SWF9GTE9XX0NPTlRST0xfRU5BQkxFRDsKLQotCX0gZWxzZSB7IC8qIGxpbmtfZG93biAqLwotCQlEUChORVRJRl9NU0dfTElOSywgInBoeSBsaW5rIGRvd25cbiIpOwotCi0JCWJwLT5waHlfbGlua191cCA9IDA7Ci0KLQkJYnAtPmxpbmVfc3BlZWQgPSAwOwotCQlicC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCWJwLT5mbG93X2N0cmwgPSAwOwotCX0KLQotCURQKE5FVElGX01TR19MSU5LLCAiZ3Bfc3RhdHVzIDB4JXggIHBoeV9saW5rX3VwICVkXG4iCi0JICAgRFBfTEVWRUwgIiAgbGluZV9zcGVlZCAlZCAgZHVwbGV4ICVkICBmbG93X2N0cmwgMHgleCIKLQkJICAgICIgIGxpbmtfc3RhdHVzIDB4JXhcbiIsCi0JICAgZ3Bfc3RhdHVzLCBicC0+cGh5X2xpbmtfdXAsIGJwLT5saW5lX3NwZWVkLCBicC0+ZHVwbGV4LAotCSAgIGJwLT5mbG93X2N0cmwsIGJwLT5saW5rX3N0YXR1cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfaW50X2FjayhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaXNfMTBnKQotewotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0KLQkvKiBmaXJzdCByZXNldCBhbGwgc3RhdHVzCi0JICogd2UgYXNzdW1lIG9ubHkgb25lIGxpbmUgd2lsbCBiZSBjaGFuZ2UgYXQgYSB0aW1lICovCi0JYm54MnhfYml0c19kaXMoYnAsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKLQkJICAgICAgIChOSUdfU1RBVFVTX1hHWFMwX0xJTksxMEcgfAotCQkJTklHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVUyB8Ci0JCQlOSUdfU1RBVFVTX1NFUkRFUzBfTElOS19TVEFUVVMpKTsKLQlpZiAoYnAtPnBoeV9saW5rX3VwKSB7Ci0JCWlmIChpc18xMGcpIHsKLQkJCS8qIERpc2FibGUgdGhlIDEwRyBsaW5rIGludGVycnVwdAotCQkJICogYnkgd3JpdGluZyAxIHRvIHRoZSBzdGF0dXMgcmVnaXN0ZXIKLQkJCSAqLwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxMEcgWEdYUyBwaHkgbGluayB1cFxuIik7Ci0JCQlibngyeF9iaXRzX2VuKGJwLAotCQkJCSAgICAgIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKLQkJCQkgICAgICBOSUdfU1RBVFVTX1hHWFMwX0xJTksxMEcpOwotCi0JCX0gZWxzZSBpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJCS8qIERpc2FibGUgdGhlIGxpbmsgaW50ZXJydXB0Ci0JCQkgKiBieSB3cml0aW5nIDEgdG8gdGhlIHJlbGV2YW50IGxhbmUKLQkJCSAqIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIKLQkJCSAqLwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxRyBYR1hTIHBoeSBsaW5rIHVwXG4iKTsKLQkJCWJueDJ4X2JpdHNfZW4oYnAsCi0JCQkJICAgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkJCSAgICAgICgoMSA8PCBicC0+c2VyX2xhbmUpIDw8Ci0JCQkJICAgICAgIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVNfU0laRSkpOwotCi0JCX0gZWxzZSB7IC8qIFNlckRlcyAqLwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgcGh5IGxpbmsgdXBcbiIpOwotCQkJLyogRGlzYWJsZSB0aGUgbGluayBpbnRlcnJ1cHQKLQkJCSAqIGJ5IHdyaXRpbmcgMSB0byB0aGUgc3RhdHVzIHJlZ2lzdGVyCi0JCQkgKi8KLQkJCWJueDJ4X2JpdHNfZW4oYnAsCi0JCQkJICAgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkJCSAgICAgIE5JR19TVEFUVVNfU0VSREVTMF9MSU5LX1NUQVRVUyk7Ci0JCX0KLQotCX0gZWxzZSB7IC8qIGxpbmtfZG93biAqLwotCX0KLX0KLQotc3RhdGljIGludCBibngyeF9leHRfcGh5X2lzX2xpbmtfdXAoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgZXh0X3BoeV90eXBlOwotCXUzMiBleHRfcGh5X2FkZHI7Ci0JdTMyIHZhbDEgPSAwLCB2YWwyOwotCXUzMiByeF9zZCwgcGNzX3N0YXR1czsKLQotCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQlleHRfcGh5X2FkZHIgPSAoKGJwLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOwotCi0JCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGJwKTsKLQkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgRGlyZWN0XG4iKTsKLQkJCXZhbDEgPSAxOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDVcbiIpOwotCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJICBFWFRfUEhZX09QVF9XSVNfREVWQUQsCi0JCQkJCSAgRVhUX1BIWV9PUFRfTEFTSV9TVEFUVVMsICZ2YWwxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNSBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKLQotCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJICBFWFRfUEhZX09QVF9XSVNfREVWQUQsCi0JCQkJCSAgRVhUX1BIWV9PUFRfTEFTSV9TVEFUVVMsICZ2YWwxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNSBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKLQotCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkgIEVYVF9QSFlfT1BUX1BNRF9SWF9TRCwgJnJ4X3NkKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNSByeF9zZCAweCV4XG4iLCByeF9zZCk7Ci0JCQl2YWwxID0gKHJ4X3NkICYgMHgxKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKLQkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCSAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKLQkJCQkJICBFWFRfUEhZX09QVF9MQVNJX1NUQVRVUywgJnZhbDEpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2IExBU0kgc3RhdHVzIDB4JXhcbiIsIHZhbDEpOwotCi0JCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkgIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCi0JCQkJCSAgRVhUX1BIWV9PUFRfTEFTSV9TVEFUVVMsICZ2YWwxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKLQotCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkgIEVYVF9QSFlfT1BUX1BNRF9SWF9TRCwgJnJ4X3NkKTsKLQkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCSAgRVhUX1BIWV9PUFRfUENTX0RFVkFELAotCQkJCQkgIEVYVF9QSFlfT1BUX1BDU19TVEFUVVMsICZwY3Nfc3RhdHVzKTsKLQkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCSAgRVhUX1BIWV9BVVRPX05FR19ERVZBRCwKLQkJCQkJICBFWFRfUEhZX09QVF9BTl9MSU5LX1NUQVRVUywgJnZhbDIpOwotCi0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYgcnhfc2QgMHgleCIKLQkJCSAgICIgIHBjc19zdGF0dXMgMHgleCAxR2JwcyBsaW5rX3N0YXR1cyAweCV4IDB4JXhcbiIsCi0JCQkgICByeF9zZCwgcGNzX3N0YXR1cywgdmFsMiwgKHZhbDIgJiAoMTw8MSkpKTsKLQkJCS8qIGxpbmsgaXMgdXAgaWYgYm90aCBiaXQgMCBvZiBwbWRfcnhfc2QgYW5kCi0JCQkgKiBiaXQgMCBvZiBwY3Nfc3RhdHVzIGFyZSBzZXQsIG9yIGlmIHRoZSBhdXRvbmVnIGJpdAotCQkJICAgMSBpcyBzZXQKLQkJCSAqLwotCQkJdmFsMSA9ICgocnhfc2QgJiBwY3Nfc3RhdHVzICYgMHgxKSB8fCAodmFsMiAmICgxPDwxKSkpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCQkJYm54MnhfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOwotCi0JCQkvKiBjbGVhciB0aGUgaW50ZXJydXB0IExBU0kgc3RhdHVzIHJlZ2lzdGVyICovCi0JCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgRVhUX1BIWV9LUl9QQ1NfREVWQUQsCi0JCQkJCSAgICAgICBFWFRfUEhZX0tSX0xBU0lfU1RBVFVTLCAmdmFsMik7Ci0JCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgRVhUX1BIWV9LUl9QQ1NfREVWQUQsCi0JCQkJCSAgICAgICBFWFRfUEhZX0tSX0xBU0lfU1RBVFVTLCAmdmFsMSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIktSIExBU0kgc3RhdHVzIDB4JXgtPjB4JXhcbiIsCi0JCQkgICB2YWwyLCB2YWwxKTsKLQkJCS8qIENoZWNrIHRoZSBMQVNJICovCi0JCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELAotCQkJCQkgICAgICAgMHg5MDAzLCAmdmFsMik7Ci0JCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAotCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICAgRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELAotCQkJCQkgICAgICAgMHg5MDAzLCAmdmFsMSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIktSIDB4OTAwMyAweCV4LT4weCV4XG4iLAotCQkJICAgdmFsMiwgdmFsMSk7Ci0JCQkvKiBDaGVjayB0aGUgbGluayBzdGF0dXMgKi8KLQkJCWJueDJ4X21kaW80NV9jdHJsX3JlYWQoYnAsIEdSQ0JBU0VfRU1BQzAsCi0JCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICAgICBFWFRfUEhZX0tSX1BDU19ERVZBRCwKLQkJCQkJICAgICAgIEVYVF9QSFlfS1JfUENTX1NUQVRVUywgJnZhbDIpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJLUiBQQ1Mgc3RhdHVzIDB4JXhcbiIsIHZhbDIpOwotCQkJLyogQ2hlY2sgdGhlIGxpbmsgc3RhdHVzIG9uIDEuMS4yICovCi0JCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAotCQkJCQkgIGV4dF9waHlfYWRkciwKLQkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkgIEVYVF9QSFlfS1JfU1RBVFVTLCAmdmFsMik7Ci0JCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAotCQkJCQkgIGV4dF9waHlfYWRkciwKLQkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkgIEVYVF9QSFlfS1JfU1RBVFVTLCAmdmFsMSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywKLQkJCSAgICJLUiBQTUEgc3RhdHVzIDB4JXgtPjB4JXhcbiIsIHZhbDIsIHZhbDEpOwotCQkJdmFsMSA9ICgodmFsMSAmIDQpID09IDQpOwotCQkJLyogSWYgMUcgd2FzIHJlcXVlc3RlZCBhc3N1bWUgdGhlIGxpbmsgaXMgdXAgKi8KLQkJCWlmICghKGJwLT5yZXFfYXV0b25lZyAmIEFVVE9ORUdfU1BFRUQpICYmCi0JCQkgICAgKGJwLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwKSkKLQkJCQl2YWwxID0gMTsKLQkJCWJueDJ4X2h3X3VubG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgotCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkgIEVYVF9QSFlfT1BUX0xBU0lfU1RBVFVTLCAmdmFsMik7Ci0JCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkgIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCi0JCQkJCSAgRVhUX1BIWV9PUFRfTEFTSV9TVEFUVVMsICZ2YWwxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJICAgIjEwRy1iYXNlLVQgTEFTSSBzdGF0dXMgMHgleC0+MHgleFxuIiwgdmFsMiwgdmFsMSk7Ci0JCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkgIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCi0JCQkJCSAgRVhUX1BIWV9LUl9TVEFUVVMsICZ2YWwyKTsKLQkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCSAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKLQkJCQkJICBFWFRfUEhZX0tSX1NUQVRVUywgJnZhbDEpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkgICAiMTBHLWJhc2UtVCBQTUEgc3RhdHVzIDB4JXgtPjB4JXhcbiIsIHZhbDIsIHZhbDEpOwotCQkJdmFsMSA9ICgodmFsMSAmIDQpID09IDQpOwotCQkJLyogaWYgbGluayBpcyB1cAotCQkJICogcHJpbnQgdGhlIEFOIG91dGNvbWUgb2YgdGhlIFNGWDcxMDEgUEhZCi0JCQkgKi8KLQkJCWlmICh2YWwxKSB7Ci0JCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKLQkJCQkJCSAgMHgyMSwgJnZhbDIpOwotCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAgICJTRlg3MTAxIEFOIHN0YXR1cyAweCV4LT4lc1xuIiwgdmFsMiwKLQkJCQkgICAodmFsMiAmICgxPDwxNCkpID8gIk1hc3RlciIgOiAiU2xhdmUiKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCi0JCQkgICBicC0+ZXh0X3BoeV9jb25maWcpOwotCQkJdmFsMSA9IDA7Ci0JCQlicmVhazsKLQkJfQotCi0JfSBlbHNlIHsgLyogU2VyRGVzICovCi0JCWV4dF9waHlfdHlwZSA9IFNFUkRFU19FWFRfUEhZX1RZUEUoYnApOwotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgRGlyZWN0XG4iKTsKLQkJCXZhbDEgPSAxOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0JDTTU0ODI6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyA1NDgyXG4iKTsKLQkJCXZhbDEgPSAxOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAotCQkJICAgYnAtPmV4dF9waHlfY29uZmlnKTsKLQkJCXZhbDEgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdmFsMTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfYm1hY19lbmFibGUoc3RydWN0IGJueDJ4ICpicCwgaW50IGlzX2xiKQotewotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0JdTMyIGJtYWNfYWRkciA9IHBvcnQgPyBOSUdfUkVHX0lOR1JFU1NfQk1BQzFfTUVNIDoKLQkJCSAgICAgICBOSUdfUkVHX0lOR1JFU1NfQk1BQzBfTUVNOwotCXUzMiB3Yl93cml0ZVsyXTsKLQl1MzIgdmFsOwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGluZyBCaWdNQUNcbiIpOwotCS8qIHJlc2V0IGFuZCB1bnJlc2V0IHRoZSBCaWdNYWMgKi8KLQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAotCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKLQltc2xlZXAoNSk7Ci0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsCi0JICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOwotCi0JLyogZW5hYmxlIGFjY2VzcyBmb3IgYm1hYyByZWdpc3RlcnMgKi8KLQlOSUdfV1IoTklHX1JFR19CTUFDMF9SRUdTX09VVF9FTiArIHBvcnQqNCwgMHgxKTsKLQotCS8qIFhHWFMgY29udHJvbCAqLwotCXdiX3dyaXRlWzBdID0gMHgzYzsKLQl3Yl93cml0ZVsxXSA9IDA7Ci0JUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9CTUFDX1hHWFNfQ09OVFJPTCwKLQkJICAgIHdiX3dyaXRlLCAyKTsKLQotCS8qIHR4IE1BQyBTQSAqLwotCXdiX3dyaXRlWzBdID0gKChicC0+ZGV2LT5kZXZfYWRkclsyXSA8PCAyNCkgfAotCQkgICAgICAgKGJwLT5kZXYtPmRldl9hZGRyWzNdIDw8IDE2KSB8Ci0JCSAgICAgICAoYnAtPmRldi0+ZGV2X2FkZHJbNF0gPDwgOCkgfAotCQkJYnAtPmRldi0+ZGV2X2FkZHJbNV0pOwotCXdiX3dyaXRlWzFdID0gKChicC0+ZGV2LT5kZXZfYWRkclswXSA8PCA4KSB8Ci0JCQlicC0+ZGV2LT5kZXZfYWRkclsxXSk7Ci0JUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9UWF9TT1VSQ0VfQUREUiwKLQkJICAgIHdiX3dyaXRlLCAyKTsKLQotCS8qIHR4IGNvbnRyb2wgKi8KLQl2YWwgPSAweGMwOwotCWlmIChicC0+Zmxvd19jdHJsICYgRkxPV19DVFJMX1RYKQotCQl2YWwgfD0gMHg4MDAwMDA7Ci0Jd2Jfd3JpdGVbMF0gPSB2YWw7Ci0Jd2Jfd3JpdGVbMV0gPSAwOwotCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfVFhfQ09OVFJPTCwgd2Jfd3JpdGUsIDIpOwotCi0JLyogc2V0IHR4IG10dSAqLwotCXdiX3dyaXRlWzBdID0gRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSArIEVUSF9PVlJFSEVBRDsgLyogLUNSQyAqLwotCXdiX3dyaXRlWzFdID0gMDsKLQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1RYX01BWF9TSVpFLCB3Yl93cml0ZSwgMik7Ci0KLQkvKiBtYWMgY29udHJvbCAqLwotCXZhbCA9IDB4MzsKLQlpZiAoaXNfbGIpIHsKLQkJdmFsIHw9IDB4NDsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGUgYm1hYyBsb29wYmFja1xuIik7Ci0JfQotCXdiX3dyaXRlWzBdID0gdmFsOwotCXdiX3dyaXRlWzFdID0gMDsKLQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX0JNQUNfQ09OVFJPTCwKLQkJICAgIHdiX3dyaXRlLCAyKTsKLQotCS8qIHJ4IGNvbnRyb2wgc2V0IHRvIGRvbid0IHN0cmlwIGNyYyAqLwotCXZhbCA9IDB4MTQ7Ci0JaWYgKGJwLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfUlgpCi0JCXZhbCB8PSAweDIwOwotCXdiX3dyaXRlWzBdID0gdmFsOwotCXdiX3dyaXRlWzFdID0gMDsKLQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1JYX0NPTlRST0wsIHdiX3dyaXRlLCAyKTsKLQotCS8qIHNldCByeCBtdHUgKi8KLQl3Yl93cml0ZVswXSA9IEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUgKyBFVEhfT1ZSRUhFQUQ7Ci0Jd2Jfd3JpdGVbMV0gPSAwOwotCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfUlhfTUFYX1NJWkUsIHdiX3dyaXRlLCAyKTsKLQotCS8qIHNldCBjbnQgbWF4IHNpemUgKi8KLQl3Yl93cml0ZVswXSA9IEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUgKyBFVEhfT1ZSRUhFQUQ7IC8qIC1WTEFOICovCi0Jd2Jfd3JpdGVbMV0gPSAwOwotCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQ05UX01BWF9TSVpFLAotCQkgICAgd2Jfd3JpdGUsIDIpOwotCi0JLyogY29uZmlndXJlIHNhZmMgKi8KLQl3Yl93cml0ZVswXSA9IDB4MTAwMDIwMDsKLQl3Yl93cml0ZVsxXSA9IDA7Ci0JUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9SWF9MTEZDX01TR19GTERTLAotCQkgICAgd2Jfd3JpdGUsIDIpOwotCi0JLyogZml4IGZvciBlbXVsYXRpb24gKi8KLQlpZiAoQ0hJUF9SRVYoYnApID09IENISVBfUkVWX0VNVUwpIHsKLQkJd2Jfd3JpdGVbMF0gPSAweGYwMDA7Ci0JCXdiX3dyaXRlWzFdID0gMDsKLQkJUkVHX1dSX0RNQUUoYnAsCi0JCQkgICAgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1RYX1BBVVNFX1RIUkVTSE9MRCwKLQkJCSAgICB3Yl93cml0ZSwgMik7Ci0JfQotCi0JLyogcmVzZXQgb2xkIGJtYWMgc3RhdHMgKi8KLQltZW1zZXQoJmJwLT5vbGRfYm1hYywgMCwgc2l6ZW9mKHN0cnVjdCBibWFjX3N0YXRzKSk7Ci0KLQlOSUdfV1IoTklHX1JFR19YQ00wX09VVF9FTiArIHBvcnQqNCwgMHgwKTsKLQotCS8qIHNlbGVjdCBYR1hTICovCi0JTklHX1dSKE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsgcG9ydCo0LCAweDEpOwotCU5JR19XUihOSUdfUkVHX1hHWFNfTEFORV9TRUxfUDAgKyBwb3J0KjQsIDB4MCk7Ci0KLQkvKiBkaXNhYmxlIHRoZSBOSUcgaW4vb3V0IHRvIHRoZSBlbWFjICovCi0JTklHX1dSKE5JR19SRUdfRU1BQzBfSU5fRU4gKyBwb3J0KjQsIDB4MCk7Ci0JTklHX1dSKE5JR19SRUdfRU1BQzBfUEFVU0VfT1VUX0VOICsgcG9ydCo0LCAweDApOwotCU5JR19XUihOSUdfUkVHX0VHUkVTU19FTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDB4MCk7Ci0KLQkvKiBlbmFibGUgdGhlIE5JRyBpbi9vdXQgdG8gdGhlIGJtYWMgKi8KLQlOSUdfV1IoTklHX1JFR19FR1JFU1NfRU1BQzBfUE9SVCArIHBvcnQqNCwgMHgwKTsKLQotCU5JR19XUihOSUdfUkVHX0JNQUMwX0lOX0VOICsgcG9ydCo0LCAweDEpOwotCXZhbCA9IDA7Ci0JaWYgKGJwLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfVFgpCi0JCXZhbCA9IDE7Ci0JTklHX1dSKE5JR19SRUdfQk1BQzBfUEFVU0VfT1VUX0VOICsgcG9ydCo0LCB2YWwpOwotCU5JR19XUihOSUdfUkVHX0JNQUMwX09VVF9FTiArIHBvcnQqNCwgMHgxKTsKLQotCWJwLT5waHlfZmxhZ3MgfD0gUEhZX0JNQUNfRkxBRzsKLQotCWJwLT5zdGF0c19zdGF0ZSA9IFNUQVRTX1NUQVRFX0VOQUJMRTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfYm1hY19yeF9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQl1MzIgYm1hY19hZGRyID0gcG9ydCA/IE5JR19SRUdfSU5HUkVTU19CTUFDMV9NRU0gOgotCQkJICAgICAgIE5JR19SRUdfSU5HUkVTU19CTUFDMF9NRU07Ci0JdTMyIHdiX3dyaXRlWzJdOwotCi0JLyogT25seSBpZiB0aGUgYm1hYyBpcyBvdXQgb2YgcmVzZXQgKi8KLQlpZiAoUkVHX1JEKGJwLCBNSVNDX1JFR19SRVNFVF9SRUdfMikgJgotCQkJKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9CTUFDMCA8PCBwb3J0KSkgewotCQkvKiBDbGVhciBSeCBFbmFibGUgYml0IGluIEJNQUNfQ09OVFJPTCByZWdpc3RlciAqLwotI2lmZGVmIEJOWDJYX0RNQUVfUkQKLQkJYm54MnhfcmVhZF9kbWFlKGJwLCBibWFjX2FkZHIgKwotCQkJCUJJR01BQ19SRUdJU1RFUl9CTUFDX0NPTlRST0wsIDIpOwotCQl3Yl93cml0ZVswXSA9ICpibngyeF9zcChicCwgd2JfZGF0YVswXSk7Ci0JCXdiX3dyaXRlWzFdID0gKmJueDJ4X3NwKGJwLCB3Yl9kYXRhWzFdKTsKLSNlbHNlCi0JCXdiX3dyaXRlWzBdID0gUkVHX1JEKGJwLAotCQkJCWJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9CTUFDX0NPTlRST0wpOwotCQl3Yl93cml0ZVsxXSA9IFJFR19SRChicCwKLQkJCQlibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQk1BQ19DT05UUk9MICsgNCk7Ci0jZW5kaWYKLQkJd2Jfd3JpdGVbMF0gJj0gfkJNQUNfQ09OVFJPTF9SWF9FTkFCTEU7Ci0JCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQk1BQ19DT05UUk9MLAotCQkJICAgIHdiX3dyaXRlLCAyKTsKLQkJbXNsZWVwKDEpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZW1hY19lbmFibGUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCXUzMiBlbWFjX2Jhc2UgPSBwb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7Ci0JdTMyIHZhbDsKLQlpbnQgdGltZW91dDsKLQotCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxpbmcgRU1BQ1xuIik7Ci0JLyogcmVzZXQgYW5kIHVucmVzZXQgdGhlIGVtYWMgY29yZSAqLwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCi0JICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfRU1BQzBfSEFSRF9DT1JFIDw8IHBvcnQpKTsKLQltc2xlZXAoNSk7Ci0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsCi0JICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfRU1BQzBfSEFSRF9DT1JFIDw8IHBvcnQpKTsKLQotCS8qIGVuYWJsZSBlbWFjIGFuZCBub3QgYm1hYyAqLwotCU5JR19XUihOSUdfUkVHX0VHUkVTU19FTUFDMF9QT1JUICsgcG9ydCo0LCAxKTsKLQotCS8qIGZvciBwYWxhZGl1bSAqLwotCWlmIChDSElQX1JFVihicCkgPT0gQ0hJUF9SRVZfRU1VTCkgewotCQkvKiBVc2UgbGFuZSAxIChvZiBsYW5lcyAwLTMpICovCi0JCU5JR19XUihOSUdfUkVHX1hHWFNfTEFORV9TRUxfUDAgKyBwb3J0KjQsIDEpOwotCQlOSUdfV1IoTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKyBwb3J0KjQsIDEpOwotCX0KLQkvKiBmb3IgZnBnYSAqLwotCWVsc2UgaWYgKENISVBfUkVWKGJwKSA9PSBDSElQX1JFVl9GUEdBKSB7Ci0JCS8qIFVzZSBsYW5lIDEgKG9mIGxhbmVzIDAtMykgKi8KLQkJTklHX1dSKE5JR19SRUdfWEdYU19MQU5FX1NFTF9QMCArIHBvcnQqNCwgMSk7Ci0JCU5JR19XUihOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCArIHBvcnQqNCwgMCk7Ci0JfQotCS8qIEFTSUMgKi8KLQllbHNlIHsKLQkJaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFNcbiIpOwotCQkJLyogc2VsZWN0IHRoZSBtYXN0ZXIgbGFuZXMgKG91dCBvZiAwLTMpICovCi0JCQlOSUdfV1IoTklHX1JFR19YR1hTX0xBTkVfU0VMX1AwICsgcG9ydCo0LAotCQkJICAgICAgIGJwLT5zZXJfbGFuZSk7Ci0JCQkvKiBzZWxlY3QgWEdYUyAqLwotCQkJTklHX1dSKE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsgcG9ydCo0LCAxKTsKLQotCQl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzXG4iKTsKLQkJCS8qIHNlbGVjdCBTZXJEZXMgKi8KLQkJCU5JR19XUihOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCArIHBvcnQqNCwgMCk7Ci0JCX0KLQl9Ci0KLQkvKiBlbmFibGUgZW1hYyAqLwotCU5JR19XUihOSUdfUkVHX05JR19FTUFDMF9FTiArIHBvcnQqNCwgMSk7Ci0KLQkvKiBpbml0IGVtYWMgLSB1c2UgcmVhZC1tb2RpZnktd3JpdGUgKi8KLQkvKiBzZWxmIGNsZWFyIHJlc2V0ICovCi0JdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01PREUpOwotCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19NT0RFLCAodmFsIHwgRU1BQ19NT0RFX1JFU0VUKSk7Ci0KLQl0aW1lb3V0ID0gMjAwOwotCXdoaWxlICh2YWwgJiBFTUFDX01PREVfUkVTRVQpIHsKLQkJdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01PREUpOwotCQlEUChORVRJRl9NU0dfTElOSywgIkVNQUMgcmVzZXQgcmVnIGlzICV1XG4iLCB2YWwpOwotCQlpZiAoIXRpbWVvdXQpIHsKLQkJCUJOWDJYX0VSUigiRU1BQyB0aW1lb3V0IVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQl0aW1lb3V0LS07Ci0JfQotCi0JLyogcmVzZXQgdHggcGFydCAqLwotCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19UWF9NT0RFLCBFTUFDX1RYX01PREVfUkVTRVQpOwotCi0JdGltZW91dCA9IDIwMDsKLQl3aGlsZSAodmFsICYgRU1BQ19UWF9NT0RFX1JFU0VUKSB7Ci0JCXZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19UWF9NT0RFKTsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJFTUFDIHJlc2V0IHJlZyBpcyAldVxuIiwgdmFsKTsKLQkJaWYgKCF0aW1lb3V0KSB7Ci0JCQlCTlgyWF9FUlIoIkVNQUMgdGltZW91dCFcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdGltZW91dC0tOwotCX0KLQotCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkgewotCQkvKiBjb25maWcgR01JSSBtb2RlICovCi0JCXZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NT0RFKTsKLQkJRU1BQ19XUihFTUFDX1JFR19FTUFDX01PREUsICh2YWwgfCBFTUFDX01PREVfUE9SVF9HTUlJKSk7Ci0KLQl9IGVsc2UgeyAvKiBBU0lDICovCi0JCS8qIHBhdXNlIGVuYWJsZS9kaXNhYmxlICovCi0JCWJueDJ4X2JpdHNfZGlzKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX1JYX01PREUsCi0JCQkgICAgICAgRU1BQ19SWF9NT0RFX0ZMT1dfRU4pOwotCQlpZiAoYnAtPmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9SWCkKLQkJCWJueDJ4X2JpdHNfZW4oYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSwKLQkJCQkgICAgICBFTUFDX1JYX01PREVfRkxPV19FTik7Ci0KLQkJYm54MnhfYml0c19kaXMoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfVFhfTU9ERSwKLQkJCSAgICAgICBFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOKTsKLQkJaWYgKGJwLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfVFgpCi0JCQlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX1RYX01PREUsCi0JCQkJICAgICAgRU1BQ19UWF9NT0RFX0VYVF9QQVVTRV9FTik7Ci0JfQotCi0JLyogS0VFUF9WTEFOX1RBRywgcHJvbWlzY3VvdXMgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSk7Ci0JdmFsIHw9IEVNQUNfUlhfTU9ERV9LRUVQX1ZMQU5fVEFHIHwgRU1BQ19SWF9NT0RFX1BST01JU0NVT1VTOwotCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19SWF9NT0RFLCB2YWwpOwotCi0JLyogaWRlbnRpZnkgbWFnaWMgcGFja2V0cyAqLwotCXZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NT0RFKTsKLQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTU9ERSwgKHZhbCB8IEVNQUNfTU9ERV9NUEtUKSk7Ci0KLQkvKiBlbmFibGUgZW1hYyBmb3IganVtYm8gcGFja2V0cyAqLwotCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19SWF9NVFVfU0laRSwKLQkJKEVNQUNfUlhfTVRVX1NJWkVfSlVNQk9fRU5BIHwKLQkJIChFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFICsgRVRIX09WUkVIRUFEKSkpOyAvKiAtVkxBTiAqLwotCi0JLyogc3RyaXAgQ1JDICovCi0JTklHX1dSKE5JR19SRUdfTklHX0lOR1JFU1NfRU1BQzBfTk9fQ1JDICsgcG9ydCo0LCAweDEpOwotCi0JdmFsID0gKChicC0+ZGV2LT5kZXZfYWRkclswXSA8PCA4KSB8Ci0JCWJwLT5kZXYtPmRldl9hZGRyWzFdKTsKLQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTUFDX01BVENILCB2YWwpOwotCi0JdmFsID0gKChicC0+ZGV2LT5kZXZfYWRkclsyXSA8PCAyNCkgfAotCSAgICAgICAoYnAtPmRldi0+ZGV2X2FkZHJbM10gPDwgMTYpIHwKLQkgICAgICAgKGJwLT5kZXYtPmRldl9hZGRyWzRdIDw8IDgpIHwKLQkJYnAtPmRldi0+ZGV2X2FkZHJbNV0pOwotCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19NQUNfTUFUQ0ggKyA0LCB2YWwpOwotCi0JLyogZGlzYWJsZSB0aGUgTklHIGluL291dCB0byB0aGUgYm1hYyAqLwotCU5JR19XUihOSUdfUkVHX0JNQUMwX0lOX0VOICsgcG9ydCo0LCAweDApOwotCU5JR19XUihOSUdfUkVHX0JNQUMwX1BBVVNFX09VVF9FTiArIHBvcnQqNCwgMHgwKTsKLQlOSUdfV1IoTklHX1JFR19CTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDB4MCk7Ci0KLQkvKiBlbmFibGUgdGhlIE5JRyBpbi9vdXQgdG8gdGhlIGVtYWMgKi8KLQlOSUdfV1IoTklHX1JFR19FTUFDMF9JTl9FTiArIHBvcnQqNCwgMHgxKTsKLQl2YWwgPSAwOwotCWlmIChicC0+Zmxvd19jdHJsICYgRkxPV19DVFJMX1RYKQotCQl2YWwgPSAxOwotCU5JR19XUihOSUdfUkVHX0VNQUMwX1BBVVNFX09VVF9FTiArIHBvcnQqNCwgdmFsKTsKLQlOSUdfV1IoTklHX1JFR19FR1JFU1NfRU1BQzBfT1VUX0VOICsgcG9ydCo0LCAweDEpOwotCi0JaWYgKENISVBfUkVWKGJwKSA9PSBDSElQX1JFVl9GUEdBKSB7Ci0JCS8qIHRha2UgdGhlIEJpZ01hYyBvdXQgb2YgcmVzZXQgKi8KLQkJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsCi0JCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKLQotCQkvKiBlbmFibGUgYWNjZXNzIGZvciBibWFjIHJlZ2lzdGVycyAqLwotCQlOSUdfV1IoTklHX1JFR19CTUFDMF9SRUdTX09VVF9FTiArIHBvcnQqNCwgMHgxKTsKLQl9Ci0KLQlicC0+cGh5X2ZsYWdzIHw9IFBIWV9FTUFDX0ZMQUc7Ci0KLQlicC0+c3RhdHNfc3RhdGUgPSBTVEFUU19TVEFURV9FTkFCTEU7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2VtYWNfcHJvZ3JhbShzdHJ1Y3QgYm54MnggKmJwKQotewotCXUxNiBtb2RlID0gMDsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJzZXR0aW5nIGxpbmsgc3BlZWQgJiBkdXBsZXhcbiIpOwotCWJueDJ4X2JpdHNfZGlzKGJwLCBHUkNCQVNFX0VNQUMwICsgcG9ydCoweDQwMCArIEVNQUNfUkVHX0VNQUNfTU9ERSwKLQkJICAgICAgIChFTUFDX01PREVfMjVHX01PREUgfAotCQkJRU1BQ19NT0RFX1BPUlRfTUlJXzEwTSB8Ci0JCQlFTUFDX01PREVfSEFMRl9EVVBMRVgpKTsKLQlzd2l0Y2ggKGJwLT5saW5lX3NwZWVkKSB7Ci0JY2FzZSBTUEVFRF8xMDoKLQkJbW9kZSB8PSBFTUFDX01PREVfUE9SVF9NSUlfMTBNOwotCQlicmVhazsKLQotCWNhc2UgU1BFRURfMTAwOgotCQltb2RlIHw9IEVNQUNfTU9ERV9QT1JUX01JSTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNQRUVEXzEwMDA6Ci0JCW1vZGUgfD0gRU1BQ19NT0RFX1BPUlRfR01JSTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNQRUVEXzI1MDA6Ci0JCW1vZGUgfD0gKEVNQUNfTU9ERV8yNUdfTU9ERSB8IEVNQUNfTU9ERV9QT1JUX0dNSUkpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCS8qIDEwRyBub3QgdmFsaWQgZm9yIEVNQUMgKi8KLQkJQk5YMlhfRVJSKCJJbnZhbGlkIGxpbmVfc3BlZWQgMHgleFxuIiwgYnAtPmxpbmVfc3BlZWQpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoYnAtPmR1cGxleCA9PSBEVVBMRVhfSEFMRikKLQkJbW9kZSB8PSBFTUFDX01PREVfSEFMRl9EVVBMRVg7Ci0JYm54MnhfYml0c19lbihicCwgR1JDQkFTRV9FTUFDMCArIHBvcnQqMHg0MDAgKyBFTUFDX1JFR19FTUFDX01PREUsCi0JCSAgICAgIG1vZGUpOwotCi0JYm54MnhfbGVkc19zZXQoYnAsIGJwLT5saW5lX3NwZWVkKTsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0X3NnbWlpX3R4X2RyaXZlcihzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiBscF91cDI7Ci0JdTMyIHR4X2RyaXZlcjsKLQotCS8qIHJlYWQgcHJlY29tcCAqLwotCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LX09WRVJfMUcpOwotCWJueDJ4X21kaW8yMl9yZWFkKGJwLCBNRElPX09WRVJfMUdfTFBfVVAyLCAmbHBfdXAyKTsKLQotCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LX1RYMCk7Ci0JYm54MnhfbWRpbzIyX3JlYWQoYnAsIE1ESU9fVFgwX1RYX0RSSVZFUiwgJnR4X2RyaXZlcik7Ci0KLQkvKiBiaXRzIFsxMDo3XSBhdCBscF91cDIsIHBvc2l0aW9uZWQgYXQgWzE1OjEyXSAqLwotCWxwX3VwMiA9ICgoKGxwX3VwMiAmIE1ESU9fT1ZFUl8xR19MUF9VUDJfUFJFRU1QSEFTSVNfTUFTSykgPj4KLQkJICAgTURJT19PVkVSXzFHX0xQX1VQMl9QUkVFTVBIQVNJU19TSElGVCkgPDwKLQkJICBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfU0hJRlQpOwotCi0JaWYgKChscF91cDIgIT0gMCkgJiYKLQkgICAgKGxwX3VwMiAhPSAodHhfZHJpdmVyICYgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0spKSkgewotCQkvKiByZXBsYWNlIHR4X2RyaXZlciBiaXRzIFsxNToxMl0gKi8KLQkJdHhfZHJpdmVyICY9IH5NRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSzsKLQkJdHhfZHJpdmVyIHw9IGxwX3VwMjsKLQkJYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX1RYMF9UWF9EUklWRVIsIHR4X2RyaXZlcik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9wYmZfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQl1MzIgaW5pdF9jcmQsIGNyZDsKLQl1MzIgY291bnQgPSAxMDAwOwotCXUzMiBwYXVzZSA9IDA7Ci0KLQkvKiBkaXNhYmxlIHBvcnQgKi8KLQlSRUdfV1IoYnAsIFBCRl9SRUdfRElTQUJMRV9ORVdfVEFTS19QUk9DX1AwICsgcG9ydCo0LCAweDEpOwotCi0JLyogd2FpdCBmb3IgaW5pdCBjcmVkaXQgKi8KLQlpbml0X2NyZCA9IFJFR19SRChicCwgUEJGX1JFR19QMF9JTklUX0NSRCArIHBvcnQqNCk7Ci0JY3JkID0gUkVHX1JEKGJwLCBQQkZfUkVHX1AwX0NSRURJVCArIHBvcnQqOCk7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJpbml0X2NyZCAweCV4ICBjcmQgMHgleFxuIiwgaW5pdF9jcmQsIGNyZCk7Ci0KLQl3aGlsZSAoKGluaXRfY3JkICE9IGNyZCkgJiYgY291bnQpIHsKLQkJbXNsZWVwKDUpOwotCi0JCWNyZCA9IFJFR19SRChicCwgUEJGX1JFR19QMF9DUkVESVQgKyBwb3J0KjgpOwotCQljb3VudC0tOwotCX0KLQljcmQgPSBSRUdfUkQoYnAsIFBCRl9SRUdfUDBfQ1JFRElUICsgcG9ydCo4KTsKLQlpZiAoaW5pdF9jcmQgIT0gY3JkKQotCQlCTlgyWF9FUlIoIkJVRyEgaW5pdF9jcmQgMHgleCAhPSBjcmQgMHgleFxuIiwgaW5pdF9jcmQsIGNyZCk7Ci0KLQlpZiAoYnAtPmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9SWCkKLQkJcGF1c2UgPSAxOwotCVJFR19XUihicCwgUEJGX1JFR19QMF9QQVVTRV9FTkFCTEUgKyBwb3J0KjQsIHBhdXNlKTsKLQlpZiAocGF1c2UpIHsKLQkJLyogdXBkYXRlIHRocmVzaG9sZCAqLwotCQlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfQVJCX1RIUlNIICsgcG9ydCo0LCAwKTsKLQkJLyogdXBkYXRlIGluaXQgY3JlZGl0ICovCi0JCWluaXRfY3JkID0gNzc4OyAJLyogKDgwMC0xOC00KSAqLwotCi0JfSBlbHNlIHsKLQkJdTMyIHRocmVzaCA9IChFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFICsgRVRIX09WUkVIRUFEKS8xNjsKLQotCQkvKiB1cGRhdGUgdGhyZXNob2xkICovCi0JCVJFR19XUihicCwgUEJGX1JFR19QMF9BUkJfVEhSU0ggKyBwb3J0KjQsIHRocmVzaCk7Ci0JCS8qIHVwZGF0ZSBpbml0IGNyZWRpdCAqLwotCQlzd2l0Y2ggKGJwLT5saW5lX3NwZWVkKSB7Ci0JCWNhc2UgU1BFRURfMTA6Ci0JCWNhc2UgU1BFRURfMTAwOgotCQljYXNlIFNQRUVEXzEwMDA6Ci0JCQlpbml0X2NyZCA9IHRocmVzaCArIDU1IC0gMjI7Ci0JCQlicmVhazsKLQotCQljYXNlIFNQRUVEXzI1MDA6Ci0JCQlpbml0X2NyZCA9IHRocmVzaCArIDEzOCAtIDIyOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTUEVFRF8xMDAwMDoKLQkJCWluaXRfY3JkID0gdGhyZXNoICsgNTUzIC0gMjI7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJQk5YMlhfRVJSKCJJbnZhbGlkIGxpbmVfc3BlZWQgMHgleFxuIiwKLQkJCQkgIGJwLT5saW5lX3NwZWVkKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCVJFR19XUihicCwgUEJGX1JFR19QMF9JTklUX0NSRCArIHBvcnQqNCwgaW5pdF9jcmQpOwotCURQKE5FVElGX01TR19MSU5LLCAiUEJGIHVwZGF0ZWQgdG8gc3BlZWQgJWQgY3JlZGl0ICVkXG4iLAotCSAgIGJwLT5saW5lX3NwZWVkLCBpbml0X2NyZCk7Ci0KLQkvKiBwcm9iZSB0aGUgY3JlZGl0IGNoYW5nZXMgKi8KLQlSRUdfV1IoYnAsIFBCRl9SRUdfSU5JVF9QMCArIHBvcnQqNCwgMHgxKTsKLQltc2xlZXAoNSk7Ci0JUkVHX1dSKGJwLCBQQkZfUkVHX0lOSVRfUDAgKyBwb3J0KjQsIDB4MCk7Ci0KLQkvKiBlbmFibGUgcG9ydCAqLwotCVJFR19XUihicCwgUEJGX1JFR19ESVNBQkxFX05FV19UQVNLX1BST0NfUDAgKyBwb3J0KjQsIDB4MCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3VwZGF0ZV9tbmcoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpZiAoIW5vbWNwKQotCQlTSE1FTV9XUihicCwgcG9ydF9tYlticC0+cG9ydF0ubGlua19zdGF0dXMsCi0JCQkgYnAtPmxpbmtfc3RhdHVzKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfbGlua19yZXBvcnQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpZiAoYnAtPmxpbmtfdXApIHsKLQkJbmV0aWZfY2Fycmllcl9vbihicC0+ZGV2KTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzIE5JQyBMaW5rIGlzIFVwLCAiLCBicC0+ZGV2LT5uYW1lKTsKLQotCQlwcmludGsoIiVkIE1icHMgIiwgYnAtPmxpbmVfc3BlZWQpOwotCi0JCWlmIChicC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJcHJpbnRrKCJmdWxsIGR1cGxleCIpOwotCQllbHNlCi0JCQlwcmludGsoImhhbGYgZHVwbGV4Iik7Ci0KLQkJaWYgKGJwLT5mbG93X2N0cmwpIHsKLQkJCWlmIChicC0+Zmxvd19jdHJsICYgRkxPV19DVFJMX1JYKSB7Ci0JCQkJcHJpbnRrKCIsIHJlY2VpdmUgIik7Ci0JCQkJaWYgKGJwLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfVFgpCi0JCQkJCXByaW50aygiJiB0cmFuc21pdCAiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKCIsIHRyYW5zbWl0ICIpOwotCQkJfQotCQkJcHJpbnRrKCJmbG93IGNvbnRyb2wgT04iKTsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0KLQl9IGVsc2UgeyAvKiBsaW5rX2Rvd24gKi8KLQkJbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlcyBOSUMgTGluayBpcyBEb3duXG4iLCBicC0+ZGV2LT5uYW1lKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfdXAoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCi0JLyogUEJGIC0gbGluayB1cCAqLwotCWJueDJ4X3BiZl91cGRhdGUoYnApOwotCi0JLyogZGlzYWJsZSBkcmFpbiAqLwotCU5JR19XUihOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArIHBvcnQqNCwgMCk7Ci0KLQkvKiB1cGRhdGUgc2hhcmVkIG1lbW9yeSAqLwotCWJueDJ4X3VwZGF0ZV9tbmcoYnApOwotCi0JLyogaW5kaWNhdGUgbGluayB1cCAqLwotCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfbGlua19kb3duKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQotCS8qIG5vdGlmeSBzdGF0cyAqLwotCWlmIChicC0+c3RhdHNfc3RhdGUgIT0gU1RBVFNfU1RBVEVfRElTQUJMRSkgewotCQlicC0+c3RhdHNfc3RhdGUgPSBTVEFUU19TVEFURV9TVE9QOwotCQlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0c19zdGF0ZSAtIFNUT1BcbiIpOwotCX0KLQotCS8qIGluZGljYXRlIG5vIG1hYyBhY3RpdmUgKi8KLQlicC0+cGh5X2ZsYWdzICY9IH4oUEhZX0JNQUNfRkxBRyB8IFBIWV9FTUFDX0ZMQUcpOwotCi0JLyogdXBkYXRlIHNoYXJlZCBtZW1vcnkgKi8KLQlibngyeF91cGRhdGVfbW5nKGJwKTsKLQotCS8qIGFjdGl2YXRlIG5pZyBkcmFpbiAqLwotCU5JR19XUihOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArIHBvcnQqNCwgMSk7Ci0KLQkvKiByZXNldCBCaWdNYWMgKi8KLQlibngyeF9ibWFjX3J4X2Rpc2FibGUoYnApOwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCi0JICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOwotCi0JLyogaW5kaWNhdGUgbGluayBkb3duICovCi0JYm54MnhfbGlua19yZXBvcnQoYnApOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9pbml0X21hY19zdGF0cyhzdHJ1Y3QgYm54MnggKmJwKTsKLQotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBsaW5rIGludGVycnVwdCAqLwotc3RhdGljIHZvaWQgYm54MnhfbGlua191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCWludCBpOwotCXUzMiBncF9zdGF0dXM7Ci0JaW50IGxpbmtfMTBnOwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJwb3J0ICV4LCAlcywgaW50X3N0YXR1cyAweCV4LCIKLQkgICAiIGludF9tYXNrIDB4JXgsIHNhdmVkX21hc2sgMHgleCwgTUlfSU5UICV4LCBTRVJERVNfTElOSyAleCwiCi0JICAgIiAxMEcgJXgsIFhHWFNfTElOSyAleFxuIiwgcG9ydCwKLQkgICAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpPyAiWEdYUyI6IlNlckRlcyIsCi0JICAgUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpLAotCSAgIFJFR19SRChicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCksIGJwLT5uaWdfbWFzaywKLQkgICBSRUdfUkQoYnAsIE5JR19SRUdfRU1BQzBfU1RBVFVTX01JU0NfTUlfSU5UICsgcG9ydCoweDE4KSwKLQkgICBSRUdfUkQoYnAsIE5JR19SRUdfU0VSREVTMF9TVEFUVVNfTElOS19TVEFUVVMgKyBwb3J0KjB4M2MpLAotCSAgIFJFR19SRChicCwgTklHX1JFR19YR1hTMF9TVEFUVVNfTElOSzEwRyArIHBvcnQqMHg2OCksCi0JICAgUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX1NUQVRVU19MSU5LX1NUQVRVUyArIHBvcnQqMHg2OCkKLQkpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19HUF9TVEFUVVMpOwotCS8qIGF2b2lkIGZhc3QgdG9nZ2xpbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQltc2xlZXAoMTApOwotCQlibngyeF9tZGlvMjJfcmVhZChicCwgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzEsCi0JCQkJICAmZ3Bfc3RhdHVzKTsKLQl9Ci0KLQlibngyeF9saW5rX3NldHRpbmdzX3N0YXR1cyhicCwgZ3Bfc3RhdHVzKTsKLQotCS8qIGFueXRoaW5nIDEwIGFuZCBvdmVyIHVzZXMgdGhlIGJtYWMgKi8KLQlsaW5rXzEwZyA9ICgoYnAtPmxpbmVfc3BlZWQgPj0gU1BFRURfMTAwMDApICYmCi0JCSAgICAoYnAtPmxpbmVfc3BlZWQgPD0gU1BFRURfMTYwMDApKTsKLQotCWJueDJ4X2xpbmtfaW50X2FjayhicCwgbGlua18xMGcpOwotCi0JLyogbGluayBpcyB1cCBvbmx5IGlmIGJvdGggbG9jYWwgcGh5IGFuZCBleHRlcm5hbCBwaHkgYXJlIHVwICovCi0JYnAtPmxpbmtfdXAgPSAoYnAtPnBoeV9saW5rX3VwICYmIGJueDJ4X2V4dF9waHlfaXNfbGlua191cChicCkpOwotCWlmIChicC0+bGlua191cCkgewotCQlpZiAobGlua18xMGcpIHsKLQkJCWJueDJ4X2JtYWNfZW5hYmxlKGJwLCAwKTsKLQkJCWJueDJ4X2xlZHNfc2V0KGJwLCBTUEVFRF8xMDAwMCk7Ci0KLQkJfSBlbHNlIHsKLQkJCWJueDJ4X2VtYWNfZW5hYmxlKGJwKTsKLQkJCWJueDJ4X2VtYWNfcHJvZ3JhbShicCk7Ci0KLQkJCS8qIEFOIGNvbXBsZXRlPyAqLwotCQkJaWYgKGdwX3N0YXR1cyAmIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSkgewotCQkJCWlmICghKGJwLT5waHlfZmxhZ3MgJiBQSFlfU0dNSUlfRkxBRykpCi0JCQkJCWJueDJ4X3NldF9zZ21paV90eF9kcml2ZXIoYnApOwotCQkJfQotCQl9Ci0JCWJueDJ4X2xpbmtfdXAoYnApOwotCi0JfSBlbHNlIHsgLyogbGluayBkb3duICovCi0JCWJueDJ4X2xlZHNfdW5zZXQoYnApOwotCQlibngyeF9saW5rX2Rvd24oYnApOwotCX0KLQotCWJueDJ4X2luaXRfbWFjX3N0YXRzKGJwKTsKLX0KLQotLyoKLSAqIEluaXQgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfYWVyX21tZChzdHJ1Y3QgYm54MnggKmJwKQotewotCXUxNiBvZmZzZXQgPSAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpID8KLQkJCQkJKGJwLT5waHlfYWRkciArIGJwLT5zZXJfbGFuZSkgOiAwOwotCi0JTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfQUVSX0JMT0NLKTsKLQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fQUVSX0JMT0NLX0FFUl9SRUcsIDB4MzgwMCArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9tYXN0ZXJfbG4oc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgbmV3X21hc3Rlcl9sbjsKLQotCS8qIHNldCB0aGUgbWFzdGVyX2xuIGZvciBBTiAqLwotCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syKTsKLQlibngyeF9tZGlvMjJfcmVhZChicCwgTURJT19YR1hTX0JMT0NLMl9URVNUX01PREVfTEFORSwKLQkJCSAgJm5ld19tYXN0ZXJfbG4pOwotCWJueDJ4X21kaW8yMl93cml0ZShicCwgTURJT19YR1hTX0JMT0NLMl9URVNUX01PREVfTEFORSwKLQkJCSAgIChuZXdfbWFzdGVyX2xuIHwgYnAtPnNlcl9sYW5lKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3Jlc2V0X3VuaWNvcmUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgbWlpX2NvbnRyb2w7Ci0JaW50IGk7Ci0KLQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCk7Ci0JYm54MnhfbWRpbzIyX3JlYWQoYnAsIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsICZtaWlfY29udHJvbCk7Ci0JLyogcmVzZXQgdGhlIHVuaWNvcmUgKi8KLQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkgICAobWlpX2NvbnRyb2wgfCBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTRVQpKTsKLQotCS8qIHdhaXQgZm9yIHRoZSByZXNldCB0byBzZWxmIGNsZWFyICovCi0JZm9yIChpID0gMDsgaSA8IE1ESU9fQUNDRVNTX1RJTUVPVVQ7IGkrKykgewotCQl1ZGVsYXkoNSk7Ci0KLQkJLyogdGhlIHJlc2V0IGVyYXNlZCB0aGUgcHJldmlvdXMgYmFuayB2YWx1ZSAqLwotCQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCk7Ci0JCWJueDJ4X21kaW8yMl9yZWFkKGJwLCBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJCSAgJm1paV9jb250cm9sKTsKLQotCQlpZiAoIShtaWlfY29udHJvbCAmIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNFVCkpIHsKLQkJCXVkZWxheSg1KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCUJOWDJYX0VSUigiQlVHISAlcyAoMHgleCkgaXMgc3RpbGwgaW4gcmVzZXQhXG4iLAotCQkgIChicC0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRyk/ICJYR1hTIjoiU2VyRGVzIiwKLQkJICBicC0+cGh5X2FkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfc3dhcF9sYW5lcyhzdHJ1Y3QgYm54MnggKmJwKQotewotCS8qIEVhY2ggdHdvIGJpdHMgcmVwcmVzZW50cyBhIGxhbmUgbnVtYmVyOgotCSAgIE5vIHN3YXAgaXMgMDEyMyA9PiAweDFiIG5vIG5lZWQgdG8gZW5hYmxlIHRoZSBzd2FwICovCi0KLQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMik7Ci0JaWYgKGJwLT5yeF9sYW5lX3N3YXAgIT0gMHgxYikgewotCQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUCwKLQkJCQkgICAoYnAtPnJ4X2xhbmVfc3dhcCB8Ci0JCQkJICAgIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUF9FTkFCTEUgfAotCQkJCSAgIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUF9GT1JDRV9FTkFCTEUpKTsKLQl9IGVsc2UgewotCQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUCwgMCk7Ci0JfQotCi0JaWYgKGJwLT50eF9sYW5lX3N3YXAgIT0gMHgxYikgewotCQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fWEdYU19CTE9DSzJfVFhfTE5fU1dBUCwKLQkJCQkgICAoYnAtPnR4X2xhbmVfc3dhcCB8Ci0JCQkJICAgIE1ESU9fWEdYU19CTE9DSzJfVFhfTE5fU1dBUF9FTkFCTEUpKTsKLQl9IGVsc2UgewotCQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fWEdYU19CTE9DSzJfVFhfTE5fU1dBUCwgMCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfcGFyYWxsZWxfZGV0ZWN0aW9uKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIGNvbnRyb2wyOwotCi0JTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwpOwotCWJueDJ4X21kaW8yMl9yZWFkKGJwLCBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDIsCi0JCQkgICZjb250cm9sMik7Ci0KLQlpZiAoYnAtPmF1dG9uZWcgJiBBVVRPTkVHX1BBUkFMTEVMKSB7Ci0JCWNvbnRyb2wyIHw9IE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMl9QUkxfRFRfRU47Ci0JfSBlbHNlIHsKLQkJY29udHJvbDIgJj0gfk1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMl9QUkxfRFRfRU47Ci0JfQotCWJueDJ4X21kaW8yMl93cml0ZShicCwgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wyLAotCQkJICAgY29udHJvbDIpOwotCi0JaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiWEdYU1xuIik7Ci0JCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LXzEwR19QQVJBTExFTF9ERVRFQ1QpOwotCi0JCWJueDJ4X21kaW8yMl93cml0ZShicCwKLQkJCQlNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOSywKLQkJCSAgICAgICBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOS19DTlQpOwotCi0JCWJueDJ4X21kaW8yMl9yZWFkKGJwLAotCQkJCU1ESU9fMTBHX1BBUkFMTEVMX0RFVEVDVF9QQVJfREVUXzEwR19DT05UUk9MLAotCQkJCSZjb250cm9sMik7Ci0KLQkJaWYgKGJwLT5hdXRvbmVnICYgQVVUT05FR19QQVJBTExFTCkgewotCQkJY29udHJvbDIgfD0KLQkJICAgIE1ESU9fMTBHX1BBUkFMTEVMX0RFVEVDVF9QQVJfREVUXzEwR19DT05UUk9MX1BBUkRFVDEwR19FTjsKLQkJfSBlbHNlIHsKLQkJCWNvbnRyb2wyICY9Ci0JCSAgIH5NRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfQ09OVFJPTF9QQVJERVQxMEdfRU47Ci0JCX0KLQkJYm54MnhfbWRpbzIyX3dyaXRlKGJwLAotCQkJCU1ESU9fMTBHX1BBUkFMTEVMX0RFVEVDVF9QQVJfREVUXzEwR19DT05UUk9MLAotCQkJCWNvbnRyb2wyKTsKLQotCQkvKiBEaXNhYmxlIHBhcmFsbGVsIGRldGVjdGlvbiBvZiBIaUcgKi8KLQkJTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfWEdYU19CTE9DSzIpOwotCQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fWEdYU19CTE9DSzJfVU5JQ09SRV9NT0RFXzEwRywKLQkJCQlNRElPX1hHWFNfQkxPQ0syX1VOSUNPUkVfTU9ERV8xMEdfQ1g0X1hHWFMgfAotCQkJCU1ESU9fWEdYU19CTE9DSzJfVU5JQ09SRV9NT0RFXzEwR19ISUdJR19YR1hTKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9hdXRvbmVnKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIHJlZ192YWw7Ci0KLQkvKiBDTDM3IEF1dG9uZWcgKi8KLQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCk7Ci0JYm54MnhfbWRpbzIyX3JlYWQoYnAsIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsICZyZWdfdmFsKTsKLQlpZiAoKGJwLT5yZXFfYXV0b25lZyAmIEFVVE9ORUdfU1BFRUQpICYmCi0JICAgIChicC0+YXV0b25lZyAmIEFVVE9ORUdfQ0wzNykpIHsKLQkJLyogQ0wzNyBBdXRvbmVnIEVuYWJsZWQgKi8KLQkJcmVnX3ZhbCB8PSBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU47Ci0JfSBlbHNlIHsKLQkJLyogQ0wzNyBBdXRvbmVnIERpc2FibGVkICovCi0JCXJlZ192YWwgJj0gfihNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4gfAotCQkJICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTVEFSVF9BTik7Ci0JfQotCWJueDJ4X21kaW8yMl93cml0ZShicCwgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwgcmVnX3ZhbCk7Ci0KLQkvKiBFbmFibGUvRGlzYWJsZSBBdXRvZGV0ZWN0aW9uICovCi0JTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwpOwotCWJueDJ4X21kaW8yMl9yZWFkKGJwLCBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDEsICZyZWdfdmFsKTsKLQlyZWdfdmFsICY9IH5NRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfU0lHTkFMX0RFVEVDVF9FTjsKLQotCWlmICgoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19TUEVFRCkgJiYKLQkgICAgKGJwLT5hdXRvbmVnICYgQVVUT05FR19TR01JSV9GSUJFUl9BVVRPREVUKSkgewotCQlyZWdfdmFsIHw9IE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9BVVRPREVUOwotCX0gZWxzZSB7Ci0JCXJlZ192YWwgJj0gfk1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9BVVRPREVUOwotCX0KLQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMSwgcmVnX3ZhbCk7Ci0KLQkvKiBFbmFibGUgVGV0b25JSSBhbmQgQkFNIGF1dG9uZWcgKi8KLQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19CQU1fTkVYVF9QQUdFKTsKLQlibngyeF9tZGlvMjJfcmVhZChicCwgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTCwKLQkJCSAgJnJlZ192YWwpOwotCWlmICgoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19TUEVFRCkgJiYKLQkgICAgKGJwLT5hdXRvbmVnICYgQVVUT05FR19DTDM3KSAmJiAoYnAtPmF1dG9uZWcgJiBBVVRPTkVHX0JBTSkpIHsKLQkJLyogRW5hYmxlIEJBTSBhbmVnIE1vZGUgYW5kIFRldG9uSUkgYW5lZyBNb2RlICovCi0JCXJlZ192YWwgfD0gKE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfQkFNX01PREUgfAotCQkJICAgIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfVEVUT05fQU4pOwotCX0gZWxzZSB7Ci0JCS8qIFRldG9uSUkgYW5kIEJBTSBBdXRvbmVnIERpc2FibGVkICovCi0JCXJlZ192YWwgJj0gfihNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMX0JBTV9NT0RFIHwKLQkJCSAgICAgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTF9URVRPTl9BTik7Ci0JfQotCWJueDJ4X21kaW8yMl93cml0ZShicCwgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTCwKLQkJCSAgIHJlZ192YWwpOwotCi0JLyogRW5hYmxlIENsYXVzZSA3MyBBbmVnICovCi0JaWYgKChicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX1NQRUVEKSAmJgotCSAgICAoYnAtPmF1dG9uZWcgJiBBVVRPTkVHX0NMNzMpKSB7Ci0JCS8qIEVuYWJsZSBCQU0gU3RhdGlvbiBNYW5hZ2VyICovCi0JCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwKTsKLQkJYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxLAotCQkJCSAgIChNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9FTiB8Ci0JCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9TVEFUSU9OX01OR1JfRU4gfAotCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fTlBfQUZURVJfQlBfRU4pKTsKLQotCQkvKiBNZXJnZSBDTDczIGFuZCBDTDM3IGFuZWcgcmVzb2x1dGlvbiAqLwotCQlibngyeF9tZGlvMjJfcmVhZChicCwgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMywKLQkJCQkgICZyZWdfdmFsKTsKLQkJYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwzLAotCQkJCSAgIChyZWdfdmFsIHwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDNfVVNFX0NMNzNfSENEX01SKSk7Ci0KLQkJLyogU2V0IHRoZSBDTDczIEFOIHNwZWVkICovCi0JCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxKTsKLQkJYm54MnhfbWRpbzIyX3JlYWQoYnAsIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMiwgJnJlZ192YWwpOwotCQkvKiBJbiB0aGUgU2VyRGVzIHdlIHN1cHBvcnQgb25seSB0aGUgMUcuCi0JCSAgIEluIHRoZSBYR1hTIHdlIHN1cHBvcnQgdGhlIDEwRyBLWDQKLQkJICAgYnV0IHdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCB0aGUgS1IgKi8KLQkJaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFNcbiIpOwotCQkJLyogMTBHIEtYNCAqLwotCQkJcmVnX3ZhbCB8PSBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMEdfS1g0OwotCQl9IGVsc2UgewotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXNcbiIpOwotCQkJLyogMTAwME0gS1ggKi8KLQkJCXJlZ192YWwgfD0gTURJT19DTDczX0lFRUVCMV9BTl9BRFYyX0FEVlJfMTAwME1fS1g7Ci0JCX0KLQkJYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjIsIHJlZ192YWwpOwotCi0JCS8qIENMNzMgQXV0b25lZyBFbmFibGVkICovCi0JCXJlZ192YWwgPSBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTjsKLQl9IGVsc2UgewotCQkvKiBDTDczIEF1dG9uZWcgRGlzYWJsZWQgKi8KLQkJcmVnX3ZhbCA9IDA7Ci0JfQotCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwKTsKLQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLCByZWdfdmFsKTsKLX0KLQotLyogcHJvZ3JhbSBTZXJEZXMsIGZvcmNlZCBzcGVlZCAqLwotc3RhdGljIHZvaWQgYm54MnhfcHJvZ3JhbV9zZXJkZXMoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgcmVnX3ZhbDsKLQotCS8qIHByb2dyYW0gZHVwbGV4LCBkaXNhYmxlIGF1dG9uZWcgKi8KLQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCk7Ci0JYm54MnhfbWRpbzIyX3JlYWQoYnAsIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsICZyZWdfdmFsKTsKLQlyZWdfdmFsICY9IH4oTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0ZVTExfRFVQTEVYIHwKLQkJICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4pOwotCWlmIChicC0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJcmVnX3ZhbCB8PSBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfRlVMTF9EVVBMRVg7Ci0JYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLCByZWdfdmFsKTsKLQotCS8qIHByb2dyYW0gc3BlZWQKLQkgICAtIG5lZWRlZCBvbmx5IGlmIHRoZSBzcGVlZCBpcyBncmVhdGVyIHRoYW4gMUcgKDIuNUcgb3IgMTBHKSAqLwotCWlmIChicC0+cmVxX2xpbmVfc3BlZWQgPiBTUEVFRF8xMDAwKSB7Ci0JCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMKTsKLQkJYm54MnhfbWRpbzIyX3JlYWQoYnAsIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzEsICZyZWdfdmFsKTsKLQkJLyogY2xlYXJpbmcgdGhlIHNwZWVkIHZhbHVlIGJlZm9yZSBzZXR0aW5nIHRoZSByaWdodCBzcGVlZCAqLwotCQlyZWdfdmFsICY9IH5NRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEX01BU0s7Ci0JCXJlZ192YWwgfD0gKE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfUkVGQ0xLX1NFTF8xNTZfMjVNIHwKLQkJCSAgICBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEX1NFTCk7Ci0JCWlmIChicC0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMDApCi0JCQlyZWdfdmFsIHw9Ci0JCQkJTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF8xMEdfQ1g0OwotCQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzEsIHJlZ192YWwpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0X2JyY21fY2wzN19hZHZlcnRpc21lbnQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsID0gMDsKLQotCS8qIGNvbmZpZ3VyZSB0aGUgNDggYml0cyBmb3IgQkFNIEFOICovCi0JTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfT1ZFUl8xRyk7Ci0KLQkvKiBzZXQgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovCi0JaWYgKGJwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMjUwMGJhc2VYX0Z1bGwpCi0JCXZhbCB8PSBNRElPX09WRVJfMUdfVVAxXzJfNUc7Ci0JaWYgKGJwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsKQotCQl2YWwgfD0gTURJT19PVkVSXzFHX1VQMV8xMEc7Ci0JYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX09WRVJfMUdfVVAxLCB2YWwpOwotCi0JYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX09WRVJfMUdfVVAzLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0X2llZWVfYW5lZ19hZHZlcnRpc21lbnQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgYW5fYWR2OwotCi0JLyogZm9yIEFOLCB3ZSBhcmUgYWx3YXlzIHB1Ymxpc2hpbmcgZnVsbCBkdXBsZXggKi8KLQlhbl9hZHYgPSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9GVUxMX0RVUExFWDsKLQotCS8qIHJlc29sdmUgcGF1c2UgbW9kZSBhbmQgYWR2ZXJ0aXNlbWVudAotCSAqIFBsZWFzZSByZWZlciB0byBUYWJsZSAyOEItMyBvZiB0aGUgODAyLjNhYi0xOTk5IHNwZWMgKi8KLQlpZiAoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19GTE9XX0NUUkwpIHsKLQkJc3dpdGNoIChicC0+cmVxX2Zsb3dfY3RybCkgewotCQljYXNlIEZMT1dfQ1RSTF9BVVRPOgotCQkJaWYgKGJwLT5kZXYtPm10dSA8PSA0NTAwKSB7Ci0JCQkJYW5fYWR2IHw9Ci0JCQkJICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOwotCQkJCWJwLT5hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF9QYXVzZSB8Ci0JCQkJCQkgICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYW5fYWR2IHw9Ci0JCQkgICAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQzsKLQkJCQlicC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGTE9XX0NUUkxfVFg6Ci0JCQlhbl9hZHYgfD0KLQkJCSAgICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDOwotCQkJYnAtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRkxPV19DVFJMX1JYOgotCQkJaWYgKGJwLT5kZXYtPm10dSA8PSA0NTAwKSB7Ci0JCQkJYW5fYWR2IHw9Ci0JCQkJICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOwotCQkJCWJwLT5hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF9QYXVzZSB8Ci0JCQkJCQkgICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYW5fYWR2IHw9Ci0JCQkJICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9OT05FOwotCQkJCWJwLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfUGF1c2UgfAotCQkJCQkJICAgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGTE9XX0NUUkxfQk9USDoKLQkJCWlmIChicC0+ZGV2LT5tdHUgPD0gNDUwMCkgewotCQkJCWFuX2FkdiB8PQotCQkJCSAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USDsKLQkJCQlicC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfUGF1c2UgfAotCQkJCQkJICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7Ci0JCQl9IGVsc2UgewotCQkJCWFuX2FkdiB8PQotCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM7Ci0JCQkJYnAtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgRkxPV19DVFJMX05PTkU6Ci0JCWRlZmF1bHQ6Ci0JCQlhbl9hZHYgfD0gTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfTk9ORTsKLQkJCWJwLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfUGF1c2UgfAotCQkJCQkgICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7IC8qIGZvcmNlZCBtb2RlICovCi0JCXN3aXRjaCAoYnAtPnJlcV9mbG93X2N0cmwpIHsKLQkJY2FzZSBGTE9XX0NUUkxfQVVUTzoKLQkJCURQKE5FVElGX01TR19MSU5LLCAicmVxX2Zsb3dfY3RybCAweCV4IHdoaWxlIgotCQkJCQkgICAiIHJlcV9hdXRvbmVnIDB4JXhcbiIsCi0JCQkgICBicC0+cmVxX2Zsb3dfY3RybCwgYnAtPnJlcV9hdXRvbmVnKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRkxPV19DVFJMX1RYOgotCQkJYW5fYWR2IHw9Ci0JCQkgICAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQzsKLQkJCWJwLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7Ci0JCQlicmVhazsKLQotCQljYXNlIEZMT1dfQ1RSTF9SWDoKLQkJY2FzZSBGTE9XX0NUUkxfQk9USDoKLQkJCWFuX2FkdiB8PSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOwotCQkJYnAtPmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEZMT1dfQ1RSTF9OT05FOgotCQlkZWZhdWx0OgotCQkJYW5fYWR2IHw9IE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX05PTkU7Ci0JCQlicC0+YWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJICAgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCk7Ci0JYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEViwgYW5fYWR2KTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaWYgKGJwLT5hdXRvbmVnICYgQVVUT05FR19DTDczKSB7Ci0JCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBjbGF1c2UgNzMgYW5lZyAqLwotCQl1MzIgYW5fY3RybDsKLQotCQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCk7Ci0JCWJueDJ4X21kaW8yMl9yZWFkKGJwLCBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKLQkJCQkgICZhbl9jdHJsKTsKLQkJYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKLQkJCQkgICAoYW5fY3RybCB8Ci0JCQkJICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOIHwKLQkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9SRVNUQVJUX0FOKSk7Ci0KLQl9IGVsc2UgewotCQkvKiBFbmFibGUgYW5kIHJlc3RhcnQgQkFNL0NMMzcgYW5lZyAqLwotCQl1MzIgbWlpX2NvbnRyb2w7Ci0KLQkJTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTApOwotCQlibngyeF9tZGlvMjJfcmVhZChicCwgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKLQkJCQkgICZtaWlfY29udHJvbCk7Ci0JCWJueDJ4X21kaW8yMl93cml0ZShicCwgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKLQkJCQkgICAobWlpX2NvbnRyb2wgfAotCQkJCSAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4gfAotCQkJCSAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTVEFSVF9BTikpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdGlhbGl6ZV9zZ21paV9wcm9jZXNzKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIGNvbnRyb2wxOwotCi0JLyogaW4gU0dNSUkgbW9kZSwgdGhlIHVuaWNvcmUgaXMgYWx3YXlzIHNsYXZlICovCi0JTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwpOwotCWJueDJ4X21kaW8yMl9yZWFkKGJwLCBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDEsCi0JCQkgICZjb250cm9sMSk7Ci0JY29udHJvbDEgfD0gTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0lOVkVSVF9TSUdOQUxfREVURUNUOwotCS8qIHNldCBzZ21paSBtb2RlIChhbmQgbm90IGZpYmVyKSAqLwotCWNvbnRyb2wxICY9IH4oTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0ZJQkVSX01PREUgfAotCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfQVVUT0RFVCB8Ci0JCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9NU1RSX01PREUpOwotCWJueDJ4X21kaW8yMl93cml0ZShicCwgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxLAotCQkJICAgY29udHJvbDEpOwotCi0JLyogaWYgZm9yY2VkIHNwZWVkICovCi0JaWYgKCEoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19TUEVFRCkpIHsKLQkJLyogc2V0IHNwZWVkLCBkaXNhYmxlIGF1dG9uZWcgKi8KLQkJdTMyIG1paV9jb250cm9sOwotCi0JCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwKTsKLQkJYm54MnhfbWRpbzIyX3JlYWQoYnAsIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkJICAmbWlpX2NvbnRyb2wpOwotCQltaWlfY29udHJvbCAmPSB+KE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8Ci0JCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF9NQVNLIHwKLQkJCQkgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0ZVTExfRFVQTEVYKTsKLQotCQlzd2l0Y2ggKGJwLT5yZXFfbGluZV9zcGVlZCkgewotCQljYXNlIFNQRUVEXzEwMDoKLQkJCW1paV9jb250cm9sIHw9Ci0JCQkJTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF8xMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDAwOgotCQkJbWlpX2NvbnRyb2wgfD0KLQkJCQlNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfTUFOX1NHTUlJX1NQXzEwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJCS8qIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2V0IGZvciAxME0gKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogaW52YWxpZCBzcGVlZCBmb3IgU0dNSUkgKi8KLQkJCURQKE5FVElGX01TR19MSU5LLCAiSW52YWxpZCByZXFfbGluZV9zcGVlZCAweCV4XG4iLAotCQkJICAgYnAtPnJlcV9saW5lX3NwZWVkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogc2V0dGluZyB0aGUgZnVsbCBkdXBsZXggKi8KLQkJaWYgKGJwLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJbWlpX2NvbnRyb2wgfD0KLQkJCQlNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfRlVMTF9EVVBMRVg7Ci0JCWJueDJ4X21kaW8yMl93cml0ZShicCwgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKLQkJCQkgICBtaWlfY29udHJvbCk7Ci0KLQl9IGVsc2UgeyAvKiBBTiBtb2RlICovCi0JCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBBTiAqLwotCQlibngyeF9yZXN0YXJ0X2F1dG9uZWcoYnApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfbGlua19pbnRfZW5hYmxlKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQl1MzIgZXh0X3BoeV90eXBlOwotCXUzMiBtYXNrOwotCi0JLyogc2V0dGluZyB0aGUgc3RhdHVzIHRvIHJlcG9ydCBvbiBsaW5rIHVwCi0JICAgZm9yIGVpdGhlciBYR1hTIG9yIFNlckRlcyAqLwotCWJueDJ4X2JpdHNfZGlzKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCi0JCSAgICAgICAoTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHIHwKLQkJCU5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgfAotCQkJTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTKSk7Ci0KLQlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJbWFzayA9IChOSUdfTUFTS19YR1hTMF9MSU5LMTBHIHwKLQkJCU5JR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTKTsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGVkIFhHWFMgaW50ZXJydXB0XG4iKTsKLQkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnApOwotCQlpZiAoKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkUpICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pKSB7Ci0JCQltYXNrIHw9IE5JR19NQVNLX01JX0lOVDsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxlZCBleHRlcm5hbCBwaHkgaW50XG4iKTsKLQkJfQotCi0JfSBlbHNlIHsgLyogU2VyRGVzICovCi0JCW1hc2sgPSBOSUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTOwotCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWQgU2VyRGVzIGludGVycnVwdFxuIik7Ci0JCWV4dF9waHlfdHlwZSA9IFNFUkRFU19FWFRfUEhZX1RZUEUoYnApOwotCQlpZiAoKGV4dF9waHlfdHlwZSAhPQotCQkJCVBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgotCQkgICAgKGV4dF9waHlfdHlwZSAhPQotCQkJCVBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pKSB7Ci0JCQltYXNrIHw9IE5JR19NQVNLX01JX0lOVDsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxlZCBleHRlcm5hbCBwaHkgaW50XG4iKTsKLQkJfQotCX0KLQlibngyeF9iaXRzX2VuKGJwLAotCQkgICAgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkgICAgICBtYXNrKTsKLQlEUChORVRJRl9NU0dfTElOSywgInBvcnQgJXgsICVzLCBpbnRfc3RhdHVzIDB4JXgsIgotCSAgICIgaW50X21hc2sgMHgleCwgTUlfSU5UICV4LCBTRVJERVNfTElOSyAleCwiCi0JICAgIiAxMEcgJXgsIFhHWFNfTElOSyAleFxuIiwgcG9ydCwKLQkgICAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpPyAiWEdYUyI6IlNlckRlcyIsCi0JICAgUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpLAotCSAgIFJFR19SRChicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCksCi0JICAgUkVHX1JEKGJwLCBOSUdfUkVHX0VNQUMwX1NUQVRVU19NSVNDX01JX0lOVCArIHBvcnQqMHgxOCksCi0JICAgUkVHX1JEKGJwLCBOSUdfUkVHX1NFUkRFUzBfU1RBVFVTX0xJTktfU1RBVFVTICsgcG9ydCoweDNjKSwKLQkgICBSRUdfUkQoYnAsIE5JR19SRUdfWEdYUzBfU1RBVFVTX0xJTksxMEcgKyBwb3J0KjB4NjgpLAotCSAgIFJFR19SRChicCwgTklHX1JFR19YR1hTMF9TVEFUVVNfTElOS19TVEFUVVMgKyBwb3J0KjB4NjgpCi0JKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfYmNtODA3Ml9leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiBleHRfcGh5X2FkZHIgPSAoKGJwLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOwotCXUzMiBmd192ZXIxLCBmd192ZXIyOwotCi0JLyogTmVlZCB0byB3YWl0IDIwMG1zIGFmdGVyIHJlc2V0ICovCi0JbXNsZWVwKDIwMCk7Ci0JLyogQm9vdCBwb3J0IGZyb20gZXh0ZXJuYWwgUk9NCi0JICogU2V0IHNlcl9ib290X2N0bCBiaXQgaW4gdGhlIE1JU0NfQ1RSTDEgcmVnaXN0ZXIKLQkgKi8KLQlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwgZXh0X3BoeV9hZGRyLAotCQkJCUVYVF9QSFlfS1JfUE1BX1BNRF9ERVZBRCwKLQkJCQlFWFRfUEhZX0tSX01JU0NfQ1RSTDEsIDB4MDAwMSk7Ci0KLQkvKiBSZXNldCBpbnRlcm5hbCBtaWNyb3Byb2Nlc3NvciAqLwotCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLCBleHRfcGh5X2FkZHIsCi0JCQkJRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELCBFWFRfUEhZX0tSX0dFTl9DVFJMLAotCQkJCUVYVF9QSFlfS1JfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKLQkvKiBzZXQgbWljcm8gcmVzZXQgPSAwICovCi0JYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsIGV4dF9waHlfYWRkciwKLQkJCQlFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsIEVYVF9QSFlfS1JfR0VOX0NUUkwsCi0JCQkJRVhUX1BIWV9LUl9ST01fTUlDUk9fUkVTRVQpOwotCS8qIFJlc2V0IGludGVybmFsIG1pY3JvcHJvY2Vzc29yICovCi0JYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsIGV4dF9waHlfYWRkciwKLQkJCQlFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsIEVYVF9QSFlfS1JfR0VOX0NUUkwsCi0JCQkJRVhUX1BIWV9LUl9ST01fUkVTRVRfSU5URVJOQUxfTVApOwotCS8qIHdhaXQgZm9yIDEwMG1zIGZvciBjb2RlIGRvd25sb2FkIHZpYSBTUEkgcG9ydCAqLwotCW1zbGVlcCgxMDApOwotCi0JLyogQ2xlYXIgc2VyX2Jvb3RfY3RsIGJpdCAqLwotCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLCBleHRfcGh5X2FkZHIsCi0JCQkJRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELAotCQkJCUVYVF9QSFlfS1JfTUlTQ19DVFJMMSwgMHgwMDAwKTsKLQkvKiBXYWl0IDEwMG1zICovCi0JbXNsZWVwKDEwMCk7Ci0KLQkvKiBQcmludCB0aGUgUEhZIEZXIHZlcnNpb24gKi8KLQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLCBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELAotCQkJICAgICAgIDB4Y2ExOSwgJmZ3X3ZlcjEpOwotCWJueDJ4X21kaW80NV9jdHJsX3JlYWQoYnAsIEdSQ0JBU0VfRU1BQzAsIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsCi0JCQkgICAgICAgMHhjYTFhLCAmZndfdmVyMik7Ci0JRFAoTkVUSUZfTVNHX0xJTkssCi0JICAgIjgwNzIgRlcgdmVyc2lvbiAweCV4OjB4JXhcbiIsIGZ3X3ZlcjEsIGZ3X3ZlcjIpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9iY204MDcyX2ZvcmNlXzEwRyhzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiBleHRfcGh5X2FkZHIgPSAoKGJwLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOwotCi0JLyogRm9yY2UgS1Igb3IgS1ggKi8KLQlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwgZXh0X3BoeV9hZGRyLAotCQkJCUVYVF9QSFlfS1JfUE1BX1BNRF9ERVZBRCwgRVhUX1BIWV9LUl9DVFJMLAotCQkJCTB4MjA0MCk7Ci0JYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsIGV4dF9waHlfYWRkciwKLQkJCQlFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsIEVYVF9QSFlfS1JfQ1RSTDIsCi0JCQkJMHgwMDBiKTsKLQlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwgZXh0X3BoeV9hZGRyLAotCQkJCUVYVF9QSFlfS1JfUE1BX1BNRF9ERVZBRCwgRVhUX1BIWV9LUl9QTURfQ1RSTCwKLQkJCQkweDAwMDApOwotCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLCBleHRfcGh5X2FkZHIsCi0JCQkJRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwgRVhUX1BIWV9LUl9DVFJMLAotCQkJCTB4MDAwMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2V4dF9waHlfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiBleHRfcGh5X3R5cGU7Ci0JdTMyIGV4dF9waHlfYWRkcjsKLQl1MzIgY250OwotCXUzMiBjdHJsOwotCXUzMiB2YWwgPSAwOwotCi0JaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCWV4dF9waHlfYWRkciA9ICgoYnAtPmV4dF9waHlfY29uZmlnICYKLQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7Ci0KLQkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnApOwotCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc29mdCByZXNldCBpcyBvZmYgKGV4cGVjdCBmb3IgdGhlIDgwNzI6Ci0JCSAqIGR1ZSB0byB0aGUgbG9jaywgaXQgd2lsbCBiZSBkb25lIGluc2lkZSB0aGUgc3BlY2lmaWMKLQkJICogaGFuZGxpbmcpCi0JCSAqLwotCQlpZiAoKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkUpICYmCi0JCSAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpKSB7Ci0JCQkvKiBXYWl0IGZvciBzb2Z0IHJlc2V0IHRvIGdldCBjbGVhcmVkIHVwdG8gMSBzZWMgKi8KLQkJCWZvciAoY250ID0gMDsgY250IDwgMTAwMDsgY250KyspIHsKLQkJCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkJICBFWFRfUEhZX09QVF9DTlRMLCAmY3RybCk7Ci0JCQkJaWYgKCEoY3RybCAmICgxPDwxNSkpKQotCQkJCQlicmVhazsKLQkJCQltc2xlZXAoMSk7Ci0JCQl9Ci0JCQlEUChORVRJRl9NU0dfTElOSywKLQkJCSAgICJjb250cm9sIHJlZyAweCV4IChhZnRlciAlZCBtcylcbiIsIGN0cmwsIGNudCk7Ci0JCX0KLQotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyBEaXJlY3RcbiIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDVcbiIpOwotCi0JCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkgICAgRVhUX1BIWV9PUFRfUE1EX01JU0NfQ05UTCwKLQkJCQkJICAgIDB4ODI4OCk7Ci0JCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkgICAgRVhUX1BIWV9PUFRfUEhZX0lERU5USUZJRVIsCi0JCQkJCSAgICAweDdmYmYpOwotCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKLQkJCQkJICAgIEVYVF9QSFlfT1BUX0NNVV9QTExfQllQQVNTLAotCQkJCQkgICAgMHgwMTAwKTsKLQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJICAgIEVYVF9QSFlfT1BUX1dJU19ERVZBRCwKLQkJCQkJICAgIEVYVF9QSFlfT1BUX0xBU0lfQ05UTCwgMHgxKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKLQotCQkJaWYgKCEoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19TUEVFRCkpIHsKLQkJCQkvKiBGb3JjZSBzcGVlZCAqLwotCQkJCWlmIChicC0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMDApIHsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCSAgICJYR1hTIDg3MDYgZm9yY2UgMTBHYnBzXG4iKTsKLQkJCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkJRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKLQkJCQkJCUVYVF9QSFlfT1BUX1BNRF9ESUdJVEFMX0NOVCwKLQkJCQkJCTB4NDAwKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBGb3JjZSAxR2JwcyAqLwotCQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJICAgIlhHWFMgODcwNiBmb3JjZSAxR2Jwc1xuIik7Ci0KLQkJCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkJRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKLQkJCQkJCUVYVF9QSFlfT1BUX0NOVEwsCi0JCQkJCQkweDAwNDApOwotCi0JCQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJCUVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCi0JCQkJCQlFWFRfUEhZX09QVF9DTlRMMiwKLQkJCQkJCTB4MDAwRCk7Ci0JCQkJfQotCi0JCQkJLyogRW5hYmxlIExBU0kgKi8KLQkJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKLQkJCQkJCSAgICBFWFRfUEhZX09QVF9MQVNJX0NOVEwsCi0JCQkJCQkgICAgMHgxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogQVVUT05FRyAqLwotCQkJCS8qIEFsbG93IENMMzcgdGhyb3VnaCBDTDczICovCi0JCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYgQXV0b05lZ1xuIik7Ci0JCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgIEVYVF9QSFlfQVVUT19ORUdfREVWQUQsCi0JCQkJCQkgICAgRVhUX1BIWV9PUFRfQU5fQ0wzN19DTDczLAotCQkJCQkJICAgIDB4MDQwYyk7Ci0KLQkJCQkvKiBFbmFibGUgRnVsbC1EdXBsZXggYWR2ZXJ0aXNtZW50IG9uIENMMzcgKi8KLQkJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgRVhUX1BIWV9BVVRPX05FR19ERVZBRCwKLQkJCQkJCSAgICBFWFRfUEhZX09QVF9BTl9DTDM3X0ZELAotCQkJCQkJICAgIDB4MDAyMCk7Ci0JCQkJLyogRW5hYmxlIENMMzcgQU4gKi8KLQkJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgRVhUX1BIWV9BVVRPX05FR19ERVZBRCwKLQkJCQkJCSAgICBFWFRfUEhZX09QVF9BTl9DTDM3X0FOLAotCQkJCQkJICAgIDB4MTAwMCk7Ci0JCQkJLyogQWR2ZXJ0aXNlIDEwRy8xRyBzdXBwb3J0ICovCi0JCQkJaWYgKGJwLT5hZHZlcnRpc2luZyAmCi0JCQkJICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCi0JCQkJCXZhbCA9ICgxPDw1KTsKLQkJCQlpZiAoYnAtPmFkdmVydGlzaW5nICYKLQkJCQkgICAgQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwpCi0JCQkJCXZhbCB8PSAoMTw8Nyk7Ci0KLQkJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgRVhUX1BIWV9BVVRPX05FR19ERVZBRCwKLQkJCQkJCSAgICBFWFRfUEhZX09QVF9BTl9BRFYsIHZhbCk7Ci0JCQkJLyogRW5hYmxlIExBU0kgKi8KLQkJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKLQkJCQkJCSAgICBFWFRfUEhZX09QVF9MQVNJX0NOVEwsCi0JCQkJCQkgICAgMHgxKTsKLQotCQkJCS8qIEVuYWJsZSBjbGF1c2UgNzMgQU4gKi8KLQkJCQlibngyeF9tZGlvNDVfd3JpdGUoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgIEVYVF9QSFlfQVVUT19ORUdfREVWQUQsCi0JCQkJCQkgICBFWFRfUEhZX09QVF9DTlRMLAotCQkJCQkJICAgMHgxMjAwKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKLQkJCWJueDJ4X2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfODA3Ml9NRElPKTsKLQkJCS8qIFdhaXQgZm9yIHNvZnQgcmVzZXQgdG8gZ2V0IGNsZWFyZWQgdXB0byAxIHNlYyAqLwotCQkJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDAwOyBjbnQrKykgewotCQkJCWJueDJ4X21kaW80NV9jdHJsX3JlYWQoYnAsIEdSQ0JBU0VfRU1BQzAsCi0JCQkJCQlleHRfcGh5X2FkZHIsCi0JCQkJCQlFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkJRVhUX1BIWV9PUFRfQ05UTCwgJmN0cmwpOwotCQkJCWlmICghKGN0cmwgJiAoMTw8MTUpKSkKLQkJCQkJYnJlYWs7Ci0JCQkJbXNsZWVwKDEpOwotCQkJfQotCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkgICAiODA3MiBjb250cm9sIHJlZyAweCV4IChhZnRlciAlZCBtcylcbiIsCi0JCQkgICBjdHJsLCBjbnQpOwotCi0JCQlibngyeF9iY204MDcyX2V4dGVybmFsX3JvbV9ib290KGJwKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiRmluc2hlZCBsb2FkaW5nIDgwNzIgS1IgUk9NXG4iKTsKLQotCQkJLyogZW5hYmxlIExBU0kgKi8KLQkJCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLAotCQkJCQkJZXh0X3BoeV9hZGRyLAotCQkJCQkJRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELAotCQkJCQkJMHg5MDAwLCAweDA0MDApOwotCQkJYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsCi0JCQkJCQlleHRfcGh5X2FkZHIsCi0JCQkJCQlFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsCi0JCQkJCQlFWFRfUEhZX0tSX0xBU0lfQ05UTCwgMHgwMDA0KTsKLQotCQkJLyogSWYgdGhpcyBpcyBmb3JjZWQgc3BlZWQsIHNldCB0byBLUiBvciBLWAotCQkJICogKGFsbCBvdGhlciBhcmUgbm90IHN1cHBvcnRlZCkKLQkJCSAqLwotCQkJaWYgKCEoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19TUEVFRCkpIHsKLQkJCQlpZiAoYnAtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDAwKSB7Ci0JCQkJCWJueDJ4X2JjbTgwNzJfZm9yY2VfMTBHKGJwKTsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCSAgICJGb3JjZWQgc3BlZWQgMTBHIG9uIDgwNzJcbiIpOwotCQkJCQkvKiB1bmxvY2sgKi8KLQkJCQkJYm54MnhfaHdfdW5sb2NrKGJwLAotCQkJCQkJSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOwotCQkJCQlicmVhazsKLQkJCQl9IGVsc2UKLQkJCQkJdmFsID0gKDE8PDUpOwotCQkJfSBlbHNlIHsKLQotCQkJCS8qIEFkdmVydGlzZSAxMEcvMUcgc3VwcG9ydCAqLwotCQkJCWlmIChicC0+YWR2ZXJ0aXNpbmcgJgotCQkJCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKLQkJCQkJdmFsID0gKDE8PDUpOwotCQkJCWlmIChicC0+YWR2ZXJ0aXNpbmcgJgotCQkJCQkJQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwpCi0JCQkJCXZhbCB8PSAoMTw8Nyk7Ci0JCQl9Ci0JCQlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwKLQkJCQkJZXh0X3BoeV9hZGRyLAotCQkJCQlFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFELAotCQkJCQkweDExLCB2YWwpOwotCQkJLyogQWRkIHN1cHBvcnQgZm9yIENMMzcgKCBwYXNzaXZlIG1vZGUgKSBJICovCi0JCQlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwKLQkJCQkJCWV4dF9waHlfYWRkciwKLQkJCQkJCUVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQsCi0JCQkJCQkweDgzNzAsIDB4MDQwYyk7Ci0JCQkvKiBBZGQgc3VwcG9ydCBmb3IgQ0wzNyAoIHBhc3NpdmUgbW9kZSApIElJICovCi0JCQlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwKLQkJCQkJCWV4dF9waHlfYWRkciwKLQkJCQkJCUVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQsCi0JCQkJCQkweGZmZTQsIDB4MjApOwotCQkJLyogQWRkIHN1cHBvcnQgZm9yIENMMzcgKCBwYXNzaXZlIG1vZGUgKSBJSUkgKi8KLQkJCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLAotCQkJCQkJZXh0X3BoeV9hZGRyLAotCQkJCQkJRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKLQkJCQkJCTB4ZmZlMCwgMHgxMDAwKTsKLQkJCS8qIFJlc3RhcnQgYXV0b25lZyAqLwotCQkJbXNsZWVwKDUwMCk7Ci0JCQlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwKLQkJCQkJZXh0X3BoeV9hZGRyLAotCQkJCQlFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFELAotCQkJCQlFWFRfUEhZX0tSX0NUUkwsIDB4MTIwMCk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjgwNzIgQXV0b25lZyBSZXN0YXJ0OiAiCi0JCQkgICAiMUcgJXNzdXBwb3J0ZWQgIDEwRyAlc3N1cHBvcnRlZFxuIiwKLQkJCSAgICh2YWwgJiAoMTw8NSkpID8gIiIgOiAibm90ICIsCi0JCQkgICAodmFsICYgKDE8PDcpKSA/ICIiIDogIm5vdCAiKTsKLQotCQkJLyogdW5sb2NrICovCi0JCQlibngyeF9od191bmxvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfODA3Ml9NRElPKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJICAgIlNldHRpbmcgdGhlIFNGWDcxMDEgTEFTSSBpbmRpY2F0aW9uXG4iKTsKLQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJICAgIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCi0JCQkJCSAgICBFWFRfUEhZX09QVF9MQVNJX0NOVEwsIDB4MSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywKLQkJCSAgICJTZXR0aW5nIHRoZSBTRlg3MTAxIExFRCB0byBibGluayBvbiB0cmFmZmljXG4iKTsKLQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKLQkJCQkJICAgIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCi0JCQkJCSAgICAweEMwMDcsICgxPDwzKSk7Ci0KLQkJCS8qIHJlYWQgbW9kaWZ5IHdyaXRlIHBhdXNlIGFkdmVydGl6aW5nICovCi0JCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkgIEVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQsCi0JCQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19BRFZFUlQsICZ2YWwpOwotCQkJdmFsICY9IH5FWFRfUEhZX0tSX0FVVE9fTkVHX0FEVkVSVF9QQVVTRV9CT1RIOwotCQkJLyogUGxlYXNlIHJlZmVyIHRvIFRhYmxlIDI4Qi0zIG9mIDgwMi4zYWItMTk5OSBzcGVjLiAqLwotCQkJaWYgKGJwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfUGF1c2UpCi0JCQkJdmFsIHw9IEVYVF9QSFlfS1JfQVVUT19ORUdfQURWRVJUX1BBVVNFOwotCi0JCQlpZiAoYnAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKSB7Ci0JCQkJdmFsIHw9Ci0JCQkJIEVYVF9QSFlfS1JfQVVUT19ORUdfQURWRVJUX1BBVVNFX0FTWU1NRVRSSUM7Ci0JCQl9Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlNGWDcxMDEgQU4gYWR2ZXJ0aXplIDB4JXhcbiIsIHZhbCk7Ci0JCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICBFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFELAotCQkJCQkgICAgRVhUX1BIWV9LUl9BVVRPX05FR19BRFZFUlQsIHZhbCk7Ci0JCQkvKiBSZXN0YXJ0IGF1dG9uZWcgKi8KLQkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKLQkJCQkJICBFWFRfUEhZX0tSX0NUUkwsICZ2YWwpOwotCQkJdmFsIHw9IDB4MjAwOwotCQkJYm54MnhfbWRpbzQ1X3dyaXRlKGJwLCBleHRfcGh5X2FkZHIsCi0JCQkJCSAgICBFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFELAotCQkJCQkgICAgRVhUX1BIWV9LUl9DVFJMLCB2YWwpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCUJOWDJYX0VSUigiQkFEIFhHWFMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKLQkJCQkgIGJwLT5leHRfcGh5X2NvbmZpZyk7Ci0JCQlicmVhazsKLQkJfQotCi0JfSBlbHNlIHsgLyogU2VyRGVzICovCi0vKgkJZXh0X3BoeV9hZGRyID0gKChicC0+ZXh0X3BoeV9jb25maWcgJgotCQkJCSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfQUREUl9TSElGVCk7Ci0qLwotCQlleHRfcGh5X3R5cGUgPSBTRVJERVNfRVhUX1BIWV9UWVBFKGJwKTsKLQkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKLQkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIERpcmVjdFxuIik7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfQkNNNTQ4MjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIDU0ODJcbiIpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAotCQkJICAgYnAtPmV4dF9waHlfY29uZmlnKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9leHRfcGh5X3Jlc2V0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQl1MzIgZXh0X3BoeV9hZGRyID0gKChicC0+ZXh0X3BoeV9jb25maWcgJgotCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKLQl1MzIgYm9hcmQgPSAoYnAtPmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spOwotCi0JLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sZWQgYnkgR1BJTyAxCi0JICogR2l2ZSBpdCAxbXMgb2YgcmVzZXQgcHVsc2UKLQkgKi8KLQlpZiAoKGJvYXJkICE9IFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwMkcpICYmCi0JICAgIChib2FyZCAhPSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDNHKSkgewotCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVyk7Ci0JCW1zbGVlcCgxKTsKLQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKLQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIKTsKLQl9Ci0KLQlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnApOwotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyBEaXJlY3RcbiIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNS84NzA2XG4iKTsKLQkJCWJueDJ4X21kaW80NV93cml0ZShicCwgZXh0X3BoeV9hZGRyLAotCQkJCQkgICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkgICBFWFRfUEhZX09QVF9DTlRMLCAweGEwNDApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDgwNzJcbiIpOwotCQkJYm54MnhfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOwotCQkJYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsCi0JCQkJCQlleHRfcGh5X2FkZHIsCi0JCQkJCQlFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsCi0JCQkJCQkwLCAxPDwxNSk7Ci0JCQlibngyeF9od191bmxvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfODA3Ml9NRElPKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyBTRlg3MTAxXG4iKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCi0JCQkgICBicC0+ZXh0X3BoeV9jb25maWcpOwotCQkJYnJlYWs7Ci0JCX0KLQotCX0gZWxzZSB7IC8qIFNlckRlcyAqLwotCQlleHRfcGh5X3R5cGUgPSBTRVJERVNfRVhUX1BIWV9UWVBFKGJwKTsKLQkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKLQkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIERpcmVjdFxuIik7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfQkNNNTQ4MjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIDU0ODJcbiIpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAotCQkJICAgYnAtPmV4dF9waHlfY29uZmlnKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9saW5rX2luaXRpYWxpemUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCi0JLyogZGlzYWJsZSBhdHRlbnRpb25zICovCi0JYm54MnhfYml0c19kaXMoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCi0JCSAgICAgICAoTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgfAotCQkJTklHX01BU0tfWEdYUzBfTElOSzEwRyB8Ci0JCQlOSUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTIHwKLQkJCU5JR19NQVNLX01JX0lOVCkpOwotCi0JLyogQWN0aXZhdGUgdGhlIGV4dGVybmFsIFBIWSAqLwotCWJueDJ4X2V4dF9waHlfcmVzZXQoYnApOwotCi0JYm54Mnhfc2V0X2Flcl9tbWQoYnApOwotCi0JaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKQotCQlibngyeF9zZXRfbWFzdGVyX2xuKGJwKTsKLQotCS8qIHJlc2V0IHRoZSBTZXJEZXMgYW5kIHdhaXQgZm9yIHJlc2V0IGJpdCByZXR1cm4gbG93ICovCi0JYm54MnhfcmVzZXRfdW5pY29yZShicCk7Ci0KLQlibngyeF9zZXRfYWVyX21tZChicCk7Ci0KLQkvKiBzZXR0aW5nIHRoZSBtYXN0ZXJMbl9kZWYgYWdhaW4gYWZ0ZXIgdGhlIHJlc2V0ICovCi0JaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCWJueDJ4X3NldF9tYXN0ZXJfbG4oYnApOwotCQlibngyeF9zZXRfc3dhcF9sYW5lcyhicCk7Ci0JfQotCi0JLyogU2V0IFBhcmFsbGVsIERldGVjdCAqLwotCWlmIChicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX1NQRUVEKQotCQlibngyeF9zZXRfcGFyYWxsZWxfZGV0ZWN0aW9uKGJwKTsKLQotCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQlpZiAoYnAtPnJlcV9saW5lX3NwZWVkICYmCi0JCSAgICBicC0+cmVxX2xpbmVfc3BlZWQgPCBTUEVFRF8xMDAwKSB7Ci0JCQlicC0+cGh5X2ZsYWdzIHw9IFBIWV9TR01JSV9GTEFHOwotCQl9IGVsc2UgewotCQkJYnAtPnBoeV9mbGFncyAmPSB+UEhZX1NHTUlJX0ZMQUc7Ci0JCX0KLQl9Ci0KLQlpZiAoIShicC0+cGh5X2ZsYWdzICYgUEhZX1NHTUlJX0ZMQUcpKSB7Ci0JCXUxNiBiYW5rLCByeF9lcTsKLQotCQlyeF9lcSA9ICgoYnAtPnNlcmRlc19jb25maWcgJgotCQkJICBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLKSA+PgotCQkJIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUKTsKLQotCQlEUChORVRJRl9NU0dfTElOSywgInNldHRpbmcgcnggZXEgdG8gJWRcbiIsIHJ4X2VxKTsKLQkJZm9yIChiYW5rID0gTURJT19SRUdfQkFOS19SWDA7IGJhbmsgPD0gTURJT19SRUdfQkFOS19SWF9BTEw7Ci0JCQkgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19SWDEgLSBNRElPX1JFR19CQU5LX1JYMCkpIHsKLQkJCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBiYW5rKTsKLQkJCWJueDJ4X21kaW8yMl93cml0ZShicCwgTURJT19SWDBfUlhfRVFfQk9PU1QsCi0JCQkJCSAgICgocnhfZXEgJgotCQkJCU1ESU9fUlgwX1JYX0VRX0JPT1NUX0VRVUFMSVpFUl9DVFJMX01BU0spIHwKLQkJCQlNRElPX1JYMF9SWF9FUV9CT09TVF9PRkZTRVRfQ1RSTCkpOwotCQl9Ci0KLQkJLyogZm9yY2VkIHNwZWVkIHJlcXVlc3RlZD8gKi8KLQkJaWYgKCEoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19TUEVFRCkpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAibm90IFNHTUlJLCBubyBBTlxuIik7Ci0KLQkJCS8qIGRpc2FibGUgYXV0b25lZyAqLwotCQkJYm54Mnhfc2V0X2F1dG9uZWcoYnApOwotCi0JCQkvKiBwcm9ncmFtIHNwZWVkIGFuZCBkdXBsZXggKi8KLQkJCWJueDJ4X3Byb2dyYW1fc2VyZGVzKGJwKTsKLQotCQl9IGVsc2UgeyAvKiBBTl9tb2RlICovCi0JCQlEUChORVRJRl9NU0dfTElOSywgIm5vdCBTR01JSSwgQU5cbiIpOwotCi0JCQkvKiBBTiBlbmFibGVkICovCi0JCQlibngyeF9zZXRfYnJjbV9jbDM3X2FkdmVydGlzbWVudChicCk7Ci0KLQkJCS8qIHByb2dyYW0gZHVwbGV4ICYgcGF1c2UgYWR2ZXJ0aXNlbWVudCAoZm9yIGFuZWcpICovCi0JCQlibngyeF9zZXRfaWVlZV9hbmVnX2FkdmVydGlzbWVudChicCk7Ci0KLQkJCS8qIGVuYWJsZSBhdXRvbmVnICovCi0JCQlibngyeF9zZXRfYXV0b25lZyhicCk7Ci0KLQkJCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBBTiAqLwotCQkJYm54MnhfcmVzdGFydF9hdXRvbmVnKGJwKTsKLQkJfQotCi0JfSBlbHNlIHsgLyogU0dNSUkgbW9kZSAqLwotCQlEUChORVRJRl9NU0dfTElOSywgIlNHTUlJXG4iKTsKLQotCQlibngyeF9pbml0aWFsaXplX3NnbWlpX3Byb2Nlc3MoYnApOwotCX0KLQotCS8qIGluaXQgZXh0IHBoeSBhbmQgZW5hYmxlIGxpbmsgc3RhdGUgaW50ICovCi0JYm54MnhfZXh0X3BoeV9pbml0KGJwKTsKLQotCS8qIGVuYWJsZSB0aGUgaW50ZXJydXB0ICovCi0JYm54MnhfbGlua19pbnRfZW5hYmxlKGJwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfcGh5X2RlYXNzZXJ0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQl1MzIgdmFsOwotCi0JaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiWEdYU1xuIik7Ci0JCXZhbCA9IFhHWFNfUkVTRVRfQklUUzsKLQotCX0gZWxzZSB7IC8qIFNlckRlcyAqLwotCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlc1xuIik7Ci0JCXZhbCA9IFNFUkRFU19SRVNFVF9CSVRTOwotCX0KLQotCXZhbCA9IHZhbCA8PCAocG9ydCoxNik7Ci0KLQkvKiByZXNldCBhbmQgdW5yZXNldCB0aGUgU2VyRGVzL1hHWFMgKi8KLQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX0NMRUFSLCB2YWwpOwotCW1zbGVlcCg1KTsKLQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX1NFVCwgdmFsKTsKLX0KLQotc3RhdGljIGludCBibngyeF9waHlfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQotewotCURQKE5FVElGX01TR19MSU5LLCAic3RhcnRlZFxuIik7Ci0JaWYgKENISVBfUkVWKGJwKSA9PSBDSElQX1JFVl9GUEdBKSB7Ci0JCWJwLT5waHlfZmxhZ3MgfD0gUEhZX0VNQUNfRkxBRzsKLQkJYnAtPmxpbmtfdXAgPSAxOwotCQlicC0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQlicC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCU5JR19XUihOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArIGJwLT5wb3J0KjQsIDApOwotCQlibngyeF9lbWFjX2VuYWJsZShicCk7Ci0JCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKLQkJcmV0dXJuIDA7Ci0KLQl9IGVsc2UgaWYgKENISVBfUkVWKGJwKSA9PSBDSElQX1JFVl9FTVVMKSB7Ci0JCWJwLT5waHlfZmxhZ3MgfD0gUEhZX0JNQUNfRkxBRzsKLQkJYnAtPmxpbmtfdXAgPSAxOwotCQlicC0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQlicC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCU5JR19XUihOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArIGJwLT5wb3J0KjQsIDApOwotCQlibngyeF9ibWFjX2VuYWJsZShicCwgMCk7Ci0JCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKLQkJcmV0dXJuIDA7Ci0KLQl9IGVsc2UgewotCQlibngyeF9waHlfZGVhc3NlcnQoYnApOwotCQlibngyeF9saW5rX2luaXRpYWxpemUoYnApOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQl1MzIgYm9hcmQgPSAoYnAtPmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spOwotCi0JLyogdXBkYXRlIHNoYXJlZCBtZW1vcnkgKi8KLQlicC0+bGlua19zdGF0dXMgPSAwOwotCWJueDJ4X3VwZGF0ZV9tbmcoYnApOwotCi0JLyogZGlzYWJsZSBhdHRlbnRpb25zICovCi0JYm54MnhfYml0c19kaXMoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCi0JCSAgICAgICAoTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgfAotCQkJTklHX01BU0tfWEdYUzBfTElOSzEwRyB8Ci0JCQlOSUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTIHwKLQkJCU5JR19NQVNLX01JX0lOVCkpOwotCi0JLyogYWN0aXZhdGUgbmlnIGRyYWluICovCi0JTklHX1dSKE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsgcG9ydCo0LCAxKTsKLQotCS8qIGRpc2FibGUgbmlnIGVncmVzcyBpbnRlcmZhY2UgKi8KLQlOSUdfV1IoTklHX1JFR19CTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDApOwotCU5JR19XUihOSUdfUkVHX0VHUkVTU19FTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDApOwotCi0JLyogU3RvcCBCaWdNYWMgcnggKi8KLQlibngyeF9ibWFjX3J4X2Rpc2FibGUoYnApOwotCi0JLyogZGlzYWJsZSBlbWFjICovCi0JTklHX1dSKE5JR19SRUdfTklHX0VNQUMwX0VOICsgcG9ydCo0LCAwKTsKLQotCW1zbGVlcCgxMCk7Ci0KLQkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xlZCBieSBHUElPIDEKLQkgKiBIb2xkIGl0IGFzIG91dHB1dCBsb3cKLQkgKi8KLQlpZiAoKGJvYXJkICE9IFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwMkcpICYmCi0JICAgIChib2FyZCAhPSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDNHKSkgewotCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVyk7Ci0JCURQKE5FVElGX01TR19MSU5LLCAicmVzZXQgZXh0ZXJuYWwgUEhZXG4iKTsKLQl9Ci0KLQkvKiByZXNldCB0aGUgU2VyRGVzL1hHWFMgKi8KLQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX0NMRUFSLAotCSAgICAgICAoMHgxZmYgPDwgKHBvcnQqMTYpKSk7Ci0KLQkvKiByZXNldCBCaWdNYWMgKi8KLQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAotCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKLQotCS8qIGRpc2FibGUgbmlnIGluZ3Jlc3MgaW50ZXJmYWNlICovCi0JTklHX1dSKE5JR19SRUdfQk1BQzBfSU5fRU4gKyBwb3J0KjQsIDApOwotCU5JR19XUihOSUdfUkVHX0VNQUMwX0lOX0VOICsgcG9ydCo0LCAwKTsKLQotCS8qIHNldCBsaW5rIGRvd24gKi8KLQlicC0+bGlua191cCA9IDA7Ci19Ci0KLSNpZmRlZiBCTlgyWF9YR1hTX0xCCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfeGd4c19sb29wYmFjayhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaXNfMTBnKQotewotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0KLQlpZiAoaXNfMTBnKSB7Ci0JCXUzMiBtZF9kZXZhZDsKLQotCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgMTBHIGxvb3BiYWNrIGVuYWJsZVxuIik7Ci0KLQkJLyogY2hhbmdlIHRoZSB1bmlfcGh5X2FkZHIgaW4gdGhlIG5pZyAqLwotCQlSRUdfUkQoYnAsIChOSUdfUkVHX1hHWFMwX0NUUkxfTURfREVWQUQgKyBwb3J0KjB4MTgpLAotCQkgICAgICAgJm1kX2RldmFkKTsKLQkJTklHX1dSKE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9ERVZBRCArIHBvcnQqMHgxOCwgMHg1KTsKLQotCQkvKiBjaGFuZ2UgdGhlIGFlciBtbWQgKi8KLQkJTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfQUVSX0JMT0NLKTsKLQkJYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX0FFUl9CTE9DS19BRVJfUkVHLCAweDI4MDApOwotCi0JCS8qIGNvbmZpZyBjb21ibyBJRUVFMCBjb250cm9sIHJlZyBmb3IgbG9vcGJhY2sgKi8KLQkJTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjApOwotCQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAotCQkJCSAgIDB4NjA0MSk7Ci0KLQkJLyogc2V0IGFlciBtbWQgYmFjayAqLwotCQlibngyeF9zZXRfYWVyX21tZChicCk7Ci0KLQkJLyogYW5kIG1kX2RldmFkICovCi0JCU5JR19XUihOSUdfUkVHX1hHWFMwX0NUUkxfTURfREVWQUQgKyBwb3J0KjB4MTgsIG1kX2RldmFkKTsKLQotCX0gZWxzZSB7Ci0JCXUzMiBtaWlfY29udHJvbDsKLQotCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgMUcgbG9vcGJhY2sgZW5hYmxlXG4iKTsKLQotCQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCk7Ci0JCWJueDJ4X21kaW8yMl9yZWFkKGJwLCBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJCSAgJm1paV9jb250cm9sKTsKLQkJYm54MnhfbWRpbzIyX3dyaXRlKGJwLCBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJCSAgIChtaWlfY29udHJvbCB8Ci0JCQkJICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9MT09QQkFDSykpOwotCX0KLX0KLSNlbmRpZgotCi0vKiBlbmQgb2YgUEhZL01BQyAqLwotCi0vKiBzbG93IHBhdGggKi8KLQotLyoKLSAqIEdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi0vKiB0aGUgc2xvdyBwYXRoIHF1ZXVlIGlzIG9kZCBzaW5jZSBjb21wbGV0aW9ucyBhcnJpdmUgb24gdGhlIGZhc3RwYXRoIHJpbmcgKi8KLXN0YXRpYyBpbnQgYm54Mnhfc3BfcG9zdChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgY29tbWFuZCwgaW50IGNpZCwKLQkJCSB1MzIgZGF0YV9oaSwgdTMyIGRhdGFfbG8sIGludCBjb21tb24pCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQotCURQKE5FVElGX01TR19USU1FUiwKLQkgICAic3BlICgleDoleCkgIGNvbW1hbmQgJWQgIGh3X2NpZCAleCAgZGF0YSAoJXg6JXgpICBsZWZ0ICV4XG4iLAotCSAgICh1MzIpVTY0X0hJKGJwLT5zcHFfbWFwcGluZyksICh1MzIpKFU2NF9MTyhicC0+c3BxX21hcHBpbmcpICsKLQkgICAodm9pZCAqKWJwLT5zcHFfcHJvZF9iZCAtICh2b2lkICopYnAtPnNwcSksIGNvbW1hbmQsCi0JICAgSFdfQ0lEKGJwLCBjaWQpLCBkYXRhX2hpLCBkYXRhX2xvLCBicC0+c3BxX2xlZnQpOwotCi0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQotCQlyZXR1cm4gLUVJTzsKLSNlbmRpZgotCi0Jc3Bpbl9sb2NrKCZicC0+c3BxX2xvY2spOwotCi0JaWYgKCFicC0+c3BxX2xlZnQpIHsKLQkJQk5YMlhfRVJSKCJCVUchIFNQUSByaW5nIGZ1bGwhXG4iKTsKLQkJc3Bpbl91bmxvY2soJmJwLT5zcHFfbG9jayk7Ci0JCWJueDJ4X3BhbmljKCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyogQ0lEIG5lZWRzIHBvcnQgbnVtYmVyIHRvIGJlIGVuY29kZWQgaW50IGl0ICovCi0JYnAtPnNwcV9wcm9kX2JkLT5oZHIuY29ubl9hbmRfY21kX2RhdGEgPQotCQkJY3B1X3RvX2xlMzIoKChjb21tYW5kIDw8IFNQRV9IRFJfQ01EX0lEX1NISUZUKSB8Ci0JCQkJICAgICBIV19DSUQoYnAsIGNpZCkpKTsKLQlicC0+c3BxX3Byb2RfYmQtPmhkci50eXBlID0gY3B1X3RvX2xlMTYoRVRIX0NPTk5FQ1RJT05fVFlQRSk7Ci0JaWYgKGNvbW1vbikKLQkJYnAtPnNwcV9wcm9kX2JkLT5oZHIudHlwZSB8PQotCQkJY3B1X3RvX2xlMTYoKDEgPDwgU1BFX0hEUl9DT01NT05fUkFNUk9EX1NISUZUKSk7Ci0KLQlicC0+c3BxX3Byb2RfYmQtPmRhdGEubWFjX2NvbmZpZ19hZGRyLmhpID0gY3B1X3RvX2xlMzIoZGF0YV9oaSk7Ci0JYnAtPnNwcV9wcm9kX2JkLT5kYXRhLm1hY19jb25maWdfYWRkci5sbyA9IGNwdV90b19sZTMyKGRhdGFfbG8pOwotCi0JYnAtPnNwcV9sZWZ0LS07Ci0KLQlpZiAoYnAtPnNwcV9wcm9kX2JkID09IGJwLT5zcHFfbGFzdF9iZCkgewotCQlicC0+c3BxX3Byb2RfYmQgPSBicC0+c3BxOwotCQlicC0+c3BxX3Byb2RfaWR4ID0gMDsKLQkJRFAoTkVUSUZfTVNHX1RJTUVSLCAiZW5kIG9mIHNwcVxuIik7Ci0KLQl9IGVsc2UgewotCQlicC0+c3BxX3Byb2RfYmQrKzsKLQkJYnAtPnNwcV9wcm9kX2lkeCsrOwotCX0KLQotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NQUV9QUk9EX09GRlNFVChwb3J0KSwKLQkgICAgICAgYnAtPnNwcV9wcm9kX2lkeCk7Ci0KLQlzcGluX3VubG9jaygmYnAtPnNwcV9sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogYWNxdWlyZSBzcGxpdCBNQ1AgYWNjZXNzIGxvY2sgcmVnaXN0ZXIgKi8KLXN0YXRpYyBpbnQgYm54MnhfbG9ja19hbHIoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcmMgPSAwOwotCXUzMiBpLCBqLCB2YWw7Ci0KLQltaWdodF9zbGVlcCgpOwotCWkgPSAxMDA7Ci0JZm9yIChqID0gMDsgaiA8IGkqMTA7IGorKykgewotCQl2YWwgPSAoMVVMIDw8IDMxKTsKLQkJUkVHX1dSKGJwLCBHUkNCQVNFX01DUCArIDB4OWMsIHZhbCk7Ci0JCXZhbCA9IFJFR19SRChicCwgR1JDQkFTRV9NQ1AgKyAweDljKTsKLQkJaWYgKHZhbCAmICgxTCA8PCAzMSkpCi0JCQlicmVhazsKLQotCQltc2xlZXAoNSk7Ci0JfQotCi0JaWYgKCEodmFsICYgKDFMIDw8IDMxKSkpIHsKLQkJQk5YMlhfRVJSKCJDYW5ub3QgYWNxdWlyZSBudnJhbSBpbnRlcmZhY2VcbiIpOwotCi0JCXJjID0gLUVCVVNZOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyogUmVsZWFzZSBzcGxpdCBNQ1AgYWNjZXNzIGxvY2sgcmVnaXN0ZXIgKi8KLXN0YXRpYyB2b2lkIGJueDJ4X3VubG9ja19hbHIoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsID0gMDsKLQotCVJFR19XUihicCwgR1JDQkFTRV9NQ1AgKyAweDljLCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBibngyeF91cGRhdGVfZHNiX2lkeChzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2sgKmRlZl9zYiA9IGJwLT5kZWZfc3RhdHVzX2JsazsKLQl1MTYgcmMgPSAwOwotCi0JYmFycmllcigpOyAvKiBzdGF0dXMgYmxvY2sgaXMgd3JpdHRlbiB0byBieSB0aGUgY2hpcCAqLwotCi0JaWYgKGJwLT5kZWZfYXR0X2lkeCAhPSBkZWZfc2ItPmF0dGVuX3N0YXR1c19ibG9jay5hdHRuX2JpdHNfaW5kZXgpIHsKLQkJYnAtPmRlZl9hdHRfaWR4ID0gZGVmX3NiLT5hdHRlbl9zdGF0dXNfYmxvY2suYXR0bl9iaXRzX2luZGV4OwotCQlyYyB8PSAxOwotCX0KLQlpZiAoYnAtPmRlZl9jX2lkeCAhPSBkZWZfc2ItPmNfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpIHsKLQkJYnAtPmRlZl9jX2lkeCA9IGRlZl9zYi0+Y19kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleDsKLQkJcmMgfD0gMjsKLQl9Ci0JaWYgKGJwLT5kZWZfdV9pZHggIT0gZGVmX3NiLT51X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KSB7Ci0JCWJwLT5kZWZfdV9pZHggPSBkZWZfc2ItPnVfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXg7Ci0JCXJjIHw9IDQ7Ci0JfQotCWlmIChicC0+ZGVmX3hfaWR4ICE9IGRlZl9zYi0+eF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCkgewotCQlicC0+ZGVmX3hfaWR4ID0gZGVmX3NiLT54X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4OwotCQlyYyB8PSA4OwotCX0KLQlpZiAoYnAtPmRlZl90X2lkeCAhPSBkZWZfc2ItPnRfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpIHsKLQkJYnAtPmRlZl90X2lkeCA9IGRlZl9zYi0+dF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleDsKLQkJcmMgfD0gMTY7Ci0JfQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIHNsb3cgcGF0aCBzZXJ2aWNlIGZ1bmN0aW9ucwotICovCi0KLXN0YXRpYyB2b2lkIGJueDJ4X2F0dG5faW50X2Fzc2VydGVkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhc3NlcnRlZCkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCXUzMiBpZ3VfYWRkciA9IChJR1VfQUREUl9BVFROX0JJVFNfU0VUICsgSUdVX1BPUlRfQkFTRSAqIHBvcnQpICogODsKLQl1MzIgYWV1X2FkZHIgPSBwb3J0ID8gTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEgOgotCQkJICAgICAgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzA7Ci0JdTMyIG5pZ19pbnRfbWFza19hZGRyID0gcG9ydCA/IE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDEgOgotCQkJCSAgICAgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwOwotCi0JaWYgKH5icC0+YWV1X21hc2sgJiAoYXNzZXJ0ZWQgJiAweGZmKSkKLQkJQk5YMlhfRVJSKCJJR1UgRVJST1JcbiIpOwotCWlmIChicC0+YXR0bl9zdGF0ZSAmIGFzc2VydGVkKQotCQlCTlgyWF9FUlIoIklHVSBFUlJPUlxuIik7Ci0KLQlEUChORVRJRl9NU0dfSFcsICJhZXVfbWFzayAleCAgbmV3bHkgYXNzZXJ0ZWQgJXhcbiIsCi0JICAgYnAtPmFldV9tYXNrLCBhc3NlcnRlZCk7Ci0JYnAtPmFldV9tYXNrICY9IH4oYXNzZXJ0ZWQgJiAweGZmKTsKLQlEUChORVRJRl9NU0dfSFcsICJhZnRlciBtYXNraW5nOiBhZXVfbWFzayAleFxuIiwgYnAtPmFldV9tYXNrKTsKLQotCVJFR19XUihicCwgYWV1X2FkZHIsIGJwLT5hZXVfbWFzayk7Ci0KLQlicC0+YXR0bl9zdGF0ZSB8PSBhc3NlcnRlZDsKLQotCWlmIChhc3NlcnRlZCAmIEFUVE5fSEFSRF9XSVJFRF9NQVNLKSB7Ci0JCWlmIChhc3NlcnRlZCAmIEFUVE5fTklHX0ZPUl9GVU5DKSB7Ci0KLQkJCS8qIHNhdmUgbmlnIGludGVycnVwdCBtYXNrICovCi0JCQlicC0+bmlnX21hc2sgPSBSRUdfUkQoYnAsIG5pZ19pbnRfbWFza19hZGRyKTsKLQkJCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIDApOwotCi0JCQlibngyeF9saW5rX3VwZGF0ZShicCk7Ci0KLQkJCS8qIGhhbmRsZSB1bmljb3JlIGF0dG4/ICovCi0JCX0KLQkJaWYgKGFzc2VydGVkICYgQVRUTl9TV19USU1FUl80X0ZVTkMpCi0JCQlEUChORVRJRl9NU0dfSFcsICJBVFROX1NXX1RJTUVSXzRfRlVOQyFcbiIpOwotCi0JCWlmIChhc3NlcnRlZCAmIEdQSU9fMl9GVU5DKQotCQkJRFAoTkVUSUZfTVNHX0hXLCAiR1BJT18yX0ZVTkMhXG4iKTsKLQotCQlpZiAoYXNzZXJ0ZWQgJiBHUElPXzNfRlVOQykKLQkJCURQKE5FVElGX01TR19IVywgIkdQSU9fM19GVU5DIVxuIik7Ci0KLQkJaWYgKGFzc2VydGVkICYgR1BJT180X0ZVTkMpCi0JCQlEUChORVRJRl9NU0dfSFcsICJHUElPXzRfRlVOQyFcbiIpOwotCi0JCWlmIChwb3J0ID09IDApIHsKLQkJCWlmIChhc3NlcnRlZCAmIEFUVE5fR0VORVJBTF9BVFROXzEpIHsKLQkJCQlEUChORVRJRl9NU0dfSFcsICJBVFROX0dFTkVSQUxfQVRUTl8xIVxuIik7Ci0JCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEsIDB4MCk7Ci0JCQl9Ci0JCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX0dFTkVSQUxfQVRUTl8yKSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0hXLCAiQVRUTl9HRU5FUkFMX0FUVE5fMiFcbiIpOwotCQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8yLCAweDApOwotCQkJfQotCQkJaWYgKGFzc2VydGVkICYgQVRUTl9HRU5FUkFMX0FUVE5fMykgewotCQkJCURQKE5FVElGX01TR19IVywgIkFUVE5fR0VORVJBTF9BVFROXzMhXG4iKTsKLQkJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMywgMHgwKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChhc3NlcnRlZCAmIEFUVE5fR0VORVJBTF9BVFROXzQpIHsKLQkJCQlEUChORVRJRl9NU0dfSFcsICJBVFROX0dFTkVSQUxfQVRUTl80IVxuIik7Ci0JCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzQsIDB4MCk7Ci0JCQl9Ci0JCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX0dFTkVSQUxfQVRUTl81KSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0hXLCAiQVRUTl9HRU5FUkFMX0FUVE5fNSFcbiIpOwotCQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl81LCAweDApOwotCQkJfQotCQkJaWYgKGFzc2VydGVkICYgQVRUTl9HRU5FUkFMX0FUVE5fNikgewotCQkJCURQKE5FVElGX01TR19IVywgIkFUVE5fR0VORVJBTF9BVFROXzYhXG4iKTsKLQkJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNiwgMHgwKTsKLQkJCX0KLQkJfQotCi0JfSAvKiBpZiBoYXJkd2lyZWQgKi8KLQotCURQKE5FVElGX01TR19IVywgImFib3V0IHRvIG1hc2sgMHglMDh4IGF0IElHVSBhZGRyIDB4JXhcbiIsCi0JICAgYXNzZXJ0ZWQsIEJBUl9JR1VfSU5UTUVNICsgaWd1X2FkZHIpOwotCVJFR19XUihicCwgQkFSX0lHVV9JTlRNRU0gKyBpZ3VfYWRkciwgYXNzZXJ0ZWQpOwotCi0JLyogbm93IHNldCBiYWNrIHRoZSBtYXNrICovCi0JaWYgKGFzc2VydGVkICYgQVRUTl9OSUdfRk9SX0ZVTkMpCi0JCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIGJwLT5uaWdfbWFzayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYXR0bikKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCWludCByZWdfb2Zmc2V0OwotCXUzMiB2YWw7Ci0KLQlpZiAoYXR0biAmIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81KSB7Ci0KLQkJcmVnX29mZnNldCA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wIDoKLQkJCQkgICAgIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCk7Ci0KLQkJdmFsID0gUkVHX1JEKGJwLCByZWdfb2Zmc2V0KTsKLQkJdmFsICY9IH5BRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNTsKLQkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOwotCi0JCUJOWDJYX0VSUigiU1BJTzUgaHcgYXR0ZW50aW9uXG4iKTsKLQotCQlzd2l0Y2ggKGJwLT5ib2FyZCAmIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9NQVNLKSB7Ci0JCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRzoKLQkJCS8qIEZhbiBmYWlsdXJlIGF0dGVudGlvbiAqLwotCi0JCQkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xlZCBieSBHUElPIDEgKi8KLQkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCi0JCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVyk7Ci0JCQkvKiBMb3cgcG93ZXIgbW9kZSBpcyBjb250cm9sZWQgYnkgR1BJTyAyICovCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAotCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1cpOwotCQkJLyogbWFyayB0aGUgZmFpbHVyZSAqLwotCQkJYnAtPmV4dF9waHlfY29uZmlnICY9Ci0JCQkJCX5QT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9NQVNLOwotCQkJYnAtPmV4dF9waHlfY29uZmlnIHw9Ci0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU7Ci0JCQlTSE1FTV9XUihicCwKLQkJCQkgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uCi0JCQkJCQkJZXh0ZXJuYWxfcGh5X2NvbmZpZywKLQkJCQkgYnAtPmV4dF9waHlfY29uZmlnKTsKLQkJCS8qIGxvZyB0aGUgZmFpbHVyZSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFuIEZhaWx1cmUgb24gTmV0d29yayIKLQkJCSAgICAgICAiIENvbnRyb2xsZXIgJXMgaGFzIGNhdXNlZCB0aGUgZHJpdmVyIHRvIgotCQkJICAgICAgICIgc2h1dGRvd24gdGhlIGNhcmQgdG8gcHJldmVudCBwZXJtYW5lbnQiCi0JCQkgICAgICAgIiBkYW1hZ2UuICBQbGVhc2UgY29udGFjdCBEZWxsIFN1cHBvcnQgZm9yIgotCQkJICAgICAgICIgYXNzaXN0YW5jZVxuIiwgYnAtPmRldi0+bmFtZSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYXR0bikKLXsKLQl1MzIgdmFsOwotCi0JaWYgKGF0dG4gJiBCTlgyWF9ET09SUV9BU1NFUlQpIHsKLQotCQl2YWwgPSBSRUdfUkQoYnAsIERPUlFfUkVHX0RPUlFfSU5UX1NUU19DTFIpOwotCQlCTlgyWF9FUlIoIkRCIGh3IGF0dGVudGlvbiAweCV4XG4iLCB2YWwpOwotCQkvKiBET1JRIGRpc2NhcmQgYXR0ZW50aW9uICovCi0JCWlmICh2YWwgJiAweDIpCi0JCQlCTlgyWF9FUlIoIkZBVEFMIGVycm9yIGZyb20gRE9SUVxuIik7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDIoc3RydWN0IGJueDJ4ICpicCwgdTMyIGF0dG4pCi17Ci0JdTMyIHZhbDsKLQotCWlmIChhdHRuICYgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0ZDX0hXX0lOVEVSUlVQVCkgewotCi0JCXZhbCA9IFJFR19SRChicCwgQ0ZDX1JFR19DRkNfSU5UX1NUU19DTFIpOwotCQlCTlgyWF9FUlIoIkNGQyBodyBhdHRlbnRpb24gMHgleFxuIiwgdmFsKTsKLQkJLyogQ0ZDIGVycm9yIGF0dGVudGlvbiAqLwotCQlpZiAodmFsICYgMHgyKQotCQkJQk5YMlhfRVJSKCJGQVRBTCBlcnJvciBmcm9tIENGQ1xuIik7Ci0JfQotCi0JaWYgKGF0dG4gJiBBRVVfSU5QVVRTX0FUVE5fQklUU19QWFBfSFdfSU5URVJSVVBUKSB7Ci0KLQkJdmFsID0gUkVHX1JEKGJwLCBQWFBfUkVHX1BYUF9JTlRfU1RTX0NMUl8wKTsKLQkJQk5YMlhfRVJSKCJQWFAgaHcgYXR0ZW50aW9uIDB4JXhcbiIsIHZhbCk7Ci0JCS8qIFJRX1VTRE1EUF9GSUZPX09WRVJGTE9XICovCi0JCWlmICh2YWwgJiAweDE4MDAwKQotCQkJQk5YMlhfRVJSKCJGQVRBTCBlcnJvciBmcm9tIFBYUFxuIik7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDMoc3RydWN0IGJueDJ4ICpicCwgdTMyIGF0dG4pCi17Ci0JaWYgKGF0dG4gJiBFVkVSRVNUX0dFTl9BVFROX0lOX1VTRV9NQVNLKSB7Ci0KLQkJaWYgKGF0dG4gJiBCTlgyWF9NQ19BU1NFUlRfQklUUykgewotCi0JCQlCTlgyWF9FUlIoIk1DIGFzc2VydCFcbiIpOwotCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEwLCAwKTsKLQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl85LCAwKTsKLQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl84LCAwKTsKLQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl83LCAwKTsKLQkJCWJueDJ4X3BhbmljKCk7Ci0KLQkJfSBlbHNlIGlmIChhdHRuICYgQk5YMlhfTUNQX0FTU0VSVCkgewotCi0JCQlCTlgyWF9FUlIoIk1DUCBhc3NlcnQhXG4iKTsKLQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMSwgMCk7Ci0JCQlibngyeF9tY19hc3NlcnQoYnApOwotCi0JCX0gZWxzZQotCQkJQk5YMlhfRVJSKCJVbmtub3duIEhXIGFzc2VydCEgKGF0dG4gMHgleClcbiIsIGF0dG4pOwotCX0KLQotCWlmIChhdHRuICYgRVZFUkVTVF9MQVRDSEVEX0FUVE5fSU5fVVNFX01BU0spIHsKLQotCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9DTFJfTEFUQ0hfU0lHTkFMLCAweDdmZik7Ci0JCUJOWDJYX0VSUigiTEFUQ0hFRCBhdHRlbnRpb24gMHgleCAobWFza2VkKVxuIiwgYXR0bik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9hdHRuX2ludF9kZWFzc2VydGVkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBkZWFzc2VydGVkKQotewotCXN0cnVjdCBhdHRuX3JvdXRlIGF0dG47Ci0Jc3RydWN0IGF0dG5fcm91dGUgZ3JvdXBfbWFzazsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCWludCBpbmRleDsKLQl1MzIgcmVnX2FkZHI7Ci0JdTMyIHZhbDsKLQotCS8qIG5lZWQgdG8gdGFrZSBIVyBsb2NrIGJlY2F1c2UgTUNQIG9yIG90aGVyIHBvcnQgbWlnaHQgYWxzbwotCSAgIHRyeSB0byBoYW5kbGUgdGhpcyBldmVudCAqLwotCWJueDJ4X2xvY2tfYWxyKGJwKTsKLQotCWF0dG4uc2lnWzBdID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzFfRlVOQ18wICsgcG9ydCo0KTsKLQlhdHRuLnNpZ1sxXSA9IFJFR19SRChicCwgTUlTQ19SRUdfQUVVX0FGVEVSX0lOVkVSVF8yX0ZVTkNfMCArIHBvcnQqNCk7Ci0JYXR0bi5zaWdbMl0gPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9BRlRFUl9JTlZFUlRfM19GVU5DXzAgKyBwb3J0KjQpOwotCWF0dG4uc2lnWzNdID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzRfRlVOQ18wICsgcG9ydCo0KTsKLQlEUChORVRJRl9NU0dfSFcsICJhdHRuICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYXR0bi5zaWdbMF0pOwotCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0RZTkFNSUNfQVRUTl9HUlBTOyBpbmRleCsrKSB7Ci0JCWlmIChkZWFzc2VydGVkICYgKDEgPDwgaW5kZXgpKSB7Ci0JCQlncm91cF9tYXNrID0gYnAtPmF0dG5fZ3JvdXBbaW5kZXhdOwotCi0JCQlEUChORVRJRl9NU0dfSFcsICJncm91cFslZF06ICVsbHhcbiIsIGluZGV4LAotCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylncm91cF9tYXNrLnNpZ1swXSk7Ci0KLQkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQzKGJwLAotCQkJCQlhdHRuLnNpZ1szXSAmIGdyb3VwX21hc2suc2lnWzNdKTsKLQkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQxKGJwLAotCQkJCQlhdHRuLnNpZ1sxXSAmIGdyb3VwX21hc2suc2lnWzFdKTsKLQkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQyKGJwLAotCQkJCQlhdHRuLnNpZ1syXSAmIGdyb3VwX21hc2suc2lnWzJdKTsKLQkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQwKGJwLAotCQkJCQlhdHRuLnNpZ1swXSAmIGdyb3VwX21hc2suc2lnWzBdKTsKLQotCQkJaWYgKChhdHRuLnNpZ1swXSAmIGdyb3VwX21hc2suc2lnWzBdICYKLQkJCQkJCUhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMCkgfHwKLQkJCSAgICAoYXR0bi5zaWdbMV0gJiBncm91cF9tYXNrLnNpZ1sxXSAmCi0JCQkJCQlIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzEpIHx8Ci0JCQkgICAgKGF0dG4uc2lnWzJdICYgZ3JvdXBfbWFzay5zaWdbMl0gJgotCQkJCQkJSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8yKSkKLQkJCQlCTlgyWF9FUlIoIkZBVEFMIEhXIGJsb2NrIGF0dGVudGlvbiIKLQkJCQkJICAiICBzZXQwIDB4JXggIHNldDEgMHgleCIKLQkJCQkJICAiICBzZXQyIDB4JXhcbiIsCi0JCQkJCSAgKGF0dG4uc2lnWzBdICYgZ3JvdXBfbWFzay5zaWdbMF0gJgotCQkJCQkgICBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzApLAotCQkJCQkgIChhdHRuLnNpZ1sxXSAmIGdyb3VwX21hc2suc2lnWzFdICYKLQkJCQkJICAgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8xKSwKLQkJCQkJICAoYXR0bi5zaWdbMl0gJiBncm91cF9tYXNrLnNpZ1syXSAmCi0JCQkJCSAgIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMikpOwotCi0JCQlpZiAoKGF0dG4uc2lnWzBdICYgZ3JvdXBfbWFzay5zaWdbMF0gJgotCQkJCQkJSFdfUFJUWV9BU1NFUlRfU0VUXzApIHx8Ci0JCQkgICAgKGF0dG4uc2lnWzFdICYgZ3JvdXBfbWFzay5zaWdbMV0gJgotCQkJCQkJSFdfUFJUWV9BU1NFUlRfU0VUXzEpIHx8Ci0JCQkgICAgKGF0dG4uc2lnWzJdICYgZ3JvdXBfbWFzay5zaWdbMl0gJgotCQkJCQkJSFdfUFJUWV9BU1NFUlRfU0VUXzIpKQotCQkJICAgICAgIEJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgcGFyaXR5IGF0dGVudGlvblxuIik7Ci0JCX0KLQl9Ci0KLQlibngyeF91bmxvY2tfYWxyKGJwKTsKLQotCXJlZ19hZGRyID0gKElHVV9BRERSX0FUVE5fQklUU19DTFIgKyBJR1VfUE9SVF9CQVNFICogcG9ydCkgKiA4OwotCi0JdmFsID0gfmRlYXNzZXJ0ZWQ7Ci0vKiAgICAgIERQKE5FVElGX01TR19JTlRSLCAid3JpdGUgMHglMDh4IHRvIElHVSBhZGRyIDB4JXhcbiIsCi0JICAgdmFsLCBCQVJfSUdVX0lOVE1FTSArIHJlZ19hZGRyKTsgKi8KLQlSRUdfV1IoYnAsIEJBUl9JR1VfSU5UTUVNICsgcmVnX2FkZHIsIHZhbCk7Ci0KLQlpZiAoYnAtPmFldV9tYXNrICYgKGRlYXNzZXJ0ZWQgJiAweGZmKSkKLQkJQk5YMlhfRVJSKCJJR1UgQlVHXG4iKTsKLQlpZiAofmJwLT5hdHRuX3N0YXRlICYgZGVhc3NlcnRlZCkKLQkJQk5YMlhfRVJSKCJJR1UgQlVHXG4iKTsKLQotCXJlZ19hZGRyID0gcG9ydCA/IE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18xIDoKLQkJCSAgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzA7Ci0KLQlEUChORVRJRl9NU0dfSFcsICJhZXVfbWFzayAleFxuIiwgYnAtPmFldV9tYXNrKTsKLQlicC0+YWV1X21hc2sgfD0gKGRlYXNzZXJ0ZWQgJiAweGZmKTsKLQotCURQKE5FVElGX01TR19IVywgIm5ldyBtYXNrICV4XG4iLCBicC0+YWV1X21hc2spOwotCVJFR19XUihicCwgcmVnX2FkZHIsIGJwLT5hZXVfbWFzayk7Ci0KLQlEUChORVRJRl9NU0dfSFcsICJhdHRuX3N0YXRlICV4XG4iLCBicC0+YXR0bl9zdGF0ZSk7Ci0JYnAtPmF0dG5fc3RhdGUgJj0gfmRlYXNzZXJ0ZWQ7Ci0JRFAoTkVUSUZfTVNHX0hXLCAibmV3IHN0YXRlICV4XG4iLCBicC0+YXR0bl9zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2F0dG5faW50KHN0cnVjdCBibngyeCAqYnApCi17Ci0JLyogcmVhZCBsb2NhbCBjb3B5IG9mIGJpdHMgKi8KLQl1MzIgYXR0bl9iaXRzID0gYnAtPmRlZl9zdGF0dXNfYmxrLT5hdHRlbl9zdGF0dXNfYmxvY2suYXR0bl9iaXRzOwotCXUzMiBhdHRuX2FjayA9IGJwLT5kZWZfc3RhdHVzX2Jsay0+YXR0ZW5fc3RhdHVzX2Jsb2NrLmF0dG5fYml0c19hY2s7Ci0JdTMyIGF0dG5fc3RhdGUgPSBicC0+YXR0bl9zdGF0ZTsKLQotCS8qIGxvb2sgZm9yIGNoYW5nZWQgYml0cyAqLwotCXUzMiBhc3NlcnRlZCAgID0gIGF0dG5fYml0cyAmIH5hdHRuX2FjayAmIH5hdHRuX3N0YXRlOwotCXUzMiBkZWFzc2VydGVkID0gfmF0dG5fYml0cyAmICBhdHRuX2FjayAmICBhdHRuX3N0YXRlOwotCi0JRFAoTkVUSUZfTVNHX0hXLAotCSAgICJhdHRuX2JpdHMgJXggIGF0dG5fYWNrICV4ICBhc3NlcnRlZCAleCAgZGVhc3NlcnRlZCAleFxuIiwKLQkgICBhdHRuX2JpdHMsIGF0dG5fYWNrLCBhc3NlcnRlZCwgZGVhc3NlcnRlZCk7Ci0KLQlpZiAofihhdHRuX2JpdHMgXiBhdHRuX2FjaykgJiAoYXR0bl9iaXRzIF4gYXR0bl9zdGF0ZSkpCi0JCUJOWDJYX0VSUigiYmFkIGF0dGVudGlvbiBzdGF0ZVxuIik7Ci0KLQkvKiBoYW5kbGUgYml0cyB0aGF0IHdlcmUgcmFpc2VkICovCi0JaWYgKGFzc2VydGVkKQotCQlibngyeF9hdHRuX2ludF9hc3NlcnRlZChicCwgYXNzZXJ0ZWQpOwotCi0JaWYgKGRlYXNzZXJ0ZWQpCi0JCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQoYnAsIGRlYXNzZXJ0ZWQpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zcF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBibngyeCwgc3BfdGFzayk7Ci0JdTE2IHN0YXR1czsKLQotCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZCAqLwotCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkgewotCQlEUChCTlgyWF9NU0dfU1AsICJjYWxsZWQgYnV0IGludHJfc2VtIG5vdCAwLCByZXR1cm5pbmdcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3RhdHVzID0gYm54MnhfdXBkYXRlX2RzYl9pZHgoYnApOwotCWlmIChzdGF0dXMgPT0gMCkKLQkJQk5YMlhfRVJSKCJzcHVyaW91cyBzbG93cGF0aCBpbnRlcnJ1cHQhXG4iKTsKLQotCURQKE5FVElGX01TR19JTlRSLCAiZ290IGEgc2xvd3BhdGggaW50ZXJydXB0ICh1cGRhdGVkICV4KVxuIiwgc3RhdHVzKTsKLQotCS8qIEhXIGF0dGVudGlvbnMgKi8KLQlpZiAoc3RhdHVzICYgMHgxKQotCQlibngyeF9hdHRuX2ludChicCk7Ci0KLQkvKiBDU3Rvcm0gZXZlbnRzOiBxdWVyeV9zdGF0cywgcG9ydCBkZWxldGUgcmFtcm9kICovCi0JaWYgKHN0YXR1cyAmIDB4MikKLQkJYnAtPnN0YXRfcGVuZGluZyA9IDA7Ci0KLQlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQVRURU5USU9OX0lELCBicC0+ZGVmX2F0dF9pZHgsCi0JCSAgICAgSUdVX0lOVF9OT1AsIDEpOwotCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBVU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdV9pZHgpLAotCQkgICAgIElHVV9JTlRfTk9QLCAxKTsKLQlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQ1NUT1JNX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX2NfaWR4KSwKLQkJICAgICBJR1VfSU5UX05PUCwgMSk7Ci0JYm54MnhfYWNrX3NiKGJwLCBERUZfU0JfSUQsIFhTVE9STV9JRCwgbGUxNl90b19jcHUoYnAtPmRlZl94X2lkeCksCi0JCSAgICAgSUdVX0lOVF9OT1AsIDEpOwotCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBUU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdF9pZHgpLAotCQkgICAgIElHVV9JTlRfRU5BQkxFLCAxKTsKLQotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgYm54MnhfbXNpeF9zcF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKi8KLQlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKLQkJRFAoQk5YMlhfTVNHX1NQLCAiY2FsbGVkIGJ1dCBpbnRyX3NlbSBub3QgMCwgcmV0dXJuaW5nXG4iKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBYU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLSNlbmRpZgotCi0Jc2NoZWR1bGVfd29yaygmYnAtPnNwX3Rhc2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi0vKiBlbmQgb2Ygc2xvdyBwYXRoICovCi0KLS8qIFN0YXRpc3RpY3MgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogTWFjcm9zCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFVQREFURV9TVEFUKHMsIHQpIFwKLQlkbyB7IFwKLQkJZXN0YXRzLT50ICs9IG5ldy0+cyAtIG9sZC0+czsgXAotCQlvbGQtPnMgPSBuZXctPnM7IFwKLQl9IHdoaWxlICgwKQotCi0vKiBzdW1baGk6bG9dICs9IGFkZFtoaTpsb10gKi8KLSNkZWZpbmUgQUREXzY0KHNfaGksIGFfaGksIHNfbG8sIGFfbG8pIFwKLQlkbyB7IFwKLQkJc19sbyArPSBhX2xvOyBcCi0JCXNfaGkgKz0gYV9oaSArIChzX2xvIDwgYV9sbykgPyAxIDogMDsgXAotCX0gd2hpbGUgKDApCi0KLS8qIGRpZmZlcmVuY2UgPSBtaW51ZW5kIC0gc3VidHJhaGVuZCAqLwotI2RlZmluZSBESUZGXzY0KGRfaGksIG1faGksIHNfaGksIGRfbG8sIG1fbG8sIHNfbG8pIFwKLQlkbyB7IFwKLQkJaWYgKG1fbG8gPCBzX2xvKSB7ICAgICAgLyogdW5kZXJmbG93ICovIFwKLQkJCWRfaGkgPSBtX2hpIC0gc19oaTsgXAotCQkJaWYgKGRfaGkgPiAwKSB7IC8qIHdlIGNhbiAnbG9hbicgMSAqLyBcCi0JCQkJZF9oaS0tOyBcCi0JCQkJZF9sbyA9IG1fbG8gKyAoVUlOVF9NQVggLSBzX2xvKSArIDE7IFwKLQkJCX0gZWxzZSB7CS8qIG1faGkgPD0gc19oaSAqLyBcCi0JCQkJZF9oaSA9IDA7IFwKLQkJCQlkX2xvID0gMDsgXAotCQkJfSBcCi0JCX0gZWxzZSB7CQkvKiBtX2xvID49IHNfbG8gKi8gXAotCQkJaWYgKG1faGkgPCBzX2hpKSB7IFwKLQkJCSAgICBkX2hpID0gMDsgXAotCQkJICAgIGRfbG8gPSAwOyBcCi0JCQl9IGVsc2UgewkvKiBtX2hpID49IHNfaGkgKi8gXAotCQkJICAgIGRfaGkgPSBtX2hpIC0gc19oaTsgXAotCQkJICAgIGRfbG8gPSBtX2xvIC0gc19sbzsgXAotCQkJfSBcCi0JCX0gXAotCX0gd2hpbGUgKDApCi0KLS8qIG1pbnVlbmQgLT0gc3VidHJhaGVuZCAqLwotI2RlZmluZSBTVUJfNjQobV9oaSwgc19oaSwgbV9sbywgc19sbykgXAotCWRvIHsgXAotCQlESUZGXzY0KG1faGksIG1faGksIHNfaGksIG1fbG8sIG1fbG8sIHNfbG8pOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBVUERBVEVfU1RBVDY0KHNfaGksIHRfaGksIHNfbG8sIHRfbG8pIFwKLQlkbyB7IFwKLQkJRElGRl82NChkaWZmLmhpLCBuZXctPnNfaGksIG9sZC0+c19oaSwgXAotCQkJZGlmZi5sbywgbmV3LT5zX2xvLCBvbGQtPnNfbG8pOyBcCi0JCW9sZC0+c19oaSA9IG5ldy0+c19oaTsgXAotCQlvbGQtPnNfbG8gPSBuZXctPnNfbG87IFwKLQkJQUREXzY0KGVzdGF0cy0+dF9oaSwgZGlmZi5oaSwgXAotCQkgICAgICAgZXN0YXRzLT50X2xvLCBkaWZmLmxvKTsgXAotCX0gd2hpbGUgKDApCi0KLS8qIHN1bVtoaTpsb10gKz0gYWRkICovCi0jZGVmaW5lIEFERF9FWFRFTkRfNjQoc19oaSwgc19sbywgYSkgXAotCWRvIHsgXAotCQlzX2xvICs9IGE7IFwKLQkJc19oaSArPSAoc19sbyA8IGEpID8gMSA6IDA7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFVQREFURV9FWFRFTkRfU1RBVChzLCB0X2hpLCB0X2xvKSBcCi0JZG8geyBcCi0JCUFERF9FWFRFTkRfNjQoZXN0YXRzLT50X2hpLCBlc3RhdHMtPnRfbG8sIG5ldy0+cyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFVQREFURV9FWFRFTkRfVFNUQVQocywgdF9oaSwgdF9sbykgXAotCWRvIHsgXAotCQlkaWZmID0gbGUzMl90b19jcHUodGNsaWVudC0+cykgLSBvbGRfdGNsaWVudC0+czsgXAotCQlvbGRfdGNsaWVudC0+cyA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPnMpOyBcCi0JCUFERF9FWFRFTkRfNjQoZXN0YXRzLT50X2hpLCBlc3RhdHMtPnRfbG8sIGRpZmYpOyBcCi0JfSB3aGlsZSAoMCkKLQotLyoKLSAqIEdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi1zdGF0aWMgaW5saW5lIGxvbmcgYm54MnhfaGlsbyh1MzIgKmhpcmVmKQotewotCXUzMiBsbyA9ICooaGlyZWYgKyAxKTsKLSNpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKLQl1MzIgaGkgPSAqaGlyZWY7Ci0KLQlyZXR1cm4gSElMT19VNjQoaGksIGxvKTsKLSNlbHNlCi0JcmV0dXJuIGxvOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBJbml0IHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9tYWNfc3RhdHMoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlOwotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0JaW50IGxvYWRlcl9pZHggPSBwb3J0ICogODsKLQl1MzIgb3Bjb2RlOwotCXUzMiBtYWNfYWRkcjsKLQotCWJwLT5leGVjdXRlcl9pZHggPSAwOwotCWlmIChicC0+ZndfbWIpIHsKLQkJLyogTUNQICovCi0JCW9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8Ci0JCQkgIERNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCQkgIERNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAotI2Vsc2UKLQkJCSAgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAotI2VuZGlmCi0JCQkgIChwb3J0ID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSk7Ci0KLQkJaWYgKGJwLT5saW5rX3VwKQotCQkJb3Bjb2RlIHw9IChETUFFX0NNRF9DX0RTVF9HUkMgfCBETUFFX0NNRF9DX0VOQUJMRSk7Ci0KLQkJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOwotCQlkbWFlLT5vcGNvZGUgPSBvcGNvZGU7Ci0JCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGV0aF9zdGF0cykgKwotCQkJCQkgICBzaXplb2YodTMyKSk7Ci0JCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGV0aF9zdGF0cykgKwotCQkJCQkgICBzaXplb2YodTMyKSk7Ci0JCWRtYWUtPmRzdF9hZGRyX2xvID0gYnAtPmZ3X21iID4+IDI7Ci0JCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKLQkJZG1hZS0+bGVuID0gKG9mZnNldG9mKHN0cnVjdCBibngyeF9ldGhfc3RhdHMsIG1hY19zdHhfZW5kKSAtCi0JCQkgICAgIHNpemVvZih1MzIpKSA+PiAyOwotCQlpZiAoYnAtPmxpbmtfdXApIHsKLQkJCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKLQkJCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7Ci0JCQlkbWFlLT5jb21wX3ZhbCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlkbWFlLT5jb21wX2FkZHJfbG8gPSAwOwotCQkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKLQkJCWRtYWUtPmNvbXBfdmFsID0gMDsKLQkJfQotCX0KLQotCWlmICghYnAtPmxpbmtfdXApIHsKLQkJLyogbm8gbmVlZCB0byBjb2xsZWN0IHN0YXRpc3RpY3MgaW4gbGluayBkb3duICovCi0JCXJldHVybjsKLQl9Ci0KLQlvcGNvZGUgPSAoRE1BRV9DTURfU1JDX0dSQyB8IERNQUVfQ01EX0RTVF9QQ0kgfAotCQkgIERNQUVfQ01EX0NfRFNUX0dSQyB8IERNQUVfQ01EX0NfRU5BQkxFIHwKLQkJICBETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAotI2lmZGVmIF9fQklHX0VORElBTgotCQkgIERNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAotI2Vsc2UKLQkJICBETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8Ci0jZW5kaWYKLQkJICAocG9ydCA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkpOwotCi0JaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfQk1BQ19GTEFHKSB7Ci0KLQkJbWFjX2FkZHIgPSAocG9ydCA/IE5JR19SRUdfSU5HUkVTU19CTUFDMV9NRU0gOgotCQkJCSAgIE5JR19SRUdfSU5HUkVTU19CTUFDMF9NRU0pOwotCi0JCS8qIEJJR01BQ19SRUdJU1RFUl9UWF9TVEFUX0dUUEtUIC4uCi0JCSAgIEJJR01BQ19SRUdJU1RFUl9UWF9TVEFUX0dUQllUICovCi0JCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKLQkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOwotCQlkbWFlLT5zcmNfYWRkcl9sbyA9IChtYWNfYWRkciArCi0JCQkJICAgICBCSUdNQUNfUkVHSVNURVJfVFhfU1RBVF9HVFBLVCkgPj4gMjsKLQkJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOwotCQlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpKTsKLQkJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSk7Ci0JCWRtYWUtPmxlbiA9ICg4ICsgQklHTUFDX1JFR0lTVEVSX1RYX1NUQVRfR1RCWVQgLQotCQkJICAgICBCSUdNQUNfUkVHSVNURVJfVFhfU1RBVF9HVFBLVCkgPj4gMjsKLQkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOwotCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOwotCQlkbWFlLT5jb21wX3ZhbCA9IDE7Ci0KLQkJLyogQklHTUFDX1JFR0lTVEVSX1JYX1NUQVRfR1I2NCAuLgotCQkgICBCSUdNQUNfUkVHSVNURVJfUlhfU1RBVF9HUklQSiAqLwotCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7Ci0JCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKLQkJZG1hZS0+c3JjX2FkZHJfbG8gPSAobWFjX2FkZHIgKwotCQkJCSAgICAgQklHTUFDX1JFR0lTVEVSX1JYX1NUQVRfR1I2NCkgPj4gMjsKLQkJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOwotCQlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpICsKLQkJCQkJb2Zmc2V0b2Yoc3RydWN0IGJtYWNfc3RhdHMsIHJ4X2dyNjQpKTsKLQkJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSArCi0JCQkJCW9mZnNldG9mKHN0cnVjdCBibWFjX3N0YXRzLCByeF9ncjY0KSk7Ci0JCWRtYWUtPmxlbiA9ICg4ICsgQklHTUFDX1JFR0lTVEVSX1JYX1NUQVRfR1JJUEogLQotCQkJICAgICBCSUdNQUNfUkVHSVNURVJfUlhfU1RBVF9HUjY0KSA+PiAyOwotCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7Ci0JCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmNvbXBfdmFsID0gMTsKLQotCX0gZWxzZSBpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9FTUFDX0ZMQUcpIHsKLQotCQltYWNfYWRkciA9IChwb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzApOwotCi0JCS8qIEVNQUNfUkVHX0VNQUNfUlhfU1RBVF9BQyAoRU1BQ19SRUdfRU1BQ19SWF9TVEFUX0FDX0NPVU5UKSovCi0JCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKLQkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOwotCQlkbWFlLT5zcmNfYWRkcl9sbyA9IChtYWNfYWRkciArCi0JCQkJICAgICBFTUFDX1JFR19FTUFDX1JYX1NUQVRfQUMpID4+IDI7Ci0JCWRtYWUtPnNyY19hZGRyX2hpID0gMDsKLQkJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSk7Ci0JCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykpOwotCQlkbWFlLT5sZW4gPSBFTUFDX1JFR19FTUFDX1JYX1NUQVRfQUNfQ09VTlQ7Ci0JCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKLQkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKLQkJZG1hZS0+Y29tcF92YWwgPSAxOwotCi0JCS8qIEVNQUNfUkVHX0VNQUNfUlhfU1RBVF9BQ18yOCAqLwotCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7Ci0JCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKLQkJZG1hZS0+c3JjX2FkZHJfbG8gPSAobWFjX2FkZHIgKwotCQkJCSAgICAgRU1BQ19SRUdfRU1BQ19SWF9TVEFUX0FDXzI4KSA+PiAyOwotCQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKwotCQkJCQkgICBvZmZzZXRvZihzdHJ1Y3QgZW1hY19zdGF0cywKLQkJCQkJCSAgICByeF9mYWxzZWNhcnJpZXJlcnJvcnMpKTsKLQkJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSArCi0JCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBlbWFjX3N0YXRzLAotCQkJCQkJICAgIHJ4X2ZhbHNlY2FycmllcmVycm9ycykpOwotCQlkbWFlLT5sZW4gPSAxOwotCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7Ci0JCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmNvbXBfdmFsID0gMTsKLQotCQkvKiBFTUFDX1JFR19FTUFDX1RYX1NUQVRfQUMgKEVNQUNfUkVHX0VNQUNfVFhfU1RBVF9BQ19DT1VOVCkqLwotCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7Ci0JCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKLQkJZG1hZS0+c3JjX2FkZHJfbG8gPSAobWFjX2FkZHIgKwotCQkJCSAgICAgRU1BQ19SRUdfRU1BQ19UWF9TVEFUX0FDKSA+PiAyOwotCQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKwotCQkJCQkgICBvZmZzZXRvZihzdHJ1Y3QgZW1hY19zdGF0cywKLQkJCQkJCSAgICB0eF9pZmhjb3V0b2N0ZXRzKSk7Ci0JCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKwotCQkJCQkgICBvZmZzZXRvZihzdHJ1Y3QgZW1hY19zdGF0cywKLQkJCQkJCSAgICB0eF9pZmhjb3V0b2N0ZXRzKSk7Ci0JCWRtYWUtPmxlbiA9IEVNQUNfUkVHX0VNQUNfVFhfU1RBVF9BQ19DT1VOVDsKLQkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOwotCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOwotCQlkbWFlLT5jb21wX3ZhbCA9IDE7Ci0JfQotCi0JLyogTklHICovCi0JZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOwotCWRtYWUtPm9wY29kZSA9IChETUFFX0NNRF9TUkNfR1JDIHwgRE1BRV9DTURfRFNUX1BDSSB8Ci0JCQlETUFFX0NNRF9DX0RTVF9QQ0kgfCBETUFFX0NNRF9DX0VOQUJMRSB8Ci0JCQlETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAotI2lmZGVmIF9fQklHX0VORElBTgotCQkJRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8Ci0jZWxzZQotCQkJRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAotI2VuZGlmCi0JCQkocG9ydCA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkpOwotCWRtYWUtPnNyY19hZGRyX2xvID0gKHBvcnQgPyBOSUdfUkVHX1NUQVQxX0JSQl9ESVNDQVJEIDoKLQkJCQkgICAgTklHX1JFR19TVEFUMF9CUkJfRElTQ0FSRCkgPj4gMjsKLQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7Ci0JZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnKSk7Ci0JZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnKSk7Ci0JZG1hZS0+bGVuID0gKHNpemVvZihzdHJ1Y3QgbmlnX3N0YXRzKSAtIDIqc2l6ZW9mKHUzMikpID4+IDI7Ci0JZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG5pZykgKwotCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgbmlnX3N0YXRzLCBkb25lKSk7Ci0JZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG5pZykgKwotCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgbmlnX3N0YXRzLCBkb25lKSk7Ci0JZG1hZS0+Y29tcF92YWwgPSAweGZmZmZmZmZmOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9pbml0X3N0YXRzKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQotCWJwLT5zdGF0c19zdGF0ZSA9IFNUQVRTX1NUQVRFX0RJU0FCTEU7Ci0JYnAtPmV4ZWN1dGVyX2lkeCA9IDA7Ci0KLQlicC0+b2xkX2JyYl9kaXNjYXJkID0gUkVHX1JEKGJwLAotCQkJCSAgICAgTklHX1JFR19TVEFUMF9CUkJfRElTQ0FSRCArIHBvcnQqMHgzOCk7Ci0KLQltZW1zZXQoJmJwLT5vbGRfYm1hYywgMCwgc2l6ZW9mKHN0cnVjdCBibWFjX3N0YXRzKSk7Ci0JbWVtc2V0KCZicC0+b2xkX3RjbGllbnQsIDAsIHNpemVvZihzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKLQltZW1zZXQoJmJwLT5kZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKLQotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSwgMSk7Ci0JUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCSAgICAgICBYU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKHBvcnQpICsgNCwgMCk7Ci0KLQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArIFRTVE9STV9TVEFUU19GTEFHU19PRkZTRVQocG9ydCksIDEpOwotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSArIDQsIDApOwotCi0JUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKHBvcnQpLCAwKTsKLQlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JICAgICAgIENTVE9STV9TVEFUU19GTEFHU19PRkZTRVQocG9ydCkgKyA0LCAwKTsKLQotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgWFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChwb3J0KSwKLQkgICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOwotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgWFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChwb3J0KSArIDQsCi0JICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKLQotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChwb3J0KSwKLQkgICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOwotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChwb3J0KSArIDQsCi0JICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc3RvcF9zdGF0cyhzdHJ1Y3QgYm54MnggKmJwKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0JaWYgKGJwLT5zdGF0c19zdGF0ZSAhPSBTVEFUU19TVEFURV9ESVNBQkxFKSB7Ci0JCWludCB0aW1lb3V0ID0gMTA7Ci0KLQkJYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfU1RPUDsKLQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHNfc3RhdGUgLSBTVE9QXG4iKTsKLQotCQl3aGlsZSAoYnAtPnN0YXRzX3N0YXRlICE9IFNUQVRTX1NUQVRFX0RJU0FCTEUpIHsKLQkJCWlmICghdGltZW91dCkgewotCQkJCUJOWDJYX0VSUigidGltZW91dCB3YWl0aW5nIGZvciBzdGF0cyBzdG9wXG4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXRpbWVvdXQtLTsKLQkJCW1zbGVlcCgxMDApOwotCQl9Ci0JfQotCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRzX3N0YXRlIC0gRElTQUJMRVxuIik7Ci19Ci0KLS8qCi0gKiBTdGF0aXN0aWNzIHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX2JtYWNfc3RhdHMoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlzdHJ1Y3QgcmVncCBkaWZmOwotCXN0cnVjdCByZWdwIHN1bTsKLQlzdHJ1Y3QgYm1hY19zdGF0cyAqbmV3ID0gYm54Mnhfc3AoYnAsIG1hY19zdGF0cy5ibWFjKTsKLQlzdHJ1Y3QgYm1hY19zdGF0cyAqb2xkID0gJmJwLT5vbGRfYm1hYzsKLQlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSBibngyeF9zcChicCwgZXRoX3N0YXRzKTsKLQotCXN1bS5oaSA9IDA7Ci0Jc3VtLmxvID0gMDsKLQotCVVQREFURV9TVEFUNjQodHhfZ3RieXQuaGksIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpLAotCQkgICAgICB0eF9ndGJ5dC5sbywgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8pOwotCi0JVVBEQVRFX1NUQVQ2NCh0eF9ndG1jYS5oaSwgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCi0JCSAgICAgIHR4X2d0bWNhLmxvLCB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbyk7Ci0JQUREXzY0KHN1bS5oaSwgZGlmZi5oaSwgc3VtLmxvLCBkaWZmLmxvKTsKLQotCVVQREFURV9TVEFUNjQodHhfZ3RnY2EuaGksIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAotCQkgICAgICB0eF9ndGdjYS5sbywgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOwotCUFERF82NChzdW0uaGksIGRpZmYuaGksIHN1bS5sbywgZGlmZi5sbyk7Ci0KLQlVUERBVEVfU1RBVDY0KHR4X2d0cGt0LmhpLCB0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCi0JCSAgICAgIHR4X2d0cGt0LmxvLCB0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOwotCVNVQl82NChlc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwgc3VtLmhpLAotCSAgICAgICBlc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbywgc3VtLmxvKTsKLQotCVVQREFURV9TVEFUKHR4X2d0eHBmLmxvLCBwYXVzZV94b2ZmX2ZyYW1lc190cmFuc21pdHRlZCk7Ci0JVVBEQVRFX1NUQVQodHhfZ3Q2NC5sbywgZnJhbWVzX3RyYW5zbWl0dGVkXzY0X2J5dGVzKTsKLQlVUERBVEVfU1RBVCh0eF9ndDEyNy5sbywgZnJhbWVzX3RyYW5zbWl0dGVkXzY1XzEyN19ieXRlcyk7Ci0JVVBEQVRFX1NUQVQodHhfZ3QyNTUubG8sIGZyYW1lc190cmFuc21pdHRlZF8xMjhfMjU1X2J5dGVzKTsKLQlVUERBVEVfU1RBVCh0eF9ndDUxMS5sbywgZnJhbWVzX3RyYW5zbWl0dGVkXzI1Nl81MTFfYnl0ZXMpOwotCVVQREFURV9TVEFUKHR4X2d0MTAyMy5sbywgZnJhbWVzX3RyYW5zbWl0dGVkXzUxMl8xMDIzX2J5dGVzKTsKLQlVUERBVEVfU1RBVCh0eF9ndDE1MTgubG8sIGZyYW1lc190cmFuc21pdHRlZF8xMDI0XzE1MjJfYnl0ZXMpOwotCVVQREFURV9TVEFUKHR4X2d0MjA0Ny5sbywgZnJhbWVzX3RyYW5zbWl0dGVkXzE1MjNfOTAyMl9ieXRlcyk7Ci0JVVBEQVRFX1NUQVQodHhfZ3Q0MDk1LmxvLCBmcmFtZXNfdHJhbnNtaXR0ZWRfMTUyM185MDIyX2J5dGVzKTsKLQlVUERBVEVfU1RBVCh0eF9ndDkyMTYubG8sIGZyYW1lc190cmFuc21pdHRlZF8xNTIzXzkwMjJfYnl0ZXMpOwotCVVQREFURV9TVEFUKHR4X2d0MTYzODMubG8sIGZyYW1lc190cmFuc21pdHRlZF8xNTIzXzkwMjJfYnl0ZXMpOwotCi0JVVBEQVRFX1NUQVQocnhfZ3JmY3MubG8sIGNyY19yZWNlaXZlX2Vycm9ycyk7Ci0JVVBEQVRFX1NUQVQocnhfZ3J1bmQubG8sIHJ1bnRfcGFja2V0c19yZWNlaXZlZCk7Ci0JVVBEQVRFX1NUQVQocnhfZ3JvdnIubG8sIHN0YXRfRG90M3N0YXRzRnJhbWVzVG9vTG9uZyk7Ci0JVVBEQVRFX1NUQVQocnhfZ3J4cGYubG8sIHBhdXNlX3hvZmZfZnJhbWVzX3JlY2VpdmVkKTsKLQlVUERBVEVfU1RBVChyeF9ncnhjZi5sbywgY29udHJvbF9mcmFtZXNfcmVjZWl2ZWQpOwotCS8qIFVQREFURV9TVEFUKHJ4X2dyeHBmLmxvLCBjb250cm9sX2ZyYW1lc19yZWNlaXZlZCk7ICovCi0JVVBEQVRFX1NUQVQocnhfZ3JmcmcubG8sIGVycm9yX3J1bnRfcGFja2V0c19yZWNlaXZlZCk7Ci0JVVBEQVRFX1NUQVQocnhfZ3JqYnIubG8sIGVycm9yX2phYmJlcl9wYWNrZXRzX3JlY2VpdmVkKTsKLQotCVVQREFURV9TVEFUNjQocnhfZ3JlcmIuaGksIHN0YXRfSWZIQ0luQmFkT2N0ZXRzX2hpLAotCQkgICAgICByeF9ncmVyYi5sbywgc3RhdF9JZkhDSW5CYWRPY3RldHNfbG8pOwotCVVQREFURV9TVEFUNjQodHhfZ3R1ZmwuaGksIHN0YXRfSWZIQ091dEJhZE9jdGV0c19oaSwKLQkJICAgICAgdHhfZ3R1ZmwubG8sIHN0YXRfSWZIQ091dEJhZE9jdGV0c19sbyk7Ci0JVVBEQVRFX1NUQVQodHhfZ3RlcnIubG8sIHN0YXRfRG90M3N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyk7Ci0JLyogVVBEQVRFX1NUQVQocnhfZ3J4cGYubG8sIHN0YXRfWG9mZlN0YXRlRW50ZXJlZCk7ICovCi0JZXN0YXRzLT5zdGF0X1hvZmZTdGF0ZUVudGVyZWQgPSBlc3RhdHMtPnBhdXNlX3hvZmZfZnJhbWVzX3JlY2VpdmVkOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF91cGRhdGVfZW1hY19zdGF0cyhzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBlbWFjX3N0YXRzICpuZXcgPSBibngyeF9zcChicCwgbWFjX3N0YXRzLmVtYWMpOwotCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9IGJueDJ4X3NwKGJwLCBldGhfc3RhdHMpOwotCi0JVVBEQVRFX0VYVEVORF9TVEFUKHR4X2lmaGNvdXRvY3RldHMsIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpLAotCQkJCQkgICAgIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvKTsKLQlVUERBVEVfRVhURU5EX1NUQVQodHhfaWZoY291dHVjYXN0cGt0cywKLQkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAotCQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOwotCVVQREFURV9FWFRFTkRfU1RBVCh0eF9pZmhjb3V0bXVsdGljYXN0cGt0cywKLQkJCQkgICAgICB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKLQkJCQkgICAgICB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbyk7Ci0JVVBEQVRFX0VYVEVORF9TVEFUKHR4X2lmaGNvdXRicm9hZGNhc3Rwa3RzLAotCQkJCSAgICAgIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAotCQkJCSAgICAgIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvKTsKLQotCWVzdGF0cy0+cGF1c2VfeG9uX2ZyYW1lc190cmFuc21pdHRlZCArPSBuZXctPnR4X291dHhvbnNlbnQ7Ci0JZXN0YXRzLT5wYXVzZV94b2ZmX2ZyYW1lc190cmFuc21pdHRlZCArPSBuZXctPnR4X291dHhvZmZzZW50OwotCWVzdGF0cy0+c2luZ2xlX2NvbGxpc2lvbl90cmFuc21pdF9mcmFtZXMgKz0KLQkJCQluZXctPnR4X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lczsKLQllc3RhdHMtPm11bHRpcGxlX2NvbGxpc2lvbl90cmFuc21pdF9mcmFtZXMgKz0KLQkJCQluZXctPnR4X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzOwotCWVzdGF0cy0+bGF0ZV9jb2xsaXNpb25fZnJhbWVzICs9IG5ldy0+dHhfZG90M3N0YXRzbGF0ZWNvbGxpc2lvbnM7Ci0JZXN0YXRzLT5leGNlc3NpdmVfY29sbGlzaW9uX2ZyYW1lcyArPQotCQkJCW5ldy0+dHhfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uczsKLQllc3RhdHMtPmZyYW1lc190cmFuc21pdHRlZF82NF9ieXRlcyArPSBuZXctPnR4X2V0aGVyc3RhdHNwa3RzNjRvY3RldHM7Ci0JZXN0YXRzLT5mcmFtZXNfdHJhbnNtaXR0ZWRfNjVfMTI3X2J5dGVzICs9Ci0JCQkJbmV3LT50eF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHM7Ci0JZXN0YXRzLT5mcmFtZXNfdHJhbnNtaXR0ZWRfMTI4XzI1NV9ieXRlcyArPQotCQkJCW5ldy0+dHhfZXRoZXJzdGF0c3BrdHMxMjhvY3RldHN0bzI1NW9jdGV0czsKLQllc3RhdHMtPmZyYW1lc190cmFuc21pdHRlZF8yNTZfNTExX2J5dGVzICs9Ci0JCQkJbmV3LT50eF9ldGhlcnN0YXRzcGt0czI1Nm9jdGV0c3RvNTExb2N0ZXRzOwotCWVzdGF0cy0+ZnJhbWVzX3RyYW5zbWl0dGVkXzUxMl8xMDIzX2J5dGVzICs9Ci0JCQkJbmV3LT50eF9ldGhlcnN0YXRzcGt0czUxMm9jdGV0c3RvMTAyM29jdGV0czsKLQllc3RhdHMtPmZyYW1lc190cmFuc21pdHRlZF8xMDI0XzE1MjJfYnl0ZXMgKz0KLQkJCQluZXctPnR4X2V0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0OwotCWVzdGF0cy0+ZnJhbWVzX3RyYW5zbWl0dGVkXzE1MjNfOTAyMl9ieXRlcyArPQotCQkJCW5ldy0+dHhfZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0czsKLQotCWVzdGF0cy0+Y3JjX3JlY2VpdmVfZXJyb3JzICs9IG5ldy0+cnhfZG90M3N0YXRzZmNzZXJyb3JzOwotCWVzdGF0cy0+YWxpZ25tZW50X2Vycm9ycyArPSBuZXctPnJ4X2RvdDNzdGF0c2FsaWdubWVudGVycm9yczsKLQllc3RhdHMtPmZhbHNlX2NhcnJpZXJfZGV0ZWN0aW9ucyArPSBuZXctPnJ4X2ZhbHNlY2FycmllcmVycm9yczsKLQllc3RhdHMtPnJ1bnRfcGFja2V0c19yZWNlaXZlZCArPSBuZXctPnJ4X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzOwotCWVzdGF0cy0+c3RhdF9Eb3Qzc3RhdHNGcmFtZXNUb29Mb25nICs9IG5ldy0+cnhfZG90M3N0YXRzZnJhbWVzdG9vbG9uZzsKLQllc3RhdHMtPnBhdXNlX3hvbl9mcmFtZXNfcmVjZWl2ZWQgKz0gbmV3LT5yeF94b25wYXVzZWZyYW1lc3JlY2VpdmVkOwotCWVzdGF0cy0+cGF1c2VfeG9mZl9mcmFtZXNfcmVjZWl2ZWQgKz0gbmV3LT5yeF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZDsKLQllc3RhdHMtPmNvbnRyb2xfZnJhbWVzX3JlY2VpdmVkICs9IG5ldy0+cnhfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkOwotCWVzdGF0cy0+ZXJyb3JfcnVudF9wYWNrZXRzX3JlY2VpdmVkICs9IG5ldy0+cnhfZXRoZXJzdGF0c2ZyYWdtZW50czsKLQllc3RhdHMtPmVycm9yX2phYmJlcl9wYWNrZXRzX3JlY2VpdmVkICs9IG5ldy0+cnhfZXRoZXJzdGF0c2phYmJlcnM7Ci0KLQlVUERBVEVfRVhURU5EX1NUQVQocnhfaWZoY2luYmFkb2N0ZXRzLCBzdGF0X0lmSENJbkJhZE9jdGV0c19oaSwKLQkJCQkJICAgICAgIHN0YXRfSWZIQ0luQmFkT2N0ZXRzX2xvKTsKLQlVUERBVEVfRVhURU5EX1NUQVQodHhfaWZoY291dGJhZG9jdGV0cywgc3RhdF9JZkhDT3V0QmFkT2N0ZXRzX2hpLAotCQkJCQkJc3RhdF9JZkhDT3V0QmFkT2N0ZXRzX2xvKTsKLQllc3RhdHMtPnN0YXRfRG90M3N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyArPQotCQkJCW5ldy0+dHhfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yczsKLQllc3RhdHMtPnN0YXRfRG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzICs9Ci0JCQkJbmV3LT5yeF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnM7Ci0JZXN0YXRzLT5zdGF0X0RvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyArPQotCQkJCW5ldy0+dHhfZG90M3N0YXRzZGVmZXJyZWR0cmFuc21pc3Npb25zOwotCWVzdGF0cy0+c3RhdF9GbG93Q29udHJvbERvbmUgKz0gbmV3LT50eF9mbG93Y29udHJvbGRvbmU7Ci0JZXN0YXRzLT5zdGF0X1hvZmZTdGF0ZUVudGVyZWQgKz0gbmV3LT5yeF94b2Zmc3RhdGVlbnRlcmVkOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3VwZGF0ZV9zdG9ybV9zdGF0cyhzdHJ1Y3QgYm54MnggKmJwKQotewotCXN0cnVjdCBldGhfc3RhdHNfcXVlcnkgKnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ3X3N0YXRzKTsKLQlzdHJ1Y3QgdHN0b3JtX2NvbW1vbl9zdGF0cyAqdHN0YXRzID0gJnN0YXRzLT50c3Rvcm1fY29tbW9uOwotCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqdGNsaWVudCA9Ci0JCQkJCQkmdHN0YXRzLT5jbGllbnRfc3RhdGlzdGljc1swXTsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0gJmJwLT5vbGRfdGNsaWVudDsKLQlzdHJ1Y3QgeHN0b3JtX2NvbW1vbl9zdGF0cyAqeHN0YXRzID0gJnN0YXRzLT54c3Rvcm1fY29tbW9uOwotCXN0cnVjdCBuaWdfc3RhdHMgKm5zdGF0cyA9IGJueDJ4X3NwKGJwLCBuaWcpOwotCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9IGJueDJ4X3NwKGJwLCBldGhfc3RhdHMpOwotCXUzMiBkaWZmOwotCi0JLyogYXJlIERNQUUgc3RhdHMgdmFsaWQ/ICovCi0JaWYgKG5zdGF0cy0+ZG9uZSAhPSAweGZmZmZmZmZmKSB7Ci0JCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRzIG5vdCB1cGRhdGVkIGJ5IGRtYWVcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogYXJlIHN0b3JtIHN0YXRzIHZhbGlkPyAqLwotCWlmICh0c3RhdHMtPmRvbmUuaGkgIT0gMHhmZmZmZmZmZikgewotCQlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0cyBub3QgdXBkYXRlZCBieSB0c3Rvcm1cbiIpOwotCQlyZXR1cm4gLTI7Ci0JfQotCWlmICh4c3RhdHMtPmRvbmUuaGkgIT0gMHhmZmZmZmZmZikgewotCQlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0cyBub3QgdXBkYXRlZCBieSB4c3Rvcm1cbiIpOwotCQlyZXR1cm4gLTM7Ci0JfQotCi0JZXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSA9Ci0JZXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+dG90YWxfcmN2X2J5dGVzLmhpKTsKLQllc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvID0KLQllc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfYnl0ZXMubG8pOwotCUFERF82NChlc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAotCSAgICAgICBsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfZXJyb3JfYnl0ZXMuaGkpLAotCSAgICAgICBlc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAotCSAgICAgICBsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfZXJyb3JfYnl0ZXMubG8pKTsKLQotCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X3VuaWNhc3RfcGt0cywKLQkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAotCQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOwotCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X211bHRpY2FzdF9wa3RzLAotCQkJCQl0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKLQkJCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOwotCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X2Jyb2FkY2FzdF9wa3RzLAotCQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKLQkJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOwotCi0JZXN0YXRzLT5mcmFtZXNfcmVjZWl2ZWRfNjRfYnl0ZXMgPSBNQUNfU1RYX05BOwotCWVzdGF0cy0+ZnJhbWVzX3JlY2VpdmVkXzY1XzEyN19ieXRlcyA9IE1BQ19TVFhfTkE7Ci0JZXN0YXRzLT5mcmFtZXNfcmVjZWl2ZWRfMTI4XzI1NV9ieXRlcyA9IE1BQ19TVFhfTkE7Ci0JZXN0YXRzLT5mcmFtZXNfcmVjZWl2ZWRfMjU2XzUxMV9ieXRlcyA9IE1BQ19TVFhfTkE7Ci0JZXN0YXRzLT5mcmFtZXNfcmVjZWl2ZWRfNTEyXzEwMjNfYnl0ZXMgPSBNQUNfU1RYX05BOwotCWVzdGF0cy0+ZnJhbWVzX3JlY2VpdmVkXzEwMjRfMTUyMl9ieXRlcyA9IE1BQ19TVFhfTkE7Ci0JZXN0YXRzLT5mcmFtZXNfcmVjZWl2ZWRfMTUyM185MDIyX2J5dGVzID0gTUFDX1NUWF9OQTsKLQotCWVzdGF0cy0+eF90b3RhbF9zZW50X2J5dGVzX2hpID0KLQkJCQlsZTMyX3RvX2NwdSh4c3RhdHMtPnRvdGFsX3NlbnRfYnl0ZXMuaGkpOwotCWVzdGF0cy0+eF90b3RhbF9zZW50X2J5dGVzX2xvID0KLQkJCQlsZTMyX3RvX2NwdSh4c3RhdHMtPnRvdGFsX3NlbnRfYnl0ZXMubG8pOwotCWVzdGF0cy0+eF90b3RhbF9zZW50X3BrdHMgPSBsZTMyX3RvX2NwdSh4c3RhdHMtPnRvdGFsX3NlbnRfcGt0cyk7Ci0KLQllc3RhdHMtPnRfcmN2X3VuaWNhc3RfYnl0ZXNfaGkgPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmhpKTsKLQllc3RhdHMtPnRfcmN2X3VuaWNhc3RfYnl0ZXNfbG8gPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmxvKTsKLQllc3RhdHMtPnRfcmN2X2Jyb2FkY2FzdF9ieXRlc19oaSA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5oaSk7Ci0JZXN0YXRzLT50X3Jjdl9icm9hZGNhc3RfYnl0ZXNfbG8gPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMubG8pOwotCWVzdGF0cy0+dF9yY3ZfbXVsdGljYXN0X2J5dGVzX2hpID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmhpKTsKLQllc3RhdHMtPnRfcmN2X211bHRpY2FzdF9ieXRlc19sbyA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5sbyk7Ci0JZXN0YXRzLT50X3RvdGFsX3Jjdl9wa3QgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfcGt0cyk7Ci0KLQllc3RhdHMtPmNoZWNrc3VtX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkKTsKLQllc3RhdHMtPnBhY2tldHNfdG9vX2JpZ19kaXNjYXJkID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5wYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCk7Ci0JZXN0YXRzLT5qYWJiZXJfcGFja2V0c19yZWNlaXZlZCA9IGVzdGF0cy0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQgKwotCQkJCQkgIGVzdGF0cy0+c3RhdF9Eb3Qzc3RhdHNGcmFtZXNUb29Mb25nOwotCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkID0gbGUzMl90b19jcHUodGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkKTsKLQllc3RhdHMtPnR0bDBfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPnR0bDBfZGlzY2FyZCk7Ci0JZXN0YXRzLT5tYWNfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPm1hY19kaXNjYXJkKTsKLQllc3RhdHMtPm1hY19maWx0ZXJfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkKTsKLQllc3RhdHMtPnh4b3ZlcmZsb3dfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkKTsKLQllc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkID0KLQkJCQlsZTMyX3RvX2NwdSh0c3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkKTsKLQotCWVzdGF0cy0+YnJiX2Rpc2NhcmQgKz0gbnN0YXRzLT5icmJfZGlzY2FyZCAtIGJwLT5vbGRfYnJiX2Rpc2NhcmQ7Ci0JYnAtPm9sZF9icmJfZGlzY2FyZCA9IG5zdGF0cy0+YnJiX2Rpc2NhcmQ7Ci0KLQllc3RhdHMtPmJyYl9wYWNrZXQgPSBuc3RhdHMtPmJyYl9wYWNrZXQ7Ci0JZXN0YXRzLT5icmJfdHJ1bmNhdGUgPSBuc3RhdHMtPmJyYl90cnVuY2F0ZTsKLQllc3RhdHMtPmZsb3dfY3RybF9kaXNjYXJkID0gbnN0YXRzLT5mbG93X2N0cmxfZGlzY2FyZDsKLQllc3RhdHMtPmZsb3dfY3RybF9vY3RldHMgPSBuc3RhdHMtPmZsb3dfY3RybF9vY3RldHM7Ci0JZXN0YXRzLT5mbG93X2N0cmxfcGFja2V0ID0gbnN0YXRzLT5mbG93X2N0cmxfcGFja2V0OwotCWVzdGF0cy0+bW5nX2Rpc2NhcmQgPSBuc3RhdHMtPm1uZ19kaXNjYXJkOwotCWVzdGF0cy0+bW5nX29jdGV0X2lucCA9IG5zdGF0cy0+bW5nX29jdGV0X2lucDsKLQllc3RhdHMtPm1uZ19vY3RldF9vdXQgPSBuc3RhdHMtPm1uZ19vY3RldF9vdXQ7Ci0JZXN0YXRzLT5tbmdfcGFja2V0X2lucCA9IG5zdGF0cy0+bW5nX3BhY2tldF9pbnA7Ci0JZXN0YXRzLT5tbmdfcGFja2V0X291dCA9IG5zdGF0cy0+bW5nX3BhY2tldF9vdXQ7Ci0JZXN0YXRzLT5wYmZfb2N0ZXRzID0gbnN0YXRzLT5wYmZfb2N0ZXRzOwotCWVzdGF0cy0+cGJmX3BhY2tldCA9IG5zdGF0cy0+cGJmX3BhY2tldDsKLQllc3RhdHMtPnNhZmNfaW5wID0gbnN0YXRzLT5zYWZjX2lucDsKLQotCXhzdGF0cy0+ZG9uZS5oaSA9IDA7Ci0JdHN0YXRzLT5kb25lLmhpID0gMDsKLQluc3RhdHMtPmRvbmUgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3VwZGF0ZV9uZXRfc3RhdHMoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSBibngyeF9zcChicCwgZXRoX3N0YXRzKTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXRzID0gJmJwLT5kZXYtPnN0YXRzOwotCi0JbnN0YXRzLT5yeF9wYWNrZXRzID0KLQkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpICsKLQkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSkgKwotCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKTsKLQotCW5zdGF0cy0+dHhfcGFja2V0cyA9Ci0JCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSArCi0JCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpICsKLQkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSk7Ci0KLQluc3RhdHMtPnJ4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSk7Ci0KLQluc3RhdHMtPnR4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSk7Ci0KLQluc3RhdHMtPnJ4X2Ryb3BwZWQgPSBlc3RhdHMtPmNoZWNrc3VtX2Rpc2NhcmQgKyBlc3RhdHMtPm1hY19kaXNjYXJkOwotCW5zdGF0cy0+dHhfZHJvcHBlZCA9IDA7Ci0KLQluc3RhdHMtPm11bHRpY2FzdCA9Ci0JCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpOwotCi0JbnN0YXRzLT5jb2xsaXNpb25zID0gZXN0YXRzLT5zaW5nbGVfY29sbGlzaW9uX3RyYW5zbWl0X2ZyYW1lcyArCi0JCQkgICAgIGVzdGF0cy0+bXVsdGlwbGVfY29sbGlzaW9uX3RyYW5zbWl0X2ZyYW1lcyArCi0JCQkgICAgIGVzdGF0cy0+bGF0ZV9jb2xsaXNpb25fZnJhbWVzICsKLQkJCSAgICAgZXN0YXRzLT5leGNlc3NpdmVfY29sbGlzaW9uX2ZyYW1lczsKLQotCW5zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IGVzdGF0cy0+cnVudF9wYWNrZXRzX3JlY2VpdmVkICsKLQkJCQkgICBlc3RhdHMtPmphYmJlcl9wYWNrZXRzX3JlY2VpdmVkOwotCW5zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBlc3RhdHMtPmJyYl9kaXNjYXJkICsKLQkJCQkgZXN0YXRzLT5icmJfdHJ1bmNhdGVfZGlzY2FyZDsKLQluc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSBlc3RhdHMtPmNyY19yZWNlaXZlX2Vycm9yczsKLQluc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9IGVzdGF0cy0+YWxpZ25tZW50X2Vycm9yczsKLQluc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gZXN0YXRzLT5ub19idWZmX2Rpc2NhcmQ7Ci0JbnN0YXRzLT5yeF9taXNzZWRfZXJyb3JzID0gZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQ7Ci0KLQluc3RhdHMtPnJ4X2Vycm9ycyA9IG5zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT5yeF9vdmVyX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT5yeF9jcmNfZXJyb3JzICsKLQkJCSAgICBuc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT5yeF9maWZvX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT5yeF9taXNzZWRfZXJyb3JzOwotCi0JbnN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyA9IGVzdGF0cy0+bGF0ZV9jb2xsaXNpb25fZnJhbWVzICsKLQkJCQkgICAgZXN0YXRzLT5leGNlc3NpdmVfY29sbGlzaW9uX2ZyYW1lczsKLQluc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzID0gZXN0YXRzLT5mYWxzZV9jYXJyaWVyX2RldGVjdGlvbnM7Ci0JbnN0YXRzLT50eF9maWZvX2Vycm9ycyA9IDA7Ci0JbnN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzID0gMDsKLQluc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMgPSAwOwotCi0JbnN0YXRzLT50eF9lcnJvcnMgPSBuc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzICsKLQkJCSAgICBuc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzOwotCi0JZXN0YXRzLT5tYWNfc3R4X3N0YXJ0ID0gKytlc3RhdHMtPm1hY19zdHhfZW5kOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF91cGRhdGVfc3RhdHMoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgaTsKLQotCWlmICghYm54MnhfdXBkYXRlX3N0b3JtX3N0YXRzKGJwKSkgewotCi0JCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX0JNQUNfRkxBRykgewotCQkJYm54MnhfdXBkYXRlX2JtYWNfc3RhdHMoYnApOwotCi0JCX0gZWxzZSBpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9FTUFDX0ZMQUcpIHsKLQkJCWJueDJ4X3VwZGF0ZV9lbWFjX3N0YXRzKGJwKTsKLQotCQl9IGVsc2UgeyAvKiB1bnJlYWNoZWQgKi8KLQkJCUJOWDJYX0VSUigibm8gTUFDIGFjdGl2ZVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlibngyeF91cGRhdGVfbmV0X3N0YXRzKGJwKTsKLQl9Ci0KLQlpZiAoYnAtPm1zZ2xldmVsICYgTkVUSUZfTVNHX1RJTUVSKSB7Ci0JCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9IGJueDJ4X3NwKGJwLCBldGhfc3RhdHMpOwotCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXRzID0gJmJwLT5kZXYtPnN0YXRzOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczpcbiIsIGJwLT5kZXYtPm5hbWUpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiICB0eCBhdmFpbCAoJTR4KSAgdHggaGMgaWR4ICgleCkiCi0JCQkJICAiICB0eCBwa3QgKCVseClcbiIsCi0JCSAgICAgICBibngyeF90eF9hdmFpbChicC0+ZnApLAotCQkgICAgICAgKmJwLT5mcC0+dHhfY29uc19zYiwgbnN0YXRzLT50eF9wYWNrZXRzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgcnggdXNhZ2UgKCU0eCkgIHJ4IGhjIGlkeCAoJXgpIgotCQkJCSAgIiAgcnggcGt0ICglbHgpXG4iLAotCQkgICAgICAgKHUxNikoKmJwLT5mcC0+cnhfY29uc19zYiAtIGJwLT5mcC0+cnhfY29tcF9jb25zKSwKLQkJICAgICAgICpicC0+ZnAtPnJ4X2NvbnNfc2IsIG5zdGF0cy0+cnhfcGFja2V0cyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICVzIChYb2ZmIGV2ZW50cyAldSkgIGJyYiBkcm9wcyAldVxuIiwKLQkJICAgICAgIG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldik/ICJYb2ZmIiA6ICJYb24iLAotCQkgICAgICAgZXN0YXRzLT5kcml2ZXJfeG9mZiwgZXN0YXRzLT5icmJfZGlzY2FyZCk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJ0c3RhdHM6IGNoZWNrc3VtX2Rpc2NhcmQgJXUgICIKLQkJCSJwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCAldSAgbm9fYnVmZl9kaXNjYXJkICV1ICAiCi0JCQkibWFjX2Rpc2NhcmQgJXUgIG1hY19maWx0ZXJfZGlzY2FyZCAldSAgIgotCQkJInh4b3ZyZmxvd19kaXNjYXJkICV1ICBicmJfdHJ1bmNhdGVfZGlzY2FyZCAldSAgIgotCQkJInR0bDBfZGlzY2FyZCAldVxuIiwKLQkJICAgICAgIGVzdGF0cy0+Y2hlY2tzdW1fZGlzY2FyZCwKLQkJICAgICAgIGVzdGF0cy0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQsCi0JCSAgICAgICBlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZCwgZXN0YXRzLT5tYWNfZGlzY2FyZCwKLQkJICAgICAgIGVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkLCBlc3RhdHMtPnh4b3ZlcmZsb3dfZGlzY2FyZCwKLQkJICAgICAgIGVzdGF0cy0+YnJiX3RydW5jYXRlX2Rpc2NhcmQsIGVzdGF0cy0+dHRsMF9kaXNjYXJkKTsKLQotCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlslZF06ICVsdVx0JWx1XHQlbHVcbiIsIGksCi0JCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHR4X3BrdCksCi0JCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHJ4X3BrdCksCi0JCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHJ4X2NhbGxzKSk7Ci0JCX0KLQl9Ci0KLQlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pIHsKLQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdGUgaXMgJXgsIHJldHVybmluZ1xuIiwgYnAtPnN0YXRlKTsKLQkJcmV0dXJuOwotCX0KLQotI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKLQkJcmV0dXJuOwotI2VuZGlmCi0KLQkvKiBsb2FkZXIgKi8KLQlpZiAoYnAtPmV4ZWN1dGVyX2lkeCkgewotCQlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlID0gJmJwLT5kbWFlOwotCQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCQlpbnQgbG9hZGVyX2lkeCA9IHBvcnQgKiA4OwotCi0JCW1lbXNldChkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOwotCi0JCWRtYWUtPm9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8Ci0JCQkJRE1BRV9DTURfQ19EU1RfR1JDIHwgRE1BRV9DTURfQ19FTkFCTEUgfAotCQkJCURNQUVfQ01EX0RTVF9SRVNFVCB8Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCQkJRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8Ci0jZWxzZQotCQkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKLSNlbmRpZgotCQkJCShwb3J0ID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSk7Ci0JCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGRtYWVbMF0pKTsKLQkJZG1hZS0+c3JjX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgZG1hZVswXSkpOwotCQlkbWFlLT5kc3RfYWRkcl9sbyA9IChETUFFX1JFR19DTURfTUVNICsKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSAqCi0JCQkJICAgICAobG9hZGVyX2lkeCArIDEpKSA+PiAyOwotCQlkbWFlLT5kc3RfYWRkcl9oaSA9IDA7Ci0JCWRtYWUtPmxlbiA9IHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSA+PiAyOwotCQlkbWFlLT5sZW4tLTsgICAgLyogISEhIGZvciBBMC8xIG9ubHkgKi8KLQkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4ICsgMV0gPj4gMjsKLQkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKLQkJZG1hZS0+Y29tcF92YWwgPSAxOwotCi0JCWJueDJ4X3Bvc3RfZG1hZShicCwgZG1hZSwgbG9hZGVyX2lkeCk7Ci0JfQotCi0JaWYgKGJwLT5zdGF0c19zdGF0ZSAhPSBTVEFUU19TVEFURV9FTkFCTEUpIHsKLQkJYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TVEFUX1FVRVJZLCAwLCAwLCAwLCAwKSA9PSAwKSB7Ci0JCS8qIHN0YXRzIHJhbXJvZCBoYXMgaXQncyBvd24gc2xvdCBvbiB0aGUgc3BlICovCi0JCWJwLT5zcHFfbGVmdCsrOwotCQlicC0+c3RhdF9wZW5kaW5nID0gMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gKHN0cnVjdCBibngyeCAqKSBkYXRhOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQotCQlyZXR1cm47Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkKLQkJZ290byB0aW1lcl9yZXN0YXJ0OwotCi0JaWYgKHBvbGwpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbMF07Ci0JCWludCByYzsKLQotCQlibngyeF90eF9pbnQoZnAsIDEwMDApOwotCQlyYyA9IGJueDJ4X3J4X2ludChmcCwgMTAwMCk7Ci0JfQotCi0JaWYgKCFub21jcCkgewotCQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCQl1MzIgZHJ2X3B1bHNlOwotCQl1MzIgbWNwX3B1bHNlOwotCi0JCSsrYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXE7Ci0JCWJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxICY9IERSVl9QVUxTRV9TRVFfTUFTSzsKLQkJLyogVEJEIC0gYWRkIFNZU1RFTV9USU1FICovCi0JCWRydl9wdWxzZSA9IGJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxOwotCQlTSE1FTV9XUihicCwgZnVuY19tYltwb3J0XS5kcnZfcHVsc2VfbWIsIGRydl9wdWxzZSk7Ci0KLQkJbWNwX3B1bHNlID0gKFNITUVNX1JEKGJwLCBmdW5jX21iW3BvcnRdLm1jcF9wdWxzZV9tYikgJgotCQkJICAgICBNQ1BfUFVMU0VfU0VRX01BU0spOwotCQkvKiBUaGUgZGVsdGEgYmV0d2VlbiBkcml2ZXIgcHVsc2UgYW5kIG1jcCByZXNwb25zZQotCQkgKiBzaG91bGQgYmUgMSAoYmVmb3JlIG1jcCByZXNwb25zZSkgb3IgMCAoYWZ0ZXIgbWNwIHJlc3BvbnNlKQotCQkgKi8KLQkJaWYgKChkcnZfcHVsc2UgIT0gbWNwX3B1bHNlKSAmJgotCQkgICAgKGRydl9wdWxzZSAhPSAoKG1jcF9wdWxzZSArIDEpICYgTUNQX1BVTFNFX1NFUV9NQVNLKSkpIHsKLQkJCS8qIHNvbWVvbmUgbG9zdCBhIGhlYXJ0YmVhdC4uLiAqLwotCQkJQk5YMlhfRVJSKCJkcnZfcHVsc2UgKDB4JXgpICE9IG1jcF9wdWxzZSAoMHgleClcbiIsCi0JCQkJICBkcnZfcHVsc2UsIG1jcF9wdWxzZSk7Ci0JCX0KLQl9Ci0KLQlpZiAoYnAtPnN0YXRzX3N0YXRlID09IFNUQVRTX1NUQVRFX0RJU0FCTEUpCi0JCWdvdG8gdGltZXJfcmVzdGFydDsKLQotCWJueDJ4X3VwZGF0ZV9zdGF0cyhicCk7Ci0KLXRpbWVyX3Jlc3RhcnQ6Ci0JbW9kX3RpbWVyKCZicC0+dGltZXIsIGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbCk7Ci19Ci0KLS8qIGVuZCBvZiBTdGF0aXN0aWNzICovCi0KLS8qIG5pYyBpbml0ICovCi0KLS8qCi0gKiBuaWMgaW5pdCBzZXJ2aWNlIGZ1bmN0aW9ucwotICovCi0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfc2Ioc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrICpzYiwKLQkJCSAgZG1hX2FkZHJfdCBtYXBwaW5nLCBpbnQgaWQpCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQl1NjQgc2VjdGlvbjsKLQlpbnQgaW5kZXg7Ci0KLQkvKiBVU1RPUk0gKi8KLQlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2ssCi0JCQkJCSAgICB1X3N0YXR1c19ibG9jayk7Ci0Jc2ItPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IGlkOwotCi0JUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCSAgICAgICBVU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBpZCksIFU2NF9MTyhzZWN0aW9uKSk7Ci0JUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCSAgICAgICAoKFVTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIGlkKSkgKyA0KSwKLQkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKLQotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX1VTVE9STV9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKLQkJUkVHX1dSMTYoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCQkgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGlkLCBpbmRleCksIDB4MSk7Ci0KLQkvKiBDU1RPUk0gKi8KLQlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2ssCi0JCQkJCSAgICBjX3N0YXR1c19ibG9jayk7Ci0Jc2ItPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IGlkOwotCi0JUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCSAgICAgICBDU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBpZCksIFU2NF9MTyhzZWN0aW9uKSk7Ci0JUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCSAgICAgICAoKENTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIGlkKSkgKyA0KSwKLQkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKLQotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX0NTVE9STV9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKLQkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGlkLCBpbmRleCksIDB4MSk7Ci0KLQlibngyeF9hY2tfc2IoYnAsIGlkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9kZWZfc2Ioc3RydWN0IGJueDJ4ICpicCwKLQkJCSAgICAgIHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2sgKmRlZl9zYiwKLQkJCSAgICAgIGRtYV9hZGRyX3QgbWFwcGluZywgaW50IGlkKQotewotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0JaW50IGluZGV4LCB2YWwsIHJlZ19vZmZzZXQ7Ci0JdTY0IHNlY3Rpb247Ci0KLQkvKiBBVFROICovCi0Jc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaywKLQkJCQkJICAgIGF0dGVuX3N0YXR1c19ibG9jayk7Ci0JZGVmX3NiLT5hdHRlbl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gaWQ7Ci0KLQlicC0+ZGVmX2F0dF9pZHggPSAwOwotCWJwLT5hdHRuX3N0YXRlID0gMDsKLQotCXJlZ19vZmZzZXQgPSAocG9ydCA/IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCA6Ci0JCQkgICAgIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCk7Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAzOyBpbmRleCsrKSB7Ci0JCWJwLT5hdHRuX2dyb3VwW2luZGV4XS5zaWdbMF0gPSBSRUdfUkQoYnAsCi0JCQkJCQkgICAgIHJlZ19vZmZzZXQgKyAweDEwKmluZGV4KTsKLQkJYnAtPmF0dG5fZ3JvdXBbaW5kZXhdLnNpZ1sxXSA9IFJFR19SRChicCwKLQkJCQkJICAgICAgIHJlZ19vZmZzZXQgKyAweDQgKyAweDEwKmluZGV4KTsKLQkJYnAtPmF0dG5fZ3JvdXBbaW5kZXhdLnNpZ1syXSA9IFJFR19SRChicCwKLQkJCQkJICAgICAgIHJlZ19vZmZzZXQgKyAweDggKyAweDEwKmluZGV4KTsKLQkJYnAtPmF0dG5fZ3JvdXBbaW5kZXhdLnNpZ1szXSA9IFJFR19SRChicCwKLQkJCQkJICAgICAgIHJlZ19vZmZzZXQgKyAweGMgKyAweDEwKmluZGV4KTsKLQl9Ci0KLQlicC0+YWV1X21hc2sgPSBSRUdfUkQoYnAsIChwb3J0ID8gTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEgOgotCQkJCQkgIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18wKSk7Ci0KLQlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBIQ19SRUdfQVRUTl9NU0cxX0FERFJfTCA6Ci0JCQkgICAgIEhDX1JFR19BVFROX01TRzBfQUREUl9MKTsKLQotCVJFR19XUihicCwgcmVnX29mZnNldCwgVTY0X0xPKHNlY3Rpb24pKTsKLQlSRUdfV1IoYnAsIHJlZ19vZmZzZXQgKyA0LCBVNjRfSEkoc2VjdGlvbikpOwotCi0JcmVnX29mZnNldCA9IChwb3J0ID8gSENfUkVHX0FUVE5fTlVNX1AxIDogSENfUkVHX0FUVE5fTlVNX1AwKTsKLQotCXZhbCA9IFJFR19SRChicCwgcmVnX29mZnNldCk7Ci0JdmFsIHw9IGlkOwotCVJFR19XUihicCwgcmVnX29mZnNldCwgdmFsKTsKLQotCS8qIFVTVE9STSAqLwotCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCi0JCQkJCSAgICB1X2RlZl9zdGF0dXNfYmxvY2spOwotCWRlZl9zYi0+dV9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IGlkOwotCi0JYnAtPmRlZl91X2lkeCA9IDA7Ci0KLQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JICAgICAgIFVTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0KSwgVTY0X0xPKHNlY3Rpb24pKTsKLQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JICAgICAgICgoVVNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQpKSArIDQpLAotCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOwotCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgVVNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCksCi0JICAgICAgIEJOWDJYX0JUUik7Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQotCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCSBVU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGluZGV4KSwgMHgxKTsKLQotCS8qIENTVE9STSAqLwotCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCi0JCQkJCSAgICBjX2RlZl9zdGF0dXNfYmxvY2spOwotCWRlZl9zYi0+Y19kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IGlkOwotCi0JYnAtPmRlZl9jX2lkeCA9IDA7Ci0KLQlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JICAgICAgIENTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0KSwgVTY0X0xPKHNlY3Rpb24pKTsKLQlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JICAgICAgICgoQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQpKSArIDQpLAotCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOwotCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCksCi0JICAgICAgIEJOWDJYX0JUUik7Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQotCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSBDU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGluZGV4KSwgMHgxKTsKLQotCS8qIFRTVE9STSAqLwotCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCi0JCQkJCSAgICB0X2RlZl9zdGF0dXNfYmxvY2spOwotCWRlZl9zYi0+dF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IGlkOwotCi0JYnAtPmRlZl90X2lkeCA9IDA7Ci0KLQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JICAgICAgIFRTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0KSwgVTY0X0xPKHNlY3Rpb24pKTsKLQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JICAgICAgICgoVFNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQpKSArIDQpLAotCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOwotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCksCi0JICAgICAgIEJOWDJYX0JUUik7Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQotCQlSRUdfV1IxNihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkJCSBUU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGluZGV4KSwgMHgxKTsKLQotCS8qIFhTVE9STSAqLwotCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCi0JCQkJCSAgICB4X2RlZl9zdGF0dXNfYmxvY2spOwotCWRlZl9zYi0+eF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IGlkOwotCi0JYnAtPmRlZl94X2lkeCA9IDA7Ci0KLQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JICAgICAgIFhTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0KSwgVTY0X0xPKHNlY3Rpb24pKTsKLQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JICAgICAgICgoWFNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQpKSArIDQpLAotCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOwotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCksCi0JICAgICAgIEJOWDJYX0JUUik7Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQotCQlSRUdfV1IxNihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkJCSBYU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGluZGV4KSwgMHgxKTsKLQotCWJwLT5zdGF0X3BlbmRpbmcgPSAwOwotCi0JYm54MnhfYWNrX3NiKGJwLCBpZCwgQ1NUT1JNX0lELCAwLCBJR1VfSU5UX0VOQUJMRSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3VwZGF0ZV9jb2FsZXNjZShzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCi0JCS8qIEhDX0lOREVYX1VfRVRIX1JYX0NRX0NPTlMgKi8KLQkJUkVHX1dSOChicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCVVTVE9STV9TQl9IQ19USU1FT1VUX09GRlNFVChwb3J0LCBpLAotCQkJCQkJICAgSENfSU5ERVhfVV9FVEhfUlhfQ1FfQ09OUyksCi0JCQlicC0+cnhfdGlja3NfaW50LzEyKTsKLQkJUkVHX1dSMTYoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCQkgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGksCi0JCQkJCQkgICBIQ19JTkRFWF9VX0VUSF9SWF9DUV9DT05TKSwKLQkJCSBicC0+cnhfdGlja3NfaW50ID8gMCA6IDEpOwotCi0JCS8qIEhDX0lOREVYX0NfRVRIX1RYX0NRX0NPTlMgKi8KLQkJUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCUNTVE9STV9TQl9IQ19USU1FT1VUX09GRlNFVChwb3J0LCBpLAotCQkJCQkJICAgSENfSU5ERVhfQ19FVEhfVFhfQ1FfQ09OUyksCi0JCQlicC0+dHhfdGlja3NfaW50LzEyKTsKLQkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGksCi0JCQkJCQkgICBIQ19JTkRFWF9DX0VUSF9UWF9DUV9DT05TKSwKLQkJCSBicC0+dHhfdGlja3NfaW50ID8gMCA6IDEpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9yeF9yaW5ncyhzdHJ1Y3QgYm54MnggKmJwKQotewotCXUxNiByaW5nX3Byb2Q7Ci0JaW50IGksIGo7Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQotCWJwLT5yeF9idWZfdXNlX3NpemUgPSBicC0+ZGV2LT5tdHU7Ci0KLQlicC0+cnhfYnVmX3VzZV9zaXplICs9IGJwLT5yeF9vZmZzZXQgKyBFVEhfT1ZSRUhFQUQ7Ci0JYnAtPnJ4X2J1Zl9zaXplID0gYnAtPnJ4X2J1Zl91c2Vfc2l6ZSArIDY0OwotCi0JZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07Ci0KLQkJZnAtPnJ4X2JkX2NvbnMgPSAwOwotCQlmcC0+cnhfY29uc19zYiA9IEJOWDJYX1JYX1NCX0lOREVYOwotCi0JCWZvciAoaSA9IDE7IGkgPD0gTlVNX1JYX1JJTkdTOyBpKyspIHsKLQkJCXN0cnVjdCBldGhfcnhfYmQgKnJ4X2JkOwotCi0JCQlyeF9iZCA9ICZmcC0+cnhfZGVzY19yaW5nW1JYX0RFU0NfQ05UICogaSAtIDJdOwotCQkJcnhfYmQtPmFkZHJfaGkgPQotCQkJCWNwdV90b19sZTMyKFU2NF9ISShmcC0+cnhfZGVzY19tYXBwaW5nICsKLQkJCQkJICAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9SWF9SSU5HUykpKTsKLQkJCXJ4X2JkLT5hZGRyX2xvID0KLQkJCQljcHVfdG9fbGUzMihVNjRfTE8oZnAtPnJ4X2Rlc2NfbWFwcGluZyArCi0JCQkJCSAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fUlhfUklOR1MpKSk7Ci0KLQkJfQotCi0JCWZvciAoaSA9IDE7IGkgPD0gTlVNX1JDUV9SSU5HUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZXRoX3J4X2NxZV9uZXh0X3BhZ2UgKm5leHRwZzsKLQotCQkJbmV4dHBnID0gKHN0cnVjdCBldGhfcnhfY3FlX25leHRfcGFnZSAqKQotCQkJCSZmcC0+cnhfY29tcF9yaW5nW1JDUV9ERVNDX0NOVCAqIGkgLSAxXTsKLQkJCW5leHRwZy0+YWRkcl9oaSA9Ci0JCQkJY3B1X3RvX2xlMzIoVTY0X0hJKGZwLT5yeF9jb21wX21hcHBpbmcgKwotCQkJCQkgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fUkNRX1JJTkdTKSkpOwotCQkJbmV4dHBnLT5hZGRyX2xvID0KLQkJCQljcHVfdG9fbGUzMihVNjRfTE8oZnAtPnJ4X2NvbXBfbWFwcGluZyArCi0JCQkJCSAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9SQ1FfUklOR1MpKSk7Ci0JCX0KLQotCQkvKiByeCBjb21wbGV0aW9uIHF1ZXVlICovCi0JCWZwLT5yeF9jb21wX2NvbnMgPSByaW5nX3Byb2QgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfcmluZ19zaXplOyBpKyspIHsKLQkJCWlmIChibngyeF9hbGxvY19yeF9za2IoYnAsIGZwLCByaW5nX3Byb2QpIDwgMCkgewotCQkJCUJOWDJYX0VSUigid2FzIG9ubHkgYWJsZSB0byBhbGxvY2F0ZSAiCi0JCQkJCSAgIiVkIHJ4IHNrYnNcbiIsIGkpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJcmluZ19wcm9kID0gTkVYVF9SWF9JRFgocmluZ19wcm9kKTsKLQkJCUJVR19UUkFQKHJpbmdfcHJvZCA+IGkpOwotCQl9Ci0KLQkJZnAtPnJ4X2JkX3Byb2QgPSBmcC0+cnhfY29tcF9wcm9kID0gcmluZ19wcm9kOwotCQlmcC0+cnhfcGt0ID0gZnAtPnJ4X2NhbGxzID0gMDsKLQotCQkvKiBXYXJuaW5nISB0aGlzIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0ICh0byB0aGUgVFNUT1JNKSAqLwotCQkvKiBtdXN0IG9ubHkgYmUgZG9uZSB3aGVuIGNoaXAgaXMgaW5pdGlhbGl6ZWQgKi8KLQkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVFNUT1JNX1JDUV9QUk9EX09GRlNFVChwb3J0LCBqKSwgcmluZ19wcm9kKTsKLQkJaWYgKGogIT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9NRU1fV09SS0FST1VORF9BRERSRVNTX09GRlNFVChwb3J0KSwKLQkJICAgICAgIFU2NF9MTyhmcC0+cnhfY29tcF9tYXBwaW5nKSk7Ci0JCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9NRU1fV09SS0FST1VORF9BRERSRVNTX09GRlNFVChwb3J0KSArIDQsCi0JCSAgICAgICBVNjRfSEkoZnAtPnJ4X2NvbXBfbWFwcGluZykpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF90eF9yaW5nKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGksIGo7Ci0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKLQotCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9UWF9SSU5HUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZXRoX3R4X2JkICp0eF9iZCA9Ci0JCQkJJmZwLT50eF9kZXNjX3JpbmdbVFhfREVTQ19DTlQgKiBpIC0gMV07Ci0KLQkJCXR4X2JkLT5hZGRyX2hpID0KLQkJCQljcHVfdG9fbGUzMihVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyArCi0JCQkJCSAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fVFhfUklOR1MpKSk7Ci0JCQl0eF9iZC0+YWRkcl9sbyA9Ci0JCQkJY3B1X3RvX2xlMzIoVTY0X0xPKGZwLT50eF9kZXNjX21hcHBpbmcgKwotCQkJCQkgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1RYX1JJTkdTKSkpOwotCQl9Ci0KLQkJZnAtPnR4X3BrdF9wcm9kID0gMDsKLQkJZnAtPnR4X3BrdF9jb25zID0gMDsKLQkJZnAtPnR4X2JkX3Byb2QgPSAwOwotCQlmcC0+dHhfYmRfY29ucyA9IDA7Ci0JCWZwLT50eF9jb25zX3NiID0gQk5YMlhfVFhfU0JfSU5ERVg7Ci0JCWZwLT50eF9wa3QgPSAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9zcF9yaW5nKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQotCXNwaW5fbG9ja19pbml0KCZicC0+c3BxX2xvY2spOwotCi0JYnAtPnNwcV9sZWZ0ID0gTUFYX1NQUV9QRU5ESU5HOwotCWJwLT5zcHFfcHJvZF9pZHggPSAwOwotCWJwLT5kc2Jfc3BfcHJvZCA9IEJOWDJYX1NQX0RTQl9JTkRFWDsKLQlicC0+c3BxX3Byb2RfYmQgPSBicC0+c3BxOwotCWJwLT5zcHFfbGFzdF9iZCA9IGJwLT5zcHFfcHJvZF9iZCArIE1BWF9TUF9ERVNDX0NOVDsKLQotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NQUV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQpLAotCSAgICAgICBVNjRfTE8oYnAtPnNwcV9tYXBwaW5nKSk7Ci0JUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fU1BRX1BBR0VfQkFTRV9PRkZTRVQocG9ydCkgKyA0LAotCSAgICAgICBVNjRfSEkoYnAtPnNwcV9tYXBwaW5nKSk7Ci0KLQlSRUdfV1IoYnAsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgWFNUT1JNX1NQUV9QUk9EX09GRlNFVChwb3J0KSwKLQkgICAgICAgYnAtPnNwcV9wcm9kX2lkeCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfY29udGV4dChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpOwotCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGV0aF9jb250ZXh0ICpjb250ZXh0ID0gYm54Mnhfc3AoYnAsIGNvbnRleHRbaV0uZXRoKTsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0KLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2hpID0KLQkJCQkJCVU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2xvID0KLQkJCQkJCVU2NF9MTyhmcC0+dHhfZGVzY19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuZGJfZGF0YV9hZGRyX2hpID0KLQkJCQkJCVU2NF9ISShmcC0+dHhfcHJvZHNfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9sbyA9Ci0JCQkJCQlVNjRfTE8oZnAtPnR4X3Byb2RzX21hcHBpbmcpOwotCi0JCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LnJ4X2JkX3BhZ2VfYmFzZV9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnJ4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LnJ4X2JkX3BhZ2VfYmFzZV9sbyA9Ci0JCQkJCQlVNjRfTE8oZnAtPnJ4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LnN0YXR1c19ibG9ja19pZCA9IGk7Ci0JCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LnNiX2luZGV4X251bWJlciA9Ci0JCQkJCQlIQ19JTkRFWF9VX0VUSF9SWF9DUV9DT05TOwotCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5yY3FfYmFzZV9hZGRyZXNzX2hpID0KLQkJCQkJCVU2NF9ISShmcC0+cnhfY29tcF9tYXBwaW5nKTsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQucmNxX2Jhc2VfYWRkcmVzc19sbyA9Ci0JCQkJCQlVNjRfTE8oZnAtPnJ4X2NvbXBfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmZsYWdzID0KLQkJCQlVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX01DX0FMSUdOTUVOVDsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQubWNfYWxpZ25tZW50X3NpemUgPSA2NDsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQubnVtX3JzcyA9IGJwLT5udW1fcXVldWVzOwotCi0JCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnNiX2luZGV4X251bWJlciA9Ci0JCQkJCQlIQ19JTkRFWF9DX0VUSF9UWF9DUV9DT05TOwotCQljb250ZXh0LT5jc3Rvcm1fc3RfY29udGV4dC5zdGF0dXNfYmxvY2tfaWQgPSBpOwotCi0JCWNvbnRleHQtPnhzdG9ybV9hZ19jb250ZXh0LmNkdV9yZXNlcnZlZCA9Ci0JCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCi0JCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9YQ01fQUcsCi0JCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKLQkJY29udGV4dC0+dXN0b3JtX2FnX2NvbnRleHQuY2R1X3VzYWdlID0KLQkJCUNEVV9SU1JWRF9WQUxVRV9UWVBFX0EoSFdfQ0lEKGJwLCBpKSwKLQkJCQkJICAgICAgIENEVV9SRUdJT05fTlVNQkVSX1VDTV9BRywKLQkJCQkJICAgICAgIEVUSF9DT05ORUNUSU9OX1RZUEUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbmRfdGFibGUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCWludCBpOwotCi0JaWYgKCFpc19tdWx0aShicCkpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfU0laRTsgaSsrKQotCQlSRUdfV1I4KGJwLCBUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfT0ZGU0VUKHBvcnQpICsgaSwKLQkJCWkgJSBicC0+bnVtX3F1ZXVlcyk7Ci0KLQlSRUdfV1IoYnAsIFBSU19SRUdfQV9QUlNVXzIwLCAweGYpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfY2xpZW50X2NvbmZpZyhzdHJ1Y3QgYm54MnggKmJwKQotewotI2lmZGVmIEJDTV9WTEFOCi0JaW50IG1vZGUgPSBicC0+cnhfbW9kZTsKLSNlbmRpZgotCWludCBpLCBwb3J0ID0gYnAtPnBvcnQ7Ci0Jc3RydWN0IHRzdG9ybV9ldGhfY2xpZW50X2NvbmZpZyB0c3Rvcm1fY2xpZW50ID0gezB9OwotCi0JdHN0b3JtX2NsaWVudC5tdHUgPSBicC0+ZGV2LT5tdHU7Ci0JdHN0b3JtX2NsaWVudC5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPSAwOwotCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzID0KLQkJCQlUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEU7Ci0jaWZkZWYgQkNNX1ZMQU4KLQlpZiAobW9kZSAmJiBicC0+dmxncnApIHsKLQkJdHN0b3JtX2NsaWVudC5jb25maWdfZmxhZ3MgfD0KLQkJCQlUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRTsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJ2bGFuIHJlbW92YWwgZW5hYmxlZFxuIik7Ci0JfQotI2VuZGlmCi0JaWYgKG1vZGUgIT0gQk5YMlhfUlhfTU9ERV9QUk9NSVNDKQotCQl0c3Rvcm1fY2xpZW50LmRyb3BfZmxhZ3MgPQotCQkJCVRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX01BQ19FUlI7Ci0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBUU1RPUk1fQ0xJRU5UX0NPTkZJR19PRkZTRVQocG9ydCwgaSksCi0JCSAgICAgICAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVswXSk7Ci0JCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFRTVE9STV9DTElFTlRfQ09ORklHX09GRlNFVChwb3J0LCBpKSArIDQsCi0JCSAgICAgICAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVsxXSk7Ci0JfQotCi0vKglEUChORVRJRl9NU0dfSUZVUCwgInRzdG9ybV9jbGllbnQ6IDB4JTA4eCAweCUwOHhcbiIsCi0JICAgKCh1MzIgKikmdHN0b3JtX2NsaWVudClbMF0sICgodTMyICopJnRzdG9ybV9jbGllbnQpWzFdKTsgKi8KLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgbW9kZSA9IGJwLT5yeF9tb2RlOwotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0Jc3RydWN0IHRzdG9ybV9ldGhfbWFjX2ZpbHRlcl9jb25maWcgdHN0b3JtX21hY19maWx0ZXIgPSB7MH07Ci0JaW50IGk7Ci0KLQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLCAicnggbW9kZSBpcyAlZFxuIiwgbW9kZSk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIEJOWDJYX1JYX01PREVfTk9ORTogLyogbm8gUnggKi8KLQkJdHN0b3JtX21hY19maWx0ZXIudWNhc3RfZHJvcF9hbGwgPSAxOwotCQl0c3Rvcm1fbWFjX2ZpbHRlci5tY2FzdF9kcm9wX2FsbCA9IDE7Ci0JCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2Ryb3BfYWxsID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBCTlgyWF9SWF9NT0RFX05PUk1BTDoKLQkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfYWNjZXB0X2FsbCA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgQk5YMlhfUlhfTU9ERV9BTExNVUxUSToKLQkJdHN0b3JtX21hY19maWx0ZXIubWNhc3RfYWNjZXB0X2FsbCA9IDE7Ci0JCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSAxOwotCQlicmVhazsKLQljYXNlIEJOWDJYX1JYX01PREVfUFJPTUlTQzoKLQkJdHN0b3JtX21hY19maWx0ZXIudWNhc3RfYWNjZXB0X2FsbCA9IDE7Ci0JCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2FjY2VwdF9hbGwgPSAxOwotCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQk5YMlhfRVJSKCJiYWQgcnggbW9kZSAoJWQpXG4iLCBtb2RlKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fZXRoX21hY19maWx0ZXJfY29uZmlnKS80OyBpKyspIHsKLQkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVFNUT1JNX01BQ19GSUxURVJfQ09ORklHX09GRlNFVChwb3J0KSArIGkgKiA0LAotCQkgICAgICAgKCh1MzIgKikmdHN0b3JtX21hY19maWx0ZXIpW2ldKTsKLQotLyogICAgICAJRFAoTkVUSUZfTVNHX0lGVVAsICJ0c3Rvcm1fbWFjX2ZpbHRlclslZF06IDB4JTA4eFxuIiwgaSwKLQkJICAgKCh1MzIgKikmdHN0b3JtX21hY19maWx0ZXIpW2ldKTsgKi8KLQl9Ci0KLQlpZiAobW9kZSAhPSBCTlgyWF9SWF9NT0RFX05PTkUpCi0JCWJueDJ4X3NldF9jbGllbnRfY29uZmlnKGJwKTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0Jc3RydWN0IHRzdG9ybV9ldGhfZnVuY3Rpb25fY29tbW9uX2NvbmZpZyB0c3Rvcm1fY29uZmlnID0gezB9OwotCXN0cnVjdCBzdGF0c19pbmRpY2F0aW9uX2ZsYWdzIHN0YXRzX2ZsYWdzID0gezB9OwotCi0JaWYgKGlzX211bHRpKGJwKSkgewotCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyA9IE1VTFRJX0ZMQUdTOwotCQl0c3Rvcm1fY29uZmlnLnJzc19yZXN1bHRfbWFzayA9IE1VTFRJX01BU0s7Ci0JfQotCi0JUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCSAgICAgICBUU1RPUk1fRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19PRkZTRVQocG9ydCksCi0JICAgICAgICgqKHUzMiAqKSZ0c3Rvcm1fY29uZmlnKSk7Ci0KLS8qICAgICAgRFAoTkVUSUZfTVNHX0lGVVAsICJ0c3Rvcm1fY29uZmlnOiAweCUwOHhcbiIsCi0JICAgKCoodTMyICopJnRzdG9ybV9jb25maWcpKTsgKi8KLQotCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOyAvKiBubyByeCB1bnRpbCBsaW5rIGlzIHVwICovCi0JYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoYnApOwotCi0Jc3RhdHNfZmxhZ3MuY29sbGVjdF9ldGggPSBjcHVfdG9fbGUzMigxKTsKLQotCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSwKLQkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzBdKTsKLQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9TVEFUU19GTEFHU19PRkZTRVQocG9ydCkgKyA0LAotCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMV0pOwotCi0JUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKHBvcnQpLAotCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMF0pOwotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSArIDQsCi0JICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVsxXSk7Ci0KLQlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9TVEFUU19GTEFHU19PRkZTRVQocG9ydCksCi0JICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVswXSk7Ci0JUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKHBvcnQpICsgNCwKLQkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzFdKTsKLQotLyogICAgICBEUChORVRJRl9NU0dfSUZVUCwgInN0YXRzX2ZsYWdzOiAweCUwOHggMHglMDh4XG4iLAotCSAgICgodTMyICopJnN0YXRzX2ZsYWdzKVswXSwgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzFdKTsgKi8KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfbmljX2luaXQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgaTsKLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCi0JCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRDsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJibngyeF9pbml0X3NiKCVwLCVwLCVkKTtcbiIsCi0JCSAgIGJwLCBmcC0+c3RhdHVzX2JsaywgaSk7Ci0JCWZwLT5pbmRleCA9IGk7Ci0JCWJueDJ4X2luaXRfc2IoYnAsIGZwLT5zdGF0dXNfYmxrLCBmcC0+c3RhdHVzX2Jsa19tYXBwaW5nLCBpKTsKLQl9Ci0KLQlibngyeF9pbml0X2RlZl9zYihicCwgYnAtPmRlZl9zdGF0dXNfYmxrLAotCQkJICBicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywgMHgxMCk7Ci0JYm54MnhfdXBkYXRlX2NvYWxlc2NlKGJwKTsKLQlibngyeF9pbml0X3J4X3JpbmdzKGJwKTsKLQlibngyeF9pbml0X3R4X3JpbmcoYnApOwotCWJueDJ4X2luaXRfc3BfcmluZyhicCk7Ci0JYm54MnhfaW5pdF9jb250ZXh0KGJwKTsKLQlibngyeF9pbml0X2ludGVybmFsKGJwKTsKLQlibngyeF9pbml0X3N0YXRzKGJwKTsKLQlibngyeF9pbml0X2luZF90YWJsZShicCk7Ci0JYm54MnhfaW50X2VuYWJsZShicCk7Ci0KLX0KLQotLyogZW5kIG9mIG5pYyBpbml0ICovCi0KLS8qCi0gKiBnemlwIHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIGludCBibngyeF9ndW56aXBfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQotewotCWJwLT5ndW56aXBfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYnAtPnBkZXYsIEZXX0JVRl9TSVpFLAotCQkJCQkgICAgICAmYnAtPmd1bnppcF9tYXBwaW5nKTsKLQlpZiAoYnAtPmd1bnppcF9idWYgID09IE5VTEwpCi0JCWdvdG8gZ3VuemlwX25vbWVtMTsKLQotCWJwLT5zdHJtID0ga21hbGxvYyhzaXplb2YoKmJwLT5zdHJtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJwLT5zdHJtICA9PSBOVUxMKQotCQlnb3RvIGd1bnppcF9ub21lbTI7Ci0KLQlicC0+c3RybS0+d29ya3NwYWNlID0ga21hbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLAotCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmIChicC0+c3RybS0+d29ya3NwYWNlID09IE5VTEwpCi0JCWdvdG8gZ3VuemlwX25vbWVtMzsKLQotCXJldHVybiAwOwotCi1ndW56aXBfbm9tZW0zOgotCWtmcmVlKGJwLT5zdHJtKTsKLQlicC0+c3RybSA9IE5VTEw7Ci0KLWd1bnppcF9ub21lbTI6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChicC0+cGRldiwgRldfQlVGX1NJWkUsIGJwLT5ndW56aXBfYnVmLAotCQkJICAgIGJwLT5ndW56aXBfbWFwcGluZyk7Ci0JYnAtPmd1bnppcF9idWYgPSBOVUxMOwotCi1ndW56aXBfbm9tZW0xOgotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBDYW5ub3QgYWxsb2NhdGUgZmlybXdhcmUgYnVmZmVyIGZvciIKLQkgICAgICAgIiB1bmNvbXByZXNzaW9uXG4iLCBicC0+ZGV2LT5uYW1lKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZ3VuemlwX2VuZChzdHJ1Y3QgYm54MnggKmJwKQotewotCWtmcmVlKGJwLT5zdHJtLT53b3Jrc3BhY2UpOwotCi0Ja2ZyZWUoYnAtPnN0cm0pOwotCWJwLT5zdHJtID0gTlVMTDsKLQotCWlmIChicC0+Z3VuemlwX2J1ZikgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBGV19CVUZfU0laRSwgYnAtPmd1bnppcF9idWYsCi0JCQkJICAgIGJwLT5ndW56aXBfbWFwcGluZyk7Ci0JCWJwLT5ndW56aXBfYnVmID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfZ3VuemlwKHN0cnVjdCBibngyeCAqYnAsIHU4ICp6YnVmLCBpbnQgbGVuKQotewotCWludCBuLCByYzsKLQotCS8qIGNoZWNrIGd6aXAgaGVhZGVyICovCi0JaWYgKCh6YnVmWzBdICE9IDB4MWYpIHx8ICh6YnVmWzFdICE9IDB4OGIpIHx8ICh6YnVmWzJdICE9IFpfREVGTEFURUQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW4gPSAxMDsKLQotI2RlZmluZSBGTkFNRSAgIAkJCTB4OAotCi0JaWYgKHpidWZbM10gJiBGTkFNRSkKLQkJd2hpbGUgKCh6YnVmW24rK10gIT0gMCkgJiYgKG4gPCBsZW4pKTsKLQotCWJwLT5zdHJtLT5uZXh0X2luID0gemJ1ZiArIG47Ci0JYnAtPnN0cm0tPmF2YWlsX2luID0gbGVuIC0gbjsKLQlicC0+c3RybS0+bmV4dF9vdXQgPSBicC0+Z3VuemlwX2J1ZjsKLQlicC0+c3RybS0+YXZhaWxfb3V0ID0gRldfQlVGX1NJWkU7Ci0KLQlyYyA9IHpsaWJfaW5mbGF0ZUluaXQyKGJwLT5zdHJtLCAtTUFYX1dCSVRTKTsKLQlpZiAocmMgIT0gWl9PSykKLQkJcmV0dXJuIHJjOwotCi0JcmMgPSB6bGliX2luZmxhdGUoYnAtPnN0cm0sIFpfRklOSVNIKTsKLQlpZiAoKHJjICE9IFpfT0spICYmIChyYyAhPSBaX1NUUkVBTV9FTkQpKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogRmlybXdhcmUgZGVjb21wcmVzc2lvbiBlcnJvcjogJXNcbiIsCi0JCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+c3RybS0+bXNnKTsKLQotCWJwLT5ndW56aXBfb3V0bGVuID0gKEZXX0JVRl9TSVpFIC0gYnAtPnN0cm0tPmF2YWlsX291dCk7Ci0JaWYgKGJwLT5ndW56aXBfb3V0bGVuICYgMHgzKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogRmlybXdhcmUgZGVjb21wcmVzc2lvbiBlcnJvcjoiCi0JCQkJICAgICIgZ3VuemlwX291dGxlbiAoJWQpIG5vdCBhbGlnbmVkXG4iLAotCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPmd1bnppcF9vdXRsZW4pOwotCWJwLT5ndW56aXBfb3V0bGVuID4+PSAyOwotCi0JemxpYl9pbmZsYXRlRW5kKGJwLT5zdHJtKTsKLQotCWlmIChyYyA9PSBaX1NUUkVBTV9FTkQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKiBuaWMgbG9hZC91bmxvYWQgKi8KLQotLyoKLSAqIGdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi0vKiBzZW5kIGEgTklHIGxvb3BiYWNrIGRlYnVnIHBhY2tldCAqLwotc3RhdGljIHZvaWQgYm54MnhfbGJfcGNrdChzdHJ1Y3QgYm54MnggKmJwKQotewotI2lmZGVmIFVTRV9ETUFFCi0JdTMyIHdiX3dyaXRlWzNdOwotI2VuZGlmCi0KLQkvKiBFdGhlcm5ldCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyAqLwotI2lmZGVmIFVTRV9ETUFFCi0Jd2Jfd3JpdGVbMF0gPSAweDU1NTU1NTU1OwotCXdiX3dyaXRlWzFdID0gMHg1NTU1NTU1NTsKLQl3Yl93cml0ZVsyXSA9IDB4MjA7ICAgICAJLyogU09QICovCi0JUkVHX1dSX0RNQUUoYnAsIE5JR19SRUdfREVCVUdfUEFDS0VUX0xCLCB3Yl93cml0ZSwgMyk7Ci0jZWxzZQotCVJFR19XUl9JTkQoYnAsIE5JR19SRUdfREVCVUdfUEFDS0VUX0xCLCAweDU1NTU1NTU1KTsKLQlSRUdfV1JfSU5EKGJwLCBOSUdfUkVHX0RFQlVHX1BBQ0tFVF9MQiArIDQsIDB4NTU1NTU1NTUpOwotCS8qIFNPUCAqLwotCVJFR19XUl9JTkQoYnAsIE5JR19SRUdfREVCVUdfUEFDS0VUX0xCICsgOCwgMHgyMCk7Ci0jZW5kaWYKLQotCS8qIE5PTi1JUCBwcm90b2NvbCAqLwotI2lmZGVmIFVTRV9ETUFFCi0Jd2Jfd3JpdGVbMF0gPSAweDA5MDAwMDAwOwotCXdiX3dyaXRlWzFdID0gMHg1NTU1NTU1NTsKLQl3Yl93cml0ZVsyXSA9IDB4MTA7ICAgICAJLyogRU9QLCBlb3BfYnZhbGlkID0gMCAqLwotCVJFR19XUl9ETUFFKGJwLCBOSUdfUkVHX0RFQlVHX1BBQ0tFVF9MQiwgd2Jfd3JpdGUsIDMpOwotI2Vsc2UKLQlSRUdfV1JfSU5EKGJwLCBOSUdfUkVHX0RFQlVHX1BBQ0tFVF9MQiwgMHgwOTAwMDAwMCk7Ci0JUkVHX1dSX0lORChicCwgTklHX1JFR19ERUJVR19QQUNLRVRfTEIgKyA0LCAweDU1NTU1NTU1KTsKLQkvKiBFT1AsIGVvcF9idmFsaWQgPSAwICovCi0JUkVHX1dSX0lORChicCwgTklHX1JFR19ERUJVR19QQUNLRVRfTEIgKyA4LCAweDEwKTsKLSNlbmRpZgotfQotCi0vKiBzb21lIG9mIHRoZSBpbnRlcm5hbCBtZW1vcmllcwotICogYXJlIG5vdCBkaXJlY3RseSByZWFkYWJsZSBmcm9tIHRoZSBkcml2ZXIKLSAqIHRvIHRlc3QgdGhlbSB3ZSBzZW5kIGRlYnVnIHBhY2tldHMKLSAqLwotc3RhdGljIGludCBibngyeF9pbnRfbWVtX3Rlc3Qoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgZmFjdG9yOwotCWludCBjb3VudCwgaTsKLQl1MzIgdmFsID0gMDsKLQotCXN3aXRjaCAoQ0hJUF9SRVYoYnApKSB7Ci0JY2FzZSBDSElQX1JFVl9FTVVMOgotCQlmYWN0b3IgPSAyMDA7Ci0JCWJyZWFrOwotCWNhc2UgQ0hJUF9SRVZfRlBHQToKLQkJZmFjdG9yID0gMTIwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlmYWN0b3IgPSAxOwotCQlicmVhazsKLQl9Ci0KLQlEUChORVRJRl9NU0dfSFcsICJzdGFydCBwYXJ0MVxuIik7Ci0KLQkvKiBEaXNhYmxlIGlucHV0cyBvZiBwYXJzZXIgbmVpZ2hib3IgYmxvY2tzICovCi0JUkVHX1dSKGJwLCBUU0RNX1JFR19FTkFCTEVfSU4xLCAweDApOwotCVJFR19XUihicCwgVENNX1JFR19QUlNfSUZFTiwgMHgwKTsKLQlSRUdfV1IoYnAsIENGQ19SRUdfREVCVUcwLCAweDEpOwotCU5JR19XUihOSUdfUkVHX1BSU19SRVFfSU5fRU4sIDB4MCk7Ci0KLQkvKiAgV3JpdGUgMCB0byBwYXJzZXIgY3JlZGl0cyBmb3IgQ0ZDIHNlYXJjaCByZXF1ZXN0ICovCi0JUkVHX1dSKGJwLCBQUlNfUkVHX0NGQ19TRUFSQ0hfSU5JVElBTF9DUkVESVQsIDB4MCk7Ci0KLQkvKiBzZW5kIEV0aGVybmV0IHBhY2tldCAqLwotCWJueDJ4X2xiX3Bja3QoYnApOwotCi0JLyogVE9ETyBkbyBpIHJlc2V0IE5JRyBzdGF0aXN0aWM/ICovCi0JLyogV2FpdCB1bnRpbCBOSUcgcmVnaXN0ZXIgc2hvd3MgMSBwYWNrZXQgb2Ygc2l6ZSAweDEwICovCi0JY291bnQgPSAxMDAwICogZmFjdG9yOwotCXdoaWxlIChjb3VudCkgewotI2lmZGVmIEJOWDJYX0RNQUVfUkQKLQkJYm54MnhfcmVhZF9kbWFlKGJwLCBOSUdfUkVHX1NUQVQyX0JSQl9PQ1RFVCwgMik7Ci0JCXZhbCA9ICpibngyeF9zcChicCwgd2JfZGF0YVswXSk7Ci0jZWxzZQotCQl2YWwgPSBSRUdfUkQoYnAsIE5JR19SRUdfU1RBVDJfQlJCX09DVEVUKTsKLQkJUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVQyX0JSQl9PQ1RFVCArIDQpOwotI2VuZGlmCi0JCWlmICh2YWwgPT0gMHgxMCkKLQkJCWJyZWFrOwotCi0JCW1zbGVlcCgxMCk7Ci0JCWNvdW50LS07Ci0JfQotCWlmICh2YWwgIT0gMHgxMCkgewotCQlCTlgyWF9FUlIoIk5JRyB0aW1lb3V0ICB2YWwgPSAweCV4XG4iLCB2YWwpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogV2FpdCB1bnRpbCBQUlMgcmVnaXN0ZXIgc2hvd3MgMSBwYWNrZXQgKi8KLQljb3VudCA9IDEwMDAgKiBmYWN0b3I7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXZhbCA9IFJFR19SRChicCwgUFJTX1JFR19OVU1fT0ZfUEFDS0VUUyk7Ci0KLQkJaWYgKHZhbCA9PSAxKQotCQkJYnJlYWs7Ci0KLQkJbXNsZWVwKDEwKTsKLQkJY291bnQtLTsKLQl9Ci0JaWYgKHZhbCAhPSAweDEpIHsKLQkJQk5YMlhfRVJSKCJQUlMgdGltZW91dCB2YWwgPSAweCV4XG4iLCB2YWwpOwotCQlyZXR1cm4gLTI7Ci0JfQotCi0JLyogUmVzZXQgYW5kIGluaXQgQlJCLCBQUlMgKi8KLQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX0NMRUFSLCAweDMpOwotCW1zbGVlcCg1MCk7Ci0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9TRVQsIDB4Myk7Ci0JbXNsZWVwKDUwKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBCUkIxX0NPTU1PTl9TVEFSVCwgQlJCMV9DT01NT05fRU5EKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBQUlNfQ09NTU9OX1NUQVJULCBQUlNfQ09NTU9OX0VORCk7Ci0KLQlEUChORVRJRl9NU0dfSFcsICJwYXJ0MlxuIik7Ci0KLQkvKiBEaXNhYmxlIGlucHV0cyBvZiBwYXJzZXIgbmVpZ2hib3IgYmxvY2tzICovCi0JUkVHX1dSKGJwLCBUU0RNX1JFR19FTkFCTEVfSU4xLCAweDApOwotCVJFR19XUihicCwgVENNX1JFR19QUlNfSUZFTiwgMHgwKTsKLQlSRUdfV1IoYnAsIENGQ19SRUdfREVCVUcwLCAweDEpOwotCU5JR19XUihOSUdfUkVHX1BSU19SRVFfSU5fRU4sIDB4MCk7Ci0KLQkvKiBXcml0ZSAwIHRvIHBhcnNlciBjcmVkaXRzIGZvciBDRkMgc2VhcmNoIHJlcXVlc3QgKi8KLQlSRUdfV1IoYnAsIFBSU19SRUdfQ0ZDX1NFQVJDSF9JTklUSUFMX0NSRURJVCwgMHgwKTsKLQotCS8qIHNlbmQgMTAgRXRoZXJuZXQgcGFja2V0cyAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQlibngyeF9sYl9wY2t0KGJwKTsKLQotCS8qIFdhaXQgdW50aWwgTklHIHJlZ2lzdGVyIHNob3dzIDEwICsgMQotCSAgIHBhY2tldHMgb2Ygc2l6ZSAxMSoweDEwID0gMHhiMCAqLwotCWNvdW50ID0gMTAwMCAqIGZhY3RvcjsKLQl3aGlsZSAoY291bnQpIHsKLSNpZmRlZiBCTlgyWF9ETUFFX1JECi0JCWJueDJ4X3JlYWRfZG1hZShicCwgTklHX1JFR19TVEFUMl9CUkJfT0NURVQsIDIpOwotCQl2YWwgPSAqYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pOwotI2Vsc2UKLQkJdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVQyX0JSQl9PQ1RFVCk7Ci0JCVJFR19SRChicCwgTklHX1JFR19TVEFUMl9CUkJfT0NURVQgKyA0KTsKLSNlbmRpZgotCQlpZiAodmFsID09IDB4YjApCi0JCQlicmVhazsKLQotCQltc2xlZXAoMTApOwotCQljb3VudC0tOwotCX0KLQlpZiAodmFsICE9IDB4YjApIHsKLQkJQk5YMlhfRVJSKCJOSUcgdGltZW91dCAgdmFsID0gMHgleFxuIiwgdmFsKTsKLQkJcmV0dXJuIC0zOwotCX0KLQotCS8qIFdhaXQgdW50aWwgUFJTIHJlZ2lzdGVyIHNob3dzIDIgcGFja2V0cyAqLwotCXZhbCA9IFJFR19SRChicCwgUFJTX1JFR19OVU1fT0ZfUEFDS0VUUyk7Ci0JaWYgKHZhbCAhPSAyKQotCQlCTlgyWF9FUlIoIlBSUyB0aW1lb3V0ICB2YWwgPSAweCV4XG4iLCB2YWwpOwotCi0JLyogV3JpdGUgMSB0byBwYXJzZXIgY3JlZGl0cyBmb3IgQ0ZDIHNlYXJjaCByZXF1ZXN0ICovCi0JUkVHX1dSKGJwLCBQUlNfUkVHX0NGQ19TRUFSQ0hfSU5JVElBTF9DUkVESVQsIDB4MSk7Ci0KLQkvKiBXYWl0IHVudGlsIFBSUyByZWdpc3RlciBzaG93cyAzIHBhY2tldHMgKi8KLQltc2xlZXAoMTAgKiBmYWN0b3IpOwotCS8qIFdhaXQgdW50aWwgTklHIHJlZ2lzdGVyIHNob3dzIDEgcGFja2V0IG9mIHNpemUgMHgxMCAqLwotCXZhbCA9IFJFR19SRChicCwgUFJTX1JFR19OVU1fT0ZfUEFDS0VUUyk7Ci0JaWYgKHZhbCAhPSAzKQotCQlCTlgyWF9FUlIoIlBSUyB0aW1lb3V0ICB2YWwgPSAweCV4XG4iLCB2YWwpOwotCi0JLyogY2xlYXIgTklHIEVPUCBGSUZPICovCi0JZm9yIChpID0gMDsgaSA8IDExOyBpKyspCi0JCVJFR19SRChicCwgTklHX1JFR19JTkdSRVNTX0VPUF9MQl9GSUZPKTsKLQl2YWwgPSBSRUdfUkQoYnAsIE5JR19SRUdfSU5HUkVTU19FT1BfTEJfRU1QVFkpOwotCWlmICh2YWwgIT0gMSkgewotCQlCTlgyWF9FUlIoImNsZWFyIG9mIE5JRyBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLTQ7Ci0JfQotCi0JLyogUmVzZXQgYW5kIGluaXQgQlJCLCBQUlMsIE5JRyAqLwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsIDB4MDMpOwotCW1zbGVlcCg1MCk7Ci0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9TRVQsIDB4MDMpOwotCW1zbGVlcCg1MCk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgQlJCMV9DT01NT05fU1RBUlQsIEJSQjFfQ09NTU9OX0VORCk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgUFJTX0NPTU1PTl9TVEFSVCwgUFJTX0NPTU1PTl9FTkQpOwotI2lmbmRlZiBCQ01fSVNDU0kKLQkvKiBzZXQgTklDIG1vZGUgKi8KLQlSRUdfV1IoYnAsIFBSU19SRUdfTklDX01PREUsIDEpOwotI2VuZGlmCi0KLQkvKiBFbmFibGUgaW5wdXRzIG9mIHBhcnNlciBuZWlnaGJvciBibG9ja3MgKi8KLQlSRUdfV1IoYnAsIFRTRE1fUkVHX0VOQUJMRV9JTjEsIDB4N2ZmZmZmZmYpOwotCVJFR19XUihicCwgVENNX1JFR19QUlNfSUZFTiwgMHgxKTsKLQlSRUdfV1IoYnAsIENGQ19SRUdfREVCVUcwLCAweDApOwotCU5JR19XUihOSUdfUkVHX1BSU19SRVFfSU5fRU4sIDB4MSk7Ci0KLQlEUChORVRJRl9NU0dfSFcsICJkb25lXG4iKTsKLQotCXJldHVybiAwOyAvKiBPSyAqLwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfYmxvY2tzX2F0dGVudGlvbihzdHJ1Y3QgYm54MnggKmJwKQotewotCVJFR19XUihicCwgUFhQX1JFR19QWFBfSU5UX01BU0tfMCwgMCk7Ci0JUkVHX1dSKGJwLCBQWFBfUkVHX1BYUF9JTlRfTUFTS18xLCAwKTsKLQlSRUdfV1IoYnAsIERPUlFfUkVHX0RPUlFfSU5UX01BU0ssIDApOwotCVJFR19XUihicCwgQ0ZDX1JFR19DRkNfSU5UX01BU0ssIDApOwotCVJFR19XUihicCwgUU1fUkVHX1FNX0lOVF9NQVNLLCAwKTsKLQlSRUdfV1IoYnAsIFRNX1JFR19UTV9JTlRfTUFTSywgMCk7Ci0JUkVHX1dSKGJwLCBYU0RNX1JFR19YU0RNX0lOVF9NQVNLXzAsIDApOwotCVJFR19XUihicCwgWFNETV9SRUdfWFNETV9JTlRfTUFTS18xLCAwKTsKLQlSRUdfV1IoYnAsIFhDTV9SRUdfWENNX0lOVF9NQVNLLCAwKTsKLS8qICAgICAgUkVHX1dSKGJwLCBYU0VNX1JFR19YU0VNX0lOVF9NQVNLXzAsIDApOyAqLwotLyogICAgICBSRUdfV1IoYnAsIFhTRU1fUkVHX1hTRU1fSU5UX01BU0tfMSwgMCk7ICovCi0JUkVHX1dSKGJwLCBVU0RNX1JFR19VU0RNX0lOVF9NQVNLXzAsIDApOwotCVJFR19XUihicCwgVVNETV9SRUdfVVNETV9JTlRfTUFTS18xLCAwKTsKLQlSRUdfV1IoYnAsIFVDTV9SRUdfVUNNX0lOVF9NQVNLLCAwKTsKLS8qICAgICAgUkVHX1dSKGJwLCBVU0VNX1JFR19VU0VNX0lOVF9NQVNLXzAsIDApOyAqLwotLyogICAgICBSRUdfV1IoYnAsIFVTRU1fUkVHX1VTRU1fSU5UX01BU0tfMSwgMCk7ICovCi0JUkVHX1dSKGJwLCBHUkNCQVNFX1VQQiArIFBCX1JFR19QQl9JTlRfTUFTSywgMCk7Ci0JUkVHX1dSKGJwLCBDU0RNX1JFR19DU0RNX0lOVF9NQVNLXzAsIDApOwotCVJFR19XUihicCwgQ1NETV9SRUdfQ1NETV9JTlRfTUFTS18xLCAwKTsKLQlSRUdfV1IoYnAsIENDTV9SRUdfQ0NNX0lOVF9NQVNLLCAwKTsKLS8qICAgICAgUkVHX1dSKGJwLCBDU0VNX1JFR19DU0VNX0lOVF9NQVNLXzAsIDApOyAqLwotLyogICAgICBSRUdfV1IoYnAsIENTRU1fUkVHX0NTRU1fSU5UX01BU0tfMSwgMCk7ICovCi0JUkVHX1dSKGJwLCBQWFAyX1JFR19QWFAyX0lOVF9NQVNLLCAweDQ4MDAwMCk7Ci0JUkVHX1dSKGJwLCBUU0RNX1JFR19UU0RNX0lOVF9NQVNLXzAsIDApOwotCVJFR19XUihicCwgVFNETV9SRUdfVFNETV9JTlRfTUFTS18xLCAwKTsKLQlSRUdfV1IoYnAsIFRDTV9SRUdfVENNX0lOVF9NQVNLLCAwKTsKLS8qICAgICAgUkVHX1dSKGJwLCBUU0VNX1JFR19UU0VNX0lOVF9NQVNLXzAsIDApOyAqLwotLyogICAgICBSRUdfV1IoYnAsIFRTRU1fUkVHX1RTRU1fSU5UX01BU0tfMSwgMCk7ICovCi0JUkVHX1dSKGJwLCBDRFVfUkVHX0NEVV9JTlRfTUFTSywgMCk7Ci0JUkVHX1dSKGJwLCBETUFFX1JFR19ETUFFX0lOVF9NQVNLLCAwKTsKLS8qICAgICAgUkVHX1dSKGJwLCBNSVNDX1JFR19NSVNDX0lOVF9NQVNLLCAwKTsgKi8KLQlSRUdfV1IoYnAsIFBCRl9SRUdfUEJGX0lOVF9NQVNLLCAwWDE4KTsgCS8qIGJpdCAzLDQgbWFza2VkICovCi19Ci0KLXN0YXRpYyBpbnQgYm54MnhfZnVuY3Rpb25faW5pdChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgbW9kZSkKLXsKLQlpbnQgZnVuYyA9IGJwLT5wb3J0OwotCWludCBwb3J0ID0gZnVuYyA/IFBPUlQxIDogUE9SVDA7Ci0JdTMyIHZhbCwgaTsKLSNpZmRlZiBVU0VfRE1BRQotCXUzMiB3Yl93cml0ZVsyXTsKLSNlbmRpZgotCi0JRFAoQk5YMlhfTVNHX01DUCwgImZ1bmN0aW9uIGlzICVkICBtb2RlIGlzICV4XG4iLCBmdW5jLCBtb2RlKTsKLQlpZiAoKGZ1bmMgIT0gMCkgJiYgKGZ1bmMgIT0gMSkpIHsKLQkJQk5YMlhfRVJSKCJCQUQgZnVuY3Rpb24gbnVtYmVyICglZClcbiIsIGZ1bmMpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlibngyeF9ndW56aXBfaW5pdChicCk7Ci0KLQlpZiAobW9kZSAmIDB4MSkgeyAgICAgICAvKiBpbml0IGNvbW1vbiAqLwotCQlEUChCTlgyWF9NU0dfTUNQLCAic3RhcnRpbmcgY29tbW9uIGluaXQgIGZ1bmMgJWQgIG1vZGUgJXhcbiIsCi0JCSAgIGZ1bmMsIG1vZGUpOwotCQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVCwKLQkJICAgICAgIDB4ZmZmZmZmZmYpOwotCQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1NFVCwKLQkJICAgICAgIDB4ZmZmYyk7Ci0JCWJueDJ4X2luaXRfYmxvY2soYnAsIE1JU0NfQ09NTU9OX1NUQVJULCBNSVNDX0NPTU1PTl9FTkQpOwotCi0JCVJFR19XUihicCwgTUlTQ19SRUdfTENQTExfQ1RSTF9SRUdfMiwgMHgxMDApOwotCQltc2xlZXAoMzApOwotCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0xDUExMX0NUUkxfUkVHXzIsIDB4MCk7Ci0KLQkJYm54MnhfaW5pdF9ibG9jayhicCwgUFhQX0NPTU1PTl9TVEFSVCwgUFhQX0NPTU1PTl9FTkQpOwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBQWFAyX0NPTU1PTl9TVEFSVCwgUFhQMl9DT01NT05fRU5EKTsKLQotCQlibngyeF9pbml0X3B4cChicCk7Ci0KLQkJaWYgKENISVBfUkVWKGJwKSA9PSBDSElQX1JFVl9BeCkgewotCQkJLyogZW5hYmxlIEhXIGludGVycnVwdCBmcm9tIFBYUCBvbiBVU0RNCi0JCQkgICBvdmVyZmxvdyBiaXQgMTYgb24gSU5UX01BU0tfMCAqLwotCQkJUkVHX1dSKGJwLCBQWFBfUkVHX1BYUF9JTlRfTUFTS18wLCAwKTsKLQkJfQotCi0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCVJFR19XUihicCwgUFhQMl9SRUdfUlFfUU1fRU5ESUFOX00sIDEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1RNX0VORElBTl9NLCAxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9TUkNfRU5ESUFOX00sIDEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0NEVV9FTkRJQU5fTSwgMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfUlFfREJHX0VORElBTl9NLCAxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9IQ19FTkRJQU5fTSwgMSk7Ci0KLS8qICAgICAgCVJFR19XUihicCwgUFhQMl9SRUdfUkRfUEJGX1NXQVBfTU9ERSwgMSk7ICovCi0JCVJFR19XUihicCwgUFhQMl9SRUdfUkRfUU1fU1dBUF9NT0RFLCAxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9UTV9TV0FQX01PREUsIDEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX1NSQ19TV0FQX01PREUsIDEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX0NEVVJEX1NXQVBfTU9ERSwgMSk7Ci0jZW5kaWYKLQotI2lmbmRlZiBCQ01fSVNDU0kKLQkJLyogc2V0IE5JQyBtb2RlICovCi0JCVJFR19XUihicCwgUFJTX1JFR19OSUNfTU9ERSwgMSk7Ci0jZW5kaWYKLQotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0NEVV9QX1NJWkUsIDUpOwotI2lmZGVmIEJDTV9JU0NTSQotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1RNX1BfU0laRSwgNSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfUlFfUU1fUF9TSVpFLCA1KTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9TUkNfUF9TSVpFLCA1KTsKLSNlbmRpZgotCi0JCWJueDJ4X2luaXRfYmxvY2soYnAsIERNQUVfQ09NTU9OX1NUQVJULCBETUFFX0NPTU1PTl9FTkQpOwotCi0JCS8qIGxldCB0aGUgSFcgZG8gaXQncyBtYWdpYyAuLi4gKi8KLQkJbXNsZWVwKDEwMCk7Ci0JCS8qIGZpbmlzaCBQWFAgaW5pdAotCQkgICAoY2FuIGJlIG1vdmVkIHVwIGlmIHdlIHdhbnQgdG8gdXNlIHRoZSBETUFFKSAqLwotCQl2YWwgPSBSRUdfUkQoYnAsIFBYUDJfUkVHX1JRX0NGR19ET05FKTsKLQkJaWYgKHZhbCAhPSAxKSB7Ci0JCQlCTlgyWF9FUlIoIlBYUDIgQ0ZHIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJdmFsID0gUkVHX1JEKGJwLCBQWFAyX1JFR19SRF9JTklUX0RPTkUpOwotCQlpZiAodmFsICE9IDEpIHsKLQkJCUJOWDJYX0VSUigiUFhQMiBSRF9JTklUIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9ESVNBQkxFX0lOUFVUUywgMCk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfUkRfRElTQUJMRV9JTlBVVFMsIDApOwotCi0JCWJueDJ4X2luaXRfZmlsbChicCwgVFNFTV9SRUdfUFJBTSwgMCwgOCk7Ci0KLQkJYm54MnhfaW5pdF9ibG9jayhicCwgVENNX0NPTU1PTl9TVEFSVCwgVENNX0NPTU1PTl9FTkQpOwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBVQ01fQ09NTU9OX1NUQVJULCBVQ01fQ09NTU9OX0VORCk7Ci0JCWJueDJ4X2luaXRfYmxvY2soYnAsIENDTV9DT01NT05fU1RBUlQsIENDTV9DT01NT05fRU5EKTsKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgWENNX0NPTU1PTl9TVEFSVCwgWENNX0NPTU1PTl9FTkQpOwotCi0jaWZkZWYgQk5YMlhfRE1BRV9SRAotCQlibngyeF9yZWFkX2RtYWUoYnAsIFhTRU1fUkVHX1BBU1NJVkVfQlVGRkVSLCAzKTsKLQkJYm54MnhfcmVhZF9kbWFlKGJwLCBDU0VNX1JFR19QQVNTSVZFX0JVRkZFUiwgMyk7Ci0JCWJueDJ4X3JlYWRfZG1hZShicCwgVFNFTV9SRUdfUEFTU0lWRV9CVUZGRVIsIDMpOwotCQlibngyeF9yZWFkX2RtYWUoYnAsIFVTRU1fUkVHX1BBU1NJVkVfQlVGRkVSLCAzKTsKLSNlbHNlCi0JCVJFR19SRChicCwgWFNFTV9SRUdfUEFTU0lWRV9CVUZGRVIpOwotCQlSRUdfUkQoYnAsIFhTRU1fUkVHX1BBU1NJVkVfQlVGRkVSICsgNCk7Ci0JCVJFR19SRChicCwgWFNFTV9SRUdfUEFTU0lWRV9CVUZGRVIgKyA4KTsKLQkJUkVHX1JEKGJwLCBDU0VNX1JFR19QQVNTSVZFX0JVRkZFUik7Ci0JCVJFR19SRChicCwgQ1NFTV9SRUdfUEFTU0lWRV9CVUZGRVIgKyA0KTsKLQkJUkVHX1JEKGJwLCBDU0VNX1JFR19QQVNTSVZFX0JVRkZFUiArIDgpOwotCQlSRUdfUkQoYnAsIFRTRU1fUkVHX1BBU1NJVkVfQlVGRkVSKTsKLQkJUkVHX1JEKGJwLCBUU0VNX1JFR19QQVNTSVZFX0JVRkZFUiArIDQpOwotCQlSRUdfUkQoYnAsIFRTRU1fUkVHX1BBU1NJVkVfQlVGRkVSICsgOCk7Ci0JCVJFR19SRChicCwgVVNFTV9SRUdfUEFTU0lWRV9CVUZGRVIpOwotCQlSRUdfUkQoYnAsIFVTRU1fUkVHX1BBU1NJVkVfQlVGRkVSICsgNCk7Ci0JCVJFR19SRChicCwgVVNFTV9SRUdfUEFTU0lWRV9CVUZGRVIgKyA4KTsKLSNlbmRpZgotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBRTV9DT01NT05fU1RBUlQsIFFNX0NPTU1PTl9FTkQpOwotCQkvKiBzb2Z0IHJlc2V0IHB1bHNlICovCi0JCVJFR19XUihicCwgUU1fUkVHX1NPRlRfUkVTRVQsIDEpOwotCQlSRUdfV1IoYnAsIFFNX1JFR19TT0ZUX1JFU0VULCAwKTsKLQotI2lmZGVmIEJDTV9JU0NTSQotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBUSU1FUlNfQ09NTU9OX1NUQVJULCBUSU1FUlNfQ09NTU9OX0VORCk7Ci0jZW5kaWYKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgRFFfQ09NTU9OX1NUQVJULCBEUV9DT01NT05fRU5EKTsKLQkJUkVHX1dSKGJwLCBET1JRX1JFR19EUE1fQ0lEX09GU1QsIEJDTV9QQUdFX0JJVFMpOwotCQlpZiAoQ0hJUF9SRVYoYnApID09IENISVBfUkVWX0F4KSB7Ci0JCQkvKiBlbmFibGUgaHcgaW50ZXJydXB0IGZyb20gZG9vcmJlbGwgUSAqLwotCQkJUkVHX1dSKGJwLCBET1JRX1JFR19ET1JRX0lOVF9NQVNLLCAwKTsKLQkJfQotCi0JCWJueDJ4X2luaXRfYmxvY2soYnAsIEJSQjFfQ09NTU9OX1NUQVJULCBCUkIxX0NPTU1PTl9FTkQpOwotCi0JCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkgewotCQkJLyogZml4IGZvciBlbXVsYXRpb24gYW5kIEZQR0EgZm9yIG5vIHBhdXNlICovCi0JCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzAsIDUxMyk7Ci0JCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzEsIDUxMyk7Ci0JCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMCwgMCk7Ci0JCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMSwgMCk7Ci0JCX0KLQotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBQUlNfQ09NTU9OX1NUQVJULCBQUlNfQ09NTU9OX0VORCk7Ci0KLQkJYm54MnhfaW5pdF9ibG9jayhicCwgVFNETV9DT01NT05fU1RBUlQsIFRTRE1fQ09NTU9OX0VORCk7Ci0JCWJueDJ4X2luaXRfYmxvY2soYnAsIENTRE1fQ09NTU9OX1NUQVJULCBDU0RNX0NPTU1PTl9FTkQpOwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0RNX0NPTU1PTl9TVEFSVCwgVVNETV9DT01NT05fRU5EKTsKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgWFNETV9DT01NT05fU1RBUlQsIFhTRE1fQ09NTU9OX0VORCk7Ci0KLQkJYm54MnhfaW5pdF9maWxsKGJwLCBUU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKTsKLQotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBUU0VNX0NPTU1PTl9TVEFSVCwgVFNFTV9DT01NT05fRU5EKTsKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgVVNFTV9DT01NT05fU1RBUlQsIFVTRU1fQ09NTU9OX0VORCk7Ci0JCWJueDJ4X2luaXRfYmxvY2soYnAsIENTRU1fQ09NTU9OX1NUQVJULCBDU0VNX0NPTU1PTl9FTkQpOwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBYU0VNX0NPTU1PTl9TVEFSVCwgWFNFTV9DT01NT05fRU5EKTsKLQotCQkvKiBzeW5jIHNlbWkgcnRjICovCi0JCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsCi0JCSAgICAgICAweDgwMDAwMDAwKTsKLQkJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9TRVQsCi0JCSAgICAgICAweDgwMDAwMDAwKTsKLQotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBVUEJfQ09NTU9OX1NUQVJULCBVUEJfQ09NTU9OX0VORCk7Ci0JCWJueDJ4X2luaXRfYmxvY2soYnAsIFhQQl9DT01NT05fU1RBUlQsIFhQQl9DT01NT05fRU5EKTsKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgUEJGX0NPTU1PTl9TVEFSVCwgUEJGX0NPTU1PTl9FTkQpOwotCi0JCVJFR19XUihicCwgU1JDX1JFR19TT0ZUX1JTVCwgMSk7Ci0JCWZvciAoaSA9IFNSQ19SRUdfS0VZUlNTMF8wOyBpIDw9IFNSQ19SRUdfS0VZUlNTMV85OyBpICs9IDQpIHsKLQkJCVJFR19XUihicCwgaSwgMHhjMGNhYzAxYSk7Ci0JCQkvKiBUT0RPOiByZXBsYWNlIHdpdGggc29tZXRoaW5nIG1lYW5pbmdmdWwgKi8KLQkJfQotCQkvKiBTUkNIIENPTU1PTiBjb21lcyBoZXJlICovCi0JCVJFR19XUihicCwgU1JDX1JFR19TT0ZUX1JTVCwgMCk7Ci0KLQkJaWYgKHNpemVvZih1bmlvbiBjZHVfY29udGV4dCkgIT0gMTAyNCkgewotCQkJLyogd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IGEgY29udGV4dCBpcyAxMDI0IGJ5dGVzICovCi0JCQlwcmludGsoS0VSTl9BTEVSVCBQRlggInBsZWFzZSBhZGp1c3QgdGhlIHNpemUgb2YiCi0JCQkgICAgICAgIiBjZHVfY29udGV4dCglbGQpXG4iLAotCQkJICAgICAgIChsb25nKXNpemVvZih1bmlvbiBjZHVfY29udGV4dCkpOwotCQl9Ci0JCXZhbCA9ICg0IDw8IDI0KSArICgwIDw8IDEyKSArIDEwMjQ7Ci0JCVJFR19XUihicCwgQ0RVX1JFR19DRFVfR0xPQkFMX1BBUkFNUywgdmFsKTsKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgQ0RVX0NPTU1PTl9TVEFSVCwgQ0RVX0NPTU1PTl9FTkQpOwotCi0JCWJueDJ4X2luaXRfYmxvY2soYnAsIENGQ19DT01NT05fU1RBUlQsIENGQ19DT01NT05fRU5EKTsKLQkJUkVHX1dSKGJwLCBDRkNfUkVHX0lOSVRfUkVHLCAweDdGRik7Ci0KLQkJYm54MnhfaW5pdF9ibG9jayhicCwgSENfQ09NTU9OX1NUQVJULCBIQ19DT01NT05fRU5EKTsKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgTUlTQ19BRVVfQ09NTU9OX1NUQVJULAotCQkJCSBNSVNDX0FFVV9DT01NT05fRU5EKTsKLQkJLyogUlhQQ1MgQ09NTU9OIGNvbWVzIGhlcmUgKi8KLQkJLyogRU1BQzAgQ09NTU9OIGNvbWVzIGhlcmUgKi8KLQkJLyogRU1BQzEgQ09NTU9OIGNvbWVzIGhlcmUgKi8KLQkJLyogREJVIENPTU1PTiBjb21lcyBoZXJlICovCi0JCS8qIERCRyBDT01NT04gY29tZXMgaGVyZSAqLwotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBOSUdfQ09NTU9OX1NUQVJULCBOSUdfQ09NTU9OX0VORCk7Ci0KLQkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQkJbXNsZWVwKDIwMCk7Ci0KLQkJLyogZmluaXNoIENGQyBpbml0ICovCi0JCXZhbCA9IFJFR19SRChicCwgQ0ZDX1JFR19MTF9JTklUX0RPTkUpOwotCQlpZiAodmFsICE9IDEpIHsKLQkJCUJOWDJYX0VSUigiQ0ZDIExMX0lOSVQgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCQl2YWwgPSBSRUdfUkQoYnAsIENGQ19SRUdfQUNfSU5JVF9ET05FKTsKLQkJaWYgKHZhbCAhPSAxKSB7Ci0JCQlCTlgyWF9FUlIoIkNGQyBBQ19JTklUIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJdmFsID0gUkVHX1JEKGJwLCBDRkNfUkVHX0NBTV9JTklUX0RPTkUpOwotCQlpZiAodmFsICE9IDEpIHsKLQkJCUJOWDJYX0VSUigiQ0ZDIENBTV9JTklUIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJUkVHX1dSKGJwLCBDRkNfUkVHX0RFQlVHMCwgMCk7Ci0KLQkJLyogcmVhZCBOSUcgc3RhdGlzdGljCi0JCSAgIHRvIHNlZSBpZiB0aGlzIGlzIG91ciBmaXJzdCB1cCBzaW5jZSBwb3dlcnVwICovCi0jaWZkZWYgQk5YMlhfRE1BRV9SRAotCQlibngyeF9yZWFkX2RtYWUoYnAsIE5JR19SRUdfU1RBVDJfQlJCX09DVEVULCAyKTsKLQkJdmFsID0gKmJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKTsKLSNlbHNlCi0JCXZhbCA9IFJFR19SRChicCwgTklHX1JFR19TVEFUMl9CUkJfT0NURVQpOwotCQlSRUdfUkQoYnAsIE5JR19SRUdfU1RBVDJfQlJCX09DVEVUICsgNCk7Ci0jZW5kaWYKLQkJLyogZG8gaW50ZXJuYWwgbWVtb3J5IHNlbGYgdGVzdCAqLwotCQlpZiAoKHZhbCA9PSAwKSAmJiBibngyeF9pbnRfbWVtX3Rlc3QoYnApKSB7Ci0JCQlCTlgyWF9FUlIoImludGVybmFsIG1lbSBzZWxmdGVzdCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCi0JCS8qIGNsZWFyIFBYUDIgYXR0ZW50aW9ucyAqLwotCQlSRUdfUkQoYnAsIFBYUDJfUkVHX1BYUDJfSU5UX1NUU19DTFIpOwotCi0JCWVuYWJsZV9ibG9ja3NfYXR0ZW50aW9uKGJwKTsKLQkJLyogZW5hYmxlX2Jsb2Nrc19wYXJpdHkoYnApOyAqLwotCi0JCXN3aXRjaCAoYnAtPmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spIHsKLQkJY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjJHOgotCQkJLyogRmFuIGZhaWx1cmUgaXMgaW5kaWNhdGVkIGJ5IFNQSU8gNSAqLwotCQkJYm54Mnhfc2V0X3NwaW8oYnAsIE1JU0NfUkVHSVNURVJTX1NQSU9fNSwKLQkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfU1BJT19JTlBVVF9ISV9aKTsKLQotCQkJLyogc2V0IHRvIGFjdGl2ZSBsb3cgbW9kZSAqLwotCQkJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19TUElPX0lOVCk7Ci0JCQl2YWwgfD0gKCgxIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fNSkgPDwKLQkJCQkJTUlTQ19SRUdJU1RFUlNfU1BJT19JTlRfT0xEX1NFVF9QT1MpOwotCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPX0lOVCwgdmFsKTsKLQotCQkJLyogZW5hYmxlIGludGVycnVwdCB0byBzaWduYWwgdGhlIElHVSAqLwotCQkJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19TUElPX0VWRU5UX0VOKTsKLQkJCXZhbCB8PSAoMSA8PCBNSVNDX1JFR0lTVEVSU19TUElPXzUpOwotCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPX0VWRU5UX0VOLCB2YWwpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQl9IC8qIGVuZCBvZiBjb21tb24gaW5pdCAqLwotCi0JLyogcGVyIHBvcnQgaW5pdCAqLwotCi0JLyogdGhlIHBoeXMgYWRkcmVzcyBpcyBzaGlmdGVkIHJpZ2h0IDEyIGJpdHMgYW5kIGhhcyBhbiBhZGRlZAotCSAgIDE9dmFsaWQgYml0IGFkZGVkIHRvIHRoZSA1M3JkIGJpdAotCSAgIHRoZW4gc2luY2UgdGhpcyBpcyBhIHdpZGUgcmVnaXN0ZXIoVE0pCi0JICAgd2Ugc3BsaXQgaXQgaW50byB0d28gMzIgYml0IHdyaXRlcwotCSAqLwotI2RlZmluZSBSUV9PTkNISVBfQVRfUE9SVF9TSVpFICAzODQKLSNkZWZpbmUgT05DSElQX0FERFIxKHgpICAgKCh1MzIpKCgodTY0KXggPj4gMTIpICYgMHhGRkZGRkZGRikpCi0jZGVmaW5lIE9OQ0hJUF9BRERSMih4KSAgICgodTMyKSgoMSA8PCAyMCkgfCAoKHU2NCl4ID4+IDQ0KSkpCi0jZGVmaW5lIFBYUF9PTkVfSUxUKHgpICAgICgoeCA8PCAxMCkgfCB4KQotCi0JRFAoQk5YMlhfTVNHX01DUCwgInN0YXJ0aW5nIHBlci1mdW5jdGlvbiBpbml0IHBvcnQgaXMgJXhcbiIsIGZ1bmMpOwotCi0JUkVHX1dSKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgZnVuYyo0LCAwKTsKLQotCS8qIFBvcnQgUFhQIGNvbWVzIGhlcmUgKi8KLQkvKiBQb3J0IFBYUDIgY29tZXMgaGVyZSAqLwotCi0JLyogT2Zmc2V0IGlzCi0JICogUG9ydDAgIDAKLQkgKiBQb3J0MSAgMzg0ICovCi0JaSA9IGZ1bmMgKiBSUV9PTkNISVBfQVRfUE9SVF9TSVpFOwotI2lmZGVmIFVTRV9ETUFFCi0Jd2Jfd3JpdGVbMF0gPSBPTkNISVBfQUREUjEoYm54Mnhfc3BfbWFwcGluZyhicCwgY29udGV4dCkpOwotCXdiX3dyaXRlWzFdID0gT05DSElQX0FERFIyKGJueDJ4X3NwX21hcHBpbmcoYnAsIGNvbnRleHQpKTsKLQlSRUdfV1JfRE1BRShicCwgUFhQMl9SRUdfUlFfT05DSElQX0FUICsgaSo4LCB3Yl93cml0ZSwgMik7Ci0jZWxzZQotCVJFR19XUl9JTkQoYnAsIFBYUDJfUkVHX1JRX09OQ0hJUF9BVCArIGkqOCwKLQkJICAgT05DSElQX0FERFIxKGJueDJ4X3NwX21hcHBpbmcoYnAsIGNvbnRleHQpKSk7Ci0JUkVHX1dSX0lORChicCwgUFhQMl9SRUdfUlFfT05DSElQX0FUICsgaSo4ICsgNCwKLQkJICAgT05DSElQX0FERFIyKGJueDJ4X3NwX21hcHBpbmcoYnAsIGNvbnRleHQpKSk7Ci0jZW5kaWYKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX0NEVTBfTDJQICsgZnVuYyo0LCBQWFBfT05FX0lMVChpKSk7Ci0KLSNpZmRlZiBCQ01fSVNDU0kKLQkvKiBQb3J0MCAgMQotCSAqIFBvcnQxICAzODUgKi8KLQlpKys7Ci0Jd2Jfd3JpdGVbMF0gPSBPTkNISVBfQUREUjEoYnAtPnRpbWVyc19tYXBwaW5nKTsKLQl3Yl93cml0ZVsxXSA9IE9OQ0hJUF9BRERSMihicC0+dGltZXJzX21hcHBpbmcpOwotCVJFR19XUl9ETUFFKGJwLCBQWFAyX1JFR19SUV9PTkNISVBfQVQgKyBpKjgsIHdiX3dyaXRlLCAyKTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX1RNMF9MMlAgKyBmdW5jKjQsIFBYUF9PTkVfSUxUKGkpKTsKLQotCS8qIFBvcnQwICAyCi0JICogUG9ydDEgIDM4NiAqLwotCWkrKzsKLQl3Yl93cml0ZVswXSA9IE9OQ0hJUF9BRERSMShicC0+cW1fbWFwcGluZyk7Ci0Jd2Jfd3JpdGVbMV0gPSBPTkNISVBfQUREUjIoYnAtPnFtX21hcHBpbmcpOwotCVJFR19XUl9ETUFFKGJwLCBQWFAyX1JFR19SUV9PTkNISVBfQVQgKyBpKjgsIHdiX3dyaXRlLCAyKTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX1FNMF9MMlAgKyBmdW5jKjQsIFBYUF9PTkVfSUxUKGkpKTsKLQotCS8qIFBvcnQwICAzCi0JICogUG9ydDEgIDM4NyAqLwotCWkrKzsKLQl3Yl93cml0ZVswXSA9IE9OQ0hJUF9BRERSMShicC0+dDFfbWFwcGluZyk7Ci0Jd2Jfd3JpdGVbMV0gPSBPTkNISVBfQUREUjIoYnAtPnQxX21hcHBpbmcpOwotCVJFR19XUl9ETUFFKGJwLCBQWFAyX1JFR19SUV9PTkNISVBfQVQgKyBpKjgsIHdiX3dyaXRlLCAyKTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX1NSQzBfTDJQICsgZnVuYyo0LCBQWFBfT05FX0lMVChpKSk7Ci0jZW5kaWYKLQotCS8qIFBvcnQgVENNIGNvbWVzIGhlcmUgKi8KLQkvKiBQb3J0IFVDTSBjb21lcyBoZXJlICovCi0JLyogUG9ydCBDQ00gY29tZXMgaGVyZSAqLwotCWJueDJ4X2luaXRfYmxvY2soYnAsIGZ1bmMgPyBYQ01fUE9SVDFfU1RBUlQgOiBYQ01fUE9SVDBfU1RBUlQsCi0JCQkgICAgIGZ1bmMgPyBYQ01fUE9SVDFfRU5EIDogWENNX1BPUlQwX0VORCk7Ci0KLSNpZmRlZiBVU0VfRE1BRQotCXdiX3dyaXRlWzBdID0gMDsKLQl3Yl93cml0ZVsxXSA9IDA7Ci0jZW5kaWYKLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQlSRUdfV1IoYnAsIFFNX1JFR19CQVNFQUREUiArIChmdW5jKjMyICsgaSkqNCwgMTAyNCAqIDQgKiBpKTsKLSNpZmRlZiBVU0VfRE1BRQotCQlSRUdfV1JfRE1BRShicCwgUU1fUkVHX1BUUlRCTCArIChmdW5jKjMyICsgaSkqOCwgd2Jfd3JpdGUsIDIpOwotI2Vsc2UKLQkJUkVHX1dSX0lORChicCwgUU1fUkVHX1BUUlRCTCArIChmdW5jKjMyICsgaSkqOCwgMCk7Ci0JCVJFR19XUl9JTkQoYnAsIFFNX1JFR19QVFJUQkwgKyAoZnVuYyozMiArIGkpKjggKyA0LCAwKTsKLSNlbmRpZgotCX0KLQlSRUdfV1IoYnAsIFFNX1JFR19DT05OTlVNXzAgKyBmdW5jKjQsIDEwMjQvMTYgLSAxKTsKLQotCS8qIFBvcnQgUU0gY29tZXMgaGVyZSAqLwotCi0jaWZkZWYgQkNNX0lTQ1NJCi0JUkVHX1dSKGJwLCBUTV9SRUdfTElOMF9TQ0FOX1RJTUUgKyBmdW5jKjQsIDEwMjQvNjQqMjApOwotCVJFR19XUihicCwgVE1fUkVHX0xJTjBfTUFYX0FDVElWRV9DSUQgKyBmdW5jKjQsIDMxKTsKLQotCWJueDJ4X2luaXRfYmxvY2soYnAsIGZ1bmMgPyBUSU1FUlNfUE9SVDFfU1RBUlQgOiBUSU1FUlNfUE9SVDBfU1RBUlQsCi0JCQkgICAgIGZ1bmMgPyBUSU1FUlNfUE9SVDFfRU5EIDogVElNRVJTX1BPUlQwX0VORCk7Ci0jZW5kaWYKLQkvKiBQb3J0IERRIGNvbWVzIGhlcmUgKi8KLQkvKiBQb3J0IEJSQjEgY29tZXMgaGVyZSAqLwotCWJueDJ4X2luaXRfYmxvY2soYnAsIGZ1bmMgPyBQUlNfUE9SVDFfU1RBUlQgOiBQUlNfUE9SVDBfU1RBUlQsCi0JCQkgICAgIGZ1bmMgPyBQUlNfUE9SVDFfRU5EIDogUFJTX1BPUlQwX0VORCk7Ci0JLyogUG9ydCBUU0RNIGNvbWVzIGhlcmUgKi8KLQkvKiBQb3J0IENTRE0gY29tZXMgaGVyZSAqLwotCS8qIFBvcnQgVVNETSBjb21lcyBoZXJlICovCi0JLyogUG9ydCBYU0RNIGNvbWVzIGhlcmUgKi8KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBmdW5jID8gVFNFTV9QT1JUMV9TVEFSVCA6IFRTRU1fUE9SVDBfU1RBUlQsCi0JCQkgICAgIGZ1bmMgPyBUU0VNX1BPUlQxX0VORCA6IFRTRU1fUE9SVDBfRU5EKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBmdW5jID8gVVNFTV9QT1JUMV9TVEFSVCA6IFVTRU1fUE9SVDBfU1RBUlQsCi0JCQkgICAgIGZ1bmMgPyBVU0VNX1BPUlQxX0VORCA6IFVTRU1fUE9SVDBfRU5EKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBmdW5jID8gQ1NFTV9QT1JUMV9TVEFSVCA6IENTRU1fUE9SVDBfU1RBUlQsCi0JCQkgICAgIGZ1bmMgPyBDU0VNX1BPUlQxX0VORCA6IENTRU1fUE9SVDBfRU5EKTsKLQlibngyeF9pbml0X2Jsb2NrKGJwLCBmdW5jID8gWFNFTV9QT1JUMV9TVEFSVCA6IFhTRU1fUE9SVDBfU1RBUlQsCi0JCQkgICAgIGZ1bmMgPyBYU0VNX1BPUlQxX0VORCA6IFhTRU1fUE9SVDBfRU5EKTsKLQkvKiBQb3J0IFVQQiBjb21lcyBoZXJlICovCi0JLyogUG9ydCBYU0RNIGNvbWVzIGhlcmUgKi8KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBmdW5jID8gUEJGX1BPUlQxX1NUQVJUIDogUEJGX1BPUlQwX1NUQVJULAotCQkJICAgICBmdW5jID8gUEJGX1BPUlQxX0VORCA6IFBCRl9QT1JUMF9FTkQpOwotCi0JLyogY29uZmlndXJlIFBCRiB0byB3b3JrIHdpdGhvdXQgUEFVU0UgbXR1IDkwMDAgKi8KLQlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfUEFVU0VfRU5BQkxFICsgZnVuYyo0LCAwKTsKLQotCS8qIHVwZGF0ZSB0aHJlc2hvbGQgKi8KLQlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfQVJCX1RIUlNIICsgZnVuYyo0LCAoOTA0MC8xNikpOwotCS8qIHVwZGF0ZSBpbml0IGNyZWRpdCAqLwotCVJFR19XUihicCwgUEJGX1JFR19QMF9JTklUX0NSRCArIGZ1bmMqNCwgKDkwNDAvMTYpICsgNTUzIC0gMjIpOwotCi0JLyogcHJvYmUgY2hhbmdlcyAqLwotCVJFR19XUihicCwgUEJGX1JFR19JTklUX1AwICsgZnVuYyo0LCAxKTsKLQltc2xlZXAoNSk7Ci0JUkVHX1dSKGJwLCBQQkZfUkVHX0lOSVRfUDAgKyBmdW5jKjQsIDApOwotCi0jaWZkZWYgQkNNX0lTQ1NJCi0JLyogdGVsbCB0aGUgc2VhcmNoZXIgd2hlcmUgdGhlIFQyIHRhYmxlIGlzICovCi0JUkVHX1dSKGJwLCBTUkNfUkVHX0NPVU5URlJFRTAgKyBmdW5jKjQsIDE2KjEwMjQvNjQpOwotCi0Jd2Jfd3JpdGVbMF0gPSBVNjRfTE8oYnAtPnQyX21hcHBpbmcpOwotCXdiX3dyaXRlWzFdID0gVTY0X0hJKGJwLT50Ml9tYXBwaW5nKTsKLQlSRUdfV1JfRE1BRShicCwgU1JDX1JFR19GSVJTVEZSRUUwICsgZnVuYyo0LCB3Yl93cml0ZSwgMik7Ci0Jd2Jfd3JpdGVbMF0gPSBVNjRfTE8oKHU2NClicC0+dDJfbWFwcGluZyArIDE2KjEwMjQgLSA2NCk7Ci0Jd2Jfd3JpdGVbMV0gPSBVNjRfSEkoKHU2NClicC0+dDJfbWFwcGluZyArIDE2KjEwMjQgLSA2NCk7Ci0JUkVHX1dSX0RNQUUoYnAsIFNSQ19SRUdfTEFTVEZSRUUwICsgZnVuYyo0LCB3Yl93cml0ZSwgMik7Ci0KLQlSRUdfV1IoYnAsIFNSQ19SRUdfTlVNQkVSX0hBU0hfQklUUzAgKyBmdW5jKjQsIDEwKTsKLQkvKiBQb3J0IFNSQ0ggY29tZXMgaGVyZSAqLwotI2VuZGlmCi0JLyogUG9ydCBDRFUgY29tZXMgaGVyZSAqLwotCS8qIFBvcnQgQ0ZDIGNvbWVzIGhlcmUgKi8KLQlibngyeF9pbml0X2Jsb2NrKGJwLCBmdW5jID8gSENfUE9SVDFfU1RBUlQgOiBIQ19QT1JUMF9TVEFSVCwKLQkJCSAgICAgZnVuYyA/IEhDX1BPUlQxX0VORCA6IEhDX1BPUlQwX0VORCk7Ci0JYm54MnhfaW5pdF9ibG9jayhicCwgZnVuYyA/IE1JU0NfQUVVX1BPUlQxX1NUQVJUIDoKLQkJCQkgICAgTUlTQ19BRVVfUE9SVDBfU1RBUlQsCi0JCQkgICAgIGZ1bmMgPyBNSVNDX0FFVV9QT1JUMV9FTkQgOiBNSVNDX0FFVV9QT1JUMF9FTkQpOwotCS8qIFBvcnQgUFhQQ1MgY29tZXMgaGVyZSAqLwotCS8qIFBvcnQgRU1BQzAgY29tZXMgaGVyZSAqLwotCS8qIFBvcnQgRU1BQzEgY29tZXMgaGVyZSAqLwotCS8qIFBvcnQgREJVIGNvbWVzIGhlcmUgKi8KLQkvKiBQb3J0IERCRyBjb21lcyBoZXJlICovCi0JYm54MnhfaW5pdF9ibG9jayhicCwgZnVuYyA/IE5JR19QT1JUMV9TVEFSVCA6IE5JR19QT1JUMF9TVEFSVCwKLQkJCSAgICAgZnVuYyA/IE5JR19QT1JUMV9FTkQgOiBOSUdfUE9SVDBfRU5EKTsKLQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsgZnVuYyo0LCAxKTsKLQkvKiBQb3J0IE1DUCBjb21lcyBoZXJlICovCi0JLyogUG9ydCBETUFFIGNvbWVzIGhlcmUgKi8KLQotCXN3aXRjaCAoYnAtPmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spIHsKLQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6Ci0JCS8qIGFkZCBTUElPIDUgdG8gZ3JvdXAgMCAqLwotCQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCk7Ci0JCXZhbCB8PSBBRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNTsKLQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzAsIHZhbCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JYm54MnhfbGlua19yZXNldChicCk7Ci0KLQkvKiBSZXNldCBQQ0lFIGVycm9ycyBmb3IgZGVidWcgKi8KLQlSRUdfV1IoYnAsIDB4MjExNCwgMHhmZmZmZmZmZik7Ci0JUkVHX1dSKGJwLCAweDIxMjAsIDB4ZmZmZmZmZmYpOwotCVJFR19XUihicCwgMHgyODE0LCAweGZmZmZmZmZmKTsKLQotCS8qICEhISBtb3ZlIHRvIGluaXRfdmFsdWVzLmggKi8KLQlSRUdfV1IoYnAsIFhTRE1fUkVHX0lOSVRfQ1JFRElUX1BYUF9DVFJMLCAweDEpOwotCVJFR19XUihicCwgVVNETV9SRUdfSU5JVF9DUkVESVRfUFhQX0NUUkwsIDB4MSk7Ci0JUkVHX1dSKGJwLCBDU0RNX1JFR19JTklUX0NSRURJVF9QWFBfQ1RSTCwgMHgxKTsKLQlSRUdfV1IoYnAsIFRTRE1fUkVHX0lOSVRfQ1JFRElUX1BYUF9DVFJMLCAweDEpOwotCi0JUkVHX1dSKGJwLCBEQkdfUkVHX1BDSV9SRVFfQ1JFRElULCAweDEpOwotCVJFR19XUihicCwgVE1fUkVHX1BDSUFSQl9DUkRDTlRfVkFMLCAweDEpOwotCVJFR19XUihicCwgQ0RVX1JFR19DRFVfREVCVUcsIDB4MjY0KTsKLQlSRUdfV1IoYnAsIENEVV9SRUdfQ0RVX0RFQlVHLCAweDApOwotCi0JYm54MnhfZ3VuemlwX2VuZChicCk7Ci0KLQlpZiAoIW5vbWNwKSB7Ci0JCXBvcnQgPSBicC0+cG9ydDsKLQotCQlicC0+ZndfZHJ2X3B1bHNlX3dyX3NlcSA9Ci0JCQkJKFNITUVNX1JEKGJwLCBmdW5jX21iW3BvcnRdLmRydl9wdWxzZV9tYikgJgotCQkJCSBEUlZfUFVMU0VfU0VRX01BU0spOwotCQlicC0+ZndfbWIgPSBTSE1FTV9SRChicCwgZnVuY19tYltwb3J0XS5md19tYl9wYXJhbSk7Ci0JCURQKEJOWDJYX01TR19NQ1AsICJkcnZfcHVsc2UgMHgleCAgZndfbWIgMHgleFxuIiwKLQkJICAgYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEsIGJwLT5md19tYik7Ci0JfSBlbHNlIHsKLQkJYnAtPmZ3X21iID0gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogc2VuZCB0aGUgTUNQIGEgcmVxdWVzdCwgYmxvY2sgdW50aWwgdGhlcmUgaXMgYSByZXBseSAqLwotc3RhdGljIHUzMiBibngyeF9md19jb21tYW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBjb21tYW5kKQotewotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0JdTMyIHNlcSA9ICsrYnAtPmZ3X3NlcTsKLQl1MzIgcmMgPSAwOwotCi0JU0hNRU1fV1IoYnAsIGZ1bmNfbWJbcG9ydF0uZHJ2X21iX2hlYWRlciwgKGNvbW1hbmQgfCBzZXEpKTsKLQlEUChCTlgyWF9NU0dfTUNQLCAid3JvdGUgY29tbWFuZCAoJXgpIHRvIEZXIE1CXG4iLCAoY29tbWFuZCB8IHNlcSkpOwotCi0JLyogbGV0IHRoZSBGVyBkbyBpdCdzIG1hZ2ljIC4uLiAqLwotCW1zbGVlcCgxMDApOyAvKiBUQkQgKi8KLQotCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKLQkJbXNsZWVwKDkwMCk7Ci0KLQlyYyA9IFNITUVNX1JEKGJwLCBmdW5jX21iW3BvcnRdLmZ3X21iX2hlYWRlcik7Ci0JRFAoQk5YMlhfTVNHX01DUCwgInJlYWQgKCV4KSBzZXEgaXMgKCV4KSBmcm9tIEZXIE1CXG4iLCByYywgc2VxKTsKLQotCS8qIGlzIHRoaXMgYSByZXBseSB0byBvdXIgY29tbWFuZD8gKi8KLQlpZiAoc2VxID09IChyYyAmIEZXX01TR19TRVFfTlVNQkVSX01BU0spKSB7Ci0JCXJjICY9IEZXX01TR19DT0RFX01BU0s7Ci0KLQl9IGVsc2UgewotCQkvKiBGVyBCVUchICovCi0JCUJOWDJYX0VSUigiRlcgZmFpbGVkIHRvIHJlc3BvbmQhXG4iKTsKLQkJYm54MnhfZndfZHVtcChicCk7Ci0JCXJjID0gMDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfbWVtKHN0cnVjdCBibngyeCAqYnApCi17Ci0KLSNkZWZpbmUgQk5YMlhfUENJX0ZSRUUoeCwgeSwgc2l6ZSkgXAotCWRvIHsgXAotCQlpZiAoeCkgeyBcCi0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBzaXplLCB4LCB5KTsgXAotCQkJeCA9IE5VTEw7IFwKLQkJCXkgPSAwOyBcCi0JCX0gXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQk5YMlhfRlJFRSh4KSBcCi0JZG8geyBcCi0JCWlmICh4KSB7IFwKLQkJCXZmcmVlKHgpOyBcCi0JCQl4ID0gTlVMTDsgXAotCQl9IFwKLQl9IHdoaWxlICgwKQotCi0JaW50IGk7Ci0KLQkvKiBmYXN0cGF0aCAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0KLQkJLyogU3RhdHVzIGJsb2NrcyAqLwotCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsayksCi0JCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykgKwotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEpKTsKLQotCQkvKiBmYXN0IHBhdGggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjIHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KLQkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpKTsKLQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCi0JCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKLQotCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9idWZfcmluZykpOwotCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgcnhfZGVzY19yaW5nKSwKLQkJCSAgICAgICBibngyeF9mcChicCwgaSwgcnhfZGVzY19tYXBwaW5nKSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkgKiBOVU1fUlhfQkQpOwotCi0JCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX3JpbmcpLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX2Zhc3RfcGF0aF9yeF9jcWUpICoKLQkJCSAgICAgICBOVU1fUkNRX0JEKTsKLQl9Ci0KLQlCTlgyWF9GUkVFKGJwLT5mcCk7Ci0KLQkvKiBlbmQgb2YgZmFzdHBhdGggKi8KLQotCUJOWDJYX1BDSV9GUkVFKGJwLT5kZWZfc3RhdHVzX2JsaywgYnAtPmRlZl9zdGF0dXNfYmxrX21hcHBpbmcsCi0JCSAgICAgICAoc2l6ZW9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2spKSk7Ci0KLQlCTlgyWF9QQ0lfRlJFRShicC0+c2xvd3BhdGgsIGJwLT5zbG93cGF0aF9tYXBwaW5nLAotCQkgICAgICAgKHNpemVvZihzdHJ1Y3QgYm54Mnhfc2xvd3BhdGgpKSk7Ci0KLSNpZmRlZiBCQ01fSVNDU0kKLQlCTlgyWF9QQ0lfRlJFRShicC0+dDEsIGJwLT50MV9tYXBwaW5nLCA2NCoxMDI0KTsKLQlCTlgyWF9QQ0lfRlJFRShicC0+dDIsIGJwLT50Ml9tYXBwaW5nLCAxNioxMDI0KTsKLQlCTlgyWF9QQ0lfRlJFRShicC0+dGltZXJzLCBicC0+dGltZXJzX21hcHBpbmcsIDgqMTAyNCk7Ci0JQk5YMlhfUENJX0ZSRUUoYnAtPnFtLCBicC0+cW1fbWFwcGluZywgMTI4KjEwMjQpOwotI2VuZGlmCi0JQk5YMlhfUENJX0ZSRUUoYnAtPnNwcSwgYnAtPnNwcV9tYXBwaW5nLCBQQUdFX1NJWkUpOwotCi0jdW5kZWYgQk5YMlhfUENJX0ZSRUUKLSN1bmRlZiBCTlgyWF9LRlJFRQotfQotCi1zdGF0aWMgaW50IGJueDJ4X2FsbG9jX21lbShzdHJ1Y3QgYm54MnggKmJwKQotewotCi0jZGVmaW5lIEJOWDJYX1BDSV9BTExPQyh4LCB5LCBzaXplKSBcCi0JZG8geyBcCi0JCXggPSBwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwgc2l6ZSwgeSk7IFwKLQkJaWYgKHggPT0gTlVMTCkgXAotCQkJZ290byBhbGxvY19tZW1fZXJyOyBcCi0JCW1lbXNldCh4LCAwLCBzaXplKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQk5YMlhfQUxMT0MoeCwgc2l6ZSkgXAotCWRvIHsgXAotCQl4ID0gdm1hbGxvYyhzaXplKTsgXAotCQlpZiAoeCA9PSBOVUxMKSBcCi0JCQlnb3RvIGFsbG9jX21lbV9lcnI7IFwKLQkJbWVtc2V0KHgsIDAsIHNpemUpOyBcCi0JfSB3aGlsZSAoMCkKLQotCWludCBpOwotCi0JLyogZmFzdHBhdGggKi8KLQlCTlgyWF9BTExPQyhicC0+ZnAsIHNpemVvZihzdHJ1Y3QgYm54MnhfZmFzdHBhdGgpICogYnAtPm51bV9xdWV1ZXMpOwotCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJYm54MnhfZnAoYnAsIGksIGJwKSA9IGJwOwotCi0JCS8qIFN0YXR1cyBibG9ja3MgKi8KLQkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKSwKLQkJCQkmYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykgKwotCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEpKTsKLQotCQlibngyeF9mcChicCwgaSwgaHdfdHhfcHJvZHMpID0KLQkJCQkodm9pZCAqKShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsaykgKyAxKTsKLQotCQlibngyeF9mcChicCwgaSwgdHhfcHJvZHNfbWFwcGluZykgPQotCQkJCWJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpICsKLQkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKTsKLQotCQkvKiBmYXN0IHBhdGggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjIHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KLQkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IHN3X3R4X2JkKSAqIE5VTV9UWF9CRCk7Ci0JCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKLQkJCQkmYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKLQotCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgcnhfYnVmX3JpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3Qgc3dfcnhfYmQpICogTlVNX1JYX0JEKTsKLQkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX3JpbmcpLAotCQkJCSZibngyeF9mcChicCwgaSwgcnhfZGVzY19tYXBwaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkgKiBOVU1fUlhfQkQpOwotCi0JCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgcnhfY29tcF9yaW5nKSwKLQkJCQkmYm54MnhfZnAoYnAsIGksIHJ4X2NvbXBfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSkgKgotCQkJCU5VTV9SQ1FfQkQpOwotCi0JfQotCS8qIGVuZCBvZiBmYXN0cGF0aCAqLwotCi0JQk5YMlhfUENJX0FMTE9DKGJwLT5kZWZfc3RhdHVzX2JsaywgJmJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLAotCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2spKTsKLQotCUJOWDJYX1BDSV9BTExPQyhicC0+c2xvd3BhdGgsICZicC0+c2xvd3BhdGhfbWFwcGluZywKLQkJCXNpemVvZihzdHJ1Y3QgYm54Mnhfc2xvd3BhdGgpKTsKLQotI2lmZGVmIEJDTV9JU0NTSQotCUJOWDJYX1BDSV9BTExPQyhicC0+dDEsICZicC0+dDFfbWFwcGluZywgNjQqMTAyNCk7Ci0KLQkvKiBJbml0aWFsaXplIFQxICovCi0JZm9yIChpID0gMDsgaSA8IDY0KjEwMjQ7IGkgKz0gNjQpIHsKLQkJKih1NjQgKikoKGNoYXIgKilicC0+dDEgKyBpICsgNTYpID0gMHgwVUw7Ci0JCSoodTY0ICopKChjaGFyICopYnAtPnQxICsgaSArIDMpID0gMHgwVUw7Ci0JfQotCi0JLyogYWxsb2NhdGUgc2VhcmNoZXIgVDIgdGFibGUKLQkgICB3ZSBhbGxvY2F0ZSAxLzQgb2YgYWxsb2MgbnVtIGZvciBUMgotCSAgKHdoaWNoIGlzIG5vdCBlbnRlcmVkIGludG8gdGhlIElMVCkgKi8KLQlCTlgyWF9QQ0lfQUxMT0MoYnAtPnQyLCAmYnAtPnQyX21hcHBpbmcsIDE2KjEwMjQpOwotCi0JLyogSW5pdGlhbGl6ZSBUMiAqLwotCWZvciAoaSA9IDA7IGkgPCAxNioxMDI0OyBpICs9IDY0KQotCQkqICh1NjQgKikoKGNoYXIgKilicC0+dDIgKyBpICsgNTYpID0gYnAtPnQyX21hcHBpbmcgKyBpICsgNjQ7Ci0KLQkvKiBub3cgZml4dXAgdGhlIGxhc3QgbGluZSBpbiB0aGUgYmxvY2sgdG8gcG9pbnQgdG8gdGhlIG5leHQgYmxvY2sgKi8KLQkqKHU2NCAqKSgoY2hhciAqKWJwLT50MiArIDEwMjQqMTYtOCkgPSBicC0+dDJfbWFwcGluZzsKLQotCS8qIFRpbWVyIGJsb2NrIGFycmF5IChNQVhfQ09OTio4KSBwaHlzIHVuY2FjaGVkIGZvciBub3cgMTAyNCBjb25ucyAqLwotCUJOWDJYX1BDSV9BTExPQyhicC0+dGltZXJzLCAmYnAtPnRpbWVyc19tYXBwaW5nLCA4KjEwMjQpOwotCi0JLyogUU0gcXVldWVzICgxMjgqTUFYX0NPTk4pICovCi0JQk5YMlhfUENJX0FMTE9DKGJwLT5xbSwgJmJwLT5xbV9tYXBwaW5nLCAxMjgqMTAyNCk7Ci0jZW5kaWYKLQotCS8qIFNsb3cgcGF0aCByaW5nICovCi0JQk5YMlhfUENJX0FMTE9DKGJwLT5zcHEsICZicC0+c3BxX21hcHBpbmcsIEJDTV9QQUdFX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci0KLWFsbG9jX21lbV9lcnI6Ci0JYm54MnhfZnJlZV9tZW0oYnApOwotCXJldHVybiAtRU5PTUVNOwotCi0jdW5kZWYgQk5YMlhfUENJX0FMTE9DCi0jdW5kZWYgQk5YMlhfQUxMT0MKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZnJlZV90eF9za2JzKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQotCQl1MTYgYmRfY29ucyA9IGZwLT50eF9iZF9jb25zOwotCQl1MTYgc3dfcHJvZCA9IGZwLT50eF9wa3RfcHJvZDsKLQkJdTE2IHN3X2NvbnMgPSBmcC0+dHhfcGt0X2NvbnM7Ci0KLQkJQlVHX1RSQVAoZnAtPnR4X2J1Zl9yaW5nICE9IE5VTEwpOwotCi0JCXdoaWxlIChzd19jb25zICE9IHN3X3Byb2QpIHsKLQkJCWJkX2NvbnMgPSBibngyeF9mcmVlX3R4X3BrdChicCwgZnAsIFRYX0JEKHN3X2NvbnMpKTsKLQkJCXN3X2NvbnMrKzsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZnJlZV9yeF9za2JzKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGksIGo7Ci0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKLQotCQlCVUdfVFJBUChmcC0+cnhfYnVmX3JpbmcgIT0gTlVMTCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9CRDsgaSsrKSB7Ci0JCQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbaV07Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcnhfYnVmLT5za2I7Ci0KLQkJCWlmIChza2IgPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQotCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKLQkJCQkJIHBjaV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCi0JCQkJCSBicC0+cnhfYnVmX3VzZV9zaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCQkJcnhfYnVmLT5za2IgPSBOVUxMOwotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9mcmVlX3NrYnMoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlibngyeF9mcmVlX3R4X3NrYnMoYnApOwotCWJueDJ4X2ZyZWVfcnhfc2ticyhicCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfbXNpeF9pcnFzKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGk7Ci0KLQlmcmVlX2lycShicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsIGJwLT5kZXYpOwotCURQKE5FVElGX01TR19JRkRPV04sICJyZWxlYXNlZCBzcCBpcnEgKCVkKVxuIiwKLQkgICBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IpOwotCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImFib3V0IHRvIHJlbGVhc2UgZnAgIyVkLT4lZCBpcnEgICIKLQkJICAgInN0YXRlKCV4KVxuIiwgaSwgYnAtPm1zaXhfdGFibGVbaSArIDFdLnZlY3RvciwKLQkJICAgYm54MnhfZnAoYnAsIGksIHN0YXRlKSk7Ci0KLQkJaWYgKGJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkgIT0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEKQotCQkJQk5YMlhfRVJSKCJJUlEgb2YgZnAgIyVkIGJlaW5nIGZyZWVkIHdoaWxlICIKLQkJCQkgICJzdGF0ZSAhPSBjbG9zZWRcbiIsIGkpOwotCi0JCWZyZWVfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyAxXS52ZWN0b3IsICZicC0+ZnBbaV0pOwotCX0KLQotfQotCi1zdGF0aWMgdm9pZCBibngyeF9mcmVlX2lycShzdHJ1Y3QgYm54MnggKmJwKQotewotCi0JaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgewotCi0JCWJueDJ4X2ZyZWVfbXNpeF9pcnFzKGJwKTsKLQkJcGNpX2Rpc2FibGVfbXNpeChicC0+cGRldik7Ci0KLQkJYnAtPmZsYWdzICY9IH5VU0lOR19NU0lYX0ZMQUc7Ci0KLQl9IGVsc2UKLQkJZnJlZV9pcnEoYnAtPnBkZXYtPmlycSwgYnAtPmRldik7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfZW5hYmxlX21zaXgoc3RydWN0IGJueDJ4ICpicCkKLXsKLQotCWludCBpOwotCi0JYnAtPm1zaXhfdGFibGVbMF0uZW50cnkgPSAwOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQlicC0+bXNpeF90YWJsZVtpICsgMV0uZW50cnkgPSBpICsgMTsKLQotCWlmIChwY2lfZW5hYmxlX21zaXgoYnAtPnBkZXYsICZicC0+bXNpeF90YWJsZVswXSwKLQkJCQkgICAgIGJwLT5udW1fcXVldWVzICsgMSkpewotCQlCTlgyWF9MT0coImZhaWxlZCB0byBlbmFibGUgTVNJLVhcbiIpOwotCQlyZXR1cm4gLTE7Ci0KLQl9Ci0KLQlicC0+ZmxhZ3MgfD0gVVNJTkdfTVNJWF9GTEFHOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQotCi1zdGF0aWMgaW50IGJueDJ4X3JlcV9tc2l4X2lycXMoc3RydWN0IGJueDJ4ICpicCkKLXsKLQotCWludCBpLCByYzsKLQotCXJjID0gcmVxdWVzdF9pcnEoYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLCBibngyeF9tc2l4X3NwX2ludCwgMCwKLQkJCSBicC0+ZGV2LT5uYW1lLCBicC0+ZGV2KTsKLQotCWlmIChyYykgewotCQlCTlgyWF9FUlIoInJlcXVlc3Qgc3AgaXJxIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJcmMgPSByZXF1ZXN0X2lycShicC0+bXNpeF90YWJsZVtpICsgMV0udmVjdG9yLAotCQkJCSBibngyeF9tc2l4X2ZwX2ludCwgMCwKLQkJCQkgYnAtPmRldi0+bmFtZSwgJmJwLT5mcFtpXSk7Ci0KLQkJaWYgKHJjKSB7Ci0JCQlCTlgyWF9FUlIoInJlcXVlc3QgZnAgIyVkIGlycSBmYWlsZWQgICIKLQkJCQkgICJyYyAlZFxuIiwgaSwgcmMpOwotCQkJYm54MnhfZnJlZV9tc2l4X2lycXMoYnApOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCi0JCWJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkgPSBCTlgyWF9GUF9TVEFURV9JUlE7Ci0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotfQotCi1zdGF0aWMgaW50IGJueDJ4X3JlcV9pcnEoc3RydWN0IGJueDJ4ICpicCkKLXsKLQotCWludCByYyA9IHJlcXVlc3RfaXJxKGJwLT5wZGV2LT5pcnEsIGJueDJ4X2ludGVycnVwdCwKLQkJCSAgICAgSVJRRl9TSEFSRUQsIGJwLT5kZXYtPm5hbWUsIGJwLT5kZXYpOwotCWlmICghcmMpCi0JCWJueDJ4X2ZwKGJwLCAwLCBzdGF0ZSkgPSBCTlgyWF9GUF9TVEFURV9JUlE7Ci0KLQlyZXR1cm4gcmM7Ci0KLX0KLQotLyoKLSAqIEluaXQgc2VydmljZSBmdW5jdGlvbnMKLSAqLwotCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfbWFjX2FkZHIoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kICpjb25maWcgPSBibngyeF9zcChicCwgbWFjX2NvbmZpZyk7Ci0KLQkvKiBDQU0gYWxsb2NhdGlvbgotCSAqIHVuaWNhc3RzIDAtMzE6cG9ydDAgMzItNjM6cG9ydDEKLQkgKiBtdWx0aWNhc3QgNjQtMTI3OnBvcnQwIDEyOC0xOTE6cG9ydDEKLQkgKi8KLQljb25maWctPmhkci5sZW5ndGhfNmIgPSAyOwotCWNvbmZpZy0+aGRyLm9mZnNldCA9IGJwLT5wb3J0ID8gMzEgOiAwOwotCWNvbmZpZy0+aGRyLnJlc2VydmVkMCA9IDA7Ci0JY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKLQotCS8qIHByaW1hcnkgTUFDICovCi0JY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9Ci0JCQkJCXN3YWIxNigqKHUxNiAqKSZicC0+ZGV2LT5kZXZfYWRkclswXSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciA9Ci0JCQkJCXN3YWIxNigqKHUxNiAqKSZicC0+ZGV2LT5kZXZfYWRkclsyXSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5LmxzYl9tYWNfYWRkciA9Ci0JCQkJCXN3YWIxNigqKHUxNiAqKSZicC0+ZGV2LT5kZXZfYWRkcls0XSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5LmZsYWdzID0gY3B1X3RvX2xlMTYoYnAtPnBvcnQpOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9IDA7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0udGFyZ2V0X3RhYmxlX2VudHJ5LmNsaWVudF9pZCA9IDA7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0udGFyZ2V0X3RhYmxlX2VudHJ5LnZsYW5faWQgPSAwOwotCi0JRFAoTkVUSUZfTVNHX0lGVVAsICJzZXR0aW5nIE1BQyAoJTA0eDolMDR4OiUwNHgpXG4iLAotCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNhbV9lbnRyeS5tc2JfbWFjX2FkZHIsCi0JICAgY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciwKLQkgICBjb25maWctPmNvbmZpZ190YWJsZVswXS5jYW1fZW50cnkubHNiX21hY19hZGRyKTsKLQotCS8qIGJyb2FkY2FzdCAqLwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5tc2JfbWFjX2FkZHIgPSAweGZmZmY7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciA9IDB4ZmZmZjsKLQljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubHNiX21hY19hZGRyID0gMHhmZmZmOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5mbGFncyA9IGNwdV90b19sZTE2KGJwLT5wb3J0KTsKLQljb25maWctPmNvbmZpZ190YWJsZVsxXS50YXJnZXRfdGFibGVfZW50cnkuZmxhZ3MgPQotCQkJCVRTVE9STV9DQU1fVEFSR0VUX1RBQkxFX0VOVFJZX0JST0FEQ0FTVDsKLQljb25maWctPmNvbmZpZ190YWJsZVsxXS50YXJnZXRfdGFibGVfZW50cnkuY2xpZW50X2lkID0gMDsKLQljb25maWctPmNvbmZpZ190YWJsZVsxXS50YXJnZXRfdGFibGVfZW50cnkudmxhbl9pZCA9IDA7Ci0KLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLAotCQkgICAgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX2NvbmZpZykpLAotCQkgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX2NvbmZpZykpLCAwKTsKLX0KLQotc3RhdGljIGludCBibngyeF93YWl0X3JhbXJvZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc3RhdGUsIGludCBpZHgsCi0JCQkgICAgIGludCAqc3RhdGVfcCwgaW50IHBvbGwpCi17Ci0JLyogY2FuIHRha2UgYSB3aGlsZSBpZiBhbnkgcG9ydCBpcyBydW5uaW5nICovCi0JaW50IHRpbWVvdXQgPSA1MDA7Ci0KLQlEUChORVRJRl9NU0dfSUZVUCwgIiVzIGZvciBzdGF0ZSB0byBiZWNvbWUgJXggb24gSURYIFslZF1cbiIsCi0JICAgcG9sbCA/ICJwb2xsaW5nIiA6ICJ3YWl0aW5nIiwgc3RhdGUsIGlkeCk7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0Jd2hpbGUgKHRpbWVvdXQpIHsKLQotCQlpZiAocG9sbCkgewotCQkJYm54MnhfcnhfaW50KGJwLT5mcCwgMTApOwotCQkJLyogSWYgaW5kZXggaXMgZGlmZmVyZW50IGZyb20gMAotCQkJICogVGhlIHJlcGx5IGZvciBzb21lIGNvbW1hbmRzIHdpbGwKLQkJCSAqIGJlIG9uIHRoZSBub25lIGRlZmF1bHQgcXVldWUKLQkJCSAqLwotCQkJaWYgKGlkeCkKLQkJCQlibngyeF9yeF9pbnQoJmJwLT5mcFtpZHhdLCAxMCk7Ci0JCX0KLQotCQltYigpOyAvKiBzdGF0ZSBpcyBjaGFuZ2VkIGJ5IGJueDJ4X3NwX2V2ZW50KCkqLwotCi0JCWlmICgqc3RhdGVfcCA9PSBzdGF0ZSkKLQkJCXJldHVybiAwOwotCi0JCXRpbWVvdXQtLTsKLQkJbXNsZWVwKDEpOwotCi0JfQotCi0JLyogdGltZW91dCEgKi8KLQlCTlgyWF9FUlIoInRpbWVvdXQgJXMgZm9yIHN0YXRlICV4IG9uIElEWCBbJWRdXG4iLAotCQkgIHBvbGwgPyAicG9sbGluZyIgOiAid2FpdGluZyIsIHN0YXRlLCBpZHgpOwotCi0JcmV0dXJuIC1FQlVTWTsKLX0KLQotc3RhdGljIGludCBibngyeF9zZXR1cF9sZWFkaW5nKHN0cnVjdCBibngyeCAqYnApCi17Ci0KLQkvKiByZXNldCBJR1Ugc3RhdGUgKi8KLQlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQ1NUT1JNX0lELCAwLCBJR1VfSU5UX0VOQUJMRSwgMCk7Ci0KLQkvKiBTRVRVUCByYW1yb2QgKi8KLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX1NFVFVQLCAwLCAwLCAwLCAwKTsKLQotCXJldHVybiBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfU1RBVEVfT1BFTiwgMCwgJihicC0+c3RhdGUpLCAwKTsKLQotfQotCi1zdGF0aWMgaW50IGJueDJ4X3NldHVwX211bHRpKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKLXsKLQotCS8qIHJlc2V0IElHVSBzdGF0ZSAqLwotCWJueDJ4X2Fja19zYihicCwgaW5kZXgsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOwotCi0JLyogU0VUVVAgcmFtcm9kICovCi0JYnAtPmZwW2luZGV4XS5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX09QRU5JTkc7Ci0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQLCBpbmRleCwgMCwgaW5kZXgsIDApOwotCi0JLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwotCXJldHVybiBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfT1BFTiwgaW5kZXgsCi0JCQkJICYoYnAtPmZwW2luZGV4XS5zdGF0ZSksIDApOwotCi19Ci0KLQotc3RhdGljIGludCBibngyeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7Ci1zdGF0aWMgdm9pZCBibngyeF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotc3RhdGljIGludCBibngyeF9uaWNfbG9hZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgcmVxX2lycSkKLXsKLQl1MzIgbG9hZF9jb2RlOwotCWludCBpOwotCi0JYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FEOwotCi0JLyogU2VuZCBMT0FEX1JFUVVFU1QgY29tbWFuZCB0byBNQ1AuCi0JICAgUmV0dXJucyB0aGUgdHlwZSBvZiBMT0FEIGNvbW1hbmQ6IGlmIGl0IGlzIHRoZQotCSAgIGZpcnN0IHBvcnQgdG8gYmUgaW5pdGlhbGl6ZWQgY29tbW9uIGJsb2NrcyBzaG91bGQgYmUKLQkgICBpbml0aWFsaXplZCwgb3RoZXJ3aXNlIC0gbm90LgotCSovCi0JaWYgKCFub21jcCkgewotCQlsb2FkX2NvZGUgPSBibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfTE9BRF9SRVEpOwotCQlpZiAoIWxvYWRfY29kZSkgewotCQkJQk5YMlhfRVJSKCJNQ1AgcmVzcG9uc2UgZmFpbHVyZSwgdW5sb2FkaW5nXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQkJaWYgKGxvYWRfY29kZSA9PSBGV19NU0dfQ09ERV9EUlZfTE9BRF9SRUZVU0VEKSB7Ci0JCQlCTlgyWF9FUlIoIk1DUCByZWZ1c2VkIGxvYWQgcmVxdWVzdCwgdW5sb2FkaW5nXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7IC8qIG90aGVyIHBvcnQgaW4gZGlhZ25vc3RpYyBtb2RlICovCi0JCX0KLQl9IGVsc2UgewotCQlsb2FkX2NvZGUgPSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT047Ci0JfQotCi0JLyogaWYgd2UgY2FuJ3QgdXNlIG1zaXggd2Ugb25seSBuZWVkIG9uZSBmcCwKLQkgKiBzbyB0cnkgdG8gZW5hYmxlIG1zaXggd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBmcCdzCi0JICogYW5kIGZhbGxiYWNrIHRvIGludGEgd2l0aCBvbmUgZnAKLQkgKi8KLQlpZiAocmVxX2lycSkgewotCQlpZiAodXNlX2ludGEpIHsKLQkJCWJwLT5udW1fcXVldWVzID0gMTsKLQkJfSBlbHNlIHsKLQkJCWlmICgodXNlX211bHRpID4gMSkgJiYgKHVzZV9tdWx0aSA8PSAxNikpCi0JCQkJLyogdXNlciByZXF1ZXN0ZWQgbnVtYmVyICovCi0JCQkJYnAtPm51bV9xdWV1ZXMgPSB1c2VfbXVsdGk7Ci0JCQllbHNlIGlmICh1c2VfbXVsdGkgPT0gMSkKLQkJCQlicC0+bnVtX3F1ZXVlcyA9IG51bV9vbmxpbmVfY3B1cygpOwotCQkJZWxzZQotCQkJCWJwLT5udW1fcXVldWVzID0gMTsKLQotCQkJaWYgKGJueDJ4X2VuYWJsZV9tc2l4KGJwKSkgewotCQkJCS8qIGZhaWxlZCB0byBlbmFibGUgbXNpeCAqLwotCQkJCWJwLT5udW1fcXVldWVzID0gMTsKLQkJCQlpZiAodXNlX211bHRpKQotCQkJCQlCTlgyWF9FUlIoIk11bHRpIHJlcXVlc3RlZCBidXQgZmFpbGVkIgotCQkJCQkJICAiIHRvIGVuYWJsZSBNU0ktWFxuIik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlEUChORVRJRl9NU0dfSUZVUCwgInNldCBudW1iZXIgb2YgcXVldWVzIHRvICVkXG4iLCBicC0+bnVtX3F1ZXVlcyk7Ci0KLQlpZiAoYm54MnhfYWxsb2NfbWVtKGJwKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAocmVxX2lycSkgewotCQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSB7Ci0JCQlpZiAoYm54MnhfcmVxX21zaXhfaXJxcyhicCkpIHsKLQkJCQlwY2lfZGlzYWJsZV9tc2l4KGJwLT5wZGV2KTsKLQkJCQlnb3RvIGxvYWRfZXJyb3I7Ci0JCQl9Ci0KLQkJfSBlbHNlIHsKLQkJCWlmIChibngyeF9yZXFfaXJxKGJwKSkgewotCQkJCUJOWDJYX0VSUigiSVJRIHJlcXVlc3QgZmFpbGVkLCBhYm9ydGluZ1xuIik7Ci0JCQkJZ290byBsb2FkX2Vycm9yOwotCQkJfQotCQl9Ci0JfQotCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCi0JCW5ldGlmX25hcGlfYWRkKGJwLT5kZXYsICZibngyeF9mcChicCwgaSwgbmFwaSksCi0JCQkgICAgICAgYm54MnhfcG9sbCwgMTI4KTsKLQotCi0JLyogSW5pdGlhbGl6ZSBIVyAqLwotCWlmIChibngyeF9mdW5jdGlvbl9pbml0KGJwLAotCQkJCShsb2FkX2NvZGUgPT0gRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OKSkpIHsKLQkJQk5YMlhfRVJSKCJIVyBpbml0IGZhaWxlZCwgYWJvcnRpbmdcbiIpOwotCQlnb3RvIGxvYWRfZXJyb3I7Ci0JfQotCi0KLQlhdG9taWNfc2V0KCZicC0+aW50cl9zZW0sIDApOwotCi0KLQkvKiBTZXR1cCBOSUMgaW50ZXJuYWxzIGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLwotCWJueDJ4X25pY19pbml0KGJwKTsKLQotCS8qIFNlbmQgTE9BRF9ET05FIGNvbW1hbmQgdG8gTUNQICovCi0JaWYgKCFub21jcCkgewotCQlsb2FkX2NvZGUgPSBibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfTE9BRF9ET05FKTsKLQkJaWYgKCFsb2FkX2NvZGUpIHsKLQkJCUJOWDJYX0VSUigiTUNQIHJlc3BvbnNlIGZhaWx1cmUsIHVubG9hZGluZ1xuIik7Ci0JCQlnb3RvIGxvYWRfaW50X2Rpc2FibGU7Ci0JCX0KLQl9Ci0KLQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X1BPUlQ7Ci0KLQkvKiBFbmFibGUgUnggaW50ZXJydXB0IGhhbmRsaW5nIGJlZm9yZSBzZW5kaW5nIHRoZSByYW1yb2QKLQkgICBhcyBpdCdzIGNvbXBsZXRlZCBvbiBSeCBGUCBxdWV1ZSAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQluYXBpX2VuYWJsZSgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKLQotCWlmIChibngyeF9zZXR1cF9sZWFkaW5nKGJwKSkKLQkJZ290byBsb2FkX3N0b3BfbmV0aWY7Ci0KLQlmb3JfZWFjaF9ub25kZWZhdWx0X3F1ZXVlKGJwLCBpKQotCQlpZiAoYm54Mnhfc2V0dXBfbXVsdGkoYnAsIGkpKQotCQkJZ290byBsb2FkX3N0b3BfbmV0aWY7Ci0KLQlibngyeF9zZXRfbWFjX2FkZHIoYnApOwotCi0JYm54MnhfcGh5X2luaXQoYnApOwotCi0JLyogU3RhcnQgZmFzdCBwYXRoICovCi0JaWYgKHJlcV9pcnEpIHsgLyogSVJRIGlzIG9ubHkgcmVxdWVzdGVkIGZyb20gYm54Mnhfb3BlbiAqLwotCQluZXRpZl9zdGFydF9xdWV1ZShicC0+ZGV2KTsKLQkJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJLVhcbiIsCi0JCQkgICAgICAgYnAtPmRldi0+bmFtZSk7Ci0KLQkvKiBPdGhlcndpc2UgVHggcXVldWUgc2hvdWxkIGJlIG9ubHkgcmVlbmFibGVkICovCi0JfSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7Ci0JCW5ldGlmX3dha2VfcXVldWUoYnAtPmRldik7Ci0JCWJueDJ4X3NldF9yeF9tb2RlKGJwLT5kZXYpOwotCX0KLQotCS8qIHN0YXJ0IHRoZSB0aW1lciAqLwotCW1vZF90aW1lcigmYnAtPnRpbWVyLCBqaWZmaWVzICsgYnAtPmN1cnJlbnRfaW50ZXJ2YWwpOwotCi0JcmV0dXJuIDA7Ci0KLWxvYWRfc3RvcF9uZXRpZjoKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKLQkJbmFwaV9kaXNhYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwotCi1sb2FkX2ludF9kaXNhYmxlOgotCWJueDJ4X2ludF9kaXNhYmxlX3N5bmMoYnApOwotCi0JYm54MnhfZnJlZV9za2JzKGJwKTsKLQlibngyeF9mcmVlX2lycShicCk7Ci0KLWxvYWRfZXJyb3I6Ci0JYm54MnhfZnJlZV9tZW0oYnApOwotCi0JLyogVEJEIHdlIHJlYWxseSBuZWVkIHRvIHJlc2V0IHRoZSBjaGlwCi0JICAgaWYgd2Ugd2FudCB0byByZWNvdmVyIGZyb20gdGhpcyAqLwotCXJldHVybiAtRUJVU1k7Ci19Ci0KLQotc3RhdGljIHZvaWQgYm54MnhfcmVzZXRfY2hpcChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVzZXRfY29kZSkKLXsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotI2lmZGVmIFVTRV9ETUFFCi0JdTMyIHdiX3dyaXRlWzJdOwotI2VuZGlmCi0JaW50IGJhc2UsIGk7Ci0KLQlEUChORVRJRl9NU0dfSUZET1dOLCAicmVzZXQgY2FsbGVkIHdpdGggY29kZSAleFxuIiwgcmVzZXRfY29kZSk7Ci0KLQkvKiBEbyBub3QgcmN2IHBhY2tldHMgdG8gQlJCICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTSyArIHBvcnQqNCwgMHgwKTsKLQkvKiBEbyBub3QgZGlyZWN0IHJjdiBwYWNrZXRzIHRoYXQgYXJlIG5vdCBmb3IgTUNQIHRvIHRoZSBCUkIgKi8KLQlSRUdfV1IoYnAsIChwb3J0ID8gTklHX1JFR19MTEgxX0JSQjFfTk9UX01DUCA6Ci0JCQkgICBOSUdfUkVHX0xMSDBfQlJCMV9OT1RfTUNQKSwgMHgwKTsKLQotCS8qIENvbmZpZ3VyZSBJR1UgYW5kIEFFVSAqLwotCVJFR19XUihicCwgSENfUkVHX0NPTkZJR18wICsgcG9ydCo0LCAweDEwMDApOwotCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzAgKyBwb3J0KjQsIDApOwotCi0JLyogVE9ETzogQ2xvc2UgRG9vcmJlbGwgcG9ydD8gKi8KLQotCS8qIENsZWFyIElMVCAqLwotI2lmZGVmIFVTRV9ETUFFCi0Jd2Jfd3JpdGVbMF0gPSAwOwotCXdiX3dyaXRlWzFdID0gMDsKLSNlbmRpZgotCWJhc2UgPSBwb3J0ICogUlFfT05DSElQX0FUX1BPUlRfU0laRTsKLQlmb3IgKGkgPSBiYXNlOyBpIDwgYmFzZSArIFJRX09OQ0hJUF9BVF9QT1JUX1NJWkU7IGkrKykgewotI2lmZGVmIFVTRV9ETUFFCi0JCVJFR19XUl9ETUFFKGJwLCBQWFAyX1JFR19SUV9PTkNISVBfQVQgKyBpKjgsIHdiX3dyaXRlLCAyKTsKLSNlbHNlCi0JCVJFR19XUl9JTkQoYnAsIFBYUDJfUkVHX1JRX09OQ0hJUF9BVCwgMCk7Ci0JCVJFR19XUl9JTkQoYnAsIFBYUDJfUkVHX1JRX09OQ0hJUF9BVCArIDQsIDApOwotI2VuZGlmCi0JfQotCi0JaWYgKHJlc2V0X2NvZGUgPT0gRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT04pIHsKLQkJLyogcmVzZXRfY29tbW9uICovCi0JCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsCi0JCSAgICAgICAweGQzZmZmZjdmKTsKLQkJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9DTEVBUiwKLQkJICAgICAgIDB4MTQwMyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGJueDJ4X3N0b3BfbXVsdGkoc3RydWN0IGJueDJ4ICpicCwgaW50IGluZGV4KQotewotCi0JaW50IHJjOwotCi0JLyogaGFsdCB0aGUgY29ubmVjdGlvbiAqLwotCWJwLT5mcFtpbmRleF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOwotCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIGluZGV4LCAwLCAwLCAwKTsKLQotCi0JcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfSEFMVEVELCBpbmRleCwKLQkJCQkgICAgICAgJihicC0+ZnBbaW5kZXhdLnN0YXRlKSwgMSk7Ci0JaWYgKHJjKSAvKiB0aW1lb3V0ICovCi0JCXJldHVybiByYzsKLQotCS8qIGRlbGV0ZSBjZmMgZW50cnkgKi8KLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9DRkNfREVMLCBpbmRleCwgMCwgMCwgMSk7Ci0KLQlyZXR1cm4gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0NMT1NFRCwgaW5kZXgsCi0JCQkJICYoYnAtPmZwW2luZGV4XS5zdGF0ZSksIDEpOwotCi19Ci0KLQotc3RhdGljIHZvaWQgYm54Mnhfc3RvcF9sZWFkaW5nKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTE2IGRzYl9zcF9wcm9kX2lkeDsKLQkvKiBpZiB0aGUgb3RoZXIgcG9ydCBpcyBoYW5kbGluZyB0cmFmZmljLAotCSAgIHRoaXMgY2FuIHRha2UgYSBsb3Qgb2YgdGltZSAqLwotCWludCB0aW1lb3V0ID0gNTAwOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCS8qIFNlbmQgSEFMVCByYW1yb2QgKi8KLQlicC0+ZnBbMF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOwotCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIDAsIDAsIDAsIDApOwotCi0JaWYgKGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9IQUxURUQsIDAsCi0JCQkgICAgICAgJihicC0+ZnBbMF0uc3RhdGUpLCAxKSkKLQkJcmV0dXJuOwotCi0JZHNiX3NwX3Byb2RfaWR4ID0gKmJwLT5kc2Jfc3BfcHJvZDsKLQotCS8qIFNlbmQgUE9SVF9ERUxFVEUgcmFtcm9kICovCi0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwsIDAsIDAsIDAsIDEpOwotCi0JLyogV2FpdCBmb3IgY29tcGxldGlvbiB0byBhcnJpdmUgb24gZGVmYXVsdCBzdGF0dXMgYmxvY2sKLQkgICB3ZSBhcmUgZ29pbmcgdG8gcmVzZXQgdGhlIGNoaXAgYW55d2F5Ci0JICAgc28gdGhlcmUgaXMgbm90IG11Y2ggdG8gZG8gaWYgdGhpcyB0aW1lcyBvdXQKLQkgKi8KLQl3aGlsZSAoKGRzYl9zcF9wcm9kX2lkeCA9PSAqYnAtPmRzYl9zcF9wcm9kKSAmJiB0aW1lb3V0KSB7Ci0JCXRpbWVvdXQtLTsKLQkJbXNsZWVwKDEpOwotCX0KLQlpZiAoIXRpbWVvdXQpIHsKLQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgInRpbWVvdXQgcG9sbGluZyBmb3IgY29tcGxldGlvbiAiCi0JCSAgICJkc2Jfc3BfcHJvZCAweCV4ICE9IGRzYl9zcF9wcm9kX2lkeCAweCV4XG4iLAotCQkgICAqYnAtPmRzYl9zcF9wcm9kLCBkc2Jfc3BfcHJvZF9pZHgpOwotCX0KLQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X1VOTE9BRDsKLQlicC0+ZnBbMF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9DTE9TRUQ7Ci19Ci0KLQotc3RhdGljIGludCBibngyeF9uaWNfdW5sb2FkKHN0cnVjdCBibngyeCAqYnAsIGludCBmcmVlX2lycSkKLXsKLQl1MzIgcmVzZXRfY29kZSA9IDA7Ci0JaW50IGksIHRpbWVvdXQ7Ci0KLQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQ7Ci0KLQlkZWxfdGltZXJfc3luYygmYnAtPnRpbWVyKTsKLQotCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOwotCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7Ci0JCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7Ci0JCWJwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0JfQotCi0JLyogV2FpdCB1bnRpbCBhbGwgZmFzdCBwYXRoIHRhc2tzIGNvbXBsZXRlICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0KLQkJdGltZW91dCA9IDEwMDA7Ci0JCXdoaWxlIChibngyeF9oYXNfd29yayhmcCkgJiYgKHRpbWVvdXQtLSkpCi0JCQltc2xlZXAoMSk7Ci0JCWlmICghdGltZW91dCkKLQkJCUJOWDJYX0VSUigidGltZW91dCB3YWl0aW5nIGZvciBxdWV1ZVslZF1cbiIsIGkpOwotCX0KLQotCS8qIFdhaXQgdW50aWwgc3RhdCByYW1yb2QgcmV0dXJucyBhbmQgYWxsIFNQIHRhc2tzIGNvbXBsZXRlICovCi0JdGltZW91dCA9IDEwMDA7Ci0Jd2hpbGUgKChicC0+c3RhdF9wZW5kaW5nIHx8IChicC0+c3BxX2xlZnQgIT0gTUFYX1NQUV9QRU5ESU5HKSkgJiYKLQkgICAgICAgKHRpbWVvdXQtLSkpCi0JCW1zbGVlcCgxKTsKLQotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQluYXBpX2Rpc2FibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7Ci0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFmdGVyIFR4IGFuZCBSeCBhcmUgZGlzYWJsZWQgb24gc3RhY2sgbGV2ZWwgKi8KLQlibngyeF9pbnRfZGlzYWJsZV9zeW5jKGJwKTsKLQotCWlmIChicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykKLQkJcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9NQ1A7Ci0KLQllbHNlIGlmIChicC0+d29sKSB7Ci0JCXUzMiBlbWFjX2Jhc2UgPSBicC0+cG9ydCA/IEdSQ0JBU0VfRU1BQzAgOiBHUkNCQVNFX0VNQUMxOwotCQl1OCAqbWFjX2FkZHIgPSBicC0+ZGV2LT5kZXZfYWRkcjsKLQkJdTMyIHZhbCA9IChFTUFDX01PREVfTVBLVCB8IEVNQUNfTU9ERV9NUEtUX1JDVkQgfAotCQkJICAgRU1BQ19NT0RFX0FDUElfUkNWRCk7Ci0KLQkJRU1BQ19XUihFTUFDX1JFR19FTUFDX01PREUsIHZhbCk7Ci0KLQkJdmFsID0gKG1hY19hZGRyWzBdIDw8IDgpIHwgbWFjX2FkZHJbMV07Ci0JCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19NQUNfTUFUQ0gsIHZhbCk7Ci0KLQkJdmFsID0gKG1hY19hZGRyWzJdIDw8IDI0KSB8IChtYWNfYWRkclszXSA8PCAxNikgfAotCQkgICAgICAobWFjX2FkZHJbNF0gPDwgOCkgfCBtYWNfYWRkcls1XTsKLQkJRU1BQ19XUihFTUFDX1JFR19FTUFDX01BQ19NQVRDSCArIDQsIHZhbCk7Ci0KLQkJcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9FTjsKLQotCX0gZWxzZQotCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0RJUzsKLQotCS8qIENsb3NlIG11bHRpIGFuZCBsZWFkaW5nIGNvbm5lY3Rpb25zICovCi0JZm9yX2VhY2hfbm9uZGVmYXVsdF9xdWV1ZShicCwgaSkKLQkJaWYgKGJueDJ4X3N0b3BfbXVsdGkoYnAsIGkpKQotCQkJZ290byB1bmxvYWRfZXJyb3I7Ci0KLQlibngyeF9zdG9wX2xlYWRpbmcoYnApOwotCWlmICgoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfVU5MT0FEKSB8fAotCSAgICAoYnAtPmZwWzBdLnN0YXRlICE9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRCkpIHsKLQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImZhaWxlZCB0byBjbG9zZSBsZWFkaW5nIHByb3Blcmx5ISIKLQkJICAgInN0YXRlIDB4JXggIGZwWzBdLnN0YXRlIDB4JXgiLAotCQkgICBicC0+c3RhdGUsIGJwLT5mcFswXS5zdGF0ZSk7Ci0JfQotCi11bmxvYWRfZXJyb3I6Ci0JYm54MnhfbGlua19yZXNldChicCk7Ci0KLQlpZiAoIW5vbWNwKQotCQlyZXNldF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgcmVzZXRfY29kZSk7Ci0JZWxzZQotCQlyZXNldF9jb2RlID0gRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT047Ci0KLQkvKiBSZWxlYXNlIElSUXMgKi8KLQlpZiAoZnJlZV9pcnEpCi0JCWJueDJ4X2ZyZWVfaXJxKGJwKTsKLQotCS8qIFJlc2V0IHRoZSBjaGlwICovCi0JYm54MnhfcmVzZXRfY2hpcChicCwgcmVzZXRfY29kZSk7Ci0KLQkvKiBSZXBvcnQgVU5MT0FEX0RPTkUgdG8gTUNQICovCi0JaWYgKCFub21jcCkKLQkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1VOTE9BRF9ET05FKTsKLQotCS8qIEZyZWUgU0tCcyBhbmQgZHJpdmVyIGludGVybmFscyAqLwotCWJueDJ4X2ZyZWVfc2ticyhicCk7Ci0JYm54MnhfZnJlZV9tZW0oYnApOwotCi0JYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfQ0xPU0VEOwotCi0JbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogZW5kIG9mIG5pYyBsb2FkL3VubG9hZCAqLwotCi0vKiBldGh0b29sX29wcyAqLwotCi0vKgotICogSW5pdCBzZXJ2aWNlIGZ1bmN0aW9ucwotICovCi0KLXN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfc2V0dGluZ3Nfc3VwcG9ydGVkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBzd2l0Y2hfY2ZnKQotewotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0JdTMyIGV4dF9waHlfdHlwZTsKLQotCWJwLT5waHlfZmxhZ3MgPSAwOwotCi0Jc3dpdGNoIChzd2l0Y2hfY2ZnKSB7Ci0JY2FzZSBTV0lUQ0hfQ0ZHXzFHOgotCQlCTlgyWF9ERVZfSU5GTygic3dpdGNoX2NmZyAweCV4ICgxRylcbiIsIHN3aXRjaF9jZmcpOwotCi0JCWV4dF9waHlfdHlwZSA9IFNFUkRFU19FWFRfUEhZX1RZUEUoYnApOwotCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChEaXJlY3QpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKLQkJCQkJICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKLQkJCQkJICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAotCQkJCQkgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsIHwKLQkJCQkJICBTVVBQT1JURURfVFAgfCBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwKLQkJCQkJICBTVVBQT1JURURfUGF1c2UgfAotCQkJCQkgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9CQ001NDgyOgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg1NDgyKVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkJYnAtPnBoeV9mbGFncyB8PSBQSFlfU0dNSUlfRkxBRzsKLQotCQkJYnAtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAotCQkJCQkgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKLQkJCQkJICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgIFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9GSUJSRSB8Ci0JCQkJCSAgU1VQUE9SVEVEX0F1dG9uZWcgfAotCQkJCQkgIFNVUFBPUlRFRF9QYXVzZSB8Ci0JCQkJCSAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAotCQkJCSAgYnAtPmV4dF9waHlfY29uZmlnKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWJwLT5waHlfYWRkciA9IFJFR19SRChicCwgTklHX1JFR19TRVJERVMwX0NUUkxfUEhZX0FERFIgKwotCQkJCSAgICAgIHBvcnQqMHgxMCk7Ci0JCUJOWDJYX0RFVl9JTkZPKCJwaHlfYWRkciAweCV4XG4iLCBicC0+cGh5X2FkZHIpOwotCQlicmVhazsKLQotCWNhc2UgU1dJVENIX0NGR18xMEc6Ci0JCUJOWDJYX0RFVl9JTkZPKCJzd2l0Y2hfY2ZnIDB4JXggKDEwRylcbiIsIHN3aXRjaF9jZmcpOwotCi0JCWJwLT5waHlfZmxhZ3MgfD0gUEhZX1hHWFNfRkxBRzsKLQotCQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicCk7Ci0JCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChEaXJlY3QpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKLQkJCQkJICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKLQkJCQkJICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAotCQkJCQkgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsIHwKLQkJCQkJICBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICBTVVBQT1JURURfVFAgfCBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwKLQkJCQkJICBTVVBQT1JURURfUGF1c2UgfAotCQkJCQkgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNSlcbiIsCi0JCQkJCWV4dF9waHlfdHlwZSk7Ci0KLQkJCWJwLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgIFNVUFBPUlRFRF9GSUJSRSB8Ci0JCQkJCSAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICBTVVBQT1JURURfQXN5bV9QYXVzZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6Ci0JCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MDYpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwKLQkJCQkJICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgIFNVUFBPUlRFRF9QYXVzZSB8Ci0JCQkJCSAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4MDcyKVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkJYnAtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwKLQkJCQkJICBTVVBQT1JURURfUGF1c2UgfAotCQkJCQkgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoU0ZYNzEwMSlcbiIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJCWJwLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgIFNVUFBPUlRFRF9UUCB8Ci0JCQkJCSAgU1VQUE9SVEVEX0F1dG9uZWcgfAotCQkJCQkgIFNVUFBPUlRFRF9QYXVzZSB8Ci0JCQkJCSAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAiQkFEIFhHWFMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKLQkJCQkgIGJwLT5leHRfcGh5X2NvbmZpZyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlicC0+cGh5X2FkZHIgPSBSRUdfUkQoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9QSFlfQUREUiArCi0JCQkJICAgICAgcG9ydCoweDE4KTsKLQkJQk5YMlhfREVWX0lORk8oInBoeV9hZGRyIDB4JXhcbiIsIGJwLT5waHlfYWRkcik7Ci0KLQkJYnAtPnNlcl9sYW5lID0gKChicC0+bGFuZV9jb25maWcgJgotCQkJCSBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9NQVNLKSA+PgotCQkJCVBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX1NISUZUKTsKLQkJYnAtPnJ4X2xhbmVfc3dhcCA9ICgoYnAtPmxhbmVfY29uZmlnICYKLQkJCQkgICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfUlhfTUFTSykgPj4KLQkJCQkgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19SWF9TSElGVCk7Ci0JCWJwLT50eF9sYW5lX3N3YXAgPSAoKGJwLT5sYW5lX2NvbmZpZyAmCi0JCQkJICAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX1RYX01BU0spID4+Ci0JCQkJICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfVFhfU0hJRlQpOwotCQlCTlgyWF9ERVZfSU5GTygicnhfbGFuZV9zd2FwIDB4JXggIHR4X2xhbmVfc3dhcCAweCV4XG4iLAotCQkJICAgICAgIGJwLT5yeF9sYW5lX3N3YXAsIGJwLT50eF9sYW5lX3N3YXApOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCUJOWDJYX0VSUigiQkFEIHN3aXRjaF9jZmcgbGlua19jb25maWcgMHgleFxuIiwKLQkJCSAgYnAtPmxpbmtfY29uZmlnKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIG1hc2sgd2hhdCB3ZSBzdXBwb3J0IGFjY29yZGluZyB0byBzcGVlZF9jYXBfbWFzayAqLwotCWlmICghKGJwLT5zcGVlZF9jYXBfbWFzayAmCi0JICAgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xME1fSEFMRikpCi0JCWJwLT5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMGJhc2VUX0hhbGY7Ci0KLQlpZiAoIShicC0+c3BlZWRfY2FwX21hc2sgJgotCSAgICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBNX0ZVTEwpKQotCQlicC0+c3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTBiYXNlVF9GdWxsOwotCi0JaWYgKCEoYnAtPnNwZWVkX2NhcF9tYXNrICYKLQkgICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwME1fSEFMRikpCi0JCWJwLT5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmOwotCi0JaWYgKCEoYnAtPnNwZWVkX2NhcF9tYXNrICYKLQkgICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwME1fRlVMTCkpCi0JCWJwLT5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOwotCi0JaWYgKCEoYnAtPnNwZWVkX2NhcF9tYXNrICYgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykpCi0JCWJwLT5zdXBwb3J0ZWQgJj0gfihTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfAotCQkJCSAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCk7Ci0KLQlpZiAoIShicC0+c3BlZWRfY2FwX21hc2sgJiBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzJfNUcpKQotCQlicC0+c3VwcG9ydGVkICY9IH5TVVBQT1JURURfMjUwMGJhc2VYX0Z1bGw7Ci0KLQlpZiAoIShicC0+c3BlZWRfY2FwX21hc2sgJiBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwRykpCi0JCWJwLT5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGw7Ci0KLQlCTlgyWF9ERVZfSU5GTygic3VwcG9ydGVkIDB4JXhcbiIsIGJwLT5zdXBwb3J0ZWQpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9saW5rX3NldHRpbmdzX3JlcXVlc3RlZChzdHJ1Y3QgYm54MnggKmJwKQotewotCWJwLT5yZXFfYXV0b25lZyA9IDA7Ci0JYnAtPnJlcV9kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQotCXN3aXRjaCAoYnAtPmxpbmtfY29uZmlnICYgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfTUFTSykgewotCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfQVVUTzoKLQkJaWYgKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfQXV0b25lZykgewotCQkJYnAtPnJlcV9hdXRvbmVnIHw9IEFVVE9ORUdfU1BFRUQ7Ci0JCQlicC0+cmVxX2xpbmVfc3BlZWQgPSAwOwotCQkJYnAtPmFkdmVydGlzaW5nID0gYnAtPnN1cHBvcnRlZDsKLQkJfSBlbHNlIHsKLQkJCWlmIChYR1hTX0VYVF9QSFlfVFlQRShicCkgPT0KLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB7Ci0JCQkJLyogZm9yY2UgMTBHLCBubyBBTiAqLwotCQkJCWJwLT5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwotCQkJCWJwLT5hZHZlcnRpc2luZyA9Ci0JCQkJCQkoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkJIEFEVkVSVElTRURfRklCUkUpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJQk5YMlhfRVJSKCJOVlJBTSBjb25maWcgZXJyb3IuICIKLQkJCQkgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCi0JCQkJICAiICBBdXRvbmVnIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkJICBicC0+bGlua19jb25maWcpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xME1fRlVMTDoKLQkJaWYgKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTBiYXNlVF9GdWxsKSB7Ci0JCQlicC0+cmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDsKLQkJCWJwLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgIEFEVkVSVElTRURfVFApOwotCQl9IGVsc2UgewotCQkJQk5YMlhfRVJSKCJOVlJBTSBjb25maWcgZXJyb3IuICIKLQkJCQkgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCi0JCQkJICAiICBzcGVlZF9jYXBfbWFzayAweCV4XG4iLAotCQkJCSAgYnAtPmxpbmtfY29uZmlnLCBicC0+c3BlZWRfY2FwX21hc2spOwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xME1fSEFMRjoKLQkJaWYgKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTBiYXNlVF9IYWxmKSB7Ci0JCQlicC0+cmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDsKLQkJCWJwLT5yZXFfZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQlicC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAotCQkJCQkgICBBRFZFUlRJU0VEX1RQKTsKLQkJfSBlbHNlIHsKLQkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgotCQkJCSAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKLQkJCQkgIGJwLT5saW5rX2NvbmZpZywgYnAtPnNwZWVkX2NhcF9tYXNrKTsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTAwTV9GVUxMOgotCQlpZiAoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsKSB7Ci0JCQlicC0+cmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQlicC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgQURWRVJUSVNFRF9UUCk7Ci0JCX0gZWxzZSB7Ci0JCQlCTlgyWF9FUlIoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgotCQkJCSAgIkludmFsaWQgbGlua19jb25maWcgMHgleCIKLQkJCQkgICIgIHNwZWVkX2NhcF9tYXNrIDB4JXhcbiIsCi0JCQkJICBicC0+bGlua19jb25maWcsIGJwLT5zcGVlZF9jYXBfbWFzayk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwME1fSEFMRjoKLQkJaWYgKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwYmFzZVRfSGFsZikgewotCQkJYnAtPnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTAwOwotCQkJYnAtPnJlcV9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCWJwLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAotCQkJCQkgICBBRFZFUlRJU0VEX1RQKTsKLQkJfSBlbHNlIHsKLQkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgotCQkJCSAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKLQkJCQkgIGJwLT5saW5rX2NvbmZpZywgYnAtPnNwZWVkX2NhcF9tYXNrKTsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMUc6Ci0JCWlmIChicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKSB7Ci0JCQlicC0+cmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJYnAtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICBBRFZFUlRJU0VEX1RQKTsKLQkJfSBlbHNlIHsKLQkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCi0JCQkJICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgotCQkJCSAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKLQkJCQkgIGJwLT5saW5rX2NvbmZpZywgYnAtPnNwZWVkX2NhcF9tYXNrKTsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMl81RzoKLQkJaWYgKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwpIHsKLQkJCWJwLT5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzI1MDA7Ci0JCQlicC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbCB8Ci0JCQkJCSAgIEFEVkVSVElTRURfVFApOwotCQl9IGVsc2UgewotCQkJQk5YMlhfRVJSKCJOVlJBTSBjb25maWcgZXJyb3IuICIKLQkJCQkgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCi0JCQkJICAiICBzcGVlZF9jYXBfbWFzayAweCV4XG4iLAotCQkJCSAgYnAtPmxpbmtfY29uZmlnLCBicC0+c3BlZWRfY2FwX21hc2spOwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xMEdfQ1g0OgotCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTBHX0tYNDoKLQljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwR19LUjoKLQkJaWYgKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKSB7Ci0JCQlicC0+cmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKLQkJCWJwLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgIEFEVkVSVElTRURfRklCUkUpOwotCQl9IGVsc2UgewotCQkJQk5YMlhfRVJSKCJOVlJBTSBjb25maWcgZXJyb3IuICIKLQkJCQkgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCi0JCQkJICAiICBzcGVlZF9jYXBfbWFzayAweCV4XG4iLAotCQkJCSAgYnAtPmxpbmtfY29uZmlnLCBicC0+c3BlZWRfY2FwX21hc2spOwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJQk5YMlhfRVJSKCJOVlJBTSBjb25maWcgZXJyb3IuICIKLQkJCSAgIkJBRCBsaW5rIHNwZWVkIGxpbmtfY29uZmlnIDB4JXhcbiIsCi0JCQkgIGJwLT5saW5rX2NvbmZpZyk7Ci0JCWJwLT5yZXFfYXV0b25lZyB8PSBBVVRPTkVHX1NQRUVEOwotCQlicC0+cmVxX2xpbmVfc3BlZWQgPSAwOwotCQlicC0+YWR2ZXJ0aXNpbmcgPSBicC0+c3VwcG9ydGVkOwotCQlicmVhazsKLQl9Ci0JQk5YMlhfREVWX0lORk8oInJlcV9saW5lX3NwZWVkICVkICByZXFfZHVwbGV4ICVkXG4iLAotCQkgICAgICAgYnAtPnJlcV9saW5lX3NwZWVkLCBicC0+cmVxX2R1cGxleCk7Ci0KLQlicC0+cmVxX2Zsb3dfY3RybCA9IChicC0+bGlua19jb25maWcgJgotCQkJICAgICBQT1JUX0ZFQVRVUkVfRkxPV19DT05UUk9MX01BU0spOwotCWlmICgoYnAtPnJlcV9mbG93X2N0cmwgPT0gRkxPV19DVFJMX0FVVE8pICYmCi0JICAgIChicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpKQotCQlicC0+cmVxX2F1dG9uZWcgfD0gQVVUT05FR19GTE9XX0NUUkw7Ci0KLQlCTlgyWF9ERVZfSU5GTygicmVxX2F1dG9uZWcgMHgleCAgcmVxX2Zsb3dfY3RybCAweCV4IgotCQkgICAgICAgIiAgYWR2ZXJ0aXNpbmcgMHgleFxuIiwKLQkJICAgICAgIGJwLT5yZXFfYXV0b25lZywgYnAtPnJlcV9mbG93X2N0cmwsIGJwLT5hZHZlcnRpc2luZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2dldF9od2luZm8oc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsLCB2YWwyLCB2YWwzLCB2YWw0LCBpZDsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCXUzMiBzd2l0Y2hfY2ZnOwotCi0JYnAtPnNobWVtX2Jhc2UgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NIQVJFRF9NRU1fQUREUik7Ci0JQk5YMlhfREVWX0lORk8oInNobWVtIG9mZnNldCBpcyAleFxuIiwgYnAtPnNobWVtX2Jhc2UpOwotCi0JLyogR2V0IHRoZSBjaGlwIHJldmlzaW9uIGlkIGFuZCBudW1iZXIuICovCi0JLyogY2hpcCBudW06MTYtMzEsIHJldjoxMi0xNSwgbWV0YWw6NC0xMSwgYm9uZF9pZDowLTMgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0NISVBfTlVNKTsKLQlpZCA9ICgodmFsICYgMHhmZmZmKSA8PCAxNik7Ci0JdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19DSElQX1JFVik7Ci0JaWQgfD0gKCh2YWwgJiAweGYpIDw8IDEyKTsKLQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0NISVBfTUVUQUwpOwotCWlkIHw9ICgodmFsICYgMHhmZikgPDwgNCk7Ci0JUkVHX1JEKGJwLCBNSVNDX1JFR19CT05EX0lEKTsKLQlpZCB8PSAodmFsICYgMHhmKTsKLQlicC0+Y2hpcF9pZCA9IGlkOwotCUJOWDJYX0RFVl9JTkZPKCJjaGlwIElEIGlzICV4XG4iLCBpZCk7Ci0KLQlpZiAoIWJwLT5zaG1lbV9iYXNlIHx8IChicC0+c2htZW1fYmFzZSAhPSAweEFGOTAwKSkgewotCQlCTlgyWF9ERVZfSU5GTygiTUNQIG5vdCBhY3RpdmVcbiIpOwotCQlub21jcCA9IDE7Ci0JCWdvdG8gc2V0X21hYzsKLQl9Ci0KLQl2YWwgPSBTSE1FTV9SRChicCwgdmFsaWRpdHlfbWFwW3BvcnRdKTsKLQlpZiAoKHZhbCAmIChTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPIHwgU0hSX01FTV9WQUxJRElUWV9NQikpCi0JCSE9IChTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPIHwgU0hSX01FTV9WQUxJRElUWV9NQikpCi0JCUJOWDJYX0VSUigiQkFEIE1DUCB2YWxpZGl0eSBzaWduYXR1cmVcbiIpOwotCi0JYnAtPmZ3X3NlcSA9IChTSE1FTV9SRChicCwgZnVuY19tYltwb3J0XS5kcnZfbWJfaGVhZGVyKSAmCi0JCSAgICAgIERSVl9NU0dfU0VRX05VTUJFUl9NQVNLKTsKLQotCWJwLT5od19jb25maWcgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5jb25maWcpOwotCWJwLT5ib2FyZCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLmJvYXJkKTsKLQlicC0+c2VyZGVzX2NvbmZpZyA9Ci0JCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5zZXJkZXNfY29uZmlnKTsKLQlicC0+bGFuZV9jb25maWcgPQotCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubGFuZV9jb25maWcpOwotCWJwLT5leHRfcGh5X2NvbmZpZyA9Ci0JCVNITUVNX1JEKGJwLAotCQkJIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmV4dGVybmFsX3BoeV9jb25maWcpOwotCWJwLT5zcGVlZF9jYXBfbWFzayA9Ci0JCVNITUVNX1JEKGJwLAotCQkJIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnNwZWVkX2NhcGFiaWxpdHlfbWFzayk7Ci0KLQlicC0+bGlua19jb25maWcgPQotCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9mZWF0dXJlX2NvbmZpZ1twb3J0XS5saW5rX2NvbmZpZyk7Ci0KLQlCTlgyWF9ERVZfSU5GTygiaHdfY29uZmlnICglMDh4KSBib2FyZCAoJTA4eCkgIHNlcmRlc19jb25maWcgKCUwOHgpXG4iCi0JICAgICBLRVJOX0lORk8gIiAgbGFuZV9jb25maWcgKCUwOHgpICBleHRfcGh5X2NvbmZpZyAoJTA4eClcbiIKLQkgICAgIEtFUk5fSU5GTyAiICBzcGVlZF9jYXBfbWFzayAoJTA4eCkgIGxpbmtfY29uZmlnICglMDh4KSIKLQkJICAgICAgICIgIGZ3X3NlcSAoJTA4eClcbiIsCi0JCSAgICAgICBicC0+aHdfY29uZmlnLCBicC0+Ym9hcmQsIGJwLT5zZXJkZXNfY29uZmlnLAotCQkgICAgICAgYnAtPmxhbmVfY29uZmlnLCBicC0+ZXh0X3BoeV9jb25maWcsCi0JCSAgICAgICBicC0+c3BlZWRfY2FwX21hc2ssIGJwLT5saW5rX2NvbmZpZywgYnAtPmZ3X3NlcSk7Ci0KLQlzd2l0Y2hfY2ZnID0gKGJwLT5saW5rX2NvbmZpZyAmIFBPUlRfRkVBVFVSRV9DT05ORUNURURfU1dJVENIX01BU0spOwotCWJueDJ4X2xpbmtfc2V0dGluZ3Nfc3VwcG9ydGVkKGJwLCBzd2l0Y2hfY2ZnKTsKLQotCWJwLT5hdXRvbmVnID0gKGJwLT5od19jb25maWcgJiBTSEFSRURfSFdfQ0ZHX0FOX0VOQUJMRV9NQVNLKTsKLQkvKiBmb3Igbm93IGRpc2FibGUgY2w3MyAqLwotCWJwLT5hdXRvbmVnICY9IH5TSEFSRURfSFdfQ0ZHX0FOX0VOQUJMRV9DTDczOwotCUJOWDJYX0RFVl9JTkZPKCJhdXRvbmVnIDB4JXhcbiIsIGJwLT5hdXRvbmVnKTsKLQotCWJueDJ4X2xpbmtfc2V0dGluZ3NfcmVxdWVzdGVkKGJwKTsKLQotCXZhbDIgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubWFjX3VwcGVyKTsKLQl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubWFjX2xvd2VyKTsKLQlicC0+ZGV2LT5kZXZfYWRkclswXSA9ICh1OCkodmFsMiA+PiA4ICYgMHhmZik7Ci0JYnAtPmRldi0+ZGV2X2FkZHJbMV0gPSAodTgpKHZhbDIgJiAweGZmKTsKLQlicC0+ZGV2LT5kZXZfYWRkclsyXSA9ICh1OCkodmFsID4+IDI0ICYgMHhmZik7Ci0JYnAtPmRldi0+ZGV2X2FkZHJbM10gPSAodTgpKHZhbCA+PiAxNiAmIDB4ZmYpOwotCWJwLT5kZXYtPmRldl9hZGRyWzRdID0gKHU4KSh2YWwgPj4gOCAgJiAweGZmKTsKLQlicC0+ZGV2LT5kZXZfYWRkcls1XSA9ICh1OCkodmFsICYgMHhmZik7Ci0KLQltZW1jcHkoYnAtPmRldi0+cGVybV9hZGRyLCBicC0+ZGV2LT5kZXZfYWRkciwgNik7Ci0KLQotCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtKTsKLQl2YWwyID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcucGFydF9udW1bNF0pOwotCXZhbDMgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5wYXJ0X251bVs4XSk7Ci0JdmFsNCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtWzEyXSk7Ci0KLQlwcmludGsoS0VSTl9JTkZPIFBGWCAicGFydCBudW1iZXIgJVgtJVgtJVgtJVhcbiIsCi0JICAgICAgIHZhbCwgdmFsMiwgdmFsMywgdmFsNCk7Ci0KLQkvKiBiYyB2ZXIgKi8KLQlpZiAoIW5vbWNwKSB7Ci0JCWJwLT5iY192ZXIgPSB2YWwgPSAoKFNITUVNX1JEKGJwLCBkZXZfaW5mby5iY19yZXYpKSA+PiA4KTsKLQkJQk5YMlhfREVWX0lORk8oImJjX3ZlciAlWFxuIiwgdmFsKTsKLQkJaWYgKHZhbCA8IEJOWDJYX0JDX1ZFUikgewotCQkJLyogZm9yIG5vdyBvbmx5IHdhcm4KLQkJCSAqIGxhdGVyIHdlIG1pZ2h0IG5lZWQgdG8gZW5mb3JjZSB0aGlzICovCi0JCQlCTlgyWF9FUlIoIlRoaXMgZHJpdmVyIG5lZWRzIGJjX3ZlciAlWCBidXQgZm91bmQgJVgsIgotCQkJCSAgIiBwbGVhc2UgdXBncmFkZSBCQ1xuIiwgQk5YMlhfQkNfVkVSLCB2YWwpOwotCQl9Ci0JfSBlbHNlIHsKLQkJYnAtPmJjX3ZlciA9IDA7Ci0JfQotCi0JdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NGRzQpOwotCWJwLT5mbGFzaF9zaXplID0gKE5WUkFNXzFNQl9TSVpFIDw8ICh2YWwgJiBNQ1BSX05WTV9DRkc0X0ZMQVNIX1NJWkUpKTsKLQlCTlgyWF9ERVZfSU5GTygiZmxhc2hfc2l6ZSAweCV4ICglZClcbiIsCi0JCSAgICAgICBicC0+Zmxhc2hfc2l6ZSwgYnAtPmZsYXNoX3NpemUpOwotCi0JcmV0dXJuOwotCi1zZXRfbWFjOiAvKiBvbmx5IHN1cHBvc2VkIHRvIGhhcHBlbiBvbiBlbXVsYXRpb24vRlBHQSAqLwotCUJOWDJYX0VSUigid2FybmluZyByZW5kb20gTUFDIHdvcmthcm91bmQgYWN0aXZlXG4iKTsKLQlyYW5kb21fZXRoZXJfYWRkcihicC0+ZGV2LT5kZXZfYWRkcik7Ci0JbWVtY3B5KGJwLT5kZXYtPnBlcm1fYWRkciwgYnAtPmRldi0+ZGV2X2FkZHIsIDYpOwotCi19Ci0KLS8qCi0gKiBldGh0b29sIHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotLyogQWxsIGV0aHRvb2wgZnVuY3Rpb25zIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwotCi1zdGF0aWMgaW50IGJueDJ4X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWNtZC0+c3VwcG9ydGVkID0gYnAtPnN1cHBvcnRlZDsKLQljbWQtPmFkdmVydGlzaW5nID0gYnAtPmFkdmVydGlzaW5nOwotCi0JaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQljbWQtPnNwZWVkID0gYnAtPmxpbmVfc3BlZWQ7Ci0JCWNtZC0+ZHVwbGV4ID0gYnAtPmR1cGxleDsKLQl9IGVsc2UgewotCQljbWQtPnNwZWVkID0gYnAtPnJlcV9saW5lX3NwZWVkOwotCQljbWQtPmR1cGxleCA9IGJwLT5yZXFfZHVwbGV4OwotCX0KLQotCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnApOwotCi0JCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCQkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJCWNtZC0+cG9ydCA9IFBPUlRfVFA7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAotCQkJICAgYnAtPmV4dF9waHlfY29uZmlnKTsKLQkJfQotCX0gZWxzZQotCQljbWQtPnBvcnQgPSBQT1JUX1RQOwotCi0JY21kLT5waHlfYWRkcmVzcyA9IGJwLT5waHlfYWRkcjsKLQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKLQotCWlmIChicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX1NQRUVEKQotCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQllbHNlCi0JCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKLQotCWNtZC0+bWF4dHhwa3QgPSAwOwotCWNtZC0+bWF4cnhwa3QgPSAwOwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJldGh0b29sX2NtZDogY21kICVkXG4iCi0JICAgRFBfTEVWRUwgIiAgc3VwcG9ydGVkIDB4JXggIGFkdmVydGlzaW5nIDB4JXggIHNwZWVkICVkXG4iCi0JICAgRFBfTEVWRUwgIiAgZHVwbGV4ICVkICBwb3J0ICVkICBwaHlfYWRkcmVzcyAlZCAgdHJhbnNjZWl2ZXIgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICBtYXh0eHBrdCAlZCAgbWF4cnhwa3QgJWRcbiIsCi0JICAgY21kLT5jbWQsIGNtZC0+c3VwcG9ydGVkLCBjbWQtPmFkdmVydGlzaW5nLCBjbWQtPnNwZWVkLAotCSAgIGNtZC0+ZHVwbGV4LCBjbWQtPnBvcnQsIGNtZC0+cGh5X2FkZHJlc3MsIGNtZC0+dHJhbnNjZWl2ZXIsCi0JICAgY21kLT5hdXRvbmVnLCBjbWQtPm1heHR4cGt0LCBjbWQtPm1heHJ4cGt0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgYWR2ZXJ0aXNpbmc7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgImV0aHRvb2xfY21kOiBjbWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBzdXBwb3J0ZWQgMHgleCAgYWR2ZXJ0aXNpbmcgMHgleCAgc3BlZWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBkdXBsZXggJWQgIHBvcnQgJWQgIHBoeV9hZGRyZXNzICVkICB0cmFuc2NlaXZlciAlZFxuIgotCSAgIERQX0xFVkVMICIgIGF1dG9uZWcgJWQgIG1heHR4cGt0ICVkICBtYXhyeHBrdCAlZFxuIiwKLQkgICBjbWQtPmNtZCwgY21kLT5zdXBwb3J0ZWQsIGNtZC0+YWR2ZXJ0aXNpbmcsIGNtZC0+c3BlZWQsCi0JICAgY21kLT5kdXBsZXgsIGNtZC0+cG9ydCwgY21kLT5waHlfYWRkcmVzcywgY21kLT50cmFuc2NlaXZlciwKLQkgICBjbWQtPmF1dG9uZWcsIGNtZC0+bWF4dHhwa3QsIGNtZC0+bWF4cnhwa3QpOwotCi0JaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewotCQlpZiAoIShicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkFvdG9uZWcgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qIGFkdmVydGlzZSB0aGUgcmVxdWVzdGVkIHNwZWVkIGFuZCBkdXBsZXggaWYgc3VwcG9ydGVkICovCi0JCWNtZC0+YWR2ZXJ0aXNpbmcgJj0gYnAtPnN1cHBvcnRlZDsKLQotCQlicC0+cmVxX2F1dG9uZWcgfD0gQVVUT05FR19TUEVFRDsKLQkJYnAtPnJlcV9saW5lX3NwZWVkID0gMDsKLQkJYnAtPnJlcV9kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJYnAtPmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX0F1dG9uZWcgfCBjbWQtPmFkdmVydGlzaW5nKTsKLQotCX0gZWxzZSB7IC8qIGZvcmNlZCBzcGVlZCAqLwotCQkvKiBhZHZlcnRpc2UgdGhlIHJlcXVlc3RlZCBzcGVlZCBhbmQgZHVwbGV4IGlmIHN1cHBvcnRlZCAqLwotCQlzd2l0Y2ggKGNtZC0+c3BlZWQpIHsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJCWlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgewotCQkJCWlmICghKGJwLT5zdXBwb3J0ZWQgJgotCQkJCSAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpKSB7Ci0JCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCQkgICAiMTBNIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQotCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIEFEVkVSVElTRURfVFApOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoIShicC0+c3VwcG9ydGVkICYKLQkJCQkgICAgICBTVVBQT1JURURfMTBiYXNlVF9IYWxmKSkgewotCQkJCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkJICAgIjEwTSBoYWxmIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0KLQkJCQlhZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgU1BFRURfMTAwOgotCQkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmCi0JCQkJCQlTVVBQT1JURURfMTAwYmFzZVRfRnVsbCkpIHsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCSAgICIxMDBNIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQotCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmCi0JCQkJCQlTVVBQT1JURURfMTAwYmFzZVRfSGFsZikpIHsKLQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJCSAgICIxMDBNIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQotCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgU1BFRURfMTAwMDoKLQkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgewotCQkJCURQKE5FVElGX01TR19MSU5LLCAiMUcgaGFsZiBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCkpIHsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIjFHIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU1BFRURfMjUwMDoKLQkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgewotCQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAgICIyLjVHIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWlmICghKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwpKSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJICAgIjIuNUcgZnVsbCBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbCB8Ci0JCQkJICAgICAgIEFEVkVSVElTRURfVFApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTUEVFRF8xMDAwMDoKLQkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgewotCQkJCURQKE5FVElGX01TR19MSU5LLCAiMTBHIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWlmICghKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKSkgewotCQkJCURQKE5FVElGX01TR19MSU5LLCAiMTBHIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkgICAgICAgQURWRVJUSVNFRF9GSUJSRSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJVbnN1cHBvcnRlZCBzcGVlZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWJwLT5yZXFfYXV0b25lZyAmPSB+QVVUT05FR19TUEVFRDsKLQkJYnAtPnJlcV9saW5lX3NwZWVkID0gY21kLT5zcGVlZDsKLQkJYnAtPnJlcV9kdXBsZXggPSBjbWQtPmR1cGxleDsKLQkJYnAtPmFkdmVydGlzaW5nID0gYWR2ZXJ0aXNpbmc7Ci0JfQotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJyZXFfYXV0b25lZyAweCV4ICByZXFfbGluZV9zcGVlZCAlZFxuIgotCSAgIERQX0xFVkVMICIgIHJlcV9kdXBsZXggJWQgIGFkdmVydGlzaW5nIDB4JXhcbiIsCi0JICAgYnAtPnJlcV9hdXRvbmVnLCBicC0+cmVxX2xpbmVfc3BlZWQsIGJwLT5yZXFfZHVwbGV4LAotCSAgIGJwLT5hZHZlcnRpc2luZyk7Ci0KLQlibngyeF9zdG9wX3N0YXRzKGJwKTsKLQlibngyeF9saW5rX2luaXRpYWxpemUoYnApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0Jc3RyY3B5KGluZm8tPmRyaXZlciwgRFJWX01PRFVMRV9OQU1FKTsKLQlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX01PRFVMRV9WRVJTSU9OKTsKLQlzbnByaW50ZihpbmZvLT5md192ZXJzaW9uLCAzMiwgIiVkLiVkLiVkOiVkIChCQyBWRVIgJXgpIiwKLQkJIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04sIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04sCi0JCSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OLCBCQ01fNTcxMF9GV19DT01QSUxFX0ZMQUdTLAotCQkgYnAtPmJjX3Zlcik7Ci0Jc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShicC0+cGRldikpOwotCWluZm8tPm5fc3RhdHMgPSBCTlgyWF9OVU1fU1RBVFM7Ci0JaW5mby0+dGVzdGluZm9fbGVuID0gQk5YMlhfTlVNX1RFU1RTOwotCWluZm8tPmVlZHVtcF9sZW4gPSBicC0+Zmxhc2hfc2l6ZTsKLQlpbmZvLT5yZWdkdW1wX2xlbiA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSB7Ci0JCXdvbC0+c3VwcG9ydGVkID0gMDsKLQkJd29sLT53b2xvcHRzID0gMDsKLQl9IGVsc2UgewotCQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUM7Ci0JCWlmIChicC0+d29sKQotCQkJd29sLT53b2xvcHRzID0gV0FLRV9NQUdJQzsKLQkJZWxzZQotCQkJd29sLT53b2xvcHRzID0gMDsKLQl9Ci0JbWVtc2V0KCZ3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpIHsKLQkJaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJYnAtPndvbCA9IDE7Ci0JfSBlbHNlIHsKLQkJYnAtPndvbCA9IDA7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIGJueDJ4X2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuIGJwLT5tc2dsZXZlbDsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlicC0+bXNnbGV2ZWwgPSBsZXZlbDsKLX0KLQotc3RhdGljIGludCBibngyeF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pIHsKLQkJRFAoTkVUSUZfTVNHX1BST0JFLCAic3RhdGUgaXMgJXgsIHJldHVybmluZ1xuIiwgYnAtPnN0YXRlKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JYm54Mnhfc3RvcF9zdGF0cyhicCk7Ci0JYm54MnhfbGlua19pbml0aWFsaXplKGJwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gYnAtPmZsYXNoX3NpemU7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfYWNxdWlyZV9udnJhbV9sb2NrKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQlpbnQgY291bnQsIGk7Ci0JdTMyIHZhbCA9IDA7Ci0KLQkvKiBhZGp1c3QgdGltZW91dCBmb3IgZW11bGF0aW9uL0ZQR0EgKi8KLQljb3VudCA9IE5WUkFNX1RJTUVPVVRfQ09VTlQ7Ci0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQljb3VudCAqPSAxMDA7Ci0KLQkvKiByZXF1ZXN0IGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KLQlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fU1dfQVJCLAotCSAgICAgICAoTUNQUl9OVk1fU1dfQVJCX0FSQl9SRVFfU0VUMSA8PCBwb3J0KSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQqMTA7IGkrKykgewotCQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fU1dfQVJCKTsKLQkJaWYgKHZhbCAmIChNQ1BSX05WTV9TV19BUkJfQVJCX0FSQjEgPDwgcG9ydCkpCi0JCQlicmVhazsKLQotCQl1ZGVsYXkoNSk7Ci0JfQotCi0JaWYgKCEodmFsICYgKE1DUFJfTlZNX1NXX0FSQl9BUkJfQVJCMSA8PCBwb3J0KSkpIHsKLQkJRFAoTkVUSUZfTVNHX05WTSwgImNhbm5vdCBnZXQgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfcmVsZWFzZV9udnJhbV9sb2NrKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQlpbnQgY291bnQsIGk7Ci0JdTMyIHZhbCA9IDA7Ci0KLQkvKiBhZGp1c3QgdGltZW91dCBmb3IgZW11bGF0aW9uL0ZQR0EgKi8KLQljb3VudCA9IE5WUkFNX1RJTUVPVVRfQ09VTlQ7Ci0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQotCQljb3VudCAqPSAxMDA7Ci0KLQkvKiByZWxpbnF1aXNoIG52cmFtIGludGVyZmFjZSAqLwotCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9TV19BUkIsCi0JICAgICAgIChNQ1BSX05WTV9TV19BUkJfQVJCX1JFUV9DTFIxIDw8IHBvcnQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudCoxMDsgaSsrKSB7Ci0JCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9TV19BUkIpOwotCQlpZiAoISh2YWwgJiAoTUNQUl9OVk1fU1dfQVJCX0FSQl9BUkIxIDw8IHBvcnQpKSkKLQkJCWJyZWFrOwotCi0JCXVkZWxheSg1KTsKLQl9Ci0KLQlpZiAodmFsICYgKE1DUFJfTlZNX1NXX0FSQl9BUkJfQVJCMSA8PCBwb3J0KSkgewotCQlEUChORVRJRl9NU0dfTlZNLCAiY2Fubm90IGZyZWUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2VuYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsOwotCi0JdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FDQ0VTU19FTkFCTEUpOwotCi0JLyogZW5hYmxlIGJvdGggYml0cywgZXZlbiBvbiByZWFkICovCi0JUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FDQ0VTU19FTkFCTEUsCi0JICAgICAgICh2YWwgfCBNQ1BSX05WTV9BQ0NFU1NfRU5BQkxFX0VOIHwKLQkJICAgICAgTUNQUl9OVk1fQUNDRVNTX0VOQUJMRV9XUl9FTikpOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9kaXNhYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiB2YWw7Ci0KLQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQUNDRVNTX0VOQUJMRSk7Ci0KLQkvKiBkaXNhYmxlIGJvdGggYml0cywgZXZlbiBhZnRlciByZWFkICovCi0JUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FDQ0VTU19FTkFCTEUsCi0JICAgICAgICh2YWwgJiB+KE1DUFJfTlZNX0FDQ0VTU19FTkFCTEVfRU4gfAotCQkJTUNQUl9OVk1fQUNDRVNTX0VOQUJMRV9XUl9FTikpKTsKLX0KLQotc3RhdGljIGludCBibngyeF9udnJhbV9yZWFkX2R3b3JkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHUzMiAqcmV0X3ZhbCwKLQkJCQkgIHUzMiBjbWRfZmxhZ3MpCi17Ci0JaW50IGNvdW50LCBpLCByYzsKLQl1MzIgdmFsOwotCi0JLyogYnVpbGQgdGhlIGNvbW1hbmQgd29yZCAqLwotCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0RPSVQ7Ci0KLQkvKiBuZWVkIHRvIGNsZWFyIERPTkUgYml0IHNlcGFyYXRlbHkgKi8KLQlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ09NTUFORCwgTUNQUl9OVk1fQ09NTUFORF9ET05FKTsKLQotCS8qIGFkZHJlc3Mgb2YgdGhlIE5WUkFNIHRvIHJlYWQgZnJvbSAqLwotCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9BRERSLAotCSAgICAgICAob2Zmc2V0ICYgTUNQUl9OVk1fQUREUl9OVk1fQUREUl9WQUxVRSkpOwotCi0JLyogaXNzdWUgYSByZWFkIGNvbW1hbmQgKi8KLQlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ09NTUFORCwgY21kX2ZsYWdzKTsKLQotCS8qIGFkanVzdCB0aW1lb3V0IGZvciBlbXVsYXRpb24vRlBHQSAqLwotCWNvdW50ID0gTlZSQU1fVElNRU9VVF9DT1VOVDsKLQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCi0JCWNvdW50ICo9IDEwMDsKLQotCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KLQkqcmV0X3ZhbCA9IDA7Ci0JcmMgPSAtRUJVU1k7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJdWRlbGF5KDUpOwotCQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ09NTUFORCk7Ci0KLQkJaWYgKHZhbCAmIE1DUFJfTlZNX0NPTU1BTkRfRE9ORSkgewotCQkJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX1JFQUQpOwotCQkJRFAoTkVUSUZfTVNHX05WTSwgInZhbCAweCUwOHhcbiIsIHZhbCk7Ci0JCQkvKiB3ZSByZWFkIG52cmFtIGRhdGEgaW4gY3B1IG9yZGVyCi0JCQkgKiBidXQgZXRodG9vbCBzZWVzIGl0IGFzIGFuIGFycmF5IG9mIGJ5dGVzCi0JCQkgKiBjb252ZXJ0aW5nIHRvIGJpZy1lbmRpYW4gd2lsbCBkbyB0aGUgd29yayAqLwotCQkJdmFsID0gY3B1X3RvX2JlMzIodmFsKTsKLQkJCSpyZXRfdmFsID0gdmFsOwotCQkJcmMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfbnZyYW1fcmVhZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCB1OCAqcmV0X2J1ZiwKLQkJCSAgICBpbnQgYnVmX3NpemUpCi17Ci0JaW50IHJjOwotCXUzMiBjbWRfZmxhZ3M7Ci0JdTMyIHZhbDsKLQotCWlmICgob2Zmc2V0ICYgMHgwMykgfHwgKGJ1Zl9zaXplICYgMHgwMykgfHwgKGJ1Zl9zaXplID09IDApKSB7Ci0JCURQKE5FVElGX01TR19OVk0sCi0JCSAgICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0IDB4JXggIGJ1Zl9zaXplIDB4JXhcbiIsCi0JCSAgIG9mZnNldCwgYnVmX3NpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAob2Zmc2V0ICsgYnVmX3NpemUgPiBicC0+Zmxhc2hfc2l6ZSkgewotCQlEUChORVRJRl9NU0dfTlZNLCAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAoMHgleCkgKyIKLQkJCQkgICIgYnVmX3NpemUgKDB4JXgpID4gZmxhc2hfc2l6ZSAoMHgleClcbiIsCi0JCSAgIG9mZnNldCwgYnVmX3NpemUsIGJwLT5mbGFzaF9zaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogcmVxdWVzdCBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCi0JcmMgPSBibngyeF9hY3F1aXJlX252cmFtX2xvY2soYnApOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JLyogZW5hYmxlIGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KLQlibngyeF9lbmFibGVfbnZyYW1fYWNjZXNzKGJwKTsKLQotCS8qIHJlYWQgdGhlIGZpcnN0IHdvcmQocykgKi8KLQljbWRfZmxhZ3MgPSBNQ1BSX05WTV9DT01NQU5EX0ZJUlNUOwotCXdoaWxlICgoYnVmX3NpemUgPiBzaXplb2YodTMyKSkgJiYgKHJjID09IDApKSB7Ci0JCXJjID0gYm54MnhfbnZyYW1fcmVhZF9kd29yZChicCwgb2Zmc2V0LCAmdmFsLCBjbWRfZmxhZ3MpOwotCQltZW1jcHkocmV0X2J1ZiwgJnZhbCwgNCk7Ci0KLQkJLyogYWR2YW5jZSB0byB0aGUgbmV4dCBkd29yZCAqLwotCQlvZmZzZXQgKz0gc2l6ZW9mKHUzMik7Ci0JCXJldF9idWYgKz0gc2l6ZW9mKHUzMik7Ci0JCWJ1Zl9zaXplIC09IHNpemVvZih1MzIpOwotCQljbWRfZmxhZ3MgPSAwOwotCX0KLQotCWlmIChyYyA9PSAwKSB7Ci0JCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0xBU1Q7Ci0JCXJjID0gYm54MnhfbnZyYW1fcmVhZF9kd29yZChicCwgb2Zmc2V0LCAmdmFsLCBjbWRfZmxhZ3MpOwotCQltZW1jcHkocmV0X2J1ZiwgJnZhbCwgNCk7Ci0JfQotCi0JLyogZGlzYWJsZSBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCi0JYm54MnhfZGlzYWJsZV9udnJhbV9hY2Nlc3MoYnApOwotCWJueDJ4X3JlbGVhc2VfbnZyYW1fbG9jayhicCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54MnhfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZWVidWYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJjOwotCi0JRFAoTkVUSUZfTVNHX05WTSwgImV0aHRvb2xfZWVwcm9tOiBjbWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBtYWdpYyAweCV4ICBvZmZzZXQgMHgleCAoJWQpICBsZW4gMHgleCAoJWQpXG4iLAotCSAgIGVlcHJvbS0+Y21kLCBlZXByb20tPm1hZ2ljLCBlZXByb20tPm9mZnNldCwgZWVwcm9tLT5vZmZzZXQsCi0JICAgZWVwcm9tLT5sZW4sIGVlcHJvbS0+bGVuKTsKLQotCS8qIHBhcmFtZXRlcnMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gZXRodG9vbF9nZXRfZWVwcm9tICovCi0KLQlyYyA9IGJueDJ4X252cmFtX3JlYWQoYnAsIGVlcHJvbS0+b2Zmc2V0LCBlZWJ1ZiwgZWVwcm9tLT5sZW4pOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X252cmFtX3dyaXRlX2R3b3JkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHUzMiB2YWwsCi0JCQkJICAgdTMyIGNtZF9mbGFncykKLXsKLQlpbnQgY291bnQsIGksIHJjOwotCi0JLyogYnVpbGQgdGhlIGNvbW1hbmQgd29yZCAqLwotCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0RPSVQgfCBNQ1BSX05WTV9DT01NQU5EX1dSOwotCi0JLyogbmVlZCB0byBjbGVhciBET05FIGJpdCBzZXBhcmF0ZWx5ICovCi0JUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NPTU1BTkQsIE1DUFJfTlZNX0NPTU1BTkRfRE9ORSk7Ci0KLQkvKiB3cml0ZSB0aGUgZGF0YSAqLwotCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9XUklURSwgdmFsKTsKLQotCS8qIGFkZHJlc3Mgb2YgdGhlIE5WUkFNIHRvIHdyaXRlIHRvICovCi0JUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FERFIsCi0JICAgICAgIChvZmZzZXQgJiBNQ1BSX05WTV9BRERSX05WTV9BRERSX1ZBTFVFKSk7Ci0KLQkvKiBpc3N1ZSB0aGUgd3JpdGUgY29tbWFuZCAqLwotCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9DT01NQU5ELCBjbWRfZmxhZ3MpOwotCi0JLyogYWRqdXN0IHRpbWVvdXQgZm9yIGVtdWxhdGlvbi9GUEdBICovCi0JY291bnQgPSBOVlJBTV9USU1FT1VUX0NPVU5UOwotCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKLQkJY291bnQgKj0gMTAwOwotCi0JLyogd2FpdCBmb3IgY29tcGxldGlvbiAqLwotCXJjID0gLUVCVVNZOwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXVkZWxheSg1KTsKLQkJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NPTU1BTkQpOwotCQlpZiAodmFsICYgTUNQUl9OVk1fQ09NTUFORF9ET05FKSB7Ci0JCQlyYyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLX0KLQotI2RlZmluZSBCWVRFX09GRlNFVChvZmZzZXQpCQkoOCAqIChvZmZzZXQgJiAweDAzKSkKLQotc3RhdGljIGludCBibngyeF9udnJhbV93cml0ZTEoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgdTggKmRhdGFfYnVmLAotCQkJICAgICAgaW50IGJ1Zl9zaXplKQotewotCWludCByYzsKLQl1MzIgY21kX2ZsYWdzOwotCXUzMiBhbGlnbl9vZmZzZXQ7Ci0JdTMyIHZhbDsKLQotCWlmIChvZmZzZXQgKyBidWZfc2l6ZSA+IGJwLT5mbGFzaF9zaXplKSB7Ci0JCURQKE5FVElGX01TR19OVk0sICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0ICgweCV4KSArIgotCQkJCSAgIiBidWZfc2l6ZSAoMHgleCkgPiBmbGFzaF9zaXplICgweCV4KVxuIiwKLQkJICAgb2Zmc2V0LCBidWZfc2l6ZSwgYnAtPmZsYXNoX3NpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiByZXF1ZXN0IGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KLQlyYyA9IGJueDJ4X2FjcXVpcmVfbnZyYW1fbG9jayhicCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBlbmFibGUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLwotCWJueDJ4X2VuYWJsZV9udnJhbV9hY2Nlc3MoYnApOwotCi0JY21kX2ZsYWdzID0gKE1DUFJfTlZNX0NPTU1BTkRfRklSU1QgfCBNQ1BSX05WTV9DT01NQU5EX0xBU1QpOwotCWFsaWduX29mZnNldCA9IChvZmZzZXQgJiB+MHgwMyk7Ci0JcmMgPSBibngyeF9udnJhbV9yZWFkX2R3b3JkKGJwLCBhbGlnbl9vZmZzZXQsICZ2YWwsIGNtZF9mbGFncyk7Ci0KLQlpZiAocmMgPT0gMCkgewotCQl2YWwgJj0gfigweGZmIDw8IEJZVEVfT0ZGU0VUKG9mZnNldCkpOwotCQl2YWwgfD0gKCpkYXRhX2J1ZiA8PCBCWVRFX09GRlNFVChvZmZzZXQpKTsKLQotCQkvKiBudnJhbSBkYXRhIGlzIHJldHVybmVkIGFzIGFuIGFycmF5IG9mIGJ5dGVzCi0JCSAqIGNvbnZlcnQgaXQgYmFjayB0byBjcHUgb3JkZXIgKi8KLQkJdmFsID0gYmUzMl90b19jcHUodmFsKTsKLQotCQlEUChORVRJRl9NU0dfTlZNLCAidmFsIDB4JTA4eFxuIiwgdmFsKTsKLQotCQlyYyA9IGJueDJ4X252cmFtX3dyaXRlX2R3b3JkKGJwLCBhbGlnbl9vZmZzZXQsIHZhbCwKLQkJCQkJICAgICBjbWRfZmxhZ3MpOwotCX0KLQotCS8qIGRpc2FibGUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLwotCWJueDJ4X2Rpc2FibGVfbnZyYW1fYWNjZXNzKGJwKTsKLQlibngyeF9yZWxlYXNlX252cmFtX2xvY2soYnApOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X252cmFtX3dyaXRlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHU4ICpkYXRhX2J1ZiwKLQkJCSAgICAgaW50IGJ1Zl9zaXplKQotewotCWludCByYzsKLQl1MzIgY21kX2ZsYWdzOwotCXUzMiB2YWw7Ci0JdTMyIHdyaXR0ZW5fc29fZmFyOwotCi0JaWYgKGJ1Zl9zaXplID09IDEpIHsgICAgLyogZXRodG9vbCAqLwotCQlyZXR1cm4gYm54MnhfbnZyYW1fd3JpdGUxKGJwLCBvZmZzZXQsIGRhdGFfYnVmLCBidWZfc2l6ZSk7Ci0JfQotCi0JaWYgKChvZmZzZXQgJiAweDAzKSB8fCAoYnVmX3NpemUgJiAweDAzKSB8fCAoYnVmX3NpemUgPT0gMCkpIHsKLQkJRFAoTkVUSUZfTVNHX05WTSwKLQkJICAgIkludmFsaWQgcGFyYW1ldGVyOiBvZmZzZXQgMHgleCAgYnVmX3NpemUgMHgleFxuIiwKLQkJICAgb2Zmc2V0LCBidWZfc2l6ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChvZmZzZXQgKyBidWZfc2l6ZSA+IGJwLT5mbGFzaF9zaXplKSB7Ci0JCURQKE5FVElGX01TR19OVk0sICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0ICgweCV4KSArIgotCQkJCSAgIiBidWZfc2l6ZSAoMHgleCkgPiBmbGFzaF9zaXplICgweCV4KVxuIiwKLQkJICAgb2Zmc2V0LCBidWZfc2l6ZSwgYnAtPmZsYXNoX3NpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiByZXF1ZXN0IGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KLQlyYyA9IGJueDJ4X2FjcXVpcmVfbnZyYW1fbG9jayhicCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBlbmFibGUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLwotCWJueDJ4X2VuYWJsZV9udnJhbV9hY2Nlc3MoYnApOwotCi0Jd3JpdHRlbl9zb19mYXIgPSAwOwotCWNtZF9mbGFncyA9IE1DUFJfTlZNX0NPTU1BTkRfRklSU1Q7Ci0Jd2hpbGUgKCh3cml0dGVuX3NvX2ZhciA8IGJ1Zl9zaXplKSAmJiAocmMgPT0gMCkpIHsKLQkJaWYgKHdyaXR0ZW5fc29fZmFyID09IChidWZfc2l6ZSAtIHNpemVvZih1MzIpKSkKLQkJCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0xBU1Q7Ci0JCWVsc2UgaWYgKCgob2Zmc2V0ICsgNCkgJSBOVlJBTV9QQUdFX1NJWkUpID09IDApCi0JCQljbWRfZmxhZ3MgfD0gTUNQUl9OVk1fQ09NTUFORF9MQVNUOwotCQllbHNlIGlmICgob2Zmc2V0ICUgTlZSQU1fUEFHRV9TSVpFKSA9PSAwKQotCQkJY21kX2ZsYWdzIHw9IE1DUFJfTlZNX0NPTU1BTkRfRklSU1Q7Ci0KLQkJbWVtY3B5KCZ2YWwsIGRhdGFfYnVmLCA0KTsKLQkJRFAoTkVUSUZfTVNHX05WTSwgInZhbCAweCUwOHhcbiIsIHZhbCk7Ci0KLQkJcmMgPSBibngyeF9udnJhbV93cml0ZV9kd29yZChicCwgb2Zmc2V0LCB2YWwsIGNtZF9mbGFncyk7Ci0KLQkJLyogYWR2YW5jZSB0byB0aGUgbmV4dCBkd29yZCAqLwotCQlvZmZzZXQgKz0gc2l6ZW9mKHUzMik7Ci0JCWRhdGFfYnVmICs9IHNpemVvZih1MzIpOwotCQl3cml0dGVuX3NvX2ZhciArPSBzaXplb2YodTMyKTsKLQkJY21kX2ZsYWdzID0gMDsKLQl9Ci0KLQkvKiBkaXNhYmxlIGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KLQlibngyeF9kaXNhYmxlX252cmFtX2FjY2VzcyhicCk7Ci0JYm54MnhfcmVsZWFzZV9udnJhbV9sb2NrKGJwKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBibngyeF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICplZWJ1ZikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmM7Ci0KLQlEUChORVRJRl9NU0dfTlZNLCAiZXRodG9vbF9lZXByb206IGNtZCAlZFxuIgotCSAgIERQX0xFVkVMICIgIG1hZ2ljIDB4JXggIG9mZnNldCAweCV4ICglZCkgIGxlbiAweCV4ICglZClcbiIsCi0JICAgZWVwcm9tLT5jbWQsIGVlcHJvbS0+bWFnaWMsIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPm9mZnNldCwKLQkgICBlZXByb20tPmxlbiwgZWVwcm9tLT5sZW4pOwotCi0JLyogcGFyYW1ldGVycyBhbHJlYWR5IHZhbGlkYXRlZCBpbiBldGh0b29sX3NldF9lZXByb20gKi8KLQotCXJjID0gYm54MnhfbnZyYW1fd3JpdGUoYnAsIGVlcHJvbS0+b2Zmc2V0LCBlZWJ1ZiwgZWVwcm9tLT5sZW4pOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQltZW1zZXQoY29hbCwgMCwgc2l6ZW9mKHN0cnVjdCBldGh0b29sX2NvYWxlc2NlKSk7Ci0KLQljb2FsLT5yeF9jb2FsZXNjZV91c2VjcyA9IGJwLT5yeF90aWNrczsKLQljb2FsLT50eF9jb2FsZXNjZV91c2VjcyA9IGJwLT50eF90aWNrczsKLQljb2FsLT5zdGF0c19ibG9ja19jb2FsZXNjZV91c2VjcyA9IGJwLT5zdGF0c190aWNrczsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlicC0+cnhfdGlja3MgPSAodTE2KSBjb2FsLT5yeF9jb2FsZXNjZV91c2VjczsKLQlpZiAoYnAtPnJ4X3RpY2tzID4gMzAwMCkKLQkJYnAtPnJ4X3RpY2tzID0gMzAwMDsKLQotCWJwLT50eF90aWNrcyA9ICh1MTYpIGNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzOwotCWlmIChicC0+dHhfdGlja3MgPiAweDMwMDApCi0JCWJwLT50eF90aWNrcyA9IDB4MzAwMDsKLQotCWJwLT5zdGF0c190aWNrcyA9IGNvYWwtPnN0YXRzX2Jsb2NrX2NvYWxlc2NlX3VzZWNzOwotCWlmIChicC0+c3RhdHNfdGlja3MgPiAweGZmZmYwMCkKLQkJYnAtPnN0YXRzX3RpY2tzID0gMHhmZmZmMDA7Ci0JYnAtPnN0YXRzX3RpY2tzICY9IDB4ZmZmZjAwOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpCi0JCWJueDJ4X3VwZGF0ZV9jb2FsZXNjZShicCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQllcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUlhfQVZBSUw7Ci0JZXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOwotCWVyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7Ci0KLQllcmluZy0+cnhfcGVuZGluZyA9IGJwLT5yeF9yaW5nX3NpemU7Ci0JZXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IDA7Ci0JZXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOwotCi0JZXJpbmctPnR4X21heF9wZW5kaW5nID0gTUFYX1RYX0FWQUlMOwotCWVyaW5nLT50eF9wZW5kaW5nID0gYnAtPnR4X3Jpbmdfc2l6ZTsKLX0KLQotc3RhdGljIGludCBibngyeF9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICplcmluZykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICgoZXJpbmctPnJ4X3BlbmRpbmcgPiBNQVhfUlhfQVZBSUwpIHx8Ci0JICAgIChlcmluZy0+dHhfcGVuZGluZyA+IE1BWF9UWF9BVkFJTCkgfHwKLQkgICAgKGVyaW5nLT50eF9wZW5kaW5nIDw9IE1BWF9TS0JfRlJBR1MgKyA0KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlicC0+cnhfcmluZ19zaXplID0gZXJpbmctPnJ4X3BlbmRpbmc7Ci0JYnAtPnR4X3Jpbmdfc2l6ZSA9IGVyaW5nLT50eF9wZW5kaW5nOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKLQkJYm54MnhfbmljX3VubG9hZChicCwgMCk7Ci0JCWJueDJ4X25pY19sb2FkKGJwLCAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZXBhdXNlKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JZXBhdXNlLT5hdXRvbmVnID0KLQkJKChicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX0ZMT1dfQ1RSTCkgPT0gQVVUT05FR19GTE9XX0NUUkwpOwotCWVwYXVzZS0+cnhfcGF1c2UgPSAoKGJwLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfUlgpID09IEZMT1dfQ1RSTF9SWCk7Ci0JZXBhdXNlLT50eF9wYXVzZSA9ICgoYnAtPmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9UWCkgPT0gRkxPV19DVFJMX1RYKTsKLQotCURQKE5FVElGX01TR19MSU5LLCAiZXRodG9vbF9wYXVzZXBhcmFtOiBjbWQgJWRcbiIKLQkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICByeF9wYXVzZSAlZCAgdHhfcGF1c2UgJWRcbiIsCi0JICAgZXBhdXNlLT5jbWQsIGVwYXVzZS0+YXV0b25lZywgZXBhdXNlLT5yeF9wYXVzZSwgZXBhdXNlLT50eF9wYXVzZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcGF1c2UpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgImV0aHRvb2xfcGF1c2VwYXJhbTogY21kICVkXG4iCi0JICAgRFBfTEVWRUwgIiAgYXV0b25lZyAlZCAgcnhfcGF1c2UgJWQgIHR4X3BhdXNlICVkXG4iLAotCSAgIGVwYXVzZS0+Y21kLCBlcGF1c2UtPmF1dG9uZWcsIGVwYXVzZS0+cnhfcGF1c2UsIGVwYXVzZS0+dHhfcGF1c2UpOwotCi0JaWYgKGVwYXVzZS0+YXV0b25lZykgewotCQlpZiAoIShicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkFvdG9uZWcgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWJwLT5yZXFfYXV0b25lZyB8PSBBVVRPTkVHX0ZMT1dfQ1RSTDsKLQl9IGVsc2UKLQkJYnAtPnJlcV9hdXRvbmVnICY9IH5BVVRPTkVHX0ZMT1dfQ1RSTDsKLQotCWJwLT5yZXFfZmxvd19jdHJsID0gRkxPV19DVFJMX0FVVE87Ci0KLQlpZiAoZXBhdXNlLT5yeF9wYXVzZSkKLQkJYnAtPnJlcV9mbG93X2N0cmwgfD0gRkxPV19DVFJMX1JYOwotCWlmIChlcGF1c2UtPnR4X3BhdXNlKQotCQlicC0+cmVxX2Zsb3dfY3RybCB8PSBGTE9XX0NUUkxfVFg7Ci0KLQlpZiAoIShicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX0ZMT1dfQ1RSTCkgJiYKLQkgICAgKGJwLT5yZXFfZmxvd19jdHJsID09IEZMT1dfQ1RSTF9BVVRPKSkKLQkJYnAtPnJlcV9mbG93X2N0cmwgPSBGTE9XX0NUUkxfTk9ORTsKLQotCURQKE5FVElGX01TR19MSU5LLCAicmVxX2F1dG9uZWcgMHgleCAgcmVxX2Zsb3dfY3RybCAweCV4XG4iLAotCSAgIGJwLT5yZXFfYXV0b25lZywgYnAtPnJlcV9mbG93X2N0cmwpOwotCi0JYm54Mnhfc3RvcF9zdGF0cyhicCk7Ci0JYm54MnhfbGlua19pbml0aWFsaXplKGJwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIGJueDJ4X2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gYnAtPnJ4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlicC0+cnhfY3N1bSA9IGRhdGE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCB7Ci0JY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLX0gYm54MnhfdGVzdHNfc3RyX2FycltCTlgyWF9OVU1fVEVTVFNdID0gewotCXsgIk1DIEVycm9ycyAgKG9ubGluZSkiIH0KLX07Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2VsZl90ZXN0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIEJOWDJYX05VTV9URVNUUzsKLX0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRlc3QsIHU2NCAqYnVmKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBzdGF0c19zdGF0ZTsKLQotCW1lbXNldChidWYsIDAsIHNpemVvZih1NjQpICogQk5YMlhfTlVNX1RFU1RTKTsKLQotCWlmIChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfT1BFTikgewotCQlEUChORVRJRl9NU0dfUFJPQkUsICJzdGF0ZSBpcyAleCwgcmV0dXJuaW5nXG4iLCBicC0+c3RhdGUpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3RhdHNfc3RhdGUgPSBicC0+c3RhdHNfc3RhdGU7Ci0JYm54Mnhfc3RvcF9zdGF0cyhicCk7Ci0KLQlpZiAoYm54MnhfbWNfYXNzZXJ0KGJwKSAhPSAwKSB7Ci0JCWJ1ZlswXSA9IDE7Ci0JCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7Ci0JfQotCi0jaWZkZWYgQk5YMlhfRVhUUkFfREVCVUcKLQlibngyeF9wYW5pY19kdW1wKGJwKTsKLSNlbmRpZgotCWJwLT5zdGF0c19zdGF0ZSA9IHN0YXRzX3N0YXRlOwotfQotCi1zdGF0aWMgc3RydWN0IHsKLQljaGFyIHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOwotfSBibngyeF9zdGF0c19zdHJfYXJyW0JOWDJYX05VTV9TVEFUU10gPSB7Ci0JeyAicnhfYnl0ZXMifSwKLQl7ICJyeF9lcnJvcl9ieXRlcyJ9LAotCXsgInR4X2J5dGVzIn0sCi0JeyAidHhfZXJyb3JfYnl0ZXMifSwKLQl7ICJyeF91Y2FzdF9wYWNrZXRzIn0sCi0JeyAicnhfbWNhc3RfcGFja2V0cyJ9LAotCXsgInJ4X2JjYXN0X3BhY2tldHMifSwKLQl7ICJ0eF91Y2FzdF9wYWNrZXRzIn0sCi0JeyAidHhfbWNhc3RfcGFja2V0cyJ9LAotCXsgInR4X2JjYXN0X3BhY2tldHMifSwKLQl7ICJ0eF9tYWNfZXJyb3JzIn0sCS8qIDEwICovCi0JeyAidHhfY2Fycmllcl9lcnJvcnMifSwKLQl7ICJyeF9jcmNfZXJyb3JzIn0sCi0JeyAicnhfYWxpZ25fZXJyb3JzIn0sCi0JeyAidHhfc2luZ2xlX2NvbGxpc2lvbnMifSwKLQl7ICJ0eF9tdWx0aV9jb2xsaXNpb25zIn0sCi0JeyAidHhfZGVmZXJyZWQifSwKLQl7ICJ0eF9leGNlc3NfY29sbGlzaW9ucyJ9LAotCXsgInR4X2xhdGVfY29sbGlzaW9ucyJ9LAotCXsgInR4X3RvdGFsX2NvbGxpc2lvbnMifSwKLQl7ICJyeF9mcmFnbWVudHMifSwJLyogMjAgKi8KLQl7ICJyeF9qYWJiZXJzIn0sCi0JeyAicnhfdW5kZXJzaXplX3BhY2tldHMifSwKLQl7ICJyeF9vdmVyc2l6ZV9wYWNrZXRzIn0sCi0JeyAicnhfeG9uX2ZyYW1lcyJ9LAotCXsgInJ4X3hvZmZfZnJhbWVzIn0sCi0JeyAidHhfeG9uX2ZyYW1lcyJ9LAotCXsgInR4X3hvZmZfZnJhbWVzIn0sCi0JeyAicnhfbWFjX2N0cmxfZnJhbWVzIn0sCi0JeyAicnhfZmlsdGVyZWRfcGFja2V0cyJ9LAotCXsgInJ4X2Rpc2NhcmRzIn0sCS8qIDMwICovCi0JeyAiYnJiX2Rpc2NhcmQifSwKLQl7ICJicmJfdHJ1bmNhdGUifSwKLQl7ICJ4eG92ZXJmbG93In0KLX07Ci0KLSNkZWZpbmUgU1RBVFNfT0ZGU0VUMzIob2Zmc2V0X25hbWUpIFwKLQkob2Zmc2V0b2Yoc3RydWN0IGJueDJ4X2V0aF9zdGF0cywgb2Zmc2V0X25hbWUpIC8gNCkKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgYm54Mnhfc3RhdHNfb2Zmc2V0X2FycltCTlgyWF9OVU1fU1RBVFNdID0gewotCVNUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQlTVEFUU19PRkZTRVQzMihzdGF0X0lmSENJbkJhZE9jdGV0c19oaSksCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkpLAotCVNUQVRTX09GRlNFVDMyKHN0YXRfSWZIQ091dEJhZE9jdGV0c19oaSksCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKLQlTVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCVNUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAotCVNUQVRTX09GRlNFVDMyKHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKLQlTVEFUU19PRkZTRVQzMihzdGF0X0RvdDNzdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMpLCAvKiAxMCAqLwotCVNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzKSwKLQlTVEFUU19PRkZTRVQzMihjcmNfcmVjZWl2ZV9lcnJvcnMpLAotCVNUQVRTX09GRlNFVDMyKGFsaWdubWVudF9lcnJvcnMpLAotCVNUQVRTX09GRlNFVDMyKHNpbmdsZV9jb2xsaXNpb25fdHJhbnNtaXRfZnJhbWVzKSwKLQlTVEFUU19PRkZTRVQzMihtdWx0aXBsZV9jb2xsaXNpb25fdHJhbnNtaXRfZnJhbWVzKSwKLQlTVEFUU19PRkZTRVQzMihzdGF0X0RvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyksCi0JU1RBVFNfT0ZGU0VUMzIoZXhjZXNzaXZlX2NvbGxpc2lvbl9mcmFtZXMpLAotCVNUQVRTX09GRlNFVDMyKGxhdGVfY29sbGlzaW9uX2ZyYW1lcyksCi0JU1RBVFNfT0ZGU0VUMzIobnVtYmVyX29mX2J1Z3NfZm91bmRfaW5fc3RhdHNfc3BlYyksCi0JU1RBVFNfT0ZGU0VUMzIocnVudF9wYWNrZXRzX3JlY2VpdmVkKSwJCQkvKiAyMCAqLwotCVNUQVRTX09GRlNFVDMyKGphYmJlcl9wYWNrZXRzX3JlY2VpdmVkKSwKLQlTVEFUU19PRkZTRVQzMihlcnJvcl9ydW50X3BhY2tldHNfcmVjZWl2ZWQpLAotCVNUQVRTX09GRlNFVDMyKGVycm9yX2phYmJlcl9wYWNrZXRzX3JlY2VpdmVkKSwKLQlTVEFUU19PRkZTRVQzMihwYXVzZV94b25fZnJhbWVzX3JlY2VpdmVkKSwKLQlTVEFUU19PRkZTRVQzMihwYXVzZV94b2ZmX2ZyYW1lc19yZWNlaXZlZCksCi0JU1RBVFNfT0ZGU0VUMzIocGF1c2VfeG9uX2ZyYW1lc190cmFuc21pdHRlZCksCi0JU1RBVFNfT0ZGU0VUMzIocGF1c2VfeG9mZl9mcmFtZXNfdHJhbnNtaXR0ZWQpLAotCVNUQVRTX09GRlNFVDMyKGNvbnRyb2xfZnJhbWVzX3JlY2VpdmVkKSwKLQlTVEFUU19PRkZTRVQzMihtYWNfZmlsdGVyX2Rpc2NhcmQpLAotCVNUQVRTX09GRlNFVDMyKG5vX2J1ZmZfZGlzY2FyZCksCQkJLyogMzAgKi8KLQlTVEFUU19PRkZTRVQzMihicmJfZGlzY2FyZCksCi0JU1RBVFNfT0ZGU0VUMzIoYnJiX3RydW5jYXRlX2Rpc2NhcmQpLAotCVNUQVRTX09GRlNFVDMyKHh4b3ZlcmZsb3dfZGlzY2FyZCkKLX07Ci0KLXN0YXRpYyB1OCBibngyeF9zdGF0c19sZW5fYXJyW0JOWDJYX05VTV9TVEFUU10gPSB7Ci0JOCwgMCwgOCwgMCwgOCwgOCwgOCwgOCwgOCwgOCwKLQk0LCAwLCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAotCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCi0JNCwgNCwgNCwgNAotfTsKLQotc3RhdGljIHZvaWQgYm54MnhfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmJ1ZikKLXsKLQlzd2l0Y2ggKHN0cmluZ3NldCkgewotCWNhc2UgRVRIX1NTX1NUQVRTOgotCQltZW1jcHkoYnVmLCBibngyeF9zdGF0c19zdHJfYXJyLCBzaXplb2YoYm54Mnhfc3RhdHNfc3RyX2FycikpOwotCQlicmVhazsKLQotCWNhc2UgRVRIX1NTX1RFU1Q6Ci0JCW1lbWNweShidWYsIGJueDJ4X3Rlc3RzX3N0cl9hcnIsIHNpemVvZihibngyeF90ZXN0c19zdHJfYXJyKSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBibngyeF9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gQk5YMlhfTlVNX1NUQVRTOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqYnVmKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiAqaHdfc3RhdHMgPSAodTMyICopYm54Mnhfc3BfY2hlY2soYnAsIGV0aF9zdGF0cyk7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKLQkJaWYgKGJueDJ4X3N0YXRzX2xlbl9hcnJbaV0gPT0gMCkgewotCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KLQkJCWJ1ZltpXSA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIWh3X3N0YXRzKSB7Ci0JCQlidWZbaV0gPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGJueDJ4X3N0YXRzX2xlbl9hcnJbaV0gPT0gNCkgewotCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KLQkJICAgICAgIGJ1ZltpXSA9ICh1NjQpICooaHdfc3RhdHMgKyBibngyeF9zdGF0c19vZmZzZXRfYXJyW2ldKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIDgtYnl0ZSBjb3VudGVyICovCi0JCWJ1ZltpXSA9IEhJTE9fVTY0KCooaHdfc3RhdHMgKyBibngyeF9zdGF0c19vZmZzZXRfYXJyW2ldKSwKLQkJCQkgKihod19zdGF0cyArIGJueDJ4X3N0YXRzX29mZnNldF9hcnJbaV0gKyAxKSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGJueDJ4X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7Ci0KLQlpZiAoZGF0YSA9PSAwKQotCQlkYXRhID0gMjsKLQotCWZvciAoaSA9IDA7IGkgPCAoZGF0YSAqIDIpOyBpKyspIHsKLQkJaWYgKChpICUgMikgPT0gMCkgewotCQkJYm54MnhfbGVkc19zZXQoYnAsIFNQRUVEXzEwMDApOwotCQl9IGVsc2UgewotCQkJYm54MnhfbGVkc191bnNldChicCk7Ci0JCX0KLQkJbXNsZWVwX2ludGVycnVwdGlibGUoNTAwKTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKGJwLT5saW5rX3VwKQotCQlibngyeF9sZWRzX3NldChicCwgYnAtPmxpbmVfc3BlZWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54MnhfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9zZXR0aW5ncyAgIAk9IGJueDJ4X2dldF9zZXR0aW5ncywKLQkuc2V0X3NldHRpbmdzICAgCT0gYm54Mnhfc2V0X3NldHRpbmdzLAotCS5nZXRfZHJ2aW5mbyAgICAJPSBibngyeF9nZXRfZHJ2aW5mbywKLQkuZ2V0X3dvbAkJPSBibngyeF9nZXRfd29sLAotCS5zZXRfd29sCQk9IGJueDJ4X3NldF93b2wsCi0JLmdldF9tc2dsZXZlbCAgIAk9IGJueDJ4X2dldF9tc2dsZXZlbCwKLQkuc2V0X21zZ2xldmVsICAgCT0gYm54Mnhfc2V0X21zZ2xldmVsLAotCS5ud2F5X3Jlc2V0ICAgICAJPSBibngyeF9ud2F5X3Jlc2V0LAotCS5nZXRfbGluayAgICAgICAJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfZWVwcm9tX2xlbiAJPSBibngyeF9nZXRfZWVwcm9tX2xlbiwKLQkuZ2V0X2VlcHJvbSAgICAgCT0gYm54MnhfZ2V0X2VlcHJvbSwKLQkuc2V0X2VlcHJvbSAgICAgCT0gYm54Mnhfc2V0X2VlcHJvbSwKLQkuZ2V0X2NvYWxlc2NlICAgCT0gYm54MnhfZ2V0X2NvYWxlc2NlLAotCS5zZXRfY29hbGVzY2UgICAJPSBibngyeF9zZXRfY29hbGVzY2UsCi0JLmdldF9yaW5ncGFyYW0gIAk9IGJueDJ4X2dldF9yaW5ncGFyYW0sCi0JLnNldF9yaW5ncGFyYW0gIAk9IGJueDJ4X3NldF9yaW5ncGFyYW0sCi0JLmdldF9wYXVzZXBhcmFtIAk9IGJueDJ4X2dldF9wYXVzZXBhcmFtLAotCS5zZXRfcGF1c2VwYXJhbSAJPSBibngyeF9zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gICAgCT0gYm54MnhfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtICAgIAk9IGJueDJ4X3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bSAgICAJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSAgICAJPSBldGh0b29sX29wX3NldF90eF9jc3VtLAotCS5nZXRfc2cgCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfdHNvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbwkJPSBibngyeF9zZXRfdHNvLAotCS5zZWxmX3Rlc3RfY291bnQJPSBibngyeF9zZWxmX3Rlc3RfY291bnQsCi0JLnNlbGZfdGVzdCAgICAgIAk9IGJueDJ4X3NlbGZfdGVzdCwKLQkuZ2V0X3N0cmluZ3MgICAgCT0gYm54MnhfZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQJCT0gYm54MnhfcGh5c19pZCwKLQkuZ2V0X3N0YXRzX2NvdW50CT0gYm54MnhfZ2V0X3N0YXRzX2NvdW50LAotCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gYm54MnhfZ2V0X2V0aHRvb2xfc3RhdHMKLX07Ci0KLS8qIGVuZCBvZiBldGh0b29sX29wcyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IGJueDJ4X3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgYm54MnggKmJwLCBwY2lfcG93ZXJfdCBzdGF0ZSkKLXsKLQl1MTYgcG1jc3I7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChicC0+cGRldiwgYnAtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCAmcG1jc3IpOwotCi0Jc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgUENJX0QwOgotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYnAtPnBkZXYsCi0JCQkJICAgICAgYnAtPnBtX2NhcCArIFBDSV9QTV9DVFJMLAotCQkJCSAgICAgICgocG1jc3IgJiB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSykgfAotCQkJCSAgICAgICBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTKSk7Ci0KLQkJaWYgKHBtY3NyICYgUENJX1BNX0NUUkxfU1RBVEVfTUFTSykKLQkJLyogZGVsYXkgcmVxdWlyZWQgZHVyaW5nIHRyYW5zaXRpb24gb3V0IG9mIEQzaG90ICovCi0JCQltc2xlZXAoMjApOwotCQlicmVhazsKLQotCWNhc2UgUENJX0QzaG90OgotCQlwbWNzciAmPSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKLQkJcG1jc3IgfD0gMzsKLQotCQlpZiAoYnAtPndvbCkKLQkJCXBtY3NyIHw9IFBDSV9QTV9DVFJMX1BNRV9FTkFCTEU7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGJwLT5wZGV2LCBicC0+cG1fY2FwICsgUENJX1BNX0NUUkwsCi0JCQkJICAgICAgcG1jc3IpOwotCi0JCS8qIE5vIG1vcmUgbWVtb3J5IGFjY2VzcyBhZnRlciB0aGlzIHBvaW50IHVudGlsCi0JCSogZGV2aWNlIGlzIGJyb3VnaHQgYmFjayB0byBEMC4KLQkJKi8KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBuZXRfZGV2aWNlIHNlcnZpY2UgZnVuY3Rpb25zCi0gKi8KLQotLyogY2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBmcm9tIHNldF9tdWx0aWNhc3QgKi8KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTMyIHJ4X21vZGUgPSBCTlgyWF9SWF9NT0RFX05PUk1BTDsKLQotCURQKE5FVElGX01TR19JRlVQLCAiY2FsbGVkIGRldi0+ZmxhZ3MgPSAleFxuIiwgZGV2LT5mbGFncyk7Ci0KLQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQotCQlyeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9QUk9NSVNDOwotCi0JZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JCSAoZGV2LT5tY19jb3VudCA+IEJOWDJYX01BWF9NVUxUSUNBU1QpKQotCQlyeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9BTExNVUxUSTsKLQotCWVsc2UgeyAvKiBzb21lIG11bHRpY2FzdHMgKi8KLQkJaW50IGksIG9sZCwgb2Zmc2V0OwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZCAqY29uZmlnID0KLQkJCQkJCWJueDJ4X3NwKGJwLCBtY2FzdF9jb25maWcpOwotCi0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJICAgICBtY2xpc3QgJiYgKGkgPCBkZXYtPm1jX2NvdW50KTsKLQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgewotCi0JCQljb25maWctPmNvbmZpZ190YWJsZVtpXS5jYW1fZW50cnkubXNiX21hY19hZGRyID0KLQkJCQkJc3dhYjE2KCoodTE2ICopJm1jbGlzdC0+ZG1pX2FkZHJbMF0pOwotCQkJY29uZmlnLT5jb25maWdfdGFibGVbaV0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciA9Ci0JCQkJCXN3YWIxNigqKHUxNiAqKSZtY2xpc3QtPmRtaV9hZGRyWzJdKTsKLQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLmNhbV9lbnRyeS5sc2JfbWFjX2FkZHIgPQotCQkJCQlzd2FiMTYoKih1MTYgKikmbWNsaXN0LT5kbWlfYWRkcls0XSk7Ci0JCQljb25maWctPmNvbmZpZ190YWJsZVtpXS5jYW1fZW50cnkuZmxhZ3MgPQotCQkJCQkJCWNwdV90b19sZTE2KGJwLT5wb3J0KTsKLQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9IDA7Ci0JCQljb25maWctPmNvbmZpZ190YWJsZVtpXS50YXJnZXRfdGFibGVfZW50cnkuCi0JCQkJCQkJCWNsaWVudF9pZCA9IDA7Ci0JCQljb25maWctPmNvbmZpZ190YWJsZVtpXS50YXJnZXRfdGFibGVfZW50cnkuCi0JCQkJCQkJCXZsYW5faWQgPSAwOwotCi0JCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJCSAgICJzZXR0aW5nIE1DQVNUWyVkXSAoJTA0eDolMDR4OiUwNHgpXG4iLAotCQkJICAgaSwgY29uZmlnLT5jb25maWdfdGFibGVbaV0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciwKLQkJCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLmNhbV9lbnRyeS5taWRkbGVfbWFjX2FkZHIsCi0JCQkgICBjb25maWctPmNvbmZpZ190YWJsZVtpXS5jYW1fZW50cnkubHNiX21hY19hZGRyKTsKLQkJfQotCQlvbGQgPSBjb25maWctPmhkci5sZW5ndGhfNmI7Ci0JCWlmIChvbGQgPiBpKSB7Ci0JCQlmb3IgKDsgaSA8IG9sZDsgaSsrKSB7Ci0JCQkJaWYgKENBTV9JU19JTlZBTElEKGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldKSkgewotCQkJCQlpLS07IC8qIGFscmVhZHkgaW52YWxpZGF0ZWQgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCS8qIGludmFsaWRhdGUgKi8KLQkJCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVtpXSk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCi0JCQlvZmZzZXQgPSBCTlgyWF9NQVhfRU1VTF9NVUxUSSooMSArIGJwLT5wb3J0KTsKLQkJZWxzZQotCQkJb2Zmc2V0ID0gQk5YMlhfTUFYX01VTFRJQ0FTVCooMSArIGJwLT5wb3J0KTsKLQotCQljb25maWctPmhkci5sZW5ndGhfNmIgPSBpOwotCQljb25maWctPmhkci5vZmZzZXQgPSBvZmZzZXQ7Ci0JCWNvbmZpZy0+aGRyLnJlc2VydmVkMCA9IDA7Ci0JCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7Ci0KLQkJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKLQkJCSAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBtY2FzdF9jb25maWcpKSwKLQkJCSAgICAgIFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtY2FzdF9jb25maWcpKSwgMCk7Ci0JfQotCi0JYnAtPnJ4X21vZGUgPSByeF9tb2RlOwotCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKLX0KLQotc3RhdGljIGludCBibngyeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKLXsKLQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBibngyeF9mYXN0cGF0aCwKLQkJCQkJCSBuYXBpKTsKLQlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCWludCB3b3JrX2RvbmUgPSAwOwotCi0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQotCQlnb3RvIG91dF9wYW5pYzsKLSNlbmRpZgotCi0JcHJlZmV0Y2goZnAtPnR4X2J1Zl9yaW5nW1RYX0JEKGZwLT50eF9wa3RfY29ucyldLnNrYik7Ci0JcHJlZmV0Y2goZnAtPnJ4X2J1Zl9yaW5nW1JYX0JEKGZwLT5yeF9iZF9jb25zKV0uc2tiKTsKLQlwcmVmZXRjaCgoY2hhciAqKShmcC0+cnhfYnVmX3JpbmdbUlhfQkQoZnAtPnJ4X2JkX2NvbnMpXS5za2IpICsgMjU2KTsKLQotCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7Ci0KLQlpZiAobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAhPSBmcC0+dHhfcGt0X2NvbnMpCi0JCWJueDJ4X3R4X2ludChmcCwgYnVkZ2V0KTsKLQotCi0JaWYgKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgIT0gZnAtPnJ4X2NvbXBfY29ucykKLQkJd29ya19kb25lID0gYm54MnhfcnhfaW50KGZwLCBidWRnZXQpOwotCi0KLQlybWIoKTsgLyogYm54MnhfaGFzX3dvcmsoKSByZWFkcyB0aGUgc3RhdHVzIGJsb2NrICovCi0KLQkvKiBtdXN0IG5vdCBjb21wbGV0ZSBpZiB3ZSBjb25zdW1lZCBmdWxsIGJ1ZGdldCAqLwotCWlmICgod29ya19kb25lIDwgYnVkZ2V0KSAmJiAhYm54MnhfaGFzX3dvcmsoZnApKSB7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi1vdXRfcGFuaWM6Ci0jZW5kaWYKLQkJbmV0aWZfcnhfY29tcGxldGUoYnAtPmRldiwgbmFwaSk7Ci0KLQkJYm54MnhfYWNrX3NiKGJwLCBmcC0+aW5kZXgsIFVTVE9STV9JRCwKLQkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX3VfaWR4KSwgSUdVX0lOVF9OT1AsIDEpOwotCQlibngyeF9hY2tfc2IoYnAsIGZwLT5pbmRleCwgQ1NUT1JNX0lELAotCQkJICAgICBsZTE2X3RvX2NwdShmcC0+ZnBfY19pZHgpLCBJR1VfSU5UX0VOQUJMRSwgMSk7Ci0JfQotCi0JcmV0dXJuIHdvcmtfZG9uZTsKLX0KLQotLyogQ2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jay4KLSAqIGJueDJ4X3R4X2ludCgpIHJ1bnMgd2l0aG91dCBuZXRpZl90eF9sb2NrIHVubGVzcyBpdCBuZWVkcyB0byBjYWxsCi0gKiBuZXRpZl93YWtlX3F1ZXVlKCkuCi0gKi8KLXN0YXRpYyBpbnQgYm54Mnhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnA7Ci0Jc3RydWN0IHN3X3R4X2JkICp0eF9idWY7Ci0Jc3RydWN0IGV0aF90eF9iZCAqdHhfYmQ7Ci0Jc3RydWN0IGV0aF90eF9wYXJzZV9iZCAqcGJkID0gTlVMTDsKLQl1MTYgcGt0X3Byb2QsIGJkX3Byb2Q7Ci0JaW50IG5iZCwgZnBfaW5kZXggPSAwOwotCWRtYV9hZGRyX3QgbWFwcGluZzsKLQotI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotI2VuZGlmCi0KLQlmcF9pbmRleCA9IHNtcF9wcm9jZXNzb3JfaWQoKSAlIChicC0+bnVtX3F1ZXVlcyk7Ci0KLQlmcCA9ICZicC0+ZnBbZnBfaW5kZXhdOwotCWlmICh1bmxpa2VseShibngyeF90eF9hdmFpbChicC0+ZnApIDwKLQkJCQkJKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAzKSkpIHsKLQkJYnAtPnNsb3dwYXRoLT5ldGhfc3RhdHMuZHJpdmVyX3hvZmYrKywKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlCTlgyWF9FUlIoIkJVRyEgVHggcmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQotCS8qCi0JVGhpcyBpcyBhIGJpdCB1Z2x5LiBGaXJzdCB3ZSB1c2Ugb25lIEJEIHdoaWNoIHdlIG1hcmsgYXMgc3RhcnQsCi0JdGhlbiBmb3IgVFNPIG9yIHhzdW0gd2UgaGF2ZSBhIHBhcnNpbmcgaW5mbyBCRCwKLQlhbmQgb25seSB0aGVuIHdlIGhhdmUgdGhlIHJlc3Qgb2YgdGhlIFRTTyBiZHMuCi0JKGRvbid0IGZvcmdldCB0byBtYXJrIHRoZSBsYXN0IG9uZSBhcyBsYXN0LAotCWFuZCB0byB1bm1hcCBvbmx5IEFGVEVSIHlvdSB3cml0ZSB0byB0aGUgQkQgLi4uKQotCUkgd291bGQgbGlrZSB0byB0aGFuayBEb3ZIIGZvciB0aGlzIG1lc3MuCi0JKi8KLQotCXBrdF9wcm9kID0gZnAtPnR4X3BrdF9wcm9kKys7Ci0JYmRfcHJvZCA9IGZwLT50eF9iZF9wcm9kOwotCWJkX3Byb2QgPSBUWF9CRChiZF9wcm9kKTsKLQotCS8qIGdldCBhIHR4X2J1ZmYgYW5kIGZpcnN0IGJkICovCi0JdHhfYnVmID0gJmZwLT50eF9idWZfcmluZ1tUWF9CRChwa3RfcHJvZCldOwotCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF07Ci0KLQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgPSBFVEhfVFhfQkRfRkxBR1NfU1RBUlRfQkQ7Ci0JdHhfYmQtPmdlbmVyYWxfZGF0YSA9IChVTklDQVNUX0FERFJFU1MgPDwKLQkJCSAgICAgICBFVEhfVFhfQkRfRVRIX0FERFJfVFlQRV9TSElGVCk7Ci0JdHhfYmQtPmdlbmVyYWxfZGF0YSB8PSAxOyAvKiBoZWFkZXIgbmJkICovCi0KLQkvKiByZW1lbWJlciB0aGUgZmlyc3QgYmQgb2YgdGhlIHBhY2tldCAqLwotCXR4X2J1Zi0+Zmlyc3RfYmQgPSBiZF9wcm9kOwotCi0JRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKLQkgICAic2VuZGluZyBwa3QgJXUgQCVwICBuZXh0X2lkeCAldSAgYmQgJXUgQCVwXG4iLAotCSAgIHBrdF9wcm9kLCB0eF9idWYsIGZwLT50eF9wa3RfcHJvZCwgYmRfcHJvZCwgdHhfYmQpOwotCi0JaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKLQkJdTggbGVuOwotCi0JCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfSVBfQ1NVTTsKLQotCQkvKiB0dXJuIG9uIHBhcnNpbmcgYW5kIGdldCBhIGJkICovCi0JCWJkX3Byb2QgPSBUWF9CRChORVhUX1RYX0lEWChiZF9wcm9kKSk7Ci0JCXBiZCA9ICh2b2lkICopJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF07Ci0JCWxlbiA9ICgodTggKilpcGggLSAodTggKilza2ItPmRhdGEpIC8gMjsKLQotCQkvKiBmb3Igbm93IE5TIGZsYWcgaXMgbm90IHVzZWQgaW4gTGludXggKi8KLQkJcGJkLT5nbG9iYWxfZGF0YSA9IChsZW4gfAotCQkJCSAgICAoKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfODAyMVEpKSA8PAotCQkJCSAgICAgRVRIX1RYX1BBUlNFX0JEX0xMQ19TTkFQX0VOX1NISUZUKSk7Ci0JCXBiZC0+aXBfaGxlbiA9IGlwX2hkcmxlbihza2IpIC8gMjsKLQkJcGJkLT50b3RhbF9obGVuID0gY3B1X3RvX2xlMTYobGVuICsgcGJkLT5pcF9obGVuKTsKLQkJaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHsKLQkJCXN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwotCi0JCQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0KLQkJCQkJCUVUSF9UWF9CRF9GTEFHU19UQ1BfQ1NVTTsKLQkJCXBiZC0+dGNwX2ZsYWdzID0gcGJkX3RjcF9mbGFncyhza2IpOwotCQkJcGJkLT50b3RhbF9obGVuICs9IGNwdV90b19sZTE2KHRjcF9oZHJsZW4oc2tiKSAvIDIpOwotCQkJcGJkLT50Y3BfcHNldWRvX2NzdW0gPSBzd2FiMTYodGgtPmNoZWNrKTsKLQotCQl9IGVsc2UgaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKLQkJCXN0cnVjdCB1ZHBoZHIgKnVoID0gdWRwX2hkcihza2IpOwotCi0JCQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0KLQkJCQkJCUVUSF9UWF9CRF9GTEFHU19UQ1BfQ1NVTTsKLQkJCXBiZC0+dG90YWxfaGxlbiArPSBjcHVfdG9fbGUxNig0KTsKLQkJCXBiZC0+Z2xvYmFsX2RhdGEgfD0gRVRIX1RYX1BBUlNFX0JEX0NTX0FOWV9GTEc7Ci0JCQlwYmQtPmNzX29mZnNldCA9IDU7IC8qIDEwID4+IDEgKi8KLQkJCXBiZC0+dGNwX3BzZXVkb19jc3VtID0gMDsKLQkJCS8qIEhXIGJ1Zzogd2UgbmVlZCB0byBzdWJ0cmFjdCAxMCBieXRlcyBiZWZvcmUgdGhlCi0JCQkgKiBVRFAgaGVhZGVyIGZyb20gdGhlIGNzdW0KLQkJCSAqLwotCQkJdWgtPmNoZWNrID0gKHUxNikgfmNzdW1fZm9sZChjc3VtX3N1Yih1aC0+Y2hlY2ssCi0JCQkJY3N1bV9wYXJ0aWFsKCgodTggKikodWgpLTEwKSwgMTAsIDApKSk7Ci0JCX0KLQl9Ci0KLQlpZiAoKGJwLT52bGdycCAhPSBOVUxMKSAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJdHhfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7Ci0JCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfVkxBTl9UQUc7Ci0JfSBlbHNlIHsKLQkJdHhfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7Ci0JfQotCi0JbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsCi0JCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCXR4X2JkLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKLQl0eF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7Ci0JbmJkID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArICgocGJkID09IE5VTEwpPyAxIDogMik7Ci0JdHhfYmQtPm5iZCA9IGNwdV90b19sZTE2KG5iZCk7Ci0JdHhfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KHNrYl9oZWFkbGVuKHNrYikpOwotCi0JRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwgImZpcnN0IGJkIEAlcCAgYWRkciAoJXg6JXgpICBuYmQgJWQiCi0JICAgIiAgbmJ5dGVzICVkICBmbGFncyAleCAgdmxhbiAldVxuIiwKLQkgICB0eF9iZCwgdHhfYmQtPmFkZHJfaGksIHR4X2JkLT5hZGRyX2xvLCB0eF9iZC0+bmJkLAotCSAgIHR4X2JkLT5uYnl0ZXMsIHR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCwgdHhfYmQtPnZsYW4pOwotCi0JaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgJiYKLQkgICAgKHNrYi0+bGVuID4gKGJwLT5kZXYtPm10dSArIEVUSF9ITEVOKSkpIHsKLQkJaW50IGhsZW4gPSAyICogbGUxNl90b19jcHUocGJkLT50b3RhbF9obGVuKTsKLQotCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAotCQkgICAiVFNPIHBhY2tldCBsZW4gJWQgIGhsZW4gJWQgIHRvdGFsIGxlbiAlZCAgdHNvIHNpemUgJWRcbiIsCi0JCSAgIHNrYi0+bGVuLCBobGVuLCBza2JfaGVhZGxlbihza2IpLAotCQkgICBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKLQotCQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX1NXX0xTTzsKLQotCQlpZiAodHhfYmQtPm5ieXRlcyA+IGNwdV90b19sZTE2KGhsZW4pKSB7Ci0JCQkvKiB3ZSBzcGxpdCB0aGUgZmlyc3QgYmQgaW50byBoZWFkZXJzIGFuZCBkYXRhIGJkcwotCQkJICogdG8gZWFzZSB0aGUgcGFpbiBvZiBvdXIgZmVsbG93IG1pY29jb2RlIGVuZ2luZWVycwotCQkJICogd2UgdXNlIG9uZSBtYXBwaW5nIGZvciBib3RoIGJkcwotCQkJICogU28gZmFyIHRoaXMgaGFzIG9ubHkgYmVlbiBvYnNlcnZlZCB0byBoYXBwZW4KLQkJCSAqIGluIE90aGVyIE9wZXJhdGluZyBTeXN0ZW1zKFRNKQotCQkJICovCi0KLQkJCS8qIGZpcnN0IGZpeCBmaXJzdCBiZCAqLwotCQkJbmJkKys7Ci0JCQl0eF9iZC0+bmJkID0gY3B1X3RvX2xlMTYobmJkKTsKLQkJCXR4X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihobGVuKTsKLQotCQkJLyogd2Ugb25seSBwcmludCB0aGlzIGFzIGFuIGVycm9yCi0JCQkgKiBiZWNhdXNlIHdlIGRvbid0IHRoaW5rIHRoaXMgd2lsbCBldmVyIGhhcHBlbi4KLQkJCSAqLwotCQkJQk5YMlhfRVJSKCJUU08gc3BsaXQgaGVhZGVyIHNpemUgaXMgJWQgKCV4OiV4KSIKLQkJCQkgICIgIG5iZCAlZFxuIiwgdHhfYmQtPm5ieXRlcywgdHhfYmQtPmFkZHJfaGksCi0JCQkJICB0eF9iZC0+YWRkcl9sbywgdHhfYmQtPm5iZCk7Ci0KLQkJCS8qIG5vdyBnZXQgYSBuZXcgZGF0YSBiZAotCQkJICogKGFmdGVyIHRoZSBwYmQpIGFuZCBmaWxsIGl0ICovCi0JCQliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOwotCQkJdHhfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXTsKLQotCQkJdHhfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOwotCQkJdHhfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykgKyBobGVuKTsKLQkJCXR4X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihza2JfaGVhZGxlbihza2IpIC0gaGxlbik7Ci0JCQl0eF9iZC0+dmxhbiA9IGNwdV90b19sZTE2KHBrdF9wcm9kKTsKLQkJCS8qIHRoaXMgbWFya3MgdGhlIGJkCi0JCQkgKiBhcyBvbmUgdGhhdCBoYXMgbm8gaW5kaXZpZHVhbCBtYXBwaW5nCi0JCQkgKiB0aGUgRlcgaWdub3JlcyB0aGlzIGZsYWcgaW4gYSBiZCBub3QgbWFya2VkIHN0YXJ0Ci0JCQkgKi8KLQkJCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IEVUSF9UWF9CRF9GTEFHU19TV19MU087Ci0JCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAotCQkJICAgIlRTTyBzcGxpdCBkYXRhIHNpemUgaXMgJWQgKCV4OiV4KVxuIiwKLQkJCSAgIHR4X2JkLT5uYnl0ZXMsIHR4X2JkLT5hZGRyX2hpLCB0eF9iZC0+YWRkcl9sbyk7Ci0JCX0KLQotCQlpZiAoIXBiZCkgewotCQkJLyogc3VwcG9zZWQgdG8gYmUgdW5yZWFjaGVkCi0JCQkgKiAoYW5kIHRoZXJlZm9yZSBub3QgaGFuZGxlZCBwcm9wZXJseS4uLikKLQkJCSAqLwotCQkJQk5YMlhfRVJSKCJMU08gd2l0aCBubyBQQkRcbiIpOwotCQkJQlVHKCk7Ci0JCX0KLQotCQlwYmQtPmxzb19tc3MgPSBjcHVfdG9fbGUxNihza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKLQkJcGJkLT50Y3Bfc2VuZF9zZXEgPSBzd2FiMzIodGNwX2hkcihza2IpLT5zZXEpOwotCQlwYmQtPmlwX2lkID0gc3dhYjE2KGlwX2hkcihza2IpLT5pZCk7Ci0JCXBiZC0+dGNwX3BzZXVkb19jc3VtID0KLQkJCQlzd2FiMTYofmNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLT5zYWRkciwKLQkJCQkJCQkgIGlwX2hkcihza2IpLT5kYWRkciwKLQkJCQkJCQkgIDAsIElQUFJPVE9fVENQLCAwKSk7Ci0JCXBiZC0+Z2xvYmFsX2RhdGEgfD0gRVRIX1RYX1BBUlNFX0JEX1BTRVVET19DU19XSVRIT1VUX0xFTjsKLQl9Ci0KLQl7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKLQkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQotCQkJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKLQkJCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF07Ci0KLQkJCW1hcHBpbmcgPSBwY2lfbWFwX3BhZ2UoYnAtPnBkZXYsIGZyYWctPnBhZ2UsCi0JCQkJCSAgICAgICBmcmFnLT5wYWdlX29mZnNldCwKLQkJCQkJICAgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JCQl0eF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7Ci0JCQl0eF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7Ci0JCQl0eF9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYoZnJhZy0+c2l6ZSk7Ci0JCQl0eF9iZC0+dmxhbiA9IGNwdV90b19sZTE2KHBrdF9wcm9kKTsKLQkJCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IDA7Ci0JCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAiZnJhZyAlZCAgYmQgQCVwIgotCQkJICAgIiAgYWRkciAoJXg6JXgpICBuYnl0ZXMgJWQgIGZsYWdzICV4XG4iLAotCQkJICAgaSwgdHhfYmQsIHR4X2JkLT5hZGRyX2hpLCB0eF9iZC0+YWRkcl9sbywKLQkJCSAgIHR4X2JkLT5uYnl0ZXMsIHR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCk7Ci0JCX0gLyogZm9yICovCi0JfQotCi0JLyogbm93IGF0IGxhc3QgbWFyayB0aGUgYmQgYXMgdGhlIGxhc3QgYmQgKi8KLQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX0VORF9CRDsKLQotCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJsYXN0IGJkIEAlcCAgZmxhZ3MgJXhcbiIsCi0JICAgdHhfYmQsIHR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCk7Ci0KLQl0eF9idWYtPnNrYiA9IHNrYjsKLQotCWJkX3Byb2QgPSBUWF9CRChORVhUX1RYX0lEWChiZF9wcm9kKSk7Ci0KLQkvKiBub3cgc2VuZCBhIHR4IGRvb3JiZWxsLCBjb3VudGluZyB0aGUgbmV4dCBiZAotCSAqIGlmIHRoZSBwYWNrZXQgY29udGFpbnMgb3IgZW5kcyB3aXRoIGl0Ci0JICovCi0JaWYgKFRYX0JEX1BPRkYoYmRfcHJvZCkgPCBuYmQpCi0JCW5iZCsrOwotCi0JaWYgKHBiZCkKLQkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKLQkJICAgIlBCRCBAJXAgIGlwX2RhdGEgJXggIGlwX2hsZW4gJXUgIGlwX2lkICV1ICBsc29fbXNzICV1IgotCQkgICAiICB0Y3BfZmxhZ3MgJXggIHhzdW0gJXggIHNlcSAldSAgaGxlbiAldVxuIiwKLQkJICAgcGJkLCBwYmQtPmdsb2JhbF9kYXRhLCBwYmQtPmlwX2hsZW4sIHBiZC0+aXBfaWQsCi0JCSAgIHBiZC0+bHNvX21zcywgcGJkLT50Y3BfZmxhZ3MsIHBiZC0+dGNwX3BzZXVkb19jc3VtLAotCQkgICBwYmQtPnRjcF9zZW5kX3NlcSwgcGJkLT50b3RhbF9obGVuKTsKLQotCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJkb29yYmVsbDogbmJkICV1ICBiZCAlZFxuIiwgbmJkLCBiZF9wcm9kKTsKLQotCWZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QgPQotCQljcHVfdG9fbGUxNihsZTE2X3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kKSArIG5iZCk7Ci0JbWIoKTsgLyogRlcgcmVzdHJpY3Rpb246IG11c3Qgbm90IHJlb3JkZXIgd3JpdGluZyBuYmQgYW5kIHBhY2tldHMgKi8KLQlmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCA9Ci0JCWNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kKSArIDEpOwotCURPT1JCRUxMKGJwLCBmcF9pbmRleCwgMCk7Ci0KLQltbWlvd2IoKTsKLQotCWZwLT50eF9iZF9wcm9kID0gYmRfcHJvZDsKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQotCWlmICh1bmxpa2VseShibngyeF90eF9hdmFpbChmcCkgPCBNQVhfU0tCX0ZSQUdTICsgMykpIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlicC0+c2xvd3BhdGgtPmV0aF9zdGF0cy5kcml2ZXJfeG9mZisrOwotCQlpZiAoYm54MnhfdHhfYXZhaWwoZnApID49IE1BWF9TS0JfRlJBR1MgKyAzKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCX0KLQlmcC0+dHhfcGt0Kys7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi0vKiBDYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KLXN0YXRpYyBpbnQgYm54Mnhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDApOwotCi0JcmV0dXJuIGJueDJ4X25pY19sb2FkKGJwLCAxKTsKLX0KLQotLyogQ2FsbGVkIHdpdGggcnRubF9sb2NrICovCi1zdGF0aWMgaW50IGJueDJ4X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkvKiBVbmxvYWQgdGhlIGRyaXZlciwgcmVsZWFzZSBJUlFzICovCi0JYm54MnhfbmljX3VubG9hZChicCwgMSk7Ci0KLQlpZiAoIUNISVBfUkVWX0lTX1NMT1coYnApKQotCQlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EM2hvdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQ2FsbGVkIHdpdGggcnRubF9sb2NrICovCi1zdGF0aWMgaW50IGJueDJ4X2NoYW5nZV9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQotewotCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCWJueDJ4X3NldF9tYWNfYWRkcihicCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQ2FsbGVkIHdpdGggcnRubF9sb2NrICovCi1zdGF0aWMgaW50IGJueDJ4X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQotewotCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShpZnIpOwotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnI7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU0lPQ0dNSUlQSFk6Ci0JCWRhdGEtPnBoeV9pZCA9IGJwLT5waHlfYWRkcjsKLQotCQkvKiBmYWxsdGhyb3VnaCAqLwotCWNhc2UgU0lPQ0dNSUlSRUc6IHsKLQkJdTMyIG1paV9yZWd2YWw7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZicC0+cGh5X2xvY2spOwotCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHsKLQkJCWVyciA9IGJueDJ4X21kaW8yMl9yZWFkKGJwLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKLQkJCQkJCSZtaWlfcmVndmFsKTsKLQotCQkJZGF0YS0+dmFsX291dCA9IG1paV9yZWd2YWw7Ci0JCX0gZWxzZSB7Ci0JCQllcnIgPSAtRUFHQUlOOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZicC0+cGh5X2xvY2spOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQkJc3Bpbl9sb2NrX2JoKCZicC0+cGh5X2xvY2spOwotCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHsKLQkJCWVyciA9IGJueDJ4X21kaW8yMl93cml0ZShicCwgZGF0YS0+cmVnX251bSAmIDB4MWYsCi0JCQkJCQkgZGF0YS0+dmFsX2luKTsKLQkJfSBlbHNlIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJmJwLT5waHlfbG9jayk7Ci0JCXJldHVybiBlcnI7Ci0KLQlkZWZhdWx0OgotCQkvKiBkbyBub3RoaW5nICovCi0JCWJyZWFrOwotCX0KLQotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotLyogQ2FsbGVkIHdpdGggcnRubF9sb2NrICovCi1zdGF0aWMgaW50IGJueDJ4X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoKG5ld19tdHUgPiBFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFKSB8fAotCSAgICAoKG5ld19tdHUgKyBFVEhfSExFTikgPCBFVEhfTUlOX1BBQ0tFVF9TSVpFKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBUaGlzIGRvZXMgbm90IHJhY2Ugd2l0aCBwYWNrZXQgYWxsb2NhdGlvbgotCSAqIGJlY2F1c2UgdGhlIGFjdHVhbCBhbGxvYyBzaXplIGlzCi0JICogb25seSB1cGRhdGVkIGFzIHBhcnQgb2YgbG9hZAotCSAqLwotCWRldi0+bXR1ID0gbmV3X210dTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJYm54MnhfbmljX3VubG9hZChicCwgMCk7Ci0JCWJueDJ4X25pY19sb2FkKGJwLCAwKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQlpZiAoIWJwLT5wYW5pYykKLQkJYm54MnhfcGFuaWMoKTsKLSNlbmRpZgotCS8qIFRoaXMgYWxsb3dzIHRoZSBuZXRpZiB0byBiZSBzaHV0ZG93biBncmFjZWZ1bGx5IGJlZm9yZSByZXNldHRpbmcgKi8KLQlzY2hlZHVsZV93b3JrKCZicC0+cmVzZXRfdGFzayk7Ci19Ci0KLSNpZmRlZiBCQ01fVkxBTgotLyogQ2FsbGVkIHdpdGggcnRubF9sb2NrICovCi1zdGF0aWMgdm9pZCBibngyeF92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JYnAtPnZsZ3JwID0gdmxncnA7Ci0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJYm54Mnhfc2V0X2NsaWVudF9jb25maWcoYnApOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEhBVkVfUE9MTF9DT05UUk9MTEVSKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSKQotc3RhdGljIHZvaWQgcG9sbF9ibngyeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JZGlzYWJsZV9pcnEoYnAtPnBkZXYtPmlycSk7Ci0JYm54MnhfaW50ZXJydXB0KGJwLT5wZGV2LT5pcnEsIGRldik7Ci0JZW5hYmxlX2lycShicC0+cGRldi0+aXJxKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBibngyeF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBibngyeCwgcmVzZXRfdGFzayk7Ci0KLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JQk5YMlhfRVJSKCJyZXNldCB0YXNrIGNhbGxlZCBidXQgU1RPUF9PTl9FUlJPUiBkZWZpbmVkIgotCQkgICIgc28gcmVzZXQgbm90IGRvbmUgdG8gYWxsb3cgZGVidWcgZHVtcCxcbiIKLQkgS0VSTl9FUlIgIiB5b3Ugd2lsbCBuZWVkIHRvIHJlYm9vdCB3aGVuIGRvbmVcbiIpOwotCXJldHVybjsKLSNlbmRpZgotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQotCQlyZXR1cm47Ci0KLQlydG5sX2xvY2soKTsKLQotCWlmIChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfT1BFTikgewotCQlEUChORVRJRl9NU0dfVFhfRVJSLCAic3RhdGUgaXMgJXgsIHJldHVybmluZ1xuIiwgYnAtPnN0YXRlKTsKLQkJZ290byByZXNldF90YXNrX2V4aXQ7Ci0JfQotCi0JYm54MnhfbmljX3VubG9hZChicCwgMCk7Ci0JYm54MnhfbmljX2xvYWQoYnAsIDApOwotCi1yZXNldF90YXNrX2V4aXQ6Ci0JcnRubF91bmxvY2soKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9ib2FyZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnA7Ci0JaW50IHJjOwotCi0JU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKLQlicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlicC0+ZmxhZ3MgPSAwOwotCWJwLT5wb3J0ID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOwotCi0JcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xuIik7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0KLQlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGZpbmQgUENJIGRldmljZSBiYXNlIGFkZHJlc3MsIgotCQkgICAgICAgIiBhYm9ydGluZ1xuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0X2Rpc2FibGU7Ci0JfQotCi0JaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDIpICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIHNlY29uZCBQQ0kgZGV2aWNlIgotCQkgICAgICAgIiBiYXNlIGFkZHJlc3MsIGFib3J0aW5nXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKLQl9Ci0KLQlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX01PRFVMRV9OQU1FKTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCIKLQkJICAgICAgICIgYWJvcnRpbmdcbiIpOwotCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKLQl9Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCWJwLT5wbV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOwotCWlmIChicC0+cG1fY2FwID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGZpbmQgcG93ZXIgbWFuYWdlbWVudCIKLQkJICAgICAgICIgY2FwYWJpbGl0eSwgYWJvcnRpbmdcbiIpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCX0KLQotCWJwLT5wY2llX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOwotCWlmIChicC0+cGNpZV9jYXAgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZmluZCBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5LCIKLQkJICAgICAgICIgYWJvcnRpbmdcbiIpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCX0KLQotCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSA9PSAwKSB7Ci0JCWJwLT5mbGFncyB8PSBVU0lOR19EQUNfRkxBRzsKLQkJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrIgotCQkJICAgICAgICIgZmFpbGVkLCBhYm9ydGluZ1xuIik7Ci0JCQlyYyA9IC1FSU87Ci0JCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKLQkJfQotCi0JfSBlbHNlIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IERNQSwiCi0JCSAgICAgICAiIGFib3J0aW5nXG4iKTsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKLQl9Ci0KLQlicC0+ZGV2ID0gZGV2OwotCWJwLT5wZGV2ID0gcGRldjsKLQotCXNwaW5fbG9ja19pbml0KCZicC0+cGh5X2xvY2spOwotCi0JSU5JVF9XT1JLKCZicC0+cmVzZXRfdGFzaywgYm54MnhfcmVzZXRfdGFzayk7Ci0JSU5JVF9XT1JLKCZicC0+c3BfdGFzaywgYm54Mnhfc3BfdGFzayk7Ci0KLQlkZXYtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQotCWRldi0+aXJxID0gcGRldi0+aXJxOwotCi0JYnAtPnJlZ3ZpZXcgPSBpb3JlbWFwX25vY2FjaGUoZGV2LT5iYXNlX2FkZHIsCi0JCQkJICAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JaWYgKCFicC0+cmVndmlldykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIHJlZ2lzdGVyIHNwYWNlLCBhYm9ydGluZ1xuIik7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X3JlbGVhc2U7Ci0JfQotCi0JYnAtPmRvb3JiZWxscyA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiAsIDIpLAotCQkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpKTsKLQlpZiAoIWJwLT5kb29yYmVsbHMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBkb29yYmVsbCBzcGFjZSwgYWJvcnRpbmdcbiIpOwotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF91bm1hcDsKLQl9Ci0KLQlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7Ci0KLQlibngyeF9nZXRfaHdpbmZvKGJwKTsKLQotCWlmIChDSElQX1JFVihicCkgPT0gQ0hJUF9SRVZfRlBHQSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJGUEdBIGRldGVjdGVkLiBNQ1AgZGlzYWJsZWQsIgotCQkgICAgICAgIiB3aWxsIG9ubHkgaW5pdCBmaXJzdCBkZXZpY2VcbiIpOwotCQlvbmVmdW5jID0gMTsKLQkJbm9tY3AgPSAxOwotCX0KLQotCWlmIChub21jcCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJNQ1AgZGlzYWJsZWQsIHdpbGwgb25seSIKLQkJICAgICAgICIgaW5pdCBmaXJzdCBkZXZpY2VcbiIpOwotCQlvbmVmdW5jID0gMTsKLQl9Ci0KLQlpZiAob25lZnVuYyAmJiBicC0+cG9ydCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJTZWNvbmQgZGV2aWNlIGRpc2FibGVkLCBleGl0aW5nXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXRfdW5tYXA7Ci0JfQotCi0JYnAtPnR4X3Jpbmdfc2l6ZSA9IE1BWF9UWF9BVkFJTDsKLQlicC0+cnhfcmluZ19zaXplID0gTUFYX1JYX0FWQUlMOwotCi0JYnAtPnJ4X2NzdW0gPSAxOwotCi0JYnAtPnJ4X29mZnNldCA9IDA7Ci0KLQlicC0+dHhfcXVpY2tfY29uc190cmlwX2ludCA9IDB4ZmY7Ci0JYnAtPnR4X3F1aWNrX2NvbnNfdHJpcCA9IDB4ZmY7Ci0JYnAtPnR4X3RpY2tzX2ludCA9IDUwOwotCWJwLT50eF90aWNrcyA9IDUwOwotCi0JYnAtPnJ4X3F1aWNrX2NvbnNfdHJpcF9pbnQgPSAweGZmOwotCWJwLT5yeF9xdWlja19jb25zX3RyaXAgPSAweGZmOwotCWJwLT5yeF90aWNrc19pbnQgPSAyNTsKLQlicC0+cnhfdGlja3MgPSAyNTsKLQotCWJwLT5zdGF0c190aWNrcyA9IDEwMDAwMDAgJiAweGZmZmYwMDsKLQotCWJwLT50aW1lcl9pbnRlcnZhbCA9IEhaOwotCWJwLT5jdXJyZW50X2ludGVydmFsID0gKHBvbGwgPyBwb2xsIDogSFopOwotCi0JaW5pdF90aW1lcigmYnAtPnRpbWVyKTsKLQlicC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbDsKLQlicC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBicDsKLQlicC0+dGltZXIuZnVuY3Rpb24gPSBibngyeF90aW1lcjsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3VubWFwOgotCWlmIChicC0+cmVndmlldykgewotCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKLQkJYnAtPnJlZ3ZpZXcgPSBOVUxMOwotCX0KLQotCWlmIChicC0+ZG9vcmJlbGxzKSB7Ci0JCWlvdW5tYXAoYnAtPmRvb3JiZWxscyk7Ci0JCWJwLT5kb29yYmVsbHMgPSBOVUxMOwotCX0KLQotZXJyX291dF9yZWxlYXNlOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0KLWVycl9vdXRfZGlzYWJsZToKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCi1lcnJfb3V0OgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfZ2V0X3BjaWVfd2lkdGgoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MzIgdmFsID0gUkVHX1JEKGJwLCBQQ0lDRkdfT0ZGU0VUICsgUENJQ0ZHX0xJTktfQ09OVFJPTCk7Ci0KLQl2YWwgPSAodmFsICYgUENJQ0ZHX0xJTktfV0lEVEgpID4+IFBDSUNGR19MSU5LX1dJRFRIX1NISUZUOwotCXJldHVybiB2YWw7Ci19Ci0KLS8qIHJldHVybiB2YWx1ZSBvZiAxPTIuNUdIeiAyPTVHSHogKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2dldF9wY2llX3NwZWVkKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIHZhbCA9IFJFR19SRChicCwgUENJQ0ZHX09GRlNFVCArIFBDSUNGR19MSU5LX0NPTlRST0wpOwotCi0JdmFsID0gKHZhbCAmIFBDSUNGR19MSU5LX1NQRUVEKSA+PiBQQ0lDRkdfTElOS19TUEVFRF9TSElGVDsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKLXsKLQlzdGF0aWMgaW50IHZlcnNpb25fcHJpbnRlZDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgYm54MnggKmJwOwotCWludCByYzsKLQlpbnQgcG9ydCA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCWlmICh2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwotCi0JLyogZGV2IHplcm9lZCBpbiBpbml0X2V0aGVyZGV2ICovCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpicCkpOwotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0KLQlicCA9IG5ldGRldl9wcml2KGRldik7Ci0JYnAtPm1zZ2xldmVsID0gZGVidWc7Ci0KLQlpZiAocG9ydCAmJiBvbmVmdW5jKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInNlY29uZCBmdW5jdGlvbiBkaXNhYmxlZC4gZXhpdGluZ1xuIik7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJjID0gYm54MnhfaW5pdF9ib2FyZChwZGV2LCBkZXYpOwotCWlmIChyYyA8IDApIHsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYm54Mnhfc3RhcnRfeG1pdDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLQotCWRldi0+ZXRodG9vbF9vcHMgPSAmYm54MnhfZXRodG9vbF9vcHM7Ci0JZGV2LT5vcGVuID0gYm54Mnhfb3BlbjsKLQlkZXYtPnN0b3AgPSBibngyeF9jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGJueDJ4X3NldF9yeF9tb2RlOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gYm54MnhfY2hhbmdlX21hY19hZGRyOwotCWRldi0+ZG9faW9jdGwgPSBibngyeF9pb2N0bDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBibngyeF9jaGFuZ2VfbXR1OwotCWRldi0+dHhfdGltZW91dCA9IGJueDJ4X3R4X3RpbWVvdXQ7Ci0jaWZkZWYgQkNNX1ZMQU4KLQlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBibngyeF92bGFuX3J4X3JlZ2lzdGVyOwotI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX1BPTExfQ09OVFJPTExFUikgfHwgZGVmaW5lZChDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUikKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHBvbGxfYm54Mng7Ci0jZW5kaWYKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7Ci0JaWYgKGJwLT5mbGFncyAmIFVTSU5HX0RBQ19GTEFHKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKLSNpZmRlZiBCQ01fVkxBTgotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwotI2VuZGlmCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTjsKLQotCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYgKHJjKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKLQkJaWYgKGJwLT5yZWd2aWV3KQotCQkJaW91bm1hcChicC0+cmVndmlldyk7Ci0JCWlmIChicC0+ZG9vcmJlbGxzKQotCQkJaW91bm1hcChicC0+ZG9vcmJlbGxzKTsKLQkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQotCWJwLT5uYW1lID0gYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyAoJWMlZCkgUENJLUUgeCVkICVzIGZvdW5kIGF0IG1lbSAlbHgsIgotCSAgICAgICAiIElSUSAlZCwgIiwgZGV2LT5uYW1lLCBicC0+bmFtZSwKLQkgICAgICAgKChDSElQX0lEKGJwKSAmIDB4ZjAwMCkgPj4gMTIpICsgJ0EnLAotCSAgICAgICAoKENISVBfSUQoYnApICYgMHgwZmYwKSA+PiA0KSwKLQkgICAgICAgYm54MnhfZ2V0X3BjaWVfd2lkdGgoYnApLAotCSAgICAgICAoYm54MnhfZ2V0X3BjaWVfc3BlZWQoYnApID09IDIpID8gIjVHSHogKEdlbjIpIiA6ICIyLjVHSHoiLAotCSAgICAgICBkZXYtPmJhc2VfYWRkciwgYnAtPnBkZXYtPmlycSk7Ci0JcHJpbnRrKEtFUk5fQ09OVCAibm9kZSBhZGRyICVzXG4iLCBwcmludF9tYWMobWFjLCBkZXYtPmRldl9hZGRyKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBibngyeF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGJueDJ4ICpicDsKLQotCWlmICghZGV2KSB7Ci0JCS8qIHdlIGdldCBoZXJlIGlmIGluaXRfb25lKCkgZmFpbHMgKi8KLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQkFEIG5ldCBkZXZpY2UgZnJvbSBibngyeF9pbml0X29uZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCi0JaWYgKGJwLT5yZWd2aWV3KQotCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKLQotCWlmIChicC0+ZG9vcmJlbGxzKQotCQlpb3VubWFwKGJwLT5kb29yYmVsbHMpOwotCi0JZnJlZV9uZXRkZXYoZGV2KTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGJueDJ4ICpicDsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gMDsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gMDsKLQotCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWJueDJ4X25pY191bmxvYWQoYnAsIDApOwotCi0JbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCi0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBibngyeF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgYm54MnggKmJwOwotCWludCByYzsKLQotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQlicCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7Ci0JbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCi0JcmMgPSBibngyeF9uaWNfbG9hZChicCwgMCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJueDJ4X3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgICAgPSBEUlZfTU9EVUxFX05BTUUsCi0JLmlkX3RhYmxlICAgPSBibngyeF9wY2lfdGJsLAotCS5wcm9iZSAgICAgID0gYm54MnhfaW5pdF9vbmUsCi0JLnJlbW92ZSAgICAgPSBfX2RldmV4aXRfcChibngyeF9yZW1vdmVfb25lKSwKLQkuc3VzcGVuZCAgICA9IGJueDJ4X3N1c3BlbmQsCi0JLnJlc3VtZSAgICAgPSBibngyeF9yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBibngyeF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJueDJ4X3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYm54MnhfY2xlYW51cCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYm54MnhfcGNpX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGJueDJ4X2luaXQpOwotbW9kdWxlX2V4aXQoYm54MnhfY2xlYW51cCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC5oCmluZGV4IDhlNjhkMDYuLjRiZjRmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnguaApAQCAtMTQsMzkgKzE0LDQ2IEBACiAjaWZuZGVmIEJOWDJYX0gKICNkZWZpbmUgQk5YMlhfSAogCisvKiBjb21waWxhdGlvbiB0aW1lIGZsYWdzICovCisKKy8qIGRlZmluZSB0aGlzIHRvIG1ha2UgdGhlIGRyaXZlciBmcmVlemUgb24gZXJyb3IgdG8gYWxsb3cgZ2V0dGluZyBkZWJ1ZyBpbmZvCisgKiAoeW91IHdpbGwgbmVlZCB0byByZWJvb3QgYWZ0ZXJ3YXJkcykgKi8KKy8qICNkZWZpbmUgQk5YMlhfU1RPUF9PTl9FUlJPUiAqLworCiAvKiBlcnJvci9kZWJ1ZyBwcmludHMgKi8KIAotI2RlZmluZSBEUlZfTU9EVUxFX05BTUUgCSJibngyeCIKLSNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRSAgICAgIjogIgorI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyeCIKKyNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCiAKIC8qIGZvciBtZXNzYWdlcyB0aGF0IGFyZSBjdXJyZW50bHkgb2ZmICovCi0jZGVmaW5lIEJOWDJYX01TR19PRkYgICAJCTAKLSNkZWZpbmUgQk5YMlhfTVNHX01DUCAgIAkJMHgxMDAwMCAvKiB3YXM6IE5FVElGX01TR19IVyAqLwotI2RlZmluZSBCTlgyWF9NU0dfU1RBVFMgCQkweDIwMDAwIC8qIHdhczogTkVUSUZfTVNHX1RJTUVSICovCi0jZGVmaW5lIE5FVElGX01TR19OVk0gICAJCTB4NDAwMDAgLyogd2FzOiBORVRJRl9NU0dfSFcgKi8KLSNkZWZpbmUgTkVUSUZfTVNHX0RNQUUgIAkJMHg4MDAwMCAvKiB3YXM6IE5FVElGX01TR19IVyAqLworI2RlZmluZSBCTlgyWF9NU0dfT0ZGCQkJMAorI2RlZmluZSBCTlgyWF9NU0dfTUNQCQkJMHgwMTAwMDAgLyogd2FzOiBORVRJRl9NU0dfSFcgKi8KKyNkZWZpbmUgQk5YMlhfTVNHX1NUQVRTCQkJMHgwMjAwMDAgLyogd2FzOiBORVRJRl9NU0dfVElNRVIgKi8KKyNkZWZpbmUgQk5YMlhfTVNHX05WTQkJCTB4MDQwMDAwIC8qIHdhczogTkVUSUZfTVNHX0hXICovCisjZGVmaW5lIEJOWDJYX01TR19ETUFFCQkJMHgwODAwMDAgLyogd2FzOiBORVRJRl9NU0dfSFcgKi8KICNkZWZpbmUgQk5YMlhfTVNHX1NQCQkJMHgxMDAwMDAgLyogd2FzOiBORVRJRl9NU0dfSU5UUiAqLwogI2RlZmluZSBCTlgyWF9NU0dfRlAJCQkweDIwMDAwMCAvKiB3YXM6IE5FVElGX01TR19JTlRSICovCiAKLSNkZWZpbmUgRFBfTEVWRUwJCQlLRVJOX05PVElDRSAgICAgLyogd2FzOiBLRVJOX0RFQlVHICovCisjZGVmaW5lIERQX0xFVkVMCQkJS0VSTl9OT1RJQ0UJLyogd2FzOiBLRVJOX0RFQlVHICovCiAKIC8qIHJlZ3VsYXIgZGVidWcgcHJpbnQgKi8KICNkZWZpbmUgRFAoX19tYXNrLCBfX2ZtdCwgX19hcmdzLi4uKSBkbyB7IFwKIAlpZiAoYnAtPm1zZ2xldmVsICYgKF9fbWFzaykpIFwKLQkJcHJpbnRrKERQX0xFVkVMICJbJXM6JWQoJXMpXSIgX19mbXQsIF9fRlVOQ1RJT05fXywgXAotCQlfX0xJTkVfXywgYnAtPmRldj8oYnAtPmRldi0+bmFtZSk6Ij8iLCAjI19fYXJncyk7IFwKKwkJcHJpbnRrKERQX0xFVkVMICJbJXM6JWQoJXMpXSIgX19mbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgXAorCQkJYnAtPmRldj8oYnAtPmRldi0+bmFtZSk6Ij8iLCAjI19fYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBlcnJvcnMgZGVidWcgcHJpbnQgKi8KKyNkZWZpbmUgQk5YMlhfREJHX0VSUihfX2ZtdCwgX19hcmdzLi4uKSBkbyB7IFwKKwlpZiAoYnAtPm1zZ2xldmVsICYgTkVUSUZfTVNHX1BST0JFKSBcCisJCXByaW50ayhLRVJOX0VSUiAiWyVzOiVkKCVzKV0iIF9fZm10LCBfX2Z1bmNfXywgX19MSU5FX18sIFwKKwkJCWJwLT5kZXY/KGJwLT5kZXYtPm5hbWUpOiI/IiwgIyNfX2FyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKIAogLyogZm9yIGVycm9ycyAobmV2ZXIgbWFza2VkKSAqLwogI2RlZmluZSBCTlgyWF9FUlIoX19mbXQsIF9fYXJncy4uLikgZG8geyBcCi0JcHJpbnRrKEtFUk5fRVJSICJbJXM6JWQoJXMpXSIgX19mbXQsIF9fRlVOQ1RJT05fXywgXAotCQlfX0xJTkVfXywgYnAtPmRldj8oYnAtPmRldi0+bmFtZSk6Ij8iLCAjI19fYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCi0vKiBmb3IgbG9nZ2luZyAobmV2ZXIgbWFza2VkKSAqLwotI2RlZmluZSBCTlgyWF9MT0coX19mbXQsIF9fYXJncy4uLikgZG8geyBcCi0JcHJpbnRrKEtFUk5fTk9USUNFICJbJXM6JWQoJXMpXSIgX19mbXQsIF9fRlVOQ1RJT05fXywgXAotCQlfX0xJTkVfXywgYnAtPmRldj8oYnAtPmRldi0+bmFtZSk6Ij8iLCAjI19fYXJncyk7IFwKKwlwcmludGsoS0VSTl9FUlIgIlslczolZCglcyldIiBfX2ZtdCwgX19mdW5jX18sIF9fTElORV9fLCBcCisJCWJwLT5kZXY/KGJwLT5kZXYtPm5hbWUpOiI/IiwgIyNfX2FyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKIAogLyogYmVmb3JlIHdlIGhhdmUgYSBkZXYtPm5hbWUgdXNlIGRldl9pbmZvKCkgKi8KQEAgLTYwLDcgKzY3LDcgQEAKICNkZWZpbmUgYm54MnhfcGFuaWMoKSBkbyB7IFwKIAkJYnAtPnBhbmljID0gMTsgXAogCQlCTlgyWF9FUlIoImRyaXZlciBhc3NlcnRcbiIpOyBcCi0JCWJueDJ4X2Rpc2FibGVfaW50KGJwKTsgXAorCQlibngyeF9pbnRfZGlzYWJsZShicCk7IFwKIAkJYm54MnhfcGFuaWNfZHVtcChicCk7IFwKIAl9IHdoaWxlICgwKQogI2Vsc2UKQEAgLTcxLDE2NCArNzgsNDEyIEBACiAjZW5kaWYKIAogCi0jZGVmaW5lIFU2NF9MTyh4KSAgICAgICAJCSgoKHU2NCl4KSAmIDB4ZmZmZmZmZmYpCi0jZGVmaW5lIFU2NF9ISSh4KSAgICAgICAJCSgoKHU2NCl4KSA+PiAzMikKLSNkZWZpbmUgSElMT19VNjQoaGksIGxvKQkJKCgodTY0KWhpIDw8IDMyKSArIGxvKQorI2lmZGVmIE5FVElGX0ZfSFdfVkxBTl9UWAorI2RlZmluZSBCQ01fVkxBTgkJCTEKKyNlbmRpZgogCiAKLSNkZWZpbmUgUkVHX0FERFIoYnAsIG9mZnNldCkgICAgCShicC0+cmVndmlldyArIG9mZnNldCkKKyNkZWZpbmUgVTY0X0xPKHgpCQkJKHUzMikoKCh1NjQpKHgpKSAmIDB4ZmZmZmZmZmYpCisjZGVmaW5lIFU2NF9ISSh4KQkJCSh1MzIpKCgodTY0KSh4KSkgPj4gMzIpCisjZGVmaW5lIEhJTE9fVTY0KGhpLCBsbykJCSgoKCh1NjQpKGhpKSkgPDwgMzIpICsgKGxvKSkKIAotI2RlZmluZSBSRUdfUkQoYnAsIG9mZnNldCkgICAgICAJcmVhZGwoUkVHX0FERFIoYnAsIG9mZnNldCkpCi0jZGVmaW5lIFJFR19SRDgoYnAsIG9mZnNldCkgICAgIAlyZWFkYihSRUdfQUREUihicCwgb2Zmc2V0KSkKLSNkZWZpbmUgUkVHX1JENjQoYnAsIG9mZnNldCkgICAgCXJlYWRxKFJFR19BRERSKGJwLCBvZmZzZXQpKQogCi0jZGVmaW5lIFJFR19XUihicCwgb2Zmc2V0LCB2YWwpIAl3cml0ZWwoKHUzMil2YWwsIFJFR19BRERSKGJwLCBvZmZzZXQpKQorI2RlZmluZSBSRUdfQUREUihicCwgb2Zmc2V0KQkJKGJwLT5yZWd2aWV3ICsgb2Zmc2V0KQorCisjZGVmaW5lIFJFR19SRChicCwgb2Zmc2V0KQkJcmVhZGwoUkVHX0FERFIoYnAsIG9mZnNldCkpCisjZGVmaW5lIFJFR19SRDgoYnAsIG9mZnNldCkJCXJlYWRiKFJFR19BRERSKGJwLCBvZmZzZXQpKQorI2RlZmluZSBSRUdfUkQ2NChicCwgb2Zmc2V0KQkJcmVhZHEoUkVHX0FERFIoYnAsIG9mZnNldCkpCisKKyNkZWZpbmUgUkVHX1dSKGJwLCBvZmZzZXQsIHZhbCkJCXdyaXRlbCgodTMyKXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCiAjZGVmaW5lIFJFR19XUjgoYnAsIG9mZnNldCwgdmFsKQl3cml0ZWIoKHU4KXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCi0jZGVmaW5lIFJFR19XUjE2KGJwLCBvZmZzZXQsIHZhbCkgICAgICAgd3JpdGV3KCh1MTYpdmFsLCBSRUdfQUREUihicCwgb2Zmc2V0KSkKLSNkZWZpbmUgUkVHX1dSMzIoYnAsIG9mZnNldCwgdmFsKSAgICAgICBSRUdfV1IoYnAsIG9mZnNldCwgdmFsKQorI2RlZmluZSBSRUdfV1IxNihicCwgb2Zmc2V0LCB2YWwpCXdyaXRldygodTE2KXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCisjZGVmaW5lIFJFR19XUjMyKGJwLCBvZmZzZXQsIHZhbCkJUkVHX1dSKGJwLCBvZmZzZXQsIHZhbCkKIAotI2RlZmluZSBSRUdfUkRfSU5EKGJwLCBvZmZzZXQpICAJYm54MnhfcmVnX3JkX2luZChicCwgb2Zmc2V0KQotI2RlZmluZSBSRUdfV1JfSU5EKGJwLCBvZmZzZXQsIHZhbCkgICAgIGJueDJ4X3JlZ193cl9pbmQoYnAsIG9mZnNldCwgdmFsKQorI2RlZmluZSBSRUdfUkRfSU5EKGJwLCBvZmZzZXQpCQlibngyeF9yZWdfcmRfaW5kKGJwLCBvZmZzZXQpCisjZGVmaW5lIFJFR19XUl9JTkQoYnAsIG9mZnNldCwgdmFsKQlibngyeF9yZWdfd3JfaW5kKGJwLCBvZmZzZXQsIHZhbCkKIAotI2RlZmluZSBSRUdfV1JfRE1BRShicCwgb2Zmc2V0LCB2YWwsIGxlbjMyKSBcCisjZGVmaW5lIFJFR19SRF9ETUFFKGJwLCBvZmZzZXQsIHZhbHAsIGxlbjMyKSBcCiAJZG8geyBcCi0JCW1lbWNweShibngyeF9zcChicCwgd2JfZGF0YVswXSksIHZhbCwgbGVuMzIgKiA0KTsgXAorCQlibngyeF9yZWFkX2RtYWUoYnAsIG9mZnNldCwgbGVuMzIpO1wKKwkJbWVtY3B5KHZhbHAsIGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgbGVuMzIgKiA0KTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgUkVHX1dSX0RNQUUoYnAsIG9mZnNldCwgdmFscCwgbGVuMzIpIFwKKwlkbyB7IFwKKwkJbWVtY3B5KGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgdmFscCwgbGVuMzIgKiA0KTsgXAogCQlibngyeF93cml0ZV9kbWFlKGJwLCBibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9kYXRhKSwgXAogCQkJCSBvZmZzZXQsIGxlbjMyKTsgXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgU0hNRU1fUkQoYnAsIHR5cGUpIFwKLQlSRUdfUkQoYnAsIGJwLT5zaG1lbV9iYXNlICsgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgdHlwZSkpCi0jZGVmaW5lIFNITUVNX1dSKGJwLCB0eXBlLCB2YWwpIFwKLQlSRUdfV1IoYnAsIGJwLT5zaG1lbV9iYXNlICsgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgdHlwZSksIHZhbCkKKyNkZWZpbmUgU0hNRU1fQUREUihicCwgZmllbGQpCQkoYnAtPmNvbW1vbi5zaG1lbV9iYXNlICsgXAorCQkJCQkgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgZmllbGQpKQorI2RlZmluZSBTSE1FTV9SRChicCwgZmllbGQpCQlSRUdfUkQoYnAsIFNITUVNX0FERFIoYnAsIGZpZWxkKSkKKyNkZWZpbmUgU0hNRU1fV1IoYnAsIGZpZWxkLCB2YWwpCVJFR19XUihicCwgU0hNRU1fQUREUihicCwgZmllbGQpLCB2YWwpCiAKICNkZWZpbmUgTklHX1dSKHJlZywgdmFsKQlSRUdfV1IoYnAsIHJlZywgdmFsKQotI2RlZmluZSBFTUFDX1dSKHJlZywgdmFsKSAgICAgICBSRUdfV1IoYnAsIGVtYWNfYmFzZSArIHJlZywgdmFsKQotI2RlZmluZSBCTUFDX1dSKHJlZywgdmFsKSAgICAgICBSRUdfV1IoYnAsIEdSQ0JBU0VfTklHICsgYm1hY19hZGRyICsgcmVnLCB2YWwpCisjZGVmaW5lIEVNQUNfV1IocmVnLCB2YWwpCVJFR19XUihicCwgZW1hY19iYXNlICsgcmVnLCB2YWwpCisjZGVmaW5lIEJNQUNfV1IocmVnLCB2YWwpCVJFR19XUihicCwgR1JDQkFTRV9OSUcgKyBibWFjX2FkZHIgKyByZWcsIHZhbCkKIAogCi0jZGVmaW5lIGZvcl9lYWNoX3F1ZXVlKGJwLCB2YXIpIGZvciAodmFyID0gMDsgdmFyIDwgYnAtPm51bV9xdWV1ZXM7IHZhcisrKQorI2RlZmluZSBmb3JfZWFjaF9xdWV1ZShicCwgdmFyKQlmb3IgKHZhciA9IDA7IHZhciA8IGJwLT5udW1fcXVldWVzOyB2YXIrKykKIAogI2RlZmluZSBmb3JfZWFjaF9ub25kZWZhdWx0X3F1ZXVlKGJwLCB2YXIpIFwKIAkJCQlmb3IgKHZhciA9IDE7IHZhciA8IGJwLT5udW1fcXVldWVzOyB2YXIrKykKLSNkZWZpbmUgaXNfbXVsdGkoYnApICAgIAkoYnAtPm51bV9xdWV1ZXMgPiAxKQorI2RlZmluZSBpc19tdWx0aShicCkJCShicC0+bnVtX3F1ZXVlcyA+IDEpCiAKIAotc3RydWN0IHJlZ3AgewotCXUzMiBsbzsKLQl1MzIgaGk7CisvKiBmYXN0IHBhdGggKi8KKworc3RydWN0IHN3X3J4X2JkIHsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOworCURFQ0xBUkVfUENJX1VOTUFQX0FERFIobWFwcGluZykKIH07CiAKLXN0cnVjdCBibWFjX3N0YXRzIHsKLQlzdHJ1Y3QgcmVncCB0eF9ndHBrdDsKLQlzdHJ1Y3QgcmVncCB0eF9ndHhwZjsKLQlzdHJ1Y3QgcmVncCB0eF9ndGZjczsKLQlzdHJ1Y3QgcmVncCB0eF9ndG1jYTsKLQlzdHJ1Y3QgcmVncCB0eF9ndGdjYTsKLQlzdHJ1Y3QgcmVncCB0eF9ndGZyZzsKLQlzdHJ1Y3QgcmVncCB0eF9ndG92cjsKLQlzdHJ1Y3QgcmVncCB0eF9ndDY0OwotCXN0cnVjdCByZWdwIHR4X2d0MTI3OwotCXN0cnVjdCByZWdwIHR4X2d0MjU1OyAgIC8qIDEwICovCi0Jc3RydWN0IHJlZ3AgdHhfZ3Q1MTE7Ci0Jc3RydWN0IHJlZ3AgdHhfZ3QxMDIzOwotCXN0cnVjdCByZWdwIHR4X2d0MTUxODsKLQlzdHJ1Y3QgcmVncCB0eF9ndDIwNDc7Ci0Jc3RydWN0IHJlZ3AgdHhfZ3Q0MDk1OwotCXN0cnVjdCByZWdwIHR4X2d0OTIxNjsKLQlzdHJ1Y3QgcmVncCB0eF9ndDE2MzgzOwotCXN0cnVjdCByZWdwIHR4X2d0bWF4OwotCXN0cnVjdCByZWdwIHR4X2d0dWZsOwotCXN0cnVjdCByZWdwIHR4X2d0ZXJyOyAgIC8qIDIwICovCi0Jc3RydWN0IHJlZ3AgdHhfZ3RieXQ7Ci0KLQlzdHJ1Y3QgcmVncCByeF9ncjY0OwotCXN0cnVjdCByZWdwIHJ4X2dyMTI3OwotCXN0cnVjdCByZWdwIHJ4X2dyMjU1OwotCXN0cnVjdCByZWdwIHJ4X2dyNTExOwotCXN0cnVjdCByZWdwIHJ4X2dyMTAyMzsKLQlzdHJ1Y3QgcmVncCByeF9ncjE1MTg7Ci0Jc3RydWN0IHJlZ3AgcnhfZ3IyMDQ3OwotCXN0cnVjdCByZWdwIHJ4X2dyNDA5NTsKLQlzdHJ1Y3QgcmVncCByeF9ncjkyMTY7ICAvKiAzMCAqLwotCXN0cnVjdCByZWdwIHJ4X2dyMTYzODM7Ci0Jc3RydWN0IHJlZ3AgcnhfZ3JtYXg7Ci0Jc3RydWN0IHJlZ3AgcnhfZ3Jwa3Q7Ci0Jc3RydWN0IHJlZ3AgcnhfZ3JmY3M7Ci0Jc3RydWN0IHJlZ3AgcnhfZ3JtY2E7Ci0Jc3RydWN0IHJlZ3AgcnhfZ3JiY2E7Ci0Jc3RydWN0IHJlZ3AgcnhfZ3J4Y2Y7Ci0Jc3RydWN0IHJlZ3AgcnhfZ3J4cGY7Ci0Jc3RydWN0IHJlZ3AgcnhfZ3J4dW87Ci0Jc3RydWN0IHJlZ3AgcnhfZ3JqYnI7ICAgLyogNDAgKi8KLQlzdHJ1Y3QgcmVncCByeF9ncm92cjsKLQlzdHJ1Y3QgcmVncCByeF9ncmZscjsKLQlzdHJ1Y3QgcmVncCByeF9ncm1lZzsKLQlzdHJ1Y3QgcmVncCByeF9ncm1lYjsKLQlzdHJ1Y3QgcmVncCByeF9ncmJ5dDsKLQlzdHJ1Y3QgcmVncCByeF9ncnVuZDsKLQlzdHJ1Y3QgcmVncCByeF9ncmZyZzsKLQlzdHJ1Y3QgcmVncCByeF9ncmVyYjsKLQlzdHJ1Y3QgcmVncCByeF9ncmZyZTsKLQlzdHJ1Y3QgcmVncCByeF9ncmlwajsgICAvKiA1MCAqLworc3RydWN0IHN3X3R4X2JkIHsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOworCXUxNgkJZmlyc3RfYmQ7CiB9OwogCi1zdHJ1Y3QgZW1hY19zdGF0cyB7Ci0JdTMyIHJ4X2lmaGNpbm9jdGV0cyAgICAgCQkgICA7Ci0JdTMyIHJ4X2lmaGNpbmJhZG9jdGV0cyAgCQkgICA7Ci0JdTMyIHJ4X2V0aGVyc3RhdHNmcmFnbWVudHMgICAgICAJICAgOwotCXUzMiByeF9pZmhjaW51Y2FzdHBrdHMgIAkJICAgOwotCXUzMiByeF9pZmhjaW5tdWx0aWNhc3Rwa3RzICAgICAgCSAgIDsKLQl1MzIgcnhfaWZoY2luYnJvYWRjYXN0cGt0cyAgICAgIAkgICA7Ci0JdTMyIHJ4X2RvdDNzdGF0c2Zjc2Vycm9ycyAgICAgICAJICAgOwotCXUzMiByeF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnMgCSAgIDsKLQl1MzIgcnhfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzICAgICAgICAgOwotCXUzMiByeF94b25wYXVzZWZyYW1lc3JlY2VpdmVkICAgCSAgIDsgICAgLyogMTAgKi8KLQl1MzIgcnhfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWQgIAkgICA7Ci0JdTMyIHJ4X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZCAJICAgOwotCXUzMiByeF94b2Zmc3RhdGVlbnRlcmVkIAkJICAgOwotCXUzMiByeF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nICAgCSAgIDsKLQl1MzIgcnhfZXRoZXJzdGF0c2phYmJlcnMJCSAgIDsKLQl1MzIgcnhfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHMgIAkgICA7Ci0JdTMyIHJ4X2V0aGVyc3RhdHNwa3RzNjRvY3RldHMgICAJICAgOwotCXUzMiByeF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHMgICA7Ci0JdTMyIHJ4X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHMgIDsKLQl1MzIgcnhfZXRoZXJzdGF0c3BrdHMyNTZvY3RldHN0bzUxMW9jdGV0cyAgOyAgICAvKiAyMCAqLwotCXUzMiByeF9ldGhlcnN0YXRzcGt0czUxMm9jdGV0c3RvMTAyM29jdGV0cyA7Ci0JdTMyIHJ4X2V0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0czsKLQl1MzIgcnhfZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0cyAgICAgICAgOwotCi0JdTMyIHJ4X2ZhbHNlY2FycmllcmVycm9ycyAgICAgICAJICAgOwotCi0JdTMyIHR4X2lmaGNvdXRvY3RldHMgICAgCQkgICA7Ci0JdTMyIHR4X2lmaGNvdXRiYWRvY3RldHMgCQkgICA7Ci0JdTMyIHR4X2V0aGVyc3RhdHNjb2xsaXNpb25zICAgICAJICAgOwotCXUzMiB0eF9vdXR4b25zZW50ICAgICAgIAkJICAgOwotCXUzMiB0eF9vdXR4b2Zmc2VudCAgICAgIAkJICAgOwotCXUzMiB0eF9mbG93Y29udHJvbGRvbmUgIAkJICAgOyAgICAvKiAzMCAqLwotCXUzMiB0eF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXMgICAgICA7Ci0JdTMyIHR4X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzICAgIDsKLQl1MzIgdHhfZG90M3N0YXRzZGVmZXJyZWR0cmFuc21pc3Npb25zICAgICAgOwotCXUzMiB0eF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zICAgICAgICA7Ci0JdTMyIHR4X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zICAJICAgOwotCXUzMiB0eF9pZmhjb3V0dWNhc3Rwa3RzIAkJICAgOwotCXUzMiB0eF9pZmhjb3V0bXVsdGljYXN0cGt0cyAgICAgCSAgIDsKLQl1MzIgdHhfaWZoY291dGJyb2FkY2FzdHBrdHMgICAgIAkgICA7Ci0JdTMyIHR4X2V0aGVyc3RhdHNwa3RzNjRvY3RldHMgICAJICAgOwotCXUzMiB0eF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHMgICA7ICAgIC8qIDQwICovCi0JdTMyIHR4X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHMgIDsKLQl1MzIgdHhfZXRoZXJzdGF0c3BrdHMyNTZvY3RldHN0bzUxMW9jdGV0cyAgOwotCXUzMiB0eF9ldGhlcnN0YXRzcGt0czUxMm9jdGV0c3RvMTAyM29jdGV0cyA7Ci0JdTMyIHR4X2V0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0IDsKLQl1MzIgdHhfZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0cyAgICAgICAgOwotCXUzMiB0eF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzICA7ICAgIC8qIDQ2ICovCitzdHJ1Y3Qgc3dfcnhfcGFnZSB7CisJc3RydWN0IHBhZ2UJKnBhZ2U7CisJREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKQogfTsKIAotdW5pb24gbWFjX3N0YXRzIHsKLQlzdHJ1Y3QgZW1hY19zdGF0cyBlbWFjOwotCXN0cnVjdCBibWFjX3N0YXRzIGJtYWM7CisKKy8qIE1DIGhzaSAqLworI2RlZmluZSBCQ01fUEFHRV9TSElGVAkJCTEyCisjZGVmaW5lIEJDTV9QQUdFX1NJWkUJCQkoMSA8PCBCQ01fUEFHRV9TSElGVCkKKyNkZWZpbmUgQkNNX1BBR0VfTUFTSwkJCSh+KEJDTV9QQUdFX1NJWkUgLSAxKSkKKyNkZWZpbmUgQkNNX1BBR0VfQUxJR04oYWRkcikJKCgoYWRkcikgKyBCQ01fUEFHRV9TSVpFIC0gMSkgJiBCQ01fUEFHRV9NQVNLKQorCisjZGVmaW5lIFBBR0VTX1BFUl9TR0VfU0hJRlQJCTAKKyNkZWZpbmUgUEFHRVNfUEVSX1NHRQkJCSgxIDw8IFBBR0VTX1BFUl9TR0VfU0hJRlQpCisKKy8qIFNHRSByaW5nIHJlbGF0ZWQgbWFjcm9zICovCisjZGVmaW5lIE5VTV9SWF9TR0VfUEFHRVMJCTIKKyNkZWZpbmUgUlhfU0dFX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9yeF9zZ2UpKQorI2RlZmluZSBNQVhfUlhfU0dFX0NOVAkJCShSWF9TR0VfQ05UIC0gMikKKy8qIFJYX1NHRV9DTlQgaXMgcHJvbWlzc2VkIHRvIGJlIGEgcG93ZXIgb2YgMiAqLworI2RlZmluZSBSWF9TR0VfTUFTSwkJCShSWF9TR0VfQ05UIC0gMSkKKyNkZWZpbmUgTlVNX1JYX1NHRQkJCShSWF9TR0VfQ05UICogTlVNX1JYX1NHRV9QQUdFUykKKyNkZWZpbmUgTUFYX1JYX1NHRQkJCShOVU1fUlhfU0dFIC0gMSkKKyNkZWZpbmUgTkVYVF9TR0VfSURYKHgpCQkoKCgoeCkgJiBSWF9TR0VfTUFTSykgPT0gXAorCQkJCSAgKE1BWF9SWF9TR0VfQ05UIC0gMSkpID8gKHgpICsgMyA6ICh4KSArIDEpCisjZGVmaW5lIFJYX1NHRSh4KQkJCSgoeCkgJiBNQVhfUlhfU0dFKQorCisvKiBTR0UgcHJvZHVjZXIgbWFzayByZWxhdGVkIG1hY3JvcyAqLworLyogTnVtYmVyIG9mIGJpdHMgaW4gb25lIHNnZV9tYXNrIGFycmF5IGVsZW1lbnQgKi8KKyNkZWZpbmUgUlhfU0dFX01BU0tfRUxFTV9TWgkJNjQKKyNkZWZpbmUgUlhfU0dFX01BU0tfRUxFTV9TSElGVAkJNgorI2RlZmluZSBSWF9TR0VfTUFTS19FTEVNX01BU0sJCSgodTY0KVJYX1NHRV9NQVNLX0VMRU1fU1ogLSAxKQorCisvKiBDcmVhdGVzIGEgYml0bWFzayBvZiBhbGwgb25lcyBpbiBsZXNzIHNpZ25pZmljYW50IGJpdHMuCisgICBpZHggLSBpbmRleCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGNyZWF0ZWQgbWFzayAqLworI2RlZmluZSBSWF9TR0VfT05FU19NQVNLKGlkeCkgXAorCQkoKCh1NjQpMHgxIDw8ICgoKGlkeCkgJiBSWF9TR0VfTUFTS19FTEVNX01BU0spICsgMSkpIC0gMSkKKyNkZWZpbmUgUlhfU0dFX01BU0tfRUxFTV9PTkVfTUFTSwkoKHU2NCkofjApKQorCisvKiBOdW1iZXIgb2YgdTY0IGVsZW1lbnRzIGluIFNHRSBtYXNrIGFycmF5ICovCisjZGVmaW5lIFJYX1NHRV9NQVNLX0xFTgkJCSgoTlVNX1JYX1NHRV9QQUdFUyAqIFJYX1NHRV9DTlQpIC8gXAorCQkJCQkgUlhfU0dFX01BU0tfRUxFTV9TWikKKyNkZWZpbmUgUlhfU0dFX01BU0tfTEVOX01BU0sJCShSWF9TR0VfTUFTS19MRU4gLSAxKQorI2RlZmluZSBORVhUX1NHRV9NQVNLX0VMRU0oZWwpCQkoKChlbCkgKyAxKSAmIFJYX1NHRV9NQVNLX0xFTl9NQVNLKQorCisKK3N0cnVjdCBibngyeF9mYXN0cGF0aCB7CisKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJbmFwaTsKKworCXN0cnVjdCBob3N0X3N0YXR1c19ibG9jayAqc3RhdHVzX2JsazsKKwlkbWFfYWRkcl90CQlzdGF0dXNfYmxrX21hcHBpbmc7CisKKwlzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEJKmh3X3R4X3Byb2RzOworCWRtYV9hZGRyX3QJCXR4X3Byb2RzX21hcHBpbmc7CisKKwlzdHJ1Y3Qgc3dfdHhfYmQJCSp0eF9idWZfcmluZzsKKworCXN0cnVjdCBldGhfdHhfYmQJKnR4X2Rlc2NfcmluZzsKKwlkbWFfYWRkcl90CQl0eF9kZXNjX21hcHBpbmc7CisKKwlzdHJ1Y3Qgc3dfcnhfYmQJCSpyeF9idWZfcmluZzsJLyogQkRzIG1hcHBpbmdzIHJpbmcgKi8KKwlzdHJ1Y3Qgc3dfcnhfcGFnZQkqcnhfcGFnZV9yaW5nOwkvKiBTR0UgcGFnZXMgbWFwcGluZ3MgcmluZyAqLworCisJc3RydWN0IGV0aF9yeF9iZAkqcnhfZGVzY19yaW5nOworCWRtYV9hZGRyX3QJCXJ4X2Rlc2NfbWFwcGluZzsKKworCXVuaW9uIGV0aF9yeF9jcWUJKnJ4X2NvbXBfcmluZzsKKwlkbWFfYWRkcl90CQlyeF9jb21wX21hcHBpbmc7CisKKwkvKiBTR0UgcmluZyAqLworCXN0cnVjdCBldGhfcnhfc2dlCSpyeF9zZ2VfcmluZzsKKwlkbWFfYWRkcl90CQlyeF9zZ2VfbWFwcGluZzsKKworCXU2NAkJCXNnZV9tYXNrW1JYX1NHRV9NQVNLX0xFTl07CisKKwlpbnQJCQlzdGF0ZTsKKyNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfQ0xPU0VECQkwCisjZGVmaW5lIEJOWDJYX0ZQX1NUQVRFX0lSUQkJMHg4MDAwMAorI2RlZmluZSBCTlgyWF9GUF9TVEFURV9PUEVOSU5HCQkweDkwMDAwCisjZGVmaW5lIEJOWDJYX0ZQX1NUQVRFX09QRU4JCTB4YTAwMDAKKyNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfSEFMVElORwkJMHhiMDAwMAorI2RlZmluZSBCTlgyWF9GUF9TVEFURV9IQUxURUQJCTB4YzAwMDAKKworCXU4CQkJaW5kZXg7CS8qIG51bWJlciBpbiBmcCBhcnJheSAqLworCXU4CQkJY2xfaWQ7CS8qIGV0aCBjbGllbnQgaWQgKi8KKwl1OAkJCXNiX2lkOwkvKiBzdGF0dXMgYmxvY2sgbnVtYmVyIGluIEhXICovCisjZGVmaW5lIEZQX0lEWChmcCkJCQkoZnAtPmluZGV4KQorI2RlZmluZSBGUF9DTF9JRChmcCkJCQkoZnAtPmNsX2lkKQorI2RlZmluZSBCUF9DTF9JRChicCkJCQkoYnAtPmZwWzBdLmNsX2lkKQorI2RlZmluZSBGUF9TQl9JRChmcCkJCQkoZnAtPnNiX2lkKQorI2RlZmluZSBDTklDX1NCX0lECQkJMAorCisJdTE2CQkJdHhfcGt0X3Byb2Q7CisJdTE2CQkJdHhfcGt0X2NvbnM7CisJdTE2CQkJdHhfYmRfcHJvZDsKKwl1MTYJCQl0eF9iZF9jb25zOworCXUxNgkJCSp0eF9jb25zX3NiOworCisJdTE2CQkJZnBfY19pZHg7CisJdTE2CQkJZnBfdV9pZHg7CisKKwl1MTYJCQlyeF9iZF9wcm9kOworCXUxNgkJCXJ4X2JkX2NvbnM7CisJdTE2CQkJcnhfY29tcF9wcm9kOworCXUxNgkJCXJ4X2NvbXBfY29uczsKKwl1MTYJCQlyeF9zZ2VfcHJvZDsKKwkvKiBUaGUgbGFzdCBtYXhpbWFsIGNvbXBsZXRlZCBTR0UgKi8KKwl1MTYJCQlsYXN0X21heF9zZ2U7CisJdTE2CQkJKnJ4X2NvbnNfc2I7CisJdTE2CQkJKnJ4X2JkX2NvbnNfc2I7CisKKwl1bnNpZ25lZCBsb25nCQl0eF9wa3QsCisJCQkJcnhfcGt0LAorCQkJCXJ4X2NhbGxzLAorCQkJCXJ4X2FsbG9jX2ZhaWxlZDsKKwkvKiBUUEEgcmVsYXRlZCAqLworCXN0cnVjdCBzd19yeF9iZAkJdHBhX3Bvb2xbRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTFIXTsKKwl1OAkJCXRwYV9zdGF0ZVtFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUhdOworI2RlZmluZSBCTlgyWF9UUEFfU1RBUlQJCQkxCisjZGVmaW5lIEJOWDJYX1RQQV9TVE9QCQkJMgorCXU4CQkJZGlzYWJsZV90cGE7CisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCXU2NAkJCXRwYV9xdWV1ZV91c2VkOworI2VuZGlmCisKKwlzdHJ1Y3QgYm54MngJCSpicDsgLyogcGFyZW50ICovCiB9OwogCisjZGVmaW5lIGJueDJ4X2ZwKGJwLCBuciwgdmFyKQkJKGJwLT5mcFtucl0udmFyKQorCisKKy8qIE1DIGhzaSAqLworI2RlZmluZSBNQVhfRkVUQ0hfQkQJCQkxMwkvKiBIVyBtYXggQkRzIHBlciBwYWNrZXQgKi8KKyNkZWZpbmUgUlhfQ09QWV9USFJFU0gJCQk5MgorCisjZGVmaW5lIE5VTV9UWF9SSU5HUwkJCTE2CisjZGVmaW5lIFRYX0RFU0NfQ05UCQkoQkNNX1BBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSkKKyNkZWZpbmUgTUFYX1RYX0RFU0NfQ05UCQkJKFRYX0RFU0NfQ05UIC0gMSkKKyNkZWZpbmUgTlVNX1RYX0JECQkJKFRYX0RFU0NfQ05UICogTlVNX1RYX1JJTkdTKQorI2RlZmluZSBNQVhfVFhfQkQJCQkoTlVNX1RYX0JEIC0gMSkKKyNkZWZpbmUgTUFYX1RYX0FWQUlMCQkJKE1BWF9UWF9ERVNDX0NOVCAqIE5VTV9UWF9SSU5HUyAtIDIpCisjZGVmaW5lIE5FWFRfVFhfSURYKHgpCQkoKCgoeCkgJiBNQVhfVFhfREVTQ19DTlQpID09IFwKKwkJCQkgIChNQVhfVFhfREVTQ19DTlQgLSAxKSkgPyAoeCkgKyAyIDogKHgpICsgMSkKKyNkZWZpbmUgVFhfQkQoeCkJCQkoKHgpICYgTUFYX1RYX0JEKQorI2RlZmluZSBUWF9CRF9QT0ZGKHgpCQkJKCh4KSAmIE1BWF9UWF9ERVNDX0NOVCkKKworLyogVGhlIFJYIEJEIHJpbmcgaXMgc3BlY2lhbCwgZWFjaCBiZCBpcyA4IGJ5dGVzIGJ1dCB0aGUgbGFzdCBvbmUgaXMgMTYgKi8KKyNkZWZpbmUgTlVNX1JYX1JJTkdTCQkJOAorI2RlZmluZSBSWF9ERVNDX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkpCisjZGVmaW5lIE1BWF9SWF9ERVNDX0NOVAkJCShSWF9ERVNDX0NOVCAtIDIpCisjZGVmaW5lIFJYX0RFU0NfTUFTSwkJCShSWF9ERVNDX0NOVCAtIDEpCisjZGVmaW5lIE5VTV9SWF9CRAkJCShSWF9ERVNDX0NOVCAqIE5VTV9SWF9SSU5HUykKKyNkZWZpbmUgTUFYX1JYX0JECQkJKE5VTV9SWF9CRCAtIDEpCisjZGVmaW5lIE1BWF9SWF9BVkFJTAkJCShNQVhfUlhfREVTQ19DTlQgKiBOVU1fUlhfUklOR1MgLSAyKQorI2RlZmluZSBORVhUX1JYX0lEWCh4KQkJKCgoKHgpICYgUlhfREVTQ19NQVNLKSA9PSBcCisJCQkJICAoTUFYX1JYX0RFU0NfQ05UIC0gMSkpID8gKHgpICsgMyA6ICh4KSArIDEpCisjZGVmaW5lIFJYX0JEKHgpCQkJKCh4KSAmIE1BWF9SWF9CRCkKKworLyogQXMgbG9uZyBhcyBDUUUgaXMgNCB0aW1lcyBiaWdnZXIgdGhhbiBCRCBlbnRyeSB3ZSBoYXZlIHRvIGFsbG9jYXRlCisgICA0IHRpbWVzIG1vcmUgcGFnZXMgZm9yIENRIHJpbmcgaW4gb3JkZXIgdG8ga2VlcCBpdCBiYWxhbmNlZCB3aXRoCisgICBCRCByaW5nICovCisjZGVmaW5lIE5VTV9SQ1FfUklOR1MJCQkoTlVNX1JYX1JJTkdTICogNCkKKyNkZWZpbmUgUkNRX0RFU0NfQ05UCQkoQkNNX1BBR0VfU0laRSAvIHNpemVvZih1bmlvbiBldGhfcnhfY3FlKSkKKyNkZWZpbmUgTUFYX1JDUV9ERVNDX0NOVAkJKFJDUV9ERVNDX0NOVCAtIDEpCisjZGVmaW5lIE5VTV9SQ1FfQkQJCQkoUkNRX0RFU0NfQ05UICogTlVNX1JDUV9SSU5HUykKKyNkZWZpbmUgTUFYX1JDUV9CRAkJCShOVU1fUkNRX0JEIC0gMSkKKyNkZWZpbmUgTUFYX1JDUV9BVkFJTAkJCShNQVhfUkNRX0RFU0NfQ05UICogTlVNX1JDUV9SSU5HUyAtIDIpCisjZGVmaW5lIE5FWFRfUkNRX0lEWCh4KQkJKCgoKHgpICYgTUFYX1JDUV9ERVNDX0NOVCkgPT0gXAorCQkJCSAgKE1BWF9SQ1FfREVTQ19DTlQgLSAxKSkgPyAoeCkgKyAyIDogKHgpICsgMSkKKyNkZWZpbmUgUkNRX0JEKHgpCQkJKCh4KSAmIE1BWF9SQ1FfQkQpCisKKworLyogVGhpcyBpcyBuZWVkZWQgZm9yIGRldGVybWVuaW5nIG9mIGxhc3RfbWF4ICovCisjZGVmaW5lIFNVQl9TMTYoYSwgYikJCQkoczE2KSgoczE2KShhKSAtIChzMTYpKGIpKQorCisjZGVmaW5lIF9fU0dFX01BU0tfU0VUX0JJVChlbCwgYml0KSBcCisJZG8geyBcCisJCWVsID0gKChlbCkgfCAoKHU2NCkweDEgPDwgKGJpdCkpKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19TR0VfTUFTS19DTEVBUl9CSVQoZWwsIGJpdCkgXAorCWRvIHsgXAorCQllbCA9ICgoZWwpICYgKH4oKHU2NCkweDEgPDwgKGJpdCkpKSk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNHRV9NQVNLX1NFVF9CSVQoZnAsIGlkeCkgXAorCV9fU0dFX01BU0tfU0VUX0JJVChmcC0+c2dlX21hc2tbKGlkeCkgPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVF0sIFwKKwkJCSAgICgoaWR4KSAmIFJYX1NHRV9NQVNLX0VMRU1fTUFTSykpCisKKyNkZWZpbmUgU0dFX01BU0tfQ0xFQVJfQklUKGZwLCBpZHgpIFwKKwlfX1NHRV9NQVNLX0NMRUFSX0JJVChmcC0+c2dlX21hc2tbKGlkeCkgPj4gUlhfU0dFX01BU0tfRUxFTV9TSElGVF0sIFwKKwkJCSAgICAgKChpZHgpICYgUlhfU0dFX01BU0tfRUxFTV9NQVNLKSkKKworCisvKiB1c2VkIG9uIGEgQ0lEIHJlY2VpdmVkIGZyb20gdGhlIEhXICovCisjZGVmaW5lIFNXX0NJRCh4KQkJCShsZTMyX3RvX2NwdSh4KSAmIFwKKwkJCQkJIChDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ0lEID4+IDcpKQorI2RlZmluZSBDUUVfQ01EKHgpCQkJKGxlMzJfdG9fY3B1KHgpID4+IFwKKwkJCQkJQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NNRF9JRF9TSElGVCkKKworI2RlZmluZSBCRF9VTk1BUF9BRERSKGJkKQkJSElMT19VNjQobGUzMl90b19jcHUoKGJkKS0+YWRkcl9oaSksIFwKKwkJCQkJCSBsZTMyX3RvX2NwdSgoYmQpLT5hZGRyX2xvKSkKKyNkZWZpbmUgQkRfVU5NQVBfTEVOKGJkKQkJKGxlMTZfdG9fY3B1KChiZCktPm5ieXRlcykpCisKKworI2RlZmluZSBEUE1fVFJJR0VSX1RZUEUJCQkweDQwCisjZGVmaW5lIERPT1JCRUxMKGJwLCBjaWQsIHZhbCkgXAorCWRvIHsgXAorCQl3cml0ZWwoKHUzMil2YWwsIChicCktPmRvb3JiZWxscyArIChCQ01fUEFHRV9TSVpFICogY2lkKSArIFwKKwkJICAgICAgIERQTV9UUklHRVJfVFlQRSk7IFwKKwl9IHdoaWxlICgwKQorCisKKy8qIFRYIENTVU0gaGVscGVycyAqLworI2RlZmluZSBTS0JfQ1NfT0ZGKHNrYikJCShvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgLSBcCisJCQkJIHNrYi0+Y3N1bV9vZmZzZXQpCisjZGVmaW5lIFNLQl9DUyhza2IpCQkoKih1MTYgKikoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSArIFwKKwkJCQkJICBza2ItPmNzdW1fb2Zmc2V0KSkKKworI2RlZmluZSBwYmRfdGNwX2ZsYWdzKHNrYikJKG50b2hsKHRjcF9mbGFnX3dvcmQodGNwX2hkcihza2IpKSk+PjE2ICYgMHhmZikKKworI2RlZmluZSBYTUlUX1BMQUlOCQkJMAorI2RlZmluZSBYTUlUX0NTVU1fVjQJCQkweDEKKyNkZWZpbmUgWE1JVF9DU1VNX1Y2CQkJMHgyCisjZGVmaW5lIFhNSVRfQ1NVTV9UQ1AJCQkweDQKKyNkZWZpbmUgWE1JVF9HU09fVjQJCQkweDgKKyNkZWZpbmUgWE1JVF9HU09fVjYJCQkweDEwCisKKyNkZWZpbmUgWE1JVF9DU1VNCQkJKFhNSVRfQ1NVTV9WNCB8IFhNSVRfQ1NVTV9WNikKKyNkZWZpbmUgWE1JVF9HU08JCQkoWE1JVF9HU09fVjQgfCBYTUlUX0dTT19WNikKKworCisvKiBzdHVmZiBhZGRlZCB0byBtYWtlIHRoZSBjb2RlIGZpdCA4MENvbCAqLworCisjZGVmaW5lIENRRV9UWVBFKGNxZV9mcF9mbGFncykJKChjcWVfZnBfZmxhZ3MpICYgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfVFlQRSkKKworI2RlZmluZSBUUEFfVFlQRV9TVEFSVAkJCUVUSF9GQVNUX1BBVEhfUlhfQ1FFX1NUQVJUX0ZMRworI2RlZmluZSBUUEFfVFlQRV9FTkQJCQlFVEhfRkFTVF9QQVRIX1JYX0NRRV9FTkRfRkxHCisjZGVmaW5lIFRQQV9UWVBFKGNxZV9mcF9mbGFncykJCSgoY3FlX2ZwX2ZsYWdzKSAmIFwKKwkJCQkJIChUUEFfVFlQRV9TVEFSVCB8IFRQQV9UWVBFX0VORCkpCisKKyNkZWZpbmUgQk5YMlhfUlhfU1VNX09LKGNxZSkgXAorCQkJKCEoY3FlLT5mYXN0X3BhdGhfY3FlLnN0YXR1c19mbGFncyAmIFwKKwkJCSAoRVRIX0ZBU1RfUEFUSF9SWF9DUUVfSVBfWFNVTV9OT19WQUxJREFUSU9OX0ZMRyB8IFwKKwkJCSAgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfTDRfWFNVTV9OT19WQUxJREFUSU9OX0ZMRykpKQorCisjZGVmaW5lIEJOWDJYX1JYX1NVTV9GSVgoY3FlKSBcCisJCQkoKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKSAmIFwKKwkJCSAgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MKSA9PSBcCisJCQkgKDEgPDwgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MX1NISUZUKSkKKworI2RlZmluZSBFVEhfUlhfRVJST1JfRkFMR1MJKEVUSF9GQVNUX1BBVEhfUlhfQ1FFX1BIWV9ERUNPREVfRVJSX0ZMRyB8IFwKKwkJCQkgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfSVBfQkFEX1hTVU1fRkxHIHwgXAorCQkJCSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9MNF9CQURfWFNVTV9GTEcpCisKKworI2RlZmluZSBGUF9VU0JfRlVOQ19PRkYJCQkoMiArIDIqSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTKQorI2RlZmluZSBGUF9DU0JfRlVOQ19PRkYJCQkoMiArIDIqSENfQ1NUT1JNX1NCX05VTV9JTkRJQ0VTKQorCisjZGVmaW5lIFVfU0JfRVRIX1JYX0NRX0lOREVYCQlIQ19JTkRFWF9VX0VUSF9SWF9DUV9DT05TCisjZGVmaW5lIFVfU0JfRVRIX1JYX0JEX0lOREVYCQlIQ19JTkRFWF9VX0VUSF9SWF9CRF9DT05TCisjZGVmaW5lIENfU0JfRVRIX1RYX0NRX0lOREVYCQlIQ19JTkRFWF9DX0VUSF9UWF9DUV9DT05TCisKKyNkZWZpbmUgQk5YMlhfUlhfU0JfSU5ERVggXAorCSgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLmluZGV4X3ZhbHVlc1tVX1NCX0VUSF9SWF9DUV9JTkRFWF0pCisKKyNkZWZpbmUgQk5YMlhfUlhfU0JfQkRfSU5ERVggXAorCSgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLmluZGV4X3ZhbHVlc1tVX1NCX0VUSF9SWF9CRF9JTkRFWF0pCisKKyNkZWZpbmUgQk5YMlhfUlhfU0JfSU5ERVhfTlVNIFwKKwkJKCgoVV9TQl9FVEhfUlhfQ1FfSU5ERVggPDwgXAorCQkgICBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0NRRV9TQl9JTkRFWF9OVU1CRVJfU0hJRlQpICYgXAorCQkgIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfQ1FFX1NCX0lOREVYX05VTUJFUikgfCBcCisJCSAoKFVfU0JfRVRIX1JYX0JEX0lOREVYIDw8IFwKKwkJICAgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19CRF9TQl9JTkRFWF9OVU1CRVJfU0hJRlQpICYgXAorCQkgIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfQkRfU0JfSU5ERVhfTlVNQkVSKSkKKworI2RlZmluZSBCTlgyWF9UWF9TQl9JTkRFWCBcCisJKCZmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suaW5kZXhfdmFsdWVzW0NfU0JfRVRIX1RYX0NRX0lOREVYXSkKKworCisvKiBlbmQgb2YgZmFzdCBwYXRoICovCisKKy8qIGNvbW1vbiAqLworCitzdHJ1Y3QgYm54MnhfY29tbW9uIHsKKworCXUzMgkJCWNoaXBfaWQ7CisvKiBjaGlwIG51bToxNi0zMSwgcmV2OjEyLTE1LCBtZXRhbDo0LTExLCBib25kX2lkOjAtMyAqLworI2RlZmluZSBDSElQX0lEKGJwKQkJCShicC0+Y29tbW9uLmNoaXBfaWQgJiAweGZmZmZmZmYwKQorCisjZGVmaW5lIENISVBfTlVNKGJwKQkJCShicC0+Y29tbW9uLmNoaXBfaWQgPj4gMTYpCisjZGVmaW5lIENISVBfTlVNXzU3NzEwCQkJMHgxNjRlCisjZGVmaW5lIENISVBfTlVNXzU3NzExCQkJMHgxNjRmCisjZGVmaW5lIENISVBfTlVNXzU3NzExRQkJCTB4MTY1MAorI2RlZmluZSBDSElQX0lTX0UxKGJwKQkJCShDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTc3MTApCisjZGVmaW5lIENISVBfSVNfNTc3MTEoYnApCQkoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3NzExKQorI2RlZmluZSBDSElQX0lTXzU3NzExRShicCkJCShDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTc3MTFFKQorI2RlZmluZSBDSElQX0lTX0UxSChicCkJCQkoQ0hJUF9JU181NzcxMShicCkgfHwgXAorCQkJCQkgQ0hJUF9JU181NzcxMUUoYnApKQorI2RlZmluZSBJU19FMUhfT0ZGU0VUCQkJQ0hJUF9JU19FMUgoYnApCisKKyNkZWZpbmUgQ0hJUF9SRVYoYnApCQkJKGJwLT5jb21tb24uY2hpcF9pZCAmIDB4MDAwMGYwMDApCisjZGVmaW5lIENISVBfUkVWX0F4CQkJMHgwMDAwMDAwMAorLyogYXNzdW1lIG1heGltdW0gNSByZXZpc2lvbnMgKi8KKyNkZWZpbmUgQ0hJUF9SRVZfSVNfU0xPVyhicCkJCShDSElQX1JFVihicCkgPiAweDAwMDA1MDAwKQorLyogRW11bCB2ZXJzaW9ucyBhcmUgQT0+MHhlLCBCPT4weGMsIEM9PjB4YSwgRD0+OCwgRT0+NiAqLworI2RlZmluZSBDSElQX1JFVl9JU19FTVVMKGJwKQkJKChDSElQX1JFVl9JU19TTE9XKGJwKSkgJiYgXAorCQkJCQkgIShDSElQX1JFVihicCkgJiAweDAwMDAxMDAwKSkKKy8qIEZQR0EgdmVyc2lvbnMgYXJlIEE9PjB4ZiwgQj0+MHhkLCBDPT4weGIsIEQ9PjksIEU9PjcgKi8KKyNkZWZpbmUgQ0hJUF9SRVZfSVNfRlBHQShicCkJCSgoQ0hJUF9SRVZfSVNfU0xPVyhicCkpICYmIFwKKwkJCQkJIChDSElQX1JFVihicCkgJiAweDAwMDAxMDAwKSkKKworI2RlZmluZSBDSElQX1RJTUUoYnApCQkJKChDSElQX1JFVl9JU19FTVVMKGJwKSkgPyAyMDAwIDogXAorCQkJCQkoKENISVBfUkVWX0lTX0ZQR0EoYnApKSA/IDIwMCA6IDEpKQorCisjZGVmaW5lIENISVBfTUVUQUwoYnApCQkJKGJwLT5jb21tb24uY2hpcF9pZCAmIDB4MDAwMDBmZjApCisjZGVmaW5lIENISVBfQk9ORF9JRChicCkJCShicC0+Y29tbW9uLmNoaXBfaWQgJiAweDAwMDAwMDBmKQorCisJaW50CQkJZmxhc2hfc2l6ZTsKKyNkZWZpbmUgTlZSQU1fMU1CX1NJWkUJCQkweDIwMDAwCS8qIDFNIGJpdCBpbiBieXRlcyAqLworI2RlZmluZSBOVlJBTV9USU1FT1VUX0NPVU5UCQkzMDAwMAorI2RlZmluZSBOVlJBTV9QQUdFX1NJWkUJCQkyNTYKKworCXUzMgkJCXNobWVtX2Jhc2U7CisKKwl1MzIJCQlod19jb25maWc7CisJdTMyCQkJYm9hcmQ7CisKKwl1MzIJCQliY192ZXI7CisKKwljaGFyCQkJKm5hbWU7Cit9OworCisKKy8qIGVuZCBvZiBjb21tb24gKi8KKworLyogcG9ydCAqLworCiBzdHJ1Y3QgbmlnX3N0YXRzIHsKIAl1MzIgYnJiX2Rpc2NhcmQ7CiAJdTMyIGJyYl9wYWNrZXQ7CkBAIC0yNDQsMTMgKzQ5OSw1MyBAQAogCXUzMiBwYmZfb2N0ZXRzOwogCXUzMiBwYmZfcGFja2V0OwogCXUzMiBzYWZjX2lucDsKLQl1MzIgZG9uZTsKLQl1MzIgcGFkOworCXUzMiBlZ3Jlc3NfbWFjX3BrdDBfbG87CisJdTMyIGVncmVzc19tYWNfcGt0MF9oaTsKKwl1MzIgZWdyZXNzX21hY19wa3QxX2xvOworCXUzMiBlZ3Jlc3NfbWFjX3BrdDFfaGk7Cit9OworCitzdHJ1Y3QgYm54MnhfcG9ydCB7CisJdTMyCQkJcG1mOworCisJdTMyCQkJbGlua19jb25maWc7CisKKwl1MzIJCQlzdXBwb3J0ZWQ7CisvKiBsaW5rIHNldHRpbmdzIC0gbWlzc2luZyBkZWZpbmVzICovCisjZGVmaW5lIFNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbAkoMSA8PCAxNSkKKworCXUzMgkJCWFkdmVydGlzaW5nOworLyogbGluayBzZXR0aW5ncyAtIG1pc3NpbmcgZGVmaW5lcyAqLworI2RlZmluZSBBRFZFUlRJU0VEXzI1MDBiYXNlWF9GdWxsCSgxIDw8IDE1KQorCisJdTMyCQkJcGh5X2FkZHI7CisKKwkvKiB1c2VkIHRvIHN5bmNocm9uaXplIHBoeSBhY2Nlc3NlcyAqLworCXN0cnVjdCBtdXRleAkJcGh5X211dGV4OworCisJdTMyCQkJcG9ydF9zdHg7CisKKwlzdHJ1Y3QgbmlnX3N0YXRzCW9sZF9uaWdfc3RhdHM7Cit9OworCisvKiBlbmQgb2YgcG9ydCAqLworCisKK2VudW0gYm54Mnhfc3RhdHNfZXZlbnQgeworCVNUQVRTX0VWRU5UX1BNRiA9IDAsCisJU1RBVFNfRVZFTlRfTElOS19VUCwKKwlTVEFUU19FVkVOVF9VUERBVEUsCisJU1RBVFNfRVZFTlRfU1RPUCwKKwlTVEFUU19FVkVOVF9NQVgKK307CisKK2VudW0gYm54Mnhfc3RhdHNfc3RhdGUgeworCVNUQVRTX1NUQVRFX0RJU0FCTEVEID0gMCwKKwlTVEFUU19TVEFURV9FTkFCTEVELAorCVNUQVRTX1NUQVRFX01BWAogfTsKIAogc3RydWN0IGJueDJ4X2V0aF9zdGF0cyB7Ci0JdTMyIHBhZDsJLyogdG8gbWFrZSBsb25nIGNvdW50ZXJzIHU2NCBhbGlnbmVkICovCi0JdTMyIG1hY19zdHhfc3RhcnQ7CiAJdTMyIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpOwogCXUzMiB0b3RhbF9ieXRlc19yZWNlaXZlZF9sbzsKIAl1MzIgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGk7CkBAIC0yNjcsOTcgKzU2MiwxMTcgQEAKIAl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87CiAJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOwogCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKLQl1MzIgY3JjX3JlY2VpdmVfZXJyb3JzOwotCXUzMiBhbGlnbm1lbnRfZXJyb3JzOwotCXUzMiBmYWxzZV9jYXJyaWVyX2RldGVjdGlvbnM7Ci0JdTMyIHJ1bnRfcGFja2V0c19yZWNlaXZlZDsKLQl1MzIgamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQ7Ci0JdTMyIHBhdXNlX3hvbl9mcmFtZXNfcmVjZWl2ZWQ7Ci0JdTMyIHBhdXNlX3hvZmZfZnJhbWVzX3JlY2VpdmVkOwotCXUzMiBwYXVzZV94b25fZnJhbWVzX3RyYW5zbWl0dGVkOwotCXUzMiBwYXVzZV94b2ZmX2ZyYW1lc190cmFuc21pdHRlZDsKLQl1MzIgc2luZ2xlX2NvbGxpc2lvbl90cmFuc21pdF9mcmFtZXM7Ci0JdTMyIG11bHRpcGxlX2NvbGxpc2lvbl90cmFuc21pdF9mcmFtZXM7Ci0JdTMyIGxhdGVfY29sbGlzaW9uX2ZyYW1lczsKLQl1MzIgZXhjZXNzaXZlX2NvbGxpc2lvbl9mcmFtZXM7Ci0JdTMyIGNvbnRyb2xfZnJhbWVzX3JlY2VpdmVkOwotCXUzMiBmcmFtZXNfcmVjZWl2ZWRfNjRfYnl0ZXM7Ci0JdTMyIGZyYW1lc19yZWNlaXZlZF82NV8xMjdfYnl0ZXM7Ci0JdTMyIGZyYW1lc19yZWNlaXZlZF8xMjhfMjU1X2J5dGVzOwotCXUzMiBmcmFtZXNfcmVjZWl2ZWRfMjU2XzUxMV9ieXRlczsKLQl1MzIgZnJhbWVzX3JlY2VpdmVkXzUxMl8xMDIzX2J5dGVzOwotCXUzMiBmcmFtZXNfcmVjZWl2ZWRfMTAyNF8xNTIyX2J5dGVzOwotCXUzMiBmcmFtZXNfcmVjZWl2ZWRfMTUyM185MDIyX2J5dGVzOwotCXUzMiBmcmFtZXNfdHJhbnNtaXR0ZWRfNjRfYnl0ZXM7Ci0JdTMyIGZyYW1lc190cmFuc21pdHRlZF82NV8xMjdfYnl0ZXM7Ci0JdTMyIGZyYW1lc190cmFuc21pdHRlZF8xMjhfMjU1X2J5dGVzOwotCXUzMiBmcmFtZXNfdHJhbnNtaXR0ZWRfMjU2XzUxMV9ieXRlczsKLQl1MzIgZnJhbWVzX3RyYW5zbWl0dGVkXzUxMl8xMDIzX2J5dGVzOwotCXUzMiBmcmFtZXNfdHJhbnNtaXR0ZWRfMTAyNF8xNTIyX2J5dGVzOwotCXUzMiBmcmFtZXNfdHJhbnNtaXR0ZWRfMTUyM185MDIyX2J5dGVzOwogCXUzMiB2YWxpZF9ieXRlc19yZWNlaXZlZF9oaTsKIAl1MzIgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG87Ci0JdTMyIGVycm9yX3J1bnRfcGFja2V0c19yZWNlaXZlZDsKLQl1MzIgZXJyb3JfamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQ7Ci0JdTMyIG1hY19zdHhfZW5kOwogCi0JdTMyIHBhZDI7Ci0JdTMyIHN0YXRfSWZIQ0luQmFkT2N0ZXRzX2hpOwotCXUzMiBzdGF0X0lmSENJbkJhZE9jdGV0c19sbzsKLQl1MzIgc3RhdF9JZkhDT3V0QmFkT2N0ZXRzX2hpOwotCXUzMiBzdGF0X0lmSENPdXRCYWRPY3RldHNfbG87Ci0JdTMyIHN0YXRfRG90M3N0YXRzRnJhbWVzVG9vTG9uZzsKLQl1MzIgc3RhdF9Eb3Qzc3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzOwotCXUzMiBzdGF0X0RvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yczsKLQl1MzIgc3RhdF9Eb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnM7Ci0JdTMyIHN0YXRfRmxvd0NvbnRyb2xEb25lOwotCXUzMiBzdGF0X1hvZmZTdGF0ZUVudGVyZWQ7CisJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9sbzsKIAotCXUzMiB4X3RvdGFsX3NlbnRfYnl0ZXNfaGk7Ci0JdTMyIHhfdG90YWxfc2VudF9ieXRlc19sbzsKLQl1MzIgeF90b3RhbF9zZW50X3BrdHM7CisJdTMyIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2hpOworCXUzMiByeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19sbzsKKwl1MzIgdHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzX2hpOworCXUzMiB0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHNfbG87CisJdTMyIHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzX2hpOworCXUzMiByeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19sbzsKKwl1MzIgcnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfaGk7CisJdTMyIHJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2xvOworCXUzMiByeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9yc19oaTsKKwl1MzIgcnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfbG87CisJdTMyIHJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzX2hpOworCXUzMiByeF9zdGF0X2ZhbHNlY2FycmllcmVycm9yc19sbzsKKwl1MzIgcnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaTsKKwl1MzIgcnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19sbzsKKwl1MzIgcnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2hpOworCXUzMiByeF9zdGF0X2RvdDNzdGF0c2ZyYW1lc3Rvb2xvbmdfbG87CisJdTMyIHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50c19oaTsKKwl1MzIgcnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2xvOworCXUzMiByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzX2hpOworCXUzMiByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzX2xvOworCXUzMiByeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZF9oaTsKKwl1MzIgcnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWRfbG87CisJdTMyIHJ4X3N0YXRfYm1hY194cGZfaGk7CisJdTMyIHJ4X3N0YXRfYm1hY194cGZfbG87CisJdTMyIHJ4X3N0YXRfYm1hY194Y2ZfaGk7CisJdTMyIHJ4X3N0YXRfYm1hY194Y2ZfbG87CisJdTMyIHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZF9oaTsKKwl1MzIgcnhfc3RhdF94b2Zmc3RhdGVlbnRlcmVkX2xvOworCXUzMiByeF9zdGF0X3hvbnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGk7CisJdTMyIHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9sbzsKKwl1MzIgcnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9oaTsKKwl1MzIgcnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9sbzsKKwl1MzIgdHhfc3RhdF9vdXR4b25zZW50X2hpOworCXUzMiB0eF9zdGF0X291dHhvbnNlbnRfbG87CisJdTMyIHR4X3N0YXRfb3V0eG9mZnNlbnRfaGk7CisJdTMyIHR4X3N0YXRfb3V0eG9mZnNlbnRfbG87CisJdTMyIHR4X3N0YXRfZmxvd2NvbnRyb2xkb25lX2hpOworCXUzMiB0eF9zdGF0X2Zsb3djb250cm9sZG9uZV9sbzsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19oaTsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19sbzsKKwl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXNfaGk7CisJdTMyIHR4X3N0YXRfZG90M3N0YXRzc2luZ2xlY29sbGlzaW9uZnJhbWVzX2xvOworCXUzMiB0eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzX2hpOworCXUzMiB0eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzX2xvOworCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2RlZmVycmVkdHJhbnNtaXNzaW9uc19oaTsKKwl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnNfbG87CisJdTMyIHR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19oaTsKKwl1MzIgdHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2xvOworCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2hpOworCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfaGk7CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NG9jdGV0c19sbzsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHNfaGk7CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NW9jdGV0c3RvMTI3b2N0ZXRzX2xvOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHNfaGk7CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMjhvY3RldHN0bzI1NW9jdGV0c19sbzsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czI1Nm9jdGV0c3RvNTExb2N0ZXRzX2hpOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHNfbG87CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM1MTJvY3RldHN0bzEwMjNvY3RldHNfaGk7CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM1MTJvY3RldHN0bzEwMjNvY3RldHNfbG87CisJdTMyIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzX2hpOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19sbzsKKwl1MzIgdHhfc3RhdF9ldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2hpOworCXUzMiB0eF9zdGF0X2V0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfbG87CisJdTMyIHR4X3N0YXRfYm1hY18yMDQ3X2hpOworCXUzMiB0eF9zdGF0X2JtYWNfMjA0N19sbzsKKwl1MzIgdHhfc3RhdF9ibWFjXzQwOTVfaGk7CisJdTMyIHR4X3N0YXRfYm1hY180MDk1X2xvOworCXUzMiB0eF9zdGF0X2JtYWNfOTIxNl9oaTsKKwl1MzIgdHhfc3RhdF9ibWFjXzkyMTZfbG87CisJdTMyIHR4X3N0YXRfYm1hY18xNjM4M19oaTsKKwl1MzIgdHhfc3RhdF9ibWFjXzE2MzgzX2xvOworCXUzMiB0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfaGk7CisJdTMyIHR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19sbzsKKwl1MzIgdHhfc3RhdF9ibWFjX3VmbF9oaTsKKwl1MzIgdHhfc3RhdF9ibWFjX3VmbF9sbzsKIAotCXUzMiB0X3Jjdl91bmljYXN0X2J5dGVzX2hpOwotCXUzMiB0X3Jjdl91bmljYXN0X2J5dGVzX2xvOwotCXUzMiB0X3Jjdl9icm9hZGNhc3RfYnl0ZXNfaGk7Ci0JdTMyIHRfcmN2X2Jyb2FkY2FzdF9ieXRlc19sbzsKLQl1MzIgdF9yY3ZfbXVsdGljYXN0X2J5dGVzX2hpOwotCXUzMiB0X3Jjdl9tdWx0aWNhc3RfYnl0ZXNfbG87Ci0JdTMyIHRfdG90YWxfcmN2X3BrdDsKKwl1MzIgYnJiX2Ryb3BfaGk7CisJdTMyIGJyYl9kcm9wX2xvOwogCi0JdTMyIGNoZWNrc3VtX2Rpc2NhcmQ7Ci0JdTMyIHBhY2tldHNfdG9vX2JpZ19kaXNjYXJkOworCXUzMiBqYWJiZXJfcGFja2V0c19yZWNlaXZlZDsKKworCXUzMiBldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfaGk7CisJdTMyIGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19sbzsKKwl1MzIgZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19oaTsKKwl1MzIgZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19sbzsKKwogCXUzMiBub19idWZmX2Rpc2NhcmQ7Ci0JdTMyIHR0bDBfZGlzY2FyZDsKLQl1MzIgbWFjX2Rpc2NhcmQ7CisKIAl1MzIgbWFjX2ZpbHRlcl9kaXNjYXJkOwogCXUzMiB4eG92ZXJmbG93X2Rpc2NhcmQ7CiAJdTMyIGJyYl90cnVuY2F0ZV9kaXNjYXJkOworCXUzMiBtYWNfZGlzY2FyZDsKIAotCXUzMiBicmJfZGlzY2FyZDsKLQl1MzIgYnJiX3BhY2tldDsKLQl1MzIgYnJiX3RydW5jYXRlOwotCXUzMiBmbG93X2N0cmxfZGlzY2FyZDsKLQl1MzIgZmxvd19jdHJsX29jdGV0czsKLQl1MzIgZmxvd19jdHJsX3BhY2tldDsKLQl1MzIgbW5nX2Rpc2NhcmQ7Ci0JdTMyIG1uZ19vY3RldF9pbnA7Ci0JdTMyIG1uZ19vY3RldF9vdXQ7Ci0JdTMyIG1uZ19wYWNrZXRfaW5wOwotCXUzMiBtbmdfcGFja2V0X291dDsKLQl1MzIgcGJmX29jdGV0czsKLQl1MzIgcGJmX3BhY2tldDsKLQl1MzIgc2FmY19pbnA7CiAJdTMyIGRyaXZlcl94b2ZmOwotCXUzMiBudW1iZXJfb2ZfYnVnc19mb3VuZF9pbl9zdGF0c19zcGVjOyAvKiBqdXN0IGtpZGRpbmcgKi8KIH07CiAKLSNkZWZpbmUgTUFDX1NUWF9OQSAgICAgIAkJMHhmZmZmZmZmZgorI2RlZmluZSBTVEFUU19PRkZTRVQzMihzdGF0X25hbWUpIFwKKwkJCShvZmZzZXRvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKKwogCiAjaWZkZWYgQk5YMlhfTVVMVEkKLSNkZWZpbmUgTUFYX0NPTlRFWFQgICAgIAkJMTYKKyNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxNgogI2Vsc2UKLSNkZWZpbmUgTUFYX0NPTlRFWFQgICAgIAkJMQorI2RlZmluZSBNQVhfQ09OVEVYVAkJCTEKICNlbmRpZgogCiB1bmlvbiBjZHVfY29udGV4dCB7CkBAIC0zNjUsMzQ1ICs2ODAsMTkxIEBACiAJY2hhciBwYWRbMTAyNF07CiB9OwogCi0jZGVmaW5lIE1BWF9ETUFFX0MgICAgICAJCTUKKyNkZWZpbmUgTUFYX0RNQUVfQwkJCTgKIAogLyogRE1BIG1lbW9yeSBub3QgdXNlZCBpbiBmYXN0cGF0aCAqLwogc3RydWN0IGJueDJ4X3Nsb3dwYXRoIHsKLQl1bmlvbiBjZHVfY29udGV4dCAgICAgICAJY29udGV4dFtNQVhfQ09OVEVYVF07Ci0Jc3RydWN0IGV0aF9zdGF0c19xdWVyeSAgCWZ3X3N0YXRzOwotCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgICAgbWFjX2NvbmZpZzsKLQlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kICAgIG1jYXN0X2NvbmZpZzsKKwl1bmlvbiBjZHVfY29udGV4dAkJY29udGV4dFtNQVhfQ09OVEVYVF07CisJc3RydWN0IGV0aF9zdGF0c19xdWVyeQkJZndfc3RhdHM7CisJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZAltYWNfY29uZmlnOworCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQJbWNhc3RfY29uZmlnOwogCiAJLyogdXNlZCBieSBkbWFlIGNvbW1hbmQgZXhlY3V0ZXIgKi8KLQlzdHJ1Y3QgZG1hZV9jb21tYW5kICAgICAJZG1hZVtNQVhfRE1BRV9DXTsKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kCQlkbWFlW01BWF9ETUFFX0NdOwogCi0JdW5pb24gbWFjX3N0YXRzIAkJbWFjX3N0YXRzOwotCXN0cnVjdCBuaWdfc3RhdHMJCW5pZzsKLQlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICAJZXRoX3N0YXRzOworCXUzMgkJCQlzdGF0c19jb21wOworCXVuaW9uIG1hY19zdGF0cwkJCW1hY19zdGF0czsKKwlzdHJ1Y3QgbmlnX3N0YXRzCQluaWdfc3RhdHM7CisJc3RydWN0IGhvc3RfcG9ydF9zdGF0cwkJcG9ydF9zdGF0czsKKwlzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzCQlmdW5jX3N0YXRzOwogCi0JdTMyICAgICAJCQl3Yl9jb21wOwotI2RlZmluZSBCTlgyWF9XQl9DT01QX1ZBTCAgICAgICAJMHhlMGQwZDBhZQotCXUzMiAgICAgCQkJd2JfZGF0YVs0XTsKKwl1MzIJCQkJd2JfY29tcDsKKwl1MzIJCQkJd2JfZGF0YVs0XTsKIH07CiAKLSNkZWZpbmUgYm54Mnhfc3AoYnAsIHZhcikgICAgICAgCSgmYnAtPnNsb3dwYXRoLT52YXIpCi0jZGVmaW5lIGJueDJ4X3NwX2NoZWNrKGJwLCB2YXIpICgoYnAtPnNsb3dwYXRoKSA/ICgmYnAtPnNsb3dwYXRoLT52YXIpIDogTlVMTCkKKyNkZWZpbmUgYm54Mnhfc3AoYnAsIHZhcikJCSgmYnAtPnNsb3dwYXRoLT52YXIpCiAjZGVmaW5lIGJueDJ4X3NwX21hcHBpbmcoYnAsIHZhcikgXAogCQkoYnAtPnNsb3dwYXRoX21hcHBpbmcgKyBvZmZzZXRvZihzdHJ1Y3QgYm54Mnhfc2xvd3BhdGgsIHZhcikpCiAKIAotc3RydWN0IHN3X3J4X2JkIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAgKnNrYjsKLQlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpCi19OwotCi1zdHJ1Y3Qgc3dfdHhfYmQgewotCXN0cnVjdCBza19idWZmICAqc2tiOwotCXUxNiAgICAgCWZpcnN0X2JkOwotfTsKLQotc3RydWN0IGJueDJ4X2Zhc3RwYXRoIHsKLQotCXN0cnVjdCBuYXBpX3N0cnVjdCAgICAgIG5hcGk7Ci0KLQlzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2sgKnN0YXR1c19ibGs7Ci0JZG1hX2FkZHJfdCAgICAgIAlzdGF0dXNfYmxrX21hcHBpbmc7Ci0KLQlzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEgICAqaHdfdHhfcHJvZHM7Ci0JZG1hX2FkZHJfdCAgICAgIAl0eF9wcm9kc19tYXBwaW5nOwotCi0Jc3RydWN0IHN3X3R4X2JkIAkqdHhfYnVmX3Jpbmc7Ci0KLQlzdHJ1Y3QgZXRoX3R4X2JkCSp0eF9kZXNjX3Jpbmc7Ci0JZG1hX2FkZHJfdCAgICAgIAl0eF9kZXNjX21hcHBpbmc7Ci0KLQlzdHJ1Y3Qgc3dfcnhfYmQgCSpyeF9idWZfcmluZzsKLQotCXN0cnVjdCBldGhfcnhfYmQJKnJ4X2Rlc2NfcmluZzsKLQlkbWFfYWRkcl90ICAgICAgCXJ4X2Rlc2NfbWFwcGluZzsKLQotCXVuaW9uIGV0aF9yeF9jcWUJKnJ4X2NvbXBfcmluZzsKLQlkbWFfYWRkcl90ICAgICAgCXJ4X2NvbXBfbWFwcGluZzsKLQotCWludCAgICAgCQlzdGF0ZTsKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfQ0xPU0VEICAgCTAKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfSVJRICAgICAgCTB4ODAwMDAKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfT1BFTklORyAgCTB4OTAwMDAKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfT1BFTiAgICAgCTB4YTAwMDAKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfSEFMVElORyAgCTB4YjAwMDAKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfSEFMVEVEICAgCTB4YzAwMDAKLQotCWludCAgICAgCQlpbmRleDsKLQotCXUxNiAgICAgCQl0eF9wa3RfcHJvZDsKLQl1MTYgICAgIAkJdHhfcGt0X2NvbnM7Ci0JdTE2ICAgICAJCXR4X2JkX3Byb2Q7Ci0JdTE2ICAgICAJCXR4X2JkX2NvbnM7Ci0JdTE2ICAgICAJCSp0eF9jb25zX3NiOwotCi0JdTE2ICAgICAJCWZwX2NfaWR4OwotCXUxNiAgICAgCQlmcF91X2lkeDsKLQotCXUxNiAgICAgCQlyeF9iZF9wcm9kOwotCXUxNiAgICAgCQlyeF9iZF9jb25zOwotCXUxNiAgICAgCQlyeF9jb21wX3Byb2Q7Ci0JdTE2ICAgICAJCXJ4X2NvbXBfY29uczsKLQl1MTYgICAgIAkJKnJ4X2NvbnNfc2I7Ci0KLQl1bnNpZ25lZCBsb25nICAgCXR4X3BrdCwKLQkJCQlyeF9wa3QsCi0JCQkJcnhfY2FsbHM7Ci0KLQlzdHJ1Y3QgYm54MnggICAgCSpicDsgLyogcGFyZW50ICovCi19OwotCi0jZGVmaW5lIGJueDJ4X2ZwKGJwLCBuciwgdmFyKSAgIAkoYnAtPmZwW25yXS52YXIpCi0KLQogLyogYXR0biBncm91cCB3aXJpbmcgKi8KLSNkZWZpbmUgTUFYX0RZTkFNSUNfQVRUTl9HUlBTICAgCTgKKyNkZWZpbmUgTUFYX0RZTkFNSUNfQVRUTl9HUlBTCQk4CiAKIHN0cnVjdCBhdHRuX3JvdXRlIHsKLQl1MzIgICAgIHNpZ1s0XTsKKwl1MzIJc2lnWzRdOwogfTsKIAogc3RydWN0IGJueDJ4IHsKIAkvKiBGaWVsZHMgdXNlZCBpbiB0aGUgdHggYW5kIGludHIvbmFwaSBwZXJmb3JtYW5jZSBwYXRocwogCSAqIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cnVjdHVyZQogCSAqLwotCXN0cnVjdCBibngyeF9mYXN0cGF0aCAgICpmcDsKLQl2b2lkIF9faW9tZW0gICAgCSpyZWd2aWV3OwotCXZvaWQgX19pb21lbSAgICAJKmRvb3JiZWxsczsKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGgJZnBbTUFYX0NPTlRFWFRdOworCXZvaWQgX19pb21lbQkJKnJlZ3ZpZXc7CisJdm9pZCBfX2lvbWVtCQkqZG9vcmJlbGxzOworI2RlZmluZSBCTlgyWF9EQl9TSVpFCQkoMTYqMjA0OCkKIAotCXN0cnVjdCBuZXRfZGV2aWNlICAgICAgICpkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgIAkqcGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKIAogCWF0b21pY190CQlpbnRyX3NlbTsKLQlzdHJ1Y3QgbXNpeF9lbnRyeSAgICAgICBtc2l4X3RhYmxlW01BWF9DT05URVhUKzFdOworCXN0cnVjdCBtc2l4X2VudHJ5CW1zaXhfdGFibGVbTUFYX0NPTlRFWFQrMV07CiAKLQlpbnQgICAgIAkJdHhfcmluZ19zaXplOworCWludAkJCXR4X3Jpbmdfc2l6ZTsKIAogI2lmZGVmIEJDTV9WTEFOCi0Jc3RydWN0IHZsYW5fZ3JvdXAgICAgICAgKnZsZ3JwOworCXN0cnVjdCB2bGFuX2dyb3VwCSp2bGdycDsKICNlbmRpZgogCi0JdTMyICAgICAJCXJ4X2NzdW07Ci0JdTMyICAgICAJCXJ4X29mZnNldDsKLQl1MzIgICAgIAkJcnhfYnVmX3VzZV9zaXplOwkvKiB1c2VhYmxlIHNpemUgKi8KLQl1MzIgICAgIAkJcnhfYnVmX3NpemU7ICAgIAkvKiB3aXRoIGFsaWdubWVudCAqLwotI2RlZmluZSBFVEhfT1ZSRUhFQUQgICAgCQkoRVRIX0hMRU4gKyA4KSAgLyogOCBmb3IgQ1JDICsgVkxBTiAqLwotI2RlZmluZSBFVEhfTUlOX1BBQ0tFVF9TSVpFICAgICAJNjAKLSNkZWZpbmUgRVRIX01BWF9QQUNLRVRfU0laRSAgICAgCTE1MDAKLSNkZWZpbmUgRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSAgICAgICA5NjAwCisJdTMyCQkJcnhfY3N1bTsKKwl1MzIJCQlyeF9vZmZzZXQ7CisJdTMyCQkJcnhfYnVmX3VzZV9zaXplOwkvKiB1c2VhYmxlIHNpemUgKi8KKwl1MzIJCQlyeF9idWZfc2l6ZTsJCS8qIHdpdGggYWxpZ25tZW50ICovCisjZGVmaW5lIEVUSF9PVlJFSEVBRAkJCShFVEhfSExFTiArIDgpCS8qIDggZm9yIENSQyArIFZMQU4gKi8KKyNkZWZpbmUgRVRIX01JTl9QQUNLRVRfU0laRQkJNjAKKyNkZWZpbmUgRVRIX01BWF9QQUNLRVRfU0laRQkJMTUwMAorI2RlZmluZSBFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFCTk2MDAKIAogCXN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2sgKmRlZl9zdGF0dXNfYmxrOwotI2RlZmluZSBERUZfU0JfSUQgICAgICAgCTE2Ci0JdTE2ICAgICAJCWRlZl9jX2lkeDsKLQl1MTYgICAgIAkJZGVmX3VfaWR4OwotCXUxNiAgICAgCQlkZWZfdF9pZHg7Ci0JdTE2ICAgICAJCWRlZl94X2lkeDsKLQl1MTYgICAgIAkJZGVmX2F0dF9pZHg7Ci0JdTMyICAgICAJCWF0dG5fc3RhdGU7Ci0Jc3RydWN0IGF0dG5fcm91dGUgICAgICAgYXR0bl9ncm91cFtNQVhfRFlOQU1JQ19BVFROX0dSUFNdOwotCXUzMiAgICAgCQlhZXVfbWFzazsKLQl1MzIgICAgIAkJbmlnX21hc2s7CisjZGVmaW5lIERFRl9TQl9JRAkJCTE2CisJdTE2CQkJZGVmX2NfaWR4OworCXUxNgkJCWRlZl91X2lkeDsKKwl1MTYJCQlkZWZfeF9pZHg7CisJdTE2CQkJZGVmX3RfaWR4OworCXUxNgkJCWRlZl9hdHRfaWR4OworCXUzMgkJCWF0dG5fc3RhdGU7CisJc3RydWN0IGF0dG5fcm91dGUJYXR0bl9ncm91cFtNQVhfRFlOQU1JQ19BVFROX0dSUFNdOworCXUzMgkJCWFldV9tYXNrOworCXUzMgkJCW5pZ19tYXNrOwogCiAJLyogc2xvdyBwYXRoIHJpbmcgKi8KLQlzdHJ1Y3QgZXRoX3NwZSAgCSpzcHE7Ci0JZG1hX2FkZHJfdCAgICAgIAlzcHFfbWFwcGluZzsKLQl1MTYgICAgIAkJc3BxX3Byb2RfaWR4OwotCXN0cnVjdCBldGhfc3BlICAJKnNwcV9wcm9kX2JkOwotCXN0cnVjdCBldGhfc3BlICAJKnNwcV9sYXN0X2JkOwotCXUxNiAgICAgCQkqZHNiX3NwX3Byb2Q7Ci0JdTE2ICAgICAJCXNwcV9sZWZ0OyAvKiBzZXJpYWxpemUgc3BxICovCi0Jc3BpbmxvY2tfdCAgICAgIAlzcHFfbG9jazsKKwlzdHJ1Y3QgZXRoX3NwZQkJKnNwcTsKKwlkbWFfYWRkcl90CQlzcHFfbWFwcGluZzsKKwl1MTYJCQlzcHFfcHJvZF9pZHg7CisJc3RydWN0IGV0aF9zcGUJCSpzcHFfcHJvZF9iZDsKKwlzdHJ1Y3QgZXRoX3NwZQkJKnNwcV9sYXN0X2JkOworCXUxNgkJCSpkc2Jfc3BfcHJvZDsKKwl1MTYJCQlzcHFfbGVmdDsgLyogc2VyaWFsaXplIHNwcSAqLworCS8qIHVzZWQgdG8gc3luY2hyb25pemUgc3BxIGFjY2Vzc2VzICovCisJc3BpbmxvY2tfdAkJc3BxX2xvY2s7CiAKLQkvKiBGbGFnIGZvciBtYXJraW5nIHRoYXQgdGhlcmUgaXMgZWl0aGVyCi0JICogU1RBVF9RVUVSWSBvciBDRkMgREVMRVRFIHJhbXJvZCBwZW5kaW5nCi0JICovCi0JdTggICAgICAJCXN0YXRfcGVuZGluZzsKKwkvKiBGbGFncyBmb3IgbWFya2luZyB0aGF0IHRoZXJlIGlzIGEgU1RBVF9RVUVSWSBvcgorCSAgIFNFVF9NQUMgcmFtcm9kIHBlbmRpbmcgKi8KKwl1OAkJCXN0YXRzX3BlbmRpbmc7CisJdTgJCQlzZXRfbWFjX3BlbmRpbmc7CiAKLQkvKiBFbmQgb2YgZmllbGRzIHVzZWQgaW4gdGhlIHBlcmZvcm1hbmNlIGNvZGUgcGF0aHMgKi8KKwkvKiBFbmQgb2YgZmlsZWRzIHVzZWQgaW4gdGhlIHBlcmZvcm1hbmNlIGNvZGUgcGF0aHMgKi8KIAotCWludCAgICAgCQlwYW5pYzsKLQlpbnQgICAgIAkJbXNnbGV2ZWw7CisJaW50CQkJcGFuaWM7CisJaW50CQkJbXNnbGV2ZWw7CiAKLQl1MzIgICAgIAkJZmxhZ3M7Ci0jZGVmaW5lIFBDSVhfRkxBRyAgICAgICAJCTEKLSNkZWZpbmUgUENJXzMyQklUX0ZMQUcgIAkJMgotI2RlZmluZSBPTkVfVERNQV9GTEFHICAgCQk0ICAgICAgIC8qIG5vIGxvbmdlciB1c2VkICovCi0jZGVmaW5lIE5PX1dPTF9GTEFHICAgICAJCTgKLSNkZWZpbmUgVVNJTkdfREFDX0ZMQUcgIAkJMHgxMAotI2RlZmluZSBVU0lOR19NU0lYX0ZMQUcgCQkweDIwCi0jZGVmaW5lIEFTRl9FTkFCTEVfRkxBRyAJCTB4NDAKKwl1MzIJCQlmbGFnczsKKyNkZWZpbmUgUENJWF9GTEFHCQkJMQorI2RlZmluZSBQQ0lfMzJCSVRfRkxBRwkJCTIKKyNkZWZpbmUgT05FX1RETUFfRkxBRwkJCTQJLyogbm8gbG9uZ2VyIHVzZWQgKi8KKyNkZWZpbmUgTk9fV09MX0ZMQUcJCQk4CisjZGVmaW5lIFVTSU5HX0RBQ19GTEFHCQkJMHgxMAorI2RlZmluZSBVU0lOR19NU0lYX0ZMQUcJCQkweDIwCisjZGVmaW5lIEFTRl9FTkFCTEVfRkxBRwkJCTB4NDAKKyNkZWZpbmUgVFBBX0VOQUJMRV9GTEFHCQkJMHg4MAorI2RlZmluZSBOT19NQ1BfRkxBRwkJCTB4MTAwCisjZGVmaW5lIEJQX05PTUNQKGJwKQkJCShicC0+ZmxhZ3MgJiBOT19NQ1BfRkxBRykKIAotCWludCAgICAgCQlwb3J0OworCWludAkJCWZ1bmM7CisjZGVmaW5lIEJQX1BPUlQoYnApCQkJKGJwLT5mdW5jICUgUE9SVF9NQVgpCisjZGVmaW5lIEJQX0ZVTkMoYnApCQkJKGJwLT5mdW5jKQorI2RlZmluZSBCUF9FMUhWTihicCkJCQkoYnAtPmZ1bmMgPj4gMSkKKyNkZWZpbmUgQlBfTF9JRChicCkJCQkoQlBfRTFIVk4oYnApIDw8IDIpCisvKiBhc3NvcnRlZCBFMUhWTiAqLworI2RlZmluZSBJU19FMUhNRihicCkJCQkoYnAtPmUxaG1mICE9IDApCisjZGVmaW5lIEJQX01BWF9RVUVVRVMoYnApCQkoSVNfRTFITUYoYnApID8gNCA6IDE2KQogCi0JaW50ICAgICAJCXBtX2NhcDsKLQlpbnQgICAgIAkJcGNpZV9jYXA7CisJaW50CQkJcG1fY2FwOworCWludAkJCXBjaWVfY2FwOwogCi0JLyogVXNlZCB0byBzeW5jaHJvbml6ZSBwaHkgYWNjZXNzZXMgKi8KLQlzcGlubG9ja190ICAgICAgCXBoeV9sb2NrOworCXN0cnVjdCB3b3JrX3N0cnVjdAlzcF90YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdAlyZXNldF90YXNrOwogCi0Jc3RydWN0IHdvcmtfc3RydWN0ICAgICAgcmVzZXRfdGFzazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBzcF90YXNrOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCWludAkJCXRpbWVyX2ludGVydmFsOworCWludAkJCWN1cnJlbnRfaW50ZXJ2YWw7CiAKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICB0aW1lcjsKLQlpbnQgICAgIAkJdGltZXJfaW50ZXJ2YWw7Ci0JaW50ICAgICAJCWN1cnJlbnRfaW50ZXJ2YWw7CisJdTE2CQkJZndfc2VxOworCXUxNgkJCWZ3X2Rydl9wdWxzZV93cl9zZXE7CisJdTMyCQkJZnVuY19zdHg7CiAKLQl1MzIgICAgIAkJc2htZW1fYmFzZTsKKwlzdHJ1Y3QgbGlua19wYXJhbXMJbGlua19wYXJhbXM7CisJc3RydWN0IGxpbmtfdmFycwlsaW5rX3ZhcnM7CiAKLQl1MzIgICAgIAkJY2hpcF9pZDsKLS8qIGNoaXAgbnVtOjE2LTMxLCByZXY6MTItMTUsIG1ldGFsOjQtMTEsIGJvbmRfaWQ6MC0zICovCi0jZGVmaW5lIENISVBfSUQoYnApICAgICAJCSgoKGJwKS0+Y2hpcF9pZCkgJiAweGZmZmZmZmYwKQorCXN0cnVjdCBibngyeF9jb21tb24JY29tbW9uOworCXN0cnVjdCBibngyeF9wb3J0CXBvcnQ7CiAKLSNkZWZpbmUgQ0hJUF9OVU0oYnApICAgIAkJKCgoYnApLT5jaGlwX2lkKSAmIDB4ZmZmZjAwMDApCi0KLSNkZWZpbmUgQ0hJUF9SRVYoYnApICAgIAkJKCgoYnApLT5jaGlwX2lkKSAmIDB4MDAwMGYwMDApCi0jZGVmaW5lIENISVBfUkVWX0F4ICAgICAJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ0hJUF9SRVZfQnggICAgIAkJMHgwMDAwMTAwMAotI2RlZmluZSBDSElQX1JFVl9DeCAgICAgCQkweDAwMDAyMDAwCi0jZGVmaW5lIENISVBfUkVWX0VNVUwgICAJCTB4MDAwMGUwMDAKLSNkZWZpbmUgQ0hJUF9SRVZfRlBHQSAgIAkJMHgwMDAwZjAwMAotI2RlZmluZSBDSElQX1JFVl9JU19TTE9XKGJwKSAgICAJKChDSElQX1JFVihicCkgPT0gQ0hJUF9SRVZfRU1VTCkgfHwgXAotCQkJCQkgKENISVBfUkVWKGJwKSA9PSBDSElQX1JFVl9GUEdBKSkKLQotI2RlZmluZSBDSElQX01FVEFMKGJwKSAgCQkoKChicCktPmNoaXBfaWQpICYgMHgwMDAwMGZmMCkKLSNkZWZpbmUgQ0hJUF9CT05EX0lEKGJwKQkJKCgoYnApLT5jaGlwX2lkKSAmIDB4MDAwMDAwMGYpCi0KLQl1MTYgICAgIAkJZndfc2VxOwotCXUxNiAgICAgCQlmd19kcnZfcHVsc2Vfd3Jfc2VxOwotCXUzMiAgICAgCQlmd19tYjsKLQotCXUzMiAgICAgCQlod19jb25maWc7Ci0JdTMyCQkJYm9hcmQ7Ci0JdTMyCQkJc2VyZGVzX2NvbmZpZzsKLQl1MzIgICAgIAkJbGFuZV9jb25maWc7Ci0JdTMyICAgICAJCWV4dF9waHlfY29uZmlnOwotI2RlZmluZSBYR1hTX0VYVF9QSFlfVFlQRShicCkgICAJKGJwLT5leHRfcGh5X2NvbmZpZyAmIFwKLQkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0spCi0jZGVmaW5lIFNFUkRFU19FWFRfUEhZX1RZUEUoYnApIAkoYnAtPmV4dF9waHlfY29uZmlnICYgXAotCQkJCQkgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9NQVNLKQotCi0JdTMyICAgICAJCXNwZWVkX2NhcF9tYXNrOwotCXUzMiAgICAgCQlsaW5rX2NvbmZpZzsKLSNkZWZpbmUgU1dJVENIX0NGR18xRyAgIAkJUE9SVF9GRUFUVVJFX0NPTl9TV0lUQ0hfMUdfU1dJVENICi0jZGVmaW5lIFNXSVRDSF9DRkdfMTBHICAJCVBPUlRfRkVBVFVSRV9DT05fU1dJVENIXzEwR19TV0lUQ0gKLSNkZWZpbmUgU1dJVENIX0NGR19BVVRPX0RFVEVDVCAgCVBPUlRfRkVBVFVSRV9DT05fU1dJVENIX0FVVE9fREVURUNUCi0jZGVmaW5lIFNXSVRDSF9DRkdfT05FX1RJTUVfREVURUNUICAgICAgXAotCQkJCVBPUlRfRkVBVFVSRV9DT05fU1dJVENIX09ORV9USU1FX0RFVEVDVAotCi0JdTggICAgICAJCXNlcl9sYW5lOwotCXU4ICAgICAgCQlyeF9sYW5lX3N3YXA7Ci0JdTggICAgICAJCXR4X2xhbmVfc3dhcDsKLQotCXU4ICAgICAgCQlsaW5rX3VwOwotCXU4CQkJcGh5X2xpbmtfdXA7Ci0KLQl1MzIgICAgIAkJc3VwcG9ydGVkOwotLyogbGluayBzZXR0aW5ncyAtIG1pc3NpbmcgZGVmaW5lcyAqLwotI2RlZmluZSBTVVBQT1JURURfMjUwMGJhc2VUX0Z1bGwJKDEgPDwgMTUpCi0KLQl1MzIgICAgIAkJcGh5X2ZsYWdzOwotLyojZGVmaW5lIFBIWV9TRVJERVNfRkxBRyAgICAgICAJCTB4MSovCi0jZGVmaW5lIFBIWV9CTUFDX0ZMQUcgICAJCTB4MgotI2RlZmluZSBQSFlfRU1BQ19GTEFHICAgCQkweDQKLSNkZWZpbmUgUEhZX1hHWFNfRkxBRyAgIAkJMHg4Ci0jZGVmaW5lIFBIWV9TR01JSV9GTEFHICAJCTB4MTAKLSNkZWZpbmUgUEhZX0lOVF9NT0RFX01BU0tfRkxBRyAgCTB4MzAwCi0jZGVmaW5lIFBIWV9JTlRfTU9ERV9BVVRPX1BPTExJTkdfRkxBRyAgMHgxMDAKLSNkZWZpbmUgUEhZX0lOVF9NT0RFX0xJTktfUkVBRFlfRkxBRyAgICAweDIwMAotCi0JdTMyICAgICAJCXBoeV9hZGRyOwotCXUzMiAgICAgCQlwaHlfaWQ7Ci0KLQl1MzIgICAgIAkJYXV0b25lZzsKLSNkZWZpbmUgQVVUT05FR19DTDM3ICAgIAkJU0hBUkVEX0hXX0NGR19BTl9FTkFCTEVfQ0wzNwotI2RlZmluZSBBVVRPTkVHX0NMNzMgICAgCQlTSEFSRURfSFdfQ0ZHX0FOX0VOQUJMRV9DTDczCi0jZGVmaW5lIEFVVE9ORUdfQkFNICAgICAJCVNIQVJFRF9IV19DRkdfQU5fRU5BQkxFX0JBTQotI2RlZmluZSBBVVRPTkVHX1BBUkFMTEVMCQlcCi0JCQkJU0hBUkVEX0hXX0NGR19BTl9FTkFCTEVfUEFSQUxMRUxfREVURUNUSU9OCi0jZGVmaW5lIEFVVE9ORUdfU0dNSUlfRklCRVJfQVVUT0RFVCAgICAgXAotCQkJCVNIQVJFRF9IV19DRkdfQU5fRU5fU0dNSUlfRklCRVJfQVVUT19ERVRFQ1QKLSNkZWZpbmUgQVVUT05FR19SRU1PVEVfUEhZICAgICAgCVNIQVJFRF9IV19DRkdfQU5fRU5BQkxFX1JFTU9URV9QSFkKLQotCXUzMiAgICAgCQlyZXFfYXV0b25lZzsKLSNkZWZpbmUgQVVUT05FR19TUEVFRCAgIAkJMHgxCi0jZGVmaW5lIEFVVE9ORUdfRkxPV19DVFJMICAgICAgIAkweDIKLQotCXUzMiAgICAgCQlyZXFfbGluZV9zcGVlZDsKLS8qIGxpbmsgc2V0dGluZ3MgLSBtaXNzaW5nIGRlZmluZXMgKi8KLSNkZWZpbmUgU1BFRURfMTIwMDAgICAgIAkJMTIwMDAKLSNkZWZpbmUgU1BFRURfMTI1MDAgICAgIAkJMTI1MDAKLSNkZWZpbmUgU1BFRURfMTMwMDAgICAgIAkJMTMwMDAKLSNkZWZpbmUgU1BFRURfMTUwMDAgICAgIAkJMTUwMDAKLSNkZWZpbmUgU1BFRURfMTYwMDAgICAgIAkJMTYwMDAKLQotCXUzMiAgICAgCQlyZXFfZHVwbGV4OwotCXUzMiAgICAgCQlyZXFfZmxvd19jdHJsOwotI2RlZmluZSBGTE9XX0NUUkxfQVVUTyAgCQlQT1JUX0ZFQVRVUkVfRkxPV19DT05UUk9MX0FVVE8KLSNkZWZpbmUgRkxPV19DVFJMX1RYICAgIAkJUE9SVF9GRUFUVVJFX0ZMT1dfQ09OVFJPTF9UWAotI2RlZmluZSBGTE9XX0NUUkxfUlggICAgCQlQT1JUX0ZFQVRVUkVfRkxPV19DT05UUk9MX1JYCi0jZGVmaW5lIEZMT1dfQ1RSTF9CT1RIICAJCVBPUlRfRkVBVFVSRV9GTE9XX0NPTlRST0xfQk9USAotI2RlZmluZSBGTE9XX0NUUkxfTk9ORSAgCQlQT1JUX0ZFQVRVUkVfRkxPV19DT05UUk9MX05PTkUKLQotCXUzMiAgICAgCQlhZHZlcnRpc2luZzsKLS8qIGxpbmsgc2V0dGluZ3MgLSBtaXNzaW5nIGRlZmluZXMgKi8KLSNkZWZpbmUgQURWRVJUSVNFRF8yNTAwYmFzZVRfRnVsbCAgICAgICAoMSA8PCAxNSkKLQotCXUzMiAgICAgCQlsaW5rX3N0YXR1czsKLQl1MzIgICAgIAkJbGluZV9zcGVlZDsKLQl1MzIgICAgIAkJZHVwbGV4OwotCXUzMiAgICAgCQlmbG93X2N0cmw7Ci0KLQl1MzIgICAgIAkJYmNfdmVyOwotCi0JaW50ICAgICAJCWZsYXNoX3NpemU7Ci0jZGVmaW5lIE5WUkFNXzFNQl9TSVpFICAJCTB4MjAwMDAgLyogMU0gYml0IGluIGJ5dGVzICovCi0jZGVmaW5lIE5WUkFNX1RJTUVPVVRfQ09VTlQgICAgIAkzMDAwMAotI2RlZmluZSBOVlJBTV9QQUdFX1NJWkUgCQkyNTYKKwl1MzIJCQltZl9jb25maWc7CisJdTE2CQkJZTFob3Y7CisJdTgJCQllMWhtZjsKIAogCXU4CQkJd29sOwogCi0JaW50ICAgICAJCXJ4X3Jpbmdfc2l6ZTsKKwlpbnQJCQlyeF9yaW5nX3NpemU7CiAKLQl1MTYgICAgIAkJdHhfcXVpY2tfY29uc190cmlwX2ludDsKLQl1MTYgICAgIAkJdHhfcXVpY2tfY29uc190cmlwOwotCXUxNiAgICAgCQl0eF90aWNrc19pbnQ7Ci0JdTE2ICAgICAJCXR4X3RpY2tzOworCXUxNgkJCXR4X3F1aWNrX2NvbnNfdHJpcF9pbnQ7CisJdTE2CQkJdHhfcXVpY2tfY29uc190cmlwOworCXUxNgkJCXR4X3RpY2tzX2ludDsKKwl1MTYJCQl0eF90aWNrczsKIAotCXUxNiAgICAgCQlyeF9xdWlja19jb25zX3RyaXBfaW50OwotCXUxNiAgICAgCQlyeF9xdWlja19jb25zX3RyaXA7Ci0JdTE2ICAgICAJCXJ4X3RpY2tzX2ludDsKLQl1MTYgICAgIAkJcnhfdGlja3M7CisJdTE2CQkJcnhfcXVpY2tfY29uc190cmlwX2ludDsKKwl1MTYJCQlyeF9xdWlja19jb25zX3RyaXA7CisJdTE2CQkJcnhfdGlja3NfaW50OworCXUxNgkJCXJ4X3RpY2tzOwogCi0JdTMyICAgICAJCXN0YXRzX3RpY2tzOworCXUzMgkJCXN0YXRzX3RpY2tzOworCXUzMgkJCWxpbl9jbnQ7CiAKLQlpbnQgICAgIAkJc3RhdGU7Ci0jZGVmaW5lIEJOWDJYX1NUQVRFX0NMT1NFRCAgICAgIAkweDAKLSNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FEICAweDEwMDAKLSNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9QT1JUICAweDIwMDAKKwlpbnQJCQlzdGF0ZTsKKyNkZWZpbmUgQk5YMlhfU1RBVEVfQ0xPU0VECQkweDAKKyNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FECTB4MTAwMAorI2RlZmluZSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X1BPUlQJMHgyMDAwCiAjZGVmaW5lIEJOWDJYX1NUQVRFX09QRU4JCTB4MzAwMAotI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQgIDB4NDAwMAorI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQJMHg0MDAwCiAjZGVmaW5lIEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfREVMRVRFIDB4NTAwMAogI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X1VOTE9BRCAweDYwMDAKLSNkZWZpbmUgQk5YMlhfU1RBVEVfRVJST1IgICAgICAgCTB4RjAwMAorI2RlZmluZSBCTlgyWF9TVEFURV9ESVNBQkxFRAkJMHhkMDAwCisjZGVmaW5lIEJOWDJYX1NUQVRFX0RJQUcJCTB4ZTAwMAorI2RlZmluZSBCTlgyWF9TVEFURV9FUlJPUgkJMHhmMDAwCiAKLQlpbnQgICAgIAkJbnVtX3F1ZXVlczsKKwlpbnQJCQludW1fcXVldWVzOwogCi0JdTMyICAgICAJCXJ4X21vZGU7Ci0jZGVmaW5lIEJOWDJYX1JYX01PREVfTk9ORSAgICAgIAkwCi0jZGVmaW5lIEJOWDJYX1JYX01PREVfTk9STUFMICAgIAkxCi0jZGVmaW5lIEJOWDJYX1JYX01PREVfQUxMTVVMVEkgIAkyCi0jZGVmaW5lIEJOWDJYX1JYX01PREVfUFJPTUlTQyAgIAkzCi0jZGVmaW5lIEJOWDJYX01BWF9NVUxUSUNBU1QgICAgIAk2NAotI2RlZmluZSBCTlgyWF9NQVhfRU1VTF9NVUxUSSAgICAJMTYKKwl1MzIJCQlyeF9tb2RlOworI2RlZmluZSBCTlgyWF9SWF9NT0RFX05PTkUJCTAKKyNkZWZpbmUgQk5YMlhfUlhfTU9ERV9OT1JNQUwJCTEKKyNkZWZpbmUgQk5YMlhfUlhfTU9ERV9BTExNVUxUSQkJMgorI2RlZmluZSBCTlgyWF9SWF9NT0RFX1BST01JU0MJCTMKKyNkZWZpbmUgQk5YMlhfTUFYX01VTFRJQ0FTVAkJNjQKKyNkZWZpbmUgQk5YMlhfTUFYX0VNVUxfTVVMVEkJCTE2CiAKLQlkbWFfYWRkcl90ICAgICAgCWRlZl9zdGF0dXNfYmxrX21hcHBpbmc7CisJZG1hX2FkZHJfdAkJZGVmX3N0YXR1c19ibGtfbWFwcGluZzsKIAotCXN0cnVjdCBibngyeF9zbG93cGF0aCAgICpzbG93cGF0aDsKLQlkbWFfYWRkcl90ICAgICAgCXNsb3dwYXRoX21hcHBpbmc7CisJc3RydWN0IGJueDJ4X3Nsb3dwYXRoCSpzbG93cGF0aDsKKwlkbWFfYWRkcl90CQlzbG93cGF0aF9tYXBwaW5nOwogCiAjaWZkZWYgQkNNX0lTQ1NJCiAJdm9pZCAgICAJCSp0MTsKQEAgLTcxNiwzMCArODc3LDYyIEBACiAJZG1hX2FkZHJfdCAgICAgIAlxbV9tYXBwaW5nOwogI2VuZGlmCiAKLQljaGFyICAgIAkJKm5hbWU7CisJaW50CQkJZG1hZV9yZWFkeTsKKwkvKiB1c2VkIHRvIHN5bmNocm9uaXplIGRtYWUgYWNjZXNzZXMgKi8KKwlzdHJ1Y3QgbXV0ZXgJCWRtYWVfbXV0ZXg7CisJc3RydWN0IGRtYWVfY29tbWFuZAlpbml0X2RtYWU7CiAKIAkvKiB1c2VkIHRvIHN5bmNocm9uaXplIHN0YXRzIGNvbGxlY3RpbmcgKi8KLQlpbnQgICAgIAkJc3RhdHNfc3RhdGU7Ci0jZGVmaW5lIFNUQVRTX1NUQVRFX0RJU0FCTEUgICAgIAkwCi0jZGVmaW5lIFNUQVRTX1NUQVRFX0VOQUJMRSAgICAgIAkxCi0jZGVmaW5lIFNUQVRTX1NUQVRFX1NUT1AJCTIgLyogc3RvcCBzdGF0cyBvbiBuZXh0IGl0ZXJhdGlvbiAqLwotCisJaW50CQkJc3RhdHNfc3RhdGU7CiAJLyogdXNlZCBieSBkbWFlIGNvbW1hbmQgbG9hZGVyICovCi0Jc3RydWN0IGRtYWVfY29tbWFuZCAgICAgZG1hZTsKLQlpbnQgICAgIAkJZXhlY3V0ZXJfaWR4OworCXN0cnVjdCBkbWFlX2NvbW1hbmQJc3RhdHNfZG1hZTsKKwlpbnQJCQlleGVjdXRlcl9pZHg7CiAKLQl1MzIgICAgIAkJb2xkX2JyYl9kaXNjYXJkOwotCXN0cnVjdCBibWFjX3N0YXRzICAgICAgIG9sZF9ibWFjOworCXUxNgkJCXN0YXRzX2NvdW50ZXI7CiAJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF90Y2xpZW50OwotCXN0cnVjdCB6X3N0cmVhbV9zICAgICAgICpzdHJtOwotCXZvaWQgICAgCQkqZ3VuemlwX2J1ZjsKLQlkbWFfYWRkcl90ICAgICAgCWd1bnppcF9tYXBwaW5nOwotCWludCAgICAgCQlndW56aXBfb3V0bGVuOwotI2RlZmluZSBGV19CVUZfU0laRSAgICAgCQkweDgwMDAKKwlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3hjbGllbnQ7CisJc3RydWN0IGJueDJ4X2V0aF9zdGF0cwlldGhfc3RhdHM7CisKKwlzdHJ1Y3Qgel9zdHJlYW1fcwkqc3RybTsKKwl2b2lkCQkJKmd1bnppcF9idWY7CisJZG1hX2FkZHJfdAkJZ3VuemlwX21hcHBpbmc7CisJaW50CQkJZ3VuemlwX291dGxlbjsKKyNkZWZpbmUgRldfQlVGX1NJWkUJCQkweDgwMDAKIAogfTsKIAogCit2b2lkIGJueDJ4X3JlYWRfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc3JjX2FkZHIsIHUzMiBsZW4zMik7Cit2b2lkIGJueDJ4X3dyaXRlX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdTMyIGRzdF9hZGRyLAorCQkgICAgICB1MzIgbGVuMzIpOworaW50IGJueDJ4X3NldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUpOworCitzdGF0aWMgaW5saW5lIHUzMiByZWdfcG9sbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgZXhwZWN0ZWQsIGludCBtcywKKwkJCSAgIGludCB3YWl0KQoreworCXUzMiB2YWw7CisKKwlkbyB7CisJCXZhbCA9IFJFR19SRChicCwgcmVnKTsKKwkJaWYgKHZhbCA9PSBleHBlY3RlZCkKKwkJCWJyZWFrOworCQltcyAtPSB3YWl0OworCQltc2xlZXAod2FpdCk7CisKKwl9IHdoaWxlIChtcyA+IDApOworCisJcmV0dXJuIHZhbDsKK30KKworCisvKiBsb2FkL3VubG9hZCBtb2RlICovCisjZGVmaW5lIExPQURfTk9STUFMCQkJMAorI2RlZmluZSBMT0FEX09QRU4JCQkxCisjZGVmaW5lIExPQURfRElBRwkJCTIKKyNkZWZpbmUgVU5MT0FEX05PUk1BTAkJCTAKKyNkZWZpbmUgVU5MT0FEX0NMT1NFCQkJMQorCisKIC8qIERNQUUgY29tbWFuZCBkZWZpbmVzICovCiAjZGVmaW5lIERNQUVfQ01EX1NSQ19QQ0kJCTAKICNkZWZpbmUgRE1BRV9DTURfU1JDX0dSQwkJRE1BRV9DT01NQU5EX1NSQwpAQCAtNzQ3LDEyMSArOTQwLDM0IEBACiAjZGVmaW5lIERNQUVfQ01EX0RTVF9QQ0kJCSgxIDw8IERNQUVfQ09NTUFORF9EU1RfU0hJRlQpCiAjZGVmaW5lIERNQUVfQ01EX0RTVF9HUkMJCSgyIDw8IERNQUVfQ09NTUFORF9EU1RfU0hJRlQpCiAKLSNkZWZpbmUgRE1BRV9DTURfQ19EU1RfUENJICAgICAgCTAKLSNkZWZpbmUgRE1BRV9DTURfQ19EU1RfR1JDICAgICAgCSgxIDw8IERNQUVfQ09NTUFORF9DX0RTVF9TSElGVCkKKyNkZWZpbmUgRE1BRV9DTURfQ19EU1RfUENJCQkwCisjZGVmaW5lIERNQUVfQ01EX0NfRFNUX0dSQwkJKDEgPDwgRE1BRV9DT01NQU5EX0NfRFNUX1NISUZUKQogCi0jZGVmaW5lIERNQUVfQ01EX0NfRU5BQkxFICAgICAgIAlETUFFX0NPTU1BTkRfQ19UWVBFX0VOQUJMRQorI2RlZmluZSBETUFFX0NNRF9DX0VOQUJMRQkJRE1BRV9DT01NQU5EX0NfVFlQRV9FTkFCTEUKIAotI2RlZmluZSBETUFFX0NNRF9FTkRJQU5JVFlfTk9fU1dBUCAgICAgICgwIDw8IERNQUVfQ09NTUFORF9FTkRJQU5JVFlfU0hJRlQpCi0jZGVmaW5lIERNQUVfQ01EX0VORElBTklUWV9CX1NXQVAgICAgICAgKDEgPDwgRE1BRV9DT01NQU5EX0VORElBTklUWV9TSElGVCkKLSNkZWZpbmUgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgICAgICAoMiA8PCBETUFFX0NPTU1BTkRfRU5ESUFOSVRZX1NISUZUKQotI2RlZmluZSBETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQICAgICgzIDw8IERNQUVfQ09NTUFORF9FTkRJQU5JVFlfU0hJRlQpCisjZGVmaW5lIERNQUVfQ01EX0VORElBTklUWV9OT19TV0FQCSgwIDw8IERNQUVfQ09NTUFORF9FTkRJQU5JVFlfU0hJRlQpCisjZGVmaW5lIERNQUVfQ01EX0VORElBTklUWV9CX1NXQVAJKDEgPDwgRE1BRV9DT01NQU5EX0VORElBTklUWV9TSElGVCkKKyNkZWZpbmUgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAJKDIgPDwgRE1BRV9DT01NQU5EX0VORElBTklUWV9TSElGVCkKKyNkZWZpbmUgRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUAkoMyA8PCBETUFFX0NPTU1BTkRfRU5ESUFOSVRZX1NISUZUKQogCi0jZGVmaW5lIERNQUVfQ01EX1BPUlRfMCAJCTAKLSNkZWZpbmUgRE1BRV9DTURfUE9SVF8xIAkJRE1BRV9DT01NQU5EX1BPUlQKKyNkZWZpbmUgRE1BRV9DTURfUE9SVF8wCQkJMAorI2RlZmluZSBETUFFX0NNRF9QT1JUXzEJCQlETUFFX0NPTU1BTkRfUE9SVAogCi0jZGVmaW5lIERNQUVfQ01EX1NSQ19SRVNFVCAgICAgIAlETUFFX0NPTU1BTkRfU1JDX1JFU0VUCi0jZGVmaW5lIERNQUVfQ01EX0RTVF9SRVNFVCAgICAgIAlETUFFX0NPTU1BTkRfRFNUX1JFU0VUCisjZGVmaW5lIERNQUVfQ01EX1NSQ19SRVNFVAkJRE1BRV9DT01NQU5EX1NSQ19SRVNFVAorI2RlZmluZSBETUFFX0NNRF9EU1RfUkVTRVQJCURNQUVfQ09NTUFORF9EU1RfUkVTRVQKKyNkZWZpbmUgRE1BRV9DTURfRTFIVk5fU0hJRlQJCURNQUVfQ09NTUFORF9FMUhWTl9TSElGVAogCi0jZGVmaW5lIERNQUVfTEVOMzJfTUFYICAJCTB4NDAwCisjZGVmaW5lIERNQUVfTEVOMzJfUkRfTUFYCQkweDgwCisjZGVmaW5lIERNQUVfTEVOMzJfV1JfTUFYCQkweDQwMAogCisjZGVmaW5lIERNQUVfQ09NUF9WQUwJCQkweGUwZDBkMGFlCiAKLS8qIE1DIGhzaSAqLwotI2RlZmluZSBSWF9DT1BZX1RIUkVTSCAgCQk5MgotI2RlZmluZSBCQ01fUEFHRV9CSVRTICAgCQkxMgotI2RlZmluZSBCQ01fUEFHRV9TSVpFICAgCQkoMSA8PCBCQ01fUEFHRV9CSVRTKQorI2RlZmluZSBNQVhfRE1BRV9DX1BFUl9QT1JUCQk4CisjZGVmaW5lIElOSVRfRE1BRV9DKGJwKQkJCShCUF9QT1JUKGJwKSpNQVhfRE1BRV9DX1BFUl9QT1JUICsgXAorCQkJCQkgQlBfRTFIVk4oYnApKQorI2RlZmluZSBQTUZfRE1BRV9DKGJwKQkJCShCUF9QT1JUKGJwKSpNQVhfRE1BRV9DX1BFUl9QT1JUICsgXAorCQkJCQkgRTFIVk5fTUFYKQogCi0jZGVmaW5lIE5VTV9UWF9SSU5HUyAgICAJCTE2Ci0jZGVmaW5lIFRYX0RFU0NfQ05UICAgICAJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF90eF9iZCkpCi0jZGVmaW5lIE1BWF9UWF9ERVNDX0NOVCAJCShUWF9ERVNDX0NOVCAtIDEpCi0jZGVmaW5lIE5VTV9UWF9CRCAgICAgICAJCShUWF9ERVNDX0NOVCAqIE5VTV9UWF9SSU5HUykKLSNkZWZpbmUgTUFYX1RYX0JEICAgICAgIAkJKE5VTV9UWF9CRCAtIDEpCi0jZGVmaW5lIE1BWF9UWF9BVkFJTCAgICAJCShNQVhfVFhfREVTQ19DTlQgKiBOVU1fVFhfUklOR1MgLSAyKQotI2RlZmluZSBORVhUX1RYX0lEWCh4KSAgCSgoKCh4KSAmIE1BWF9UWF9ERVNDX0NOVCkgPT0gXAotCQkJCSAoTUFYX1RYX0RFU0NfQ05UIC0gMSkpID8gKHgpICsgMiA6ICh4KSArIDEpCi0jZGVmaW5lIFRYX0JEKHgpCQkJKCh4KSAmIE1BWF9UWF9CRCkKLSNkZWZpbmUgVFhfQkRfUE9GRih4KSAgIAkJKCh4KSAmIE1BWF9UWF9ERVNDX0NOVCkKLQotLyogVGhlIFJYIEJEIHJpbmcgaXMgc3BlY2lhbCwgZWFjaCBiZCBpcyA4IGJ5dGVzIGJ1dCB0aGUgbGFzdCBvbmUgaXMgMTYgKi8KLSNkZWZpbmUgTlVNX1JYX1JJTkdTICAgIAkJOAotI2RlZmluZSBSWF9ERVNDX0NOVCAgICAgCShCQ01fUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBldGhfcnhfYmQpKQotI2RlZmluZSBNQVhfUlhfREVTQ19DTlQgCQkoUlhfREVTQ19DTlQgLSAyKQotI2RlZmluZSBSWF9ERVNDX01BU0sgICAgCQkoUlhfREVTQ19DTlQgLSAxKQotI2RlZmluZSBOVU1fUlhfQkQgICAgICAgCQkoUlhfREVTQ19DTlQgKiBOVU1fUlhfUklOR1MpCi0jZGVmaW5lIE1BWF9SWF9CRCAgICAgICAJCShOVU1fUlhfQkQgLSAxKQotI2RlZmluZSBNQVhfUlhfQVZBSUwgICAgCQkoTUFYX1JYX0RFU0NfQ05UICogTlVNX1JYX1JJTkdTIC0gMikKLSNkZWZpbmUgTkVYVF9SWF9JRFgoeCkgIAkoKCgoeCkgJiBSWF9ERVNDX01BU0spID09IFwKLQkJCQkgKE1BWF9SWF9ERVNDX0NOVCAtIDEpKSA/ICh4KSArIDMgOiAoeCkgKyAxKQotI2RlZmluZSBSWF9CRCh4KQkJCSgoeCkgJiBNQVhfUlhfQkQpCi0KLSNkZWZpbmUgTlVNX1JDUV9SSU5HUyAgIAkJKE5VTV9SWF9SSU5HUyAqIDIpCi0jZGVmaW5lIFJDUV9ERVNDX0NOVCAgICAJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2YodW5pb24gZXRoX3J4X2NxZSkpCi0jZGVmaW5lIE1BWF9SQ1FfREVTQ19DTlQJCShSQ1FfREVTQ19DTlQgLSAxKQotI2RlZmluZSBOVU1fUkNRX0JEICAgICAgCQkoUkNRX0RFU0NfQ05UICogTlVNX1JDUV9SSU5HUykKLSNkZWZpbmUgTUFYX1JDUV9CRCAgICAgIAkJKE5VTV9SQ1FfQkQgLSAxKQotI2RlZmluZSBNQVhfUkNRX0FWQUlMICAgCQkoTUFYX1JDUV9ERVNDX0NOVCAqIE5VTV9SQ1FfUklOR1MgLSAyKQotI2RlZmluZSBORVhUX1JDUV9JRFgoeCkgCSgoKCh4KSAmIE1BWF9SQ1FfREVTQ19DTlQpID09IFwKLQkJCQkgKE1BWF9SQ1FfREVTQ19DTlQgLSAxKSkgPyAoeCkgKyAyIDogKHgpICsgMSkKLSNkZWZpbmUgUkNRX0JEKHgpICAgICAgIAkJKCh4KSAmIE1BWF9SQ1FfQkQpCi0KLQotLyogdXNlZCBvbiBhIENJRCByZWNlaXZlZCBmcm9tIHRoZSBIVyAqLwotI2RlZmluZSBTV19DSUQoeCkgICAgICAgCQkobGUzMl90b19jcHUoeCkgJiBcCi0JCQkJCSAoQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NJRCA+PiAxKSkKLSNkZWZpbmUgQ1FFX0NNRCh4KSAgICAgIAkJKGxlMzJfdG9fY3B1KHgpID4+IFwKLQkJCQkJQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NNRF9JRF9TSElGVCkKLQotI2RlZmluZSBCRF9VTk1BUF9BRERSKGJkKSAgICAgICAJSElMT19VNjQobGUzMl90b19jcHUoKGJkKS0+YWRkcl9oaSksIFwKLQkJCQkJCSBsZTMyX3RvX2NwdSgoYmQpLT5hZGRyX2xvKSkKLSNkZWZpbmUgQkRfVU5NQVBfTEVOKGJkKQkJKGxlMTZfdG9fY3B1KChiZCktPm5ieXRlcykpCi0KLQotI2RlZmluZSBTVFJPTV9BU1NFUlRfQVJSQVlfU0laRSAJNTAKLQotCi0jZGVmaW5lIE1ESU9fSU5ESVJFQ1RfUkVHX0FERFIgIAkweDFmCi0jZGVmaW5lIE1ESU9fU0VUX1JFR19CQU5LKGJwLCByZWdfYmFuaykgXAotCQlibngyeF9tZGlvMjJfd3JpdGUoYnAsIE1ESU9fSU5ESVJFQ1RfUkVHX0FERFIsIHJlZ19iYW5rKQotCi0jZGVmaW5lIE1ESU9fQUNDRVNTX1RJTUVPVVQgICAgIAkxMDAwCi0KLQotLyogbXVzdCBiZSB1c2VkIG9uIGEgQ0lEIGJlZm9yZSBwbGFjaW5nIGl0IG9uIGEgSFcgcmluZyAqLwotI2RlZmluZSBIV19DSUQoYnAsIHgpICAgCQkoeCB8IChicC0+cG9ydCA8PCAyMykpCi0KLSNkZWZpbmUgU1BfREVTQ19DTlQgICAgIAkoQkNNX1BBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgZXRoX3NwZSkpCi0jZGVmaW5lIE1BWF9TUF9ERVNDX0NOVCAJCShTUF9ERVNDX0NOVCAtIDEpCi0KLSNkZWZpbmUgQVRUTl9OSUdfRk9SX0ZVTkMgICAgICAgCSgxTCA8PCA4KQotI2RlZmluZSBBVFROX1NXX1RJTUVSXzRfRlVOQyAgICAJKDFMIDw8IDkpCi0jZGVmaW5lIEdQSU9fMl9GVU5DICAgICAJCSgxTCA8PCAxMCkKLSNkZWZpbmUgR1BJT18zX0ZVTkMgICAgIAkJKDFMIDw8IDExKQotI2RlZmluZSBHUElPXzRfRlVOQyAgICAgCQkoMUwgPDwgMTIpCi0jZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzEgICAgIAkoMUwgPDwgMTMpCi0jZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzIgICAgIAkoMUwgPDwgMTQpCi0jZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzMgICAgIAkoMUwgPDwgMTUpCi0jZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzQgICAgIAkoMUwgPDwgMTMpCi0jZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzUgICAgIAkoMUwgPDwgMTQpCi0jZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzYgICAgIAkoMUwgPDwgMTUpCi0KLSNkZWZpbmUgQVRUTl9IQVJEX1dJUkVEX01BU0sgICAgCTB4ZmYwMAotI2RlZmluZSBBVFRFTlRJT05fSUQgICAgCQk0Ci0KLQotI2RlZmluZSBCTlgyWF9CVFIgICAgICAgCQkzCi0jZGVmaW5lIE1BWF9TUFFfUEVORElORyAJCTgKLQotCi0jZGVmaW5lIEJOWDJYX05VTV9TVEFUUwkJCTM0Ci0jZGVmaW5lIEJOWDJYX05VTV9URVNUUwkJCTEKLQotCi0jZGVmaW5lIERQTV9UUklHRVJfVFlQRSAJCTB4NDAKLSNkZWZpbmUgRE9PUkJFTEwoYnAsIGNpZCwgdmFsKSBcCi0JZG8geyBcCi0JCXdyaXRlbCgodTMyKXZhbCwgKGJwKS0+ZG9vcmJlbGxzICsgKEJDTV9QQUdFX1NJWkUgKiBjaWQpICsgXAotCQkgICAgICAgRFBNX1RSSUdFUl9UWVBFKTsgXAotCX0gd2hpbGUgKDApCiAKIC8qIFBDSUUgbGluayBhbmQgc3BlZWQgKi8KICNkZWZpbmUgUENJQ0ZHX0xJTktfV0lEVEgJCTB4MWYwMDAwMApAQCAtODY5LDExMSArOTc1LDY2IEBACiAjZGVmaW5lIFBDSUNGR19MSU5LX1NQRUVECQkweGYwMDAwCiAjZGVmaW5lIFBDSUNGR19MSU5LX1NQRUVEX1NISUZUCQkxNgogCi0jZGVmaW5lIEJNQUNfQ09OVFJPTF9SWF9FTkFCTEUJCTIKIAotI2RlZmluZSBwYmRfdGNwX2ZsYWdzKHNrYikgIAkobnRvaGwodGNwX2ZsYWdfd29yZCh0Y3BfaGRyKHNrYikpKT4+MTYgJiAweGZmKQorI2RlZmluZSBCTlgyWF9OVU1fU1RBVFMJCQkzOQorI2RlZmluZSBCTlgyWF9OVU1fVEVTVFMJCQk4CisKKyNkZWZpbmUgQk5YMlhfTUFDX0xPT1BCQUNLCQkwCisjZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDSwkJMQorI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVECTEKKyNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRAkyCisjZGVmaW5lIEJOWDJYX0xPT1BCQUNLX0ZBSUxFRAkJKEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQgfCBcCisJCQkJCSBCTlgyWF9QSFlfTE9PUEJBQ0tfRkFJTEVEKQorCisKKyNkZWZpbmUgU1RST01fQVNTRVJUX0FSUkFZX1NJWkUJCTUwCisKKworLyogbXVzdCBiZSB1c2VkIG9uIGEgQ0lEIGJlZm9yZSBwbGFjaW5nIGl0IG9uIGEgSFcgcmluZyAqLworI2RlZmluZSBIV19DSUQoYnAsIHgpCQkoKEJQX1BPUlQoYnApIDw8IDIzKSB8IChCUF9FMUhWTihicCkgPDwgMTcpIHwgeCkKKworI2RlZmluZSBTUF9ERVNDX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9zcGUpKQorI2RlZmluZSBNQVhfU1BfREVTQ19DTlQJCQkoU1BfREVTQ19DTlQgLSAxKQorCisKKyNkZWZpbmUgQk5YMlhfQlRSCQkJMworI2RlZmluZSBNQVhfU1BRX1BFTkRJTkcJCQk4CisKKworLyogQ01ORyBjb25zdGFudHMKKyAgIGRlcml2ZWQgZnJvbSBsYWIgZXhwZXJpbWVudHMsIGFuZCBub3QgZnJvbSBzeXN0ZW0gc3BlYyBjYWxjdWxhdGlvbnMgISEhICovCisjZGVmaW5lIERFRl9NSU5fUkFURQkJCTEwMAorLyogcmVzb2x1dGlvbiBvZiB0aGUgcmF0ZSBzaGFwaW5nIHRpbWVyIC0gMTAwIHVzZWMgKi8KKyNkZWZpbmUgUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDCTEwMAorLyogcmVzb2x1dGlvbiBvZiBmYWlybmVzcyBhbGdvcml0aG0gaW4gdXNlY3MgLQorICAgY29lZmZpY2llbnQgZm9yIGNsYXVjbGF0aW5nIHRoZSBhY3R1YWxsIHQgZmFpciAqLworI2RlZmluZSBUX0ZBSVJfQ09FRgkJCTEwMDAwMDAwCisvKiBudW1iZXIgb2YgYnl0ZXMgaW4gc2luZ2xlIFFNIGFyYml0cmF0aW9uIGN5Y2xlIC0KKyAgIGNvZWZmaWVjbnQgZm9yIGNhbGN1bGF0aW5nIHRoZSBmYWlybmVzcyB0aW1lciAqLworI2RlZmluZSBRTV9BUkJfQllURVMJCQk0MDAwMAorI2RlZmluZSBGQUlSX01FTQkJCTIKKworCisjZGVmaW5lIEFUVE5fTklHX0ZPUl9GVU5DCQkoMUwgPDwgOCkKKyNkZWZpbmUgQVRUTl9TV19USU1FUl80X0ZVTkMJCSgxTCA8PCA5KQorI2RlZmluZSBHUElPXzJfRlVOQwkJCSgxTCA8PCAxMCkKKyNkZWZpbmUgR1BJT18zX0ZVTkMJCQkoMUwgPDwgMTEpCisjZGVmaW5lIEdQSU9fNF9GVU5DCQkJKDFMIDw8IDEyKQorI2RlZmluZSBBVFROX0dFTkVSQUxfQVRUTl8xCQkoMUwgPDwgMTMpCisjZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzIJCSgxTCA8PCAxNCkKKyNkZWZpbmUgQVRUTl9HRU5FUkFMX0FUVE5fMwkJKDFMIDw8IDE1KQorI2RlZmluZSBBVFROX0dFTkVSQUxfQVRUTl80CQkoMUwgPDwgMTMpCisjZGVmaW5lIEFUVE5fR0VORVJBTF9BVFROXzUJCSgxTCA8PCAxNCkKKyNkZWZpbmUgQVRUTl9HRU5FUkFMX0FUVE5fNgkJKDFMIDw8IDE1KQorCisjZGVmaW5lIEFUVE5fSEFSRF9XSVJFRF9NQVNLCQkweGZmMDAKKyNkZWZpbmUgQVRURU5USU9OX0lECQkJNAorCiAKIC8qIHN0dWZmIGFkZGVkIHRvIG1ha2UgdGhlIGNvZGUgZml0IDgwQ29sICovCiAKLSNkZWZpbmUgVFBBX1RZUEVfU1RBUlQgIAkJRVRIX0ZBU1RfUEFUSF9SWF9DUUVfU1RBUlRfRkxHCi0jZGVmaW5lIFRQQV9UWVBFX0VORCAgICAJCUVUSF9GQVNUX1BBVEhfUlhfQ1FFX0VORF9GTEcKLSNkZWZpbmUgVFBBX1RZUEUoY3FlKSAgIAkoY3FlLT5mYXN0X3BhdGhfY3FlLmVycm9yX3R5cGVfZmxhZ3MgJiBcCi0JCQkJIChUUEFfVFlQRV9TVEFSVCB8IFRQQV9UWVBFX0VORCkpCi0jZGVmaW5lIEJOWDJYX1JYX1NVTV9PSyhjcWUpIFwKLQkJCSghKGNxZS0+ZmFzdF9wYXRoX2NxZS5zdGF0dXNfZmxhZ3MgJiBcCi0JCQkgKEVUSF9GQVNUX1BBVEhfUlhfQ1FFX0lQX1hTVU1fTk9fVkFMSURBVElPTl9GTEcgfCBcCi0JCQkgIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX0w0X1hTVU1fTk9fVkFMSURBVElPTl9GTEcpKSkKLQotI2RlZmluZSBCTlgyWF9SWF9TVU1fRklYKGNxZSkgXAotCQkJKChsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGFyc19mbGFncy5mbGFncykgJiBcCi0JCQkgIFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTCkgPT0gXAotCQkJICgxIDw8IFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTF9TSElGVCkpCi0KLQotI2RlZmluZSBNRElPX0FOX0NMNzNfT1JfMzdfQ09NUExFVEUgXAotCQkoTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQ0w3M19BVVRPTkVHX0NPTVBMRVRFIHwgXAotCQkgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQ0wzN19BVVRPTkVHX0NPTVBMRVRFKQotCi0jZGVmaW5lIEdQX1NUQVRVU19QQVVTRV9SU09MVVRJT05fVFhTSURFIFwKLQkJCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX1BBVVNFX1JTT0xVVElPTl9UWFNJREUKLSNkZWZpbmUgR1BfU1RBVFVTX1BBVVNFX1JTT0xVVElPTl9SWFNJREUgXAotCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfUEFVU0VfUlNPTFVUSU9OX1JYU0lERQotI2RlZmluZSBHUF9TVEFUVVNfU1BFRURfTUFTSyBcCi0JCQlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfTUFTSwotI2RlZmluZSBHUF9TVEFUVVNfMTBNICAgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwTQotI2RlZmluZSBHUF9TVEFUVVNfMTAwTSAgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwME0KLSNkZWZpbmUgR1BfU1RBVFVTXzFHICAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xRwotI2RlZmluZSBHUF9TVEFUVVNfMl81RyAgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzJfNUcKLSNkZWZpbmUgR1BfU1RBVFVTXzVHICAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF81RwotI2RlZmluZSBHUF9TVEFUVVNfNkcgICAgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzZHCi0jZGVmaW5lIEdQX1NUQVRVU18xMEdfSElHIFwKLQkJCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMEdfSElHCi0jZGVmaW5lIEdQX1NUQVRVU18xMEdfQ1g0IFwKLQkJCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMEdfQ1g0Ci0jZGVmaW5lIEdQX1NUQVRVU18xMkdfSElHIFwKLQkJCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMkdfSElHCi0jZGVmaW5lIEdQX1NUQVRVU18xMl81RyBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTJfNUcKLSNkZWZpbmUgR1BfU1RBVFVTXzEzRyAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xM0cKLSNkZWZpbmUgR1BfU1RBVFVTXzE1RyAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xNUcKLSNkZWZpbmUgR1BfU1RBVFVTXzE2RyAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xNkcKLSNkZWZpbmUgR1BfU1RBVFVTXzFHX0tYIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xR19LWAotI2RlZmluZSBHUF9TVEFUVVNfMTBHX0tYNCBcCi0JCQlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTBHX0tYNAotCi0jZGVmaW5lIExJTktfMTBUSEQgICAgICAJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBUSEQKLSNkZWZpbmUgTElOS18xMFRGRCAgICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMFRGRAotI2RlZmluZSBMSU5LXzEwMFRYSEQgICAgCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMFRYSEQKLSNkZWZpbmUgTElOS18xMDBUNCAgICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMDBUNAotI2RlZmluZSBMSU5LXzEwMFRYRkQgICAgCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMFRYRkQKLSNkZWZpbmUgTElOS18xMDAwVEhEICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMDAwVEhECi0jZGVmaW5lIExJTktfMTAwMFRGRCAgICAJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwMFRGRAotI2RlZmluZSBMSU5LXzEwMDBYRkQgICAgCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBYRkQKLSNkZWZpbmUgTElOS18yNTAwVEhEICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8yNTAwVEhECi0jZGVmaW5lIExJTktfMjUwMFRGRCAgICAJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMjUwMFRGRAotI2RlZmluZSBMSU5LXzI1MDBYRkQgICAgCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBYRkQKLSNkZWZpbmUgTElOS18xMEdURkQgICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMEdURkQKLSNkZWZpbmUgTElOS18xMEdYRkQgICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMEdYRkQKLSNkZWZpbmUgTElOS18xMkdURkQgICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMkdURkQKLSNkZWZpbmUgTElOS18xMkdYRkQgICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMkdYRkQKLSNkZWZpbmUgTElOS18xMl81R1RGRCAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMl81R1RGRAotI2RlZmluZSBMSU5LXzEyXzVHWEZEICAgCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEyXzVHWEZECi0jZGVmaW5lIExJTktfMTNHVEZEICAgICAJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTNHVEZECi0jZGVmaW5lIExJTktfMTNHWEZEICAgICAJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTNHWEZECi0jZGVmaW5lIExJTktfMTVHVEZEICAgICAJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTVHVEZECi0jZGVmaW5lIExJTktfMTVHWEZEICAgICAJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTVHWEZECi0jZGVmaW5lIExJTktfMTZHVEZEICAgICAJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTZHVEZECi0jZGVmaW5lIExJTktfMTZHWEZEICAgICAJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTZHWEZECi0KLSNkZWZpbmUgTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHIFwKLQkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LMTBHCi0jZGVmaW5lIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgXAotCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTCi0jZGVmaW5lIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVNfU0laRSBcCi0JCU5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVNfU0laRQotI2RlZmluZSBOSUdfU1RBVFVTX1NFUkRFUzBfTElOS19TVEFUVVMgXAotCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1NFUkRFUzBfTElOS19TVEFUVVMKLSNkZWZpbmUgTklHX01BU0tfTUlfSU5UIFwKLQkJTklHX01BU0tfSU5URVJSVVBUX1BPUlQwX1JFR19NQVNLX0VNQUMwX01JU0NfTUlfSU5UCi0jZGVmaW5lIE5JR19NQVNLX1hHWFMwX0xJTksxMEcgXAotCQlOSUdfTUFTS19JTlRFUlJVUFRfUE9SVDBfUkVHX01BU0tfWEdYUzBfTElOSzEwRwotI2RlZmluZSBOSUdfTUFTS19YR1hTMF9MSU5LX1NUQVRVUyBcCi0JCU5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19YR1hTMF9MSU5LX1NUQVRVUwotI2RlZmluZSBOSUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTIFwKLQkJTklHX01BU0tfSU5URVJSVVBUX1BPUlQwX1JFR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMKLQotI2RlZmluZSBYR1hTX1JFU0VUX0JJVFMgXAotCShNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfUlNUQl9IVyB8ICAgXAotCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfSUREUSB8ICAgICAgXAotCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfUFdSRFdOIHwgICAgXAotCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfUFdSRFdOX1NEIHwgXAotCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfVFhEX0ZJRk9fUlNUQikKLQotI2RlZmluZSBTRVJERVNfUkVTRVRfQklUUyBcCi0JKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9TRVJERVMwX1JTVEJfSFcgfCBcCi0JIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9TRVJERVMwX0lERFEgfCAgICBcCi0JIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9TRVJERVMwX1BXUkRXTiB8ICBcCi0JIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9TRVJERVMwX1BXUkRXTl9TRCkKLQorI2RlZmluZSBCTlgyWF9QTUZfTElOS19BU1NFUlQgXAorCUdFTkVSQUxfQVRURU5fT0ZGU0VUKExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfMCArIEJQX0ZVTkMoYnApKQogCiAjZGVmaW5lIEJOWDJYX01DX0FTU0VSVF9CSVRTIFwKIAkoR0VORVJBTF9BVFRFTl9PRkZTRVQoVFNUT1JNX0ZBVEFMX0FTU0VSVF9BVFRFTlRJT05fQklUKSB8IFwKQEAgLTk4NywxMiArMTA0OCwyMCBAQAogI2RlZmluZSBCTlgyWF9ET09SUV9BU1NFUlQgXAogCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9IV19JTlRFUlJVUFQKIAorI2RlZmluZSBCTlgyWF9HUkNfVElNRU9VVAlHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fVElNRU9VVF9HUkMpCisjZGVmaW5lIEJOWDJYX0dSQ19SU1YJCShHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fUkJDUikgfCBcCisJCQkJIEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNUKSB8IFwKKwkJCQkgR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JCQ04pIHwgXAorCQkJCSBHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fUkJDVSkgfCBcCisJCQkJIEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNQKSB8IFwKKwkJCQkgR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JTVkRfR1JDKSkKKwogI2RlZmluZSBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzAgXAogCQkJCShBRVVfSU5QVVRTX0FUVE5fQklUU19UU0RNX0hXX0lOVEVSUlVQVCB8IFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVENNX0hXX0lOVEVSUlVQVCB8IFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVFNFTUlfSFdfSU5URVJSVVBUIHwgXAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19QQkZfSFdfSU5URVJSVVBUKQotI2RlZmluZSBIV19QUlRZX0FTU0VSVF9TRVRfMCAgICAoQUVVX0lOUFVUU19BVFROX0JJVFNfQlJCX1BBUklUWV9FUlJPUiB8IFwKKyNkZWZpbmUgSFdfUFJUWV9BU1NFUlRfU0VUXzAJKEFFVV9JTlBVVFNfQVRUTl9CSVRTX0JSQl9QQVJJVFlfRVJST1IgfCBcCiAJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1BBUlNFUl9QQVJJVFlfRVJST1IgfCBcCiAJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1RTRE1fUEFSSVRZX0VSUk9SIHwgXAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19TRUFSQ0hFUl9QQVJJVFlfRVJST1IgfFwKQEAgLTEwMDksNyArMTA3OCw3IEBACiAJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1VQQl9IV19JTlRFUlJVUFQgfCBcCiAJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NTRE1fSFdfSU5URVJSVVBUIHwgXAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19DQ01fSFdfSU5URVJSVVBUKQotI2RlZmluZSBIV19QUlRZX0FTU0VSVF9TRVRfMSAgICAoQUVVX0lOUFVUU19BVFROX0JJVFNfUEJDTElFTlRfUEFSSVRZX0VSUk9SIHxcCisjZGVmaW5lIEhXX1BSVFlfQVNTRVJUX1NFVF8xCShBRVVfSU5QVVRTX0FUVE5fQklUU19QQkNMSUVOVF9QQVJJVFlfRVJST1IgfFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfUU1fUEFSSVRZX0VSUk9SIHwgXAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19YU0RNX1BBUklUWV9FUlJPUiB8IFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfWFNFTUlfUEFSSVRZX0VSUk9SIHwgXApAQCAtMTAyNiw3ICsxMDk1LDcgQEAKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfRE1BRV9IV19JTlRFUlJVUFQgfCBcCiAJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19QWFBQQ0lDTE9DS0NMSUVOVF9IV19JTlRFUlJVUFQgfFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19IV19JTlRFUlJVUFQpCi0jZGVmaW5lIEhXX1BSVFlfQVNTRVJUX1NFVF8yICAgIChBRVVfSU5QVVRTX0FUVE5fQklUU19DU0VNSV9QQVJJVFlfRVJST1IgfCBcCisjZGVmaW5lIEhXX1BSVFlfQVNTRVJUX1NFVF8yCShBRVVfSU5QVVRTX0FUVE5fQklUU19DU0VNSV9QQVJJVFlfRVJST1IgfCBcCiAJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1BYUF9QQVJJVFlfRVJST1IgfCBcCiAJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19QWFBQQ0lDTE9DS0NMSUVOVF9QQVJJVFlfRVJST1IgfFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0ZDX1BBUklUWV9FUlJPUiB8IFwKQEAgLTEwMzUsNDIgKzExMDQsNDQgQEAKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19QQVJJVFlfRVJST1IpCiAKIAotI2RlZmluZSBFVEhfUlhfRVJST1JfRkFMR1MgICAgICAoRVRIX0ZBU1RfUEFUSF9SWF9DUUVfUEhZX0RFQ09ERV9FUlJfRkxHIHwgXAotCQkJCSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9JUF9CQURfWFNVTV9GTEcgfCBcCi0JCQkJIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX0w0X0JBRF9YU1VNX0ZMRykKLQotCiAjZGVmaW5lIE1VTFRJX0ZMQUdTIFwKLQkoVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X0NBUEFCSUxJVFkgICAgIHwgXAotCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjRfVENQX0NBUEFCSUxJVFkgfCBcCi0JIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9DQVBBQklMSVRZICAgICB8IFwKLQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZIHwgXAotCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRSkKKwkJKFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9DQVBBQklMSVRZIHwgXAorCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X1RDUF9DQVBBQklMSVRZIHwgXAorCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFkgfCBcCisJCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgfCBcCisJCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRSkKIAotI2RlZmluZSBNVUxUSV9NQVNLICAgICAgMHg3ZgorI2RlZmluZSBNVUxUSV9NQVNLCQkJMHg3ZgogCiAKLSNkZWZpbmUgVV9TQl9FVEhfUlhfQ1FfSU5ERVggICAgCUhDX0lOREVYX1VfRVRIX1JYX0NRX0NPTlMKLSNkZWZpbmUgQ19TQl9FVEhfVFhfQ1FfSU5ERVggICAgCUhDX0lOREVYX0NfRVRIX1RYX0NRX0NPTlMKLSNkZWZpbmUgQ19ERUZfU0JfU1BfSU5ERVggICAgICAgCUhDX0lOREVYX0RFRl9DX0VUSF9TTE9XX1BBVEgKKyNkZWZpbmUgREVGX1VTQl9GVU5DX09GRgkJKDIgKyAyKkhDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVMpCisjZGVmaW5lIERFRl9DU0JfRlVOQ19PRkYJCSgyICsgMipIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTKQorI2RlZmluZSBERUZfWFNCX0ZVTkNfT0ZGCQkoMiArIDIqSENfWFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUykKKyNkZWZpbmUgREVGX1RTQl9GVU5DX09GRgkJKDIgKyAyKkhDX1RTVE9STV9ERUZfU0JfTlVNX0lORElDRVMpCiAKLSNkZWZpbmUgQk5YMlhfUlhfU0JfSU5ERVggXAotCSZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suaW5kZXhfdmFsdWVzW1VfU0JfRVRIX1JYX0NRX0lOREVYXQotCi0jZGVmaW5lIEJOWDJYX1RYX1NCX0lOREVYIFwKLQkmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLmluZGV4X3ZhbHVlc1tDX1NCX0VUSF9UWF9DUV9JTkRFWF0KKyNkZWZpbmUgQ19ERUZfU0JfU1BfSU5ERVgJCUhDX0lOREVYX0RFRl9DX0VUSF9TTE9XX1BBVEgKIAogI2RlZmluZSBCTlgyWF9TUF9EU0JfSU5ERVggXAotJmJwLT5kZWZfc3RhdHVzX2Jsay0+Y19kZWZfc3RhdHVzX2Jsb2NrLmluZGV4X3ZhbHVlc1tDX0RFRl9TQl9TUF9JTkRFWF0KKygmYnAtPmRlZl9zdGF0dXNfYmxrLT5jX2RlZl9zdGF0dXNfYmxvY2suaW5kZXhfdmFsdWVzW0NfREVGX1NCX1NQX0lOREVYXSkKIAogCiAjZGVmaW5lIENBTV9JU19JTlZBTElEKHgpIFwKICh4LnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9PSBUU1RPUk1fQ0FNX1RBUkdFVF9UQUJMRV9FTlRSWV9BQ1RJT05fVFlQRSkKIAogI2RlZmluZSBDQU1fSU5WQUxJREFURSh4KSBcCi14LnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9IFRTVE9STV9DQU1fVEFSR0VUX1RBQkxFX0VOVFJZX0FDVElPTl9UWVBFCisJKHgudGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0gVFNUT1JNX0NBTV9UQVJHRVRfVEFCTEVfRU5UUllfQUNUSU9OX1RZUEUpCiAKIAorLyogTnVtYmVyIG9mIHUzMiBlbGVtZW50cyBpbiBNQyBoYXNoIGFycmF5ICovCisjZGVmaW5lIE1DX0hBU0hfU0laRQkJCTgKKyNkZWZpbmUgTUNfSEFTSF9PRkZTRVQoYnAsIGkpCQkoQkFSX1RTVFJPUk1fSU5UTUVNICsgXAorCVRTVE9STV9BUFBST1hJTUFURV9NQVRDSF9NVUxUSUNBU1RfRklMVEVSSU5HX09GRlNFVChCUF9GVU5DKGJwKSkgKyBpKjQpCisKKworI2lmbmRlZiBQWFAyX1JFR19QWFAyX0lOVF9TVFMKKyNkZWZpbmUgUFhQMl9SRUdfUFhQMl9JTlRfU1RTCQlQWFAyX1JFR19QWFAyX0lOVF9TVFNfMAorI2VuZGlmCisKIC8qIE1JU0NfUkVHX1JFU0VUX1JFRyAtIHRoaXMgaXMgaGVyZSBmb3IgdGhlIGhzaSB0byB3b3JrIGRvbid0IHRvdWNoICovCiAKICNlbmRpZiAvKiBibngyeC5oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmggYi9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKaW5kZXggM2I5Njg5MC4uZTNkYTdmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaApAQCAtOCwxOTEgKzgsMzkwIEBACiAgKi8KIAogCi0jZGVmaW5lIENTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgaW5kZXgpXAotCSgweDE5MjIgKyAocG9ydCAqIDB4NDApICsgKGluZGV4ICogMHg0KSkKLSNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQpXAotCSgweDE5MDAgKyAocG9ydCAqIDB4NDApKQotI2RlZmluZSBDU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KVwKLQkoMHgxOTg0ICsgKHBvcnQgKiAweGMwKSkKLSNkZWZpbmUgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpXAotCSgweDE0MWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIChpbmRleCAqIDB4NCkpCi0jZGVmaW5lIENTVE9STV9TQl9IQ19USU1FT1VUX09GRlNFVChwb3J0LCBjcHVfaWQsIGluZGV4KVwKLQkoMHgxNDE4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyAoaW5kZXggKiAweDQpKQotI2RlZmluZSBDU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBjcHVfaWQpXAotCSgweDE0MDAgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkKLSNkZWZpbmUgQ1NUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSAJCSgweDUxMDggKyAocG9ydCAqIDB4OCkpCi0jZGVmaW5lIFRTVE9STV9DTElFTlRfQ09ORklHX09GRlNFVChwb3J0LCBjbGllbnRfaWQpXAotCSgweDE1MTAgKyAocG9ydCAqIDB4MjQwKSArIChjbGllbnRfaWQgKiAweDIwKSkKLSNkZWZpbmUgVFNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBpbmRleClcCi0JKDB4MTM4YSArIChwb3J0ICogMHgyOCkgKyAoaW5kZXggKiAweDQpKQotI2RlZmluZSBUU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQocG9ydClcCi0JKDB4MTM3MCArIChwb3J0ICogMHgyOCkpCi0jZGVmaW5lIFRTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQocG9ydClcCi0JKDB4NGI3MCArIChwb3J0ICogMHg4KSkKLSNkZWZpbmUgVFNUT1JNX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfT0ZGU0VUKGZ1bmN0aW9uKVwKLQkoMHgxNDE4ICsgKGZ1bmN0aW9uICogMHgzMCkpCi0jZGVmaW5lIFRTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpXAotCSgweDEzYzQgKyAocG9ydCAqIDB4MTgpKQotI2RlZmluZSBUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfT0ZGU0VUKHBvcnQpXAotCSgweDIyYzggKyAocG9ydCAqIDB4ODApKQotI2RlZmluZSBUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfU0laRQkJCTB4ODAKLSNkZWZpbmUgVFNUT1JNX01BQ19GSUxURVJfQ09ORklHX09GRlNFVChwb3J0KVwKLQkoMHgxNDIwICsgKHBvcnQgKiAweDMwKSkKLSNkZWZpbmUgVFNUT1JNX1JDUV9QUk9EX09GRlNFVChwb3J0LCBjbGllbnRfaWQpXAotCSgweDE1MDggKyAocG9ydCAqIDB4MjQwKSArIChjbGllbnRfaWQgKiAweDIwKSkKLSNkZWZpbmUgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSAJCSgweDRiOTAgKyAocG9ydCAqIDB4OCkpCi0jZGVmaW5lIFVTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgaW5kZXgpXAotCSgweDE5MWEgKyAocG9ydCAqIDB4MjgpICsgKGluZGV4ICogMHg0KSkKLSNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQpXAotCSgweDE5MDAgKyAocG9ydCAqIDB4MjgpKQotI2RlZmluZSBVU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KVwKLQkoMHgxOTU0ICsgKHBvcnQgKiAweGI4KSkKLSNkZWZpbmUgVVNUT1JNX01FTV9XT1JLQVJPVU5EX0FERFJFU1NfT0ZGU0VUKHBvcnQpXAotCSgweDU0MDggKyAocG9ydCAqIDB4OCkpCi0jZGVmaW5lIFVTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBjcHVfaWQsIGluZGV4KVwKLQkoMHgxNDFhICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyAoaW5kZXggKiAweDQpKQotI2RlZmluZSBVU1RPUk1fU0JfSENfVElNRU9VVF9PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleClcCi0JKDB4MTQxOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgKGluZGV4ICogMHg0KSkKLSNkZWZpbmUgVVNUT1JNX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQocG9ydCwgY3B1X2lkKVwKLQkoMHgxNDAwICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpCi0jZGVmaW5lIFhTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQgCQkweDEwMDAKLSNkZWZpbmUgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpZHgpCQkJKDB4MTAyMCArIChpZHggKiAweDEwKSkKLSNkZWZpbmUgWFNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBpbmRleClcCi0JKDB4MTQxYSArIChwb3J0ICogMHgyOCkgKyAoaW5kZXggKiAweDQpKQotI2RlZmluZSBYU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQocG9ydClcCi0JKDB4MTQwMCArIChwb3J0ICogMHgyOCkpCi0jZGVmaW5lIFhTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQocG9ydClcCi0JKDB4NTQwOCArIChwb3J0ICogMHg4KSkKLSNkZWZpbmUgWFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydClcCi0JKDB4MTQ1NCArIChwb3J0ICogMHgxOCkpCi0jZGVmaW5lIFhTVE9STV9TUFFfUEFHRV9CQVNFX09GRlNFVChwb3J0KVwKLQkoMHg1MzI4ICsgKHBvcnQgKiAweDE4KSkKLSNkZWZpbmUgWFNUT1JNX1NQUV9QUk9EX09GRlNFVChwb3J0KVwKLQkoMHg1MzMwICsgKHBvcnQgKiAweDE4KSkKLSNkZWZpbmUgWFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSAJCSgweDUzZjggKyAocG9ydCAqIDB4OCkpCisjZGVmaW5lIENTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQgXAorCShJU19FMUhfT0ZGU0VUPyAweDcwMDAgOiAweDEwMDApCisjZGVmaW5lIENTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDcwMjAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCisjZGVmaW5lIENTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDg1MjIgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgKChmdW5jdGlvbiYxKSBcCisJKiAweDEwMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE5MjIgKyAoZnVuY3Rpb24gKiAweDQwKSArIChpbmRleCBcCisJKiAweDQpKSkKKyNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDg1MDAgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgKChmdW5jdGlvbiYxKSBcCisJKiAweDEwMCkpIDogKDB4MTkwMCArIChmdW5jdGlvbiAqIDB4NDApKSkKKyNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4ODUwOCArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyAoKGZ1bmN0aW9uJjEpIFwKKwkqIDB4MTAwKSkgOiAoMHgxOTA4ICsgKGZ1bmN0aW9uICogMHg0MCkpKQorI2RlZmluZSBDU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQgXAorCShJU19FMUhfT0ZGU0VUPyAweDExZTggOiAweGZmZmZmZmZmKQorI2RlZmluZSBDU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDg3MDQgKyAocG9ydCAqIDB4ZjApKSA6ICgweDE5ODQgKyAocG9ydCAqIDB4YzApKSkKKyNkZWZpbmUgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4ODAxYSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAorCShpbmRleCAqIDB4NCkpIDogKDB4MTQxYSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAorCShpbmRleCAqIDB4NCkpKQorI2RlZmluZSBDU1RPUk1fU0JfSENfVElNRU9VVF9PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleCkgXAorCShJU19FMUhfT0ZGU0VUPyAoMHg4MDE4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCisJKGluZGV4ICogMHg0KSkgOiAoMHgxNDE4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCisJKGluZGV4ICogMHg0KSkpCisjZGVmaW5lIENTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIGNwdV9pZCkgXAorCShJU19FMUhfT0ZGU0VUPyAoMHg4MDAwICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpIDogXAorCSgweDE0MDAgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkpCisjZGVmaW5lIENTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQocG9ydCwgY3B1X2lkKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDgwMDggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkgOiBcCisJKDB4MTQwOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSkKKyNkZWZpbmUgQ1NUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUPyAoMHgxMTA4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg1MTA4ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBUU1RPUk1fQVBQUk9YSU1BVEVfTUFUQ0hfTVVMVElDQVNUX0ZJTFRFUklOR19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4MzFjMCArIChmdW5jdGlvbiAqIDB4MjApKSA6IDB4ZmZmZmZmZmYpCisjZGVmaW5lIFRTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQgXAorCShJU19FMUhfT0ZGU0VUPyAweGEwMDAgOiAweDEwMDApCisjZGVmaW5lIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweGEwMjAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCisjZGVmaW5lIFRTVE9STV9DTElFTlRfQ09ORklHX09GRlNFVChwb3J0LCBjbGllbnRfaWQpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4MzM1OCArIChwb3J0ICogMHgzZTgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSA6IFwKKwkoMHg5YzggKyAocG9ydCAqIDB4MmY4KSArIChjbGllbnRfaWQgKiAweDI4KSkpCisjZGVmaW5lIFRTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweGIwMWEgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgKChmdW5jdGlvbiYxKSBcCisJKiAweGEwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTQxYSArIChmdW5jdGlvbiAqIDB4MjgpICsgKGluZGV4ICogXAorCTB4NCkpKQorI2RlZmluZSBUU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4YjAwMCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyAoKGZ1bmN0aW9uJjEpIFwKKwkqIDB4YTApKSA6ICgweDE0MDAgKyAoZnVuY3Rpb24gKiAweDI4KSkpCisjZGVmaW5lIFRTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweGIwMDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgKChmdW5jdGlvbiYxKSBcCisJKiAweGEwKSkgOiAoMHgxNDA4ICsgKGZ1bmN0aW9uICogMHgyOCkpKQorI2RlZmluZSBUU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDJiODAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDRiNjggKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFRTVE9STV9GVU5DVElPTl9DT01NT05fQ09ORklHX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUPyAoMHgzMDAwICsgKGZ1bmN0aW9uICogMHgzOCkpIDogKDB4MTUwMCArIFwKKwkoZnVuY3Rpb24gKiAweDM4KSkpCisjZGVmaW5lIFRTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCisJKElTX0UxSF9PRkZTRVQ/IDB4MWFkMCA6IDB4ZmZmZmZmZmYpCisjZGVmaW5lIFRTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4YjE0NCArIChwb3J0ICogMHgzMCkpIDogKDB4MTQ1NCArIChwb3J0ICogMHgxOCkpKQorI2RlZmluZSBUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDEyYzggKyAoZnVuY3Rpb24gKiAweDgwKSkgOiAoMHgyMmM4ICsgXAorCShmdW5jdGlvbiAqIDB4ODApKSkKKyNkZWZpbmUgVFNUT1JNX0lORElSRUNUSU9OX1RBQkxFX1NJWkUgMHg4MAorI2RlZmluZSBUU1RPUk1fTUFDX0ZJTFRFUl9DT05GSUdfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDMwMDggKyAoZnVuY3Rpb24gKiAweDM4KSkgOiAoMHgxNTA4ICsgXAorCShmdW5jdGlvbiAqIDB4MzgpKSkKKyNkZWZpbmUgVFNUT1JNX1JYX1BST0RTX09GRlNFVChwb3J0LCBjbGllbnRfaWQpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4MzM1MCArIChwb3J0ICogMHgzZTgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSA6IFwKKwkoMHg5YzAgKyAocG9ydCAqIDB4MmY4KSArIChjbGllbnRfaWQgKiAweDI4KSkpCisjZGVmaW5lIFRTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4MmMwMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NGI4OCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVFNUT1JNX1RQQV9FWElTVF9PRkZTRVQgKElTX0UxSF9PRkZTRVQ/IDB4M2IzMCA6IDB4MWMyMCkKKyNkZWZpbmUgVVNUT1JNX0FHR19EQVRBX09GRlNFVCAoSVNfRTFIX09GRlNFVD8gMHhhMDQwIDogMHgyYzEwKQorI2RlZmluZSBVU1RPUk1fQUdHX0RBVEFfU0laRSAoSVNfRTFIX09GRlNFVD8gMHgyNDQwIDogMHgxMjAwKQorI2RlZmluZSBVU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUIFwKKwkoSVNfRTFIX09GRlNFVD8gMHg4MDAwIDogMHgxMDAwKQorI2RlZmluZSBVU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGlkeCkgXAorCShJU19FMUhfT0ZGU0VUPyAoMHg4MDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQorI2RlZmluZSBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgY2xpZW50SWQpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4MzI5OCArIChwb3J0ICogMHgyNTgpICsgKGNsaWVudElkICogMHgxOCkpIDogXAorCSgweDU0NTAgKyAocG9ydCAqIDB4MWM4KSArIChjbGllbnRJZCAqIDB4MTgpKSkKKyNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4OTUxYSArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyAoKGZ1bmN0aW9uJjEpIFwKKwkqIDB4YTApICsgKGluZGV4ICogMHg0KSkgOiAoMHgxOTFhICsgKGZ1bmN0aW9uICogMHgyOCkgKyAoaW5kZXggKiBcCisJMHg0KSkpCisjZGVmaW5lIFVTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUPyAoMHg5NTAwICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArICgoZnVuY3Rpb24mMSkgXAorCSogMHhhMCkpIDogKDB4MTkwMCArIChmdW5jdGlvbiAqIDB4MjgpKSkKKyNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4OTUwOCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyAoKGZ1bmN0aW9uJjEpIFwKKwkqIDB4YTApKSA6ICgweDE5MDggKyAoZnVuY3Rpb24gKiAweDI4KSkpCisjZGVmaW5lIFVTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCisJKElTX0UxSF9PRkZTRVQ/IDB4MjQ0OCA6IDB4ZmZmZmZmZmYpCisjZGVmaW5lIFVTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4OTY0NCArIChwb3J0ICogMHhkMCkpIDogKDB4MTk1NCArIChwb3J0ICogMHhiOCkpKQorI2RlZmluZSBVU1RPUk1fTUFYX0FHR19TSVpFX09GRlNFVChwb3J0LCBjbGllbnRJZCkgXAorCShJU19FMUhfT0ZGU0VUPyAoMHgzMjkwICsgKHBvcnQgKiAweDI1OCkgKyAoY2xpZW50SWQgKiAweDE4KSkgOiBcCisJKDB4NTQ0OCArIChwb3J0ICogMHgxYzgpICsgKGNsaWVudElkICogMHgxOCkpKQorI2RlZmluZSBVU1RPUk1fTUVNX1dPUktBUk9VTkRfQUREUkVTU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4MjQwOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NTQwOCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4OTAxYSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAorCShpbmRleCAqIDB4NCkpIDogKDB4MTQxYSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAorCShpbmRleCAqIDB4NCkpKQorI2RlZmluZSBVU1RPUk1fU0JfSENfVElNRU9VVF9PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleCkgXAorCShJU19FMUhfT0ZGU0VUPyAoMHg5MDE4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCisJKGluZGV4ICogMHg0KSkgOiAoMHgxNDE4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCisJKGluZGV4ICogMHg0KSkpCisjZGVmaW5lIFVTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIGNwdV9pZCkgXAorCShJU19FMUhfT0ZGU0VUPyAoMHg5MDAwICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpIDogXAorCSgweDE0MDAgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkpCisjZGVmaW5lIFVTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQocG9ydCwgY3B1X2lkKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDkwMDggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkgOiBcCisJKDB4MTQwOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSkKKyNkZWZpbmUgWFNUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCBcCisJKElTX0UxSF9PRkZTRVQ/IDB4OTAwMCA6IDB4MTAwMCkKKyNkZWZpbmUgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpZHgpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4OTAyMCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKKyNkZWZpbmUgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgXAorCShJU19FMUhfT0ZGU0VUPyAoMHgyNGE4ICsgKHBvcnQgKiAweDQwKSkgOiAoMHgzYmEwICsgKHBvcnQgKiAweDQwKSkpCisjZGVmaW5lIFhTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweGEwMWEgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgKChmdW5jdGlvbiYxKSBcCisJKiAweGEwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTQxYSArIChmdW5jdGlvbiAqIDB4MjgpICsgKGluZGV4ICogXAorCTB4NCkpKQorI2RlZmluZSBYU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4YTAwMCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyAoKGZ1bmN0aW9uJjEpIFwKKwkqIDB4YTApKSA6ICgweDE0MDAgKyAoZnVuY3Rpb24gKiAweDI4KSkpCisjZGVmaW5lIFhTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweGEwMDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgKChmdW5jdGlvbiYxKSBcCisJKiAweGEwKSkgOiAoMHgxNDA4ICsgKGZ1bmN0aW9uICogMHgyOCkpKQorI2RlZmluZSBYU1RPUk1fRTFIT1ZfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDJhYjggKyAoZnVuY3Rpb24gKiAweDIpKSA6IDB4ZmZmZmZmZmYpCisjZGVmaW5lIFhTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4MjQxOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4M2I3MCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0ZBSVJORVNTX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUPyAoMHgyNTY4ICsgKGZ1bmN0aW9uICogMHg3MCkpIDogKDB4M2M2MCArIFwKKwkoZnVuY3Rpb24gKiAweDcwKSkpCisjZGVmaW5lIFhTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCisJKElTX0UxSF9PRkZTRVQ/IDB4MmFjOCA6IDB4ZmZmZmZmZmYpCisjZGVmaW5lIFhTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4YTE0NCArIChwb3J0ICogMHgzMCkpIDogKDB4MTQ1NCArIChwb3J0ICogMHgxOCkpKQorI2RlZmluZSBYU1RPUk1fUkFURV9TSEFQSU5HX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUPyAoMHgyNTI4ICsgKGZ1bmN0aW9uICogMHg3MCkpIDogKDB4M2MyMCArIFwKKwkoZnVuY3Rpb24gKiAweDcwKSkpCisjZGVmaW5lIFhTVE9STV9TUFFfUEFHRV9CQVNFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUPyAoMHgyMDAwICsgKGZ1bmN0aW9uICogMHgxMCkpIDogKDB4MzMyOCArIFwKKwkoZnVuY3Rpb24gKiAweDEwKSkpCisjZGVmaW5lIFhTVE9STV9TUFFfUFJPRF9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVD8gKDB4MjAwOCArIChmdW5jdGlvbiAqIDB4MTApKSA6ICgweDMzMzAgKyBcCisJKGZ1bmN0aW9uICogMHgxMCkpKQorI2RlZmluZSBYU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQ/ICgweDIzZDggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDNiNjAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFIDB4MAogCiAvKioKICogVGhpcyBmaWxlIGRlZmluZXMgSFNJIGNvbnN0YXRudHMgZm9yIHRoZSBFVEggZmxvdwogKi8KKyNpZmRlZiBfRVZFUkVTVF9NSUNST0NPREUKKyNpbmNsdWRlICJtaWNyb2NvZGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiZXRoX3J4X2JkLmgiCisjaW5jbHVkZSAiZXRoX3R4X2JkLmgiCisjaW5jbHVkZSAiZXRoX3J4X2NxZS5oIgorI2luY2x1ZGUgImV0aF9yeF9zZ2UuaCIKKyNpbmNsdWRlICJldGhfcnhfY3FlX25leHRfcGFnZS5oIgorI2VuZGlmCiAKLS8qIGhhc2ggdHlwZXMgKi8KLSNkZWZpbmUgREVGQVVMVF9IQVNIX1RZUEUJCQkwCi0jZGVmaW5lIElQVjRfSEFTSF9UWVBFCQkJCTEKLSNkZWZpbmUgVENQX0lQVjRfSEFTSF9UWVBFCQkJMgotI2RlZmluZSBJUFY2X0hBU0hfVFlQRQkJCQkzCi0jZGVmaW5lIFRDUF9JUFY2X0hBU0hfVFlQRQkJCTQKKy8qIFJTUyBoYXNoIHR5cGVzICovCisjZGVmaW5lIERFRkFVTFRfSEFTSF9UWVBFIDAKKyNkZWZpbmUgSVBWNF9IQVNIX1RZUEUgMQorI2RlZmluZSBUQ1BfSVBWNF9IQVNIX1RZUEUgMgorI2RlZmluZSBJUFY2X0hBU0hfVFlQRSAzCisjZGVmaW5lIFRDUF9JUFY2X0hBU0hfVFlQRSA0CisKKy8qIEV0aGVybmV0IFJpbmcgcGFybWF0ZXJzICovCisjZGVmaW5lIFhfRVRIX0xPQ0FMX1JJTkdfU0laRSAxMworI2RlZmluZSBGSVJTVF9CRF9JTl9QS1QgMAorI2RlZmluZSBQQVJTRV9CRF9JTkRFWCAxCisjZGVmaW5lIE5VTV9PRl9FVEhfQkRTX0lOX1BBR0UgXAorCSgoUEFHRV9TSVpFKSAvIChTVFJVQ1RfU0laRShldGhfdHhfYmQpLzgpKQorCisKKy8qIFJ4IHJpbmcgcGFyYW1zICovCisjZGVmaW5lIFVfRVRIX0xPQ0FMX0JEX1JJTkdfU0laRSAoMTYpCisjZGVmaW5lIFVfRVRIX0xPQ0FMX1NHRV9SSU5HX1NJWkUgKDEyKQorI2RlZmluZSBVX0VUSF9TR0xfU0laRSAoOCkKKworCisjZGVmaW5lIFVfRVRIX0JEU19QRVJfUEFHRV9NQVNLIFwKKwkoKFBBR0VfU0laRS8oU1RSVUNUX1NJWkUoZXRoX3J4X2JkKS84KSktMSkKKyNkZWZpbmUgVV9FVEhfQ1FFX1BFUl9QQUdFX01BU0sgXAorCSgoUEFHRV9TSVpFLyhTVFJVQ1RfU0laRShldGhfcnhfY3FlKS84KSktMSkKKyNkZWZpbmUgVV9FVEhfU0dFU19QRVJfUEFHRV9NQVNLIFwKKwkoKFBBR0VfU0laRS8oU1RSVUNUX1NJWkUoZXRoX3J4X3NnZSkvOCkpLTEpCisKKyNkZWZpbmUgVV9FVEhfU0dFU19QRVJfUEFHRV9JTlZFUlNFX01BU0sgXAorCSgweEZGRkYgLSAoKFBBR0VfU0laRS8oKFNUUlVDVF9TSVpFKGV0aF9yeF9zZ2UpKS84KSktMSkpCisKKworI2RlZmluZSBUVV9FVEhfQ1FFU19QRVJfUEFHRSBcCisJKFBBR0VfU0laRS8oU1RSVUNUX1NJWkUoZXRoX3J4X2NxZV9uZXh0X3BhZ2UpLzgpKQorI2RlZmluZSBVX0VUSF9CRFNfUEVSX1BBR0UgKFBBR0VfU0laRS8oU1RSVUNUX1NJWkUoZXRoX3J4X2JkKS84KSkKKyNkZWZpbmUgVV9FVEhfU0dFU19QRVJfUEFHRSAoUEFHRV9TSVpFLyhTVFJVQ1RfU0laRShldGhfcnhfc2dlKS84KSkKKworI2RlZmluZSBVX0VUSF9VTkRFRklORURfUSAweEZGCiAKIC8qIHZhbHVlcyBvZiBjb21tYW5kIElEcyBpbiB0aGUgcmFtcm9kIG1lc3NhZ2UgKi8KLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUAkJCSg4MCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQCQkJKDg1KQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TVEFUX1FVRVJZCQkJKDkwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9VUERBVEUJCQkoMTAwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9IQUxUCQkJCSgxMDUpCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMJCQkoMTEwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9DRkNfREVMCQkJKDExNSkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwJCQkoMTIwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9GT1JXQVJEX1NFVFVQIAkJKDEyNSkKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCAoODApCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCAoODUpCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1NUQVRfUVVFUlkgKDkwKQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9VUERBVEUgKDEwMCkKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCAoMTA1KQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDICgxMTApCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwgKDExNSkKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwgKDEyMCkKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfRk9SV0FSRF9TRVRVUCAoMTI1KQogCiAKIC8qIGNvbW1hbmQgdmFsdWVzIGZvciBzZXQgbWFjIGNvbW1hbmQgKi8KLSNkZWZpbmUgVF9FVEhfTUFDX0NPTU1BTkRfU0VUCQkJCTAKLSNkZWZpbmUgVF9FVEhfTUFDX0NPTU1BTkRfSU5WQUxJREFURQkJCTEKKyNkZWZpbmUgVF9FVEhfTUFDX0NPTU1BTkRfU0VUIDAKKyNkZWZpbmUgVF9FVEhfTUFDX0NPTU1BTkRfSU5WQUxJREFURSAxCiAKLSNkZWZpbmUgVF9FVEhfSU5ESVJFQ1RJT05fVEFCTEVfU0laRQkJCTEyOAorI2RlZmluZSBUX0VUSF9JTkRJUkVDVElPTl9UQUJMRV9TSVpFIDEyOAorCisvKlRoZSBDUkMzMiBzZWVkLCB0aGF0IGlzIHVzZWQgZm9yIHRoZSBoYXNoKHJlZHVjdGlvbikgbXVsdGljYXN0IGFkZHJlc3MgKi8KKyNkZWZpbmUgVF9FVEhfQ1JDMzJfSEFTSF9TRUVEIDB4MDAwMDAwMDAKIAogLyogTWF4aW1hbCBMMiBjbGllbnRzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBFVEhfTUFYX1JYX0NMSUVOVFMJCQkJKDE4KQorI2RlZmluZSBFVEhfTUFYX1JYX0NMSUVOVFNfRTEgMTkKKyNkZWZpbmUgRVRIX01BWF9SWF9DTElFTlRTX0UxSCAyNQorCisvKiBNYXhpbWFsIGFnZ3JlZ2F0aW9uIHF1ZXVlcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTEgKDMyKQorI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUggKDY0KQorCiAKIC8qKgogKiBUaGlzIGZpbGUgZGVmaW5lcyBIU0kgY29uc3RhdG50cyBjb21tb24gdG8gYWxsIG1pY3JvY29kZSBmbG93cwogKi8KIAogLyogQ29ubmVjdGlvbiB0eXBlcyAqLwotI2RlZmluZSBFVEhfQ09OTkVDVElPTl9UWVBFCQkJMAorI2RlZmluZSBFVEhfQ09OTkVDVElPTl9UWVBFIDAKKyNkZWZpbmUgVE9FX0NPTk5FQ1RJT05fVFlQRSAxCisjZGVmaW5lIFJETUFfQ09OTkVDVElPTl9UWVBFIDIKKyNkZWZpbmUgSVNDU0lfQ09OTkVDVElPTl9UWVBFIDMKKyNkZWZpbmUgRkNPRV9DT05ORUNUSU9OX1RZUEUgNAorI2RlZmluZSBSRVNFUlZFRF9DT05ORUNUSU9OX1RZUEVfMCA1CisjZGVmaW5lIFJFU0VSVkVEX0NPTk5FQ1RJT05fVFlQRV8xIDYKKyNkZWZpbmUgUkVTRVJWRURfQ09OTkVDVElPTl9UWVBFXzIgNwogCi0jZGVmaW5lIFBST1RPQ09MX1NUQVRFX0JJVF9PRkZTRVQJCTYKIAotI2RlZmluZSBFVEhfU1RBVEUJKEVUSF9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKKyNkZWZpbmUgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCA2CisKKyNkZWZpbmUgRVRIX1NUQVRFIChFVEhfQ09OTkVDVElPTl9UWVBFIDw8IFBST1RPQ09MX1NUQVRFX0JJVF9PRkZTRVQpCisjZGVmaW5lIFRPRV9TVEFURSAoVE9FX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQorI2RlZmluZSBSRE1BX1NUQVRFIChSRE1BX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQorI2RlZmluZSBJU0NTSV9TVEFURSBcCisJKElTQ1NJX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQorI2RlZmluZSBGQ09FX1NUQVRFIChGQ09FX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQogCiAvKiBtaWNyb2NvZGUgZml4ZWQgcGFnZSBwYWdlIHNpemUgNEsgKGNoYWlucyBhbmQgcmluZyBzZWdtZW50cykgKi8KLSNkZWZpbmUgTUNfUEFHRV9TSVpFCQkJCQkJKDQwOTYpCisjZGVmaW5lIE1DX1BBR0VfU0laRSAoNDA5NikKKwogCiAvKiBIb3N0IGNvYWxlc2NpbmcgY29uc3RhbnRzICovCiAKLS8qIElHVSBjb25zdGFudHMgKi8KLSNkZWZpbmUgSUdVX1BPUlRfQkFTRQkJCQkweDA0MDAKLQotI2RlZmluZSBJR1VfQUREUl9NU0lYCQkJCTB4MDAwMAotI2RlZmluZSBJR1VfQUREUl9JTlRfQUNLCQkJMHgwMjAwCi0jZGVmaW5lIElHVV9BRERSX1BST0RfVVBECQkJMHgwMjAxCi0jZGVmaW5lIElHVV9BRERSX0FUVE5fQklUU19VUEQJCQkweDAyMDIKLSNkZWZpbmUgSUdVX0FERFJfQVRUTl9CSVRTX1NFVAkJCTB4MDIwMwotI2RlZmluZSBJR1VfQUREUl9BVFROX0JJVFNfQ0xSCQkJMHgwMjA0Ci0jZGVmaW5lIElHVV9BRERSX0NPQUxFU0NFX05PVwkJCTB4MDIwNQotI2RlZmluZSBJR1VfQUREUl9TSU1EX01BU0sJCQkweDAyMDYKLSNkZWZpbmUgSUdVX0FERFJfU0lNRF9OT01BU0sJCQkweDAyMDcKLSNkZWZpbmUgSUdVX0FERFJfTVNJX0NUTAkJCTB4MDIxMAotI2RlZmluZSBJR1VfQUREUl9NU0lfQUREUl9MTwkJCTB4MDIxMQotI2RlZmluZSBJR1VfQUREUl9NU0lfQUREUl9ISQkJCTB4MDIxMgotI2RlZmluZSBJR1VfQUREUl9NU0lfREFUQQkJCTB4MDIxMwotCi0jZGVmaW5lIElHVV9JTlRfRU5BQkxFCQkJCTAKLSNkZWZpbmUgSUdVX0lOVF9ESVNBQkxFIAkJCTEKLSNkZWZpbmUgSUdVX0lOVF9OT1AJCQkJMgotI2RlZmluZSBJR1VfSU5UX05PUDIJCQkJMwotCiAvKiBpbmRleCBudW1iZXJzICovCi0jZGVmaW5lIEhDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVMJCTQKLSNkZWZpbmUgSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUwkJOAotI2RlZmluZSBIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTCQk0Ci0jZGVmaW5lIEhDX1RTVE9STV9ERUZfU0JfTlVNX0lORElDRVMJCTQKLSNkZWZpbmUgSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTCQk0Ci0jZGVmaW5lIEhDX0NTVE9STV9TQl9OVU1fSU5ESUNFUwkJNAorI2RlZmluZSBIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTIDQKKyNkZWZpbmUgSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA4CisjZGVmaW5lIEhDX1hTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgNAorI2RlZmluZSBIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTIDQKKyNkZWZpbmUgSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTIDQKKyNkZWZpbmUgSENfQ1NUT1JNX1NCX05VTV9JTkRJQ0VTIDQKIAogLyogaW5kZXggdmFsdWVzIC0gd2hpY2ggY291bnRlcnRvIHVwZGF0ZSAqLwogCi0jZGVmaW5lIEhDX0lOREVYX1VfRVRIX1JYX0NRX0NPTlMJCTEKKyNkZWZpbmUgSENfSU5ERVhfVV9UT0VfUlhfQ1FfQ09OUyAwCisjZGVmaW5lIEhDX0lOREVYX1VfRVRIX1JYX0NRX0NPTlMgMQorI2RlZmluZSBIQ19JTkRFWF9VX0VUSF9SWF9CRF9DT05TIDIKKyNkZWZpbmUgSENfSU5ERVhfVV9GQ09FX0VRX0NPTlMgMwogCi0jZGVmaW5lIEhDX0lOREVYX0NfRVRIX1RYX0NRX0NPTlMJCTEKKyNkZWZpbmUgSENfSU5ERVhfQ19UT0VfVFhfQ1FfQ09OUyAwCisjZGVmaW5lIEhDX0lOREVYX0NfRVRIX1RYX0NRX0NPTlMgMQorI2RlZmluZSBIQ19JTkRFWF9DX0lTQ1NJX0VRX0NPTlMgMgogCi0jZGVmaW5lIEhDX0lOREVYX0RFRl9YX1NQUV9DT05TIAkJMAorI2RlZmluZSBIQ19JTkRFWF9ERUZfWF9TUFFfQ09OUyAwCiAKLSNkZWZpbmUgSENfSU5ERVhfREVGX0NfRVRIX0ZXX1RYX0NRX0NPTlMJMgotI2RlZmluZSBIQ19JTkRFWF9ERUZfQ19FVEhfU0xPV19QQVRICQkzCisjZGVmaW5lIEhDX0lOREVYX0RFRl9DX1JETUFfRVFfQ09OUyAwCisjZGVmaW5lIEhDX0lOREVYX0RFRl9DX1JETUFfTkFMX1BST0QgMQorI2RlZmluZSBIQ19JTkRFWF9ERUZfQ19FVEhfRldfVFhfQ1FfQ09OUyAyCisjZGVmaW5lIEhDX0lOREVYX0RFRl9DX0VUSF9TTE9XX1BBVEggMworI2RlZmluZSBIQ19JTkRFWF9ERUZfQ19FVEhfUkRNQV9DUV9DT05TIDQKKyNkZWZpbmUgSENfSU5ERVhfREVGX0NfRVRIX0lTQ1NJX0NRX0NPTlMgNQorCisjZGVmaW5lIEhDX0lOREVYX0RFRl9VX0VUSF9SRE1BX1JYX0NRX0NPTlMgMAorI2RlZmluZSBIQ19JTkRFWF9ERUZfVV9FVEhfSVNDU0lfUlhfQ1FfQ09OUyAxCisjZGVmaW5lIEhDX0lOREVYX0RFRl9VX0VUSF9SRE1BX1JYX0JEX0NPTlMgMgorI2RlZmluZSBIQ19JTkRFWF9ERUZfVV9FVEhfSVNDU0lfUlhfQkRfQ09OUyAzCisKIAogLyogdXNlZCBieSB0aGUgZHJpdmVyIHRvIGdldCB0aGUgU0Igb2Zmc2V0ICovCi0jZGVmaW5lIFVTVE9STV9JRAkJCTAKLSNkZWZpbmUgQ1NUT1JNX0lECQkJMQotI2RlZmluZSBYU1RPUk1fSUQJCQkyCi0jZGVmaW5lIFRTVE9STV9JRAkJCTMKLSNkZWZpbmUgQVRURU5USU9OX0lECQkJNAorI2RlZmluZSBVU1RPUk1fSUQgMAorI2RlZmluZSBDU1RPUk1fSUQgMQorI2RlZmluZSBYU1RPUk1fSUQgMgorI2RlZmluZSBUU1RPUk1fSUQgMworI2RlZmluZSBBVFRFTlRJT05fSUQgNAogCiAvKiBtYXggbnVtYmVyIG9mIHNsb3cgcGF0aCBjb21tYW5kcyBwZXIgcG9ydCAqLwotI2RlZmluZSBNQVhfUkFNUk9EU19QRVJfUE9SVAkJKDgpCisjZGVmaW5lIE1BWF9SQU1ST0RTX1BFUl9QT1JUICg4KQogCiAvKiB2YWx1ZXMgZm9yIFJYIEVUSCBDUUUgdHlwZSBmaWVsZCAqLwotI2RlZmluZSBSWF9FVEhfQ1FFX1RZUEVfRVRIX0ZBU1RQQVRICSgwKQotI2RlZmluZSBSWF9FVEhfQ1FFX1RZUEVfRVRIX1JBTVJPRAkJKDEpCisjZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfRkFTVFBBVEggKDApCisjZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfUkFNUk9EICgxKQogCi0vKiBNQUMgYWRkcmVzcyBsaXN0IHNpemUgKi8KLSNkZWZpbmUgVF9NQUNfQUREUkVTU19MSVNUX1NJWkUgCSg5NikKIAorLyoqKiogREVGSU5FUyBGT1IgVElNRVJTL0NMT0NLUyBSRVNPTFVUSU9OUyAqKioqLworI2RlZmluZSBFTVVMQVRJT05fRlJFUVVFTkNZX0ZBQ1RPUiAoMTYwMCkKKyNkZWZpbmUgRlBHQV9GUkVRVUVOQ1lfRkFDVE9SICgxMDApCisKKyNkZWZpbmUgVElNRVJTX1RJQ0tfU0laRV9DSElQICgxZS0zKQorI2RlZmluZSBUSU1FUlNfVElDS19TSVpFX0VNVUwgXAorICgoVElNRVJTX1RJQ0tfU0laRV9DSElQKS8oKEVNVUxBVElPTl9GUkVRVUVOQ1lfRkFDVE9SKSkpCisjZGVmaW5lIFRJTUVSU19USUNLX1NJWkVfRlBHQSBcCisgKChUSU1FUlNfVElDS19TSVpFX0NISVApLygoRlBHQV9GUkVRVUVOQ1lfRkFDVE9SKSkpCisKKyNkZWZpbmUgVFNFTUlfQ0xLMV9SRVNVTF9DSElQICgxZS0zKQorI2RlZmluZSBUU0VNSV9DTEsxX1JFU1VMX0VNVUwgXAorICgoVFNFTUlfQ0xLMV9SRVNVTF9DSElQKS8oRU1VTEFUSU9OX0ZSRVFVRU5DWV9GQUNUT1IpKQorI2RlZmluZSBUU0VNSV9DTEsxX1JFU1VMX0ZQR0EgXAorICgoVFNFTUlfQ0xLMV9SRVNVTF9DSElQKS8oRlBHQV9GUkVRVUVOQ1lfRkFDVE9SKSkKKworI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0NISVAgXAorIChUSU1FUlNfVElDS19TSVpFX0NISVApCisjZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfRU1VTCBcCisgKFRJTUVSU19USUNLX1NJWkVfRU1VTCkKKyNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9GUEdBIFwKKyAoVElNRVJTX1RJQ0tfU0laRV9GUEdBKQorCisjZGVmaW5lIFhTRU1JX0NMSzFfUkVTVUxfQ0hJUCAoMWUtMykKKyNkZWZpbmUgWFNFTUlfQ0xLMV9SRVNVTF9FTVVMIFwKKyAoKFhTRU1JX0NMSzFfUkVTVUxfQ0hJUCkvKEVNVUxBVElPTl9GUkVRVUVOQ1lfRkFDVE9SKSkKKyNkZWZpbmUgWFNFTUlfQ0xLMV9SRVNVTF9GUEdBIFwKKyAoKFhTRU1JX0NMSzFfUkVTVUxfQ0hJUCkvKEZQR0FfRlJFUVVFTkNZX0ZBQ1RPUikpCisKKyNkZWZpbmUgWFNFTUlfQ0xLMl9SRVNVTF9DSElQICgxZS02KQorI2RlZmluZSBYU0VNSV9DTEsyX1JFU1VMX0VNVUwgXAorICgoWFNFTUlfQ0xLMl9SRVNVTF9DSElQKS8oRU1VTEFUSU9OX0ZSRVFVRU5DWV9GQUNUT1IpKQorI2RlZmluZSBYU0VNSV9DTEsyX1JFU1VMX0ZQR0EgXAorICgoWFNFTUlfQ0xLMl9SRVNVTF9DSElQKS8oRlBHQV9GUkVRVUVOQ1lfRkFDVE9SKSkKKworI2RlZmluZSBTRE1fVElNRVJfVElDS19SRVNVTF9DSElQICg0KigxZS02KSkKKyNkZWZpbmUgU0RNX1RJTUVSX1RJQ0tfUkVTVUxfRU1VTCBcCisgKChTRE1fVElNRVJfVElDS19SRVNVTF9DSElQKS8oRU1VTEFUSU9OX0ZSRVFVRU5DWV9GQUNUT1IpKQorI2RlZmluZSBTRE1fVElNRVJfVElDS19SRVNVTF9GUEdBIFwKKyAoKFNETV9USU1FUl9USUNLX1JFU1VMX0NISVApLyhGUEdBX0ZSRVFVRU5DWV9GQUNUT1IpKQorCisKKy8qKioqIEVORCBERUZJTkVTIEZPUiBUSU1FUlMvQ0xPQ0tTIFJFU09MVVRJT05TICoqKiovCiAjZGVmaW5lIFhTVE9STV9JUF9JRF9ST0xMX0hBTEYgMHg4MDAwCiAjZGVmaW5lIFhTVE9STV9JUF9JRF9ST0xMX0FMTCAwCiAKLSNkZWZpbmUgRldfTE9HX0xJU1RfU0laRQkoNTApCisjZGVmaW5lIEZXX0xPR19MSVNUX1NJWkUgKDUwKQogCi0jZGVmaW5lIE5VTV9PRl9QUk9UT0NPTFMJCTQKLSNkZWZpbmUgTUFYX0NPU19OVU1CRVIJCQkxNgotI2RlZmluZSBNQVhfVF9TVEFUX0NPVU5URVJfSUQJMTgKKyNkZWZpbmUgTlVNX09GX1BST1RPQ09MUyA0CisjZGVmaW5lIE1BWF9DT1NfTlVNQkVSIDE2CisjZGVmaW5lIE1BWF9UX1NUQVRfQ09VTlRFUl9JRCAxOAorI2RlZmluZSBNQVhfWF9TVEFUX0NPVU5URVJfSUQgMTgKIAotI2RlZmluZSBUX0ZBSVIJCQkJCQkJMQotI2RlZmluZSBGQUlSX01FTQkJCQkJCTIKLSNkZWZpbmUgUlNfUEVSSU9ESUNfVElNRU9VVF9JTl9TRE1fVElDUyAyNQorI2RlZmluZSBVTktOT1dOX0FERFJFU1MgMAorI2RlZmluZSBVTklDQVNUX0FERFJFU1MgMQorI2RlZmluZSBNVUxUSUNBU1RfQUREUkVTUyAyCisjZGVmaW5lIEJST0FEQ0FTVF9BRERSRVNTIDMKIAotI2RlZmluZSBVTktOT1dOX0FERFJFU1MgCTAKLSNkZWZpbmUgVU5JQ0FTVF9BRERSRVNTIAkxCi0jZGVmaW5lIE1VTFRJQ0FTVF9BRERSRVNTCTIKLSNkZWZpbmUgQlJPQURDQVNUX0FERFJFU1MJMworI2RlZmluZSBTSU5HTEVfRlVOQ1RJT04gMAorI2RlZmluZSBNVUxUSV9GVU5DVElPTiAxCisKKyNkZWZpbmUgSVBfVjQgMAorI2RlZmluZSBJUF9WNiAxCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oIGIvZHJpdmVycy9uZXQvYm54MnhfaHNpLmgKaW5kZXggYjIxMDc1Yy4uZDNlODE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfaHNpLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaHNpLmgKQEAgLTEzMiw2ICsxMzIsMTIgQEAKICNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDAzRyAgICAweDAwMDAwMDA4CiAjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkcgICAgMHgwMDAwMDAwOQogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjFHICAgIDB4MDAwMDAwMGEKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIzRyAgICAweDAwMDAwMDBiCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAzM0cgICAgMHgwMDAwMDAwYworI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzExVDExMDEgICAgIDB4MDAwMDAwMGQKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMUVUMTIwMSAgICAweDAwMDAwMDBlCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTFBMTEzM0cgICAgMHgwMDAwMDAwZgorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzExRUExMjMzRyAgIDB4MDAwMDAwMTAKIAogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1ZFUl9NQVNLCQkgICAgMHhmZmZmMDAwMAogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1ZFUl9TSElGVAkJICAgIDE2CkBAIC0zMTMsNiArMzE5LDcgQEAKIAogCXUzMiBjb25maWc7CQkJCQkJLyogMHg0NTAgKi8KICNkZWZpbmUgU0hBUkVEX0ZFQVRVUkVfQk1DX0VDSE9fTU9ERV9FTiAJICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0hBUkVEX0ZFQVRVUkVfTUZfTU9ERV9ESVNBQkxFRCAJICAgIDB4MDAwMDAxMDAKIAogfTsKIApAQCAtNTAyLDI4ICs1MDksNDEgQEAKIH07CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEZXZpY2UgSW5mb3JtYXRpb24JCQkJCQkJICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgZGV2X2luZm8gewkJCQkJCSAgICAgLyogc2l6ZSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERldmljZSBJbmZvcm1hdGlvbgkJCQkJCQkgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgZGV2X2luZm8gewkJCQkJCSAgICAvKiBzaXplICovCiAKLQl1MzIgICAgYmNfcmV2OyAvKiA4IGJpdHMgZWFjaDogbWFqb3IsIG1pbm9yLCBidWlsZCAqLwkgICAgICAgIC8qIDQgKi8KKwl1MzIgICAgYmNfcmV2OyAvKiA4IGJpdHMgZWFjaDogbWFqb3IsIG1pbm9yLCBidWlsZCAqLwkgICAgICAgLyogNCAqLwogCi0Jc3RydWN0IHNoYXJlZF9od19jZmcJIHNoYXJlZF9od19jb25maWc7CQkgICAgICAgLyogNDAgKi8KKwlzdHJ1Y3Qgc2hhcmVkX2h3X2NmZwkgc2hhcmVkX2h3X2NvbmZpZzsJCSAgICAgIC8qIDQwICovCiAKLQlzdHJ1Y3QgcG9ydF9od19jZmcJIHBvcnRfaHdfY29uZmlnW1BPUlRfTUFYXTsgICAgICAvKiA0MDAqMj04MDAgKi8KKwlzdHJ1Y3QgcG9ydF9od19jZmcJIHBvcnRfaHdfY29uZmlnW1BPUlRfTUFYXTsgICAgIC8qIDQwMCoyPTgwMCAqLwogCi0Jc3RydWN0IHNoYXJlZF9mZWF0X2NmZwkgc2hhcmVkX2ZlYXR1cmVfY29uZmlnOyAJICAgICAgICAvKiA0ICovCisJc3RydWN0IHNoYXJlZF9mZWF0X2NmZwkgc2hhcmVkX2ZlYXR1cmVfY29uZmlnOyAJICAgICAgIC8qIDQgKi8KIAotCXN0cnVjdCBwb3J0X2ZlYXRfY2ZnCSBwb3J0X2ZlYXR1cmVfY29uZmlnW1BPUlRfTUFYXTsgLyogMTE2KjI9MjMyICovCisJc3RydWN0IHBvcnRfZmVhdF9jZmcJIHBvcnRfZmVhdHVyZV9jb25maWdbUE9SVF9NQVhdOy8qIDExNioyPTIzMiAqLwogCiB9OwogCiAKICNkZWZpbmUgRlVOQ18wCQkJCTAKICNkZWZpbmUgRlVOQ18xCQkJCTEKKyNkZWZpbmUgRlVOQ18yCQkJCTIKKyNkZWZpbmUgRlVOQ18zCQkJCTMKKyNkZWZpbmUgRlVOQ180CQkJCTQKKyNkZWZpbmUgRlVOQ181CQkJCTUKKyNkZWZpbmUgRlVOQ182CQkJCTYKKyNkZWZpbmUgRlVOQ183CQkJCTcKICNkZWZpbmUgRTFfRlVOQ19NQVgJCQkyCi0jZGVmaW5lIEZVTkNfTUFYCQkJRTFfRlVOQ19NQVgKKyNkZWZpbmUgRTFIX0ZVTkNfTUFYCQkJOAorCisjZGVmaW5lIFZOXzAJCQkJMAorI2RlZmluZSBWTl8xCQkJCTEKKyNkZWZpbmUgVk5fMgkJCQkyCisjZGVmaW5lIFZOXzMJCQkJMworI2RlZmluZSBFMVZOX01BWAkJCTEKKyNkZWZpbmUgRTFIVk5fTUFYCQkJNAogCiAKIC8qIFRoaXMgdmFsdWUgKGluIG1pbGxpc2Vjb25kcykgZGV0ZXJtaW5lcyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBkcml2ZXIKQEAgLTYxOSw3ICs2MzksOSBAQAogI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTVHWEZEX0NBUEFCTEUgCTB4MDgwMDAwMDAKICNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzE2R1hGRF9DQVBBQkxFIAkweDEwMDAwMDAwCiAKLQl1MzIgcmVzZXJ2ZWRbM107CisJdTMyIHBvcnRfc3R4OworCisJdTMyIHJlc2VydmVkWzJdOwogCiB9OwogCkBAIC02NDIsNiArNjY0LDExIEBACiAjZGVmaW5lIERSVl9NU0dfQ09ERV9HRVRfTUFOVUZfS0VZCQkJMHg4MjAwMDAwMAogI2RlZmluZSBEUlZfTVNHX0NPREVfTE9BRF9MMkJfUFJBTQkJCTB4OTAwMDAwMDAKIAorI2RlZmluZSBCSU9TX01TR19DT0RFX0xJQ19DSEFMTEVOR0UJCQkweGZmMDEwMDAwCisjZGVmaW5lIEJJT1NfTVNHX0NPREVfTElDX1JFU1BPTlNFCQkJMHhmZjAyMDAwMAorI2RlZmluZSBCSU9TX01TR19DT0RFX1ZJUlRfTUFDX1BSSU0JCQkweGZmMDMwMDAwCisjZGVmaW5lIEJJT1NfTVNHX0NPREVfVklSVF9NQUNfSVNDU0kJCQkweGZmMDQwMDAwCisKICNkZWZpbmUgRFJWX01TR19TRVFfTlVNQkVSX01BU0sgCQkJMHgwMDAwZmZmZgogCiAJdTMyIGRydl9tYl9wYXJhbTsKQEAgLTY3MSw2ICs2OTgsMTEgQEAKICNkZWZpbmUgRldfTVNHX0NPREVfTDJCX1BSQU1fWF9MT0FEX0ZBSUxVUkUJCTB4OTAyMzAwMDAKICNkZWZpbmUgRldfTVNHX0NPREVfTDJCX1BSQU1fVV9MT0FEX0ZBSUxVUkUJCTB4OTAyNDAwMDAKIAorI2RlZmluZSBGV19NU0dfQ09ERV9MSUNfQ0hBTExFTkdFCQkJMHhmZjAxMDAwMAorI2RlZmluZSBGV19NU0dfQ09ERV9MSUNfUkVTUE9OU0UJCQkweGZmMDIwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX1ZJUlRfTUFDX1BSSU0JCQkweGZmMDMwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX1ZJUlRfTUFDX0lTQ1NJCQkJMHhmZjA0MDAwMAorCiAjZGVmaW5lIEZXX01TR19TRVFfTlVNQkVSX01BU0sJCQkJMHgwMDAwZmZmZgogCiAJdTMyIGZ3X21iX3BhcmFtOwpAQCAtNjk2LDcgKzcyOCwxMyBAQAogCXUzMiBpc2NzaV9ib290X3NpZ25hdHVyZTsKIAl1MzIgaXNjc2lfYm9vdF9ibG9ja19vZmZzZXQ7CiAKLQl1MzIgcmVzZXJ2ZWRbM107CisJdTMyIGRydl9zdGF0dXM7CisjZGVmaW5lIERSVl9TVEFUVVNfUE1GCQkJCQkweDAwMDAwMDAxCisKKwl1MzIgdmlydF9tYWNfdXBwZXI7CisjZGVmaW5lIFZJUlRfTUFDX1NJR05fTUFTSwkJCQkweGZmZmYwMDAwCisjZGVmaW5lIFZJUlRfTUFDX1NJR05BVFVSRQkJCQkweDU2NGQwMDAwCisJdTMyIHZpcnRfbWFjX2xvd2VyOwogCiB9OwogCkBAIC03MTMsNiArNzUxLDkyIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE11bHRpLUZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24gCQkJCQkgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qgc2hhcmVkX21mX2NmZyB7CisKKwl1MzIgY2xwX21iOworI2RlZmluZSBTSEFSRURfTUZfQ0xQX1NFVF9ERUZBVUxUCQkgICAgMHgwMDAwMDAwMAorCS8qIHNldCBieSBDTFAgKi8KKyNkZWZpbmUgU0hBUkVEX01GX0NMUF9FWElUCQkJICAgIDB4MDAwMDAwMDEKKwkvKiBzZXQgYnkgTUNQICovCisjZGVmaW5lIFNIQVJFRF9NRl9DTFBfRVhJVF9ET05FIAkJICAgIDB4MDAwMTAwMDAKKworfTsKKworc3RydWN0IHBvcnRfbWZfY2ZnIHsKKworCXUzMiBkeW5hbWljX2NmZzsJLyogZGV2aWNlIGNvbnRyb2wgY2hhbm5lbCAqLworI2RlZmluZSBQT1JUX01GX0NGR19PVVRFUl9WTEFOX1RBR19NQVNLIAkgICAgMHgwMDAwZmZmZgorI2RlZmluZSBQT1JUX01GX0NGR19PVVRFUl9WTEFOX1RBR19TSElGVAkgICAgMAorI2RlZmluZSBQT1JUX01GX0NGR19EWU5BTUlDX0NGR19FTkFCTEVEIAkgICAgMHgwMDAxMDAwMAorI2RlZmluZSBQT1JUX01GX0NGR19EWU5BTUlDX0NGR19ERUZBVUxUIAkgICAgMHgwMDAwMDAwMAorCisJdTMyIHJlc2VydmVkWzNdOworCit9OworCitzdHJ1Y3QgZnVuY19tZl9jZmcgeworCisJdTMyIGNvbmZpZzsKKwkvKiBFL1IvSS9EICovCisJLyogZnVuY3Rpb24gMCBvZiBlYWNoIHBvcnQgY2Fubm90IGJlIGhpZGRlbiAqLworI2RlZmluZSBGVU5DX01GX0NGR19GVU5DX0hJREUJCQkgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIEZVTkNfTUZfQ0ZHX1BST1RPQ09MX01BU0sJCSAgICAweDAwMDAwMDA3CisjZGVmaW5lIEZVTkNfTUZfQ0ZHX1BST1RPQ09MX0VUSEVSTkVUCQkgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGVU5DX01GX0NGR19QUk9UT0NPTF9FVEhFUk5FVF9XSVRIX1JETUEgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRlVOQ19NRl9DRkdfUFJPVE9DT0xfSVNDU0kJCSAgICAweDAwMDAwMDA2CisjZGVmaW5lIEZVTkNfTUZfQ0ZHX1BST1RPQ09MX0RFRkFVTFRcCisJRlVOQ19NRl9DRkdfUFJPVE9DT0xfRVRIRVJORVRfV0lUSF9SRE1BCisKKyNkZWZpbmUgRlVOQ19NRl9DRkdfRlVOQ19ESVNBQkxFRAkJICAgIDB4MDAwMDAwMDgKKworCS8qIFBSSSAqLworCS8qIDAgLSBsb3cgcHJpb3JpdHksIDMgLSBoaWdoIHByaW9yaXR5ICovCisjZGVmaW5lIEZVTkNfTUZfQ0ZHX1RSQU5TTUlUX1BSSU9SSVRZX01BU0sJICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgRlVOQ19NRl9DRkdfVFJBTlNNSVRfUFJJT1JJVFlfU0hJRlQJICAgIDgKKyNkZWZpbmUgRlVOQ19NRl9DRkdfVFJBTlNNSVRfUFJJT1JJVFlfREVGQVVMVAkgICAgMHgwMDAwMDAwMAorCisJLyogTUlOQlcsIE1BWEJXICovCisJLyogdmFsdWUgcmFuZ2UgLSAwLi4xMDAsIGluY3JlbWVudHMgaW4gMTAwTWJwcyAqLworI2RlZmluZSBGVU5DX01GX0NGR19NSU5fQldfTUFTSyAJCSAgICAweDAwZmYwMDAwCisjZGVmaW5lIEZVTkNfTUZfQ0ZHX01JTl9CV19TSElGVAkJICAgIDE2CisjZGVmaW5lIEZVTkNfTUZfQ0ZHX01JTl9CV19ERUZBVUxUCQkgICAgMHgwMDAwMDAwMAorI2RlZmluZSBGVU5DX01GX0NGR19NQVhfQldfTUFTSyAJCSAgICAweGZmMDAwMDAwCisjZGVmaW5lIEZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVAkJICAgIDI0CisjZGVmaW5lIEZVTkNfTUZfQ0ZHX01BWF9CV19ERUZBVUxUCQkgICAgMHg2NDAwMDAwMAorCisJdTMyIG1hY191cHBlcjsJCS8qIE1BQyAqLworI2RlZmluZSBGVU5DX01GX0NGR19VUFBFUk1BQ19NQVNLCQkgICAgMHgwMDAwZmZmZgorI2RlZmluZSBGVU5DX01GX0NGR19VUFBFUk1BQ19TSElGVAkJICAgIDAKKyNkZWZpbmUgRlVOQ19NRl9DRkdfVVBQRVJNQUNfREVGQVVMVAkJICAgIEZVTkNfTUZfQ0ZHX1VQUEVSTUFDX01BU0sKKwl1MzIgbWFjX2xvd2VyOworI2RlZmluZSBGVU5DX01GX0NGR19MT1dFUk1BQ19ERUZBVUxUCQkgICAgMHhmZmZmZmZmZgorCisJdTMyIGUxaG92X3RhZzsJLyogVk5JICovCisjZGVmaW5lIEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19NQVNLCQkgICAgMHgwMDAwZmZmZgorI2RlZmluZSBGVU5DX01GX0NGR19FMUhPVl9UQUdfU0hJRlQJCSAgICAwCisjZGVmaW5lIEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19ERUZBVUxUCQkgICAgRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX01BU0sKKworCXUzMiByZXNlcnZlZFsyXTsKKworfTsKKworc3RydWN0IG1mX2NmZyB7CisKKwlzdHJ1Y3Qgc2hhcmVkX21mX2NmZwlzaGFyZWRfbWZfY29uZmlnOworCXN0cnVjdCBwb3J0X21mX2NmZwlwb3J0X21mX2NvbmZpZ1tQT1JUX01BWF07CisjaWYgZGVmaW5lZChiNzEwKQorCXN0cnVjdCBmdW5jX21mX2NmZwlmdW5jX21mX2NvbmZpZ1tFMV9GVU5DX01BWF07CisjZWxzZQorCXN0cnVjdCBmdW5jX21mX2NmZwlmdW5jX21mX2NvbmZpZ1tFMUhfRlVOQ19NQVhdOworI2VuZGlmCisKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNoYXJlZCBNZW1vcnkgUmVnaW9uIAkJCQkJCSAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBzaG1lbV9yZWdpb24gewkJCSAgICAgICAvKiAgIFNoYXJlZE1lbSBPZmZzZXQgKHNpemUpICovCkBAIC03NDcsMTQgKzg3MSwzNDkgQEAKIAlzdHJ1Y3QgbWdtdGZ3X3N0YXRlCW1nbXRmd19zdGF0ZTsJICAgICAgIC8qIDB4NGFjICAgICAoMHgxYjgpICovCiAKIAlzdHJ1Y3QgZHJ2X3BvcnRfbWIJcG9ydF9tYltQT1JUX01BWF07ICAgICAvKiAweDY2NCAoMTYqMj0weDIwKSAqLwotCXN0cnVjdCBkcnZfZnVuY19tYglmdW5jX21iW0ZVTkNfTUFYXTsgICAgIC8qIDB4Njg0ICg0NCoyPTB4NTgpICovCisJc3RydWN0IGRydl9mdW5jX21iCWZ1bmNfbWJbRTFIX0ZVTkNfTUFYXTsKKworCXN0cnVjdCBtZl9jZmcJCW1mX2NmZzsKIAogfTsJCQkJCQkgICAgICAgLyogMHg2ZGMgKi8KIAogCitzdHJ1Y3QgZW1hY19zdGF0cyB7CisgICAgdTMyICAgICByeF9zdGF0X2lmaGNpbm9jdGV0czsKKyAgICB1MzIgICAgIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzOworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzOworICAgIHUzMiAgICAgcnhfc3RhdF9pZmhjaW51Y2FzdHBrdHM7CisgICAgdTMyICAgICByeF9zdGF0X2lmaGNpbm11bHRpY2FzdHBrdHM7CisgICAgdTMyICAgICByeF9zdGF0X2lmaGNpbmJyb2FkY2FzdHBrdHM7CisgICAgdTMyICAgICByeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yczsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzOworICAgIHUzMiAgICAgcnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnM7CisgICAgdTMyICAgICByeF9zdGF0X3hvbnBhdXNlZnJhbWVzcmVjZWl2ZWQ7CisgICAgdTMyICAgICByeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkOworICAgIHUzMiAgICAgcnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWQ7CisgICAgdTMyICAgICByeF9zdGF0X3hvZmZzdGF0ZWVudGVyZWQ7CisgICAgdTMyICAgICByeF9zdGF0X2RvdDNzdGF0c2ZyYW1lc3Rvb2xvbmc7CisgICAgdTMyICAgICByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzOworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0czsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NG9jdGV0czsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NW9jdGV0c3RvMTI3b2N0ZXRzOworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzcGt0czEyOG9jdGV0c3RvMjU1b2N0ZXRzOworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzcGt0czI1Nm9jdGV0c3RvNTExb2N0ZXRzOworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzcGt0czUxMm9jdGV0c3RvMTAyM29jdGV0czsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzOworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzOworCisgICAgdTMyICAgICByeF9zdGF0X2ZhbHNlY2FycmllcmVycm9yczsKKworICAgIHUzMiAgICAgdHhfc3RhdF9pZmhjb3V0b2N0ZXRzOworICAgIHUzMiAgICAgdHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzOworICAgIHUzMiAgICAgdHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uczsKKyAgICB1MzIgICAgIHR4X3N0YXRfb3V0eG9uc2VudDsKKyAgICB1MzIgICAgIHR4X3N0YXRfb3V0eG9mZnNlbnQ7CisgICAgdTMyICAgICB0eF9zdGF0X2Zsb3djb250cm9sZG9uZTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzc2luZ2xlY29sbGlzaW9uZnJhbWVzOworICAgIHUzMiAgICAgdHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lczsKKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzZGVmZXJyZWR0cmFuc21pc3Npb25zOworICAgIHUzMiAgICAgdHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zOworICAgIHUzMiAgICAgdHhfc3RhdF9kb3Qzc3RhdHNsYXRlY29sbGlzaW9uczsKKyAgICB1MzIgICAgIHR4X3N0YXRfaWZoY291dHVjYXN0cGt0czsKKyAgICB1MzIgICAgIHR4X3N0YXRfaWZoY291dG11bHRpY2FzdHBrdHM7CisgICAgdTMyICAgICB0eF9zdGF0X2lmaGNvdXRicm9hZGNhc3Rwa3RzOworICAgIHUzMiAgICAgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czY0b2N0ZXRzOworICAgIHUzMiAgICAgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHM7CisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHM7CisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHM7CisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzOworICAgIHUzMiAgICAgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHM7CisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHM7CisgICAgdTMyICAgICB0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnM7Cit9OworCisKK3N0cnVjdCBibWFjX3N0YXRzIHsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3Rwa3RfbG87CisgICAgdTMyICAgICB0eF9zdGF0X2d0cGt0X2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ndHhwZl9sbzsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3R4cGZfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2d0ZmNzX2xvOworICAgIHUzMiAgICAgdHhfc3RhdF9ndGZjc19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3RtY2FfbG87CisgICAgdTMyICAgICB0eF9zdGF0X2d0bWNhX2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ndGJjYV9sbzsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3RiY2FfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2d0ZnJnX2xvOworICAgIHUzMiAgICAgdHhfc3RhdF9ndGZyZ19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3RvdnJfbG87CisgICAgdTMyICAgICB0eF9zdGF0X2d0b3ZyX2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ndDY0X2xvOworICAgIHUzMiAgICAgdHhfc3RhdF9ndDY0X2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ndDEyN19sbzsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3QxMjdfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2d0MjU1X2xvOworICAgIHUzMiAgICAgdHhfc3RhdF9ndDI1NV9oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3Q1MTFfbG87CisgICAgdTMyICAgICB0eF9zdGF0X2d0NTExX2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ndDEwMjNfbG87CisgICAgdTMyICAgICB0eF9zdGF0X2d0MTAyM19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3QxNTE4X2xvOworICAgIHUzMiAgICAgdHhfc3RhdF9ndDE1MThfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2d0MjA0N19sbzsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3QyMDQ3X2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ndDQwOTVfbG87CisgICAgdTMyICAgICB0eF9zdGF0X2d0NDA5NV9oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3Q5MjE2X2xvOworICAgIHUzMiAgICAgdHhfc3RhdF9ndDkyMTZfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2d0MTYzODNfbG87CisgICAgdTMyICAgICB0eF9zdGF0X2d0MTYzODNfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2d0bWF4X2xvOworICAgIHUzMiAgICAgdHhfc3RhdF9ndG1heF9oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3R1ZmxfbG87CisgICAgdTMyICAgICB0eF9zdGF0X2d0dWZsX2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ndGVycl9sbzsKKyAgICB1MzIgICAgIHR4X3N0YXRfZ3RlcnJfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2d0Ynl0X2xvOworICAgIHUzMiAgICAgdHhfc3RhdF9ndGJ5dF9oaTsKKworICAgIHUzMiAgICAgcnhfc3RhdF9ncjY0X2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncjY0X2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ncjEyN19sbzsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3IxMjdfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dyMjU1X2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncjI1NV9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3I1MTFfbG87CisgICAgdTMyICAgICByeF9zdGF0X2dyNTExX2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ncjEwMjNfbG87CisgICAgdTMyICAgICByeF9zdGF0X2dyMTAyM19oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3IxNTE4X2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncjE1MThfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dyMjA0N19sbzsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3IyMDQ3X2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ncjQwOTVfbG87CisgICAgdTMyICAgICByeF9zdGF0X2dyNDA5NV9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3I5MjE2X2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncjkyMTZfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dyMTYzODNfbG87CisgICAgdTMyICAgICByeF9zdGF0X2dyMTYzODNfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dybWF4X2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncm1heF9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3Jwa3RfbG87CisgICAgdTMyICAgICByeF9zdGF0X2dycGt0X2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ncmZjc19sbzsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3JmY3NfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dybWNhX2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncm1jYV9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3JiY2FfbG87CisgICAgdTMyICAgICByeF9zdGF0X2dyYmNhX2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ncnhjZl9sbzsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3J4Y2ZfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dyeHBmX2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncnhwZl9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3J4dW9fbG87CisgICAgdTMyICAgICByeF9zdGF0X2dyeHVvX2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ncmpicl9sbzsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3JqYnJfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dyb3ZyX2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncm92cl9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3JmbHJfbG87CisgICAgdTMyICAgICByeF9zdGF0X2dyZmxyX2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ncm1lZ19sbzsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3JtZWdfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dybWViX2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncm1lYl9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3JieXRfbG87CisgICAgdTMyICAgICByeF9zdGF0X2dyYnl0X2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ncnVuZF9sbzsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3J1bmRfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dyZnJnX2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncmZyZ19oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3JlcmJfbG87CisgICAgdTMyICAgICByeF9zdGF0X2dyZXJiX2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ncmZyZV9sbzsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZ3JmcmVfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2dyaXBqX2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ncmlwal9oaTsKK307CisKKwordW5pb24gbWFjX3N0YXRzIHsKKyAgICBzdHJ1Y3QgZW1hY19zdGF0cwllbWFjX3N0YXRzOworICAgIHN0cnVjdCBibWFjX3N0YXRzCWJtYWNfc3RhdHM7Cit9OworCisKK3N0cnVjdCBtYWNfc3R4IHsKKyAgICAvKiBpbl9iYWRfb2N0ZXRzICovCisgICAgdTMyICAgICByeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2xvOworCisgICAgLyogb3V0X2JhZF9vY3RldHMgKi8KKyAgICB1MzIgICAgIHR4X3N0YXRfaWZoY291dGJhZG9jdGV0c19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfaWZoY291dGJhZG9jdGV0c19sbzsKKworICAgIC8qIGNyY19yZWNlaXZlX2Vycm9ycyAqLworICAgIHUzMiAgICAgcnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnNfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19sbzsKKyAgICAvKiBhbGlnbm1lbnRfZXJyb3JzICovCisgICAgdTMyICAgICByeF9zdGF0X2RvdDNzdGF0c2FsaWdubWVudGVycm9yc19oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2xvOworICAgIC8qIGNhcnJpZXJfc2Vuc2VfZXJyb3JzICovCisgICAgdTMyICAgICByeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9yc19oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2xvOworICAgIC8qIGZhbHNlX2NhcnJpZXJfZGV0ZWN0aW9ucyAqLworICAgIHUzMiAgICAgcnhfc3RhdF9mYWxzZWNhcnJpZXJlcnJvcnNfaGk7CisgICAgdTMyICAgICByeF9zdGF0X2ZhbHNlY2FycmllcmVycm9yc19sbzsKKworICAgIC8qIHJ1bnRfcGFja2V0c19yZWNlaXZlZCAqLworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfbG87CisgICAgLyogamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQgKi8KKyAgICB1MzIgICAgIHJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19sbzsKKworICAgIC8qIGVycm9yX3J1bnRfcGFja2V0c19yZWNlaXZlZCAqLworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2xvOworICAgIC8qIGVycm9yX2phYmJlcl9wYWNrZXRzX3JlY2VpdmVkICovCisgICAgdTMyICAgICByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzX2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ldGhlcnN0YXRzamFiYmVyc19sbzsKKworICAgIC8qIGNvbnRyb2xfZnJhbWVzX3JlY2VpdmVkICovCisgICAgdTMyICAgICByeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZF9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkX2xvOworICAgIHUzMiAgICAgcnhfc3RhdF9ibWFjX3hwZl9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfYm1hY194cGZfbG87CisgICAgdTMyICAgICByeF9zdGF0X2JtYWNfeGNmX2hpOworICAgIHUzMiAgICAgcnhfc3RhdF9ibWFjX3hjZl9sbzsKKworICAgIC8qIHhvZmZfc3RhdGVfZW50ZXJlZCAqLworICAgIHUzMiAgICAgcnhfc3RhdF94b2Zmc3RhdGVlbnRlcmVkX2hpOworICAgIHUzMiAgICAgcnhfc3RhdF94b2Zmc3RhdGVlbnRlcmVkX2xvOworICAgIC8qIHBhdXNlX3hvbl9mcmFtZXNfcmVjZWl2ZWQgKi8KKyAgICB1MzIgICAgIHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9sbzsKKyAgICAvKiBwYXVzZV94b2ZmX2ZyYW1lc19yZWNlaXZlZCAqLworICAgIHUzMiAgICAgcnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9oaTsKKyAgICB1MzIgICAgIHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfbG87CisgICAgLyogcGF1c2VfeG9uX2ZyYW1lc190cmFuc21pdHRlZCAqLworICAgIHUzMiAgICAgdHhfc3RhdF9vdXR4b25zZW50X2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9vdXR4b25zZW50X2xvOworICAgIC8qIHBhdXNlX3hvZmZfZnJhbWVzX3RyYW5zbWl0dGVkICovCisgICAgdTMyICAgICB0eF9zdGF0X291dHhvZmZzZW50X2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9vdXR4b2Zmc2VudF9sbzsKKyAgICAvKiBmbG93X2NvbnRyb2xfZG9uZSAqLworICAgIHUzMiAgICAgdHhfc3RhdF9mbG93Y29udHJvbGRvbmVfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2Zsb3djb250cm9sZG9uZV9sbzsKKworICAgIC8qIGV0aGVyX3N0YXRzX2NvbGxpc2lvbnMgKi8KKyAgICB1MzIgICAgIHR4X3N0YXRfZXRoZXJzdGF0c2NvbGxpc2lvbnNfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zX2xvOworICAgIC8qIHNpbmdsZV9jb2xsaXNpb25fdHJhbnNtaXRfZnJhbWVzICovCisgICAgdTMyICAgICB0eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzc2luZ2xlY29sbGlzaW9uZnJhbWVzX2xvOworICAgIC8qIG11bHRpcGxlX2NvbGxpc2lvbl90cmFuc21pdF9mcmFtZXMgKi8KKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzbXVsdGlwbGVjb2xsaXNpb25mcmFtZXNfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzX2xvOworICAgIC8qIGRlZmVycmVkX3RyYW5zbWlzc2lvbnMgKi8KKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzZGVmZXJyZWR0cmFuc21pc3Npb25zX2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnNfbG87CisgICAgLyogZXhjZXNzaXZlX2NvbGxpc2lvbl9mcmFtZXMgKi8KKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19sbzsKKyAgICAvKiBsYXRlX2NvbGxpc2lvbl9mcmFtZXMgKi8KKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzbGF0ZWNvbGxpc2lvbnNfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvOworCisgICAgLyogZnJhbWVzX3RyYW5zbWl0dGVkXzY0X2J5dGVzICovCisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfbG87CisgICAgLyogZnJhbWVzX3RyYW5zbWl0dGVkXzY1XzEyN19ieXRlcyAqLworICAgIHUzMiAgICAgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHNfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjVvY3RldHN0bzEyN29jdGV0c19sbzsKKyAgICAvKiBmcmFtZXNfdHJhbnNtaXR0ZWRfMTI4XzI1NV9ieXRlcyAqLworICAgIHUzMiAgICAgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czEyOG9jdGV0c3RvMjU1b2N0ZXRzX2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czEyOG9jdGV0c3RvMjU1b2N0ZXRzX2xvOworICAgIC8qIGZyYW1lc190cmFuc21pdHRlZF8yNTZfNTExX2J5dGVzICovCisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHNfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHNfbG87CisgICAgLyogZnJhbWVzX3RyYW5zbWl0dGVkXzUxMl8xMDIzX2J5dGVzICovCisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzX2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czUxMm9jdGV0c3RvMTAyM29jdGV0c19sbzsKKyAgICAvKiBmcmFtZXNfdHJhbnNtaXR0ZWRfMTAyNF8xNTIyX2J5dGVzICovCisgICAgdTMyICAgICB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzX2xvOworICAgIC8qIGZyYW1lc190cmFuc21pdHRlZF8xNTIzXzkwMjJfYnl0ZXMgKi8KKyAgICB1MzIgICAgIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19sbzsKKyAgICB1MzIgICAgIHR4X3N0YXRfYm1hY18yMDQ3X2hpOworICAgIHUzMiAgICAgdHhfc3RhdF9ibWFjXzIwNDdfbG87CisgICAgdTMyICAgICB0eF9zdGF0X2JtYWNfNDA5NV9oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfYm1hY180MDk1X2xvOworICAgIHUzMiAgICAgdHhfc3RhdF9ibWFjXzkyMTZfaGk7CisgICAgdTMyICAgICB0eF9zdGF0X2JtYWNfOTIxNl9sbzsKKyAgICB1MzIgICAgIHR4X3N0YXRfYm1hY18xNjM4M19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfYm1hY18xNjM4M19sbzsKKworICAgIC8qIGludGVybmFsX21hY190cmFuc21pdF9lcnJvcnMgKi8KKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19sbzsKKworICAgIC8qIGlmX291dF9kaXNjYXJkcyAqLworICAgIHUzMiAgICAgdHhfc3RhdF9ibWFjX3VmbF9oaTsKKyAgICB1MzIgICAgIHR4X3N0YXRfYm1hY191ZmxfbG87Cit9OworCisKKyNkZWZpbmUgTUFDX1NUWF9JRFhfTUFYIAkJICAgIDIKKworc3RydWN0IGhvc3RfcG9ydF9zdGF0cyB7CisgICAgdTMyIAkgICBob3N0X3BvcnRfc3RhdHNfc3RhcnQ7CisKKyAgICBzdHJ1Y3QgbWFjX3N0eCBtYWNfc3R4W01BQ19TVFhfSURYX01BWF07CisKKyAgICB1MzIgCSAgIGJyYl9kcm9wX2hpOworICAgIHUzMiAJICAgYnJiX2Ryb3BfbG87CisKKyAgICB1MzIgCSAgIGhvc3RfcG9ydF9zdGF0c19lbmQ7Cit9OworCisKK3N0cnVjdCBob3N0X2Z1bmNfc3RhdHMgeworICAgIHUzMiAgICAgaG9zdF9mdW5jX3N0YXRzX3N0YXJ0OworCisgICAgdTMyICAgICB0b3RhbF9ieXRlc19yZWNlaXZlZF9oaTsKKyAgICB1MzIgICAgIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvOworCisgICAgdTMyICAgICB0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaTsKKyAgICB1MzIgICAgIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvOworCisgICAgdTMyICAgICB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisgICAgdTMyICAgICB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisKKyAgICB1MzIgICAgIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpOworICAgIHUzMiAgICAgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisKKyAgICB1MzIgICAgIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpOworICAgIHUzMiAgICAgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisKKyAgICB1MzIgICAgIHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKyAgICB1MzIgICAgIHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKworICAgIHUzMiAgICAgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGk7CisgICAgdTMyICAgICB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKworICAgIHUzMiAgICAgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGk7CisgICAgdTMyICAgICB0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKworICAgIHUzMiAgICAgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGk7CisgICAgdTMyICAgICB2YWxpZF9ieXRlc19yZWNlaXZlZF9sbzsKKworICAgIHUzMiAgICAgaG9zdF9mdW5jX3N0YXRzX2VuZDsKK307CisKKwogI2RlZmluZSBCQ01fNTcxMF9GV19NQUpPUl9WRVJTSU9OCQkJNAotI2RlZmluZSBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OCQkJMAotI2RlZmluZSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OCQkJMTQKKyNkZWZpbmUgQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTgkJCTUKKyNkZWZpbmUgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTgkJCTEKICNkZWZpbmUgQkNNXzU3MTBfRldfQ09NUElMRV9GTEFHUwkJCTEKIAogCkBAIC03OTMsNyArMTI1Miw3IEBACiB9OwogCiAvKgotICogZG9vcmJlbGwgbWVzc2FnZSBzZW5kIHRvIHRoZSBjaGlwCisgKiBkb29yYmVsbCBtZXNzYWdlIHNlbnQgdG8gdGhlIGNoaXAKICAqLwogc3RydWN0IGRvb3JiZWxsIHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKQEAgLTg0OSw4ICsxMzA4LDEwIEBACiAJdTE2IGZsYWdzOwogI2RlZmluZSBQQVJTSU5HX0ZMQUdTX0VUSEVSTkVUX0FERFJFU1NfVFlQRSAoMHgxPDwwKQogI2RlZmluZSBQQVJTSU5HX0ZMQUdTX0VUSEVSTkVUX0FERFJFU1NfVFlQRV9TSElGVCAwCi0jZGVmaW5lIFBBUlNJTkdfRkxBR1NfTlVNQkVSX09GX05FU1RFRF9WTEFOUyAoMHgzPDwxKQotI2RlZmluZSBQQVJTSU5HX0ZMQUdTX05VTUJFUl9PRl9ORVNURURfVkxBTlNfU0hJRlQgMQorI2RlZmluZSBQQVJTSU5HX0ZMQUdTX1ZMQU4gKDB4MTw8MSkKKyNkZWZpbmUgUEFSU0lOR19GTEFHU19WTEFOX1NISUZUIDEKKyNkZWZpbmUgUEFSU0lOR19GTEFHU19FWFRSQV9WTEFOICgweDE8PDIpCisjZGVmaW5lIFBBUlNJTkdfRkxBR1NfRVhUUkFfVkxBTl9TSElGVCAyCiAjZGVmaW5lIFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTCAoMHgzPDwzKQogI2RlZmluZSBQQVJTSU5HX0ZMQUdTX09WRVJfRVRIRVJORVRfUFJPVE9DT0xfU0hJRlQgMwogI2RlZmluZSBQQVJTSU5HX0ZMQUdTX0lQX09QVElPTlMgKDB4MTw8NSkKQEAgLTg3NCw2ICsxMzM1LDEyIEBACiB9OwogCiAKK3N0cnVjdCByZWdwYWlyIHsKKwl1MzIgbG87CisJdTMyIGhpOworfTsKKworCiAvKgogICogZG1hZSBjb21tYW5kIHN0cnVjdHVyZQogICovCkBAIC05MDEsOCArMTM2OCwxMCBAQAogI2RlZmluZSBETUFFX0NPTU1BTkRfU1JDX1JFU0VUX1NISUZUIDEzCiAjZGVmaW5lIERNQUVfQ09NTUFORF9EU1RfUkVTRVQgKDB4MTw8MTQpCiAjZGVmaW5lIERNQUVfQ09NTUFORF9EU1RfUkVTRVRfU0hJRlQgMTQKLSNkZWZpbmUgRE1BRV9DT01NQU5EX1JFU0VSVkVEMCAoMHgxRkZGRjw8MTUpCi0jZGVmaW5lIERNQUVfQ09NTUFORF9SRVNFUlZFRDBfU0hJRlQgMTUKKyNkZWZpbmUgRE1BRV9DT01NQU5EX0UxSFZOICgweDM8PDE1KQorI2RlZmluZSBETUFFX0NPTU1BTkRfRTFIVk5fU0hJRlQgMTUKKyNkZWZpbmUgRE1BRV9DT01NQU5EX1JFU0VSVkVEMCAoMHg3RkZGPDwxNykKKyNkZWZpbmUgRE1BRV9DT01NQU5EX1JFU0VSVkVEMF9TSElGVCAxNwogCXUzMiBzcmNfYWRkcl9sbzsKIAl1MzIgc3JjX2FkZHJfaGk7CiAJdTMyIGRzdF9hZGRyX2xvOwpAQCAtOTUyLDYgKzE0MjEsNzggQEAKIAogCiAvKgorICogVGhlIGV0aCBzdG9ybSBjb250ZXh0IG9mIFVzdG9ybSAoY29uZmlndXJhdGlvbiBwYXJ0KQorICovCitzdHJ1Y3QgdXN0b3JtX2V0aF9zdF9jb250ZXh0X2NvbmZpZyB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggZmxhZ3M7CisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX01DX0FMSUdOTUVOVCAoMHgxPDwwKQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9NQ19BTElHTk1FTlRfU0hJRlQgMAorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0hDICgweDE8PDEpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfSENfU0hJRlQgMQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9UUEEgKDB4MTw8MikKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDIKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMworI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweEY8PDQpCisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAorCXU4IHN0YXR1c19ibG9ja19pZDsKKwl1OCBjbGllbnRJZDsKKwl1OCBzYl9pbmRleF9udW1iZXJzOworI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0NRRV9TQl9JTkRFWF9OVU1CRVIgKDB4Rjw8MCkKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19DUUVfU0JfSU5ERVhfTlVNQkVSX1NISUZUIDAKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19CRF9TQl9JTkRFWF9OVU1CRVIgKDB4Rjw8NCkKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19CRF9TQl9JTkRFWF9OVU1CRVJfU0hJRlQgNAorI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggc2JfaW5kZXhfbnVtYmVyczsKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19DUUVfU0JfSU5ERVhfTlVNQkVSICgweEY8PDApCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfQ1FFX1NCX0lOREVYX05VTUJFUl9TSElGVCAwCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfQkRfU0JfSU5ERVhfTlVNQkVSICgweEY8PDQpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfQkRfU0JfSU5ERVhfTlVNQkVSX1NISUZUIDQKKwl1OCBjbGllbnRJZDsKKwl1OCBzdGF0dXNfYmxvY2tfaWQ7CisJdTggZmxhZ3M7CisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX01DX0FMSUdOTUVOVCAoMHgxPDwwKQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9NQ19BTElHTk1FTlRfU0hJRlQgMAorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0hDICgweDE8PDEpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfSENfU0hJRlQgMQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9UUEEgKDB4MTw8MikKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDIKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMworI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweEY8PDQpCisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAorI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGJkX2J1ZmZfc2l6ZTsKKwl1MTYgbWNfYWxpZ25tZW50X3NpemU7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgbWNfYWxpZ25tZW50X3NpemU7CisJdTE2IGJkX2J1ZmZfc2l6ZTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IF9fbG9jYWxfc2dlX3Byb2Q7CisJdTggX19sb2NhbF9iZF9wcm9kOworCXUxNiBzZ2VfYnVmZl9zaXplOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHNnZV9idWZmX3NpemU7CisJdTggX19sb2NhbF9iZF9wcm9kOworCXU4IF9fbG9jYWxfc2dlX3Byb2Q7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgX19iZF9jb25zOworCXUxNiBfX3NnZV9jb25zOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IF9fc2dlX2NvbnM7CisJdTE2IF9fYmRfY29uczsKKyNlbmRpZgorCXUzMiBiZF9wYWdlX2Jhc2VfbG87CisJdTMyIGJkX3BhZ2VfYmFzZV9oaTsKKwl1MzIgc2dlX3BhZ2VfYmFzZV9sbzsKKwl1MzIgc2dlX3BhZ2VfYmFzZV9oaTsKK307CisKKy8qCiAgKiBUaGUgZXRoIFJ4IEJ1ZmZlciBEZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBldGhfcnhfYmQgewpAQCAtOTYwLDY0ICsxNTAxLDI3IEBACiB9OwogCiAvKgorICogVGhlIGV0aCBSeCBTR0UgRGVzY3JpcHRvcgorICovCitzdHJ1Y3QgZXRoX3J4X3NnZSB7CisJdTMyIGFkZHJfbG87CisJdTMyIGFkZHJfaGk7Cit9OworCisvKgorICogTG9jYWwgQkRzIGFuZCBTR0VzIHJpbmdzIChpbiBFVEgpCisgKi8KK3N0cnVjdCBldGhfbG9jYWxfcnhfcmluZ3MgeworCXN0cnVjdCBldGhfcnhfYmQgX19sb2NhbF9iZF9yaW5nWzE2XTsKKwlzdHJ1Y3QgZXRoX3J4X3NnZSBfX2xvY2FsX3NnZV9yaW5nWzEyXTsKK307CisKKy8qCiAgKiBUaGUgZXRoIHN0b3JtIGNvbnRleHQgb2YgVXN0b3JtCiAgKi8KIHN0cnVjdCB1c3Rvcm1fZXRoX3N0X2NvbnRleHQgewotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXU4IHNiX2luZGV4X251bWJlcjsKLQl1OCBzdGF0dXNfYmxvY2tfaWQ7Ci0JdTggX19sb2NhbF9yeF9iZF9jb25zOwotCXU4IF9fbG9jYWxfcnhfYmRfcHJvZDsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXU4IF9fbG9jYWxfcnhfYmRfcHJvZDsKLQl1OCBfX2xvY2FsX3J4X2JkX2NvbnM7Ci0JdTggc3RhdHVzX2Jsb2NrX2lkOwotCXU4IHNiX2luZGV4X251bWJlcjsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiByY3FfY29uczsKLQl1MTYgcnhfYmRfY29uczsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXUxNiByeF9iZF9jb25zOwotCXUxNiByY3FfY29uczsKLSNlbmRpZgotCXUzMiByeF9iZF9wYWdlX2Jhc2VfbG87Ci0JdTMyIHJ4X2JkX3BhZ2VfYmFzZV9oaTsKLQl1MzIgcmNxX2Jhc2VfYWRkcmVzc19sbzsKLQl1MzIgcmNxX2Jhc2VfYWRkcmVzc19oaTsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgX19udW1fb2ZfcmV0dXJuZWRfY3FlczsKLQl1OCBudW1fcnNzOwotCXU4IGZsYWdzOwotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX01DX0FMSUdOTUVOVCAoMHgxPDwwKQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX01DX0FMSUdOTUVOVF9TSElGVCAwCi0jZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9FTkFCTEVfRFlOQU1JQ19IQyAoMHgxPDwxKQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX0RZTkFNSUNfSENfU0hJRlQgMQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX1RQQSAoMHgxPDwyKQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX1RQQV9TSElGVCAyCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX1JFU0VSVkVEMCAoMHgxRjw8MykKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfUkVTRVJWRUQwX1NISUZUIDMKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXU4IGZsYWdzOwotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX01DX0FMSUdOTUVOVCAoMHgxPDwwKQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX01DX0FMSUdOTUVOVF9TSElGVCAwCi0jZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9FTkFCTEVfRFlOQU1JQ19IQyAoMHgxPDwxKQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX0RZTkFNSUNfSENfU0hJRlQgMQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX1RQQSAoMHgxPDwyKQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfRU5BQkxFX1RQQV9TSElGVCAyCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX1JFU0VSVkVEMCAoMHgxRjw8MykKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfUkVTRVJWRUQwX1NISUZUIDMKLQl1OCBudW1fcnNzOwotCXUxNiBfX251bV9vZl9yZXR1cm5lZF9jcWVzOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IG1jX2FsaWdubWVudF9zaXplOwotCXUxNiBhZ2dfdGhyZXNob2xkOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTE2IGFnZ190aHJlc2hvbGQ7Ci0JdTE2IG1jX2FsaWdubWVudF9zaXplOwotI2VuZGlmCi0Jc3RydWN0IGV0aF9yeF9iZCBfX2xvY2FsX2JkX3JpbmdbMTZdOworCXN0cnVjdCB1c3Rvcm1fZXRoX3N0X2NvbnRleHRfY29uZmlnIGNvbW1vbjsKKwlzdHJ1Y3QgZXRoX2xvY2FsX3J4X3JpbmdzIF9fcmluZ3M7CiB9OwogCiAvKgpAQCAtMTA4OCw5ICsxNTkyLDkgQEAKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKIAl1MTYgX19yZXNlcnZlZDM7CiAJdTggX19yZXNlcnZlZDI7Ci0JdTggX19hZ2dfbWlzYzc7CisJdTggX19kYV9vbmx5X2NudDsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXU4IF9fYWdnX21pc2M3OworCXU4IF9fZGFfb25seV9jbnQ7CiAJdTggX19yZXNlcnZlZDI7CiAJdTE2IF9fcmVzZXJ2ZWQzOwogI2VuZGlmCkBAIC0xMzY4LDcgKzE4NzIsMTMgQEAKIAl1MzIgX19yZXNlcnZlZF8wOwogCXUzMiBfX3Jlc2VydmVkXzE7CiAJdTMyIF9fcmVzZXJ2ZWRfMjsKLQl1MzIgX19yZXNlcnZlZF9mbGFnczsKKwl1MzIgZmxhZ3M7CisjZGVmaW5lIF9fVElNRVJTX0JMT0NLX0NPTlRFWFRfTlVNX09GX0FDVElWRV9USU1FUlMgKDB4Mzw8MCkKKyNkZWZpbmUgX19USU1FUlNfQkxPQ0tfQ09OVEVYVF9OVU1fT0ZfQUNUSVZFX1RJTUVSU19TSElGVCAwCisjZGVmaW5lIFRJTUVSU19CTE9DS19DT05URVhUX0NPTk5fVkFMSURfRkxHICgweDE8PDIpCisjZGVmaW5lIFRJTUVSU19CTE9DS19DT05URVhUX0NPTk5fVkFMSURfRkxHX1NISUZUIDIKKyNkZWZpbmUgX19USU1FUlNfQkxPQ0tfQ09OVEVYVF9SRVNFUlZFRDAgKDB4MUZGRkZGRkY8PDMpCisjZGVmaW5lIF9fVElNRVJTX0JMT0NLX0NPTlRFWFRfUkVTRVJWRUQwX1NISUZUIDMKIH07CiAKIC8qCkBAIC0xNDc4LDExICsxOTg4LDE5IEBACiAJdTMyIHR4X2JkX3BhZ2VfYmFzZV9oaTsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKIAl1MTYgdHhfYmRfY29uczsKLQl1OCBfX3Jlc2VydmVkMDsKKwl1OCBzdGF0aXN0aWNzX2RhdGE7CisjZGVmaW5lIFhTVE9STV9FVEhfU1RfQ09OVEVYVF9TVEFUSVNUSUNTX0NPVU5URVJfSUQgKDB4N0Y8PDApCisjZGVmaW5lIFhTVE9STV9FVEhfU1RfQ09OVEVYVF9TVEFUSVNUSUNTX0NPVU5URVJfSURfU0hJRlQgMAorI2RlZmluZSBYU1RPUk1fRVRIX1NUX0NPTlRFWFRfU1RBVElTVElDU19FTkFCTEUgKDB4MTw8NykKKyNkZWZpbmUgWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFX1NISUZUIDcKIAl1OCBfX2xvY2FsX3R4X2JkX3Byb2Q7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1OCBfX2xvY2FsX3R4X2JkX3Byb2Q7Ci0JdTggX19yZXNlcnZlZDA7CisJdTggc3RhdGlzdGljc19kYXRhOworI2RlZmluZSBYU1RPUk1fRVRIX1NUX0NPTlRFWFRfU1RBVElTVElDU19DT1VOVEVSX0lEICgweDdGPDwwKQorI2RlZmluZSBYU1RPUk1fRVRIX1NUX0NPTlRFWFRfU1RBVElTVElDU19DT1VOVEVSX0lEX1NISUZUIDAKKyNkZWZpbmUgWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFICgweDE8PDcpCisjZGVmaW5lIFhTVE9STV9FVEhfU1RfQ09OVEVYVF9TVEFUSVNUSUNTX0VOQUJMRV9TSElGVCA3CiAJdTE2IHR4X2JkX2NvbnM7CiAjZW5kaWYKIAl1MzIgZGJfZGF0YV9hZGRyX2xvOwpAQCAtMTU1OSw3ICsyMDc3LDcgQEAKIHN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7CiAJdTE2IGluZGV4X3ZhbHVlc1tIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKIAl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OwotCXU4IHJlc2VydmVkMDsKKwl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKIAl1MzIgX19mbGFnczsKIH07CkBAIC0xNTcwLDcgKzIwODgsNyBAQAogc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIHsKIAl1MTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOwogCXUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7Ci0JdTggcmVzZXJ2ZWQwOworCXU4IGZ1bmM7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwogCXUzMiBfX2ZsYWdzOwogfTsKQEAgLTE1ODEsNyArMjA5OSw3IEBACiBzdHJ1Y3QgeHN0b3JtX2RlZl9zdGF0dXNfYmxvY2sgewogCXUxNiBpbmRleF92YWx1ZXNbSENfWFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CiAJdTE2IHN0YXR1c19ibG9ja19pbmRleDsKLQl1OCByZXNlcnZlZDA7CisJdTggZnVuYzsKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7CiAJdTMyIF9fZmxhZ3M7CiB9OwpAQCAtMTU5Miw3ICsyMTEwLDcgQEAKIHN0cnVjdCB0c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7CiAJdTE2IGluZGV4X3ZhbHVlc1tIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKIAl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OwotCXU4IHJlc2VydmVkMDsKKwl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKIAl1MzIgX19mbGFnczsKIH07CkBAIC0xNjE1LDcgKzIxMzMsNyBAQAogc3RydWN0IHVzdG9ybV9zdGF0dXNfYmxvY2sgewogCXUxNiBpbmRleF92YWx1ZXNbSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTXTsKIAl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OwotCXU4IHJlc2VydmVkMDsKKwl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKIAl1MzIgX19mbGFnczsKIH07CkBAIC0xNjI2LDcgKzIxNDQsNyBAQAogc3RydWN0IGNzdG9ybV9zdGF0dXNfYmxvY2sgewogCXUxNiBpbmRleF92YWx1ZXNbSENfQ1NUT1JNX1NCX05VTV9JTkRJQ0VTXTsKIAl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OwotCXU4IHJlc2VydmVkMDsKKwl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKIAl1MzIgX19mbGFnczsKIH07CkBAIC0xNjY0LDIwICsyMTgyLDIxIEBACiAgKiByZWd1bGFyIGV0aCBGUCBDUUUgcGFyYW1ldGVycyBzdHJ1Y3QKICAqLwogc3RydWN0IGV0aF9mYXN0X3BhdGhfcnhfY3FlIHsKLQl1OCB0eXBlOwotCXU4IGVycm9yX3R5cGVfZmxhZ3M7Ci0jZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX1BIWV9ERUNPREVfRVJSX0ZMRyAoMHgxPDwwKQotI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9QSFlfREVDT0RFX0VSUl9GTEdfU0hJRlQgMAotI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9JUF9CQURfWFNVTV9GTEcgKDB4MTw8MSkKLSNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfSVBfQkFEX1hTVU1fRkxHX1NISUZUIDEKLSNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfTDRfQkFEX1hTVU1fRkxHICgweDE8PDIpCi0jZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX0w0X0JBRF9YU1VNX0ZMR19TSElGVCAyCi0jZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX1NUQVJUX0ZMRyAoMHgxPDwzKQotI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9TVEFSVF9GTEdfU0hJRlQgMwotI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9FTkRfRkxHICgweDE8PDQpCi0jZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX0VORF9GTEdfU0hJRlQgNAotI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9SRVNFUlZFRDAgKDB4Nzw8NSkKLSNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfUkVTRVJWRUQwX1NISUZUIDUKKwl1OCB0eXBlX2Vycm9yX2ZsYWdzOworI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9UWVBFICgweDE8PDApCisjZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX1RZUEVfU0hJRlQgMAorI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9QSFlfREVDT0RFX0VSUl9GTEcgKDB4MTw8MSkKKyNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfUEhZX0RFQ09ERV9FUlJfRkxHX1NISUZUIDEKKyNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfSVBfQkFEX1hTVU1fRkxHICgweDE8PDIpCisjZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX0lQX0JBRF9YU1VNX0ZMR19TSElGVCAyCisjZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX0w0X0JBRF9YU1VNX0ZMRyAoMHgxPDwzKQorI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9MNF9CQURfWFNVTV9GTEdfU0hJRlQgMworI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9TVEFSVF9GTEcgKDB4MTw8NCkKKyNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfU1RBUlRfRkxHX1NISUZUIDQKKyNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfRU5EX0ZMRyAoMHgxPDw1KQorI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9FTkRfRkxHX1NISUZUIDUKKyNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfUkVTRVJWRUQwICgweDM8PDYpCisjZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX1JFU0VSVkVEMF9TSElGVCA2CiAJdTggc3RhdHVzX2ZsYWdzOwogI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9SU1NfSEFTSF9UWVBFICgweDc8PDApCiAjZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX1JTU19IQVNIX1RZUEVfU0hJRlQgMApAQCAtMTY5MiwxMSArMjIxMSwxMyBAQAogI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9MNF9YU1VNX05PX1ZBTElEQVRJT05fRkxHICgweDE8PDcpCiAjZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX0w0X1hTVU1fTk9fVkFMSURBVElPTl9GTEdfU0hJRlQgNwogCXU4IHBsYWNlbWVudF9vZmZzZXQ7CisJdTggcXVldWVfaW5kZXg7CiAJdTMyIHJzc19oYXNoX3Jlc3VsdDsKIAl1MTYgdmxhbl90YWc7CiAJdTE2IHBrdF9sZW47Ci0JdTE2IHF1ZXVlX2luZGV4OworCXUxNiBsZW5fb25fYmQ7CiAJc3RydWN0IHBhcnNpbmdfZmxhZ3MgcGFyc19mbGFnczsKKwl1MTYgc2dsWzhdOwogfTsKIAogCkBAIC0xNzEwLDYgKzIyMzEsMjMgQEAKIAogCiAvKgorICogVGhlIGRhdGEgZm9yIHN0YXRpc3RpY3MgcXVlcnkgcmFtcm9kCisgKi8KK3N0cnVjdCBldGhfcXVlcnlfcmFtcm9kX2RhdGEgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IHJlc2VydmVkMDsKKwl1OCBjb2xsZWN0X3BvcnRfMWI7CisJdTE2IGRydl9jb3VudGVyOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IGRydl9jb3VudGVyOworCXU4IGNvbGxlY3RfcG9ydF8xYjsKKwl1OCByZXNlcnZlZDA7CisjZW5kaWYKKwl1MzIgY3RyX2lkX3ZlY3RvcjsKK307CisKKworLyoKICAqIFBsYWNlIGhvbGRlciBmb3IgcmFtcm9kcyBwcm90b2NvbCBzcGVjaWZpYyBkYXRhCiAgKi8KIHN0cnVjdCByYW1yb2RfZGF0YSB7CkBAIC0xNzM5LDE1ICsyMjc3LDIwIEBACiAgKiBFdGggUnggQ3FlIHN0cnVjdHVyZS0gZ2VuZXJhbCBzdHJ1Y3R1cmUgZm9yIHJhbXJvZHMKICAqLwogc3RydWN0IGNvbW1vbl9yYW1yb2RfZXRoX3J4X2NxZSB7Ci0JdTggdHlwZTsKKwl1OCByYW1yb2RfdHlwZTsKKyNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1RZUEUgKDB4MTw8MCkKKyNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1RZUEVfU0hJRlQgMAorI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwICgweDdGPDwxKQorI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwX1NISUZUIDEKIAl1OCBjb25uX3R5cGVfM2I7Ci0JdTE2IHJlc2VydmVkOworCXUxNiByZXNlcnZlZDE7CiAJdTMyIGNvbm5fYW5kX2NtZF9kYXRhOwogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ0lEICgweEZGRkZGRjw8MCkKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NJRF9TSElGVCAwCiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9DTURfSUQgKDB4RkY8PDI0KQogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ01EX0lEX1NISUZUIDI0CiAJc3RydWN0IHJhbXJvZF9kYXRhIHByb3RvY29sX2RhdGE7CisJdTMyIHJlc2VydmVkMls0XTsKIH07CiAKIC8qCkBAIC0xNzU2LDggKzIyOTksNyBAQAogc3RydWN0IGV0aF9yeF9jcWVfbmV4dF9wYWdlIHsKIAl1MzIgYWRkcl9sbzsKIAl1MzIgYWRkcl9oaTsKLQl1MzIgcmVzZXJ2ZWQwOwotCXUzMiByZXNlcnZlZDE7CisJdTMyIHJlc2VydmVkWzZdOwogfTsKIAogLyoKQEAgLTE3ODcsMTEgKzIzMjksNiBAQAogCXUxNiByZXNlcnZlZDsKIH07CiAKLXN0cnVjdCByZWdwYWlyIHsKLQl1MzIgbG87Ci0JdTMyIGhpOwotfTsKLQogLyoKICAqIGV0aGVybmV0IHNsb3cgcGF0aCBlbGVtZW50CiAgKi8KQEAgLTE4MDIsNiArMjMzOSw3IEBACiAJc3RydWN0IGV0aF9oYWx0X3JhbXJvZF9kYXRhIGhhbHRfcmFtcm9kX2RhdGE7CiAJc3RydWN0IHJlZ3BhaXIgbGVhZGluZ19jcWVfYWRkcjsKIAlzdHJ1Y3QgcmVncGFpciB1cGRhdGVfZGF0YV9hZGRyOworCXN0cnVjdCBldGhfcXVlcnlfcmFtcm9kX2RhdGEgcXVlcnlfcmFtcm9kX2RhdGE7CiB9OwogCiAvKgpAQCAtMTgyNCwxMCArMjM2MiwxMyBAQAogCiAKIC8qCi0gKiBDb21tb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHBlciBwb3J0IGluIFRzdG9ybQorICogQ29tbW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwZXIgZnVuY3Rpb24gaW4gVHN0b3JtCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZXRoX2Z1bmN0aW9uX2NvbW1vbl9jb25maWcgewotCXUzMiBjb25maWdfZmxhZ3M7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggbGVhZGluZ19jbGllbnRfaWQ7CisJdTggcnNzX3Jlc3VsdF9tYXNrOworCXUxNiBjb25maWdfZmxhZ3M7CiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9DQVBBQklMSVRZICgweDE8PDApCiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9DQVBBQklMSVRZX1NISUZUIDAKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X1RDUF9DQVBBQklMSVRZICgweDE8PDEpCkBAIC0xODQwLDE3ICsyMzgxLDMyIEBACiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfRU5BQkxFX1NISUZUIDQKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFICgweDE8PDUpCiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRV9TSElGVCA1Ci0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgzRkZGRkZGPDw2KQotI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNgotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBfX3NlY29uZGFyeV92bGFuX2lkOwotCXU4IGxlYWRpbmdfY2xpZW50X2lkOwotCXU4IHJzc19yZXN1bHRfbWFzazsKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDYpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA2CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgxRkY8PDcpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCA3CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY29uZmlnX2ZsYWdzOworI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjRfQ0FQQUJJTElUWSAoMHgxPDwwKQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjRfQ0FQQUJJTElUWV9TSElGVCAwCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9UQ1BfQ0FQQUJJTElUWSAoMHgxPDwxKQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjRfVENQX0NBUEFCSUxJVFlfU0hJRlQgMQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfQ0FQQUJJTElUWSAoMHgxPDwyKQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfQ0FQQUJJTElUWV9TSElGVCAyCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9UQ1BfQ0FQQUJJTElUWSAoMHgxPDwzKQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFlfU0hJRlQgMworI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRSAoMHgxPDw0KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRV9TSElGVCA0CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRSAoMHgxPDw1KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEVfU0hJRlQgNQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU0gKDB4MTw8NikKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNX1NISUZUIDYKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwICgweDFGRjw8NykKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDcKIAl1OCByc3NfcmVzdWx0X21hc2s7CiAJdTggbGVhZGluZ19jbGllbnRfaWQ7Ci0JdTE2IF9fc2Vjb25kYXJ5X3ZsYW5faWQ7CiAjZW5kaWYKKwl1MTYgdmxhbl9pZFsyXTsKIH07CiAKIC8qCkBAIC0xODY4LDcgKzI0MjQsNyBAQAogc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2hkciB7CiAJdTggbGVuZ3RoXzZiOwogCXU4IG9mZnNldDsKLQl1MTYgcmVzZXJ2ZWQwOworCXUxNiBjbGllbnRfaWQ7CiAJdTMyIHJlc2VydmVkMTsKIH07CiAKQEAgLTE5MjUsMTUgKzI0ODEsNTUgQEAKIAogCiAvKgorICogTUFDIGFkZHJlc3MgaW4gbGlzdCBmb3IgcmFtcm9kCisgKi8KK3N0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9lbnRyeV9lMWggeworCXUxNiBsc2JfbWFjX2FkZHI7CisJdTE2IG1pZGRsZV9tYWNfYWRkcjsKKwl1MTYgbXNiX21hY19hZGRyOworCXUxNiB2bGFuX2lkOworCXUxNiBlMWhvdl9pZDsKKwl1OCBjbGllbnRfaWQ7CisJdTggZmxhZ3M7CisjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9QT1JUICgweDE8PDApCisjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9QT1JUX1NISUZUIDAKKyNkZWZpbmUgTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX0FDVElPTl9UWVBFICgweDE8PDEpCisjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9BQ1RJT05fVFlQRV9TSElGVCAxCisjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9SRE1BX01BQyAoMHgxPDwyKQorI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfUkRNQV9NQUNfU0hJRlQgMgorI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfUkVTRVJWRUQwICgweDFGPDwzKQorI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfUkVTRVJWRUQwX1NISUZUIDMKK307CisKKy8qCisgKiBNQUMgZmlsdGVyaW5nIGNvbmZpZ3VyYXRpb24gY29tbWFuZAorICovCitzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kX2UxaCB7CisJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2hkciBoZHI7CisJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2VudHJ5X2UxaCBjb25maWdfdGFibGVbMzJdOworfTsKKworCisvKgorICogYXBwcm94aW1hdGUtbWF0Y2ggbXVsdGljYXN0IGZpbHRlcmluZyBmb3IgRTFIIHBlciBmdW5jdGlvbiBpbiBUc3Rvcm0KKyAqLworc3RydWN0IHRzdG9ybV9ldGhfYXBwcm94aW1hdGVfbWF0Y2hfbXVsdGljYXN0X2ZpbHRlcmluZyB7CisJdTMyIG1jYXN0X2FkZF9oYXNoX2JpdF9hcnJheVs4XTsKK307CisKKworLyoKICAqIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwZXIgY2xpZW50IGluIFRzdG9ybQogICovCiBzdHJ1Y3QgdHN0b3JtX2V0aF9jbGllbnRfY29uZmlnIHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgc3RhdGlzdGljc19jb3VudGVyX2lkOworCXU4IG1heF9zZ2VzX2Zvcl9wYWNrZXQ7CisJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOwogCXUxNiBtdHU7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1MTYgbXR1OwotCXUxNiBzdGF0aXN0aWNzX2NvdW50ZXJfaWQ7CisJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOworCXU4IG1heF9zZ2VzX2Zvcl9wYWNrZXQ7CiAjZW5kaWYKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKIAl1MTYgZHJvcF9mbGFnczsKQEAgLTE5NDEsNDIgKzI1MzcsNDIgQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfSVBfQ1NfRVJSX1NISUZUIDAKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVENQX0NTX0VSUiAoMHgxPDwxKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9UQ1BfQ1NfRVJSX1NISUZUIDEKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfTUFDX0VSUiAoMHgxPDwyKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9NQUNfRVJSX1NISUZUIDIKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVFRMMCAoMHgxPDwzKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9UVEwwX1NISUZUIDMKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVURQX0NTX0VSUiAoMHgxPDw0KQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9VRFBfQ1NfRVJSX1NISUZUIDQKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxICgweDdGRjw8NSkKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxX1NISUZUIDUKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVFRMMCAoMHgxPDwyKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9UVEwwX1NISUZUIDIKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVURQX0NTX0VSUiAoMHgxPDwzKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9VRFBfQ1NfRVJSX1NISUZUIDMKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxICgweEZGRjw8NCkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxX1NISUZUIDQKIAl1MTYgY29uZmlnX2ZsYWdzOwogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRSAoMHgxPDwwKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRV9TSElGVCAwCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwxKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMQotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4M0ZGRjw8MikKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDIKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwyKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDIKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweDFGRkY8PDMpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCAzCiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1MTYgY29uZmlnX2ZsYWdzOwogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRSAoMHgxPDwwKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRV9TSElGVCAwCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwxKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMQotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4M0ZGRjw8MikKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDIKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwyKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDIKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweDFGRkY8PDMpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCAzCiAJdTE2IGRyb3BfZmxhZ3M7CiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX0lQX0NTX0VSUiAoMHgxPDwwKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9JUF9DU19FUlJfU0hJRlQgMAogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9UQ1BfQ1NfRVJSICgweDE8PDEpCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX1RDUF9DU19FUlJfU0hJRlQgMQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9NQUNfRVJSICgweDE8PDIpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX01BQ19FUlJfU0hJRlQgMgotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9UVEwwICgweDE8PDMpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX1RUTDBfU0hJRlQgMwotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9VRFBfQ1NfRVJSICgweDE8PDQpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX1VEUF9DU19FUlJfU0hJRlQgNAotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDEgKDB4N0ZGPDw1KQotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDFfU0hJRlQgNQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9UVEwwICgweDE8PDIpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX1RUTDBfU0hJRlQgMgorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9VRFBfQ1NfRVJSICgweDE8PDMpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX1VEUF9DU19FUlJfU0hJRlQgMworI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDEgKDB4RkZGPDw0KQorI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDFfU0hJRlQgNAogI2VuZGlmCiB9OwogCkBAIC0xOTkyLDEwMyArMjU4OCwxMTkgQEAKIAl1MzIgYmNhc3RfZHJvcF9hbGw7CiAJdTMyIGJjYXN0X2FjY2VwdF9hbGw7CiAJdTMyIHN0cmljdF92bGFuOwotCXUzMiBfX3NlY29uZGFyeV92bGFuX2NsaWVudHM7Ci19OwotCi0KLXN0cnVjdCByYXRlX3NoYXBpbmdfcGVyX3Byb3RvY29sIHsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgcmVzZXJ2ZWQwOwotCXUxNiBwcm90b2NvbF9yYXRlOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTE2IHByb3RvY29sX3JhdGU7Ci0JdTE2IHJlc2VydmVkMDsKLSNlbmRpZgotCXUzMiBwcm90b2NvbF9xdW90YTsKLQlzMzIgY3VycmVudF9jcmVkaXQ7CisJdTMyIHZsYW5fZmlsdGVyWzJdOwogCXUzMiByZXNlcnZlZDsKIH07CiAKLXN0cnVjdCByYXRlX3NoYXBpbmdfdmFycyB7Ci0Jc3RydWN0IHJhdGVfc2hhcGluZ19wZXJfcHJvdG9jb2wgcHJvdG9jb2xfdmFyc1tOVU1fT0ZfUFJPVE9DT0xTXTsKLQl1MzIgcGF1c2VfbWFzazsKLQl1MzIgcGVyaW9kaWNfc3RvcDsKLQl1MzIgcnNfcGVyaW9kaWNfdGltZW91dDsKLQl1MzIgcnNfdGhyZXNob2xkOwotCXUzMiBsYXN0X3BlcmlvZGljX3RpbWU7Ci0JdTMyIHJlc2VydmVkOwotfTsKLQotc3RydWN0IGZhaXJuZXNzX3Blcl9wcm90b2NvbCB7Ci0JdTMyIGNyZWRpdF9kZWx0YTsKLQlzMzIgZmFpcl9jcmVkaXQ7Ci0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IHJlc2VydmVkMDsKLQl1OCBzdGF0ZTsKLQl1OCB3ZWlnaHQ7Ci0jZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1OCB3ZWlnaHQ7Ci0JdTggc3RhdGU7Ci0JdTE2IHJlc2VydmVkMDsKLSNlbmRpZgotCXUzMiByZXNlcnZlZDE7Ci19OwotCi1zdHJ1Y3QgZmFpcm5lc3NfdmFycyB7Ci0Jc3RydWN0IGZhaXJuZXNzX3Blcl9wcm90b2NvbCBwcm90b2NvbF92YXJzW05VTV9PRl9QUk9UT0NPTFNdOwotCXUzMiB1cHBlcl9ib3VuZDsKLQl1MzIgcG9ydF9yYXRlOwotCXUzMiBwYXVzZV9tYXNrOwotCXUzMiBmYWlyX3RocmVzaG9sZDsKLX07Ci0KLXN0cnVjdCBzYWZjX3N0cnVjdCB7Ci0JdTMyIGN1cl9wYXVzZV9tYXNrOwotCXUzMiBleHBpcmVfdGltZTsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgcmVzZXJ2ZWQwOwotCXU4IGN1cl9jb3NfdHlwZXM7Ci0JdTggc2FmY190aW1lb3V0X3VzZWM7Ci0jZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1OCBzYWZjX3RpbWVvdXRfdXNlYzsKLQl1OCBjdXJfY29zX3R5cGVzOwotCXUxNiByZXNlcnZlZDA7Ci0jZW5kaWYKLQl1MzIgcmVzZXJ2ZWQxOwotfTsKLQotc3RydWN0IGRlbW9fc3RydWN0IHsKLQl1OCBjb25fbnVtYmVyW05VTV9PRl9QUk9UT0NPTFNdOwotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXU4IHJlc2VydmVkMTsKLQl1OCBmYWlybmVzc19lbmFibGU7Ci0JdTggcmF0ZV9zaGFwaW5nX2VuYWJsZTsKLQl1OCBjbW5nX2VuYWJsZTsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXU4IGNtbmdfZW5hYmxlOwotCXU4IHJhdGVfc2hhcGluZ19lbmFibGU7Ci0JdTggZmFpcm5lc3NfZW5hYmxlOwotCXU4IHJlc2VydmVkMTsKLSNlbmRpZgotfTsKLQotc3RydWN0IGNtbmdfc3RydWN0IHsKLQlzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnMgcnNfdmFyczsKLQlzdHJ1Y3QgZmFpcm5lc3NfdmFycyBmYWlyX3ZhcnM7Ci0Jc3RydWN0IHNhZmNfc3RydWN0IHNhZmNfdmFyczsKLQlzdHJ1Y3QgZGVtb19zdHJ1Y3QgZGVtb192YXJzOwotfTsKLQotCi1zdHJ1Y3QgY29zX3RvX3Byb3RvY29sIHsKLQl1OCBtYXNrW01BWF9DT1NfTlVNQkVSXTsKLX07Ci0KIAogLyoKLSAqIENvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgWHN0b3JtIChwZXIgcG9ydCkKKyAqIFRocmVlIFJYIHByb2R1Y2VycyBmb3IgRVRICiAgKi8KLXN0cnVjdCB4c3Rvcm1fY29tbW9uX3N0YXRzIHsKK3N0cnVjdCB0c3Rvcm1fZXRoX3J4X3Byb2R1Y2VycyB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGJkX3Byb2Q7CisJdTE2IGNxZV9wcm9kOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IGNxZV9wcm9kOworCXUxNiBiZF9wcm9kOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJlc2VydmVkOworCXUxNiBzZ2VfcHJvZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBzZ2VfcHJvZDsKKwl1MTYgcmVzZXJ2ZWQ7CisjZW5kaWYKK307CisKKworLyoKKyAqIGNvbW1vbiBmbGFnIHRvIGluZGljYXRlIGV4aXN0YW5jZSBvZiBUUEEuCisgKi8KK3N0cnVjdCB0c3Rvcm1fZXRoX3RwYV9leGlzdCB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJlc2VydmVkMTsKKwl1OCByZXNlcnZlZDA7CisJdTggdHBhX2V4aXN0OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggdHBhX2V4aXN0OworCXU4IHJlc2VydmVkMDsKKwl1MTYgcmVzZXJ2ZWQxOworI2VuZGlmCisJdTMyIHJlc2VydmVkMjsKK307CisKKworLyoKKyAqIHBlci1wb3J0IFNBRkMgZGVtbyB2YXJpYWJsZXMKKyAqLworc3RydWN0IGNtbmdfZmxhZ3NfcGVyX3BvcnQgeworCXU4IGNvbl9udW1iZXJbTlVNX09GX1BST1RPQ09MU107CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggZmFpcm5lc3NfZW5hYmxlOworCXU4IHJhdGVfc2hhcGluZ19lbmFibGU7CisJdTggY21uZ19wcm90b2NvbF9lbmFibGU7CisJdTggY21uZ192bl9lbmFibGU7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBjbW5nX3ZuX2VuYWJsZTsKKwl1OCBjbW5nX3Byb3RvY29sX2VuYWJsZTsKKwl1OCByYXRlX3NoYXBpbmdfZW5hYmxlOworCXU4IGZhaXJuZXNzX2VuYWJsZTsKKyNlbmRpZgorfTsKKworCisvKgorICogcGVyLXBvcnQgcmF0ZSBzaGFwaW5nIHZhcmlhYmxlcworICovCitzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3BvcnQgeworCXUzMiByc19wZXJpb2RpY190aW1lb3V0OworCXUzMiByc190aHJlc2hvbGQ7Cit9OworCisKKy8qCisgKiBwZXItcG9ydCBmYWlybmVzcyB2YXJpYWJsZXMKKyAqLworc3RydWN0IGZhaXJuZXNzX3ZhcnNfcGVyX3BvcnQgeworCXUzMiB1cHBlcl9ib3VuZDsKKwl1MzIgZmFpcl90aHJlc2hvbGQ7CisJdTMyIGZhaXJuZXNzX3RpbWVvdXQ7Cit9OworCisKKy8qCisgKiBwZXItcG9ydCBTQUZDIHZhcmlhYmxlcworICovCitzdHJ1Y3Qgc2FmY19zdHJ1Y3RfcGVyX3BvcnQgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBfX3Jlc2VydmVkMDsKKwl1OCBjdXJfY29zX3R5cGVzOworCXU4IHNhZmNfdGltZW91dF91c2VjOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggc2FmY190aW1lb3V0X3VzZWM7CisJdTggY3VyX2Nvc190eXBlczsKKwl1MTYgX19yZXNlcnZlZDA7CisjZW5kaWYKKwl1OCBjb3NfdG9fcHJvdG9jb2xbTUFYX0NPU19OVU1CRVJdOworfTsKKworCisvKgorICogUGVyLXBvcnQgY29uZ2VzdGlvbiBtYW5hZ2VtZW50IHZhcmlhYmxlcworICovCitzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgeworCXN0cnVjdCByYXRlX3NoYXBpbmdfdmFyc19wZXJfcG9ydCByc192YXJzOworCXN0cnVjdCBmYWlybmVzc192YXJzX3Blcl9wb3J0IGZhaXJfdmFyczsKKwlzdHJ1Y3Qgc2FmY19zdHJ1Y3RfcGVyX3BvcnQgc2FmY192YXJzOworCXN0cnVjdCBjbW5nX2ZsYWdzX3Blcl9wb3J0IGZsYWdzOworfTsKKworCisvKgorICogUHJvdG9jb2wtY29tbW9uIHN0YXRpc3RpY3MgY29sbGVjdGVkIGJ5IHRoZSBYc3Rvcm0gKHBlciBjbGllbnQpCisgKi8KK3N0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyB7CiAJc3RydWN0IHJlZ3BhaXIgdG90YWxfc2VudF9ieXRlczsKIAl1MzIgdG90YWxfc2VudF9wa3RzOwogCXUzMiB1bmljYXN0X3BrdHNfc2VudDsKQEAgLTIwOTcsOSArMjcwOSwzMSBAQAogCXUzMiBtdWx0aWNhc3RfcGt0c19zZW50OwogCXUzMiBicm9hZGNhc3RfcGt0c19zZW50OwogCXN0cnVjdCByZWdwYWlyIGJyb2FkY2FzdF9ieXRlc19zZW50OwotCXN0cnVjdCByZWdwYWlyIGRvbmU7CisJdTE2IHN0YXRzX2NvdW50ZXI7CisJdTE2IHJlc2VydmVkMDsKKwl1MzIgcmVzZXJ2ZWQxOwogfTsKIAorCisvKgorICogQ29tbW9uIHN0YXRpc3RpY3MgY29sbGVjdGVkIGJ5IHRoZSBYc3Rvcm0gKHBlciBwb3J0KQorICovCitzdHJ1Y3QgeHN0b3JtX2NvbW1vbl9zdGF0cyB7Cisgc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzIGNsaWVudF9zdGF0aXN0aWNzW01BWF9YX1NUQVRfQ09VTlRFUl9JRF07Cit9OworCisKKy8qCisgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFRzdG9ybSAocGVyIHBvcnQpCisgKi8KK3N0cnVjdCB0c3Rvcm1fcGVyX3BvcnRfc3RhdHMgeworCXUzMiBtYWNfZmlsdGVyX2Rpc2NhcmQ7CisJdTMyIHh4b3ZlcmZsb3dfZGlzY2FyZDsKKwl1MzIgYnJiX3RydW5jYXRlX2Rpc2NhcmQ7CisJdTMyIG1hY19kaXNjYXJkOworfTsKKworCiAvKgogICogUHJvdG9jb2wtY29tbW9uIHN0YXRpc3RpY3MgY29sbGVjdGVkIGJ5IHRoZSBUc3Rvcm0gKHBlciBjbGllbnQpCiAgKi8KQEAgLTIxMTcsMjAgKzI3NTEsMTcgQEAKIAl1MzIgcmN2X211bHRpY2FzdF9wa3RzOwogCXUzMiBub19idWZmX2Rpc2NhcmQ7CiAJdTMyIHR0bDBfZGlzY2FyZDsKLQl1MzIgbWFjX2Rpc2NhcmQ7Ci0JdTMyIHJlc2VydmVkOworCXUxNiBzdGF0c19jb3VudGVyOworCXUxNiByZXNlcnZlZDA7CisJdTMyIHJlc2VydmVkMTsKIH07CiAKIC8qCi0gKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFRzdG9ybSAocGVyIHBvcnQpCisgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFRzdG9ybQogICovCiBzdHJ1Y3QgdHN0b3JtX2NvbW1vbl9zdGF0cyB7Ci0Jc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzIGNsaWVudF9zdGF0aXN0aWNzW01BWF9UX1NUQVRfQ09VTlRFUl9JRF07Ci0JdTMyIG1hY19maWx0ZXJfZGlzY2FyZDsKLQl1MzIgeHhvdmVyZmxvd19kaXNjYXJkOwotCXUzMiBicmJfdHJ1bmNhdGVfZGlzY2FyZDsKLQl1MzIgcmVzZXJ2ZWQ7Ci0Jc3RydWN0IHJlZ3BhaXIgZG9uZTsKKwlzdHJ1Y3QgdHN0b3JtX3Blcl9wb3J0X3N0YXRzIHBvcnRfc3RhdGlzdGljczsKKyBzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgY2xpZW50X3N0YXRpc3RpY3NbTUFYX1RfU1RBVF9DT1VOVEVSX0lEXTsKIH07CiAKIC8qCkBAIC0yMTQzLDYgKzI3NzQsMTYgQEAKIAogCiAvKgorICogcGVyLXZuaWMgZmFpcm5lc3MgdmFyaWFibGVzCisgKi8KK3N0cnVjdCBmYWlybmVzc192YXJzX3Blcl92biB7CisJdTMyIHByb3RvY29sX2NyZWRpdF9kZWx0YVtOVU1fT0ZfUFJPVE9DT0xTXTsKKwl1MzIgdm5fY3JlZGl0X2RlbHRhOworCXUzMiBfX3Jlc2VydmVkMDsKK307CisKKworLyoKICAqIEZXIHZlcnNpb24gc3RvcmVkIGluIHRoZSBYc3Rvcm0gUkFNCiAgKi8KIHN0cnVjdCBmd192ZXJzaW9uIHsKQEAgLTIxNjAsOCArMjgwMSwxMCBAQAogI2RlZmluZSBGV19WRVJTSU9OX09QVElNSVpFRF9TSElGVCAwCiAjZGVmaW5lIEZXX1ZFUlNJT05fQklHX0VORElFTiAoMHgxPDwxKQogI2RlZmluZSBGV19WRVJTSU9OX0JJR19FTkRJRU5fU0hJRlQgMQotI2RlZmluZSBfX0ZXX1ZFUlNJT05fUkVTRVJWRUQgKDB4M0ZGRkZGRkY8PDIpCi0jZGVmaW5lIF9fRldfVkVSU0lPTl9SRVNFUlZFRF9TSElGVCAyCisjZGVmaW5lIEZXX1ZFUlNJT05fQ0hJUF9WRVJTSU9OICgweDM8PDIpCisjZGVmaW5lIEZXX1ZFUlNJT05fQ0hJUF9WRVJTSU9OX1NISUZUIDIKKyNkZWZpbmUgX19GV19WRVJTSU9OX1JFU0VSVkVEICgweEZGRkZGRkY8PDQpCisjZGVmaW5lIF9fRldfVkVSU0lPTl9SRVNFUlZFRF9TSElGVCA0CiB9OwogCiAKQEAgLTIxNjksMTUgKzI4MTIsOSBAQAogICogRlcgdmVyc2lvbiBzdG9yZWQgaW4gZmlyc3QgbGluZSBvZiBwcmFtCiAgKi8KIHN0cnVjdCBwcmFtX2Z3X3ZlcnNpb24gewotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBwYXRjaDsKLQl1OCBwcmltYXJ5OwotCXU4IGNsaWVudDsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXU4IGNsaWVudDsKIAl1OCBwcmltYXJ5OwogCXUxNiBwYXRjaDsKLSNlbmRpZgogCXU4IGZsYWdzOwogI2RlZmluZSBQUkFNX0ZXX1ZFUlNJT05fT1BUSU1JWkVEICgweDE8PDApCiAjZGVmaW5lIFBSQU1fRldfVkVSU0lPTl9PUFRJTUlaRURfU0hJRlQgMApAQCAtMjE4NSw4ICsyODIyLDM0IEBACiAjZGVmaW5lIFBSQU1fRldfVkVSU0lPTl9TVE9STV9JRF9TSElGVCAxCiAjZGVmaW5lIFBSQU1fRldfVkVSU0lPTl9CSUdfRU5ESUVOICgweDE8PDMpCiAjZGVmaW5lIFBSQU1fRldfVkVSU0lPTl9CSUdfRU5ESUVOX1NISUZUIDMKLSNkZWZpbmUgX19QUkFNX0ZXX1ZFUlNJT05fUkVTRVJWRUQwICgweEY8PDQpCi0jZGVmaW5lIF9fUFJBTV9GV19WRVJTSU9OX1JFU0VSVkVEMF9TSElGVCA0CisjZGVmaW5lIFBSQU1fRldfVkVSU0lPTl9DSElQX1ZFUlNJT04gKDB4Mzw8NCkKKyNkZWZpbmUgUFJBTV9GV19WRVJTSU9OX0NISVBfVkVSU0lPTl9TSElGVCA0CisjZGVmaW5lIF9fUFJBTV9GV19WRVJTSU9OX1JFU0VSVkVEMCAoMHgzPDw2KQorI2RlZmluZSBfX1BSQU1fRldfVkVSU0lPTl9SRVNFUlZFRDBfU0hJRlQgNgorfTsKKworCisvKgorICogYSBzaW5nbGUgcmF0ZSBzaGFwaW5nIGNvdW50ZXIuIGNhbiBiZSB1c2VkIGFzIHByb3RvY29sIG9yIHZuaWMgY291bnRlcgorICovCitzdHJ1Y3QgcmF0ZV9zaGFwaW5nX2NvdW50ZXIgeworCXUzMiBxdW90YTsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgX19yZXNlcnZlZDA7CisJdTE2IHJhdGU7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgcmF0ZTsKKwl1MTYgX19yZXNlcnZlZDA7CisjZW5kaWYKK307CisKKworLyoKKyAqIHBlci12bmljIHJhdGUgc2hhcGluZyB2YXJpYWJsZXMKKyAqLworc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl92biB7CisJc3RydWN0IHJhdGVfc2hhcGluZ19jb3VudGVyIHByb3RvY29sX2NvdW50ZXJzW05VTV9PRl9QUk9UT0NPTFNdOworCXN0cnVjdCByYXRlX3NoYXBpbmdfY291bnRlciB2bl9jb3VudGVyOwogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9pbml0LmggYi9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKaW5kZXggMzcwNjg2ZS4uNGM3NzUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaApAQCAtMjIsNyArMjIsOCBAQAogI2RlZmluZSBJTklUX0FTSUMJCQkweDQKICNkZWZpbmUgSU5JVF9IQVJEV0FSRQkJCTB4NwogCi0jZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFCQkoMHg1ODAwIC8gNCkKKyNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTEJCSgweDU4MDAgLyA0KQorI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRV9FMUgJCSgweDEwMDAwIC8gNCkKICNkZWZpbmUgVFNUT1JNX0lOVE1FTV9BRERSCQkweDFhMDAwMAogI2RlZmluZSBDU1RPUk1fSU5UTUVNX0FERFIJCTB4MjIwMDAwCiAjZGVmaW5lIFhTVE9STV9JTlRNRU1fQUREUgkJMHgyYTAwMDAKQEAgLTMwLDcgKzMxLDcgQEAKIAogCiAvKiBJbml0IG9wZXJhdGlvbiB0eXBlcyBhbmQgc3RydWN0dXJlcyAqLwotCisvKiBDb21tb24gZm9yIGJvdGggRTEgYW5kIEUxSCAqLwogI2RlZmluZSBPUF9SRAkJCTB4MSAvKiByZWFkIHNpbmdsZSByZWdpc3RlciAqLwogI2RlZmluZSBPUF9XUgkJCTB4MiAvKiB3cml0ZSBzaW5nbGUgcmVnaXN0ZXIgKi8KICNkZWZpbmUgT1BfSVcJCQkweDMgLyogd3JpdGUgc2luZ2xlIHJlZ2lzdGVyIHVzaW5nIG1haWxib3ggKi8KQEAgLTM4LDcgKzM5LDM3IEBACiAjZGVmaW5lIE9QX1NJCQkJMHg1IC8qIGNvcHkgYSBzdHJpbmcgdXNpbmcgbWFpbGJveCAqLwogI2RlZmluZSBPUF9aUgkJCTB4NiAvKiBjbGVhciBtZW1vcnkgKi8KICNkZWZpbmUgT1BfWlAJCQkweDcgLyogdW56aXAgdGhlbiBjb3B5IHdpdGggRE1BRSAqLwotI2RlZmluZSBPUF9XQgkJCTB4OCAvKiBjb3B5IGEgc3RyaW5nIHVzaW5nIERNQUUgKi8KKyNkZWZpbmUgT1BfV1JfNjQJCTB4OCAvKiB3cml0ZSA2NCBiaXQgcGF0dGVybiAqLworI2RlZmluZSBPUF9XQgkJCTB4OSAvKiBjb3B5IGEgc3RyaW5nIHVzaW5nIERNQUUgKi8KKworLyogT3BlcmF0aW9uIHNwZWNpZmljIGZvciBFMSAqLworI2RlZmluZSBPUF9SRF9FMQkJMHhhIC8qIHJlYWQgc2luZ2xlIHJlZ2lzdGVyICovCisjZGVmaW5lIE9QX1dSX0UxCQkweGIgLyogd3JpdGUgc2luZ2xlIHJlZ2lzdGVyICovCisjZGVmaW5lIE9QX0lXX0UxCQkweGMgLyogd3JpdGUgc2luZ2xlIHJlZ2lzdGVyIHVzaW5nIG1haWxib3ggKi8KKyNkZWZpbmUgT1BfU1dfRTEJCTB4ZCAvKiBjb3B5IGEgc3RyaW5nIHRvIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUgT1BfU0lfRTEJCTB4ZSAvKiBjb3B5IGEgc3RyaW5nIHVzaW5nIG1haWxib3ggKi8KKyNkZWZpbmUgT1BfWlJfRTEJCTB4ZiAvKiBjbGVhciBtZW1vcnkgKi8KKyNkZWZpbmUgT1BfWlBfRTEJCTB4MTAgLyogdW56aXAgdGhlbiBjb3B5IHdpdGggRE1BRSAqLworI2RlZmluZSBPUF9XUl82NF9FMQkJMHgxMSAvKiB3cml0ZSA2NCBiaXQgcGF0dGVybiBvbiBFMSAqLworI2RlZmluZSBPUF9XQl9FMQkJMHgxMiAvKiBjb3B5IGEgc3RyaW5nIHVzaW5nIERNQUUgKi8KKworLyogT3BlcmF0aW9uIHNwZWNpZmljIGZvciBFMUggKi8KKyNkZWZpbmUgT1BfUkRfRTFICQkweDEzIC8qIHJlYWQgc2luZ2xlIHJlZ2lzdGVyICovCisjZGVmaW5lIE9QX1dSX0UxSAkJMHgxNCAvKiB3cml0ZSBzaW5nbGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1BfSVdfRTFICQkweDE1IC8qIHdyaXRlIHNpbmdsZSByZWdpc3RlciB1c2luZyBtYWlsYm94ICovCisjZGVmaW5lIE9QX1NXX0UxSAkJMHgxNiAvKiBjb3B5IGEgc3RyaW5nIHRvIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUgT1BfU0lfRTFICQkweDE3IC8qIGNvcHkgYSBzdHJpbmcgdXNpbmcgbWFpbGJveCAqLworI2RlZmluZSBPUF9aUl9FMUgJCTB4MTggLyogY2xlYXIgbWVtb3J5ICovCisjZGVmaW5lIE9QX1pQX0UxSAkJMHgxOSAvKiB1bnppcCB0aGVuIGNvcHkgd2l0aCBETUFFICovCisjZGVmaW5lIE9QX1dSXzY0X0UxSAkJMHgxYSAvKiB3cml0ZSA2NCBiaXQgcGF0dGVybiBvbiBFMUggKi8KKyNkZWZpbmUgT1BfV0JfRTFICQkweDFiIC8qIGNvcHkgYSBzdHJpbmcgdXNpbmcgRE1BRSAqLworCisvKiBGUEdBIGFuZCBFTVVMIHNwZWNpZmljIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgT1BfV1JfRU1VTF9FMUgJCTB4MWMgLyogd3JpdGUgc2luZ2xlIHJlZ2lzdGVyIG9uIEUxSCBFbXVsICovCisjZGVmaW5lIE9QX1dSX0VNVUwJCTB4MWQgLyogd3JpdGUgc2luZ2xlIHJlZ2lzdGVyIG9uIEVtdWxhdGlvbiAqLworI2RlZmluZSBPUF9XUl9GUEdBCQkweDFlIC8qIHdyaXRlIHNpbmdsZSByZWdpc3RlciBvbiBGUEdBICovCisjZGVmaW5lIE9QX1dSX0FTSUMJCTB4MWYgLyogd3JpdGUgc2luZ2xlIHJlZ2lzdGVyIG9uIEFTSUMgKi8KKwogCiBzdHJ1Y3QgcmF3X29wIHsKIAl1MzIgb3AJCTo4OwpAQCAtODcsMTAgKzExOCw2IEBACiAjaW5jbHVkZSAiYm54MnhfaW5pdF92YWx1ZXMuaCIKIAogc3RhdGljIHZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCk7Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3dyaXRlX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCSAgICAgdTMyIGRzdF9hZGRyLCB1MzIgbGVuMzIpOwotCiBzdGF0aWMgaW50IGJueDJ4X2d1bnppcChzdHJ1Y3QgYm54MnggKmJwLCB1OCAqemJ1ZiwgaW50IGxlbik7CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfc3RyX3dyKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1MzIgKmRhdGEsCkBAIC0xMDcsOSArMTM0LDYgQEAKIAl9CiB9CiAKLSNkZWZpbmUgSU5JVF9NRU1fV1IocmVnLCBkYXRhLCByZWdfb2ZmLCBsZW4pIFwKLQlibngyeF9pbml0X3N0cl93cihicCwgcmVnICsgcmVnX29mZio0LCBkYXRhLCBsZW4pCi0KIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW5kX3dyKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1MzIgKmRhdGEsCiAJCQkgICAgICB1MTYgbGVuKQogewpAQCAtMTI0LDExICsxNDgsMTE3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBibngyeF93cml0ZV9iaWdfYnVmKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCB1MzIgbGVuKQoreworI2lmZGVmIFVTRV9ETUFFCisJaW50IG9mZnNldCA9IDA7CisKKwlpZiAoYnAtPmRtYWVfcmVhZHkpIHsKKwkJd2hpbGUgKGxlbiA+IERNQUVfTEVOMzJfV1JfTUFYKSB7CisJCQlibngyeF93cml0ZV9kbWFlKGJwLCBicC0+Z3VuemlwX21hcHBpbmcgKyBvZmZzZXQsCisJCQkJCSBhZGRyICsgb2Zmc2V0LCBETUFFX0xFTjMyX1dSX01BWCk7CisJCQlvZmZzZXQgKz0gRE1BRV9MRU4zMl9XUl9NQVggKiA0OworCQkJbGVuIC09IERNQUVfTEVOMzJfV1JfTUFYOworCQl9CisJCWJueDJ4X3dyaXRlX2RtYWUoYnAsIGJwLT5ndW56aXBfbWFwcGluZyArIG9mZnNldCwKKwkJCQkgYWRkciArIG9mZnNldCwgbGVuKTsKKwl9IGVsc2UKKwkJYm54MnhfaW5pdF9zdHJfd3IoYnAsIGFkZHIsIGJwLT5ndW56aXBfYnVmLCBsZW4pOworI2Vsc2UKKwlibngyeF9pbml0X3N0cl93cihicCwgYWRkciwgYnAtPmd1bnppcF9idWYsIGxlbik7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF9maWxsKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBpbnQgZmlsbCwgdTMyIGxlbikKK3sKKwlpZiAoKGxlbiAqIDQpID4gRldfQlVGX1NJWkUpIHsKKwkJQk5YMlhfRVJSKCJMQVJHRSBETUFFIE9QRVJBVElPTiAhIGFkZHIgMHgleCAgbGVuIDB4JXhcbiIsCisJCQkgIGFkZHIsIGxlbio0KTsKKwkJcmV0dXJuOworCX0KKwltZW1zZXQoYnAtPmd1bnppcF9idWYsIGZpbGwsIGxlbiAqIDQpOworCisJYm54Mnhfd3JpdGVfYmlnX2J1ZihicCwgYWRkciwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF93cl82NChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgY29uc3QgdTMyICpkYXRhLAorCQkJICAgICB1MzIgbGVuNjQpCit7CisJdTMyIGJ1Zl9sZW4zMiA9IEZXX0JVRl9TSVpFLzQ7CisJdTMyIGxlbiA9IGxlbjY0KjI7CisJdTY0IGRhdGE2NCA9IDA7CisJaW50IGk7CisKKwkvKiA2NCBiaXQgdmFsdWUgaXMgaW4gYSBibG9iOiBmaXJzdCBsb3cgRFdPUkQsIHRoZW4gaGlnaCBEV09SRCAqLworCWRhdGE2NCA9IEhJTE9fVTY0KCgqKGRhdGEgKyAxKSksICgqZGF0YSkpOworCWxlbjY0ID0gbWluKCh1MzIpKEZXX0JVRl9TSVpFLzgpLCBsZW42NCk7CisJZm9yIChpID0gMDsgaSA8IGxlbjY0OyBpKyspIHsKKwkJdTY0ICpwZGF0YSA9ICgodTY0ICopKGJwLT5ndW56aXBfYnVmKSkgKyBpOworCisJCSpwZGF0YSA9IGRhdGE2NDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IGJ1Zl9sZW4zMikgeworCQl1MzIgY3VyX2xlbiA9IG1pbihidWZfbGVuMzIsIGxlbiAtIGkpOworCisJCWJueDJ4X3dyaXRlX2JpZ19idWYoYnAsIGFkZHIgKyBpICogNCwgY3VyX2xlbik7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBUaGVyZSBhcmUgZGlmZmVyZW50IGJsb2JzIGZvciBlYWNoIFBSQU0gc2VjdGlvbi4KKyAgIEluIGFkZGl0aW9uLCBlYWNoIGJsb2Igd3JpdGUgb3BlcmF0aW9uIGlzIGRpdmlkZWQgaW50byBhIGZldyBvcGVyYXRpb25zCisgICBpbiBvcmRlciB0byBkZWNyZWFzZSB0aGUgYW1vdW50IG9mIHBoeXMuIGNvbnRpZ2lvdXMgYnVmZmVyIG5lZWRlZC4KKyAgIFRodXMsIHdoZW4gd2Ugc2VsZWN0IGEgYmxvYiB0aGUgYWRkcmVzcyBtYXkgYmUgd2l0aCBzb21lIG9mZnNldAorICAgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIFBSQU0gc2VjdGlvbi4KKyAgIFRoZSBzYW1lIGhvbGRzIGZvciB0aGUgSU5UX1RBQkxFIHNlY3Rpb25zLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZfSVNfSU5UX1RBQkxFX0FERFIoYmFzZSwgYWRkcikgXAorCQkJaWYgKCgoYmFzZSkgPD0gKGFkZHIpKSAmJiAoKGJhc2UpICsgMHg0MDAgPj0gKGFkZHIpKSkKKworI2RlZmluZSBJRl9JU19QUkFNX0FERFIoYmFzZSwgYWRkcikgXAorCQkJaWYgKCgoYmFzZSkgPD0gKGFkZHIpKSAmJiAoKGJhc2UpICsgMHg0MDAwMCA+PSAoYWRkcikpKQorCitzdGF0aWMgY29uc3QgdTMyICpibngyeF9zZWxfYmxvYih1MzIgYWRkciwgY29uc3QgdTMyICpkYXRhLCBpbnQgaXNfZTEpCit7CisJSUZfSVNfSU5UX1RBQkxFX0FERFIoVFNFTV9SRUdfSU5UX1RBQkxFLCBhZGRyKQorCQlkYXRhID0gaXNfZTEgPyB0c2VtX2ludF90YWJsZV9kYXRhX2UxIDoKKwkJCSAgICAgICB0c2VtX2ludF90YWJsZV9kYXRhX2UxaDsKKwllbHNlCisJCUlGX0lTX0lOVF9UQUJMRV9BRERSKENTRU1fUkVHX0lOVF9UQUJMRSwgYWRkcikKKwkJCWRhdGEgPSBpc19lMSA/IGNzZW1faW50X3RhYmxlX2RhdGFfZTEgOgorCQkJCSAgICAgICBjc2VtX2ludF90YWJsZV9kYXRhX2UxaDsKKwllbHNlCisJCUlGX0lTX0lOVF9UQUJMRV9BRERSKFVTRU1fUkVHX0lOVF9UQUJMRSwgYWRkcikKKwkJCWRhdGEgPSBpc19lMSA/IHVzZW1faW50X3RhYmxlX2RhdGFfZTEgOgorCQkJCSAgICAgICB1c2VtX2ludF90YWJsZV9kYXRhX2UxaDsKKwllbHNlCisJCUlGX0lTX0lOVF9UQUJMRV9BRERSKFhTRU1fUkVHX0lOVF9UQUJMRSwgYWRkcikKKwkJCWRhdGEgPSBpc19lMSA/IHhzZW1faW50X3RhYmxlX2RhdGFfZTEgOgorCQkJCSAgICAgICB4c2VtX2ludF90YWJsZV9kYXRhX2UxaDsKKwllbHNlCisJCUlGX0lTX1BSQU1fQUREUihUU0VNX1JFR19QUkFNLCBhZGRyKQorCQkJZGF0YSA9IGlzX2UxID8gdHNlbV9wcmFtX2RhdGFfZTEgOiB0c2VtX3ByYW1fZGF0YV9lMWg7CisJZWxzZQorCQlJRl9JU19QUkFNX0FERFIoQ1NFTV9SRUdfUFJBTSwgYWRkcikKKwkJCWRhdGEgPSBpc19lMSA/IGNzZW1fcHJhbV9kYXRhX2UxIDogY3NlbV9wcmFtX2RhdGFfZTFoOworCWVsc2UKKwkJSUZfSVNfUFJBTV9BRERSKFVTRU1fUkVHX1BSQU0sIGFkZHIpCisJCQlkYXRhID0gaXNfZTEgPyB1c2VtX3ByYW1fZGF0YV9lMSA6IHVzZW1fcHJhbV9kYXRhX2UxaDsKKwllbHNlCisJCUlGX0lTX1BSQU1fQUREUihYU0VNX1JFR19QUkFNLCBhZGRyKQorCQkJZGF0YSA9IGlzX2UxID8geHNlbV9wcmFtX2RhdGFfZTEgOiB4c2VtX3ByYW1fZGF0YV9lMWg7CisKKwlyZXR1cm4gZGF0YTsKK30KKwogc3RhdGljIHZvaWQgYm54MnhfaW5pdF93cl93YihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgY29uc3QgdTMyICpkYXRhLAotCQkJICAgICB1MzIgbGVuLCBpbnQgZ3VuemlwKQorCQkJICAgICB1MzIgbGVuLCBpbnQgZ3VuemlwLCBpbnQgaXNfZTEsIHUzMiBibG9iX29mZikKIHsKIAlpbnQgb2Zmc2V0ID0gMDsKIAorCWRhdGEgPSBibngyeF9zZWxfYmxvYihhZGRyLCBkYXRhLCBpc19lMSkgKyBibG9iX29mZjsKKwogCWlmIChndW56aXApIHsKIAkJaW50IHJjOwogI2lmZGVmIF9fQklHX0VORElBTgpAQCAtMTQzLDY0ICsyNzMsNTkgQEAKICNlbmRpZgogCQlyYyA9IGJueDJ4X2d1bnppcChicCwgKHU4ICopZGF0YSwgbGVuKTsKIAkJaWYgKHJjKSB7Ci0JCQlEUChORVRJRl9NU0dfSFcsICJndW56aXAgZmFpbGVkICEgcmMgJWRcbiIsIHJjKTsKKwkJCUJOWDJYX0VSUigiZ3VuemlwIGZhaWxlZCAhIHJjICVkXG4iLCByYyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJbGVuID0gYnAtPmd1bnppcF9vdXRsZW47CiAjaWZkZWYgX19CSUdfRU5ESUFOCiAJCWtmcmVlKHRlbXApOwogCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQkgKCh1MzIgKilicC0+Z3VuemlwX2J1ZilbaV0gPQorCQkJKCh1MzIgKilicC0+Z3VuemlwX2J1ZilbaV0gPQogCQkJCQlzd2FiMzIoKCh1MzIgKilicC0+Z3VuemlwX2J1ZilbaV0pOwogI2VuZGlmCiAJfSBlbHNlIHsKIAkJaWYgKChsZW4gKiA0KSA+IEZXX0JVRl9TSVpFKSB7Ci0JCQlCTlgyWF9FUlIoIkxBUkdFIERNQUUgT1BFUkFUSU9OICEgbGVuIDB4JXhcbiIsIGxlbio0KTsKKwkJCUJOWDJYX0VSUigiTEFSR0UgRE1BRSBPUEVSQVRJT04gISAiCisJCQkJICAiYWRkciAweCV4ICBsZW4gMHgleFxuIiwgYWRkciwgbGVuKjQpOwogCQkJcmV0dXJuOwogCQl9CiAJCW1lbWNweShicC0+Z3VuemlwX2J1ZiwgZGF0YSwgbGVuICogNCk7CiAJfQogCi0Jd2hpbGUgKGxlbiA+IERNQUVfTEVOMzJfTUFYKSB7CisJaWYgKGJwLT5kbWFlX3JlYWR5KSB7CisJCXdoaWxlIChsZW4gPiBETUFFX0xFTjMyX1dSX01BWCkgeworCQkJYm54Mnhfd3JpdGVfZG1hZShicCwgYnAtPmd1bnppcF9tYXBwaW5nICsgb2Zmc2V0LAorCQkJCQkgYWRkciArIG9mZnNldCwgRE1BRV9MRU4zMl9XUl9NQVgpOworCQkJb2Zmc2V0ICs9IERNQUVfTEVOMzJfV1JfTUFYICogNDsKKwkJCWxlbiAtPSBETUFFX0xFTjMyX1dSX01BWDsKKwkJfQogCQlibngyeF93cml0ZV9kbWFlKGJwLCBicC0+Z3VuemlwX21hcHBpbmcgKyBvZmZzZXQsCi0JCQkJIGFkZHIgKyBvZmZzZXQsIERNQUVfTEVOMzJfTUFYKTsKLQkJb2Zmc2V0ICs9IERNQUVfTEVOMzJfTUFYICogNDsKLQkJbGVuIC09IERNQUVfTEVOMzJfTUFYOwotCX0KLQlibngyeF93cml0ZV9kbWFlKGJwLCBicC0+Z3VuemlwX21hcHBpbmcgKyBvZmZzZXQsIGFkZHIgKyBvZmZzZXQsIGxlbik7Ci19Ci0KLSNkZWZpbmUgSU5JVF9NRU1fV0IocmVnLCBkYXRhLCByZWdfb2ZmLCBsZW4pIFwKLQlibngyeF9pbml0X3dyX3diKGJwLCByZWcgKyByZWdfb2ZmKjQsIGRhdGEsIGxlbiwgMCkKLQotI2RlZmluZSBJTklUX0dVTlpJUF9ETUFFKHJlZywgZGF0YSwgcmVnX29mZiwgbGVuKSBcCi0JYm54MnhfaW5pdF93cl93YihicCwgcmVnICsgcmVnX29mZio0LCBkYXRhLCBsZW4sIDEpCi0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfZmlsbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgaW50IGZpbGwsIHUzMiBsZW4pCi17Ci0JaW50IG9mZnNldCA9IDA7Ci0KLQlpZiAoKGxlbiAqIDQpID4gRldfQlVGX1NJWkUpIHsKLQkJQk5YMlhfRVJSKCJMQVJHRSBETUFFIE9QRVJBVElPTiAhIGxlbiAweCV4XG4iLCBsZW4gKiA0KTsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoYnAtPmd1bnppcF9idWYsIGZpbGwsIGxlbiAqIDQpOwotCi0Jd2hpbGUgKGxlbiA+IERNQUVfTEVOMzJfTUFYKSB7Ci0JCWJueDJ4X3dyaXRlX2RtYWUoYnAsIGJwLT5ndW56aXBfbWFwcGluZyArIG9mZnNldCwKLQkJCQkgYWRkciArIG9mZnNldCwgRE1BRV9MRU4zMl9NQVgpOwotCQlvZmZzZXQgKz0gRE1BRV9MRU4zMl9NQVggKiA0OwotCQlsZW4gLT0gRE1BRV9MRU4zMl9NQVg7Ci0JfQotCWJueDJ4X3dyaXRlX2RtYWUoYnAsIGJwLT5ndW56aXBfbWFwcGluZyArIG9mZnNldCwgYWRkciArIG9mZnNldCwgbGVuKTsKKwkJCQkgYWRkciArIG9mZnNldCwgbGVuKTsKKwl9IGVsc2UKKwkJYm54MnhfaW5pdF9pbmRfd3IoYnAsIGFkZHIsIGJwLT5ndW56aXBfYnVmLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2Jsb2NrKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvcF9zdGFydCwgdTMyIG9wX2VuZCkKIHsKLQlpbnQgaTsKKwlpbnQgaXNfZTEgICAgICAgPSBDSElQX0lTX0UxKGJwKTsKKwlpbnQgaXNfZTFoICAgICAgPSBDSElQX0lTX0UxSChicCk7CisJaW50IGlzX2VtdWxfZTFoID0gKENISVBfUkVWX0lTX0VNVUwoYnApICYmIGlzX2UxaCk7CisJaW50IGh3X3dyLCBpOwogCXVuaW9uIGluaXRfb3AgKm9wOwogCXUzMiBvcF90eXBlLCBhZGRyLCBsZW47Ci0JY29uc3QgdTMyICpkYXRhOworCWNvbnN0IHUzMiAqZGF0YSwgKmRhdGFfYmFzZTsKKworCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkKKwkJaHdfd3IgPSBPUF9XUl9GUEdBOworCWVsc2UgaWYgKENISVBfUkVWX0lTX0VNVUwoYnApKQorCQlod193ciA9IE9QX1dSX0VNVUw7CisJZWxzZQorCQlod193ciA9IE9QX1dSX0FTSUM7CisKKwlpZiAoaXNfZTEpCisJCWRhdGFfYmFzZSA9IGluaXRfZGF0YV9lMTsKKwllbHNlIC8qIENISVBfSVNfRTFIKGJwKSAqLworCQlkYXRhX2Jhc2UgPSBpbml0X2RhdGFfZTFoOwogCiAJZm9yIChpID0gb3Bfc3RhcnQ7IGkgPCBvcF9lbmQ7IGkrKykgewogCkBAIC0yMDksNyArMzM0LDMwIEBACiAJCW9wX3R5cGUgPSBvcC0+c3RyX3dyLm9wOwogCQlhZGRyID0gb3AtPnN0cl93ci5vZmZzZXQ7CiAJCWxlbiA9IG9wLT5zdHJfd3IuZGF0YV9sZW47Ci0JCWRhdGEgPSBpbml0X2RhdGEgKyBvcC0+c3RyX3dyLmRhdGFfb2ZmOworCQlkYXRhID0gZGF0YV9iYXNlICsgb3AtPnN0cl93ci5kYXRhX29mZjsKKworCQkvKiBjYXJlZnVsbCEgaXQgbXVzdCBiZSBpbiBvcmRlciAqLworCQlpZiAodW5saWtlbHkob3BfdHlwZSA+IE9QX1dCKSkgeworCisJCQkvKiBJZiBFMSBvbmx5ICovCisJCQlpZiAob3BfdHlwZSA8PSBPUF9XQl9FMSkgeworCQkJCWlmIChpc19lMSkKKwkJCQkJb3BfdHlwZSAtPSAoT1BfUkRfRTEgLSBPUF9SRCk7CisKKwkJCS8qIElmIEUxSCBvbmx5ICovCisJCQl9IGVsc2UgaWYgKG9wX3R5cGUgPD0gT1BfV0JfRTFIKSB7CisJCQkJaWYgKGlzX2UxaCkKKwkJCQkJb3BfdHlwZSAtPSAoT1BfUkRfRTFIIC0gT1BfUkQpOworCQkJfQorCisJCQkvKiBIVy9FTVVMIHNwZWNpZmljICovCisJCQlpZiAob3BfdHlwZSA9PSBod193cikKKwkJCQlvcF90eXBlID0gT1BfV1I7CisKKwkJCS8qIEVNVUwgb24gRTFIIGlzIHNwZWNpYWwgKi8KKwkJCWlmICgob3BfdHlwZSA9PSBPUF9XUl9FTVVMX0UxSCkgJiYgaXNfZW11bF9lMWgpCisJCQkJb3BfdHlwZSA9IE9QX1dSOworCQl9CiAKIAkJc3dpdGNoIChvcF90eXBlKSB7CiAJCWNhc2UgT1BfUkQ6CkBAIC0yMjIsNyArMzcwLDcgQEAKIAkJCWJueDJ4X2luaXRfc3RyX3dyKGJwLCBhZGRyLCBkYXRhLCBsZW4pOwogCQkJYnJlYWs7CiAJCWNhc2UgT1BfV0I6Ci0JCQlibngyeF9pbml0X3dyX3diKGJwLCBhZGRyLCBkYXRhLCBsZW4sIDApOworCQkJYm54MnhfaW5pdF93cl93YihicCwgYWRkciwgZGF0YSwgbGVuLCAwLCBpc19lMSwgMCk7CiAJCQlicmVhazsKIAkJY2FzZSBPUF9TSToKIAkJCWJueDJ4X2luaXRfaW5kX3dyKGJwLCBhZGRyLCBkYXRhLCBsZW4pOwpAQCAtMjMxLDEwICszNzksMjEgQEAKIAkJCWJueDJ4X2luaXRfZmlsbChicCwgYWRkciwgMCwgb3AtPnplcm8ubGVuKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QX1pQOgotCQkJYm54MnhfaW5pdF93cl93YihicCwgYWRkciwgZGF0YSwgbGVuLCAxKTsKKwkJCWJueDJ4X2luaXRfd3Jfd2IoYnAsIGFkZHIsIGRhdGEsIGxlbiwgMSwgaXNfZTEsCisJCQkJCSBvcC0+c3RyX3dyLmRhdGFfb2ZmKTsKKwkJCWJyZWFrOworCQljYXNlIE9QX1dSXzY0OgorCQkJYm54MnhfaW5pdF93cl82NChicCwgYWRkciwgZGF0YSwgbGVuKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJQk5YMlhfRVJSKCJCQUQgaW5pdCBvcGVyYXRpb24hXG4iKTsKKwkJCS8qIGhhcHBlbnMgd2hlbmV2ZXIgYW4gb3AgaXMgb2YgYSBkaWZmIEhXICovCisjaWYgMAorCQkJRFAoTkVUSUZfTVNHX0hXLCAic2tpcHBpbmcgaW5pdCBvcGVyYXRpb24gICIKKwkJCSAgICJpbmRleCAlZFslZDolZF06IHR5cGUgJWQgIGFkZHIgMHgleCAgIgorCQkJICAgImxlbiAlZCgweCV4KVxuIiwKKwkJCSAgIGksIG9wX3N0YXJ0LCBvcF9lbmQsIG9wX3R5cGUsIGFkZHIsIGxlbiwgbGVuKTsKKyNlbmRpZgorCQkJYnJlYWs7CiAJCX0KIAl9CiB9CkBAIC0yNDUsNyArNDA0LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogVGhpcyBjb2RlIGNvbmZpZ3VyZXMgdGhlIFBDSSByZWFkL3dyaXRlIGFyYml0ZXIKLSAqIHdoaWNoIGltcGxlbWVudHMgYSB3aWdodGVkIHJvdW5kIHJvYmluCisgKiB3aGljaCBpbXBsZW1lbnRzIGEgd2VpZ2h0ZWQgcm91bmQgcm9iaW4KICAqIGJldHdlZW4gdGhlIHZpcnR1YWwgcXVldWVzIGluIHRoZSBjaGlwLgogICoKICAqIFRoZSB2YWx1ZXMgd2VyZSBkZXJpdmVkIGZvciBlYWNoIFBDSSBtYXggcGF5bG9hZCBhbmQgbWF4IHJlcXVlc3Qgc2l6ZS4KQEAgLTMxNSw3ICs0NzQsNyBAQAogCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDQxfSwgezMyICwgNjQgLCA4MX0gfQogfTsKIAotLyogcmVnaXN0ZXIgYWRyZXNzZXMgZm9yIHJlYWQgcXVldWVzICovCisvKiByZWdpc3RlciBhZGRyZXNzZXMgZm9yIHJlYWQgcXVldWVzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHJlYWRfYXJiX2FkZHJbTlVNX1JEX1EtMV0gPSB7CiAJe1BYUDJfUkVHX1JRX0JXX1JEX0wwLCBQWFAyX1JFR19SUV9CV19SRF9BREQwLAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQwfSwKQEAgLTM3NSw3ICs1MzQsNyBAQAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjI4fQogfTsKIAotLyogcmVnaXN0ZXIgYWRyZXNzZXMgZm9yIHdydGllIHF1ZXVlcyAqLworLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciB3cml0ZSBxdWV1ZXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2FkZHJbTlVNX1dSX1EtMV0gPSB7CiAJe1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjF9LApAQCAtNDI0LDYgKzU4MywxMCBAQAogCQkgICB3X29yZGVyLCBNQVhfV1JfT1JEKTsKIAkJd19vcmRlciA9IE1BWF9XUl9PUkQ7CiAJfQorCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkgeworCQlEUChORVRJRl9NU0dfSFcsICJ3cml0ZSBvcmRlciBhZGp1c3RlZCB0byAxIGZvciBGUEdBXG4iKTsKKwkJd19vcmRlciA9IDA7CisJfQogCURQKE5FVElGX01TR19IVywgInJlYWQgb3JkZXIgJWQgIHdyaXRlIG9yZGVyICVkXG4iLCByX29yZGVyLCB3X29yZGVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fUkRfUS0xOyBpKyspIHsKQEAgLTQ4MSw3ICs2NDQsMjAgQEAKIAkJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9QRFJfTElNSVQsIDB4ZTAwKTsKIAogCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVVNETURQX1RILCAoMHgxOCA8PCB3X29yZGVyKSk7Ci0JUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9ETUFFX1RILCAoMTI4IDw8IHdfb3JkZXIpLzE2KTsKKworCWlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9IQ19NUFMsIHdfb3JkZXIrMSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVVNETV9NUFMsIHdfb3JkZXIrMSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfQ1NETV9NUFMsIHdfb3JkZXIrMSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVFNETV9NUFMsIHdfb3JkZXIrMSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfWFNETV9NUFMsIHdfb3JkZXIrMSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfUU1fTVBTLCB3X29yZGVyKzEpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1RNX01QUywgd19vcmRlcisxKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9TUkNfTVBTLCB3X29yZGVyKzEpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0RCR19NUFMsIHdfb3JkZXIrMSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfRE1BRV9NUFMsIDIpOyAvKiBETUFFIGlzIHNwZWNpYWwgKi8KKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9DRFVfTVBTLCB3X29yZGVyKzEpOworCX0KIH0KIAogCkBAIC01NjQsNiArNzQwLDcyIEBACiAJcmV0dXJuIGNyY19yZXM7CiB9CiAKKy8qIHJlZ2llc2VycyBhZGRyZXNzZXMgYXJlIG5vdCBpbiBvcmRlcgorICAgc28gdGhlc2UgYXJyYXlzIGhlbHAgc2ltcGxpZnkgdGhlIGNvZGUgKi8KK3N0YXRpYyBjb25zdCBpbnQgY21fc3RhcnRbRTFIX0ZVTkNfTUFYXVs5XSA9IHsKKwl7TUlTQ19GVU5DMF9TVEFSVCwgVENNX0ZVTkMwX1NUQVJULCBVQ01fRlVOQzBfU1RBUlQsIENDTV9GVU5DMF9TVEFSVCwKKwkgWENNX0ZVTkMwX1NUQVJULCBUU0VNX0ZVTkMwX1NUQVJULCBVU0VNX0ZVTkMwX1NUQVJULCBDU0VNX0ZVTkMwX1NUQVJULAorCSBYU0VNX0ZVTkMwX1NUQVJUfSwKKwl7TUlTQ19GVU5DMV9TVEFSVCwgVENNX0ZVTkMxX1NUQVJULCBVQ01fRlVOQzFfU1RBUlQsIENDTV9GVU5DMV9TVEFSVCwKKwkgWENNX0ZVTkMxX1NUQVJULCBUU0VNX0ZVTkMxX1NUQVJULCBVU0VNX0ZVTkMxX1NUQVJULCBDU0VNX0ZVTkMxX1NUQVJULAorCSBYU0VNX0ZVTkMxX1NUQVJUfSwKKwl7TUlTQ19GVU5DMl9TVEFSVCwgVENNX0ZVTkMyX1NUQVJULCBVQ01fRlVOQzJfU1RBUlQsIENDTV9GVU5DMl9TVEFSVCwKKwkgWENNX0ZVTkMyX1NUQVJULCBUU0VNX0ZVTkMyX1NUQVJULCBVU0VNX0ZVTkMyX1NUQVJULCBDU0VNX0ZVTkMyX1NUQVJULAorCSBYU0VNX0ZVTkMyX1NUQVJUfSwKKwl7TUlTQ19GVU5DM19TVEFSVCwgVENNX0ZVTkMzX1NUQVJULCBVQ01fRlVOQzNfU1RBUlQsIENDTV9GVU5DM19TVEFSVCwKKwkgWENNX0ZVTkMzX1NUQVJULCBUU0VNX0ZVTkMzX1NUQVJULCBVU0VNX0ZVTkMzX1NUQVJULCBDU0VNX0ZVTkMzX1NUQVJULAorCSBYU0VNX0ZVTkMzX1NUQVJUfSwKKwl7TUlTQ19GVU5DNF9TVEFSVCwgVENNX0ZVTkM0X1NUQVJULCBVQ01fRlVOQzRfU1RBUlQsIENDTV9GVU5DNF9TVEFSVCwKKwkgWENNX0ZVTkM0X1NUQVJULCBUU0VNX0ZVTkM0X1NUQVJULCBVU0VNX0ZVTkM0X1NUQVJULCBDU0VNX0ZVTkM0X1NUQVJULAorCSBYU0VNX0ZVTkM0X1NUQVJUfSwKKwl7TUlTQ19GVU5DNV9TVEFSVCwgVENNX0ZVTkM1X1NUQVJULCBVQ01fRlVOQzVfU1RBUlQsIENDTV9GVU5DNV9TVEFSVCwKKwkgWENNX0ZVTkM1X1NUQVJULCBUU0VNX0ZVTkM1X1NUQVJULCBVU0VNX0ZVTkM1X1NUQVJULCBDU0VNX0ZVTkM1X1NUQVJULAorCSBYU0VNX0ZVTkM1X1NUQVJUfSwKKwl7TUlTQ19GVU5DNl9TVEFSVCwgVENNX0ZVTkM2X1NUQVJULCBVQ01fRlVOQzZfU1RBUlQsIENDTV9GVU5DNl9TVEFSVCwKKwkgWENNX0ZVTkM2X1NUQVJULCBUU0VNX0ZVTkM2X1NUQVJULCBVU0VNX0ZVTkM2X1NUQVJULCBDU0VNX0ZVTkM2X1NUQVJULAorCSBYU0VNX0ZVTkM2X1NUQVJUfSwKKwl7TUlTQ19GVU5DN19TVEFSVCwgVENNX0ZVTkM3X1NUQVJULCBVQ01fRlVOQzdfU1RBUlQsIENDTV9GVU5DN19TVEFSVCwKKwkgWENNX0ZVTkM3X1NUQVJULCBUU0VNX0ZVTkM3X1NUQVJULCBVU0VNX0ZVTkM3X1NUQVJULCBDU0VNX0ZVTkM3X1NUQVJULAorCSBYU0VNX0ZVTkM3X1NUQVJUfQorfTsKKworc3RhdGljIGNvbnN0IGludCBjbV9lbmRbRTFIX0ZVTkNfTUFYXVs5XSA9IHsKKwl7TUlTQ19GVU5DMF9FTkQsIFRDTV9GVU5DMF9FTkQsIFVDTV9GVU5DMF9FTkQsIENDTV9GVU5DMF9FTkQsCisJIFhDTV9GVU5DMF9FTkQsIFRTRU1fRlVOQzBfRU5ELCBVU0VNX0ZVTkMwX0VORCwgQ1NFTV9GVU5DMF9FTkQsCisJIFhTRU1fRlVOQzBfRU5EfSwKKwl7TUlTQ19GVU5DMV9FTkQsIFRDTV9GVU5DMV9FTkQsIFVDTV9GVU5DMV9FTkQsIENDTV9GVU5DMV9FTkQsCisJIFhDTV9GVU5DMV9FTkQsIFRTRU1fRlVOQzFfRU5ELCBVU0VNX0ZVTkMxX0VORCwgQ1NFTV9GVU5DMV9FTkQsCisJIFhTRU1fRlVOQzFfRU5EfSwKKwl7TUlTQ19GVU5DMl9FTkQsIFRDTV9GVU5DMl9FTkQsIFVDTV9GVU5DMl9FTkQsIENDTV9GVU5DMl9FTkQsCisJIFhDTV9GVU5DMl9FTkQsIFRTRU1fRlVOQzJfRU5ELCBVU0VNX0ZVTkMyX0VORCwgQ1NFTV9GVU5DMl9FTkQsCisJIFhTRU1fRlVOQzJfRU5EfSwKKwl7TUlTQ19GVU5DM19FTkQsIFRDTV9GVU5DM19FTkQsIFVDTV9GVU5DM19FTkQsIENDTV9GVU5DM19FTkQsCisJIFhDTV9GVU5DM19FTkQsIFRTRU1fRlVOQzNfRU5ELCBVU0VNX0ZVTkMzX0VORCwgQ1NFTV9GVU5DM19FTkQsCisJIFhTRU1fRlVOQzNfRU5EfSwKKwl7TUlTQ19GVU5DNF9FTkQsIFRDTV9GVU5DNF9FTkQsIFVDTV9GVU5DNF9FTkQsIENDTV9GVU5DNF9FTkQsCisJIFhDTV9GVU5DNF9FTkQsIFRTRU1fRlVOQzRfRU5ELCBVU0VNX0ZVTkM0X0VORCwgQ1NFTV9GVU5DNF9FTkQsCisJIFhTRU1fRlVOQzRfRU5EfSwKKwl7TUlTQ19GVU5DNV9FTkQsIFRDTV9GVU5DNV9FTkQsIFVDTV9GVU5DNV9FTkQsIENDTV9GVU5DNV9FTkQsCisJIFhDTV9GVU5DNV9FTkQsIFRTRU1fRlVOQzVfRU5ELCBVU0VNX0ZVTkM1X0VORCwgQ1NFTV9GVU5DNV9FTkQsCisJIFhTRU1fRlVOQzVfRU5EfSwKKwl7TUlTQ19GVU5DNl9FTkQsIFRDTV9GVU5DNl9FTkQsIFVDTV9GVU5DNl9FTkQsIENDTV9GVU5DNl9FTkQsCisJIFhDTV9GVU5DNl9FTkQsIFRTRU1fRlVOQzZfRU5ELCBVU0VNX0ZVTkM2X0VORCwgQ1NFTV9GVU5DNl9FTkQsCisJIFhTRU1fRlVOQzZfRU5EfSwKKwl7TUlTQ19GVU5DN19FTkQsIFRDTV9GVU5DN19FTkQsIFVDTV9GVU5DN19FTkQsIENDTV9GVU5DN19FTkQsCisJIFhDTV9GVU5DN19FTkQsIFRTRU1fRlVOQzdfRU5ELCBVU0VNX0ZVTkM3X0VORCwgQ1NFTV9GVU5DN19FTkQsCisJIFhTRU1fRlVOQzdfRU5EfSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgaGNfbGltaXRzW0UxSF9GVU5DX01BWF1bMl0gPSB7CisJe0hDX0ZVTkMwX1NUQVJULCBIQ19GVU5DMF9FTkR9LAorCXtIQ19GVU5DMV9TVEFSVCwgSENfRlVOQzFfRU5EfSwKKwl7SENfRlVOQzJfU1RBUlQsIEhDX0ZVTkMyX0VORH0sCisJe0hDX0ZVTkMzX1NUQVJULCBIQ19GVU5DM19FTkR9LAorCXtIQ19GVU5DNF9TVEFSVCwgSENfRlVOQzRfRU5EfSwKKwl7SENfRlVOQzVfU1RBUlQsIEhDX0ZVTkM1X0VORH0sCisJe0hDX0ZVTkM2X1NUQVJULCBIQ19GVU5DNl9FTkR9LAorCXtIQ19GVU5DN19TVEFSVCwgSENfRlVOQzdfRU5EfQorfTsKIAogI2VuZGlmIC8qIEJOWDJYX0lOSVRfSCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdF92YWx1ZXMuaAppbmRleCBiZWYwYTliLi42MzAxOTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmgKQEAgLTU3LDYgKzU3LDcgQEAKIAl7T1BfUkQsIFBSU19SRUdfTlVNX09GX0NGQ19GTFVTSF9NRVNTQUdFUywgMHgwfSwKIAl7T1BfUkQsIFBSU19SRUdfTlVNX09GX1RSQU5TUEFSRU5UX0ZMVVNIX01FU1NBR0VTLCAweDB9LAogCXtPUF9SRCwgUFJTX1JFR19OVU1fT0ZfREVBRF9DWUNMRVMsIDB4MH0sCisJe09QX1dSX0UxSCwgUFJTX1JFR19GQ09FX1RZUEUsIDB4ODkwNn0sCiAJe09QX1dSLCBQUlNfUkVHX0ZMVVNIX1JFR0lPTlNfVFlQRV8wLCAweGZmfSwKIAl7T1BfV1IsIFBSU19SRUdfRkxVU0hfUkVHSU9OU19UWVBFXzEsIDB4ZmZ9LAogCXtPUF9XUiwgUFJTX1JFR19GTFVTSF9SRUdJT05TX1RZUEVfMiwgMHhmZn0sCkBAIC03NCwyMyArNzUsMjcgQEAKIAl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV81LCAweDNmfSwKIAl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV82LCAweDNmfSwKIAl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV83LCAweDNmfSwKLSNkZWZpbmUgUFJTX0NPTU1PTl9FTkQgICAgICAgICAgNDYKLSNkZWZpbmUgUFJTX1BPUlQwX1NUQVJUICAgICAgICAgNDYKLQl7T1BfV1IsIFBSU19SRUdfQ0lEX1BPUlRfMCwgMHgwfSwKLSNkZWZpbmUgUFJTX1BPUlQwX0VORCAgICAgICAgICAgNDcKLSNkZWZpbmUgUFJTX1BPUlQxX1NUQVJUICAgICAgICAgNDcKLQl7T1BfV1IsIFBSU19SRUdfQ0lEX1BPUlRfMSwgMHg4MDAwMDB9LAotI2RlZmluZSBQUlNfUE9SVDFfRU5EICAgICAgICAgICA0OAorI2RlZmluZSBQUlNfQ09NTU9OX0VORCAgICAgICAgICA0NworI2RlZmluZSBTUkNIX0NPTU1PTl9TVEFSVCAgICAgICA0NworCXtPUF9XUl9FMUgsIFNSQ19SRUdfRTFITUZfRU5BQkxFLCAweDF9LAorI2RlZmluZSBTUkNIX0NPTU1PTl9FTkQgICAgICAgICA0OAogI2RlZmluZSBUU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0OAotCXtPUF9XUiwgVFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDQxMX0sCi0Je09QX1dSLCBUU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweDQwMH0sCi0Je09QX1dSLCBUU0RNX1JFR19RX0NPVU5URVJfU1RBUlRfQUREUiwgMHg0MDR9LAotCXtPUF9XUiwgVFNETV9SRUdfUENLX0VORF9NU0dfU1RBUlRfQUREUiwgMHg0MTl9LAorCXtPUF9XUl9FMSwgVFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDQxMX0sCisJe09QX1dSX0UxSCwgVFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDIxMX0sCisJe09QX1dSX0UxLCBUU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweDQwMH0sCisJe09QX1dSX0UxSCwgVFNETV9SRUdfQ01QX0NPVU5URVJfU1RBUlRfQUREUiwgMHgyMDB9LAorCXtPUF9XUl9FMSwgVFNETV9SRUdfUV9DT1VOVEVSX1NUQVJUX0FERFIsIDB4NDA0fSwKKwl7T1BfV1JfRTFILCBUU0RNX1JFR19RX0NPVU5URVJfU1RBUlRfQUREUiwgMHgyMDR9LAorCXtPUF9XUl9FMSwgVFNETV9SRUdfUENLX0VORF9NU0dfU1RBUlRfQUREUiwgMHg0MTl9LAorCXtPUF9XUl9FMUgsIFRTRE1fUkVHX1BDS19FTkRfTVNHX1NUQVJUX0FERFIsIDB4MjE5fSwKIAl7T1BfV1IsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDAsIDB4ZmZmZn0sCiAJe09QX1dSLCBUU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgxLCAweGZmZmZ9LAogCXtPUF9XUiwgVFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMiwgMHhmZmZmfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDMsIDB4ZmZmZn0sCi0Je09QX1pSLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAsIDB4ODB9LAorCXtPUF9aUiwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8wLCAweDJ9LAorCXtPUF9XUiwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yLCAweDM0fSwKKwl7T1BfV1IsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMywgMHgzNX0sCisJe09QX1pSLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4N2N9LAogCXtPUF9XUiwgVFNETV9SRUdfRU5BQkxFX0lOMSwgMHg3ZmZmZmZmfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0VOQUJMRV9JTjIsIDB4M2Z9LAogCXtPUF9XUiwgVFNETV9SRUdfRU5BQkxFX09VVDEsIDB4N2ZmZmZmZn0sCkBAIC0xMDksOSArMTE0LDEyIEBACiAJe09QX1JELCBUU0RNX1JFR19OVU1fT0ZfUEtUX0VORF9NU0csIDB4MH0sCiAJe09QX1JELCBUU0RNX1JFR19OVU1fT0ZfUFhQX0FTWU5DX1JFUSwgMHgwfSwKIAl7T1BfUkQsIFRTRE1fUkVHX05VTV9PRl9BQ0tfQUZURVJfUExBQ0UsIDB4MH0sCi0Je09QX1dSLCBUU0RNX1JFR19USU1FUl9USUNLLCAweDNlOH0sCi0jZGVmaW5lIFRTRE1fQ09NTU9OX0VORCAgICAgICAgIDc2Ci0jZGVmaW5lIFRDTV9DT01NT05fU1RBUlQgICAgICAgIDc2CisJe09QX1dSX0UxLCBUU0RNX1JFR19JTklUX0NSRURJVF9QWFBfQ1RSTCwgMHgxfSwKKwl7T1BfV1JfQVNJQywgVFNETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAorCXtPUF9XUl9FTVVMLCBUU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAorCXtPUF9XUl9GUEdBLCBUU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAorI2RlZmluZSBUU0RNX0NPTU1PTl9FTkQgICAgICAgICA4NgorI2RlZmluZSBUQ01fQ09NTU9OX1NUQVJUICAgICAgICA4NgogCXtPUF9XUiwgVENNX1JFR19YWF9NQVhfTExfU1osIDB4MjB9LAogCXtPUF9XUiwgVENNX1JFR19YWF9PVkZMX0VWTlRfSUQsIDB4MzJ9LAogCXtPUF9XUiwgVENNX1JFR19UUU1fVENNX0hEUl9QLCAweDIxNTAwMjB9LApAQCAtMTQzLDkgKzE1MSwxNCBAQAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8zLCAweDh9LAogCXtPUF9aUiwgVENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAogCXtPUF9XUiwgVENNX1JFR19UQ01fUkVHMF9TWiwgMHg2fSwKLQl7T1BfV1IsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweGR9LAotCXtPUF9XUiwgVENNX1JFR19QSFlTX1FOVU0wXzEsIDB4MmR9LAotCXtPUF9aUiwgVENNX1JFR19QSFlTX1FOVU0xXzAsIDB4Nn0sCisJe09QX1dSX0UxLCBUQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhkfSwKKwl7T1BfV1JfRTEsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDJkfSwKKwl7T1BfV1JfRTEsIFRDTV9SRUdfUEhZU19RTlVNMV8wLCAweDd9LAorCXtPUF9XUl9FMSwgVENNX1JFR19QSFlTX1FOVU0xXzEsIDB4Mjd9LAorCXtPUF9XUl9FMSwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4N30sCisJe09QX1dSX0UxLCBUQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgyN30sCisJe09QX1dSX0UxLCBUQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg3fSwKKwl7T1BfV1JfRTEsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDI3fSwKIAl7T1BfV1IsIFRDTV9SRUdfVENNX1NUT1JNMF9JRkVOLCAweDF9LAogCXtPUF9XUiwgVENNX1JFR19UQ01fU1RPUk0xX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBUQ01fUkVHX1RDTV9UUU1fSUZFTiwgMHgxfSwKQEAgLTE2MiwyMyArMTc1LDc1IEBACiAJe09QX1dSLCBUQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgVENNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFRDTV9SRUdfVENNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBUQ01fQ09NTU9OX0VORCAgICAgICAgICAxMjYKLSNkZWZpbmUgQlJCMV9DT01NT05fU1RBUlQgICAgICAgMTI2CisjZGVmaW5lIFRDTV9DT01NT05fRU5EICAgICAgICAgIDE0MQorI2RlZmluZSBUQ01fRlVOQzBfU1RBUlQgICAgICAgICAxNDEKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhkfSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg3fSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHg3fSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg3fSwKKyNkZWZpbmUgVENNX0ZVTkMwX0VORCAgICAgICAgICAgMTQ1CisjZGVmaW5lIFRDTV9GVU5DMV9TVEFSVCAgICAgICAgIDE0NQorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDJkfSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgyN30sCisJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Mjd9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDI3fSwKKyNkZWZpbmUgVENNX0ZVTkMxX0VORCAgICAgICAgICAgMTQ5CisjZGVmaW5lIFRDTV9GVU5DMl9TVEFSVCAgICAgICAgIDE0OQorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweDFkfSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHgxN30sCisJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4MTd9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18wLCAweDE3fSwKKyNkZWZpbmUgVENNX0ZVTkMyX0VORCAgICAgICAgICAgMTUzCisjZGVmaW5lIFRDTV9GVU5DM19TVEFSVCAgICAgICAgIDE1MworCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDNkfSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgzN30sCisJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Mzd9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDM3fSwKKyNkZWZpbmUgVENNX0ZVTkMzX0VORCAgICAgICAgICAgMTU3CisjZGVmaW5lIFRDTV9GVU5DNF9TVEFSVCAgICAgICAgIDE1NworCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweDRkfSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg0N30sCisJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4NDd9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18wLCAweDQ3fSwKKyNkZWZpbmUgVENNX0ZVTkM0X0VORCAgICAgICAgICAgMTYxCisjZGVmaW5lIFRDTV9GVU5DNV9TVEFSVCAgICAgICAgIDE2MQorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDZkfSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg2N30sCisJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Njd9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDY3fSwKKyNkZWZpbmUgVENNX0ZVTkM1X0VORCAgICAgICAgICAgMTY1CisjZGVmaW5lIFRDTV9GVU5DNl9TVEFSVCAgICAgICAgIDE2NQorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweDVkfSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg1N30sCisJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4NTd9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18wLCAweDU3fSwKKyNkZWZpbmUgVENNX0ZVTkM2X0VORCAgICAgICAgICAgMTY5CisjZGVmaW5lIFRDTV9GVU5DN19TVEFSVCAgICAgICAgIDE2OQorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDdkfSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg3N30sCisJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Nzd9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDc3fSwKKyNkZWZpbmUgVENNX0ZVTkM3X0VORCAgICAgICAgICAgMTczCisjZGVmaW5lIEJSQjFfQ09NTU9OX1NUQVJUICAgICAgIDE3MwogCXtPUF9TVywgQlJCMV9SRUdfTExfUkFNLCAweDIwMDAwMjB9LAogCXtPUF9XUiwgQlJCMV9SRUdfU09GVF9SRVNFVCwgMHgxfSwKLQl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9QQVVTRV9DWUNMRVNfMCwgMHgwfSwKLQl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9QQVVTRV9DWUNMRVNfMSwgMHgwfSwKLQl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9QQVVTRV9DWUNMRVNfMiwgMHgwfSwKLQl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9QQVVTRV9DWUNMRVNfMywgMHgwfSwKLQl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9GVUxMX0NZQ0xFU18wLCAweDB9LAotCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzEsIDB4MH0sCi0Je09QX1JELCBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfMiwgMHgwfSwKLQl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9GVUxMX0NZQ0xFU18zLCAweDB9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzQsIDB4MH0sCiAJe09QX1NXLCBCUkIxX1JFR19GUkVFX0xJU1RfUFJTX0NSRFQsIDB4MzAyMjB9LAogCXtPUF9XUiwgQlJCMV9SRUdfU09GVF9SRVNFVCwgMHgwfSwKLSNkZWZpbmUgQlJCMV9DT01NT05fRU5EICAgICAgICAgMTM5Ci0jZGVmaW5lIFRTRU1fQ09NTU9OX1NUQVJUICAgICAgIDEzOQorI2RlZmluZSBCUkIxX0NPTU1PTl9FTkQgICAgICAgICAxNzgKKyNkZWZpbmUgQlJCMV9QT1JUMF9TVEFSVCAgICAgICAgMTc4CisJe09QX1dSX0UxLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAsIDB4Yjh9LAorCXtPUF9XUl9FMSwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMCwgMHgxMTR9LAorCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX1BBVVNFX0NZQ0xFU18wLCAweDB9LAorCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzAsIDB4MH0sCisjZGVmaW5lIEJSQjFfUE9SVDBfRU5EICAgICAgICAgIDE4MgorI2RlZmluZSBCUkIxX1BPUlQxX1NUQVJUICAgICAgICAxODIKKwl7T1BfV1JfRTEsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMSwgMHhiOH0sCisJe09QX1dSX0UxLCBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8xLCAweDExNH0sCisJe09QX1JELCBCUkIxX1JFR19OVU1fT0ZfUEFVU0VfQ1lDTEVTXzEsIDB4MH0sCisJe09QX1JELCBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfMSwgMHgwfSwKKyNkZWZpbmUgQlJCMV9QT1JUMV9FTkQgICAgICAgICAgMTg2CisjZGVmaW5lIFRTRU1fQ09NTU9OX1NUQVJUICAgICAgIDE4NgogCXtPUF9SRCwgVFNFTV9SRUdfTVNHX05VTV9GSUMwLCAweDB9LAogCXtPUF9SRCwgVFNFTV9SRUdfTVNHX05VTV9GSUMxLCAweDB9LAogCXtPUF9SRCwgVFNFTV9SRUdfTVNHX05VTV9GT0MwLCAweDB9LApAQCAtMjIyLDEwNiArMjg3LDI0NyBAQAogCXtPUF9XUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MDQwLCAweDE4fSwKIAl7T1BfV1IsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODA4MCwgMHhjfSwKIAl7T1BfV1IsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODBjMCwgMHgyMH0sCi0Je09QX1dSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzMDAsIDB4N2ExMjB9LAorCXtPUF9XUl9BU0lDLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzMDAsIDB4N2ExMjB9LAorCXtPUF9XUl9FTVVMLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzMDAsIDB4MTM4fSwKKwl7T1BfV1JfRlBHQSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzAwLCAweDEzODh9LAogCXtPUF9XUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4M2MwLCAweDFmNH0sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjAwMCwgMHgxYjN9LAotCXtPUF9TVywgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAgKyAweDZjYywgMHgxMDIyM30sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAyMCwgMHhjOH0sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAwMCwgMHgyfSwKLQl7T1BfWlIsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAsIDB4Mn0sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODA4LCAweDJ9LAotCXtPUF9aUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgxMCwgMHg0fSwKLQl7T1BfWlIsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmEwLCAweDR9LAotCXtPUF9TVywgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRjZjAsIDB4ODAyMjR9LAotCXtPUF9aUCwgVFNFTV9SRUdfSU5UX1RBQkxFLCAweDhjMDIyY30sCi0Je09QX1pQLCBUU0VNX1JFR19QUkFNLCAweDMzOTUwMjRmfSwKLQl7T1BfWlAsIFRTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MmM3NjBmMzV9LAotCXtPUF9aUCwgVFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4NWUxYTUzfSwKLQl7T1BfWlAsIFRTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDVlMWE2Yn0sCi0Je09QX1pQLCBUU0VNX1JFR19QUkFNICsgMHgyMDAwMCwgMHg1ZTFhODN9LAotCXtPUF9aUCwgVFNFTV9SRUdfUFJBTSArIDB4MjgwMDAsIDB4NWUxYTlifSwKLQl7T1BfWlAsIFRTRU1fUkVHX1BSQU0gKyAweDMwMDAwLCAweDVlMWFiM30sCi0Je09QX1pQLCBUU0VNX1JFR19QUkFNICsgMHgzODAwMCwgMHg1ZTFhY2J9LAotI2RlZmluZSBUU0VNX0NPTU1PTl9FTkQgICAgICAgICAyMDIKLSNkZWZpbmUgVFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMjAyCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgxNmN9LAotCXtPUF9TVywgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAgKyAweDViMCwgMHgyMWFlM30sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTM3MCwgMHhhfSwKLQl7T1BfWlIsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxM2MwLCAweDZ9LAotCXtPUF9aUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MTgsIDB4Y30sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQ3OCwgMHgxMn0sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwOCwgMHg5MH0sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwLCAweDJ9LAotCXtPUF9aUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgyMCwgMHgxMH0sCi0Je09QX1NXLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODIwICsgMHg0MCwgMHgyMWFlNX0sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjkwOCwgMHhhfSwKLSNkZWZpbmUgVFNFTV9QT1JUMF9FTkQgICAgICAgICAgMjEzCi0jZGVmaW5lIFRTRU1fUE9SVDFfU1RBUlQgICAgICAgIDIxMwotCXtPUF9aUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQ1YjgsIDB4MTZjfSwKLQl7T1BfU1csIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0NWI4ICsgMHg1YjAsIDB4MjFhZTd9LAotCXtPUF9aUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEzOTgsIDB4YX0sCi0Je09QX1pSLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTNkOCwgMHg2fSwKLQl7T1BfWlIsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDQ4LCAweGN9LAotCXtPUF9aUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0YzAsIDB4MTJ9LAotCXtPUF9aUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE3NDgsIDB4OTB9LAotCXtPUF9aUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwOCwgMHgyfSwKLQl7T1BfWlIsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4NjgsIDB4MTB9LAotCXtPUF9TVywgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg2OCArIDB4NDAsIDB4MjFhZTl9LAotCXtPUF9aUiwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MzAsIDB4YX0sCi0jZGVmaW5lIFRTRU1fUE9SVDFfRU5EICAgICAgICAgIDIyNAotI2RlZmluZSBNSVNDX0NPTU1PTl9TVEFSVCAgICAgICAyMjQKLQl7T1BfV1IsIE1JU0NfUkVHX0dSQ19USU1FT1VUX0VOLCAweDF9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4YjJ9LAorCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgxfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyM2M4LCAweGMxfSwKKwl7T1BfV1JfRU1VTF9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgwfSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyM2M4ICsgMHgzMDQsIDB4MTAyMjN9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDAwLCAweDJiM30sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAyMCwgMHhjOH0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAgKyAweGFjYywgMHgxMDIyM30sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAwMCwgMHgyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAyMCwgMHhjOH0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWMxOCwgMHg0fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAwMCwgMHgyfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAsIDB4Mn0sCisJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFhZDAsIDB4MH0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODA4LCAweDJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjI4LCAweDZ9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgxMCwgMHg0fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyfSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDQwMjI0fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwOCwgMHg0fSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0Y2IwLCAweDgwMjI4fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAxOCwgMHg0fSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5NDAwMDB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDI4LCAweDR9LAorCXtPUF9XUl82NF9FMSwgVFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjAsIDB4MTQwMjMwfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAzOCwgMHg0fSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0sIDB4MzBiMTAwMDB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ4LCAweDR9LAorCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzM2M1MGMyZH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNTgsIDB4NH0sCisJe09QX1pQX0UxLCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHhiYzYxOTFmfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA2OCwgMHg0fSwKKwl7T1BfV1JfNjRfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDExN2YwLCAweDVkMDIwMjMyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA3OCwgMHgyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwOCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjE0MCwgMHgyMDAyMjR9LAorCXtPUF9aUF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5NjAwMDB9LAorCXtPUF9XUl82NF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzYwLCAweDE0MDI0NH0sCisJe09QX1pQX0UxSCwgVFNFTV9SRUdfUFJBTSwgMHgzMGNjMDAwMH0sCisJe09QX1pQX0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzM2RmMGMzM30sCisJe09QX1pQX0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4ZGNlMTkyYn0sCisJe09QX1dSXzY0X0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4MTFjNzAsIDB4NWM3MjAyNDZ9LAorI2RlZmluZSBUU0VNX0NPTU1PTl9FTkQgICAgICAgICAyNzYKKyNkZWZpbmUgVFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMjc2CisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjJjOCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4MTZjfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweGZjfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjAwMCwgMHgyOH0sCisJe09QX1dSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2MCwgMHgwfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjE0MCwgMHhjfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGF9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMmMwLCAweDEyfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDUwLCAweDZ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzUwLCAweGZhfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwLCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MTA4LCAweDJ9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1NzAsIDB4MTJ9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDljMCwgMHhiZX0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwLCAweDJ9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgyMCwgMHhlfSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDIwMjM0fSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTA4LCAweDJ9LAorI2RlZmluZSBUU0VNX1BPUlQwX0VORCAgICAgICAgICAyOTQKKyNkZWZpbmUgVFNFTV9QT1JUMV9TVEFSVCAgICAgICAgMjk0CisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjM0OCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1YjAsIDB4MTZjfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0M2YwLCAweGZjfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjBhMCwgMHgyOH0sCisJe09QX1dSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2NCwgMHgwfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjE3MCwgMHhjfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDI4LCAweGF9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzA4LCAweDEyfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDY4LCAweDZ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzM4LCAweGZhfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTM4LCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MTEwLCAweDJ9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1YjgsIDB4MTJ9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGNiOCwgMHhiZX0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODA4LCAweDJ9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg1OCwgMHhlfSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmI4LCAweDIwMjM2fSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTEwLCAweDJ9LAorI2RlZmluZSBUU0VNX1BPUlQxX0VORCAgICAgICAgICAzMTIKKyNkZWZpbmUgVFNFTV9GVU5DMF9TVEFSVCAgICAgICAgMzEyCisJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNjAsIDB4MH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxYzAsIDB4OH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwODAsIDB4MTJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDJ9LAorI2RlZmluZSBUU0VNX0ZVTkMwX0VORCAgICAgICAgICAzMTgKKyNkZWZpbmUgVFNFTV9GVU5DMV9TVEFSVCAgICAgICAgMzE4CisJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNjQsIDB4MH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMzgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxZTAsIDB4OH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMTAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwYzgsIDB4MTJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDA4LCAweDJ9LAorI2RlZmluZSBUU0VNX0ZVTkMxX0VORCAgICAgICAgICAzMjQKKyNkZWZpbmUgVFNFTV9GVU5DMl9TVEFSVCAgICAgICAgMzI0CisJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNjgsIDB4MH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMDAsIDB4OH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxMTAsIDB4MTJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDEwLCAweDIwMjQ4fSwKKyNkZWZpbmUgVFNFTV9GVU5DMl9FTkQgICAgICAgICAgMzMwCisjZGVmaW5lIFRTRU1fRlVOQzNfU1RBUlQgICAgICAgIDMzMAorCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjZjLCAweDB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGE4LCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjIwLCAweDh9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDMwLCAweDJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTU4LCAweDEyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAxOCwgMHgyMDI0YX0sCisjZGVmaW5lIFRTRU1fRlVOQzNfRU5EICAgICAgICAgIDMzNgorI2RlZmluZSBUU0VNX0ZVTkM0X1NUQVJUICAgICAgICAzMzYKKwl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI3MCwgMHgwfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBlMCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI0MCwgMHg4fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0MCwgMHgyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFhMCwgMHgxMn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4MjAyNGN9LAorI2RlZmluZSBUU0VNX0ZVTkM0X0VORCAgICAgICAgICAzNDIKKyNkZWZpbmUgVFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMzQyCisJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzQsIDB4MH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyNjAsIDB4OH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNTAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxZTgsIDB4MTJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDI4LCAweDIwMjRlfSwKKyNkZWZpbmUgVFNFTV9GVU5DNV9FTkQgICAgICAgICAgMzQ4CisjZGVmaW5lIFRTRU1fRlVOQzZfU1RBUlQgICAgICAgIDM0OAorCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjc4LCAweDB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTUwLCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjgwLCAweDh9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDYwLCAweDJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjMwLCAweDEyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAzMCwgMHgyMDI1MH0sCisjZGVmaW5lIFRTRU1fRlVOQzZfRU5EICAgICAgICAgIDM1NAorI2RlZmluZSBUU0VNX0ZVTkM3X1NUQVJUICAgICAgICAzNTQKKwl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI3YywgMHgwfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4OCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzJhMCwgMHg4fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA3MCwgMHgyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTI3OCwgMHgxMn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4MjAyNTJ9LAorI2RlZmluZSBUU0VNX0ZVTkM3X0VORCAgICAgICAgICAzNjAKKyNkZWZpbmUgTUlTQ19DT01NT05fU1RBUlQgICAgICAgMzYwCisJe09QX1dSX0UxLCBNSVNDX1JFR19HUkNfVElNRU9VVF9FTiwgMHgxfSwKIAl7T1BfV1IsIE1JU0NfUkVHX1BMTF9TVE9STV9DVFJMXzEsIDB4NzFkMjkxMX0sCiAJe09QX1dSLCBNSVNDX1JFR19QTExfU1RPUk1fQ1RSTF8yLCAweDB9LAogCXtPUF9XUiwgTUlTQ19SRUdfUExMX1NUT1JNX0NUUkxfMywgMHg5YzA0MjR9LAogCXtPUF9XUiwgTUlTQ19SRUdfUExMX1NUT1JNX0NUUkxfNCwgMHgwfSwKIAl7T1BfV1IsIE1JU0NfUkVHX0xDUExMX0NUUkxfMSwgMHgyMDl9LAotI2RlZmluZSBNSVNDX0NPTU1PTl9FTkQgICAgICAgICAyMzAKLSNkZWZpbmUgTklHX0NPTU1PTl9TVEFSVCAgICAgICAgMjMwCisJe09QX1dSX0UxLCBNSVNDX1JFR19TUElPLCAweGZmMDAwMDAwfSwKKyNkZWZpbmUgTUlTQ19DT01NT05fRU5EICAgICAgICAgMzY3CisjZGVmaW5lIE1JU0NfRlVOQzBfU1RBUlQgICAgICAgIDM2NworCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDAsIDB4MH0sCisjZGVmaW5lIE1JU0NfRlVOQzBfRU5EICAgICAgICAgIDM2OAorI2RlZmluZSBNSVNDX0ZVTkMxX1NUQVJUICAgICAgICAzNjgKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAorI2RlZmluZSBNSVNDX0ZVTkMxX0VORCAgICAgICAgICAzNjkKKyNkZWZpbmUgTUlTQ19GVU5DMl9TVEFSVCAgICAgICAgMzY5CisJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMCwgMHgwfSwKKyNkZWZpbmUgTUlTQ19GVU5DMl9FTkQgICAgICAgICAgMzcwCisjZGVmaW5lIE1JU0NfRlVOQzNfU1RBUlQgICAgICAgIDM3MAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDEsIDB4MH0sCisjZGVmaW5lIE1JU0NfRlVOQzNfRU5EICAgICAgICAgIDM3MQorI2RlZmluZSBNSVNDX0ZVTkM0X1NUQVJUICAgICAgICAzNzEKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAorI2RlZmluZSBNSVNDX0ZVTkM0X0VORCAgICAgICAgICAzNzIKKyNkZWZpbmUgTUlTQ19GVU5DNV9TVEFSVCAgICAgICAgMzcyCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMSwgMHgwfSwKKyNkZWZpbmUgTUlTQ19GVU5DNV9FTkQgICAgICAgICAgMzczCisjZGVmaW5lIE1JU0NfRlVOQzZfU1RBUlQgICAgICAgIDM3MworCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDAsIDB4MH0sCisjZGVmaW5lIE1JU0NfRlVOQzZfRU5EICAgICAgICAgIDM3NAorI2RlZmluZSBNSVNDX0ZVTkM3X1NUQVJUICAgICAgICAzNzQKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAorI2RlZmluZSBNSVNDX0ZVTkM3X0VORCAgICAgICAgICAzNzUKKyNkZWZpbmUgTklHX0NPTU1PTl9TVEFSVCAgICAgICAgMzc1CiAJe09QX1dSLCBOSUdfUkVHX1BCRl9MQl9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfUFJTX1JFUV9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfRUdSRVNTX0RFQlVHX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19CUkJfTEJfT1VUX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19QUlNfRU9QX09VVF9FTiwgMHgxfSwKLSNkZWZpbmUgTklHX0NPTU1PTl9FTkQgICAgICAgICAgMjM1Ci0jZGVmaW5lIE5JR19QT1JUMF9TVEFSVCAgICAgICAgIDIzNQorI2RlZmluZSBOSUdfQ09NTU9OX0VORCAgICAgICAgICAzODAKKyNkZWZpbmUgTklHX1BPUlQwX1NUQVJUICAgICAgICAgMzgwCiAJe09QX1dSLCBOSUdfUkVHX0xMSDBfQ01fSEVBREVSLCAweDMwMDAwMH0sCi0Je09QX1dSLCBOSUdfUkVHX0xMSDBfRVZFTlRfSUQsIDB4MjZ9LAorCXtPUF9XUiwgTklHX1JFR19MTEgwX0VWRU5UX0lELCAweDI4fSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMF9FUlJPUl9NQVNLLCAweDB9LAogCXtPUF9XUiwgTklHX1JFR19MTEgwX1hDTV9NQVNLLCAweDR9LAogCXtPUF9XUiwgTklHX1JFR19MTEgwX0JSQjFfTk9UX01DUCwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBOSUdfUkVHX0xMSDBfQ0xTX1RZUEUsIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDBfWENNX0lOSVRfQ1JFRElULCAweDMwfSwKIAl7T1BfV1IsIE5JR19SRUdfQlJCMF9QQVVTRV9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfRUdSRVNTX1BCRjBfSU5fRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0JSQjBfT1VUX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19YQ00wX09VVF9FTiwgMHgxfSwKLSNkZWZpbmUgTklHX1BPUlQwX0VORCAgICAgICAgICAgMjQ2Ci0jZGVmaW5lIE5JR19QT1JUMV9TVEFSVCAgICAgICAgIDI0NgorI2RlZmluZSBOSUdfUE9SVDBfRU5EICAgICAgICAgICAzOTIKKyNkZWZpbmUgTklHX1BPUlQxX1NUQVJUICAgICAgICAgMzkyCiAJe09QX1dSLCBOSUdfUkVHX0xMSDFfQ01fSEVBREVSLCAweDMwMDAwMH0sCi0Je09QX1dSLCBOSUdfUkVHX0xMSDFfRVZFTlRfSUQsIDB4MjZ9LAorCXtPUF9XUiwgTklHX1JFR19MTEgxX0VWRU5UX0lELCAweDI4fSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMV9FUlJPUl9NQVNLLCAweDB9LAogCXtPUF9XUiwgTklHX1JFR19MTEgxX1hDTV9NQVNLLCAweDR9LAogCXtPUF9XUiwgTklHX1JFR19MTEgxX0JSQjFfTk9UX01DUCwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBOSUdfUkVHX0xMSDFfQ0xTX1RZUEUsIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDFfWENNX0lOSVRfQ1JFRElULCAweDMwfSwKIAl7T1BfV1IsIE5JR19SRUdfQlJCMV9QQVVTRV9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfRUdSRVNTX1BCRjFfSU5fRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0JSQjFfT1VUX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19YQ00xX09VVF9FTiwgMHgxfSwKLSNkZWZpbmUgTklHX1BPUlQxX0VORCAgICAgICAgICAgMjU3Ci0jZGVmaW5lIFVQQl9DT01NT05fU1RBUlQgICAgICAgIDI1NworI2RlZmluZSBOSUdfUE9SVDFfRU5EICAgICAgICAgICA0MDQKKyNkZWZpbmUgVVBCX0NPTU1PTl9TVEFSVCAgICAgICAgNDA0CiAJe09QX1dSLCBHUkNCQVNFX1VQQiArIFBCX1JFR19DT05UUk9MLCAweDIwfSwKLSNkZWZpbmUgVVBCX0NPTU1PTl9FTkQgICAgICAgICAgMjU4Ci0jZGVmaW5lIENTRE1fQ09NTU9OX1NUQVJUICAgICAgIDI1OAotCXtPUF9XUiwgQ1NETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweGExMX0sCi0Je09QX1dSLCBDU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweGEwMH0sCi0Je09QX1dSLCBDU0RNX1JFR19RX0NPVU5URVJfU1RBUlRfQUREUiwgMHhhMDR9LAorI2RlZmluZSBVUEJfQ09NTU9OX0VORCAgICAgICAgICA0MDUKKyNkZWZpbmUgQ1NETV9DT01NT05fU1RBUlQgICAgICAgNDA1CisJe09QX1dSX0UxLCBDU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4YTExfSwKKwl7T1BfV1JfRTFILCBDU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4MjExfSwKKwl7T1BfV1JfRTEsIENTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4YTAwfSwKKwl7T1BfV1JfRTFILCBDU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweDIwMH0sCisJe09QX1dSX0UxLCBDU0RNX1JFR19RX0NPVU5URVJfU1RBUlRfQUREUiwgMHhhMDR9LAorCXtPUF9XUl9FMUgsIENTRE1fUkVHX1FfQ09VTlRFUl9TVEFSVF9BRERSLCAweDIwNH0sCiAJe09QX1dSLCBDU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgwLCAweGZmZmZ9LAogCXtPUF9XUiwgQ1NETV9SRUdfQ01QX0NPVU5URVJfTUFYMSwgMHhmZmZmfSwKIAl7T1BfV1IsIENTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDIsIDB4ZmZmZn0sCiAJe09QX1dSLCBDU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgzLCAweGZmZmZ9LAotCXtPUF9aUiwgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8wLCAweDgwfSwKKwl7T1BfV1IsIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMCwgMHhjNn0sCisJe09QX1dSLCBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEsIDB4MH0sCisJe09QX1dSLCBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIsIDB4MzR9LAorCXtPUF9XUiwgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8zLCAweDM1fSwKKwl7T1BfWlIsIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfNCwgMHgxY30sCisJe09QX1dSLCBDU0RNX1JFR19BR0dfSU5UX1RfMCwgMHgxfSwKKwl7T1BfWlIsIENTRE1fUkVHX0FHR19JTlRfVF8xLCAweDVmfSwKIAl7T1BfV1IsIENTRE1fUkVHX0VOQUJMRV9JTjEsIDB4N2ZmZmZmZn0sCiAJe09QX1dSLCBDU0RNX1JFR19FTkFCTEVfSU4yLCAweDNmfSwKIAl7T1BfV1IsIENTRE1fUkVHX0VOQUJMRV9PVVQxLCAweDdmZmZmZmZ9LApAQCAtMzQwLDE5ICs1NDYsMjkgQEAKIAl7T1BfUkQsIENTRE1fUkVHX05VTV9PRl9QS1RfRU5EX01TRywgMHgwfSwKIAl7T1BfUkQsIENTRE1fUkVHX05VTV9PRl9QWFBfQVNZTkNfUkVRLCAweDB9LAogCXtPUF9SRCwgQ1NETV9SRUdfTlVNX09GX0FDS19BRlRFUl9QTEFDRSwgMHgwfSwKLQl7T1BfV1IsIENTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKLSNkZWZpbmUgQ1NETV9DT01NT05fRU5EICAgICAgICAgMjg1Ci0jZGVmaW5lIFVTRE1fQ09NTU9OX1NUQVJUICAgICAgIDI4NQotCXtPUF9XUiwgVVNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweGExMX0sCi0Je09QX1dSLCBVU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweGEwMH0sCi0Je09QX1dSLCBVU0RNX1JFR19RX0NPVU5URVJfU1RBUlRfQUREUiwgMHhhMDR9LAotCXtPUF9XUiwgVVNETV9SRUdfUENLX0VORF9NU0dfU1RBUlRfQUREUiwgMHhhMjF9LAorCXtPUF9XUl9FMSwgQ1NETV9SRUdfSU5JVF9DUkVESVRfUFhQX0NUUkwsIDB4MX0sCisJe09QX1dSX0FTSUMsIENTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKKwl7T1BfV1JfRU1VTCwgQ1NETV9SRUdfVElNRVJfVElDSywgMHgxfSwKKwl7T1BfV1JfRlBHQSwgQ1NETV9SRUdfVElNRVJfVElDSywgMHhhfSwKKyNkZWZpbmUgQ1NETV9DT01NT05fRU5EICAgICAgICAgNDQ0CisjZGVmaW5lIFVTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQ0NAorCXtPUF9XUl9FMSwgVVNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweGExMX0sCisJe09QX1dSX0UxSCwgVVNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDQxMX0sCisJe09QX1dSX0UxLCBVU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweGEwMH0sCisJe09QX1dSX0UxSCwgVVNETV9SRUdfQ01QX0NPVU5URVJfU1RBUlRfQUREUiwgMHg0MDB9LAorCXtPUF9XUl9FMSwgVVNETV9SRUdfUV9DT1VOVEVSX1NUQVJUX0FERFIsIDB4YTA0fSwKKwl7T1BfV1JfRTFILCBVU0RNX1JFR19RX0NPVU5URVJfU1RBUlRfQUREUiwgMHg0MDR9LAorCXtPUF9XUl9FMSwgVVNETV9SRUdfUENLX0VORF9NU0dfU1RBUlRfQUREUiwgMHhhMjF9LAorCXtPUF9XUl9FMUgsIFVTRE1fUkVHX1BDS19FTkRfTVNHX1NUQVJUX0FERFIsIDB4NDIxfSwKIAl7T1BfV1IsIFVTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDAsIDB4ZmZmZn0sCiAJe09QX1dSLCBVU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgxLCAweGZmZmZ9LAogCXtPUF9XUiwgVVNETV9SRUdfQ01QX0NPVU5URVJfTUFYMiwgMHhmZmZmfSwKIAl7T1BfV1IsIFVTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDMsIDB4ZmZmZn0sCiAJe09QX1dSLCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAsIDB4NDZ9LAotCXtPUF9aUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xLCAweDVmfSwKKwl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMSwgMHg1fSwKKwl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMiwgMHgzNH0sCisJe09QX1dSLCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMsIDB4MzV9LAorCXtPUF9aUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDVjfSwKIAl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8wLCAweDF9LAogCXtPUF9aUiwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEsIDB4MWZ9LAogCXtPUF9XUiwgVVNETV9SRUdfRU5BQkxFX0lOMSwgMHg3ZmZmZmZmfSwKQEAgLTM3NCw5ICs1OTAsMTIgQEAKIAl7T1BfUkQsIFVTRE1fUkVHX05VTV9PRl9QS1RfRU5EX01TRywgMHgwfSwKIAl7T1BfUkQsIFVTRE1fUkVHX05VTV9PRl9QWFBfQVNZTkNfUkVRLCAweDB9LAogCXtPUF9SRCwgVVNETV9SRUdfTlVNX09GX0FDS19BRlRFUl9QTEFDRSwgMHgwfSwKLQl7T1BfV1IsIFVTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKLSNkZWZpbmUgVVNETV9DT01NT05fRU5EICAgICAgICAgMzE3Ci0jZGVmaW5lIENDTV9DT01NT05fU1RBUlQgICAgICAgIDMxNworCXtPUF9XUl9FMSwgVVNETV9SRUdfSU5JVF9DUkVESVRfUFhQX0NUUkwsIDB4MX0sCisJe09QX1dSX0FTSUMsIFVTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKKwl7T1BfV1JfRU1VTCwgVVNETV9SRUdfVElNRVJfVElDSywgMHgxfSwKKwl7T1BfV1JfRlBHQSwgVVNETV9SRUdfVElNRVJfVElDSywgMHhhfSwKKyNkZWZpbmUgVVNETV9DT01NT05fRU5EICAgICAgICAgNDg2CisjZGVmaW5lIENDTV9DT01NT05fU1RBUlQgICAgICAgIDQ4NgogCXtPUF9XUiwgQ0NNX1JFR19YWF9PVkZMX0VWTlRfSUQsIDB4MzJ9LAogCXtPUF9XUiwgQ0NNX1JFR19DUU1fQ0NNX0hEUl9QLCAweDIxNTAwMjB9LAogCXtPUF9XUiwgQ0NNX1JFR19DUU1fQ0NNX0hEUl9TLCAweDIxNTAwMjB9LApAQCAtNDAxLDIzICs2MjAsMjggQEAKIAl7T1BfV1IsIENDTV9SRUdfWFhfSU5JVF9DUkQsIDB4M30sCiAJe09QX1dSLCBDQ01fUkVHX1hYX01TR19OVU0sIDB4MTh9LAogCXtPUF9aUiwgQ0NNX1JFR19YWF9UQUJMRSwgMHgxMn0sCi0Je09QX1NXLCBDQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDI0MWFlYn0sCisJe09QX1NXX0UxLCBDQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDI0MDIzOH0sCisJe09QX1NXX0UxSCwgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgyNDAyNTR9LAogCXtPUF9XUiwgQ0NNX1JFR19OX1NNX0NUWF9MRF8wLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19OX1NNX0NUWF9MRF8xLCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19OX1NNX0NUWF9MRF8yLCAweDh9LAogCXtPUF9XUiwgQ0NNX1JFR19OX1NNX0NUWF9MRF8zLCAweDh9LAogCXtPUF9aUiwgQ0NNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAogCXtPUF9XUiwgQ0NNX1JFR19DQ01fUkVHMF9TWiwgMHg0fSwKLQl7T1BfV1IsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg5fSwKLQl7T1BfV1IsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHgyOX0sCi0Je09QX1dSLCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzAsIDB4YX0sCi0Je09QX1dSLCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzEsIDB4MmF9LAotCXtPUF9aUiwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8wLCAweDR9LAotCXtPUF9XUiwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4Y30sCi0Je09QX1dSLCBDQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgyY30sCi0Je09QX1dSLCBDQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHhifSwKLQl7T1BfV1IsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDJifSwKLQl7T1BfWlIsIENDTV9SRUdfUEhZU19RTlVNM18wLCAweDJ9LAorCXtPUF9XUl9FMSwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8wLCAweDl9LAorCXtPUF9XUl9FMSwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8xLCAweDI5fSwKKwl7T1BfV1JfRTEsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMCwgMHhhfSwKKwl7T1BfV1JfRTEsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMSwgMHgyYX0sCisJe09QX1dSX0UxLCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4N30sCisJe09QX1dSX0UxLCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Mjd9LAorCXtPUF9XUl9FMSwgQ0NNX1JFR19RT1NfUEhZU19RTlVNM18wLCAweDd9LAorCXtPUF9XUl9FMSwgQ0NNX1JFR19RT1NfUEhZU19RTlVNM18xLCAweDI3fSwKKwl7T1BfV1JfRTEsIENDTV9SRUdfUEhZU19RTlVNMV8wLCAweGN9LAorCXtPUF9XUl9FMSwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4MmN9LAorCXtPUF9XUl9FMSwgQ0NNX1JFR19QSFlTX1FOVU0yXzAsIDB4Y30sCisJe09QX1dSX0UxLCBDQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgyY30sCisJe09QX1dSX0UxLCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHhjfSwKKwl7T1BfV1JfRTEsIENDTV9SRUdfUEhZU19RTlVNM18xLCAweDJjfSwKIAl7T1BfV1IsIENDTV9SRUdfQ0NNX1NUT1JNMF9JRkVOLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19DQ01fU1RPUk0xX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX0NDTV9DUU1fSUZFTiwgMHgxfSwKQEAgLTQzMyw4ICs2NTcsODAgQEAKIAl7T1BfV1IsIENDTV9SRUdfQ0RVX1NNX1dSX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX0NEVV9TTV9SRF9JRkVOLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19DQ01fQ0ZDX0lGRU4sIDB4MX0sCi0jZGVmaW5lIENDTV9DT01NT05fRU5EICAgICAgICAgIDM3MwotI2RlZmluZSBVQ01fQ09NTU9OX1NUQVJUICAgICAgICAzNzMKKyNkZWZpbmUgQ0NNX0NPTU1PTl9FTkQgICAgICAgICAgNTQ3CisjZGVmaW5lIENDTV9GVU5DMF9TVEFSVCAgICAgICAgIDU0NworCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg5fSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzAsIDB4YX0sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8wLCAweDd9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTNfMCwgMHg3fSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHhjfSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHhifSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg3fSwKKyNkZWZpbmUgQ0NNX0ZVTkMwX0VORCAgICAgICAgICAgNTU0CisjZGVmaW5lIENDTV9GVU5DMV9TVEFSVCAgICAgICAgIDU1NAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHgyOX0sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDJhfSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Mjd9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTNfMSwgMHgyN30sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4MmN9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDJifSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgyN30sCisjZGVmaW5lIENDTV9GVU5DMV9FTkQgICAgICAgICAgIDU2MQorI2RlZmluZSBDQ01fRlVOQzJfU1RBUlQgICAgICAgICA1NjEKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzAsIDB4MTl9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMCwgMHgxYX0sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8wLCAweDE3fSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0zXzAsIDB4MTd9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8wLCAweDFjfSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgxYn0sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzAsIDB4MTd9LAorI2RlZmluZSBDQ01fRlVOQzJfRU5EICAgICAgICAgICA1NjgKKyNkZWZpbmUgQ0NNX0ZVTkMzX1NUQVJUICAgICAgICAgNTY4CisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8xLCAweDM5fSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzEsIDB4M2F9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMSwgMHgzN30sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNM18xLCAweDM3fSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgzY30sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzEsIDB4M2J9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18xLCAweDM3fSwKKyNkZWZpbmUgQ0NNX0ZVTkMzX0VORCAgICAgICAgICAgNTc1CisjZGVmaW5lIENDTV9GVU5DNF9TVEFSVCAgICAgICAgIDU3NQorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg0OX0sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDRhfSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4NDd9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTNfMCwgMHg0N30sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4NGN9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDRifSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg0N30sCisjZGVmaW5lIENDTV9GVU5DNF9FTkQgICAgICAgICAgIDU4MgorI2RlZmluZSBDQ01fRlVOQzVfU1RBUlQgICAgICAgICA1ODIKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzEsIDB4Njl9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMSwgMHg2YX0sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8xLCAweDY3fSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0zXzEsIDB4Njd9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8xLCAweDZjfSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHg2Yn0sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzEsIDB4Njd9LAorI2RlZmluZSBDQ01fRlVOQzVfRU5EICAgICAgICAgICA1ODkKKyNkZWZpbmUgQ0NNX0ZVTkM2X1NUQVJUICAgICAgICAgNTg5CisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8wLCAweDU5fSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzAsIDB4NWF9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMCwgMHg1N30sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNM18wLCAweDU3fSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg1Y30sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzAsIDB4NWJ9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18wLCAweDU3fSwKKyNkZWZpbmUgQ0NNX0ZVTkM2X0VORCAgICAgICAgICAgNTk2CisjZGVmaW5lIENDTV9GVU5DN19TVEFSVCAgICAgICAgIDU5NgorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHg3OX0sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDdhfSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Nzd9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTNfMSwgMHg3N30sCisJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4N2N9LAorCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDdifSwKKwl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHg3N30sCisjZGVmaW5lIENDTV9GVU5DN19FTkQgICAgICAgICAgIDYwMworI2RlZmluZSBVQ01fQ09NTU9OX1NUQVJUICAgICAgICA2MDMKIAl7T1BfV1IsIFVDTV9SRUdfWFhfT1ZGTF9FVk5UX0lELCAweDMyfSwKIAl7T1BfV1IsIFVDTV9SRUdfVVFNX1VDTV9IRFJfUCwgMHgyMTUwMDIwfSwKIAl7T1BfV1IsIFVDTV9SRUdfVVFNX1VDTV9IRFJfUywgMHgyMTUwMDIwfSwKQEAgLTQ1NywyMCArNzUzLDIzIEBACiAJe09QX1dSLCBVQ01fUkVHX0ZJQzFfSU5JVF9DUkQsIDB4NDB9LAogCXtPUF9XUiwgVUNNX1JFR19UTV9JTklUX0NSRCwgMHg0fSwKIAl7T1BfV1IsIFVDTV9SRUdfVVFNX0lOSVRfQ1JELCAweDIwfSwKLQl7T1BfV1IsIFVDTV9SRUdfWFhfSU5JVF9DUkQsIDB4Y30sCi0Je09QX1dSLCBVQ01fUkVHX1hYX01TR19OVU0sIDB4MjB9LAorCXtPUF9XUiwgVUNNX1JFR19YWF9JTklUX0NSRCwgMHhlfSwKKwl7T1BfV1IsIFVDTV9SRUdfWFhfTVNHX05VTSwgMHgxYn0sCiAJe09QX1pSLCBVQ01fUkVHX1hYX1RBQkxFLCAweDEyfSwKLQl7T1BfU1csIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MjAxYjBmfSwKLQl7T1BfV1IsIFVDTV9SRUdfTl9TTV9DVFhfTERfMCwgMHhhfSwKKwl7T1BfU1dfRTEsIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWIwMjVjfSwKKwl7T1BfU1dfRTFILCBVQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFiMDI3OH0sCisJe09QX1dSLCBVQ01fUkVHX05fU01fQ1RYX0xEXzAsIDB4MTB9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8xLCAweDd9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8yLCAweGZ9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8zLCAweDEwfSwKLQl7T1BfWlIsIFVDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKKwl7T1BfWlJfRTEsIFVDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKKwl7T1BfV1JfRTFILCBVQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4ZH0sCisJe09QX1pSX0UxSCwgVUNNX1JFR19OX1NNX0NUWF9MRF81LCAweDN9LAogCXtPUF9XUiwgVUNNX1JFR19VQ01fUkVHMF9TWiwgMHgzfSwKLQl7T1BfV1IsIFVDTV9SRUdfUEhZU19RTlVNMF8wLCAweGZ9LAotCXtPUF9XUiwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4MmZ9LAotCXtPUF9XUiwgVUNNX1JFR19QSFlTX1FOVU0xXzAsIDB4ZX0sCi0Je09QX1dSLCBVQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgyZX0sCisJe09QX1dSX0UxLCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhmfSwKKwl7T1BfV1JfRTEsIFVDTV9SRUdfUEhZU19RTlVNMF8xLCAweDJmfSwKKwl7T1BfV1JfRTEsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweGV9LAorCXtPUF9XUl9FMSwgVUNNX1JFR19QSFlTX1FOVU0xXzEsIDB4MmV9LAogCXtPUF9XUiwgVUNNX1JFR19VQ01fU1RPUk0wX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBVQ01fUkVHX1VDTV9TVE9STTFfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFVDTV9SRUdfVUNNX1VRTV9JRkVOLCAweDF9LApAQCAtNDg4LDggKzc4Nyw1NiBAQAogCXtPUF9XUiwgVUNNX1JFR19DRFVfU01fV1JfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFVDTV9SRUdfQ0RVX1NNX1JEX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBVQ01fUkVHX1VDTV9DRkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgVUNNX0NPTU1PTl9FTkQgICAgICAgICAgNDI2Ci0jZGVmaW5lIFVTRU1fQ09NTU9OX1NUQVJUICAgICAgIDQyNgorI2RlZmluZSBVQ01fQ09NTU9OX0VORCAgICAgICAgICA2NTkKKyNkZWZpbmUgVUNNX0ZVTkMwX1NUQVJUICAgICAgICAgNjU5CisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4Zn0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzAsIDB4ZX0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzAsIDB4MH0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCisjZGVmaW5lIFVDTV9GVU5DMF9FTkQgICAgICAgICAgIDY2MworI2RlZmluZSBVQ01fRlVOQzFfU1RBUlQgICAgICAgICA2NjMKKwl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgyZn0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzEsIDB4MmV9LAorCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8xLCAweDB9LAorCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAorI2RlZmluZSBVQ01fRlVOQzFfRU5EICAgICAgICAgICA2NjcKKyNkZWZpbmUgVUNNX0ZVTkMyX1NUQVJUICAgICAgICAgNjY3CisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4MWZ9LAorCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDFlfSwKKwl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKKyNkZWZpbmUgVUNNX0ZVTkMyX0VORCAgICAgICAgICAgNjcxCisjZGVmaW5lIFVDTV9GVU5DM19TVEFSVCAgICAgICAgIDY3MQorCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8xLCAweDNmfSwKKwl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgzZX0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzEsIDB4MH0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCisjZGVmaW5lIFVDTV9GVU5DM19FTkQgICAgICAgICAgIDY3NQorI2RlZmluZSBVQ01fRlVOQzRfU1RBUlQgICAgICAgICA2NzUKKwl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHg0Zn0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzAsIDB4NGV9LAorCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8wLCAweDB9LAorCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAorI2RlZmluZSBVQ01fRlVOQzRfRU5EICAgICAgICAgICA2NzkKKyNkZWZpbmUgVUNNX0ZVTkM1X1NUQVJUICAgICAgICAgNjc5CisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4NmZ9LAorCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDZlfSwKKwl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKKyNkZWZpbmUgVUNNX0ZVTkM1X0VORCAgICAgICAgICAgNjgzCisjZGVmaW5lIFVDTV9GVU5DNl9TVEFSVCAgICAgICAgIDY4MworCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8wLCAweDVmfSwKKwl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg1ZX0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzAsIDB4MH0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCisjZGVmaW5lIFVDTV9GVU5DNl9FTkQgICAgICAgICAgIDY4NworI2RlZmluZSBVQ01fRlVOQzdfU1RBUlQgICAgICAgICA2ODcKKwl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHg3Zn0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzEsIDB4N2V9LAorCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8xLCAweDB9LAorCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAorI2RlZmluZSBVQ01fRlVOQzdfRU5EICAgICAgICAgICA2OTEKKyNkZWZpbmUgVVNFTV9DT01NT05fU1RBUlQgICAgICAgNjkxCiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZJQzAsIDB4MH0sCiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZJQzEsIDB4MH0sCiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZPQzAsIDB4MH0sCkBAIC01MzMsODcgKzg4MCwxOTYgQEAKIAl7T1BfV1IsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODA0MCwgMHg0ZX0sCiAJe09QX1dSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgwODAsIDB4MTB9LAogCXtPUF9XUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MGMwLCAweDIwfSwKLQl7T1BfV1IsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwMCwgMHg3YTEyMH0sCisJe09QX1dSX0FTSUMsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwMCwgMHg3YTEyMH0sCisJe09QX1dSX0VNVUwsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwMCwgMHgxMzh9LAorCXtPUF9XUl9GUEdBLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzMDAsIDB4MTM4OH0sCiAJe09QX1dSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzYzAsIDB4MWY0fSwKLQl7T1BfV1IsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4MCwgMHgxZGNkNjUwMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgxMDJ9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMjAsIDB4Yzh9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAsIDB4Mn0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWUyMCwgMHg0MH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHg0MDB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0MDAsIDB4Mn0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjQwOCwgMHgyfSwKLQl7T1BfWlIsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDEwLCAweDZ9LAotCXtPUF9TVywgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0MTAgKyAweDE4LCAweDIxYjJmfSwKLQl7T1BfWlIsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjY4LCAweDJ9LAotCXtPUF9TVywgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiNjggKyAweDgsIDB4MjFiMzF9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiMTAsIDB4Mn0sCi0Je09QX1NXLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmMzMCwgMHgyMWIzM30sCisJe09QX1dSX0FTSUMsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4MCwgMHgxZGNkNjUwMH0sCisJe09QX1dSX0VNVUwsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4MCwgMHg0YzRiNH0sCisJe09QX1dSX0ZQR0EsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4MCwgMHg0YzRiNDB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4MTAyfSwKKwl7T1BfV1JfRU1VTF9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDIwLCAweGM4fSwKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0ODAsIDB4MX0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAwMCwgMHgyfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjAwMCwgMHgxMDJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZTgsIDB4NH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMjAsIDB4Yzh9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZDAsIDB4NX0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMDAsIDB4Mn0sCisJe09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTdkMCArIDB4MTQsIDB4MTAyNzd9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzYwLCAweDR9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFlMjAsIDB4NDJ9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzM4LCAweDl9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4NDAwfSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzczOCArIDB4MjQsIDB4MTAyOTN9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJjMDAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODAsIDB4NDJ9LAorCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJjMDAgKyAweDgsIDB4MjAyNzh9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDQwMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2OCwgMHgyfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgyfSwKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjY4ICsgMHg4LCAweDIwMjdhfSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCArIDB4OCwgMHgyMDI5NH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGIxMCwgMHgyfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmI2OCwgMHgyfSwKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODMwLCAweDIwMjdjfSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmI2OCArIDB4OCwgMHgyMDI5Nn0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiMTAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDc0YzAsIDB4MjAyOTh9LAogCXtPUF9XUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDEwMDAwMDB9LAotCXtPUF9TVywgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMWIzNX0sCisJe09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMjdlfSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMjlhfSwKIAl7T1BfV1IsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgwfSwKLQl7T1BfU1csIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHgxMDFiNDV9LAotCXtPUF9aUCwgVVNFTV9SRUdfSU5UX1RBQkxFLCAweGI0MWI1NX0sCi0Je09QX1pQLCBVU0VNX1JFR19QUkFNLCAweDMyZDAxYjgyfSwKLQl7T1BfWlAsIFVTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzIxNzI4MzZ9LAotCXtPUF9aUCwgVVNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4MWE3YTM0YmN9LAotCXtPUF9aUCwgVVNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4NWYzYjVifSwKLQl7T1BfWlAsIFVTRU1fUkVHX1BSQU0gKyAweDIwMDAwLCAweDVmM2I3M30sCi0Je09QX1pQLCBVU0VNX1JFR19QUkFNICsgMHgyODAwMCwgMHg1ZjNiOGJ9LAotCXtPUF9aUCwgVVNFTV9SRUdfUFJBTSArIDB4MzAwMDAsIDB4NWYzYmEzfSwKLQl7T1BfWlAsIFVTRU1fUkVHX1BSQU0gKyAweDM4MDAwLCAweDVmM2JiYn0sCi0jZGVmaW5lIFVTRU1fQ09NTU9OX0VORCAgICAgICAgIDQ5OAotI2RlZmluZSBVU0VNX1BPUlQwX1NUQVJUICAgICAgICA0OTgKLQl7T1BfWlIsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGEwfSwKLQl7T1BfWlIsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTAwLCAweGF9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5NTAsIDB4MmV9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkMDAsIDB4MjR9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM0MDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM1MDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM2MDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM3MDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM4MDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM5MDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNhMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNjMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNlMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNmMDAsIDB4MjB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0MDAsIDB4Mn0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI3OCwgMHg1Mn0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGUwOCwgMHhjfSwKLSNkZWZpbmUgVVNFTV9QT1JUMF9FTkQgICAgICAgICAgNTIxCi0jZGVmaW5lIFVTRU1fUE9SVDFfU1RBUlQgICAgICAgIDUyMQotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE2ODAsIDB4YTB9LAotCXtPUF9aUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5MjgsIDB4YX0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWEwOCwgMHgyZX0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQ5MCwgMHgyNH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzQ4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzU4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzY4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzc4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzg4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzk4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2E4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2I4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2M4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2Q4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2U4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2Y4MCwgMHgyMH0sCi0Je09QX1pSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjQwOCwgMHgyfSwKLQl7T1BfWlIsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0Y2MwLCAweDUyfSwKLQl7T1BfWlIsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0ZTM4LCAweGN9LAotI2RlZmluZSBVU0VNX1BPUlQxX0VORCAgICAgICAgICA1NDQKLSNkZWZpbmUgQ1NFTV9DT01NT05fU1RBUlQgICAgICAgNTQ0CisJe09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMjhlfSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmFhfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjMjAwMDB9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjNDAwMDB9LAorCXtPUF9XUl82NF9FMSwgVVNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMjllfSwKKwl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAyYmF9LAorCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSwgMHgzMTFjMDAwMH0sCisJe09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSwgMHgzMTA3MDAwMH0sCisJe09QX1pQX0UxLCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzNDUwYzQ3fSwKKwl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzMGUwYzQyfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDM4NTYxOTE5fSwKKwl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzODliMTkwNn0sCisJe09QX1dSXzY0X0UxLCBVU0VNX1JFR19QUkFNICsgMHgxN2ZlMCwgMHg1MDA0MDJhMH0sCisJe09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MTMyMjcyZH0sCisJe09QX1dSXzY0X0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTgyNTAsIDB4NGZiNjAyYmN9LAorI2RlZmluZSBVU0VNX0NPTU1PTl9FTkQgICAgICAgICA3OTAKKyNkZWZpbmUgVVNFTV9QT1JUMF9TVEFSVCAgICAgICAgNzkwCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDkwMDAsIDB4YTB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5MDAsIDB4YX0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk1MDAsIDB4Mjh9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5NTAsIDB4MmV9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NjQwLCAweDM0fSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZDAwLCAweDR9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDgwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZDIwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI4OCwgMHg5Nn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQ0MCwgMHg3Mn0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTAwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTAwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIwMCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIwMCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUzMDAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMDAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NDAwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNDAwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTUwMCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzUwMCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU2MDAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM2MDAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NzAwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzAwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTgwMCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzgwMCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU5MDAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM5MDAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1YTAwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYTAwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWIwMCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2IwMCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDVjMDAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNjMDAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1ZDAwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDAwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWUwMCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2UwMCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDVmMDAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNmMDAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2Yjc4LCAweDUyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYzEwLCAweDJ9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2ZTA4LCAweGN9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiNzgsIDB4NTJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRlMDgsIDB4Y30sCisjZGVmaW5lIFVTRU1fUE9SVDBfRU5EICAgICAgICAgIDgzOAorI2RlZmluZSBVU0VNX1BPUlQxX1NUQVJUICAgICAgICA4MzgKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNjgwLCAweGEwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTI4MCwgMHhhMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkyOCwgMHhhfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTVhMCwgMHgyOH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWEwOCwgMHgyZX0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk3MTAsIDB4MzR9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkMTAsIDB4NH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMDAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkYTAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNGUwLCAweDk2fSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NjA4LCAweDcyfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA4MCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxODAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjgwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjgwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTM4MCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM4MCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU0ODAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM0ODAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NTgwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNTgwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTY4MCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzY4MCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ODAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM3ODAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1ODgwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzODgwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTk4MCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzk4MCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDVhODAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNhODAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1YjgwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjgwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWM4MCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2M4MCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDVkODAsIDB4MjB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkODAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1ZTgwLCAweDIwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZTgwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWY4MCwgMHgyMH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2Y4MCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZjYzAsIDB4NTJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJjMjAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZlMzgsIDB4Y30sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGNjMCwgMHg1Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGUzOCwgMHhjfSwKKyNkZWZpbmUgVVNFTV9QT1JUMV9FTkQgICAgICAgICAgODg2CisjZGVmaW5lIFVTRU1fRlVOQzBfU1RBUlQgICAgICAgIDg4NgorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDR9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDEwLCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMwX0VORCAgICAgICAgICA4ODgKKyNkZWZpbmUgVVNFTV9GVU5DMV9TVEFSVCAgICAgICAgODg4CisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMTAsIDB4NH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzFfRU5EICAgICAgICAgIDg5MAorI2RlZmluZSBVU0VNX0ZVTkMyX1NUQVJUICAgICAgICA4OTAKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAyMCwgMHg0fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAzMCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DMl9FTkQgICAgICAgICAgODkyCisjZGVmaW5lIFVTRU1fRlVOQzNfU1RBUlQgICAgICAgIDg5MgorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDMwLCAweDR9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDQwLCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMzX0VORCAgICAgICAgICA4OTQKKyNkZWZpbmUgVVNFTV9GVU5DNF9TVEFSVCAgICAgICAgODk0CisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNDAsIDB4NH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNTAsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzRfRU5EICAgICAgICAgIDg5NgorI2RlZmluZSBVU0VNX0ZVTkM1X1NUQVJUICAgICAgICA4OTYKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA1MCwgMHg0fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA2MCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DNV9FTkQgICAgICAgICAgODk4CisjZGVmaW5lIFVTRU1fRlVOQzZfU1RBUlQgICAgICAgIDg5OAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDYwLCAweDR9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDcwLCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkM2X0VORCAgICAgICAgICA5MDAKKyNkZWZpbmUgVVNFTV9GVU5DN19TVEFSVCAgICAgICAgOTAwCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4NH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwODAsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzdfRU5EICAgICAgICAgIDkwMgorI2RlZmluZSBDU0VNX0NPTU1PTl9TVEFSVCAgICAgICA5MDIKIAl7T1BfUkQsIENTRU1fUkVHX01TR19OVU1fRklDMCwgMHgwfSwKIAl7T1BfUkQsIENTRU1fUkVHX01TR19OVU1fRklDMSwgMHgwfSwKIAl7T1BfUkQsIENTRU1fUkVHX01TR19OVU1fRk9DMCwgMHgwfSwKQEAgLTY1OCw1MCArMTExNCwxMDYgQEAKIAl7T1BfV1IsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODA4MCwgMHgzMH0sCiAJe09QX1dSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgwYzAsIDB4ZX0sCiAJe09QX1dSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzYzAsIDB4MWY0fSwKLQl7T1BfWlIsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDQyfSwKLQl7T1BfWlIsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDIwLCAweGM4fSwKLQl7T1BfWlIsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDAwLCAweDJ9LAotCXtPUF9aUiwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4YzB9LAotCXtPUF9aUiwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4ODB9LAotCXtPUF9aUiwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQyODAsIDB4NH0sCi0Je09QX1pSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjVjMCwgMHgyNDB9LAotCXtPUF9TVywgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1YzAgKyAweDkwMCwgMHg4M2JkM30sCisJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHg0Mn0sCisJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgwLCAweDF9LAorCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMjAsIDB4Yzh9LAorCXtPUF9XUl9FTVVMX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgwLCAweDB9LAorCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAsIDB4Mn0sCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAsIDB4NDJ9LAorCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4YzB9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg3MDIwLCAweGM4fSwKKwl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDcwLCAweDgwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NzAwMCwgMHgyfSwKKwl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MjgwLCAweDR9LAorCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMWU4LCAweDB9LAorCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1YzAsIDB4MjQwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHhjMH0sCisJe09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmVjOCwgMHg4MDJhMn0sCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNzAsIDB4ODB9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjgwLCAweDR9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MjgwLCAweDI0MH0sCisJe09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiODgsIDB4MjAwMmJlfSwKIAl7T1BfV1IsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxM2ZmZmZmfSwKLQl7T1BfU1csIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDNiZGJ9LAorCXtPUF9TV19FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJhYX0sCisJe09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJkZX0sCiAJe09QX1dSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MH0sCi0Je09QX1NXLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAzYmVifSwKLQl7T1BfWlAsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg1ZjNiZmJ9LAotCXtPUF9aUCwgQ1NFTV9SRUdfUFJBTSwgMHgzMjQyM2MxM30sCi0Je09QX1pQLCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweGYyMTQ4YTR9LAotCXtPUF9aUCwgQ1NFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4NWY0YzZkfSwKLQl7T1BfWlAsIENTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDVmNGM4NX0sCi0Je09QX1pQLCBDU0VNX1JFR19QUkFNICsgMHgyMDAwMCwgMHg1ZjRjOWR9LAotCXtPUF9aUCwgQ1NFTV9SRUdfUFJBTSArIDB4MjgwMDAsIDB4NWY0Y2I1fSwKLQl7T1BfWlAsIENTRU1fUkVHX1BSQU0gKyAweDMwMDAwLCAweDVmNGNjZH0sCi0Je09QX1pQLCBDU0VNX1JFR19QUkFNICsgMHgzODAwMCwgMHg1ZjRjZTV9LAotI2RlZmluZSBDU0VNX0NPTU1PTl9FTkQgICAgICAgICA2MDkKLSNkZWZpbmUgQ1NFTV9QT1JUMF9TVEFSVCAgICAgICAgNjA5Ci0Je09QX1pSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhMH0sCi0Je09QX1pSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHgxMH0sCi0Je09QX1pSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk4MCwgMHgzMH0sCi0Je09QX1pSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjMwMCwgMHgyfSwKLQl7T1BfU1csIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzAwICsgMHg4LCAweDI0Y2ZkfSwKLQl7T1BfWlIsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDQwLCAweDZ9LAotCXtPUF9aUiwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0MTAsIDB4MzB9LAotI2RlZmluZSBDU0VNX1BPUlQwX0VORCAgICAgICAgICA2MTYKLSNkZWZpbmUgQ1NFTV9QT1JUMV9TVEFSVCAgICAgICAgNjE2Ci0Je09QX1pSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTY4MCwgMHhhMH0sCi0Je09QX1pSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk0MCwgMHgxMH0sCi0Je09QX1pSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWE0MCwgMHgzMH0sCi0Je09QX1pSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjMxMCwgMHgyfSwKLQl7T1BfU1csIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzEwICsgMHg4LCAweDI0Y2ZmfSwKLQl7T1BfWlIsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDU4LCAweDZ9LAotCXtPUF9aUiwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0ZDAsIDB4MzB9LAotI2RlZmluZSBDU0VNX1BPUlQxX0VORCAgICAgICAgICA2MjMKLSNkZWZpbmUgWFBCX0NPTU1PTl9TVEFSVCAgICAgICAgNjIzCisJe09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmJhfSwKKwl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmVlfSwKKwl7T1BfWlBfRTEsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg2ZTAwMDB9LAorCXtPUF9aUF9FMUgsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg2ZjAwMDB9LAorCXtPUF9XUl82NF9FMSwgQ1NFTV9SRUdfSU5UX1RBQkxFICsgMHgzODAsIDB4MTAwMmNhfSwKKwl7T1BfV1JfNjRfRTFILCBDU0VNX1JFR19JTlRfVEFCTEUgKyAweDM4MCwgMHgxMDAyZmV9LAorCXtPUF9aUF9FMSwgQ1NFTV9SRUdfUFJBTSwgMHgzMjU4MDAwMH0sCisJe09QX1pQX0UxSCwgQ1NFTV9SRUdfUFJBTSwgMHgzMWZhMDAwMH0sCisJe09QX1pQX0UxLCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDE4MjcwYzk2fSwKKwl7T1BfWlBfRTFILCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDE5MDQwYzdmfSwKKwl7T1BfV1JfNjRfRTEsIENTRU1fUkVHX1BSQU0gKyAweGIyMTAsIDB4NjgyNDAyY2N9LAorCXtPUF9XUl82NF9FMUgsIENTRU1fUkVHX1BSQU0gKyAweGI0MzAsIDB4NjdlMDAzMDB9LAorI2RlZmluZSBDU0VNX0NPTU1PTl9FTkQgICAgICAgICA5ODEKKyNkZWZpbmUgQ1NFTV9QT1JUMF9TVEFSVCAgICAgICAgOTgxCisJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhMH0sCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMDAsIDB4YTB9LAorCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5MDAsIDB4MTB9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4NTAwLCAweDQwfSwKKwl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTgwLCAweDMwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODcwMCwgMHgzY30sCisJe09QX1dSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTExOCwgMHgwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0MCwgMHg2fSwKKwl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzAwLCAweGV9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MDQwLCAweDMwfSwKKwl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDQwLCAweDZ9LAorCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0MTAsIDB4MzB9LAorI2RlZmluZSBDU0VNX1BPUlQwX0VORCAgICAgICAgICA5OTMKKyNkZWZpbmUgQ1NFTV9QT1JUMV9TVEFSVCAgICAgICAgOTkzCisJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTY4MCwgMHhhMH0sCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgyODAsIDB4YTB9LAorCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5NDAsIDB4MTB9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4NjAwLCAweDQwfSwKKwl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYTQwLCAweDMwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODdmMCwgMHgzY30sCisJe09QX1dSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTExYywgMHgwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA1OCwgMHg2fSwKKwl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzM4LCAweGV9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MTAwLCAweDMwfSwKKwl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDU4LCAweDZ9LAorCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0ZDAsIDB4MzB9LAorI2RlZmluZSBDU0VNX1BPUlQxX0VORCAgICAgICAgICAxMDA1CisjZGVmaW5lIENTRU1fRlVOQzBfU1RBUlQgICAgICAgIDEwMDUKKwl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0OCwgMHgwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMwMCwgMHgyfSwKKyNkZWZpbmUgQ1NFTV9GVU5DMF9FTkQgICAgICAgICAgMTAwNworI2RlZmluZSBDU0VNX0ZVTkMxX1NUQVJUICAgICAgICAxMDA3CisJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNGMsIDB4MH0sCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMDgsIDB4Mn0sCisjZGVmaW5lIENTRU1fRlVOQzFfRU5EICAgICAgICAgIDEwMDkKKyNkZWZpbmUgQ1NFTV9GVU5DMl9TVEFSVCAgICAgICAgMTAwOQorCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTUwLCAweDB9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzEwLCAweDJ9LAorI2RlZmluZSBDU0VNX0ZVTkMyX0VORCAgICAgICAgICAxMDExCisjZGVmaW5lIENTRU1fRlVOQzNfU1RBUlQgICAgICAgIDEwMTEKKwl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE1NCwgMHgwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMxOCwgMHgyfSwKKyNkZWZpbmUgQ1NFTV9GVU5DM19FTkQgICAgICAgICAgMTAxMworI2RlZmluZSBDU0VNX0ZVTkM0X1NUQVJUICAgICAgICAxMDEzCisJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNTgsIDB4MH0sCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMjAsIDB4Mn0sCisjZGVmaW5lIENTRU1fRlVOQzRfRU5EICAgICAgICAgIDEwMTUKKyNkZWZpbmUgQ1NFTV9GVU5DNV9TVEFSVCAgICAgICAgMTAxNQorCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTVjLCAweDB9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzI4LCAweDJ9LAorI2RlZmluZSBDU0VNX0ZVTkM1X0VORCAgICAgICAgICAxMDE3CisjZGVmaW5lIENTRU1fRlVOQzZfU1RBUlQgICAgICAgIDEwMTcKKwl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE2MCwgMHgwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMzMCwgMHgyfSwKKyNkZWZpbmUgQ1NFTV9GVU5DNl9FTkQgICAgICAgICAgMTAxOQorI2RlZmluZSBDU0VNX0ZVTkM3X1NUQVJUICAgICAgICAxMDE5CisJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNjQsIDB4MH0sCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMzgsIDB4Mn0sCisjZGVmaW5lIENTRU1fRlVOQzdfRU5EICAgICAgICAgIDEwMjEKKyNkZWZpbmUgWFBCX0NPTU1PTl9TVEFSVCAgICAgICAgMTAyMQogCXtPUF9XUiwgR1JDQkFTRV9YUEIgKyBQQl9SRUdfQ09OVFJPTCwgMHgyMH0sCi0jZGVmaW5lIFhQQl9DT01NT05fRU5EICAgICAgICAgIDYyNAotI2RlZmluZSBEUV9DT01NT05fU1RBUlQgICAgICAgICA2MjQKKyNkZWZpbmUgWFBCX0NPTU1PTl9FTkQgICAgICAgICAgMTAyMgorI2RlZmluZSBEUV9DT01NT05fU1RBUlQgICAgICAgICAxMDIyCiAJe09QX1dSLCBET1JRX1JFR19NT0RFX0FDVCwgMHgyfSwKIAl7T1BfV1IsIERPUlFfUkVHX05PUk1fQ0lEX09GU1QsIDB4M30sCiAJe09QX1dSLCBET1JRX1JFR19PVVRTVF9SRVEsIDB4NH0sCkBAIC03MjAsOCArMTIzMiw4IEBACiAJe09QX1dSLCBET1JRX1JFR19EUV9GSUZPX0FGVUxMX1RILCAweDc2Y30sCiAJe09QX1dSLCBET1JRX1JFR19SRUdOLCAweDdjMTAwNH0sCiAJe09QX1dSLCBET1JRX1JFR19JRl9FTiwgMHhmfSwKLSNkZWZpbmUgRFFfQ09NTU9OX0VORCAgICAgICAgICAgNjQyCi0jZGVmaW5lIFRJTUVSU19DT01NT05fU1RBUlQgICAgIDY0MgorI2RlZmluZSBEUV9DT01NT05fRU5EICAgICAgICAgICAxMDQwCisjZGVmaW5lIFRJTUVSU19DT01NT05fU1RBUlQgICAgIDEwNDAKIAl7T1BfWlIsIFRNX1JFR19DTElOX1BSSU9SMF9DTElFTlQsIDB4Mn0sCiAJe09QX1dSLCBUTV9SRUdfTElOX1NFVENMUl9GSUZPX0FMRlVMTF9USFIsIDB4MWN9LAogCXtPUF9XUiwgVE1fUkVHX0NGQ19BQ19DUkRDTlRfVkFMLCAweDF9LApAQCAtNzMwLDggKzEyNDIsMTEgQEAKIAl7T1BfV1IsIFRNX1JFR19DTE9VVF9DUkRDTlQxX1ZBTCwgMHgxfSwKIAl7T1BfV1IsIFRNX1JFR19DTE9VVF9DUkRDTlQyX1ZBTCwgMHgxfSwKIAl7T1BfV1IsIFRNX1JFR19FWFBfQ1JEQ05UX1ZBTCwgMHgxfSwKLQl7T1BfV1IsIFRNX1JFR19QQ0lBUkJfQ1JEQ05UX1ZBTCwgMHgyfSwKLQl7T1BfV1IsIFRNX1JFR19USU1FUl9USUNLX1NJWkUsIDB4M2QwOTB9LAorCXtPUF9XUl9FMSwgVE1fUkVHX1BDSUFSQl9DUkRDTlRfVkFMLCAweDF9LAorCXtPUF9XUl9FMUgsIFRNX1JFR19QQ0lBUkJfQ1JEQ05UX1ZBTCwgMHgyfSwKKwl7T1BfV1JfQVNJQywgVE1fUkVHX1RJTUVSX1RJQ0tfU0laRSwgMHgzZDA5MH0sCisJe09QX1dSX0VNVUwsIFRNX1JFR19USU1FUl9USUNLX1NJWkUsIDB4OWN9LAorCXtPUF9XUl9GUEdBLCBUTV9SRUdfVElNRVJfVElDS19TSVpFLCAweDljNH0sCiAJe09QX1dSLCBUTV9SRUdfQ0wwX0NPTlRfUkVHSU9OLCAweDh9LAogCXtPUF9XUiwgVE1fUkVHX0NMMV9DT05UX1JFR0lPTiwgMHhjfSwKIAl7T1BfV1IsIFRNX1JFR19DTDJfQ09OVF9SRUdJT04sIDB4MTB9LApAQCAtNzQxLDI0ICsxMjU2LDM3IEBACiAJe09QX1dSLCBUTV9SRUdfRU5fQ0wwX0lOUFVULCAweDF9LAogCXtPUF9XUiwgVE1fUkVHX0VOX0NMMV9JTlBVVCwgMHgxfSwKIAl7T1BfV1IsIFRNX1JFR19FTl9DTDJfSU5QVVQsIDB4MX0sCi0jZGVmaW5lIFRJTUVSU19DT01NT05fRU5EICAgICAgIDY2MQotI2RlZmluZSBUSU1FUlNfUE9SVDBfU1RBUlQgICAgICA2NjEKKyNkZWZpbmUgVElNRVJTX0NPTU1PTl9FTkQgICAgICAgMTA2MgorI2RlZmluZSBUSU1FUlNfUE9SVDBfU1RBUlQgICAgICAxMDYyCiAJe09QX1pSLCBUTV9SRUdfTElOMF9QSFlfQUREUiwgMHgyfSwKLSNkZWZpbmUgVElNRVJTX1BPUlQwX0VORCAgICAgICAgNjYyCi0jZGVmaW5lIFRJTUVSU19QT1JUMV9TVEFSVCAgICAgIDY2MgorI2RlZmluZSBUSU1FUlNfUE9SVDBfRU5EICAgICAgICAxMDYzCisjZGVmaW5lIFRJTUVSU19QT1JUMV9TVEFSVCAgICAgIDEwNjMKIAl7T1BfWlIsIFRNX1JFR19MSU4xX1BIWV9BRERSLCAweDJ9LAotI2RlZmluZSBUSU1FUlNfUE9SVDFfRU5EICAgICAgICA2NjMKLSNkZWZpbmUgWFNETV9DT01NT05fU1RBUlQgICAgICAgNjYzCi0Je09QX1dSLCBYU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4YTE0fSwKLQl7T1BfV1IsIFhTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4YTAwfSwKLQl7T1BfV1IsIFhTRE1fUkVHX1FfQ09VTlRFUl9TVEFSVF9BRERSLCAweGEwNH0sCisjZGVmaW5lIFRJTUVSU19QT1JUMV9FTkQgICAgICAgIDEwNjQKKyNkZWZpbmUgWFNETV9DT01NT05fU1RBUlQgICAgICAgMTA2NAorCXtPUF9XUl9FMSwgWFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDYxNH0sCisJe09QX1dSX0UxSCwgWFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDQyNH0sCisJe09QX1dSX0UxLCBYU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweDYwMH0sCisJe09QX1dSX0UxSCwgWFNETV9SRUdfQ01QX0NPVU5URVJfU1RBUlRfQUREUiwgMHg0MTB9LAorCXtPUF9XUl9FMSwgWFNETV9SRUdfUV9DT1VOVEVSX1NUQVJUX0FERFIsIDB4NjA0fSwKKwl7T1BfV1JfRTFILCBYU0RNX1JFR19RX0NPVU5URVJfU1RBUlRfQUREUiwgMHg0MTR9LAogCXtPUF9XUiwgWFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMCwgMHhmZmZmfSwKIAl7T1BfV1IsIFhTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDEsIDB4ZmZmZn0sCiAJe09QX1dSLCBYU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgyLCAweGZmZmZ9LAogCXtPUF9XUiwgWFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMywgMHhmZmZmfSwKIAl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMCwgMHgyMH0sCiAJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEsIDB4MjB9LAotCXtPUF9aUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yLCAweDVlfSwKKwl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMiwgMHgzNH0sCisJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMsIDB4MzV9LAorCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDIzfSwKKwl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfNSwgMHgyNH0sCisJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzYsIDB4MjV9LAorCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF83LCAweDI2fSwKKwl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfOCwgMHgyN30sCisJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzksIDB4Mjl9LAorCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMCwgMHgyYX0sCisJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzExLCAweDJifSwKKwl7T1BfWlIsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIsIDB4NTR9LAogCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzAsIDB4MX0sCiAJe09QX1pSLCBYU0RNX1JFR19BR0dfSU5UX01PREVfMSwgMHgxZn0sCiAJe09QX1dSLCBYU0RNX1JFR19FTkFCTEVfSU4xLCAweDdmZmZmZmZ9LApAQCAtNzc5LDkgKzEzMDcsMTIgQEAKIAl7T1BfUkQsIFhTRE1fUkVHX05VTV9PRl9QS1RfRU5EX01TRywgMHgwfSwKIAl7T1BfUkQsIFhTRE1fUkVHX05VTV9PRl9QWFBfQVNZTkNfUkVRLCAweDB9LAogCXtPUF9SRCwgWFNETV9SRUdfTlVNX09GX0FDS19BRlRFUl9QTEFDRSwgMHgwfSwKLQl7T1BfV1IsIFhTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKLSNkZWZpbmUgWFNETV9DT01NT05fRU5EICAgICAgICAgNjk0Ci0jZGVmaW5lIFFNX0NPTU1PTl9TVEFSVCAgICAgICAgIDY5NAorCXtPUF9XUl9FMSwgWFNETV9SRUdfSU5JVF9DUkVESVRfUFhQX0NUUkwsIDB4MX0sCisJe09QX1dSX0FTSUMsIFhTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKKwl7T1BfV1JfRU1VTCwgWFNETV9SRUdfVElNRVJfVElDSywgMHgxfSwKKwl7T1BfV1JfRlBHQSwgWFNETV9SRUdfVElNRVJfVElDSywgMHhhfSwKKyNkZWZpbmUgWFNETV9DT01NT05fRU5EICAgICAgICAgMTExMQorI2RlZmluZSBRTV9DT01NT05fU1RBUlQgICAgICAgICAxMTExCiAJe09QX1dSLCBRTV9SRUdfQUNUQ1RSSU5JVFZBTF8wLCAweDZ9LAogCXtPUF9XUiwgUU1fUkVHX0FDVENUUklOSVRWQUxfMSwgMHg1fSwKIAl7T1BfV1IsIFFNX1JFR19BQ1RDVFJJTklUVkFMXzIsIDB4YX0sCkBAIC04MjAsMTMgKzEzNTEsMjcgQEAKIAl7T1BfV1IsIFFNX1JFR19XUlJXRUlHSFRTXzMsIDB4MTAxMDEyMH0sCiAJe09QX1pSLCBRTV9SRUdfUVZPUUlEWF8xNywgMHg0fSwKIAl7T1BfV1IsIFFNX1JFR19XUlJXRUlHSFRTXzQsIDB4MTAxMDEwMX0sCi0Je09QX1pSLCBRTV9SRUdfUVZPUUlEWF8yMSwgMHg0fSwKLQl7T1BfV1IsIFFNX1JFR19XUlJXRUlHSFRTXzUsIDB4MTAxMDEwMX0sCi0Je09QX1pSLCBRTV9SRUdfUVZPUUlEWF8yNSwgMHg0fSwKLQl7T1BfV1IsIFFNX1JFR19XUlJXRUlHSFRTXzYsIDB4MTAxMDEwMX0sCi0Je09QX1pSLCBRTV9SRUdfUVZPUUlEWF8yOSwgMHgzfSwKKwl7T1BfWlJfRTEsIFFNX1JFR19RVk9RSURYXzIxLCAweDR9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzIxLCAweDB9LAorCXtPUF9XUl9FMSwgUU1fUkVHX1dSUldFSUdIVFNfNSwgMHgxMDEwMTAxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8yMiwgMHg0fSwKKwl7T1BfWlJfRTEsIFFNX1JFR19RVk9RSURYXzI1LCAweDR9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzIzLCAweDR9LAorCXtPUF9XUl9FMSwgUU1fUkVHX1dSUldFSUdIVFNfNiwgMHgxMDEwMTAxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8yNCwgMHgyfSwKKwl7T1BfWlJfRTEsIFFNX1JFR19RVk9RSURYXzI5LCAweDN9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19XUlJXRUlHSFRTXzUsIDB4ODAxMjAwNH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMjUsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMjYsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMjcsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMjgsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1dSUldFSUdIVFNfNiwgMHgyMDA4MTAwMX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMjksIDB4OH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMzAsIDB4Nn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMzEsIDB4N30sCiAJe09QX1dSLCBRTV9SRUdfUVZPUUlEWF8zMiwgMHgxfSwKLQl7T1BfV1IsIFFNX1JFR19XUlJXRUlHSFRTXzcsIDB4MTAxMDEwMX0sCisJe09QX1dSX0UxLCBRTV9SRUdfV1JSV0VJR0hUU183LCAweDEwMTAxMDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19XUlJXRUlHSFRTXzcsIDB4MTAxMDEyMH0sCiAJe09QX1dSLCBRTV9SRUdfUVZPUUlEWF8zMywgMHgxfSwKIAl7T1BfV1IsIFFNX1JFR19RVk9RSURYXzM0LCAweDF9LAogCXtPUF9XUiwgUU1fUkVHX1FWT1FJRFhfMzUsIDB4MX0sCkBAIC04NTMsMzYgKzEzOTgsMTY5IEBACiAJe09QX1dSLCBRTV9SRUdfUVZPUUlEWF81MiwgMHgxfSwKIAl7T1BfV1IsIFFNX1JFR19XUlJXRUlHSFRTXzEyLCAweDEwMTAxMDF9LAogCXtPUF9XUiwgUU1fUkVHX1FWT1FJRFhfNTMsIDB4MX0sCi0Je09QX1dSLCBRTV9SRUdfUVZPUUlEWF81NCwgMHgxfSwKLQl7T1BfV1IsIFFNX1JFR19RVk9RSURYXzU1LCAweDF9LAotCXtPUF9XUiwgUU1fUkVHX1FWT1FJRFhfNTYsIDB4MX0sCi0Je09QX1dSLCBRTV9SRUdfV1JSV0VJR0hUU18xMywgMHgxMDEwMTAxfSwKLQl7T1BfV1IsIFFNX1JFR19RVk9RSURYXzU3LCAweDF9LAotCXtPUF9XUiwgUU1fUkVHX1FWT1FJRFhfNTgsIDB4MX0sCi0Je09QX1dSLCBRTV9SRUdfUVZPUUlEWF81OSwgMHgxfSwKLQl7T1BfV1IsIFFNX1JFR19RVk9RSURYXzYwLCAweDF9LAotCXtPUF9XUiwgUU1fUkVHX1dSUldFSUdIVFNfMTQsIDB4MTAxMDEwMX0sCi0Je09QX1dSLCBRTV9SRUdfUVZPUUlEWF82MSwgMHgxfSwKLQl7T1BfV1IsIFFNX1JFR19RVk9RSURYXzYyLCAweDF9LAotCXtPUF9XUiwgUU1fUkVHX1FWT1FJRFhfNjMsIDB4MX0sCi0Je09QX1dSLCBRTV9SRUdfV1JSV0VJR0hUU18xNSwgMHgxMDEwMTAxfSwKLQl7T1BfV1IsIFFNX1JFR19WT1FRTUFTS18wX0xTQiwgMHhmZmZmMDAzZn0sCi0Je09QX1pSLCBRTV9SRUdfVk9RUU1BU0tfMF9NU0IsIDB4Mn0sCi0Je09QX1dSLCBRTV9SRUdfVk9RUU1BU0tfMV9NU0IsIDB4ZmZmZjAwM2Z9LAotCXtPUF9XUiwgUU1fUkVHX1ZPUVFNQVNLXzJfTFNCLCAweDEwMH0sCi0Je09QX1dSLCBRTV9SRUdfVk9RUU1BU0tfMl9NU0IsIDB4MTAwfSwKKwl7T1BfV1JfRTEsIFFNX1JFR19RVk9RSURYXzU0LCAweDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzU0LCAweDR9LAorCXtPUF9XUl9FMSwgUU1fUkVHX1FWT1FJRFhfNTUsIDB4MX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfNTUsIDB4NH0sCisJe09QX1dSX0UxLCBRTV9SRUdfUVZPUUlEWF81NiwgMHgxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF81NiwgMHgyfSwKKwl7T1BfV1JfRTEsIFFNX1JFR19XUlJXRUlHSFRTXzEzLCAweDEwMTAxMDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19XUlJXRUlHSFRTXzEzLCAweDgwMTIwMDR9LAorCXtPUF9XUl9FMSwgUU1fUkVHX1FWT1FJRFhfNTcsIDB4MX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfNTcsIDB4NX0sCisJe09QX1dSX0UxLCBRTV9SRUdfUVZPUUlEWF81OCwgMHgxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF81OCwgMHg1fSwKKwl7T1BfV1JfRTEsIFFNX1JFR19RVk9RSURYXzU5LCAweDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzU5LCAweDV9LAorCXtPUF9XUl9FMSwgUU1fUkVHX1FWT1FJRFhfNjAsIDB4MX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfNjAsIDB4NX0sCisJe09QX1dSX0UxLCBRTV9SRUdfV1JSV0VJR0hUU18xNCwgMHgxMDEwMTAxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfV1JSV0VJR0hUU18xNCwgMHgyMDA4MTAwMX0sCisJe09QX1dSX0UxLCBRTV9SRUdfUVZPUUlEWF82MSwgMHgxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF82MSwgMHg4fSwKKwl7T1BfV1JfRTEsIFFNX1JFR19RVk9RSURYXzYyLCAweDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzYyLCAweDZ9LAorCXtPUF9XUl9FMSwgUU1fUkVHX1FWT1FJRFhfNjMsIDB4MX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfNjMsIDB4N30sCisJe09QX1dSX0UxLCBRTV9SRUdfV1JSV0VJR0hUU18xNSwgMHgxMDEwMTAxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF82NCwgMHgwfSwKKwl7T1BfV1JfRTEsIFFNX1JFR19WT1FRTUFTS18wX0xTQiwgMHhmZmZmMDAzZn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1dSUldFSUdIVFNfMTUsIDB4MTAxMDEyMH0sCisJe09QX1pSX0UxLCBRTV9SRUdfVk9RUU1BU0tfMF9NU0IsIDB4Mn0sCisJe09QX1pSX0UxSCwgUU1fUkVHX1FWT1FJRFhfNjUsIDB4NH0sCisJe09QX1dSX0UxLCBRTV9SRUdfVk9RUU1BU0tfMV9NU0IsIDB4ZmZmZjAwM2Z9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19XUlJXRUlHSFRTXzE2LCAweDEwMTAxMDF9LAorCXtPUF9XUl9FMSwgUU1fUkVHX1ZPUVFNQVNLXzJfTFNCLCAweDEwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfNjksIDB4MH0sCisJe09QX1dSX0UxLCBRTV9SRUdfVk9RUU1BU0tfMl9NU0IsIDB4MTAwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF83MCwgMHg0fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF83MSwgMHg0fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF83MiwgMHgyfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfV1JSV0VJR0hUU18xNywgMHg4MDEyMDA0fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF83MywgMHg1fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF83NCwgMHg1fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF83NSwgMHg1fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF83NiwgMHg1fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfV1JSV0VJR0hUU18xOCwgMHgyMDA4MTAwMX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfNzcsIDB4OH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfNzgsIDB4Nn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfNzksIDB4N30sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfODAsIDB4MH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1dSUldFSUdIVFNfMTksIDB4MTAxMDEyMH0sCisJe09QX1pSX0UxSCwgUU1fUkVHX1FWT1FJRFhfODEsIDB4NH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1dSUldFSUdIVFNfMjAsIDB4MTAxMDEwMX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfODUsIDB4MH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfODYsIDB4NH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfODcsIDB4NH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfODgsIDB4Mn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1dSUldFSUdIVFNfMjEsIDB4ODAxMjAwNH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfODksIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfOTAsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfOTEsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfOTIsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1dSUldFSUdIVFNfMjIsIDB4MjAwODEwMDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzkzLCAweDh9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzk0LCAweDZ9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzk1LCAweDd9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzk2LCAweDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19XUlJXRUlHSFRTXzIzLCAweDEwMTAxMjB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzk3LCAweDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzk4LCAweDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzk5LCAweDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzEwMCwgMHgxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfV1JSV0VJR0hUU18yNCwgMHgxMDEwMTAxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMDEsIDB4MX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMTAyLCAweDR9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzEwMywgMHg0fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMDQsIDB4Mn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1dSUldFSUdIVFNfMjUsIDB4ODAxMjAwNH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMTA1LCAweDV9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzEwNiwgMHg1fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMDcsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMTA4LCAweDV9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19XUlJXRUlHSFRTXzI2LCAweDIwMDgxMDAxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMDksIDB4OH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMTEwLCAweDZ9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzExMSwgMHg3fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMTIsIDB4MX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1dSUldFSUdIVFNfMjcsIDB4MTAxMDEyMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMTEzLCAweDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzExNCwgMHgxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMTUsIDB4MX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMTE2LCAweDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19XUlJXRUlHSFRTXzI4LCAweDEwMTAxMDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzExNywgMHgxfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMTgsIDB4NH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMTE5LCAweDR9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzEyMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfV1JSV0VJR0hUU18yOSwgMHg4MDEyMDA0fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMjEsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMTIyLCAweDV9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzEyMywgMHg1fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMjQsIDB4NX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1dSUldFSUdIVFNfMzAsIDB4MjAwODEwMDF9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19RVk9RSURYXzEyNSwgMHg4fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUVZPUUlEWF8xMjYsIDB4Nn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1FWT1FJRFhfMTI3LCAweDd9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19XUlJXRUlHSFRTXzMxLCAweDEwMTAxMjB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS18wX0xTQiwgMHgzZjAwM2Z9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS18wX01TQiwgMHgwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfMF9MU0JfRVhUX0EsIDB4M2YwMDNmfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfMF9NU0JfRVhUX0EsIDB4MH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzFfTFNCLCAweDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS18xX01TQiwgMHgzZjAwM2Z9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS18xX0xTQl9FWFRfQSwgMHgwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfMV9NU0JfRVhUX0EsIDB4M2YwMDNmfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfMl9MU0IsIDB4MTAwMDEwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzJfTVNCLCAweDEwMDAxMDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS18yX0xTQl9FWFRfQSwgMHgxMDAwMTAwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfMl9NU0JfRVhUX0EsIDB4MTAwMDEwMH0sCiAJe09QX1pSLCBRTV9SRUdfVk9RUU1BU0tfM19MU0IsIDB4Mn0sCi0Je09QX1dSLCBRTV9SRUdfVk9RUU1BU0tfNF9MU0IsIDB4YzB9LAotCXtPUF9XUiwgUU1fUkVHX1ZPUVFNQVNLXzRfTVNCLCAweGMwfSwKLQl7T1BfV1IsIFFNX1JFR19WT1FRTUFTS181X0xTQiwgMHgxZTAwfSwKLQl7T1BfV1IsIFFNX1JFR19WT1FRTUFTS181X01TQiwgMHgxZTAwfSwKLQl7T1BfV1IsIFFNX1JFR19WT1FRTUFTS182X0xTQiwgMHg0MDAwfSwKLQl7T1BfV1IsIFFNX1JFR19WT1FRTUFTS182X01TQiwgMHg0MDAwfSwKLQl7T1BfV1IsIFFNX1JFR19WT1FRTUFTS183X0xTQiwgMHg4MDAwfSwKLQl7T1BfV1IsIFFNX1JFR19WT1FRTUFTS183X01TQiwgMHg4MDAwfSwKLQl7T1BfV1IsIFFNX1JFR19WT1FRTUFTS184X0xTQiwgMHgyMDAwfSwKLQl7T1BfV1IsIFFNX1JFR19WT1FRTUFTS184X01TQiwgMHgyMDAwfSwKLQl7T1BfWlIsIFFNX1JFR19WT1FRTUFTS185X0xTQiwgMHg3fSwKKwl7T1BfV1JfRTEsIFFNX1JFR19WT1FRTUFTS180X0xTQiwgMHhjMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzNfTFNCX0VYVF9BLCAweDB9LAorCXtPUF9XUl9FMSwgUU1fUkVHX1ZPUVFNQVNLXzRfTVNCLCAweGMwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfM19NU0JfRVhUX0EsIDB4MH0sCisJe09QX1dSX0UxLCBRTV9SRUdfVk9RUU1BU0tfNV9MU0IsIDB4MWUwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzRfTFNCLCAweGMwMDBjMH0sCisJe09QX1dSX0UxLCBRTV9SRUdfVk9RUU1BU0tfNV9NU0IsIDB4MWUwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzRfTVNCLCAweGMwMDBjMH0sCisJe09QX1dSX0UxLCBRTV9SRUdfVk9RUU1BU0tfNl9MU0IsIDB4NDAwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzRfTFNCX0VYVF9BLCAweGMwMDBjMH0sCisJe09QX1dSX0UxLCBRTV9SRUdfVk9RUU1BU0tfNl9NU0IsIDB4NDAwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzRfTVNCX0VYVF9BLCAweGMwMDBjMH0sCisJe09QX1dSX0UxLCBRTV9SRUdfVk9RUU1BU0tfN19MU0IsIDB4ODAwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzVfTFNCLCAweDFlMDAxZTAwfSwKKwl7T1BfV1JfRTEsIFFNX1JFR19WT1FRTUFTS183X01TQiwgMHg4MDAwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfNV9NU0IsIDB4MWUwMDFlMDB9LAorCXtPUF9XUl9FMSwgUU1fUkVHX1ZPUVFNQVNLXzhfTFNCLCAweDIwMDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS181X0xTQl9FWFRfQSwgMHgxZTAwMWUwMH0sCisJe09QX1dSX0UxLCBRTV9SRUdfVk9RUU1BU0tfOF9NU0IsIDB4MjAwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzVfTVNCX0VYVF9BLCAweDFlMDAxZTAwfSwKKwl7T1BfWlJfRTEsIFFNX1JFR19WT1FRTUFTS185X0xTQiwgMHg3fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfNl9MU0IsIDB4NDAwMDQwMDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS182X01TQiwgMHg0MDAwNDAwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzZfTFNCX0VYVF9BLCAweDQwMDA0MDAwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfNl9NU0JfRVhUX0EsIDB4NDAwMDQwMDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS183X0xTQiwgMHg4MDAwODAwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzdfTVNCLCAweDgwMDA4MDAwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfN19MU0JfRVhUX0EsIDB4ODAwMDgwMDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS183X01TQl9FWFRfQSwgMHg4MDAwODAwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzhfTFNCLCAweDIwMDAyMDAwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfOF9NU0IsIDB4MjAwMDIwMDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS184X0xTQl9FWFRfQSwgMHgyMDAwMjAwMH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzhfTVNCX0VYVF9BLCAweDIwMDAyMDAwfSwKKwl7T1BfWlJfRTFILCBRTV9SRUdfVk9RUU1BU0tfOV9MU0IsIDB4Mn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzlfTFNCX0VYVF9BLCAweDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS185X01TQl9FWFRfQSwgMHgwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfMTBfTFNCLCAweDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS18xMF9NU0IsIDB4MH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzEwX0xTQl9FWFRfQSwgMHgwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfMTBfTVNCX0VYVF9BLCAweDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS18xMV9MU0IsIDB4MH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVFNQVNLXzExX01TQiwgMHgwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfVk9RUU1BU0tfMTFfTFNCX0VYVF9BLCAweDB9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19WT1FRTUFTS18xMV9NU0JfRVhUX0EsIDB4MH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1ZPUVBPUlRfMCwgMHgwfSwKIAl7T1BfV1IsIFFNX1JFR19WT1FQT1JUXzEsIDB4MX0sCiAJe09QX1pSLCBRTV9SRUdfVk9RUE9SVF8yLCAweGF9LAogCXtPUF9XUiwgUU1fUkVHX0NNSU5UVk9RTUFTS18wLCAweGMwOH0sCkBAIC04OTMsOCArMTU3MSwxMiBAQAogCXtPUF9XUiwgUU1fUkVHX0NNSU5UVk9RTUFTS181LCAweDgwfSwKIAl7T1BfV1IsIFFNX1JFR19DTUlOVFZPUU1BU0tfNiwgMHgyMDB9LAogCXtPUF9XUiwgUU1fUkVHX0NNSU5UVk9RTUFTS183LCAweDB9LAotCXtPUF9XUiwgUU1fUkVHX0hXQUVNUFRZTUFTS19MU0IsIDB4ZmZmZjAxZmZ9LAotCXtPUF9XUiwgUU1fUkVHX0hXQUVNUFRZTUFTS19NU0IsIDB4ZmZmZjAxZmZ9LAorCXtPUF9XUl9FMSwgUU1fUkVHX0hXQUVNUFRZTUFTS19MU0IsIDB4ZmZmZjAxZmZ9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19IV0FFTVBUWU1BU0tfTFNCLCAweDFmZjAxZmZ9LAorCXtPUF9XUl9FMSwgUU1fUkVHX0hXQUVNUFRZTUFTS19NU0IsIDB4ZmZmZjAxZmZ9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19IV0FFTVBUWU1BU0tfTVNCLCAweDFmZjAxZmZ9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19IV0FFTVBUWU1BU0tfTFNCX0VYVF9BLCAweDFmZjAxZmZ9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19IV0FFTVBUWU1BU0tfTVNCX0VYVF9BLCAweDFmZjAxZmZ9LAogCXtPUF9XUiwgUU1fUkVHX0VOQllQVk9RTUFTSywgMHgxM30sCiAJe09QX1dSLCBRTV9SRUdfVk9RQ1JFRElUQUZVTExUSFIsIDB4MTNmfSwKIAl7T1BfV1IsIFFNX1JFR19WT1FJTklUQ1JFRElUXzAsIDB4MTQwfSwKQEAgLTkxMCwxNSArMTU5MiwyOSBAQAogCXtPUF9XUiwgUU1fUkVHX0JZVEVDUkRJTklUVkFMLCAweDgwMDB9LAogCXtPUF9XUiwgUU1fUkVHX0JZVEVDUkRDT1NULCAweDI1ZTR9LAogCXtPUF9XUiwgUU1fUkVHX0JZVEVDUkVESVRBRlVMTFRIUiwgMHg3ZmZmfSwKLQl7T1BfV1IsIFFNX1JFR19FTkJZVEVDUkRfTFNCLCAweDd9LAotCXtPUF9XUiwgUU1fUkVHX0VOQllURUNSRF9NU0IsIDB4N30sCisJe09QX1dSX0UxLCBRTV9SRUdfRU5CWVRFQ1JEX0xTQiwgMHg3fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfRU5CWVRFQ1JEX0xTQiwgMHg3MDAwN30sCisJe09QX1dSX0UxLCBRTV9SRUdfRU5CWVRFQ1JEX01TQiwgMHg3fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfRU5CWVRFQ1JEX01TQiwgMHg3MDAwN30sCisJe09QX1dSX0UxSCwgUU1fUkVHX0VOQllURUNSRF9MU0JfRVhUX0EsIDB4NzAwMDd9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19FTkJZVEVDUkRfTVNCX0VYVF9BLCAweDcwMDA3fSwKIAl7T1BfV1IsIFFNX1JFR19CWVRFQ1JEUE9SVF9MU0IsIDB4MH0sCiAJe09QX1dSLCBRTV9SRUdfQllURUNSRFBPUlRfTVNCLCAweGZmZmZmZmZmfSwKLQl7T1BfV1IsIFFNX1JFR19GVU5DTlVNU0VMX0xTQiwgMHgwfSwKLQl7T1BfV1IsIFFNX1JFR19GVU5DTlVNU0VMX01TQiwgMHhmZmZmZmZmZn0sCisJe09QX1dSX0UxLCBRTV9SRUdfRlVOQ05VTVNFTF9MU0IsIDB4MH0sCisJe09QX1dSX0UxSCwgUU1fUkVHX0JZVEVDUkRQT1JUX0xTQl9FWFRfQSwgMHgwfSwKKwl7T1BfV1JfRTEsIFFNX1JFR19GVU5DTlVNU0VMX01TQiwgMHhmZmZmZmZmZn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX0JZVEVDUkRQT1JUX01TQl9FWFRfQSwgMHhmZmZmZmZmZn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1BRMlBDSUZVTkNfMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUFEyUENJRlVOQ18xLCAweDJ9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19QUTJQQ0lGVU5DXzIsIDB4MX0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1BRMlBDSUZVTkNfMywgMHgzfSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUFEyUENJRlVOQ180LCAweDR9LAorCXtPUF9XUl9FMUgsIFFNX1JFR19QUTJQQ0lGVU5DXzUsIDB4Nn0sCisJe09QX1dSX0UxSCwgUU1fUkVHX1BRMlBDSUZVTkNfNiwgMHg1fSwKKwl7T1BfV1JfRTFILCBRTV9SRUdfUFEyUENJRlVOQ183LCAweDd9LAogCXtPUF9XUiwgUU1fUkVHX0NNSU5URU4sIDB4ZmZ9LAotI2RlZmluZSBRTV9DT01NT05fRU5EICAgICAgICAgICA4MjkKLSNkZWZpbmUgUEJGX0NPTU1PTl9TVEFSVCAgICAgICAgODI5CisjZGVmaW5lIFFNX0NPTU1PTl9FTkQgICAgICAgICAgIDE0MTEKKyNkZWZpbmUgUEJGX0NPTU1PTl9TVEFSVCAgICAgICAgMTQxMQogCXtPUF9XUiwgUEJGX1JFR19JTklULCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19JTklUX1A0LCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19NQUNfTEJfRU5BQkxFLCAweDF9LApAQCAtOTI2LDIwICsxNjIyLDIwIEBACiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDQsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0lOSVQsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QNCwgMHgwfSwKLSNkZWZpbmUgUEJGX0NPTU1PTl9FTkQgICAgICAgICAgODM2Ci0jZGVmaW5lIFBCRl9QT1JUMF9TVEFSVCAgICAgICAgIDgzNgorI2RlZmluZSBQQkZfQ09NTU9OX0VORCAgICAgICAgICAxNDE4CisjZGVmaW5lIFBCRl9QT1JUMF9TVEFSVCAgICAgICAgIDE0MTgKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMCwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfTUFDX0lGMF9FTkFCTEUsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDAsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMCwgMHgwfSwKLSNkZWZpbmUgUEJGX1BPUlQwX0VORCAgICAgICAgICAgODQwCi0jZGVmaW5lIFBCRl9QT1JUMV9TVEFSVCAgICAgICAgIDg0MAorI2RlZmluZSBQQkZfUE9SVDBfRU5EICAgICAgICAgICAxNDIyCisjZGVmaW5lIFBCRl9QT1JUMV9TVEFSVCAgICAgICAgIDE0MjIKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMSwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfTUFDX0lGMV9FTkFCTEUsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDEsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMSwgMHgwfSwKLSNkZWZpbmUgUEJGX1BPUlQxX0VORCAgICAgICAgICAgODQ0Ci0jZGVmaW5lIFhDTV9DT01NT05fU1RBUlQgICAgICAgIDg0NAorI2RlZmluZSBQQkZfUE9SVDFfRU5EICAgICAgICAgICAxNDI2CisjZGVmaW5lIFhDTV9DT01NT05fU1RBUlQgICAgICAgIDE0MjYKIAl7T1BfV1IsIFhDTV9SRUdfWFhfT1ZGTF9FVk5UX0lELCAweDMyfSwKIAl7T1BfV1IsIFhDTV9SRUdfWFFNX1hDTV9IRFJfUCwgMHgzMTUwMDIwfSwKIAl7T1BfV1IsIFhDTV9SRUdfWFFNX1hDTV9IRFJfUywgMHgzMTUwMDIwfSwKQEAgLTk3MSwxNCArMTY2NywxOCBAQAogCXtPUF9XUiwgWENNX1JFR19UTV9JTklUX0NSRCwgMHg0fSwKIAl7T1BfV1IsIFhDTV9SRUdfWFFNX0lOSVRfQ1JELCAweDIwfSwKIAl7T1BfV1IsIFhDTV9SRUdfWFhfSU5JVF9DUkQsIDB4Mn0sCi0Je09QX1dSLCBYQ01fUkVHX1hYX01TR19OVU0sIDB4MWZ9LAorCXtPUF9XUl9FMSwgWENNX1JFR19YWF9NU0dfTlVNLCAweDFmfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1hYX01TR19OVU0sIDB4MjB9LAogCXtPUF9aUiwgWENNX1JFR19YWF9UQUJMRSwgMHgxMn0sCi0Je09QX1NXLCBYQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFmNGQwMX0sCisJe09QX1NXX0UxLCBYQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFmMDJjZX0sCisJe09QX1NXX0UxSCwgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxZjAzMDJ9LAogCXtPUF9XUiwgWENNX1JFR19OX1NNX0NUWF9MRF8wLCAweGZ9LAogCXtPUF9XUiwgWENNX1JFR19OX1NNX0NUWF9MRF8xLCAweDd9LAogCXtPUF9XUiwgWENNX1JFR19OX1NNX0NUWF9MRF8yLCAweGJ9LAogCXtPUF9XUiwgWENNX1JFR19OX1NNX0NUWF9MRF8zLCAweGV9LAotCXtPUF9aUiwgWENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAorCXtPUF9aUl9FMSwgWENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHhjfSwKKwl7T1BfWlJfRTFILCBYQ01fUkVHX05fU01fQ1RYX0xEXzUsIDB4M30sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9SRUcwX1NaLCAweDR9LAogCXtPUF9XUiwgWENNX1JFR19YQ01fU1RPUk0wX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9TVE9STTFfSUZFTiwgMHgxfSwKQEAgLTEwMDAsMjggKzE3MDAsMTE2IEBACiAJe09QX1dSLCBYQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgWENNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFhDTV9SRUdfWENNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBYQ01fQ09NTU9OX0VORCAgICAgICAgICA5MDQKLSNkZWZpbmUgWENNX1BPUlQwX1NUQVJUICAgICAgICAgOTA0Ci0Je09QX1dSLCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCi0Je09QX1dSLCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKLQl7T1BfV1IsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LAotCXtPUF9XUiwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMTAsIDB4MH0sCi0Je09QX1dSLCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMCwgMHgyfSwKLQl7T1BfV1IsIFhDTV9SRUdfV1VfREFfQ05UX0NNRDEwLCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKLQl7T1BfV1IsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCi0jZGVmaW5lIFhDTV9QT1JUMF9FTkQgICAgICAgICAgIDkxMgotI2RlZmluZSBYQ01fUE9SVDFfU1RBUlQgICAgICAgICA5MTIKLQl7T1BfV1IsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKLQl7T1BfV1IsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCi0Je09QX1dSLCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMSwgMHgwfSwKLQl7T1BfV1IsIFhDTV9SRUdfV1VfREFfQ05UX0NNRDAxLCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19XVV9EQV9DTlRfQ01EMTEsIDB4Mn0sCi0Je09QX1dSLCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAotCXtPUF9XUiwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKLSNkZWZpbmUgWENNX1BPUlQxX0VORCAgICAgICAgICAgOTIwCi0jZGVmaW5lIFhTRU1fQ09NTU9OX1NUQVJUICAgICAgIDkyMAorI2RlZmluZSBYQ01fQ09NTU9OX0VORCAgICAgICAgICAxNDkwCisjZGVmaW5lIFhDTV9QT1JUMF9TVEFSVCAgICAgICAgIDE0OTAKKwl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKKwl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAweDJ9LAorCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDB4MH0sCisJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMCwgMHgwfSwKKwl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX0NNRDAwLCAweDJ9LAorCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfQ01EMTAsIDB4Mn0sCisJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAorCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDEwLCAweGZmfSwKKyNkZWZpbmUgWENNX1BPUlQwX0VORCAgICAgICAgICAgMTQ5OAorI2RlZmluZSBYQ01fUE9SVDFfU1RBUlQgICAgICAgICAxNDk4CisJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMSwgMHhjOH0sCisJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKKwl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LAorCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMTEsIDB4MH0sCisJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMSwgMHgyfSwKKwl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX0NNRDExLCAweDJ9LAorCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAxLCAweGZmfSwKKwl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCisjZGVmaW5lIFhDTV9QT1JUMV9FTkQgICAgICAgICAgIDE1MDYKKyNkZWZpbmUgWENNX0ZVTkMwX1NUQVJUICAgICAgICAgMTUwNgorCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCisJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCisjZGVmaW5lIFhDTV9GVU5DMF9FTkQgICAgICAgICAgIDE1MTUKKyNkZWZpbmUgWENNX0ZVTkMxX1NUQVJUICAgICAgICAgMTUxNQorCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCisJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCisjZGVmaW5lIFhDTV9GVU5DMV9FTkQgICAgICAgICAgIDE1MjQKKyNkZWZpbmUgWENNX0ZVTkMyX1NUQVJUICAgICAgICAgMTUyNAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCisJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCisjZGVmaW5lIFhDTV9GVU5DMl9FTkQgICAgICAgICAgIDE1MzMKKyNkZWZpbmUgWENNX0ZVTkMzX1NUQVJUICAgICAgICAgMTUzMworCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCisJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCisjZGVmaW5lIFhDTV9GVU5DM19FTkQgICAgICAgICAgIDE1NDIKKyNkZWZpbmUgWENNX0ZVTkM0X1NUQVJUICAgICAgICAgMTU0MgorCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCisJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCisjZGVmaW5lIFhDTV9GVU5DNF9FTkQgICAgICAgICAgIDE1NTEKKyNkZWZpbmUgWENNX0ZVTkM1X1NUQVJUICAgICAgICAgMTU1MQorCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCisJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCisjZGVmaW5lIFhDTV9GVU5DNV9FTkQgICAgICAgICAgIDE1NjAKKyNkZWZpbmUgWENNX0ZVTkM2X1NUQVJUICAgICAgICAgMTU2MAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCisJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCisjZGVmaW5lIFhDTV9GVU5DNl9FTkQgICAgICAgICAgIDE1NjkKKyNkZWZpbmUgWENNX0ZVTkM3X1NUQVJUICAgICAgICAgMTU2OQorCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMSwgMHgwfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMSwgMHgyfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCisJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCisjZGVmaW5lIFhDTV9GVU5DN19FTkQgICAgICAgICAgIDE1NzgKKyNkZWZpbmUgWFNFTV9DT01NT05fU1RBUlQgICAgICAgMTU3OAogCXtPUF9SRCwgWFNFTV9SRUdfTVNHX05VTV9GSUMwLCAweDB9LAogCXtPUF9SRCwgWFNFTV9SRUdfTVNHX05VTV9GSUMxLCAweDB9LAogCXtPUF9SRCwgWFNFTV9SRUdfTVNHX05VTV9GT0MwLCAweDB9LApAQCAtMTA2NSwxNTcgKzE4NTMsNDAyIEBACiAJe09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgwNDAsIDB4MTh9LAogCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MDgwLCAweGN9LAogCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MGMwLCAweDY2fSwKLQl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwMCwgMHg3YTEyMH0sCisJe09QX1dSX0FTSUMsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwMCwgMHg3YTEyMH0sCisJe09QX1dSX0VNVUwsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwMCwgMHgxMzh9LAorCXtPUF9XUl9GUEdBLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzMDAsIDB4MTM4OH0sCiAJe09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzYzAsIDB4MWY0fSwKLQl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM0MCwgMHgxZjR9LAotCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDFkY2Q2NTAwfSwKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NWQ4LCAweDJ9LAotCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4NDh9LAotCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMjAsIDB4Yzh9LAotCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAsIDB4Mn0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTEyOCwgMHg5Mn0sCi0Je09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTM3OCwgMHgwfSwKLQl7T1BfU1csIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzgwLCAweDI0ZDIwfSwKLQl7T1BfU1csIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NDI4LCAweDQ0ZDIyfSwKLQl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTE4LCAweDF9LAotCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzAsIDB4MH0sCi0Je09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzOCwgMHgwfSwKLQl7T1BfU1csIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODIwLCAweDI0ZDI2fSwKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWMwLCAweDJ9LAotCXtPUF9TVywgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRhZDgsIDB4MjRkMjh9LAotCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiMDgsIDB4NH0sCi0Je09QX1NXLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWY1MCwgMHgyNGQyYX0sCisJe09QX1dSX0FTSUMsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM0MCwgMHgxZjR9LAorCXtPUF9XUl9FTVVMLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzNDAsIDB4MH0sCisJe09QX1dSX0ZQR0EsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM0MCwgMHg1fSwKKwl7T1BfV1JfRU1VTCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDRjNGI0fSwKKwl7T1BfV1JfQVNJQywgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDFkY2Q2NTAwfSwKKwl7T1BfV1JfRU1VTF9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgwfSwKKwl7T1BfV1JfRlBHQSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDRjNGI0MH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2QwMCwgMHg0fSwKKwl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0ODAsIDB4MX0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHg0OH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4YTgsIDB4NH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAyMCwgMHhjOH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwODAsIDB4NDh9LAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAsIDB4Mn0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDkwMjAsIDB4Yzh9LAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMjgsIDB4OGV9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5MDAwLCAweDJ9LAorCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzNjgsIDB4MH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIxYTgsIDB4ODZ9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzNzAsIDB4MjAyZWR9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMDAwLCAweDIwfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjkwLCAweDQwMmVmfSwKKwl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjNjOCwgMHgwfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTE4LCAweDF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyM2QwLCAweDIwMzIxfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwLCAweDB9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDk4LCAweDQwMzIzfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4LCAweDB9LAorCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWM4LCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MjAsIDB4MjAyZjN9LAorCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWI4LCAweDB9LAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRhYzAsIDB4Mn0sCisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMTAsIDB4MX0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGIwMCwgMHg0fSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0MCwgMHgxMH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWY1MCwgMHgyMDJmNX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4MTAwMzI3fSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFjMCwgMHgyfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmIwMCwgMHg0fSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODNiMCwgMHgyMDMzN30sCiAJe09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MH0sCi0Je09QX1NXLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTA0ZDJjfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyZjd9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAzMzl9LAogCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDEwMDAwMDB9LAotCXtPUF9TVywgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDg0ZDNjfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHg4MDMwN30sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDgwMzQ5fSwKIAl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgyMDAwMDAwfSwKLQl7T1BfU1csIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4NGQ0NH0sCi0Je09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MzAwMDAwMH0sCi0Je09QX1NXLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjODAsIDB4ODRkNGN9LAotCXtPUF9aUCwgWFNFTV9SRUdfSU5UX1RBQkxFLCAweDgxNGQ1NH0sCi0Je09QX1pQLCBYU0VNX1JFR19QUkFNLCAweDM1Nzc0ZDc1fSwKLQl7T1BfWlAsIFhTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzY1MjVhZDN9LAotCXtPUF9aUCwgWFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4MjcyNjY4Njh9LAotCXtPUF9aUCwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4NWU3MjMyfSwKLQl7T1BfWlAsIFhTRU1fUkVHX1BSQU0gKyAweDIwMDAwLCAweDVlNzI0YX0sCi0Je09QX1pQLCBYU0VNX1JFR19QUkFNICsgMHgyODAwMCwgMHg1ZTcyNjJ9LAotCXtPUF9aUCwgWFNFTV9SRUdfUFJBTSArIDB4MzAwMDAsIDB4NWU3MjdhfSwKLQl7T1BfWlAsIFhTRU1fUkVHX1BSQU0gKyAweDM4MDAwLCAweDVlNzI5Mn0sCi0jZGVmaW5lIFhTRU1fQ09NTU9OX0VORCAgICAgICAgIDEwMDAKLSNkZWZpbmUgWFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMTAwMAotCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MDAsIDB4YX0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQ1MCwgMHg2fSwKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1Mzg4LCAweGN9LAotCXtPUF9TVywgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUzODggKyAweDMwLCAweDI3MmFhfSwKLQl7T1BfU1csIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NWUwLCAweDc3MmFjfSwKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NjAwLCAweDd9LAotCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDAsIDB4MH0sCi0Je09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwOCwgMHgxfSwKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDIwLCAweDJ9LAotCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMzAsIDB4Mn0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHgyfSwKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDEwLCAweDJ9LAotCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNDAsIDB4MH0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA0OCwgMHhjfSwKLQl7T1BfU1csIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDQ4ICsgMHgzMCwgMHgyNzJiM30sCi0Je09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBiOCwgMHgxfSwKLQl7T1BfU1csIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWM4LCAweDI3MmI1fSwKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjE4LCAweDQyfSwKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0ZDI4LCAweDR9LAotI2RlZmluZSBYU0VNX1BPUlQwX0VORCAgICAgICAgICAxMDE5Ci0jZGVmaW5lIFhTRU1fUE9SVDFfU1RBUlQgICAgICAgIDEwMTkKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDI4LCAweGF9LAotCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0NjgsIDB4Nn0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTNjMCwgMHhjfSwKLQl7T1BfU1csIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1M2MwICsgMHgzMCwgMHgyNzJiN30sCi0Je09QX1NXLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTYyMCwgMHg3NzJiOX0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTY0MCwgMHg3fSwKLQl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA0LCAweDB9LAotCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MGMsIDB4MX0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAyOCwgMHgyfSwKLQl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDM4LCAweDJ9LAotCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDgsIDB4Mn0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAxOCwgMHgyfSwKLQl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDQ0LCAweDB9LAotCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwODAsIDB4Y30sCi0Je09QX1NXLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA4MCArIDB4MzAsIDB4MjcyYzB9LAotCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYmMsIDB4MX0sCi0Je09QX1NXLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFkMCwgMHgyNzJjMn0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGMyMCwgMHg0Mn0sCi0Je09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGQzOCwgMHg0fSwKLSNkZWZpbmUgWFNFTV9QT1JUMV9FTkQgICAgICAgICAgMTAzOAotI2RlZmluZSBDRFVfQ09NTU9OX1NUQVJUICAgICAgICAxMDM4CisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNjAsIDB4ODAzMGZ9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4MDM1MX0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YTkwMDAwfSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YWMwMDAwfSwKKwl7T1BfV1JfNjRfRTEsIFhTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzY4LCAweDEzMDMxN30sCisJe09QX1dSXzY0X0UxSCwgWFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMzU5fSwKKwl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0sIDB4MzQ0ZTAwMDB9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0sIDB4MzQ2MjAwMDB9LAorCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzODg0MGQxNH0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzODI0MGQxOX0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzZTcxMWIzNX0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4M2U5NzFiMjJ9LAorCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MWRkMDJhZDJ9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDIxNTQyYWM4fSwKKwl7T1BfV1JfNjRfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDFjMGQwLCAweDQ3ZTYwMzE5fSwKKwl7T1BfV1JfNjRfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxYzhkMCwgMHg0NmU2MDM1Yn0sCisjZGVmaW5lIFhTRU1fQ09NTU9OX0VORCAgICAgICAgIDE2ODgKKyNkZWZpbmUgWFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMTY4OAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiYTAsIDB4MTB9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjMDAwLCAweGZjfSwKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYzIwLCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRhOCwgMHgxMH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjUyOCwgMHgxY30sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQ1MCwgMHg2fSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjYwOCwgMHgxY30sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM3OCwgMHhmY30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI2ZTgsIDB4MWN9LAorCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiNTgsIDB4MH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI3YzgsIDB4MWN9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkMTAsIDB4MTAwMzFifSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAwMCwgMHgyOH0sCisJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCwgMHgwfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTE0MCwgMHhjfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA4LCAweDF9LAorCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDF9LAorCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjAsIDB4Mn0sCisJe09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAzMCwgMHgyfSwKKwl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDJ9LAorCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMTAsIDB4Mn0sCisJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0MCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIwOCwgMHgxfSwKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ4LCAweGV9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWM4LCAweDIwMzVkfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MGI4LCAweDF9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjEwLCAweDQyfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWM4LCAweDIwMzJifSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmQyMCwgMHg0fSwKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjEwLCAweDQyfSwKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0ZDIwLCAweDR9LAorI2RlZmluZSBYU0VNX1BPUlQwX0VORCAgICAgICAgICAxNzIwCisjZGVmaW5lIFhTRU1fUE9SVDFfU1RBUlQgICAgICAgIDE3MjAKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYmUwLCAweDEwfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzNmMCwgMHhmY30sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2M5MCwgMHgxY30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0ZTgsIDB4MTB9LAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MjgsIDB4YX0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1OTgsIDB4MWN9LAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0NjgsIDB4Nn0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI2NzgsIDB4MWN9LAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM3NjgsIDB4ZmN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNzU4LCAweDFjfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjVjLCAweDB9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODM4LCAweDFjfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDUwLCAweDEwMDMyZH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGEwYTAsIDB4Mjh9LAorCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDQsIDB4MH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGExNzAsIDB4Y30sCisJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwYywgMHgxfSwKKwl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwNCwgMHgxfSwKKwl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDI4LCAweDJ9LAorCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMzgsIDB4Mn0sCisJe09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwOCwgMHgyfSwKKwl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDE4LCAweDJ9LAorCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNDQsIDB4MH0sCisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyMGMsIDB4MX0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHhlfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFkMCwgMHgyMDM1Zn0sCisJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiYywgMHgxfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmMxOCwgMHg0Mn0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFkMCwgMHgyMDMzZH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZkMzAsIDB4NH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGMxOCwgMHg0Mn0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGQzMCwgMHg0fSwKKyNkZWZpbmUgWFNFTV9QT1JUMV9FTkQgICAgICAgICAgMTc1MgorI2RlZmluZSBYU0VNX0ZVTkMwX1NUQVJUICAgICAgICAxNzUyCisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZTAsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4YjgsIDB4MTAwMzYxfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0OCwgMHhlfSwKKyNkZWZpbmUgWFNFTV9GVU5DMF9FTkQgICAgICAgICAgMTc1NQorI2RlZmluZSBYU0VNX0ZVTkMxX1NUQVJUICAgICAgICAxNzU1CisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZTQsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4ZjgsIDB4MTAwMzcxfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHhlfSwKKyNkZWZpbmUgWFNFTV9GVU5DMV9FTkQgICAgICAgICAgMTc1OAorI2RlZmluZSBYU0VNX0ZVTkMyX1NUQVJUICAgICAgICAxNzU4CisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZTgsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MzgsIDB4MTAwMzgxfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiOCwgMHhlfSwKKyNkZWZpbmUgWFNFTV9GVU5DMl9FTkQgICAgICAgICAgMTc2MQorI2RlZmluZSBYU0VNX0ZVTkMzX1NUQVJUICAgICAgICAxNzYxCisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZWMsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5NzgsIDB4MTAwMzkxfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBmMCwgMHhlfSwKKyNkZWZpbmUgWFNFTV9GVU5DM19FTkQgICAgICAgICAgMTc2NAorI2RlZmluZSBYU0VNX0ZVTkM0X1NUQVJUICAgICAgICAxNzY0CisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZjAsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5YjgsIDB4MTAwM2ExfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTEyOCwgMHhlfSwKKyNkZWZpbmUgWFNFTV9GVU5DNF9FTkQgICAgICAgICAgMTc2NworI2RlZmluZSBYU0VNX0ZVTkM1X1NUQVJUICAgICAgICAxNzY3CisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZjQsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5ZjgsIDB4MTAwM2IxfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE2MCwgMHhlfSwKKyNkZWZpbmUgWFNFTV9GVU5DNV9FTkQgICAgICAgICAgMTc3MAorI2RlZmluZSBYU0VNX0ZVTkM2X1NUQVJUICAgICAgICAxNzcwCisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZjgsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzgsIDB4MTAwM2MxfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE5OCwgMHhlfSwKKyNkZWZpbmUgWFNFTV9GVU5DNl9FTkQgICAgICAgICAgMTc3MworI2RlZmluZSBYU0VNX0ZVTkM3X1NUQVJUICAgICAgICAxNzczCisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZmMsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNzgsIDB4MTAwM2QxfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFkMCwgMHhlfSwKKyNkZWZpbmUgWFNFTV9GVU5DN19FTkQgICAgICAgICAgMTc3NgorI2RlZmluZSBDRFVfQ09NTU9OX1NUQVJUICAgICAgICAxNzc2CiAJe09QX1dSLCBDRFVfUkVHX0NEVV9DT05UUk9MMCwgMHgxfSwKKwl7T1BfV1JfRTFILCBDRFVfUkVHX01GX01PREUsIDB4MX0sCiAJe09QX1dSLCBDRFVfUkVHX0NEVV9DSEtfTUFTSzAsIDB4M2QwMDB9LAogCXtPUF9XUiwgQ0RVX1JFR19DRFVfQ0hLX01BU0sxLCAweDNkfSwKLQl7T1BfV0IsIENEVV9SRUdfTDFUVCwgMHgyMDA3MmM0fSwKLQl7T1BfV0IsIENEVV9SRUdfTUFUVCwgMHgyMDc0YzR9LAotCXtPUF9aUiwgQ0RVX1JFR19NQVRUICsgMHg4MCwgMHgyMH0sCi0jZGVmaW5lIENEVV9DT01NT05fRU5EICAgICAgICAgIDEwNDQKLSNkZWZpbmUgRE1BRV9DT01NT05fU1RBUlQgICAgICAgMTA0NAorCXtPUF9XQl9FMSwgQ0RVX1JFR19MMVRULCAweDIwMDAzM2Z9LAorCXtPUF9XQl9FMUgsIENEVV9SRUdfTDFUVCwgMHgyMDAwM2UxfSwKKwl7T1BfV0JfRTEsIENEVV9SRUdfTUFUVCwgMHgyMDA1M2Z9LAorCXtPUF9XQl9FMUgsIENEVV9SRUdfTUFUVCwgMHgyODA1ZTF9LAorCXtPUF9aUl9FMSwgQ0RVX1JFR19NQVRUICsgMHg4MCwgMHgyfSwKKwl7T1BfV0JfRTEsIENEVV9SRUdfTUFUVCArIDB4ODgsIDB4NjA1NWZ9LAorCXtPUF9aUiwgQ0RVX1JFR19NQVRUICsgMHhhMCwgMHgxOH0sCisjZGVmaW5lIENEVV9DT01NT05fRU5EICAgICAgICAgIDE3ODcKKyNkZWZpbmUgRE1BRV9DT01NT05fU1RBUlQgICAgICAgMTc4NworCXtPUF9aUiwgRE1BRV9SRUdfQ01EX01FTSwgMHhlMH0sCiAJe09QX1dSLCBETUFFX1JFR19DUkMxNkNfSU5JVCwgMHgwfSwKIAl7T1BfV1IsIERNQUVfUkVHX0NSQzE2VDEwX0lOSVQsIDB4MX0sCi0Je09QX1dSLCBETUFFX1JFR19QWFBfUkVRX0lOSVRfQ1JELCAweDJ9LAorCXtPUF9XUl9FMSwgRE1BRV9SRUdfUFhQX1JFUV9JTklUX0NSRCwgMHgxfSwKKwl7T1BfV1JfRTFILCBETUFFX1JFR19QWFBfUkVRX0lOSVRfQ1JELCAweDJ9LAogCXtPUF9XUiwgRE1BRV9SRUdfUENJX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBETUFFX1JFR19HUkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgRE1BRV9DT01NT05fRU5EICAgICAgICAgMTA0OQotI2RlZmluZSBQWFBfQ09NTU9OX1NUQVJUICAgICAgICAxMDQ5Ci0Je09QX1NJLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDU3NGU0fSwKLQl7T1BfU0ksIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MjAsIDB4NTc0ZTl9LAotCXtPUF9TSSwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQsIDB4NTc0ZWV9LAotI2RlZmluZSBQWFBfQ09NTU9OX0VORCAgICAgICAgICAxMDUyCi0jZGVmaW5lIENGQ19DT01NT05fU1RBUlQgICAgICAgIDEwNTIKKyNkZWZpbmUgRE1BRV9DT01NT05fRU5EICAgICAgICAgMTc5NAorI2RlZmluZSBQWFBfQ09NTU9OX1NUQVJUICAgICAgICAxNzk0CisJe09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNTY1fSwKKwl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNjA5fSwKKwl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MjAsIDB4NTA1NmF9LAorCXtPUF9XQl9FMUgsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNjBlfSwKKwl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNTZmfSwKKyNkZWZpbmUgUFhQX0NPTU1PTl9FTkQgICAgICAgICAgMTc5OQorI2RlZmluZSBDRkNfQ09NTU9OX1NUQVJUICAgICAgICAxNzk5CisJe09QX1pSX0UxSCwgQ0ZDX1JFR19MSU5LX0xJU1QsIDB4MTAwfSwKIAl7T1BfV1IsIENGQ19SRUdfQ09OVFJPTDAsIDB4MTB9LAogCXtPUF9XUiwgQ0ZDX1JFR19ESVNBQkxFX09OX0VSUk9SLCAweDNmZmZ9LAogCXtPUF9XUiwgQ0ZDX1JFR19MQ1JFUV9XRUlHSFRTLCAweDg0OTI0YX0sCi0jZGVmaW5lIENGQ19DT01NT05fRU5EICAgICAgICAgIDEwNTUKLSNkZWZpbmUgSENfQ09NTU9OX1NUQVJUICAgICAgICAgMTA1NQotCXtPUF9aUiwgSENfUkVHX1VTVE9STV9BRERSX0ZPUl9DT0FMRVNDRSwgMHg0fSwKLSNkZWZpbmUgSENfQ09NTU9OX0VORCAgICAgICAgICAgMTA1NgotI2RlZmluZSBIQ19QT1JUMF9TVEFSVCAgICAgICAgICAxMDU2Ci0Je09QX1dSLCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCi0Je09QX1pSLCBIQ19SRUdfVUNfUkFNX0FERFJfMCwgMHgyfSwKLQl7T1BfV1IsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCi0Je09QX1dSLCBIQ19SRUdfTEVBRElOR19FREdFXzAsIDB4ZmZmZn0sCi0Je09QX1dSLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8wLCAweGZmZmZ9LAotCXtPUF9XUiwgSENfUkVHX0FHR19JTlRfMCwgMHgwfSwKLQl7T1BfV1IsIEhDX1JFR19BVFROX0lEWCwgMHgwfSwKLQl7T1BfWlIsIEhDX1JFR19BVFROX0JJVCwgMHgyfSwKLQl7T1BfV1IsIEhDX1JFR19WUUlEXzAsIDB4MmI1fSwKLQl7T1BfV1IsIEhDX1JFR19QQ0lfQ09ORklHXzAsIDB4MH0sCi0Je09QX1pSLCBIQ19SRUdfUDBfUFJPRF9DT05TLCAweDRhfSwKLQl7T1BfWlIsIEhDX1JFR19QQkFfQ09NTUFORCwgMHgyfSwKLQl7T1BfV1IsIEhDX1JFR19JTlRfTUFTSywgMHgxZmZmZn0sCi0Je09QX1dSLCBIQ19SRUdfQ09ORklHXzAsIDB4MWE4Mn0sCi0Je09QX1pSLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTLCAweDI0fSwKLQl7T1BfWlIsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCi0Je09QX1pSLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAotCXtPUF9aUiwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfUE9SVDBfRU5EICAgICAgICAgICAgMTA3NAotI2RlZmluZSBIQ19QT1JUMV9TVEFSVCAgICAgICAgICAxMDc0Ci0Je09QX1dSLCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCi0Je09QX1pSLCBIQ19SRUdfVUNfUkFNX0FERFJfMSwgMHgyfSwKLQl7T1BfV1IsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCi0Je09QX1dSLCBIQ19SRUdfTEVBRElOR19FREdFXzEsIDB4ZmZmZn0sCi0Je09QX1dSLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8xLCAweGZmZmZ9LAotCXtPUF9XUiwgSENfUkVHX0FHR19JTlRfMSwgMHgwfSwKLQl7T1BfV1IsIEhDX1JFR19BVFROX0lEWCArIDB4NCwgMHgwfSwKLQl7T1BfWlIsIEhDX1JFR19BVFROX0JJVCArIDB4OCwgMHgyfSwKLQl7T1BfV1IsIEhDX1JFR19WUUlEXzEsIDB4MmI1fSwKLQl7T1BfV1IsIEhDX1JFR19QQ0lfQ09ORklHXzEsIDB4MH0sCi0Je09QX1pSLCBIQ19SRUdfUDFfUFJPRF9DT05TLCAweDRhfSwKLQl7T1BfWlIsIEhDX1JFR19QQkFfQ09NTUFORCArIDB4OCwgMHgyfSwKLQl7T1BfV1IsIEhDX1JFR19JTlRfTUFTSyArIDB4NCwgMHgxZmZmZn0sCi0Je09QX1dSLCBIQ19SRUdfQ09ORklHXzEsIDB4MWE4Mn0sCi0Je09QX1pSLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg5MCwgMHgyNH0sCi0Je09QX1pSLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAotCXtPUF9aUiwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKLQl7T1BfWlIsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX1BPUlQxX0VORCAgICAgICAgICAgIDEwOTIKLSNkZWZpbmUgUFhQMl9DT01NT05fU1RBUlQgICAgICAgMTA5MgotCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0NPTlRST0wwLCAweGUzODMyNH0sCisjZGVmaW5lIENGQ19DT01NT05fRU5EICAgICAgICAgIDE4MDMKKyNkZWZpbmUgSENfQ09NTU9OX1NUQVJUICAgICAgICAgMTgwMworCXtPUF9aUl9FMSwgSENfUkVHX1VTVE9STV9BRERSX0ZPUl9DT0FMRVNDRSwgMHg0fSwKKyNkZWZpbmUgSENfQ09NTU9OX0VORCAgICAgICAgICAgMTgwNAorI2RlZmluZSBIQ19QT1JUMF9TVEFSVCAgICAgICAgICAxODA0CisJe09QX1dSX0UxLCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCisJe09QX1pSX0UxLCBIQ19SRUdfVUNfUkFNX0FERFJfMCwgMHgyfSwKKwl7T1BfV1JfRTEsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCisJe09QX1dSX0UxLCBIQ19SRUdfTEVBRElOR19FREdFXzAsIDB4ZmZmZn0sCisJe09QX1dSX0UxLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8wLCAweGZmZmZ9LAorCXtPUF9XUl9FMSwgSENfUkVHX0FHR19JTlRfMCwgMHgwfSwKKwl7T1BfV1JfRTEsIEhDX1JFR19BVFROX0lEWCwgMHgwfSwKKwl7T1BfWlJfRTEsIEhDX1JFR19BVFROX0JJVCwgMHgyfSwKKwl7T1BfV1JfRTEsIEhDX1JFR19WUUlEXzAsIDB4MmI1fSwKKwl7T1BfV1JfRTEsIEhDX1JFR19QQ0lfQ09ORklHXzAsIDB4MH0sCisJe09QX1pSX0UxLCBIQ19SRUdfUDBfUFJPRF9DT05TLCAweDRhfSwKKwl7T1BfV1JfRTEsIEhDX1JFR19JTlRfTUFTSywgMHgxZmZmZn0sCisJe09QX1pSX0UxLCBIQ19SRUdfUEJBX0NPTU1BTkQsIDB4Mn0sCisJe09QX1dSX0UxLCBIQ19SRUdfQ09ORklHXzAsIDB4MWE4MH0sCisJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTLCAweDI0fSwKKwl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCisJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAorCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKKyNkZWZpbmUgSENfUE9SVDBfRU5EICAgICAgICAgICAgMTgyMgorI2RlZmluZSBIQ19QT1JUMV9TVEFSVCAgICAgICAgICAxODIyCisJe09QX1dSX0UxLCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCisJe09QX1pSX0UxLCBIQ19SRUdfVUNfUkFNX0FERFJfMSwgMHgyfSwKKwl7T1BfV1JfRTEsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCisJe09QX1dSX0UxLCBIQ19SRUdfTEVBRElOR19FREdFXzEsIDB4ZmZmZn0sCisJe09QX1dSX0UxLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8xLCAweGZmZmZ9LAorCXtPUF9XUl9FMSwgSENfUkVHX0FHR19JTlRfMSwgMHgwfSwKKwl7T1BfV1JfRTEsIEhDX1JFR19BVFROX0lEWCArIDB4NCwgMHgwfSwKKwl7T1BfWlJfRTEsIEhDX1JFR19BVFROX0JJVCArIDB4OCwgMHgyfSwKKwl7T1BfV1JfRTEsIEhDX1JFR19WUUlEXzEsIDB4MmI1fSwKKwl7T1BfV1JfRTEsIEhDX1JFR19QQ0lfQ09ORklHXzEsIDB4MH0sCisJe09QX1pSX0UxLCBIQ19SRUdfUDFfUFJPRF9DT05TLCAweDRhfSwKKwl7T1BfV1JfRTEsIEhDX1JFR19JTlRfTUFTSyArIDB4NCwgMHgxZmZmZn0sCisJe09QX1pSX0UxLCBIQ19SRUdfUEJBX0NPTU1BTkQgKyAweDgsIDB4Mn0sCisJe09QX1dSX0UxLCBIQ19SRUdfQ09ORklHXzEsIDB4MWE4MH0sCisJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg5MCwgMHgyNH0sCisJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAorCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKKwl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCisjZGVmaW5lIEhDX1BPUlQxX0VORCAgICAgICAgICAgIDE4NDAKKyNkZWZpbmUgSENfRlVOQzBfU1RBUlQgICAgICAgICAgMTg0MAorCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4MH0sCisJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9JRFgsIDB4MH0sCisJe09QX1pSX0UxSCwgSENfUkVHX0FUVE5fQklULCAweDJ9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19WUUlEXzAsIDB4MmI1fSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfUENJX0NPTkZJR18wLCAweDB9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19QMF9QUk9EX0NPTlMsIDB4NGF9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19JTlRfTUFTSywgMHgxZmZmZn0sCisJe09QX1pSX0UxSCwgSENfUkVHX1BCQV9DT01NQU5ELCAweDJ9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxYTgwfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTLCAweDI0fSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgxMjAsIDB4NGF9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDM3MCwgMHg0YX0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKKyNkZWZpbmUgSENfRlVOQzBfRU5EICAgICAgICAgICAgMTg1NQorI2RlZmluZSBIQ19GVU5DMV9TVEFSVCAgICAgICAgICAxODU1CisJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMSwgMHgxfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX0lEWCArIDB4NCwgMHgwfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfQVRUTl9CSVQgKyAweDgsIDB4Mn0sCisJe09QX1dSX0UxSCwgSENfUkVHX1ZRSURfMSwgMHgyYjV9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19QQ0lfQ09ORklHXzEsIDB4MH0sCisJe09QX1pSX0UxSCwgSENfUkVHX1AxX1BST0RfQ09OUywgMHg0YX0sCisJe09QX1dSX0UxSCwgSENfUkVHX0lOVF9NQVNLICsgMHg0LCAweDFmZmZmfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfUEJBX0NPTU1BTkQgKyAweDgsIDB4Mn0sCisJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDFhODB9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDkwLCAweDI0fSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDQ5OCwgMHg0YX0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKKyNkZWZpbmUgSENfRlVOQzFfRU5EICAgICAgICAgICAgMTg3MAorI2RlZmluZSBIQ19GVU5DMl9TVEFSVCAgICAgICAgICAxODcwCisJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX0lEWCwgMHgwfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfQVRUTl9CSVQsIDB4Mn0sCisJe09QX1dSX0UxSCwgSENfUkVHX1ZRSURfMCwgMHgyYjV9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19QQ0lfQ09ORklHXzAsIDB4MH0sCisJe09QX1pSX0UxSCwgSENfUkVHX1AwX1BST0RfQ09OUywgMHg0YX0sCisJe09QX1dSX0UxSCwgSENfUkVHX0lOVF9NQVNLLCAweDFmZmZmfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfUEJBX0NPTU1BTkQsIDB4Mn0sCisJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18wLCAweDFhODB9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMsIDB4MjR9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MzcwLCAweDRhfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg1YzAsIDB4NGF9LAorI2RlZmluZSBIQ19GVU5DMl9FTkQgICAgICAgICAgICAxODg1CisjZGVmaW5lIEhDX0ZVTkMzX1NUQVJUICAgICAgICAgIDE4ODUKKwl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCisJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AxLCAweDN9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCisJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fSURYICsgMHg0LCAweDB9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19BVFROX0JJVCArIDB4OCwgMHgyfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfVlFJRF8xLCAweDJiNX0sCisJe09QX1dSX0UxSCwgSENfUkVHX1BDSV9DT05GSUdfMSwgMHgwfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfUDFfUFJPRF9DT05TLCAweDRhfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfSU5UX01BU0sgKyAweDQsIDB4MWZmZmZ9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19QQkFfQ09NTUFORCArIDB4OCwgMHgyfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MWE4MH0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4OTAsIDB4MjR9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg2ZTgsIDB4NGF9LAorI2RlZmluZSBIQ19GVU5DM19FTkQgICAgICAgICAgICAxOTAwCisjZGVmaW5lIEhDX0ZVTkM0X1NUQVJUICAgICAgICAgIDE5MDAKKwl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCisJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AwLCAweDR9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCisJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fSURYLCAweDB9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19BVFROX0JJVCwgMHgyfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfVlFJRF8wLCAweDJiNX0sCisJe09QX1dSX0UxSCwgSENfUkVHX1BDSV9DT05GSUdfMCwgMHgwfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfUDBfUFJPRF9DT05TLCAweDRhfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfSU5UX01BU0ssIDB4MWZmZmZ9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19QQkFfQ09NTUFORCwgMHgyfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzAsIDB4MWE4MH0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUywgMHgyNH0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCisjZGVmaW5lIEhDX0ZVTkM0X0VORCAgICAgICAgICAgIDE5MTUKKyNkZWZpbmUgSENfRlVOQzVfU1RBUlQgICAgICAgICAgMTkxNQorCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMSwgMHgxMDgwfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDEsIDB4NX0sCisJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AxLCAweDEwfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9JRFggKyAweDQsIDB4MH0sCisJe09QX1pSX0UxSCwgSENfUkVHX0FUVE5fQklUICsgMHg4LCAweDJ9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19WUUlEXzEsIDB4MmI1fSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfUENJX0NPTkZJR18xLCAweDB9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19QMV9QUk9EX0NPTlMsIDB4NGF9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19JTlRfTUFTSyArIDB4NCwgMHgxZmZmZn0sCisJe09QX1pSX0UxSCwgSENfUkVHX1BCQV9DT01NQU5EICsgMHg4LCAweDJ9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMSwgMHgxYTgwfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg5MCwgMHgyNH0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCisjZGVmaW5lIEhDX0ZVTkM1X0VORCAgICAgICAgICAgIDE5MzAKKyNkZWZpbmUgSENfRlVOQzZfU1RBUlQgICAgICAgICAgMTkzMAorCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4Nn0sCisJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9JRFgsIDB4MH0sCisJe09QX1pSX0UxSCwgSENfUkVHX0FUVE5fQklULCAweDJ9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19WUUlEXzAsIDB4MmI1fSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfUENJX0NPTkZJR18wLCAweDB9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19QMF9QUk9EX0NPTlMsIDB4NGF9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19JTlRfTUFTSywgMHgxZmZmZn0sCisJe09QX1pSX0UxSCwgSENfUkVHX1BCQV9DT01NQU5ELCAweDJ9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxYTgwfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTLCAweDI0fSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgxMjAsIDB4NGF9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDM3MCwgMHg0YX0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKKyNkZWZpbmUgSENfRlVOQzZfRU5EICAgICAgICAgICAgMTk0NQorI2RlZmluZSBIQ19GVU5DN19TVEFSVCAgICAgICAgICAxOTQ1CisJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMSwgMHg3fSwKKwl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX0lEWCArIDB4NCwgMHgwfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfQVRUTl9CSVQgKyAweDgsIDB4Mn0sCisJe09QX1dSX0UxSCwgSENfUkVHX1ZRSURfMSwgMHgyYjV9LAorCXtPUF9XUl9FMUgsIEhDX1JFR19QQ0lfQ09ORklHXzEsIDB4MH0sCisJe09QX1pSX0UxSCwgSENfUkVHX1AxX1BST0RfQ09OUywgMHg0YX0sCisJe09QX1dSX0UxSCwgSENfUkVHX0lOVF9NQVNLICsgMHg0LCAweDFmZmZmfSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfUEJBX0NPTU1BTkQgKyAweDgsIDB4Mn0sCisJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDFhODB9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDkwLCAweDI0fSwKKwl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAorCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDQ5OCwgMHg0YX0sCisJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKKyNkZWZpbmUgSENfRlVOQzdfRU5EICAgICAgICAgICAgMTk2MAorI2RlZmluZSBQWFAyX0NPTU1PTl9TVEFSVCAgICAgICAxOTYwCisJe09QX1dSX0UxLCBQWFAyX1JFR19QR0xfQ09OVFJPTDAsIDB4ZTM4MzQwfSwKKwl7T1BfV1JfRTFILCBQWFAyX1JFR19SUV9EUkFNX0FMSUdOLCAweDF9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0NPTlRST0wxLCAweDNjMTB9LAorCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1JRX0VMVF9ESVNBQkxFLCAweDF9LAorCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1dSX1JFVl9NT0RFLCAweDB9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9UU0RNXzAsIDB4ZmZmZmZmZmZ9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9UU0RNXzEsIDB4ZmZmZmZmZmZ9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9UU0RNXzIsIDB4ZmZmZmZmZmZ9LApAQCAtMTIzMSw2ICsyMjY0LDcgQEAKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV81LCAweGZmZmZmZmZmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV82LCAweGZmZmZmZmZmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV83LCAweGZmZmZmZmZmfSwKKwl7T1BfV1JfRTFILCBQWFAyX1JFR19QR0xfSU5UX1hTRE1fMSwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1hTRE1fMiwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1hTRE1fMywgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1hTRE1fNCwgMHhmZmZmZmZmZn0sCkBAIC0xMjQ1LDkgKzIyNzksMTEgQEAKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfQ1NETV81LCAweGZmZmZmZmZmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfQ1NETV82LCAweGZmZmZmZmZmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfQ1NETV83LCAweGZmZmZmZmZmfSwKLQl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfWFNETV8wLCAweGZmZmY1MzMwfSwKLQl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfWFNETV8xLCAweGZmZmY1MzQ4fSwKLQl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8wLCAweGYwMDAzMDAwfSwKKwl7T1BfV1JfRTEsIFBYUDJfUkVHX1BHTF9JTlRfWFNETV8wLCAweGZmZmYzMzMwfSwKKwl7T1BfV1JfRTFILCBQWFAyX1JFR19QR0xfSU5UX1hTRE1fMCwgMHhmZjgwMjAwMH0sCisJe09QX1dSX0UxLCBQWFAyX1JFR19QR0xfSU5UX1hTRE1fMSwgMHhmZmZmMzM0MH0sCisJe09QX1dSX0UxSCwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzAsIDB4ZjAwMDUwMDB9LAorCXtPUF9XUl9FMSwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzAsIDB4ZjAwMDMwMDB9LAogCXtPUF9XUiwgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlE2LCAweDh9LAogCXtPUF9XUiwgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlE5LCAweDh9LAogCXtPUF9XUiwgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlExMCwgMHg4fSwKQEAgLTEyNTcsNiArMjI5Myw3IEBACiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTE5LCAweDR9LAogCXtPUF9XUiwgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlEyMiwgMHgwfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1JEX1NUQVJUX0lOSVQsIDB4MX0sCisJe09QX1dSLCBQWFAyX1JFR19XUl9ETUFFX1RILCAweDNmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDAsIDB4NDB9LAogCXtPUF9XUiwgUFhQMl9SRUdfUFNXUlFfQldfQUREMSwgMHgxODA4fSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDIsIDB4ODAzfSwKQEAgLTEzMjEsNTggKzIzNTgsMzM5IEBACiAJe09QX1dSLCBQWFAyX1JFR19QU1dSUV9CV19MMiwgMHgxMDA0fSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BTV1JRX0JXX1JELCAweDEwNjQ0MH0sCiAJe09QX1dSLCBQWFAyX1JFR19QU1dSUV9CV19XUiwgMHgxMDY0NDB9LAorCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1JRX0lMVF9NT0RFLCAweDF9LAogCXtPUF9XUiwgUFhQMl9SRUdfUlFfUkJDX0RPTkUsIDB4MX0sCi0jZGVmaW5lIFBYUDJfQ09NTU9OX0VORCAgICAgICAgIDEyMDAKLSNkZWZpbmUgTUlTQ19BRVVfQ09NTU9OX1NUQVJUICAgMTIwMAorCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1BHTF9DT05UUk9MMCwgMHhlMzgzNDB9LAorI2RlZmluZSBQWFAyX0NPTU1PTl9FTkQgICAgICAgICAyMDc3CisjZGVmaW5lIE1JU0NfQUVVX0NPTU1PTl9TVEFSVCAgIDIwNzcKIAl7T1BfWlIsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMCwgMHgxNn0sCi0jZGVmaW5lIE1JU0NfQUVVX0NPTU1PTl9FTkQgICAgIDEyMDEKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDBfU1RBUlQgICAgMTIwMQotCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wLCAweGJmNWMwMDAwfSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMF9PVVRfMCwgMHhmZmY1MWZlZn0sCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfTklHXzAsIDB4NTU1NDAwMDB9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX05JR18wLCAweDU1NTU1NTU1fSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFM19OSUdfMCwgMHg1NTU1fSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9OSUdfMCwgMHhmMDAwMDAwMH0sCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfUFhQXzAsIDB4NTU1NDAwMDB9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX1BYUF8wLCAweDU1NTU1NTU1fSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFM19QWFBfMCwgMHg1NTU1fSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9QWFBfMCwgMHhmMDAwMDAwMH0sCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfTklHXzEsIDB4NTU1NDAwMDB9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX05JR18xLCAweDU1NTU1NTU1fSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFM19OSUdfMSwgMHg1NTU1fSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9OSUdfMSwgMHhmMDAwMDAwMH0sCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfUFhQXzEsIDB4MH0sCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTJfUFhQXzEsIDB4MTAwMDB9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUzX1BYUF8xLCAweDUwMTR9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEU0X1BYUF8xLCAweDB9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9DTFJfTEFUQ0hfU0lHTkFMLCAweGMwMH0sCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfTUFTSywgMHgzfSwKKyNkZWZpbmUgTUlTQ19BRVVfQ09NTU9OX0VORCAgICAgMjA5NgorI2RlZmluZSBNSVNDX0FFVV9QT1JUMF9TVEFSVCAgICAyMDk2CisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzAsIDB4YmY1YzAwMDB9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCwgMHhmZjVjMDAwMH0sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMl9GVU5DXzBfT1VUXzAsIDB4ZmZmNTFmZWZ9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMF9PVVRfMCwgMHhmZmY1NWZmZn0sCiAJe09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFM19GVU5DXzBfT1VUXzAsIDB4ZmZmZn0sCi0Je09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzBfT1VUXzAsIDB4NTAwMDAzZTB9LAorCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18wX09VVF8wLCAweDUwMDAwM2UwfSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzBfT1VUXzAsIDB4ZjAwMDAzZTB9LAogCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8xLCAweDB9LAogCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTJfRlVOQ18wX09VVF8xLCAweGEwMDB9LAogCXtPUF9aUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTNfRlVOQ18wX09VVF8xLCAweDV9LAogCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18wX09VVF8yLCAweGZlMDAwMDB9LAotCXtPUF9aUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8zLCAweDE0fSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX05JR18wLCAweDU1NTQwMDAwfSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX05JR18wLCAweDU1NTU1NTU1fSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEUzX05JR18wLCAweDU1NTV9LAotCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfTklHXzAsIDB4MH0sCi0Je09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9QWFBfMCwgMHg1NTU0MDAwMH0sCi0Je09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFMl9QWFBfMCwgMHg1NTU1NTU1NX0sCi0Je09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFM19QWFBfMCwgMHg1NTU1fSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEU0X1BYUF8wLCAweDB9LAotCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18wLCAweDB9LAotCXtPUF9aUiwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzJfRlVOQ18wLCAweDN9LAotCXtPUF9XUiwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzAsIDB4N30sCi0jZGVmaW5lIE1JU0NfQUVVX1BPUlQwX0VORCAgICAgIDEyMjEKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfU1RBUlQgICAgMTIyMQotCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wLCAweGJmNWMwMDAwfSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMV9PVVRfMCwgMHhmZmY1MWZlZn0sCisJe09QX1pSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzMsIDB4MTR9LAorCXtPUF9aUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMywgMHg3fSwKKwl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX05JR18wLCAweDU1NTQwMDAwfSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzBfT1VUXzQsIDB4NDAwfSwKKwl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX05JR18wLCAweDU1NTU1NTU1fSwKKwl7T1BfWlJfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzUsIDB4M30sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFM19OSUdfMCwgMHg1NTU1fSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzBfT1VUXzUsIDB4MTAwMH0sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFNF9OSUdfMCwgMHgwfSwKKwl7T1BfWlJfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzYsIDB4M30sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9QWFBfMCwgMHg1NTU0MDAwMH0sCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18wX09VVF82LCAweDQwMDB9LAorCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTJfUFhQXzAsIDB4NTU1NTU1NTV9LAorCXtPUF9aUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfNywgMHgzfSwKKwl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUzX1BYUF8wLCAweDU1NTV9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEU0X0ZVTkNfMF9PVVRfNywgMHgxMDAwMH0sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFNF9QWFBfMCwgMHgwfSwKKwl7T1BfWlJfRTFILCBNSVNDX1JFR19BRVVfSU5WRVJURVJfMV9GVU5DXzAsIDB4NH0sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfSU5WRVJURVJfMV9GVU5DXzAsIDB4MH0sCisJe09QX1pSX0UxLCBNSVNDX1JFR19BRVVfSU5WRVJURVJfMl9GVU5DXzAsIDB4M30sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMCwgMHg3fSwKKyNkZWZpbmUgTUlTQ19BRVVfUE9SVDBfRU5EICAgICAgMjEyOAorI2RlZmluZSBNSVNDX0FFVV9QT1JUMV9TVEFSVCAgICAyMTI4CisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzAsIDB4YmY1YzAwMDB9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCwgMHhmZjVjMDAwMH0sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMl9GVU5DXzFfT1VUXzAsIDB4ZmZmNTFmZWZ9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMV9PVVRfMCwgMHhmZmY1NWZmZn0sCiAJe09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFM19GVU5DXzFfT1VUXzAsIDB4ZmZmZn0sCi0Je09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzFfT1VUXzAsIDB4NTAwMDAzZTB9LAorCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18xX09VVF8wLCAweDUwMDAwM2UwfSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzFfT1VUXzAsIDB4ZjAwMDAzZTB9LAogCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8xLCAweDB9LAogCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTJfRlVOQ18xX09VVF8xLCAweGEwMDB9LAogCXtPUF9aUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTNfRlVOQ18xX09VVF8xLCAweDV9LAogCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18xX09VVF8yLCAweGZlMDAwMDB9LAotCXtPUF9aUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8zLCAweDE0fSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX05JR18xLCAweDU1NTQwMDAwfSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX05JR18xLCAweDU1NTU1NTU1fSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEUzX05JR18xLCAweDU1NTV9LAotCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfTklHXzEsIDB4MH0sCi0Je09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9QWFBfMSwgMHg1NTU0MDAwMH0sCi0Je09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFMl9QWFBfMSwgMHg1NTU1NTU1NX0sCi0Je09QX1dSLCBNSVNDX1JFR19BRVVfRU5BQkxFM19QWFBfMSwgMHg1NTU1fSwKLQl7T1BfV1IsIE1JU0NfUkVHX0FFVV9FTkFCTEU0X1BYUF8xLCAweDB9LAotCXtPUF9XUiwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18xLCAweDB9LAotCXtPUF9aUiwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzJfRlVOQ18xLCAweDN9LAotCXtPUF9XUiwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEsIDB4N30KLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfRU5EICAgICAgMTI0MQorCXtPUF9aUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8zLCAweDE0fSwKKwl7T1BfWlJfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzMsIDB4N30sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9OSUdfMSwgMHg1NTU0MDAwMH0sCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18xX09VVF80LCAweDgwMH0sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMl9OSUdfMSwgMHg1NTU1NTU1NX0sCisJe09QX1pSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF81LCAweDN9LAorCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTNfTklHXzEsIDB4NTU1NX0sCisJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18xX09VVF81LCAweDIwMDB9LAorCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfTklHXzEsIDB4MH0sCisJe09QX1pSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF82LCAweDN9LAorCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfUFhQXzEsIDB4NTU1NDAwMDB9LAorCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEU0X0ZVTkNfMV9PVVRfNiwgMHg4MDAwfSwKKwl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX1BYUF8xLCAweDU1NTU1NTU1fSwKKwl7T1BfWlJfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzcsIDB4M30sCisJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFM19QWFBfMSwgMHg1NTU1fSwKKwl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzFfT1VUXzcsIDB4MjAwMDB9LAorCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfUFhQXzEsIDB4MH0sCisJe09QX1pSX0UxSCwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18xLCAweDR9LAorCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18xLCAweDB9LAorCXtPUF9aUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzJfRlVOQ18xLCAweDN9LAorCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEsIDB4N30sCisjZGVmaW5lIE1JU0NfQUVVX1BPUlQxX0VORCAgICAgIDIxNjAKKwogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBpbml0X2RhdGFbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgaW5pdF9kYXRhX2UxW10gPSB7CisJMHgwMDAxMDAwMCwgMHgwMDAyMDRjMCwgMHgwMDAzMDk4MCwgMHgwMDA0MGU0MCwgMHgwMDA1MTMwMCwgMHgwMDA2MTdjMCwKKwkweDAwMDcxYzgwLCAweDAwMDgyMTQwLCAweDAwMDkyNjAwLCAweDAwMGEyYWMwLCAweDAwMGIyZjgwLCAweDAwMGMzNDQwLAorCTB4MDAwZDM5MDAsIDB4MDAwZTNkYzAsIDB4MDAwZjQyODAsIDB4MDAxMDQ3NDAsIDB4MDAxMTRjMDAsIDB4MDAxMjUwYzAsCisJMHgwMDEzNTU4MCwgMHgwMDE0NWE0MCwgMHgwMDE1NWYwMCwgMHgwMDE2NjNjMCwgMHgwMDE3Njg4MCwgMHgwMDE4NmQ0MCwKKwkweDAwMTk3MjAwLCAweDAwMWE3NmMwLCAweDAwMWI3YjgwLCAweDAwMWM4MDQwLCAweDAwMWQ4NTAwLCAweDAwMWU4OWMwLAorCTB4MDAxZjhlODAsIDB4MDAyMDkzNDAsIDB4MDAwMDIwMDAsIDB4MDAwMDQwMDAsIDB4MDAwMDYwMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwYTAwMCwgMHgwMDAwYzAwMCwgMHgwMDAwZTAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMjAwMCwgMHgwMDAxNDAwMCwKKwkweDAwMDE2MDAwLCAweDAwMDE4MDAwLCAweDAwMDFhMDAwLCAweDAwMDFjMDAwLCAweDAwMDFlMDAwLCAweDAwMDIwMDAwLAorCTB4MDAwMjIwMDAsIDB4MDAwMjQwMDAsIDB4MDAwMjYwMDAsIDB4MDAwMjgwMDAsIDB4MDAwMmEwMDAsIDB4MDAwMmMwMDAsCisJMHgwMDAyZTAwMCwgMHgwMDAzMDAwMCwgMHgwMDAzMjAwMCwgMHgwMDAzNDAwMCwgMHgwMDAzNjAwMCwgMHgwMDAzODAwMCwKKwkweDAwMDNhMDAwLCAweDAwMDNjMDAwLCAweDAwMDNlMDAwLCAweDAwMDQwMDAwLCAweDAwMDQyMDAwLCAweDAwMDQ0MDAwLAorCTB4MDAwNDYwMDAsIDB4MDAwNDgwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGMwMDAsIDB4MDAwNGUwMDAsIDB4MDAwNTAwMDAsCisJMHgwMDA1MjAwMCwgMHgwMDA1NDAwMCwgMHgwMDA1NjAwMCwgMHgwMDA1ODAwMCwgMHgwMDA1YTAwMCwgMHgwMDA1YzAwMCwKKwkweDAwMDVlMDAwLCAweDAwMDYwMDAwLCAweDAwMDYyMDAwLCAweDAwMDY0MDAwLCAweDAwMDY2MDAwLCAweDAwMDY4MDAwLAorCTB4MDAwNmEwMDAsIDB4MDAwNmMwMDAsIDB4MDAwNmUwMDAsIDB4MDAwNzAwMDAsIDB4MDAwNzIwMDAsIDB4MDAwNzQwMDAsCisJMHgwMDA3NjAwMCwgMHgwMDA3ODAwMCwgMHgwMDA3YTAwMCwgMHgwMDA3YzAwMCwgMHgwMDA3ZTAwMCwgMHgwMDA4MDAwMCwKKwkweDAwMDgyMDAwLCAweDAwMDg0MDAwLCAweDAwMDg2MDAwLCAweDAwMDg4MDAwLCAweDAwMDhhMDAwLCAweDAwMDhjMDAwLAorCTB4MDAwOGUwMDAsIDB4MDAwOTAwMDAsIDB4MDAwOTIwMDAsIDB4MDAwOTQwMDAsIDB4MDAwOTYwMDAsIDB4MDAwOTgwMDAsCisJMHgwMDA5YTAwMCwgMHgwMDA5YzAwMCwgMHgwMDA5ZTAwMCwgMHgwMDBhMDAwMCwgMHgwMDBhMjAwMCwgMHgwMDBhNDAwMCwKKwkweDAwMGE2MDAwLCAweDAwMGE4MDAwLCAweDAwMGFhMDAwLCAweDAwMGFjMDAwLCAweDAwMGFlMDAwLCAweDAwMGIwMDAwLAorCTB4MDAwYjIwMDAsIDB4MDAwYjQwMDAsIDB4MDAwYjYwMDAsIDB4MDAwYjgwMDAsIDB4MDAwYmEwMDAsIDB4MDAwYmMwMDAsCisJMHgwMDBiZTAwMCwgMHgwMDBjMDAwMCwgMHgwMDBjMjAwMCwgMHgwMDBjNDAwMCwgMHgwMDBjNjAwMCwgMHgwMDBjODAwMCwKKwkweDAwMGNhMDAwLCAweDAwMGNjMDAwLCAweDAwMGNlMDAwLCAweDAwMGQwMDAwLCAweDAwMGQyMDAwLCAweDAwMGQ0MDAwLAorCTB4MDAwZDYwMDAsIDB4MDAwZDgwMDAsIDB4MDAwZGEwMDAsIDB4MDAwZGMwMDAsIDB4MDAwZGUwMDAsIDB4MDAwZTAwMDAsCisJMHgwMDBlMjAwMCwgMHgwMDBlNDAwMCwgMHgwMDBlNjAwMCwgMHgwMDBlODAwMCwgMHgwMDBlYTAwMCwgMHgwMDBlYzAwMCwKKwkweDAwMGVlMDAwLCAweDAwMGYwMDAwLCAweDAwMGYyMDAwLCAweDAwMGY0MDAwLCAweDAwMGY2MDAwLCAweDAwMGY4MDAwLAorCTB4MDAwZmEwMDAsIDB4MDAwZmMwMDAsIDB4MDAwZmUwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDIwMDAsIDB4MDAxMDQwMDAsCisJMHgwMDEwNjAwMCwgMHgwMDEwODAwMCwgMHgwMDEwYTAwMCwgMHgwMDEwYzAwMCwgMHgwMDEwZTAwMCwgMHgwMDExMDAwMCwKKwkweDAwMTEyMDAwLCAweDAwMTE0MDAwLCAweDAwMTE2MDAwLCAweDAwMTE4MDAwLCAweDAwMTFhMDAwLCAweDAwMTFjMDAwLAorCTB4MDAxMWUwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjIwMDAsIDB4MDAxMjQwMDAsIDB4MDAxMjYwMDAsIDB4MDAxMjgwMDAsCisJMHgwMDEyYTAwMCwgMHgwMDEyYzAwMCwgMHgwMDEyZTAwMCwgMHgwMDEzMDAwMCwgMHgwMDEzMjAwMCwgMHgwMDEzNDAwMCwKKwkweDAwMTM2MDAwLCAweDAwMTM4MDAwLCAweDAwMTNhMDAwLCAweDAwMTNjMDAwLCAweDAwMTNlMDAwLCAweDAwMTQwMDAwLAorCTB4MDAxNDIwMDAsIDB4MDAxNDQwMDAsIDB4MDAxNDYwMDAsIDB4MDAxNDgwMDAsIDB4MDAxNGEwMDAsIDB4MDAxNGMwMDAsCisJMHgwMDE0ZTAwMCwgMHgwMDE1MDAwMCwgMHgwMDE1MjAwMCwgMHgwMDE1NDAwMCwgMHgwMDE1NjAwMCwgMHgwMDE1ODAwMCwKKwkweDAwMTVhMDAwLCAweDAwMTVjMDAwLCAweDAwMTVlMDAwLCAweDAwMTYwMDAwLCAweDAwMTYyMDAwLCAweDAwMTY0MDAwLAorCTB4MDAxNjYwMDAsIDB4MDAxNjgwMDAsIDB4MDAxNmEwMDAsIDB4MDAxNmMwMDAsIDB4MDAxNmUwMDAsIDB4MDAxNzAwMDAsCisJMHgwMDE3MjAwMCwgMHgwMDE3NDAwMCwgMHgwMDE3NjAwMCwgMHgwMDE3ODAwMCwgMHgwMDE3YTAwMCwgMHgwMDE3YzAwMCwKKwkweDAwMTdlMDAwLCAweDAwMTgwMDAwLCAweDAwMTgyMDAwLCAweDAwMTg0MDAwLCAweDAwMTg2MDAwLCAweDAwMTg4MDAwLAorCTB4MDAxOGEwMDAsIDB4MDAxOGMwMDAsIDB4MDAxOGUwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTIwMDAsIDB4MDAxOTQwMDAsCisJMHgwMDE5NjAwMCwgMHgwMDE5ODAwMCwgMHgwMDE5YTAwMCwgMHgwMDE5YzAwMCwgMHgwMDE5ZTAwMCwgMHgwMDFhMDAwMCwKKwkweDAwMWEyMDAwLCAweDAwMWE0MDAwLCAweDAwMWE2MDAwLCAweDAwMWE4MDAwLCAweDAwMWFhMDAwLCAweDAwMWFjMDAwLAorCTB4MDAxYWUwMDAsIDB4MDAxYjAwMDAsIDB4MDAxYjIwMDAsIDB4MDAxYjQwMDAsIDB4MDAxYjYwMDAsIDB4MDAxYjgwMDAsCisJMHgwMDFiYTAwMCwgMHgwMDFiYzAwMCwgMHgwMDFiZTAwMCwgMHgwMDFjMDAwMCwgMHgwMDFjMjAwMCwgMHgwMDFjNDAwMCwKKwkweDAwMWM2MDAwLCAweDAwMWM4MDAwLCAweDAwMWNhMDAwLCAweDAwMWNjMDAwLCAweDAwMWNlMDAwLCAweDAwMWQwMDAwLAorCTB4MDAxZDIwMDAsIDB4MDAxZDQwMDAsIDB4MDAxZDYwMDAsIDB4MDAxZDgwMDAsIDB4MDAxZGEwMDAsIDB4MDAxZGMwMDAsCisJMHgwMDFkZTAwMCwgMHgwMDFlMDAwMCwgMHgwMDFlMjAwMCwgMHgwMDFlNDAwMCwgMHgwMDFlNjAwMCwgMHgwMDFlODAwMCwKKwkweDAwMWVhMDAwLCAweDAwMWVjMDAwLCAweDAwMWVlMDAwLCAweDAwMWYwMDAwLCAweDAwMWYyMDAwLCAweDAwMWY0MDAwLAorCTB4MDAxZjYwMDAsIDB4MDAxZjgwMDAsIDB4MDAxZmEwMDAsIDB4MDAxZmMwMDAsIDB4MDAxZmUwMDAsIDB4MDAyMDAwMDAsCisJMHgwMDIwMjAwMCwgMHgwMDIwNDAwMCwgMHgwMDIwNjAwMCwgMHgwMDIwODAwMCwgMHgwMDIwYTAwMCwgMHgwMDIwYzAwMCwKKwkweDAwMjBlMDAwLCAweDAwMjEwMDAwLCAweDAwMjEyMDAwLCAweDAwMjE0MDAwLCAweDAwMjE2MDAwLCAweDAwMjE4MDAwLAorCTB4MDAyMWEwMDAsIDB4MDAyMWMwMDAsIDB4MDAyMWUwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjIwMDAsIDB4MDAyMjQwMDAsCisJMHgwMDIyNjAwMCwgMHgwMDIyODAwMCwgMHgwMDIyYTAwMCwgMHgwMDIyYzAwMCwgMHgwMDIyZTAwMCwgMHgwMDIzMDAwMCwKKwkweDAwMjMyMDAwLCAweDAwMjM0MDAwLCAweDAwMjM2MDAwLCAweDAwMjM4MDAwLCAweDAwMjNhMDAwLCAweDAwMjNjMDAwLAorCTB4MDAyM2UwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDIwMDAsIDB4MDAyNDQwMDAsIDB4MDAyNDYwMDAsIDB4MDAyNDgwMDAsCisJMHgwMDI0YTAwMCwgMHgwMDI0YzAwMCwgMHgwMDI0ZTAwMCwgMHgwMDI1MDAwMCwgMHgwMDI1MjAwMCwgMHgwMDI1NDAwMCwKKwkweDAwMjU2MDAwLCAweDAwMjU4MDAwLCAweDAwMjVhMDAwLCAweDAwMjVjMDAwLCAweDAwMjVlMDAwLCAweDAwMjYwMDAwLAorCTB4MDAyNjIwMDAsIDB4MDAyNjQwMDAsIDB4MDAyNjYwMDAsIDB4MDAyNjgwMDAsIDB4MDAyNmEwMDAsIDB4MDAyNmMwMDAsCisJMHgwMDI2ZTAwMCwgMHgwMDI3MDAwMCwgMHgwMDI3MjAwMCwgMHgwMDI3NDAwMCwgMHgwMDI3NjAwMCwgMHgwMDI3ODAwMCwKKwkweDAwMjdhMDAwLCAweDAwMjdjMDAwLCAweDAwMjdlMDAwLCAweDAwMjgwMDAwLCAweDAwMjgyMDAwLCAweDAwMjg0MDAwLAorCTB4MDAyODYwMDAsIDB4MDAyODgwMDAsIDB4MDAyOGEwMDAsIDB4MDAyOGMwMDAsIDB4MDAyOGUwMDAsIDB4MDAyOTAwMDAsCisJMHgwMDI5MjAwMCwgMHgwMDI5NDAwMCwgMHgwMDI5NjAwMCwgMHgwMDI5ODAwMCwgMHgwMDI5YTAwMCwgMHgwMDI5YzAwMCwKKwkweDAwMjllMDAwLCAweDAwMmEwMDAwLCAweDAwMmEyMDAwLCAweDAwMmE0MDAwLCAweDAwMmE2MDAwLCAweDAwMmE4MDAwLAorCTB4MDAyYWEwMDAsIDB4MDAyYWMwMDAsIDB4MDAyYWUwMDAsIDB4MDAyYjAwMDAsIDB4MDAyYjIwMDAsIDB4MDAyYjQwMDAsCisJMHgwMDJiNjAwMCwgMHgwMDJiODAwMCwgMHgwMDJiYTAwMCwgMHgwMDJiYzAwMCwgMHgwMDJiZTAwMCwgMHgwMDJjMDAwMCwKKwkweDAwMmMyMDAwLCAweDAwMmM0MDAwLCAweDAwMmM2MDAwLCAweDAwMmM4MDAwLCAweDAwMmNhMDAwLCAweDAwMmNjMDAwLAorCTB4MDAyY2UwMDAsIDB4MDAyZDAwMDAsIDB4MDAyZDIwMDAsIDB4MDAyZDQwMDAsIDB4MDAyZDYwMDAsIDB4MDAyZDgwMDAsCisJMHgwMDJkYTAwMCwgMHgwMDJkYzAwMCwgMHgwMDJkZTAwMCwgMHgwMDJlMDAwMCwgMHgwMDJlMjAwMCwgMHgwMDJlNDAwMCwKKwkweDAwMmU2MDAwLCAweDAwMmU4MDAwLCAweDAwMmVhMDAwLCAweDAwMmVjMDAwLCAweDAwMmVlMDAwLCAweDAwMmYwMDAwLAorCTB4MDAyZjIwMDAsIDB4MDAyZjQwMDAsIDB4MDAyZjYwMDAsIDB4MDAyZjgwMDAsIDB4MDAyZmEwMDAsIDB4MDAyZmMwMDAsCisJMHgwMDJmZTAwMCwgMHgwMDMwMDAwMCwgMHgwMDMwMjAwMCwgMHgwMDMwNDAwMCwgMHgwMDMwNjAwMCwgMHgwMDMwODAwMCwKKwkweDAwMzBhMDAwLCAweDAwMzBjMDAwLCAweDAwMzBlMDAwLCAweDAwMzEwMDAwLCAweDAwMzEyMDAwLCAweDAwMzE0MDAwLAorCTB4MDAzMTYwMDAsIDB4MDAzMTgwMDAsIDB4MDAzMWEwMDAsIDB4MDAzMWMwMDAsIDB4MDAzMWUwMDAsIDB4MDAzMjAwMDAsCisJMHgwMDMyMjAwMCwgMHgwMDMyNDAwMCwgMHgwMDMyNjAwMCwgMHgwMDMyODAwMCwgMHgwMDMyYTAwMCwgMHgwMDMyYzAwMCwKKwkweDAwMzJlMDAwLCAweDAwMzMwMDAwLCAweDAwMzMyMDAwLCAweDAwMzM0MDAwLCAweDAwMzM2MDAwLCAweDAwMzM4MDAwLAorCTB4MDAzM2EwMDAsIDB4MDAzM2MwMDAsIDB4MDAzM2UwMDAsIDB4MDAzNDAwMDAsIDB4MDAzNDIwMDAsIDB4MDAzNDQwMDAsCisJMHgwMDM0NjAwMCwgMHgwMDM0ODAwMCwgMHgwMDM0YTAwMCwgMHgwMDM0YzAwMCwgMHgwMDM0ZTAwMCwgMHgwMDM1MDAwMCwKKwkweDAwMzUyMDAwLCAweDAwMzU0MDAwLCAweDAwMzU2MDAwLCAweDAwMzU4MDAwLCAweDAwMzVhMDAwLCAweDAwMzVjMDAwLAorCTB4MDAzNWUwMDAsIDB4MDAzNjAwMDAsIDB4MDAzNjIwMDAsIDB4MDAzNjQwMDAsIDB4MDAzNjYwMDAsIDB4MDAzNjgwMDAsCisJMHgwMDM2YTAwMCwgMHgwMDM2YzAwMCwgMHgwMDM2ZTAwMCwgMHgwMDM3MDAwMCwgMHgwMDM3MjAwMCwgMHgwMDM3NDAwMCwKKwkweDAwMzc2MDAwLCAweDAwMzc4MDAwLCAweDAwMzdhMDAwLCAweDAwMzdjMDAwLCAweDAwMzdlMDAwLCAweDAwMzgwMDAwLAorCTB4MDAzODIwMDAsIDB4MDAzODQwMDAsIDB4MDAzODYwMDAsIDB4MDAzODgwMDAsIDB4MDAzOGEwMDAsIDB4MDAzOGMwMDAsCisJMHgwMDM4ZTAwMCwgMHgwMDM5MDAwMCwgMHgwMDM5MjAwMCwgMHgwMDM5NDAwMCwgMHgwMDM5NjAwMCwgMHgwMDM5ODAwMCwKKwkweDAwMzlhMDAwLCAweDAwMzljMDAwLCAweDAwMzllMDAwLCAweDAwM2EwMDAwLCAweDAwM2EyMDAwLCAweDAwM2E0MDAwLAorCTB4MDAzYTYwMDAsIDB4MDAzYTgwMDAsIDB4MDAzYWEwMDAsIDB4MDAzYWMwMDAsIDB4MDAzYWUwMDAsIDB4MDAzYjAwMDAsCisJMHgwMDNiMjAwMCwgMHgwMDNiNDAwMCwgMHgwMDNiNjAwMCwgMHgwMDNiODAwMCwgMHgwMDNiYTAwMCwgMHgwMDNiYzAwMCwKKwkweDAwM2JlMDAwLCAweDAwM2MwMDAwLCAweDAwM2MyMDAwLCAweDAwM2M0MDAwLCAweDAwM2M2MDAwLCAweDAwM2M4MDAwLAorCTB4MDAzY2EwMDAsIDB4MDAzY2MwMDAsIDB4MDAzY2UwMDAsIDB4MDAzZDAwMDAsIDB4MDAzZDIwMDAsIDB4MDAzZDQwMDAsCisJMHgwMDNkNjAwMCwgMHgwMDNkODAwMCwgMHgwMDNkYTAwMCwgMHgwMDNkYzAwMCwgMHgwMDNkZTAwMCwgMHgwMDNlMDAwMCwKKwkweDAwM2UyMDAwLCAweDAwM2U0MDAwLCAweDAwM2U2MDAwLCAweDAwM2U4MDAwLCAweDAwM2VhMDAwLCAweDAwM2VjMDAwLAorCTB4MDAzZWUwMDAsIDB4MDAzZjAwMDAsIDB4MDAzZjIwMDAsIDB4MDAzZjQwMDAsIDB4MDAzZjYwMDAsIDB4MDAzZjgwMDAsCisJMHgwMDNmYTAwMCwgMHgwMDNmYzAwMCwgMHgwMDNmZTAwMCwgMHgwMDNmZTAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDFmZiwKKwkweDAwMDAwMjAwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwKKwkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAyMDAwLCAweDAwMDA0MGMwLAorCTB4MDAwMDYxODAsIDB4MDAwMDgyNDAsIDB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsIDB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsCisJMHgwMDAxMjYwMCwgMHgwMDAxNDZjMCwgMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwgMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwKKwkweDAwMDFlYTgwLCAweDAwMDIwYjQwLCAweDAwMDIyYzAwLCAweDAwMDI0Y2MwLCAweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLAorCTB4MDAwMmFmMDAsIDB4MDAwMmNmYzAsIDB4MDAwMmYwODAsIDB4MDAwMzExNDAsIDB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsCisJMHgwMDAzNzM4MCwgMHgwMDAzOTQ0MCwgMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwgMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwKKwkweDAwMDQzODAwLCAweDAwMDQ1OGMwLCAweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLCAweDAwMDA4MDAwLCAweDAwMDEwMzgwLAorCTB4MDAwMTg3MDAsIDB4MDAwMjBhODAsIDB4MDAwMjhlMDAsIDB4MDAwMzExODAsIDB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsCisJMHgwMDA0OWMwMCwgMHgwMDA1MWY4MCwgMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwgMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwKKwkweDAwMDdiMTAwLCAweDAwMDgzNDgwLCAweDAwMDhiODAwLCAweDAwMDkzYjgwLCAweDAwMDliZjAwLCAweDAwMGE0MjgwLAorCTB4MDAwYWM2MDAsIDB4MDAwYjQ5ODAsIDB4MDAwYmNkMDAsIDB4MDAwYzUwODAsIDB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsCisJMHgwMDBkZGIwMCwgMHgwMDAwMTkwMCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwKKwkweDAwMDAwMDAwLCAweDAwMDAxNTAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDEwMDAsIDB4MDAwMDIwODAsCisJMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwgMHgwMDAwNTIwMCwgMHgwMDAwNjI4MCwgMHgwMDAwNzMwMCwgMHgwMDAwODM4MCwKKwkweDAwMDA5NDAwLCAweDAwMDBhNDgwLCAweDAwMDBiNTAwLCAweDAwMDBjNTgwLCAweDAwMDBkNjAwLCAweDAwMDBlNjgwLAorCTB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsIDB4MDAwMTE4MDAsIDB4MDAwMTI4ODAsIDB4MDAwMTM5MDAsIDB4MDAwMTQ5ODAsCisJMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwgMHgwMDAxN2IwMCwgMHgwMDAxOGI4MCwgMHgwMDAxOWMwMCwgMHgwMDAxYWM4MCwKKwkweDAwMDFiZDAwLCAweDAwMDFjZDgwLCAweDAwMDFkZTAwLCAweDAwMDFlZTgwLCAweDAwMDFmZjAwLCAweDAwMDAwMDAwLAorCTB4MDAwMTAwMDEsIDB4MDAwMDA2MDQsIDB4Y2NjY2NjYzEsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4Y2NjYzAyMDEsCisJMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAorCTB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LAorCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCisJMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKKwkweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAorCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKKwkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCisJMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywKKwkweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LAorCTB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsCisJMHgwNTZmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwKKwkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwKKwkweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLAorCTB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmY4YSwgMHgwNDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKKwkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1Y2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsCisJMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwKKwkweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsCisJMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLAorCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNDBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKKwkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwMGZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAorCTB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKKwkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAorCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKKwkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAorCTB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweDAwMTAwMDAwLAorCTB4MDAwNzAxMDAsIDB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwZjAyODAsCisJMHgwMDAxMDM3MCwgMHgwMDA4MDAwMCwgMHgwMDA4MDA4MCwgMHgwMDAyODEwMCwgMHgwMDBiODEyOCwgMHgwMDAyMDFlMCwKKwkweDAwMDEwMjAwLCAweDAwMDcwMjEwLCAweDAwMDIwMjgwLCAweDAwMGYwMDAwLCAweDAwMDgwMGYwLCAweDAwMDI4MTcwLAorCTB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwYjgyODAsIDB4MDAwODAzMzgsIDB4MDAxMDAwMDAsCisJMHgwMDA4MDEwMCwgMHgwMDAyODE4MCwgMHgwMDBiODFhOCwgMHgwMDAyMDI2MCwgMHgwMDAxODI4MCwgMHgwMDBlODI5OCwKKwkweDAwMDgwMzgwLCAweDAwMDI4MDAwLCAweDAwMGI4MDI4LCAweDAwMDIwMGUwLCAweDAwMDEwMTAwLCAweDAwMDA4MTEwLAorCTB4MDAwMDAxMTgsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAsCisJMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywKKwkweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDAwMDAyMDAwCit9OworCitzdGF0aWMgY29uc3QgdTMyIGluaXRfZGF0YV9lMWhbXSA9IHsKIAkweDAwMDEwMDAwLCAweDAwMDIwNGMwLCAweDAwMDMwOTgwLCAweDAwMDQwZTQwLCAweDAwMDUxMzAwLCAweDAwMDYxN2MwLAogCTB4MDAwNzFjODAsIDB4MDAwODIxNDAsIDB4MDAwOTI2MDAsIDB4MDAwYTJhYzAsIDB4MDAwYjJmODAsIDB4MDAwYzM0NDAsCiAJMHgwMDBkMzkwMCwgMHgwMDBlM2RjMCwgMHgwMDBmNDI4MCwgMHgwMDEwNDc0MCwgMHgwMDExNGMwMCwgMHgwMDEyNTBjMCwKQEAgLTE0NjUsNDkwNCArMjc4MywxMTk3OCBAQAogCTB4MDAzZWUwMDAsIDB4MDAzZjAwMDAsIDB4MDAzZjIwMDAsIDB4MDAzZjQwMDAsIDB4MDAzZjYwMDAsIDB4MDAzZjgwMDAsCiAJMHgwMDNmYTAwMCwgMHgwMDNmYzAwMCwgMHgwMDNmZTAwMCwgMHgwMDNmZTAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDFmZiwKIAkweDAwMDAwMjAwLCAweDAwMDAwMDAxLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCi0JMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgzMTMwZWY4YSwgMHgyMmIxYzQzMCwgMHgzYjAxNDNmOCwgMHgwMmVjZGQwMSwKLQkweGRjNDA2ZWM0LCAweDE5YjdjNDA0LCAweDIzZGZkMzQ4LCAweGYxNDc2MDgwLCAweDAzMzQzMDMxLCAweDAzMmYzNzMxLAotCTB4NDIzZjI0ODMsIDB4NGQ1MDExZmMsIDB4MDJlZjkwMjUsIDB4YTQwY2RiMTUsIDB4NzcyODA0NzUsIDB4ZjJjMDYwZmIsCi0JMHg3NzYyOTgxMiwgMHgwNTZjMTE0NCwgMHg1OGM4ZjIyYywgMHg0ZGRlNGQxMSwgMHg0NGFmOTUwYywgMHhlMzQwZmY0MCwKLQkweGZjYThiMjM1LCAweDZkMDgxOTQ4LCAweDhiNWYxNTBiLCAweDk1MDUxZjI2LCAweGQwODQ5NTc3LCAweGU3Njk2NGViLAotCTB4MDA2MDdhMzYsIDB4MjcyNmI5ZDYsIDB4MDAwMDA0MDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsCi0JMHhkNTU0NzgwYiwgMHgzMzNlZjBiNSwgMHg2NGNjY2U2NywgMHgwOTNjOTkxZSwgMHgyMGYyNjRhZiwgMHhmMDljMDY4MiwKLQkweDkzYThhODA4LCAweDA3YmUzMDQwLCAweDBlMjJhNWU0LCAweDI3OTAyMDE4LCAweGY1ZThiZDQ4LCAweDYyMGMxOWJmLAotCTB4MmYwNmQ2YjQsIDB4OTNhNDVhMmEsIDB4YjY5NjhhODAsIDB4NmMxYTA2YzEsIDB4ODIyMjAzYjQsIDB4NmIwNmY1YmYsCi0JMHgzNjhiNmQ3YiwgMHgyMDYyYTI4YSwgMHhhNWViZDhiOSwgMHhhZmZhZGFmNywgMHg5OWRlZjZiNSwgMHg5MTMzMjY3MywKLQkweGZlYmZmZGFhLCAweDVmYTdmN2RmLCAweGY3YjNlY2RkLCAweGY1ZWQ3YmQ5LCAweGIzZWY2YjVlLCAweGE2NmU2NTQ3LAotCTB4OTdkOGNlNWQsIDB4OWJlNTA3ZjgsIDB4MjMyYzYzMGEsIDB4YTFiYmQ2NWEsIDB4ZWQ1OGNjOWMsIDB4OWVmODczMWUsCi0JMHhlYzY2YzY1YywgMHg0ZjJlNDRiMSwgMHgxMmFiN2E4NywgMHhmNGRkNDJiNiwgMHg0ZmRhOWQ5MiwgMHg3YWY1ZTU2ZiwKLQkweDk3NDNmNzczLCAweGI5ZmIzYjQwLCAweDA1MDUzZDk5LCAweDU4OWJiMWViLCAweDZjMjc2MzA5LCAweGYyZjVmZjhjLAotCTB4YWYzYjcyZmEsIDB4NWZlZWI2ZDYsIDB4NTU3ZmEwY2MsIDB4ZTFkOTk1YTcsIDB4NjYxZDEzZmQsIDB4M2NkN2Q2M2YsCi0JMHhjMDE5ODRhNSwgMHgzZWVmYmI1MCwgMHhiZjhjMDQ2ZCwgMHhkYmI0YWMyMiwgMHgwYTdmNTBiZCwgMHhjYWZiNDIxZSwKLQkweGZiMTg3MzBlLCAweDMzYmJiOWY3LCAweDRlYzY0ZTAzLCAweDU3OThkYTM2LCAweDkzN2VmODQzLCAweGQ4YzQ1M2Q5LAotCTB4NTllZWYwYWEsIDB4YWFkZmEwMjMsIDB4MDRjZjhhNWQsIDB4YWFkYWFjZjMsIDB4OGM5ZjJlNDQsIDB4MTliMDk1Y2YsCi0JMHhlOWRlYTg4NiwgMHgxY2IxZGU2MCwgMHhjZDE5MmY4NiwgMHhmMzU4ZWI0YiwgMHhlMzBiY2MyNCwgMHgwYjQ1YjUzMiwKLQkweDRkYmU3MGI4LCAweGM1MTVkNzlhLCAweDBmNDZjOWNmLCAweGI1ZWIyM2NkLCAweGYwM2NjMmNmLCAweDE0NGZkZDVlLAotCTB4Y2ViMTJlMWYsIDB4MzBlZDgyYzQsIDB4ZjY3ZGU5ZmYsIDB4Yjg5ZGRiODUsIDB4YTE1YWY1YmUsIDB4MjU4ZWJmNGIsCi0JMHhhYjFkNzE3YiwgMHgyY2RhYWRjMiwgMHhhYWQ1YzIyNywgMHg4ZThhMmYyZCwgMHhjZDMzYmQ1NywgMHhmYzk2ZDcwOCwKLQkweDdiNWQ0MTYxLCAweDkxYjI3OTZjLCAweGI0NjE2ZjMxLCAweDdmMzE4YWJlLCAweDBmZTExM2JiLCAweDQ3YzdiMzZiLAotCTB4Mjk2NDFmOWYsIDB4OWRlYWNmNDQsIDB4NDViNWU2NjYsIDB4NDQyYzY3YzcsIDB4MTdjY2NkY2YsIDB4MmViMmJjNDEsCi0JMHhiNzRmNGY5NywgMHhkZDIzMWUzMywgMHg3Nzg4YTRkNiwgMHg3ZGYzYzAxMywgMHgwMjRkODc0MSwgMHhmODQzZGY0ZiwKLQkweDdiZjY0Y2EwLCAweGZlYjBhYmQ2LCAweGEzY2M5OWU0LCAweDI2ZmVmMTBjLCAweDFlZDg1YjBiLCAweDkwMGJiZDY3LAotCTB4MTYzMGE2MTksIDB4Yjc4MjI2NjQsIDB4YzI2ZjA1OGUsIDB4NTBkNGNmYjIsIDB4NWZjM2MwMDUsIDB4ZWIwMDJiMjQsCi0JMHhlZmUxNGZiZCwgMHhkNGJjY2Y1ZiwgMHg5YWQxYmVmZiwgMHhlOWJhZTkxZiwgMHhlNmVkOTJjYSwgMHg3NDk2YjE1YywKLQkweGZhN2YyZmFjLCAweGI1MzIxODAxLCAweGJmMTBjZmMyLCAweDg4YWRlMjJhLCAweDQzMzIxZTE2LCAweGNhNTc2YmJiLAotCTB4N2FiYzA3YzQsIDB4YzcyZDk1ZmMsIDB4NGQ5M2RjZjksIDB4YTY3OGZhMDYsIDB4YTllYTE5MjcsIDB4ZjA2MzUzMzMsCi0JMHhiODljZjRlYiwgMHg0ZTAxZDQ0MCwgMHg4MjdmYTlhYiwgMHg2OTU4Y2Y5YSwgMHhlZGY4OGRiNiwgMHhlNDhkNmM4ZSwKLQkweDM4Y2I4ZWU2LCAweDNiNjQ3NzVjLCAweDdmYTgyMWMzLCAweDA4Yjg1ZjE3LCAweDQyZjA1YWVhLCAweGMwN2MxYzRmLAotCTB4ODU5NjI2Y2MsIDB4YTZjNGQwNjUsIDB4NDY2ZjZlMGQsIDB4OTQxZjAyM2MsIDB4Zjg1MTdjZTUsIDB4YTZmNTk0MWUsCi0JMHgyODE0YzJmZSwgMHgyMWE1MmI1NywgMHhjNDQ2Y2JjNCwgMHgzMzBlOTQyMywgMHgzYjc1YzA2YiwgMHhkNGYwOGNhYywKLQkweDdiNjRhNjNjLCAweGZiYTc4NzQ4LCAweGI5NGYwMTczLCAweGI3ZWY3MWQxLCAweDFmMzE2NDM0LCAweGNhODQwZjYzLAotCTB4YzA3MGVhNDMsIDB4ZjcxMDJlNmYsIDB4M2NiNzg0NjIsIDB4Zjc4MDJhMTIsIDB4NDJjOGVmNzMsIDB4OTAzNGRhN2MsCi0JMHgxYWZjZmQwMywgMHhmMzQ0NWZjYywgMHgxZjFlMjBiNywgMHg5ZDhjNzQxNSwgMHhjZDM4NTZkZiwgMHhhZjNkYmYzMCwKLQkweDVkYmYzMGNhLCAweDI3ODFmOTgzLCAweDJiNWQwODlmLCAweDhlM2MwN2U2LCAweGVjMDdlYzYwLCAweDk2ZGY5YTVhLAotCTB4NmZlNjhlYjcsIDB4NjE5NTU4ZDYsIDB4Zjk4MWE0ZmUsIDB4ZDNlZjM4YzMsIDB4MmU2ZmU2MDksIDB4ZmViOGQ4YmMsCi0JMHhmNWM2NTViYywgMHhjZmZkN2M2YiwgMHhmOTg5ZTY4NSwgMHgzZmZkNjg5MywgMHhmYWY4ZjM2MiwgMHhlYmUyZWVmMywKLQkweGZhYjhjMmI3LCAweGY4MDNkZGY5LCAweGVmYmM0NzZmLCAweGRiN2Y4MDRkLCAweGViOGRkMzc5LCAweGFlMzFhZmNmLAotCTB4N2ZlN2NhZGYsIDB4OTg4Yjc0MjEsIDB4ZmZmMzQ5ZGYsIDB4ZDdjMmRkODIsIDB4Y2QzNzdmOWYsIDB4ZjgzNmI1NmYsCi0JMHhjZDY0ZDAzYywgMHgyMzA4NmE0OSwgMHg3ZmUxN2I1ZiwgMHg4MDJjYTBjMywgMHg1OTQyYTY3OSwgMHhiYzE4Y2E5NCwKLQkweDQ3OTYxZGZmLCAweDI5MjNiODc4LCAweGZmZjYxZTc4LCAweGNkZjgwOTNjLCAweDJjMGJkNTE5LCAweGI5NDE1MWJjLAotCTB4NWQzYzEzYWYsIDB4ZjY4OTZiYjksIDB4YjJhNTc4M2QsIDB4MDY0YmViOTMsIDB4YzAwYzc0ZmEsIDB4YjNmM2JhNzcsCi0JMHhmMDAwZmZjZiwgMHhmNjI4ZWU1NiwgMHg4ZjI0YmQ5OSwgMHgyNjViZGYwYywgMHhlNjZmNTI5NiwgMHg5MDJjNjBmOCwKLQkweGZhODVkYjNkLCAweDY3M2Q5MDI5LCAweDU5ZjkzNTNjLCAweDQ2NDVlODI2LCAweGUzZTIwZTMwLCAweDEzOTYyZDY1LAotCTB4NWFmOTNhM2QsIDB4NWY1OGM1YjEsIDB4MjVkNjM2MTksIDB4MjRjOGE1ZGMsIDB4ZDhjYTg2NTAsIDB4Zjc5ODA2ZDgsCi0JMHgwNjIzZTgwNCwgMHhkMDdkZjI3YSwgMHg2NDdlNTg0NywgMHhkZGEyYjc2MSwgMHgxNWY0MDBmOCwgMHhiNTcyZjRkMywKLQkweDQyNzJlODllLCAweGIxM2ZmOGU1LCAweGY4ZjI0MWM1LCAweDFhZDVhNmY5LCAweDFjNzg0N2NiLCAweDdjZGQ2NDgwLAotCTB4MTE1NmY2MjEsIDB4NThiZTczYWMsIDB4MDRiOWUxMjcsIDB4Y2Y1ZjE1ZjUsIDB4NmJkYWFlZmMsIDB4ZGMwMmM0YzAsCi0JMHg0ZWY3ODY2OSwgMHhkNDE2MjI1YiwgMHhmMGIwYjc1YiwgMHhmZTMwNTliZCwgMHhiNmVlMGY2ZCwgMHhmOGZmNDkwNCwKLQkweGFlNDg5YTQ3LCAweGM4MTM0OGQ5LCAweDk2ODU4MmY1LCAweGVmNzQ3YmY3LCAweDY0ZDhlYzJkLCAweDhkZTUwOTE5LAotCTB4OWJmM2UzNDEsIDB4ZDNmNThjYWIsIDB4ODRjNWIwOTYsIDB4YzJhNTc5NzYsIDB4NWJmYzYxNWEsIDB4NzJlZDhjMWEsCi0JMHg1NGIxM2Y5ZSwgMHhkZjMxNjc0ZSwgMHhmMGM1YTA3YywgMHgwNjU3NWM1NCwgMHhlMWU4MmZkMSwgMHgzZWJiMDBlYiwKLQkweDg3ZGEyNDZiLCAweDUzZGYxNGRiLCAweGZiMDViZjUwLCAweDFlM2E0NDRkLCAweGUyZjlmMGQ2LCAweDA3YmUyOTY1LAotCTB4OTk3ODYwZDgsIDB4ZGY0MDkzMGEsIDB4NzhkZDg1NzcsIDB4NzQzY2I1NTcsIDB4ZmUxODMyOTEsIDB4N2UxYzk3OWUsCi0JMHhlYmMxODRkMywgMHg1NmZiODU4OCwgMHhkYzNhMjFlNiwgMHg3Y2Y4Y2ViYSwgMHg3ZDc2Mjg0OSwgMHgzYmVhMGY5YywKLQkweGQwM2VkMzRiLCAweGJmNmRhZjNkLCAweDFkMDNlZDMyLCAweDljZWY1NGJmLCAweDBjYWZhODZkLCAweGJmZTg2OGRmLAotCTB4NDMxMmNiNjIsIDB4OTU5NmIyZmIsIDB4OWFkYmY2ODYsIDB4NGJlYTFiNTcsIDB4ZmExYTc3NDIsIDB4YmQ2ZWJhZGYsCi0JMHg4Njk2ZmRhMSwgMHgzN2VkMGRmYiwgMHhkNDMyNmQ1NywgMHg2ZTNlMGM2ZiwgMHg2MTYwYmZlOCwgMHg3OTVkYTFhYiwKLQkweGZhMGU2NTY5LCAweDMwNWFmNTM3LCAweGZkZTAzODY3LCAweGFjYWNlZmQ0LCAweGIxZjI4OTRkLCAweDFiOGZmM2U0LAotCTB4ZDkzY2E4YjMsIDB4M2Q3MmE1ZTgsIDB4YmZjODJiY2EsIDB4ZWIyZjFmNjksIDB4YTBlNDk2ZGIsIDB4ZmZiZTRiOWMsCi0JMHg4ZDkwZDJjOCwgMHhkZmNiMTI3MiwgMHhjYjE4ZjJiMSwgMHg2ODM3YzhjNywgMHhmM2Q5MTI4NywgMHg1MDA1ODUxYSwKLQkweDZlMTRmYmVlLCAweDc3ZjNlNDhmLCAweGVjNjVmZTg0LCAweDFhYjc5MjFlLCAweGNkNjNjYjhkLCAweDUwY2JjM2YzLAotCTB4NDhiNDZhNWUsIDB4ZjEzMzgzNjEsIDB4YTE1ZGFjYjgsIDB4NDZkNjMwNzUsIDB4ODMwY2FjZTMsIDB4OWFlODE4NTQsCi0JMHg3N2IzODA2ZiwgMHhhZmU2OTliZiwgMHgyMmUzZTc0MywgMHgyNTgxZjdiNCwgMHg3OTFmY2UwYSwgMHhmMTg2ZmIzOSwKLQkweDI5N2Y4ZjA4LCAweDQ4MzMzYmQ1LCAweDU2MzZmNjJmLCAweDIyYTA3ZGE0LCAweDdlNTQwMmZlLCAweGNhOTBiOGRjLAotCTB4MmE0MThkMTMsIDB4YTJhYzY4M2YsIDB4MDZjNmZkZjIsIDB4ZDcxYTdiMmEsIDB4NjM2ZWY5NTEsIDB4OGQ2M2NhODgsCi0JMHhiZWZlNTRjZCwgMHhiN2NhODViMSwgMHhmOTUwYjcxYiwgMHg5NTMwYzZkYiwgMHg1NGZkMWJhNywgMHhiNWE5ZjAwZSwKLQkweDQzZmQxMGJmLCAweDQzMmIwN2Y2LCAweDBlYmQ5NzE3LCAweGNkYzgxNmZlLCAweDc3MzdlOTE5LCAweGUxMWFmYWYyLAotCTB4NGJjMjI3MzcsIDB4ZTIxM2RkMmMsIDB4NDM0Yzg1OGYsIDB4ODkyOTJkZDEsIDB4YzRjOTIzZDMsIDB4ZjljODE4MmEsCi0JMHhmYWY2ZTMwMywgMHg4YWJhZjI5NiwgMHhlMDA4MDMyYSwgMHgwMzk3ZmJkMywgMHg4NjBkMjJlMywgMHhkZTNkMzU3ZCwKLQkweGY2ODNiYjQxLCAweGQ5MzM2NWVmLCAweDk5ZjkxNjNmLCAweDFlOTcwNmVmLCAweGQ0MjM0MDFmLCAweDg0NzRiZjM3LAotCTB4MzVmZDAyOWYsIDB4N2U3MmYxNGEsIDB4OWNiYzBhZjksIDB4OGRkZGJjMzksIDB4OTY0ZDc0N2EsIDB4YTRjMWYzYzksCi0JMHg2ZGFiZWJjNCwgMHg3NTM4ZjVjZiwgMHgxYTc3ZDRmMCwgMHg5NDVhNjdlYiwgMHg3YTBmZWUwYSwgMHg0NzhlZTc5MywKLQkweDNlNzhmMDdlLCAweDY1YmE0MDI4LCAweDU5YzcyOTUxLCAweDNlNzlhNTkzLCAweDYxN2VjMzQ4LCAweDk1ZGIwZjVhLAotCTB4ZjEwNWZjNDIsIDB4YjZmYmY1MDgsIDB4NGUzNDQ4ZTEsIDB4NzYwZThlMTQsIDB4MWYyN2RlMWMsIDB4ZmY3MTNmM2IsCi0JMHhmZWExN2M4NCwgMHg5YTNmNDM0OSwgMHg0NzNlNTk3NSwgMHhmZjg1NmFiYiwgMHgxNDAxODk3ZiwgMHhjNzJlYTk1MywKLQkweDg3Mzc2ZmFkLCAweGYzZTIxN2FjLCAweGUwZjk4NjVkLCAweGY1OGNhZjNkLCAweDhhMWJjY2JlLCAweDQyNzY1NGZmLAotCTB4YTRhODA3ZjIsIDB4YWNkZTIyYTMsIDB4MThmNzY5ZGUsIDB4YTE4YTc1ZjUsIDB4ZGMzOWRmNWUsIDB4ZjhkZmQwNjMsCi0JMHgzNjU3OTAwZiwgMHg1ZWQxNTE1MywgMHhlOGI2MDhkNSwgMHgwYWNkOWQ1MywgMHhmOTBiYjdjMCwgMHhhZjUyZTgwNiwKLQkweGI2YjU3ZWYwLCAweDhmMDgyZDFlLCAweGNkMzQ3NGNlLCAweDNkOGJjNGJmLCAweGIxYmQ2ODViLCAweDNjNmM5ZGYwLAotCTB4YzRkNTU1ZWMsIDB4Y2Y5YjU3ZjAsIDB4ZTM4ODExZGMsIDB4ZjBhZTdmOTcsIDB4YzRjNmE1MzgsIDB4MGI2NjVmZmQsCi0JMHg1ODRlNTFiOSwgMHg4NzNkYzg1NiwgMHgwNzM5OWJmOCwgMHgwYjcxNDNmMCwgMHhjYmFiYTNjYywgMHhlOWFmYzA3MSwKLQkweDdhY2Y2NzhmLCAweDhkYWZkYzRkLCAweDUyNmFkNzlkLCAweDc1N2YwOWNlLCAweGMyY2U4ZWJiLCAweGIxZTJjNzc1LAotCTB4YjQzZmYzYWUsIDB4Y2M4ZGM1MjAsIDB4ZGY4OTQ3ODAsIDB4NmFjMDRhNWQsIDB4ZWQ1N2YxODIsIDB4Zjk0MzRmN2MsCi0JMHgyYTEyZDhmYSwgMHhjNGRjZTdmYywgMHhiZjBjMTlmOCwgMHgyMzg0ZWIzMywgMHg3YjM1Y2ViYSwgMHhhZDVmZTQ1YywKLQkweGVkZTIyNGQ5LCAweDc5YzZlYjEwLCAweDEzMTM0ZTk3LCAweDc0YmQwMTdmLCAweDYyZTU4MDcwLCAweDI2ZGZhODI2LAotCTB4NWRlZTMyNmEsIDB4ZmU0ZDUxZGEsIDB4YTQyYzg3ZDUsIDB4ODlmNTNmYTEsIDB4ZmQwNGE1YjksIDB4YWRlZDU1ODMsCi0JMHgzY2UwMWY5YSwgMHg4ODE1NGNjNSwgMHg0ZGVjNTNhZiwgMHhiZDFkMjRmNywgMHhkMTFhNGM4YSwgMHhhMzY2YjZlOSwKLQkweGE2ZmUwMGRmLCAweGE2ZmUwZWExLCAweGNkOWNiZWExLCAweDc2MzhjNGM5LCAweGI4MGI2NmY5LCAweDQzNGViNGJlLAotCTB4ODc5MzI4ZmIsIDB4MzU4MmIwZTgsIDB4N2FmYjQ0NmMsIDB4ZmNkMjYzYmMsIDB4M2YwZTkwNGIsIDB4ZjEwNGIyN2YsCi0JMHg0NzlhMTRiYiwgMHg4ZjFlMjJhNiwgMHhkNmZmMWUxMiwgMHhmYmUyNTdmOSwgMHgxYmNmMDcxMywgMHg3Yzk4ZGJlNSwKLQkweGVkNDNjMDgwLCAweDhlMWZjNTRlLCAweDk5MTczN2MzLCAweGZlNGFiZjM4LCAweDRmZjA4MGRhLCAweDJkY2RmYTg5LAotCTB4NGQ2YmY1MzEsIDB4NmI3MjRhOGEsIDB4ZTNhNDY2NjYsIDB4NjQyZDhmMjksIDB4NWY3NmE2NGEsIDB4N2ExMmYwMDQsCi0JMHgwMjZiZWFkZSwgMHgxMmEzZmFmZSwgMHhiYjIyNmQ5OCwgMHg3NGMwOTkxZSwgMHgwNGE4ZmVmZCwgMHhmMmFmNzllOSwKLQkweDAxMzQ3MmZhLCAweGMwNGM4ZDRjLCAweDA2ZDgwYjNjLCAweGQwNGQzYmUyLCAweDYwZjA4YWQ3LCAweDFhYTU5Y2JjLAotCTB4NzI4ZjU5ZDYsIDB4OWRkOGUzMGQsIDB4YjdkZjBjMWQsIDB4ZjFkYTYzN2IsIDB4YzYzNzY4MWYsIDB4OGUxYmIyMzIsCi0JMHgyNzc2YzZiMSwgMHg4N2YyMTliMCwgMHhiZTdjNjdjYiwgMHgxODBmYzg0MiwgMHg0YzNiZTIyMiwgMHhlYmRmYTE3YiwKLQkweDY2MjMzOWI2LCAweDM0ZDk0YmYwLCAweGNlMjA3N2I1LCAweGM4NzhjM2M4LCAweGZlOTE4MTNkLCAweDY0NWU1MmYzLAotCTB4YWZmNzg3YWQsIDB4YjU4NDc5MTMsIDB4NGIwZDk0ZWYsIDB4YTk3ZmMyMWQsIDB4ODRiNjFiM2YsIDB4YjU3NTc0ZDMsCi0JMHhhOTdlNDM1ZiwgMHgxMmMzYmIzZiwgMHhmNDBkZjQ5ZSwgMHg5ODk2MTdhMCwgMHgyNzliOTUxOSwgMHhjYTIzNjA5NCwKLQkweGQ0OWJjNGFkLCAweDNjM2Q1MTdmLCAweGNiOTdhM2NhLCAweGZlZjQzMWFkLCAweDAzYTQ3MGRhLCAweGVjNzA3NTNkLAotCTB4NDgyZDgyNTIsIDB4YmUzODU4ZjcsIDB4ODM1OWY4ZjYsIDB4YWRmYWRmYzYsIDB4NjgzMDVmOGUsIDB4ZjBmMTlkZmMsCi0JMHg2MzFjN2E3OCwgMHgwMzM3YTRkZCwgMHhmZWU4MGNjOSwgMHhhOGYzZGQ5ZiwgMHg4ZmY3NDQ0YywgMHg4NTIzM2U0MSwKLQkweDU4Zjg0ZmU4LCAweDRiNzllMzQ0LCAweGI4ZjhjYmFjLCAweDU5ZTVlYmFhLCAweDgxNTc1NzE4LCAweGZlMDVlYjdmLAotCTB4NDg1YWM5NWQsIDB4Mjk0YzQ0OGYsIDB4YjMzNWNmYzIsIDB4NTVkZTBlODgsIDB4ZmVhNmJmNWQsIDB4ZmY3ODNhYWIsCi0JMHhmZDRlZDY2YSwgMHgzMTE5YmYzMSwgMHhlMTkyN2JhYywgMHg3ZGVmMjkzZCwgMHg5Y2Q0OWVjMiwgMHgxZDExNjEyZCwKLQkweDc5MGI3NjNmLCAweGUwODdiZjAwLCAweDEwNmJjZjkzLCAweGIyNmJjYzNlLCAweGI2YTc5YTZlLCAweGNmMzBjZDNkLAotCTB4ZjY3MzVmODAsIDB4ZjlkMTE2NjIsIDB4Mzc2YWI1M2QsIDB4ZDllZDc3ZjEsIDB4MDE5ZTY4Y2IsIDB4NmFmZTA2N2IsCi0JMHhmYzZhMWI0NCwgMHhhM2I4MDY5MSwgMHhjMDMzNGZlMywgMHgzYTdmMWQxYiwgMHhjZmM3MmJjZCwgMHhjYTcyMDM5YSwKLQkweDJiZTUxM2Y1LCAweGMyOTNjYjQyLCAweGI3YTc4MDRkLCAweDkxZjdjMWFjLCAweDliNWNiMjVmLCAweDc2NDE1ZjczLAotCTB4MDRmMWZhNWEsIDB4NzQ0ZmM3ZDQsIDB4MWQzNGRmNmMsIDB4ZWEwOWZhZTgsIDB4OWI5NzVjMzksIDB4NzM5ZWI5YjksCi0JMHg5MjE3NGM4NiwgMHg3Yzg1M2FmZSwgMHgxOGJmYTAzMCwgMHg0M2YxYWZlOCwgMHhiN2U4YzdiNCwgMHg4YzBhZjg1MSwKLQkweDI4ZjU5YTNmLCAweDM3NDZkZmE4LCAweDhlNTBmNTE4LCAweGVmODRkZDMzLCAweDNlMzNhY2U1LCAweDAxOWVhMmY3LAotCTB4NTIxYjk1YmQsIDB4OWY1Y2UyNjMsIDB4NmZjZmM3MDksIDB4OWY0ZjNlMzYsIDB4YzczYWJhNTEsIDB4ZDM1MTZlMDcsCi0JMHgyNzk4YTUzMywgMHhiYTUwNWY0YSwgMHhiMTg3YTQ3YiwgMHg3OTU3ZDQwYiwgMHhlMmQyOTlmZCwgMHg3OWZmNTBlMSwKLQkweDE1MzJiYWQzLCAweDdmZjRkNWZjLCAweDg2Y2UyZDJiLCAweDkxYjJkM2JhLCAweGNhMTVhYmQ3LCAweGI3Y2M1OTJiLAotCTB4ODliZTg1OTQsIDB4Y2FjMDA4MWUsIDB4NjI5NDcyOGQsIDB4MGE5Y2ZjMDYsIDB4Y2NiZjliMWMsIDB4NWZiNDdhOGIsCi0JMHg5ZTg0NzhlMywgMHhkM2QxOWY4MCwgMHgzOTQ2N2UzOCwgMHhmYzQ2ZWQ4ZiwgMHhkNjdhOThlNCwgMHhjM2Y5NzNhMywKLQkweDA1MmJmZjE3LCAweGU2MmY0NjQzLCAweDFlMGYwMTNkLCAweGY0ODNjMWI2LCAweGJlZDM0NzgxLCAweDhlYmZjMjFjLAotCTB4NWYyNTMzZjUsIDB4ZjMwNWIxNGMsIDB4NGI5MzhlMTAsIDB4MTY3ZjdlYzcsIDB4ZWFhMjdkM2MsIDB4NWIwZGM1MDAsCi0JMHg3MWY5ZmU0NCwgMHhmNDZlYjcxMCwgMHgzMjZmNTViYiwgMHgzMzY0ZTNmMiwgMHgwOTY1ZDdjZiwgMHgzNzhjZWViZiwKLQkweGZkNDg3OTM3LCAweGExOTU5NTllLCAweDUzZWFlMGVhLCAweDlmYzhkZGZiLCAweDVmMWM1ZjdkLCAweGQ2MjM3ZThjLAotCTB4MTNkMDg2NTMsIDB4MzJhMzU5ZjUsIDB4YTMxMzkyNTQsIDB4NzQ5ZTY2N2UsIDB4YzE0YWEzZTIsIDB4NWIzNzg4NDcsCi0JMHhiNmNmMzQ2NiwgMHg3ZTUxMDk0MiwgMHhjMGI1ZmE0NCwgMHhiZjVjMWUwMSwgMHg3ZjMxYWExMiwgMHg4ZWRmYzE3OSwKLQkweGUwZDZlM2E3LCAweDc3NTg2NmQ1LCAweDgzYzg1OTg1LCAweGJkYjBiOThiLCAweGYwOGYyYWI3LCAweGY2ODM2ZTk2LAotCTB4NmIzZDY4OGMsIDB4ZTgwOWNlZTksIDB4MDM5OGE0ZTcsIDB4YzM3YmUyZDcsIDB4YzZjZDlmOTcsIDB4NDNkOThlN2EsCi0JMHhiNGEyZGJmOCwgMHgwMGY4NDcwYywgMHhjM2NmYjQ4ZiwgMHg1NjlkODJmNiwgMHhkY2M5MzE2OCwgMHhjZjI2ZjY0ZiwKLQkweDY5Y2UyMjE5LCAweDFmNGFjYzZiLCAweDU1Y2YyZmNhLCAweGRlNzE4YjgzLCAweGY3YmViZGZjLCAweGYxZmM2MTliLAotCTB4ZjcwZjlhOTUsIDB4OWJhZmM2NWIsIDB4Y2NmODhlOTksIDB4YzAzZDcxMzIsIDB4NzJmMzkwZWUsIDB4ZjgyZjVmM2QsCi0JMHhmOGFhY2ZhZSwgMHg3N2RlZDBmZCwgMHg4NDM1YTdiYiwgMHhkYTBiMzNlZCwgMHhiNTE5YWZkMSwgMHhmZGMzZWJjZSwKLQkweDQyODczZTgwLCAweDdhMzVmN2VmLCAweGU3MjgyZjI5LCAweDFjOTVkZDFkLCAweDllNDliYmIxLCAweGYzYzgzNzNmLAotCTB4ZDA3ZDYzM2EsIDB4M2I3YTVmN2MsIDB4N2ZiYzcwN2IsIDB4OWM0MmY4ZjYsIDB4MWQwZjk0OWUsIDB4NjdkOWU4MmQsCi0JMHg3MjVkZmJlNiwgMHhiNDJjZDFiZSwgMHg3MzkxZmQxZiwgMHhjYzVmZWY5ZCwgMHg3ZmRhNzRhZSwgMHhiYTAzNzQxMCwKLQkweDkyNWU5MDg0LCAweGZiZGY0MDJlLCAweDEyMWI1ZjEwLCAweDc4YmVmN2QzLCAweDZiNmU1ZGY0LCAweDVkYjk0NmM4LAotCTB4NjU5ZjY4MTUsIDB4ZTYyNWU3ODEsIDB4YWZkODgzZTAsIDB4MjFmNzYxNjYsIDB4NTBkZWNkMGIsIDB4ZTkyN2ZjODgsCi0JMHg3MGQwZDRjZSwgMHg3NDAzNTNkNCwgMHhmYzIxNDk3ZiwgMHg3YzcxNzY2NywgMHhiNzM2MWZkNiwgMHhjYjFlN2VlMiwKLQkweDQwYjdhZTBhLCAweDQyY2E5OWZiLCAweGEyMjYyN2NhLCAweGZlNzVmOGYzLCAweDAxN2NiZDc0LCAweGZjZTJiN2RkLAotCTB4OWE4ZWJiZTMsIDB4ZWY0OTNlMTAsIDB4NDlkZTQ0YzcsIDB4ZmZlY2FkY2EsIDB4YmRmYTU5OGMsIDB4MGY3NmJlNjIsCi0JMHhmYzU1ZjdjZCwgMHgxNjZlYjQ1NywgMHg3Yzc4MGI4ZCwgMHg4MGRmY2Y1NiwgMHhmZjljNzZjNywgMHgxZmUxNjZjNywKLQkweDNiNjNjNjBmLCAweDNjMDczZmY2LCAweDNjMTczOWVlLCAweDkzOWRlODdlLCAweGNmZTMwNzk5LCAweDdmMDkzYjMyLAotCTB4ODczMjlmMmIsIDB4YmVhNGIwYWQsIDB4ZjUyZmQyZDksIDB4MzMzYzMzNWYsIDB4NWU1NjI3YWEsIDB4ZDcxZmIwZDQsCi0JMHg4NTQ5ZjJiOSwgMHg2YmIyYWNmOCwgMHhjMjZjMzVjNSwgMHhmOTYzNzhlMCwgMHhlM2U5MTBjMiwgMHhkOTAzYjhkOCwKLQkweDVhYjJmOTEyLCAweDdmMTMxNzhlLCAweGZmMDdiMzU0LCAweDczNGU0Y2MzLCAweGY1NGVmNDk4LCAweGJmZmI2MzRlLAotCTB4OWIzMGY5NDUsIDB4MjRjZTA0ZjIsIDB4ZjFiMWI3OWUsIDB4ZjFkMGIyZjEsIDB4ZTI0OGJlNDcsIDB4OGIyNjcxN2MsCi0JMHg2MTllMWM5MSwgMHhkMGY3YzQyOSwgMHhiYjYwOGJlZSwgMHgzM2ZjYTJlNiwgMHhkYzYyOTFkYiwgMHgzMTRjYWM5ZiwKLQkweDZlOGU0ZmVjLCAweDRmZjIxOTMwLCAweGM5YjFmM2IxLCAweDVmZWM0Y2NhLCAweDY3MzBlNDJhLCAweDZmYjBjOTlkLAotCTB4ZWUzMjFiOTcsIDB4YTczN2U1ZWIsIDB4NWE2M2VhMWEsIDB4OWZmYTE4NDYsIDB4ZDBjZjI1YjcsIDB4YmU3YzJlM2UsCi0JMHg5ZDgyZmRhMSwgMHhmMWY1MGQxMywgMHhmYTFiMTdlZCwgMHg2NjU5ZDg1ZiwgMHhhZTQ3MTdhOCwgMHg3NDlmZjQzMiwKLQkweDNlYTE4ZTc4LCAweDQzMjZmYmE1LCAweDJmNmZhOWZmLCAweGQ0NWZiNDM1LCAweDdlZDBjYWIzLCAweDBjNmJjN2M5LAotCTB4ZWZmYjRiZjUsIDB4MmM4ZmY0MzIsIDB4MDBhYzM4YTksIDB4ZmYwMjVlZmQsIDB4ZTA4NmYzMTQsIDB4NjdjOGE4NTcsCi0JMHg5OWFjZmUwNywgMHhmYzBlNGY5MCwgMHhhOGM0ZDBiOSwgMHgyYmM4NjdkZCwgMHhhNjczZjgxZSwgMHhmODFmOWYxZiwKLQkweGZiMWY4OTczLCAweGU3Y2IzMjk1LCAweDU5NTJlMmYxLCAweGRiMTliMGNlLCAweDBiZTA1NTUzLCAweGMwZDk2ZmI0LAotCTB4NTY5YTk4MTcsIDB4NzIwM2YyOGQsIDB4Mzk0NTQyMzUsIDB4MGZjM2E3ZmIsIDB4NDY5ZDAyMTUsIDB4NDY0ODJjYWMsCi0JMHgzNGYyMGQzYiwgMHhiZDM3M2Q0MiwgMHgyN2VmODM5NCwgMHg5NjJkYTc5MiwgMHgyOTBmMWI5NiwgMHhhYzdkZWQ4MywKLQkweDM4ZTU5MGJlLCAweDViYWRlNjU1LCAweGJhZDM3ZGU4LCAweDY1YTc2MTZjLCAweGIyMzBmMTdkLCAweDVmOWY5MjMzLAotCTB4N2ExYzUzMzMsIDB4ZTNkNzAzNjYsIDB4ODZhNDM2NjcsIDB4ZGY5ZWZlZjksIDB4MGZlNzVjMzksIDB4MjRlODM5OWUsCi0JMHg5ZWZkY2VmZSwgMHhhZjAxZGI5MywgMHg4OTJjZWJkMywgMHg3ZjI5MDFkYSwgMHgzMjNmMjJmOSwgMHg3OTQ1NTgyYSwKLQkweGUzZmU0MThmLCAweGI4ZjU5ZWEyLCAweDFmZjU3M2NlLCAweDk5YzZmZDYzLCAweGZmMDIxZTkyLCAweDA1ZDFkNzA5LAotCTB4ZjFmNjg5NzIsIDB4MjdkYTE0ODMsIDB4NzE2MWUzNWEsIDB4MzZiNmVmZjcsIDB4MTY3NzBmMzYsIDB4NGIyZTdlMGMsCi0JMHhkY2UxY2Q2NSwgMHhiNDBmMzBmYiwgMHhlMTU5ZjE0ZiwgMHgxZmQ4NmRmZCwgMHhiYzU4N2JlYywgMHhiNWVhMjZkNywKLQkweGJkNDU0ZDIxLCAweGViZTIyYjU2LCAweDUyMWU3MWQ4LCAweDdlNDY2ZjRiLCAweGRkOTZhMWQ4LCAweGM1ZDE0ZWFjLAotCTB4ZGM1YTBkZDMsIDB4ZDA3N2M3YmMsIDB4MDQ3M2MwODksIDB4MGQ4MGVmYWEsIDB4Y2Y1ZmVmZTYsIDB4ZmYzMDZkN2MsCi0JMHgwY2E3OGIxYSwgMHhmNGVlNmJlYiwgMHg5YWYyMWQxMiwgMHg3YWUxNjY3YiwgMHg1ZGMxM2E3MywgMHg3M2ZiZDlkNywKLQkweGMwNTZhNzgwLCAweGQ0ZjA4YjUzLCAweGE3MTRmZGE5LCAweGIwYThiZmY1LCAweDg3OWM1Y2I2LCAweDVmNjZiYjhmLAotCTB4NDg3ZTQzMmUsIDB4ZDUxY2U3MDQsIDB4NzIwNTdjNDIsIDB4NzM4ZTM3NzAsIDB4NGVkMDlhYTcsIDB4ZjI4ZTdkZGYsCi0JMHg2MzhkNWViMCwgMHhmMmVjMDY1ZiwgMHhmMTViZWQ1MiwgMHgxMzcwNzJjNywgMHg5ZWI0NGE3OCwgMHhlMTk2ZDBmZiwKLQkweDlkMzliNzI4LCAweGMwYTg5ZmE1LCAweDYwZTAzOWI3LCAweDlmMjJhNzI2LCAweGQxYmVmNjMyLCAweGViZWY2MjNmLAotCTB4ZjM0NGQwZmMsIDB4NzY4OTU1N2UsIDB4ZjExNTdkZWYsIDB4MDYzMWY3Y2UsIDB4YzcyMzFkYzEsIDB4ZTQ2Zjc1ZGUsCi0JMHhlYmU5YTQxNywgMHg0YzE3ZTdhZiwgMHgxMDk1MDAxMiwgMHgzMDZjMTRiYywgMHhlNWUyZGI4OCwgMHg5NWY2NzM4YiwKLQkweDI0Mjc1NjFlLCAweGJkZWZlNzg2LCAweDM3Nzg4MWNlLCAweDRiZmQ1ZTQ2LCAweDdjOGY1ZWM3LCAweGIzMTFmYjc3LAotCTB4YjI4NDU1NjIsIDB4Yzg0MTc4YzEsIDB4ZTY3N2IyZWIsIDB4ZjBlOGE2NjQsIDB4ZTViMWI1YjMsIDB4YWYyNzU1NmEsCi0JMHhmN2YwMTJhMywgMHg5ZmY3MmE5YiwgMHg1YzM2MzViNiwgMHhlMzgwNTk1ZCwgMHgzZDdhNGM3YSwgMHhjYTEzZGQ5MCwKLQkweGQyNzk4OGRkLCAweDhjMmY4NzBlLCAweDkzMjdhY2ZhLCAweDcwMmI1OGYwLCAweGJlMGE2YzkwLCAweGY0YmNmYzg5LAotCTB4ZDdjYTZlYzIsIDB4ZTk3Yzg4ZTYsIDB4Mjk3ZTcxNjgsIDB4MmFlM2JlNzYsIDB4OTdmODQ3Y2YsIDB4OGMyOTU4ZGEsCi0JMHgxNmNkYTdmYiwgMHgzNGIyNzdmMiwgMHgwOGUyODc5OCwgMHg1YTViOWQwNywgMHgwYTZjMDYzNiwgMHg5M2RiMmZiNCwKLQkweDBjNTNmNWM2LCAweGQwYzZlMTVjLCAweGEyMGExYmQ1LCAweGM3MWMwMmYzLCAweDNkYmMxZTUxLCAweDdmMzg1OWMxLAotCTB4NDQ1MWMyMmUsIDB4ZTExMjc2ZjIsIDB4ZTg0ZDQ4ZmIsIDB4NDczYzlkY2YsIDB4ZDIxYmViNzksIDB4NDNjNmM0ZmUsCi0JMHhmMGUyZmQwOSwgMHhhN2U0ODVmZCwgMHg3ZTRkZmZlNiwgMHhhMWMzZmEzMSwgMHgwYzNmYThhMiwgMHhkMDU4YjJlYiwKLQkweGViOGM1OTRlLCAweDhiNTVkOWQyLCAweDk1ZDZkY2U1LCAweGFlZGExOTY0LCAweDkyNDE2ZTNlLCAweDMyNDA3Mzg5LAotCTB4OWFlMTIzMGYsIDB4NTdmMmUxNjksIDB4ZTYxOGQxZWYsIDB4NGU1MWVhZDMsIDB4NTRkOWYwZTMsIDB4YmI4ODYyOGIsCi0JMHgzMTM4YWRiZiwgMHhlZGU2NTUzZiwgMHg3ODg3YmRhNCwgMHhlNWMyZTMxMSwgMHgzM2EzZTI0ZSwgMHgwYmZiZDZkZSwKLQkweDg3N2M3MzI3LCAweGM4ZjdjMDg2LCAweDA0MzIyMzc1LCAweDBmODg3ZDVlLCAweDE2ZjFjNzg5LCAweGJjMDY5ZWEzLAotCTB4YjVlMmUyZmEsIDB4MzI2YWYwMDYsIDB4NTdjYTc1ZTAsIDB4OTVmYzk1ZTAsIDB4YTk4ZjlkYWYsIDB4OWNlZmVlMzQsCi0JMHhhNWRmZjgxNiwgMHhkZTcwMzMwNCwgMHg1YmJjMzc1MywgMHhiYWIwZjk4MiwgMHgwODZiOWY3OSwgMHg2NzllZDdkNywKLQkweGU3ZTliMzJlLCAweDk4MWVmOTkxLCAweDljZjM4M2M3LCAweDlhYWZlMWJlLCAweGU4MjVhN2QwLCAweDM5ZWQzNjY3LAotCTB4MzVjZjE5MmYsIDB4OTNmMzhhZDQsIDB4ZmQ1YWY2YTcsIDB4M2U1ZjhlOGEsIDB4MWU3MGYyZmQsIDB4MWI0ZmE1ZWEsCi0JMHhmMmM3Y2NhZiwgMHg1YmNmMmE1NCwgMHhmNTNiZGE5ZSwgMHhhOWQ1ZjIxMCwgMHhiMTJkMWM5ZiwgMHg5ZWE3MzhjMCwKLQkweGQyYTI1YTNmLCAweDYwZDg1YjNlLCAweGVmMmY2YTdmLCAweDIwM2I0MTJlLCAweDdjMDNkYWYzLCAweGRmYWY4YjY3LAotCTB4ZmNmZTBiNTYsIDB4NGFhZmViZGEsIDB4YzhkNWU3ODgsIDB4ZWYxY2E3MDcsIDB4ZWJmYWUwOTYsIDB4MGYwOTY3NWMsCi0JMHg3Y2I5ZGIwZiwgMHg2ZGExOTIzYywgMHhkMzIzMzJjNCwgMHgxN2ZhMTBmNCwgMHg0ZmMxYTQ1YSwgMHg1Yjg3ODhkYiwKLQkweDc1MjY1ODIyLCAweDc5NzFmYmI3LCAweDIzYmJiN2NlLCAweGZhN2JiYTU4LCAweGJkNzYxOGZkLCAweGUyMDFmZTA1LAotCTB4NjdiMWYzZDUsIDB4YmUxZmQ2M2YsIDB4MzNlNTA0ZjIsIDB4MWFiMDE3ZDksIDB4ODA5MTYzODAsIDB4M2I1OWY3ZTMsCi0JMHgzYTA0YTkxZSwgMHhmMzdkMmVmYywgMHg3ZTg2ZTQyMywgMHhmNjg1ZWIwMSwgMHhhMGRmZjE5YiwgMHgxZTgxOGU4NywKLQkweGRjNmM4MGYyLCAweDdjZmI3MmE0LCAweGI1MTJhNTUzLCAweDE5MWZmODUzLCAweGU5MTg3OTQ3LCAweDhhMzU0NWQzLAotCTB4ZWVhNWFlYzEsIDB4ZDNmOTQxOTksIDB4NjQyOWFmM2UsIDB4NjFhNDc1ODEsIDB4YmZmODFhNTYsIDB4NjZjZWViNGYsCi0JMHhjNWNlYzBkZiwgMHgzODgzYmY5NiwgMHg5ZDlkN2RlNSwgMHgwOTUyYWNmYSwgMHg2N2RmMzBhOSwgMHg3ZmFjOGY0MiwKLQkweGQzZjExMjdkLCAweDE3OGE2NWU2LCAweGZlZmIxOGYxLCAweGNiNWVlYjYzLCAweDcyN2EwOTlmLCAweGYzODc5ZGQ4LAotCTB4NmVmYzgyNjcsIDB4OTAwMjc5MTYsIDB4YTdjZjA1MzcsIDB4ODBmMjJjM2QsIDB4ODc3Yjg2NmIsIDB4OWFlM2VkZTksCi0JMHg4MjUyZjMyMywgMHg0NmRlZmFiYSwgMHg4OWQ2ZGZiZSwgMHg3Y2ExNWVlNywgMHhlZDdiOWM0MSwgMHhmYWEyY2M2YSwKLQkweDJhNWU4ZDRiLCAweGU5NjM4ZDIzLCAweDQzNGI2NmY5LCAweDdiZGY5ZTBhLCAweDMzNDJjMmNkLCAweDc3YmY5N2MxLAotCTB4ZTUxYmZmNzgsIDB4MWRkYjQyZTAsIDB4Njk5YjJmYmYsIDB4MzNkNmYxODcsIDB4ZDZmOGNmM2EsIDB4MTNkZGVmYmQsCi0JMHgxZGYwMGU5YSwgMHgxOTI5YTRmOCwgMHhkMmE3NDBlZCwgMHhhNjFjNDc4ZSwgMHgyM2ZkYmUyYSwgMHhjYjVkNGY1MSwKLQkweDc1YTU0ZjQ4LCAweDMwNmU3NDJhLCAweDM2MTFjYmFkLCAweGI3ZDNmY2U5LCAweDc2NWVkYzJjLCAweDcyZGU3ODViLAotCTB4YjQ0MmRhMmEsIDB4N2ZhNWIzMmYsIDB4ZWY0MTNmZDcsIDB4MGZlYTBjYzcsIDB4N2I5ZTFmODEsIDB4YTk4ZjlkOGUsCi0JMHg0ZWNmOTRmZCwgMHg3YzMwZGVmNCwgMHhiZmI5ZmM2ZiwgMHhhZDRjNzdkNywgMHgyYTg5ZjNhMCwgMHg2NmE3N2ZiNywKLQkweDkwM2ViNjY3LCAweGNmZWJmYmNiLCAweDc5ZTFmNDk3LCAweGZhNzIzOGNlLCAweGJkZWYzMTE3LCAweGM3Zjc0ZTE2LAotCTB4NjQ3NjhkNzIsIDB4OGZkYjk1OTcsIDB4MWRmMzE2ZmYsIDB4YTM5MmRjNjgsIDB4OTY1MWJmM2YsIDB4ZmZlOGRmYzAsCi0JMHgzMzVmZjJhNiwgMHhlNDg4ZmY2OCwgMHg2OGY1OTZiZSwgMHgzZjcyYmNmYywgMHgxMWZjNDllNSwgMHgzNjE5YWY4ZSwKLQkweDU3N2Q0NzBlLCAweGNhMDRiMmIxLCAweDk3YWU0ZTE5LCAweGU1MGViMGQyLCAweGViOWM1NTBjLCAweDY4OWNmYzY2LAotCTB4MmI1NjQ1NWEsIDB4ZTI4ZTVmOWUsIDB4NWE3M2FmODEsIDB4MWMxNmJmNGYsIDB4N2RjM2RmY2YsIDB4N2MwZmI0ZGYsCi0JMHgyOWViZjIwYSwgMHg3ZmVlMzlhNCwgMHhmZDExYjZjYywgMHhhYTgyNWI2NywgMHhiYzUyZjQ4NiwgMHg5ZDIyNTc4ZiwKLQkweDNhMjM4Y2Y2LCAweGVjOTU4ZmQ5LCAweDVjM2E0NjRmLCAweGRlNGNmMmNiLCAweDJkZWMxZjI4LCAweDljNjI3YTA1LAotCTB4YjZmMTRmYjQsIDB4YTczZWU4YjEsIDB4ZTM0MGJmOWMsIDB4MjNlNTk1ZjgsIDB4Yzg3N2UwNGEsIDB4ZWE1YTA1ZTcsCi0JMHg3ODRmZGMwYywgMHg4MjU4MWVjNCwgMHg3ZTExMzI0NywgMHg2NzhjMTY1YiwgMHg0NzhjZGUwZiwgMHg1ZGViZWRkMiwKLQkweGY0ZTAxNTRkLCAweDNiNDBiNWVkLCAweGJhMzYwYmQ0LCAweGZlMDAzNjliLCAweDQ3MDRhNmY2LCAweDZiOTc5NmUyLAotCTB4MzBlOWEzYmQsIDB4Yjk3MGE3YjYsIDB4NjhlOGQ4MjgsIDB4ZDFjOGI5NDIsIDB4ZTYxZjNjM2MsIDB4NWYyMmU3ZjQsCi0JMHg1MDNkZDQwZCwgMHhkYmFiYWYxZiwgMHhhZjJhZWE2MiwgMHhiZWQ1NzVjYiwgMHhjODQzZTdmYywgMHg1YzVkNzVhNywKLQkweGQ2ZjAwNmJlLCAweGZlYTBhYzU5LCAweDdlMTM1ZjNjLCAweGY0Mzk4MzkyLCAweDU0N2ZkZGZiLCAweGJlMzQxMzgyLAotCTB4ZWRjODVkOGYsIDB4NGEwN2RjOTgsIDB4ODFmNjJlZDAsIDB4ODI4YjU4YjIsIDB4MWUwNDc2N2EsIDB4ZmY0N2NiNjAsCi0JMHg2Y2NhOWJiYSwgMHhkY2E1NGZkNiwgMHg1OWRiYzhkZiwgMHhlYTA0NjA3YywgMHg3NjYwNTM1MywgMHgzNWU3ZDIzOSwKLQkweDE4Zjc5NzBiLCAweDcyYjFlZmJjLCAweDJkNmJkZDNlLCAweGY5ODU2NTlkLCAweDYzZDAxZTFlLCAweDQ2YmE1ZjdjLAotCTB4ODFiNjY5ZTgsIDB4YzE1ZWVkZWIsIDB4OWIzNjlmYmIsIDB4YzljMDFhNDIsIDB4NzllODM4NzYsIDB4NTUzZjM4OGQsCi0JMHg0YzgxY2VmMywgMHhkNGY4ZDdkYywgMHhjOWUyMmFjZiwgMHg3YjA4NWNjNSwgMHg1YjVmOGYxMSwgMHhiOTQ2ODIyZSwKLQkweGVmOTA3ZmE4LCAweGNjN2M4MTliLCAweDIxZDU3YzQ1LCAweGQ5Mzc1MDVjLCAweDg0N2NlOWJhLCAweDg3ZjY5ZWU1LAotCTB4ZmYzNzE4Y2MsIDB4NzNjMWUyZDgsIDB4YmViOWQ1OGUsIDB4YTJmZTc4ZmQsIDB4MGZhZTVmN2EsIDB4YzNiZGU1NTUsCi0JMHg5ZDU3N2M3OSwgMHhkMTM5OWVkMiwgMHhiYWNiZTUxOSwgMHgyMWQ5NGRjZSwgMHhmYjI3ZjdjMCwgMHg5NWYyNDc3ZiwKLQkweDYxZWM4NzhmLCAweGEzOGVkYWZjLCAweGQ3OWUxMDVhLCAweGExYTdiYzc1LCAweDQ1MjRmZDYxLCAweGRhM2U4MWZhLAotCTB4Yjg3N2JkYjcsIDB4OWMxMmY5MmYsIDB4M2M2NjU3ZWYsIDB4YTc4MDM4NTksIDB4MTRlZTk2ZDEsIDB4YzNjOTc5ZmQsCi0JMHhhMGZkZTdhMCwgMHgzZDAzNWZjZiwgMHhkMDIxZTU4ZiwgMHhmM2QwN2VmZiwgMHhkN2Y4YmU0NywgMHhhZjNmZDQ0YywKLQkweGNjZDdjMjVhLCAweGNkOWU3MWMxLCAweGUxNWU2MGY3LCAweGMxZjg0ZjUzLCAweGI0ZmY1MDg5LCAweDNkNmY4YzYwLAotCTB4NmIzZTU3ZDQsIDB4N2ZiYzYwMGUsIDB4OTY3MTZkNDQsIDB4NjA4M2ZmNDAsIDB4OWRmZGU4NDcsIDB4YzJmNGVhZmYsCi0JMHhkYjA1ODNmMywgMHhmNDcxYmQzMywgMHhkMzY3OTVkZCwgMHg2MDk4MWY5OSwgMHg3Y2VmOTk3YiwgMHgzNjA3OGY5NCwKLQkweDk3NmM5YmZhLCAweGJlYjlmODAyLCAweGVhMThhYzU1LCAweDBkOTM3OTVhLCAweGE5OTM2NWU0LCAweDFmNjJkMWZkLAotCTB4YzczODY3ZDUsIDB4Y2U1OTdmODEsIDB4ZjJiMTg3ZTUsIDB4Mjc4ZTUyYTYsIDB4NzFiNGRmYWEsIDB4ZGZkYzBjZDMsCi0JMHg4YTdiYmI1YiwgMHhjODlhN2M4MiwgMHg3ZDlkNTZkZSwgMHhjODI1Y2U4ZSwgMHg2YjI2M2U3YSwgMHhkNGFhZWY4MCwKLQkweGFhNTllNTEwLCAweGNlODRmZWNlLCAweDI3MWFjYzMzLCAweDYxZmU2OGYzLCAweDFmMmRjNjhjLCAweDhlZGQ3ODg2LAotCTB4MTMxNzdjN2IsIDB4YmRmODQzYzksIDB4NjhiMmY2YzIsIDB4YWJjMWY1MWQsIDB4ZDBiZTAyYTksIDB4NDEzMzRkOGQsCi0JMHgwY2IxMWZiZSwgMHhkY2YxZmJiNCwgMHhlMTJiOWFhMCwgMHg1MjNjMjE2NywgMHhmYjI2YWFmYywgMHgwOTlhNmUyZiwKLQkweGNkNzZlYTQxLCAweDM2ODY3ZTM4LCAweDAyYWZkZmQwLCAweDI0OWFiZTFmLCAweGZjNjgyYmViLCAweDYyOTNmZDQxLAotCTB4ZjFjOTk3ZmEsIDB4ZjNjMmUzZWIsIDB4Yjc1YTNkODgsIDB4MmZmNTdmNDEsIDB4NTlmYmU4ZDYsIDB4M2I2OGZmODgsCi0JMHhjNzI3OTc4ZCwgMHg1NmYwNDc1ZiwgMHhmNmYzMzcwZiwgMHhiZjY1ZTg1MCwgMHg0ZGNmYTUxYSwgMHhlYjRkZmRkYSwKLQkweGRhYWY2ZjAxLCAweDk3YThhNTdkLCAweGE0NjVhZmZhLCAweDdjZmY5MTZmLCAweDQ5Yjg3ZTNhLCAweGIzYWFkOWU4LAotCTB4MzlmZDMxNTcsIDB4NThiNDliOTIsIDB4OTBjNzVjYmEsIDB4ZGUzZWU3NmUsIDB4YTJmMTg2ZjksIDB4N2E2MDRjZTMsCi0JMHg3ZTA0N2ZmYSwgMHg2ZmI3NTg0ZCwgMHhlZGQ3NjJiZiwgMHgwM2NlOTBiMywgMHhjNTEwYjNmMywgMHhmMzViNTVmMywKLQkweDA3YTc1ODU5LCAweDVmMWMzZmZlLCAweDAyN2YwZTE3LCAweDVmZmU2NjM4LCAweDYxYWM2Mzg2LCAweDQ1MWMyOGJlLAotCTB4ZmVmZWY4MDYsIDB4ODAyNTk0NzAsIDB4MDJiN2Q2NjMsIDB4OTU5ZGFjNDcsIDB4Njc2MTdlZTUsIDB4MGQ1NDUyZmIsCi0JMHhiZGI2M2JmNywgMHg4ZmZkYTU2NCwgMHg5NmM4NTM3NCwgMHhjZWJhNzY4NywgMHg1YjdhNzY0NCwgMHhiZjFmOGI2YSwKLQkweGM2YjZkOGJmLCAweDFlZTFlNzRiLCAweDcyMmEwNGIxLCAweGRkMGE3ZmMxLCAweGFiZmRhMjY5LCAweDZlYmU3OTZkLAotCTB4ZjZkYWRmZGMsIDB4MjZiZTc5MmYsIDB4OGIzZDM0OWMsIDB4MDcxNjYyZWMsIDB4M2M1YjZkODEsIDB4MDg3ZTJhZmYsCi0JMHhhM2VmZWY4ZCwgMHgzZTNiNDRlOSwgMHhmNjQ2YzUzMiwgMHhlNTljZGI3MiwgMHg5ZjRmZmY5NCwgMHhkYTFjNzY3MywKLQkweDBhN2U5ZDQ5LCAweDY2NTMxZDkxLCAweGYzMzUzZjkzLCAweDNjMjZkNmJlLCAweDE0OTE5MWVmLCAweDJmZmQxYzc4LAotCTB4NzRkYWQ0MjUsIDB4NzZiYzc4NzgsIDB4NTg2NjdmYWUsIDB4YmU2MDY2ZGIsIDB4Y2Y1OTViNjgsIDB4NzM5MzhjMzgsCi0JMHg4MDNlNzAyZSwgMHhmY2Y1YWJhYSwgMHhmZjMxMTMxMSwgMHhiYzFhZGM3MywgMHhiYjc4MGFkNiwgMHgxYmYyMmFjYSwKLQkweGYyODUyYzI5LCAweGM5MDUxNTYyLCAweDZkZDJjMmE4LCAweDVhMjUzZWQwLCAweGE3Y2FmODdmLCAweDMxOTFjZjI5LAotCTB4ZWZjODYwYWYsIDB4YWY4MTRiMTgsIDB4YTY3YTNhYmMsIDB4ZjY0MWZmYTksIDB4NDYxYWZlYjksIDB4OGJmNDcxNzksCi0JMHgxNzJmZWZmNSwgMHgwMjdkN2Q3ZSwgMHhiNGU4MWRmZiwgMHhhZDFjZTExYywgMHhkNGMyMWNmNCwgMHhkMWU3NWQ2MSwKLQkweGQ0NWYxOGQ5LCAweDEzOTk1NWFlLCAweGU0NmQ0OTZjLCAweDhiZmZkYzc3LCAweGZkNjIwN2YxLCAweDIyZGU1OTVhLAotCTB4N2M0NGFjZmMsIDB4ZjM5NThjZjEsIDB4MjVmZjgwZTUsIDB4ZTQwZmFkZmMsIDB4YjNmMGEzN2UsIDB4MWVhMmVkMmEsCi0JMHg5ZTUwNmU3MywgMHhmZTEzZWMxNywgMHhmYzYyZGY0ZiwgMHgzN2Q2MTI2OCwgMHhkNzY5OTc4YywgMHhlZTdjZTkwNCwKLQkweGU1ZGViMTcyLCAweGQxMzM0YTViLCAweDdmZGNhOWJmLCAweGQ5NjNhZDIzLCAweGY3ZTRkOWU2LCAweDg0YmNkZjJmLAotCTB4Nzg0YTdiY2UsIDB4OWJmYzYzMmEsIDB4NTEyNjVhY2YsIDB4MWQxMTJiYmUsIDB4ZmQyMjFmYTQsIDB4MjczZjU4OTksCi0JMHhkZTE1N2JkMSwgMHg0MWNmYTI1NiwgMHg1OGVkYWZjZiwgMHhlNjdjYzM2ZSwgMHhmNjdmYThjNCwgMHg3MzY3YzQyYSwKLQkweGYxYTZkY2EwLCAweGIzMWUwOWVmLCAweDFiNmQzOGYzLCAweGI2MDA1ZjdlLCAweDM5OTY1MGZmLCAweGI5NTdkNzE1LAotCTB4ZGYwOTIzMjksIDB4NzE2YjYyM2YsIDB4ZjkxZTVjYTIsIDB4NjFkN2Q3ZTIsIDB4ZjA5M2Y0M2YsIDB4OTUyOWNjYmMsCi0JMHg5ZWIyYTVmYiwgMHhiNzJiOWUwOCwgMHg1NWU5M2Y3MCwgMHhlMWFjY2YzMSwgMHhlZmYzNjYxZiwgMHgxODc5YzRhYiwKLQkweGU5N2NhNjk2LCAweGVjN2VmYzQ4LCAweGE2OWQ5ODc5LCAweGFmOTAzYmIyLCAweDlkNzgxMGVmLCAweDg3M2UwYjYyLAotCTB4MTU1NzkzZjUsIDB4NWVhNzlmMTIsIDB4YzdjZGQwNzksIDB4NzlkNzllMzcsIDB4ZDNhNWM0NGMsIDB4ZWU0ZGMzZmIsCi0JMHhiZmRmM2E3NCwgMHg3MWU1ZTFkYiwgMHgyM2FjMTk0NiwgMHg2NTNlNGZlZCwgMHg3ZjFlOGVhOSwgMHhhZjg5NzhiMSwKLQkweGM1MjhmZTMxLCAweDQ3ZDdhNDM4LCAweDcwMmNlMGYxLCAweDA1NzlmODJmLCAweDdlNDhkZjIzLCAweGE2ZjNlYWZiLAotCTB4MmRmZjA2NmQsIDB4NjlmNGRlN2EsIDB4OGI0ZWRiZjIsIDB4YWNmNWU1YjgsIDB4NzI0YmU2YzgsIDB4NTFlZjZjMzEsCi0JMHhkZWJkNGUzMSwgMHhiZjQxNmU5OSwgMHgxNmJjYzAzMCwgMHhmNWFlNGI4YywgMHgxNmViOWNjNSwgMHgxMWFlZGFlNywKLQkweDdkYzIwOWZhLCAweGZhMGRhZWZhLCAweGFmMTVmNjE5LCAweGNmYWM2NjlmLCAweDM3ZWIxYmY2LCAweDdlZmZjNDU0LAotCTB4ZWUzNzRkOGIsIDB4ZGYxNjlmZGIsIDB4ZjAyOTllNzUsIDB4YjEwY2E3MjYsIDB4MDAyZDgyZGUsIDB4M2JiZDZlYjQsCi0JMHhhZTEyN2Y1NCwgMHg5YmNiNDc3NywgMHgyNmZlN2Q2ZSwgMHhiMDU4NGYzNiwgMHg0ZjIxMjM0NSwgMHg5MDBlZWUzNCwKLQkweGJjYTQzYzBmLCAweDlkNjg4NTgwLCAweDk5ZGRhOTRmLCAweGMwYTBiOGZhLCAweGI1NzljZTIyLCAweDEyZjMzYWZmLAotCTB4MzZjMzkxYTAsIDB4OWZlYTI2NmMsIDB4ZTdlYjk1NWUsIDB4NGFmZWZiYmUsIDB4NGIxOGViZjEsIDB4Y2VmYzBkZTQsCi0JMHgxNjhiY2M3OCwgMHgyODUzZWUyZiwgMHhmZjI4NWEyZiwgMHg0ZWRiM2Y1MSwgMHhhNWJmMDNkZiwgMHhmN2ExOTM1YywKLQkweDM5MDBjN2M3LCAweDVkMzNhZTEwLCAweDVmM2M4NjYzLCAweDliYWNmNzNhLCAweGI3OWVjNWZhLCAweGU3Y2RmYmZmLAotCTB4Y2VjNzNjMjQsIDB4ZTIzZTVlYzcsIDB4MTYwMDdiYzYsIDB4ZjlkMTM2NmMsIDB4NWM4Yjg1YWIsIDB4YTQ4ODlkZjQsCi0JMHg2MzM4ZWM2ZiwgMHhlMTcxYThiNiwgMHg4NGZmODQ0ZSwgMHhiOGY0Yjc3NCwgMHg3NGU2ZmY3MSwgMHg0YWYyOTliYiwKLQkweDZkZTNlZGIxLCAweDVmOGIzN2NhLCAweGJhZjMxYTE3LCAweDQzZmQ5ZWE3LCAweDU3ZDYwNDYxLCAweDM3NWNmNGFiLAotCTB4ZDhlMjk3MmUsIDB4NjM4YzM2ZjEsIDB4NWY3MTlkMzcsIDB4M2ZiZTdhNDksIDB4YWVmYmEwMzMsIDB4ODZmZGI3YTksCi0JMHhlM2NmMjBhNCwgMHg0OTAzYmUxOCwgMHgyZjEyOGZjNCwgMHhlYTcwZjA4OSwgMHg3ZTE2ZWRmMCwgMHhkMTY0MzI3ZSwKLQkweDI4YzZkN2U3LCAweGVmOTQzOWZlLCAweGE3YjJhNGRiLCAweGQxYTc3Y2UyLCAweDdiZTcxMzY0LCAweGM0NGM5ZWQ1LAotCTB4ZmRhNWRkNTcsIDB4MmYyYWI3MTQsIDB4NDFlZWU4N2UsIDB4N2VmMTYwYmQsIDB4MjNlMGUyOWYsIDB4ZTk3YjA3MTAsCi0JMHgzYzc3NWVmYiwgMHhmYzFiZmRmYiwgMHhjNGVjMTBlZSwgMHg4ZmI3MWIwMiwgMHgxMmYzZWRiMSwgMHgxN2Y4YTM5YywKLQkweGVjZGY4NzQxLCAweDliZDFlNGZmLCAweGQwMTNlMDg3LCAweDZmMzA3MzNjLCAweGQ1NTFlZjM1LCAweDNhYWVmOTgzLAotCTB4ZGJjOTBmNGIsIDB4MzcxOGFmZmMsIDB4NzZmYzdmMTEsIDB4YTBmMjlkYmYsIDB4ZTlkYTE2MGIsIDB4ZjlkODg4ZmUsCi0JMHg4ZjNkYWI0ZSwgMHg5ZGYzMGNkZSwgMHhmZjcwNzgwNiwgMHgwMGE4ZjRmZiwgMHg2NmY0ZjFlMSwgMHhmNmZiODNkNSwKLQkweDk4M2FlN2YzLCAweDU0ZmZkNzRkLCAweDA4ZjlmMWM3LCAweDBjY2U5OWRmLCAweGJhNzAxZjNhLCAweDQ5ZGYzZTJiLAotCTB4ZmI2NTVkM2MsIDB4NDVjNTc5ODYsIDB4ZjIwOWZjYzYsIDB4OGVhZGNhMWYsIDB4M2M1N2ZlZmYsIDB4YzcwYWJiZmUsCi0JMHhkN2UxYzI5ZSwgMHhkNTNhOGI5ZiwgMHg4ZjFjOWY5MSwgMHg3YzFmNzJhZSwgMHgxY2YxOGI0YywgMHgyZWU4MDk1NSwKLQkweDc3NWViNzFlLCAweGIxODBhY2IwLCAweDBjOGViMjYxLCAweGEwNzVmMzBlLCAweDcwNzFlMzllLCAweGZiMjRmMTA0LAotCTB4ZGQ3Y2Q0M2YsIDB4ODU3N2RjNGMsIDB4MDNmMTFmYmEsIDB4OWQ1YmY5ZWYsIDB4Nzc2MmJmZDQsIDB4ZThjZmMyMTEsCi0JMHgwNTlhYjliYiwgMHgzYjAxZTY0ZSwgMHg3NGEzOTlmNCwgMHg1NGYwMGRiMywgMHg0MzQwN2RkMiwgMHg2NDc1ODU3ZiwKLQkweGM0NmJmYWQwLCAweDZlZjBiMWZiLCAweDY4ZmQ4YmIzLCAweGU0Y2E4N2JiLCAweGMyM2ZmZGI3LCAweGJhM2E0YTdiLAotCTB4NDlmOGJjOTMsIDB4ZmM2YTQ3NTYsIDB4NWQ5YTAwNzMsIDB4NjAwMzljMzEsIDB4ZjFlNTBmNmEsIDB4M2NmMDY2MzIsCi0JMHg0NzNlZmY2YiwgMHg4Nzg5NGRiOCwgMHgzYmZjZjU5ZiwgMHgyYWJiMThhZiwgMHg4ZDQ2YjdlNSwgMHgxMWFkN2Q5MCwKLQkweGU2YWJmNWY2LCAweDViZGYxMGVmLCAweDlhYzQ5MmJlLCAweDM1NWRmNDZkLCAweGJmZTAxM2UwLCAweGI0MTcxN2ZlLAotCTB4N2FmOTQwM2QsIDB4MWNhYzlkZmUsIDB4ZjMxMTY0YTcsIDB4NDdmYWU5YjcsIDB4ZTMzY2YyNmMsIDB4ODMzZDdjYzMsCi0JMHhiZDcwZTdkZSwgMHhmYjAzM2EwMiwgMHg0Y2Y2YTY2NywgMHgwMWJmZjI1MCwgMHg3ZTMxNmUxZiwgMHhlYjZiNTI2NywKLQkweGY0M2Q0NDI5LCAweDE1ZmMxMjg0LCAweGVkZmVhZGQyLCAweDc3YWM0YzllLCAweGZjOTI3OWJjLCAweDY3YzU3M2FlLAotCTB4N2YzMjA1ZWUsIDB4ZWVkMGQxMTQsIDB4M2E1ZGRkYWMsIDB4YjU3ZjI4NmMsIDB4OWQ0MGUzMDYsIDB4N2RlMjhjN2UsCi0JMHhmMTg3YzUxNiwgMHg1YWJjYzNjNiwgMHgyYzExZDljZCwgMHhkZDE0MzY5NCwgMHgxMjY4NTliMiwgMHg5ZmRmMzNjNywKLQkweGRmODA5OWU4LCAweDZlM2FjMWVmLCAweDJmZjUwMzlkLCAweDNmY2NmNDYyLCAweDY5ZTlmYzJhLCAweDU3NGNmZmRjLAotCTB4NzMwZDQxZDksIDB4ZGQzNzZhNmMsIDB4MjE0YmYwYmYsIDB4ZjIxNGJmMmYsIDB4MzNkZmYxZDIsIDB4NzRmYTQ2YWUsCi0JMHhkY2YyNjliYywgMHg5N2UzYWI5MywgMHhjMWIyMTYyNCwgMHg3YjViZDc3YiwgMHg4ZWZlODI3ZSwgMHhlYmY2Y2JhYywKLQkweDg2OWQyZmMxLCAweDcyZTM2YWZjLCAweDY2YjVlNTIzLCAweDdkMzk3YzUxLCAweGZlMjZlNmQyLCAweGM0NzZmNjFjLAotCTB4YzdjZTc5OGQsIDB4ZmYyM2U5NTEsIDB4N2YyNzFmYjcsIDB4Y2NkM2EzYTEsIDB4NjFjZDkzZjAsIDB4YTBlNjgyOGIsCi0JMHhjMWZmOGEzMywgMHgyYTNkNzBlMywgMHg5NmEyMWRlNSwgMHhkZTQyNWMwYiwgMHhlNTdiZGY5MSwgMHg5NTFlNTlmNywKLQkweGMyYjVjN2ZjLCAweDNjNjVlYzdmLCAweGZiMTFhODdlLCAweGYwMmE3ZmFjLCAweDFhZmUzOWQzLCAweDVjNjAwYjNiLAotCTB4M2Y4ZjI3ZjcsIDB4NzhmYzg1MzksIDB4ZGYyZDlmYTMsIDB4YmRmNjdlOTMsIDB4YTU1ZTM5ZWIsIDB4MzhhMzYyZGUsCi0JMHhmMjY2NjQ3ZiwgMHhhZjI5NmJmZCwgMHhmNjg3YWIyYywgMHgyMDdmMjRiMSwgMHgwM2QzYzRmZiwgMHhkNDdhMGE5NywKLQkweGU4MTkzNTljLCAweDQ2YTdhNTFhLCAweGRmY2Y5NGY0LCAweGQyMTI3YjA3LCAweGZhNWNjMzlkLCAweDM3N2QwMTcxLAotCTB4NTFmMzFiNzMsIDB4NjZiNmUzM2UsIDB4ZTRlOTBiMDcsIDB4M2U1MWUzYjYsIDB4YzYzZGM3NmYsIDB4Nzk4OTY3ZjksCi0JMHgzZTM4OTI1YiwgMHhmODc3YzQzYiwgMHg5MWRmYWExZCwgMHgzN2Q1MTQ1YSwgMHhhZTA3NWY4MCwgMHhhYmNiZmQ0ZiwKLQkweDc5NDk4ZjE0LCAweDk1ZGNlMzkwLCAweDdlZTFmN2M0LCAweGFkZjM1N2YxLCAweDJiYjY3ZGIyLCAweDc2YTVkZWJhLAotCTB4MmYyNGI3ZDMsIDB4MjdkZTQzN2UsIDB4MjQ5OTlmOGEsIDB4YzVlNTg5NDcsIDB4OTJmMjE1ZjMsIDB4NGQwNWY4NGUsCi0JMHhmOTdiNDZlYSwgMHg5ZjFmZjA5YywgMHg2OGFhNmMzYiwgMHhkYjdmYzM4YiwgMHhlNzNkN2M2ZCwgMHhlYzAxYTg2NywKLQkweGRiODQ0MTc3LCAweDMyZmQ0NGIzLCAweDE1ZjljNTUzLCAweDNjNTg5NzgxLCAweDNmYzdlN2E0LCAweGQwNTZiMmZmLAotCTB4N2Y4Y2E2YTUsIDB4MjJmNzhjY2YsIDB4Y2EwYzNlNjAsIDB4ZDc4YzFmNmMsIDB4ZDEwY2U2NWIsIDB4ZWYyMmNiZjMsCi0JMHhjZDQ5M2VlMiwgMHhjYTJmNTZmMywgMHhmNmYzZWY2ZiwgMHhmNDliY2MyYSwgMHg2YWFkNmYzZSwgMHhjN2E2MGU3MywKLQkweDFlOGQ2ZmU2LCAweGViZmQ2ZjdmLCAweGY0MmJmNDlmLCAweGJlY2QzYjYzLCAweGYzYzFkZTMxLCAweDg0NWRkOTI3LAotCTB4OTNiZDAxOWYsIDB4NjhkODNmYzAsIDB4M2IzYzcyNzMsIDB4NzkyZDllMzgsIDB4NWJhNzhmNWMsIDB4YjFmZjc4OGQsCi0JMHgzMzc0ODc5MCwgMHhkN2EwYjY0NCwgMHhmZTc5MDVhNiwgMHg5MGJiMzllOSwgMHg1Yjg3OTAwZiwgMHg0ZWVjMmY5MCwKLQkweDJjN2VmZTAzLCAweGFmYTk2OWZjLCAweGM2NTc1ZjFlLCAweDdlZTFhNzhlLCAweDZmZjY4ODZjLCAweGM5MWY3ZTNiLAotCTB4NGI3YTc5YzYsIDB4YjU2ZmRmZTMsIDB4NjMwOWYwNWIsIDB4ZWE2ZWZmNDYsIDB4ZmI0MmFmNGMsIDB4Njc4YWVkZTgsCi0JMHg5ZmY2OGIwYywgMHhlN2JmY2VkYSwgMHgwNjFkZGIzNSwgMHhmMDJjZGJiZiwgMHg3NjM4ZTUyMSwgMHgzY2M0MGY5ZSwKLQkweDkwY2ZhODFkLCAweGMzMWVjZTJlLCAweDAzZTRiYjNlLCAweDdhZTRkN2E5LCAweGZkOTExZGE0LCAweDY3ZjgyZjdlLAotCTB4OGNjZmUwYmEsIDB4ZmMxZjNlMjYsIDB4Y2E5YWMyYjMsIDB4ZGVmZjAxZWQsIDB4Nzg0MWViOWQsIDB4OWRhMmIyMWUsCi0JMHg3OGYzNDE2MCwgMHhhZGRkNjdhMCwgMHgxNmY3ZDE4YywgMHgzM2ZjMWY2MiwgMHhiYjJkZjA0NywgMHgwN2U4MWQ2ZSwKLQkweDdlMTZmZTkyLCAweGQ3Mzg4NzVmLCAweGQ0MDdmZDI4LCAweDdhOWQxMzRmLCAweDBlMWM0M2I4LCAweDU1ZjVjMmIzLAotCTB4NzA5MjdlOGMsIDB4N2NmYzNhYzAsIDB4MTM4ZDE3MWMsIDB4OGVkYzZmYjUsIDB4YjU4ZjQyYTksIDB4NjMyMmVmOGEsCi0JMHhmZTdmZTZlNSwgMHg1NjliOTExZiwgMHhlOTAyNWU3MSwgMHhiY2RmNGYxMCwgMHhjOTZlZWMyNSwgMHgwNTYyZmVkYiwKLQkweGMwNGM2YmY4LCAweDYyNGZjM2U5LCAweDFjZTdiYTRhLCAweGIwYmQ0MGIwLCAweDM3Y2I0MTRiLCAweDgyODU1NzIwLAotCTB4NDViYzcwZGYsIDB4MThmOGEzZTMsIDB4ZjAzMmU0OWQsIDB4M2UyYTNmZGYsIDB4MDM2NmRmMGEsIDB4YTNhMmRmZjAsCi0JMHgyZTI0OTRlNywgMHhmMzJhMTljNywgMHhjM2ZlZGYxMywgMHg4MDM4MWZjMiwgMHgwMGQ0ZWZkZiwgMHhkZjM0NTA1ZCwKLQkweDk2OWJmMDFhLCAweGJmNDc2M2RjLCAweDQzZTY2ZGU3LCAweGZiNzRlOWJmLCAweDhjNzhkMzEyLCAweGJmNzBiNzVmLAotCTB4NmUyZjQwNjUsIDB4YmQwN2ViZTYsIDB4NmQ3YThlZDYsIDB4NDc3ZWRiY2MsIDB4MjE2N2Q0MTEsIDB4NWJjZTMwZmQsCi0JMHhkMzc5ZjhjNCwgMHhlMzE4NTc3NiwgMHgxOThmMjkyNSwgMHhlMDY2N2I3MywgMHhhMzlkNDczZSwgMHhmNzVkYmQ2MSwKLQkweDI3N2ZhMDdjLCAweGNhOGRjZmY0LCAweDM1Y2EwZDc1LCAweDgyYjUzYmNjLCAweDJiNGViM2I3LCAweDhiMTYwZmRkLAotCTB4NDdiZWM2MmYsIDB4ZWZmMjI2ZjMsIDB4N2FlMjRjNmUsIDB4ZDIzNGY1MGQsIDB4NmVjMjFjYTksIDB4NGFmZGMwM2IsCi0JMHg3OThjYzg2ZSwgMHhlNGM2NTdkNCwgMHg5NTdkYzQ0ZSwgMHhhMmMxNDk0MywgMHhhNjdlZjAzNSwgMHgyOTk4MzczOCwKLQkweDI2NjY5YmNlLCAweDEyNmI3MmYxLCAweDBlOTljYmQ3LCAweDVjMWQwNjVlLCAweDc5YmE2N2JmLCAweGVmNzlkOGZmLAotCTB4NTRkZWZkMTIsIDB4ZWQ3ZjA2NGMsIDB4N2MzYzgyMDQsIDB4MzhhZjlmMzAsIDB4MzI3ZTg4Y2IsIDB4ZWQ0MmJmNGYsCi0JMHg4MDAyY2RmZiwgMHg5OTk3NDU2ZiwgMHg0ZDNiMDdmMiwgMHhlYTI0ZmFjMSwgMHhmYjFkMTJhNywgMHgwZjhiM2Q0YywKLQkweDFlZjEwMTIzLCAweGYzMTI4YmE1LCAweGIxNjdkNDkzLCAweGEzZWEzNGZlLCAweGZjZjIwZDliLCAweDNiZTM4MjVkLAotCTB4OTE5MGFmYjgsIDB4ZmFmY2JmZDgsIDB4MDI3ZTdkN2MsIDB4YjdjMjZiN2YsIDB4ZmE0OTZmZTIsIDB4OGM4MGJjY2IsCi0JMHgzMDdmMjViZiwgMHg2YmFkMjBmNiwgMHhiZmNlNGNlYSwgMHg2MTc3YWZhMCwgMHhiYWZhMGFmYywgMHhlYmM5MWE2OCwKLQkweDZiYmM3ODBmLCAweDcxOTE3OGUzLCAweDRmNjY2NjdjLCAweGMwYjdjNjFkLCAweGJjOWVmNDg3LCAweGU0ZjcyOWY3LAotCTB4ZTQxZTc0OWIsIDB4ZjUzNzI0OGQsIDB4YjdmMGU1ZGIsIDB4NWJjOWM1MjYsIDB4Njg2OWE4OGQsIDB4ODQ4N2ZiYTIsCi0JMHg0MmY3OTVkZCwgMHhhZmRmNmE4ZCwgMHgxOWJlM2FhOCwgMHhmZWUxYzU1NSwgMHg2MGM1OTI2OSwgMHg3ZDQ0M2ExNywKLQkweGQzOTcxMjc3LCAweGE1MTE1NTUxLCAweGQ4OGRmYTAwLCAweDAxNTE0M2JhLCAweGZjZWQxMTllLCAweDA2ODhmNzdjLAotCTB4MGM5ZmY3NDYsIDB4ZjBlNjFiY2MsIDB4OTU4NzBkOGUsIDB4NzBhMjhhZGIsIDB4MTc2NjliMzcsIDB4ZTY5ZTAwNzksCi0JMHgwOWFmODc0YywgMHhlMGNlNjk5ZSwgMHhjZDc3MDgwYiwgMHgwMzlkMDhiMSwgMHg1YmFjN2E5ZCwgMHhkMzI5NzhjNSwKLQkweGYyMDVmZmU5LCAweDZiZDc4NDliLCAweGJjYzA4Y2Y2LCAweDg3MThlM2JkLCAweDlmYzA2NWIzLCAweDc5ZTZjOWVmLAotCTB4M2MwYWVmYzksIDB4YzlmYjA5YjcsIDB4NGVmZGQzMGUsIDB4MzM2ZjZlNGUsIDB4YTZkYjE5ZWYsIDB4ZmQyNjY3M2YsCi0JMHhjY2Q3ZTg1OCwgMHg3MmUzZWUyOCwgMHg2MTRmNzk5ZSwgMHhiOGJhMDNkYiwgMHhiMDNmM2NiMSwgMHgwZjk3OWYwMywKLQkweGJmMTEzNzFiLCAweDMwN2ZjZmI3LCAweGM3M2VlMmEyLCAweDE1NGQ1YjBiLCAweGY2ZmMzOGUxLCAweGE3NTM5NGI2LAotCTB4MmViOGQ3ZmYsIDB4Yzk1N2ZmMDksIDB4NDk2N2VjODcsIDB4MWRlZjlhMWEsIDB4YjcwNjBmODIsIDB4YTVlZDQ0M2YsCi0JMHg4NGRmYTY0ZiwgMHhkMDZjZDZmMCwgMHg0OGYxNmUxOCwgMHgwMzNhNjdiYywgMHgyMzlmMTAyNywgMHhjNDE1NWJkYSwKLQkweDlmOGU2M2M5LCAweGFlMGU3ODI4LCAweGNlNzk4YWJhLCAweGFlZjZkMjAzLCAweDdiYzFjYjZiLCAweDdjZWU2YTk3LAotCTB4NzllZjA3MmUsIDB4MzhjMGYwOTIsIDB4OThkNmVmODQsIDB4MGZkMjhiNzMsIDB4NjdlMTFmZjksIDB4NjcwMzNiOTQsCi0JMHhjZWJhZmM3MCwgMHhiN2JmYjQ0ZCwgMHg1ZmJmMDc3MiwgMHhjZmJhZTEyNywgMHg5ZWIwMmYxMSwgMHhkNWJmYzhmNSwKLQkweDU0NzhiZmMwLCAweDhkZmIwMTQ3LCAweDY4NTlhY2Y0LCAweDZhMjZlZmEzLCAweDYzZmU3MTc2LCAweDE4ZjBiNDFiLAotCTB4OGVlZmI3YWMsIDB4ZTQ3ZGEwOTgsIDB4YTYxZjdlZGQsIDB4ZWQ3N2FiZWYsIDB4ZjBlOTk2NTYsIDB4NGMyNmIyMzUsCi0JMHhiOWU3N2JmYiwgMHg5NzIyN2VlNCwgMHg0YmVkMTFmNywgMHhiMzhmODg2YSwgMHg2M2U0M2UxYywgMHg3MWQ5MmZjYywKLQkweGZkY2VjZjNmLCAweDFlNTJkZWFhLCAweDQyNWFmNDlmLCAweGFmZDBiZDYzLCAweDg3YzkzNzM3LCAweGJhYmQzYmRmLAotCTB4ZGVmYTBhZmIsIDB4MzViY2Y1ZDAsIDB4N2NhM2I4YTIsIDB4NmY3YWMwZjMsIDB4NDBmOWMyMjksIDB4ZGYyMGYzMzksCi0JMHg4MzVmZGU4MCwgMHgyNzI2ZjJmNSwgMHgxYTlmYmU0MywgMHg3N2E5Yzc0MywgMHgzYmY2YmU3MywgMHhjMzFlZjJkYywKLQkweDYzZDdjODg5LCAweDgxYWVkYzFkLCAweGVlYmYyMDVkLCAweGYzYzM4NTkwLCAweGRkNzRlMzNjLCAweDc1YzgxNDlhLAotCTB4ODdmN2UwNjQsIDB4NTRmMTg2MTEsIDB4ODZiYjQ1NGEsIDB4Mzg3NjA4ZjksIDB4YmQ1YmYwOTUsIDB4MzdkNjgzYjUsCi0JMHg3YmY3MTc3MiwgMHg5MmI1NzdhYSwgMHg4MmZkNGEzYywgMHg3YjdiYzBmOCwgMHg0NTdiZTJhNywgMHg0NzA0MGZjNCwKLQkweDk0M2I5M2U5LCAweDkyN2ZkMGUzLCAweGJjZjNjY2MzLCAweGM3ZWM3NzViLCAweGYwMTk4ODdiLCAweGQwMmZjNjBiLAotCTB4Y2U0YWZmYmUsIDB4ZTk2ZTJhM2YsIDB4Y2UzZGM4MGQsIDB4NTllN2M0NTMsIDB4MDk3YjkzYTYsIDB4YmZmOTFjNzcsCi0JMHgxZTc3ZTExOCwgMHhlNWM4M2VlYiwgMHg2ZmVmYzIzZiwgMHhlOTIxZmMxMiwgMHhmNWMxYzMzMCwgMHgyMWM3YTQ4ZiwKLQkweGUzMDBlODBkLCAweGEyNGJjYTFjLCAweGEyM2NhNDcxLCAweGZhMTFjY2ZjLCAweGM2OGNlNGM5LCAweDA5MGUxMjQ5LAotCTB4ZDk0NzJlZTcsIDB4YjgyOThlMTUsIDB4Nzc1YTZlZWUsIDB4ZTA5NTU2ZWQsIDB4MDUwMmQ3MmUsIDB4M2I3Yzc1YWIsCi0JMHhmYmY5YzFjZiwgMHhiNTc3ODJjMCwgMHhmOWJlNzgxZSwgMHg5ZjA5NDdlNywgMHgzZjBhMmRiNSwgMHg1NDcyZGFjNywKLQkweDNlN2E4NzliLCAweGUzMTlhY2Y0LCAweGZmMTlhYjlkLCAweDUxY2Y3NDdiLCAweDc3NTdjZmQyLCAweDc2ZDdiYzcwLAotCTB4NzM2ZjU2ZWMsIDB4ZjcyOGY5NDYsIDB4NzRjNTgxZTQsIDB4OTViYjc1MWYsIDB4ZTk5MjNmYTEsIDB4Nzg4Y2RlMGMsCi0JMHgwMjRmYzQxOCwgMHgyNWNmNTIwZiwgMHhmNDg3MTM5MiwgMHhmOTFhNDI1MywgMHhlNDIxZTAyOSwgMHhmNTIwZGM2MiwKLQkweGRmMTE1NmU0LCAweGZlN2YyNzMwLCAweDUxNWQ2MjRmLCAweDQxYWMxMGZkLCAweGY5Mjc5NDdjLCAweGRmNTBkODBlLAotCTB4M2NlODU0NGQsIDB4ZTkzM2I0ODcsIDB4ZjUxZTM4MzMsIDB4MzdiZGM0ZjAsIDB4ZDI4N2U2NGYsIDB4YjI1ZjhjOTgsCi0JMHg2M2JlZThlNywgMHhlMmI3ZDAxOCwgMHg1ZDA0YmJmZCwgMHgzZjg0NzllMSwgMHgzNzY4Nzk2NywgMHg3NGIxZGMyNSwKLQkweDZiZjA4MWZiLCAweDEzNTFmMGUyLCAweDQ3NmIxZmMyLCAweGZhYzA1ZjI0LCAweGY3M2RiMTlhLCAweDQxZWM4OWE0LAotCTB4ODZkNmM4NmQsIDB4OThhZjI2ZmIsIDB4NzVkZjkwZTYsIDB4ZjA5YjgxNjAsIDB4ZGY5MGIzNTcsIDB4NjdmOWJjNjMsCi0JMHg4NGQ0YWY1YywgMHg3NzdmNzQ5YywgMHgyNTZlNzA0ZCwgMHhkYmE1NDNlZCwgMHhjNTBmYjg3ZCwgMHg3OWI1MDc4MiwKLQkweGY3NzRjMWFlLCAweGNlOWZiZjNlLCAweGNlZGQ1YzMxLCAweDhmNDA2MGU1LCAweDRiZmE3M2I2LCAweDFmZDcyZWZkLAotCTB4Y2ZjNzM3NWQsIDB4ZWM4NThkMmMsIDB4NmRiYzUxYTksIDB4N2QwOGYyNGQsIDB4ZGZlNWNjMTAsIDB4M2NjZDdmYTMsCi0JMHg3YjE2NjZmNywgMHg4OGIzZDI5ZiwgMHhjZjViNWE4ZiwgMHgyZmFhZGMyMSwgMHhkMzVmYmI3OSwgMHhmMmM3MjdlZiwKLQkweGQ3YmFmNTU3LCAweGFjMmVkMTBhLCAweGE1NGMzYWNhLCAweGI3YTBmZjNlLCAweDdkMDU3YjU3LCAweDhiZTUxNDllLAotCTB4YTc5ODVmNDgsIDB4YzkzYjcyN2EsIDB4MGQwN2Y1NGQsIDB4MGFjZTZmMjQsIDB4Yzc5YzY3YWUsIDB4ZDYzMDdhOGMsCi0JMHhiNDc3MmE1ZiwgMHhkZWZkYzJjZiwgMHg5ZTJhMWZmMiwgMHg1ZWQ4OTYyNiwgMHhkZTc4NTBhYywgMHgyZmFkYTNmMywKLQkweGMxOWNmMWJiLCAweGUyNmJiZGMwLCAweDBlMWJmMDNjLCAweDNiYmRmZmNlLCAweDk3YzRlMTAxLCAweGZlNTBkYTBkLAotCTB4Yzc4ZDU3ZTIsIDB4NzQyOTZmMjIsIDB4N2RjMDgwOGYsIDB4MTcxOWFlZWYsIDB4ZDJlNzg4N2QsIDB4N2U1MzI2NzcsCi0JMHgzNzVkZDNlNywgMHhjMDIxZjlkYywgMHg3MmUzYmJkZCwgMHg0ZGU5NDNiMiwgMHhmZTlmZTIwMSwgMHhmNzBmYmIwYywKLQkweGE5N2UyMGRmLCAweGViZWU4MDUwLCAweGUzNzY1ZmRiLCAweDNmMjdlNGZlLCAweGRhMjI3MGJhLCAweDljMDUwZmI3LAotCTB4NWU2NjdmMjcsIDB4ZTdiOTc4ODcsIDB4ODY1ZTlmOTksIDB4MjU2MWQ1ZWQsIDB4ZWY2Y2Y1MGQsIDB4MTVmZTFmY2UsCi0JMHg4ZWQ1NzBmNSwgMHg5YTlmOGE3YSwgMHgwZDRiZjQ3ZSwgMHhlMTRkMzlmNywgMHg2NzdjZmU1NiwgMHg3ZGZiMDdiMiwKLQkweDY1ZDM3ZGIyLCAweGY2YTZlZjg4LCAweGI5M2Y2YTI2LCAweDA3ZWE5NWJkLCAweDRiZTlmOTllLCAweDMzZjY4ZGZmLAotCTB4YmY2MWY2ZTAsIDB4NGZkYjNmOTMsIDB4YWEwOWE5NzQsIDB4MDRmMGRlZmMsIDB4ZWVlOGZkN2MsIDB4YTE5ZjVjZmQsCi0JMHhiMDcyODdiZiwgMHhjOTE5ZWI5MCwgMHgzZjdmOTJkNywgMHg4YmQ2ZTY3OSwgMHhjNmJiZmFmNCwgMHg2MGE1MTgxYywKLQkweDFmNTY2MWZmLCAweDdkMDdkNzllLCAweDE1ZmJmYTRlLCAweGM0ZWQ1MzNiLCAweGNlOWNhZGY3LCAweGFmNzRkNWU2LAotCTB4ZDczZTc5NDMsIDB4ZGM2MTg4M2IsIDB4NzJmZWJhZjcsIDB4OTE0NzdkMDcsIDB4NGFmYjEwZTEsIDB4MjkzZjExNzYsCi0JMHhiY2MzZWQwYSwgMHg2ZDA1ZTk3MiwgMHgyMTdkYmE0ZCwgMHg5NDU3YmY0OSwgMHgxNzU2YTNkOSwgMHg4YjM3OWY0NSwKLQkweGI4OTM5Yjc5LCAweGY1MTRmOTNkLCAweGQ1MzljNDMwLCAweGFjMWVmYzY1LCAweDVmNmM3ZjRmLCAweGQ2YjVmZTQ4LAotCTB4ZDc2YmY3NDMsIDB4MzRiZTcxMTQsIDB4OWEzZDM5M2IsIDB4YjdlNTdlNDUsIDB4Mzk2MzBlZTAsIDB4Y2YwMmU0MWUsCi0JMHg4ZWViNDBkNSwgMHhmYWRmMjkyZiwgMHgxYTZmZDkxMywgMHhiZWQzNTdjMiwgMHg3ODQ3NTJkYSwgMHgwZTdmMTFmOSwKLQkweDhlZTdjNjU4LCAweDM1NGIwNmEyLCAweDFiNTkyZjNjLCAweGU5MWM1ZTNmLCAweDNkZmQzMjc0LCAweDY2M2EyMzc2LAotCTB4ZGU5MmYyOGYsIDB4ZThjNmZhYjEsIDB4NTUxMWQyZmMsIDB4MjdkYzI2YzEsIDB4OTA2ZDZhYjgsIDB4ZTE3ZWE5ZWUsCi0JMHg1ZWU5MzdlMywgMHgyYWM2NjdlMywgMHgzMGRmODg5MywgMHgyZjc2ODQ3ZiwgMHg2YTc5YTRlNCwgMHg3MDA3OGYzMSwKLQkweDcxMTRlZjllLCAweDE3YTk4N2EzLCAweDMyYWZmMWViLCAweDc1ZmI0OWQ1LCAweDZhOTdhNGZkLCAweGRjNWQ4NTliLAotCTB4NWIxOWUyMjEsIDB4NmJkZTM2N2YsIDB4MmYzOWVmMGEsIDB4YzA5YmVkZDYsIDB4ZDUyNzRlN2IsIDB4OGZlN2IzZmIsCi0JMHg1YTE0M2I0NywgMHhhYmM4NzY0OCwgMHhhNTI3YmMxMSwgMHgwOWExNjFmZSwgMHhhMWUyZThiNywgMHhmNTE3MzhkOCwKLQkweGNhNzdlNjFiLCAweGU3N2VhNTlkLCAweGUzMjk2ODk0LCAweGRkM2M1OGRmLCAweDM4NzdkYTI1LCAweGVhMjc3ZWZkLAotCTB4MTZlNzlkYzcsIDB4N2EwOWQ2ODcsIDB4MmNmNGFhM2YsIDB4ZWQwZTNlNDcsIDB4MmY5MDdiYjMsIDB4MjllYjJlZWIsCi0JMHgzYmIxZWJkNCwgMHgwYjRlOWUwNCwgMHg0MWRmYzEzZSwgMHg2NGNkYjhhMCwgMHhiNWRmMTEwYSwgMHhhNGRhZDA1ZCwKLQkweGU3N2JiNjBjLCAweDQ0NzU3ZjA5LCAweGJhNDFlMmE3LCAweGM3M2FkODhjLCAweDliZjAzZjQwLCAweDdmNjg2YmQ2LAotCTB4ZTQyNTJhYzYsIDB4N2VhZTc2Y2YsIDB4MTFlNjFjNmQsIDB4YWY1ODZlODEsIDB4NDk1ZDk4ZWIsIDB4ODMzYjAzZjgsCi0JMHhlNzVkNmNmZSwgMHg3Mzg0MGVlYywgMHgzZWI1ZmE2NCwgMHgzZjA3OTdkYywgMHhlNzdkMTY2NCwgMHhhMGE2YzM1MSwKLQkweGRhM2EzZWZjLCAweGFkMjQ2ZmJmLCAweDFlNzg2MTQzLCAweDM4NGI1MWYzLCAweGEzZjdlZDBiLCAweDc4N2QwYWUzLAotCTB4NTgyZWE2M2UsIDB4MGFmMjQzNTksIDB4MmY3ZDJkN2UsIDB4ZmU0MGRjMTUsIDB4MjZmNzlkNmIsIDB4YzZhN2VkMWYsCi0JMHg4NTNlZjljYSwgMHgxYmUwNTRmYywgMHhhYjhiMWRmYSwgMHg3YzJjYmJmMSwgMHg3OTIwZWMzZiwgMHgyZGNjZWJhZiwKLQkweDllYWVmODQ1LCAweDllNjBmM2U5LCAweDhmYzQ5NGVkLCAweGY0ZGQyZDJjLCAweGY3YTcxODNiLCAweDI3NDg1OTU4LAotCTB4MDNlZWFmOTcsIDB4ZjgwMjY2YmYsIDB4YWZjMTdiMzUsIDB4M2ZkZjgwOTksIDB4MTU3MWQ5ZmEsIDB4MGQ3YTcxYzYsCi0JMHg1ZGVhYjc3OSwgMHhjZGVmNzRiOSwgMHg3ZjhlZDEyOSwgMHgyZDdkZGQ1ZSwgMHhlMjExOTViNSwgMHhjZmUxMWFjYiwKLQkweGM1ZmQ1YmE2LCAweDI2ZThlYmI3LCAweGZhNTg5NGZkLCAweGY2ZTRlZTNmLCAweGU3MjdiY2U4LCAweDAwNDYzZDEyLAotCTB4MjM5ZjEwM2QsIDB4YTI2ZTlhYjYsIDB4ODYzNDg1ZjUsIDB4OGFhYWJiZWIsIDB4YmUwMWVhNDUsIDB4MjI5YWI2YWIsCi0JMHhmYTg4NGY5NywgMHgzZGUzYjEzMSwgMHg0ZjcxMTRlOSwgMHhmNTE4YTA1YSwgMHhhNzAyZjk1YiwgMHhjYTg3YWY0ZiwKLQkweGJiMjZmYzkzLCAweDJjNjI4ZmNlLCAweDkyZTMxOTMwLCAweDg0NWQzMzhmLCAweGFmNGUxZGY3LCAweDdlMGM4N2Y0LAotCTB4ZDNiOGUwY2YsIDB4ZTFmOGMzZWUsIDB4MDRkMDk2OWEsIDB4YWYwZTg3ZGMsIDB4ZjI4ODVhNGYsIDB4NDlkNDdhMDgsCi0JMHg3ODFlZWJmYiwgMHhiNmQ2ZTMxZiwgMHhiOGYzYjY0YiwgMHhmOWQ2ODliNSwgMHhjMjQ3YTc3ZCwgMHhlMzAxYjkzNywKLQkweDVhYzBmY2RjLCAweGJlNWM3ZjZlLCAweGU1ZDZmYjc4LCAweDJlZTdlOTRlLCAweGJlZjNjNjJlLCAweDNlOWQ3Mzc1LAotCTB4ZmYzNmFmOGMsIDB4ZTM4YTU5NDIsIDB4NzQ2Yzg1ZDcsIDB4NzA1ZDZlMzksIDB4ZjI1NzliZWQsIDB4NWZkZjgwMzgsCi0JMHhiYWEyZmMyMywgMHgzNDdkMWJmNCwgMHg3YTdlMjBmZiwgMHg0ZThkZGI4ZiwgMHg0ZWJhYWY0ZSwgMHgxYzY0MmY2ZSwKLQkweDVlMjE3YThiLCAweDI5Y2E1ZWRlLCAweDZiOGM2M2VhLCAweDM5NDk3ZjI0LCAweDNjNzk1NzNkLCAweGZjOTAwOTZkLAotCTB4MjM3NTg2OWMsIDB4ZTFmMDBlM2YsIDB4NjMwZjljMGIsIDB4ZmY4OTM0ZTMsIDB4OGJjMmY4ZDgsIDB4ZWY3NTA2YzIsCi0JMHg4ZjdkMDc3NiwgMHhlNjlhZjUyZiwgMHgzZDQ1MWMwYywgMHg2NDc2ZDc1NCwgMHhkMGFiYjEyMywgMHhkYzJmNzU0MywKLQkweDNmOTQzODVmLCAweDc4Zjk1MzY1LCAweDNkMmI5MDM2LCAweDEzNTllMGRmLCAweDQzMmE0NGQ3LCAweGMwZGYzYTRlLAotCTB4YzZkZjVmYjgsIDB4MWQ4ZThmZWYsIDB4NGY0MmI3ZWYsIDB4YmY0YTdjNDksIDB4Y2Y4MmYzMTksIDB4YzI5ZmY5NDMsCi0JMHhmYTIyN2Q3ZSwgMHhjZjI5ZDVmZCwgMHhmYzBkODQ1NywgMHhkZjA1MzVlNywgMHg0NGYxN2RjMywgMHhmN2JlNTZmYSwKLQkweDcyMjZmMzRkLCAweDYzZWZhOTdjLCAweDk5ZjMyNWU5LCAweDQ1ZDk4ZWI4LCAweGVjYjVmYjg5LCAweDBjNDhmMTE3LAotCTB4M2UwYjE0ZmYsIDB4ODBlNzAzN2UsIDB4MDc3MjRmNzUsIDB4YmVhMGI5MTcsIDB4ZDNmOTk5MjgsIDB4N2U4YmRmMDAsCi0JMHgyOWY3ZTU2OSwgMHhjNDJmZWQ4YywgMHg2NTVhYWE3OCwgMHg1Nzk3Y2MyMSwgMHhmNTg0YjRlZiwgMHhhMWY3MzZlNywKLQkweGY1ZWYwNDBmLCAweDMzMjE2Y2I5LCAweDNiYjk1ZGYwLCAweDA2NzFjMWU4LCAweGNiYmQ4N2VlLCAweGMxZTFlNzRlLAotCTB4NzI4Mjk5NGQsIDB4NDgxZWQyM2IsIDB4ZjdlMDY1NzUsIDB4NGY3NDNkODksIDB4MWUwZTYzZWMsIDB4MzExZmY0NGYsCi0JMHhjNWNiY2Y4NywgMHhlODdiYmU3YiwgMHhhY2NlODRmNywgMHhlYTdjYTdjZCwgMHg2MWZjMmYzYiwgMHhlZGUwMWZjZiwKLQkweDFhM2U3YjUzLCAweGQ0OTNjZmFkLCAweDU1MzY0Y2Q5LCAweGFkM2M2Zjk3LCAweDJiNjdkZmM0LCAweDE2N2Q3MTc2LAotCTB4ZjNmNjViY2QsIDB4NDM4YmU1YmMsIDB4NjNlYjQxZTcsIDB4ZjNkMWZiZjIsIDB4ZmRmOWIxYjMsIDB4NmZhODc4ZTgsCi0JMHhmYmYyNjNlYiwgMHg2ZjVjNWQwNywgMHhmOWU3ZGY0NywgMHhmMTRjNzdmZCwgMHhjN2JkNmZiZiwgMHg4YmFmZGM2NSwKLQkweGM1Y2ZiZjZkLCAweDhmMjNhYmY5LCAweGUzZmY0NWNiLCAweGU0ZmQxODRhLCAweDExNWQ2YmU1LCAweDM5NmI4ZmJjLAotCTB4NjNiZjQ2M2MsIDB4MzExNDI3YjksIDB4ZjlhZTUxYjksIDB4Y2RmYzMyM2UsIDB4YmU1ZjgxYjUsIDB4ZTgwN2Q4NDQsCi0JMHhiZTQ3NGVhNywgMHhmZjY4NzkwYywgMHhkMGY0MjgzMSwgMHhmZjU3Y2U5MiwgMHg3MmY0ZjE4YywgMHhjM2E2ZDk5NSwKLQkweGJlNmQ0YjM4LCAweDEzZmJmODQzLCAweGJhNjczYTFmLCAweDdlNTZlZDUxLCAweDc0NGM4NmU3LCAweDZhMmQ4NmU2LAotCTB4ZjQ1NWJjYTAsIDB4ZjM3NGY1N2MsIDB4ZmFiZTcyZGYsIDB4NTczMDJiYjAsIDB4N2ZkMjFiZjIsIDB4NWY1Y2VkZDEsCi0JMHg5NzU2ZmVjOCwgMHhlNDY3MzczYywgMHhkMDEzNzdiNywgMHg2NjVkYzczOSwgMHgzYWJhYmU0NiwgMHhjNjk4YjAyOSwKLQkweDQxOTRmZGJkLCAweDdhNTY5Y2FmLCAweGYyMDFmZTllLCAweDdiZmU2YWUzLCAweGQ3ZWZiMTQ3LCAweDhhZmFmOThhLAotCTB4YzUzZWU5YmIsIDB4Yzk3ZmQ1YmUsIDB4ZWJhZWJmMjYsIDB4ZmY1MWI3ZDUsIDB4ODE3YmNhZDUsIDB4N2I4NjJjM2IsCi0JMHhmYzkzMmI4MSwgMHhmN2VmYzRkNSwgMHhmYmExNGY0ZCwgMHg3M2MxODZjZSwgMHgxYWI4Mjc4MiwgMHhmNmZlNDFlMSwKLQkweGRiZjllYmE3LCAweDJjZTc4YzliLCAweGJhMDFiNWVhLCAweDkyMWVmN2QwLCAweGNiOTQ2YzJlLCAweDIzYWU4ZjQ4LAotCTB4MzZhNThmNDQsIDB4NzAxYmRkM2YsIDB4ZjA0MDNmOWIsIDB4NGM4ZTRhMmQsIDB4NWZmMDE4ZjEsIDB4ZjdkZDM3ZjQsCi0JMHhmNmU0Mjk1OCwgMHhmZGZlMmQxZCwgMHgzZTA5ZjdlMiwgMHg4ZGZiMjgzYywgMHg0ZWZhZmNlMCwgMHgxZTdhYWIzNiwKLQkweGZmMjM0Y2NiLCAweDJjZTQyYzNlLCAweDcxY2JkZTJjLCAweGJjNDIxZmZiLCAweDE4Nzk1ZTgwLCAweDhlNzQwMGYxLAotCTB4Y2FmNWU4YTQsIDB4ZTdiYTdlZTQsIDB4Mzc0YTZmYTIsIDB4YWU3ZDFmN2QsIDB4ODBhYzY2ZjgsIDB4OGU3ODRiZDYsCi0JMHhkMTM4NWU3MywgMHhmMGI1NmY3YSwgMHhiNWRmMDA3NSwgMHg0N2FmNDhiOSwgMHg4N2JmZWJjNiwgMHg1YjgwYjlmZiwKLQkweDQ5M2JlNWNhLCAweDE0MmNiYzQ2LCAweGUwOTFmYmViLCAweDg3OTc0YTkzLCAweGZkN2MxYmU3LCAweDNiY2UzOGQ5LAotCTB4YjhmMWYxYTksIDB4NzY4ZjhhMjgsIDB4N2ZiNTgzYzIsIDB4NmZkMDFhNzEsIDB4NmQzNWQ4M2UsIDB4MTJhN2UxMjIsCi0JMHg5MzhhMGY5ZiwgMHg0OWZmMjI4YSwgMHg1YzZiNmRmYiwgMHgwYmM1ZWQwYywgMHhmZGM5YmU3MiwgMHg5NjNmOGYzYywKLQkweDg4NWEwYmNmLCAweDU3ZDk2ZWZmLCAweGMyYmQ2ZGUwLCAweDMxNDVlNzdmLCAweDJiNjg0NGMzLCAweGRmMmYzMmM3LAotCTB4N2ZjZTk4MGYsIDB4MjAzZWNhYWYsIDB4MTk1Yzg3OTcsIDB4Y2VjNGZjNTEsIDB4YzA5YjBjN2IsIDB4YzRiYjc3OWUsCi0JMHhlNjNlNDBmNywgMHgxZjE2ZjdjMywgMHg4Yjc1Y2NmZCwgMHhmNDNkZjBkNywgMHhlZjRlMzg1YiwgMHgxZmM4NDc5ZCwKLQkweDBhNDVhNjNiLCAweGRhNzE5YzViLCAweGM3YjZjOGI1LCAweDZiM2I2ODk0LCAweGFkYzE3ZWUwLCAweGJiZTk5YWNmLAotCTB4OWVhNjYzOTgsIDB4MmQ3ZjcwNDcsIDB4ZmM5OWE2ZjQsIDB4M2RkZTNmYTgsIDB4ZmEyYmJlODMsIDB4ZmZhMzBlZjQsCi0JMHg0NWQwNTI3YSwgMHgyMDMwOWY3ZSwgMHg4MzBiNzgzZiwgMHhjNWVmZjA3OSwgMHhjYjljZTZkYywgMHgzZWU2MjllNSwKLQkweDE0MTY0YWY2LCAweGZiMTNmYmJmLCAweGUxMDM0MjdkLCAweDg5M2RmMDc5LCAweGU3M2M4N2ViLCAweDdjZTZlOTk1LAotCTB4ZjM4MjY5ZjMsIDB4ZWJmYjhhMTksIDB4M2VlMzI3ZGEsIDB4YzRiZWQ0NWQsIDB4ZjFmMWQzZWUsIDB4NDc0ZTZlZGMsCi0JMHhmNmZlYTc2OSwgMHgzMDRhYWVmOSwgMHhlNzcxNzVkZiwgMHhiYTdjZjM5MywgMHhiM2JhZmUzYywgMHhkNThlZGNkYywKLQkweDQ2MWJlY2M3LCAweGIzZTc5NWM3LCAweGE0OWZhODVhLCAweDJjZDlmZDc3LCAweGQyZWIyZTdhLCAweDM3YmU4YThmLAotCTB4ZmQ4YmM2OGEsIDB4MTNlNjQ3MmUsIDB4YTdiZWZmMjUsIDB4OWVmZDFiMzAsIDB4ZjIyNGRiMTEsIDB4NzgwOTllODYsCi0JMHg2ODdiZDBiZiwgMHgwNmRmNDEyZiwgMHhmNTJmNjBhZiwgMHhmZTRiODgwMCwgMHg5YWExNzg3OSwgMHhkOGVmZTUxNywKLQkweDlkNWYwMDc1LCAweGQ1MWVmZmQ0LCAweDRmYjhiNzA0LCAweDIxNzY0MmVmLCAweGY4MjExNzdkLCAweGU1OWRmMTc5LAotCTB4ZjI1YWVlNzQsIDB4ODU0ZjU0NmYsIDB4NzFhZGJjNzgsIDB4YTczMTllM2YsIDB4MThiM2ZmNDEsIDB4MTNhNGIwZmIsCi0JMHhiMjA0YzFlYywgMHhmYzBlNzRjYiwgMHgxMjM3OGJmOCwgMHg1ZjMyNTcxZiwgMHgxN2QxZTkyNiwgMHhlOTNmNzRhZCwKLQkweDEyMGJiNWQ3LCAweDRiNDIxYjllLCAweDhhZGVmYzJjLCAweDZiYzdiYTc0LCAweDg2ZmY5ODhlLCAweDk4MWZlZTJlLAotCTB4ZmJmZTdlNmMsIDB4ZjVlNjdlNTUsIDB4MDNkZmYyNjQsIDB4Y2EwNWZiMjEsIDB4YTVmYTg1NWQsIDB4MDBjYzhlYjIsCi0JMHgzMTYyZTlmNSwgMHhmMDBmYmUwYSwgMHhiNjRhMmE1ZiwgMHhmMjg1OTgzNCwgMHhiN2ZmZWYyNiwgMHg5NjE2NzBiMywKLQkweGJjZjkxNzRkLCAweDA0YWU1ZTU4LCAweGE3MDcwZTU0LCAweDMwZDYyY2YzLCAweDZjOWJmYjBhLCAweGZmOWM2NjNkLAotCTB4NThkYTc5OTEsIDB4NGZhMDFmYmMsIDB4ZGY4OWYyNDksIDB4NzRmYmEzZmIsIDB4ZjNmMzAzYWQsIDB4OWRkNjRiYmEsCi0JMHgwZWVmYzMyZSwgMHg3ZGM1YmJkNCwgMHhhMzY2MzYwZiwgMHg0NjczZWJkZiwgMHgwNTdkYTEzZSwgMHg2MTZjZGE1MSwKLQkweDA3MDFkZGZhLCAweGNkYmE0NDhiLCAweDhjMDBmYmY4LCAweDYxNGY5YmJlLCAweDNkZmMxMTJkLCAweGZmMTdiZThjLAotCTB4MWUxYzUxOGIsIDB4NzZmYzBmYmQsIDB4ZWYyMTk0ZjcsIDB4YzdiNjM3MGIsIDB4MmE5ZTE3ZGMsIDB4N2U2MzRhZTAsCi0JMHhhZDIyMWZiYSwgMHg2MzVmNzhjMiwgMHg0MmFkNzM4NiwgMHgzMDE2ZTEzZiwgMHhjNDQ0Y2YzZSwgMHgwYjYxZmY0MywKLQkweDZmMGJlZjYzLCAweGUxZmM3MDUxLCAweDFiNzNlMzQxLCAweDVmN2E0NjNiLCAweGJlYjIwNDg5LCAweDkzZGU4YjRjLAotCTB4ZGY4OTIwYjQsIDB4MjJlZmY0NGIsIDB4MTE1YjljOGUsIDB4NmYwMTU3MjgsIDB4YWZkODhiZjMsIDB4ZThkZTUwZmMsCi0JMHhlMTE3N2UwOSwgMHg0MzcwZjFiZiwgMHgxN2Q0MGQ2ZCwgMHhlM2M2Y2ViZSwgMHhjOWM1MzBmNywgMHgxODVkZWE5ZSwKLQkweGVmY2FkZDdmLCAweDNlZmUyZDZiLCAweGVjMzYxZDY3LCAweGYwYzc4YTNjLCAweGM5YjUxNzA3LCAweDJiMmFjZTc4LAotCTB4YjE3ZDcxOGMsIDB4ZDQ4ZmI0NDMsIDB4N2YxOGJkYTgsIDB4M2ZkZjExMDAsIDB4OTVmNzRiY2YsIDB4NzRmMzhiZDQsCi0JMHg5YTc5ODdmOCwgMHhjMzMzZjNkNiwgMHg2N2QzMDc2OCwgMHg3YWM0NmZmNCwgMHhlZThjZmRmZiwgMHgxOWY3OTA1OSwKLQkweDQwOGVjNzZkLCAweGJmNGFmYTlmLCAweDg3ZGEwMzI1LCAweGUyM2U2NGNmLCAweDAzYmVkMTQ5LCAweGViY2Y5ZGZmLAotCTB4ZGY4ODk3OTcsIDB4NWQ0N2MwOGQsIDB4MjczM2NhOWIsIDB4YzZmYTliMTMsIDB4NWNmY2MxYjAsIDB4MThiYjM1ZGYsCi0JMHg3M2Y5NTRmMywgMHgyOTdmMTNhNywgMHhiYTBhMmY4MiwgMHg3YzUxZmYxNCwgMHgzZjY4YzIyZiwgMHg5NzJiYmViNSwKLQkweDFjMTdkZmNlLCAweDcxOWU1MWY2LCAweGQ0ZTFhOTgxLCAweDFiZGY1YzFlLCAweDEzZWZmZTNjLCAweGM4NGNjNmZiLAotCTB4NzkxOGQ0ZjMsIDB4YWZjYTI0YjksIDB4ZTcyYzVlZDQsIDB4N2FjY2ZiOTcsIDB4M2NlMDQ2YmUsIDB4ZmM0NGEwZjAsCi0JMHhjN2JkMTJjNCwgMHgxNjYyZWNlNSwgMHg2NjcxYzNmZCwgMHhiZDI1Yzc0NCwgMHhiZGI0NTMzMiwgMHgzZmRmMGI3MiwKLQkweGY2NDZhYTliLCAweDIyNWUxY2EzLCAweDRlNTE2MmNhLCAweGUyMzMwMTY2LCAweDdmNzNjNGFiLCAweDUxNzdjZTEzLAotCTB4ZjIxYTY4ZTAsIDB4YWY5Yjc0ZmQsIDB4OWY0NmFmMTksIDB4Yjg2MTUwYmIsIDB4NGU5Y2M0YWYsIDB4ZmZiMTdlYmUsCi0JMHgzZDhhZjUyZCwgMHhmYjY3ZTc5OSwgMHhkZGJhYjNkYywgMHhkZjk5N2RiYSwgMHgzMGRmODViYSwgMHhiOThkOGQ5NiwKLQkweDI0ZjdmZjY3LCAweDNiZmZhNTE3LCAweGRiMThkYzkxLCAweDQwNjZlNDYzLCAweDdkM2YzMTNmLCAweDdkZmIxOGI3LAotCTB4ZmYzZjNjZTEsIDB4YzA1ZTZhNmUsIDB4N2UzZTdjZjgsIDB4ZTcxZjk3ZDcsIDB4MTVkMGVjNzcsIDB4MGI4ZThjY2IsCi0JMHg3ODQxNjQ3MiwgMHg2ZWM3N2Y2MiwgMHgyYWI3ZjQ4ZSwgMHhhMmQ2ZmU4YywgMHg4NTIyZmE3ZiwgMHhhN2IwYzBlYywKLQkweGMxY2NiZjZiLCAweGUyNWNlNjdjLCAweGIxMmViYWNiLCAweDQzZmMwZjNmLCAweGZkODllM2RmLCAweGUzNGVmYWY5LAotCTB4ZDc3ZDdjZmUsIDB4NzQzMzdiOTIsIDB4OWQ3NWYzZmIsIDB4Y2YzZmI1NWYsIDB4NWJiZmVlZWQsIDB4ZDMwZjc0YzIsCi0JMHhkNjA0YWZiZiwgMHgxNjVlNzk4MiwgMHg3MTA3YzJmYiwgMHg5NDYyNzgzZiwgMHgzY2M1YWVlZSwgMHhlMzUwNzNhZiwKLQkweDMxMDdmNGZiLCAweDRiY2JhMzdmLCAweGZjZjA3MGNjLCAweDM0MGI4Y2U4LCAweGU1NTczZTdhLCAweDIxMjlmMmZiLAotCTB4MGI5MmY5MjcsIDB4NjY1ZGVmYzQsIDB4N2U0MWQ5OTgsIDB4MWZlNzg0N2UsIDB4ZWIzZTIyYzIsIDB4YjQwZDdlMTYsCi0JMHg0N2ZjYTA2ZiwgMHhhNDY1ZGM4YywgMHg2NTQ3Y2EzMSwgMHhmMjk2M2NkYywgMHg4YWJiMGIzYSwgMHgwZDNlNjMyNywKLQkweDdmZTUzM2Y0LCAweDdhNWVkZGJiLCAweDk4YjA2MTdmLCAweDM5NTcyM2YyLCAweDhhZjNhNDZmLCAweDZhYWQ1ZGY1LAotCTB4N2FkZjRlYTUsIDB4ZjVmNzhkOTMsIDB4OWE1ZGY5YzQsIDB4ZmEyOWU0ODIsIDB4ZTAxOWE1ZGYsIDB4NDg5ZTdhMjcsCi0JMHhhN2RmY2IwZiwgMHg5YmJlNjJhYywgMHg3ZGUyZTU5NywgMHg5ZDc3NDAwMSwgMHgzMTk0Yjc5ZCwgMHg1M2ZiNGY3ZSwKLQkweDVkMmI5ZDBhLCAweDc2NDgzY2U1LCAweDYzMGVkNTc4LCAweGQ0NWI5NDNmLCAweDZiYWZkNTdiLCAweGNkNTM3Zjc0LAotCTB4NDY3YzQxYWUsIDB4NWRlNTJkNzIsIDB4YTFiNTE3ZGUsIDB4M2VlMGFmZDQsIDB4ZTYxMWRmNGYsIDB4NzdmYTQzNmIsCi0JMHhjMDViOGNjNCwgMHhlMDRmOThlZCwgMHhhNWU4NThiMywgMHgzNjY2ZjM0OSwgMHgyNGU1M2VlMSwgMHg1NjVmOTcxMywKLQkweDdmYzkxYmU5LCAweGU3OTE3Mzc3LCAweGM3NTUxZDg0LCAweGZlNTBjYWQzLCAweDYzZWI5ZjQwLCAweDA2N2RmY2IzLAotCTB4YzQ1MzFmZDQsIDB4NzE3YWIxZjgsIDB4MmUwM2YwOGEsIDB4MTM3ZDYxNTMsIDB4MGE3ZDc2YTMsIDB4YTY4M2Y1ZTMsCi0JMHhiZGRkMzMyZSwgMHgzYzljZTAyZiwgMHg5ZmRjNDcyMCwgMHhkMjRhN2E5MCwgMHhjNmU1ZWYwMywgMHg5MmNiNWRmMywKLQkweDYzYzg3ZTg1LCAweDE4NGY0ODc5LCAweGMxNTdmODlmLCAweDhkMmE3M2NjLCAweGJjYTE1MjFmLCAweGY0MDdjYzQ0LAotCTB4ODRkZjIxMGUsIDB4OWRmYTM2NGMsIDB4MDM0YThkOGYsIDB4ZmExYjc5ZTksIDB4YTAzZTUwOGQsIDB4ZmQ3ZjQ5MDQsCi0JMHg0NjY0MmFiYywgMHgxYWM0NWViYywgMHgxNzI2Yjg2ZSwgMHgwM2I3NThmNSwgMHhiMDdjMDVlOSwgMHg0ZDFmY2Y1MiwKLQkweDViYmQ5MjJjLCAweGI1MDlmMDMxLCAweGU4YzRhNmY3LCAweDNkMTJhNjFkLCAweGMyMzgzMDRjLCAweGE1YWQ3NjY5LAotCTB4YzQyYmY0N2QsIDB4NmU1M2EyNzMsIDB4YzlkNTFmYjQsIDB4M2ZiNDYxOGYsIDB4ODdjMDFmZWEsIDB4ZjUyZmRkYjEsCi0JMHg5M2VhMzMwOSwgMHg4ZjA1ZjY1YywgMHhmNDNmZWVkMywgMHhmYjBmOGMxZCwgMHg4YzVmYzIyYywgMHhhMWRkNGJhMSwKLQkweDY0MWY4YjkzLCAweGJlNDlmYTUxLCAweDk4MzU5OGJhLCAweGNhMWYwMGIzLCAweGY3NWU3OTJmLCAweDJhNWJhNDYyLAotCTB4ZmM4YzUxZmEsIDB4ODkyYzY5YTcsIDB4ZTY0ZDhiZTQsIDB4NTdjOTA3ZjksIDB4YTIyNTVlOTIsIDB4NGZhNDg0ZjYsCi0JMHg3ODQxY2IwZSwgMHg1M2I0ZWQyZiwgMHhhNDYyZTlkZSwgMHg1OGJkZDAxMywgMHg0YWVkMmY4YywgMHg2YWY0ZTRjNCwKLQkweGIwMTc0ODc5LCAweDdlYzFlNjFiLCAweDk3YWE2NjVlLCAweGU0YzkzM2U4LCAweDYxNGNmYTI3LCAweGRiYTQzNGJlLAotCTB4ZDdkZGY2Y2YsIDB4ZThlYjcwODQsIDB4ZTMxOTJkYjAsIDB4ODBlODA1NDUsIDB4M2VkODM1N2MsIDB4ZTQ2M2RiMTgsCi0JMHg5NGJiZTI1OSwgMHgyYzlmYzk3OSwgMHg5YzM5NDY2NSwgMHg2NzBkMDRlMSwgMHg4ZGNhZmJhMiwgMHhhMGIzNjNmNywKLQkweDdiOTRmMDhhLCAweDZmOGZkZDA2LCAweDQxYjFkMjMyLCAweGM4YWU3ODQ1LCAweDQ0NGJmNjMyLCAweGE3YTQxY2NmLAotCTB4ODk2OTBmYjQsIDB4NmFlNTI5ZTksIDB4YTlkMzlkYjcsIDB4ZmE4NGU4MWUsIDB4ZDJhZmQyNjYsIDB4MzQ4MTM4NjcsCi0JMHgyNWNjYWRlNywgMHhjNTNiYjBmYiwgMHhmYWY1ODRkYiwgMHhjNWY0ODUxYSwgMHhjYmRmNmVlNCwgMHgxMDZmY2Y1OCwKLQkweDMzN2ViOWVkLCAweGFmZDY4M2VlLCAweGRlNTNlZGU1LCAweDdhYzBjYzBhLCAweDVlZGUzYWMxLCAweGM5YjA0ZjdjLAotCTB4YWRkZmUzODUsIDB4MmZkOGJkZDAsIDB4Y2JjNzcyN2MsIDB4NDdiZTFlZDgsIDB4Y2ZjYTVmYmMsIDB4ZTA2ZmQ2ZTEsCi0JMHhmOTg0N2ZlZiwgMHgzY2YxMGJkZSwgMHg3YzBjY2I0NCwgMHg5NzM5YWUzZSwgMHhmMGIwMGVmZiwgMHhmYzE3MmU2NywKLQkweGUzNjk1YmIyLCAweGM4M2MyMGY3LCAweGM4NzE1ZGM3LCAweGNlMjhjNDk2LCAweDY1Y2FmZWUxLCAweDZmOTc5ZDYyLAotCTB4M2Y0Y2ViZTUsIDB4MTc4NTU1N2UsIDB4MzdiMmE5ZjgsIDB4MmQ5NWQ3NDAsIDB4MTEwOWMxNjQsIDB4MzM3MmVmNTgsCi0JMHhmMWY5ZjIwNCwgMHgxMGJjMWJlNCwgMHgwZDI4OGYyOCwgMHg1MDBhYTc0NCwgMHg3MmZiZjQ5ZCwgMHhjMGI2N2NkMywKLQkweGM3ZWY5ZTc4LCAweDkyZmE3OWVmLCAweGYzMjliYzc5LCAweDM1ZmZiOGU1LCAweGZiNGY2NzViLCAweDQ2OWU3OTkyLAotCTB4NjU0Y2NiZjYsIDB4MDllZjNmN2MsIDB4OTFhM2Y5MTcsIDB4N2M4Mjk4YzcsIDB4ZmVjMGI4OGYsIDB4NTdmYWYyODksCi0JMHhiZDkwMzdlNCwgMHhlNjQ3MjJiYSwgMHhhNWQ0N2JmMywgMHg5N2YxNWYzMCwgMHgxNzhhY2Q5ZiwgMHhjYzllN2YwNywKLQkweDYyYzdlNGVkLCAweGFmM2U0ZjFmLCAweGJkZmRmMzBhLCAweGY0Y2JjOGRkLCAweDMwZTlhZDdkLCAweGUxOTg1M2Q1LAotCTB4YjlkZGFiMWUsIDB4ZmU3YWFlYmMsIDB4MjhmMzVmN2EsIDB4MDZiMzVkZmMsIDB4MzZjYTg0MzUsIDB4Y2M3ZGExNWIsCi0JMHg2NzlmZTBlYiwgMHhmZmUxNDYyNywgMHgyODMwZDkzZiwgMHgwMDgwMDA5MiwgMHgwMDAwMDAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweDQ1OTQ3YzA5LCAweGYzN2Y3OGIyLCAweDA5MzIxNWNkLCAweDg3MjEzYjkzLAotCTB4OTg4ODQwMTMsIDB4ODYxYzIxODQsIDB4NDEwOTI2NGIsIDB4ZTgwOTg0MTQsIDB4NzIwZDcyODIsIDB4ZWIyMmRjODUsCi0JMHg5N2Y3NTc2MywgMHhkOTExMDQ0MSwgMHg3M2Q2ZjhkZCwgMHgwMTYwNzYzZCwgMHgxODg5NjE1MSwgMHhjMzgyNDgzMCwKLQkweDEyYTIwODgyLCAweDc1MDQwNDExLCAweDA4NDRhZTIyLCAweGYxZTIwYzQ5LCAweGFiYWYyZTFlLCAweGJlNjY3YmJhLAotCTB4ZmMzODY2NmYsIDB4ZGRiZjdmZmIsIDB4ZGIyZTIzZjcsIDB4YWFlZmFmYTksIDB4ZWFlYWVhZWEsIDB4MDg0YzhlYWEsCi0JMHg5MDgyMzhiOSwgMHhhZGM0YjQ1YiwgMHg5NjgwYTFjZiwgMHhjODQwMWJmZSwgMHhkNWZhMjVkYywgMHgzZjAyMjQyYiwKLQkweDIxM2M2Mzc2LCAweDMzZmUxMjc3LCAweDE5MmQ3YWVjLCAweGYwMWRjODQ0LCAweDI4OTA4NWJiLCAweDJhZmRhNGIzLAotCTB4OWZkZWZlODMsIDB4ZDMyOGJmZjQsIDB4ZjNiZmNmNzIsIDB4Yzg0ZDk0YTMsIDB4M2E1NThjYWYsIDB4ZDUwYTFkZDIsCi0JMHg4NDU5ZWNlOCwgMHg5YzliMzU5YywgMHg3Yzg0YmU5YSwgMHhjY2UyMzkyZSwgMHg3ZDY5MDkwMywgMHg5NjVjZmY3NiwKLQkweDY0YmVjZWVmLCAweDQ3ZTY5NmJlLCAweGIwNDhkNGQwLCAweGVmZGU2MmRmLCAweDEzZDJlMjdjLCAweDk3N2NkZmRhLAotCTB4OTE4ZjBiZWUsIDB4ZmQyMmVkMGQsIDB4YTQzYTZhNTcsIDB4YWU5YTFhMjcsIDB4MjMyZjdlNTcsIDB4NDFlOTNkMWUsCi0JMHhmMmFkNzk0OCwgMHhlMjcxMjU3YiwgMHhlNTdhY2FmNywgMHg5MWQ5OTI3NywgMHg4NDVlZmQwNiwgMHhmNjlmOGExZiwKLQkweDU5MDdjYjY3LCAweGNmZmY2OTMyLCAweGU2MTQ3ZmJjLCAweGI5MzQ2YzU3LCAweDk3MTI5YTY1LCAweGMxOTNkNWFlLAotCTB4MWU3Y2UxZWIsIDB4NGUxNTdmMzQsIDB4YzhmYmE3OTMsIDB4NjQyNDZmMTcsIDB4NmNjODk3NTIsIDB4YmI5MDk1ZDIsCi0JMHhlNjdlOGVjYywgMHhmOTljNDIzOCwgMHgxNDY1MjllNiwgMHhlMWU5Y2ViZiwgMHg1YzUwMjVkNiwgMHg0YzM5NjUzNiwKLQkweDYzMDhmZGI0LCAweDhiY2U5Yjk2LCAweDRjYzU4OGQ4LCAweDc5ZjEyZGYxLCAweDlmMGMwZDRhLCAweDNjNTI0NzFmLAotCTB4NDgzMmY4YzMsIDB4ZTY5OWUwMDYsIDB4MTRkMWY1M2IsIDB4ODQ0OGUzZWUsIDB4OTM4ODFiZjEsIDB4ODhjMjNlMDAsCi0JMHg0MjUyMTEyYiwgMHhiZjE4NDZhYywgMHg0MjQ3NWUxZiwgMHgyMTc5YWRmZiwgMHg1N2NjYWVmMSwgMHgxZjAyN2RlMSwKLQkweGQzNjI0NGNmLCAweDQ3MTM3ZjQxLCAweGE3NzVmMTJiLCAweGZiZDIyMTY5LCAweGZiZjJiYjRlLCAweGNiMTM4OGFmLAotCTB4YzJhYzlhNGYsIDB4MjRjOWIxMmYsIDB4ZTBhZWQ3ZGUsIDB4Y2ExY2JiOTMsIDB4OWUwNDEzNzIsIDB4M2NmMWFiNDcsCi0JMHhjNTE1ZmNjYywgMHgwMTMwOWQyZiwgMHg1NGQyNGM3YywgMHg1OGM5ZTNmZCwgMHhiMzBkNmYwYSwgMHgxY2Y2YzVhZSwKLQkweGI4NTIxNzhmLCAweGJhYzEyZWIzLCAweDRiNDRjMDAyLCAweGZkYjQwOWQ3LCAweDkyNmM0MDRhLCAweDNkMjJhZThmLAotCTB4YWIxODlkNTgsIDB4ZTcwN2U5ZWQsIDB4OTM3NjE5OTEsIDB4ZWUzODllMGYsIDB4MTQ5OWEwZDgsIDB4Y2ZlNWQyMmUsCi0JMHgwNjkxM2MwMywgMHgyOTgzN2ZmYSwgMHhkMjEwYzUzZiwgMHhiMmY4MDk5NCwgMHgxODI2MjU3NCwgMHg1MmQ0NzEwNywKLQkweGRlOTJkM2I4LCAweGQ4MTRkYTM1LCAweDEzMmI0ODhmLCAweGZkYjRlMzEzLCAweGRiNGJmOGZkLCAweDNlMDY2OTExLAotCTB4YjBjZjIwYjgsIDB4MmEzODMyNjcsIDB4NTNmNTUyZjMsIDB4YzEzMWI0ZTIsIDB4NWFjZjM3ZmEsIDB4OTE3ODc4MDksCi0JMHhhMzhlODFlMSwgMHhhZGY5NDNkZSwgMHgyYjVmN2Q3MywgMHgyYTcyMTBlNSwgMHg5NDI0NjhjZSwgMHhhNjc0NjdkZSwKLQkweDFmNWY1MmU1LCAweGVhMmVlNjNlLCAweDRhOTVlZDg2LCAweGQwYjZlZmFlLCAweGM3NjQ4MzZmLCAweDUyY2YzMDIzLAotCTB4ZjhjZjViOGQsIDB4YTEzYTZhYTksIDB4NmYzZjk2ZWQsIDB4Zjc0OGFkYjAsIDB4ZjhkNDNmY2QsIDB4MmQyM2YwMDgsCi0JMHhjOTNiZmZhMiwgMHgxZDdhZDJkMCwgMHhlYWViMTc1MiwgMHgwYmRlZmM3NCwgMHhkZGNhMmNlOCwgMHgyYjE3NDUxZiwKLQkweDkxODVlZjVkLCAweGRkNjAyNzhlLCAweGU4YjhjM2I3LCAweGEzMDk2OTdhLCAweGFmOGU4NmViLCAweDAxOTMyMjQ1LAotCTB4NzRlMjU0OWYsIDB4N2UwMmNhMmQsIDB4MDRlYmEzYmMsIDB4OTUxMjk3Y2EsIDB4ODFkMWM5NTMsIDB4MzUxODU2ZmQsCi0JMHg1ZTFmYjc2NCwgMHg3NTdkNzhkYiwgMHgwOTY2NTViOSwgMHg5OTg5ZjdjNywgMHg0ZGM3ZmY2MCwgMHhkZjMwZDViNiwKLQkweGFlMjkzZDE2LCAweGU5NmM3OGE1LCAweDlhNDhkM2MyLCAweGEwMWJmYWQyLCAweGNmMjg0MGZjLCAweDcwZTBlZGVhLAotCTB4YWJlNTg2OGIsIDB4YmVlNTE3ZGIsIDB4ZGQ5MjM2YWMsIDB4NTQ1ZmFjNzQsIDB4ZjI5YmIyMTMsIDB4NDM2OWU1OTcsCi0JMHg0YmI2OGI5NSwgMHgxNDdmZDJhNiwgMHhhMmRiZWQyZiwgMHg0NTNlMDE1NiwgMHhiY2U2N2RiZCwgMHhkZDFjNjA0ZiwKLQkweDgwMmRmNjRkLCAweGNkMzVkOThmLCAweGZiNWY4NzdhLCAweGUwMWYzMGVkLCAweDU3OWIxZDEzLCAweDQ1NGIxODdiLAotCTB4NDVjY2ZiN2YsIDB4ZWYxZTIwOWYsIDB4YmNkZDIwZjIsIDB4ZGIwMTYwZjAsIDB4ZTFmNmZkYjEsIDB4MWZkMjFlNGMsCi0JMHg3MmMzYWMwZCwgMHhjNWNiMGViZSwgMHhhZTUzYWI3YSwgMHgwNGE2NDkzNywgMHg2M2Y5NDY4ZCwgMHg1YWEwYjk0MSwKLQkweGM2N2E5NTdmLCAweDE3ZWY4NDRmLCAweDRlYmFjNGQzLCAweGZiNDJkMDg5LCAweDY0NTM1OTUzLCAweDFmYmVjMzVhLAotCTB4YTY0MjQ4YTUsIDB4NjRiMmM5MWIsIDB4MjFhMzNmOWEsIDB4NzE3NWU1MDEsIDB4MTk5N2IzYTQsIDB4MGNkMjNjZTksCi0JMHgwY2U0ODlmYiwgMHg1Zjg2MmY5NywgMHhlNGI0YmY4YSwgMHhkOTNlMzEyYiwgMHhhOWVkNmZjNywgMHhmNmNmMzg0ZCwKLQkweDgxYTYzZjU1LCAweDc4NmYyZWJjLCAweGE4NzVlNTA3LCAweDE5MWYzOTc5LCAweDQ4ZjM4NTE2LCAweGQ2ZTBmYjYwLAotCTB4ZDkzOTFiNmEsIDB4MDU5Nzg3ZDMsIDB4NDI4ZjM2NjYsIDB4MGY0MGFjYjksIDB4MzEzNjY0ZjIsIDB4N2VhN2U4MWIsCi0JMHhjM2QzZmJhNCwgMHg1N2I5NWMyOCwgMHg2ZjI4NWM0NywgMHg5MzkwMWE2YywgMHg5YzYzYzM5NywgMHg3ZTJjNDM1ZCwKLQkweDcyNjEyZGYyLCAweGYwYzk2MjE3LCAweDY4OGU0OWMxLCAweGRjNWM5YzA1LCAweGI1M2U1MTRkLCAweGZmMjJiYmFhLAotCTB4MTQ3ZDQ1YmEsIDB4MWNjZWU5ZjksIDB4Zjk2M2RjMDUsIDB4ZWJmOTQ1MTAsIDB4NzAxNWYyNmIsIDB4NTM2ZTY3ZWYsCi0JMHgzNWMxYmY5NCwgMHhjMjc3MDE0MSwgMHg5ZTNmMjAyZiwgMHhjYTRlNWQ5NywgMHhiZmFlMzdhNywgMHhkZTdmNTE1YiwKLQkweGJmNDg1OWJlLCAweDg5NWViZTNhLCAweDQ5OTRkNmQzLCAweGQwNWIzMGYxLCAweDgwNjg2ZTlmLCAweDY3MGU1MmM3LAotCTB4NjhhM2RlZDUsIDB4YjcyNWI4OWYsIDB4ZTFjZmNiNDQsIDB4NjliYjMxZmMsIDB4Zjk0MjU4ZWUsIDB4ODk3ZDZmYTMsCi0JMHg2NzIyMWZhMiwgMHhkMjhlMzBjYSwgMHhhMTg5MTJlZCwgMHg0NmE3M2VhYywgMHg3YmNjNGZiOSwgMHgzNzE3MDk0NiwKLQkweDk5MmNiZTNjLCAweGY0MDdlYTA0LCAweGRiNGI0MzI3LCAweGFjNWQyMTI5LCAweGY1YThkZmEwLCAweDExNTE5ZTg0LAotCTB4ZGQwZmM4YjEsIDB4NTdjNjM3NDgsIDB4NzkzMDNlNmEsIDB4MDc0ODYxZjEsIDB4ZjRmNWU4M2UsIDB4M2UzZTAxYjAsCi0JMHgxOWViZTJmMCwgMHhiOWQ1ZjEwOSwgMHg3YjhlMDdiNywgMHhlZTNhMzZkZSwgMHgxOGZjNDBmNCwgMHgxMGZjOTUxMiwKLQkweDQzZjI1MTY2LCAweDFmOTI4Njc4LCAweDdlNGFhYzIyLCAweGU0YWI5YWU4LCAweGEzYmUzNTA3LCAweDIwZmU0YTZjLAotCTB4MTA1ZmZhMWUsIDB4NTY4Y2M3N2MsIDB4YmNhOTRkZjIsIDB4ZWZlMDBmNzIsIDB4NWY5ZTc4NzIsIDB4MWZlOTBhYmYsCi0JMHhmMGE5ODdhMCwgMHgxYWYwMWUzYSwgMHhmZjZiYzNlZSwgMHgyNjI1YjZkZCwgMHg2MWRmNjYwYiwgMHhlNDc4MDQxYywKLQkweDE5NzYyMGY4LCAweDA0NmM1MmU1LCAweDNlNTYxZGVhLCAweGNjYTdhMTRlLCAweDEwN2FlMjg4LCAweGQ2OWZhNzZmLAotCTB4ZjdkNjEzYmQsIDB4YTA0OWM5MzIsIDB4OTY3ZmQwOWUsIDB4ZGNkM2JhZTQsIDB4YzYzOWRmMTQsIDB4ZDUyMGEwMmEsCi0JMHhhMmIzZWM2ZiwgMHhkMzJjMWNhOCwgMHhkZjIxYjNiYiwgMHhlZmMxZWY0ZiwgMHg0MTdiZDJhZCwgMHhhNzQxMWVmNSwKLQkweDcyODFjNDM5LCAweGE2MWYwMDI1LCAweDJmNTBmNDI3LCAweDNmNDBmZjgwLCAweGZmODQxMWVkLCAweGVkMDc3ZWE4LAotCTB4NTE3OWYyNTYsIDB4NzIzNGI5M2EsIDB4MDZhNGJlMjAsIDB4MGQ5MTFkYzksIDB4NzIxMDZjZDMsIDB4M2ZiMTcxZDYsCi0JMHgxNTdjYTM2NiwgMHg0YTBkYTJmOCwgMHhlODQ3NzJmZSwgMHg4MTdkYTI4ZiwgMHg0NDhmMjExZiwgMHgyNTUyMDZiYiwKLQkweGFiN2YwMjI3LCAweDUwYzkxM2U0LCAweGE5MzcxZGUyLCAweDIyM2ZmODQxLCAweDM1ZTgwYmQ4LCAweDQxNmY5YmM0LAotCTB4MDg5OTAzN2UsIDB4YmM0ZGU5NGEsIDB4ZDMwZjcyM2YsIDB4MDZhNDhkNGIsIDB4YjI0MmIyZTksIDB4N2Y2OTk3MmUsCi0JMHg0YmU5NzVmMiwgMHg3ZjRiYTUwOCwgMHg2NGZmZDUzMywgMHhhNjliNDJkOCwgMHhkMThkNzdjMCwgMHg3NzNlYzMyOSwKLQkweGZlNjBiOTFkLCAweDNmNWEwNmVhLCAweGM1Zjk1ZDYxLCAweGJmZjJkMDk4LCAweDViOGQ4ZGZjLCAweDI4MWY1NDlkLAotCTB4MjQ2NGY0ZDksIDB4NWFmYWY0YTEsIDB4YTU2ZjEzNWIsIDB4MmVkNmNiZjUsIDB4YjRkMWI0OGQsIDB4N2Q0NGViNDUsCi0JMHgzYzk3NmJlYSwgMHg3ZjY0MTVkYSwgMHhlZDhhM2Y3ZSwgMHgyNjQyNzRkZiwgMHg3YzE1M2Y5MCwgMHg3OTVmYTcyYSwKLQkweGQ3YWMxYzZjLCAweGNjZWFkNmVmLCAweGI5NTIyZDMyLCAweGQwMzZlMGRlLCAweDM3NTE1MWY1LCAweDQ2YzkyYzdmLAotCTB4OGZjMTk5YjgsIDB4NTRmODAzN2MsIDB4NWU0YTFiOWYsIDB4ODJkZTMyN2EsIDB4NTkzM2EzZmIsIDB4M2JhOTA4OTMsCi0JMHg2MmI0ZDA5OSwgMHg4MTQ2M2ZjZCwgMHgzYTQ5NTY3ZSwgMHhkNGI4YzE5NiwgMHgxZmZmYTBmNSwgMHg1OTVhZmVlOCwKLQkweDc3ZDRjZjJiLCAweGUxMWU3MjBkLCAweGI1ZDA1YWViLCAweDZmYjFlZWIyLCAweGNkZjg0OGU0LCAweDU1N2UwN2EzLAotCTB4YmQwNjJmOTcsIDB4M2I2N2VhOGUsIDB4ODliYjNjODQsIDB4NDVlYjA0ZGMsIDB4ZTJiODgzZTAsIDB4ZGY5M2VmNTAsCi0JMHg5OWJiMjE3OCwgMHhmNjZiYWRjMiwgMHg3ODdlNGE0NywgMHhjNDIxZTQyMiwgMHhhY2VkNjc0ZiwgMHgwOTY5YmNiZiwKLQkweGFhMzY4NzRkLCAweGZlNWU5MGQ3LCAweGNmNTg1Y2Y1LCAweDllZTEyZjUyLCAweDVhNTgxYTRhLCAweDBlNDc3M2E2LAotCTB4YjY1NGFjYTUsIDB4Njg3YTg3NGEsIDB4YWViZmM2ZDksIDB4MzNjNTMzZmIsIDB4NWViMDY2MzksIDB4ZGQyZmRiNGYsCi0JMHg0M2M3ZjZmOCwgMHhhNmJmYmU0MCwgMHhhNmNiMWQ4YiwgMHg3ZGUyOTI2MSwgMHhmZmE0YTk3NCwgMHhlOGY4ZTUxNiwKLQkweGRiZmFmMjUwLCAweGZiMTY0YjdhLCAweDhmYjQ2MGZlLCAweGVkYWZhNTFlLCAweDQwYWM5M2Q0LCAweGVlZDQxNDdjLAotCTB4NDE0YzdiZDQsIDB4M2NkYjUyZTgsIDB4MWUwMjY0OGEsIDB4ZGQwM2QyN2UsIDB4OTEyMWRlYmYsIDB4ZjgyMGY0ODQsCi0JMHhhNDc2ZjU1YywgMHhlOTA5ZTM4MywgMHhhNWU0ZTljOCwgMHg1Y2ZhYmQ1YiwgMHg0MTJiZjRjOSwgMHgyYmJlNzUyNywKLQkweDBhZmE4Y2NhLCAweGNhN2E4N2I0LCAweGY2ZmYxYjFiLCAweGYxNGZjNTI2LCAweGNjMmIwNjI3LCAweGY3NmZmOGJmLAotCTB4NGUzY2MyNDUsIDB4NWYxOGFiNjksIDB4ZGUzNGIwYmYsIDB4ZDYyZGZiNDYsIDB4OThjZGUzMzksIDB4MmZjNWVmYjIsCi0JMHg2ZGY5MWFmZSwgMHg4ZWJmODdkZSwgMHhkOTNmYTgyNywgMHgzOGI5MzQ5MiwgMHhkZjk4MjRjZiwgMHhjNGVmZTc5YywKLQkweDBlMjVjZGY5LCAweDE3ZTJiYmU0LCAweDlmZTgzYjY0LCAweGY0NjRiNWU3LCAweDQ1ZDY0MTZiLCAweDE3NWIzNDQxLAotCTB4MTVkMzU2YTcsIDB4NGE3N2U3NGQsIDB4ZjM4MDQ0Y2YsIDB4OGI1YWVjYTAsIDB4NTE3YmQyODcsIDB4MjhkYWZjMTgsCi0JMHg4NDAyZmZkNiwgMHg5ZDE5MWJjZiwgMHhmODZiNDViYSwgMHhkZjRiYTJiYSwgMHgzY2Q3NWY5ZiwgMHgzOWY0MDRkMiwKLQkweDAwNGI2YTlkLCAweDY4OTJhZjNkLCAweGQyMWYxYzlkLCAweGZjYWVkYTQ1LCAweGEzMDI2MTYxLCAweDg1NjhiMTBmLAotCTB4YThmMmE0N2MsIDB4Zjk0M2JlMDAsIDB4MmMyZDlkMjYsIDB4NWM4ZjUxNWIsIDB4YmZmNWY3NGMsIDB4Yzc0ZmY3OTAsCi0JMHhkMGY0MDVkZCwgMHhmNWMxZjE1MywgMHhhNjY4Y2FmMiwgMHgyNjlmZDMyNywgMHg3ZTVmYzdlMiwgMHhmN2FkOWJlYiwKLQkweGY1YjI4ZjM1LCAweGFiYmJkNjJkLCAweDdmZTQzNDY4LCAweDFmYWQ4ODdiLCAweDgzOWM5N2E4LCAweDYwMjc3MmUzLAotCTB4MjQzYmNlZmUsIDB4ZTIwNjA3OTQsIDB4ZDdhZWI2MGUsIDB4NTZiYWY4ZTgsIDB4YTEzZTBiZTYsIDB4YjljMmQ2ZTMsCi0JMHg4NDJmY2JjNywgMHhmMTRlNmY5ZCwgMHgyN2RjYzhmMywgMHg3ZGJmM2Q2OCwgMHg4YmZhMTJiZSwgMHhhYzRmNmMwYywKLQkweGZkN2M3OWRiLCAweGY3Y2QxY2RmLCAweGM5ZmViZTVkLCAweGNmNDE3MWYzLCAweDViNzNlYWJmLCAweGVlYjVjZTk5LAotCTB4ZTk1ZWIwY2YsIDB4NjA1YTc0ZmEsIDB4MzBlY2VhYmQsIDB4NzYxYjMzZWYsIDB4NWQzNzdjN2QsIDB4YzU2YTY3MjcsCi0JMHg0ZmNhNTUzYSwgMHhkZTJkM2FmNSwgMHhhN2YyMzZmYywgMHhhOTllOWQ3YSwgMHhlODNlM2I3ZCwgMHhlZGVkN2QzYSwKLQkweGIwNjY0Zjc4LCAweDJiYmZmYTc1LCAweGU2ZmUwNTNmLCAweGE3ZTUyYjQ2LCAweGYwYTE4NzkwLCAweDcyODc5NmE4LAotCTB4YTlmMTA1YjQsIDB4ZTdmNDg3OTYsIDB4YzgxNDE5MTAsIDB4MDRlZjgyN2YsIDB4NWFiYzk1YmYsIDB4MWRjODFkN2UsCi0JMHhiZTBhNWYyZiwgMHhlMGE1ZjJmMywgMHg5NTdjZjUzYiwgMHg1YmU3NTNmOCwgMHhmOTQ3MmNlMSwgMHhmMGVkYmVjNCwKLQkweGNmNGE2NGE4LCAweDZhYzkwNmIyLCAweDNkYmQ2MGIwLCAweGQ5M2M1MzAwLCAweDM1MjMxYjcwLCAweGZkNjM5MjdiLAotCTB4YWUwYTk3NjEsIDB4YTliNzk1NTUsIDB4YmNhYWJiNjAsIDB4YTk1NzA1NDMsIDB4NWM3MGJiY2EsIDB4ZjRiYmY1NjUsCi0JMHg1YjgxZTUwNCwgMHgxMGY3NWU1MSwgMHgzZDgwNDY3MSwgMHhhZDc2NTFhMSwgMHhhNzZjYThhNiwgMHhlYjQ2NWU2MywKLQkweDQ3NDg2ZmI3LCAweDEyNjk3YjdkLCAweGM0NzRkYmIzLCAweGZjODE5N2U5LCAweDQ0NzczNzZhLCAweDc1ZmM1MzQ2LAotCTB4YjM3M2YxODQsIDB4Y2EzMjIzYmQsIDB4ZGNkMzJlY2YsIDB4ZjVmY2EzMjAsIDB4ZGFlOGM4YjgsIDB4YWExYWY2MjAsCi0JMHgzY2ZkMjI0OSwgMHg2MmZlNTQyNCwgMHg0ZDkwYmY2NiwgMHhlZjQwOGI2OSwgMHhhMGFkOTFhZiwgMHgzYzVlY2QwYiwKLQkweGNlZjQxMjI5LCAweGUzMWU4NmY2LCAweDczZWZkMzI3LCAweDQzYmFhMWY2LCAweDkwM2RiOWRhLCAweDQ5YjQwMzllLAotCTB4MzhiM2ZlOTQsIDB4ZTcxMGI2M2YsIDB4N2NlOGMzNTMsIDB4YTI5NDM1NjYsIDB4YTU3YjNlM2UsIDB4NGQ3MzVlOTIsCi0JMHg5Y2NmNTEwYiwgMHgxZWZkMDRmYiwgMHhlMTJmZGY0NCwgMHhhZjNmMTRlZCwgMHgyYjIxMmZjYywgMHgxZDI4OWY5MSwKLQkweDI5Nzc2MGY1LCAweDc3Y2NhMzU5LCAweDJlY2ZmYjcwLCAweDQ4ZmRlN2MxLCAweDg3YjljNTNmLCAweDM5NDJkNWNiLAotCTB4YjA2NGZjNzMsIDB4MDk5NWVjNTcsIDB4ODM2NzQ5ZjAsIDB4ZGNlZjc4OGMsIDB4OWUwOGI5MjAsIDB4YTgzZDk4NmIsCi0JMHgzY2EwNzQ4MiwgMHg4NTY5ZjgxMywgMHgyZDBmYTBmNSwgMHg3Y2I3NWE2ZiwgMHg1YTAxZTgzYSwgMHhmMWViNmNhNCwKLQkweGRhNjhlN2VjLCAweGFmNThmNWJhLCAweDcxYmYwMGVkLCAweDA5MzhlZDI0LCAweDA4ZWQzZmIyLCAweDY0ZGRhMWIzLAotCTB4MDBjYjg0NDcsIDB4M2Y3YzZmZjQsIDB4YTNiNDAxZWQsIDB4Y2UzMGFjMTgsIDB4NjdkZjFkZjYsIDB4M2ZiNGRmMDMsCi0JMHg3OTA2Mjg2NCwgMHhlY2NhOWVkNSwgMHhiZjFhNGIyMywgMHhlNTcyNjZjZiwgMHg1YjU3YTQ2MSwgMHgzN2U5OWViNCwKLQkweDk5ZmRmZjBkLCAweDA2ZmFlNzA0LCAweGY3ZDgyYjNhLCAweGY5ZTM4NDc3LCAweDMwY2RmMmFkLCAweGJmZjZjMTE3LAotCTB4ZmQzMGU0MWYsIDB4ZDBhOWYzNzIsIDB4NjFmMjA3MTMsIDB4MTliYzk5MDQsIDB4NzA0NTE3YzYsIDB4MDdkYjk1M2UsCi0JMHhlZDMxNzVmZiwgMHhhNzZlYmNiZiwgMHgyZmNkMTY3ZSwgMHg2Y2E3ZWI3OCwgMHgzN2RiMGZkOCwgMHg0ZGE2N2QzMywKLQkweDVkZDJiODQ3LCAweGFkMWU2OGYyLCAweDYxYzYxNmQ3LCAweDA1NmVlZmU3LCAweDE2MGRiNzdkLCAweDllNDIzNzQ3LAotCTB4YWI3MGQ5OGUsIDB4NGYwYzE0ZDMsIDB4NWUyMWE1M2YsIDB4ZDEzZjEwYWUsIDB4ZmJlNDdhMzEsIDB4NDhmYzdkN2YsCi0JMHgyYmYyODIzNiwgMHg2MDk0NjVjMiwgMHg3NjdlM2ZkZSwgMHgwZWMxZTQxYywgMHg5OGE5ZjIwMywgMHhjNWRhOTllZiwKLQkweDZlNWM3ZmE4LCAweGZlNjJmZGRlLCAweDRhZTJmODVkLCAweGFmYjkyZGU3LCAweDdmZjZkZTY0LCAweGUyMWY3YTcxLAotCTB4NWQ3YWE4ZmIsIDB4ZTM3OWYyMDQsIDB4OGM2ZjA4ZmQsIDB4YWY3OGUyYjAsIDB4ZmVhYmRmOTAsIDB4MzM3ZGQxYWYsCi0JMHhlNWU0N2JhNSwgMHg3ZmM3ZmRlNywgMHhhNjg3NzlmMSwgMHg5Y2U5YmVmYiwgMHhjM2IwNjZlZSwgMHgxM2Y1YmU1NSwKLQkweGU1NmFlZjhlLCAweDUzN2ZhNmRjLCAweGJhN2ExN2JlLCAweDM4OTBiZWZhLCAweGYwYTVhMjI1LCAweDc0NGYwZTcwLAotCTB4ZDJlNzllNGEsIDB4YzM4OGY3N2QsIDB4ZDIxMTNhNzksIDB4ZGQ0NzUwNDgsIDB4Y2FkMzhmMjcsIDB4MmE0YjI0YzMsCi0JMHhkZTEzMjgyOCwgMHg3YTA3MWRlYywgMHg4YWE5MzJjYiwgMHg0NzM3ZWNhOCwgMHg2NDc2ZDNiNywgMHg5NDBjNDc0ZCwKLQkweDJkMGUyNDJiLCAweDIxNzIxN2JiLCAweDNjOTFkZjFlLCAweDE1ZjlkNzY4LCAweGI0ODUyZGIxLCAweDlhOGVkNDgyLAotCTB4M2JkZDY5MDIsIDB4OTdiNDI1NDcsIDB4OTIzZjIxODQsIDB4OWUzZGY1N2EsIDB4MGQxMWY1MTYsIDB4MWRlODAxOWQsCi0JMHhjZTJiMDBhNSwgMHhiZTlmNWE3NywgMHg4YmMyMDcyMiwgMHhhMjkzZDhlOSwgMHgzMTNmN2YyZiwgMHhjZmNjZDYzYSwKLQkweDU4YmQxZDdkLCAweGM0NmZkMzNlLCAweGZiZTg3MjdkLCAweDY2ZjhlNTVjLCAweDRiYTc2Njk5LCAweGYzNmY0MWRkLAotCTB4OGMxNWM3MWIsIDB4MjkxZTAwOTMsIDB4M2NhNmRlOWUsIDB4N2JmYWE0NjMsIDB4ZDFkMWRjMTIsIDB4NjE4ZmVjZjEsCi0JMHg3MmVmMmRmNCwgMHgxNDFiNjNlMiwgMHhlNjk0ZDAxYiwgMHhhOTU2M2Y3ZiwgMHhlYzE5MzYyNywgMHhhZTBkNWIyNCwKLQkweGFkNGZkMGI1LCAweDFiNGRkZWYyLCAweGExZGJjZWNiLCAweGVmMTNkMGYxLCAweDQyMWUwNDUzLCAweDNlZmFhYmYxLAotCTB4MWJlODA2NjUsIDB4NjY3YzYxMDMsIDB4NzRjNmY4YzUsIDB4Mjk2MzFiYjEsIDB4ZjNkNDdhOWMsIDB4ZDVmMWE0OTUsCi0JMHhkNzViOTQyZiwgMHg2MGZhMDczZCwgMHgyYjdmZDMzZCwgMHhmNTdiYjM4NiwgMHhkYTMyNmQ4YSwgMHgwYzFhZGEwZiwKLQkweGIxOGU4OTJlLCAweGRlMTc3ZWI4LCAweDFiNTZiNGM3LCAweDllYjdkYzA5LCAweGFiNDhlYmE2LCAweDU1ZmUwNGJkLAotCTB4MzcxYzBkZjMsIDB4Y2Q2NzA3NWIsIDB4ZWE4NmE3NDYsIDB4ZWU1ODk2ZDUsIDB4YjI0ZDkwOGYsIDB4M2ZkMzFlNjEsCi0JMHhjZDMxMTczYywgMHg5ZWRlNzY4MiwgMHg1ZTc2ZmViMSwgMHhhYjM3ZmRlZiwgMHhlZGNmOTAxNywgMHhlZGVmNTRjMCwKLQkweGNjZTJmMjBhLCAweDY1ZWYwNGZkLCAweDZkMjNiNjg5LCAweDFjYmY5NjQyLCAweDIzYTNjZTUwLCAweGE5ZTNkMTg2LAotCTB4YjQxNjdiNjgsIDB4ZjI5NGRjZDcsIDB4Mjg1N2I0MTQsIDB4MDZlOWVjMzcsIDB4Y2VjODU5ZjgsIDB4YzQwYzIzNTksCi0JMHg2NGU5NDYxOSwgMHg1NmI1ZWY5MCwgMHhkZTk1YzlmOSwgMHg5Y2YxOTZiZiwgMHhmYmMyZTlmZCwgMHhmYTY1NjdhMiwKLQkweDY5MmRlZGRhLCAweDc0MWVlY2VjLCAweGE1YmY2N2YzLCAweDk4OGVmNGVkLCAweGQzZGFmNzhhLCAweDkzYmNlYzBjLAotCTB4YmJiODdmN2UsIDB4NmY1ZjVkMDcsIDB4ZjgxMTg5ZTksIDB4ZWFiZGQ3NGIsIDB4NGU3MGFkZTAsIDB4YWJhZDkyOGEsCi0JMHgzMmIxN2Y2OSwgMHgyMTdjMDkxOSwgMHhjZTFiMWJjNiwgMHhlN2JlMjNlNiwgMHgwMjQ2YjBiZCwgMHg4ZmJlMjJmOSwKLQkweDdmZDFkMjU4LCAweGIxZjU0ZDAxLCAweGY4YzUzZjhjLCAweGY0NzQxNDQ2LCAweGYwZjkzMmFmLCAweGU3ZTQ2NmRlLAotCTB4ZDcxNmIzMTksIDB4YjRjM2IwOTMsIDB4ZWMwOTc5YzEsIDB4ZWIwZTcwMjQsIDB4M2RiN2M4NGIsIDB4NWUxZjc4NmQsCi0JMHgyMGVjNDYxMSwgMHhkYjM1YmVmNywgMHg3Y2UxNDZiYSwgMHhiNjZmNzgyYywgMHhiN2FjYWNkMCwgMHgwNGZjZDNmMCwKLQkweGEwNTcxZjI4LCAweGU5MTc4N2JjLCAweGM3NjY1OGFjLCAweDQzNDFmYjI5LCAweGUyNzY3ZTljLCAweDBmNWJhZDMyLAotCTB4MWZiMjgxZjYsIDB4NzdlOWM0ZjQsIDB4OWQwNWZjMGYsIDB4NWNlZmQzYjcsIDB4NGY0YjRmN2UsIDB4MjJjYzI3YjQsCi0JMHhjYzI3YjQ1NiwgMHg5YzRlMWU1YSwgMHgzYWEyZTc3ZSwgMHhiZDM1MGUzZSwgMHg1NmZhNzFjZiwgMHg5Njg5Njk0NCwKLQkweDIyNDJhYmNlLCAweGRiOTU0YmY2LCAweDlmNzY0ZmZlLCAweDIzZmYxZWFmLCAweDcwZTM2ZWIwLCAweDc3OWZiODdlLAotCTB4YWI1YzFhMzQsIDB4OWRjYjAzZDMsIDB4YjhmNjYxOGIsIDB4M2RjNTFiZjQsIDB4YzVjZjA3YmYsIDB4MjVlNWI3MGIsCi0JMHg4YWVkMjA5MCwgMHgxYjA3ZTJiNCwgMHhhNWUxZjk3MSwgMHg3OTgzZDY4MiwgMHg5MjMwZmM1NiwgMHg2ZjA3ZmFiOCwKLQkweDY2Zjk4MmNmLCAweDgxY2VkZTA1LCAweDVmZTgxYTdjLCAweDRkZjExNjNmLCAweGIwOTFjNDRmLCAweDk3YTk1ZTdlLAotCTB4ZjEzZDgzNDcsIDB4ZDE5YWJkOTUsIDB4Njc4YzgzYWIsIDB4OWY2NzlmMDMsIDB4ZjVmMjJkMzgsIDB4NWI2MjZlOGQsCi0JMHhhMjllODQxNSwgMHhkYjM0N2M1YywgMHg0NTlmMDExNywgMHhhODc4ODE1OSwgMHgwNzRjZjdjYiwgMHgyNDY5Yjg3ZSwKLQkweGVmZWIwNWIxLCAweGM0MmY5YzJmLCAweDE5YTJlYmI4LCAweDE4NzYyYjdlLCAweGRiNDA1ZWQwLCAweDAxMTQ1NWVkLAotCTB4NzE3MzNkZGYsIDB4NzQ5NTliM2QsIDB4OGQ4NjNjZmIsIDB4NGYzNmVlYTMsIDB4NzZkM2Y0MWEsIDB4MDgzZmY3MmIsCi0JMHhlMTczZGY0MSwgMHhlMDE4ZjY4ZSwgMHgzMGI0NDljMywgMHhkYTQxODdlNSwgMHhiN2VjYzkyYSwgMHhiZTk0YWUzZSwKLQkweGQ2YWMzZjE1LCAweDEwMmJkM2Y5LCAweGFlNzRlYmVmLCAweGM1NzZiZWZlLCAweDIyZjM2NDNkLCAweGU2ZGVmNTE5LAotCTB4OTVmZWZjODMsIDB4NjJlZWUzZGIsIDB4NDk5YTRjYWMsIDB4OTdiMDJlZDUsIDB4Njg0OTU3MzQsIDB4NDFkYmJiYzcsCi0JMHhkZWJhMjJjOCwgMHgxNGI4N2FlZiwgMHg5N2QzNGRlZCwgMHg4MjM0YmViZSwgMHhjYTkwN2Y3ZiwgMHgwOTEyYmI4ZCwKLQkweDc3YTY5OWI5LCAweDA5ZGE1NmNmLCAweGI3MDU5NmE2LCAweDNmNzgzOWE3LCAweGZhMDc0OGQzLCAweGE4NWY0Y2Y5LAotCTB4ZmI3MDJmYjIsIDB4ZTU0MWUzODMsIDB4MTdlMDJmZjcsIDB4YzYwZmQ3MmEsIDB4MGU0M2JiNzIsIDB4YmQ3OTAxYzksCi0JMHgzZDM5ZTk2MCwgMHhmOGExMDlhOCwgMHhjM2NhODViYSwgMHg4YjkwNWE5ZSwgMHhhYjViNGM0NiwgMHgxNTdlOThjZCwKLQkweGY2MDRmYjZiLCAweDhlYjFmM2E1LCAweGI2ZWU0MTRmLCAweDUyZTRjODdmLCAweDRjNzNjYWU3LCAweDQxOGYyZjllLAotCTB4MmVmMmM3M2IsIDB4ZDc4ZGZmNmMsIDB4ZDNlYTNiNTgsIDB4M2UzZWZlNDEsIDB4OGZjNTFjNzEsIDB4ZWI1YTJmZTEsCi0JMHg5Yjg3OGExMiwgMHhjMGQzMzUzYywgMHgzNWU4NDUyNSwgMHg5MDVhYWM4ZiwgMHgxMjdlOGIxMSwgMHhlZmMwNDFkNiwKLQkweDMyZGVhZmIxLCAweDcxMzNlYzFhLCAweDAwZGI4NmFmLCAweDVjZjIyYjdmLCAweDYyYjE4Zjc4LCAweGU3ZjQxNzcxLAotCTB4MGZjZGQyMzIsIDB4MGQ4ZjdhZTQsIDB4M2ZiODFhNzksIDB4YjE2ZWExYmQsIDB4ZDc2ZDFiYTYsIDB4MGRkM2IwZGMsCi0JMHgzNWNiMGVmZSwgMHg2YjNkYTBkZiwgMHhmOTg0Y2RmOSwgMHgyODdlZjE3ZiwgMHg2OTE5ZmIzZSwgMHg0YzEzZjEzYiwKLQkweDE3MWQyZjc4LCAweDUwZDQ0YWVlLCAweGJkNDZlZTM4LCAweDE3ZWEwOTc1LCAweGUwYTk1ZjRjLCAweDJjOTc2ODM0LAotCTB4N2UwYTFjN2YsIDB4ODI2NGZiNjQsIDB4MTZiMTNlN2UsIDB4MDg3ZGFmOTQsIDB4MGI5MmJmYjMsIDB4MGY5NDVmMTQsCi0JMHg4ZmM0MGM2MCwgMHgyZGFiNWFlZiwgMHg5MmZjOWY2OCwgMHhkMGZiMjlkYiwgMHhjZThlYTFmMywgMHg0ZjhhMmJlNywKLQkweDZhMWVjYjgwLCAweGViZTMwNTFhLCAweGFiYWM0OGQ4LCAweGI3ZDg5MTY5LCAweDkxMmRmMjkyLCAweGVhMzM3NzgwLAotCTB4MTNhYmE3YmIsIDB4MTZlMzE1MzEsIDB4NmJkOTQ3ZmIsIDB4M2Y0MWEzNmIsIDB4OTk5OTIyOWUsIDB4NDNkNzA5NWYsCi0JMHgxMDEyMWYwNSwgMHg0YzllMTQ1NiwgMHg4YmJmOWM5OCwgMHhhODUzOWZlYiwgMHhlM2EzMGRkOCwgMHhkMzU4ODdiZCwKLQkweDQ2ZGRkZWEwLCAweGY4YTFhOTEyLCAweDNiNTA1MjlmLCAweDUyOTlmNzEwLCAweGU3ZWMxNDVkLCAweGUzMDU0MmEwLAotCTB4OGJmYTUwODcsIDB4NzJlYTI3NTgsIDB4ODFhZjQxYTcsIDB4Yzk4ZGI4ZjUsIDB4MTE3NThhODMsIDB4NmJiYmI0NGUsCi0JMHhlY2ZmYjAzYSwgMHg3YjFlYmUzOCwgMHhkMjJlM2YzMSwgMHhmZDYwZDg5MywgMHhiZGU4ZWM1NCwgMHhhMDYyZTgwYSwKLQkweGE1ZTMwM2ZjLCAweDliOThjYTcyLCAweGQxOWNmYTgzLCAweDdmM2ZlNzQ4LCAweDhhNWI5ODdiLCAweGQ5YTdhM2Y0LAotCTB4ZmEwMzRmZDYsIDB4MWM5NDg0ZmMsIDB4NGEzYTk3ZjQsIDB4ZDgwNDQ3ZTUsIDB4Yjg2OTNjNzEsIDB4ZWI0NzQxOWUsCi0JMHg3ZDVjYzMwNiwgMHg1NGViZGMxYiwgMHhmYjMwZGM1MCwgMHhlZTBjY2JjZSwgMHgyZDY3NjFjNiwgMHg3OTc4ZDM4MywKLQkweDc3NzA2NmUyLCAweGRiZGRmZjUxLCAweGM3NDNmZWMwLCAweDYyMWZjYmNiLCAweDFmMDExZjcwLCAweDQ1YjNlNTY2LAotCTB4Y2UwYzYzZjksIDB4MTkyN2Y5MTEsIDB4N2ZiNDQ4M2MsIDB4MTg0M2MxOGEsIDB4ZDNjOWZjN2MsIDB4MGY0MTM5YjcsCi0JMHg4ZmZhZTI4OSwgMHhhZWU3ODNkNSwgMHg2YjdiMzc4YSwgMHhkZTk2ZmRmYywgMHhmMzcyNjM4OSwgMHg3NzJiMTg3NCwKLQkweDk4Y2M5ZDNhLCAweDA4Y2JmNDAwLCAweDVlNTVmZTVlLCAweDAyYzVlODVlLCAweDQ5M2VhMjdmLCAweDI2NmY1ZTBjLAotCTB4ODBiZjM3YWYsIDB4NjRlMTI5ZWIsIDB4NWJmMzE4NzksIDB4YmE1MjQ2NzUsIDB4YmRlODZlZWUsIDB4YzYxN2NhMWEsCi0JMHhkMDNhNzM0NSwgMHhkYWY4MDY3NiwgMHhlZDExZjQxMSwgMHgyNDRiN2U4OSwgMHhlOWI0OTdhNiwgMHhiYmQ4OWQ5OCwKLQkweGZkYjFjNjZmLCAweDMwZjNmNjg0LCAweGQyOTNkM2Y2LCAweDkwOWJkYTE1LCAweDgxZjgwZmQyLCAweGYzOTY4MWYyLAotCTB4ODBmODE2ODEsIDB4N2M2YzU1OTAsIDB4YzAyOGRkYjQsIDB4M2ZhM2I5YjksIDB4YmVlZGJmZjgsIDB4ZmJhN2NiNDAsCi0JMHhjYmU2YWRjNiwgMHhjZGRmMzgwNywgMHg4MWNlYzI1ZiwgMHg3MDNkNTExZCwgMHhjZTExMThiZiwgMHg0MDMyNDRmNCwKLQkweDM4MGY4ZjM5LCAweDhiODlkZTFlLCAweGQyZjRmMzYyLCAweDdlYzI0MTI1LCAweGE2M2M3MDk2LCAweGM4NGQ3YTc4LAotCTB4ZmY3OWZhYmEsIDB4OTdlNzhmOWUsIDB4YmQxZmI3OWUsIDB4ZDdlNDMyNmMsIDB4Y2Q5YWIwZGYsIDB4ZDYwYmQxODcsCi0JMHg4NWVhMzQ0NywgMHgzYmRhMmI4ZiwgMHgzZjU1NThiZCwgMHg5ODcwMmU5NywgMHhhYzBmNzQ2ZiwgMHgzMTE4NDhmZiwKLQkweGRhYjI3N2UyLCAweDliM2QyZjViLCAweGM3YTBhYmU5LCAweDI3Y2EyZjk2LCAweDc0ZmY2MTI3LCAweDg1Zjc4Y2RlLAotCTB4OTUyYTVjNjUsIDB4ZTNkMjZmMmYsIDB4NjRhZDZiZmQsIDB4ZWYzY2JmNDMsIDB4ZTAwZWM3M2MsIDB4NzlmMzM0ZjMsCi0JMHg1ZDNjZDk5YSwgMHg4NzI1N2UwYSwgMHg4OGVlZDIzYSwgMHgyZjYzZTQwOCwgMHg2NWVkYmRmZSwgMHgxNGY2ZjBlNiwKLQkweDdiNTgyMzcyLCAweGQxNDIyNzIwLCAweGQzNGJmZGM1LCAweDg1NTM4YzQ1LCAweDU1OWUyZjRmLCAweDg0ZjgxM2UzLAotCTB4MzJmNThkZjUsIDB4YzYyOTdjOTUsIDB4ZjVhODdhZjksIDB4ZmIzM2ZlOWQsIDB4Y2FmNTYzY2IsIDB4MDhlOTQzN2YsCi0JMHhjOTQ1YTdmYSwgMHhlOTc1ZTVkNywgMHg3ZDMyN2I5YSwgMHhhZTgwMzZmNSwgMHhmM2YzZTcxNywgMHhmZGM3MTkzOSwKLQkweDBhNDg1Mjg2LCAweDdjY2UwZmVjLCAweGZlYzM3NTYyLCAweGZiODBkOWI5LCAweGZkOTJlN2ZlLCAweDUwNWM1YzU0LAotCTB4YWVmYzIwZmYsIDB4NDdiNjE3M2UsIDB4MWJlYzA5ZTksIDB4N2I0MGZiNmEsIDB4MDZjOWI1OWMsIDB4MDk2N2U1ZjcsCi0JMHg1NTBlZGZmYSwgMHg2ZmMwMzNkOSwgMHg1N2M5YjM3MywgMHgyOTVmYjdjZiwgMHg0Y2YxMTFlMSwgMHhjM2I0MGNiZiwKLQkweGU2OGE3ZGQwLCAweGI4NjgzMDBmLCAweDAxOGRkNzNjLCAweDVjMjAzZDc5LCAweGYwZDU3NzA1LCAweGUwYzhjNGZkLAotCTB4MjkzYjBlMDQsIDB4MjAzNGYxNGMsIDB4MzE4N2U0NTksIDB4M2Y1MTNhZjgsIDB4NTFiZjk1OGMsIDB4NWY3MGU3OTQsCi0JMHhhMjA4ZmU1NSwgMHhmZGIyODc4NCwgMHhiMGE5ZTYyNCwgMHgyMGZmNzAzMSwgMHg3OGQ4YTBmNCwgMHgyZTQzY2UwYiwKLQkweDRiZTAxMGQwLCAweDgwZDUzODAzLCAweGMxOTZmNWJlLCAweGEwOGQ3YTA1LCAweGNlOTRhODUzLCAweDNkZDgyYWIzLAotCTB4ZjBiYzZhN2UsIDB4OTc3ZTYwMzMsIDB4YmI0MGYyZTgsIDB4MDQ3NjE1Y2EsIDB4NDc2MTU2OGYsIDB4M2EzNDhmNjgsCi0JMHhjNzY4YWVlNSwgMHhhZGY2MDVlYiwgMHhmNzQ3Nzg4YywgMHgzMmJmNWE3OCwgMHgzYTdhNzViYywgMHhmZjBhMWY4NSwKLQkweDI1NmNmZDBjLCAweDI1OGZkMzFiLCAweGE1NGM5OThiLCAweDU3NWE5NWUzLCAweDIzZGY0MWQ4LCAweDE2YTM1NjI1LAotCTB4NGFlZGM0ZTksIDB4ZTk0YmY3NzAsIDB4Y2JjNzdkYjEsIDB4NmViMzI0MGYsIDB4YzE4ZTMwZWMsIDB4ZWU1NGFlNWMsCi0JMHhlM2JiZjFmOCwgMHgzNjlmZmZiMCwgMHg3ZGZhZTE1OSwgMHhmN2IzYzM3MCwgMHhiODM4YmU4MSwgMHg0YzhmZmY2MSwKLQkweDVmYTEzMDRmLCAweDYwZjcxOGFjLCAweGRmYTI5YmYwLCAweDM4MGRlYjczLCAweDM3MGRjMWZlLCAweDQzZjI4MWNjLAotCTB4MDFlODZhM2YsIDB4ODRmYzM3N2MsIDB4OTk4ODA5N2IsIDB4OTIzN2M2ZjYsIDB4YjkxZjI4MWQsIDB4MjUzOTJjOWYsCi0JMHhkNWMxOWM0MSwgMHg3YzVlNDVlYSwgMHg3ZThmNDNmYywgMHgyMzFmMTQxZSwgMHhjYzJlM2UxOSwgMHhjNWI0ZmMwNSwKLQkweDQxZTY1YzFkLCAweDhiMGE2MmEzLCAweGU5ZjVlMDY3LCAweGI5ZmQwM2I5LCAweDJiMTc0OTNiLCAweDIzZGI1ZGQ4LAotCTB4M2I2YTNiNTgsIDB4M2EyMmQxZTQsIDB4Nzg3ZGZhM2YsIDB4OWY4MTFkMDcsIDB4MDdlMjNmZGUsIDB4M2U0YzE1MjMsCi0JMHgyOTQ0OGYzOCwgMHg5MjYzMDJlMCwgMHgzOWExN2NhMiwgMHg0YjdmOTE1ZCwgMHhmYzhhMGRlMiwgMHgxNGZkMmQ1YiwKLQkweGMxOGM5OGYwLCAweDViYjdmMjhhLCAweGY4ZjAxNGYzLCAweGU1MTU1YmRjLCAweDBhNDU2YzhiLCAweDU2YmI5ZmI4LAotCTB4ZGVmZmJlNTEsIDB4MjFmZTY1N2EsIDB4NzIxZDAzMjIsIDB4NDE3NzVhOGUsIDB4MWI0YmYwM2EsIDB4YjUwNzM1OWEsCi0JMHg3NDgyZWQ1NCwgMHgxZDBjYjdmMCwgMHg5MGVjM2I2YSwgMHhjMTc3NmExZiwgMHgxNTg3NjE3NywgMHhjZTMwZjBmYSwKLQkweDNiMmVjMjJmLCAweGY0YjkzNjQ5LCAweDg5YWZlZGMxLCAweDk1OWU5YTVhLCAweDY0OWYyODNjLCAweGFmZWQxZDhkLAotCTB4MDc4ZTYxYzksIDB4NDczZDI5ZTIsIDB4MjgxNGFhOTEsIDB4YjBlYzAyMzcsIDB4MzM4NTA4OTQsIDB4ZmMwMWZlY2UsCi0JMHgzMmE3M2FhZCwgMHgyMDUxZGM3YiwgMHhiYmJiYzgwYywgMHg3ODhlZDAyMiwgMHhmMWI1NTc1NCwgMHhjZTQzZWEzOCwKLQkweGMzYTM5MDU0LCAweGU2MmIyNjNiLCAweDg3MDdlMjNkLCAweDY0NzlkZTYyLCAweGY3NGU4YWJlLCAweGYzNDJlMDJhLAotCTB4NmZlNTE0NmYsIDB4YzhhYzVjNDksIDB4YThmMmQ1YmYsIDB4MmI4ZjRlOGEsIDB4Y2ZhZGRiZTAsIDB4NGFiNGU4YWEsCi0JMHgxNTk3YTc0NSwgMHgxYmJmODJmOSwgMHgwNzZjN2RiOCwgMHgzYTY4YjVkOCwgMHgwMDU0ZDNjYywgMHhhNWI5Yjg3NCwKLQkweGRiOTFlOTAzLCAweDc0MDA1MzU0LCAweDE2YjQ3MjFhLCAweDZkYzAzNWU5LCAweDNiZjEwMDJmLCAweDJlZDU2ZjY4LAotCTB4NWNmNGRkNDgsIDB4NGVmZWY1MDMsIDB4ZWU5MDM1Y2YsIDB4YjAyM2U3YTYsIDB4Y2VhOWVkOGYsIDB4YjU2Zjc0YzAsCi0JMHg1YmJmYmYxNSwgMHg3YmU5OGI5ZCwgMHgzZjRjMzZkNSwgMHg2OThkMWVhOCwgMHhkMzFkYjU1MywgMHgyYzVhZWFkYSwKLQkweDllYmFiOWJmLCAweGY4NjJkN2Q5LCAweDBiZjE0NzNlLCAweDM4MzY4Yzc2LCAweDljYmNhMjUzLCAweDBkYjJmMjhhLAotCTB4NWYyODUwY2UsIDB4MTc3MDY2ZWYsIDB4MGMyOTkzMGUsIDB4ZWJlNTY0OGUsIDB4ZjI4MjlhOWYsIDB4OGNmODNmNzQsCi0JMHgzMGJmODFjNCwgMHhkODI0Y2Y0YiwgMHhkZDM0MDllYywgMHg4MTg2ZTcwYiwgMHg1YTg5YjhiZSwgMHhlNGE3Njg4ZCwKLQkweGIxZWI5MDMxLCAweDUyNWZiYzMxLCAweDQyOTZjNjMyLCAweDVlYzVkMmM4LCAweGMxODQzMWY4LCAweDIzMDdlYjI4LAotCTB4MWJjMWY4YjMsIDB4ZTIxYjZiNjEsIDB4YzYxZWRmYWIsIDB4OTdjNmY3ZjIsIDB4NDE3MzgxOGMsIDB4ZjMzMGZhZTksCi0JMHgyOTc0N2U5NywgMHhjMDUyOGRhZiwgMHhlNjQ5ZjU5NSwgMHg4OGU4ZmQyZiwgMHg3NjU0Yzk3ZSwgMHhlNTA5MTQ5MiwKLQkweDM2YzNkMDlmLCAweDIwNDM4ZTQ4LCAweDFlOGRjYTdmLCAweDFhYTYyN2Y0LCAweDZjMmJmYTMwLCAweDgwNDRiMTZjLAotCTB4ODVlMGVhNWQsIDB4Y2Y4MDExZGUsIDB4NjcyZWRjODMsIDB4MzM3NGZkMjMsIDB4ZWRhNzlhNjksIDB4ZmY3ZDgzYTcsCi0JMHgxMjRmNGFhOCwgMHhlZjI5NDFlOSwgMHg1NmI3Njg1MywgMHhmNDEzYmQ2MywgMHgzYTZkZTcyNCwgMHg0MTNmZmMwMiwKLQkweDUxMDA3NjYyLCAweGE2MDRkZGVlLCAweDZlZGZiNGFmLCAweDIxZTBmM2MwLCAweGM2MGU2ZDhkLCAweDlmMDI0ODExLAotCTB4MTQ5ZjcxOGIsIDB4MTFjMmY3ZjMsIDB4NzQ4OWRmMjIsIDB4ZjkxMjhmNmIsIDB4ZTU1MzhlMWMsIDB4MWQ2MGE5MjcsCi0JMHg1ZjE5ZGYyYiwgMHgwNWZlNzQ4ZCwgMHg5MDRmZjlmMSwgMHhjYTdjNmEwYiwgMHg5N2E2NjYwOSwgMHhhMGE5NmRiOSwKLQkweDUwZjgwOGM3LCAweGU0MWNhZDkxLCAweGRiM2NhMWM3LCAweDgzZWYzMGY1LCAweDE3OTMwMzc2LCAweGY1ZDcwOGY2LAotCTB4MGRiMzM3NjgsIDB4ZmVjZmQzYmMsIDB4YzNhMDlkNTUsIDB4MWYwMDc3N2EsIDB4ZGRjNGZkYzMsIDB4MzUxNWNhMzIsCi0JMHg2MDRhNWZmZSwgMHgxNWYyMmFmYSwgMHgwYWVmYmI5YywgMHgyMWNkNzNjNywgMHgxY2RlMjkwZCwgMHgzODdiNWU4NCwKLQkweDA5NzRjZTFkLCAweDI3N2RmNzZlLCAweGY5ZmJlZDgxLCAweDZlMzdjYjEzLCAweDg1Y2Y3YjgxLCAweGJiNzRkODYxLAotCTB4OTNlYTM3YmQsIDB4ZjMxMjU1ZWQsIDB4M2FhOTY5MDMsIDB4NTYwZGYyY2IsIDB4MzNmNDEyOGUsIDB4ZDFiZjAyOWYsCi0JMHhmNzBkOGRmYywgMHhjYjRjM2Y5ZCwgMHhkYzMwYjY3ZiwgMHhiOTk2N2I4YSwgMHg2ZWVmZTIwZiwgMHg4YzVhNzg1ZSwKLQkweDY5YmZmNTExLCAweDYxZjM1MjEzLCAweGZkYzI5ZTFmLCAweDY4NDdhNzlhLCAweDU5YmRkMWUzLCAweGQzMzdhNTFiLAotCTB4ZmE5YjY2NzYsIDB4MjQxOGEzMmQsIDB4ZjQ4YjYzNzMsIDB4NGUyZTE0NTEsIDB4YTQxOTc3YjksIDB4ZDcxZjNkMjUsCi0JMHg1OTVkZDVjMywgMHg0MGNiNmJlNiwgMHgyMmE3MmYwZCwgMHg1YmNhMjA2MywgMHg3NGQ1ZmJjZiwgMHhjOTE2MzM1YywKLQkweGU1MWU3NjE2LCAweGY0YWRiOGZiLCAweDA0NWRlMmFhLCAweGYxZTIxZmJmLCAweDc4MDkxNDQ3LCAweGYxY2JkZWRlLAotCTB4ZTVlZGVhMmQsIDB4ZTA0ODJhZjgsIDB4MjQ1OTIyZjcsIDB4YjhhY2EyZWIsIDB4MDEyNWI4ZjcsIDB4YmRhNjNkZWUsCi0JMHhiZGM0MmJkZiwgMHhlYjlmMzI4OCwgMHg1OWViMWZiZiwgMHg3NWViYTViZiwgMHhiOTEwNGYyZSwgMHg5ZDgxMmZiYywKLQkweDg5ZTkwZjliLCAweDlkNTVlZTBkLCAweDI3N2RiMzc3LCAweDg3YjlmMjdiLCAweDY3ZjlkMjA2LCAweGU4MzU5ODM3LAotCTB4N2NhMzM0NTcsIDB4YjNhMWQwMGIsIDB4NDc1MWQzOWUsIDB4NGRmZDYxZWEsIDB4ZWNmY2NlNzQsIDB4OTYyNjEyMzAsCi0JMHg1ZTFmYzdmOCwgMHgzNmI2N2Y2ZSwgMHhmN2ZjMGI5OSwgMHg3YjFlMDFlNywgMHg5Y2ZlZmY4MSwgMHgwMDUzNTFkYiwKLQkweDhmZDhiMGZiLCAweGJiYTgzZGM1LCAweDAzZWY5OGJhLCAweDc3YmYyODU1LCAweDc4NDIyZjU3LCAweGQzMTNiNTRmLAotCTB4ZjljYmQ1YmQsIDB4Zjk4MzUwM2UsIDB4YzMzZjU1ZWYsIDB4ZGYxNzAxZjcsIDB4ZjdlM2Q2MDcsIDB4OThjOWVhODYsCi0JMHg2MDc2YThlZSwgMHhiZDhiYTYzYSwgMHgxZGY0ZTQwMiwgMHg0N2M2MDc0NiwgMHg4MWFjZmRiZSwgMHg2NzVlN2RjMCwKLQkweDQ3ZTMwMTgzLCAweGYxNzg4YWU4LCAweDUzODg1OGI5LCAweDU4NTc5ODMyLCAweGQ0OTVlMzAyLCAweDFmOTc4YWZiLAotCTB4YjNmYjdlNTQsIDB4MGI3ZWQ4YmIsIDB4OTllMzc4ZmQsIDB4MmViZDNmNDAsIDB4MjQxZDNmMzQsIDB4ZGYzOTBlNWMsCi0JMHhkMDc0Mzk0NSwgMHgwN2Q2ZTQyYywgMHg3ODA4YjYwYywgMHhhMmFkODMzZiwgMHhmNzI4MDdmYywgMHhiZTc4ZGEwZSwKLQkweGVkODMzZjczLCAweDYwMWM5ZjNjLCAweGVmYzA0M2IwLCAweDk0NGFiODMxLCAweDczZGFjMDNmLCAweDA2M2RmODBhLAotCTB4NGRmMjg4ZDcsIDB4NzgzMTc2MGMsIDB4YTIxZmQzZWQsIDB4ZDIyM2NjNWMsIDB4MDU2ZjU4NmUsIDB4MjA5MWY0YzYsCi0JMHg3OWNkMGI2MiwgMHhkZDlkNjFiYiwgMHgyNDczMzg5MiwgMHg4MjYzMzNhYywgMHg1NmZjZjkwNSwgMHgwMGRkZTJjYiwKLQkweGE1NThjOThmLCAweGNkYmExMzA1LCAweGE4NjFlZmQ0LCAweGE0NWIxZjk3LCAweDUzMjM3YTg1LCAweGVhMTg3ZGVlLAotCTB4YjhmOWVhOGQsIDB4ZThkZWJmZDYsIDB4MDYxZWQ3Y2MsIDB4OTU3NWFjNzgsIDB4MjM2YmY0MTYsIDB4YmU4MWM1YzgsCi0JMHhmMjJjMDQ3NiwgMHhlMjIxM2VjNSwgMHhkODM2ZmFmMCwgMHhhZWNhM2Y3MSwgMHgyNDdlZTNiNywgMHg0NzdmOWNmMCwKLQkweDljMzM1MmQxLCAweGIzMjVlYTAzLCAweDQzYjhlMzA0LCAweDQwNGYwNmYyLCAweDA1YzU2MzBjLCAweDFlMjkxYWJhLAotCTB4ZTEzYzEyZWEsIDB4MmIzY2U5OGIsIDB4ZjA4MjFlMDEsIDB4ZDk3ZjhiNjMsIDB4MTA5ZGQ1ZmQsIDB4YzIzODNmNjQsCi0JMHgyYmU4MDdlNSwgMHgyM2ZmYjQ0NSwgMHgzZjgzNWQ3NCwgMHg0YmM3MDQ0MiwgMHg4OGNjYzM2NSwgMHg3NTVlNzg5OSwKLQkweDE4OWU4MDQ0LCAweDA0OTBmNWMzLCAweDJkZmU2OTQ4LCAweGJmY2IxZDNjLCAweGVmNmM5NDFmLCAweDMwZjhiYzgyLAotCTB4MDNiNzlmODEsIDB4MTg2MWNkZTUsIDB4NzMyNzk1MDcsIDB4ZTQwMjM4ZDksIDB4Y2I5ZjMyOGQsIDB4ZGY2MjIzOWIsCi0JMHhiMmUyYzAxYSwgMHg4YjBkNDljYiwgMHg3YzRjYmVlNywgMHhiOGRjNDA1ZiwgMHg4NGE3MWUyYSwgMHhhNWIxZWVkNCwKLQkweDZmMTc4YjA3LCAweDJlMmYxYTBhLCAweGZkMDMxYmZjLCAweGIwYjlmOTZkLCAweDkzY2Y5MzBiLCAweGMzZDE3NjQxLAotCTB4Yjk2ODY3NjAsIDB4YWI5NzFkZmIsIDB4Y2NhMGYwYTEsIDB4ZTBlMjg1ZmYsIDB4ZjkwZTIzODksIDB4YmMzYzU0MjMsCi0JMHhmOWMwOGJlMCwgMHhiNmYzYjBkNSwgMHhlYTlmZTE5NiwgMHg4MWM0YzY5ZiwgMHg4ODIzYmYyMCwgMHg2Nzk0YWIxYywKLQkweGNmMjEyZjg3LCAweDk3ZjFmMmQ0LCAweDY2OTNiYjkyLCAweGZkYzFhNzk0LCAweDk4YjkxMDQzLCAweGNiNTRlMzBhLAotCTB4YzkzZTY3NDUsIDB4NzUwNWZiODAsIDB4MGE2OGY0MmEsIDB4ZDNkZTIxM2IsIDB4ZWQwYzIzYjksIDB4OGUzMWY1MTQsCi0JMHgwZmQwNDQ4YywgMHg4M2JlM2JmMywgMHhlYjEyMmQ3OCwgMHgzNzFjM2M0MSwgMHhmNjg0NmUzOSwgMHhiZmYzM2QyNSwKLQkweDJkY2RmMTEwLCAweDc1M2Y3ZDVlLCAweDc5MjNjNjJjLCAweGZiMGE3YmY1LCAweDllZmRmN2U5LCAweGYyMGIxZDQ5LAotCTB4ZGVjOWJiYWQsIDB4MTkyMWRhMWYsIDB4Yzg1ZDFmY2MsIDB4YmVmMTUwOGYsIDB4M2VkOTEzNDMsIDB4ZmY5Mjk4MWYsCi0JMHg4ZTU4MzhiNywgMHhhZTdhMzY5ZiwgMHhmNGU3NGRkYSwgMHg2MmJmODZjZSwgMHg1N2Q5Y2NkYywgMHg1NmMxYzc5YSwKLQkweDI2NWRiYTVjLCAweGI2OGY4YTQ2LCAweDBkYzQxMTBkLCAweGU1MmQxYmU3LCAweGQ0OTY5YTNmLCAweDJiOGMzNmM5LAotCTB4NGQwN2JhZDIsIDB4NWJkN2YwOGMsIDB4ZTk3NGZmOTgsIDB4Y2FkYzA4YTYsIDB4NWMxYjM2NGIsIDB4OTJmZDY5NjMsCi0JMHhkMWIzMjdhZCwgMHgwZWExZjVhZiwgMHhiZTczMGZiYywgMHgyMmQ3NTkyMiwgMHgxM2Q5M2NmYSwgMHgxYjU5NGZjMSwKLQkweDM1M2U0ZWRjLCAweGFkODdlOTkxLCAweDgzMjdjMmRiLCAweGJmNWE1NmJkLCAweDI1ZGVlZDEzLCAweDcwNzQ5M2I1LAotCTB4NGRjYTJhMGYsIDB4M2UyMWQ0NGMsIDB4YTdiNDM5NjgsIDB4Yjg5NjVmM2IsIDB4ZTQxZWViMWUsIDB4ZmMyY2FmN2YsCi0JMHg2NjVmNWJiNywgMHg3YTkyYTk3NiwgMHhjNjBjMmI5ZCwgMHgzNmI1ZmViNywgMHgzOTI5Yzc4OCwgMHg0ZGZiNDA2YSwKLQkweGY0NmZmYWU1LCAweDRkODJjNzQwLCAweDFmMDEyMzFiLCAweGQ5MzJmNTk1LCAweDU1MGZiY2FkLCAweDk3YWM0MWM2LAotCTB4ZTNmMDA2ZGQsIDB4N2Y0NzJiYWYsIDB4MjMzNzBhNmUsIDB4MWUzYzFiNWMsIDB4ZmFmZTcyZTgsIDB4YjcxYTliYTUsCi0JMHg0YjBhMjkzYSwgMHgxMjI5N2Y1ZiwgMHgzNzRlMjllMiwgMHhiYzA0OGRhZCwgMHgxOTJmNzZkMywgMHhmNzEwMTQ4NywKLQkweDI1ZThmYjUwLCAweDEzNGUxZWUzLCAweDEzNGIwM2M2LCAweGViMjM3MTU1LCAweGNiNzFiODYzLCAweDNmZGZjODNkLAotCTB4Mjc0Nzg3YzksIDB4ZjNjNmYzYTMsIDB4NWU1YzQyMmYsIDB4MmYzM2U2ZWIsIDB4ZmVjYjc4YzIsIDB4ZjA0NWVlNzksCi0JMHhjMjNiMjZjZiwgMHhhZDBmNjBjYywgMHhjNjMwZTU3YywgMHg3ZjdhODkzNSwgMHg2MjdhNjQ0OSwgMHhlMTJmY2JkYiwKLQkweDMxZGI2YTNkLCAweDM1YjdhZmE2LCAweDZkYmU0MjllLCAweDc4YzdlZDdiLCAweGQ4NWFmMzg4LCAweDBlZmU4ODU4LAotCTB4MjQxNGI3MGIsIDB4MDJlNzIwOTAsIDB4YmFkZjAyOTEsIDB4NGQxZTIwYWUsIDB4NzU1ZGFmNGQsIDB4ZmM4ZmQwYmIsCi0JMHhlODM3YTUyYywgMHg5NjM4ZGVhMSwgMHgxNzE2NzJkYSwgMHgyYmYxZTE2NCwgMHhmZGM3ODIxYiwgMHhkNGFiYzQwNSwKLQkweDFjM2YxYzRkLCAweDNhNzVlMmVjLCAweDQxNWM4NWFiLCAweDRhMjFjYWRjLCAweDQwNTdiZWM3LCAweDcyOGYwZGJmLAotCTB4ZjRlMGZlN2YsIDB4NTBiZjBiM2IsIDB4MmEyNjM1M2EsIDB4ZDdjZTU2ZTMsIDB4OWZjYmY5Y2QsIDB4MjYyZWFmMjEsCi0JMHhmYjhhZGM2NCwgMHhlMjI2ZjAwYSwgMHhkYTI0NTcwYSwgMHg2YzNjODJmNiwgMHhjNjJhZmNkZCwgMHhjNmRkMDEwOSwKLQkweDZkYjY4OWQyLCAweGYxMDY5ZjNjLCAweDhlYmEyZDk4LCAweGMxZWZkY2U5LCAweDI1YWNmNzBjLCAweGZkNzA0NzhkLAotCTB4MTBmOTZkYjQsIDB4OGYwOGY2ZTMsIDB4ZGUyMzZiZWYsIDB4MjU4ZjE2MWYsIDB4ODlhZTc5ZjEsIDB4MWMyZWYxNjAsCi0JMHgwMzBmMTBmZiwgMHgzYmY0ZDBmNywgMHg3YzYxN2I4ZiwgMHg0MjYxZTIyYywgMHg0YzVjYzFjNSwgMHgyZGY2Y2VlYywKLQkweGJlNThlZjFlLCAweDJiOGYzOGU2LCAweGNhNGJkMWYxLCAweDVmMzUzYTA1LCAweGUwNDhiZTMyLCAweGI4NzgwY2MxLAotCTB4MmJhZTNmYzksIDB4Mzc5MWJjNzgsIDB4MGJkMzhmZmUsIDB4NWNmMTA3ZTgsIDB4MGEyZGI4ZGUsIDB4M2E1ODQzMGYsCi0JMHg4M2M4ODI0MiwgMHgxZTJjNTViNiwgMHhlM2ZmN2Q0YywgMHgzODQzY2ZhMywgMHhkMTUyZmZhZiwgMHhmNDMzY2M1OSwKLQkweGQzYWQ5MjM5LCAweDZhZmY4ZGNiLCAweGQxMjY3M2YxLCAweDEyNzM4OGEyLCAweDEwYmQ2YTc4LCAweDI2YTc4ZTVjLAotCTB4NjdlYWZkYjEsIDB4MDBiNmI3ZWIsIDB4MDkyNTM2ZmQsIDB4NjZiYWRiZjQsIDB4ZTYyYjdlODUsIDB4MDU3NTRhZGIsCi0JMHhhZmFkZWY5MCwgMHg5NjBjNzdiMCwgMHgzOTQyZWVkNSwgMHgxNDE3OTZhZSwgMHhmNzYwYjYyZiwgMHg5ODkzN2QwZCwKLQkweDY3YThhYTljLCAweGU2ZWI0NGZiLCAweGI2ODk5NzA4LCAweDZkZjdmYWQzLCAweDFiMTVjZmM4LCAweDhmYjBmNTlhLAotCTB4YmFmZjU5ZWYsIDB4YjMxN2Y5OWUsIDB4ODRmYjAzZjUsIDB4YWRmYzZmY2IsIDB4OGQ5OWRiN2YsIDB4MDlmYTFiNzIsCi0JMHhiY2UxZDc0MiwgMHhlMDg2Y2E5ZiwgMHhmODZlNTRmZCwgMHhhOTRmZDE0NiwgMHhmY2NmNTZiMywgMHhkZmRkMmU4ZCwKLQkweDEyNmRhZDY5LCAweDQ5YmE3N2I0LCAweDcyNjlhNjA3LCAweDZkZjk5NmJhLCAweDI0YjdmYmE5LCAweDRhYmRmOGU5LAotCTB4YThmN2Q3MGQsIDB4YzgzZjQ3YmMsIDB4OWMyNzFlNjEsIDB4NTFjMzczNWIsIDB4YzVlNmI2M2UsIDB4MzVhNDVkYTMsCi0JMHg2OTY1YWY1NSwgMHg3ZmZmODQyZiwgMHg5MzViZmJkYiwgMHhiZmFjOGQ3MiwgMHgzNzFmMTg1MSwgMHhkNmU4YzYyZSwKLQkweDgwNzNmNWQwLCAweGFmNTEzZmJmLCAweDAwZmZmNjc3LCAweDg3MDdjZmVlLCAweDc4ZTNkZmExLCAweDRkYmVmY2M5LAotCTB4NjgyN2JjMGEsIDB4ZGYzNTM3ZGQsIDB4NWY3ODFkOTIsIDB4OTE5MTJhZDAsIDB4NjUyNzk1MTIsIDB4ZjBhNTlhY2QsCi0JMHgwZmVmNmFlZCwgMHg0NzdkMTZjYSwgMHhhMTlkMWRlMCwgMHg3ODEwMmU4YiwgMHhlZmVhZTdkZiwgMHhiM2EyOWExMywKLQkweDcwYjc2MDJkLCAweGZhNmQ4MTJjLCAweDgyOWFkNmE2LCAweDU5NzIxNmFlLCAweDBlZGNlZjNmLCAweDY3YjAxMmQ3LAotCTB4ZGVjMGI4OGMsIDB4YmE0YTE4YjcsIDB4NGRhYWUxNTgsIDB4ZmNjZmRkY2EsIDB4YmVhYTc5YmUsIDB4MzFhZTk4NzcsCi0JMHg4M2RkZjRiOSwgMHhlNzkwOWZiYywgMHhkYzgyNDgxZSwgMHg4NjdiODgzNywgMHg4YWM3MzBlNCwgMHhmNzEwODFhNCwKLQkweGMwMWJlZWNmLCAweGU0ZjkxNWYzLCAweDNmYTZjN2I3LCAweDMwODFlNzgwLCAweGU3MTU3M2Y0LCAweDI3ZjU4ZDk5LAotCTB4OWZhYzYwZTMsIDB4YjkzZGM1MzcsIDB4MzRhZjdlOWQsIDB4NzlmODg3N2YsIDB4OGY5Zjg5MzIsIDB4ZjI4YWM0YWMsCi0JMHhmNTBmN2U0YiwgMHhmYjI1Y2ZmOCwgMHhmYjhhNDliMywgMHgwOGI5ZWY1OCwgMHg2M2VmYWJiZiwgMHg4Y2VlN2Y4NSwKLQkweGVjMjc2NTk3LCAweDBkYmY4NWEzLCAweGM2MDg3ODFiLCAweDAzOTYxNzUxLCAweGMzMWZkOGUzLCAweDk4MDY0MWZkLAotCTB4ZjE0MDFmNmYsIDB4ZjVjYjc2NzMsIDB4NWIzZmUwMzksIDB4OWVlZmI1ZTQsIDB4ODhiY2JkNDcsIDB4MzM4OTYzZGIsCi0JMHhhZmQ4NzZmMywgMHhkN2JkODQ4YSwgMHhkY2Y5NjFlOSwgMHhkOWZlYmJkZSwgMHgzYWMzYjdkZSwgMHhhMWMxZmUxNCwKLQkweGEyYzU2ZGU0LCAweDQyMWY5MTM3LCAweGRhMTJjYmU2LCAweGE2ZTRjOTM5LCAweGJkM2YyMmI0LCAweDA3MmU0ZGY5LAotCTB4Mzk3ZWZkYzQsIDB4YTc4YjBiZjcsIDB4ZjY4ZGM4ZDMsIDB4YmM1NzkxZjksIDB4YmE0NmU2MTEsIDB4Y2VjNGQ5N2UsCi0JMHhlOTc2ZGJjNSwgMHgwOWFmMWQ5OSwgMHhhNzhmMjFjZiwgMHg3YzAyZGUzYSwgMHg4MWRhMmM1NSwgMHg3NjI2MjZmOCwKLQkweDZjOTYzOTZlLCAweDFkMzFmZWU2LCAweDBlYWU1MDk5LCAweDZlYjAyN2NlLCAweDdkYTE4NGI2LCAweGQxZWI0MTM2LAotCTB4MmFiOGU5NWIsIDB4OGJmNDEyOGUsIDB4MzNjN2M2MzgsIDB4ZDQwYmU5YTgsIDB4NzBlNmJmZjcsIDB4MzdlNjdhZDcsCi0JMHhkN2MzYzZhMSwgMHhmMWFhMTE0OSwgMHhjNjBjMzdiZiwgMHgyMjMxZjAyZiwgMHhmZGMyZDQ5YywgMHg5NThmOWQzMCwKLQkweDk4YWFjN2NmLCAweDgxNGZkNzhmLCAweDZmZjc0YmQ2LCAweGViZjBhMmQ3LCAweDViMmFmMzEyLCAweGRmZmM0OWQ0LAotCTB4MWM1ZDZhZDMsIDB4ZTMxMWRmN2MsIDB4OTdkYmRmNTYsIDB4ODQwZjc2OTgsIDB4MmFlNGEzN2QsIDB4MDJhN2ZhZmQsCi0JMHgzZTAxYzQ2ZiwgMHg4NzFlYWE1OSwgMHg3ZWUzMmQzYSwgMHgxN2VmZWExZCwgMHhmNjdkYzQ5MiwgMHg3ZmFlM2IyZiwKLQkweDY5YmQ3YmI3LCAweGY5MTUzYjU1LCAweGJiZWQxNjMzLCAweDcxM2Y3YmEyLCAweDc1YmZmNzFmLCAweGRlZWExN2ZmLAotCTB4ZjY2ZWMxZWYsIDB4OGU5NDZlY2MsIDB4MjlmY2RmZTMsIDB4OWRmMTA4ZjMsIDB4MTEwNWVkZGIsIDB4YmU1MWM3MTgsCi0JMHhjODE1NjEzNSwgMHg3ZTQ3MGZlNSwgMHhjMmY2MGYxNCwgMHhmNzEyMzFmZCwgMHgxY2I0YmRlNywgMHhmN2JiNTJiOSwKLQkweDcxN2JkNTY3LCAweDM5M2Y2MjVjLCAweDU4NDZlZDUxLCAweDNhOWYwNzZkLCAweGE3YmMzMWUyLCAweGRiMmRmYzFlLAotCTB4YjA1ZTg2MzcsIDB4ZjJjOWI5MWQsIDB4YzIzMWVkZjMsIDB4MzJlYzIzMGUsIDB4ZDRjZjNiNmEsIDB4ZWZlNDY2NmUsCi0JMHhlYzI5YmZlOSwgMHg5NDE3ZmNjYSwgMHhhYzQ3MmU3YywgMHhmZmRjODNkMSwgMHgxN2VlN2NiOSwgMHhkNjVkMzM0NywKLQkweGUyODc3YjQwLCAweGNlODliZGExLCAweGIwNDc1ZWU2LCAweGMyM2RlNTFkLCAweDdiOGUyZTk4LCAweDczMTM0ZTgwLAotCTB4ODg4NjNmOTksIDB4NWI5NDJhNWIsIDB4N2EwNDljOWYsIDB4ZmI4YzkzNGUsIDB4N2RkZmMyZDcsIDB4MmNlN2I3ZjQsCi0JMHgzNGE4ZjQ4MSwgMHgxMzFjYTI3NywgMHg1ZWViMTc3NCwgMHg4NmE1NDNmMCwgMHgxNGU3YjFmOSwgMHgwOTdmZDA1OCwKLQkweDU3ZDgxMWU0LCAweDBkMzQ3NDZiLCAweDI5OWVlNzQyLCAweDNjNjAwYmY5LCAweDBlM2FmZGVkLCAweDhhYmYwMjRmLAotCTB4NjY5ZGZmMmQsIDB4MDlhZWJkNDEsIDB4YjM5Nzc5Y2YsIDB4YmZmZDgwZGYsIDB4ZDczYjEwNWIsIDB4ZTgzOTNjYjIsCi0JMHgyOTg5NzdmYiwgMHg2YWNlZmY0YywgMHhiYmZiYjBkNiwgMHg3YWViOTJmOSwgMHgzNDc5NzNiMCwgMHgzOWFjYWE4OCwKLQkweGUwMTkyZWU5LCAweDU1OWY5NjNhLCAweDI4OTJlNTFlLCAweDhjMzgzNTljLCAweDg1MWJkZmU1LCAweDg4ZDNkZjcxLAotCTB4ZjNmYjA3NDcsIDB4YTYwYWYwMGMsIDB4YzE2MjRjZTksIDB4ZjFiMTE2NzQsIDB4YmEzYWU1ZjcsIDB4OWNmZWI0NGIsCi0JMHg4M2YzMjMwNiwgMHgzMDllOWUyNSwgMHhmYTEwZWM5ZiwgMHhjYzZlY2VlZiwgMHgzYmI3ZDNiZSwgMHhmMzdkZGY5MywKLQkweDE5ZmM3Mjk1LCAweDcyNmVmZjllLCAweGVmOTg0OWZlLCAweDY3YjY2ZWU5LCAweGRkMWJlZDIxLCAweDcwNGZlMmI0LAotCTB4MjFhMmRjZGUsIDB4MWE5ZGY3YTAsIDB4OWJiNDFiZmMsIDB4MjRkZjdhOGEsIDB4OGRkOGJmZTcsIDB4MzEyNGRiZDYsCi0JMHgyMzY3NGFmZiwgMHgxZDIyYTc4ZiwgMHhiNmY2ZmVmMSwgMHhkNjBiOTNkNywgMHgwMmFmN2I0MCwgMHhhZTNjODE1ZiwKLQkweDI5YmU0NjJkLCAweDkzNWMzMzMyLCAweDQ1N2NlYzkxLCAweGNhNWRhNWViLCAweGY4NTdkMjBlLCAweDVjODdjMmY3LAotCTB4ODZlMTE3ZWMsIDB4ZmRiYTRmM2YsIDB4YmVlZjNhNjEsIDB4MDczZGZhMWEsIDB4MDJkOGU1YzYsIDB4Zjc0YmVhZTMsCi0JMHhmZjhjMTM3MywgMHg0MGE3MWUwNSwgMHhkZWUwZDJhYSwgMHgwNjhiZGU2YywgMHhjNzliZWMwZCwgMHhiZjAzYmNhOCwKLQkweGE3ZTBlM2ViLCAweGI5NGZkMzRkLCAweGRjZTdmNjNmLCAweGZjMTliYjFmLCAweDkyN2E2OWJhLCAweGU3NDgyZGNhLAotCTB4ODQyNTYwZmMsIDB4NjRjOGU3ZjIsIDB4OTVmMjIzNWIsIDB4ODgzYmY4MmUsIDB4MjFlNzI2ZWYsIDB4YjRlYmIzMWUsCi0JMHhkNzY3OGZiOCwgMHhmYWU3MjI3YiwgMHgzNzdmNjVkMSwgMHhiNTlhMWYxNiwgMHg1ODQ4Y2JlNSwgMHhlZjY2NmQ0ZiwKLQkweGVkMTI2Y2JjLCAweDczYjcxYzZhLCAweDA3MzZlZmVlLCAweGIyNmVmNWU3LCAweGU3Y2MyNGVkLCAweDAxYzc2NGY1LAotCTB4YTNmZWI3NmMsIDB4NzUzZjA0ZmYsIDB4N2ZkZTNlZGEsIDB4NGYxZDRiYjQsIDB4ZjEwMjk1MGQsIDB4YTM3ZjlkZWEsCi0JMHhlMzlmY2Q5ZSwgMHhkMzU0NTM3OSwgMHg2OWJmYTgwYSwgMHgyY2MwNzc0YiwgMHgyYzdlZTJjOSwgMHgwNTI3ZTgwNCwKLQkweGU3YjMzZmMzLCAweDBjNzQzNzhkLCAweGY4ZDE3MzgwLCAweGZmNTA3MjhiLCAweDNmZWYzMTMxLCAweGYzOGIzYTBhLAotCTB4Mjg2YmE3MGUsIDB4Y2Y5Mjg3YmEsIDB4ODBjYzc4ZGUsIDB4NDQyZTEzNzcsIDB4ZTIyZjVjODIsIDB4YmFmYTkzNzYsCi0JMHg2ZmQwMDc5ZSwgMHhlMDRjYWY3ZiwgMHgyN2NhMjNkZCwgMHg0OThlZmUwYSwgMHg0ODgwN2E2NiwgMHhmOGY1MWFiMywKLQkweGM2YTZjZjVlLCAweDM2Y2U3YWFmLCAweGNlN2ExZDIxLCAweGU0ZTVlNWExLCAweDUwN2ExNWViLCAweGZmMWZlMGQ2LAotCTB4MmM1OGE3ZmMsIDB4OTI0MTJmMGYsIDB4NDJhYWM4YmIsIDB4NjI5YWY3YjgsIDB4NGMzNmY5ZGMsIDB4YjliOTlhNjEsCi0JMHg2NmJkZWUxMCwgMHgyMDdiNGEyNCwgMHgxZjQ5Njk5ZCwgMHhlMjVkZjcwNSwgMHgyMzJiMzhkYywgMHhlY2IwMGY2ZiwKLQkweGNhMTE2YjU4LCAweGM0NTgzY2UxLCAweDgxNGJmYjdlLCAweDFlZWUxYzMxLCAweDM5YTE3MGJjLCAweDkyZGYwMTQ2LAotCTB4N2YyOGFjOTgsIDB4MjI4N2E1YWIsIDB4OGRjNjRjN2YsIDB4OWZhZjdjOGEsIDB4ZWZiZmI1YmMsIDB4NDdjMDc3N2IsCi0JMHhjM2IwNzc0NywgMHg5Y2EwNzlkMywgMHhiNDY1NmIyMSwgMHgzOTZkNjZkYiwgMHgxNDhkZGI3NCwgMHg0ZWVlYjcxZSwKLQkweDliMDM2YzJiLCAweGNkYjhmZTc4LCAweDRmZDgyZTA1LCAweGIwMGE1ZGUxLCAweDNlZTRiNDYzLCAweGEwOWZkNGZhLAotCTB4NWY3YjJkMzEsIDB4NzQ2MTFlNjMsIDB4ZWJmYzZiMjgsIDB4Nzk5YjYwMjgsIDB4M2RhMWU2YzMsIDB4OGM5ZGUwMzYsCi0JMHhkNWRmYzEzNSwgMHg1MmMxZjYxMCwgMHg2NWU5ZWNjMiwgMHhiYmY2ZDQxYiwgMHg1NTBlY2M5NSwgMHhlNTRmYWNhNywKLQkweDNjODI3ZmQxLCAweDBlZjViYmVhLCAweDZlOTdmODMzLCAweDM3NjNmYzFhLCAweDY0ZDZlNzkwLCAweDI4NGJiYzY1LAotCTB4YmZmMmYxN2UsIDB4MWZlMDM5NjQsIDB4MTdlNmExZTcsIDB4ZTkxMjA3NjEsIDB4NmUyYzgzYjgsIDB4YzVlNTZhZTEsCi0JMHhmODVlNDAzZiwgMHhlNTc5MTdjNSwgMHgzMWZiOWU5OCwgMHhjNDEyNzhmMSwgMHgzZjFmMGY0NywgMHg2MjhlNGI0ZiwKLQkweDVhYWY2N2U1LCAweGQwYjhlZjBhLCAweDEzYzQyNzdjLCAweDRiOWRiMjkxLCAweDg1ZWZhZWMxLCAweGYzMmIzNjE3LAotCTB4Mjk5Njk0MWYsIDB4OTVkMzg3ZTAsIDB4NjViY2NhZjAsIDB4YWQ0M2Y1ZmUsIDB4NjZmYThhYmIsIDB4ZWZjYTgzYmQsCi0JMHgzOWQ4Mjc4YSwgMHg2MzlmNzAyNCwgMHg5OTJlZThlYiwgMHg2ZmRiMDU1NCwgMHg0YTMxZmU0NCwgMHg3ODUzZjQwYiwKLQkweGM3MGJlZDgzLCAweGZlZjQ3YWJhLCAweGM5NjUyN2ZlLCAweGJiM2I0ZjRjLCAweDdkZGZmMWVkLCAweDZkZTI3NjA3LAotCTB4Y2U0NmZkMDQsIDB4NWNmYjMxNDYsIDB4OGQyOWRkNzYsIDB4MTc3YWU0MDYsIDB4YjM2Y2FmODYsIDB4ZWM3ZTAzNDcsCi0JMHg0ZWUxYzVlZCwgMHg5Y2FjODNmMCwgMHgyNGZlODExZiwgMHg4NjZjZTE3ZCwgMHhiZmVkYzllNywgMHg3ODQzZDFiNywKLQkweGJmMDllZmU1LCAweDAzZmYwZjU3LCAweGQxM2YzNzljLCAweDQ2ZmIxNDY4LCAweGZmOTU4OWJiLCAweDZjZWRlNDhmLAotCTB4ZWI2N2M4ZGYsIDB4ODNkMDNhNjMsIDB4OTc0MjYxY2IsIDB4ZTI1MmU1NjYsIDB4ZWViMGNiOTUsIDB4YmYwMDNlNjAsCi0JMHhmNzhlZGNmNiwgMHhkMzdiMDA5ZiwgMHg1YTNlYjYzZSwgMHgyOWUzZmI4OSwgMHg0Y2Q4YmZiOCwgMHg5NWEzZWJmZSwKLQkweDdlNzdiMmQ0LCAweDQyN2RlYzJkLCAweDcyMThiZjcxLCAweGQxYWVlY2JkLCAweGJmOGRmYmMzLCAweDIyNzliYWY0LAotCTB4ODQzYmRmOTksIDB4YzcwNzFmNWUsIDB4ZGNhOTNlNTAsIDB4M2IxYWZjYzYsIDB4NGFlZmFlMWIsIDB4ODA0YmQ2ZmMsCi0JMHgwNjhjZjY5ZSwgMHg2ZGMwNWFmOSwgMHgzYmZkZmMwZCwgMHhkOGExN2M1NSwgMHgxN2I1ODgzNywgMHhmNzhiMTNmYSwKLQkweDNhZTgwZjNlLCAweDU0MWZhMDI2LCAweGM2ZmQxNmEzLCAweDA5MmNlODE2LCAweDZmZWE5NzUxLCAweGZjNTg4NmI5LAotCTB4NjhkYmViZmEsIDB4ZTYyZGY5NDAsIDB4NzM2NjZlZDEsIDB4M2U3OGRiZWQsIDB4ODE3MWRlMWEsIDB4YzNlYTMxNzQsCi0JMHg4N2ZkOGEzNSwgMHg1OGJhNzNlZSwgMHhlYzQ1NTgxMCwgMHg2MzcwZWM1ZSwgMHhlMWQwM2U0MiwgMHgxOTljNDRiMCwKLQkweDMwOWE5ODM5LCAweDM1ZmI5YmNlLCAweDI3ZmMyNDRkLCAweGZmZWI0MzMxLCAweDZmZDBiNmFlLCAweGYzYmM2Y2VmLAotCTB4M2U4N2QwN2EsIDB4Y2VlN2JiYWUsIDB4MjRmYmY0MDEsIDB4ZTI5Yjk3NzgsIDB4ZmI3NzQwZjcsIDB4ODFkZjk4MzQsCi0JMHg3M2Y0MjU1ZiwgMHhmYTkxZmMyYSwgMHg3N2Y3YWNmYywgMHhmMzA3ZTUwYiwgMHg2NWRkODBjNiwgMHhmZTgzMzEyYSwKLQkweGZhNjY1ZTNjLCAweGFkOGI3OTE2LCAweDJhMzcyMTJiLCAweGU4NjhhNmE1LCAweDA5ZTRmNWZmLCAweGJjZTk5Mjg3LAotCTB4MDFmZDE2MTMsIDB4M2RmNTY5ZjUsIDB4NWJlYTk1ZjMsIDB4MjZiMGYyODUsIDB4ZWJlZGU4MWIsIDB4NmU3ZjE2MjUsCi0JMHgzMTU3N2M2NSwgMHg5MzkzY2NlYywgMHg3ZDUwOGU0MCwgMHhmMjhmZjQxZSwgMHgxZWY4OWRmYSwgMHhlNmRjZmE4MSwKLQkweGU3ZDVhYmQ1LCAweGYzOGRhYmVmLCAweGVkY2JkMDBmLCAweDcwNzFjOTZkLCAweDc4NzczODhlLCAweGNmZDQwOTEyLAotCTB4Y2Q1NmYyN2QsIDB4MDIxZjU0NzcsIDB4ZGMzNmI0NzksIDB4YTZhZWY4YzUsIDB4NmZjZTk0YWQsIDB4YjM2NGRhYzEsCi0JMHhmNmU3OGExMywgMHhhMmQ2ZjE2MiwgMHhkYmE3ZjBmYywgMHhjYmYzNDM3ZSwgMHg4MzM3MGE1ZSwgMHg5ZDMwYmRkYSwKLQkweDgxOGRlMTM4LCAweGEzN2FhYjg1LCAweGRlYWZiYmJkLCAweGQwMDZlYWYyLCAweGExZDY1ZWFmLCAweGUwNmJmNDVkLAotCTB4YmQ3ZjBhMWQsIDB4ZDgxNzA2ZjksIDB4MmM2OWU3ODMsIDB4OGNmNzg0N2YsIDB4ZjkxOTNhYzksIDB4MDYwYmQ0ZWQsCi0JMHgxZmU3NWZkYywgMHgyYmZiODFlOSwgMHhhNTBiMjNhYywgMHg0MjU0YTljZiwgMHhmY2RlYjRjYywgMHg1ZGIxOTNkNywKLQkweGFmNzYyNWY5LCAweDAyNTM3ZjNiLCAweGZhMGFhMWM2LCAweDg2MTBiY2I2LCAweGQ5YzU5MWYxLCAweGY0ZGNiZGI1LAotCTB4NDc0NDllZGIsIDB4YmMxYzRhNTQsIDB4OTc1YWU3ZmYsIDB4ZjA1NGYxNDQsIDB4YzAxZjRmZDIsIDB4NTM3ZjM2YmUsCi0JMHg0N2NiZDIxYywgMHg2MWZiZTBlNywgMHhiNjBmNDM2NywgMHg4NGJlMzljZSwgMHhlZjA1ZmVkYywgMHgwNjUzMTIwZiwKLQkweDg3ODk1ZjgyLCAweGVlY2U3N2JmLCAweDdkYjg3MjBmLCAweGQ5NzdjZDRlLCAweDdlMzJmZmJjLCAweGQ4NDBjM2NlLAotCTB4NjdjZmYwNTgsIDB4ZGNhMjRjZjEsIDB4NjI4ZDE0YTgsIDB4NGY5NDJkM2YsIDB4M2UwNzZjNTQsIDB4ZjllMDM3YWQsCi0JMHhiODJjMzViMiwgMHgwYTQ4NmE5ZCwgMHg4YzJiNTdkYiwgMHg0OWVjMmFkZiwgMHg1MDdlOGIxNSwgMHgzMjJiMTNkOCwKLQkweGU3YmJkZTA5LCAweGJmZjRiMTJjLCAweDcxZjdhNjk3LCAweGQ5YzRhN2ZjLCAweDRhN2NjMzg3LCAweGZhZGYxZjZhLAotCTB4ZjlmMWUyMWUsIDB4N2U4MTNmZmIsIDB4M2JkODlhZjcsIDB4N2MzMWVmNmYsIDB4NmYwMmZmMGIsIDB4YmUwZWM2N2IsCi0JMHhmNDI5NTcwZSwgMHg0NzZkYjZjYiwgMHg3Zjc4MWRiMiwgMHgzODJiZmM3NywgMHgzYzZkOWYwZiwgMHgyNWE2NTRmMiwKLQkweGM3Y2M3ZWM4LCAweDY1OGNlYzJiLCAweDYwZmVkZTMwLCAweDRiOGRiNDg3LCAweGI0NzNiM2YxLCAweDVlZmMxZDdmLAotCTB4ZWVhZmY0NGIsIDB4NTM2NDZjZjcsIDB4YjZkYmJjMzYsIDB4MDc2OTgyMDAsIDB4NDZjZmYyZmEsIDB4M2VjMzY1MzcsCi0JMHg0NDM3ZmMyYiwgMHgxNGNjY2VkYywgMHg0YTk0N2ZlZSwgMHhmYmM0NDM1MiwgMHgwYjg5NDljYywgMHhkZjgzZWYxYSwKLQkweGU3ZGUzYWFmLCAweDE5Zjc4YjNjLCAweDdkZTMzM2ZlLCAweDBjOWYzOTNhLCAweGVmMWUwOTg4LCAweDVmY2YwNGYyLAotCTB4NDNkOTZhNDIsIDB4NDNlZTVjNzIsIDB4MDc3ZjBkZDgsIDB4NjdiYzU2NTgsIDB4ODg5OWU1YzksIDB4YzBkYTE4ZjMsCi0JMHhiOTQzZmZlYywgMHg2MzY0YWIxZiwgMHg4ODQzMmU3MSwgMHg3YWE3YjU5YiwgMHhlNTY0MDU5NywgMHg4OTExOTA1NCwKLQkweDExM2FlMjM3LCAweGM2MDZmZGVmLCAweDdiZTEzNDI1LCAweDBlOTMzN2NkLCAweGFjYzQ2ZDRjLCAweDFiYTI5NDg1LAotCTB4OGVjNDkxZDMsIDB4ODU1MjI4ZTksIDB4ODM1MjY4ZTksIDB4MTZhNDZkZTksIDB4MDlhNGIxZDMsIDB4OGRjN2QyNTMsCi0JMHhmZjc4YzdlZiwgMHhmM2FkYzY3ZSwgMHgwY2ZmYjAzNCwgMHg2ZjVjMTQ5OCwgMHhiZmFmODM3YiwgMHg1MjQzZTA0YiwKLQkweDk1NzhhZmJjLCAweGQ4NDUxOGY4LCAweGYxMjFjNWZiLCAweDdlODE5MjkyLCAweGVhMmYwMjU4LCAweDljMzFiZmJmLAotCTB4MTE5ZGIwNzgsIDB4ODBmNjUxYjAsIDB4ZWYwNTk0ZjMsIDB4MGQ4ODBhNGYsIDB4YzQyYmMyZTEsIDB4YTFjN2FlNDcsCi0JMHgyNTMyZjY2NSwgMHhlMGU5MDI1ZSwgMHgxYmQ0ODU0YywgMHgxOWVlNDYwNywgMHgyYjAzOGNhNywgMHg1ZTcxODcxOSwKLQkweDVjZWMzOWZkLCAweGUyNmZmMmMwLCAweGIxZjc5ZGU1LCAweDI4MjQ1MDdjLCAweDgyY2E0NWZjLCAweDVjNzFmZTcxLAotCTB4ZWYxOTBmNzIsIDB4YjE4NzI2MWQsIDB4NmVmMTdhYjgsIDB4NDIzMGU0YzksIDB4YjViZjgwOWEsIDB4Y2Y5NDM4Y2UsCi0JMHhkZTI5N2E4YiwgMHgzOTI1MzBmMywgMHgzNTVjYTAwZSwgMHgxNDJkMjNiYSwgMHgxNjY3MGI3ZiwgMHhiMWM2ZmZhMiwKLQkweGRiOGRjYjM4LCAweDdlM2M1ZjI1LCAweGQ3NWIwYTRiLCAweGM0YWFhNTQ3LCAweDhmMWU3NDNlLCAweDc3ZGZhN2U0LAotCTB4YmZhZmJhN2YsIDB4MDRlN2U4MmIsIDB4M2Y3NTViYWMsIDB4M2MzYWM0NmYsIDB4ZjYzMTNmZDAsIDB4MmNmY2YzYzIsCi0JMHhkZTZjYWZiZSwgMHhhYWRiMzQzYywgMHhhY2NkN2U4MSwgMHhkZDY3ZGZkZiwgMHgzMmNkM2Y3NywgMHg0MjRlZGFhNywKLQkweDgyMTQ5NmY5LCAweDVkYTQ0ZGViLCAweGYwMmRlY2UyLCAweDg5M2JjNDVkLCAweGJmMzNlZGVmLCAweGJlMjZlYWRmLAotCTB4NTMxZmFhMzgsIDB4NWNhMTY3MWMsIDB4ZDY5M2M2YTUsIDB4NTcxZDBlNWYsIDB4NWM0NmM0YjYsIDB4NjU1YmU0N2EsCi0JMHgyZTNhOTkzYywgMHgzZGY3YjY4YiwgMHhlZTUyYWJjYywgMHhkM2ZjMGI5OCwgMHhmZTkxZjUxNiwgMHhjYWVmZWEyYywKLQkweDFkYzZhY2I4LCAweDY4NzExNGZiLCAweGUzNzgxZDYyLCAweDFjNTkzYWQwLCAweDQzODg1MGRhLCAweGJmZjFmNDhiLAotCTB4N2MxMzQzODgsIDB4MTBjM2Q2MmMsIDB4NzJjMzQzODgsIDB4ZjI4MWNjMzcsIDB4ODEzYTNmYzMsIDB4NGUyMzY4NzEsCi0JMHhkYTFjNzg3OCwgMHg5YTFjNjUxMSwgMHgxNTlmZmJlZCwgMHhiMWRlMjY4NywgMHhiZDg1YjA1OCwgMHhkYjgwYmZhNywKLQkweGZkMDYwMDc3LCAweDVmNzg5NGUyLCAweGM0NTc5Zjg2LCAweGRmN2NhNGI5LCAweGRmOWVlY2RiLCAweDA0MWJmZjQ5LAotCTB4YTdlYzkwN2UsIDB4ZTg1OWY5ZjgsIDB4MGZlMDEyMmYsIDB4MGNiNWMyNzksIDB4MGZlMDFkYzYsIDB4MDlhZmYyYTksCi0JMHg1NjgyNzdmZCwgMHhlOWZiZjUwNiwgMHgyYmNmY2E5MywgMHg1YzIxOWY3YywgMHhjYmM3OTk3ZiwgMHhhZWMwZmNjMCwKLQkweDhmNTFhMGI1LCAweDE3ODJkMWZhLCAweGZlODJiM2VlLCAweDY0ZDUyMGI0LCAweGYyYjc3OTQ1LCAweDUxNGJlNDNlLAotCTB4ZmNjZjNjOWUsIDB4OWI3YWM0NzMsIDB4ZGVhMDljYmYsIDB4YWM0ZjNkZTUsIDB4ZWZmMGQ4MzMsIDB4NDA0YmFjMjMsCi0JMHgzZTdiY2FmZCwgMHgwODE0ZjZlNywgMHhlYmZiODRkMywgMHhkZDFkNTE0ZCwgMHg1MzZkZGVlMSwgMHhmNDE1ODY2MywKLQkweDViMjIwZmJiLCAweDcxYjE0MjU2LCAweDVlOWYwY2UxLCAweDBlOTg3OTdkLCAweDk2MDNhZmY1LCAweDc0ODg4Mjk4LAotCTB4ZjNiMTNhZGYsIDB4Zjk5ZTQyNzUsIDB4M2FmOTgzMzUsIDB4N2JiMTM2YjMsIDB4ZjZhMzljODUsIDB4ZGMwYjQ4ODIsCi0JMHg4NGZiYjAyYiwgMHhlZmMxMmQ0MSwgMHg0YWU3YzdhOSwgMHhjMDhhN2I4YSwgMHhjYjE2YzlmNywgMHg3ZmI4MjU1ZCwKLQkweDZhMTBmNzYwLCAweGJmYjhiZDNiLCAweDI5ODViMjJlLCAweGRkNDIzZmVlLCAweDBlZjM4YjY3LCAweDFlODllZmRkLAotCTB4MTE4ZDdiZjYsIDB4YzQ4MzM3ZmQsIDB4ZjcyMzNkZDMsIDB4ZjY2M2JkZjAsIDB4ZjNjMGU0OGUsIDB4YTZjNjFkZDAsCi0JMHg0ZmFiZTAzNCwgMHg1MzczMWM2MywgMHhjYjZlMjBlMywgMHhjZTM5NDE2YSwgMHhmMTdjZWFlMywgMHhiY2EwNmY0MCwKLQkweDA3M2VmMTE0LCAweDIwZTMyZGE1LCAweDU0ZGVlYTFlLCAweGEzZDQwNTQ3LCAweDA2N2IzMGQzLCAweDk5NDdkZWY5LAotCTB4YzVmMjdiOTksIDB4YTc2ODJkZDcsIDB4YjdmNTRjYWYsIDB4M2JiZmYzZDMsIDB4MWUyZjVlYTIsIDB4NTllMzA1OGQsCi0JMHg1MDk1YmY5YywgMHg4ZDAzMzhhZiwgMHgxNWYzYzYwYywgMHg4YTY3NGZmMiwgMHhkYmY5ODcyOSwgMHg0YWRlZmVhYSwKLQkweGRmZTU1NzZjLCAweGYxNjdhOTViLCAweGFkODlhNTBkLCAweDU5YjNhZjRjLCAweGZhNmUyY2FkLCAweDk1OWRmZGU3LAotCTB4OTU1M2RkY2IsIDB4ZjQyOGI2MjYsIDB4ZTYyMWIyNTUsIDB4YmVhNmVjOGEsIDB4ZmRhZTVkZjksIDB4NWE3ZjZjMzYsCi0JMHg3ZTBhODdkNSwgMHg5OGU4YjE5OCwgMHgzYTY2Y2Y4MiwgMHhiNWY5OTU5YiwgMHhhZjc4MzhkMiwgMHgxNTY3ZDI4YywKLQkweDM1YjNjN2QwLCAweDBiMTRkNDY5LCAweGYwMTgwMWY4LCAweGY3Y2JiZjVkLCAweDc3ZjExYTdiLCAweGNmMDliYWEyLAotCTB4OWY1ZTYyOGIsIDB4ZDg0NTFmNTUsIDB4YzY1MWVkNTMsIDB4YTk3OWYwNjcsIDB4NzA0ZjhiZmQsIDB4ZGMxMzk5YmYsCi0JMHhmNzA0ZTY2ZiwgMHhmZGMxMzk5YiwgMHhiZjcwNGU1YSwgMHg3Yzg3ZTExNiwgMHg0YzhhYTI0MiwgMHhlNDdmNTA3NCwKLQkweDgyOGY4MTM3LCAweGMyMzcyM2Y4LCAweGM4ZmU5MGY3LCAweDBhNzFjN2U0LCAweGI3ZTc2NDdmLCAweGU0N2YwYjA4LAotCTB4OTFlN2E5NWQsIDB4ZWM5YmJiOGYsIDB4YzQzYjQzNmYsIDB4OWZmYmQxZTYsIDB4MjNmOTQzYmIsIDB4ZWVjYTlmYmYsCi0JMHhhNTUwM2U5MywgMHgyMmYzZDI5ZiwgMHhiNGYxYTlmYSwgMHgwYmQ5NWU1MCwgMHgzN2FjNTlkZiwgMHhjYjg3OTAxMCwKLQkweGYxYTZkOTI0LCAweGIwZjE4ZmJmLCAweDE2Y2U1Mzc3LCAweDFkZmMyOGE1LCAweDhiN2Y5NjJhLCAweDBmN2UxN2Y4LAotCTB4ZDAxOTZmMzksIDB4ZGY3Y2EwNGYsIDB4ZDc0MDVlYzEsIDB4ZTcxZDUzYzcsIDB4MWRmZDk5NTIsIDB4YWIyZTg3ZGYsCi0JMHg1ZmJmYjAzMywgMHhiZjIxY2ZjNywgMHhlYmYxMzllMCwgMHg3MTgxODFkNCwgMHg3N2U2YTExNCwgMHg1M2QzNGU3NiwKLQkweGU1NWU3NDk5LCAweGVmMTUzYjkxLCAweDhhZjE4YjIyLCAweGZhNzE4OTc5LCAweDVmOGNiOWRhLCAweGM1MGVmMmM5LAotCTB4ZjZkYjZiM2EsIDB4NjNlMDJmNDgsIDB4OWMxNjdlZjEsIDB4YTkwNDI3NWIsIDB4ZThjNjlmMWYsIDB4NTI4N2NmNDIsCi0JMHhhNGJmZWQxYSwgMHg3ZDBmOWQ4YSwgMHhmZmI5YWRmNCwgMHgzZWM3YTAxMywgMHg1MDlkY2ExMywgMHgyY2YzZDVmNSwKLQkweGYxMGZiMWRmLCAweGQyMTczZWExLCAweDBiNGQ3Njc5LCAweDNiOWZjZjMyLCAweDZiZjVhYmJmLCAweDRlMjE3NDM3LAotCTB4NzE1MDk3ZTAsIDB4OWIyNTA3NTEsIDB4MmQ3N2M2MDUsIDB4NGI1ZTk2YmQsIDB4ZDJkN2E1YWYsIDB4ZjRiNWU5NmIsCi0JMHhiZDJkN2E1YSwgMHhhZjRiNWU5NiwgMHg2YmQyZDdhNSwgMHhmNGU1ZmZlOSwgMHhmZmZkMDA3ZiwgMHg4MDAwYzEwMiwKLQkweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGM1ZWRmZjAwLCAweDMwMDAxMTMxLCAweGFmYjAwNDA4LAotCTB4NTIxY2FlODgsIDB4MTE0NDdmZWEsIDB4OTkyYzlhNDIsIDB4MzI2ZWJhZjMsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweDdmNmRiNmRiLCAweDk4YTEwMmZjLCAweDgwMDA1MzgyLAotCTB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4YzVlZGZmMDAsIDB4MzAwMDExMzEsIDB4YWZiMDA0MDgsCi0JMHg1MjFjYWU4OCwgMHgxMTQ0N2ZlYSwgMHg5OTJjOWE0MiwgMHgzMjZlYmFmMywgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4N2Y2ZGI2ZGIsIDB4OThhMTAyZmMsIDB4ODAwMDUzODIsCi0JMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhjNWVkZmYwMCwgMHgzMDAwMTEzMSwgMHhhZmIwMDQwOCwKLQkweDUyMWNhZTg4LCAweDExNDQ3ZmVhLCAweDk5MmM5YTQyLCAweDMyNmViYWYzLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHg3ZjZkYjZkYiwgMHg5OGExMDJmYywgMHg4MDAwNTM4MiwKLQkweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGM1ZWRmZjAwLCAweDMwMDAxMTMxLCAweGFmYjAwNDA4LAotCTB4NTIxY2FlODgsIDB4MTE0NDdmZWEsIDB4OTkyYzlhNDIsIDB4MzI2ZWJhZjMsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweDdmNmRiNmRiLCAweDk4YTEwMmZjLCAweDgwMDA1MzgyLAotCTB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4YzVlZGZmMDAsIDB4MzAwMDExMzEsIDB4YWZiMDA0MDgsCi0JMHg1MjFjYWU4OCwgMHgxMTQ0N2ZlYSwgMHg5OTJjOWE0MiwgMHgzMjZlYmFmMywgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4N2Y2ZGI2ZGIsIDB4OThhMTAyZmMsIDB4ODAwMDUzODIsCi0JMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhjNWVkZmYwMCwgMHgzMDAwMTEzMSwgMHhhZmIwMDQwOCwKLQkweDUyMWNhZTg4LCAweDExNDQ3ZmVhLCAweDk5MmM5YTQyLCAweDMyNmViYWYzLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHg3ZjZkYjZkYiwgMHg5OGExMDJmYywgMHg4MDAwNTM4MiwKLQkweDAwMDA4MDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDIwMDAsIDB4MDAwMDQwYzAsIDB4MDAwMDYxODAsCi0JMHgwMDAwODI0MCwgMHgwMDAwYTMwMCwgMHgwMDAwYzNjMCwgMHgwMDAwZTQ4MCwgMHgwMDAxMDU0MCwgMHgwMDAxMjYwMCwKLQkweDAwMDE0NmMwLCAweDAwMDE2NzgwLCAweDAwMDE4ODQwLCAweDAwMDFhOTAwLCAweDAwMDFjOWMwLCAweDAwMDFlYTgwLAotCTB4MDAwMjBiNDAsIDB4MDAwMjJjMDAsIDB4MDAwMjRjYzAsIDB4MDAwMjZkODAsIDB4MDAwMjhlNDAsIDB4MDAwMmFmMDAsCi0JMHgwMDAyY2ZjMCwgMHgwMDAyZjA4MCwgMHgwMDAzMTE0MCwgMHgwMDAzMzIwMCwgMHgwMDAzNTJjMCwgMHgwMDAzNzM4MCwKLQkweDAwMDM5NDQwLCAweDAwMDNiNTAwLCAweDAwMDNkNWMwLCAweDAwMDNmNjgwLCAweDAwMDQxNzQwLCAweDAwMDQzODAwLAotCTB4MDAwNDU4YzAsIDB4MDAwNDc5ODAsIDB4MDAwNDlhNDAsIDB4MDAwMDgwMDAsIDB4MDAwMTAzMDAsIDB4MDAwMTg2MDAsCi0JMHgwMDAyMDkwMCwgMHgwMDAyOGMwMCwgMHgwMDAzMGYwMCwgMHgwMDAzOTIwMCwgMHgwMDA0MTUwMCwgMHgwMDA0OTgwMCwKLQkweDAwMDUxYjAwLCAweDAwMDU5ZTAwLCAweDAwMDYyMTAwLCAweDAwMDZhNDAwLCAweDAwMDcyNzAwLCAweDAwMDdhYTAwLAotCTB4MDAwODJkMDAsIDB4MDAwOGIwMDAsIDB4MDAwOTMzMDAsIDB4MDAwOWI2MDAsIDB4MDAwYTM5MDAsIDB4MDAwYWJjMDAsCi0JMHgwMDBiM2YwMCwgMHgwMDBiYzIwMCwgMHgwMDBjNDUwMCwgMHgwMDBjYzgwMCwgMHgwMDBkNGIwMCwgMHgwMDBkY2UwMCwKLQkweDAwMGU1MTAwLCAweDAwMGVkNDAwLCAweDAwMGY1NzAwLCAweDAwMGZkYTAwLCAweDAwMTA1ZDAwLCAweDAwMDAwMDI4LAotCTB4MDAwMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4NjVlMjFmMDksCi0JMHg2M2U2Mjg2MCwgMHg4ODIzNzg2MCwgMHhjYzJiNGUyYSwgMHhmZTk5NDJjZSwgMHgwYzBjY2NmMywgMHgzMmY4ODExNywKLQkweGUyMDU1ZjEwLCAweGU5YTQ4Y2QzLCAweGIwNDVlMmI3LCAweDMwMzI3Mzc3LCAweDdkZjkwMzU4LCAweDliOGI1YTQwLAotCTB4YzgwMTQxODEsIDB4YjNlMjAxYjYsIDB4MjA0YmZlNDAsIDB4YWRjNDBhZmUsIDB4ZGMwYzBjM2MsIDB4NmEwYzBjNWMsCi0JMHhjNDA0MmM0MCwgMHhjZGY4YmNiNiwgMHhmZjIwMjNiNywgMHhhZjk1MWI5ZiwgMHgxN2NhODNjZCwgMHgzZmFmYzZlNiwKLQkweDdjYmYwNzg5LCAweDZjNzkwMTA2LCAweGY5MjhiM2Y4LCAweDQ2MjBlMWYxLCAweDJkNDM3NDlmLCAweGNhODZhZWFjLAotCTB4NjA2NTUyMmYsIDB4ZTdjNDBkZjgsIDB4NjgxYWUyYTEsIDB4MTBhYWM1ZjIsIDB4MDMzMjljZmEsIDB4N2UxYWIyNDMsCi0JMHhjODA4NTNiMywgMHgwMDBjMDYwZiwgMHg0MDIyYmFlOSwgMHgwMDAwMDQwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwKLQkweDdkZWRmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDI3YmNjZTY2LCAweDIwMjEyNzkzLCAweGYwODQxZTRjLAotCTB4MDQyNDIwNzQsIDB4MTEwOTNhOGMsIDB4NTA3NmM0MDMsIDB4YzJhYjE2ZmUsIDB4MjU3ODY3ODQsIDB4NWFlNWE5MTEsCi0JMHhjMDEzM2JmZiwgMHg1MWI5MTY4OCwgMHg3ZTJkYTVhOCwgMHg2OGJjMTA0ZSwgMHgwMTIyNmY2OSwgMHg5MDNhNDQ4MywKLQkweGJkMDhhNWMwLCAweDE2OGI2YWQxLCAweGUwODg3ODZkLCAweDdlOTI5MjA1LCAweGNmZTk1NmRlLCAweGU3ZGFkNmJmLAotCTB4OTkzOWNjY2MsIDB4NzdlOGY4ODEsIDB4YmY0MWZmYmYsIDB4ZGVjZmIzYmEsIDB4ZDdiNWVmNjcsIDB4Y2ZiNWVmNWUsCi0JMHgzMDczM2QxZSwgMHhkNzYzMjc3NiwgMHg3Mzk0MWZmMSwgMHg0MTU4YzY0NSwgMHhmODFkMGNhNCwgMHg2MTRiM2NlMiwKLQkweGMxOGI3MmVjLCAweDZjNjRjYzY1LCAweGU4NDMxZWNhLCAweDY4YWZhODRlLCAweGQ3NTg4MjE0LCAweDM2MzMzMDFkLAotCTB4NWIyYmIxODEsIDB4ZWM0NmJkNzksIDB4YjQxYjc4ZGMsIDB4YjY0NWQ3YjMsIDB4ZDNiNjBhMDMsIDB4OGM4NTYzYTYsCi0JMHhmZTMxMzc5ZCwgMHhiMWQ3NmY0ZiwgMHg5OTE2YzYzNCwgMHhlMzQ1NzU3OSwgMHg3ZTM4MzljMSwgMHg5OTkxYWI1NSwKLQkweDJkZjNmZGUxLCAweDJiZWIwN2EyLCAweDI2NDEwODc3LCAweDI3YmVmYjQwLCAweDdmMTgwY2E1LCAweDMyNjg1MDcxLAotCTB4ZTNiZWEwYmIsIDB4Njc2NWM5NTksIDB4MmY4MWNkNmMsIDB4MGFiY2UwYWUsIDB4NGRmYTlmNWMsIDB4N2MyMTI1Y2MsCi0JMHg4ZDc1YTVlZiwgMHhiMDY5NmM2NiwgMHg4YzA2NmE3OSwgMHhlMDk3NzRiMywgMHg0YjNjYzFkNiwgMHgzYmExMGFiNywKLQkweDIxNzNlMDI3LCAweGNiYjhjMjI4LCAweDJiOTk1YTc2LCAweDlkNzBjMzhmLCAweDhlYjRiY2QxLCAweGJjYzAyZjk1LAotCTB4ODM2NzA4OTksIDB4ZTY0N2I1ZTQsIDB4YTlmM2YwNTMsIDB4NzJiOTgxYmYsIDB4YWYxNWY1MjMsIDB4NWVmMDNjYzAsCi0JMHgzNzA0YWZmNSwgMHhjNzVhYjEyZSwgMHhmZjMwNGQ3YywgMHhkOWU2N2Q5NSwgMHg3ZDcwZDkyZiwgMHgzZGFlNTI3NSwKLQkweDdiOTUxZDdhLCAweDgzNGIxZDcxLCAweDFiNTRkMjhkLCAweDJkMjhkNWMyLCAweDZmMTkxZDFhLCAweGNjNGRjZWQ5LAotCTB4NmI4MjhhNjUsIDB4NWYwMGY2NGIsIDB4ZmNiNmJiNTQsIDB4ZjA1NGNmZDQsIDB4ZDNjYzY1MmMsIDB4ODNmODQzNjQsCi0JMHg5MTMxY2NkMiwgMHgyMjQyMmRlNywgMHhiZTM4YTk2MywgMHhiMTlmMWFhOCwgMHg5OTE3M2QwMCwgMHg2Nzc4ODQzYiwKLQkweGY0Nzc3NjZkLCAweGFhNzU1ZGJlLCAweGEyNjU2ZGY3LCAweDc4MWM2ZWZjLCAweDg3ZGU0NWZlLCAweDJhNGVmZDY3LAotCTB4YTlkM2Y5MzcsIDB4NDVkZmIxZmMsIDB4OWZjNGZlNzAsIDB4ZmQ0ZmU1NDcsIDB4NzNmZTdhNmUsIDB4MmY5NTExN2YsCi0JMHhiZTU0M2RmOCwgMHhiMmE3MmZlOCwgMHg3ZWE1ZWZkMSwgMHg1MzY3ZjkyZiwgMHhhM2VmYzNiOSwgMHhhZmVhZmZlNywKLQkweDdmMTVmMmEyLCAweDg1ZmYzZDJkLCAweGJmOTUzNTdmLCAweGY5ZTgwN2Y0LCAweDUzZDdmOWJmLCAweDA0ZmI4Y2Q5LAotCTB4MTZmZjZlZTUsIDB4ODNmOGY3MmEsIDB4ZmY3NWVmZDQsIDB4ZjlmNzJhNGUsIDB4MzNmOWU4OWIsIDB4MTMyODNmODgsCi0JMHgzZDNhY2UzYywgMHgxOTQyNGZlYywgMHhiMDc5MDI3MywgMHhjZWI3YWY2NCwgMHg1OWU0ZjUwMCwgMHhkN2MwM2ViYywKLQkweDdlMDEyNzUwLCAweDNhODAyYzA2LCAweGRhYTBkZmVjLCAweGI0MjMzYWNlLCAweGRiYzU1YTBmLCAweDZiOWMwNjg3LAotCTB4NzQzZWQwNGMsIDB4NmVjZjZmMWQsIDB4NDMzMWFlZjAsIDB4ZGU2NmY2N2IsIDB4YjBkODNjM2UsIDB4YzNlZDAyYzYsCi0JMHg1MWY2ZjNiNywgMHhhYzZiOWQ0ZCwgMHg4NWFhM2VkMCwgMHg3MjFhZGZiNywgMHhmZDQxYjVhZSwgMHhjZjVlMGVkNiwKLQkweGI1YWVmNGVmLCAweDVkZmYzZDQzLCAweGQ1ZDg5ZjVlLCAweGVmMDFkNmIwLCAweGRmYzczYzRmLCAweGQ5YmRlMmQ3LAotCTB4NjBjZjljZTAsIDB4ZWUwNzM2YWYsIDB4NDIwN2U4ZjIsIDB4YzIzZTcyNWQsIDB4MWNiZDhjZGMsIDB4NzdkNTE2ZjgsCi0JMHhkZWQ0ZGMxYiwgMHg0N2FlZjgxYSwgMHg5MmVhMDkzZiwgMHgwNThmZGE5YiwgMHhjN2JlZDQ3YywgMHg1M2Y2YTVlMCwKLQkweGJlZDQyNTgxLCAweGZiNTJmMjQ3LCAweDZhNGFjMDk1LCAweDRiNTBkZDdmLCAweDg3ZWVhY2VkLCAweDU0YmFmZWQ0LAotCTB4NzU0OWVkNGIsIDB4Y2ZiZWE4ZWIsIDB4OGMxOTZkMDAsIDB4ZTMzZGQ0ZTUsIDB4Y2RmZDAwMDksIDB4NTExYjdjMTEsCi0JMHg2YWViNzQ3ZSwgMHgxMmNhMThhYiwgMHhmOTFkMjg3ZCwgMHhjZDgxNDllOSwgMHg1ZDgwZmU0NiwgMHhmMjdiYmEyMywKLQkweDdjODNjOTE2LCAweGMyOWJmY2Q3LCAweDk5NGNjNDk3LCAweGJlYjA1MmQ2LCAweDA1YTdlNWU4LCAweGQ4MjdlNzFhLAotCTB4NzE4MjViYWYsIDB4Y2UzZTZmYjIsIDB4YWE0NTYzYjgsIDB4YWIxZGM2NzEsIDB4MTIwOWM2NTIsIDB4OGRmZTk2M2MsCi0JMHhiMjZjN2NkMywgMHg0YjYzOWUxYSwgMHhhMTVlNzE5NSwgMHg1YmZkMWM3MSwgMHg4YWI3YjhkNywgMHhiNWJjZjBkNSwKLQkweDM1ZTcxOTVjLCAweDdmYTkyNzFhLCAweDFiN2VlY2YwLCAweGM2NDQyM2YwLCAweGUwMzZmZGQ5LCAweGQ5YzY5MzI3LAotCTB4ZjVhNGUzNGYsIDB4NzdmYzllMGYsIDB4ZTRlMzU0OGEsIDB4OGNhNTUzYmYsIDB4Y2U3ODQxZDMsIDB4YmIzOGRmZTgsCi0JMHg4NmFjOTlkZiwgMHhjYWE1OWRlNywgMHg5YzY4MjczOCwgMHg1NzViZmQyMSwgMHhkNThhZWZmZSwgMHhiOTZlZmNmMCwKLQkweDY5ZWZjZTMyLCAweDhkZmVhYzljLCAweDM1N2RlN2IzLCAweDNmNzllY2ZkLCAweGEyN2YzZjRjLCAweGI3ZmI3MjcxLAotCTB4ZDQwZjgyYWUsIDB4NDFmMDUzZjQsIDB4MTAyZTdlOTgsIDB4NmZmNjQ3OWUsIDB4YTgxZjNkOWMsIDB4MDdjZjY3ZTksCi0JMHgzM2Y5ZmE2MSwgMHg3ZmI2MzNjMSwgMHhhM2Y4MmFlYiwgMHhmZTBhN2U5YSwgMHhjZjlmYTYxOCwgMHhmZGYxOWUwOSwKLQkweGQzZjVlNzgzLCAweDdlYmNmYzZhLCAweDUxMWY4YzNhLCAweGZiMGE3ODQwLCAweDMzYzRjZjA3LCAweDNjNGNmYzZhLAotCTB4OGQ4ZmM2MTMsIDB4YmZkYzk5YzYsIDB4YTMzZjVlNzEsIDB4NjdlYmNmYzYsIDB4MTU0OWY4YzIsIDB4ZjQ3NzVkNzAsCi0JMHhjZjEzNWQ2ZiwgMHhmMTMzZjFhYSwgMHg0MzNmMTg2YywgMHgxOTUyOWUwOCwgMHg4Y2UzMDYxZSwgMHhiZWNlM2Y4OSwKLQkweGVjZmM2YThiLCAweDMzZjFjOGJiLCAweDNhMjdkM2JlLCAweGNlOTBkZGEwLCAweGU0Y2UwOGRjLCAweDAwODBkZTBiLAotCTB4YTgxNGZhZWQsIDB4MzBmNGIwYmIsIDB4M2QzYmM4MWYsIDB4ZjhkMWRkZWEsIDB4ODQ0MDU3NzIsIDB4YzRhZWZiNzYsCi0JMHhhMmJiNGZmMSwgMHg1OGU5NmZmNSwgMHg4MjYzOTc1YywgMHgzODc3NjU0ZSwgMHg3YWFhMmQ4YiwgMHg0YTkyNTk1MiwKLQkweDY0NTRhNzNmLCAweGIzNjllYWE4LCAweGY0ZjU1NGIyLCAweGRlYWE0NzA3LCAweDVlMzA1OGNmLCAweDdjYmMxZjU1LAotCTB4NjQzZWFhYjIsIDB4N2RlYWE5NTUsIDB4NTVkM2UzZDcsIDB4ZWVlYjU5ZWQsIDB4MzY3M2Q1NTUsIDB4Y2Y1NTRmN2MsCi0JMHg1NTRmM2NkZCwgMHg1NGJhZGJjZiwgMHhlZGM4ZGUzNSwgMHhkMWY1NTUyYiwgMHhkNTUzMWViYiwgMHg1MWFjYjZjNywKLQkweDRmNmRkZGQ1LCAweDNiZTNlYWFiLCAweDNmOGQ1MzllLCAweDU0Y2ZmOGUxLCAweGI3NzdjMmY1LCAweGE3NDVlYWE5LAotCTB4M2ZiZDU1NWUsIDB4MWE2YmRjZjksIDB4M2NlNmM2ZmIsIDB4OGJhZTRhM2YsIDB4Yzk1YWNmNjgsIDB4OTEwZTMzY2UsCi0JMHgxOTJkNWVjOCwgMHhhM2ZhYTI2MiwgMHg3ZjU0NmM0MywgMHg3MGRmMGVmNCwgMHg4ZmUzZWMyNywgMHg2YmQwMDVmMCwKLQkweDViYmU0YThmLCAweDJmZWMzMTlkLCAweDRiMWQzOWQ4LCAweDYzYTdkMmM3LCAweGQ3ZGI3ZDQ1LCAweDgwY2U4MDFiLAotCTB4NWU4NzRhMmUsIDB4NjUwZDNkY2IsIDB4MzcyN2FlOGQsIDB4ZThkZmNhMTEsIDB4MmU5MTZhNGEsIDB4NDQ3NDE1MWYsCi0JMHhkNTkxNTY3ZiwgMHg4ZDU4ZGQyMiwgMHhmZDcwZTg4YywgMHgwMjk3YzJiMCwgMHg1NGY4NzQ1MSwgMHhjYWYzOTcyNiwKLQkweDZhMTk0ZmI4LCAweDNlZWY1MWQzLCAweDAwNjZmNzU2LCAweDk5OTNmMmY1LCAweDY2NGNiYzYwLCAweDliYzI4N2VjLAotCTB4YmMwZTQwYTEsIDB4M2E2OGY5OWYsIDB4MDkyNjhiZGEsIDB4ZjllOGQwZWMsIDB4MzQ3Zjk4MjUsIDB4ZjljMDFmY2QsCi0JMHg2ZmNjZTNlYiwgMHhjZDUyMmRjYSwgMHg1MmFhY2U2ZiwgMHg2MDk2NmZjZCwgMHg0ZjYzMjc3ZSwgMHhlNzk2MWRkNywKLQkweGZmZGU5MTM3LCAweGU2OTg3MDkxLCAweGE2YWQ2NTM3LCAweGFjNGJkN2Y5LCAweDI1YmYzNTRhLCAweGYyMDM3ZjNjLAotCTB4N2YzOGYzYzEsIDB4ZTdmNThjNDEsIDB4M2ZhZjU2NGUsIDB4ZmQ3YWE5NmIsIDB4Y2ZmZjVmMTIsIDB4ZjNjODRlZWEsCi0JMHgzZmZkNjg1YiwgMHhmNWYwNGUxNywgMHhkN2M2M2Q2NywgMHhhMzcxODQ2ZiwgMHhmMTg0NzdlNywgMHg1ZmY5YzQxZiwKLQkweDY5YmYzMzhlLCAweGZkN2FiMTc4LCAweGViZDVjYmQ5LCAweDVmZjlmMjM3LCAweDllNGY3YmFkLCAweGZmZjM0NmRmLAotCTB4YWY4Zjc4NDIsIDB4OWE3MWZiM2YsIDB4NzVhYzY4ZGYsIDB4MzhjOWExM2IsIDB4NDQxYjUyZDQsIDB4MmZlNjAwYjksCi0JMHgwNTBjODAxYiwgMHhjNjQ0NGNmMywgMHhkZTBjNjI0OCwgMHhkMTY0Mjg1ZiwgMHgwMTZhM2MzZSwgMHg5ZmZlODNiYSwKLQkweGQwZGU4MDU5LCAweDcyZWQ5NzdlLCAweGQwMTdhYzE2LCAweDY5OTZhZjBlLCAweDRhYWVjMTdhLCAweDY1NzgxOWU5LAotCTB4NTdmNzJiNDEsIDB4YzMzM2Y4MTgsIDB4YWQyYmJlMDAsIDB4MTFmZDlmYmQsIDB4N2RiMDVkZTAsIDB4YTAyNWM5MWMsCi0JMHgyZGVmODY3NCwgMHgyMzUyOTc5NCwgMHhlNjMwN2M3MiwgMHhlNDEzMzIxZCwgMHg4NzdiZDMyOSwgMHg5YTg2M2JkYywKLQkweDJmZDc2ODNjLCAweDFmNjMwNDY2LCAweDYwZDg1ZTNhLCAweGM1MTVkZjM4LCAweGE4Yjc4YjZmLCAweGVhODI0YmViLAotCTB4MDk3NzAyYmEsIDB4ODE5NDA5MTIsIDB4MGI1Nzk2NTIsIDB4N2YwNzllZjMsIDB4N2RkZDgxODAsIDB4MmM2ZGVjMDYsCi0JMHhiOWIwMzEzZiwgMHgwZTdlNzg1ZSwgMHg0NTI2MDVmYywgMHhlZDFkNTVmMywgMHhhYmJkNzljYiwgMHg3M2Q2MWQzZSwKLQkweGMzNzA0YWJlLCAweDBkODFlYzg4LCAweDNhMTk2Mzk1LCAweDdiY2YwMTcyLCAweDc3ZWYwMDM5LCAweDg1MmZmMjk4LAotCTB4NzI3M2U5ZDYsIDB4MDAzNjE3ZjgsIDB4N2ZmMTQ3N2YsIDB4YjBiYmM4OGQsIDB4MGVlMDg1MTcsIDB4N2ZiZmU3OTAsCi0JMHhiYTA1NDU3MywgMHg4M2Q3ZDBiYywgMHg1ZTU3N2RlZiwgMHhjOTJkZTJmNywgMHhkZTk4ZjdhYSwgMHhhOWNkZWY0NCwKLQkweDFlYTIwYzRjLCAweGMzNmNlZWY4LCAweDNiNTUyZWI5LCAweGYxYzAzZjMwLCAweGRkMGZlYzkxLCAweGYxZWViYWNmLAotCTB4ZGZiOTllODIsIDB4NzVkN2VlYTcsIDB4OGRkMWVhYzAsIDB4YmI0YjcyODUsIDB4M2RiZWMxODEsIDB4ODcxOWE1NTAsCi0JMHgxZjdmNjg3OSwgMHhhODc4ZTE5MiwgMHg5NzNlZGQ1NiwgMHg1ZmQ0MjUzOSwgMHg5ZmFiNTc3MywgMHhlM2I0MDY1NywKLQkweGNmMDBmODAwLCAweGY4MWM3OTNjLCAweGU2Zjg0NGU3LCAweGQ3ZjM2ZGNiLCAweDdkYWEwMjFiLCAweDBhOTQ3YTAyLAotCTB4YTIyY2Y2ZTUsIDB4YmQwZjVhMDIsIDB4M2ZiN2RkOWYsIDB4NDM0MDQxZDAsIDB4ZmI1ODgxMDcsIDB4ZjlmN2ZmZmUsCi0JMHhhZTdkOGRmZiwgMHgzZTQ5MmQ2OSwgMHg4YWQ3MDUxNywgMHhlN2M5NjlhNiwgMHhkYjJkZmFhMiwgMHg1ZjU1NTMzOSwKLQkweGQ1NWZiYzEyLCAweDRhOTZmMTdmLCAweDg2YzJmYjU1LCAweGY5ZjZhYTI1LCAweGQ1NTYxZmViLCAweGE0ZmYwMzJiLAotCTB4NzU3NzNmZWEsIDB4YTFmZGFhOWQsIDB4ZWQ1NGE3ZGEsIDB4YWIzZDU0MGYsIDB4ZmJlZmRmYWEsIDB4NzdmZmFhYTksCi0JMHhkYWFhMzc2NywgMHg4NjRiMDM4NSwgMHg0NmE4ZGM2MiwgMHg4ODFkMGRmMiwgMHg4ZGY3YWVmMSwgMHhhMTEwOWI2YywKLQkweDJmYWU4NTViLCAweGZjYTlkM2Y4LCAweGIyYTJlZmQ0LCAweGM4MzBlNTBlLCAweDVlM2VkZDc1LCAweDFjYWI2Y2Q2LAotCTB4YTE1YmYyOGEsIDB4YjUwYzRmZjMsIDB4NjlmZTUwNDMsIDB4NjcyYjU1ZTksIDB4NjMyNWQwZmIsIDB4ODhiZWQwODMsCi0JMHgyZTU5NjcxNywgMHhmM2NhMmYzMCwgMHgxOWRiODE2ZSwgMHhiMjEzZjNjYSwgMHgwZDZjNjc1ZSwgMHg4OTcyZDdmMSwKLQkweGQ3ZjJkZmYzLCAweDNmMjI5NjA2LCAweGI5NDI5NzJjLCAweGUzZjhiNmI1LCAweGQ2ODEyNmIyLCAweDFhMzZkOGMxLAotCTB4MTA3MDQ5NjcsIDB4ZmJkMTc5MTgsIDB4ZjM4MmFkOWEsIDB4ZTY5MTQxZDIsIDB4NmUxZjQ2YWYsIDB4ZGVjMWRhMTIsCi0JMHgzZjljM2EwZCwgMHhiZWU0M2VkNCwgMHhlNzhmMDgzMSwgMHhjMWMwMWQxOSwgMHhkZjQ5NTM1YSwgMHgyNzk3ZjI1ZCwKLQkweGZlMjNkMzlmLCAweGYwNWU1NGJjLCAweGJjZjJhNmNmLCAweDM5ZTU0N2RmLCAweDY3OTUxNTdmLCAweDc2NTRiNWZjLAotCTB4Zjk1MzU3ZjksIDB4ZTU0MDNmOTEsIDB4MmE3YWZmMjksIDB4NTAzN2YwM2YsIDB4ODViZmQyNzksIDB4ODNmYmRmY2EsCi0JMHg3YmYxNWU1NCwgMHhmNGU4NTRhOCwgMHhiNTdkOTZmZiwgMHhmMmJkYjhlOCwgMHhmZmFmYjhkZiwgMHgxNmFmYmQxZSwKLQkweDIzYzM5MzlkLCAweDBkMDZlYmVmLCAweDU1Nzk0YWJjLCAweDYxNzk3MDI3LCAweGYzMTY3NmU0LCAweDc4OGUyOTU4LAotCTB4YzMwNzg5NTUsIDB4OTQ1NzE0NDgsIDB4ZjBkZGMxZTMsIDB4ZDNmNjI3NzcsIDB4MTgzMWU1MzcsIDB4Y2ZlOGVhZWYsCi0JMHg3YjhlMzE3MywgMHhiMTkxYTRmNSwgMHhkM2ViZjhjYywgMHgzYzVjNWZlZSwgMHg0NmVlODBiMCwgMHgzODU4YjdmOCwKLQkweDcyYWEwMTVlLCAweGRjZWMxZTM2LCAweGYzZGQ3YjExLCAweDkyY2Y1ZDc4LCAweDc3MjZmZGYwLCAweDNjMzU1Yzc0LAotCTB4YzA3MmUyMmUsIDB4ZDE2YWYxY2QsIDB4ZGFjZjdiNzEsIDB4ODQ3YzcyMmUsIDB4YjNlZmJiNzYsIDB4YzZiNWU4NDcsCi0JMHg3MThiOTNkOCwgMHgyMzQ3ZjY2MiwgMHgzNmM2M2Q0MywgMHgwNTU4NzFjYiwgMHg1NzVlMDE1ZiwgMHgzYTdmZjVmMCwKLQkweGZkYTA0ZTNlLCAweDFmMWYxMDViLCAweDQ3ZTBhNWRkLCAweDMyYmZmMGM0LCAweDU3NGFhZmM1LCAweGFlOTA0MzlkLAotCTB4N2JmNGNhYjYsIDB4MDI3ODY1YjUsIDB4ZTcxOTFkMWIsIDB4ZDM4YjlkNmUsIDB4N2VmMDRkZjUsIDB4MGU0YmU4ZjUsCi0JMHhhNjU3ZjNiNCwgMHhmMmU3OWNlYiwgMHg0NTZmZTNlMywgMHgxNmQzYTY1MywgMHhhYWI0YTc2ZCwgMHg4NDFiNTdlYiwKLQkweDcwMzcxZTcyLCAweDgzMWFjYzI1LCAweDNjZTlkMWYyLCAweDJjNzI4Mzk3LCAweDljNjU0YTlkLCAweGYzOTJlOTk1LAotCTB4MGJmNjMyNWMsIDB4MjU3NmY4NzIsIDB4ZWE3ZTVmMTIsIDB4NmZiZjUxMzcsIDB4ZTM3ODhlMWEsIDB4NjE2OGUwNDQsCi0JMHgyNDdkZTE2NywgMHhmMWQ5ZWJkMSwgMHgzYmE1YzdmYiwgMHg4YzI0NWZmZCwgMHhjMzM2YjBjNywgMHg5ODVmNjg2NywKLQkweGQxZDdmZmUwLCAweGFhN2E2M2VlLCAweDM0ZDZlMzJiLCAweGFkZTMwMTg5LCAweDZhOTc3Y2Y4LCAweGE1Y2Y3ODNlLAotCTB4NjdhZTk0ZTQsIDB4ZjViZTg4ZGQsIDB4N2Y0MmJjZWMsIDB4YTBlN2NhMjAsIDB4MTA3OTQ4OWQsIDB4YmY2ZDUzYjMsCi0JMHgzNWVhYWEyNCwgMHgyYTlkMDNhZCwgMHgwMGZmMDY3YiwgMHgwNGNhYzczOSwgMHg3MmMxZDIzZCwgMHhmNWJhMmM5OSwKLQkweGMwMDJmNWI2LCAweDJlOWQwOTM3LCAweGY3ODE0N2E0LCAweDkyZWE2MTViLCAweGFmYTQyZTdjLCAweGNkYjlkZmI1LAotCTB4NjgxYjNkODUsIDB4NjBmODVhYmQsIDB4ZjVlYTY2ZmYsIDB4MjY1ZmUxZjEsIDB4MWJkNDdkNWUsIDB4MjJkN2ZlODMsCi0JMHhkMDFlYTNmZCwgMHg5OTlmM2Y3MSwgMHg0M2U0MGUwMiwgMHhkYzcwMWU5NiwgMHg2Y2MzZmM0YiwgMHg5YWUwZmM2MSwKLQkweDU1MTNjYzE5LCAweGZmMDFjNjU3LCAweDVmNmQ0N2FkLCAweGE0YmJiZTcyLCAweDc2YmJmZWUzLCAweGJjZjJjZGRlLAotCTB4ZjU1ZmMzMzcsIDB4ZTJhN2I3YWUsIDB4YWM3OGI1YmEsIDB4ZTRiM2ZkNmUsIDB4NTMxNGZjYTMsIDB4ZWZjMTUxZTEsCi0JMHg1OWJiZDEyNCwgMHhlZTk3Zjk4NCwgMHg3ZjIxMmQzYywgMHg3MjA0MzA1ZCwgMHhiOTAzNzg3ZiwgMHg1YjdlMTdkZiwKLQkweDY0NmI3OWZhLCAweGQ4ZjcyYjlkLCAweGY5NWZiZWM5LCAweDBiZDc5Y2FjLCAweDc3OWM0ZWIwLCAweGYxM2M5MTVlLAotCTB4MDUxNWU4MzUsIDB4YTY3YzY4MDcsIDB4ZDNkODhjMmIsIDB4NWU2ZDdlNGEsIDB4MjdmMjMyY2IsIDB4MDkwMTY2M2UsCi0JMHhjNTE3OTJlMywgMHg5ZmI0NDI4NiwgMHg0YTM1MzY5NywgMHgzMmYzODAxZSwgMHhiZTIzOTVkMywgMHgxYzc3YjMyZSwKLQkweGI1ZmI1MWY5LCAweDlmMDg5NDRmLCAweDg5OWY2NzYwLCAweDZjZWMxMzg2LCAweDZjZWMxZDU1LCAweGJiMTE3ZDU1LAotCTB4NTFmMzBkMzcsIDB4YzAxYjM2OGIsIDB4YWE3NWE3YzUsIDB4OWQxMTVmZGEsIDB4NTY2MmVlMzQsIDB4Yzk3NjhmNWIsCi0JMHhlZmZjOTZkOSwgMHhmMGZiODZkYywgMHg4ODg1MGJmYSwgMHgzY2QwNzlkZiwgMHhmOGYxMDkyOCwgMHhjYmYxZTEzNiwKLQkweGRmMDRiZmNlLCAweGRlNzdkZjFmLCAweGYyNmFkZDA4LCAweDU2MWUzMjhlLCAweGMxM2MxNGVjLCAweDQ0NzM3NDE4LAotCTB4N2QwYWQ3OTYsIDB4NWY4NjQxZmQsIDB4YzU5YzBmODksIDB4ZGVhNDQxN2EsIDB4YTE3ZmE5YWQsIDB4ZmU2NTdmYTksCi0JMHg0YmJhMDE0ZCwgMHgyNGY3ZWM4YiwgMHhlOTE2NzdkMSwgMHgzOGY5MDZhZCwgMHg1ZmI3YzIyMSwgMHgzZWY0ZmM3OSwKLQkweGEzN2Y3N2UzLCAweGYzNTYwZmUzLCAweGM1ZmY4YzBkLCAweDRlN2UzYTM3LCAweGZhOGRmODFmLCAweDc3ZTNiZTgyLAotCTB4NTk2MzFkOWIsIDB4YzRhOWQ5MDIsIDB4M2E3MTgxNWYsIDB4MWZlOWJiZjIsIDB4ZDIxMzZiZGEsIDB4YzBhNjlmYzksCi0JMHgzOWRkZDYzOCwgMHhkOWEzOGM0MSwgMHgxNGU5OWRjZCwgMHg1NGJmMDdkNywgMHg2MDI0ZjMwZiwgMHgwZWRmOTA3ZiwKLQkweGY5ZjAxNmU2LCAweDJjZDM3ZWQzLCAweGY4Y2E4Nzk0LCAweGU1NWViNzc2LCAweGU5MTQyNjdmLCAweDdiMjhmZTM1LAotCTB4NjFmMDA3MzcsIDB4MzhhNmE3OTMsIDB4ZmNlZGQ0MWIsIDB4NWI2YjY2NmYsIDB4ZTMwYjdjNGMsIDB4MDRlOGZjYTgsCi0JMHgyZmZlNDVkNiwgMHg5ZTdhYTc4YywgMHhhMWQ1OWEzOCwgMHhhOGY0NGExYSwgMHg2ZDE1NGY5ZiwgMHg5YzRiNmYxNCwKLQkweDljNGUyOGM2LCAweGZhZDdhZTVjLCAweGQyYzMxNWY3LCAweDQ3NDBlMGEyLCAweDMyYzllYTFiLCAweGNmYTZlMDFjLAotCTB4NjdmZGUwMTQsIDB4ZjA4Y2Y0Y2IsIDB4YzVmZjgwMTIsIDB4YmM1OTMzODAsIDB4MDFmOWMyMTYsIDB4MzlkZjE1NWUsCi0JMHg2NWY1NDBmMiwgMHhlN2FhYmMxMSwgMHg0ZDE5ZTcwMCwgMHhlNTBmMjA3YywgMHhiOGIzMTI0NiwgMHg1MzgwMWU3MSwKLQkweGRiZDFlZWQ1LCAweDBlMWUyODUzLCAweGEzZTUxN2YyLCAweGM5ODlkNGNkLCAweGFhZWY5YzdmLCAweGY0ZWJhZjBhLAotCTB4MTkwYjIzZTksIDB4ZmMzODUwODUsIDB4OTQyZmE2MDEsIDB4ODNlZjhiZjcsIDB4ZDMxM2JmYWEsIDB4OGYwNGQ5ZDQsCi0JMHhkODM2MWM3YSwgMHg2ZjhmMmQxOSwgMHg4MzA5ZmQ5NSwgMHhlOTEzM2JjMSwgMHhhZDY4NzBhYSwgMHhhNzE3ZjM4OCwKLQkweGFlYzg3MmJiLCAweDNhMjE0YjY4LCAweGNhNWQ1YWNjLCAweDY4NWQ0MmNlLCAweDljZjc4NDYwLCAweDM5ZWYxYzBkLAotCTB4ZjcxZTNhM2QsIDB4MGUwOTY3NWMsIDB4MjY4Y2IxODMsIDB4OWM4MzMwMTYsIDB4MzAxY2FkMDIsIDB4ODI1OWM3OGMsCi0JMHg1YWU0OWZiMiwgMHhjZDNjYzNhMywgMHg3ODI5YTA3YSwgMHg1NGE3YWRhZiwgMHhhNzM2MTBiNywgMHhmYzYwOWIwOSwKLQkweDNlM2RlOTZmLCAweDY3YzFjNjNkLCAweGUzNzVkMmZhLCAweDlhZTE2MWYwLCAweGE1YTBjMThlLCAweGI4MjExYjE5LAotCTB4MDUwODBiNDEsIDB4YzJkZThlODcsIDB4ZGYxODRhNDMsIDB4NzkwZjQxODUsIDB4ZDcyZWQ0NmMsIDB4ZGFlZDA4NTksCi0JMHgyZmFmMGIwNiwgMHhhZTk0MTdkNywgMHg5ODhmZjc4NywgMHg1ZDcxY2JiYywgMHg4OTFjZTRjYywgMHg0YTE2MmI3OSwKLQkweGI3YzZmNWEyLCAweDA3MjQwMjRmLCAweGI2ZjJiODE1LCAweDRjYjU0ZDc3LCAweDI4MTRmZTQwLCAweDFlY2MzZmNmLAotCTB4MjQyNTViYjYsIDB4YTUzNjFkYWUsIDB4NmVkMDkyMWUsIDB4MmRiY2I2ZjUsIDB4YTJiYjdmYTEsIDB4ZDc2YTZkZTksCi0JMHhhMWNhMWQ2MSwgMHgwNzUzNWRjOSwgMHhkNGY4ODk4MSwgMHhmNGQyYjJiYSwgMHg0YjVlMzAxMSwgMHhkNjBlYmE2NSwKLQkweGIyYmFkY2Y1LCAweDRmNzVlYTQzLCAweDFjNTFkMzViLCAweDc3NWViNzU5LCAweDc3ZGQ2NmI3LCAweGNmZGQ3MGRmLAotCTB4NWQyZWVmZTksIDB4NzVmZmRjNWYsIDB4OGIzZmJlYzIsIDB4YTI1MTk5ZjgsIDB4ZWVmZTUxMGIsIDB4ZjAyODJkYTQsCi0JMHhlYzk5YmI3OCwgMHhjNjljNzk0MSwgMHgxMjg3ZjYzOCwgMHg3ZTcxODQzNywgMHhlODUwZWI4YSwgMHhhMTRmNzk0NywKLQkweDkxNzQ3ODliLCAweDc5MjM5Y2NkLCAweDFmNGQ1MDNlLCAweDZkOWVmNGM3LCAweDdhNGJkNzA4LCAweDQwNTQ4OTRmLAotCTB4Nzg3YjI1ZWIsIDB4MmVlN2NmODYsIDB4MmRkMDhmY2IsIDB4ZDFmMmY5YjMsIDB4ZTYxODMyYmUsIDB4NTdlNzAyZmQsCi0JMHhiMjUxOWFlMCwgMHg3ODAyY2M1MiwgMHgyMWVjNjE3NywgMHhkNDllYjIzNSwgMHgyZTczMDFkNSwgMHgwM2Q1MzNhYywKLQkweDdiZTE3N2Q4LCAweGNmN2M2NmJlLCAweDg0MjdiYjMxLCAweDMyMjYyNjQ3LCAweDQ2MjBiZTVmLCAweGFmOTk1ZWU4LAotCTB4ZGYxZTRkZmUsIDB4MDVkNGFmYWYsIDB4ZWQ1YzkwZDcsIDB4MDhiYzcwMTIsIDB4ZTg2OTc0M2QsIDB4NDNkMzg3YTEsCi0JMHg4N2EyNjllYiwgMHg5Y2QzYjZlYSwgMHg0YWViNWExZSwgMHhkYmFhOWU5MSwgMHg4NWQxYTcwNCwgMHg4NzE5ZWFlYiwKLQkweGViZWZmY2ZiLCAweDYxZWE5N2U2LCAweDdiNWE4NzlmLCAweDFkMDEwN2VhLCAweDY5NjU1ODE4LCAweDdhZjA5OTg1LAotCTB4YjNlYmUxMTgsIDB4Y2E3YzMyM2YsIDB4NmZlZGUyYmEsIDB4MWZhY2QxYzMsIDB4NzA3ZDQ2OGQsIDB4ZTYxZWU3NWMsCi0JMHhlOTRkZTA4YSwgMHhkMTJmNDk3NywgMHg3YzkwNmMzZSwgMHgyOTVlOTBlZiwgMHhjYjgyM2FlYSwgMHgzYmU4ZWQ3ZiwKLQkweDFjNWJiNDBlLCAweDg4M2RlZmM3LCAweGMxNjYzYmVmLCAweGYzMjJiOTBlLCAweDUzNWYxYzM2LCAweDFhNjdlNzhhLAotCTB4NjQzODFkNjAsIDB4YTAwOWViMDIsIDB4MWYxZjEzZGQsIDB4ZjhjMjVmOWMsIDB4Zjg0ZDM5NjgsIDB4OWUxZDYxZDEsCi0JMHhhN2U3MmFiZiwgMHg1ZWM4Y2Y4MCwgMHg3ZWU1NmExOSwgMHgxZTdhYzdlZSwgMHg1ZTliZmIzZiwgMHhlZjZlNGI5NCwKLQkweDJhYmYxZWE2LCAweDVjNGZkMGI5LCAweGE5ZmVhM2E3LCAweDVlOGU4ZTU4LCAweGY3ZWEzYWZmLCAweDA1NWU1NDM3LAotCTB4ZmIyODdjMTEsIDB4NDgxM2QwYTksIDB4NWZlNjJiNGEsIDB4NTc3YzU5OTYsIDB4NjQ5M2Y0ZDUsIDB4NGYxYThhY2QsCi0JMHg5ZmEzNmY3OSwgMHg3ZjgwMTdiOSwgMHhkZTYzYjEzNywgMHg4MWZmMjgyMywgMHhmNTQzZmU3ZSwgMHgxOTgzMThkZSwKLQkweDQ3ZjRhNmYxLCAweDNmYjU4Y2ZhLCAweDE0MzMxZWYwLCAweGQwNWM3OWYwLCAweGE1NjNiOWJmLCAweDdmNjE3Njg4LAotCTB4ZjY1MGI1ZjcsIDB4YWNhZDBiOGYsIDB4YmY3ODM1ZjYsIDB4YWM0YTAxMzAsIDB4MDFmNWNiMjcsIDB4MmYxMDdkNzIsCi0JMHg3NWI5NGZiMywgMHg5NDZmM2MwMiwgMHg2ZTllZmZiOCwgMHg3YTkyZTM5MCwgMHgzYmNjNDhlNywgMHgzZGI4MWJhNSwKLQkweDkyM2U5YzU4LCAweGI3YzJiZWU0LCAweDI0ODRiZTg4LCAweDU4MDIxYjMyLCAweGU5NjRmNTY2LCAweDNlMTRkZjcwLAotCTB4NDJlOGY3ZDYsIDB4NTk0YTUwNzYsIDB4MGRjZTk3N2EsIDB4NjFmOThmY2YsIDB4OWZmMDM3ZGQsIDB4YmQxMDhmYTYsCi0JMHhkMWQxZWNiMSwgMHhmY2JmNWQwNiwgMHg1Mjc2Yjg5OCwgMHg2YzNiMWY1NywgMHhlYzk1MjFiNCwgMHg0MmY3OGRhMywKLQkweGFmNDQ3YWJkLCAweGM2YjVmYjg0LCAweDhkZGI3ZDVhLCAweGUxNjllZmNlLCAweDEzZWQ3NjNmLCAweDU3N2JmYTA3LAotCTB4OGYyYzZhZmUsIDB4NTA3OGY3MTUsIDB4ZmY1MWRiYzYsIDB4YjE0ZjdhNmMsIDB4MzBhYjY4YTMsIDB4M2VjMGNmYmUsCi0JMHhkNzBiZjBlMiwgMHg3ZDkyNTQ4ZCwgMHgzYzg5MDc3NCwgMHgzZTgwYzdkYywgMHg1NWE3ZjUwOSwgMHg3NzdlNzNhMCwKLQkweGViYjNmYTQ2LCAweDg0NzdlN2MwLCAweGIxYjA1Njk2LCAweGI3MmJmOTUwLCAweDNmZjA0YzZmLCAweGU5OGZhZmY0LAotCTB4ZWQxZTc0N2QsIDB4OWE3OWUzMTgsIDB4M2I2ZDZiNDIsIDB4ZDMzMTk5ZDYsIDB4Zjk4NWMzYmQsIDB4YTI5ZTc1M2UsCi0JMHgyY2ExYTEzMCwgMHg0MjQ4OTUwOSwgMHhjNTMzY2QyNiwgMHgwZTRmNjlhNCwgMHhiMmZlNTFlOCwgMHhlNzFlNGNlYywKLQkweDk0NWYzMDYyLCAweDQ0ZjQwZTlmLCAweDdjMzY1OGY5LCAweDMzOTVkOTI0LCAweDY1ZGQyYWYyLCAweDQ4YmRmYmYyLAotCTB4NzMxYjdlYWMsIDB4ZmFlNDQ0MjYsIDB4ZWVmZGQ3MzQsIDB4ZDFkZDk1MzIsIDB4ZmQzOTQ2ZTAsIDB4ZTI0NWRmZDYsCi0JMHg3ZjFlMmQ2YiwgMHg3ZDdjZTA2NSwgMHg5Nzc1ZWZkNCwgMHg2M2M1ZjRlNSwgMHg2NzU4NGJhOSwgMHhhN2M1ZjU3NywKLQkweGZjNWE1ZjE2LCAweGM5NWZjM2M2LCAweDUyNTk3NzI5LCAweGYxNjkzYzBjLCAweDQ2ZmYwYzcyLCAweDA2MzY4ZjNjLAotCTB4OWRlMjAyMDMsIDB4NGI5OGU5ZTMsIDB4NzgxODgxNjAsIDB4MjlkMmVjNTIsIDB4YTQ2ODMxNzYsIDB4OWRkOTBmNzYsCi0JMHg2OGYwYzk3NywgMHg0ZjE3ZDZmMSwgMHhkMmJiOGE5ZSwgMHg0MTFmZjAyMiwgMHg0ZTkxZTg3YywgMHg4ODRhZWZkYywKLQkweGRiMDMwNGZmLCAweGRkMGNlYjgxLCAweDZhYjdmOTQ5LCAweDQzNGMxZmI5LCAweGY5M2JiNTc5LCAweDgzNzVlMTUwLAotCTB4ZjA4NzcwN2MsIDB4Mzg2MzAxYmQsIDB4NmQ1NWZkN2QsIDB4YjgzZGRlN2YsIDB4MTRhMGRkNzIsIDB4ZmI5ODAzYzQsCi0JMHhkNDY3MWYxYywgMHhmMWI4YzM3NCwgMHg3ZGE0Y2Q2MSwgMHhkYmE4ZmMwNywgMHg1ODdlMzk5MywgMHhjYmJmNmYzMiwKLQkweGQwZDc2OWE5LCAweDBhYmQ3NjhkLCAweDNlMWJmY2RkLCAweDNmMTdkNDk4LCAweDMwZWNkZDBhLCAweDA2NzI3NmM4LAotCTB4MWU3ODhjMWIsIDB4MDI0MjZmYmIsIDB4NzhkYTJkYzUsIDB4NGY0YjVlZGUsIDB4YzM3YTRmMTMsIDB4NDdmNGM4ZTMsCi0JMHg1ZjMwMjVmNCwgMHhmYjMzYjlmOCwgMHg1NjliYzg2YiwgMHhmMjUxNjZkMCwgMHg3YmU4Yjg2NiwgMHg1MWJjOTYyMywKLQkweDc5NzZmZmY2LCAweDgxNjc2ZTlmLCAweDRiMDNhMjgzLCAweDc0YzI1ZmZkLCAweGZmNTkxOTkzLCAweGRhMjc1YzIxLAotCTB4MjBkODgzZTcsIDB4ODMxOGU3NWMsIDB4Nzk2OWNiOGIsIDB4Y2I3NWUxOWQsIDB4ZTU4YTA5ZTcsIDB4YjY0ZDhiZjksCi0JMHg3YWNiOGUxMCwgMHhmOGMyOTdmNCwgMHg1Y2Y4YTJjZiwgMHhjMDhhNGE0MCwgMHhiM2ZiOTA2MSwgMHhkYjhjYjUyMSwKLQkweDc5ZDIwZjVkLCAweGJiMGJjMDFjLCAweGYxYzA4ZDZlLCAweGE3YTA4MzA3LCAweGM3MGM5NTc4LCAweDgwYTY5ZGU1LAotCTB4NTdhYzJiNzgsIDB4ZjUxMWZkZjQsIDB4ZjhlMTI1ZDYsIDB4M2U5ZjVhNTgsIDB4NGE3YThiOTQsIDB4ZGFkYmRlZGIsCi0JMHhkMGVkOGQ1MSwgMHg5M2Y1MTE2ZiwgMHg3MTg2NWZlMSwgMHg5ZWE3YTAwNywgMHg2ZGMxOGQzNywgMHg4YTQ4ZTIzMSwKLQkweDRhNmMwOTNkLCAweDgzZTE1Y2YyLCAweDY1MDU1MTNiLCAweDkyZGZhNWY3LCAweDFjN2FmMWQ2LCAweGE1Yjc0YjVmLAotCTB4MWRhMTU5ZTAsIDB4YmJkN2E1YWEsIDB4N2MxY2NmNTgsIDB4NDU1M2E1YWUsIDB4N2E1OTdlYWYsIDB4MzBhOWVjNTAsCi0JMHg3NGQ0ODQ1ZCwgMHhkMDAzZDBhMSwgMHhmYTQyZmZjNywgMHhmMWYwOWVlOCwgMHg5ZWZlNjhmMywgMHgxNjliZDA5OCwKLQkweGJkODEwZjRiLCAweGVjYTI5M2E3LCAweGIzZjY3OGU4LCAweDQ4MjczNzYyLCAweGM3ZGEzMzNlLCAweDU5NWQ3OTdhLAotCTB4OWUxZDJlNzksIDB4ZjI1ZGJhOGYsIDB4NjJiOWYwNTgsIDB4MGZjY2RjNGYsIDB4ODBlMDFkNjAsIDB4OTFjYzdkMDIsCi0JMHg4M2E0ZGRmMSwgMHhjMGRiZTAwNiwgMHhmMjg4MjE0YSwgMHg2M2Q2MjFlNiwgMHhhYTFlZjljMCwgMHhjOWZjYTgzNSwKLQkweDhmOWVlNjM5LCAweGU2ZmQwODdlLCAweDNkMjcwZGQ0LCAweGJmMjhjM2U0LCAweDM4ZjNlZjQ4LCAweGZmY2YzZDQ0LAotCTB4NWM5ZWJjYjMsIDB4YWVlNmJmZjQsIDB4ZDFmYzY4MzYsIDB4MzllM2EyMjQsIDB4MjNlY2ZlNGUsIDB4MDkzMDNiZTgsCi0JMHg0ZDRhZWRjNywgMHg3NmY5NGQxYSwgMHhmY2VkN2Y1NSwgMHhlM2I0M2FjYSwgMHg5MWFiZGY2YSwgMHhlZTc4YjJlMywKLQkweGY3ODUxZGNhLCAweDgzYjcxMjUxLCAweDEzMWVmMGMyLCAweDZmODBiYzM5LCAweDZhZWJhYzFkLCAweGQzZTA4OGRiLAotCTB4Mjk1NGU4MzEsIDB4OGU1ZDI2N2QsIDB4ZWY1MjM5M2UsIDB4M2IzOGQzN2EsIDB4OTU1ZjYzMTgsIDB4M2Y3YzE0NzksCi0JMHg3YzE1M2FjOCwgMHgwZThiMWU3ZSwgMHhmZmRjN2Q4YiwgMHg5MTBlNmRkNiwgMHgyZjFkYWNiZCwgMHhlYzhjYTdhNywKLQkweDgxMjY5Y2IwLCAweDRkZTVkZWVjLCAweDJhZjliYTI1LCAweGEzZmI5YmZiLCAweGE2ZWZlYzdkLCAweGYyZGUzNDgzLAotCTB4ZmVkYzgzOTYsIDB4M2IyM2FhNmUsIDB4ZjcwYjc5N2UsIDB4YTQzZWMwNDcsIDB4YzgwNDYzZjMsIDB4MTVjYmIyNjgsCi0JMHg3OTgzZDMzZiwgMHhiNzk4MTVhMiwgMHhiZDIxZWRlNCwgMHhmM2Q1Y2YwYiwgMHg3OGQyMzVmZSwgMHhmMjFjYTlmMSwKLQkweGMwZmY3OTEzLCAweGE3ZThiNWM0LCAweGE4NWFmZDg2LCAweGJhYjVmYjQ3LCAweDk1NzZjMmJhLCAweDZjMjgxYjVmLAotCTB4NWI1ZjkxYmYsIDB4MDUzODVmNTMsIDB4OGZlMDVhZmQsIDB4Y2RjMTUyNDUsIDB4ZTRiNjYzZjksIDB4Nzk3ZmExYmEsCi0JMHg0MWFkZTRjNCwgMHgwMmUyNTMzZSwgMHg2YWJmZmRkYSwgMHhmZDIwMjU3MiwgMHhiZGZiMjUzZCwgMHgyM2NmNTdkMywKLQkweGZjM2NkZTdiLCAweGEzNzk5MGRhLCAweDdkZjJkZTUxLCAweDc2ZTI0YzdmLCAweDdiZTg4YTRiLCAweDNlZWJjNzBjLAotCTB4Y2YxNzJkNzQsIDB4N2ZiNGQ0Y2IsIDB4YmNmOTExYmEsIDB4MWVjM2NlNGQsIDB4NWQ5MTU3ZjcsIDB4MTNkZmVjYTMsCi0JMHhhNzc3YjcxMiwgMHhhMDc3Njg4ZiwgMHhjMTRmN2ZmZCwgMHhjZmU4MWNlZiwgMHhiY2YzZDY1YywgMHg0OTIyYTVjZiwKLQkweDE4ZjY2ZjY1LCAweGQ3MDI3YWVlLCAweDFlODA5NGFkLCAweGYxNmVlNTExLCAweDgyOTM4ZTg0LCAweDhmZmNiZTIzLAotCTB4ODA4Zjc3YzgsIDB4N2I1ZDlkZjIsIDB4NWJkNzBkM2IsIDB4ODFkODcyZDMsIDB4N2U4NGJlZjgsIDB4NWJjOWM2MTAsCi0JMHg4ZjMwZDNkYSwgMHg3N2Y5YTJiOCwgMHg5ZTdiZjQwZSwgMHg3YjVkYjg5NywgMHg0MGU5ZGY1OSwgMHgxZWY5NmViZiwKLQkweDVmYzlkYmIwLCAweDAwM2RhNTBhLCAweDMyZDRiYTc4LCAweDNlNjlmMGJmLCAweGJmNWEyOThkLCAweDg1ZjU3ZmUxLAotCTB4NzZlZGJiMTEsIDB4ZWIyODIwNTMsIDB4Mjg0ZTI1M2IsIDB4ZWZhMTg3NWMsIDB4NjYzZDExNmMsIDB4ZWRmYjVmNDcsCi0JMHg0ZGFjZDFmMiwgMHhjYzBmYjgxNSwgMHgwZjg2MWVlMCwgMHhlYzgzYWNmNSwgMHgwOTk2MjUzOSwgMHgyMWNmMGE5MiwKLQkweGJmMmI5MDFkLCAweGVmYmRlOTZlLCAweGU3MTYyMjM2LCAweGRhMDI1MWJhLCAweDBjMTRiZTNkLCAweDhkYjY5NTkyLAotCTB4OTE4ODM3NWIsIDB4NzNkOTUwYmUsIDB4MTJlZjdiNWEsIDB4MWI3N2RkNzMsIDB4N2FhM2I5Y2EsIDB4ZDZiMzc2ODYsCi0JMHhmZGQxNjNmZSwgMHg5ZjdmZTM4NywgMHhkNmJjYmMyNSwgMHhmZGM1NmQ5MiwgMHg1OWQzMjBkYSwgMHg1NGVmNGI0ZCwKLQkweDE2NmE5N2U0LCAweDZmN2UwZWZhLCAweDNhMjJkZDU1LCAweDcyNDZlYzQzLCAweGY4NWJkZDc3LCAweDliNzc1M2ZkLAotCTB4ZDhmNDg1YzEsIDB4MzRkODc2ZGQsIDB4MjJhZGViMTYsIDB4NGU2YTk5YzUsIDB4M2E0MjhmMTQsIDB4Mjg2NmQyYmEsCi0JMHhiY2Q3YmM0NywgMHhmOTAzYjFmOSwgMHg1N2NmZDE1YiwgMHhkZTdhNDRkYSwgMHg5ZTk2NzZkZCwgMHg2OTVlZTMyYiwKLQkweDdhODUxZTRkLCAweGZkYzc1OWE1LCAweDlmMjM4ZWJjLCAweDdmZGY5MTViLCAweDMyNmFlZDdkLCAweDdlYjI5N2Y5LAotCTB4YWFhNzYxOGQsIDB4ZGRhZDRlZWMsIDB4NmUxOWU1M2EsIDB4YjU0OTRlNDcsIDB4ZWM1NzljOTMsIDB4ZjhmYTNlY2IsCi0JMHg2NzY3NWIxNCwgMHg2YjFmNDI1ZiwgMHg0OTE5ZjBmNCwgMHg2MTZlZjNiNiwgMHhkOGFmMzFlMywgMHgxOTc5MmQ3YSwKLQkweDliNzc2NWYyLCAweGUyODZiOWQ1LCAweGU4OGVkYzFlLCAweGI5ZjRmOGVlLCAweGI4ZmNmODE5LCAweGVlOWM3MTQ4LAotCTB4ZjFkMTIyNmIsIDB4ODZjYjAzYTEsIDB4ZjFhMmQ5NzYsIDB4ZjVmYjRmNWMsIDB4NWYzZmMwZDksIDB4M2ZmZDBmZDksCi0JMHgwNzcxNmMzYiwgMHhmNzdhN2Q3MCwgMHhkNjNkYWYyOCwgMHg3OGU1MDRiZSwgMHg5NzQzMjg0MSwgMHg0MzIwNjU4ZSwKLQkweGVjMzVmNDU3LCAweGUyN2Q5M2M0LCAweDdmOTFkN2Y3LCAweGE2N2E5ODU3LCAweGRkY2QxOGEyLCAweGZlNDI1YTdhLAotCTB4MDU3OTIwZGYsIDB4MjY4N2U5MjMsIDB4ODA3NWYyMmIsIDB4NzNjMjBlOTUsIDB4NTYxNjU1Y2MsIDB4NTNkNGY0OGEsCi0JMHhhMGRiOWNjNywgMHg5ZDUxY2Y3NSwgMHgzMGZiMDRjZSwgMHgxYmE2NDc2MSwgMHhmOTU1ZWRiNywgMHhhNjkyZjM1YywKLQkweDRhMzMyOTA2LCAweGJmOTEyYzVlLCAweDA4NjBiYjNiLCAweDdhOGE0OTBjLCAweGNiOTFhNGZlLCAweDk3ODcwYmFiLAotCTB4ZWVmMjQ4YmUsIDB4MTYxYjIzN2QsIDB4MzYyZGJmNDMsIDB4NWJiNTdkNzIsIDB4ODVkOGNjMGEsIDB4ZThlOGNlZmQsCi0JMHgyMzhlYzFmYiwgMHhmM2MxMWM2ZiwgMHhiYTRlNGIxMCwgMHgyOGJlYTFjNiwgMHg2ZmZhNzIzMSwgMHgzZDZhZmUzZCwKLQkweDNkNjkwYjllLCAweDc2ZjQ3OGM1LCAweDgzYThhNTdiLCAweDE3MzNmNzc5LCAweGFiYmQzZjhmLCAweDFjMjNmZjIzLAotCTB4NjQ5ZTYzYjcsIDB4NDYxZGU3NWMsIDB4MWZmNjY3MmUsIDB4Yzc0Nzk1ZDUsIDB4ZTdjYmY2MDUsIDB4MWEzNTZlMWMsCi0JMHg0NjYxZmM2OCwgMHg4ZWQ3Y2E5MSwgMHgyM2NmMjY5NiwgMHgxOWU1ZjNiZSwgMHg3NWNlZWY5MSwgMHg5MTVjM2JkNSwKLQkweGVmNjI5NTc4LCAweGI1Zjc3YTRjLCAweGNmZTA2MzE5LCAweDRlNzQ5NzQ5LCAweGJiZDc2ZWRjLCAweGFmNWM0NGRiLAotCTB4ODk2MzAyZWIsIDB4MDdmYjVmNDIsIDB4Zjg4ZjFiYzYsIDB4N2ZkYmM2NTcsIDB4NzAwNzhmODksIDB4NTRiZTQyMWMsCi0JMHhmNDFhMGZmMCwgMHhiZWExYTM0NywgMHg4NDlmNTNiZiwgMHhmODI4MTNkZiwgMHhjY2ExZDY1NywgMHg5ZTYyNmFlZiwKLQkweDhlYjExYjQ2LCAweGM0MWJiNWU3LCAweDhmNTIzMTRkLCAweDU0ZWY5MWY0LCAweDc0NDljZWY4LCAweDI5ZTQ4NmY5LAotCTB4MTgxMGY0ZTUsIDB4ODcwYmY1ODIsIDB4ZWM1NzY0MmQsIDB4NGIxMWY1OTYsIDB4Zjg4YTFjYWYsIDB4YmU2OWY2NTMsCi0JMHgwNTEzZWI5MSwgMHhjZmYzNzg5ZSwgMHhjYTU0ZTE5MSwgMHhhZmQ3NGIyZiwgMHhhMjAxNWMxYSwgMHhjNTAyM2Q5YiwKLQkweDkwODE1YzE5LCAweGZiMDUzYjI5LCAweGU3MzlkMzY1LCAweDM3ZDhkZTQ4LCAweGJkODdmNzA3LCAweGQ2ZmZhNmFiLAotCTB4OGFjZTlkMmUsIDB4MjE0ZGYxZjIsIDB4ZmRlMGQyOTEsIDB4NzRjMzRmYjQsIDB4ZmEyMjZmYTYsIDB4ODhjOTNkNmIsCi0JMHg3Y2VlOTc4ZiwgMHg1OGNkYzc5OCwgMHg3MjhlOTA2OCwgMHhjODQxODFjOCwgMHg5YzNmYzhiNywgMHgwNTAzNDM3ZiwKLQkweDM1YjUyNzI4LCAweGY4NDQxZGFlLCAweGFmOTAzOTBkLCAweGJlMDI3ODIyLCAweDQxYjZiMmMxLCAweGIyNWQ3YTQyLAotCTB4ZTU4Yjk3OGEsIDB4NmM5NjQ3ZWYsIDB4MmU3ZjExZjEsIDB4MTUzOTVhZGEsIDB4OThkNWE3ZWQsIDB4MjhiZDQwZjQsCi0JMHg1OWQzMmJkMywgMHg0ZWJjZjAzMiwgMHg4NWRmNmNhZiwgMHhkZDM4OTdlMSwgMHhkNGQ5NmM1ZSwgMHg3ZDAyZjM4ZSwKLQkweDYzZTIzM2ZkLCAweGNmYjNlYjcyLCAweGJkMGFiODIzLCAweGEwNmVkYzVlLCAweGRlOTBhYTcxLCAweGFkNzRmOGEzLAotCTB4ZGU3YmFmYmMsIDB4NjkzZWY0ZTUsIDB4N2JmNGExYmIsIDB4MDE0OWVlYjAsIDB4ZWMzOGM0ZTYsIDB4NDQzYmVkZmUsCi0JMHg5MWZiZGY5NCwgMHg5ZjM5MzM5ZSwgMHg3MGJlOWVhMywgMHg2M2ViNjlmOCwgMHhlYjRlY2ZhOCwgMHg3NzdiYzYxOCwKLQkweDM5YWFhYzRiLCAweDFhM2EyZjhhLCAweGVmZjE1NzVmLCAweDMzNzU5ZGQyLCAweDk1ZGNhZTI4LCAweGE2NmJhMDI0LAotCTB4Zjc4MmFkZjAsIDB4MWE3YjkyZGQsIDB4MzRiN2ZmZjEsIDB4ZGZjNjVmZmMsIDB4ODFmZjg3ZGYsIDB4ZmU2NDliN2UsCi0JMHhmYzBlNTRkZiwgMHhiNzEyOGYwZiwgMHhjZTM4MGEyNywgMHg3OWY2Mjk2ZSwgMHhmZDhkNTdhMSwgMHg1NzEwYjczYiwKLQkweDIzZWYxZWFlLCAweDcyMzU1ZjU3LCAweDBkOTFkYmZmLCAweDczZGY1N2YzLCAweDMwZWZmYzk1LCAweDZjZGQzMjdjLAotCTB4MjZlODUzMmEsIDB4N2I3MWYwNTMsIDB4Zjg4Mzk3NTMsIDB4M2QyMmJjMDIsIDB4ZjI4OWJkOTMsIDB4YjgyYjI0YjYsCi0JMHg4ZjQ1ODg0ZCwgMHg5NjdjOTQ2YiwgMHg3MjIzNmY4YSwgMHg1ZjVmZTE0ZCwgMHg1ODUzYzIxYiwgMHhlZDE2YmI1NiwKLQkweDAwOGFlNGU0LCAweGMxNDVlOWQxLCAweGY0MDkzNDM3LCAweGU3ZTQ0NWRhLCAweDY3ZTE3MjE4LCAweDMzM2U1ZTMyLAotCTB4MWJlNzU0ZjgsIDB4MzJjMWMyZmIsIDB4YzBhYmFlOTAsIDB4NjlmM2EyZTMsIDB4ZWUyNzA1NWIsIDB4ZGFlZWQyOGYsCi0JMHhmNzgyZmRjYSwgMHg5ZTU3M2U2NSwgMHhmOTE1ZmZiZiwgMHg1M2Y3OGMzZSwgMHhlZmFjZTI3ZCwgMHg5MzNlYjkxYiwKLQkweGRjY2ViMDRjLCAweDRjNjdkNzIwLCAweDYwYmUyNTI4LCAweGM4MTllOWJhLCAweDhmNDA0YjZmLCAweDhmNGEyZjdkLAotCTB4MTAzNDM0NWQsIDB4Mzg3ODJhYmQsIDB4NjdmYmQzMmIsIDB4Y2ZkZDdjODksIDB4YzQxZTcwYzksIDB4NWJlMTI5OTgsCi0JMHg3YTA5NDdjZSwgMHg1YWY5YzBiZCwgMHg4YmJmMzgxNCwgMHhjM2M1ZmUzOCwgMHhkZDExYTc5MywgMHhlZTliMTNkZiwKLQkweDI0NmFlZDk3LCAweDc3MmM0Y2ZhLCAweGIzYjk0MzhlLCAweDI3MzZlZjQ5LCAweDhmMjU4ZThlLCAweGVjNzY1NDgzLAotCTB4NDlmOTA5ZjgsIDB4ZjdjOGM3NDgsIDB4MGFhMGY4ZjEsIDB4YTBjNTgwZjksIDB4N2ZkMDIwZmYsIDB4NzQyOWZlZDQsCi0JMHgxZDcxNzQwMCwgMHhkNzNjYTVmMSwgMHgzNzkyODVkMiwgMHg1YmIyZjA1MywgMHg2NjliNzc5MywgMHg2MDFhNzhlMiwKLQkweDI1ZGVmMmUyLCAweGZhNzhhOWNiLCAweGYzZWYyYmU1LCAweDJiZjg3ZGJiLCAweGU2YTA1NGNkLCAweDQ1NmZkYzJmLAotCTB4MTM3MTdjNGUsIDB4ZTI2NzliM2UsIDB4ZmE2NDRmZWQsIDB4NzgwZWRlNGUsIDB4ZTRhMDYyN2EsIDB4ZWI3MjBiNWEsCi0JMHhlNzY2ZDgwOSwgMHhhNjNlNDhmOCwgMHg1OTVmOWU0OSwgMHhhMDkzNDhjNywgMHhmMzY4ZGJjYSwgMHg2ZjgzMDYyOSwKLQkweDlmMGEyOTg0LCAweDhkNzNmNzk4LCAweDMzNGJkMDhlLCAweGQ4MWNmY2UzLCAweDQzY2Y5NDZlLCAweDVmNzY1NTM4LAotCTB4YzY5MTI5ODEsIDB4NDBjMWVhNzcsIDB4OTY3ZmQ0MDUsIDB4MDM2MWQ5NTksIDB4MGNlZWVlYjgsIDB4ZTE3MThjNTQsCi0JMHg1OTgxZGI3NywgMHhiYWUyNjRmNywgMHg4NTNlODI5YywgMHg1M2FjZTVkNiwgMHhkZjIwY2U4ZSwgMHg3YzUwYjcxZCwKLQkweDNkZGIzZjI0LCAweDk3NGNmYzhhLCAweGY3YzcxZjNiLCAweGVjYTRmYmM4LCAweDZiNzViYzY3LCAweGZkYmM1Y2Y1LAotCTB4MjFlMzI3OWMsIDB4Y2FkNzZlNTUsIDB4MmUyNjQxOGYsIDB4Zjk2NTdhMzcsIDB4ZjgzZmU1YTEsIDB4NTI2ZjkzMTcsCi0JMHgzYjI0MmZiNywgMHg2ZDhjOWQ5MCwgMHgzMjZmZGUwNywgMHhmZjUxNzlmMCwgMHgwMGQ0YmY0MCwgMHgyM2RkZmVmZiwKLQkweGRjZWMyN2VmLCAweGMzNDNjNDFjLCAweGEzOWQyMzc2LCAweDMxZDdmODUwLCAweGYxOGU5YmNiLCAweGU0OGE0NzEzLAotCTB4YWViOGMxNzYsIDB4N2UxYTZjNTksIDB4ZThmMmVmYmYsIDB4ZDY1MWJmYzgsIDB4MjZlMWZmNWYsIDB4N2VhMjZmYmEsCi0JMHg3ZGExOTE4NywgMHg1N2VmMjA5ZiwgMHgwYzE2MmNjMiwgMHhiYWY5ZjEwOSwgMHhiMWU4MDc2MywgMHhkM2ZlMjg5NCwKLQkweGVlODllYjA3LCAweDUxMDNiZjgwLCAweGQ5MzQzN2ZjLCAweDJkODA2ZTk3LCAweGRiZmFjMWZlLCAweGMwYjc0Y2NhLAotCTB4OGNjYzk5M2MsIDB4YTgyYWVhMTYsIDB4MzQ3YzAwNmYsIDB4OTYwNDc5MjQsIDB4YjY3NWY1NDgsIDB4MGZlM2YxODEsCi0JMHgyZTRkMzAzZiwgMHhiZjA0ZjNjMywgMHg2ZmJlN2EzMiwgMHhjNDM4YTU0YSwgMHgxYzJjYjAwZiwgMHgyOGIyMmI1MCwKLQkweDFkOTliZGJlLCAweGIxZjk1NWYzLCAweGIwNzM4ZTQ2LCAweDY5NDY5MDM2LCAweDljZTJmOGFhLCAweDJmOGEyZTlkLAotCTB4NTA3YzhkM2UsIDB4NzlmZTcxOWQsIDB4OGRhNmFlMWMsIDB4MDc4YmViOWYsIDB4Njc4YzhhNDcsIDB4MTdjNGU3OTAsCi0JMHgxMTVhZGUyOSwgMHhjZjg1N2ZmZCwgMHhjOTI1Mzc5ZSwgMHgzMDExZWJmYiwgMHgxZGQwYWVmZSwgMHg5M2RhMjlmMiwKLQkweGUzMWQ3ZTRhLCAweDJmOGE3NjJlLCAweGIwZWU4OTA3LCAweGMyM2UzMDllLCAweDc0MmExYjdmLCAweDYxZTJiMWU1LAotCTB4YWZiNjRjYmIsIDB4ZjIzNDg3YTcsIDB4YjE3ZGI1ODksIDB4NGJkMDMxZjcsIDB4NDhiN2Y4MzUsIDB4Mjk5NzZhZjIsCi0JMHg1NGQ4MWVjYSwgMHhjNzhkMjY3MSwgMHg0MzlkMTljZCwgMHhlMzllNDQ3ZSwgMHhmZmVlMzVjNSwgMHhlMWYyOGUxOCwKLQkweDk0N2VmY2I3LCAweDgwMjk0NjcxLCAweGZkYzBhYWU3LCAweGU0ZDMzOTc1LCAweGRhOWQ5MGYxLCAweGZjMWQ5MDg0LAotCTB4ZDFjZjlhZGQsIDB4ZjM3ZjAxNzMsIDB4MmY5NTFkNzMsIDB4M2NiN2IzZmUsIDB4NTZkOWVkMTMsIDB4MDMyYzFiOWQsCi0JMHg1YzkzZWJjYywgMHg0MTY1MGY3MCwgMHg5MzczZDAxMywgMHgyYTliOWY4NSwgMHg5MDc5Yjc2OSwgMHgxMzA1YmJmZSwKLQkweDEzZTk5YjlkLCAweDE5ZWEyZjhmLCAweGQ3ZGEwYmIyLCAweDQxMWYwMWI2LCAweGIxODRiYmI1LCAweGVmNTc4NDRlLAotCTB4MGFkMGYzYTYsIDB4ZDg5ZWM3N2UsIDB4NjNkZjQ3OTQsIDB4MzdkYzFiZTksIDB4Y2JjNTViOGEsIDB4YjZhZjE2ZGYsCi0JMHg4OTRhZGM1MCwgMHhmNGY3MTU5MywgMHhiNTY0OWQxMCwgMHg2MWY4ZWE2NSwgMHg1ZThmM2UyOSwgMHhkNzkyYWY1ZSwKLQkweGJlZjE5MjZkLCAweDIyNmJlOGZiLCAweGIyYzJiMWVhLCAweGVmNjhiNTg2LCAweGVmN2QxODY3LCAweDJlNGRkZDIzLAotCTB4MTMzOWRiNTYsIDB4M2I3NmRhODQsIDB4NDYzNGQ3ZDIsIDB4MWZjMjgyN2UsIDB4MjBlYzVkYzksIDB4NGYxMmE5ODYsCi0JMHhjZmQwNzk3NiwgMHg3M2MxN2M5YSwgMHgwNGE5ZmQxMCwgMHg3N2Y4MTMyZiwgMHgyNGYzZTE5MiwgMHg1OGZmNzBlNywKLQkweDA3Yjg0NzhhLCAweDEzZmMyOWM2LCAweGUzMjhiYzIzLCAweDJhNWEzZWVjLCAweGQyOTE5ZGEwLCAweDQ2YjgyNjU5LAotCTB4MmRlZmE1ZjcsIDB4ZTA0ZTc3ZTgsIDB4NWY3MDFlZTcsIDB4ZTg2ODdmMTUsIDB4NjE5NjQ2MmYsIDB4MmZlOTQ4N2MsCi0JMHhiZDVjYjk5YSwgMHg0MjliZTdjZCwgMHhhZmEzNGZhMSwgMHgzNDlkZTcxNywgMHhhOThlZDgzYiwgMHg4MTU1ODk5NywKLQkweDg0ZjEwYzc2LCAweGQxODRiM2Q3LCAweDAyYmE4Mzc4LCAweDI3ODE4ZWI0LCAweDk2NTgyNTdkLCAweGY3MDQ4OTQ4LAotCTB4M2EyMTBiZTQsIDB4OTZhMDMxMmYsIDB4NWI5MjMxZDEsIDB4ZmIyNWRmM2EsIDB4NGVkYTk2ZTEsIDB4Zjc3MWY3MDEsCi0JMHhlZjA0NDNkMSwgMHg1ZTBlY2VlMCwgMHg5YWY1N2NjYSwgMHhiODE0ZmZhYywgMHhhMjdmNjQ0YSwgMHhkNWMzOGU0NCwKLQkweDhlOWY5ZTVmLCAweGVjZDE4MWZlLCAweGEzMzhjMTJiLCAweDEyZmE4ZWIyLCAweGJmOWUzYTVmLCAweDNjZTc4MmRjLAotCTB4ZTczZmM0MjYsIDB4MTQ5NjY2OTEsIDB4OGNjMTM3M2YsIDB4YWVlY2VlN2UsIDB4NWE3YjQ4MjMsIDB4ZjhlZDM5YmYsCi0JMHhiNDhmZGExOSwgMHhkZDFkZGNkNSwgMHg4MGE1N2M3MiwgMHhjMWU1YjVmNCwgMHgyMmIzN2VkOCwgMHg3MWM4YjYyZiwKLQkweDE0ZjNhOGM0LCAweDdhZDFjZDgzLCAweDlhYzkzMmI5LCAweGMyOGYyNTE1LCAweDllNzIyNjcyLCAweDllN2NiNzYyLAotCTB4NmY3YWE2YzIsIDB4YTQ2NjEzY2MsIDB4Mjc4MzRlYTcsIDB4ZGYyYjlmMDcsIDB4ZGYyYWJjZTEsIDB4NzFmOGEwMWIsCi0JMHg5NjFlYmUwYSwgMHg5ZTY4ZDNmNywgMHgxMDg2ZTc0OSwgMHhlM2EwNGU0ZiwgMHhiZmIxY2Q1NywgMHhkNjY4NTk4NywKLQkweGQzOTc3YWM5LCAweGY0ZTRlYjBiLCAweGI2ODhlYjgyLCAweGI5OTlhNjMzLCAweGUzY2RiZDVlLCAweDc0ZTdhMjliLAotCTB4OWM3ODg0NTIsIDB4NDc2YzE0NTQsIDB4MWU1ODlkYmEsIDB4YmZmYTQ3NjgsIDB4NTI3NGM5ODUsIDB4NGI0NGU5Y2UsCi0JMHg5MzliZjdlZiwgMHhhMWU5M2E2NCwgMHhlMDI2MGE3YiwgMHhlNDMxNDVmNywgMHhkYjk5ODU2MywgMHhhNTlkMjk3NywKLQkweDBmYzAzZjQ0LCAweDg1N2NlMTc3LCAweDAzNDU2YTgzLCAweDMzOWNkMGE1LCAweGYwZjhlZjUwLCAweDllNzgyMmYyLAotCTB4NDc2OWU0NWYsIDB4YmM3YTczN2EsIDB4YThkYjhlMjIsIDB4YzliYTcyNzcsIDB4YjhjNDllZjQsIDB4ZTRhYTdkNzcsCi0JMHgzOGQwMmI1ZSwgMHhlMGM3MzZkZiwgMHhhN2U0MTZhYiwgMHg0YTdlMTFkMSwgMHg1YTQ3ZTM5MSwgMHhjMzIyOWNiYSwKLQkweDFjZjE5M2U1LCAweDQzZGYxZTdmLCAweGE3NGE0ZjM4LCAweDMzZjc4M2NlLCAweDRjMjViOWUwLCAweDA1NWM0ZTQ2LAotCTB4OTZmOTEyZmEsIDB4ZDJmOWQyNzUsIDB4MDk2NzJhYTQsIDB4ZTVhMGRkZjIsIDB4ZjlmNzAxNmUsIDB4MDE2ZmJkMjUsCi0JMHgzYzc2YjNlZSwgMHgzNTBjOWY0NSwgMHhiZmZlODg3OSwgMHg2MjY4ZGViMiwgMHhmMmZmOGQyNiwgMHhiNWRiOTliMCwKLQkweDdlNTEyYjFiLCAweDg0OTlmMmJmLCAweGYwYTVkNWYyLCAweGQ2ZjFkMWU1LCAweGYzNzQ1MTc5LCAweGY4M2E1Zjc0LAotCTB4YTA3NDU4YTcsIDB4M2E1YTdmOTUsIDB4YjUwYmM4ODgsIDB4YWRiYzAzZmMsIDB4ZWRjM2ZiZTUsIDB4NTVjZTk0ZGMsCi0JMHg2YTFiOTcyMiwgMHg3ZjZmMTc3OSwgMHgwZDBkYzhmYSwgMHgzZGU5OGYxZSwgMHgwOTdhZTBjZiwgMHhmMzkxMDVlOSwKLQkweDc0ZjRmMWRiLCAweGFlMWZmOWEzLCAweDMxY2QxYmE3LCAweGQ0Y2ViNGY0LCAweDlmM2MxYmYzLCAweDc0NGRhMmJiLAotCTB4NWYyMjVjNjEsIDB4ZjZiYThmM2UsIDB4NGYzYTI0ZjEsIDB4ZTA5MzYyZjAsIDB4ZDE0Mzk3NDYsIDB4NTAyMjQ0ZDMsCi0JMHg2MTI3YjJiZiwgMHg0YTE1YmIyYywgMHg2YWU3ODA3OCwgMHhiMjI1MDMwMiwgMHgwOGM3NTljZiwgMHgyNGQ2MzNjYSwKLQkweDFiYWM3MGNhLCAweGRiYjdmYTQxLCAweDUxZTYwMGE5LCAweDI1NjA2M2ViLCAweDkxZDNmYTAxLCAweDY4NGIxODFkLAotCTB4ZjMxMDc4M2EsIDB4OTg4YjZiMmMsIDB4Yjc3MDAwY2YsIDB4ODBmM2YxYjcsIDB4NDg1YmQ2MmYsIDB4N2UzZWVmOWYsCi0JMHg0MDBmMzdmNSwgMHgxZDcxZTczZCwgMHgwZTA0N2YxZCwgMHg0YWI2NzNhNiwgMHgwM2IxNDVkZSwgMHhlODU5MGUzYSwKLQkweGIzMmY3MDNjLCAweDc3NTRkMWI4LCAweGY4NzkwZDhiLCAweDIxZmJlYzAyLCAweGU4ZDk4M2M0LCAweGUyMjgxZmNiLAotCTB4NzdhZWM0MzksIDB4ZjFlY2EzOGEsIDB4Y2NiZmQ2ZGUsIDB4ZTQ4YWU0MzksIDB4N2QwZTlhOTcsIDB4ZGY2ZDE4NWUsCi0JMHgxNGE5ZjkyOSwgMHgzOTk2ZjdkMSwgMHg5NjNmZGZjYSwgMHg3N2NiOTY3NywgMHgwNTVmYjljZCwgMHg5YzVlMzA5ZSwKLQkweDVkYTI3ZjFjLCAweDIzNzVmMDRmLCAweDQ4YmY2ODdjLCAweDEwZmI4NjFlLCAweGUzZDY0OGY4LCAweGZiOTRkZTMyLAotCTB4MGFkYmJhMGYsIDB4YmU4MGZhNGUsIDB4OTgzOTNjNWUsIDB4N2I1YmUxYzcsIDB4ZWY3NzY4Y2QsIDB4MjE0ZWY5MzIsCi0JMHhmNGI3ODk5ZCwgMHhmNmE5ZjlkMCwgMHhlODExZGViNiwgMHhmOWZjODM0ZiwgMHgxZWY3OWYwOCwgMHg5ZDE0OWIzZiwKLQkweGViMTJmZWZmLCAweDNmNWEyNGZiLCAweDcyOWY1YmM0LCAweDFmNGI1ZTNlLCAweGRhMTY3ZGRhLCAweDE4NGRmZTBlLAotCTB4NTBjMDdjNGIsIDB4YjA4NjA1NGUsIDB4ZjU2N2ZhMjAsIDB4MTdhZGM2NjMsIDB4MzE2NzIzNzEsIDB4MzQxZGM1MTcsCi0JMHg5OTlmYjQ3OSwgMHg4ZTY1ZmZiYywgMHg0YzY3OWZlMiwgMHhkZTIxYmZkZSwgMHg0ZWZjMWU3MSwgMHgwNWY5ZDYwMywKLQkweDk4OWVjN2Q2LCAweGRiNDc4ZjlmLCAweGY1M2FjMmJlLCAweDE4ZmI5ODk2LCAweDIxNWFmZGEyLCAweGU2MDU2N2FmLAotCTB4NTM3Y2YwZmQsIDB4Mzg1MmUxOGIsIDB4ZWYyMzFkZGYsIDB4ODA5MWZiMDcsIDB4ZGQ0YTA1ZTMsIDB4OWZiODdkMjcsCi0JMHg2YmRjZDgxZiwgMHg0ZWZhMWYxMSwgMHgwMDkxZGEyNywgMHhiM2I2MjI3ZiwgMHg5N2JhNGFhMiwgMHg1MGYwNjBjNywKLQkweDNhZDVmNDdlLCAweDViYmQ3ZTdlLCAweDFlMzFiOGIwLCAweDY0OTFkY2Q2LCAweDMzZjg3OTQxLCAweGZiMWQyZjkzLAotCTB4OWQ1ZGQ0OGYsIDB4MDlmYTcxODMsIDB4M2NkZDVlOWQsIDB4NDFiZTUzZDIsIDB4ZTc1M2IyMTYsIDB4OGUwOWVhZjcsCi0JMHhkZmRhMzE1YSwgMHhjZmViMTJmZSwgMHhlN2RjYzRiMSwgMHhjNzkwZmIzZSwgMHhhMWY3YzVkNywgMHhmNDYyZTdkZiwKLQkweDNlOWM3YmZjLCAweDQ1ZDY1MWY5LCAweGZiODNmNmYxLCAweDNjYzVjOTNlLCAweDRmODFmNTUyLCAweDdlYWQzZmM4LAotCTB4NWI5YjQ4YzMsIDB4MDQ4OGM2ZjYsIDB4MjUyYmUzYTQsIDB4NGI4OWVkYjEsIDB4MWViNzVhZmUsIDB4OTY3MTk5ZWMsCi0JMHhjYjliOTIyYywgMHgyM2RkMjc1OSwgMHg2MWU5YTJiMCwgMHg1ZTRhM2ViNywgMHg3MWQzZjYyYSwgMHg4ZTA1Njc0MywKLQkweDY0NDBiYzdmLCAweGJkNzc0MDc1LCAweDU4MDM4OWVlLCAweDk0YWMzOTBjLCAweDA5N2I0NWJmLCAweGZkMWY3ZjYwLAotCTB4OWY5YmQ0ZDIsIDB4OWRlNmQyODMsIDB4MzM4ZmI0ZmIsIDB4NDJhMTFjNTMsIDB4YjNjYzg3NjMsIDB4ODhmNzNkNzAsCi0JMHg4ZmJjMzI1YywgMHhiY2JjZTAwNSwgMHhlMGU3NGVkNywgMHhjZjdmOGYyZSwgMHg1YzRiMWY4MSwgMHg3ZTVkZjk2ZSwKLQkweGIwZmZjZjAwLCAweGJmMzA0N2NlLCAweDhkOGJmODE2LCAweDcxOGFhOGZjLCAweGQ5ZDdlNWVmLCAweDNiNzZmYzIzLAotCTB4ZGJiMDQxOGYsIDB4NzBlMTNmNWYsIDB4ZTY4YWZmNDEsIDB4MTQ0MDk0ZjYsIDB4YTFlN2I0ZmUsIDB4YzdkNzkxMWUsCi0JMHg2ZTc0NWRmNCwgMHg5OGJmZWQ4NCwgMHg1NjNlZjc4NiwgMHg4MjljM2JlYywgMHhlYzM3ZmRlYiwgMHhhZWRmYzMxOCwKLQkweGY0NGQ1ZDU4LCAweDlmMjJkNTMzLCAweDE5NjBjYWEzLCAweDhiZmEwZjI4LCAweDA1NzNlZDA3LCAweDVkYzdjNzBmLAotCTB4Zjc3YTgyMWMsIDB4ZDIzYjFjNGEsIDB4NzVlYmY3MmYsIDB4ZjY4MDFhNGYsIDB4Y2ExNDg1NGQsIDB4NTViZjE1ODksCi0JMHhiYzJkMmJmYywgMHgzYjM3M2IzNywgMHg1OGY3ZTI0MywgMHhiNmFmOWY2YSwgMHhlYmRmM2Q3MCwgMHhmMDAwYjMzNiwKLQkweDA2OGQyM2U5LCAweGM0ZWVhZWZhLCAweGNhY2MzZmI1LCAweDY0ZjhmZDg3LCAweDA2YjljMWFiLCAweDg1ZWFhZGY4LAotCTB4MzA5YmMxZjYsIDB4NDhjZTM5NWUsIDB4NWM0Zjk3ZjEsIDB4Y2JhNDFjYTEsIDB4ZjNmMDJmYzUsIDB4N2Q2YzlmYjgsCi0JMHhjOGYzMGQyNCwgMHhiNWY0MDlmZiwgMHhkYzU4ZTAxYywgMHg1NWU3YTA2OCwgMHhlN2E3ZGY4ZCwgMHg1YmJhNjUxNywKLQkweGU1MmE0MmZjLCAweDNjNzQ0Zjk3LCAweGFjZWI4NjlkLCAweGRmOTNmYmZhLCAweDk2NmZmZTQxLCAweDQxYzZhMzljLAotCTB4YTA5NzdjYjksIDB4NzRiNzc3M2EsIDB4NTc1NTU5YmIsIDB4YmFjYWQyZjIsIDB4OGYzOTEwOTksIDB4N2U3ODAyZTcsCi0JMHhlNzlhZjk2OSwgMHg4OWY1Nzc4MCwgMHhjMmQyZmU1YiwgMHhkZDZmOGJlZCwgMHgyZWFlZWIwNywgMHhhZWZiMjVlOCwKLQkweDhjODU4OGZkLCAweDQ0ZGI1ZmE4LCAweDcxYTFkZmQyLCAweGFkZDZmNWZmLCAweDc3ZjI5ZjUwLCAweGQzMWY5YmJkLAotCTB4YjIzOTI3NGQsIDB4ZWNlNWM0YzgsIDB4NzBmYTdkOTQsIDB4ZmY3MTljYmUsIDB4NjE1Nzc2ZGQsIDB4MDg3OTdjZmMsCi0JMHhkYmQyMDBlNCwgMHhlMThhOWY5NCwgMHg3OWY0NzliYywgMHg1Y2RlNmQ1NCwgMHhmMzZiOGZjOSwgMHgwMjljNzhlNiwKLQkweGYyY2RmMWU1LCAweDFjM2YwYWU2LCAweDQ5Y2Y4NGIzLCAweDFmYjdkZDEyLCAweDQ1ZjI3OWUxLCAweDJmNmU0NWM3LAotCTB4ZmM0ZTQ0ZGQsIDB4ZTNkNmUxMTYsIDB4MTA3YjFlZmUsIDB4NjQyN2RkZTMsIDB4ZjZiODljNmMsIDB4YWZiYzNhYzksCi0JMHgwMTIyOTNlMSwgMHg5M2VjMjAzMywgMHg1OGYyYzY2YiwgMHgyMjg3NzA3YywgMHg2NTljZjAyZiwgMHhlZjVmNjQ1ZSwKLQkweGQ3MDkyZjcxLCAweDVkYmUwZDkxLCAweDFjZWFiMGY0LCAweGQ1ZTVmZjY4LCAweDQ5ZjBmOThkLCAweDQxOWVmZjBiLAotCTB4ZmNiNGNmMmIsIDB4Njc5MjhmZjIsIDB4MGYwZWUzMTUsIDB4N2NhOWQ4MDksIDB4Y2Q0YmNiMTksIDB4ZTU2OGFlNWMsCi0JMHgxNGE3NTgxYiwgMHhlNGU1NWE4NywgMHhhNWMwYTJmNCwgMHg1ZmM1Nzc4NSwgMHgzZjMwNThiMywgMHhmNTE3N2UxYSwKLQkweDk0ZWZhMTViLCAweGY4YWNiZTUwLCAweDI2MGIyZTZiLCAweDUwZmVhMzdmLCAweDNmODYzNWIyLCAweGYwOTVmYTA0LAotCTB4MDdkNDI4MTUsIDB4ZmQ0MDhmZDEsIDB4ZGI0NmZkOGYsIDB4MDAyNWM5NWMsIDB4OTY2NzNhZDIsIDB4Mjc3MmU1MTUsCi0JMHg0MTZiN2ZlOCwgMHg2YTMxM2UyNCwgMHhlNTBlODM1NywgMHgzNzZmZDg0NSwgMHhjNTc3ZmRhOCwgMHg3MmIyYzk1ZiwKLQkweDc5NWEzMWJhLCAweGRkZmM5OGZkLCAweDVkZjNiYzRmLCAweDNjNGFmOGNhLCAweGYxODRiZWE0LCAweGI5MTI3M2VmLAotCTB4ODM5Y2E2ZmQsIDB4Mzk2N2ViNWMsIDB4OTMzZTNkZjgsIDB4ZDI2YmMzYmYsIDB4YzhmMGVmZjEsIDB4ZmNmNWM0YTcsCi0JMHg4M2ZkYzhkOCwgMHg1YzU1NzRiYywgMHgyOWJmMDlmMCwgMHg3OTJkZWYwNywgMHhmN2E0ZWZkMiwgMHg1M2E3ZjI5ZiwKLQkweDhiYmYyM2Y5LCAweDc5ZmM2N2NhLCAweDEzNWVmYzM5LCAweGM3YzhmZTQ2LCAweGQxOGQyYzg3LCAweGU0OWIwNGU3LAotCTB4YjA5M2NkYmMsIDB4ZDA2MmQ3ZGUsIDB4ZTU1NjIzZTEsIDB4ZjQ5N2EwM2MsIDB4ZDhkMmMyZGIsIDB4NTY3YmZkZjIsCi0JMHhlNGE1ZTEzZCwgMHhhMDg3ZmJmOSwgMHhjMWYxZjFkZCwgMHgwOTdkZDFlZiwgMHg4M2UyNmIxZiwgMHg2ZTZmMjUwYiwKLQkweDEzZjM3ZDJjLCAweGM5Mzc5Zjk5LCAweDMyYzdlNWZhLCAweGZkOTAwZDdmLCAweDllNzI5MDQ3LCAweDRmNzhkMWU2LAotCTB4ZmY3NzNmMzAsIDB4YzMxZGZjYWMsIDB4YTlhYmZkNGYsIDB4ZjNjYWQzYmMsIDB4OGZmNzY5MjMsIDB4ZjAwNzNiN2YsCi0JMHgzZjAzNmU3NSwgMHhhNGNlNzQ5ZiwgMHg2Y2YzYmYyMywgMHg4NWJjYWRhZCwgMHhmZDhlZjBlMCwgMHhkZTc2NTExZiwKLQkweGYxZGMzMjlkLCAweGZkNjM1NWQ2LCAweDA1N2U3MjZhLCAweGRlYTA3MmViLCAweDg3NmZkMzBhLCAweDVjM2UxZTNhLAotCTB4ZmE0MzJkZjQsIDB4Njk1ZDY2ZWIsIDB4ZTg0NmFmZDgsIDB4MjMxNWRkY2MsIDB4NzkyMDliOGYsIDB4ZmY4NGFjNmIsCi0JMHg1ZjI4MjE5ZSwgMHhlZDAyZmQ5NSwgMHhmZWZhMmEzMSwgMHhlNzJiMjI4YywgMHg3Y2UzOGZjYiwgMHhhNjVhYjZmZiwKLQkweGNmMjVkYmRiLCAweGZhOWUzZTZhLCAweDE5NWZjMzdlLCAweGYyYjQzZjNkLCAweGI0ZmZlNjc4LCAweDhjMDJmOWNhLAotCTB4Y2U0ODk0ZGYsIDB4ZGI5ZDdjNzAsIDB4ZDYzNWRlZGIsIDB4Nzg5OTcxMTgsIDB4OGUxNmJmN2UsIDB4OWU5YzZjNWIsCi0JMHhhNTAwZjFiNCwgMHhjZjAxZTI1NCwgMHg2NTA0NGRhMCwgMHg3MDQ5ZDVhNiwgMHgxODAzZTM2YiwgMHgwNzE1OGQyNywKLQkweDhmMmI0ZmY4LCAweDNjN2JhNjFmLCAweDlmMTVkNWEyLCAweGNlZjgyNzJmLCAweDZjOWI3ZGQwLCAweDdiZjNhMzM2LAotCTB4MGU5YjhhMDMsIDB4NjA2NDNjNjIsIDB4ZDkwZWIwNTksIDB4Y2I1MTNlYTUsIDB4YzYzMzAxYTcsIDB4YmE3Y2IyNDksCi0JMHhhNGRiY2MzNCwgMHhhMzNmMDI3NSwgMHg2YTk3ODFiZCwgMHhkNjlkMjJhNSwgMHg0ZjVkMjFkNiwgMHhmMTY4ZTlmMCwKLQkweDQxMmMzYTEzLCAweDU0ZTY3MTQxLCAweDY2MDI2NmU3LCAweDBiZmVlZjM5LCAweGRhODJmM2MyLCAweDFkYjcxOGI1LAotCTB4Nzk3ZmJjYjQsIDB4OWY3OTM2ZjcsIDB4ODRkOWJjOTUsIDB4YzNjMjA2ZWQsIDB4YTYzZmVkODQsIDB4ZWQ4NGQ2ZmMsCi0JMHgyODg1ZWI3NywgMHgzNTY5M2VmZSwgMHg4NzhiZmY1MCwgMHhmZjI1MGU5NywgMHhhYTM5Y2UzOCwgMHgyNmRjNzk0ZSwKLQkweGZjNDE3YmM0LCAweGFkYzcxMGYzLCAweDg4NzlmOGRmLCAweGI4YThkNmUzLCAweGFiOGFmNTRhLCAweDVhNzdjNzI0LAotCTB4MzlmOGZlYjksIDB4OWYwMTY5ZTYsIDB4ZTRhMDVmM2YsIDB4ZmUyOTFiNjksIDB4OWE2YTViYjYsIDB4NDA4ODc5ODYsCi0JMHg0M2NlOGViNSwgMHgwYmRjZjM4NiwgMHhmMDhmNzlmOCwgMHg4NmVmOThmYiwgMHhlMmFmM2ZlNywgMHhjMTgxZWVmOSwKLQkweGY2ZGYyOTY3LCAweDAzZTc5OTk5LCAweDY0NjFkYjNmLCAweGYyNWQyNzk4LCAweGVmZTUxMzc2LCAweGIxZDcyY2I2LAotCTB4YzM2NGY3NTgsIDB4OWNmOTA2NGMsIDB4ZWZjZjAxOGUsIDB4N2NhM2ZlZTAsIDB4MDgxZGY2NTMsIDB4MDhmZGMyNGIsCi0JMHhmOWI1YzNlNywgMHg4YmFlMTkzZiwgMHhlOTcyM2U3MiwgMHg0ODY5ZTZjZSwgMHg5M2NiMTkyNywgMHg1NjNmYmMwNCwKLQkweGVhZWJlYjgxLCAweGJmNTA2ZjkxLCAweGU1Zjc5NzVlLCAweDZmNTVmYTY2LCAweGI1NWZhMThiLCAweGUwZDNiNTdhLAotCTB4NmY1MmRhMzEsIDB4NjQxYjVmYWUsIDB4MmFiNWVhZmEsIDB4NzhlNDA2ZTcsIDB4NjI0N2U2MzcsIDB4ZDYzM2NiZWMsCi0JMHgzNGNlNzEzZSwgMHg3Mzg4NTdkYiwgMHgzMTQ5YWRmYSwgMHhmN2NhOWNlMywgMHg2YzQ5MGQ5ZSwgMHhmYzE4Y2NlZSwKLQkweDM3Y2M5OGYwLCAweDc0M2RjZGJhLCAweDRkYTUyMzBlLCAweDRhOTcyOTg4LCAweDE3Yzk0OTI0LCAweGM1NDViMDhkLAotCTB4MzVmMmI1YzcsIDB4ZDhkZDdlMDYsIDB4ZDBhZWM0N2YsIDB4M2UzNWVjMjEsIDB4NjY4YWM3MzEsIDB4OWM3M2UwMDAsCi0JMHhmMjcxOWYwYSwgMHg5NTMzYmYwYywgMHhlNGEyN2Q5MCwgMHhkNDlhMmUxNSwgMHg2Yzc3ZGJmNiwgMHg2ZGNmM2Y0YSwKLQkweGM0Yjc4ZmI4LCAweDZjNTNkYjkxLCAweDI5N2YwMjgyLCAweGM1NTk0YmY2LCAweDI1NzJmMTU0LCAweDFiNTI5ZTRlLAotCTB4YWZmYmYwMTAsIDB4M2YyMzBmMTQsIDB4YWZiMjY4NjIsIDB4N2FmZDAwY2UsIDB4MzZmNzMxMjYsIDB4ZTgzYzI3YTgsCi0JMHg5Nzc5NDEyYywgMHg4ODNlZTU1NCwgMHhjYmZhZGRhMSwgMHgwZmNhZjdmMiwgMHgzOTVlZmEzMywgMHg2NWY1ZWY5YywKLQkweDc4ODNiZDkxLCAweDRmMGVmZThmLCAweGZhY2EwZmQxLCAweDZiZGQ2ZjQwLCAweGIyY2Q3MGUzLCAweDdkNmY0MGRkLAotCTB4Y2YzMTdjODMsIDB4NThiZTNmZDYsIDB4Zjc2OTcwOGMsIDB4ODFlZjFiMmQsIDB4N2ZkOThkNGEsIDB4YjBmZWFjNDUsCi0JMHhkOWZkZDVjZiwgMHhiYzcyMGRlNywgMHhhNGY5YmZiZiwgMHhmNWYwYmQ0NiwgMHhmMTdkZTVlMiwgMHhiYzJjNDRmMiwKLQkweGU1ZDBhODZjLCAweDAwOTQ3OWUxLCAweGU5NjNiOGIzLCAweDdmYjYyZDlkLCAweDhiN2VkYzc4LCAweDllZGM0NjJkLAotCTB4ZmViZjI0ZGQsIDB4NDk3NzNmZTIsIDB4ZTI1NjBmMTgsIDB4NTA3YjYxY2YsIDB4OWU1NzU3OTMsIDB4ZjkwOWI3NTcsCi0JMHhiNDk1OTdlOCwgMHhiN2ZiMjM1ZiwgMHg2NGU3ZTBmYiwgMHg4ZmNkZjZmZiwgMHgwMjU3NzlmMywgMHhkYzdmMjI3OSwKLQkweGJmNmY5ZjI1LCAweGY3ZmI5NWJhLCAweGE0ZmQ3MzIyLCAweDM5YThlMDE4LCAweDY4NDE2MDZhLCAweDYwNmY4YWJmLAotCTB4ODgyMTE2ZmIsIDB4M2Q1ZjBiZjcsIDB4OGJlYTg1M2EsIDB4MTkyYzA5ZjcsIDB4ZTllMDI0MDksIDB4MTYwY2VmYzQsCi0JMHg0MjVlM2UzMCwgMHg4Zjc1NGU5MSwgMHg3ZDQ3YTI3NSwgMHg3OTcyNzg0ZiwgMHhlYTllYWE5MiwgMHgzZTEzZGY1NSwKLQkweGFhOTY3NjYwLCAweGE0NmZhMDdkLCAweGQ1NTA3ZGFhLCAweDk2ZmQ1NTc4LCAweGUxM2RmNTVhLCAweDQ1N2Y0MTQzLAotCTB4ZDMwMzMzZDcsIDB4ZDdiM2ZkNTUsIDB4MGZhYWFiZGYsIDB4MTNkZjUwNmIsIDB4Y2JhZGY4YWUsIDB4ZGYwY2Y1ZTQsCi0JMHgyZjdkNGYzMiwgMHg2MTA4NDg3NywgMHhiY2ExNjNiZSwgMHgzOGU0MGJkZCwgMHg1MmUwODhjNSwgMHhjNGNiMzhkNSwKLQkweGJiZjA0NzBkLCAweDU3ZGU5YjhhLCAweDc0NDhkYWQ0LCAweDY4YWZiZGFhLCAweDdkNzU0ZWQ5LCAweDQ2ZmI4OWVjLAotCTB4NWUwY2YzZjEsIDB4YzY3NTM3M2EsIDB4ZGM1ZjhlYTYsIDB4YzMwMzVmNzQsIDB4MWFiZWQ2YmYsIDB4NmFmYmQ1ZDMsCi0JMHg4ODZlNTk3NiwgMHg3YTllNmIzNywgMHg2ZjdjOTk5ZiwgMHg3NjZmMTY4YywgMHhiZmZmN2FiNywgMHhlZDE5YmM2OSwKLQkweDBjMTkzYzZhLCAweGUzMWQ4YjNlLCAweDQ0YWJhZDgwLCAweDVjYjJkZWZhLCAweDRiZWU0ZTdkLCAweGVkOTNkZGM0LAotCTB4Y2FlZWUyMzEsIDB4Y2YzNzZhYmQsIDB4MGRmZmI0YTcsIDB4ZDA0NjY0ZjMsIDB4MTczYzA2MzQsIDB4ODUzNmU0NTUsCi0JMHg0OGU2MjdmMywgMHhhZjJiNWQ5YywgMHg3NWU0MTI5NCwgMHgyYWYyOWQ4ZSwgMHg1YWQzYmM5MSwgMHhmZjIxZGY4NiwKLQkweDJiNzA4YmRlLCAweGY3NTg4OTc5LCAweDA1Y2U2ODgwLCAweGJlNzFjNjhlLCAweDRkMGFmZGVhLCAweGQyNDBlN2Y4LAotCTB4YWU3NmY5ODMsIDB4NTFlYzBiMDcsIDB4ODczOTUwN2EsIDB4NzhjMWU4YTIsIDB4ODk3OTI4ZTMsIDB4NDg3MGE1NzgsCi0JMHgwZjQ0YjhhNCwgMHhjODYyNTdlNiwgMHhiZmRiNmZmMSwgMHg3YmU5M2VhNiwgMHhmNmRiZjM4ZSwgMHhlMGJmMjg4MiwKLQkweDUwNDdiZGZiLCAweGVmZGUwMzllLCAweGVkZDlmNWM1LCAweDg4ODUyN2EwLCAweGQ1ODlmYzllLCAweGYzZDNmYzQxLAotCTB4M2MzODMxMWIsIDB4NDhiZTcyMzMsIDB4ZTE2ODlmYzksIDB4MGY3Y2Q2MmQsIDB4ODdiOWE2ZDksIDB4YjczYzdlYjQsCi0JMHhiOWRhZTYzYiwgMHhkZjJjM2Q1ZSwgMHhkNzIzNTE0MywgMHg3YTc2MzQ2YiwgMHg4ZmVlN2FjZCwgMHg2ZDE1YmRlMiwKLQkweDhkNWZmNjUxLCAweGU3ZmQ0ZWRkLCAweDEwNmE0YmU4LCAweGY3MGI0NmVlLCAweDgxMDVlYWFiLCAweGE2N2Q3OGY0LAotCTB4NmUzZWYzNDAsIDB4NzFmNmE1MmEsIDB4NWM2YTkyZjYsIDB4YWNiOTMwZjcsIDB4MmE1ZTU4YzEsIDB4ZWQ0NDNiZGQsCi0JMHg1ZWZiMTg5MiwgMHg2ZTc2NTU4MiwgMHg3ODk2Y2YyZiwgMHhkZGZkMmZmZiwgMHgwZWU2MGFkNCwgMHg5YmJlNDRhNSwKLQkweGQzYmU3MTYyLCAweDNkODNjNmQ3LCAweDE0MGVjZTc5LCAweDNiZjU1ZjhiLCAweDlhMWZjNDJhLCAweDNmMWQwYWRlLAotCTB4NDNlNzBmNjMsIDB4ZmFmOWZiZTgsIDB4NjZlN2FlY2MsIDB4MTA5ZWJlZTAsIDB4ZGIxZTc4ZGQsIDB4MWQ2MDJhNzUsCi0JMHg1N2M3ODI5YiwgMHhhMDIyNTZmMSwgMHg4ZDZjYWQ5MywgMHgwMzhiZWExOSwgMHgxOGY3OGEyZSwgMHg4ZmIyNWZjMCwKLQkweGNiZGRmMDhmLCAweGM3YzI0Y2Y2LCAweGQzMjE5Mzk4LCAweDc4OWY2ODU4LCAweGUzMTA3YmNhLCAweDU4YjNiOWMzLAotCTB4MDZlZDhhMTIsIDB4N2YwNTMwZDYsIDB4NTViMDI5MWYsIDB4NWFiMzFiY2UsIDB4MTlhYmZkZmEsIDB4ZThhNTJiMjUsCi0JMHg1YmE5NDA3MywgMHhlMmYzYTYxZiwgMHhmODc1NzljYSwgMHgyOGZjNDE2NywgMHg5ZTQ3ZGZmNywgMHg0MzM4ZjNmMywKLQkweGUzMmY2NTRkLCAweDk4ZTUyOTdlLCAweGM1NzhlYzYwLCAweGNjYmJmOTZjLCAweDVkZGVmNTg3LCAweDVhNjNkZmI4LAotCTB4YmRkZWU4YmEsIDB4NWIxYzhhYzUsIDB4OWRlZmEzYTAsIDB4ZTFmNzkzZWYsIDB4MGYzY2FkYmUsIDB4YmY1ZGFlY2MsCi0JMHhjZTQ2MTYyZSwgMHgwY2Y4YzFmZCwgMHgyY2YxNzNmOSwgMHhiM2JiZGQzYiwgMHhiZTkzMmRiOCwgMHg4MTVlNjY4YiwKLQkweDZkMzUxYmUyLCAweGJmNDk3YjZmLCAweDQ0ZTA5ODRjLCAweDAxZjNkMzdmLCAweDRiN2VmMDEzLCAweDAzOTcwMWM0LAotCTB4OTUyZWZiZWEsIDB4OTVlZmQzN2IsIDB4YTc3Y2E3ZDcsIDB4ODM3MmYyMGEsIDB4NzhiYmYwMTUsIDB4ODFhMWRkNmIsCi0JMHgyZjdiZGUzMCwgMHhhMThmYmEzMSwgMHhmMjQwYWNmMCwgMHgzNzE2ODk4MSwgMHhjYjg1ZWRkYSwgMHgwNWNmYmEwNCwKLQkweGJkZDFmNDBmLCAweDZkODYyMzE0LCAweDdlM2I4ZThiLCAweGI3OGJjYjJhLCAweGU1YTA3OGZlLCAweDljMjk3NDA0LAotCTB4MmE0OGY5NTIsIDB4ZmRhNzY4ZWMsIDB4NWRmYzU0YzIsIDB4OTVmZGMyYTgsIDB4YTMzODY0OGYsIDB4N2IyYTliZWEsCi0JMHhkZTExYmIwNywgMHg4MGNiNTMwYiwgMHhlNzYwZmU0ZSwgMHg4NWQ3NGNmMCwgMHhkOWJiZmNmNCwgMHg1NDNmY2E0ZSwKLQkweGQyMGYyNGQ4LCAweDlkMmQ4NTY5LCAweDgwYWUzN2VlLCAweGY0MDBiZGFkLCAweGRmYTNmZDM1LCAweDlmMmU1MWViLAotCTB4MDVmN2NiYjIsIDB4NWM1Y2IyZTQsIDB4NzdjM2IyNjcsIDB4MmFjY2Y4OWUsIDB4YWYxMDMzOWYsIDB4MGZiNjhkOGQsCi0JMHhlNTM5ZjRhMywgMHhhY2RiYmE0NywgMHhmOTU4Njk5NCwgMHgzZmU1MzY2NiwgMHhmYmI0Zjc5NSwgMHhkZjlmOWNmYSwKLQkweGYwZWM5ODczLCAweDU3ZmRjNzljLCAweGZhZGU4MWZhLCAweDkzZGRlYjFjLCAweDFkYjk3ZjNmLCAweGZjNTJiZGM2LAotCTB4MTcwODIxOTcsIDB4Njc3ZThmZTAsIDB4NGViZmI5NDEsIDB4Mjk2ZGM3MTksIDB4M2YyNzYyYjksIDB4M2Y3MTc5ODYsCi0JMHhmOWUzOTM2ZSwgMHhiYjZkOWQ5MywgMHhlYmI3ZGQ3MSwgMHgwZTUxNmI0MiwgMHhhOWZlZjliZSwgMHgyODY3MWM2NCwKLQkweDNlYjhlMDc4LCAweGY1ZDU3M2Y4LCAweDQ1NzBiZWU0LCAweGJmN2FiZWU0LCAweGY5ZjBhNzBiLCAweGVmMmJiZjBiLAotCTB4OGJjNzliOWIsIDB4NTAwZGY3YmIsIDB4MGVlZDhiYzUsIDB4YmZiODZmYmUsIDB4YzA5MzdmZDQsIDB4Y2ZkOWYxZWYsCi0JMHg5MzdjNTY0YiwgMHg5MDU1ZmVmNywgMHgwNTgyNGY3ZiwgMHhlNTc3ZTg0NCwgMHhjMDBmZGU0ZCwgMHg2NmE4N2YyMSwKLQkweDEzYTI3MGZmLCAweGIzY2I4MzlmLCAweDUxZTdhY2M5LCAweGI2ZTRlNzVjLCAweDg3ZWZhNzdmLCAweGYyNzkyYjI3LAotCTB4YjkzY2VhMGIsIDB4ZTJhNTlmMGYsIDB4ZjQzZDIzYjUsIDB4YjVmNzcwMWQsIDB4NjM3OTZmZGUsIDB4NDNhOTViZjAsCi0JMHhmYmYwZmJjOSwgMHg4MzdlYzNmMCwgMHhmODdlMWY3YywgMHhlYzUzNDJiYywgMHg3MTk3ZjBmYiwgMHg4OWYxMjBjYSwKLQkweGM1MmYwZmRmLCAweGUxMmZlMDNhLCAweGU5MDdmOWVmLCAweGMxNjZjMWZjLCAweGIwNGM3OThkLCAweGNmZWY1NDgzLAotCTB4ODdkZWQzYzgsIDB4ZjE3ZmVmY2YsIDB4ZTNkZjkzYzksIDB4YzkxZjMzZWUsIDB4MWUxOTRhZGYsIDB4NWRmZjFiNWYsCi0JMHhjZjNjMGU4MiwgMHhkZWVhNzgwMywgMHg1MTM3N2ZjMCwgMHg3NzdmY2Y3YiwgMHgwNWI3ZTczOSwgMHg0YmEwODVlYiwKLQkweDU1M2JmYmEwLCAweGQ2NjUwYmVkLCAweDY3NzYwODVlLCAweDNjZWM5MzI4LCAweDNkYzQ3N2NkLCAweDVjNWY2YzVlLAotCTB4MDQxYmVmY2MsIDB4ZGVkMzRmYmIsIDB4NzU0ZmUwYTAsIDB4Zjk2MWVjNGYsIDB4ZmUxNjcxZjcsIDB4ZjIzN2Q2NTgsCi0JMHg2NGYzMmZiZCwgMHg1OTBmMzFmOCwgMHhhZjU5MTY5MiwgMHhmOTE0N2ZhMiwgMHhlMTYwNTBiOSwgMHgxYWJlZTlmNywKLQkweGVkNDYzZWY5LCAweGJiOTVlN2ZhLCAweDM2ZjNjZjA5LCAweDc2MWM2ZTA4LCAweGQwNjdhZmYxLCAweDA3ODA1M2Y3LAotCTB4MmY5OTVlOTUsIDB4ODM3ZTczYWYsIDB4NmZmM2U3NDAsIDB4YjJhOThmNzYsIDB4ZWViODQ1ZWUsIDB4YWVmNmJlY2MsCi0JMHg1MDU4N2VmNiwgMHg1Zjg0MmU2ZiwgMHhjNmIxZjk5MCwgMHg0OWFmZTFjOCwgMHg4ODVmNzQ2NiwgMHhiYTI1ZWM5MCwKLQkweDEyNWRjNzgwLCAweGY4M2IwZjk0LCAweDBkZTEwYjM5LCAweGU2MjdjOTIzLCAweGYyOTM3YjA1LCAweGU0NGU2NTc0LAotCTB4ODUwNTgxNDMsIDB4Y2ZmYWEzZWIsIDB4MzBmYmUxYWYsIDB4Zjg0MmU3YzIsIDB4MTJjOThlZmIsIDB4Yzc0Y2RiZjksCi0JMHhjYTNiNmRmZCwgMHhkMjIzZDAxZCwgMHg0ZTEwZGFjOSwgMHhmMmIxMjZiNywgMHg2N2JjMDczMSwgMHgyMGYwNmFlYSwKLQkweDM0MmU1OGNiLCAweDJjZGNiMDg1LCAweDNlN2JiYmM3LCAweGFmZmMxMTM0LCAweDg0NmNiZTBiLCAweDJhMThhMjdmLAotCTB4ZTc5YWY5MjcsIDB4ZWU5MzM0MWIsIDB4Y2FmOWUzYWYsIDB4MTY3ZjMyOGQsIDB4YWVmYTA2YjEsIDB4YTI2YjMyNjAsCi0JMHg1Mjc1OThiMiwgMHhhMWViMDc3OSwgMHhhYzVmODNkMiwgMHhlMDNkYTM2NCwgMHg3OThjYjJhNiwgMHg2YWNhOWNhOSwKLQkweDBkNjcyY2E5LCAweDcxMmI3ZTU0LCAweGMwMDI2MjVlLCAweDUxMzU5ZDM1LCAweDM5ZTQwMmJkLCAweDMyODkwYmRkLAotCTB4Zjc0ZGUzMTksIDB4ZWVjZWM4OWEsIDB4YWMxY2QzN2UsIDB4MGU2YWY4MDAsIDB4MzhiY2I5MTgsIDB4NTc3ZDI1NjAsCi0JMHgwODQ2NjA3MywgMHgxZmRkZjllMywgMHg3YmY4NWNkOSwgMHhhN2IxNzZhMCwgMHhiZjQ4ZTI5YSwgMHhmN2Y5M2FiNiwKLQkweGJkZDUyZTM0LCAweDJiYjkzNWRjLCAweDc4ZTNmNzdiLCAweDdjN2Y0MjFmLCAweGJhYWQ5ZTkwLCAweGFmZTI3YmE3LAotCTB4N2E4ZjkwN2YsIDB4ZTFhZGUyNjAsIDB4ZTgxY2YyN2IsIDB4Y2I2ZDVmY2YsIDB4Y2FmZTNmMjYsIDB4OTQ0NmRkNDAsCi0JMHg1MjE5ZDVkMywgMHg3YWI3ZTIzZCwgMHg5NWVlODU5OCwgMHgwNWQzY2VlOSwgMHg0MTViMjgyNCwgMHhlOWZkZTNmZSwKLQkweDA1ZWZlMDZmLCAweGZmMjZkOTQwLCAweGY5MDFjMDVlLCAweGRlMTBmNTdlLCAweGRhYjYwZWFmLCAweDk1MWU3ZjIxLAotCTB4OTUzNzdlMWQsIDB4NTQ0NWZjNDcsIDB4YTg3YmY1MWUsIDB4Mzk3ZjMxZGYsIDB4NWVmZGM3OTUsIDB4OWQxZWFmMmEsCi0JMHg3N2M3ZGY0ZiwgMHg4MzllOWZhNywgMHhjODc0MjdiZiwgMHgxOWE0Zjk1MSwgMHhiMjhmZTFmNCwgMHg0NGZjMmU3YywKLQkweGZkZjRlYjA4LCAweDQ1YWVjMGM4LCAweGQ1MDhmZGY4LCAweGQ3ZDY3ZjQxLCAweGQxOWRkMmY5LCAweDU1NTM1MmVkLAotCTB4OTJlYTFkYjgsIDB4NzAwOGZkZmMsIDB4NjI5ZTkzZDIsIDB4ZWE0NTI3YTgsIDB4MTE4ZGZkZjgsIDB4YmMxOTljZTMsCi0JMHg1N2YzMDY1ZSwgMHhmYjUyMjBiZiwgMHgzMDNmNzgxMSwgMHhjNzJiZDYxOCwgMHgyZTA5NGNhMywgMHgwMzQ2MWYyZSwKLQkweDc0ZTE4Y2JkLCAweDdjNjVkZjgzLCAweGVhOTlkNWQ4LCAweDY5NzYyMzEwLCAweDRlNWMxM2U1LCAweGVkYzBiZTU0LAotCTB4ZWM2N2NhY2UsIDB4OWVlZWY3ZjIsIDB4ZWYwZDIxMzIsIDB4ODljYjUxMWQsIDB4Zjk0YzQ1ZjksIDB4YmRlZDEzZmQsCi0JMHhlYTJjNDVhNSwgMHg4M2I5OTgzZSwgMHhlNjBmMjQ3NSwgMHhkM2Y3NTZhZSwgMHg0Y2U4MDdjYSwgMHg5NWFhZDNiZiwKLQkweDY0M2ExZjBiLCAweDhkOTczM2ZiLCAweDk3ZmFlZmMxLCAweDFkOTNiMWNmLCAweGE3NmVjOTc2LCAweDc2M2Y3YTczLAotCTB4MDE2NGE0NzUsIDB4NDRmYmQ1YmMsIDB4MGFiNDEzY2EsIDB4YjViMDc2NDAsIDB4ZWFiOGRlN2YsIDB4Y2VkMDEzNmUsCi0JMHhkN2E3MTU5ZCwgMHhiZWIxYjhhNiwgMHhhZWZjNDlmYSwgMHg0ZmYzNTJlMiwgMHgyMzNhYTRhNywgMHhmNGVjNTlmNSwKLQkweGRkYTAwN2M2LCAweGRkZjU2ZWI5LCAweDJmZmFjMGY3LCAweGI4YzBiZDIzLCAweGZjMGQ1Yjk3LCAweDEyOTM5YjFlLAotCTB4ZGVkMzJlZmQsIDB4MGIyMWFmNGMsIDB4NzYzZjdiZWEsIDB4YTZmZjNjMzMsIDB4OTliYmY1ZTAsIDB4YmRkYmZiZmMsCi0JMHgyYjQxYmU5OSwgMHhhN2RlYWI0NywgMHgxYWZkNjFkZiwgMHg2YmYxMzNlZiwgMHgwMGRjMmZiZSwgMHg4YTdiZWQ3ZSwKLQkweDdlZmJkYjVjLCAweGE3N2YwZGVlLCAweDZkZWFkOTc2LCAweGNlYTI3MjQzLCAweDM3ZDMyYzE1LCAweDY1ODI3OWQxLAotCTB4OTIxZTVmYWIsIDB4YTVjZGY2MDMsIDB4ZTg4ZDk2ZTIsIDB4NzgzNWVmNzcsIDB4Zjk0MmVmMTIsIDB4NzFlMDZjZDUsCi0JMHhlYzkwNDM2NiwgMHg4OWFmNGY4MCwgMHgwMjQ2NmYzNCwgMHgwNjA5ZmJkNywgMHg3YzI0OWY2ZSwgMHgzZDQ0NmE2OCwKLQkweDEzODJmNjAzLCAweDZiZGNhZmJmLCAweGE0MzlmMGU2LCAweGMxMTI1NzJlLCAweGMyYzNlYmM5LCAweDg2ZjFmMWVmLAotCTB4ZjdiOTcwMjUsIDB4YjI1ZWI1ZTksIDB4ZDc2ZTdiYTcsIDB4ODA4MmVmZDMsIDB4YzRmYWEwN2MsIDB4Njg4NDUyM2IsCi0JMHgyMjZmNjdiYiwgMHg4YWYzZGU3ZiwgMHhjYzUyZmQ0OCwgMHhmMWU4YzQ5ZSwgMHgyZjFkZWJiNSwgMHhkY2Q3YjdjZiwKLQkweGM1M2YxYWEzLCAweGQ2NTNkZmMwLCAweGUzNmY5ZGEzLCAweDlkZTUxMzI0LCAweDQ5NmUyODllLCAweGIyZWJmY2MzLAotCTB4MjA3YmZlMTIsIDB4OGFiYzMyNDUsIDB4YTNmMTM1N2QsIDB4ZTFhM2RiYTksIDB4ZWVmZjI4OWIsIDB4MjZlNGNlYjAsCi0JMHg1NTcwNzlmYSwgMHg3ZGZhMzhlMiwgMHhlMjk3YTc0MiwgMHhlNzFlNzNmYiwgMHgzOGYyNjlmNSwgMHhlMDhlNDUyMCwKLQkweGRjYjllNzcyLCAweGYyMGNkMTUzLCAweDI4NjU3YzM5LCAweDc5ZTQxN2I3LCAweDhhZmQ2MDhmLCAweGY1MTBhN2ExLAotCTB4MjRhYWI4ODYsIDB4MzNkZTAwMzAsIDB4OWY0OTVlM2MsIDB4ZDVkNzE5ZjcsIDB4NmYzNGIwMDUsIDB4ZTEwMzY0NjgsCi0JMHhjZGNkYzJmOSwgMHhhMTNkZjcwYywgMHg4YTE3NmNmOSwgMHhlZmU2OTQ5OSwgMHhhZjZkN2M1MywgMHhkODEzYTY0MSwKLQkweGZlNTE5OThmLCAweGE5NjczNmQ3LCAweGQ3ZTYwMTM3LCAweDM5MWRiOTM5LCAweDQyNDVhYzdkLCAweDQ2N2E2MDdiLAotCTB4ZjVmOWQ5MDYsIDB4Y2MxY2MxYTUsIDB4MzA4Y2Y3MGYsIDB4M2E2MjdjNTMsIDB4OWY4MDI1OGMsIDB4YzU4ODZjNzIsCi0JMHhkNDEyZmU4MywgMHhjZjU4ODkzZCwgMHhhN2ZkNGM5OCwgMHg4NjU5MWQ4ZiwgMHhjNjU4Zjg3YSwgMHhiNzhjNzRmNywKLQkweDllMmJjN2FmLCAweDVmYzA2NThlLCAweGMyMWZkYTBlLCAweDg5NjljZjU3LCAweDk2M2VhZmJlLCAweGY5MmE3NGIxLAotCTB4YmQzODIzMTUsIDB4NmM3OGNiMWYsIDB4ZDIyYmY2MmEsIDB4YzJjYmVlMDUsIDB4ZjI4OWExNzYsIDB4NzAyNzhmYWUsCi0JMHgwYzVkM2YzZCwgMHgwOWVmYzcxZCwgMHhjZWY4MTllZiwgMHg1NjZmZjQ3MSwgMHhjNzdlYzgyNiwgMHg2MjJiOTAxOCwKLQkweDVjOTgxZmM0LCAweDlmOGVkY2Q0LCAweGRlN2IxNWNiLCAweGVhZWE4MjllLCAweGI3M2ZmMjhlLCAweDI2ZjFlOTYzLAotCTB4MmY3YWExOTYsIDB4MDNhZTNkOWQsIDB4Y2NkZjMyY2IsIDB4ZTg3MzEwMzIsIDB4Zjg4ZTNjYWYsIDB4NzBmNTVhOWUsCi0JMHgwMWZmZDYwNywgMHg4OGUzY2FmZSwgMHg1NWM5OTJlNywgMHg5ZjM3ZmJmNCwgMHhhM2U1ZGZkZCwgMHg3MDI0ZTkzYywKLQkweDdkYzQ2M2Q0LCAweDRiMDlmNjIyLCAweDc4MWFmN2UyLCAweDQ4NWY1MDkyLCAweGRmN2RiODZiLCAweDdiMjQ0ZmIzLAotCTB4Mzk3NTE1ODIsIDB4ZWE2ZTVjNzQsIDB4MzNhYWZlOTAsIDB4OWU5MGQyYmIsIDB4MzhmMjA3ZWIsIDB4OTc2NzE1Y2IsCi0JMHhmZGYyZWE4MywgMHhmMzIyZmYwMiwgMHg1NzYyNDU0MSwgMHhjNTYxZDIxYSwgMHg5ZTAyNjFiZSwgMHhlMWUyYmQzYiwKLQkweDU2YTA0YTc2LCAweDMwNjFlN2U0LCAweGZmMjY5NGNiLCAweGQ1MTY3OGVlLCAweDkzZmNlZWM5LCAweGZjZjVlYmMwLAotCTB4ZjNkNjc2ZWUsIDB4MjNlZDIzN2QsIDB4MmYxMGNmOGMsIDB4ZTMwZjBmM2QsIDB4ZWFiZTAxNzAsIDB4YjkyZjVlZjEsCi0JMHhiOTgzYzMzZiwgMHg1MmFiZjc0OCwgMHg4N2YyMWVlOSwgMHhmYzI0YTcyYywgMHhlMzMwMjQ2OSwgMHhhZTNlNTBkMiwKLQkweGUyNzZjYTY4LCAweGVmMDZjZGYzLCAweDE1ZjcxYTRjLCAweDk2ZTM4OWMxLCAweDNjOTY2Y2VmLCAweDJhNGZkMjM2LAotCTB4OTBmNDFlM2IsIDB4N2JhN2VlZDYsIDB4M2UzMmU2ODcsIDB4ZDEyNmRjZGYsIDB4OWFiYTA2NjMsIDB4MDNmY2QyZGIsCi0JMHhlZWNkMmU4MSwgMHg4ZmY3YzgzMiwgMHg0ZDZiZGVhOSwgMHhmYTlmNzRlMCwgMHg0ZmJhNjZjYiwgMHg4N2NlMTk3NiwKLQkweGVlODFhYjY1LCAweGFiMzY1ZDk1LCAweGYxNDQzMjQ1LCAweDNkZDZiMmNiLCAweDU3N2NhZmQ0LCAweGNiYzVlNTMzLAotCTB4MmY2NGVjZjMsIDB4ZWIwZDYzNGYsIDB4ZGYyZDVmMjgsIDB4NTNlM2U0NTcsIDB4YzlhZGQzYjAsIDB4NjUwMDNmY2YsCi0JMHhiZTM5OWZjNSwgMHgzZWZjNTNkOCwgMHgwZjgzZjliNSwgMHhiYjJmOTFkOSwgMHhmYzUzOTYwYSwgMHg5NDIxNDNlNywKLQkweGY4YmQwMDFhLCAweDBlZTc2NjUwLCAweGM5MmUxZmY0LCAweDBmZDY4ZWY2LCAweDBiMWRmYWQxLCAweGEyYTczMzVjLAotCTB4ZGZkN2QxNDksIDB4MzhlOGI2NjAsIDB4YjAzZjE2OGEsIDB4ZGVmMTFiMWQsIDB4YTI0ZDQ1YTMsIDB4ZDEzMWVmMTMsCi0JMHhmZTBhMjNmYSwgMHg5NTNmNzhiNCwgMHhjN2RiMjI5MCwgMHgzZjcwNjMyMCwgMHgyMGVjYTY5YiwgMHhmYTcxOTMzZiwKLQkweGQ2MDE3YjIwLCAweDk4N2RjOTcxLCAweGQzOWFiM2VlLCAweDYyNzllZmM0LCAweDhhMTRhMTNkLCAweGIzZjA2YjAzLAotCTB4OGNkYTFmNDEsIDB4ZDYwNTQ5ZjcsIDB4MDJmZWU4MTksIDB4NWMwMmZlMWYsIDB4OGRmZGFjNTIsIDB4ZWM0YTI3YmEsCi0JMHhlYjJkM2Y1YiwgMHg1YmNmM2VjYiwgMHg3YTc3NWZiOSwgMHgxYjlmMjhiZCwgMHhkYmNmYjc1MSwgMHhiMzI0N2Y5NywKLQkweDI2ZmJlMzFmLCAweGVlZDI3ZGYwLCAweGNmZDAwMmM3LCAweGRmODIxN2U0LCAweGFmYTk3Mjg3LCAweGRmYTVlODVmLAotCTB4ZmVkOWI4ODMsIDB4ZGZmZmY4MjgsIDB4YzdhOTBhMjksIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCi0JMHg3ZGVkZmYwMCwgMHhjNTU0NzgwYiwgMHgzZDljZjBkOSwgMHhjZDhkY2Q3YiwgMHgwOWMyNDZmZCwgMHhiODA5NDQwNCwKLQkweDlmYjFkYzI0LCAweDRhMzQwMjFiLCAweDQxNDA0NWQwLCAweDJkYzhkODEyLCAweDA4OGQ5MjQyLCAweDU5YjZiNjk2LAotCTB4NWE0MDYyZTQsIDB4N2RhNWFhYzEsIDB4MmMxNDJlYTgsIDB4MTFhMGQwNWEsIDB4ODZlYzVkNDMsIDB4YmE4YjQ1MDgsCi0JMHg4YWQ0NWNiMSwgMHgxNDE3ODAyNiwgMHhiMTZkMDA0MiwgMHhmYmRmYWQxZiwgMHhiYjI3MzNiZSwgMHg2YTIzNjRlNywKLQkweGZmZWZlZmQ1LCAweDI3YTNjYmZmLCAweDljY2NjZTczLCAweDk5N2VmNzk5LCAweDYzMThjMzk5LCAweGIxN2ZjMzlmLAotCTB4NTBkZmY4NzYsIDB4MjYxZDhhYzYsIDB4ZDhjMjFiMjcsIDB4NGZhYjU2OWMsIDB4OGE2YzYxYzksIDB4ZWY3NDY3NmIsCi0JMHhhNzljYzYyNCwgMHgxODU2NGMwZCwgMHhlZGZkMmU2YiwgMHhkNTQzMjYyZiwgMHg4YWQ3OWIyNCwgMHhjYjc2OTNmNywKLQkweGNkOTQyZjBlLCAweDNiNThlZWYxLCAweGRhZjRiN2I0LCAweGQ1ZjZjNDY4LCAweDUxMmM0OTBmLCAweDY3MjRhYzYyLAotCTB4NjE4YjEyNmYsIDB4OWIwZTU3NmMsIDB4Nzc4M2NhZTUsIDB4ZDBkYWVmZTEsIDB4OTUwZWQxMzUsIDB4NmNkYjE5OTIsCi0JMHhmYjYyMjU3NywgMHgxYjMyZGVlNywgMHgxZWM2MGY1OCwgMHg4N2Y1ZTc4YywgMHhlM2RiOTliZCwgMHhmZDUwOThiNiwKLQkweDY4N2Y1ODQxLCAweGQ1YjIzY2E4LCAweDQ2N2Y1OGMwLCAweGU4Yzc5YzNmLCAweGIzMThhMzBmLCAweGViZGZjYTg2LAotCTB4YWY5NGQwNDgsIDB4YTlhMTk4YmQsIDB4NjhmYWM4NWYsIDB4MDc1OTE3OWUsIDB4YjM4ZjllNjgsIDB4ZGZjYTY4MTcsCi0JMHhhOWFkMWI0ZiwgMHhhNDUyOWQ3ZiwgMHgzZmU4NGYyOSwgMHhhMjdmNTM0MSwgMHhiY2E2YjI2MywgMHhlYjhhYzhkNiwKLQkweDYzNjc1ZTYxLCAweDhmNGI1ZThjLCAweGQ4NDYzY2QwLCAweGI3ODcwNDBkLCAweDQ3ODcwMmQzLCAweDY4M2I1ODRiLAotCTB4ODU3NmM1NzIsIDB4YTk4ZDU5NTcsIDB4N2RlYzM1YTMsIDB4OWMzOGRhMGYsIDB4ODE5YzVkNTgsIDB4NGVlYzYzMGQsCi0JMHhmZmE4OTlmNSwgMHg1OGRmMDE0MywgMHg3YmUwZDU5OSwgMHhkZDQ2YTMwMywgMHhiNWJjMDQ2ZiwgMHgxNjBkOTQxZiwKLQkweDQyZjMyZmMwLCAweGNlYzYxNGJiLCAweDFhMTc3NjhiLCAweGJlMjA3YTBiLCAweDdmN2UwMWQ4LCAweGRmZGY4ZDkxLAotCTB4ZGVkMWYwMjUsIDB4YzMzNWUwZGYsIDB4ODE2YjViYjgsIDB4ZGU4NWZhMjYsIDB4NjYwYzU2ZTMsIDB4ZGQ3ZTE4NDMsCi0JMHg4MjU5YjI4ZCwgMHg3MzAzNzBmMiwgMHgxN2RkN2JlMywgMHgxMDU5Y2NjZCwgMHg1MTYzMDcxYSwgMHhkZTc2YmRmYywKLQkweGU2NGUzYWJmLCAweDhkZWZlNjhjLCAweGFlZGZmN2U3LCAweGVjNjJlMjQ1LCAweDVkMmI1YTlkLCAweDgyY2YwZTdmLAotCTB4YzA2MzNlMzgsIDB4NjkxZmEwY2MsIDB4MzRmOGNjNzQsIDB4MDZmNmI3YTAsIDB4ZmEwMTZlYzksIDB4MzY2YzZjYWMsCi0JMHhlZDE3ZjhlMywgMHgzMTY1NDljYywgMHg1ZWE3ZTE1ZCwgMHgzMWE2ZDc4ZiwgMHg1YWFiZmEwNSwgMHhkNTJhYjJkYywKLQkweDFmNmVmNDAxLCAweDY4MmJmNzUyLCAweGUzMDM1NTVmLCAweGIxYTkxMjAwLCAweDk2NWJhYjBmLCAweGJiNjJkOGNiLAotCTB4NjcxNmY0NDIsIDB4N2Y0M2Y5ODEsIDB4YmZmNGZlZWYsIDB4ZjAwNzNjY2YsIDB4ZDRiM2ZlM2IsIDB4ZmQwN2U0N2MsCi0JMHhmZmI1NTlmMywgMHgxN2U4ZjRmYywgMHgyN2Y3N2YzYywgMHg4M2Y2M2Y3ZiwgMHhkM2ZmNmEyZiwgMHg2NWZiZGVjZiwKLQkweGM2ZWVmM2Q4LCAweDkzMmViYjNmLCAweDMwNzQ2MTI5LCAweGFjZTFjY2NjLCAweGU5MGNiN2FmLCAweDNiM2ZmYTBhLAotCTB4MzU4ZjFmZWEsIDB4YjI0OTdmNDMsIDB4ZTAxZDk5N2IsIDB4MjdjZDdlZGMsIDB4YzUxZTBjZDksIDB4Y2MzNGJmMGUsCi0JMHgzN2UyMTMxZCwgMHgwOTVmZmI3ZCwgMHhiMWJjMDM3ZSwgMHhmYjMzODAxOCwgMHgxNWI3Y2Q4MSwgMHgwZGRmMDZlOSwKLQkweDkyNGI2M2U1LCAweDVlOTA2YjdkLCAweDY2OWFjMTVkLCAweDk1YjFmNzE4LCAweGUwNmIxYzdkLCAweDBlYzdlNTNkLAotCTB4ODZmNzMzOGUsIDB4MmYzY2IxZjIsIDB4MjRjYmZiYzMsIDB4MmNmYjgzMDcsIDB4M2E0NDZhY2QsIDB4NTcwMzg5OWQsCi0JMHgyYjJlZjg2OCwgMHhkMzE2NzRlMCwgMHhmOWQwMmRkMiwgMHg3YzYxYWRmYiwgMHhiNmE5NmIzMywgMHg5NmQ1ZWU1YywKLQkweDYxZmNlMzg3LCAweGQ4OTljZjFlLCAweGJjMzBmYWI0LCAweGVmZmNjNGZiLCAweDA0N2MyZjg5LCAweGNlM2I4YmU1LAotCTB4NTM3NmU1NGUsIDB4ZmFjODVkYzcsIDB4YmZiNGY1OGMsIDB4ODFmYTJkMWYsIDB4MzIwMDhlMzksIDB4YjdiMmYxYzUsCi0JMHg5ZmNmMzRhYywgMHhmODkxODNlMSwgMHhmMjI2NmYzZiwgMHg0ZjgyZGJlMywgMHhkNmM0YzRjZiwgMHg2NzA3YzA0OSwKLQkweDZmMDcwZTE0LCAweGQyZTFjYzhkLCAweGVkMDU2MDEzLCAweDZlMjc3N2FiLCAweGRmYzBiODIyLCAweGIzZWU1NDUxLAotCTB4YTRjN2NiMTksIDB4ZGUxN2IyNDAsIDB4ZmIwNzI2NWIsIDB4MjhjZmZiZTIsIDB4MWQ2MzBmYWQsIDB4NDY2OGUyZWYsCi0JMHg1M2I0OTFlZCwgMHgxMGZhN2MwNCwgMHgzMGYzMTQ4YywgMHhlNzgwMWYwMSwgMHg2OWQ5NDZjYywgMHhmMWYwNDQxYiwKLQkweDI5YTNlMGVhLCAweGE4ZDBmZThmLCAweDQzYWY3ZjI5LCAweGEyZjZiZTViLCAweGI0Yzg1Y2I2LCAweGRhYWM4YmVkLAotCTB4OGUwMmNiZjIsIDB4ZmJkYWVjZTMsIDB4OTZkMzRmZGYsIDB4MWUzYTU1ZGYsIDB4MWQ4YmYyZTIsIDB4ZjNjMzBkY2EsCi0JMHgyNTk1MjFjYywgMHhjZmUwMGUyYywgMHgxNzljNjZlYywgMHhiODY0Zjc4YywgMHhjMTFlMmIxYywgMHgzYWRiNzhlMSwKLQkweDIxY2JlN2M5LCAweDVmOWU2YWZjLCAweGVjYWIxY2M3LCAweGRhZjc0ODc5LCAweDQxOGJmMGZiLCAweGU4MmI5YTdhLAotCTB4ZWQzYWVlNjcsIDB4MTlkZmViZjMsIDB4YmMwMTllMzUsIDB4ZTMyNWQ4NGUsIDB4MjA3Zjc4ZmIsIDB4NGU3ODg4MWIsCi0JMHg0MTlmNzM4YywgMHhjNzQ0ZjAzZSwgMHhjMzdkNDIwZCwgMHg0NmI5ZWRlNCwgMHhhYmQ5ZmY3OCwgMHhlMzk5MGU2YywKLQkweDNiMjFjYjgxLCAweDM5MzhmZjFmLCAweGU3YzAxMWM2LCAweDA1ODc2OGZlLCAweGQzZGEyZDZlLCAweDhmZTUxNTI3LAotCTB4MzdjZjVlZGEsIDB4NTJkYzgwMGYsIDB4OWM3YmUxZmEsIDB4OTlhZjQ4NjcsIDB4MjVkMjA1NTksIDB4MjhmYTAyMWIsCi0JMHhlNGMyYzgxZCwgMHhmNjg3OGY4YywgMHhjZWI3MWRjZiwgMHgzYmUwNDc3MiwgMHhlZjk1NWNlMCwgMHg3N2M4MjU5YywKLQkweDM1ZjRlNjNmLCAweDFlYzhjZGE2LCAweDM1MmM3MWM3LCAweDljMjBiMjZkLCAweDhmYzQyN2ViLCAweGI5OTlmYTAzLAotCTB4NWI5ZGYzOGMsIDB4MzA2NGFjMGEsIDB4NjQ3Yjk5YmYsIDB4MjVjY2U3ODIsIDB4NDQ0OThmOTIsIDB4ZjQzNWU3MmYsCi0JMHhiZWEwZjAyMiwgMHg1ZTcxZjAwZiwgMHgzMjlhNWZjNywgMHhmZGQxMjg1MCwgMHhlY2M2MjY4MywgMHg2NzhlYmVmMCwKLQkweDE0NjZkZjI1LCAweDY0OGQ1M2Q5LCAweGJiNmQ1NDJmLCAweDMzNzA0N2MyLCAweGVmMTExN2IyLCAweDJhOGY4MTZlLAotCTB4YTgxZTIzMjMsIDB4MDY1OGZlMDQsIDB4NGJkNGU3ZjUsIDB4MTc4ZmFlMzQsIDB4YTgwNjdjNWIsIDB4MjYxZGI1NWYsCi0JMHhhZTNmY2YwOCwgMHgyODI0ZjkzMSwgMHgzMzI4ZGM3ZiwgMHhiZWIxMGZjZSwgMHg3ZGI1NTBiZSwgMHg3YzJmMmYzYiwKLQkweGY4MmQ5NmZjLCAweGZmM2M1ZGJjLCAweDJkYjhmYjc4LCAweGEyYjViZWY4LCAweDkwNjJlZjdmLCAweDZkZGY1MDRiLAotCTB4M2U2YjU2NjQsIDB4MDI1OWI3NWMsIDB4NjNiN2EwNzYsIDB4NDc1N2Y2NTEsIDB4ZThlZDNkMjEsIDB4M2UwY2YwZjMsCi0JMHhjNjE4YzUyNCwgMHhhYjU5Yzc0ZiwgMHg4NWQwZTEwOSwgMHg5ZjAzYjY5ZiwgMHgyYmU1NzVjNSwgMHhhMGYxZDIzNywKLQkweDUwYjlmNGFlLCAweDgzOTAzOWFhLCAweDkyNjdlMzcyLCAweDk1ZDJhYjYzLCAweGE5NzRmNTRlLCAweGMxN2NlZGQyLAotCTB4ZDliM2QwMWYsIDB4MWJjYTEwMzUsIDB4MWQzOGY1ZjQsIDB4MWZkNjM1YWMsIDB4YjllNzE1YjksIDB4M2JmZWE2NDIsCi0JMHhiNzEwMDllNywgMHhkYzJkNDkwMiwgMHgyOGM4ZjdkMSwgMHhkYWJlNWU3OCwgMHgzMmVmZTg4NCwgMHgzM2YzYWVjZiwKLQkweDZjZTZmY2QxLCAweDY3MzI3NGU3LCAweGE0NTNlNGE5LCAweGNmZDVmM2FlLCAweDk4YmNjYmIzLCAweGE2M2Q5NTZiLAotCTB4Y2ViYWZjZWIsIDB4MjE4ZmQzODMsIDB4ZjExMDQ4NzYsIDB4YTJkMWJlNzUsIDB4OWRkMWZkYTAsIDB4YWI1ZDNiN2UsCi0JMHhmZjQxMWI2NCwgMHg2NzVhZGJiNiwgMHgyMzhjMDczMiwgMHgyNTc1YmI3ZSwgMHg5MDc2ODhjOCwgMHgxNzlmYThjMSwKLQkweGVjNWRkZmFjLCAweDJkMzliZTA1LCAweDRhNmY3OTcxLCAweGY5NTg3NGU2LCAweDU5MjZlYTc0LCAweDY5NTNmNTBhLAotCTB4NDA3M2Y0MGUsIDB4MTVlM2JiYmQsIDB4ODFhNTYzODIsIDB4YzFmYTA5ZWIsIDB4NGUwZjRlMzgsIDB4YzYwNmJjZDgsCi0JMHg4NTZkZTYwMSwgMHgzMjY3OWZhNiwgMHhlMzYxYzkzNywgMHg4NjA0YjRhYiwgMHgzYjQxZmE2OSwgMHg3YzlmYmMyNiwKLQkweDFjMTljZmRlLCAweDlmYTg1ZTRmLCAweGYxZGE1ZGFhLCAweDlhODM5OTU0LCAweGZiMDk1NGYxLCAweDBjZTdlZDQ4LAotCTB4OWZlYTA3OGUsIDB4Zjc4NGYxYzEsIDB4M2M3NjljZjMsIDB4NjZhMDk2NTUsIDB4NzY5ZDU1M2MsIDB4OWYyN2U4OTUsCi0JMHhhZTU1ZDNmNywgMHg3M2Y2MzRmOCwgMHhiNjRlN2Q1NSwgMHgyYjRmMGMzMSwgMHhmYjE2MzFhZiwgMHgwZjRkZDgyMiwKLQkweGJmZjk3M2M0LCAweDdlY2Q5YjcwLCAweDU1N2VhYzMyLCAweGVjYTZiYzdkLCAweDlmYjc0YzY5LCAweDg1OWZhMzBjLAotCTB4M2JjODA3ZjgsIDB4MDMyNDE4YjYsIDB4MzE0YWQzYzgsIDB4ZmJiMjkxYzQsIDB4YTNkNDc4ODEsIDB4MDExZmFmNDksCi0JMHg1YjU1OWEwYiwgMHhhNzQ4Y2MzYiwgMHhmY2ZhNWQ4YywgMHg4NjU4NjFmMywgMHhjZjFjNjUzZiwgMHgzODQ1MDM5NCwKLQkweDFkOTM0NjlmLCAweGYwMGNmZDU5LCAweDcxZTAxN2JmLCAweGY1ZjA2MWM2LCAweDdmZGRmOTg2LCAweDExOWI4M2U5LAotCTB4NGRiYjMxM2UsIDB4Nzk0MGY3MDksIDB4YWI0NWUzYWQsIDB4ZGI1ZmUzMDIsIDB4ZTVmNjJhNjgsIDB4NjdkZGRlYTEsCi0JMHg1ZjI2MWQ5ZCwgMHhmZGI5M2FkNywgMHhlYjAxOWNjZCwgMHhmYmExODFlNCwgMHg4ZjVmODMzMSwgMHgwY2YxN2I0MywKLQkweDVlMjMxNmIzLCAweGQ2MDMxYWQ3LCAweDU4NzA2MWMxLCAweDNlYWEyYTBiLCAweGM1NzY1YzAyLCAweDVmZDc0NGNiLAotCTB4YjU0YjJlMWIsIDB4MDFlMTUxNzAsIDB4ZjA4NWQ5ZjAsIDB4NTM1YjU4ZjEsIDB4ZmZiYjRlZDAsIDB4Njg3MWUzOWEsCi0JMHgzNjBkMTVhNywgMHg5Y2E3YTQ0YSwgMHg5NzIxZTkxMiwgMHhhYmFmZjM5ZiwgMHgwZDdmMjY0NCwgMHgwODUyNTYyNiwKLQkweGY0NDFiYmYwLCAweGZhMGFkNjc3LCAweGRiZjA2YWU5LCAweGQ4ODUwOTFjLCAweGJjNzFjNmVlLCAweGQyZjk3OGRkLAotCTB4OWU1MGM5YTEsIDB4Y2E5OTNkZmMsIDB4NGQ5OWVlYWYsIDB4ZTI2MDBkNzIsIDB4MjdiYzAwMDgsIDB4YmYyNThkNGYsCi0JMHgzODYzZmEwZSwgMHg5ZmE4YTliZSwgMHhlMTI2ZDQ4MSwgMHhhOTM3NjgyZCwgMHhlMDA1ZjI1OCwgMHgzMDhlMzc3ZCwKLQkweGYzZTcwZjFkLCAweDc5NmQ0ZTQ5LCAweDBjYjZiMTcyLCAweDMzNWY5MWZkLCAweGFmYmRhNWQ1LCAweGUyODc1OWRhLAotCTB4MDdkZTkzNjMsIDB4YjE0NThjMTcsIDB4ZmVkMWNmOGMsIDB4NjYzMmZhMTEsIDB4MWY2YjVlZjAsIDB4MTFkOWQ3MTgsCi0JMHhlYmNkMDc2NiwgMHhlY2E5ZGZkMiwgMHhiNmMwYzZiZCwgMHhhNzMzN2I2MiwgMHhiMjhkOWZmYiwgMHg4NGU3OTZmYSwKLQkweDQ0M2RmYmQzLCAweDAzMGU0ZGI3LCAweDM3ZmI2MTMzLCAweDliZDQzZTJjLCAweGJiMzNkYjdmLCAweDc3YTA4YjE3LAotCTB4ZDE5OGVkNDMsIDB4MzVlMzQ2OTAsIDB4ZGNmZWI4MzIsIDB4ZmQ4YzUxZDQsIDB4MDY3YmZjZmYsIDB4OGZmYTBjYjYsCi0JMHhmYjc2NjUxYiwgMHgyN2JmYjQyMiwgMHg0MjMxZjg1ZSwgMHhlZjA3MmRkZSwgMHgyZjJkZmQwZiwgMHgyNTZjNzI4YiwKLQkweDNmMjE0OGJiLCAweDU4YjdmNTRkLCAweGFiMmExZjVhLCAweDM0MGM5NjdlLCAweDM0ZmE0NDE5LCAweDllM2QxMDc2LAotCTB4ODFlOWY3ZjcsIDB4ZTY4ZDhjZTMsIDB4YTA3ZjNjNzgsIDB4MmY2ZTFlZDksIDB4MDQ3ZmEyMzQsIDB4ZDAxZmM2NzYsCi0JMHhhMzZiODIzZiwgMHhiNWZkN2ZiMCwgMHgwMGJmMmE3NiwgMHgwMzVlMGU3ZSwgMHg0ZmY5MGFiNSwgMHhkM2ZiNmI3YiwKLQkweDA3NWFjNWY1LCAweDhlZDdmNzVkLCAweDVhODFlYmEwLCAweGI5N2JkNTI3LCAweDA3YWU5OGI2LCAweDc1NzQ1ZDZiLAotCTB4ZjlmMDI1YzcsIDB4ZWM1ZGI5MTgsIDB4OTIwYWZlNzksIDB4ZGJhZmUwNzMsIDB4ODhlMjg2MTIsIDB4M2UyMDA2NmIsCi0JMHg3OTNlM2JjZiwgMHgwYWYwYjdmMiwgMHhhZmQzYThjZiwgMHhhY2Y1YzExNiwgMHg3MzU3NzFkNCwgMHgzZmY5ZmM5OCwKLQkweDNmMDc0ZmNkLCAweDdmYzcxNzI4LCAweGVmNWQ3ZjM5LCAweGI3M2Q1NDJmLCAweDcwMTc5NzYzLCAweDg3YTllMGI0LAotCTB4ZmJjYzE4ZTIsIDB4MGE1ZDcxOTQsIDB4YWRjYWUxY2EsIDB4NzA5Y2UzMmIsIDB4MGUzYmIzMDUsIDB4OWYyOWUxZjUsCi0JMHgzZTg5MWM1YywgMHhmYTU0MTM0YSwgMHgyODQ4YzY3MCwgMHhhYmU3MThlNywgMHhlZmI4OWU4ZiwgMHhiZmFiZTQwNiwKLQkweDUxZDkzNTZkLCAweDdlYzA3ODVmLCAweGFlN2U4MGIxLCAweGY4OWRiODZlLCAweGJjNmRjYTEyLCAweDE5MzllZjdjLAotCTB4ZmU1YThkY2IsIDB4ODdiYmYwNTksIDB4YTI1ODk0NTIsIDB4Yjc0ZTRjYmIsIDB4ZGJhNDRjODEsIDB4OGRlZjJkZWEsCi0JMHhiMGYyM2E0NywgMHhmYWQzZDIwZSwgMHg4YmZlZjg3NiwgMHhiZDRmN2EwMCwgMHhiZDdlOGU1YywgMHhmZmNhYjlmZSwKLQkweDllYWU0MTFlLCAweGM5Y2VmYjg2LCAweGFiNTdmODcxLCAweGFmYWVmMTE5LCAweDBlMzQ4MTVmLCAweDQxMzEzYzdjLAotCTB4MzY3MGYxZjAsIDB4MTU2ZGVkMWMsIDB4NGM5N2NjMWUsIDB4ZjczZjJjZmMsIDB4YTg2ZDQxOWIsIDB4MzlmY2I3YmYsCi0JMHhjYWViY2E0ZSwgMHg2N2ViZTdhZiwgMHhhNTA3ZmEzZiwgMHgxNzZjZmU3YiwgMHg2YmQ3YWY3NCwgMHgyMDBjMjM0YSwKLQkweDdlN2U4YTE1LCAweGUyMDUzNGFkLCAweGI5ZmRhMzQ2LCAweGFjZjI0NGM5LCAweDFmNmZjNzcyLCAweGQzZGEzNWZiLAotCTB4N2QxYzVhNmYsIDB4ZjY5YmI0MTUsIDB4ZTUwNTE5MWQsIDB4NDk0ZDNiODUsIDB4MzExYTdjMjUsIDB4MmYwODRhNTIsCi0JMHg2OTZmZjgxZSwgMHgwYjBmMDg3ZSwgMHg1NjY3ZDk5ZSwgMHg3N2ZiZjIwNiwgMHhiMWYwODQyNywgMHg5OTkzNjc3MCwKLQkweDhmMGFlYzBkLCAweDczMjZmYWEyLCAweGJjMDQ0YzZiLCAweDQ3OGRiN2Q0LCAweGZiOWY5NmJlLCAweDdlZjExOWE3LAotCTB4YTU4OTA1ZWEsIDB4ZTc4MDQ0ZTYsIDB4NmU3MTdkYTYsIDB4YTNjMjI3MDEsIDB4ZGUyNzUzYzAsIDB4ODAzZGY1NzQsCi0JMHgxNTUzYTQxNywgMHg1N2U3ZmE0ZiwgMHhjNjdhNzAyNywgMHhhMjNjOTRmZSwgMHgwMGZmMjdlNywgMHhjYjc4YTlmMCwKLQkweDU3ZjljMGUyLCAweDFjNjc3OTNjLCAweDYzMDNlM2NlLCAweGRmZWJhNzBkLCAweGMyNzE0Y2FjLCAweGRlNGMyYjdiLAotCTB4Zjk1ZDNiMTQsIDB4OTY0NzhhZmQsIDB4NmZjZGJkMTAsIDB4YzhjMjkyNTksIDB4MWJhNjcwZWUsIDB4ZDMzY2QwNDYsCi0JMHgzNzczN2U3MSwgMHhjZGY5YTU0ZSwgMHhiYmEyNmU2MywgMHgyZWM4ZGY4YSwgMHgzNTNlMmJiNCwgMHgxMTlkZTJiMiwKLQkweGMxNzVlMmY4LCAweDA2NmMxZjE3LCAweGZiZjMwNDZkLCAweGVmNzNjODQwLCAweGNiOGZiMmViLCAweGNhMTgzYmNkLAotCTB4ZGNhYTI1YzksIDB4ZmNhODhiNjQsIDB4ZTllMzk1YTksIDB4ZTA4MzA0ZjEsIDB4NzBmMmUwMmIsIDB4NmY3MmRkN2EsCi0JMHg1MWYzZjExMCwgMHhmZDE1MzM5NiwgMHhiZjAzMGY0NywgMHg3ZDIxZjc5NywgMHgyZGNhZmQwZSwgMHg3ZTM5NTJlMywKLQkweGVkNGNiZGI4LCAweGMyMjkwZWMwLCAweDY4M2Y1OGZiLCAweGFjM2I3ZjIyLCAweDI3M2NmYjFkLCAweGUyYzVmZWY0LAotCTB4MjhlZTMwZmQsIDB4MDdmM2U0MDksIDB4ZDM2ZWRjMjksIDB4MDk1ZmVmY2YsIDB4YmYwMjhlM2MsIDB4YWZhMzBiMjAsCi0JMHhmY2U2ZmUzMCwgMHhlNzM1NjViZSwgMHg3ZGRmOTU2ZiwgMHhmOWYxOGE5MywgMHhmZjM4ODcyNywgMHg3Y2NjYmI2MCwKLQkweDk1MjA1NzFhLCAweDkxNGQzNzllLCAweDU4NTgxZTQ4LCAweDZmNWYxMjIwLCAweGQ2YmUwOTMxLCAweDA0ZTk1NzNlLAotCTB4MzhjNDZkYzYsIDB4NjBiZDI3NDYsIDB4N2YwNDA5ZmYsIDB4M2RlNzg3YjIsIDB4ZTRjMmVkMDgsIDB4MTdkZjA3YTEsCi0JMHg5NTNmYjVkNywgMHhmZTBiZTc2ZiwgMHgzZmY5MDU3ZiwgMHg2Y2ZmYzQzYSwgMHhlZWZiZTcyMywgMHhmMDk3YWRmNSwKLQkweDNkZjI2OTU3LCAweDU3ZTQ2YmY2LCAweDgyYWY0ZmUwLCAweGUxNzI2YWZjLCAweGRlZGUzZmJjLCAweGY0NTZlNDdjLAotCTB4M2U1NWViMWIsIDB4M2Q0ZmNhZDUsIDB4YmQzYzU2OWYsIDB4Y2Y1M2U4OGYsIDB4ZWZkNzFmYTcsIDB4YTdjODg5NGIsCi0JMHhiNGE1ZjczYiwgMHhkM2UyNDVlNiwgMHhhYTdlNTZlZiwgMHgyNzU0ZmJmMCwgMHhkODc5NTUzZiwgMHhmMmY1MWMxZCwKLQkweDI1MDQ4MWYwLCAweGRmODQzY2EyLCAweDJiYWMzNjIxLCAweGE3NzRhOWZkLCAweGRmODJkYmQyLCAweGI5NDJmNTU3LAotCTB4MmE5NzQ5ZDMsIDB4YTVkMjc1ZGQsIDB4ZjlmYTc3NGEsIDB4N2ZhN2UxNmEsIDB4MTU4MDQ3ZmUsIDB4YjkwZGY5ZTIsCi0JMHhmN2RhMTg2MywgMHg0NWI4YzE1MywgMHgwMzA1NGRiYywgMHg2YjFmMzRhMywgMHg0ZDVmMTFhNSwgMHhmZWYzZTMxMSwKLQkweGI3MTg0OTgzLCAweDc5YzIxMjQxLCAweGY0YmZmNTRkLCAweDBkZjdiZTE5LCAweGRmYTJmMzEzLCAweDJkY2Y3NjdiLAotCTB4YWI1N2RhMGEsIDB4OTkwZWFkOTIsIDB4ZTY4Zjg0ZTQsIDB4NWVlYzhlZmQsIDB4YjAwZjcxODksIDB4OGU1MWFhYTMsCi0JMHhkYjQ3Zjc0YywgMHhkZGI5NmVkMSwgMHgzMjcwOWVlYSwgMHg3ZjQ0ODQxMSwgMHg4ZGNiZTQ4OSwgMHgwN2IyNjU2YiwKLQkweDJlM2M3OWFkLCAweGYyNjExYWUxLCAweDllZmE1ZmExLCAweDJiZTM0NWMxLCAweGZkNWUxODI5LCAweGY3M2QxYTIzLAotCTB4YjkzZGQxY2YsIDB4MjE1N2M2MDYsIDB4OGMzZjg3YzYsIDB4YzJjZWRkZDcsIDB4MGY1ZmFhN2UsIDB4NDZiYmNlNWQsCi0JMHhhMWM1NDQwYSwgMHhlM2IxMmMzZiwgMHhkZGI4NzA2MSwgMHhlZmUzMmRhNywgMHhmZDQyNTJiZiwgMHg3NzdlYWU1ZSwKLQkweDVmNGRmNDdjLCAweDNhYmEwNWRmLCAweDFiNzg3ZTBlLCAweGJhN2M4ZDVlLCAweGNiM2NmNGUxLCAweGE5ZThlMWNmLAotCTB4MDMxZmM4OTQsIDB4NjE1YzliYmMsIDB4NDRiYWQ1N2UsIDB4YmRkZWY3MmUsIDB4Y2NlMjgwYmIsIDB4ZWMwZmY3ODUsCi0JMHgyZTZkZTVjMSwgMHg0MjNjZDdjNSwgMHgyYWY3OWU3ZSwgMHhhOGFmNTAzZCwgMHgwM2Y5ZWVmNiwgMHhlOGVmZTQ0NSwKLQkweGU4MjJkM2M3LCAweGRlYzIyZmZjLCAweDVhNTYzYjNkLCAweDlkZGYwMzI3LCAweDNmNjQxZDY1LCAweGQ4ZGFjNzc5LAotCTB4NmY3ZTA4ZDYsIDB4N2VhNzYyNGQsIDB4ZDQzMGYyNjAsIDB4ODZhZmVhNGIsIDB4NGYxM2IwZjgsIDB4MzI5ZTI3NmIsCi0JMHg3ZjBhZWEwZSwgMHhlNTU3MWRmYywgMHhjM2VmZmNhMCwgMHhlMTA5ZjkxNSwgMHgxZDZiNjJkOSwgMHhjZjMwOGFlZiwKLQkweDRhZGMwNDdiLCAweDQ2NjY3ZWY2LCAweDNmOTM3NjM5LCAweGI4ZjA4NGM3LCAweGIxYWNhYzY5LCAweDI4OTQ3ZjYzLAotCTB4MmIwMTQ0ZTQsIDB4ZWM5NTcxYzAsIDB4MjQ2ZTJlYmQsIDB4ZWM4MGUzZTIsIDB4M2Q1YzAxYjAsIDB4Zjc2NjczZmUsCi0JMHgxMWMzY2JjMCwgMHhmNWZiNDdmYiwgMHgwZjMxYzk4NCwgMHg2N2UyNzhlMSwgMHgzZTA1ZTYzNiwgMHg0NWM0NDU3OCwKLQkweGY1MTM5MWUwLCAweDQ0ZTU3NDFhLCAweDIyNWY3ZGZkLCAweDliYmMwNzhmLCAweDRlYjgyNzY4LCAweDI1MzQyOTJlLAotCTB4MWFmMzdiYzMsIDB4NmYzMTgzZWMsIDB4YmZlYTIxOTEsIDB4ZjNkMGE4OWIsIDB4YWQ0ZWQxNGMsIDB4ZWJjOTUxOTcsCi0JMHhkNWVkOTliNSwgMHgyM2RmZTY5MSwgMHg2YTVmNTNiOSwgMHhkZWZiMzVmMCwgMHgwZmU4Y2QzYiwgMHhhYmUxNmZmZiwKLQkweGMwZDhmZWYwLCAweDhkNWY4YzE4LCAweDc0NmU0ODk1LCAweGZjNDY2M2E1LCAweDYzZmMxZTcwLCAweGZiY2YxM2Y0LAotCTB4N2NmMmJjNzksIDB4MDJjMzhmMDksIDB4NzM1ZGI5M2MsIDB4OGQ3NjQ0OTMsIDB4Zjg3YWU3NGEsIDB4YWJlMDI3M2UsCi0JMHgyOGE4ZmZiZSwgMHg5ZGI5MTNmYiwgMHg4NTU3YzJhNCwgMHg2YWJjN2VhYiwgMHhkNzU3OTA3ZCwgMHgxYmZiY2I4NiwKLQkweDI5M2YwNzFiLCAweDJmYzIzZTYxLCAweDU1ZDAwZGQ5LCAweDhjZDViMWI1LCAweDVjNjllNzdjLCAweDY2N2Y0MjZmLAotCTB4NjVmYmMyYmEsIDB4MjlhMGQ3NDYsIDB4NmVmMzc0NjEsIDB4ZGJkZTkxYTIsIDB4MjY3YTNmOWMsIDB4YjU4NWM3ZDIsCi0JMHg3N2YzODYxNiwgMHg4NzE3MzljZSwgMHg4MzE1ZjM3YSwgMHhjOGQxYjVlMywgMHhlNGNhYWY3ZiwgMHhjNzA3Nzc4ZiwKLQkweGFmZGFkNmJmLCAweGVmMGM2YjFmLCAweDM5YzY4NzM3LCAweDg0ZDBiMmI5LCAweDY1NDY2OWVhLCAweDhjMzUyOTkzLAotCTB4NGM0ZGRlOGUsIDB4ZmRlYWU3YTAsIDB4ZjI4NTRhOGMsIDB4MWEzZWYwNjIsIDB4MTZlN2Y3ODcsIDB4ZDVlNDliY2EsCi0JMHhjMzQ0YzcwNywgMHhmMTM1MTlmMywgMHhjMDJhZmU5YywgMHg4ZTcyYTZmMCwgMHhiZWE2OGYyNiwgMHg1MzQ3Y2Y0NywKLQkweGU1MzVhMjRhLCAweDNkYWQ0NWQ5LCAweDk2MjUyZTExLCAweDA0NDc2MmMwLCAweGE5MjZmNGZhLCAweGY1MzVmOWY0LAotCTB4MzdlODEzODIsIDB4NWZmZWRkMDIsIDB4YWIxNjE3YTcsIDB4OTM1NWExN2EsIDB4YTkyZWJlY2YsIDB4OGQ0ODVlOGIsCi0JMHgyZDE2MTdhNCwgMHgwZjExNTI1MywgMHhkMTY1YmU2YSwgMHgyMjUyZTM0YiwgMHhiNWMzODVlOSwgMHgxNDcyZGYzYywKLQkweGNmNWUxOWU0LCAweDcwYmQwMTRlLCAweDk4NWU5ODc1LCAweGQxM2EyMzYyLCAweGJhNDgyYmI3LCAweGYxNTA1ZThjLAotCTB4OTljYjFkZjQsIDB4MjIxN2E4YzMsIDB4MjRmOGY1ZjAsIDB4ZDliODVlYWQsIDB4ZTE3YTRlNWYsIDB4NTMzMjI5ZTYsCi0JMHg0OTdkZjNjMiwgMHg1NmVlZmVjMiwgMHg0Y2E2MTQyZiwgMHgxMWM5YjJhNywgMHgxMDZlODExZCwgMHgzYTE3MTg5ZSwKLQkweGY4ZWVmMjJhLCAweDNmMGZkNDFlLCAweGJjMTNiMjRlLCAweDNiYTI3YWY0LCAweDM5Nzk5ZTM5LCAweDA0YmZmZTM5LAotCTB4MmY4ZTU1NWYsIDB4YmQ5MTJhOWEsIDB4MThlZTk1ZDcsIDB4ZTlhMmVmZDEsIDB4MTZhZGU1MTIsIDB4N2M3MmUxZWQsCi0JMHhmMWM4MTk1MSwgMHhhZTQ1ZDYxYywgMHgwZWFlNTBiYSwgMHhiY2FiOTcwOSwgMHhlYjliYjU3ZCwgMHhjZTYzNGYwMSwKLQkweGY5ZTE0YjJmLCAweDBlNGNlYmFkLCAweDM1YmZkNDJiLCAweDg1ODc2NzI0LCAweDI3MWZkOWNiLCAweDJiNjcyMzc1LAotCTB4ZTBiZDljYjgsIDB4NDVmMWU4MmYsIDB4NDI2M2NiNzEsIDB4Y2FmYzgyYmUsIDB4OGJhMDQ0NzUsIDB4OWFkMWE1NjksCi0JMHgwNjI3MDM3NSwgMHgxOWVmMjlmZiwgMHg2NDU3OGZlNCwgMHgyN2JjODc4YSwgMHhjMWMxZmRmNCwgMHhmNjgyMWE3ZiwKLQkweDBmMWM2MWZmLCAweDQ5YjdlZmUwLCAweDlmODBlZjVjLCAweGUwNThmZDcxLCAweGRjMzlhMmZiLCAweDJlZGFhZTVlLAotCTB4MWJhYWZjMTMsIDB4NmY1N2JmMzgsIDB4M2QwZTI4OTMsIDB4MzMzM2ZmM2UsIDB4ZjBmNmVkZTUsIDB4OTcxYTg2YjgsCi0JMHhmMGJmZjE1NiwgMHg5OTU1ZDY5NSwgMHhjNDkzN2NmOCwgMHhmYzBhY2NlMywgMHhjZDg3Y2IwYiwgMHhiZjI0MmM3MywKLQkweGFkMDZmZTY0LCAweGU5NjI1MGZmLCAweDRhZWQ4ZmQ4LCAweDM2MzkyNzdlLCAweGVjOGJmYzkxLCAweDdlODk1NTZmLAotCTB4M2VkMzZlMTYsIDB4MTZhYzcyYWYsIDB4ZTQ4MDU3ZmUsIDB4ZjZiZDU1NzYsIDB4NWZjMTVlZjksIDB4ZGU0MGU1NzMsCi0JMHg3YmNmOTgzMywgMHhkMjQ0NzY0ZCwgMHg0ZWJkNmE2NywgMHg5YmZjNTQ3OCwgMHg3ODAxNjhmMCwgMHhmMGVhZjkwYywKLQkweDQ0ZGZkZGI4LCAweDBiYWY5Mzc5LCAweDVmZmNmZDA3LCAweDNlNDZlNTU0LCAweGY2ZmM4MjFiLCAweDcyNDljMTllLAotCTB4Y2YzMmZiYzMsIDB4ZGY1OWNlM2IsIDB4ZmUzYzM1MzcsIDB4OGJhMGJhZmMsIDB4NTVlZTBjNTcsIDB4OWFhZjU4ZTksCi0JMHg2ZmU3M2ZlNywgMHhjYTFhODcwNCwgMHgzMDZjZjVhNSwgMHgzN2YzNmVmYSwgMHhhNzZiZjU2OCwgMHg0ODUwNmYzZSwKLQkweGVjZDY5NzVmLCAweDQzY2I2ZTk0LCAweDVhYmNmM2I4LCAweGY4ZmQ2Zjg1LCAweGI2NWU3ODBjLCAweGQ0MzdmNDE0LAotCTB4NzE2ZjlkOWYsIDB4YzVhOGZjNjMsIDB4NTE3MjQxZDYsIDB4MDVjZmNmYTUsIDB4ZTA1M2ZjYmYsIDB4Yzc0NjQ0ZTMsCi0JMHg4ZDNiZDI1OCwgMHgyZWY4OWQ5MiwgMHgwODdhZTM2MCwgMHg3MjgzNjJmMCwgMHg4ZmJmYzhmMywgMHg1YmIwNzgxNywKLQkweGRlMzkyZjg4LCAweGU0Mjc4MDNjLCAweDUxN2VmMWRiLCAweGRkZjZlN2FlLCAweGVlMzlmZjBjLCAweDRjOWJmYmZmLAotCTB4OTFhMmFlZDgsIDB4YTAyMzZiYWYsIDB4OGMzYmU5ODYsIDB4ODRhNjE0NDcsIDB4MWI0ZjczZTEsIDB4OTJhZGVmYTcsCi0JMHhlMGY4NmU4MywgMHhlN2MxOTdkZiwgMHhkYWE4ZjA2NSwgMHg5ZjE2NWYyMywgMHg0ZjNlNWMyYSwgMHhjMDgyN2UxMiwKLQkweDU4MmQ4YjZiLCAweGZjNzk4MDUyLCAweDMzNjM5MjNkLCAweDUzYzdmNjU2LCAweGJhZTRlMTVjLCAweGQ4ZGY4NDNlLAotCTB4M2Q1NzhlNjQsIDB4ODBkZmEzZGQsIDB4ZjJkNGE2ZWIsIDB4ZmEyMDFjMjQsIDB4NzYzNmM1ZjQsIDB4NmY2ZjdkNDIsCi0JMHhjYjg1NWY2ZSwgMHhhM2JlMzUxZCwgMHhiZTZhYmY1ZSwgMHgxNDgyYzNjYywgMHg2NmYzNTJhZiwgMHg4M2Y3NjUyMywKLQkweDcyNTdhODg5LCAweGE0NGY1YTI1LCAweDQ2NjBjZmU2LCAweDQwZGZkN2M0LCAweGJlOTMxM2ZmLCAweDY2OTY3ZmEwLAotCTB4ZWNlZGViZTcsIDB4ZTEzYjdkZWEsIDB4NmU1MTM2ZTksIDB4YjQ3NjFhY2UsIDB4YTE3YmUwMTQsIDB4YmFlMDc2NGUsCi0JMHhjYTBjNWJiNCwgMHg5ZTUwNmI5MSwgMHhlNDMxMzFhYywgMHg0ZDA3MGI4ZiwgMHhhM2RmMmU0ZSwgMHhiZjk0OWY0OSwKLQkweGZhODRjMjcyLCAweDgyNzMxY2IwLCAweDA5ZmZjNzk4LCAweGM0MjcxYmQ3LCAweDNkMDJkZTc4LCAweDI4OThjNGVjLAotCTB4MDkzYTFmYWIsIDB4ZDFjNTNmZGUsIDB4OWNmMzBlMzQsIDB4YWNiNDg3NTMsIDB4ZTRlZTM4YzQsIDB4MjM5MWZiMjIsCi0JMHgzMmQ1Y2Y4OCwgMHhhZjFlN2M0MywgMHhlYjNmMjIyYiwgMHhlMjI0M2JjZSwgMHg2ZjAwMzdhZiwgMHg5NGVhN2VkOCwKLQkweGUwNDcyMzljLCAweGM5NzU2NWJkLCAweDc1Mjk1MzE0LCAweDBkM2NkZjI2LCAweDY1MDdhNWNhLCAweDY2ZjUwMjg3LAotCTB4ODMxYjE4ZGYsIDB4ZmQwOWQ3ZjEsIDB4ODMwZWU2NjUsIDB4YWUwYjE5NGYsIDB4Njk1N2Y4YzQsIDB4NzE1MzFkY2QsCi0JMHhlN2EwMTVkYywgMHhlMTVkMWYzMCwgMHg4YTk3MTk2ZiwgMHhiNTEyOGRlNSwgMHhlNmRkNzhmNywgMHhlMDlkMjA1NCwKLQkweDIxZTY3Mzg2LCAweDUwNzlmZWYwLCAweGQ5ZWVjMTBmLCAweGI2NzllYmM4LCAweDc1NGMwZTQ4LCAweDI3YWZmM2NkLAotCTB4OGI2ZjM4NzksIDB4NTk4OTcwYzQsIDB4MmI1OGVjMTAsIDB4ODU2N2Q3ZWYsIDB4YTExYjgzN2UsIDB4NjNlNzk0M2QsCi0JMHg0Yjc3ZWM3YiwgMHg5MGQzY2RmYywgMHhkNDljNjE4ZiwgMHhmZGIyYzQ3ZSwgMHg0MWU3MmYyOCwgMHg4MmNjNzgzYiwKLQkweGZlYTBlZTViLCAweGIxMjhkZjZlLCAweDYyYWZlODM0LCAweDQ3Y2ZjZTQ0LCAweDRkMDc3ZjYwLCAweGI0N2U3YzBlLAotCTB4NjcxNDU3ZTksIDB4NGJlZjA5OWYsIDB4Y2I2N2ZlODcsIDB4OWQ2OGUzYWQsIDB4M2IyNThmZDcsIDB4YjkyYWJiYWQsCi0JMHg1Njc3ZjA5OSwgMHg5YjRiMTlmMCwgMHg0N2JhZjY0YSwgMHg2ZjNkYWE2MiwgMHgzZWRiOGYwYywgMHhlODliZGM5NiwKLQkweDY1ZDJkZTc4LCAweGFkNWU3MGFiLCAweDAzMWNlNGRlLCAweDVhMzlkNWQxLCAweGUwMTI3ODk3LCAweGY0M2IwNmVkLAotCTB4ODNjNzk5ODQsIDB4Y2MyN2JkOWIsIDB4YjM3MjYxYWQsIDB4ZjEwZmI5MzksIDB4NDJjNjljZTUsIDB4M2FlYTJmOTIsCi0JMHg2ZTMyZjcwYSwgMHhiNGFkYjQ2NywgMHgzNjk4N2FkMSwgMHhlZjFiM2Q5MywgMHhkMGI0YWYzNywgMHg1YzFkZjZmZCwKLQkweGI1NjdiNGJmLCAweGRjN2U4M2JlLCAweGNjNGQxYjA3LCAweGJlNWM2MzBiLCAweDg4YzNjZmIxLCAweDliYjYwZmM3LAotCTB4ZGZlNGRlODgsIDB4Y2Q4ZTQ4OTgsIDB4NWJlM2MxZGYsIDB4YmY3OTFiY2QsIDB4NzJlMzZjMWYsIDB4NTMzN2U4YWQsCi0JMHg5ZWJjYTNjNywgMHg0MmM5ZjIwZiwgMHhhZmNhZDNmMywgMHgxZTAyY2E3OSwgMHg4OWI3NWQ0NywgMHg5NTU3Y2JmNCwKLQkweDUzZTQ1ZDUzLCAweDVmMTQ1NWNmLCAweDdhZWY0ZWVjLCAweDc3YWE4YzU4LCAweDVlYmUzMWYyLCAweDczMzU5NTVlLAotCTB4MTk2ZmQyMDMsIDB4MDMwNjhjNGYsIDB4MDg3ZDNmYmIsIDB4MmM2NTY5ZjUsIDB4NDZkNTNiYzMsIDB4YTcxMmMzZmIsCi0JMHg5NmM3Y2EwNywgMHg4YTdlNzdmYSwgMHg2YTUxNWZmNCwgMHhkZTFlMjA3MywgMHhiZjIzZjg0NywgMHg3OGE0NGRhYywKLQkweDM5NWYzY2VhLCAweGFiM2U3OWMxLCAweGRmY2YzODIxLCAweDM1NmZhNWEwLCAweDJkZGQzODZlLCAweDllYjg2NzMzLAotCTB4Y2U2Njg4YWEsIDB4N2Y0NzdhYjAsIDB4ZWYwYTc0MDIsIDB4ZjkyOGQ1OTksIDB4ZGI5NjEyNmMsIDB4NDIxOTJmZjYsCi0JMHg2YjhkM2I2NSwgMHg2YmZiZDBhOSwgMHg4ZjhlODk2MywgMHg0YWRjZjBmZSwgMHg3Nzk5ZDNhNCwgMHg2ZWVkMGM0YiwKLQkweDQyYWY3NWU2LCAweDQxYmQ1N2JkLCAweGQ2YmQ3MDUyLCAweGZiNzliYmZjLCAweGM3MWVkMGY5LCAweDljNTdmNDdkLAotCTB4MTVhZTgwOWUsIDB4OGRlYWZiYTQsIDB4ZmQ1M2Y3ZWIsIDB4ZmQ4MjkyMmQsIDB4NGU1NGRkMWYsIDB4NTc4NTQyNzYsCi0JMHg0YjdjZjQ2NiwgMHhhMDAxZjkxYiwgMHhkMzBmMjg5NywgMHg5MDUzOTVlYywgMHg1ODU3YWJlZSwgMHg1N2Q3OThlYywKLQkweGM3YTU0N2U5LCAweDY2MWY5MTM2LCAweGM5YTBjNzU2LCAweGIyNTE2ZWQwLCAweGU1MGU5MTEyLCAweGRlYTc1MjY5LAotCTB4NzhmMTdhNDQsIDB4ZWRiNTdkMzksIDB4MjU5MDM5MzAsIDB4N2M4ZjRmMmUsIDB4NmY0YTgyNWQsIDB4OTBkYmQyMzIsCi0JMHg2ZjM1YmQxMCwgMHhmZDIzMzIyYywgMHhlYmUzZTA3ZCwgMHg1ZTkwOGExMSwgMHg1NzFmMWU5MSwgMHgyNjJjMmFlMywKLQkweGU5NTIzZWRjLCAweDA3ZTgwYWIxLCAweGU4ZTVmNGU1LCAweGQzZmEzYmIxLCAweDAyZjgxZGQzLCAweGNlZTQ3ZWI0LAotCTB4NzcxYTM2OTUsIDB4MzdkZGFhZDEsIDB4YzQ3Y2U1MmYsIDB4YWI0NTljNzAsIDB4ODE3OTQ4N2UsIDB4ZmYxZTQ2NzksCi0JMHhlYjg4ZTE1NiwgMHhkMjRmMzBkYSwgMHgyZTBmMWM2NSwgMHg5OTdmYTczMywgMHhmMWM2ZThmMSwgMHgxMGQ4ZTQ4YiwKLQkweDk2ZTgwM2ZkLCAweDAxYmFjNTliLCAweGU1MDM5NDQzLCAweDU2OThjNGQzLCAweDMxZTMwNGEzLCAweDUxMTg3NTI1LAotCTB4ZTE0ZjBmM2YsIDB4YzIzOTc5ZmEsIDB4MzMyNWViMGEsIDB4NjcyODFmNWEsIDB4YWNlZTA4MWEsIDB4YTNkN2MyOTcsCi0JMHg4NzY0NzZlNiwgMHhhNjdiNjNjNywgMHhiMDZlZmVhOCwgMHgxODlmZGUyNywgMHg1ODUxZTUwZCwgMHhmZjQwNGRiNiwKLQkweDU3NDVhMjZlLCAweDYwYTA2MWVlLCAweGJjNTE2MzEzLCAweDVlY2EyYTljLCAweDRjOWQwMzI4LCAweDQ3OWY1NGNjLAotCTB4ZDEyZjcyZjMsIDB4ZWJjZDFiZGUsIDB4Yzc5ZjUwMGYsIDB4ZWFkNWYyZjAsIDB4N2Y1ZTE4ZjMsIDB4OTllN2EzMzQsCi0JMHg3MDEzYjEyOSwgMHgxNGNmNTczZCwgMHgyMzdjNjZiYiwgMHhmZDBkNDk1MSwgMHg2MmQ5NTdmYSwgMHg2ZWI0ODlhOCwKLQkweDlhOGE2ZmE3LCAweGFmMTQ2Nzg3LCAweGY0ZmZmOTc2LCAweDVjYjVlNjA2LCAweGY5MDA5OGQ2LCAweGU5ZDM0ZTA3LAotCTB4ODY3YjMwZDYsIDB4MTNjYTc1ODksIDB4YTRiMjNkMDQsIDB4YWUwYmIyMzgsIDB4MmYwMWJmYzcsIDB4MjY4MThjMTMsCi0JMHgwNmIwNmY2YywgMHhiMDU3M2YwOCwgMHhmYmY3ZjYxNSwgMHhmNjUyMjJlMywgMHhkZDA1ZTdlMCwgMHg1NmE4NmJmYiwKLQkweDZmZjMwZmRlLCAweDRiNjMyNzI1LCAweGM1MjRhZTgxLCAweGU1OTBmOTRlLCAweDQ2ZGI5OTRiLCAweGVkNGI5NGViLAotCTB4Y2M0OWJmNjgsIDB4YWY5Y2Y4NjksIDB4ZmJlMTc2NTcsIDB4ZWZhOGYxZDUsIDB4ODAyZTMyZWYsIDB4N2MyMTMxYjQsCi0JMHgxZmE5MWI1YywgMHgwNzY3NWM3NSwgMHhiNzk4YmM1YiwgMHhmZDYxOGVmNCwgMHg3NGUwYzI2YiwgMHhmMDhhZTkxNiwKLQkweGUyMjI2NGI0LCAweDA5OGRhY2VkLCAweGFjNzI4YmJjLCAweDg0NDdmY2ZhLCAweGVhZjFiM2Q3LCAweGQ2NGU1MTczLAotCTB4OTVkNzRmM2QsIDB4YTRmZWJjNGQsIDB4NzgyNzJiOTQsIDB4NjRiM2JkZTEsIDB4NjgxNGE0ZTcsIDB4ZDBjNzMxNjMsCi0JMHgyOGJhZWFiYSwgMHhiZWU1ZGViZSwgMHhlZDE3Yjc2NCwgMHg1YTczYTAyMywgMHgzMmNkZTQ5NywgMHg3NjMxN2Y5MywKLQkweDVmMGNlNDg4LCAweGQwNDMzMTVmLCAweGIxMTRiMWY1LCAweGFlYjJkOTRlLCAweDBkZWQwNWE2LCAweDQxOTZjM2YwLAotCTB4MGJhNWNmN2QsIDB4NGM0ZjhjNjYsIDB4OTE5OWI3ZjQsIDB4NDAxYmFhZWUsIDB4Y2IxNWUyNmUsIDB4NjhkZDU3OTgsCi0JMHhmNzVhNDY3NiwgMHg1NjQ1MmE3NiwgMHhmNTlhMTdlMywgMHhmYWIyZmJjMCwgMHhiOTQyNGNhZCwgMHhhZmNiODczYywKLQkweGM3ZTNiYjQ1LCAweDM5NTE3OTYxLCAweGJkNmZmN2I3LCAweDA0MzhlNzY2LCAweDY5YWI5OTQxLCAweGIxNjc1ZTI1LAotCTB4OGE2ODdkZDYsIDB4NzQ1MTdlYTMsIDB4NGVkYzI1ZmEsIDB4ZDQ0OWFiMmUsIDB4MDNhZDY3OTQsIDB4NzVjMjBlNmMsCi0JMHhmZWY1ZGE5OSwgMHhhN2I5ZTQ0YywgMHhlMzBmZDBiMywgMHhkZTA0ZDM4ZCwgMHhhNWFkYTdhNywgMHhiNzc0ZjdiYywKLQkweDQ0ZTczZDc2LCAweDAyNjMzMmZmLCAweDIyNDZiYjhlLCAweGI4ZTYwOTNkLCAweGYwNjZlZDgyLCAweDZjMzVjMjE5LAotCTB4N2RjMDM4NWQsIDB4NjdkMGEzNWMsIDB4OTdjZTVjOTUsIDB4YjRhOTdmMGEsIDB4ZGQxN2FmODIsIDB4YzI2NjY1OTcsCi0JMHg3ZjcxZjJkZiwgMHg4NGQ4ZmQ2YSwgMHhhM2Y3MTQyMSwgMHg3ZjFlZmVmNSwgMHhjZmViMDk4YiwgMHgxMzdlMDI1OCwKLQkweDRlYzk3YmY3LCAweGRhMGVhNTk4LCAweDg2ZTYwY2ViLCAweGUzYzYxYjhkLCAweGU3NTVmYTQ1LCAweDNlZTUwZDM1LAotCTB4ZjVlZGMzYWUsIDB4MTBlZDA5YmUsIDB4NWQ2NjhmOTgsIDB4NmQwYThjZTksIDB4NWI0NmFjYjksIDB4ZjczM2FmZDYsCi0JMHgzYjM5MDhhNSwgMHg3ZTQwMGQ4MCwgMHgxOTIyOWFkYiwgMHhmOTQ0ZmY4OSwgMHg1NzkxZDY3NCwgMHhlZmFlMGEwMywKLQkweDE5NGI2ZDc0LCAweDA3NDdlYjRhLCAweDI5NWNhMWExLCAweGY5ZGNhOWJiLCAweGU2YTgxY2RjLCAweGM3OGMwN2ZiLAotCTB4MjVjZjg5NWIsIDB4MjZlNWRmZTIsIDB4ZTMxMGJkYTcsIDB4MGZkYzU1MjksIDB4MzVjZjgxOWUsIDB4N2Q3ODA2ZWIsCi0JMHhjYjVkY2IyYSwgMHhmZWUxNGQ3ZiwgMHg2YjliNzJkYSwgMHhjMTJkYzUzMSwgMHhjMTNjYzU0ZiwgMHg5OGQzYTM1OCwKLQkweDMwN2M0NzkwLCAweDdiM2M5MjJkLCAweGFiZmZkMDViLCAweDhjMTViNDBjLCAweDI1MTIxZmFiLCAweGU0ZGZhNWUwLAotCTB4Y2Y4YzNlMWUsIDB4Yjk2M2ZiZjUsIDB4ZmQ1M2UzMTcsIDB4MGFlZjAwMGEsIDB4Nzc5ZTA1Y2EsIDB4YWVmMjIwOWQsCi0JMHhiMzNlODAzNywgMHg1YzlmYjVjMSwgMHhjN2Y0OGQzZiwgMHgxNzZlNjZkNSwgMHgyYWFjN2M4YiwgMHg2YjhmOWM0ZiwKLQkweDdhMTNiMWYzLCAweGU1MGNmODFlLCAweGQ2MWIwZGNlLCAweGRiOTlmZjkyLCAweDFlYmY5OWM3LCAweDhkOWY3N2M2LAotCTB4ZGRiZWZmYmYsIDB4Y2VhOThmZGMsIDB4MzVmMjRmZGIsIDB4ZjRmMjI5ZDUsIDB4MzZjZTQyNjksIDB4ZTc1NTljODIsCi0JMHg0NTRkZjgwZiwgMHg2NGZlODdiOSwgMHgzN2JkMWU0OSwgMHg4N2JkNzNiZCwgMHgxNGE0ZTQ5MywgMHgxY2Y4NjMxOCwKLQkweDc4YWE1N2U0LCAweDBhNTk5ZGVmLCAweDQxNjUyYmMxLCAweGNlZjM4NGJkLCAweDY4NjVkZTYyLCAweDY4MTlmZjM3LAotCTB4ZDdhYmVmMGEsIDB4NTMzZWJkYWYsIDB4NTZlYmY0OTEsIDB4NTQxZDIwNjcsIDB4ZjU4YWI1YTUsIDB4ZGZjZjVmYWEsCi0JMHhlN2ZlODJmYywgMHhmN2Q0MWNhMiwgMHhlYmU3ZDMwZiwgMHhlYzRjZWQwNCwgMHhmMTQ0Yjg0NywgMHhkZTJlMzU0MCwKLQkweGFkOTE3ZTlkLCAweDMwZGM4ZDA2LCAweGYyMzRhM2Q5LCAweGFkN2Y0MjY1LCAweGQwZTg5OWJjLCAweDQ3MWI5OWNhLAotCTB4OWYzY2QxZjQsIDB4NzlhMDFjZTQsIDB4NDBiOGI5M2UsIDB4MWFlYTllNTMsIDB4Y2I3ZmE5YWQsIDB4ZDk0ZDIyYjQsCi0JMHhhNmJkNzY5MiwgMHg0OWI5NGRiZSwgMHg3ZmVlOGU1MywgMHhhYzdlYTZhYiwgMHg3M2NkMzZlMywgMHg0ZWNmNGJjYiwKLQkweDY2MmUwMDkzLCAweDBkZDViN2FiLCAweGRlMDNhODcwLCAweGQyMTA5MTE4LCAweGFjZTIwMzFiLCAweGFhMjg3ZWI0LAotCTB4NmM3ZTQ2YzAsIDB4MDA0YjYwZGQsIDB4ODMyZWE0ZTksIDB4YmNiMGQzZWYsIDB4MDAyZDI0YjQsIDB4NmM3YjU4ZmQsCi0JMHhmNWMyMTZiNywgMHgwYzZmOTJmNywgMHg2MmFjNzNjNiwgMHg3NzU1ZjYxZCwgMHhmOTVlOGQzMywgMHgyYmU3MDY2NSwKLQkweGFhNjU3YWY1LCAweDVjMWE2ODdiLCAweDk5MjliNmYzLCAweGYwNjgwNDhjLCAweDM1OGZjNDJhLCAweDZiYmI3MThhLAotCTB4NzQzN2RmMTcsIDB4OTFjZmVhMzUsIDB4NjQ5NjdlYTEsIDB4YzU0YTBlMTUsIDB4YWYzYjc3NzYsIDB4OTFiM2JmMjMsCi0JMHhiZDQyZmJkOSwgMHg5MWJmNjJjZCwgMHhkYTk5OTc3NywgMHgxYWI2MzVlNSwgMHhmZGZjNjE5YywgMHgwZjJlNTQ4NywKLQkweGI5OGQ3MjFlLCAweDMyZjg4OThlLCAweDBkZWFjM2VhLCAweGY3ZThjZGM3LCAweDY4OWJmYjU3LCAweGQ3MjBlMWRkLAotCTB4MTZmN2RhNzEsIDB4OWFmNDJmYmEsIDB4ZDcwYTIzYjEsIDB4MWY1NTNkM2QsIDB4YzJlMjNkNzksIDB4NmJjZDMzNTQsCi0JMHg2NWUzOTBiZiwgMHg3ZjYxNjQ0YiwgMHgyYWE0ZjhmMywgMHg3Njc2Y2I5NywgMHgxYjhjNjQwNCwgMHg5M2UzNjk1NCwKLQkweGYyMGQzOTdhLCAweGRlZDc2MzU5LCAweDcxNDAyMjNhLCAweDExZDM5MDBkLCAweDBmNTU0NWZkLCAweDNjZDZkYzgwLAotCTB4M2FmNjg1OWYsIDB4Nzk0MzI3NWYsIDB4OWFlMzkwMjMsIDB4NDU1M2QzZTcsIDB4Y2IwMDZiM2MsIDB4NmZjMjc1YzMsCi0JMHhlNzExMGNiOCwgMHgxZTBjZGJmNywgMHg1ZGMzN2ViZiwgMHgwODdmNzA0NCwgMHhjMjEyMTZlMywgMHgwZTJmMGY1MywKLQkweDY5YzFjYmM3LCAweDE1YmY5YTg3LCAweDdiZDdkMmY4LCAweDZiZTM4MzJhLCAweDNhNzIzNzQ3LCAweGNlZWRjYTkwLAotCTB4MWYzMDUyY2QsIDB4MTVjN2E4ODUsIDB4MDMzYWY0NDUsIDB4MjAxNGE1ZDcsIDB4MGFiNmZlMWUsIDB4NjdiMmE4ZmQsCi0JMHhmNGZhODYyNSwgMHhkMTJmNGRhZiwgMHhhZTMzMjYzYSwgMHhhNDM4YzI0ZiwgMHg2OTU0YmY1OCwgMHg3ZmExOTY1MiwKLQkweDQwZTBmNDAwLCAweDMxYmFhNmZiLCAweGFhYWZlMzQwLCAweGZiYzI2ODJmLCAweGNlM2M4ZDU1LCAweGYxZTA2OWUyLAotCTB4NGFkNjZhY2IsIDB4NmVlNmRkN2UsIDB4MmE2Zjc1YzYsIDB4NTIwN2VmYTcsIDB4YzdiZjFhMTUsIDB4YmQ0NGVmMGQsCi0JMHhmOWYxNjBkZSwgMHgyYjdmYzQyNCwgMHg3NmNhNTdjNSwgMHg5NDFkNmM0YiwgMHg0ZWI2YWYzNywgMHgzZDJmNjQ4YiwKLQkweGUyZmRlMDJmLCAweGY1YzMzMzZhLCAweDFlZDA5NWU2LCAweDZiM2ZiMWU3LCAweDNiZTMxOWJmLCAweGNhMjUzYjY1LAotCTB4NWJlYTc4NjcsIDB4ZDZiZTYyYTYsIDB4ZDBjNGQ4YjMsIDB4NzdjNzUwOGUsIDB4N2U0ODJiMjYsIDB4ODQ3MzliZTQsCi0JMHhjNzg3MzkxZiwgMHhjYzVjZGUyZCwgMHhlZTc5MGZlZCwgMHg5ZDU3MTQ3YiwgMHhjOGZjMjU1ZSwgMHgwZTI4MTczOSwKLQkweGYwODU2NmY0LCAweGI4ZjJlNzIzLCAweGQ0M2JmNGM3LCAweDhlOTY4ZWJjLCAweGQzZDUzYTU1LCAweGY1NmU5ZTlmLAotCTB4ZTk1NWZhZjQsIDB4YTc2YTQ3NzMsIDB4ZjUwODMxOWQsIDB4MWM3YmUwM2EsIDB4MWZkZWYxZmEsIDB4NGMyN2NhMzIsCi0JMHg0MjZjZDRiYiwgMHgyYWY3YmYzZiwgMHgyODFlZTNiYiwgMHgyYjdkOTQwZiwgMHg5YWNlNWUzMSwgMHg5NWMxZjNmOSwKLQkweDVmMmUyNDliLCAweDNlNzE1Yjk0LCAweDg2NjY3NTk5LCAweDAyMDIzOWZiLCAweDUzYzQwMTRmLCAweDQzYTk0ZTMyLAotCTB4MzU3ZTQ2OGEsIDB4MWNhMzdiMDYsIDB4MDE3NWMxY2EsIDB4YzFhN2M3MDAsIDB4Zjk0OWRmY2YsIDB4MDY1ZjJlMjUsCi0JMHg2OWI2OTczZSwgMHhkNmJkMTg0ZCwgMHhjYWEyYjkwOCwgMHhlNjY2MDFiZCwgMHgwMTcxODlkZSwgMHhjNjA2N2Q2MywKLQkweGY4OTg3NzE3LCAweGQxNmM5NjNlLCAweDFkM2VkZjVmLCAweGI1YzEyN2UzLCAweDY1ZmZiYzRkLCAweDdmY2I1NTcxLAotCTB4OTRmZTEwYzksIDB4NzVjMTE2NzMsIDB4NWRhM2M4YTIsIDB4OGE1MDM0YmYsIDB4NzQ0ZWM4ZjMsIDB4NmYzMTUzMDcsCi0JMHgxMmE0N2Q5OSwgMHhlZjVkNWFmNSwgMHgxZmQwZjM5NywgMHhhYmMzZDc1MSwgMHg5MWU2ZjQ3MSwgMHgxM2JjNmMxZiwKLQkweDMyYmI2YmU2LCAweGRiNjlmMDhhLCAweGY0OGVkZWIzLCAweDI0M2JlYjZiLCAweDU3ZGU1MjM1LCAweDJhMmU3YWJkLAotCTB4NTNmYzBkY2MsIDB4NWQzN2IxN2QsIDB4YmRhNGYyZDUsIDB4NmRmZDY4YTcsIDB4NzhkY2ZmYjUsIDB4Njk4YjhmZTIsCi0JMHhmNzZkNWY3NCwgMHg4MWVlMzEyNywgMHhmMzJjZmY2MiwgMHgwNjVlOTEyNywgMHg5MTFjNmNiOSwgMHhjMmE3YWExZiwKLQkweDY4ZTc1ZDQxLCAweGYwODViYmViLCAweDNjMWRlNzc1LCAweDdhZDhjMWJmLCAweDY1NDY2N2VhLCAweGZkMGU1NDhiLAotCTB4OWE3MjYyZGMsIDB4NDdkZTAwNjIsIDB4NzA5YjRjN2EsIDB4ZDVkNzE3MzIsIDB4YzFjMWI4ZjMsIDB4YTVjNTJiNWEsCi0JMHg1M2I1YWQ1ZSwgMHg0NjliNTgzOSwgMHgxNTZiZDdlNSwgMHhlYzkxNWViYSwgMHgzNGUxMDRmYSwgMHhiZTlhYzVmNSwKLQkweGFjZTZiNzA4LCAweGE3OTg1ZDg3LCAweDQ0ZDA3YjNjLCAweGFlY2M2MGYwLCAweGMxN2RlN2Q5LCAweGVhM2M1MzJmLAotCTB4NWY1ZjAzNDIsIDB4ZTY3ZjhlYTIsIDB4NGVlNjBjYzUsIDB4OGE2MzcxZTQsIDB4MGJmZDJjNTcsIDB4YzU0NzM5YzksCi0JMHhmN2U4ZjFiOSwgMHg1YjZjYWUwYywgMHhkMmNmNjU4NSwgMHhlZTlkNjk0ZiwgMHgyODJmYTAzYiwgMHhlM2M4ZDFlZiwKLQkweDJkOGQ1NWE3LCAweGY0YjljZWI0LCAweGIzZjUwMjYyLCAweDFlMzFkMGMzLCAweDgyZmJjY2Y5LCAweGRlM2JlYjQ0LAotCTB4NGU2NzNjNjksIDB4ZDI4OGZhZTUsIDB4N2M0NTFiM2EsIDB4M2M1YTQ4NzksIDB4MWZlM2MxYzEsIDB4ZTVmOGUwNmMsCi0JMHg4MjQ1ZDU3OSwgMHhmYWFlOWExZSwgMHhjM2UyMWM0NywgMHhmNWExNTRiYSwgMHg2NDA3ZDUyMiwgMHgxOWFjYjM4YSwKLQkweDhmNjcxMWQzLCAweDZlMzE3NzIwLCAweGRlOTNlYjhkLCAweGY0OTRlYjEyLCAweGJkOTlhN2NmLCAweGMwN2Q3MTdkLAotCTB4ZmRlNDQzMzQsIDB4NTBiNDhlY2YsIDB4NzVkNzFmN2UsIDB4YzdmNTMyOTcsIDB4M2Y4M2Q3ZjcsIDB4Y2E4OGViNDMsCi0JMHg4Y2E3NDVmYywgMHg2ZWY5YWQ3OCwgMHgxOTZhY2ZmMiwgMHhmZGYwYzFmZCwgMHgzMjBmZTgwNiwgMHgzNGJkZmJjZCwKLQkweGFlNTY0YjdlLCAweDg1ZDZlZjI2LCAweDk4MzM1YmZlLCAweGFlYWE3ODAyLCAweDIwMTczMDAzLCAweGQ3NDU1ZjlkLAotCTB4MmFmN2RkZjYsIDB4YThkNjM3YzgsIDB4MmY1MTg3OGUsIDB4ZjIwNjdlYjAsIDB4NWFiY2FhMjcsIDB4ZTg0YjI3M2IsCi0JMHhlZTBjYWNhZCwgMHg4OWE3MTczZiwgMHgyZmMyYjJmZCwgMHg0MjY3ZmYwMiwgMHhlMjdmZjcxYSwgMHg1ZjhkMzJmNiwKLQkweDdlNGZiZmE0LCAweGM3ZWM1NTkxLCAweDc5NzgwMDFlLCAweGFmYjhjMjNhLCAweGMyZTMxOGNjLCAweDFkNmNkOTc2LAotCTB4ZmEwMzM3ZDEsIDB4Y2ZkMmJhNDYsIDB4MWYxYTQ2NzMsIDB4ZDNjZmNhOTcsIDB4MjhmMzlmOTEsIDB4YWNmYzRlY2UsCi0JMHg0NjQ4NzdlZiwgMHhjZmI0MGNlMSwgMHg1ZmIzNzc1NiwgMHhlZmMxMmFlYiwgMHhjMTE4MWI1NSwgMHg4MTIxYjNjYiwKLQkweDZkODY3NGUwLCAweDdhMDE4ZDcwLCAweGQ4ZTMwMzNjLCAweGQ2NzhmNDBjLCAweDg3OGU4YWU1LCAweGFlZGQ2N2Y2LAotCTB4MTA5ODg0ZTgsIDB4ODg2ZjU3ZmYsIDB4NzNhYjc2YTIsIDB4ODcyYzRhNmYsIDB4ZjdhMDhkNzIsIDB4MmIyMmM2ZjYsCi0JMHgwNmU2NzljMiwgMHhmYmVhNzdjZSwgMHg0ZjRjMDlkZSwgMHg2YTFhM2U0NCwgMHhkZTYzMzBlYSwgMHgyZGJmYTdhZSwKLQkweGExYmJlZDBlLCAweDIyMjcyN2JiLCAweDRlMzc3NWZmLCAweDc3OWYzYTc3LCAweGI0NDVkMmQ1LCAweGI4N2YxNTVlLAotCTB4ZDBhMTYyN2UsIDB4M2E3YjllNjMsIDB4ZDU3Y2ExMWUsIDB4ZGJmNDQ2NTIsIDB4ZDVhZmViYjQsIDB4ZmVlZGJmYzgsCi0JMHg5ZTZiY2E2OCwgMHg3YTRkMTNkOSwgMHgzY2QzZWNmMCwgMHhkNGM2NzlhZiwgMHhhYTYwZWI0YSwgMHhmNDc2Y2I3NywKLQkweDdjMmYzZDA3LCAweDlmZjIzMGZjLCAweGExNDU5NzY3LCAweGRlZmZiZDc4LCAweGI2YWViODczLCAweGFkMWQ3ZmQyLAotCTB4ZmVkY2E4YzMsIDB4ZDU0MWYyZGQsIDB4ZmVjOGJiZDIsIDB4ZDcxZmNiNTEsIDB4MzcyODVkNWEsIDB4MmU1YzhkZGIsCi0JMHg4NjdjNmMyYywgMHg5Nzg1ZDllYywgMHhmY2MyMGMyZSwgMHhmZjNkOTllZiwgMHg5OGU1MGMzZCwgMHg4NjE3OGZlNywKLQkweGU3ZWMzZWQxLCAweGU3YzMwYzJmLCAweDZiYTJlNzllLCAweGVmMjVkOTIyLCAweDhlMzhmMDY2LCAweDBlNzMxZmFhLAotCTB4OWVmMTM1MTksIDB4NzNmZTgyMDksIDB4YzYyYmFjNTYsIDB4YjY4NjRkNzMsIDB4YWY4NDcxNGMsIDB4ZDdkYTFiMWIsCi0JMHg4NjE3ZmI0MCwgMHgzODliMWUxZSwgMHg4YWRkYWMzNywgMHgzOTJmZGYyMCwgMHhmNDZjNjVhNCwgMHg3NDdhMzA5YywKLQkweGI4ZDQ5ODY2LCAweGQzOGFkN2QxLCAweGExMWZiMTMwLCAweDM0MTMyZTMzLCAweGQ1ODQzZWQwLCAweDZmM2YyMzQxLAotCTB4YTFmMjQyYTAsIDB4OGE3NjAwZmYsIDB4NGJkOTFkYmUsIDB4ZTQ0ZjZmNjcsIDB4NWQxODMyZTcsIDB4MWQyMjA2MTMsCi0JMHhmNjk3ZGVkYywgMHg3NWFmMzM4NywgMHgzZDk4NmU1ZiwgMHhhMDY4M2QzNCwgMHhmY2QzZGRmNSwgMHhlZmQ5MDA5NiwKLQkweGVmYWQyMzQxLCAweDk5YTRlZDU2LCAweGNkODgzZWU3LCAweDVkYzQyMjkxLCAweDBlM2ViZmZhLCAweGZlM2ViNmU1LAotCTB4NmVjNmIzZDIsIDB4MmZlZjA4OTgsIDB4MDhlY2MxNWQsIDB4MDYzYzdkM2YsIDB4ZmI5ZGIxN2UsIDB4ZjhkNzU5OTIsCi0JMHhkMDdjMTI4YywgMHg1Yzk1ZWQ4YSwgMHhhN2M3MWQ4MywgMHhiNzg4OTlkYSwgMHgzZWZjMDg4NiwgMHhiM2YzOWQyZCwKLQkweDgyMmI0N2NhLCAweDhhYzdjMjA2LCAweDJlNmIxOGUwLCAweGU3ODkyNzVjLCAweDcxMzZhMDBkLCAweGZmMGFlOGRmLAotCTB4MWYxOGFkZTQsIDB4OTZlOTcxNTgsIDB4OWVmMDgxZTgsIDB4NjI2ZTg3MTUsIDB4ZGJiZjIwZjcsIDB4NjJmYjU4YzcsCi0JMHhiN2RmNGJiYiwgMHhkMTBiY2Q0ZSwgMHg0YTdkZmU4OSwgMHgyMTI3ZDczYSwgMHg3ZWIyMjA3YiwgMHhmYmZjMTc4YiwKLQkweGQ4YjllOTVkLCAweDNkNmNmZmY0LCAweDUyNzU3ZTA3LCAweGFiZjI1MGZhLCAweDA3YjhmMDY3LCAweGZhZjVhYmY3LAotCTB4NmFiYjk1NDEsIDB4N2UwNGUzYmYsIDB4NTNkZGNhYmIsIDB4ZmY4MGJmNjQsIDB4NWM3NzcyNGIsIDB4N2FmNTQyYmEsCi0JMHg5MjI1MjdmYSwgMHg0YTY4N2M1ZiwgMHhiNWQzMTJhMiwgMHg4NzQ2M2VmZiwgMHg2YmFmMjEyMSwgMHhlNjlkYWFmZiwKLQkweDU5ZjczYWYxLCAweGYyNzE3ZmQxLCAweDhhNjc5NmZjLCAweDkwYTQ5M2U0LCAweDQ5NzFlNzVkLCAweGE5NjQ5ZjdjLAotCTB4ZDRmNTg3YzksIDB4ZjBhNzA1NzEsIDB4YTc1NGU5YjgsIDB4YWE4NmYyODksIDB4ODdkYWE3ZmQsIDB4M2MxZGNmOWQsCi0JMHg4YmRhYThhZiwgMHg3NDE4NWRhYSwgMHg5NGVjMzhmMSwgMHgxNWY5ZmMyMSwgMHgxMDZiZWVjOSwgMHhmNTg4ZWY1ZSwKLQkweGYyNDc0MzJkLCAweGY2Yjk4Y2ZiLCAweGNiNzQ3ZmExLCAweDdlMjMxMmNkLCAweDRhYTJmNjE3LCAweDUyN2I3YTlmLAotCTB4MWRkZjZmNWQsIDB4YmEwYTM3MWUsIDB4NWIyYmY5NTQsIDB4OWVhYTE3YzcsIDB4YmE3YTExYWEsIDB4MjI3NGY1MWEsCi0JMHgzNGNmZTllYSwgMHg1ZmJlYjc3NiwgMHhmNGFlZDNkMCwgMHgwOGM3NmM2NCwgMHgxYjBlNDNiZSwgMHhlZWZjOTE1ZCwKLQkweDM3NWZhMjEzLCAweDNkYWUwZmUyLCAweGUyMTYyZjgzLCAweDcwNThiMzc4LCAweGRkOGJmYTE5LCAweGIwOTc0ZmU5LAotCTB4NWU3YmJhNjMsIDB4NWY5ZmM2OTMsIDB4MDhkNzhmOGUsIDB4N2M1NzdmZmMsIDB4OWMzZmVhYmMsIDB4YmVlZDNiOGYsCi0JMHhiYTIzY2U2ZSwgMHg3ZWYwYTMzMiwgMHhiOTI4ZGJhNCwgMHg3Yzg4NTgyNiwgMHhjNTEzNjdmNywgMHg0YWY1ZjVjOSwKLQkweGZmMDYzZTg1LCAweGZiYmY0MzU1LCAweGY0MDZjY2IyLCAweGRjMTUzYzc3LCAweDU3OGJhZmZmLCAweGU0YmYyMzVlLAotCTB4ZDVkNjk5MjUsIDB4MGVmZjA0MmMsIDB4MTcwNWIzZWQsIDB4NDRhZDc0ZWQsIDB4MzNhZTE4M2IsIDB4ZmU1MGI1YjYsCi0JMHg3Njg1NDY2MCwgMHg4MzE4NzVmYywgMHhlNDc3ZjZjNSwgMHgzMmZjN2FkMCwgMHg0NGUyOTYzNiwgMHgzYjc4ZmU2NSwKLQkweDRiYWYyM2VlLCAweDg2ZjVhN2FlLCAweGIyYjJhZGRlLCAweGVkZmViYzM1LCAweDhmMmI3ZDZhLCAweGY3NGQyZDliLAotCTB4NmI3OWU3MmQsIDB4YWIyZmJlOGQsIDB4NWFmM2RiZDEsIDB4YzQ1YTNmZmQsIDB4MDNiM2JhN2QsIDB4NzFiMjZmOWUsCi0JMHgyNjQwNzI3OSwgMHg3OGM2YWVmZSwgMHg5OThjZDVkMSwgMHg0YmQ1ZjVkNSwgMHhkYWEzOWM3OSwgMHgyM2Y2OGNiZiwKLQkweDFmZTc4OTU3LCAweDQ3MTQ4MzFhLCAweDU0MTdmY2EyLCAweDlmNWZlNTNkLCAweDljYzg3YzgyLCAweGQ1NGY3Y2RhLAotCTB4MjcyNGMzOTYsIDB4ODQ5Zjc5ZjUsIDB4M2M4ZjJlMDYsIDB4ZjNjOGIyOTUsIDB4N2Q2ODkzMGMsIDB4YTdkOGEzNjMsCi0JMHgyMjM3MjhhYSwgMHhjYzVjNjFkYywgMHg4NjNlZTBhNywgMHhjZTNmZTQxMywgMHhmMzI1ZmRkOCwgMHgxN2Y4NGUzYywKLQkweDdmYjNjZjMxLCAweGY5NzJhNjVmLCAweDYzNzU0ZjNjLCAweDg0ZmQwOThiLCAweGRlN2JlNWNiLCAweGMzOGNlZjQ5LAotCTB4OTdiMDljNTAsIDB4N2I1ZmM3OTEsIDB4YzYzYjI1ZjksIDB4ZjU4OTdhOTcsIDB4NDc1N2MzN2UsIDB4Yzc3ZmY1ZjEsCi0JMHhkZjIyMjRlNiwgMHg5ZjY5NzhhYiwgMHhmZWQ5ZTFjNCwgMHhkODg1MjdlNiwgMHhhMzMxZDg2ZSwgMHgzZTExZDcxZCwKLQkweGJmZTJlNmZmLCAweGFkMzJmMjY0LCAweDZjN2YxOGQzLCAweDI1ZmEzNDcxLCAweDQ1MTZjN2VkLCAweDg3OWYzYzIzLAotCTB4YjllM2UyMmIsIDB4ZTMxMThjMzcsIDB4NzhhMWU1ODksIDB4N2JkMjA1ZjIsIDB4YjI3ODhiNzcsIDB4NmM1ZWY0MTEsCi0JMHg2ZmEzMmUyOCwgMHhkNzIxNTNmNywgMHg4YWRmMzBlYSwgMHhlNzliYjk3NCwgMHhkZGQyZWJmZCwgMHg1N2Y5NTNkNywKLQkweDEzZmY2OWJkLCAweGJjYzI3OWMzLCAweGM2M2EwMTllLCAweDk4MDBjZmI4LCAweDlmOTVlNjJjLCAweDMwMmI2MjhjLAotCTB4ZWM5NzUzY2YsIDB4ZTZmODk5N2UsIDB4ZjkwNTA2NTcsIDB4N2U1M2RhMDYsIDB4MjE1M2JiYzgsIDB4NTVhMTg4M2QsCi0JMHgwMjBjYzNjYywgMHg3ZGE1NjNkZCwgMHg4Zjk0NDk3OSwgMHgyZmUwNGFiOSwgMHhmNDUyZmMxZCwgMHg1MzM0NjEwZiwKLQkweDQwM2M4ZjMwLCAweDQ1MDY2M2U0LCAweDdmZjYyMzMxLCAweGU2YmRjOTlmLCAweDM0ZmZjYzRhLCAweDg4Y2IxZDE5LAotCTB4OTM4OTFkZTgsIDB4ODVlNmJiNjIsIDB4NzdjZjI3MjQsIDB4MzUyMWY5YWIsIDB4N2U1ZGRkZWYsIDB4MGNmN2MyNDgsCi0JMHhmOTQ1ZjRlMiwgMHgzMDk0ZTYyMCwgMHg4MWU2YWUxZiwgMHg0YTJlY2RkOCwgMHg1MTFmMmQ0ZSwgMHg3OTY3ZTc0MywKLQkweDlkMzdkOGIyLCAweDhiNGEyOWZmLCAweGE1NzE5ZjkwLCAweDZiZWY2MTMxLCAweGZhNmI4MWYzLCAweGZhNzQ0ZDNmLAotCTB4NmI4MGYzNTUsIDB4NzFlOWJmZDIsIDB4ZDVlZmRjMmIsIDB4ZmM0ODdiOGQsIDB4YTNmMjE0ZjksIDB4M2E3N2Y5ZmUsCi0JMHhmZmI1NjBiNywgMHhiM2JkZTkwMiwgMHgwZTcxMTYxZCwgMHg5MzhmMmI0NSwgMHgyZjE0NGRmYiwgMHg1OGZlMGIzOCwKLQkweGRkM2U5ODcyLCAweGRkZmJjNjllLCAweGZhMjIyZmViLCAweDhkOGUwODZmLCAweGM0ODdmYWM2LCAweGE2ODdkNWZkLAotCTB4ZGU3YjQ2NGMsIDB4ZmEzYTM0MWIsIDB4N2ZiODQ4ZDIsIDB4MGUzNDEwZDUsIDB4MWJlNGZiNDUsIDB4N2E2OTRiYzQsCi0JMHhhMzU5Zjk4NCwgMHhmM2QyM2ViOCwgMHhiZmUwOWM1MSwgMHhlNzBlMGNiOCwgMHg1ZmI5MzdhMiwgMHhmM2NjNTllNSwKLQkweDFkNzU3NjFmLCAweDczY2YwZDcwLCAweDkxNGFjZmVmLCAweDZhNzdmOGQ0LCAweDZlYzhmY2E0LCAweGVjYmQyZWJlLAotCTB4MmRmNjg5NzYsIDB4YzhmY2Q5N2YsIDB4N2ZiNmM2OGMsIDB4OGZhMjNmMmIsIDB4MjE5ZGRmM2IsIDB4NzkwMzIyZjIsCi0JMHhkZDIzYjlkYywgMHhhODRiZjM0ZSwgMHhmYjg4NWMxOSwgMHg3ZWY5ZDQ5ZSwgMHg5MDFmNzA4MywgMHg0M2U2ZWRmOSwKLQkweGVkZjllZmFmLCAweDM1MmZkZmY2LCAweDgzN2NkZDAyLCAweGNiN2Q5N2ZkLCAweDk2ZmMyZmZkLCAweGY1MmZiZmZiLAotCTB4ZGI3Zjg1ZGIsIDB4Y2JmZmRjYjcsIDB4OGZmZjcyZGYsIDB4ZmYwN2QyNDQsIDB4ZjVlYmU2YWYsIDB4ZmU3ZDc4ZjksCi0JMHhiNzk3OWY1ZSwgMHg4YmQ3MzRiYywgMHhkNjk1ZWVjZiwgMHg2YWUwMDQ3NiwgMHg0ZDM1ZGI4ZCwgMHg4YzY4NzkwMiwKLQkweGJkNDU2MmRmLCAweGU3OTIzMjU5LCAweGI1OGY1NmFmLCAweGExNDkzNmZhLCAweGFmMGFiZTNjLCAweDNmZGM1OTkxLAotCTB4ZjM5ZGU3YjMsIDB4NmNlMzU2ZTIsIDB4MjI2YzcwNjcsIDB4MzI0NmJiYzYsIDB4ZGFjZjZmZjIsIDB4MTk4YjFlNzgsCi0JMHhkNzk4ZTllZCwgMHgzN2U5OWE4MiwgMHg2NzUyMWQ4MSwgMHg3ZDA3OWM4YiwgMHhmN2YwYTdhZiwgMHg0YjFiZDFiYSwKLQkweGM4YWYwYWIyLCAweGZlZDVhNjRjLCAweDU5ZjY0OGNlLCAweGRiMmY4OGFkLCAweDE3YzUxOTFiLCAweGJmNDk1MTk5LAotCTB4YTRhYmRlODksIDB4ZTNkM2ZkYTMsIDB4MmUzZjdlNDUsIDB4Njg5YjljYzAsIDB4NGRjZTRhNWMsIDB4OTI4ZjZlNzQsCi0JMHg0MDdiZTM4MywgMHhhZTEzNjdlNCwgMHhmMTgzOTdlZiwgMHgwM2IwMDRlNCwgMHgxZWI3OGYzMSwgMHhhN2U0NzlmMywKLQkweGZhOWVhOWRhLCAweGRjOTlkZGJlLCAweGM0YzA3YTRmLCAweGVmMzA1Y2U4LCAweDExZGQ3Yzk1LCAweGJkOTE1NmIzLAotCTB4MGVlMWU2YTYsIDB4Y2IyNzAyOWEsIDB4OGRjM2NhMjUsIDB4NjJiZmYxYzEsIDB4Y2U2ZGU0MDgsIDB4NDQ5YzQ0MTEsCi0JMHgzZjI5NmRmYiwgMHhkZmM4ZWFmOCwgMHg3YmQzNzdmNSwgMHg4NmZlY2QxNCwgMHg2MTg3ZjQ2NiwgMHgyOWVlNzcxYywKLQkweGIxOWRmYTIwLCAweDZmZWQyNDc3LCAweDA5MWFlNGYwLCAweDQ2ZmM1ZGNlLCAweDQzNzgwNzExLCAweDM4ZDQzMWM0LAotCTB4N2E4ZjlhODAsIDB4ZGUzZmM0NWIsIDB4M2Y0YWI4YzEsIDB4YTE1ODRmM2MsIDB4YzM0Y2FjZWIsIDB4NWE5ZTc3YmYsCi0JMHgxNTljZmU1NywgMHgyMDNkM2Y0OSwgMHhmNzhmYjhmMSwgMHgyOWY3MWUxNSwgMHg4NGZhM2IzMCwgMHhjY2FjN2ZhZiwKLQkweDBmMmM3OGU0LCAweDFhODNiY2YwLCAweGNjNDI3OWM3LCAweDcyODdlMGE3LCAweDY4NzYwMmMwLCAweDY2ODFhYWMxLAotCTB4YWIwNWViZDQsIDB4M2FmMGEyYjIsIDB4YTQzM2U5YzgsIDB4Y2ZhN2JjMDAsIDB4ZjE1MDY5ZDksIDB4ZWU4ZTg5MTcsCi0JMHg4OWYxMTRjYSwgMHg4Zjk0MWQwMywgMHg5Nzk3NDY3YiwgMHhkN2M5OWRkZiwgMHg3MTY1ZTQxYiwgMHg2NGNlZWVmYywKLQkweGFmYjNiZTU0LCAweDhiOWEzOTcxLCAweGNiYjFhZTNkLCAweDY1NDFmMjkxLCAweDM4ZTJmN2UwLCAweGI4ZjhlYmNiLAotCTB4MDU5Nzc4NTUsIDB4NGY3YzIyOTQsIDB4NTU4ZWJlZGIsIDB4YzhhZmNkNzgsIDB4NzliOGEyMjksIDB4YjQ1NWI5ZTUsCi0JMHg4NWQyZTliZiwgMHgxYzUyZDdmZCwgMHhmZmEwYWNjYywgMHgxYjU1YjMzMCwgMHhjNTkwOWI0ZiwgMHhhMGNmZTdlMywKLQkweGJiNzA4ZGMxLCAweDZmZmU0OGNlLCAweGEyNDY3NWMxLCAweDFiMzI4NDlmLCAweDI2MDlhN2Y5LCAweDc5NjBjNzI2LAotCTB4ZjI4M2I3MTIsIDB4YjA4YTkzOGIsIDB4OTNjNGE2Y2MsIDB4NDA3Zjk3ZmQsIDB4MTc5YjlmODksIDB4NWMyNTZmOGEsCi0JMHhlMTE5MzhiNywgMHhhOGJjYjk3NCwgMHgyMmJiMjcxYSwgMHhhNDRiZjlkOSwgMHgxNzlhYWZkZiwgMHg4ODc4M2FhZCwKLQkweGYzYWE3YmQ2LCAweGU2YTJlMTUyLCAweDhiY2JiYjM3LCAweDNjMTJlYmFhLCAweGQ2Njg5ZmM1LCAweDFkOGM3ODUxLAotCTB4NThhZTMxZTMsIDB4YWNjZGE3YjAsIDB4Y2I0YjM3ZWUsIDB4MGI0ZGU1MDksIDB4N2NhMzlmNzYsIDB4ZjUxZjlhYTksCi0JMHgzYjIzOWNkNCwgMHhiMTk5ZGExYSwgMHgzZmEwMDE3ZCwgMHg0MzY0ZTQxZCwgMHhlZTliY2YyZCwgMHgxYTdiZmIxMiwKLQkweGFlNzhmZTYxLCAweGZlNjAxZmY2LCAweGZjYzNmNTc4LCAweGI1MGJmZWYxLCAweGE4MWFlOWZkLCAweDZmNzVkMDc1LAotCTB4N2FiYTA4ZWQsIDB4Y2YyOGU3ZmMsIDB4MzZhNjQyZmEsIDB4OGY5OWQ3NWYsIDB4MDg0ZDVkOTMsIDB4MWQ3Y2IwYWYsCi0JMHgzYWY5ZjU5NSwgMHg2M2M3OGEzOSwgMHhlZTMwM2Y3MCwgMHhiNDFjZjIxZiwgMHhmNDJlZmM5MiwgMHg3ZjQyZjc5NywKLQkweGVlMmQ2ZmUwLCAweDZhZWUzODVlLCAweGQxODU5N2NjLCAweDYxZDNiYjQ1LCAweGRiNmM3M2MzLCAweGU2MWIwZTVkLAotCTB4NGU5YTBhYzksIDB4NmE4NDdlZDEsIDB4MTVjZTkwNjMsIDB4YTYwNzNjZTgsIDB4Nzc1ZjFjZTEsIDB4MjFiNDJmZWIsCi0JMHhkNzliMmY3YywgMHg3OWZmZmM2YSwgMHhkNzkzMmZhZCwgMHgzMmY5MDViYSwgMHhmMjNmMjQzOSwgMHgyNmU3MDY1ZCwKLQkweGRhNzAxZWJjLCAweDg3Yzk4NmU2LCAweDE3OWUyZWQ1LCAweDliZGI5ZDU5LCAweDU3NDFlZmY4LCAweDYxMzlmOGVmLAotCTB4ZTYyOGFkZmQsIDB4ZWI4NDhhNzEsIDB4ZjdlMTZkNzIsIDB4NzllMmM4OWYsIDB4Yjk4OTA0YWMsIDB4ZTRiMWM5MjIsCi0JMHhiY2I4ZGY5ZSwgMHhlZjY0OGU0ZSwgMHhmNDAyYmZiNywgMHhjM2QwMzU3OCwgMHg1YWJkZjllZSwgMHg3MWI0YWU4OSwKLQkweDczYzVkNWI2LCAweGRiYjllMTdhLCAweGFjMmMzN2RlLCAweDY5YzM4ZjJmLCAweDk3NGM2Y2UyLCAweGRlMmVlYjRmLAotCTB4NDBkOGEzMzYsIDB4N2JjMmUyZTcsIDB4ZWI1ZjUxYjMsIDB4ZDhjYzYyZTMsIDB4YjlmNWNkOTEsIDB4ZTQ3MzljNTMsCi0JMHg1ODIzNjRjZCwgMHg1YmRhYmM5NywgMHgxNzM4NzdjYywgMHgzNjJmNGZlYSwgMHhmMzUwOWU5MCwgMHg0NmM1Zjk2YiwKLQkweDk5ZjQwYjU2LCAweGEzZTRkNGJmLCAweGIxYjE1YWJjLCAweGZmMGI5ZThkLCAweDNmM2Q4NTcwLCAweDNiYzllNTEzLAotCTB4OGM3NmNkMDcsIDB4NjBlM2U5YTMsIDB4NzUyZGUyOGUsIDB4YTNiZGExYmQsIDB4NmQ3ZGEyNTIsIDB4MzczZmQ2NWQsCi0JMHhmOGMzOGQzNiwgMHhhZWI2NjBkOSwgMHgxYmQ0MmM2ZSwgMHhlM2IwNmI5YywgMHhlNWNiZTU3YSwgMHgzZDg1ZjJlMSwKLQkweDIxOWY4ZmEzLCAweGExZmRhMTVkLCAweDJmNWZhMzhmLCAweGIwYmQ3ZWYwLCAweGJmNDNlZTk3LCAweDhmZDQzOTMyLAotCTB4MmY0ZjRlZGEsIDB4YmU5NGY2OGYsIDB4YmY3ZjJlMzAsIDB4NzE0NTZmZTgsIDB4YzQ1Y2VhZmUsIDB4YTE4MTg5NjcsCi0JMHgzYzUxNThkZSwgMHhkNjFiOWFjNiwgMHgyMzRmNTk1ZiwgMHg3OTg2YWY1ZiwgMHhiY2YwYTRiZCwgMHhlOWRmY2YxZSwKLQkweDNjYWE3OWYzLCAweDhjZmE2ODJiLCAweDA4M2VmZmY2LCAweDk1ZjUxOTcyLCAweGZmYzc4ZDI3LCAweDNjMjg1ZTBiLAotCTB4MzQyMjcyODAsIDB4MWY5ZmFlNGUsIDB4MzdiZjUzNGMsIDB4N2M2Nzg4ZTAsIDB4ZDE0ZmI0NWUsIDB4YjhhMjQ3YmIsCi0JMHgyN2M5N2U1YiwgMHhjY2ExYTM3YiwgMHg3ZmI0ZjE1YywgMHg3NzMwNzNkZSwgMHhlZjkzOWUzOSwgMHhjNTBlMzEyOSwKLQkweDk3MWUzYWZkLCAweGMyMjc5OWQ0LCAweGQ3ZTRkMDdjLCAweGY1YzdhZTJhLCAweDA3NTMwNWZjLCAweGE2N2UyMGI3LAotCTB4OWQ2ODlhOTYsIDB4YTZkN2U0ZGUsIDB4YWFlNTM5ZDEsIDB4YmE5ODJiOWUsIDB4N2MyODllZTksIDB4ZjNhMjVmZGUsCi0JMHg1NmJmMjYxYSwgMHg0ZjlmMDYzYywgMHg4OGMwMWVkOCwgMHhiMzg4OWIzOCwgMHgzYzE5MzkwNywgMHg3Yzg4ZDI3OCwKLQkweGZiYjI0NTcyLCAweDA1MzdjODI3LCAweGE4OWU0NDkzLCAweGE5ZTNlYjk0LCAweGM2MjY0OWZlLCAweDdlOGQ0NmVkLAotCTB4MWJmYWNlNmMsIDB4ZjNkNDc5YzUsIDB4N2Q3MTEyMDQsIDB4MmY0ODVlNDIsIDB4N2QwMWVjMTUsIDB4NTdkMjFiMTUsCi0JMHg3YTllYWVmZiwgMHhlMDlkYTdiNCwgMHgyYmU4MzU3OSwgMHgyNGMyNGYxYywgMHg2MmVmNGY5ZSwgMHg3N2ZjMDhiZiwKLQkweDkzYmE3ZmE3LCAweGM0NjdhOGJiLCAweDUyOTk4M2Y5LCAweGFkN2Q1NzVhLCAweDM4NjczYzYwLCAweDlkMTJlNWRhLAotCTB4ZmQxZGQ2ODMsIDB4Y2ZlYzI2YmQsIDB4YjZlYzZlZjgsIDB4NzZmZDA0ZDcsIDB4ZjFhOWFlYmIsIDB4ZmQxM2M5YmIsCi0JMHg3ODdmZTdiOSwgMHg1N2Y4NDg5ZSwgMHhmNTQ4YmU2YSwgMHg3YjA5ZmFjNywgMHgyMTVlYmQ1NywgMHg3YjdmYmJmYywKLQkweGQxMmEwMTNmLCAweDEyMDlmYjg4LCAweDk4MjdlZjIyLCAweGJkYTEyZjU5LCAweGQ4MjdlZWE0LCAweDNiODU2NjY3LAotCTB4YWIzZDcwOTMsIDB4NzNlNDRmZDgsIDB4ZWZiNDFkOTEsIDB4N2FhZDZmZDcsIDB4N2JjZTg5M2MsIDB4YTBjYzZkYzAsCi0JMHg5ZjQ4NWFmNywgMHg0M2ZkODE1NywgMHg2M2ZmOTJmNiwgMHhlN2FkM2YxZSwgMHgxYWFiYjFlYiwgMHhkNDk2ZmJiNSwKLQkweDVmNjE2Y2ViLCAweDUwZjk4NThmLCAweDc3YWM0NTllLCAweDkxY2UyZjFkLCAweGVmMjFjNTA4LCAweDIxYzc4NjMyLAotCTB4NTkzMDRhM2QsIDB4ZTNlYjQ3NWQsIDB4NWM0ZDE3NzksIDB4NjQzOGJiYjIsIDB4NzVhMGViMzUsIDB4OTIxNWQ1YjMsCi0JMHhiN2MzZjUwMywgMHg5MWVjOTcxZCwgMHhkZGFmNWRhNSwgMHg4M2NiOTMyNywgMHg0MjQ5NmU2OSwgMHg3MDZhZDVmYiwKLQkweGY4YmFkMjU1LCAweDZjN2VmODE3LCAweDY2ZmE3YzNkLCAweDQxM2M3OTcxLCAweDMzMWUzMWU0LCAweDZjNzg3YTczLAotCTB4NWJmYjQ0OTQsIDB4ZTIxYzFmNzAsIDB4ZjgxN2IxZjksIDB4ZjJjNzk3M2UsIDB4MzUxNzNlZjksIDB4NWZlZWExNmYsCi0JMHhiNzk0MzJiOSwgMHhlYTZmZmRhMCwgMHgxZjc1MTdiZSwgMHg3ODBmYmE4YiwgMHgwMGE4ODZkMiwgMHg5OWY3MDdkYSwKLQkweDFkYjhkM2VhLCAweDNjM2EyNWViLCAweGYzZDE5M2RjLCAweDZmM2YwYjI4LCAweGY4Y2UzZjVkLCAweDI4YzNjMmFjLAotCTB4ZjM3ZjBmODcsIDB4YWM4OGQxNzYsIDB4MjVhNjcxMDgsIDB4YWZmYzJmYzIsIDB4OThmYjJlYWMsIDB4MzBiZmZiNTQsCi0JMHhmZWM2YTg2YiwgMHhmZWRlYjJhNywgMHgxNmYyYTZmZiwgMHg2ZjlmMDE0MSwgMHgzMmFiZGU3MCwgMHhlNmY4ZGRiZiwKLQkweGZjNzJkZjY3LCAweDdiMjQ3Y2ZhLCAweDRiODhiOTc2LCAweGQ5ZTdlOWU5LCAweDY4YmY1NTJjLCAweGJhYzM0YmJmLAotCTB4ZmFlNDNmZWMsIDB4OGU1MjRlYmIsIDB4MmY2YmI5ZDIsIDB4NTQyNTczZjEsIDB4Y2IxNzVhMzksIDB4ZTQyMTVmZmIsCi0JMHg1NDdkN2FhNywgMHg5MTRjZWI1YywgMHg4ODRmNWZlMywgMHhlNzY0YjNlNywgMHgwMTkzYTQ3MiwgMHhjOGYxYjRkYiwKLQkweDc4ZGFmNTgxLCAweDA5OGRkNWU0LCAweDQwZTBmMjlhLCAweGMxN2VhNjg2LCAweGU3OWFkZTgxLCAweDY5NTc4MzQzLAotCTB4MjM3ZjBmOWUsIDB4ZDkxZTUzNWYsIDB4N2Y1MzRhM2EsIDB4YjQ2Mzg3ZjQsIDB4Njg3NTVhZTcsIDB4NWVkNzkxZTMsCi0JMHgyZmI3NDliYywgMHgyYmYwNDdkMiwgMHg2ZjBkY2EwNCwgMHhhZDlkNjQ1NywgMHhhMTU5OTdhOSwgMHg4ZDU2NTc5ZCwKLQkweDk2YmQ1ZTc2LCAweDJmY2VlODI2LCAweDc4ZTZmZGUxLCAweDUzZWJmM2I1LCAweDAyNWY5ZGE3LCAweGJlZjJkM2U2LAotCTB4ZDRjZDNlN2UsIDB4ZWNmN2ExNTMsIDB4NjFiMWY3ZjUsIDB4NzM4YTA3YmIsIDB4YTk5ZjY4NmQsIDB4YzFkYjk5ZmIsCi0JMHg2NDExNzg2ZSwgMHhmZmI2OWZkZiwgMHg5Y2Q3ZDY5NiwgMHgwNmVkYTI3OSwgMHg3OWU2Y2YzYSwgMHgwMzc5ZTE5OSwKLQkweDU5NjNkYmVkLCAweGEzZTNkZTgwLCAweDM0MTYyODczLCAweDY2MWVmNGM4LCAweDFjOWIwYzBjLCAweDlkMWFmZTc2LAotCTB4ZTlmMjhmNGMsIDB4OTExMjU4YTksIDB4ZjhiNjllMGIsIDB4ODJmZGEwNGEsIDB4ZTEwNjI3NWQsIDB4N2JmNjkyZmUsCi0JMHhmYmNiM2U3OCwgMHgzMWYxNDQ4NCwgMHg4NDFkNmRlNiwgMHg2MDU4NGJkZiwgMHhhODlkZmM4YywgMHhiY2I4YjJkNywKLQkweDlhM2JiZDNiLCAweGRiNDllYmQ2LCAweGJmNTI2NjlhLCAweDMwOThiN2Y1LCAweGRiZDZhNjlmLCAweGE4NDlmYzJmLAotCTB4M2QzZGY3YzcsIDB4NWU3N2QxMmUsIDB4NzFlMTdjNzAsIDB4MjdiYmY1NGQsIDB4ZmFlNzFmYTcsIDB4ODlhMzQxNmYsCi0JMHhiMDU5ZWZjZSwgMHg5ZTNiNjc2ZCwgMHgwZGUwYmQ1NywgMHhlNjViOWQwYiwgMHhmNDhlNzZkOSwgMHgzYjUzZDE2YSwKLQkweDQ2OWVjZTA4LCAweGQ1YThiZDk5LCAweDgyNzNkYTU3LCAweDVkYjhmMWI3LCAweGU5MTU0Mzc1LCAweGZmOTMyODQxLAotCTB4ZjkxZjVkNTUsIDB4OWRjYmVjYmMsIDB4YTlmMGJiNjcsIDB4MDBiY2JiM2QsIDB4ZmNjZjg1YzIsIDB4MWVlMzBlMmUsCi0JMHhjNmI3MDUxZiwgMHhlZGJlZGY5MSwgMHhlZWU5Y2Y4YiwgMHhmZDcwMmU3MiwgMHgxNzNjMmZlYSwgMHgwM2ZjMjNmOCwKLQkweDJjYzVjYmU0LCAweGRiY2FiOWRkLCAweGE5ZjdjNTEyLCAweGY3YzJjMzAyLCAweGU4ZTA4N2Y5LCAweGYxZGU3OGU1LAotCTB4NmU3ODIzZTksIDB4M2ZhN2U5ZmQsIDB4NWJjNzA0N2UsIDB4OGYwYmFmZjksIDB4YWRmNDk4ZmMsIDB4YzM3MjhlY2QsCi0JMHgzYTYxYzRmMywgMHg5NzZkNWJmNywgMHg0MGU1Y2Q5MCwgMHhhM2JmZTNmYiwgMHhkZmRiZDJmMywgMHhiN2IwMzhiNCwKLQkweDY0MWYzZGY2LCAweGVmYjc3ZDIzLCAweGUzMDUyY2ZjLCAweDhjZjc4YjVjLCAweGUyZjA3OGEzLCAweGYwYmU4YjY3LAotCTB4Yjc0ODZiN2IsIDB4ZTNlMTdlYmUsIDB4M2U3Mzc1ZjIsIDB4Y2Q1ZjE2YjEsIDB4MzhkOWNkMGQsIDB4NmY4MDMzY2UsCi0JMHg5ZTc1ZjM4YywgMHhjNTVmNWNmMywgMHhjNDU2Y2RjZiwgMHgyM2RiY2VmOSwgMHhlNWRmOGI5ZiwgMHhjOTg2ZTczYywKLQkweGVkMGY3ZTM3LCAweDJlN2UwNjllLCAweDc1Y2Y2NWNjLCAweGJjNzgwNDNlLCAweDZmZTA0YmZhLCAweGJlNzE2YWZiLAotCTB4OWRmYzY0NDksIDB4NGYwMDNmYzEsIDB4YjllZDZjOGUsIDB4Y2MzNjlmY2UsIDB4ZjhkN2Y0N2QsIDB4ZGJiMTIxYWMsCi0JMHg1ZjAzOWQ3MywgMHhiOWVhNmUwMiwgMHg3MmNjZmZmYiwgMHgzZTQ2Y2U4ZSwgMHg3NGY3ZmE3YywgMHhhZGUyMzY4ZSwKLQkweDNhNzNjMTQ0LCAweDdmNDZjZDNlLCAweDA3NTM0M2VlLCAweGIxZDcyYjlkLCAweGVmYzc2MmM3LCAweDczZDgyZDM3LAotCTB4ZmRhN2Y4OTQsIDB4NjRiNzFlNTksIDB4NzZmYmZjZTIsIDB4ZTdlM2Y5ZDYsIDB4OGE5ODhiOTUsIDB4M2YyYzRiNjcsCi0JMHgxZmMwNWEwZiwgMHhlMjU2OGJjZiwgMHgxNzM4YmVlOCwgMHg3YWIxZDM5YSwgMHhlNzc3NzQ1ZSwgMHhlZWNhMmY0NCwKLQkweGY4OWNmNWNkLCAweDk2ZDU0MDFlLCAweDlmYjk5YWJmLCAweDM0OTdjMjFhLCAweDdmZTlmNjgyLCAweDJhZGJmOWUxLAotCTB4YmZjMmVjMWMsIDB4OTZkYmM0ZWIsIDB4Nzc3MWU3YzgsIDB4ZjAyZjhmOWUsIDB4NzNjM2Y4ODUsIDB4MzVjZjNhM2MsCi0JMHg1NDM1ZjI4NywgMHgwOGIyOGU5NiwgMHgxMzdkYTBmMiwgMHhiZGJkMmYzZiwgMHhlZWE5ZmQxYiwgMHhkNmNhYWEwZiwKLQkweDY3OThhOWYxLCAweGYyYTFmYzc3LCAweGZmYzZlNWU5LCAweDMzMzNlMTU1LCAweDhiZDBkMTViLCAweDk3ZDNhNzBhLAotCTB4NzVmMWNiMjIsIDB4YjZiZmVmODIsIDB4NjJlY2UzZmQsIDB4ZjQ4ZmRjZmYsIDB4NjZkMGQ1NTgsIDB4NDRkOWZiZTYsCi0JMHhmN2NjNTQ3ZSwgMHhmNGRmZDgzNCwgMHg2NDI3YTRmZCwgMHhkNTU3ZTNiMiwgMHhkNzFjOTMzNywgMHg2ZWVhOGJjYiwKLQkweGIzOWI2ZGYyLCAweDcxNTNiYWM1LCAweGE3ZTljMTRlLCAweGVmYjg3ZDYzLCAweGRkZGVmNGVhLCAweGY2ZWZmZDdjLAotCTB4ZmExN2IzMzYsIDB4MTllZGJmZGIsIDB4NzIxYjhmMzMsIDB4ZTEzZDQxZmUsIDB4ZTlmZjFiMGIsIDB4OTEwNjliMjcsCi0JMHhkZDY2ZWVkYywgMHg4Zjc4YmQ3NywgMHgzZGY5MWZjNywgMHgzNGU3ZWQ5ZSwgMHhhZGU4NTllZiwgMHg3MmVmZmYyNywKLQkweGU4YzhmYmVmLCAweGZiZmIwNWJjLCAweDNiZjdjODI4LCAweDRmZmI4NDdlLCAweDE3ZmZiYzIzLCAweDE3NjEyNmQ5LAotCTB4MjJlYjEzYWUsIDB4M2YwM2RlNDEsIDB4OWVlMDJiYmYsIDB4M2NmNWNiZDYsIDB4OWQxOTk5YzIsIDB4ZTNiZTEwODMsCi0JMHgyNzI1OTE3ZSwgMHhhZjk3OWYwMSwgMHg3ZmE4ZWM5NSwgMHg0YzE4YWY2NywgMHg5Y2NmOTI3NCwgMHg4OTY1Mjc0NCwKLQkweGZhOTM3YmZjLCAweGU2Y2YxY2Y3LCAweDFhYjZmYzdhLCAweGMzZmE0MzEzLCAweDI4MGNkZWQzLCAweGI2MjRlYjdmLAotCTB4MzE5N2ZiODYsIDB4ZTc0MjUzMTMsIDB4NmVhZDU2ZDEsIDB4MGFiYzIzODksIDB4ZWYzZDUzM2YsIDB4M2U2NmEyYjYsCi0JMHgzOWZkMDdjOSwgMHhkZWFjOTUzOCwgMHgyZDZmZTc4YywgMHgyZGNmY2I1OCwgMHhhMzhiOWZkNCwgMHhjZjVkYWI5NywKLQkweDg1ZmI1YTg5LCAweDk1NmRmNjcyLCAweDgxY2MxY2VmLCAweDA3ZTczNzdjLCAweGQ3ZTQ1NmIxLCAweDRhNjhmMGFlLAotCTB4YjNjYTA1YmUsIDB4MDdhNGM4MGYsIDB4MmViMGI4NTQsIDB4ZWJjYmZkZGYsIDB4N2YzY2Y4ODEsIDB4OTczZjJmYTAsCi0JMHhiMTUyNTE1YywgMHgzYzFlOWNkZSwgMHhkZDE5MjgyZSwgMHg1OTdlZjFjMywgMHgxOWI4N2JhMiwgMHhiMTliZWFlNSwKLQkweGI1OTZjN2I4LCAweDdjNTAzNDVkLCAweDM2NTk1OTgwLCAweDU5ZDk5MzhlLCAweDUzN2RiODc2LCAweDYwYTdiMjZlLAotCTB4MTZjYmM0ZGUsIDB4NThmYzUxYTUsIDB4ZWIwYWRkZmYsIDB4MWVmZjIwZGEsIDB4MTU3YmY2ODMsIDB4NWY5Yzg5NjUsCi0JMHhlZmYzNzYzYSwgMHgxZTQ2YjFlZiwgMHhlYjMyYjZiZiwgMHg5Yzc3OGMzMiwgMHhlMGE1ZDY1MiwgMHg5NWFlNTQxMSwKLQkweGM1M2RmZTI2LCAweDQ3MTRmMWVkLCAweDkxNDU2ZGI4LCAweGJhNWZjZjE5LCAweGY2OWUyMWFkLCAweDkzYWYzMGI1LAotCTB4ZTJhOGNmYmUsIDB4YzE0NTZkYjEsIDB4ZjdlODM0ZmUsIDB4ODcxY2ZhYjYsIDB4MjY5ZmM1YWMsIDB4YWVhMGJjMWUsCi0JMHhjOWRiYzU0ZCwgMHg2NGVkZTBjYiwgMHhiZTAxYmMyNCwgMHg3YTEzZjczNCwgMHhlZWM1ZjE2OSwgMHhlOTRjZjZlNiwKLQkweDYyZmFmYjFkLCAweDBkN2NlZWZlLCAweDc3NjMxZWZmLCAweDM0MGU5MmYyLCAweDM1YzUwOTRhLCAweGUzM2EzMzhiLAotCTB4ZWY0ODI5YjUsIDB4MjUwZWQ2MTcsIDB4NTVmMWU5YmMsIDB4YzNkOWFmZmMsIDB4N2IzMzdmNzEsIDB4MDVjZTk2MmIsCi0JMHg2NmMzZWIyZSwgMHg2ZmYxODRkZCwgMHhkOTUzZjM4OSwgMHhhMzE2MjYyZiwgMHg4YmQwMWFkZSwgMHhiNTZiZmRmMywKLQkweDgyZDlmZTNjLCAweDc4N2VjZmYxLCAweGNhOWRiYTZlLCAweGYzZmM0NTg3LCAweGUxM2ZjNjI4LCAweDNmYzYyNmZhLAotCTB4N2M1MjdhZTEsIDB4MzNlNTQzM2YsIDB4ZDdhMjAwMjAsIDB4N2YzOGJkYzEsIDB4ODkyNWVlMGQsIDB4MzRlMmRkZjgsCi0JMHhmZjhhNGJiNCwgMHg3M2YzOGIyNSwgMHg2MTYzN2Q3ZSwgMHhjZTg3OGQwYywgMHhhM2ZlZjljYiwgMHg3YmQxYmViZiwKLQkweDNhMzc2MzBkLCAweDY5YjRmMWI1LCAweGI0ZjFiNDUzLCAweDY2MzkxNWYyLCAweDczNmZkN2Y0LCAweGEzZDRkNjhkLAotCTB4MGY1YWJjODgsIDB4OTI1ZTk4YmEsIDB4MzM3ZTc5YTgsIDB4YmZjYzM0YmUsIDB4ZjBhNWVlMmYsIDB4MWY3MTQ3ZjgsCi0JMHg0YjViYmQ0ZCwgMHgyYTViZGZiNSwgMHhiM2M2NjhiZiwgMHg2MmRiZDk4NSwgMHgyNmIzMzA5ZiwgMHg4N2JmYzIxOSwKLQkweGYxY2E0NDAyLCAweDNlNmRlNzYyLCAweDQxNmUzYTMxLCAweDYwZTRmYzdhLCAweDVlNzI4NGIyLCAweGFmMTUwZjhmLAotCTB4MDgwMDM3YjMsIDB4MWIzOWRmYTAsIDB4YmQ5Nzk0MGMsIDB4NTVlM2I2NmIsIDB4YWVlY2NmM2MsIDB4N2JmN2Y4YTcsCi0JMHg0NjdiYWU0ZSwgMHgzOTgwNWRmMywgMHhiZjg0OTk0ZiwgMHhhMWZiMjc2MywgMHhmMjMyYzU2OCwgMHg2MDdkY2EzYiwKLQkweGNiODgwMjJmLCAweGEyM2VmNDVmLCAweDQ2N2UzMTk2LCAweDBmOTE1OTRiLCAweDgwYmVjOTBlLCAweGUyNzI3ODQ0LAotCTB4NGZiZDgzZjcsIDB4N2U0N2VmZjAsIDB4MGVkODYyMDgsIDB4MmI3Njc3ZmEsIDB4MTI4N2M3MWYsIDB4NTNlNTgxNWIsCi0JMHhmZGZiYjdiNiwgMHg2Njc1ZTYwMCwgMHgwNjc5YmFlMiwgMHgzMDdjOGRjNCwgMHhkM2UyZTQ5OSwgMHgyY2ZhNDMzMiwKLQkweGU3NDRjM2JkLCAweDU4N2VkZTM5LCAweDMxZjRlZmE2LCAweGM1NTMzZjI5LCAweGQ5Y2JlNjJiLCAweDFkZmUxNjEzLAotCTB4MDRhMDBlOWIsIDB4NzFmOGI3YTgsIDB4OGY5ZjdkMGIsIDB4Y2ZjYjAzMjgsIDB4MTFhZGY0MGUsIDB4ZjJmNDg4NzQsCi0JMHhjNjczM2M2MSwgMHhmZTc5NjBkMywgMHg2NDk2YTNlMCwgMHg4MjExOWY1YSwgMHhjZTEwNmY5YiwgMHhmYWUwOWJkNywKLQkweGEzYTAyZjUxLCAweDA2ZjllNjhmLCAweDNiYmFmYzkxLCAweDBmNDdmODk5LCAweDJlNjY5M2RmLCAweGVmNDhiYzlmLAotCTB4ZWEyZTQ4NTIsIDB4MjZkOTk2ZWQsIDB4YzdkZjdkMDcsIDB4YTNhNDg2Y2IsIDB4OTZiOTNhNWMsIDB4ZjQwZjQ3N2YsCi0JMHgzZjVmMWM0YSwgMHhhYmQxMzRmMywgMHg0NjkzOWVmYSwgMHhlZjhlM2M2NSwgMHhlOTBlNWQ2NCwgMHgwYWQ2ZGJhZiwKLQkweDA2ZjQxMzdmLCAweGZhZTNlZmFmLCAweDQ2ZWNiZDZhLCAweDI3NWJjM2JiLCAweGFmOWRiOWI5LCAweDRkYjc4ZmE1LAotCTB4Njg4YjllZGUsIDB4ZDY4ZGIxZmQsIDB4NjgwOWRjYWYsIDB4OWRjYTNjYzUsIDB4MmVjOTUzM2IsIDB4NWJlYzI5OTgsCi0JMHgyZGRiYzY5NiwgMHgzYjNhNzNiNiwgMHgwZjRmYTA3ZiwgMHhlYTdhZDdkYywgMHhlYTAxZTAxMCwgMHg3NWYzYTdiNCwKLQkweGFjYzZhNzA1LCAweDM3NDc4NjFiLCAweDFkZWMzNjlkLCAweGZmYjgwM2Y2LCAweGZiZWY0NGYxLCAweGM4ZGJjMDQ2LAotCTB4NWVlNmY3NmMsIDB4YWMzMjlmMTgsIDB4NDQ3M2M2Y2QsIDB4ZmM0ZmZhY2UsIDB4ZjUwZmJmMWMsIDB4ODM5MzBlZDEsCi0JMHg5N2U5NzRkOCwgMHgwYzRlZDNiMywgMHhlYjgzNWQ4ZCwgMHhmMmViNjdjMiwgMHgzZjA0MjcwNCwgMHg1YmY4MjkzYywKLQkweDhiNmZjZmQ1LCAweGE3MDM2Y2YyLCAweDI0ODJmNjNmLCAweDM0YzQ2YmJlLCAweDllMjE3ODcyLCAweGU0ODcyYTQzLAotCTB4MmI4NzJhYTUsIDB4YzdmYWRkODUsIDB4M2U2ZWRjNWUsIDB4NjBhNWQ2YzUsIDB4NGZhMDA1YmQsIDB4M2IzY2ZlZjEsCi0JMHhiNzJhNGJiNywgMHg3ZWU3ZWZmMSwgMHg0YzljN2M4NCwgMHhmNWMzMWE3ZCwgMHhlNDE2N2NmMiwgMHhlYTAxNGU3YSwKLQkweDc3ZGQwOTQ5LCAweGMwMzg4YjQ1LCAweDQwOWZiZTNhLCAweGI5ZTdmNzJmLCAweGUwNmZmYjdkLCAweGEzMDAzYmZkLAotCTB4N2NmZmU0NWQsIDB4OGYxYjFhZTYsIDB4M2M2ZGViNzEsIDB4ZmY5N2FjOWUsIDB4YjliN2U4NGMsIDB4M2Q3YTdkZTIsCi0JMHhiYmU4NTczMCwgMHgzNzdkM2FiOSwgMHhjZThlNzFjZiwgMHgwZWRjYTkxZCwgMHhiMmI5NDVlZiwgMHhjMmVmYWI0ZSwKLQkweDlhNDRhOWU2LCAweDg3MmYzY2U3LCAweDg3M2YzY2Y3LCAweDc2OWQ3YmNiLCAweDA4ZmRhMzBkLCAweDNkNTlkYzJhLAotCTB4NzdiNGQzZmMsIDB4NzkxYzYxYzUsIDB4YzMzMjgzZmUsIDB4NzhhYTFjZWYsIDB4ODIzZTY2YTgsIDB4YjAyY2M3ZjcsCi0JMHg4ZjE4ZWQwYSwgMHgwNjJlMzFiYywgMHhhMWYwYmE3MCwgMHgyZGM3ZWNiZiwgMHhhMDZiOTQ0YSwgMHg3ZWZlZjNmMywKLQkweDk0MjdiM2JmLCAweGE0YjJmMzdiLCAweDZmN2VmZGZjLCAweGQ1NzBhZWNmLCAweDgyOWJmMWMzLCAweDZlZjkxMzFiLAotCTB4OTg2MzA3NmEsIDB4Mzc3Zjg1YmIsIDB4YzkxZWFjM2EsIDB4MDkwMWZmZmIsIDB4MDBkMGE4ZjUsIDB4MDAwMGQwYTgsCi0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgzYmVkZmYwMCwgMHhlNTU1NzQ2OSwgMHg3M2RjZmJiNSwgMHhlMWRjODQ4NywKLQkweGMyMDQwNDY0LCAweGMwNmU0OWI5LCAweDYxMmY0ODY1LCAweDEyMTNkNDFlLCAweGRlMGQ0YjIyLCAweDAwYzEwNTgwLAotCTB4ODYxMjAxMzcsIDB4N2MwNzUwNGMsIDB4MDA0MGUzZTIsIDB4YWExYTQ1ODMsIDB4ZjUwYWY4YTUsIDB4MjJkMjgzNDIsCi0JMHhiMDRhMDgzNCwgMHhjMTQxMTcwYywgMHhkNmRlOGJhNywgMHhhNDRmN2Q2YSwgMHg0MDkzMjg2MSwgMHhkMmJiNmE1MiwKLQkweGY3Yjc5NDU3LCAweDNiOTM5ZGY3LCAweGVkODNhNDA0LCAweDU4YjU5M2FmLCAweDllZjM3ZWZiLCAweDc3ZjdiZGJmLAotCTB4NTIwMTUwMDAsIDB4YWFhOGU2MDEsIDB4ZDA4ZWNlYjUsIDB4MDkyYmQwMGMsIDB4NzJjMDZlNjAsIDB4ZDgwZTM1YjYsCi0JMHgzN2ZjMGRkZiwgMHhiYjc0NmI3ZiwgMHgwMWU1ZTY5NiwgMHhmNzQ3Mzc1NCwgMHhhNDFjNWZlMywgMHhiZmU2Y2MwMSwKLQkweGZmNTYxNmExLCAweGQ4NDVjYzQxLCAweDc2NmYzZDEyLCAweGU4OTBlYWRjLCAweDU1NjY3OWE0LCAweDA4NmUxN2ViLAotCTB4YTFlNmNhMGMsIDB4ODQwY2ZhZGEsIDB4OWYxMmEyNGQsIDB4NmUwZjM1MWIsIDB4Y2E3YTAxYjgsIDB4Nzc3Mzk0OGUsCi0JMHhkZTBiYzM2MSwgMHhjNWMyMjIxYiwgMHgwMDIzMDBjOSwgMHg1Yzc4MTc0YSwgMHg0MzljMWNmZSwgMHgyMTg2Zjc3ZiwKLQkweGIwOWU3NDY4LCAweDM5Y2QyM2MwLCAweDA5OGE2NTg0LCAweDY4Yzc5Y2YwLCAweGIxYzY5OTRmLCAweDQ3N2Y3ODhkLAotCTB4NjE3YzY3ZTIsIDB4YzE4NjRlZjYsIDB4MTU0ODNmMDgsIDB4M2E2ZjNjNTQsIDB4ZWJhMjM2ZTEsIDB4NzFlYjE1YmUsCi0JMHhkZjg4NDFlNywgMHgxMWY4MTM3YSwgMHhjYmJmNWI5ZSwgMHhmZTNlNDdlOSwgMHg2OTVkYzVmZSwgMHg4ODc3MmIwNCwKLQkweDY2MDg0NDEwLCAweGRjZjAxNWJmLCAweDJmNjVmNTgyLCAweDU2ZmI4MzNmLCAweGRhZjc4ZDZjLCAweDg4ZTJiYmIwLAotCTB4M2M3MDA4YmYsIDB4MjUyYjdjMGYsIDB4ZTNkNzk3MWMsIDB4ZTA3MGMzNDEsIDB4NzFkZDg0NDUsIDB4ODQyOGYyM2QsCi0JMHhkZmQ5ODJmZCwgMHg1MTNkZTY4ZiwgMHhkOTI3ZWZlMSwgMHhkMTg3ZmFhMywgMHhmNGNjNGZiZSwgMHhlZTNmN2NmZiwKLQkweDA0YjZjNGZiLCAweDkyNDhjYWFmLCAweDQ0ZTFhNjgyLCAweDg0MDQxNDg5LCAweDdiN2YwYmQ1LCAweDA0ZmM4Y2QyLAotCTB4OWU4ZjgzZjEsIDB4ZjJiODAxNGEsIDB4YjZjNDA4YmEsIDB4ODE3ZjI0ZWMsIDB4Y2ZkYzRhOWMsIDB4NzAzZDA1ZWIsCi0JMHg1ZDI5Yjg5ZSwgMHgyMmY2YzRjYSwgMHhlZmY5ZWNlYywgMHg4ZDRjZTdlNywgMHg0ZmM0ZTU5ZiwgMHhkNTk5ZTkxNCwKLQkweGYzYTUwZTFmLCAweGJlNzAzNzRmLCAweDRkOTlmYWNlLCAweGYzOTdhN2UzLCAweGU3ZTczNTczLCAweDMzOWY4ZDRjLAotCTB4N2UzNTc4OGYsIDB4NGY4OTJiY2EsIDB4OWY4ZDZhZjIsIDB4ZWFjZTFjMGQsIDB4M2E3NTM3YzIsIDB4NGZjNGY1ZTEsCi0JMHhhNzE1NWU2YywgMHhhNjBmODg1YywgMHgxNzNmOTA5YSwgMHg0ZjUwOGE3NiwgMHgxMmE4MGI2ZCwgMHg0NDg1YzNkYSwKLQkweGRmNTExMjUwLCAweDNmOGQwNGZmLCAweDdlNjEwYTBlLCAweGU1MGVjZGNlLCAweGQyOWU5MTA2LCAweGM0OWQ0N2I1LAotCTB4NDUzYmI5ZDcsIDB4M2YyYzcwNGUsIDB4NzNlZWU5NDEsIDB4YzgxZjllNDQsIDB4MjRkNTNjMjUsIDB4MDg3OTQyZGYsCi0JMHg0MDhhYTVjMCwgMHhiN2ZiZTEyZSwgMHg4MjVhN2RmMiwgMHg3OWUzZTUyMiwgMHhkZTJkZmJlZCwgMHgzNmVmYzhjZCwKLQkweDg1YzAxNTg3LCAweDgzODRmNjc2LCAweDIyNzI2NWMxLCAweDNhODE2NzliLCAweDUwNWYzYzAwLCAweGY4ODQ1ODE0LAotCTB4ZGQzZTUwZGIsIDB4YjIxNTllOTAsIDB4NTkwNWM2Y2MsIDB4ODdlYzUyODIsIDB4N2UxMzIwMGQsIDB4MjQyODgyODIsCi0JMHgxZDJmZWQ3NSwgMHgzZTQ2MjI4MywgMHg4MTRjM2JiNSwgMHg2N2ZmNDhjZCwgMHgzYzgwZDBkNiwgMHhmZmFmMTg3YiwKLQkweGU5MTNiMTkyLCAweDAzYzgzNWY4LCAweGQyNTJiY2U4LCAweGNjYWZjMjM1LCAweGZjOGNkODE1LCAweDZjNGMwODc5LAotCTB4MGNjMDg3ZGYsIDB4OTgyNzA4YTUsIDB4ZDg3MTM1NDEsIDB4YmEyMjRmNjAsIDB4M2ZhODU5OTAsIDB4ZjFiZjM1ZTMsCi0JMHg3NDEwZTFlZCwgMHhlZjgyYWYyMSwgMHgzZmFlNzA4MSwgMHg3M2E1NWQzMCwgMHhjMTRkMDcyNiwgMHgxZTBmZTg3ZSwKLQkweDA5MGYwNzMyLCAweGIyNzE0ZDA4LCAweDdjNzNjMjQ1LCAweDkxM2M4NGUzLCAweDY2MGNiMGU0LCAweGYxNWRlY2Y4LAotCTB4MjFmODQ2ZGIsIDB4MTMyNmE1YmQsIDB4ODEyOWViYzcsIDB4MGEyOGYxZDEsIDB4ZGQzMmY4OWQsIDB4ODQ0NDQ3MGMsCi0JMHg0NDM5ZTI4ZiwgMHg1OTA0YjRmNywgMHgwODE2ZjM2NSwgMHhhMzBjY2RkZSwgMHg1NGRmODYxNCwgMHgyODgxYmYwZCwKLQkweDRiYzg3Mzg3LCAweDBkZjc2ZGRjLCAweDM1NDdkM2Q0LCAweDA2OWY3MDdjLCAweGYxY2Y1YjI3LCAweDFlZGY5NTg4LAotCTB4YWQwMDRmOGQsIDB4Y2Q2YmUyNTYsIDB4MjI3ZmVmNjMsIDB4NzEzNTlkMjAsIDB4NDlmOTIwZjYsIDB4NmU1Y2IxNjgsCi0JMHgzOWY5YWZlZCwgMHg0OGFmZTFlNCwgMHhjMDVmMzg0ZSwgMHhmNGY5MDA4MywgMHgwNGRiMDZhOCwgMHhiODdiM2JiNCwKLQkweDFlMGQyMWZmLCAweGE1YWNlOGQ3LCAweGRlMGJjYTM2LCAweGRjNWIwMjEyLCAweDAzZTczZmI3LCAweGQzYWQ4OTM5LAotCTB4M2IwMzQ3ZjcsIDB4MTAyNmUzNGQsIDB4ZWQ2YmZjODAsIDB4YjI1NjJkZmUsIDB4YmY1YTc5YmYsIDB4YjIyMTg3ZWUsCi0JMHg1ZGFjZGUyZCwgMHgxNjlmOTEyYSwgMHg0MWJhNmZjMCwgMHg4YjNlZGFkMCwgMHgxM2RjMjk1OCwgMHg3YWZiMjVlZiwKLQkweGExZWNkYWQ0LCAweDVlNzYyNzdiLCAweDU4NzRkZjJjLCAweGVmNTM4MDVjLCAweDNlNzVmOWEwLCAweDAzYzAzNDY1LAotCTB4MGJkYmQzZGYsIDB4Y2JkYTBhN2MsIDB4ZTM5ZGUxYTQsIDB4OGUxNjRhOGQsIDB4OGU3ZjE3N2YsIDB4NzgyOGU4NjQsCi0JMHg0NTJmYzEzMywgMHhkNzI1M2VkZSwgMHhmY2UzOTY4NSwgMHg4YTcyOGYwYSwgMHhkY2QzOWZmYywgMHhhMGZlY2MwYSwKLQkweDU4YmJmMTkxLCAweDI4MDYxMzI0LCAweDI4YTM3ZDFjLCAweGI4NThmOTExLCAweDZjOWU2MDViLCAweGU2MzZlOGVhLAotCTB4NTBmMTNhNzcsIDB4ZDQ3ODYxOWYsIDB4NzZmNDEzZWMsIDB4NzFiYmMxNDgsIDB4MzZjZWVlZWEsIDB4YjA3MGEzYzMsCi0JMHhmMjdjNmEyYiwgMHg5ZjFhODg2OCwgMHgxYmU5MWQ3OCwgMHg2YTcxYjVhOSwgMHhkMTk0ZjQ4OCwgMHg0YThkOWZmMSwKLQkweDIzNWI2YzZmLCAweDQyZGFlM2U2LCAweDRiYTc0ZjNhLCAweDY1ZmZlZjBlLCAweDgzNWYxOWUwLCAweDlkNzVkMTk5LAotCTB4Y2M1MDc1ZjksIDB4YmE2MTAxYmUsIDB4OTFkZjY2NWMsIDB4NWRmZjIyM2YsIDB4ZTJhNDgyMjksIDB4ZmM1ZjFhYmEsCi0JMHg2MTE3ZjI2YSwgMHgzZDE4MWE3YSwgMHg4ZjlkNzhhMSwgMHhmMWEzN2NkMSwgMHgwNmJmYTQ0MiwgMHg4ZDU1ZjFmNCwKLQkweDY3Y2RmMjBhLCAweGQyYWY5Y2VhLCAweDNmM2FiMWZjLCAweDMzN2Y3ZDcwLCAweDdkNmM0OTczLCAweDQ2ODZhNmQyLAotCTB4OWZhNjFlZDUsIDB4YmUxOGIzYjUsIDB4N2MyMWVlNDksIDB4Mjk1ZmQzMzksIDB4YzQyZjQ4ZmYsIDB4NGVmOTA2YjMsCi0JMHg1Y2E3NDU1NywgMHg1ZjhjNzVkNSwgMHg2ZDExMzFhMSwgMHhhNjIzMzdjMiwgMHhmZjAyMmRkZCwgMHg1MmZjMTFkZSwKLQkweDU5Zjk0OWQ3LCAweDdjZDJmODExLCAweDhiNGE2N2M0LCAweDEyN2ZiZDEwLCAweGI0ZGRjZjFmLCAweDFkMWQ1MWFlLAotCTB4OTBmYzAzNmUsIDB4NWU4MjI3ZjEsIDB4OWQyOTlmYzYsIDB4OWJlNzVlZjIsIDB4NmFjN2ViODUsIDB4ZmVlMDE5ZmMsCi0JMHg0NWU4OGZhMSwgMHg3ZDM5NzJmYSwgMHhkMmZkMjg4MSwgMHg2NWJjYWVmNSwgMHgxNGI0OGFlZCwgMHgyMDA0YjM4YSwKLQkweDY4ZjJjMzdhLCAweGU3ZmM5MWYyLCAweDliZmYzYTRiLCAweDU4NmY4NDQyLCAweGExM2RiYzFlLCAweGE5YmYzZjU5LAotCTB4NjRhYmY0OTEsIDB4NmYyZjRlYjcsIDB4ZjcwYmY1ODcsIDB4YmZmMjE2ZmIsIDB4ZWE3YzdhMjEsIDB4NTNmNWU4ZjIsCi0JMHg2NjdmNzNhMCwgMHhmNTNhNTM1NywgMHhmYTQzY2YxNywgMHhiY2ZjNjllNiwgMHg0ODUzNTM3ZiwgMHhiZjc2ZmFlNSwKLQkweDY3YWMzNTNiLCAweGFkMTJiMzY1LCAweGVkODViZjc0LCAweDZiZTMxYjcxLCAweDkzYjhkZTI3LCAweGJjMGZlMzgwLAotCTB4MDdjN2NkMWYsIDB4YjI3Yjc5ZWEsIDB4YzFhZjliN2IsIDB4NGQ3ZWQ5MWUsIDB4Nzc2NGUzZTcsIDB4N2Q3MmJkOTQsCi0JMHhjNGZkMWRmOSwgMHg0MDI0ZjM3YiwgMHgxNjFmYmQ5NCwgMHg0NDg3ZGJhMywgMHg0MzdiYWY5ZCwgMHhhNzUwZTU4ZiwKLQkweDFmNWVmZTdlLCAweGZjMGZiN2RkLCAweDcxOWYxYTMwLCAweGM3YmRiZDM2LCAweDZmZTkxODU3LCAweDVmMTkzN2Q0LAotCTB4ZjlmNGZjNzQsIDB4ZDdhMjVmNDUsIDB4ZGRhYWYzYzMsIDB4NzI5YWZhNmYsIDB4MzIwY2RlZTgsIDB4YzQ5YTU2ZmYsCi0JMHg3MWM3NWMyMSwgMHhiNTZhNDdiYywgMHhiZjY4YTkzOCwgMHhiY2QwMGJlOCwgMHhjMmNmNDE2ZSwgMHg4NzNkMzA5YywKLQkweGZmOTkxNjllLCAweDgwODVlYjU2LCAweDE5NmNmZDA3LCAweDA0YmE1NmM4LCAweGE1NjI4MjY3LCAweGNiOTBmNWZiLAotCTB4OWMxNWU4YjUsIDB4NzE2OWY4N2YsIDB4M2RmNzAwNTEsIDB4YzU5OTI4YjksIDB4YWRiODFmOWIsIDB4NWQ4N2ZmOGMsCi0JMHg2MzY2ZDM3ZCwgMHgwY2MyNTBmYiwgMHgwZWYzOGNhYiwgMHhjMTk2M2IzZCwgMHg3ZmU5M2JiNywgMHgzMzdhNDdkNywKLQkweGM5YTVjZTJiLCAweDk3ZTY1ZGY5LCAweGY2ZjAyNTBlLCAweGJlZGJmNzJhLCAweGQ1YWYyOGE1LCAweGU3ZWQ5OTZlLAotCTB4NWFkMjkyNGYsIDB4MzllMTNmNTAsIDB4MDk5MTZjMGIsIDB4MDk4ZmVmNGYsIDB4NmRlN2IyYmYsIDB4ZmMyMzlmMDMsCi0JMHg0Njk1ZGU5NiwgMHg0MWZmMmVmMiwgMHg5YzRmNTE0OSwgMHhlMmMyYmU1NywgMHhhYjVlNzAxNSwgMHg3YzI3NGE0OSwKLQkweDY1OGRjZmZkLCAweGI5NmIzMGZhLCAweDE4ZmJkNTA2LCAweDRmZDVmODNjLCAweGNmNzQ5ZGVhLCAweDFjNTgxNDZlLAotCTB4Y2QxN2Y3NzMsIDB4YmI2MmU3ZWYsIDB4NGJkMzIxYjIsIDB4MzBlODFlYTgsIDB4OWNlNzg0ODEsIDB4MjAyZmRmNWUsCi0JMHg4OTlkY2FhMiwgMHgzYzc3N2JhZiwgMHhiZjM0MGY5ZiwgMHg3YzdjYmFmMiwgMHgyZjlhNjBmYywgMHhmZTcwY2I0YSwKLQkweDcwMTdlYzM5LCAweDcxMmFkY2ZjLCAweDM5Nzg0MGIzLCAweDI0MDRkZDFkLCAweGMwOTdkY2U5LCAweDJiNzNmMGFlLAotCTB4Yjg2NTgxNmMsIDB4N2ZiYjY5Y2YsIDB4NjczYTdhZmEsIDB4ZDI5NjA1YmQsIDB4OTNkNzQxM2EsIDB4NGU1ZjE5OGYsCi0JMHgzZjVjYmE0YiwgMHhhMWNmY2M2ZSwgMHgyZGJkMzY3OSwgMHhjYTlmMjE5NSwgMHgxNTdhOWQ0YywgMHgyYWVmYmMwNCwKLQkweGI1ZmI3OTEyLCAweGI2ZjkxZjRkLCAweDJmNzNmYWUwLCAweGFhZjE2M2Y1LCAweDI3NmNhMTljLCAweGExOWQzZDdkLAotCTB4M2ZmYjIwZWMsIDB4NDYyZWQ1ZjgsIDB4M2M0YmZiNWYsIDB4NTFkMDNiNmUsIDB4MTExZTU2OWUsIDB4MzE1YzU0MjcsCi0JMHg2ODM4N2QzMywgMHg3YzIzMWY5NSwgMHgyM2ViNzYwZiwgMHg2YTJmMmNhOCwgMHhmOGExMmU0ZSwgMHhlMjhjZjUxMSwKLQkweDQ1ZWJkNDZkLCAweDFmMTI2ZWJiLCAweDI2NDViYTM2LCAweDRkZGY0M2FmLCAweGVhNDcyZDFkLCAweGY5ODY3YWI3LAotCTB4ZGU2NGUyODksIDB4NmQ2ZWVhM2UsIDB4OWNhZmQxNTQsIDB4MzM4MjJkYjUsIDB4ZmFmNWUxNTksIDB4ZThhZWY5ZmUsCi0JMHgzOTk4MzkzOCwgMHg4MWQxMjhlMSwgMHhjYTMwYzY3OSwgMHhlYjdjZjQ1MywgMHgwNzMzZjUzMywgMHhmNTMzZjFjOSwKLQkweGUzNjMwNjUzLCAweDQzYTc0YWQ0LCAweGRlN2ZlNzI1LCAweDFjOTMzMGUxLCAweDljOTc5YTRlLCAweDYyYjkzOGEzLAotCTB4YjlmOTg1YTMsIDB4OGJhOThkOGEsIDB4NDE0ZTI5ZGIsIDB4NTc0MGYxN2QsIDB4MmMzMjkyN2EsIDB4ZGE1YjllOGMsCi0JMHgyYmVlZGFhNSwgMHgwNzE5MWRlYywgMHg1ZGFkN2ZiNCwgMHhmMzZhNmViNiwgMHg2ZDZmZDkzNSwgMHg1YjEyOTU5NywKLQkweDJkMWI0NTAzLCAweGNhYWJiMjNlLCAweGEwMzMwZTIxLCAweGYxYjMxY2JmLCAweGVmYTQyZDlkLCAweGYzZTIwYjk1LAotCTB4ZTU3ODg4NmMsIDB4NTM5MzFiNDYsIDB4NGFhMWMzYWIsIDB4M2E3N2VlMzgsIDB4YWYwODg5Y2MsIDB4NmU4YzRkYmEsCi0JMHg2MGNjODY1NywgMHhiOGU2MDg4MSwgMHg1Mzk3MDYzYywgMHhmMTBkNzExZSwgMHhjNWY2YzY0OSwgMHhhM2FjMmY0NSwKLQkweDA0MTJlNGI0LCAweDNkNDMwZDI2LCAweGZkNzBhNmJkLCAweDBjNWJiNmJjLCAweDY2MDQ3ZTUwLCAweGY5OGM1Y2M1LAotCTB4N2VlMDFjZDMsIDB4NWRiZGZhYTIsIDB4MzlmYzdjZDYsIDB4NDFmMmFlYTcsIDB4ZjlmOTY1YzgsIDB4ZmNmYzk4ZTksCi0JMHg4ZTFlNzQ3NCwgMHhmZTUxYTYxYiwgMHgzMGFhZmZjZCwgMHhjNDNiMjRkZSwgMHg1ZTZhM2Q3YywgMHhkNTFlN2U0NCwKLQkweGYyZDBjOTZmLCAweGEzYzgzY2ViLCAweDlkNWFlZTM4LCAweGRkODI5YjI1LCAweDEzZGEzYjRhLCAweDQxYjA1OWQyLAotCTB4MmU1NmY4NjAsIDB4YzQzNjAzMTIsIDB4ZTc5OTIwYjcsIDB4YTA5NzY3NDcsIDB4NWU4Y2FkZGMsIDB4MjU3NmMyNTUsCi0JMHgzN2M0YjFlNSwgMHhmODcxMDIxMCwgMHgwYjBkYmVmMywgMHgxNzY3ZTRjYywgMHg0Y2E1N2U2YiwgMHhkYmU5MWYwMCwKLQkweGZhNmY3ODk5LCAweDM2Yzc4YTAyLCAweDU2YmUzM2M2LCAweGM3ZWU3OGZlLCAweGQ2YmFlMTJmLCAweGEyMjljNWE1LAotCTB4NWU4N2Q2MWMsIDB4ZmVlMDNlOWEsIDB4ZGUxNDk3MTAsIDB4NjdkMmZjZTcsIDB4MGJkZjQ5ZDIsIDB4NDg1N2VlNWUsCi0JMHgyMjY1Nzg3MSwgMHgyNmUyOThlYywgMHg5NzRjZjUzOSwgMHg5NTc5ZTFlZCwgMHhlNmNlOWVjYiwgMHg4MDgzZTJmMywKLQkweDJhZDk3MGYxLCAweDZmMDFkMTkxLCAweDUyMWUwMmQ4LCAweDQ1MjBmZWM4LCAweGYyZDY2ZGYyLCAweDFjZDZhY2Y3LAotCTB4ZDM0YTViZmUsIDB4ZmM5OTFlZTIsIDB4OWM1ZmFmMzcsIDB4Y2VkMTcxYzYsIDB4YzY3NmE3ZjgsIDB4MDY2ZmY4YmQsCi0JMHhmOTkzZDVlZCwgMHg1N2QxM2YwOSwgMHg0YzY2MTI2YSwgMHg1YmI0ZmI2MCwgMHgzMjhiOGVjOSwgMHhiNzcwMWU3OCwKLQkweGJkZDJjYjA2LCAweGVhOGYwOWQzLCAweDMyZWYzNjM1LCAweDFjNDdkZjM3LCAweGIxODFlMWFhLCAweDU0MjliNTRkLAotCTB4ZjNjMjIzZjEsIDB4MGI3NzliNGQsIDB4YmM3OTZkYzksIDB4YjkyNGVmMTIsIDB4MGU3YWYyODIsIDB4YWQ5OGM3YWIsCi0JMHhhNzJmYjQ0OSwgMHg3NmU2NGFiMywgMHg5ODlmZmQ4YywgMHhjMWRhYmZiMSwgMHgyMjc1NjBmZCwgMHgxNWNlZGJmMiwKLQkweGI3ZmI4NGM0LCAweGJlNGNhZmQxLCAweGYwZGNjZjVmLCAweDg1ZjNjZWZhLCAweGI5OWRmOGYwLCAweDQ5ZTRhZmM0LAotCTB4ZGIxZTEwOGYsIDB4YzhhZjY2NDUsIDB4MjljMzM1OGMsIDB4MGUyZWQ5NmUsIDB4ZjFhNjRlN2EsIDB4NTdlNDQ1YzMsCi0JMHhjODFjZWZlNywgMHgxZGIyYjZlMiwgMHg2MTdiYjIxZiwgMHg1NmU3MjZiZSwgMHhjNzI5NmYyZCwgMHgzMzg0NGVmNiwKLQkweGY4YmRiODMyLCAweDY2NmJhODQ1LCAweGU4YmY5ZTZkLCAweGFiYzdkNmYyLCAweDljOTg1OTU3LCAweDkzN2ZkMWFhLAotCTB4ZmE1ZWE4ZTMsIDB4YjU2ZmI2NWIsIDB4Nzk0Njk0MjMsIDB4OTYxYmY1NTYsIDB4Y2I2ZmU0YTEsIDB4OTdjYmZjMzUsCi0JMHgwOWZkMTlmNiwgMHhjNWI5NGZlYSwgMHg1NDNkZDEyNSwgMHhhOTViMTZhNSwgMHhiMDI4ZDU1ZCwgMHg2YTVkNzg3NiwKLQkweGU3ZTNlOTNhLCAweDQ5MzhmN2NiLCAweDA3YzRjZTRmLCAweGI0ZGY3NDNkLCAweDUyZjc4ODJmLCAweGMwZGE4ODdlLAotCTB4OTdjZjkzZWUsIDB4ODczZjM2N2IsIDB4Yzg1MjU5ZWQsIDB4YWNmOGUwMjEsIDB4Yzg5MzMyYzcsIDB4ODI5NDlmMmYsCi0JMHhkOTNmMWE1NiwgMHg1YjUxMzZlYywgMHhkNGQxYTQ5MSwgMHg2MmRmY2M1NiwgMHg1NWQxY2ZlZCwgMHg0M2ZhNmIzNSwKLQkweGUwNDZhNWZlLCAweGVkN2FhY2YyLCAweGNmMDMzNWIwLCAweGZmYzlhOTViLCAweGIzMGZmNmNhLCAweGE3NTZjZmM5LAotCTB4Mzk3ZGIyODcsIDB4MTRkOWRlNGMsIDB4MDRjZmMyZmYsIDB4YmNkNmRmNzYsIDB4YmE2MGViYzYsIDB4ZGU0ODZiYmMsCi0JMHgzNGYzNWY2OCwgMHhkZWVjZDczOSwgMHg3ZGU5MjRmMywgMHhhZjNiYzkwZCwgMHhkZWEwYmVhYiwgMHhhZmZkNjExZSwKLQkweGJlMDIyYTZmLCAweGM1ZTkwOGZlLCAweDUzY2M3ODk5LCAweDA1Yjk3Yjc5LCAweGJjYWNjN2RiLCAweGJmZTZhY2ZkLAotCTB4Zjc5MGJmYjAsIDB4NGYzYzM5YWIsIDB4YWM2Yjc5ZTMsIDB4YmU0YWRmYmUsIDB4MjYzZjI0NGQsIDB4YTdmMzFiMGYsCi0JMHhhZGJkMWE0ZCwgMHg5MjcwZGVhYiwgMHgzZjZjYWVmYywgMHhjMWM4ZWVmYywgMHg1N2U2MTc4NCwgMHg1ZWY0NGRmMiwKLQkweGQxMmQ0N2UzLCAweGIzZjg2NGVmLCAweGU4OTZhMWI4LCAweGVmZTk4Njc1LCAweGRlY2Q3M2Q0LCAweGE3ZDM4MTZhLAotCTB4ZDY2YjViZDMsIDB4YjVjN2Q3ZTgsIDB4M2EzNDViZjUsIDB4ZDdlMzQwYWIsIDB4YmVkYzdlZWUsIDB4N2IyMjdiMzQsCi0JMHhhNzQ5ZmNhNSwgMHhkN2M0OWZjZiwgMHhiZWY5ZmFlYiwgMHg0ZDZlZGY0NiwgMHg3NjZhNDE0ZiwgMHhiZTQ4N2YxMiwKLQkweDdmNTA2N2U0LCAweGNkNTBlYjE0LCAweDJiOTRlMDZmLCAweGZjYjEzNzNiLCAweDhlOTc5NzUxLCAweGZiZTFhN2ZmLAotCTB4MGE0YzQ5NDIsIDB4MDRkNWIxY2IsIDB4NWRlZDlhNzMsIDB4MWEyM2M1ZWYsIDB4ZThhZDRmMWYsIDB4ZmM4MmRlOWUsCi0JMHgwNmYzMWNmYiwgMHhiZWEzNmU5NiwgMHhkM2NlMjM5YSwgMHhhZjNmNDZmNSwgMHhmZGM5NWI2MCwgMHg4NjYwMGVhYywKLQkweDlmYWZlZDIwLCAweDMwNGQ1MjdiLCAweDgxMjczZWQzLCAweGJmOGU4N2RiLCAweGY1MDU5NzZlLCAweGU4MWZlZWQzLAotCTB4MWM1Nzc5YTQsIDB4Mzc0NDM5OTksIDB4MGNkM2ZmM2YsIDB4NTQ1N2FkODksIDB4NGFmM2YzMDcsIDB4NzAxMDEwOGIsCi0JMHhlYmMwOTRlOCwgMHhlYzU2YTc4MiwgMHg4NGU3OTY3MSwgMHgzMjdmZmRmNSwgMHg2MmZmNGU4NCwgMHhhNzhhZWI0ZSwKLQkweGZhMTE3ZmFlLCAweDc4MmNmMGNjLCAweGQ0ZmRmMjc2LCAweDdhMTZmNGZlLCAweGQ3NGRmM2E5LCAweGNhOWM1ODRmLAotCTB4M2Q1ODkzZTIsIDB4Y2E3ZGVkYWQsIDB4ZjZjNWU3NGEsIDB4MTljYWYxZWIsIDB4ZmVjOTdiY2EsIDB4MTBmYWYyZjcsCi0JMHg1OTIzODcyYywgMHhlZWIwZjcxMSwgMHgwZWNmZjFkNywgMHg4NGY3YzM0MywgMHg2NWU3MmY3ZSwgMHgyZWZhMzA2NiwKLQkweDFmMzViMzQxLCAweDg1ZDU3OGZkLCAweGE2NTM5MTUwLCAweGY1NjQ0ZmI4LCAweDA4YmZiYmEwLCAweGIzZDQyZThhLAotCTB4YmNlZWRkYWEsIDB4ZWFhZDdiYzgsIDB4YTdhNjExZjIsIDB4NzU2MjEwZDUsIDB4MWY1NWIyY2IsIDB4N2QyMzBmMTYsCi0JMHg0NWM2MjlmYywgMHg4YzU3NTdlNCwgMHgzZDVjNTJiNSwgMHhhMWNjY2I3NywgMHgwZGQzZTcyNCwgMHhiOGJhZGVmYywKLQkweDE0MmJjODdjLCAweDc4NmU5ZjE3LCAweDBlNjY2ZDIxLCAweDFhMjgyYmFkLCAweDZiNjVmZDg5LCAweDllMzkzMjA3LAotCTB4NTMxNTBmODksIDB4MTE3MWZkYmIsIDB4NmEzNThlYTgsIDB4NTNjNTkwY2IsIDB4ZDFjYTNkYjEsIDB4MzllODkxMzcsCi0JMHg4ZTE2MjRkOSwgMHgyY2ZiOTA4YywgMHhhNTRmMTY5MCwgMHg5MmVjY2M3OCwgMHg2YTRlMGVjOCwgMHhjMmRlYWJmZSwKLQkweDkzM2JkMmU1LCAweDI3NzI3OWViLCAweGEwYmFmZWU0LCAweDQ0ZGIzZWJlLCAweDdlODRkYjdjLCAweGM1YWVlOTEzLAotCTB4ZDUwN2EwMTgsIDB4ZmYxZTA1NGQsIDB4NWM0MmIxY2MsIDB4MWZkNjNjY2YsIDB4NGRmYjEzZDcsIDB4MDlhYTI3MDksCi0JMHgxM2M3YjZmZiwgMHg0ZGRiYWEyNCwgMHg4ODM3ODFiMywgMHhmYjA3NjllZCwgMHhhNmU4NTFlNCwgMHhjNjI4NzE2OCwKLQkweDlkNWNlY2FiLCAweGJkZjlmYTRmLCAweGM1MWViOTMyLCAweGY1ZTIwYmVlLCAweGM3NmZhNGExLCAweDE5ZDYzYWI0LAotCTB4Y2I4YmVmMGQsIDB4ZWU4OTNhN2YsIDB4M2Q1YjhiYTUsIDB4ZjlmNzQ0NDksIDB4MTQwZGYxZmQsIDB4NzBiNzljYzcsCi0JMHg3ZmVmYTU3ZiwgMHhkODhmNzdiYiwgMHg3N2Q4OGVmNywgMHgwYzY1ODAwZCwgMHgxODk5MDFhZiwgMHg2NzQwMjUzZiwKLQkweGUzZWJhNGZjLCAweDcwYmFlYWVkLCAweGNkZDc4ZDIyLCAweGZhZjUzZGI1LCAweDVlY2QxZmZhLCAweGQ2NGRlMjU3LAotCTB4MTJmMmYwZTksIDB4Y2UzNjU4NjQsIDB4OWUwODNhYTMsIDB4ZTVmMDk4NWYsIDB4ZDljNTEwYWUsIDB4ODZjOTM2OGQsCi0JMHhiZDI1OWVmNCwgMHg4NmZhYjZjNiwgMHgxNDgxZWFjOCwgMHg5ZjllOTMxMywgMHg4MDUwNjM3ZCwgMHgxMzhhYjdmMiwKLQkweDJjZDE1ZGJjLCAweDc4ODRhODA0LCAweDIyYjNlZDY0LCAweDcxOGQ5ZmNkLCAweDIyMjE3NzVlLCAweGVkNzE3ZDZlLAotCTB4NmJmZjUyMjQsIDB4OWVjYWZmNWUsIDB4NTZkYWZmMzgsIDB4ZTAzN2JkODEsIDB4NWUyNjNkYjAsIDB4ZmNhN2I3N2QsCi0JMHhmNTU3OGJlZiwgMHhlNzU0YmZmYywgMHhhNDJlZjZiYiwgMHg1N2NmNWJmMywgMHgwYzVlYTIwZSwgMHhlZGYzMGJjZiwKLQkweDJjMzk5MmVhLCAweGM0YmNiZDVlLCAweDcwOWI2MGNmLCAweDU2MjhjZDZhLCAweGJhYjE3NmU3LCAweDVlNWEyZmVmLAotCTB4ZGM5MTdiMTAsIDB4NGViYzBmNzcsIDB4YmI0OGU3NzksIDB4YmRiYjIyNGIsIDB4NDAxMTY0YmEsIDB4NjNhYmFkMzYsCi0JMHg1ZWJiOTc1MCwgMHhmNzdiYjlkZiwgMHg2YWVlYjYyMSwgMHhhMzdkYTBjYiwgMHhiYjAxZGQ3MCwgMHhjZWU3Zjk4YiwKLQkweGY3OTg5MmY3LCAweGJjNThlZjkxLCAweDdkZDkxM2RkLCAweDc0NTFkZmMxLCAweGQ3NzJlYmY5LCAweGRlZDRhYmU5LAotCTB4MmZmYzc0NDUsIDB4ZGVlNWM1M2QsIDB4ZDMzYWRlZDksIDB4ZmExZWY0NDksIDB4MTFiZWYyNTEsIDB4OTcwNGVmMjQsCi0JMHhiOWRhNzE0NCwgMHg1YzVmZGNmNSwgMHhmMmJkNzM4OCwgMHhjMmZiY2EyMCwgMHg4MDY5ODk4NiwgMHhhMWY2NzI3ZSwKLQkweDdmNTEyNzg3LCAweGEyNDE3ZWM1LCAweGJmYmJkY2Y4LCAweGQzZjk0OWM0LCAweDRlYWRjZGVmLCAweGJmN2VmM2NhLAotCTB4MGFiZjdmNWUsIDB4NDY5ZmU0ODgsIDB4MzQ4OTgzOGUsIDB4MGNkMDY0N2YsIDB4ZTIzM2VlMzIsIDB4MjMzN2FlNDEsCi0JMHgwYTAzOWIyZSwgMHhjZmQ4M2JjNSwgMHhiYmQ3MTZlYSwgMHhmZTA1YmFiMSwgMHhmZGUwOTcyNSwgMHhhZjJmN2IzOSwKLQkweGQwNzJlODczLCAweDFhNTFhZGYzLCAweDkzMzMwNzlkLCAweGZlYjRmZjM4LCAweGZmYmNlMTgyLCAweGUzNWQ4NmZjLAotCTB4NGQ4YmJmNjksIDB4YmVmMDg5MTYsIDB4ZmI2MTY0ZGEsIDB4YzkzY2MzY2YsIDB4NWIzM2VmNDQsIDB4ZWQ0MjFlNzksCi0JMHgzN2Q5Mzc3OCwgMHgzNWU2MzdjZiwgMHg3YWEzN2NmMywgMHhiYWIxNDU4MSwgMHg0MTY3ZWFiYSwgMHhlN2NhM2NjNCwKLQkweDczYTY0ZmIwLCAweGE3ZmE2YWU3LCAweDg1M2NlZGViLCAweGVmMGYzN2QzLCAweDU2MzdhMjM1LCAweDk5YTExMzhmLAotCTB4NGVkZGRiYmQsIDB4M2Q1NmZmOWYsIDB4MzdlMzFkZGUsIDB4YTk4MjU4NGUsIDB4ZWY5Zjg5OTMsIDB4Nzc1NjVlODksCi0JMHhlODdlODViOSwgMHg0MDNmMjU3YywgMHhjM2ViYWM3YSwgMHgwNTE3ZDQzYywgMHgwNzlhOTI4NywgMHhlYTNlOTNlNiwKLQkweDliZmJhMWZhLCAweGE1ZTM1YmY5LCAweDJkZmU1MWIzLCAweGRiNWRhYTMxLCAweDFiM2E1M2QyLCAweDdhNjllNzE5LAotCTB4OTk4MjM5MDgsIDB4ZTlkMmFiZTgsIDB4NTM1ZDZiOGIsIDB4ZjhhNmIwODIsIDB4YzQyMTE1MGYsIDB4YWZlODg0NzMsCi0JMHg5MTUyYTRmMCwgMHhjMDVlOGJlZiwgMHhjNjllZDk2NCwgMHg2NDIwOTFkZSwgMHgwNjFlZjYwMSwgMHg2YTE3ZmY0YywKLQkweGEyYjFiMDc1LCAweGU1MTliZmJkLCAweGYzNzQyYTU4LCAweDk2ZDkzZTUyLCAweDJlNGQ1MGVmLCAweGY5MzI3Nzk2LAotCTB4MDQyNTNlOTYsIDB4YzQ0ZmZiMDAsIDB4OWVhOTczM2IsIDB4MGU0MjAzMzAsIDB4YmIzZmI2MzcsIDB4NDY0ZDc2NDMsCi0JMHhmNWViZDVmOSwgMHgyZDYzYjU2YSwgMHhlNjU3NjdkNSwgMHhmZmZiNWE4YiwgMHgzYWE4OTQ0YSwgMHg4YWZkZmZjOCwKLQkweDUzMGYyMGVhLCAweGZmYjU5NDNkLCAweGY2ZjU0MjVhLCAweDcxYjQ3N2I2LCAweGUzNDI1ZWI4LCAweGFiNDAyYjZkLAotCTB4ZGJjNTdkOGIsIDB4ODVjN2QwM2YsIDB4ZGI1ZmI0MDksIDB4ZTQ1YzdkMmEsIDB4ZmRmNWU3ZWQsIDB4OThkYWY2YjUsCi0JMHhlMzMxYTVmMSwgMHgxZmY2ZjEyZiwgMHg1MDRlMjI3ZSwgMHg4OGY1YzI3MywgMHg5ZWY3YjUyNywgMHg3ZDVhNjVkMiwKLQkweDgzMzZmNGMyLCAweDkzZGYyY2Y2LCAweDFkMTdjZjU0LCAweGU3OTQxZDY3LCAweDI3OTQ3OTE0LCAweDdiZjBkZGU5LAotCTB4Y2Q3ZmZkN2QsIDB4NDRhZjM4NDQsIDB4OWY3OGFkNTAsIDB4ZDkwMjZmYzEsIDB4ZGE3NWU3YzQsIDB4ZTFmZmRkN2MsCi0JMHhjOWJhYzgzYywgMHg2ZjM0MzliYywgMHhjYjNjZDQ0OCwgMHhkYTdkZTZjZCwgMHgzNzZlYmY3NSwgMHg4OWUyOTc5YiwKLQkweGU3N2Y0ZmRlLCAweDljNTZlMjlkLCAweDI3OGY1ZjM0LCAweDk0YWZlZjYyLCAweDhjNDcxZTJjLCAweDY5OTI1NGNhLAotCTB4YjQwYjIzOWUsIDB4ZTliYzQyYjgsIDB4MTY2MTVhM2IsIDB4YmI0YTAzOGYsIDB4OTliNjc3ZjEsIDB4MzI3MTFkNDMsCi0JMHgzN2U0MzFlMiwgMHhmOTA3N2FmZSwgMHhiZTNjMGRiMywgMHg5OGVmYjU3YSwgMHhmNDFmYjQzZSwgMHhjNzU3YmU4ZSwKLQkweGNjNDNlZjIxLCAweDNjYjNiNWFmLCAweDg2ZmI4ZmYyLCAweGQxYmZjOGI4LCAweGViYWYyNGRiLCAweGVhOWY3ZGE1LAotCTB4NzU5ZGM1ZWUsIDB4NjdkZmJlYTYsIDB4YWNiNzRkZWYsIDB4NDA5ZGY1NDMsIDB4NWY3MWE4NzUsIDB4NjZmM2JkNzEsCi0JMHhjOTNlZmNmNSwgMHgwMWIwZGE3NSwgMHhiNDhmYzhkZCwgMHgyNWVmZmJhNCwgMHhiYjBkYTYzYywgMHhmOWRhODhiYiwKLQkweGFlZjY2MmI2LCAweGVmYWZhM2RkLCAweDZiM2ZlYTFlLCAweGExMDg5ZTUyLCAweDYzNDZmYjNlLCAweDdmNjExYjIwLAotCTB4YTIxMzBhMTMsIDB4OTgzZjBmZGEsIDB4M2Q4NDRhMGMsIDB4NTdiODdhNGUsIDB4ZDI5MWZiNTQsIDB4NTNmOWE4Y2MsCi0JMHgzNTE1ZGQ2NywgMHgwZDBiNmM1ZSwgMHhmNjljNzk2NiwgMHg3OGFiN2NjZSwgMHhjNjFkZjNhMiwgMHg5ZjNkZWJjMSwKLQkweGM3ZDNmYmVkLCAweDZhMWZhMjhmLCAweDVkNTkxMjZiLCAweDJkZmVlZTc3LCAweDcwODI4ZjFmLCAweGVjNDY4MDVjLAotCTB4NzRiZGZiMjIsIDB4OTNjYTA0NGMsIDB4NTc1N2ViNjMsIDB4YjQ2ZWI0MjAsIDB4ODBmMTM1ZjAsIDB4ZTVjNTg0NzQsCi0JMHg4ZDFmYThmZiwgMHhjNmEzNGJjOCwgMHhmYjQ1NjdhNywgMHgxZjc1NmJkMywgMHgyMzE4MGJhNSwgMHhhYzc1NjhkNSwKLQkweDU5NGY3YjJiLCAweGJiZmY1ZTY1LCAweGVhZmQwMzcxLCAweGRlOTBiNDdkLCAweGZlOTAzYjNiLCAweDJkN2ZhODQxLAotCTB4MzhhZGFjYTcsIDB4ZTY0YjIzZGUsIDB4MDVlZjQ3NzksIDB4ZTUwMDc5NjYsIDB4NGFjYzBiMTEsIDB4YTExNzFlODQsCi0JMHhiZWE4YjgxZCwgMHhkZTNmNzFkMiwgMHg4MzQ3NDg3OCwgMHg3NGQ3ZDZjMiwgMHhiOGJiNTg5OCwgMHg1NDY1YjRkNywKLQkweGMzMzZhYTZmLCAweGM3NTRkZDgwLCAweDZlMmMxZDkwLCAweDdkZjlmZTJhLCAweDY3ZTU4MGUzLCAweDYzZjc0MjgyLAotCTB4ZTdjMmEzNTUsIDB4NGMxZWJmOGIsIDB4MWRiMWIwZjUsIDB4YzUzZWQ4ZTMsIDB4NTAxMzFjMjIsIDB4ZTAyODFmMzcsCi0JMHgzMWQ1ZDE3ZSwgMHg3NmQ3ZjU4MSwgMHg2ZTBmOWIwMCwgMHg1NGFjZTJmZiwgMHg3MTQ0YWVmZSwgMHgyOWFlZmU2ZiwKLQkweDcyODg4OTg1LCAweDg2Nzk1YmIyLCAweDIyOTdlYmY0LCAweGZiYmIyMjJjLCAweDg2ZjdiZGU1LCAweDVmN2ExNDk0LAotCTB4MzIyODM0MTgsIDB4YzU5MzU4ZmYsIDB4NmE0MDBkZGYsIDB4NWRmNzRlYmYsIDB4OTkwNDgxZWQsIDB4YzVlYWM4ZTQsCi0JMHhiN2VkMGYxNCwgMHhlYzdjNzdiMSwgMHhkYTkwZjU2NywgMHg5NGNkYjYwMywgMHhkYjNhZDVlNywgMHgwYWZlYzliMywKLQkweDg5MDdjNjBlLCAweGUzMDc0MzhlLCAweGNkYmYyY2NkLCAweDczYTFhZmY0LCAweDJiZjYwZTBiLCAweGQ5NTM3Y2E0LAotCTB4ZjMwMzMzNjcsIDB4OThmN2NhNjMsIDB4Y2E1ODllM2QsIDB4ZDI1ZDNhZTQsIDB4ZWEzN2ZiMDQsIDB4YmZiZjZjNjMsCi0JMHg0Y2FiZjM4MSwgMHg4NzJlYmJlMywgMHg3ZWVmOGQ3MiwgMHgxYTY1OWY4ZCwgMHhkZjEwNjdkZiwgMHhjNWYyZWU5MSwKLQkweDU4N2I2ZmM4LCAweDI5YTJjNTJlLCAweGIyNjBmZDdiLCAweGNhNWUzZThmLCAweDE1YmY3NDNmLCAweDhlYWFmN2NiLAotCTB4ZWFmN2M2MzgsIDB4N2M5YTFlOGUsIDB4YTFjOTQ1YmIsIDB4YjU4MzIzYmMsIDB4ZGI3ZGJhMDcsIDB4N2FlMmNlODksCi0JMHg1ZmVlMmY5NCwgMHgyODdhMGY2ZSwgMHgxNzUxOWEzZiwgMHg4N2Y3YTVlZiwgMHg0NWRkOGI2YiwgMHhhYjg1ZDdjNCwKLQkweGZlZTZlMWIwLCAweDhhYjVlZThiLCAweDc0YWRkNGRmLCAweDRhNjVjODQ0LCAweGI4YzgyZTQ3LCAweDJjOGVjNGRmLAotCTB4ZWJlZDVmMDYsIDB4MmU3MjRiZGYsIDB4Y2VjZjE4ZWIsIDB4NjZjOGVmMjksIDB4YTk1YzYyZTcsIDB4MjNmZWY4YjAsCi0JMHhmYmZmYmUzZCwgMHgyMGI5YzdiZSwgMHgyMTgxMWIzMCwgMHg3NWRmY2E4YSwgMHgyNmVmMzYwMiwgMHhjYmZkZmMyMSwKLQkweDU0MjM4YzRjLCAweDE2OTY2NzNjLCAweDViNjUwZTdmLCAweDZjOWI3ZjIyLCAweGY4NDI0MzgxLCAweDcyZmYxOGZiLAotCTB4OWRhODZhOTEsIDB4M2JlNWQ3ZjYsIDB4Njc4YzdjOTksIDB4MjZlNWRkNzAsIDB4ZDU0MzkzMGIsIDB4OTUwZjVmYTEsCi0JMHg5MDkyZmM3MCwgMHg0ZWVjOWRkZiwgMHhjNDdmZjI0ZCwgMHg4MTA5OTVlZSwgMHhjZjZjMTYxZCwgMHg3Mzk3N2U3ZiwKLQkweDhmZDYxYzg0LCAweDQzZDA3MzY2LCAweGY5MTlhNjdlLCAweGU2YjVmNTQ4LCAweDAwYjhlMmQ1LCAweDk0MjY2N2FmLAotCTB4OWViNWI4MGMsIDB4ODNiOGViY2MsIDB4Yjc5ZmViZjEsIDB4Mjg2YjRkZDMsIDB4NjZjYjg2OWYsIDB4ZWQ4Nzk3OTYsCi0JMHhiNzhlZjM3NSwgMHhiODEyN2Y0OCwgMHg2ZWNhZGNmZSwgMHg1ODkxMmNmNywgMHhiZjZiMTY3YywgMHg5NTllZGRiYSwKLQkweGY5MjI3ZmZkLCAweGNmYWRiYmRlLCAweGZlZTExZmUwLCAweDU4NGE1MzYzLCAweDk5ZWYxY2JkLCAweDg3NTgzY2E4LAotCTB4N2YzMWVlYzksIDB4YjNiN2Y5YTEsIDB4Y2FjN2JiNmYsIDB4Y2Y2YjEyZjgsIDB4NmRiMzdkN2EsIDB4YjIwMTlkZmYsCi0JMHhmNjgwOTNmNywgMHgyZmI0N2E0ZiwgMHhkOWEyZGU0MSwgMHhkZDA3ZjMzYiwgMHhiM2FmODE1YywgMHgzMzk5NTFmNywKLQkweGRkZWYxNGVkLCAweDllMWRkZWM0LCAweGRlY2U2ZmQ0LCAweGYyMzkzOWJmLCAweGY4NTIwMWJjLCAweDFjODQ2YWZiLAotCTB4YTQzZDUwZDcsIDB4Yzk4NTJkYjgsIDB4MmU5Yjk3NTEsIDB4YmE3ZTVkNDcsIDB4ZmQ5NjNlYmMsIDB4NjM3ZDExNzcsCi0JMHhkNzc1ZmRiNiwgMHhkNTU3NjJmZiwgMHg1MzA3M2RlYiwgMHg3OTNiNzY3YywgMHhmZWUxZTNkYywgMHg4ZjI4NWZmNiwKLQkweGY3MzczYzdiLCAweGZlN2FmN2JmLCAweDdlOGJmZjA5LCAweGUyNmVjMDcyLCAweDViYzNhNjRmLCAweGEzZjk4NzJmLAotCTB4Yjc0MWUzY2IsIDB4MjQzM2Q4YmYsIDB4NjgyNDFmY2MsIDB4NmY0ZmQ1MzAsIDB4OWVlOThmYzcsIDB4OTlmZWZjNmYsCi0JMHg2N2ZhMGI3ZSwgMHhmZmY0MzNmYywgMHgxMjkyZjljMywgMHg3OGIxMmY5ZCwgMHg0OWU1MDQ2NiwgMHg1NTI3OTYzZSwKLQkweGZjODNiZDUzLCAweDRmZTgxOGRmLCAweDE1YmQ1OWYxLCAweDlhYTQzZTU4LCAweGVlNDk3OWJhLCAweDQyZDk3NjI1LAotCTB4YzUyNTk3NzEsIDB4M2FmZDIxNmIsIDB4YmVhMjExZWEsIDB4NDhmNTZiZWYsIDB4MjQ5NjA4N2QsIDB4YmQwZGRmZTgsCi0JMHgxMjhjZjJjZCwgMHg0M2NiNDk5NywgMHgzMGY2ZjMwZSwgMHgwOWJkZmM3ZCwgMHgwYzk0ZDc5NCwgMHgxOGUxYzZkMiwKLQkweDZjMDg5ZjFmLCAweDQ3MmRmOWZjLCAweGNkYjI1ZTU5LCAweGZjMjBhY2EzLCAweDRjNDhmMDVlLCAweDc0YjcxNzNlLAotCTB4ZmRlN2UzZWYsIDB4NTc0N2M0MGQsIDB4MDRiYmZmYjIsIDB4NTY3NmFkNmIsIDB4ZGExMzZiNGYsIDB4YzNiOTE3NzMsCi0JMHhkZmI1N2ZmMywgMHg4ODE3ZjI3MSwgMHhhY2EzYzg3NywgMHg1MDJmNzlhMSwgMHgxMjM1MjIzMSwgMHgxNmFkNzlmMiwKLQkweDg0ZTZmNzQ4LCAweDU2MDFjYmZiLCAweGFlNThiZGQwLCAweDYwNDRmZDFlLCAweDFjM2MxZGYxLCAweDFmYmU5NDM3LAotCTB4OTU5Zjc2MDQsIDB4MzViMWRmZWIsIDB4MDZjNzdmNDQsIDB4YjNlMzE3NWUsIDB4ZmVhMTFkZmUsIDB4YjA5ZGUwOWQsCi0JMHhkN2JlZDI1YywgMHhmOTIzNzBkYiwgMHg4NjZjZTRlYiwgMHhhZmRmMTE3MywgMHgyZTkwNTliNSwgMHgyMmVmZDc1NywKLQkweGZmNDc3ZDg1LCAweGFiZDZmYjQyLCAweGYyY2YxYWQwLCAweGQ3ZWZlOGQ5LCAweDRmMzAxM2FhLCAweDdiMjg3ZTQ1LAotCTB4Y2EzYjQxMWMsIDB4MDRmNmUxNzEsIDB4YWI5ODY3NTYsIDB4YTQ3YjhmZDcsIDB4MzFmNDRiYjAsIDB4M2QwM2QzODksCi0JMHhmZDdkZDhkMiwgMHhlNzRiYTZiOCwgMHgyY2ZmNDA5NywgMHg2ZmNkYzUzMywgMHgxZTIzMzU1ZiwgMHhlZmYxZjY2ZiwKLQkweDk5NTQzOTI1LCAweDI4NWY0ODNlLCAweGRlYTQ1ZDUzLCAweDk1ZDBmNzQ5LCAweDRhOTdhMjFkLCAweDlkNWE1NTMwLAotCTB4YjU1MjlhMWUsIDB4YmMxODhhZmEsIDB4Yjk4ZmM3MTcsIDB4ZjU0Y2RjZWYsIDB4ZmUxZWMzYmQsIDB4MGRkOTcxNGUsCi0JMHg1ZDUxOWRlYywgMHgxMGI2OTM2YSwgMHhhNzBmZDcyZSwgMHg3MWVkOGQzZiwgMHhlOTc5ZjcxOSwgMHhjZWYyZWVmZCwKLQkweGEzNjZiMzY3LCAweGMwNWFkMDFjLCAweDAwZmFlMmM5LCAweDM2YzE2NzViLCAweGQyYjkxZjdkLCAweDk2YmE0MmZkLAotCTB4NDIyMGZiYmYsIDB4YmI5ZjNhMWUsIDB4YTI4ZjFmZjAsIDB4MGUyOWJkZmEsIDB4MDlkZWRlOTgsIDB4Yzc4YTI0MWIsCi0JMHhhNThjMzk3NSwgMHg4MzhhNTNjNywgMHhjOGVmZTBkZSwgMHg2Y2U4MDUwYiwgMHgzZTcyNWM1MywgMHg1ZGZiZTc4ZSwKLQkweGIwZWY4YmViLCAweDUyY2QwMTdjLCAweDZjZGJhYThkLCAweGZjZjM3OTk4LCAweGE1NjAyNTIyLCAweGJhZTliZmFkLAotCTB4ZjY4ZjI1ZTMsIDB4MDYxMDNlNGUsIDB4NzkxZGVmZjIsIDB4OWI1MmEzNWQsIDB4OTUyYzU2MzMsIDB4NmE0ZjQ0Y2QsCi0JMHhiZmU0OTc5YywgMHg3NzY2NjM3MCwgMHg3YzMwNDNmMiwgMHg4M2NlNDQxZCwgMHgyZjRjYzkwZCwgMHgxODQ1YmE1NiwKLQkweGI3MzY3YThlLCAweGZiYTRjOTA1LCAweDE2MGVlNWE4LCAweDkyZDgzZGY3LCAweGUzMTNhMGM0LCAweGY4YmZlYTRlLAotCTB4Nzk4M2ZiY2EsIDB4YTdjYjg3MWQsIDB4NjNlZWQ1ZjgsIDB4NmFmYjFjNTgsIDB4ZjU2MzA2M2YsIDB4NGZiOWZjZDYsCi0JMHhkODRiNzdhMSwgMHgxMjNhYjAyMywgMHg3NWNhMTJmOSwgMHhjNzU2M2Q3NSwgMHg2ZWFjODM3OCwgMHhlZWMwOTZmNywKLQkweGJmOWIyOTNkLCAweDc1NDk1NDYzLCAweGQyMGUxZGVjLCAweGMyMmYyYzdkLCAweDJlYzk0YjI1LCAweDZjZGRmNDVkLAotCTB4OGZhZWZmMTIsIDB4ZjdkYWNjZTUsIDB4M2U0ZDRlYjEsIDB4N2RmOWQwMDksIDB4ODgxYmVmNmMsIDB4Y2NiNjcyNzcsCi0JMHgzZDIwOGJiZiwgMHgyNjQ5NDljMSwgMHg1Y2ZjOWJiNywgMHgzOTNmYjY2YSwgMHhlNmJkZTI5YiwgMHg5ZjU0NDU5ZCwKLQkweDRhZWEwYjlhLCAweDEzZDk0NzcwLCAweDZhZTg0OGRjLCAweDc3YjQ5N2E3LCAweDJiMGY1ZDMxLCAweDg1MjE3M2I1LAotCTB4YzY4NTVmZWIsIDB4M2U4ZDRhZDYsIDB4MmI1NDE4Y2IsIDB4NDc3MmNmYTQsIDB4Mzc3YWU2ZjYsIDB4ODBmZTg2OTEsCi0JMHgxZjBhZGY3ZCwgMHg0MGZlM2RmYywgMHgzZjc0MDdiZiwgMHgyY2Y1MzVmZCwgMHhjN2QyY2ZjNiwgMHg3Y2UzZGRiOSwKLQkweDBmZmQxNzVlLCAweDUxMWY1MDIxLCAweDZmYWNlYWM3LCAweDc3YjAyMzNkLCAweDMyNmViZDZkLCAweGJkMGEwY2NkLAotCTB4MDk1NDIyZWYsIDB4ZDJmN2QyOTYsIDB4ODU5OGUxMDQsIDB4NjJlMzhiOWQsIDB4OGNjM2FiMTIsIDB4NjNlYmZjNjIsCi0JMHhkMzlkNTk1MiwgMHg5ODMwZWJjZSwgMHhmZDQzZGMyNywgMHhiZjY2ZWFkNywgMHg3OTIwZjhjYiwgMHhjNTFiZjdkOSwKLQkweDZjNGY1ZTM2LCAweGRmNjQ0ZjdmLCAweGVlOGFkZDFmLCAweDU1NWU1YWYxLCAweDZmNjJlMDdiLCAweDVmNzFkYmIyLAotCTB4ZjdlMjdlODksIDB4MTFlMzhiNzEsIDB4NjdjNzUzY2EsIDB4ZjE5N2Y3ZjMsIDB4OTgyOGE2ZDksIDB4ZTk4YmZiMmUsCi0JMHhlYTNiM2ZkYywgMHg1ZjkwOWJhNiwgMHhjMTY3YmU3ZiwgMHg4NzcxZGYyYiwgMHhhZTg4N2FlOSwgMHg0MGE3YmEyYywKLQkweDRkM2U5MGI2LCAweDM3MWRlNTA0LCAweGYwNmRmNTZlLCAweDUwNjRmNmIzLCAweGY3NDk2YzE5LCAweGE1NGVjYTRmLAotCTB4YWMwMzEwZWYsIDB4N2RjNDdjN2QsIDB4OGIxMjVlYWMsIDB4NjU1ZTJjN2YsIDB4MmM1ZWZjZDksIDB4YzE0NTM2Y2IsCi0JMHhjZmRmYjI3MSwgMHg1ZTE4NTJmMSwgMHhkMTM2NWZiOCwgMHgyNGY1ZTNhNSwgMHhkZmVhNGVlOSwgMHg4ODU1NWYyNSwKLQkweDdjY2FlZjkwLCAweDAyZDdkZjkxLCAweGYyYzNhZmJmLCAweDI1NDk2YjFkLCAweGJkMTA4ZWY5LCAweDBjMTdhYjRjLAotCTB4ZTBmNDg0NzksIDB4YTVlYWRkOWEsIDB4YmU1ZDNiNzcsIDB4OWJkZTgxMDgsIDB4NjM4ZTcyYzMsIDB4ODhiYTUyZmEsCi0JMHg2YzkxY2JlYiwgMHg2YTBiYWYzNywgMHg1ODBlNDc3MiwgMHhmOTQyYWUyOCwgMHg5YTdjNGQzZiwgMHg3NWU0NDIzNywKLQkweDNmZTUwOTM4LCAweDRhZGRjOTgwLCAweDgyOTk1ZTM2LCAweDJhZThjZjcyLCAweGRlMmQ1YWRmLCAweDY2ZTJkMWFkLAotCTB4NjZmNTFmYmQsIDB4ZWFlOWYxMDUsIDB4ODlmZDYxZGUsIDB4NDYwN2I1M2YsIDB4N2E5ZmM0YzgsIDB4ZDRkYmNmMTMsCi0JMHhkMGVhZDZmZiwgMHhhMzhiYzk5YSwgMHg0N2VmNjJlZSwgMHgyOTdhZjY2MCwgMHg0NWJlMmFmZiwgMHg5MzU1YjI5ZSwKLQkweDk2MWVmMWNiLCAweDVmYjYwMTcxLCAweDQwNzZiYmY0LCAweGE2ODA5ZmQzLCAweDljNzBmZjU3LCAweGUyYTIxZmQ1LAotCTB4ZmZhMjExYWMsIDB4NzU0ZmUyNjUsIDB4ZjMyYjU1ZGMsIDB4ZmU3YmRhNjMsIDB4MTliMzdhNTYsIDB4ZDExZmQ2MTIsCi0JMHhiMjZmZjBlYSwgMHhmNWNiZTI0NywgMHg1NWY5ZjUwNiwgMHg0NGU3ZmY1YSwgMHhhNjRjZTdkNCwgMHhlZjI4ZTdjZiwKLQkweDc1ZTU2ZTNjLCAweDE1NjQ1NmU3LCAweGZmMTA3ZmZkLCAweGNjYmJmY2NiLCAweDNlOWE3N2YwLCAweGJjNTEyYjA2LAotCTB4ODA0MmU3MDQsIDB4YmFkMGY5YzEsIDB4OWZjZTEwNzIsIDB4NDY5NjU4ZDgsIDB4ZmM5ODU0ZjgsIDB4YTJhZDNlZWMsCi0JMHgzYmU5YmMyZiwgMHhlYzJmNjgxYiwgMHg3NmZjZmM4MSwgMHg3YTc3ZDJjMywgMHg1ZTUzOGEyMCwgMHg1YzI4NWI3NCwKLQkweGIwNDFiNDliLCAweDk3YmU0MGY0LCAweDQxNTgyZDM0LCAweGI3OGZiNDZkLCAweGI3MGY0ZTQ4LCAweDBlZTc3YTZjLAotCTB4ZTM5ZDE3ZWMsIDB4OGYxYzdkOTgsIDB4MWNhYzUzOTEsIDB4NDVmYzZiMGUsIDB4ZDM5Yjc4N2IsIDB4NzBiYTMwYTUsCi0JMHhhMWVkNGRmZCwgMHhlMTJiZGQwNiwgMHgwMWZmZmZhNSwgMHhkNWI5M2VmZCwgMHhlZmQwMjNmZiwgMHhlMzc4MWIxNSwKLQkweDdhNmVjOGUyLCAweDNmYmZjYzgzLCAweGYzZTdmNjhmLCAweGZhMjdkZjgwLCAweDkyM2FmYTdlLCAweGYzOTdkZDIwLAotCTB4ZjQ5NzliYTEsIDB4ZmI4NTkyZWEsIDB4ODA3ZDRiY2QsIDB4MDEyNWMxZDksIDB4ZjBiY2VjMmYsIDB4ZmVlOTA2ZmQsCi0JMHhlMTk5NzkxZSwgMHhmNGQ2YTM3YiwgMHgzOWY5MmU1YSwgMHhjNzdlNTdiYywgMHhlNjk5ZTJmYywgMHhlNGRkMDM5NSwKLQkweDY0ZTkwM2ZmLCAweGQ5OWY5NmFmLCAweDczNWZmNWJjLCAweDk1MTBjY2JmLCAweDgwY2ViNGQzLCAweDAxYTAzNDA2LAotCTB4MDM0MDY4MGQsIDB4MDY4MGQwMWEsIDB4MGQwMWEwMzQsIDB4MWEwMzQwNjgsIDB4MzQwNjgwZDAsIDB4NjgwZDAxYTAsCi0JMHhkMDFhMDM0MCwgMHhhMDM0MDY4MCwgMHg0MDY4MGQwMSwgMHg4MGQwMWEwMywgMHgwMWEwMzQwNiwgMHgwMzQwNjgwZCwKLQkweDA2ODBkMDFhLCAweDBkMDFhMDM0LCAweDFhMDM0MDY4LCAweDM0MDY4MGQwLCAweDY4MGQwMWEwLCAweGQwMWEwMzQwLAotCTB4YTAzNDA2ODAsIDB4NDA2ODBkMDEsIDB4ODBkMDFhMDMsIDB4MDFhMDM0MDYsIDB4MDM0MDY4MGQsIDB4MDU1ZmYwMWEsCi0JMHgzMjhkMWZmZiwgMHg4MDAwNjBmNiwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhjNWVkZmYwMCwKLQkweDMwMDAxMTMxLCAweGVlMzAwNDA4LCAweGQ4MGVhNWVhLCAweGFiZGVmMjcxLCAweDk2NGQyMTA0LCAweDVkYmJjY2U0LAotCTB4NmRiNmRiMTUsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsCi0JMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwKLQkweGVlMDE3ZTNmLCAweDAwMTRhYjU1LCAweDAwMDAxNGFiLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGM1ZWRmZjAwLAotCTB4MzAwMDExMzEsIDB4ZWUzMDA0MDgsIDB4ZDgwZWE1ZWEsIDB4YWJkZWYyNzEsIDB4OTY0ZDIxMDQsIDB4NWRiYmNjZTQsCi0JMHg2ZGI2ZGIxNSwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwKLQkweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LAotCTB4ZWUwMTdlM2YsIDB4MDAxNGFiNTUsIDB4MDAwMDE0YWIsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4YzVlZGZmMDAsCi0JMHgzMDAwMTEzMSwgMHhlZTMwMDQwOCwgMHhkODBlYTVlYSwgMHhhYmRlZjI3MSwgMHg5NjRkMjEwNCwgMHg1ZGJiY2NlNCwKLQkweDZkYjZkYjE1LCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LAotCTB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsCi0JMHhlZTAxN2UzZiwgMHgwMDE0YWI1NSwgMHgwMDAwMTRhYiwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhjNWVkZmYwMCwKLQkweDMwMDAxMTMxLCAweGVlMzAwNDA4LCAweGQ4MGVhNWVhLCAweGFiZGVmMjcxLCAweDk2NGQyMTA0LCAweDVkYmJjY2U0LAotCTB4NmRiNmRiMTUsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsCi0JMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwKLQkweGVlMDE3ZTNmLCAweDAwMTRhYjU1LCAweDAwMDAxNGFiLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGM1ZWRmZjAwLAotCTB4MzAwMDExMzEsIDB4ZWUzMDA0MDgsIDB4ZDgwZWE1ZWEsIDB4YWJkZWYyNzEsIDB4OTY0ZDIxMDQsIDB4NWRiYmNjZTQsCi0JMHg2ZGI2ZGIxNSwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwKLQkweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LAotCTB4ZWUwMTdlM2YsIDB4MDAxNGFiNTUsIDB4MDAwMDE0YWIsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg2MmYzZmYwMCwgMHg1MWY4NjA2MywgMHg0MDhjYzEwZiwKLQkweDdmMTIwY2I2LCAweDY2NDc2MDI4LCAweDQ4MTA3ZDA4LCAweGYzZTIwNjFmLCAweDJmZTlhNDhjLCAweGI5YjA0MTYwLAotCTB4NDBhZmVjODAsIDB4YTg1OTc4MzMsIDB4ODhhMWJlZTcsIDB4Y2ZkMjczOGYsIDB4ODFhZTc5MmUsIDB4NjYzMjJmZjcsCi0JMHhlODYwNjdlNiwgMHg2ZmYwNDdlNCwgMHhiM2NhYTNmMiwgMHgzZGQ3ZDNmMCwgMHhiMDAwYzZiNCwgMHgwMGVlZmY0YSwKLQkweDAwMDBlZWZmLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZDVmZjAwLCAweGM1NTQ3ODBiLCAweDNkOWNmMGQ5LAotCTB4Mzc2NGRkOTcsIDB4MjQ4NWNkOWIsIDB4MjAwZDg0MTAsIDB4MTI1YzQwYTIsIDB4MTI2ZTIwZWUsIDB4YzMxMTYwODgsCi0JMHg2NWUyODE0NSwgMHhiMjAxYWU0MSwgMHhkYjNmNjkxMSwgMHg1Y2JiN2ZmYSwgMHhjNmQ2YTQ0NCwgMHhhMGI0NWI0YiwKLQkweDA2YTI4MjhiLCAweDgyNDgyNDU5LCAweGE1YzhiYTFiLCAweDU4MzViNWI0LCAweDBkYTk3OGFhLCAweDI0YzRkYzg4LAotCTB4OTdmNGIwMDQsIDB4M2JlZjNmY2EsIDB4Y2U3YmJiMzMsIDB4ZjRiYzRjNmUsIDB4N2Q2ZjlmZmIsIDB4NzMzOTg2N2MsCi0JMHhlZjNiY2NjZSwgMHg2Nzc5ZGU3ZCwgMHgzMTNiMTBhMiwgMHgwYWU0Mjc3NSwgMHg2NDI0NmVmYywgMHgxOTA4NGM5OSwKLQkweGJiYzMyZDE0LCAweDMyNDEzY2JmLCAweDQ2YmNmOTA5LCAweDA4ZjM5YTc1LCAweDg2YTFkOTI5LCAweGM1ZjVhNDZmLAotCTB4ZDQwMGE0MWIsIDB4MDg5M2JiNGQsIDB4ZDM0ODQ4MTksIDB4Y2FmNzU2M2EsIDB4YTA4ZThmMGQsIDB4NGNhNzY0ZWQsCi0JMHg4NDgyZDEzNiwgMHg0NTkyMjY2ZCwgMHg2MTBiMDljOCwgMHhkNjBhNjczZiwgMHhlYWIxMjZlNywgMHhlZTdiMGRlMiwKLQkweGQ3ZTdmZTgyLCAweGZkMTI0OTlhLCAweGVjOGQ0NGZlLCAweDRkOTJmYTg2LCAweGI0NDg4MDUyLCAweGFkMjFlZWJkLAotCTB4NWU3ZmVkMGIsIDB4MzkyNjBhNDAsIDB4NjNkMzdkNjksIDB4OTA4NTMzOWEsIDB4NmNiZmJiZTUsIDB4NWMwNTcxODIsCi0JMHhlMjE2N2M2NywgMHhiZmJlMDBkNCwgMHgyM2Y2MzU2NSwgMHhhZGIwM2NhNCwgMHhhN2VkMGJiNCwgMHg5OTcyNWFiYywKLQkweGViZTUzOGU4LCAweDAzOGRmMGE0LCAweDkwMTRiOWUxLCAweDM3MGJiZjY5LCAweDBmYjM4OTViLCAweGMxMGFlMTgzLAotCTB4NGIxZTcxNzEsIDB4Njk3MWQzZDYsIDB4ZDJhOTQ0N2YsIDB4ZTNhMjUyY2EsIDB4ZjE5Y2ZjMDksIDB4NDQ3MWM1YWQsCi0JMHg3NDRiZjE3ZCwgMHhjNTVkZmExYywgMHhhNjBiOTJhYiwgMHg5ZTIyNjE1OCwgMHhhOWJmMWQyMCwgMHhmM2RhNjkyZSwKLQkweDMyZGY5ODM2LCAweGVjNGE3N2FkLCAweDBlYmU2NjNjLCAweDZjMGYyOGYzLCAweDAwNmQ0YWQwLCAweDZlNmQwNmQ3LAotCTB4MGI3ZjY4YmYsIDB4MGY1NmZmMzcsIDB4ZDk5ZWRhZDcsIDB4NjM3Njk4OWUsIDB4NTE0N2M2NzksIDB4MmY1YTNiZGEsCi0JMHhiNDFkYzQyNywgMHg2ZDAxZmMwMSwgMHhmM2U4ZmY2MiwgMHg5MDhkMjk1YSwgMHg0Y2JmZDA0ZSwgMHhmZjY4OTY5YywKLQkweGI5ZjFmODg0LCAweGMwNjE1YzRjLCAweGI4YTUwOTNiLCAweGVhZDZlOTYyLCAweDQ5NmRkM2QwLCAweDBkYjZmZjFhLAotCTB4ZTljOTdlNzgsIDB4ODFjZjk4ZjAsIDB4MWNiZTEzZTUsIDB4NzNlNTdmMmMsIDB4ZjFiZjljMjIsIDB4MjlmMmMxZjUsCi0JMHhmZjlmMGI5ZiwgMHhjYjE0MzdkNiwgMHg5NjM3M2VmNSwgMHg2MmM2ZmFjZiwgMHg4NjU3YzFiOSwgMHg5YmVmM2RlZiwKLQkweDlmMjZlNTg2LCAweGU4YmY5ZjA3LCAweDRiZTU4ZjliLCAweGZlN2M0YWJlLCAweDJjN2VlZjhhLCAweGY4ZmNmOGI3LAotCTB4MzU2ZmFiN2MsIDB4NTU3Y2RiOTYsIDB4ZjRlNzZlNTgsIDB4ZTAwYmUxZGEsIDB4OWI3ZDNiN2IsIDB4MDVmM2FjYjEsCi0JMHhiZTFiZjlmMSwgMHgwMTdmMmM1YSwgMHhhYTY1YTQ3OCwgMHhhMTRjYjFkYiwgMHg0ZDFkNGE3NCwgMHg0ODRkOTQxYywKLQkweDMyZDk1OTQ2LCAweGE2MzNkNjk1LCAweGE3YjY3YWIwLCAweGYxNDY5OTZhLCAweGQ2OWIzZDk0LCAweDJiNzMxZDI5LAotCTB4Njk5OTk2MWIsIDB4ZDY1MmVlN2IsIDB4NThlZmRkZGUsIDB4ZGRlZGExNmUsIDB4OWVmNmIyNTcsIDB4OTNjYjY1NTUsCi0JMHgyN2NmN2I2OCwgMHg4MTM1ZmI1OSwgMHhiNGM5ZTVhYSwgMHhhYzhkOWFmZCwgMHg2MWIwNmZiZCwgMHhmN2I2OTViOSwKLQkweGQ3ZWQ2MWFkLCAweDZjMmIxZDg3LCAweDNlZmQ3ZWI0LCAweDI4NmMyZjU2LCAweGViNDI5MTViLCAweDdkNTk4Nzg1LAotCTB4MGFkNTYzNDgsIDB4Yzg3ZWZkM2IsIDB4ODhmZGY2NzEsIDB4NGNlY2EwOTYsIDB4NTVkYjFmYzAsIDB4ZDI4NDNkZDcsCi0JMHg1MmZlZDdlZSwgMHhkNjhjMzJiNywgMHhjNDdkZDczNSwgMHhmZjY2Yzg0NSwgMHgzM2E1NmVhZCwgMHg4NjVhODdjNSwKLQkweGQzZmNiYmVkLCAweGMzMmI1ZDU4LCAweDMzZmNiN2Y2LCAweDZhOWRmZGYxLCAweGVjN2ZiNjI1LCAweDlkZjZjNzJmLAotCTB4YjdiNjI1NWEsIDB4ZjZjM2VmZjgsIDB4ZGIwYWI1M2EsIDB4NjAxZWNiNGQsIDB4ZGIwYWFkNzUsIDB4ODgzZDk3MzMsCi0JMHg1MmExYmZlZiwgMHhkMjEzODc2MCwgMHg2ZWEzZDk3YiwgMHg5NjZmODUzZiwgMHg3ZDAyYTllNCwgMHg5Y2FhNmNkMiwKLQkweDI4Yjc0MDRmLCAweGFmOTAxY2UxLCAweDBkMzIyNDg3LCAweGM0YTdlNWU0LCAweGExZTZmYTg5LCAweGM4MzczNGFiLAotCTB4ODM0M2Y2ZTEsIDB4YzUzOTA3OWYsIDB4ZTdkNDI2NWYsIDB4MGYyNmIwYmUsIDB4ZmIwYTc5ZmIsIDB4M2QzZjY4ZDEsCi0JMHhmMGE3ZWZkYiwgMHg3ZWJhYTE5ZCwgMHgyZjk5ZGYwYSwgMHhmODBlNzlmYSwgMHg2M2I5MzliZSwgMHg2NzdmNmNmZCwKLQkweDc3OWUxZWI4LCAweGFmM2Y0NWNhLCAweDhlZjYzZjYwLCAweGFmZjBhYmNkLCAweGZjZjBmNTIzLCAweGE3ZTg5MTc1LAotCTB4ZGU5NWU3MDYsIDB4YmM3Njc4MzEsIDB4MTc5M2YxNGYsIDB4ZmJjNzY3ZWQsIDB4ZjYxMjNmMTQsIDB4NjRmZDhmNTMsCi0JMHg0MTllMGM3NSwgMHhmNWQ1MGMxZiwgMHhmOTgzZTgzMywgMHhkODAzOWZhMiwgMHhmNThlOTc0ZiwgMHhlMTgzZTNiMywKLQkweDI4M2U3ODdhLCAweDhkYmNmZDE3LCAweGQ4ZWI3NGZkLCAweDM4N2QwNmJjLCAweDg3Y2YwZjUyLCAweDQ3M2Y0NDhiLAotCTB4MWQxZTlmYjAsIDB4NTFlNzY3ZWIsIDB4MWU3NjdlM2QsIDB4MjhlN2UwOGQsIDB4NjNiYmQzZjYsIDB4NGM3MjFhZjMsCi0JMHhjNzIxOWY4ZiwgMHg4MzM5ZjgyMiwgMHg2M2FlYmY3NCwgMHhhNjNjZWNmZCwgMHg2M2NlY2ZjNywgMHg0NzljZmMxMSwKLQkweDM2M2JmMjc4LCAweGU4OWYyMWFmLCAweDkzZTQzM2YxLCAweDYzMmU3ZTA4LCAweDgzMWQwNTNmLCAweDFlYjRlZWE3LAotCTB4MjNhNzc1M2YsIDB4OTgyNTUxZjgsIDB4YzE4ZWUwZDcsIDB4MWU4Y2VjMzMsIDB4NDRjZWMzM2YsIDB4MDA5NzYzZjAsCi0JMHhlYjFkZTE5ZSwgMHgxZThjZWVhNywgMHgyMjY3NzUzZiwgMHg3ODQ2YzlmOCwgMHg1ZTZjNzU0NiwgMHhlM2QzM2VjMywKLQkweDExNjdkODY3LCAweDllMTEzOGZjLCAweDA4Y2RjYWUyLCAweGY0ZmRhMTBmLCAweDM3OWZiYjZmLCAweGNmZjVlOWNlLAotCTB4ZmU5OGU3MWIsIDB4OGZjNDc4MTksIDB4MjFjZDU3ZmEsIDB4NjQ2NzAwMmUsIDB4YTI1Zjk5NGIsIDB4ZDY5MzI1NzUsCi0JMHg4OWJhNTA5ZCwgMHgwNTVmZGE4NywgMHhmODNmNzBlYywgMHhkMzJmZDFiOCwgMHhiNGVhOTRmNiwgMHg1OGNlMzU4MiwKLQkweDAyZWM1YzdiLCAweDRkMDNlYzc4LCAweDE4ZWY3YjNhLCAweGE3YWJhYzk5LCAweGQ5ZDc0ZThmLCAweDVkZjFjY2ViLAotCTB4MjlhY2Y1NzQsIDB4OWNmNTc0M2QsIDB4N2RkM2FlM2IsIDB4ODE3NjY1ZGYsIDB4ZDE3NWRlYWUsIDB4ZGJiZDVkNzAsCi0JMHhmN2RkNjJkMiwgMHhkNjZlMDdjZSwgMHgzOTU4ZjdiNSwgMHhmNWVmNTc0OSwgMHhmNTc1MGZjOCwgMHhkMmNlNGZkZSwKLQkweDJiYWNmYmQ1LCAweGRkNzdmNWQ3LCAweDdhYmEyNWM2LCAweGVhOWZlYWJmLCAweGNiMzVmOWVhLCAweDY4NTc3NTc1LAotCTB4YjA1ZWFlOGQsIDB4ZmY1ZDcxZWYsIDB4NWE3YWRmMDMsIDB4Zjg3YzFmNTcsIDB4ZTg3ZDVkMzksIDB4YmVlYjJmNDcsCi0JMHgzNWZjN2UxZiwgMHhkOWU0N2Q1ZCwgMHhjN2ZmMDY1ZCwgMHg5N2QxMzhlNiwgMHg3N2YwNjVkNywgMHg5YTA3ZThhZCwKLQkweGNmZTg2OWJiLCAweDYwYjM3NTE2LCAweDZjZGRjN2ZkLCAweDI4ZjFmZjU4LCAweDRhMGUzNWNmLCAweDA3YzM5ZmQ3LAotCTB4NThmZGVlZDQsIDB4NDhlZjVjZjMsIDB4MjUyOTdmNjAsIDB4NGEwNzI0NGQsIDB4OGQwYzg5OGYsIDB4NTJhZDVmNmYsCi0JMHg1MjdjYTNiZSwgMHhlZjcyZmRkYywgMHg5YWY0YjRhMywgMHhkMWE3N2E1YSwgMHhhMmE2ZWZmMiwgMHgzZjE3YzBhNSwKLQkweDk3ZTg0Yzk1LCAweDA5NTI2NTU5LCAweDEzMzU2NDdjLCAweDU3ZDVjYmU0LCAweDFmZGU3ZTBmLCAweGU3MGZkZmMzLAotCTB4ZmQxNGJlMzEsIDB4ZTY1NmFjM2UsIDB4ZWZmZTFkODAsIDB4ODNmM2JmNjUsIDB4NGYyODdlMWQsIDB4OTNlYzNiNDMsCi0JMHhmN2Y2MTc3ZSwgMHhmZGU3ZGZhMiwgMHg0OWZjMDczOCwgMHhkNGZkNDY4YiwgMHgzYTM1ZjFkOCwgMHg3ZjFjM2Y3ZSwKLQkweGE2YmY4YzI1LCAweGJkMmRmMThkLCAweDRmYzZlYTg3LCAweDM3NWYzMWVhLCAweGM3NDY5MjdlLCAweGU4ZjIxMDc3LAotCTB4ZjFmM2RmYjIsIDB4NTBiYWZlMjksIDB4M2RmYTUwYmYsIDB4NzFlOTZmOGUsIDB4NWFiZjhlM2YsIDB4ZTM3NWYzMjMsCi0JMHg3ZmM2NDcyNywgMHg2OWZkZTQxMiwgMHg4MjUwN2YxOCwgMHhhZTFlZjdmOSwgMHg3MjhmN2Y5ZiwgMHgzNjM1ZmNmZCwKLQkweGJkOTY2N2ZmLCAweGM2NGZjN2NkLCAweGJkMmIzZmY5LCAweGUzZGZlNmNkLCAweDY2ZmU2Y2E3LCAweGY4ZWM2ZmRhLAotCTB4MzdmZTA4ZjYsIDB4YjcyZmY4YzIsIDB4OWFlNWJlMzEsIDB4ZjdmOWZhOTEsIDB4YmY5ZmE0NWMsIDB4ZWFmZjhkOTksCi0JMHhmOGY4ZjdiMiwgMHhhYjdmMWMzNiwgMHg3ZjliMWVmNCwgMHg3YzcwMDdjZiwgMHhlNWQyYjliMywgMHhlZWU2NGRhMCwKLQkweGQwMDE5NWM5LCAweDI2M2RkNDEzLCAweDc0NjAyMGQ5LCAweDI4MjAyMTljLCAweGVmZDA4NGU5LCAweDkwM2Q0ODE3LAotCTB4YTY0ZTNmMGUsIDB4ZmZkZjQ3N2MsIDB4MWJmMjk5MjIsIDB4NmZkY2Y3ZjgsIDB4MTI1NTgxMjcsIDB4MWRkNzRjMTksCi0JMHg1NzY3YTc5YywgMHg0MTdlZDRjZiwgMHhjYjVkOTkzZiwgMHhhZTg0MzNkNiwgMHhmMGE2YWU3NywgMHhmZjllZDUzNSwKLQkweGVmMGE0M2UyLCAweDUwMDM4ZGVjLCAweDI3NGU1MTRmLCAweDNlMWNkZGYwLCAweGYwY2NhZjE1LCAweGI3NTk0ODQxLAotCTB4MTJiZjU0ODksIDB4YTRkYmFjYTUsIDB4MDZlNGQ4ZmUsIDB4NDExZTdmYmYsIDB4NzhmOGUzMTgsIDB4YTI3YTk1NGUsCi0JMHhlNmZlNDYzMSwgMHgxN2Q3ZDVhZCwgMHgwMTc1ZjQwNCwgMHgwOTMwMTE3NywgMHhhNGM1ZmQyZCwgMHhmNzFkMjU0ZiwKLQkweDEwMjc1ZDE4LCAweDQ0N2Y5N2VhLCAweDU5NDI3MGZkLCAweGRjOTUxM2Y2LCAweGYyZjE0NjVkLCAweDQwNGY1ZDMxLAotCTB4MjdhZTkxYmQsIDB4NGNhZTlkYTAsIDB4MTRjNzJlOTEsIDB4YjYzYmYzODIsIDB4N2EwMDFhZGEsIDB4MDE5M2YxN2MsCi0JMHhiYjg3ZDgxYSwgMHgxYmYyYTdlZiwgMHg3MjdlZGYyYiwgMHg1ZmMyODczOCwgMHhkMzM5ZTdjNiwgMHgwNzZmYTE5ZiwKLQkweDRjM2M1M2JjLCAweDBiMmJmM2U0LCAweDk3NGYxZTJkLCAweGQ1OWVlNGM0LCAweDQ1OTk1NGI5LCAweGYyNGE2YmRmLAotCTB4NTRmZmQwYTgsIDB4ZTliMzU2ZTIsIDB4OWQyZTc3NzgsIDB4NWYxMDdhYTgsIDB4Y2ExMzVjZWUsIDB4NTEzNWM5MzksCi0JMHg1NmU4OWYzOSwgMHhmNGM2MzU4ZiwgMHg4MDY2YTkzZiwgMHg5MzIyN2I0YSwgMHhkZjlmZWFjNywgMHgzN2FmYTY1NiwKLQkweDQ0ZDU2ZWE5LCAweDUxMzRkM2U5LCAweGRkYTgxYjIyLCAweGRmNGQzYTk5LCAweDIzMzljNjJlLCAweGM1ZmNlM2E1LAotCTB4NmU3NDY1NzgsIDB4OWU2MWQzOWQsIDB4ZWZmYTYzZjQsIDB4M2NkODNhMWYsIDB4MzRiYzNhZTgsIDB4M2Y3M2Q2MTcsCi0JMHg2ODliNWM5MCwgMHg1N2JjMmE3ZCwgMHhhODNkNzQwMCwgMHhiNzY5ZjNjMSwgMHg5MGQ2YjlhNCwgMHg5Mjg5Nzg3OCwKLQkweGUxMWNmZDgzLCAweGNhMjNiY2ViLCAweGNkMGM1ZmE2LCAweDgzZmY4NzhiLCAweDI5Yjc1NmRkLCAweDQ2MWU3ZTNmLAotCTB4YTA5M2E3YjgsIDB4YmE3NmY2MGEsIDB4YzY3Y2ZmNDcsIDB4MThmY2UzN2MsIDB4NzRlMDljNWYsIDB4NDA3YzA2M2UsCi0JMHgwN2MwOTNjYiwgMHgzOWM3Y2YxNCwgMHgyYmY1NDQxZiwgMHhjMDEzODNlMywgMHg0ZWIwOTkwNywgMHhhNzMwN2M2NiwKLQkweDZmZmQzMTJhLCAweDQ3OWZmNGU3LCAweDI5Njc2YWZjLCAweDljYTlmNzRhLCAweGJhNzNiN2VlLCAweGU3YWI1YmNmLAotCTB4M2NmOWI4OGYsIDB4MWNjMWUxYjksIDB4M2NmOTgyNjcsIDB4YTYyNTQ3YjIsIDB4NjU3OTc5ZjgsIDB4MmZmOTFmMDYsCi0JMHg4ZTg5YjAyOSwgMHhiZWE1Njc3YiwgMHhmZDAzNzZmZCwgMHg3NzdlOWMzYywgMHg3MTY1ZTg0NiwgMHhiZjNlNTE5NywKLQkweDAxMTkyN2ViLCAweDdjNzEzM2QwLCAweDMxZjVlOWMxLCAweGI1YjRkN2E3LCAweDRjZWZlZDhmLCAweGU0NmJlMWUyLAotCTB4ZjZiMTNhZjQsIDB4ZmI0NGQ1NzksIDB4MTEyZjljNmIsIDB4ZjA4YzZmZjAsIDB4OWJiYmUxMWEsIDB4ZGZhMDM0MzgsCi0JMHg5ZmViZjdkZCwgMHhhNjI3ZjRjZiwgMHgyOGI2Yjc5ZiwgMHhmM2NjNzhlMywgMHgxOTcxYzFjNSwgMHg2OGU0NjNjNywKLQkweGJhODllNmUxLCAweDc0YzA4MmZhLCAweGQ2ZjNmYmRkLCAweGNmYjVkNGNlLCAweDZiYTA1YWE5LCAweGJkZjU2N2JmLAotCTB4ZmY0Y2ZhYmEsIDB4ZGZlZjc0NGYsIDB4NWQzMmZmN2QsIDB4MGY5NTlkZmIsIDB4Y2M2N2RhZWIsIDB4OWY1NzRjN2YsCi0JMHhmNzRhNzllZSwgMHgxYjY5ZDRmZSwgMHg5NWI3ZWQ3NCwgMHg5ZjZiYTRiZCwgMHhhZTliNzYzYywgMHhhNzVkZDEzZSwKLQkweGJkZGE1ZjdiLCAweDlmYzQzYmEwLCAweGQ5ZTc5YWJjLCAweGJkOWI4ODZjLCAweDQ5Y2YyNjZmLCAweGU4NGM3YWYxLAotCTB4MjczZWUzYmIsIDB4ZWJlMTNmM2UsIDB4OWYyOWU1ODMsIDB4ZjE5ZjlmMGIsIDB4MTk3MmM1MGQsIDB4MTc2YTcxZTgsCi0JMHhmNGFjNzU0YywgMHgzYmIzM2UzZSwgMHgwNzIxN2ZlOCwgMHg2ZWFlYTg5ZiwgMHg3YThkM2ZhMCwgMHhjNGU3YThjZiwKLQkweDQ2YmQ0NmZiLCAweGE3ZTBiOTdmLCAweDU5Y2YxNWI0LCAweGIwMzI5MTI0LCAweGYzMTJjZDBiLCAweDQzZjNjNDU3LAotCTB4YjIxMjNlZGMsIDB4MWE0NWNiMWMsIDB4YWY0NWQzOTMsIDB4MzkwNjJlNzUsIDB4N2I4NWE0NWEsIDB4ZWVkYWRhNTcsCi0JMHg5YzI1MDQ5NywgMHg5ZWFhOWNjZiwgMHhhZGU3MzgzYSwgMHhlZjgwNmJlZCwgMHgwNWFiZTQzOSwgMHhmM2RkNDI4MSwKLQkweGU4NDc5Yjg1LCAweDQ3YmIzYmJlLCAweDQwMmFmODQ2LCAweGZmODE4N2I2LCAweDA0ZGViNjVkLCAweGI3YmMzMWY2LAotCTB4MDBmZWU0ZGIsIDB4MTMxOWZiYWYsIDB4MDlkYjViYzAsIDB4ZGY1OWVhZWQsIDB4MGFlMzhjZDgsIDB4Y2IwY2I5ZTAsCi0JMHg1ODY5YmU1MywgMHhiMDc5ZjA5ZSwgMHg4ZjliZWUzYywgMHgyNTVmMzFlNSwgMHhmYmJlOGQ5NiwgMHhlN2Q4ZmNiMSwKLQkweGRmMjNmMmM3LCAweGYwM2YyYzZhLCAweGM0Nzk2MTU1LCAweDc3Y2IxNmI3LCAweDBmMmMwMTdkLCAweGY5NjMzNmZiLAotCTB4NjU4ODJmOGUsIDB4Y2IxNmFmODMsIDB4NGIxYjlmMjYsIDB4ZmMzMTJmMjEsIDB4MGM3M2JkZDIsIDB4Mjc3ZDA4YmYsCi0JMHhjZTI5ZTFmNCwgMHg1ZjgwNjcyZiwgMHg3M2M1ZjExMiwgMHhhOTM4YmU3YSwgMHgxODVmMjI1NiwgMHgwZTkxYTFmNSwKLQkweDZkZjc3ZDQ2LCAweGY0ZGQyMWY5LCAweDk0NDNmMGZkLCAweDdhMDZiOWRlLCAweGRlOGY2Y2Y3LCAweDM5N2QyMjFmLAotCTB4MGU0ZGQzYmQsIDB4ZjdhNzBmMDYsIDB4NDU3ODA2MjMsIDB4MDQxMjgxYTksIDB4N2U2NjY1YmQsIDB4NTk1YjcxMWUsCi0JMHhhYmM0NTNkYywgMHg3YjhiMzI0OSwgMHgzMzc1NzhmMiwgMHhiYzAzNzdmZCwgMHgxMGZiMDRhNywgMHhiZjZiNWZkYSwKLQkweGUyMWJkYmZmLCAweGNjNDdhZGNjLCAweDNkYjVlNDg0LCAweGRhZmQyMzNmLCAweDliZjEwM2M0LCAweGM5ZmYwZWJlLAotCTB4MTRhZjBjYzksIDB4ZGE4NGIxYWEsIDB4YmVkNzM1ODcsIDB4ZWFjNTlhZWUsIDB4NDIzYjAxMGEsIDB4YjhkOGFlODIsCi0JMHhjMDVmYTQ2ZiwgMHg3OGZiNzY2NSwgMHg3ZjMxMzc0ZCwgMHg2NjU3YmFkMywgMHg3NzZmMDhmOCwgMHhmMjg5NGU0ZCwKLQkweGQyZGNkN2FiLCAweDk1ZjgzM2JiLCAweGQ4MDk5YTFmLCAweGU5YjAxMjMzLCAweGY1YTdlNWYxLCAweGI1N2M1MWMxLAotCTB4ZjRmNjhmMzUsIDB4ZmMyZmZmZGUsIDB4ZGE4ZmE3YjQsIDB4YTQ4NzQzZDMsIDB4NzM1ZmM3YWYsIDB4MjRmNzVkMzEsCi0JMHgwMDhlMmY1OCwgMHg2ZGY0MWMzZSwgMHgxYmExYjBmOCwgMHhmODEwNjFmMCwgMHg1YWRmZjY5ZCwgMHhlOTJhNGQ3MywKLQkweDY2ZTdlZDE3LCAweDEzYWY5MzkzLCAweGRlNGU5ZWJlLCAweGQzN2UwODU0LCAweDEzMzQ1MzdlLCAweGNiYWU5ZWI5LAotCTB4ZjI0ZGNmNjUsIDB4NWRjZmYwMjAsIDB4NmY0YTdlOGQsIDB4NmJhYjZlZmYsIDB4NDlkNjEzODUsIDB4NzYxMmZlNjcsCi0JMHg3NWZhMTdjMiwgMHhlN2MxZWI3MywgMHg1OWFlYjBlZCwgMHgxYzcyNjM5MiwgMHgzZTliNmMyZiwgMHgwZTc5ODM4YiwKLQkweDU0N2ZhYzViLCAweDU2YjdhZmFiLCAweGRjNTk2MzQ5LCAweGE1M2E5OWM0LCAweDg3NjllODNmLCAweGQwMmY3OGUzLAotCTB4OGE1ODM5OWIsIDB4NjhlNDk2N2UsIDB4ZjAxOWUzOGUsIDB4NzljOTgwNWUsIDB4ODFlYTFhNzUsIDB4YmUwYjNlMzMsCi0JMHhkMWMzN2RmNywgMHgzODUxM2Y1NiwgMHhmNDI3Yzg2YSwgMHgyYjg5MTA3YiwgMHhiZjdlZGIzZCwgMHgyZTU2YmU0ZCwKLQkweDIyOGYxMDY4LCAweDU4MGJmNTIxLCAweGZmZDEyNTJmLCAweDdlODBmNGFmLCAweDdlOGJhYzE1LCAweDZmZDk0MWJkLAotCTB4NTc5ZTFlYmUsIDB4ZGZhM2M2ZWIsIDB4MWIxZWM1MzksIDB4ZmNiNmQ3N2MsIDB4ZTA4NGU0MjgsIDB4M2YzNzRhNWYsCi0JMHgyZmI4YTdmOCwgMHhmYmQwZTQ5NCwgMHhiYWJhNjk2ZCwgMHg0M2IzYjZiNywgMHgzZmMxYzdlNywgMHgyZDFjZDFjMCwKLQkweDhiNDdjMDI5LCAweDJiMzU1YjM4LCAweDg1MTJkNWI2LCAweDMyMmMwNjZmLCAweGY2MjU5ZjgxLCAweGEzNGI2MmRlLAotCTB4OTY4ZmExZTYsIDB4N2Y0MTQ4ZWMsIDB4N2M2M2M5NzgsIDB4MWE0ZmNkOWYsIDB4NDM1OWZiZTAsIDB4Mjk5NzA3NzksCi0JMHg1MWZkMzE1NCwgMHhiNDRjNDcwYiwgMHg4OWFmMGY3ZSwgMHgzNTU5YWVmZCwgMHhmZjVmZDEwYiwgMHhkZDcxZjg5NCwKLQkweDFhYWU1YTc3LCAweDc5NmE3ZTBjLCAweGE2ZTY4MzcwLCAweDk4OWNmYjc0LCAweGZmYmU4MmM2LCAweDJmNjNiYzljLAotCTB4NTdiNzkxOGMsIDB4N2JlNzBkNjQsIDB4ZmZiZDZhY2YsIDB4YmFiMWQ3NGEsIDB4ZWFjNzVkM2EsIDB4YTRjOTczZWEsCi0JMHg5YTE3ZDgyYywgMHg5NzRhYTRmYiwgMHhkNWFlYjhkNCwgMHg3NjU2ZmZiNSwgMHg5MWU3N2NlMCwgMHg4NzYwNTVjYSwKLQkweGJjMjlhOTNmLCAweDcxZTAwNDdkLCAweGIwYzFmYWU3LCAweDliNDU5YzRlLCAweDI5ZmVhOTczLCAweDAzNDg3Y2RmLAotCTB4ZTNhNmY5MzksIDB4MGJlZjgwMmYsIDB4ZjMxNWM3ZTIsIDB4ZTQwN2RiOGEsIDB4NTliYzU4NzgsIDB4ZDgxMjA3NzIsCi0JMHhmNzZlNWFiZCwgMHgzYmZhNWU4NCwgMHgxZWIzMWZjMCwgMHgyM2U3Y2QzZiwgMHgzZjlhZGZlYSwgMHg2NWMzMjkzMiwKLQkweDQzMzllOTQ1LCAweGMxOTIxY2Y2LCAweGE0OWYwMDhlLCAweDViZTJmOTQ2LCAweGQ3MTM5ZmY3LCAweGQ3YmZkZmZmLAotCTB4MWQxMmJiZmUsIDB4NGZmZWQzN2YsIDB4ZGVmYzVlODMsIDB4MDcxNWVmZmEsIDB4ZjA0NGM1ZmYsIDB4YjIyYzNhMGIsCi0JMHgxN2MwMWMzNCwgMHhiZTA5NmUxZCwgMHgxNGRjYjg1MywgMHg3YzYwNzE0ZCwgMHg3MjVhYjlhYSwgMHhjNGZiZTk5OSwKLQkweDJjOGU5YzRkLCAweDNkNjAxZmE2LCAweDZhNWFmY2Q5LCAweGUxYmQ0MTNlLCAweDFmM2E2ZTIwLCAweDU1MmU3ZjJiLAotCTB4ZDEyM2Q5ZWYsIDB4M2I0YWUxNzUsIDB4ZmU1MWE3NzEsIDB4OTk1M2U5NTQsIDB4NjkyYWQxY2EsIDB4ZTVhMjQ1ODAsCi0JMHg3ZjczOWFlMiwgMHg5YmY2ODM3OSwgMHg4ODA5OTIxNCwgMHhhMTg1MzM3NCwgMHhkZDk3ZjcwMSwgMHhhYzc3NjA2OSwKLQkweDAzYjQxMWU0LCAweDI1N2VjN2IwLCAweGQxYTcwYTIzLCAweDA1NzgxMDNlLCAweDhkODM5N2VjLCAweDYxYjY0NjNiLAotCTB4OWQ3NWE2ZmMsIDB4OTk1NTcxOGMsIDB4OTE5YmY3NWMsIDB4MGY3ODJmNTQsIDB4ZWRhMmY5NTIsIDB4YjQwNWYwYWQsCi0JMHg1ZDcwOTVhZiwgMHgwNGIwN2FkZiwgMHgyNGVhZjNlYiwgMHg2YmViNDE5MiwgMHg2MGY5ZWM5MywgMHgyNmRjZDJhZiwKLQkweDYzMzczYzVkLCAweDRlN2UzZWFjLCAweDU4MDZlZWZjLCAweGYzZTZjZmZmLCAweDFjMDBjNDA1LCAweDUzYmQ3OTBiLAotCTB4N2RlMWJhNTksIDB4NWM0YzVmZmEsIDB4ZWU2N2I2NmMsIDB4OTNmMTQyNzgsIDB4NzcxZjRkM2QsIDB4NzIzZjI4NWYsCi0JMHhlZDNhZTIwMCwgMHgwNmVkNmRjYSwgMHg5NDYzOTAwZCwgMHhmNTliODVkYiwgMHgyMWI3ODE3NSwgMHgwOWU2NGE0YSwKLQkweDYyMzZjOWIwLCAweGFkYjViYzAzLCAweDY3YzFkYmM3LCAweDhjZGZlZjYzLCAweDdjNzFkODFjLCAweGNlNjRmMTFhLAotCTB4YzkzNWUzZDEsIDB4YjVhYmM3YTksIDB4MDY2ZjAxOGYsIDB4ZjRiOGE2YmMsIDB4M2E2NmEyZjgsIDB4YTlhZjA4OTAsCi0JMHhmYWU4N2I0MywgMHg3YWYxYmVmOSwgMHg2ZmIzZTAxNywgMHg1N2Y0OWYxNCwgMHhhMjYyYzk2NiwgMHg1Njc2NzAwNywKLQkweDQ2ZmZjOGMyLCAweDg1YjVjOTc5LCAweDU1ZjdmODI1LCAweGY4NjU4MTk5LCAweGY1MDUyYjk1LCAweDVmODcwZTQwLAotCTB4YjNiZWNkOWEsIDB4NjBjOGJjODIsIDB4MmYyODVkNTUsIDB4M2IwNDY5MTAsIDB4MzkxZjI1NmUsIDB4ZjIyNjhlODAsCi0JMHhiN2QyYjkwOSwgMHgzN2RlM2E2ZCwgMHg1OWQxZGY3MSwgMHhjMDc1YWJmNCwgMHgxZjIzZDdjZiwgMHhlOWZjNWQyMCwKLQkweDBmMjJiMDI0LCAweDAwZTVkMWU0LCAweDU5ZjQxNmJiLCAweGJhZTliMzljLCAweDcxMWY1NWYxLCAweGNkZmVhNmNlLAotCTB4OTYwNzNlNmIsIDB4ZjdiMDE2OGYsIDB4MDA5MWZiOWIsIDB4ZTE4MzFiYWMsIDB4ODg0ZTU5MGIsIDB4ZWJhMWNmNjcsCi0JMHgxZmZmYWEzNCwgMHg4MDI2NWFkNSwgMHg5NTE3ZmMzZiwgMHg1NWVlY2ZhZCwgMHhhYjc3MmMzNSwgMHg0N2ZmYWUyNiwKLQkweDc5ZjIwMWZmLCAweDAwZmZhOTlhLCAweGQwZTZhNWYxLCAweDUwZDVjYjI2LCAweGJmMzE5NWFmLCAweDc1NTY5YmMwLAotCTB4MTRkZjhjMmQsIDB4YjM1YzE5NTIsIDB4ZjY0ZjE4MmQsIDB4Yzc2OGFiZDYsIDB4YzQ4ZjY2OWIsIDB4OWYzMTFhN2MsCi0JMHgxNjNjOTBhNiwgMHhhMWNkZDllMiwgMHhjNGY3ZWM0ZiwgMHhkYWE2OWRkOCwgMHhiYjA1YWUyNywgMHhiMTI5OTRmNywKLQkweDYyOGNmYmZmLCAweGM4N2U2ZWZhLCAweGZhM2QzOGJhLCAweGY1MDlkMjhjLCAweGU4M2RhM2U3LCAweGI2MjYyYTNjLAotCTB4OWJlY2JmMjIsIDB4NzdjZTMzN2IsIDB4OWE3MjQ4NDcsIDB4ZjJhNWRjMjksIDB4MGZlODNmMWQsIDB4NTM3Zjg2ZmIsCi0JMHhlZTI0ZGU5OCwgMHg1OGIzMzNmMSwgMHg1ZjU2M2NlOCwgMHhhYmQ0ODg4YywgMHg3ZWMzMmFmZSwgMHhjM2M0NWQyNSwKLQkweGNhYzBlMmJlLCAweDhjODdlOGI5LCAweDAyOTI0OTBlLCAweGMxMDhlYmZhLCAweDBmYzg0NjdlLCAweDdmMzJjMDk0LAotCTB4ZTNhMjgzNTAsIDB4MDkyMWMxYzcsIDB4OTFiODM2ZjEsIDB4OTBkMzdlNjAsIDB4NjFmNmZhMjMsIDB4YWUyMThhOGQsCi0JMHg5ZjgxOTAxNiwgMHgzZmQyOWM0NiwgMHg2ZDdjMTNhZiwgMHhkN2MwNTkyNywgMHgyNTk2NWU0ZiwgMHg1YjlhNGZmMCwKLQkweDFkMzk2Yjg4LCAweDk3NzY3OWJmLCAweGY5YTc4MDIyLCAweGQwNDZlYzAyLCAweDM2M2NiMmYyLCAweDhmZjdmYWQxLAotCTB4OWU4N2YzMGEsIDB4YzZmZWQ4ZDIsIDB4ODE2ZDczNTMsIDB4NmZiZTk0NjUsIDB4YjhjNzJkY2UsIDB4ZjEzZjE3YzQsCi0JMHhiZmI0NGY3NCwgMHg1Mjg3YTMxNSwgMHhkYzgzNjg0ZCwgMHg3NWNmYjBhOSwgMHgxMjk1YzRkZiwgMHhkNTUyMDMxYSwKLQkweGZlMjUyY2I5LCAweDgyYmZjMTdkLCAweDc3MWYwNTlmLCAweDA5ZWM5YjllLCAweGIyNjcxODI0LCAweGUyOTRmY2NhLAotCTB4OGQyNDdkYjksIDB4NWJiNGQ3YzIsIDB4NGRhNTc0MjIsIDB4NzQ3Yjk2OWEsIDB4ZTk2MzBlZjEsIDB4MDE3M2NiMjcsCi0JMHg3OWVkNmYxZSwgMHgyNTk0ZWMwZCwgMHhmYTBmZDg5NCwgMHgzY2EzYjE0YywgMHgyZmY3MmQzNCwgMHgxZmI1YmM4MywKLQkweDNiZjQ2MTUzLCAweDI3ZGZhZWJmLCAweDQ4NzIzZTMxLCAweDJjZWZiMjcxLCAweDllODEzMzU1LCAweGU0MmM3MzJkLAotCTB4ZDYzNzk2MzksIDB4ZjAwYTUyNzksIDB4NTViOGM5N2IsIDB4Y2JhN2RlMTQsIDB4OWYzNzY4NGMsIDB4YmYwODVkNTIsCi0JMHg3OTYxMzE3ZiwgMHhhMmZmN2M3MSwgMHg2MWIyMDRlYiwgMHg1Y2ZjOGM0ZCwgMHg5NTI0OGE1NCwgMHgwZWE5MmJmNiwKLQkweGUzYzMzZmVjLCAweGQ3N2UwMDkyLCAweDg3NjlmZmJmLCAweDRiZTY5MGZkLCAweDE3NjNhNDY2LCAweGRmMTBmNzFlLAotCTB4ZmFkOTU1NzUsIDB4ZmVlYTgzNzEsIDB4ZDBmNTgxNTIsIDB4MGI5NDRjZmMsIDB4OWNlZWM3OTcsIDB4ZjVmMmVkNGQsCi0JMHgwOWVmMTRiNSwgMHhmZmUxNDZmYywgMHg5OGU4N2JhNSwgMHg5Yjc0OWUxNCwgMHhiODkyZjkwOSwgMHhkNTA3NGVkZCwKLQkweDdlMjI1ZTc3LCAweDg4ODM5NDdlLCAweGEyMjU4NDVjLCAweDUxZWE4ZTBjLCAweDUzODUyNDI5LCAweDY4MWMzZWE4LAotCTB4NWE2NTg1YjEsIDB4ZjNhN2NmYTYsIDB4NjIzMWZkODYsIDB4MjgzNWZkNjEsIDB4NDBmYjIzNjcsIDB4N2NhMWFlYjgsCi0JMHg0ZDgyMTgzOSwgMHhhZWY1ODdmNCwgMHhhZmQwYmZkOCwgMHg4NGFmMmY0MiwgMHg2N2VkMzZiOCwgMHg2MDRhNjNlNSwKLQkweDlkNjdlZDA1LCAweDM1NzQ5OGQyLCAweGNlZGNmMzJkLCAweGJhNDEyMDYyLCAweDUwMDNmNGUyLCAweDJlMjdjZDU3LAotCTB4ZjZiMTIxMGEsIDB4ZjExNjlmNWMsIDB4MGVkMGE4NDcsIDB4NzhjNjRhZjgsIDB4ZDM4ZTkxODAsIDB4ZjRmMmY4MjIsCi0JMHhmM2ZjZTk1MiwgMHgwOWJjYjYwZiwgMHg4OTJiOGI2ZSwgMHg2ZmRhZTc4ZCwgMHhjYTU5M2I0MSwgMHg0ZmIwZWFlZCwKLQkweDE3ZDAwMTRkLCAweGVlMjM3YzI0LCAweDExMmQ3OTliLCAweDE3ZDNhMGZkLCAweGM0Njg2ZWMzLCAweGVmNjFhZTdjLAotCTB4NTRhODc4MzMsIDB4NDFmZGUxYjksIDB4N2Q3MjNjMTEsIDB4YTEzNmZkYzIsIDB4ODI4NDg2M2YsIDB4MmVhZWIwODUsCi0JMHhiNWVlMTUwOCwgMHgzZTBiZjFkMSwgMHhhNzFiNzI2MiwgMHgxNWQyMGUzZiwgMHhhZjZmOGY1YiwgMHgzMDdjOGMzNywKLQkweDkwZTU0YzIwLCAweDFkMWZhNWQzLCAweDIzYTBmMGJmLCAweDUyZjY4NzUyLCAweDcwMTllYTk1LCAweGM5OWViOTE2LAotCTB4MWIzMDM4OWMsIDB4N2YzOGJkZjcsIDB4ZTQyYWYxMTksIDB4MDVlNzI4ZDksIDB4OWFmNmJiZjcsIDB4MGM4ODVjMTksCi0JMHg4YTQ0MzhlMywgMHgwOWVjZTFjMiwgMHgzOTJkZTg3YSwgMHgxMTU3ZjQxNSwgMHhlYjg1MDNjNSwgMHg2OTZmMmU3MywKLQkweDYwZTMwMjE3LCAweDZlODY0ZmZlLCAweDY1ZGYyMjRhLCAweDdlOTliMjVkLCAweGM2MmY2MzFkLCAweDIwZDk5ZWM5LAotCTB4ZDg1ZWQ0NzcsIDB4N2IxNTBmMDEsIDB4OGY0YzY4MmUsIDB4MTFkZTkxODUsIDB4MDE3MmE3YmUsIDB4MTBiOTA5ZGYsCi0JMHg2ZmU0NmVmYywgMHhlODJiMGYyMSwgMHgxODllYTY1NywgMHg0NzYwMjQ5ZiwgMHhjZTA4Mjk2NSwgMHhlYjYxZDUyZSwKLQkweGUxNTc4MDFjLCAweDFhN2YxMzM3LCAweDNhOTY2M2M2LCAweDc4ZWIzOGQ4LCAweDI0ZDJjYTVlLCAweGQ3ZmE3Njc3LAotCTB4MjVlZjVmZTgsIDB4YzRjNDA5MTMsIDB4OGI0YWJjMzksIDB4N2JkMTdhMDYsIDB4OGM4MTIzNDksIDB4OGQ5ZjgwZWYsCi0JMHhhZDU5Zjg3MSwgMHhjZmM3OGE3NiwgMHhlYmYzYzg2YywgMHhmZTAyYmZmNCwgMHg4N2ZlMTE4MCwgMHg1ZmY4NTE5YywKLQkweDQyMTQ1NmI3LCAweGU3MGVmZTlkLCAweGVmOWJkMmM0LCAweDE1ZjkwYTEzLCAweGI2YjQzYWYyLCAweDljYjUyZjcyLAotCTB4MjcxOWYyNzEsIDB4MGM4MGExOTcsIDB4NGY5NzhhNzgsIDB4Y2NmNDE5MzIsIDB4MjNmMzMwODgsIDB4ODE3YTcyOGMsCi0JMHhmNmY5YTNjZiwgMHhlZmMwZGU5NiwgMHgwZWE3YjJmOSwgMHhmN2RlZjdlMCwgMHgyZmU4Mzc0NSwgMHhjNjMyNDlkZiwKLQkweDZiZjMyMDUzLCAweDJiZDgxNzY1LCAweGIzYTE5MGQyLCAweGRhNzZmMTA3LCAweGY1YzRlOGNmLCAweDlmOWYwNTdhLAotCTB4ZDRmOTRiNTQsIDB4OWUwNWZiMGUsIDB4MGFmZmQwN2QsIDB4NDFmZjViMDcsIDB4YzdmNDFlNDAsIDB4N2JmM2M1NDUsCi0JMHg4NTJiMGI5MCwgMHhhN2UyMTkyZCwgMHgxODc5YzI3ZCwgMHg0NWM4MzJhNywgMHgzNTYwNzI1YiwgMHhjZTkwNzlmMCwKLQkweDlmOGNlYzE3LCAweGE1YWI5OWRhLCAweDU4NzllMWI2LCAweDUyZjA2MzRkLCAweGEyM2YwN2U5LCAweDA2YzI2MGViLAotCTB4OGZiODIwYWIsIDB4ZTU5ZjM1ZGEsIDB4NjAyZDc0YWYsIDB4NzI5ZmQ2ZjksIDB4NTBjMjdlN2QsIDB4M2VjYTU0NWUsCi0JMHgwYWE5Nzk4NiwgMHhiZTBiOWJmMSwgMHgyYTAwZGMzZCwgMHhhYTRlNWZjNCwgMHgxZjAwOGZlZSwgMHg5YzZlYjE5NiwKLQkweGI4ODNhZTQ3LCAweDcyMjc2YTI0LCAweGEyZTRhMDk1LCAweDcyMmZhNDcwLCAweDlmYzZiZGEyLCAweGJmYjQ5ZmIwLAotCTB4MjJjZWYxZGMsIDB4ZDUyZTc3YTAsIDB4Y2FmNzEwODksIDB4OTEyNDdmMDUsIDB4YzIyYWE4NWMsIDB4M2VmOWFkZmQsCi0JMHg1ZjA3ZTcxMCwgMHg0MDdmN2NlMSwgMHgxOGNkZjNhMywgMHhiY2IxYTJkZiwgMHhkNGNlMmE4NSwgMHhkYmYwMDkyZSwKLQkweDRlM2I3Mjk0LCAweGM0YTJlOWI2LCAweDg2MzRmY2ZjLCAweDA4YmFlMzY3LCAweDUyZjMwNjA4LCAweDhkNDFmZDc4LAotCTB4YjhlOTQ5MjgsIDB4YmVjM2YxNmUsIDB4YzE2NGRmYjIsIDB4Yjg5NThiNzUsIDB4YmFlN2EwODIsIDB4YmUxZTJjNjgsCi0JMHg4NmFkNzI0YSwgMHgxNjk1MmZmYSwgMHg3OGY5ZTQwYiwgMHhmZWZkNmNhZCwgMHgyZTQ5YzhlOCwgMHhiZjYyYmU4NSwKLQkweGQ2MWYzNWExLCAweDNiY2Y5NDllLCAweGE2ZmRmNDY5LCAweDU3YmRhZDkxLCAweGJhNWEwY2UyLCAweGNiNzM3ZTMxLAotCTB4MjdjMTJmMzAsIDB4YjU2ZTgyMTUsIDB4NDk2ZThlYWEsIDB4YTE4ODhmMTAsIDB4YWQxNDhhZGIsIDB4NGRjNWY4MGYsCi0JMHhkNjBiYjI1MiwgMHgyNDBiNGQyOSwgMHhlMTY0YTcwNiwgMHhmZjkwNTNmMywgMHgxZTEyNzEyMiwgMHhmMmQ0Mjg1NywKLQkweDZmNDIzZjEwLCAweDg2YWNmOWQzLCAweGZiMGRjMDUyLCAweGY5MmZkMGZhLCAweDg5YjAzNTlkLCAweDhmMWJmYWJlLAotCTB4ODFjNDMzYTUsIDB4ZWQ4ZTY3YjMsIDB4YWY2NzcxMGMsIDB4NDkxYmE1YmQsIDB4ZjNhNjA3MTAsIDB4Y2JmMzAwMWIsCi0JMHg0MGQzMmI1NiwgMHg3OWRmNjVjZiwgMHgzMGY0MGVkYywgMHhkN2Y2MmRjMiwgMHg0YmZiMDdmMCwgMHg1ODZjNjU2ZiwKLQkweDcxMjVmZTgzLCAweGU3Y2Y3YWIzLCAweDA1MDk0ZWIwLCAweDYwZTM5OTc4LCAweDJhNDljZmYwLCAweGI3ZDU4YWNiLAotCTB4MTMyY2ZhNGYsIDB4ZWY1YTI1MTUsIDB4ZWM0YmM5MTQsIDB4ZmZlN2NiYTMsIDB4ODlkYWVmYjUsIDB4YmQ3YmU5YTMsCi0JMHg1OTM3MjYzNSwgMHg5ZmUzZjVhNCwgMHhkNmU2NzFkMSwgMHgzZjEwNWQ1OCwgMHg4Y2Y2NTQ3OCwgMHg3NzNmYjgwMywKLQkweDcwOTc1ZjNiLCAweDAxMjk1ZDFkLCAweDk1OWY4YjFjLCAweGYwNzlkM2M4LCAweDQzZmI2MTFkLCAweDFmOTQzZjFjLAotCTB4ZDk4ZWNmM2EsIDB4MmVmM2EwMzcsIDB4ZDNjNTA2ZDMsIDB4YjUyNTU5YjUsIDB4NzIxMmU3MTAsIDB4MmNhN2M5OTksCi0JMHg0YmEwODJmNCwgMHhlYTliZDAyNiwgMHhlNTQ2NTIwNSwgMHg4ZGNlMjYzNCwgMHhkYzYxNjZhZiwgMHhlODUyN2YwYSwKLQkweGJmMDJmZmY3LCAweDMxNDM3ZWQxLCAweDFiYTA5ZGNhLCAweDQ4ZjRjM2U5LCAweDRjNzVjODEyLCAweGZlYjlhYWJjLAotCTB4MTRmY2FiYmQsIDB4OWZmZmJmOGUsIDB4YjY4NDI5ZjMsIDB4NDk2OTQzZmYsIDB4ZjUzZTM5MDEsIDB4ZGM1MzVmYzAsCi0JMHgwMGY2MGY5MCwgMHg5NzdhY2Y1YiwgMHhlZWJjZTJhNCwgMHg4ZmY3N2VlMiwgMHhiNDZhOWUzOCwgMHhkNzk4NzJiMiwKLQkweDYzN2ZiZWRkLCAweDZmYTIzNzljLCAweDhlZmI2N2VmLCAweDhmZmFhODBiLCAweDRiNmEyZmRkLCAweDE0NzljMzJmLAotCTB4ZmQ3NzkzYTIsIDB4ODU2MmVjYmUsIDB4N2UzMGViOWQsIDB4ZWI2MzQ5YmYsIDB4MWJkNTA1ZTYsIDB4YzAyNzVjYjQsCi0JMHg4MDZmZjllMywgMHg1ZjVmMTRlNywgMHhmMTYxYWE5YywgMHhhY2RmMDExZSwgMHhmODFhMDFlYSwgMHg5OTA4ZmZkYywKLQkweDFmZWQ5ODQ5LCAweGI5NWY0Y2E5LCAweGI3YzUxMjZkLCAweDA4ZDFlMzg3LCAweDE3OWUwMWY3LCAweDMyNTdlNzM5LAotCTB4ZTkzM2MxZmEsIDB4Yjk1M2Y3NTgsIDB4NjAxNjg0ZjcsIDB4ZmYwOGM3MWMsIDB4NTJiY2JhOWMsIDB4ZjM5ODdmYzgsCi0JMHgyOWViODRiMCwgMHhhYTAxZmY3OCwgMHgzZmY3M2QzZiwgMHg2OGU4MGU3NCwgMHg5ZjMxOWY5YywgMHgxNzFmMThjNCwKLQkweDQzYzhiMzdlLCAweDk4M2M0ZDliLCAweDI3MTcxMjk3LCAweGZiMWNmZDBhLCAweDllOGJjNjM3LCAweDc5N2FmOGQ1LAotCTB4ZmIwMjE5MzAsIDB4YmVmOTY3MjUsIDB4NjIxYjljM2EsIDB4Y2IwNGViZmIsIDB4MTQ5MjUwNzIsIDB4MWU5NjhiOWYsCi0JMHhiOTI2MDUyYSwgMHhjNjFiNzJhMywgMHgzM2Y4YzVlYiwgMHhmODMzZjhmOCwgMHhhYWUxNTQzOCwgMHhlNjMzYzdjMCwKLQkweGYzNjIxN2FiLCAweGRjNjhiNmRjLCAweGM3NDIxZTZmLCAweDg5ZTNhMzkzLCAweDM5NzMxNjcxLCAweDdhMGJlMzE0LAotCTB4ZTcyYWJlMGEsIDB4N2Y1MTVkNzQsIDB4ZDMyMzViYjIsIDB4MGM0OTg3MDMsIDB4OWZmODhjN2QsIDB4Y2EyYjNiZjcsCi0JMHhhMWNmMDQ0NywgMHhmZDAzOWM1ZiwgMHg1MTczNjczOCwgMHhlYzI3MTc2OSwgMHhjMjhlNTQ1ZiwgMHhjZmUyNjlmYywKLQkweGUxNmFmOTYxLCAweDFiYjc1ODFjLCAweDM2YTRkZWYxLCAweGQ4MjU3Mzc2LCAweGZlZTI2ODlmLCAweGI5NzE3YjVjLAotCTB4MDNjODlhMWQsIDB4OTRmMmMyYTgsIDB4NjdlMDc1NTIsIDB4MTkxYjg3YzAsIDB4YjlkZTJjMWYsIDB4Yjc5MDc1ZTUsCi0JMHhiMmJmYWRmMiwgMHg1NjlkYmM4MywgMHhiYzYwYjJhYSwgMHhiNDFlOWI0NSwgMHgyOWM1N2VjMywgMHhiZDA3NmZjNSwKLQkweGU0YzAzYTc4LCAweDhhZWZjOGNlLCAweDMwNWJlYzU5LCAweGUwZjYxNTdlLCAweDlmM2ZjYmNjLCAweGM1ZjlmYzAwLAotCTB4N2EwMWQ1MjYsIDB4MWNkOWJiZGUsIDB4NTQ3YzUzMzYsIDB4ZDBmYzMwZDQsIDB4N2Y1NjUxZmEsIDB4YWRlMmYxMDgsCi0JMHhmZTVkYzNkNSwgMHg5Y2IyYWZlMiwgMHhlNzk2OWY2YywgMHg5ZDcxODVmMywgMHhkM2YxYjE1ZiwgMHgyZjBmOTA1MiwKLQkweDFkN2RjMTY5LCAweGZlMzA3N2UzLCAweDk3ZGM3NGE1LCAweGM2YTVhOTliLCAweDExYmUwYmI3LCAweDhkNmYwNWViLAotCTB4M2M0NjliZTAsIDB4N2Y3YzY2NWYsIDB4MTcyZmQ3M2UsIDB4ZmU3MmJmMDUsIDB4MDEyMGY4MTEsIDB4OWRlNDU3YTYsCi0JMHhkMjhmZjNlYiwgMHg3ZjhkZDlmYSwgMHg2MmZkNGJiMiwgMHhiZmNiMDlmNSwgMHhmM2RlMGQ2OCwgMHhkYjY3MmVlYywKLQkweGU3MTM2MGZlLCAweDAxNzdlOGMzLCAweGNiNTljZWZjLCAweGFjNDIzMGYzLCAweGVkODZhNDVjLCAweGI0NTkxNzEwLAotCTB4ZWNmNWM1NDEsIDB4YmZjZjJkYTIsIDB4YmRkODM0ZjAsIDB4YWJhZWNkZjcsIDB4YjcwYmZmNjksIDB4Mzg3NzdmZWMsCi0JMHhhNmRjMmZhZCwgMHhkMzY3OGU2NiwgMHg3NjMxNDliMCwgMHg1YTdjMGJkYSwgMHhmOTQzYTUxMCwgMHhiMzlhZmRmNiwKLQkweDQwZmU3YjNmLCAweDBiMWU5NDdhLCAweDQ4ZDFlZGI3LCAweDk0N2M3OGZmLCAweDhjNjhmNzA0LCAweDA5NzQwZGZmLAotCTB4N2Q4NTJkMWUsIDB4YmZlNzc5NmUsIDB4ZTlmYmEwMzUsIDB4YmM4MTEyZGQsIDB4NmU3YzM4Y2MsIDB4ZDJmYjhmZDgsCi0JMHgyM2E0Mjc4MCwgMHg2ZTg0NTNhNywgMHg5NGJkZjc4NiwgMHgzOWU3NjgyZSwgMHhlZmVkOGM5ZCwgMHgzZmU0MGU2OSwKLQkweDVkY2UwZmU4LCAweDc1N2U3ZTUxLCAweGZjY2ZjNTE3LCAweDk4MmVjYzBmLCAweGVmNTdmY2ZmLCAweDRlM2NjM2IzLAotCTB4YWY4Yzk1MmEsIDB4MDU5ODNmZDcsIDB4ZWFiZTY0NzYsIDB4Yzk2MDcyY2YsIDB4ZTY3ZmNmOWUsIDB4ZjM2ZmM4NDcsCi0JMHg4YjI4ZmQwZSwgMHg5OWQyZmQzMCwgMHg5ZGZjZDFjNSwgMHhkNjczN2U2MSwgMHg5YmYzODZkZCwgMHg3N2M4M2M0YiwKLQkweDY1Y2JkN2YzLCAweGE4YmFiZjEwLCAweDEyZGJiMTkwLCAweGI5NGZjNWM4LCAweGNlN2M5YzVjLCAweDI3ZjhmYjhjLAotCTB4Yjg1MzFlYzEsIDB4Y2NjOGVmZmMsIDB4YTJmNzIxY2YsIDB4OWYxMWZkN2QsIDB4NThmY2I1MGIsIDB4MThlM2M4YmYsCi0JMHgxZTIyY2QxMywgMHgyYzcyYjU0YywgMHhhODdjNmViZiwgMHhlNjczZTgwMSwgMHhjNDM2NzcyYSwgMHhmMTQ0YmQwMSwKLQkweDU3NDg3YzczLCAweGExZjJiZjY4LCAweDNmNWNkOTMxLCAweDdmMTg5NTM5LCAweGMzOWUwNGI3LCAweDNiYWEwZGZiLAotCTB4MWRmNzVmMjksIDB4MWQxNzkyYjksIDB4OWYxZjI5N2YsIDB4ZmIwYzlkYzIsIDB4MTJiMzI3YzYsIDB4MzA1Zjg3YzcsCi0JMHhkNjExNjI0YiwgMHhhMzAzZjNhMCwgMHg3ZGU0Y2RmMiwgMHhiZTRjYzNlMywgMHgyNjA3YmM4NSwgMHgwYmY2ODU4ZSwKLQkweGMwZmM5OTg3LCAweDUzYzdlMDc3LCAweGQ4ZDljMmI4LCAweDg0OGE2N2JlLCAweGMzZGE4MGZhLCAweDUxYmQ3MjQ0LAotCTB4NmZhZDcyZTUsIDB4ZTE0MjdjMTcsIDB4ODk3ZmMwNTYsIDB4ZmI2MTBiZjAsIDB4N2U3OTI3YmMsIDB4ZTkyN2RjZmIsCi0JMHhjMTc2MzE3NywgMHhlM2Q5ZTMwYiwgMHgzYjcyMTNmYiwgMHg2NjE3Zjg0ZiwgMHg3NTkzZmNiZCwgMHg1YmM2MTI5ZCwKLQkweDIyYzQ3ZThjLCAweGQzYzJmMDM1LCAweDNlNTRhZjIwLCAweGRhMmVkZjQxLCAweGJjYzE5NmEyLCAweGZiZGVhYjNmLAotCTB4OWNhOTBmZWUsIDB4NzIxNDE2N2MsIDB4NDY5ZmQ3YWEsIDB4ZGFmZjlkMzksIDB4YTM0ZmU0N2UsIDB4ZGMxNjdlOWMsCi0JMHg0ZTUwOTU5ZiwgMHg3M2M3ZWRiNywgMHhmYTcyZjFiNywgMHgwNTNmYWIzZiwgMHhmMDFiZDZmZSwgMHg1YjYxZjQyNywKLQkweGMzZWEzNDc4LCAweDRmYzQxMGUxLCAweGI3MDkwZmEwLCAweDEzZmU0NmMzLCAweGFkZjgyNzdjLCAweGRkYzU5NWZjLAotCTB4Zjg0NGVmNDEsIDB4ODQ1ZGYwNTIsIDB4YzVkZjA1MmYsIDB4ZjBlYWQxZTUsIDB4MDgzZjM3MTcsIDB4NTg5ZjAxYTIsCi0JMHg3NTgyOGVkNiwgMHhmNmM1YzU4NiwgMHhjYjM5YWUxMywgMHg4MTk2OTNlMiwgMHg2N2Q2ZmQ2YywgMHg0M2Y1ODJhZCwKLQkweGIwMjBjNzI2LCAweGVjNDYxM2ZiLCAweGE0MjdlY2ZjLCAweGJlZjlmZTZkLCAweDk2M2U5ZGNiLCAweDY1MDc1ZmEzLAotCTB4ODk1ZjA0MmYsIDB4MTA5MGUzYTUsIDB4MTZmYmQzODMsIDB4N2Q0MGY0MDksIDB4Zjc2Mzk2ZTAsIDB4OTMwYjY0MGIsCi0JMHhiZDFmOWRmNywgMHgyYzc4MDg1NiwgMHhjYTk3ZWU2YSwgMHhhZTFiYWJmOCwgMHhiNWZjNDQ1YiwgMHgwNTRjZWZkNSwKLQkweGVhMWFkYTdkLCAweGFkNGY3OTg5LCAweDQ0OTRlNTA3LCAweGUyNWZhNWU3LCAweGZiODU3ZGY0LCAweDQ5MWJjZDViLAotCTB4YWRmOTRjOTUsIDB4ZGZhMGI0OTksIDB4YzE2OGRmZTAsIDB4YmUzOGI2N2MsIDB4ZTY3ZjMzMzAsIDB4ZTgwM2UyYmIsCi0JMHgyOTc4ZjgwZiwgMHg1MTM0YjFhOSwgMHhmOWYwOWEzYywgMHg1ZmYzNzg0ZSwgMHgwYmFmMWY2OCwgMHhiZjgxMzA2ZCwKLQkweDkzNDZkZDdlLCAweDI0YmU0ZmNlLCAweDE0ODBiYWY4LCAweDc4NGY1ZjAwLCAweDIwNjUyOTMzLCAweDJlY2FmM2VlLAotCTB4MGRlZTU3MzgsIDB4MDkzY2QzOWQsIDB4ZjM4Yzk1ZjIsIDB4ZGZjMWZlODcsIDB4ZTA3MTZmZWEsIDB4YzFhODZmYjgsCi0JMHhkYmRjZjA3YiwgMHhlYjAyMTZlNywgMHg2YWFkM2E4NSwgMHgzYjM4MjI2MSwgMHhlYjM4MzEyNSwgMHg3Y2JhMzM4ZSwKLQkweDZhMjk3ODVmLCAweDYxOGI4NWI2LCAweDYxMjM3YTdmLCAweDNhMzhmNjcxLCAweGRlMGViNjEzLCAweGFhN2Y3MDRjLAotCTB4N2FiMzI0MzUsIDB4YTM0N2RiMzUsIDB4MjQ2MmZjYTAsIDB4ZjY5OTc3N2MsIDB4ZDc5ZjIzMWEsIDB4MDU3YjZlZDQsCi0JMHg4NDU1ZTdjZSwgMHhiNjg5ODcyNCwgMHgxYThkMjg1NywgMHgzNmI3OGJmMCwgMHgzNjNkMDY0ZCwgMHhjYmNlMjljMCwKLQkweDg5NGZmYTNiLCAweDE2ZmViZmUxLCAweDc3YjllNzA1LCAweDAwMzMxYmY4LCAweDZhY2ZlNzJmLCAweGRkZDVmNjA0LAotCTB4NjBlYzVhZmIsIDB4MGE4N2NlZWYsIDB4OWFkYWRmOTEsIDB4MTkxZjc2ZDcsIDB4ZmVlOWViMDUsIDB4NzhhNzdmMDAsCi0JMHg0ZWFiZjYzYSwgMHg5NDQ3ZDVkNiwgMHg1YzAwYmE3OCwgMHg0YjhkY2MxMywgMHhmZWYwMDk1ZCwgMHhmN2Q5ODU4YSwKLQkweGRiM2U0YmVmLCAweGJmMmMzYjJiLCAweDdhZmM4NTg3LCAweDdjNDFiZjcwLCAweDM3ODcwMGZmLCAweDEzYjM3ZTQ2LAotCTB4NjU5MmVmYzksIDB4Zjc5ODZjY2UsIDB4ZDk5ZWZhOTIsIDB4N2YyNWNmODAsIDB4ZTIyNTNiNTAsIDB4OTYzZTJkYWIsCi0JMHhlZTE1YjRkZiwgMHhhZGY5MDAxNywgMHg3ZDdiZjJhMSwgMHg1MGQ2ZmM4YywgMHhmZjhiY2RmOSwgMHhmYmU1YWU2ZSwKLQkweDIwMmRkZjk1LCAweGZiZTAwOWJmLCAweDkwYWY5ZjA5LCAweDUxZDBmY2RmLCAweDFhZmNkZjk0LCAweDRhY2VmOWZkLAotCTB4MmJmMjdiNGIsIDB4ZjJjMjlhNzUsIDB4MDRkNjVjNjAsIDB4MDBmMDFhZmEsIDB4Nzk1YmIyZjksIDB4MDM4YzM4N2UsCi0JMHgzN2MyZmM3MiwgMHgyNGJjZTM5NCwgMHg0YTdmZWYwNiwgMHgyMGVjOTc4ZSwgMHg0ZjEyODc5OCwgMHg0YmM3MjY2ZiwKLQkweDRiMWNhOGVhLCAweGM3MjY3NzQwLCAweGNiMDllYTRiLCAweDZmYzgzNDA3LCAweDY1ZjkzODlmLCAweGQ5ODQ1N2RmLAotCTB4YmNkYWRlZjcsIDB4Yzc0MWRjZGYsIDB4MmVhYjcwMmIsIDB4MjBiZjdkMGIsIDB4NjI4M2NmMmEsIDB4YjY4NWY5ZTUsCi0JMHhjNzYwZjllNCwgMHg5NzA3NzllNCwgMHgzZGE3MmE2NywgMHhlYWU4MDk1YywgMHg2M2YzZTkwYSwgMHhiMjc2MThkZSwKLQkweGU1ZjAzYjdhLCAweDI3NWM2NTlmLCAweDBmNzllMjFkLCAweDcyNzYxOTdmLCAweDNmYzVmMDIwLCAweGZmOGExZTAwLAotCTB4OWE2ZjljM2QsIDB4YmZlYzdlN2MsIDB4ZTg1M2Y4NzQsIDB4YWJlYzk1NDcsIDB4MDNlYzM1ZmEsIDB4MTJhOGRlMmUsCi0JMHgzNTE1ODdkMCwgMHgzMjhmZDE0NywgMHg1Zjg1YmZhZSwgMHgwYjg3NWM2NSwgMHg3ZTVlZDIzZCwgMHg3NzZlNjFjYywKLQkweDA4OGRjYTI2LCAweGM2NWI3OTJmLCAweGYzOGMzZmZiLCAweGMxYzVlZjE3LCAweDVkZWFiMDc5LCAweGMwNDJhZmI4LAotCTB4NDA3YzVlZDksIDB4YjgzZGEzY2MsIDB4MTVkZWJjYzQsIDB4MTQ4MDMyZjIsIDB4ZTI4NmRjNDIsIDB4ZmZjNWU1MTEsCi0JMHhiNWNmMTk0NywgMHhhZDVkMTU5NSwgMHgyM2U1MWZiYiwgMHhhYWMyY2Y4ZSwgMHg4NzA4MTJhMiwgMHgzN2U3ZTQ0ZiwKLQkweGY3YmRhZWU3LCAweDE4YWY5YzAwLCAweDAwNTljNDc0LCAweGUxODhmNGVlLCAweGE3YWMwZjY2LCAweDQxNmE0YTVlLAotCTB4NDk3NDE2NzksIDB4Yjk3NDYyNGQsIDB4YTM3OWZiYzQsIDB4ZjAzMTY1NGIsIDB4NzI1NmI3OWIsIDB4ODZmMWRkODAsCi0JMHhjMWY3ODVmZiwgMHg4YmVhN2RlYywgMHgwNWEzZTA1MiwgMHg4Y2MzOTJmNSwgMHg4MzRlNzg3YywgMHhiNTI5NWU3NSwKLQkweDg1NGZjMGJmLCAweDdlYjg3M2ExLCAweDI0NWY1MDViLCAweGVhMGJmN2MzLCAweGEzYzBiYzI0LCAweDk0NzRmYzNkLAotCTB4MGVkYzI5NmUsIDB4NmRmODAxNmYsIDB4YjMwYjY3MDAsIDB4ZDEzZTFjNmIsIDB4M2FmYzU1ZWUsIDB4YmU5ZTRiZjgsCi0JMHhjMTk3MmFiNCwgMHg1NzE3MDRlZCwgMHgwMjI4M2JjMCwgMHhlNzE5NGNlZiwgMHgwNTc4NDFkNSwgMHgzNzgzZGJkZSwKLQkweGM3NGY0OTM1LCAweDY3OWU0N2I3LCAweGI0YTExMGZiLCAweGJlNmJhZDBlLCAweDk3ODg3ZWU5LCAweDRjZmFlMDM0LAotCTB4OTBjYzhiZWMsIDB4YWMwYjY2M2QsIDB4ZjNlOTdiNmYsIDB4YzE2OTA5OTUsIDB4YTFlZmViYmMsIDB4ZjVkN2ZmN2YsCi0JMHgwMDM3ZDkxZiwgMHhlY2U0MWRmZiwgMHhjYmFlMmE0ZiwgMHhiMzM4YTQ5NywgMHgxZGYxZGNlMSwgMHhiNzVkMmFmMCwKLQkweGZiMzM2ZDM0LCAweGZmMzEzZGUxLCAweGFiYjczZTEzLCAweGMzNzEwMjk3LCAweGYxOWU1OGIxLCAweGY1N2FiOTk1LAotCTB4NGY2ZmIxOGEsIDB4YmU0M2I3OWQsIDB4ODIxZjczNTcsIDB4Mjk0ZDIxNzksIDB4ZGEyNzRlMmMsIDB4MGIzMjQ5ZGQsCi0JMHg1ODdlNzNmYSwgMHhmNTdjMzRhNCwgMHgxYjQ5ZjgyMSwgMHg1YzAzMDYxYiwgMHhiY2YzMmUyNywgMHhiMWU2Y2I5MiwKLQkweGQzZGRkNjg5LCAweGU3MTA5ZGI5LCAweDM4MDJlZjI4LCAweDJmYjIyNDlkLCAweGU1OWYzNzdhLCAweDkyN2U3MDVkLAotCTB4YWQ2NjY3YWUsIDB4Zjg4NTJiNGIsIDB4YTBiY2YxYjIsIDB4ODM0MDM4MjcsIDB4ZGUzMWE0MzgsIDB4MTFiODg3MzgsCi0JMHhkMGY5NzE4ZiwgMHhiZjE2MTFlNCwgMHhlZWRmZjAzNCwgMHgyNzNiMDcyNCwgMHg3MDZhNTRhYSwgMHgzYWM0ZjY1ZSwKLQkweDg4MjlmODg5LCAweDhmODhkYjBiLCAweGYxZTI0YzZmLCAweDFmYzIwZWM4LCAweDQ2YjFjZTc3LCAweDExYjk3OGMyLAotCTB4OTcxYjc5ZWUsIDB4NjA0MmVhYWQsIDB4ZjE1ZTZjYmUsIDB4YjU3OWIzZjAsIDB4NzhkMjBmMzUsIDB4OGJiNTg5MjMsCi0JMHhiY2VjNDIwYiwgMHgzMjIzYzU3NiwgMHhhZjNjODNiMywgMHhlMDJiYzA0NCwgMHgyYTVkYzIzMywgMHhhN2ZmNDIyZiwKLQkweGZhOGNhZDc5LCAweDYwN2YyZWY3LCAweGJhNDc5YzE1LCAweGZiODRhNTZiLCAweDU0ZjljNjJlLCAweDAwOWNjZWQ0LAotCTB4ZGY0M2MwZmEsIDB4ZjM2OTM4ODcsIDB4NjllZDA0NDcsIDB4MDAyOTZhZjMsIDB4ZDczZjhjNzgsIDB4NGJmYjY2ZTksCi0JMHg0MjdiYmM3YywgMHg3ZTczNTFmMiwgMHgxZWEyZjRkYiwgMHgzNjY1ZDIwZSwgMHg4NDlhY2JhNSwgMHhkNWM4YTNmYSwKLQkweDE2OGU0NjJiLCAweDdhYjljNjA0LCAweGUyMGJjNmU5LCAweGU2ZTE3ZWJhLCAweGJmZTdiYTg5LCAweDc0ZjFlMjQ5LAotCTB4NGY2ZmJmMWUsIDB4NjI2NTQ4OWUsIDB4NDdlNDIyYmQsIDB4YWY5MDkzYzgsIDB4ODE3Y2UwZGQsIDB4MDcwMjUxOWUsCi0JMHg0ZjAwZjM3MiwgMHgxYTdlYTE4ZiwgMHg0YzVlN2IyNywgMHg4ZjIxNzk2MiwgMHg1NGFmYTc0ZSwgMHhlNzllNzUzYywKLQkweDBjYmM3MDg1LCAweDIzOTlmNDY1LCAweDZkZTdjNzhmLCAweDA3OGEzMWU5LCAweGI2YzBmZWRkLCAweGUyN2M3ZDI0LAotCTB4Y2M0N2NlYmIsIDB4OTg4MWM4NDMsIDB4OGMwZTUxOWYsIDB4MjFlOTFiZGYsIDB4YmE0NmMwZTIsIDB4NjcyMWU5MTgsCi0JMHg3ZTQwZmE5YiwgMHg1ZDkzOTEyMSwgMHhiOWNiNzdlMCwgMHhlOGQ3Y2FhNiwgMHg1YTc3NzJiOCwgMHhjYmY3MDNmNiwKLQkweDY1YTRjZjI1LCAweDc5MjhjOTU1LCAweGE4NTcyZDE2LCAweDMwYWQyZjRjLCAweDE4OThiOGIxLCAweDk3MGU1ZGZmLAotCTB4Y2I5MjMzMjgsIDB4M2VjMTI3MGUsIDB4ODMwZGRiZTMsIDB4MGMyZjJjYWQsIDB4NWM3MTQ1ZjcsIDB4OTIxNWE3OGEsCi0JMHhlODNmODA5YiwgMHhmZWQwNGZkZiwgMHhiZDkyNjQxNywgMHg3MTJiN2Y4MCwgMHhkNmZkYzUwZiwgMHg5ZTNlNzEyNCwKLQkweDVmZDJlMWU1LCAweDU4MmU5NDJlLCAweDM1YTcwZmM3LCAweDgzNDczZmZmLCAweDhhYjJlY2JmLCAweDRmNTYyNWZhLAotCTB4MTUzZGUxMzUsIDB4YWIyNWZmYzQsIDB4YjkzYWYzNjcsIDB4YTJiOWVhY2MsIDB4ZmMyOWQ2OWQsIDB4N2JmY2VlYWUsCi0JMHhlZjU2NmZmMiwgMHhjZGZmZGEyYiwgMHhiNDVlYmZkZSwgMHgyMWRhYzU3ZiwgMHg3ZmI2OTQ4MSwgMHhhMzU3ZjBmNSwKLQkweGFlN2YzMGZkLCAweGJiYjU0OGM3LCAweDYyYmJmMDJmLCAweGU1MjllYjYyLCAweGRjZjMwZDRkLCAweDE1ZmUzZTQ0LAotCTB4OTZhYjk3Y2UsIDB4ODU2MmJmMTUsIDB4Yjc2MmEyM2MsIDB4NjdjNGYyMTMsIDB4ZGYzYjczZjAsIDB4OTBmNDE0YjYsCi0JMHhmN2JjMjZhZCwgMHg5YmEwNGEwMSwgMHhjMGUyY2M5NiwgMHhjNmE0OWU4MiwgMHhjYmNlMTdkZCwgMHgyZmJiYTA5MSwKLQkweDI0NjYzNWU0LCAweGMxOTI5MjdiLCAweDYxYWI3YWJmLCAweGNkNDdjODE0LCAweDA2MGMxZjNiLCAweDBlZTgwYmZmLAotCTB4MDViZTE0ZmQsIDB4ZmE1MGRhNzcsIDB4NDM2YWJjZWQsIDB4NDY3MDVlNmMsIDB4MTkzZDkxNzIsIDB4NmNkZDFhZjIsCi0JMHgzYTcyNGFkZiwgMHgxNDA1MWRjOCwgMHhhZGY2YjgwZSwgMHhmNGQ2ODQyNywgMHg4MDM1YjJmYiwgMHhmYjBmNmEzYSwKLQkweGMxNjU5NTI3LCAweDk4NmJhNDc4LCAweDljYjhmYmM1LCAweDJlOWVjYmU0LCAweGI4YjliY2YwLCAweGUwNjFkMWYxLAotCTB4N2VkODk5OTcsIDB4ZWY0ODY5M2IsIDB4ZTVhMTNmOTAsIDB4NzQ3OThmZGYsIDB4NDdiNWI5ZTksIDB4M2UzZWUxNjYsCi0JMHhkYzkwY2ZkYiwgMHg2ZTgzOGM2ZSwgMHgyNDE3OWM4ZCwgMHgyNTYwM2Y5OCwgMHg2ZmRjMmVjOSwgMHg3ZjFjOTE3NywKLQkweDMwN2ZjZjE2LCAweDFjY2NiZTMxLCAweGNjZmZiMzFjLCAweDFmYmY0NWU3LCAweDg3MGZlNzBkLCAweDM3NWU1OTU4LAotCTB4NzEwY2E3OWQsIDB4ODljNDAxYjgsIDB4MzNlNDIxNjUsIDB4ZjU1NjA0ZjQsIDB4MDkxNzdkNjAsIDB4ZWQxOWY5MWUsCi0JMHg3NjI0ZjFmZiwgMHgzMzY1ODVlZiwgMHg0Yzg3ZTVkMSwgMHhkODc2NjY0ZiwgMHgyMWY5NjU2ZiwgMHgxMjcwNmFjOSwKLQkweDczZTRlZGU4LCAweGJiN2EwMWM0LCAweGUwYTZiZDc5LCAweGYxYzUwZWY5LCAweDNjNWZjYzAzLCAweGVmMDAyMjYwLAotCTB4MDFjMDZhOGIsIDB4ZDcyZDc0NzksIDB4NDhlN2NlMmEsIDB4NGU2NmJmYjQsIDB4ZTNlZmQxN2YsIDB4Yzg1YWYzOWEsCi0JMHhjYWQwNzhjYiwgMHhiMTE2MmZlYSwgMHhkMzk2ODMzYywgMHg1YWYyMDA1YSwgMHg5NTJkNzNkMywgMHg5M2IzZjliMSwKLQkweGYxM2Y5OTkyLCAweDc4ZjE0YTYyLCAweDNlYjA0M2EwLCAweDQzZjhjMDk5LCAweGEyMDY1Mzc2LCAweGJhYTU3OWY0LAotCTB4NjNmODA5MjAsIDB4ZTI4OGUwMmIsIDB4YjhlY2RkMjEsIDB4M2Y0YmZhMTcsIDB4YzNjZGUxNGYsIDB4YWZjNDZlZTcsCi0JMHg0YTkwMWNlMiwgMHg2NmZjM2JmMSwgMHg0N2VlMTM5YiwgMHg3ODI5MzE3YSwgMHhjYjQxYzgzMywgMHg4MzllMTMxNiwKLQkweDI2YjlhYWRlLCAweGFiNmI3ZDQyLCAweDI1NzkwMWQzLCAweDkzMDVlNjJmLCAweDRjNWIzZTcxLCAweGM5YWQ5ZjM4LAotCTB4YTEyZGQ3MmQsIDB4YTNlOWFmNzAsIDB4MTRmODA1OGMsIDB4ZTkyYzUxMmIsIDB4Y2VjNTRmMjAsIDB4OTlmM2U5N2IsCi0JMHhhY2FmNGNjOSwgMHg3YTc5MzEzNCwgMHhmNTg5ZDkzYywgMHg3ZTNhMjVjNywgMHg4NDU3YmMwMSwgMHg0ZmNlMjRmMiwKLQkweDc1YjBiNzM0LCAweDBkMjlhNzZiLCAweGYyNzVmMDMyLCAweDI1ZGU3MTQ0LCAweDNjN2Y4MzJjLCAweGJkYTA4Y2IyLAotCTB4MDM1MzY5MWMsIDB4Yjk1MzhjNGUsIDB4ZmQyOTMzNmQsIDB4MDc2NjExNDcsIDB4MDhiNDdkNDYsIDB4MDUyOGMzZjMsCi0JMHhmZGEwOGYwZSwgMHgwNGE5YjVlZCwgMHgxZTc4NDVlNiwgMHg0ZjljOGRlOCwgMHhiMjhkMjA2ZSwgMHg3MGRmYjY4NSwKLQkweDc0YzJiODg5LCAweGU5MmYxYmJjLCAweDJkZGNiZmYzLCAweDhkMTRkMThlLCAweGI2MjQ4OGE0LCAweDc4Zjg2M2M3LAotCTB4MDBhZGM0YzUsIDB4ZjQ1ODk0ZmYsIDB4N2IwMThkZWYsIDB4ZTMxOGUxNGMsIDB4NDkzMzljMzAsIDB4MWJiNDc2ZTYsCi0JMHgyZTdiMTZlOSwgMHg4ZGVkZTQ0NywgMHg4NTNkZmI5MSwgMHhjZDU4YzBmZSwgMHg2NmQ4NzgwNSwgMHhmYjA3YmY3MywKLQkweDk1MDZmZTdmLCAweDQ2MTc1YTI0LCAweDZhM2VkN2Q2LCAweDYxNTM3YTM5LCAweDc5OGM5NGI5LCAweDZkMWY5NDdiLAotCTB4YWRkNzA3YzAsIDB4ZmRjM2YyYWQsIDB4NjJmNWQ3ODcsIDB4ODFkZjAzZmQsIDB4N2Q2NmI5NWUsIDB4ODdkODA2NjYsCi0JMHg1MTFmNGUwMiwgMHg3ZTAzM2UwYSwgMHg3ZTMyYTQ3MiwgMHg5NTFmNWM3MiwgMHg3OWM5ZjVjNywgMHhiZTQyOWZjOCwKLQkweDlmYTBjZjgwLCAweDQ2NjA2YTVkLCAweGU1MDczOGEyLCAweDlmYzBmNWNmLCAweGZkMDQ2Y2RiLCAweGI2Nzc5ZmRiLAotCTB4MTJiOTAzNGMsIDB4ZmNlMzFjZTMsIDB4MmQ1NzJjNmYsIDB4ODU0N2IyNWIsIDB4NzY2NDVmNzksIDB4NGI5Nzc0NjYsCi0JMHgzYzhjNjM1YSwgMHhjMTg1MmJmZSwgMHg0ZDU2NzVlYiwgMHgxYmYxMDA5ZSwgMHgyZGZiOGE5YiwgMHgxNjJlM2M1OSwKLQkweDYzOWQxZmNiLCAweDU5ZjA0M2Y4LCAweDUxZTU4ZDkzLCAweGE5Mjk3ZTA4LCAweGJiYWUyYmZiLCAweGUyMTIyZTRhLAotCTB4M2YxMTIzYzgsIDB4MjhjYmYwNGYsIDB4NjFmMzE4N2YsIDB4ZDdlNjExNDcsIDB4ZThhNWY5MTksIDB4N2QwMTUzODIsCi0JMHhiNGJmMWVkNCwgMHgwODkwMjdjNSwgMHhjOGQyNzYwNSwgMHhiOTkyMDcyZiwgMHhiZjI2ZDI5ZiwgMHg1ZTAzYjY1YywKLQkweDY0OTdkNjk2LCAweGE0ZmM1ZDdmLCAweDViNDdmMzk2LCAweDRjYWNjM2VkLCAweDVmOWYxOWVmLCAweGE4ZjY2MTQ4LAotCTB4NDFmYWFiNGUsIDB4NWI4NWU4M2UsIDB4N2I5MDJlNGMsIDB4NzBiOTBkY2EsIDB4MzI1ZDUxM2YsIDB4OTUyODhlZmIsCi0JMHg0ZGJlYTEzZCwgMHg1YjY2N2E2MSwgMHg2NjdhOGNjOCwgMHhjMWUzY2Q5YiwgMHgxNjFjZDA3ZCwgMHhhNzhhMjQxZiwKLQkweDVjOWFmMjExLCAweDM1Y2UyYzVkLCAweDBjZmNmYzMxLCAweDFhYTBiZmU3LCAweGUyMTI3NjFlLCAweDc0NjA3ZjBiLAotCTB4MDE0YjdhMWYsIDB4OWQyNTE4OWMsIDB4MWZiOTMzNjcsIDB4MDBkYjRhNzgsIDB4NmMzZGNiZjcsIDB4N2MwZDNhMmQsCi0JMHgwNGIyMGM5NSwgMHgzNWM3NGY3OSwgMHgzOGFkNzdkYywgMHhkYmZlYTFhZSwgMHgyOTUwZmJiOSwgMHg5ZTBhZmRkOCwKLQkweGQ3NjQzMWU3LCAweGQwNjJkMmExLCAweDM3YTY1NjI3LCAweDI5ZmQ3MWNmLCAweDRlNjBjM2VhLCAweGY3MGQwZmEwLAotCTB4NGMyMzBkMTUsIDB4NTNkZGM1NGYsIDB4MWY5MzdjMDQsIDB4NzdiYjhmNmQsIDB4MDYzNWQxYTgsIDB4ZWY3NzFhYzgsCi0JMHg5OGY3MTFkMCwgMHg3YmRjMjcxNCwgMHg3OTdiYzFlMywgMHhlMWVmZWVlMiwgMHg2N2JjNjBmYywgMHhjNzkyN2ZhNiwKLQkweGY4M2YwNTYyLCAweDM2ZGQ4Njk1LCAweGIzMjc2YmUwLCAweGIyYWQ0MWM3LCAweGE5MmJjYjJmLCAweDIzZmMwOWVjLAotCTB4MTQ3ZjBjZTQsIDB4ZjdiZmMxNWYsIDB4N2NmNjJlNzksIDB4YmU3YzJkYzMsIDB4YjYxNGI4OGYsIDB4NjFhOGRkM2YsCi0JMHgwODJmZTgxZSwgMHhlZGM4MmVmYiwgMHgxZTZiNmY1MiwgMHg1ZjRiMGJkMywgMHg1ZDdjMDE5ZCwgMHhmOThkZGYzOCwKLQkweGM4YTU4ZmI2LCAweDI0OTdmY2Y4LCAweDc0MDllOTZjLCAweGFmMTgyOTcyLCAweDkyY2VhYTBhLCAweDNkZjQ1MjkzLAotCTB4ODFmNTk0YTIsIDB4NGVhZWQ0YjgsIDB4ZmUzMDg1YzksIDB4YjVjZjU2YzMsIDB4NWE1MTNmMDAsIDB4NDM3N2MyMGUsCi0JMHg4MjE0MTc4NiwgMHg1ODBkYjY1ZSwgMHg0YTc2MDE5OSwgMHgxYWUxNGRjMCwgMHg4NTE2YzliYiwgMHg2NTk1YzA0MywKLQkweGIwZjg3YzY1LCAweGQ2YjVlNjc1LCAweGQwM2JlYzRlLCAweDRmNDdiNTNiLCAweDQxN2JlMDU4LCAweDM5ZmQ2MGZmLAotCTB4M2UxOGY3NDYsIDB4Zjk0N2JhMDAsIDB4ZWExYmJhNDAsIDB4ZGMwNTBmMDIsIDB4YmZmMmRlZGUsIDB4MjVjNjBmODcsCi0JMHg4N2UxMDNlMiwgMHg3NmVjYmY1MSwgMHgxZmY3OGZjMCwgMHg3M2IzN2I5NywgMHg2ZmNmMmMxZCwgMHgyNDc3OGM4OCwKLQkweDliMjVmMjQ2LCAweGIwNWQ4YTcyLCAweGY5ZDE1OTdmLCAweDNlNTI1ODg3LCAweGEwNjdmZjNhLCAweGZmNzY2ZWU3LAotCTB4MDRlN2YwYjAsIDB4NDVjYmU0ZGYsIDB4MjM0YmFmZDgsIDB4MmU4M2RlNzgsIDB4ZTIxZmIwZDgsIDB4ODIzY2MzNDksCi0JMHg2MzA2MGVlZCwgMHg3NDRmZGZmMywgMHg1OTI4MmVhMywgMHg3MjY3NGQ2MCwgMHgxYmI1ZWZjOSwgMHhlZmQwOTYxMCwKLQkweGM3MTU0MDFjLCAweDc1ZDdlODFkLCAweGUyZThiZDQ1LCAweDI0MjcyNWY4LCAweDAzYzVjZTA5LCAweDA1Yzk1ZjJiLAotCTB4MDE5YzMzZmYsIDB4OGYzMDBmZTMsIDB4ZWQzZWMzMGYsIDB4Yjk1MWQ2NmIsIDB4ZWIwMjlmMzAsIDB4OGZjMDllYzgsCi0JMHhmYTU5ZjdhZiwgMHhhZjY5MzAyNywgMHg3ZGJmOTk3NywgMHg0ZmVhMzNhMywgMHg5N2I4ZmQwOSwgMHhiZmM2MmI3NywKLQkweGNiZjRjYWRmLCAweGNmYjY2ZThkLCAweDE2M2Q3YTBlLCAweDgwMWY2MTBlLCAweDE0ODcwMDhjLCAweDYyYmE2YTllLAotCTB4NmExZGJkNDUsIDB4MTFiZTc4YTQsIDB4ZDhmNGEwZTAsIDB4ZjAxYTkxMjMsIDB4ZWU0YzhhMTcsIDB4ZmJmMDEyY2MsCi0JMHg4MDE1ODUzYSwgMHg1ZmZlYjliMywgMHgzNDBlMjBkZCwgMHgyM2ZiZjQzZSwgMHg5MTc4ZWYwMCwgMHhlN2QyZWIxZiwKLQkweDZjZmQxYWM3LCAweGY1ODhmZmUxLCAweDE0OGZmMDg2LCAweDQ3ZTEwODhhLCAweDc4NzRmYjQxLCAweGUwZTlmMTRlLAotCTB4MGM4ZGUwZjcsIDB4ZmVmZTMwNWIsIDB4NWFmM2FiNzgsIDB4ODU3Nzk3MzcsIDB4OThiYzYzY2UsIDB4NTcyYmU1YzcsCi0JMHg0Y2JhNTI0NiwgMHg1YTNmMzEyMCwgMHgwYTRhMDViZiwgMHgyNDgzZjhmZiwgMHg4MmYxOGM5YywgMHhlN2Y4MDUxNiwKLQkweDhlNDQ5NzE2LCAweGFkZDlmMGM1LCAweGY4NzVmNTQzLCAweGY2OGFjYThkLCAweDQ2ZmJkZWQ3LCAweDIyNDIzMjNiLAotCTB4ZmYxZjliNWYsIDB4M2U4M2NiNGQsIDB4NDdmNjJmYjYsIDB4MThmN2RiMWYsIDB4MmJmNjQzZGUsIDB4ZWQwZGIwZTAsCi0JMHgxYzNiZjZjYywgMHhiNTA3MGYwYywgMHg3M2VkNzZjNCwgMHg0ZGMzZWYyZSwgMHhlZjEwZjk4ZCwgMHg0YmViYjNkZCwKLQkweGVlNmZhM2I0LCAweGYwNWRmMmZhLCAweDU2OWQ4NzFiLCAweDg3NjdjNDA4LCAweDhhOTgxZTlmLCAweDM5YTFkMjcxLAotCTB4ZjQ0MmJlNzgsIDB4YzZiNGZkZWIsIDB4ZTQ3M2Q4NGEsIDB4ZGZmZjcxMWYsIDB4NWI4ZjBhMDEsIDB4NTgyY2Y4MDMsCi0JMHhmMWY2NzFiZSwgMHgwYmJmYTAyNywgMHhkYmM2MTVjNywgMHhjZDUyZmM3YywgMHhlYmUyMGJkMywgMHhjODFlZmNhNSwKLQkweGE3ZjMxMjAzLCAweDdlMDFmYjQ0LCAweGQ2YmJkYWVmLCAweDMxMTA1ZTQ4LCAweDM0OTdkMmM3LCAweGU4MjBiZmEwLAotCTB4YjFhOWNiNzgsIDB4NzhmYzk1YTcsIDB4OThlZmMwYmEsIDB4MzlhZmJmZTAsIDB4Mjk1ZWRjY2YsIDB4NzE0ZTk3ZjYsCi0JMHhlZmJkOTFiYywgMHg0ZGRiM2VlMywgMHhlMDJhZjczNSwgMHgyMzk0ZGZhNywgMHhiOGNjNzcxMywgMHhlMjU2OWNlMywKLQkweGZjNmI4OThlLCAweDYzZjA2YWMzLCAweGM0ZjRiZWY2LCAweGJmOGI4ODA0LCAweDJmOTFlMzI1LCAweDlmZGI2ODZmLAotCTB4MjBkZWExZjIsIDB4MzM3N2RjMjcsIDB4ZDBhNmY1ZTIsIDB4ZmRmMDBhYmQsIDB4OTc5MzFiMzgsIDB4N2UxZmM2ZjYsCi0JMHhlYjhmZTUxZCwgMHhmOTg0ZGU4MSwgMHg5NDI1ODM3ZiwgMHhkZjVkMjMxZiwgMHg4Y2RiZjVkYywgMHhmOGYxN2VjNiwKLQkweDAyZGU4YjZlLCAweDZmMGU4MmVmLCAweDA1NGUyZDljLCAweDA3NDdiNDdjLCAweGE2ZWU5ZjIzLCAweDc5ZDNmM2YzLAotCTB4ZmNmY2U5ODUsIDB4ZDM3YjRmZDQsIDB4M2VmYWMwZTcsIDB4MDVkNjBlNWYsIDB4OWZlYjdhN2YsIDB4NGYzZjAwY2YsCi0JMHgwYzk4ZTVmMCwgMHhlYWMzMjdjNiwgMHhiNjIwYzg5ZSwgMHhmODhjOWQyOCwgMHg3NDYzNmVlYSwgMHhjMGU5ZmM5YiwKLQkweDdlM2U1NDE0LCAweDZjZTcwMGQyLCAweDUzNmMzOGNhLCAweDU3ZWYxMzg5LCAweGJkZmNmYzI0LCAweDk1NGRiZWQxLAotCTB4ZWEwMzE4ZWYsIDB4OGNkZjY4ZDIsIDB4NzM4YTZkNzYsIDB4ZDdjM2RlMjYsIDB4NjM4NGJkZGUsIDB4MjA1MmFhZGYsCi0JMHg1OTU0YjNkZCwgMHg4MGZiYjBhYSwgMHhlMDJlOWY5OSwgMHg2ZmYzZDIzMSwgMHgwOWI2ZWNhNCwgMHgxOWYwZGI1MiwKLQkweDY3MDcxZGU5LCAweDNkMzUzY2FmLCAweDNmYzJiYzAxLCAweDRlMTBmNzE3LCAweDc4ZjY4NmY5LCAweGQ3Y2Y0ZGI4LAotCTB4N2U4ZDRmZTcsIDB4NWI2YWQ0MWIsIDB4OGJhNDY0NzIsIDB4ODNlODVkYjEsIDB4MDBhMDE4NTIsIDB4MjNmODNmNGIsCi0JMHg0ODU5NmNlMywgMHgxYTRiZDJiZiwgMHhiNTc5YzM3MSwgMHg5M2U0NDlhZSwgMHhjNjQyYmIxOCwgMHhiYTdlNDc3NywKLQkweGI1OWVjMWNmLCAweDk3MTU0ZmM1LCAweDExOTNjNDRjLCAweGY2YjUyYmU1LCAweDU1ZjAyYjMxLCAweDg1NjU1MjlkLAotCTB4NmMxYmFiZmQsIDB4NTJhNDU3MTMsIDB4YjRmZThjM2MsIDB4NWJlZTBhNzgsIDB4ODQwODlhMzUsIDB4Y2U4NGM2YzYsCi0JMHg4MTM4ODVlZCwgMHgxYzVkNWYzOCwgMHg3YzAyNTNkYSwgMHhjMDY5NGZiOCwgMHgwNWYzNTM3NSwgMHhmOGM2MWJlYSwKLQkweDE1YTFiNTk5LCAweDZhYzNmMDU2LCAweDBiOGM2NTMzLCAweGJhMjM0ODFjLCAweDZkYzdhMDczLCAweDNkYWFlZmNjLAotCTB4OWRjMTNhZGUsIDB4MGE3M2JkYTAsIDB4ZGM0YzlmNmIsIDB4Njc2OGY5OTksIDB4NTFiZTMwNTMsIDB4ZjM4NGRhYmEsCi0JMHhmNmI5MmQxZiwgMHgzMjFmODI2NywgMHhkOWFmZGQ5ZCwgMHg3ZjY0M2Y1YywgMHhlOWI3ODUyNiwgMHgxZmQ0MzRjZSwKLQkweGJhMWY2YTYzLCAweDExMDk0MWQ3LCAweDNlMjE3N2ZjLCAweGI5Mjk5OTZmLCAweDk1ZWZhMzllLCAweDJmNTg1ZDNhLAotCTB4ZWI4NzlkOWQsIDB4NjU1ZjIxYjgsIDB4ZWQwZjFlNGMsIDB4ZDc1YzU0ZTMsIDB4MjkxNzkxOGMsIDB4M2NmYTZmMTAsCi0JMHhmNTgwMmE0NywgMHg3MWE5MmVlMSwgMHhlNGZjMTk5OSwgMHhlMjFjNmM4OSwgMHg3YWMwNjdmMCwgMHgxOWYxOWRmMywKLQkweGNmMjBkNjAzLCAweDA1ZDVmYTg4LCAweDc1ZWExODZiLCAweDNiYTViM2ViLCAweGJmODFlZmNlLCAweDM2ZjRiMDRmLAotCTB4OGU1MWNmMDksIDB4N2YxMmU0NzEsIDB4YWU5NGZmMGMsIDB4ZmVhNGY0YTYsIDB4NzY1MGE0ZDcsIDB4ZTRmMWYwMzEsCi0JMHhjNDA5MzJiMSwgMHg2NTZkZjFmMCwgMHg1ZDg4MTI1NiwgMHhiMWYzZjIwZiwgMHhkZTJhZjUyZCwgMHhmOGU0MjAzNywKLQkweDUzYmZjZTY2LCAweGRlZTg2NWE3LCAweDBlZGU2ZmE3LCAweDg4NjI2N2Y2LCAweGZjYjg0MWM3LCAweGQ5Y2I4MGZjLAotCTB4M2JmZDdjY2QsIDB4MWJhYjkzZGQsIDB4YmYzMDhjYjcsIDB4NjVhNGNmZTYsIDB4NjcxZDJhNzQsIDB4OTYwZjRhNzYsCi0JMHg3MGQyZDUxZiwgMHhlNWYwNzMxOCwgMHhjZjQwODNhZSwgMHg2MThmYTBmZCwgMHg1YTJmMmIzZCwgMHgyMzkwZmM4OSwKLQkweGI3N2YwMGI5LCAweGI3ZWRmNGI4LCAweGUzZDdkNTBlLCAweGU4MzUzZmVlLCAweDc0ZTBkYjgxLCAweDBmYWYxYzk0LAotCTB4NTZkZmRjODQsIDB4YzcxMGFiMmYsIDB4ZTI4OGFkYjksIDB4YmQ2MWZkMTcsIDB4NWVhZWRlN2YsIDB4MTA3Y2VjYjgsCi0JMHg1YmVmODZkYywgMHhiMmE0ZWMyZiwgMHhlZmNhOTQzNiwgMHhhZTFmYTE2ZSwgMHg3ZTgxNTcyMiwgMHgzZjU3MjMxOCwKLQkweDRjZDJmYzAxLCAweDAxMzk5ZWVkLCAweDIxZmIwOGJmLCAweDU0YTVmM2Q2LCAweGM4M2Y4MTVlLCAweGFiOGM0Y2Q5LAotCTB4ZTU0NGI5OGUsIDB4OWViYTIzMzYsIDB4ZWEwYmU4OGYsIDB4ZjgxMmI4NGYsIDB4N2FkODFmMzksIDB4MjIxZGY2ZWEsCi0JMHhkNGZlODNmYSwgMHg5ZmRkZGZjMSwgMHhiNTUwYTMxOCwgMHg3NTcwMDA1MiwgMHhkNDQyZmUyNSwgMHgyYzU3MTg1NywKLQkweDEwNDUwMzg1LCAweDg3MzljYmRmLCAweDQyYWYxYjcxLCAweDU3NjhhN2Q3LCAweDhjN2E2NzlmLCAweGQyYWUwYmZlLAotCTB4ZjQ2ZmZjMTUsIDB4Nzg5YzQ0MzMsIDB4N2ZmMDhhNTIsIDB4ODkxMTdjZjQsIDB4MzE1MTRlMTcsIDB4YTFmODIzOGUsCi0JMHhmMjA4ZjAxNCwgMHgzOGM2NDUzZCwgMHgyMWZjN2I3ZSwgMHhlMjlmZmZjNiwgMHhlM2MyOTIwYiwgMHhhZjQ4YmQ3ZiwKLQkweGUwODNmMDhlLCAweDQ2MTdjMTAzLCAweDQzNDdmMWZiLCAweGZiMmRhNzVjLCAweGY1ZjI5NjkxLCAweDFmN2Y2M2Y2LAotCTB4N2I3NGY1MTUsIDB4Njc2NDg4N2UsIDB4NzM2M2Q5N2EsIDB4YjVmMzc5NjAsIDB4MGZjMGQ5YjcsIDB4ODNmNWM0OTksCi0JMHhmODkxNDNiMCwgMHgxN2M2NWFkNCwgMHgyOTY3MWJmYiwgMHgwNWU0NmZiMCwgMHhjNTE3OTBiZCwgMHgwYWRmODhiYiwKLQkweDRkNThhYzNlLCAweDllMzk3ZTMwLCAweDdhYTZhNWViLCAweDhlZjNjZjE2LCAweDEyOTAwMzk2LCAweGVjN2ExMjUyLAotCTB4Zjk2NzU2MDksIDB4Yjc5ZTgyMmUsIDB4NTIyOGJlNzAsIDB4ZjdmMDI4ZjYsIDB4NDk3NTZlNWYsIDB4YjkxMzg4MmUsCi0JMHg4MjcwM2M3OSwgMHg2MDc4YzI1YiwgMHg3ZjgyM2U5YywgMHhjNzViZjZkMCwgMHhkNzU4MDE0YSwgMHhhMDkzZjUxOSwKLQkweDdmZGU2NGY3LCAweDdkZjA5ZjFjLCAweGRjOWYyMzU3LCAweGJlZTVjMjkwLCAweDlmZmVlOTNiLCAweDAzYzYwYmY0LAotCTB4NGRiNTNiNWQsIDB4N2I3ZGYxNTcsIDB4YmUwZDlkNzQsIDB4NWVkOWM4MmQsIDB4ZmUwMmJmOTYsIDB4YTZmNWQwMzUsCi0JMHgzYmY2MGE0YiwgMHhlN2VmNDUzNSwgMHhmMDViMzg1YywgMHhmMjBiNWM0YiwgMHhhZjc5OGRmNywgMHgzN2I0ZjljNiwKLQkweGM3ZTEyNGZlLCAweDhjNWViZjczLCAweGYyYzJiMzdiLCAweGE2NzY4ZGY5LCAweGJmYzJiYjVkLCAweDMyYWJkMjMzLAotCTB4MjZiZmIxMjUsIDB4ZGUxYzZiZjQsIDB4OGI2ZGZlYjksIDB4NWZlOWVkNmUsIDB4NTNmZWVmYTEsIDB4MmJmNDU3ZmEsCi0JMHhjZjE4ODJlYywgMHg1YWRiOTdhOCwgMHhiYjNkMDljZiwgMHhlMzA5ODM2YSwgMHhmNWYwMzcyNywgMHhhZTNjMGRmMiwKLQkweGMzZjcwY2ZiLCAweGRlZGUzYzAyLCAweGY3ODJkMTdjLCAweGI2NTUwNjUzLCAweDYzZGZlNTNmLCAweGQ2ZDAzOGMzLAotCTB4ZTk3ZmNjZGQsIDB4ZmJlMjc1NmQsIDB4YzYzMjRhMGYsIDB4NjQxYzFlMjksIDB4ZDc0YzNkNDIsIDB4M2YzMDg1MjYsCi0JMHgzZTkwOThhNSwgMHg4NWRhY2ZiMCwgMHgyYjU2YjNlZCwgMHhlM2Q0MzJlMSwgMHg3ZTQwODUyZSwgMHhmMTk1OWU1NCwKLQkweGZhNmY4M2MxLCAweDBmZmY0MDY3LCAweDVhNmRlYjFlLCAweDcwZTM3MTgxLCAweDQzMzFmODAzLCAweGE3ZGMxNDBhLAotCTB4MzEzYjMzNGEsIDB4NmY1NGRjY2UsIDB4ZTZhYWJjYzYsIDB4MDNkYWZmYmEsIDB4ZjlhYTI3N2YsIDB4ZjJjMTcxMjIsCi0JMHgzOWJkNWY2NiwgMHg3YTA0NGZiMiwgMHg5NmZjOGM2MiwgMHhjZDExNzkwYywgMHgwZWYzMDQyZCwgMHg5NzBiNGU0NywKLQkweDA2ZTk3YWMwLCAweGQ2MDJiMGQyLCAweDc2MzVjM2UxLCAweGE3ODhkZDhlLCAweGM2ZGU3Y2EzLCAweGJlYzg4NDdkLAotCTB4MWJjYjNkNDEsIDB4NzllMTQ5MjksIDB4MDZmYjcxMjMsIDB4NmZiODI1MGQsIDB4MTVhZTQ4YTAsIDB4ZDMzZWQxMjQsCi0JMHg2MGRmNjY3ZiwgMHhmMjljZTAzOCwgMHg3YTBjNWZmMywgMHg3ZmIxYjQ4OCwgMHhmYjYzNTViMCwgMHg1NDg3MmQ0YywKLQkweDM5MzI3ZTAyLCAweDVlMzA5OTk1LCAweDQyM2VkZWQzLCAweGI3NjRlZWRkLCAweDgyZmIwZWQzLCAweGRiYWY5ZmNjLAotCTB4Y2NlZGM1ZGQsIDB4ZmNmZGZiNmYsIDB4OTg2Mjk2YzYsIDB4ZDM2YWQ2YzYsIDB4NDc2MzJiNGEsIDB4ZTI0NmJiOGMsCi0JMHg3MjdjNDY3MSwgMHhiZmVkYzdiYywgMHg2MWEzNWM4NCwgMHg2M2M0NjJkZCwgMHhlMjE5NGI3MSwgMHg0ZmUyOWJmNywKLQkweDEzZDZjNWM4LCAweGViZTA2ZWM5LCAweGI4YmEyN2FkLCAweDNjNjNkYzYxLCAweDNiMzJlNzBlLCAweGJmNzYwNGZlLAotCTB4MzI2Yjc4ZWUsIDB4NmU2YWIzZWUsIDB4NWExYmFjMjcsIDB4NzYyZTJjZDIsIDB4ZjNlMzExMGYsIDB4NzhkZWU3NjAsCi0JMHgzYzA3ZmM2ZiwgMHhiOTM1YjdhZSwgMHgzMzdkOGZlNSwgMHhkODUxZjc2MywgMHhjNTEzNDliZSwgMHgwZmFhM2VlYiwKLQkweDNjZmQ1ZjdmLCAweGZlN2UwM2U2LCAweDEzY2M1MWYyLCAweDRjODZmODVhLCAweGFkYWYxMDJjLCAweDg1ZTdlMTRlLAotCTB4MDNmODFhMDMsIDB4ZWUzMjM1ZTUsIDB4MThiOTUzNGYsIDB4NTYyNTM5M2MsIDB4Nzk2MGFjZGYsIDB4M2RkOTViMzQsCi0JMHg5OWFmZTU5ZiwgMHhmN2U5ZTMwMywgMHg5MjdmYWZlNSwgMHg0ZGY2ZjkwZiwgMHhjMDBlNWJjYiwgMHhiZmYwMWZkZiwKLQkweDMzYmZiMTJjLCAweDg3Y2M2ZmU3LCAweDk1Y2I5YWZiLCAweDJlYjI3MWM0LCAweDlkN2ZlNjc2LCAweDAzNGViM2FkLAotCTB4Y2NkYTQwZmYsIDB4Nzk2MDVlZmUsIDB4OGU2YWFhNzAsIDB4ZDlhNWVmNTksIDB4ZDMxZWYxNTUsIDB4ZWM0OTJmMGIsCi0JMHg1ZjBhMDk3ZSwgMHhlMmJmN2RlYywgMHg3ZDljMDZlZiwgMHhkNWYwNjI0OSwgMHhiYmY4MDFhYSwgMHhiNzliZTU4MywKLQkweGJlMzljMTM1LCAweDVjNjYyM2YyLCAweDlmMzc3OWJmLCAweDRiMzNmYmMzLCAweGZjYzE2ZWI2LCAweDRjYWQ2ZjYwLAotCTB4MDlkNjE5ZjYsIDB4OWI1M2YzYmEsIDB4NDVlNDMwZTUsIDB4YmZiMGQ0NTUsIDB4OThlYjQwMjMsIDB4NGMxMTU1MjcsCi0JMHhiZGIwOGU3YywgMHhiNzBiM2U3MywgMHg4N2VlYmZkNiwgMHgyZmVkYTgzYywgMHg5ZGJlYzFkYSwgMHgwNzY0ZDg2OSwKLQkweGJmN2VkM2JjLCAweGRjNjJmY2Y2LCAweGMzZTBhOTc5LCAweGVhNWU3YjVmLCAweDVhNzI2MTBjLCAweDM3OWMzNzYyLAotCTB4MzdjMTljZGIsIDB4NjM4M2MyMjMsIDB4NzhhM2ZhZjMsIDB4NzBiOWZjNjQsIDB4ZTA2N2M1Y2IsIDB4ZDdkOWVmM2MsCi0JMHhlMDA2N2IzZSwgMHhmOWQ1ZjQ1ZCwgMHgwZDdmNjA2NywgMHhiZDYwZjUxMiwgMHg2ZmY5N2RlYSwgMHg3YzUyMWU3OCwKLQkweGRmZjcyNzc3LCAweDExN2E1ZTlhLCAweGJkMzY5MWNmLCAweDZmNDE3NjZmLCAweGJiMjdmNTRkLCAweGE2Y2E3OWMxLAotCTB4ODJjYWZmNmQsIDB4ZmFkMmRlYjgsIDB4MmU3N2U4MzEsIDB4Y2ZmZDQxZGQsIDB4YTJiYWZiMDQsIDB4ODNlODMyNmMsCi0JMHgxYWIxY2ViNiwgMHg2NmI3YjVlOSwgMHhmMzgwMzc2ZiwgMHhmMDZmNGE3MywgMHhkZmU3MjM3YiwgMHgyZWNmMmM4MiwKLQkweDNhYWRlZTcyLCAweGI4ZTE3OWYxLCAweDkzMzU2ZTczLCAweDIwNjFiZDZmLCAweGQ0MGJhYTk0LCAweGRkZTdiYjQ2LAotCTB4NWUzYTUzMGUsIDB4NTVmYTAxZGYsIDB4ZWFmM2NjM2YsIDB4NzNlZmQzMTIsIDB4ZDNhNTA3ZjgsIDB4ZjNmYWVjY2YsCi0JMHhlNjZiMTdlNiwgMHhiNDM0ZmIzYywgMHg3OWI0NjRkNSwgMHgwMWRjMmRkZSwgMHhjOGYzODliYywgMHg1NWVlZWQ2MywKLQkweGQ3OWI5MDc2LCAweDg1ZjNjMTVlLCAweDc0ZjFiNzQwLCAweDJlNWI0ZGEyLCAweGRjNzM4Mzc2LCAweGJiOTZkNGE3LAotCTB4ZGE4MzZmMzAsIDB4OTQwYjg4NDMsIDB4ZjI4N2JmZDcsIDB4MTBlM2I0ZDMsIDB4M2YwOTY5YzYsIDB4MjI0NGRjMTcsCi0JMHg1MzhlNzYzZiwgMHg5OGRjZjNlMiwgMHg3MWM5Y2VjMiwgMHgzYTM5YzNmYywgMHgzOWY0ZTNkMCwgMHhmOGM3MmYzZiwKLQkweDZiYTM5YzU4LCAweGJkNWNmY2ViLCAweGVmYmYwN2JkLCAweDc3YmIxM2JhLCAweDFhODdlMzc4LCAweDRhMjBkZmJiLAotCTB4MzQ2ODY5MmYsIDB4M2EyZGJkMGYsIDB4MDAzODNjMDksIDB4Y2Y2MjQzMGYsIDB4YTczZTI2ODMsIDB4Y2MzNzM5MTgsCi0JMHgwM2Y0MDVlOSwgMHhkZTcyMmZmZiwgMHg2MjQ3ZDY5MywgMHgyNDhmN2E1ZCwgMHgxYjRkMDdkMCwgMHgyNmQyMzlkOCwKLQkweGY1M2RmMTM1LCAweGFkNjg3Y2UyLCAweDllNjJjZTgxLCAweDkwODdjOTZkLCAweGZmZTBmNmQzLCAweGM5NzlmOGE2LAotCTB4OGJmMWQ0ZWUsIDB4Y2JkOWQzYzAsIDB4ODdmOGY1ODksIDB4ZGRiYmU5NzYsIDB4OGM5NmUzNmIsIDB4NjA3Y2RhZjcsCi0JMHhkM2Y3MDRlZiwgMHg5OGY5ZTUxZSwgMHhjYzVhY2YyYywgMHg5NmY4MmNmNywgMHhiZWNmNGY5NCwgMHgxN2ZkZTMyYywKLQkweDUxN2I4MmFiLCAweDg1ZjUxYjhmLCAweGMyMzU5N2Q4LCAweGI3ODczOWZiLCAweDg5ZDk5NmEyLCAweDA0YTVhZmIzLAotCTB4YjM5ZmI0NmMsIDB4M2YyMWQ2NmYsIDB4ZDUxZjU0NTcsIDB4YzBlZjhmMjAsIDB4OGIxYWVkZTYsIDB4MDFmOTMzZDcsCi0JMHhjNzFiMTEzYiwgMHg5ZWVhZmIzYSwgMHgyNGRiZDQ3YywgMHg5N2YyN2U3MSwgMHg0MzdhMWY1YywgMHg1NmYxYzc4OSwKLQkweGIzOGRkMzlmLCAweGZiYzQxZmQwLCAweGVmMWJkYWIxLCAweDBhOWVlMjhjLCAweDUwNjk5ZGZkLCAweDRjZmEzZjMxLAotCTB4OGQ0MWM1OTAsIDB4ZWRjYzdmZTMsIDB4MjAzZWU0NjYsIDB4Y2Y0MTJmNmEsIDB4NTc2OGZiODgsIDB4M2NmMzA0NjgsCi0JMHhlNzk2MjZmZCwgMHg2YTdlZmM2OSwgMHgwMGQzYzMyYSwgMHhlZTA0YjM4NywgMHg4MmQ5NzUwYiwgMHg1MmI4YjliOCwKLQkweGQ0Y2RjMzJlLCAweDZjN2I5MTE1LCAweGY2ZjdmODVjLCAweGU0OTc3OTIyLCAweDJmMzA5YjkxLCAweDkyNWRlNDUyLAotCTB4NTBiZDU5MjcsIDB4NjEzNzAzZDQsIDB4ZmUxMGU1MWUsIDB4ZGFjMDNmYmUsIDB4ZWI0YzIxNjEsIDB4ZWNmOTdlYjMsCi0JMHgyYzdlZmU0ZCwgMHgzMzIwYjI2ZiwgMHg5Y2ZmY2ZlYSwgMHg4Mjk2MzBmYSwgMHhkNWE2N2VlOCwgMHhhMDQ5ZmM0YywKLQkweDNlYmRmODJmLCAweDIyYjI3ZjIyLCAweDM1NzVlNDQ5LCAweDllZjdmM2IyLCAweGZhNWY5ZDZjLCAweDc3YTdiYjQ3LAotCTB4NWI3M2VjMmEsIDB4NTUyNzc2YzIsIDB4YzZlYjRiMjksIDB4NGUyYTFkYTAsIDB4ZmFiZTIwNzUsIDB4MDM5MTFmNmUsCi0JMHhjMWZmYzFmYiwgMHg3NmE3MDdmMSwgMHhhNTdmMWY4YSwgMHg2YWI3ZmFjYSwgMHhlMDc0ZGZiNCwgMHg0MDI1YmU5NywKLQkweDA5ZGRiZWU3LCAweDgzMTc3M2U2LCAweGEzYmY0YTEzLCAweDllN2MxNGNiLCAweGZlYzFjOTQ0LCAweDA3M2I5OTVlLAotCTB4ZDIyYjFmZTIsIDB4MmM2M2NjMzQsIDB4ZGQwMGIwYTYsIDB4NWU1YzY1OGMsIDB4NzJhOWFhNjgsIDB4YTVjNzJkMWIsCi0JMHhjZGM4NzViMiwgMHgxZWJlNGVhOSwgMHgyNzdmNjE2OSwgMHhmZmMyZDFjYywgMHhlN2RiMTg0ZSwgMHg5NjgyZTU5NywKLQkweGU5ODFkODMwLCAweGVjYmZjYzI5LCAweGRjMzFmMmRhLCAweGI0ZWVmMWZmLCAweDM3NTgyZWJlLCAweDdhNGMwZDRkLAotCTB4MjFiN2U2MTAsIDB4ZjAwOTMzZDUsIDB4ZWViNGJlZmIsIDB4OWI1Zjk0NmEsIDB4MzRmYzA1MjcsIDB4ZmNiMWRkYzksCi0JMHg4ODcxZjhkMCwgMHhkYmY0ZmMwNSwgMHg2MTA1NzE4NywgMHhiYzE4Zjc2MywgMHhlOTU1OTQzYiwgMHhhN2MwMWU3OCwKLQkweGFlMzIzZjE4LCAweDAzZDhiZjIxLCAweDEzODgzZDcxLCAweGYxMWVmYmYxLCAweGNlM2E3YWZlLCAweGNjMjZlM2Y2LAotCTB4YjY0YTZmOGYsIDB4NTliNDdiZjMsIDB4MDBiNjA4ZGMsIDB4M2ZjN2RlZjAsIDB4YmVmOTk3MmYsIDB4NWY3NzVmOTYsCi0JMHhhN2JiMmQ1YywgMHhiODllZWUzZSwgMHgwODEyOWU4MywgMHg4YmVmMTgzOSwgMHgzYjM3ZGUzMywgMHg0ZjMwMDQ5NCwKLQkweGRjN2Y3OGQ0LCAweDMwN2ViZTA4LCAweDQwZjcxYmRlLCAweDVkMGZiNzJhLCAweGJkZGQxNzQ4LCAweDVmZDYxNmRiLAotCTB4ZjAzZDViZWIsIDB4MDlkYzFiOWMsIDB4NmIzYzUzMjUsIDB4NGQwYzk5NGUsIDB4MGQ3M2NhOGYsIDB4M2U3MDhmZDUsCi0JMHg0ZTdlNzVmOCwgMHhjNzYxZmZiOCwgMHgyZDdmMDAzZCwgMHg3OTQzNWZkYywgMHgxZGZjMTc3YiwgMHgwNzJhMmQxMywKLQkweGJiOTMwZmZkLCAweGI5YTc1ZWMxLCAweGFjZDRmZjk5LCAweGQzY2I3YmIyLCAweGJmNDA1OGU4LCAweGM5OGZiODM0LAotCTB4ODljNGZhMGUsIDB4OWJmZTFiNzksIDB4M2M3YmVlMDksIDB4YTA0OTk3MjksIDB4OTJlOTcyMWYsIDB4NWM0N2VlMWIsCi0JMHgzZGM3Y2ZjOSwgMHhmNmU5MzI2YSwgMHhjYTlkN2U2MSwgMHhmOTZmZTNmNCwgMHhlZmIxNjMzZCwgMHhiN2EwNGE0ZCwKLQkweGViNjU0ZDlmLCAweDU1MmNkYjg1LCAweDlmMTk4NTU3LCAweDlmNzQwYjNkLCAweDcwYThmMjZlLCAweDU5OWE5YjRmLAotCTB4MzMxYzQyYTksIDB4Y2U0ZmNhMzUsIDB4MTNlMjA5MmIsIDB4ZWVjZWRmZWYsIDB4YWI1ZjdmNGIsIDB4ODFlYmYzOWEsCi0JMHhlZjY2ZjNkMSwgMHhjNzgxNDYwMCwgMHg2ZmI4ZTkyYywgMHhiZWUzOGQzYiwgMHg0ZDRjZTlkNSwgMHhkNWE3ODE4YiwKLQkweDk5ZGJlNDI2LCAweGVhZGI3MjBhLCAweDkxZTU4OWU5LCAweDFmNzE5YTFmLCAweGNmYTY4OGU5LCAweDAyZjcxNzgzLAotCTB4YzQ4MGZiODksIDB4N2RhMjQxN2QsIDB4MjkxNTg2ZmUsIDB4ZTkxZjFmZTAsIDB4NzRlNzc0NDMsIDB4ZDJmZjVjNDIsCi0JMHhmOTAzOWVmNSwgMHhmM2EzMDQ3ZiwgMHhhNjdmNzNmYiwgMHhmZjE1ZGZjMiwgMHg4MmY0OGZhYiwgMHhjNWYxODdiZiwKLQkweDRjZGQ3M2Y0LCAweDczY2RkZjE0LCAweGQ3ZjhiOWZmLCAweDc5YTNkZGI0LCAweGRjYmMwNGRlLCAweDE1NzhkYjlkLAotCTB4NTMxZGQ3YzgsIDB4NGRmYTQxY2UsIDB4ZjliZjdjZGMsIDB4OWUzZjY1M2MsIDB4NjEyNTBlY2IsIDB4ZWYzYmMyM2MsCi0JMHg0ZjE4MGFjYiwgMHhlNmY2ODdlOCwgMHgxZDk3MmY5YiwgMHgyYTcwYmQwNiwgMHg4YmRlMDlmMCwgMHhmNjI2YzY0NiwKLQkweDhkZmU4ZDVmLCAweGU3MTc3M2UwLCAweDBkYjIzMWYzLCAweDQ5MzM1NmVkLCAweDVjYWM3OTY2LCAweDczZWU2MzZlLAotCTB4YjM3ZWUyNzMsIDB4ZTIwOWZjOWIsIDB4OThmNjJiM2EsIDB4ZDk5ZmVjMDgsIDB4ZTE3Nzg5NDEsIDB4ODc3NTQ4ODIsCi0JMHg4YWY2MTY1ZCwgMHhmNTk0MmRiOCwgMHhkYTFmY2QyMSwgMHhiOTVlYTU0ZiwgMHgxN2M0MjU2OSwgMHhjODY4MmZlMCwKLQkweGZhODBmYWYxLCAweDU2Mjk2ZTJiLCAweDRmMmJlYzBmLCAweDc5ZDYwN2FjLCAweDVhOTZjMDU2LCAweDU4NjA3YTdiLAotCTB4ZGI3ZTg0ZDgsIDB4NWYwN2Q1MzcsIDB4ZTI4MWY0MTksIDB4ODJiZTIyNzAsIDB4NjA1MDMzZTAsIDB4YzQzZTFmZmYsCi0JMHg4MDAwOTM4YiwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1OWVkZmYwMCwgMHhlNTU0NzA3YiwKLQkweGVmNzczZjE1LCAweGMzY2RkZGRlLCAweDIxMDM2NmU0LCAweDgwNGQ4NDA0LCAweDg1NzAxMDIwLCAweDVjN2MwMTg4LAotCTB4OTQ0MjIxMDEsIDB4ZDZkYTAzMDAsIDB4MDIxMDFiYTksIDB4MTZhNTJkNzksIDB4OWI4Y2VhOWQsIDB4OGUyMzM0ODAsCi0JMHhkMjlkYWQxMywgMHg1NDJjY2U5NiwgMHgyZWM0OTUyYSwgMHg0ZGQwNjg5YSwgMHhkMTVjMDRiYSwgMHg2M2UwMjcxMSwKLQkweGI0NmQ2M2EwLCAweGVjMDgzYTJkLCAweDk4ZjhhNzFhLCAweGU3MzllYzc2LCAweDY0N2RkN2JiLCAweGVmZmE3NDcxLAotCTB4ZTVmOTg2MTcsIDB4N2NlYmRmYmIsIDB4ZTNjZWZjZTcsIDB4NjQ4YTEyZmIsIDB4NDBhNTAzMDcsIDB4Njc2YTczM2YsCi0JMHhmMWQzMWMwMiwgMHhlZTAxNmJiNywgMHgwZDFjNDQyYSwgMHgwMGYyNTBlMCwgMHgwMDdmNzNlNiwgMHhkNjNjMDNjNiwKLQkweGU5YjZkYzA2LCAweGRiMDA3YjVhLCAweDJlZDhjOWFlLCAweDk1ZDZjODAxLCAweGZjNzZlZGY2LCAweDA2ZGJiOGZkLAotCTB4YmFiNjAxNzMsIDB4YzAwZjc3ZjAsIDB4ZjllOWIxZjAsIDB4ZmZiZjgxNTAsIDB4YmU5NTZiZTcsIDB4MTZiY2VhNTcsCi0JMHgzNzNmNGQ3YywgMHhiNzcyYjAyNSwgMHhlY2Y3MDAwZCwgMHhiNWRkYzM3MiwgMHg5ZDcwMWUzNCwgMHg5MTNhYzRhMiwKLQkweDQ2MzgzNjY4LCAweDlkYmFjNDAxLCAweGVmMjg5ZDdiLCAweGIxYjBiODcwLCAweGRkYzNkYjEzLCAweDVhNjRkNzU5LAotCTB4MWUxN2MyY2YsIDB4NDAwNzRlYzIsIDB4ZjNlMzZlOGQsIDB4OTFiZGIwNWMsIDB4MzVlYjgxNTcsIDB4ODc5NzNjZjUsCi0JMHgzM2M2ODVjNywgMHhkNzUyZTZhNywgMHg2NGRmMGU5YiwgMHg0ZTdkY2YxZCwgMHg5YWVlNWJkOSwgMHhjMWVkMWQ4NCwKLQkweDUwOGZhNDU5LCAweDg3ZGYyY2E0LCAweDQzYjRjY2YyLCAweGU0N2IzZWMwLCAweGY4ZGRmZWZhLCAweGNiNDAwZTcxLAotCTB4Y2NlMzM3NmUsIDB4OTg3YTljZjAsIDB4ZTIyM2RmODUsIDB4ODY4N2I0M2MsIDB4ODE3YWQzNWQsIDB4Yjc3YjE3ZGIsCi0JMHhmZjNkNjliYiwgMHg3YzRhZmE1ZiwgMHg0NzA3MDBiOSwgMHhjNDIxOWRjMywgMHgyZTk4YmU2NywgMHg0ZWMxZGJlNiwKLQkweDA1ZTllN2UzLCAweGQwNDAyZjJjLCAweDM5MTcwYWI2LCAweDljMzhlMWE4LCAweDFiMGJmMTc3LCAweDlmZjZiMzhmLAotCTB4YWFiMzdiZDksIDB4MjIyYTg5YTMsIDB4ZmE4MDAzMWQsIDB4M2QzYjBhYzgsIDB4YTdhY2NmNjQsIDB4Njc2ZTE0MDAsCi0JMHhmZGMxNDEwNSwgMHg1MjgyOTdmYSwgMHgwMDJiZmE4OSwgMHg1ZGZkODJhZiwgMHgwMWY3ZjFkOSwgMHhhNzNlZjFkYiwKLQkweDY3ZjYxZjY3LCAweGM2ZTAxZGU5LCAweDQyMWNiYmY1LCAweDhjMDBkM2ZmLCAweGRmMTM3MmU3LCAweGMyYjJmZGFkLAotCTB4NjVjODA2YmYsIDB4ZWE0MTFiYmIsIDB4MGRjMDc3YjcsIDB4OWI3ZTg5YjksIDB4ZmRjYjA1N2UsIDB4YTdmMDVkNDMsCi0JMHhjYjYyM2IyYiwgMHg1M2UyMzk0NSwgMHg1Y2IxZjYwMCwgMHhmNzgxMzkwOSwgMHgxNjljZTRiNSwgMHg3ZmI0MjgwYywKLQkweGEzMDNlY2ZjLCAweDlmN2QyZTU4LCAweDcyMTBlNDg3LCAweDY3YWE3ODQyLCAweDBkZDdjZDNmLCAweGVlOTY0NzNlLAotCTB4NzRmOGQyZjEsIDB4MjBiM2ZjYjksIDB4OWUwOWY5MDgsIDB4NTUwMThmZTIsIDB4ZDEzYjNkZjgsIDB4ZmI4NTVkNzYsCi0JMHg0MmRlMDk5NCwgMHhlMmZiNzY2MCwgMHhjNGRhOTNlYiwgMHg3Y2M0YWFmMywgMHhmYjZkN2ViZiwgMHgxZGI5ZTQwZSwKLQkweGE5YTJhZmVkLCAweDcwYWYxMDczLCAweDdjM2QzOWQzLCAweDMxYmNhNDNlLCAweDgzZDBiNjdhLCAweGUzOTRmNTE3LAotCTB4OGNkZmZkMTIsIDB4NTJlNmZlNDcsIDB4ZjM4YzU3M2IsIDB4NjU5Y2Y1M2EsIDB4NDAwZmVjYTUsIDB4ODIwMmQwZmUsCi0JMHg5MTJhZjdkZiwgMHgwMGE5MzdiMywgMHhjZGFmMWZlNywgMHg5ZDczYzBhZiwgMHhlYjZjMGRiNywgMHhkNDlmNzFjNCwKLQkweGQ4MjNjYTg1LCAweGZkZjNjZWFlLCAweDVlZmRjNzVjLCAweGFlZGQ2ZjdjLCAweDczOWZhODk5LCAweDA2Yjc5YTVkLAotCTB4ZTA1MGMxZTcsIDB4OGZhODcxODksIDB4Y2YzNDY3ODYsIDB4MDA3ZTQ5MjMsIDB4YzQ0NWUzZTMsIDB4ZmM3ZGY0ZGYsCi0JMHgxODllZGE2NywgMHg1ODc0N2U0NywgMHgxZGIwYjhmMSwgMHg0ODEzZTJkMywgMHg0N2YwOTZlZSwgMHg3OTc4ODMwZSwKLQkweDA3ODcwM2Y4LCAweGY4MTcxNWU3LCAweDU0M2Y5Mjc2LCAweDIyMmViNmY1LCAweDhlODNjZWJkLCAweDBjZTIzYWVkLAotCTB4YWY4OGY4MWIsIDB4MGY1YzYyYTEsIDB4YmI3ZTFkZjcsIDB4OTI2YjVmN2MsIDB4ODU3NTNhMWQsIDB4N2RjNDA3ZTMsCi0JMHgwYTkxNmIxMywgMHhmYWZmZDM2MSwgMHhmNjMxNzIxZiwgMHgyNGMxZjkxYywgMHgxMzQ3YmY1YSwgMHhiNWU2YjMzYywKLQkweGQyMzhjMGMyLCAweDYzMWMxYjdiLCAweDgyYzdiZWI0LCAweGQ5ZTI2YWY2LCAweDc3NWQ3NzhjLCAweDlmZTM0OTFiLAotCTB4NjlmOWZkMzYsIDB4NDE3MTBmZGEsIDB4YzkwZjZmODEsIDB4NDNlNDc4ZGIsIDB4ZjM5ZDFlNDcsIDB4ODAwOWExOWYsCi0JMHg0Zjc2NDI0MywgMHhmOTdiOWViZSwgMHhmMzRmZTBmOCwgMHhlZTNkYmYyNywgMHg4ZmZlZjFhMCwgMHg3NDE1ZGY5MSwKLQkweDA3OWYwZjFlLCAweDFmMjNiZWVkLCAweGRkZjA3OGVkLCAweGQ4NzVlOWRlLCAweGZjMmE1M2RmLCAweDFkYWI0N2IxLAotCTB4ZGY1YmUzNDcsIDB4MDg2YjM0YjksIDB4MTIzMjMxZjEsIDB4ZDdkNGJmOGUsIDB4ODZmNDkxMzgsIDB4NGQ5ODVmZmMsCi0JMHhmOTA4NzY3ZSwgMHg2OWY4NDllZiwgMHg4YTI5ZjkwNSwgMHhhZmZjNDE1ZSwgMHg4ZTM0ZjZhNCwgMHhjMThlNWRjMywKLQkweDNkOTdlYzY1LCAweDQ0YmYyMDM2LCAweDIwM2ZiM2ZlLCAweDQwZmRmNWZmLCAweDc4MWZkMWUzLCAweGYzZjY1NGZlLAotCTB4NDE5YjQxYWUsIDB4ZjFjNjAwZWQsIDB4Yjg1ZWRjMjksIDB4ODM1ZGRhOWEsIDB4NzNmNjc1OGIsIDB4MzY3OWYyMWIsCi0JMHg4MDY0NmJmOSwgMHg0YzAxMDlkNywgMHg1MDI5ZDMyMSwgMHhmNjQ4YWExYiwgMHhhM2Q2M2NkYiwgMHhkYmE3ZDRjZCwKLQkweDU1ZDBkZmY0LCAweDllMmY3YzllLCAweDUzNTU0NzIzLCAweGI1NGYyM2ZjLCAweGI1MDJmMjI1LCAweDNmZGMyYmI3LAotCTB4ZWQwZGYxZTYsIDB4YzEzZmEyNGYsIDB4NzQwNzk5YTAsIDB4MmQzODNiYzEsIDB4NWQ0ZmY5ZTIsIDB4N2Q2ZmZlMjIsCi0JMHg0ZThhZmU2NSwgMHgxM2Q2ZTczYywgMHgxM2Y3ZjcyYSwgMHhjZTMxY2E0ZiwgMHg3ODE5M2M5YiwgMHhlNTM2ZTc0OCwKLQkweGU3ZGEwZjA1LCAweGZjYzU0M2Q4LCAweDFiNmM1YWZkLCAweDFhZTc0NzE4LCAweGJhNTExNjViLCAweDM4ZWVhYWE5LAotCTB4MzZiZjM4NGEsIDB4YmM0MzQ4YjQsIDB4YTNjMWNlZmUsIDB4MTlmMzcwOWEsIDB4ODFlZWJmYzQsIDB4MjlkODY3NWIsCi0JMHg0MjcxOWRlZSwgMHhmZGQ4OGExNiwgMHg2N2ZkZmM1NSwgMHhmYWRiMGY1MCwgMHhmMjE5ZmY1MSwgMHhmOTg3MWUwNiwKLQkweDBlM2I1MDA3LCAweGM3ZjY0NzhhLCAweGRjOGUyYjE0LCAweGJjN2M0ZDVmLCAweGRhMjZhZGQ4LCAweDEyMGI0ODI4LAotCTB4ZjQxN2RhOWIsIDB4NmMwMWVkNmQsIDB4YzQ2MDU3ZGYsIDB4NzFiZjk3ODksIDB4OGQ0NGUyZmIsIDB4OGFhZmM5ZDgsCi0JMHhkZTdiMmRjOCwgMHhlMjhmMzBmZSwgMHg5OGMzYjc3ZiwgMHgyZWU5ZmM0MSwgMHgwY2ExNGQ4MywgMHhkNzRmN2QzYywKLQkweDRlOTU0Zjk4LCAweGRmYTk5MmQ4LCAweGEwZmMyMDVkLCAweDg4YmIwMDNjLCAweGFhZGQyZDQ3LCAweDVmYmI0NDFlLAotCTB4YzcwZDU2ZTgsIDB4NDMxZjAwZDUsIDB4OGEwMmVkNjAsIDB4YjA2MzAxMzcsIDB4MDFiZmY1MTgsIDB4YzgwMzFmYWMsCi0JMHhhNjg5NGQxZSwgMHg2OGRhZjY0MSwgMHg2YjFjMzczNiwgMHhkNjNjYTFhOCwgMHgyMGU4M2VhNCwgMHhhNGY4ZGEzZiwKLQkweDU1ZDBlMWY2LCAweGZmYzZlZTY2LCAweDI3Njg2MTUzLCAweDUzZmYxMWM1LCAweGVkODIzNzhhLCAweGZiNTI3YjRkLAotCTB4Nzg4N2MyMWIsIDB4YTk1M2MzNWUsIDB4YjEzYTliZGYsIDB4ZGRiNDRhZWQsIDB4M2E4YzU3MDUsIDB4OTk3ZjAzM2IsCi0JMHg0MmIwOTMwNCwgMHg1YzcxMWUyMCwgMHhkYzcwZWNkMCwgMHhkOTdkYmM4OSwgMHg2ZjQ5NTNlZCwgMHgzZjQyNmQwNywKLQkweDBmZDk0ZjE4LCAweDJjYmYyYjU1LCAweDdlMjg3MTE0LCAweDJmZWM4MjAxLCAweGYzNDc0MjA3LCAweDlkZjlhZTUwLAotCTB4NjNkYTVlYTUsIDB4Y2ZmNDVkYmUsIDB4ZmNlNTJkZWYsIDB4YmFhMGY2MDIsIDB4NjU1MDBkMTIsIDB4ZGU5MDk2ZjgsCi0JMHgxNzZmMmY1MSwgMHg5OTM3YjllMywgMHhmYzc0MTFmMSwgMHhhNmNkZWQ4NywgMHgxZTkxMzYxZSwgMHgwNzM2MzVkMCwKLQkweDA3OWVlNTUzLCAweDRmYjRlZGMxLCAweDNmM2MwMWZkLCAweDkwM2M2YmNlLCAweGQ3ZTk2ZmRhLCAweGI0ZDNhZTZmLAotCTB4MmM3NDY0ZmIsIDB4NzUyODczNjIsIDB4ZmQxZTFmOWMsIDB4YTE3YWE1NTQsIDB4NzNmYmY1MzcsIDB4NWNjMDliYzAsCi0JMHg2MDEzM2Y0YiwgMHhlYjA3ZTkwMiwgMHg5N2IxODAyYiwgMHg4ZWU0Njc4ZiwgMHgzNDRmOTdhNCwgMHgzMjljNTc1MSwKLQkweGQ3ZmFiMWQ3LCAweDQxNjk3YzlhLCAweDM0NGUyOGYxLCAweGYxMjBkNTA1LCAweGM4MTI5MzY1LCAweGNmYjc5NTAzLAotCTB4ZDdiOTQzYWQsIDB4ZTBmMGJjNWIsIDB4M2RjN2Q0M2YsIDB4OWJkNjdlYTYsIDB4ZTE3M2UwYmMsIDB4NGEzZGU2ZmMsCi0JMHhlZmYzODIzMCwgMHhmZTU1MzQ3OSwgMHgyNWJhYTEwZCwgMHg3OTIzM2NlMywgMHhhYjUzYTliMywgMHg2ZTdlNjA3MywKLQkweGI0MGUyZDgwLCAweDk4ZGU0OGY5LCAweDcwZTgwMGZhLCAweGU3NGFmZTUwLCAweGI5NGY4YjRmLCAweDZlNDZkYzhjLAotCTB4NWZmZmRjZGQsIDB4ZTIyZDQ2ZWUsIDB4ZjhkYTdjYTAsIDB4MjAxYmM1MmIsIDB4ZTI3ZmJiZjksIDB4ZTc5MWIyODAsCi0JMHg2MGRiZWNiMCwgMHhkNzNjYzRmMSwgMHg1NmNmM2RmNywgMHg2MWQzYmVjYiwgMHhiYWI3ZGIzYSwgMHgzN2Q5M2JmMCwKLQkweDZmNDYzZWJkLCAweGM2MThmZjYzLCAweDkxNTA1NzdjLCAweGZjZmE0ZmUwLCAweGJkOWQ2NjI1LCAweDVlMzAzNzc0LAotCTB4Y2YyY2ZkZTgsIDB4ODM2MmYzODMsIDB4NjhjMDc5YzMsIDB4NDdiY2E2YWIsIDB4ZjE0OWM5ZWQsIDB4Y2VjMGFkYTYsCi0JMHhmZTJjZWVmYiwgMHg1MDBiNjNjNywgMHg2OTBmNGIzZiwgMHhhMGUwYWM1ZSwgMHg5NmFkNGFlOSwgMHg5NWQzNzNmMiwKLQkweDRlNGQxNGFmLCAweGU2ZWQyN2NhLCAweDM2ODdhNWY4LCAweDljNTE2NWI0LCAweDI1ZTI5M2Y4LCAweDdmODU4YmY3LAotCTB4NDBlZDQwMzYsIDB4ODI5ZGUyYTcsIDB4YzM4M2EzZjMsIDB4N2IyMDJlNmYsIDB4YTVjY2U3MTQsIDB4Yjc3ZGZjZjUsCi0JMHg3NmMyZThjYywgMHhhZjFjZGY3NCwgMHgxN2FjNDllYSwgMHgyZGYzOGI3NSwgMHg3Y2UzNTJiZCwgMHhlNzI0YmU3OSwKLQkweGJmNjgzNTBmLCAweGZiMmY2MzA2LCAweDllOTdmOWYxLCAweGM3OWY5MDc3LCAweGM2MjgxNGJhLCAweDQ3YzVhMjhkLAotCTB4YmVhMDBkOWYsIDB4ZDI3MGJmY2YsIDB4YTJmODQ1NDEsIDB4YTE4ZTkzZWUsIDB4MmUwM2E5NmYsIDB4NTA4ODU1MDQsCi0JMHgzODc3YjAzYywgMHhkYjUyYmVlOCwgMHgxMGM3MmZmMywgMHg3ZDRmNDVkNSwgMHgzNGJkMjBlMCwgMHg0NzFjMmFmNCwKLQkweDQxYThmNjFhLCAweGI0N2FmZTBmLCAweGYxMDc0NWVmLCAweDgxNTNhNWE4LCAweGZkYzlhNTMxLCAweGU2NjNmNzFhLAotCTB4YzIzZTc5NjQsIDB4MDkyYWRmZmUsIDB4ZjkzM2FlN2UsIDB4ZTJkM2YxNjgsIDB4Y2UzMzNhZWIsIDB4ZTU0ZjZmYWMsCi0JMHg3NjMwNDZlMywgMHgwZGZjZTA5NiwgMHg0ZjFjNzU5ZCwgMHg4ZTY0NzQzNywgMHhhYWJjNTYzMywgMHgyOGVhZDg4ZiwKLQkweDRlZWZkN2VlLCAweDFiZjliNzFkLCAweDk0MWMwNjFlLCAweGQ5ZTNkMzE3LCAweGQzODc4YjUxLCAweDcwZjExYTYwLAotCTB4YTI2ZWIyMzgsIDB4ZTk3Zjc5MWQsIDB4YTg0NGMzNjQsIDB4MzdhZmE5MTgsIDB4ZTU2ZDdjY2MsIDB4ZjVlOWNiY2IsCi0JMHgwZTY3ZWY2MiwgMHhmMWZlNzNjYSwgMHhmYzE3ZGYxYSwgMHg0OGVkZmZlMywgMHhlMjA5YzllNiwgMHgyNWI3ZTYwOSwKLQkweDNlZDk0ZmUxLCAweDhiMjNlMTM1LCAweGMwZGJiZjY5LCAweGJkZmE0NGQ3LCAweDUzYTM5YzJkLCAweDI0MzM1YmZkLAotCTB4ZDg1OTc2ZmMsIDB4MjQyYTBjMTksIDB4ZGJmMzhkOWYsIDB4NDFkYTEwNmQsIDB4M2JmNThmZjYsIDB4OTJmMDNmYjksCi0JMHg5ODEwNzVjMiwgMHhkNGRlYWM3MSwgMHhkZmE5YmQ3NywgMHg4ZDVmYmM3YSwgMHgzMGY1NGQ5YiwgMHhmYWUyODNlYSwKLQkweDZlYTM3YjU1LCAweGJmMzE2ZmVjLCAweDM0NzZiZDM3LCAweDBjYmNmNDhmLCAweDE2NTk5YzQ0LCAweGIyYzY3MTEyLAotCTB4ZDIyNzk1OTcsIDB4ZDAzMzFjZmQsIDB4OGRkZWM5OGYsIDB4ODIzYzI3NjEsIDB4NzE5Yjk3ZTMsIDB4YzYyNzc5NjYsCi0JMHhkZmE0NjUxOSwgMHgzMGU2YzZjNywgMHg0MjNkMDI1ZiwgMHhkOGJjZjRkZSwgMHhmZTNhOWRkMiwgMHgyYmE4ODE0YywKLQkweGY2N2FjZDg3LCAweGQ1N2IzNGNiLCAweDAyYTcyMWM0LCAweDUxZTY1YmQ3LCAweDM1OWU0MWJkLCAweDhmZmRhNzY4LAotCTB4ZTFmZTQyY2YsIDB4OTMzZGM3ZmEsIDB4Mzk3YjFlZjgsIDB4ZDY2OWJkM2IsIDB4MDU3YjU2ZTksIDB4YzNlYThiMTIsCi0JMHg1YjkxZGU5MCwgMHhmNzM3ZTQ5MCwgMHgzOTIxZDg2MCwgMHgwMWE5ZTYxYSwgMHhiZGQyN2ZkMiwgMHhkMmVjYzU2NSwKLQkweGRkMTZmNzhjLCAweDFkNWZlMzhkLCAweDZiZDFmZWJmLCAweGM2MmRlZjkyLCAweGUxZTI3MmRlLCAweDU5N2Y4YTJmLAotCTB4NDNlMjliMzMsIDB4MTcyNzg4YTcsIDB4N2NkZDcwYWIsIDB4ZWI4MWMzYWEsIDB4MzNhNzdmNWEsIDB4M2YwYmY3NDgsCi0JMHhhZGVhODhmMiwgMHhmMjEzYzRhNSwgMHgwYjcyYjBjZiwgMHhmZWViMDRmMSwgMHg0YWZlYjRmMSwgMHhlMTQ2MTkyYywKLQkweDhhZjY1N2Y5LCAweGUyZTU2NDdhLCAweGFmNzc5OTRmLCAweDQ2ZTcxNjRkLCAweDc0Yzk4ZGJkLCAweGZmZWFiMDBmLAotCTB4OWQ0NDJmOTYsIDB4YjE2ZjdkNjksIDB4YTAzZGYxMGYsIDB4NmYzMGFjMjUsIDB4OWNiZTA3YmIsIDB4YzZmMjhhNTAsCi0JMHg1MDlmM2VmYSwgMHgxNmViNTg4NywgMHg1NGY1YjQ3OSwgMHg3OTdkNTAzNiwgMHhhMGNlYWZmMSwgMHg3NGJjZTUxMywKLQkweDFmMGZlNWY4LCAweDJlYTVmNmMwLCAweGYyZTYzMTE3LCAweGMxZDk1YzcxLCAweDBkYTJkMzdlLCAweDcyMWQ3MTE1LAotCTB4ZWJiY2ViMTgsIDB4N2M3M2JkNjgsIDB4YzgxZWU4OGYsIDB4YmM0MGRiYmEsIDB4NTEzN2NlYjgsIDB4YjViYjE2ZmYsCi0JMHhhOWQ3MWI0MiwgMHg5MTgzYjA2ZCwgMHgzYWU0OTllYSwgMHhjYWM3NWVhZSwgMHg4ZDg2NGIxNCwgMHg1NjZiZmU2NiwKLQkweDdiYzQyMzczLCAweDU3MzQ2ZTJiLCAweDg4M2RjNjI1LCAweDZiODhkZmZjLCAweDUzM2IzOGRjLCAweDVjZWMwOGZjLAotCTB4MWI4YzhjYTAsIDB4Nzc3YjE1OGQsIDB4ZmQ1MzIxYmEsIDB4OTc3Y2UxMTMsIDB4ZTNkY2VmNWUsIDB4MjRlNmRlNDYsCi0JMHgxZTJhMWI3OCwgMHhkZTg0YjY3YSwgMHhhMTNiNGU3MSwgMHhmZmNlOTRiNSwgMHhhZmIyMDRkNSwgMHg5Y2ViN2U3NSwKLQkweDllN2U0Y2U3LCAweGM2MDFmYmE3LCAweDk1MmFkNjlkLCAweDI3OWI2NWY1LCAweDcwOGJhYWQwLCAweDc2MjZmMzFlLAotCTB4ZjU0ODM3MzIsIDB4MTdmZThjZmUsIDB4OGQwNzg4Y2IsIDB4YjI1YzcwMDcsIDB4N2QxZGExZmYsIDB4OTA0Mzg4NTQsCi0JMHg0MjFjZGNmOSwgMHgzY2U0OTJhMSwgMHg3NGUyZmZkOCwgMHg5N2Q5MWJlMiwgMHhhNmZjOWRkZSwgMHhiMmU1ZDM3ZCwKLQkweGZkYzQ1MTUwLCAweGZiODhhNmQ1LCAweDI4N2Q4ZjZiLCAweGZlNGRlZThmLCAweDMwNmQ2YWMzLCAweGZjZDY3ZWM5LAotCTB4ODBmZTRkN2IsIDB4ZWZkM2RjNWQsIDB4N2M0NDIwYTcsIDB4ZDgxZTBiMGEsIDB4ZWYyMjA0ZmEsIDB4MWE3NzhhZDYsCi0JMHgzMzRhY2EwZCwgMHg3ZTQ0MmZmNCwgMHgwMzVlNGI3YywgMHhlYTZkMGI5MiwgMHgzM2NjZTJkNywgMHhjYjFiNDlmZiwKLQkweDVjMzkzZmUzLCAweDAzZGY5Yzk0LCAweDhhMThlZWI0LCAweGMwNGRhZDdiLCAweDI4MDcyNDcxLCAweDBiMWM2MmNlLAotCTB4Zjk3YjYzZTQsIDB4OTdhZTJjZTksIDB4NmFiYjY1YTIsIDB4YTk5NTZlMzgsIDB4NWI2YjcxNDAsIDB4YzlhOWU2ZmYsCi0JMHgwNWJmZTFmOSwgMHhlOTE3MzhhYSwgMHg5NWFhOThhMSwgMHhhNmZlYzUyNywgMHg5NTYwZGExZSwgMHhiYzE3Y2Y3OSwKLQkweDc4ODgxNDBkLCAweDI3YTNmNzgyLCAweDQ3ZWUxOWRkLCAweDZkZGViNWRmLCAweDNkODI3M2VkLCAweGZhOTc0ZWM5LAotCTB4MGRmZWY5ZWEsIDB4NTJhNmY4NWYsIDB4ZWY5ZjAxOWMsIDB4ZmQ2ZGMyNmEsIDB4ZmJlOTUzZjUsIDB4NTdjZGZlYTUsCi0JMHhkMmE0YmJmMywgMHgwMmJmOTI5NiwgMHhkNTMxNWYyNCwgMHg3OTE0ZWY0NSwgMHhlZmI5YmZiMCwgMHhkNDYwMjI5ZCwKLQkweDI3NmE3ZTU4LCAweDZlZmRhZmU3LCAweDhlYzRlNzUxLCAweDg0ZmJmMTY0LCAweDA3ODI2NTAyLCAweGRkNjUzOTMwLAotCTB4Yjg1N2VlYTYsIDB4NTVlYTY4OGUsIDB4NTgzZTY0OGQsIDB4MjJkYzdhZjMsIDB4MWUyNjFlMGYsIDB4MTQ4NmI2MjAsCi0JMHg0ODdjZWQ4MywgMHhmM2VmNTM2MCwgMHgxNmEzNGYyYywgMHg3NmI2M2I2MiwgMHg0YmJmYTI2YSwgMHgzYzk3ZDYyMCwKLQkweDAwZWUwMDJmLCAweDM5ZmVhZmM5LCAweDUyNzU0YzNjLCAweDg3OTY0ZjczLCAweDNlYjE0YmRlLCAweGM0YjFmOTE0LAotCTB4ZmE4ZmRjMTksIDB4OTljMmY0NTksIDB4Y2Q1YjhhMjIsIDB4ZjUwYTY4MmYsIDB4YmJlYTUwYzMsIDB4Njc5YjczNmQsCi0JMHhiZGU4OGZjNSwgMHhlODE1NzVlMCwgMHhkYTU1ZTFkZCwgMHhjNGIwZWQwMiwgMHg0ZDU0ZDE4MSwgMHgxZDY2ZWZjYSwKLQkweDVmOWJiNTYwLCAweGM4ZDRhYmFhLCAweGNiMDZkYmVmLCAweGU2Y2U1MTJiLCAweDNiNGFiYWZlLCAweDc4YjRmNDE5LAotCTB4YjYzNGJhMGYsIDB4MzAwOWViOTEsIDB4OTViNjVkODQsIDB4MjdmMGE2MzQsIDB4ZjcyOTAzMDAsIDB4YjE0ZTUwNmUsCi0JMHg4ZDYxNjMxZSwgMHgwM2EyODFkZiwgMHhmZGU5Y2E2NywgMHg2ZmU0YjlhOCwgMHg3MzQ3ZTRlNSwgMHg1MzdiYzUwYSwKLQkweDU1NGJiZDMzLCAweDdkZTI3YzkwLCAweDRkN2Y5YWNhLCAweGFmYjNmMGExLCAweDBiN2I3ZjRkLCAweDdiY2RhM2JjLAotCTB4OWUxYjJlY2UsIDB4NGQxYWFkZmYsIDB4MDVlYjg0N2YsIDB4NmVkZDlmNTEsIDB4YjdkNWNkYzYsIDB4YmM1ZjVjNjksCi0JMHhjNzhkMWUwNSwgMHhjY2ExOGExYiwgMHhmYWM4YmNlNSwgMHhhNzhjZGRiOSwgMHhlMzUyYWEyYiwgMHhmMDNkY2FkYiwKLQkweDkxYTExNjcwLCAweDYzNWI0ZWI5LCAweDBjMGFiZmFlLCAweDc1NzU3NzVlLCAweDY2MzViOGVhLCAweDM2YTZiNjlkLAotCTB4NTZlN2ZiZjUsIDB4OTMwYzljZGMsIDB4YzJlYTZlMzksIDB4NjZjNzViOWUsIDB4YjkwYzdlNzEsIDB4MGNkZWY5M2MsCi0JMHhiNDc1ZTI3OSwgMHhmNTQxYzc4ZiwgMHg2ODNjMGI5YSwgMHgxYzY2ZTNhNywgMHgwMWM5MmI2ZCwgMHgxNzdlMjhmNywKLQkweGEzZmQ5MjA5LCAweDUzYmZiZWQ5LCAweDcxOWY4YWRlLCAweDM0NTUzYmYyLCAweDE1NjVjZTJkLCAweDI5Y2QzZjBhLAotCTB4NTE0YTcxMTQsIDB4OWIyNzZjYTIsIDB4YTNlZDljNzIsIDB4ZWQ5YmFmMjgsIDB4ZTdlYzUyMzcsIDB4NTMzYmM0ZDcsCi0JMHhmYzkzNzkxNCwgMHhhY2MyN2M4ZSwgMHg3ODhhYTIyMywgMHg3Yjk3NGI0NywgMHg4Nzc4YTE3YywgMHgzNGRmYTExYSwKLQkweDVmZDA4ZWJkLCAweDM2YTJkZTlhLCAweDZlYzVjNzUxLCAweDVmZmVmODU2LCAweGM1MTlmNThlLCAweDk1OGJiNWFmLAotCTB4MTRmMTQxYTAsIDB4MmJmZGMwZjUsIDB4NTRjM2Q2MTUsIDB4NjI3MDRmODgsIDB4OGY5ODFkZmYsIDB4NGQ4YmVlYTgsCi0JMHhiNmZkNzUxMywgMHhlZmUyZjliNSwgMHg5Yjc4MDEyNCwgMHg2NGYxNjhlYywgMHg1N2U0NWQ4NSwgMHgyODZiMGY4YiwKLQkweGRmMTJjZWJmLCAweDZlZGU5ZjI5LCAweDc3NTVkM2U2LCAweDg1MGFmMzVlLCAweGFkYWY0YjQ1LCAweDJmOWNhN2U0LAotCTB4YjE0NjMxNDYsIDB4NDc1ZTIwYmUsIDB4NTNjN2VhZmIsIDB4OTE3ZDIzZGMsIDB4ZjMyZjQ3OWYsIDB4YWRjMjc0MmUsCi0JMHhhNzJlN2ViMSwgMHgyZmQzNmFiZiwgMHhhODM5NDc2ZSwgMHg3YWRlZmRhZSwgMHhlYmE1ZTczNCwgMHg5NTMwYmFiMywKLQkweDJiNTgxODg3LCAweGYyMTM4ZmM4LCAweGM3ZTYzMzNiLCAweDk0M2NhNmQ1LCAweDQ3ZTgwMzYzLCAweGVkZmQ0ZDZiLAotCTB4MmVhZGY3Y2QsIDB4MDQ3N2VmYzQsIDB4N2U0YzNkNTcsIDB4YjNkOTQ2NzUsIDB4Y2UyNDEwZmYsIDB4OWQxODdhNGQsCi0JMHg4NWFkZGViNCwgMHgwOTBjM2RlMiwgMHg5YjdlZjE5MiwgMHgxNmYwMTc5ZSwgMHhkN2I4ZTAxNiwgMHg1NGFmNzE4ZiwKLQkweDI0MTc3N2JjLCAweDkzM2VlYmU5LCAweGIxNjFkN2Q3LCAweDA3OWM3NjRhLCAweDI1ZGU5NTAxLCAweGRjM2IwM2FlLAotCTB4NDQzYjZkNDUsIDB4MjAwYjg4ZWMsIDB4ZmU4MWRmYzIsIDB4NGZjNDU2MDgsIDB4OWQ3M2ZjZWEsIDB4OTk0NDcyM2QsCi0JMHhlZmY4ZTNjNSwgMHg5MDYxZjM0MywgMHg3MTA4ZGRjNywgMHgzYjc0MDM0NiwgMHgzMmYwNDJlMSwgMHhjYjIyYjk1NiwKLQkweDA4YWY2Y2E5LCAweDRiYWE1NDg1LCAweDgyZjY0NTIzLCAweDUyMTNhOGIzLCAweDI0NzNhNjY1LCAweGIzODc2M2NlLAotCTB4ZDJhMmZkNTYsIDB4MGI2MDExZGYsIDB4M2NmZDNkZDksIDB4MGM3OWQ2MWQsIDB4MGQ0YTRiYzEsIDB4NTU1Y2ExNzcsCi0JMHg5MzY5NTIxMCwgMHgxNTQ4NjAxYiwgMHgzOWYzMmZmMSwgMHg0ZGRkNjAxNiwgMHgwMWI4Yjc3ZiwgMHhmYWNkOWZlZCwKLQkweGViZjhmMjA4LCAweGE2NmEzY2U5LCAweGFmMmQwY2YzLCAweGViMTYxNWUwLCAweDI5MTI5ZjI0LCAweGYzOWQ3ZGIyLAotCTB4MmIxMWNmZGQsIDB4NmYzNzVlMDIsIDB4MDNlMmZjN2QsIDB4ZmJiZjg5OTUsIDB4OWVhZmMzNzgsIDB4MmEzZDNmYTYsCi0JMHhkM2Y3MDE4NiwgMHg2NjVjNGRkZiwgMHg5ZmIxMWFkZCwgMHg3ODhmODZmZiwgMHhlMTdkZmQzZiwgMHg1MjE1ZGZiYSwKLQkweDdjZThmMjNjLCAweDg3ODFmMDRlLCAweGY2MDYzOGY4LCAweGIyM2Y3NGU4LCAweDcxNDJiOGQxLCAweDEyOGI4ZmRjLAotCTB4NWMxMDNiYmMsIDB4MmYyMWIxZTUsIDB4ZjJlNTE4ZWUsIDB4NDNjY2E1YWEsIDB4YWI4ZDY3NWUsIDB4Y2Y3YTRhZTMsCi0JMHhlMTRlNGQ0MywgMHg5MWU0YzFiYSwgMHg2YWFiN2YyNSwgMHgyYWY4OTFmYywgMHg4OTQ0YTI1MSwgMHg5NDRhMjUxMiwKLQkweDQ0YTI1MTI4LCAweDRhMjUxMjg5LCAweGEyNTEyODk0LCAweDI1MTI4OTQ0LCAweDUxMjg5NDRhLCAweDEyODk0NGEyLAotCTB4Mjg5NDRhMjUsIDB4ODk0NGEyNTEsIDB4OTQ0YTI1MTIsIDB4NDRhMjUxMjgsIDB4NGEyNTEyODksIDB4YTI1MTI4OTQsCi0JMHgyNTEyODk0NCwgMHg1MTI4OTQ0YSwgMHgxMjg5NDRhMiwgMHgyODk0NGEyNSwgMHg4OTQ0YTI1MSwgMHg5NDRhMjUxMiwKLQkweDQ0YTI1MTI4LCAweDRhMjUxMjg5LCAweGEyNTEyODk0LCAweDI1MTI4OTQ0LCAweDUxMjg5NDRhLCAweDEyODk0NGEyLAotCTB4Mjg5NDRhMjUsIDB4ZmZlMTIyNTEsIDB4NzIyNTUzMDAsIDB4MDA4MDAwYWIsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHhjNWVkZmYwMCwgMHgzMDAwMTEzMSwgMHhlZTMwMDQwOCwgMHhkODVhYTEyYSwgMHhhYTY2ZjZiMSwKLQkweDk2NGQyMTEzLCAweDVkYmJjY2U0LCAweDZkYjZkYjE1LCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHgzZDAxN2UzZiwgMHgwMDliMWJhYSwgMHgwMDAwOWIxYiwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweGM1ZWRmZjAwLCAweDMwMDAxMTMxLCAweGVlMzAwNDA4LCAweGQ4NWFhMTJhLCAweGFhNjZmNmIxLAotCTB4OTY0ZDIxMTMsIDB4NWRiYmNjZTQsIDB4NmRiNmRiMTUsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDNkMDE3ZTNmLCAweDAwOWIxYmFhLCAweDAwMDA5YjFiLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4YzVlZGZmMDAsIDB4MzAwMDExMzEsIDB4ZWUzMDA0MDgsIDB4ZDg1YWExMmEsIDB4YWE2NmY2YjEsCi0JMHg5NjRkMjExMywgMHg1ZGJiY2NlNCwgMHg2ZGI2ZGIxNSwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4M2QwMTdlM2YsIDB4MDA5YjFiYWEsIDB4MDAwMDliMWIsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHhjNWVkZmYwMCwgMHgzMDAwMTEzMSwgMHhlZTMwMDQwOCwgMHhkODVhYTEyYSwgMHhhYTY2ZjZiMSwKLQkweDk2NGQyMTEzLCAweDVkYmJjY2U0LCAweDZkYjZkYjE1LCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHgzZDAxN2UzZiwgMHgwMDliMWJhYSwgMHgwMDAwOWIxYiwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweGM1ZWRmZjAwLCAweDMwMDAxMTMxLCAweGVlMzAwNDA4LCAweGQ4NWFhMTJhLCAweGFhNjZmNmIxLAotCTB4OTY0ZDIxMTMsIDB4NWRiYmNjZTQsIDB4NmRiNmRiMTUsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDNkMDE3ZTNmLCAweDAwOWIxYmFhLCAweDAwMDA5YjFiLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4YzVlZGZmMDAsIDB4MzAwMDExMzEsIDB4ZWUzMDA0MDgsIDB4ZDg1YWExMmEsIDB4YWE2NmY2YjEsCi0JMHg5NjRkMjExMywgMHg1ZGJiY2NlNCwgMHg2ZGI2ZGIxNSwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4M2QwMTdlM2YsIDB4MDA5YjFiYWEsIDB4MDAwMDliMWIsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHgwMDAwMTAwMCwgMHgwMDAwMjA4MCwgMHgwMDAwMzEwMCwKLQkweDAwMDA0MTgwLCAweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLCAweDAwMDA4MzgwLCAweDAwMDA5NDAwLAotCTB4MDAwMGE0ODAsIDB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsIDB4MDAwMGU2ODAsIDB4MDAwMGY3MDAsCi0JMHgwMDAxMDc4MCwgMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwgMHgwMDAxNDk4MCwgMHgwMDAxNWEwMCwKLQkweDAwMDE2YTgwLCAweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLCAweDAwMDFhYzgwLCAweDAwMDFiZDAwLAotCTB4MDAwMWNkODAsIDB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsCi0JMHgwMDBlMDAwNCwgMHhjY2NjY2NjZCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywKLQkweDAwMTAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4MTExM2ZmMDAsIDB4NTFmODYwNjYsCi0JMHg0MjNlYzA4ZiwgMHhhYzlkMGMwYywgMHhjNGI0NjJhOCwgMHgxODE4OTkwYiwgMHgxMmIxMDJmZSwgMHgzYzQzMDMzMywKLQkweDIwM2FkZWQwLCAweDIzODgxMDdkLCAweDE2MTgxODU4LCAweDJmZDYxMGIwLCAweDAyMmJkNDA0LCAweDJjNDA2MmM0LAotCTB4MTliN2M0MDEsIDB4OWNkZmIzNDgsIDB4MWYwZjY4MGIsIDB4YzgwMzdmODIsIDB4M2Y0MDI0YmUsIDB4MWMzNjBmZmYsCi0JMHhmYjVmNDBhZCwgMHgxODE5ZDUwMiwgMHg4YWEwNmJmZSwgMHhmMmEyNjgzMSwgMHg5YmYxMzUxOSwgMHhjZjI2ODRjMSwKLQkweDIxNjdjNjhjLCAweDYzMjQ3ZmEwLCAweDBkNzViNjAwLCAweDAwMDQwMGYxLCAweDAwMDAwMDAwLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4N2RkNWZmMDAsIDB4ZDU1NDc4MGIsIDB4NjczZWYwYjUsIDB4ZjMzOTljY2UsIDB4MDBmZGU0Y2MsCi0JMHgxMDhmMDk5MiwgMHgyMTA0ZTAzNCwgMHgwNDMyYjQ0NSwgMHgzYjY5NDg4YywgMHhjNTE0NTQzYywgMHhmNzkxZTEwOSwKLQkweGIxNGEzZTQ0LCAweDQ0MDMzYmQyLCAweDM1MGFmODA4LCAweDAzODBhMDUwLCAweGVkMTY4ZDAyLCAweDA2ODIzY2EwLAotCTB4ZmRhMjkwMWMsIDB4NWExYmRlZGIsIDB4Y2I2YWI3YmQsIDB4ODgwYjg1MWYsIDB4NTJkMTE5MjEsIDB4Zjc3YWM1ZWEsCi0JMHhjYzlmN2I1YSwgMHhkMDA0OTMzOSwgMHg5ZmRmZmVkNiwgMHhjZmIzNzY3ZSwgMHhkNmJkYWY3ZSwgMHhmN2I1ZWJkYSwKLQkweGE0NDFjNDQ4LCAweDg0YmU0MjFjLCAweGZjODQ3MWJmLCAweGE0ODQyMDVlLCAweDgzYmY1MmM2LCAweGE5MDhhM2E2LAotCTB4MmQwODY3ZDksIDB4YzI2NDI1Y2YsIDB4NWM2NDYzM2UsIDB4MTM2ZmNkMGEsIDB4MTc5YTI2NDIsIDB4YmNiMTliMGYsCi0JMHhmYmNiMzM3MywgMHhkZDRmNmQwZCwgMHgwMWM5Y2I0YSwgMHgxMzQ5ZDkwMywgMHg0OTExNmY5MiwgMHgxNDY3MjExYSwKLQkweGQxNDZmZWMyLCAweGYzMjExMTdjLCAweGIzNWIyY2NkLCAweDQyNmNjOGVkLCAweDk4Yjc5N2ViLCAweDNmYjY5OTg4LAotCTB4ODFlMGQ3YjMsIDB4NDI5ZGMyZmMsIDB4ZDQzOWQwODgsIDB4NjcyNTVjMWMsIDB4ODQxN2ZlZDEsIDB4NDVkOWIwODQsCi0JMHg0N2U5M2JmMywgMHhkN2IxNWU1YSwgMHg1ZGZhODIxMCwgMHhhZjM0YjY4ZSwgMHgwMWYzOTA4ZCwgMHg5ODY0Yjg4NSwKLQkweGVkNjkzYmRmLCAweDg2NTQ4NDA1LCAweGQxNjQ5NGY2LCAweDA1YmI5NTdhLCAweGE5Yzc0OGI3LCAweGM2NDQyY2RjLAotCTB4NDJlZjgyOGQsIDB4YThiYjQwYzgsIDB4NTcxMmI2NmEsIDB4OTdjMzliM2UsIDB4NzVjNWM3MDQsIDB4Yzc0MmRjMmMsCi0JMHhhOTEyZmRhNSwgMHg2MWRhZjY1MSwgMHhjYmIyYjViYywgMHhmOWNmODMxZSwgMHg1MWM3MTM4MCwgMHhkM2NmMzVmMywKLQkweGRhYmI2ODcxLCAweDJjMzcwNDk3LCAweGJlMjQ1NmIxLCAweGYzYmYxZDMwLCAweDczZTY3OWEwLCAweDMyZGY1ODM2LAotCTB4NWRhZWNmMzksIDB4NTg3ZWU5NDcsIDB4OWI2ODY1NDcsIDB4Nzk4MzYyNWMsIDB4MTdlNzkzNmQsIDB4NmFhYmZhYzQsCi0JMHg2YmNmZDY0ZSwgMHg5Zjc0YTBjMywgMHgzZDNlM2NhNiwgMHg5NWM0MjAxZiwgMHgxMjU3Y2IxNywgMHg2MGRiMDllMiwKLQkweGVhNzkyMWZlLCAweDYzZjdkOGYwLCAweGIzZjcxMTI0LCAweDVjNDBkOWFhLCAweDQyN2ZhYzRhLCAweDQwZGRmODgyLAotCTB4MmI4MDExZGMsIDB4YjViYmI1NjksIDB4YTlkMTc2ZmIsIDB4ODk4NWI3ZGYsIDB4ZjMxZjZkYmMsIDB4YzNlZjlhNzksCi0JMHgyN2E3MGU1YSwgMHg0ZDM0N2U2MSwgMHg0OTk3MzhmMCwgMHgxMzA5ZmQ3NCwgMHg0YWI4NTM4OSwgMHgzMjQ2YjVmYiwKLQkweDdhY2JkYzMzLCAweDE4NjQwNWVmLCAweDg4OGY4ODRkLCAweGUyNWFkZjM4LCAweDJlZDIxZmJiLCAweDRlOWNhZWIxLAotCTB4MzI0NWZlOWUsIDB4YWJiZDc0YmMsIDB4ZmJmZWQ2MDQsIDB4NTdmNTg1YzQsIDB4YjAzZDkwMGQsIDB4MmFlZjZiYWYsCi0JMHhjYjkwY2U3YSwgMHhmOTAyOTJkNywgMHhkMGQ2YmJmOSwgMHg3OTI2OTMyZSwgMHgwMjU3YzAwOCwgMHg2MTQwMTViOCwKLQkweGNiNDBkMDdiLCAweDQ3MTNiYmVkLCAweGUxNjk3MWFlLCAweGM2MWYzYzU3LCAweDc1MTI4YzczLCAweGNkYmNlM2ZiLAotCTB4NGQyN2NiYTIsIDB4YWY4MzhhNGMsIDB4NDZlNjc5Y2QsIDB4MzRmM2E3OWUsIDB4ZDIxMWQxODksIDB4NjdjNjQyMjAsCi0JMHg4YjZmODgyYiwgMHg5YmE0NjViMywgMHg3OWIzYjdjNSwgMHg4NWI2Y2UyZCwgMHgzOGZmMzQ4MiwgMHhlNjg1YjgzNCwKLQkweGNlNGRkZjY1LCAweDQ3NDFlMDVlLCAweGE0MDY0OTE2LCAweGU5OGM5MTNlLCAweDcwMDBkZTU5LCAweDljNTA3OGE0LAotCTB4MDNlZjI1NzMsIDB4NjhjNWZhOWEsIDB4MWY0ZDIyNWUsIDB4MDEwN2M2MTYsIDB4OGUwMTJiMmUsIDB4NDgxYWI1MzQsCi0JMHg2YWRiYWMxZCwgMHg4NmE3MDgyMiwgMHgwNWNmNDUyMSwgMHg5ZDVhNzAzNSwgMHgxYjk0ZTE0YiwgMHhiMWI1NzdlYiwKLQkweDA5Yjg4MzJlLCAweDIzYmMxMzU5LCAweGY4NTI2NTI4LCAweDFkY2RkMmU2LCAweDIzYmRmMzBiLCAweGRiNGMxYzEyLAotCTB4MDBjZTJlZTcsIDB4YTUzMjJhNzgsIDB4MzJmOGVkMDMsIDB4YzcwMGJmMWQsIDB4YWUzODA0NmYsIDB4M2YxOGZiZTcsCi0JMHg0NjM3OTJiZSwgMHg2MDc5YmUzNywgMHhiMzdjNmViOSwgMHgzOGE3Yzc0YywgMHg1ZGY4MjliOSwgMHg2Mzg1M2UzZSwKLQkweDIzM2YyMTE2LCAweDk1ZjFjNWRmLCAweGZjNzA0YjgxLCAweGViOTQ5OTA2LCAweDhmNzRiN2M2LCAweDc3NzE4MjFmLAotCTB4NDM3ZTMxZjUsIDB4ZmFmZDU4ZGUsIDB4ZDdlYTU2MDcsIDB4YmZmNWIzMmYsIDB4OGY5YmJjMTAsIDB4ZmZmNWMxNmYsCi0JMHhkNmNkZGM4MiwgMHg2YzQ3ZjAzZiwgMHhhZmRhMjZmZCwgMHgzNzQ3N2M3NiwgMHhmNzAwYzNmYywgMHg1ZmMwN2RmZCwKLQkweDdlOWI3YTE5LCAweGY1YWE4M2ZkLCAweGYxYjEzN2ViLCAweGM4M2UwZDVmLCAweGY4ZTFiN2M3LCAweGQ5MDc5MWFmLAotCTB4YzUyZDA3ZmEsIDB4M2FhNjRkZjEsIDB4OTkxNjkzYjcsIDB4MjE3NTJjNzIsIDB4ZmQxNzZiYzAsIDB4MDc0ZDNhNWYsCi0JMHg0NWJlNzFkMywgMHg0MjI0ODJkMywgMHg5MDFmZmI2OCwgMHhjNTg3MDg4MSwgMHhhODUwZGYxNiwgMHhmMTQyYzk3ZiwKLQkweDBiZTMxNmNkLCAweDAwNTJiNDI0LCAweDM4ZTVhZmJhLCAweGE5Nzc3NzNkLCAweDMyNmQyNGZjLCAweDRiZjE4NWI3LAotCTB4MTBlOWY5NDIsIDB4OTZjZWJmM2EsIDB4NGZiZDJmNGYsIDB4NDc3NzNiZTcsIDB4NDJlMGRiYTEsIDB4NmVkMDI0N2EsCi0JMHhkZjhhNWYxZSwgMHg4ODQxZTBjMCwgMHgxZGFhN2IzNywgMHg3YjM3OTNmOCwgMHhmMjJjNzBkYSwgMHg0MDU5OWYwMCwKLQkweGYwM2Q4ZTcwLCAweGYxYTM1ZTc4LCAweGJlODZiYjRjLCAweGU3ZDA2YzE2LCAweGJjZmE0MjJiLCAweDgwZjFlZjNhLAotCTB4MTYwZDM0MjQsIDB4M2EzYWZjOTMsIDB4OGZjYTE5ZWUsIDB4MWY5M2U1MDgsIDB4ZTkwNDdlNTIsIDB4MDg3OTIzNTksCi0JMHg5NGQzOGRjZSwgMHg0YjU5MTE1ZiwgMHg1ZjcwY2I1NywgMHhmZTBjNDhjZSwgMHg5MTU4MzY2NywgMHg3ZGFkMmYxZSwKLQkweDYwODMyNjU4LCAweDY0MGE1NjNlLCAweGYyNDE3OGNkLCAweGZmOWQzZTc2LCAweDA4OWQ3YzNkLCAweDU3ZTAyMmU3LAotCTB4YjRmNzNkNmMsIDB4NDdhMTRjZDYsIDB4YjI3NzlkMmMsIDB4MzFhNzVkYWUsIDB4ZjViZTA0NjIsIDB4OTYzZDA5MjAsCi0JMHg3YjJmZmI0MSwgMHg4N2QxOGY2MiwgMHg0ZmQzYzdmYywgMHhmZDI2YmE0NCwgMHhmN2Q3NGE0NCwgMHhkODdlMzRjZSwKLQkweDczMzc2OWFlLCAweDNmNjM1YWVmLCAweGQzZTdkZTlhLCAweGFlNTU5ZjdmLCAweDQzMWE3N2NmLCAweGU1Y2UxMTQ2LAotCTB4YTM2YzgxMGEsIDB4YTc1ODNmZmQsIDB4ZjljNzU3MmYsIDB4N2RiMTI0OGMsIDB4NDNkZGUzZTYsIDB4MDQ5OTkyZDcsCi0JMHhmZTkxZmE1OSwgMHhlYjY0ZTdkYiwgMHg0OTdhZTdhMCwgMHhjYTFmMzgzZiwgMHg5YTRlZjcwNCwgMHg4ZGVhMTA3ZiwKLQkweDRiN2M3ZDg0LCAweGU3YjNlZjg2LCAweDkwZDdiYTI1LCAweDUyMjVmMzllLCAweDkyNzNmNjA2LCAweDI1MjcxYjlmLAotCTB4MDhiNzUzZTMsIDB4N2VkZmU3M2QsIDB4NDcxMWVhZDgsIDB4ZmM0NzVjZjQsIDB4NGUyMjFmYmMsIDB4OTY4Nzg3ZGMsCi0JMHgwNjk3YmZlOCwgMHhmMGM3ZDdlMywgMHgzZTMyZGZjMCwgMHg3YmU2YjRmOSwgMHhlNGFlZjg0ZCwgMHhhOTdjMWFkMywKLQkweGNiYWE5ZTZhLCAweGQzZWU4NDU3LCAweGExYjA1ZmQ1LCAweGFmM2U1NzU0LCAweDVlNTc0MmIxLCAweDJlYjBmMGQ2LAotCTB4NDQ3YzFhNWYsIDB4MjVhMWZmNTcsIDB4MGZlNTc0Y2IsIDB4OTVkNmFkZDYsIDB4YWI1ZjJhY2YsIDB4ZGJlN2RmY2IsCi0JMHhlZjdmYWJhOCwgMHg3MmJhNmRjYywgMHgwZTQ1NzBlMSwgMHhkOTdlMzdjOCwgMHhlMTQ5OTM5NywgMHgxMzVkZTE3ZSwKLQkweGYwYzQyZWQ5LCAweDczZjNjNTU4LCAweGNmNGMwYzgxLCAweDJlOTg1YzA3LCAweGY0YTU3YTAzLCAweGE5NjQxZTJmLAotCTB4MGU2OTdiN2YsIDB4Zjc4YWI5ZDAsIDB4ZDk3NThkNjcsIDB4ZjhmMTI3NDAsIDB4ZjE4ZjRmMWQsIDB4MDM3ODBjNzgsCi0JMHhlNzVmNTBlNywgMHhiYzQwYjU3OSwgMHgwMjVkZjc0MCwgMHhlZmQ0OGYzYiwgMHg5N2ZjZTY3ZiwgMHg2ZjQ4ZTU5MCwKLQkweGM3YTMzMmQ1LCAweDhiMzM5N2VhLCAweGU1YWE1ZTgxLCAweGFkOWQ1ZTQ4LCAweDU4NDk3ZWVmLCAweGIyMTA3NWMwLAotCTB4MDhhOWZiMWQsIDB4ZWRkMGFhNTEsIDB4M2NkZDIwZWIsIDB4NzAxODhlM2IsIDB4M2UxMDVhZmMsIDB4ZGVmMzgxNmUsCi0JMHhmOGMwMmE1YiwgMHhhN2IyMzc5MSwgMHg3OGY5ODcwZiwgMHgyNWJlNjBlNiwgMHg0NzYyZjkxNSwgMHg2OWYyNTI2MCwKLQkweGM1ZTdlMDA5LCAweDI2NjA1Y2Y0LCAweDNlMDI2N2E2LCAweGNhMDc0ZjRjLCAweDUwMzBmZDMxLCAweDYwN2I2OTg3LAotCTB4MDMyN2E2MDksIDB4MTRmZjRjNDEsIDB4YmRmNGMwNjgsIDB4N2ZhNjIzNDAsIDB4ZjRjMDZjMGMsIDB4NGMyMTAzM2YsCi0JMHg0YzFlMDMzYiwgMHgxNGQ0ZjFiYiwgMHg5MGY5MDNjZCwgMHgyMDIyNmZiYywgMHgyZTE0OTJlMiwgMHgzMzcyYTk3ZiwKLQkweDVjODVmOTYxLCAweDJlMGJlZTZlLCAweDI3ZGVmYmYxLCAweGJjNTA0OGZjLCAweDJjNTliZWRhLCAweGE4ZTgzZjZjLAotCTB4ZjNhNTA4OTMsIDB4YmJmNmMzMzUsIDB4NDRiY2IwZTcsIDB4ZGQ4NDNmOTAsIDB4YmJiMmY5NWEsIDB4ZjQ4M2Q4NWYsCi0JMHg5ZmM3ZWY2YiwgMHhmMzgxZGNlMSwgMHg5ZTAzMGRlZiwgMHg4YWYyMjQ3ZiwgMHgwYjVkYmE3YiwgMHhjMDQ3YmEwZiwKLQkweDg2Yjc1ZTZmLCAweGQ1ZmU1Mjc2LCAweDdjMzE3MDVmLCAweDJlNWMwNmI5LCAweDAzOWNmNWJlLCAweDBjYzJlOGY4LAotCTB4ZTZmYTc5ZDEsIDB4MTM1N2Q3YmUsIDB4MzRkYTc1Y2UsIDB4ZThiN2YxZjMsIDB4ODUxYjE3ZjMsIDB4NzQxZTRjNDksCi0JMHgwZTE4Y2MyNSwgMHg5ZTc0ZTBmOCwgMHg5NmZiMGMxZSwgMHhjZmRhYTk4MSwgMHg3OWQ5MGNjMiwgMHg4NWVhMTkzYSwKLQkweDc3NjQzZDcwLCAweGQ1MTdlMjIyLCAweDNmZGViMDQ3LCAweGY1N2QxZTdiLCAweDVlYzc5YjEzLCAweDQ3YjY4YTcyLAotCTB4ZGY1MDdiMTksIDB4MGJjNGZiZjUsIDB4ZTQxOTMzZTksIDB4YmM2YWQyNjgsIDB4ODVhYWU3MDQsIDB4NDBlNWY3ZmUsCi0JMHhiY2MyNTdlOCwgMHg2YzNmYWZkYSwgMHg4MjZlOWEwOCwgMHhlMzc1YmJlZiwgMHg1NTJlNzZkMSwgMHg3ZDc2ODNkNywKLQkweGNlNDQ5ZmUzLCAweDU5NDFmOGE4LCAweDZmYWUwOWQyLCAweDlkOWIzNTU2LCAweGE4OWQ3ZTdhLCAweDMyNWJmYmNiLAotCTB4MGRmZTNhOWQsIDB4NGFmNGEwZmYsIDB4OWMxMjBhMjYsIDB4MmIxY2Q1YmIsIDB4ODM1YjI0YmEsIDB4MWJiN2U3NDAsCi0JMHg4YmVlODZmMCwgMHg2YWY1NjA1ZiwgMHg0N2Q5NzY5NCwgMHg2N2RjMmQzZiwgMHhlMTdkZjNjNywgMHgwNWVmYWU1YSwKLQkweDlmYjQxYjQ5LCAweDcwNzc4NjMzLCAweGQzNGFjZTg1LCAweDQ0OWNlNTFmLCAweDllMzJmOWE0LCAweDM5YWVmNTUzLAotCTB4N2NmMGFiN2IsIDB4OTQxMjZmZmYsIDB4YzhmZjNjZTEsIDB4ZTcwNDU4ZDAsIDB4OWI3ODY1NTMsIDB4NzZmYmExZWMsCi0JMHg4MDkzODg4MSwgMHhiZjIwNWNlZiwgMHg5MWFjZGM3NywgMHgzMjA4YWZlMywgMHg0MWFjYjdhZSwgMHg3OTUxNmU3ZiwKLQkweGYyYTc5NzQ3LCAweDlmM2YyZThlLCAweDNkMDM0YjRjLCAweDkxOTM3ZTZhLCAweGZmMjg1ZThhLCAweDA0M2JjYWU4LAotCTB4ODBiYmY2MjcsIDB4ZmUwNGFkZDQsIDB4Y2RlZjZhN2UsIDB4NzAwYWRjZjcsIDB4YzhhNWIwM2MsIDB4Njg3M2YzNDcsCi0JMHhiZjRhM2Y3MSwgMHg2NDI3Y2Q5NSwgMHgzYWFmOTNhMCwgMHgxZmI0MDU3ZSwgMHg3NTVjNzNkOSwgMHg1MWY0M2Q1ZCwKLQkweDY2OWE4NzBlLCAweDg1ZWExM2MxLCAweGE2NDU5YjlmLCAweDlmNzRhOWQ3LCAweDcyNzUzYTI1LCAweDdlNWM1ZTViLAotCTB4ZjZmZTVjNjQsIDB4YzZkN2ZjYjgsIDB4OTA4YTE0OWYsIDB4ZGVmZGIxNjksIDB4NDRmMmY4MmQsIDB4NDc4MDQzZTAsCi0JMHhmOWJjMzEwOSwgMHhmNDY3ZmRkYSwgMHgzZmU0N2ZlOCwgMHg0NGZlZmZiNSwgMHhmZmI0ZmY4NywgMHhmZGE5ZmZkYiwKLQkweGZmMzFlZTBmLCAweDVmZjViZGM5LCAweDE0OWU4YTZiLCAweGRkN2IxY2UwLCAweGUxOThlNzhjLCAweDdhMDgzOWIwLAotCTB4MTlhYjdmODIsIDB4ZjYzN2RjZjUsIDB4ZDAxNzc1ZmQsIDB4MjZiM2U3NWQsIDB4OGU3YTYyNjIsIDB4OTNiZmYyODAsCi0JMHhkZjc2N2JmNSwgMHgwZmZlYjc1ZiwgMHg4ZDBiM2YyZCwgMHhiNjBiN2Y2OSwgMHhlZjgwZmFkMiwgMHg2NGM4YWRiYiwKLQkweDE4NGU1ZWJhLCAweDJmNWQyODQxLCAweGVmZDFmZDc4LCAweDJlMmYyYTExLCAweDkxZGVlMmIwLCAweDBmNGNiZjA1LAotCTB4NTFmYjAwYWQsIDB4Nzk5ZmNiMmEsIDB4MDgyODQwNzEsIDB4ZWQ5NzllNzYsIDB4MTgwOGMzMTEsIDB4YTNlZDQwZjcsCi0JMHhhZDJmZWUzMCwgMHhhNDJkMWU4NCwgMHhkNjEzNzVmMywgMHhhMzA1ZmNlYiwgMHgyZWU3OGE3ZiwgMHgyNDQxNWU5ZCwKLQkweGU3N2UzNzU3LCAweGI1MjQxYzAyLCAweGUwNTJmODVjLCAweGYwZTIyODQwLCAweGQ1NWVmNGExLCAweDhmMzFlMDkyLAotCTB4ZmJlYWY4MDAsIDB4MmU4YzYwYjksIDB4MGVmZjIzNzYsIDB4NWJjODg5NjYsIDB4NzcyMDU5MjIsIDB4Y2I1M2Q3YzcsCi0JMHg1NTQwZTJmZCwgMHhiNmVjNTgxZSwgMHhmZDUzZWFjNSwgMHgzN2NiM2U3OSwgMHhhMGZkMzE2NiwgMHgwNTJmZWIwZCwKLQkweDk1OGQ0OWZhLCAweGQ1OTdlY2Y3LCAweGNlYzg5MWZmLCAweGFjM2Y1OGRiLCAweDUzZDcyZDdkLCAweDE1NzJlOWUzLAotCTB4ZTZhYWNiYTcsIDB4YTZmNjg2MmYsIDB4N2YzMmY1NWYsIDB4YTY1ZmJlZmMsIDB4YWZkZDA1ODIsIDB4MTBlNmNiZTAsCi0JMHgyM2I1NjE2YywgMHg2YmVmN2E4MiwgMHg2ZDUxMWVkYywgMHg5ZTFlYTA4OSwgMHgzOTA1YzdjNSwgMHg2OTQ0ZjIwZiwKLQkweDhjZWQwOTdmLCAweGY0MDRjYzA3LCAweGVkZDc5YWRkLCAweDlhZGZkODFlLCAweGYzM2Q3ZmZkLCAweDYzYmRmYTMzLAotCTB4ZjgwZGQ1OWYsIDB4MGZmYWYzNTAsIDB4NGM2YmRmNzEsIDB4ZGQwMmQ5OTEsIDB4MmExZWU4YmYsIDB4MWRmYWQyZmYsCi0JMHg0ZDlkN2U3YiwgMHhjNjFkM2Y2OCwgMHg1NWQyNzY0OCwgMHg2MTM1NjVlYywgMHhjYWZjOWM1MywgMHhlMDNlN2RlNiwKLQkweDk4ZjIwMTllLCAweDNiNTQ0N2NhLCAweDUzZmI3YzVhLCAweDQ1Y2ZmMTYyLCAweDQ0MTc5NzBhLCAweDdjODhiMzRmLAotCTB4YTlkZjZmNGIsIDB4NWQzOTUyNWMsIDB4ZmRhYmRlN2IsIDB4YmVjYzRhNTQsIDB4YzQzZjdlYTQsIDB4MWJhODdiZTEsCi0JMHgyZTkzNWZjZSwgMHhmMmU4M2Q2ZCwgMHgwMmViY2MxMCwgMHhmMzgzNGI2OSwgMHgxM2Y5YjZhOCwgMHg0YWVkNDQxOSwKLQkweDJlODEzNTkwLCAweGJlZTAzMmRmLCAweGExMmI5YjEwLCAweDRkNGRmOTM3LCAweDRjYzYwNWNmLCAweDc1ZGU1MDk3LAotCTB4ZmVkZmVhNjMsIDB4YzI4YjIzODEsIDB4NGY4NmZlN2YsIDB4ZTkxY2UxYjIsIDB4MTk5ZTY0M2EsIDB4N2YzOWZkNDIsCi0JMHhiZjE4MzRiYSwgMHhhMGY1ZGNhMywgMHg1MWViOGFjMSwgMHhlM2E0YWJjNywgMHhmNWIxMGJkNSwgMHg3NTVjNmI1ZiwKLQkweGFlZmM3NTNjLCAweGNmYWM5ZjhkLCAweDY5ZjhlMTc0LCAweGI4ZmM3ZTMwLCAweDVjNzUzYjZhLCAweGRlN2M1NzJhLAotCTB4ZDg4Njk3OGQsIDB4NDE0Yjk2ZmUsIDB4NzJjM2NlMTksIDB4OTQ3ZWUxMjIsIDB4MTQ3OTdhOTMsIDB4Y2Q4ODQxZDIsCi0JMHg3NGVkNDk3NywgMHg5N2NhOWY5MCwgMHg0YTVkM2VkYywgMHhmOTAwZjM2NiwgMHg2OTAxZTYwZCwgMHg1ZWYxYzZkNywKLQkweGZiN2ZhMzgwLCAweDNhNTIwNTU0LCAweDMwNWY1YzBmLCAweDIyMWExNmQzLCAweDNjYTBmOWIwLCAweDdkNDE0YzFmLAotCTB4Nzc3YmUyNTcsIDB4ZTlmZGYwMjYsIDB4MTdiODdmNGMsIDB4YjgxZDM5ZmIsIDB4ZjFjNmYzMTMsIDB4MTQzN2M4NzUsCi0JMHg4NWE5ODhkMiwgMHgxZmZkMzE4NCwgMHg4ZjljNDZmMSwgMHg5MDIzOGE4ZCwgMHg5OGY4MWFhNywgMHgwZTExYzM1OSwKLQkweGI2MjQ1OTc5LCAweGU5MTNmODdlLCAweGNkYmYyYjM4LCAweDU3MmRkYWQ3LCAweDMwZTFjNTNkLCAweDU4MDY3OWM1LAotCTB4YmU0N2QwNjYsIDB4MDhhZTVkYTQsIDB4YTNmMzY0Y2MsIDB4YmU1MTI4ZjgsIDB4NTE3Zjg0ZTUsIDB4Yzc5ZDNhNzgsCi0JMHgxMDM4MjZmZiwgMHg0YTdhZDllZiwgMHg1ZDA1Njg0OCwgMHg3YzczMjQ4ZiwgMHhiZTE4NGM5OSwgMHg1ZTI2NWMzNCwKLQkweGRkM2MxZDhkLCAweDA5MGVmOGMwLCAweGU4M2U0MTFlLCAweDVmYzFmZGUwLCAweDk0NTFlNjk0LCAweDI0NTY1NWE3LAotCTB4NzgwMmRmNjQsIDB4MDg5MjcwZTEsIDB4OTFiNzYzOGMsIDB4ZDgwNDc1ODgsIDB4NWFmM2E1NTEsIDB4MWI3OWMxZjksCi0JMHhhOGVjZWJjZCwgMHgzYTc4ZjJmYSwgMHhiMTRiZWQ1MywgMHg3ZTcwZGI3MSwgMHhlMmNmZGZiNCwgMHhhZTJjZmRmYSwKLQkweGQ2YWVjZmRmLCAweGJmMjcwYWFmLCAweDc0MGJkZGIyLCAweDg3YzA1OGZjLCAweGE3OGVhNmZiLCAweDdjMjhmMWYwLAotCTB4MTEzZjUxZjIsIDB4NDI5ZGVlMmQsIDB4ZDYxNmFlMGMsIDB4MjI2MzNkMTUsIDB4YzAzMzdmYjgsIDB4ZjRlMTRjZTgsCi0JMHhlOGUxYzI3OCwgMHhiMjkwNTBhMywgMHhkN2ZlMDA4MSwgMHhmZDM1M2I3MywgMHhlZDM0ZGFmMywgMHg3YTQxNTM4OCwKLQkweDk5YzdjZDVlLCAweGExZmM2MDYxLCAweDllY2ZmMzllLCAweGVlNzhjZGY1LCAweGVlNmZhOGY3LCAweGY3YTViZWFiLAotCTB4ZTZiZWY2ZmEsIDB4M2U3NWVkNjMsIDB4ZDU1Zjk1NWYsIDB4ZmY1ZmZlYmUsIDB4Zjg2OTcxMWUsIDB4NTI4MjkzOTYsCi0JMHgzMGNjYWYyZiwgMHgxMjZiN2VkMCwgMHgxZGJkZmNjZiwgMHgwZjUxNDRiZiwgMHhmN2ViZmE1MSwgMHg0YWY4MDJjYiwKLQkweDU4MzJjN2YxLCAweGEwNTZkZGZmLCAweGYwNWVlN2RmLCAweGQ3NDk5NmM1LCAweDYzYWY5MzMxLCAweDE0ZTk3MzY2LAotCTB4ODYyNjQ3MzgsIDB4NTI2NDk2YTYsIDB4NWFiZmJmM2MsIDB4MTc3MDliNzAsIDB4YmNlOGZmZTksIDB4YmFmM2UzZWUsCi0JMHgzYTQwNTFiZiwgMHgyMTkxN2ZiOCwgMHg2ZWM1ZWFlNCwgMHg0MWZlMGIzNSwgMHgwOWQ1NjdjYiwgMHhkM2QwODhhMSwKLQkweDFiNGIwNTdlLCAweDNlNzYwNjk2LCAweDNiNGY2ZTM2LCAweGVhZjEwNDVjLCAweDZjZGUzZTIxLCAweDBjMWE0YTQyLAotCTB4ODQ1YmVkM2QsIDB4ZWYyOTU3ZTMsIDB4MzVkZWRlMjcsIDB4MmVkMWI4ODcsIDB4ZmZjZjJmMTYsIDB4ZTQ2M2U0MTksCi0JMHg5MWI5MjFjNywgMHg0NmMxYWZlZSwgMHgzMWU0MTZmMSwgMHhmZThkYzU4MywgMHgzMDM3ZmU5MCwgMHhkYzIxNTlmZCwKLQkweDJlNTA0N2NlLCAweGE0MDQwNzIyLCAweDU3M2U4YmZiLCAweGVjNTVkMjQyLCAweDMzMDI1YjMwLCAweDYyZjBjZWQxLAotCTB4ZDlhNjAzNjAsIDB4Y2UwNDNjOGIsIDB4NDEyZjY5NjEsIDB4YTA1YjdmNzksIDB4ZGYwZmJmMWMsIDB4ZDE5NDJlZGIsCi0JMHgxNzZjZTRiYywgMHg2Nzc0ZDNlNiwgMHgxZjdlMDk2MCwgMHgzZmFmYWY1OCwgMHg2NDRiYWY3YywgMHhkNDIyNWNmNSwKLQkweGMzZTAzNjdiLCAweGVhMDVjZjdhLCAweDdjZjViZWQwLCAweDNmZjMwMWEwLCAweGNkMzEwNDBmLCAweDk1ZjM2MjZiLAotCTB4MmZlODJhOTYsIDB4MTFhMDQ1ZmMsIDB4MThmZWQxZWIsIDB4NDE0MjdhZmYsIDB4MmY3YzNjZmUsIDB4NzliNzk3YWIsCi0JMHgyZGQ2MDg0YywgMHg3NzdlNzkzOSwgMHgxOTdmZTYzOSwgMHgzNzdmNjEwOCwgMHhiNWZkZTBlYywgMHhiMzBiOTQxMiwKLQkweGIzYWZkZDE3LCAweGNlOTZiODYzLCAweDAzMGZjOWQxLCAweGU1NzUyYmViLCAweDNmMDYzYWVhLCAweDZmNTc1MGIxLAotCTB4NTg5MGRlZjgsIDB4ZmRmMzAwNTYsIDB4ZTRiYmVlOTEsIDB4ZmZlMDg5MGMsIDB4NWNiY2RmY2IsIDB4M2IwZGNmZDcsCi0JMHgxNWVhZThkNiwgMHhhZTg5ZmVlYywgMHg0ZGRlYzQ3YywgMHg3NWJiYmNiYSwgMHhlZWFmMmViYiwgMHhjYTY1ZjU0ZiwKLQkweDU2NzllOWQ4LCAweDQyMDVmOTc1LCAweDJmZGIzZjI4LCAweGY0Mzc1ZTc5LCAweDA3NWNiNzIyLCAweDc2YmNhMDVlLAotCTB4NjlmODdjMmQsIDB4NWM3MDgzYzAsIDB4NDg0MGY1NDUsIDB4YjNmY2I4MzMsIDB4MzQ5M2VjMWEsIDB4MjdkODM4ZmYsCi0JMHhlY2M4MmZkMSwgMHgzYjczNGY1NCwgMHgzZTQwZGFkNSwgMHhlMDI2N2Y3ZSwgMHhjMGJhZmNjNiwgMHgwYzZmY2MxOCwKLQkweGNmZmNjMjRjLCAweGRmY2M1ZTAyLCAweDA5YmYzMTIzLCAweGYwMGRhOWUwLCAweGRhMzM1OWY0LCAweGU5NjcxMDg3LAotCTB4NTI1YjVkN2YsIDB4OTIzZjIwNDMsIDB4MzJmMWM2OGMsIDB4YTJlNjM3ZTQsIDB4M2Y3MDlhNWQsIDB4YjNhNzA1NDMsCi0JMHg5NTU2ODdiMywgMHg3MTIyYTZhYywgMHgyODhiZWI1NSwgMHg5OTM5NTExZiwgMHg0ZTlhZGM4MCwgMHhlZmQ2YmQ3OSwKLQkweDAzN2YyZDc3LCAweGZlZjU4Mzk1LCAweDA3MjFiOTg3LCAweDI1OGFhZGYwLCAweDBhMjljOTkzLCAweGNmY2RhM2VmLAotCTB4ZmFlOWRhMzksIDB4NDMyYzc2MmIsIDB4M2FiY2JiN2QsIDB4NmQyMGJiMjgsIDB4ZDNmZDA2N2UsIDB4MGRjNGQ1ZTUsCi0JMHhiNmU1NDdjNywgMHg0YjllZmY2ZCwgMHg5OWY1NWRjNywgMHgwZjgwZGE0MCwgMHgwMTA3MjE0YiwgMHg5MWIzNzZiZiwKLQkweGRlNThhZTcyLCAweDAwOWNmY2RjLCAweGQ5M2IzNGYzLCAweGVlOWQ5OGJlLCAweDBhNzllMjA4LCAweGM1NzEwZjcxLAotCTB4NTE5Y2RhZjAsIDB4N2Y2ZTdlODcsIDB4ZTgyNWY0N2EsIDB4M2M4N2RjZGYsIDB4MmVlOTJiZmIsIDB4ZTUwZDFhNDEsCi0JMHg4YTMwYzQ2ZCwgMHhmN2Q4MGNkMSwgMHg3ODU4MmYxZiwgMHhlNzkxZWMwNCwgMHg4MGI3MjAxZiwgMHg2YmYxZTczZiwKLQkweGU3NGVjYmNjLCAweDRlZWRlZDA1LCAweDkzYmIwYjA2LCAweGYzNjM5M2ZiLCAweDFkOTZmZjQyLCAweDliMWI5NWU2LAotCTB4ZTVlODlkOTcsIDB4NTJiY2NkNjIsIDB4NzcyODU0YTQsIDB4NGVjZTc4MGEsIDB4ZjA0ZjE4MjQsIDB4NzlmYTZkZjQsCi0JMHhiMmYzMGQzZCwgMHg0NGFmM2RmNSwgMHhlYmMwMmYzYSwgMHhjNGFmMGU0NCwgMHhmZDQyZjA5ZSwgMHg1ZTBlMzEzNCwKLQkweDZiYzM3ZDg5LCAweDkxMmJjYzI4LCAweGY0MjMwNTc4LCAweGViYzE4MzMzLCAweDc5ZmEyOTk5LCAweDc4MGQ3MzNkLAotCTB4NDE3OWQyYTUsIDB4YWYwZTU0ZmIsIDB4YzJmMDllZDQsIDB4YmMxYzZhN2MsIDB4ZDc4NmZiNTIsIDB4ZDI5Nzk4NTgsCi0JMHgwZGYxZDQ1ZiwgMHg4ZThiNjBjYiwgMHhlZmMwZDgyZiwgMHhmYjU3MjlhNywgMHhkMmNhOGM3MywgMHhmZGRmNGY3ZCwKLQkweDAwNTE1MGIwLCAweGRkNDBkM2YyLCAweDM3ODlhNGY3LCAweDUzMjlmMmU4LCAweDRmZmFlYTQ2LCAweDk3NTYzMTliLAotCTB4NThhMDc4Y2YsIDB4M2I5YWNmOTcsIDB4N2ZiZWQ3NTksIDB4Nzk1ZDM0ZjUsIDB4MTkxMTAzZmEsIDB4Y2I5YThiZjQsCi0JMHhkNmY5ZTNkYiwgMHg3YzJmNTIzZCwgMHgwNzI4Y2JhYiwgMHgzNWQ3Y2VjMSwgMHg0MTYzYzk5YywgMHhiZDYzY2E4MSwKLQkweDNlOGJhZmYwLCAweDViMTdkYjg2LCAweGZmNDM2Zjg3LCAweDM5Nzg5ZmVhLCAweDFmYjQwYmM3LCAweGUwZjAzZDgzLAotCTB4NTVmN2Y0NTAsIDB4MTNkZGZhNzMsIDB4ZjNiZTQ2NjgsIDB4N2M4YzIwNGEsIDB4NmZiNzFmNjgsIDB4ODczODgwMWQsCi0JMHgwMzgxODIzYywgMHhkMzc4ZGY2OCwgMHg4Mjc4ODIxNSwgMHgxOWU2ZGZlYSwgMHhmY2ViM2NlMCwgMHhmYzEzMzI5ZCwKLQkweDhiZTY5ZGFlLCAweGVmYzgyMzBlLCAweDM3NzFkNDUyLCAweGE5NDEwN2NkLCAweDg5MDViODgxLCAweDFmNmRlYTRjLAotCTB4YjdmMzhkZmYsIDB4OWVjZjA3ZTUsIDB4MWQyZjdlODQsIDB4YjQ0Y2JiMzQsIDB4NTZhZjA5ZGYsIDB4ZjlhNzY0M2MsCi0JMHhkZDk4ZjdkYSwgMHhmYmZlMmZhNCwgMHg2M2Y3YzkyYiwgMHg5N2U2MjcwNiwgMHg5M2Y5N2RhOSwgMHg1ZjhlODQxMSwKLQkweDAwZDEzYmI4LCAweDE4MGFhN2ZjLCAweDA3ZjgyYTQ0LCAweDFmNDFiM2RiLCAweDA1ZWM3OTFhLCAweGZkNDdmYzFkLAotCTB4ZmVkZDY1ZjYsIDB4MjMwYjFlMTQsIDB4NDNmNzUyZGYsIDB4N2VlODRmM2QsIDB4ODUzOGMwMzQsIDB4NTZlM2UwN2QsCi0JMHhlMjI1ZGI4OSwgMHgwNjdmNzRmOSwgMHhhN2MwYjNhZiwgMHhiZmU1OTU2OSwgMHg5Njk3ZWNhMywgMHhkYTZjZGZjZiwKLQkweGJmOWNlYjBlLCAweGUwNzFkOTYxLCAweDFjYjc2N2NiLCAweDBiYmVmZTM4LCAweGRiZTNhMWE3LCAweGI5NDM1ZjU0LAotCTB4ZTdmMzZiZjAsIDB4NTNkY2YwN2YsIDB4YmQ3ZTIyZjEsIDB4MTE5Yjk3NTUsIDB4NzBmOWRkMmUsIDB4YmRjZWY2ZWYsCi0JMHg3YjUzZDMxMiwgMHg1N2I3ZDNjMiwgMHgxODU4N2Y0MiwgMHgyZWFhOGVlMywgMHg3YmRmODRiZiwgMHhkNDJlYjFjYSwKLQkweGQ1MzkxNzJmLCAweGZkYzliNWY5LCAweDYwMWQwZjgwLCAweDg1NDVkOTdlLCAweDJmYzgxMmUxLCAweGJkZDEzMTdhLAotCTB4Zjk1ZmFhMDIsIDB4NDY4MzRiZjIsIDB4ZGEzNDVlY2UsIDB4MmFmMGJlOTMsIDB4ZGRlYTkxZjYsIDB4YzVlYTEyMjYsCi0JMHg0NjI1ZDIzZSwgMHg0OGQyOTk2YiwgMHg1NzhhNTBlNSwgMHgyNzY4OTY1ZCwgMHhmNTQ3N2ZlNCwgMHg5ODYzNDlmYSwKLQkweDEyZTIwYWJkLCAweDYyZGFhNTlhLCAweGJmMzZhYzY5LCAweGZhY2E1OGIwLCAweDRkNDJmYWVhLCAweGRmYzdjN2ViLAotCTB4ODE3ZDMxMjcsIDB4NDI3ZjA3ZWEsIDB4ZjVlODE0ZjgsIDB4ZTg0ZjU1MDYsIDB4YWU3MDNkNmIsIDB4MGNlYzNlYTMsCi0JMHhiYmFmNWFmNywgMHg3MjhkNzVkYywgMHhkMmU1MWFlNSwgMHg0NWZmY2EzNSwgMHhjZjI5ZjdlMywgMHg1NWVhNjZiZiwKLQkweGUwNThiZjllLCAweGQwM2UwNzRhLCAweDc2MDk4ZjQ1LCAweGUwNjQ0NjhlLCAweDJkMGQ1NTVmLCAweDFhZGYzZjBjLAotCTB4OGZmOTAwOWQsIDB4N2Q1YWJlYjksIDB4NzJmOGM0MzksIDB4NWNkNzk1ODgsIDB4Nzg4MTA4YTYsIDB4ZDQyNmUyY2EsCi0JMHg0OTE2M2Y3ZSwgMHhlMTdjNmY3OSwgMHgxZmQzMjM1NiwgMHgyMGZmNWE2YiwgMHg3M2NmODBiYiwgMHg3Y2UxYTkzYSwKLQkweDQ1MzJlNmE0LCAweDY5NWY0YTI4LCAweDFiZDYxMzQ2LCAweGZlMjMzNDY2LCAweGVmNDkxOTE1LCAweGFkOGQ5ZjcyLAotCTB4ODAyN2U1NGYsIDB4Y2U0ZmMwOTMsIDB4M2NjNWNjNmUsIDB4ZjVmMjI3ZTUsIDB4OGUxYTkzZjAsIDB4OWY5NTVmNjcsCi0JMHgwMmYzMGFkYywgMHhmM2RhNTRiYywgMHhmNzkwNWUzMCwgMHhkYWVlYmYxMywgMHhhOWMyMDc0NiwgMHhmZTgwY2U5YiwKLQkweGVkN2UwNjZmLCAweDAyYTYzNDI5LCAweGY3MTgwOWRkLCAweDQyNjJkZDU4LCAweGEzNTZlNDM5LCAweDVlZWJlZDhiLAotCTB4YmVhYzRmZTYsIDB4MDNmMThiYmMsIDB4MTdkMzhkODksIDB4NTM4ZmM3YmUsIDB4ZTNhMmQ4ZDUsIDB4MTZmODNkNGIsCi0JMHhmZjhjNTc4ZiwgMHhmMTkxOWY3ZSwgMHhlMjg0OGJlZiwgMHhmYzRmNDE0NywgMHhhZmEyZjE1MCwgMHg1YjJlNmI3ZSwKLQkweGRlZThmMzc0LCAweDc2N2RlZWVmLCAweGM2YzczZWUwLCAweDk1M2M3MDUzLCAweGE0NzBhYTFmLCAweDM4ZGJiOWYwLAotCTB4NjI3YzI3YmEsIDB4Mzg0MTI5NzAsIDB4NDhmYjcyNzYsIDB4Yzk4ZDVmM2MsIDB4YzU1ZWRjMGYsIDB4ODFlM2Q5ZjksCi0JMHhiNWFkZGUzZiwgMHgzOGZiNWFmNywgMHgzODcxNTZjNywgMHhkMTA0MGVhYywgMHhmNTFkMjQyZSwgMHg1YWFlYzEzOCwKLQkweDZmMDc3NjZmLCAweDQ5ZjBjNDM3LCAweGExNjRkOGU2LCAweDlkMDM1ZTYyLCAweDg0OTUyNWE3LCAweDE2YTZkMTk2LAotCTB4ZTdmMDJiOTgsIDB4MmFmODgyNWMsIDB4ZmUxZDI0ZDksIDB4YWYzNDI5YzgsIDB4Mjg4ZGI3ZTMsIDB4MTMwNjliMjcsCi0JMHhlOTU3ZjAwMSwgMHg2MTVmMmZhZiwgMHg2YjNhZjE2NCwgMHg0YjNiYjdmMiwgMHg5MjdmYmNlOSwgMHhiODIwZmJmZiwKLQkweDZkNjAxZGQyLCAweGViZmRhMDMzLCAweDYzYmZhZWEyLCAweGNhNjRkY2QyLCAweGZjZjgxMzJmLCAweDcyZDFiNzljLAotCTB4YzFlNmY4Y2QsIDB4YWRlNDAxNGUsIDB4NzZmYTg5YTQsIDB4MGNiMDcwZjEsIDB4OGFiZmViYTYsIDB4MWM1MjRjZGQsCi0JMHgyMGExOTdlOCwgMHhjMjMxNzY2MiwgMHg2MTIyMzBlNSwgMHgyNzJhZThkYywgMHhhZGNiNDdlMywgMHg5NWQ3YTQwZSwKLQkweDYzZWUyMjM5LCAweGFkYjdiNzEzLCAweGM4MWIzYjA3LCAweGZjODQ4YTUyLCAweGVhYzg5NGNiLCAweGI0NDEwOWNiLAotCTB4NGVjMTk5YTMsIDB4OGE3ZDgwNmIsIDB4ZGE0ZWRlNjAsIDB4ZWIwMDlmMzEsIDB4YjhmMjA0MWUsIDB4NGM5ZmQ3MGIsCi0JMHg2ZjQxMmIyMiwgMHhiZWRmMWFlZiwgMHgxNjRmYmUxOCwgMHhmZTAyY2Y3ZCwgMHgzYjZjY2E1YywgMHhkNTNkODAyOSwKLQkweGY0MGExYmViLCAweDJjMTBjMWJlLCAweGNmZmFkMTc0LCAweDUwODVhMjFhLCAweGZkMTY5YjJmLCAweDM5YTU4OTMxLAotCTB4ZDNlNGQ3MTAsIDB4ZmY5ODdmZjgsIDB4ZjQzNzk2M2IsIDB4OTEyY2U3Y2MsIDB4NTcyMWZjZTIsIDB4NWZjYjZhODYsCi0JMHgwMTJmM2QxMCwgMHgxMjljYTc5ZCwgMHhiYTkwOWU1MCwgMHgwOWJkNGRlMywgMHgyYmY3MGYxMCwgMHhiMTg3OGYyMywKLQkweDJmZTkzZDMxLCAweDhmNGNiOWFkLCAweGVhYzcyMWVkLCAweGY3MDUzN2Y5LCAweDc5YmE2M2Y0LCAweDYzZjJlM2I5LAotCTB4ZDhkMzFmYTYsIDB4Mjc5N2ZkYzMsIDB4MGVjMWY4ZWEsIDB4MWQ4ZDAzYTAsIDB4MTFlNGIwN2QsIDB4YTQzNTVmYzEsCi0JMHhjYWJmN2U5MSwgMHg2ZGQ2YmY3ZSwgMHg2MDFhMGNiZiwgMHhmOGYxZjc3ZSwgMHhiM2Q1MjIwYiwgMHgyMmY3OGYzYywKLQkweGZmNzQ0YmIwLCAweDZjZDQ1NWRmLCAweDU5M2JjYjNkLCAweGY5ODczZmNlLCAweGMwZjliYWYzLCAweGVjMDQ1MzYxLAotCTB4Y2UxZWVmN2IsIDB4ZGNmYjA2MmMsIDB4NTFlOGM2NmIsIDB4M2ZmNWM4MmIsIDB4ZmRjZGYyNjAsIDB4NWEzMzFjZWYsCi0JMHhlZGVmYmE2OSwgMHg0YjkwNzZlZCwgMHg5Y2ZhNzI0ZiwgMHhkODQ2YTI0ZCwgMHgwZjhmMWY0NywgMHhhYWZhZWQ1MywKLQkweDU1Y2E4YzVkLCAweDBmOWJlMDQ2LCAweDdmNzc0MjQ0LCAweDNjMWVlNjk3LCAweDFjMmVmYTE2LCAweDhhZGZiMzk3LAotCTB4OWFkODBhZmUsIDB4YjEyY2VjMmYsIDB4MTZiYjRkMTIsIDB4Njc5NjcxZjcsIDB4NDVlYjM0ZWQsIDB4NTdhZDhlN2MsCi0JMHhkNjY4ZjVjMSwgMHg1YjE1ZmI4YiwgMHg1MGYwODJhZiwgMHhmYzE5ZmJkNywgMHg3ODdjZTY5ZiwgMHgxNGZiZThkYiwKLQkweGRkN2UzM2YwLCAweDViMzQ0YWQ1LCAweGZiZjg4ODFhLCAweDVhOWJjMDU3LCAweDhkMjcyZjgzLCAweDAwYzJlM2FlLAotCTB4NTg1NGQwZGYsIDB4ZjIzMjViNGYsIDB4NmZmOGJlYmYsIDB4ZjQ2NmZjNzcsIDB4Y2RiNzE2MDYsIDB4ZjM4NmE3ZjEsCi0JMHg4NmZiMTVmYiwgMHhlMTFkODAyNiwgMHgyMjBkYWZmYywgMHgyMWU3ZGRjOCwgMHhiZjdlOTIxZSwgMHg4MTM0M2NkOCwKLQkweDczYmVjNTVjLCAweDJlNzVkYjhlLCAweGU4MDk1ZDNhLCAweDkxMWQwOTRmLCAweGJlYzAwYjRiLCAweDUzOWU0NDcxLAotCTB4OWE5ZWIzZDAsIDB4OTFlZDBmMmYsIDB4YjIwZWQxNGIsIDB4YTIzODg2NDcsIDB4MWFmNzFlMWEsIDB4OTkzZjdmZGYsCi0JMHg2Mzc5YzFkMSwgMHgyMGU4MDRiOCwgMHgwNGUwYTJmYSwgMHhlZWQ1NWVmZiwgMHg1ZWQxYzczZCwgMHgyNDcxMjNiMiwKLQkweDcxMGQyZjhiLCAweDA4ZGI0NzNmLCAweDkwOGE5ZmQ4LCAweDE0NmYxZjQxLCAweDkxMDU3MjY2LCAweGIwY2M0NmRhLAotCTB4OGY1MmUxNmIsIDB4NjNmZDM0ZWQsIDB4ZWQ1N2RjZmMsIDB4MzE0OTZjYmYsIDB4YmI3MjA1MzksIDB4ZmEwZjFjZWMsCi0JMHhjMzJiNzA0MywgMHgxZTg5YjJjZiwgMHgzM2Y2OWQ4MywgMHg3ZjQwNDFiNiwgMHhkYmE3MmRlNSwgMHhhY2E5OGUzMSwKLQkweGJmNDA5MTI5LCAweDQ3MmM4ZjY1LCAweDliNmQ1MzNmLCAweGY4MWRhNWFiLCAweDBmNzA0ODY0LCAweDc5NGZlMDIxLAotCTB4MTRjN2YwYjgsIDB4YjI4ZWViMWUsIDB4YzNmYzgwN2QsIDB4YjhmMzJmZTgsIDB4NmZiYjFhNmMsIDB4ZDBhZWIxODcsCi0JMHhhMGYwZjQwOSwgMHg1Y2YyMDNjZCwgMHhiYmNmMGNlOSwgMHgyMDU5NTdlMCwgMHhmZTAwOGU0NSwgMHg3ZDJjZWJhOCwKLQkweDBlMDYzNWMwLCAweGQ5YjBkMjg1LCAweDI0NDJhOTgzLCAweGE1NmJlNTBiLCAweDRkMjA1MTEyLCAweDg2NjQ4OTk3LAotCTB4ZmZjZmViN2MsIDB4NmMyODljYzIsIDB4YTIxNmU5YmQsIDB4ZmViZmVmYjAsIDB4OGRlMWUwMWIsIDB4OGVkZWIyY2QsCi0JMHg2ZmU3ZDYxOSwgMHgwYmU3ZDE2YSwgMHhjZGZjZmEyMywgMHg0ZmYzZTk2ZiwgMHhmNzQ5NDFjMCwgMHgwYzJmYjVmNywKLQkweDM3ZjA4OGM0LCAweDQ3ZmUwMDg1LCAweDg1ODg5OTBmLCAweDk3ZWFhYmFlLCAweDI3MDNkNDY2LCAweDljZjBkOTU0LAotCTB4NzMwNWY4ZjgsIDB4ZGU0N2YyMDgsIDB4ZWMwOGI1N2IsIDB4YjRiZjk1NGIsIDB4NmYwMWI4YjMsIDB4YWYyODI1ZjgsCi0JMHg4MTFmYTk3YSwgMHgwZGZmNzI3MywgMHg4Y2I3YjU0NCwgMHhmZjY0YjkwMCwgMHgzZWQ4MGRkZiwgMHg5ZmVkM2NmYSwKLQkweGUwZjhmZmQ2LCAweDk0N2E1ZmNmLCAweGY5ZjhmZmI2LCAweDEyMTA0OTdlLCAweGRmODdkNTk0LCAweGVmNTlhYWJiLAotCTB4NDFiYTFlMWYsIDB4MjE2MWZmM2YsIDB4NjY0YWJlN2QsIDB4MmYwYmZhZmEsIDB4MTg3ZTJhYzgsIDB4ZGJhNWRmMTgsCi0JMHgxN2Y1YzY5NSwgMHg5MDdmOTY5NywgMHg2ZTIwZmQ0NSwgMHg4MTgyZTQwMCwgMHg0NDU1ZWZiMSwgMHhiZjQ2YWZkMywKLQkweGUxZTljODlmLCAweDAxOWRjMDVjLCAweGM4OGE2M2U3LCAweDg1Y2ZlYWUyLCAweDdhMDM0OGRlLCAweDFiYzc2OGZhLAotCTB4ZTc0ZjQwNjksIDB4NGZkMDRiMDMsIDB4Njc2N2JkNTUsIDB4ZDVlNzljMTIsIDB4ZjBlMWJmY2YsIDB4YWVkZjdhNDAsCi0JMHhkYzgyYzZhNywgMHgwYzIxYmNmNCwgMHhkM2RmYTBmMywgMHhmODQ3N2JlMCwgMHhmNDU5OGU1NywgMHhjOTFkYjlmYiwKLQkweGQxN2RlZjg4LCAweDMwYTg0NTdiLCAweDdjMGU3YjQzLCAweDhlZTg3YzU1LCAweDM4MzI3MmEzLCAweDlkZTMxODFjLAotCTB4MGZiYTVkZmUsIDB4NzgwZDliNTUsIDB4N2MyYWE2NWYsIDB4MDM4Njc3ZjcsIDB4YTIzNjZjMWQsIDB4OGY3YWFiZGQsCi0JMHhiZTNlYTA5MSwgMHg3YmI0NTZlZCwgMHg4MTNlZWQ1NSwgMHg4ZGZlYzc3MSwgMHg1ZTU3MThhNSwgMHg2MWFmMTEyNCwKLQkweDY2NGNiYTI0LCAweDc1YWU3YTQwLCAweGI3ZWMwMzlmLCAweDkyNmU3ZjU1LCAweGVmYzgxNzI1LCAweDc4YTNmZGZhLAotCTB4NTQ4YzcxODAsIDB4MDY5YTI4ZjIsIDB4YjJjZjQ5NGUsIDB4YTliZmYwMjIsIDB4NTdhZTdiZGYsIDB4NWY3ZTNlZGYsCi0JMHg3OGQ1OTE1ZSwgMHhkZGFmOTIyNSwgMHhjOTdhZjhkZiwgMHgzNzY4ODI1MywgMHg1Y2IyNWVhOSwgMHg3ZDUwMGYxNywKLQkweGZlMDY1MWJhLCAweDRhMGUzZjFhLCAweGZhNzM5YTkwLCAweDAxN2YwODM1LCAweGViOTE3ZjNhLCAweDUxY2U1NDM5LAotCTB4YzNjZmEyZTgsIDB4M2NiMTA2YmYsIDB4ODA5NTJiOWMsIDB4MWJmZWIwNDcsIDB4ODUxNzQ0YzgsIDB4MzIzNGQ1NDcsCi0JMHgwMzJjZDIwOSwgMHhlNDJjN2JjMSwgMHhlZmVmZTYxNSwgMHg3YTA0NzNhMCwgMHgyMzdkZDhlOCwgMHg4NGJhYjdkYSwKLQkweGMzM2Y1ZGY2LCAweGI3YzhlZGZlLCAweDA3MTE5YzNhLCAweGI2NTQ0ZGM0LCAweGUyZWUzMTlhLCAweGYyMzIwYmUzLAotCTB4MzdlMTY1OGQsIDB4ZGM2ZjEwMWMsIDB4MTQ1OTkyZjEsIDB4ZjFmNWIwYTksIDB4ODM2MmU0OWUsIDB4MzdlN2YwMDMsCi0JMHg0ZTE5YWVjYywgMHg1NzFkOTYyZSwgMHg3YjlhMmZkMSwgMHgwMGY4Yjc4ZiwgMHhhZmNmNDlmZSwgMHgyNzNkOTRmZiwKLQkweDdkNjc4MDY0LCAweGU5OGI5ZTMyLCAweGJkODU3NWM5LCAweGVkYWFmZGM1LCAweDQyYmFlNDUyLCAweGIzZDNjODE3LAotCTB4NWFlZmRjNmQsIDB4NzJmODBiOWYsIDB4MDZlMTk3ZDEsIDB4NjA1NGE5NzksIDB4ZjQ0ODBlZmQsIDB4ZWQ3ZTg0OWUsCi0JMHg5MjRiZDZjYywgMHgwNzZjMzJkZSwgMHg3MDY1M2E3YywgMHhmODUyNzYyZiwgMHg5NDVlMjVjZCwgMHhmMjhlZTYwYiwKLQkweGE0ODc0MGM5LCAweDk2ZmRjNTllLCAweDUxMjIyNDQ5LCAweGY4MGNiMDM5LCAweGEzY2MwOGVhLCAweDU5YjY1ZWZjLAotCTB4YjlhMmY4YzAsIDB4ZTc3NTE4NGYsIDB4NjllMWM0MDAsIDB4MWE0ZTU3ZDcsIDB4MTI0YWRmYjEsIDB4YjM3Y2I0YzYsCi0JMHhmODAyYmNiZSwgMHhhNTU3ODUzNCwgMHg5NWUwZmNjMiwgMHhmMDcxOGMzYiwgMHg1YTNlYTA4OSwgMHg5MzBiZmJiZCwKLQkweGZkNzUxYzc2LCAweGZhZWEyMTdmLCAweGQxZTU5NzNjLCAweGZkNDVmZDRjLCAweGY3MDEyOWJlLCAweGQ4YzhmZmQ5LAotCTB4ZTY1ZjM4MGMsIDB4ZjhlMGY2OTksIDB4OTg1Y2ZjNTUsIDB4N2U1OGVhNGYsIDB4YTAwYzg5MjIsIDB4ZWJhM2NmZTMsCi0JMHg5ZTYwNzM4MiwgMHg5MThlODI0MiwgMHg5MjMwOWYyYywgMHhkZjkzYzdhZCwgMHgwZWIwM2Q3MywgMHgzNmYyNzdlZCwKLQkweDU2YWFhZmRiLCAweGQ2MWMzMjIxLCAweGYyMGRlNzQzLCAweDViNDdhYzM3LCAweGIzYWY5YWFmLCAweGFlZmQzNzdhLAotCTB4NzY5MGZmYjUsIDB4ZjdiYjVmYWMsIDB4NWZhZTkzMGIsIDB4ZTdhMGNmNmUsIDB4N2RkMzMxMTAsIDB4MzdjZGQ3NTgsCi0JMHg3MWI0YzM0MywgMHhlMWJkYWEyMywgMHhiYWM3ODcyNCwgMHgwMjY3ZTdiYiwgMHg3MjBkM2RiZCwgMHhkODA3MTY1OCwKLQkweDgxMjdhYTE4LCAweDAzMmM2NzZmLCAweGI3Yzc0MmFjLCAweGM3OWRkY2RjLCAweDJjZTVhMmYyLCAweDc2YjRjODNmLAotCTB4NTRmZTg2YzIsIDB4MzJmYTMxMGYsIDB4MzMyOWFlNDEsIDB4Njg0MzhmNzgsIDB4MzdjNTRlY2UsIDB4MjljNzQ0ZDQsCi0JMHgxMmQ5M2Q5MywgMHgxZTRmNzVmMiwgMHhiMDk2NTlkYSwgMHg2NDc0ZmZmNSwgMHg1ZWJhYjBkZCwgMHhiZjc1MThlNCwKLQkweDA4ZTEwYmQ2LCAweDY0MWQ0M2M2LCAweGJkN2M0MWYyLCAweDRmYzYyNjcxLCAweDFmYjY4ZTEyLCAweGRkMTczZTA3LAotCTB4NWExMWU1NDcsIDB4YzFmMGEzNmYsIDB4NmRlM2IwNzEsIDB4NTY0NWNiYmMsIDB4ZGQwNjdjZDAsIDB4MWI3N2UwMWYsCi0JMHg1MDJmNTIwNSwgMHg0YmRhOGNiOCwgMHhhM2QwMWJlNSwgMHhkNDM3OGVmNywgMHg0Y2RkNzBkOCwgMHg2ZGQ2YjA2ZSwKLQkweGZhNDdmYjAzLCAweDAxMjNmOTQzLCAweGI5MzBlZjVmLCAweGRkNzQxZTcwLCAweGU1YTM0ZDBmLCAweGI5ODNjYjE5LAotCTB4Mzg0YmZmNjAsIDB4MGVkZTZhMWEsIDB4OGI3MGVmZTcsIDB4YTc0YmM2MWIsIDB4NjEyN2IxYjAsIDB4N2ZlNzAwZGEsCi0JMHgwMjNjMjkwNiwgMHhjNTMxOTU3NCwgMHg4OGVjMTIzNSwgMHhmZmFjMWNlYiwgMHhkMGYwZDE1NCwgMHg0NjUzOTA1NCwKLQkweDI4ZDI3Y2IyLCAweGZiOGVkOWUyLCAweDQ5YzcxNmIzLCAweDMwNDk5MTM3LCAweGYyMGVmODNmLCAweGIzZDZlZDE3LAotCTB4YzQzNDkxMDcsIDB4NWQ0Mjc1ZjYsIDB4M2U5ZjhjMjEsIDB4NzA2NGE1ODgsIDB4OGJjYmNhMDYsIDB4OWVhYTdjYjgsCi0JMHhmN2Y1OWY2ZiwgMHhlYTNmMDAyNCwgMHgzZjAxZjdlMiwgMHgyMDEyNzliMywgMHgxYjFjOGM4ZSwgMHg5ZmVkNmEyNiwKLQkweDAzNDVmZDZhLCAweGRmNTBlOTNjLCAweGMxMjQ1OTdmLCAweDI4N2ZlNDY0LCAweDVlNjdmYTVmLCAweGZmODU3YjQyLAotCTB4MWE4MjRjYjIsIDB4OWNiZmVjM2UsIDB4ZDc3N2NmYTQsIDB4YjFmNmMzNGIsIDB4NGExMjE2N2EsIDB4ODM5ZWFkZWUsCi0JMHgxMWZkNzQ4NCwgMHg3ZjJkN2Y3ZCwgMHhlYzI0ZjVlNSwgMHg3NzY5OGM4ZiwgMHhlOWQ5MWM4MCwgMHhkYjNlNDc2YSwKLQkweDQ2ODMxMjE1LCAweDExNzRmN2FhLCAweDlkYzFmMTgyLCAweDZkNWRmNjRlLCAweDI2NTMzOWRmLCAweGEyNjc5NDExLAotCTB4NDA0NzRmZDgsIDB4YjI2MzA4ODEsIDB4ZjQxM2Y1YTksIDB4MWViNzU2MWYsIDB4MzVlZjgxMjksIDB4N2NlMzBkYTQsCi0JMHgxMjU2YzI2YiwgMHhkYmZmYzVlYywgMHg5NzBiMDAxMSwgMHgzZjI5ZmNlNiwgMHhmZGQ0ZWQ4YSwgMHg5MDM3YjU4OCwKLQkweGIzOGZkNjkwLCAweDUyMjIyZGEyLCAweGVhYjc1YTVhLCAweGMwMGEyYmQ3LCAweGQzOTQ3NzA0LCAweDJiMzdmMDRkLAotCTB4NzJkMWI3M2MsIDB4MjNhM2E4ODMsIDB4YmE2ZWE4ZWIsIDB4Mjc1ZjMyNDIsIDB4MDYxZDE4MWEsIDB4ZTI2MmJiN2YsCi0JMHhhZjNjOWE2ZCwgMHhmODNlZGRkZiwgMHgyOTEzMDliYiwgMHg2MDJhOGRkZCwgMHhmNTVkOWZlZCwgMHg5NzJjNmZlZiwKLQkweGFlODA3YzYyLCAweGQ3NmJkYjNmLCAweGJjYjg5NWU0LCAweDZiODdlNjhkLCAweGYyYjhjZWYyLCAweDhjZjJiODk0LAotCTB4NTY3ZjdjYjgsIDB4YzkxZWMzYmYsIDB4MWNhOWI4MzYsIDB4MTNmN2VhYjcsIDB4M2E0ZmNhMjQsIDB4YTliMzIzMzIsCi0JMHgzMDllNGYwNCwgMHgyMjYxMzNiYywgMHg2YThmOGRjNCwgMHg1YTc5YzBmMywgMHg1OWI4MmFkYiwgMHg1ZjgzMGZiOCwKLQkweGI5ZTE5YmFkLCAweDgzMmVkZGNkLCAweGFhM2FkZjdmLCAweDc2ODhiOGVkLCAweDcyMDljMTJhLCAweDI3YmMyZGE2LAotCTB4ZTc2ODc5ODIsIDB4MzMwYmI0ZDIsIDB4ZmMzYWE0ZmQsIDB4YjNlYmI2MDEsIDB4ZTkxMTdjZmYsIDB4ODdmZTRkN2MsCi0JMHg3NjVhZWY1OCwgMHg4ZmFmOTI3NCwgMHg2ZTJiZWY4MywgMHgzYmUwYjc3MCwgMHg5MmJkMDI2YSwgMHg3N2JmOTE0NCwKLQkweDk5MmZmOWVjLCAweDdjNjMzZmRkLCAweGYzZDMzM2FiLCAweDQzYWRmMjA2LCAweGI3Y2I1MzgyLCAweGE0MWYzMGZjLAotCTB4MGU1YzY1ZTcsIDB4OTM1YzcwNjIsIDB4Yjg4NjUxN2YsIDB4Yjc4N2Y3OGQsIDB4YTljNzAzYmUsIDB4Y2IyN2QxNzUsCi0JMHg3M2ZiMWU0MCwgMHgyMGQxZDljZCwgMHgxZjJkODA5ZiwgMHgyMTdhZjRmOCwgMHhkNmYxODY2NCwgMHg3ODYxYTE4YiwKLQkweGM4NjZhZGZmLCAweDdhMDVkMTExLCAweGYwMTZmYjdjLCAweDc1NTc0NDE3LCAweGRhNGZmYzIyLCAweDI4NDAwN2RiLAotCTB4OTc1NWM1ZmIsIDB4N2RiNTNlNTksIDB4NWRjN2VjMGIsIDB4MDA5YjdmMGQsIDB4MGU0ZjFlZjcsIDB4ZDIyMDFmNjgsCi0JMHg4MzU1YTVmYywgMHg0ODdlNjIyNywgMHhmN2M4MTZmYiwgMHgzZjJjMWM1MywgMHg4MTgwN2RiYywgMHgwOTIxY2ZiNiwKLQkweDc2ZmY2MTEzLCAweDhhYmYxOTNhLCAweDM5NjdiZmU3LCAweGY3ZTc1NWZmLCAweDI5Y2Y3ZjRlLCAweDY2YTkwYjgwLAotCTB4MWMwYjdkZmMsIDB4ZWQ5Zjk0Y2YsIDB4NzNiNTM4ZWMsIDB4OWQ5ZmRkMTcsIDB4OWZjOGNjNGIsIDB4MTBiYzY0MjksCi0JMHhlMWNlOTM4ZiwgMHhmMjBlZTc4YywgMHg4ZGY1MDk1MywgMHg5MjZiMzg0YywgMHhjZjY4ZmI2MiwgMHg3ZjIxNzM2ZSwKLQkweDBmNmVhMWJlLCAweGIzZTlkNzljLCAweGZmM2Y5MDBiLCAweGFjOTllYzg3LCAweGZkZDJjNmE0LCAweGZhZDI5YTM2LAotCTB4ZTMyNzE1OTMsIDB4ZWQxMTA2YTcsIDB4ZGE4ZmU5OWUsIDB4ZGE3OGZlNTEsIDB4MDU2MWQ2Y2MsIDB4MWI1MzRhZmUsCi0JMHg3YzJiOGZkZiwgMHg0YzRjNTcxZCwgMHhkZjI0YjkxZiwgMHhkYWNkZmQ4MSwgMHg5NTBjZjk0NiwgMHgyNDA5NjZkYiwKLQkweDMwOWM4MGE4LCAweDgxMzk0NjU1LCAweDMzNDFhM2FhLCAweGRjNTUzN2NkLCAweGRkZDI3MTgwLCAweDMzNWFkMmZhLAotCTB4ZDBhOWJmY2UsIDB4MjY3NjA5OTMsIDB4OWE2OTNmNTUsIDB4ZDQ0Y2M5ZWEsIDB4ZGI0ZDY1YzgsIDB4NjdjYWI5NTgsCi0JMHg1ZTY5NzI5YiwgMHgxMjEwMmU3MywgMHhhZDk3NzljNiwgMHhiYjQyNGRjZiwgMHhmM2VlYzRiYywgMHg3NDNiNWZhYywKLQkweDU3M2MxYWZiLCAweDliM2FlMWE3LCAweDY4NjY0MzEyLCAweDJmZmZjMmE3LCAweGYwYzkzZGZkLCAweGJlZjU3ZWZkLAotCTB4NzUwN2RmMjgsIDB4ZDMwYWM5ZGMsIDB4ZWMwY2NhODcsIDB4ZjE1MjdlM2MsIDB4NDRjYjNhZTEsIDB4MzlhMjA4Y2YsCi0JMHg0ZDAzMjc5ZiwgMHhhNDQ4ZTA2OCwgMHhmZGYwZDFmNiwgMHg4Yzc4NDNmZiwgMHhhM2ZkZjU4NiwgMHhmMWRhZjhmMCwKLQkweDg0ZmM3MWM1LCAweGEwYmI4ZGYyLCAweDY3MjU5YWZmLCAweGYzMGNkYzc5LCAweDVkZjBhOWJmLCAweGU5OGM0NDJmLAotCTB4NzdiMDZmOGMsIDB4ZDA3N2U4MDQsIDB4M2U0YzBhYmIsIDB4ZTc1M2I0MmYsIDB4MWFkMWZiM2QsIDB4ZjVkNGQ3OTQsCi0JMHg2MDc4N2Y1OCwgMHg5ZDk5ZGMxMiwgMHhjNWZlNzk1ZCwgMHhlY2ZkYjQ5ZCwgMHhmNzc1NTkxZiwgMHhhNGJlNTU4MSwKLQkweGFlNDZiZGUyLCAweDExZWVjNjE4LCAweDRmYmIyOWFiLCAweGU4MGE3MjA4LCAweDNhZWFlZDc3LCAweGM0MjY0ZjI0LAotCTB4MThhZmFmOGIsIDB4NjA5ZTgyMjgsIDB4ODI4ZmY4MDUsIDB4Yjc0MzJlZmIsIDB4OWMxODEzMmYsIDB4OWNhYTllNjAsCi0JMHgwOGJiODg0MywgMHgyOTUzYjNkNiwgMHhmOTdkODZhZSwgMHhhMDVlMjk1MiwgMHhmMDcxYjJhNCwgMHhhNzVlMDk3YywKLQkweDAzZDc4ZGZkLCAweDdhZWFlNzc5LCAweGZjNzI2MTBkLCAweGVmYTYwNGE2LCAweGQwZjEwMjQ5LCAweDhkZmZjZGY5LAotCTB4ODExYWRiNzEsIDB4MTNlMjFmMDMsIDB4YjBiYjMwYjYsIDB4YzM1Nzk3MmEsIDB4NzlmNzRlZTksIDB4ZTdlMzk3M2UsCi0JMHhjMTdlMzk3MywgMHgxZGVlYTMwNiwgMHgzZTkwOGE4MiwgMHhiY2Q4OWE0ZiwgMHg1MjNlYjlhYSwgMHg5ZmIwZGE0NSwKLQkweGJkN2Q2NmFhLCAweGQ4MmZhYTZhLCAweDgzYmY3MDFkLCAweDg2OTBmMWNhLCAweGY5ZWFlNWY1LCAweGMyZjk2ZmUxLAotCTB4YTBmNzdmYTQsIDB4YTM2MWY3MTEsIDB4MDlmMWM5OTksIDB4OGZiOTNkMjMsIDB4YjVmYzdmMDEsIDB4ZmZjZGU1MTEsCi0JMHhjMmEyZmJlNiwgMHhmMTYyNDA2MSwgMHg4YjVmMDBjMywgMHg5ZmY4NDQ0MSwgMHhlYzM5NDkxNiwgMHg5NWMwNjc2ZiwKLQkweDkzMzA3ODMxLCAweDAyZjVhNzZmLCAweDlhYWYzNWJmLCAweDM2MWYwMWNiLCAweGZmY2VhMjJiLCAweDY0NjI4Zjc4LAotCTB4Y2NlNWMzN2UsIDB4NGZiZDFlOWUsIDB4YzgxMzNiNDYsIDB4ZmZiZDVhYzEsIDB4ZTdkNTQ1MzksIDB4MTBmZjcyZDcsCi0JMHgxMjlhMzNkMywgMHhhOWJlZGM5OSwgMHhlOTA3NzA0OSwgMHgyYjRkMjc3YywgMHg1ZmY4MDBhZiwgMHhjMDIxNjk5YywKLQkweDNkNzJlNzZhLCAweDc0NmE0MmYzLCAweGZhYWRjMDMxLCAweDc2YmI0YmJlLCAweDdjMzdkMDExLCAweDc0YmUwMjJmLAotCTB4YzdlY2QxOGEsIDB4OTY3ZmQxNzIsIDB4MGZiM2ZlMDAsIDB4N2NlZjhjNDMsIDB4ZmRjMGViNDgsIDB4OWRhYjYwOTgsCi0JMHg0ZjEzNTVjNSwgMHhlZmRhM2NlNiwgMHg2ZWU5ZDVhOSwgMHhlMzUzM2I4OCwgMHg2NDFkNGU0OSwgMHg0NmY1Y2JmZSwKLQkweGYzZGMwOTZmLCAweGZhNjNlZTBkLCAweDU3NDY4N2MzLCAweGViMjNkYzM2LCAweGQwMTFjYWYyLCAweGQ3NDRjYmJiLAotCTB4N2IyMDI1ZDYsIDB4YWFmNmI2MWQsIDB4NWE5ZmY4NWYsIDB4ZmVhZTcxODAsIDB4MjNkZmE1Y2EsIDB4ZmRkM2QxNTcsCi0JMHhiZDNkN2EyZCwgMHg2MWIzNDQ5MywgMHgwN2NhOWI1ZCwgMHhmYzc0MjM4NiwgMHg2ZTYxZDZjZSwgMHg0MGNhZDY2NiwKLQkweDkzYWQ0YmUzLCAweGQ1NGQzZGQ1LCAweDcxODdiYzNhLCAweGJkZjA4OGM4LCAweGZmOTFmZWRlLCAweGYwZmM3ZWQxLAotCTB4Njg0YmYwNmYsIDB4ZWY2ODFmZWQsIDB4N2E0M2RiZDAsIDB4ZmFiZWQ5ZTYsIDB4N2U2NzRkNWYsIDB4ZWZmMmI4OTIsCi0JMHhiMDkzYmVjYiwgMHhmOTNmYjUwZiwgMHgwODI1YzllYiwgMHgzN2QyMjhkNywgMHgzZTdhNjQ2OSwgMHhhMTQ0Nzc5ZCwKLQkweGI0NmY0ZmVkLCAweGRkYTc3ZjIzLCAweGY5ZmRiZGUxLCAweGJlMDUzNjU0LCAweGQxOTRiMzkzLCAweGY0ODZmNTViLAotCTB4NDgzNzYwNmQsIDB4NTdlYWM4OWMsIDB4NzY4YTE4NmYsIDB4ZmVkY2IxODQsIDB4ZWE0MGRmM2IsIDB4MTMzYmEwMTUsCi0JMHhhMTM5MDA2OSwgMHg2OTZhZTRjYywgMHg5YzYzYzRkNywgMHg1YmQyNjdiOSwgMHhiY2I0NWY0MCwgMHgwZGFiY2ExZSwKLQkweDgyZmNkZWVjLCAweDhkYTJiNmI2LCAweGVjYzIyZjMwLCAweDAyY2RlNWMzLCAweDc4YzUzODgxLCAweGRhZDExNWZiLAotCTB4MzU2MGE4ODksIDB4ODBjZGJjMzYsIDB4NTVkODNmNGEsIDB4NTVkZjYzZjIsIDB4YmY3OWVlM2EsIDB4M2QyNmVmZTUsCi0JMHhiZjJhODJkYywgMHg3YWJkMzFmMSwgMHg5ZmY4M2E3MCwgMHg5MDFjN2E1NCwgMHg0OGNjOTVlOCwgMHhlMDc0YWUwNywKLQkweDNlMGM2N2E3LCAweGUwMmM5N2I0LCAweGI4MmIxYmY3LCAweDQ3OGVhZjllLCAweDNiZTMwZGY5LCAweDI4MWZiNzBhLAotCTB4MmQ3MGFlY2MsIDB4NDdkYWEzZmUsIDB4MGY0MDNiNTQsIDB4ZjI5NGIzYmUsIDB4ZjM3ZDExOWQsIDB4MGFlYTQyMWQsCi0JMHg4MGY4NGVkMSwgMHhkMjc0MGRjZCwgMHhmZTcwZmY4MywgMHhiYTUzZWVhNiwgMHhkOGQwZjhjYywgMHhkMTAzMjFhNSwKLQkweDY0OTdiOWM4LCAweGNkMzY5N2NmLCAweGEzZmZlMmI5LCAweDgyNmViOGEyLCAweGI0MGM5N2JjLCAweGJlMzY1YzgxLAotCTB4ZjcwYTkxZDIsIDB4Y2ViZjk4ZGMsIDB4ZGIzYzQ2ZGEsIDB4NjYyZGY3ZTgsIDB4ZmVkMDJmMmEsIDB4OTBiODcxZWUsCi0JMHgwY2M4NjQ3ZiwgMHg5NzkyOGMwZiwgMHhhMmYyZDIxNCwgMHhmYjk0MzZlMiwgMHgwOWM0YTlhMywgMHhjNmRlY2VmYywKLQkweGE3NjJkZmZhLCAweDNiNDI0NmVkLCAweGRiYmE3N2M2LCAweGEyZGVhNDJiLCAweDJhZmM1ZjY5LCAweGU5NzI1ZmJiLAotCTB4ZGZlZDFkYTAsIDB4NzM0YjEyOTcsIDB4YmU3NDhmODAsIDB4YTc3ZTQ3NmEsIDB4YmE1M2JiZmEsIDB4ODk1OGQ1ZGYsCi0JMHgxZTFkYjllYiwgMHhkNTg1NGE0NSwgMHgzZDAzZjcxNSwgMHhmYjkzMDg4YiwgMHhkODYyNzdiMSwgMHhmNDYzNThiOSwKLQkweGU5ZmYwMGU1LCAweDk2NDRkNzc4LCAweGUwOGI3ZWQzLCAweGJjNTRhMjMxLCAweGVmMDI1N2I3LCAweDJlYmVkNTM2LAotCTB4Y2E0ODY0MDAsIDB4ODIxNjc3MmIsIDB4NTg2NGQ5MWQsIDB4Zjc0MjhmNzQsIDB4MzRiMGM0YTcsIDB4NTc2ZDA4ZmEsCi0JMHgwNGU2YzAzMywgMHg5Y2M0YzI5MywgMHg3ZGU3ZmQzZiwgMHg1ZWQxZmYzNCwgMHhhYmE3ZGUyMywgMHgyNjYxMzlkOCwKLQkweGEyZmFkMWQ4LCAweGEyZmJmOGZmLCAweDc5NzViZjc0LCAweGJjYmFiZmJhLCAweGJmOWY0NWJmLCAweDgxNGY2Y2Q3LAotCTB4MzY5NDJjZmIsIDB4ZDhjZjcwZGQsIDB4YjczYmFhNjQsIDB4ZjRkN2NlOGQsIDB4MzU0ZGM5OWEsIDB4ZDliMzcyMTEsCi0JMHhlODE5ODBmNywgMHgwNzFlOGM1ZCwgMHgzYTcyOTk3OCwgMHhlMTdjODA0NiwgMHhjMDQ0ZmQ2ZiwgMHg1NTkyNTBmNywKLQkweDA3MmY4MGZmLCAweDk5OTJlN2U4LCAweGYzZWZiM2MxLCAweDllZWMyODliLCAweDY5Njc1NTFkLCAweGMzNmQ5NGRhLAotCTB4NTk3YTY4ZmQsIDB4NmY4YzA5MDgsIDB4MDQ1ZDE5NGYsIDB4ZjdlMTMwZTcsIDB4OTcxODNjNGYsIDB4MjY1MzY3ZTUsCi0JMHg0Y2ZlZmM0ZCwgMHg2ODQzN2VkMywgMHhkZWQ3OWMxOSwgMHg1YzI3YmM3MiwgMHg4NTZiY2Y0YiwgMHhiODcxNzdlNiwKLQkweDhiNDdkNTU3LCAweDUzNDQ1ZWUwLCAweDMwNjFhNGQyLCAweGM5MGJlOTJmLCAweDBhYmJmYjBiLCAweDE3YzhkMTNhLAotCTB4M2ZlMmNkY2IsIDB4MTE1YTNmNzYsIDB4MmQ4OWVmZTIsIDB4N2I4NzNhMDcsIDB4ZjhlOWUzOWIsIDB4MGNmOGJlZTMsCi0JMHhlODUzMmVlMywgMHhjOWNmYzAzMCwgMHhlZTM3NjY1NiwgMHhmZGEyMTY1MiwgMHg0M2FlNmZkYSwgMHg0NGI4ZDViZiwKLQkweDYwYjVkNzA5LCAweGEwMjQyZDgwLCAweDlmMjA5OTFkLCAweDM5MzIyNjBjLCAweGNiNDE2MTFhLCAweGZmYjk4NmNmLAotCTB4MGI0ZTBlM2EsIDB4OWFiOTMwYjYsIDB4YmJlMDMzZWMsIDB4YzE0MDBiMzEsIDB4ZDVmYmI5MDIsIDB4NzAwZjE4YTksCi0JMHhjOWE3ZjM3NiwgMHg1YjZlMDFlMywgMHhiYjAyNzBlZiwgMHhjY2JkZjVhMiwgMHg4MzY5ZTc4ZiwgMHhhZGE0YmJmNywKLQkweGJkMDE3MmRmLCAweDYyNjJkYjFmLCAweDc2NTQ0OGYzLCAweGZiOGY3ZWMxLCAweDgzNzI4MGMyLCAweGM4MWYxMjI0LAotCTB4NjdiMjRkMGQsIDB4NmI5MWQwMTgsIDB4ODAxMmNlZjMsIDB4NTlhOWQ5ZWIsIDB4NTE3ZmQ2MjIsIDB4MzcxODRlMjAsCi0JMHg3YzFhNDk3MSwgMHg1ZTQ4MjA1ZiwgMHhmZGZhM2Y0NiwgMHhhMjZiZjc1MywgMHgwNWM5OTkzOSwgMHg3Zjc4MmI4NiwKLQkweDRkYjRkOGZhLCAweDNlM2RjZjE4LCAweGM2ZjdmMzY3LCAweDhkM2I3ZjQyLCAweGQyODQ2Zjc4LCAweDNlNzAzZGM3LAotCTB4YzBmNWQwZDQsIDB4YmNiNjZhN2MsIDB4YjM4Y2M2OTMsIDB4NjI4YTQ0ODQsIDB4YTNmY2RiZWYsIDB4YWFiMjYwNzQsCi0JMHgwNzk3NWM3OCwgMHhmMmMxNmM3YywgMHgzYmVkM2NiYSwgMHg3OGYwM2QxZSwgMHgxYjliYTUzMywgMHgxNjYwNzhhOSwKLQkweGFmMjA5N2M4LCAweDM1ZWE0ZmY3LCAweDFlNWUyOTNlLCAweGM1NGFmNTU1LCAweDZkM2IzYzRkLCAweDA4ZjNkNzY4LAotCTB4MzI5ZDNmOTQsIDB4NGU0N2M4NGIsIDB4MjdhYzY1OTksIDB4ZjM2MTZkZmQsIDB4M2YxMDVjZWYsIDB4ZDAyZGZiZWIsCi0JMHg2MGYxMGU1ZiwgMHhlYTJiODUzYywgMHgwZWUyYTYyYywgMHg2OWNmMDA4MCwgMHg5ZmM1OTliMiwgMHhmNTFmNzNkMSwKLQkweDQ0YTlmNWEwLCAweGZmZDFhZWY3LCAweDNhNTFmZGU1LCAweGIyZjAwNzdlLCAweGM3MmJkZGYzLCAweGQ5YjVhZTAxLAotCTB4OGY0MDIzMWQsIDB4MGNmZTVmZjAsIDB4NTZiNjVlZWQsIDB4YjliNGY3NjYsIDB4MGQ5ZTY0YmQsIDB4OTkyYTdiZTgsCi0JMHg4M2UzMTA1YiwgMHhjZmUzMzc3ZSwgMHhkMWJhZWJmMSwgMHg2M2YxNjQ2MiwgMHhjN2VjNTEyOSwgMHhkN2Y0NjU2YSwKLQkweDRkZjZmNWM0LCAweGY3YTgyYzRiLCAweDk5MDk0YTZkLCAweDk1NWZkMjYxLCAweDU3M2Y1NGNlLCAweDJhNjNiNzA1LAotCTB4N2I0MTVlM2IsIDB4NGUwOTA5MGUsIDB4MmUyOTZiZjAsIDB4ZTU1ZDI3NDYsIDB4M2ZjZjExYjMsIDB4ODgyODMxZGEsCi0JMHhkMWUzYmRmOSwgMHhmMWRiNjVhZiwgMHg4MDQwYzM1YywgMHg4M2YzMGI1MywgMHgwZWVkZGNkOSwgMHgzYjQ3ZGY1OCwKLQkweDdkNjAzOTRlLCAweGI4MGMzYmU1LCAweDI3ZDBmMmVlLCAweDYyMGFmMzY5LCAweGYwNDliZDc0LCAweGZhZjNjMTVkLAotCTB4NDZiNTlkMGEsIDB4Yzc2OGZiNGYsIDB4NmQ3MzY5YTcsIDB4NzMwYTRmNGMsIDB4NzA2ZjQxN2IsIDB4MmYxOTUyZjksCi0JMHhjNjVjMjg1OCwgMHg3NTFkOTgzOSwgMHhmN2M0NTNkYywgMHgzODZkZTIzMiwgMHg0ZjZmNmI1YiwgMHg2YWYzYjBiNSwKLQkweDBkYzk4NTljLCAweDdhZDBkNmUzLCAweDdjNjE4Nzg4LCAweDFlYmUyOWNmLCAweDU3YTMyMDc5LCAweGY4ZmM2ZDNiLAotCTB4YjQ0NDFiZTcsIDB4MjZhYzU2YTMsIDB4ZmYzZDY3NjgsIDB4ZjQ2YzgxZmMsIDB4OTAzY2VlNmIsIDB4NWY1MzQ3M2QsCi0JMHg2ZjhjM2Y4ZCwgMHhmMTYxNmQ5ZiwgMHhhN2YxYTQxZiwgMHhlMjBkMjUxZSwgMHg3Mzc4ZDgzZCwgMHgyMDA3Y2FiYywKLQkweDNiODY5MDlmLCAweDFlMzhmYTNjLCAweGJkNGQxMzBhLCAweGE3YzQwZGFlLCAweGVmZDU4YTBjLCAweDAxZGNmZjJhLAotCTB4NWE3MzZhNzEsIDB4YjQxMzExMGQsIDB4YTcwNjc4ZjcsIDB4ZWJjYmJjODAsIDB4MmY3N2Y3YzcsIDB4NDVhMTIzYzcsCi0JMHg1YWM5M2Q0MCwgMHhmYTNlNDUxMCwgMHgxMTM0ZjliNSwgMHg0ZDNlNWE2YywgMHhlMzI0ZjdmNywgMHhmMGUzZDFkMywKLQkweDE5ZDgxM2VlLCAweDZiOTMzY2UxLCAweGY1YzgxMjZkLCAweDVlMTgyYjY5LCAweGEyMjA3ZjQ1LCAweGM0MzVkZGZjLAotCTB4Zjk1MjJmNTIsIDB4YjBjYWNlNDUsIDB4YjE0YWZmMDEsIDB4MDFhY2I4YjAsIDB4YmY1OGY5NTksIDB4MWE2NzllZmIsCi0JMHg0OTk5ZTdiYiwgMHg4YTdlMzBlYSwgMHgxZjUxZGIzOCwgMHgzODg2M2ZlZSwgMHg1ODBkMGU0MSwgMHg0MTkxMWM5OCwKLQkweDgzMGMxYmRjLCAweDdhM2M5ODIwLCAweGYxMDE1MWVhLCAweDhlN2MwM2M0LCAweGE5ZWEwYTg4LCAweDNmMTg1ZjE0LAotCTB4ZmEzM2U0NzcsIDB4Zjk1MmYwZTYsIDB4YTAyYWQwYTgsIDB4OTJkYjM3MWMsIDB4ODYyYmY1YzgsIDB4YTNjMmQ3NTcsCi0JMHgzYzYyZmZkOSwgMHg3NzhlYTA1YSwgMHgxMmU0NzhiZCwgMHg1YmUxZjVjOCwgMHgxZmMyNzYxZiwgMHg4NDVmYjgyOCwKLQkweGYwYTc3MWZiLCAweDM2MjhhNjdlLCAweGI4ODBhZjdjLCAweGYxZGQxZDhkLCAweGNkOWZiNDY0LCAweGZkMDRkZTU0LAotCTB4ZjYyYmI1NDEsIDB4NjJlYTUxNWIsIDB4NzZiNmUwN2UsIDB4ZGZhY2U3OTAsIDB4N2M1Y2YwNTIsIDB4MDVjYjZjNWMsCi0JMHhjZWRlM2E3OSwgMHgxMTM2Nzc0OCwgMHg1MzM4MDFjZSwgMHgxZjk0YmQ2MSwgMHg1Nzk3ZmIzMCwgMHg5ZDcxZmJjNiwKLQkweGUyMWI4ZjAxLCAweDQ0ODgwNjA3LCAweGNmZGYzZTAyLCAweDM1ZWY4YjkwLCAweGRkMzgwYmY2LCAweDU5ZGMxODJiLAotCTB4YmIxZTYzMWMsIDB4YjEyYjVjMGYsIDB4MDc1OTQyZmIsIDB4MTc3MmM5MTIsIDB4NWY0Y2M3YzgsIDB4Y2I4ZWZhY2UsCi0JMHg3OGI1MmUwZCwgMHgyMjUzNDZmZiwgMHg3ZWE5ODdiMywgMHg2OWVjYmVmNywgMHg5ZjRmNDFhNCwgMHhjYmFkNWRhYSwKLQkweDUzN2UxNzRlLCAweDA2NTljZTBjLCAweDg1MDQ5ZjNlLCAweDQxZWU0ZmRmLCAweDM1YzAwYWU3LCAweGZmNTEwYzZkLAotCTB4NGIzZTQwMzYsIDB4MTRmZTM3Y2QsIDB4YWU5NTdiY2YsIDB4YmQ5ZDdiNTUsIDB4NzM2YjliYzAsIDB4N2FiYjkyMTMsCi0JMHg4YmUwMzFkZCwgMHhiOGU3ZWZkNywgMHhmZGQ1ZTU3ZiwgMHgwMjVkZmYxYywgMHg5ZTdhMGU3ZSwgMHhiNGMzOTc3NiwKLQkweGU2YWIzOWU5LCAweGFlMTIyMDNkLCAweDIxY2FjN2IyLCAweDExNjk1ZWNlLCAweDI1NzVmYjc4LCAweGRlNWM0ODc3LAotCTB4M2VlN2YxYzIsIDB4M2NhYWVmMDYsIDB4ZjFiYTI2NmQsIDB4ZTI5M2YzYjQsIDB4NjI5MDg3ZmEsIDB4ZGZhZDRiOWIsCi0JMHg1YmZhMTEzOCwgMHg4M2U3OTIzNywgMHg1ZjgzZDQxZiwgMHhiZWEzNjllNywgMHg2ZjI5MDQzZiwgMHgwMjlhOTkwZiwKLQkweGM5ZjA3ZmQ2LCAweDFhOWZjNzQxLCAweGUxZWYzYjFjLCAweGE5NzgwN2ZjLCAweGY3YWFmZWU3LCAweDQ0ZGUzNGE2LAotCTB4M2YzYWIyYzcsIDB4ZjUwNzc4YzUsIDB4ZjRhN2Y2ZmMsIDB4MjRlMjJmN2UsIDB4ZmY1ZmUzZTcsIDB4NzYxZTg0MWQsCi0JMHgyNjE2OTNjYSwgMHhjOTAwOTZkZiwgMHhmOTAwM2Q1MSwgMHgxN2E5N2ZiMiwgMHg5Y2E4MjVlMywgMHhiN2NjMjFmMSwKLQkweDMzOGVkZGYzLCAweGU3Nzk2ODQ3LCAweGY3OGZjZmI0LCAweDdkNmUzYzAzLCAweDMxZTgzNjc4LCAweGZhMDNiN2UwLAotCTB4NTAxYjM3ZjEsIDB4MDU1YTU1Y2UsIDB4NDYyZDZmODYsIDB4N2YxNTE3YTQsIDB4N2YxYzlkMmEsIDB4N2Y3ODgzMTIsCi0JMHgzMDkwZTliMCwgMHg1NDQ1ZWMxYSwgMHg5YmJlY2QzZiwgMHhkNWIxNjVlZSwgMHgzMWM3MDE3MywgMHg1MzNmZGZlYSwKLQkweGVjY2FkOTUzLCAweGUyZmNmZTU2LCAweGZmZDA3OThkLCAweGY5YzA4MTBlLCAweGMzZmYyNmJmLCAweGJmYThiOWI0LAotCTB4NGYzNjkwN2MsIDB4NjVhMmFlZDMsIDB4NjkxZjhiMWQsIDB4NDcwYWY2MzYsIDB4ZmE2MDZhZDksIDB4MWU3ZGMxZGMsCi0JMHg0M2U3MGJlMCwgMHhjYTRiMTYxOCwgMHg5MDZhZDBhNSwgMHg0NWNiY2I1NywgMHg4NTQ2ZWZkNCwgMHhiZTQzZWY0YSwKLQkweDIwMjY1MzNkLCAweDVjNTg3Nzg3LCAweGQzY2QxZTZjLCAweGU0MmYxMDgzLCAweGJmODFmZmE3LCAweDdlNzc5MzZhLAotCTB4MzM0N2NhMjksIDB4ZDVjNDFiMTUsIDB4Y2UyZmNmOWUsIDB4NTc5NWZiNDQsIDB4MDYxYzAyNzYsIDB4OTI2NTM3YmMsCi0JMHgxNDllZjgwYiwgMHhhZGI0YjhjNiwgMHgyMDkxYjZiNSwgMHg4M2VmYWRkNywgMHg2MzY5M2VjZiwgMHg3ODJmNWNmYiwKLQkweDdlNjdkZjgzLCAweDViYjVhMjcxLCAweGY5MzBiNGU1LCAweGU0Y2FjMzJlLCAweDg2N2JmNTQxLCAweGI3OWRjOTk1LAotCTB4MDAyNmRiMDUsIDB4ZGE5NjFjM2EsIDB4ZmFmNzIwYWQsIDB4ZDAxM2U3ODksIDB4ZTZkNzg5NGIsIDB4MGY3MDg5ZGEsCi0JMHgxMjlkZGVhMywgMHg0ZDNkYTE3MCwgMHhmYzdmNjk0OSwgMHg0ZGJmMjgyNiwgMHgyMjNiMzhjMiwgMHhlMzAzM2ZiNSwKLQkweDg5NGVhZTc2LCAweGZjODUwYmRkLCAweDZmNjgwNTIzLCAweDFiZWFjYzdiLCAweDE0ZTNhNTYyLCAweGYzYjI3OTcxLAotCTB4MTA4NTlkZTAsIDB4ZTFjZTM4ZDcsIDB4ZTgyNGM5ZmEsIDB4ZWQwOTczZTcsIDB4OGE5ZWUzM2EsIDB4ZjgwMDRkYjYsCi0JMHhkOTkwM2U3ZCwgMHgwOGU4OTViOSwgMHg5Mzc2YjllZCwgMHg5ZTkzYWQ5NSwgMHg5MmVmMjg2ZiwgMHhmYmYyMzdjMywKLQkweDFkOWViNDBhLCAweDVhMTZmMWJhLCAweGI4ZGU0MTUzLCAweGZkMThmNDU4LCAweDI0Njk0YzZjLCAweDdkNTQ5ZjgwLAotCTB4OTI4MmJiNDAsIDB4ODcyMDI1ZTIsIDB4NGE5NjA4NGMsIDB4MjcxY2I3MTgsIDB4NzFlMDRjODcsIDB4ZjRhNDg4MWQsCi0JMHhmYmM3MzE3YiwgMHhlMTc3NzQyMSwgMHg1NThhMmRmZCwgMHhjNzI2NWZmNSwgMHhhZWI3OTJlNCwgMHhhM2UwOTBjYywKLQkweDhhODhhZjJhLCAweDEzOTllZDBmLCAweGM2MDg1YTY3LCAweDFlOGNhZmQzLCAweDllMmVjMTE3LCAweDBhN2FmOTQyLAotCTB4ZjE2MGNiZGUsIDB4YjMyZmY5YTIsIDB4NDY2MTIwZmIsIDB4M2ZmZWRkYjcsIDB4YThmZDFkYTksIDB4N2U1NmFkOTMsCi0JMHhmYzMzZDdhZSwgMHhiNzE4NmQyMSwgMHhiMDkwMDk0MCwgMHhkNmNmNjhmZCwgMHhmZDUwNTdkZSwgMHhmMjdmNmE4NiwKLQkweGFkOGY2NjcyLCAweDdjMTdmNmUxLCAweGRmOTY5NmY5LCAweGIyZWQ1NTZkLCAweDQ2N2U3NWNiLCAweGYwYmVkYzc1LAotCTB4YzZhYWMyYWIsIDB4ODA0YjQ0NTMsIDB4ZDUwN2EzMWUsIDB4NGE0ZjhhNzgsIDB4OGNmYTJmMDAsIDB4NTc3OGUwYTcsCi0JMHg3OGY1NzJkYiwgMHhkMTk1YmYwYSwgMHg0ZjFkMzdjOSwgMHg5MTM1ODhmMSwgMHgxMWY0NGJjNSwgMHg0NzFmMTE0ZiwKLQkweDkxMTk5OWQxLCAweGRhNGI1ZWQwLCAweDdkMDRlZWI3LCAweDdlODRjNWJjLCAweDZmMmQyOWRiLCAweGNiY2UxMWZlLAotCTB4NDMwOTBhMjksIDB4NWNiYzU2ZGMsIDB4NWY0ZDM1ZTEsIDB4NzVkZWY4MGUsIDB4YzA1NmNjZTEsIDB4ZWY3Nzc1YzMsCi0JMHhiMDNmMzM3NywgMHhkNzg4NWU1ZSwgMHg3Y2FiYjYwZiwgMHgxYjczY2I5NywgMHgxZmE3ZDdhZCwgMHgyOWJlZjVhOCwKLQkweGNiZTU0ZWI5LCAweDUxODdhZTdlLCAweGI5YzA3MmZhLCAweDIzZDM4M2IzLCAweGQxYzQxMjUwLCAweGRkNmRjYmM1LAotCTB4MWM5YzdlZjIsIDB4ZDE5ZWZmMTEsIDB4OWQ2ZjY5YTQsIDB4NjFhNDdiYzEsIDB4YTg3MTAwYjMsIDB4ZGUwOTE5YWYsCi0JMHg2M2VlMGRkMywgMHg4NWI1NmRmYSwgMHhjM2VhOTNmMSwgMHgyY2E5ZmRlYywgMHhlM2VkMTc5MywgMHhmMjIzMTVlNCwKLQkweGY5ZTU3ZjBkLCAweGZkMTE0NDk3LCAweGRjMDBhZjA0LCAweDI3ZTVhNjUzLCAweDVmYWVmZDQwLCAweGQ1MGU5MDFiLAotCTB4ODViNjkwZjcsIDB4MmE3NGZjOTgsIDB4OTRjODhjNWYsIDB4NzljMWI3Y2UsIDB4YTEzY2UzMGMsIDB4M2Q3NDFiZjcsCi0JMHgzMWYxOGZkOSwgMHg1YWU4MzdlZSwgMHg5NzA2ZmNjZCwgMHg2MDMzZTNjYywgMHgzMzBlY2FmMywgMHhiNzE5N2ZmYiwKLQkweGYxNGFhZmZmLCAweGFlODMzMmZkLCAweGM2NGZmMTZiLCAweDFlNzVkZGEzLCAweGQ2NWE2MWYxLCAweGM3MWJiN2EwLAotCTB4YmZjY2JkZWMsIDB4NzhhZjA1NTQsIDB4Y2MwNWZiYjMsIDB4OGZiMWE3ZGYsIDB4YWU1MjNiYzEsIDB4Y2UxOGE5MDYsCi0JMHg1Y2UyNWNhNSwgMHgxNWQ5N2MwZSwgMHgxNmZkZDBhNCwgMHhiYmY5ZWI0ZCwgMHg4MDI4ODJjMywgMHg0ZWFkMjEzYywKLQkweGFjN2VjMGIxLCAweDAxMjcxN2FhLCAweDQ1ZWIwNWJkLCAweDViYjg4ZjdjLCAweGQ3ZTdlMDBlLCAweDI5ZmZjZTI1LAotCTB4OGUzMDQyYzgsIDB4NzdmM2Q2OWEsIDB4OTZmZWQ1N2IsIDB4YTkwMjMxMTEsIDB4OTU3NGIwMjgsIDB4ZGJkNDlhNTMsCi0JMHg1N2Y2YThiOSwgMHhjNjUzYWM2ZiwgMHg0MDM0YmU4MywgMHgyNWVjYmI0NCwgMHhlMDEzMzNkOSwgMHg4ZjI5Mjk3YSwKLQkweGJkNjQ1YzQwLCAweDEyNjFhZWJkLCAweGJmMWM0NzJiLCAweGIxN2E4ZTY0LCAweDEzMTJkYmZjLCAweDA5MmI4OGQ4LAotCTB4ZmNkYmQ5ZjgsIDB4ZGI4NzhlZGMsIDB4MzgzOGM2YmMsIDB4ZTNmM2Q5YzYsIDB4ODhjYjNlZTMsIDB4YTBlNjY4NmYsCi0JMHg2ZjkyNzE5ZSwgMHg2OTczM2U3MywgMHhiZmJmMmU0ZCwgMHhhZWFlZTBjMCwgMHgwNjdmNTk3ZiwgMHg0YjAwNzEzNywKLQkweDllMjgwZTA3LCAweDMwM2ZmYjA5LCAweGEwNGQ4NjUxLCAweGQyMjNiMzI5LCAweDA3ZmNlMDk1LCAweGVmMDUzYjdlLAotCTB4YjdjZmM1MTMsIDB4YzAyMzg0MWUsIDB4YmRlY2Q1YWIsIDB4ZmYzYWFmOGYsIDB4ZGRmZjc5ZjgsIDB4Y2NlOWM2OWEsCi0JMHg1Zjc4MDE5MywgMHgzZGYxOTRlNiwgMHgxN2Q5NmJhZiwgMHg3MDVjYjk3MiwgMHhkNmExZmUyZCwgMHgwN2Y4MDZmYiwKLQkweDFiNTc4YmQzLCAweDEzYWRiYzc4LCAweDk3YmMwOGY5LCAweDA0YTc3ZjA4LCAweDllMDhhZWY3LCAweDc5ZDVhMWRmLAotCTB4MDZkNWFlYjAsIDB4YzI3ZTFmN2MsIDB4ZWY5ZTFiNzQsIDB4ZmJkOTg3YjUsIDB4ZGI0YjM1NzYsIDB4YWQ5Y2UxYjMsCi0JMHhmN2M3NmUyZCwgMHgwZGUxZTM2YiwgMHhmZTU0OTViMywgMHg0OWNkZWI0MywgMHgxYzZlZjgyMSwgMHg3OWZiZDA2OSwKLQkweDNjYjNmYTdhLCAweGQzZTAzNjQ1LCAweDM3YWVjOGM2LCAweDY1NDMzOGU5LCAweGQ3Yzg1OGRmLCAweDAyZWU4ZDJlLAotCTB4OTFlM2I1NzksIDB4NWU0MDRhZjcsIDB4ZDI2ZjUzOWIsIDB4Mjc5MmE3YzUsIDB4ZDIyMjdlZjQsIDB4NjU3Njg0OTAsCi0JMHg1ZWZmYTRkMiwgMHg1ZGFlMzliZSwgMHgyMzUxYmYwZiwgMHhkOTdhZTNlMiwgMHg3YmU4MGMzNywgMHhkM2Y5ODM5YywKLQkweGVmODhhNTQ5LCAweDAxZGI3NWZjLCAweGUxY2UxYTllLCAweGVlZDNjZWU3LCAweGVlN2QwM2VmLCAweGVmNjdhZDJmLAotCTB4Zjc3YWVmNTksIDB4MmZlYzAyZjcsIDB4YmU2YWQ3ZGQsIDB4N2RmNjE3YmYsIDB4YjdmNjBmMmIsIDB4ZjJiN2NmNjMsCi0JMHgxYmQ3N2Y2MCwgMHgzZjQwM2QxYiwgMHgwZjlmMTUzYiwgMHhlZmE3M2NmYywgMHhhMzljYTJmMCwgMHgwYjVjNDVjNiwKLQkweDI3NWQxNzJmLCAweGU2ZmEyZTVlLCAweGU3YWFmMmYwLCAweGNhYTZjMDVhLCAweDVjZWQ1ZjQ5LCAweDllYWQzZjgzLAotCTB4MjE4YWY4N2QsIDB4MzRiZjQ2NjgsIDB4M2Q5OGZmYzMsIDB4ZjA3N2ZjZWMsIDB4MGEyY2I5NWMsIDB4YWJlOGY3ZTAsCi0JMHhhZTVjNTFiZiwgMHgxMDQ4NTBjYywgMHhjNTQ1MTNlYywgMHhlOGFlZDhlZCwgMHhkYzgwOTE3MywgMHhmMTc5Y2FhNCwKLQkweDlmMDlmODcwLCAweDRmMzZmM2ZmLCAweDVmODc5YzAyLCAweGNlNWFlZWQ3LCAweDRmYTEyOGViLCAweDQzYjlmYzk5LAotCTB4NmJiYjMzNzAsIDB4MWRkNWM1OTgsIDB4OWQ4Mjc1MmEsIDB4ZDk4ODVjZjUsIDB4YjFmNzZiNWQsIDB4NDIyYmVhNzcsCi0JMHg1ZGYwNDQ2ZiwgMHgwOWMxNTZmMywgMHg4ZWM1NDFmYSwgMHhlZWYwMWMwZiwgMHhhZTRlMjY5MCwgMHg0NDhjZTgxOSwKLQkweDlkZWNlZmY1LCAweDQwNzI5ZDBiLCAweGI3OWQxYmJjLCAweDZiNzhlNDE1LCAweDdhMDY1NDRhLCAweGYxMTcyZGE4LAotCTB4Mjk1YWIzZGQsIDB4YjViY2YxOGEsIDB4MjQxZGM0MjksIDB4ZjVlYTVmMjAsIDB4NmMyZTM1MmQsIDB4YmE0NjU3OTMsCi0JMHhkZWNhZDRkOSwgMHg3ZDkzNGNhMSwgMHgwZjExZmRiOSwgMHg2ZGZiZTNmYiwgMHhiN2VkZmQyYSwgMHhmODAwZmU3OSwKLQkweDdhZDNmMzFiLCAweDhiNTc2YzVhLCAweGMzMmZmOTFiLCAweDYxN2ZlNjM2LCAweGNjZDk3ZmU1LCAweDZlMzUwMmU0LAotCTB4Y2U4ZmY1NDQsIDB4ZjNlZWYxZTcsIDB4ZjgzYmJjNzksIDB4ZjgxYTIzNmQsIDB4OWI1NmRmODIsIDB4ZDViNmZkNTcsCi0JMHg4ODMyMmYxMCwgMHhlNWI1NmRmOSwgMHg4ZDY4N2VkZCwgMHhhZTViNTZkZiwgMHhlODg5MTc4ZCwgMHg5MzIzNGRmOCwKLQkweDMxMGIwZDc3LCAweDI1ZDI4NjRlLCAweDU3OTE2M2M2LCAweDg4Y2VkNTA1LCAweDc0YTdlOWY0LCAweDBjNjQ2NGIwLAotCTB4ZjBmZGQ1N2YsIDB4MTJiODdmOTcsIDB4M2NmY2YzZTIsIDB4ZjAxYWIyZWUsIDB4NjFjNjA0NzcsIDB4NWZjMDRjNDYsCi0JMHgzNTVmMTRjMywgMHg0YjZhMmVmYywgMHg3ZDczNzRlNCwgMHgzN2U4YzhmNiwgMHhlZGYxZGY0YywgMHhlM2M3NTczZiwKLQkweGIzYWVhZDc0LCAweDAyYWQ1ZDdiLCAweDc1YjhjM2EzLCAweGYxODllYmM1LCAweGNmNTU2OWY2LCAweDRiZGYxNmJiLAotCTB4ZGYxZjVmYjYsIDB4YWJmZGViNTMsIDB4ZmRiNjVlZjksIDB4YmVmN2MzOWYsIDB4NDdmZmZiMjksIDB4MzAzNGM2YWUsCi0JMHhlODdiM2UwNSwgMHhkMDgzZGY4NywgMHhhZDgzMTJhNCwgMHg0Yzk0NzdmYiwgMHhhZTNmZTFkNywgMHg0MzcwNjJkOSwKLQkweDIxY2Q0ZGRjLCAweGFhZjIxYmJiLCAweDdmZGUzMjNmLCAweDk0ZjY0OTU4LCAweGZkZTNjODAwLCAweDU3MTBkNTg4LAotCTB4ZmVkYWU4MzEsIDB4Yjc3YjYyYzQsIDB4ZmI1NzNkNWYsIDB4YjE1MTc4NWUsIDB4NjFiZjVmOWUsIDB4YTdkOTM0ZmIsCi0JMHgwMmUyZDNjMSwgMHg4MmY3ZTAyYSwgMHgyNDE0OGFiNywgMHhhOWY2MzhkYSwgMHg3ZWI3ZTY3NiwgMHg5ZmVmYmY4MywKLQkweDg4MDY5MzIxLCAweDZlZGE3ODkzLCAweDE0NDY3YmM1LCAweGE2MmUzMDZiLCAweDZlOWRlYWQ4LCAweDlhZmMwZDFmLAotCTB4ODNkOWVmYzEsIDB4MGI4ODEyZjcsIDB4YzYxOGQ2N2UsIDB4MWFjMTNlZmIsIDB4NTcyN2RlMWIsIDB4ZmY2YTIzZWQsCi0JMHhhOTdlYTk2ZiwgMHhjZDczZTA2YiwgMHhjZDczZTI3NSwgMHhmMWNmOGMzNywgMHhlM2FiMTdlZCwgMHg2MWRmYWY1ZCwKLQkweDA2OTE4NTAzLCAweGIzZjFlM2RmLCAweGYxN2Q3NmFmLCAweGVmNzY1NTgxLCAweDkxZDIzYjcyLCAweDVlYjllZjA3LAotCTB4MTFlOGZmMmYsIDB4ZjFiOTI5ODcsIDB4NGRjNDFkNWUsIDB4ZmM1NTljNDIsIDB4NzRmN2E4N2UsIDB4NmI3MGI5NTQsCi0JMHg5N2ExZmI5ZiwgMHhjNTdlYjcwNywgMHgzYzk2YjhmZCwgMHgwZGUyYTRmOCwgMHg4ZjRmN2FjMSwgMHgzZTgxZTRmNywKLQkweGVjY2VjYWJiLCAweDBjY2Q5YjJlLCAweDBjMGIzNzJmLCAweDEzZTA3YjFmLCAweGUyYTNlZmJmLCAweGY1ZmIwMWQ1LAotCTB4N2FkNDNiZDksIDB4NzhmZTZhZmYsIDB4MmQ3YzJlZDQsIDB4NjlmYzA3N2IsIDB4ODg2YzkwZjEsIDB4N2Q3NjdiZTIsCi0JMHhmZTllYzdmMiwgMHg1OTc3MTYyZSwgMHg1MTdhODZkYywgMHhlZjgwOTBmNCwgMHhmNmYzYWIzMywgMHhkNjNiMzFiNywKLQkweGQ0NWMzOWVmLCAweDFjYjhmYmVmLCAweGZjZjBlMzk4LCAweGYxMGE5ZWMxLCAweDhmMDI4YTQ5LCAweDU5MDI4YzNiLAotCTB4MmYyOGU0MGUsIDB4MGRhOTM3OGIsIDB4ZGE4ZmI4YjMsIDB4NzBlMzA0YTUsIDB4YjUxMWZiZDQsIDB4YzgwOTUzMmQsCi0JMHhiZWNkMGI2ZCwgMHg1NWZiNDMzZiwgMHg4NjgyZDllZiwgMHg0ZmEzYjAwNCwgMHg3NWE3MjAyMywgMHgzN2YyY2JiZSwKLQkweDQwMWY3ZDliLCAweDNiNjk3ZmI5LCAweGE2OWJmZGRhLCAweGExMzhjNzlkLCAweDVkM2YyZmEyLCAweDNhNWRmNjA5LAotCTB4YTQwYmI0NWYsIDB4ZDNmN2Y0OTgsIDB4YzdjNjBlMWQsIDB4NTBlYWQ0ZDQsIDB4N2I0MWViZTEsIDB4ZmI5NTA3NzgsCi0JMHhhN2YyZGU0MCwgMHg1ZjYwOWM3OCwgMHg1NmNkZWQ1MCwgMHhlMWRhMWI1NywgMHg2NzMyZjc2YiwgMHhhZDgxOTE1ZiwKLQkweDlmZGEzYzg3LCAweDhlZjZkMWY5LCAweGU0MTVmYzJmLCAweDkwNDJlNmMzLCAweGI3ZGU4YjU3LCAweGUzYThmZGExLAotCTB4MTM4YzJjOTEsIDB4YmJlYWNjNzgsIDB4MWY2YWY4MGMsIDB4ZTQwYmJhMTUsIDB4MGUzYTFjY2IsIDB4N2IxZGFkYzgsCi0JMHg3OTg0MmFlZSwgMHhlMGExN2Q3NywgMHhjY2VjYmFiYSwgMHgyNGY1ZDBiZiwgMHhjYWY4ODk5OSwgMHg2NjVkZDFlZCwKLQkweDlmMDIyNzg2LCAweDY2NmFkNzZmLCAweGJhMWUwYTlmLCAweGRkMDNiZjkxLCAweDM4MzY4ZjZkLCAweGQxZWNjNzQ2LAotCTB4YTU0MDdjZjEsIDB4MDhmYmVlZmYsIDB4MWZmNDE0YjMsIDB4YmQ2MWZjYWIsIDB4ZWFhMzlkOTEsIDB4ZWVjZTc3ZjksCi0JMHgzYzE2ZjFlMiwgMHgyYTc1YWVhZSwgMHg3OWUwZDc4YiwgMHhmODU1NGYxYiwgMHhlM2JiNmYzZSwgMHg5Y2YzYWMxYywKLQkweGRlYzdmYTVkLCAweGUyNGNiZWMzLCAweDJmZDhlN2ZkLCAweGUzNjkzOWM0LCAweGRmZTBhZGQ1LCAweDUzODk3YjAxLAotCTB4MzdiMmJjNDYsIDB4YTFkZmU2MTAsIDB4ZjlmMjA1NzgsIDB4MDliNmQxNmQsIDB4ODM5ZDc0MDksIDB4MDFiNzIyOWIsCi0JMHgxNjVmMGZiYywgMHg1M2EwYmJkOSwgMHg5MmY3OGI3ZiwgMHhkZTM2MDQxMywgMHg1N2RhMjdhMCwgMHg4YWZiMDUwZiwKLQkweGMzNmZlZGYzLCAweDlkMWFiYWQ2LCAweDViOTJlMGM1LCAweDg3MGVmNjY4LCAweGQ1MjI0MWI4LCAweGM1NzhjM2U1LAotCTB4M2M1OTE4ZWYsIDB4ZGEyYjIxZGYsIDB4YWJiMjlhMDksIDB4YmI2OTEyNzMsIDB4Njg0Y2Y3Y2UsIDB4MDNlNzg5YWYsCi0JMHhjYjI0MWE2YSwgMHg2MDZmOGUzMSwgMHgwZWQwMWZjYiwgMHhlODJiZGY2ZiwgMHg5M2E2YTZlMCwgMHhmN2U2MzYxYywKLQkweDYwOTViNjA5LCAweDI5NmRjOWFjLCAweDBlNmU3N2VjLCAweDdmMDQxZmJkLCAweDVmMWFiNGJkLCAweDQ2ZjUyNDg2LAotCTB4NzU3MjA4OGYsIDB4N2I0MTE5NzAsIDB4YTcyNjkwZTQsIDB4YzM5NWZiMDgsIDB4MGViYTQ0ZTMsIDB4MWYwOGNmZmYsCi0JMHhkZGFhOWY5ZSwgMHg2NGE5ODQzZCwgMHg3YTA5NWY2YywgMHhmZGFjYjQ5NSwgMHhjN2VjMjBmNiwgMHhiNmIxNDRkZSwKLQkweGQ2OGJmYTAwLCAweDEyYjI3YzMyLCAweDVhNzM5ZjM4LCAweDk1YmYyZDA2LCAweDljMWE3M2U2LCAweDdhZWEzZmU4LAotCTB4MGRlMzBhYjUsIDB4NDM5ZDc0ODMsIDB4YTE2NzU5N2EsIDB4ZGNlNWM1ODMsIDB4YTUyMGUzYzgsIDB4ZmMxMTU2NDMsCi0JMHhiODVhZDJkMiwgMHg1MzQxNDQwZCwgMHhkMjk2NzFlZiwgMHgxMjljNDNmNiwgMHhjMzhlN2RlMiwgMHhkNGYwMGIzNywKLQkweDU5MDJmOWNhLCAweDljN2Y0MTYyLCAweDZkNzg2MjVkLCAweDhiZGVmMjVmLCAweDU1YmZjZjEwLCAweDFkNGZlZjY2LAotCTB4MzRlMzdjM2QsIDB4OTZhZGRmYjQsIDB4YzZhYjVlZDAsIDB4NzRlMDJlNTEsIDB4NDdkZTEzZGMsIDB4ZTA3MjVlMzEsCi0JMHhiZjMwM2ZhMSwgMHhmYTBiMWQwZCwgMHgzZjBjOGM5NywgMHhmODI5ZDVhNCwgMHhjODdmZTA3ZSwgMHhmZDBiOGMzZSwKLQkweDgwYzQ3ZDc2LCAweGU5ZTcyOGZlLCAweGFlYjkyNjY3LCAweGViYzRiN2FkLCAweDg5MWNjYjI5LCAweDYyMmUyOTVmLAotCTB4M2Q5YmUzOTksIDB4M2ZkYmUyNGYsIDB4NTVmNzhlYWUsIDB4ZDdhMjEwZjUsIDB4NjNlODdhY2YsIDB4NWM3NTcyZjEsCi0JMHgwZWU0YmVmYiwgMHhmNTQyZWUzNSwgMHg1MDRmMTE3NywgMHhjYzUyNmYxNywgMHhiZThhMjFjNywgMHhlZjBiNmFiZiwKLQkweDUwYTNjNzhmLCAweGYyMDVjNDM5LCAweGQ3MGFkYTRlLCAweDhlYmY4ODMyLCAweGRmYTA5OGZlLCAweDA5OTc4ZDQ2LAotCTB4OTczOGIzMTYsIDB4YmRlMGE4YTAsIDB4ODhkMjBjYWIsIDB4NDhmZDMyNzEsIDB4MWVkMDEwNDQsIDB4ZDNiNmUyYzYsCi0JMHhiNjg2NWUyMSwgMHg4ODE4ZWY1YiwgMHhlZTIxNmZmZCwgMHg0MWYyMDMwNiwgMHhhNGFiYmUxNywgMHhmZGQwNTVjNiwKLQkweGQzMjQzYTQxLCAweGMxM2YxZTY0LCAweDU2NmIzN2YwLCAweDcwZTIwODVhLCAweDlmN2VkY2ZkLCAweDdmMWYyYjM1LAotCTB4M2YxMzU1NjcsIDB4MzNmZWVjYzEsIDB4N2Q0Zjg4MmQsIDB4MTBhYTUzZGUsIDB4ZDYyNTNkZjksIDB4MTcxMGQzNmYsCi0JMHg0ZDdmZjNkZSwgMHg2OTNlNmJiNSwgMHhlMmUzZWQ2NywgMHhhYTM4NTQyYywgMHhmYzJhMTY3MSwgMHhmMTRjN2JkNCwKLQkweDc5MzE0YzcwLCAweDU3YmMwMmRmLCAweDdkZDQyNWUzLCAweDBkOGZkZWVlLCAweDU1ZDgyZWNjLCAweDFjYmJlMjIxLAotCTB4MTU1ZDdmNmEsIDB4ZGM4MzY3OWYsIDB4NjI2YWRjNTAsIDB4ZWZkNzEyZjgsIDB4YWVmYmVlYTYsIDB4NjdjNjMzMjEsCi0JMHg5NmJkN2RmMywgMHhkZmJlYWExYywgMHgyM2JmOTQ3NSwgMHhkN2JmOGM3NSwgMHhjMjE2NjVkZSwgMHgzOTlmODAwNiwKLQkweGM5MzgxYjNhLCAweGVlNDc4NGY2LCAweDVkODE3Yjg0LCAweGRjMzY2OGY2LCAweDc4ZGNkYzJiLCAweGE3Y2MyNGZmLAotCTB4ZmU0MjRmNDYsIDB4YzNmZjg0YjUsIDB4NWJhMjQzZjIsIDB4ODllMTllZTEsIDB4MWU1OGIzYTcsIDB4OTA4YjJlNzAsCi0JMHg0OTg0OGUzMywgMHhlMDdmODJjMSwgMHhlM2Q3M2E1YywgMHgwMjJlMWE3NywgMHhmYjQ4NmIxYywgMHhkM2I0MzZjYSwKLQkweDE0Njk3M2YwLCAweGEyNjQ2M2UzLCAweDQ0ZWNjNDI5LCAweDEzZmZkYzJlLCAweDYzMWRlYzk5LCAweGJkYzBmZTViLAotCTB4ZGZkZTUwNmQsIDB4NWEyZGY2ODQsIDB4NjI3YmY4OGUsIDB4ZWU1Njc4YzgsIDB4ZmE0ZGZiNjIsIDB4MDI5YzU5ZGIsCi0JMHgxM2QzM2RmZiwgMHgxZmQxZTNiOSwgMHg0ZGY4MDM1ZSwgMHg0NjJiODVlNSwgMHhjNzQwOTg5ZiwgMHhlMWI0MjBiZiwKLQkweGVlMjc1OTNiLCAweGUwMDE2MWY4LCAweDhmZmQ4NWViLCAweGUyYjkwNjBlLCAweDc3ZjdiOTRlLCAweDcyNzMxZWUxLAotCTB4N2VjOGMyMzksIDB4YTM0ZGU1ZjcsIDB4Zjk0MDlhY2YsIDB4YjNhZDFmYzMsIDB4ZmY2OTEyNGIsIDB4Y2JjNzkzMzMsCi0JMHhlMGVmMzA4OSwgMHg1MWVlZjhmMywgMHhjNGJmZGYyYSwgMHg0YmVlNGMxOSwgMHgyMDE1ZTg5YywgMHgzMzYzZjE3ZSwKLQkweDFmNTRiM2EzLCAweGUyMDYzZGZiLCAweDNkZGMyMTliLCAweDEyZDcyMzVjLCAweGM0MTEzYmY2LCAweDdiODA0YWU3LAotCTB4NjhlZmYxMDgsIDB4NmI1ZTEyZGMsIDB4ZjdmNzM5MDAsIDB4NzgwY2U4ODEsIDB4ZmVmZDU1NTIsIDB4MzhmN2ExMDcsCi0JMHhjNjA0ODI4YiwgMHg1YzE5YTZjNywgMHgxNDFmMDFjMywgMHgyOWNkZjFiMSwgMHgyYmM2YzRiNywgMHhmYmYxNzA0OCwKLQkweDcwYTM3NWM1LCAweDUxYmE4NmRjLCAweDI4ZjRjN2EwLCAweGQwNzJkMWI3LCAweGU1YTA5ZTkzLCAweDk3Mjk3YmMzLAotCTB4ZDY3YWZiNzgsIDB4OTM4ZWYzNWUsIDB4YTk3NGUwMWIsIDB4MmZiYzAzZjQsIDB4MDRlYjM4YjQsIDB4YzI3NjQ3YmUsCi0JMHgwZWYwM2M0OCwgMHhmYjkzMzA0ZSwgMHgwNzM5ZThmNSwgMHgyNzNjN2RmYiwgMHgzYjRmYzU5MSwgMHg0MDcwNGMzNywKLQkweGZmZGIxMDdlLCAweGZkMDg0OGJiLCAweGIwNjY1M2JjLCAweDIxZGY1OTdiLCAweGI0ZWRmNTZkLCAweGZhMTk5ZGRlLAotCTB4Y2JiOTYzZGYsIDB4Mjc3ZmNmYTUsIDB4YzI5ZjlmNWYsIDB4ZWJiZTA3ZTMsIDB4MWVmZjdmZDYsIDB4MGY4MDRhODksCi0JMHhmZmEzMWZkZiwgMHg0NDE3OTdkZCwgMHgwYmUwMDk0ZiwgMHgyZjhjMjdlNSwgMHgyYWVlM2MwYSwgMHhmOWMyMDg0NSwKLQkweDJjODFlMzdlLCAweGM2MWE5ZWY1LCAweGY1YzBiZGIzLCAweDdmYmYzZjExLCAweDkxYWE2NzAxLCAweDg1ODZlM2FlLAotCTB4MWJkYzlkZWMsIDB4OTM5Mjg4MzMsIDB4ZjkyYmZjMDQsIDB4ZjA3YmJlMDgsIDB4YTcyOWY3MTEsIDB4ZjQ3ODliYzAsCi0JMHhkNzEzYTk3YiwgMHhmNDE5ZTJhZiwgMHgxZjdjM2I3NSwgMHhlMmUwY2Y5ZCwgMHhkMjUzODMyMSwgMHg0MThlZWZkOCwKLQkweDZiMjMwOWQ5LCAweDg0YjFmYzFiLCAweDdkNjg0ZTdjLCAweDNlMmM2ZmYzLCAweGYxODRiYzYyLCAweGQ3YWIwMjc3LAotCTB4NGZmODY2NjUsIDB4ZmVmYzUyNGYsIDB4ZTIxZWRlNTMsIDB4MjdjODljYWEsIDB4NGFiZmRjMmQsIDB4OGJlODVkZjAsCi0JMHg3OGQ4ZDJhMywgMHhmYThiMGYxYywgMHg1YmMwMTYyOSwgMHg3Y2JiNWRmNSwgMHgxYmY2ZTEyNywgMHg3MDY5YTY0YSwKLQkweGU3OTQxMDNlLCAweGZkNTRiYzU0LCAweDNjMzgwMzQ4LCAweDdmMzI3ZTI4LCAweDFmODcyNjcxLCAweDA2ZjdmMDkxLAotCTB4Y2ZkYTg5MzIsIDB4YWRjNjEzNzQsIDB4MDRiYWZjZjEsIDB4ZGUyYTZmNDYsIDB4YjVlYzdmYWUsIDB4NWYwMGE3MzcsCi0JMHhjMDNmNWMxMiwgMHgzYmIyZWU3ZSwgMHg3NGY5YmQ2MSwgMHg4MDQ5OTlhYywgMHg3OGQ4MjliZiwgMHhmNDQ5ZTcwNywKLQkweDI0NzkyN2JiLCAweDhjNWQ4Nzk4LCAweGIwOWExYjE4LCAweGJmN2YzMDdjLCAweDRmYTRmYTZjLCAweGZlMWE0ODY2LAotCTB4NjFhZGZiNDUsIDB4ZmRmNTVhZmQsIDB4NDU5YmEzYzIsIDB4NjgzMzdlOWEsIDB4N2U5YTQ5YmYsIDB4ZjJjMjY4OWYsCi0JMHhiZmU1ZmJiZSwgMHhlN2U5MjE0NywgMHhhZjhmYjZhNywgMHhmM2Y1ZWE0ZiwgMHg3YzdkYWJlYywgMHgxNGY3ZjUzZCwKLQkweDRkZjg3MzI2LCAweGYzMjllMzU2LCAweDY0MGY3MWY1LCAweDdlNjE1YjhjLCAweGMzOWM3ZDZjLCAweDhlZGYxYzliLAotCTB4MzA2ZGZmNWIsIDB4MDkyNTBiZTgsIDB4Mjg0NGE3MGYsIDB4MWE1MjRjM2QsIDB4ZjQwOGRiZWIsIDB4ZDBmYTQ2MWIsCi0JMHg4MDJmZjVkMCwgMHg3ZTY1MmUyZSwgMHhiNmZiYmY4MCwgMHhkOTg5ZTA3OCwgMHg5N2E1MTlkMCwgMHg3YmEzMDlkZCwKLQkweGU3YzU0N2NlLCAweDNjNTE3OWVlLCAweGYxNTQzYzA2LCAweGRkOWU3ZTM4LCAweDMwYmRmYzc4LCAweGExNmQ3MjA2LAotCTB4YWFhNDA3ZjIsIDB4OWQ0ODQyM2MsIDB4MGQ3MGViODAsIDB4MjI4M2FkODgsIDB4ODc1Mjg5NjEsIDB4MjJiMzdmZjMsCi0JMHgzM2JkZjM4OCwgMHhmZjhjMTlmMSwgMHgzYmU0OTMxOSwgMHg3OTlhZjMwMiwgMHgzZGVjMjdkMywgMHhhMWQyOGM5MywKLQkweGY5ZDEwNzIwLCAweGZkNDg0ZDFlLCAweDM1NWYzNzdmLCAweGUxZGM3OTZlLCAweGJkODIzNzNiLCAweGUzZWU5YmI0LAotCTB4NWZlZDVjZTgsIDB4ZjIzNGQzOTUsIDB4MmFmNzNiMTUsIDB4ZjJiZTU1NDUsIDB4MTk2NDI5MDAsIDB4ZTU3Y2I4MzIsCi0JMHhhY2Q2NzhjMiwgMHhmMTBkY2I4MCwgMHg4YWY5MWFhYSwgMHg0NGQ1NDdjOSwgMHhlZWNlMDdiZCwgMHhhMDYwZmNlZCwKLQkweDk4N2FiZTVlLCAweGI3NmViYzYwLCAweDI3MWE1NTdjLCAweGVkZTNjZDVmLCAweGM0MjA5MmE3LCAweDkzZDkzNmM1LAotCTB4ODA1ZTJjNDIsIDB4MTYyZDM5Y2UsIDB4OGRiNGRiZmYsIDB4Yjc0ZDhkYzksIDB4ODI0MTljYjgsIDB4MzNkMzE2NzIsCi0JMHhlODdiZjE2NiwgMHg2YmRlNGNiOSwgMHg3N2M5OGZiYSwgMHhiYWVhMWNlMywgMHg2Yjc4ZmEyYywgMHgxMzM1NjdlZSwKLQkweGI4YjEyZjJhLCAweDk5YWJiNDBjLCAweGE1ZDk3ZDlkLCAweGI1MzU3NmY0LCAweGYyMDJmZmRlLCAweDAwN2YwODMyLAotCTB4MDAwMDdmMDgsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4ZDU1NDdjMDksIDB4NzNiOWY4YjksCi0JMHg2NGNhY2I2NywgMHgxMDk4NDhkZiwgMHg0MjRlM2IwOCwgMHg4NzViMzYxMiwgMHhlMjI5NDhiMCwgMHgzY2I4ODhiMCwKLQkweDQyNDBiMjFjLCAweDNlYjQ0MTk2LCAweGMzM2ZlZGFkLCAweDBkMjIwMjIyLCAweGMxNjhkNDZkLCAweDJhMTQxODBlLAotCTB4MDQzMWEwZDgsIDB4YTQ1ODcwNDksIDB4MTQxYTg3ZDAsIDB4MmYxZjY4MmQsIDB4NDgxNDU4NDAsIDB4YWQ4OGEwYzYsCi0JMHhiZWZiZmZjYiwgMHhlZjcyNmU3MywgMHhmNmI0MjI2NCwgMHhmYTdmYjZmZiwgMHhlZjczOTdiMywgMHg2ZGYzYmU1OSwKLQkweDM5Y2U1YmU3LCAweGQ3OGRlZWMzLCAweDFlYzY1OGIxLCAweGFjYzYzMGI0LCAweDk4ZWI0NThjLCAweGIxOTQzNmIzLAotCTB4OTZlZmYwZWYsIDB4OTVlNWU3YWUsIDB4NjI4OWU2M2EsIDB4YTMxNTc0YWMsIDB4NDdkN2U1ZTcsIDB4N2E4M2NmYTYsCi0JMHg0YzhjNzY5NywgMHg2NmU3ODNjZiwgMHg5MmQ0MzNiMywgMHg1MGUxNThjZCwgMHgyZmExOGE3YiwgMHg3YjQ2Zjk2MywKLQkweDliMTk5MzNhLCAweGJlYjQ1ZTY0LCAweGNjOWViYTE5LCAweGQzOTNmNTE2LCAweDViMDlmYjE4LCAweGNmMDc0Yzc0LAotCTB4NDhjZTkxNTEsIDB4Yzg2NzNmYWMsIDB4Mjg3YTI5NjcsIDB4MDM3OWY4YjMsIDB4ZmQ4YzYxMWMsIDB4YzI4ZjY3NWUsCi0JMHgxOWI5OGNmNywgMHg3MTg1MzVjMiwgMHg0Mzk4YTZiOCwgMHhmODcwZjJiZCwgMHhhNWMzNDBmNywgMHhmZThjODE5NiwKLQkweDFjNzE4M2JlLCAweDRiNmY2NzI2LCAweDExNTU2MzBjLCAweDY3OTcxZmI1LCAweGEzNWNmNjMxLCAweGUyYjZlNmM5LAotCTB4ZWMxNDk2ZDcsIDB4MTFkZWIxOGYsIDB4MDQzMDg2ZTcsIDB4NTQzY2UxODUsIDB4MzllODE0ZjAsIDB4NGNiMmQxM2MsCi0JMHgwNDBiZjRmMCwgMHhjNjVlNjMwZiwgMHg2OGUwYmE3MiwgMHg5NGFlODQzNywgMHhiMWUwYTk3YSwgMHgwMGQxN2ViMywKLQkweGM3YmUyNGE3LCAweDA2ODk1YWIxLCAweDZhNTM4M2YzLCAweDEyNTdlM2ZjLCAweDMzZDM4ZmQ0LCAweDYzMjY1ODc3LAotCTB4ZWE5Nzk4MWIsIDB4MWNlNzVlZmQsIDB4YjNjNmUzODEsIDB4YjhlMTg5NGEsIDB4MTEyYjZjMmIsIDB4OTZlMGRkNGYsCi0JMHhiZjMwYzkwMSwgMHgxZWM5NzdkOSwgMHgwYWU2MGMxMywgMHg3YWNlMWYwOSwgMHhkNGZiM2Q2MSwgMHhiYTdmMTgwNCwKLQkweDJhZjY3ZjE4LCAweGFjMDg4NGM3LCAweDc4ZTI1ZDM3LCAweDAwZmZjMmYwLCAweGZiZTIxOWZlLCAweGE5YjJjNmY0LAotCTB4MzE5OGUwMGMsIDB4MTNiYTcwYzEsIDB4YTY2ZmY4M2UsIDB4MDE4MWJhNjUsIDB4YzJhNmIzOWMsIDB4N2JkNzczN2IsCi0JMHg2MWQyMjA5YywgMHgyY2ZmZDI4ZSwgMHg2YzM5YmI2ZCwgMHgzODcyNjdjZCwgMHgxMDE5MTY5NiwgMHhkNWVlNzM1ZiwKLQkweDA5NjY5ZjdlLCAweDQyMTczZThiLCAweDA3N2MwNzZkLCAweDYwNjAzYWYzLCAweDc5ZjY4ZjM0LCAweGU2MDliM2NjLAotCTB4ODJjYzU2ZjEsIDB4MzM0N2Y3ZjUsIDB4NDNiN2UwMzYsIDB4N2ZlODY1MzMsIDB4Y2Q3MTZjNjIsIDB4ZjRiZjI4M2EsCi0JMHhiZjJhNjBkYywgMHg4M2NmN2IxNSwgMHhmM2ZiZjE0NywgMHhhMDllNTRlOSwgMHg2ZTUwNDY4MywgMHhiM2NlOTlmZiwKLQkweDljZDAxNTI5LCAweDU0OTRkNzczLCAweDkwNDBmZjE4LCAweDQ2N2VmN2U4LCAweDlkODNlM2VmLCAweDVlYTFkMzU1LAotCTB4OTliZWYwZmMsIDB4MDRkM2UwY2IsIDB4MGFlZGUzMjMsIDB4ZGU5ZmY3ZjksIDB4OWNlNTQ2MTQsIDB4MTkxZWFjZmIsCi0JMHg2YzEwOWNiYSwgMHgzMGY3ZDM3NSwgMHhhYTA5YjZjOSwgMHhkMTMwYzkxZSwgMHg1M2UzNjFmNywgMHhjY2JlZjdmOSwKLQkweGU3ZGY4NTFlLCAweDIzZmI1MTg1LCAweDBiNWUyMTk5LCAweDQ3ZjJmNzhjLCAweDAxZmJlODgzLCAweDBlYjliM2U5LAotCTB4NTk1YjUxMjAsIDB4NTJlOTFlYTgsIDB4ZTMzNjY4OWUsIDB4Yzk0MGM4NzMsIDB4M2RmMDA4M2IsIDB4NWY4YzUyMjEsCi0JMHgzNTNkZTdjNiwgMHhjYTIyNmI3MywgMHhkZjVjODRjZCwgMHg2ODUwYzc1YywgMHg2NzBlNjg5NywgMHhmZTFmMTEzNywKLQkweDg4NzlmOTBjLCAweDM0YWFkYzZkLCAweDVmMTZhZmU0LCAweDE1MGY5YThhLCAweGY4NTc0ZjNhLCAweGNmOTY4MjZmLAotCTB4YzUxZTdlNDAsIDB4ZmE5ZjBhZjYsIDB4ODdjMmE3ZjMsIDB4ZWEwYjNlMWEsIDB4Yjk3ZjMzZTIsIDB4ZDcwMDllNTcsCi0JMHhiMThmOTI0YSwgMHg5NzcyMWYyMCwgMHhlMzhlNzQ3YywgMHhlM2ZlMjcyNywgMHhmOGJmMjRmNiwgMHhkY2EyYzUyNywKLQkweGMyNzc3Zjg4LCAweGQwZjI0YjU3LCAweGI5ZTliOTliLCAweGNiODNlNTAxLCAweDg3MDhiM2NiLCAweGM1NmNkNzUxLAotCTB4ZGIyNDdkZjcsIDB4MzNjMjBiNjAsIDB4MGM3NjY2Y2EsIDB4MGEzNzJlZWIsIDB4NzgzYWM5N2MsIDB4MmUxZGQ5OTEsCi0JMHgzOTQzZDNmYywgMHg0NWZlNzU4OSwgMHhiOGUwZTc0NywgMHhiM2I0M2JmYywgMHhiODJlYzhiMywgMHhhNGFkZmM2MCwKLQkweDc4NzA1NjlmLCAweGI4OGI0ODM2LCAweGQwOTc2M2JjLCAweDU3NjhiOTRmLCAweDQxYjdjY2FlLCAweDA2NzhkZjNiLAotCTB4MmZmYTg3NzgsIDB4YzQ5NjdlYzQsIDB4ZmUxOGRkZGIsIDB4ODJiODc5OTUsIDB4NGY4MWVlNDEsIDB4NjExZDk5NjYsCi0JMHgxZGQzOTg0NiwgMHhiNzI0ZjkxMSwgMHhlYmY3MzI3NywgMHhiMzhmODAxMSwgMHhjMjEzNjcwNiwgMHhhZTY0M2M3NywKLQkweGVkN2UxMTkxLCAweGY3NTdhMTQ2LCAweDc0Mjg1ZjIwLCAweGM3ZjRlMDUyLCAweDdhMGY3OTRmLCAweGZlMWU3ZmNkLAotCTB4NTdhMmU5NzgsIDB4MTMzZTAyNzMsIDB4MmIyYTIyZDgsIDB4NzllMWJkZjMsIDB4YWU1ZTBmZjYsIDB4NjliZGY5ODMsCi0JMHgxNDdjOWRmMCwgMHg2ZmNkZWJlNCwgMHhlYjM3MzZjYywgMHgyMGNkZjM4MiwgMHhiYzNkMTJlYiwgMHhkOTkyZmY3NywKLQkweGIzZTAwNzM2LCAweDA1MWY4MTY4LCAweGIzMmU3NzJlLCAweGNlYmViMTliLCAweDhhOTY1OWVjLCAweGUwNmFmNjc0LAotCTB4Y2ZlODhmY2EsIDB4N2YxNzRjNTgsIDB4NWVlYjMxYzUsIDB4MmFmYjMxNTQsIDB4M2Q1NmI2ZWMsIDB4NTdhNDg3YWQsCi0JMHhjZjUwYzJkOCwgMHhhYjlmNjg2NiwgMHg5OWM0ZTVlNywgMHg1MGE1OWViMSwgMHhkY2U4Zjc2ZSwgMHgzYzZmMTgwNiwKLQkweDM0NzM3NWU4LCAweGVmZTc0ZmJlLCAweDM4MjMwYjU5LCAweGMyMGIzMTQ3LCAweDkwMDExNTU5LCAweGJiYWFmN2MyLAotCTB4ZDFjMDNkZDIsIDB4ZDk1YmZlYWMsIDB4N2RkZjA0MWQsIDB4MGZhNGMxYzUsIDB4YzE2MDMyYWEsIDB4ODNlZmMyY2IsCi0JMHg4OTZlZmJlOSwgMHhkNjJlZTM4ZiwgMHhkMzU1YjhkMSwgMHhlYWE4ZmViOSwgMHg1M2I4ZjE2ZiwgMHg1NGNlYjI3MSwKLQkweDhkYWFmN2U0LCAweGQwNDg4NGY2LCAweDViMzI4OTIzLCAweGE0N2EwYjU0LCAweGYwY2ExNTJhLCAweGVlYzY1ZDhjLAotCTB4ZjRjNDdkNDMsIDB4YzNkM2UxZjYsIDB4NzhmYmYwYmEsIDB4MTFkZWI4ZDgsIDB4ODRiNzFmYzAsIDB4OTZmZTc1ZjMsCi0JMHgyYWY5Y2NiNSwgMHgyOWI1NjNkNiwgMHhkNTc1ODdkMywgMHgwMDAwOGE4YiwgMHhkNDMwNWViMCwgMHg1OTZlZmU4MywKLQkweDYyODZmNTBkLCAweGFjMmY1MDdmLCAweDgzNzYzZDdiLCAweDY4YTdjNDc2LCAweGFjNjA4YzQ3LCAweDlmMTFkODU4LAotCTB4ODI5OWRkNmUsIDB4OWIyN2M0NzYsIDB4YTllNGE2NzcsIDB4ZDg5NDVmZWEsIDB4YmZkNzFjMWMsIDB4YmM2NTZmN2QsCi0JMHg2NmVjNjdjYSwgMHhhMDkyNmYxOCwgMHhmOTg3MjRmYiwgMHg1MGViODQ5NCwgMHhlNzdiNDRmYywgMHgxYTdjODVmYSwKLQkweDAyMzViZjYxLCAweGVmOTA2MWY1LCAweGI0N2JhNDQ1LCAweGY5MGU3N2QxLCAweDYyNjFiZDhhLCAweGEzYWUxOTliLAotCTB4MWE1ZDcyYmUsIDB4Zjc4NzZmYWYsIDB4MWJjOGVmZTUsIDB4ZGI3ZTAzNTcsIDB4ZGJmZTM4NjIsIDB4YmUwNDE5NzYsCi0JMHgyZGZmOWU1YiwgMHgwYzM0YWY5NCwgMHgzYzYxYWI2MCwgMHgwMjMxYmMxNywgMHhkNzFjYmJmZiwgMHg4NTNkNzAyYSwKLQkweGJmY2UzMzNmLCAweDU3MTEyODU0LCAweDU1ZDk4OTgzLCAweGZjMWI2MGViLCAweGM1ZDk5NDU3LCAweGQwNGNlZDJmLAotCTB4ZTg4NDIxYjcsIDB4MWIzNzJlNWIsIDB4NzVjYWZmOTEsIDB4NzA4NzVkOTIsIDB4NTllYzFjMmMsIDB4YTdlOTc1MjYsCi0JMHhlOGFmNDUxMiwgMHgxMzI5NzJkOCwgMHgyNjJjZWRlOSwgMHg5ODI3YmNiZSwgMHhmZGYwOTY2ZCwgMHg4MGM1ZjRlOSwKLQkweDlhZjM1MmFmLCAweGExOGY1YzY2LCAweGQ3MDkwMWRlLCAweGI0MDdhNDFjLCAweDUzZWQ4ODVmLCAweGJjYjNlM2JiLAotCTB4YWQ1NGUwMGUsIDB4YjRkYmE1ZjcsIDB4YzY2NDJmNzAsIDB4MDc4NGVmYWUsIDB4ZDdjYmM5MzcsIDB4YzQxNGU3MDYsCi0JMHhiNzMwNTk2YiwgMHhjZDRiMmU0MywgMHhmMDNmMDgzOSwgMHhmMDE3Yjc5ZCwgMHgyNjQ5YWZhOSwgMHhjMGM0MjZiZSwKLQkweGJlOGE3OWY4LCAweGRjN2NlNmE5LCAweGIzYzdkNTVlLCAweDA5ZTdiZTA0LCAweGNhMzVlNWJhLCAweDBiM2MxMzVlLAotCTB4NWE3YmJjZTMsIDB4MmQ0YWRkYjAsIDB4ZmJjNzRiMWQsIDB4Mzk1MmVhMGUsIDB4MWVhMzhlMWUsIDB4NGRjMTUyYWYsCi0JMHhhNzA1NGU3YSwgMHhhMjVjYmRkYywgMHg3ZDQ1ZWVmNywgMHhjNjNmM2ZlMCwgMHhlYmE5MzViZSwgMHg0YWI2ODlkZCwKLQkweGU3MDlmMjM2LCAweGY0OTU2NjdiLCAweDA3OTdkMDY2LCAweDRjYTE1ZDA1LCAweGU2MjQ5OWYzLCAweGY1ZjIzNDY2LAotCTB4MTRlZjlmZGIsIDB4ZDA4ZWFlZmMsIDB4OGViYTM5NzEsIDB4YmU0MTJkYmMsIDB4YmNiZWI5OGUsIDB4YjNmZWY1MjksCi0JMHhkZmY1NmRlNCwgMHgwNmVjNmYyOSwgMHg4MjY3YzFkNywgMHhmODA4M2I5OCwgMHhkOGNhNWFiMywgMHhmYWIyN2E4YiwKLQkweDQ2NWI2NjM2LCAweDM3ZWJiNTVmLCAweDA4ODY3M2FjLCAweGMwMzVmZDdjLCAweDg1OTg3NDAzLCAweDlkNzkwNmZmLAotCTB4YWQzZjdkMWQsIDB4ZmM5NzYwN2IsIDB4OWNkOWY1MTYsIDB4Nzc2ZWMyMDEsIDB4MjQyNGJiNzAsIDB4OWIxOWYzOGIsCi0JMHg2MWZkM2NjMCwgMHgxY2EyNjEwYSwgMHgyM2Q5YjkzMiwgMHgxZWI5MWYwMywgMHgwMDY3NjVjZSwgMHhmOGZiMzExZiwKLQkweDMyZjVmMmZiLCAweGU1MTM3NWQ5LCAweGE4NjVkOGJmLCAweDY1OTQzMWRiLCAweDVjYzgwNTgyLCAweGQ1M2Y0NDE3LAotCTB4YTYzM2Y1MTIsIDB4MjRmZWUzNzEsIDB4NmU0YzQ3MjgsIDB4NzAxNjQ2NGUsIDB4NjY3NGJjM2QsIDB4OWMwMjA4ZWIsCi0JMHhkMDU4YjFlOCwgMHhkZmUxZjE2MywgMHg2N2M1YmQ1MCwgMHg3ZDgyNzk3OSwgMHg1Nzk0MmY2MCwgMHg3OTk5MjFkNywKLQkweGExYzc2MWEwLCAweDJmMmM3YTk5LCAweDI4YjEyNWQ4LCAweDEwNGNmNzE4LCAweGQ1MDFhMzk3LCAweGM5NTU2NjNhLAotCTB4MzA0ZjIwZTMsIDB4NzVmOGFhYjMsIDB4NGQ0ODk2YzgsIDB4YTI2ZDU4NzksIDB4MGQ0ZGZlYTYsIDB4MzNkZjM1N2QsCi0JMHhkZjM1ODNiYywgMHhkNGNhMWM0NywgMHhjNzliYjM5NCwgMHgzYzhmZWE2OCwgMHg4ZjI5YWI5ZSwgMHhhOWEyOTk2ZSwKLQkweDBjYzJmNjNmLCAweGJlNDdmOTRkLCAweDk5ZjUzNWJiLCAweDEwM2NkZWRiLCAweGU4MjA1MGYwLCAweDhhMGZmOGFmLAotCTB4NWFlNWJhZmUsIDB4MmMzZGE2OWUsIDB4ZTgwOTVlYzcsIDB4YjE1ZmM4NWEsIDB4YzgwYjM1ODIsIDB4MmQwNzE5M2YsCi0JMHhjODk2ZmRkNCwgMHg4ZGEyMGU2YiwgMHhmNWE5NTg1NiwgMHg2YjU0MTY0ZiwgMHgxYjBkYzVjYiwgMHg1NjA5NDA4ZCwKLQkweDJmYmVkMWVjLCAweDBmMmRhMmQ5LCAweDQzYTc5ZTg4LCAweDAxMWIzYWJlLCAweGY4MjBjOWZlLCAweDQyOGIxNDQ3LAotCTB4MmVjOWVmZjksIDB4NDRlZmE3ZjEsIDB4MDA3NThmZTEsIDB4N2U4MDk4ZGYsIDB4MzNkZmFjZTksIDB4N2QyMzQ3MzcsCi0JMHhkZjAzY2MwZCwgMHg3ZTA1YjAzYiwgMHhmNWMxYmUwNywgMHgwM2QwZTNhMywgMHg4NTIzZTQzYSwgMHgzMjc4ZmVkZSwKLQkweDFlZTk2YmM1LCAweDNkZDJkNTY0LCAweGVlOTZhMDY0LCAweGRkMmQzNjYxLCAweGQyZDI4ZDdiLCAweGE1YWVjMjNkLAotCTB4MmQ2NGQ0N2IsIDB4NWExYzYzZGQsIDB4ZDFjZGM3YmEsIDB4YTljMTNkZDIsIDB4OTE1MjdiYTUsIDB4OGJjOWVlOTYsCi0JMHhmM2VmNzRiNCwgMHhhOWFlOTZiMCwgMHhiZTVhODVlZSwgMHhjNTAzZTNmMCwgMHhiOTViNGI0ZSwgMHg4ZTllYWZkOCwKLQkweGUwZmNkNGU5LCAweDQwY2E5YTI4LCAweGZjYWZmNGNmLCAweDdmZmZhNmI5LCAweDQ1YTQzZjM2LCAweDkyMzUzZjBhLAotCTB4N2U0NzdlNDUsIDB4NjQ1ZmJkODYsIDB4NDZmZjc3NzYsIDB4N2Y2YTZiZDEsIDB4NjVkMzlmNDIsIDB4ZWZhNGY2N2YsCi0JMHhkM2NiZDliYSwgMHg0N2EwOWM3OCwgMHhkYzlhZDk3YiwgMHhmNTI3MmY2NSwgMHg5ODI3OTdjYywgMHg0YmQ2ODliYiwKLQkweGYwODc0NmI2LCAweDcwZTE2NWRkLCAweGEzNTdjMTVjLCAweGQ1OWJiYjE5LCAweDEzZGZiMDFhLCAweGMwMTQ2NzUwLAotCTB4MDNlNzAyN2IsIDB4OWFjYmRmZTMsIDB4ZTY1Y2ZkZTksIDB4NTk5M2E3YTMsIDB4NjNjY2Y4OGMsIDB4MzAxNjdhMzYsCi0JMHhlOGE3M2QwNywgMHgxZTIyYjc5YywgMHgzOTJkY2Q0YSwgMHhjZWFmNmZhOCwgMHg0MjUyN2EzYiwgMHgyMTQ0OGVhMCwKLQkweDJmMjNkZmQwLCAweDRlYTc1YTZlLCAweGQ5OTljYzU3LCAweGQ2YjE4ZmRhLCAweGI0NGNlNzBhLCAweDE2ZTMzYmE3LAotCTB4NTY4ZDY2NzYsIDB4YmM2ZjJkZTEsIDB4N2E4ZjUwMzQsIDB4YTFiNjBlNTYsIDB4YTc3Nzk0M2QsIDB4ZGU2Y2Y2NDQsCi0JMHgzNzM5ZmM5NywgMHhmZTQzYWY5MiwgMHgyYjBmNjVjZiwgMHhmZTE0YWI3OCwgMHgxZTQzZjcwNywgMHhiYjBhYjQ4ZSwKLQkweGM5NDMzOTllLCAweDcwNTliM2JlLCAweGI4ZmU4MDVkLCAweDkxODJmZjNkLCAweDgyNTgyZWVjLCAweDJlODBkN2Y1LAotCTB4NGY0ZTI0ZGIsIDB4NGRkYTJiYTQsIDB4N2NjY2Y0YzMsIDB4OTg0M2NhMGQsIDB4MjdjY2ZjOTMsIDB4Nzg5MmEwZjQsCi0JMHgxZmIxODMzZiwgMHhhMGRiZGExNywgMHg3NTIzNGEwMiwgMHg4ZTM5NGUzNCwgMHgzY2Q0ZjAwNywgMHhhYTIwY2NjYiwKLQkweGU5ODEyNmFjLCAweDlhZmI0MjA3LCAweGYxMmNhMjI1LCAweGJjZTFmZTMyLCAweDQ1NGNkZmM5LCAweDRkMmI2ZDc4LAotCTB4NDg1OGFmNjQsIDB4NGNjZDkyM2UsIDB4ZTNkYzkxYzQsIDB4NDkzZWYwZGMsIDB4ZWQwOTBkMDYsIDB4YmZjMDFiZDYsCi0JMHg2Yjk0MjQ4OCwgMHgyMTk4YzNlNiwgMHhmYWY5OWNlMiwgMHg5MzRjMTU3ZSwgMHg1MWY4NTM5ZCwgMHgwYTJmN2MyNiwKLQkweDFkYmZkZWI0LCAweDk1OTVlZGM5LCAweDQwZWZjNzE1LCAweGNkZWYyOTdhLCAweDg0YjMzNzdhLCAweGY3ODI1ZWEyLAotCTB4ZWIzMWI5MmEsIDB4YjBmMTFkOTksIDB4NTMzZGMyYTIsIDB4YzhkOWZmNWQsIDB4ZjFlN2VhNDgsIDB4NGUyZDhiZGUsCi0JMHhkZjcyM2VmOCwgMHg3MjA0MjhhMiwgMHhkOTczOTA2NywgMHgxMGExNjU4ZiwgMHhlOTQ1ODk2MiwgMHgwNjlhZDQ2ZiwKLQkweDFlYzNmYjk5LCAweDkxOWFmZDE5LCAweGQ0ZTdmNWM3LCAweDJkZDFhNDcxLCAweDBiZDhmMmRhLCAweDBmNDJiMmRhLAotCTB4YzE3N2YzNzYsIDB4ODI2NTA3MjgsIDB4MDBmMTRjYWYsIDB4MTk1ZWFhOTcsIDB4NjdjMGY2M2EsIDB4MGZkY2YxNjUsCi0JMHg4NGMxYmU2MywgMHgxYjkwYTM3NywgMHgwZGU0OWQ1MywgMHhjMTMwZjkwMiwgMHgwYTYxOTI1YywgMHg5Y2NjMGMyYiwKLQkweGVkZWI3NDgwLCAweDZlNWRhMGI0LCAweGQwZWJkNDRjLCAweDJmZjI2MDNmLCAweGY4MDBjZTZjLCAweDc4YTY5ZTUzLAotCTB4N2ViNTU1ZmQsIDB4MTdlYTAzZjksIDB4NDhkODZiYjAsIDB4ZGZmMTEyMzYsIDB4NDFlMDJmMDksIDB4MWEzYTc4MDIsCi0JMHg0NmFlMzZlMiwgMHhjZGNjOWM3OCwgMHg2MTM2MDNjYiwgMHhiM2ZlYTdiOSwgMHg3YTU5YmVjZCwgMHgwYjZjYzExMCwKLQkweGJjM2ZjNjdmLCAweDQ0N2U5Njc0LCAweGEzYWY3YWY3LCAweDY0ZTMwNzVkLCAweGQ5M2RiOGViLCAweDhlNWNkZTlkLAotCTB4NmJiM2U5M2EsIDB4MDE2NDZjODEsIDB4YjBkNTUzZTgsIDB4N2ZkNGUzZmYsIDB4MjU3OTNlOWMsIDB4NTFlMjJiYTksCi0JMHg2ZmMwOTJlZSwgMHhjZDY5ODc4NywgMHhmODAwOTYxMiwgMHhjNzVhYWMyZSwgMHgwOTJlM2Y5MCwgMHg4ZjMyNWMzOCwKLQkweDI0ZDdiMWMzLCAweGI1ZThhN2FhLCAweDEwMDIyYzk3LCAweDg3NWExYWYzLCAweDYyZjA0NDA3LCAweDBlYjcyZjdhLAotCTB4NmJkMmYyZTUsIDB4MmZhZTg4YmQsIDB4ZjE0NzRlZmUsIDB4YTNjYzQxYjgsIDB4NjEwY2Y5YzMsIDB4OGMzZWZhNWUsCi0JMHgyNmY5NTBiNSwgMHg2NzI4MTUxNCwgMHhkYmYxMmIzMCwgMHhiYjIzZTYwOCwgMHgyYjVjZjQxMSwgMHhkOTcyYjllYSwKLQkweDI4MjBiYmY5LCAweGJlNzY0ZTVmLCAweGU4NGU3YTQ0LCAweDRmYzE3NGZkLCAweGFmN2U4YWU5LCAweGRkYzdmYmQ2LAotCTB4ZjhhNDhkM2UsIDB4YWQwYjZmNGEsIDB4NTRjZTQyMjMsIDB4M2FmODI2NzQsIDB4N2Y5MTQ0OGUsIDB4ZTc2OGUyMDksCi0JMHg1NDRkYjRlNSwgMHhjNjg4MzAzZSwgMHg1ODdjMTQyOSwgMHg4ZDg4ZWM5OCwgMHhjNWViZDE1NCwgMHhmNTMzNmI4YSwKLQkweDc4MDJmOTJhLCAweDViYmYyOGVjLCAweDRkNjY4MjJhLCAweGEzOTdiZDUwLCAweDMyMDcxZTM4LCAweGExOGZkNWRmLAotCTB4MjE3NWY5ZmYsIDB4ZTA0N2I0MzYsIDB4Zjk3ZWM2OGQsIDB4NDcyOWM5MGYsIDB4NWI5N2JjMDEsIDB4OWEzYWY1YWMsCi0JMHhmNTBlYTU2NywgMHgyNGVmZDk2MiwgMHgzM2MwMWNmNiwgMHg2NmI5NzE4MCwgMHg3MDM1ZTJmZCwgMHg5ODQ4YTk2ZCwKLQkweGY5ZjQwMTM1LCAweDBmZGM5MTdiLCAweDFjN2NjOTcxLCAweGUyODQzM2I2LCAweDhjYzk4NTMxLCAweDg1M2Y0Mzg1LAotCTB4N2M5MWE3YWYsIDB4MGJkMGM0MGQsIDB4Y2MzMmIxYzIsIDB4OGMyZjc2ODMsIDB4ZGQ5NTE1MWIsIDB4ZjFmZjFlMWQsCi0JMHgzNWRmNDNkZiwgMHhiNzMzZjQ5YiwgMHgxZWY1NDNiZiwgMHhkZDk5NzNmNCwgMHg3YmM3NTU2ZSwgMHgxOWJiMGI1NiwKLQkweGUzOTIxM2ZjLCAweDNiOWZkMTYwLCAweDdhZmY3MTk3LCAweDg0ZmI4ZjMwLCAweDI5NmFlNmIyLCAweDYyZjVlN2FkLAotCTB4OWE2NTFhMjAsIDB4MDE0YzAyZjUsIDB4MzZjZTU3MTgsIDB4MTZhZTVjOTMsIDB4NDdhY2M0NzIsIDB4ZTE4ZmU4YWQsCi0JMHgzYTE4NDY3MywgMHg4ZjBlOWNmZCwgMHgxY2ZiYjE4NywgMHgyNGZkN2EyYSwgMHgzZjBiYWY4YSwgMHg2YTc4ZTI4OSwKLQkweDA3N2I3MzM3LCAweDJhMTlmNWUzLCAweDMxYWYzODdmLCAweDI1MWJlYzlmLCAweGVjMmVkZmJlLCAweDk1MDNmNmM5LAotCTB4MjdlOGMxYjksIDB4YmUzODhhNTcsIDB4MDU4YTlmYjAsIDB4ZmE2ODJkMmIsIDB4NGFkNzhlNGQsIDB4M2U5MTU4N2QsCi0JMHhmZTdkZTJmOSwgMHg1MzVkYWQ0YSwgMHhmNjQ5YzViOCwgMHgyNGVjZjVjZiwgMHgwOWM1MTRjMCwgMHg0OWE0ZWRmZCwKLQkweGQ5NmY0MjUxLCAweGVmYzYwNjU4LCAweDNiNDlhY2NmLCAweDMwN2E4YzE4LCAweDFlMzA1OTk1LCAweDlhYmYyNDlmLAotCTB4ZjExNDI4YjEsIDB4ODcxY2FjZTAsIDB4NGY1NDNkZjIsIDB4NjdhZmViNzIsIDB4MWE4NzA0MWUsIDB4ZTI0NWI5ZTksCi0JMHhlN2Y3NzRmNCwgMHhkOTJkYjRmMSwgMHhiMmRjZWZkYywgMHg3ZjVhNjNiNywgMHg1OGNiZTdlOCwgMHhkZGE1MmY4ZSwKLQkweDZhMDZiMTk3LCAweDM4ZTgyOGY3LCAweGQ4Y2I1ZjdjLCAweDZlN2U0MGU0LCAweGM5NzdjMDkxLCAweDdhOGIyMDk2LAotCTB4OGRhYjJhN2QsIDB4MGQ1ZDk0ZDAsIDB4N2FmNTE2MDksIDB4MmMyOGY2NDAsIDB4NGMxNDZjYWEsIDB4N2UyYmE3MjEsCi0JMHg3MmQwZDY1MywgMHg3NjhhYzQzMCwgMHhjYTAxNzM4MSwgMHhiZmMxZmI0OSwgMHgzYTI1MGY4NiwgMHhmZjUwNzJmOCwKLQkweGY5YzcxODNkLCAweDAyYjZlMTEzLCAweDlmNzQzYjNjLCAweGZmZDM1NWNkLCAweDgwYmQyOGQxLCAweGZmYTdhZjliLAotCTB4MmQ3NjVjMzAsIDB4MWU4Nzk3NWMsIDB4ZTFjMjlkOGIsIDB4ZDVjMjM5ZmEsIDB4OGIxZDNkZTYsIDB4OGNiODA1ZjQsCi0JMHhlNDc2Yjg2YSwgMHgzZjlmZjhmMiwgMHhhMWZjOWU5ZSwgMHg4OGY1NjRmMCwgMHg4N2RmMzVhNywgMHhjMGM2MWRhNywKLQkweDc0MTI2Y2YwLCAweDZlODBmOTdiLCAweGZhYzAyN2IyLCAweGNmYzg0OWI0LCAweDFhZWYwYzNmLCAweDZiNmRmYzNmLAotCTB4MTU2MThkOWUsIDB4ZTExMzc3ODAsIDB4OTYzNWJlMmYsIDB4N2YwMjE2NzIsIDB4ZTA0ZTIyYjUsIDB4YzZmYTEyY2UsCi0JMHhmZDAzYmEwNiwgMHg3YTQ2OGZiYSwgMHhlYWQ0MGY1MCwgMHgyYzU0ZDQ1OSwgMHg5NmQ4MTRlNywgMHg0NmFmM2NjMCwKLQkweDVkYTBmYjM4LCAweGZlMjFlYWU0LCAweDdmODA5MWYyLCAweDcwMTRhMjQ3LCAweGVmODgxZmZlLCAweGY1ZTQ4ZjdiLAotCTB4ODlmZjc1YzEsIDB4ZjI4NjI2ZTMsIDB4MDllYmUwYWYsIDB4MTMzOWFkNGIsIDB4ZTZmYTM3ZmIsIDB4ZjU5Y2IwZGIsCi0JMHgxYTFhZDliOSwgMHhlZjFkN2ZhMCwgMHhmMjdlNTdmZiwgMHgzY2FmZjRhMSwgMHhjODFhOGRkZiwgMHgwMWQyNDdlMywKLQkweGZiMjA5NDE5LCAweDlhYzdjZGQ1LCAweDdmOWNjM2M3LCAweDlkMjdhNTk1LCAweDc5ZTMwZmZhLCAweDc5ZmUzNmI5LAotCTB4NzYyYzdiZDksIDB4Nzc4YmU3MWEsIDB4NGI5N2RmNTEsIDB4ODc2ZmMzNjcsIDB4YmRmMjRiYjIsIDB4OTdmMzE0MzMsCi0JMHhkN2NkMjc0NiwgMHg2ZDg5OTFmNSwgMHhiY2U3NjAwYywgMHg5OTQyZjgyMSwgMHgwNTdmMzI5ZiwgMHgxNTFmYjBlZSwKLQkweGVlMDA5MWY0LCAweDVhMjYxM2IwLCAweGY1MTAzZTBjLCAweDk3YTA3NTk1LCAweDVlNzFhM2IwLCAweGFjZGMwZWI0LAotCTB4NmNhMDcxZTcsIDB4NTdmN2QxM2QsIDB4MWM1MGM2YTMsIDB4MjdjODg3NjgsIDB4MjkxYjQ2ZmEsIDB4ODcwZmU5NWUsCi0JMHhmZjhmOWEyMSwgMHg5YmY3YjVjNCwgMHg4ZDNmNjJmYiwgMHgzM2U3OGEwNiwgMHg0Y2ZjNGI3ZCwgMHhkYmQ3MTdlMCwKLQkweDk0Mjc4NzdhLCAweDhlZjI2NmY4LCAweDQ3NjNhNDUwLCAweDc1M2MwYjc4LCAweGE3NmEwNmQxLCAweDcyODdiZDQzLAotCTB4OGM5ZTRkNzEsIDB4YzhmZGFlN2EsIDB4YzU1OTE2ZTcsIDB4Y2NiNDcyZTcsIDB4YjlhYzZiZTMsIDB4YmZmNDJjNzksCi0JMHgzMDU5OTMzNiwgMHhkNjJhMWNiZSwgMHhhZDIzZDBkZiwgMHhlODdmMDg0NSwgMHgyNDliOWZhOCwgMHg0YWY2ZmM1NSwKLQkweGFkZGE4OTk0LCAweDZkNjJmYTM1LCAweDA5YWI5ZmQwLCAweGY3OGEwNTFjLCAweGIxYjExOGI3LCAweDg1OTcwNzgyLAotCTB4ZWIzY2ExZTMsIDB4ZTg2NmU4MDAsIDB4NDc2MGQxYTcsIDB4MmI2OGU1NzgsIDB4NzcwMGE3ZDcsIDB4MWUwZmJjM2QsCi0JMHgxZjI1YjlmNCwgMHg3OGMxNjdiZiwgMHg4N2RhYmI3ZCwgMHg4MzNkMzg1OSwgMHg0MzllNjFiMywgMHhiM2RlNWY5MSwKLQkweDk3YjNjMDE0LCAweGRmMDgxY2M0LCAweDNmNWNkMTgzLCAweGM0NTU3MDJiLCAweGZjMDJmZDcxLCAweGYxMTQzMjFlLAotCTB4N2NhM2FjOWEsIDB4NjZmYWUzZWEsIDB4OTZlM2RmYzIsIDB4OGMyNTk2N2UsIDB4NzljNzZlZjAsIDB4Mjk5YjQ2ZjksCi0JMHhlZDFkNTZlZSwgMHhmOWM2ODk4YywgMHgxZTFjZDgxOCwgMHg4Yzc2NmNmNywgMHgzMjU4N2MyNywgMHgwNzAwMjM1NiwKLQkweGYwYmQ5MTA2LCAweGMzOGJjMTMzLCAweGIyMWNmMzU4LCAweDE2OGNiMjBiLCAweGY1OTQ0NzVjLCAweDhlZGU4YmY5LAotCTB4Y2QzNzY4NWUsIDB4ZDA3NmU2OGQsIDB4ZDc0MmI3ZjksIDB4YzBhYmJhZTAsIDB4MmMwMmI2NzcsIDB4Yjk1NzYzM2EsCi0JMHg4NDk4ZTZkMCwgMHg5Y2NmOTk3OCwgMHhlNzhlNTAyYiwgMHg1NTFlMDE1NywgMHhjMGRlN2VmYywgMHgxNmJjMmRmYiwKLQkweGFhNTFiY2NjLCAweDM2ZWVhMzc2LCAweDZiYzJiYjYyLCAweDc2MGJjY2UxLCAweDVlMjBmOWY3LCAweDVmMTg3Y2VmLAotCTB4ZjE4YWM2Y2YsIDB4MzNmYzE1NmYsIDB4ZWEwN2ZhMzMsIDB4N2M5ZjliMzEsIDB4OGJmM2Y4NmQsIDB4OGQ4ZjVjNzksCi0JMHg0OTk1YmM0NSwgMHg3YmI0NDYyZCwgMHhhYmY5OGVkNywgMHhiM2U5ZWQxMSwgMHg0ZGU2MTYxNSwgMHg0Njc5YmVmZiwKLQkweDljNmFhZjMxLCAweGNjZDc3YWNlLCAweDNjYTUxZjM0LCAweDViMjRmOTE3LCAweGMyNTBkZjNkLCAweGY4OGFkOWMzLAotCTB4NDkzMWUwZWIsIDB4ZmVhZWM3ODMsIDB4ZDhmMDZhZmIsIDB4MWE3NGZmYmQsIDB4YzBjNTZjZmYsIDB4YTQzZmY0ZWIsCi0JMHgxYWFkZmU4NywgMHhlZGZhYmJmOCwgMHhlZGI2ZTM0NywgMHgwNDI5N2JjYiwgMHg3NzlmN2JmOCwgMHgzMWJiNzNlOSwKLQkweDY0YzdiYjFlLCAweDM3M2NhMTMxLCAweDNmMjJlNmQ0LCAweGJjMGVkZDVlLCAweGQwZjRmYzA0LCAweGZmMjhhZjllLAotCTB4YTMyNmQwZjgsIDB4Mzc2OGM3MGQsIDB4MDJkYWU2ZjgsIDB4Y2M3ZWVmZTgsIDB4ZWE4ZGQ2ZTIsIDB4YTc0NjE2N2EsCi0JMHhkZmZkOWQxMSwgMHgwYjFlZjU5YiwgMHgwM2NkOTVjNiwgMHgzNzVjMTZmNSwgMHhiM2Q5YWNjYywgMHg0Y2Q3Zjg5NCwKLQkweDNmODk0NGZhLCAweDhiNGVmZDI4LCAweGNjZmEzNTkyLCAweDVmZDlmNDI1LCAweDkwNDdjZWY1LCAweDVmM2FlZGRlLAotCTB4ODlkYTFlN2QsIDB4YjcwZjNmMDMsIDB4NDExMTdmOTIsIDB4M2YxMmJhNzYsIDB4ODkyMzgzZDAsIDB4Mzk4OWFkNzYsCi0JMHhkZTRkZTYxOCwgMHhhM2JhNzU4ZSwgMHg4MmRmYmZhMSwgMHg0MTFjNjJiOCwgMHhjNGUzNTYxZSwgMHgyMjkzZmI3OCwKLQkweDUwNjRmZmVlLCAweGE1NGRiYzczLCAweGViNDVkNjk3LCAweGIwOWQ5ODdmLCAweGIzNWY4ZmQyLCAweGNiZDE3YzNmLAotCTB4YzQ3NTgzZDcsIDB4MmJmMzcyYWYsIDB4YjU4YmJmMDgsIDB4YzU1Yzc5MTgsIDB4NWU2N2Y2NGEsIDB4OTRlM2MxZDYsCi0JMHhhY2ZjNTIwZiwgMHgwNWZiZmU5NSwgMHhiZmQwMjM5MiwgMHhlMTFkZTI1MiwgMHg5YWUyYWNlOCwgMHhkNjhjMzZiZCwKLQkweDVlMTBmY2ViLCAweDI4YjdmZmNlLCAweDhhODE5ZmNhLCAweDZhYzQzZDI2LCAweDE2MmY5ZTY1LCAweDMxMGU5NjcxLAotCTB4ZGFmMzc2ODcsIDB4ZGExZmY0MTQsIDB4YTNhYjFlNDUsIDB4NDZlODNmNzEsIDB4NGZlY2FlNzgsIDB4ZjM3ZmNmNzQsCi0JMHg5ZjY4NjlkMSwgMHg3OWUzM2U4MywgMHg1YTMwYTZhYiwgMHg2MjRkZjIyNywgMHg5MTA2Mjc5YywgMHg5MTIzYjE3ZiwKLQkweDdhYjU3ZmRiLCAweGNhYTY3ODZmLCAweDc3YmM3YzFlLCAweDY4NWY3MzZlLCAweDdmNjU2OTc3LCAweDVkY2JkYTFkLAotCTB4MGVmYmNkZmEsIDB4MzlkYWU3ZjYsIDB4NTc0ZGY4ODgsIDB4MzllOWU4M2YsIDB4ZDc0ODk3MTgsIDB4ZGNlYmIwZDksCi0JMHgzMWVhYWZmYSwgMHgxNmI2NTBkZSwgMHhlZjE4MDFlYywgMHhhNDY5ZTgxMiwgMHhjNGZlYWU5MywgMHg3MDVmNWM3MCwKLQkweGNiM2Y1YzZjLCAweDlmYzg5M2VhLCAweGQxZjEwZmNjLCAweDYwYjI5M2ZlLCAweGVhMDViYTViLCAweDRkOGZkN2U1LAotCTB4ZjMzZmJlNDcsIDB4NWMxNGEwZTQsIDB4NThjNzRlMGYsIDB4ZGM0ZjMwNTMsIDB4MTkyMDI0ZmUsIDB4NjliYTc5ZTYsCi0JMHg2YWJmN2YwMCwgMHgxN2Q0NzBlNCwgMHg5YzQzNmI2MSwgMHhhZGZjMDA5ZSwgMHg5NWZjZjdlOCwgMHgxNDc2NzIyNiwKLQkweGNjNDhlZjNhLCAweDdjNDA2YjY4LCAweDdlOTMzMjBjLCAweGY2NDUwNTA3LCAweGRmMjFmZTUzLCAweDE3Nzg2YjBjLAotCTB4NDczZjE1OWUsIDB4YTE1YWM3YzEsIDB4M2ZmZTk1NGYsIDB4Nzk1MTdhMTYsIDB4ZDI5OWZhYzIsIDB4MzFlZjcwODIsCi0JMHgxY2NmZmQxMSwgMHhjMzhkN2JkMSwgMHhmMWIyMWVkMSwgMHhkMDg1NTZmMSwgMHgwNzMwZjk3OCwgMHgyOWNiYzgwYiwKLQkweDhlOWQ4ZWIxLCAweGJjNDcwZWI0LCAweDI4MzJlYmU3LCAweGU0NDNiYTBmLCAweDdjNTk1NmU1LCAweGU0MWViOGUxLAotCTB4MTk0YWQ5ZWIsIDB4YmU2MmFmZWEsIDB4ZjhkNTA4ZjAsIDB4ZDdiMjhkZjksIDB4ZmJkZGY0NDgsIDB4NGQ1ZmY5MGUsCi0JMHhhYmU5MGM2MSwgMHhmYzhjMzM3YiwgMHhhNjliZDc3MywgMHgwMThmNjg0ZCwgMHg2ODIxZGRmZSwgMHg5MTM3MWUxNywKLQkweGM5YWZiMmRmLCAweGZiNjE3NjQ0LCAweGQ3ZjIxMDg5LCAweDQyYzNmMWZjLCAweDNmNDgyOTdkLCAweDQ0NDk5YmQ3LAotCTB4ZGY2NGY2ZGYsIDB4MGM4ZWRjZjMsIDB4NjgwZjk4NjIsIDB4ODkxY2VhM2YsIDB4ZDE2OTQyNzQsIDB4OWVjM2UzYzUsCi0JMHhkNWNkNzY4MCwgMHhkYTJmMjBhNiwgMHg2MGY0ZjAzNSwgMHg2YWNkZDA3YywgMHg5ZWZkZTllMiwgMHgzNDdlODYxMCwKLQkweGE4NjQzZDNjLCAweGUwZjE3NTQ5LCAweDEwODJhMGIzLCAweGZkYTk5YmVkLCAweDAxY2UyOTQzLCAweDRhMWYxZmE4LAotCTB4YjE0M2ZlODMsIDB4YmJkNTJiN2QsIDB4OTM3OWQ3ZGEsIDB4MTIyMWM3ODUsIDB4ZDQ4OTc4YzUsIDB4NWZiNzMyNmYsCi0JMHg4ZDM5ZjQ5OSwgMHhlZjg5ZmQwMywgMHg2NWRkZjRjZCwgMHg3OWE0OGU3MiwgMHgzNmM2MWM3YywgMHg2MTY3OTgwNiwKLQkweGEwYmNiNmE1LCAweGY2MmU1YjVhLCAweDViMjVjYjY4LCAweDc0NWY2NWI0LCAweDgxNGZkMTE0LCAweDdmNzNlMTViLAotCTB4NzBjNGE0YmMsIDB4ODdjMTQyYmIsIDB4ZDI3NjlmM2YsIDB4NjFmMDNhZjMsIDB4Y2JmMTAxM2MsIDB4NTcxZDM5MWEsCi0JMHg5MjlhYmEwZiwgMHgwZjJkZTM4NywgMHg5NzUzZTRkNiwgMHgzZTI3OWQzNCwgMHg5ZmQ4Mzc2YywgMHg3N2MwNzVjMSwKLQkweDkxMzZjMGQ0LCAweGQ1MDM2MGZlLCAweGY4ZmZiNmZlLCAweGU3YWRmM2RkLCAweGJjZjViZTQ1LCAweDI2ZGFkZjI2LAotCTB4MTYwYzJlZjQsIDB4NTA4NGYxOGUsIDB4ZTExYzM1OWIsIDB4YWQ0YmExZDgsIDB4M2Q1ZjIyZjUsIDB4YmU3YzQ0MTksCi0JMHgyMWNiZjcxNiwgMHg0MDFiYWRkZiwgMHgwNTQ0NTJmMCwgMHhmMGIzY2ZjNiwgMHhmZDA4Y2ZmMSwgMHg1NGM1ZTY3NywKLQkweDY0MmQzM2NhLCAweDRiNGZhNGI1LCAweDQ0YmVmMzk5LCAweDU4ODdlNzhjLCAweDU3ZmY5MDczLCAweGNkZmIwMmQ5LAotCTB4MjdiYWY4ZmUsIDB4MzRlM2QzODYsIDB4N2Q4YWM2YjMsIDB4NmZjYzU2NGQsIDB4ODBiZmUxMTQsIDB4NzRmZDQ1MDQsCi0JMHhkZmJlMjBmNiwgMHhkMTc1ZjQ4ZiwgMHhkNDgxMTM3YSwgMHhkOGNjZjdjOSwgMHhmM2ZmOTY1NSwgMHgwZDAwNzdjYiwKLQkweDM2NTVmZTExLCAweDY3YWUzODc3LCAweGRlN2MyYzE3LCAweDkxNTkzZjYwLCAweDlmMzI0NWJlLCAweDg4NzVmYTA3LAotCTB4MmYxMjBiYzcsIDB4ZDk0MmZhMmIsIDB4ZGYwMGIxMmYsIDB4OTg5ZTdjY2IsIDB4NTE4ZjJmYTcsIDB4YzdhZTM4ZmMsCi0JMHhmNzVlOTI1YywgMHhkNjkzZTgzMCwgMHhmMjM4NmIwOCwgMHhiNGFhZWI1MywgMHhiNzk4MjVjOCwgMHg2NmM2YjA4OCwKLQkweDNhZWNmMGFhLCAweGQwMjZiY2MwLCAweDA5NDZkNjVmLCAweGYwZGRiZjYzLCAweGYzOTIyM2I1LCAweDA4NWQ2ZmEzLAotCTB4OGVhZjJiYWQsIDB4ZjZhYjk5NmIsIDB4ODYzNWZmMTMsIDB4YzU4ZjkxZGIsIDB4MTZhNmZmNzAsIDB4NDBlYzgyNmQsCi0JMHg1YTc0ZTA3OCwgMHhjYWI0ZTgyMCwgMHhmOTMxZmNlNiwgMHgxNmY1N2U0YiwgMHhmNDEyZjc1NCwgMHhiOTVmN2JmMywKLQkweDJmMjk1ZmZiLCAweDBmYzU1ZWI1LCAweDhhNGVkZWIwLCAweDM4NWRlM2U1LCAweDM3NGI3NDY0LCAweGZiNGE1ZjkxLAotCTB4ODJlYjdjOWEsIDB4NzBiZjZlYzgsIDB4YWUzYTRhNjgsIDB4ODJlYjQ1NDMsIDB4MTU1ZjUxMjIsIDB4OGIxMzVlMWQsCi0JMHg4ZGI4YzhmNiwgMHgzYWUyYzU4ZiwgMHg2MjY5YjA1NSwgMHg5ZmUyNTMzYSwgMHg0ODJhM2UyYSwgMHgzZGEzYTdiMSwKLQkweGI2NTY3YmU0LCAweGQ1NDUzZjYwLCAweDRhYjVjMTMyLCAweDE2N2U2OTVmLCAweDM2YWI5ZmRlLCAweDI0NTQ5ZDkwLAotCTB4ZGJkNzNhZTAsIDB4MmY3ODhlMTksIDB4MTFiZDMzZDIsIDB4ZWY0ZTdlZjAsIDB4ZjAzYjI3MGMsIDB4MmZmYzk5NTksCi0JMHhiZDQwZjlmZiwgMHgwMGNjZmE2MywgMHhmYTBiMzI3OCwgMHgwMGI0OGJlMiwgMHg0NzU0N2JmYywgMHg2NjA4MmE3NCwKLQkweDM2ZTc1NzI0LCAweGI5ZWRmY2YyLCAweDU4N2RlNzY0LCAweDE1N2YwNTZlLCAweGFhYWQ3N2Y3LCAweDBlYjcwZTJjLAotCTB4NzNmNzhlZWQsIDB4ZGRmMTI3NjYsIDB4MDUxZjMxMDIsIDB4MjhlM2ZlYWYsIDB4YmM0NzZkNzgsIDB4ZTg3MWZkYTIsCi0JMHgyNzY4YzliOSwgMHg5MTkyOWViOCwgMHhjNmRlZDkzMywgMHg4ZTQ3ZTQyYiwgMHg3Mjc4OWE2YiwgMHgwNzVmYmUyYywKLQkweGQ3MTU4MDc2LCAweGRjZWZiZWM3LCAweDRhZDRlYjgzLCAweDkwOWRhMTk5LCAweGNiMTY5NGQ3LCAweDU3ZDc2YTg2LAotCTB4ZGVmMjJmYjQsIDB4YTNhZTE1OWUsIDB4OTBkMzFkZjcsIDB4NmQ1YjRlOWYsIDB4ZmIyYTk5YjEsIDB4Y2ZjMTFkZWUsCi0JMHg1ZmM5NzRmZSwgMHhlYzcwYjdmNywgMHg4MThkNjhhZiwgMHhkZmYwNTdlMCwgMHhmZDkzNjMwZSwgMHg0MWUyMTk1MywKLQkweGVkZWY2ZjNlLCAweDdhMTU3ZWEzLCAweDIxMTZmZDI4LCAweDgxZmUxNWJlLCAweDJjNjM1NzdhLCAweDdjNzk1ZjgyLAotCTB4OTlkNTM1YjEsIDB4MGZjMDBiNjMsIDB4ZTMwMzdmZjMsIDB4NjFkNTdmNjIsIDB4ZGNiZmNjNzYsIDB4YmNjYWI4ZTgsCi0JMHhjOGFhZTkzYiwgMHhhZmQzOTlhZCwgMHg4YTU0ZjlmNSwgMHhlYThlZWFkZiwgMHhlOWU5OTM2OSwgMHg1MDUzNWJjYSwKLQkweGZkNjFmMmRlLCAweDVmM2E3ZjQ2LCAweGZlNDQ5ZGYyLCAweGUzMTViMjg1LCAweDRhZWJmOWQ1LCAweGYyZjFjM2VlLAotCTB4Zjg3NDk4NGYsIDB4YWRjZjc1YmQsIDB4M2YyZTA5YzMsIDB4NTI5ZTAxZmEsIDB4N2I3NWYxMDIsIDB4YTZjNTJmYWEsCi0JMHhmYmFjMWZjMiwgMHg3Y2NhY2YyNCwgMHgxYzEzNzA1NCwgMHhlNDMwN2ZlMCwgMHhhMDU0ZjZmZiwgMHhiZmVlNGE5YiwKLQkweGY1MGY3MjEwLCAweDYzZTI0NjJkLCAweDVmYzQ3MGZiLCAweDdlMmQ3Y2U3LCAweGNkZjhiNWYzLCAweDNlMjMxOGY3LAotCTB4Y2QyNzM2NjYsIDB4OTMyM2UwYTcsIDB4ZmMxN2RmMGUsIDB4MjhlOWE3ZmEsIDB4YzdhYmFkOWYsIDB4MjM1YWJjZDMsCi0JMHg4ZTUxYzNlZCwgMHhmZmEwNTM1YSwgMHg1OWU3ZGRhMSwgMHhlNzk4NmJmMCwgMHg2Nzk5ZWZkMCwgMHhhYmQxMTA2NSwKLQkweGZhNDY3OWM3LCAweDMzZGY2NzllLCAweGVkNThjOGNmLCAweGFkZWFjZjNjLCAweDVjNWZhOGUxLCAweGZiODY2NGJiLAotCTB4OGVjOTVjYzMsIDB4ZDk3OTYzYjUsIDB4NzY4NjE0YjIsIDB4MDVkMGY1ODksIDB4ZDVlOTEyZmEsIDB4YjhhMDY4ZDYsCi0JMHgzMGVmMjJhMSwgMHg4M2YyMGRkZSwgMHgzNWExZjg4ZSwgMHgyOGY0ZmFkNywgMHgwYjY1NmY1YSwgMHg1NzViZDljNiwKLQkweDUxZTc3ODhmLCAweDk1YWViNzI4LCAweGI0MDc2ODJkLCAweDgxZmM3MmU2LCAweDBmNTBlYmRjLCAweGE2MzhhNmI0LAotCTB4YzE4Zjc5NTEsIDB4MzlmYTE0YjIsIDB4MGZiN2Y5NTMsIDB4MGMwYmYyMjUsIDB4NzNmMzQ2NTYsIDB4YmUzYjQ1YWMsCi0JMHhmZDQ1ZTAxZCwgMHhjZDk5NzgwNSwgMHhjZDAzNGFlZCwgMHhhN2NhZDU3ZiwgMHg3Nzc3ZTI1NiwgMHhmZTk2NGRmNSwKLQkweGE3ZWI0MGQ2LCAweDZiNDVjZjE2LCAweDMyMWM4ZDY0LCAweDczYzY5NWJkLCAweDhhYzkzYWZkLCAweDBjZjA1MGYzLAotCTB4YzY3ZDM0OWEsIDB4NjA3YzJlYjAsIDB4MmViMGQ2NzksIDB4ZmQ5NGI4YmMsIDB4ZWIzZDYyNmMsIDB4OWY4ODViZDQsCi0JMHhjMDVkN2NiZSwgMHhhZmE4ZWE3ZCwgMHhhNzdkM2Y3MCwgMHg1N2FmZmIzYywgMHhkZmM2N2E3ZSwgMHhkMDRkYjg5ZSwKLQkweDE2ZWY1ZmQzLCAweDdjYTljYmFiLCAweDVjYmFhMTVmLCAweDRhMzdhN2UyLCAweGJhYzNiZWZkLCAweGZjNTAyZDNiLAotCTB4NzhlNzc3NzQsIDB4MDI3OTZmMWMsIDB4YWY1YzRhNmYsIDB4ZDY4OTQ5ZmQsIDB4ZDViZDNjZDUsIDB4YWJjMTdlODgsCi0JMHgxNTVjNzhlMywgMHg4ZmYzMDFmYywgMHg2ODNiMGU0OSwgMHhiNjdhNzkzZSwgMHhlZjg5OTRkYywgMHg5OTRmNTQ2ZCwKLQkweGRjYjdmNDI3LCAweDhlZjQ2YjA0LCAweGEwNzdhZTYwLCAweGFhYTM2NGRlLCAweDA1NTdlOGFjLCAweGZlNDQ0NzllLAotCTB4YzNmZTc5NDIsIDB4YWQ2NGYzZmUsIDB4YjM4YWFjZmYsIDB4MjAxYjEyM2YsIDB4ZjcyOTllY2UsIDB4YzYwOGVkN2QsCi0JMHg2NGM5NzZkYiwgMHhmMzBlYmEzNywgMHg3ZDdkODU3NSwgMHhmMDZkZTllNSwgMHgxYTRmN2NiZSwgMHhlNjU1NWJlZCwKLQkweGY2Yzc4ZmVmLCAweDdkZTEyYjg2LCAweDIxZGI3ZGUxLCAweGNiYzYzMDYzLCAweDcyYTMxYWYyLCAweGY0OGEyZmM5LAotCTB4YWZmYmM0MDUsIDB4ZmU5NGZjYzQsIDB4ZTEyZGY0ZGEsIDB4MmRmNmQ1ZDMsIDB4YTE5ZjA5NmIsIDB4ODZiYzhmZTIsCi0JMHgxNjRmYjQyYiwgMHg1NTk2ZTdmMCwgMHg1MzRjZmI3YSwgMHg3OWZhMmU0YywgMHhjYzRhN2ZmOSwgMHg1NWYzYzFkNSwKLQkweDA2YjVjZjQxLCAweDUwNmIwYmViLCAweGM4OTk3NjRlLCAweDNjM2I2ZjZmLCAweGRiZWQ4NzQ3LCAweGU3ODkxNzBlLAotCTB4OWU3YTc2NDMsIDB4ZTM4MjkzM2QsIDB4N2YzOGViODcsIDB4MTRiZGUzMmIsIDB4N2NhNWVkY2IsIDB4N2ZlN2E5ZGQsCi0JMHg4ZGZlZmE4NCwgMHhhYTY1ZDRiOCwgMHgyZWJlNjlmOCwgMHg2ZGM0ZmM5MywgMHg4NDVjZGYwNiwgMHg5NWYxZWMxYiwKLQkweGU5NDNlZmI4LCAweDJiNThkNWU3LCAweGViYjZkMWMxLCAweDBmYThmM2ZjLCAweGNlNGRhY2NlLCAweGI2ZDIzNTQ0LAotCTB4Y2M3MGMwNmIsIDB4MTg5ZGI3ZmIsIDB4M2ZlNzhlOTEsIDB4YjA0YzllZGEsIDB4NjZkODFlYTEsIDB4ZmM0NDNlYjAsCi0JMHg4NmNjMmFiNiwgMHg4N2Y0YWU3MiwgMHhhYzdlNjBlMywgMHgxY2M4ZDc2ZCwgMHg0ZWRiYjNmNCwgMHg0Y2ExNzg3MCwKLQkweDczZDQzNzdlLCAweGE1MGVmZWUzLCAweGY1OWQ3MGRmLCAweDhjOGZiODU3LCAweDc5NDBjOWZkLCAweGE0ZGZjNWI0LAotCTB4MWFiZmExYzUsIDB4NWY5YzBjNmUsIDB4YmI1ZGZiNDAsIDB4YzEyOTZhN2YsIDB4ZjFlM2VjYWQsIDB4N2Q5NWVmYjcsCi0JMHhkMTdlZmUzZCwgMHhmODBiZDA3YywgMHgyYjdmZGZkZSwgMHg3MDJiOTU2MiwgMHgxZmJmOTE3ZiwgMHhkYzdlNDBjNywKLQkweGZhNjJiZWNhLCAweGJkZjVhNWFiLCAweDI2NzdjYjY0LCAweDBmYjEzZDRkLCAweGJlMDMxYTg4LCAweDU3MWU0MGYyLAotCTB4YzNjNjVjNTMsIDB4ZTUyYjVmZTMsIDB4NWY0MmY5ODAsIDB4M2VjN2NmMmMsIDB4ZGNlZGYyMTMsIDB4NGY1ZDE1MTYsCi0JMHgxZTNlOThlYiwgMHhjOGRhN2FmMCwgMHg3Zjk5ZjFjYywgMHhhZjk3M2ZiZiwgMHhiYWNjNTdkZSwgMHg3M2E3NzdmYiwKLQkweDAwYjk5NTNkLCAweDMyZDVlOWQ3LCAweGExZmQ0N2VkLCAweDdiN2Y5ZGZlLCAweGYzZTg4NDgwLCAweDRlZmZiMDk5LAotCTB4M2U3MDVjYzMsIDB4NWFiM2ZiM2QsIDB4MDY3YzE1NzgsIDB4ZmUwNTdkODksIDB4ZmUyMmNkZjUsIDB4OTkxYmYwM2UsCi0JMHg5YmVlNTFkOSwgMHhjZmU0MWUwYywgMHgzZjlmOGQ5MCwgMHg2N2YyMGY3ZCwgMHg2YTkyYzFhMywgMHhlZDAxN2NhNSwKLQkweDY0YmI2NTczLCAweGI3NWM3ZjRmLCAweDJmODRjZjFhLCAweGQ3NjU3NWM0LCAweGQzNGUzYTA4LCAweDkyZWNiZmU5LAotCTB4ZDZkZmVlMjksIDB4ZjMxNjI1NzAsIDB4ZTUwZmQwMDMsIDB4NGY0ZDVkM2IsIDB4N2I3ZjkwZDksIDB4NGUzMTIzODIsCi0JMHhlZmZhNjFmZSwgMHhhMWY4YmY2NiwgMHg2ZGI2N2JjOCwgMHhmYThlOTczYywgMHg2MjYwZjQxZCwgMHhmYTY3Y2ExYywKLQkweGZmOWU0NmQ3LCAweDdkYTFjOTZjLCAweDI3M2YxYmJmLCAweDczZGRiY2JiLCAweDczNDllYzk1LCAweDk0MGY2Y2EzLAotCTB4NjcxYTFjNTcsIDB4NGRmMDYxZmMsIDB4ZjAwN2MyZDAsIDB4MTQ3ODQ1MGMsIDB4M2VhZGNiMzgsIDB4YmQ3MzdmM2EsCi0JMHg1ZDg0ZmZiYywgMHgxY2YxNGI4NSwgMHhkMWY5ZTYwOCwgMHg5NDY4MmZiZSwgMHg1ODJhZGQ2OSwgMHg0MGFjN2IyZiwKLQkweDdlMDMwOTk3LCAweGVkMDgyZmIxLCAweDhhMjRhN2QxLCAweDZmOTI0ZTBiLCAweGQ0MGU3MGZlLCAweDRjYTRmMDVmLAotCTB4MWYxYmJkZTUsIDB4NzQ4MGQwZmEsIDB4YmNhMDZmNWQsIDB4OTlhNjgyZTEsIDB4ZmM1N2RhNDYsIDB4MTIyY2M0OTQsCi0JMHgzN2Q5YWI4ZCwgMHgxMjk3MmM1MCwgMHgwOWY2ZGQ1YywgMHg2ODBmZWRmOCwgMHg3ZDBiNzZjYiwgMHhlMzdlZjdlMCwKLQkweGEyZmIxOThhLCAweDkyNjdhOWYxLCAweDAxN2VmYmI1LCAweGNiMTAzYmZjLCAweGRmZTA0N2NmLCAweDEyNmJmZTk2LAotCTB4NDE2ZDBlOTEsIDB4NWNhMzM1OGMsIDB4NWZjODViZWEsIDB4M2U3ZTVlNjEsIDB4ZDlkNzZkYjMsIDB4ZWI5N2E0MTQsCi0JMHg1ZTI5MmY4ZCwgMHhiMDFjOTNkOSwgMHhmMzNmYmU0NiwgMHhmYzg5MzhjZSwgMHg1Y2RmODFkMiwgMHg1MDA4ZTY5OSwKLQkweDZmYzhiNjdmLCAweDEzYjgzMTZmLCAweGI3ZGQzZWQxLCAweGUzOGYyYWYxLCAweGFlNzFlMmVjLCAweGVlNjdmYjFlLAotCTB4ZjI2ZjFlMjAsIDB4MmMxYzUxMDYsIDB4MDUzMmQ2YWIsIDB4M2NlYzAxZTUsIDB4MzZiOTNmY2MsIDB4MDliMTk4YWQsCi0JMHgwZGJiNDFjYSwgMHhhYmFiNDQ1NiwgMHgwNWM5Mjg3ZiwgMHhhYWExNDFjYSwgMHhiNjFlNDU1ZiwgMHhiMjk0N2M4OCwKLQkweGQ4YjY2MWJmLCAweDZmZWNhMzk3LCAweGY4M2JmNjUwLCAweDc3ZWNhMWMzLCAweDNiZjYyZDk4LCAweDc4ZWIxZGJjLAotCTB4YzE5ZTBlMjgsIDB4ZDkzODVmM2EsIDB4NWZmYjdlYjEsIDB4ZTJjZmRhN2EsIDB4M2ZkMWVmYmYsIDB4NGY5ZmVlNmUsCi0JMHhjYmVjYWQ1YiwgMHg0NzE0NjA4OCwgMHg4ZGZhYzIzNywgMHhjZDg2YzM5NSwgMHhhYmY1MTc3OCwgMHhmZTRjOThlMSwKLQkweGVmMjNkZWQwLCAweGYxZjVhYWM1LCAweDM4NzM3ZDBhLCAweGQ3MmYzMWM2LCAweGQxZmU0NDE5LCAweGMzMTZmOTQ3LAotCTB4YTk4ZGNmOTEsIDB4ODYyNTk3YTQsIDB4Y2EwYmFlNzYsIDB4YjM3NWRlZjgsIDB4MzM4ZWFlZGUsIDB4ZTdjNzFkM2YsCi0JMHg5ZDJlMjJiYiwgMHhmYjdhYjdhZiwgMHhiN2FmY2MyMSwgMHg2ODhjZjI1OSwgMHgxNDhlMWI4ZiwgMHgzNjdlNDY0YywKLQkweGY5MTllN2M0LCAweDU0ZTZiOWY4LCAweDllODQ0YmE0LCAweGEzNDU3ZmY4LCAweDA1YjM2ZTMyLCAweDdiZjI1N2ZiLAotCTB4MmNjNzExNjEsIDB4NTk4NTc3YzgsIDB4YmYzZmJlYjMsIDB4NGE4M2YyMjcsIDB4ZGYzM2FmN2UsIDB4N2JlMzNmMTcsCi0JMHhlMzNiN2JmMywgMHg4YmY3MWQzOCwgMHhmZjcxYmJlNywgMHgzYjdiZjJjZiwgMHg1MjY1ZmU5MSwgMHgzMGYxYTRjYiwKLQkweDhlZjg4YWM0LCAweDZlYmRmOWMwLCAweGZjYjFiY2YzLCAweDU2NzE0N2RlLCAweDljZWI3ZjllLCAweGJkZjkwZjZmLAotCTB4NThkZmZkNmUsIDB4ZmY3YmFmN2UsIDB4YmFmN2U0M2QsIDB4Zjk4MzdmZjUsIDB4Nzk3ZWNlYmQsIDB4NTBmOTZmN2UsCi0JMHg1YjNmZWQxZCwgMHhlM2M0ZGM3ZSwgMHhmZmJlNjZlNCwgMHg2NWU0MjRjMywgMHg2NjgyNzdiOSwgMHg3NGYyODRmZiwKLQkweDE4NDkwOWIzLCAweDI3NWU1ZjI3LCAweGJjZmU0NjRmLCAweGEwYjNjOTZjLCAweDc4MjIxYTdjLCAweGIwNjRjODNjLAotCTB4ZDQzZjQ2NGYsIDB4ODUxOTExMTQsIDB4NzExZmY5N2MsIDB4YWJhZjM0NjksIDB4M2Y4ODhiMTEsIDB4Yzg3OTgyYWYsCi0JMHg3MjJkODljZiwgMHhlZjc5Nzk2MCwgMHhjYTY0OTkwMiwgMHhkNjE3N2YyZiwgMHhkNTdjZjMyNCwgMHg3NzU4YjM2OCwKLQkweDg3ZTRiN2RmLCAweGYzZmJmZTUyLCAweDNkMWU1NTM4LCAweGVkMDBmYjJjLCAweGNlMGQ2NDhiLCAweDhmYmYyODNlLAotCTB4MTI3ZjQwNWIsIDB4N2M1MGI3OWYsIDB4N2YzOTI4YzYsIDB4NzYyMTcxODcsIDB4YmI2MzlmODIsIDB4NjAxY2U0MWEsCi0JMHgzZWE1Yzk1MSwgMHgyZWVjMjhkZSwgMHgzM2VhMTI2ZiwgMHhhN2EyYWIzNywgMHhlMTBhZTFhYiwgMHgyYTQ3ODk1OSwKLQkweDQ3Y2M1ZGRmLCAweGE1Nzk0Nzc4LCAweDdhMDliOGMzLCAweDcwNmY3ZDJiLCAweGI1NzNhMDBlLCAweGJiNGU4ZTAyLAotCTB4NmVhMThmZTAsIDB4NmE2OWE3M2MsIDB4OGZmMjg2ZmEsIDB4MzRkZjdhZWQsIDB4MzZkNGViOGMsIDB4ZmM2YTIxY2EsCi0JMHhiOTczYzUyNiwgMHg5Y2ZlNGRjOCwgMHhkOGU1NTZmMiwgMHg1N2U2MTdhZSwgMHg3Y2EwMDY0YiwgMHhjMzdjOWI5NiwKLQkweDdiN2RlZTExLCAweGY1MWMzNmZlLCAweDkyYTZkNWNhLCAweDBiN2VmODNlLCAweGRjNzVhN2Q0LCAweGU3NTcyYmU4LAotCTB4YWFmM2ZkNWQsIDB4ZjM4MWYxZDEsIDB4OTY5YTViYWQsIDB4ZGIxYzIyMjUsIDB4ZjYwMDVlMzAsIDB4M2ZjM2Y5NTUsCi0JMHg2NjNhNzNhNywgMHhlYTBkZmY2NiwgMHg4MzdhMDYwZiwgMHg5OTg2OGFmYywgMHg5M2I0MzhmMiwgMHgwMWRiMDAzZSwKLQkweGY4YmI1OWNhLCAweGNjOTU5YmZhLCAweDJkMzc5ODNjLCAweDBlNjBmYTZmLCAweGRiM2NhYmQyLCAweDMyOTc0MTY4LAotCTB4NmRlNzgzMzgsIDB4MTZjZGIzODMsIDB4NDVhNmZmNWMsIDB4ZTIzMDNlNzEsIDB4ZWQ4NjliM2EsIDB4ZGQyMTQ2MjcsCi0JMHgzMDMxYzQxZSwgMHg3YjczYjljZiwgMHhiN2YwMWJiZCwgMHg4NTRmMGZmMCwgMHgyN2RmYzAzMywgMHhhZmRhNGFmYSwKLQkweGIxZjliYTUxLCAweDJmM2MzYjcwLCAweGM3MTRkZGU4LCAweDA3MjNjNGZjLCAweDE3OTRmZmRjLCAweGY2YjdmOGFmLAotCTB4ZmU3NTQ5NTAsIDB4M2ZkZmQzZTAsIDB4NmVmODhkMzEsIDB4Nzk4MmMxYjMsIDB4MTMxNmQ3N2YsIDB4YWYyYjlmOWQsCi0JMHgzM2YzYTYyYiwgMHhjYmM1M2U1MCwgMHhmZTg2N2Y4ZiwgMHhiYjQxYWI5NSwgMHhlOTdjMmY0ZSwgMHhhZDJiNThhOSwKLQkweGIxMjRlZTBiLCAweDk0MWYxMWVlLCAweDg0OWQ5Y2Q3LCAweGMxZjg1N2Y4LCAweDhmOGUxZGJmLCAweGI1NWRlNWZiLAotCTB4YWY2MzNjZjIsIDB4N2IxNWRmZWUsIDB4NWRmZjU5NDMsIDB4ZmI4ODRmNzUsIDB4M2ZjODVhMDEsIDB4ODQ1ZmFmZjAsCi0JMHhiMTlhMzIzMiwgMHhmZGRhZjE5OSwgMHg5ODNlMGFkMSwgMHhhM2Y0ODYyNywgMHhmMGMzNzNiYywgMHg1NGJlNTA1MywKLQkweDkyZTE2ZmYzLCAweGJmOGE0ZjBhLCAweGZmOWI1MWQzLCAweDNkYWMzN2JiLCAweGIwNmRlZmFmLCAweDc1NzRiMDJlLAotCTB4YjNiNTBmM2IsIDB4MTc3ZTA4MzYsIDB4ZjA2YTVmN2MsIDB4OTU1Y2EzODYsIDB4ZGNkODM0NmUsIDB4ZmI3NGJhZjAsCi0JMHg5NzNlMmYwYiwgMHhjMzY2NzI0NSwgMHhmYjY0YWM3NSwgMHg4MThlMWY1YiwgMHg0MzBlYzk3MiwgMHg4ZDNlNTRmNCwKLQkweGRlNzU0OTUwLCAweDYxZmYwNWNkLCAweGMzYTE0MDVlLCAweDMyZGVkN2MyLCAweGY3ZjE4NzVhLCAweGEyZWM4OGJmLAotCTB4YmQ4ZWM5NDcsIDB4ZmM1ZTc0NDYsIDB4NzZiZTMxZjEsIDB4YmJmMjkxYWYsIDB4M2RhOTc0ZmUsIDB4ZWYyYjcyNDUsCi0JMHhiYmVjODZmYywgMHgyYzQ4ZjY0ZiwgMHgzZTAwMzUyZSwgMHhlZTE1YmUzNywgMHgzYTIyNzgxNCwgMHhkMjc1M2EwYSwKLQkweDkyYmVhZmNkLCAweGU0ZTg1NzdmLCAweGRlM2IzZGZmLCAweGZkODVmMjQyLCAweDNmMDIzY2ExLCAweGM2MDZmMmJmLAotCTB4ZDkzMjNmZmIsIDB4YWY0NWZlNzAsIDB4ZjM4ZTEwM2MsIDB4YzQ1ZmFmMzgsIDB4NjNjMzdhZjksIDB4YjcxODc2YjEsCi0JMHhiNThlZTBjOCwgMHgyZmJmOTNkMCwgMHhjNDY3ZmU3YSwgMHhmZThlMGI2ZiwgMHhjYzdmZGI4YywgMHhmY2EzYTA5ZSwKLQkweDdiZjI5YmE1LCAweGQwZWZlYjg1LCAweDBkYTJmZmU4LCAweDg1ZmZhZTNjLCAweDExZGU0ZDllLCAweDBiOGUyZTQwLAotCTB4OTM3ZTcyYmQsIDB4ZTdkOWYyODksIDB4ZjY4NjBmMzEsIDB4ZGYzMjdiY2IsIDB4YTdlZWM3YjcsIDB4ZGY2MjkwNzgsCi0JMHhlNTRkMjc4MCwgMHhmZTFlODQyZiwgMHg4OTRlYmM0MywgMHhmYzM1OWI3ZiwgMHgzMzc4ZjM1YSwgMHg2NGQzZTdkMiwKLQkweDI1ZWExYzdiLCAweDA1YmJkMzE3LCAweGEwZWZhNDNlLCAweGM0ZThmOTVmLCAweDFlMWY0ZTM4LCAweDYwNzZhMzNmLAotCTB4ZjdjNzhlOGYsIDB4NDBkOWJmNTgsIDB4M2I1NTUwZjEsIDB4OGY5NjZlNzEsIDB4MWYxOGEwZmYsIDB4N2NjNjBlZTAsCi0JMHg1NjU4ZjljYSwgMHhkNDRmYzgxNCwgMHhlN2M2NzQyNywgMHgyOWU3MzU5YiwgMHhjYjliZTRiYiwgMHgyZTJhY2Q3YiwKLQkweDdiYmM4YWRmLCAweGVmYzY0ZmE2LCAweGYyZTMxZjlmLCAweDMyOTJlZDgzLCAweDFjNmYyZTA5LCAweDRiM2JkZjdkLAotCTB4MjdjZmNlMWEsIDB4NzVjOTAzN2IsIDB4YjVjODQxOGQsIDB4MjdjMmJiZjYsIDB4ZWU5ZWI3MDAsIDB4MDVmODUwMjEsCi0JMHhmYzI0OGZmYiwgMHhiYWQyZDUxNywgMHgxZGQ4ZDI2ZCwgMHhiYzJmMWMyZSwgMHhkYzhhN2Y3YiwgMHhmZmYyMTAyZSwKLQkweDdmMzhiYzdlLCAweGFkOWZlNDI1LCAweGYzYTFiOThmLCAweGNmMDZhNTQ1LCAweGJjYTFjZjhiLCAweGJlZjdlMDllLAotCTB4OTAzNzZlOTQsIDB4ZGI3MTdlNWQsIDB4MDZlZjBmZmUsIDB4YWI1OGI5MzksIDB4N2Y1NmE5YzgsIDB4ZDE2OWNiZmEsCi0JMHg3ZjExNmZhYiwgMHhjNWU5Y2JmYSwgMHgwMzYyYjdkYSwgMHhiNzhlZTljYSwgMHgyZWVlMGVjOCwgMHhmYWI5ZmZhNywKLQkweGRmZGZjMTUzLCAweGU4YTdmMGZjLCAweGU4ZjA5ZWMzLCAweGUzYWIwZmFmLCAweDIxZjUwMWFkLCAweDlmNTMxZGZjLAotCTB4YTVmMDUzN2IsIDB4NmZjMjlkZjAsIDB4ZWIyZTVmMGIsIDB4OTNhNzdhODMsIDB4ZWJiZTE1MmYsIDB4ZWY4NTRiZTQsCi0JMHhkNzNiZWRiYSwgMHhmYmZmY2ZlMCwgMHhlMDBkZjg1YiwgMHg2MGZhZWM3MiwgMHhiM2QwMTI1MiwgMHhjOWZiOTFiNCwKLQkweDk2MjBlZWQwLCAweDVhNzY0ZjAxLCAweDQxZTU1OGM2LCAweDU1ZGI2ZjNjLCAweDZiOTVmOGY2LCAweGZkZGJlYWZkLAotCTB4ZmFiZjBlY2EsIDB4MjJmMmJmNGUsIDB4ODIxZWZhYmYsIDB4M2Y2MWI0YWIsIDB4YmNjOTZmZGYsIDB4YTU4NmZhOWEsCi0JMHhkZDE2MWRjYywgMHhmMzFlMGU3NSwgMHhjZmQwMmI1OCwgMHhmNGYzYzZkZiwgMHhiOGYwMjU4ZiwgMHhiOGM2MmZhOSwKLQkweDg5MWZmNjgyLCAweGUxM2UyYTdkLCAweGI0M2JiNDY3LCAweDM1NGU1NGZiLCAweDViN2ZhNGNhLCAweGY4ZjM4MTNjLAotCTB4M2M5MjA5ZTAsIDB4M2ZiMGY0YjQsIDB4NGQzYjg5NWUsIDB4MWU1MzQzOTQsIDB4MmEzYTM4MDYsIDB4NjBhMGZjNzksCi0JMHg5NGUxOWRjOSwgMHhiYjRjNjljZiwgMHg4NTBhZTMxZCwgMHgyYzMxZjk4NywgMHg3MzE0M2Y2NSwgMHhhYTA5ZjVkYiwKLQkweDk4MTcwZWZkLCAweDMxOWJlOWZiLCAweDQyNThkNjRmLCAweDM1ODI4YmYxLCAweDBmY2Q3YTVhLCAweDBiZTI5MDdkLAotCTB4ZjdiNGFiZjMsIDB4YWQ3YzI5MDAsIDB4ZDY4YjBiYzQsIDB4YzQyZmJmNmIsIDB4MWVlODg0N2IsIDB4NDdkYTRhODUsCi0JMHhmYjQ2YjBiNCwgMHgwZTdjODlkZCwgMHg0MTI3M2M3YywgMHgyYzE5MDlkOCwgMHhmOWJkZTQ0MywgMHg1N2ExMTIzOSwKLQkweDZmNDNjYTI3LCAweDIxY2JmY2E3LCAweDFkYTVmMjk5LCAweGJkZTEzMjhkLCAweGZiNDQ5YjYzLCAweDg2M2I5ODY5LAotCTB4Zjk5Y2E1ZTQsIDB4ZjgyOTlmNDgsIDB4NjBmMjg0YjksIDB4NWNkZjU5ZWMsIDB4NzNkZmZkN2EsIDB4YTUyYTg1MWUsCi0JMHhmZjBmMWZmNSwgMHhkNTJmM2MyZCwgMHg4ZGRmNDg5ZiwgMHg0ZTdmOWRlNSwgMHhhZjc1OThmOSwgMHgxMDRmN2UzZiwKLQkweGRmNmExZmVkLCAweDM1Zjc0NjEzLCAweDlkYmQzN2I1LCAweDg1ZTUyOGYyLCAweDA3YmEzNjRjLCAweDk0OTdjZjYxLAotCTB4NmE1ZjZiN2YsIDB4ZDU3ZDQyMmEsIDB4Y2FmZGNjOWUsIDB4MGU1ZjRkNjUsIDB4Mzk2NTdhZTcsIDB4YzA5OGRmM2YsCi0JMHgzNDc0NGRjZiwgMHg5NGYyOGRmZSwgMHhjYTI2OGQxZCwgMHg4NGY2YjkzMywgMHg3YWUxMWY5MCwgMHg5Y2ZjODgyMywKLQkweDI5MmZhNmY2LCAweDlhY2ZmY2JlLCAweDM3ODhiOTRmLCAweDNjZjE4N2I3LCAweGJmYjhiYjRmLCAweGY0N2JiNWM0LAotCTB4MmQ4Nzk4MGIsIDB4NDQ2YmRiYWIsIDB4OWJmYzY1YmYsIDB4ZGY1ZDkwZGYsIDB4NjdiNzJhZmUsIDB4MWVkZWQwZGEsCi0JMHg1YmFlNzg4MywgMHg3ZGM0NGUzMywgMHg0ZDBlY2NhOCwgMHgwZGI3N2I0NSwgMHhiMTkxMjM4NSwgMHg5ZDVkY2ZhMSwKLQkweDA4MWExZWVhLCAweDVlNTBkZjRmLCAweGYzZjE0NmY1LCAweGZjMThmZmQyLCAweGI5ZGZiNDQ4LCAweDYzY2MzMWI0LAotCTB4NWZkZTcwOTYsIDB4ZjUxOGZjOWQsIDB4ZDc5ZTFlYzEsIDB4YjE3YmU2NTcsIDB4MWZkOTA5NzYsIDB4YzFmNzliZDcsCi0JMHhmZGRmZWUwNCwgMHhlNGI3OTllZiwgMHg5Zjc5OTFiZCwgMHhlZjRlNmZmZCwgMHg5OGQ0M2M2MiwgMHhiYTJlNWRkZCwKLQkweGNmMTM3OWYzLCAweGIzMGY2ZDE3LCAweGM4MzdiYzExLCAweGZmYzQ4NmVmLCAweDE1N2Y3NDY1LCAweGZkN2UxZWU4LAotCTB4NmZmYmY3NzksIDB4ZTk5ZWVmM2UsIDB4YTBhZTc4N2UsIDB4ZjNlMzA1YmIsIDB4MjFiZjM3YWUsIDB4M2Q1ZWZlZjgsCi0JMHhlODdmZTEzNywgMHhmZDNiMTVmYywgMHg2ZmQ3YzY3ZCwgMHg5MWMzYTI1NywgMHhlZTllZmI4OCwgMHg1ZjAyYmMzOCwKLQkweDI3NGU3NGI5LCAweGNkMTJjM2M1LCAweDRkOWZlZTc0LCAweDhlODdlMjhkLCAweDMzNjE4ZWY1LCAweDU3ODc3NTg2LAotCTB4MjVmZTFiZjEsIDB4MzEyNzNlZDEsIDB4MDdmZWFiYTYsIDB4YTYxOWVmYjMsIDB4N2Q1Nzc3OWUsIDB4NThkMWJlM2UsCi0JMHgzNzlkM2Y3YiwgMHhmY2E1MGIyOSwgMHhjMThmNmUyYywgMHgzNmNjMmY3NiwgMHhmNzEzZmU3MSwgMHg5OTBmMWMzYywKLQkweGE2MDYzMDdiLCAweDczODM0N2YyLCAweGU3MzljMjNlLCAweGMwYWM5ZmNlLCAweGNhMmZiNGIyLCAweDM1ZTcxOGJhLAotCTB4ZGM0NzI1YWYsIDB4YzcxMGIwOGIsIDB4ZmIzYjM1MmYsIDB4NzJmOWFhNjAsIDB4MmY0MDczYjIsIDB4NTExYzQ3YjQsCi0JMHgxY2NiOWUzYywgMHhlMTAxMWNjMywgMHgzN2NlNmI3NywgMHg5OTRiZjYyYSwgMHhlYTNhYTFiMCwgMHhiZTUxN2FkMiwKLQkweDY0NWVkNWU0LCAweGI4ZTliNTdmLCAweGUwMjZkODdmLCAweGI3NjdlMGJkLCAweDFhOGU3OTE3LCAweDVjNThmZjMxLAotCTB4Y2VhOGQ0NzMsIDB4NzM4OTk2M2YsIDB4M2ZlM2ZlYTksIDB4MjNmM2M4OTEsIDB4ODdmNmJlOWYsIDB4OGJmNzQ4YWIsCi0JMHhhM2E3ZDQ1ZiwgMHg1ZDIyNTZiZCwgMHhkZDVkNzlhMiwgMHg5OGFlNzQ3YSwgMHhmZjljMGFkZiwgMHgxNGJlMWQ0MywKLQkweGI0YWJjYzIzLCAweGM3OTFhZjc2LCAweGY0ZmNjNTIzLCAweDliZWZmNGJlLCAweDc5YWU5YjVmLCAweGFhYmI5ZDEyLAotCTB4OGU3Y2U4OTcsIDB4ZWVhY2FlZDIsIDB4OTNiNDI0ZTgsIDB4ZTgyMjZhOGIsIDB4YTdkYzQ3M2UsIDB4Y2E5ZGNmYzIsCi0JMHg3ODYwZmI3ZSwgMHg4ZWIyNDkzZiwgMHg0YmY3ZGJmOCwgMHhkMjFiZjY4OSwgMHhlOWRmYjQxZiwgMHhiZWUwZjA4ZSwKLQkweGNhZWU5MzZhLCAweDY3Njg5OWIxLCAweDhjZTdlMzBmLCAweDQzODMwN2Q2LCAweGJiYzc3ZTBmLCAweGM0MWI1ZjAyLAotCTB4YmY3ODA3NzksIDB4MDdjN2RmMTIsIDB4NGZmMWY2ZjMsIDB4ZmVkZjY4ZWIsIDB4OTQwOWI5MGIsIDB4N2JkZDU0M2YsCi0JMHg3MjA3NTI5MSwgMHgzNmIyNjQ5NCwgMHg0OWI4YzBiNCwgMHgwZjI4YmQxNSwgMHhiOWQxM2RiYywgMHg1ZjcxZjEwNSwKLQkweDE4ZTUyZTk0LCAweDQyMWNlMWMxLCAweDhlNmY4MGU3LCAweDc1M2YyMWJhLCAweGY4MThiMzA2LCAweDllN2U1MjdlLAotCTB4NGY4NTg2N2QsIDB4YjVkODUwYTUsIDB4ZWU5ZDk5MzMsIDB4Mzk4M2I4ZTEsIDB4NmQ3YmRlYTksIDB4ZDdkYTNiNDYsCi0JMHgzMzZlNjFlZiwgMHhhM2Y3ZWU5MywgMHgwZjMxNzdmNywgMHg1ZTYxZWYzZCwgMHhhYzJmZmZhYSwgMHg1ZjBhY2E4NSwKLQkweDE3ZGUzZjAyLCAweDNjZjFmOWNkLCAweDhlODE2MGE2LCAweDQ3ZGMyMjZmLCAweDNmMjc4NjQzLCAweGZlOWVmODBjLAotCTB4OTRmZTgwY2MsIDB4NzZlMmFkMmYsIDB4OWVlMGY1ZjAsIDB4NTc0YmZjMmUsIDB4ZjIxMGYzYTIsIDB4MmZlNGM3N2IsCi0JMHg3ZTgyYWY5ZSwgMHhmMTJmNjY3NCwgMHg5MWVlNzI4MywgMHg3YzExODg0ZCwgMHhkYjcyZmRmMSwgMHgwZjk5ZDFkYywKLQkweGUyYmY0NTBkLCAweDViZDI0MTU2LCAweDUwOWZkY2VkLCAweDJlZGMwZGNlLCAweGQ5ZWYwMWU0LCAweDM0M2EwNDg5LAotCTB4YTdiZGY5NWIsIDB4M2RiZDJhY2MsIDB4Yzc5M2NhMDIsIDB4ZTU5ZmI0YzksIDB4MjBkNmUwOGYsIDB4NDMzMWZjN2YsCi0JMHhkOWE1ZjcxNiwgMHhkMTM0ZmRhOSwgMHgzMzcxZDRlZiwgMHg3YTgyZjc5NywgMHhjOTZlYmU5MywgMHg5MzI3ZjNjMiwKLQkweDhhZmQ2YjdiLCAweDVjNmY0NDlmLCAweDI5Y2YwMTFlLCAweDdmZWZiNGZkLCAweDg4ZjU5YWNhLCAweGI1NDNhOWQ3LAotCTB4MmNiNGNkZmUsIDB4MzhiZGJkNmQsIDB4MmE5NjI0NjYsIDB4NGI4NDVlZTksIDB4MTkzZmMyODksIDB4ZmRhYjA2Y2MsCi0JMHgxZDNlNjUxMywgMHhkMTE4YWY1MywgMHhlNDkzZWMxNywgMHg1OTc0ODJiYywgMHhiOWQ5ZGI3YywgMHhjZjRlZGU3NCwKLQkweDRkMTExZWRlLCAweGJjZDFjZmY3LCAweGU2ZjAyYjVhLCAweDU1Y2VjNjQ2LCAweGExNzllOTk4LCAweDIwZWNjMmMyLAotCTB4YzQ1NjlmZjcsIDB4ODU1MmYzZDMsIDB4NTViN2RlOTUsIDB4ZjhlN2E0MGMsIDB4OTBkZmM3MjQsIDB4OWY5NTA1M2UsCi0JMHg2NzBmZDFlOSwgMHhlZTM0ZTk1NSwgMHg5YWNmODIwMywgMHg5ZDFkNWU3NSwgMHhkMTI0ZDg1ZiwgMHg4MjA3OWE3ZSwKLQkweDhlZjE3MzlhLCAweGE3MzYwN2FjLCAweDYxNzM5YzUyLCAweDBjNDFlZDQzLCAweDFkNzgxNDFmLCAweGYzOWM5MDkzLAotCTB4ODgzYTJkMGYsIDB4YzA2YmIyY2YsIDB4MTU4MDIzZTksIDB4MjRhNjFjMTIsIDB4YTc2M2ViOTQsIDB4N2FjNmRmNjcsCi0JMHhlMzdiMWJlNiwgMHhkMDUxODNhOSwgMHgxYjBhZjlmZiwgMHhjNTQ5ZjVjMSwgMHhhYzVlN2EyOCwgMHhiM2RjMTNiMCwKLQkweGE0OTYxYzkyLCAweDY3ZDJhNDZjLCAweDZkYjczZmM0LCAweDgyNGZhNTNiLCAweDEyYWQxM2ZhLCAweGI2M2YyYmFkLAotCTB4ZTQwNzhmMzMsIDB4ZDdjMGRhYWIsIDB4YjMwNGVhODUsIDB4ZGM3NGU1MGQsIDB4MWUxYjE5YjAsIDB4OWRmN2E4NjQsCi0JMHgxZGM3MDg4OSwgMHhlMjI3OGE1MywgMHhjZDQ2ZDMzOCwgMHhlZWI0N2JhMywgMHg3YmYxOWFmYywgMHg1OGRjMjY5NSwKLQkweGU5Zjk4OGRjLCAweDI0N2JjYmRkLCAweDNhY2JjYmUyLCAweGZmMThlZGViLCAweGE2NDlmZjc1LCAweGRlMDc0MGZjLAotCTB4ZTNmZTgwZDMsIDB4ZTMyZjdlNzEsIDB4ZTJkM2Q3ZTIsIDB4MzYyZjNmNTAsIDB4NWZkMGUzNTgsIDB4NzlmNjJkZGYsCi0JMHhlOTdhMDQ1YywgMHhjNWVjZWI1NSwgMHg5Y2NlN2ZlZCwgMHgyNWJmZDJhNywgMHhmYWJhZWNhZiwgMHhmMmZiZjQxMSwKLQkweGVhMWI0OGM5LCAweGUyOTE4YmJkLCAweDI4YjY0NjdlLCAweDliNDhmNTA0LCAweDE5NjIzYmM4LCAweGQ2NTAxNWVmLAotCTB4NTgzM2Q0NWQsIDB4ZWJjYzE4YmUsIDB4OTQ5MmJjZTcsIDB4ZTM4MjcyOGIsIDB4N2E1ZDhkNTksIDB4Njc5NWZkMjgsCi0JMHhlZDZhM2VmYSwgMHg2ZDRiNmYxYSwgMHg0MWNmNDdlMSwgMHhlNzQ3YjJmOSwgMHg3MjNhYzAzNiwgMHg2MWI2ZDU5OSwKLQkweDEzNWRkNmRjLCAweDA2NmRmYjRhLCAweDg3ZTBmYTRhLCAweDdjM2Q2Zjg5LCAweGQ1NjQ4OGJmLCAweGViNmMzYzYzLAotCTB4ZDExMjFiMmIsIDB4MzkyZGQ4MGUsIDB4ZmE4MjNlZTYsIDB4ZmZhZjAzN2IsIDB4ZTQ4ZmQzZDIsIDB4NTNlN2MyZWQsCi0JMHg4MjNlYWY2NSwgMHhhMDhhNGY3OCwgMHgyYjlmZjM3NiwgMHgzNmZjOGMxZSwgMHg1ZDVlZmQ2YywgMHhhOWJmYmMyMiwKLQkweDdjNTJkNGU2LCAweGMyYTI0MGNlLCAweDkyNmQ4Y2Y3LCAweDhjZGQ3NzhjLCAweDg2NWQ0YmE4LCAweDFmYjg5OGFmLAotCTB4ZmJjMGIwNmUsIDB4ZWQ5ZmY1ZDAsIDB4ZjQxMDc3MDMsIDB4MDhlMmVkNmIsIDB4NTI1NzU3Y2EsIDB4NjcxYmQ3YmIsCi0JMHhjMTBmN2ZiZSwgMHg3YmMwNGVlMSwgMHg4Y2YzZGQzNSwgMHhiOGYwM2VkYywgMHg1YzlmMjIzNywgMHg1MWI0MGU3NiwKLQkweDdlZTFjZDdlLCAweGQ5NzNlOTE2LCAweGY1YzM2YjE5LCAweDBlZTc1ZWEwLCAweDRmZjU4MzFmLCAweDc2MDg3YmYyLAotCTB4YzcwZDFjZDYsIDB4ZWFiZDExZmQsIDB4ZWQwODJjMGMsIDB4YWQxZjBjOTUsIDB4NTZjOTY1NGIsIDB4MjU5NjU5YmMsCi0JMHg2NGViN2YzZiwgMHhkNzkyNzk0NiwgMHhhNTNmNTIzNywgMHg5OWU2MWI2NiwgMHg0MmJmNWU4YiwgMHgxM2Y2MWNmMSwKLQkweGZjOGZlYjY2LCAweDRmY2JjNzUxLCAweGZkMTNiMDRjLCAweGMxN2UzNjhhLCAweDJhMGVjZGNiLCAweDJhNzc2NDNiLAotCTB4MGY5NDVmZGQsIDB4ZmJmNDBjNzYsIDB4NTg3NzU4OGMsIDB4NDdkMjcwY2IsIDB4MmVkNjcyYzQsIDB4OWYwMTNmN2MsCi0JMHgzYWJkZjAyZCwgMHhmYjgwOWRkNSwgMHgwYWY1OTRjMywgMHgyMTlmOTlkNiwgMHg4MzliYTM3ZiwgMHhlZjczOWJlZCwKLQkweGY3NzVhMTQ5LCAweGE1MTlkNzA2LCAweGZjOGM2NzlmLCAweDQ2ZjViZDdlLCAweGI2NmUxZWJlLCAweGY0Mjc3OGYwLAotCTB4NGZlNTE0YmYsIDB4NjQ5MzE3NTksIDB4YWUxZDU4NjksIDB4NmM5OGNmNzMsIDB4M2UzN2FjY2IsIDB4ZmVlMmRkY2UsCi0JMHgyYWY4MTNhZSwgMHg0MzBkNmM0MSwgMHhmOGZmYmE0MiwgMHhlOWZmYzYzNiwgMHhmYmYyM2RmZSwgMHgxNTY3NTc5OSwKLQkweGY5NDFlY2Y3LCAweDRmYzNhNGU5LCAweGU2MTliZjJlLCAweGUwMDNmODJkLCAweDgzMDEzODIwLCAweGYyYTdmNTBjLAotCTB4ZTM4YjJjM2UsIDB4YjY2OWQyMzMsIDB4MmUyYjdlNjEsIDB4MzNkZDExNmEsIDB4ZDMwN2YwYTEsIDB4ZGRhMDQ3N2IsCi0JMHg5OTViZmFiMCwgMHhmZmI5NGJjZSwgMHg3ZjcxNGExYSwgMHg0ZGRmNzg3ZiwgMHg3YWY0NzFlMiwgMHg2MzllMDdjMCwKLQkweDdiZjA3NzcyLCAweDVhYzMxYTlmLCAweGY0MDNmZTVlLCAweDliZGM1OGRmLCAweDBkYmJjNmUyLCAweGY3NTZmZWZjLAotCTB4ZGM1ZGYxNzQsIDB4NTc3OGRkMjcsIDB4YTI3ZGM5MmMsIDB4NzYwMWViODksIDB4ZDM4ZDMwNGYsIDB4N2U2Y2YwNjgsCi0JMHg4ZjRmYmYxYSwgMHg4NWM3ZjZhNywgMHhkZTY3MWQ5YywgMHg5NTVmNzA3YiwgMHg3YmE0NjdkYiwgMHgxODIyYWIzOSwKLQkweGI1NTM2N2RkLCAweGZkYzUwMDY0LCAweGUwN2RiZmVhLCAweGJkYTE4NmRmLCAweDYzOWY4NGIyLCAweGFjZjBjYWFiLAotCTB4NTVmZjdkYzQsIDB4NzBlMzRjYmYsIDB4MTcyNGRlNDgsIDB4MjYwZTJmYjYsIDB4ZGQzNTVkM2QsIDB4NDA3MTgwOWUsCi0JMHhiYTEwYjRlNywgMHhmYmE3YmE1NywgMHgyODMyM2Y1ZSwgMHgwOWVjODllNywgMHgwYWU3OGY4OCwgMHhmZGY1MzNmYSwKLQkweGNhNGU3ZjQxLCAweDU3NzQ4YzNkLCAweDNhNzNkMWYyLCAweDhlY2MyMmYzLCAweDIxZGU1YmY3LCAweDZlMTU3NzBhLAotCTB4YmI3ZTQyMGUsIDB4MTRlODI4YTMsIDB4MTc4ZjZiYzYsIDB4YjhjMzBkMmQsIDB4N2U0ZTFkZTMsIDB4MzU5YjI3M2YsCi0JMHg4ZjNlYWVkMSwgMHhmYjI0ZTdmOSwgMHg1NjU3ZTQ2MSwgMHhkZWVkZDhhMCwgMHgxZWQzYzQ3YywgMHhiZGNlOTk5ZiwKLQkweGE4NDdmOTAxLCAweDdmODU0NGVkLCAweGJlNzdhYWZlLCAweDhkZGFlZDg3LCAweDkyZTM1ZWUyLCAweGI2Y2RhNmFmLAotCTB4NmJmMWZhYWEsIDB4ZjI3ZWRmZTcsIDB4MzdiZjMzMGMsIDB4NzY0NGNlYTksIDB4OGVjMjdkYzEsIDB4YjNiYzk5NzIsCi0JMHhhZDVhMGVkMSwgMHhmNjA3ZmU3MywgMHhlOWY4NWFlZiwgMHhhMjc3YjQ3MCwgMHgxN2ZiZjA2NywgMHgwOWJlMzFkYiwKLQkweDdhMGE0Zjc1LCAweGZmN2M2NDlkLCAweDk4NTE3YmEwLCAweGIyZjExYmM4LCAweDBmMjhkMWYzLCAweDllYzdhN2JmLAotCTB4MDdlNTg4NTAsIDB4MWY3MGQ4ODYsIDB4OTllNDUzOTAsIDB4N2M0NGI5NTgsIDB4ZjljMmQyNzIsIDB4MTQ2MzY0ZTQsCi0JMHhlMzNlOGZkZiwgMHgzMGU5ZDNkYSwgMHhhYjhlOTM4ZiwgMHg3YTg0OGY2ZiwgMHg3OWY4MWIyNywgMHhjYzNjYmY4ZSwKLQkweDJmOTYxOWNmLCAweDYwZDI5MTNiLCAweDdiYWYzZWVkLCAweGQ5N2JmMjk3LCAweDBiZjg1ZGVmLCAweDkzZGE2ZjNhLAotCTB4YWE1YmRkZmMsIDB4ZDIxOTg3ZGQsIDB4Y2UxNWZlZGIsIDB4YjVjNjdhMzMsIDB4MTI4N2E4NDksIDB4MmQ5ZjRhNGIsCi0JMHhkYmRhYmQ0NCwgMHgyZmJlMmRmOSwgMHgyMzk0YjYzNywgMHhmZjc3Y2EzZSwgMHg3ZmRhMGE3YiwgMHhkYTVlYmJlZCwKLQkweGFmOWUxMDcxLCAweGRlYmE5ZDE5LCAweGFkZTk3ZGY4LCAweDY3NjE4ZmE5LCAweGQ3MmY5ZWMyLCAweGFlNDAzZDAzLAotCTB4MzRlZGVhOWYsIDB4NzE3ZTA2ZjYsIDB4NjNhNmYwNGQsIDB4ZTY4NjRiYmIsIDB4ZjYzNzg4NDksIDB4MWJiMzFiOGIsCi0JMHg1Y2RjNmQzZiwgMHgxMTVmYTEyZiwgMHg0ZjRlNThkYywgMHhlMTFjMzNkOSwgMHhjMzc5MjhiOCwgMHhhNzFlMWVmMSwKLQkweGM5N2U4ZmQ4LCAweDE4OGYwZGUyLCAweDcyYzdmNzhhLCAweDFmM2ZmNWZlLCAweDhhYzVhMDQ4LCAweGFlZDAzMjdkLAotCTB4ZTcxNjU2YTQsIDB4MjcxNDNjOTcsIDB4MDI1ZmFmZjYsIDB4MGRkZWE5ZWYsIDB4Y2JjZTU3YmUsIDB4YWMzNDQ0OTUsCi0JMHg2NmY0NGIxZCwgMHhlZTE2NmY1ZSwgMHhmNzRmZWNlYiwgMHhmZDdlNWQzMiwgMHg1ZmI1NzRhNSwgMHgwZWVjZmZlNSwKLQkweDlkM2Y5ZjJmLCAweGE5YmNjNmU3LCAweDdiZjdkZjg3LCAweGU0MDY4YTA5LCAweDcxMjY2ZGIzLCAweDUxZjM4ZjhlLAotCTB4YzEwNGQ2ZGIsIDB4ZGE4ZjljNjcsIDB4YThmMDBlYjYsIDB4OWNmM2I2ZTUsIDB4ODczNmFkYTAsIDB4NmJkYmVkZjYsCi0JMHg1MDFlZDA3MywgMHg2Yjk5OWZlNCwgMHgzNjY3N2VlOSwgMHhkYTM4NzZiMCwgMHhjMjNkOGFkZCwgMHhmNGU5YjUxYywKLQkweDhlOWI1M2RlLCAweDNjNzVlYmY1LCAweGJiOGNhNzNmLCAweDdlMjRlNWYwLCAweGViOTk5OGRmLCAweDBmMmY4NWM1LAotCTB4OTRjNmZiYTEsIDB4Y2YzN2FmN2UsIDB4NGQ0NmQ1MDEsIDB4NWI0NzkwNzksIDB4ZWY5YmQ2OWUsIDB4ZWZmZGY4NWIsCi0JMHhjYmYxZjczYiwgMHg5M2M2MWVjMiwgMHg0MGY3OWQ4NSwgMHhiZDczZGU3NiwgMHhmMmYwNTI1NSwgMHhmYTBlNTI2MCwKLQkweGFhZjI4Y2EzLCAweDBiZTA3YmJiLCAweGJkMjFhZTA1LCAweGYzMGIzZmI5LCAweGJiY2ViODYzLCAweGJiZmFlMjNmLAotCTB4ZjMzMWMzM2UsIDB4NmZkNzI4MzYsIDB4YjZmYjIzNDgsIDB4ZTlmOGU3NGQsIDB4NzllNzFjMzAsIDB4M2ViYWFmYmUsCi0JMHg5Y2Y5NDdjMiwgMHhmZGI5NjdmYSwgMHg1ZGU2MmU1YiwgMHg0MjRjZTExZiwgMHhjMmExN2E3ZCwgMHhmZmVlMmYxNiwKLQkweGU5NmMzYjI2LCAweDk4ZTExNTg5LCAweDYxZGZhZmY3LCAweGQ1ZjhjMGM4LCAweDYzZmIzNTI3LCAweGFkM2UyZjkxLAotCTB4MzdlZTk4NzgsIDB4NzVlM2JjMWMsIDB4NmU5NGEzY2EsIDB4MWM3ZGUwN2QsIDB4ODMzNmQyZjcsIDB4ZDJhY2RkMGQsCi0JMHg4YjVjNWViYiwgMHg1NmU5NDhmNiwgMHg1YmU3MTZiOSwgMHhlNTNmNzViYSwgMHhiZWQ1MmZjNywgMHg3MWZiOGUxNSwKLQkweDkxNDRkNDJmLCAweDUzZjA4YzFmLCAweDFjZjdmYWZlLCAweDJmZjhmZTBmLCAweGFiYzQ2NGY2LCAweGM5MTU5MWY3LAotCTB4N2Y3OGI1ZWUsIDB4NWEyZDkwYzksIDB4M2M3ZDE3YmMsIDB4ZWRlYTEwZTksIDB4MThjZmY1MGIsIDB4MWZiYzU2ZjUsCi0JMHhhNmZkZmI1NiwgMHhlZmY5NmQwNiwgMHhlNGFiYWYzZCwgMHhkNGUzOTA5MSwgMHhkY2M4NWM3NCwgMHhkZGE5ZjUwNywKLQkweGI1NjQ1ZmViLCAweDNmMThlZGIzLCAweDk3MjdiY2U4LCAweGRhZThlZGNiLCAweGJiMzc5NDc1LCAweDZlNmU3OGZlLAotCTB4ZTlkYTg1M2MsIDB4YTM3OWFiOWUsIDB4ZTIzMWI3ZjgsIDB4ZTZiNjVlZmUsIDB4ZGJjNDI0ZTgsIDB4NWEyNDI3YmMsCi0JMHgzNmJkZTZlZiwgMHhjZmVhMDBlMCwgMHg5YWVlM2I1MywgMHg5M2Q5Y2Y0MiwgMHhlOGY5MWYwOSwgMHhkNjdlZTA4NSwKLQkweDA2MWJjOTQ2LCAweDhlMjhjYjY1LCAweDllNmFjMmVmLCAweGVlNWJjYTE3LCAweDhkNjllZTc3LCAweDJhZjhmZWRmLAotCTB4MGQwNWY3ZWQsIDB4YmNjMmJmN2IsIDB4NzlmOTkxNzYsIDB4M2Y3NDFmOGEsIDB4ZmJhMWUzYzcsIDB4NjA1ZTE3N2YsCi0JMHhhYzJkY2ZlNCwgMHgyODE0Y2VmOSwgMHhjY2E4NTFiZSwgMHhkYTYzZmRjMywgMHgyNjRkYzAxZiwgMHhmZmYwZmZmMCwKLQkweDRkYWVlMzQ2LCAweGUxZWEzZDQ3LCAweDY1MWI1NTMxLCAweDczMTk1N2M0LCAweDIzNDk2NDNlLCAweDAyMWJjNWJmLAotCTB4ODEzN2NmZTMsIDB4ZWI0OTkyZGQsIDB4NGFlN2NkMjEsIDB4OGYzYTJmNzUsIDB4NTA1OWVmMGUsIDB4ZGEwM2RlMjYsCi0JMHhlNGViODM5YywgMHgxYjMwYmE5NSwgMHg5Y2Q2OWZkZiwgMHgwMmQ1NzY4MywgMHgyMWY5ZDMyOCwgMHgwYmNlMjk1NiwKLQkweGYxZmVlODdiLCAweGNkMDZkNTA1LCAweDFlYzVlMDdkLCAweDcyNTU5OTZkLCAweGVmMTRiMGZiLCAweGZhNDcwZWQzLAotCTB4OTJiYjUwYjcsIDB4YTU3YWRhMmQsIDB4OTFlMzlmMzAsIDB4ZmI1MWZmYjgsIDB4NWI3Y2M1ZGUsIDB4MmI3ZGE0NWYsCi0JMHhlZmQ0OThkZiwgMHhiMTU0N2IxNSwgMHgwZTM4OTU4ZiwgMHhlNDYwYjIyOCwgMHg3MjM3YmI5NywgMHgwNGI3N2EzZCwKLQkweDBjM2I0NWYzLCAweGFmYjIzNGVkLCAweDQyMGUzYjNjLCAweDI4NzhhYWI5LCAweGRmZjU0ZmQ5LCAweGNhNWJmZGYyLAotCTB4MGNhYWQ0ZjksIDB4Mjc5ZTNhN2IsIDB4ODgzNzVhYWIsIDB4YjI1YmJmZTYsIDB4N2E4NjNlYTcsIDB4ZDg1OWJhNjAsCi0JMHhlMWVlOGM1NywgMHhhNDRlMmFhZiwgMHgxYzIzZmJmNSwgMHgyY2VkMDEzMiwgMHhmNzI5ZWY2ZSwgMHhlZWEyMjdmNSwKLQkweDE4ZTM3MWMyLCAweGI1M2Y4ZmJmLCAweGIzN2E4YmQ2LCAweDNmYWUyOWVhLCAweDgxNTYzYjE0LCAweDRmNjc1ZjNiLAotCTB4YjM2ZTc1YzEsIDB4Y2RlYmU5ZDksIDB4MjNhNTZmZjcsIDB4MDliZmY5ZGMsIDB4NDU1N2JjMjIsIDB4ZmNlOGMyZjgsCi0JMHgwZGQ0NTE3ZiwgMHhjNTliYTdhZCwgMHhhYmNjYTBmYSwgMHg3ZGQwNzI1NSwgMHgyOTNkNGFlOCwgMHg5Y2RiZWI5OSwKLQkweGEyOGJmYjVjLCAweDBiMzljNTFlLCAweDZmYWIxZDcyLCAweDNjMTQ3YzAxLCAweDFmYTJiM2FkLCAweGJiNjc4OWRkLAotCTB4MTNlZjFkM2QsIDB4OTQxNzVkNjgsIDB4Y2M5Y2YwODksIDB4NDczNjdhZTAsIDB4ZjYwNjFiZGMsIDB4M2MxMzdkYmIsCi0JMHg5YTc1OTM4MywgMHgzMjcwNjU3OCwgMHhjMTYzYTdiNywgMHg1YWYxYzI3ZiwgMHg1NDM4ZjIyNywgMHhmYzgzOTY1OCwKLQkweGU2YTljMDc5LCAweDE5ZTUzYzFlLCAweDMwMmJlMDJiLCAweGEzZjRmZTNhLCAweGQyNzRmMDAwLCAweDdiYzcwMjdiLAotCTB4YWQxMmZkZWIsIDB4YTIxZjMwNDcsIDB4ODNhZmNlNWYsIDB4MmFkMDBlMjgsIDB4NGU4NTAzZDYsIDB4YjRkOTJmYzAsCi0JMHg1NGJkMDljZSwgMHgyMWY4MGFiNSwgMHgyZGExZWQxNSwgMHg2YWZhODM1YiwgMHgwYmUyODZmOCwgMHgzZWJlMmVlYywKLQkweDdjNzA0NTU0LCAweDRjMzkzZDU2LCAweDZmODJlNWQ4LCAweGJmMTIwYzllLCAweDZjZWRjMGM3LCAweGVjNTFmZDY1LAotCTB4M2QzZTY1NzAsIDB4ZWY0MGUxZDksIDB4N2MyYWM5NjEsIDB4ZTk5OWQzZjksIDB4N2RlYWQ5M2QsIDB4NWU3NGZlOTQsCi0JMHhkMjk4NmU2MCwgMHgwYmMxNTUwYSwgMHg1YzA2NzgyNSwgMHg2YjdkOTFkMiwgMHhkZTA4OTJjZSwgMHgyYTdhZDU4MSwKLQkweGIyNTlkNTFmLCAweDhkYTZlZTUxLCAweDExZjE3OWRkLCAweDdlNzg1N2Q0LCAweGViZjQ3OTA3LCAweDM5YmJiZWVmLAotCTB4YTk1MWY3MDcsIDB4N2RjNDcyZmUsIDB4ZWIwZmM4Y2EsIDB4ZWYxODM3OTksIDB4ZDg5NGFmZDksIDB4YTAzYWNkNjksCi0JMHg4ZmRmZTMyZCwgMHhiOWZhYmI2MywgMHhmODllZmQ1ZSwgMHhkY2ZkOWZmNywgMHg2OWQ4YzE1OSwgMHhmODVkODU5MCwKLQkweGViYzM0N2VjLCAweDQ2NjVmYmQ1LCAweGI5M2M3MjM2LCAweDVmNGYzMDhlLCAweDU5NzY3N2QyLCAweDA0NjdlZjhkLAotCTB4Y2JmY2VlMWYsIDB4NmUzMDIzYWIsIDB4Njg3ZGFlMzEsIDB4ZTk2NzllMmYsIDB4ZDNlZjUzYTcsIDB4NWVkNjYwZWQsCi0JMHhhM2I0ZWZiOCwgMHhlZTE3YWQzMSwgMHgyNDM4ZWI0YiwgMHhmMDAzMzk4NywgMHgwMzgwNTZmNSwgMHg1NzJmZjFlMywKLQkweDVlZDllOTk4LCAweGYwNjUyYWMzLCAweDhmOTlkYTJiLCAweDZiYmE2N2Y2LCAweDVmOTAyY2NjLCAweDczYjkzNGJhLAotCTB4NzM5MzE5ZmYsIDB4M2JhNWY3ZDQsIDB4YTRlYzdkNjgsIDB4OWZhOWE1ZDMsIDB4Yzc3Nzg3ZTgsIDB4NTY5ZGZlM2YsCi0JMHg4N2Y5MTNkNiwgMHhlYmY3MTVlMywgMHgwNmI3NWUyMCwgMHg3NDBhNGNiNSwgMHhlMDRhYWZkZSwgMHhhZmJlZGE2ZCwKLQkweGUwZTMzZjY4LCAweDk0M2E4ZGM2LCAweDNhMzVjMWY3LCAweDI2YjkzYWNkLCAweGNhNDNlYzU5LCAweGQ3MDg5OTY0LAotCTB4NjE0MTdkYjQsIDB4NDM4ZjQ4NTksIDB4ZTYwODJkYjIsIDB4Y2NmYzZhZTcsIDB4ZDdlMDBjZTgsIDB4ZmIxMWUzZjksCi0JMHg4NzAyZmRjNywgMHhhNzg0MmQ5MywgMHhmMjVhODZkZCwgMHgzNjVmNzcyYiwgMHhiYjI5ZmRkMywgMHg4MTI1OTU4YywKLQkweDIzZWNjY2UwLCAweGQ4ZWJjNDA1LCAweDVmNjgzM2YzLCAweDVlMTU3ZmNhLCAweDdhODdiNWM3LCAweDU4OGUzMTczLAotCTB4YmIxYzc4YzMsIDB4N2Q3MWJmMWIsIDB4ZDE4NWIxZDQsIDB4NzEwZWY3MzksIDB4MWI2M2E4MGUsIDB4YTAxZWJjYTMsCi0JMHg3N2RjNDllMiwgMHg4YjdkZjIwMywgMHg4MGQ2M2Y3YSwgMHhlMzJmMWQ4NiwgMHgyOGRlNWVmYSwgMHg3MmU0ZmVkMSwKLQkweGY3MTE4YjdkLCAweDIyMWFiYTViLCAweDY1YmZjYzY0LCAweGFlM2RjNTU4LCAweDU5YjBjYjdhLCAweDljMzgzOTJhLAotCTB4MTdlN2U3YWMsIDB4MDdiZWVjYzYsIDB4Yzk3MmJkYzcsIDB4ZWM4N2U3NDgsIDB4ZWY3NDdjMDcsIDB4MTFjNjk1YzAsCi0JMHgzY2VmYmViZCwgMHg2YzE1NmJjZSwgMHg3YjNiZGUwYSwgMHg1ZjExOTkzOCwgMHhkMGMxZjNmOCwgMHhmMjlhYzE2ZCwKLQkweDg4OTlkOTU4LCAweGQ0Y2QzNGYyLCAweDAwMmRhMGYyLCAweGM0NTI4YWRkLCAweDdhYTM3MGZhLCAweDg5ZmZmM2NjLAotCTB4ZThhNjNiMWUsIDB4OGVhY2E3MzEsIDB4NzRhNDY0ODcsIDB4ODE3MTYzZDMsIDB4Yzk2MmQ4ZjQsIDB4NWVmODg3MWEsCi0JMHg4NzE2OTRkYywgMHhkODdjNWNmNCwgMHg4ZjQ4MTMxMCwgMHhhYzM4MDc2ZCwgMHgwMDdmNzcyMCwgMHg3YjY3YzNmOSwKLQkweDliYjFlODFkLCAweDBlYWM3YTU0LCAweGJmMDA1OGY0LCAweDNhZTUyOTI0LCAweDVmZjNjYzdhLCAweDUxZGI2ZjIzLAotCTB4ZTc5ODA1OGYsIDB4MWZhZTE0ZjAsIDB4YmMzNjNkMTQsIDB4YjFlOTE0ZjEsIDB4Y2QzYTc1ZTEsIDB4MjlmZWRhMzksCi0JMHg1MjYzZDNkNywgMHgyYzY4YWNjYywgMHgwMTIxNmMxYiwgMHg4OWYxMDZmOCwgMHgyN2M0Nzc3OSwgMHhkNDFjNzEzZSwKLQkweDk2MjlmOTY3LCAweGZkOWY0YmJmLCAweGVjZmE3YWY4LCAweDhhYmYwOGJmLCAweDNhZmM1YjNlLCAweDNiYTM3ZjIzLAotCTB4ZGZlMjMxZGYsIDB4ZmQxOGJiYzUsIDB4MjZlMmNmY2UsIDB4MzcxNmNmYWUsIDB4Y2YwZmJlMzEsIDB4ZWMwZDhmNGYsCi0JMHhmZjE4YzdhNiwgMHg2ZjJmMTY1ZCwgMHg3ZDQ4NmFlZiwgMHgyZmU4NWVlNiwgMHg5OWIwNmVkMywgMHg5NzY2N2VhMSwKLQkweGViNTZjYjVlLCAweDFlOTRmY2I1LCAweDFiYTFkYWY0LCAweDBiYWY2YmQzLCAweGFhZmEwNmJkLCAweDdmNTFlYTJmLAotCTB4NmEzNWIwYmUsIDB4Zjc2Mzk3N2YsIDB4NWVkYmYzZTgsIDB4NWI3OGY5NDMsIDB4NDcwMWYzYTYsIDB4OWRmZWJlNDUsCi0JMHg5MGIzZTdkMSwgMHgxZTExZWFhZiwgMHg0MjM1ZDM5MCwgMHhkYzJhZGI1ZSwgMHgwM2Y4ZmZkNCwgMHhkYjY1N2U3YywKLQkweGNhMGY1YTI0LCAweDU3YmRiOGViLCAweGYwN2IyMzVlLCAweDMxYTRlMTgwLCAweGZmM2VkMTVmLCAweGUxODkyNmUyLAotCTB4YTZlOWIyZDEsIDB4ZmVmMWE3Y2EsIDB4ODE5MmY2MzAsIDB4ZDRlNTM4ODksIDB4MTQzZjE1MGMsIDB4ZjhhMTJhOGMsCi0JMHg5OTllODE2MSwgMHhjOTZkZGY3MSwgMHhiNzNmYmUyOCwgMHg3Yjk1OTQ0NCwgMHhmNTNiMGJhMiwgMHhjZGJlZGZhMCwKLQkweGY3ZTlmYjg2LCAweDdiY2ZmYzM0LCAweGRjZjcxMzRlLCAweGYyNDE3YjRkLCAweGRkNWZmZGUwLCAweDcxMmE3YmNmLAotCTB4OTdmYmVkMzgsIDB4Y2JhNzdjYzUsIDB4ZjYxZjg0MmQsIDB4ZGU3M2UwNmUsIDB4ZTVlM2ZiMmYsIDB4OGQ0YmMwOTAsCi0JMHg0NzhiYzVhYywgMHhlNTE3ODgwYSwgMHg4NzgyYWQ1YywgMHg1NjViYjdlMiwgMHhmOGE3NWM2MCwgMHgzMmZjODk1OSwKLQkweDc4MmI3OWZmLCAweDc2MWY3NmVhLCAweDkwOWRmZjIzLCAweGRiNjJmN2VlLCAweGQyNWJiZjM1LCAweDE0NDQ3N2VkLAotCTB4N2ZjZGZiM2MsIDB4MzIzZmEyYmIsIDB4MzdiYzA4ZDgsIDB4ZjQ4MmY4MWIsIDB4ZmM0ZmZiODcsIDB4YjhjNzQyMWUsCi0JMHgzZDZhNzFmZSwgMHhjM2MwOWFmYywgMHhlMzcxY2E4OCwgMHgyZTk5YWRkMSwgMHhkNWY5OGFmYywgMHg4MDRjMWZmNywKLQkweGI3MWY2N2Y5LCAweDYzMDNmZGQyLCAweDllZTg5OGM3LCAweDNlNDFhZGJlLCAweDlmMGE2ZmQyLCAweDNlNzBmYTE5LAotCTB4ZWNmZDExNmIsIDB4NGI5NDVjNGUsIDB4MjQxYTc0ZmIsIDB4MmUxM2RhMGIsIDB4MzdiZjEwNmYsIDB4MDgyZGY4MDUsCi0JMHhmNjdmZWNhYSwgMHg0NzgxMjRlYSwgMHg2ODllZmQwYiwgMHgwMDZmNTg4MywgMHg0ZTU3ZThlZiwgMHhjMDFmZDY1MiwKLQkweDg4Y2ZjYTNiLCAweGQ3MDc0ZTQ2LCAweDJjODc0ZTE2LCAweGU1NjdlM2M2LCAweGYzMGQ5MmQ1LCAweGY3MGRlNWVhLAotCTB4OGEzZTcxMWIsIDB4NTBiZjg1ZGUsIDB4ZmM1NDVkMzUsIDB4MjdmMzU3YTksIDB4N2JhZDU0N2QsIDB4MzRmYmUyMjUsCi0JMHgxODg3ZTU1MywgMHhmYzA2OTkzZiwgMHgwY2Q4OTFiZSwgMHhmYzNkZjdmZSwgMHg1Zjc3ZWRkYiwgMHgyZjdiZjNhZSwKLQkweGE3OGUxZjcyLCAweGY0NDc4OGVkLCAweGRjN2QxMmYzLCAweGJhYzJmMjZlLCAweGRkZjVkNjEwLCAweGYwNmI3N2E1LAotCTB4NmJiOWZlMzgsIDB4MjQ5YWJmOWMsIDB4M2IwMWM2MmIsIDB4ZWZjMzU0ZjEsIDB4ZjA1NmNmNmQsIDB4Nzg4YWZjODQsCi0JMHg2MzI3OWM2ZiwgMHhmODgzN2U3OSwgMHhmOWJmMWZkZCwgMHhiNTA4M2VlMiwgMHg5ZDM3MTcxYywgMHg5MDZmZmRlMiwKLQkweGJjYzAyYzZjLCAweDdmZGZlNDdiLCAweDkyN2I2ZjkwLCAweDJkMWY0MzVmLCAweGU0MTNiZWZmLCAweDJlZmI4MjNiLAotCTB4NzdlMjRkZGMsIDB4MzQyMzFhMTksIDB4N2RmZWMyNzksIDB4MzViMDFkYjgsIDB4ZmQxY2Y4MDgsIDB4MWIwNmMzZTgsCi0JMHgyZmUwYTdkZSwgMHgzZDYyYjFlZiwgMHhhYWRmN2I0MywgMHg0MjBmOTdjYSwgMHhiMTJlMzE4MCwgMHgyOGNlY2NjNSwKLQkweDc2ZTVmNDcwLCAweDZlZGY1YWE1LCAweGIzMzE2MjBmLCAweGJmZWU3YWIyLCAweDRmNWJhMDlmLCAweDFlNTI4ZGY2LAotCTB4NWVhMWUzODYsIDB4NTRmMTgwNmMsIDB4N2Q3ZjJjZjksIDB4ZDdlNWY4YWYsIDB4MGZjNjU3OWIsIDB4Y2UzMjk3OWMsCi0JMHhkODdlN2JkZiwgMHhmZTc5OWFjNSwgMHhkMDI0NWYwMiwgMHgyNmRmZTE3OSwgMHg5ZmE5YmM2MywgMHg3YmRmNTdhNCwKLQkweGZlNmZkY2FlLCAweDNiM2ZlODRmLCAweGZlZTdhNjI1LCAweGY2ODViYzU5LCAweDRlZmIyOTM3LCAweDBlM2NmZDk0LAotCTB4ZjNmYjEzMGIsIDB4YWUzM2ZlNmYsIDB4ZmNlYzU3ZTMsIDB4OGU5NjQxZmMsIDB4YWUzMzcwN2QsIDB4M2EwNmI5MGYsCi0JMHg4OGU1N2FjNywgMHg1NzNmZTI4MSwgMHgyZTdiZjAyNiwgMHhiZjdiN2Y2ZiwgMHhlZGYyZjUxZSwgMHhmZjAxMTRhOCwKLQkweGU0NGI2N2I3LCAweGFlYzUxZDFmLCAweDZkMWRhMzQ3LCAweDgwMjU3ZGE2LCAweDFmOTgxMWJmLCAweDFjYTlhOGM5LAotCTB4MzMzZWU3OGYsIDB4ZTE5Njc4YjcsIDB4MTdkZTM2ZDMsIDB4NmRkMjBlZmQsIDB4N2JmNzRjOWMsIDB4YzZhM2RiMzQsCi0JMHhjMGZhM2FlMywgMHg3MTgxOTY1OSwgMHhhOWVmNTg3NywgMHgxNjIxZTY3ZCwgMHhkOGM2ZjU4MywgMHgxOGZkYzg2MywKLQkweGIxZjlmNzVkLCAweGU4YzcwMDk5LCAweDBhY2RiMjIzLCAweDBmZWZhNmY1LCAweGY3N2NjNTBkLCAweGU2M2FmNWMwLAotCTB4MGM2YmUxNTQsIDB4NzNjMzJjZjMsIDB4ZWQ1YmEzM2UsIDB4MjJlZTExMzMsIDB4MmUzMDVmYjAsIDB4NzFiOGQ0NWYsCi0JMHgyZTQzOWUxOSwgMHg3YjUxMmY1YSwgMHgyOTM5ZGI5NywgMHhiZGIzZTYxYywgMHg0MzQ5YjNmYSwgMHgzZDQwMWY1MCwKLQkweDllYjVjNmVjLCAweDQ4ZDU3M2Q3LCAweGNmMzk0YzM2LCAweDI0Njc1YzZmLCAweGVmYzM1MTdkLCAweDkxZWVkODZmLAotCTB4ZWJmNzk5OTgsIDB4ZGJiZjQzMzEsIDB4MmNmYjQzZDcsIDB4ZDA1YjYzOGEsIDB4N2NkNTcyMGUsIDB4NWNkZmZiNDYsCi0JMHhkZmI1MjcwMCwgMHhjY2M1Y2ZjNiwgMHg5NDU2NzY4NywgMHhhOWZiOWE5NywgMHgxMmY1ZTJiZiwgMHg0NTczMjNjMywKLQkweDU0M2FmOGRiLCAweGMzNjBjNDc0LCAweDlmN2I3NWVmLCAweDJhNzRmNWE1LCAweDhhOTA5NzhjLCAweDAyNzc4ZWViLAotCTB4ODg0NzM5YzUsIDB4ZmZjNzdiN2QsIDB4ZWQ1ZGY5MGYsIDB4ZDU4ZmQzOGMsIDB4MmZlYjkyZmMsIDB4OWZiZjI5ODksCi0JMHg0ZjlmNTdhYiwgMHg5N2QzZThlYiwgMHgyZGIxMGJlZiwgMHgzZjQxNDYzMSwgMHg0OThhOGNlZiwgMHg3ZDVmMTFkNSwKLQkweDcxYjRlNzQ2LCAweGYwMTM5MzVmLCAweDE3OWM1NDdkLCAweDhjZWEzZmRiLCAweDQwOWY3ZDUxLCAweDRmM2YyYjJmLAotCTB4OGUzMGQwNWIsIDB4MzIxNTUxY2UsIDB4OWFhMzlkMDcsIDB4OGZkYjlhMzYsIDB4YzgyOGZlZWYsIDB4ZGUzM2ZiODMsCi0JMHhlMzdhZjgzNSwgMHhlMjNmZmRmYiwgMHhiNmRjZDNiZiwgMHhiNmRmZWI5ZCwgMHgxZmRhMTZlNCwgMHgzMDdmMWU3YiwKLQkweGI2NWM2MDA5LCAweDcxN2QyNjVlLCAweGNlODE5YjdlLCAweDcwMThjOTBkLCAweGU3NmRmYzQ0LCAweGY1ZmVjNWY2LAotCTB4NWJmM2RmYmMsIDB4N2UzNjFkYjgsIDB4NzA5MzFkYzMsIDB4NTliMDVkYmQsIDB4ZjVjNDY3MzksIDB4Y2UzZmUyYjMsCi0JMHg2MmYzODhiNywgMHhmYzhkMWI5NSwgMHg1ZmVmYWNkZSwgMHhhYzNkMTQ3NywgMHhiZjkxMWVmYywgMHhmY2ViMmQ5ZSwKLQkweGM5MmY2Y2ZkLCAweGZmYWQ1OTRmLCAweDJlZDBjY2Y5LCAweGVmZTkwNDNmLCAweGI5Zjg4YWZkLCAweGExODE4OGZjLAotCTB4Yjk5ZDIyMWYsIDB4NGY4ZmY5NDQsIDB4ZWY4NzFkNzAsIDB4M2IyNTFiYTMsIDB4M2EyYTNiOWUsIDB4MWQ5MGYyNmUsCi0JMHhkZjc3OTllZCwgMHgzOTNkNzFjZiwgMHgzYWZiYTI2MSwgMHgxY2YwNTVjZSwgMHhlZjkzMjhmNiwgMHhmNzgxYmYyZiwKLQkweGUzMzUxYzlmLCAweDk3ZTAzY2NlLCAweDA1ZWY4NDc5LCAweDNiZTExMTZjLCAweDQ3M2YzMzZiLCAweDJhYjQ3NTk3LAotCTB4ZTdhZTNlNzYsIDB4N2ZkYzc4MTMsIDB4OWNjY2I1NDEsIDB4ODlmMGZkMmEsIDB4Mzc3OTlmNjQsIDB4MWVlODE3NWYsCi0JMHg1OThlODU2YiwgMHhiOGY5Y2FjNiwgMHhlNTYyZGU5ZSwgMHhkOWJhZDhmYSwgMHgyZmNkZTc0MCwgMHg3NjBjZmQwOCwKLQkweDUxMDNkZDNlLCAweGFjNWQ2YmJjLCAweGUyZmY0NTUxLCAweGY4YjE3NWE2LCAweGM0MmIyODUzLCAweGUyNjViNDM5LAotCTB4OTFiMTdhOWMsIDB4NDdiYzUzOGYsIDB4OGQ1NDZjYjIsIDB4ZjRhM2Y0YTMsIDB4ZGJjNWRjNmIsIDB4NjdmMTM1YTUsCi0JMHgyMzE3ZmQ0ZiwgMHgyZmNmMzQ3YywgMHhmYzI3YTg4YywgMHg3ZTM2ZTlmYiwgMHg3YThjZmQwZiwgMHhlZTE1NWFmZiwKLQkweGFlZjUxODE3LCAweDhjNzI5NzRjLCAweDJkMzUzMzNhLCAweDBmNjQzZWYwLCAweGQzMWZjZjhmLCAweDc0N2Y3ZTY5LAotCTB4MzU4MjVmZDQsIDB4NmNiYTkxZjksIDB4ZGZhMDc3OTAsIDB4NGVkYzBkNmQsIDB4NjUzZWNiYWIsIDB4YjJhMmNiMmMsCi0JMHg1Y2JiZTUwNSwgMHgyN2NiODVjNCwgMHg3NWY1N2RmMCwgMHhhMzk3NDcxOSwgMHg5MmNkNGZiYywgMHhkYjk4MWY4OCwKLQkweDI5ZGZjNDY5LCAweDhhY2NiYjA3LCAweDU5MDVhNzc5LCAweDY4MDJmZGJjLCAweGY3NTg3MjhmLCAweGQwNGI5NzJjLAotCTB4MWZkNDU2MGYsIDB4ODMwMDE3ZmYsIDB4ODAwMDAwN2IsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCi0JMHg3Y2VkZmYwMCwgMHg1NTUzN2M3YiwgMHgzOTNlZjBiNiwgMHg1MjZkMzQ3OSwgMHhhMGZhNWI0MiwgMHhiNGRiNGU1MCwKLQkweDk0OTRiMTRkLCAweDI3NDU3ODk3LCAweDg4MGI1YTNjLCAweDQ2MTA3MDA2LCAweGY0MjI4MjA2LCAweGJkMTg1NDk5LAotCTB4MzVmZGUzMzgsIDB4OWM0MTQ0MTUsIDB4MGU3YzU3MGIsIDB4NDJkMmQzN2EsIDB4MTQyOWEyYzEsIDB4MjBkNWIxNmMsCi0JMHhiNDc0NDFkMiwgMHgzYmQxNWVmNiwgMHgwZjhhZmVhMywgMHg1MmQyNWEwNCwgMHg4ZWY0Zjk4NywgMHg2YjVhZGZhMywKLQkweGExMjZkMzlmLCAweGRmN2VmNTE1LCAweDM3ZjUzNzVmLCAweGVmNjc1OGIzLCAweGJkZWIxZmIzLCAweGNlMjc1ZWY2LAotCTB4NjIwYTNiNWQsIDB4ZDY3MzE4ZTMsIDB4MzE5ZTkyMGEsIDB4NmFiZDU0ZDYsIDB4YzYxNGYyNzMsIDB4MmM4YmE2OGEsCi0JMHg2N2U3YzI0MiwgMHhmMDExOTJiNCwgMHgyYzcxMzNlNiwgMHhkM2UzYjE4NywgMHgxOTM5ZGIzZiwgMHg3NDMzOWRkYSwKLQkweDdmZjQxZDI2LCAweGM2MzdkMzU3LCAweGYzZWM2MDY0LCAweDk5MWNjNjRhLCAweDVlYTViMzg4LCAweDY5ODQ1OWMwLAotCTB4OGMwOWUyYzIsIDB4MDYwZTMxM2QsIDB4ZWFkOGNhOTksIDB4MGMwNTk5ZTYsIDB4ZWNjZGRmOWUsIDB4ZjhiZmIxOWIsCi0JMHg3OTgxZjQzNiwgMHg0N2EyMGQ1ZCwgMHgyZTljMDAyNywgMHhjNjBkYmE4ZSwgMHhjNjgwZjc3ZCwgMHg3ZTNiMjgwYSwKLQkweGZkZGE4ZTgzLCAweDE1M2RhMDA3LCAweDRmYWVkOGUwLCAweGRjYmZjMDA0LCAweGU4NmU2MWE1LCAweGM4OTc3MWIwLAotCTB4YjJmZmY0MTgsIDB4YzVmN2EwNWUsIDB4OTA1OTdlZTcsIDB4M2FkYWY4MDQsIDB4Mjk4M2FhYzEsIDB4YWQ5YWVmOGYsCi0JMHgxZWZlYzI0ZCwgMHhkOWJjNjFjMCwgMHhiYzY4NjljZiwgMHg3Zjc4ZmJiNSwgMHhjNWU0MzNmOCwgMHhmMTg2YjYzMywKLQkweGUyYTYzNWJmLCAweDYzMmU1OTliLCAweDY1YTdjY2U1LCAweDY5ZWZkMGU5LCAweDExNWRhN2NkLCAweGY4N2JlZGJjLAotCTB4MTgyN2IxNWYsIDB4YzYwZmFkMmYsIDB4NGJiNmQ5Y2IsIDB4NmY0MDM0NjIsIDB4NzUwZWYzZjAsIDB4ZWYzODZkZDcsCi0JMHhiNGY0MWJmYSwgMHhiNjM3ZDllZSwgMHhlYjhmNWU5YywgMHg1YzMwZDA2ZSwgMHhlZjFiZWNlNywgMHhiYTAyZWY4ZiwKLQkweDk2MzM1MWFlLCAweDhlOTA2OTNjLCAweDBjYzc4OGU1LCAweDU1OWQ4ZWIxLCAweGIzMWZhNGRhLCAweDFjNzU5MDllLAotCTB4M2I4YzY3MTksIDB4NjNmYzBkN2IsIDB4M2RmNDliMTIsIDB4YjhkY2VlOTAsIDB4NjI4ZDhjOTEsIDB4NzQwYjVkY2MsCi0JMHhiNjdlMDA0OSwgMHhmMDBmMzYwYSwgMHg0NzY1YjhhNSwgMHhmM2Q2MTZiYywgMHgwMmZkZmUzZCwgMHhmMTFkYjZmMCwKLQkweGI2ZDczYzIyLCAweGJkMmZkNDA4LCAweGFkNjJjMzhkLCAweDYwYWZmMTZkLCAweDBhYWZjNTFmLCAweGIwNjk2YWE2LAotCTB4YjljZTMyYmYsIDB4N2RmMTAyNzEsIDB4YmZlZjMzNzMsIDB4YjVlMDE1YjEsIDB4YWM1ZjhmYzMsIDB4MGFjNmJlZGQsCi0JMHg2NWRkNGE3MCwgMHg3MmI4NjRhZCwgMHhiMTdlNjUxYywgMHg3MzljNzgyZCwgMHg4ZTg1N2NiMiwgMHgyYzFhMmY5NywKLQkweDEwYmJhNDZhLCAweGFmN2U0NTY5LCAweGFkYmNiODE3LCAweGRjNzk5YmJmLCAweGFjYzk0ZjIwLCAweDg3NDA2MDQyLAotCTB4OTAxM2U2NDQsIDB4YmQyOWMwZGYsIDB4ODZmY2U0MWQsIDB4Y2I1NTkwM2UsIDB4ZjE3ZWRkMjAsIDB4MWQ1YjA0NzUsCi0JMHg2Yzk5Yzc0MCwgMHgzYjNlMTA2NCwgMHg3ZmE4MjkyMiwgMHhhODM1MjliZSwgMHhlY2M0YTZmZCwgMHg1MmI5ZjZhMCwKLQkweGRmM2UxMDVlLCAweGZmNTA1ZDcyLCAweDQxOTlkNjA1LCAweGU3ZDNhZGY4LCAweDY4NWZmNTA2LCAweGRiODQxODViLAotCTB4ZWI4ZDQ5OTgsIDB4YmE1Y2FkNmYsIDB4OTk5MDczZjgsIDB4MDQxZDJiNTcsIDB4NzAyODdhMTUsIDB4ZDhjNTRlODYsCi0JMHhlZTBiYzEzZiwgMHhhMDM2ZWM5YiwgMHgxOTI4OGNjZiwgMHgzZTM5NzM2NywgMHhkOGQxZjAwMiwgMHgwNmRkYjM3ZSwKLQkweDIwOTE5ZDc0LCAweGM3MDE2Y2UzLCAweDA1ZjY5NTkzLCAweGU1MzhmZmJjLCAweGZiNzg1YmZkLCAweDJkZmI0YTM1LAotCTB4ZDJhMjdkYmMsIDB4YWZjNzJiN2UsIDB4ZjFlZWQ0NjcsIDB4MDM3NzZhZGMsIDB4OGVkMWViZmUsIDB4YjZmODA5NmEsCi0JMHgxMzhhZWJlNCwgMHhmZGU5YTAyMywgMHhhNzc3NDVhYSwgMHg0NTU4M2YwMiwgMHgxOGQzNjMwNiwgMHgwMDM0ODc1YiwKLQkweGVkMTgyZWQ2LCAweDM1MWE0YTc4LCAweDdmZjRhZWQ4LCAweGUzNTdiMjU1LCAweGQxNGJkZWYzLCAweDYzMjI2Y2I5LAotCTB4NTFkZmM4MGQsIDB4ZTYzMjFmM2YsIDB4NzE2Nzc5YTMsIDB4MTE1OWIyZDIsIDB4MzNlYTFmMDYsIDB4MGNmNGQwOGIsCi0JMHg2MzFhNTFlOCwgMHgwZGIxOGQ4MiwgMHg5MDZmNDgzMSwgMHgwNDc3YTIxMywgMHg4OWE1NWY0MSwgMHg4OTk1ZWJlMCwKLQkweDk0YThkZjA0LCAweDYzMzM2YWQ4LCAweDgyMTY5NWVkLCAweGY0YWQyYjI3LCAweDc0ZTU1NGZjLCAweGRhNTc2ZjgyLAotCTB4NTk1M2JlMDgsIDB4ZDJhM2IwNDgsIDB4ZTI5MDUwNGUsIDB4OWYxODcyZDgsIDB4YTIzZWIxZWQsIDB4ZDViODdhNDEsCi0JMHhmY2MyY2YyMywgMHg3ZTQwY2ZmOCwgMHhkNGM2NDI4NiwgMHgxNzIyYWNlYywgMHhjYWJmNzlkMCwgMHg2NWY0OGFkNiwKLQkweDZjZTk4YzZjLCAweDVlZjNlMGQ0LCAweDgxNTI0M2ExLCAweDQ2YTdiYWRlLCAweDBmNDBlYjU4LCAweGYzN2EwZjhjLAotCTB4NDYxN2EwNGMsIDB4MTFiYWMxYTcsIDB4ZTU5YzYxNjgsIDB4YmI0MzUyNGIsIDB4YmFkNjlkNzEsIDB4MDI5ZmRhMTEsCi0JMHhmNTg3YWI3MywgMHhkYTk5MWFkNCwgMHgxY2M5ZjYwMiwgMHgzNGYxMTAwZiwgMHhmN2FhOGQwZSwgMHg3ZmVjMDU1MiwKLQkweDFmZjUwNDVmLCAweDAyMzZjNjAzLCAweDE5NjgyNWZhLCAweDdkZTBmN2MzLCAweDFmZmQ4MTE2LCAweGRmZDgxMTYzLAotCTB4Njg0MDI0ZmMsIDB4MTBlMWFkYWYsIDB4MzdmNDgyMjQsIDB4NDNjZGU3NDEsIDB4ZTJlMDllZmIsIDB4ZDU1NWQ4ZWIsCi0JMHhlZTMwNDkyMSwgMHg1YzdjYTlhZSwgMHgyOWYxMzE1OCwgMHg4MTE5Y2M1ZiwgMHg0OTlmYjJmNiwgMHhiODM5NGMyMywKLQkweDAwNWFiZDFmLCAweDgzZDVlODgxLCAweDJiYjAwOWRmLCAweDQ1MDM0ZjU5LCAweGRiMjRmNDAyLCAweDAxZDRjMTEzLAotCTB4YmQ0ZDc1N2EsIDB4ZTA5ZjA4MjksIDB4M2ZlYTBjNGQsIDB4NmEwYTU5YjEsIDB4ODI1OWYzY2YsIDB4YjQ5ZjI3ZGEsCi0JMHgzYjUzZTEwNiwgMHhiZmY1MDdhNiwgMHgxMDViNDNmNiwgMHg2MTU3NWQ3ZSwgMHhjZmViZmY1MCwgMHhmZWYwODNkOSwKLQkweDYxOGZkODFjLCAweDk0ZGVmZTc4LCAweDlmZjUwNDI4LCAweDcwM2FkZTBiLCAweDg5YWFjNjdjLCAweDIzMmRmMzNlLAotCTB4MWJmNzllODMsIDB4MWI4NjlkMzgsIDB4NzgzNTgxNzcsIDB4YjcxZjg1NWMsIDB4N2YxZTBmNGUsIDB4ZGM3ODJkYTEsCi0JMHgzZDg3Y2IxZiwgMHg5MDZhMjdhMCwgMHgxM2QwN2FmZiwgMHg0ZjQxZmI4NCwgMHgwZGU3MjBkNCwgMHhiZjg4MjdhMCwKLQkweGQwODI3YTA4LCAweGNmODI3YTBiLCAweDIwOWU4MjBmLCAweDgyN2EwNGRlLCAweDEzZDAxMWY4LCAweDRmNDE5YmM0LAotCTB4M2QwNTFlMTAsIDB4YTM1N2U3YzEsIDB4ZWYzY2JiNTcsIDB4NTNkZTc5NDksIDB4ZWQ4Y2JjZjIsIDB4OGQ1ZDNhMjAsCi0JMHhlZmNiNmYyZSwgMHhkZmJmMjNiZiwgMHgwNzliZWY4MSwgMHgzMGJjYjBlNSwgMHhjODM1ZjU0MywgMHhmMzk4Y2NmMywKLQkweDg3NTgyZWRhLCAweDAxNTc1ZDZkLCAweDZmN2Q0ZGM2LCAweDgyNDZhYzhhLCAweGM5Y2YwZTZlLCAweDVhYWI4YzRhLAotCTB4OTQ1NmQ5NjIsIDB4NWJkZjdiNWYsIDB4YTcwZmM0MmEsIDB4ZmI0MmI2OWIsIDB4NzhmZmU2OTYsIDB4NGRmZGRiMDcsCi0JMHhjZGYxODRhMiwgMHg0NTlmY2RlYiwgMHg1ZjNkMzhlMywgMHgyYzc1MzI0NywgMHgzNDU5ZjdiZSwgMHhkZjY1NGJjNiwKLQkweDQyYjdjMjMwLCAweGI5YzVmYTNiLCAweGU1ZjMyMjhkLCAweGI1N2JiYWEwLCAweDU2NjNkZWQ4LCAweGUzMTY4ZjcwLAotCTB4YTM0MzdiMzMsIDB4NWE1MmY5MTYsIDB4NmZlZDQ4ZGYsIDB4ZWRjMTM1N2EsIDB4ZWQ0MWQ1ZjUsIDB4YjAwZmVjMjYsCi0JMHg0Njg5ZWQ1NCwgMHg1NjY4NWU3YSwgMHhmZjUxZjNjNiwgMHhjM2Y3MzMzMiwgMHg2ZjhmZWExNywgMHg1YmQ2MWViZSwKLQkweDU2MmFiOGRlLCAweDM2OTdmNTg0LCAweGQ3N2YxN2JjLCAweGUyZmZkMDBmLCAweDFjNzIxNzkxLCAweDBiNzk3ZWYwLAotCTB4MWMxODY3OGMsIDB4MjM0NWJjYWYsIDB4NjVmZDdjZTMsIDB4MTg4MmM2ZTYsIDB4NjIxYTFiYTAsIDB4ODdhY2ZjYjAsCi0JMHhjMDFiNjc2ZCwgMHhkNzM2OTQyZSwgMHg1NzdjNjE5NSwgMHhjMzQzYjk2YSwgMHg1ZWJkM2U4MCwgMHgwMWQ3MTBiMSwKLQkweDcxMDYyYTdmLCAweDkxODk5OTViLCAweDdlZjFlODdmLCAweDhjMTc3ZDE1LCAweGM0Zjc5YWZiLCAweDdhODdlODJkLAotCTB4ZTM0NzhmNWIsIDB4ZDA0ZGJkYmMsIDB4YWJiZjgwM2YsIDB4YjExYzc5NTMsIDB4ZmM0YjU1M2EsIDB4MWUzYTY5ZWIsCi0JMHgxNmZiNDEyZCwgMHg3NzRlNzFlZiwgMHhmZmY2OGZiNSwgMHgwMmY3OGNiYSwgMHg4YjM3N2EyNCwgMHg1YWZhMmUzYywKLQkweGM2NTA3YzQ1LCAweDlhMzNhMTczLCAweDQ2MTllZDhhLCAweDk3YTc1N2RjLCAweGFhN2Y3N2NmLCAweDU3OWI5ZmM0LAotCTB4OWZmNWM2YWQsIDB4NTUzNjVjNGEsIDB4YWUwNWZiMjQsIDB4ZjFkZWYwMWEsIDB4YzJiNmViZjMsIDB4MzBiZDRhNTIsCi0JMHhmN2YyMTBlZSwgMHhiYjZlM2NhOCwgMHg2OWJmNDcxYywgMHgxYTNlZDQzZSwgMHgzMGFhN2VlOCwgMHg4MDdjOGYzNiwKLQkweGFhNjM2ZmRjLCAweDY4MTVmYThhLCAweGU4MGFlNjFkLCAweDhjOTA2OWQ3LCAweDE2MGZjZjI4LCAweGJmOTExYmE2LAotCTB4ZTdjNDIzYWYsIDB4MGViNWJiODUsIDB4N2M0ZDI1ODAsIDB4NDc1MzRlYmUsIDB4Njc1ZGNhMzQsIDB4ZTMxMTY0ZDMsCi0JMHg3ZmJjNjU1MSwgMHg5MDFkZTc5MSwgMHhiOWJlMDFlZiwgMHg5ZTQ1NGY4OSwgMHgzMzhlMDM2YSwgMHhmY2ZlM2ZjOCwKLQkweGJkMTM1NGZlLCAweGRlZjNjYTc3LCAweDdmNjAzYjkyLCAweDJiMjg5NjlkLCAweGNiNWRhNWYyLCAweGE1ZmQ3MDhhLAotCTB4YmU3MTYwZTgsIDB4YTQ2YWU0ZDYsIDB4ZmRkZjMyODMsIDB4MmQ3YTNmMzIsIDB4YmZhYmUyMmEsIDB4YmJmNzIzNTksCi0JMHhmNTA1OGVhMywgMHhkNTdlNzBkMywgMHhlNGM3YWYwNiwgMHgzYmZiZjMzOSwgMHg3M2Q5N2ZhMCwgMHhiZWY4YzMyMiwKLQkweDhmMTE1MzRjLCAweDIwZmNjN2ZiLCAweDlkMzJkZDY4LCAweGY4YmUzNGNiLCAweDJkNzkwMGY4LCAweDFiZDAxOTZiLAotCTB4OGI3OWM5MDMsIDB4ZjExMjI3YTIsIDB4YTc2M2UxNTMsIDB4NGFlYmU0NDUsIDB4MmMxODc5ZDQsIDB4OGViMWFjYjksCi0JMHhjZWQ0MWFlNCwgMHg0ZDM5MDdhZCwgMHhmZjIwZWE4ZSwgMHhkY2NmZmM5NywgMHhmYzBhZDU0ZiwgMHhmYjI1NTliOSwKLQkweGI1YzcxNTRkLCAweDNlMmZkMTAwLCAweDc4NTNmYjI3LCAweDFmMDA5OTlmLCAweDAwMTQ2YzBiLCAweDRmYTYxNGQ3LAotCTB4OTE3YzQxNTUsIDB4MjFlNjM2MmMsIDB4YjZhOTc1M2YsIDB4ZmY5ODU0YTYsIDB4Yzg3ZWM5N2QsIDB4NjQ4OWYxNDIsCi0JMHg1NTNlNDNiNCwgMHg2NmUwZDk3ZSwgMHg3ZWZlZDAyMywgMHhkYmNlMjRmNCwgMHgwNDc5MDRkZiwgMHhkMTFlNWJjYywKLQkweDkwNzNlZjNjLCAweDI4MmI3ZWNmLCAweDdmYjdhYzA4LCAweDVjZTI4Njk3LCAweDAwODMzYjEwLCAweGU5OWFjZDcxLAotCTB4OTRiZTVmNWMsIDB4ODg0NGQzMWMsIDB4NTRhYmNiMTcsIDB4YzgzMmFmYjQsIDB4NWY5OGY0YmYsIDB4NjJlZWY2YzksCi0JMHgyOGFkZWE2MywgMHg0NTI3NjVhNywgMHgyYmU2MDQ1MywgMHg5ZDdmZDRkZSwgMHg4NjgzNzg4MSwgMHg1N2E3MmFmMiwKLQkweGZmMzBmYWIwLCAweDI1NWEzMjZiLCAweDlkZWFjZmMwLCAweDlkMzc5ODY5LCAweGUyZDNlYWFkLCAweDNlMjE2NzdiLAotCTB4Y2JjZjljN2YsIDB4YTdjYjRmNTAsIDB4ZDQ1MTlmNzMsIDB4MTkzZGEzYmMsIDB4NTdlNjA5NjAsIDB4YWZjOGNmZTIsCi0JMHgzYTk5ZjI0MiwgMHg4Yzc1YzdmYywgMHhmMjE1MzlmZCwgMHhiMjZmOGMxYSwgMHgzN2M2MzY1OSwgMHgwNDhjZTJmOSwKLQkweDdmOTk1ZmQyLCAweDE3MTAyNzZjLCAweDEzZjVhNjEyLCAweGRmYTgwOWFjLCAweDNjZDJkNDViLCAweGFiNmY3N2RjLAotCTB4NzFmNDg0YzYsIDB4YzYyYTFkYjUsIDB4MjJjYTdiNzUsIDB4YWZkODJhYWQsIDB4YTI1MWMzNzMsIDB4ODE1ZmVmNjMsCi0JMHhmNjU3MTBjZSwgMHgzM2NhMzIyNiwgMHg2N2E3MTk3YiwgMHg2Nzk3MzM2ZiwgMHg0NGYwNDY5NywgMHg5ZTIwZmJlMCwKLQkweGUwODQ1ZTM0LCAweDVlYTY4MmE5LCAweGQ5MzQ3Zjc3LCAweDUxMGFjNjIxLCAweGNiMmRkN2ZlLCAweDY4YmM2MTUwLAotCTB4ODAzMzcyMDMsIDB4NTdiOTE0NDcsIDB4ZjVjMGE1ZmMsIDB4OTc3NTQ2ZmMsIDB4N2JkZTEyMzgsIDB4ZTdmZGMzNDMsCi0JMHg0OGQzNTNkZiwgMHg5OTY4ZTdlZSwgMHg0NmY1ZjEwMywgMHhjNjJiZjkyYiwgMHg4ODdkZThhYSwgMHg1MmZlMjhhNywKLQkweDY3YzQzNWZjLCAweGM3MjU0ZjE0LCAweDE0N2U0OTdhLCAweDZkNTBiYzNmLCAweGFiOGUwNGQyLCAweDgyMWJkZmJjLAotCTB4MDU4MGYzMmIsIDB4ZTBlZGUzZTEsIDB4ZjhjMGRlZjEsIDB4YTZmYzc5MjMsIDB4MWU3NDBmOGMsIDB4NmFmZTc0ODEsCi0JMHg3MGZjOTU4YSwgMHg5MWYwNDJjYSwgMHhhNDE1NzdhNCwgMHhmNTllOGE3NywgMHgwMWNkNWM4MCwgMHgzODEwY2FiOSwKLQkweDFkNzZjYWJmLCAweDcyODA3M2EzLCAweDAwZTc0MWQ2LCAweGRlN2NkMTA1LCAweGYxMWY5YzAyLCAweGQyMTMwZTQ4LAotCTB4ZWRmZmRhMDQsIDB4ZGI1ZTljNjksIDB4YTdkOGE4NjQsIDB4YzRiNjY5MTMsIDB4Njk4ZDgwMzQsIDB4YTQ2OTMxOGUsCi0JMHhiNzkyMjYxZiwgMHg0MDhjYjJmNSwgMHgzNWQwOTI3YywgMHhmNzVkN2Q4NCwgMHhmMDZlN2UyNywgMHhkYTNkYzgxNSwKLQkweDA4NTc1Zjk5LCAweGZlMjAzOTkyLCAweDZlZDNmZDI5LCAweDY5YzM0YjJkLCAweDE4MTYxZDZjLCAweGJkNzE4OGFmLAotCTB4YzVkOWU0NTEsIDB4MWI5NWIyYmIsIDB4MzAzOTkyZjQsIDB4N2ZjM2IyZmUsIDB4NzJjNTY3YTAsIDB4Mjc5ZTExN2IsCi0JMHhkOGUwZmU0MCwgMHgyNzk5MmYxMCwgMHg4ZjYyN2JjMywgMHg0ZmQ3M2MxNiwgMHg3MzU3NzM5NiwgMHg3M2QzZWUzMCwKLQkweDA1MTlmMzc5LCAweGZmYzljNjBmLCAweGY1ZTcyNjk0LCAweGM4YTdmY2IyLCAweDEwZWQ1OGYyLCAweGFiZGY2ODNjLAotCTB4ZWUxMzU1YmYsIDB4OTA3ODJlNWUsIDB4ODc4NGJmMDcsIDB4NDVlNDYyMWIsIDB4OTlhMmJmNjIsIDB4YmY0N2Y0MWUsCi0JMHg4ZWYyOTQwNCwgMHgyZmE0NzE5ZCwgMHhiOWZiMDhkNCwgMHgyZmZmZGU0ZCwgMHgwMjYzYmVkNSwgMHhjNjg0ZTdlYywKLQkweGMyZjk4YTliLCAweDJiMDhmMjg5LCAweDQxOGNiZjhlLCAweDY0ZjYwMTgwLCAweDc4MjBlYjM5LCAweGQ4NzljYTNhLAotCTB4YzdiYjgzNDcsIDB4ODFmZjNjNjIsIDB4ZjhjNTY3NDMsIDB4OGQ1MzdhYTcsIDB4MmU2NmVkMTEsIDB4M2NjMjY0ZGIsCi0JMHhmZjUxNDgwNSwgMHg5ZjFmZTRmZCwgMHgwYjg4MzBjZiwgMHg1ZjBhZmY5MCwgMHhjYmVjZDMxYiwgMHgwNzNmMDBkMiwKLQkweDc0OWM0OTNjLCAweGVmYTVmYmU1LCAweDNlNDY4ZTFmLCAweGQwZTZmZjc2LCAweGRhMTlkYjkyLCAweDNiYjIzZTlkLAotCTB4MWE1NTE1MjUsIDB4YThjNDFjOWMsIDB4OTA2ZDMyYzMsIDB4ZTBiZjBhYmYsIDB4MWYxMDUyZGYsIDB4OTA2MzBmNjEsCi0JMHg0MmNmNjIyZSwgMHgxNzdmZmJkMiwgMHhhYmIxZmExOSwgMHhmM2ExNTFmMSwgMHhhYzdlNjQyZiwgMHgyMWY2ZTE2ZCwKLQkweGRkMGFiZjk0LCAweGEyMWU2NzZmLCAweDVkYWZmODFmLCAweDIzYTYxN2M0LCAweGZmY2ExNDdiLCAweDA0MDdmMWFiLAotCTB4Y2QzNjM5NzEsIDB4ZTQzMWQzOGUsIDB4ZGI4YWIyNmIsIDB4MjAzNWU0YWIsIDB4M2JlZWIwMmYsIDB4MGJhZGEzOTgsCi0JMHg4ZmE4OTJlMCwgMHgzMmU3MjQzNCwgMHg3Y2NiOTY5ZiwgMHgxNjc5ODBmYSwgMHhkZmZmNTI1OCwgMHg5YTQ0ZTlmMSwKLQkweGU5MWE3YjYzLCAweGZkNDg2OWFkLCAweDMyYzdkNTBjLCAweGUyYWVmYWM5LCAweDY3YTQzYzZmLCAweDM1NzlmYWMxLAotCTB4Zjg1NjY0YmQsIDB4OGU3ZjgwMmYsIDB4N2ZhNGQxMGQsIDB4NjI1ZDdmMGEsIDB4ZDVmN2U5MDMsIDB4YWQxOGYzY2YsCi0JMHhmMDU5YmNhYiwgMHg4NDdmNTJmOCwgMHgxMGIwMGE1ZSwgMHg4ODQzNjNlMCwgMHgxYWZjMmEzZSwgMHhmNjI5MWVjZSwKLQkweGZiOTZiNGVjLCAweGEyN2RmNzYzLCAweDhmZjJmMzA3LCAweDEzMDlkZjA1LCAweGNlZWNhN2RhLCAweGQyODI2NDBjLAotCTB4OGVhYWUzZmYsIDB4MzhjMGY3YjEsIDB4ZjBlNGNmMWYsIDB4MDE1OWM2MzQsIDB4YWQ5MjJkYjgsIDB4YTQ5ZTIzYjQsCi0JMHgzZjdlZTM3MywgMHhhMTY3YjIxNiwgMHhmODU4ZmU3ZiwgMHg5ZTM4NWJlNywgMHg1ZjEwOTVhMCwgMHgwNGNiMzA5NiwKLQkweGVmMGQ2OWY4LCAweGM1N2RkOGFmLCAweGVjYmM3ZmRlLCAweDRmZDQzOWRhLCAweGJlZTA2ZjYwLCAweDQ3YTI1YzYwLAotCTB4YTc4MmZkZGYsIDB4MjU2YTQ0MDYsIDB4NWY1YzZhOTgsIDB4MGFhN2FjZWEsIDB4MjdmOWUwZDMsIDB4NDNjZjRkYmYsCi0JMHgwNWQ2ZDg3ZSwgMHgyZTdlODc4ZiwgMHgzY2UyMjI3NSwgMHhlYmYxYmFlZiwgMHg5Y2FhY2QzZSwgMHhmYzA2NzljMSwKLQkweGY0NGI5Y2Q0LCAweGZkNTNmMTVjLCAweGIyNWExOTY1LCAweDI4MzNhYjUzLCAweDY5OTIyZmRlLCAweDFlYzk4YjZkLAotCTB4ODdmODI5ZjEsIDB4MDhmYTRmN2UsIDB4NWZhMGNlNTUsIDB4Yzg3OTNmZTksIDB4ZWZhMDA4ZTAsIDB4NGMzYmYwNzksCi0JMHgzZjY3ODAxYiwgMHg5N2U4MTI5NiwgMHgzNDc5ZWQ4ZSwgMHhhNDUxZjkxMywgMHhiOWUyZTc3NSwgMHgzZmVhYjllMywKLQkweDJlZGZhMGE0LCAweDI2NzBmM2RhLCAweGI2N2I4ZGM1LCAweDVmZmM2MjY0LCAweGE2NjhmMzU0LCAweDA3MjhmMDhkLAotCTB4NGU2YTFmZTUsIDB4ZDcwM2VlODcsIDB4MTAxYWRlZWQsIDB4ZjI2NTI2YTcsIDB4YzQ3OTc5ZjgsIDB4MWY4YzdjYjEsCi0JMHhmMTczNWRlNywgMHhjYmY0MTMyMSwgMHg0MjYwYWRmOCwgMHhlYjM1ZjgzMSwgMHhkZGZkMDg3OCwgMHg3Nzk3MGIwYSwKLQkweGVjODIzM2I2LCAweDQzNjc4YzMxLCAweDJmNjVkN2JlLCAweDNkN2Q0NWE4LCAweGIzNGNmOTY1LCAweDc0YmZlMzFhLAotCTB4MDU2YmQxMzUsIDB4ODA0YjZjZjMsIDB4NjA4OGY2NzYsIDB4ZmQ4MTYzYWEsIDB4ZmY2MzU2YzcsIDB4NmQwNDliNTUsCi0JMHhiMWZhMWM2MiwgMHg5Nzk4Nzk5MSwgMHhkMjQ3ZDJlOSwgMHgyNDdjZWUzYSwgMHhhZjlmMWRhZiwgMHg5ZjNmODA3OCwKLQkweDc1MzRmM2E3LCAweDY5NGYzOGUyLCAweDM3YTQ3NWFkLCAweDI3OGMzNGY2LCAweGQyZWJmNTk1LCAweGNhZGVmNGI1LAotCTB4Y2JjNTAyNmQsIDB4NGYxOTNjY2EsIDB4ZWUwNzU3YzYsIDB4ZmRjZTk3NTMsIDB4OGRiMjliMzIsIDB4MzJhZGNmZWMsCi0JMHhlMDdlNmU1ZiwgMHg2MTEyMzdiZCwgMHgxZDYzNDlkYywgMHg3ZjY4NzRjNiwgMHg2NmIzODllNywgMHgxMzlmM2MxZiwKLQkweGYzMDczZTczLCAweGUzYWQwYzg2LCAweDc3ZGM2MmQ5LCAweGZiOGFjZThkLCAweDJjOWI5Mjk4LCAweGRmZmY2MDI2LAotCTB4ZTExYzdjY2MsIDB4M2Q1NjA3Y2EsIDB4ZjI3NjhjNWIsIDB4NzNjYTA4ZTksIDB4MTNhZGY1OTQsIDB4ODNlNjE1MjQsCi0JMHhiZjZmYWJjNywgMHhlZTc2ZTkxMywgMHg3NzhhMDg4OSwgMHgyNTY3NTVkNywgMHhkZmM4MWZiMCwgMHhhNWZmMDJmNywKLQkweDQxZjZjNjRjLCAweDA1ZjA4ZWZlLCAweGQ4MjVkZmM4LCAweDQ0Y2E4MWUyLCAweDk0YWE1ZmMyLCAweDVjYTViMjA4LAotCTB4Yjg5OWQ2YmUsIDB4YmM2ZTE5M2QsIDB4NGI5NzkwYzksIDB4M2NhNjQ3NjAsIDB4N2M0MWUzMDIsIDB4Y2Q5YzZmMzgsCi0JMHhjYWY0MGU5MiwgMHhiMzVlNWYxOCwgMHgwNjU3ZGU0NSwgMHg0ZWU3OWZiYywgMHg5ODc0OGQ5ZCwgMHg3NjllZTViMiwKLQkweGQyZTMxZDBjLCAweDU2ZjJmZTc5LCAweGE4MjkyM2U3LCAweDM4MWY2YmM3LCAweGI0MzE3Y2YzLCAweGU3Yjc0YWFmLAotCTB4YmIxMWZiZTEsIDB4N2UzZTUxMmUsIDB4MTVlMWU1YmMsIDB4MWFhMmVmNDgsIDB4YmM5ZmRmMWQsIDB4NjQ0ZjczZWYsCi0JMHhlNzhiM2MyNiwgMHgyODZhNmY3NSwgMHgzYWVkNzYzZiwgMHg4MDE2ZmNmMywgMHg0N2JiNmQ3NywgMHgzZmVmMjgxYiwKLQkweDcxMTNiZjc2LCAweGJhN2Y1MzNkLCAweDk3NDcwZDllLCAweDhmNjdhZTlmLCAweGQ1M2U5MGE2LCAweGZjZTU5ZTgwLAotCTB4M2Q3MzNkN2MsIDB4ZGNmNDQ1NTAsIDB4MTVmZjZlOWMsIDB4OGQzOWRiY2EsIDB4ZWJmNTA1M2IsIDB4MjQwZGY2NWMsCi0JMHg4MTM2ZWVmNywgMHg1ZmQ4YTFmOCwgMHhmMmE1ZmRlNSwgMHhkZTU1NGJmZSwgMHhjZTAyMzM2ZCwgMHhjNjQzMmYxNSwKLQkweGQ2M2VmNDg2LCAweGM2MjY2NWYyLCAweDk3OWI5N2I1LCAweDQ3ZGMwODhkLCAweGZiMDIzYzI4LCAweDM1ODY0Yzg2LAotCTB4ZGE3ZGJkMDMsIDB4NjlhN2RiMmIsIDB4ZDg1NmU5MWQsIDB4OGYxNTM0ZGYsIDB4YWJkYjQzNjcsIDB4YmRiMjU1ZDIsCi0JMHhjZjBmZmM4NSwgMHhjNWZmMTQzMywgMHgwZjc4YjQzYSwgMHhmODJhZDY1MSwgMHhhYTNlZjEyMiwgMHg2YWYzYTZmOSwKLQkweGQ4MTI1N2JhLCAweDdkZTc0MWE3LCAweGUwMWE3ZDhjLCAweGU3NWI4Nzc3LCAweGM3MTNhMGQ1LCAweGUzZGEwZjUxLAotCTB4MzE1NDNmNmIsIDB4YmRiZjgwNWYsIDB4Zjk5MjJiYWUsIDB4YzgxZGU2MDIsIDB4MTE0ZjYwMjMsIDB4NGI3ZjFmYzAsCi0JMHhkODdkOTA1MiwgMHhlNzA0MmU5ZSwgMHgzNmFlZjAxMywgMHgxNWYyMWZhMCwgMHgyZGZjNjVlZiwgMHg5Zjg4MzVkOSwKLQkweGZiM2U3MmQ3LCAweGM0N2M0MDhmLCAweDM4OTg0OWNmLCAweGU3MWU5MDZkLCAweGQxNzNiYTViLCAweDcwZjQyYjJlLAotCTB4YjkyNmVkMWUsIDB4Zjg3ZTZiMjksIDB4OTlmNDQwOTIsIDB4N2I5ZDVlN2IsIDB4ZGIxY2ZhNzUsIDB4N2M4YjlkZDMsCi0JMHg5YWU5YWYzZCwgMHg1Zjk0Nzk4NiwgMHhmYzhiOTVkYiwgMHhlZGMyYmU3MSwgMHg5M2E1NGZmZSwgMHgxMWY4YmNmMiwKLQkweDA1ZDgwMGQ4LCAweDNjYTI2MGE3LCAweGExZWM1ZjJmLCAweDkyN2ZkY2JjLCAweDk2Y2VlNWU3LCAweGZiNzc2NGRkLAotCTB4ODhiOWY5NWIsIDB4OTA1MWQ1NGIsIDB4MTUwOGU3ODAsIDB4ZWVkMWRhNjcsIDB4ZmNmMjI3ZjUsIDB4MjFiN2M2MDksCi0JMHhjYmE0NjZiZCwgMHg5N2RkNTNmZSwgMHhkZmVjMTBiMiwgMHhlMTM5MDE4OSwgMHhkNDM5ZGE3OSwgMHhlMzhlMmQ3MywKLQkweGMxN2I0MzJkLCAweDFkNThhMzcyLCAweGY1MDE3NzhjLCAweGQ4YWY5ZTFlLCAweGU1MTliYTkwLCAweGQ0Njc5Y2ZmLAotCTB4NmZhM2I0MjQsIDB4NDlkZGZlZTUsIDB4NDVhZjY4ZTcsIDB4NjM4YTQ0OTksIDB4N2YwMDY5ZTAsIDB4MTFlMWY2MDcsCi0JMHgxZTI4MmQ5OSwgMHg4MGI2NjI4YSwgMHg3NGFkMmU3ZSwgMHhhN2JmYzUyYiwgMHg3NGM3YmE0NCwgMHhjNjdhZTc4ZCwKLQkweDJiM2Q3MjhlLCAweDliNGM3NGRmLCAweGEzNWUzMDE4LCAweDc4OTRmNzZjLCAweDdmNmJkZTcwLCAweDM0NWQ3ZDI3LAotCTB4ZjAyM2I5OTEsIDB4MTRmNTk3YmQsIDB4MjAzMWIwZTcsIDB4N2EyZjgwZmYsIDB4ZjI4M2MxMzksIDB4ZGNhOGY3ZTAsCi0JMHgxNzhiYzgxYSwgMHg4N2ZlZTY0ZCwgMHg3ZWYxZDIxZCwgMHhhNDU0ZDI4OSwgMHg2YWYzMWY4NywgMHg0Yzc5NGZhMCwKLQkweGMwMGM2NjQ3LCAweDJiODlkZjIzLCAweDRlNGY5OGVkLCAweDJiZTAxYzAyLCAweGYyY2Y5NzAyLCAweDIzOTkxZDQ1LAotCTB4ZDA0OTVjZjEsIDB4YTRiY2YwYWIsIDB4NzdiNzg2YmMsIDB4NTRiYzc4YWEsIDB4ZjdkZmM2OWUsIDB4N2I1N2RjMGYsCi0JMHhkZTgyMTY1MywgMHg5Y2JkYjZmNSwgMHg1YmUwMjc3MiwgMHg5YzM1YmUwZCwgMHg3YzRjYmUwZiwgMHhiOTllZGEwZSwKLQkweDQ2ZWZlNjA4LCAweDVjZjc0ZDlmLCAweDVlZDA4YmU1LCAweGRjMTUxYjc1LCAweGY3OGM3MWM5LCAweGI1Y2Q5ZWU5LAotCTB4NWJhYWU1MDgsIDB4YmMxNWUwYWYsIDB4NWM2NDEwNWQsIDB4ZTVjMTVmNzksIDB4OGM4NTQ3ZjcsIDB4YjQ4NTkyMzcsCi0JMHgwYTRmZjQ4NywgMHgzZGNhMzVjMSwgMHg1OGZmM2M5YywgMHhiNTE3ZmVmZSwgMHg3YmMyMmNmNywgMHhjZjNhZjliNywKLQkweDU3ZjQ0YWM5LCAweGQyMTg2OTJmLCAweGYwZTA3ZjU1LCAweDY5N2ZhNDU5LCAweGIzM2JmNzBiLCAweDM5ZWUxYzBlLAotCTB4ZDg3MmYyODgsIDB4YjFlNmY3NDgsIDB4ZTNlMjU0ZTYsIDB4ZGJiZDk2YzYsIDB4Mzc1Y2ExMjYsIDB4YWRhMDczZjIsCi0JMHhmZjNmZWYwZCwgMHhjM2E3ZWEzYiwgMHg1NzE4MzE2MywgMHhlNjllYjc1OSwgMHhlYmNhMmY5ZCwgMHgxZTM5ZWI2NiwKLQkweGRmYjNiNzI1LCAweGIyODQ3YzcyLCAweDNjNzFkZmFmLCAweDZiN2ZiNzk2LCAweGE3NWExN2ZlLCAweGZiODFmMGZmLAotCTB4OWZhMDVlNTAsIDB4MTdhNWUyOWIsIDB4YTI2MDVlNDAsIDB4NzNkOTQzOTIsIDB4MWJmNTllMzAsIDB4ZmNlMDU2M2IsCi0JMHhhYjNhZmRjZSwgMHgwOWU3YzI1YiwgMHg5NWJlMzBiMywgMHhhNGRjZmNjYywgMHgxNGY2ZmM3OCwgMHg0NzU0YTdjYywKLQkweDFkZjllZGY3LCAweGQ3ZWZiYjllLCAweDJiYTEzOWQzLCAweDEyYTVkYjg2LCAweDNkZGE3YWIxLCAweGY3YmIzZjI0LAotCTB4YjVmNzAxZmMsIDB4ZjZlNzRmNGYsIDB4MWVkY2QxYzUsIDB4YTBjOWVmMTUsIDB4ZmU1NzllZjMsIDB4OTQwYWQ5ZjEsCi0JMHhkNzcxN2M4MywgMHhkN2ZlN2MxZSwgMHhlOTBhYmQ1YSwgMHg4ZGI1YTlkNCwgMHg0Y2ZkMDFiOCwgMHhhOWUyODZhNywKLQkweDNlMmYxOTYyLCAweDEzZDdjYjFkLCAweGYyNDA1NWQ1LCAweDY1M2RiNzEzLCAweDQ5NDhjODExLCAweGUwYjdmZGVjLAotCTB4ZGI4YmU3YmEsIDB4Y2U3ZjQ3OWYsIDB4MGNlOGVhZjYsIDB4YTAzZWZjZWIsIDB4YmU3N2JjMmIsIDB4MmRhNzQzNGUsCi0JMHgzNTQ2N2RmZSwgMHhiMGI3NmJjYSwgMHgzOGIzYzU3ZCwgMHhkN2VmMWQ3ZSwgMHhmNDRlZGZhZCwgMHgzMTY1ZDc3NiwKLQkweDMxZmEwZjljLCAweDE2ZWE5ZjNjLCAweDNmM2QwNDc2LCAweDE3MzdiNzVmLCAweGZiMGJhZGUzLCAweGE1ZGM1M2U3LAotCTB4OTdhMjkzZTgsIDB4MjBiYWI1MjUsIDB4MjkzZmM3ZmQsIDB4Zjk2M2YzMWUsIDB4ODY2NmU0Y2YsIDB4YzJlOWZjODAsCi0JMHhjZmZjNjc5MSwgMHg4NWY1ZTgwNiwgMHgwYjRmOGQwNiwgMHhiMWQ2MmEzNCwgMHhhN2FmNzg0ZCwgMHhmMjQ5NjNlOCwKLQkweGJmYjg4NTRkLCAweGU2NzU1NTEyLCAweDI3OGJjMDNhLCAweGJkNDBhZDc3LCAweDExNjdhZjNjLCAweDJkZWZkMDg5LAotCTB4MmUwZjNmMTUsIDB4ODg1YWFhNjksIDB4ZjViODdiNzYsIDB4N2M3OTliMTQsIDB4OWY5MTM5NzksIDB4ZDY2ZTVmOTcsCi0JMHhhOWNmMDI3YiwgMHg5NTQ3ZTE0MywgMHgzZDViN2E0YywgMHg0MmJhZmY4OCwgMHgxOTQ3M2U0NywgMHhiN2FkMmRlZiwKLQkweDY3MGVlMzBjLCAweDlmYzNmNzBjLCAweDMzMDZmZjQwLCAweGVlNjY2MWM0LCAweDA4NmU1NmE3LCAweDFjZGNiZmVlLAotCTB4ZGE5ZGNmNDMsIDB4Y2JiNDRjYWUsIDB4Y2NjYmY4Y2EsIDB4ZDRjZjZlMjYsIDB4OWZlODk5NWQsIDB4NzkyM2RmNDMsCi0JMHg4MmY1N2I0NywgMHhhNGFhZjY0MCwgMHhmNzQzMzg0OSwgMHhmOGQyNDhjNywgMHg0NDk2N2E0MSwgMHhlZTYyM2RiOCwKLQkweDljNDg3Y2QwLCAweGM2MDFmMzI2LCAweDc3YWM4N2ZhLCAweDliN2EwZDI1LCAweDhkMjljNjFlLCAweDdmNDY4YWVjLAotCTB4OGFlYzY2NTUsIDB4ZmY2ZjczYzYsIDB4YzhkNTkxNTEsIDB4YzY1MzhiZWMsIDB4NGY5YzFiNGYsIDB4YmQ4YjhmYzksCi0JMHhhODdlOWIxYSwgMHgxODNiNjBmOSwgMHg3ZmM1YWRlZiwgMHgzMjYyMjkwMywgMHgzNTE0ZGViOCwgMHhjYzdjZDE0NywKLQkweGU1MGQzNWQ0LCAweGYwNTc2OGI2LCAweDUzNGZiODdiLCAweDliZmEzZTgwLCAweGM2MDdjNzc3LCAweDc1YzdiZmExLAotCTB4ODY3N2RlNTMsIDB4MWZmN2E2ZjQsIDB4MWNhMGE2OWYsIDB4MjZkOGE4OTQsIDB4MjBiZWU3M2MsIDB4YzA2MTdiZjAsCi0JMHg4MmY4NWVlOSwgMHhmMjVlNWU3YywgMHhjYTI0NDMzNywgMHg2NWNiODVjZiwgMHgwMWZlYzdhNCwgMHhkOTI4ZmIzYiwKLQkweDY3NjJiZjA3LCAweDE1YzcwZDU5LCAweDcwNzZjYjNiLCAweGVlY2VjMDdjLCAweDM3NjJiOGUyLCAweDQyYTNmZTk1LAotCTB4MWQwYTRmZGUsIDB4OTA3N2E5NGYsIDB4ZTZlZDkzYzcsIDB4NmU3YWJhYTIsIDB4N2Y3ZTQ1MzcsIDB4NGM2Yjc2YzcsCi0JMHhmY2UyN2YzYywgMHgxOWQzMmI1YSwgMHg5NWQzYjQxMiwgMHgxMjM1NzdlNCwgMHgxOWM1YjFmYSwgMHg3NmE1NzljYSwKLQkweGEwZTI3ZTkwLCAweDc0OTlmYTNlLCAweGJiZjUwOWEwLCAweDEwZjk0MGM4LCAweDA3MGQxNWM0LCAweDU5NzkxY2YxLAotCTB4MDdlZjE1YmMsIDB4OWNhZWU5NDMsIDB4N2NjNWM3NzcsIDB4N2NmOTA2YjMsIDB4OGFmMWQ2YWIsIDB4NzI2OWVmMTksCi0JMHg4MmFmYzhiYSwgMHg3NGJmOTBiNiwgMHhiOGEzYWFiZSwgMHhiN2QzNTdhYSwgMHg5NjVmZWQwNywgMHhmNjFhZjFkNiwKLQkweDZjNzZkMzJiLCAweGVhNGIwMjllLCAweGUzYjU3NGQxLCAweDk0M2NkMDkxLCAweDVjNDNiMjU3LCAweGJiMzlmZDVlLAotCTB4Mzk1MjdjZTksIDB4ZTY1NzdmMmYsIDB4NWVhNzAzMjMsIDB4NzAyNWYyOGQsIDB4N2NkZTM5MzksIDB4NTdiNDZkZTgsCi0JMHhmMjc0OGVmZSwgMHgwM2U0NTcwMywgMHhhMzQ3OGZjZCwgMHhlMjEwZjlkZCwgMHg1YzQwNzcxNCwgMHhiZGFhZTFmYywKLQkweDE0YjUwZjc0LCAweGRlMDExZmVmLCAweDdmNzgyOWI5LCAweGE2MmVkZmZkLCAweDBiNmQ4ODM4LCAweGJjZjI4ZTc4LAotCTB4YTUwZjE4MzMsIDB4MmZiNWNhMGIsIDB4MjRkYzhmNDgsIDB4OWJhNWRmYzcsIDB4ZWFjZTk2MDgsIDB4MDYxZDIyNzAsCi0JMHg4YjgwNDVmMCwgMHgyMWViZjgwMSwgMHg2NjdmNDg3OCwgMHgxZTYyNjZmNywgMHgwOGQ2MWRmYSwgMHhjNmNhM2QwMSwKLQkweGJjNTM0ZWZhLCAweGQwYzM0MDdhLCAweGJmMDQ2YzNmLCAweDI4ZTFmODQ5LCAweDFkNTMyYmFhLCAweGM3MThiZjAwLAotCTB4OWJmYTIyZmQsIDB4Y2EwZWU4ZDIsIDB4NzU4N2ZjZWIsIDB4NjBmMGRmNzQsIDB4YjgyOTk3Y2IsIDB4OGJhNmJmN2YsCi0JMHg5NmQyOTVmMiwgMHg5ZTMxZTM5NywgMHgzNDRiMzU4ZCwgMHg3OGRmZjgzZSwgMHhkYzNkOGZiYSwgMHhiNjMxOGYxMiwKLQkweGU1NGNiY2YyLCAweDk0ZWI5NGNkLCAweDI4ZmVkMTcyLCAweDVmNDVjYmNmLCAweDU0YmZhZTI2LCAweGY2YzVjOGU4LAotCTB4ZDQ1M2I0NTgsIDB4NzExMTcwMWYsIDB4MTMyOGZiNDYsIDB4MmQ2MGRkYjgsIDB4NTA4OWY5MjIsIDB4NzA2NzQ1YmUsCi0JMHgyNWY2MGJiYiwgMHg4ZjExZWU5NywgMHhiMTU5NzhmMiwgMHg2MDVmNjQyNywgMHg3OWYxZDdiYywgMHgyNjFmYjcwZSwKLQkweDVlMTRmY2U1LCAweDMxYmI0NjJkLCAweGE0ZDk5ZDg0LCAweDQxNTY0ZGQ4LCAweDA2NjQ0ZDc5LCAweDNlZjJiNzVmLAotCTB4MzBmM2NiOGQsIDB4ZDJiZTc3NmEsIDB4ODM5NjliOWQsIDB4N2JmMjQ5ZWYsIDB4N2QyY2Y2MDEsIDB4MWRhMTNlZDAsCi0JMHhmMjNiMjQ0OSwgMHhmNjFlMjZhMCwgMHg2MGJjZjI1NSwgMHgxNGFmMDhkZCwgMHg4MDJhYWYyZiwgMHhmYWFkNmNlZSwKLQkweDJmY2EwMjllLCAweDE5ZWU5Yjk5LCAweDg1NzVkNzQyLCAweDdmMzk5OTdlLCAweGQyZjNlNDRiLCAweGJjZmMzZDkyLAotCTB4OWY4NjgyZjQsIDB4ZjJiZDgzMmYsIDB4M2I1YWZkYTEsIDB4ZjUwMGFhYTcsIDB4NzJiOGVlZWYsIDB4ZGNiOWUwNmQsCi0JMHhiMzVmYzZkNSwgMHg1YjVmMTgzMywgMHgzMDkwNTU1MSwgMHg2Yzk3OWU4NCwgMHg4YTNlZDFkOCwgMHgxZDE3ZTEwZCwKLQkweGQyZjEwNWQ1LCAweDc1OTVjZjk1LCAweGViMmJkMDVmLCAweDE1MTlhNTljLCAweDU1YTU4ZjQ4LCAweGFlMDBhMzA1LAotCTB4ZjRiOWY4OGQsIDB4ZDBiZWZiZTAsIDB4ZGZhMWYzYTIsIDB4ZjlkMmZhMDYsIDB4NTc1ZjhkZTksIDB4NWMzZjlkMDQsCi0JMHhlNjYyYmM2ZCwgMHhlMWMyZjNhMSwgMHhjYjBhMWZkNiwgMHhjYzY5ZGYwNCwgMHg1N2U4MThhMywgMHhlODE5ZTkxZCwKLQkweDJmN2NjMDRkLCAweGI0ZmJmZWNhLCAweDllNzhhMDRhLCAweDg3MWFhZDE1LCAweGFjNzMwMWY5LCAweDZiN2U4NzFhLAotCTB4MGMwMTc4YjgsIDB4ZGQxNTY4ZTUsIDB4ODIwOWJhNDksIDB4MGViMGFlMWUsIDB4ZmZhNTBmNDEsIDB4YmNmYzE5MWQsCi0JMHhhZjU5NDVlMSwgMHg3ZDJmY2Y0NiwgMHg5ZmI0MjBlNiwgMHgxOTQ1NmM5NiwgMHg1YzI4YThjMCwgMHg4OTQ1ZTYyMywKLQkweGRhMTgzYzIzLCAweDcyMDNiZTUzLCAweDAzNjM5NGVkLCAweDVmN2NhYjQzLCAweGJiNTIyODU4LCAweDU4NjQ1OWFiLAotCTB4OGQxMmNhYTcsIDB4NTdkODBjOWUsIDB4ZjU0ZWRiMjEsIDB4Nzc5OGYzN2IsIDB4YTk3OTE1MDYsIDB4M2Q3ZjdlYmIsCi0JMHg0ZDdmY2ZiNCwgMHhkMTk1YmM5YywgMHgzN2U1MGY3ZCwgMHgzMzBlOTEwNSwgMHg1ZmIwNTVjNiwgMHg0ZWY0M2YzOSwKLQkweDdlNzAxODU5LCAweDM3ZjY0N2I3LCAweGZjODE0NDMzLCAweDE0NTI1ZjQwLCAweDVkY2VkMzlkLCAweDUwM2NiZTVhLAotCTB4MTA4NTNiNGUsIDB4NzJmYTc5YmEsIDB4ZjVmMWJmMjksIDB4NmRkMjA2ZTUsIDB4MTU1MTZiYzksIDB4YmNjODBlNzQsCi0JMHhjYzA0OTY1MywgMHhhZjA2NzJmMywgMHg2OTZhZjg5ZiwgMHhiODk3OWQwNiwgMHhkMjdiZjMyZSwgMHgyN2RiZjE3YywKLQkweGQ3NTg4ZjMxLCAweDgwYWY3OTA2LCAweDQwN2VhN2UzLCAweDJmOTA2Njc1LCAweDBkZDA5YzYyLCAweGNjMWNlOWY5LAotCTB4NjZjYzFkZjUsIDB4NjEzODdiNDMsIDB4YWU3YmU1MTQsIDB4N2FjMzAyMDMsIDB4YWU4YjY3MzMsIDB4OWQ5YmVmMDYsCi0JMHg4Yzc4YWU5YSwgMHhiZjM0YjY3MywgMHhlYzNmNDVhZiwgMHg1NjllZmMzYSwgMHg5MmFiYmNjMiwgMHgyNjM3ZjVjOSwKLQkweDA1ZDdkMjE1LCAweDViYmY0MGVjLCAweDAxZjU5Y2RlLCAweDkzZjJiNWRhLCAweDVjYjBkNGZjLCAweDNmZGQxZWZkLAotCTB4Y2UxNGI5ZTIsIDB4NDhkNGRhNTcsIDB4Y2M2NThkZjcsIDB4ZDY1ZjcyNDcsIDB4ZjZmZjljMTAsIDB4MDc1ZDBlMjcsCi0JMHhhNzZjYjJmNCwgMHhkM2VlN2MxNCwgMHgyMjVmY2YzYywgMHhiNzJmMGFiMiwgMHhjZTlmMTQ4YiwgMHg3M2EwNGM0ZCwKLQkweDM4ZjdjMWQ4LCAweGY3NjI2ZDdkLCAweGRiNmU3ODQzLCAweDA1NTgyNjliLCAweGQyMzdhYTE4LCAweDI2ZTMwOWJkLAotCTB4YzczZjI2NzcsIDB4ODVmNTdkZWQsIDB4N2NlODZiMjksIDB4ZWIwNTMzYzQsIDB4NzNlNTdiYTQsIDB4ZWM4ZmI5ZmMsCi0JMHhlYjAxOGI1MCwgMHhlYmNhZGI5OSwgMHg1OTIzN2ExNywgMHhiYmUyMTFkMSwgMHgyM2YyMGM2MywgMHg5MmRlZDUyYiwKLQkweGI2OTY3MTgxLCAweGYxZWI5ZGVmLCAweGFmOGU1OWRlLCAweDU3YjFmNzQzLCAweDI1M2U2ZmJlLCAweGJhY2FlOWM3LAotCTB4ZjMyNzI3ZTcsIDB4MjFlNjE4ZjMsIDB4ZjM5NzZhMzksIDB4ZGEwYTliNjIsIDB4NGNkM2VlMDMsIDB4Nzc1MjgyOTksCi0JMHgwNDZiZWZjNywgMHg5YzNlOGY3ZSwgMHgxN2JkNjE3ZSwgMHhiZDYyM2JkNiwgMHg3MmZkYzIxNywgMHg3YmQ2MjQ1ZCwKLQkweDVjYTJmZTIxLCAweDVlZjU4OTE3LCAweGJkZWIxY2Y4LCAweGViOTI2ZjEwLCAweDBiZGViMTIyLCAweDQyZjdhYzcxLAotCTB4OGJhZTU0NzgsIDB4YTU0Yjg1M2MsIDB4YmZkMmVlZjgsIDB4M2VkYjllNjEsIDB4ZmM3MjFmMTAsIDB4M2UwODRjNzQsCi0JMHhlOWZmYjgzYSwgMHgxZjE4MjExOCwgMHgzM2ZmNTAyZCwgMHhjZGZlOTc3NSwgMHgxNjc1ODM5ZCwgMHhmMGRmZDkyNiwKLQkweDljZTUwYjNhLCAweGI2NzBiM2FiLCAweGIxZjIwNzc5LCAweDNjMjRjMjc1LCAweDY5MjY2NzQ3LCAweGI3NGJlYTA0LAotCTB4NTZmZmU3Y2MsIDB4MWRhMDJmZGIsIDB4ZTQ3ZDExNjAsIDB4NjRjNGU3OTcsIDB4NzhiYjQwOGYsIDB4YmE2MmU0ZjIsCi0JMHhkMzhmZWI4NywgMHg5M2JjM2U5MSwgMHg3ZWMzZThlZSwgMHg5ZTZmOThhZSwgMHhlYjA2Y2MzZiwgMHgyNjVhNjZlNiwKLQkweGZjMDI5YTZmLCAweGU0MTA2OTk4LCAweDQ0ZmI3MjM4LCAweDA1OWY3MmJiLCAweGJhZGQ5OWZjLCAweGRiOWE4YTZhLAotCTB4OTk0ZTEzMGIsIDB4YzZhZDk2MmYsIDB4ZTkyNWQ3NzEsIDB4YWExZTYzMjcsIDB4MWRmYzczNGIsIDB4NWZlODU1YzcsCi0JMHgxOWFkN2EzMCwgMHg0OGQ3NmZlNywgMHhlYWJjNjAxZiwgMHhmM2NmMTNmZSwgMHhhNTAxZmE5NSwgMHgzM2E5MjdkZiwKLQkweGRlZjA5OWY1LCAweDI2ZmE0YjVjLCAweDI4MTllYmNjLCAweDRkYmM4YTFmLCAweDNlNTAxYWNiLCAweDYxMjhhYTZjLAotCTB4NDkzM2Q5MjMsIDB4NjdkNWZiOGQsIDB4OTJjZWZkZjIsIDB4NGY4MGZkZjgsIDB4NjA2M2E5MmIsIDB4Y2NlNDVmN2MsCi0JMHhkYjc3Y2MzOCwgMHg5NDlmYmU2NSwgMHhlNjRhN2VmOSwgMHhjZGQxZDYzYiwgMHgzYTNhZjM1MSwgMHg4NzQ3NTg4NCwKLQkweDIwZWExMGYwLCAweGRkMmZiZmNjLCAweDcxNDk5MzFlLCAweGQyMGE1ZjcyLCAweDk4NGJhOTVkLCAweGVkYzY3YTg3LAotCTB4ZjVkMjBhNGYsIDB4MjdjNzJjOTAsIDB4OTlkM2ZiNjQsIDB4ZWZlMjRmNjYsIDB4NTRhY2Y4ZjEsIDB4OTZlODFmYWUsCi0JMHg3ZDk0NzNjZiwgMHhiZTBkZWYyYSwgMHhmYjA1ZTdjZiwgMHg2ZmZlZTEyZCwgMHg1ZjY0NTUxMCwgMHg1YjM4ZTU0MywKLQkweDc4OGVmYjk2LCAweGJkNGFiZGUzLCAweDM3MzljNjA4LCAweDI2MWZkYzg4LCAweDQxZGZmYWFiLCAweDZmMWM5M2JiLAotCTB4OTBjMjM2OTQsIDB4NzhhM2IzZjksIDB4MDliZDM2YmYsIDB4ZGI2ZjZjNGQsIDB4ZGRjZTc0MzcsIDB4Mjk2MTkwZmIsCi0JMHgzMDMxNGZiZiwgMHgzZGExMWVmYywgMHhlMDRkNDI3MSwgMHhlNTFmZTk3OSwgMHg5MDhmYzA3OSwgMHg5YTJjYmE1ZSwKLQkweDM5MjNmNjFmLCAweDQyM2YwMWM2LCAweDE0NGU2NmY5LCAweDliZjkyM2RkLCAweGE0ZmNhMmJmLCAweDA5YWE3NWI3LAotCTB4ZTFkZmQ0ZTUsIDB4NzE1ZmEwMzEsIDB4YzRmZmUzZmQsIDB4YjdmMGJmYTMsIDB4NmNmNTQxN2UsIDB4YTRiZjZmZmUsCi0JMHg3MjJkYjczYSwgMHhjZGViZTFiZCwgMHg4NzU4OWQ3MiwgMHhiZGU3YzQ2NCwgMHg2MDE1OWY4NSwgMHgxYzMyYWRiZiwKLQkweDNjZmMyM2I0LCAweDY4NmY4MTRmLCAweDY4MWRlNjZjLCAweDUxNTA5ZWNmLCAweDhkZDhhMmZlLCAweDk4NTk3ZDUwLAotCTB4Zjc4ZTUyMzksIDB4Njc2ODMxZWMsIDB4YzRlYzVmNDAsIDB4NTk3ZDAxYjcsIDB4YzE3OTgzMTYsIDB4MTI5MTdkYTAsCi0JMHgxMzJlYTg3ZSwgMHhjZDU5OGJlZCwgMHhiNDQyMGJlZCwgMHhiNzMzNjYyZiwgMHg3ZGEzODgyZiwgMHgwNWY2ODg0MSwKLQkweDQxN2RhMzlmLCAweGUyMGJlZDFjLCAweDQ3MTA1ZjY4LCAweGVkMTA4MmZiLCAweGViZmYzZTBiLCAweGQzYTc1ZTUyLAotCTB4M2YyOTgxMGIsIDB4NWM1MDM1YzcsIDB4N2Y4ZWJlYmYsIDB4OGRiZWIyN2YsIDB4YWZhZGRiZGYsIDB4YWMwZWE4MTYsCi0JMHg5NGRmZTYwNywgMHg1MDlkNDQzOSwgMHhlNDI3NWM5MywgMHhhMmY3NDFkZCwgMHgxNWEyYzNhZSwgMHhkNjAxNzg1OSwKLQkweDZkY2YwOWJkLCAweGQwMjc3ZDM1LCAweDA1MWFiODJmLCAweGNmODQ5NTZiLCAweGI2M2FkMjk3LCAweDYwZmQ0ZWI0LAotCTB4ZDNhZjNlMzksIDB4MmZlODU1NTgsIDB4YTNjNzJmNWEsIDB4YWQ2OTJiZGYsIDB4MjczNWZmMjMsIDB4YmZjYjRkYTEsCi0JMHg5ZTE4MTE5NywgMHg3MWQxMmYxZiwgMHhlMTE3MjhmZCwgMHgzZmJhMjRlOSwgMHhhZTVmZmIyNiwgMHhhZDczYTBlYiwKLQkweDBhNDE3YWQyLCAweDM1YzA4ZWZjLCAweDdmYzUxMmZkLCAweGYyYjlmZGNhLCAweDU3Yjk0YmRkLCAweGNhMGVhZDJmLAotCTB4NmViYzZjOWYsIDB4NGFmZjcxOGIsIDB4OWU0MDY1NzksIDB4YzMyNzdjYWIsIDB4NzRkNTZmYzQsIDB4YzA4YWZlM2YsCi0JMHhkN2FiODU2MiwgMHgzNmI0OTU3MywgMHhhZmZhYzY2ZSwgMHhiNDc2N2JkMCwgMHgxNmQ3NTQyNCwgMHg0NGZlYmY3MiwKLQkweDk1ZDc1Y2E2LCAweDZmMzBmMmM3LCAweGY1NjI3YzJlLCAweDVmMzBjMzgxLCAweGU1MWQ3NmZmLCAweDc3NGY2MDlkLAotCTB4NDA5ZWZlYTEsIDB4OWNiYTA0MzksIDB4YjlkM2QzNjgsIDB4YjIzYmU3ZGIsIDB4ZGUxZjEwNDYsIDB4ZjY0ODk5MTQsCi0JMHhiN2Q5MGM3MiwgMHhmMjgxMWE3NSwgMHgzNTk3YjAzMSwgMHhjMmVjZGVmOCwgMHhjZWFlYzhiYiwgMHhmYzhhYmIwNiwKLQkweDkzZWVlNDU0LCAweGNhMmQ3YjU0LCAweDEyMDliYWU3LCAweDFkN2NiOWY5LCAweDkzYzY5N2JiLCAweDkyMDBjNWViLAotCTB4MTQ2ZmU1ZGUsIDB4NTdjMDJhM2MsIDB4MmY3ZDJiMzEsIDB4ODZjODEyYjQsIDB4YzZhZjUwZjEsIDB4NzVkNjA4ZjAsCi0JMHhhZWJjNjRhZCwgMHg3NWEzOTE0MywgMHg4ZWVmOTQzYiwgMHg1NzdkMTBjNiwgMHhkOTVjZjRjOCwgMHhiMDZmYzdmYSwKLQkweDFkMmVlMzZlLCAweDU2NDkwZjNmLCAweGU0ODAzYWYxLCAweGU3YmViY2FkLCAweGY1ZTBlNjZlLCAweDhiNGQ5ODcyLAotCTB4ZGFiZDJmOTQsIDB4NTExZGNmMDUsIDB4NzlmODUyNjMsIDB4ZTM4MDk0OGYsIDB4YTFhNTNhYWYsIDB4ODRmY2UzM2EsCi0JMHg4YTBlOTkwNSwgMHhmZDUwZTY0ZiwgMHg0M2JiZTA4NiwgMHgxZjlhZmVmYywgMHhlYjgzODc4YSwgMHhlYzY4NGUzNywKLQkweDNiNTczZGY0LCAweDczZDkyNWNhLCAweDk1NTNjMTA3LCAweGJiMTUwNDQ1LCAweGY2M2ZkNGFkLCAweDg4ZGNiZGI2LAotCTB4MGNiYmU3ZjMsIDB4NjJiN2E0NTYsIDB4ODNhOGFlMDcsIDB4YTk1MGU0OGMsIDB4MTAwYjFjODMsIDB4YzBjYzBhZWIsCi0JMHhkYTBjNTM2MywgMHg0NGVjODk2NywgMHhiMjczYWFiMiwgMHgxYmZmZmI4NCwgMHgzZjIwMGVmZiwgMHhlMzBmMmRhMSwKLQkweGZjNzk3NGE2LCAweDQzZmQ5MmQzLCAweDlhMmQ5ZmU0LCAweGJjM2RmMWI5LCAweGY0MGVkYTRmLCAweDA4MGRjMDJjLAotCTB4NmQ3YjJmMTgsIDB4NmRiZmM2MjIsIDB4MWE0NmE5ODIsIDB4NzhlZThlY2EsIDB4NWM5N2ViMDgsIDB4NzE4NGMxNjYsCi0JMHhmNmU0NDE1OSwgMHhiZjE4NzhmYywgMHg4YWQ1MmQyMCwgMHhjY2Q1ZGM3NiwgMHg0MDNmMmRlMywgMHgzZGViZjdjZSwKLQkweDU1ZGZjMGEyLCAweGNlOWM2M2M3LCAweGVhOTU5NmY5LCAweDM1MWNjZWU4LCAweGFjYmU3Y2Y4LCAweDVmYWRiZDRmLAotCTB4YWJlM2ZhZjEsIDB4MzhiNTYzYzcsIDB4YWRlOTliYmUsIDB4YzhmOGYyNzUsIDB4OGNkN2Y5ZjcsIDB4OTE0Y2I4YTUsCi0JMHg4NDg2ZmU5YiwgMHhlZjliOTQxYSwgMHg3Y2JiZmY2NSwgMHhjYzFhN2JmOSwgMHgxY2QzM2IwMywgMHhhZmYzOGRmZiwKLQkweGExZTk3ZDU4LCAweGQwZTdkYTc4LCAweGQzYTk1MDdlLCAweDRhODNmNTBmLCAweGFiZmZmMzdjLCAweGNhZWRmZjNlLAotCTB4NTRlZjgyMGEsIDB4NTFkODIwNmUsIDB4NTFmNmE2ZTksIDB4NzM1Y2ZjNTksIDB4ZmMwYWI4YjgsIDB4MTBkNjVjNDMsCi0JMHhiZjQyOTRmMSwgMHhlNGFhZTIyMSwgMHhhZTNjYTlhYywgMHg4OTQ3M2NjMiwgMHhhMzg4YWVhYiwgMHgwMTU1ZGY0MCwKLQkweDc1YmIzZWZhLCAweDYwOGY5ZGU0LCAweDZiNTNiM2RjLCAweGViMDA5MGM1LCAweGM4MWJkN2E4LCAweDRkNjQ2NDNlLAotCTB4NTI5ZTJhMWQsIDB4ZjhhMDY5ZTgsIDB4MjdlOTlmYWIsIDB4MmNiM2ZjZTEsIDB4MWZiYzZhZTksIDB4MDQyNTk4OWYsCi0JMHgzZmE4MGJlNSwgMHgxZmQ0NmZiOCwgMHhlYTNmYTg4NCwgMHgzOWU3Yjg4MCwgMHgxNGY2YTgyZCwgMHgyOWI4MmYxZSwKLQkweGJmMTNkMDVlLCAweDVkODE1NzM3LCAweDY2MmVmYzAxLCAweDNkMmJiMjBhLCAweDMxODU3NjIxLCAweDFkNzBhZmZiLAotCTB4OWQ3OTVhNmIsIDB4M2E1ZjUyOTcsIDB4OTNkN2MwMGIsIDB4NWUzM2IwODYsIDB4NDZjNjY3NmUsIDB4M2NlMWY3N2EsCi0JMHg1NDkxOWQ2MywgMHhjMzQyN2NhZiwgMHgxNmM0ZWVlNSwgMHg5YWI4MmY1ZSwgMHg4ZmY3ZjlkOSwgMHg2ODliZGE1NywKLQkweGIxNWRlZmE0LCAweDAxZmM5ZjdkLCAweGE4ZjVkZmZhLCAweGNkOWVlMjgxLCAweGZkYTY2YjQ5LCAweGY4Y2RlYzRmLAotCTB4N2YwZjRlMmMsIDB4ZTdkZTZmYTUsIDB4MjI3MzFmMjAsIDB4OTA1Y2Y3ZjksIDB4ZWUyODU5YmIsIDB4N2U5MjQ1NTUsCi0JMHg4ZWQ5N2U0MCwgMHg2YmFjNTdkZiwgMHg4ZWQwZjIxMSwgMHg3N2Q5ZDFjZiwgMHg2YTlkM2FlMSwgMHgyNzE2N2ViZSwKLQkweDNiYWEyN2RmLCAweGJmNDJmNzhhLCAweDJiNjRmOGNlLCAweDEyNjNjZmU2LCAweGZmYWMzMDhmLCAweGU2MTU3N2NhLAotCTB4NjRlY2JkYTAsIDB4YmY3YmU5ZGIsIDB4NWRjNzNhOGQsIDB4MzljNWU3YzgsIDB4N2I5ZDAyMTUsIDB4NTg5N2ZhY2EsCi0JMHg5NWIzNTUxOCwgMHgxNTM1OTFmOCwgMHgyNzA4YmVmOSwgMHhlNmU0NzNhMywgMHgyZThmOThjNSwgMHhmMWMxMGE4YSwKLQkweDhkY2U4YjFlLCAweDZjNzhlNTVmLCAweGQyODI3YjQ4LCAweDFjYzllMzJlLCAweDJmMzU2Nzc3LCAweGQyZTU3M2M2LAotCTB4ZjNlOWJkN2EsIDB4OTFjZmZhYTAsIDB4MzlhYmI4NDEsIDB4NjA3OWY0YzksIDB4MDNmZTJhN2QsIDB4ODIyZGFlY2YsCi0JMHg5M2RjMDU5YSwgMHgwNzhlMDgzNywgMHg4NWU1M2Y3MCwgMHgyZTM5ZjkxNywgMHg1YWJmMjNlYiwgMHg3ZDExMjU5NSwKLQkweDdjY2ViZDQ3LCAweDczN2RmZjI4LCAweDkwMmU3NDhkLCAweDg3OTE1YjEwLCAweDQ3MmMwOWU3LCAweDUyZmQ4YTlhLAotCTB4MTcxNDdkMzQsIDB4OTZhYjdlZjYsIDB4OGJlOGIzYmYsIDB4ZWYyMDJkYmUsIDB4N2Y5NWJlN2YsIDB4Y2ZjYTExN2YsCi0JMHg3Yjk3MGIzYywgMHgwZGIwZDk5NywgMHg4YzRjZTZmOSwgMHg3YWQ4MjA4OCwgMHhhNjE2ZTI4OSwgMHhkZWYxOWJiNiwKLQkweDNhMGFmMjE0LCAweDNmN2QwOGI3LCAweGI3ZWZjMmRkLCAweDY1NmIzNzUzLCAweDkwZmY4MTNhLCAweDhlMzM3YWU0LAotCTB4YzY3NGQ5YmIsIDB4OTQ4YmVmYWEsIDB4MjY2Y2NhZTksIDB4ODY2ZDNmZjgsIDB4ZmNmZmM2NGEsIDB4MDExM2U2MzgsCi0JMHg3ZmQ4NmRmZCwgMHg2YjVmOWRiMCwgMHhmNzdiZWYyYiwgMHgyNmY4ZmJiZSwgMHhjYTFmM2NiMywgMHhmMTQ2MWFkNywKLQkweGEwZjdlODczLCAweDA2NjI1YTlmLCAweDJlNTAzM2VhLCAweDUzZDM4YjllLCAweGY3NTgzZjllLCAweDZiYTBlYmNmLAotCTB4N2YzZDcyZjUsIDB4ZjgzZmJkNjgsIDB4OGFlN2Y0M2IsIDB4NzI1ZjdiOWYsIDB4NTJiZjFkNTAsIDB4ZjlkNGFmZjcsCi0JMHhjZDJmMzEyNywgMHhlMDI3YjRhNywgMHhkYTg4YmFlZCwgMHgzODQ3YTFkYiwgMHgyMTkzZjMwMywgMHg2NTkzNzZlOCwKLQkweDkxNjQ3ZmU2LCAweDE3ZDliOGRlLCAweGZlZTdjMWVhLCAweDgxMGRlOGE4LCAweGU0ODY3MjdjLCAweDY2NTkzNzM3LAotCTB4ZmJjYTdiZDEsIDB4YjE2NjFiZTUsIDB4MjZlMzI2MmYsIDB4YWNjYzM4ZTUsIDB4MTRlN2ZmMjIsIDB4ZDkwMjFiZDksCi0JMHhhMjhmNWUxMSwgMHhlYzFhNzdiYywgMHg5ZmY3Y2UzYywgMHg3ZTExZjc2MCwgMHgwYmZlZjYwOCwgMHhjMTlmZTdhMCwKLQkweDA4ZmMyMWRlLCAweGZmM2UxZGVjLCAweGMyMWRlYzA0LCAweGY4MDNmMDJlLCAweDAzZjA1M2ZjLCAweDYxZGM5NzA4LAotCTB4ZTU3YTgyOWMsIDB4NWY2MmFlNmEsIDB4M2IzZGQ3MDQsIDB4ZDNiZmUzMDIsIDB4OTc5Njg3MzMsIDB4OWUyYTU5OGIsCi0JMHhkZDBlYTViZiwgMHhlOWU1OTZhZSwgMHg2ZjljOGRmNCwgMHg0ZjMzNzdiZCwgMHhkZmM5MmE0ZCwgMHg4NjE3OGMyNiwKLQkweGQ3YjdlZWZiLCAweDVhZmJlZGM4LCAweDM3YmMxY2Y5LCAweGIyZTdlMzg5LCAweDQ3M2NmYzM0LCAweGY3YzY5ZWM1LAotCTB4M2FmMDY2ZDcsIDB4MmI4ZWM1MzksIDB4MWZjODJhZjksIDB4NjNhY2FmOGQsIDB4MjlkNzljOWMsIDB4NTU2NjNjZmQsCi0JMHgwYTQ4ZjdkMCwgMHhmZGUxNjM5YywgMHg1ZjMxM2U0OCwgMHgwZDRjNzk0NywgMHg0NGE3NGY5MCwgMHgxNzJhMTlmMiwKLQkweDFkMzg1YTlmLCAweDc3MmUzYWNjLCAweGEwOTc2OGM5LCAweDllODI3MjdmLCAweGUzNjFjNmUyLCAweDUxZWY5MGIwLAotCTB4Mzk0ZjkwYWUsIDB4MzJjNjRiMWUsIDB4ZjNlMTk4OGYsIDB4ZjdhY2EzNjMsIDB4N2UzZjNhM2YsIDB4OTQzMTUwZDgsCi0JMHgzZmY5OThmZCwgMHgzZTgwZmZkZCwgMHg4YWZmZWYwNiwgMHg4ZTg3NmI3ZCwgMHhmN2RiODczZiwgMHhjYTJiYmQ0MCwKLQkweGMxZjYxMGNmLCAweGI4MWY2MDNhLCAweGIxNjRkY2ZjLCAweDFkNGNiNzhkLCAweDA1NDgzYmZlLCAweGViZTBjZGFlLAotCTB4NmE4M2U0NTYsIDB4YzVlZTMwOTQsIDB4ZWUwZmE1N2QsIDB4OTFmZDYwNjcsIDB4Y2I1YmZiMjEsIDB4OTQyMjVlZTgsCi0JMHgxM2RmMDE4ZiwgMHgwNWZhZmIyOSwgMHgxYmExNDdhZSwgMHhhMzhhM2U1OCwgMHhhODE5OTRjNywgMHhjNTkwZmJjZSwKLQkweDQ3NjllZmM0LCAweDA3NjJiOTdkLCAweGY2NDVmZWI0LCAweGYxNTA3ZjEzLCAweDZlYzUxYTdhLCAweGM0MTczYzBmLAotCTB4ODI3MzBiOTUsIDB4NTEzMzM5ZWMsIDB4ZmQyM2FkOWMsIDB4N2JiYzQxZjIsIDB4NGY3ODMwZDAsIDB4YjdmN2VjYTksCi0JMHhjYmY2M2ViMiwgMHg2ZmZmYjVmOSwgMHg4ZmY2NWYzYywgMHg3M2RmYTNlZSwgMHhlZmNkM2ZmMCwgMHg5YmM0NjBkMSwKLQkweDZlZWUwZWIxLCAweGNjMjUzYmY5LCAweDllNWFkNWFmLCAweGNmMjFhYjM3LCAweDdkMmY3YmY2LCAweGFlMDFmNzgyLAotCTB4YWEzYzQ0NjcsIDB4OTczM2UyNjIsIDB4ZDNmYzUwOTcsIDB4N2U2MTMxYTYsIDB4YzdlOWYxYmUsIDB4OWRiY2EyNGYsCi0JMHg3NDI0MTI2ZCwgMHhkODI2ZmVkOSwgMHgzYmE3ZTYzNiwgMHhmNDNkMWU4ZCwgMHhlN2UyNjgyZiwgMHg0NWViNmIyNywKLQkweGZjZmYwNDhmLCAweDY5NmVmZTQyLCAweGZhMWEzM2Y2LCAweDIzNGQ2OTllLCAweGZlMzk3N2FmLCAweDZiY2E3YWY0LAotCTB4Y2YyMDdhY2YsIDB4YzQwYjcxODYsIDB4YmNmMWRhMDcsIDB4ZmUzOWU0YmUsIDB4ZmIyNTEyYmIsIDB4MWVmYzVhZGMsCi0JMHhhMDVhYTRhZiwgMHg5N2M5NTM3YywgMHhhZjc1ZTRjYiwgMHg2Yzc5MDlkOSwgMHgzMDQ4M2RkMCwgMHgxNGJjY2M1ZSwKLQkweDA2ZDQ5NTVmLCAweDA4NmIyZjNmLCAweGI1ZWY3ZmNlLCAweDk0ZDc3YzBjLCAweGY5YzhlYmM3LCAweDNmNjJhY2JkLAotCTB4ZGNhYjhjYWYsIDB4ZmFjMWE3YzQsIDB4ZTNjNmJmZWIsIDB4NzZkOGJlNzksIDB4MDM1M2U1MzksIDB4ZjhjYTE3YzcsCi0JMHhjYTJmYzAxOSwgMHhmYWNhZjZlNywgMHg2MmU4ZmM5NSwgMHg4NWUyOWIxMiwgMHgyZTMxM2FmZCwgMHg1MGVmZTQ5NSwKLQkweGM4YWVkZjgxLCAweDFmNDg1YmFlLCAweDhjMjY4YThmLCAweDhiMzRiNmIzLCAweDc5NjdhNDZlLCAweDdkMzc3ZWFiLAotCTB4ZjRlNzg1MzcsIDB4M2RmM2E0NDYsIDB4YzI2ZmY3ZTQsIDB4MjczYzI2N2IsIDB4ODNiNjdjODQsIDB4Y2U4M2E2ZTQsCi0JMHg2ZmFkOTllNSwgMHhiNjk3ZGQwZCwgMHg0ZmU4NGRlOCwgMHg2ODNmNDc5ZCwgMHhmZDA2ZWZjNywgMHg1Nzg2MDU4NywKLQkweDdjZWZjYWY4LCAweGQ3ODY3OWFjLCAweGNkZGZjMTk5LCAweDIyOWFmZGY4LCAweDVmMDA2MjE3LCAweDQzNmJlZjkxLAotCTB4YzMzZTJhZjgsIDB4OGQzNWYzZjMsIDB4ZGVkZjI4MjMsIDB4ZjU2OGI0ZjgsIDB4Mzk3ODVjYTEsIDB4MTdiZTE1N2YsCi0JMHgzY2U4ZGI4OCwgMHg3YzQ4ZjgwNSwgMHhkZDRjZmQ5ZSwgMHgwNzI4OTE5MywgMHgwNWZkZjhmYiwgMHhmZGYxMDFjOCwKLQkweDc3Y2UyZWVjLCAweGM0NDNkYjZkLCAweDJjYjU3Zjc3LCAweGY3ZmMyZDA3LCAweGY4ZWE0YTQ5LCAweDE3ZTgxMDc5LAotCTB4ZjFhYmM5ZjksIDB4NWY3YzZhZmYsIDB4N2M4M2RiMjAsIDB4Mzg4OWM2NzEsIDB4ZTVlZjc3OGMsIDB4ZTk4OGFkZjMsCi0JMHg5YTA3YmYyZSwgMHgyMGJiOTkzZSwgMHg3OTc1ZjUxNSwgMHgyNmM2ZWVlMSwgMHgwNzg5MTk4MCwgMHhjZTYyMTk5OSwKLQkweDUxZGIzYTUzLCAweDVjYjllMDRiLCAweDc5ZDc5ZTliLCAweGNhMDQ1MTAzLCAweDRiZmFlNDMzLCAweDUzZGQ0Y2U5LAotCTB4NWU0N2FmNjgsIDB4ZmUzMWYxNDMsIDB4Zjc5YzA0NDUsIDB4NjBjZjNmMDAsIDB4YjIzYmQwOWUsIDB4ZDhjYmMwZmIsCi0JMHg3ZThlOTQ2ZiwgMHg1NWJjYTU4ZiwgMHhhMmU1ZDNlNywgMHg5YmYyZTQ1ZiwgMHg3MTViZWRhZiwgMHhhZmRkYzYwZiwKLQkweDQzM2VlOGVhLCAweDQ1ZGZmMWIwLCAweGUzZmQ2ZDI4LCAweGM4NGY3ODg3LCAweDQxNmRmMjlhLCAweGZmMjA5YmJmLAotCTB4ZmUyOTQxYWUsIDB4MzdiNjAyYWUsIDB4ZTgwNjdhNjgsIDB4M2ZhNmVkODAsIDB4MTY1ZDdiZDEsIDB4OWU5Mjg3NWUsCi0JMHg3MTg0ODM3MCwgMHhjYzY1YzZlYywgMHg5NDNlOTkxMSwgMHhlNzY0Njc5ZCwgMHg4NzI5ZWY5NSwgMHgzOTg2YzM4ZCwKLQkweDJmZTI1MDZmLCAweDEyMzMxZWU2LCAweDdkZjk0Y2Y1LCAweGFkMGVjNTA1LCAweDNjNWJiZjk1LCAweDc1MjlkZjcxLAotCTB4OTZhZmQyMmMsIDB4NzE0YzhlZmYsIDB4Mzg5ZmQ4MmIsIDB4NzkyMmRmM2EsIDB4MzhhZWU3M2IsIDB4YmY5NzgyYTIsCi0JMHg0NjhhYjk0NCwgMHgwZTY4ZmFiOSwgMHhjN2RiMmZmNiwgMHgzYzA2ODNmYiwgMHhkZjg3MTkxOSwgMHg0ZjI4NmIyOSwKLQkweDc5MzdkMDFiLCAweGEzZGY4NjdjLCAweDA1ZjNiYjQwLCAweDBlYTZjNTgxLCAweGFiNmEyZjYxLCAweDQyMWU4ZjM3LAotCTB4MmUyMTRhNmUsIDB4Y2E4NzQ1YzMsIDB4YjgyOWIzOGYsIDB4NzY4Mzc3ZGYsIDB4ZjhmN2MyNjQsIDB4OTcyNjU2N2QsCi0JMHg2NjJjZjcyZiwgMHgwZDVmZmRjMSwgMHg0MGQ4ZjkyYSwgMHg5NDdlMDY3ZSwgMHgxOWU2NjBlYSwgMHhjOTcyZGYyOSwKLQkweGQ1Y2VkMmU3LCAweDUxMjczYTI2LCAweGVkNTM4ZGZjLCAweGYyOTliMzNkLCAweDQzOTcyMzMyLCAweDYzZGZhMzM1LAotCTB4YjY4ZDU0ZTksIDB4ZWYzODBkNmUsIDB4NGU5NzljZTgsIDB4NmZjNTlmZGYsIDB4ZGM3MGZhZjQsIDB4YjU4MjA1YmUsCi0JMHg0NGU2OWEwNiwgMHg1ZjJlZmNmMSwgMHgwYmRiMmY2NSwgMHhiOGE4NmZlZCwgMHhmMzBlN2RkZiwgMHgxN2ZkMTEzNywKLQkweGZmNDE5Mzk3LCAweDkzY2ZjZmM2LCAweDdmM2M4ZDBiLCAweDlhZGNhOGYzLCAweGE2MWRmNDg5LCAweGRkOTRlYjFiLAotCTB4MmJkNTJkNzYsIDB4MWQyOTFjZWQsIDB4Njc3YzAyNjgsIDB4ZWZkOTBlNzEsIDB4NzNmMWRmMjMsIDB4NWE2NWJlZjQsCi0JMHhmMzNiZjNmMiwgMHhhZTUxY2JlYywgMHg0ZjFiMmU3NywgMHhkMjA4YWZlZCwgMHhlMzNmNzg2MywgMHg3ZGE0OGUyZSwKLQkweGNmYzg1Y2VjLCAweDRjMmU3NzFiLCAweDU5NjdmNmE0LCAweGRmMWE5NTVmLCAweGQ5ZmJlNmFiLCAweDNhMDRkOGY5LAotCTB4MzlkMzhkZmYsIDB4YmVmMWIzNzIsIDB4ZDhjN2JlNTgsIDB4YzI0YjZhOTksIDB4MDUyN2QzN2EsIDB4NzFiYmIyZmIsCi0JMHgxYTA2MDliYywgMHhlMjQ1OTBlZiwgMHhjNmNiMTJmNywgMHhlOTA3YjYzZiwgMHg4YTlhNDYzNCwgMHg3ZTBmZGI3NiwKLQkweDdmZjAwZGVmLCAweDRkZDg2YzdmLCAweGY3MTczMmY1LCAweGM3MDViOTlmLCAweGU0MDU3ZDJmLCAweDM3ZjdjNjBmLAotCTB4ZWJiZTgzMTgsIDB4NjZlZmJlNTcsIDB4YzViNGRmNmEsIDB4YjBiZjQwYzYsIDB4YmNiNWQ3OTEsIDB4ZWFmNmU0NjQsCi0JMHgzMzczY2VhMCwgMHhlNDcyNWZiYywgMHhlYmI0NWNiMywgMHhkYWZiMDdmZSwgMHhkYWVlMzE5MywgMHgyNDNhZjAyZiwKLQkweGRlMmU1Nzc3LCAweDg3YTg5NjQ3LCAweGNlNmZhZjhlLCAweDRmNGJmMWU2LCAweDhjNTJkNDRiLCAweDYzZmE4NGU3LAotCTB4ZTI1MmRmNTQsIDB4ZTc0MzVkYmQsIDB4ZDliZjcyNTQsIDB4ODY2ZTNjZDksIDB4ZWQxZjc0N2UsIDB4ZGZjODI3ZGUsCi0JMHgwNWE2ZjhiYiwgMHg3NTJiNWJkZSwgMHhiOGZiM2RjZCwgMHg2YjM0OTUxYywgMHg5MmU0N2JlOCwgMHg1MWZmNDZmYSwKLQkweDU5ZDQzZmM0LCAweGY1NWQ3YzUxLCAweDc4M2VlODk3LCAweGU4MDc0YmY2LCAweDNmZWYwMmRlLCAweDQ3M2EwOGRlLAotCTB4M2IzOWRmZTYsIDB4YWFlNjNiNjUsIDB4Mzk1ZWM5MTcsIDB4NzdmOWNhOWIsIDB4MTllMmY1NWYsIDB4ZDI4ZmJkYzIsCi0JMHhmMTVkMzRlZiwgMHgyNzczMWQ1ZCwgMHg1ZjQ5MTJhYiwgMHgyOWU2YjE5MywgMHhhNWY0YmRiNCwgMHgyMDZlMjNiNiwKLQkweGJkYTFlOTYxLCAweDJlZTdlOGQxLCAweDIzNDVkNDc0LCAweDU1ZGM2MWRkLCAweDVlN2MxMWRhLCAweDJiODgzZGZjLAotCTB4N2QwNWI1YzcsIDB4NmVmMmU2OWYsIDB4MDJlYmM0YjksIDB4ODQ1ZmM4YmIsIDB4ZmY4MGJmZjYsIDB4NmY3ZjNmMDAsCi0JMHhkOTFkZmNiNiwgMHhmMjVhZWNiNSwgMHgxNGIxZjVmZiwgMHhhNmZhYzE1NywgMHgxM2I3N2UwNSwgMHgwZjRiZmZlYSwKLQkweDBkZGU3ZTVjLCAweGJiMDczZGVkLCAweDk2ZjVjNzlmLCAweGQ1MTVmNzdkLCAweGY1NTdiMTIzLCAweGRhZTZiNzU0LAotCTB4NzNmOTNlZmYsIDB4Y2Q3ZmJkZTUsIDB4N2ZhODcxZTYsIDB4NTgzZGRlZGYsIDB4MmZmZmVhOTcsIDB4ZjM0NzE1OWQsCi0JMHgyMjk5N2RiNywgMHhlMzY4MzllMSwgMHhmMTBmNzQzNywgMHhmYTdjYjY5YiwgMHg4NzM3ZTZkZSwgMHhkMGZjMjc2NywKLQkweGI3MjgxMTc3LCAweDc1YzBjYzllLCAweDkyYmY4ODc5LCAweGFjNTAzYmZjLCAweGZjMjE4NjU1LCAweDNjNzRkZTNhLAotCTB4MTE3OWQ3MDUsIDB4YmE3NTRkZjgsIDB4NzJmNzNmMTIsIDB4YmVlOWNiN2EsIDB4ODAwN2YxMDEsIDB4ODc4NmNlYmUsCi0JMHhiOGZmYTEyZiwgMHg0ZDljZmYxYSwgMHg2MWJkNmY4YiwgMHgyYjQzZDkwYSwgMHhmNThiOTVhYSwgMHhlODdmZmRkMSwKLQkweGZiN2MwMzdiLCAweGM0ZTNlMDRmLCAweDg2YmZjMTFmLCAweDcwZmYzNDJkLCAweGZmODhiYmZjLCAweDA4MWQzZTAwLAotCTB4YTZlNWRmZTEsIDB4ZWIxZGZmYmIsIDB4NmM1MzU5NjgsIDB4ODEyOGY3ZDAsIDB4MDhmZGYzNzQsIDB4N2MwOTE1YmEsCi0JMHhkYjY2ZGZmYywgMHhmNGJlZDE5YSwgMHgwZjYxN2MxYywgMHhkZjIzMDlkNiwgMHgyZWIwOTY2ZSwgMHgzMzBhNzJlZCwKLQkweDdkMzBmN2UyLCAweDY5N2YyODJiLCAweGFlZDA5OWQzLCAweDQwN2RiNDk1LCAweGViOTdlM2ZhLCAweDgwY2ZlMDI5LAotCTB4MDZjZmNlN2UsIDB4MmZjODNhZmUsIDB4NTVkOWI2YzksIDB4YTJlOWY0NmIsIDB4ZjRlZmU5MDcsIDB4YTI5NDJjMmMsCi0JMHg3YTE5ZjllOSwgMHg4YzcyZTFlZSwgMHgyZGRmYzNmNCwgMHhkZDhlN2E3MywgMHg5N2MxMGMyNiwgMHg5ZTM0ZWNkZSwKLQkweGQxNDY3OTI3LCAweGZmNmJjYmJlLCAweDAwYzBlM2MyLCAweDkxZDMwOTdlLCAweDZlMjg2NzRmLCAweDBhNGY4ZTFjLAotCTB4ZWZmMjRjMWQsIDB4YWRmMDBkODgsIDB4Njg1ZmViOTYsIDB4ODdmMDE3N2YsIDB4N2U2NTNmZWUsIDB4ZjdmMGZmMjEsCi0JMHhjZWI4NWNkNCwgMHgyMGNmOGU2OCwgMHgwZDgwZjg1YywgMHhkNWZjMGY2MSwgMHhmY2UzY2EzYSwgMHg4M2M5ZjcyMSwKLQkweGQ3OTA3OWZjLCAweGE5ZWE4NTVkLCAweGY0ZTFjZmJjLCAweGFiZDNkMTQzLCAweGQyYTdmZmFkLCAweDUyZDkyZmU3LAotCTB4NzQyOGJjOTAsIDB4Njg3NmY5ZWEsIDB4Y2YxYzZlM2IsIDB4OWY2N2ZlZjUsIDB4MzUwNGRhM2YsIDB4N2YzYTBmOGIsCi0JMHhmM2M3OGMzNCwgMHg0MTMzYTZjNywgMHg3ZWNhOGZlNywgMHhkYTczZTQ3YiwgMHhmOTIyZmQ5ZSwgMHhlZmYyY2RjNywKLQkweDBiZGE4NGFjLCAweGQwOTgzYmU1LCAweGQ3OTM4ZWY1LCAweDdmN2Y5NGViLCAweGQxYTBlN2ExLCAweDdhNzE4MDYzLAotCTB4NzkyMTZmNWUsIDB4ZDE5YzM2NzYsIDB4N2I2YTc5ZTIsIDB4OWVmYTIxZmQsIDB4ZjQxZmQxNGUsIDB4ZjU4MDllMTMsCi0JMHgyYzc4YmNmNywgMHhjZTM2ZWM5NywgMHgyNzVmMDQzMywgMHgzM2NmOTc4YywgMHhjNzllODc1YiwgMHg2ODI5NzBkNSwKLQkweDU3Yjc1MjllLCAweDU3YWI3NTRiLCAweGRhODJlZjk5LCAweDc3OGUzYjc2LCAweDdlZmY4M2ExLCAweGQwZWYwNWUxLAotCTB4ZjFhNmE5ZTcsIDB4NjE1Y2Y5MWEsIDB4MmZlMDg3M2IsIDB4YmNmZTAxZWQsIDB4MWI0ZGIwNTMsIDB4YzMwYzJhM2YsCi0JMHgzMGMzMGMzMCwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHgzMGMzMGMzMCwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKLQkweDMwYzMwYzMwLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweDMwYzMwYzMwLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAotCTB4MzBjMzBjMzAsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4MzBjMzBjMzAsIDB4YzFiN2ZmMGMsIDB4OGRjYTBiZmYsCi0JMHg4MDAwZTczNywgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhjNWVkZmYwMCwgMHgyMDAwMDEzMSwKLQkweDIyYjAwMzBjLCAweGIwMTMxMzAyLCAweDE0ZTdmZjFiLCAweDkzYzkwODRkLCAweDI2ZWJhZjM5LCAweDZkYjZkYjYzLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhmNmRiNmRiNiwgMHgxMDE5MmZjNywKLQkweDgwMDBkY2IxLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGM1ZWRmZjAwLCAweDIwMDAwMTMxLAotCTB4MjJiMDAzMGMsIDB4YjAxMzEzMDIsIDB4MTRlN2ZmMWIsIDB4OTNjOTA4NGQsIDB4MjZlYmFmMzksIDB4NmRiNmRiNjMsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGY2ZGI2ZGI2LCAweDEwMTkyZmM3LAotCTB4ODAwMGRjYjEsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4YzVlZGZmMDAsIDB4MjAwMDAxMzEsCi0JMHgyMmIwMDMwYywgMHhiMDEzMTMwMiwgMHgxNGU3ZmYxYiwgMHg5M2M5MDg0ZCwgMHgyNmViYWYzOSwgMHg2ZGI2ZGI2MywKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4ZjZkYjZkYjYsIDB4MTAxOTJmYzcsCi0JMHg4MDAwZGNiMSwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhjNWVkZmYwMCwgMHgyMDAwMDEzMSwKLQkweDIyYjAwMzBjLCAweGIwMTMxMzAyLCAweDE0ZTdmZjFiLCAweDkzYzkwODRkLCAweDI2ZWJhZjM5LCAweDZkYjZkYjYzLAotCTB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsIDB4ZGI2ZGI2ZGIsIDB4YjZkYjZkYjYsIDB4NmRiNmRiNmQsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhmNmRiNmRiNiwgMHgxMDE5MmZjNywKLQkweDgwMDBkY2IxLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGM1ZWRmZjAwLCAweDIwMDAwMTMxLAotCTB4MjJiMDAzMGMsIDB4YjAxMzEzMDIsIDB4MTRlN2ZmMWIsIDB4OTNjOTA4NGQsIDB4MjZlYmFmMzksIDB4NmRiNmRiNjMsCi0JMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwgMHhkYjZkYjZkYiwgMHhiNmRiNmRiNiwgMHg2ZGI2ZGI2ZCwKLQkweGRiNmRiNmRiLCAweGI2ZGI2ZGI2LCAweDZkYjZkYjZkLCAweGRiNmRiNmRiLCAweGY2ZGI2ZGI2LCAweDEwMTkyZmM3LAotCTB4ODAwMGRjYjEsIDB4MDAwMDgwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCiAJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweDAwMTAwMDAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywgMHgzMTRmZmZmZiwKLQkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLAotCTB4ZmZmZmZmZjEsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCi0JMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKLQkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLAotCTB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsCi0JMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKLQkweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAotCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzFlZmZmZmYsCi0JMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwKLQkweGZmZmZmZmY1LCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAotCTB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCi0JMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwKLQkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLAotCTB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCi0JMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywKLQkweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLAotCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsCi0JMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKLQkweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAotCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzA0ZmZmZmYsCi0JMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwKLQkweGZmZmZmZmYzLCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAotCTB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCi0JMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwKLQkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLAotCTB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsCi0JMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKLQkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLAotCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsCi0JMHhmZmZmZmY5NywgMHgwNTZmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywKLQkweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAotCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsCi0JMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwKLQkweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAotCTB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCi0JMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwKLQkweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLAotCTB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCi0JMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY4YSwgMHgwNDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKLQkweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1Y2ZmZmZmLAotCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsCi0JMHhmZmZmZmZmNSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKLQkweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAotCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCi0JMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwKLQkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAotCTB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCi0JMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKLQkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLAotCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCi0JMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKLQkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAotCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsCi0JMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKLQkweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAotCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCi0JMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwKLQkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAotCTB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCi0JMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKLQkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLAotCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCi0JMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKLQkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAotCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsCi0JMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKLQkweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAotCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCi0JMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwKLQkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAotCTB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCi0JMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKLQkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLAotCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCi0JMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKLQkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAotCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsCi0JMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKLQkweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAotCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCi0JMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwKLQkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAotCTB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCi0JMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKLQkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLAotCTB4MDAwYTAwMDAsIDB4MDAwNzAwYTAsIDB4MDAwMjgxMTAsIDB4MDAwYjgxMzgsIDB4MDAwMjAxZjAsIDB4MDAwMTAyMTAsCi0JMHgwMDBmMDIyMCwgMHgwMDAxMDMxMCwgMHgwMDA4MDAwMCwgMHgwMDA4MDA4MCwgMHgwMDAyODEwMCwgMHgwMDBiODEyOCwKLQkweDAwMDIwMWUwLCAweDAwMDEwMjAwLCAweDAwMDcwMjEwLCAweDAwMDIwMjgwLCAweDAwMGYwMDAwLCAweDAwMDgwMGYwLAotCTB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwYjgyODAsIDB4MDAwODAzMzgsCi0JMHgwMDEwMDAwMCwgMHgwMDA4MDEwMCwgMHgwMDAyODE4MCwgMHgwMDBiODFhOCwgMHgwMDAyMDI2MCwgMHgwMDAxODI4MCwKLQkweDAwMGU4Mjk4LCAweDAwMDgwMzgwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAotCTB4MDAwMDIwMDAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAsCi0JMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LAorCTB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsCisJMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKKwkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLAorCTB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsIDB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsCisJMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwgMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwKKwkweDAwMDIyYzAwLCAweDAwMDI0Y2MwLCAweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLAorCTB4MDAwMmYwODAsIDB4MDAwMzExNDAsIDB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsCisJMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwgMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwKKwkweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLCAweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLAorCTB4MDAwMjhlMDAsIDB4MDAwMzExODAsIDB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsCisJMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwgMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwKKwkweDAwMDhiODAwLCAweDAwMDkzYjgwLCAweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLAorCTB4MDAwYmNkMDAsIDB4MDAwYzUwODAsIDB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsCisJMHgwMDAwMDAyOCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsCisJMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDAwMTAwMCwgMHgwMDAwMjA4MCwgMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwKKwkweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLCAweDAwMDA4MzgwLCAweDAwMDA5NDAwLCAweDAwMDBhNDgwLAorCTB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsIDB4MDAwMGU2ODAsIDB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsCisJMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwgMHgwMDAxNDk4MCwgMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwKKwkweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLCAweDAwMDFhYzgwLCAweDAwMDFiZDAwLCAweDAwMDFjZDgwLAorCTB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAwMDA2MDQsCisJMHhjY2NjY2NjNSwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwKKwkweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLAorCTB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsCisJMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmYzLCAweDMyMGZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsCisJMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsCisJMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwKKwkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNywgMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAorCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsCisJMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LAorCTB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwKKwkweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLAorCTB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsCisJMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKKwkweDA1NmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAorCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LAorCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCisJMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZjhhLCAweDA0MmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAorCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDVjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKKwkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzFhZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAorCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKKwkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCisJMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1OGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAorCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKKwkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAorCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKKwkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAorCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKKwkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4MDAxMDAwMDAsCisJMHgwMDA3MDEwMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBmMDI4MCwKKwkweDAwMDEwMzcwLCAweDAwMDgwMDAwLCAweDAwMDgwMDgwLCAweDAwMDI4MTAwLCAweDAwMGI4MTI4LCAweDAwMDIwMWUwLAorCTB4MDAwMTAyMDAsIDB4MDAwNzAyMTAsIDB4MDAwMjAyODAsIDB4MDAwZjAwMDAsIDB4MDAwODAwZjAsIDB4MDAwMjgxNzAsCisJMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwgMHgwMDA4MDMzOCwgMHgwMDEwMDAwMCwKKwkweDAwMDgwMTAwLCAweDAwMDI4MTgwLCAweDAwMGI4MWE4LCAweDAwMDIwMjYwLCAweDAwMDE4MjgwLCAweDAwMGU4Mjk4LAorCTB4MDAwODAzODAsIDB4MDAwZDAwMDAsIDB4MDAwMDAwZDAsIDB4MDAwMjgwZDAsIDB4MDAwYjgwZjgsIDB4MDAwMjAxYjAsCisJMHgwMDAxMDFkMCwgMHgwMDBjODFlMCwgMHgwMDAwMDJhOCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKKwkweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAorCTB4MDAwMDIwMDAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgdHNlbV9pbnRfdGFibGVfZGF0YV9lMVtdID0geworCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MTlkOWIzOGEsIDB4MjI3MTc2MTgsCisJMHhhNzAxNDNmOCwgMHhhNDMwMzMzMiwgMHgxMDI2NzEwMywgMHg5N2UyMDRhZiwgMHhhZjBjMGM4YywgMHgyZmQ3ODkxOCwKKwkweGNmNjA4NjIxLCAweDM4NjA2NjEwLCAweDQyMDZjNDAyLCAweDIyNDUwYzBjLCAweGEwN2FmMTA4LCAweGZlNDA3YjlhLAorCTB4YjY5OGE4NDIsIDB4NzZjMzAzMjgsIDB4M2JmNzgxZDEsIDB4MzQ5NTcwMzUsIDB4MjRhNDU4YTYsIDB4NDU4ZDVkODIsCisJMHhhMGQ3MTkxZSwgMHg0NDk0ZWZjOSwgMHhkMDEyZDdlNSwgMHg0NTM4ZDAzZiwgMHg1MTNmOTUwOSwgMHg1NDdmNDIwMSwKKwkweDM0MmZhNjg0LCAweGY5NTA0OWY5LCAweGE1N2Y1MDM5LCAweDc3Mzc2MTI5LCAweDAwMWU1NDJlLCAweDYxYWE4YTkyLAorCTB4MDAwMDAzNjAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgdHNlbV9wcmFtX2RhdGFfZTFbXSA9IHsKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDQ5OTk5Y2NlLAorCTB4MjA0ZTRjY2UsIDB4MzA4NDA5MDksIDB4NDM1MTE4NzksIDB4N2MwNjFlMWMsIDB4MjAxMjc2ZjQsIDB4MDZiZjJhZTUsCisJMHgwZWEyYTE3YywgMHgyZGU0MjEwOCwgMHhlYmY4ZmVhNSwgMHgwOTIxMzJmZCwgMHhmNjM2YzU0NCwgMHhkYTJmNDVhMiwKKwkweDA1YTg1NWUxLCAweGExODBkMDNiLCAweDRhMDBlZTA1LCAweDc4MzZkYWExLCAweGY1YWIxNWJkLCAweDYyYTI5NjhlLAorCTB4OTZhZDIyNDgsIDB4YmZjYjE3ZmUsIDB4MjRmYmRhZDYsIDB4MDA2NjRlNzMsIDB4YmJmN2JkY2IsIDB4OWZhN2VmZDcsCisJMHhlY2U3ZDlkZCwgMHhlYmRhZjdiMywgMHg3YjVhZDdiNSwgMHg1ZDhhM2RlZCwgMHgxOWQ3ZWE2MiwgMHhhMGZmODczYiwKKwkweGM2MzFiM2VjLCAweDlmMmMxOWFlLCAweDIzYTU3Y2M4LCAweDZhZDhjYmQ3LCAweDMxMjdkNDNiLCAweDBmNjIzYzE2LAorCTB4NWIxODkyNmQsIDB4YjU5ZmRhMzIsIDB4NzFjYTBkMzAsIDB4YmMyMGJlNjksIDB4ZWJlMTY3NjcsIDB4YzY1NGM2MTIsCisJMHg5YjRhYWRmZiwgMHhlOGYyYzk5NCwgMHhmMDczYjlmOSwgMHhmMzBmODFkYywgMHg1ODU2NGIxOSwgMHg2MzAyNjUzMCwKKwkweGFmY2M2YzJiLCAweDhmYmE4MzBmLCAweGZjOWMwZmIxLCAweDdmZjg3MzliLCAweGY2MWIyNGMxLCAweGJmODc0MjMzLAorCTB4YWYzZWRmYTEsIDB4ODE0ZjY4MmQsIDB4ZWRjZGIzN2UsIDB4MTIxNTQ5NGUsIDB4ZDVkYjE5OTMsIDB4MTQwYmQyYzQsCisJMHg5YzlhYmFjNiwgMHg0OWI0ZmU1NCwgMHg2MDI4MmY0ZiwgMHgyNjUzNGY2YywgMHg3OTM1ZjdkNSwgMHg4ZDM0OGNhOSwKKwkweDlhMDdlN2E1LCAweGIzNGY1NDdjLCAweGY3ZTNkN2Y1LCAweDJiN2M4ZTIzLCAweGNlMGQxNTk1LCAweDY4YWU1YWRmLAorCTB4MDYwYjcxODIsIDB4NjRjYzdmZWIsIDB4ZjllMDA1NDEsIDB4YWZlZWMyYTMsIDB4NWY5YWVmODAsIDB4ODUxMjk4OWYsCisJMHg4MDJjOTlmMiwgMHhmN2U4NjUzNiwgMHg0NWZiMmVjZiwgMHg4Y2UxYjRmZSwgMHgzODdjM2Q2NSwgMHg2ODQ0ZGE3ZiwKKwkweGUxMzliMTI3LCAweDg3NDU5YzIyLCAweGUyNWM2YjM0LCAweDc3YjE5ZjcxLCAweGNkYzAzMmE0LCAweDY5OTE4MDJkLAorCTB4YjliNThjOTksIDB4NGYyZTZmZmEsIDB4NDRmNWNjNjUsIDB4MGI5YTdmYjYsIDB4NWQwY2RkZTYsIDB4MmVlYzY0OGMsCisJMHhkZTBjMTA1NiwgMHhmODFmZmQwMCwgMHhlODA1MjViOCwgMHg2MTQ5NzZhMSwgMHg0YjI2Y2Q3OCwgMHhkMDEyY2QxNSwKKwkweDdjY2VkZDhiLCAweGE1Mzg3MDliLCAweGQ0MTQ3OWEyLCAweGRlNjBlZWZiLCAweGUzODNiZGM3LCAweDk4ODBjNWRjLAorCTB4NDZjY2Q4ZTksIDB4MzJhODY0ZTUsIDB4YTVkZDg3ZTgsIDB4ZTJlNTM2ODYsIDB4MTVjNWZkODcsIDB4MmZiNzEyZTMsCisJMHhkNTE3ZjgzOSwgMHhmNmYxYTZlYiwgMHgwNzhkMzI4ZiwgMHg3ZjEzYjlkZiwgMHhjYmUwNzU5NywgMHhhZWY3ZDc3ZCwKKwkweDc4ODQyMzMyLCAweGUxMWY5ODUzLCAweGM2NTc3NTNiLCAweGRlMjVjN2JhLCAweDdkOGYxNjNlLCAweGM3MGFhYjJhLAorCTB4OGUxNTY3YTEsIDB4NjZkY2ZjMGIsIDB4MzY3Yjc0ZTcsIDB4YjE4ZDRhMTcsIDB4MTY2NjM4MzUsIDB4OWM2MmI1NjMsCisJMHgwM2Q5NWEyOSwgMHgzMDAwYjI1OCwgMHhiNThjYjVlNywgMHhkZGEwYmQyMCwgMHgzYWJmNjg5NCwgMHhkZjRhZTAwZiwKKwkweDg1MmE0YjMzLCAweDBhZjFmYTdhLCAweGYyMTE1ZTY5LCAweDEwY2Y0MWExLCAweGIxMjU5ZmY1LCAweDllZjgxZDhhLAorCTB4NzBjYTkyY2QsIDB4ZTcxZjNiMWMsIDB4OGI1MGZlODYsIDB4ZTg2ZWUwMDcsIDB4ZWM5ZWRkY2EsIDB4NjE5NGZkZTUsCisJMHg0ODU1M2ZiYiwgMHgzODU4YjVmMywgMHg3YTRmZDRiZCwgMHhkZjAzOGMxNywgMHgzOGMwZjdhNywgMHhhNTZiM2VmMCwKKwkweGZlNjliYWM0LCAweGUxYTYxNGRlLCAweDMyYzY3ZTc4LCAweDcwYTZhNDQwLCAweGE4ZDk5MDk5LCAweDc4NjdlNDI0LAorCTB4ZmM4MTY1YWUsIDB4M2YyZTMzNjQsIDB4OGJlNjM1YTcsIDB4OWY3MzdlMDAsIDB4ZDBkNDdjZDQsIDB4NzgzNTc5YWIsCisJMHg2OWM4NWEzZiwgMHgyNjZhYTA3NiwgMHgwMWI2MzBmMywgMHg1MzA1OTNkMCwgMHg3Y2E4ZGQxZSwgMHhiMzkxOGQxMCwKKwkweGNkYTM3MzMxLCAweDk2NjNmYTI4LCAweDk5N2I5Zjk5LCAweDljZjI4NmQ3LCAweGNmM2YzNDFiLCAweGJmZDczNzZmLAorCTB4Mjc2OWRjY2QsIDB4ZGMzZjgyYWUsIDB4OGU0ZTdkY2MsIDB4YzBlMzhmMzMsIDB4MTJjZjAwZDQsIDB4NmZjMGVmMjEsCisJMHhhZGJmMmM2YSwgMHg1YTE5NjI2ZCwgMHg5MTM5NjI0MSwgMHg1ZGNlMWM5NiwgMHhiNzY4N2E4OSwgMHhmN2MwNzNlNCwKKwkweDkwN2I2MDJmLCAweDZlZjg5MGVmLCAweDA1ZDdhOGJkLCAweDBkNWQ4NTU1LCAweDFlMjgyMDI1LCAweDk1OGFmYzdmLAorCTB4MWZiYTQwNmUsIDB4MTAxYjY1NjcsIDB4YmY0YTBkZmYsIDB4MGQ3YzAzYWEsIDB4YTQzZmFhOGQsIDB4MTdiZjZkMGQsCisJMHhkN2RiMTExOCwgMHg0ZTAzYmUyYiwgMHg5OWJmYmYxOCwgMHhmOGMzZDZmOSwgMHgxOTdhZWM0YiwgMHhlYzNjOTdkNiwKKwkweGQ3OThiZDI1LCAweDdlNDcyZDFlLCAweGVhMDVkMzFkLCAweGZiZjA3NzJhLCAweDI3Njc4MDhiLCAweGVjZjAwMWMyLAorCTB4OTdmNGUzZTQsIDB4ZGZlZGZlYTMsIDB4YjlmNWIxMmIsIDB4NzdlZjBlMzgsIDB4MTY1Y2VlYzksIDB4ZTcwYzRkY2MsCisJMHhmYzRlY2M3MywgMHhiYzBiNDBiNCwgMHgyNjdlZTU4MiwgMHgwMmM2MjcyOSwgMHg4M2NjM2Q5YSwgMHhjYWE5NjhmNCwKKwkweDU0Mzk0ZWZiLCAweGU5ZjdjNjlmLCAweGY5Y2NmNTgzLCAweDAwMDMzMjMzLCAweDY2MThkNjU3LCAweGIzYTU1N2EyLAorCTB4N2FmNTA3MzEsIDB4MWNiODQ1NzUsIDB4MjVjM2UyZjksIDB4MTJjMGFjYWYsIDB4MDBhZTljZjAsIDB4MmEzODhmYmUsCisJMHhlYTdlYzc1ZSwgMHhhMjE2MzZlNiwgMHhlODcwZWRjOCwgMHg3YjFhZmUzNCwgMHg3MjM3ZDY0NywgMHgxZmE1MGYxMSwKKwkweGQwNmZjMDJiLCAweDE4NjUzMDZkLCAweGZmNDU5NWYyLCAweGM2MGZiZmMzLCAweDk4OWNiYThhLCAweDE3MmExN2VlLAorCTB4ZTIwYTNmNjAsIDB4ZjU5ZmNiOGQsIDB4MGY0MjA3ZmQsIDB4ZjgyNjFlODEsIDB4OTU3ZWNiYmMsIDB4YjYzYzMwNWYsCisJMHhjMTdlN2FmZSwgMHgwOTUwMDE0NCwgMHgxM2YwY2JjMSwgMHg0NTUyYTJjNiwgMHg2NjNkYmQxYywgMHhhNTYxZTk3NywKKwkweGZmM2MzMTM4LCAweDc0MDRmM2Q5LCAweDAwMWE3Y2QyLCAweDc1MjdjOGI3LCAweDFjYjQzNTZlLCAweGE3NzUzZGYwLAorCTB4ZTA3NWYyM2QsIDB4NTI3NWJhOTMsIDB4ZGI3NTAxYzgsIDB4ZWZiZDE3M2UsIDB4MTFlYmNiNWQsIDB4ZTlmNWNhYjcsCisJMHgwYTgzYTg0NiwgMHg3Zjc0NzA2YywgMHhiM2U0N2FmYiwgMHg4ZjViMzI5ZCwgMHhmNTg1OGVkZCwgMHgwOWNjZjQxOCwKKwkweGM0OWIzYjAxLCAweDE3NGFlN2Q3LCAweGRiYWRkNmFmLCAweDVmN2UxZjdmLCAweDJlNjBlNWQ1LCAweGY3NmVhZmU4LAorCTB4ODdhZjliYTIsIDB4NzZjM2EyZmEsIDB4MzZlYTRkODYsIDB4YTEyM2FiMzUsIDB4ZDdjNDM4YmUsIDB4MGUzMmJlYTUsCisJMHg0Yzk3NzA1ZiwgMHhhNzlmNGJlYiwgMHhhMDc2ZTMzYiwgMHgyNzI2YzljZiwgMHhkMGYxODJmMywgMHhiOGNlZWVlMiwKKwkweDNhYWRmODBkLCAweGJmMWNiZGI0LCAweGY5MmFkZWFiLCAweDc3NTNlZDEwLCAweDg1OTQzYTZlLCAweDk3MjFmYWYzLAorCTB4YzkyZDlhZjMsIDB4MGZlMDZiY2MsIDB4MjlkMTNiZmUsIDB4ZWYwZWJlNDcsIDB4MTkzY2MwOTcsIDB4NzU4OGJiZjQsCisJMHhhYzNlYTM5NCwgMHhhZDE0ZjRkYiwgMHg0ZWJlMDYzMywgMHhjZTM0ZTkzNiwgMHgxMGZlMWM4MCwgMHhlYWVmODFjNiwKKwkweDM4N2M5MjVmLCAweDBiMWI3YWM1LCAweGVlZjYzY2EwLCAweGEwZDljZDc2LCAweGQ1OWFmY2UxLCAweDZiY2UzNzQyLAorCTB4MTZlZDhhYTUsIDB4NzJlZGU2ODUsIDB4NzViZTExNzksIDB4YWZiYzM5NmEsIDB4YWQ0ZWJiNWUsIDB4OWFkZjkxOGMsCisJMHg3MGNkYzMyZCwgMHgxMTFmYzlhZCwgMHg3MTdkOGYzOCwgMHg2ZjBiZWMxMiwgMHgxYWJkNjBlMSwgMHg0NWVhMDFmNSwKKwkweGFlYzZhNDI1LCAweGE5NDk2ZjZiLCAweDJkOWFkZjQ0LCAweGY4OWFmMzMyLCAweGY4M2RkMzg4LCAweGVkZDY4Y2FmLAorCTB4NWYzNzVlZTAsIDB4MDZkZDA1YjcsIDB4ZGJhMGFhZjQsIDB4NTFkMDVkNjksIDB4Njc4OTJmZTksIDB4ZTkxYjdjN2YsCisJMHgyMDc0ZjAwMCwgMHgyNTVjYTA5ZSwgMHhjMGRjZjNlMCwgMHhkZmU4MTU0YSwgMHgyZTNhNjdlMywgMHhjYmUyMTdiYiwKKwkweGM3OWIzYjBlLCAweGNkMzlhYzYwLCAweGFjMGFmZDliLCAweDdiMmExZGEzLCAweGVmOTllZDEwLCAweGQzZmQ4NmI2LAorCTB4OTY2ZGJkNjAsIDB4ODAyNWIzMDIsIDB4YWEwNWI2NWIsIDB4Y2UxNWJhZjgsIDB4ODU3Zjc1YzQsIDB4OTQ2ZjZmNTgsCisJMHgxNWFmMzRiYywgMHg4MDlmYzA1OSwgMHgyNWU5OGVmNywgMHhjMDQ5NjQxYiwgMHhjYWY1ODY5ZSwgMHg0YjllM2MxZiwKKwkweGZkNDNkY2ZkLCAweGZlNGZkMGE4LCAweGNiZDFmYjg1LCAweGQxZmE5OGE3LCAweDdlOGNhYmNiLCAweDQ5M2Y1MDE2LAorCTB4NDc0ZmQ3MTcsIDB4Nzg2Njc1ZjksIDB4N2U4ZGFiY2EsIDB4Y2YxZmE4ZWEsIDB4ZmY0YmNkYzUsIDB4Nzg2NjBkYzYsCisJMHhmZDRiNTFiZSwgMHhiMWYzNGVhNCwgMHhiYWViODY4MCwgMHhlZGQ2MDdlMCwgMHhiNmJkZTE5NywgMHhlM2MyNzUzNSwKKwkweGNhMmY5NjJjLCAweGRjZjFjNjFlLCAweDdjYjEyNTIwLCAweGM5MjUzMjkxLCAweGZlYTk4N2M0LCAweGY0M2FhNjYxLAorCTB4MmNiYWQzYTQsIDB4ZTNkZjhmZjQsIDB4NDc1NGI5MjQsIDB4NGExN2E0YWEsIDB4OWUwOTNhNDcsIDB4YTQ2YTQ2ODcsCisJMHgyZWJhMWUxNywgMHg4N2FlMzk3MCwgMHg0YmRhMzYzOCwgMHhhYjgxYTkwZiwgMHgwZDdjMzhmNSwgMHgxMzJjNGE3MCwKKwkweDMyMGZiMDRiLCAweDY5NWZiZTg3LCAweDFiMjg3OGU3LCAweDdkZjBiNjc1LCAweGQ2YzFiZWY4LCAweGY1MGE5ODVmLAorCTB4M2ZlOTViMzYsIDB4OTU5ZTNjZTIsIDB4MjQ5NjlkYjgsIDB4OTc2YzQ2YjMsIDB4ZGVmNmUwZTQsIDB4MGQ5MmRjY2EsCisJMHhiNTNjMThjMSwgMHg0YmZhMDY4ZiwgMHhkYmI2ZmQ4MywgMHg1ZmM4OTkwMywgMHgwZWJmNGJjZiwgMHgxOGFkYmYyMiwKKwkweGZjN2Q5MmFkLCAweDIyYWZmMzQyLCAweDJiOGZkMDQxLCAweDIyNjY1NzQ3LCAweGM4MmExZDNlLCAweDJhZjhlYzc3LAorCTB4ZTM0NDVmOGMsIDB4N2ZmMWMwNmYsIDB4NDc3YzYwOTgsIDB4ZjhkMzE0ZGUsIDB4ZDMyYTljY2UsIDB4YzYxNTRlZjgsCisJMHgyNmRmN2UwNywgMHgwN2M2MjViZCwgMHhkOGM3NWRmYywgMHhhMWJmY2Q0YiwgMHg1NTM5MWRmMSwgMHhiNDRhZmUzNCwKKwkweDRmYzc2MzRmLCAweDI3ZmYxODFhLCAweDViYmI4YzEyLCAweDkwZDJlYmUyLCAweDY3NWRlN2Y5LCAweGI1NGU3ZjllLAorCTB4OWYyYWZlNzksIDB4ZGZlOTVlZmYsIDB4MzQ0OWY4YzQsIDB4ZWZjZDdkZmYsIDB4NTRlN2Y5ZjEsIDB4NzgzYmY5ZjMsCisJMHg3YmUzMDNiZiwgMHgxMDdmZjAwNiwgMHhkMTI0N2ZlNywgMHgzMDZmZjNmYywgMHhhZDRjN2ZjZiwgMHgzZTBlZmU3OSwKKwkweDBmYTUyZmZlLCAweDhkMWFmOGM1LCAweDEzZTZhYmZmLCAweDZhNjNmZTdjLCAweDExZDU3YzY5LCAweGE5MWYyMWYwLAorCTB4YzkxYTkyYTMsIDB4ZWQwNmNmOWUsIDB4OTQ3NDgyMzQsIDB4ZGNiMWNhOWYsIDB4ZjI5NzZlZWUsIDB4MjUwZjBmMDgsCisJMHgzY2ZiYmU3MSwgMHgxYjRkZjgwOSwgMHgwNDJjNzdkNCwgMHhhY2ZhMDUxMiwgMHhjZDdjZjA1ZSwgMHg1MDM1NTJkNiwKKwkweGRlODNkZTI0LCAweDVkNDAyODViLCAweDVmMTMyNWQwLCAweGQwOGVkNWIzLCAweDZmNmYwMDY1LCAweGZhYzQxYzk3LAorCTB4MGI1ZmQ1ODIsIDB4NzFkZWI0YzksIDB4YjljYzAwN2YsIDB4YzNmZjNlMDgsIDB4YzdkNmUzZDMsIDB4MmU1YWNiY2UsCisJMHg4ODlmYjBlYywgMHhjMzg4ZTQ5YSwgMHg2MzYzMmMxMywgMHg2YmJlMDExYiwgMHg2N2YwOWQyNSwgMHgxZTgwNGZkNCwKKwkweDNmM2ZhMDY1LCAweGU1OGEzZDAwLCAweDM4MWZjMjg3LCAweGE5OTY3YTBlLCAweDRjZDM3MmIxLCAweDZmNzc0MWRmLAorCTB4ZWViY2MxMTYsIDB4NTA5ZmYwMTAsIDB4MmM0ZmJlMzgsIDB4ZmY4ODQyOTUsIDB4NTA3YTlmY2YsIDB4YjBiNGZkNDUsCisJMHgzZTkwMTkyMywgMHhhMDgzNDcwOCwgMHg0NzZlZmY1MywgMHhmODQ0YmQ2OCwgMHhlZTdlMjJmNCwgMHhlYzY0NTEyNCwKKwkweDVmYmVjMjc3LCAweGU5Yjg2NmI0LCAweGQ0MmNiOWJiLCAweDFmZWQwOTk2LCAweGI0NmYzNTU4LCAweDY3YmZmMzBlLAorCTB4NGM4MjYzOGUsIDB4OTQ3ZjlmN2UsIDB4OGQ5OGU0OGQsIDB4MzE4ZjgxYjIsIDB4ZmIyOWYzYTcsIDB4MzlkY2E4MjgsCisJMHhlZmIyNmVjNywgMHhlYjk4MGFlZiwgMHhlYjk5NTRmNywgMHhkZDkwZjZiZCwgMHg2MmM2ZjY4NiwgMHg3ZTgzYWQ4OSwKKwkweGJmMzQ2ZGVmLCAweGRiYjFjNjM3LCAweDhjN2IwOTg2LCAweDA2NDc3NzhmLCAweDJjNWVmNzg3LCAweDlkNjNlMDI3LAorCTB4Y2U5ZjdhZTgsIDB4NjllMDM1YmYsIDB4MjJjZWM0NzgsIDB4ZDM0NjVlYjQsIDB4YzE2NzhmZDEsIDB4MDJkN2IyNzQsCisJMHgxNWI3OWYzYSwgMHg0ZWVjZmJkZSwgMHg3M2MwMDU3ZiwgMHhlMTMyYzNkZiwgMHg3NDdmMGFkMywgMHgwNmRmYjI1ZiwKKwkweGNkNzQ1Yzc2LCAweGU3NjhlZDFmLCAweDg1NjNlNzVhLCAweGQ2NjVmZWZmLCAweGVhMmFlOGY5LCAweGViNDE3OWZiLAorCTB4NTYyN2NlNzMsIDB4MmFlODZhN2UsIDB4YTYzYzdlMWQsIDB4ZWZmODVkNWQsIDB4ZTE4ZjFmODcsIDB4YjMyZDlhYWYsCisJMHhhMWM1ZjU0YywgMHgxN2VkNGNiYiwgMHg3YTY3OTlhZCwgMHhiMTYzYjBiZiwgMHhlZDAzZmRlOSwgMHhmM2VhOWEwZiwKKwkweGRhOWIwZjgyLCAweGQ5YWNiZmRmLCAweGM2ZGVmZWY0LCAweGVmZWY0Y2M3LCAweDU0Y2E3YWE5LCAweGFjZjAyYmJmLAorCTB4NzM5ZGZkYTksIDB4NGJkZTk5ZDYsIDB4ODk4ZjE2ZmIsIDB4OGMwZDVlOTIsIDB4ZjJiYjQyYzksIDB4N2U0MzA3NmQsCisJMHg5MGRkZjgzNCwgMHgzMjlhOGY4NywgMHhlNGQ5M2NhOSwgMHhlNTE5YjJhNSwgMHhiNmRmZTQxNCwgMHhlYjBkOTc5YiwKKwkweDYzZDE4ZGU3LCAweGVkMGZmNmVjLCAweDRmMjgzOThkLCAweGUyYjdiZTU2LCAweGYwZGZjYWQzLCAweDc1YmM1NDZmLAorCTB4YzE2YjI4YzgsIDB4ZDczZDQ3NWYsIDB4ZTM2N2Q2MjcsIDB4Zjg2NDhmNzksIDB4MmU0OWNiMDcsIDB4YjcyZTU1NmIsCisJMHhjYWIyM2JiNSwgMHg1NWFlNWZkMCwgMHg3MThkODUyMywgMHg3OTAxOGFmYywgMHgwZjM0NGIwZSwgMHgzYTc0NTY4NiwKKwkweGQ1YjgwZGQyLCAweDEzN2NkNzQ0LCAweDY1ZmIzZDljLCAweDY1MWViZjFhLCAweGZmZGZmNDE3LCAweGIyZGYxNTY1LAorCTB4MWM4ODNlYTEsIDB4MWM3NWI5Y2MsIDB4Yzg3ZmUzYzIsIDB4YTU3NGYwODYsIDB4ZDNkYmZhZDMsIDB4NzFmODYzMzQsCisJMHg0MTU3ZjEwNSwgMHg3MzRkNDdlNSwgMHgxNGQxM2NhOCwgMHg1Mzc4ZjJhMCwgMHgzNDFmOTUxNSwgMHg2ZDE5NTIzNSwKKwkweDdiZTU0NjVhLCAweGRmMmE0MTRkLCAweGYyYTc2YTZkLCAweDU0MWQ0ZGI3LCAweDQzNWE2YjFlLCAweDQyOWE2ZmU1LAorCTB4ZjkzNmY2NTQsIDB4MmJmMDFjYTksIDB4MjY5OTNkMGMsIDB4ZmY2MTRhZWMsIDB4ZjU0MTBhYzMsIDB4MzIyZTYyZDMsCisJMHhmMjRkZGRmYywgMHg3OTQ0Y2JlOCwgMHg1ZTdkYWQzYywgMHhlOWYzNzY4OCwgMHg3MmM2MGU2MywgMHhjYWNiZTMxMywKKwkweGNhZjEwOTBmLCAweDU0NTc2NGZjLCAweDRjMzk0MDg2LCAweDk1ZGVmYTFjLCAweGIyZTRlOWM0LCAweGY0MGMxOWIxLAorCTB4ZmQ5NzYzYzYsIDB4ODhiZjM3YzAsIDB4ODYxYjBhZWEsIDB4YjM3Yzg3ZGYsIDB4MDVmYTcxZGMsIDB4NzVlOTE1ZGYsCisJMHg3ZjMxM2EyMSwgMHhhMDZjZjE3ZiwgMHhmZWU3ODljNywgMHhlZGZiMDRiZCwgMHhkNzBhNzVjMSwgMHhhZDMyODNjYiwKKwkweGMxYjIyYzk3LCAweGMxOGFmNDg3LCAweGZkM2ZhZDFiLCAweGJlNWU4NTNiLCAweGE1NGVmZTAwLCAweGNlZWJmODFiLAorCTB4ZDhiYjdmNDEsIDB4YTdmZjUzYTYsIDB4NDE0YzFkM2IsIDB4MGU0OWVlM2MsIDB4ZjRlYWE4NjEsIDB4NWMxZTBkZTEsCisJMHhkYTY0OTZlZiwgMHhmMDcxZTNmNCwgMHhlMTc1OTQ2MCwgMHg1ZDhiNWQ1YywgMHhmNWNjYmEyNywgMHgwY2QyMWRkMywKKwkweGE2ZjJiZjFlLCAweGQ2N2M4NmRjLCAweDBiYzdlYmE0LCAweDU0OTlmZTkwLCAweGM5MmNmZDFhLCAweGU0ZTNmNTU0LAorCTB4M2FmODg3MWYsIDB4Zjg5NTM1YjUsIDB4NmEzNmZjMTQsIDB4NDcwZDFmZjcsIDB4ZTEwNjdlYTIsIDB4ODdiZjY0ZTgsCisJMHhjOTE3YzllZiwgMHgzMzdlZjJmZiwgMHg3MTQ0ZmU1MywgMHhmZWM3YjYyNiwgMHgwZWU3YWUzOSwgMHhmOTFjZWZmOCwKKwkweDhkZDUwYWY3LCAweDcyYzIxYjdlLCAweDNlMzU3MWQwLCAweDBmMWE2YWRmLCAweDNlMWFmM2JlLCAweGYzYmNiOWYxLAorCTB4NGVjMmFiZjEsIDB4YmRmOWY4YzQsIDB4NzFmOTA2MzgsIDB4ZjdhY2RkMmUsIDB4ODZmNTRkNTMsIDB4YjRkZDJjYWUsCisJMHgyMDFmZTAwZSwgMHg1MjRhYWNmNywgMHgwNTZhNWY5MCwgMHg1YTI5ZjRmNywgMHgxZGYwMDRiYiwgMHgyZTg5NzliMSwKKwkweDU3NmYxMjBkLCAweDAxYWE4Y2U3LCAweGNiNGRmMjJmLCAweGIxN2JkNzFkLCAweDJmMWE4NzY1LCAweGU5YjI3MTZlLAorCTB4MTI1MTU3YjAsIDB4OWYyMzVmYzMsIDB4OGUyMmE4N2UsIDB4OGQxYzNmOWQsIDB4MzY4YmQ0MjcsIDB4NjczMzRmNmUsCisJMHgyNGZlODNkMCwgMHg2NjdhMGNjYiwgMHg2ZDM0MDliYiwgMHgwN2U0M2YwMCwgMHg3NTMxMzhjMSwgMHgyMWM1OWZhMywKKwkweDc1YmM3ZjdiLCAweGVkYzZjN2IyLCAweDA1YjhlYjY0LCAweGY4NTE3NGIyLCAweGI0N2FkZmFiLCAweGM1NmRlNzFjLAorCTB4YTdkNzdkNjMsIDB4MGJlNDgwNmEsIDB4ODgzMjU3ZmUsIDB4NDdiZjAzNDcsIDB4MzIwNTE1NmMsIDB4ZTViZDVmZjQsCisJMHgzZjI3YjI3ZCwgMHgxZjBiMDdiMiwgMHgxYWRlOGYzOSwgMHg3OTk2YmYwYSwgMHhkZTY2MzkyMiwgMHhlMzhkZDY0MSwKKwkweDVhNzExN2NjLCAweGRmM2JlZmUwLCAweGUzZjE3NTgxLCAweGUzMGNlY2Q3LCAweGI0MmNlY2YwLCAweDgzMDM4MThhLAorCTB4M2ZhODM2NGMsIDB4M2JmMzZhMjAsIDB4ZmIzZTI4NmIsIDB4NDFkYjhkYjEsIDB4MDc4NTU4MGIsIDB4ZDYyYWMyOWQsCisJMHhlMDc2ODI1MSwgMHg4MTliNjYyOSwgMHhkZWM1M2E3OCwgMHhhMThjNGNmMCwgMHgyNTU5MGNkMywgMHg2ZWQwM2NmYSwKKwkweDdlYzA0M2I2LCAweGFkMTdkNTM1LCAweGQ5MmJkNzMxLCAweDMzZDQwY2VjLCAweDJjZWRhYjk1LCAweDRjZmNkMTI0LAorCTB4M2FjOGE3ZWYsIDB4MzU4OGJiZjUsIDB4YjlmNWMwYWUsIDB4ZGZlM2NlYzUsIDB4OGNhNjc1ZjMsIDB4NWVlYWY4MDIsCisJMHhlMzA0YmU3ZSwgMHhkY2M4YjdlMiwgMHgxYmUyMzA4ZiwgMHhmODcxODc4YiwgMHg1NGViYzNhYiwgMHg3ZGZmYmMzZiwKKwkweGFlM2JjNGU3LCAweDY4N2RmODY3LCAweGMxMGZhZTA1LCAweDkzNmY5MjlkLCAweGJmN2UyODc3LCAweDc4NTZmYzJjLAorCTB4NDg3YmY1OGQsIDB4NTFjMDQ1OWMsIDB4MWI4YTQ1YjcsIDB4ZjA1N2JkMzcsIDB4M2Y4ZmMxYjcsIDB4ZWMzNmYzMTIsCisJMHgxZWIxOTdmYSwgMHhjYTM3Zjc2MywgMHgzMzJhYWUyMiwgMHg0YTdlZTkxOSwgMHgyOTZkMDY3NywgMHhlZmUyOWVmNCwKKwkweDVmMGUxZGMxLCAweGFjZWZjYzBiLCAweGYyMjk2MmFkLCAweGM1MGZkODE3LCAweDU5ZGRhNjJjLCAweGY3OWU4MDViLAorCTB4ZDI1N2FmNDgsIDB4YTExMjk5YmUsIDB4N2I1ODEwN2QsIDB4MzU3ZGQ4OTQsIDB4OGM1M2M5MzksIDB4ODMzNzYzNzEsCisJMHhmNzFmMzVmNSwgMHgyNDE0ODJkNSwgMHg5YWFlZTE1OCwgMHg2ZTMxOGFjOSwgMHhmYTAwZmEwZCwgMHg3ZTUzZDI3YiwKKwkweDRiYmE4MjU4LCAweDlmZDg2NGViLCAweDk3MWNkMzIzLCAweGY1Y2Q3OTc3LCAweGY3MDNmYzA2LCAweDhhMzJjNjdkLAorCTB4NTU4ZjI1MWYsIDB4MzA4Yzc4MmMsIDB4OWY2ZTFmZDQsIDB4ZTQyZmJlMjUsIDB4MWYxM2RlMTEsIDB4YTFjNTg4N2IsCisJMHhiOTExNmE3NCwgMHhlOTQ2MTkxOCwgMHhmMjk3ZjAxOSwgMHhmMGUzNWZkMCwgMHhkYTAwN2M1MywgMHhmYjc5ZDUyZiwKKwkweDVmMDcxMTdhLCAweDg4ZDk3NmZhLCAweDk3ODllNzYxLCAweDE1ODE5YzM1LCAweGRkNGM3ODY4LCAweDUxOWZkMzg4LAorCTB4MjVlMjY4NTgsIDB4YWMyZjU1ZTgsIDB4ZjU3YTMxYjYsIDB4MDdlMDViNjUsIDB4YTNkNDBmNDgsIDB4ZTMwNDlmMDgsCisJMHgwNGY4NjIwNCwgMHg1NjNkNTcxYywgMHhmODVhMGZjZSwgMHgyMzg2NmZlMSwgMHhmYmY0OTk4ZCwgMHhlNWUwNWIxMSwKKwkweGNkZmM3MDc4LCAweGU5MGU2N2ZkLCAweDY4N2ZlMGZmLCAweGZhNDMwNWZmLCAweGZlYmM3NWZmLCAweGI2ZGU1ZWViLAorCTB4NTRmYzA4MmIsIDB4M2RhN2UzZmQsIDB4NjNlY2NjYzAsIDB4MDdjMzIzYTUsIDB4ZDRkZGFmNzQsIDB4ZmNiOTQxZTYsCisJMHg5MDdhMDk0OCwgMHg2NDg3MWZhZSwgMHhmMmIzZjdkYSwgMHhlNDMxNWQ4MSwgMHgyNTQ5YWZkMywgMHg0N2M0M2ZjNCwKKwkweGUyN2M1ZjI3LCAweDNlYjdiNDY2LCAweGM5ZDc2NGRmLCAweDg4ZTJkZmJmLCAweGViMjk4MDM4LCAweGY5NzMxNzNiLAorCTB4OWY3OGUyZDgsIDB4OGE3ZTU3ZDcsIDB4NjVkMGQ5ZmMsIDB4OWJkNTE3ZDYsIDB4ZDJmMGNlOWYsIDB4ZmUxNDE1ZmEsCisJMHg4N2ZjODQ2ZiwgMHgyODdmOGRmYSwgMHg4MWFjN2I0NywgMHhiM2RlOTNmNSwgMHg5ZmUzODc3ZSwgMHhjMmY2NDYxOSwKKwkweGU4NjUzNTNjLCAweGFlYmY2MzdiLCAweGExYTVlMDQxLCAweDY1NGY4OWYzLCAweGY5Mjg5NjEyLCAweDU1ZjZkNjhiLAorCTB4NWNmODBmYzIsIDB4OTM2N2ZiMTYsIDB4MzNlNDY0ZDksIDB4YzQyYzFmMDMsIDB4ZTVmOTAwZmQsIDB4OGUzMThiZTcsCisJMHgzNWYxYjNkMywgMHhjYjE0NTQ4ZiwgMHg5ZGVmNWM5ZiwgMHhmZGYwM2YwZSwgMHhjYjEzN2E5ZiwgMHhjNWU4MmY1MywKKwkweGIwZGI3YjU4LCAweGMyNWRiY2VmLCAweGNiYzNkOTdmLCAweDgzYzQ3YjVhLCAweDc1ZGFmZDcxLCAweDFlMTA1Zjc2LAorCTB4ZjBkYjZlZDcsIDB4YWUzMGU3ODMsIDB4NzdjM2I2ZjIsIDB4YjM1ZmY0MTksIDB4NWNkZmQ1ZWQsIDB4ZWQ5YWY1MDcsCisJMHg3Yzk5YjRmNiwgMHgzMTk0OWExYSwgMHhmODA2OTc0OCwgMHg0MTg0ZDk2ZiwgMHhlNGZmNTQzYSwgMHg4ZTNiZDU1NSwKKwkweGQ4NzQ3ZjNmLCAweGI2NmEzZDIwLCAweGI4ZDk1N2VmLCAweDFhOThmOGExLCAweGI1NDZhZmRlLCAweGJmMDk3NDM4LAorCTB4ODY3ZThlNWYsIDB4MmExN2YyZmMsIDB4N2RlM2ZkZDIsIDB4MWI5MTFiMTIsIDB4NWVlYjlmMDcsIDB4ZjExOTdiMjUsCisJMHg3NDE0NzQ0NCwgMHhhNTliYTAxYSwgMHgwNWQwMDM3ZCwgMHgyNzQxYWJmNSwgMHg0MjYzZmJlYiwgMHg2ZjNmYjFkZSwKKwkweDRiZjNmMTExLCAweDkwN2RjNTNmLCAweDM4N2MzYWRmLCAweGJlOTdhYWZmLCAweDdjNzljMWU5LCAweGJlNzIzNGE4LAorCTB4YzMyZGJlN2UsIDB4ZDk1NmUzMGYsIDB4OTUzYTE5ODMsIDB4MGJkNTc5ZmMsIDB4NWI3ZTIyZGYsIDB4MTk1YmY0NzQsCisJMHhmZTYwYmYxNCwgMHgwYWQ5MWIyYywgMHhkZjljMmNjMSwgMHhkM2I3YjVjMiwgMHg4MDU5MmFmYywgMHg3OWVhYWVmOCwKKwkweGFiZDcwMmI5LCAweDYzMzYxNGNmLCAweDc4YjkxYzdiLCAweDg3YzVjODQ0LCAweDgwZjFjMWViLCAweDBiODg3ZGY5LAorCTB4YmMwYmVlMDcsIDB4MDZkZTUzMjEsIDB4N2M1MjBmNjMsIDB4N2VjNjViZTQsIDB4ZjU0MjViMGUsIDB4NGU5YzljY2YsCisJMHhlZmMzMTViMywgMHg5NjI3OTU4NSwgMHhlY2FlMzc1ZiwgMHgxYzljZmE0NiwgMHg3MTgxMWZlZCwgMHgwNGE2MDZkZiwKKwkweDczYTQzZTA1LCAweDc0N2NhZmQwLCAweDFmNGUwOGZhLCAweGM0NGE1NWU2LCAweGE3ZWZhMDc3LCAweGRmNmM3M2UyLAorCTB4OGFiYmY3NmQsIDB4NzNiMWRmNGQsIDB4MmZlMzgzYjksIDB4ZGMwM2UzMTUsIDB4N2VjZjY4NDksIDB4MWY3ZjExOTgsCisJMHhhYzYyYjM3ZiwgMHhjNTU3NjAzNywgMHg3YzhjNTdmMCwgMHhmOGRmNzk3MywgMHg0MzZmOTcxOCwgMHg2NmIzNDNkZSwKKwkweGJkM2ZmYmUwLCAweGJmMDdlNWM5LCAweGUwMDU3YjQzLCAweGY3YTA4YzhhLCAweDQ4OTM2ZmZiLCAweDI0NTgzODFmLAorCTB4YjQ2ZjVjOWUsIDB4YmYzNmI5MGIsIDB4ZTAwNGY4MzcsIDB4MWRkZDcwNTYsIDB4N2ZlYzE3ZTAsIDB4ZWM5ZmUxMTgsCisJMHhmMGQ1Y2FkOCwgMHg2Y2JlOGM1ZCwgMHg0MzNjZjFjMCwgMHg3NmU0MzNmYiwgMHg4N2ZmOTA5MSwgMHhiM2ZjYjMxNCwKKwkweDEzZWU1Y2I1LCAweGMyNDExYmZiLCAweGY0M2RhZDRmLCAweDVlNTBlNzgzLCAweDFmNzEzZTQxLCAweGJkOWI3NmJhLAorCTB4YzlmZGU3MDIsIDB4YjliZjgzZDYsIDB4OTNlNGU0MWIsIDB4NjZhNzIxYjAsIDB4ZDM5NTY5ZmQsIDB4YjBkNzFkYWEsCisJMHgwOWZhNzI3OCwgMHg5M2M0MTNhNiwgMHg1NzFlNzg1MywgMHhmMTI4YjU0ZSwgMHhmZTk1N2ZmMSwgMHg4MmY3ZjAzNCwKKwkweDNlODY3ZjA1LCAweGFiNDc4NDRjLCAweGYxNWViYzNlLCAweGZhYWQzZTEyLCAweGM5YmRmZTEwLCAweDlmZjI4NjRhLAorCTB4YmYwNjc3YzEsIDB4NmVhOGZmNTUsIDB4MDE5ZGVhMGMsIDB4NmVmODM0YmUsIDB4YmUwZDJmODAsIDB4MzQyZjEyMWIsCisJMHgzZTg4NmZlMSwgMHhmMDBjZDhjMywgMHg3ZmVlYzU0OSwgMHg5OWZjYzcyZCwgMHg1ZjdjM2RkYSwgMHg4NDNiYmUxNCwKKwkweDlmOTNjMDc1LCAweDg3MWQ2MWJiLCAweGQ2YzVhNTQ2LCAweGQ4N2E5NjQzLCAweGE5NmZkZWQyLCAweDA3ZGE1ODU3LAorCTB4NGI0NmY1MmMsIDB4MGJmNzEwZmIsIDB4M2NhYTBlYmIsIDB4NmE2MjI1NGYsIDB4ODJjZTVmNmYsIDB4ZWY1MzhjNmUsCisJMHhkMjFlMjk5NSwgMHhjMGFmMzAwNywgMHhiOWFkYTRiYywgMHg2ODYzY2MyMSwgMHg1MzM4ZjE3MywgMHgwMmJhYmE3ZiwKKwkweGRlOWY1N2Y1LCAweGIwN2I0MWVmLCAweDczZTNjNWRmLCAweDllZmQxNTdkLCAweGVjM2IxOGQ0LCAweGU5MzIzZGZkLAorCTB4Y2Q4ODY4ZGYsIDB4ODIyZmU3ODgsIDB4OGJmNDQxODcsIDB4NzllZjQ0YjIsIDB4YWNiYTdkZGMsIDB4ZjhjMzJjZTUsCisJMHhjM2VjODc0YSwgMHhlNjgyY2Q5MCwgMHhkZmI4M2QzYiwgMHhmZjI3YjdkZiwgMHg3Y2YwMzk5NiwgMHhiNjk5MTFlMSwKKwkweGZlZDBmYWYzLCAweGZiMzQ0MTRlLCAweDNmMThhYzk1LCAweDdjMTYyM2VkLCAweGEzOGMwNmU2LCAweGRhZmVlMWVmLAorCTB4YmIxNjU1ODIsIDB4YmUyMmFkODIsIDB4YWE5NmQ0YTgsIDB4YmZjMTE3YTgsIDB4OGZiY2MwZmEsIDB4NWFiYmY5YzAsCisJMHhkNmI1NTdmNCwgMHhkZWY4ZGVmYywgMHgzN2FiZTNmMCwgMHg4NDA3ZGY5YSwgMHhmOTE2N2ZkZiwgMHhmMWQyZWQxZCwKKwkweGJiZjczYzZjLCAweDA5Mzc4ZjE5LCAweDJlNWQzYWZkLCAweGUwMGU2NWJhLCAweGNjYjBlZmJmLCAweGVmNGU1ZjkwLAorCTB4YTdmZjA5OTEsIDB4NzM3ZGYyYjcsIDB4OGI1ZjlmOGEsIDB4N2E0ZmRhN2MsIDB4MGY1M2MwY2QsIDB4NTg5YTg1Y2EsCisJMHhmY2VjZjRlZiwgMHhkMDIzYzk1ZCwgMHgzYmQ3NzZhNCwgMHg2NTA0ZmZjNSwgMHgwYmI3YWVjZiwgMHg5N2Y1ODY3ZiwKKwkweDg3NzljYWRmLCAweDc1M2Y2ZDBkLCAweDJiZjY4YjlmLCAweDY5YjlmNmZhLCAweGVmNmZiMTdmLCAweGMxMWU3MzJmLAorCTB4OGY4NzZlZmEsIDB4ZmRmNmZlZjIsIDB4YTdmOTE4YjksIDB4MGFhM2I5NmYsIDB4NjhkZjU2ZjUsIDB4ZWNiNjY3ZWUsCisJMHg5NDcxNzNmZCwgMHhhMjU2YzlkNiwgMHhlZTc2ZTVkYiwgMHhmM2RlOWVlNywgMHg2OTQ5ZWZlZiwgMHg3MGFjYzI1OCwKKwkweDRjOTdkZmZkLCAweDlmODZiNzcxLCAweGQ2NWUyOGJhLCAweDI1Y2ZmN2I3LCAweGE1ZmJmNmIxLCAweGVjNWVhN2NlLAorCTB4ZDliOWY2MjMsIDB4NWYwODFkOWMsIDB4Njk3ZmRmMmEsIDB4MWJiNWQ5ZjgsIDB4YTIwZjMxOWEsIDB4MDBmYWJmNzMsCisJMHhjZmZhOWZiYywgMHgzZWEzMTQ1ZiwgMHhlZGMxZGJlYywgMHhmNDdiNWU5YSwgMHg5YjI3ZGMwNSwgMHhiOTYyYjZkMCwKKwkweDhiZDVlODFkLCAweDY0ZmI4MTQyLCAweDBiMmYzZjZkLCAweGYyZjBmMTZhLCAweDJmMDFjNTA1LCAweDhmN2YxZjE2LAorCTB4OWZmZjQ4ZjgsIDB4ZjY4OTBmODAsIDB4YjhmNzZiYmYsIDB4ZTcwOTRlNDMsIDB4ZGVmNzk3ZmQsIDB4Y2ZiMDNkNDEsCisJMHhjYzY5N2M0MSwgMHgzMzcwOTNmNywgMHg5YTE3MWRkOSwgMHg2ZTU3ZDU3NywgMHg2MmU0NTJkZSwgMHhiZmYyYmRlNiwKKwkweGVkYmJmZjM5LCAweDJhY2Y4MjVlLCAweDdjZjk0MzA3LCAweGRmNTQ0M2VmLCAweGJjMTFmNmU2LCAweDliZWZjOTE3LAorCTB4ZGY3NDZhYmYsIDB4NWNmNzc0MDEsIDB4ZmU4N2RlNzgsIDB4YzhmZGQyYzcsIDB4M2FlZTgyN2QsIDB4ZmMzNDk5ZTYsCisJMHhkZjA0MTdmMywgMHgyNzczZDU5NywgMHgzZGQzOWJmZSwgMHhmYjBkZmNkMSwgMHhhZjliNzFmYywgMHg2Y2UzMGYyMywKKwkweDNhYzNmZDY4LCAweGI3NjdiOWFkLCAweGYxZWZkODYzLCAweGI0NzViM2IxLCAweDJmYjE2NTE3LCAweDg0NmY4NTY5LAorCTB4MTkxZmZkY2EsIDB4NWUzMTI3ZjcsIDB4M2M4OTlhMzcsIDB4ZDEwZmVlNmQsIDB4YWQwYzFkOTYsIDB4OGY2NDk1NjgsCisJMHg2ZTBhZGEyYSwgMHg2ZWJlMmIyNywgMHhmMWU1ZTAzZiwgMHgyOGZiZTcyYiwgMHgzODRkODc4NywgMHhmNjdhYzAxNiwKKwkweDQzOGEzZTBkLCAweDU2YzJmYzViLCAweGIwMjVmOTg5LCAweDZmMmI5NTUzLCAweDhhN2U4YzNjLCAweGUyMmRhYzdkLAorCTB4N2RmMmE2MjgsIDB4Zjg4YTU3MmMsIDB4NGQ1NzVkYTIsIDB4NjQ1NjhiZmUsIDB4ZTZiY2JiYWUsIDB4ZTdmNDQzYmEsCisJMHg2NzdlMWM2NCwgMHg5YzYxMGIyNiwgMHg4MGUyYmU1OSwgMHhmMjY1Zjk4ZSwgMHg1MDQ5ODU3OCwgMHgyMDhlYjE3NywKKwkweDRjOGUwOWZhLCAweGM0N2ZmN2YzLCAweGI4OThkMzY0LCAweDExZWJkYTJjLCAweGJlN2ZkN2IwLCAweDA3YzUwMzc1LAorCTB4ZmVmOGJkNGUsIDB4Y2Q2ZmQ4Y2QsIDB4MDRlNjY0Y2YsIDB4NzU2ZWY0YmMsIDB4OGRmMjA4YjMsIDB4ZmZkMTUyMTIsCisJMHhmZDk0ZWVhOCwgMHg1MjNjOGYzYywgMHgzZWNjNmI3MiwgMHhkNjI3NjFhMCwgMHg3MDRkZDhmYywgMHg4NDcwZWY1NSwKKwkweGQ1ZjdjMjY2LCAweDRjNWY3ZWJiLCAweDdlZjJmNmViLCAweDJmODM2M2IyLCAweDNkNGYzYzRhLCAweDdkYzYyZDE4LAorCTB4MGU3MTZhYmUsIDB4ZjFhNzRhYzAsIDB4Zjc3ZjhmMmEsIDB4ODM5ZTRlZWMsIDB4ODViNGJhZmUsIDB4ODc1NjQ5ZTcsCisJMHg2MjNiYjRlZiwgMHhhYWM2NGJmMiwgMHhmMTFkYTM3NiwgMHgxMjg3ZjA1MSwgMHg3YzIwYTllNSwgMHg4Njc5ZjliMSwKKwkweDQzZjNkYTlkLCAweDY1ZDdjMzg5LCAweDY1YmU2MTBmLCAweGJkZWQ5NmY1LCAweDNlYTg3NzE4LCAweGQ5YTFmMGU2LAorCTB4NTNlNWIwZDcsIDB4ZmQ0ZjZiOGEsIDB4OTQ0ZjM2ZjEsIDB4ZTRkOTJjZmMsIDB4ZjdmMTBlNzcsIDB4ZDc0NGM4YjYsCisJMHhiMjNhY2VmYSwgMHhmNDRlYTE1YiwgMHg4ZmM3MGZhZCwgMHgyZmM4NWM3YiwgMHhkZWYxZjlhOSwgMHg2MTQwNDE1ZCwKKwkweDdiMzY0ZmNkLCAweGIyNzFhZTMwLCAweGZjODc5MzdiLCAweDhmZTcyZGJlLCAweGVmZjEwY2I3LCAweGQ3OWQ4ZmMyLAorCTB4N2Y4OTNiYmYsIDB4Yjc3NGZkODAsIDB4Yjc4ZmYxNmEsIDB4MTVmYjI3MGMsIDB4Yjc4OTJiZTAsIDB4NGRmMDY1ZGYsCisJMHg1ZWNmYjZjZCwgMHhjZjYzZjhjMCwgMHg0MDVlNGY4ZSwgMHhmYWZmNmI3OCwgMHhmZWQwMTdjNywgMHgzYTVjZmI2NCwKKwkweGJjMzQ0M2VlLCAweGJmMTRhZmY4LCAweDJhNWJiZTMxLCAweDg3ZjdhZWU0LCAweGQ1ZWUyOTliLCAweGY2MzU3ZTBiLAorCTB4YzNmN2JiZDYsIDB4N2EzZmY0MWMsIDB4MDMyNWZmYjcsIDB4N2JhNWU0ZmQsIDB4ZjljMDhmYTcsIDB4NzUzOWRkMmUsCisJMHhiZjIzOGIwNCwgMHgxYjdjODk0NiwgMHg5YmI4ODhiYSwgMHgzYjA3NWU5NSwgMHg3YzlkOTIwZiwgMHg3ZThkZTgwYSwKKwkweDFlYmY4MGNhLCAweDBmZjFlM2FlLCAweGI3ZDNmMGFmLCAweDBlNmY4ZmM2LCAweDZmM2JjYmYxLCAweDkzNmJlNWJkLAorCTB4NTBmYmI0YjAsIDB4M2ZkMDVjMGQsIDB4NzhlODEzN2YsIDB4NmZkMDQ1ZjUsIDB4NWZjMjYzZWIsIDB4NTNiZjRmODksCisJMHhlOWQwMDdmOCwgMHg1N2YwYWFiYiwgMHhlYjNlZmQwNCwgMHhlN2ZkZjg1YywgMHhmMGU3NWRmMCwgMHhlNDc5ZmU4NCwKKwkweGM0NjZmMDIyLCAweGZkNTdlZjRmLCAweDM3MjhhYmNmLCAweGYxNDQ3ZTNiLCAweDRjZGJhNDEwLCAweGI2ZWY2ODk4LAorCTB4ZWUzMDcyY2YsIDB4ZmZiZDkxZmMsIDB4ZWY1NzllM2UsIDB4YWQxZmQxZDAsIDB4YzkxNmZiZGUsIDB4YTNjZWVmNGYsCisJMHgyMjY0OWYxNCwgMHgwNmNiZDk4ZSwgMHg5M2I4ZjFmZSwgMHhkODZiODVjOCwgMHhiZDdlZTZlOCwgMHhmZGZhM2ZjMCwKKwkweDE3M2QwZjVlLCAweDYzZTczZGZlLCAweGU0NGZlZmMzLCAweGYyYTliZmVmLCAweGFlMjMwMjNjLCAweDFkZjFiNzViLAorCTB4ZDIwZjNmZTEsIDB4NzQ4MjlhNGIsIDB4NzFiY2ZmN2EsIDB4M2EwZjAzNjgsIDB4NmM3MjYxZTIsIDB4NWM3ZTJhZmMsCisJMHgyOWNlMjA2NSwgMHhhZGM0NjVlOCwgMHg1MDUzZTIwNiwgMHg0NTc4YzZjZiwgMHhjNThiN2E0OCwgMHhlYmJkMDdkMSwKKwkweGQ3YWJkYzc4LCAweDE5OWZjZTZlLCAweDY3OGYwZmE0LCAweGE3MmFkYWZkLCAweDYzOGI4YmExLCAweDJmZmUwODVkLAorCTB4ZWE4ODlmOGIsIDB4MGM3M2M1MzUsIDB4OGQ5Y2Y1M2MsIDB4YWI0ZmM3YWYsIDB4MzdmYTllM2MsIDB4OTAyYzg3ZWYsCisJMHg5ZjIxZmJhYywgMHg3NWQ2M2YyMiwgMHhmM2YyYWZiZSwgMHhjYmJjZmMwNCwgMHhjOGI3YmVjMCwgMHg1MTc5ZWJmNywKKwkweDhhYzg3OGE2LCAweGUzZDI0MWYwLCAweGVjNjE3ZDU2LCAweDU1ZTE1OTk3LCAweGQ1NGY1YzFjLCAweGEyNzVmMTc3LAorCTB4YTQzYjg3NjcsIDB4MDczZDNmNDEsIDB4ZDczZjEzNzYsIDB4NDU1ZjdkNmYsIDB4OTZkMGYzM2YsIDB4OWVkY2E4OWYsCisJMHhlYjgzZjJlMiwgMHhmZTA2Mjg0NCwgMHgxN2Y2OTc5ZSwgMHhjZjFkNzhmMywgMHgzMzhlYjYzZiwgMHhkMmYxYzFjYywKKwkweDM4ZmUyN2IwLCAweDM1M2Y1YjBkLCAweDBjMTM1MzhkLCAweGYzN2YzY2FiLCAweDU0OWRlM2ZjLCAweDdmNjI3N2ZjLAorCTB4MGNlZGJiMjcsIDB4ODY0ZWYzZjMsIDB4ZjZmMTE5ZTUsIDB4ZWIxMzNmNjcsIDB4MDM1ZTcxYTYsIDB4YjNjYTRiZDcsCisJMHgzM2NmY2EzZSwgMHg4OTIzN2E0YywgMHgxZTk3OThmMiwgMHg5ZTBlZjE5ZCwgMHhlMjBhNWI4YiwgMHg2NzYwZjY4YywKKwkweGNlZDNlNzMzLCAweDQyOGZmMDdmLCAweGJkMWU3NzdhLCAweDZhNzVjNjViLCAweGM2MzdlMjE3LCAweGIzNzkyYzJlLAorCTB4ZjQxYmFhNzEsIDB4MTViYmM5NDIsIDB4YWQ1ZDkwOTMsIDB4MzFmMjY2ZmEsIDB4MTg3ZTA5OWIsIDB4MDNhZTA0NjcsCisJMHg5ZTBmZDBhZCwgMHgyN2ZjYzAyZiwgMHg5NGY2NDc4NCwgMHg2NDc4NDBjZiwgMHhlMmJiYTZkZCwgMHhiNWRhOTVlNCwKKwkweDM2ZjNjYTBhLCAweGU2ZWJiNWZhLCAweDc2NzY2ZTNjLCAweGU5ZmIxN2EyLCAweDBiYzhjMmJkLCAweDNjNDE0OGFhLAorCTB4M2I3ZGQ2N2QsIDB4MjkxNTlkMmYsIDB4OTlkNjc5ZmEsIDB4ZWNiZTg0OGYsIDB4ZWYwMWYyNjksIDB4NTgxNjczZjMsCisJMHhiZGY5MTA2ZiwgMHhkMjBlN2I1NSwgMHhiMGFhYTJiOSwgMHhhZjgwYmNjNCwgMHhlNDgzYWNjNSwgMHhhYTQ3NjZlNiwKKwkweGRiMzM1YmM4LCAweGZlN2JkNTBmLCAweDc3NTdkYTg1LCAweDJjMzVmNmYyLCAweDNjZjFlZDRjLCAweDFmMjRjNDQ2LAorCTB4MDc3NjJkMTMsIDB4OTEzZWVmZTcsIDB4YTY3YjUxZDcsIDB4ZjY2MjQ1ODQsIDB4N2MxM2VmNzEsIDB4OWJhNGQzZGIsCisJMHhjMjJkN2JmNCwgMHhhOTM5ZTFhNywgMHgyZWE3MWE2ZSwgMHg4ZTM0ZGMzYywgMHhjY2VlYWVkMSwgMHg5MzEyMmM3NSwKKwkweDc0YTc1NDdmLCAweDlkZDViZjEzLCAweDY3MWEzYmY5LCAweDMyOWFiZTQwLCAweGZiODkwZjA5LCAweDdiODI2NTFmLAorCTB4MjYyOWZmYjAsIDB4YmZmYjA3NzgsIDB4ZTZiNWM2ODEsIDB4ZTZjZTY2NzcsIDB4NWJhY2MyNzEsIDB4Y2UzNDE5NzksCisJMHg4NTI2NTRiZCwgMHhiNzZmMDA1YSwgMHgwZTI1ODE2YiwgMHg1ZWU5OWY2OCwgMHhjMzJhZmI5ZCwgMHgyODUzNTZmMywKKwkweDg3NjFmYTNmLCAweDhjZGU1MGE0LCAweDRhNzU5ZjM4LCAweDU4MzY4MmQ3LCAweGQ2ZDM5ZjZmLCAweGEzMDM3NTNmLAorCTB4NzA3ZjgxM2MsIDB4Mjc5MzEzNWMsIDB4M2U3NDIyYzAsIDB4ZTQzNzY4ZDMsIDB4MjA4ZjI1YmQsIDB4MTUwMTNmMWIsCisJMHhmMmY4MGIyOCwgMHg2OGMxMWU0NSwgMHhiNGYzYTUxNiwgMHgzY2ZjZGQ2YiwgMHhjZDJkMThlMCwgMHgxMDZmZGY4NiwKKwkweGRlNzFiZTc2LCAweDQwZjljODZmLCAweDBiYzBiOWNiLCAweDliNGMwNzlkLCAweDE4ZTBmYTVhLCAweDM5NmY2MzFmLAorCTB4Nzk4YTlkM2UsIDB4OTY3NzY5ZTIsIDB4ODNhNTFmNmUsIDB4YTY1MmMxZGYsIDB4ZTk3MzdkNTEsIDB4OTdhODJjZjgsCisJMHhmNWUxNmZiNSwgMHhjZjhlOTc1ZiwgMHhhYjk1N2E4MSwgMHgyNDZiZDc5MywgMHhiMzVmYWJjYSwgMHg2MGI0YzE3MiwKKwkweGU1ZTgyNWQxLCAweDI1MjMwMGRiLCAweDExYmNiZDI2LCAweGUyYWE3MWU5LCAweDdhMTYzYmRkLCAweDVmYTE0ZjMxLAorCTB4MTU2NWY4ZTUsIDB4MTRmNDZlZDgsIDB4ZWQ2Y2I3OGUsIDB4YTc4OGVkZGQsIDB4MzM2OGI2MzEsIDB4ZWZlZjkzZWEsCisJMHhlYTJhNzNmZCwgMHgwOWQzMmY3MSwgMHhkNTZiM2EzZiwgMHg2OGYwN2U5MSwgMHhlNGYzYjljYSwgMHhjMmYzNTljMywKKwkweGE1ZDlmZTBjLCAweDFjMjI3NjA1LCAweGQyYzdmMzZkLCAweGFhZTdiYzM5LCAweDFmZDEzODI2LCAweDZjZjIyMzVjLAorCTB4MGZjODFkOWUsIDB4N2VmMWU3ZTQsIDB4NzVmYmUwZWUsIDB4ZWIwZjIyOTksIDB4MjliOWEzZjQsIDB4MGZhM2NlYzMsCisJMHg1ZGJiMzIxYSwgMHg3ZDVjMGM0YSwgMHhiM2VkM2Y0YSwgMHhmZjdkOWRmNywgMHhjNDliY2MzZSwgMHg3NTljNmE3YSwKKwkweDM3ZmJmMDY1LCAweDkzYzkwYTVkLCAweGU5ODFmZjM5LCAweDBiNWZjNDY5LCAweGRlMjE3ZjA0LCAweGY4NzkzMTljLAorCTB4Y2FhMGU0OGIsIDB4ODg3NGMzY2YsIDB4OGU5YTZlZjUsIDB4YjU4Mjk3ZjMsIDB4YmVhYmI5ZjIsIDB4NjgxNjllM2MsCisJMHhjZjkwZjc4MSwgMHhiYzg4NzFkZiwgMHgzNGJlNzExYiwgMHg3YmUzM2NlNiwgMHg3OWViNDc4OCwgMHg4YThlOGRjNiwKKwkweDU1OTc3ZTI4LCAweGU1MDcyNjc5LCAweGEyN2NlMDZkLCAweGY0ODU5MWQ0LCAweDY0Nzc5ZWIzLCAweDllMmRiZjRhLAorCTB4OWM1ZWIxMWYsIDB4ZjcwNDRjNzcsIDB4M2U4MTlkOGYsIDB4OWZlZjNmMWMsIDB4ODMwZTNiYmQsIDB4NDBiZDVmZGMsCisJMHhlN2NhNjFmNSwgMHhhNTI2Y2JkNSwgMHgyMTVjZmMyYiwgMHg4MjBkMDVkOSwgMHg1YzZkMzJhZiwgMHgxODg3YjAzZiwKKwkweDM5ZjZkM2VkLCAweGViZmEzZjI0LCAweGM5ZDRkZjdkLCAweDMwNWVjODBlLCAweGJlZTZmYzkzLCAweGU2MzBkY2U0LAorCTB4YzIzZGY1MTMsIDB4ZmQ4Mjk3Y2YsIDB4OGY3Y2ExMjAsIDB4NzExMjkzZGUsIDB4M2YzZTQ4NzksIDB4ZTdlN2M4YjcsCisJMHgzY2M5N2I2NiwgMHg2ZjM5ZGY2ZSwgMHhkM2ZhOTQ1NywgMHhjODYwN2Y0NSwgMHgwZjllMGM2NywgMHhmYWY5OTNlZSwKKwkweDI1ZTRkN2RlLCAweGUwYjM0NjM4LCAweDJmMTNiNDdlLCAweGQzOGYzYzc2LCAweGYwMTdmZTdjLCAweGYwNjMzYmFmLAorCTB4ODExYzc0MGYsIDB4NDI2NzM0ZjUsIDB4YzY3MDhlM2EsIDB4MWNmNWEzYTEsIDB4MjA0NzExZWEsIDB4NTg3ZGRiMWIsCisJMHg4NjA1Njg3OSwgMHg0ZmU3YWM1ZSwgMHg0MmNjMTI5OSwgMHhkYmU5NTkzYywgMHg2YjNjNzRhMCwgMHhlYzY2Mjk4NywKKwkweDE2ZWM5NGY5LCAweDJmNTc3ZTgzLCAweGMzMmJhNWYzLCAweDhiMWNmNDRkLCAweGU3YmQ1ZTcwLCAweDZkYzIxYjUzLAorCTB4NTI3YmYxZDAsIDB4ODI3N2JiN2MsIDB4ZDY2N2FmOTMsIDB4NDRlNjMyZjEsIDB4ZWQzODgxNmQsIDB4NTA5NTk3OGIsCisJMHg0OTlmODA3ZiwgMHg4ZjVjZmMxNiwgMHgxNGUyOWFmMywgMHhmYzUwYzJlYiwgMHgyZmVkOGY1YywgMHg4YmZlM2YwMiwKKwkweGM3ZTE4ZmMxLCAweGFlMzkwOGQ1LCAweGEwMjc3ZGMxLCAweGIzYmMxZmYzLCAweGRjNjBmMjMzLCAweDNlMjM1OTcyLAorCTB4YTY0OWJjNWQsIDB4OWZiNDJkYjgsIDB4MjgzMTk1OTksIDB4NmRhZjhiZjcsIDB4N2UwNzZmZGMsIDB4NDRiY2ZjNTksCisJMHg5YzQwYjRmYywgMHg5YzQ0ZmYyZiwgMHhlZmU2YjEzZiwgMHg5MjA5Y2U1NSwgMHgxZTcwYmQ5ZSwgMHg0NmY0ODg1ZiwKKwkweGYzZjMxNmNkLCAweDdmYzI5ZGJiLCAweGNhMWNiMzc0LCAweDQ3ZjcxNWNiLCAweGFkN2Y4MmM4LCAweDA5YWQzZmY4LAorCTB4NmE5MDVlYjksIDB4YzdhNTY3NmEsIDB4Mjk5YjQ2ZTgsIDB4ZWE2YjNjMGYsIDB4ZDdlNDNmNDAsIDB4NmZiY2RhNjcsCisJMHgxN2VkZmM1MSwgMHgyMGYxODY3NiwgMHgyOTM2OTJiZiwgMHgyNDk4Zjg4MiwgMHg0YjdlYzM0ZCwgMHhmZDE5N2M4NSwKKwkweGI2NjY1OThkLCAweGU2ODM3MmViLCAweGVkZjk3OWYzLCAweDk3NzlmM2U2LCAweGI1MzQ4Yzc1LCAweDllNGQ3Y2JmLAorCTB4YTExNWZkZTksIDB4YWZlZjRkMmIsIDB4NTRjMTMyZGEsIDB4Y2ViZTE3MWYsIDB4YWVlYWZlZDQsIDB4N2M3ZDUzMzIsCisJMHhmYjUzNDZlNCwgMHg5YjY3ODc4OSwgMHhkZjc0ZDdlYSwgMHhmOTNmNmE2ZCwgMHhmYmQzN2NkOCwgMHhhNmQ1YTM2YiwKKwkweGI0N2ZkN2Y3LCAweDVhZmY1NGM0LCAweGI1MzFmZmZmLCAweGZhZTQyYzhmLCAweDY2NTM0MGViLCAweDdjOThmMWY2LAorCTB4YWEwZjAzZTMsIDB4M2Y5ZjFkMzYsIDB4OGJkMzY4NTgsIDB4Zjg2NzlmNjMsIDB4OTY1OGM1YmQsIDB4NGU5ZmQxZjgsCisJMHgzYWE3NjdhNCwgMHhkNzYzYjJiMywgMHgzNzY2NTJmNywgMHg0ZWE5OWZlOSwgMHhmMDY0M2Q3MywgMHgwYmYwMGU0YiwKKwkweDQ1OTM3ZjEwLCAweDZkYmM4MGVmLCAweGQ1MTkzOTQxLCAweDk4M2I0Mzc4LCAweGUyZTQ2Y2ExLCAweGE3OTQxNDgyLAorCTB4YzVmOWYxYTcsIDB4OTIzNmQ5YzksIDB4OWQwOGZhYjMsIDB4MGU3MzhmOGIsIDB4MTczNTZkZmUsIDB4Zjc0ODJlZjksCisJMHgyZTE5ODBhMSwgMHhhMzMxMDBjYSwgMHg5NjA2ZTYwYywgMHgyOTA2MGIwYSwgMHgyOGY5OWNkOSwgMHhlZWJhZDJlZiwKKwkweDE1YmRlYjFiLCAweGRjOWMwNzFmLCAweDYxNzg3MDFlLCAweGRmZDkzNzlkLCAweDY0NWZlZTIxLCAweDMxMjk3MzFlLAorCTB4YThmNTkwZjgsIDB4MWVmMGVlYTksIDB4ZDc3ZmUyZDYsIDB4ZWIyZTdhNmQsIDB4Njk3NTRjYzcsIDB4ZmZjYTRjZDEsCisJMHgzZDk3MDQ0OSwgMHgxYjRkZmU3MywgMHhiM2Q5YmY0MSwgMHhjZjFhNTQwMiwgMHhlMmQ4ZTZkYiwgMHg5ZDQ1ZjdlNiwKKwkweDlkZTc5NzE3LCAweGYxMGJiZWQwLCAweGZiMThhNWZjLCAweDM5NzQ4YTJlLCAweDMzYzZmNjk1LCAweDNmNTZhZjk4LAorCTB4ZWZmYzlmYjcsIDB4M2Y1OTg3MmMsIDB4MjM3ZGQ2MGMsIDB4OTc5NjNlNzgsIDB4ZjlkNDI3OWYsIDB4ZGE5YjZiOWYsCisJMHhkZjc1YzI2ZiwgMHhiN2MyZTc5OCwgMHg3ZTYwNjc2NywgMHg3ZjAyNzY0MiwgMHhlN2M1YzczYywgMHhkNTUzNDJmMSwKKwkweDhjZjAwYjRkLCAweDI1ODlkYTA5LCAweDczYjJlNzgzLCAweDY4ZTUwZDIyLCAweGY5MTE4ZDdmLCAweGUyZDhjZmQ0LAorCTB4NzU5ZDNkZTcsIDB4MDQ3YjdmNzIsIDB4MTNiNDY4MmEsIDB4Y2IzZjdlMzQsIDB4M2Q3N2NhYTksIDB4MjQ1NWIyOTgsCisJMHg3ZjIyY2UwNywgMHhiYmJhYmZjZSwgMHhmNjVmOWY4NCwgMHg3YzNjZjI2NSwgMHhmNDM3ZTA5ZCwgMHhmMTU2OGU1YywKKwkweDFjYWRlYTBjLCAweGI5YmNkNzMwLCAweDMxMTllMTQzLCAweDJlNDY2MmI3LCAweDY2MWQ2ZmJjLCAweGVmNTQ2OWYzLAorCTB4ZjA1Y2U4OTcsIDB4ODcwZDhjYTMsIDB4OTU3ZmFkZjYsIDB4MDNkNmJlMDksIDB4OTA1ZTUyZDcsIDB4ZGExODA1YWEsCisJMHg5OTNjYzZlMSwgMHhmNjMwMzdjOCwgMHhiYjRiM2UxMSwgMHhkNmQ0ZmM4ZCwgMHgwNWNlMDcyYiwgMHhiNTViZjIzMSwKKwkweGY3ZWM2ZThhLCAweDA4NThiYzMzLCAweDkzMmQ2OWM2LCAweGI0NzNlZjRjLCAweDAxMGYwNzhlLCAweGM5OWQ5NTFjLAorCTB4ZDY1NDk3MTQsIDB4OTY3ZTRjZGMsIDB4NjllMWM5OWEsIDB4ZDk2MjQxN2QsIDB4ZTNjM2MxMTIsIDB4MGY4ZTFlZTYsCisJMHg0MmVhODNjMCwgMHgzZjczZmIzYSwgMHg4NjkzMTliNywgMHgyYTI5NzVmNywgMHg5ZDFjZWI5ZCwgMHg4ZDcxOWUyMCwKKwkweDViN2ViZjAxLCAweDk3MDlkOTA2LCAweDU3OTVlMTliLCAweDIxZTBmZDNmLCAweDg5ZDkwM2NjLCAweGZkZTExNjM3LAorCTB4M2QwNGNiMjIsIDB4NGI2ZGYzY2QsIDB4NWRjYjdkOWIsIDB4NGRlNWFlZDAsIDB4YjgwMGM5OTksIDB4MzBkOGNhMzcsCisJMHgwYTFjODc5YSwgMHg0MWI3YzFjNSwgMHgxYWZiODAyZiwgMHg1MzVlNWI4NCwgMHgxNWNjZjM0ZSwgMHg3NDA0NWU3NCwKKwkweGQzMjU3NWM2LCAweGU4ODMzMTU2LCAweDM4NjM2MTllLCAweDM3ZmMyYjRmLCAweDdmZGNiOGI4LCAweDc5MGJhNWNkLAorCTB4ZTM2OWJjYWQsIDB4OTAxNzJjNzAsIDB4OWI1ZTgxYmMsIDB4YmE5N2ZkODYsIDB4ZDMxMWRhMTIsIDB4ZGJmNDcxNWMsCisJMHhhOGZmZWU4NSwgMHgwODdkZDM5ZCwgMHgxMzZmZDk0YiwgMHg2MTYzNmQ3NiwgMHhmYTBjYmRhYywgMHhkN2VjMTZmMCwKKwkweDhmMjljYmE4LCAweDE3YmY2MzE2LCAweDE0MWJiYmIyLCAweGVlNjE3YjVmLCAweGI0MzJlZDg1LCAweDBjZmY5MGM3LAorCTB4MzllNjBjN2IsIDB4Y2ZiYmM3MGYsIDB4MzFlYmQ2NjUsIDB4ZWI5ZTdjN2EsIDB4NGFjOWVjZTIsIDB4ZGRlMWY3NmMsCisJMHgxMmY2Yjg5MSwgMHgxYmIyNzFlOCwgMHhmYWY4ZDVkMywgMHgxZTgyZmJlZSwgMHgyOGNhYmEwZCwgMHgzZWMxMzAyZiwKKwkweDVjNWQ3N2QxLCAweDRmZjNhZGFlLCAweGM4NWRkZWI0LCAweDYxMWJjOGVmLCAweDE0ZWMwN2VlLCAweGE1NTgzZmYyLAorCTB4YTc1NmZiNGEsIDB4NThmNzVkMWYsIDB4NjhmYmU2MjEsIDB4OWJjNzk0NzksIDB4Y2I1MTlmYTgsIDB4MGYzZjIwZGUsCisJMHhlMjA0ZjlmMCwgMHhiYjVmYzBjMSwgMHhjNjllN2Y4NSwgMHhjNWQ2ZjFmNywgMHhjZGE3YzA1YSwgMHhkNzBlY2Y4NCwKKwkweDdmOWZkODQ1LCAweGYzMjhiOWZiLCAweDgxNWU5ZTc5LCAweDBmZmJkMDc3LCAweGY1YjgzZTkyLCAweGIzOGMxMmJkLAorCTB4MzlmZWRmZDQsIDB4NzliZmZkZTksIDB4YjhlNjM5OWMsIDB4ODAyZjExODEsIDB4OWM3MTZhNzEsIDB4MmFmZjViZGUsCisJMHg4YTUxYmFlMiwgMHhiY2VjYjY0NywgMHhhYjA3ZWU5YywgMHg0OWY0MzMyYiwgMHg0NWNlOTNhMywgMHg3ZDExZTc2NiwKKwkweGY4NzJlZDRlLCAweGMzNTNjZTExLCAweGQ0ZWM1Yzc4LCAweDMwODdjOWFlLCAweGQzNDlmMzJlLCAweDczZDhiY2UxLAorCTB4M2E1ZWE3NTksIDB4ZmU4NzYyNWEsIDB4NWEzOGVkNGUsIDB4MGY1ZTkwYTIsIDB4Zjc4Y2RlMTEsIDB4YTVmZWU3NzUsCisJMHhlMzc3ZmQwNCwgMHhkZjAwYzFmYywgMHg0YmFmZTMzOSwgMHhmOWZjMTZiZiwgMHhmMTgwZjE2NSwgMHg1MjVmZGE3OCwKKwkweGNmNjhiM2Q4LCAweGQ2YTVlMDBkLCAweDJhN2ZmNzljLCAweGM0MTJiZGY5LCAweDEzZmZlNjAzLCAweDQ2M2MwNDVlLAorCTB4OGJiNTdiYmMsIDB4YTQ1YTlmYzcsIDB4YzZlMzEwNjAsIDB4NTRmNzUyMmQsIDB4ZmYwNmQzOGMsIDB4NDA3M2EzMTcsCisJMHg5MjU2Yjc5OSwgMHhjYzNkZmU5OSwgMHhkNjFhYmMwMywgMHhiN2RiMGNhMSwgMHgzZTY2N2RiMSwgMHg3NTBiOWIxYiwKKwkweDExMWQyYmM3LCAweDFkZDQ5ZjdjLCAweGVkNDJiY2E2LCAweDRiMDQ3NzU4LCAweDhmZGZiNDRmLCAweDQ3ZmE4NmRiLAorCTB4NmYyYzdlZmEsIDB4ODZmZjAyZDcsIDB4MGZlYjBmZTMsIDB4ZmRmMjgxNWUsIDB4MzMxMzA1OGYsIDB4NGNhMTI2MzEsCisJMHg2MmY2MWRmNSwgMHg4NTJjZTIxZSwgMHg3ZDNhNmRlZSwgMHgyMjc1YTY1OCwgMHgzZDczOTY2MywgMHhhOGNlZmYzZiwKKwkweDVlZWRjY2ZlLCAweDkzOTIzNzVhLCAweDgxZTlmMzhjLCAweDE1NTc1YzVjLCAweGY2MTFmYTU2LCAweGY4MTVkNWJiLAorCTB4YzMzZmY5MDQsIDB4MDg3ODVkZDYsIDB4ZmIxZDczYmUsIDB4NzllNjBlNmQsIDB4ZWRhMmY3MWIsIDB4OGZkOGFkMmEsCisJMHhiYmZkYzZmYiwgMHgzNjdhZWYyNSwgMHg5YzlmNmUzNCwgMHgyOGRmZTVjNCwgMHhiZTM1MjdiZiwgMHhjOTYxZjk4ZCwKKwkweDYzYTdkYjhmLCAweGFlN2JlYmJjLCAweDA1NDdiYTQ2LCAweDk5OWRmOWZlLCAweDcwMmI5ZmQwLCAweDcxODU0YjBmLAorCTB4YzY2ZGE5MjQsIDB4ODc2ZWEwZDcsIDB4N2JmMWUzZjcsIDB4ZDAyYjViNWIsIDB4NjA2YTU3NjEsIDB4YmJkZTBkOTQsCisJMHg4N2FkNzNhNSwgMHg4ZGZjM2RmMSwgMHg0OWM5NjVmOSwgMHg5ZWYxNWFlNywgMHhlNzQ5MzUzOCwgMHhiOTAyZDBmMywKKwkweGJhODE4NzQ4LCAweDRjNzc3NTBlLCAweDJiYTk2OWRkLCAweGFiY2M2ZWJjLCAweDI4NWZlMGVlLCAweDBmN2ViM2VmLAorCTB4ZWYwN2Q3YmYsIDB4MzM3ZGMzMzMsIDB4ZTUwY2I3YmMsIDB4ZTg0OTM1M2YsIDB4YjE2OThkMDksIDB4ZGFjZWExZTcsCisJMHgzYzQ5ZTkwMiwgMHhlNWM4NTkzZSwgMHgyNjVmODhjNCwgMHg5N2UyMmY3OCwgMHhlMjkxYWM4NSwgMHg2MGYxMjM2YiwKKwkweDViZGEzZTc1LCAweGIwZTY1NGRkLCAweGY4OGQyYTdlLCAweDUxZjMxZTViLCAweGE4MmFjMDU5LCAweGE4M2FjYjFjLAorCTB4YTk4NTkyYmMsIDB4NTRkZDYyMmMsIDB4MmE3ZWIzMTYsIDB4YjE5NzRjN2QsIDB4NTQ3Y2MwOWMsIDB4OGYxYWQ5YTYsCisJMHhmOTdkNDc0ZSwgMHhjYmU5M2IwYiwgMHgxZTBmMmRjMiwgMHgwNTA4YzkxOCwgMHg2YWE1YmEyNiwgMHg2OTg2N2U1YywKKwkweDI4NjRhMWE1LCAweDgwMzg4YjU3LCAweDE2YTlhZTcxLCAweDM1NDVlNjY5LCAweGQwN2Q5MGEwLCAweDkzZWE2NDIzLAorCTB4ZWUyMGI2MzUsIDB4MmFiOWIyOWYsIDB4ZTcxNWFmM2QsIDB4M2VkZjZiODAsIDB4MjdlNDc2NDAsIDB4YWE3OWY4ZmUsCisJMHg0Yjk0OTM1MywgMHhlYjMyODdkYywgMHgxYWI1ODZjNywgMHg3M2U0MWJlMSwgMHgxZWJiZTIyYSwgMHhjZGJhODJlMSwKKwkweDFlZTc0ZGQ5LCAweGRmYzNjYmVkLCAweDc0NWY3MTk2LCAweDQ1ZjY5ZDliLCAweGEwMjY1MDZiLCAweDBjMmVlMzVlLAorCTB4YTc5ODRiMzUsIDB4OWY2YTUxNWIsIDB4ZjI0ZDdjNDQsIDB4Y2UxYTkzNTMsIDB4OWUwZGEwOTgsIDB4NzhmYWM0MDcsCisJMHhlYmRmOTA2ZCwgMHhjMWNhOWViYiwgMHhmNzhmZjY3ZCwgMHhmOWViNGRiZiwgMHgzNGI5YzlmNSwgMHhhM2NlYmE5ZiwKKwkweGZiNGRjMDZhLCAweGNkY2EyYTc2LCAweGY2MDNlOWM3LCAweDZkOGRkOTM3LCAweDllMGE1ZjJlLCAweDI1ZmZlOTNiLAorCTB4YzBjYThmYmYsIDB4N2U5NWY3ZGYsIDB4YzdiZWVjNTcsIDB4NzQ1MDI2ZTEsIDB4MzdhZjYzMmEsIDB4YWJmOTUyNjUsCisJMHhiZjk1MmYyNiwgMHgxZjk5ZDI2OCwgMHhmNjIzYjkxYywgMHhlMTExMzZhOCwgMHgxMWQwMmY0ZCwgMHhmMGY0NGZkZSwKKwkweDYxMjY2M2ViLCAweDE3OWU3YjFlLCAweDc2OTJkM2U3LCAweGQ0NDRkNTdjLCAweDc3ZDkzZTNmLCAweDc3NjM4YzE5LAorCTB4Zjc4NDlmMmYsIDB4Y2U2NGI2MjcsIDB4OTU5NDdjYTYsIDB4MWZlNzA0ZGEsIDB4YzUxNjllMDAsIDB4NzE4NzRjZTcsCisJMHg2ODc2ZDM1ZiwgMHhkMzc5NDE5NywgMHhiODlkOTMxNywgMHhkNjk2YmZhZSwgMHhkZjcxNzlhOSwgMHgzYWVkZmM2NCwKKwkweDdmNDEwM2VlLCAweGZlYTU2ZmFiLCAweDA5YmZhMmVjLCAweDE4ZmY2YzRlLCAweGY2MGRhM2Y2LCAweDZmZDQ1ZmIzLAorCTB4YzM0OGVmNzIsIDB4MTg5YTg3ZjcsIDB4N2E1MzdkYzEsIDB4ZjdmNjFhNjcsIDB4YWY4NWEyZjMsIDB4ZGY4NDk4NGYsCisJMHhiYmRlZTJkYiwgMHgzNDk5ZDM3NCwgMHg2N2JiMDdlNiwgMHhlNjFjOTllNiwgMHg3MzdhZjU4NywgMHgyODk1ZTM1OSwKKwkweDlhNGRkZmZmLCAweGY5MDRlNmQ2LCAweGFiMWI3MjU3LCAweDRkYWM1ZjUxLCAweDA5Y2RiOWJhLCAweDM2NTNlZmM2LAorCTB4ZjU0ZTkzYTAsIDB4MDAxNWRhZTksIDB4MWZhZTM0YzcsIDB4YmMzNmYyMDAsIDB4NjU5ZWQwNmYsIDB4ZmMzYWY4YTMsCisJMHg4ZTVlZWJhMywgMHg4ZWI4ZmVhMCwgMHgyZDk2OWZiZiwgMHhmZGEwMTBmMiwgMHg5ZjlmYzdjYywgMHhhZDU3NzY4ZSwKKwkweGU5NjJmOWM0LCAweGQzZWU4Y2VkLCAweDU0NGY2NDQ4LCAweGYzYTI0OTlkLCAweDdhZmQ0Njc5LCAweGYzMTEwNGJhLAorCTB4OGZiNDgzZDgsIDB4NDNjNjc1NTIsIDB4YmUyZWZhZTcsIDB4MWNlOWE3M2YsIDB4MzRmZWQwZTAsIDB4OTVmMGVmMWEsCisJMHgyOWY5M2YwNiwgMHhiYjc0YjM2ZSwgMHhmOTcwY2ZjOCwgMHhlZmJiNjA0NywgMHg4M2Y5OGRkOSwgMHg3YzQ0ZWRiZCwKKwkweDBhODNkNDBkLCAweGFhMjNkYmU4LCAweDZkZjlmZjMxLCAweDZlN2Y0MGQzLCAweGIzZGYwNzU2LCAweDY1OGY5ODI5LAorCTB4ZjQ3ZTY3YmMsIDB4ODkyNDhmODcsIDB4N2UzYWIwN2EsIDB4ZmI0YjI0ZmIsIDB4NGRmZWEzM2MsIDB4ZTc4NTZmNmEsCisJMHhiYWMxYWU3YiwgMHg1ZjJiZGExMywgMHgwOGVhMDYzOCwgMHg0YjM2NTNkZiwgMHhmMThjYzM3ZiwgMHg2YWZlYTExZiwKKwkweGJlZDE2NTcyLCAweDEyYmY1NWY1LCAweGFhZTBlZjQzLCAweDY2N2JkMmYzLCAweGFkNmRkM2QyLCAweDkwMTFmZGYwLAorCTB4NmViZjVhNzMsIDB4YTE3ZWI0NjcsIDB4ZjQ2MmY5ZGMsIDB4NmViMTRjZTAsIDB4ZDJiOTlkNTUsIDB4M2E0MThmNDQsCisJMHhmZWU4OWIxNCwgMHhlYzY1YzgyMSwgMHhhZGEyZWIzZSwgMHgyMTczYTRkZiwgMHhiY2JjOTMzMywgMHhlN2U0MTYxZiwKKwkweDliZTZkNjljLCAweDNmZmY1N2Y2LCAweDFjMmI3ZjFjLCAweDRjNzAwNGZlLCAweDYzODYyZmZiLCAweDQxYmM2OWFjLAorCTB4ZjA0YzhhMzgsIDB4NTFjM2U3ZmQsIDB4ZjI4ZTAwOTYsIDB4NTYxYzE0YWYsIDB4YzcyOGM1N2IsIDB4ZjY0MmJkYTAsCisJMHhiMGYzOGYyYSwgMHhiN2IyMzZlNSwgMHgxNTE1NTJmYiwgMHgzNjk4OTdmMywgMHg1MjA0ZWM4NSwgMHg4ZWVhNWUxOSwKKwkweGYxNDZmMWY2LCAweDhmNzc5OWFlLCAweGYzYjYxZTYzLCAweDk5NWRhYzJhLCAweGU4MmFmYTgwLCAweGVkN2RjM2NjLAorCTB4ZTA3ZWYxNmYsIDB4NzQwNTYxZjksIDB4Mjc1NGU4ZDAsIDB4MTc3YjQ3ZWQsIDB4ZmM2MGQ0NTQsIDB4YjJhNzNiZGYsCisJMHhmMWJkNGE4ZSwgMHgzM2ZmYmMxNiwgMHgzYzdmYTBhNywgMHhiNGViNzdkYSwgMHg5OGRiMTdiNCwgMHg2OTA1ZWY0OSwKKwkweDI0MWU5N2RkLCAweDEzZWU3NmJiLCAweDJjOTRkYWRiLCAweGNmOGQ5YmQ0LCAweDA1MmMxZGEyLCAweGNlMWRiNWI3LAorCTB4ZWI5ZWY3OGEsIDB4NWY5MjdiYWQsIDB4NTQyOTc1YTIsIDB4M2Y0NGFlYzYsIDB4ODUwYWU0MjgsIDB4ZGEzZDIwMGYsCisJMHgyM2QyMWYzNCwgMHg3YjUwODlmNywgMHhjNzk1ZDQxZSwgMHg4MDY2YmU2YywgMHg2ZDBkNDk1NywgMHgyYmYwMGY1OSwKKwkweDlhZmExNjRmLCAweGY1MDg3ZGUxLCAweDUyN2ZiNjFmLCAweGFiM2RlMTA5LCAweGQ5YmM5YTJiLCAweDhiNDliZjc4LAorCTB4YjdkNjhmYjAsIDB4ZGYzMWQ0Y2UsIDB4YjMwYTllZDgsIDB4YjBhZTUyMDQsIDB4ZjY4NWRlMzcsIDB4ZDdlNDlhZmEsCisJMHhlMmQ3OWNkYiwgMHgxZjZiZTA3YSwgMHgyNjdhZjNhZSwgMHg4ZjM5YjVjMCwgMHhjNTUzMzllNSwgMHg0MzdmNTg3YiwKKwkweDFlYTQ2Y2NkLCAweDdmNGFmNzUzLCAweDVmYmNmOTk1LCAweDgwZGZmMzZmLCAweDZhOTJmY2ViLCAweDE1N2ZiZmM2LAorCTB4ODc5Yjk1ZTMsIDB4ZWZlMTc4MTksIDB4NWM3NTMxYmQsIDB4YzFlNjk0NGYsIDB4Zjc5ODM0ZmEsIDB4YmViOWU3ODYsCisJMHg0N2ZhMTQ3ZiwgMHgxM2U2MWY3YiwgMHgxYzZlM2IyNCwgMHg4YzMyNGY5ZiwgMHgyNzEwZjc4ZCwgMHhmNWEzY2Y4ZiwKKwkweDhiZWIwNDM1LCAweDU3OGZkZjA3LCAweGIxOTYzY2U4LCAweDY3MWNlM2JmLCAweDZjMWRmZGEzLCAweGRjZTRmNThmLAorCTB4NzNmZmRhM2MsIDB4MDhiZTYyY2UsIDB4Njk2NmVkZTYsIDB4ZjE1MGJmN2MsIDB4MzhmY2MzNGYsIDB4ZjhiZjAwZjcsCisJMHg4YWE4ZGUyOSwgMHg5MjZkMGZmZCwgMHhhOTNmZmY3OSwgMHgzOWI0YmJmNSwgMHg3ZTY0NTQ5ZSwgMHhkNzMwMmNlZSwKKwkweDFmMzdjYzFkLCAweGI2NmE5NjgzLCAweDU5Mjg3OWY5LCAweGIzODdlZmM0LCAweGU0NTdlODkxLCAweDZjMzY4MmRiLAorCTB4NTEwYjA1NzcsIDB4OTA4YjE1NzksIDB4NDU4ZTNmNWQsIDB4ODYzNTdlYTksIDB4MzhmMWYzM2UsIDB4NzAwZTk3OTQsCisJMHg5OTdlNjQ0ZCwgMHg2NDJiNDdjNywgMHg2ODE2M2JmNCwgMHhiZjY4Y2Q4MSwgMHhmZTE2NGM2ZiwgMHg2ZmRlNDhjYSwKKwkweDc3YzE0NTRiLCAweGJlMjk3YmE2LCAweGM1ZTUxOWIxLCAweDU1OWVhZmE4LCAweDQ0OGRmMTRlLCAweDNjNjlhNWYyLAorCTB4ZGVlMjM4OGUsIDB4ZmJkZWYzODIsIDB4OGY4Y2Y1MzksIDB4M2NlNDYzNzksIDB4YmI3OWUzNWQsIDB4YmEzMWI3MGQsCisJMHgwZjYxYTI4ZiwgMHhmNzhjYTNmNywgMHg3ZWYzMjRhZiwgMHgyZmM0MTIxYiwgMHhjMTVmYWU0MSwgMHg0NTlmN2M3OSwKKwkweDc0YjllZGNiLCAweGQzZGZjOWNmLCAweGRhOGZiMDNkLCAweDE3NTQ4MjE4LCAweDZkZmI5Yjc5LCAweDUxM2I3YjE2LAorCTB4OTJjZmQ5MWUsIDB4ODBmMmZlNzksIDB4MThmYzIzNWYsIDB4Y2U5MDM1ZjIsIDB4ZTA1OTdmYzIsIDB4YmU2ZWU4MzIsCisJMHhjN2I4YzFjZiwgMHg0ZGM4NGZhMSwgMHhjNDRhYTU1ZiwgMHgwOTgzNDA2OCwgMHgwNWI3ZTllYSwgMHg0YTgwMWVlOCwKKwkweDM1Y2E5ZjMxLCAweDFmZTgxOWE1LCAweDE3N2ZkODJjLCAweGY1NzBiOWMxLCAweDBlMzAzNTJjLCAweDIzY2RjOWNmLAorCTB4NWQ3ODE4YmMsIDB4ZmUwZmYxNjAsIDB4YmNmMTMxZDgsIDB4OWVjMzMyZjEsIDB4YzMwM2ZjMzYsIDB4MDlmYWIwMWYsCisJMHg3MWJmYmU4OSwgMHg0M2EyN2VlYywgMHhlZDI5NjY3OSwgMHg3YjIzN2VkYiwgMHhjMGViMGQ5NiwgMHg0ZmJjN2U2ZCwKKwkweDc4YWYzOGNhLCAweDlmZWVjZWM0LCAweDY0Mzk0NDVkLCAweGIzZjlmMDMzLCAweDU1MGY3ZTJlLCAweDc1NDNkYzQ4LAorCTB4MGMzZjliZDgsIDB4ZmY5MTliYmYsIDB4YmU1ODE1YzUsIDB4YTg2YjBjZTYsIDB4N2IzYjVmYjcsIDB4MWZmMjY2ZjQsCisJMHg3OTg2YjA5NCwgMHhlZTE0YTcxNywgMHhjNjc1MTlmZiwgMHhiZjE0YzhjZSwgMHhjOWJmNzgxNywgMHg4ZmRkMDZmZCwKKwkweGVmZWU1MzcwLCAweDlkNzhiY2U4LCAweDU3M2EwZGZiLCAweDRlZDNhYTdlLCAweGI5Mzc3Mjc5LCAweGY3YjE2OWMyLAorCTB4YmI5NGRjNjcsIDB4Zjg3Y2VkMzcsIDB4MjM4N2ZjMzEsIDB4NzljM2RlMDIsIDB4NjgwNGU0OWYsIDB4ZTE5ZjkxNWMsCisJMHg0YjlkMjBkZiwgMHgzNWJkZmM0ZSwgMHg0NzFhZTMzZiwgMHg2MWYyMzc1OSwgMHg1ZGQ3ZTBiNywgMHg4MzQ1MjA1YSwKKwkweDIxNzY2ZGIyLCAweGFjZGE0ZmM5LCAweGJmZGU0ZTQ5LCAweDk0MjQ3ZjM5LCAweGM1N2M0NGNjLCAweGZmMDY0N2NjLAorCTB4NTkwNWVmNTksIDB4ZTg3M2YxMmEsIDB4Mzg2YWUwODksIDB4YWZhZDMzNjMsIDB4YTg4NGY3ODMsIDB4OGFmNmJlYjQsCisJMHgyNjc3NDM3OCwgMHg5MDdhZmE3YiwgMHhkMWFjNTk5NywgMHhlMjZmZmI0ZSwgMHhjOTE2OTU3ZSwgMHgzMTNkNDc2YiwKKwkweGRmYjk2ZmNiLCAweDU1NTFlNDQ3LCAweDJkZjBmNTg4LCAweDZhMDUxZjkxLCAweGU2M2Y1NWYxLCAweDdkM2YzMTc1LAorCTB4NjNlZTJkZDcsIDB4OGY2MDJjNjEsIDB4ZmQwMjNmOTcsIDB4YWRkYWY0OWEsIDB4ZGJmNWNjMzMsIDB4ZWI3NWNjMmIsCisJMHgxZTQ2ODYzZCwgMHg3YTRkMmJjYywgMHg1ZDNkZWM3NiwgMHg4N2U4MTJkMywgMHhhNWRiMzUxYiwgMHhjZDFhMGZjNSwKKwkweGFlMjMwM2YxLCAweGMzZjk4NzU3LCAweGUzYzJjZmI0LCAweDdjOWRkMzdhLCAweDhiODhiMmZjLCAweDM0MWEyZmY2LAorCTB4Yjg4NjFkNzUsIDB4M2RlMTlmNTEsIDB4YWUzNWQzZjYsIDB4ODQ1ZTMwNmYsIDB4NTc0ZDA0ZjcsIDB4NDM2ZGZiOGMsCisJMHhlZjkzOWYyMiwgMHg2NDU3YTQ3YiwgMHg3ZGZkZmI4YSwgMHg1NGFmNzQ5OSwgMHgxY2U5OTI1NywgMHgzODY3MTFhYiwKKwkweDQ5NGRlMDVkLCAweDNiN2YwZjNkLCAweGFkNzBkOGQ2LCAweDU0YWZhODE4LCAweDA3Yzg5ZDFhLCAweDVlNzliMzJiLAorCTB4ODcxZjIwZDUsIDB4Yzc1NGYxNGMsIDB4ZmRlZTM1MWEsIDB4ODBmZDAzNzIsIDB4ZTI3M2MxNWUsIDB4ZGI2ZmIxMmUsCisJMHhkOGY1ZjhhZSwgMHg1ZWMzODQ3OCwgMHhkYTdmMjNhMSwgMHg1ZWRkNjVkZCwgMHhhYjU1ZTVlMCwgMHhhYmM3MmNlZSwKKwkweGJmMzA1YTBiLCAweDQ2OTRlYzE3LCAweDgyMmJlYmVkLCAweGVkM2I0ZmUwLCAweGFmNzhjM2JlLCAweGYzNmRkM2FmLAorCTB4YWNkYzdhZTIsIDB4YWIzZjY4ZDksIDB4ZWI0OWQzMjUsIDB4NTZhOTBhZWYsIDB4ZThkMmY1YzcsIDB4Njg1NTE5ZDcsCisJMHgzY2I1YTczZSwgMHhlMDg5N2ZkMiwgMHg2NjlmYzE1MywgMHhiZTYzMWZiNCwgMHg2ZjNmZWE4ZiwgMHgwZGRhOGQzYywKKwkweGUwZWFmZmI5LCAweDc1NjcxNGI1LCAweGZmOTQ2ZDc5LCAweDc0NjgxNmE0LCAweDVmYzE5YThmLCAweDZiOWM3ZWQ2LAorCTB4MjRmZGI4OTQsIDB4YmE0MjdmYzIsIDB4ZDc5NGEzZGIsIDB4ZGZjNWFiZDYsIDB4YmI0OTdlNWYsIDB4YjllZWJjYzQsCisJMHhlYTc3Nzg5NiwgMHhmODIzMGE2ZiwgMHhlMGY1MTRiZCwgMHg4ZjkwMmViOSwgMHhhYjhjMzQ5NywgMHhhYmZkM2U4ZCwKKwkweDQ3YzkyZjUyLCAweGUxYWZjZjA2LCAweDJkYTJkYjcyLCAweDVmYmNmMjc3LCAweDg5NjkzZGYzLCAweDRiYzBkMWY4LAorCTB4NDcyODNjMjIsIDB4NGZkYzUxZmUsIDB4ZmFiMTYwMWYsIDB4NTYzNTI5YzYsIDB4NjhlMWJlZDAsIDB4MTM4YTZkODUsCisJMHg1Y2RjNTE0ZiwgMHgzZTI4Yjc0ZiwgMHg2YmY5NWZlMiwgMHgwNzVjNGUxNSwgMHg5Y2NhZDM5YSwgMHhhNmRmOWZiOCwKKwkweGQxNzI1Mzc4LCAweDMzMjIzYzNlLCAweGVhYjU5YjhjLCAweGNhMzFiOTY2LCAweDRmN2VmMWM3LCAweDg4OThlMzgwLAorCTB4MjdkZjVhOGIsIDB4MzgwYmM4MjUsIDB4YzdmNWQ2MjcsIDB4ZWRkYjVmZjcsIDB4MDA5ZjBmM2YsIDB4NDkxZTY4ZGUsCisJMHg3YThlOGE3OSwgMHg3ODczYjY0MSwgMHhlZDdkYzU5MywgMHhjNDRkZmE4OSwgMHhlN2VjNGYxZiwgMHg4YWJiZTBmNywKKwkweGNhOGU3NDljLCAweDM4YWI1ZTNhLCAweGYwMGFkNzJmLCAweDlhZGI5ZGEwLCAweGJlZTNlMzBkLCAweGM5ZDE1N2I4LAorCTB4YzQ5YjFlOGUsIDB4YTE3YzMxOWMsIDB4ZjdhMjRlYTQsIDB4M2MzNGI1YTcsIDB4MTM1YWM3YmIsIDB4YTc4MTlkZjAsCisJMHgxZjU1MmVkNywgMHg5N2ZjMmMwNywgMHg5NzhhNWJmZSwgMHg1ZmRmZjBjNywgMHg2YmRmZjFlMywgMHgxY2U5NzNjOCwKKwkweDJkN2JkOGZlLCAweGJmYmU1NDk1LCAweGM4ZDc4NTY3LCAweGRiNjY3N2FmLCAweGMwNGJlZDRjLCAweGEzNzFlMGI3LAorCTB4MDMyYTFjZWYsIDB4NTAzMTFjZDYsIDB4ZjE4NzA2MDcsIDB4NzFjZjUxM2EsIDB4NzRlMjJlN2YsIDB4NzE0ZmI2MGUsCisJMHg1NWJjYTc3ZiwgMHhjMzlkM2FhMSwgMHhlYmZjZWY4MywgMHhmNzRmNmEzNCwgMHhjZWExZDRkOSwgMHhmNmFhM2YwNywKKwkweGIwZTk4ZDRlLCAweDRiZDU5ZjNlLCAweDZmMDBkZGQzLCAweDdlMDFmNzQ5LCAweDlkMzNhNjFlLCAweGY4OGI1ZWZmLAorCTB4OGRlZjBhZGUsIDB4MWJmNzRlMWUsIDB4Mjk5NTNhM2QsIDB4YzIzZmZjYzcsIDB4ZWNlODNmZGYsIDB4MWM2MmYyNGUsCisJMHhmYzU4NzNiNywgMHhjYzc4ODNkZiwgMHg3NDJmZTQ2ZCwgMHgyOGM4ZmQ4OCwgMHg0ZmE0NGJlZCwgMHhmZjUxZWJlNSwKKwkweDhmZjI2NGVlLCAweDk5YTdlMjg2LCAweGIxNjE3N2RmLCAweGMxZWUwNjM3LCAweDc3NjQyMjUwLCAweGMzYmIwYWQ0LAorCTB4MmU2NGJmMTgsIDB4ZjI4N2FmZjMsIDB4ZWVkNjI0ZDUsIDB4Y2E3MGZiMDQsIDB4MTVkZmY4YzAsIDB4NDc4MDJkZmIsCisJMHg5Zjk2ZmI4MCwgMHg0ZmZiNDU1ZCwgMHhjMmFmN2Y0NiwgMHgzM2VkODRiMiwgMHg5MmM1YTIzMiwgMHgxM2ZjMDk3YywKKwkweGNlZmJhNjY2LCAweDQyZDE5Y2VhLCAweGQ5N2IxZmRjLCAweGY4OGU5ODE2LCAweGNkMTYzODZlLCAweDFiZTc3YWMwLAorCTB4YmMxZWM5MjcsIDB4NzJlZTFlMTAsIDB4N2I5YTdkNzMsIDB4NDc5ZjYxOTUsIDB4ZWIzOGQ4ZDQsIDB4ZTdhNWVkZDIsCisJMHg4YjU3MGYzZCwgMHhmZDE4OTBmMSwgMHg3MmI3ODgzNiwgMHg3ZTkwZWJjMiwgMHhlOGFmM2ZhMSwgMHhlOTJiZTMxZiwKKwkweDNhZTlmMTJkLCAweDJjOTE5ZjQ4LCAweGY0N2NmYzM4LCAweDg5YzE2MWM5LCAweDIyYTEyZTljLCAweGU3ZGM3ZjRlLAorCTB4NWQ5Mzc5ODMsIDB4ZjU5Yjc0MWYsIDB4OGFmZWZmYzksIDB4MTMwZDM3Y2MsIDB4ZDI5ZjgwZDEsIDB4YmVmM2M0YTEsCisJMHhkZTJjZWY3OCwgMHhlM2M0YmI4ZiwgMHg2OTNmYWQzNSwgMHgxZDQ1N2IwYSwgMHg0OTg3YzMxNiwgMHhmYTg0ZTgyYywKKwkweDRiZTg4ZTJkLCAweDc1MThmZjY4LCAweDBlMmRmZGUzLCAweGNmZWM2OWUwLCAweDkwYzhlNWM5LCAweGYxYjlkYWRmLAorCTB4ZWRjNzM2ZTUsIDB4Yzc0ZGY5ZTEsIDB4ZjdkYzFlMjIsIDB4MDNlMzhlOTgsIDB4YmZjMzNiYmUsIDB4M2FjNzdiYTcsCisJMHgzZjg2NjRiYiwgMHg2ZTYyMzA5ZCwgMHg4MzY4MGU0MCwgMHgwZmRhMWE3NCwgMHhmYzg2YWJkNywgMHg5NTc5Mzk4MywKKwkweGVkM2ZjODViLCAweGZlZTMyZWUzLCAweDhjNjdhMWI1LCAweDZiNzI1ZWVmLCAweDhiOGZhNjk3LCAweDdhZjM5Yzg2LAorCTB4ZTQwOGU1MDksIDB4Y2IyZTEwZWEsIDB4YmRmOGNiMzksIDB4NWVlMmI1NzcsIDB4MGY3MTFlOWIsIDB4ZGZjMjA3ZTIsCisJMHhhZmY3M2E2MCwgMHgzZWIwN2I4ZCwgMHhmN2M4MWMyOCwgMHhkNmFmM2YyMywgMHhkZTBlZmZlNSwgMHhjYThlYzM0MywKKwkweDI3ZmE2Zjk0LCAweGZkYzI5ZmRkLCAweGQ0YmZiMzQzLCAweDMxYjllZTIzLCAweDY2YjZhNWZjLCAweDM2NzM2ZjcxLAorCTB4NDkzNmU3ZTcsIDB4ZjYxNjdmYmEsIDB4Zjc0YTM2M2IsIDB4ZjA2NDY3MTgsIDB4YTczOGQzZjUsIDB4ZjRhMzMyYzcsCisJMHgxZjA2NWE3YiwgMHg3ZmIzZTIyNSwgMHg3YTgwZjIxMSwgMHg4Zjk3MTgyZiwgMHhlMzJmZTI1NSwgMHhlZWIwMDdmOSwKKwkweGI1ZWM2MzA1LCAweGQwMTUxZmY5LCAweDk4MDc5YmI5LCAweDBmOTdlMjhmLCAweDYwYjMyN2I0LCAweDVmM2I1ZTBjLAorCTB4NzMyZjlmODgsIDB4MjlkYjhjNDIsIDB4NDU2Njc5ZWUsIDB4N2M4MzVlN2MsIDB4YjlkMWU3Y2UsIDB4MGZkYzNlM2MsCisJMHhlOGZlNzBhNywgMHg3Nzc5ZjcxNCwgMHhjNDY0ZmUyYSwgMHhlMTc1YTI1MywgMHhmNjVlODBjNCwgMHgyYjFmMjMyNywKKwkweDk5YmMxYzVmLCAweGM3OWFmNWM2LCAweGZiZjQ1N2JkLCAweGUyY2FiZmIzLCAweDhmMDAwNGY3LCAweDdiNjA3ZjQyLAorCTB4MTc2MmM3YTcsIDB4ZjBmZWIyNWQsIDB4NDE5YmQ2OWIsIDB4YmQyMzRmYmMsIDB4NDNmYWU5NzIsIDB4NDhmZTgwYmYsCisJMHhmMmMyZmEyMywgMHhlMmJiNDFlZSwgMHg1N2JmMzBjNSwgMHhiNmMzYzVlZCwgMHhkMGUzZWIxOSwgMHhlNWM4NDBhZCwKKwkweGRkMGFlOTk1LCAweDg0NTU3NjQzLCAweGRhODlmYmFmLCAweGY3MTMwYzY1LCAweDVhM2MwYjBhLCAweDhmY2I0YmUxLAorCTB4MDhiNzFmY2YsIDB4ZjE5NmQ0M2EsIDB4OWVmMTkxN2IsIDB4OTQyZjljNzYsIDB4YWZlODNlMzksIDB4ZDIwYjRjYTcsCisJMHhiYzhiYmZmMywgMHhkYWQxNzE4NywgMHhmZTJmMGUxZCwgMHgwZWNmNTI0ZSwgMHg4NWVhMTU1NywgMHhhYThlMWQ5ZSwKKwkweGZhNTBkYWY1LCAweDliZjQyZGY5LCAweGZmOGNlYzJjLCAweDY0YmZmYWU5LCAweDJmZTI3ZmFlLCAweDRiYTAxZjcxLAorCTB4YWQxYzdiYTYsIDB4NzZlOTNkZmQsIDB4ZmEwMzc3ZDMsIDB4ZTVkZDgxM2IsIDB4MmQzM2ZhMTAsIDB4OWVjNWQzOTksCisJMHhhYjRkZDdjNywgMHhmMDIzZGQ1YywgMHg2N2MwOGY3NiwgMHgxZTU3Yjg5YSwgMHhhZTI3MjFkNiwgMHgzOWJiNDY0MywKKwkweDAwOTRmZGUyLCAweGVmM2Y3YjhiLCAweGZhNTcwODYzLCAweGVjZjAzYWUwLCAweGZiZjYzMmIyLCAweDdkM2JmOGUxLAorCTB4NzQyYjhhNDEsIDB4ODM5MjM2ZmUsIDB4ZjI5NGY2ZmQsIDB4ZmJmNTgxMzgsIDB4OGM2N2MxNjIsIDB4YzllOGVkOTksCisJMHhmZDEyYmNkMywgMHhkMjU4NjExZSwgMHg4MDdlZGY3MSwgMHg0ZjdlNjFkZSwgMHhiMjc3MGFmMCwgMHhjNWEyY2ZiMCwKKwkweGY3M2Y5MmY3LCAweDQ4YTNmNTI0LCAweDBmMWM1MGFmLCAweDBkYmYzNjZjLCAweDBhN2U4OGYzLCAweDllNGM1Yjc2LAorCTB4YmQxNmJkZTYsIDB4YmU2Nzg1NjMsIDB4MTNiN2NmOWIsIDB4YTNmNjM3ZjUsIDB4ZGRlMzhiNDUsIDB4NWJhYzYwZmYsCisJMHg4NmQzYmNjNiwgMHg0OWUwZTU5YiwgMHgyNmM3MWYwZiwgMHgyNTk3NGJjNiwgMHg2ZWJhMGYxYSwgMHhlYmUzMGM3NywKKwkweGU2MGJjZjMxLCAweDQ3OWUxMjdhLCAweGM4MGIzOWU4LCAweGZhZWUwMGUzLCAweGZjNmZjNWZiLCAweDU5Y2U3ODg4LAorCTB4MTNkMmIwM2QsIDB4NWRhMDA3NjMsIDB4YjA5NWViNGUsIDB4YzY1NTNiYzMsIDB4NWQ4NDRiZjcsIDB4ODI3NGZhODgsCisJMHg5MDc3MGIxNiwgMHg2ZDk3NDkwNiwgMHhmMTJiNWY1YywgMHg0M2NjMzVmNSwgMHg5Yjg5N2VmYywgMHgyZmI0MTlmYSwKKwkweDRmYjExZGI4LCAweDM4OWQ2YmNjLCAweDhkYWFmYTNmLCAweDIxYmQ5MmI1LCAweGU5Yzg2NGYwLCAweDZlOWM4YjRlLAorCTB4ZWMzNTdjZjUsIDB4NzdlMjc1YjQsIDB4ZjE3ZTkxMmQsIDB4NjE0YWUxZjQsIDB4ZjMxYzk1YWYsIDB4OTViY2M3OGYsCisJMHgxZjM0MmFjYiwgMHhkZDI1YTFmYSwgMHg5ZTYwMGZiMywgMHhmYzFlZTE0ZSwgMHgzOTQxOWE2MSwgMHg4Y2ZjMTQyZSwKKwkweGMxOGRjZGZkLCAweDZlM2NlZmRmLCAweGU2ZjdkZDkzLCAweDg1N2YwNDU3LCAweDdjYzBkOGM3LCAweGViZDE4ZGVmLAorCTB4N2FlMWVlZmYsIDB4MmRmYzFkMmIsIDB4NWZkMzgzOTQsIDB4Nzg1ZWJkMTEsIDB4OWUwMGUyYWMsIDB4YmEwNWFhYzMsCisJMHhmODMwY2FhMywgMHg2ZjNjMzNhMywgMHhlMWVkMGJiOSwgMHhmNjg3Y2M2MywgMHg5ZTc4NmY3NCwgMHg0N2YwMWM2ZCwKKwkweDNmNmUxYWVmLCAweGQ1ZjllODBlLCAweDk3YTA1ZjFjLCAweDJmOTdhOGMzLCAweDJlNGZlNjNiLCAweGMyOTZiYTgyLAorCTB4NzM2NWVlZjUsIDB4Mjk2N2JmMTksIDB4NWZhMTBlZWMsIDB4ZjQ4OWU4NmQsIDB4ZTJhN2ZhZGIsIDB4NzI3ZDZmM2UsCisJMHhlNjJiYjM2MywgMHgyZWZiNDBmOSwgMHhhODNiOWY2OCwgMHhkZjUxNmE2ZiwgMHhmM2RiMTM3OCwgMHg3OTkyNTMyMywKKwkweGM3MWU3YjNlLCAweGU2NjRmNGNiLCAweGFmM2MwMTc0LCAweGRjNjUwNmU2LCAweGIyZjU3Y2M3LCAweGFmNzgwOWRjLAorCTB4NDBhNGExZmEsIDB4N2VmODEyZDEsIDB4MGUzZTBjZjIsIDB4MmU4NDcyZWIsIDB4NDc4NzhkY2IsIDB4NDQzM2FmYWUsCisJMHhlNDQzMjhkYywgMHhmMTI0Njc2ZiwgMHhlNzBhNDU3MiwgMHg5NzlkMjRmNywgMHgxZjljZTlmNywgMHhlM2YxM2MzMiwKKwkweGJiNDRjYjRjLCAweDNiZDcxYjNlLCAweGI3YzY5NzhmLCAweDkxNGJhZTRiLCAweDhiM2NlZDJlLCAweGRmYzZiMjRmLAorCTB4MTc0OTRiYWYsIDB4MDZkYjZhZjcsIDB4M2ZjMWI1ZjUsIDB4YzY3N2M0MjcsIDB4ZmM2MjY1ZjgsIDB4ODk5ODY3NDUsCisJMHg4ZDI5MTY3ZiwgMHhjZThiMzdjNCwgMHg4NjM3YzQyOCwgMHgzZmUyMjQ1YywgMHgxYWVlZmY2MywgMHgxNGM2ZTA0NywKKwkweDlmYTNmNzljLCAweDIwOWM2MzE1LCAweGRmMGY2NTc3LCAweGRmZGZjMjM3LCAweDdjYjEzNmI5LCAweDQxODFlYjE4LAorCTB4OWRmM2QwNmYsIDB4M2QwMGNmMTgsIDB4YWQwYTY5M2YsIDB4ZmM4YmNmNDMsIDB4MzFhNzJlNTMsIDB4ZjA4ZmZhNzYsCisJMHhiYjNiMWRmNywgMHg4ZTZiY2NhZiwgMHg3YWMwZWJhMSwgMHg4Y2ZlZTNlOSwgMHg4NTE5NWQ3NSwgMHg4OWU5YzA0OSwKKwkweDcyOThkNWU3LCAweGNhZWRmYWE5LCAweGYxNzg3NjA0LCAweDVlMWRhOTdmLCAweGU0ODEzZGQyLCAweDU3ODEwMWY2LAorCTB4YzQ2NmJlMjMsIDB4Nzg5N2YwYjEsIDB4OGFiM2JkYjksIDB4MWE3OTMxZjAsIDB4ZmZjMDZmOTcsIDB4MjJmZjgxNTYsCisJMHgxYTdmZmY4ZSwgMHg2NDNkZmZjMCwgMHg3OTcwNzQyNywgMHg0YmQ2ODhjOSwgMHhmNDVmMjRmOSwgMHg0NTNiZjE5ZCwKKwkweGEwZGYyN2I5LCAweDI5M2RjZTdjLCAweGE5ZGY3ZmRjLCAweGJlNDA5ZmZiLCAweGJiZjIyNTVjLCAweGE4ODhjZjI3LAorCTB4NDA3YjU4ZGUsIDB4MmFkMTdlZmMsIDB4MWFmOWMwZmIsIDB4NTkxYmM3Y2EsIDB4MGVjZGZiY2IsIDB4MTg5NDk3ZWYsCisJMHg4NTk2ZDFmOSwgMHhmOTgwMmNjNywgMHhmOWYxNTc2NywgMHg5YmIxNGRhYywgMHg1ODc1YTdkNiwgMHg0ODVmMmU4NywKKwkweGJiMmRmYWUxLCAweDYwMTUyMjJhLCAweDRhMzc2YjdmLCAweDEyMzdmNDBhLCAweGY4MDk4NzdmLCAweDBiMjM2NDY2LAorCTB4ZDBmZWZlYzUsIDB4NGYxZjFmNDgsIDB4MDdhNDg1ZjMsIDB4ZDNlNzA2OGEsIDB4YTQ1NTliNmUsIDB4Y2Y2OTVlODMsCisJMHhhMGI1ZjY0OCwgMHgzNjA2YTRjOCwgMHhiZWQ3OWYyMywgMHhmMmZjYTExYiwgMHgyYjc2ZWZjOSwgMHg5ZTVmYzdlOCwKKwkweGNmODJkZmVhLCAweDY1NzhmOThkLCAweGJlZmQyNDdkLCAweGNlMWNiYmY5LCAweDMyZjc2MTBlLCAweDcxZTFjZDE2LAorCTB4ZmUwNDI3ZmYsIDB4ODg3YjBiZDcsIDB4MjNkZmE2MWQsIDB4OTRmZGI4ZDIsIDB4ZTlhYzdjYjEsIDB4ZmYwY2U3NzcsCisJMHhmYTczZmQwNywgMHhiNTk5NjkzZCwgMHg3MGE3OGEzMywgMHhiY2IxOTZmZCwgMHg4MzRiZWM5MCwgMHg1N2U3YTYxZiwKKwkweGQzZTdjNDZjLCAweDAxMzE1YzQ3LCAweDVmYzg5N2VmLCAweDc3ZjA1MTE1LCAweGQ2YmE3ZmE1LCAweDk0ZmVmNzE2LAorCTB4YzAxZjQyNDMsIDB4Y2VjN2Y2M2MsIDB4NmI3MjQyZTMsIDB4OWQyN2IzYjQsIDB4Njc5MzZmOWYsIDB4MGRkYmI3YzQsCisJMHgzZTdkMmMzZSwgMHgwZmJhNmVlZCwgMHhiODY1NTViMSwgMHhmZmUwNjRlZiwgMHgzNzhhZDRmMiwgMHhlMTkxOWUxMSwKKwkweDQ2ZTExMjc1LCAweDQ5YzQ2NzhjLCAweGNmY2EzOWYwLCAweDljZjlhYTA3LCAweDVjZjk0MjVlLCAweDgyY2M2M2I2LAorCTB4NTU2Y2Y5NTgsIDB4MmNlYjNlODksIDB4ZTg2ZTEzYmYsIDB4YWUxNGRlOGIsIDB4YWQ0OGVmYzcsIDB4NzFmMjAzZjgsCisJMHgxNDUzZDc3ZCwgMHg5MWJjNTliNywgMHg0MjRjMWVmZiwgMHhmZTI0NWNmYywgMHg3OGNkZGU2MCwgMHhmODBkNWRjZiwKKwkweGEzZWY3ODE3LCAweGVlYzg5NjE0LCAweGY3YzM5ZGFkLCAweDcyYjc2YWRmLCAweDJhYWQ2NTdlLCAweDFiNTcwM2RkLAorCTB4N2Y0MTFlZGUsIDB4N2VhM2Q0NjIsIDB4ZDVhNzZlMWYsIDB4MmQyZWRkNmMsIDB4YThlYmMxOGMsIDB4MjdlNTEwZGEsCisJMHhlNDM2ZWU1YywgMHgyYjE5ZWI4OSwgMHhkOGRjNjNkZiwgMHhjODc2ZmMwNSwgMHg5ZWVhZWRjNSwgMHhmZjA3ZWU1MiwKKwkweDdhYzkwODNmLCAweDAwODAwMDZiLCAweDAwMDAwMDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZDVmZjAwLAorCTB4ZDU5NDdjNzksIDB4Njc3OWYwYjksIDB4Y2M5MzMyNGYsIDB4MjEzM2RmNjQsIDB4NjEyNjIyMDEsIDB4MDExNjEyMTIsCisJMHhhMDA4NDkzMywgMHgyNDU4NGUwOCwgMHg4MWVjMzZjOCwgMHg4YmY2MjhhYywgMHgwYzE5N2U5NSwgMHg2ZjYyZTQ1MiwKKwkweGI5MDU1NmFjLCAweGRhNTQ0MDc2LCAweDFhMDgwOTYyLCAweDg4YjBlODM0LCAweDE0OGQ2YWQwLCAweDQzYjA1YjA1LAorCTB4OTIxMDg4YTUsIDB4NmYxNmI2MjksIDB4NzllN2JkNjksIDB4Nzk5OTM5Y2UsIDB4ZjhiMGNjZGYsIDB4YWJiZjdlZDEsCisJMHg5Y2NlMWM3ZiwgMHhmM2NmNmNmNywgMHgyNzNmNjc5YywgMHgyZDY3NWE1ZCwgMHgyYmE0MjIyOSwgMHhjYWU2YzIyOSwKKwkweDlkYmRlNDI0LCAweDkxNDg4ZWUzLCAweGU5NzY5ODg0LCAweDU1YWU1MDNkLCAweGQwMzQ0OTZkLCAweDc0ODNiNWY2LAorCTB4NGVkYTE2YjYsIDB4NjI5MDliODgsIDB4OGUzNWEyNDIsIDB4MTJjZmQwZGQsIDB4OTJhZGIyNmIsIDB4NDllYWIxMDgsCisJMHhjODQ4ZDlhMSwgMHhlZWM0ZjFiMCwgMHhmMGI3ZTVhNiwgMHhhZmFkMDk1ZiwgMHg0MjVjZjVhNCwgMHhjMWQzMzRlZSwKKwkweDI5M2ZhMGUyLCAweGM5MDg5ODc0LCAweDljNzA5YjM2LCAweGMzMjExNTc4LCAweGFjMzkwOTBiLCAweDM0NDMyZTI1LAorCTB4OGJlMGJiMjEsIDB4ODlhYzg0MTEsIDB4ZTM5OWM0NzIsIDB4YjEwZjFlNjAsIDB4ZjE5NmZlZDEsIDB4NDI1OGY3ZjQsCisJMHg1Yjg5MWE2YSwgMHg2Y2Q1ZjNhMiwgMHhmNDIzYWRkYSwgMHg3Njg0NzI3NywgMHg2NTI0MjI0YSwgMHhkNmYzODRiYiwKKwkweDJkMmNkZjZjLCAweDVlNjdiZmEwLCAweDA3NWZiNWQ4LCAweGExOTM1N2RmLCAweDdhYjNmNDYxLCAweGQwM2I4ZDg5LAorCTB4NzE4MGNmNjIsIDB4ZjYxYzdiNDksIDB4OTY1NGViMTMsIDB4YmQ3MGI4ODQsIDB4ZTliN2M2YzMsIDB4MGUzOGI5YWMsCisJMHhiZmY0YTNlZSwgMHgwNzlmNGFiNiwgMHg1NjY2Y2ZlYywgMHg5YjM1NzdlMywgMHhhNjRmZWViNiwgMHg2MjZhOTFmMywKKwkweGVmYzU2ZmVlLCAweGU2YzVkZmY2LCAweGZmODllOGQ3LCAweDY3NTg2NGZiLCAweGEyZTc1YjJlLCAweGM0YmFmZjVjLAorCTB4MmFhYWQ3ZmUsIDB4ZGZiNGNkNzMsIDB4NWIwOGY4ZGEsIDB4YjM4YjZkMGIsIDB4N2FjMTg3MzgsIDB4MGYzYWE3OGQsCisJMHg2MTkxODg1MSwgMHhhNzNhM2NhNywgMHg3N2ZlYmZkMSwgMHhkMTg0ODQ3NSwgMHg1OGMzODc3ZSwgMHgxNWIzNTJmZiwKKwkweDQ3NTYzYWUxLCAweGNlYmJmODVjLCAweGUzYTU2Mzk1LCAweDhlMTdlZTFkLCAweDQ5YjliZGUzLCAweGE0ZTAxZTM1LAorCTB4Mjc3MzI3MGQsIDB4Mzc5M2Y5ZDMsIDB4YjQ1NDk1NmQsIDB4ZTY0MTFiMWUsIDB4MjNkNjAyM2EsIDB4NWNjN2JiZDYsCisJMHgwNjJlNjE1NiwgMHgxYzIyNzQzOCwgMHg3MDY5MzZlYSwgMHg0NzNhMTVmZCwgMHhmZjVjZjJmNiwgMHgyYWNjNTM3NywKKwkweGY0YzBmNzljLCAweGZhNWU3NGNmLCAweDdjNmZkM2ZiLCAweDZiYTlmODg0LCAweGIwNmRlYzk1LCAweDc0OGZkNmRlLAorCTB4YWMwMGYyZDMsIDB4Nzg5MzUzM2YsIDB4ZjYxMDI2NDIsIDB4M2U3YjMzZGYsIDB4ZWZlOTU5ZDIsIDB4ZmMzMzc2MTMsCisJMHhhOWRlZWRkNSwgMHhhZWNiNDA1OSwgMHgxYTRiYTM1MiwgMHgzMDNjNzgwYywgMHhhZWFjZTgwNywgMHgyNGMyNGY0ZCwKKwkweDA2NzM5ZmMwLCAweGE3NDk0M2MwLCAweDc4ODQxZTAyLCAweDQyYmU4MWQzLCAweGU4MDIzM2UxLCAweDNhYWEwOGE4LAorCTB4NjdhNDdmNzcsIDB4ZmE2NGU2NjcsIDB4ZGQzNDZiN2QsIDB4OGVlODExYmYsIDB4ZDkxODgzZWQsIDB4YmVjMTBmZWYsCisJMHhjN2U5MDJlMiwgMHhhZmU2MGNiOSwgMHg4MDFkYjcwOCwgMHgyODUxNTE3MywgMHhhYzA4NWFkOSwgMHgyM2VlMThmMywKKwkweDMxYzE5Y2I2LCAweDc5OTUzZDcwLCAweDBhYjNkNmMxLCAweDYxOGI4OWU3LCAweDM3OGQxMmYzLCAweGU3MTNlNjFkLAorCTB4ZDY0ZDRlMmIsIDB4ZmY3ZjQyOTIsIDB4ZmE1NzhlMjYsIDB4NGVmZDg3YmIsIDB4ZmNmMjM5ZmEsIDB4NmRlMjU2ZWIsCisJMHg3NWMyNTlhYiwgMHg1NWE3YTEwNywgMHg1M2RhY2Y4MCwgMHhhN2EzMGYxZSwgMHg5M2QwMGQ0ZSwgMHg4ZmEwYmY1OCwKKwkweGM2NjkzNjU3LCAweDU2ZTM5ZTA3LCAweDZiYzcwZWIzLCAweDFkNzA2YjM1LCAweGEyN2UwMGNmLCAweGU3NjVhOTY4LAorCTB4MDY1NTk5ZjIsIDB4MTk4ZmYyMzcsIDB4Zjk0ODhmNjMsIDB4ZWJmNzJmMTQsIDB4YWJiZTUwM2MsIDB4ZWQwYjVmOWEsCisJMHhmOWIzMjZlZiwgMHgwZjU0YWFkNywgMHhhM2VkN2Q0MCwgMHhmODgyZDI0NiwgMHhmMDA5M2ZiNCwgMHgxMjNkMzAzYywKKwkweGE1NWI1MmYxLCAweDM4ZTllYjczLCAweGIxMjZiZjRmLCAweDI2ZThjYmJhLCAweGNlYjU5ZmY0LCAweDFmYTEwYmE5LAorCTB4YmRiMzBkODksIDB4MWU3Mzc4MDQsIDB4ZjUzMzRkZDIsIDB4M2QyYjI3YTUsIDB4ZmJmYTU2ZjYsIDB4Y2U3NjM2ODQsCisJMHhkYjZhMWUwNCwgMHhkZDAxNWQxOCwgMHg1YzM5YmMyMywgMHhjYjc0ZjBmZCwgMHhjN2MwOGRjZSwgMHhhMzMzMjg5YSwKKwkweDAwMjc0YTA3LCAweDYxNmQ5YWVmLCAweDM2MDZiM2U2LCAweGU4MDRiN2Q3LCAweDM3YWIyMmQyLCAweGNmOTkyN2I0LAorCTB4MzVlYmY4ZTYsIDB4ODNhMDBmZjAsIDB4ODY0OGM0ZWQsIDB4NzVmMDc1ZDIsIDB4ZWU3MmExYmUsIDB4MTlkNDNjMDIsCisJMHgxNGI1ODdiYywgMHhmYTRmNDNiNSwgMHhhMjg3NWNmMCwgMHg1ZmE2OWFkYiwgMHg4NDNiMzgwZCwgMHg0Nzg5NjU5MCwKKwkweDU1ZTcxNGIwLCAweDQ3ZWQ4ZmRiLCAweGM3MGVmZjdjLCAweGQyNTBjYmZiLCAweGJhNzMwZmYxLCAweGMzNmEyOWE5LAorCTB4YjY3MzU4ZjMsIDB4NzFiMWNmMTEsIDB4YzY2N2UzM2MsIDB4NGQ3ZTcyNTMsIDB4YmY3YzEzYzgsIDB4OGE5YzcxZWIsCisJMHg2YWIxYjY4OCwgMHg5ZjhhZjcwYSwgMHgxMjE2ZTY0YSwgMHg5MTJlNWY5YSwgMHg4ZThkYTM4OCwgMHg4M2E2YzVmNywKKwkweGJlMDBmMzkxLCAweGUzNTViZjU3LCAweDdlZDhjMzdlLCAweGQwZmU3MDRmLCAweDFjMDI4ZGI1LCAweDQ3NTFiZGU5LAorCTB4NDZmN2VjODIsIDB4ZTM5ZTIzYzcsIDB4ODZiZGUwMTIsIDB4N2I2YmJlYzMsIDB4NTEzZjg4ZjksIDB4OGI2ZDcxN2EsCisJMHhiZGZmMDFiMiwgMHhjM2NhN2RiOCwgMHhlZWViYTI3ZiwgMHg1MzYyNWFkYSwgMHgzOGI0ZDkwMywgMHg3MTdjN2U5MCwKKwkweDk0MmRiNjYxLCAweDY0ZDU2MjdlLCAweGJlZjE0NGJjLCAweGU0NjBlZGFhLCAweGNiZWZkYTQ4LCAweGQ0MmUwYzVmLAorCTB4N2NkZDdlZDMsIDB4NTM1ZTE3OWQsIDB4MWU1YzAxMzcsIDB4OWRjNzY1N2QsIDB4OTZlMzVlZDAsIDB4Nzc4ZjgwNjIsCisJMHgzZmU5ZmI2ZCwgMHg2ZjU3Y2Y4MSwgMHg5MzA4MDA2ZCwgMHhhM2JjNWY5NiwgMHg1NGVmZDJmMywgMHhmN2VjY2RlZSwKKwkweGY4NjY1MTZkLCAweDlmMTdjYmVlLCAweGRkZTAxM2JjLCAweGVkODJkNmQyLCAweDhjZGM1ZTE3LCAweGVjYWYwM2Y1LAorCTB4ZTliZmZiNzgsIDB4NDg4ZWI1NzcsIDB4ZTE3NzdjMWIsIDB4OTc4OGZkYjUsIDB4MGVjNmE3NWEsIDB4ZDc0NTBkZmIsCisJMHhjZmRjZWNjZiwgMHg4NDliNjRmOCwgMHgzMTU0OGRlNywgMHg1YWU4MjVmZSwgMHhhZjk3ZWZkMCwgMHgyODExMWRjYywKKwkweDhlZDU2YTFmLCAweDRmYmUwOTU0LCAweDkyNWVkYmQwLCAweDljYTA1ZTUwLCAweDY4OGMzNzc4LCAweGRmZmVlOGMyLAorCTB4OTY4MWE1YTMsIDB4ZmJlNWVhMTUsIDB4MmNlNzgwYjUsIDB4ZDkwOGNmYzYsIDB4YTdiNWU0MmMsIDB4NmY3ZWZlODQsCisJMHg3NWU2YzQ0OSwgMHgzZWFlZWU3MCwgMHgyNmU3OGQ5OCwgMHgxZDFkZDE4MiwgMHgzMWM3YzBjNywgMHg0MzQ0MzhjMCwKKwkweDBmYmViMGVjLCAweGIyZGI2ZmQzLCAweGE1NDdjZThlLCAweDkyNGVmYjM0LCAweDQ3Nzc5YzcwLCAweGNlMDViZWRmLAorCTB4OGMyZjU4YmQsIDB4ZGEwZjM5MzcsIDB4OWU0MTUzMmIsIDB4ZjJkN2RmODgsIDB4NjcwZGFlNzUsIDB4ZTcyMmVkZjIsCisJMHhjNjY1MzUzNywgMHg3YzVlNTBiNSwgMHhmMDBhYWMzNSwgMHgwZWYzYWY1MywgMHg3MmZjMDBiMCwgMHg1YjQ3MWQxOSwKKwkweDZkYWViZjE4LCAweDM3YWRhZTViLCAweGU3MWM3ZjYyLCAweGEwYTdjYTEzLCAweGU5ZTdhM2NjLCAweGY0OWYzZDFjLAorCTB4MGVkZmFkYWIsIDB4Yzk3ZWY5ODEsIDB4MTkzODY0ZjgsIDB4M2U5OGZiMGUsIDB4ZjAwNDhjZWIsIDB4ZDQ2ZGM4OGIsCisJMHg3ZjVjMjBkNiwgMHg5NjI5ZGFjMSwgMHhhZTg3ZGIwMiwgMHg0OTQ3ZTc2MCwgMHgyMzE2YjliNywgMHhiNzNiMWI4NywKKwkweDUzMmJiYmM5LCAweGY0YjdjOGFkLCAweGZhMDFmZWI2LCAweGIzYjU3MjUzLCAweGJmN2Y0NGM1LCAweGE2ZDM4NTdiLAorCTB4ZTZmNzc0YTYsIDB4NTM2MzYzZjksIDB4MWM5NWZkNjgsIDB4YWJkMjA4NjksIDB4ZDhmMjYyNWEsIDB4ZWE3OWM0NjUsCisJMHhlN2M4Y2E5YSwgMHgyZDIzYmQ3NCwgMHg5YmM3NWNlYywgMHg0MjhlZTY4OSwgMHgzNDJhOWUzZiwgMHhmODQ0NjM0NCwKKwkweGQ1YWY5MGZiLCAweDdhZjJlNWFkLCAweDMxMjc1YjJiLCAweDk4YTdkMmY4LCAweDhlZjE5ZmIwLCAweDY4M2FmZjY4LAorCTB4ZWIxMWEzM2YsIDB4ZjJmYmY0YmUsIDB4YWFiYTNlNDAsIDB4NzU1YTNlNTAsIDB4ODIwYmRlYjgsIDB4ZmU1NzExN2YsCisJMHg3ZjNmM2NlYywgMHgxMzliN2FhMCwgMHg0NzVlMzVlOCwgMHg4ZmUzMjM0YiwgMHhmYmZjNzQ5NSwgMHg5Njk1YTUyYywKKwkweDFmMTk3ZjM4LCAweDcwOTVkYWNlLCAweDc0ZWQwZjVhLCAweDc2MmRkNzljLCAweDhiNmM4ZWZjLCAweDUwYWZjOTkxLAorCTB4ZTM5ZWIwN2MsIDB4YmJjOTE5ZmYsIDB4YjVjY2U4MTgsIDB4NzQwY2NjMzcsIDB4NzdhNzdmNWQsIDB4NWMxZjIwNDAsCisJMHhiMDdjNjE2YiwgMHhmNzRkZDM5YiwgMHhlZjJmNDY1ZSwgMHhkODJlNTRhYSwgMHg2ZTViYmJkZiwgMHhhODc0MGNkZiwKKwkweGZmMDNjNzk0LCAweDg2OTU3NjJiLCAweDJlZGM5YjhlLCAweGM5MmYwMTk5LCAweGYwY2IyNjliLCAweDU1YmFmNTQ3LAorCTB4ZTVkNjU3YTAsIDB4NWY4MTQzNDgsIDB4N2ZjYmVkNDgsIDB4ZDdhZDFiNzUsIDB4YmQ0MWJjNTMsIDB4OWYzZjM3N2UsCisJMHhlZjg1NGY1NCwgMHgxNzJiZGJlYiwgMHhiMTI5N2NjMiwgMHgxMmQ0ZDk3NywgMHg1MzYzNDdlYSwgMHg5NmJlYmQ2OCwKKwkweDdmZjljMzE0LCAweDM3YmVjZDI2LCAweDkxMjFmNzA1LCAweDRmMjBhYzk3LCAweGYyMGQ1ZWE5LCAweGY1MGYyZTM0LAorCTB4NTZlNzdhZjEsIDB4OGU0OWJmZDQsIDB4ODViZGNiOGUsIDB4MjdkN2FmYTgsIDB4ZjljMWI0Y2UsIDB4ZjYyN2MzZWEsCisJMHhhZjdkNDJhZSwgMHgwYjZlMWFkZSwgMHg2ODRmZGZhMywgMHhmYTYwMWU5NywgMHhmNWIwOTE4ZSwgMHg0ZmE4NzY0OCwKKwkweGMzNzQ4ZjcwLCAweGY4MDkyZTdhLCAweDM5ZGI1Mjg4LCAweGRlZWZlNjA3LCAweGRhMmUyN2EzLCAweDcxZGVkZWZlLAorCTB4YmQwNWNmMjgsIDB4YTNkNzVlOTgsIDB4OThkNjhmNWMsIDB4MmZjYmQwMjUsIDB4ZTdjOWRiMzYsIDB4NjU5ODI1NTQsCisJMHgwNWJjMjJiMSwgMHg2N2I2NmIzYywgMHg1YzljZTBhYSwgMHg5ZmYwZWRlMiwgMHg0M2NiOWUzNSwgMHg0MmRkNjlmYSwKKwkweDJkNjdkMjBmLCAweGY1NjNkYmQ3LCAweDAzMDc4MmY2LCAweDI4ZjQyN2YwLCAweDgyZmMxZDI1LCAweGE2ZjI3ZmQzLAorCTB4NjIxYzEyNDMsIDB4YWVlZTdlMjUsIDB4YmEwNjllMjYsIDB4YTkzN2JiYmUsIDB4YThmOTI1M2MsIDB4N2M4ZmRkNWYsCisJMHg2YzhlOTU3ZiwgMHhiNzhlZmE5MSwgMHg4YThiZjM4MywgMHhmMDAxNDcxOCwgMHg0NmU5OGFjOSwgMHhhYTdmMjA1YiwKKwkweGMyYWJiNzA4LCAweDQyM2NmNDAyLCAweGZhMmE0NTFjLCAweDEzNzhmOWRkLCAweGQ4NzVmZmMyLCAweGFjYmQxMDc3LAorCTB4NjM5NjdmYjcsIDB4MjJiYmMwMmIsIDB4YTdlZDBjMjEsIDB4Zjk1ZDVhN2IsIDB4NWQ2ZDFmYTQsIDB4ZTcwNTVlMTUsCisJMHgyMzYzZjI5MiwgMHhlZDMzNGRmMiwgMHhkZjhiYmY0ZiwgMHhlNDQ1ZjIzMiwgMHhkNzA1YTRiMywgMHg2NjYyZDliNSwKKwkweDhhMzhjNGUzLCAweDY0YjU4MTFhLCAweDM5MzA1NjM5LCAweGRiMDViMjY2LCAweDNmN2M3ZGNmLCAweDI5Y2ZhNjA3LAorCTB4NGM5ZDAxNTAsIDB4ZjRmNGRhMzUsIDB4OTJkZmE3YmIsIDB4YjhkZDIzZTYsIDB4ZjM4NGMwYTgsIDB4ZWM3MTVjZTIsCisJMHhkOGFmNjYyZSwgMHg1Mzg4ZWU4MCwgMHg3ZDU2ZmE4MywgMHg5YzFkYzNhMywgMHhkNzFkMThhZSwgMHhmNDBiZmQ1MywKKwkweDg4NTc0YTcwLCAweDI2NzZmYWI3LCAweGRkYjgyMjdmLCAweDUwMjI3YzA3LCAweDRhZTcxNWRmLCAweGQ3ZTA1YjljLAorCTB4ZGU4MjM3NDAsIDB4ZDFiZGI5YzQsIDB4Y2ZjZGQ5ZjMsIDB4N2ZkZDM3NDcsIDB4ZGU5YTdkMjAsIDB4NmViOTc0NjQsCisJMHhkYTE0YjU5NSwgMHg3MzEwNTVkNywgMHhiNGFhYmRhMCwgMHhmODcwYWM4MywgMHg2MmZhZGQ2OCwgMHgxMWM2MWI4NCwKKwkweGUyY2UyZTdjLCAweGE4ZmMwYjM4LCAweDM1ZDFjYjdlLCAweDJmOWNiNjQ4LCAweGY4ZjliZmQ1LCAweDY3ZTk2YjgwLAorCTB4Y2YxYjBkMDYsIDB4MDc3MDhlZTAsIDB4ODI4MThmZDIsIDB4YTU4ODU0ZGIsIDB4NDQ3M2Y4MGIsIDB4MTJkZjVjOTMsCisJMHhkY2I5M2ZlNSwgMHg2NWZhY2VmOCwgMHg3YzAxYTRhZSwgMHhhOGYyZmQwOSwgMHgwYjRmZjljYSwgMHg0NTI5MmZkNywKKwkweGE2MjZmNDkwLCAweGFmMDNjNjVmLCAweDI1YjA3ZTA3LCAweDI0ZmMwZGMyLCAweDc3Mzg5ZTNlLCAweDk3Y2Y1OTA1LAorCTB4YmMwOTljZmMsIDB4M2UyMzNiMGEsIDB4MWM5ZjdkOTIsIDB4NTMyNGY0Y2QsIDB4OGIyZWZiMzQsIDB4MGJmNjAxOTcsCisJMHhjYWFiMDc5ZSwgMHg0M2E4ODY3OSwgMHg4ZmQxMDFjYiwgMHhjNWRiMGJhZSwgMHgxZmVkN2E3YSwgMHhmYzZmNWIwMywKKwkweGFjYjYwM2EzLCAweGZmYTdjMDBiLCAweDA4NTZkZDVjLCAweGVmNWFjZTc4LCAweGZhMzdjY2QxLCAweDQ4ZjIxMWU3LAorCTB4N2ViMDNmNDksIDB4OWZiMDViOTAsIDB4ZGZkMGRjY2EsIDB4NzZlN2VlYjUsIDB4Y2I5ZTgyOWMsIDB4NjMzYWY5ZjgsCisJMHhmMmRkZjgyMSwgMHg2OGVhZTcxOCwgMHg0NTE1OWY1YSwgMHhmZjE0MzFlYywgMHgyM2QxZGViMywgMHhkZjFjOTEzZCwKKwkweDZiNDNiMDAwLCAweDhmYTVjNDM0LCAweGRkNmFiYzA2LCAweGZlM2MwMGRlLCAweGZiNDBmMDBkLCAweDJlMGM5OGY1LAorCTB4MmQwNzNkMzUsIDB4NjhlMmNlMzEsIDB4OGNhYjllM2EsIDB4YzdhMDNjZDgsIDB4MGJmMjlmN2UsIDB4NTNjNDk3MzgsCisJMHg4MWE0ZmMwYywgMHg4ZTAxMjM3OCwgMHgyMzljOTgyZiwgMHg3NTdhYmJlMCwgMHhhOWQ0M2E2NywgMHhmMzBmOTMxZCwKKwkweGVjYzExYjNjLCAweGI1NTFkZjI3LCAweGM3ODUyMDdiLCAweDQ3Zjc4MzY1LCAweDJlN2FlOTIzLCAweGI5YjJjOGFmLAorCTB4ZGZhNzM4ZTgsIDB4ZGY5ZWZkZmMsIDB4ZWQyZmFmZDMsIDB4MTljZDIyZjksIDB4MGRlYjU3YzAsIDB4YzYyNjgzMmEsCisJMHg0ODk2ZWY1ZiwgMHhiZTEwNWI1NSwgMHhjOTlhMjMzYiwgMHgwOWRiY2NkMywgMHg2OGI4MDRlOSwgMHhhZWI3YTg3YywKKwkweDgwMjdiMzA4LCAweGJlYzU2N2RmLCAweGU5NmI4NGQyLCAweGNhNTcwZGYzLCAweDllNjAzYjg4LCAweGZhMWZkYTA2LAorCTB4NGIxOTVjMzUsIDB4OGM4MjQzZGMsIDB4ZjkwM2M3NGIsIDB4OTkyNTcwZDAsIDB4M2NkODYyYjgsIDB4MzE1NDM3YzAsCisJMHhmYmY4Y2U0YywgMHhlZDE3MTNhNywgMHhhYTQ1NWE3ZiwgMHhlN2ZiYWQ4MywgMHhiYjVmMGNkMSwgMHhhYzFmMTkwOSwKKwkweGQ3ZGYwNzdkLCAweGZjZWM3ZWVlLCAweDZlNDgzNmZhLCAweGFmMTYwZmIwLCAweDE0ZDQ3OTMwLCAweGNmZTk4YmE0LAorCTB4MzYyZDJmYTAsIDB4NDhhYTNjYmIsIDB4OGY5NDNmZTAsIDB4NGUzNDQ2MGQsIDB4NjQ3YjUwMzUsIDB4ZjQ2Nzk3MWUsCisJMHhhMDI4Y2QzYiwgMHhjZjE5OTc1NywgMHhjMzlmOTNhMSwgMHg3ZGVmZWQ3OSwgMHhjNTg5ZmUwMywgMHg0NTE4NjIxYSwKKwkweGIwNmY5OWM3LCAweGJmYTE0ZTFkLCAweDI2MzhjOWZmLCAweGMyYzRjNDEyLCAweDgzYzRhNjg3LCAweGQ1OTg0YjFjLAorCTB4YmQyMjczYTgsIDB4N2U4MzMxOGQsIDB4ZWE1MTkxMmEsIDB4YTVhZTIzNmYsIDB4OGY1MDY5MGYsIDB4NzRhMjdhNDUsCisJMHhhYzcxOGJhMCwgMHgzYTAwYmEwNCwgMHhmNTk4M2EwNCwgMHhlMjZiZTMyMCwgMHg1ZTdlNWNmYiwgMHg1OWY4NzQ5NSwKKwkweDhlY2Y3YzA4LCAweGYxODFjYjI5LCAweDM1OGU1MTJjLCAweDVlMGZkZjQ4LCAweDZlYmZmMTkyLCAweGYzZjJmYmM5LAorCTB4NGRjYmE3NDAsIDB4ZGY0ODk3YjYsIDB4NzBlMTNmZmUsIDB4ZDRlODI5ZWYsIDB4MmU1YTJjOTEsIDB4ZWEzYTQ3ZmYsCisJMHg5ZGVmMWRhMywgMHg2NzVkM2UwNCwgMHhhMGQ0N2EzMCwgMHg3NmQ2ZWM1NywgMHgyODNlYzU3OSwgMHhkOTQ1MDYwZSwKKwkweGYwNzNjMjlmLCAweDczOTY1MWMzLCAweDAyNDgyNjk0LCAweGUzZDcxZGZkLCAweDAzYmYwMGRjLCAweDAzNjNkYjlkLAorCTB4MTUxYWRjZTksIDB4ZWJhMjc0MGQsIDB4MTBjMzhiYzUsIDB4NDkwYmM3ZWYsIDB4ZDFmMWM5MzUsIDB4MzFmMTE0NzEsCisJMHgwMWQ3NjBkZiwgMHgxZGQ4MTdkYywgMHg1MTU5YmViOCwgMHgwY2IzNjI5ZSwgMHg2ZmVhYjlmZSwgMHhmODcxYmY2ZiwKKwkweGY5ZTdlN2FmLCAweDYxZDI4ZWI0LCAweDgzYjA3MzkwLCAweGMzMTU0M2MzLCAweDY0ZTljNmY4LCAweGQzYTdhZjQ2LAorCTB4MjgyZWY1NDksIDB4ZjY5MmQxMDcsIDB4ZDc4ZmRkM2IsIDB4MDA3ZDc5MGIsIDB4ZDU5ZTJlZmYsIDB4Nzk3ZTcwMGYsCisJMHhhNzdkOWYzYSwgMHgzZTMzZTc5YywgMHg3YjE4ZWNjZiwgMHhmNjhiYzAwNywgMHg0ZjAwZThmMywgMHg0MWI5ODc2ZiwKKwkweGVhZmNhNjRmLCAweDhmMTNhNzAwLCAweDE1NWY5MDI1LCAweDFmMDAwNmY5LCAweGY4YTYyOWVjLCAweDU3NTlmYmEyLAorCTB4MDEzZjRiZWEsIDB4ZGU5ZjY0ZmMsIDB4N2Q3YWM1YmMsIDB4ZDdjMjdkYmMsIDB4OTdlNTlkZjUsIDB4YTFhZmNhOGQsCisJMHg0OWY1ZjkzMiwgMHg4ODVmOTMzNCwgMHgxZDEyYmEyNywgMHgxMWIyYWJkMywgMHhlYTE3NDgzZiwgMHg1YmNmYzcxYiwKKwkweGY0ZWUwYzYxLCAweDUxYTM3ODljLCAweDFjZjI3OTRlLCAweGFmZmQ3YzAxLCAweDhmODI2ZTFjLCAweGUzOTcwZTljLAorCTB4ZjdmN2M1ZDEsIDB4ZWI0NzNmMjUsIDB4ZGU0Y2NkYTMsIDB4MzBlOTdjZDksIDB4ZTBlOGU5Y2UsIDB4YzdlZDVmNzgsCisJMHgyMzllMzc0NywgMHgwYzRlNmZiZCwgMHhhOGZiYjdhNSwgMHg0NDJiYTBiZSwgMHhmNTg3YWM3YywgMHg3MzRiYjFmNCwKKwkweDczODU3ZjNkLCAweDg5ODBmMGRjLCAweDIyYmJkYzgwLCAweGExZjIyYmU2LCAweDk3Y2E5MzdmLCAweDRlOGYwNjc0LAorCTB4ODdhZmQ0MWQsIDB4MjdkMWYwMWYsIDB4ZDQ5NTFhNTEsIDB4ZDVhMDIyNzQsIDB4NzFjNTYyMWMsIDB4OWUzMzI4YzgsCisJMHgzZTVlYjBiMywgMHhmMzg5ODlhMiwgMHhlZjM5NDdjMywgMHhjOGFmOGUyOSwgMHgwZTczNDkxOCwgMHgzNjIzNmFmMCwKKwkweGEzZTczN2U4LCAweDI5YjM0Y2FmLCAweDFiMzI1YzlkLCAweGNmMmEyYTVjLCAweGQxOWNhYWFlLCAweDc5ZWZlMDMxLAorCTB4YmJlYTI4ZjgsIDB4MDE5ZTc0YTcsIDB4ZWQyMGM2YWQsIDB4Y2YwYmNmM2EsIDB4YjlmNmZlNGEsIDB4NzRiYjUzM2YsCisJMHhlZWVmMWNmNCwgMHg3NGM5ZmFlYywgMHhhNzY3N2ZiYSwgMHhkOGU3MDZkYSwgMHgxZmFmZjJiOSwgMHhhNWJkMDMwYywKKwkweDRmZWI2YjUzLCAweGQ3YWVhZTUwLCAweDk5MWEzZWMwLCAweDI1NGE3NjdlLCAweGVmYzVmZjg3LCAweGMxODdlZGM5LAorCTB4NTQwZjBjMzEsIDB4MTMzYTQwOWYsIDB4NTg1NGUwZmMsIDB4ZWJhMTNlNjQsIDB4ZmQzYzQyNTksIDB4NTFlN2VlODEsCisJMHhlZjRhMTdjMywgMHgxMGY3MjVmMiwgMHgxODE2MjdjYSwgMHg3ZGZkMjJhNywgMHhlODVkYzBmMSwgMHg5YzQ4NWU2ZiwKKwkweGI5ZTYyZmM4LCAweGU0MGM3ZmI0LCAweGNhZDYwYmEzLCAweGU1NWE4YmViLCAweGM5Y2YyNWY1LCAweGRmZmViZGViLAorCTB4NGVmZmI5NzIsIDB4OTg2MzUzOTQsIDB4MGJhOGJhNWMsIDB4ODYzZTNlZGUsIDB4OTc3N2UzZDEsIDB4ZWU1MDgzYzcsCisJMHhmOWM3OTVmNiwgMHhlMzk1YTcyOCwgMHhhZWU1YzNkZSwgMHgxZTQyY2I5MCwgMHg4NDMxNWMzNywgMHhlMzg4YzcxOCwKKwkweDdjMWM1YzVjLCAweGY1ZjFmN2ZkLCAweGEzMzE1YzM3LCAweDNmZGJlZjdjLCAweGQ1M2FlNTE2LCAweDgxM2JmMGM0LAorCTB4ODkyYjg2Y2YsIDB4MGJhOGJiZjgsIDB4MmZkZmQwN2QsIDB4OGNhM2M3MTUsIDB4YzIyZTdjZGYsIDB4ZGY4NWZlN2YsCisJMHgxOWVmZDA1NywgMHhkMDkyMTg4OSwgMHhmYjkyN2I1ZSwgMHhlMGY5Y2M2YiwgMHhmMjAzM2E4NywgMHgzOWQ5ZTI5ZCwKKwkweGE1ZWRiYzhlLCAweDQ4Zjc5YzRiLCAweDNmNGQwMGQyLCAweGY3MmI3ZDNmLCAweDgyZTBlOTQxLCAweGQ1OWY4MDM3LAorCTB4NzE2Mjk4YzYsIDB4MzA2NGMxZGUsIDB4NzNlODJiY2MsIDB4NTExNWMzY2UsIDB4YjBmZmRmMjAsIDB4NTAyMTNjYjIsCisJMHg2YmY1ZWFmZiwgMHg0NDdkOThlOCwgMHhhZjI2NTE4OCwgMHhjZDllNDI4OCwgMHgyYmYyYTc2YiwgMHgwMTg4ZjUxZiwKKwkweGVmOWY5NzQwLCAweGI5ZjQ4MTliLCAweDgxZTJkODkwLCAweGU5ZjY3YjZlLCAweGY3ZmZkMWQzLCAweDU4OThlNTFkLAorCTB4M2NkNzE0Y2YsIDB4YTkyZmQzMmQsIDB4NjVlN2EwOTAsIDB4NGE3ZjlmMzIsIDB4NTQ2N2QzMDcsIDB4ZjUxNmJiMDYsCisJMHg5YWIxM2IxNSwgMHg2NGE0ZDFlMywgMHgxMzBhOTZmMiwgMHgxNjhmYWQwZCwgMHg1YTFlMjA3NSwgMHgyMzM3YzUxZiwKKwkweGZlYmE3ZjQxLCAweGYzMjRiY2QxLCAweDllNzA4OTlkLCAweDFhYWYzMGY0LCAweDExM2I5MGQ4LCAweDM2MTE5NmNhLAorCTB4OTIyNTk0MmIsIDB4YzFkNmMzNDMsIDB4MzQ5NjNjZjAsIDB4MmFmN2MyYTYsIDB4ZjRjZDU3ODMsIDB4Nzg4MmJhMjUsCisJMHg2M2U2MmZlOCwgMHhhZmFmMTM3NSwgMHhjZTc5N2E5ZSwgMHg2OGRkZjgyMiwgMHhlM2FmNzNjMiwgMHhmMDU1NzhlYiwKKwkweGMwMzEwMzJmLCAweGNmNDZmNWJlLCAweGUyNGYxODk3LCAweDhhY2NhYmE1LCAweDFmYWJhODc2LCAweDljM2ZiYjQxLAorCTB4ZDc5ODExYjQsIDB4ODJlNGJjNjgsIDB4NTk4OTlhY2QsIDB4Zjk5ODdhODIsIDB4MDIxMWU3YjIsIDB4NTJlOGNkN2MsCisJMHhiNmJlNDYwZCwgMHhmNDlhZjkxMywgMHg3YmUwNjJmZSwgMHgwM2U2OGY5NCwgMHhhZWQ5MGQxZiwgMHgyZWZlYTBmMSwKKwkweDVmMzQ1MmY4LCAweDRiZTcwYjVmLCAweDIxYzE4NDQ5LCAweGJlNzFkODg2LCAweDIzMTY5YjFmLCAweGFlMzM4YTVmLAorCTB4ODZmZmEwOTAsIDB4OTdjOGYxYzgsIDB4YjRmMDAxZTIsIDB4NDZiYzY2M2QsIDB4MWNlMjY3YzYsIDB4OTU0MjdhZjIsCisJMHg5NGU0OWViYywgMHgxNGU0MGRkNywgMHhlM2M5MDNjYSwgMHgwNjM2ZmM0OCwgMHhmMDFjOTFlZCwgMHhkOGNiNjgzYiwKKwkweGNlMWU5OWY5LCAweGViMGRkNWQ2LCAweDExMzlmYmEzLCAweDkzN2ZmYWEzLCAweGJiNzI0NWZiLCAweDQ3NWEzZWI1LAorCTB4NGYxNTBmZDAsIDB4YThjMWU2MmQsIDB4NjE4ODljMDcsIDB4MmU2N2MwN2EsIDB4OTBmYjU3NjgsIDB4ZmVlMDllZmYsCisJMHgxZGUzYTk4MywgMHhkZjhhMWExNSwgMHgwN2M5NzJmYiwgMHg4ZjllNWE3NiwgMHhlZjg2OWU3MywgMHhhYzY5MWM2NywKKwkweGFhZjVhNWFiLCAweDg3OWU0OWY3LCAweGU2MjUwNTk2LCAweDlmMTRlZDlhLCAweDZjOWI2NjZiLCAweDFhZmFkMjhmLAorCTB4NTc2ZDIzMTMsIDB4MjJmNTFlOWMsIDB4YjY5OGYyMDIsIDB4YTIyNTU2NmYsIDB4ZmMwMWEzZmYsIDB4NmJmZjc0YWQsCisJMHgzYTAwNmY0MCwgMHg1ZWQwNGZlOCwgMHgxYWM4N2FhNiwgMHg3OWI3ZWQwMywgMHhjZWJjZDk5ZCwgMHhkZjJhN2UwYSwKKwkweGZhMDdmMDU4LCAweDE2ZjMxMTE2LCAweDVjM2NlNDEyLCAweGUyOGNlN2E1LCAweDUzYTg0NWY1LCAweGJlOWM0YTNjLAorCTB4ZTE1YmVmYzQsIDB4MmY1NjJjZjcsIDB4MWU3NjBhMTksIDB4ODNhYjJmZmIsIDB4Y2ZmMDI4MzIsIDB4ZmRkY2U4ZTQsCisJMHhhNTFkM2Q2MSwgMHhjZjVhMzhkYSwgMHg3ZjQzNjMxYSwgMHg2MTdjZTEzMSwgMHg5Zjg3OTg5OCwgMHg3M2ZlOTFiYiwKKwkweGJjMDVlZDgwLCAweDY0ZjFkZDllLCAweDk3OGMzYzQ1LCAweGNhN2U1MDRiLCAweGQ2MmMwZGNlLCAweGNhMTg3ZjRjLAorCTB4NzNjMGVkY2MsIDB4ZmZmMTA3N2IsIDB4ZmI5NWUzMDcsIDB4OGRiYzQ3YzcsIDB4Y2VlZjZkZTEsIDB4NjFkOGYxNjYsCisJMHgzODdlY2YxYSwgMHg1OTc5MjNkNywgMHg4Nzc0Y2JjMCwgMHhhNTExZmU1NCwgMHhlZDgzNDJkNywgMHg4MDJiMWVlMCwKKwkweDdkODZhMWQ0LCAweGRlM2YzNTBmLCAweDcwOGZmMzAyLCAweDdjMDMxNDdjLCAweGYyODE5NDZjLCAweDBjYjY1YTAzLAorCTB4NTljY2Q5YjcsIDB4ZjgxNTZmYjgsIDB4NDJiNWJhOTcsIDB4NDBhM2Q5MWUsIDB4OTJhZDRkYWUsIDB4N2QwMGZmNWMsCisJMHhlMTFhOGM2MCwgMHhlNTMxOTdmMywgMHg3Nzk0ZDc1MSwgMHgzYWIyMmE0ZCwgMHhkNmFjY2U1MCwgMHhmM2Y3ZmNjOSwKKwkweDY1ZmY5OTYzLCAweGVjZDhlYzVjLCAweDJjMDc5NDU4LCAweDk2MjgzN2RlLCAweGRiYTAwOWYyLCAweDdjMDM5MjFjLAorCTB4ZTcxY2UwMjIsIDB4YTU1ZDc3YzMsIDB4Y2U3NTBlYmYsIDB4OWNmY2VkZTUsIDB4ZDEwZmIzNGYsIDB4Y2ZjYjNlYTIsCisJMHg4ZWFiZTBiYiwgMHg2NjllNzY3MCwgMHg3NDA2OTIxMCwgMHgyMjM0OTUzMiwgMHhiYTU2M2RmZiwgMHg3ZGZiY2YxNCwKKwkweDc4MDVhNWM0LCAweGUwYzY1YTdkLCAweDY1M2RkNjJjLCAweDk4YWY1Y2JjLCAweGE3ZDc5MGU2LCAweDBlZjUyOTU3LAorCTB4N2ZiYzdiM2EsIDB4Nzk0ZTE5ZGUsIDB4M2ZhMTY0ZmIsIDB4OGZlYjk3OGUsIDB4NTVjZmZlYjMsIDB4ODRiNWNhMGIsCisJMHhjZGJlZWI5NywgMHg1NGY4M2YwMCwgMHgwM2Y4MWM2ZCwgMHhmYTMzMjQzYiwgMHg4YzI0M2JjMSwgMHgxOTU0MzRmYiwKKwkweDZjNmZlMGRjLCAweDViZjE2NzY4LCAweGVmZDA1YWIyLCAweDdlODBjN2JjLCAweDMxZGE1NjUzLCAweGJlZGY1NzFlLAorCTB4ODAxNDVhNTMsIDB4Yjc1YTk0YWYsIDB4MjA3Y2ZjMDQsIDB4YzgyNzUxODUsIDB4OWM3N2FlMmYsIDB4ODNmN2JhZDAsCisJMHg1MmM0ZmNiZiwgMHg5ZTc0ZTI0YSwgMHhlMWRmM2M4MywgMHgxNDNiZTQxMCwgMHgzNGNlZTlmYSwgMHgyOGZmZjk4NywKKwkweDNjN2ZhMzE1LCAweDAzNjExY2Q1LCAweGFhYWQ3OWJkLCAweDZiODVmZDEwLCAweGJmMzI0ZDIzLCAweGY2NTViYWVlLAorCTB4Zjg0ZWY4MGEsIDB4Y2FmZTQ1MDksIDB4NmM2OTNkNzQsIDB4NDNhN2ZlNjMsIDB4Y2M4ZDhjYzgsIDB4NzZlNmU0M2YsCisJMHhkMzJjNzY3MiwgMHg2YWZiNjhjYiwgMHhjZTI5NGZmNCwgMHg0MTBjNWM2ZCwgMHgzMzM3MTFiOSwgMHg1NTgwZmQwNywKKwkweGUwNDUwNTFkLCAweDA3ZjJhNTg3LCAweGIxZDlkM2ZkLCAweGU1NWZlYzU2LCAweGQ1ZmY0MDJjLCAweDE4MTljNmRkLAorCTB4ZDhlODY4MTcsIDB4ZjQ2ODU5YWMsIDB4ODJjM2NmZDMsIDB4MDQ0ODIyZWUsIDB4NWZhZjVkZDAsIDB4ZmQxZTk3NjgsCisJMHg4ZTU1NTc0MiwgMHhkNTdkMDAxZiwgMHg0NGY5M2NlYSwgMHg3YmY4OTc0ZSwgMHg4NGIyZjkyOCwgMHhlNjViNWRlMywKKwkweGMyODhiMTk4LCAweDlkMDNlN2E1LCAweGFhM2JlYzBkLCAweDVlYmUyMDQwLCAweGZlNDE2YmRiLCAweDkwNGM5OWE3LAorCTB4MjUyZWFmY2YsIDB4MzY3YjI3YzgsIDB4MTdjOGJmMzMsIDB4Njg3YmVhOTYsIDB4YjUyZDU5MGIsIDB4OGVlZTFmMjIsCisJMHg1ZmYwOGIxZSwgMHg3YTg0M2M2NiwgMHg0YTI2ZjU0OCwgMHg3ZTdjMDE0ZiwgMHhiZDc5NTZkOSwgMHhiMmZiMzA4NiwKKwkweGJhMWY3Yjc2LCAweGY4MjQ3ZTQ0LCAweDc5NmVmZDU1LCAweGU0Y2Q5MjNmLCAweGI5YzM4ZGI3LCAweDQyZDFmMzgwLAorCTB4MDU0YTZkODcsIDB4OTZjYWJkMmMsIDB4NjI0NGVjYzUsIDB4ZmM1ZTNlMDcsIDB4MGJmYjhlYmUsIDB4ODVjZjk5NjcsCisJMHg1OTdiOGIwMSwgMHhkNDFlOTZiYSwgMHg2NmFmM2E2MywgMHhjZGYxOThlNywgMHg5MjhmM2U2MiwgMHhmZDczMTc5ZiwKKwkweDlkMGQ0ZWU3LCAweGNmYWZkMGE3LCAweDNmNTYxMzE0LCAweDI3NTBlYWE0LCAweDJkZWJmY2FhLCAweDFlODRmZGUyLAorCTB4YzBhOWY4MjUsIDB4NDI3MGU5NTcsIDB4M2IzYTUzODYsIDB4OGZkZGYwMjAsIDB4ZDM3YzAzZjQsIDB4MjVjZTkxZjEsCisJMHhjNjg5NTRjOCwgMHhlZjYwNWRmMSwgMHg1MWYzZTQ4YywgMHg1ZDAxNzA3YSwgMHgzNzA2NTRiOSwgMHhhOTFhZWZkMCwKKwkweDAxODhlNTExLCAweGFlNWE2NWY0LCAweDU3Yzg5YzkzLCAweGE5NzZhOGRmLCAweDQ4MjNkZTAxLCAweDMyN2I5NGUzLAorCTB4NDY3NmJmODEsIDB4OWQyODljMDAsIDB4OWZhNDBlMWMsIDB4ZGY0OWUyMTYsIDB4MDhlOGM5MjksIDB4YmYyY2JiZGIsCisJMHg4MjQ3NGEwZSwgMHg2NTNlN2JlZiwgMHhiYTA0YzBmYSwgMHgwMmE3MTg2MywgMHgzY2I0MDkwMiwgMHgzYTQxMmQyNCwKKwkweDVhN2M2NzE5LCAweGFkN2ZmZDAzLCAweDc4ZDNmNjYyLCAweGZhYzBkNmUyLCAweGZjNzJjYzJhLCAweGQ3OTQ0YjhmLAorCTB4YTFmNmIyZWYsIDB4ZGJmZjhjMGYsIDB4ZTQyNzNjMzksIDB4ODJlZGRiYzgsIDB4ZGYzOTExNmYsIDB4OTk1NzI0Y2EsCisJMHhlMWY4ZmI3ZCwgMHg4ZWFlYzA4NywgMHgxMDM5MjI2OCwgMHg5ZDFhYTNkZiwgMHhmODkwN2ZhZCwgMHgyZGVjNGY0OSwKKwkweGM0ZjdjM2Y3LCAweGY3YzNmMTA2LCAweGFmYmViOTY4LCAweGMzZmFhZmEwLCAweDI3YWNlNjE3LCAweGU3MTQzYTdlLAorCTB4YThkMjBlZTEsIDB4OTM3MGE0NGUsIDB4OGVmMTYxZGUsIDB4MjhmZTgwM2IsIDB4OTAzNzBjM2QsIDB4NDg2ZmQwNWMsCisJMHg4OTczZjMxMSwgMHg2ZGU4MjFmMywgMHhjNTQ1YWYyOCwgMHgyMGNhZmE3MSwgMHhhMzVmNDAxOSwgMHhiZmQwYzNkYiwKKwkweDE5ZDAwNzc5LCAweDNlMDJkYmE1LCAweDQyZGY5MGFlLCAweGRlMTk2ZjJmLCAweGE1MzJhZTg3LCAweDc4ZTM5NDJjLAorCTB4MWYxYzg0ZGUsIDB4N2Y5ZWQ5MjIsIDB4NzJmNDEzMjQsIDB4MDFlNWVhMTcsIDB4ODcxMzE0NzQsIDB4MTFkMjg4ZmMsCisJMHg3MjNlY2Y5ZSwgMHhhMGFlZGU1MiwgMHhlM2VmODEzMywgMHgyNTJjZGY1YywgMHg1MzVmNDg4ZCwgMHgzZDJjNTY1NSwKKwkweDJmNGVjYzk1LCAweDQwZDU0ZTM3LCAweDMzMjZmN2ZmLCAweDc0MDMxYjNhLCAweGNiZGYwNTk4LCAweDIwZGNhNGU5LAorCTB4OTBlOTJiYWYsIDB4OWMwYWE4Y2UsIDB4YTE5NzQ5NTcsIDB4ZTgwMzJjZTgsIDB4OThjN2M4NGMsIDB4YThkOWQzZWIsCisJMHg2NzRlNWJiOCwgMHg4MjZlZTJhMywgMHhkYWRmMDRjZSwgMHgzNzJlNjYxOSwgMHg5NmFlZGM4MiwgMHhmOTBjMGU1MCwKKwkweGVhMDViYjIwLCAweDUxMzJlYjAzLCAweGIxNjlkY2NmLCAweDQ2ZjZjNDFkLCAweDY5ZDQ1ZWQ2LCAweDQyZGU0MzU3LAorCTB4OWVkZTBhZDYsIDB4N2E4NzI4ZTksIDB4YTc2ZDEzNDMsIDB4NjcxZjE3NDMsIDB4MmJkOTBkNzksIDB4YTNjMTdiNTksCisJMHhlMDRkMDc4ZCwgMHhmZWIxNzJjNywgMHg0NmI5N2U2ZiwgMHhkZGRiNDkxZCwgMHhkMmZmNzg2YiwgMHgzN2E4NzJkNiwKKwkweGJmZmQ2NWFjLCAweDYwYzg3ODgwLCAweGI3NzI4N2M4LCAweGFkYjdlZmMwLCAweGIzMzFiNGNmLCAweDI1YjdlOTk0LAorCTB4YTUzYmJmN2MsIDB4NWZiMTA3NWQsIDB4ZTRiN2ViMmIsIDB4YTA5YzIxYjAsIDB4ZDZmNGNjZmQsIDB4NGIzZWY5M2IsCisJMHhjNjdkYjEzNiwgMHg3OGY3N2U3ZSwgMHg0NThiYTUyYiwgMHg1ZmVhMTczZSwgMHg0M2I1NTRlNywgMHhiMDg1YWY5MSwKKwkweGQ2YTU0YjNmLCAweDUxYzcyODU0LCAweGRkYTUwYmI2LCAweGVlYWI1YjYwLCAweDViNjFlMmM3LCAweDcxNGQxNGU4LAorCTB4ZTIyMTdmY2MsIDB4YWVhZjEwNDgsIDB4OWE2N2QwMGMsIDB4MjQ1ZDk4ZTIsIDB4MjY4ZjhiYmUsIDB4OGQ5MTFmYTgsCisJMHg0NDM3YjQyNiwgMHgyY2YzY2I5YywgMHg4NTBlYzA5MSwgMHg1MGJmNDIzZCwgMHg1OTcxYWY3MSwgMHg4YzJmYTg4ZCwKKwkweDJlZjExMGNiLCAweDlkM2U2NmFmLCAweGFmZGJlMGI3LCAweGFmZjMwNmM2LCAweDNkMzFjNzM0LCAweGJmOGYzY2U1LAorCTB4ZGRhYmRmOGIsIDB4MTNiZjJlMmMsIDB4ZTAxOTI0ODgsIDB4NzA1N2Y4N2EsIDB4M2M0Mjc3NWUsIDB4MTcyNzA5OGIsCisJMHg2NTc4MGUxOSwgMHg3MjdlMjdmNSwgMHg2YTVhZGQ2MCwgMHgzNTUxMmZiYywgMHhjYzIwNWM2YSwgMHgyM2NjMjVkMiwKKwkweDNjNDlkNDlhLCAweGQ3N2Q5MTUxLCAweDNjNDM0ZTNmLCAweDg0MDc5NjNhLCAweGEyZGM1ZmViLCAweGMyMjAzY2MzLAorCTB4YzEzNGQ5ZjksIDB4YzdmNTQ2OWUsIDB4ZTM5NTNkZjMsIDB4NGZlMGEzNjksIDB4ZTAxMGM4NDMsIDB4ZGUzOGQzNGYsCisJMHgzZDUwMzNlZSwgMHhhYjcyZTUxOCwgMHg1ZTM3YzE1NiwgMHgyMWIxYmU0MCwgMHg2ZjJkZmVhNCwgMHg2YTk1ZjA1NywKKwkweGFlNjJlZjNlLCAweDNlMjUyZjc3LCAweDQ5Y2U0YmQ0LCAweDZmY2YyYzZlLCAweDhkNzc3YTYwLCAweDM1ZWEzOGYxLAorCTB4OWU5OTFiM2QsIDB4YThiYzRiNTksIDB4Y2I3NTJjZjcsIDB4MzZjZDQyZjksIDB4NGRhZWJkNzksIDB4OTc2ODZmNWUsCisJMHg1Y2YyN2JkNywgMHg4NmNmNGYzOCwgMHg0ZmUwYTFiYSwgMHgwM2VlN2VhYiwgMHgwYjU2ZGZmNCwgMHhmMzk2ZTJmZSwKKwkweDMyNTY0MjE3LCAweDIwZWNmMmZlLCAweGVkMjhlN2Y0LCAweGVlZjc2YTcwLCAweGExZjhjMzhiLCAweGU4MmQ2Njc5LAorCTB4NTgyMjczMDUsIDB4OThkYTgyYmUsIDB4NjRjMDdjODcsIDB4MTQzODNiNDAsIDB4MzlkYTUwMWYsIDB4ODMyMGVmNDIsCisJMHgyYTBmOWY4MiwgMHhjZjAwMGM2OSwgMHhjNjc3NzgwMCwgMHg5MjFlZGI1ZCwgMHgyMWYwMmJiNywgMHgzOWZiOTFlYywKKwkweDdjNTBhNjNlLCAweDkzYmYzY2MzLCAweDFjZjc2OGVjLCAweDMxZjBjYTViLCAweGU5MDJiOGNkLCAweDBjNjVkM2UxLAorCTB4YmEyZWMyMWYsIDB4YWVjODNiNzksIDB4OTA3NjJlZmUsIDB4Y2UyZTVmZDIsIDB4YjA5YTc3NTUsIDB4ODc2OGFkNGYsCisJMHgyOTgwMDAzNiwgMHhmMzdiYWU5ZiwgMHg5ZmEwMGJjNCwgMHgzNThlZWY4YSwgMHhjMDRkMzg5MywgMHgyYTU2M2M3OSwKKwkweDllNGU4ZmY3LCAweGU0Mjg3YTcwLCAweDJiMGY2ZTNiLCAweDkzZTAwYmZiLCAweGZmYTFjNDc0LCAweGQ4NDEyZWIwLAorCTB4ZTlmYzZjNDUsIDB4ZjJlYWZmM2MsIDB4ZThhOGNjY2EsIDB4ODliZGQ5NmIsIDB4MDA5YTYxOWQsIDB4YzY4ZjZjZmYsCisJMHg0ZTc2MDkxNywgMHhlNzA5NTVjZiwgMHg0ODI1YmE4NSwgMHhmZmRmYzkxYywgMHg4N2M0MTg3OCwgMHhmOWRmY2VmYiwKKwkweDNmMDNkZmJkLCAweGUzMDIyMTdiLCAweDMyNTc5NzdmLCAweGE2ZjJlZjdiLCAweDdjMDc5ODgxLCAweDA1NDljNzkxLAorCTB4ZGUxYzk2MWMsIDB4Y2UxN2I2ZjYsIDB4MWMzMWQzNWIsIDB4N2Y3MjQ2YWYsIDB4MWRiNjg3YmQsIDB4ZTI2MzNiZDUsCisJMHgzY2FhMGU0MSwgMHgyYzU3NDYzYSwgMHgxZGY2MjE5ZSwgMHg0MmU5NmZkYSwgMHhjMDNiYTZmZSwgMHgwYTRmYWNlNCwKKwkweGZhNGViY2M3LCAweGI4YzA4MGZiLCAweGUzMDI1MjRlLCAweDdlMGU0MmMzLCAweDJkNmFmZGNjLCAweDE3ZDhhNWJkLAorCTB4YzRiNDJiZjMsIDB4M2Q2MGIzZDgsIDB4YzFiYWMzMWYsIDB4MTY5MWY0M2YsIDB4YmJmODM1ZjksIDB4YTU0OGNlMjEsCisJMHhlZTg5NDkyZSwgMHhhMzg4MWViYiwgMHgzODgxYmQ2ZiwgMHhjOTllMmRiYSwgMHhmNjk0YTU4MywgMHg2MmNkM2YzMCwKKwkweGNlZjk4MDJmLCAweDc5ZTFiOGYzLCAweDFmM2E3NzFlLCAweDIzNTBlMmM5LCAweDVmMWYxOWUzLCAweGU0NGRmYmNhLAorCTB4ZjExMGY5ZTUsIDB4ZDlkZGYxNmUsIDB4MzU2MTgzNjYsIDB4OWIxZmViNWQsIDB4MzY3NTYxODksIDB4ZjU2N2YxMjUsCisJMHgzMzlmOTg4ZCwgMHg2N2FiZWQ4YiwgMHgzOWYzMDVhZiwgMHhmOGFhYmY0NSwgMHg4ZWIwYTVkMiwgMHgxOGM3MTYyMSwKKwkweDllYjYxNzI4LCAweGE5ZmEwNWQxLCAweGE4M2Y2MDdiLCAweGY1N2RiMDRmLCAweGNjNTJiMTg0LCAweGI5NWYxNTU3LAorCTB4M2NlMDFlMzQsIDB4ZWM3ODhiYzMsIDB4NzUxMDhmYWQsIDB4MzNkZjhlMDcsIDB4YzI0ZmYxOWEsIDB4ZmM3NTEwZmQsCisJMHg1YjhhODVmYywgMHhhNTVlMmY1ZCwgMHhlNmNlZmI4YywgMHhlZmI4ODllMywgMHg5OTE0MzYyYywgMHg3M2JlZTNjZCwKKwkweDBhNGQ2NDBjLCAweDkxZGI5ZjZkLCAweDQ4ZDVlY2MwLCAweGRjNTkwMGQ3LCAweDUzNzExNWQ3LCAweDg3NDE3NzcxLAorCTB4YjhmZTY5M2QsIDB4ODg5YmM2ZTksIDB4ZmUyMGZlOWIsIDB4N2Y0ZGM3OTYsIDB4NmUyNDFmMTAsIDB4YmZhNzhjYWEsCisJMHhiNjQxN2EwZSwgMHg5ODBmMGYxZiwgMHhkNDJhZGMxOSwgMHhjZmUwZTViNSwgMHg2MDkwYmNiYywgMHhlOTAxNzMxZSwKKwkweGQwMjhlY2Y3LCAweDg5Njg4ZWIzLCAweDEzN2M4YWRiLCAweGUxZWJlM2Y1LCAweDIyYTFjZTJkLCAweDM5ZGY5OTU2LAorCTB4ZDYwMzU4OWMsIDB4OTY4Y2U0OWYsIDB4MGVlMzUxZDUsIDB4YTk0YzBmYzgsIDB4NGZmNTk2NGUsIDB4ZmIyN2VjNmIsCisJMHg5MDY5YTMzZSwgMHg1NWQzM2RhYywgMHhhZDY3YWIyOCwgMHg3ZGY2NDNiZCwgMHg1OTMyZDZmZiwgMHg3NzczZTA3ZCwKKwkweGNkYmZiZWNiLCAweGJmNTY1OTNkLCAweDdlNDBmZjBjLCAweDc2N2U0NmE2LCAweDY1ZmJiNmZiLCAweDFkMWM5N2ZkLAorCTB4ZGRjYTdlODIsIDB4OTcxMmZlNWMsIDB4Mjg3NzMzYmQsIDB4ZmFjMGEzNzMsIDB4Y2JlNmRhZjMsIDB4YzkxZTIzYzYsCisJMHg0NWY2ZDEyMywgMHgyMzE3NGYxYywgMHg4NTg5M2RkOSwgMHgzZjlmY2M5ZCwgMHg2Yzk5N2RiOCwgMHgyZDc1MWFmYywKKwkweDQ3MTk0ZmUyLCAweGMzYmUyNDJjLCAweDk2ZWEzZjk4LCAweDM3ZDIxZTZjLCAweDdkYjRiOGFlLCAweDllYmJmNjMzLAorCTB4ZmFmYzIyN2UsIDB4YjE0ZGUyMDcsIDB4MjRjOTE3NDgsIDB4OTJiM2QxOTksIDB4NzBiZDhjMWUsIDB4MDUxOTdiODAsCisJMHhhM2IzYzA2NCwgMHgyMGY0NjQ4YSwgMHgxYjg1MWJjMywgMHg2ZjJlYTlmYSwgMHhkMWRlNjEzNywgMHg3MDBiYTM5MiwKKwkweDM5NDRmYTNkLCAweGU1NTk4NDNkLCAweDIzOTExMGY0LCAweDRkOTMwN2E3LCAweGUxYThmZjhlLCAweGUxMmJmYzcyLAorCTB4ZTljYmIxNmQsIDB4ZmZlOTc4ODEsIDB4Y2M3NzgwZDcsIDB4ZmNiZDM5NzgsIDB4MWRkY2UwYWIsIDB4MWM4MWUzY2YsCisJMHhkOTBlNDNiZSwgMHgzNzA4OGM1YiwgMHhlYzI0M2Y5NiwgMHhhM2I3M2Q3YiwgMHhjZmRjYWM0OSwgMHg3ZmE3ZjQyNSwKKwkweDE1NzhmM2M2LCAweGQ1Zjg0NzFmLCAweGI0MmU0OGQ3LCAweDY2ZTM3YmNiLCAweDllZTkzZGMzLCAweDFiY2ZiMDRjLAorCTB4MzhmM2YzMDksIDB4NDFjNTA5NTQsIDB4N2JmODg0ZmQsIDB4ODBhMTNmMjgsIDB4NjdhZTU0ZWIsIDB4ZmEzYjEwZDYsCisJMHhmYzQxMTdhNSwgMHgyYjY3OTY5YiwgMHg2NzdmYTI5NywgMHgxZDY5ZjE4OSwgMHg5OTM4YmZmNCwgMHhjNGQ1NjNlOSwKKwkweDdhZmRmYzhkLCAweGRjMjU2ZmYxLCAweDAxMjUyZjQwLCAweDFjMjU1NDdlLCAweDYzYzkwZWE1LCAweGU1YzMzZTAyLAorCTB4MTBlOTMyNDAsIDB4ZjJjOWMwNzIsIDB4MTJmZWU1ZjgsIDB4MDBiMmYxMDIsIDB4NWVmNDI1M2UsIDB4OWY4MGJlMzEsCisJMHg3YzYyNWZlMCwgMHhlMDU5ZjgzZCwgMHgxOWY4MjgxYywgMHg0NWUzOTFjOSwgMHg2MzgxNWZlOSwgMHgxODFhMTg2MCwKKwkweGMwOTJiMTJmLCAweGFmZDI4YWY4LCAweDUwYTdmN2UyLCAweGE3Y2U5MmJiLCAweDIxNmNjOGNlLCAweGNjNDM2ZjE0LAorCTB4MTVkN2Y0NzYsIDB4ZjA5OWNlOTMsIDB4YTBhN2YwYmIsIDB4ZDIzNmUxN2YsIDB4MjkwODVmZWIsIDB4OGYxM2FlOWYsCisJMHhiYzkyZTI5ZCwgMHg4ZGY2NjdjZiwgMHgyZWI4OGFjMywgMHhiZmU3YzMwNSwgMHg0OTQ3OWRhNywgMHhlNGY3YzQ1NiwKKwkweDAxYzYwNzM3LCAweDJmZjVmNTFkLCAweDQ1YmU0ZWRhLCAweDdjYWI1MWM3LCAweDNmN2U4MTMxLCAweDRmN2Y1ZmUxLAorCTB4ZWU3ZWUyZjIsIDB4NDhjN2Y2MjMsIDB4NGY1MTllODAsIDB4Y2NjZWM2ZGEsIDB4OTUyZWZmMDQsIDB4MzI1MDkxOGIsCisJMHg1NzY5MTQzZiwgMHhmNDFhZDllYSwgMHg0ZWU4YWFmZiwgMHg0ODZiZGU4MCwgMHhkMzMyOWM0MCwgMHg3NTc1OGVkZiwKKwkweGU2OGRmYWRmLCAweGMxM2FmY2JiLCAweDJjYmQ5ZGNjLCAweGZlNzA5MzVmLCAweGQwYzNlYzI3LCAweDdkN2M5OGY2LAorCTB4MzMwYjhjMGIsIDB4ODJmYmZhMjUsIDB4YzBkYzc1YzAsIDB4MDM3ZTQ1M2EsIDB4Nzg4NGUzZGMsIDB4OWYyYTI2YzYsCisJMHhiMDRiY2Y1MSwgMHgxNzUxNWVhMiwgMHgzYjEzZWE3ZSwgMHg5OWQ0NTY3YywgMHgzNmQ3YTgxZSwgMHgwMzAxYThlOCwKKwkweDdhZWJmOGY2LCAweDkzNmM5NzE2LCAweDRjM2ZjYmViLCAweGExMmVmOTYwLCAweGE4ZjNjMGUxLCAweGY1Y2M3NjE0LAorCTB4NDc5MTFkZjQsIDB4MTZlMDExMzUsIDB4OTQ0YjNlYjAsIDB4OWY4MDNmZTMsIDB4OWVmNDlkYTQsIDB4ZmVmZTU0OTMsCisJMHhjYzJlZWExNSwgMHhhZWRjYmMxMywgMHhmNTRlZmJjNiwgMHgxZmM4NWRhMywgMHhmMWFhZjdlYSwgMHhlODc3NzUwOCwKKwkweDc1NmYzZWYxLCAweDkzZDQ0MWZiLCAweDAzMjk5YWJhLCAweDg1Yzk3YWEyLCAweGU2YjMzYTY2LCAweGVjNTdmMDFhLAorCTB4MjA3ZDk0MzcsIDB4NGM1ZThkZjIsIDB4OWYzM2ZjZTAsIDB4MmJlNjA3ZTQsIDB4OGFmODNlNTEsIDB4ZGFmNjBmOGMsCisJMHg0YTc5YmRhZCwgMHg5M2UzMDRhZiwgMHgyOGRjZWExNSwgMHg5YmRhZTdiOCwgMHhhNWYxYTI4NywgMHg4ZmMwMGU0ZiwKKwkweDcyMGYxZjcyLCAweDFhMzdlNDNiLCAweDVkMDI1YjQ3LCAweGQ0Y2U5OWQ3LCAweDBhYmM2MDY3LCAweDY0ZTFjNzc1LAorCTB4YzkwYWNmODAsIDB4MTJiNDcxMDYsIDB4YTg3ZmJiM2QsIDB4MzViNzJmNTcsIDB4MDM3NWQ4MDYsIDB4MjAzYjUyMWYsCisJMHhjNTdhNzk1ZSwgMHhiZjcwZDE4MywgMHg1MDNiOGM1OSwgMHgzOTNkZTE1MiwgMHhmNjdkNzY0MiwgMHg5Zjg4MjJmZCwKKwkweGEzYWRiMmNkLCAweDY2N2FkOWI1LCAweDJmN2U2NjU3LCAweGNmNDU5M2MyLCAweDc2M2EzYmQ3LCAweGFmZGI0YjNmLAorCTB4N2RmZWYzMTEsIDB4ZTNmYTM1MTYsIDB4MGM2NGQ1NjIsIDB4YWY1ODg1ZDAsIDB4N2UyODU3YjgsIDB4NzBjZWZiODcsCisJMHg1ZWZjNGQ3ZiwgMHhmMjFiZTJkMiwgMHgwNzFmMmQwMCwgMHhhZmY2MmNmYSwgMHgzN2RjYTRhZiwgMHg4N2U4ZDFhNCwKKwkweDZlOWM3ZDdiLCAweGRkNDVlODBkLCAweDQ0M2YyNjA2LCAweDZiMzExNTllLCAweDMwYWQ3Y2YwLCAweGFhNzVmM2IwLAorCTB4M2Q5YmIwYmYsIDB4ZWFiZmIwMjYsIDB4OTg1MWVjYzMsIDB4OWE5MWY1ZTcsIDB4MTdmOTVkODAsIDB4ODJjYTNkYjMsCisJMHhkZWEyYjNmYiwgMHhmYWNjYzJiOSwgMHhkZTdjZjM3NSwgMHhhMTk2OWYxNSwgMHgxMmQ3MTY1ZCwgMHg3Y2U4Y2YzYywKKwkweDZhOWZiMzAyLCAweDc5NjRhOGFmLCAweDBmMWFiNTQ2LCAweDVlZDUwYmU2LCAweDkxM2U2MWQxLCAweDE0OGZmZGY4LAorCTB4ZmUwMWFlMGUsIDB4ZDlmM2ZjZmEsIDB4MGI1ZDYxNjMsIDB4N2MwZDZkODgsIDB4MDQ2ZDYwYmYsIDB4MjFlODA1NzEsCisJMHg4OTU4YWYyMiwgMHg3YzcxZWZmZiwgMHg0NDM0NWJkNywgMHhlN2VmMTgzMywgMHhkZGY1YWUzYSwgMHgwNzU0ZmY1YiwKKwkweDlkMTJlZmJkLCAweDVjNzFjZWM4LCAweGE1ZWJjYjM5LCAweGUxYzYwNTc2LCAweDI1ODVkZjk0LCAweDZjZmM4YTRhLAorCTB4ZWNhZmRlMmYsIDB4NWJkYjA3Y2QsIDB4NjFhZTQwOWEsIDB4YjE1ZmQ3ZTcsIDB4ZWJiM2YyY2IsIDB4NTdlODdmNjksCisJMHgyMjhjNjU3ZiwgMHg0YjhmOWIzZiwgMHhmZDFhYjNjNywgMHhlMGExNjA3OSwgMHg2NjA0YmRmZiwgMHg5ZTQzZDRkZiwKKwkweGRmYzA5MGQ3LCAweGU3ZjhmZDE5LCAweDViNzllNTg5LCAweDdmMzg0OGRlLCAweGUzNTc2ZjNmLCAweDFmOWZlM2ZkLAorCTB4MTJkZjhkNTEsIDB4MTJjM2RkNjQsIDB4YzUwNmRjMTksIDB4ZGM1Y2YwNjksIDB4Y2RmNjIxZWUsIDB4ZGYxN2U2NDEsCisJMHhlMjA1ZmI4OSwgMHg3ZDcyOWM3ZSwgMHg3M2JjY2JiYiwgMHhjNmMzZmQ2MCwgMHg3MmFlZmYzMCwgMHhlYzg5NDE5YywKKwkweGRkZWViMTNiLCAweGY1MWYwY2QxLCAweDYwN2M1MzZmLCAweDlmY2IwOGZlLCAweDVkZWQxZGRkLCAweDJjYzBmYzhjLAorCTB4OGU3Y2YzYzcsIDB4N2I3N2RkZTcsIDB4Y2JiZWYxZDMsIDB4MGU3ZWNjNWQsIDB4Y2Q1NzBmNDUsIDB4NGY4MDA3Y2UsCisJMHg0MjM3NGVkNCwgMHhhYTE5MTkyZSwgMHgwMWNjOTQ2OSwgMHhmNDdhZWJlNywgMHg0YWJiODdlMCwgMHg3MGJlZDc4NiwKKwkweGM1N2UyMWQ3LCAweGZmZGY0MmI4LCAweGM2MzUzOWYyLCAweGM2M2NiZmYxLCAweDFiYjEyZGNmLCAweGY3N2M4MGE1LAorCTB4ZWJmMzA5MmYsIDB4YTEyYWQ5N2YsIDB4NDlkZjNmOWUsIDB4MmZlNTEzNDgsIDB4YTBkNmI2ZjMsIDB4YTVmOGI4NWUsCisJMHgwMzYyOTgyMSwgMHg3Y2E0YWZiZiwgMHgyMTIyNWU2NCwgMHhmZTcyZDI3NywgMHg3NzVjNzk2YSwgMHg3ZTNlZmFlMSwKKwkweDdmMjgxMjM5LCAweDk0NDY5MTE3LCAweDk2OWY4YjE3LCAweGViMjZhYmY3LCAweDgzN2EwY2ZmLCAweDNlOGNkZTMyLAorCTB4Y2YxNzZhNGYsIDB4Zjc3YWU0NGUsIDB4ZjgxNDMyNTAsIDB4N2QyZjAzZmQsIDB4ODZiNDhiYTUsIDB4OTRmM2ZmYTYsCisJMHg4MDZiNjY5ZiwgMHhlY2IwMWFhZiwgMHhiOTYzMzY2YSwgMHgyOGJlZDEzYywgMHgzOWE1YzI5MSwgMHgwODlkNTlkMSwKKwkweDE4OGY4Y2ZlLCAweDVlZDcyZTNjLCAweDJlMDBmMjY2LCAweDdlMDA4ZTRmLCAweGQzM2NhMTJkLCAweGQ4ZjE2NGNmLAorCTB4NzIzZGMyMWYsIDB4OWViZDBmMGEsIDB4ZDQ3NTc1YzksIDB4NzA5M2M5Y2EsIDB4ZmY4NDZlOTUsIDB4OGU3OWFmMzAsCisJMHgyZDhkZTUwNSwgMHhmNjNkZTgxMSwgMHg2M2M2ZTMxNywgMHgyMjJmZDc1ZSwgMHg3NWJmMDBlYywgMHhjMTk3ZWVhNSwKKwkweDU1NmViMDhmLCAweDBkNzFmYTM4LCAweGNlMGYxNjdhLCAweDgyYWE1ZWRhLCAweGVkYjcwM2ZiLCAweDFmODNmNjk2LAorCTB4NTU2M2ExYTMsIDB4MzdlZmRjMGUsIDB4OGYzMWMzNWEsIDB4NWU2M2FhMjAsIDB4NmM2MzkzMjYsIDB4YzcxNmQ4OWUsCisJMHgyYzY3YzA0ZSwgMHhlYmEzNmJkYywgMHg0ZWU5OTc1YSwgMHhlOTlhN2M2NCwgMHhmNjFjZjUzOSwgMHgzZmY1OTIzZCwKKwkweGViYjM5ZWUxLCAweDIxZWYxYWE4LCAweGJjYjBkNjVlLCAweGUxODQ0MWZhLCAweGMxMmJlNDU1LCAweDVjZmE4MWRjLAorCTB4MjQxYjg1MTcsIDB4OTM5ZWY1ZDUsIDB4OGRhM2M5MzYsIDB4MzAxYzc3YzQsIDB4YThmYjUwY2UsIDB4YzgyNjdlMjcsCisJMHgzMDY5OWY5YiwgMHhhZWJiZDM0ZSwgMHgyMGNhOTI3NywgMHhjY2U0MjMxZSwgMHhmY2NjYzk0YywgMHg5ZDVmNWM0MiwKKwkweDJjN2ZjNDQxLCAweGU5YzU1MzllLCAweDUzZDcwNjYxLCAweGY4MzA0NjY3LCAweDc0YjYyN2NlLCAweDgxYmY3N2U4LAorCTB4ZDFlOGFhNDQsIDB4NTZkZTU5OTksIDB4ZDFhYmZiOGMsIDB4MTE2ZjQwNWEsIDB4N2FkMDg5NzEsIDB4NGU3ZjcwNDIsCisJMHg3NjI2Y2JmZCwgMHgwZGYyNTIxZiwgMHg2ODJlNDE4MCwgMHg3OWQ2YjkwOSwgMHg0M2Y5YzNkYiwgMHg5N2U2MDBmZCwKKwkweDBlYzRkOTI1LCAweGI3ZmFiMDcxLCAweGY4ODY2ZTA3LCAweGM1OWMzZTg3LCAweDMyMWYyOTU5LCAweGVmMjc3YmMwLAorCTB4ZmJhNjNjODIsIDB4MTg1NmZhNWUsIDB4ZGM0MmJmN2IsIDB4MGJkYjM2ODcsIDB4YzM2MTdlZTAsIDB4Y2M0MmQ0ZTQsCisJMHhjM2U5Mzg1ZiwgMHhiNWJhMDg3NywgMHhhZjNjNzRkZSwgMHg1NDQ4YmY5NCwgMHgzODk4N2UwNiwgMHhhNTBkMWVlZiwKKwkweGFhNjRmYWYzLCAweDNmZmFkMTZmLCAweGJkNTgxYjEyLCAweDhhYjE3NzlmLCAweDNkMjQwN2Q2LCAweGJjODNlYWNlLAorCTB4NGI2ZWEwZTcsIDB4MGQxZWZhN2EsIDB4ZjQyYjYzZGMsIDB4ZmFkMzU2MmUsIDB4YWMyZGE0ODQsIDB4MzI0YjA2MGUsCisJMHhjZmQyNmY4NSwgMHhmMWQxNzFlZSwgMHgzZWI4NTgyZiwgMHgzZGUyZjM2MywgMHgwNzM3ZmFkMCwgMHg4NGZkMDJhYSwKKwkweDdmMTg5MjYzLCAweGJlYzYxMGJhLCAweGU2NDk5MGJiLCAweGU3NzgwNjRlLCAweDg3M2VmZjA0LCAweDVjZjQyZjdmLAorCTB4OWZkMTVmYjEsIDB4ZjdlZjA2MjQsIDB4NGI3Yjk3MTksIDB4OTJkMDNkZjksIDB4OGMzNmIyMDgsIDB4OTE1Yzk1YzUsCisJMHgzYTg3MGYxNCwgMHhlYzVjNjIwNiwgMHhjYjM0NjI0MCwgMHhmMTdiMzVkZiwgMHg4ZTMxMTA5ZCwgMHg0ZjE4YTc4MCwKKwkweGU0MGNiYmNjLCAweGM5ZjMxMWIwLCAweGUyZjk2NGFhLCAweDc5ZDI3ZTVjLCAweGQ5M2NlMzU2LCAweDcyN2Y3Njc2LAorCTB4ZTAwMTZhNzIsIDB4YzM0ZGUyOGYsIDB4YmMwMWE2ZjEsIDB4MzBkNzdiODksIDB4ZjkxZjI1YWUsIDB4NDNmMDEwZmQsCisJMHhiZjRhYmExZiwgMHg1YmFmZjRjZiwgMHgzODU3Mjc0OSwgMHg2MTZkMmM5ZCwgMHgyNTlmNDBmMSwgMHgyNGE5ZTkwYiwKKwkweDUxM2JiZjgyLCAweDA0YzdkZjI0LCAweDQ5MzFiZjBlLCAweDVlY2ZiNjE2LCAweDM4NDgyNGJjLCAweDYzODcwYjRmLAorCTB4ZTRjMDc3YWEsIDB4NzdkZjliYmMsIDB4Y2Y1YjEyNzgsIDB4MDA3N2RlYWQsIDB4N2VmMGVjYmUsIDB4ZGJmNmExYzQsCisJMHgzMGZkYjBiNiwgMHg0NzNkMDE3YywgMHhhNGY3NWVhMywgMHhhYjBiYmM2YywgMHhkMzg3ZmQxNCwgMHg4ZGZiMDkwMywKKwkweDNmZmVjMmNlLCAweDEwMGRlZmU0LCAweDVmYjdhNWIyLCAweDNmZDMzZTY2LCAweGY3MTUyZjQxLCAweDRlZWI4OWU0LAorCTB4ZWQxN2U4MTIsIDB4YzZkZjBmYmQsIDB4ZjdmYWFkZWUsIDB4ZGYxMTRmNzksIDB4ZDNlZjk5YTcsIDB4OTZlOWY2Y2MsCisJMHhlZTM5MmJkMSwgMHhlYTZhOWY0YiwgMHhmMGJkYzc0YiwgMHhiNzJmMWRlZiwgMHgzYjI3OGY5MCwgMHg4M2M2YzFlNywKKwkweDJmMGExZDczLCAweDMxNmU5M2EzLCAweDJhNzU4YTNkLCAweDY3MGJkOWUwLCAweDNjMDRmYWM1LCAweGJmNjM3Y2UxLAorCTB4OGE1ZDM5NWMsIDB4OWQ0MmRhNzUsIDB4MzhlZmNjZWYsIDB4NTdlYjI5NWYsIDB4YmZjYjMwZjcsIDB4NWQzOTU2MjUsCisJMHg1NGNlZWRkNywgMHhmNDViZGM0MSwgMHhlZTNlMGEzYiwgMHhjYjVmYmYzOCwgMHg5OGUzYzQ5OSwgMHg0NDM1MjRhOSwKKwkweGE0YzJkY2RlLCAweDMwZmVhMGI4LCAweGU3Njk1ZGZjLCAweDNlNTg1OGY1LCAweGVmZGVkMmIyLCAweGMyNzViMzg5LAorCTB4MjVkNzM0M2QsIDB4YTQ3YTdmNzYsIDB4NzEwMTNmYzIsIDB4N2Y0NjVkOTIsIDB4OTE3Y2JmM2YsIDB4Zjg3MTc3ZDcsCisJMHhmOGFmZjVmNSwgMHg5MTY3N2VmMCwgMHhhYjM1ZWNiZSwgMHg5YmZmOTA4ZCwgMHhlYmYyMGVmNCwgMHgwN2IyYThhMiwKKwkweGY1N2Q2OTMzLCAweGRmYzhmZDg2LCAweGJlY2E1MjhiLCAweDdjZmNhNGNhLCAweGFjMDM4NmNkLCAweGFmYjJmNmZkLAorCTB4ZTkzZDQxZmEsIDB4ZDg5N2FiMjAsIDB4NGY3ZTAzNWYsIDB4YzY3YmMxYzgsIDB4ODhmNWY5MjQsIDB4NzE1OTI2MWYsCisJMHgwYWI5NzU1ZSwgMHhkNWVhZGZkZiwgMHhhM2QxZGU1ZiwgMHgxYWUwMjJmZSwgMHhhYmQyMmNhYSwgMHg5ZmM1ODMxYSwKKwkweDgxZTk3YjVhLCAweGMzODYwOWM1LCAweGE3OTBhZDNmLCAweGFmNzhlZGM0LCAweGY3Yzc2NjQ2LCAweGFmZmJiMjQ0LAorCTB4ODZmZWZiM2QsIDB4NGY5ZTE5ZjcsIDB4ZjAwNGZlNzIsIDB4MzVkMTEwZDAsIDB4MWZkNjkzMjcsIDB4ZTMwY2Y4OGQsCisJMHhlYTlkOTI1MCwgMHhiMGM3ZTAyMSwgMHhiYTJjYzk5YSwgMHg5ZDZiYTk1ZSwgMHhiMjI1ZjQwMywgMHgyMGQwNjZjYywKKwkweDA3NWZiOTVjLCAweGYwYTJmNGRlLCAweDlmZWRlYjdiLCAweGE2YzI5MjNkLCAweDQ2M2FjMDcxLCAweGYwZDAzZTcwLAorCTB4NDM1ZjM3ZjYsIDB4ODJlMWIyZGMsIDB4ZTFlYTA2ZDEsIDB4MGYwZDhlODgsIDB4YTIzNWJlODIsIDB4MzBkZmQ3ZTMsCisJMHg1ZmVlY2MzOSwgMHgwMDhmNzU4OCwgMHg3ZGZkMWRiZiwgMHhkNzFlYmI3OCwgMHhiNmUzYTIzZiwgMHhjOGZkZjA0NSwKKwkweDAxNjQ3NmRmLCAweGU1M2U4YzlkLCAweGQwYjYwMTY5LCAweDE0OGRlZmIzLCAweDJmY2RmZGY5LCAweDE4NmY5OWFlLAorCTB4ZTAyNDhlMzIsIDB4NTRhYTI3ZjEsIDB4ZGUzYzIxNDUsIDB4OGFiOGYwNjAsIDB4NzFkZDUxZjksIDB4ZDE3OGQ2YzcsCisJMHhkZmJmMjdiOSwgMHg4Yzc2ZjU0MiwgMHhlMTI2NWU4MywgMHg4YmQzZjAzNiwgMHg3ZjRhYzU3YiwgMHhiYTRhYzllMCwKKwkweDY4ZmJmYTNmLCAweDgwNDE1ZDFmLCAweDg1NzI1Y2RlLCAweDdhMDFmZmRhLCAweGM4YjEyOTc4LCAweDI0ODZlNWVhLAorCTB4ZTYxNWY3ZDksIDB4YjhmYjU5NGMsIDB4ZWQ2NGRiYzQsIDB4NjQwYjU5NzcsIDB4MjMzOTA5ZjUsIDB4YjQ0ZmRmNjQsCisJMHhmN2VhY2E5NSwgMHhmNjRiYmYwZSwgMHg1MmJkYTU3ZCwgMHhiNGYwMmY1NiwgMHg3MjFmYmVjOSwgMHg3ZWRlNWRhNCwKKwkweDBmMDFhODljLCAweDA3NmQyNzg1LCAweDZiM2UyY2ExLCAweGQwZTJiNzQ3LCAweGExMDc4ZGYzLCAweDA2MTdmMTFjLAorCTB4ZjQzZmE1MGUsIDB4MDc2ZDJiOGUsIDB4MGZlMTc3ZTEsIDB4MTE1N2RlNTUsIDB4NmFlOWQxZmUsIDB4ZGMxNzViYTMsCisJMHhhMWE4OWEwZiwgMHg4YmM5MjVlNSwgMHg2MmFkNDRmYywgMHgzMDVlNTVmNywgMHg2ZjAxYmIzOSwgMHgwOTRhYmVlMiwKKwkweDEyMjk0M2Y4LCAweDYyNWVlNjJhLCAweDMxNjdiMmY3LCAweDQwNDlkODdmLCAweDE5YTdmMDBjLCAweDlkZTNmNDI2LAorCTB4ZmFiZTM2ZDQsIDB4NGVjNzE2N2IsIDB4ZGEzN2JlMDMsIDB4NzdkYjI1NTcsIDB4NmNhNzE1YzksIDB4YTk2NGE1ZGYsCisJMHg2NWNiNGYwMiwgMHhjM2YzMGFmNSwgMHgyNWM3ZWZiMiwgMHhkZmI1OTJhZSwgMHg4MTVjN2Q2NSwgMHhmNTY1MjdhNywKKwkweDBhMGRiNjg5LCAweGUwNTY2ZDNjLCAweDc2YjI2N2U5LCAweGRjMWRkZjQxLCAweGY4MzZmNTNmLCAweGNhMzk2ODk1LAorCTB4NzgwZTU5ZGIsIDB4MGZiY2YzYjgsIDB4YjNiYzMxZjEsIDB4NzRmMDFjYjUsIDB4YzQzNmM5YzcsIDB4NTFjNzkxNTcsCisJMHhlODcyZWMwZSwgMHg1MDgzYzY5MSwgMHgwNWZkYTg3YSwgMHgyNzM0MGVmZCwgMHhkOWE4Nzk2MiwgMHhjM2E5ZmU4YSwKKwkweDFlNTgzOWNkLCAweGVmZTFiNjY5LCAweDhlMWU2YWJmLCAweDc2Y2RmYmU1LCAweDNjZDM3ZjJjLCAweDY2Y2VjYjFlLAorCTB4Y2Q2ZDk2MDcsIDB4YWVmZGY4NmQsIDB4ZGZlNjc2ZTYsIDB4ZDdiZGU5OGEsIDB4ODA3ZTA2OWYsIDB4MWViNzk1NmUsCisJMHgyNzY0M2VlZSwgMHg3ZTA0NGVjNywgMHhlZGVlMWRkOSwgMHhhZWEzZmE4NiwgMHgyZmMwODllOCwgMHhhMTEzMDAwNywKKwkweGNiY2Y5Yzc4LCAweDNkZjYyOWIxLCAweDBkYmY5NGM5LCAweDkxNzU2NjQ5LCAweGIyYTZkMDU3LCAweDVlMWU4MDE3LAorCTB4MDllMzMxYjIsIDB4OGYyMTFhNGQsIDB4OWEyNDcyYWQsIDB4YTA2ZWFjMmQsIDB4ZTYzNjQ0NzUsIDB4NjEzYzY1NWIsCisJMHg1NWU0MjU0ZiwgMHg2MDc3MjUxMCwgMHg3YmQ0MjI3ZCwgMHg5MGZiNThjMiwgMHg0MTEzMTk4ZCwgMHhmMWNlZmYwZiwKKwkweGJjOWY3YjYwLCAweDIwZTQ5MmMwLCAweGNmNTdlMGYxLCAweGJmZTA0ZDViLCAweGEwNzU3NjM5LCAweDhjNzFlMDA5LAorCTB4YTRlY2IxZmIsIDB4OTY4ZjNiNDAsIDB4MmQwMjlhYTUsIDB4MGE5M2Q5YzgsIDB4M2Q5NDQ0YmQsIDB4YzlmMWQyYWEsCisJMHhkYjZmYjA3MSwgMHhiZTQzY2MzNCwgMHg3ZTgwNGI1YiwgMHhkZWNjNGIyNywgMHg0ZmY1ZGYxNSwgMHgxMzE3ZjllMSwKKwkweDFkNGY2OGY1LCAweDYxMTdkOTU3LCAweDdiZTQ5M2RlLCAweDY0YmNlMDAxLCAweDdiODQxMGUzLCAweDBlOTdjOThmLAorCTB4YjFiNDViZjAsIDB4N2NlM2Q1OTAsIDB4ODBiNjQ4MmYsIDB4NjdjMTk2YmEsIDB4ODk4MmM2ZmEsIDB4MGE1YmRjYWUsCisJMHhlMGMxMDU5ZiwgMHg2NjZjOWQ1MywgMHg5ZWM3YjZmYSwgMHhhODgwN2EwNiwgMHhkN2I0YWYxZiwgMHg1ZTNlNzljMSwKKwkweGEyZmJjNzZhLCAweDc2N2ExY2M3LCAweGJjMjYxZDdlLCAweGY2MzQ0MGU3LCAweGZlMDE2OWUyLCAweDVhYzliMzljLAorCTB4MmUxNTM3ZWMsIDB4ZjM1ZjgxOWUsIDB4NzM5ZTM1N2UsIDB4Mjk1NTNjMjUsIDB4M2E0NzBmNGMsIDB4NDY3MzNiMDEsCisJMHhjNzA1ZGEwNCwgMHhiN2RlZWM1NSwgMHgxNGNjZmJmMiwgMHgwYzVkMWY2NiwgMHhlYjc3ZWUwZiwgMHhhNmNiZGJjNywKKwkweDg3YmFiZGQ0LCAweDIyYjNkNzhlLCAweDcxZWU4NzBjLCAweGFjN2Q0NDBjLCAweDdiYzI1MWE3LCAweDFiZTczZGI1LAorCTB4YmQ3NmIxMmYsIDB4ZTMwNDgzOGQsIDB4NWZlMTMzOTIsIDB4OGVkNWZkYjQsIDB4MzFmYWZmMDcsIDB4MTViM2ZlZmQsCisJMHgyMTk0MzYxMSwgMHhiZjA4NDFlNiwgMHhiM2M3ZjlmYiwgMHgzZmE4MGM2MywgMHg1NjljOWVjZCwgMHgyNjcxNzIwNiwKKwkweDMxY2Q3MzhmLCAweGRjMzFlMjY5LCAweGUwZThiMWE1LCAweGM2ODViYTA5LCAweDgyMTQzNTgyLCAweGE1NmM3MTY0LAorCTB4YTljYzllMGUsIDB4MDZiZTVkNGUsIDB4NGZkOTY1Y2EsIDB4ZjBhZGEyZWEsIDB4MzVjZWQ3N2UsIDB4ZDFkNmM2YTAsCisJMHhmYzhjNWMyMywgMHgzMzQxZmJjZiwgMHgyNmRjZDc1ZCwgMHg3M2Q5OTViNSwgMHg2YmRhYWU1YywgMHg0MzNmMmE2ZSwKKwkweDllNzFlZmQwLCAweDgwODE0MzJmLCAweDg3MTY2YWY2LCAweGM1OTdlOGI3LCAweDMyNWI3NGU5LCAweDkxZTQxMzhmLAorCTB4YTdkZjc2M2MsIDB4MWRiMDBlMzcsIDB4ZjY2YmE0ZTgsIDB4YzQ0MjAzMDcsIDB4NWNlZGU0MDksIDB4Yzc0NGZjN2YsCisJMHhiYmJlNTVlNiwgMHg0ZWNkZTYyMCwgMHg3MWZlN2E2MSwgMHhkMDRjYTUxZCwgMHg3MjY3ZWYyNywgMHhhYmVhYmYyMCwKKwkweGZlZTk4YjQ3LCAweDJhY2MzYmYzLCAweGFkY2ZjMzhjLCAweGI4NzgwM2RiLCAweGE4ZjFjZWRjLCAweDllNzBlZDI1LAorCTB4N2RlNmI4YTYsIDB4OGE0YWI5ODYsIDB4OTNkNzlhN2IsIDB4NzM0ZWI2OTcsIDB4MmNiY2EwNzksIDB4MDNjYTNhZjIsCisJMHg1ZjcwZTVlNSwgMHg0NWM4Mzk2YiwgMHg3YzQ1MWYyMSwgMHhjZDVjZDNkMCwgMHhmMjIzNzJmOSwgMHg0ZGNkNDNkMywKKwkweGVjZGMzZjU4LCAweGYzNDhmMmMyLCAweDViOTdjZTVhLCAweGU2ZmRmZGIxLCAweDc2NWYzOGU3LCAweDBkYmNiZTczLAorCTB4YWU2OGVmN2YsIDB4NjZlZGYyYzIsIDB4Mjg5Njk2MjcsIDB4N2UwMTZmYzcsIDB4Y2M0ZTBkNTMsIDB4ODM3NzdiZWYsCisJMHhlYjdjNDA5ZSwgMHhmMzFlODc3MiwgMHg3ODg5ZTgwZSwgMHhjODU4ZjllMSwgMHhiZGUzZDFhNywgMHg4ZDVlNjUzYiwKKwkweGQyZjdjZjkyLCAweDI1ZjdkZjQzLCAweGY0ZjMwMGZlLCAweGJlODBjM2U2LCAweDllOWExMTk4LCAweDA5YWIxMThlLAorCTB4OTJkZmQyZjgsIDB4YmU4MjI2OWIsIDB4MzU2YWNjN2QsIDB4NjU3ZDNlODEsIDB4YTVmMjEzNjMsIDB4NDlhYjc2NjMsCisJMHgyNGRmZWI0YiwgMHg5ZGRhY2MzZiwgMHhkNjllOTM1NiwgMHhjM2UzN2JmZiwgMHgzNTY1ZGRhYywgMHhkZmZhZDE4NSwKKwkweGVhY2ZiZjkzLCAweGM0ODJjMjZlLCAweGU3YzhjZDI5LCAweDA4NzQ4OTRiLCAweDIxYjk0N2NlLCAweDE3MTUwYzczLAorCTB4MWU5NzVlNTQsIDB4MmUzMTczODIsIDB4MzgxOGRlNzEsIDB4NTZjOTc1MTcsIDB4YWNiYjhmYTQsIDB4N2Q0MTBlYWIsCisJMHgwZDY2Y2U0MiwgMHgxYmI2YzU1YywgMHhiZjQzNTYwYiwgMHgwZDRhZDhiMiwgMHhiYTkzMWJmNCwgMHgxYmY0MzU3YywKKwkweDI2YTRmZDliLCAweGRjZjhkZmIwLCAweDdlYTFhYjlkLCAweDA2YjM2ZDhmLCAweGNlM2FkM2Y0LCAweGEyMzhjNGM3LAorCTB4OWYwNWRhMmUsIDB4ODM1ZTc5MTYsIDB4MGYyODFjM2IsIDB4MjgxZGRiZjIsIDB4Y2E1YzA0MGYsIDB4MDYzZTU2YTYsCisJMHg3Njg2Yzc3ZSwgMHgzYWMxMmNjOSwgMHhjMWJkNGFhNiwgMHhhYjkxYzg2ZiwgMHgyOTFhZjc4NywgMHhmZTdhOGViZiwKKwkweGJhMmFkMzA5LCAweGRmYTgwNmNmLCAweDU2MjdmNTgxLCAweDlkZmU1YWRkLCAweDk3ZDcxMjkyLCAweGU3ZTA5ZjdmLAorCTB4ZTQzZGU0MWQsIDB4YjFkMDlmNjUsIDB4MDAxZTMyZjcsIDB4N2RlMzE0YjgsIDB4MmJiZTEzMzQsIDB4ZDAyNjljNDksCisJMHgzY2I4OWFiMywgMHg2ZDI1MDk1ZiwgMHgzYmViY2VkZiwgMHhkOTU3OWM4NSwgMHhkZmQwYTdmYiwgMHg3ZGI4NTM3MywKKwkweGQ4M2Y5N2Q5LCAweGZjZjQxZDYwLCAweDg0MzllZTJiLCAweGExZmNlNzY4LCAweDdiMmNjNTMwLCAweGIwOGVhMTVmLAorCTB4Y2JkNzU1N2IsIDB4MzFlNjUzMWIsIDB4OTYyOWYzMmIsIDB4ZjZjM2I2OTEsIDB4MTQ3OWJlY2MsIDB4YzdiZDg0YjUsCisJMHhhZTRmY2NhMiwgMHhhZDVlZWMyNywgMHhkN2I5NGYzMiwgMHhmYzY3MGFhZSwgMHgwZDc4MGFiNCwgMHgyOTg5ZTNhNSwKKwkweDY1NjRmOTIxLCAweGUxMzVmMTRhLCAweDkxMGY2ZjIwLCAweGIwOTRiZDk3LCAweGY5M2VlYzNjLCAweDViMWYzYzM1LAorCTB4OGNlMjJmYjksIDB4ZjI1ZGVmNjMsIDB4ZmVlNTZjZmMsIDB4ZGRmNDVkMDQsIDB4YmY4MzJiNWYsIDB4ZWE5ZmMxODYsCisJMHg3ZDYwMGI3NywgMHgwNDRkNzMxNSwgMHhmYzgxNTZmYywgMHhmMDZiZTNlNywgMHhiYjNmMjUxZiwgMHhmYTcyN2M1NSwKKwkweDlmNzYzYWRjLCAweDZiMWYyZmJmLCAweGM3YzIwOTRhLCAweGIyOTc1ZTQ0LCAweGRjMmE3YTE0LCAweDNlZmM4MzFiLAorCTB4ZWMwNjBmNzgsIDB4OWMxMjNiZmMsIDB4M2Q5NzQwMmQsIDB4NTVhZmJlNjUsIDB4YjJjNjg3NjAsIDB4MmRiYjkzZjcsCisJMHhiYmYwMzVjZSwgMHgwM2Y5NjNhNCwgMHhiY2Y2YWYyMiwgMHhkMDRiZjVjYSwgMHhmOTRhOWVkYiwgMHg2ZWJiZjIxNSwKKwkweDhjZjQxNjEwLCAweGUwNzVhM2FjLCAweDhlMmM0MzY3LCAweGU0OGZkMGY1LCAweGVmODE3NTc4LCAweDFmY2E4NzMwLAorCTB4ZTFjYjlhN2QsIDB4ZTU5MTI1YmUsIDB4ZmU2Y2Y2NTUsIDB4MGZkZTg2ZTYsIDB4MGE4ZjA1MGEsIDB4ZGMyZjI4ZjUsCisJMHgzYzNjYjg1ZiwgMHg5NzY3ZTUwMiwgMHhmZWYwM2M0NCwgMHgzYzY5NTc2YiwgMHg2OTVkMmRlYSwgMHhiNzk0MGQzYSwKKwkweDRhZWUyZWRhLCAweDJiZTM4MDFiLCAweGE0YWVlM2VkLCAweGVmMzYwNmUxLCAweGZlNTBmMWQ4LCAweDExNWNlOTI2LAorCTB4NzkwZmJkYzgsIDB4Y2ViYjYxM2UsIDB4ZTAzN2U0MzUsIDB4ODYxMTFlMWYsIDB4MjU3YmZhNzEsIDB4NDFjMDExNmYsCisJMHgxZDc3NTc2OSwgMHhjZDY2NTU5ZCwgMHhkMzVmNmJlZiwgMHhmZDgxOGRmZCwgMHgzZDUxOWVkNSwgMHhhY2RkYmYwNiwKKwkweGY0ZGI1ZGJkLCAweGVkM2M4MTM1LCAweDA5NTc0ZDkxLCAweGJjZGY4ZmU0LCAweDlkMTlkZGZkLCAweGMyYmQwNTZmLAorCTB4MzIyNDAyZDksIDB4MTNlYThiYWMsIDB4ZmNiZDdlYjQsIDB4YjUxMjRiYTQsIDB4ZWMwMzMzZDMsIDB4NjZiZmUxZjIsCisJMHg1NGJjNGE3OSwgMHhkZTdkZTdkYSwgMHg5MmU2NWI0YiwgMHg3YTk1YzNlNywgMHg0NGRmMzE4YSwgMHhmYmM0OGRlZCwKKwkweDllZjYyYWFhLCAweDdhNTdjODgyLCAweGQ0ZjNkYjhmLCAweDgyOWIzZjVlLCAweDc0Y2ViODdlLCAweGZkZmViZDk5LAorCTB4ODIzY2U3NGYsIDB4ZjMwYzIwN2MsIDB4ZmY2ZDVlMzMsIDB4ZmFkNjBlM2MsIDB4OWZiOGNlODcsIDB4ZDNmNTY1YmMsCisJMHg2YmY5ODM3NywgMHg1ZjY3OTgxMiwgMHg1NjU5NzRkYiwgMHhlZDdlZTJlZiwgMHgyZmJiMmQ1NiwgMHgzNTRmZmI1NCwKKwkweGM3MmEyNWNhLCAweGM4OWUyMmQ2LCAweDAxMDNkZDAxLCAweGZkYjQ5NWYyLCAweDgzZGUxN2I5LCAweDA0YWJiZjI5LAorCTB4MWQ3Y2ExODAsIDB4ZmI0ZWM5MzksIDB4ODg3YjcyNTUsIDB4OWQ1ODc3OTAsIDB4OTVjNDhmZGIsIDB4ZTI3MWVhYzIsCisJMHg3YWIzMWZmYiwgMHhhOWZlZjg5YSwgMHg0ZjNhNzY0OSwgMHhlNzY4OTI2NSwgMHg3NWUzNmZmZCwgMHgzM2Q1ODc5NywKKwkweDY0N2ZmN2M1LCAweGJiNTg5YmRmLCAweDQ5OGVkMzdlLCAweDNmMDVjZTcwLCAweGRmY2FhNTM3LCAweGRkZmNhMjAxLAorCTB4Y2Q3YzVhOTIsIDB4M2I3OTFhN2MsIDB4ZGRlMmZmZTcsIDB4ZGZlZjhhOWYsIDB4OWMwMWYxMTUsIDB4NzMwOTM2ZDMsCisJMHg2YTU3NmFlNywgMHgzMTdmNWZkMSwgMHhmMDNmMmRiYSwgMHg3NzkxNTA3ZCwgMHg2MTM3MjhlMywgMHhlYmRkNTQxZSwKKwkweDBiODBiNzAzLCAweDFlM2E2ZDUzLCAweDQ0Y2E3YTBmLCAweGExNTRmZjllLCAweGU1OWM2MjM2LCAweGM3YzY3YWYyLAorCTB4OGI3OWU5NDMsIDB4ZTE5NGRlOWIsIDB4N2YzYjRmYWIsIDB4OTEwMzE3OGYsIDB4NGY0YmJlNzQsIDB4OTBmN2IwMjQsCisJMHhlZTMxM2JiMywgMHhlOTk1MzgzZiwgMHgyMmJlZjBmMSwgMHhmOTE1ZTdkYywgMHhjNDU5YjE1YywgMHhlYzcxZjYwZSwKKwkweDVkZWM2MTFiLCAweGM4OWRiM2M4LCAweGMxYmYxNzVmLCAweDFiNzVkN2ZjLCAweDliM2NhMjBlLCAweGZmYTJiNmFmLAorCTB4NjczZjVjNjgsIDB4NDdjNDJhNzEsIDB4MzAwMzlkNGMsIDB4MzZmNGRkZWUsIDB4NjczZmMzOWUsIDB4Y2I5Yzc5OTgsCisJMHhjZjA4MWI5NywgMHg1ZmUxN2RkMSwgMHg5N2Y4MWQ3YSwgMHhiZmUxM2JmZSwgMHgxODBkZWE5YiwgMHg4NjEzZGFlNywKKwkweGM2ODI2Y2Y2LCAweDFjNDFiM2FiLCAweDU3N2IyNGYzLCAweGRiODcyMTcyLCAweGUyM2ZjZWQwLCAweDc4ODdmZjdkLAorCTB4YzU5ZGFhM2QsIDB4OTU5ZTQ0NjksIDB4NTRhMWY3OTgsIDB4OGYwMzgzMTMsIDB4N2U0ZGQ0ODcsIDB4NDNjNDE0N2YsCisJMHgyMjRhZmUwNCwgMHhiN2Y4MWI0OCwgMHgxYzZjMWUyOSwgMHg4M2MwMzYwZiwgMHgyZTNmYjc4MCwgMHgwNjY1ZmI0MiwKKwkweGJkOTU2YjhlLCAweDFlZTAyYjVmLCAweGU5MmIxY2VhLCAweDE5NWJhYzQzLCAweDNjNjY1ODI3LCAweDVkZjgwYzU0LAorCTB4ODE3OTkzNzYsIDB4YmUzOGQyOTcsIDB4ZmJjYzVlMzUsIDB4NDEwNjczZmIsIDB4YjhmMDI4YjksIDB4NWRkZTJmYjIsCisJMHhjNGQ3NzFhOSwgMHg1ZmZkYmNiYiwgMHhkYzI1Nzc4YywgMHg4ZjJkNjU5NCwgMHg3ZjdmMjk3YiwgMHgyZmY1NTUyMSwKKwkweDM2ZmZlMzg1LCAweGM2ZWNlYTdmLCAweGI5ZjZiMmZkLCAweGM4NmY0NzRkLCAweGEwZmMyYWRmLCAweGFiYmYyZWZmLAorCTB4N2E0ZWI3ZjAsIDB4ZTIwYTg5NmQsIDB4N2M3YjRhMzIsIDB4NmJlM2JhNWEsIDB4ZGY3YmJmYTAsIDB4MDllZTQ3ZmMsCisJMHgwMGY1N2M1OCwgMHg5MDc5M2ZjYywgMHg1MWFiZTVlZiwgMHgxMWVjZmI3ZiwgMHgzNTVmNGY0YSwgMHhhOWQ0M2YzMiwKKwkweGFkNmE1ZmZkLCAweDYzZTk3ZDc5LCAweGIxMTUxNWY2LCAweGVjZDVkMDA3LCAweDIwYjQ4ZmE2LCAweGNkNTM2NmFmLAorCTB4ZWEzYzU4MjIsIDB4MzA5ZTljZWYsIDB4ODFmMjg0N2YsIDB4YzZkMTAzMmEsIDB4NTU1ZmYzZDIsIDB4YWU3M2RlYzUsCisJMHgzNDRiYzA4MiwgMHg2ZDI3MWU5NiwgMHgxZTIxYTQ5ZiwgMHhkMmI1YWY3OCwgMHgzMWU4ZjFhOCwgMHhiN2JmMjQxZSwKKwkweGI5ZWZlN2FhLCAweDc2NTJjMzUyLCAweDU3NmQ1NTdmLCAweGI0ZDM3ZTYzLCAweDc0OGUyY2UxLCAweGVmMGRiMWJmLAorCTB4ZjIzOGNlMjUsIDB4Njg0N2E1ZTgsIDB4MmFlZDU5M2IsIDB4ZTJiNzc5NjYsIDB4NTRlZmQxOWUsIDB4ZmExZjEzMzcsCisJMHg3ZTYxMmE3YiwgMHgxZGM3ODk1NCwgMHhlZTMxNmI5NywgMHg2MWY3ZWNhOCwgMHg0ZDYzZjMyYSwgMHhiZjJjNGI1MiwKKwkweDRmY2IyZjYwLCAweGVlOTFlNzEzLCAweDkwYmU4OGVmLCAweGJiYzNjMWU1LCAweDVhOGQ5NWE2LCAweGQwN2NjMGNmLAorCTB4ZmVhM2Y2M2YsIDB4NTU3YzMwZDEsIDB4NjFhZmUwM2UsIDB4OWY0Njc0OGMsIDB4MWIwM2Q3ZWYsIDB4ZmQ4MmZlOWEsCisJMHg1OTU4ZmM5NSwgMHhlOWRmYThkZSwgMHg0ODIzZTZiMywgMHgzYzVmNDIyZiwgMHhiYWMxZWNkNSwgMHhhYjM1MGZkMiwKKwkweDZlMzAzZmU0LCAweGVlMmZlMjMzLCAweDVlNDcyODE2LCAweDY2MTg5ZmI1LCAweDk1ZjZlZWZkLCAweDlkODRhYmIwLAorCTB4MDRkYmI0YTUsIDB4YjVlZjEwYmYsIDB4YzNmYzE0MGQsIDB4Nzc3YjExZjAsIDB4YmNjYWMzNTEsIDB4MTVmZjM5MzQsCisJMHhkOWYyOTU3YywgMHg3ZjhjMzQ4MiwgMHgwMDZmZjljYSwgMHg3ZmY2YzYxZiwgMHhkM2Y2MWYxNywgMHhmYzBkYTM3ZCwKKwkweGVjYTk1NTM1LCAweGRkMjU3MzdkLCAweGY5MzIyNmQ3LCAweDc1NzdhNGE5LCAweDE5ZjUxYWI5LCAweDNhMGJiZDI1LAorCTB4MTliZWNmYmYsIDB4MjBiMzc1ZmQsIDB4MzFkNzRmNTYsIDB4ZmJjMjQxYWIsIDB4ZmY1ZjI3NTIsIDB4YmEwNjQzZTEsCisJMHhhN2I2YWU4NCwgMHhlOGY3YjJiNCwgMHhmYmVlOTI2ZSwgMHhlOWIzODFjYSwgMHg5Njc3ZGYzMCwgMHg5YzMzYTQwMywKKwkweGY4NjY1YmRkLCAweDQ3ZDY5NDU4LCAweGJiNGQyZThlLCAweGI3OTUxY2I2LCAweDE3ZjE4YmZmLCAweGJlNzNmZjY0LAorCTB4Y2EyNDFjOWIsIDB4ZDQ3MzA1N2IsIDB4ZDM5ZjM2MmEsIDB4MjEzZWYyYzgsIDB4Y2RjN2FjZWYsIDB4Njc1NTc5ZWUsCisJMHhkMzdiZTJiNiwgMHgxMjJmYjg2NCwgMHg3ZGQyYzhmOCwgMHhjNThlYjI2YSwgMHgwMTQ5MzQzNywgMHgxMTc1MDhlZiwKKwkweGU5MjMyN2NmLCAweGIxNDY0YmVmLCAweGY5OTQzODc3LCAweDRmM2NmNTk4LCAweDM3NzE5OTczLCAweGJlNTIxM2RlLAorCTB4M2RmMjI0MDcsIDB4Y2E3OGY5ZWIsIDB4N2Y0NDgxNzcsIDB4Zjk1ODJmNzEsIDB4MzRjNmQwMmUsIDB4OTBhZDdmN2UsCisJMHhmODM4YjIxNCwgMHgzNzUzZjliNSwgMHhmZjAwYzljOCwgMHg2NmQ1Zjc3MCwgMHhhNGI2NzNiNCwgMHhhZTQ3ZjFmZCwKKwkweDZmM2M3ZTUxLCAweDNlN2VlMzRiLCAweGJmNmM1ZDNmLCAweGZmNmM1ZDBlLCAweDZhMTc0OWZmLCAweGVmN2M1NmQzLAorCTB4ZTJlOTY2ZTMsIDB4M2Y3ZGFiMTEsIDB4OGY5YzViYWMsIDB4OTZmYzczZGUsIDB4NzhiMWNmMWUsIDB4Zjk2N2I4MGYsCisJMHg0NzFlZjhhYiwgMHhlMzA0MzdjZiwgMHhjM2YzZDc0MCwgMHg2YmIxNzQ5NCwgMHhiYWNmYTMzZCwgMHhhZjE0NGM1YiwKKwkweGQwYjk0ZjIzLCAweGI4ZTIzMDNmLCAweDBkYmZlZjEzLCAweDk5MGVkZjdiLCAweDkwZTBhNGM2LCAweDE2ZWIwZDQzLAorCTB4MWJkMDgyN2EsIDB4ZGY4MGZjZmMsIDB4MWQ3OWUxNTMsIDB4NmUzN2NhMzcsIDB4YWZmMWJlMzYsIDB4ZmI4ODZiOGEsCisJMHg0ZjVhZGQzMiwgMHhkYjkwMDlmMSwgMHhiZTgyYzM3YiwgMHg4ZDI1N2Q5NywgMHhlZjUwZWRjOSwgMHg5Y2EyNWE2ZSwKKwkweDUzNGYwMDU3LCAweGVmMTVkZjM4LCAweGQ5YTg1NjZmLCAweDNiOTdiOTNiLCAweDU4OWZlOGQ1LCAweGZlZGY4M2YxLAorCTB4ZGY2Yjc5ZjIsIDB4NThmYTk1ZjEsIDB4NTA3MmY5ODMsIDB4MGQ5NDQ2ZmIsIDB4NWYyZjk2MmEsIDB4YmNjNTZlNTgsCisJMHhjMDdiYjAyYywgMHgxN2ZjMjE1ZiwgMHg1ODQ3ZWZjYSwgMHhkMWQzYzJjYiwgMHg2OWQ1MWVkZSwgMHhjNzNjZjU4NywKKwkweDVmMGExM2Q2LCAweDEyM2U0ZDBkLCAweGE4N2NlZWY4LCAweDE1ZjYxYmY5LCAweDljMDdlNzliLCAweGJkZTkwOThmLAorCTB4OWNmOTk2NzYsIDB4MWJlZjhmYzEsIDB4NmRmZjhiYTUsIDB4MzUyNGZmZmEsIDB4ZmU1NDQ5NzEsIDB4YTY2ZTQ5ZTYsCisJMHg1N2E2MTI0ZiwgMHg1ODlkMjJjZSwgMHgyYzNlMjFjZSwgMHg0ZmU1ODQ5ZCwgMHgyYzM2MjdjZiwgMHhhZWY2MTIxNywKKwkweDY3MGNhMWY5LCAweDhkZTgzYTQ5LCAweDBmYmUxZjVhLCAweGJmZjVlOTdiLCAweDRjZmJlMmU3LCAweDg1NmM4ZTc3LAorCTB4ZTU1YmE4OWMsIDB4NTVlYTU2YjcsIDB4OGZiZTA1M2QsIDB4ZDhmZjAzYTcsIDB4MmI3NGY3ZjMsIDB4N2IxYmZmY2EsCisJMHg5NDUwN2FhNywgMHgxMDdhNGE3ZCwgMHg0YTZmZjZiZiwgMHhjNGJlZWNkNSwgMHg1ZTUxMDdjOSwgMHgxZjU5OWE1NCwKKwkweGZkZjk4NjMyLCAweGUyNjQyNjI3LCAweGNkZjNmMWY5LCAweDZmODJjZDg0LCAweGVmMmFmYzQyLCAweGRmYzU4YThjLAorCTB4NzdmODRhOTcsIDB4MmFiZGRhNzksIDB4OGI3OTYyM2MsIDB4YTg2YWRkMzIsIDB4NzllZDY2ZWYsIDB4NDRiNzE2NzUsCisJMHhjMjIzNzllYiwgMHg4YjcyZmI1OCwgMHg2N2RkZjIxYiwgMHhjYjllMmYxMywgMHhhZWVkOTBiOSwgMHhiZDEzYmZmNiwKKwkweDdiZjlkODgwLCAweDEyN2ViZTA2LCAweGMzYThiZmVkLCAweDg5YjZmMmMwLCAweDliZjYxYjM3LCAweDEwNDk3NjBmLAorCTB4ZTk5N2Y3M2IsIDB4ZWUwZmJjZWMsIDB4ZTBmZGY4YzcsIDB4ZTE1ZmI5MzIsIDB4MjY3ZWRlMjEsIDB4ZTAxM2FjYTMsCisJMHhmYjc0YmJmMSwgMHgwZDdjZTBmNywgMHhmNzVjZWU4ZSwgMHg1M2Y4MTE1NCwgMHhjMmZjMDQ1NCwgMHgxODc4OGM1ZiwKKwkweDVmYTIyOGUzLCAweDExZWNiNTk4LCAweGM0ODc2ZWY4LCAweGZiNWQ4YmYyLCAweGQyZGRlMmY0LCAweGZjN2Y0MGY4LAorCTB4NTVmMjhjYTEsIDB4NzRkYWRkZjAsIDB4YzE0MjlmYzYsIDB4OTQyZWZlMTUsIDB4MjYxZDg4MjMsIDB4ODMwNmQ1ZjIsCisJMHg0MjdlODg2ZSwgMHhlZDA2ZWY4MiwgMHg0MzdkNTg5MCwgMHg1NzdiZDhmYSwgMHhlOTc3ZDExYiwgMHhjYzMzZmQwMiwKKwkweGVjMzFmY2VhLCAweDEwOGViMDYzLCAweGJmZmZhYzIzLCAweGQyMTliZGY4LCAweGVmNzEwZTk4LCAweDU1ZTgyZjI1LAorCTB4NGE3YzVmYTAsIDB4MjdkYzMxYzUsIDB4NjNiNTNkZjgsIDB4ZWQ0ZDNjYTEsIDB4NDBmZjI4NTEsIDB4Y2YyODUxZWQsCisJMHhjYTE0N2I1MCwgMHgwYTNkYTljZiwgMHgzNjJiYTJlNSwgMHgxNDk3MWM3OCwgMHhjZTdmZDg2NywgMHhiYmY4M2NlOCwKKwkweDMzYTYyZjFiLCAweGMzMjY3OWI5LCAweGM3NWIyOWQ5LCAweDYzYWUxZDNlLCAweGM3ZjNhNTg3LCAweGVjNzVkMTRmLAorCTB4ODJhZDkzZDgsIDB4ZTBhMTJjZmIsIDB4NmZlZmIzZDEsIDB4ZjgyMGNlZTksIDB4OTNkZmNkZWMsIDB4NmNjYmU3ODIsCisJMHhlZmU3ZjNlNCwgMHhjZmRjYTBkNiwgMHgyZTQ2Zjc2ZiwgMHgzZGFlZjgwZSwgMHhjODc4ODc1ZCwgMHgxMjM2NzNkYiwKKwkweGY3MzZlZmM2LCAweGQxMmVkNWMyLCAweGIxNTI0ZWFkLCAweDMzMGJmYjdhLCAweDBiOWQ1ZGVmLCAweDAyNzdiMGZiLAorCTB4ZWVmOWU4ZmUsIDB4ZmRiZjMyODAsIDB4ZmI4NjNmYjcsIDB4OGM3Yzc0MWIsIDB4YmU0OGY2YzcsIDB4NTMyZjQwNjcsCisJMHg2ZmI5NDNlZSwgMHhmZmJhMmZiMSwgMHhjNzdmZDA3NSwgMHgxM2IwN2U5ZSwgMHgzYjA4NmZjYSwgMHhmYmQ4ZmIyZiwKKwkweGJiZjc3ZGI4LCAweGFmN2JkNzBhLCAweGY3MDQ1N2RlLCAweDU2ZmRlZTEyLCAweGY0MWYzNDFkLCAweGMyMjk0NjRjLAorCTB4OTlkMDU2YmIsIDB4YmE3MWI3ODgsIDB4YWVmYWY4MTIsIDB4MWUzOTVhZTcsIDB4MDAxN2VmMTEsIDB4M2M4MmI1MGYsCisJMHhmYTA5MWFiYSwgMHg1YjhmMjU2MCwgMHhmZWNlZWZiNiwgMHgxY2I5ZWYxMCwgMHgzYmY4MTM1MSwgMHhlNWEzODM4MSwKKwkweGMxOWQ0ZWU3LCAweGYzMjg5ZGNlLCAweDgwMWNlOWY2LCAweGNlZmIxZGFmLCAweDljZmJjMzY1LCAweGYwZDkzZjE0LAorCTB4NGFiZjViNzcsIDB4MTdmMzJmZWYsIDB4NjZmODhkZTYsIDB4ZmQwZmQwMjMsIDB4ZTAyZWZmMWUsIDB4MDJiOWIyMGMsCisJMHgwZDMzZjNlMiwgMHgyZDg1ZGZmYiwgMHhhOTlmMzZjZCwgMHhkY2ZjZjg4MCwgMHg5NDMwZTk0NCwgMHg2Mzk5YWNmMywKKwkweGYyMmYyZTIxLCAweDk0ZTQxNzlhLCAweDc0YTM4NjFlLCAweGY1MTJhZDhmLCAweDJlNjA1MmI4LCAweGRjYTE3MjAxLAorCTB4ZTcxZmMxMTAsIDB4NDYyODcyMTUsIDB4OTg5NzFmNTYsIDB4MmVmZWZiMjIsIDB4N2RhYzk2NmIsIDB4YjJlZGNlNDIsCisJMHgyNmZiZGVmNiwgMHhkZmZlMjFiNiwgMHg3YzNjMDFmYiwgMHg0NjVlMjBmZCwgMHg4ZWZlYzFmNywgMHg3ZGVjNGJkOSwKKwkweGM3M2RiY2RkLCAweGQ2OWRiZWVmLCAweDBkM2NiZDI3LCAweGMxZGI2M2RmLCAweDJhZWQyN2RiLCAweGQ2MjNiZmM3LAorCTB4YTNhOWUxNDMsIDB4ZTFmOWQ0OGEsIDB4MTRmMzNmOGYsIDB4MTNiMGE2MGMsIDB4NzhiZGY3NmEsIDB4YmU2N2RlMTgsCisJMHgxZDcwOWRhZSwgMHhmYmQ0MjBmYiwgMHhkMmJmYTJhMSwgMHhmMmZjYTAzZSwgMHgwNzJmYzBjNywgMHgwY2Q1M2ViZiwKKwkweDIzMWRhMWYxLCAweDc5MDY0OWJlLCAweGVmYzE5OTk0LCAweDIxYmI3MTg3LCAweDllZjRkZDE0LCAweDYxZmFjOTBmLAorCTB4MjUyOGZkZTAsIDB4MjhmMjEwZGQsIDB4NGU1NjQzYTcsIDB4MDFlZWM2M2EsIDB4ZmIzZjJjZGQsIDB4YjQzM2YwMTMsCisJMHhmMDI0NWRjMywgMHhmZDJhMDhlZiwgMHhiNjc1ODM2NSwgMHhmZjA0MWYwZiwgMHhiODZhMDdjZSwgMHgzZjdiZDEwOSwKKwkweDViZmMzMTZiLCAweGIyNzdhN2VkLCAweDQ5NjNmMzcwLCAweDBiYmJmOGIxLCAweGVlN2FlMGY0LCAweGMxOTU5YjNmLAorCTB4NzZhNGFjZTIsIDB4NDU0OTYzZmYsIDB4ZTJiMjc2ZmUsIDB4YjI3YmVjOGMsIDB4YWIyMzVhNTIsIDB4ZDc5NGNlYWYsCisJMHgwOWFlOTdkNywgMHgwZjRhMWZlYywgMHgzY2RjZmM1YiwgMHhlZTBmMzM5ZCwgMHhmZjQxNDlmMSwgMHg3YWVmNjI2ZSwKKwkweGQ4NWYzOTYyLCAweGVjZjkwNGI3LCAweGYxNGJmZGI5LCAweGJmMmFiOWVmLCAweDgxZTNhN2FmLCAweDA4NzE2ZmRmLAorCTB4ZDNmODJhZjksIDB4Y2Y3YjM1MGMsIDB4NGNiZWQ5NTcsIDB4YjViYjY3Y2MsIDB4NjE0YTdkZjMsIDB4NmY1Yzc5OGYsCisJMHg2OWZiYjkzMCwgMHg5MzI3NTM5NCwgMHg3ZjRjMTllYiwgMHhjOWUxYjRiZCwgMHg3MTBkN2MxZiwgMHg5ZWNjYmRhNCwKKwkweDcyNjE2NGJhLCAweDE3Zjc3ZjIzLCAweGNjN2JmODJhLCAweDdkMTljMzgzLCAweDJhYmQ5YmU1LCAweDUzZDMyN2I4LAorCTB4YmM4MmUxMWQsIDB4MjZhNTg2ZWQsIDB4ZGMxYmI3Y2MsIDB4YTE4OWY3Y2YsIDB4ZmMxZjkwODAsIDB4MWE3ZmQwZjQsCisJMHgwZWZlN2QyOCwgMHhjODA1YmYyZSwgMHhiOWQwMWVlMSwgMHg4Y2YxZmQ2OCwgMHg0OTg3Mjg0MywgMHhiODZmY2IyZSwKKwkweDljN2NmYjU1LCAweGJmYTg2NGVhLCAweDMxN2UzMTk0LCAweGNiOGZlODA3LCAweDU1Y2Y0MjJiLCAweDU3YTQ2M2MzLAorCTB4MDIxZjAxN2UsIDB4YzBmZDQwYjgsIDB4ZjBmYmRmNGYsIDB4MWUzM2YwNjksIDB4ZmMwMmZjNjUsIDB4MGY1MTMzMDcsCisJMHg3ZWU1MWJiMCwgMHgxZWY2MzY4NSwgMHgwYmJkOTU5OCwgMHg0MjQyZjIyMiwgMHg4NzY1OGZmMSwgMHg1NzYwNzU1YSwKKwkweGYxZmU2YWRlLCAweGM0ZjlmNWYyLCAweDhmMTQwOWIxLCAweDNlNTk3YjBkLCAweGZlOGVlNWY3LCAweDZmODAyNDUxLAorCTB4ZjBkN2UxMjgsIDB4YjdjZjBhOWMsIDB4YTg3Nzc3YTgsIDB4NTA3OWMzYzcsIDB4NzAxNjRiZGUsIDB4YjIwMWU2MjYsCisJMHgxODFlNzhmNywgMHgyMGM5YjdmZCwgMHhhN2Q4MWY5NywgMHg1MGY0NDE2MSwgMHgxMTU1YWNmMywgMHg4MzNjYzA2YiwKKwkweDhlNTFlOWY3LCAweDk4ZjdmNTg5LCAweGY3ZDkxZjM5LCAweDVjZDJlOGQ3LCAweDIyMGFhZTU2LCAweGEwMWVhOTRmLAorCTB4YTAzZDA1OGQsIDB4ZjViYjQyNTIsIDB4NjUwOTdkZTMsIDB4MjU4ZmZmMDAsIDB4ZTIxNmIxZTIsIDB4M2EyZjk4MTAsCisJMHhiZjA3MGQ4NSwgMHg4OTlkZjExYiwgMHhlMDRkMWNjNCwgMHg2ZWMyN2FmYiwgMHg1YTZmYjY5ZCwgMHgzZjU3ZDA3ZiwKKwkweDYzZmYzZGQ5LCAweDY5ZjIxOThhLCAweDg3OWUxNjQ2LCAweDFmOGVmMGU5LCAweDE2YzdlZjg1LCAweDQzZjgxYTQ3LAorCTB4ZWI3OGYxMjYsIDB4MTc1ZjE2YzcsIDB4OGYxZmQ1ZTgsIDB4NmZjMDkwOGUsIDB4MGQ1ZmM3NDksIDB4N2Q3ZDhiZTMsCisJMHgzNWE0NzVhYywgMHhlZDE3ZmEwNiwgMHhmYmQzYmU4MywgMHg0MmJkYTI1ZCwgMHgwMjc0YjJiZCwgMHgxMTY3OGJjNCwKKwkweDVlZmNkNzdjLCAweGM5YTNkMzM1LCAweDBiM2NlYzNiLCAweDc1MjBkYWJlLCAweGM3M2JlMzQ2LCAweDMyYmI5MzE5LAorCTB4YTY4NGZmNjgsIDB4YWIzZGExMWYsIDB4NTFiYTI3Y2MsIDB4NmVkN2JhM2QsIDB4NzdiMTI2ZGUsIDB4NGU4YzZjMzIsCisJMHhmYzVkNDdlYiwgMHg3ZjNhNzRjOSwgMHg0MWVmYjUzZCwgMHhkZjZiYWJhZiwgMHgyOGE2ZWY4ZiwgMHg3YjVlZjllZCwKKwkweGJjMmZlOTRhLCAweDdmZTgzZjhlLCAweGNhNmZiMTAwLCAweDAwODAwMDViLCAweDAwMDAwMDAwLCAweDAwMDg4YjFmLAorCTB4MDAwMDAwMDAsIDB4NThhZGZmMDAsIDB4ZTU1NDcwMGIsIDB4ZGVmNzNlMTUsIDB4NjZjZDkyN2QsIDB4NDIxYjIyZjMsCisJMHgyNjBkZGRlMiwgMHg5YjcwOTYwMSwgMHhmNTFlNDM1NywgMHg4Y2E0MTA5YSwgMHg2Mzg4Mzc2ZCwgMHhmYWRlYTU2YSwKKwkweDU5MDkyMDQwLCAweGQ2YTI3NTA5LCAweDAwNzFhNmUxLCAweDNiNjM0ZWE5LCAweGIzMzA4OGEzLCAweDIzMzFlMWQyLAorCTB4MzA1NGQzNTMsIDB4MzJkNzQwYTMsIDB4NWRhOTYyNTUsIDB4NjZkNDJkOGIsIDB4ODhkNDZiOTgsIDB4ZjFhNmM5MzUsCisJMHhhMTk4NjY1NSwgMHg1ZWY3ZmNlNywgMHhkNjA4NmY3NiwgMHhlNmNjZGQzYSwgMHhlNzNlZmZlYywgMHg5Y2ZmOGYzYiwKKwkweGFhMzZjMDFmLCAweDVjZmIwMTk1LCAweDhiZGZmMDE2LCAweGVkMmJmMWY2LCAweDhjYTJjMDIwLCAweDA2YWM0M2IwLAorCTB4MjdjOGYyZDgsIDB4ZmIwZGJkN2YsIDB4OTkwZGVkZDQsIDB4NDdmMThiNjMsIDB4NDc1ZjhlM2UsIDB4NWM4MDU0YjMsCisJMHgwMDBlYTU4MCwgMHhkNGMwMTU0ZiwgMHhiZWU4YjRmZSwgMHhmMDk3ZjUwMCwgMHhkOWIwMDM1MCwgMHg4MDQ1M2Y4NywKKwkweDljOTQ0ZThmLCAweDhmZjFjNmVkLCAweDg3MDNiMGRlLCAweDlmMWIyNzVkLCAweGRiMTA3YzllLCAweGY5YTdmNjViLAorCTB4MDU5ZTM0OWMsIDB4ZWY4ZDNlNmEsIDB4MzhhYThkMmIsIDB4NmE3ZTNlZTEsIDB4MjcwNzNiYTQsIDB4ZmI0YmE2MGUsCisJMHhiZGMzZmM3MSwgMHhjNjFmY2ZhNSwgMHhhZmU3ODZmNiwgMHhhZWNkODg5NywgMHhkOTg4M2M1ZCwgMHgwZDg4NWZkOCwKKwkweDNlNmRmZmVhLCAweGZkN2UwNzViLCAweGZkMmU3NWRjLCAweDkyZTBlMTVjLCAweGY4ZDAzNzlmLCAweGNlODk2Y2MxLAorCTB4Y2IzOWE1NjksIDB4NzVlYzJlMDAsIDB4ZjAwZTUwY2IsIDB4N2RjYWM0MTksIDB4NzMxZjAwYzUsIDB4MWI4ZjE4ZWEsCisJMHhjZjg3ZjNiNywgMHhiM2MwM2M3MywgMHhlNDk0YTUwZSwgMHgzN2ZiYjhkZSwgMHg3OTQ3YWI3ZiwgMHhlNzdlMGY5YSwKKwkweGRmYzg2NWU5LCAweDQwYjkzMzg2LCAweDVjZjJjMGZiLCAweDc4N2UwMTg2LCAweDFhNzI4Yjk4LCAweDk3MDhiNWU3LAorCTB4NjAwODVhYmMsIDB4MDY3MTU4ZmEsIDB4YjRmODkyODQsIDB4ZGVmYjcyMWYsIDB4ZTJiODE5NzcsIDB4ZDMyMDczYjcsCisJMHhjYTFhZWVkMiwgMHg5NjVmYmRmNywgMHg4ZTgzYjc2YywgMHhkOWMzZGMzMSwgMHg3ZDBlZmY2OCwgMHg2NTc5ODYwOCwKKwkweDA5ZDVmMTA5LCAweDA4MDgwMzlhLCAweDk3ODQ3Mjk4LCAweDljMDg1NDAwLCAweDEzZmY4NDBjLCAweDY1ZmY4NjRlLAorCTB4YTQ5MGRjZmEsIDB4ZjhjZjIyMmQsIDB4MTk0MWUwZTgsIDB4NmNmY2UwZjAsIDB4NzAyYmY5NzAsIDB4OTdlM2EyYjksCisJMHhkZjc0YTI3OCwgMHhhZDY2YzQ0ZSwgMHhjZDUwMDU5OCwgMHhiZDU5MmRmNiwgMHg4YjdmYzkyNCwgMHgxNWU5YjIzMCwKKwkweDk3N2E3ZmRjLCAweGVmNjI3MjUzLCAweDBjZWUxYmI4LCAweGE3M2VhZTg3LCAweGViNjRjYzU1LCAweDA1M2ViOWQ3LAorCTB4N2ZiMjc2NWIsIDB4YWRiZmNmNTMsIDB4NTFjODEwZWQsIDB4MjdkMTVmNWMsIDB4YjQ4ZmRlNTYsIDB4YWZjYmQwZGIsCisJMHgwYzM1ZTFmYywgMHg4ZjI3ODFmNywgMHhlZTc4NjY5ZSwgMHgzYTFkZTA3OSwgMHhlOTg3OTRmNywgMHhiOGViNGUwZiwKKwkweDIzNjgzODI3LCAweGQ2ZmRjYzM5LCAweDU2YzBhNmI5LCAweGM3M2VmYzQ5LCAweGM3ZmIzNWY4LCAweGFlNWIzOTllLAorCTB4NDc2M2ZlZTAsIDB4ZGEwMzk3MTYsIDB4N2M0MjVkZjMsIDB4NjdjNDU5ZWMsIDB4ZmU3ZTNkMzIsIDB4YTc4M2E0NjEsCisJMHhmMTU3MzJmZSwgMHg0NzZmY2Q1YywgMHhjZmRiMzRjZiwgMHgxYzczOGY2YywgMHhlNDgzYjc5MywgMHg4MjliZmVjMCwKKwkweDllMjI4ZGUxLCAweDA5OTAzNjAzLCAweDRiOWRkMWJmLCAweDQyMmQ3ZTE4LCAweDlmZjQ4MzI4LCAweGRmY2FjOGY4LAorCTB4ZmRjZDNlNGMsIDB4ZmRjY2ZlNGQsIDB4YTQzZDc5Y2QsIDB4YzI2MWM0MmYsIDB4YzJjZjJmMTEsIDB4YTI0NTM5ZmUsCisJMHg2ZjA5YWU0NSwgMHg0M2QzM2NiYywgMHgzZmQ2M2VmZCwgMHgxNGVkODU5MSwgMHg5ZmEzNmI3YiwgMHgxNzM2ZGZhOCwKKwkweGJmOTA3M2Q4LCAweGVhNGUzNmI2LCAweDQyYWZkNjAzLCAweDA1MzFhMzE2LCAweDJmZmMzYmM3LCAweGQ4NDFiODFiLAorCTB4YWI3Njc2ODUsIDB4OTM5MDY3NjEsIDB4NWEzZjIzNmQsIDB4ZGY1ZGJhMDMsIDB4OGJjN2ZiNWEsIDB4NzZlMDE3OWMsCisJMHhmYTAzYjAxOCwgMHhmN2JlMzljYiwgMHhlM2E0MmVjNywgMHgxM2I0YmYwMywgMHhiZTEwZTg3ZSwgMHg0ZTVmYjQzMSwKKwkweGJjYmY4NzdkLCAweDRkYjk2YWY4LCAweGE1OGQ4MDRhLCAweDVmODMxYmM2LCAweDIyY2EwOWI1LCAweGNmODRjZmI4LAorCTB4MDE0YmYyYTMsIDB4MWIzOTExOWUsIDB4ODUwODU3OWIsIDB4YTVjNzBmMzQsIDB4M2E4MWRhMTgsIDB4OTBmYTk0ZTgsCisJMHg3ODdjNGI5ZiwgMHhlMWRmZTEyZiwgMHgxZjkzOTU4OCwgMHhmMTJlZWI5OCwgMHhlNzFmZWIwYSwgMHg3ZDIzYWY0ZSwKKwkweDFlNTYyZDgzLCAweDY0N2Q0NzRlLCAweDQwY2I4MDNhLCAweDY1YzUyYjlhLCAweDBjZmQ0M2M0LCAweDIzMDE1YzU4LAorCTB4OTUxOGYxZmUsIDB4MWQ4NDljZTgsIDB4OGY5MTA2ZGEsIDB4ZmQzN2VhNDYsIDB4YWFhNGVkMTMsIDB4N2EwYzhmOTksCisJMHhmYzkzZjM5MiwgMHgwMTk1ZGI1YiwgMHhiMmFhY2ZkZCwgMHgyY2MwYzhmOSwgMHhjMzI3ZjFmZSwgMHg0MDYwZmIwZiwKKwkweGQ2MTdmZGQwLCAweDdhZTcxMGI4LCAweDU5MDA2NzAzLCAweDY0ZGY3ZjIwLCAweDNjYjkzN2I0LCAweDU0ZTMwMTMxLAorCTB4MDU1MmViYzIsIDB4MThmZWJmZTQsIDB4ZjVkYjAxZWEsIDB4NDRhYmQ4YjYsIDB4MDdhMWViZDEsIDB4MzEwNzU5ZjUsCisJMHg2YjIxYmY3ZCwgMHg4ZjcwZTZmYywgMHhmYzFjNzAzYiwgMHhhOTFjNTk4YiwgMHg4ZGJiZDQzMywgMHhkMWU5MDA4YiwKKwkweGVlOGNmZDA1LCAweGQxMDJlMmU0LCAweGEzMTRjMTZmLCAweDQ0NmNmODMyLCAweDk3NDY3NjExLCAweDE1ZDE5ODQzLAorCTB4MjU3NDYxMTAsIDB4MGFiYTMzZjQsIDB4MTliZDE4MDYsIDB4YTJjMjhjZTIsIDB4ZjhiMDFmNTgsIDB4NThkZjEzZmYsCisJMHhkZjZmOTIxYSwgMHg1YTQ2NWZjNywgMHg2NjQ0MWI3NSwgMHhjMzI5ODdmMywgMHgwNzhkYWZjZSwgMHhhZjlhZjU0NiwKKwkweDUwMGFjNzhmLCAweDZiYWY4Y2ZjLCAweDhjYmYzMmUxLCAweDhiODliOWQ5LCAweGQ3MTFlYzkzLCAweDI3ZWEyMWI5LAorCTB4ZGIxYTA4ZGEsIDB4NWMzMjA2ZTcsIDB4MTA0NmU3ZGMsIDB4MDY2ZWQ0NmQsIDB4YmU1YmI1OTksIDB4OWFiNTFlMjIsCisJMHhiMzQyNTM2MiwgMHhiYjNjZDJlMCwgMHg3MDM0NWM5ZCwgMHhhYjJjMjVlOSwgMHgxODVhZmE5MywgMHhkNGRiNTkxMCwKKwkweDE0OWYyMDFiLCAweDI3ZDZhZmZmLCAweDU1OWYxMTE0LCAweDg4OWY0ZDY5LCAweDAzYjIyMjE4LCAweGM2MWI2MWJkLAorCTB4YTZjYWFhZDcsIDB4MmY2YzYyZWUsIDB4YjdhOTNjMDgsIDB4ZWQyYTliZWIsIDB4ZmJkMzllMTIsIDB4OGM3MmYwOGIsCisJMHhlZTBjMmVhYiwgMHgyODQ1YzQ2ZSwgMHhhOTE2YTAxNiwgMHgwMzk2ZjZlMiwgMHhiODUzOTVmYSwgMHg1NGZmMjI1ZiwKKwkweDEwZjEwMGRjLCAweDQwYjllMzczLCAweGMyNTZkMGZlLCAweDNlMmRiZmVlLCAweDNhZWYzZjVkLCAweGRhMDBmNDk0LAorCTB4ZTYyYmE3NzcsIDB4MmRlNzExMTUsIDB4NzQ3OTJkYmQsIDB4ZTg3NzZlMGYsIDB4MmI5YmJlZmIsIDB4NjUwNTdlMmUsCisJMHhhZTM5ZTI3MiwgMHgzODNjYTQ4YSwgMHhhZGIxYmFhZSwgMHg0Zjc3NjI3MSwgMHg1N2VlNzkyMCwgMHg1MDIwYWYzOCwKKwkweDlhZjNlZDdkLCAweGZjNDg4YWZjLCAweDQ4MDRhYjgwLCAweDNkYzYwNWNmLCAweDJmNTgzODNkLCAweGVmOWQzYzQ5LAorCTB4ZTk2YmU3NjMsIDB4MzgzZGRkMjUsIDB4YmMzZmE0ZjQsIDB4YTQ0YmY2OTAsIDB4OTBiNWY2ZWIsIDB4ZDI0ZGNmZjAsCisJMHg5NGI5MDEzNSwgMHgyN2Y2NjdjNiwgMHgxYTM4YmY3YSwgMHgxZjEzN2RjMywgMHhhZWI4YzFlMCwgMHhkMzk0YTAzMSwKKwkweDU2YmM1ZGI5LCAweGY4N2E4OTU0LCAweDA3NzlkYTY5LCAweDRmYjRkZmU5LCAweDA3NzI5NTBlLCAweDQzMjdkYmNhLAorCTB4YmVlY2MxZDQsIDB4YWYyNTc3YzEsIDB4NzdkYTRlMmEsIDB4MGZkYzVlZTIsIDB4ODcwYWE4NzEsIDB4NWMzOGVkOWIsCisJMHg0OTM5MTZkMywgMHg2ZmU5NTZiNCwgMHhhNzNhMTFjNiwgMHgxMmU5Zjg5ZSwgMHhiZTkxZDZhNiwgMHgzOGNmMzMyNywKKwkweDM3ZmU2MDNlLCAweDIzMzNiNzVmLCAweDMxM2YxZDJlLCAweGRlODE3MGZjLCAweDdmOGE0MzBjLCAweGY4Yjg5ZDc1LAorCTB4MWUzMDNmZjksIDB4MjQ3YjRkNzYsIDB4ZWM3ZjVlOWEsIDB4MjZmMDZlOTksIDB4M2FiMzBhZmQsIDB4ZmQzMGRjNGIsCisJMHgxOWM4NmVhYywgMHg4NWJjZDgxMywgMHhjNmZjZDJmNywgMHgxNGM1MjMzMywgMHhkMTE4NmY2ZiwgMHg0MmRjMzBmYSwKKwkweDAyZDlmOGUyLCAweDdiOGRkZWRkLCAweGZiODJmZTQxLCAweDhiNDJmNzNhLCAweGI4Yzc0YTgwLCAweDEwODhmOWJmLAorCTB4OWI1Y2EyNzUsIDB4ZGEzMDRmMjksIDB4NzQzZmI2MmEsIDB4ZDA2NDlkYTEsIDB4OGY5M2Q5N2MsIDB4ZTQzN2FkNzIsCisJMHg4M2ZlMWNlYSwgMHg2ZDNhODMwMywgMHgxYmJjOTJhMywgMHhlZmQ3ZmUwYywgMHhjYTY2ZmJiOSwgMHhlZDQ0MzZmYiwKKwkweGRmOGVmOGM5LCAweDM2ZTg5MWY2LCAweDkwZmRiYmUyLCAweDIxMjI5ZmI1LCAweGFjNjVkZmM5LCAweGFiYmNhMGVmLAorCTB4ZWIzN2YyOTgsIDB4ZmM3ODJlYmMsIDB4YmE5NzE0NWYsIDB4OWJmZGFjODYsIDB4NGMzOWU5MDIsIDB4MDYzZGM2MGYsCisJMHg5Zjc4YmU0NiwgMHhhM2U0ODczMSwgMHg3MWYzNzliYywgMHhiMjg5ZDQ0NywgMHgyZGRiZGU2ZCwgMHhlODVkYThmOSwKKwkweGRkMWM1ODkxLCAweDViYjMyOGYzLCAweGM5ZWMzZTczLCAweGZhNjIzNjY2LCAweGMwMWQ4NmU3LCAweGM3MTM2MGYyLAorCTB4MzI5YzA3YTUsIDB4ODFlOTYzZTksIDB4NjJkZjk2M2MsIDB4MGFmMmNlNWUsIDB4Y2VjYzEzOGMsIDB4MWMyNjIyOTcsCisJMHg5OTBiZGRkYSwgMHhjZjFlNDE1MywgMHg5OTc4ZTE3OSwgMHhjYmYzNzk0NCwgMHg2Zjc4NjU1YiwgMHgzMzNmOTI0MSwKKwkweDBlMTE2ZjZmLCAweDNlZDAzYjM3LCAweDFmMDFlZmE2LCAweDUwMzU3ZGU1LCAweGFlMDM3NGY2LCAweDg3NjUzZWFiLAorCTB4ODM0ZjhlMjgsIDB4MGJlOThmYWUsIDB4ZWJiZmNiM2MsIDB4NjRmZDJiODYsIDB4MjMxY2MyMDcsIDB4NGYzMWY4NmUsCisJMHgyZGMzYzE0ZiwgMHgyNTMxMDFjZSwgMHg3NWYxMzVjZiwgMHgyYjRiN2ExYSwgMHhhNzhjYjJjYiwgMHhlYjJjZjM0YiwKKwkweGQ2ODM2YTMzLCAweDBmMWNhYWY1LCAweGQ2OWM1MGQ1LCAweDhiY2E2N2Q3LCAweGMzNDFmMzJjLCAweDMwNmYxYzNmLAorCTB4NWRlZWRiZTAsIDB4YjdlYzhhNzEsIDB4NjZmZWIzZDEsIDB4NjU3YjI5YzIsIDB4NTNiZTY1ODUsIDB4ZmYxMDI2MzgsCisJMHgyY2RhOWYwZCwgMHg4NDI2ZmM3YSwgMHhjZTUxZDM5YiwgMHgwZjMxYjdkYSwgMHhjNmVhNzNjMSwgMHg0ZDZlZTNhZCwKKwkweDdlZTc1YTA1LCAweGEwMWYyNTNiLCAweDdiNmI0NGZkLCAweGY5ODdiNGMwLCAweDFlZDUzZjMwLCAweGFlN2I3ODkyLAorCTB4NTBmNjQ5ZTAsIDB4NzgyYzBiMDMsIDB4MGFlYmM0Y2YsIDB4ZjMwNzFlZmUsIDB4NmVlMWJhODcsIDB4ZDg2ZTVmYzYsCisJMHg5YjVlN2I4YSwgMHhjNTdjZjcxNSwgMHg3YWMxNzM4YSwgMHgxMTg1Y2UyYiwgMHhmNWQ3Y2UyYiwgMHhhODBkNzE1OCwKKwkweDc3OGFkYzU2LCAweDVmZTY1OWQ0LCAweDY5NjRkZmRmLCAweDY1NWFlZTk3LCAweGJhMzBiZjk5LCAweDdjNWVkMmRhLAorCTB4ZmNjYjc2ZTgsIDB4NTk3NzAzMjUsIDB4NmQwZTk3YzYsIDB4ZjY5YjhjYjQsIDB4ZGZmZjUzMzUsIDB4NjE5ZTZkODgsCisJMHg1ZmYwM2M1ZiwgMHg1M2NhZmZhMiwgMHg5OWNlNTkwZiwgMHg4ODgwNzdhOSwgMHg2YmQ2Zjg0MCwgMHg1NzAzYmIwMCwKKwkweGVkZmFiZGViLCAweDU3OGFmMDdlLCAweDBmMDI5ZGViLCAweGY1MzM5ZGU1LCAweGE3ZmE0NTNmLCAweGZmZTg2ZjM4LAorCTB4YzYyOWQyMzMsIDB4MTdiZDM3YjksIDB4ZmQzNzI3MWUsIDB4Y2YxZTlhNmUsIDB4Yjg4Njg0NWEsIDB4YjA2ZDdhNGMsCisJMHhjZmViN2FiMywgMHgzYTczNzY2MiwgMHgxZWUzMDNjNSwgMHgxOGY3MWIwYiwgMHhlY2MxZGZhYywgMHhkYmQzZWMyMSwKKwkweDQ5M2E1YzUyLCAweDVjZTJhYzcxLCAweGFhZjg5OWI4LCAweDUxMjcyMmQyLCAweGQwYjlhODRjLCAweGYzNDE5Y2RmLAorCTB4Mzg3ZDEwNjUsIDB4ZmFmMDMzOWYsIDB4MzYwNzJkNWUsIDB4N2I2MTNmOGIsIDB4NWJjZjEyNmUsIDB4MDMyMTVlZDQsCisJMHg4YTVmZDcyNywgMHg0YjMwYjFmNiwgMHhiZjllMGVjNSwgMHg2YWU3MThkYSwgMHg1NWEyN2JmNSwgMHgwNTJkODM3NiwKKwkweGYzNWFjNjk3LCAweGZlMzEwOGZlLCAweDMxNmZmYzRjLCAweGU3Y2MwOGVhLCAweDNjZjk0MWMxLCAweDA1ZjY4YWVmLAorCTB4YTQ1ZmNiNjYsIDB4YWZjYjAyNWQsIDB4YmQ2Zjk2MTQsIDB4YTI3NjI5Y2UsIDB4MjJmMTVjNmIsIDB4OWU0YWViOGEsCisJMHhiODg4MmYzMiwgMHhjODkyZjI0ZCwgMHhlYjRlMzNmMiwgMHgyNDEyYTEyMywgMHg2YTU2NWQxOCwgMHg3NTRjYWI2NiwKKwkweDMwYTM5NjE4LCAweGQxOWYyOTBmLCAweGZiMTg3YWFhLCAweDJmNDZhZDNlLCAweDEyNTNlOTdiLCAweDE4ODM4YTU0LAorCTB4ZGYzOTQ3MTcsIDB4ZmI1YzRhYjYsIDB4NDVjN2RkNjYsIDB4Y2EyZDZmNzQsIDB4ZmY1MDE3OTAsIDB4M2M4ZWY3OTUsCisJMHhhYmUzMGI5NCwgMHg0MTJhOGJjNiwgMHhiMWM0M2VhMCwgMHhkYTYzZTFmYSwgMHhkZjhhNTk2NCwgMHg3YmIzYjBlZSwKKwkweDZhN2E4YzBhLCAweDU5OTM4MWFkLCAweDljNjFkZDRmLCAweGFjNWI4YTNiLCAweDc2YmRmOGM3LCAweDQ3ODY3NWU4LAorCTB4ZDU5YzdmYmIsIDB4OTI2ZjY4OWYsIDB4N2JiZmY3MGYsIDB4ZWE4MmE3YmUsIDB4MjUyYjkwNDksIDB4ZWIzNzBlYmQsCisJMHg3ZmUxMDJhYiwgMHg3YWNkNDdiOSwgMHhkYmYzNWFmNCwgMHg3NTJjMTdmZCwgMHhlZmQ2MWMyZSwgMHhhZmVmNmI5NywKKwkweGNhNGQ3YjMyLCAweGZhM2ZlZmFkLCAweDc3YmIxYTU4LCAweDZjMmIxZjQ2LCAweDdmZGM5YTIyLCAweDM2YmZlZDkyLAorCTB4M2VjNTk2ZjIsIDB4YmJmOWVjZWUsIDB4YTQ3ZWVlYzUsIDB4ZDcxOTZiYmUsIDB4MDVlY2E2NzIsIDB4MzQ3NmJmMjgsCisJMHgxMDBmYzU3ZiwgMHhjZTIzODliZiwgMHg1MTMzYWExYSwgMHhhNjBmZGY1ZiwgMHgxM2RhYzFkNCwgMHhiY2U5Y2JhNSwKKwkweDNmZTcyZWZmLCAweDViMjNiZTE5LCAweDkwNWI2MGUzLCAweGQ2ZmNmMzk0LCAweDZkYWRhYzczLCAweDI5OWQxOGQ1LAorCTB4OWE5NzU5YTcsIDB4Mjg3YmYxZDQsIDB4YTY3ZWExYjMsIDB4NmNkMjM5YjgsIDB4NDEyMzJjZWYsIDB4YjkxZjZmM2QsCisJMHhkZDEzNmU3MSwgMHgwZTg1MjNiZiwgMHhmNDRiNGU5YiwgMHg0YmFkN2U3NiwgMHg0OTU4YWY2ZiwgMHhlY2Y3NjEzNCwKKwkweDg0NzRiYWEwLCAweDdiNDM5OTAzLCAweGY5Zjc5ZDE4LCAweDUxNmUwNzAxLCAweDQwM2NhNzk3LCAweGE2OWEyNjcyLAorCTB4Mjk3N2E3M2UsIDB4Mjg4YWQxYzgsIDB4MmE2NjRjOWUsIDB4ODczZjUyMGYsIDB4MTY3ZTVmYzksIDB4ZjI4NGIzZTMsCisJMHhmYWJjMGJmZiwgMHg3MDE4YzA2YiwgMHhhZDZkZGY2MCwgMHg3YTRmZDc5NCwgMHg2NDdmYmI3NSwgMHgyYWFkMmRkZiwKKwkweDE5OTk1MmUyLCAweDQwZWI0YWRlLCAweDkxN2JkOGQ2LCAweDhlZjlhZmM5LCAweGQ1MmY3NTQyLCAweDRlYjcwOTIxLAorCTB4MjYzOTA3YjcsIDB4NzQxOThlZmYsIDB4MjhkNGQ1MzcsIDB4MWQwNjRiZGYsIDB4Mzg0YWZiZTUsIDB4NGVkZDg3ZjIsCisJMHg3ZTYwMWZkOCwgMHgzMTVlNTMyMCwgMHhmYmE5Y2M3ZCwgMHg4YmMwMGQ4MSwgMHg3MTFkZWZlMywgMHgzY2Y2NDczZSwKKwkweGJjYTY3OTE3LCAweDk2MzNiMzA1LCAweGNlZmM1N2ZmLCAweDYxMzhhMzE5LCAweDE0ZTRiZmJlLCAweGUxMGIzZjhiLAorCTB4ZWM5NzljZmEsIDB4NGM5ZmNlYWMsIDB4YmZjODZiMTcsIDB4YjJhZmJkM2IsIDB4YTBhNmViYmMsIDB4NDBlNGMwMzIsCisJMHg4YzdlMjg0OSwgMHhkYmVlNzUxZSwgMHgyYTRkZmNjOSwgMHg3ZmZlOWQ1YSwgMHgxMDNiNjc3ZCwgMHhhNjhjNzU2NCwKKwkweDNiYzY5MWU3LCAweDhiNzcyOTliLCAweDdiOTMzOGYwLCAweDQ4MTM5NzdhLCAweGUzN2I4OWNlLCAweGJiZDg4NTRmLAorCTB4N2M0NDU0OTIsIDB4ZGYzYWYyOGUsIDB4N2NhNmJmMjYsIDB4N2RjOTFjYTYsIDB4Y2Q2ZWRjYmUsIDB4N2JlNGEyZjcsCisJMHhmMjEyZjZkNiwgMHg3ZjUxYzQwMywgMHgzYmI4MTNjNywgMHhmZWIyY2Y1NywgMHg5YWFiZTkwYywgMHhhMDlkYTdiZCwKKwkweGEyMzFiNjM4LCAweGY1MjVhN2JmLCAweDNiYzBmZmRlLCAweDBmNjFiN2E0LCAweDVhZDc2MzhiLCAweGNlY2U1MzNmLAorCTB4MGYwY2MzMTMsIDB4MjQ4N2YzOTQsIDB4YTc5YzhhNWYsIDB4N2VlZjI5ODMsIDB4M2VjZmM3MTMsIDB4YmViZjEyMTUsCisJMHgzOGMyODk3YywgMHgzYzRjZGY3YiwgMHhjNDQ4YjE3NywgMHg1ZWM3OWRmNSwgMHhkMjc2NDczZiwgMHgzM2ZmZDQ2OSwKKwkweDczOWRhOWRmLCAweDlhY2M3ZWIwLCAweDZmMWE3ZGVkLCAweGM5N2M5NDg1LCAweDZmOWZhZTY5LCAweDA0YzdhZWIzLAorCTB4ODg2Y2ZjOTksIDB4MGFmMjkxZmMsIDB4NWUyOTI3YmMsIDB4OGJlNGY3OWIsIDB4NjljMTlkNDYsIDB4NGQ3OGIxYWYsCisJMHg2ZWZkOTFlNywgMHg1Zjc2NTRlMywgMHg3ZDA1ZWY5OSwgMHg1NDQ3ZGUxYywgMHgyY2RkMmI5NywgMHg3OWQ3MGI4ZSwKKwkweDE3Y2ZiMjI0LCAweDc0ZTMwNmQxLCAweDM0ZTRkOGZmLCAweGEzM2MyZWY2LCAweDU0ZTc5ZDhlLCAweGQ5M2IyNTNlLAorCTB4MWU1MzU2ZjIsIDB4NmY4M2I5ZDUsIDB4MjdlYTMyYWMsIDB4MzZhOTFlZmQsIDB4Y2U5YWIyZWMsIDB4MTk0M2ZlMjcsCisJMHgzMmE5M2VlYywgMHg0NTcxYWJmOCwgMHgwY2JhZGU1OCwgMHgxNzdmNDE1NCwgMHgxZTE5ZGUzMCwgMHg3NzUyY2Q3YiwKKwkweGEyYmYwN2ZkLCAweDE3ZjA4NDZiLCAweDAwMDAxN2YwCit9OworCitzdGF0aWMgY29uc3QgdTMyIHVzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzYWI2NzhhLCAweDMyZWE3ODMwLAorCTB4MzFlOWM4MzAsIDB4NDNkMjRjMzAsIDB4YjcxMmQzODgsIDB4OWZhNjUxNzMsIDB4ODE4MTg1OWQsIDB4ODFiOTg4MTMsCisJMHg1Zjg4MTc5OCwgMHhiYzMwMzIzMSwgMHhmZjVlMjQ2NiwgMHgzYjA0NjE0NywgMHhlMTgxODA0YiwgMHgwYjZmOTAxMywKKwkweDMyMDg5ZmE0LCAweGIyMDc1YzMwLCAweDAzNzEwMzNmLCAweDg4MDczZjkwLCAweDM1YjEwMDU3LCAweDQ4MGZiZjkwLAorCTB4YTNlMjA0ZGYsIDB4MTg0NWZjNDAsIDB4MDk1ZmY5YmYsIDB4NDIxNTZmYzgsIDB4ZTM0NDNmZTUsIDB4YWZjNDE1OWYsCisJMHhmOTgwODI1ZiwgMHhiMWU0MDQ3MiwgMHhlNDIyNjllMSwgMHgwYTZkYzdjNywgMHhkZTA0MGVmNCwgMHg2N2NhODZhNiwKKwkweGUwNjA2NTUzLCAweGFhYzU4YTA3LCAweDkxZGJmODQzLCAweDYyODFmM2U0LCAweGY2MTBhYWVjLCAweDg2MDYzOTZiLAorCTB4MWRiOTQwNWYsIDB4N2RjZGQ4NmEsIDB4MGRmZjk0MDMsIDB4OWE4NmFiOTQsIDB4ZjFiOTAwMDMsIDB4MDM2ODUwNTQsCisJMHgwMDAwMDM2OAorfTsKKworc3RhdGljIGNvbnN0IHUzMiB1c2VtX3ByYW1fZGF0YV9lMVtdID0geworCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4NDU1NDc4MDksIDB4YmVkZDcwYjYsIDB4ZTlkM2JiN2QsCisJMHg4NDg0OWQyNSwgMHgxNjc0YjA5MCwgMHgyNmM0MzUxMCwgMHg2MzBhMDg0MCwgMHg5NDRjMjEyNywgMHg2MTUxNTFhOCwKKwkweDg0MDhlYzQ0LCAweGY5NzA3ZDkwLCAweDM3ZDdkNDcwLCAweGRmOTUwMTJjLCAweDNlMzBlYjg5LCAweDBlMGMxYTc0LAorCTB4MTAzNmEwYzMsIDB4YzZjMDZhMzAsIDB4NjgwZTgzMDAsIDB4OGNjMDgzNzgsIDB4MzY0NTg0Y2IsIDB4NWM3MTA5MjEsCisJMHg3ZjllNjQ2NiwgMHhiYjc1NTM5ZCwgMHg0OGU5YmRlZiwgMHg5YmRmZmM3NCwgMHgzZjZmZWYzNywgMHg1NTZlYTJiZiwKKwkweDViM2FhYTlkLCAweGFhNzUzYTlkLCAweDQyMDQ5NDYyLCAweDFiZTQyNmFlLCAweDcxZjRkMWY4LCAweDEwOTIxMDkxLAorCTB4NjlmMmJiNGUsIDB4YjkxMDk2M2EsIDB4OTZiZmNhMjcsIDB4ZmY2ZTBkNTYsIDB4NDAxOTA0ZmEsIDB4NWJlNmI5YzgsCisJMHg0MjU0ZTY1YywgMHhjMTUxM2QzYywgMHgzOWY5NjlhYiwgMHg0Y2RmOWU3ZiwgMHhiY2I2MGJjYiwgMHg3Y2QyMzBlZiwKKwkweDA4ZDExNmY1LCAweDE2ZWQ4NmU1LCAweDRhYjlkZjZjLCAweGQ2YmU0M2YwLCAweDU1ZDhmZWRjLCAweDQ1YmRkZjM0LAorCTB4NjgyODZiMjQsIDB4MjA2NmNlYjIsIDB4ODg5Yzg0MzksIDB4YjQ2N2VjMjIsIDB4MjEyMjQ4MWIsIDB4YWQ5NjE2NjUsCisJMHgxNjYzYmQ1ZSwgMHg2MmRlNTdmNCwgMHhmZWRhMTYyNiwgMHg4MWU4YjM0NCwgMHg4MmI1ODJmYywgMHhhYWZlZDA5ZiwKKwkweDRhNjY1YjVmLCAweGY5ZTZmMGE2LCAweDQ1YzU4MDg1LCAweDM3MWY2YmYzLCAweDJjODRlY2I5LCAweGEzODFmZWRhLAorCTB4MTljODQ2YzMsIDB4OTk3MTE0NWYsIDB4ODFlNTFlNzAsIDB4ZmMyYTQyNGMsIDB4ZDMyNGE3MWIsIDB4MDQxYjE1ZjYsCisJMHhhZmMyODFiNywgMHgxM2JlNzU1OCwgMHgyY2QxNTdjNiwgMHhiYzI5MTcwZCwgMHhlMjU2NzVjYSwgMHhmZWZhYzkxYSwKKwkweDZkN2Y0MDg2LCAweDJkYmZiMGM3LCAweDU3ZjQwNjUyLCAweDEzNmVlMTdlLCAweDkyOWU2MTExLCAweGQzNTVkYTA3LAorCTB4OTViY2MwNzEsIDB4MWFmOGNmN2UsIDB4MTg0NDZiODksIDB4YTFiZmQ1OWYsIDB4MzU3YWQxZmQsIDB4OTg2ZTBiMmYsCisJMHg3ODgxOGQ2MiwgMHhhZjlkMWM2MSwgMHg2MGJmYTY1OSwgMHg5YmQ1Zjk4MywgMHhmM2Q1ZDg0NiwgMHhmMzBhZGQyOCwKKwkweDM2YWZmMGE4LCAweGY4YzFiMTRkLCAweDMyY2E5YjU2LCAweGQ3MmFmMGMzLCAweDUxNWM0OTNkLCAweDRjYWRmMWFhLAorCTB4OTU1NWU4MWYsIDB4M2UzM2QzZWIsIDB4MDU0ZjE5YTIsIDB4MDZjMDU5MjUsIDB4NmU5YmY2NzgsIDB4N2VmZTE1MWMsCisJMHg3YTQ1ODg1OCwgMHgzNTEzYWU1NywgMHhmMWU1MjlmMCwgMHhmZDNlZmNiYiwgMHhiYzgzYzUyNywgMHg5YjVmZWVjZCwKKwkweDAyZGJhNjFhLCAweDJiYjdmZDI3LCAweGE3MWViNzRjLCAweDFjZWVjNzQyLCAweDdkMjU3YzM1LCAweGM3NDFlODBjLAorCTB4NjI3M2U4ZDMsIDB4MDkyZjg0ZmEsIDB4MmU3Y2E3ZDMsIDB4YmUzM2QzYTQsIDB4ZjRhZTk4OTEsIDB4YjNmYmYxYjksCisJMHg1NzRjNWNiZSwgMHgzZTk4M2NmOSwgMHhkNGMyMmJlZiwgMHg3YWMxMmJlZiwgMHgzMWQzN2M2YiwgMHhmMTc5ZjI2ZCwKKwkweDcyYmU4YmZiLCAweGVhZjlkNzRjLCAweGRmN2FmYmYwLCAweGY4Mzc0YzQyLCAweGIyZmVmYzY0LCAweDAxYTYzOTZmLAorCTB4YmU0ZGE3NGUsIDB4ZmIzNjk4OTUsIDB4YWI2ZjU4ZmMsIDB4MmRhNjFkNmYsIDB4NWY3ZTAwYmUsIDB4OThlN2YxYzEsCisJMHg3NDhjZjI0OCwgMHg3MTBmMGVmZSwgMHhiODkzNzI1MiwgMHg0NDllNGY2MiwgMHgyYzI1NzFmMywgMHhjZTUzMzg5ZiwKKwkweGEyN2NkMTMzLCAweDNlMjllNjk3LCAweDc5ODJhYjkyLCAweGFlNGY5YTY2LCAweDFmNDNlNTYzLCAweDM0NTFmOTI0LAorCTB4ZTU2NjU0M2YsIDB4ZjkzYzJiNjksIDB4NmI0ZjlhMTYsIDB4NTYyM2U1NjQsIDB4MzRkMWY5YzksIDB4Y2FjZmMyM2YsCisJMHhjYzEwZGIyZiwgMHg2NWZjZDJiNywgMHhkNTllNTYwMSwgMHgzNDZjMGE0YSwgMHhmOTY0MTU5ZiwgMHgwMjllYmRlYywKKwkweGI3NjdjZDNiLCAweDg3Y2U3Y2IzLCAweGU2ODM4MTcyLCAweDdiNTgzYTczLCAweDEyMDNkZTNkLCAweDZkMjg0ZDk5LAorCTB4M2M4Yjk1OWUsIDB4NmYzNDQxYzYsIDB4MzcxMzc3MjIsIDB4YTM3YzhiYzUsIDB4ZTI4MTM4YzcsIDB4Zjk2MTcyNDEsCisJMHg1ODI3Zjk3NiwgMHhjMmU0YzliZSwgMHgzNjc5NzZmMiwgMHgxZTRiMzc5NiwgMHg1NzJhM2YyYywgMHhjOWIzNzk2MSwKKwkweDkxN2ZlNTgzLCAweDU2ZmNjNWVmLCAweGE2ZTU4YmM5LCAweGZhYzM3ZmZhLCAweDJjNWU0ZDViLCAweDg2NWZhYTRmLAorCTB4YzY0OTE2ZjksIDB4MWJlYWNiZjIsIDB4NDk4YjdlYjEsIDB4OTYyN2YyYzYsIDB4OTkzM2QyZmMsIDB4ZWYwNGZiOTYsCisJMHg4YjY3YzA1MywgMHg0OTM5NmYwNSwgMHgyNDA5ZmUwNywgMHg2OWZlNTA5NSwgMHhlMDc0YzgxMCwgMHhjOTgxMDdkNywKKwkweDIwZmNkMWM2LCAweDYwNWRjYTEzLCAweDIwMGJjZTU3LCAweDAwMWJmOGFmLCAweDFmMTdiMmY5LCAweGNmMzg0NTQ5LAorCTB4YzI4OTFjMjEsIDB4YzcwZTJmMTEsIDB4MDM1NzNiYmQsIDB4NWNiYmJkYzcsIDB4ZDQyMmYzODEsIDB4MWZlOTZjNWIsCisJMHgyYmVlYzA5YywgMHg1ZGQ5ZTNiNSwgMHgwNTc5YzBhMSwgMHgzN2ZiZDhlMSwgMHgyNmVmZjcyZiwgMHhiYmYzYzc2YSwKKwkweDBiNGUwNTJhLCAweGRmZWQ4OWMyLCAweGQzZWQzNjc4LCAweGJlZDM2N2UyLCAweDIwNzY3ZTEwLCAweDM3ZmExMjdlLAorCTB4YjU3N2VjOWUsIDB4Mzc3ZWM5ZjgsIDB4NzA3NzlmODQsIDB4MDdmYTgzM2MsIDB4NWFiYmQzNjcsIDB4Mzc3YTZjZmMsCisJMHhlMDNmOWY4NCwgMHg2ZmY0ODY3OCwgMHg2OWVmZDk1ZSwgMHg1ZWZkOTNmMSwgMHgyMjFmM2YwOCwgMHhjMWZlZDQ5YywKKwkweDhiNWY3ZTY5LCAweDQzZjdlNjlmLCAweGUxMDRmOWY4LCAweGJjZGZlZjBjLCAweGUyZDQxZWM2LCAweDEwYzFlYzY3LAorCTB4M2YxMTNhN2UsIDB4NGUwZmY2OTcsIDB4N2UyZDQxZjMsIDB4ZjA4NjBmOWEsIDB4Njc4ZTI1ZjMsIDB4MzVlNmZmNTQsCisJMHgzZjE2OTBmNiwgMHhmMDg1MGY2MywgMHgzMzgwMDQ0MywgMHhkOWUzN2ZiYSwgMHgzZjE2OTFmYSwgMHhlMTBhM2Y1YiwKKwkweGM2NzA4MmM3LCAweDM5M2M2ZmY1LCAweDkzZjE2YjFmLCAweDNmMDg3MWYzLCAweDQyNjcwODcxLCAweGZkNmNlMGZmLAorCTB4YWQ5ZjhiNTgsIDB4OTNmMDg3MWYsIDB4ZjUyNjcwODIsIDB4N2YzOTVlNmYsIDB4ZTcyN2UyZDYsIDB4NjRmYzIxY2YsCisJMHgzZTNjOWMyMCwgMHhkOGUxNDIxZSwgMHhmMmQzODZmYiwgMHgyZDNmMTY4OSwgMHgzM2YwODQ5ZiwgMHhmMjE0ZTEwYSwKKwkweDRlMDQ1Y2YxLCAweDdlMmQwOWVlLCAweGYwODQ0ZjcyLCAweGFlNzA4MzkzLCAweDk2OWMxZmU5LCAweGI0ZmM1YTEzLAorCTB4ZTdlMTA4OWMsIDB4NWQ3Mzg0NmEsIDB4N2I5NWU2ZmYsIDB4ZGM5ZjhiNTIsIDB4YTMzZjBjOTMsIDB4YzFiNDk2ZjcsCisJMHg0MGQ3NDM3YSwgMHg0YzliNDhiNywgMHgwOGYxZWUzOCwgMHg2NGU4YmViNCwgMHgyNmU5ZDE3OSwgMHg4YTg4ODc2MCwKKwkweDNkZGE0MTdkLCAweGRiNmZhZDIyLCAweDA4ZmQ5YjEwLCAweGY5MTlkYjUxLCAweGVjNzhjMDM3LCAweGRiNTJmYWQ0LAorCTB4ZDFiOTMxMTksIDB4ZDYyYmJiMWEsIDB4YzdjOWE3MTMsIDB4ZWE2YjI1MTcsIDB4NjlhNDk0MjcsIDB4YmY0ZTA3Y2EsCisJMHhjODNlNTM0YywgMHhhN2M5YWQ5YiwgMHhhOWE5NWY5NCwgMHg1ZjJlYTQzZiwgMHhmMGI2MWY5MywgMHg1NGZkNGQ1YSwKKwkweDNlNGQyNmY5LCAweDM0NGZmOTdkLCAweGRlMzc4N2Y1LCAweDY0YmYyOWE1LCAweGZjYTY4NTY1LCAweDRkMDJmZjUyLAorCTB4M2Y3NWYyZmUsIDB4MTUxZmQ0ZDMsIDB4YmYyOWE0NTgsIDB4NGQxMWU1YTIsIDB4MTNlMGU4ZjksIDB4M2Q5OGZjOWEsCisJMHg4ZmVhNmFjZiwgMHgyOWEzNWY2YiwgMHhiZDc4N2YxZiwgMHhjNzQyN2NhNiwgMHg1MjllNGQyNiwgMHg3MmUyNzljMiwKKwkweGNmODExNzllLCAweDA3ZWJiMzA5LCAweDBiOWVkMDk5LCAweDM3OTg0ZGRhLCAweDRlZDBkYjI1LCAweDVjY2JkYTBmLAorCTB4NGQxZDI5YzcsIDB4MDA2YmFmMDYsIDB4ODQ4NjgxNGQsIDB4Yzk3OWRiYWUsIDB4NTA3NDk3ZTUsIDB4YTU3N2RmM2EsCisJMHhmZDI3MTJmNywgMHg3YmM5OWY3ZSwgMHhmZDgyMzM4NSwgMHg5MDJmZTk0OSwgMHgwNjVkNDgyNCwgMHhjYmU1ZjU0OCwKKwkweGY5N2ZjNjI0LCAweDFjNDYxNzI5LCAweDBkNmJlZGExLCAweDY5NjIyM2RkLCAweGY3OTBjYmJlLCAweGYxZjk0MDk0LAorCTB4N2M4MGMxNTksIDB4M2E5MjJkMTksIDB4MjY2ZDE3YTgsIDB4NGIyZmY3NjgsIDB4NTY0MTc5Y2QsIDB4MjFmMmU3ZjEsCisJMHgzMDg0ZWU1NCwgMHgzNzkyZTVkYywgMHhlNzhhZWMwOSwgMHhjMTkzZGZlYiwgMHg0MjE4NjhjZSwgMHhjODRjOTVlNywKKwkweDgyZjc4NGFmLCAweDNmNmQwNjcyLCAweDRiYzkyY2E0LCAweGQ0NGQ5OWUxLCAweDZmZjc1NzBlLCAweDYyNjdmZGEyLAorCTB4ZmZkMDRkZmYsIDB4MzdmYTNlZmEsIDB4ZmE2YWU1YTcsIDB4YWU1YTFhOGYsIDB4NDRjYTNmZTksIDB4M2I1Mjc3ZmIsCisJMHhlZjEwZmViMywgMHg0YWU5MTI5ZiwgMHgwZTExNWU0MiwgMHhhMWU2ZmY2MSwgMHgzMmZmZDhlNSwgMHhhODhmZGQxMywKKwkweGY1MGU4ZmZiLCAweGYxZjIwY2RmLCAweDEwOWZmNDNhLCAweDU3NjlmZTYxLCAweGI0M2ZlNzZhLCAweDEzN2YzYjQyLAorCTB4ZmFmNmZmOWIsIDB4YTNmZWYzM2YsIDB4MGE2ZmZlNzEsIDB4MWZmMzY2N2YsIDB4NmZlNmMxNWEsIDB4ZmQ0MzcwNjYsCisJMHhkZmY4NDIzYiwgMHhhNzdmZjMwOSwgMHg0ZmE3ZjlhZiwgMHg1ODdmY2VkNCwgMHg2NmZlNzY5NSwgMHhmNWJiZmZkNiwKKwkweDM2ZmY3OTI3LCAweGUxM2RmZmVjLCAweGIwZmY5YjI0LCAweDY0ZGZlYzJhLCAweDdmODFiYWY2LCAweDc1ZDEyOTRjLAorCTB4MTkzZmRhN2UsIDB4NDBkMTE1NGMsIDB4MGZkYTE3NjAsIDB4MjhlMzIzYTQsIDB4YjBmMjEzMTMsIDB4YjhlMzg2OTAsCisJMHhkYmYxOWEyZiwgMHhkZjk0ZDExNywgMHg4OGM4YmY1MCwgMHg5YWE3ZTIxZiwgMHg2YTQzZWU4YywgMHg2ZTU0MmNiOCwKKwkweDFlODEzM2M4LCAweDFmYmE3MmMyLCAweDNhODdjYjk5LCAweGZlNDQ0NWE3LCAweGZkOTk0ZjI2LCAweDNiNzhlOWMzLAorCTB4ZjIxOTQ0NWIsIDB4ZTQ5YTllNzMsIDB4NmI1NzdkMDcsIDB4NDA5Njc3MjYsIDB4YzIwOTIzM2IsIDB4MWU5ZTRmZjcsCisJMHgyZjNkNDZiNSwgMHg1MWI3M2E3ZCwgMHg5MWExZDEzYSwgMHgzOTFlMzYyZiwgMHhhM2FjOGM5ZiwgMHgyNjA0MmJlMywKKwkweDlmY2UxNzE4LCAweDQyMWRmYmEwLCAweGU5NDcxMWY3LCAweDkzZDIwMjdlLCAweDdlOGZlZDEyLCAweDQzZjc0ZTNmLAorCTB4OWI5NmE0YzQsIDB4NjQ0NzZjN2EsIDB4NzQxOWZiY2YsIDB4ZTUxMmI3ZmMsIDB4ZGU3OWMxZTcsIDB4ZTE0NTIyODEsCisJMHg0ZmZlMTkxOSwgMHhkMDM1N2RkMCwgMHg5NWEzNmU2MywgMHgxZTNjM2YyMiwgMHg2ZjljMWYzYSwgMHg1ZmUwYTk3NywKKwkweGQyYmM3MDIzLCAweGY2ZjFiN2Y2LCAweGUxNDdjNjA0LCAweDM2YjI3MmNmLCAweDBmNzI1MTFmLCAweGI3OWYyOGEyLAorCTB4NjcwMzVlMzIsIDB4NGQyZmYxMDYsIDB4NWY2ZmVkYTIsIDB4YjQyMjQzYjEsIDB4NzRhMTQxY2UsIDB4OTdlMDAyYzgsCisJMHhjNDEyMjQwNywgMHgwMjQ3NjQ3ZCwgMHg0MGNjZTRjOSwgMHgwYzlkN2JlMSwgMHhhNWQzNmRmZSwgMHgzODJhMWRlMywKKwkweDRmMjhhNGIzLCAweGFjY2YxZDA5LCAweGVmMWM0NWZiLCAweGJjYjZhZjBjLCAweDYzZDViYjYzLCAweGNhZTlhMmM4LAorCTB4NDk0MjI0Y2YsIDB4YjZiOTdiN2UsIDB4NmQzYThlZmMsIDB4ZGE4NWNlZmUsIDB4MDk4ZjlkM2MsIDB4NTk1MmI1ZDYsCisJMHg4NzRlOWRmZiwgMHhkMGFlZjNjZSwgMHg2OWM0ZTliYywgMHg5YjJmMzY3ZSwgMHgzNTkyNWNiZCwgMHg2ODZkODQ3NCwKKwkweDAzNGYyZjBlLCAweDEzYzQxM2I0LCAweDVkZWY0ZmI2LCAweDI2ODFmMjlmLCAweDBlYTU2ZjNmLCAweGZmOGJlNzFlLAorCTB4ZGRmZmZmNGYsIDB4Yzk2ZGFmZjQsIDB4MWFhZTNmOGIsIDB4OWFlMDc1NTcsIDB4N2FhYWUzZjgsIDB4ZDQ2ZWViOTUsCisJMHg2N2ZiZTdlNCwgMHg1YmNmZWE2OCwgMHg5ZjI5YWE1OSwgMHg1MzVmMzhkYiwgMHg0ZmY5N2IzZSwgMHhmOTUyZjkzNSwKKwkweDNiZmQ0ZDdlLCAweGNhNmJkNjE3LCAweDU4N2JhOGVmLCAweGY5N2I3ZTUzLCAweDBjZmM5YWUzLCAweGY1MzUyZmVmLAorCTB4NWFiZTliNmYsIDB4OWY2YzJlNTMsIDB4ZDcwM2FjM2YsIDB4NDFiMGVmNGQsIDB4YTNmYzBmZTAsIDB4Mjk5ZjAwOTksCisJMHhmYmYwYWNmYywgMHhhNjEyNWYyOSwgMHg0YzJlN2M2NywgMHg1MzBmNDFlYiwgMHg4ZDc4NmVmZCwgMHg0YTZiYjVhNSwKKwkweDU3M2U4MTg3LCAweDU0YTRmZmY4LCAweGE1ZjQxNDM3LCAweGZhZjU5ZjllLCAweGY0YTdjZjU3LCAweGNlYzkxMjk3LAorCTB4ODEyYWQyNTAsIDB4ZDYzYWMwOTQsIDB4ZTU1ZWVkYzUsIDB4Y2ViZTM5ZmIsIDB4ZDMwOGIyMTEsIDB4Y2I5MzEzMmEsCisJMHhmMjgzNGRhYSwgMHhjMWYyMDM4OSwgMHhiZWI2NzUxMSwgMHg4MDgwOTJlMSwgMHhjZGUwMjBmMywgMHhhNWJhMDA0YywKKwkweDRkNGJiNWQwLCAweDM4Y2Q3NGQ3LCAweGIxMTBlZWNmLCAweGM5OTAxYWZmLCAweDk0ZGNiMDA5LCAweGZmNDAzMjZjLAorCTB4MzdhMWI2YzEsIDB4NzhmMTgyOGYsIDB4MjViZTYzMzYsIDB4YjNhZGVkMDEsIDB4ZTNmOGEyYmUsIDB4MDk1ZmMwNDYsCisJMHhkMzdjYTdhNiwgMHhmM2UxM2QzMSwgMHg1N2RjN2E2MiwgMHg1ZjUxZTk4ZSwgMHhiZTFkYTYxZCwgMHhlYzdlOTg4NSwKKwkweGQwZmQzMTkzLCAweDNmZDMxY2I3LCAweDNkMzExYWY5LCAweGU5ODk1YmVjLCAweGQzMWY5ZjQxLCAweDUzMDc5ZjRlLAorCTB4NTVmZjRmODUsIDB4ZjBjYTNhZTgsIDB4NzNkNzRlZGYsIDB4MzI4ZWJhNmEsIDB4Mzg3OGQ5MzgsIDB4ZjE4NTFmNWQsCisJMHg5MzliYjA0NiwgMHhhNzE5MThjMSwgMHg1NjNjNDdiMiwgMHhlMDJlYWJmNCwgMHg4OTZhNzBmZSwgMHhlZjJiM2YzMSwKKwkweGQ3MDUzMTdiLCAweDdmOGI3NjhlLCAweDllZTFlODI0LCAweDAxMWI3ZjkxLCAweGMzOWVlNDdlLCAweGVkNDgwMTc0LAorCTB4ZmE3YTdlN2IsIDB4ZTIwNzg5ZjUsIDB4Y2NiZGZiNDEsIDB4MzE4NzE3NGYsIDB4ZDEyZGNiYmQsIDB4MDMxNmFmMGMsCisJMHhkNGQ5MjIyOSwgMHhhMmZlMWI1ZSwgMHhjYzRjYWVmYiwgMHhiNDFjNDkxYiwgMHhiNDZmYmJmNywgMHg2ZDRiODA0NywKKwkweGM1ZWZjMDQxLCAweGZlZDhiYWYwLCAweDNiYzAxNjQ1LCAweDM5ZDdlY2YxLCAweGE0MzI4ZTkwLCAweDRkYjhiYjMxLAorCTB4MDQ5NGJiNDQsIDB4N2UwMzcwNWYsIDB4ZWNkNjdhNDMsIDB4NmQzZjAyNGUsIDB4MTM5MzcwZjcsIDB4YjhhN2JkZDcsCisJMHg5ZmMxNWE5ZiwgMHhmZTBhZjJjYywgMHhhZmUxMGUxZSwgMHg5N2YxMDkzMSwgMHgxNGJmYzVmMSwgMHgzYmE3ODhmZSwKKwkweDYxNTFhNmViLCAweGJlMTM5ZGZjLCAweDM5Y2E3ZjFkLCAweDFiYmZiZTg5LCAweGUyNzdlMzQ0LCAweDA1NDRhZWNiLAorCTB4MDk0M2VkYWYsIDB4ZTAyZGU3ZWQsIDB4YTdiZjBhN2YsIDB4YzAxODkyZjksIDB4ZDkzZWM4NzMsIDB4ODdmN2Y2NjIsCisJMHg0ZTgwZTc0ZSwgMHg2YWJjMzBiNiwgMHgzZDllYmMxZCwgMHhlZWMwMzgyZiwgMHg3MDY0OTA1ZiwgMHg2NzgwOGYxZSwKKwkweGE0MGVhZDI1LCAweDNiNmE2ZDNhLCAweGVmOWI0NWE5LCAweDAyOGExNDY5LCAweDYyYjhjZjY4LCAweGZkMDI4ZGE2LAorCTB4Y2YxZTc0ZWIsIDB4ODQ5OTNkMDAsIDB4NDE2NzAyYTksIDB4M2M3OWM5OTIsIDB4ZTRjM2U5MWUsIDB4Y2EyYzQzN2EsCisJMHgxNDVmMTlmZCwgMHhjN2ExZmJkNiwgMHhmMDljMTdkMSwgMHgzMWM5OWEzOCwgMHhmOTUwMWVkYSwgMHhmNWRmN2E0ZCwKKwkweGUzNTNlNGZiLCAweDM3ZTA0YzVmLCAweDE3ZDJhZDIzLCAweGQxNDRiZjYwLCAweDAzODFiZmZmLCAweGJjYzQ2MjMyLAorCTB4MjAzNmI3MDIsIDB4ZTAyYmU2Y2EsIDB4N2Y0ZDA2ZmIsIDB4Mzk0YjlkYjQsIDB4ZWQyNmZiYzMsIDB4NDhjMWU0ZGIsCisJMHg0YWZjMjg0ZSwgMHhmMDQ2OGE5NywgMHhiZTAzOGQ0OSwgMHhmNmI1MzhiNSwgMHg1ZjI2YWM1MSwgMHhhOWM4MzJkYiwKKwkweDFmZTA5N2IxLCAweDcyOTI4ZjU0LCAweDU3N2MwOGMxLCAweGNiYTZkOWM1LCAweGQwMmU1YjY4LCAweDUzODI1NWYxLAorCTB4NjA1NWY4MGEsIDB4M2FhM2FhZjUsIDB4ZjAxNzVlNGMsIDB4YWY1YmUyY2IsIDB4NDZjZDQxNzIsIDB4N2M3ZWFmOWMsCisJMHgxYTM3N2U5NCwgMHhiZjhmN2Q4ZCwgMHhhZmI5ZWM1MiwgMHg2YzdjODIyNCwgMHhjYWJiN2FlMSwgMHgyNDBhZmNjMCwKKwkweGY5YzA3NjRhLCAweDFkOTI0OTE3LCAweDY4NzFkOTM3LCAweGQwN2UxMGI2LCAweDUxZmI0NzBmLCAweGYzMzgxNWU1LAorCTB4ZDZiNzUyZmQsIDB4Y2Y5MTk1N2UsIDB4YmY5ODFhY2YsIDB4NmVlZmRmNDAsIDB4ZTJlMTM3ZTgsIDB4YjBkOWFiZjgsCisJMHg1YmNjMGE3ZiwgMHg5NjlhYzc4ZiwgMHhjYTJmMjZmMywgMHgyNzJmZmQxNSwgMHhiZjA1NDc4YywgMHg2ZWM5NjI5NSwKKwkweDU4YWZjMjkxLCAweGQ1ZjcwNDc3LCAweGM0NzkyNGE3LCAweDE3YTJkZjAzLCAweDk2ZGY4ZjdiLCAweDlhYWFjMjc0LAorCTB4YTFkYTRjYjcsIDB4Nzk3MmJiOWYsIDB4ZGI3NWM0NDcsIDB4OWY1ZjU0MDcsIDB4MWU0NGJkZmUsIDB4YTA1Y2JhMDEsCisJMHhhMGUzNTRiNSwgMHhlNDMxMDUxNiwgMHhiYmY1ZWQ4NCwgMHg2MThiMmI5YSwgMHhmYjBkM2VmZCwgMHhlNzJmYWExNSwKKwkweDM4MDcxMjkwLCAweDYzNDljYjFkLCAweGU3ZTdkODBlLCAweGYwMDhhMTg4LCAweDg3ZmM4ZTc0LCAweDRlOGE4YzYzLAorCTB4ZTIxMzQ0NjcsIDB4NDdlZmRhODksIDB4ZjZhM2UzZDUsIDB4ZWQ0ZjI2YmIsIDB4OGNiZTRkNzcsIDB4ZTcwODk0ZGMsCisJMHg0OTRmNjVkOSwgMHhmY2UwMmZjNCwgMHgxMjdmZTUzNCwgMHg3OWY3NDg5ZCwgMHhlYzAxYWVhNCwgMHg1YjEyYzU5ZCwKKwkweDEyNzJlZmQ3LCAweDVmMWQwYTYzLCAweGU1Y2ZhYmY1LCAweDc5ZmNkMjk0LCAweGNhMjNkOTkxLCAweDM4ZmNlYzc5LAorCTB4YzA4YWZlMzYsIDB4OTY4NzkzNmEsIDB4NzMxZTZiMWYsIDB4ZGEwNDU1ZWIsIDB4ZmQ2MDFiZmIsIDB4ZWUwOGI3OTEsCisJMHhmOGRlYWViNSwgMHhkN2UzYWVmZCwgMHg4N2IxNTc4ZiwgMHhmMzBiOWQ3YSwgMHgxM2FmNTQ3MSwgMHg3NjQ4ZmUzYywKKwkweDg1MzNlNzExLCAweDRlOGM2MzFmLCAweDQ1MjM3ZjhkLCAweDk3NDRiZjk3LCAweDdmY2JhMzFmLCAweDQwMWY3OTZmLAorCTB4Mjk1ZWYyMzQsIDB4ZTM4YzUzN2EsIDB4ZmVjMzdjOTgsIDB4MjM3NjMwNGUsIDB4Zjg2ZjdmM2YsIDB4NWZlMGJkNDksCisJMHgxZmMyODNmMiwgMHhkMTMzOTNhYywgMHg4NTA3ZTYzYiwgMHhmYzZiZDE5ZiwgMHg1ZjgyNDc1NywgMHg1YjRiZWFmZCwKKwkweDJhOWZhYTY1LCAweDQxZGE3OTVlLCAweDZkM2E3ZWE4LCAweDUzNzQ0YzZjLCAweDVkYWQ1N2ZhLCAweDM4M2UwMGVhLAorCTB4YzAxZDk0NjUsIDB4NjJmZGE3Y2YsIDB4YmU4MjNmOTEsIDB4ZjBhOGQ3YmIsIDB4ODAyNmM3ODMsIDB4NDlmZTBkZmYsCisJMHhmZjU5OWZlMSwgMHhhZWIwZjVlOCwgMHg3MjU2YjE3ZiwgMHg5ZDZkNWZhMiwgMHhmMmE2NjgzOSwgMHhiZjNjZDM1YSwKKwkweGZlNjE2NDk4LCAweDNiMmZjYjA4LCAweDQ1YmU0MjJmLCAweGJmMTU5ZmNiLCAweDg1ZDEzYTdlLCAweDMxNGU1MmZhLAorCTB4ODgzOGZmYTAsIDB4ZDM0ZDdmZjYsIDB4ZGQ2MDUzMjcsIDB4MjhkZDI1YWYsIDB4ZDA3NmZhNjcsIDB4Yjg3MTU3ZmYsCisJMHg2MjlhOTUzZSwgMHg0NmUzOTc3YSwgMHhiM2RhMTEzZSwgMHhhM2YzNmQ1ZiwgMHhmYzA3NDVlNywgMHgwNmZkMDNhYiwKKwkweGRjZTVmYWZhLCAweGRhMzMyZjhlLCAweDFhZmVhMDA3LCAweGZlODNjNjRmLCAweGZjNDFmMDUyLCAweDVmMTc4ZWNjLAorCTB4ZmMwYjJlN2QsIDB4N2U5YjY3YTcsIDB4Nzg1NDEwZWYsIDB4MjdhY2U0NTIsIDB4YWY1N2ZiMzAsIDB4OTdkNmZhYmIsCisJMHhkNTBlNTQ5ZCwgMHg0ZjYyYTNmNiwgMHhmZWY4NWFiOCwgMHg1NWE1OTVhMywgMHgxNTcxZDA1MiwgMHhhYjU1OTNkNSwKKwkweDNmNGNiNzI1LCAweGMyZjRiZDU3LCAweDNmODJjZjhiLCAweGY3NjY4ZmYzLCAweGYyYmYwYTcwLCAweGFmMDc1ZGE1LAorCTB4OGRjYWY5YTQsIDB4MzY2MjgwZDIsIDB4MTg5MDliMGQsIDB4ZmQyZDRiYTYsIDB4OTg3NjYxN2YsIDB4Nzc5YjE1MGUsCisJMHhkOGEzNWM5OSwgMHhjMmUzMDdmNywgMHhiOGRjYThmNCwgMHhmNTQ2NDRjMywgMHg2MDQxNDdjNiwgMHgxNmMzYTk4NywKKwkweDIzODEyZTgxLCAweDEyZmVjMDUzLCAweDA5YmJmZDVmLCAweGJiN2E3ZWU4LCAweDQ2YTYwNjQwLCAweDVkZWFlN2MwLAorCTB4OWUwMTlmNjgsIDB4NGU5YzhlOTAsIDB4ZWFlOWJhMjEsIDB4ODBiYTUyZDcsIDB4YTRlODU3M2UsIDB4ZmFlMjJmMmYsCisJMHgzMmI5ZTAwNCwgMHg3ZTVmOWY5MSwgMHhmZTg0ZTIxZCwgMHhmY2MzNzY2NCwgMHhkYmJlNWZjYiwgMHg2OTM4ZjMwMSwKKwkweGZkN2M2M2FjLCAweDBmNDRkMmRjLCAweDkyNWNiN2VkLCAweGIyOTg5ZDEzLCAweGRmY2ZlNWVmLCAweDZmMzZmYzhiLAorCTB4Y2M4OWJkZmYsIDB4NjQxOWU1OGYsIDB4MWU0OWI1YzAsIDB4YmI5YmYzMDQsIDB4NWY5YzE2ZWEsIDB4ZGYyMmYxMTksCisJMHg5NjI3M2Y5NSwgMHhkY2ZjN2U4MCwgMHg0NjM2OGE0OCwgMHg4ZDRmOGI5MCwgMHhiOTM4MGVjYywgMHg3NGI4MWE4NiwKKwkweGIyZTkyNzdlLCAweGZmMzM3MTgzLCAweDE0ZmM2MjIxLCAweDNmNDUzZjIxLCAweDJlN2NiZGQ5LCAweGZjYzM4MmQ0LAorCTB4NGU4YzUxZTcsIDB4NWMwZDE5NmYsIDB4YWYxNWE4YWUsIDB4NjVhNmQ3ZTYsIDB4MzM5ZjQwZWQsIDB4ZTEwMzNjNDMsCisJMHgxODk2YTViYywgMHhlMTBmOGU2NSwgMHhkYzU3MGExYiwgMHhkMTkwMzg1ZiwgMHgzOThjYjg4NywgMHhjM2I1MWRiYywKKwkweGQ0M2JlMDBhLCAweDk2M2M5NzZmLCAweGYyM2I0ZDJjLCAweGZmYjg2YTRkLCAweDc0ZmY3ODdiLCAweDNmNjBkMWRjLAorCTB4YmM4YzRjOWQsIDB4MjkyODE4MGYsIDB4NzFkNzRmNzIsIDB4ZTRhOTdmMTUsIDB4ZDM3YmM5OWIsIDB4MTViZTRjYzMsCisJMHg1OGRmZjc3OSwgMHgzOTdmZTUwNCwgMHhkYTA3ZTRjMCwgMHhjNzQ4ZmFjMSwgMHhlNTg4MWMxNSwgMHhhODA5YTYzYiwKKwkweDE4MjRjYzBmLCAweDI0OWJhZTQ5LCAweDcyZGFkNzJlLCAweGI4ZTg0Zjg1LCAweDhhOGM0MjhkLCAweDFjN2UwMDVmLAorCTB4YTZlZDFmZTIsIDB4M2I2OGE3YjIsIDB4ODVhY2JlOTUsIDB4ZTFiZDFjZmUsIDB4OGYzYjcyMjksIDB4OTAwOWZmY2IsCisJMHhmMmMzY2JmZiwgMHhiOTMxNTY0ZiwgMHg5NWJlZGJlZiwgMHg5MjU1M2YxMSwgMHg0MTY3YzVmZiwgMHhjYTdjYTk1ZSwKKwkweGE5NTc5MDJlLCAweGU5ZmRlNjA0LCAweDNmODNiNjg2LCAweDY5ZjI3MmExLCAweGFkNTM5MTQwLCAweDY5Y2JkNGZlLAorCTB4MDk3YmE2ZjksIDB4NGU1ZWE3ZjAsIDB4NDc1YzFkM2YsIDB4ZmQyOWNhMjIsIDB4MDc0ZTUxMWUsIDB4ZWE5N2ZjNzcsCisJMHgwZTdmMDU0ZiwgMHgxNTNmYWI0OSwgMHgxZTE3ZDg3ZCwgMHhiN2YwZmFmNSwgMHg1M2UyMTc0NiwgMHhlZmU5MGZhZiwKKwkweGNkZTljOTAwLCAweDI5ZGYwYTdmLCAweGRiZjE1NmZjLCAweDc3YTA2MWVhLCAweGYwYTk3YzQyLCAweDE1MmY4ODVkLAorCTB4NTdjZmQzYmUsIDB4Zjk3ZDNmOGIsIDB4ZDE5OWYwNjEsIDB4ZjZiYzk1NzEsIDB4NGExNDk0ZmUsIDB4YzE1NmFhY2YsCisJMHhiYjYxNzY2ZCwgMHg3OGE3OTBkZCwgMHhiZmIzMzBmMiwgMHgwMGNhNzc3MSwgMHhjYmFmZGU3NSwgMHgzZGY1NzQwNywKKwkweGFlODk3Y2JhLCAweGFmOTc1N2JlLCAweGIzZjdkNWQzLCAweDliNGI0ODdkLCAweDA0MWYyMDg5LCAweDQ1YTVmNTM1LAorCTB4ZmM3Mzg2NDQsIDB4ZWUyMjZkZWUsIDB4OThlOGJiYmIsIDB4YWVmYjY4MWIsIDB4OTk3ZWE5MGQsIDB4MTZhNTgzZWEsCisJMHg0ZWVmYmZiNiwgMHhmZTgwMzUzMCwgMHgzYjc2NzJlYSwgMHg2MTZmMjBlMiwgMHg5MmFlYjVmZSwgMHhjYWFjNDc2ZSwKKwkweDJhZDIzYzNlLCAweGYwZWRmZWEyLCAweGZiNDhhMjkzLCAweDIyZDE2YTEzLCAweDVmNDgzYTllLCAweGEzYmNlY2U1LAorCTB4NWQwZGI0NTAsIDB4NDY5NzdlMDgsIDB4ODFhZTBkZDEsIDB4MzliN2Y1MzksIDB4YWJhMWJjZTAsIDB4ZTk4NmZkMzUsCisJMHhiN2RjZmJmNCwgMHhlODVmMGM0NSwgMHhjMTY0NzY4YSwgMHgzMWVjODhiOCwgMHgwYmVkNTIwZSwgMHg5OWY5MTE0ZSwKKwkweGIzM2U3NDg5LCAweDYwZmVkOTViLCAweDVkOWQwYWNlLCAweDVmMjA1NjQxLCAweDMxZWVkOTk0LCAweGY2YTQ1ZTgxLAorCTB4OWZhZDUxZmMsIDB4MDU3N2YxOWUsIDB4NGFiZTU3ODcsIDB4NTdiNGFlNWIsIDB4NGQxNThkZjYsIDB4ZGYyZjcyZGEsCisJMHg1YzQ5NTY2NywgMHhhMzI2OGM1ZiwgMHgzMDhmM2VkOSwgMHhhZmQ3MDkzZiwgMHgwZGU2NjI4NSwgMHhiYmZlMjlkMywKKwkweGY4MDQ4OGY2LCAweDQ0NTVhN2E1LCAweDEwNmNmN2ZjLCAweDIyNmZlMGZjLCAweDRkY2EwMjcyLCAweGJkNDZlOTBkLAorCTB4MmNlOWUwYTYsIDB4NmZhOTg1YzgsIDB4Y2I3NjczYmQsIDB4ZDAwZjM5NDcsIDB4M2Y1YjU1MmEsIDB4OWE3N2ZhYzgsCisJMHhjN2ZhZGQ5ZSwgMHhmZTQwNmYxMSwgMHgzZjQzNDNkNSwgMHgxN2ViYmQyMCwgMHg3OWUwYjc2YywgMHgzYjc2ZDc2ZSwKKwkweDZkNzZhZmM2LCAweDAxZjQzN2RiLCAweDc2NjZiZmM4LCAweGI2YmIzOGMzLCAweGZjMDU5OTdmLCAweDVjYzhiNWQzLAorCTB4NmJhYjdhMGUsIDB4MmNkN2RiMDgsIDB4NTY2NWY2ZGUsIDB4NGI5M2FlMDcsIDB4OTBiZjZlOTAsIDB4YTdhYWJlZDgsCisJMHg4NThmZWJmNSwgMHg1OWQyOTAwMSwgMHhkZGJmZmFjMSwgMHhkYTlkZmU4YSwgMHhhNzE4MmRkNywgMHhjYmVkYjVkYiwKKwkweDg3ZWRhZjFjLCAweDNmMGQ0ZjliLCAweDkzYjJlZmJmLCAweDdjNjA5YmU5LCAweGJhN2NlY2IxLCAweDJmMDk4ZGY2LAorCTB4YWJmZWQzZDQsIDB4NjY5ODc3OWIsIDB4Mzc4MmYyZDMsIDB4ZmEwNTllZmYsIDB4YjMxMzZiYjAsIDB4OGVhNTNhNmIsCisJMHg3YTdjZTFlNywgMHg4YmVkZDJjZCwgMHg0ZWU3OGEyNCwgMHg0MjY0OGExMCwgMHg0ZGYwZDQ3ZSwgMHgwOTE5OWNiZSwKKwkweDdmNDc3ZjJmLCAweGYxZjE3ZjUzLCAweDdjMThmZmRhLCAweDUzZWYxODA4LCAweDQ3Zjc2YWQ1LCAweGJmZWYzMDA5LAorCTB4ZTgwMWZjN2UsIDB4ZTQ2NmVkODEsIDB4OWZiZTY1NGIsIDB4ZWVkMWVhMDYsIDB4MGZiY2Q4YjgsIDB4ZmRjN2JjYzMsCisJMHgwODViY2QyYiwgMHg1ZmRlNjdmNiwgMHhmYmQzOTNmZSwgMHhlMzg1YzkyMSwgMHg2ZjQxY2JkMywgMHgxZjc2ZGYzZSwKKwkweGJiYjI1ZmU2LCAweGU0ZmRiYzcxLCAweDdmYTY4MWY3LCAweGEyNmZiYTMxLCAweDdjNWM3Nzc0LCAweGU0ZmYzOWRlLAorCTB4ZWU5YmVlZjMsIDB4NzRlMmNmNmYsIDB4OGM3ZGUyNzcsIDB4ZTM4ZWZmMzcsIDB4ZWU3YWFlZmIsIDB4ZjNhMWZmZDYsCisJMHhiMzczZWM1NywgMHg4ZjNkYTRhMSwgMHg2OTNhNmY4ZSwgMHgzMTYxODNiNCwgMHgyZjY3YTEyMywgMHg4Nzk5YzQ4NCwKKwkweDhjMDA2NWZjLCAweDhhZTdlMjU3LCAweDMzMmRmMWZhLCAweDA0OGZmZGIxLCAweDVmYjRjNmU3LCAweGY3YzA4YjcyLAorCTB4NzQzZjZjNzUsIDB4YWUxZmI3M2QsIDB4ZjY4NjVjMWYsIDB4NjYxZWY1ZTgsIDB4NDk2MzEzYWYsIDB4ODg1OGRlNDksCisJMHg0NmUzOWFmZiwgMHgzZWM5MjczZiwgMHgyZGZjODVlYywgMHhiYjVlNzg5MywgMHgyMDU3N2MyZiwgMHhlM2RhODExZSwKKwkweGRhMmQwZmQ3LCAweDBkZTlmNjAzLCAweDMzNDE4ZDgzLCAweGZhNDA4ZjRiLCAweGNmN2Y4M2JlLCAweDY2NWZlZWQ1LAorCTB4ZGJmOWI1NzgsIDB4YjdmMzZiYTYsIDB4ODJiNzc4NzAsIDB4YmZmYjQ1NzEsIDB4ODNmMDQ0YjUsIDB4ZjIxYTUzNWYsCisJMHgzOWY4MDI1NCwgMHgxMTEyYjlhNSwgMHhhOTEzODgwNCwgMHg4NGZiMGE1YiwgMHhlZGI0NGE1YiwgMHg3NjdlYzM2NywKKwkweGYzOGYxODVjLCAweGUxNTNiY2EzLCAweGE0NmEyMWZjLCAweDYxYjhmODgwLCAweDI0ZmE4ODg1LCAweGY4NDA1MzJhLAorCTB4YzYxMmI5MjUsIDB4Mjg2MjdlMTMsIDB4MTczYzAxYzksIDB4ZjM1ZjE5OGYsIDB4MGRjZTA2MzMsIDB4ZjFjZjlkZjMsCisJMHhkMGVhNDY1NSwgMHhiZTE3MjFkZSwgMHgwZTYyNjZmOSwgMHhkYTA5NzNmOCwgMHg4NDNkZjM0YiwgMHhmNWVkNDc1YywKKwkweDMwNDI4OWIyLCAweDNjZTVjYTlhLCAweGIyNjM5MTIzLCAweDkwMjljZmMxLCAweGE3M2YxYWEzLCAweDFmYmYwZjM2LAorCTB4NWNlMTg2MjUsIDB4ZmM1ZjdlYWMsIDB4N2ZhNzQzZjgsIDB4MzQ3ZmZjYTYsIDB4OTBjZGRhODMsIDB4ZjMzYmI5ZTIsCisJMHhhYWZiMjlkNywgMHgxZTE5NWIzYiwgMHg3ZjA0YWI2YiwgMHg1MDU1ZjIxYSwgMHg3YzUzOWY1MiwgMHg4NWZlNjI2ZCwKKwkweDA2MzgzZjNmLCAweGU3ZWYyYWU1LCAweDdlZDg2MmEzLCAweGNjZWQwMzJmLCAweGY2Njc2ZTVhLCAweGYwMThhZWM4LAorCTB4YTZiNGY0NmYsIDB4MDJiMWYzZjMsIDB4M2YwMjM3ODcsIDB4YWRmYmU3ZWYsIDB4M2VmOWMwM2YsIDB4MGIyNmJiNGQsCisJMHhmZGQ4MjI4ZCwgMHg3OGZkMWJhNCwgMHg1OTBiNjRmMiwgMHhlZTBlMjExYiwgMHhhN2UyOTMwMywgMHgxZmZkYzNhOCwKKwkweGEwMWNjNGZjLCAweGEzY2RmYjIzLCAweDU0ZTI2MzRkLCAweGRkNzE1Yjc0LCAweDZmNTY2MzY5LCAweGE4ZWZjMDNhLAorCTB4MWZlODNjZWEsIDB4ZWZlYzJmYzUsIDB4MmRmYmFmMDAsIDB4MjI0YTUzMWQsIDB4OTcxY2Y3Y2MsIDB4ZmViN2UyZGYsCisJMHg2ZWI1Zjc4YSwgMHgwMDk1NGQ2YSwgMHgxNjRkMzcyZiwgMHg5ZmE2ZTczNSwgMHg3NWJlZjg5OCwgMHhlMzAzMTkwYywKKwkweDFhZWI3ZTJhLCAweGNiYTAwNGM3LCAweGY3MGRkMTFlLCAweGNmNWI2YWIzLCAweGNlMTFiYzliLCAweDA0ZjhmNDhmLAorCTB4OTdkZmU4ZjgsIDB4Y2Y4MDY1ZGMsIDB4NDJjN2ZmNjMsIDB4OGZiNTlmNjAsIDB4NDI2NGU3OWYsIDB4NmUyNjc0YmMsCisJMHg0ZmUwM2RlNSwgMHg3NWUzODJmYSwgMHg3NDg5ZDlhYSwgMHg0ZjM4YjliZSwgMHg2NmZkYTA0YSwgMHhjMzQ3M2IzNiwKKwkweGFmMzI1NjkxLCAweGFkMTYxNTNmLCAweGMxMWMxMDcxLCAweDkyZjUyOWRhLCAweDIzYmQ1OGFiLCAweGE0NGQ2NzI2LAorCTB4MTI4YTJmZjksIDB4ZmI4NTc5ZjgsIDB4OWZlMTVjYmUsIDB4M2Y3OTZlOGYsIDB4NjFmMzA3YjcsIDB4ZWVjYzk5M2QsCisJMHg2YmU2ZjVkNSwgMHg1M2QxZjI4MiwgMHhkZjQxZjgyNCwgMHhmMzA5ZmVjMywgMHhlMDNlZWNjNSwgMHg5NzJiMDMzZSwKKwkweDU5N2E2MjZmLCAweDllM2Q3YmUxLCAweGNmMGNjZGQzLCAweDNjMDVmZjRhLCAweGYwY2NkMjNmLCAweGMxNTllMGEzLAorCTB4NGFiYzdlYWYsIDB4YWVhZmFhN2QsIDB4NmUyMWZiNTYsIDB4MzJmZDE5NjgsIDB4YWQzNTg3YWMsIDB4NDE0MGQzODIsCisJMHg0YzNiMThkNSwgMHgyZGI1ODcyMCwgMHg2N2UwNGI4ZiwgMHg3MDYyZTE5ZiwgMHhhNTkwN2FlOSwgMHg2YTlkZDczZSwKKwkweDZkZWJlNzY2LCAweDAyY2Q1N2Q5LCAweDA1NmNmOTNlLCAweDdiNjg0YmI1LCAweDBlZjM5Y2NmLCAweDE5Zjc3NzU4LAorCTB4YmRjMWVmZGMsIDB4OTE1ZGY5NDksIDB4N2QxNmZkYWMsIDB4NzljZjgxZjUsIDB4MWFhMzY0ZWQsIDB4ZjM4ZTJhNmUsCisJMHgwOTNjYWFlNiwgMHg1N2I3MjZkYywgMHhhYTA2OTBlZCwgMHgzOWFhNjlmOCwgMHhlZjk1Y2IwZSwgMHg2Y2FlNTVjOSwKKwkweGMzZmI0ZWY4LCAweDk5OGZjODcxLCAweDY3ODdjNDA5LCAweDNlZjFkYTA2LCAweGIxNzVlZGRhLCAweDAzY2IwZjhjLAorCTB4NGY5ODRjM2IsIDB4N2Y0YWZhYzUsIDB4Nzk3YTNmNGEsIDB4OGRhYzU2OWEsIDB4ZDA1ZDk5ZmIsIDB4NTJmMDE4MzEsCisJMHhlM2RlMGU2YywgMHg5ZGE3YzA4ZSwgMHhiYmU0MGU5YywgMHhjYTFlMTNhZSwgMHg4YmZmNTliNywgMHg5NDdiODlkNiwKKwkweDJhNDNhMjc1LCAweDZjODljNTUxLCAweGE3M2QzMzM1LCAweDQ2MDYyNzVhLCAweGQ0MTYyNzVhLCAweDFkMDIwNmJiLAorCTB4MWY0YjZjMTYsIDB4ZTBiMjQyMDgsIDB4NDhjNGMyZWQsIDB4M2VmYmM0ZWIsIDB4ODg3ODVlNzYsIDB4OWFlY2RmZGYsCisJMHgyYjg5ZDc0NiwgMHgzNGM0ZWI1NCwgMHhiZTg5ZjIwYiwgMHhjNGFjZGY5ZCwgMHg5ZDY0NWQ2MSwgMHg1ZmY2ZTg1MCwKKwkweDg3ZGU2ZmFjLCAweDdjODIyMjc1LCAweGQ3NmIzNjZmLCAweDRiNWI1Yjg5LCAweDc1Yjg5ZDcxLCAweDU3YjlhODlhLAorCTB4YjE3Y2RlYjEsIDB4NzEyZjIyNzUsIDB4YjcyNWU2MDYsIDB4YmNmZjAyMzUsIDB4NDNlMWVkY2YsIDB4ZmEwZWJlM2MsCisJMHgzNGUyZjU4MSwgMHhkZTg0ZmZlOCwgMHg3YTVmNDZlYiwgMHhlYWZlYjFmZCwgMHgzYzI2ZmZmNSwgMHhjMTdkN2EyYiwKKwkweDc4MWVlYzJkLCAweGM4MjQzZTZmLCAweDUwNjYwYmNmLCAweDNmMDAyZWJkLCAweGUwYmViZDMyLCAweGQzMTdlZTBlLAorCTB4ZDAxMmQ5ZTksIDB4N2FkNTYzYjMsIDB4ZjFhZmI1OTYsIDB4YjZhMTc1YjIsIDB4MzMxN2Y1MjUsIDB4MWE0ZmY5NjksCisJMHhhZDE0NzcyNSwgMHhkZWIwOTNmZiwgMHhkZGViNTFjZCwgMHgxMzc3YTBkMywgMHg3MmRkZTgyMiwgMHg2YjNmNzdhNiwKKwkweDUzZjY4MzFkLCAweDg4ZmJmMzVmLCAweGNmYWE1YmViLCAweGY4MTFkYzMyLCAweGFiNGNmYTYzLCAweGIxY2U5ZWU2LAorCTB4ZGNjYmJmZDEsIDB4NGZiMmYyMGMsIDB4NGZiYjczYzQsIDB4NzdiMDFkYjgsIDB4ODJjNmVmZjQsIDB4MTQ0YTdhOWYsCisJMHhhNzFjNGYxYiwgMHg1YzhmYTc2NywgMHg4MWVhOTkzYiwgMHg5ZWNjMzk4MiwgMHgyMjIwZGVhZSwgMHg5OTlhNmFmZSwKKwkweDQ0NjRkN2ZjLCAweDNmMzQ1ZGZiLCAweDI2YWZmYjI1LCAweDYzNmU1N2M4LCAweDA2NzQ2ZmU3LCAweGZhMmE3OWM1LAorCTB4NjhlYmVlNTcsIDB4ZTU3MDNmMDAsIDB4MGZjZjAxNmEsIDB4ZjAxOWNlMjEsIDB4YjNlMzhmMzksIDB4ZmI4OTVkY2MsCisJMHg4MGZjN2QxNSwgMHhlNmFkMTdlMiwgMHhhZWI3ZTZmNSwgMHgzZWE5ZmY0NiwgMHhlMzNhYTBhZSwgMHhhZmIwZDNkYSwKKwkweDNhMzMzNjI4LCAweGZjMTY2ZjE0LCAweDFjZTE1M2FiLCAweGZkY2Y1NzViLCAweDU0MWI5ZTMwLCAweGM3ZGZiNDA3LAorCTB4MTVjZWY5ZjAsIDB4NjE5Yjk5ODMsIDB4ZTg5ZWY1NWYsIDB4OGRjZWI0OGUsIDB4ZmNhNWUzZDEsIDB4N2VjYmM0MWYsCisJMHhmZmIxOTc4YSwgMHgxN2QyZjFlZiwgMHg4ZjdkYTgxZSwgMHgzZTNkNjRmZSwgMHhiZDcxNDVjNiwgMHg4MmM2NGQ5MiwKKwkweGYwNjI3ZTFjLCAweGRmOTE1ZWEwLCAweDY0MmUzMTExLCAweDM1YzNlM2NlLCAweGEyMGJmZWY3LCAweDY3ZGFiZTk4LAorCTB4ZGM0MDM2ZjAsIDB4ZTJjMzVjYWUsIDB4ZGFhZGU2NDcsIDB4ZTY5MTJiYjgsIDB4NjhjODA2NjcsIDB4NWJjZjQ3NzAsCisJMHg0Mzg3NWRhOSwgMHgwYmIzN2VlYiwgMHg3NTk5ZjVkNywgMHgxMzg4MDUxYiwgMHhmZGVmY2I5YywgMHhjNzFmZmI5NCwKKwkweDU4ZWUxMmY3LCAweDVhNzlkNzQ4LCAweGQ5YjY3NjdmLCAweGZiOWZlNzBiLCAweDM3YThkZDJkLCAweDEwNWRiZTE1LAorCTB4M2E5N2VjYzUsIDB4Yzk2MzhlM2UsIDB4N2Q3MTkzZGQsIDB4Mjg5YzExNmEsIDB4NWIwYjQxOGYsIDB4ZTA5ZDI4YWYsCisJMHgwOWI2ODcxZCwgMHg3NGUxNGU1ZiwgMHgxNjg4N2U2MSwgMHg0YTVhYzc0NiwgMHgyOWU3OTAzNywgMHg4ZWJmM2NhZCwKKwkweDJiYjc4MWQ5LCAweDc3ZTA4MGY5LCAweDc3NTdhMDA5LCAweDA4NWRlYzQ4LCAweDljMGJjNDgxLCAweDExZjVhYTA4LAorCTB4MTJmMmQ1Y2UsIDB4NzZkZTc0NTUsIDB4NWFmZmYxODQsIDB4ZmMxZjhkYzEsIDB4NDNlZmJmZjQsIDB4OWVmOTNlZTcsCisJMHhlNWZkMzFkOSwgMHgwYjRmMDU3NywgMHg2ZmRlNzQ3NCwgMHg4MzFlMmY2OSwgMHgxYjgyMzNlNywgMHg4ZDY4YzdkZiwKKwkweGUzODU3M2M1LCAweDA3OWRlYzhkLCAweGNiZDNiNzk5LCAweDVjM2JlYzA1LCAweDhkY2FiZjJhLCAweDFmODg3MDMwLAorCTB4OWM2MGIyMmQsIDB4YzY5YmY2MWUsIDB4YmRlZDMyZWMsIDB4ZDcxMzU5NDAsIDB4NGVlMzVkZjMsIDB4ZGEzYjQ5NmEsCisJMHgzMTc4ZTE2MywgMHg4MDI2MzdlZiwgMHhiNTE4MjQ1NywgMHhjOGRkNWM3MSwgMHhmYzAwM2ZlNywgMHgwMmRmY2RkNywKKwkweDMxMzkyNDlmLCAweGE3NmVmNDZlLCAweGVlYzlkZGYyLCAweGRiN2NmMDZmLCAweDMzNDM5YzkwLCAweDViM2Y3ZTI5LAorCTB4ZGQ3OWUyMmUsIDB4YzFkNzA2NmQsIDB4MWU2ZmEwODksIDB4Y2JjODA4OTEsIDB4MGYyNTdiNjcsIDB4YjhhYzA3NWIsCisJMHgzYmVlOTRlZSwgMHg0YTVlZjc4NiwgMHgyOTExZWM1OSwgMHgyZmFkODg3ZCwgMHhmZTc4ZjhjNywgMHgwZjZkZDc0NCwKKwkweDYwNDg0NGY4LCAweDRkZmJjNDFjLCAweDc0MjhlZjczLCAweGVjNjRkZjgxLCAweDJlNzBhNWZlLCAweGYzODE3Mzc2LAorCTB4ZTdhMDQxZTAsIDB4OTNiZGVjYzMsIDB4NzAwYmNiYTMsIDB4NGZmNzc2OWYsIDB4YzNiNzk0MDUsIDB4ZmVkMDZlOTQsCisJMHgwN2E5Njk5NiwgMHhlZjdlZDIwZiwgMHhlNzgwOWU1OCwgMHgwOTNkMzM1YywgMHhkN2I5YzJiNywgMHhkYmEyYmRjYywKKwkweGJlY2RlYjQ1LCAweDczODM2ZWMxLCAweDQ1MjNhOWFmLCAweGU3ZTE1NWUyLCAweDdlOGVkMjBlLCAweDNmNzU5OTlhLAorCTB4NWRjNjA1YmQsIDB4MzE0M2Q3NGUsIDB4ODVmZGQyMTUsIDB4NGFiZjIxMDMsIDB4YjJiNWY2YzAsIDB4YjI5MDM0ZDcsCisJMHhmM2NhZmI0ZSwgMHhmZmI0YjFhNiwgMHhkMDBmNWEzMiwgMHhkNThhYmI1ZSwgMHhkYzEyNmRhYiwgMHhkNjViN2ExMCwKKwkweGNiZWEzOGZhLCAweDFmMDEyNmIyLCAweGY2YTc2ODk2LCAweGViODMxNDZmLCAweGRiNzBhMjhmLCAweDM0ZjZkMTU3LAorCTB4MDNkYTBmM2YsIDB4NWJkOGE2ZGMsIDB4OTZhYjNjZTEsIDB4ZTdkYjEzOGUsIDB4NjQ3OWUzZDYsIDB4OGI0NzZkMTksCisJMHg0ZmQzN2I0OSwgMHg1NWZjZGUxMSwgMHg0NDdiODEwMiwgMHg4ZmE5YjllNSwgMHhiZGJjMDJlNSwgMHgwZmNhMWI5MiwKKwkweGM2MjVmOGVkLCAweGZkYTJjYzhkLCAweDY3ZjBhMjBkLCAweGU4ODUxZDhiLCAweDcwNDA3YjU3LCAweDgzMjMzYmUyLAorCTB4NWQ3ZTkwMzMsIDB4NzA2ODYxMzAsIDB4NjRmZDBkM2MsIDB4NDJlOWQ3MTgsIDB4NzFkNTE4MzQsIDB4MTYxNmM5MDgsCisJMHhiMGI2NWNkZiwgMHhkNWU2MDFiZSwgMHgxYWE0MjcyMSwgMHg5YmNlYWY5MCwgMHg0ZTNmMWQ2MCwgMHhmNmE1ZWRmMSwKKwkweDhiMTMzMWViLCAweDhmOTM2ODZmLCAweDdhNTQzYTk5LCAweDFkMjViYzc0LCAweDk2OWNkOGY1LCAweDlmMmYzYzNjLAorCTB4YmNmMDRhNGIsIDB4ZWNjZjViZGMsIDB4MmQ0YjIzOTEsIDB4MzBlYzAxN2UsIDB4YmUxNDM5YzksIDB4ZTMzNTJkYjcsCisJMHhkODk3Y2VmNywgMHhhNDM5ZDNmYSwgMHgyN2ExZmQwMywgMHhlZTA0NDk1NywgMHg5NTVlMmQzOSwgMHhmMWQwMGNmZSwKKwkweGY5MDkwNmU0LCAweDQyNGU3YzRkLCAweDI1ZWYzNjNkLCAweDViNmIyN2U2LCAweGJjOWVlMGM1LCAweGNmZGVjNGM3LAorCTB4OWY5YTcyODEsIDB4ZmY2NTFiZjcsIDB4NjU2M2Q1YWIsIDB4NTNkNDBhYWUsIDB4MmJkNGJkN2EsIDB4N2FhOWVmZWUsCisJMHgyZjZjYjAxMywgMHgxNGNmNzU3ZCwgMHg3NDE1NTdkNCwgMHhlYjQ2MDFkZCwgMHgzNzA2YWZhNSwgMHhhZjUyYmZhMCwKKwkweDRkODk2YWFmLCAweDEwZDk1M2QxLCAweDNkNWE1MjM3LCAweGUwNGFkNjY0LCAweGMwNTgzYmUzLCAweGI1ZjA3Yjc2LAorCTB4NzU4NjlmY2YsIDB4ZTA0ZWNhYjcsIDB4ZjlkMThkNGIsIDB4ODJmOGMwOGMsIDB4NmNjY2JjODAsIDB4YzgzOWY4ZGQsCisJMHgwYjRjZjk0MSwgMHgwMjczYmJiZSwgMHhiMzcyMDBlOCwgMHg1OWM1OWUyMiwgMHhkZjExNGJmOSwgMHhiY2U1MWM0YSwKKwkweDU3M2U1YTk1LCAweDc4NjdiNWNlLCAweGFmNTFlMjQ1LCAweGUyNTZlNTVmLCAweGY0M2JkNTUxLCAweGRhNTdlNTEwLAorCTB4ODIyZDlkY2YsIDB4ZmU0MDIyZGYsIDB4Yzc3YmVlYzgsIDB4ZTM4OWRlNjIsIDB4ODNlZGM4NWEsIDB4ZTdlNDc2MTUsCisJMHg1ZjlmZjc0MywgMHhlYjNhZmMwYSwgMHhiZDgwODE0MSwgMHgwMzZmNjQ0ZSwgMHgyYjM1ODdhYywgMHg2NWY4MTcwNSwKKwkweGRhYzgzZGU3LCAweDYxZWRhM2NmLCAweGM5N2U4N2RjLCAweGI3ZjI4YWY4LCAweDY2YmZmODBiLCAweGIxYmJlM2Q1LAorCTB4MDJlMDkzN2UsIDB4OTc1Njg3ZjgsIDB4MmU1MTNkYTIsIDB4OWJjYjA0OGIsIDB4ODFmZWUwOGUsIDB4NWYxODUzYWUsCisJMHg4OThiMjZkNCwgMHg0YjM1ZmZjMCwgMHg5NTMwNGVjYywgMHhmODUyM2UxNCwgMHgxN2JmMDhmMiwgMHg1OWRjYTI0ZCwKKwkweDlmNzZkMzM3LCAweGRlODQ5MDAwLCAweDE3NGUyOGZjLCAweGYwMjllYjQyLCAweGY4Y2NhZDQ5LCAweDkyNGJjOGVjLAorCTB4ZTJlNmQ4MWIsIDB4YzNlZWM5N2MsIDB4YWJlYmU0OWUsIDB4NTMyZGRjZjgsIDB4ZDczY2MxMDYsIDB4YjY4NjM4YjIsCisJMHhiMDI2MDU1NSwgMHgwNWZhNGUyMywgMHhjZGVmOGYzYywgMHhiNmE2YzQ5NywgMHg3Y2JlMTRhMywgMHhmYWZhNjA0ZSwKKwkweGJkYTg3MTYyLCAweGE1ZjM4ZWY4LCAweGE5OTQ3ZmMyLCAweGI1NTk1ZjcxLCAweDBmNzAyMjU3LCAweDVlOGZjZjU3LAorCTB4YzQyYjcwMjksIDB4NGNiZTk0MGIsIDB4NWJjNzQzZTcsIDB4ZGEzZjcwZDAsIDB4NjkxZTBhZWIsIDB4NjVmMjExM2UsCisJMHhhMWVmMTY0NiwgMHg5MWI1NDNjOCwgMHhlNzdkMDVjNSwgMHgzN2ZhZTlmMSwgMHg3OTYxZWM1YiwgMHg0YWRjNTkxMCwKKwkweGJiZmJmNjkwLCAweDljNjAyZjBkLCAweDQ3ZjViOWRjLCAweGU2ZmI0N2FlLCAweDgwMDdjYTBkLCAweDEyNzYwZGZmLAorCTB4MWY4N2ZkYzQsIDB4YjM0NTUwZjUsIDB4NDIzOGMxZTgsIDB4NjZlNzMwNjMsIDB4ODk1ZGJlZDUsIDB4YzU3Y2E4OTcsCisJMHhkOGFlZjg4ZSwgMHhkMzE3ZjY2NCwgMHg4ZjViMTVmNiwgMHhmNWY5ZTE2NSwgMHhlNzhjNmVhMiwgMHg2ODBiZDc5MCwKKwkweDIzYjkxMzFmLCAweDU0NmZlZTBiLCAweDg2ZGM1OTE4LCAweDY0NTgyZWRlLCAweGIzYWE3ZTYxLCAweDgzYTc1OWFmLAorCTB4NjNhYzI2ZGQsIDB4MDQ1NTY5ZWYsIDB4MmFjYzkzNmUsIDB4MTZmZGVlYmYsIDB4ZTc4N2E5NDksIDB4MzNhNTMyMjksCisJMHhmMTg2OTNkYywgMHg1MjcxZGZhOSwgMHhmZWNlMzVlMiwgMHg0NTVmZjE4NiwgMHg1Y2Y2ODQ4YiwgMHg5ZDhkYmFjNSwKKwkweDcxNTc3ZjEwLCAweGRjZmI4Y2Q4LCAweDMxZTc3NWRhLCAweDk1ZTBiODllLCAweGFlMWRmMDk3LCAweDEzNTExNmRhLAorCTB4ZWUyYmQ1N2YsIDB4ZTc4ODlkNjksIDB4ZDVjZDM1MWIsIDB4ZjM0MWJmMTgsIDB4MTM1MWNlNzgsIDB4NzdmZjFjODgsCisJMHhjYTljZjhiMSwgMHg5NTZkYjY1NywgMHgzNzJiMGEyOSwgMHhlZjgxZGFmZiwgMHg3NWFmYjU3MiwgMHg3NTkzYmRlMCwKKwkweGQ4NzcxZWRmLCAweGYwMjljZTJiLCAweDM5YzZiN2YwLCAweDUwN2Y4MTlkLCAweDQ1YWRmYWM2LCAweGQ2NDRlNzFiLAorCTB4Yzc0NmJkMzEsIDB4OWVlOTEzOTcsIDB4N2FkZWM4NDEsIDB4MjFlN2YzZTksIDB4YTZlY2Y3MGUsIDB4ZjE4NzlmNGYsCisJMHg2N2U3ZmQ1NiwgMHgwNjFjNDNjZiwgMHg4MjcxNmVkOSwgMHhmZWJiNTIzZCwgMHg1NDYzOGM3ZCwgMHgzMGIyZWRkYSwKKwkweDM3ZjNhZmZiLCAweGNmZjhjNmJmLCAweGRkOWEzZmNlLCAweGRiNzNhZDAwLCAweDZmNjBhMWM5LCAweDZiZmM2ZTc0LAorCTB4ZGU3NWM0MjIsIDB4ZmQxMGFkYjMsIDB4Mjk2Y2Y3MzksIDB4ZjgyMjQ4MTgsIDB4ZjgxNDk0MGIsIDB4Zjg4ZmRmZDYsCisJMHhkYWJkM2Q1MywgMHg1ZTMwZGI5YSwgMHgzN2E1MWNlNCwgMHhkYzUwODdlOCwgMHhjNTlhYTA1YSwgMHhiYzc4YmEwMSwKKwkweDcxYzg4NmRhLCAweGQzZTJiZGJlLCAweDYxYmU2ZjlhLCAweDY2YzVlODEyLCAweDM0NWMxNzY2LCAweGE1MDBlZDRlLAorCTB4YTBmZDE1ZTMsIDB4Yjk4Nzg2ZGYsIDB4YmY0Yzg5M2UsIDB4NGEwZmYwNzMsIDB4ZmEzYTYzYTcsIDB4ZjczY2RlN2QsCisJMHg1OTQyY2Y1NywgMHg3MTlmN2M3MywgMHhlMDdlYzE2YSwgMHgwZTIzODk0ZCwgMHgxNjlkM2M1OCwgMHhiZjRkOWI5MCwKKwkweGEwNDBiOGM1LCAweGY0MGJiMTViLCAweGMxNDNlN2YzLCAweGVhNGE3YzJmLCAweGY3NDNmZjQ2LCAweDViZGUzMzM2LAorCTB4MDg3NmQ4YWIsIDB4Y2I3M2E3ZTUsIDB4MjVkMzhjN2UsIDB4OTNiNzllM2MsIDB4ZmUyYzdlODQsIDB4NmE3YWZiOTIsCisJMHhiZTJjZWM5YiwgMHhlMjFmZTM4ZCwgMHhmYzBlNWNkZiwgMHgxOGRjZTNjZSwgMHg2ZmYxMmIxZiwgMHgwZGJkYzU3ZCwKKwkweGVmZTM0ZThmLCAweGJjZjhiMDJhLCAweDc4MGZhNmVhLCAweDVlOTg1OTFjLCAweGU5ZDAyZTQyLCAweDEzYzZiN2M4LAorCTB4MDI3MDc4MmEsIDB4ZTNhYmM2MWUsIDB4MTdjNzIzMzgsIDB4Mzk3ZGUyODYsIDB4YTA3ZTgwYmQsIDB4OWE3MTQzYTcsCisJMHhlMjE4M2YzNCwgMHgyMWMyZmNmNiwgMHg3NDFmNDExMiwgMHg5ZmYxNjZhZSwgMHgxZWY2OTI5ZCwgMHgyYzNlOTg2OCwKKwkweGFkMTVkM2FlLCAweGZmN2Y1MzkzLCAweDM2MmYzOWUyLCAweDlmOGFlZmZlLCAweDI2OTc2OGQ4LCAweGQzYzE1MWFlLAorCTB4ZjU5MTBiZDksIDB4ZjBiNDQxNzgsIDB4OWE5M2RkOGYsIDB4MDVlZmU4MjMsIDB4YzAyNzQ3ZTQsIDB4MTMxMWY5NzksCisJMHg3YzVlN2JjMSwgMHgzN2RjYTRmZiwgMHhiM2I0ZmVlMiwgMHgwYjhjNDVlYiwgMHhhMWI0MDg2YywgMHg4YmViZDcxZSwKKwkweGEyNGU3ZTFhLCAweGQxMmRlZjFmLCAweGI0ZDU0ZjRjLCAweGVjZTI3NWIwLCAweDQ2ZGZiYjI2LCAweGViN2Q5Y2UxLAorCTB4OWFlN2U0MzUsIDB4MzI0YzQ3MGQsIDB4ZGQ3YmI3ODUsIDB4MmI4YjEzNjYsIDB4ZWIwM2YyNjAsIDB4ZmUzNTVmODQsCisJMHhjOGVmMmZiMywgMHhkZmNkYmQ0MiwgMHgzM2Y3ZDIxNSwgMHhkYjUzZjc5YiwgMHhkYTlmYjkxYSwgMHhmZDM1ZTcwZCwKKwkweDkzMDFjYTU0LCAweGZlZjE3NmQzLCAweGI3M2QxOGNlLCAweGVkMzNiYzAxLCAweDEzM2E1ZWNjLCAweGRkMjI4YjEwLAorCTB4MmQxMjk5OGIsIDB4MjM3M2ZkZjEsIDB4ZjVkMzczZjMsIDB4YjI1N2RmMTIsIDB4NDQ5NGY3YjMsIDB4NWZkYTM0NDcsCisJMHgwZjczZDhmNywgMHhkNDgwMGNjNywgMHg4YjEyNzE4NCwgMHhjNTVjNzllYiwgMHhhMDI0ZWU0MywgMHhiNWZiNjJmNywKKwkweDE0YmJjNjA0LCAweGM3ZGFhYmYwLCAweDAxMmY0ZTRiLCAweDJhNGE0ZGJiLCAweDY3M2VhYjE5LCAweDFhNmZjNjUxLAorCTB4MTU3ZTIwNjAsIDB4MTdiMWVmZmQsIDB4MjdmZDg0MGQsIDB4NjE4M2NhMzEsIDB4N2RhN2Q3MWMsIDB4YWZmNTg0NjksCisJMHhmN2ZjYzdkZCwgMHgwY2IxYzJlNCwgMHg3NDZlZGVmOCwgMHg3MGE3OGFlZSwgMHg2ZTBiMjdkYiwgMHhlNmY2YmQ3MCwKKwkweGU0M2YwNjdiLCAweGRmNjhmMDRmLCAweDdhNTg4NDg1LCAweGRiOGY1Zjk4LCAweGRkYTBmNjgwLCAweDJhZDI3NDEwLAorCTB4NGY2OTZlYzQsIDB4OGJhYzBkYzIsIDB4MTg4OThjYjgsIDB4ZTg3MThmMDIsIDB4YTZhMmY4OGYsIDB4MDczYWJkYzEsCisJMHhkNDI5ZTZhMSwgMHhlZjM1MWI3MywgMHgxYWU0YzQyNCwgMHg5MDI2ZWY3NSwgMHhiZDc0MTkwMywgMHg1NTdlNzFiMSwKKwkweGY2NzY3MmZjLCAweDAzYjcwYTZmLCAweGNkODg2M2RmLCAweGJlYzBmNTI0LCAweGI0NWVlYzJiLCAweGVmZTQ5ZTFiLAorCTB4NDhkZmQwNTgsIDB4MjM4ODY3ODgsIDB4M2JmNTZlZDEsIDB4Y2Q1ZmI0MmUsIDB4NWZiNDEwZmIsIDB4YTNkNjNlNGQsCisJMHgxOTE3YzdjZCwgMHg1ZjVhNDc4ZiwgMHhhNjM4ZjllMiwgMHg0M2M0MzY4OCwgMHhkOTQxYTE2YywgMHg0ZjBmMTVhZiwKKwkweDM2M2I4ZjBjLCAweDUwODNiODgxLCAweGUzMGQ5ZDdlLCAweGM5NzhhOWMwLCAweDZjZDg3OWVhLCAweGYxZDM3MWRhLAorCTB4NGM0NGY0NjksIDB4NjA2Yzg3NjYsIDB4Nzc3Y2Q0ZTMsIDB4ZjM4MDk3MTIsIDB4ZDNiZjY4ZjcsIDB4ZGJmMjZhZjEsCisJMHhhYTNjNzlhMywgMHhkZjQxMTg5MSwgMHgwOWRhYTJkOSwgMHgwNjhmN2ZjNywgMHg3YjhjNGJkZiwgMHg3ZDAyMjQ4NywKKwkweGNiNTdkZjA4LCAweGM0MTFlZTA0LCAweGZlZDA3OWYwLCAweGUwOWRmNTM1LCAweDZiZmQ2MDFkLCAweDRlYzE5MGUxLAorCTB4MmJiZjdkZjUsIDB4Y2NiN2ZhZjgsIDB4ZTgxZWYyNWEsIDB4NzU2MTljOWIsIDB4MzEzYmM4MTgsIDB4YmRlMjY0ODksCisJMHhhODAxZDZkNSwgMHhlNjE2ZDI5ZiwgMHgyZjM0NjM5MywgMHhjYWJlMzIzNCwgMHg2ZTUwNDE1OCwgMHg5YzU5YmEzMiwKKwkweDhkMTI1OTBhLCAweDhhMzlhOGY2LCAweGI4NmM5NmM4LCAweDI5NjQ0NGM3LCAweGYzZjE3YTFiLCAweDIyZDcyNWYzLAorCTB4NWM2NTA1MDMsIDB4YjY4ZDc5NGUsIDB4MzdjZWVkNmIsIDB4MDg0NGE1Y2MsIDB4YmY4NTExNDAsIDB4MzFmM2RhMzcsCisJMHhhMzcwZGZmNCwgMHgxYTMwYzkzNywgMHg3NGI3ZGUzZSwgMHhkYTk0NjBlNywgMHg2ODIzYzE0YiwgMHhiNWRkZWUxMCwKKwkweGU5MGIwODY3LCAweDA4OWFmNzgxLCAweGYwMTc3N2I5LCAweDRmMjg2Mzc4LCAweGJhY2Y3MDgyLCAweGY3OTQzYTMxLAorCTB4ZGY3ZDUxNDQsIDB4NjdmMmM2OTgsIDB4YmE1ZGVmYTMsIDB4M2ZiYmMyOWMsIDB4MzQ2Y2U0YTYsIDB4NzljYTI3OGMsCisJMHgwNTc3OWUxOSwgMHgxN2ZlNzBlMywgMHg3MTk0NWY1YiwgMHg5OGVhNmM4ZSwgMHhmOTk2M2QxMiwgMHhjZjFkZTE0ZCwKKwkweDNkZDBmNmUxLCAweGQ3ODc1YzZhLCAweDEwN2M5NGRhLCAweGNkMjUxMWY3LCAweDU1YWY1MWZiLCAweGI5NjNmNjA3LAorCTB4MWQzNGYyMDEsIDB4MjUzMWRmMTYsIDB4ZWIxMDk2MjUsIDB4OTMwYjRiYTMsIDB4ZmQ3ODg1MmUsIDB4OWQwMzI0ZDIsCisJMHg5NzQ3ODBlNywgMHg2MGZiODJlZSwgMHhhMjNjM2M2MSwgMHhiMGQxODNjMSwgMHg0OTllZDc3YywgMHhkZjJjM2M2YSwKKwkweDdmNDg3NjA1LCAweGJhYzAzMGYxLCAweDg5ZjJlOTdjLCAweGU1Mzc5ZmZkLCAweGM0MmI3ODhiLCAweGYwMTllNDNiLAorCTB4ODdmMWE1ZGQsIDB4YTE1ZmU4NmQsIDB4NDdhZTBiM2YsIDB4M2VlYWNlMWMsIDB4ZmIyYWJmZWUsIDB4YzUyNzBhMTEsCisJMHg1ZmNjMmUzYSwgMHhhZjg1M2I0YSwgMHg3NDliZTJmYSwgMHhiZDhjYmNlMiwgMHg5ZmU1YTdhZiwgMHgwMzI3YWI2MiwKKwkweDdhYjcwZGUwLCAweGUxYzZkOWY2LCAweGY2M2VmMWZjLCAweDNkZDdhZjU0LCAweGFmOTg0Yzc5LCAweDA2M2JjZDg5LAorCTB4YjMyZWY3ZWUsIDB4YWFjYTM1ZGUsIDB4Y2Q0ZWNiZjIsIDB4ZDFhNjIwNWIsIDB4MmM4MTY2ZjEsIDB4OTNlNzg0MjQsCisJMHg4Y2I2NTBiMCwgMHhmMDRjZjNhMCwgMHg3YWNlMzAxOCwgMHgwNjNiZDU5OSwgMHhlZjRjNzFmYSwgMHg4NDk1ZDIwZSwKKwkweDMxZGUwMDlhLCAweDBiOTYxODgyLCAweDZkODZiZmE1LCAweDUwZGViZjZjLCAweDYyMmZmMDZhLCAweGMwMDJiZGU3LAorCTB4ODc0N2YzMGIsIDB4MTliYTNmOGUsIDB4NDExY2I0N2YsIDB4M2Q2OWE4ZmUsIDB4YTVhM2Y4YzIsIDB4MGJmODFmM2UsCisJMHg5ZjYwY2RjZSwgMHg0N2JhNDhkZiwgMHg3OWFmZGQwMywgMHg0OGQwYTliNCwgMHhiNTk4N2ZmOSwgMHhmMjg1MjFiYiwKKwkweDE0ZDY0NDg1LCAweDc4OGE1ZjE2LCAweGFmOGMzMWZkLCAweGY4Zjg3ZDE3LCAweDQ1ZjU3OTk0LCAweDY5M2RjNmRmLAorCTB4N2VjMjY2OGYsIDB4Y2YwMWFmNzIsIDB4ODViYzE0YmIsIDB4OGIyYjA3ZWMsIDB4Zjc2NDFjMjMsIDB4NmE3ZTgzNGUsCisJMHhjMzc2M2I3MywgMHhmOWVkMzdmNCwgMHg3MGRiOGMwZiwgMHgwNzY5YmRlYywgMHhhMzRjNzdiNCwgMHhmYjg1NzIxNCwKKwkweDA4YmJkYzZkLCAweGE0NmRjYmRmLCAweDMxOTAwMGYzLCAweDc1ODY1YmE0LCAweDMwN2M2ZmJkLCAweDAzZTEwOWY5LAorCTB4YzA0YzllZWMsIDB4OTc5NDExYzcsIDB4MTA5ZWZjZjUsIDB4ZmZiYzNiOTUsIDB4ZGVjYWNjM2EsIDB4NjU2Nzk4NjUsCisJMHhhYzA3ZTdmYiwgMHgxZDk5NGYyMiwgMHhjN2I3YjA5NiwgMHhkYWFkZmIwNCwgMHg5ZmFjMDYyNSwgMHg3YWE2NjkwMCwKKwkweGRlYjA0YmZlLCAweDI2YTM1NjAzLCAweGE3YTE0ZTVlLCAweDkzNTQ0ZmMyLCAweDg3N2RlMTVhLCAweDNkZWY1ODhjLAorCTB4YjM4OWZlNWEsIDB4MjllMGE5YTYsIDB4MTFmMzFlZWQsIDB4NGEwYzljZjcsIDB4ZGQ3NzlkODcsIDB4ZTUyYWViMGQsCisJMHhlZDM1MWI5ZiwgMHhjMDE2NDk0NiwgMHhmODFmNTI5YiwgMHg2ODdkMTIzMywgMHhhZThjNDViYiwgMHgxN2IwNTY3MSwKKwkweDIwNWNlZTM2LCAweDdmNDJmOWMyLCAweGVmMDM5YWU5LCAweDM5ZmFkMWM3LCAweDg5Yjc1MjU2LCAweGExODljZmI2LAorCTB4NzllM2U0MjksIDB4YTdjZjIwN2UsIDB4NDNmZDM0YjAsIDB4ZGZhMDQxYjcsIDB4ZWJiZjczNTcsIDB4MTcxZTU2YjMsCisJMHgwNjVlNzQ2MCwgMHhjYjNjNTNlZiwgMHgyOTMxM2FmMSwgMHg0NTA1ZDcxYSwgMHg4MDY2YzE2ZSwgMHgzZjIzNmI3MywKKwkweDRlZWI0ZWJmLCAweDE0ZGQwMDMzLCAweDFiNzYzNjM5LCAweDY4YmE3NjgyLCAweDA2NWQxOWE1LCAweGM3Nzg2Mzg4LAorCTB4ZWM2ZGU3NDcsIDB4N2I1Y2VmNWIsIDB4YTdiZmJiMjksIDB4YTczMmZlZmYsIDB4YWZiNmY3ZjMsIDB4YWY3NWVhYmYsCisJMHg0YmEwNjVmNywgMHg2M2M3NTQ3NSwgMHhjZDdjZDEzNywgMHhmOWUxOWZhNSwgMHhjZDZiMjJlMCwgMHgzYjczZWE1NSwKKwkweGZmMWZhYTdkLCAweDNhNGUxNzNiLCAweGZjZWMzZWMwLCAweGM5MTQ1Y2NhLCAweDMyYjBlZWNlLCAweDZmOGY3N2ZiLAorCTB4ZWM1M2I2M2EsIDB4ZTgxNTI0MmUsIDB4NDEzZGY1NjQsIDB4NTc2OGE2MzMsIDB4MWU1NTA4ZmQsIDB4YzYzNjUxZDAsCisJMHg2NTZhZmFjMSwgMHg3NWFiYTRmZSwgMHgxNDdmMDNmNywgMHg0MmJkN2U2NCwgMHhmNDEyMzhkMiwgMHg1ZmQ1OGU2NCwKKwkweGU1YzM4YjhjLCAweDQ4MTcxOGU5LCAweDUxZjY2MmJlLCAweGNlMGZmZDE0LCAweDc5ZjkwYTk3LCAweDczYjBlNzk4LAorCTB4Mzk3ZjJjMjcsIDB4ZTM5MzhkMzEsIDB4MmE0YzdlYTAsIDB4ZGEyM2NmYzIsIDB4ZTI3MmI5ZjcsIDB4NWRlODIzNjUsCisJMHhmMDhhOWU5MiwgMHhlNTc0YTIwYSwgMHhkMWRhMDkwMywgMHgzMGNiOTJlNCwgMHhhODkwYWI5ZSwgMHhiZTNhMzFlYywKKwkweDZmYzY3NDljLCAweGJhOTY0NzUzLCAweDlmZWZmMzI3LCAweDZjZmFmMzAxLCAweGQ2MTMxOWM0LCAweDY2YjhkN2YzLAorCTB4ZWM2YjI3YjgsIDB4ZTgzNzQ2OTQsIDB4NWRmZmRmZWQsIDB4M2M1MjMzYmMsIDB4ZTMxYjc4YzUsIDB4MTJiZTNkYzcsCisJMHhlYjMzOWMzNywgMHgxMmVmOWFmMSwgMHhiZDVkZDg5NiwgMHg5ZmM3YWJmMSwgMHgzZTBhZGYxZSwgMHhmYmNiNzhmNSwKKwkweGNlMzkzZGQwLCAweDdhM2YxYmQ1LCAweDUwNzQyODdjLCAweGM3YzdhY2YwLCAweDhhNmZmMDNiLCAweGNkMzI3N2FmLAorCTB4M2JkYWNlZjgsIDB4NzdkZjg2NDYsIDB4ZGVjOGI5YTgsIDB4ZmRhMGY0NmQsIDB4NDNjN2M4NWEsIDB4NGZiNDU3ZWQsCisJMHg2ZWVjMTIwYiwgMHhlMjllMWVjNiwgMHg3OGYwYzRjMiwgMHhlM2Q1NzhmNSwgMHhlM2JmODczMSwgMHg3YzQ0NjI0MiwKKwkweGUwMzc3NDQ3LCAweDAxNjFmMjhiLCAweDdlZDA0YzFjLCAweDcwOTliNjBiLCAweDU3ODI0OGZmLCAweDA2ZmM3NTEzLAorCTB4NDdiZTA2MWQsIDB4MTc5NzM1NzcsIDB4ZDYzOTJmMDUsIDB4MDBiMTlkYmEsIDB4ZTc4YTljY2YsIDB4YTU3ZjU3ZDcsCisJMHg1YjBiNjdiNSwgMHg3ZjA2OWNhNywgMHg3NzhjNGU0MCwgMHg4OTQxZjgwOSwgMHg1ZjM4NGE5OCwgMHgxNWYyZDUxZCwKKwkweGQ1MzU5NzFmLCAweGE4ZWFmOWNmLCAweDkxOThhZjhlLCAweDBiY2FjZjEzLCAweDc0ZjJiYTlkLCAweDg1NTA3ZTgyLAorCTB4NTZmM2Y0ZWYsIDB4ZjgxNWViZjgsIDB4OWUzN2ExMzAsIDB4YjJjYWZlMTQsIDB4OTkzYmZiNzEsIDB4Mzg3YjA2MGMsCisJMHgzMWIxYjVlYiwgMHg2YjQ5OWZhMCwgMHhjM2JmNDQ1YywgMHgyMTI1YzNmOCwgMHg5MTRmOWMzOCwgMHgwZGUyMDUwZiwKKwkweGZmYTY3NzdkLCAweDlkYWE3YTAzLCAweDNmMmE4MmFlLCAweDViZDEwY2MwLCAweGE3YTA4YjYwLCAweGM0OTkzZTE0LAorCTB4Yzg4OTM1ZTksIDB4MzQ3ZmMwM2IsIDB4MTJmZjE4ODksIDB4NTU1M2Y3YjIsIDB4OTllNjU3ZjMsIDB4OWU2MDUyNDIsCisJMHg0YzVkNThhZiwgMHg4Njc5ZjNiZiwgMHg0N2NkNGRlNiwgMHhkZTQ0ZmJhMCwgMHgxYjI4YzRmZiwgMHhkZDIwYjdkZSwKKwkweGZjMjFiM2M2LCAweDMyYmJlMWE3LCAweDNjMmUyOWIyLCAweDI3ZDc4OTBlLCAweGIzMDhlYjQzLCAweDdiZTI2NmQ3LAorCTB4ZTQyZjE0YjYsIDB4MWM3ODZiMWIsIDB4YzQ2MDliNWUsIDB4MzhmODU2NzcsIDB4OTI4YmFkY2UsIDB4NzllZDRlMjEsCisJMHhlYzA3M2JkMSwgMHhkZWMyYjNiOCwgMHgzMTlmOWMyYywgMHgzN2Q2MDIzOCwgMHgyZDY3Zjk3ZCwgMHg5Y2EwNmIzYiwKKwkweDdhYzMyYmQ2LCAweDIyOTVmYzdjLCAweDZmNzQyZmYzLCAweGE0ZDdmYjMzLCAweDUyODc2ZGY2LCAweDQwNzVjNjcxLAorCTB4NzA4OTlmOTEsIDB4OTAwYWYxNWYsIDB4OGMwYTYwYjcsIDB4Y2E1ODZhZmIsIDB4N2NmZGJhNjgsIDB4ZjJmYmVlMzksCisJMHhkMDhkYjI1YSwgMHgyOTllYWVjZiwgMHg0ZjlmOTcxOCwgMHg1ZmIwNDYzYywgMHhlN2FmN2NmNSwgMHhlYjNmM2Q2ZiwKKwkweDhmZWMzN2Y5LCAweGZiMGExZWU4LCAweDJmY2FlZjkwLCAweGUyMTY5ZDhhLCAweDZmOTRjMzliLCAweGMyOWJlYjU0LAorCTB4MWU3Zjk0MmYsIDB4OGQ3NWJjMDUsIDB4MzAxOWU0ZmQsIDB4ZmQ4ZGY3YWIsIDB4MzdkNjExMmMsIDB4ZGIwZjBlYzUsCisJMHhhMGM3OWUxYiwgMHhiOGY2NWY1ZSwgMHhiYmZmODc2MiwgMHhmMDM0ZmJjZCwgMHhjZjc0OTFhMywgMHgyMzY5ZjY4MiwKKwkweGVmYjgwNjVkLCAweGYzY2RiNmZlLCAweGVjNTc3YzBjLCAweDJiZWQ4YjkzLCAweGUxYmE0ZWM4LCAweDhiMzM3Y2E1LAorCTB4MjA2MDIxZDMsIDB4YmNhYmRlZjgsIDB4NzUzZDQwNDAsIDB4YTA5NmU5MDcsIDB4MjRlYTNiYmYsIDB4OTY3NWZlY2QsCisJMHgwN2UzZmJhNSwgMHhmZWIwM2NlMCwgMHhmMjA3OGMxMiwgMHg4ODlhOTQ0MiwgMHg3MTVjNTllZCwgMHgzMWVmYmYwMywKKwkweGUwMDQ3YmIyLCAweGRhODVjZWY1LCAweDY0ZDhmOGY2LCAweGNkNWRmODRlLCAweGFmYjYwNThmLCAweDQ4ZTk2NTlmLAorCTB4YTViNDdiODAsIDB4YmViZWI2YjIsIDB4N2ExZTY1N2YsIDB4YjU3NmZhYjgsIDB4NzgyMTlkZmMsIDB4YjJhZGQ4YjcsCisJMHgzMWI1NWUwYiwgMHhkZTM0MjYzYiwgMHgwM2JiZjg3NywgMHhmMDA2ZGYxNCwgMHhlYTVlYjRkNywgMHhmZjAyMjQ3ZiwKKwkweDJhMzdhOTJhLCAweGFmMThkMzJlLCAweDk5YjYyZmIyLCAweGZmN2E0N2E3LCAweGMxNDdlOTQzLCAweGFlZDI0Y2Y3LAorCTB4OTE2ZmYzZTAsIDB4ZTg5YTJmZGUsIDB4YzM3ZGZiNjUsIDB4NzljZDQxNTMsIDB4NzQ2NjkyYmIsIDB4MmViYjQ2NGYsCisJMHgxZGEwMjAyMywgMHgzM2M4MTU1ZCwgMHhmM2Q4ZDZjYywgMHhjYmRiYmY2YywgMHgyOTc3ODc5ZSwgMHgwZWYzN2VhMCwKKwkweGVhMDdjZjY2LCAweGQ1NTA1ZjcxLCAweGFiMzdmNmNjLCAweDk5Mzk4Y2UxLCAweGVkMTMyNDBmLCAweDE1YmVkMGZjLAorCTB4ZTFhYWEwZTIsIDB4MWU1NjNmOWQsIDB4ZTllNmFiODQsIDB4ZDdmZWFjOGQsIDB4ODdhNjg1YjYsIDB4ZTlkZjYwMzMsCisJMHgzNGRjOTI0ZCwgMHg4NmExZTJiZiwgMHg2YTNmYmEyOCwgMHg0MjE2MjU0OCwgMHg1ZDdmNDdmNywgMHgxNTk0ZDBmMSwKKwkweGUyY2E1NGI5LCAweGM1ODkwMjNjLCAweDQyNmQ4MzdjLCAweDVmYzlmN2ZmLCAweDAxYjA3OGFmLCAweDdmNzRjOWY2LAorCTB4ZWQ1MzYzZDUsIDB4OGY5MmZiNWIsIDB4ZTIxNzM2ZTMsIDB4ZWFmZGFmYjEsIDB4NWYyNTMxZmQsIDB4MDc3ZTU0ZGIsCisJMHhhMjdiZmQzZCwgMHg3ZmMwMzE1YywgMHhmNDdkZjMwZiwgMHhjMmVmMGJiNSwgMHg5MmU1ODFmZCwgMHhkZTIxNDMwYiwKKwkweGJiYTcyMjZiLCAweGE5ZmRjZWQ5LCAweDNhY2Y3NjU2LCAweGVkOWFmNDVmLCAweDVkNmZkZjIwLCAweGUyN2UwMTE4LAorCTB4YzMxZTQ2NzcsIDB4N2YyYjU5N2QsIDB4YWZhZjcxNmYsIDB4ODUyM2VkMWMsIDB4NjY3NjcxOGUsIDB4Njk3YjVmZDcsCisJMHgxNWY2MDM5YiwgMHgwM2ZiOGRkNywgMHg2NzNmMGZkZSwgMHg5ZDk5ZWY2NCwgMHhlYzY5MzVjZCwgMHg4NTZjODdkOCwKKwkweDQ5NWYwMDcxLCAweGQwNDRkYTI5LCAweGVlYzcxM2NiLCAweDdjZWIwYzNjLCAweDU4NDNlYjVmLCAweGQwMDQ3YmZmLAorCTB4ZmVjMmU0ZmYsIDB4NjlkZjNjNDQsIDB4YmYwMGU1ZGUsIDB4ZGY3ZTU5Y2QsIDB4NWI3MzVjZmMsIDB4YWQzNDVkZTIsCisJMHgwNzA3ZjhkZSwgMHhmOWQyYTdlYywgMHhkYjE5Y2VmYywgMHhhYTliN2RmMSwgMHhjYmJlMjIyZCwgMHhiYzRkZmI0MCwKKwkweGNkYzdmYzFkLCAweDYxMWU3M2IzLCAweGQ3YTk0NGRkLCAweGQ1ZGZjMjNmLCAweDQ5YmZlYzUwLCAweGFmOWZiMjUxLAorCTB4MTJkZjhhODcsIDB4YmFiOGUxZGYsIDB4MWM1OGY0NTksIDB4NzNjMGVkYmQsIDB4MmM5ZWQyN2IsIDB4YzkxMDdhMDYsCisJMHgxYTNlMWMzZCwgMHgwYmI0NGVjOSwgMHhmZDBkZjlmOSwgMHg3ZWY3ODRlZCwgMHg5YmNjZjNiNywgMHg3Y2RkOWZjZCwKKwkweDczOTEzMjE1LCAweGQ4MDJlNWM5LCAweGNjMDFkZTQ3LCAweGIwZjRjNzM5LCAweGZkNWRiZjYyLCAweGE5M2ZkNjk1LAorCTB4NWJmMzFmYjcsIDB4MjE0OTJmNDcsIDB4ZGVmNjBmODgsIDB4MWZjOWI3N2IsIDB4ZWMyZWNlYzksIDB4OWVkMTEyOWUsCisJMHhjNDcxZTQyNCwgMHhmNDk2ZjY1NywgMHg0Y2ZlZjBhOSwgMHgyNzA2ZGJmNiwgMHhjZWM4M2JmNCwgMHhmOWI2YjFmOCwKKwkweGE1MWY3YzMzLCAweDg1NmYwNDg2LCAweGQxNjY5YWYyLCAweGE2ZGYyNDE5LCAweDFlZmM5NzlmLCAweDU3NTQ1ZWZlLAorCTB4YmUwMmU0YWIsIDB4MTVkZDZhZWQsIDB4MTZmOTA1OTUsIDB4YjU1ZGZkMTEsIDB4MGU1ZTI2ZmIsIDB4MmFkOWQ2N2MsCisJMHhiNTIxM2JlMSwgMHg4MDcxM2VkYiwgMHhmN2Q2NTAxZSwgMHg3ZWY2NTZjZSwgMHgzMWViNTc0OCwgMHhlZGMwYWVmYywKKwkweDFjYmY4OTZjLCAweDA2OGQ5ZGQ2LCAweGI5ZGNiZmI2LCAweGQwNTY2ZmZiLCAweGU4NWU2ZjBiLCAweGFkN2RjNzg5LAorCTB4YjZmNzNlYjIsIDB4MDUyZjExN2YsIDB4YmZlNDMxNzYsIDB4NDRiZmRiNTUsIDB4ZTIwMDc4OWMsIDB4MjQ2MzBhOWYsCisJMHgzYjYxMGEyMiwgMHhmY2ZhZDdiNSwgMHgyNzYyNTkyMSwgMHg3Y2U5ZDdiZCwgMHgwOGM1Zjc1OCwgMHgzN2M3MzVlYiwKKwkweGZjMDhjZmVkLCAweGVmYmY1ZmFlLCAweDZhN2I3M2I1LCAweGY3ODZjOTA4LCAweGM0MmU1YWY1LCAweGNkYmRlMjU3LAorCTB4MTE3M2FiNTYsIDB4NWQ5ODVmZmEsIDB4Y2NmM2I1ZDIsIDB4ZmJlMTUzMTMsIDB4ZGJkZDkxNWUsIDB4ZGYyMjIwYmYsCisJMHg3MmJkYjViZiwgMHg4ZDRkODc1OCwgMHhkN2E0MDZmNywgMHg3N2NlODMxNywgMHg3ZmViNDFiZSwgMHhmOTlhMmJiMSwKKwkweGNiZWU4ZGEzLCAweGMyMDZmN2Q1LCAweDVmMWNmZGY1LCAweGFlNzY2NGMxLCAweGJiYzMyNzI1LCAweGVlZGJkZjM4LAorCTB4MmVmNWVlZWMsIDB4YjQ3NjEzZDUsIDB4ODBhN2JiM2IsIDB4ZWFiMTFkZmEsIDB4YzVmNDA5ODgsIDB4NTNjOTdiMjAsCisJMHhhYzA0MGY0YywgMHhlNDk5MTc4MCwgMHg2ZmRhMTBhNywgMHgwN2M5MzQ3OSwgMHgyN2FlZWFmZSwgMHhkYmEzODg0ZSwKKwkweDAwNjBjN2IyLCAweDliNWQ4Y2JhLCAweGViMmVmMThhLCAweGZjZGZiOWY5LCAweDU1MjlhMzQwLCAweGYzZTY1ZmE1LAorCTB4OTI1M2EzNzMsIDB4ZjU0ZTM0M2MsIDB4ZjRjMWQ5M2QsIDB4MTU1ZGE5YzAsIDB4ZjkzZDQyYmYsIDB4MWUxOTMzNDcsCisJMHgxYmZjNWQ2MSwgMHg0ZDliNjdkNywgMHg1MDBkZDRmMiwgMHhmNzAxYThlZiwgMHhiZjc3M2IxYiwgMHg2OWRlMWJiZSwKKwkweDM1ZDg3ZjliLCAweDAzOTlkNjFhLCAweDVlYjQwZjIwLCAweDBkZjVkZWNiLCAweGYyZGIyZjEwLCAweDZhZWY0MTIxLAorCTB4NjhhOTUzNGUsIDB4NDFiZWZkYTAsIDB4NzYwZmNjNWMsIDB4ZTBmYjgwYzAsIDB4Nzg5MGZmOTAsIDB4ZmI5ZTYxZTIsCisJMHhmOWJmNmNlZCwgMHhlNjgzMWVjNiwgMHhmZTBkZTk5YywgMHg3NjViZTgzZSwgMHgzM2I3YzE4OSwgMHgzZGE2ZDQzZiwKKwkweGI3YTBmMWY5LCAweDZmYmRkOTA3LCAweDhmNmIxZTAwLCAweDVjMzgzNDc3LCAweDYyOTliZjYxLCAweGIwMzg0ZDI3LAorCTB4ZmEyOGVhNjksIDB4MGQ2NzA5Y2YsIDB4ZWJiNzIwNGUsIDB4ZTYxMTFhYzAsIDB4NDg0NTNhZWIsIDB4ZDk3YTQwYWMsCisJMHgyZWRlMTQ0ZCwgMHhjZTM3YmMzNSwgMHgxYzc0NzgzMiwgMHgyYTljODE2ZiwgMHhlZjJiYTdmOCwgMHhmZjM0OTlhMywKKwkweDBlMzFiYjQ2LCAweGZjMTRhNGUyLCAweGZhNTBmMzJiLCAweDY3ODgwNTc3LCAweGM5NDUwZGI1LCAweGZjNWJlOWIzLAorCTB4ZTY5YzRhYjcsIDB4ZGU1MTI3MTgsIDB4OWNiZTQ3MjcsIDB4Y2ZiY2Y3NmEsIDB4M2I0NjQxZjgsIDB4NjhhZWQ0ZjYsCisJMHhmMzM2NDdiNCwgMHg5NTI0OGM3NSwgMHgyOWZjMDMwZSwgMHhhNzgyZmE3NCwgMHhlYWZhNzhjYSwgMHgwNzVmM2NmZiwKKwkweGYyYmJmNDk0LCAweDI1Yzk3YWY1LCAweDc3ZjBkZjIzLCAweDMwNzI1Y2ZhLCAweGIxZTIxZDJhLCAweGVmZjFkMjVhLAorCTB4NTVlMmE4YTEsIDB4YTkzZTAzY2YsIDB4ODdmOGQ2MDIsIDB4MDYwYzNhNWEsIDB4YjM1NTRmYjgsIDB4NjdjNTg4NGQsCisJMHhkNzY5ZmE0MiwgMHgxOGNjZjg4NiwgMHgzOTZiZmU0MCwgMHgyYjhlNTA0YywgMHhmOTk0ZmRkNiwgMHhlMWJlYThlZiwKKwkweDc5ZTE1N2VmLCAweDNmMGZjODM0LCAweGQwMjQxZTk3LCAweGVhZWI0Mjc0LCAweGRmODgyOWM1LCAweDJhZTQwM2EwLAorCTB4MzcyYTI3OGMsIDB4OWEzNWQ2OTAsIDB4ZGZlNzVmODAsIDB4ZmM3OWQyYzMsIDB4NGFmZTc3N2MsIDB4ZDk2N2NhMmYsCisJMHg2N2E3MTYyYSwgMHgzOGUyYTQ3NSwgMHgyNTdlNzFjZSwgMHg4ODY0ZTg4NiwgMHgxYmIwNjhlMywgMHg0ZmM5ZjEzNCwKKwkweGRkM2RiZTcwLCAweGY0MWI2NGZjLCAweGQ2MmJmOTRiLCAweDZjYWZjYjQxLCAweDE4MTlmYzc5LCAweGE3YWZjMmFlLAorCTB4NTM4NDI0OWIsIDB4ZmYzZGFkMWUsIDB4NzgzMDc0NGUsIDB4N2UzMDBlNWIsIDB4ZTUyNGQwOWYsIDB4MTM0OWZiYzMsCisJMHg3ZjA0ZTI2NCwgMHg2YjRkMWJmMCwgMHg2ZmRmZDA0NSwgMHgzMmE3M2YwMCwgMHhmZDc1ODczOSwgMHhhYzQ3YWVkNCwKKwkweGVlZjU4MzNmLCAweGRmODA4MTg4LCAweDk0ODliMzc5LCAweGM1Yzk1NDZmLCAweDZhYWZkNWNlLCAweDVkNjJiN2U0LAorCTB4NmZmNDU0ZmQsIDB4YTAwOWM0NzcsIDB4NTViOTE1ZTcsIDB4ZTRkOWJlZjAsIDB4ZmZlNTA2YmUsIDB4NGZmYzlkN2EsCisJMHg0MThiZWQ2NiwgMHgyN2JkNjg1OCwgMHg1OTNmZmNiOSwgMHg3ZTlmZTU0NCwgMHgxNThhNmQ4YSwgMHg1MzY2Y2UwMCwKKwkweDI2YjRmN2U0LCAweGZmMWZiZTM5LCAweGYxZWFmNDg1LCAweDkyNzU3YTVlLCAweDFkZTdlZDgzLCAweDlhZmZiNGU5LAorCTB4M2Y3MDdhZWIsIDB4ZTcxZjFhMWYsIDB4MmIyNzI3OWIsIDB4MDAyYTkzN2MsIDB4MDUyOTFiZmUsIDB4MTQ1ZjAwMzMsCisJMHg2OGNmYzBhZiwgMHhjZGJlODJiNywgMHg4Mjc3YzM0YiwgMHgyMmUzZjM3YSwgMHgyMzRkZGNlNSwgMHhhNmJkNjFiNywKKwkweDA2ZjdhZmM4LCAweGU0Y2U0ZjE4LCAweDVmNjBjNWJhLCAweGM4Y2IxN2M3LCAweGVmMDVhN2E3LCAweGFlYmEzOGIwLAorCTB4OGU3OTA2OWQsIDB4Mzk0NjE3YTAsIDB4NDJmOTFlOTgsIDB4MTFkZTZhZjIsIDB4OTIwZTNkZWYsIDB4NGU1ZDdjMGMsCisJMHgyZjMwNmE3NywgMHgwMjcwNGFiMiwgMHhkNzcyOTQ3ZCwgMHhlMDlmYmUyYSwgMHg0YWVmOTRmMCwgMHhmZGUzN2JmZSwKKwkweGJkZmNiZDJmLCAweGI4NzE4ZTU1LCAweDY0MjA5OTllLCAweGFkOWY4NDczLCAweDQ3Yzg0NDY3LCAweDZiODYyMGI5LAorCTB4ZTZkZTQxOTMsIDB4MjdlYzc1ZDMsIDB4YjRlYzc1YWEsIDB4YWFmYzg4ZDQsIDB4Y2UzZWUxZTAsIDB4YjJjNDVmZWYsCisJMHhmY2U3MGY3OSwgMHgzZjZjMGQzMSwgMHgxNzNmMzdjNCwgMHg4MTQ2OGMxMywgMHgzMDI4YjVjOSwgMHhmZTAxMTc3OSwKKwkweDVlNTc1ZGU5LCAweDVkN2Y3YzgzLCAweGRjYWZiZTY0LCAweDMzZjkxYWIwLCAweGY3ODljOGI2LCAweGJhMzQ5ZTQxLAorCTB4OTE5OWIxMmQsIDB4ZDMxZmIxZjQsIDB4ODE3ZjZiOWQsIDB4NjNlMDJiZmIsIDB4ZTRiZWZiOTAsIDB4ODBlNDFjYTAsCisJMHgzZjdmZTA0NCwgMHhmZDE1N2ZlNSwgMHg3Y2EwM2UxNCwgMHhhNTQzODRmMSwgMHhhMTdjZjQyNywgMHg3ODI5ZGY5YywKKwkweGZmM2JhY2Q5LCAweGY1YzFjOGZiLCAweDdkNWQ0ZjNjLCAweGYzMjhhMWM0LCAweDNlNzRkZWY5LCAweGJmY2U4YmRiLAorCTB4Y2IwZTc0NjEsIDB4ZDE1YmQwMTcsIDB4OWM4MThmMTMsIDB4Y2U1YmViOGQsIDB4YWM0ZTMxNmMsIDB4NmNkMWYwZDcsCisJMHhlNDY4ZmI4YywgMHhkZTAxNDBlNywgMHhlN2RkNjg1ZiwgMHgzOWQ3ZDlmYywgMHhmN2FiMzJjZSwgMHhlMGZlMzU3NSwKKwkweDE5OTVkMWJjLCAweDZlNDI4ZmU2LCAweDZiNTgyZWQ3LCAweDhkZjQ3M2M2LCAweGJjYjNjOTg0LCAweGJlYWZkYTMzLAorCTB4NTIzNGU5YTcsIDB4ZmFhMjk0MDMsIDB4MDllN2QwMWQsIDB4MjEwNzBhYjgsIDB4MjI2ODVhZWYsIDB4ZjgzZjc0MTksCisJMHg0ZWU5NmE0NSwgMHg3MWY5YTc4OCwgMHg4YTNjNWNiYiwgMHg0OWEzNjNjZSwgMHhlZTFkNzY5ZSwgMHgwMGQ3ZGMwYiwKKwkweDBkOGE2YmZjLCAweDg4YWY4ODRlLCAweGYwMDUzOGY1LCAweDAwNGJhMDQzLCAweGViMmY3MGU0LCAweGZiYmE0YzY3LAorCTB4YmFhZmRjNzIsIDB4MWY0MDYzZGMsIDB4NTJmNGUwMWMsIDB4YTFlMGFiZTgsIDB4MmZhZWY1YWYsIDB4OTg2MmRhYmEsCisJMHg3MmYwMjQ1YywgMHg5OTc5MWViZCwgMHg0ZjAzNGRjYiwgMHg2NDQ3YWUyZiwgMHg0MWM5ZTQxMSwgMHgxODQ0OGJiYywKKwkweDA3YTY0NGZmLCAweDIyNjQ3YTQzLCAweGNmYmU3M2MxLCAweGYzZTQ3YTc1LCAweDdjOGY1ZTFmLCAweGI5MjNkMWFlLAorCTB4MDhmNTExMWQsIDB4ZmY5NDQ1ZmQsIDB4NjhiOWE2ODQsIDB4OTFjMzkyY2YsIDB4ODYyOTU5ZWQsIDB4YjAwOWM3YWQsCisJMHgwOTdhZDI4ZSwgMHhhMWZiZmIzMiwgMHg1MmRmMzgwNywgMHhjNDM4YzQ4ZSwgMHhjNjMzMjZjNiwgMHhjODdhMmI1ZCwKKwkweGMzZTQ4ZDMxLCAweGMwNzUzYmRmLCAweGE2YjUwYmJhLCAweDgyNGYwZjc5LCAweDkzMjRkN2YzLCAweDRmODNjZTBiLAorCTB4Zjc0OGRkNGIsIDB4ZGNjMzc0ZDMsIDB4MjI1MWZjODgsIDB4ZTgyM2JkMDAsIDB4MGI3ZTAyMjMsIDB4OTk4MzRmZjksCisJMHg0NTZjNWRkZiwgMHg0ODUwNTkzOSwgMHhiOWRkMWQ3MCwgMHg1NWYyM2M3NiwgMHgwMDlhNzE3OSwgMHgyZWIxNWI3YywKKwkweGI4ZjI4MDU2LCAweGU4MDM0ZWM5LCAweGUzMWU2NTJiLCAweGM2NDgxYTE3LCAweDk0ODM5NDE4LCAweDhjMWM5NTE4LAorCTB4YzA0NGViOTcsIDB4NmY3OGIwZDcsIDB4Yzg0YjE0OTIsIDB4ZmY0ZjMxNjUsIDB4YjliN2VkNTgsIDB4N2VkNWU2ODQsCisJMHhmNjVmOWExYiwgMHg5NzM2ZmM1ZCwgMHg2NWM5ZmNmZCwgMHg3M2M5YjdlMCwgMHg4Y2M2NDY3OCwgMHg2NWNkZmY0MywKKwkweGFjMGNlNjkwLCAweDZmNGE4OTEzLCAweGZiOGVjYzVkLCAweGNiNTJmY2JlLCAweDQwZTQ0M2ZkLCAweGFjZWM3ZjJmLAorCTB4YzdmNDJlNzUsIDB4ZDQ3YzAyNGUsIDB4MDY3ODlmMjQsIDB4MTUzYmUxYzAsIDB4MzY2ZWVkMTEsIDB4MmY1YzAxOGUsCisJMHhkMjA5MGY5MCwgMHg5ZDQ5NDA2MywgMHg0NTEyZmUwOCwgMHg4NzAzNWNlZiwgMHgxZWQ0MjhhZSwgMHgxNDMzY2UwMSwKKwkweDg1YmQwMzc5LCAweGNlM2M2ZWU3LCAweDc2NTVmYzAxLCAweDkxZmJkN2Y0LCAweDkzMWYyMDhmLCAweDJiNDdkNjFkLAorCTB4ZGYxMTBkOGEsIDB4YzYzM2JlMTEsIDB4NjdlYTgzZjYsIDB4ZDZmNWZhZDIsIDB4ZjhmMGU1OWYsIDB4ZTllNTExNWYsCisJMHgzZDk1MThjZSwgMHhkMWYxNjRmNCwgMHhjMTBlNzY0NCwgMHg5YmJiZTVkZSwgMHg0NWFiZjFmNywgMHgxOTJlZjdlZSwKKwkweDYxNWY3ZTEwLCAweDQzMjRkOWI0LCAweDEwZjEyOTNjLCAweDRmMTU1Mzk3LCAweDQxMGFiNDJjLCAweGZlYTdjNDNiLAorCTB4NzQ2ZTc2MGQsIDB4MDMzN2ZkYmYsIDB4YjdmYWJmYTYsIDB4YjA1NGEyOTIsIDB4NmUwYzViZTcsIDB4N2M0MTE5NmEsCisJMHg3YjgzY2EwNSwgMHgyNjdiYzExOCwgMHg2MTZlZmUwMSwgMHgyM2NkOWI1ZSwgMHg4ODQzYmY4MSwgMHgzZGEwZjdlMiwKKwkweGRjOGRmM2RhLCAweDY4MWJhMWVlLCAweDMzNTZlMmY5LCAweGFlYmRjZGZlLCAweDFlZWZlNTNjLCAweGIyMWVmMWI4LAorCTB4N2RhY2RmODIsIDB4YjhjNDhlNGYsIDB4MWJhMzYzNGQsIDB4ODU4ZDZjZTQsIDB4NTE2MzVmYzEsIDB4NjA2MmJiZWEsCisJMHgxY2ViZWViZCwgMHg2NGMyZTI3ZCwgMHhmZTI5ZjdmNCwgMHg0MWRkODljNSwgMHhkNjkyZjAxMSwgMHhlMGIwMzJlZCwKKwkweGIxOGZkNjM1LCAweDk1N2NlMDliLCAweGM3MDBmNWYzLCAweDliM2RlNmZiLCAweDczYzc1ODQ0LCAweDg2MmUzNzI2LAorCTB4NzY0YmNlZmQsIDB4ZjNjMDBhZWYsIDB4NzZiNTEzOTUsIDB4MGVhMTU4ZGUsIDB4YjkyNDZlZmYsIDB4NDkzZWUwODYsCisJMHgwZWY4OGY5MSwgMHg5YTRjMDNiMiwgMHgxZTFkYzNkOCwgMHg5ZTU3M2Q1MCwgMHhmZDgwZWNmMiwgMHgxMTA5NGM2NCwKKwkweGFlMmE5ZTAwLCAweDVmMjAxN2U3LCAweGI4NDc4MDY0LCAweGJkZmMwMDZlLCAweDA4YjdmZTRlLCAweDdiY2Q5YzM5LAorCTB4Zjc5MDA1ZjIsIDB4MDU5M2VkMDEsIDB4ZmU2ZjY2NTcsIDB4ZWVmYjA5NWUsIDB4MDRmZTJjYjEsIDB4MDdlY2FhZTgsCisJMHhiMmY2ZmQ4NywgMHg1MzRmZTBjOSwgMHg2MThkNmZlYSwgMHhhZjJhZmM3YSwgMHhjNDVjMDBiNywgMHg0MjJmM2U3NCwKKwkweGZiYTYxM2JmLCAweGE5MjllMGRiLCAweDliNzJlNWYxLCAweGNmOWFhNWM5LCAweDUyZjA4MjdjLCAweGM3OWM2NDNhLAorCTB4M2NkZWMzYTAsIDB4NjJkOWY3NDgsIDB4NGYyYmRmYjEsIDB4NjU2ZTMxMDUsIDB4NzBjMTFkNjAsIDB4MDdlZDIxOWUsCisJMHg1MjFhN2VkMCwgMHgxZDAwMmVkNywgMHgwYjc5ZWYzNywgMHg3ZGI4M2JjNywgMHg1Y2I5NGIyNywgMHg4MGY2ZTI2ZCwKKwkweDM2N2RhZTMyLCAweGUzZWU1ZWI2LCAweGU3MGRkMWU3LCAweDdhZjk3YWQ4LCAweDkyZTMxNzhjLCAweGU0MzQ3OTk0LAorCTB4MjhlYTkzNzksIDB4NmYxMDk1ZmMsIDB4NzhlZmI2MzMsIDB4NDI2M2I3OWIsIDB4MDE2ZjM2ZjEsIDB4NzdhNzZhYmQsCisJMHhkM2RlMDZlYywgMHhmNzEyMGRmYiwgMHgyNDdhNDUxZSwgMHhmMWRiNjQyZSwgMHgwODE3N2I5NSwgMHhjZTU2MjdhMCwKKwkweDUwMzdlYzhjLCAweGVlNGFjNWY0LCAweGI1YzU1NTc3LCAweDVhYTMxN2JjLCAweGM2OTZhNzJmLCAweGZhNTRkMzU5LAorCTB4NGNmNzY5NDgsIDB4MzM2NWFlMzgsIDB4NTM3OTZiOGYsIDB4NTJkNDZlZDMsIDB4MGNkM2YwMGIsIDB4OGMxMGU3OWIsCisJMHgzZjdiZjk1YiwgMHhkMWRmZjllYiwgMHgwYWIxZjY1MSwgMHgwYzlkNTJiZSwgMHhkY2M3YWY1ZiwgMHg4ZGNlMGZiOCwKKwkweGNhNGU0ZjAwLCAweDkxMmRlYmM3LCAweDljMTNjM2UzLCAweDMwNmY2ZTA2LCAweDhjZWQyMTdlLCAweDZhMWU2MDVmLAorCTB4YjcwMmViYmIsIDB4NzhmMmFlM2IsIDB4NGY4YzhjMGIsIDB4YzkzZTQ1M2UsIDB4ZGYwMWI3ZjUsIDB4ZGI5MjJmOGUsCisJMHgxMDg3ZmY4MCwgMHg4YzQ1MjdjZSwgMHgxZWZjZjQ0ZiwgMHg3Y2UzOGNlZCwgMHhlZjAwNGRkMiwgMHhiMWJkZTE2MywKKwkweDNmZjFmYTA4LCAweDA2N2NkODYzLCAweGZmMjNlN2I0LCAweDBhZjg3OTUwLCAweDNhOTQ5YmQ3LCAweDQ5MjNjMjUxLAorCTB4YzM4YzU0ZTcsIDB4N2U5OTU1ODQsIDB4NjllYjkzMWYsIDB4N2E3MzdlMDMsIDB4ZDM5ZTUwNGEsIDB4MDc2NjRlYWQsCisJMHhhMGZlMzJhNSwgMHg0MjY3MDVlZCwgMHgyZmZlOWU1OCwgMHg0Zjg0MmNlNywgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKKwkweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGQ1NTQ3ODBiLCAweGIzZGFlOGI5LCAweDY0OTMyNjY3LCAweDZmMjY0YzkyLAorCTB4ODA4NDlhZjIsIDB4M2M4NzAxMDgsIDB4NGUzZDI4NzgsIDB4MGY3ODYwMWUsIDB4MDI0ODM1MDgsIDB4NDgwNDJiYzMsCisJMHhkMmQwNDEzMiwgMHgyMDE5NmYxZSwgMHg4MzU0ODA4NiwgMHhhOTZhMWVhNSwgMHg1YWYxMWUwZSwgMHhkNTI4MzY4YSwKKwkweGYwOWQ4MzYwLCAweDQxZDA1ODJhLCAweDM5NmI0MmQxLCAweDBhOGEyMzQxLCAweGY0MWVhMDA5LCAweGZmZmRlM2QwLAorCTB4Y2NjZGFkN2YsIDB4MjI4ODk5ZGUsIDB4YjllZWZiZjYsIDB4NjJlY2ZkMzcsIDB4ZGFmNmJkZWQsIDB4OGZkZmZhZmYsCisJMHhmYjBjZDdiNSwgMHgzM2Q2YzYwZiwgMHgyYTFkNzZjNiwgMHg4Y2I5NmM5NiwgMHg3OTRiZmJjNSwgMHhjNWEzOThjYiwKKwkweDhjZjNkOGNjLCAweGZmNDBiNTk1LCAweDlkYmJmYzJiLCAweDc0NjNjZmIxLCAweDE2MzAyNThjLCAweDJiMTg5MTZiLAorCTB4YTQ2ZmFjNjQsIDB4NTk4ZGZhODUsIDB4MTg3YWU0YWUsIDB4MTVkMjM2YmYsIDB4NzljMDQ5NmQsIDB4MjYwOTBlNzQsCisJMHhlY2MyN2UxOSwgMHhmODc0MzA2NSwgMHg5OTk5N2FmMiwgMHhjNGJmNWU3MSwgMHhkNWFjYzY2NCwgMHhiYzIzMjI5NiwKKwkweDJlYzZiNTM3LCAweDdlZmU2MGI5LCAweDBiNzhjZTkxLCAweDBiMTcwM2NkLCAweDc5ZDIyZGEwLCAweDJkNzNjMGQ3LAorCTB4NjZhMzhlZDEsIDB4Njc5MmNmNzgsIDB4MjY5ZDJkYzIsIDB4YzE1ZjdmNDYsIDB4YjEyZGI1N2YsIDB4MzViYmJlYWEsCisJMHgyMDM5ZDJjNSwgMHhmZjgyNWZkMCwgMHgwZWZmODE0OCwgMHhjNjFiMTMzMSwgMHhjNWJmMGQ1OCwgMHgyY2FlYzg5NiwKKwkweDZiNTdjYzBiLCAweDBlNjg3OGVhLCAweGYzN2VlYmY0LCAweDkyYzE5MWI5LCAweDgwNWViODZjLCAweDc5NDNmOWUzLAorCTB4ODFjZDczOTEsIDB4ZDYyYWRlZjUsIDB4NTVjMzliNzksIDB4Y2ZmMTg3YTIsIDB4YzY2ZWI5NDYsIDB4ZjA4ZTQ3ZTcsCisJMHhhMWUxOTNlZSwgMHg3ZDllNjVlMSwgMHhhNDBiNjg3YSwgMHhiMDUxN2RmYSwgMHhkOTk2MzY1ZSwgMHhhZTNmNDFiNywKKwkweDQzNDdiNTgzLCAweDg3NDRmNjM3LCAweDQ3ZmExYTIzLCAweGE3ODRiMWNkLCAweGI0NzQzZjViLCAweDYyZmFjMmU3LAorCTB4ZTdjMjRjOWMsIDB4MzhmOTVmMDEsIDB4ZTU3NzhiMWYsIDB4ZGUyMzA3M2IsIDB4ZTAwY2NiOTYsIDB4NjFlOTAxNzgsCisJMHg4ZTNkMzZiZSwgMHhkZjA0NzU5YSwgMHg1Mzg3MzM1MSwgMHg0ODg0YzNhMSwgMHg1ZDBiMjhjNywgMHg0ZjVlZjQ2NywKKwkweGQ3ODAxYjMxLCAweDk1ZDA0YzM3LCAweDU3OWU4Mzc5LCAweDRjYzVhNzVhLCAweGNmMWJhZWUzLCAweDMwN2QzMDlmLAorCTB4N2ZkYjU5OWUsIDB4ZTgxM2Y4YmQsIDB4MzJkZmYxYmIsIDB4ZjAyOWRkZTEsIDB4ZDYxN2RkMWUsIDB4ZWYwOWYzZmQsCisJMHg5NWUwYmEyNiwgMHg2MWY3NTMzYSwgMHhkYjUxZjAwOSwgMHg1ODY0ZGIyNiwgMHg5NjY0YTBjMiwgMHhkOGM3MTlkYiwKKwkweDBlYWRmYjlhLCAweDVhMjc4M2U0LCAweDhjMTg3YjI0LCAweGIzNjYwZTY3LCAweDI1NjQzMjI0LCAweGRmZjlkNjIyLAorCTB4Yjc2MTBjYzcsIDB4YWMxNzBiNDAsIDB4NjI5M2NlMzAsIDB4ZGU0MzZlZjQsIDB4NDMzMzdmZDksIDB4MDJiMWRjMzgsCisJMHhjM2U4MDY4ZSwgMHgwNTE2NWQ3MywgMHgwZGY1MDczMCwgMHg0NTlmZWFlYywgMHhmODYxZjE4MiwgMHg2YTRiOTgyZiwKKwkweDgwOTc2ZjY5LCAweDMwNDY2YjcwLCAweGRlZTAwMTk3LCAweDNmMTMyNmQ3LCAweGUxMThkMTNlLCAweDdmZjk4MzBkLAorCTB4ZTFlMmUzYmIsIDB4YjljZmQwOTksIDB4ODJjYjg3NWYsIDB4MzM5NjA5YmYsIDB4NDNhOGY4OTEsIDB4Mzk1YTBhZmEsCisJMHgwZjQwMzRkYSwgMHg4NDcyZWRmNywgMHgyZGYxODY1ZCwgMHg1ODQzZDExMSwgMHhmYjQ1NjMwYywgMHg5YWQ5Zjk4OCwKKwkweGJjMGYzMDdlLCAweDA0N2I0ZDY3LCAweDNmNGQ2ZmFkLCAweGUyMmM4ZjkwLCAweGZmOTE3YjgzLCAweDU5MTk0N2Y3LAorCTB4MDRiZjVjMGEsIDB4ODZlMzgzNzIsIDB4NDYzNzhlYjMsIDB4NzRlODA1NjUsIDB4NTlkM2Y1YTksIDB4ZWVmZDYxN2IsCisJMHhkNzZmM2U0OCwgMHg5MWZkMmJkZSwgMHhlM2ZiOTU3ZiwgMHg5N2I1Y2M1NiwgMHgyYzU2MzNlNiwgMHhmMzhhN2ViYiwKKwkweDFkNWZkNzI5LCAweGUyMzQ1ZWYwLCAweDgyMzRiMTliLCAweDA3MjdlODk3LCAweDM3OGFiYmUwLCAweDFjYWZjNzBiLAorCTB4NzQ3NWE3YTUsIDB4YWUzYjA4YjEsIDB4NjBlOGM1YmIsIDB4MjljZjI3NDgsIDB4NWUwYWRmY2UsIDB4NzQ2ZjA0ZWIsCisJMHg3MDllMTViNSwgMHgzODllZmFjMSwgMHhlN2M3NjY5MSwgMHg4NTJmNWFiYiwgMHhiMzdkZTBlYiwgMHgyMzBmNWM2MywKKwkweGVlZjRlNWRkLCAweGUyMmU2NzY4LCAweDFkY2RkMmYzLCAweGU3NWViOGI5LCAweGQyZWY4NDQ2LCAweGFlYWNmNzkxLAorCTB4ZGY1YWViZGMsIDB4N2Q2NGRmNjMsIDB4NDliOWJkNmUsIDB4M2ZjOWU5OGEsIDB4ZGE5MDNlNWEsIDB4ODY5MGJmZGEsCisJMHhkNDMwOWM5MCwgMHhlNjBjOWU1YiwgMHg2ZWViMDM1ZCwgMHg0OWI0M2MxYywgMHg2MzRmNDI0NiwgMHhjNjRmOTQzNiwKKwkweDA2NjcyYzJhLCAweDMxM2RlODA1LCAweDEyZGRiOWM2LCAweDE4OGU1ZjI0LCAweDJmNWMwZWU3LCAweDhmMzUyN2JlLAorCTB4ZGUxY2Y5ZDYsIDB4NWU3NDcyMWYsIDB4NWQ3NzQxYmUsIDB4ZjQyOTdjZWIsIDB4YWY0NDdkM2EsIDB4NWE5ZWIxNWEsCisJMHgwMzI3ZDk5MywgMHhlMTk3NmNmYywgMHgzZTQ1MGU5MywgMHgwYmMyN2JiMywgMHhmMDhiZDhmNCwgMHgyN2VkOGE3OSwKKwkweGJmY2Y0ODVjLCAweDEwNmJlZDlhLCAweGM1YmY3YTFmLCAweGVmZjA0NTE5LCAweDExYjFmN2M3LCAweGJkNzE5MjczLAorCTB4ZmYxZDIzNmIsIDB4ZjZmZTg2NjUsIDB4ODNmMzhjNTUsIDB4MTI3ZjYxMTQsIDB4YmY3M2I3MTYsIDB4ZTRmNTAyMzUsCisJMHg5ZmQ3MThjNCwgMHhiYTgxYmU3MSwgMHhkMDljYjM4YiwgMHg3NTNiZjAyZiwgMHg3ODFkYjk3MywgMHg5MmZiYWM0ZCwKKwkweDk3YThlMDllLCAweDU4ZWJmZTcxLCAweGFmNDI1ZmZmLCAweGZlMWQwN2JmLCAweDA1MDc0YzE2LCAweDdkMDRhMzNmLAorCTB4NTA3ZTIxNDcsIDB4M2ZlYjc3MjEsIDB4ZjAwNTMwZTksIDB4NGY1MjgxMjMsIDB4OGY5Y2Y2YjUsIDB4ODQwYzhlYjEsCisJMHgwN2Y3N2RiNywgMHhiZTYwM2JmZCwgMHg5ODNlNTdiYSwgMHhmNzViZjI4NSwgMHhiNzExMTg3MiwgMHg2MzliZTVmNCwKKwkweDE3Y2Y4ZjkwLCAweDczMTZmMmIxLCAweGM5ZmE3ZDRmLCAweDNlYmI3YWNhLCAweDRiNGViMTg3LCAweDFhZDVlOTM2LAorCTB4YmViMjM3ZTYsIDB4ZGE5NzRmYTgsIDB4MTRmYTQxZjUsIDB4NDdmYmE2MjAsIDB4MzgwOWZlMGMsIDB4OTk0MjkxZmYsCisJMHhiYmJlMDJhZCwgMHhjNDllMWY2NCwgMHhhNTY5ZTg0MiwgMHhiMzI1NmQ3ZCwgMHg3ZmQ4MDdjZiwgMHhmMDBlN2E4ZSwKKwkweDQxNzc2NDNmLCAweGNkYTVlMTBjLCAweDNiNThmYTRhLCAweDZhY2FjOGZlLCAweGVmNGU2OTdiLCAweDFhMTkxZGYzLAorCTB4YmI0NWVlNWUsIDB4YjA2NzMxMjEsIDB4ZTU4ODQ5N2QsIDB4YjQ1NzI1NzYsIDB4MDgxZDI4YTAsIDB4YTMxN2I5ZTcsCisJMHg3NGI4MWViYywgMHg2OGFkZWYyZSwgMHhiNzNhNzgwNiwgMHgwZjdjY2RlYiwgMHhlNjM5Y2JmMCwgMHg5NDA3ZjY1ZiwKKwkweDZjY2Q0ZjlmLCAweGExYzc2YTFiLCAweDhhYWZlNTZmLCAweDBmZGJjODBhLCAweGZmYjVmMDQ2LCAweGQxYTNhNWUwLAorCTB4NjEzZjE4MzYsIDB4NGY3OGJlZTcsIDB4YzA3ZWZlMTAsIDB4ZTU1ZTlmZjQsIDB4MmY3YzJjZGYsIDB4N2QzMGZjMjMsCisJMHgwN2E0N2Y0NywgMHg0NGQ5YzNmYiwgMHg3NjEzYjQxYiwgMHg3Y2U3ODgxZiwgMHgzYTQzYTg5MCwgMHhlYjdhMTcyZiwKKwkweDY0Njk3ODc3LCAweDJiMDliZTYwLCAweDk0OGY4OGVhLCAweDEzNjVlZDdlLCAweGY1MDVjNmYzLCAweDlhMjM3ZWY1LAorCTB4NjZjYmRhYmUsIDB4NWY3MTg1ZTYsIDB4NDllMmEyNTgsIDB4N2Q2MWY0N2YsIDB4NTM3YzdmNTAsIDB4MmJhZjY5YmMsCisJMHhmNDMyM2I3OCwgMHhlZmRhMDY2YywgMHhmOWExZTFmMywgMHg3NzE4ODQ2NCwgMHgwOTMyM2VjOSwgMHg0NjA5YTNmZCwKKwkweGM0MjU4ZTVmLCAweDM0YmNjNjM4LCAweDU3YWViYjRlLCAweGE1ZWNiYTU3LCAweDFiZTFkZWZhLCAweDk2YWU2NDZmLAorCTB4ZjQzNDdjMTAsIDB4OTljMzdiZWEsIDB4ZDk3YWU0MDcsIDB4YTFkOTAzNTYsIDB4MzJmZTU3YTMsIDB4ZjdlODFmMmQsCisJMHg2NTgzMTZjMSwgMHhmYWIzZTAzNSwgMHg3ZWQyZmJkNywgMHg4N2FiZjcwZSwgMHhlODI0NTk4NiwgMHhlNWYzNjA3ZiwKKwkweGZjMmYxZjIwLCAweDc1YzRlY2I1LCAweDU5NjViMDdmLCAweDNmNjgzY2UyLCAweDAxYWM3ZTA2LCAweDM1NmUxNjM4LAorCTB4YWRlYWY1ZDAsIDB4YjNmNWQyZjcsIDB4ZmUxNzRmODIsIDB4ZWExMDYxM2EsIDB4ZDdmYmEzZjksIDB4YWIzYWUyMjcsCisJMHg4N2Y2YjFmZiwgMHgxYTc2MmZhOCwgMHg0Mjg2ODMyZCwgMHhiMjQzYjM1YiwgMHhjNWM5MDY5NywgMHg1NWMyYTdlMiwKKwkweDU2M2E5ZGZkLCAweGQ2NTBlYjhkLCAweGQ1ZDcyNGNkLCAweGE3ODAzNmZiLCAweGRkZjc1NjJhLCAweDZhZmQ5N2ZjLAorCTB4OTVmYzA1ZmYsIDB4ZjIwNGQ4YWEsIDB4MDlkZDI2NTcsIDB4YmMyYmFlZWIsIDB4YmVlMjdlNDQsIDB4Yzc2NDExODMsCisJMHhjOTk2NjhmZiwgMHhmZDBkZjAxZiwgMHgwMmRmM2ZjZiwgMHhlODdmOTJmZCwgMHgwODQzZTRlZCwgMHhmNDJkMWYzZSwKKwkweGE0Yzk2MzMyLCAweGJjNGNhYTg3LCAweDRmNWJiMjVmLCAweDk0NDk0NGZlLCAweGYxODZmODRjLCAweGZmNzBkMWU2LAorCTB4MWY3OGM0NWYsIDB4MzdlNDBkZTgsIDB4MzRkYThmMjYsIDB4OGU4ZGM2MTIsIDB4MTNmNDMwMzEsIDB4NzhiN2M1ZmYsCisJMHg3ZWZkMDMwMiwgMHhiYmZkNjVmYiwgMHgyOWViNDExZCwgMHhkMDAzY2Q2NiwgMHgwNjYyMjkxMSwgMHgxZTg3NzVjZCwKKwkweGQ0OTg5N2FmLCAweDhjZTc0N2Q3LCAweDZlNzY4YjNiLCAweDVkN2Q0NWI0LCAweDU4ODY5YjkxLCAweDAxNDFmZmUwLAorCTB4ZjA3N2RmZmUsIDB4YzNjNjQ3YTMsIDB4Yzg4ZWFhZmEsIDB4ODZiYjBmZGMsIDB4ZTEwZDc5N2UsIDB4NWY5ZDIzZDcsCisJMHhjZjAxZDhhZCwgMHgzOTU4MTUxZCwgMHg4NjgzZTU3YSwgMHgxMWFiZTQxNCwgMHhmZDBkNWIxMiwgMHg5NTg0YWUwZiwKKwkweDBiODc5Mjg1LCAweGJjYTM2ZmU4LCAweDgwZWZhMDMzLCAweGRhMjc3ZDAwLCAweGEzZWQ1ZDE3LCAweGIxMWU0YzM4LAorCTB4ZTExZjZhZjQsIDB4ZWU3YWU2ZmYsIDB4MTFkMWU1ZWIsIDB4NmJmN2E0NmIsIDB4NmU1NmEwZjUsIDB4MzgzZDJmYmUsCisJMHgwYzgxZTg2MSwgMHg0ZmI1MTQ0ZiwgMHg0ZWM5ZmI2MywgMHg3YWI0NWZhZSwgMHgxNGY3YWI1MSwgMHhkNmYwYjRiOCwKKwkweGY0YTlkNjVlLCAweDFiNThkMGRkLCAweDNkZTgwYjhkLCAweDFiYmRlOTIzLCAweDhkMWQ1ZjE4LCAweDgxNWYxMTBkLAorCTB4Nzk3YzI2NWQsIDB4YWUyOWU5ODYsIDB4MGRlMWJmMDMsIDB4YjY2Yjk3MWMsIDB4NDgwMTE1YzUsIDB4NDhlYzk2MGQsCisJMHhjYzMzZTdkNCwgMHhlZTUwYjdhZSwgMHhiMDNiN2YzMiwgMHgxZWJkODE5NCwgMHg4NzU5YTNiNCwgMHhlMjRiYTM3YSwKKwkweDEwNmVkYWY0LCAweDAzNzNmNjJkLCAweDYyM2JjZmYxLCAweGJjYjFlZGZkLCAweGM1MGZmMTBmLCAweDhhMmJkOThkLAorCTB4ZmViMDdiZDksIDB4ODRmMzEzMzAsIDB4ZjdiZDkxZTcsIDB4ZjMwMmYyMTgsIDB4YTJlMzFjYmYsIDB4OGM0NThkNzEsCisJMHhkY2IxOWRjNywgMHg2MDFlY2JlZiwgMHg3ZTYwNTlkMywgMHg4NzU5MjAzNiwgMHg3MDI2NWFmNCwgMHgyNWE1NzZiMSwKKwkweDdiZjgxM2I3LCAweDZhNjRjYWRkLCAweGU3YzQ1ZmQxLCAweDY4MjM3YjNjLCAweGNlNGJlZjVkLCAweDZiNzcyODIxLAorCTB4N2E1YTdjMDUsIDB4ZmUxNTViNjQsIDB4ZjYwZmY2NzYsIDB4ODcxNDE2ODcsIDB4NTZkMWQzZDYsIDB4ZThhN2FkM2QsCisJMHhlODE5MTlkMSwgMHg3ZWRmYmM2ZiwgMHhjZmVhMDY3NywgMHgzZjVlMDFmNywgMHgzZGJkM2ZkYSwgMHg4NGZjZWJlNiwKKwkweDNlM2M4NTg3LCAweDhjNDRlYzI4LCAweDI2N2YyMzg4LCAweGM3ZDgwNGU0LCAweGI1ZmQxM2IxLCAweGJmYmE0ZTk1LAorCTB4YjUzOTY1NmUsIDB4YTBhZTU3MWIsIDB4NTliMWRkZmIsIDB4OTFlOGZlZjQsIDB4ODFiM2ZiY2YsIDB4NjQxYjlkN2UsCisJMHg4YzBiMDNiMiwgMHhmMGIxZmVjZSwgMHg4ZTkzNGVkZSwgMHhlYWY3ZDFlMiwgMHhjY2JiNjVjZCwgMHg1YzUxOWQ3OCwKKwkweGYxZDFlMGIzLCAweDE0MmU1MGRiLCAweGY1NjNiYTM4LCAweGQ2ZGVlZWI0LCAweDNlYmQ2ZDk5LCAweDNhY2I1ZGZkLAorCTB4NWQxZWQxYTIsIDB4MDA3N2M3ZTUsIDB4N2UwMTg5M2IsIDB4MzJiYjIxOWMsIDB4YzcxODA5YWQsIDB4MzhlMjI0NzQsCisJMHhiZmVmZTRiNywgMHhlZTgwODI4MywgMHg5NTZmZjQwYywgMHhlY2NhZmZmNywgMHg2MjE2YjZjOCwgMHhhMTA2YzM5YywKKwkweDcwNDRiNDVjLCAweDczODVhMzdiLCAweGQ5ZjM5NWEwLCAweGMxMzY5NWRhLCAweGZkYTgwMzA3LCAweGVmNjFmODU4LAorCTB4YTEwYTlkYTMsIDB4Y2YxMTZlNTcsIDB4NmUzYjM2MWQsIDB4NjYzMGY3YzEsIDB4ZDY5MzdmMjYsIDB4ZGEzYmZhODEsCisJMHg0MjcwODc5MSwgMHhmNzgwNTBiYywgMHhjYmQ1MjU4NywgMHhkYmY5MDkwNiwgMHhmODBkZjVjMiwgMHg3NzFmZGNhNSwKKwkweDJjNzFjNDhlLCAweDA0NGQyMWRlLCAweGY5MTMwYzdhLCAweDA1ZjJkZTliLCAweGI0ZGUzODVhLCAweGU2ZDBmOTcyLAorCTB4Yzk1Njk0MTEsIDB4Zjk1YTk0MjMsIDB4NmIxNmZlN2EsIDB4NmM3N2U1NTEsIDB4MmExMWNjMmQsIDB4Y2FkNWIwN2YsCisJMHhjM2IyNjZmNSwgMHg3YWRhNDcyMSwgMHhkNzAyYmI5NywgMHhmMzE5MWViYiwgMHhkZWNjZTUyNCwgMHg1MWE0OWEwZiwKKwkweDNmOThlZDJkLCAweGFlZjUyOTQ5LCAweDYzNGFmY2MyLCAweDNkMGU1NmFjLCAweGM5NTc5OGUxLCAweDNkMTJlOTc2LAorCTB4ZWZkMTJlMzAsIDB4MWMwMjMyMmEsIDB4ZTkxMjYyNWIsIDB4N2VhYzQ5N2QsIDB4YzBhYmQyMTUsIDB4MTc0NWEzYTUsCisJMHg0YWYwOGZlYywgMHg0MzA3OTA0YSwgMHgwNDdlODVmMiwgMHg3OTQ3MGQwOSwgMHg5YWU1MWYxYiwgMHg1ZjlkZjg0MywKKwkweGMzNjhjNmJmLCAweDQ2NDc5M2ZjLCAweDAyNTY3MmZkLCAweDM4ZmUwMTNlLCAweGE0MjIyMDdiLCAweDIyOGY3NzNmLAorCTB4MWY3MTUyYjcsIDB4NGYwNWU5MzQsIDB4MDUwZjA4MTksIDB4MTY2MmZkNGYsIDB4ZDRmMDViYzIsIDB4MjgyOTdhMWQsCisJMHg2YWM4N2Y0ZSwgMHgzZDlkZmMyMCwgMHhlMjkzMzhiMCwgMHhhYzYxOTNlNiwgMHg3OWNmNTY1ZiwgMHg1NDVmMDUxYiwKKwkweDYwYmY3YzA5LCAweGFiNzdjZDBjLCAweDViYWZmYmM1LCAweDdmODI3NzRmLCAweGQzZDJhODkzLCAweDgxMDlhZGFiLAorCTB4ZWQ1ZDRjN2MsIDB4YjNkM2QyNDUsIDB4ZmMzZWRjYWMsIDB4YjA3MmRmNGEsIDB4NTdmM2UwMGYsIDB4ZjExZDk5ZjMsCisJMHhhZDk5ZjhiZSwgMHhjMTdiYTc5NCwgMHgwNzc2MzJkOCwgMHhjNzRlYTdhZSwgMHhmZmIwMGYzMCwgMHhmYjA3Y2JlMCwKKwkweGRmMzg3ZmEwLCAweDgzZmQxNDM2LCAweGQ5MWZjZmFiLCAweDdmZDc4OGRlLCAweDIyODZjZDU1LCAweDFiYmM1M2ZlLAorCTB4N2MwN2NjMjUsIDB4Zjg0Y2RlMWUsIDB4MTg1YjdjZmEsIDB4NWE0YjA1NWIsIDB4ZWM2NWFjNzQsIDB4YjliZmEwNGYsCisJMHhhZjUwYzc0NiwgMHg2ZjBkZDc2OCwgMHhiMTkyZTgzMiwgMHgyMzc0MTlmNSwgMHhmZjUxZmQzOCwgMHhjNjA3NzQyOSwKKwkweDE0M2QyMjMyLCAweDUwZmUyMWJhLCAweGY2ZGZlZDlmLCAweGMwYWZjMTEyLCAweDQ2YzYyNWI1LCAweGNjZmM1YmY4LAorCTB4MjdjOGIxY2UsIDB4MTJhYzZhN2QsIDB4YjgxNDY3ZTYsIDB4Yjg5ZGFiYmUsIDB4ZjdmM2Y2ODEsIDB4M2Y2NjZmZDYsCisJMHg2OWZhNDY1ZiwgMHg2ZWQ2YTdlZCwgMHhmNjNiMzBjZSwgMHg4NmJiZmU5MCwgMHhmODIzMWNmZCwgMHgwZjQyMzdmMCwKKwkweDQxZWQ5OGRiLCAweDIzYjI1M2NjLCAweDY4ZjdjYTNhLCAweGY4MmE1MmU5LCAweDdhMmYyODMxLCAweDc5MWQ3YWM0LAorCTB4MmI1NjYxZDEsIDB4MTc5YjU3YmQsIDB4N2FlNDZlZGQsIDB4NjZjYWQ5YjQsIDB4ODdlNTA5NGYsIDB4OWI3NTc4MDksCisJMHgxNzY4OGRiYSwgMHg5MGE0ZGJlMywgMHg5OWE4ZTk3YSwgMHg5YmQwMjVlYiwgMHg5ZjcyNDFmZiwgMHg4NmFmNWExYSwKKwkweGM0MTllZmMwLCAweDdjM2JjZGRiLCAweDVlNTQ3MTdiLCAweGJhMjQ0ZTZjLCAweDBmY2Y4MDVkLCAweDc4MTRmODU0LAorCTB4ZTBhYWYwNTQsIDB4ODhhNjMxYjMsIDB4ZjBiYjY1ZjgsIDB4NzBjNGI3MzMsIDB4OTk3MDI5N2MsIDB4OGU3MTk0ZTMsCisJMHg3YTVmMzgwYiwgMHgwYmZhZmEyZiwgMHhmZjgwNjc4MSwgMHhiZjFmYzIzMiwgMHhlYWYyYTk5YywgMHhiZTNkM2U0YSwKKwkweDBiMTkyM2RlLCAweGNhMzAyY2QwLCAweGI5YzY2NWJmLCAweDVjNjAxOTU2LCAweDdmNjY0OGY3LCAweDE1MzFmYTEyLAorCTB4NzdkNDIyOTYsIDB4M2I3YjZhZDYsIDB4Y2YxYmRkZTYsIDB4ZTM2NmJjZjEsIDB4NGQ1ZGU2NTIsIDB4N2ZmZTMwZjMsCisJMHhhM2NhNmNhZSwgMHhlNjlkZGUyMiwgMHg1OTQxNzY5ZSwgMHg1MzJiZDgxZiwgMHgxNWMxMjE1YywgMHhmNjM1ZjcxMSwKKwkweDQ1Y2EwNmVhLCAweDkzMzdkYzcyLCAweDEwYjhmNDhiLCAweDczMWI3Yjc0LCAweGM3MjEwOTgwLCAweDQzNzljNWY3LAorCTB4YWYwNzM5ZDAsIDB4YjdjZThiNWYsIDB4ZTVlNTc4ODksIDB4Y2Q0NzI5OTgsIDB4MGNiNTZmYzIsIDB4NGI1ZGQwMDksCisJMHhkZjkxYmVjZiwgMHhjNGY3OGY1MSwgMHgwOTcxNmRjYiwgMHg2MWIyZjEzZCwgMHgxZTgwNmU4MiwgMHhlYzIyYzlkNywKKwkweGE0Y2VlY2ExLCAweGRmM2RlZmI4LCAweDQ0MmUyOTNmLCAweDU0ZmUxZmJlLCAweGFiMTNmNGZlLCAweDg0ZGZhZmVkLAorCTB4NTMyNmJlNzAsIDB4NGZjNGY0OWMsIDB4Mjc5ODhjM2IsIDB4MGFkMmYyNTYsIDB4ODEyZmVlYmMsIDB4NzczZjQwYTMsCisJMHg1NmEzYTk3ZCwgMHgyNmQ3NWViOSwgMHg1NWRjNjNlNSwgMHhmOTBhZWZiNCwgMHg1ZmVkNWRjNywgMHhhNWRjN2Y5MiwKKwkweGY3OTU4ZmYxLCAweDg5ZWMwM2RlLCAweDM2NWEzMWYyLCAweGRjNWZmZjEzLCAweDk5NzhlM2MyLCAweDE0NmRmZWQ5LAorCTB4NjQzZWUxYzAsIDB4ZjExYjVlNjAsIDB4YjQwZmY5MmYsIDB4YzQ1ZmU4NWUsIDB4NjMzZmM3MTYsIDB4ZTE2Zjc4YTQsCisJMHhmOTg2MTdlMSwgMHgwOGNjNTJlMCwgMHhlMTA1YjMxZCwgMHhjMTExZDYyYiwgMHg4YWY4NDE2YywgMHhmYWFhYjMyYiwKKwkweGFhM2VjZTA5LCAweGQ5ZTU0OWYxLCAweGFlMjlmYmFhLCAweGE5ZmJhYTgxLCAweDdlYWE3OWQ1LCAweGFhYWRmZDdhLAorCTB4Yjc2MDk5ZjEsIDB4OWU1OWZiODIsIDB4N2RmMWFhNzEsIDB4ZmFhYWE2OWIsIDB4NTZlZjlhZmQsIDB4ODcxZTY3OGQsCisJMHgzOWQ2MDczZiwgMHhhNmYzYWM1ZiwgMHhlMzU1NzNjZCwgMHg2MWYyNGY5OSwgMHgyMDgxNjQ3ZCwgMHhjN2RiYzdmMywKKwkweGM4ZmFjMjFjLCAweGI4OGY5MTdjLCAweDM1NThiYmQ5LCAweDc1NjY4MmRmLCAweDA4ZjA4MTVlLCAweDk1NmFhYjc4LAorCTB4Yjc4ODYzZDgsIDB4ZDVmYmVhY2QsIDB4NTMxYjFiNmQsIDB4NTVlNDVkYTEsIDB4NzU4YzVmNWYsIDB4NTNmOTA5MGYsCisJMHgzYWY3ZmQ3ZCwgMHhlM2Y0MzJlNywgMHhjZWE3MTk3ZiwgMHhiZTkzNWRkMywgMHg0NWFlOWI5ZSwgMHhjNzBmYmI1ZiwKKwkweDdmMjI4OGVmLCAweDc5ZTFlMTY3LCAweGM5NjE0NzI0LCAweGRiODZmYTZhLCAweDdmMTZiZTIyLCAweDlhYWMwMzkxLAorCTB4YWZiZmYwZmIsIDB4NWQ5NDVmYzEsIDB4ZmM1YTBmY2QsIDB4YzFmNzU5ZTksIDB4Y2VhYjgwNTQsIDB4YWM3ZGQ5MmIsCisJMHhiNTE2ZmUyNywgMHhiNTM4MjU2ZSwgMHhlZGUyZDNmOCwgMHhiY2VhNzE4ZiwgMHhkNzQ4ZGFjZSwgMHg5NzFiZDQ1ZSwKKwkweDBjY2I5NzVhLCAweGJjNjVmM2YzLCAweGY1YTk3OGZlLCAweDZjNDcyMWQzLCAweDdlZjk3OTQxLCAweDVmZTVlNmJkLAorCTB4OTc5MTBiOGQsIDB4Y2I3YWMyZWYsIDB4ZDQxYmVjMmQsIDB4ODE3ZGY2NWIsIDB4OGIwMzA4NzgsIDB4YjI3YTAwNjMsCisJMHhkNWQzNzYxMSwgMHgyMDc4NGFmYSwgMHg1YmQ1YWYwZiwgMHhmYjdhMGI0YSwgMHhjZmE0NzE2ZiwgMHgzNWE5NzUwMywKKwkweDk4YjBmNGYwLCAweGFmMDg5ZGI3LCAweGVmMThiNzUyLCAweGI3YmMxMTcyLCAweGUxMjMyMDIwLCAweGE3NWYzMzNmLAorCTB4ZTFlMDBmMzIsIDB4N2M2NzljM2QsIDB4ZTMxMjM1OTEsIDB4ZWZmYjlkYTcsIDB4YjU4MDc4YTEsIDB4MDczZDczYzUsCisJMHgxZjFlMGYyNCwgMHhmZTkyOTdlNCwgMHhhNjdmYzE2YywgMHg0OGZjM2Q5MCwgMHg3MDRmYzNkOCwgMHgzMjFlYzUzZSwKKwkweDU3YmY5NTlmLCAweGU2ZGVjM2Q4LCAweGJkMTZlYTUxLCAweDk5NWVkMmI1LCAweDU4ZGQyZmVhLCAweGNmYTEwOTdmLAorCTB4ZDFkZmYxOGQsIDB4MjNkMjdjYWUsIDB4MGY4YzY5ZmYsIDB4YmRlZTBmOGUsIDB4M2FmNTEwNzQsIDB4MWUzYzNkZTAsCisJMHgwNTE1MTlkNiwgMHhkODBhNTJmNiwgMHg4YzhiN2ZjYiwgMHgzZWViNzkyNiwgMHg4MjZmN2IyYywgMHhiNjRkMTcwYiwKKwkweGEwNmU2YjE4LCAweDc3ODVhMmJlLCAweGFiOWFjOTk0LCAweDZkZTNkMjBmLCAweDM2NWVkYTkyLCAweDIzZmY3MWU2LAorCTB4MWRmYjllMzEsIDB4MmZkY2NjOTMsIDB4ZTlkNjJjMWQsIDB4ZWVlYmY4ZDYsIDB4ODI5NzFlMjYsIDB4MDViNzU0MzQsCisJMHhlMzgzODFmOSwgMHgzYmZjNjhhMywgMHg3MTgzNDUxMSwgMHg1YzQ1NWIzZCwgMHhkMTI1OThkZiwgMHg4OTI1MWFmYiwKKwkweDMxMmRmYWVjLCAweDlkZmY3NGM1LCAweDZjNWNhMmI4LCAweDBlZjc4OWZiLCAweGRhMDg5ZjQ2LCAweDhmMGU2Y2U2LAorCTB4NTAxM2VjNGQsIDB4YzcxMGZmZTYsIDB4NGM1YjYyMTcsIDB4OGI3OGUwZWQsIDB4MDY1OGVmYzgsIDB4NDQ4ZmJkMjIsCisJMHhhMzVlNjgzOCwgMHgyOWZjYWIyYywgMHhlNzhiY2RhNSwgMHg5OWE3NDQ3ZSwgMHgyYTkzN2UyOSwgMHhlODQ2M2M3ZiwKKwkweDg3MTdjYzMxLCAweDI2MzkzMDkxLCAweGU0MGM0ZThjLCAweGVhM2M5OThiLCAweGU0NWUzMWI4LCAweGRjN2EyNTg5LAorCTB4NWRiYzc0ODEsIDB4YmNiN2IxZDAsIDB4NjU4MDYzYjEsIDB4NDQzOWJjM2YsIDB4MWM5N2Q4ZGUsIDB4MWY2YzZmMzIsCisJMHg3ODYzNzk0MywgMHhkMmViOGY1MiwgMHgwZTkxOGZlNiwgMHgzYzgwZDY5MSwgMHhhYWJmOGM0YywgMHhkZjUwZDI2ZiwKKwkweDNjNzU2NjM0LCAweGUzZjkxZTMyLCAweDEyN2Y2Y2E4LCAweDEzYzc3ZjQxLCAweGI2ZTAwNDM5LCAweDdjNzY3NWQ5LAorCTB4YjYxNmU0NjQsIDB4MGJmYTFjM2EsIDB4MmZjYTM2M2QsIDB4OGFmZTIwMTksIDB4ZWZjODBiY2EsIDB4NGUyY2Y4OTIsCisJMHhkMzNlMTNmZiwgMHhmYzNmYjgxMCwgMHhlNjNiNjcxZCwgMHg2MzRmZmI5MywgMHhjZGZmNTQ1NiwgMHgxYTI0YjlhYywKKwkweDJjMmQ4OGZkLCAweDI1NTJiYzY0LCAweGQxN2M2NmY4LCAweDNjZTUxOTVlLCAweDI1ZjgxYmExLCAweGUyYWEzZDA0LAorCTB4YmRiZjhhNzUsIDB4YmMzNmU5MDAsIDB4ZjUwOTc1ZGIsIDB4NDgwN2EyODksIDB4YjQ1YzYxOTUsIDB4YjI3ZTQ3NWYsCisJMHhlODk2ZjlmNiwgMHgwN2M0MjU5MiwgMHg5Mjc5ZDBkZSwgMHhlMzg3MzM0ZSwgMHgyOTczODQ0MiwgMHg1Nzc4M2ZjZSwKKwkweGNkZjUxMTg3LCAweGNlNmY0NTQyLCAweGQwM2QzMWQ3LCAweGJmNDE0ZWY3LCAweGJhZjBiNzNiLCAweGQ1ZjJiYjM0LAorCTB4NWZlMmIyNTcsIDB4YTE5ZjlhMzEsIDB4MmQzODU4M2UsIDB4ODc3OThiY2EsIDB4MWU1OTZkODUsIDB4NTEyOWNiODIsCisJMHg3NmRkYzU1ZSwgMHg4NWZkODljYywgMHg4YzE2MDUwNSwgMHg2NTdmMWQ3MywgMHhlNDAxOTlkMiwgMHg3N2FlMzE5YSwKKwkweGEyOGNlY2Y0LCAweGM2N2VjODA3LCAweGFhNjI5ZDUzLCAweGIzNGVhYmUwLCAweGZkMDRlMDhkLCAweGU4MTIyMWJjLAorCTB4YWFjYjcwYjAsIDB4ZTEyZmI4YmQsIDB4NTQ2NzdmYWQsIDB4NzcyMTM4OGYsIDB4YTZjOWMzMGYsIDB4ZTQ1NjcyMDMsCisJMHgxNTY3YWI2MSwgMHhhZjMwZjg3OSwgMHhmMzEzNGM3NywgMHhmNzg0YmU3OCwgMHg5ZGVmMDI5YSwgMHhkNjk4NzZkZSwKKwkweDNjYzBjMjczLCAweGFlOTdlMDI2LCAweGQwZDk3NzNkLCAweDMwNGM2ZDRmLCAweDQ1N2Y4OWQ5LCAweGVjOTRlYjlkLAorCTB4ODc4YzgwN2EsIDB4NDEwZWJiYmUsIDB4NjkxNmQxOWIsIDB4NThlYjBmNTksIDB4YWZkYzY0NjMsIDB4MTFkODQ1ZDUsCisJMHgxZGNkMTNmZiwgMHhmODk3ZTI3YSwgMHhmMWUyM2Q2ZSwgMHhmNDY3NDEwZCwgMHg0ZmNmYzllZCwgMHgzOTI3NDQ2MCwKKwkweDk2ZTljNzU1LCAweDQ0ZmJlMzY5LCAweGJmZjlkNDcyLCAweGMxZGQwNDk3LCAweGViYzM0YzZiLCAweDU4ZGYyMzEzLAorCTB4N2NjZTAzNmUsIDB4YzcwZmQzNzYsIDB4ZGVhMjQ3ZTksIDB4MTY3OTYzN2IsIDB4ZGQzNjViZjQsIDB4ZmM4ZjRlMzUsCisJMHhhN2M2ZmE5ZCwgMHhjZmVhMjA1OSwgMHhmN2U3MmE2ZiwgMHg2OWYxYmQwNywgMHg2ZDc3ZjQzNiwgMHhkZmVmYzE5YSwKKwkweDVlY2ZiYzQ2LCAweDM4Zjc3NGRjLCAweDc0YmZlYmNjLCAweGY5ZjAyZjU1LCAweDEyNDIyMDk3LCAweGMzOTViZmFlLAorCTB4ZTJhMWY1NzQsIDB4OTJiYzVmMGIsIDB4N2MwNjY2NWYsIDB4NGZlZGIzOGYsIDB4M2FjZWQwMjcsIDB4YzNiN2ZhOTUsCisJMHgyMzdmYWFhMCwgMHhkZjgwOThjNywgMHg2MmJlMGJjNiwgMHgwNzY0ZDFmMSwgMHg4ZGZhMDljNiwgMHgzZjY4ZmJkNywKKwkweDIzZTRjZThjLCAweDFhYzRkZWZjLCAweDgwMzdjODJjLCAweGU1NWY0ZGFkLCAweGMwN2Y3Y2Y3LCAweDRiZjlhOWFlLAorCTB4MDJiNjMwNzIsIDB4MmNkOTJkZTgsIDB4NTY2YjI3YzQsIDB4ZGEzODU3MzAsIDB4NWRkZDQwZmQsIDB4Y2NlZWViYzcsCisJMHhlMDU3ZWY4OSwgMHgwM2RmZGU1MSwgMHhkZWFkMjAyZSwgMHgxNmQ3MGMxYSwgMHhhYjgxNDc5YSwgMHgwNzk4Njg2YiwKKwkweDlmYjE0OWU1LCAweDUyNWQ1YzBhLCAweGY0OThlM2Y3LCAweDBmMmZkOWZlLCAweDc1YmE0MDRlLCAweDQ4Njc3NTQ1LAorCTB4NzA5MGRmZDAsIDB4OTVkOGU4OTAsIDB4NjRiOGZkZDAsIDB4MzgxYmVhMGYsIDB4NWE2Y2NmMWQsIDB4ZWYwM2NlMzYsCisJMHhjZTNiMjhkOSwgMHgxOTg2ZGNhMCwgMHgyNjkyYmVmOSwgMHgzZGUwNTM4YywgMHgzY2I4MjYwZiwgMHhiZTAzY2Y1OCwKKwkweGVmOTBmYmIzLCAweDg3YTQ4ZGQyLCAweDc5ZDQwYjRhLCAweDY3YzE2ZTg5LCAweGRlYjgxM2NiLCAweDVjZDYxZDFmLAorCTB4ZDJmODBjN2YsIDB4YWI2MjRiYmQsIDB4Y2FmYmJjNjAsIDB4ODlkYTIzMjUsIDB4OGRhNzZkODksIDB4NzZlYjY4MGUsCisJMHhiZWEyMzY5ZCwgMHhjYzNlYzNhYSwgMHgxOGM1Yjc1MywgMHgxMjc5NmY1MiwgMHhkNDNmNjE2NCwgMHhmNDgxZjA3ZSwKKwkweGUzYzQwZmZlLCAweDEyZjk4NWJlLCAweGQ5ZWVlMjU1LCAweGZiMWEzYjFkLCAweDU1YzFjY2Y3LCAweGE4Zjc3NjMyLAorCTB4NWQ5MWEzOWQsIDB4MGZlZDlkMmEsIDB4NzU5YjNiNjAsIDB4OWExNjQwMWMsIDB4N2U1NTkyZTEsIDB4NDhlYWNjZTksCisJMHg1OTViNWY5NSwgMHhjZmVhYTcxZiwgMHg4MGVhMDY2ZSwgMHg5MTVlY2Y1YywgMHgxODFmOGVhYSwgMHhjZjAwYWJjNCwKKwkweDQzZjgxNjBjLCAweGU4MmU1NmZkLCAweDgzNzkyMzM4LCAweGNjYWRmNzFmLCAweDFkM2MxOTcwLCAweDZjNGRmMzQxLAorCTB4MjJiN2E1NWIsIDB4OWQ5MmY1ZGMsIDB4ZDk4N2FmZDQsIDB4N2M5OWI5ZjAsIDB4M2RlYWQwODUsIDB4ZDFiMGY1YzEsCisJMHg1MTg5M2NhZCwgMHg3ZjIyNmU1NywgMHg4MGZiMDJiZiwgMHhkOTFhOGFkNywgMHgwZjEwOTM2YiwgMHg2ZWVmYmE0NiwKKwkweDViYmVlODk1LCAweDRiNTc3N2RjLCAweGVjOTYxZDRhLCAweGUzMDE2Y2VlLCAweDQ2YzczZGNjLCAweGUxMTBiNmQzLAorCTB4Y2VmMDJiZGYsIDB4NGIzYjJmMmUsIDB4N2FmYzI4ZmMsIDB4MzZlNTVkNjUsIDB4N2Q3MGIzYjAsIDB4MDZkYmZhNmQsCisJMHg4ZmY2Nzc5YywgMHg0NTk3MTYyNCwgMHg1MGVjZWFlYiwgMHhhZmRkNTFlMSwgMHgxOWY3NTdhYywgMHg5ZTYwMzBlYiwKKwkweGY1MGFmNjdhLCAweGMyMDllMWY1LCAweDgzNjIwZTllLCAweDI1NDY5ZTUwLCAweDJmOTI3YTQ4LCAweGZkMjRmZmQxLAorCTB4MDA3Y2Q3ZWQsIDB4ZjNiMmUzZGYsIDB4ODNlMDA0ZjYsIDB4ZWE4ZmEzMWEsIDB4MmVjYjhmNTAsIDB4ZTFmNzJiZWEsCisJMHhiOTIzMWQ3YSwgMHhlNDgwN2YwMywgMHg1Y2Y5MjI1OCwgMHg4YTU4NzA2MywgMHg5NWFlOGZkMCwgMHhiMjY3NmY4OCwKKwkweDJiMjE3ZjIwLCAweDcyZmE5ZTMwLCAweDA5M2RmZWNmLCAweDEzNWE1ZmRjLCAweGY1NGU1Y2VlLCAweDY1OTIzZGIwLAorCTB4ZDUyYTVjMWIsIDB4MDdlOGY0M2IsIDB4ZTc0MjkxYWUsIDB4NzAyNTk2NDMsIDB4NDE4ZDc4NzksIDB4ZjU3MDBlZjQsCisJMHhiYjQ1MjY0NywgMHhkNzhjNjc3ZSwgMHhmZmVkZWYwMywgMHhmNDFlMzljNywgMHgwM2U3ZmJlZiwgMHhlZTUwZDgxZiwKKwkweDJmMTliZGI5LCAweGYwMjRjZGVjLCAweGViZmZkMTJmLCAweDkzOTRiNzJmLCAweDY4YzViZjdlLCAweGVjMmVmZDIxLAorCTB4MWMyZmEyOTAsIDB4YTFkYjUxYmYsIDB4Mjg4NzY5ZjEsIDB4NzliNDk4ZmUsIDB4OGJkNDA1YzMsIDB4NzkxZDdkMzksCisJMHgwN2JlMDExYiwgMHgxZmZiZjljMywgMHg3MTc5MmRkYywgMHhlZTVkNGUxZiwgMHg0OTlmZDI0MSwgMHhkZWY4MWVjMCwKKwkweDQ3YTE2NGJhLCAweGFjZmJkNTViLCAweDIxYWY1MDkyLCAweGE1Yzg0Y2MzLCAweDE0OThhNmY3LCAweDFlOTA3NzZlLAorCTB4YmFjNTdjOTQsIDB4NDk3ZTgwYWYsIDB4NjlhOWJkZTIsIDB4ZTI1N2MyMzYsIDB4ZDcwOTE2ZTIsIDB4YWIzY2NlOWQsCisJMHg0NWNmOGVkMCwgMHhiNDBjMmMyMSwgMHg5N2NmZWRkNywgMHhiZTdmNWE0YSwgMHhlNGY5ZmM5YiwgMHg3YmM1MjMwZSwKKwkweDlkZjhkYmFjLCAweGU3M2Q3M2YyLCAweGZjZDQzMmZmLCAweDUzYWE3Y2IwLCAweDJiZjJlMjA3LCAweGI5YTc5OGQxLAorCTB4YWZkZjRmNjcsIDB4OWIyNGRmZGQsIDB4YzFiNzcxZDQsIDB4YzdiYjhlYTIsIDB4OWZlYjUwMGYsIDB4ZGViNTc2ODksCisJMHhhZmEyM2M5OSwgMHhjNzE0ZmVlYSwgMHgzYmZkZDUyMCwgMHhmZDU1ZjJjYiwgMHg1NGRiY2VlOSwgMHgyZjJhZWZlMywKKwkweDkyYzNmNTUxLCAweDAwZjI2OWM3LCAweGU0NGFiY2VhLCAweDI1NWU3NTAwLCAweGEzY2VhZWNhLCAweDdkZmUxZDg0LAorCTB4MzE3ODA0YjksIDB4MmUxZDNjOWEsIDB4YzgxMzQzYzAsIDB4YzA2YjA4YzYsIDB4MzY4YTBjOGUsIDB4MjIzNjcxNTEsCisJMHg2ZDhjZGMzZiwgMHgxZjMwZDBkMywgMHgxZjUzNDlmMiwgMHgxZDg3ODcxZSwgMHgwN2Q5MzdiZSwgMHg3NjYyOThmMywKKwkweGYxMDRiMDk4LCAweDFjNWJjOTViLCAweDlhMDA3MzA3LCAweGYwM2E5ZWE4LCAweDM5YmZiNTdlLCAweDE3ZGI4NTMyLAorCTB4YjgyNWY1YTUsIDB4MzY4NDRmNWUsIDB4MmE1YjE5ZjcsIDB4MTRmZDY3ZjcsIDB4MTgyMjk4OWYsIDB4MzQ1ZThiZjcsCisJMHhjNGE0NWY5MSwgMHhlOTNjY2FjOSwgMHg1MDA3NDU2OSwgMHhlZmRlZTQ3ZiwgMHg2YjA5YmFhMCwgMHgyN2NjMTY2NSwKKwkweDc5MTQ2OTNlLCAweGJlZjkxN2Q0LCAweDBlZDZkY2RiLCAweGJlNDgyMzlkLCAweGZhZTQ0Y2VmLCAweGUyY2UxN2UwLAorCTB4NWQ3ZjM4YjEsIDB4OTQ1OTU4MWIsIDB4MWFlZmNkYTcsIDB4ZDc1OTNlYjEsIDB4ZjY4ZDFlZDYsIDB4NWRmMzg4NmMsCisJMHgwMmViZTYyMywgMHhkMzlkODVkNywgMHg1ZDYwNDc3NywgMHg3MjJkNzdlNSwgMHg3MmNhZmRjOCwgMHgxZmViY2YyMiwKKwkweGYyYmQ3YTE0LCAweDU0N2M0MGRlLCAweGFmYTAyYzM0LCAweGY1ZjI3NzJiLCAweDkyMzc0ZTU1LCAweDQ2YzJjMTNlLAorCTB4N2EwZGJkMjgsIDB4MmFkZTY3YmEsIDB4ZjI4YzFlZDgsIDB4MDNiYTgwM2UsIDB4ZGM2YWI3ZjQsIDB4MmUzYzY5ZWMsCisJMHg4ZGJkMDBhYSwgMHg1Y2ZhMGM3MiwgMHg5MWFkM2Y3ZCwgMHg3M2U4MGJmNCwgMHgwMTBiZjVkNSwgMHgxNWZiOWU3ZCwKKwkweDE5YzI3NzNjLCAweGU4ZjY1ZjdhLCAweDNmMzc1ZTE0LCAweGZjMjEyYWUxLCAweDg4ZjAwMmZmLCAweDdhMmZmMjdlLAorCTB4ZjNlMzhkZTAsIDB4MTY3YWY4NWEsIDB4Mzc0NDFmNjksIDB4MjkyOWI4ZWQsIDB4YjY3YzdmZGMsIDB4NDMzZDdkMTcsCisJMHhjOTQ5ZjVkMCwgMHhkNGNhODc5ZiwgMHhiZTIwOGNlZCwgMHg4ZDcyNjk5ZCwgMHg3YTQ3Y2NlZiwgMHhmNTg4ZGU3YywKKwkweDRiZGZjYTg5LCAweGRmZWNlZDBjLCAweDdlZDMwZmRhLCAweDAzY2VlMzNkLCAweGQyOGZiODg5LCAweDkxMjA3MmRkLAorCTB4MThkNWRmMDEsIDB4OGZkMGFiNmMsIDB4YTNiMGJlMDcsIDB4ZWFkNzUzZGYsIDB4NWI2YmY4MjMsIDB4N2FmMWRiZjIsCisJMHg0NzY0YWI2ZCwgMHg3NWRlZWM1NSwgMHg5M2FkMGM2MSwgMHhiZDYyMzQ3NSwgMHhlMDVlYzllZiwgMHg3NmU0NGNjYSwKKwkweDhkYTI2MDY0LCAweDk4NWMwN2U3LCAweGMzZTdjMTEzLCAweGY5MDk1ZWJjLCAweGMyMTJmNDAwLCAweGNkNjI1YmI1LAorCTB4OWQ3MjdmZDAsIDB4Yjc5ZDY0MjksIDB4ZmY3YmUwNTIsIDB4NTdjNTIzM2EsIDB4YWUzY2YwMzUsIDB4NDFmYTYwZTMsCisJMHg2OGY5MDlhMywgMHhjMjRiYWMyNywgMHgxZTliMWM3NSwgMHgzNzJmZjM4OSwgMHgxNDJmZjQzMCwgMHhmYmE1Y2VmOCwKKwkweDRmZmFlMTRmLCAweDA3MDA4N2NlLCAweDJmOTlhZmFlLCAweDJlNGZiZTEzLCAweDA1Yzg3OTE3LCAweDU4Y2ZlYTA2LAorCTB4ZGQ3ZTI0NjQsIDB4NDZiZGZmMzcsIDB4YWM5ZGVmY2MsIDB4NGJkY2ZiZTEsIDB4Zjk0NjdjMTYsIDB4MjQ4YjE5YmUsCisJMHg4YTk5M2Y2NSwgMHhkNTdlMTU5ZiwgMHg3Zjk2YTdmMiwgMHhmNTY5ZjA3YiwgMHg5OGU5ZjFmNSwgMHgzYTdjYWJjNCwKKwkweGQwM2NlZDA0LCAweGYyMTI3NDdkLCAweGNlMjE4ZmNmLCAweGIyYjlmOTQ2LCAweGYwMDQ5MGNmLCAweGVjNWEzNzY2LAorCTB4YjA2YmFmYjgsIDB4MTEyMDdkZWMsIDB4N2UzZWM0ZjUsIDB4NTZjZDY4N2YsIDB4ZGIxYmViODksIDB4YTk4NzI4ZGQsCisJMHgxZWI2NDY0ZCwgMHhhZTQ0Y2JmZCwgMHhiZDIwNjY5NywgMHhkZDY5NzEwYSwgMHg3YmM1MjQ1MiwgMHg0YmQ0NmNmZSwKKwkweDBlZjdjYTU5LCAweDEzYmU1NjA2LCAweGFlN2E3MWYzLCAweDk0YmYwNjZmLCAweDEwN2Q3NWJjLCAweDM5MTI5YWRmLAorCTB4NzA3YTJhYmYsIDB4NzZiOTkxOTAsIDB4YTViZmRlNTIsIDB4ZTc5ODE0Y2YsIDB4ZGJhZjAzNTksIDB4ZmFmOTg4NjQsCisJMHgzMzFlZWRmNSwgMHgwODlmZGEwNSwgMHhlMDI3OTk3ZSwgMHgwYWY3ZmE1MCwgMHhjZDRmNjdmZSwgMHgzNDRlZmMyMCwKKwkweDViOGZiYzcxLCAweDc1YzBhYmUxLCAweDhiNWQxOTM0LCAweDg0ZmVlMTEyLCAweGQwNmJiNzhjLCAweGJmNjUzNWNlLAorCTB4NDJmOTRiOWEsIDB4YTczYjIzNjYsIDB4NDZmYmU3YzQsIDB4MTk2NWIwN2UsIDB4ZTZmYzM3YWMsIDB4Zjg2M2EyMDgsCisJMHhlNDE2OGQ5ZSwgMHgwNTdlZjBlMywgMHg3YzEwYWU0OSwgMHhjYmVlYjRhNywgMHgzOTAyZTYzNiwgMHg0ZDljYmJhYSwKKwkweGIyOWZkMmFkLCAweGY2OTFhY2Y3LCAweDE4NWRiNzIxLCAweDM5NzI3MjQzLCAweGNmMmJhZTk5LCAweGY5MTE0YTJkLAorCTB4NTNkZmIxMmEsIDB4OWU4MjVmYzksIDB4MGJjODhmZDYsIDB4YzBmMDUzOGMsIDB4MjE1ZTE3NzAsIDB4ZDExNGYzYzIsCisJMHgzNjUyZDk2YiwgMHgzN2QxYTc5NCwgMHhkNjY3ZmFkMiwgMHhjMGU2OTMxYywgMHgxYzE5NzczYywgMHhkNjE2NzMwNiwKKwkweDc3YzdjYWNmLCAweDUzN2VlMGU2LCAweDcxZmQ1Y2M2LCAweGI5ODk5ZDlmLCAweGNmZGZiODhjLCAweGNhZmY3ZDQyLAorCTB4YjFiZmVhNjQsIDB4NjNlZDQ2ZDIsIDB4ZDBjZmU3MjYsIDB4NWZkZjRjZGUsIDB4NGRmNjhmZGYsIDB4MmNlYTNmYTYsCisJMHgxZDc0Zjc4NiwgMHhiNmJlMDgzMSwgMHgzYTk0YmUxMCwgMHg5OTM2YTVkMCwgMHhhNWZlZTA5OSwgMHgzNWQ1MTI1ZCwKKwkweDVkNjdmODE1LCAweDcxNWNjM2VlLCAweGRmMTVmZDhjLCAweDVkYTllZjA3LCAweDNiZTkyNmYxLCAweDMxODVmNTdiLAorCTB4YWQwZDE3MTgsIDB4N2Q4OGRkMzksIDB4YzZjZjhhZjcsIDB4MGE3MTNmYTAsIDB4ZjVmOTA3ZWMsIDB4NGIyN2RmZTAsCisJMHgxOThlNDdhOCwgMHhjNTVkN2Y3MSwgMHhmM2NkMmI2NSwgMHgwYzdiYWVhYywgMHgxNWU3OTdjYSwgMHhhNzRkZWE4OSwKKwkweDkzMTgyZjVhLCAweDA4NjI3ZGI4LCAweDlmNTgxNmNhLCAweDE4OTVkNzAzLCAweGI3NzFmODRiLCAweGZhNzFkNTBkLAorCTB4NGFiOGYwZTYsIDB4YzBmYjQzZjAsIDB4MWU5MWEzMmYsIDB4ZDdiNjE1YTYsIDB4MGZlN2MzNmYsIDB4NzdlNTBjYzksCisJMHhiNDc3NzE3ZCwgMHgzZGZlODQyNSwgMHhmZWIyZjMwMSwgMHg2YWQ4MWQ3YywgMHgzZDFiOTdlZiwgMHg1Y2YwZWNmZCwKKwkweGZlZjQyZWI5LCAweDlmMDU1N2E4LCAweDNlMjlhNjAyLCAweDExMjkzZmMwLCAweDU1ZmY5OWU1LCAweGFjNjI5MmMyLAorCTB4MjJmOGY3MTQsIDB4ZGIyYjhlNDAsIDB4YjFlYWNlNGEsIDB4YmJkODk3YWQsIDB4YmQ4Yzc4ZWEsIDB4ZjdiN2U0MWIsCisJMHhiNGRmODdjNiwgMHhmNGY5YzNhZCwgMHhlMjAxZjY0MSwgMHgwN2U0MTY0NiwgMHg1NGM4ZGM2MSwgMHhiY2YwZjdlZiwKKwkweDkyNGU3YTUyLCAweGFmM2FjNDJiLCAweDFmNDc0MWNhLCAweGQ1N2EwMzY2LCAweGYzYmEwMTM1LCAweDUyMDdkZjkxLAorCTB4NWFmNzdlN2IsIDB4Mjk4ZmNhMWIsIDB4YjQ1MWZiYTIsIDB4OGViZmFjMTMsIDB4OGY1YThjZTIsIDB4OTNkOWZmZGEsCisJMHg0Zjc4ZTVjYywgMHg3N2ViOTczMiwgMHgxMmYxZDUxMywgMHhhM2VmNDVjNCwgMHgxNDVjNDMxYywgMHhhMGRmODU4ZCwKKwkweDlkN2I0OTc4LCAweGNhMTMyNWUyLCAweDEwNzdiYzE1LCAweDEwZjllN2QwLCAweDJlNGUxZjcwLCAweDNkZjkwOGZlLAorCTB4OWYxMzM1ODMsIDB4ZTQ3M2UwMzMsIDB4M2YzYWVkMmYsIDB4OTE1M2Y2MTMsIDB4ZDcyODE5ZWIsIDB4NWNhZGJmYzgsCisJMHgxZWYzYjVhZSwgMHgwY2ZhMmU0ZiwgMHhmYjg3NTllMSwgMHg4ZGU4NDJiNSwgMHg2YjNhYzU1NywgMHg5N2MyMzMzNywKKwkweGYwOTViMzdiLCAweDc2NmQ4ZTc0LCAweDllNWYwMzE2LCAweGZlYjAzODAzLCAweDQ2NzRlNWRmLCAweGM2N2Q2MmM2LAorCTB4OWFiNDhjZTUsIDB4NmVhMDdhMDMsIDB4YjczZDA0NzMsIDB4ZGM2YTY3MmUsIDB4MjQ0N2U4MWMsIDB4ZGYzZmJlNzEsCisJMHgzYzQyNjI1YSwgMHhlNWNjZGFjZiwgMHgyOWRmNzk0ZiwgMHg5NDM4OGNkZiwgMHhiNzQzNDJhNywgMHhkM2Y3MGVkMSwKKwkweGEzNDc0ZWRhLCAweGZiYjg1N2RmLCAweGMzOTQzOGNlLCAweDQ3ZmNlMGRlLCAweGVkNzc1ZjEyLCAweGUzYzY3YjhhLAorCTB4ODdmODVkZjcsIDB4ZmVhNTRjZjksIDB4MzNlZDVlZTYsIDB4MDU3OGRkNTIsIDB4N2Y2ZGZlMjMsIDB4Mjg3NTZmZjEsCisJMHgyMmRiZTdjNywgMHhjZjM3NjgyZCwgMHhhMGY0ODllZCwgMHgyNTdhZWZmZSwgMHgyODkzYWJjYywgMHg4MGM0ZjBlZSwKKwkweGU4NjczYjVlLCAweGU1ZmU0NDk4LCAweGZlODJkOTZlLCAweDhmOTVmYjlkLCAweDc0Nzk0NTFmLCAweDllODYxOGJmLAorCTB4YjZkMjViMWUsIDB4YmRkYTAyZjYsIDB4NjdiMWI2OWEsIDB4OWY2ODQzZjUsIDB4MWU1NTNmZjksIDB4NDdkYzU3NmEsCisJMHhmZmQyOTE3ZSwgMHg4OWM5YTU3OCwgMHg5ZWJjZjQ3YSwgMHhhZDI1ODllYiwgMHhiYmJmOTAyZiwgMHgyMWE1Y2FlNCwKKwkweGI3M2VmNzU4LCAweGExODZiZmU3LCAweGYxZmY3MzVlLCAweDY3ZDQzMGQyLCAweDFhNWMzZmVlLCAweDJmZGRmNzg2LAorCTB4ZjI4N2Q2NDUsIDB4YzhhNTU2NTcsIDB4NWVjNTdmNDQsIDB4YWJkNzFkNjYsIDB4MGIxZjQzZjIsIDB4Njg2YWM4ZmUsCisJMHg5YmZkYzMyZSwgMHhkOWE2Yzc4NSwgMHhkY2FiN2YzMSwgMHhhM2E3ZWMyZiwgMHg2Zjg1ZmFmZCwgMHgwODJkYzY5NSwKKwkweGFmYzFhZTdhLCAweDA1ZWJjMzJmLCAweGU3MjM0YWM3LCAweDQ3NjVmMTA3LCAweDJmYzk0MWIyLCAweDA3NWU1NzVlLAorCTB4MDU4N2VhZWYsIDB4M2FmYzcxZTUsIDB4NWI4YzM4NDcsIDB4N2RmM2Q3ZTcsIDB4MTc5MmQ1YjQsIDB4NWZmMDBiZTMsCisJMHhkZjkxY2ZiNCwgMHhjZTI4YjVkNCwgMHgwNGZjOWViYiwgMHgwNWMxZjhlNywgMHg1ZjY3ZWZkOCwgMHg2MmI1NDM2ZiwKKwkweGU0MTM5MDNhLCAweGViZjBjZDI3LCAweDQ3YzA2MTdjLCAweDNlNjE2ZGU1LCAweGZhZmRlZmYyLCAweGZlMTdkNGQzLAorCTB4MWYwYmFjZDMsIDB4MjE0OTY1NDQsIDB4ZGUwMzMzZjIsIDB4NWM3YThkMTgsIDB4YmY4MWE3OWIsIDB4ZjE1Yjg0MjgsCisJMHg1ZGVhMmFiNywgMHgzNmJmMDhlOSwgMHhmY2JiMzM3ZiwgMHg2OTBmY2EwZSwgMHg3ZTU5MzdmMywgMHgwMTYyNmViZCwKKwkweDRkNzllN2Q2LCAweDkzN2Y5ZDc0LCAweGYxNDVlNTA5LCAweGJiN2U5MTQzLCAweDY3ZmZjODQyLCAweDhhN2U5YzQ5LAorCTB4NzVmODM1NWMsIDB4N2YwNjk3NDQsIDB4ZGEwNzI5YjEsIDB4MmVmZWUyZjMsIDB4MWRmOGE3MzAsIDB4OWRkYjQzNDcsCisJMHhkMDhmMzBkYiwgMHg0OGFlZTU3MCwgMHgxYzM1NWRhYywgMHgzYmYwY2E5ZiwgMHhiMTRiMmU4ZSwgMHg3NzNlMWZhOSwKKwkweGY0ZDMwZWU1LCAweDY4YmYwMGRjLCAweDg5MjdiN2RmLCAweDlmODBjYmViLCAweDNkZWVkYTEwLCAweDlmZjllNDI3LAorCTB4MjdiNmZmNjUsIDB4ZmZjZmNkNWQsIDB4MjBmZjZkNWYsIDB4OTQ5OWRmMGUsIDB4NGNmODcxNDAsIDB4NzFlMTI3OWUsCisJMHgyODZlZDZiOCwgMHhmNzk5NThmYSwgMHg5ZWU3NDE1ZCwgMHhmOTJjZjhmYSwgMHg5MzJmMTAzNywgMHhjOTM3N2UzZSwKKwkweGRhZDJlMzQ2LCAweDFjNTFjNGE2LCAweDljNWE3YzdkLCAweGZlNzNkY2NkLCAweGNlYmI3YWJlLCAweDdlNzNkYjlhLAorCTB4N2I3MzhmYzUsIDB4MTg0YzA3MWMsIDB4M2VmODM4ZTcsIDB4ODkzNGY3MzEsIDB4N2UyYWQ1ZjYsIDB4OTEyOWRiOWYsCisJMHgzMGFlZWUzZiwgMHgwMjljNzE3OCwgMHhjZjFhN2Y5NywgMHgxODc3NGVhYiwgMHhjMDUyZTFiYywgMHhjN2ZjNTQzZiwKKwkweDEyZWRmN2FiLCAweDQ5ZmM1N2RkLCAweDNiZjQ2ZmM1LCAweDVhNzcxZTc5LCAweDk4ZmZiZjAxLCAweDA5MzI3NWM5LAorCTB4NzBiZTQxZWIsIDB4OTIzODVlYmEsIDB4NzljYzY3NWYsIDB4NzdmYTE1MjAsIDB4MjQ2MjUwZmQsIDB4NTQ5ZmMyZmYsCisJMHg2ZmViNTRmOCwgMHhmYmViNmM1ZSwgMHhiN2U0ZmJiNSwgMHhlNDU0ZmUwOCwgMHgxZjIzNDMyYywgMHgxMDhhZmQ4YSwKKwkweGZiNDNhYTc4LCAweGZiZjY4NzFkLCAweGFlNWY5NTBiLCAweGY3ZWMxNzlkLCAweDhlN2EyNGI5LCAweDZmMDVmM2QxLAorCTB4ZTJhMTlkZTksIDB4ZmU2Mjk1ZjMsIDB4YTBmZDIwN2YsIDB4MmZlZmYzNGQsIDB4OTlkMzc4NDIsIDB4ZjZiOWY2OWYsCisJMHg4NWJiNTc2NiwgMHhmZGRiZDM3ZiwgMHhjZjI4NmY4OCwgMHhmODlkODQwMywgMHg0ZTczYzk2NywgMHg3OTBjZmZmMiwKKwkweGY2MTdlYWJlLCAweGUxZGQ5ZGYyLCAweGM5YzFhMmU0LCAweGRlYjk3ZjQ4LCAweGY3ZjI4NDVmLCAweGZhYzg0MzY3LAorCTB4N2Y4MTE1ZjQsIDB4N2M1NTczODgsIDB4YThkZDIwN2MsIDB4NWRjOGI4YzMsIDB4NGQwM2YzY2QsIDB4MjlkN2I2YjEsCisJMHhkMzJjMzk3ZSwgMHgxMDI1ZWJmZSwgMHhiNmZmYTIwNywgMHhkYTg1YjJmOCwgMHhhMTkzZjQxYSwgMHgzMWNjZjk5ZCwKKwkweDk5OTdlYTAzLCAweDliZjg2YWQ1LCAweGNmOGI3NzMwLCAweGEyZjJjZDJmLCAweDRhYzk1Y2RmLCAweGQ5NTRhZjI5LAorCTB4ZmRjMTZiMTYsIDB4MmQwOTRkY2MsIDB4M2NhZTUxMDcsIDB4YjZkYjY0ZGIsIDB4MDZlYmYxZTAsIDB4OWUyNmYxOGEsCisJMHhhNThlYWI2ZiwgMHhlMzRjOTNmZCwgMHg2YmQ2NTQwNywgMHg1ZmI1N2RmZCwgMHgxM2M4OWI3MCwgMHhmYzFmZTZmNSwKKwkweGViOWMzZGExLCAweGM5MzI0Mzk1LCAweDk3ZTYxZDc5LCAweGQ4Y2M2MTZlLCAweDdiODJmNWM2LCAweDRkZTUzODQ1LAorCTB4Yjg0MzVlMzAsIDB4NzkyMTVjM2UsIDB4YWQ3NzAwNGQsIDB4ZGVhMWY3MTgsIDB4YWEyN2Y5NGYsIDB4YjM5MGMxYTcsCisJMHg1MTEzMWI2ZCwgMHg1ZDQzOTkyZSwgMHhlYTdkYWEzZiwgMHhkYTliZDIyZCwgMHg5Nzc1OTIzYSwgMHhhZDVkMGJhOCwKKwkweGIwOTMwZDFiLCAweDY0ZjEwYjVmLCAweDM2OTdmYTEyLCAweDNmYzQ2NGRiLCAweDQ3ZGFhN2MwLCAweDE3MDVmOGE2LAorCTB4ZjE0N2JkMGYsIDB4YmNkZGNjZTcsIDB4N2VhM2QzZmUsIDB4ZDc4ZTM0ZDQsIDB4MGQzZWM0OGYsIDB4NzY3MjFlNmQsCisJMHhhOTAzYzFlNiwgMHg4ZGQ3NmJiNiwgMHgxOThmNWFlYSwgMHhlMWU4YWUzMCwgMHg4ZWZjNjg3ZiwgMHhmM2FiMjY5ZiwKKwkweDllN2E5OThjLCAweDkzNmNjZGM3LCAweGNhOWY5ODJjLCAweGJlMWM3ODE0LCAweGVhZmM4MjJlLCAweDFmOWY3ZjMxLAorCTB4YTE0MGZhODcsIDB4MWMyOWY5ZDMsIDB4N2U0ZmU3YWYsIDB4MDQ1YjQ0NWEsIDB4ODRiN2FlZmUsIDB4NzBmZWJhYzMsCisJMHhhOTliZjk3MiwgMHhkOTMzNmZiYywgMHg5MWU1YjlmMCwgMHhkZmY0M2RmNCwgMHhiYzQ0ODllZiwgMHhkYzVhMDFmZSwKKwkweDA5ZDJmOTk3LCAweGE0N2NjODdkLCAweDFmZTVjMjk0LCAweDkzY2ZlMWVjLCAweDJmZGUxZWQxLCAweGIwN2FkMmYyLAorCTB4N2M4MTUxODcsIDB4OWIzOWY2OGUsIDB4YzIwOWFlNzgsIDB4ZWU2M2NhMTQsIDB4YTZmZGY1ZTYsIDB4ZWEzOGQ3MTQsCisJMHg2ZDliMzJmZiwgMHg0MWQwZmYyMywgMHg4MDE3ZTc3OSwgMHgzNDVmMzFhZiwgMHhmNThiMTYwOCwgMHg1ODIyZTdlNywKKwkweDlhOGJkNjAzLCAweDkyYWY1YzEyLCAweDY3NTJmZDFjLCAweGU3ODIzOTQzLCAweGQ5ZTRjZWE5LCAweDg4ZmIyMzY5LAorCTB4Y2U3YWMzMjgsIDB4MjY0OWIwMTAsIDB4ZjdjMGQ3ZGEsIDB4NzQxNDBjNDcsIDB4MTYzODgxNGMsIDB4Y2QwMDQ5ZWIsCisJMHgwZjM3YWMzNCwgMHgyMTlkNzUxMiwgMHhmMzhmNGMxMSwgMHhhZDcwNjgzZiwgMHg0OGViMTliZiwgMHgyYWZiN2FlZCwKKwkweGRjN2IwMjEyLCAweGY1OWVhODk0LCAweGViYzFjOTI1LCAweDQ5OWQ0YWUyLCAweDU2Zjc4ZmE5LCAweDNkZjA5MjY3LAorCTB4YWYwZTFmN2MsIDB4NzI3ZDg5MmIsIDB4ZmQ4OTNkNGEsIDB4YWU0NTQ5ZDAsIDB4MTllYTIzMzUsIDB4Njk0OWFkYzYsCisJMHgwYmVkYmJlYywgMHhmOWU3NTllYiwgMHhkYWI5YzYzYiwgMHhjMDQ3Y2YzYSwgMHhhMTNmM2NlMywgMHgxZmFlMmJhZSwKKwkweGU5ZjEzY2YwLCAweDBlMjdhZGI3LCAweGI4Mzc2NjQ4LCAweGEzZjFjNWZlLCAweGY2MjBiYjg1LCAweDViYzUyMjYyLAorCTB4NjhjZmY4ZmYsIDB4OTc2ZGIzYjIsIDB4NzU3NjFlYzgsIDB4ZTUzZjMxODcsIDB4OWU3ODNiMWQsIDB4ZWY3ZjhkYmQsCisJMHg1YjcxMDVkMywgMHhiZDlkOTA0MiwgMHg3YjViZjg0MywgMHhmZjg4NGFkYiwgMHgyMzRiZjk3NywgMHhiMGJkN2M3MSwKKwkweDRmOGVlYmUzLCAweGQzYmYxM2JiLCAweGI0ZjVmOGYyLCAweDFlMzE4NzJmLCAweGViZjJlZDg3LCAweGI5NmZkMTBiLAorCTB4MjJmOTc0ODEsIDB4Y2RmZDQ0MjksIDB4OTNlZGMxMTQsIDB4NGI5ZThlNTYsIDB4ZTdhNGY5ZTYsIDB4OTQ3ZjM5OTIsCisJMHg5N2YxZTQ5YywgMHhhM2FmMzk3YiwgMHg3MDVlODQ1OCwgMHgwZjQ5MTk5NywgMHg5NDRmNGMxZSwgMHg1Mjc5ZmM5NCwKKwkweGVlY2IzYWE4LCAweDk1MWJiMjZlLCAweDNmZGEyNDhiLCAweDk2NzVkZDdiLCAweGI3NjE3NmQ2LCAweGIyZTlmOTM0LAorCTB4N2IzN2E0MzEsIDB4ZDUwNzViY2IsIDB4MzNmNzU1Y2QsIDB4ZTEzZWM0NTIsIDB4ZGQ3ZjNjYzEsIDB4ZjVhMTZjOWMsCisJMHgxNjg3ZWI1YSwgMHhhY2E2NGJhMSwgMHhlMWQyMDZmZiwgMHg1YmY3Y2E2OCwgMHhmM2VhZWQ2NywgMHgyN2JmY2VmZCwKKwkweGRjOWM4NDIxLCAweGZiM2ZmOWMwLCAweDQzOTdlNzllLCAweDM4MWJhN2U5LCAweGVmYzRkZjdmLCAweGY5M2ZmZjE3LAorCTB4Zjc5ZmU3OWUsIDB4NjQ2N2UzM2QsIDB4ZmZmNDNkMjgsIDB4NmQwMDNlZWEsIDB4MmZiYjVmOWQsIDB4MGZlZjViNDAsCisJMHg4M2MwYmMzYiwgMHgxYjRhZDZmNywgMHg5YWQwN2RiYSwgMHg5NzJjNWZhMiwgMHg2M2ViNTU0MCwgMHgxZGExMzI5ZiwKKwkweGQ3OTIzMDlkLCAweDlhOTVkNmMxLCAweGMwYTU1YmJjLCAweDVmMDUwMGZlLCAweDFjNzk1M2E3LCAweGUwYmRjOTYxLAorCTB4NjczYzAzODksIDB4NzFhNWZjMzgsIDB4YzkxYjI3OTgsIDB4MGFlZTBlMjgsIDB4YTYzMGY1ZTcsIDB4YTE0Y2E0YjcsCisJMHg5NDk2ZjZmZCwgMHg5YjM3YTBhOSwgMHhlOTVlZjk3YSwgMHg2ZjVmMzE0MSwgMHhhZDNkMjQ3NiwgMHgyMTRhNzBlOCwKKwkweDk0M2M4ZWZmLCAweGVhMjU5NmJmLCAweGJlNTY5NjUyLCAweDZkZTk5NmRmLCAweGJkZTk1MzI5LCAweDg3ZjQxNGI2LAorCTB4ZWJmM2Y2NjIsIDB4ZDhlNjNlZDEsIDB4YjJkOTcwNGEsIDB4NjgzYzUyYTYsIDB4MWVmODQyY2IsIDB4ZWI1ZWY1MTEsCisJMHg5ODU5ZmViOCwgMHg1ZjgyYjY4ZiwgMHg4ZGMwZjU4OCwgMHg3OGE0MTc1OCwgMHg5NGUzNDJkNiwgMHhjM2VjY2RmNywKKwkweGMwYzQ3ZGUxLCAweDdhZGZhYzI0LCAweDk5ZmJlNjZlLCAweDU1NDJmMzU4LCAweGMxODhlZjNkLCAweGEyNDczOWQ3LAorCTB4ZWEyNzVlN2EsIDB4NWYzYWEzZWIsIDB4ODI1OTkzZWUsIDB4YjliZjAxODksIDB4Njc1NDJjYmIsIDB4ZmZlNDZkN2MsCisJMHg1YmJmYzAxZSwgMHg2NWJkZjVlMiwgMHgxZjY0M2UxNiwgMHhjNzAwY2RjNiwgMHhjNGY5M2RiMiwgMHg4ZWY3MzNiZiwKKwkweGM2MDU0YmZjLCAweDFjZmMzOTFkLCAweGE1NzExZTkwLCAweDEwOWMxN2M4LCAweDVmMjUwZWY5LCAweGRlYjVkNGEwLAorCTB4NTM5Mjc5MTEsIDB4YjY4MTdmOTgsIDB4ZDAyMWYzMDMsIDB4Mzc3NDdkNGEsIDB4YTE0OTNlZGEsIDB4MTIyM2M3ZWMsCisJMHg4ZTc5MGZjZiwgMHhiZTUwZmNmMiwgMHg3ODM3ZGVkMSwgMHhjMGI0NjRkZiwgMHhhZjFmMWNlYiwgMHg5ZWY5Mjg1YiwKKwkweGY5M2Q2MmVkLCAweDYxN2Q5NjNmLCAweDM3ZTY5N2UwLCAweDlkYTIzNjBlLCAweDhmNGM2ZmNmLCAweGMzODg3NmMwLAorCTB4ZWYxMmMzYWIsIDB4NzUzYmY5OGMsIDB4ZjE0MmZkMGEsIDB4ZWUxZjcyNTEsIDB4ZDQzYmFjOGYsIDB4MTdiZDc1NGQsCisJMHg5OWZlNzUzNCwgMHhmZjc0OGM3ZCwgMHg5OWM3ZTBiOCwgMHg5N2Y1MTg3ZCwgMHg0MWFmZDNmNSwgMHg5NDY2MzFmNywKKwkweDRmNTUwZTQ1LCAweDE4Yjg4NGFhLCAweGM0ZDM5Y2UxLCAweDVkZjA1NmUxLCAweGUwOTViM2U5LCAweGU4MWY0ZTdiLAorCTB4YWYzNmM0NmUsIDB4ZjI4NGFiM2EsIDB4MWExNzM1ZWQsIDB4NWY3MzdmZDEsIDB4NzZmMDc0YjksIDB4NmQxOTk3Y2EsCisJMHhlYWNjNGYxOCwgMHgyZWRkZTc1MCwgMHg5NmZkZjJhNSwgMHg3YmZjNDgyZiwgMHgzZDU4Y2Y0YywgMHg2M2Y5YzdjNSwKKwkweGQ2M2ZjNGY1LCAweDVmOGE3MGNhLCAweDliMjYwNmFkLCAweGZiODUzZmIxLCAweGYxNjU3OTQ1LCAweGQzNjdkODI1LAorCTB4Y2MxZmM5NjIsIDB4NWQ4YjY0M2IsIDB4ODNjODFiOTAsIDB4NGYyZWM3NTksIDB4YWI1ZDNjNDAsIDB4ZDNlNGFhYmUsCisJMHg0NjM5MzMxZSwgMHg2ZGJmM2QyMiwgMHhjOGY2YjU3ZCwgMHhhYTU3ZGE3MSwgMHg4YmMxNGJhYywgMHhhZGVkMjc1MiwKKwkweDczZWNhYWJlLCAweGFhN2Q5NzcwLCAweGQ2ZTE5N2RhLCAweGZjYzE4Zjc3LCAweGQzOWVmZTYzLCAweGQyY2ZiMTQ2LAorCTB4YTgxNTljOTIsIDB4YmVlZmU2YmYsIDB4YTU1Nzc1NDAsIDB4YmZhZWVhY2UsIDB4M2MzNTdlNDAsIDB4ZTQ5MGU3NDcsCisJMHg0MDUzZjkwMywgMHhjOTVhZWU0ZiwgMHgwMjJmYWZlYiwgMHhjMmI2ZDgzYywgMHhkNzAwMWRmYSwgMHg2YzdlYjBjYiwKKwkweDc4ZmQ2MGRiLCAweDAzOTU5NWZkLCAweGI0YWRmNWE4LCAweGU1NzdiYjUzLCAweDZkZGQ2YTA4LCAweGViNWVhODE3LAorCTB4N2Y2M2QzZWEsIDB4MWVmM2Q1MjQsIDB4ZmFmMzlkOTcsIDB4NTI0N2Y3YTgsIDB4OTNlZjViNWYsIDB4YzZiZTc4MjMsCisJMHhkZjQwYzg3ZCwgMHg5ODhmYjgyYiwgMHhiNTE3N2Y0OCwgMHhmOGM0YzljZCwgMHhhZTYzZjNlMCwgMHgwZWJiODQ0YywKKwkweDdjNDE2ZGViLCAweDBmNjFkZTcxLCAweGNlMzE3M2M3LCAweDU4ZTFlZDNiLCAweDNmNmZjYjY3LCAweDJmZmRjNDZiLAorCTB4MTFiZjdhNzUsIDB4NzEwMDYxZjMsIDB4NzQ0ZDZlMmEsIDB4ZjdjMGJhZWYsIDB4ODUxNWI2ZjcsIDB4NTlhZjdlMjMsCisJMHhmZmZkNmIxNywgMHg1MzZmYjE3NSwgMHgyMDJhZmIxNywgMHhmMjQ3YTQ5ZiwgMHg1NmM3M2E5YywgMHhjMjM5MGY2YywKKwkweDg5ZTkwNDE3LCAweDRmNWU0ZTc1LCAweDRkOTM5NzU5LCAweDk5YzliODcyLCAweDY4M2YzYjFkLCAweDllMzI4NmJlLAorCTB4Y2Q4ZWIwYmYsIDB4M2ViZTBmMDksIDB4ZjM0MGNkMzUsIDB4YTA5Y2YxNWIsIDB4MTU2ZmVmMTAsIDB4ZWEwNmVjZmEsCisJMHgyMTNlZDZlZCwgMHg0N2YzYjZmYywgMHg0OGRkZjQ0ZCwgMHg5OTg1ZWVmYiwgMHhlYTVmYzQxZCwgMHhiMmJhZGM3YywKKwkweGZkZjg5OWY5LCAweDE4NDRlN2JkLCAweDc1ZjNjN2ViLCAweGQzMWM3Y2FhLCAweGNiN2FlM2Q0LCAweGQzMmNjZGNiLAorCTB4Y2UyOWMyMzksIDB4YmI0MGNlZWEsIDB4MzE5YmNkYWQsIDB4YjcwNjc3N2QsIDB4N2U1NDhlZWIsIDB4OTUyNzgzNWUsCisJMHhlYTNkNjA4ZCwgMHhkZTY1N2Y3MiwgMHhmYzYwNzJiNywgMHhkOTFkMzI4YywgMHg5NzNlYTUwYiwgMHgyYjY3YTY1NywKKwkweDU2ZjMzZjgxLCAweDk3NTRiYzE4LCAweGE2OWZkMzJiLCAweDZjNmUyMmZiLCAweDIyYTVlNGIwLCAweDYyM2E5ZjlmLAorCTB4NTdkYTg0YjQsIDB4YWE3YjJmNmQsIDB4Yjc5ZTFiMjksIDB4NWM3NjQ4ZDcsIDB4NzdlYWI1ZDYsIDB4YTNlZGFkOTUsCisJMHgxNmZkNjk1MywgMHhmMTI0ZTUxOSwgMHg1M2VmYTMyMCwgMHhmOGYzZDY3YiwgMHhkNjNjZWY3ZSwgMHhlMzBhNTRkYywKKwkweDgyY2U4ZTU4LCAweDY3OWI1MWY2LCAweGJmNDMzZTQzLCAweGVmODc5YjQ0LCAweDRiYmJmNjEyLCAweDQ4YzFjZmQ4LAorCTB4OGY5YzA0ZGIsIDB4NzNjYTRiZmIsIDB4NGQyOWZlNWEsIDB4YWYzNmJlOTUsIDB4ZmRjYTkwNWYsIDB4YmNiMjg2YWEsCisJMHhkZjQ4Mzk3NSwgMHhmNjg2M2EwOSwgMHhkOGFjYTFhNCwgMHg5ZjM0MTM5NCwgMHhlMzRmNTUyZSwgMHg2MGZhYzExZSwKKwkweDkwN2Q3MDdjLCAweDc1YjUwMWQ3LCAweGU1Y2Y0NTQxLCAweDA2MzE3ZmI3LCAweGY0MDliZGYxLCAweDc3MzFkYTM1LAorCTB4ZTQxZmFmMzIsIDB4MDg3NDUyYmYsIDB4NGUwMDQ2ZjUsIDB4Yzk0ZGJlYmUsIDB4OGViN2JmNTcsIDB4MGM1ZDdjNjUsCisJMHhmNjc5Y2JmNywgMHhjYjlmOTQ0OCwgMHhkZWU5ZjA5YiwgMHgxMzlmYzQ0OCwgMHhiNWVhMWVlYywgMHhjYzZiMzkyMywKKwkweGU4MjY4ZmE4LCAweDFkZmJmMTBiLCAweDVhYmE1M2I3LCAweGQyN2FjMjY3LCAweDhmNTdhZjlkLCAweGYyMDllZmMzLAorCTB4ODYzZDBmYTcsIDB4NjE1ZTlmNzgsIDB4Nzc4MGZkYTAsIDB4MDYzZTVlYmUsIDB4MmZmNjJiYWYsIDB4ZDVkNmZhN2YsCisJMHg4MDdmNzgxMSwgMHhlMWI3MGY2NCwgMHhiYzYyYjJmZCwgMHgwZjg3N2UzZiwgMHgyMjZjZTkzMywgMHhkY2ZhMDc0MiwKKwkweDhmNTNhNDdmLCAweGM5OThmMzcyLCAweGYwMGE5ZDk1LCAweDc1MTE0ZmU2LCAweGE3NmUwYWE2LCAweDMxNGRiN2E3LAorCTB4YWE0ZmVlMzAsIDB4ZjRiZWU2ZWMsIDB4NzQxZjI5Y2YsIDB4ZWE5ZjJkYTksIDB4ZWZiODcxNDcsIDB4YWY2MDM3MjEsCisJMHgxZDgwZjdmMiwgMHhiMWQ4MGE4YiwgMHg0YWJmNmFlZiwgMHhjZjg0MmQ1MywgMHgyMThlYzA1YiwgMHhiYzI5ZDYzYywKKwkweGJmYTVhZjNlLCAweDM3YmZkMDRlLCAweDFlOWJkNGJiLCAweGU3ODNmYjQ2LCAweDRhN2NhMGE4LCAweGI4ZWQzZGM5LAorCTB4YzMzZWYzMGQsIDB4ZjA5NzVmZDEsIDB4Zjk1ZTk1OTAsIDB4NmZkMGE5NmYsIDB4NzNmOGJkYjEsIDB4N2FmODBhZjcsCisJMHhmYWQ1MzdkZCwgMHgyZDMzYTljZiwgMHg1MjFmZmQ0ZCwgMHg5N2YxMTI2NywgMHhlMjUyNmY1MiwgMHg5ZTA0ZDdiNSwKKwkweGExNzVmNjk1LCAweDc3ZjNiZTM3LCAweDQzNWM2ODBjLCAweDBkNjBjNzdlLCAweGFjYzMxZGZkLCAweDQ0ODczYTE2LAorCTB4ODBlMThlZjksIDB4OGNlZDE1OTEsIDB4ZTJiM2ZkYzcsIDB4OTNhZjI2YmIsIDB4OGYwM2E0ZmMsIDB4MzdmMWI1ZmQsCisJMHg5MzVkZjhmMSwgMHg4MDY3Mjc4NCwgMHg3NjQ2M2MzZCwgMHhhZThmMzk1ZSwgMHg5ZTYzZWRhZSwgMHhmYmUxNmQ2ZiwKKwkweDQzNWI2YmMwLCAweDk5MTJlYjlmLCAweDI5N2JlZGM2LCAweDMzZWE4N2FjLCAweDk4ZWQ3ZjYyLCAweGU0NGVhMjVkLAorCTB4NTk2ZDdhMzAsIDB4NGZiY2I3OTgsIDB4NzRiNzljMWYsIDB4Y2EwOWZjZGIsIDB4YzUyZjVkYmUsIDB4NjYzY2VhN2IsCisJMHgzYWNiNzk2ZiwgMHg2YWZjM2JlNSwgMHhkMWRmOGVjOSwgMHhkMzFlNzc1YywgMHg3ZWUxZjdjMSwgMHg0YmU2M2NkYiwKKwkweGNlM2FlYWE5LCAweGFkMGIxNDgxLCAweGQxMjVkY2JmLCAweDlkMjY0Y2I5LCAweGU3ZjY4NmIzLCAweDQyNTkyMmJmLAorCTB4OWEzZWViZWQsIDB4YmM3NWU1Y2EsIDB4NmQzYzgzYTgsIDB4ZjRmMWZjZTQsIDB4OGJlZDEyYWQsIDB4OTBlZGVmYzcsCisJMHhjMmJmNGZlZSwgMHgzYTc5YjdiZiwgMHhhMzZmN2Y4ZiwgMHhlZjk0M2RkNCwgMHhkNDBlNmU2OCwgMHgzYjNiZTgzZCwKKwkweGU1MWJmYmU1LCAweGZiZTUxYTdiLCAweDIzOWIyOWNkLCAweDA3ZTIzY2U4LCAweGRjYzkyZDBkLCAweDVmMTBmNWVmLAorCTB4ZjYxZTJiZmUsIDB4MzBkMGY1ODAsIDB4NWU0YTFmNTYsIDB4ZmQxNmE3NzcsIDB4YmI4ZDJhNmIsIDB4NDc2ZjcxZTEsCisJMHgyOWZmMDg2YSwgMHg3ODQ4ZTMwOSwgMHg1ZWQ0OTljZiwgMHhhOWIzODVlMywgMHhmYTgxNzhlYSwgMHg0NmUxNzhkYSwKKwkweDRiZWUzZGQ1LCAweGRkN2EzNzY1LCAweDhkZjk0MjAzLCAweDJkZmU3MDM3LCAweDliZmNmM2RmLCAweDRkNmRkMTQzLAorCTB4MTVmM2U4NzgsIDB4MWQ0NGQzMmIsIDB4MzgwZTczNWQsIDB4MjQ1ZGYxZWIsIDB4OTI0ZGViYjcsIDB4NTFiNzJmZWQsCisJMHhmNTQwZGQzZCwgMHgzNmFmNDU3NCwgMHg3M2Y5ZjE0NSwgMHg3YjRhN2NjNSwgMHhiM2Q3MWE0NywgMHhmOWQwODY0ZCwKKwkweGRjNjJhOWIyLCAweDI4MzFkOTQ2LCAweGNmNDFkYTBkLCAweDgzOTdmM2E4LCAweGNiZjlkNDViLCAweGU3ZDU1YTViLAorCTB4YTlmNTBjODUsIDB4M2ZjOTAzY2YsIDB4YTYxZjNlYTQsIDB4MWYzZWFmZDAsIDB4ZjUwOWY4NjYsIDB4M2IyMzMwZjksCisJMHhkY2MzZTdkNCwgMHg3Y2ZhYTFmNiwgMHhhYjc0MWY5OCwgMHg1ZmI3OTdmMywgMHg1ZWY5YWE5ZSwgMHg3N2NmY2JkMywKKwkweDdlMGRjZTAyLCAweDRmMzRjNGFlLCAweDRlOGQyZTczLCAweDg0NGQyZTczLCAweGNkMWE1Y2U2LCAweGRlNjIyODM5LAorCTB4Y2QxZjRmMmMsIDB4ZjVlYTM0ZjksIDB4OTcxZWIxNTksIDB4YjhmNWZkN2IsIDB4NDRkOGZhNjcsIDB4Mzg2ZmFlM2QsCisJMHg1OTQ4ZjczZSwgMHg2ZGZhMzg0ZSwgMHhmZmQzNzdjYSwgMHg5N2NjZjgyMSwgMHhmNDhiOWFlNiwgMHg1YjFlYWQ3MSwKKwkweGIxZDU3Yzg3LCAweGYzMDMyYzJhLCAweDI5ZDVhZTJlLCAweDgzZjAzYzcyLCAweGJlODkyMWViLCAweDlkNWUyZjliLAorCTB4ZTY3YmZiNDIsIDB4M2YyNTBjMzUsIDB4YzgzOThmMjksIDB4NjM4Y2FhNGYsIDB4NTg3M2NmMjEsIDB4ZDZmNWM2OWYsCisJMHgzMzAzN2FkYywgMHg2Y2NiZTBjNiwgMHhkMGE4MWQ0NiwgMHg1YjEyNGQ3MywgMHg3OThkZWRjZiwgMHgzNTYxZjAyMiwKKwkweGJiNTg3Y2UzLCAweGQ1MzQ1OGVlLCAweDU5ZGQ4NWJkLCAweGFhYzE1MWM0LCAweGI5ZDIxN2ViLCAweDVkNzNkYTBkLAorCTB4MzE4YjU4NmEsIDB4YmM1OWU2MDUsIDB4NDFlNDlkYTEsIDB4NjI4YmNlN2IsIDB4OWU2MmRjODcsIDB4N2RmNTE2ZGEsCisJMHg4MTcwZGIzNywgMHgxZDY3ODljZSwgMHhlZTMzYjQ0NiwgMHg4NmZkZjU1NiwgMHhiMzJmNTEzNCwgMHg4ZGNhM2IzMywKKwkweDEzMjhiZWViLCAweDAyYzU5N2ZhLCAweDQ4MzY3MzJmLCAweGNlMGZhYzE2LCAweGI4NGY2ODZiLCAweDBlZjNmYTBiLAorCTB4Mjk2ZjE0YzksIDB4Y2UzZDYxNzgsIDB4NzNhNWM5ZTEsIDB4ZWExZTJmZDIsIDB4NDVmM2ZlNDcsIDB4YzcwOTJkOWIsCisJMHhiYzc5YTJiOSwgMHhjMzVkZTkyMCwgMHg5YzY1N2FmMSwgMHg1ZjllMzg2YiwgMHgwYTMyN2RkNiwgMHhhNzYxZjFiZiwKKwkweDVmYzhlYjJmLCAweDA4NjgxZjAwLCAweDM2MTY2ZGY5LCAweDNiY2YzODI0LCAweGM0NDk2MGM3LCAweGRkODc4YjNjLAorCTB4YTY3MTRjOTMsIDB4NzU5NTdiODgsIDB4YzcxMDRkYmIsIDB4ZTIxZjYzNDYsIDB4ZTkzZWJlNTQsIDB4NDZlODg5MmIsCisJMHhmYzFiYWQyNiwgMHhmODBmN2MyMiwgMHg5YWM3MTQzZiwgMHhmYTE1Njk5OCwgMHhjZDZkNjczZiwgMHgzYWZhZTg4OSwKKwkweDVmOTAzMDFmLCAweDJjNDc3NzMxLCAweDFiNzMxNWY5LCAweGZlNzg4YzRhLCAweGIxNWRkY2MxLCAweDc5OTY3ZmI0LAorCTB4YWUzMWM3MWMsIDB4YmE3OGU4NTUsIDB4MzI2MGZmMjEsIDB4MjViNzNiY2MsIDB4ZTlhYjJlY2IsIDB4MTcxMzhhYTcsCisJMHhlODU2OWQzNywgMHhiYTBkNzlkNiwgMHgxYmEyODY3NSwgMHhmZDc1NGJkMCwgMHgxN2UxMzRlNSwgMHhmYmIxN2EwOCwKKwkweGJkZmJlOGUzLCAweGZhMDdhNThhLCAweDYyZWZiZTYxLCAweDBlZmQzODdkLCAweGMwMzhjZjQ1LCAweDVhNjRmNWMzLAorCTB4MjlkZTJhYmMsIDB4OGUzNTczZWIsIDB4MmZiYTczYTMsIDB4YmEyNDI4NmQsIDB4ZjY1NWU5NjksIDB4ZTM4NmYzZGYsCisJMHhhZmVjNTVmNywgMHg4ZGZkMGM1MSwgMHhmNjZjYmVjYSwgMHg1YjNlYjg1NCwgMHhiOTU1ZjJlMiwgMHhmYTE5NmM2NiwKKwkweDdkMGE2ZjM5LCAweDhiODhiYWY4LCAweDA0NWM2MThlLCAweDE4OWJmYzdlLCAweDJkZmY0MTE3LCAweDA1ZmQxNzExLAorCTB4NGY2ODIyZTMsIDB4NmQwNDVjNjIsIDB4NGZmZjM4YTcsIDB4MDA2MDMzOTEsIDB4NDI5M2Q3ZTIsIDB4ZDU1ZTRlYmUsCisJMHgzMTkzY2JmMywgMHhkZmY2NTY5ZiwgMHg4MGVhMTY2ZiwgMHhiNTNjMTJlNywgMHgzM2E3NDY5MywgMHhmNmExZDkzNiwKKwkweGE5YTdjYmE3LCAweDgzMGVlOWZkLCAweGVkMzI0YzY1LCAweDgxZjVlMjZiLCAweDU0ZGJjZWI5LCAweDY2ZGU5OWUzLAorCTB4MWIwNzNjYzQsIDB4NGViODFmOTAsIDB4YzQ2NmM3ZjYsIDB4MDk4Y2M3M2MsIDB4M2ZmMWFhNzEsIDB4ZjU1NTRhNmMsCisJMHgwYzVmYTAyZiwgMHhlYjI5NGRmMCwgMHg3NzdlYmFhYiwgMHg3ZjU1MjBjNSwgMHg0MjQwNjVjZSwgMHg5NWFmNzIzZSwKKwkweGUyMmNlNzlmLCAweDI3OTRjYTI0LCAweDlmMGRlYTA2LCAweGZhNGYwZmQ2LCAweGU5ZmJjMDExLCAweGQ3ZGQwMzExLAorCTB4ZWJhMTQzZDIsIDB4Y2EzYWNkZmMsIDB4MGNkYmNlZGYsIDB4M2I3OTgzNmIsIDB4NWM5MWU3OWIsIDB4OGEyMjdjN2QsCisJMHhkYzY5ODdjZSwgMHgwOGRhZmY5MSwgMHg2MWRlOWZlOCwgMHhhNzY0ZmRhMCwgMHhjMjFlZTIxYiwgMHhlZjRmYWFmMywKKwkweGVmYzY4ODQ4LCAweDMyOGQ1Y2YyLCAweGI1OWU5MWYzLCAweGU2NTU5ZTkwLCAweDQ1NTg2OTJkLCAweGM3MzA3ZmJmLAorCTB4Zjk0NzY2MWIsIDB4ZjNkZmIzOWYsIDB4ZmRjN2QyYjgsIDB4MDY0NWI0MDEsIDB4ZWNiOGUzZTUsIDB4M2Y0NDQ5ZjUsCisJMHg3Yjc3ZTEwNywgMHgzZmM1ZTUzOCwgMHgwNThmMzAzNCwgMHgxZDc5Y2JmYywgMHgyNTBmYWUxYywgMHhiM2ZkODBkNiwKKwkweGZmZjRlZmUxLCAweDZlNzFjMDExLCAweDBlOTU3MzYyLCAweDQ4ZjkyOGZkLCAweGU3Y2JlOTAyLCAweDViN2M4NjY1LAorCTB4ZTc0MGQ0YjEsIDB4NGI3YTJmMDksIDB4MjY3ZDhhZGUsIDB4N2E3MmE1ZTUsIDB4MWQzYmY0Y2IsIDB4Y2QxODdiNmMsCisJMHg0MzgxYmFjZiwgMHhkZmYyZGM2MCwgMHg1ZWI5M2Q4NCwgMHhmZmE4YjllNCwgMHhmNWRlYzFmYiwgMHg4ZjkxM2Y4MiwKKwkweDhlNjU4YzNlLCAweGU3OTYwMjU4LCAweDk2M2EzZTFiLCAweDAwOWU3NTQwLCAweDcwNDNiZDNlLCAweDNiZDRiZmRkLAorCTB4YmQ4M2E1ZmIsIDB4M2JjYWE4ZmEsIDB4ZmRkYWY0ODQsIDB4NWE1NzI0MDksIDB4YjkxYTc3YmMsIDB4MWNhMGYyZGUsCisJMHgxOTdkMDE0OCwgMHg5ZGZlMzM5MCwgMHgzZDgzM2NkNSwgMHhhYWZhNGVkMSwgMHg1NWY1MDUyMCwgMHhlNTAzMDZlNywKKwkweDExZGU5OTE1LCAweGNmNzBlYmNkLCAweGVmMmIxZjEzLCAweGM2ZGJkNGU5LCAweDRkOWQ3YzIwLCAweGUxMWRmNDU5LAorCTB4ZDkzMjBkZGMsIDB4M2UzZmU0M2IsIDB4ZWJlM2NiZGUsIDB4ZTMwYmIyOGQsIDB4ZTQ5MzRmNzUsIDB4Y2I1ZDc4YzIsCisJMHgwZTk2Y2IzNywgMHg5ODE1ZGZhNywgMHhkOTE5Mzg4NSwgMHg0ZjljMGY1MywgMHhhNTA3NzVlMSwgMHgzZjBmNzhiZiwKKwkweDc0MTU5ZmQ3LCAweDBlMGRhN2U4LCAweDdmMDM0NzVlLCAweDVmOWYzMjVmLCAweDI2YmM3NzM5LCAweGYwYTc0ZmZiLAorCTB4ODc4YmE2NjgsIDB4ZjdlMGM2ZmEsIDB4Y2I4ZjY3MzgsIDB4YjM2NzY3YzQsIDB4MDMyNTg3OWIsIDB4ZWRkMTNmM2QsCisJMHhlODIzZjYxZCwgMHg3M2QxM2M3ZiwgMHg3MGZkOGY0NiwgMHhlYmM0NTRkNywgMHgwYzg2ZGQxMiwgMHhhYmJhMWVmYywKKwkweDZlODdiZGVkLCAweDdhM2VlNzgzLCAweDMxMjc2MGQ2LCAweGZhNDA5MTVmLCAweDQ1ZjZmMTYzLCAweDdkZjc1Zjk5LAorCTB4M2VmMDU4MTAsIDB4NDhlOGNmM2MsIDB4NGI5ZjAwOTEsIDB4MzA2MzJkNmMsIDB4Mzk4MGIwN2YsIDB4ZjhlMjFkODUsCisJMHg3OWUwZWRiMSwgMHg5ZTI2Y2IwYywgMHgzMGFmNzhkNywgMHg2N2VlM2Q2YSwgMHg1YmM5YTc5YiwgMHgxM2JlMjdiYywKKwkweGE5MmU5MDVjLCAweGEyZWQ4NGZjLCAweGY5Yzc0ZjNmLCAweGYzYzczZDliLCAweGQyYTdmMDU5LCAweGZiZjE2ZWZmLAorCTB4NTdkZThhMWUsIDB4NmIwZDc1ZjQsIDB4N2ZhOWYzYTYsIDB4ZjA0ZDllOTQsIDB4MzRiYzkyMmMsIDB4OWE0ZjBlYWUsCisJMHg2NTU1MTUwNiwgMHhjZDZhZjFlMSwgMHg4YTVlNjEzMywgMHhlOTYwNmQ0NywgMHhkZDgwZmM4MiwgMHg2ZTdhMzZlOSwKKwkweDQ3ZDlmMWIxLCAweDMyMTc2ZDkxLCAweDY2OWY1ZjNmLCAweDZmMDY0N2RjLCAweGE3YWIzZjk1LCAweDZjYjJhOWJkLAorCTB4ZmNkMmIwNmQsIDB4NTdlZTNiMDYsIDB4YjRlNDI4NWMsIDB4ZmFmMjU5YjYsIDB4NmVjODNhZjgsIDB4MmNmMzEwMmUsCisJMHg2YjUzNzYxMCwgMHgyM2Q4N2E5ZiwgMHhhMDVhMWQ4ZCwgMHg1OWFjYjNiMSwgMHg1ZTAxNTc2ZCwgMHg4MTViOTczYSwKKwkweDMzYTcwYjU3LCAweGIwZjA4YTMyLCAweGNmOWY5OWI4LCAweDFlZjJlNTUxLCAweDRiNzA0NDljLCAweDBmNjRhMDc2LAorCTB4NjczMjE2NzgsIDB4ZTNhZTJjNjksIDB4NmI4ZjFlMTksIDB4YWJhZWQzZTEsIDB4OWQ2MmJjMDcsIDB4ZWNhYmI4NWEsCisJMHgwMTcyN2MxNywgMHhkYTBhM2RmZiwgMHg4NzU5YTlkZiwgMHhiZmFkMGY0MiwgMHhjYWE1ZDBhNiwgMHhkNTViZjFjMywKKwkweGRmM2QxMTI2LCAweDMyMDdlYWJmLCAweGYwYWEwN2RhLCAweGZmODE2YjBiLCAweDRlNzc5ZWE5LCAweDcwYjY3ZDQyLAorCTB4YWNkZmU4MTMsIDB4ZmMyOGZmMDAsIDB4NDRiNTk4YjQsIDB4MzFkNGJmMjMsIDB4ZDQ5NjIzNWYsIDB4N2U1YWZhY2YsCisJMHhjZjBiMzIzOCwgMHhlNzQ2M2E2NSwgMHg3ZDU4NTU0NywgMHg4MGIxNzRmZCwgMHgxZmRmY2Y0MiwgMHg4MDQxZmIyYSwKKwkweGJlNzhiNWFmLCAweDE3YWY1ZDE2LCAweDExZDQ0YzZmLCAweGQzYzAzOWU4LCAweGZhNjRhNzgyLCAweDljNjgyN2FlLAorCTB4MjQzZDdmODgsIDB4OGYxZWQ1NGYsIDB4ZDVjYmViMTEsIDB4ZGMzZTdlN2EsIDB4ZWI3NGUwYjUsIDB4NWQyOWVmZjksCisJMHhmYzVlZGUxMywgMHhmNzBhZWZhNCwgMHhmOWJkZTkwNywgMHg0MjYyZmQ1OSwgMHg5ZDY1MjllOSwgMHg3MmJkMDhlZiwKKwkweGI3YWVmYjRkLCAweGJlYzhjNWRmLCAweDhmOTg0ODI3LCAweDU3NWY0ZGU5LCAweDAwYmViYjA5LCAweDY3YjQzY2VkLAorCTB4ZTc0MGJmMzYsIDB4ZTliZmJlMmUsIDB4ZDU1ZjNhMDUsIDB4ZGEwMmVjZjgsIDB4ZjM2NjcwOTcsIDB4ZjdmMDg3YmMsCisJMHg5OGVjY2UyMywgMHhlMTdkNzY0NywgMHg3NzVkOGE2MywgMHg4NWZkODMxOSwgMHg5ZTczY2Q5MiwgMHhhZmM4NWZmOCwKKwkweGRkNTM4NGNmLCAweDRiYmY2YWI4LCAweDQ3YTAzOWM0LCAweDMzNmQ5YzYxLCAweDEzNmM5YmQ3LCAweGQxMGJhM2Q3LAorCTB4ZmQ5MmU1ZmUsIDB4ZGRjNzA5YmIsIDB4MDliYWU1NTcsIDB4M2FlODNlZjksIDB4ZTZmYmM1ZDksIDB4MDdiNzdlYjksCisJMHhiN2VmYmRlNiwgMHgyZDBmNzY5MSwgMHg3OWUzZTJkOSwgMHhlZDBmOGI2NywgMHg3ZjNkZWQ1ZiwgMHgwYmJmNDUzOSwKKwkweGViNzkxZjI1LCAweDg3YmQ4YWM3LCAweDU3N2FlZGVlLCAweDk3Y2EwNjQyLCAweGYyYjVmM2IwLCAweGZhMGIwY2Q2LAorCTB4ZmMyZWMyMDUsIDB4MTczZGYxYjMsIDB4MTRmZTRkZjEsIDB4NGRiYmY3YzcsIDB4NmRlZmNmMWMsIDB4ZGM2Zjc4ZTAsCisJMHhkM2UyOTdkMSwgMHg5MmZhOWI3NywgMHg4ZWVlZjUxZiwgMHhmOWVmODQ3ZSwgMHhlNGRmMDFlYiwgMHg3ZWQ0ZGI0NywKKwkweDFiZTAxMzU0LCAweDM3YzQwNGUzLCAweGJmNzczNWMwLCAweGNlZGJlMDRkLCAweGYxYzRkZGYxLCAweDc2ZjAzNmNjLAorCTB4N2FiYzBmN2UsIDB4ZmJmNGZjZTgsIDB4OGVjYzNkZmUsIDB4ZTE4N2MxN2UsIDB4M2U5N2YyM2UsIDB4OTlkMzI5ZGMsCisJMHhhNTlmOGE2NywgMHhiMTlmMzlmOCwgMHgxZmQxYzdlNiwgMHhhOGJkZjA1MywgMHhlYTA4N2ZiZiwgMHg3ZjhkOGE5NywKKwkweDJmYmM0NjhhLCAweDIzOTNjOWRhLCAweDFjY2RmMDNkLCAweDA3NmZlODQ5LCAweDJmZDU3ZmRlLCAweDA4NDhjYjJhLAorCTB4MjFiZThiZjIsIDB4OTM5OGVhNWQsIDB4ZTFkNzIzZjYsIDB4ODI0MzY0NzksIDB4YmYyYjNkZjYsIDB4ZTdkZGE2NWIsCisJMHhjOGY5ZTM2YywgMHg5OTM3NjYzMCwgMHhlZDM0OWUxMCwgMHgxOGI5YWZlZiwgMHhiY2ZlN2JlZSwgMHhmNzU5ODVkZiwKKwkweGFiNzcxYzkwLCAweDEyNjM0ZjdlLCAweDljZjAxOWYzLCAweGQxMjJkNjAyLCAweGU1ZGE5NjdlLCAweDE4OGJhMzRiLAorCTB4NGY1YTNmOWUsIDB4ZTBjZGFjNzAsIDB4YmMyYmJkNzYsIDB4YjJmYzgzM2IsIDB4ZWYxYzYxM2QsIDB4ZjNhYWYxOWQsCisJMHg2ZmRkMjc4OSwgMHhiNDU3Zjk4ZiwgMHhmOWY4NDdmYiwgMHg3NjNjOTNjNCwgMHgxYTRlNjdjYSwgMHgyYWI5MzQzMSwKKwkweDJlMGJhZTg4LCAweGFiODk3M2YzLCAweGYyZTYwMzJlLCAweGM2ZmRmN2YxLCAweDA1ODdiZWQyLCAweGNlYTg1M2NkLAorCTB4NDk2ZDA1NWYsIDB4YmU1ZWY4ZjAsIDB4YzE5YjViYmYsIDB4Yjg1MzliZTMsIDB4OTczYzNjYTYsIDB4OWQ3ZWZjNDksCisJMHhlYThkMTczOCwgMHg1MzliODBiNCwgMHgzNzNhNGVlMSwgMHhjOTgyNTRlZiwgMHg4YmJhY2ZjZSwgMHhlZmZkZjNhMSwKKwkweGE2NzA3YTE2LCAweDEzZWQyMGY5LCAweGNjM2M3OTg3LCAweGJmZDZlNzhhLCAweGFiMDE0MDY5LCAweDhiM2M3NTMwLAorCTB4ZTRlY2YwMjEsIDB4ZTkzNWVlZjcsIDB4ODM3ZjZiNzAsIDB4Nzc3M2U0NDUsIDB4MTNkNzE1N2QsIDB4ZDUxZDAwOWUsCisJMHgyM2I5YjllNywgMHg5YTNmZTc0MiwgMHg4NzI1NWUwNSwgMHg2MTBjZWE4MywgMHhiYzA0NzczMCwgMHgzNjE5ZTdmZiwKKwkweDZmZWM1ZDdlLCAweDllODA1YjY3LCAweDg1Y2YzZDUxLCAweDBmMzNhZTUzLCAweGE2YjYwZjNmLCAweDJiN2RmZTE4LAorCTB4N2E4NDhjZTMsIDB4ZmFhOWQ2NDMsIDB4N2Y3ZTQ2MzUsIDB4YzljNGM2N2IsIDB4ZjYzMTQ2OWIsIDB4ZjdhYzAzMDYsCisJMHhmMTk0YmY0NSwgMHg4YzRlN2YzOCwgMHg0ZDc1ZjcxNywgMHhhY2EzNzNjNiwgMHhhZjg5ZWFkOCwgMHg0Nzk5ZWFhNiwKKwkweDMzMjZkYmM3LCAweDc5YzQzYmQ2LCAweGZlMDQ5MzUxLCAweGJlNjA4ZmE2LCAweGRmN2RlMDE4LCAweDg5YjlmNTYxLAorCTB4YmU3NGY5NzcsIDB4OTNhZjAwOWIsIDB4MjFiYTVjZjEsIDB4Y2Q5Y2ZlNzgsIDB4MzhmNzgxNjAsIDB4OGMzY2E0Y2IsCisJMHg3ZjU2NmE0ZiwgMHg2NGY3NzgzMywgMHg5NGRlNGY5NCwgMHg4ZTlkN2QwNiwgMHg5ZTYzZjljMywgMHhmOTg5OTg4ZiwKKwkweDJjYzNjMDc5LCAweGU3MmZkYjNkLCAweDVlMjM3YTcxLCAweGVkMWI1NmRjLCAweDJhNWVlOGYzLCAweDI1MTQ3ZWQxLAorCTB4N2JkMGFmMmYsIDB4NGYyZjIwNjgsIDB4ZTAyOTljNzQsIDB4YTI5YTc5ODMsIDB4Njg2Mzc5ZjEsIDB4NTBjZTFkN2EsCisJMHg4YTE2ZThlMiwgMHhmOTA4OTdhZiwgMHhlNWM4YTI1YywgMHg5ZTVjYjUwZSwgMHg3ZTgyM2E0NSwgMHhjODg5M2RjNiwKKwkweDBiNDUzMzU3LCAweDZiZjlhNGViLCAweDczOTQ3YmM0LCAweGYwNjRjZmQzLCAweDBjOTllOTdjLCAweGZlMzg3ZjVlLAorCTB4Y2NjN2RmMmQsIDB4NDU0NjljZmMsIDB4ZjhjMzZiM2UsIDB4MjdmYmNhZmMsIDB4YzMzM2I2OGIsIDB4ZjAyYmYzNGEsCisJMHgxZmYxZjM2OCwgMHg3ZTQzNTk2YywgMHhjY2I3ZjU1MiwgMHgxYmU5MDdjNywgMHhjNjQ5N2JhYSwgMHg3YTg4ZjllZSwKKwkweDQ5YzI1ZmU5LCAweDViMWE2NmVlLCAweDdiOWJkNWZhLCAweDFkY2U1MzhlLCAweDAzN2U2MGFjLCAweDU1MzAwZmFmLAorCTB4NmNiNDc0MWQsIDB4MmIyYzczYTYsIDB4OWFmYmZlMjQsIDB4MWU1MTQ1NWQsIDB4NmJlNjBjNWQsIDB4OGFkYTQ0MGMsCisJMHhlOTczZjMxZiwgMHhmYmU3MDlkZSwgMHhlZTYzMmIzYiwgMHg2MDdlODQ5YiwgMHg0ZjUxYjQ0NSwgMHg3ZjMxZWNlNywKKwkweDQwNTY1NjU0LCAweGM5MTYzNmVmLCAweDA0MjE0ZTc0LCAweDZlYjE5MzgyLCAweDdmZWIwNmI2LCAweDIzYjBmZmJjLAorCTB4YTI0YmIyOGQsIDB4NTFkN2IzZmYsIDB4MDJiYjRkMWYsIDB4NDNmZWE3ZjQsIDB4MGYxMDFkOTMsIDB4ZjcxMDFkNzUsCisJMHg3Y2Y0YzNkOSwgMHg4ZjgyMDNkNywgMHhmZGU3M2YzZCwgMHgzN2Y3Mjg1ZiwgMHhlNTNhZmVmMywgMHhmZmRlMTZmZSwKKwkweGU4YmYzMjk5LCAweDVmZGNkNDZmLCAweDRiZmZiOWE1LCAweDYyN2M0ZmRlLCAweGZhMGY2NGNiLCAweGE1OWNjNWFmLAorCTB4ZTg5NTZlMmIsIDB4MDVjYTM1NzcsIDB4ZjZhYzU1OWYsIDB4NzQyYjdlMTEsIDB4Y2M1Yjc5N2IsIDB4NmI4MmJhN2MsCisJMHg3NGNlMmI4ZiwgMHgyMTFmYTM5NiwgMHhhMTQ2NzU0NywgMHhlNTkwOWU5ZCwgMHg3NWJiNDcyOCwgMHgyYjJiYmE2YiwKKwkweDUzYzVkYTEzLCAweGQ2MTE4ZjI0LCAweGM5N2I4ZWNkLCAweDQ1ZWE0YzZlLCAweGJlMGI5NzFmLCAweGY5ZjFiMjJkLAorCTB4M2NjMzdjMTQsIDB4YmYwYjMzMDMsIDB4ODQ3ZTNjZmQsIDB4NGYzNTQxMmIsIDB4ZjNjMGY1ZmUsIDB4Nzk4ZjViNmIsCisJMHgzY2NmNWQ0NiwgMHhiYWY1MmNiYSwgMHg4OWU4M2YxNCwgMHgzODVkYzc2YywgMHgyZTFlZDY5ZiwgMHgwNjNkYTlmOSwKKwkweDM1ZWM1MGYzLCAweGVhZTFmZGYxLCAweDk4N2M4Yzk2LCAweGJiNzNjOTdmLCAweGVmZDBhYTMzLCAweDFkNDBmZTEyLAorCTB4M2M3Y2MzZGEsIDB4YzNkYjgyZTcsIDB4ZjI0ZmRiOGYsIDB4ZGFiYjcwN2QsIDB4YmYzMDYzOGQsIDB4M2RiMDZkMGYsCisJMHhjZTA1ZTlhYywgMHhkODlkNGM4YSwgMHhkNzkxYjA0NywgMHhhYjNiOWVjNSwgMHhkMTJlN2E0NywgMHgwYzc5OWNiNSwKKwkweDUyYWRmYmVkLCAweDExMjdkZmU4LCAweGU1ZWE5ZGNmLCAweDY2ZTY4ZTc3LCAweDkwZDQzZDcyLCAweGViODM5OGUzLAorCTB4MzQ2NGM5MmMsIDB4ZTg0ZDY0YmUsIDB4OWI3ZjlhNzMsIDB4ODU3MmVkYzksIDB4ODZmMzdiYjAsIDB4ODA2Yzk5NDUsCisJMHhhZWUzYzJlNywgMHhhYWJmYjgzNSwgMHgxZTU2NGI2YSwgMHhhNTY3ODVlNiwgMHhmY2M5MmYxNywgMHgzNzZhYmNkYSwKKwkweGYxYjZhYmNmLCAweGQ1ODU2YWJjLCAweDM3OTQxY2JmLCAweGVkYjMzYTdiLCAweDYzM2E1MzYxLCAweDkxNGRmZmUzLAorCTB4Nzg1OTEwMzMsIDB4ZTk0YzJjYjYsIDB4NzRiOTM5YmYsIDB4NjE3YmNmMTQsIDB4NDcxM2RkN2YsIDB4MzliOTQ2MWUsCisJMHhmZTYwZjA4NCwgMHgwOGUwZjg3YywgMHg1OTFkMGJkNCwgMHhlODBiM2E5MSwgMHg3MzY5NTk4YiwgMHhhY2ZlNDY5ZSwKKwkweGRhMDNmZTFjLCAweDE2MTQ1MzJmLCAweGNmMGU3ZmQ1LCAweGNjNWYxM2NmLCAweDQyYWU3MzRhLCAweGU2M2M3MTM4LAorCTB4NWY0NjVjNDMsIDB4MGViMDVkYzIsIDB4ZWQzMmFiZDcsIDB4ODkwZDc1NTMsIDB4NGVmYzg1NzQsIDB4ZTllMWUwNTksCisJMHhlYmUxMGI0YywgMHhmZDE5OTAxMCwgMHhlNTBlMDUxNCwgMHgyZmU3ZTBmZCwgMHg5ZDdjYzNmNywgMHhlMjg2NTNhYiwKKwkweGI0YmU0ZTc3LCAweDg1OTk2ZGEyLCAweGQyZmJmNzgxLCAweGJmMDQ4ZjVjLCAweGZhYzc1M2JmLCAweDRkZjFhODYzLAorCTB4YzA1ODc4ZTEsIDB4MDZlOTBkYjEsIDB4Y2M5NDczYWQsIDB4ZGVmMTQxMWMsIDB4NTU0OGQyZDQsIDB4Mzg4NGRhN2YsCisJMHhkN2NlMDhlNiwgMHhmNTU1NGI0ZSwgMHhhYWZhMmJjYiwgMHg3ZjNkZGZjNiwgMHhjNGZlZWE5MCwgMHg3ZDQxN2YzMCwKKwkweGJiZGJiZjkwLCAweGU3ZTFlNDlmLCAweDQ1NDU0NThmLCAweGJmYmNiZWUwLCAweDM2ZjY3ZGI3LCAweGQ3NzQ1ZWZlLAorCTB4N2QxZGIyNTMsIDB4YjY3YjQ1ZGEsIDB4MDM0NzhkYmQsIDB4YjM5ZmM0NWYsIDB4OGRhNDNjYTAsIDB4MWQxZjY2ZjIsCisJMHhkNzNmMTk5MiwgMHhhZTBmYTFjMiwgMHhmZTYzOWQwZiwgMHgxMDc3ZjE0NywgMHgyOTA3YWI3YSwgMHhjYjEyZWVmMSwKKwkweDgwMWRmYTdlLCAweDNhMGY1ZDFiLCAweDQxZWEyOTk4LCAweGVkMGYyYzc5LCAweGI3ZmFjNWUxLCAweDY3NTc2ZjI4LAorCTB4YjczYmViZTYsIDB4OGI0ZjlmOWIsIDB4MDU3ZjUzZTcsIDB4M2UwNzdlZmMsIDB4NjVlMWZlODgsIDB4NGJiNWU1MGYsCisJMHhmZDUzNGY1YSwgMHhlYjkzMmFhYywgMHhhNWI0YmFlOSwgMHhkZDhiZjQ3YSwgMHgxODFkYTJkMCwgMHgwNjJhZmEwMywKKwkweGNlZGZjNWY4LCAweDdkYzJlZjA2LCAweGRjNTE1OTZjLCAweDk1M2NiZjVmLCAweDJiZTQzOGIxLCAweDk0MzllNzllLAorCTB4NTNiZjRiMTgsIDB4OGNhOWE0YmMsIDB4OGU1ZGQ3YWUsIDB4OTc1ZmY5YTAsIDB4Y2Q0ZmI0ZmQsIDB4NzU0NDkyZjMsCisJMHg5NWE5ODk4OCwgMHhjNmJmNzFhYiwgMHhlZTRmMDhhMSwgMHhjNGVmNzgzMiwgMHg4NjUxZGRkZiwgMHhjNWRiYWI3OCwKKwkweDk0NGM5MWY3LCAweDBhNTgyOGRmLCAweDE5NzM0ZDZkLCAweDY2NTEzZjNkLCAweDE3ZjAyNDg3LCAweGZiNzA5N2M2LAorCTB4YmU2ZDExM2IsIDB4NDZlMGY3MTUsIDB4MmJiYjQ3YWQsIDB4N2ZmZDdkMWIsIDB4MThjNjdhODUsIDB4ZTYyNjdhNDUsCisJMHg3ZWY0ZGRmMiwgMHgzZDEzNjVmNywgMHg4OGY0MjVkZiwgMHgzNWMzODNhMSwgMHhhZTkzYjJmYSwgMHg1OWYwZmMyYiwKKwkweDc3ZWFiNjY2LCAweDRmMDkwYzdmLCAweDkxZjdmMWU5LCAweGM2OGMxZDBkLCAweDkwM2NiYjhmLCAweGFmYmQ2NTVhLAorCTB4ZmE3N2Y4MGUsIDB4YzI0MzViNWQsIDB4ZmE1ZmI0YTcsIDB4NDJjOTc4ZDUsIDB4MGY0Njg4NmUsIDB4MWUxZmFhNWYsCisJMHhhOWU4NDJjMywgMHhmMTExZWZhYiwgMHg1ZmVhMTg0OCwgMHg3MmNjYmY2OCwgMHgzMDEyZGE0NCwgMHg2M2QwZTk5ZSwKKwkweDRkOTk4ODVkLCAweGZmZTQ0ZmI0LCAweDA1MzhjZDAwLCAweDAwODAwMDc2LCAweDAwMDAwMDAwLCAweDAwMDg4YjFmLAorCTB4MDAwMDAwMDAsIDB4N2RjNWZmMDAsIDB4ZDU1NDc4MGIsIDB4Mzk5ZWYwYjUsIDB4NjY0OTFlNjcsIDB4OTkyMTI3MjYsCisJMHg0Y2UyMTAyNCwgMHhlMDEwMjQ1ZSwgMHgwZjA4MDQyNCwgMHg4NjAyNDBjYiwgMHgwODQwMTNhNywgMHhiYzgwZTgzNCwKKwkweDJiMTAxMDI1LCAweDAzMzdlOTVlLCAweDYwZDIyMDQ5LCAweDQ1NDA1MjgzLCAweDY4YjA1MDNiLCAweGFhZjhmZjZkLAorCTB4MDEzMWY1YTksIDB4ZTk0YTBmZTQsIDB4N2FiN2JkNjAsIDB4NTIwMzZiNmYsIDB4ZTA4ZDQ1MDQsIDB4YjE2ZGNmZWQsCisJMHhiZGFkNmJmZSwgMHgzMjY3MzI0ZiwgMHhmZGVkZWQ0MSwgMHhiZTNlZjlmZiwgMHgzZWY2NzU5ZCwgMHg3YWY2YjFmYiwKKwkweGIzMGZiNWVmLCAweGNiNWQ4YWNhLCAweDBhZmIxODhiLCAweDkzMTgxMzdmLCAweGJiMzAyZThlLCAweGRhNjYzMjg2LAorCTB4YjFlY2M2N2QsIDB4YjI4MTY2MzEsIDB4OTZiZWEyM2MsIDB4MDQ2YjRmMzEsIDB4MmU0OTk1YWMsIDB4MTkyMzYzMjMsCisJMHgzOTUwYjZmYywgMHhmYmMxZGIwYiwgMHg2MzFmNzdjYywgMHg1NzZlYzY0ZSwgMHg0YTZkZmYxOCwgMHhiMTgzMmM2NSwKKwkweGVkMDRkZmJmLCAweDBmZGU3YjUzLCAweDg1MmVhMDFiLCAweDk2OGJjMGIxLCAweGJiZjg2MWUwLCAweGM3MmZiNjVmLAorCTB4ODllMWY1MDUsIDB4ZWMzOWZhYWMsIDB4NTU2NzBlNDcsIDB4Y2RkZmExZDksIDB4ZGExNWIyOWQsIDB4Mzk1NTliMzEsCisJMHg5ZmY4MDZlYywgMHg2ZjgyZmYzNCwgMHg4YmE3N2YzOSwgMHgxMmI3ZmZjZiwgMHhmZGZkODRkYiwgMHhiMDg0YzI3NiwKKwkweDdlZDVlNjA3LCAweDkyMTE4OGZmLCAweDMxZGZhN2FiLCAweDYzYjUzMzJlLCAweDU2NzVkNzRhLCAweGQ3YmFkOGNhLAorCTB4NjAzYjVjMTIsIDB4YzFmYjMzN2QsIDB4NWViYjgwMzMsIDB4YmEwZjA0YjUsIDB4YTQzMzM5ZTksIDB4NjgzOTY5NjAsCisJMHg4ZTc1ZmE4MCwgMHg4YzJmN2NhZSwgMHg1YzdhZmU1ZiwgMHg3ZTgzMGQ4OCwgMHgxOTkzOGY1ZiwgMHhhZTUyZjM4YywKKwkweGE1ZTIwYzZmLCAweDE1NDFmNWZjLCAweGYyNGMwNzA2LCAweGEwY2M4YjE1LCAweDNjOWJhNGRkLCAweDVmNzlmMTYzLAorCTB4YWY1ZThkZjMsIDB4ZjljNjAyNTYsIDB4MThhN2NlZmMsIDB4YWRiYmJkZjEsIDB4NTUyOWI1ZmMsIDB4MjI2MjQwODYsCisJMHhjOTU0ZDc3NCwgMHgxNmM2MDhkOCwgMHg5YjBkOWI1ZiwgMHg2YjkyZDhjMiwgMHg1YWZiMDRmMSwgMHg3NWFiZjNmOCwKKwkweGRmNzA1MzY5LCAweDQ5ODY2ZWFlLCAweDZjOTYzYWMzLCAweDAxN2QwYzM2LCAweDc2NWNjNWQ2LCAweDMwZjAwZjM1LAorCTB4YWRhMmMwNzMsIDB4NTMzOWU2MGMsIDB4Njc3YWQyMzIsIDB4ZDYwYTQ5MGUsIDB4NzFkYmQzNDMsIDB4NzNlMGM3YmYsCisJMHg2NjQ4NjFkNiwgMHgzZGI5N2E2YywgMHhkNmYxODQ2MCwgMHhkZmE4NTM1YywgMHgxYTJlNmJkYSwgMHg2NGI1ZWQ2ZiwKKwkweGIzNWRkNzgyLCAweGRhZTRiOTUyLCAweGI5NmU3YTYwLCAweDgwMWU2NDY2LCAweDFjMDM1ZTk3LCAweGRiMjczYzAwLAorCTB4M2ZkNzBhYjcsIDB4NGE5NmZlYjMsIDB4MzViN2NmMWMsIDB4OGI2N2Q0YTMsIDB4ODJiMzE3YTQsIDB4OTJmNDA1NzQsCisJMHhiM2Q2ZGNiZSwgMHgwNWY2ZmFmZSwgMHgyZmU4NTUzMCwgMHhiMmY0NGJjNSwgMHg4OGYyY2ExNCwgMHgwZTgyNjVmYSwKKwkweDU2YjZmMWEyLCAweGE1MzdmZmVjLCAweDVmNDExYTk3LCAweDNjYTE2YzRiLCAweDU0YzFlMDIzLCAweDg1NmVhNzE3LAorCTB4NzE0OTVjZjksIDB4NmNiYzQxNGQsIDB4NmZlMzgwNzgsIDB4NmU1YmM5ODMsIDB4Nzg2ZWY5ODcsIDB4Y2VjMmEwYzQsCisJMHhkOTQ3M2JiMCwgMHgzMmYwMGNhZCwgMHhiMzNhZGRlYSwgMHgxNzZlODIyZiwgMHg1Y2M2MWI1YywgMHhkNzM5ZmViMCwKKwkweDdkYmNhOTcyLCAweGFlMzM2ZmEwLCAweDc5YjVmMTdmLCAweGE4YzM0ZjAyLCAweDIzNjRkNjY0LCAweDQ2ZDhjNTFiLAorCTB4NGUxNzU3ZGMsIDB4YjNlZjk5MjgsIDB4NzUxN2RmOTgsIDB4ODVlZWQzYTMsIDB4NjUzOGJmZjEsIDB4Yjg4YmZhYTIsCisJMHg1NTMwMjUyZiwgMHg5YzA5ZTA0ZiwgMHg1MTY4Mjk5NywgMHgyZWJjYzAwZiwgMHg4MTQwNTg5YSwgMHg5ZjczYjhhZCwKKwkweGRmMDAwNTkxLCAweDQxZjRhMTRiLCAweGIwN2I1ZDA5LCAweDI5MWRlNTlkLCAweDkyZWQ4ZWQ4LCAweDA0YTkyNzk4LAorCTB4MmRlYjA5ZjEsIDB4MDU3YzYzZTAsIDB4YzIxOTJlZmYsIDB4ZmQ0MmY3ZjksIDB4OTY1YjMzMjcsIDB4ODFlMDczMWIsCisJMHg4NjU1MmE3NCwgMHg5Y2YyN2U3NSwgMHhiZTc4MjRjNCwgMHg0ZTFiZmQ2YSwgMHg5NWFiMWU1OCwgMHg1MDI5NjQwZSwKKwkweGNjMTBkMWJmLCAweDNkOGM0OTM3LCAweGUyZjZmYjIyLCAweGQ4NWEzZWJhLCAweGQwNjU2ZmZhLCAweGYzY2I3Y2VlLAorCTB4MGQ1N2RjMGUsIDB4Mjg3MmFkYWYsIDB4MDU2OWZiMGYsIDB4ZWU2MDA2N2MsIDB4NjU1MmNkYWQsIDB4MjZjMzQ2ZDAsCisJMHhhMWVkMGQ1NCwgMHhhMzllOGQ2ZiwgMHhiNWY1N2NlOSwgMHhhYmE3YTI2YywgMHgyZmExOTY3NSwgMHhkZDAzMWQyMCwKKwkweDQxNWFmM2UyLCAweGZkMjE3N2VmLCAweGFjZWE2OTQzLCAweGU5YzhmNDE0LCAweDVhZWJhMzVmLCAweDVhYWRjYjk5LAorCTB4MDAzMDYyNWIsIDB4YmZmOTliZjMsIDB4ZjUwMGZlODAsIDB4ZjJhODVmNmIsIDB4MmJiYTQ0NGUsIDB4NTA3OWE4MzAsCisJMHgzMmZjMTFhYywgMHhlMGY4M2E1MywgMHhjZjgzZTQ1OCwgMHg3ODdhZDQ1MiwgMHg1NzlhZjkzZSwgMHhjMWYzZDczYywKKwkweGM2NzRmZTRiLCAweGJjNGIxOWYyLCAweGQ1YzY5MGI2LCAweGU4MjJkZmU4LCAweGRmZjQ4NGRkLCAweDJkODNkZThmLAorCTB4ZDlmZmZlMDUsIDB4NzdmZjllZGYsIDB4ZGI5MGYzZjgsIDB4NmJlMjE2ZjcsIDB4N2ZjYTFjOWEsIDB4M2I0YjA1MmMsCisJMHg5NGU0ZDFkMSwgMHhlN2U5MTkyYSwgMHhiM2NmY2I5YiwgMHhkNTllN2U0MiwgMHg3ZGI1Y2ZjOSwgMHhiN2YwY2ZjOCwKKwkweDA0ZDc4N2U0LCAweGQ4NWE1NDNmLCAweDJlMjJkZTFkLCAweDdiZGI2N2RmLCAweDNkOTdlYmZhLCAweGVhMGI5Y2U5LAorCTB4NzgxOTc0M2YsIDB4ZjM0M2ZmN2YsIDB4Y2E1YmYwZmUsIDB4ODZmZDdmZmQsIDB4NDJhZmZmNzIsIDB4NzljYjQ3ZWUsCisJMHg5Y2ExZmQwNiwgMHhjMmQ1ZWNmZiwgMHhmNzgxZWEyMCwgMHhkNDA1ZTgxOSwgMHhiODI0YWY3YiwgMHg0MDNkMGIwZSwKKwkweDMxM2UyMjdhLCAweGQwM2QyMzc4LCAweDVmZTc3YjkwLCAweDdmMDNkMGZiLCAweGEzZmRiYzQzLCAweDNmYTM0MDdhLAorCTB4ZmUzNDVmOGQsIDB4OWEyMWY4ZDAsIDB4OTg3ZTM0N2YsIDB4ZjEzNTAzZmUsIDB4NDAxZmRjNWUsIDB4MWZlNDYxY2MsCisJMHhhZTBjZjAzOSwgMHg1MDk1ZDZhMywgMHhmMWE5N2M4YywgMHgwYzE3ZGFkMSwgMHhmNGJkNjdjNCwgMHgxZTliZTA4MywKKwkweDBiZWJkMTNlLCAweDNlMzQxZjhkLCAweDU2YTZmOGQxLCAweDI4YjJjM2YwLCAweGI1MjYzODdlLCAweGRlMTYzYzNlLAorCTB4MTVmNmVlZGIsIDB4Zjg3YjUzYjksIDB4ZDE3M2NkNjMsIDB4N2E0ZmExN2EsIDB4Y2I0ZjQ4NjIsIDB4ZDIxOGVhNTIsCisJMHg5MTk0MmQ1MywgMHg4M2U5NjRmNCwgMHhkZmRkOGE5ZSwgMHgxMjZlOWU4ZSwgMHg5ZThlYmZlZCwgMHg2YTY2ZGMyYSwKKwkweDRmNDgzZmY3LCAweDMxOTFlZTE1LCAweGZiYjI2OWU5LCAweDVjNTc2ODlmLCAweGE5N2RmYmFkLCAweGI1NzNlNjBiLAorCTB4YmJhY2U0MTQsIDB4YmZhNmRlODcsIDB4OTBkZGI4YzUsIDB4N2U5MTU3NjMsIDB4M2FmOWUyM2EsIDB4ODMwM2NjM2IsCisJMHgyYmVlZDhmNSwgMHhkNDc4ODc1NiwgMHg2N2RiNTJlOCwgMHg4NjU4MGVjZCwgMHhiNmU1MDA3NCwgMHg5YzJhZWY2YywKKwkweGEwN2M0NzZmLCAweDkzMzdmZDY4LCAweDk2Y2ZiNDc3LCAweDUzZDliMDk0LCAweGQ2MWRmYjg0LCAweGVjYmVmZmU5LAorCTB4NzJkZmI1YzUsIDB4ZGZkYzZiOWYsIDB4ZGRmODZlNGMsIDB4ZDE3Yjc0ZmYsIDB4MjcyZDhlZWYsIDB4N2Q5ZGZmMDIsCisJMHg3ZjBlNTk5ZCwgMHg5NGYwNDdmNiwgMHhmNjFlMzNkNywgMHg2NjAyODdlNywgMHhjYmYyMmY2MSwgMHhmZWFkMzJiYywKKwkweDE5MWUyZDM3LCAweDNkZmMwM2U1LCAweDMwZjA0Njk2LCAweGMzODFlMTJiLCAweDBhZTFkMzgxLCAweDg3ZjRlNzk4LAorCTB4NTgwM2ViYmIsIDB4YTI3Yzc5M2YsIDB4MGM3OThmZTgsIDB4OGZmZGE3YWMsIDB4NmUxNWJjMGYsIDB4YzJkZWZkMjYsCisJMHg5NGViZWZmMSwgMHhlMDIzNDNiZCwgMHgxMWVkODA1MiwgMHhiYzE0NTk3MCwgMHhjODc3Yjc5ZiwgMHg3ZWExNGM5ZCwKKwkweGEwYWY5YzgyLCAweGMyMDk0MzdmLCAweDdlODI3ZjVhLCAweDU1ZjhlNzk5LCAweGM1MmNmM2MwLCAweDNlYzA3NmMwLAorCTB4ZjAzOTRiYWQsIDB4NmI5NDU1YzYsIDB4NzA2NjA2NmQsIDB4ZmQ4MWUwNDUsIDB4MDRjOWViZGUsIDB4MjBjNTc4YmEsCisJMHg3YjA4ZmZlMCwgMHhmODViMTk3MiwgMHhiODRmODcwMiwgMHhjODEyZDRmZiwgMHhiZTAyZmQxNSwgMHg5Yjc0MDhkNywKKwkweDA5MWUwZDVhLCAweDY2NTM1YmZhLCAweDdiYmI2NjA4LCAweDViODRmYmUzLCAweDdjZGFhYmQzLCAweGRmZWE1NTQwLAorCTB4NmY5NGU2NjcsIDB4NmQxYTNlZjcsIDB4YmQzNjdlZjQsIDB4OGI3Y2IyMWYsIDB4Njc4ZmU3ZjEsIDB4N2IwYzYwOWUsCisJMHgxZjgyMGZmOCwgMHg2MzEzNGEyYSwgMHg0Yjc3OWZkNiwgMHgwMWQ3ZmYxYywgMHg0Nzg3YzZkNiwgMHhjMWZkNjA3MywKKwkweDU5NzVmYzE4LCAweDFhMzYxN2Y0LCAweGQ2ZmYzZTA1LCAweDM2MTY3NDgyLCAweDZiZmVmODZiLCAweDMyN2JlMjBiLAorCTB4ODI3NGRkNjMsIDB4MTNlMzAzNzQsIDB4N2ZkYzdmZmMsIDB4N2NjOTM2ZjUsIDB4N2MyODllYjksIDB4NmZiZDY4ZGQsCisJMHgyMDU3YzBjNiwgMHgzNzJjYmY2YSwgMHg2ZWU5ZjdjMCwgMHhiZWYzZDBiOSwgMHhlODdlZmY0YiwgMHg0ZWY1ZmI0NiwKKwkweGRkMDVmMWFmLCAweGQ4ZThkNGFlLCAweDQ0ZjdhM2EzLCAweDk5ZjQ0YmQ5LCAweDAyNTA2Mjk4LCAweGJkNmI4ZjQwLAorCTB4MmZlOGNkNzEsIDB4YTlhN2YwZjQsIDB4OGUxNGYxMGEsIDB4ODdhOWUzZDMsIDB4MTU1NWNjZmYsIDB4NDQ4ZmIyMzYsCisJMHhlNDJlZWI3YiwgMHhiYmIxYWY1ZiwgMHg2ZWM3ZTczZCwgMHgwMjllNjZiYSwgMHhkMjlhMmJjMCwgMHg0MWQyN2VmOCwKKwkweDhkODBhZWNiLCAweDA5ZWE4MmU4LCAweDc3OTg4ZGNlLCAweDQ2YjYzZjM0LCAweGY4YTNlM2MxLCAweGM5MWZmMDU3LAorCTB4ODAwN2Q0MGYsIDB4NmY5NDNjYTcsIDB4YWVjZDY3MjksIDB4YjM1MTNhMDgsIDB4MzEzZTllMzksIDB4YTc5NDZhYjAsCisJMHg4ZWRjNDllMSwgMHhkMmYzNjcwYywgMHhmYWEwNmQ5YiwgMHgxZmJlNmNiMiwgMHhlMzg2NTExZSwgMHhhN2EwZjAyMywKKwkweDJiZmExMDlmLCAweDNjMjZlYjExLCAweGQ2ZDE0ODJkLCAweDAzMzU1MDVkLCAweGU2NGUxNWQ2LCAweDczYjJkM2Y1LAorCTB4N2IzMjA1NzcsIDB4NjZmZWU4ZTAsIDB4MDU1NDE3NjQsIDB4Y2ZmYjIyOGEsIDB4NWQ3ODgzM2YsIDB4Y2RlNmYwMjAsCisJMHhlYjA2NzQxZSwgMHg0YjUwNzkzNSwgMHgxMWY0NDI4NCwgMHg4YjUwNzk0MCwgMHg0ZGU4NjFmNCwgMHhiZGQ5ZTkxZiwKKwkweGY1MTAzM2U4LCAweDgzNzRjN2JlLCAweGJmN2FiM2Y3LCAweDlmN2E4OWVmLCAweGNkYmU1Mjk5LCAweDY2ZGY2MmZiLAorCTB4NjU2YmVkNDQsIDB4NDQ1NmJlZDQsIDB4MWMxYTM1YzEsIDB4NGQ1ZmM5ZDQsIDB4ZGI2OTJmMmUsIDB4Nzk4NGU4ZDUsCisJMHhlNDA0NzVkYywgMHhlN2E0OGIyYywgMHg3N2NmNDQ1MSwgMHg4ZWZkMWEyOSwgMHhiYjdhODMzZSwgMHgwOGNiOWU4NywKKwkweGY2MmFkZDllLCAweDE3NjYzMDJkLCAweDk0MmE5ZmVhLCAweGUwN2I2M2MzLCAweDA4ODcyODM5LCAweDE5ZTU1YjFlLAorCTB4YzZhZmE5MWUsIDB4M2RiOTQyZWQsIDB4M2Y2YjQ5YmYsIDB4NmMyZmRhOWUsIDB4OTliYmZhZDAsIDB4NjQ3ZGI1ZWEsCisJMHhkMTU0ZWY4MSwgMHhjM2I5MGFiZSwgMHg2MGNlMTMwMiwgMHhmODU3ZWFmZCwgMHgzZDA3ZjVmYiwgMHgwZmM4NmU2NywKKwkweGQ5Nzg1MTJkLCAweGEyMDcwNTFmLCAweDFhZmVlZmRhLCAweGY1MTBkNmZkLCAweGZhYThlNmZlLCAweDVmNzgyOGU2LAorCTB4N2ZhNGRjMTQsIDB4MDM1MmYxN2YsIDB4YTA2MmUxZjEsIDB4Njg4OGRjMDcsIDB4OGZhNjhjYmUsIDB4ZWRiYmIzODcsCisJMHg2ZTdkNmU5YywgMHhhNzdkOTFiMCwgMHhmNWU5YWJlMywgMHhlMGZjN2UxYywgMHhhMmE2YWFjYywgMHhkNmZiMzgwOCwKKwkweGRmZjcwMGFhLCAweDI2OTc0ODBkLCAweDczMjA3ZmM2LCAweDgzZDAxMjAzLCAweGY5YjkwZmE5LCAweGIyZThiZTgzLAorCTB4ZjNkZjVhMjAsIDB4OWZlMTNmZmEsIDB4MzMyZjY4MTksIDB4NGM3MjVkOWQsIDB4OTJlZGMzZDIsIDB4Njc0NWVmMzYsCisJMHg0M2UxMTYzNiwgMHg0MmE5YWUwZCwgMHg1ZWZhN2E3ZiwgMHg5ZmMwYmFmZCwgMHhhYWMyZjAxNSwgMHhiYjA4Y2M4YSwKKwkweGNhYTBiMDI4LCAweGFkNGViMTEzLCAweGJmMmY5NGZkLCAweGU3YmM3MDkyLCAweDFkNTQxN2IzLCAweDQ5OWFmYTgyLAorCTB4OTgzYWJjYTEsIDB4MmYzMjRkNjcsIDB4YTg0YTVmNDEsIDB4Zjg4OWQ3YWYsIDB4MjU1Nzk0Y2QsIDB4OWFjYmVhMmYsCisJMHg4NmRlNTBmOCwgMHhiMjc1ODhhMiwgMHg2NzVjN2NkNiwgMHhlZDEyZmRmYiwgMHhmNjFlYTA0ZiwgMHg5OGI0ZjAwNywKKwkweDhmMGEyMzgxLCAweDMzMWU2NGVlLCAweGM0ZmE4MWNiLCAweGMyNGY0ZGM0LCAweDk3ZWVjNzdiLCAweDdlOWVhMTM2LAorCTB4MjczZjUzN2YsIDB4MzljOTQzZmEsIDB4OTYzY2VlZGMsIDB4MTk3MzkzNzgsIDB4NzcwOWVkYzAsIDB4ZGY2ZGJjOTAsCisJMHhhM2NhOTkzZSwgMHg5NzViNjc5MiwgMHhkOWRiZDhjMiwgMHg4NTZjYWFhYiwgMHg3ODQ4OWY1OCwgMHg2OTcwN2QzYSwKKwkweGVmYTAxNmQ1LCAweDdhMmVkOTMzLCAweDM4YWM5N2RmLCAweGRlZGVkMGRiLCAweDVkODc2MjYxLCAweGUyOTUyZjM4LAorCTB4NWE3NzhiNDgsIDB4N2NlMDc3OGEsIDB4YTI3MTBjYjYsIDB4NDdlNGI5ZmQsIDB4YTAzMjUzNTUsIDB4OTM0NjkyZGQsCisJMHhhNzU0NzY4YSwgMHhmOWMyYzk1MSwgMHgzNjRjNzZmOSwgMHgwNmQyZmQ2MywgMHhhMTZlMDY1MSwgMHhmZmJmZjVmMiwKKwkweGVkMDFkZWE0LCAweGE4MzcxZWJiLCAweGNkZmRhMTA3LCAweDM1YmViNDVmLCAweDRkMTVlMDBjLCAweGQxNmUyYTM5LAorCTB4MjgwN2UwNmIsIDB4N2RiOWNlMzAsIDB4ZDAxMjgyODMsIDB4NzU3MTA3ZTUsIDB4ZjZmMTY2MjcsIDB4YjhhZmRiMGMsCisJMHhhYjNkM2FlZSwgMHhjYTRiZGIxNCwgMHgwMTdmNjg1NiwgMHg3Y2ZkYTM5ZSwgMHhhMGU5MDFlMSwgMHhiMGU1ZTcwMSwKKwkweDQ5NjAxYmM3LCAweDE0NjRiZTE3LCAweDY4ZDBiOWNmLCAweGVlN2M2MjA5LCAweGZiNzdjZDljLCAweDlmNjcxYzNlLAorCTB4NzY3ZDJkMDksIDB4MTg3MmUwYzEsIDB4MWQ5ZjBmMDAsIDB4M2QyYWI3YmMsIDB4YzQ1YjlmMDMsIDB4YjQ5YmRlZmUsCisJMHhkOGIwZjAxOCwgMHhhNDNmNGRkOCwgMHg3MTI3OTY0ZiwgMHg3YmVjYjNmOCwgMHgzYWMzMGVhYiwgMHg4ODMyM2MyZSwKKwkweDcyMmI1N2UyLCAweDgwZDk1ZDNjLCAweGNmNWNjMmFmLCAweDEwN2U1OGU3LCAweGViZDZmNWM3LCAweDQwZWU5NzdmLAorCTB4OTdkN2ZlM2IsIDB4YmU5MTM4OTcsIDB4ZDZmNDI2ZmUsIDB4Mzg5NmQ3NmIsIDB4NTVkODQ0OTcsIDB4ODk5MTNmY2IsCisJMHhiYjM3NWUwZSwgMHg1ZjdjZTIzNiwgMHg0MDY4MWY4ZiwgMHhhMGU4MWIzZiwgMHg5N2M5YzYxZiwgMHhlODA1YmYwYSwKKwkweDMxZjNkMzc5LCAweGNkN2ZhYmVjLCAweGRhYmY2ODk2LCAweGRlM2E5MDdmLCAweDZkZWJhM2E1LCAweGRmYzhhN2E0LAorCTB4OTNmNmQ4MDAsIDB4YTAwMmJiYWQsIDB4MzY1YmNmZGIsIDB4OGU1MDBmYjEsIDB4NzE0N2VlNmQsIDB4Yzg0Y2E1ZGIsCisJMHg4MmUyNjc4MSwgMHhmNGIxNTdlOCwgMHhmOGM4ZmNkNiwgMHg4YTFmMzc0ZCwgMHhkODBjN2ZmNiwgMHg4NDdmYWYwOSwKKwkweGZkZjdlOGY2LCAweDc2MWZmMDMxLCAweDdlZGRlYjY2LCAweDQwMWVjMzg1LCAweGJiNDNlMmUzLCAweDc4ZmRjNjVkLAorCTB4Yjg1ZmY2NWYsIDB4ZmU1YmRlMGYsIDB4YzBmNDg5YjgsIDB4Mzc1M2M3ZjIsIDB4NDBiOGUxNzcsIDB4OGI1NzE4MzcsCisJMHgxYzgyZDc1ZSwgMHhmNDYzOGYxMywgMHg4NzgxOTdjNSwgMHhmZTc0MmFhYiwgMHhiZjI0YzNjYSwgMHhmY2NiZTJmYiwKKwkweDc1NTQzYzlmLCAweDVmMzdkNmM4LCAweDdjYjg1MGFlLCAweGM5YjhmMjlhLCAweDYyYjRmYzhiLCAweGEwNjY1ZGE0LAorCTB4ZmUzZDI2NGYsIDB4Y2ZjNDYxYzYsIDB4MjU3MWY1OGEsIDB4OGFmODk4MTYsIDB4NWZiNDJkYzcsIDB4NDA3Yjc2OWQsCisJMHhjMzlmN2E4MSwgMHg1OTQxMjcyZSwgMHhkNmU1YzM5YSwgMHhlZDE3MWNiYywgMHg2NGM0Yjk3MywgMHgwZDk1MDk2YiwKKwkweDgyYmQ2ZjE4LCAweDJmODAwZGUxLCAweGNmNzg3YTZkLCAweDIzZTcxODY4LCAweDFhMzc5YzE2LCAweGMzYzU3N2YwLAorCTB4MGJjYWY0ZTksIDB4OTkxZGM1MTIsIDB4ODI2NzkxZWMsIDB4YjhjOTVjYmMsIDB4ZjkzZGE4OWMsIDB4ZmMyMjc5YmMsCisJMHhjNTZlYjJiOSwgMHg1NzA3ZjQwYywgMHgzYWU3NGQwNSwgMHhmMThlMGY4NSwgMHhmOWFjNzVkOCwgMHhlYTE4Njk3MywKKwkweGEyNzNmZDU3LCAweGYzZDYyNzA0LCAweDQ5ZDYxYWRmLCAweDM1YjZhMzcyLCAweGRhZWJmYmY2LCAweGU0NjdjZmY0LAorCTB4MGMyZTUzZDgsIDB4MmU0MzE4NjEsIDB4MmJiMTBjMDEsIDB4MDY3Y2E2NzUsIDB4MDM2MTVjNGIsIDB4OTZmNTgyZmUsCisJMHhiY2QwMzdlZiwgMHg4MjkyNmM1NywgMHg3OTc3OTgxNiwgMHgzZTJmMWUzZiwgMHgzN2ZkODdlZiwgMHgwYTAzYmFkMywKKwkweDczNzYyYmMwLCAweDE5ODJiM2JkLCAweGYzZjg1NjgyLCAweDI5ZWJmZDk2LCAweGM4NGM3OTdlLCAweGU2MDZjNTk5LAorCTB4MjBmZWZhNDUsIDB4M2Y0MmNkNGUsIDB4NzFlM2Y5N2YsIDB4NGYxNWRmODQsIDB4NDdiN2ZhYWMsIDB4MmRjZWJkZTAsCisJMHhmZDIyNTMzMywgMHgxNzQ4MjVlYSwgMHg5YWNjYmYxYywgMHg4N2NmZDNkYywgMHg4NTlmYmU1YiwgMHg2M2ZlNWZmNCwKKwkweDNkNjE4ZmYwLCAweDJmZDg5MjJiLCAweGJmNzFiODE2LCAweGI2NWNiMjMyLCAweGI2MmI3NjllLCAweGRiY2Y5ZmRlLAorCTB4N2UwZDdmODEsIDB4MjQwN2UyZjQsIDB4ZDE3YjA3NWEsIDB4NzgxMDdhNDIsIDB4ZGJjNDg5NWQsIDB4NjY5Mzg2ZDIsCisJMHg1YmZmMTE3MywgMHhkYWZiMGE3MSwgMHgzOWJjNzI4NSwgMHhlN2ZiYzEyYywgMHgxMWIyNWVhMCwgMHgxMTlkMDJmZSwKKwkweGIwM2JmMjcxLCAweDIzOTIwY2FmLCAweDhkNWY1YzNlLCAweDZjYzc3MGQxLCAweDhjY2JhN2VhLCAweDg3MzNiZDdjLAorCTB4NDQxYjQzYzcsIDB4YmQ0YjM4YjksIDB4MGZjZmUyOWQsIDB4NmVhZGQ0NWEsIDB4NGEzNDhmZGUsIDB4YmJmYzAzY2MsCisJMHgzOTc4NjM1YSwgMHgyZmQ5ODFjNiwgMHg1OTU3MTQyZCwgMHg4OWU3MTBkNywgMHhlMjNmOTA3MywgMHg1ZGZhMGU3OSwKKwkweDljZDkzMzI3LCAweGZhNzJmZDhjLCAweDcyZTJlMzViLCAweDJiYmY5ZTAzLCAweDNiNWFmM2MzLCAweDQ5YjU4Yjk3LAorCTB4OTdhZTZmODAsIDB4ZmZlODQ2M2QsIDB4ODcyYmZjMzMsIDB4YWMzMTk3ZjcsIDB4ZjFlZWZkZTcsIDB4ODVmNTNkMGQsCisJMHhmZDVmMTBjMywgMHgzY2UzNTVlNiwgMHhkZjExMmU3ZSwgMHgyYzFlMzIwMiwgMHhlN2VlZmI0MywgMHhhYmY0MDhkMiwKKwkweDZjNzAzZjE3LCAweGJiZDljYTBhLCAweGYwNTYyZDllLCAweGY4YmZjNWQ1LCAweGJiODllOTFkLCAweGEyNzczZWM0LAorCTB4MDM3YThmOWQsIDB4N2NhMTY3ZTAsIDB4NDVjYjg3MzIsIDB4NDJlM2M0OWYsIDB4Njg3YzBhNGYsIDB4ZDdkNWFkZmIsCisJMHhmMWUyNjAzZSwgMHgyOGU3OTA3OSwgMHhmY2I3NmE0MCwgMHhiNWFkZmE5ZSwgMHg2NzI4OWQ4NywgMHg4ZDM0NWY2YiwKKwkweDk0ZmM3OTQyLCAweDJkOTJmZjk4LCAweDBiYmZjNzAzLCAweDk0YzRiM2Y0LCAweDVhNWVhMGE4LCAweDQ2Njk5ODEzLAorCTB4ODE4YjRkNzgsIDB4NTJmNzllZTAsIDB4M2YxZTkwYjMsIDB4ODFjOTc4NmUsIDB4NWM0MWYyNzQsIDB4NGZmNTBmMjgsCisJMHhmNTM4ZmFkNywgMHhlMTQwMmUyMCwgMHgxYjhmYjk3MSwgMHhmYzYyMGVmMiwgMHhiNjEyYTk2NiwgMHhlOTdlYTAxYiwKKwkweDk0NjQ5Y2M2LCAweDIxMmJlZmQzLCAweGRmYmZkNjMzLCAweGVjMjIzNmVhLCAweDA4ZjE5NDUxLCAweDA0ZTFlNDdiLAorCTB4YWIyMjBjN2YsIDB4Y2EwZmQwNTUsIDB4YmUwNmI1OTksIDB4Mzk5ZTZiOWYsIDB4ZjE4NmNlNjYsIDB4ZmRjMzkzN2UsCisJMHhmZTdlNGY5YiwgMHhmMzhjN2NiYiwgMHhmMzg1NjZkNCwgMHg3ZWMwN2Y1MSwgMHgzYzQwMGZlNywgMHhmZDIwNmQzZiwKKwkweGM5MTlmNmJiLCAweDY3YWMzNzEzLCAweDdlZTJkN2JmLCAweDE2YWQ3ZjAzLCAweDg1ZjZiY2ZiLCAweGJhNDVlZTk3LAorCTB4NWRmYjhiNWYsIDB4ODA1ZTliZDIsIDB4ZjNkMzhmNmUsIDB4NjE0YzBlZTcsIDB4NDhlM2ZkZmMsIDB4MDJiZTlhMTcsCisJMHg4Yzk0YzFiOCwgMHg5ZjBlM2E3MSwgMHgwMmZjZTFjZSwgMHhmM2Y4MmJjZiwgMHg0YmM5MTE0MCwgMHg2NzY4MjM5MCwKKwkweDVmN2JkMzQ2LCAweGQ4YjFmYmZiLCAweDJjNWIyNWJmLCAweDE2M2Y1NzI0LCAweGMwZjlkYmZiLCAweGJmZGMwZThiLAorCTB4ZWM3ZTdlNGYsIDB4ZDRhMzllMDQsIDB4ZDhkYTA3M2UsIDB4MDVlZTgzMTUsIDB4ZmFlMWQ2M2UsIDB4YjI3ZjM0MWQsCisJMHg3YWUxZDYyMywgMHhlZmViM2QxZCwgMHg2ZmMxNzNhNiwgMHg5ZjVmMThlYiwgMHhiMjc1ZGViNiwgMHgyZjU2YmY1OCwKKwkweGQ2MmNiZmRlLCAweDdjMDk4NmI5LCAweGYzODgzMGJkLCAweGU0MjdlMDk3LCAweGI0YzdiNDU3LCAweGY5OTJmOWY1LAorCTB4MjY3ZDFhZmIsIDB4ZmZiOTcyZTcsIDB4OTlmZjIxMzcsIDB4ZmM0MGVhZDIsIDB4OWNhMmZlZTAsIDB4OThmMWZhMDEsCisJMHgwMWI5MDk0NywgMHgxNjc5M2U0ZCwgMHg1ZmIxMWZlNiwgMHg3M2IzZmNkYSwgMHhhZTQwM2NmOSwgMHg3YjkyOTI3OSwKKwkweGM4ZDNiMWY2LCAweGI3M2FjNjU2LCAweDc4ZTVjODRjLCAweDk2OThkYjNjLCAweGZiZjgwNmQ1LCAweDg5MmJmYzE4LAorCTB4MjM5NTdhNzEsIDB4NDZlOGQzYzYsIDB4NjdmY2FmMWIsIDB4ZGQ3MGQzNTUsIDB4ZmIwODdmZDAsIDB4M2Y3ZGM2ZDcsCisJMHgzZjYzMjA5MCwgMHgxZmNlMzNlZiwgMHhiZTM1ZmNkYSwgMHgzNDVmYWYyYywgMHhlZDgxZDhhZCwgMHgxNGU3YjEzZSwKKwkweGRkMzliYWUxLCAweDU0MmFlNzY2LCAweDgwMmVkMDdhLCAweDA2NmQzZGY3LCAweDE1OWY0ZjhhLCAweGM2ZDlmY2ZlLAorCTB4OGE0YjFjOTcsIDB4MjVkZGU4N2EsIDB4ZDkzZjhkZTYsIDB4MWE5ZTdiZDksIDB4MzNkMDQ1ZmQsIDB4ZmI3Y2IzY2QsCisJMHg2YjA4NjlmYywgMHg0YmE2OGRmMywgMHg3ZDFhNmYwZCwgMHg2NGE5Y2RiMiwgMHhlOWQzNDRhZiwgMHg2NmIzY2NiYSwKKwkweGI5ZmEyZjFjLCAweDgwN2NiNzY2LCAweGZmZTQxNWYxLCAweGYyZTNjNjU0LCAweDZlNzhlYzBkLCAweDlmODYzZTg0LAorCTB4ZDFlYThkOGQsIDB4ZDc5YzlhMGYsIDB4MTRiYWYzZjQsIDB4MmZjMjI1Y2YsIDB4NDM3MDNhMGIsIDB4NTM2NmU3MzYsCisJMHhjNzI5NzdiZiwgMHhmZGUwMzliNywgMHg3NGMzZTczMSwgMHg4N2Q5YWJmZSwgMHg5MjExN2YzNywgMHhmNDhlMzExMiwKKwkweDUyMjRiYjgyLCAweDdjYjlhZGNmLCAweDk2YjZlODljLCAweGJmYTFiNzg1LCAweGRmODFmOGIzLCAweGY0OGQxY2NkLAorCTB4Y2U4OTk0ZjksIDB4NGUzNzE2NWIsIDB4YmRkZGEzMzYsIDB4YTM5ZGYwZWEsIDB4MzVjZmRmNzAsIDB4YTk3NjNkNzEsCisJMHg2ODkzZTQ2MSwgMHg3YTZiOWYzNywgMHgxMTY3NzlkOCwgMHg2NTNlNTdiZSwgMHhiYzVmM2MyYywgMHhmNWY2OThhYiwKKwkweDRjZjBiODgzLCAweDkxZWViYjg0LCAweDZmNzg0MWQ4LCAweDliOTFlMWRjLCAweGNlM2MwMjE3LCAweGFlMTI1MzdlLAorCTB4NTI0M2ZkZWYsIDB4M2EwOGQ4YzUsIDB4Y2Q5NGNhNTgsIDB4OTM0ZWQxMGIsIDB4OGJlNDE1MTMsIDB4YWIzYzg1ZjcsCisJMHg1YTdkZjEzNywgMHg1MTdmZTgyZSwgMHg0NWYzZTcyZSwgMHhlYmNiN2Y2MiwgMHg3Y2YxZjNlYiwgMHhjODAwZWJiYywKKwkweDhkNjNjMDUxLCAweGMyMWFkNWQ5LCAweDIzNGQ1ZjcxLCAweGQ4MWQ3ZmJiLCAweDc0YzllOTA4LCAweGQyNzY0ZDRlLAorCTB4NjZiMzMzNGEsIDB4NmI3M2QwOTQsIDB4NjkzZjNjMDYsIDB4ZWI4M2RmMGEsIDB4YmQ4Zjc5MzksIDB4NThlMjBiNzgsCisJMHgwOTZhM2ViYSwgMHg1Zjg5NmZiNywgMHhmMWE1YWVjMCwgMHgzMTY4ZWRiYiwgMHgyZTgyNjU4ZiwgMHhkZWQzZmJhMywKKwkweDFlYmI0MGVmLCAweGZmOTg5ZWU1LCAweGU2YTc4NmE1LCAweDc0YmFiZWExLCAweGQ3MTkyZjI0LCAweDcxYWJlMWZmLAorCTB4N2NkZjY4NGQsIDB4NGM3MmUyNjgsIDB4YWVlYzFmZWIsIDB4MTFmNjkxZjMsIDB4MTgzYTViZDgsIDB4MGMxZDJhZWMsCisJMHg2ZjVlNzVmNCwgMHhiYzI1NmQ4ZiwgMHhiN2FiOWJkYywgMHhhZDNhMzRhYiwgMHgxODk3OWY1OSwgMHhjYmQwMTc5OSwKKwkweDBhNDNmZWZlLCAweDljZjdmZjlkLCAweDY0NGU4Y2JmLCAweDc3NDJlNDMxLCAweDg4MGZkNWRjLCAweDNjNmM2N2NhLAorCTB4Y2YxOGZhZGEsIDB4ZjlmMmY4NGQsIDB4MmRkZmRhMzAsIDB4ZWIwMmM1MTYsIDB4OGU3NDhmM2MsIDB4NGEyZjRiZTcsCisJMHg3MmI3ZWVkYywgMHhlMmZmM2ZiYSwgMHg3N2ZhMjA4OCwgMHhlMWMwZmZjYiwgMHgyMDg2YWRlNSwgMHhkZjFlZGQxZSwKKwkweGY2YzI1ZGI1LCAweDRiZWVjMGNiLCAweGIzZDg0NDMzLCAweDAzY2Q3N2JiLCAweDU0NTc2N2YyLCAweDY4MGNiNmRmLAorCTB4Y2YwOGU1N2YsIDB4NWI2YTgwNzcsIDB4MjI3YjFkOTQsIDB4MWRiN2Q1YzMsIDB4NWZiNmNmZmIsIDB4NjFjMGI4YjUsCisJMHg1MzJhZGYwZCwgMHg5ZTFhZGYxMSwgMHg3NWU2N2YzNSwgMHg5MmIyODdhMCwgMHhlYTdkYmMxZSwgMHhlYmY2NDk1ZiwKKwkweGNhOGZiZjY1LCAweDFmNjcwY2NmLCAweDZjNzQ4NzFjLCAweDVmOTE1NDRmLCAweGIwZjZkZDdlLCAweGZiZjcwMDM0LAorCTB4ZThlYmUyODUsIDB4MjViNThlOTcsIDB4OWZiN2M4MmEsIDB4YjlkMTM3ZmEsIDB4MWQ3ZjY1ZTYsIDB4NmI3ZWRhOTUsCisJMHg1ZjliYjE3MSwgMHgzZWY3YTc2OCwgMHhjYWYxMWI2ZCwgMHgzNWVmNzgzOCwgMHhkNzkwYTI1YiwgMHgzNWY3MzFjOSwKKwkweGVlZTNiZjNhLCAweGYwZDNhM2Y1LCAweDhmYWViNmI5LCAweGFiZmJlM2VlLCAweDIzYTNmYmNkLCAweDVkNzAzYTc3LAorCTB4N2JmNThmZWQsIDB4NmJlZTBjNjUsIDB4ZjY4MmEyNDIsIDB4ZGY5MTBhZDksIDB4OTcxZjYxNzEsIDB4ODlhZDE3MGYsCisJMHhmZDgwY2U0ZiwgMHg4ZTdmYjhiZCwgMHg1YzljODE5MywgMHgxZTc3M2VkNiwgMHhhYWZlNWYzZSwgMHg1Y2ZiNDE0MSwKKwkweDgxY2FiNTdkLCAweGNiM2Y4ZGYxLCAweDRiMDUwZTlkLCAweGYzODQyZjc4LCAweGNhMTI4MzkxLCAweDZjOTViMWEzLAorCTB4MWIxZmI2MGUsIDB4ZmEwYjk5OTIsIDB4ZDM4MzMzMTksIDB4NzJjYjk4YzksIDB4M2U3ODBmMTAsIDB4YjcxNGU3ODYsCisJMHg3MTRmMWViOCwgMHhjM2Y1ZjgwYiwgMHhiZjY1OGRmYywgMHgwZDBlZjFlMiwgMHgzNWRmOWFlZiwgMHgwNGRiYWM0ZSwKKwkweDJlNzQ0N2VjLCAweGYxOTc5NzllLCAweDdmZWUxZmU3LCAweDc3ZjYxNjdlLCAweGMxNDk5MGU5LCAweGM4N2E3Zjc5LAorCTB4MDZhZmZkNDQsIDB4ZTMwOGM5N2YsIDB4ZmRjMjNjNWQsIDB4ZGNlMzg0MTAsIDB4ZGZkY2M3YzgsIDB4ZmRjYWRkNTgsCisJMHgyNmY1ZGE4ZCwgMHgzN2IxMzk4ZiwgMHhiNDQ3OTYzZCwgMHg5ZTBlYmY0MywgMHg1NWRjNzBiOSwgMHgzYTM0ZGU4MiwKKwkweGViZTFlZDVkLCAweDBkN2EwZDViLCAweGI3NGQxYmQ3LCAweDFiNzVhYzQ5LCAweGU4ZWJlOWUyLCAweGVkZDI5YmY3LAorCTB4MTM1ZTkwZGYsIDB4ZTg3Y2I3NTgsIDB4ZThiZWQ3YTYsIDB4ZjkxM2UwNDQsIDB4YTM1NWU5MWQsIDB4ZjhmYmQ1ODcsCisJMHg2YjcyN2EzOSwgMHgzYmE0NDRmMSwgMHg3OTM0M2U4ZCwgMHgwYWM0OTgxMiwgMHg5YmQ2NmY1MCwgMHhkZGU2MDE1OSwKKwkweDJhZjE4YzA0LCAweDliMmE4MWNhLCAweDdmNzI4NGNiLCAweDA1Njc0YTRlLCAweDFlNDk2NWEyLCAweGI5NTJhNzk3LAorCTB4ZmQ0NDYzZDEsIDB4NzkyMTZmNTMsIDB4NTI2ZjJkMTEsIDB4ZGZmY2I4ZjIsIDB4ZWQwNzQ0ODMsIDB4MmExNGYyOGIsCisJMHhmYzhlYWM0ZCwgMHg4NTg0YWQwNywgMHg1Y2ZkNDQwYywgMHg5ZmZjOTA5NSwgMHg1MzcyNjgyZSwgMHg2NWIzODNkZSwKKwkweGI4ZDU3Zjk4LCAweDU0NzI3YmU0LCAweGVkZTUwNmM2LCAweGU0ODhmMGU2LCAweDk3YTgyNjkxLCAweDVkOWExZmViLAorCTB4OWU0NTcwMDEsIDB4NDQ1ZTYwNjcsIDB4YTcwZTk3YmYsIDB4YzBmNWM0MGQsIDB4OGMxZTU3NzMsIDB4OTdjNTNkYmIsCisJMHhiMzNhZTU4MywgMHg2N2Y3ZTQ4ZCwgMHg5YjYxYWU4NiwgMHhjZmVkM2RkYywgMHhmZjdmNmFiYywgMHhiODFlYWVkNywKKwkweGQ0YjJjNGQzLCAweGNkMTk4NDIyLCAweGNhZWYyYjViLCAweGUzZTYwY2YzLCAweDYxMmY5ZmU4LCAweGUyZjI5MWFjLAorCTB4NWRmYmZmMDIsIDB4ZTdlMDQzYjQsIDB4ZGVmZWMyYjUsIDB4ODk2OWU4MmEsIDB4ZmRjMjE2ZDUsIDB4Y2JhNjRkNjQsCisJMHhhODA1NzZkZCwgMHhjYTI2YTY3ZSwgMHgwNGIzMDc0OCwgMHg4NzJhZGMxZCwgMHg0MmZkZjFkYSwgMHhiMDVjYTBkNiwKKwkweGZmYjNlOTkyLCAweDNhMzc3ZWFiLCAweDA1ZDk5NWE3LCAweDg3YTAzZmFkLCAweDNlYjA0Y2NmLCAweDkwMDM2N2EwLAorCTB4MTk2MDI2ZDcsIDB4MDZiMTIwMDMsIDB4OTVlMTk3ZTQsIDB4ZDg1ZmZkZmYsIDB4NzU4MDdkNmYsIDB4NmI5ZTExYzYsCisJMHgwNjdiOTQxNCwgMHgwNTdlMzNlNiwgMHg2MzgyNmQ2NSwgMHgzYzMzYzYxOCwgMHgzNjQzZDkyZiwgMHgzZjBkYzdkOCwKKwkweDVmYmEyMDRmLCAweDUyMTdlYzI1LCAweGE2NWY5OGM2LCAweDc0YjBmNWYwLCAweDhmN2ZkZTdlLCAweGZkMGZiN2EwLAorCTB4NTgxNzM3MmMsIDB4ZjQ3NjEzZmIsIDB4YjFlNjE5NTMsIDB4MWIzN2NlMmEsIDB4NzhjNmJkZjEsIDB4MGI4MzZiMmEsCisJMHg4MWRlYjRmOSwgMHhiZjI3YzU3NiwgMHgwOTE0NTQ5MCwgMHhjOGRkODQ2YiwgMHg3ZTBhYTUwZSwgMHhhMDEzNDI5NywKKwkweDc4NWRjM2JlLCAweDhkNGJmNTEwLCAweDZlY2I5N2EwLCAweDYwNmY3ZTQ2LCAweGZhZjI4NThiLCAweDU5NjNmNWQ4LAorCTB4OTk1YzAzZjcsIDB4ZmU4YThiN2QsIDB4Yjc2N2U1ZTQsIDB4N2Q4MzJlZTcsIDB4MGVkOGMwYjIsIDB4ZTg1NGU3NTgsCisJMHg2YWE2MGNiMywgMHg3M2EyNTgwMiwgMHgwM2Y1MjBkZSwgMHgzYzA3MDFmNSwgMHgzODdlZTZkZiwgMHhmMzE5ZDM4YiwKKwkweGZkYjQ3YWUyLCAweDZiZGVmMGQxLCAweGI0Njg2MDNmLCAweDY2NTY4ZDJmLCAweDkwYjFmZjQyLCAweGZmOTA1N2VkLAorCTB4OGM5OTdkYjQsIDB4ZmZmMDNkY2UsIDB4OWM3OTE3ODYsIDB4NzU4MTgzNjMsIDB4ZjlhZjE4YzMsIDB4OGQ3ODBhZDAsCisJMHg0ZjZhNWYyMSwgMHgyNjc2NDFiZSwgMHgyNzQwNWJiMCwgMHgxOWRmZjY1NywgMHgxZDk1ZmY1YiwgMHhmZmQ3NjMzMCwKKwkweDk4ZDgzZDZjLCAweDMxNWZmNDI3LCAweDAzN2IyNjJiLCAweGFkZmQwNjk3LCAweDRiMjY2ZDEwLCAweGQ3MTkyZTM1LAorCTB4OTE1NTZhOTMsIDB4OWUzYzM2MWUsIDB4MWQ4NjdhNDMsIDB4YTBmNDRkZDksIDB4ZmJmYjYzYjUsIDB4NzM2YzlkMTEsCisJMHg1NWZmODQ0YiwgMHhjYzRjYjA2ZCwgMHg0ZmViNjlkMywgMHhkYTMzOGI3OSwgMHg1Yzc0YTk5MiwgMHg5N2U3YTc0YiwKKwkweDk0YWI3YzllLCAweDNmYmUxYmNiLCAweDM2OWE3ZjMzLCAweDdlODNmMjg5LCAweDZkNGE4ODNhLCAweGJkMDQxYjFlLAorCTB4ZTJiZTc4NjksIDB4YzkzZTc4MTUsIDB4YmIwNmQ1ZjUsIDB4Mzk3ZGZjOTksIDB4Nzk0ODk4NTAsIDB4MGIxMjFkOGMsCisJMHhlNGY3M2MwMiwgMHg1N2UyMTMxYywgMHg2ZDc0ZTc4YSwgMHg1NzMyMzc0OSwgMHhjNDU5YmMwYywgMHhlMmI5YzQ3ZSwKKwkweGRlZDIyYjk5LCAweDY4YzI3ODBmLCAweGY1MTdjZmQ3LCAweDUxYzkwNTA5LCAweGU2ZGY3Y2Y1LCAweGI3Y2ZlNTg5LAorCTB4ZjM4MTljYWQsIDB4NzVmZGFiYjYsIDB4NGM3NzZjZTMsIDB4OTJiYTIwZTksIDB4NWYzOGNiMmUsIDB4ZWIwMzA0Y2IsCisJMHgzNTJiZTc4NywgMHgzYjk4N2RmYSwgMHhjNjliMGY1NywgMHhkNWYyNGU3ZiwgMHhiZjdhM2UzNCwgMHg0ZGZkMDk5OSwKKwkweGZjZmY0NzhiLCAweDE3YTEzY2I1LCAweGU0NjE1OTBhLCAweDlmYzJmNjNlLCAweDBkN2M0YWNkLCAweDc4ZWY3OWRhLAorCTB4OTg3NWU3ODAsIDB4ZWRjNWQwNTgsIDB4YWZjN2I0MzUsIDB4Yjc0NDJjNzgsIDB4ZGUwNGUzZGIsIDB4MjFlOWE1MGMsCisJMHhhNjU4OWY2OCwgMHg0NzkyNWZjNywgMHg5NTdlYWY4ZiwgMHg3YWE0ZmM3YSwgMHhhYjQ4NzhmNSwgMHg2N2Q1ZDZjZSwKKwkweGVhZWIwNmY4LCAweGQxMmNhYzA3LCAweGM2ZWIwM2MxLCAweGI0ZGZkYWVhLCAweDc2MGU5MjY5LCAweGRhZTlhNjA3LAorCTB4ZDZjZDM0ZTcsIDB4MGIyZDc5YzEsIDB4ZWQwN2VkNzUsIDB4MmZhYmEyNWIsIDB4ZDVkNmFlMGMsIDB4NDFiMjM5MGYsCisJMHhmZDZkMGYwNywgMHhlMWZiNWQxNywgMHhmNTc1NWI2ZCwgMHhiYTFkYTFjNSwgMHgwZjFkMTFmYSwgMHhlMTkxZTBlOSwKKwkweDQ3ZWQ3NTQ3LCAweDU3NTA3YmJmLCAweDY5ZjNhNjNmLCAweDhiYjhmZDVkLCAweDliZTBlOWNmLCAweGI1ZDY1ZWJiLAorCTB4YThlZDcwOWYsIDB4ZGVjODllMGUsIDB4YjcyZmI1ZDIsIDB4NGYwNzRlZmUsIDB4ZDc0M2ZlNTYsIDB4MGZmNDk2ZmUsCisJMHg1ZDUzZjU3NCwgMHhhN2VhZWIxZiwgMHhjMWQ1NWMxNywgMHgwOTdkOTg3NywgMHhlYTk3YzhmOSwgMHhjZGVmNzRkZiwKKwkweDhlMWZhZTYyLCAweDlmOWUzYTA3LCAweDAwNDM1NDYyLCAweGZjODVmM2RiLCAweDhjOTc3NDEwLCAweGRhZWQxM2ZhLAorCTB4NzQ4NTk2NWMsIDB4MWYxYTU5M2EsIDB4MzM2YmJhMjIsIDB4NDQ1N2U4YTgsIDB4NjNmOTI3ZWIsIDB4NjVlMzA3YWYsCisJMHg4YTgzMjVlYywgMHhiMDQ0YWM3MSwgMHhmMTg4ZTRlYiwgMHg3MDU2M2M5MiwgMHg3ZWUwN2IwMCwgMHg0ZTBlOGE5NSwKKwkweGRhZWJhNmY1LCAweDc0YmI1NWE3LCAweDAyYmUxOWY1LCAweDk1ODBmZDVkLCAweDU4MWUwZWFhLCAweDdmNmJhNjU3LAorCTB4MGU4ZjI2ZDMsIDB4NzUyYTA3NzYsIDB4YmM5YTczZWQsIDB4YTVhZjM4M2EsIDB4ZDA3ZWQ3NWEsIDB4YmVhZTlmM2UsCisJMHg1NzUyYjgzMCwgMHg5ZDQ4ZTQzZiwgMHhiYWRhMWUwZSwgMHg3ODdlZDc0OSwgMHg1ZjU3NDA1YiwgMHhkNWQyNmExYywKKwkweGQxNjhlODhmLCAweGZiYzMyM2MxLCAweGJmNDdlZDc0LCAweDhmZDVkNDFiLCAweGFiYTIzY2U5LCAweDU1YjE3NzFmLAorCTB4ZDVkY2RmMDcsIDB4ZTEzZjZiYTYsIDB4NGYwNzQ4NWEsIDB4ZWQ3NTI3NjQsIDB4NzQ2N2FkY2IsIDB4M2RlNTY0ZjAsCisJMHhkMjViZmI1ZCwgMHhhN2VhZWFjZiwgMHhlYWU5MmViYSwgMHg3YTY0N2IzNSwgMHhlN2ZhZTdjMSwgMHhhOTk5M2VjMiwKKwkweGZkZWU5N2ZlLCAweDQzMGYyNGMwLCAweDY3M2MwOGZhLCAweGEwNWRlYjUwLCAweGI5YjNmMmZmLCAweDJkMTMwNzNlLAorCTB4YzY3YjQyNGUsIDB4Yzk0NWY5NGIsIDB4NzIwN2EwOTgsIDB4MjA2MDMxMmIsIDB4NWI5NTQyYmEsIDB4MTQ5ZWYxNDMsCisJMHg1MmE0NTNkMiwgMHgwMzQ3OTg1YywgMHhkZTgxZGU3YSwgMHhmNjhkZGI5MywgMHg5ZDhmNDI2ZCwgMHg4OGQ1Zjk5NSwKKwkweDdkNjc2ZTZmLCAweDMwMzg3ZDFmLCAweDk0NGRiNjVkLCAweDBkZTU2M2FhLCAweGM3OWYzZjdlLCAweGZiZTUwZTM5LAorCTB4YTJhN2U0MzYsIDB4MTRlY2YxMWYsIDB4YjE1N2IzYjQsIDB4ZTc5YzM2YzAsIDB4YjEyOGE5NjQsIDB4NzFhOGUzMTMsCisJMHg1Njg1MzhmYSwgMHg2NDVlYjU0ZSwgMHg3N2RkODQ3MiwgMHhiMzI1YWUzMiwgMHhmY2ZlMDZlNCwgMHgyNjY1ZWI1NCwKKwkweDU3ZTg4ODhmLCAweGIwMGMyZmM0LCAweGZkMTEwZGZlLCAweDgwN2UwODNmLCAweDhiN2YzZTBjLCAweDZjMGFmODFmLAorCTB4MGFmYzg3YTQsIDB4ZTlmZGJiYzEsIDB4YmJmMWVmMDQsIDB4MmZlN2RjYTgsIDB4YmY1MWYyYTAsIDB4ZmRmYmY1NGEsCisJMHhlMTNmMDQ2NSwgMHhmNDFjMTBmNywgMHhkMDc5NTI1NywgMHg4N2U3YTVlZiwgMHgzZjA0ZDVmYywgMHg5NjMxN2UwOSwKKwkweGM2NGZjMDQ3LCAweDc3ZjA2OWYyLCAweGYwMTlmZWIxLCAweDg1ZmUxMTdmLCAweGFiNjU0MDNmLCAweDNmOWU4OWJmLAorCTB4ZjgyMTZmZTcsIDB4ODIzZWZmMDUsIDB4NTIwZmU5N2YsIDB4NDIzZmU2ZDksIDB4NTZmZWNiZTUsIDB4ZGZjNTdmYWEsCisJMHhmZTZiZjA0NiwgMHg3ZjIxYzExMCwgMHhmZDQ3YzEwNywgMHhmYjhmODI2MSwgMHg4NGY4MjVkZiwgMHgwZWNhOTNiZiwKKwkweGRmMmE0NWZmLCAweGZkNTE3N2Y0LCAweDgyMzVmZjI5LCAweDZmNTNmNjdiLCAweGYzZTM0NmZmLCAweDY1NTcxMTIzLAorCTB4MjE1YzRlYzIsIDB4NzBhNTg3ZTgsIDB4MjczOTcwZmIsIDB4ZDA0MmI2MDUsIDB4YTgxMjY5YWQsIDB4ZmEzZmI0NTcsCisJMHgzY2M0MWZlNywgMHg1NzQ4OTFkNiwgMHhhNzU3NDQwNSwgMHgxZWZkOGRiZSwgMHgyNTY5N2ZlZCwgMHg5YmY3MTlkMCwKKwkweDNjNzgxYmQ3LCAweDIyZWZkMzQ2LCAweGVmZDM0MDVmLCAweDdmNzBmNzM1LCAweGJiZDgxMTc1LCAweDQzZmZmZjE4LAorCTB4YWYzZmI3MWMsIDB4ZDAwYTk5ZDQsIDB4YzQzMWFiOGUsIDB4NWQyZjY4YWIsIDB4ZDkzM2ZiYTksIDB4YWZjZjBjNDcsCisJMHg3OGVlNDU4MSwgMHg0NzYwNzJjNSwgMHgwMzU2ZGY4NCwgMHhmZGUxMWJlZiwgMHgxOGI0NTk5OSwgMHg0YzNhYzM1NiwKKwkweDMzMmEyZTc0LCAweDM1N2MwNDhmLCAweDM3ZWZhMDc2LCAweDBmNTYxZmE4LCAweDdmYzgwNjM0LCAweGQxZjMwNWI2LAorCTB4YTA3ZGJiNmYsIDB4N2VmNDhjMmYsIDB4MDlkOTZlYTUsIDB4ZDJhMjhmYzIsIDB4NGI0Y2UwYjksIDB4YzYzZTc1MjgsCisJMHgxNDRhNGU0OSwgMHgxZjBiZWJkZiwgMHg3ODVlNDRlYiwgMHg1ZGFmZjU5ZiwgMHhiYzNiNDRjYSwgMHgwZjkyZWZmMiwKKwkweGM5YjRlN2Y3LCAweDgzNzE4ZDVlLCAweDFmYjlmMjBmLCAweDUxYmU0MWZhLCAweGU4MWU1ZTU3LCAweGZjZjM4NzNiLAorCTB4NzZlZWJkOGIsIDB4MmZmMGEwMjMsIDB4ZTRmZjU5ZGYsIDB4YmYxZWVlZGQsIDB4M2Q3NDU2ZjksIDB4NjJhZTVlYzEsCisJMHgyOWU1MTMyZSwgMHg2ZTFiY2YzMiwgMHhlNjM2ZWFlOCwgMHgwYjNlNzgyMywgMHhhNjdiNzk1MCwgMHhkNzVjNjNlZiwKKwkweGQ4MjQxNjAyLCAweDE1OTJkNjM3LCAweGYzZDE1ZDZiLCAweDAzOTA4YmZhLCAweGVhMzdjOTdmLCAweGJlNTlmZWNhLAorCTB4ZjJmM2U0ZmYsIDB4OGY0ZWJjZDAsIDB4ZDcxZjI1YjksIDB4NjE2YmNkYTUsIDB4M2ZlNjhiOTYsIDB4ODEzZDc1OGIsCisJMHhhYmNiZmJmMywgMHhlNDMwNWY5ZiwgMHhmZjhmYTZmNCwgMHg2MWIwYmEwMSwgMHgzMWRhMDU5OCwgMHhjN2E4ZGYzYywKKwkweGFmYTgxY2M0LCAweGY5NDBjZmJmLCAweGQ0NWQxYWQ5LCAweGRmMTA0MDYwLCAweGJjYTA2Y2RiLCAweDAxM2ExZWZkLAorCTB4MmJiZjQwZmEsIDB4ZjFlZThiYTUsIDB4MGYyNDlkMDEsIDB4MjMxOTNhNDIsIDB4NGY2MGNjMDUsIDB4ZjMwNjM2OWUsCisJMHhiYzVlNzQwZCwgMHg4NDcxOGNjYywgMHgxZjQwMjkxNSwgMHhjMWQzN2RkOSwgMHg0MDlmNzE1YSwgMHg5NWY0MGU3YiwKKwkweGZhN2RmZDg5LCAweDg4MDVkMWFiLCAweDhkYWY3NWFmLCAweGVhYmUyMTcxLCAweGU4MGZiMDhkLCAweGE5MjliZTI3LAorCTB4OGI4NTFmM2MsIDB4NTBkYzY5N2UsIDB4NTkzMjU3OGEsIDB4MzRjZTMxNTUsIDB4ZGU1YjEyZDMsIDB4ZTljNDFmOGUsCisJMHhhOWJhNzRlNywgMHhlOWZkNDgzMiwgMHgwNzRhNTVjZiwgMHgxZDJiN2RmMSwgMHhjMzczZjdjNCwgMHg0OGQ3MGZmYSwKKwkweDQ3ZDNlZjMwLCAweDk0N2RkMTJmLCAweGY0ZGZmMzVlLCAweGM0NmU2MTY2LCAweDlkYjVkN2JjLCAweDIxODllMjlkLAorCTB4ZmU4YmU3YmYsIDB4Y2M5MWJhMzQsIDB4NWIwMWRmNzYsIDB4ZTliYWJjZTQsIDB4ZmJhZTFjNzgsIDB4Yzc0MDQ5MmYsCisJMHgxN2M3NDQzOSwgMHg5NjcwZmNmMCwgMHgxZjM4OTVjNSwgMHgwOTQwNGVjYSwgMHgxZmJlZTlkYSwgMHgyZGZmZTQyYiwKKwkweDRiOTUyYTYxLCAweDE1Y2E5Nzk5LCAweGI3NDhlZGIwLCAweDMzMmVjMGRlLCAweDZiMzU3YmUyLCAweGNiNmJlN2E1LAorCTB4MWQyMjc0ZWUsIDB4YzhmYTM3MmYsIDB4OTk4MzVlMmYsIDB4Y2I5ZTc4YjcsIDB4MDFkMjJhYmEsIDB4NmQzNWI3NmYsCisJMHhkMDFkMjM3OSwgMHhkNzY1YTczNywgMHhjZWNmOGM2NCwgMHgwMzdlMmUwZSwgMHg4NjQzYWFjYiwgMHgwYTg3OTgwYiwKKwkweGU3MGIzMTdjLCAweDZiYTg2OWQ1LCAweDJmZTMwZmVjLCAweGUzNjI2NjdjLCAweDRiM2U3ODAwLCAweGRlYzFmYmUyLAorCTB4YzlhMWZiZTIsIDB4MDM3NWU4OGQsIDB4OTQxYmNjMWYsIDB4ZDBmMmViOGEsIDB4YTU0NzI0YmEsIDB4YjY2YTBmOGUsCisJMHhhNTIxOGYzMiwgMHg5YmJlMWYyNywgMHhmYWVlY2EyZiwgMHg1Zjk0MDBkMywgMHgwN2M1MTc3MiwgMHg0OTY2YmRkNiwKKwkweGNkNWU3ZGM2LCAweGYwNjAzZGI4LCAweGNkMGZmMTY4LCAweGU3NDQ2MDBlLCAweDE1NzhiMTc3LCAweGU4MjQ3ZGRiLAorCTB4OGM4MWEzZmEsIDB4MDMyM2ZhZTgsIDB4M2QyNTg0MzgsIDB4ZjJjYjI5ZjYsIDB4ZjRlNDk3YTUsIDB4YzY3NWViZTgsCisJMHg5ZTIxODY2NywgMHhlMmQ3OWY0MCwgMHhkMDdmNTc3YywgMHg4ZGQ4YWRiYSwgMHg4NTk4M2Y3MiwgMHg2OWU5ODlmNiwKKwkweGQ2ZWY1YThiLCAweDU1ZjYxNWU5LCAweGViNWM0ZjQyLCAweDNiOGYxMzQxLCAweDUwY2JjZjQ1LCAweGQwYmZlMjc2LAorCTB4NTk5OGIxMWUsIDB4ODAzOWNmMDAsIDB4ZTQyOGQ5YWYsIDB4ZTI2NmZlZTcsIDB4MmQ0NDdhYWIsIDB4NzkyNmM3YzYsCisJMHg1NTdjZmM1ZCwgMHgzMTY5ZmZkZiwgMHhiOTJmOGVkZiwgMHhmNTgwMWMzZiwgMHhmN2E0OWM2MCwgMHg1OTRmNWMzOCwKKwkweDIxYzY3YmUyLCAweDM0NjRlMWI5LCAweDljNDFjZWNlLCAweDk4ZjFiNTdmLCAweGVkMTMzM2FkLCAweDdkZTNmYmY3LAorCTB4ZDVmZGMwM2YsIDB4M2Y5YTNkZTIsIDB4MzBmZWUxZDksIDB4OGQ5OWVlOTcsIDB4Zjc0MzU0YmQsIDB4ZTg1OGM2MzcsCisJMHgyMmFkZGY3ZSwgMHgxOTZiNzYwZSwgMHhhYWRkODM4ZiwgMHg0N2M2YmRjNSwgMHhlMmEyYmRjNSwgMHhlYzdjNmMyZiwKKwkweDk3MjY5ODM4LCAweGVmYzk1MzE5LCAweGQwN2Y2NDJkLCAweDE3ZjE0ZmQ2LCAweGQyZjYwZTRkLCAweDMwOTBiMGFiLAorCTB4MTQ1ZGE1YzUsIDB4Y2I4ZWU4YWYsIDB4MWU3OTliMTQsIDB4YWQzMDZiOGQsIDB4ZTRlNDJjYzcsIDB4NGY5NzJmNGUsCisJMHhkNTY5ZmJkYSwgMHhmY2U4YzJlMCwgMHhkNWNiMmIwOCwgMHgwZThhMTFmOSwgMHhhZTk3NTgxZSwgMHgyNmQzN2Y2YiwKKwkweDFkZGVhZTk3LCAweGU3ZDVkMDI4LCAweDM4M2FhOTM0LCAweGQ3NGNhNWFmLCAweDhmM2VkMDdlLCAweDU2MGMyZTBlLAorCTB4MzkwZmRhZWEsIDB4NDNjMWQ1ZTIsIDB4ZWQ3NWFiNWIsIDB4NzRmOWI3ODcsIDB4OTVhMWM1ZjUsIDB4MWQxMWZhYmEsCisJMHg2NDc4M2E3NSwgMHhmZGFlOTM3OCwgMHhiYTAzNzdlOCwgMHg0ZDlkMzFmYSwgMHgxNzcxZmFiYSwgMHhjZGYwNzQ1YiwKKwkweGVkNzRmYjVkLCAweGVhMGI1YzI3LCAweGE3YjIyN2VhLCAweGQ2ZTVmNTc0LCAweDY0ZjA3NTY3LCAweGY2YmE1N2U1LAorCTB4NzRmZDBiOGYsIDB4ZWViYjdhNGIsIDB4NDlkNzU0ZjksIDB4MGJkMzdiZGQsIDB4YzdlMGU4Y2UsIDB4MGY5MTlmNzEsCisJMHgwZjg5OTgxNiwgMHhlOWVmYWE2NiwgMHgxMGYyNjdkZSwgMHhlMzliOTM4YSwgMHgxZGZkYjNmOCwgMHgzY2EzMTQ2ZiwKKwkweDE3MGM2ZmRjLCAweDZlM2U5ZjIzLCAweGY5NjM3NGVjLCAweGI1YjVjMTg0LCAweGNlNDlkMDFmLCAweGQ2MTQ4OWY4LAorCTB4YmM1OGFiY2UsIDB4MzM0MWNiMTUsIDB4NWQ1MzE4YjYsIDB4MGY3MzFmYjAsIDB4MzkzZDQ1NmMsIDB4ZThkZGE2YTQsCisJMHhkMmU4NzgwNCwgMHg4ODlkNWJiMywgMHgyOTA2MzVmNywgMHhkMWJkZjEwZCwgMHg4OGU1OGY1ZCwgMHg3NGE1MTNjZCwKKwkweGIwZDkxZmE4LCAweGU4ZTUxZWI4LCAweDhiMzNlNmU4LCAweDAwNzQ5NmQxLCAweGZlMzE4N2NmLCAweDNlODg3YjI1LAorCTB4NjkxODY2MzcsIDB4YzY0NzFiZGUsIDB4Y2VkY2RlNTMsIDB4OWQxOTM2YjEsIDB4OWMzYjlkOTYsIDB4ZGMwZjE4MGQsCisJMHgwOWE0YTNiOSwgMHhiZjYwNmRjYiwgMHgzNThjY2QwNywgMHhlNThlZmQ4MSwgMHg4M2RmYjAwZSwgMHgzYzZjOGJlMCwKKwkweGU0MjRlN2YzLCAweDUzYTZlNTQ3LCAweGJmMmU3OGU5LCAweGFhNDdkMjdkLCAweDRhMTVjNTUxLCAweGJmNDM4ZjczLAorCTB4MjJmMWE5Y2QsIDB4M2I5YTUxNWYsIDB4NGVmYjc0MTEsIDB4ZGY4MDQ5ZTQsIDB4MTczMDkyM2YsIDB4ZTFhMzcwZjMsCisJMHhhZDc4ODcxNywgMHg3MmY3YzgwNSwgMHhiYWVkMWI4YiwgMHhhYzA2ZmQ1ZSwgMHhmZTAxN2VmYSwgMHg5MjdhZmQ2NiwKKwkweDFlNzg1ZmIxLCAweGFkMjE2ZjMzLCAweGY3ZTFlYjgwLCAweGRlNWE4YzBiLCAweDcxNWJlNTNhLCAweGIwNGExYzUzLAorCTB4OWU0MTEyM2YsIDB4ZjBlOThmMzUsIDB4Y2FiYzAwYWQsIDB4ZWU4MTlkNGEsIDB4MjZmYjhiMDksIDB4ZjhhNmFhMTgsCisJMHgyNmFmZjVlZSwgMHgyZTljMDNjNCwgMHhlNDUxZGJkZSwgMHhmZTgwMmJjYiwgMHg5Y2EwNjA2YywgMHhmNDk3YTA4YiwKKwkweGQwNDcwMGE1LCAweGVmYzA1ZWM3LCAweGY5OWVkY2I5LCAweDA2MzBlZTk4LCAweGE2MGI5MDY0LCAweDE1NTU3ODlmLAorCTB4NTE2Yzc5YzYsIDB4N2I5NzM5M2MsIDB4MjIzYjdhY2QsIDB4ZGM4ZGU0NGYsIDB4ZjcxNDYwNTcsIDB4NjhhOGU2NWYsCisJMHhjMDU3ZGNmZiwgMHhmZTIzZGNmNSwgMHhlN2NmZjM4YiwgMHhmMzVkZmY2MiwgMHgzMjllMDNjZiwgMHgwZjk4ODY5NiwKKwkweGY1NGQ5OWU0LCAweDYxMWE5OGFhLCAweGIxNzU2N2FhLCAweGYxOWJjOGZjLCAweDZmYmMwNjEyLCAweGVlOTI3NjNhLAorCTB4NzAyYWFmYWYsIDB4ZDQzMjVlMTEsIDB4ZmY3NzVhMTYsIDB4NjQ2ZmQwYTUsIDB4MzNhZTRkOWMsIDB4ZGE0MDNlNjAsCisJMHhjZTAzM2FlNiwgMHhhYWYxNGQyZiwgMHhhY2M3OGU3OCwgMHhiY2ZkZGQ0ZSwgMHg5OTdmNGRiNCwgMHhhN2U0MWU3ZiwKKwkweGIxNTVlZmM5LCAweDQ2YmE2OTlkLCAweDIyMmIyMThmLCAweDkyNWFhYWZiLCAweDQ3Y2M2MmM4LCAweGZjOWQ2ZDJiLAorCTB4N2FhZmE4ZmMsIDB4NzU5YmM5NDcsIDB4NjI1YTM3OTQsIDB4ZDExMWUxNzMsIDB4ZWFiNmM1ZTMsIDB4N2JmNjMxMDMsCisJMHg2NmVmZDg5NSwgMHg5YjdjN2U4NywgMHhlNDIwM2U3NiwgMHg3MTg1NTVmNCwgMHhmN2Y4MjEzZCwgMHg2YjBlMjRlZSwKKwkweDVjNWRkY2ZkLCAweGY5YzM3NjkyLCAweGNlNzQ2M2VlLCAweDMwY2RjMWE5LCAweGY5YTllMjBlLCAweGQ3MTViYjdhLAorCTB4MGI3OThjZGYsIDB4ZTkxODJmYTQsIDB4NTQ3ZTI3ODksIDB4YTE4NzYwNzAsIDB4YTJmNjNlZjcsIDB4YzRmY2EwNDcsCisJMHhjZThmYTQxMiwgMHg4M2YwM2Q2MCwgMHhhMmFjZDhiZCwgMHhkZWZiNjQ1ZCwgMHhkZWVhMDM3MiwgMHg4OTQ3NTY3NCwKKwkweDE1OTFiNjM3LCAweDFiYjBmMjFkLCAweDRmNWFhZmNjLCAweDNkM2U2OTg3LCAweDk3ZDkzMjlkLCAweDYyZmFmOTQxLAorCTB4MWMzZDM1MWYsIDB4YWZhNjZmYmQsIDB4Yzg3MmQyNzIsIDB4ZDk3OWUyZWUsIDB4NjdmZTRlMWIsIDB4ZWYwMjJmOWMsCisJMHg1NTdjMTIzZiwgMHhlNDI0NWFjNiwgMHg5NWFjYjE5MywgMHg0YzJjZjFjYSwgMHgxNzU4NzdlNSwgMHhjOGE2MWU5NSwKKwkweDJhNjI0ZTU4LCAweDRiY2MxNTk1LCAweDQ3NTYxNGU1LCAweGExNmIyNTY1LCAweGE1NmIxYTcyLCAweDUzMGIwNjcyLAorCTB4OTUwYWZlMDksIDB4NWY5MGE2NWUsIDB4MzZmNDFiMzUsIDB4OTc5OTczOTYsIDB4OGVhYzc5Y2EsIDB4MWQyMjlmY2EsCisJMHg1OWFiM2UwMywgMHg1OTBiYzEwYiwgMHhjMDZkOTUyYiwgMHhmYWE1Nzg3ZiwgMHg1ODZmOTA2NSwgMHgwZGYyMDJiZSwKKwkweGU5ZmNkN2NiLCAweDJlZmM4NjU0LCAweGJmNDdjYWU2LCAweGUzY2E4MGJmLCAweDEzY2E5NTdlLCAweDNiMmEzMmZlLAorCTB4Zjc2YTFlZmMsIDB4Y2E5MmJmYTYsIDB4OTUyZjdlNTMsIDB4NTRkNWZkYTcsIDB4NmEzZWZkODYsIDB4MjU3ZmI2ZjcsCisJMHhlYmY4ZWY5NSwgMHhmZjM3ZmNhOCwgMHhmNWRmMmEyNiwgMHg3N2ZjYTgwNywgMHg3OTk1MTM3ZiwgMHgzOTc2NDY2NiwKKwkweGNmMTUwODJiLCAweDdlNjdmYzA2LCAweDYwYjhmNjYwLCAweDNjMGFhZjFmLCAweDUzMThmMzFlLCAweGZmNzA1MzBiLAorCTB4NGRmMTg2NjQsIDB4MjIzMWM1NWIsIDB4NDhjYjliMGEsIDB4NWM5YWRkZjcsIDB4Mjg5ZGQ5NDcsIDB4M2I3MzRmMDcsCisJMHgyNzY2OWVjZCwgMHg3MmQ2ZDAzYiwgMHg2MTNlNjE5YywgMHg0YTUzYTE5YiwgMHg3OTNjYmQ4MCwgMHhkNmI5OGVlNCwKKwkweGFmOTNkMDQyLCAweDE1MDQ4NmIwLCAweGFkYmJhNWUxLCAweDMwOWUwN2EwLCAweDAyN2VlYjg1LCAweDk2MGJjN2Y1LAorCTB4Y2U4MmI1Y2MsIDB4ZmI3ZjZiMWEsIDB4NGMzOWE3ZTMsIDB4YjM4ZTYzZjUsIDB4ZGZlMDA1N2EsIDB4MWJiMTU5MWUsCisJMHgzY2UxMzBhZiwgMHg1N2JlZGU1MCwgMHhlNjJlN2FiMCwgMHhmMjE1NWZlYiwgMHgwMGMzN2MwMiwgMHhiN2FkMmRlNSwKKwkweGIxNmYzMTA1LCAweDMxNjhlNWI4LCAweDc1MzFiNjJhLCAweDM3ZDQxMmI2LCAweDFlMjhlZDExLCAweGU4YmI1N2QwLAorCTB4YzdiZGVkN2EsIDB4ZTIxMjlkNmEsIDB4NjRjZmY5YTEsIDB4OWNjY2IzN2UsIDB4OWRjNjMxNTAsIDB4N2UzNWZiMjIsCisJMHg3NDk5ZjFiMywgMHhkYjIzZjE4MywgMHhkZmQwNmUxOSwgMHg5ZmNmMjI4ZSwgMHhmZmZjY2Y1MCwgMHhmYTY4ZjNhNiwKKwkweGVjNzU3ZDM2LCAweDA2MmVmYTU5LCAweDdlNDM4YWViLCAweGU1YzQ5ODNlLCAweGE1ZDgxNzRkLCAweDBiMzRkZmU4LAorCTB4MzY0Yjc5YjgsIDB4YjUwN2E5ZDksIDB4Y2JlZmIzN2MsIDB4NWUzMDdmNTQsIDB4ZjA4MWQyYmQsIDB4Mzc4YTVjOTYsCisJMHhlMjc5MjczNCwgMHg2MzdkYjEwYiwgMHhjYzlkYzkzNiwgMHg2Mzc5NDYwNCwgMHg4YTEzZDUzYiwgMHhlM2VmODIyYiwKKwkweGIyZmNiOTBiLCAweDcyODVmY2RkLCAweGVmZTVjYTI3LCAweGFlOGYwY2NiLCAweDNiZmVmYTZmLCAweGRlMDBiNzFkLAorCTB4MDU0NjhkNWMsIDB4ZTZmMTJkZjcsIDB4N2U1MTJhNzcsIDB4YTNjYjM3MDQsIDB4MThlMzIxMjQsIDB4MTI3OTJmZDUsCisJMHhhYTlkYTZmZCwgMHhmNjFmM2UzOSwgMHgwZWEyMDBmNSwgMHgxYjI2YWNlZCwgMHhmZDk5NTlkOSwgMHhjMzc3YzU0MiwKKwkweGNmMzI4ZDc4LCAweDZmOTY4YWZmLCAweDljYjkwYmIzLCAweGMzNGJkYTM3LCAweGMwYjc2ZTc0LCAweDQ0NzhjMmVhLAorCTB4ZDliMGYyNWYsIDB4ZjNjMmNhZWYsIDB4NmZiYzY3NjQsIDB4Mjg3ZTAzMzEsIDB4NGE2NzZhN2MsIDB4YTc3MzI4MjMsCisJMHhhMzEzZGI4MywgMHhmNjQ4M2E5ZiwgMHgyN2M4YjM0NCwgMHhkMjMxNGM2ZCwgMHgyNTZjNDlmNywgMHg0NDUyMDNjZSwKKwkweGM4NzMzNmJmLCAweDM2ZjhlNzg1LCAweGIxNjNlMGEzLCAweDMyMDdlNjllLCAweGY3Yjc1ZjI5LCAweGVmYmE1ZDNjLAorCTB4OTg1NWQ5MTUsIDB4NmUxYzg0NDcsIDB4ZWU4MTcxMTYsIDB4M2ZmNDQ2ZjEsIDB4Y2RjNDQ1MjAsIDB4NGE5MDk2NmMsCisJMHg0YmZhNjllMywgMHgzZmM3NmYxYiwgMHg5MTRlZGUzNiwgMHg2NzhkYTkyNywgMHg5ZjVmYTUxZiwgMHhmNWE2MWNkZCwKKwkweGExZmQ4NWQ5LCAweGQ3MTNiNzhkLCAweGUzMGYyMzE3LCAweGY1YzNjNzZiLCAweDVhMzc4ZTQ1LCAweDI1YmIzZWJmLAorCTB4NGJiM2ViNGMsIDB4MWVlOTVlZGMsIDB4ZjFlYzQ3NmYsIDB4NGY2NzFhZmEsIDB4NTY5Y2ZlNTQsIDB4NzJlNDJmY2UsCisJMHg3NjMyY2MxNSwgMHhkMzNmZjYwZSwgMHgwOWY5ZTljMiwgMHhkOWM1ZDMxMywgMHg3ZTdhMDkzNywgMHhhNjk3ODhiMiwKKwkweDk5MmU1YzA5LCAweGNmYmE2NjljLCAweDcxNzlkMTMzLCAweDZkYjVkMjE3LCAweDlkY2U5MWI3LCAweGM4MjcyOTZjLAorCTB4NGVkMzkyN2UsIDB4NDBmYzg5MzEsIDB4OWZjZjhhZDYsIDB4MDJmN2YwMzAsIDB4Nzk5OGU2YTksIDB4ZTFmYzdiMmIsCisJMHg3MTExYjlmOSwgMHhjZWI1MzRlMywgMHgxMzRmZjk4MCwgMHhlMzBjMWQ5ZCwgMHgzMzE0YjZlYywgMHg2Mjk2ZGZhZCwKKwkweGZjYTFjNjBkLCAweGNkODA5OTU1LCAweGRiODAwNGMxLCAweDBiMWI3YzhiLCAweDk1NGUzZDYxLCAweGM1MzM4YmYzLAorCTB4OTJmMzAwN2MsIDB4ZGZhMWFhZDIsIDB4ODRmZjdkMDgsIDB4NzcyNjYzYTAsIDB4ZWUyMmFiYmEsIDB4YzQ1YjNjZDcsCisJMHhhZjhkNDllZCwgMHg3MjM3ZTdhMywgMHg0MWZmNWYzMCwgMHg0ZjMxZTdmMCwgMHg4ZjBjNmJhNywgMHhkYzNlOWM5MywKKwkweDU5ODdmYzlmLCAweGQwN2JjNjBmLCAweGMwZmQzZThmLCAweDc3ODIwYWUwLCAweGY1ZjNhNThjLCAweDRlYzc4N2QzLAorCTB4ZDY2MjdmNDEsIDB4ODI0NjY5OGUsIDB4ZTMwM2FjMGQsIDB4MmM3NmIzMWYsIDB4Y2NmM2UyMzQsIDB4ZGZmYjQ2MWMsCisJMHhmMjRjZDY3NSwgMHhkNThlZDY3NSwgMHg0Y2JmZmRhMiwgMHhjNjY1ZjZjMSwgMHg2ZTMwY2ZjMCwgMHg5MWVmNzY1MCwKKwkweDhjOGI4YzA0LCAweDAwMzczZmI1LCAweGNlYzZkM2NiLCAweGEwN2RmODhkLCAweDFiZjYxNTViLCAweDViYmNkNzM0LAorCTB4YjIyOGVkOTIsIDB4MzZjODFlYWIsIDB4NDRmNTlmYTEsIDB4OTliZjNmMjEsIDB4OWUyNjNjYzMsIDB4YmYyNWUxODcsCisJMHhmMDkxZmM3ZSwgMHhmYmIyYmMzMSwgMHg3MmFlZDY5ZCwgMHhiNGY2YzYzYywgMHg5Y2IxYzcyOSwgMHhkYWYxNTIxNCwKKwkweGYwZThhYjMyLCAweDRhNzJjNzFlLCAweGNkMDJhZWI4LCAweDViNzdjYWQ5LCAweDMxNTk2MzhlLCAweGUyMDRmN2RjLAorCTB4NDZmN2YwZjcsIDB4YzYxNGZjOTUsIDB4NmU2ZmJhYzksIDB4ZDkzYmRhM2MsIDB4MGYyNzQzNWIsIDB4NDRkNjVjNTAsCisJMHg5NGY2YzJmNywgMHgxODI0OWI3OSwgMHg2YmNiOGY2ZiwgMHgyN2I0M2Q0NSwgMHhmMjQ4ZGIyNSwgMHgyNTZlYTkzNSwKKwkweDNjNjA3M2FkLCAweDUxZWU3NWMzLCAweDQ1Yzk3MTdjLCAweGJlYzk3NzI0LCAweDExZWMxMzdmLCAweGU3ZWVmZmRjLAorCTB4MzNmOWZjZjEsIDB4MTUxYWZlODIsIDB4Zjg4OTM1YWYsIDB4MDI3Y2ExNDAsIDB4OWFjYmIwOWIsIDB4MTUxZDI3OTksCisJMHgwNGY3NmNhMSwgMHhjN2I3MmUzMSwgMHhjMDc4ZTVjMywgMHg2YzUyZmRjNiwgMHg1OGVjMGRiZSwgMHhlYzY5OTJiYSwKKwkweDk1NTk0ZmQ5LCAweDYwYzc3OWY1LCAweGIyYmY2MGRlLCAweDEwYjI4NzY4LCAweGE2YmM1ZmVkLCAweDBmZTgzMDhhLAorCTB4YzYxZDVkZmUsIDB4ZTZkZGExZjUsIDB4MzZiZTM4YTQsIDB4ZmExNGI5N2YsIDB4OWMzM2EwOGIsIDB4Y2Y1YjZjZmYsCisJMHg2N2I4ZGE3YiwgMHgyMzdlN2FjNCwgMHgxZjFlZjRlNCwgMHhlZjliNGZlZiwgMHg0NjM3MjhkYiwgMHg0NjVkYmNkMiwKKwkweGU2MjQ4ZjljLCAweDQ2MzBlYjAzLCAweDFkYTIyN2NjLCAweGRlN2JhZmFkLCAweGY3ZTc0ZDRjLCAweGRmOGMzZDRkLAorCTB4MzkyZTY1NDMsIDB4OGIwZWZkNjIsIDB4MWU5MTJhZDcsIDB4YmY0ODJhMzQsIDB4Zjk0OGQ1NzYsIDB4MmZkYjc2ZmMsCisJMHg3YTNmMGYyOSwgMHg3OTBhMTcxZCwgMHg3Mjg3ZWFiYywgMHgzNjVmYTE4OCwgMHhlNDMwZjU0ZCwgMHgxZTJhMWZjYiwKKwkweDAxNjRhYmIyLCAweDBlZGMyOWNiLCAweDYyNGZjNzkzLCAweGNhZjU4OGE2LCAweGRkYTg5MzI5LCAweGYxOGY2ODM0LAorCTB4MDk2NTY5YzUsIDB4NzRlYmQyMmEsIDB4NzBhMGRhZDYsIDB4MmU3OGUwM2YsIDB4MzE4ZjJmY2MsIDB4MmNiNzVlNWQsCisJMHg5ZmFhYzdlMCwgMHhmMGJiNzJhYiwgMHg3YjRiNTkyYSwgMHhmNzQ1ZGEwMSwgMHg5ZGJjYTcyYywgMHgzYWQzMGQ4NiwKKwkweDA1ZTliZTcwLCAweGExOTNkYmViLCAweGRmMzlmYmRlLCAweGUzY2M1Njc3LCAweGNiNzYwMzcyLCAweDhjZGZiY2JhLAorCTB4OWU0NzAwOTUsIDB4MzBmNGZiNWYsIDB4YmRhZTgzZDAsIDB4NDMzNjU3NDYsIDB4ODQ3NjgyYTUsIDB4YWVmYWUxMzEsCisJMHhlY2JmOTgzYywgMHgyYzFiZmFlMCwgMHg0NjM3MzY1YywgMHg1ZDE3YmEzYywgMHhmYjZiZmMwOSwgMHg0YjljMWY2MywKKwkweDFjNmQ5NGY4LCAweGI1NGJhY2VmLCAweDg5ZjdjNmRlLCAweDg0ZmU4ZGU4LCAweDZkODFlYWYxLCAweGJlYmQxZjMxLAorCTB4N2RlMjBhNDIsIDB4N2I3NzdiNGEsIDB4MWFmYjhhOTYsIDB4OTZkOTRmYmQsIDB4Yjg3OTVkYWUsIDB4Y2E0Njc1ZmUsCisJMHgyYmM2OGYwZiwgMHhiOWI3MTFkOCwgMHhhNGQ2Y2U5MSwgMHhhNzNjM2Q1MCwgMHhlOGNjNmY3YywgMHg4YTQ3ZWVlOSwKKwkweGUzZjdlYjA1LCAweGNhM2ZkYWViLCAweGJlNzhiYjgyLCAweDdhNzlmZWE5LCAweDA1OWJjOTRhLCAweDUwMDcxNGE1LAorCTB4ZWJlYjM2ZjksIDB4ZjdlYTM2ZjMsIDB4MjgzYTYzMTUsIDB4MTY1NGQzYzcsIDB4ZmRiZmI5MGMsIDB4Mzk0YjRlN2UsCisJMHhiZDZjYzE1OCwgMHhiYmEzNTVmNywgMHhlNWIxN2VjYywgMHhjZTQyMWJmYywgMHhkMzI4MjY2NywgMHhhN2NlNTAwYSwKKwkweGYzZmVjOTFhLCAweDIzNTMxYWE2LCAweDgzMjlkZWZkLCAweGYwOWNmZWI5LCAweDM3ZTQ4ZDkyLCAweGY3NGFjMGZiLAorCTB4Mzg1MGQ0ZDYsIDB4NDljNGVkMDEsIDB4M2VjOTE4NWYsIDB4ZDFkNGUzN2YsIDB4Mzk0MWE3ODcsIDB4OWI0YjM3ZjksCisJMHgwY2U0ZGRiMCwgMHg4NmVkMGU3OCwgMHhjNDdkNzRiZSwgMHg4NGI3NjQ5ZCwgMHg1ZjVmOTEwYiwgMHhlZDkzYTE2NiwKKwkweDRjM2IxZmE4LCAweDJkYTdiZGY0LCAweDI2NTM2YzlmLCAweDRjYWJmZWUxLCAweDZkMjlkY2M1LCAweGRjNjIxNWRjLAorCTB4NWUwMjliNWYsIDB4OTk2ZWE3OTIsIDB4NTFlN2U0MWQsIDB4ZjZkMmJmZDcsIDB4Mjg2NWM3ODksIDB4ZjAzNjU3N2YsCisJMHhiYWQ1N2JiNSwgMHg5OTk3ZDIzYSwgMHhmMTQyY2M0NSwgMHhkMjJhZjBlZSwgMHgxOWUzMWJjNywgMHhhNTZjY2JmMiwKKwkweGNmMDhiYmY1LCAweDQ2NjRlY2JlLCAweGVhYjY2ZmU4LCAweGYzYzYyZDMyLCAweGNlNjc2MTE5LCAweDQ0ZDM1NDUxLAorCTB4M2Y5NTU1MmMsIDB4NzNlN2YyYjcsIDB4OWYzZDBmMTUsIDB4NzNmODdhYWIsIDB4NmZlZmY3MWIsIDB4M2Y2MTAyNTMsCisJMHgyZDliNzdmNCwgMHhkZGZkODVkOSwgMHhmZDc5N2FhNiwgMHg5ZmQ1MGIzNSwgMHgxNzJmZmYwMiwgMHgxNzFhYzE1OCwKKwkweGI3YWU1MDUwLCAweGYzZjIzNDVjLCAweGQxM2M1ZjJmLCAweGE0YWRhMzdiLCAweDJiZjM4NWMzLCAweDM2ZmRkMjM1LAorCTB4M2VlODkzYjAsIDB4NGJjNTRlZjIsIDB4MzJmNzkxZjcsIDB4ZjgyMjA2NWYsIDB4NjRkOWQyZTUsIDB4NjI5Y2JmNDcsCisJMHgyZjRiN2JhNCwgMHhiZjBjOGM3YiwgMHg5MWE4MTQwMywgMHg0MTQyM2RmOSwgMHg2NzU3MmY0NywgMHgzNjU0ZjlkMiwKKwkweGViZjcxMzIyLCAweDQzYjI1NmJiLCAweDBmYTBmMTFhLCAweGU3Zjc1N2RiLCAweGY2ZTY0MmZhLCAweDI5NTFiZWMzLAorCTB4NjE2MWRlZDQsIDB4MDc0ODk1YzksIDB4M2JjYTY1ODcsIDB4MWU3OGUxZmYsIDB4NjUwZjk0M2YsIDB4NzM1ZWQxMDcsCisJMHg1ZGY5ZThkNiwgMHhlOWM0OWQyZSwgMHhmMjBhNjU0MSwgMHgyNTU1MGNjMSwgMHhjZGRmYWZiYSwgMHhmODhiYTM1NCwKKwkweDdkODdkZTllLCAweDJjZWU3NWE1LCAweDFmYTJiYjdkLCAweDU1NTQ2YmMyLCAweDkzYTE4Y2UyLCAweDZmYTVmNTE3LAorCTB4OGNmODNjNzMsIDB4YjNiZTQ3OTQsIDB4OWJlZmJjNTQsIDB4ZDdjNzA4NzQsIDB4ZTBiMDdjZjgsIDB4ZjRhZTRkNGYsCisJMHhmNTJhNDM5NiwgMHhhNDlhNGY2MywgMHgzMDY4MDBlZSwgMHhiZmZjODAwYywgMHg1MWNmMGNjZiwgMHg3NGNiMjQyZSwKKwkweGE5NzA2YWRmLCAweGY1ODY1MjFjLCAweGU4ODY3ZGYwLCAweDRmZTBiMDc3LCAweGNmOWU4OGY5LCAweGUxZTkwZWYyLAorCTB4ZWVmZjA0NDcsIDB4MWZiOTIxNjMsIDB4ZThjMmRiZjYsIDB4OGI0MDZhNWMsIDB4M2U3ODFkYmUsIDB4ZDE2Mzk0MDYsCisJMHgyMmFiZmM3YywgMHhkNDhmMTY4MywgMHg5ZTE3YTFlMSwgMHhkOWQ3YjE3ZCwgMHg1YzQwYWViMywgMHhjOGNiYWQzZSwKKwkweDVkZTQyNWQ3LCAweDNkMmI2ZGFlLCAweGQ1NjQ1NWNmLCAweDJkNjJmMzg1LCAweDA3ZmFlMzZmLCAweDQwYzE5MjFjLAorCTB4MzUyYWZkODUsIDB4NzgwMWNlY2UsIDB4NzEyNjQwNDYsIDB4NDk4NTkzMzcsIDB4YmFkZDdjNWUsIDB4MmI1YzQ1MWIsCisJMHhlYmQxOWQ3YSwgMHg0NGIwNjViYiwgMHhmMWNjY2JlYiwgMHhjYTZlYzk3OSwgMHgzMjZlYzk5MCwgMHgxOGMyMDA2ZCwKKwkweGJkYjBkNzhlLCAweGEzNzE2ZTNiLCAweGQ0ZmIzYjNkLCAweGU2NDM5MDYwLCAweDE4MmI1NjdiLCAweGU0MjMzZTBmLAorCTB4ODkyYmU5OTIsIDB4NTZmZGQ3ZDMsIDB4ZGE1MzU3YTIsIDB4ZmJjODgyOGMsIDB4NGY4Njk3MmEsIDB4ZjMxODMzM2EsCisJMHg3YWJhYmZiZCwgMHg0ZjhmMTA3MiwgMHhlNWEzZmUxMSwgMHg3ZjQ1NWZkYywgMHhmOWY1M2E2MywgMHhjNjJlZTM4NiwKKwkweGU5YzdlNTQ3LCAweDVjMjcwZGYzLCAweDFmOTUxZmViLCAweDFmOTUxMzk3LCAweDNmNTc0NDM3LCAweDk1MTExOTU5LAorCTB4MmEyZTM3MWYsIDB4MDc1Y2FlM2YsIDB4YWU5ODJmNGYsIDB4OWQ1MzNmNmIsIDB4MmQ2ZjgzYTMsIDB4N2RhZWFlZmIsCisJMHg1ZDRlZTc5NSwgMHhiYmNhOWNmZCwgMHg3OWI3ZjU3NCwgMHhmM2MxZDZlZiwgMHhiNWQ3ZWZhYiwgMHhkN2FiZTA1ZiwKKwkweGU1Nzc3ZmQ1LCAweDIwZjU3NDBmLCAweDhiYzY2MjJmLCAweGY3NGEzYzMxLCAweDYxM2RkMzg2LCAweDMwMTZhMGZhLAorCTB4M2Q4NjM3YmMsIDB4NTc3MjI5MjAsIDB4ZjQ3MWZlYTQsIDB4MWU0YzVmZTEsIDB4NzFlM2Y3YzIsIDB4M2IwOTNmY2QsCisJMHhjNDU5MWM3OCwgMHg4MzhiNTk1ZiwgMHg3YzVhYjFlMiwgMHg5YTc2MzQzNiwgMHhiNzIyZmQxNSwgMHhiZDQzNGQ0NSwKKwkweGY1Y2I3ZWNlLCAweDc0MzgwYjA2LCAweGRmODljYjcxLCAweDFiNzZhNGFiLCAweGZjZTliMjkyLCAweGIzYjA1MWUzLAorCTB4ZWYzMGY5N2QsIDB4ZTkyN2NmMjAsIDB4MWM2YjAwMWYsIDB4NTAwZGRiZTMsIDB4ZDdmZWJiNDIsIDB4MjIzN2NjY2MsCisJMHg5ZTJjMWU2MiwgMHgzY2I1ODVjNywgMHhlNjRmMzEwNywgMHg4YmYzZTA0OSwgMHg2MWY3Y2ZlMywgMHhmZDFmMzEzYywKKwkweDBmOTUyYjM4LCAweDQxNzNiNTNhLCAweGY2YmY2MTk1LCAweGYyODA3MzMyLCAweGVkODM0YjExLCAweDAzNmY5ODY2LAorCTB4YzUxNDQ3YzgsIDB4Yzc0ZTVlMTIsIDB4YmQ0ZGI4MzgsIDB4N2FhYTNkZTEsIDB4YjNkZDNhN2YsIDB4MDUwZDJkYjEsCisJMHgzYWE1ZDA0YywgMHgzZDFmZDFlNCwgMHg3Y2RiZWYwMiwgMHhlMzE0ZTI4YywgMHgxMWZmZWM4NywgMHg0MzNjZTFjNiwKKwkweGJiM2YzNDVjLCAweGY3YmNmMWNjLCAweDc0Yjk3ZmY2LCAweDkyNjVlNTE4LCAweDQ1ZjVlZTkzLCAweGIxZGRhN2Q3LAorCTB4NmUzN2YzZjksIDB4ZDE3N2JmNTAsIDB4NzY1YmRlZjcsIDB4ZGY2ZmY3YTMsIDB4YTIzMWI2NzQsIDB4Y2JmOWFmYmUsCisJMHgxM2NjZmViNiwgMHg2NjU5MDc0MSwgMHhhZDU1ZmRmZCwgMHhmYWUxMGVmNCwgMHgzMzU4ZGQ3ZCwgMHg0OTI3MmZjNSwKKwkweDYwNDM5OWJlLCAweGZlYzZjZmJjLCAweGUxZGI3YmY1LCAweGJlMmI0ZmJkLCAweDNiZmQxZGI4LCAweGU3YzVlZTc4LAorCTB4ZmFmMDhlZDAsIDB4MmM5NWU2NjksIDB4MDQzOTllN2MsIDB4YjNkNDdmZWMsIDB4YmU2NjJjNzEsIDB4YWRkMDVmOWMsCisJMHg0NWQzNTY5YywgMHg5OWFhNzlmZSwgMHg2YjRlNDNlMiwgMHhiMGYzZmNlNywgMHhmMTUxNmRlZiwgMHhjYmY0NjY4MiwKKwkweDQ0N2JhZjAxLCAweDhmOGI0NDdjLCAweDU5ZmEyZGRmLCAweGU5NDk0YTIxLCAweDY2MGU3M2E0LCAweDUyN2RkMDBkLAorCTB4YzVlYzVlY2QsIDB4ODYzMjhlMGYsIDB4OTM2Y2EzN2UsIDB4YzVjYTQ0MmYsIDB4YzUzMzU0ZjYsIDB4NGNjNTI0MDcsCisJMHgzMjkyZTc3OSwgMHgyODIzYmU4YSwgMHhlNzhmYTM4MSwgMHg5ODViNzYzNywgMHhkNGY2OGNmYywgMHg5MDBmMTQ1MSwKKwkweGNlMjg2MzQyLCAweGE4ODViMzYwLCAweDJmYjZiZjNmLCAweDc3ZGZkZWFhLCAweGJjZDNjZjVhLCAweDc1OWZlZWZhLAorCTB4Yzc3MDRmM2YsIDB4MWU2YTI3MTgsIDB4NDdkNjFlMzgsIDB4Y2NjMDczOGYsIDB4ZGNiOWRmYjgsIDB4ZjFiZTMzMWEsCisJMHgwZDg5OTBlMiwgMHg1ZjkxNTI0MywgMHg4MmRkNzczYiwgMHhkOGJiZmFmYywgMHgzMTJiNTk3MiwgMHg4MTE4M2U4ZiwKKwkweDY0ODY4NzlmLCAweGZlNjA1ZDEzLCAweDVjNjIzMDdjLCAweDg0OGY5N2NjLCAweGRlZTgwMjgxLCAweDZhYTBjMTA0LAorCTB4NzE0MjVhMDYsIDB4YTEzYzcwODMsIDB4NmFjZDlhMDcsIDB4YTA4N2Q5M2EsIDB4ZjcxZjcwZmUsIDB4MGE3ZTdlMDksCisJMHg1MWZjOGQ2OCwgMHgwM2VmODdlMSwgMHg1MWYyYzYzZSwgMHhkYTc2NDJiZiwgMHg4NDNmZTA3ZSwgMHhhOGJiZjA5ZiwKKwkweGE4MGJmYTBjLCAweGE5NTdlODNjLCAweDhjYmY5MGZlLCAweDFlZmQyN2UwLCAweDJiZjg4ZjgyLCAweGVmZGE3Y2E5LAorCTB4ZjhjZmU3YTUsIDB4ODVmZTA5YWIsIDB4YWI2NTQ3ZGYsIDB4N2YzZDI1N2YsIDB4ZjA0NzVmY2UsIDB4MDQ0ZGZlMGIsCisJMHg0MmVkMTJmZiwgMHg5YTI3Y2YxOSwgMHhkZmQ5N2NhOCwgMHhmOGFmZjU0MiwgMHg5YWZjMTFmNywgMHhjODY1NDgzZiwKKwkweDFmOWU4NDdmLCAweDdjMTJiN2Y1LCAweGYwNDZkZmRjLCAweGUwODg3ZjA5LCAweDk1MDc3ZjBlLCAweGY0YzNmYTZmLAorCTB4NWRmZjk0ZmMsIDB4Mjc1OGFmZGUsIDB4ZmM2NzIyNzgsIDB4NDViNDk3ODAsIDB4NzlkYTE3NDYsIDB4Y2M5NjhiNjksCisJMHg2Zjc4MDBhZSwgMHg2ZGY3NGNiNSwgMHg0YmU0MGI5ZCwgMHgxZTJlODAwNywgMHhmN2YyNjU1NSwgMHg1MjM0YWVmNiwKKwkweDJiYjM0N2RjLCAweDQ4NmNkNmY3LCAweGI5ZmFhNzJhLCAweDE1OTJkZjU0LCAweGJlZDk3NjRmLCAweDc3YmE2NmE1LAorCTB4ZWRjNTViNmQsIDB4NDZjY2I2NTksIDB4MzJjNTZkZWQsIDB4NzJiYTNmZDUsIDB4Y2Q4ZGQ5MmUsIDB4YWUzMDA1MzgsCisJMHgwNzgxOGMzMiwgMHgyNWJiNjMyNiwgMHhmYmRmOTI0NiwgMHhlZmJhZTJhMiwgMHg2Zjc5ZmQ4OSwgMHg0NWVmY2M4OCwKKwkweDIyNTM4OTFkLCAweDViNmIyMWNmLCAweGJhZjA3NDkzLCAweDdjZTUwY2I2LCAweDI1ZGNkZDA0LCAweDk4OWI2MWM2LAorCTB4YzQ5ZGY5MWMsIDB4MzNiZGY2NGYsIDB4NzlkNjAyYWYsIDB4MGY3YmU0OTcsIDB4ZmJhN2M4ZTUsIDB4MzQwM2NkY2YsCisJMHhjYmI1YTMzMSwgMHhjOGU0ZmM4YywgMHhiZWE3YWQ4OSwgMHg0YjNmZTRkNCwgMHhkYmY4ODkzZiwgMHhiZjg0Y2FhYiwKKwkweDY5YzZlYWJkLCAweDJjNWZlOGI5LCAweDEzN2JlOTkyLCAweGNmZTQ4YjY5LCAweGJmZTk5ZmQxLCAweDk5N2JhNjQwLAorCTB4YzUzMjU1YjYsIDB4YTMyMmQ5MDMsIDB4NWE0NmM3YzAsIDB4NzMwNWZmNzcsIDB4ZTliOTVlYTksIDB4OWRkMWM1MTQsCisJMHgyNzg3OGVhYiwgMHhmODAyZGRhMywgMHgzODdkYTNjYSwgMHg0ZmRmODQ5NCwgMHhkNzcxMTBjYSwgMHg5NGYxMjk3ZCwKKwkweDlmM2QxNjM3LCAweGY4YmJmZjJmLCAweDE5ZjgwY2Q5LCAweDVmM2YxMzE1LCAweGEzY2ZjMmM2LCAweDdmNzVmZWUyLAorCTB4Njg4NTdkZjEsIDB4MzFkZjY5M2MsIDB4Y2Y3YzU0N2QsIDB4Yzc5MWIwM2IsIDB4YTVkYmEzZWYsIDB4ZTYyYWI4ODgsCisJMHg0ZmY3ZDE3NCwgMHgxZjkyNjU2YSwgMHg4MWYwNTlmYiwgMHhjNTlkODA3YywgMHg3ZGUzZGQzMiwgMHhiM2VhZDI2NCwKKwkweDczM2U2MDA3LCAweDExNGE3YzhhLCAweGM4NTUwMzllLCAweDI2YzY1MTQ3LCAweDZmZmVmMjU3LCAweDg5M2YyMzVhLAorCTB4YmFmNDA1NzQsIDB4Yjc2ODQ5ZWEsIDB4OTlmYTYxN2QsIDB4MDVmYjI4N2MsIDB4N2YxOGVkNWMsIDB4OWZkZThmYjUsCisJMHg4ZGYzMTNlMSwgMHhjNWIyMTdhNSwgMHg0NDdiZjYzYywgMHg4MWU2MTRmYywgMHhhYWRiM2I3MSwgMHhmOWM3ODVkZCwKKwkweDUwNDU1OWI4LCAweDY1N2FjY2VmLCAweDc3ZmQ1ZTJhLCAweDk4MzJlZGNkLCAweDJjNWZlY2EwLCAweDJjZjFjN2FmLAorCTB4ODkzZjRkZGYsIDB4M2MwNmE1ZTMsIDB4MzhjNTc4ZGEsIDB4NTNjNTM3ZGUsIDB4NjkxNTdkZDYsIDB4Zjc1ZGVlYjEsCisJMHg0ZWJmMGYyNSwgMHgxMjI4OGUwZSwgMHhiMDA2NzRmNywgMHgxZjA3MjgwMSwgMHg5YzUyNzUzMSwgMHhjYjg2NzAzYSwKKwkweGQzMjZhNjQxLCAweDcxZThiODdkLCAweDk4ZmJjYWZhLCAweDYxOTNmMDI4LCAweGQxMGRlN2UxLCAweGY2ZWI0ZGVmLAorCTB4ZWU1NDAyNWIsIDB4YTJhZmY0ZjcsIDB4YjJjOWE4M2MsIDB4MjMzZDBlZjgsIDB4YzRjMzdiN2YsIDB4MGRjYjY1NzgsCisJMHg0MjFlNjNjZSwgMHgzNjg0MGJmOSwgMHg3ZTg5ODhiZSwgMHg3ZWYyYTczMiwgMHg5YjlmYmM4YywgMHgyNzgyN2FkOSwKKwkweDBkYzA5NGRhLCAweDhiNzYwMWNlLCAweDUxNTc1MDdlLCAweDk1YzJjNDVlLCAweDNkZTExYWJiLCAweGNhMjY1YmZiLAorCTB4YmU0YmIzNTUsIDB4N2U3NzI0NWQsIDB4ZTQ3ZjkxMmIsIDB4M2FhY2I2MzQsIDB4NjJkZmQxMTYsIDB4MWNlZDFlYjEsCisJMHg4YTM1ZjMwMiwgMHg4OGYzOWVlNCwgMHg5MWYwMWFmNCwgMHhiZGFkZjAyMiwgMHhkMWM0NTBiNywgMHg2ZjdlYmIxZiwKKwkweDE0NDVlNTEyLCAweGZiNDM4YzZmLCAweDEyYjMyZjZmLCAweDIxNGNkODFkLCAweDdmMDIzOGE1LCAweDBlZmYwMzM2LAorCTB4ZWJmY2Y0NGUsIDB4MWU1YWNjOGIsIDB4MjhlMjZkODAsIDB4ZmM2NDQ3M2MsIDB4NTFjYTMwYmUsIDB4M2VhYmY3OTgsCisJMHhkMWRlZmYwNywgMHgwZmE2NzdhMiwgMHgxN2ZjNzgwNywgMHgzODNmOWQzMiwgMHg3YmYzYzU5NywgMHg1MjM2N2ZkMCwKKwkweDIyNmJjZjdlLCAweGI1OWRmODVlLCAweDJjM2Y3NDE1LCAweDRmZjQ0YjFkLCAweDc4MDU0ZmQxLCAweDg2YTY2NmZjLAorCTB4OGQ5ZjdkZjAsIDB4YWY5YmMxZmMsIDB4ZWQyMmU3YzksIDB4ZWMxNTI0MTIsIDB4NDY0NWRjNmYsIDB4NWQ3MWU1ZjEsCisJMHhkODNlZWViMiwgMHhmNmZhOGI5OCwgMHhmYTEyZmZiMCwgMHhmYTlkZTliNSwgMHhmZTQyNjk3NiwgMHhlOGRhNDczYiwKKwkweDFmNzY5ZDFlLCAweGRlZTVmOWNmLCAweDEzZDI3MmMyLCAweDFmZmYyNGYxLCAweGU3ZTI2NTUzLCAweDA3NmQ0YWM3LAorCTB4MmI3NmRkYjAsIDB4YTI3ZTg0YmIsIDB4NDE1NTgxN2QsIDB4OGNlZWQwMzksIDB4MWI2YWI5MjcsIDB4ZjNmNjRmMTEsCisJMHhkNmEzY2NmNiwgMHg2NTlmYzA0ZSwgMHhkYTBhM2JlNCwgMHhiZTJkMDMyYiwgMHg3ZWJiMTgwMywgMHhiY2M2NjhiNCwKKwkweGM3MjQzMWY0LCAweDVjMDNiZTdiLCAweDJmMDc3YTA2LCAweDczM2MxMDM3LCAweGJkYTY5MjBmLCAweGU5ZGY0OGQ4LAorCTB4NjMzNDVmZGEsIDB4YjY4YzgwNGYsIDB4NWI5NzlhMTYsIDB4N2NmMzA2NTIsIDB4MzU3ODZlYzAsIDB4OWM3NjBkZGEsCisJMHg2M2I0MThmYiwgMHhkMGUwMWVhMCwgMHg5NDAxZGY3MCwgMHg3NTI5ZTk0NywgMHhjZDU3NDhlZCwgMHgyOTJiYTNiNiwKKwkweDQyOWE1ZDBlLCAweGFiZTRkNTcyLCAweDY4OWNhMTBiLCAweDkxYWM0YjU2LCAweGM5ZjFhZGZjLCAweDFhZmJlNWI3LAorCTB4M2FmZWY3MTEsIDB4N2ViYWZmZmUsIDB4NGRmM2UyZmIsIDB4ZmFlZjljODUsIDB4N2U2ODAzOGEsIDB4OWE3Zjc0N2UsCisJMHg2MGM2ZmY1ZiwgMHg5MGEzN2VmZSwgMHhlNmIzODFlNywgMHg3MGJmNzI5OCwgMHg2NTI3OTcyOCwgMHg1NjYxZWYyMiwKKwkweGFmN2QyNTRhLCAweDUzYTA1NjdkLCAweGExZDNmY2E2LCAweDliZDgwZmRjLCAweDg2N2NhNzZhLCAweGMyMTY2ZWJkLAorCTB4MDE2MDc5ZjgsIDB4MmJhNDBmZDcsIDB4MjliMjllODgsIDB4MDg2Y2Q1NGUsIDB4M2MxYzgxMmIsIDB4NzBiOTBkMGYsCisJMHg5N2UwOWM1ZiwgMHhkMTdiZmZlMSwgMHhhNDE4ZDBiYywgMHg3ZDA1ZDhlZiwgMHgzOTNkZjg3MSwgMHgxN2U3NDdlOCwKKwkweGM1N2I0YWQ4LCAweGQ3N2VjOWFiLCAweDFmNzhkMGUyLCAweDQzOWJiZjFmLCAweGEwOTgyMGFlLCAweDdkMjM2YWY2LAorCTB4YmRmYTI2MWYsIDB4ZjBmNGJiOWIsIDB4Nzg3YTZiODQsIDB4ZTc3ZmQzMjIsIDB4ODdhYWRjYTUsIDB4Zjg3YTJiMjcsCisJMHg2ZTQ3MjE1MywgMHg5ZjNmZDc0OSwgMHhmZGMzZDJlYSwgMHgzMzhjMWMxNywgMHgxNDE1ZmJmMiwgMHg4MjhlZDJhZiwKKwkweGM2MGVmN2UxLCAweDIwMDgwNmM1LCAweGZjYTE2YTQ3LCAweDZiOWQwMWEwLCAweDNmMzQxZTQ4LCAweGJmZjg4MzM4LAorCTB4N2M3ZDFhZmYsIDB4NmRkNTlkMzgsIDB4OWM2MDM2NDksIDB4NTlkY2ZmNWEsIDB4ZWZkNjg2NzQsIDB4MDczZmQxYWMsCisJMHhmYzYwZTgzYywgMHg3ZGQyMDllYywgMHgzYzlmNzBjNSwgMHgzODdmZTYxNCwgMHhlNjU3ZTc5ZiwgMHg3ODY5ZGU0OCwKKwkweDVhMDI2M2U0LCAweGZkZjkxNWJiLCAweGRiOGZiZTc2LCAweGZlMGI1ZjY0LCAweDRhZGIxNmJmLCAweGEwYWYyODUzLAorCTB4YjVmN2MyY2MsIDB4Zjc3YzU4YWIsIDB4ZGY4NTI1YTYsIDB4YmNiMzVlZGIsIDB4YTY3ZjBkYzksIDB4ZmJhNmNjOGQsCisJMHhmZWRkNmRkOCwgMHgyYmU0OGZiNSwgMHhlMjkxYmUzYiwgMHg2NDZiN2JmZiwgMHg4Njc2YWVmYSwgMHg4NWViNDAzNSwKKwkweGM1ZDE1Yzc1LCAweDVjYmEzNGE5LCAweDYwNDljZmMwLCAweDU4N2FiYTNkLCAweDNkM2QxNWNmLCAweGE4NzQ0NDNjLAorCTB4MzFmOTBiYWQsIDB4ZTQ1ZWIxMTAsIDB4ZmI0NDQwYzMsIDB4NzJmYjg2ZjcsIDB4OGZjOGRkNzEsIDB4NzJlM2NmOTEsCisJMHgwZjc0NGQzYiwgMHgyZmE3YWM1OSwgMHg0MmU0ZDRiZSwgMHhkNjhmMzg5OSwgMHgxMGJlZDJmMiwgMHg2OTc5NmE2MywKKwkweDY5NWU0NTFiLCAweDg3OGY0MzliLCAweDUxMjdhYTJmLCAweGYwOGJlMTFjLCAweDBjNWY3ODljLCAweDBmYmU0NTNlLAorCTB4YzdiZTczZTQsIDB4ODdiYzNiNzIsIDB4ZmFlN2JkN2MsIDB4MWUzOGE5ZTIsIDB4YzQ0MDgxY2EsIDB4MDg0ZTFiZjcsCisJMHhlZDg3ZmMzYSwgMHhiYjI4OTZjYSwgMHgzZmJmZWNmYiwgMHhhZWM4Y2Y1OSwgMHhlYjBhMWNhYywgMHg4ZTc4MWRhYywKKwkweGRmMTc0ZmRmLCAweGY0MjEzYWI3LCAweGU5YzA5NGJlLCAweGViYmNhZmE2LCAweDU2YmM5ZWZhLCAweDhhNWJhZTJiLAorCTB4MTJiYmUzY2EsIDB4MDIwZGFmODUsIDB4NTdmYmRhNWYsIDB4ZDNjMjZjOTQsIDB4NmI3MjhlOTUsIDB4NDI2Mjc4NWYsCisJMHgxZjIxMzIzZSwgMHhiMzJhN2JmMSwgMHg0YzZlY2ZjYSwgMHgzYTViMTk1NSwgMHhmODc5YjlmNCwgMHg3NzU5ODg3ZCwKKwkweDAyY2QyZDlkLCAweGQ3ZDBmMzc4LCAweGIzZDNmYzM4LCAweGE2ODAwYzJmLCAweDJkZmNmZDFmLCAweGY2N2MzZjBlLAorCTB4ZjkxNTRjOGIsIDB4ZTFlNzNmZjIsIDB4ZTIxYzIzZjcsIDB4YWY5YjQ1ZGMsIDB4YTFmYWRlMzYsIDB4Yjc1OGRlZGMsCisJMHgyMzhmMWNlOSwgMHhiZjNhNWVjOCwgMHhjOTdhNzdhYywgMHhhNTJjZmZjZiwgMHgwN2U3ODFjYiwgMHg5Y2JiNTJlYiwKKwkweGQ3MjA2ZTRiLCAweDQwYmE2ZGQ3LCAweGU5ODYwYzcxLCAweDVmMzBhMzUxLCAweDlmMTI5MTg4LCAweDU3YzdlNWFkLAorCTB4MWRlM2YzZWEsIDB4ZDdjNGQ1OGUsIDB4NTA1MDE2MTYsIDB4M2Q1OWM1ZGUsIDB4N2Q3ZTdlNzQsIDB4NzNlNjhiYTgsCisJMHhmOWFiNTMxYiwgMHgwZjJiYjlmOSwgMHg1ZGQ2NjdmNywgMHg1ZmY2OTg4NiwgMHg4ZjkxNTBlMywgMHg2OGRmNDJjYSwKKwkweGYyZjIyNjVjLCAweDc2ODk5NGU3LCAweDcxMTdmOGNhLCAweDllOGNkYjljLCAweGZmZmJkNDQ2LCAweDJhNTE2NjNhLAorCTB4YmYyZDA5OGEsIDB4M2RjZjQ4NjksIDB4ZTZkZjQzYjcsIDB4MGZhY2U0ZmUsIDB4MjQ1NzVjMGMsIDB4NTNmMTc4ZjIsCisJMHhjZjM0NWRjMywgMHhlYTAwMzhjOCwgMHhlNWY2YmU4NSwgMHgzZDUzZDA4OCwgMHgzOGExZTJmYiwgMHg4N2IyN2Q2NywKKwkweGU1ZDI4YmVmLCAweDkyZmI4MmQ4LCAweDVhZGNlNWQ0LCAweDdiZmFmN2Q0LCAweDNlMTQ0ZmVkLCAweGNkMzI4NzVhLAorCTB4N2U5MDk2N2UsIDB4ZGE3ZjBlYmYsIDB4NjA3OTY4ZmUsIDB4MWU1NzA2ZjUsIDB4ODcxNzJiZDksIDB4NjA5ZmUyZTgsCisJMHhmNmJjYmJlOCwgMHg3MThkZjRkOCwgMHhhNzM2MGQ0YSwgMHg2NDhlMjk3YiwgMHgzMDBiNTE0YSwgMHhlZmZlYjg0ZiwKKwkweGU5YmNjYzUyLCAweGI3NGU4MjczLCAweGJlZTllMjM4LCAweDRjYzNiZDc1LCAweDFkZGFiZGY3LCAweDYxZGExODNiLAorCTB4YzIzNmRiNTYsIDB4ODlhMzg1NGIsIDB4ODM1YzllNjEsIDB4YjdkMmI1OWIsIDB4ODJmMmEyMGYsIDB4NzkwYmVjMWIsCisJMHg2NTlmMmE3ZCwgMHg4ZTRkNTRjMywgMHhjNmQ2N2U3MSwgMHhkYzk0YWFiYiwgMHg3NzJhMmUzMCwgMHhhM2FmZmZmMiwKKwkweGYyNDc3YWFmLCAweGVjMWY5ZTM0LCAweGIwN2U1MzMwLCAweDhiYWU2ODk0LCAweDI2ZGMxZjk1LCAweDVjNzY4ZGVjLAorCTB4ODNhZTBhNTcsIDB4ZjViNGM5YzcsIDB4YWYzYzVkNTgsIDB4OWM2MzlmMTEsIDB4ZDFmMmVjY2MsIDB4YWRhMmUzZmYsCisJMHg4N2VjNGRiYiwgMHhhYWUyZGVkNiwgMHgyNWVmMjg2MywgMHhmOTQyZWFiMywgMHhmZjczYzUyYSwgMHg0MTQ3ZjUxZCwKKwkweGM2ZDQ5Yzg0LCAweDg5YTg3ZTdmLCAweGFlMWIwYmRmLCAweDJiMzVmY2YwLCAweDdlYjMxN2Q3LCAweDdmMTk4ODZiLAorCTB4ZjM1NDNhYmYsIDB4YmYxOWJlYjcsIDB4ZGIzMmY0NjksIDB4MzQ2MWYzYzgsIDB4MzM2YjllYmUsIDB4OTgxZWQwN2IsCisJMHg3Y2E3NGI2YiwgMHg4MDQwYjk5ZCwgMHhkYTIzOTMxNywgMHhiZjNlNjc3ZiwgMHhlOWFiMjliZiwgMHgxYmJmNDc0OCwKKwkweGRmYzVlMTM3LCAweDRjMzZmODAxLCAweGY2ZjRmMTE3LCAweDZiZGQxMzU0LCAweDNjYzBkYjdhLCAweGU3NDY1MmU4LAorCTB4NDliZDdhMjMsIDB4Yjc5YTcxOTMsIDB4ODBkYjM4Y2UsIDB4MzFkODc4NmMsIDB4Y2JlNTA0YmUsIDB4MTM3MjhlZTEsCisJMHgzYjAwNjdkZSwgMHhjYTE4NmUyMSwgMHg0NmVlYTU5OSwgMHhiZjMwZWZiYywgMHg3ZmJlOThhNiwgMHhkNzdmYzVhMiwKKwkweDQ5MzAzZDA5LCAweGRkYjAzOWYyLCAweDlhM2Y2MzY3LCAweGRlNmM0MTU1LCAweDdmZGY0NTk1LCAweDg4ZGZmMTE0LAorCTB4YmI0NGZkNzYsIDB4YWNhMjZlZDMsIDB4YzAzZWZhMmUsIDB4NDVlOGU1MTUsIDB4ODNmNjhiOWYsIDB4ZjFhMjFhZjIsCisJMHhmOTEyZmI4OSwgMHg3MjY5OGJmZiwgMHg4YjNiZjUwMiwgMHhlMTIzYjNiMiwgMHg5NDlkODllZCwgMHhhOWU5YWY2ZiwKKwkweGNkZjIzZWE2LCAweGYyMTMwZGI2LCAweDcxNGZlMzUxLCAweDdjYzcxMDllLCAweDY0OTNjNDU2LCAweGYzN2I3MmYwLAorCTB4M2Y0ZmQzYzgsIDB4MzdiMWVjZWQsIDB4YTQzZDA4NzcsIDB4ZDA1MDkzZjUsIDB4MjIwOTk1NGEsIDB4NzhhMGM0ZWYsCisJMHgyNTY0ZmU4OCwgMHg3NTgwMWU5MCwgMHhmYjE5N2QzNiwgMHg2MWRjZjg5ZSwgMHg3MTZkOGU1YywgMHhmNmM3NGI2ZiwKKwkweDNhNmFiOTE1LCAweDc5ZDE0YmZhLCAweDUxZWVmNWRlLCAweGY1N2ZjOGU5LCAweGFhZmQzNTUzLCAweGFmZjkyMzVhLAorCTB4N2JmZjlkZGQsIDB4NzViNDJmM2MsIDB4YjllNDU4OTgsIDB4YzY2OTc0N2MsIDB4ZTQxYmI1NzMsIDB4ZmRjNTliZWQsCisJMHhjNzQ3NmRjOCwgMHhiY2JlMzE1OCwgMHhjNjEyNTZjZCwgMHhiNjZkZDlmMywgMHhiYjcyMTI5NCwgMHg0NzhmM2M2YywKKwkweGYxYjM2ZjZiLCAweGNhOWIzYWJjLCAweDFiMzZkNWUzLCAweGYyZDM3YmNmLCAweDI3ZGRkYTZmLCAweGJiNWEwZjA4LAorCTB4ZmVmOGMzZTEsIDB4ZmY3ZTU0ZDksIDB4NTIwZDVlMjEsIDB4MWJkOTM4YmIsIDB4YjhhY2JjYzAsIDB4NjZmNjQ2MTQsCisJMHhjNzdmOTU5YywgMHhjOGMwYTEyZiwgMHhmOWZjMzFhYywgMHhlYTI2NjE4MiwgMHg0OTY2NWI2NywgMHg5YjU0ZWM5OCwKKwkweGQ4NzY0MmVjLCAweDRlOTI1ZTk2LCAweDBkZjExMjcyLCAweGJiZGJkNmUzLCAweDE5Zjc0NWYxLCAweDZiN2MwODU2LAorCTB4ZjNiN2Q0ZmQsIDB4YTliZWRlNzUsIDB4MDhjNTZlNzIsIDB4OGJiZDEzYjQsIDB4ZDliNzRlOTAsIDB4YmYzMTU4OTYsCisJMHhkZTk3YjI1NCwgMHhjM2Y1YmZiMCwgMHhjYTdjYmEwYywgMHg3OTk0ZmU5ZSwgMHhkODE1YmZhMiwgMHg1MTJmNjQ5ZiwKKwkweDhiMTMzZmIwLCAweGZhMGNmZmZkLCAweGJiZmViY2M1LCAweDgxOTgxNWU3LCAweDYwZTNkZjQ2LCAweDllNGZiYjRjLAorCTB4NjhjZjRiMWUsIDB4NDM5YzU1YTUsIDB4MGZmN2JmNDQsIDB4ZmFjZDk1ZGIsIDB4OTNkODI1NzgsIDB4NzU4MzBkMGYsCisJMHgzYjllNjZkNSwgMHg3MDllOTEzMSwgMHg1ZTMxYjI3YiwgMHhkODQ5MTc3YywgMHhkYmMyYjI4NSwgMHgzZGY5MWEzNywKKwkweDYzN2JlZDRkLCAweDI3Mjg5ZDlhLCAweDczZDBmMWU5LCAweGMzZWY4YTdmLCAweDMxYzc4NTU1LCAweGM1MThkYWFlLAorCTB4ZjlmOWEyNTcsIDB4YmE2M2E5ZWEsIDB4NjdhODEwN2IsIDB4YzZkZWMyM2QsIDB4OGY0OGVkMTIsIDB4Mzg5NWNmMTksCisJMHg4ZWZjNmI1ZiwgMHgzZjI4YmE3NywgMHhmNzdmOWFhYSwgMHgyOTE4YTZjNCwgMHhmNDAwYzI1ZiwgMHhkZGFkNzQ0YiwKKwkweDhhNGFmOWRmLCAweDExNWQ3ZjY5LCAweGFiNDg2YWZiLCAweDZkYmY4OTUxLCAweGEzMmM0MmExLCAweGYzYmY3YmY5LAorCTB4ZjNmMjIxNTQsIDB4ZmFkZDY5ZmUsIDB4NmQ3NWMxNTYsIDB4ZjdlNWNhNDgsIDB4NTY0ZTRmMTcsIDB4NWZjM2Q5NjIsCisJMHg3MWMyNWY3NywgMHhhNGRkYzc2ZSwgMHhjZjVjOWQ2NywgMHgzZmJlYmZmZSwgMHhhZjM0ZThkMSwgMHg2NmRlYmQ0NCwKKwkweDk3ZjdmYmQwLCAweDUwZmRkYzg1LCAweDlhZmQ4ZmYwLCAweGRiYmNmNzRjLCAweDIyZWY3YzhiLCAweGRlOGM5OGJkLAorCTB4ZmIwN2Q0NmEsIDB4YmY5MzY2ZWIsIDB4NTAxZTAzMjQsIDB4MzBkZmVlZWYsIDB4YzBhZjJhMmQsIDB4MDhiMGZlZjcsCisJMHgzMjZiMmU3ZSwgMHgxYWE2NzdkMywgMHhiZjIwOGZjMCwgMHhhMzFmNmEyZSwgMHhiN2VkYTdmMSwgMHhmOWFiZGIwNiwKKwkweGJmYjY5YTM5LCAweDIxNmNkMzEzLCAweDc2NGJiNzkxLCAweGI5NjUzMzg3LCAweGIzOThlNTAxLCAweGQ5ZjA2N2RhLAorCTB4ZWM5ODdkYjEsIDB4ZmRkYWJlOGQsIDB4YWQzYmM4NGMsIDB4YjdmYjBkYmQsIDB4M2M0YWZjZTEsIDB4OGM0YzdiZmMsCisJMHg2YjI0YWVmMiwgMHhlYzdmZmZlYywgMHg4MTBmMGEzMCwgMHhjYmFjMmIxZiwgMHg4MmFhNzQ3MSwgMHhlZWMyNGFmZCwKKwkweGU4ZjkxNDZkLCAweGQ1YTk0YWY1LCAweDk0YmVmMTEzLCAweDE0OWQ2YTU0LCAweDdkZjUyZjQxLCAweDg3NGE4N2M0LAorCTB4OTQyYmRiNzcsIDB4ZmNlNWE3ZTcsIDB4NjBhZjY4NGIsIDB4YmU0ZDlmNWUsIDB4MjA0NzFkZGMsIDB4Njc1ZTIwZmYsCisJMHg0N2UzNmEyZiwgMHg5Y2Y3YmI5ZiwgMHhiZTNhNzNiMywgMHhiZDkyOTRhYSwgMHhiYjAxOGYyOCwgMHg0MzA3ZWMwMCwKKwkweDQ4OWJkMmQyLCAweDNmN2M5YTNmLCAweDc0M2MwMzRlLCAweGZjYTE2N2JkLCAweDNmMDVmN2RiLCAweGVjN2UwYTc2LAorCTB4ZDgwNTZlNGIsIDB4YjdkY2JhNTEsIDB4NGJjNzFkOTUsIDB4MjUyNzQwMWUsIDB4ZjUyNzQ4ODksIDB4MzlkZDQ2OTksCisJMHg4YjE2NTY4YywgMHg1ZmIwYzY3NSwgMHhmYzhmODdmMiwgMHg5MGNiZjY0NiwgMHgxN2VjMzFlMSwgMHhjZjIyNGZiNCwKKwkweGYxMmVkMWNmLCAweGI0NDVjODQ0LCAweGVjMzEzYzRiLCAweGYwYTM2Njk3LCAweGU3NzljNGRmLCAweGFkYWI5MzY5LAorCTB4ZmE3MGYwMTMsIDB4Y2VmYTQ0ZTYsIDB4ZGJiNDY5Y2QsIDB4ZmIzZWMwNGEsIDB4ZGM1Y2Q5ZTksIDB4ZWU4NjU5OTQsCisJMHgzYjA4NTNlZiwgMHg3NjBjMTE5MSwgMHg1ZTcwNzdkYSwgMHgxYWJiY2M1NSwgMHgxY2Q2ZmZmZiwgMHg4ODNmMWJjOSwKKwkweGZmZDE5N2U3LCAweGZiNzVmMmFiLCAweDQwYjgwNzE5LCAweGZiYzc2Y2JjLCAweDFmNzQ0NTcwLCAweGY5ZDYzMmFlLAorCTB4ZTliYWY3ZGEsIDB4ODg5NzQ1MDQsIDB4NjAxZTExYzMsIDB4NWJlMjIyMTcsIDB4NTE3NmUyYmQsIDB4YTMwYzNhNzEsCisJMHhlNmZkZTc3NCwgMHhmZGJmNmVmNCwgMHhkYWUyODFiYSwgMHg4ODJjN2QzYiwgMHhiNWJmYjlkZiwgMHg3YjU3MWY0YywKKwkweGVkOTllNDQzLCAweGNmODhjYTVjLCAweDg2YjQxNjc2LCAweDUzNDk1ZmQwLCAweGFiYzljNTE5LCAweDczZjZmYTNjLAorCTB4ZTNiZmEzMmEsIDB4ZGRiZjhmYWMsIDB4Y2Y0NTM1ZTYsIDB4ZDZlYmJlOTcsIDB4YzA2ZmFjNWYsIDB4OTcxNGQ1ZWUsCisJMHg4YjhmMTVlYiwgMHhmYWQxYzM4YSwgMHhmMjk0M2Y1MCwgMHg0NmFkYmM3OCwgMHg2ZjY1NWY5ZiwgMHg3ZGRmNDE5ZSwKKwkweDEyYWVhYzY2LCAweDM0Y2NlN2Q3LCAweGRhOGY4YzMyLCAweGNmZjNhM2FiLCAweDFlY2YwMjAyLCAweDllMWE1YTEyLAorCTB4ZDg3OGVmYjUsIDB4N2JmYzhkOGEsIDB4NTQwOTgxYTQsIDB4ZTFjMWU1YWYsIDB4M2EyNzA1ZjcsIDB4NWI2NWQ2N2IsCisJMHgyYzUzZTYyZiwgMHhkODgxYWNlMiwgMHhmMTg5ZGFlYiwgMHgyZTU3Y2M0NiwgMHg4M2M0ODMwYSwgMHgzMDJlNzBmZSwKKwkweGEzMGQ0NjRlLCAweGJhYzI5OWVmLCAweDg3MDVlNzc1LCAweGQwMzU2Zjc3LCAweDAzZTE0N2ZmLCAweDNjMjZlZDcxLAorCTB4OTgxM2NmZTgsIDB4NWFmYjQwY2YsIDB4ODA3ZjNmYTMsIDB4NjhlMGVhNzUsIDB4ZWNlYmZlYmIsIDB4YjNiYmMzZjksCisJMHg1OGZmN2U2MywgMHg1MDM4YjUyYiwgMHg3NjEwZjhhZiwgMHgzODNhNDgwMCwgMHg2Y2E3N2M1YywgMHhmNjhhMWIyOCwKKwkweDIzNzhhZDhkLCAweDRjOTVjM2VkLCAweDBhY2FmNzllLCAweGExYmI5ZjYyLCAweDBkZGY4ZjlkLCAweDMyN2M4YTlhLAorCTB4YTY3OWZkMTIsIDB4ZjMwMmNlZmIsIDB4NmY5Zjk0YzgsIDB4MzU3M2UzMjgsIDB4YTY3MmYzZjQsIDB4ZDdjNDYyMmIsCisJMHhiMTMwNzg5NiwgMHhiY2ZmZjA0YSwgMHgxZmEwZjc4YSwgMHg4YzAwYjE2NywgMHhkZjEwNjNkZiwgMHhiZGM0OTY5ZiwKKwkweDI2MDYyZGE0LCAweGQ1MTRjYzIzLCAweGI1ZTRmM2NhLCAweGU5MDQzY2VmLCAweDhkN2QwZjNiLCAweDhiMDc3ZGEzLAorCTB4ZGE3YmY4MDUsIDB4MzdkZmQxMzgsIDB4NzRmYmQxYmEsIDB4N2U4OTRkMWYsIDB4M2FlMjgyYmYsIDB4ZTE3ZGY4ZGEsCisJMHgxN2VmYWZiZCwgMHg5ZGZjYjFmZCwgMHg5NTNlM2M5MSwgMHhjMzVhNzQ0OSwgMHhlYmE3MWZiNCwgMHgyYjc0ZGRjNSwKKwkweDUzYjgzYzkzLCAweDBmMGY0ZWFiLCAweDc3M2U3ZTQ1LCAweGY3NGE4MjRmLCAweDA0NzViNTZmLCAweDhlYjQ0YmE2LAorCTB4Zjc1ZmQ5NmYsIDB4NTk1ZGQyM2MsIDB4NTg4MWRlZmMsIDB4ZGJlZmU4OTcsIDB4MTE3ZThiYWUsIDB4OTMwMWFjZjIsCisJMHgxYThlODE2ZiwgMHhjZjkxZWY4MSwgMHgyZTkzMjk2YywgMHhhMTBlNzRjOSwgMHhiZjhiY2ZiZiwgMHgzNWZkMTE3MywKKwkweGY5NDkzZDFjLCAweGJkYzQ3YjNiLCAweGE3NWM2ZDcwLCAweDhhMDQzM2VhLCAweDNjMTA3ZWYwLCAweGQwOGYxMThmLAorCTB4ZGY4Y2E1Y2EsIDB4ZjVlNmQyOGYsIDB4MzUwNDAxN2YsIDB4N2ZlMDVmNmEsIDB4MDAwMDdmZTAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgY3NlbV9pbnRfdGFibGVfZGF0YV9lMVtdID0geworCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4ZTczM2ZmMDAsIDB4NTFmODYwNjIsIDB4MzlmYmMxMGYsIDB4NzE2ZTE4MTksCisJMHgwMTQzZjgyMiwgMHhkOTQzMzExNywgMHgxMDE3ZmE0MCwgMHg2MDY0NjNiZiwgMHhiYzQ4Y2Y3OCwgMHgwNDBlMzU3ZSwKKwkweDAzM2IyZjdiLCAweDNlMjAwYWMzLCAweGZlZjAzZWMwLCAweGM5NWM0ODFhLCAweDRlYmIzZjRkLCAweDYyMmVkMWQwLAorCTB4MDY3ZTJlZjAsIDB4MGMwMjNkODYsIDB4MTA4MjU5MGMsIDB4NTQ0MTdmZmUsIDB4MDhmY2RkZjksIDB4NjUxODk4YjYsCisJMHhmNTAxMjk3NiwgMHg5MzMyMDAwMywgMHgwMzgwMDlkMywgMHgwMDAwMDM4MAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBjc2VtX3ByYW1fZGF0YV9lMVtdID0geworCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RkNWZmMDAsIDB4YzU1NDdjMGIsIDB4YmRkY2Y4ZDUsIDB4ZWVjZGRkOGYsCisJMHgyMTA3OWIyNiwgMHgwODZlM2MyMSwgMHg0YmM2MGEyMiwgMHg5YmFkZTEwMiwgMHg4OGI0NjIwNCwgMHg3ZDYwOGE4OSwKKwkweDg0MjAxODJkLCAweDk2ZDIyMjQ3LCAweGVkZjdlZDdlLCAweDVhYjExMDYyLCAweDY4ZGIxNTFiLCAweDM0MTA1ZGIxLAorCTB4MDYwYjI4ZGEsIDB4MmRmMDk4MGMsIDB4YWE1Njk0YTAsIDB4ZDFmNThkZjEsIDB4OTBjYmM4YTAsIDB4Zjg3ZTg3ODQsCisJMHhjZTdmZWI2OSwgMHg3YmJiYjk5OSwgMHg3YzQ4NmVlZiwgMHhmZWZkZmJmNCwgMHg3MzBlY2ZlOSwgMHgzMzk5ZGVlNywKKwkweDljZTczNWU3LCAweGM5MmIzMzM5LCAweDIxMGNiMTAyLCAweGJiZjgxYmU0LCAweDIyYWQ5MDljLCAweGE0NmM2NDIxLAorCTB4ZTVhMjJhZWMsIDB4NzlmYzQyMTgsIDB4ODEyNmMwOGUsIDB4YWZhZWQwOTAsIDB4NDIzNDkwOGUsIDB4NTRjZDM2NGUsCisJMHhlYzg0ZDlhZCwgMHgyZTg0NzNjZSwgMHgwMzI3ZWRhNywgMHg2ZDJiMDE4NSwgMHg3NmY2ZGUyZiwgMHg0YmViNDRhMiwKKwkweGI0MTI4OWI2LCAweGYxZDk3NjViLCAweDQyNzVjZWZiLCAweGQ2ZDVlYTAwLCAweGQxMjYwN2I2LCAweDkxMzZmNzdhLAorCTB4OTM1ZGEwNmMsIDB4ZDI0MmQzOTAsIDB4MjM2MjM5MDksIDB4NjE3NTRmZWMsIDB4NTU5ZGJlN2QsIDB4N2RkZmFjOTcsCisJMHhkOTU3OGMyYiwgMHhmYTc2MjU2YywgMHhkMTI2OTFmZCwgMHg5YjY1ZjUwMywgMHhlM2ExMDA4NCwgMHg4ZjcxZDkyZCwKKwkweGI3ZjY4MDMyLCAweGVkMDQyMDIwLCAweDdhNmZhZDJhLCAweDg0NWQ1MTUwLCAweGZkZWJiNWRjLCAweDIxMjc3NmM0LAorCTB4YTIzNjdjMjcsIDB4Y2E4ZjM4MmEsIDB4YWE0MjI4ZTAsIDB4MDY0YTViMDIsIDB4MWFhYmVmZDAsIDB4ZmI0MmNkMDUsCisJMHhhYTc3NWFhZiwgMHg2YWFiZTAxMywgMHg2OTEwMmY5MiwgMHgxYzFhOGI3ZiwgMHhjNmMxMWQ0NCwgMHg3OGMwODZmZSwKKwkweGJjNzAzYjdiLCAweDE4MzBmMjZkLCAweDNiZWJmMmFmLCAweDNjYzIyMjE1LCAweGI3N2MwZjY1LCAweGYzMDFjMjg0LAorCTB4ZTEzZGM3ZDYsIDB4NzRmMWM3YWIsIDB4OWE3OTJlN2MsIDB4NWJkZjQ3OGUsIDB4YzFhMDljZmEsIDB4ODg1YTk3MTQsCisJMHhkY2U4ZTAxNywgMHg4NGZkOWY2MSwgMHg1MmI3ZTYxMywgMHg5ZThhZWUxOSwgMHgzMGVkOWNjNywgMHg3YWMwYWE4ZiwKKwkweGYwMDljNGE1LCAweDhmZTY1N2FkLCAweGE4YjdmNDhhLCAweGY4NDZmN2UxLCAweDdiZmE3M2VhLCAweGU1Y2RkYWEzLAorCTB4ZTk0NTFmMDksIDB4OGFiZDQ4ZjAsIDB4ZjY5MDRmMTAsIDB4NTI4MGE0NGIsIDB4ZjllNDQ5N2UsIDB4ZDIzMjQyMDcsCisJMHg0ODgzNTE3YiwgMHg3ZmE0NWI1NCwgMHhmYTQyNzk0YSwgMHg5YjdmZmZkMSwgMHhjMWUyOTNmZSwgMHg2YzBhZWFkZiwKKwkweDZkZDA4ZWNhLCAweDE2NjgxYjk5LCAweDM3NjlkYmExLCAweDVkZDRhM2E3LCAweDVlYmZkZDEwLCAweGEwZjQwMDNlLAorCTB4ZGNmOWQ0ZjAsIDB4Y2JlNDNlNTgsIDB4NGZhZDcyYzAsIDB4ZDZmZGJjNDUsIDB4N2FjYjAyMzcsIDB4MWZjZjg2OWYsCisJMHg3MmM3OGRmMywgMHhlNTgzY2Y5ZCwgMHg1OGE1N2MxZiwgMHhmODY1N2MwNiwgMHg2Y2RmMDZkZSwgMHhiY2ZhMzcyYywKKwkweDVmNDlmY2Y4LCAweGJlMGQ5NjI1LCAweDhjZmU3YzFhLCAweDhkOTYwNTZmLCAweDdmM2UzZjNlLCAweGNiMDZiN2NlLAorCTB4Y2IwZWFmYTAsIDB4NWEyZjQwYWQsIDB4ZjgwMmY5MzYsIDB4MDM1Zjc2ZGUsIDB4MjBiZWNkOTYsIDB4NmJlOWRmM2UsCisJMHg4ZTdlZjJjNiwgMHhhNGM5YzRjNywgMHg0ODc4YTI1MCwgMHgyNTM3MTBmNCwgMHhlZTk5NDkzYiwgMHgzZDY5OTQyOSwKKwkweGQzZDU4Y2E1LCAweDJhMTdmNjZmLCAweGE1ZWU5ZWI0LCAweDAxOTc4YTc1LCAweDU2ODU0MzhiLCAweGMzNTAxZjVhLAorCTB4OTJmZjA3ZGEsIDB4N2Q2OGQ5MTQsIDB4MGZiNTlmYjAsIDB4NjQ1M2RmYmQsIDB4NzVhMWY1YTcsIDB4M2FmODdkYWMsCisJMHhhZDAyNTE3ZiwgMHhmNmIwMGYwZiwgMHg0NTQzMWI4YiwgMHgzOGJmNWEwZSwgMHg1YjczZGFjOCwgMHhkNjkzYjE0OCwKKwkweDllYWM0MzczLCAweGVjNTNjMDc3LCAweDM2YmNmNWEyLCAweGMwZjgyZjU2LCAweGViNDg5YzVmLCAweGZiZWNlZDA1LAorCTB4NTEwMTFkODksIDB4NjFkMmM2NzUsIDB4NGVkZWFjYWIsIDB4ZjlkNmFkMjgsIDB4MTM0OGY0YWYsIDB4ZWY1MTVkNjgsCisJMHg4ZmM1MWEyNCwgMHg5NDhmNWFmZiwgMHg3YjIxZjE0OSwgMHhiZmU0M2RiMCwgMHgxNDliZGIwOSwgMHhlMWJmYjYwZiwKKwkweDc2ZmFjMGFmLCAweDg3ZWQ4YmQ5LCAweDVkNTg0YmZkLCAweDE3ZmI2MmYxLCAweGJkNjI5ZmZlLCAweGJiNjNmNjU5LAorCTB4ZDU4ZmE1NmQsIDB4MGZiNjNmMTUsIDB4ZmIwNmI5NTgsIDB4YjAwNzI5ZGYsIDB4MDdjYWQ0N2QsIDB4MTJhNzdkYjEsCisJMHg1Njg3ZjZjMCwgMHg0YTk5ZTYzZCwgMHhmNzgyYjVlYiwgMHhiNDhmYzBiNywgMHhjMDM5MjRhYywgMHgzMjhjYzE0ZiwKKwkweDA1YWI0ZmNhLCAweGY3ZjgxYjMyLCAweDI4ZTk4MGJmLCAweDU0Y2VhZTVmLCAweGZlYjcwZTUwLCAweDkwMDllMGFkLAorCTB4ODM0YmZjNWYsIDB4N2YyN2ZjZmEsIDB4ZmZkZjhkOTUsIDB4Njk5MWZiMTEsIDB4ZmRlZjYyM2YsIDB4ZGUzYWJkZTQsCisJMHhhYmRlNGZkMCwgMHgwZDNmN2E5NSwgMHhiZGFkNWVmMCwgMHg3ZDZjZmQ2ZiwgMHg5ZTExYTI3NSwgMHg3ZWY0YWI1NywKKwkweGFlM2MyMGI2LCAweGVmMmJjZGJlLCAweDc4NDZjOWI1LCAweGY3YWM1YjVlLCAweDQ5ZTExM2IzLCAweDRkM2MxYmVlLAorCTB4ZDNmMTFiNmYsIDB4M2YxODc2ZjQsIDB4N2U5ZTExN2IsIDB4Y2M2NzgzN2QsIDB4OGNmYzQ2M2IsIDB4OWY4YzI3NzksCisJMHg2NjRmZDgwMywgMHg3YTY5ZmFkZiwgMHhhNjlmODhjNywgMHg3OWY4YzI3NywgMHhhODM1ZTcxYiwgMHhmMzFhZjM2ZiwKKwkweDYzM2YxMWFlLCAweGU3ZTMwZGRlLCAweGJiMjc4NDIzLCAweGZmNmNmZDZmLCAweGVkOWY4OGQwLCAweDczZjE4NjFmLAorCTB4YTBiOWZiMTQsIDB4ZjgyYWYzNmYsIDB4ODI5Zjg4YzgsIDB4ZTlmOGMyOGYsIDB4ZWEyZTdlYzYsIDB4M2ZkYjNmNWIsCisJMHhmYjY3ZTIzMiwgMHg3Y2ZjNjE0NywgMHhkMjVjZmQ4OSwgMHhmYzE1NzliNywgMHg4MjlmODhjMywgMHg2M2YxODQ3ZiwKKwkweGQxOWZhMDExLCAweGY5YTc4MzdkLCAweDlhN2UyMzUzLCAweGM3ZTMwZDNmLCAweGVkOGNmZDgxLCAweDhmZTMzYzFiLAorCTB4ZmUzM2YxMTgsIDB4NjkzZjE4NDgsIDB4NDI3ZGQwMDIsIDB4M2U2OWZhZGYsIDB4ZjM0ZmM0NjIsIDB4MDY3ZTMwOTEsCisJMHhmYTUzM2Y2MSwgMHg0N2YxYWYzNiwgMHg3ZjE5Zjg4ZCwgMHhlMTlmOGMzNCwgMHgyYTQyYWYzOCwgMHhhMTBmMDBmNywKKwkweGVlN2FiOGZkLCAweDIzNDllNzY3LCAweDBjOWU3NjdlLCAweGVjNTJlN2UzLCAweDI3ZWQxYTY3LCAweDI2N2VmN2E3LAorCTB4MzNmMTFhNzYsIDB4OWY4YzMzYjEsIDB4OTVjZmQ4ZjEsIDB4Njc2N2ViN2QsIDB4M2IzZjExYTcsIDB4MjlmOGMzM2IsCisJMHhkZDVjZmM0NCwgMHhlYzRkNzliNywgMHg2MjY3ZTIzMiwgMHhmZTRmYzMxNywgMHg4OWM1MzU1YiwgMHg4NWFlOWRiNCwKKwkweDk5M2Y0ODlhLCAweDA4ZjFlMWQ0LCAweDU5YmEyZWI0LCAweDA0NmI3NDVkLCAweGI3NTExMmVjLCAweDQ3OWI0ODM3LAorCTB4MWIzYmRmYTQsIDB4NDU3ZWYzOTMsIDB4YTI4ZWVkYTIsIDB4OGI5Nzk4NzIsIDB4NzZkMTYzNWEsIDB4MDRmOGQyNDcsCisJMHhlYzkzOWQ4MywgMHg1M2Q0MzE0OSwgMHhkZTE4MDc0YiwgMHhkNDM2NTdlZiwgMHhmNjdmZGVkMCwgMHg0Y2Y2ODZjNSwKKwkweDllYTE5ZTZmLCAweGYwZDEzOTU1LCAweDIyOWFhMGZlLCAweDhhYzg3ZDQzLCAweDY3ZWYwY2FiLCAweGQ0MzVhZmZiLAorCTB4ZDhmY2Q2NzMsIDB4NzUwNWZlZjAsIDB4MTdlZDBkNzMsIDB4ZGExOTU3ZDYsIDB4MzMyYzBhMmYsIDB4ZmMzNjQ3ZDQsCisJMHg0YmZkZTE4NywgMHhkYTE5Nzc4MiwgMHg5NWZlNmQyZiwgMHhlODc0N2RhMSwgMHg3ZjNkNDMyMSwgMHhmNzg2NjNmZiwKKwkweDMwNmRiNmM3LCAweGY4M2I4ZmI0LCAweDQyN2RhMThjLCAweDdkNDM1NmZiLCAweDI2OWRiMWQyLCAweDNlZTljZjNiLAorCTB4NDVkNzkyMzIsIDB4ZWNjMjdiZTAsIDB4ZWQwNTRjZmUsIDB4YzE0YjkwYmQsIDB4ODljMDMyYmEsIDB4ZDc2ZWZjNzYsCisJMHhhNTMwZjU3YywgMHg3NmU3YjJhZiwgMHgxN2QyOGQzNSwgMHhiYWU4NGE2OCwgMHhmMmEwMzg1ZSwgMHhmY2ZhNzZjMiwKKwkweDE3YmQxM2E3LCAweDlmZjNlOWJhLCAweGRkNGJkZTJhLCAweGNhNTNlYzcxLCAweDgwYzkwMjBmLCAweDY5NDBiNTUyLAorCTB4NjY0N2JmNmUsIDB4ZjU5NDU4ZmMsIDB4ZjQ0M2YwZjUsIDB4Zjc0YjZhZmIsIDB4Yjc1YTY0ZjAsIDB4YzBmNTg1ODgsCisJMHgyYzEwN2ZiZiwgMHgyMjA5YTdjOCwgMHgxMmY3ODFhOSwgMHg4MmZkMDRhYywgMHg5ZTBiYjI3YiwgMHhlYmYxNDdmMCwKKwkweDBlNTQ0MTlhLCAweDZiYmY0ODg1LCAweGQ4MDY2ZjY0LCAweGJlNTYxYjE5LCAweDY0M2IwN2VlLCAweGFmM2EyMGY1LAorCTB4MjEzYzg0MDEsIDB4MGZmMjFlYmMsIDB4OWEwZmRmYTMsIDB4ZmRhNWUxOWYsIDB4YTc2YTE1NTksIDB4ZDBhZjhmNDcsCisJMHhmOGUxNDdmMSwgMHg3M2ZlMzAwZCwgMHgxZDZmOGMzZCwgMHhiZTMwZGUzYSwgMHg2MWE1NzA2ZCwgMHhjNzQyOWI3YywKKwkweDYwN2I1Mzc3LCAweDdjN2M3YmU1LCAweDg0ODk4NDRhLCAweDg3YmMyZjNjLCAweDU3MDc1YmUzLCAweDI4ZjdmOGUyLAorCTB4MWU4OTVmZDQsIDB4N2UzYzIxM2YsIDB4MmVjYmM4MzMsIDB4OWM2YzdmMTgsIDB4Njg5ZDBmZjksIDB4MmFlMGZmOWMsCisJMHgzNjE1ZmNlMywgMHgwZjJiM2RmZiwgMHg3MDEzZjFmMSwgMHg0Mzg1N2JmZSwgMHhhYjgzZmU2YywgMHhhY2FkZmNkOCwKKwkweDg5ZjhmMGRmLCAweDg3ZWZmYzYxLCAweGQzZGFiZmY5LCAweDFiMjY3M2ZjLCAweGIxNjQzZmU3LCAweDM2NTZmZTcxLAorCTB4OGYyYjFiZmUsIDB4Mzg5ZGYxZjMsIDB4NzFjMjliZmUsIDB4OGIyMWZmMzYsIDB4ZWFjNTdjNzEsIDB4OTQ3ZjgwZDUsCisJMHgwMDlhODRhYywgMHhhNDBjOWYxZCwgMHhiMDNmYTk4YSwgMHhjYTA3MWQwYiwgMHhhOTk0MjkxMSwgMHgzMGI1ZjkwOSwKKwkweDY5ZjhlMTE0LCAweDJmYjdlMzAyLCAweGExYmYyODEyLCAweDczZTNmMWJlLCAweGFkOWFhMDEyLCAweDljNWRmYTgwLAorCTB4MTYzNTE3ZDcsIDB4YjA5N2EwMmEsIDB4ZjMyYmZhOWQsIDB4Y2QxNWE4MzgsIDB4NTkzN2YyMjIsIDB4NDA1YzBkNmIsCisJMHgxNjZjZWRlMSwgMHg1OGFmNTBmZCwgMHhmYTAwMjUzYiwgMHg2ZTRhZGFhZiwgMHgyNGVmODMyYiwgMHg5ZmU3ODIxMiwKKwkweDg2Yzk3MjNlLCAweGNiOTk3OWU4LCAweDkxZjI3NTc5LCAweDBiNzkyOGY2LCAweDY0NDU1MWZiLCAweDZmODUwZDQ0LAorCTB4ZDhjMTMwMWEsIDB4ZWE2M2ZkNDgsIDB4NWZlYTExMDcsIDB4MGNmZDQwN2MsIDB4MTNmMjU5NDIsIDB4MTFmNzhkOTksCisJMHhkZWEwOTdmNSwgMHg2ODI1ZmQ0ZSwgMHg3ZTI1NjQyNywgMHgyYjdiYmI0NywgMHhjNjVmYzI4MywgMHg2MjU4ZmZlMSwKKwkweGNkZjFmYWYyLCAweGU1NGZjMDQyLCAweDhmOWY4YmYzLCAweGI2ZjUzZjQ2LCAweGY0OGEwZTE1LCAweGZjNzMxYzA4LAorCTB4OWQzYTg2YTksIDB4ZDRlODFmOTcsIDB4ZDgxYWMzYmQsIDB4NTU3ZTIwMjAsIDB4OGEzOTU3YzAsIDB4YWZiNzIxMjYsCisJMHg4ZWI4YTJjOSwgMHgyNTJlZmZiYywgMHhmZDQ1MjY3YiwgMHhmNzIzYzQwZCwgMHhiMmRmZWZhNywgMHhhNmU0MTg1YywKKwkweDU4ZjRjZWUzLCAweGUxM2FkOGYzLCAweDVjYTBiMmM5LCAweDc4Y2IyYzkzLCAweDFhNmRhZTQyLCAweDQ4MWVkMzJkLAorCTB4YjhmZTQ3YjksIDB4ZWJkYzZhM2QsIDB4OTlmNThkNGEsIDB4YTc3YWM2NjUsIDB4MTQyZDkxZWMsIDB4ODE3MmNlYWUsCisJMHhjZWZkYTdhYywgMHhkNzZjNmQ5YSwgMHg1MjVhNzFjNywgMHg3OGY5OWQxOCwgMHhiZTBjZTk2NSwgMHhjMWU2NTA1OSwKKwkweDc5ZDIzNzYzLCAweGFiN2Q5YmI2LCAweGJiN2Q1M2MzLCAweGEwNTg1ZDRjLCAweDAxMWZiZmE3LCAweGYwZDNmYWJhLAorCTB4ZDliYjFmYmQsIDB4Y2VmMGNkYmMsIDB4MzI5ZTZkOTYsIDB4NzNkOWNmM2EsIDB4YjdmMDAwYzQsIDB4ZWZiZmZlMTksCisJMHhiOTJjNzg3MiwgMHhiMGYzNWNiNCwgMHhmM2IxMmM0YywgMHhhMzdmYzMzMSwgMHhhMDlmM2NkNywgMHg0ZGYwZWIwYywKKwkweDhjZTdlNjk1LCAweGZhNzA4ZTZmLCAweDQxZmMwYzdmLCAweDFmYzBhM2NiLCAweDljYzNmZTE0LCAweDk1N2EyMjNmLAorCTB4ZDViNTQ3ZjEsIDB4YTFmODAzM2IsIDB4MjA5MTUxZmIsIDB4ZGNiZjM5NWQsIDB4NWU2NWY5YzAsIDB4MDgyZjkxOWQsCisJMHhjNzQwY2FmMSwgMHhiYzg1YjMwNSwgMHhjMWYxNDU1ZiwgMHgwYjA3Y2UyYywgMHg3MzdjOGRlYSwgMHg5OWNiZjEwYiwKKwkweGUzNzJlODcxLCAweDY3NzdmNWRhLCAweGZiZjNiMWE4LCAweDRkY2RmMzkwLCAweGZjNDZlZmY3LCAweGQxOTNjZWM0LAorCTB4YTc0ZTU2ZTksIDB4ZWQ4YzZhNWIsIDB4ZGViYTcwMzcsIDB4YmIzYWU5YzIsIDB4YTk5N2MxZmUsIDB4NTYzZjIwZmEsCisJMHg3YmM4MzIwMywgMHg3YTc0MmZmNSwgMHhlOWU4MWJiNiwgMHhjMzM0ZjRlNSwgMHhlN2E3MmI3OSwgMHhmNDY3M2ZhZCwKKwkweGNlZGJjMzM0LCAweDdmNWVkOWU5LCAweDYzNDMyNjQ2LCAweDc3YzMzNWUxLCAweGY5OTg4YWRiLCAweDM5Y2Y0MDI4LAorCTB4YWNmNGY4ZmUsIDB4M2Q0YzJlNmUsIDB4NDk3Y2Y1MWMsIDB4YzNkNGNhZjAsIDB4YThiNjcyNTEsIDB4NWY1MGRjYTEsCisJMHhmMGQxYjgxOCwgMHgzOWZhODJmZSwgMHg3NTc5ZjY4NiwgMHhiN2VkMGQwYiwgMHg1MGMzYjlhZiwgMHhiOWZmZTM5ZiwKKwkweDU2ZGJmZGUxLCAweGRmYjQzNGFjLCAweGExYWY3MzUyLCAweDA3Y2FhNmZkLCAweGJkMWJmNTBkLCAweDlmZGUxYThmLAorCTB4YTFiZDdiMzUsIDB4ZDNkOTY2N2QsIDB4NGFlYmY2ODYsIDB4ZTVlYTE4YjcsIDB4Zjc4NjFkOWUsIDB4ODcwYjVkODUsCisJMHhlYWJhZTNiNCwgMHg4ODdmNjNmZCwgMHg0NTY3YmUyNywgMHgzYmViMzUzZSwgMHhmNjFlMmY1ZCwgMHg4OGZjZjhhOSwKKwkweGM3OTYwNDZmLCAweDNmM2UxYTdjLCAweGU1OGYxYmUxLCAweDc0ZGZkMDRhLCAweDYwZWNiMDVkLCAweDczNDNmNTY1LAorCTB4ZTJhM2I4ODYsIDB4ZGFjODlmMWUsIDB4YmRiM2QwNjAsIDB4N2RmZDQzZTksIDB4N2ZhM2RlYjMsIDB4MTRlY2YxNTksCisJMHg5MDJjNWNiZCwgMHhiYjA3NTgzMiwgMHgzZmFkMWRiOCwgMHg0OWQ3YzUzZiwgMHhiOTQyZWU0MiwgMHhiOTMwYWM1YywKKwkweGIzMzViYzVkLCAweDNkNDIyNDg4LCAweDRlMjZiYzM0LCAweGNmMmMyNjdjLCAweDMzZTcwMTQxLCAweDAwYzcyZWFmLAorCTB4OTFmYTgyZTcsIDB4ZTAzNmY4MjYsIDB4ZjkwMzBiMzgsIDB4MWE4YmU3ODYsIDB4ZWJiZTE5MjYsIDB4N2MyMjJkZDgsCisJMHgyN2M2NDE0YiwgMHhiNjU2NzJjMCwgMHg4NWYwMDJjNywgMHhlZWJlMGVmNiwgMHhiM2Q3ODAxMiwgMHg0YmViMDJkNywKKwkweGU3YjQzZjczLCAweGE5YTU3YzNhLCAweDczYzAyNTg3LCAweDdjYzc5NjE5LCAweGUyM2NiMWIzLCAweGQ4Nzk2MmYzLAorCTB4YzdlNTg5NTcsIDB4ZGIyYzFhYmUsIDB4ZmNiMDJiN2QsIDB4ZjJjN2U3YzgsIDB4MmMxYWRmMDMsIDB4YzNhYmVlZmYsCisJMHgxZWFmYTBmMiwgMHgwMTdjNzdjYiwgMHgzNWYyZGYyYywgMHgyZjg2Zjk2MCwgMHhhZjliNjU4OCwgMHg5ZjRlY2IxOSwKKwkweDVlNWQ0YjA3LCAweDQ4NjVmOGEyLCAweGU4YmYxNDY2LCAweDhmZDc0ZmZhLCAweDljYmYzOGM3LCAweGM3ODk3ZTAwLAorCTB4N2M4YzFiMTcsIDB4NDFhZTU0NzEsIDB4NDNlYjMwYmUsIDB4ZmFjYzFkMzMsIDB4YzNmMmJiZWYsIDB4ZGJiMzBiNTgsCisJMHg0NDNmMmZiZSwgMHhhMjY1OWRlOCwgMHhmNDZmNGU3NywgMHhiZDE0NjIyNiwgMHgwY2RjNWFjNywgMHhmYmVmNGUxZSwKKwkweGY2MzhkZTAwLCAweGI4YjAyNWZhLCAweDgzYjI4YmY3LCAweGZmMTYwZTNjLCAweDZhN2E3MWU1LCAweDJmZjhiMjAxLAorCTB4YmU5NmJiMWYsIDB4NTJmNjg2ZGIsIDB4ZTNlODA0NjAsIDB4NzdmZTIzZDMsIDB4NGZiN2M0MzgsIDB4Njc1MmI0MWYsCisJMHg5OWY5ZTdhYSwgMHgxZTIzZDdlOSwgMHg4NmZkMDc4OCwgMHgyOGJhMDFmOSwgMHhkYmI2YzdlNCwgMHhlZDVlMTgxMywKKwkweGU4NGE1MjE2LCAweDA1ZWY3MTdhLCAweDQ3NzM2YTRmLCAweDI5MjI1ZDYxLCAweDJiNDA3ZGYwLCAweDk3ZTljNTc3LAorCTB4ZGY4MGEwZGEsIDB4ZWI1YWYwZGUsIDB4ZmExNzIyZmEsIDB4NTdkOGYyM2IsIDB4YjU4ZTUwMDUsIDB4NjEzNDNiMzAsCisJMHgzMGY2ODhhZiwgMHgwMWExM2QwOSwgMHhkZWZhYzM3ZSwgMHhkYzQwNjVhYSwgMHhjNTAyZmJiOCwgMHhjMDcxZWI4ZCwKKwkweDlmOWZjNDY5LCAweGY4MjIwYmQ2LCAweGE4ZTI5N2JiLCAweGJhYjNkNzBkLCAweGIwZGZjNDBjLCAweGY2Njc4NjJmLAorCTB4ZTliZDdmMDEsIDB4MzlmMGRlYzksIDB4ZGZlMDMwMzcsIDB4ZjRkZWNmODIsIDB4OGI3YTZmNTcsIDB4OWFlN2Q0NzgsCisJMHg3NmJiZmNlOSwgMHgyYmY3OTI1ZCwgMHg1MGQ0ZjQxNSwgMHg4MGY0ZmZlNiwgMHhjN2JmN2Q2ZiwgMHhmMDI1NGYwYywKKwkweGYzYmVkOGYxLCAweGNlYmE1NzcxLCAweDA5ODM2ZGM3LCAweDkwNmRlNzFkLCAweGU5ZmZkYTE3LCAweDgwOTMwYmE2LAorCTB4YjQxZmI0MmUsIDB4NzFiN2JiYmIsIDB4YmExN2I5ZmIsIDB4ZjYzNmNjOWUsIDB4MmZlNWNkNTcsIDB4NDI5MjVmZGMsCisJMHhiOGU5NGI4NCwgMHg0OTIxNDUyZSwgMHhiZDE2MWQ3NCwgMHgxYmY0NDQyYiwgMHhmODNmNzZiNCwgMHg1YTFjYmJlMywKKwkweGQ4ZmUwYWFkLCAweDJhNDM1Nzg5LCAweGRiZjQ2OGY0LCAweDIyN2ZlZjRmLCAweDY1OWJmYzExLCAweGUxZjcxNjE5LAorCTB4Y2JkNDc0MzgsIDB4Yjc2Y2MxMjUsIDB4NjgwZmRhMzMsIDB4ZDc0ZmQ2MzYsIDB4ZjQ0MWE1MDksIDB4ZWJhNGQ0OTMsCisJMHhjMDc1ODEyZiwgMHgwYzNjM2VlZCwgMHg5NjA2NzJmNCwgMHgzMmNiM2Y3YSwgMHg1NGUxZjcxNCwgMHgyM2QzM2ZhNCwKKwkweDY3YThjOThkLCAweGY4NmNmODRlLCAweDQ3MGQwZmRlLCAweGUwNDRmZDRmLCAweGQwOWYyMjY4LCAweGRmMTQ4MWVmLAorCTB4N2VmY2Y0ZTQsIDB4OWQyMDcyOGYsIDB4NDg1ZTIwNTUsIDB4YzAyZmU0NWEsIDB4ZmZkM2IzN2YsIDB4ZmQwYTE5YmUsCisJMHhmYmQ3NTg0YSwgMHg3ZThhMGVhZCwgMHhiY2YwYTVlYiwgMHhmZDFlMzBkMSwgMHgzMmY3ZDU0ZSwgMHhlNTllYmJlMSwKKwkweDc0NDcyMjRkLCAweGRiNzRhNzdlLCAweDE3NWJmN2MyLCAweDQ2ZGRkODM1LCAweDUwZDkzMGJiLCAweDc0Y2U2ZWFmLAorCTB4Zjg0NGVjMWIsIDB4OTVjMjE4MDcsIDB4Yjc3YzA0ODIsIDB4OTc1ZGIzOTgsIDB4N2MwMzVjZTQsIDB4ZTMwNDNmNzQsCisJMHhmNjA1ZGY4MCwgMHhiYjViMTJkZSwgMHg0YzUxNTVlMiwgMHhlNzJmODBkYSwgMHg1ZWY5ZDc4ZSwgMHhkNTNlZjU5ZCwKKwkweDkxNWZjNzRmLCAweGY5MTdjODA5LCAweDEwNTU0MjlhLCAweGEwYWU4ZmU5LCAweGI3ZWI0MmM0LCAweGE2ZGNkYWYzLAorCTB4YmQ2MWQzNDUsIDB4ZjY2MTZlM2EsIDB4NGIyOTA1NzgsIDB4OTJiMzdmMDQsIDB4N2M0MDE1ZDQsIDB4OTRiMTI0ZjIsCisJMHgyNDllNWM4MiwgMHg0N2U2MjQ2ZiwgMHhhMmZiZTFjOSwgMHhiZWRjZjA4MiwgMHg1MzE3NjhjNiwgMHg1ZjUwZDk3ZiwKKwkweGNmYWM2ZjUwLCAweGMzYTZkNzI3LCAweGI1ZmNmMmJlLCAweGEwMDgwOTMyLCAweGFmZWQ4YzJmLCAweDE2OGU0Yzg4LAorCTB4YjBkNTlhOTAsIDB4ZDk5NWFmYmUsIDB4NGRkNzM2M2EsIDB4ZGYwYTJjYTQsIDB4MmYxZTE3OTIsIDB4MWZlYjQzOTgsCisJMHhkMzFlY2M4YiwgMHhhNjE3NDVmNywgMHg4MmFiZjgzMCwgMHg2ZDBmMTVlYiwgMHhmZjI5YTRmZiwgMHhlODc5YWEwNiwKKwkweGIwZDU4MWY3LCAweDA5YjdmOTVlLCAweDk2MzUyNmRhLCAweDdlMTZkZjdlLCAweGZhZmFiYzMzLCAweGNiM2ZiMzFmLAorCTB4MjBkMjU4ZTEsIDB4ZWM3MTAyNzgsIDB4MGViZTZlODAsIDB4NGQyZTdhZWIsIDB4MDhlMjFiNzIsIDB4ZTJhM2Q0MmEsCisJMHg5Zjk5ZGYwYywgMHg5ZjgxODhkMiwgMHgzNmJkMTdlZSwgMHgxZmUzMWZhOSwgMHhhOTA0YTdmMCwgMHg5ZjdlZjE1YiwKKwkweGZhNjIzM2ZlLCAweGZlYzY5MzRmLCAweGE0MGZmZDgwLCAweGZhMTgxN2ZkLCAweGY4NTA3ZjU3LCAweDNmYzBjNTg3LAorCTB4NGJmZjVlMmEsIDB4YmI3Njc4NWUsIDB4YWE5M2VhOWYsIDB4MTIyNDhmY2QsIDB4OTcxZTNlYmEsIDB4NGEzNWQyZWEsCisJMHhlZTliYzVkZiwgMHgxZjNhMDQ0ZSwgMHhjMDg5ZmM5MywgMHg2MjAzYzdhZiwgMHg3YWNlMjA2OSwgMHhlOWQyNTczNSwKKwkweDEwMGE3MWVkLCAweGQyN2Y4MmM3LCAweDczM2M0ZmZlLCAweDVmZjdmYTFmLCAweDE4ZGQ5MjZjLCAweDg2YjA2YTlmLAorCTB4OTcxZTU0YWMsIDB4NGU5YzJkMzYsIDB4ODg3ZWIxNzIsIDB4MjUzOWVmZDUsIDB4YzhkOWJkNDIsIDB4M2Q0ZjU1N2YsCisJMHgwYWY5MGU5MiwgMHhiYzc4NTM5NCwgMHhlY2Y2ODQyNiwgMHg5NjlmOGRkMiwgMHhiYTQ0YmFlMCwgMHhkZmNjOGU1MSwKKwkweDUyZTdmOGMxLCAweDUxY2RmZjUwLCAweDI5ZGI2MjkyLCAweDU3NzdlODljLCAweDM3NTRiYzczLCAweDRjNGE3N2RkLAorCTB4YTNiNTdmODQsIDB4YmY3ZTZjM2YsIDB4ZDdhNWRiOTIsIDB4MjNiNGFlNDksIDB4ZTMyNzA0ZDQsIDB4ODdkMDM4YzgsCisJMHg4MDQ4M2UzYSwgMHgwYmUyYTVkOSwgMHgxYzQyZTc4ZiwgMHgyYmUzNjNiMiwgMHg5ZTE0NDI4OSwgMHgxZDNhMzk3NCwKKwkweDNiOGZmZGJjLCAweDZkZjU5ZWQ1LCAweDY4YjM5NTI3LCAweGFmNWY0N2ZiLCAweDRmNmU2NmQ0LCAweGIxNzJiMGI3LAorCTB4NDQ5YzRhMWMsIDB4ZjVlMmUwZjUsIDB4OGZhN2U2YjIsIDB4YzRmYjNmMTcsIDB4NWM0MThmOTMsIDB4NzZhYjNkZjAsCisJMHhkMTdmZWQwMSwgMHgzM2JmMmZiMywgMHg2ZDE3ZDY5MSwgMHhiM2E2ZDM5MSwgMHhmNDg1Mzg2OSwgMHhlOWFhNWQwOCwKKwkweDIyZjIyYjdmLCAweGZlN2FhODc0LCAweDg0YmQ0NTY1LCAweDRhNjVmZjNkLCAweGI2OGIxZTg0LCAweDI1Yzg1NmVjLAorCTB4MGUyOGY4YjEsIDB4OWRkYTU2ZWUsIDB4M2MxMmU4NzEsIDB4ODFmNjAyNTQsIDB4MTUzZmMyZjgsIDB4NWRmMWZiYTAsCisJMHgxZDlmZTkwMiwgMHg1ZmViOWYwNywgMHhmMDFmZjVjNiwgMHg3NGU0NzQ4NCwgMHhmNGNkZDMwYSwgMHgwYmE1MzU3ZSwKKwkweDRlOWQ2YmU4LCAweDVjYjFmNmU2LCAweGVhN2Y0MGJmLCAweGU3ZTdlNDI4LCAweDU0ZmM1Mjc2LCAweGMxYWFkZGZlLAorCTB4YmI5ZjJiZmMsIDB4NzFlNjExMzMsIDB4N2M2MWFhNTQsIDB4ZTlkZGY4ZmQsIDB4YTU2ZTNhMWUsIDB4NjM3NzRmZWMsCisJMHhmZTU3OWVjOSwgMHg2ZmM4MjdlMSwgMHg0OWZmNWUwYiwgMHg4ODY3YzYzYSwgMHg2YjgyZDMyNywgMHhlNjEzM2Y4ZiwKKwkweDRjZGQ2ZjM3LCAweGUyN2NkZjljLCAweDdjYWJiZTQ1LCAweGZkMDMyYzVjLCAweDRhNDRiOWY3LCAweDhiOTFjNGI3LAorCTB4ZTNiMzEyODMsIDB4MDZhMDZlOGUsIDB4NTFkZjlkMTgsIDB4N2U2MGFjYmEsIDB4ZTYyMjFiY2EsIDB4MDc3MjExMjksCisJMHgwOWZmZjkwMSwgMHgxMGI1MGI5ZiwgMHg4ZGI5ZmViMCwgMHhhNGIzNjlkMSwgMHhjYWQ0NjFmYiwgMHg4ZGQ3ZTY4YywKKwkweDdkMDFiNGY3LCAweGY0ZjIwYzRlLCAweDZhOGI3ZDg3LCAweDNlMzlmOTIyLCAweGJmNjg2Zjg0LCAweGZhZDNlYmUyLAorCTB4NTU1MGZhMzMsIDB4YTNiZmMwNWIsIDB4M2MzMTdjZWIsIDB4NjRkYmY3ODcsIDB4ZjBkNzNkOGYsIDB4M2IyNmY5MWQsCisJMHgzZTcyZmUzMiwgMHgwMTNiODUzZSwgMHhlOWEzZTdkNiwgMHg0OTU0ZWRmMSwgMHhkYWY4NzQxNiwgMHg0NTdmMTQ0OCwKKwkweGY3OTMzN2M5LCAweGY5MzJmNzhkLCAweDUwM2RlNWQ2LCAweDY3ZWQwYTVlLCAweDAzZjI2MmRmLCAweDQ3ZmFjMWRmLAorCTB4YzdmNTBhZTEsIDB4MGJkN2RkZjYsIDB4MjRhYzBmYTgsIDB4MzdhZTRmMTQsIDB4OGRhZTVjY2EsIDB4NTA5ZjNhZWQsCisJMHgyOTIxMjViOCwgMHhmZmEwNWY4YSwgMHhlZTNmYzQxNCwgMHg0YjVmY2M1NywgMHg5N2QyOGJiZiwgMHg2MjVlMzBkNSwKKwkweGRjYmE3ZjZjLCAweGZmZjJlMDJlLCAweGM4ZmZjODI2LCAweDc1OTNmYzg4LCAweGI2N2JlZTRjLCAweDE3YThmYzlmLAorCTB4Mjc4MWNiMTcsIDB4YTU3OTAzMWYsIDB4NDE1N2U5ZjIsIDB4OTgzMmU1NWUsIDB4N2I4ZDY3ZjcsIDB4OTUzMWY5ZGYsCisJMHhiYTgyY2Y5MywgMHhhN2Y1MWE5YywgMHhiNzJiNGU1OSwgMHhlNGYxMjU4ZSwgMHg0NmE3MzNmNCwgMHg3ZDI5Y2FlMiwKKwkweDlkNGU1NzFlLCAweGZmYzdjOGVkLCAweGM3NTNmYTU3LCAweGZjMjY1N2RmLCAweDI3YjBmYWU5LCAweDYxZjU5YTNjLAorCTB4M2UyMmE0YmQsIDB4ZmU5MGZhY2QsIDB4NjIwYTQ1YmQsIDB4M2JlNzRmZjksIDB4ZmVhYWRmOWQsIDB4ZTgwODY0YjQsCisJMHhlYTVmMzA5ZCwgMHg0YmU2MTc3YywgMHhlMjYyZWY5ZCwgMHg5OWZjMDZhMSwgMHgxODg2NWZkYiwgMHg4MTZiODUxMCwKKwkweGYwMzJmZWFkLCAweDgwOWE2YzIzLCAweDg3NjE3ZTcyLCAweDZjZWVmMzA1LCAweGJmZjQwNDYzLCAweDU4NGJkNDQ2LAorCTB4MWVlMmRkN2YsIDB4OGNlODc2MGIsIDB4ZjY3YzJmNDksIDB4ZWRlZGYyNzMsIDB4YmU1YWVmZmYsIDB4MzA3YjYzZTAsCisJMHg4NjFjYTAzYiwgMHg3NGQxNGJlMCwgMHhlMGMyZDcxYywgMHgwMjQwM2VhYywgMHg3ODFmNTE0MywgMHg3ZjI4YjJjNCwKKwkweGY3OTcwZTc5LCAweDlhZDgzZTE3LCAweGVjMmM3ODBmLCAweDhlZDQ5NTFhLCAweGZhMzA3MjdhLCAweDZmNWNkNTkzLAorCTB4NDlhYmY2OWMsIDB4Yjc0ZjRmYTAsIDB4NzhiZmEwZTQsIDB4OGFlOGJmN2EsIDB4MzRmN2ZmOTcsIDB4MjA5ZmVmYTcsCisJMHhhZWNiNDYzZSwgMHhhNDRlYTQ4ZCwgMHhiYTQ1ZDZmYywgMHg2ZmYwNmVkMSwgMHg3MTRkOTFiNCwgMHhjYmE2YWZmNiwKKwkweDVmN2UyZjRjLCAweDAxZmQwMDdjLCAweGRiZGI0ZjFmLCAweGQ4ZTJjYTRiLCAweGY5ZjJiN2IxLCAweDI1ZjNkOGNlLAorCTB4YjcxNzhmYWUsIDB4YmQ4MGI3YWMsIDB4OGI0NmYxNzQsIDB4NDFiZmVmYzEsIDB4NDc5ZDdjZTYsIDB4NjdhZjgwZjIsCisJMHhjNmJiYjFlYywgMHg4YmY3MWUwMCwgMHg1NjQ5ZTQxYSwgMHhiYzUyOWNiNywgMHhmMzQyZmM3MSwgMHhiMDdmYTFmYywKKwkweGRkOTNlZWI3LCAweGNhMmY0ZmM4LCAweDBmMDFkYmMxLCAweDExYjQ5ZTJmLCAweGExZGIyZmQ4LCAweDA3OGEyZGQ0LAorCTB4ODMwYTlkZTcsIDB4NDY2MWM3NzMsIDB4MmYwYTFmOTcsIDB4NTBjZTVkODUsIDB4MzY3M2M0MTEsIDB4NThkYmU0MTIsCisJMHhmM2U0MTMzYSwgMHhiMDI0MGRkMywgMHgyZGU4MWIzMiwgMHhjMTIzN2FiMiwgMHhjYTBhNTdiYywgMHg3N2MzMjdhZiwKKwkweGEzNWVkMzVmLCAweGU2YzJmM2U0LCAweGU4MTI3ZjJkLCAweDA0NWI0YjdiLCAweDJmYjY4NWI3LCAweGUwMTVkYTk1LAorCTB4NjRlNmVhOTcsIDB4NjhkOGY0MTEsIDB4NzRmZmNmNTUsIDB4MTQ3ZDcyNWYsIDB4NGIyN2RkZmYsIDB4MTNiZDk3ODgsCisJMHhmMDA5YmM1ZiwgMHgyMTQzYTY3MiwgMHg3OWVmY2ZiMCwgMHg2OGYzMWJhOSwgMHgyM2U0YjRjZiwgMHhhZjM0ZjViZiwKKwkweGIyZTQ3ZGU3LCAweDQzZjQxMmE5LCAweDNhNjY1ZjEwLCAweDMwNGM2YThlLCAweDdiMTUyN2Q0LCAweDMzNWMwMDA3LAorCTB4YjVjYmVkYWMsIDB4MmJiNzc4MzgsIDB4YTFmZGVlY2MsIDB4YjJiN2IzZTQsIDB4OTZmYmYyY2YsIDB4YjE1ZWJmMmUsCisJMHhmZWVmOGEyYywgMHhmZGJmMmIxZSwgMHhiMmVmYzllMywgMHg5ODdmNmE5NSwgMHg5Y2Q2YjJmNywgMHg2NWNmODBmZSwKKwkweGM1ZmI5MTdmLCAweDdkNjdhYmUzLCAweGNjZGMyZmNjLCAweDlhYmI2NWYzLCAweDFhNWVmY2E4LCAweDU0NGRiZjI1LAorCTB4MDFjNGUzN2UsIDB4ZTU4MWZhNWYsIDB4ZGY5MDU5ZjcsIDB4MmJiZGYwMzgsIDB4ZjJlOGZhMzMsIDB4MDg3MmRiOWIsCisJMHhjOWI3MzdlNSwgMHg3OTMzYzg2MiwgMHg3ZDc2ZTY1NSwgMHhmNDJiZjI4ZiwgMHhlYTBkM2ViYiwgMHhhMzg4ZTZiMiwKKwkweDEwMGYwMWFmLCAweGUzY2NkY2M3LCAweGM4MGUzMGZjLCAweDcxYjhhNGIxLCAweDYzOTU3ZDllLCAweDhlNTliZmRmLAorCTB4OTgyMzZkOTcsIDB4NmY0YjEzMTcsIDB4NzZjYmM3MjYsIDB4ODAxNjM5NTAsIDB4OTc4ZTRjZWUsIDB4Y2UzOTUyYjUsCisJMHgxMWRmOTU4ZSwgMHhiZWNiZjIzMSwgMHhkZjYyMWE1ZiwgMHhmZjY3Mzc1NywgMHg1ZTNhNjZlZSwgMHg2Y2Q2NDc5ZSwKKwkweDg4YmNmZGY0LCAweDk2OGQ4ZjNjLCAweDcwOTE0OTY3LCAweGJjZjIzMWJlLCAweGJjZjI2ZmJmLCAweDk1MzNjYjhkLAorCTB4MWM1YWExZDMsIDB4YzYyZDZhYmEsIDB4MjcxN2FjZmMsIDB4MWU3YzZkMWMsIDB4MjI2ZmYyZjgsIDB4NWJhZjQ5ZmEsCisJMHhlYWZiNWQ5OCwgMHg4MDYzYTM4NCwgMHg3ODcwYTYyZiwgMHg3NDNhNzA4NiwgMHg3ZmQ4ZmNmYSwgMHhkMzQ3YzRjOSwKKwkweDVmOGE0ZTQxLCAweGU0MmRmYmFhLCAweDI4ZDkyZjM1LCAweDRiODdkMDEzLCAweDFmYTEwZTliLCAweGU4YWI4ZTZhLAorCTB4YmUzOTk1NzYsIDB4NzMxMWViYTIsIDB4ODM1MTY1OWMsIDB4YzdjNzllYjEsIDB4MTFkYjE3MmYsIDB4YTg5YWYyNWUsCisJMHg3N2MzOGE2ZCwgMHhiOWMxM2Q3OSwgMHhlNzFkZWViZiwgMHhiZDljMDg5OCwgMHg3OWY0N2RjNSwgMHgzZTk3MDZmNCwKKwkweDk3MGEzMWFmLCAweDFmMjRkMTk3LCAweDhmMTQ4OWUyLCAweGJmZmUyZjI4LCAweDJhODcxODhhLCAweDkwYzBiYzJiLAorCTB4ZWI5MTNmZWYsIDB4YzJiYWZjYzksIDB4OTQ0YjA4NjIsIDB4ZjgwZTNlNDMsIDB4ZWM3N2Y1NTEsIDB4YjFiMjdkODMsCisJMHgzMDNjZDUwNywgMHhiNDRkMjdhNywgMHg3YTlmYzE3YSwgMHhmMjhkZGVkYSwgMHgwOTY1ZDNhYywgMHhiYzBkY2JhNywKKwkweGQ0MDcxNzlmLCAweDU1YmYwMTE0LCAweDU4NmUwYjM3LCAweDVmNDNhYTc3LCAweGJkODZiOWUyLCAweDAyNTE3ZThmLAorCTB4NTViMGI0N2MsIDB4MGY5MTViNzAsIDB4ZTdlMDI5NGYsIDB4MTdmNWQwOTUsIDB4ZTViZjI5ZjgsIDB4MGJiZGRhMTQsCisJMHhmODQ1MGI1YiwgMHgwMTBlZTE3ZSwgMHhjMzdiZDIxMywgMHhiNmU5NWY0ZiwgMHg1OWUzZDM4OCwgMHg3MDA5ZGY4MCwKKwkweDhkNzViMzc2LCAweDU3YjdhN2MzLCAweGZjMDM3ZTRiLCAweDViOWQ4ZmM1LCAweDU2ZTBjNTlkLCAweGRlMDQ2YWFkLAorCTB4ZTc3ODYxYjEsIDB4M2VhZjM4ODgsIDB4YmRlM2FiYzIsIDB4OTg5Nzc4MzcsIDB4ZTRkYWY4ZTgsIDB4MjIwZjE4MzMsCisJMHhmMjdkYzkyZCwgMHg1YzZkYmU2YiwgMHhhMWI0OWFhYSwgMHhhN2M3YTY3ZiwgMHhmM2JkMTdlZSwgMHg5NTFiODg2NCwKKwkweDhlMzE5MjBhLCAweGVkZjE4ZGRiLCAweDhmZmZhMDFmLCAweGY4M2ZkN2NlLCAweDZlYmEyMTE3LCAweDA5ZjFiOWZkLAorCTB4NjdjOWY3YzQsIDB4YmEwMGNkMGUsIDB4MjQ1MTdhMmMsIDB4Y2U5NzRhMzYsIDB4ZTEwOTE3NDYsIDB4MDE0MDQ4M2UsCisJMHg4OTM1NTQzYSwgMHg0OGY3OGMxZSwgMHg1Y2ViODJhMSwgMHg2NWE4ZjhkMSwgMHg0MmVjZDhmOCwgMHhkNWI1NTgzZCwKKwkweGJmNGU5ODFhLCAweDQ5ZmVkYWFmLCAweDlkMzNkODJlLCAweGNiZWY3NTc3LCAweDE5ZmZiZjAyLCAweGY4OThlNTAxLAorCTB4MWY2MTczZGIsIDB4ZmI2MjRhYTgsIDB4NmVmYzY2M2IsIDB4ZDhmYWQ4NTQsIDB4MWIzMWMzYjEsIDB4NjA2ODQxZTQsCisJMHg4MmFhOGJlNywgMHg5NDZiNjRiMywgMHg0NTdiZmMzZCwgMHg3YmU5NzFjNiwgMHg3ZmU2ZDc5OCwgMHgzMGJjYzA1YSwKKwkweDVjZmEyZjgwLCAweGQzNmY5ZThiLCAweDRiZjMzNGYxLCAweDAwZTU5YWFhLCAweDZhYWE1MzljLCAweDcxMDlkMmQ4LAorCTB4NTY4M2FhOTIsIDB4MWJhYWQ3NWMsIDB4Yjc1YzYxNGUsIDB4YThiM2YzNzgsIDB4NDU5YmFiN2YsIDB4ZTMxYzlmODMsCisJMHgyMTg4MzY5ZiwgMHg0ZDU3ZjgyYiwgMHg0ZWNlMzA0YiwgMHgxZWIwODdlYiwgMHhlOWE3MWY4YywgMHhiNDVhOGZjZCwKKwkweDFmYmI3NWI5LCAweGE3ZjllNGU0LCAweDUyOWNmMTEyLCAweGY0NDRhNmRiLCAweDFmY2UxYjUzLCAweDQ3ZjE4YTFmLAorCTB4ZDc5ZWY3ODMsIDB4ZjljMTNkMWYsIDB4MzE4YTZmZTMsIDB4NTIxYTQ3OWUsIDB4ZjBhNTRmZDEsIDB4YjFjNTk0MTUsCisJMHhmZjdjYzNkNywgMHg4MDdmZTdlYywgMHhkNmM3Njk3OCwgMHhmMDAwZmVjZiwgMHg5OWQ3ZmUyZSwgMHhlMjgyZmMzZiwKKwkweGJiYjJlYzkxLCAweDNmNTVmZjQxLCAweDliYzYzNmYzLCAweDcyOGVlZmY0LCAweGY0ZjlkNWJkLCAweGViYTcxODUzLAorCTB4NDFhYWNmN2MsIDB4NDdhZDlkNmYsIDB4YWFiYzQzMDcsIDB4ZTk5N2NiNzMsIDB4NmYyYzlmNjAsIDB4ZDZmNjg2OWQsCisJMHhmZGM1NmRmMiwgMHg0MGZiMWM0OSwgMHgwMzZmODEyZiwgMHg5YTEzODg3ZCwgMHg2OWI3YjVlOSwgMHhmMzgwNjBlZiwKKwkweDZjMzdhNTI0LCAweDBiZTM4NjA5LCAweDVlMmMyNWMxLCAweDQyYjhmMmEzLCAweDZjNzhmYzYzLCAweGU5YTExYzRjLAorCTB4OGNhNjZiYmEsIDB4NTRkNjUyODEsIDB4YzI3ODg3ZDIsIDB4OTc4ZTk0NWIsIDB4OGQ3ZTgxZjYsIDB4ODllZjZmY2MsCisJMHgxZmUxMjc3ZSwgMHhkNWIyNGU5NCwgMHg5YmNmYmY0OCwgMHgzMWYxZmRlNiwgMHhlZDRhNmI2OCwgMHhlYTEwOWUzMSwKKwkweDc4ZjRkZTAzLCAweGM3OGExYmVmLCAweGRhZjkwNTZkLCAweGRmOGMyN2ZhLCAweGQzYTZkZDAwLCAweGZiM2U3Njg5LAorCTB4OTM4ODYwZjksIDB4NmZiYjkzMWYsIDB4NTZkNTdkYzUsIDB4NTc5N2VlMmIsIDB4ZjI4YmJlYjUsIDB4NzVlZGI5ZDMsCisJMHg4ZjA5MzdiNCwgMHhmMDkyNzZiYiwgMHhmMTkzOGIxZiwgMHg4ZGVhZDNkYywgMHhlMDg3MTYyZSwgMHg4NTM4ODdmOCwKKwkweDc5Y2Y4ODlhLCAweGIxZjE4MjNjLCAweDI5ZThhNzFlLCAweDc1ODU3MTNlLCAweDY1MjNjZjI4LCAweDFiMjU5NDcxLAorCTB4Mjk4ODU3ZGYsIDB4OGY4YzIzZWUsIDB4ZDEzZGYzYWMsIDB4MWI4M2M3NDksIDB4M2EyZTMwZjAsIDB4MGUzZjE2ZGUsCisJMHg3MmNiOGUxNCwgMHgyMGZkMDE3YSwgMHhhNzhlMTZjZSwgMHg4ODQwZmFkMSwgMHg3Nzg0MDRhZiwgMHhkMDdkMWM0OSwKKwkweGU5YzU5ZWI5LCAweGZlNjM2NTNhLCAweDJjM2U4NDQ5LCAweGEyNjQ1NmZlLCAweGRlY2YzZWIzLCAweGUwZGVhN2Q2LAorCTB4YzlmOGI2ZmYsIDB4NmM3OWM1ODcsIDB4YmUzYTllMmMsIDB4ZTdjN2FmOGUsIDB4YjdlZjg1NTksIDB4OTgyMTVhNWYsCisJMHg4MDJhNmZmNywgMHgxZDM0OTcxZiwgMHg1MTNmMjA1MiwgMHhmOWY0Yzc1ZiwgMHhiYzNiNzA3NiwgMHhmMzExMTllMywKKwkweGY3MDc1NzZiLCAweGViMzcxZWEyLCAweGRlNzBhNThiLCAweDNmYmMwZTIxLCAweDZkMmVmMGUzLCAweGM3NDRlYjY2LAorCTB4NDljMDU3NTYsIDB4YjNkOGU5ZmIsIDB4Njk3OWY5MDMsIDB4NGZjNTIxZTMsIDB4ZjBkN2RiZmIsIDB4NDZmY2MyYmMsCisJMHg0ZWIwM2YyNiwgMHhlZmUwYTIwNCwgMHgyZTc3NmU3OCwgMHhiYjMyMmY4YiwgMHhkZGNlM2NkZiwgMHhkM2E3OWU1NiwKKwkweGVhOWM3ZjEyLCAweDcxODY1M2M2LCAweDBhODNmOTE2LCAweGZmM2U5N2NiLCAweGNmMjQyNzc4LCAweDQ0ZWZlODJjLAorCTB4NWYyMDRjOWIsIDB4MmM1MDQ0ZjIsIDB4NTkzZmI3OGQsIDB4ZGM3OTk1NjksIDB4NzQ5NThlYmEsIDB4MjVmM2M0YmQsCisJMHg0NDllNzYyZSwgMHhkZTMwNTE0YywgMHhmZTM1ZGNiMSwgMHg5NDFhNTI2MCwgMHg1MDdlMGE4YSwgMHg1ZmI2NGFlZCwKKwkweDVhOWZmYjViLCAweDM2YmJkMDA2LCAweGM3OGMwNmY5LCAweGViZjA5OWQ2LCAweGMyMTc3MzRlLCAweGQ0ZjcxMzM5LAorCTB4YWVjMDMxYjIsIDB4ZWM5MzdkNjYsIDB4NWZlMDE4YjEsIDB4YWZlZDJhZWUsIDB4ZDE1NzM4NTIsIDB4Mjc1Y2UwN2UsCisJMHhlZjNjMzQ5MSwgMHg5NDk2MjYyMiwgMHhiNzQ0N2NjMiwgMHgxMzhmNmRjNSwgMHg2NTlkOTMwNywgMHgxNzg1MWJjNCwKKwkweDlmM2M2ZGQ5LCAweDU3Y2ViZTQyLCAweDlmN2QxZmExLCAweDZkYWRiMTc1LCAweDNkYmEzNjFmLCAweGM0OTVmMDAyLAorCTB4YWYwYmQ1ZjcsIDB4YmJiY2UzNzcsIDB4NTgwZDA1MWEsIDB4ZDU2M2FhOWMsIDB4MDVmMmNlOWQsIDB4ZGFlOGRkNjAsCisJMHgyZTRiOTQ5YSwgMHg4Nzg5MGZjNSwgMHhmZTBlMjdhZSwgMHhiZGRjNjg1YywgMHhhYWQxZjQxYiwgMHhhNjQ5ZTI0NCwKKwkweGFhYjE0NjcyLCAweDRlNzAzOThhLCAweGM4NGRiNDY3LCAweGY1M2QzZTAxLCAweDVmYjQ4YmVhLCAweDYwNDg4YjdiLAorCTB4YTljYmJmOGIsIDB4OTI3OTBiZTcsIDB4ZTQxY2NlNDEsIDB4MDEwYmNjN2UsIDB4MzUyNmZlNTYsIDB4NWYzOWE3MDIsCisJMHhlOTJiYzA4NCwgMHhkM2JjNzM5MSwgMHgzOWM2Mjc0NCwgMHhkMTEzYWY0ZSwgMHhjNWM5MTU5ZiwgMHhmY2NjOWJiZiwKKwkweGY4MDAxMjczLCAweDg4YjI3YWY5LCAweDRhMWE3OWMzLCAweGMxNDJiZjc4LCAweDdmMDVkYTNjLCAweDQ0MjBiZTc5LAorCTB4ZjFhMjFkMTgsIDB4ZjQ2YTVhOTUsIDB4ODllZGViMTcsIDB4NDM2ZmIwYjksIDB4YzgzNjllZmMsIDB4ZmRlMGFlNGIsCisJMHg5ZTMzMmJmNSwgMHhlN2UyYTFmMywgMHhjZjUyZmIwNywgMHg3ZTZjZmZkMywgMHg3ZmQwN2VjOSwgMHhhOGY5ZGUxNSwKKwkweDM2Y2ZmYmQ3LCAweGRiMzIwMzllLCAweGU0MmYwOGVmLCAweDdiYjk1MDBkLCAweGU3YjU4ODRjLCAweDVjMWU1YjJiLAorCTB4YjFlMGY5MGQsIDB4MDQ2NGYzZmIsIDB4OTE1NDFiZTQsIDB4YTFmMjBkMDQsIDB4MDc3ZGY2Y2QsIDB4ZjFjODRkZTgsCisJMHhlMDI3MTI3MSwgMHhkOTdkNjdiMSwgMHg4N2RiN2UwYiwgMHg5OGYyNmVmZiwgMHgwYjU3ZTJmMywgMHgyZThkZmJjMSwKKwkweGYwNThkZmRjLCAweDNmNTFkYjk3LCAweGY4OGMzMzU5LCAweGZjNDZhYmI1LCAweGYxOTg0NjNhLCAweDRiYjNjNDY4LAorCTB4YjI4ZGUyMzMsIDB4Nzg3Y2UwNzksIDB4M2M2ZjFhNGUsIDB4YjNjNjY1NWYsIDB4MGUxZGE4NDQsIDB4ZDA0MDRhZjYsCisJMHhmOTMxZmU4MCwgMHgxMWViY2QwZiwgMHhhNmZjZGVlZSwgMHg4ZjVmMWIzNCwgMHg1ZmU5NWUzOCwgMHhhOTlkMmQ5OSwKKwkweDUzM2I4MDZjLCAweDk4NWNhMTBhLCAweDE5Y2IyOGU1LCAweDgzZGZlMDEyLCAweGYxMmIwMmQyLCAweDdlODVjZDJiLAorCTB4OGY5ZjA2NDksIDB4NzNiZWMxNTAsIDB4MDA4OTFjODAsIDB4MDQ3Mjg2YWYsIDB4Y2Y0MDI4MjcsIDB4NmUwN2M4M2IsCisJMHg3Yzg1YTdhMCwgMHhkOTE5YmU0MiwgMHgyY2VmM2QzMywgMHg1Y2QwZTk3ZiwgMHhlMDNhZDVmYSwgMHhhZTUxNGJkZiwKKwkweDE0YTkzOWQ4LCAweDA2Y2RhODEyLCAweGIwZGNkNTM5LCAweDM2N2QwNzZlLCAweGYzODI0MmI1LCAweDE4YWQ0NGU2LAorCTB4ZGRjY2U3MDYsIDB4Yzc5MDNlNTgsIDB4NDUxYWVmZGUsIDB4MTgyYzVmMzAsIDB4ZmEwZTliM2EsIDB4MjkxZTdhYTksCisJMHg4MGY3ZmQwMywgMHhmYzAzM2RkMiwgMHhjY2VkZmJkYiwgMHhhZWM4Yjk0ZiwgMHhhNWZmM2VhMCwgMHg5Y2FmZGY1ZCwKKwkweGE5Y2I5N2ZhLCAweGM4YjU3NjNjLCAweGViYzM5YzJhLCAweGJiNjRkOTZhLCAweDIyY2RlYTAwLCAweDRlYWVmNzllLAorCTB4YzYwOGJiYWUsIDB4MTk5MTZjZWYsIDB4YzBiNjE1NWMsIDB4YjdjN2UwMDUsIDB4NzQxZWI4Y2EsIDB4ZjNjNjRjNTYsCisJMHhhZGJiNjEyYywgMHg3NjEzZWQ4NSwgMHg3ODkyN2NiNSwgMHhlZjNlOTQ3YiwgMHgyMmY4N2U2YywgMHg2YTNjMzM4OCwKKwkweDc5M2ZiZjg5LCAweDlkZjJjZGJkLCAweGZhZjBkNGZjLCAweDNmOTMxNGRiLCAweGU1OGRiZDcxLCAweDk0MzAzYzRmLAorCTB4Zjk2OTYzY2UsIDB4MzMwZWJlNjksIDB4ZTljNDk4NzksIDB4YWJmY2QyZmMsIDB4NWFkYmZlNzAsIDB4ZTc0ZjNmYTgsCisJMHhmY2RlMjI1MSwgMHgzY2U4NGJhMywgMHgzMTJkYmMyNywgMHhkMzNjNGFmZCwgMHhhM2IzYTRlNywgMHgwZWZlZjAzYywKKwkweDNlMDA2NWEyLCAweDAyMjE0YzI2LCAweGY3ODRmM2M4LCAweDhmZWJlZTA4LCAweDdlOGY5OWE5LCAweDk0ODk4YmQ1LAorCTB4NGM1ZjI5Y2YsIDB4MGI3Y2ExNmQsIDB4ODljM2FlN2EsIDB4MzZkOGZiZjYsIDB4Yzk5N2MwYzksIDB4YzE3YmJkNTMsCisJMHg5MDc3MWNjZiwgMHg3NzFkYmVhMCwgMHg5ZTNlZDhkMCwgMHhhNzFjNDQwNCwgMHhkMjdjZjhkZCwgMHhjNmJkNjMzMSwKKwkweDEyMzNmN2M2LCAweGY3ZjAzYTQ5LCAweDg0NDVhZmRhLCAweDY4OWJhYmFiLCAweGJiN2VkMTc3LCAweGZkZTAwNjJhLAorCTB4ZTE2NzVkMDIsIDB4YmYyZDE0OTQsIDB4YWRlMzRiMTYsIDB4OGM2ZDJiZjMsIDB4MDg1NTFlMmYsIDB4Y2U4ZjJmYWUsCisJMHhjMTNlZTI3NywgMHg5ODU1Zjk5ZSwgMHhjZmM1ZmQyNywgMHg5ZGUyNDNiZCwgMHg0YmQyOGJiYiwgMHhkZGZmNmM0OSwKKwkweGE3ODE0NDkzLCAweDYwNGFiZDdjLCAweDhjY2JhZWY4LCAweDRiZDI5N2RlLCAweGJlNzU4ZjlkLCAweDczMzlmOWQ2LAorCTB4NWUzNzgyN2UsIDB4Y2VjMzhhZGUsIDB4ZjlhMjlkZWMsIDB4ZmMwNTA0MjMsIDB4MDEwMjVkYjIsIDB4ZTVkZTc2YmMsCisJMHg5YjVmZTQzNSwgMHgyYmI5M2Y0YiwgMHg2ZWE5ZTAwYiwgMHhiNjc2ODMzZSwgMHgxZTdlMjVhZCwgMHgyMjViMDZkNCwKKwkweGYyZWVmYmYzLCAweDhkN2M4NGFmLCAweDA0YTE1MjlmLCAweGJmNzNkOGZkLCAweDVhYWZkMTZiLCAweDg4NTM0MTAzLAorCTB4ZTZlYWQ5ZWIsIDB4NzlhN2I5ZTAsIDB4ZTIwMWIyMzYsIDB4ZTY1ZDUyYjAsIDB4ZmJlMDJlYjUsIDB4NTM1NzJiZTIsCisJMHhiMzJiMWY3OCwgMHg5NTFmOWQyMCwgMHhiZmRmODQzNSwgMHgyZjhjMTA4NCwgMHgwNzdlNGM0OCwgMHhhM2ViMjBjZSwKKwkweGRhMzU3ZmNmLCAweGI0NmQ5YjBhLCAweDFiOWI2NmRmLCAweDZhZjU0ZmZiLCAweGZkYWZjMDAyLCAweGMxMTI3ZmYzLAorCTB4NjczYWU5OWUsIDB4ZTAwZTNhNDUsIDB4ZGRmZThmZmUsIDB4YWY2NjM2OWIsIDB4NmNmNzYyZGQsIDB4OTUyN2ZlMDUsCisJMHg5YTFmMjg2OSwgMHg0OGFkNTEzNywgMHgxNGEwNzM4NSwgMHg0ZmUyNzFlZiwgMHhlMjlhNWRiYSwgMHhjMjhkYmFhNSwKKwkweGUwYjRlMjkzLCAweDc4ZjExMGJlLCAweDk3OWViNzU0LCAweDUxN2JmODQwLCAweDAyNDI0MGYyLCAweDVkMDViYzgxLAorCTB4NDIyZDBhOWYsIDB4N2ZmOTQ1YzgsIDB4MDIxOWNkOGMsIDB4OTJhNTIzM2YsIDB4NjA4MjliY2UsIDB4NWZkNjM2MjcsCisJMHgzZTExZDQ5YiwgMHg5MDc5ODZjNywgMHgyMDBiMmY5NCwgMHhkZTYwOWRmOSwgMHg0MTVhMjQwMywgMHhkNTllYmFmZiwKKwkweDY0YWFmM2Y1LCAweGQ1NjZmYTgyLCAweDk2YTA1MjgzLCAweDZhNGViM2Y2LCAweDI0ZmM0M2I3LCAweGMxMTZhM2RiLAorCTB4YTQ4YTczNTYsIDB4NDFiYWY5ZTIsIDB4MWQxZTRjOTUsIDB4ODcyNzhmMzksIDB4ZWMyYTE1ZWQsIDB4ZGUyNWZmYTMsCisJMHhlZjhlMmYxNiwgMHg4Yjc1N2NlNiwgMHhlMDNlZmJkZCwgMHhmNzdmNzczYiwgMHgzNDZiMzAxZSwgMHg3YjRmMWIzYiwKKwkweDc5ZjY4NmQ5LCAweDNiNzA2ZjU4LCAweGJiYWY4NGFjLCAweGZiNjUzZTEzLCAweDM5NzQyNGM2LCAweDcxZTg2M2U2LAorCTB4YTBkZWIzN2EsIDB4MDhhNmYwNzIsIDB4NDRhOWY1NzIsIDB4ODc5NDNjZjAsIDB4NGY0MGFmZmUsIDB4MWZkMjg4YzksCisJMHg2ODJjOWQ3YywgMHhiNjhiZDlhZSwgMHgyZjZhMzg5YiwgMHg1N2E0ZTNmMCwgMHg4YzczZWNmMCwgMHhjMDc3MTkxZSwKKwkweDdlZjAwYjViLCAweGU2NjFmZDU3LCAweDJhMjFkMTg3LCAweGEzM2U5YzhmLCAweGVjMTczODU0LCAweGZkYTFkNzBlLAorCTB4OTM3ZDI2NWYsIDB4M2ZhNjNlNTYsIDB4Y2Y5Y2I1ZGEsIDB4ZTVkNWY4Y2MsIDB4NzllZjJjZGEsIDB4NTZiZGI0MmIsCisJMHg0ODgwMzVlYywgMHg4NDQzOGYzMCwgMHgwZTZhMWMwOCwgMHgyMjAzYTNlOCwgMHg4NTVkZjdkOCwgMHg1YzI4NWY5NCwKKwkweDI4ZWU0MTFiLCAweDBkOWYyNmJmLCAweGIzN2MwOTVjLCAweDNiMGFlNWI2LCAweDVlNzdjN2M4LCAweGViZjQ0MjNmLAorCTB4N2ZlM2I4YTgsIDB4NzY4MWRlODgsIDB4MDg5ODNmOTYsIDB4ZmJiYTU4NzgsIDB4NDIzZjVmMmMsIDB4NWQzMGU3NDgsCisJMHhjNzQ0N2NhOSwgMHgzN2JlNzQ0MywgMHgxNzJlYjlmMywgMHgzOTQwNzBiNSwgMHgwMDliOWQ4NywgMHgxMDQyODhmYSwKKwkweGViMjU2YjA5LCAweGU4YTc2MGRjLCAweGQ4NmQ3NWY2LCAweDdjYzY0ZDllLCAweDM2NmVlNWVmLCAweGRiYWNhZDVlLAorCTB4ZTYwZDlhZTUsIDB4ZDQ1NWRjYmIsIDB4MmVmYjdjZmYsIDB4ZmZhOGU3ZDUsIDB4NWQyZjk1MTIsIDB4N2ZhMzc1MmQsCisJMHgyMTRlN2Q1NiwgMHg4MWVmZDQ4MSwgMHg3YTNhMTZhZiwgMHg0NTVmMDFiYSwgMHhmOGIxN2VmNiwgMHhkNDcyMDgxYSwKKwkweGY5Y2JmZmVmLCAweGNmOWU2Y2RjLCAweDNlNjQ2YTNkLCAweGM1Zjc4ODkzLCAweDBhMTdhYTc2LCAweDY0Y2ZhY2VlLAorCTB4Y2FkZTQxN2MsIDB4N2UwYmU2ODgsIDB4ZjkyN2IxZGUsIDB4MWJlNTRmMWUsIDB4NzkxOGM3ZGMsIDB4ODRmMWM5MzYsCisJMHg5NmM3MmExNiwgMHhlNGQ2Mzk1OCwgMHg0ODI3YmMzMiwgMHhiZWEwNzU2YiwgMHg1OWY1Y2IzMywgMHgwNzZhYWYzZSwKKwkweGEyNGRmYmMzLCAweDlmMzA2N2Y3LCAweDYwZjc0YjZhLCAweDk1NWNiYmUwLCAweGMwYTc0ZWE0LCAweGU4OGIzNmU2LAorCTB4NTRiNjkwMDcsIDB4YmIxMjNhYzMsIDB4ZGM1OWZiYmUsIDB4N2EwN2FmOGEsIDB4YTY2ODUyOWMsIDB4YjNlNzRkN2MsCisJMHgwYmJkZWVjOSwgMHhjZGQ2YTVlNCwgMHg1ODM4NGFmYywgMHhhMzcwNzYwNCwgMHgzYzM3N2JjZCwgMHgxMmQ4NTA3NywKKwkweDg4Yzc1Y2UwLCAweDgzOGIzNjUwLCAweGQ0NzIwYzg0LCAweDRjMzhkYzkzLCAweDQ5MGMxMTcyLCAweGU5ZjkzZWI4LAorCTB4ZDA4MTc0ZmEsIDB4ZjZjNTNjMzMsIDB4ZDUyZjA2NjQsIDB4MGM3ZjYwMTYsIDB4YjA2YzIwMmMsIDB4ZjlmMzA0YTUsCisJMHhmM2IyZTYwNiwgMHhkOGYzMDNmOCwgMHhkODRmNTlmZCwgMHg5MWI5YmFkOSwgMHhkOTdhMDdhZiwgMHgwNzViMmI2OCwKKwkweGUyMjU5Mzc4LCAweDc3N2RlNmI3LCAweDg4NTQwMWI4LCAweDdiYjI2ZTBiLCAweDZjZmU4MzFlLCAweDQ3OWMxZWE1LAorCTB4MDI2ODliOTYsIDB4MjkyY2EzZTUsIDB4NTNmZWMwMjgsIDB4NjA1NTYyY2EsIDB4ZDZjMjQwZjEsIDB4N2Y2OTI4MTMsCisJMHg0MmQ1ZDM1OSwgMHgyMGIyOGY1OCwgMHgwN2RlMDA5NywgMHg5YzhlMjYzYiwgMHhlZmU1ZGFiNCwgMHg4ZTZhYzcxNywKKwkweGI5NWJhM2IxLCAweGU4NTNlYzFjLCAweGIzYTc1MzdjLCAweDNjNzBlNDNjLCAweGY4MGY4Mjg2LCAweDgwZGQ3NGVkLAorCTB4OWNmY2VkOTMsIDB4OTNmODM1ZTUsIDB4N2VjZDllMTksIDB4ZTYwYzEwMTUsIDB4ZGRmYWYxMjUsIDB4MjllYzkxMGEsCisJMHgyZGY4ZjdlOCwgMHg4NmM1OWRmMCwgMHg2ODgzOGY3ZSwgMHgwNzhiZDA0MSwgMHhjZTVjZWNlZCwgMHgwMzViNDE2YSwKKwkweGRkNDhkZmY1LCAweDQwYjdiODM2LCAweDI2MDdlYmU3LCAweGY0NDlhYjVmLCAweGE3MjljNDk1LCAweGE1MTdjMTczLAorCTB4ZjAyNmZlN2MsIDB4ZDNlNGU3NWIsIDB4MGNlMTU3YzMsIDB4N2UzMzA3YmEsIDB4YmM4Njg4ZjMsIDB4Y2Q2ZTlkNDcsCisJMHg3NjZlODFiMiwgMHhlYjQ0NzM4OCwgMHg3ZTgyOTc2MSwgMHhhMDkwYTc3YiwgMHhiOWQzOWY4MSwgMHgwYTcwNjA1MCwKKwkweDJhMTc5ZTM2LCAweDVjMmZlMzE5LCAweGZkZmFlOWNmLCAweGU5YmNkODJiLCAweDhmZjFmMzA3LCAweDZjNTY3YmM2LAorCTB4ZDFlMDBkOWEsIDB4MWI5ZjBmZTEsIDB4MzFlYjlkMzIsIDB4YzhjOWZiOWYsIDB4MzI2M2M3MDksIDB4NGNhYjRmMzEsCisJMHhjODUyYmI4MSwgMHhkYTA3MTZlOSwgMHg0Yzg5ZDU1NSwgMHhkMGZjY2RhZSwgMHg3OWMyOTQxZiwgMHg3YzUwY2JjZSwKKwkweGVkZjQwOTdkLCAweDgzMjRkNzJmLCAweGNiN2ZlZDFlLCAweGFmYTA0NGUxLCAweDgyNWQwZjE5LCAweGQ4M2VmNDdmLAorCTB4MWM5YmZhYjcsIDB4MmY1YjdmNzcsIDB4OTQwNjMyMzMsIDB4OTE5OTlkODMsIDB4ZmVhNTgxOTksIDB4YzUyOWRlYmMsCisJMHgyNmE1ZWY4ZCwgMHg2YmI4Y2Y3YywgMHg0NmRiZTU4MCwgMHgwMjZhNmJmMSwgMHhmN2E0ZWZlZCwgMHgyODNjNzc4ZCwKKwkweGY3MThkZGVlLCAweGY4NjA0ZmFlLCAweDNjNzQ1N2FlLCAweDY3MjA0OWFhLCAweGM0OTZiYTkxLCAweGIzMjc3OWNlLAorCTB4OGNkYzFjN2IsIDB4YjY3ZDZiOWUsIDB4N2U4YTQ5NzIsIDB4NDY3NjgzY2YsIDB4ZjJiOWUyM2YsIDB4NmIwMjUwNDYsCisJMHhmOTA5YjI2NSwgMHhmNDY1YzU5YSwgMHhlOGFhNWM3YywgMHgxOTkyZmQxOCwgMHg4ZGY1YmY1YywgMHhmZjdkODcyZSwKKwkweDljNjQ4NGRjLCAweGQzYjVkOWVmLCAweDcyNzRiYzcwLCAweGM1Mzg3ZDk3LCAweDhiMzJmY2ViLCAweDkzOWFmMTA2LAorCTB4MDg5ZWZmNzMsIDB4NjZlNmZmNDcsIDB4M2MxMDE1YjUsIDB4MWFiMzVhNjIsIDB4MTZmZmFlZmMsIDB4OTQwOWI5YmQsCisJMHg1NGY1Njk0ZSwgMHgzZTMyYTUxMSwgMHg3NGEzYjkwMCwgMHgxM2Y3MTJiOSwgMHhlNmUyNThlNywgMHg2MDRkOGRkZiwKKwkweDc2YTdmNTdlLCAweDkxOWI4ZTM3LCAweDIyYmNiODMxLCAweDEwM2ViYTNmLCAweDIzZjNhNGU5LCAweDhhY2NjMzk1LAorCTB4NjE3MzkxMzEsIDB4MjRhNjNmOTQsIDB4MmVhNzkxYzQsIDB4N2VjMzM0OTksIDB4ZDMwZmFlODAsIDB4N2Q3NWZlMzgsCisJMHgxYTQzY2JhYywgMHhlZmVjMTljOCwgMHhhOGZkNTE5NSwgMHg3ZjI4NzNkMywgMHg5MGUzMWQzNSwgMHhmY2I0MjdmOCwKKwkweGYzYjA0YmY5LCAweGExMTRhNzEzLCAweGJmZjJhM2JlLCAweDA0NjVlNTA2LCAweGQwNzZkZmQzLCAweGM3ZjE1MWE3LAorCTB4MDc3N2Q2YWUsIDB4ODdkZWJlYzEsIDB4MDVjNjc5ZmYsIDB4OTBmZjNiZmIsIDB4M2ZhMDVkYmEsIDB4NGRmMmZkOGYsCisJMHg3YzExZTQxNywgMHg4NzE2NGJmOCwgMHgxZmU0ZDViOCwgMHg5ZTk4MTM3OSwgMHhjZDk0MjYwZiwgMHhlNmRkNzk4MiwKKwkweDM3ODE2N2ZiLCAweDBhYzkyZjhhLCAweDkwYjE1ZmI2LCAweGYzYzZiYjJlLCAweGJjZjNjNjgzLCAweGYzZTY4MjRiLAorCTB4NzdlYzdlYmIsIDB4OGUzZjE0ODksIDB4YzNhNzA4ZmUsIDB4NGFmNWM2YzIsIDB4N2JlMzBhOTYsIDB4OGYzZDAyMTcsCisJMHg1OGVmZmY3MSwgMHg0MzY3YmIxMywgMHhlMzZlNjc4NywgMHhhMjdjMDU2OCwgMHhmOTU4YjQ3ZiwgMHhjYzliNzZiZSwKKwkweDc0Y2YwNWQ2LCAweDcyZjJhN2Q4LCAweGRjZTE5OWJjLCAweGZkODFjYmI3LCAweDQ0NDQ3YmNkLCAweDFkMGU2NGJmLAorCTB4YWZkNTA1NmIsIDB4Njc5NjE2ZGUsIDB4YmNjNzllNmIsIDB4MzgxMmQ1MGYsIDB4NWVlZjNmMmYsIDB4Nzg1ZGZkMDEsCisJMHg5ZDc0OTdmZiwgMHgwN2I4YWVmMiwgMHhmM2NjYjNmNywgMHg2MDNmZGYzNCwgMHhmYmE0YjczZSwgMHhmZDM4MGI0OSwKKwkweGU1MTc4ODJiLCAweGEyMGYyNjJmLCAweDliM2JlZDg1LCAweGY3YTc3YWUzLCAweGZlNjAzOGU3LCAweDNmNzAyNWY3LAorCTB4ODM4YzgwYTMsIDB4ZmJhZDg3N2MsIDB4MmY5ZDI2ODcsIDB4OWY4M2FhY2YsIDB4ZjNjMTNlZDcsIDB4MDhmOThmMzMsCisJMHg1NDEyYjM5NiwgMHhlNWJhMmU3NiwgMHhhYmUwMTJmNSwgMHhmMDViY2RhNSwgMHhhYjZmOTZiZSwgMHgxY2I0OTY2ZiwKKwkweDg5MzFmYzRmLCAweDFmNmExZGU4LCAweDIxZmUwN2FlLCAweDM3NjBjMTVlLCAweDQ2N2Y1ZDJlLCAweGMzMmM3ZTYxLAorCTB4ZjlmY2NkYzMsIDB4ZGM1ZjMwY2QsIDB4NzJmNzY1MjcsIDB4M2U1OGJjZGMsIDB4Y2I5ZjdkMWIsIDB4N2NjNjA5ZDMsCisJMHhmOWYwOGVlYiwgMHgyNThmMzY3MywgMHg5ZjQ4MWY3YywgMHg2NzlmOTk5ZiwgMHg1ZTc4YjAyNSwgMHhkNWYyYzZjNSwKKwkweDZiOTRlODAzLCAweGU2MGU4ZjViLCAweGRmMzAwYWU3LCAweDMzMTdlNzVhLCAweDY1MjAyYzNmLCAweDE0NDI5OTI1LAorCTB4OGQ3ZTViZGQsIDB4YTlmNGVhNzAsIDB4ZTdjMzliYTgsIDB4ZmJlMGNmZTMsIDB4ZTcxMDE5NmYsIDB4Y2MwZjhkZTksCisJMHhkYjk0ZWVmNCwgMHg5YTdjODMwNywgMHhjM2Q5ZGRlOSwgMHgwOWFkZjBmOSwgMHg1MGFmZGQ2YywgMHhmZmEwMjUzZCwKKwkweGQ1YjI5MWU2LCAweGUzYmIyOGVlLCAweGVmYjc1NDk4LCAweDFiMzcyMDE3LCAweGFkNDZkZjE5LCAweDdiMzhjY2E3LAorCTB4NzlmNWM2NDUsIDB4MGZlZDRiOTksIDB4MWQyMTBjZjcsIDB4YmRmZWMwMjYsIDB4ZTllZjBmZDUsIDB4NzlmMTFjZTMsCisJMHhlMDEyNjFiNCwgMHgxM2NiMTRiOSwgMHhkODZkMzJiZSwgMHhmY2ZiNDhiMCwgMHg0MjI0Y2Y0NywgMHgwNDZiYjUzYywKKwkweGE3NGI3OGMxLCAweGM3ZWYwOGNiLCAweGYzYzIyMjA5LCAweDYyYzNhNzMxLCAweGVmNWZlZGE5LCAweGQ4ZDljZTgzLAorCTB4NDcwOTc5ODYsIDB4OWFmMWU2YmUsIDB4ZjFhNWFkYWYsIDB4YmU0ZmY5ZTYsIDB4OWY3ZTExZmUsIDB4NmU1Y2FkY2EsCisJMHgzNmUxZmY3NCwgMHg1YjViYjc0ZSwgMHhkY2YzYmVkOCwgMHgwZjQ4ZTU3NSwgMHgwNzIwZmRmMywgMHgxNjQ5NzcwNCwKKwkweDFjMWJjYWVkLCAweGNkZmQwMGFkLCAweDVkYTc5OWY0LCAweDZiZjQxYzcxLCAweGZkYzg5ZDBjLCAweDk4YmQyZjljLAorCTB4MmY1MTUzNGYsIDB4NGNjMjdjNjIsIDB4OWI4NzBhYmYsIDB4MzVhYmNkZTUsIDB4ZWEyZDZmZTgsIDB4ZTU1ZGNmNDEsCisJMHhhZmFlN2E2MCwgMHg2M2NmMzFmMywgMHg3YTgwOTM0ZSwgMHg4MmZmMGNjZiwgMHgwZjU3MmI4ZCwgMHgzNjdmMzAyMCwKKwkweDg0NzlkOGJmLCAweGUxOWVhMjA2LCAweDU1ZTdkNGYzLCAweDQ3M2MzNDQxLCAweGQzOGZiMzFhLCAweGNlODkzOTdlLAorCTB4NzJkODVjYWIsIDB4MmVjMWU2M2IsIDB4MmMyN2YzYTUsIDB4MWJmMTgzZGUsIDB4NWUxZDdlMWQsIDB4YzQ0YTNjZjMsCisJMHhmMTA2ZDkwZSwgMHgwNjgyMTVkNiwgMHhkZWY2MzZmYSwgMHg1ZWUxOGYxNiwgMHhiYjBkMzlhOCwgMHg4ZWZkMDIwNywKKwkweDIxYWJlZDQ4LCAweDJmYzQ3YmZlLCAweGY1ZDZmZmEwLCAweGI0NDVjMTAxLCAweGZiODA4ZDZiLCAweGFmZDIzZDVlLAorCTB4ZjRlZGU1ODUsIDB4MDUxYWM3NGMsIDB4NThhYTM5ZWUsIDB4ZTNhNWM0MjcsIDB4NmQ0MmZhODIsIDB4NTlkZTk0NTgsCisJMHgxYjUyYjgxOCwgMHg4ODM3ODA2NiwgMHgxYThiMWM3OSwgMHhhN2NmMGRjYSwgMHhiOGZhOGMzOCwgMHgzNTIzNzkzNywKKwkweDc0ZDJmM2YxLCAweDRkZTVkMmY5LCAweDg3MGFiZjk3LCAweDUyZmZlMmNhLCAweDM2NTY1ZjYwLCAweGQxMDdlOWU4LAorCTB4ZjY3YWEwY2YsIDB4YzM4YjA3NmEsIDB4N2QyMzcwM2MsIDB4NjdhM2U5NjUsIDB4NzlmYzcxMGMsIDB4ZTY3ZDE5ZTMsCisJMHg3OWYxZDM4OSwgMHhjNTAzZWI0ZiwgMHhjZWRmNDE4MywgMHhlZGY1MTg3MiwgMHgzZThmOWRmNywgMHhmNDJlNWQwZiwKKwkweGMyZTU5OWY5LCAweGZlM2Q3ZjhjLCAweDE5ODNhNjY1LCAweGQ4MTcwMGZmLCAweDFkNWEwN2ZiLCAweDkwMDRiYjgxLAorCTB4YmZhNzA2NzcsIDB4NzY3MDhlZDUsIDB4NzA2OTE0NjYsIDB4N2MwMGU1OWUsIDB4ZDJkY2Y1NDAsIDB4ZmQ2MzFmY2MsCisJMHhiOTZjYjEyNiwgMHhlZTM0ZmQwMywgMHhmM2YxNjkwNywgMHgwZmY2YzI2ZCwgMHhmZWM0NjNiNywgMHgxZTMwMTE5NiwKKwkweGM4MzQxMzExLCAweDJjYjMxNzBiLCAweGJjZTk1YjM1LCAweDFjYjQyMWM0LCAweDlhYzFlOTA1LCAweGViOWZlNzA4LAorCTB4ZTExMzJmOGEsIDB4N2U1YTg2ZGUsIDB4YzJkNmJhM2UsIDB4ZmRlOTZkY2UsIDB4NzViMDcxYWQsIDB4Mzk3NzJmNDksCisJMHg2ODNiNTZjYSwgMHg2YjVmMjdmZiwgMHg3OGIwNzAyYiwgMHgzODE5ZmEyZiwgMHg5M2VlMTE0ZiwgMHhkODMxN2VhNCwKKwkweGNjMTMyZmIzLCAweDIzNGJjZDRmLCAweDBlYmU4MTdiLCAweGYyMGYxOWUyLCAweDg1MjM4Y2ZkLCAweGZiNjU1ZjlmLAorCTB4MGIyZmY0NmMsIDB4Nzk2YWNkNGEsIDB4ZjkwOGQ1NWUsIDB4YTYwNzdkZmQsIDB4NWE3MDNkYzEsIDB4NmNjZWU1OTIsCisJMHhmMWMyN2Y1YSwgMHg1OTY3YWIzYSwgMHhhOWJiNjRjZSwgMHg4Mzc4ZWRmZiwgMHhjZTVhNDdkNSwgMHhhN2Y1YTUwYywKKwkweDNhYjI2ZjFjLCAweDA1NTEwODZjLCAweGFkZTNiNGYzLCAweDMwNTFmZTY5LCAweDNmZGY5YjhlLCAweGYyMDkxOWUwLAorCTB4NWY5ODU5MjAsIDB4MzA1MWVkMmIsIDB4YTNlZmFjZmUsIDB4MmMwNmEyYWYsIDB4MDBjZmFmZjgsIDB4YmE5ZjgyZmYsCisJMHgwZTRmZThiMiwgMHg3OTE1ZWY4OCwgMHhiZjFmZDg1NCwgMHhmZGI2ODIxZiwgMHhlM2E5N2JiZSwgMHhmMDU4NzQ1NSwKKwkweDAxMjgwYTVlLCAweDNlMzg1YmZmLCAweDI2OTBiYTc1LCAweDIzYzg0OGNmLCAweDQ4Y2Y0MTI0LCAweGU1ZDg3N2Q4LAorCTB4ZGQwMTM2ZjAsIDB4NWRiNDBmZjMsIDB4ZjRkNDcyMDYsIDB4ZjAwYmRmYzYsIDB4YWMyMWNjZmUsIDB4MjhjYTdjOWYsCisJMHhjOWU2ZGY3MCwgMHg4ZmFkMDYxNywgMHhlNWRiYmZkZSwgMHhmNDAxZGMyOCwgMHgzYjQwNjRhMSwgMHhlNGRkNTA0MSwKKwkweGQ0MTc2YTY2LCAweGM5NWUzZjUyLCAweDY4YzQ3ZjAxLCAweDdlNzEzNzg3LCAweDZjYTEyZDdiLCAweGMwZDlmMjM3LAorCTB4OGUxZmQzMTAsIDB4OGZkMGJkYjIsIDB4MmRhNDU3MmUsIDB4YTc3YzRmYTUsIDB4NDExMGFlZTQsIDB4MzU2NGE2M2YsCisJMHg3MjBiOWMxZiwgMHg5Y2VjZGZmOCwgMHg2MGYxZTBhYywgMHhmMGU2ZGJmZSwgMHgzZjZjMjBmZCwgMHhlOWZiMDFkZCwKKwkweDkyMzVhZmEwLCAweDcxZTc0ZmUxLCAweDIzOGYxNjA1LCAweGZlNTEwNTY5LCAweGZkMDc5ZjA1LCAweDM3ZGMyYTdlLAorCTB4ZjZjMWNlMzIsIDB4NDRiY2U5NWIsIDB4MTM0NjFmNTgsIDB4ODg3Y2NiMTUsIDB4NmEwMGU0MTMsIDB4NDlkZjU4YmQsCisJMHg0MTdmMDc4MiwgMHhjZWM4N2ZmYiwgMHgwMzViNzRmYywgMHgyYzVkYzQzMSwgMHg1ZjdlYjY0ZSwgMHg3ZGQ5OTJlOCwKKwkweDVhZjA3MjJkLCAweGE3MDllM2QwLCAweDc4ZjQxYjg4LCAweDg0OGFlM2Q3LCAweGZiOTIxOGY5LCAweGIwOWZiODQ3LAorCTB4ZGUwMDQyY2YsIDB4MWI4MGU0YTcsIDB4MTdkZGQ5ZTIsIDB4MTIwNmVhNDksIDB4ZDM4YmFmZTksIDB4MjFmN2VmNWIsCisJMHhlMjA4YmQ0NSwgMHhjYzVjYTMxZCwgMHg5MGFhNzhiZSwgMHhmNzY4ZmU2MCwgMHhmYjAwMjU3MSwgMHhiNjU5Mjk0YywKKwkweGZhYmY2ODlhLCAweGVmN2IwNzJiLCAweGNmYTJhNGQ2LCAweGQ2YzExZTgxLCAweDhmZTMwMjA0LCAweDQ0MGQ0NWRiLAorCTB4MzUzZjg3NGEsIDB4MWY4MWQ5ZTYsIDB4Mjg4ZTAzMzYsIDB4ZWVhYzUyMWUsIDB4OTRiZmEwM2IsIDB4NmNkZTE0MzMsCisJMHhmYzQxZWU3YywgMHgyNGU4ZWE0YSwgMHg1Nzg5ZGY4YSwgMHhiZmI4NTUzOSwgMHhmMDdiMjllMSwgMHg3YjlmY2MyYSwKKwkweDI0Zjc4MmQ2LCAweDcyYjQ1NjZkLCAweGFkM2U2ZmE4LCAweGYzNWUyMWJhLCAweDAxMzA3NjU0LCAweDA1YWNmM2U3LAorCTB4YTEzOWIzZTcsIDB4MTQ2NWUyZmIsIDB4NjA4ZDVmZWUsIDB4MjBlNGJmN2UsIDB4ZTQwNTJkOTIsIDB4ODNiZDQ4YTgsCisJMHgzMjcwNGYzZSwgMHhjMmNhYjg3ZCwgMHg5MzhhNjhlNCwgMHgwMjQzY2ZjOSwgMHhkZTBmM2YxZCwgMHhkMWY5NDQyYiwKKwkweGJhYmExYmYzLCAweDdlODg3OWQ5LCAweGMwODliN2Q3LCAweGJhZTUwOWM3LCAweGMxMTIxZTNmLCAweDQ2NWM5ZThmLAorCTB4ZWM5Y2ZkNzAsIDB4M2EyYTAzOTQsIDB4MWNlNzFlOWYsIDB4MDhjYmZmNGEsIDB4ZmIyZTFmNWIsIDB4NWZjNjMxNjAsCisJMHg4MmRlMDUyOSwgMHhlYmQ4MGJkZiwgMHhmMDUyZjdlNCwgMHgzOWNiOTg3ZCwgMHhlZDIxNGM5ZiwgMHg1M2U3YWMyMiwKKwkweDQ0MmQxMWNlLCAweDljZmNiYmM3LCAweDlmM2Q3NzE0LCAweDUyN2RmYmM2LCAweDdkMTI1MjIwLCAweDJhYWNmMGFmLAorCTB4MTIxNWRmMDEsIDB4YWQzYjdhZTMsIDB4YzQzOGU0YmUsIDB4YTY2ZDhiN2IsIDB4MjM1ZWIwZTcsIDB4ZjQwOTFlM2MsCisJMHhiMWI3MzRkNywgMHhhZjkzYTQ3ZCwgMHhlMGM5ODM0ZiwgMHgzZDFhYmNlOCwgMHgxYzRkM2U2ZSwgMHgwYmRhMjhmNSwKKwkweDc4MDY4YWE1LCAweGJjZjRlMmQ5LCAweDdlNDRmYjBiLCAweDJmOWUyNmVhLCAweDhmYTRmMzNlLCAweDM4OGQzZmU1LAorCTB4NzJmMTgwOTcsIDB4ZTA0ZTlmY2EsIDB4ZWJlYjhiOGIsIDB4ZWYzYTc2ZmMsIDB4ZmViMTg3OGIsIDB4YWY0MTBmODEsCisJMHg1YTc4Zjg1YywgMHhmN2Y5ZTgyYSwgMHg0YmQxYmViOSwgMHhiZjgwZWY5ZCwgMHhiZjhjNDlkYywgMHhlNDQ2OTdkYywKKwkweGM0OTIxNGIzLCAweDBkZTQ0NmM2LCAweGQ5ZmEwZWY4LCAweDhhNmUwNzI5LCAweGE5MmY3ZTdiLCAweDBmZDlkNGE4LAorCTB4NGVkMDQxZTYsIDB4MzZkMzJmYmUsIDB4MWY0Y2U0MWIsIDB4ZTMyNzAxZTcsIDB4N2FiOTczNmIsIDB4MTBkZGIyZTUsCisJMHhjZTdmZjcwNywgMHgwM2E5OGJkNiwgMHg1YTFlNjFjZSwgMHg2MjQ4OGZkOCwgMHhkNmFkNTY3YywgMHhmMjAzMzc1ZCwKKwkweGM2MzI5YzYyLCAweGY5ZjlkM2JiLCAweGM5N2U2OGFiLCAweDlkMTdlMjhjLCAweGNjOWQzYWVmLCAweGE3ZjlkNjhmLAorCTB4OTg5YmM3NzgsIDB4MzlmYzVmZGYsIDB4MTI2Y2VlMjEsIDB4ZmU3NTA3YjYsIDB4ZjhjZmNjYjksIDB4NmNmZGIyZjAsCisJMHg3ZjhkZTg5ZCwgMHhhOWVlZGQzYywgMHhmODYzMWVhMCwgMHg5YmUzM2Y2NiwgMHhmODFmY2EyMiwgMHhmMDNkMTBmYiwKKwkweDk2NmY5OThmLCAweDVmMzdjYWY1LCAweDk2N2UwMjI3LCAweDc3OWYxNmI3LCAweDY3ZDlhNTlmLCAweDk3MzM5M2NjLAorCTB4ZjNmMTFjMTMsIDB4NjI0ZDlmMjgsIDB4YTk0M2IxZmMsIDB4ZTgyZTUxZmIsIDB4MWEyZGFiOGIsIDB4MTVjYTAzZTgsCisJMHgzZTUyZDc1OSwgMHhkZmEwOTFkZiwgMHgwMzkzNWE3YiwgMHhkMzEyMmRmNSwgMHhhYzVhNWIzZiwgMHgzOGI2N2ZhOCwKKwkweDY3OGM1ZWJkLCAweDY4ZjNiMDY1LCAweDQzYjZmMjQ0LCAweGMwMzZiNDFlLCAweGYzZGY0NmE2LCAweDhkOTNhNTdjLAorCTB4MTM0Mzk0MTMsIDB4ZjQxZDgyOGUsIDB4ZjFmZjQ2MTcsIDB4OGRjMWU3NTcsIDB4ODJiMzI0MzAsIDB4MzFjYzYxZDEsCisJMHgwZDk4YmQ2NSwgMHg4Zjg1M2JlOSwgMHgwMGJkN2YwMCwgMHg1NzdlODMzYSwgMHg3M2MxNTg3ZCwgMHgyYjBmNGJmZSwKKwkweGQ4NWYxN2E4LCAweGM0MDk3YWY1LCAweGNiN2NmNDhkLCAweDJmNWYzYjcxLCAweGVmMDUxYTI5LCAweDljN2IzZTMzLAorCTB4OGViZDYzZWIsIDB4MjdhMGU3YTksIDB4NGVhNmY3NGQsIDB4OTk3ZjRjMjAsIDB4MDMyZDNkZWYsIDB4YjQ4ZGM5ZmUsCisJMHg5ZDAzZWY5YiwgMHhkNjFlNDU0NSwgMHhiNWRiNmI5ZCwgMHhjYzE2YTA2OSwgMHgwYWNlODFmNywgMHhmZmY2ODU1ZCwKKwkweDY5OWU4M2NjLCAweDdkY2UzNTJlLCAweDZlMWY5Y2EwLCAweGMxZGI2ZDIwLCAweDRmZGYzNTI1LCAweDZkZTdkNzQ5LAorCTB4YWY5M2ZmMzAsIDB4MmY4ODE0ODQsIDB4OTE5YTk1MDYsIDB4OWFlZWJlZWMsIDB4YmEzZmQwMWMsIDB4YzUxZmUxZGMsCisJMHgxMWMzZjA1YiwgMHhiZjY4ZmI4NiwgMHg1ZmJlZjNlNCwgMHgwOGJkZDg5MywgMHhiZmVlMGFlZCwgMHhlZmIwOWFmYywKKwkweDdhZGQ3YzgyLCAweGRkZTJjOWQzLCAweGJiOWZjYjc5LCAweDdlNjFmNDA5LCAweGI5ZjcwN2E1LCAweDlmOTg5MzRhLAorCTB4YjIxMjFiZmMsIDB4MzRiZDAwZTUsIDB4NDFjOGUzMDksIDB4MmEzZTJkNTksIDB4NTIyM2RlNDQsIDB4MGYzODA4ZDksCisJMHg0MjVmYjNiNSwgMHhiOWFmOGMzZSwgMHhjMTM4ZWZiYywgMHhmN2JhOTBhZSwgMHgyNmUzNzdjMywgMHhkZTgzZTVlNiwKKwkweDk1NWU4ZTc2LCAweDBlOThlYjBhLCAweDc0YWI4NTM3LCAweDg3MDIzMzkzLCAweGJlNWVkNzBlLCAweDM5YWU2OGNlLAorCTB4ZTFmY2MwZWYsIDB4Y2Q0M2QwM2IsIDB4ZTBkODhlODcsIDB4ODIwZjlkN2IsIDB4ZmQxOGE3YWQsIDB4ZTgwMWY4YTMsCisJMHhlMTA3ZTExZiwgMHg3OGViYTgzNiwgMHg4N2U3MDdmOCwgMHhmYzZkZmYyZiwgMHhmMTU5ZmQ0MCwgMHhmZTAwZmMzYywKKwkweGUyZjdlMjYwLCAweGU2ODlmZjg3LCAweGZkYWY2YTA3LCAweGFmNjUxOWQzLCAweGE3OTYxNTA1LCAweDNlNzVkN2E1LAorCTB4YzQyOGU0NTgsIDB4NjA4NTM0ZjcsIDB4NjVkOTA1YmUsIDB4ZTJkZmJmNjcsIDB4ZjAzOGM2NGQsIDB4NDYzNjZlZjMsCisJMHgwNjQ3ODdkNywgMHg3NmUyMmY4MywgMHhlMzc5MzBhNSwgMHgwZThmNWRmNywgMHg4ZTU3NjgwOSwgMHg2NmUxMGFhNiwKKwkweGEyMDZlM2I0LCAweGJlMzhkNDNlLCAweDgwNDExMWM4LCAweDE3MzBhYzdiLCAweGNiZWMwYjM3LCAweGM1YzgyYTUwLAorCTB4MTBmNGViNjgsIDB4Yzc1NmZmZjAsIDB4MWY2MDU5NjUsIDB4ZTcyNjM5ZTYsIDB4MWY2ZDdmMDAsIDB4NTgxNWZjYjEsCisJMHhhODBmYjZiMiwgMHgxYWEzN2U3YywgMHhiZDc0OWZiMSwgMHhhYjc3OTdiNywgMHhjNWM0M2Y4ZiwgMHgwZjcyZTFmOCwKKwkweDdhMDE0ZjNiLCAweDVkMGUxYTNiLCAweDAwNTkwM2ZmLCAweGNiMzQyMTBlLCAweGY1MDM4ZGYyLCAweGU4M2I0Yjc1LAorCTB4ZTI4MzgwNzMsIDB4OWE0MGI3NzUsIDB4YjQyODNlYzAsIDB4YzE4YWQyNzgsIDB4OTIxN2ViY2UsIDB4ZDZhZWNlMDAsCisJMHhiYzQzMDcyZiwgMHg5ZmNiN2E2OCwgMHhkM2JjMDIwZiwgMHhjZDI2N2RmNSwgMHhiNjY0Y2ZiOCwgMHg0NzdiNzVhMywKKwkweDdiNzQyYmY3LCAweGQwODhhMjQ4LCAweGI3NjgyNmVkLCAweGI4NmVlN2YwLCAweGFmZDYxYjFmLCAweDcxY2YwZDkwLAorCTB4YmQ1YTc0M2UsIDB4NTdlNWMzYzgsIDB4Y2U5OGYzYTIsIDB4NjkwZDcxZTcsIDB4ZDdjOGI4NDMsIDB4OTkzMzdjZGYsCisJMHhjNzA2NjdkMiwgMHgyNGZkZjRjNywgMHhlZDBiOTA5NCwgMHhmMTRkNWM4NCwgMHhmYzQ0YjU3MCwgMHhhYjljNzQ0OSwKKwkweDFjN2M4MTM1LCAweDhjZDcyN2M1LCAweGVmZTFkNjM3LCAweDNmNDhmNGIyLCAweDVlNmZiZGJkLCAweGUyOTkyNjFmLAorCTB4ZGNiN2RmZjEsIDB4YWJlNzYzZWYsIDB4ZTc2M2VhZmYsIDB4MTUwZTI3NjcsIDB4YTgyYzEyZmQsIDB4YjlkOTMzZTMsCisJMHhjM2MzMzc1OSwgMHg3YWZlMjU3ZSwgMHhjOThiODhmNSwgMHg3YjRiNDRmMSwgMHhkYzFiOWMyZSwgMHg1YzJiZjNiZCwKKwkweGZjZWNmNzFmLCAweDEzYjAxZGVhLCAweDA4OTcxYzI3LCAweDNjNGUwMWU0LCAweGY3MDkyNjNlLCAweGUwNjdjNzNkLAorCTB4NmZkZTlkM2UsIDB4MGU0ZGE3ZjUsIDB4ZmYyMzllYzIsIDB4ZWY4MmY3ZTgsIDB4MTQ3OGYwYTMsIDB4ZTU4NmNmODAsCisJMHgzZDBmMWQ4YiwgMHgzZDlkZmQwYywgMHgzY2U4OTEyYywgMHgzYmM1MTJmMywgMHgyNTY5ZTIwYywgMHg3ZGY4N2VmYywKKwkweGY0OTdiMzAyLCAweDVlZmM3ZGY2LCAweDU5NzJmZmU2LCAweDliNmI3ZWY4LCAweDYyNWVmZGM0LCAweGQ1ZjNhMjhkLAorCTB4ZTUyNGYzNTQsIDB4ZjU3YWU4NDUsIDB4NTJlM2QyYjEsIDB4ZTA3ZDJjNmUsIDB4MGY5ZDYzZWYsIDB4ZGM2NzkzY2YsCisJMHg1NzlmYTk1YiwgMHgyM2Y4ZTNhZSwgMHhmM2MzZGY3YiwgMHhkZDM0NTcwMCwgMHg3ZTdkODEyMSwgMHgzYzQ4ODY0NSwKKwkweGE5NWVlMzUxLCAweDJhM2UwZjUyLCAweDhiOGY3MWVlLCAweDc2ZWFlNWU3LCAweDFmYTdkZWNhLCAweGY3MDY5MTllLAorCTB4N2E5ODg4NTksIDB4ZTViMmRkNTUsIDB4YjdhODVjOTUsIDB4NzFjZjcxODksIDB4NDU3YmYxOWIsIDB4ZjAxMjFkY2IsCisJMHgyNjJlMTdmZiwgMHgzZjhkYmQxZiwgMHgyN2NhNjJmMSwgMHgwOWRkMDI5NywgMHgwNDBhZjNiMywgMHg3ZDMzMjM5NCwKKwkweDdkZmNlY2Y3LCAweDllYThmYjZhLCAweGZkMTNkZGYxLCAweGIxNzg3NGNkLCAweDJmZjcwOGEzLCAweDk5ODdhMzdhLAorCTB4NzlkMTc3NmYsIDB4NDJmY2U5ZmEsIDB4NmE3ZTllNzQsIDB4YjlmMWVkOGYsIDB4MmY5MmZlYjEsIDB4YmYzYWViMDMsCisJMHg5MTNlYjc1NiwgMHhjZTljZjYwYSwgMHgxOTUyZDNhNywgMHhmMWQ4NGNkZiwgMHg0NjcxMmE3MCwgMHhkYmM2NjVlOCwKKwkweDY2ZmQzOTVmLCAweDBjZTY2ZDExLCAweDgyNmRjZmZhLCAweGUxN2Q0MmU2LCAweGNmOTA2ZDI3LCAweDljNjFjNjUyLAorCTB4ZGEwOTU2ZjUsIDB4Y2ZlNzg0MWYsIDB4NTliMWQ3OWIsIDB4ZDdiYzI4ZTIsIDB4ZDk3YmQ3YmEsIDB4YTBjYTE1ODcsCisJMHgxNWViY2Q2ZSwgMHg3YzBlMTdkYywgMHg0YWE3NWU2ZCwgMHg3MDQ5ZDQwZiwgMHhiNDg5NThhZCwgMHg2ZTMxZTk5YywKKwkweDk5NzBlYmE3LCAweDI5MzZmY2U5LCAweDA0ZjQ3OWMzLCAweGNjMGY5OWE3LCAweGI5ZjZlYWYwLCAweGM1Mzk0ZjdlLAorCTB4ZGExNGI0YzcsIDB4MjE2YWI1ZGYsIDB4MWQ2NjJmY2UsIDB4NjllOTc4ZTYsIDB4NWU2OWVkZmQsIDB4N2ZmYzRkNDcsCisJMHhkN2Q0ZDhlNiwgMHhjOTNkYmQwMCwgMHhlNjZlOTk5YiwgMHg5NDdmNWQ3NiwgMHg1ODc5MDBjMCwgMHhmOTFlYzFmYSwKKwkweGY0OGU5NWMyLCAweDEwYTczOTJkLCAweDBmMWJlYzBmLCAweGEyNGY5M2I0LCAweDdkMzIyMWQ2LCAweDlkZGJmMjA4LAorCTB4MjdhY2Y2NmUsIDB4Y2U3YTViN2UsIDB4MTFhOWJjNDIsIDB4MWY5YjkzYmUsIDB4ZWRkZjAwNzQsIDB4YjAxY2VhOTAsCisJMHg1OWM1MzNhZiwgMHhmMTQ0OWI1ZSwgMHhhMmQzZjUzNSwgMHg3NGJjZjFlYiwgMHhjODQwODViYiwgMHhhOWNiNWE2YywKKwkweGE4NDcxMGJkLCAweDlmMzA0ODNlLCAweDc3NjVhOGJhLCAweDRiZTlmMDMxLCAweDUxZmExYjUyLCAweDc5MDk2NzVkLAorCTB4NmNjZWNhMzAsIDB4ODA3NWE5NmUsIDB4YzY5Y2Q2MWQsIDB4NGJlZDAzY2UsIDB4Y2RiYzg2MjYsIDB4YmYxOTEyNDcsCisJMHgzZDNlMWYzNiwgMHhmZGE3MTNjMywgMHg4ZWJmNmYwMCwgMHg3MTcyZDI3OCwgMHhmYzYxNzY1ZCwgMHgwNThkNjRhMywKKwkweGQwNTUzZmU3LCAweGJiMDM0ZTVlLCAweDBmNzY0NmU1LCAweGI4ZWI1NzYzLCAweGJjMjhkMzk3LCAweGEzMjRiNzlkLAorCTB4N2NkNjk5OWUsIDB4NGE2ZTFkY2YsIDB4ZjMzZmUwODgsIDB4MWNmNzc5ZjEsIDB4ZGY0MGRiNDEsIDB4YWMzNTUxMmIsCisJMHhlMzY0NTQ5NywgMHg3ZmI4ZjhiZSwgMHgxZDM3NWVhNSwgMHhkMTk0YWZkYSwgMHgyZTI2OTliZiwgMHg3NTFlMjA5NiwKKwkweDAzYzg0MzMyLCAweGQwYTc3MTdmLCAweGE3N2UxMmJlLCAweGM2Y2U1ZmNkLCAweDJhN2Y2ZTIxLCAweDRjNmY5ZmY4LAorCTB4YmY4ZDFkNGYsIDB4ZjVlYWEyNmQsIDB4NmJmN2YwMGIsIDB4NWI0ZmM5ODgsIDB4NmVjY2VkYmUsIDB4M2U1ZjZkMmIsCisJMHhjNzdjYzA1MywgMHhlMjJjZWU2OSwgMHg5MjlmZTI4ZiwgMHhmOTllOTQzNSwgMHhmYTViMmY5NCwgMHg1ZjVmMDExNywKKwkweDY3M2M2YTU3LCAweDQxY2NiMzM1LCAweDYzZjFkMTAyLCAweGMyYzMyZGMxLCAweGI1ZTc4ZmIzLCAweDdlZmMwYjc2LAorCTB4NTdlNzJlNTksIDB4MzU5ZjdlNzEsIDB4NWRmMGQ1M2IsIDB4NjY3NjYxMzksIDB4ZGQ5MTM2ZjUsIDB4N2VjODUyNTcsCisJMHhhZjk3NTEyNywgMHhiYzM5NzExZiwgMHgzN2M3ZmI4YSwgMHg3MDBjYjM3YSwgMHgwZDI4ODc0YywgMHg2OTMzMzRmZCwKKwkweGQ3NWRkYTI4LCAweGU1Yzc2ZDljLCAweGUwZmM1Y2I5LCAweDc4ZTg5YmFkLCAweGYyNjExYTNmLCAweGFiYzVjNTZiLAorCTB4ZDgzMjJmOTAsIDB4Yzg0Y2NhN2UsIDB4NmY0MTEyMmUsIDB4NjZiYmRmMWEsIDB4NDcxZWIxYmMsIDB4MjdhYmNmOGUsCisJMHhiMzMwN2Q3NCwgMHg5YmZkYzQ1NSwgMHhjZjE0ODU5OSwgMHhkM2IxODkwMiwgMHgxOGJlYWRiZiwgMHg4NjVlZDE2NywKKwkweGU3YjVkMDc4LCAweDA0YmJmODNjLCAweDgzZTJmYTMxLCAweDJmYTRlZmQyLCAweDM4MzJhMDVlLCAweGQyZjVjYTllLAorCTB4MGZkZmVlNDQsIDB4NmY0MDgzMjIsIDB4MWYxYjEzNGMsIDB4YTJlYTNlMDYsIDB4MGUzNWE2ZWIsIDB4OGVlYmU5MWYsCisJMHg1MDk3ZWZlZSwgMHgyMWJlMDYzOSwgMHg4ZjE4NjkxZCwgMHgwMzJlNzY5ZCwgMHg3Zjc0NDlmMywgMHhhODQ3YWMzZiwKKwkweGIxYzVhMjVkLCAweGNjNGJlZTk3LCAweDEzMDdkYzMxLCAweDc2NTEyYmQ2LCAweGZkZjA1Yzg5LCAweGQ0Njk5MmVkLAorCTB4MDBmMjU1MWUsIDB4OWZjNDgxYmUsIDB4ZTMwY2ZhOGYsIDB4NzA5MDI1OTIsIDB4OGNjMWYxMDIsIDB4YTllNzE4NTMsCisJMHg4YWZmYTg5NiwgMHg0YzEzZjNlYiwgMHgwOTdmZDFjZiwgMHgzMGY5MTEyOSwgMHg5YzdhMmJkYiwgMHhkYmE0OWFkOSwKKwkweDA5M2U0NjUzLCAweDk3YWYxYmM3LCAweGYzYTNlZTMxLCAweDEzZTAwOTQ5LCAweDExN2FmZmU0LCAweGYxYmQzYWUzLAorCTB4NmY3ZTNlOGQsIDB4ZmFhMjEyZmMsIDB4MGYzODQ5MjgsIDB4ZmJmOTcwYmYsIDB4YmNmMmZjYjYsIDB4YzhjMzI3Y2UsCisJMHg4OWYwYmViMCwgMHhiZjNhMWZjZSwgMHhhNjA5ZDhjNCwgMHhlYjRmNTA3OCwgMHhlOTg5NGJjZCwgMHhkNjllZGY4OCwKKwkweGM4NDc5NzliLCAweGIzN2JkN2E4LCAweDMxMjY3NjZiLCAweDc0NGFlZTNkLCAweDVkNTc3ZjYzLCAweDc2MDlkMzM0LAorCTB4MTFlYjk1OGQsIDB4YzcwYWRkN2QsIDB4OWYxOWVhYjUsIDB4NTczZWRjYmMsIDB4NmFhM2ZkODIsIDB4MTFkOTFmZDAsCisJMHg2MGYxZTgzYSwgMHhhZTk3MmY5ZCwgMHg5Y2ZmMTgyMSwgMHg2NzU2ZjVjZSwgMHg1NjA3OGIyYiwgMHg3MDAzMTU0ZiwKKwkweGU1YjhhMjg0LCAweDlkNTk4N2MxLCAweGQzYTJjYmRkLCAweDI3Y2U2YWY3LCAweDA5NmVkMjg1LCAweDFhZjM3NzdlLAorCTB4YmUyMGQwNGQsIDB4YzRmMWUxZTQsIDB4ODA5NGU3MTksIDB4YWZhYjFkOWEsIDB4Yzc1ZmJhNzQsIDB4MGJiZjA3YmYsCisJMHgyM2M2YmZkZSwgMHgxYzRiYTgwNCwgMHgzYmFlY2ZhMywgMHgxODhhZWNjNywgMHhjZmJjMmE3YiwgMHg4OTFlNjJhYiwKKwkweGViNGU1Zjk5LCAweDg2NDIxZjc0LCAweDBhZWQzYmZjLCAweDc2ZmNlOTIxLCAweDZmN2RmZTg1LCAweDFlMDY0ZTc0LAorCTB4NjVlZTdhMDYsIDB4MWQ4MGFlZjcsIDB4ZTJiZTc0MGYsIDB4M2FmZDg0OWMsIDB4Y2NmMThjOTMsIDB4YmY3OTFkYjMsCisJMHhiZjkzZGY0MSwgMHhjZGFmYmU2ZiwgMHhjNmRlOWYzYywgMHgxN2Y3NDZmZiwgMHg4ZmEwZmZiOCwgMHhjZWM0OTU3YiwKKwkweDI3ZDc5YmM3LCAweGQ3NWU5YzdkLCAweDk5YmRmZTIzLCAweGUyOTNjMzdlLCAweDNlYmE3ZGRiLCAweGQ3M2ZjMThlLAorCTB4YWZkMTNkZDcsIDB4ZWJhZDdkMzcsIDB4YmViNzdmYzUsIDB4ZDdkN2ZiZDYsIDB4YjM1YzdkMTMsIDB4OGZjOWVmMWUsCisJMHhlYWYyZjVkNCwgMHhkZjhjMTZmNSwgMHhmYWZlZTE0YywgMHg5ZTJmMWUxNCwgMHg2Y2UyYzQ5OSwgMHhlZWRlYjhiMywKKwkweDAxNjZkY2ZhLCAweGIzMjgyZWJiLCAweDZlZmYzMGZkLCAweDM2YTFjNjI3LCAweGQwZjY2MmVmLCAweDcyNGUzYzliLAorCTB4OWM2MjIwYjcsIDB4MTZiMWVlZTQsIDB4MTdkNGRiZDQsIDB4NGI3OTg3Y2EsIDB4ODA4Yzg0NDUsIDB4MmMwMWRjZmQsCisJMHg4NTI4ZGY0ZSwgMHg2YmVmNTBjYSwgMHg2ZjczODExMiwgMHhlZmRmZWFhZiwgMHhmZDA0ZGZmMSwgMHg3MGYxZmRkZiwKKwkweGEzYzYyZDRiLCAweGM3ZTA2ZDQzLCAweDcwOTNjYjhmLCAweGFhZDkyYzVmLCAweGIzYmFmYzYyLCAweDAzZjc4YWQ1LAorCTB4ZDlmOGVkNzUsIDB4ZjlmYTE5NmUsIDB4NWFlMDY4OWMsIDB4MGQ2YWQ0YmUsIDB4MWU4MTRiZWYsIDB4MTAxZTI2OTksCisJMHhhYmEzM2YyMSwgMHg1OWZkZTA5YiwgMHg4YTg3Njc5MywgMHg0MjliM2ZjMSwgMHgwZTIxNmFkYSwgMHhmOTYxNTEzMCwKKwkweDNkM2M2NmU4LCAweGNjMzFmN2NhLCAweDdkZTExNGZiLCAweDlmNjY1Njg5LCAweDc2NDRiYjE1LCAweGZiNGY1ODBmLAorCTB4ZTYwYWNkMTIsIDB4MmZiNmY3NTcsIDB4YTA5Njc4NTEsIDB4MmZiMzE2OWQsIDB4ZDJmNGNjZDEsIDB4OTg5N2RkYjcsCisJMHhkZjg3YjgwOCwgMHg5ZmY5ZDM2NywgMHhjM2QyMjdlYiwgMHg4NTY2YzRmZSwgMHhiZjc1NjdlZCwgMHhiZmIwMTMyZSwKKwkweGI4YjRiMWM5LCAweGY2ZGVhMzcxLCAweDRhZWM3NjI5LCAweDFkM2RjMGYwLCAweDRkZWZmOTliLCAweGMwMzVkOGVjLAorCTB4ZmNmNmU2YTMsIDB4Nzc3YjZlN2UsIDB4Y2RhNGE4MTEsIDB4OTg0YWQ3OGQsIDB4YjllM2M2ZjcsIDB4MTlhMGI4ZTEsCisJMHg2NmZmMWNhZiwgMHhjODE1NmU3YywgMHgwN2M0MDcyYSwgMHhlMGE5YjQ1YiwgMHhiZmI4ZjUxNywgMHg3MWMxZWRkMywKKwkweDVkNDc4YWZhLCAweDQ5MWYzNjRlLCAweDZmOWYwMGYwLCAweDAzYzAzMjNlLCAweGZjMDAzZmUzLCAweGFiNTk3MTBhLAorCTB4OTNmMDE1ZmIsIDB4OWQzZTFjNzcsIDB4OGFiY2ZiODAsIDB4YTRiZjA1NDcsIDB4YjFhNmQ5M2IsIDB4ZWY4Yzg5NzMsCisJMHgwM2MzOTk4MywgMHg5YWJkMGZiMCwgMHg4NGU2ZjlmMywgMHg0YzhlYmZlZSwgMHg2MWFmZGU4YiwgMHgzOWZhMzNmYiwKKwkweDYwODU1YWZmLCAweGMyZGY4ODNlLCAweDc4Y2M0MWYyLCAweGViNjZlNDFiLCAweGViYzRlNmI1LCAweGE2OWM4OWMzLAorCTB4MzVmMmYxOGEsIDB4N2Y5NjYyYjUsIDB4ODA3ZTdlNjAsIDB4ZjAzOTc3ZjMsIDB4NzE0N2VkMDEsIDB4ODk1NmI4MzMsCisJMHhhZWZmODQ2NSwgMHhjZWY1ODEyOCwgMHhiZmU1YWY1YywgMHhjNjdiNDM4NywgMHgxY2Q1NjVkZiwgMHhlZDJhMzM5NiwKKwkweDY3ZDI3OGUzLCAweDQwZWZjMDU3LCAweDNiOTZmOTZiLCAweDJmNzBkYzczLCAweGYyY2E1MDgzLCAweGIyZjkyYzNjLAorCTB4YzQ5M2M4NDYsIDB4ZDY5NTNhNTIsIDB4MGVjYjkyMmIsIDB4Yjg4M2Y1MjYsIDB4ZTQwZDczYjEsIDB4NDc5ZTQzMzMsCisJMHgyZjQ0NWE1ZSwgMHgwYWQ3NDdkYywgMHgyZTI0NWU1YiwgMHhiZjEyYjBlYiwgMHgzZDcwZWMxZCwgMHg3OWU3OWZjZiwKKwkweGZiZWJiNTJjLCAweDNlZWNlZGQxLCAweDg2ZmU4YWVhLCAweDg1MGU0ZTczLCAweGJmYmY0NzdlLCAweDlhM2RlYWRlLAorCTB4YTE0Y2Y5ODQsIDB4N2RkMjk1NDQsIDB4Nzg2OThlZjksIDB4NzZlMjkwN2YsIDB4M2U0NzdjZTMsIDB4ZjgwMzI5M2YsCisJMHhkOWY1YzI4MSwgMHhmZjVjMzFmZiwgMHhjODJlMGYxYiwgMHgzYTcxODE2ZiwgMHgwNjJjOGViNiwgMHgwODcyMzFmZCwKKwkweGQwOGI1OTljLCAweDdjNDFhYTg3LCAweGJjMTIwZjZlLCAweDAxZmZmMTJmLCAweDUxMjgwOWMyLCAweDAwMDA4MDAwLAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NWJiNWZmMDAsIDB4ZDU1NDc0MGQsIDB4NzliZmZmOWQsIDB4YmU0Y2RlZjMsCisJMHgyMTI2NGNkZiwgMHgwMTJmMDg0MiwgMHgxYzQyNDI0MiwgMHg2MWYwODA2MiwgMHhjNDQ0M2UxZCwgMHg2MDJhMDMyMCwKKwkweDQzZTE5NmViLCAweDlhMWFmOTA5LCAweDdhYjc2ZWJhLCAweDI5MDQ5MzBlLCAweGI2OTNkYjAyLCAweGI2NTRlNTZlLAorCTB4MjhiYjU2MGUsIDB4ODI2MDlkODksIDB4MDRlYzI2ODEsIDB4NmViNTAzMTQsIDB4NWI2MDQwNDAsIDB4NmE0NDU0NzcsCisJMHhiYjhkMzI0MywgMHhiMjllZWM1NCwgMHhmN2JkZmZmZiwgMHg2MGMzMzMyNSwgMHgzOTJkZDllOSwgMHhkZGY3MzczOSwKKwkweDdmZmRlZWZiLCAweGY3NWZmZWZjLCAweDU5NWMwMDNlLCAweGM5YTAwMzkyLCAweGU3YjczYWE2LCAweDAwMWFhODAyLAorCTB4NmRiY2RjNjQsIDB4YTA1NTYwNTIsIDB4MzI0ZTQwMTgsIDB4NjMyNDBhNmQsIDB4ZDRkYTY2OWIsIDB4NjY4YTZkODYsCisJMHg5YWE5ZTM2MiwgMHg3MDgwNWFjZSwgMHg2YzE0YjJjZSwgMHhmMmNlNzBiNCwgMHhjNmVmYmMyOSwgMHhjMzRiOTY1NiwKKwkweGZkZWMzMmMxLCAweDQ1ZjM4YTVkLCAweGUxZDkwYTljLCAweGZlYzQ5ZTBmLCAweDM5MTQ4ZmZiLCAweDQyZmY2M2I3LAorCTB4YTQwOTZhNjIsIDB4ZTdmMmFjMDEsIDB4M2ZiMDg1MzUsIDB4MWIxZmUyZDUsIDB4NjljZWJhNDQsIDB4MWE2ZDJjOWUsCisJMHhmZTJkZDdjMCwgMHg3YmUzMjA4OSwgMHg2ODUyOWJjOSwgMHhmMDA1Yzk3ZCwgMHhiYWI2M2IxZCwgMHgyMjk0OGYwNiwKKwkweGQ1ZDAyZTdkLCAweDYwYTMwMGYxLCAweDA4YTk3NmI3LCAweGViODJhOTAwLCAweDA1ZjZmMWU5LCAweDU4MDc0YzJiLAorCTB4OGVmZjEzMzksIDB4ZjE5MjE3ZDgsIDB4NTNkMjI2NzksIDB4NzQxYjlmY2UsIDB4YjQwNWZlZTAsIDB4MzBjZjQxYmYsCisJMHg1ZGFkOTAxZCwgMHhlZmY2MDI0YSwgMHg5NmVmZjYzYSwgMHg4ZmI4MTg1MSwgMHhkZjkzMTNmNywgMHhiZjhiNjEyMiwKKwkweGEyZmQ3ZmQ0LCAweGJmYzNlZmM5LCAweGRiOWY2ODA3LCAweDc5MmJiNjY5LCAweGM0MzY3NGNkLCAweGViZjk5OWY2LAorCTB4ZWIxMTk5NDYsIDB4M2U3YzFmYzMsIDB4NjUwOTJmOGQsIDB4OTAxNWQ1OWQsIDB4ZjMzZWZkOGEsIDB4ZDhhYjIxNDcsCisJMHhmNDY3N2YwNywgMHhlMzI3ZTY3YSwgMHg0NWNlMzM3YiwgMHg4MTc1YzczZiwgMHhkNjJkOWZlOCwgMHgwY2JmMDcyZCwKKwkweGExOTk4ZjI4LCAweDYxYjM3OWU4LCAweDVjNjQxZmU3LCAweGU4ZTVmNjc3LCAweDE0YjQwYmU3LCAweDM0NjdlMzA3LAorCTB4ZjhjZWJlOGMsIDB4YmQ3MGFhNDMsIDB4NmY1ZjJiN2EsIDB4MzRiYzlkZTgsIDB4Y2Q5YmZkNDAsIDB4YmI5NDUzMjgsCisJMHg4ZTUwY2JhYSwgMHg3N2ZhNzVlZCwgMHg2NmZiNDAxNywgMHg3MDBmOTc5YywgMHhiNTk1YjM2MCwgMHhlYjZiNGU1MywKKwkweGNkY2VmZTg4LCAweGUwMTUyMDA4LCAweGQ2MmNlNmQwLCAweDk4YzY5YWFhLCAweDU2MWE3MjljLCAweDNlYzQ0OTQzLAorCTB4OTBjN2RmMWEsIDB4MmUzOWQwZTMsIDB4ODJhMWE5YzcsIDB4NWY2MGU2ZTcsIDB4YWZjMDU1ZTksIDB4NGIzOWYwOGYsCisJMHhiODA4NjljOCwgMHg5NTM0ODc5YywgMHhmMWZhNzljOSwgMHhjNDExZGQ5ZiwgMHgxMzJjOTY0NywgMHgyNWZjMTFlOCwKKwkweDE3YTA4OWU4LCAweDBhOTNmNDhjLCAweGQ5N2Q1MWVjLCAweGQ1Y2Y4ZmQwLCAweGRmZWI4NTk3LCAweDcxNGZkNjIxLAorCTB4MDc1YThlOGUsIDB4YTExM2Y4ZmMsIDB4ODVmNjQzYmYsIDB4NzFmMjEyYmQsIDB4MDU2NTcyNDcsIDB4OWU1NjkzZjEsCisJMHhkOTZlYjUxNywgMHg0MjdhYjEzYiwgMHhkM2NiZTFjMSwgMHgyMDlmYzg5MCwgMHhjNjlmYTY5ZSwgMHgzM2Y5ODhmMSwKKwkweDAwOTIzZTFjLCAweGZhMjZmZjk0LCAweDRjYjM0MDM5LCAweDYyZWIzNDc2LCAweDZmMjdmM2Y0LCAweGM5OWJiN2E2LAorCTB4OWI5ZTRhMTMsIDB4ZTVlYmY4ZTMsIDB4Y2I0NTczNjksIDB4YjQ1MTdkMzMsIDB4ZDFkYzMzM2MsIDB4MmFiNTFjZjIsCisJMHg3OWI3NmU1YSwgMHhhNjMyZTVhMiwgMHhmOGQ0NzI3MiwgMHg1MWE1NGRkOCwgMHg5OWRmNzFmZCwgMHhkNzNmMzUxNSwKKwkweDNmYWEyZjM3LCAweGE4ZTJkYjdlLCAweDk3OWIxM2Y5LCAweGVkMjdmNTQ3LCAweGZjZDQ3YWZhLCAweGE4ZGFmZjQyLAorCTB4NTViZGEyZjEsIDB4MjlmZmE0YjcsIDB4NzlhOGZhODEsIDB4NTdkMzVlMjQsIDB4Y2VmNmZmZTgsIDB4ZjNlZDQ2ZWYsCisJMHgyZmZmZDZiNywgMHg5YzdmZjQ2MywgMHhkMjM0ZDk3YywgMHhmNDQ3ZmExNywgMHhmMjRhODM4YiwgMHhkOTlmMDkzNiwKKwkweDkzZjI1NjkwLCAweGFmYjdhZWI2LCAweGJlOTc2ODQ5LCAweGU4OGZiYTc5LCAweDY3MDYyZGYwLCAweDJiM2Q4ZTEzLAorCTB4NmJmMjI1YmIsIDB4MjZkNDUwNjMsIDB4NGM1YjFiZjQsIDB4ZmVmZTQ5NTAsIDB4NmFkMzI2ZmIsIDB4OWQ4OGYyNzcsCisJMHhiNjI0ZDcxZiwgMHg5ODJhZjNmZSwgMHhmM2QxZWMxMywgMHhjYzhmMTc5NiwgMHgxNGQzZGEzMywgMHhmODhkYTYxZiwKKwkweGY0NWJhZmQ5LCAweDNkZjIxMGE2LCAweDE0N2VlNjU1LCAweGYyNjllYmZkLCAweGE3YTQxN2FmLCAweDhhOTk3MjE0LAorCTB4OGE3OGE3YzMsIDB4ZWQ1OWJjNTksIDB4MGUwNmQ2YzYsIDB4YjRkYjFlYTksIDB4NWZhZWJmMTEsIDB4NTA1Y2U1NDcsCisJMHg5OGZmMmZmZCwgMHgzYjIxM2ZlOCwgMHhkZmZhNDY1ZiwgMHg4NmRjODEyNSwgMHg4OWJiNTZiZiwgMHhjMzYxZjNlYywKKwkweDlhN2FlOTZmLCAweDIxYWU4MjJkLCAweDA0OGZhNWU0LCAweGQwZDNkNjZjLCAweGZhZDBjM2U3LCAweDlkYWZjY2YxLAorCTB4NDgwNWE2ZmYsIDB4Y2U1NWU3ZmYsIDB4YjJmZjMxOGYsIDB4MDk5ZjZiZjAsIDB4ZmU0ZmQ2YmYsIDB4YmM2NDdmMmMsCisJMHg1MjhmY2Y3MiwgMHg3Y2U3NWM3NCwgMHg0NDBhMmMwMSwgMHhlNDJjMjljOCwgMHg1OGQwNjYwNCwgMHg3NWNkOTliYywKKwkweDg3NmFhMTc2LCAweGJmYWUxOGYyLCAweDQ0ZDg3ZGYyLCAweDEzZmNhY2ZiLCAweGVmN2M4YTZjLCAweGRlYzI5YWNmLAorCTB4YjMyNmIzZmIsIDB4NTkzNjA1NzYsIDB4MTgxNWU3MjgsIDB4YWNhNTZjY2IsIDB4NWRiMDk0MWYsIDB4ZTQwYTBiZGEsCisJMHhlNGYzMmMwMSwgMHhmNzk0MjQyYSwgMHgwM2E2NzljMCwgMHhhMjkyYjRiNywgMHhjMTA3YmRmMSwgMHgzZmZmOTBhZCwKKwkweDE0ZGFjZGZiLCAweGNlYmMzNzlhLCAweDRmZGQ0ZmRiLCAweDhhODE1ZDM4LCAweDdkZmY2MWI2LCAweDQ0Yzk0ZjliLAorCTB4NTNiZTEwN2YsIDB4ZjcxMWYxNjIsIDB4Zjc3M2QyYjEsIDB4YTY5ZTYzMjMsIDB4M2MxNjczMzgsIDB4YmVhMGNlNTcsCisJMHhhZDkzODM5NiwgMHg2MDBiYWM2NywgMHgxNzMzZjI4ZiwgMHhlM2E2MDg1NCwgMHgxNjBiYmUzYSwgMHg0NzQ4Y2JmZiwKKwkweDQ1NjFiMjNkLCAweDhmNzdkNGZkLCAweGIwNjQ3ZTYyLCAweDNmYWQ4ZmVhLCAweGM3YWI3OWM2LCAweDljNTJjNjg0LAorCTB4YTdmNTUwYmUsIDB4YzNmM2QyN2MsIDB4MjBhZmQwYmIsIDB4M2QxMjRiNmYsIDB4MTE4Y2I2MTksIDB4ZmY1ZjljMzksCisJMHg2MzhkMGE3OSwgMHg4NjdhNjViYywgMHhjYmU3MTY3ZCwgMHhkOGZiN2U0YywgMHg3MWJjYzY3YiwgMHg2ZGEzYjliNiwKKwkweDVjNzJlNzI0LCAweGY4OGRlNjY0LCAweGIwMGE1YTMzLCAweGE5NTQ5Zjk0LCAweDE3N2U5ZmZlLCAweDBhMTM4NGU5LAorCTB4Y2JjMGNmNWIsIDB4ZmE5NzgxNDYsIDB4MjQ1NDdkNWMsIDB4ODY1M2VhNWUsIDB4ZjA4YTMyZjEsIDB4Y2NiMmZmNTIsCisJMHgzYmJlYTZlYywgMHg5NzI4MGZjMSwgMHhkZTc3MDIzMywgMHhmYjVlZDc3ZCwgMHg5ZTFkNGVhZSwgMHhiODhjN2NlZiwKKwkweDlmMjcxMWQxLCAweDhjNzQ2ZTIwLCAweDZlMjI5ZjdiLCAweGQ5MGRmZmE4LCAweGZkZTg5NTNkLCAweGE5YzdlNzc4LAorCTB4YzFmNzVhMWUsIDB4NTA3YmEzNWIsIDB4MDZmZDlmMGEsIDB4YzczOGY3YzksIDB4OWQwYzEwZmIsIDB4YmRiYTdlNjUsCisJMHgxZDIxZjc1MCwgMHgzYjVjMGZmMywgMHg1ZDVjZjk0YiwgMHg2MGI3NDViYiwgMHg3NDJkOGFmZiwgMHg3ZjlhNzllYywKKwkweDVmOWEwMjUwLCAweDRlNjA0YzE3LCAweGYyNWRhZWFiLCAweDU1NzhlMDI3LCAweDMxZDZkYjY3LCAweDU5NmFhZmQ4LAorCTB4YzM2MTQ2NTYsIDB4YmJjMTBhOWIsIDB4ZTRiZjdjNjgsIDB4NGJmMWM0NmYsIDB4MTcyNTgzOWIsIDB4ODdiYWUwMjcsCisJMHg3NWEyNWRhZSwgMHg3NWYxMGUwNywgMHhlNjBlNmYyZiwgMHhiMDMwMGU1MywgMHhiNDA3Y2Q3ZiwgMHgwNWJiNGQ1ZSwKKwkweGIxYmYyODEyLCAweGI0MzFkNTA1LCAweGEwMTQ5YjVmLCAweDNmMDMyYWZkLCAweGNhZmQ2OTUwLCAweGEwNGQ5Njk3LAorCTB4NmY3YWE2ZjQsIDB4MTEwOWM0Y2YsIDB4YzBlMDZiN2UsIDB4Mzk0NzU1NDksIDB4NjBmZmI2NTUsIDB4YzY1Nzk4YTEsCisJMHhlMTlmOTdjMywgMHhhMzdmZTBkNywgMHgxY2RmMjdiZiwgMHg2ZmYxM2ZlOSwgMHhmMDkzZDkxZiwgMHhmMjE2YmZiZiwKKwkweGJlMzVkNTVmLCAweDdlODljNDg5LCAweDg5NzllM2E1LCAweDg0ZDU5NWY5LCAweDViODcwYmE3LCAweGRhNGJmYjdmLAorCTB4NGViZmUwZWYsIDB4ZDk0MGRjMjQsIDB4ZGMxYmM5YWQsIDB4ZWIxNzE2M2UsIDB4Zjk3MDNlYzQsIDB4NDI5ZGQ1M2QsCisJMHg0NTJlNTNmMiwgMHhmZjNlNzNmYiwgMHg0MzVkY2Q5MCwgMHgyYTk4NjFmYiwgMHhjNDg0NDRkOCwgMHhkMGRiODdlNCwKKwkweDkzZTQ4MDFlLCAweDQzZWNjODliLCAweDZiYWIwZTRlLCAweGQxZWY5ZTkwLCAweGFjYzdhNDA0LCAweGQ4YjVkNTg1LAorCTB4ZjMxNzY2ZGYsIDB4OTdmZWFjZjIsIDB4YWZhNDZmNzMsIDB4ZjI2NjY2YzMsIDB4Mjc4MWU2YjEsIDB4ZWQxODZmZDIsCisJMHgzYTQ3MWE3ZSwgMHhhNjdkZTY4ZSwgMHg0ZWJjNzA4NiwgMHg2ZTEyYWNiZiwgMHg1M2JmODJlYiwgMHhkYmRmYTQ3NSwKKwkweDU3NDJlMWY5LCAweDM2MDJmNzljLCAweDkzMTRhZmVlLCAweGQ5NGY3MmJiLCAweDRiZDQ3ZDg4LCAweGYwODkyMThkLAorCTB4Y2U5MjcwN2UsIDB4MmY5YjU4ZjIsIDB4NDhlYmU4YzQsIDB4Zjk4Zjg5ZDAsIDB4M2QzNzdlMDcsIDB4ZWZkZWIxMTQsCisJMHgyNjEzMWYxMSwgMHg3ZWViZjQ4YywgMHg0Mjg5NjFmMSwgMHhjM2ZkN2I3MiwgMHhjOGNhNzMxMiwgMHhlNGNjODFmMywKKwkweDNhNWM3ZjRhLCAweDNhNzhiYzc4LCAweGY2OTk3ZGQ1LCAweGQxNjAzZGFkLCAweDEzYmUxOTFiLCAweDc3YzI0MTljLAorCTB4M2QxMzkyNTcsIDB4NmQ1YmUxMzUsIDB4ZjdjNDhiMmMsIDB4YmFlZThjYzMsIDB4NDg4OWQ5MmUsIDB4NjVjZWJhODcsCisJMHgzZjM2MDY5ZSwgMHg5MDZhNDljNSwgMHgwOGZhZTczYiwgMHg2NmU2YjI2NywgMHhjMWZmODQ3OCwgMHhhNTQ3MTBmZCwKKwkweGEzZmEzN2Y0LCAweGNmY2YzNjk1LCAweGU0ZTY3ZjQ5LCAweGJjNDhjNGUwLCAweDM5NDI5OWQ1LCAweGNmZTkxMjhkLAorCTB4YzIzNzNjZDMsIDB4OWY2NGU0ZmUsIDB4NzkyMGU4ZGUsIDB4N2Q2NTNiYTYsIDB4ODk4YTdmNDQsIDB4MGY0MDY1ZWIsCisJMHg4ZTI5ZGFhNSwgMHg1MGY1YzY2ZCwgMHhkZmMxMDMxZSwgMHhiN2ZjOTJhNSwgMHg5MmIzYWU3NiwgMHhhNmM3N2ZkZCwKKwkweDU1NTkzZDMxLCAweGZmNjFhZTlmLCAweGJlNDdkNGRiLCAweDRhZWVhOWI3LCAweDk5NmRhYmIyLCAweDBkNzY0MDg5LAorCTB4ZWY4Njc2ZDksIDB4MDFkNzg0YmYsIDB4YmQ1NDU3YjIsIDB4YjhhMDFlMDIsIDB4MzZmMDIwM2EsIDB4ZmY5ODE2MzAsCisJMHg3MDhmZGNhNSwgMHgzN2JlNTMyNiwgMHhhM2M4Y2M5ZSwgMHg2NzZmM2NkMSwgMHgwOGM1Yzk0ZiwgMHhhZTBlMDc3ZSwKKwkweDRhN2QxMjc0LCAweDMyMWY3ZjIyLCAweGY3NjM1ZTM5LCAweGMzODE0ZmZkLCAweDliNmI0ZGE3LCAweGUxYzQ0NmU3LAorCTB4MTViZjc5ZDgsIDB4MDBlNDM0NzgsIDB4YWIxNjVmNjYsIDB4OGNmMTMxMDcsIDB4ZGIzYWRmODcsIDB4MWZlNDMzYmMsCisJMHgwYmJiYjY5ZiwgMHg4OTliMGZjOCwgMHhhZWEzYzIzMCwgMHhlNzAzYTVjNiwgMHhjZGU5MDdmZiwgMHhjODVjN2Y5OCwKKwkweDFhM2M1NTU1LCAweDIxNGRmNWM5LCAweDMzNzU0NTU3LCAweGViNjFhMzM5LCAweGZjYzNjNzY0LCAweGVkNzFhOWU1LAorCTB4ZGZjMTBiZWMsIDB4YmQ2OGRjYjYsIDB4MmFiYmNlYzcsIDB4YmU0YzUzZjgsIDB4ZTc0NGI1YWMsIDB4Y2RkOTk5NjEsCisJMHhmYTY2MWVhMCwgMHgwNjBkZTYzNywgMHg3N2ZkNzFhZiwgMHg4YmJmN2U3ZCwgMHgwNTc3M2NlYywgMHhhZjY3ZTdjMywKKwkweDExY2E5NjE0LCAweGNkYjM4ZWViLCAweGZmZTIyZmZiLCAweDhhMGYwMzEzLCAweDBlZTg4YjJmLCAweGRlYjFmMGM1LAorCTB4Zjg5MmZlZTYsIDB4YzgzYmYyMzYsIDB4NGUxMmRjNzYsIDB4NGUwN2Q0NDAsIDB4M2ViMGVmMTEsIDB4YWJlMzMwMjgsCisJMHgyNGU4OTA4MywgMHhmMjI2ZGVmZiwgMHgxOWI4MzM2MCwgMHhhOWMwOTI0ZSwgMHgwNWQ3N2FiMywgMHhmYzhkOWFiZiwKKwkweDYwOThmNTM1LCAweDliNTM3NjNiLCAweDgxMzljYTI0LCAweDljY2Q2MDhkLCAweDIyOGM5YjJhLCAweDUyYzU2NWMyLAorCTB4MGM4Yzg4YWYsIDB4ZjZlZDUzYzcsIDB4YmQyMGI3N2IsIDB4ZjMyN2MxMDcsIDB4ZmViYTM5YmEsIDB4OTJlNDk3MDUsCisJMHgzN2RlZWIyMiwgMHhiZGQ3ZTJhYiwgMHg2NDRkM2RiYiwgMHhlZWE5N2ZkNywgMHhhZDM0MTk5ZCwgMHhmYWZlZDM1MSwKKwkweDFkODI3N2ZhLCAweDE4MjJlOGYzLCAweGRiMjdhM2NlLCAweGEwNTQ0Njc1LCAweDEwMmZlMzgwLCAweDdiMzNmNDRjLAorCTB4ZjA5ZjU0YzQsIDB4MWE3ZTRmZGIsIDB4OTIyYmY5ZTUsIDB4YTU1M2NlMjksIDB4MGRhYjAyODEsIDB4NzhlZWM0YTAsCisJMHhkYTM2NWI2NiwgMHgzZmNlMDRkNywgMHhlZmU4OWJmNSwgMHgwYzY3OWU1ZSwgMHg0ZTZmZDNkNywgMHhmYTI3Nzk2NiwKKwkweDkzZDU5OTIxLCAweDQ2MjVhMDlhLCAweDFmOTg2NTZmLCAweGQ4OGQzYTQxLCAweGUwZjFlYWEzLCAweGM5NTMyZmIxLAorCTB4ZjVkYWI2ZWYsIDB4ODRiZDI3N2YsIDB4Zjk0MGNiOGYsIDB4YTQzOTgyNWIsIDB4ZDVkOGUyZGEsIDB4MzE2M2NhMDEsCisJMHhjZWRjNzkwZiwgMHg5ZGFjNmJjZiwgMHhmYjhmY2I5MiwgMHg1MDE3NzU1YiwgMHhiNGQwNGY3YywgMHg3ZDg0NzJhOSwKKwkweDM2MjVkODE1LCAweDg1ZDhmNmFmLCAweGM3ZjMxNTFjLCAweDUyNzdhNjJiLCAweDlhZmQ3MThiLCAweDc0YTlmZDhlLAorCTB4ZmU3ZDUzYWMsIDB4ZWQ0YTc0ZDQsIDB4MGE5ZWNkOGIsIDB4NGNmYmNlM2IsIDB4YTU2ZjkzZGEsIDB4YmY5YjcwYmMsCisJMHgwODEzZTQ4NCwgMHhiYzUxYTVlNiwgMHg5ZjA2NjI5ZCwgMHg3YTQ2ZjRiOSwgMHg1OTRhYmJiYywgMHhjYmI3NTU5MSwKKwkweDVkMjlkYWNlLCAweGJjYTA2Yzc3LCAweGZjZTQxYmQ0LCAweDBlMGExZWQyLCAweGViMDI3NjE1LCAweGQ5MzY3NDBmLAorCTB4YmZlZjNkNjksIDB4ZmYyNjhmNzUsIDB4NTYwMzJmYjQsIDB4ZjU3OGZmOTEsIDB4N2RmY2M5OGIsIDB4ZmU2OTk4MzMsCisJMHhlMDRkYmIxYSwgMHhmM2EyNmZkYywgMHhkY2UyN2RhNywgMHgxMzBiZTA2YSwgMHgzZmVjNjc5YiwgMHhhY2FlNzNhNSwKKwkweDgzOGEwZTIxLCAweDBmYzg0N2NkLCAweDU4NTk3NDI0LCAweDEyZjA5NTFlLCAweDYxNzQ3OTcwLCAweDM4ZTc0NzdlLAorCTB4OGEwMWVmODcsIDB4NzAzNjgzNDMsIDB4OWFkZTM4NGEsIDB4NGY3OTY2MTgsIDB4YmZhMmRiYjgsIDB4OWFkYzkxMjgsCisJMHg1NWJjZWM4MSwgMHgyMTRhZjVlNSwgMHhmMjdmNzIwMiwgMHhiZjYzNzNjOCwgMHhlOGU3YWU4NCwgMHhlMTcwODk4YywKKwkweDYwOTdiOGEyLCAweDkzM2I4NjZlLCAweGMyOWRlNTIzLCAweDczYjQ2ZWU4LCAweDA2MjZiNTNjLCAweDk3OTRjOTRkLAorCTB4OTE3ODA0NGYsIDB4Mjc0MjM1ZDEsIDB4M2EwZDdkYjAsIDB4NmY3Zjk5MGIsIDB4OWU5N2MzNTUsIDB4MzRiYTMwNzQsCisJMHg3MDIxNDFjMiwgMHg5MjZiYTEzYSwgMHg0MTJkZmU0ZSwgMHgxMjNlMzE3MywgMHg5M2U5ZGQzNCwgMHg1YmNiYTQ2ZSwKKwkweGRhMTc4OTgyLCAweDYxMWJmN2NkLCAweGFlYzk4ZWQ4LCAweDdkMjM4OWJkLCAweDZiNDJkYTJiLCAweGY4MzVjNzFlLAorCTB4MjBiMzNlMTYsIDB4MGU0ZmEyM2IsIDB4ZmRlNDdjYTYsIDB4M2VmN2VjZTcsIDB4OWQ5YjI1YjMsIDB4NTQ2NGY5MTcsCisJMHgyOWI2MTI3NSwgMHg2NzUzZTI3NiwgMHg3NGQ3YTI3YywgMHgzOTcyOTQ2NSwgMHg0OTRlNTEzOCwgMHgzYzNlM2U1NiwKKwkweDRjOWU3MTFmLCAweGNmM2U2NGZkLCAweDE2OTJkMTY5LCAweDAxN2IzMmU3LCAweDJmMjMxN2IyLCAweDVlMGE1YzdiLAorCTB4YjVlZDBiYmEsIDB4YjRlZTA3ZmYsIDB4ZGZhYmU0NjIsIDB4MTY4OWU0NzQsIDB4MzVmYmY3OWMsIDB4ZjYyMGZjODEsCisJMHgxNzllYTk0ZiwgMHhmYzZmOWYwOSwgMHgyOThlZWQ2NiwgMHgxNTViNmZlNCwgMHg5ZGY5MDU2NywgMHgyYzg3ZWY5MCwKKwkweGQxNTU3ZGZmLCAweDFkZDg0N2I3LCAweDA5MzM4NzY0LCAweDc4ZmJiMWJmLCAweDkwZmUzN2NmLCAweDgzYzFkYmYyLAorCTB4YzlkNTZlOTIsIDB4ODg3Mzg2ZWYsIDB4NGZhZWJhZWUsIDB4ZGVlN2YyNTUsIDB4N2NiMjFmODMsIDB4ZTdiYTZlNzYsCisJMHhhZmVhM2IzNSwgMHgzZTYxYjNiYywgMHgzNDI2NzVjOSwgMHgyZWJmOTEzNywgMHgyMDQxNzkxMiwgMHhhMTkzZmI4YiwKKwkweDM2MmZmOWQzLCAweGI0ZTFlODQ0LCAweDdiMDgzN2IwLCAweGVhN2M1MWM2LCAweDk4N2FmNjEyLCAweDNiNmM0ZWVhLAorCTB4NGYxZTFlN2EsIDB4YmE4ODc3ZWIsIDB4MDFhZjc4ZDgsIDB4YjkyMThjOGUsIDB4YWM5YmMyMzcsIDB4N2UzNzhlMWQsCisJMHg1OWMyMjJmMywgMHg2YWViNTlkMSwgMHg3N2ZjYzQ1NywgMHg3YWJmM2NlZCwgMHhiZGYzY2VkNywgMHgzNzllZTlmNSwKKwkweDNkZDUzZTQ5LCAweGM0YTlhOTFmLCAweDBlNDBjNWU3LCAweGFjMDE5M2Q1LCAweDdlMzhiNThmLCAweDYzN2VkODY0LAorCTB4MGU2YmM5ZWMsIDB4N2JkZjM0YWIsIDB4NDE1Zjk4MTksIDB4NDM0OTZmN2QsIDB4ZGIzYmVkZmQsIDB4M2UwZDc5MzksCisJMHhhNDlkNDBlZiwgMHg5ZTcwOWU1MSwgMHg4YTFkODdkNywgMHg2ZmNkMGM3YiwgMHg4NGI1NzMzOCwgMHgyMjAxZDhmYywKKwkweGRhYjllOTAyLCAweGU0OGUzZDVkLCAweDk3OWZmODg2LCAweDA2ZDY3NjQ4LCAweDc2MTlhZmNjLCAweDhhNzY0YzVhLAorCTB4ZmUxMzE3ZWYsIDB4Yzg1ZmE4Y2IsIDB4ZGFhYjcyZmMsIDB4NjVkOTk4YjcsIDB4MmVjODA5ODcsIDB4MWVjY2ZmMTEsCisJMHhjNTFhZmYxMCwgMHhlZDBkNjJlMywgMHg4OTNmYmQ4MSwgMHg5ZjZiNzlkOSwgMHg1OGYyYzVjOSwgMHg1OTEzZWJmNCwKKwkweGQ0MDNkZTdmLCAweGEwNWJlZDZmLCAweDIxMzczYjMxLCAweDVlYzk0YjllLCAweDNhZDg0NzgzLCAweGE0ODk4MDAxLAorCTB4OTFkYzA5M2EsIDB4ZjYwNTAzZTcsIDB4YzMzN2E2NTQsIDB4ZjYxNzRlNWYsIDB4ZDNkMDI4MWIsIDB4OTI0N2M4OWMsCisJMHg0N2Q5NDcyYywgMHg3ZGU0OWM0NCwgMHgzZjVkNDcxMSwgMHg5ZTY3YzdmYSwgMHhmYjRmODM5ZCwgMHg0NGQwOWM0NCwKKwkweGZkYzczYzdjLCAweGFjNDViN2ZlLCAweGQ2NmI3ZmFhLCAweGM3Y2ExNmQyLCAweGYxYjMyZDdmLCAweDIyN2NlMmMzLAorCTB4NDQ3MjcwMjgsIDB4ZGM1MDRmOWMsIDB4NmYzZjUxZDAsIDB4NjlkNzczOGEsIDB4MWZhMTc3ZDgsIDB4MzRkYWVlOWQsCisJMHhmMmFhNzI5ZiwgMHhhOTQ3Y2Q0NSwgMHhjYzBlZTU5ZCwgMHhjZTcxNTRhNywgMHgwYWEzYmVhYSwgMHhjMjIyZjMzNywKKwkweDdiOTFmYjVmLCAweGY3ZTRjYzhiLCAweGFlZmFmM2NlLCAweDA3ZjBjYmZkLCAweDllMWNhMmFmLCAweDhmZjI4YzM4LAorCTB4MWQ5MGE3MTMsIDB4YWZjYzNmODYsIDB4OGRkNjQwYzYsIDB4ZTE5MjgzZTMsIDB4NGJkZTc2NDcsIDB4OTc2ODFjNzgsCisJMHg0ODQ4ZmE0NywgMHhmYTliMDIxZCwgMHg5ZmRiZTkxOSwgMHg5ZmRmNjFmMSwgMHg0NzRhY2FlZSwgMHg3ODcxMWU3OSwKKwkweDllNTFkMmIyLCAweGNjYmYyNzgzLCAweDM4ZWNiMzI0LCAweDliYWIxMWZkLCAweDExNTc1NWRiLCAweDBmM2RhN2UxLAorCTB4MzgzOGNkNGIsIDB4NzNmM2E3MzUsIDB4ZjQ0YjMyOTQsIDB4Y2VkMThhZjksIDB4MzA3MWU3NGUsIDB4MjQzYjA3ZGYsCisJMHg5YWNiMTc1NiwgMHg3NmU2ZWE5ZiwgMHhmZTYyYTVkOSwgMHgyYjdjMTk3MywgMHgxMWJmOTM2NiwgMHg4MjhmODFlNywKKwkweDFmYzJlN2Y4LCAweGEyNjNjZmQ0LCAweDJiZTUyOGZiLCAweDdiMWViNzE4LCAweGFmMzk4OTU2LCAweDNjMjI2NGRiLAorCTB4ZTA5MmU4NmQsIDB4ZTU3YmM4MjcsIDB4MTc3MWQ4ZWUsIDB4YzQ2YTViY2IsIDB4ZjczYjFiM2EsIDB4ZmE4MzFiMWMsCisJMHg3YTI5N2FhYywgMHgyYmU1MGQ1ZSwgMHhjMDNjOWNlYywgMHgxNjlhY2ZlYSwgMHg0OTlmM2EyNSwgMHg3OGNiNzkxNywKKwkweDBiNzk0ZjE4LCAweDA3Zjk4OWUyLCAweDE2YmQwY2M1LCAweDg3NDVlZmM0LCAweDZiNGM5MGE3LCAweDA5Y2I4OTlmLAorCTB4Y2JiMzJhZmQsIDB4YjRiZjkxNDIsIDB4MjhmZWUzY2UsIDB4Y2NmYzA1N2MsIDB4OGUwNmY2NmUsIDB4YjNkZDIyYTYsCisJMHhiNDlkNzI1YSwgMHgxZjMzMmNjNywgMHhjYjk5ZDU5ZiwgMHhmZDk4MGNlMiwgMHg0NDU0MzJmMiwgMHg5MGIzY2JiOSwKKwkweGQ3M2VkM2U1LCAweDQ3OTQyY2U5LCAweGEwOTNmMGE1LCAweDhkYWVmM2YxLCAweDkxNGFhZjgyLCAweDQ3ZjQ2ZGNmLAorCTB4ZmMxMzNkZDMsIDB4ODZjZmI0NGQsIDB4YTgzMzkyYmQsIDB4MTI4MGY5ZDMsIDB4OGFmM2FmMzcsIDB4OWQ3NjZhNzUsCisJMHg3YmM3NDYzYywgMHg3OWU4ODFiNSwgMHg2ZjFmMjE1ZSwgMHhmZGYzZjQ2NywgMHhkNTgxMzZjMCwgMHgzNDdjZTJlOSwKKwkweGY5ZDg3MjA3LCAweGQ1YWRlZjc4LCAweDc4NTdiZjUzLCAweGFjNGE3MTdlLCAweDE2NmY4YzYzLCAweGYyNDNhOWI4LAorCTB4N2UzNWJmNDgsIDB4YTliODRmZDksIDB4M2NhOTdjOTQsIDB4MzVlNDg1YmYsIDB4MDMzYWY3NDgsIDB4YTBmZTNhMmYsCisJMHhmOTBiZDYzYywgMHg2MTc4MTNhYywgMHhiNWZiZTE3YywgMHhkZDNmMjViYiwgMHgxOWRmYWQyYiwgMHg4MWEzZmY0ZCwKKwkweDBmMDkwYjM1LCAweDZjYWFiOGIxLCAweDViN2U1ODUxLCAweGNhNTQ5YjA1LCAweDU1NzE2MzZmLCAweDY2OTc4YzM1LAorCTB4MmM1OGUyOTUsIDB4ZDIzY2VhOWUsIDB4NzllNmU4NGQsIDB4ZWU5NWZmZjksIDB4Y2VjODI1NmEsIDB4NTlmZmFhN2QsCisJMHhmZTg4ZmE3MiwgMHg3NGE5NmZmNiwgMHg3ZGEzNzhmZSwgMHgxOTU2ZmQ3MCwgMHhmZDdjMTEzOCwgMHg2ZjNjZmNiNSwKKwkweDRjMzI3ZmUwLCAweDk0NWRmYTY2LCAweDUwNzU4YjdlLCAweGE2ZGQzZTc0LCAweDMyMThmYjcyLCAweDAzNjJmM2YzLAorCTB4MmZlZmIxM2YsIDB4M2RmOGY5MTQsIDB4NTdiNTgwYmIsIDB4YTU0ZjNmM2EsIDB4YmVjMWRmZjMsIDB4YWQ2MDU0YTEsCisJMHgzZmM1MTE2OSwgMHhmMDg4NGZlYSwgMHg3OWQyZmIzYiwgMHhlYjM1Yjg5ZCwgMHhiZTUzZWZlMywgMHhlMjliNGY3ZSwKKwkweDZhMGU0Y2M0LCAweDhhNmUyYWM2LCAweGRmNjMzNWQzLCAweDExMTA5Y2NhLCAweDc5ZDJkYTU3LCAweGRiNGY3OWZkLAorCTB4NzQwOThkYTMsIDB4ZTQ4YWYwY2UsIDB4ZWMxYmYzMjQsIDB4ZDQyM2ZiZmEsIDB4Y2U0OGI1ZjcsIDB4YjFmZWY4ODksCisJMHg2Nzc3YTFiZSwgMHg5MmIyM2U5MywgMHhkZTdhZDNhNiwgMHg1YThiYmJlZSwgMHhjNWVjN2ZiMSwgMHg3NTkxOWMzYiwKKwkweGU3M2IzMWU1LCAweDBhYjE5ZWVmLCAweGEzZmQ5YjhiLCAweDQxNTY3ZTkzLCAweDNkYWU4MGU3LCAweDBmZmI4ZWNjLAorCTB4OWQ5MmFlYmQsIDB4OTA0YWI2MGYsIDB4Y2IxZDFiODUsIDB4OGY5YWZhM2EsIDB4MjcwMzljZWEsIDB4ZTdjNjRhNTUsCisJMHg0MzU0OWZiNywgMHg1YzBmOTE1ZiwgMHhjODJiNzJjMSwgMHg1NTliNDljZSwgMHgxZGRjNmJhYSwgMHhjYTIxYTg5ZiwKKwkweDkwZmE1ZThmLCAweDc1NTUzZjlkLCAweDU0OGZjYzRhLCAweDNhZmQ5NmVkLCAweGZiYjQ3OWZlLCAweDU0NzA5NTBkLAorCTB4YThjMTIyZDcsIDB4ODU3MWM4ZGMsIDB4YTNiZjkzOGQsIDB4ZGMyZGE3ZmUsIDB4NWNmODFhN2YsIDB4ZTA2OGYwMmIsCisJMHg1YWViYzBkMywgMHg2ZGQ2NjdlMSwgMHg2M2UzYzY4YiwgMHgxYTNhZGFlMCwgMHg2NWI0N2ZkZiwgMHhjZDc5NGE4ZCwKKwkweGZkZjFjZGEzLCAweDM2YWZlMThjLCAweGZlODhmZDUwLCAweGU4YWVjMzdmLCAweDcxODcxYjc5LCAweDM4N2U2M2U4LAorCTB4MWJmNTlmZDYsIDB4NDI4NDJjMzgsIDB4NzA1MGUxYzIsIDB4ZTIzMzM4ZWQsIDB4YWFjOWVhZmUsIDB4NWVlNzEwNzEsCisJMHhiNzExMWRlNCwgMHgzMzc5Yjg4ZCwgMHg3ZTc0MGViOSwgMHhmM2JjNTJhZSwgMHg2ZWFjMmI2NiwgMHhiN2ZmNjZmMCwKKwkweGFiOTM4OTFhLCAweGJiMGIyNzAyLCAweDUzZjRjMGZlLCAweDgwYjNkNWQxLCAweDllMDI1YmY2LCAweDkyZWY5MjFhLAorCTB4ZjI4ZDI0YWUsIDB4YjcxMDhhZTAsIDB4MTY1ZGM1ZGIsIDB4ZmEyMjVmYmYsIDB4MmRjZTJjNGMsIDB4ZDIxNmMwODEsCisJMHgwYjYxZTBmZiwgMHgyNDNjNzczZiwgMHg4NDA4N2NiMSwgMHhlNDIwZGIxZiwgMHg3N2M4NDFiZCwgMHg2MzU5ZDYwMywKKwkweGU2MmYyOTRhLCAweDgyYzZmNDc1LCAweGE1MjhjNzNkLCAweDZiY2YxM2FmLCAweDI1NGQxZjhlLCAweGVlMDYyZjM5LAorCTB4YjgwNzE2NjcsIDB4NjVmNDMxOWYsIDB4ZTMxYjg5YzQsIDB4YTQ5YmY4NjEsIDB4MGIyZWVhZWYsIDB4ZjcwOGY3ZDAsCisJMHg1ZjczM2YwOSwgMHhlOTE5ZmEwYiwgMHhiYzFmYmI0NiwgMHhjNWUxODkyZCwgMHg4ZGU5YzFkNywgMHhlZDc1OGI4ZCwKKwkweDBlNGRmM2QxLCAweDg5MGU1ZjllLCAweDExY2YzNmJjLCAweDMwOGFhZmFkLCAweDdhZTMxNTI0LCAweGU5ZDk3NThiLAorCTB4OTlmNTZmNjcsIDB4MTJkZWZmNjksIDB4ZjVkM2RkODksIDB4M2NkM2UzZWEsIDB4OWMzOGY0NzEsIDB4ZGQ3YzhiNTcsCisJMHhmM2E1MmZlOCwgMHhkMDFmOWMyZCwgMHhlYjIzOTM5YSwgMHg5ZTBlOWRmMSwgMHg5NGNkNTc3ZiwgMHg4OGZmMjQ3ZCwKKwkweDY5Njk2NWZhLCAweDY1ZmFkYzZlLCAweGJmZTcwM2E2LCAweGU3NmViZDlkLCAweGM1ZmFjOGQ0LCAweDcwOWYyN2I1LAorCTB4MWZhY2JkZjgsIDB4N2Y5Mjk0NTUsIDB4NjRmZWUxNjgsIDB4NGRkNzFjYTAsIDB4NTgxYzdjYTMsIDB4YjE2ZGViN2UsCisJMHhmMGNlYTlmOCwgMHhlZjI4OGUyMiwgMHg0MjcwODdiYSwgMHhkZDI1ZDlmNiwgMHhmY2MxMzg0ZCwgMHhjZDEyNmVmZiwKKwkweDQzN2FiYTMyLCAweDYyNzU5N2ZlLCAweDk3ZTVjNjNjLCAweGMzMDNmODJkLCAweDljMDlmMWRkLCAweGE4ZGI5NDZmLAorCTB4NTE4MGY1NzgsIDB4YzE3ZGQ0MDcsIDB4NzllMzRkZjMsIDB4ZWFjNDM5OWQsIDB4ODkyZWJhODEsIDB4YzhmZGI2ZTEsCisJMHhhNDVjOWNiNSwgMHg4ZmZiYjA3NywgMHhmZGIwNmIzOSwgMHhhMzhmMDcwNywgMHgxZjAyZjNlZCwgMHg1NzIwNzdkMSwKKwkweGYzNzFhZDViLCAweDJkYmY2MWNhLCAweDUyNzY2MTZkLCAweDU5MzI4NGE3LCAweGYzMTA3MWRlLCAweDNmNTgxOWJiLAorCTB4ZDU4Y2ZhOWMsIDB4MTI0N2VkMGYsIDB4ZjZiOWQzNTYsIDB4MzhjZjVhYzAsIDB4ZDRmNDJiZWQsIDB4M2YyYzhkMDAsCisJMHhhYzJkODQ2ZCwgMHgzMjI1ZmNhNSwgMHhmMWEwZGI5ZiwgMHgxMzFlNGFlZiwgMHg0ZmZhOGVmMSwgMHhjMzFmYWUyMSwKKwkweDhkMmI1ZmI5LCAweDViN2MxN2U3LCAweGZhMzc0YjY3LCAweGQ0YWZjMzAzLCAweDE3NTdiYzBhLCAweDI5NGFkOWVmLAorCTB4NTM5ZTZjNTcsIDB4MzMwOGVjMmIsIDB4NjJkZjE2NzgsIDB4MGU5ZDliZjMsIDB4OWMwOGJmOTEsIDB4NjQ0YTljMzYsCisJMHg3MWUwZWFmOSwgMHg1ZDMzYTM1OSwgMHg0NzRmZWI5NCwgMHg3OTg2ZmU1MywgMHg3MzljNWU3YSwgMHgyZTA0Y2ZjYywKKwkweDY1ZmRjNWZiLCAweGU0Y2NiOTQzLCAweDViYzk5YTY2LCAweGY5NDIxZjIzLCAweDllMGNiYzMxLCAweGJlNTNmNjRjLAorCTB4OGRmODc0NWYsIDB4ZjU3ZmQyM2MsIDB4NjkxNzljNWUsIDB4MGYzZmE4NzcsIDB4Y2ZjN2FlZmIsIDB4NDgxYjVjNzAsCisJMHhjNjMyNzc2MiwgMHg2ZmMzYmVmOCwgMHgzNTljMjY0YywgMHg5ZjMyZmE5YywgMHhiZTVhZTVlYiwgMHg3ZDM5YjhlYSwKKwkweGJjNDkyYjQ2LCAweGJjNDkzNThlLCAweDg3MzBlZDhlLCAweGYyN2VhOTUyLCAweGZlZGQ5NDFlLCAweDdhMWE3ZDA4LAorCTB4NDc2MTE3ZmUsIDB4ZmFmNWU2NjAsIDB4ZmFjZTg3MWUsIDB4MTcxYzVkMGQsIDB4ZTJkZTZlYTYsIDB4NzlmODJiZmUsCisJMHhiZmY2YzI4ZCwgMHhlMjFlN2M2MSwgMHgxYWUyMmJlNSwgMHg3YmE4NWQxMCwgMHhiODY2MTJhZiwgMHgzMTM0OWVmMywKKwkweDg3MjdiYzdhLCAweGJiZTMyMzMyLCAweDQ1MWRkNjhmLCAweDA2YTFhZjdlLCAweDAyNDkxZjk4LCAweGM3ZThiM2YyLAorCTB4ZGVmNzU0N2MsIDB4ZTU4MTJlNzcsIDB4NzZmMmM3NGIsIDB4OTViZjMwNTQsIDB4YWRmOTAzMjcsIDB4NGQ1NTRlMjcsCisJMHhmOTBmOGM4YSwgMHgyN2U3OTkwZSwgMHhjYTJjODcyNCwgMHhmYmU1OWU1NiwgMHhjMjM0MzkwYiwgMHg3M2VmNTE3MiwKKwkweGNlOTJiZjFjLCAweDUyNzU4MGU1LCAweDZjNzFkOTM3LCAweGY5YWI3NDlkLCAweDA1Yjc0MzZlLCAweDdiZDgxY2U4LAorCTB4MTNiZWMyYzEsIDB4ODFiZGRhYjksIDB4ODVmMGUxZDUsIDB4MTlmOTEyNjcsIDB4YTc2ZTc4ZjAsIDB4MWJjMzg5ZjYsCisJMHhhYmYzZDEyNiwgMHhjZWRlMzc4NywgMHhjNmE1MmZjZSwgMHgyM2U1ZjhhOCwgMHgyZjI4YjJmYSwgMHhlM2E5OTMzYSwKKwkweDk5Zjc2ZDc4LCAweGMyYWQ2MDRjLCAweDY0N2VhN2U4LCAweGMxZDc3YWZjLCAweDRmNjBkN2UzLCAweDkwYTczYjAyLAorCTB4MDBlMzhmMjAsIDB4NWJhZDQ0MjYsIDB4Y2IxNmZlZDMsIDB4NjUzYTZhMjMsIDB4OGMxZTI0NTcsIDB4ZjA3MDNlZjcsCisJMHhjMjIzZWFmYywgMHg5MDEzZjEwMSwgMHg2ZGNmNGM1YywgMHg3Y2U5YWRiYywgMHhhZDUzZDE5ZCwgMHgxYjFlOTgwNCwKKwkweGRlM2UxNDVhLCAweDJmY2M1YmNhLCAweGIwM2UxZDE5LCAweDM2ZmU4OGZiLCAweGY3ZTZiZjNhLCAweDAyYmNlYzFhLAorCTB4MThmYjMyNjcsIDB4NmZmNDI4MmEsIDB4ZThhZmZlYzcsIDB4Yzg3NWNhMTEsIDB4ZGNmZTAyNmYsIDB4OWI4M2VlYzIsCisJMHgxMWE3Yzc3YSwgMHg1ZjdhODdlZSwgMHgxNzhiYzQ3NywgMHgwODNkZDBlZiwgMHg5NzIyN2E5MiwgMHhlM2IxMTdkNywKKwkweDM5ZjgzMjdiLCAweGRjZjM4OWMyLCAweGViOTg5ZDhmLCAweDlmY2YxNDk5LCAweGFmMWU2MGY5LCAweGVmMjEyNWI3LAorCTB4YmM1MTY1NzYsIDB4MzIxN2I0ZmIsIDB4ZGVjZjM5ZjgsIDB4ZTIwOWRmNmMsIDB4ODEyZGJmYTcsIDB4ZGJmNWE3ZGQsCisJMHhmY2U4YjlmOCwgMHhlOWNkYzdmZCwgMHhhNWRiNzcxNCwgMHhhYTNmMTQ2OSwgMHg0MDVmZGUwYiwgMHgyZmQ4ZjhmNywKKwkweDc4MmI3ZTYzLCAweGQ2MWJkZDkwLCAweDc0MmRiNGI2LCAweDJlYTNhMWM1LCAweGM1ZjFmYjgzLCAweGM4ZmJmYzZhLAorCTB4N2JmOGM1ZGIsIDB4ZjUxMGNjZTAsIDB4ZWUxMzBlZDEsIDB4YTI4NTVlZjcsIDB4ODY3OTY3NmQsIDB4ZjQzNmY5MmIsCisJMHhmZjBiZjdiZiwgMHg4NTEyYzBmYiwgMHg4MWVmMjVlNSwgMHgwNzdiZjBhZSwgMHg1NGIwM2Y3ZSwgMHg4NWZiZDFmOCwKKwkweDFlNWE1ZTVmLCAweGVkOTcyN2VkLCAweDdlZTlhNzg2LCAweGJlMmI5OTYwLCAweGFjNDg3ZTFmLCAweDZjNWMxY2JmLAorCTB4NDUxNjA3ZGQsIDB4ZTQ0ODdiY2YsIDB4YTNiOTBmNzcsIDB4MTBjYTRmOWYsIDB4ZjIxZjM3ZmUsIDB4MzAwNmZmYzksCisJMHhlYmJlOTAxZSwgMHg1YzU4MTMwYiwgMHhjNGNhNmZiZCwgMHhiMWMxNzliOCwgMHhmZGVlYzBjZCwgMHhiZmZkYzU3YiwKKwkweGMyODZmN2ExLCAweDNhYmM1OWY3LCAweDM1ZmU3M2QxLCAweDA5ZGJmMzFiLCAweDVlZTcxNzkwLCAweDE5NWUyNDZiLAorCTB4ZDcyMGZlZjYsIDB4YTgyZmI4YjcsIDB4ODY4ZDM4ZDUsIDB4ZTU2MGFmZGUsIDB4NjUyZTc5MTMsIDB4OTBiMTdkZTgsCisJMHgwNGRlZjU3ZiwgMHhhZjllZjIyZCwgMHhlYThiNjAzNiwgMHhkMzZmM2I3YiwgMHhmOWY4NDYyZSwgMHhmNDZmODE2YSwKKwkweDczYzhlNmZkLCAweDY3YjI5ZDhhLCAweDBiZGQwNjcxLCAweDNlNTlmYjU4LCAweGI4YjAxYzhkLCAweDA4ZTU3Yzg1LAorCTB4MTEyYzcyYmUsIDB4NmRjYWU4ZjEsIDB4NzdlMmUyNmIsIDB4OGZiYjNmODQsIDB4NmIwNzdkZmIsIDB4Y2MyZDBhN2IsCisJMHg5MjAzNmFlZSwgMHg2YWEzZWU5ZiwgMHhhYzllYmM4MywgMHhjOWViYzA1ZCwgMHg1NzllNzZmYywgMHhmMjUwNzhhZSwKKwkweGJlZTYyNGJiLCAweDA2N2QxMzRlLCAweDc5NWE5NjdlLCAweDMyNzAzNmZjLCAweDFmODEyZjJjLCAweDdlNzhhNzFhLAorCTB4YjFlNzg4YmYsIDB4N2QwNDlhMzgsIDB4Nzc5Y2U5MGIsIDB4ZDI3MjRiYTUsIDB4NzhiMTcxZjcsIDB4ZWE2YWJlNWEsCisJMHg2ZjllZTQ1YiwgMHg5YmM0MWY4NiwgMHgxNjMyN2U0MiwgMHhmMGNmM2Y0NywgMHgxYTYzMmI3YywgMHg0YzU3MGJhYiwKKwkweDE0NGY3NWMxLCAweGI4NDM5YTdlLCAweGRkODliYmE5LCAweGRiN2ExNGVjLCAweDQxM2JlYzliLCAweGJmNjZiZWYxLAorCTB4NWZkZjA3YjgsIDB4NzkyMjE5ZDgsIDB4ZjdjYjAyZjQsIDB4NWI3ZDZkZmEsIDB4Y2MxZTc5ZWIsIDB4ODM2YmMxZWUsCisJMHhkZWZhNGUwOSwgMHhjOTJiYjZiNSwgMHhmNmZkNDA5OSwgMHg1NGM5YzQ4NiwgMHhjZWM5NzYxZiwgMHhiNDU3ZWMyNCwKKwkweGYyNDA1YzlmLCAweGRmZTMyOGFjLCAweDYxYTlkNDY1LCAweGI0YWU2Zjk2LCAweDVlOTJiNjc5LCAweGEyN2IzODk3LAorCTB4M2EwZGJmZWUsIDB4NThmMzg2NmYsIDB4MDkwMmY2YmYsIDB4ZTc2ZmUzMjcsIDB4ZTBjODVlNmYsIDB4ZjhmZWFlZjEsCisJMHg3MTkzOTllNywgMHhjZjM2ZTlhYiwgMHhmMDdiYTI2ZSwgMHhiYTU1NTdhZCwgMHg3ZTRlZjMyNiwgMHg0ZWJhNjE2MywKKwkweDZmMzY3NGYzLCAweDE2Y2Y0YjQ5LCAweGU4MzU3ZTNhLCAweGVlMzQzYjBmLCAweDM2N2YxNTVmLCAweDZmOGIyM2NiLAorCTB4ODY5MDdiZWQsIDB4NTA5NzZmODMsIDB4NzNkMDNjZGUsIDB4YzA4ZDQ0YmMsIDB4ZmEzZDdmNzcsIDB4NmJmYTM4ZTcsCisJMHg1YmIwOTMwMCwgMHg2OTI1NmIzMywgMHhiODZmYzhiOSwgMHg4ZmJiN2IxZCwgMHg0MWI5ZDI2NiwgMHgzMTZmZDkzZiwKKwkweDI5NTI2N2I1LCAweGJkYjZkNjJlLCAweGYyOTEzYTk3LCAweDFhZGUwZThjLCAweDkyZTk1ZGViLCAweDg3MzAzY2Q5LAorCTB4ODk0YTFmZjIsIDB4NDY2OWVmYTQsIDB4NWYwMDk1ZGYsIDB4ZmY5NDIwMDcsIDB4ZjFjODk0YzAsIDB4ZmI2ZmZmYTYsCisJMHhhZTM4NDEzZiwgMHhlY2EyODZiNSwgMHg1NjEzOTBkZiwgMHg0NzU2M2VlZCwgMHg3YmIwYjYxZSwgMHg4OTI3YmE3NSwKKwkweDkyZWE5ZWZjLCAweDJjMGNmNWMwLCAweDY3NGVjODZlLCAweDc4ZjBiZGQyLCAweGYwY2NjNTRhLCAweDEwY2RmNTA4LAorCTB4OWVlOWRiMzQsIDB4ZWZmMzI4MzYsIDB4ZmY5OWIyY2MsIDB4OWZmNjJlOWUsIDB4ZDBmNjBlNjEsIDB4YzUzMzk2ZjcsCisJMHhlODJjZTJiZCwgMHgwNmJlZjM2MywgMHg0MGJhZDY2MSwgMHgwZjNiNTMzMywgMHhiNzJkYWM5YywgMHgzMmEzZWYwNiwKKwkweDkwMTAzOGFmLCAweDRjYzFmZjQ5LCAweDk1OTJlZGIzLCAweGYxMDA3ZjdkLCAweDM3MjIzZGY0LCAweGU0MzI1YzMzLAorCTB4MTNmZGQzMjEsIDB4OTYyZjVlZmYsIDB4OGYwMmViOWYsIDB4ZWZkYzVjMzMsIDB4ZGY0MTJhNTAsIDB4ODA0Mzk2NTksCisJMHgwOWRmNzdkZCwgMHgxZGVmNzEyMSwgMHg1OGQ5OGY5ZiwgMHhkNzdkZDFhNywgMHg4OTNiNjg5ZCwgMHgzNjdlMWU0YywKKwkweDIzZjEwZTdmLCAweDc0MjdlM2M3LCAweDJjMzM1MzFmLCAweDI5M2U4OGQwLCAweDllYmE2OTk4LCAweDBjN2NlYjc0LAorCTB4Mzc1YjAyNjYsIDB4ZTA3ODVkNzUsIDB4ZmI5MWIyYzksIDB4ZGJkNzY3NDIsIDB4NTBiYmU4ZTcsIDB4ZGY2MmU1YzksCisJMHhjOWFkM2E4ZCwgMHgwNDk3NTY0MSwgMHg3ZWMzZmRjZCwgMHgzOTIwMGYyYywgMHg2NjYyNmQ3MywgMHhmNzc3YzhjNiwKKwkweDNkZjYwMWUwLCAweGY3NzdlYzQ1LCAweGNjZTVlZWM0LCAweDhjYjRlZjkxLCAweGZhZjczZmVmLCAweGM0MjZlYjk3LAorCTB4ZDU4NzJhYzcsIDB4NGEzZTIzMjksIDB4ZDA3NzM5YWQsIDB4Y2QzOWUwZjksIDB4OGQzOTk4OTMsIDB4OTk2ZDAzYmUsCisJMHhmYjMxMTZjOCwgMHg1M2JjYjFhNywgMHg1YzA5MmFlMCwgMHhlNGJmYzRlNSwgMHgwN2ZiYmUzMiwgMHgzODlmMTc4NiwKKwkweDgyNjVmNmJmLCAweDkyNTJhZTlmLCAweDkxNTg3YzMwLCAweDQzODgxZGFlLCAweDVmYTE5ZGFiLCAweGUxNTllZmE3LAorCTB4ZTUzYWY5YTksIDB4NTY2ZDViYjcsIDB4MTY2ZmU1MjcsIDB4ODQ2OTM3YTIsIDB4ZmYyYjI2ZGUsIDB4N2VmOGMxZWUsCisJMHg0ZDhlNTYyYiwgMHg2NjNlODMyOCwgMHhjYjJiNGU3ZiwgMHg2MjhmZDc4YiwgMHg2YjhmMzRmNywgMHhiMjdmYmY5YywKKwkweGZkMTBhNjc4LCAweDFiY2NhNzhmLCAweGQxNmVmOTQ1LCAweGIxNjRlNjJmLCAweDMwZTUxYmZjLCAweGU5ODM5MGM3LAorCTB4ODBlN2ZmYzYsIDB4M2M5MTk3N2MsIDB4ODE3ZmZmNjMsIDB4ODAyYTJmYzEsIDB4NzIxMzQ2ODEsIDB4NDhkN2Y4MzQsCisJMHg1YzZmMTQzZiwgMHhiZjQzMWZhOCwgMHhkOTcyMjM3OSwgMHg1N2Y5Yzg5MSwgMHhmMThmNGJlOCwgMHhlYzlkNWRlYywKKwkweDgzNmY5NjM0LCAweGNmMDVmZmJmLCAweDEwNzg1MDczLCAweDAwMTA3ODUwCit9OworCitzdGF0aWMgY29uc3QgdTMyIHhzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDk0ZjNmZjAwLCAweDUxZjg2MDY2LCAweDI1N2JjMDhmLCAweDc5OWMxODE5LAorCTB4ODk2OGM1NTAsIDB4MTgxOTM5MGIsIDB4MGJmMTAzMGUsIDB4ZGEwMDU2MjAsIDB4YzBjNWNhZWIsIDB4ZmRjNDA2ZTAsCisJMHg4ODAxM2M0MCwgMHgzZWIxMDBiZiwgMHgwMTgzMDMzNywgMHhkOTAyYTcxMCwgMHg3MzZlNjg1MiwgMHgxN2JhMDI2NCwKKwkweGQ4ODE1ZDg4LCAweDMyYmY4ODFkLCAweDYzN2MzMDMwLCAweDc2N2VkZTIwLCAweDYyM2RhMDIxLCAweDIwMzlmZTA4LAorCTB4ZmQwNGIyZmIsIDB4ZjBkODNmZmMsIDB4ZGFmYTY1NWQsIDB4YzBjMmE4MTcsIDB4MmE4M2EzMTAsIDB4OGZjNjhiMTYsCisJMHg0NjZmYzFkMywgMHgwMjdjOWEzYywgMHg4ZjExM2YxYSwgMHg1NDczNzE3ZSwgMHgyYTAxOWQ3ZSwgMHg4MTg4YzkzZiwKKwkweDlhOTIwZjYxLCAweDZlZmMwMzdhLCAweDgxYWZjNzQxLCAweDMxMDBkZjdhLCAweDc0NzY5YTAwLCAweDAwMDM2ODVkLAorCTB4MDAwMDAwMDAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgeHNlbV9wcmFtX2RhdGFfZTFbXSA9IHsKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweDQ1NTQ3ODA5LCAweGJlZGQ3MGI2LCAweDRlOWRlZjRiLAorCTB4NjI1ODU5MDgsIDB4ODE1MTEwMDcsIDB4MDVlNDJjZTksIDB4NjJkOWIxYzQsIDB4OTcwNjIxZjQsIDB4NjY4NTQ2MTEsCisJMHg0NDc0OWVjYiwgMHhmOWQxYzFjNiwgMHgxNTM2MTBkMywgMHhjNzEzMzA5ZCwgMHg2MGVjNDRlMCwgMHg4MWEwZDA1MCwKKwkweDYwMjQxMDA5LCAweDNjYzBlYTAzLCAweDY0ZmZlMzFkLCAweGI4MzA2NmRjLCAweGM1YTRjNmIwLCAweGZjYjhkZjBkLAorCTB4NGRkNTRlNzUsIDB4MTFkMzdiZGYsIDB4N2ZlZjk5OWMsIDB4Y2EzZmJmZjMsIDB4ZmI1YmE5NTcsIDB4NTM5Y2VhZDksCisJMHgyYzkyMmFhNywgMHg0MjIyZTkxMCwgMHhhYjlmODNiZSwgMHg0MDliZjkwOCwgMHg0ZDE3MTkwOCwgMHg2OWU1YTkwOSwKKwkweDI0ZTA1Mjk1LCAweGJmYTJlMDI0LCAweGUxNTIxMzY2LCAweGQzY2I0MjU0LCAweDQzYjI5OTA5LCAweDQ4OTU1ZjBlLAorCTB4Yzg0MjhkZjMsIDB4N2RhNmYzNGMsIDB4NmVlZjJjNTYsIDB4NTNiMGY5NjAsIDB4ZmU1YTExZjEsIDB4ZDNjZDEzNzEsCisJMHg4ZWU2MDMzZSwgMHhlNWEwYWU4NywgMHhkOTIyMWQ5MSwgMHhiMjhlZGQwOCwgMHgyMTEyNDg5OSwgMHhmZDg0MmRjNywKKwkweDBlN2NkMzY0LCAweDk2NTY4NTIxLCAweDNmZGM2OGFkLCAweGI3MTdkYTA3LCAweGY2OTU4OTk5LCAweDY4YmJiMTU3LAorCTB4NWYzNDE1YzYsIDB4NTAyNjQ4NzQsIDB4MzJkMzYyYTUsIDB4OTdjZDEwNjUsIDB4YzgxNjg0ODQsIDB4ZjM2NjRjZjcsCisJMHg0MzE0ZWUwYiwgMHgxZWZkNjg5YiwgMHhjZGQyNDc1NywgMHg1NzRlNDIwZSwgMHgyMTQ3ODg1YiwgMHg5MWQ5YzZhNCwKKwkweDQyNjhkMzc0LCAweGYyZGI0MzRhLCAweGIzNjk1ZGEwLCAweDU4MTEzNWUwLCAweDUzOTdhNmM3LCAweDA0NWI1ZDYxLAorCTB4NDg0M2Q5YWYsIDB4ZjEzYjY2ZDksIDB4Zjg3MzYyOGMsIDB4ZGUzYmZlOGUsIDB4YTJhZjg2MmEsIDB4M2FlOThiZTUsCisJMHg4OGI3ZWQwOSwgMHgxMTExZTZkNCwgMHg3OGE3NWZjNiwgMHg5ZGY4NTE5YywgMHgzOGUzNzZhZSwgMHgwYjYyYmU2YSwKKwkweGFiYjY4NzFkLCAweGMyZjA1NjdjLCAweGM0NGQyYjEyLCAweGVmYzc0MmRmLCAweGY1OWQ2ZGRlLCAweGI3ZDYwMzg0LAorCTB4ODRlOTE5NGMsIDB4YTA1NmFkNzUsIDB4ZGU2ODUxNWUsIDB4ZTYwN2FiNGUsIDB4ZDFlNGE4ZDcsIDB4NDY4NmQyZjIsCisJMHhiNDc0NzBhNSwgMHgwM2NkYjJiZiwgMHgxZmFhZjNmNCwgMHg5NGQ3ZWM5ZSwgMHhkNWQzZDMxYiwgMHg0NjQ2Nzg4NCwKKwkweGY4ODRhNWYzLCAweDQ0YmY2ODVhLCAweGM3MzMyOTBhLCAweDQwN2ZiZjQ0LCAweDA4MTkwOWUyLCAweDYzYzQ4YmZkLAorCTB4MjE0ZmY2ODksIDB4NDc4M2RmODksIDB4NWUxNGFmZTgsIDB4ODQ0ZWJkYzEsIDB4YzViNzhhYWIsIDB4MjdiYmZhNmUsCisJMHg2ZWIzYjc4YSwgMHg5MjI5NDc4ZSwgMHg0ZDVmZWRhMywgMHhkMDNjMDIxZiwgMHg5YzAyZDRmOSwgMHhjZjk2YmE2OCwKKwkweDRjOTEzNWNmLCAweDJlZmY2ODkyLCAweGU5MDM3MTFmLCAweDM1MWViN2Y1LCAweDNjYzk5NWFkLCAweDE4NWFjNzQyLAorCTB4YzY5M2UzMWMsIDB4ZWU0MmJjZDMsIDB4N2U0MjVlMjAsIDB4MzdjNzIyYmQsIDB4MjQxZmU2OTUsIDB4NmYzMDM5ZmUsCisJMHgwNjJmZTRkMSwgMHg5MmQyMTEzYywgMHg0YWJiZjQwMiwgMHhmZDYwYjMyMCwgMHhkMzQ5ODEzZiwgMHg5NGE5NTVmMiwKKwkweDZiZGMyOTNlLCAweDIxM2NlNWE3LCAweDg5ZWU3YzBhLCAweGYyN2MyZjkwLCAweGE3ZWM3NGZlLCAweDY4NTFmYjA4LAorCTB4ZGZjZmMzM2YsIDB4NTcyZjNiOGYsIDB4YWYzYjhmZDcsIDB4MGFhN2VkNTgsIDB4NTg1ZGIxZmIsIDB4MTM3OWI1M2YsCisJMHgyYmM5ZjNmNCwgMHgxYmI5ZmI1NSwgMHhkODVkNzFmYiwgMHg0ZjU3ZGNiYSwgMHhlYWU3Y2ZkNCwgMHg3ZTI3ZWM3MiwKKwkweDY5Zjg5N2FhLCAweDA3YTU1MTdkLCAweDY5MTNlMWQyLCAweDNlMzlhM2I5LCAweGE1YTI3ZWYzLCAweDgxMmJjOThiLAorCTB4NGI5NDlkZmYsIDB4OTcxMTc0YjQsIDB4NjFkMWQzNmIsIDB4OTc0MTJmYmMsIDB4OGZiOTNkYTcsIDB4MzBmM2NlNWYsCisJMHg3YzgyY2I4OCwgMHg1MDUyMGNhOSwgMHg2NDFhNGMyZSwgMHgzNWRjZjljMSwgMHhlMTcyODFjOCwgMHg0YmZlMDlhZSwKKwkweDMwMWU3NGRjLCAweDc5YTU0OTM2LCAweDc3MjNmZmM1LCAweGYzYTZiYTBjLCAweGE0MGE0ODE0LCAweGM2YTQxMzFlLAorCTB4ODMzMmQ1ZjIsIDB4NWZjMWU0YzMsIDB4ZGI0NjNjOGYsIDB4OTE5MTRjMDcsIDB4NGViZjM0ZjEsIDB4YWMzOGY0OTgsCisJMHgyMTMxMTM2MywgMHhhOTIyNmM3YywgMHgzMzM2N2E4MiwgMHgzYWI0Zjk0MSwgMHhhMDg5ZTczZCwgMHg4NjZiNGUwNiwKKwkweGQxMGJmYzUyLCAweGZlYzhkNzdlLCAweDJkYWZhMDE0LCAweGQwMjBlNmU0LCAweDk0YTFhYWRiLCAweGYyMTEwN2M5LAorCTB4NzBhNmYwNzQsIDB4ODdlZGEyNTAsIDB4M2MwMGE2MTYsIDB4NmZlNTBhY2QsIDB4MWQwYWY4ZWQsIDB4ZmY4ZTM0N2YsCisJMHgwM2JmOGMxYywgMHg3N2Q3MWZjNiwgMHg1Y2IwZjM3YywgMHhiNDk2ZjhkZCwgMHgxNmY4ZGQ2MiwgMHhlOTRmOGU4NSwKKwkweDlkYjkzNzdkLCAweDM3ZTE0ZjhmLCAweDgzZTc5MDgxLCAweGU2ZjhlMWI3LCAweDdmMWM2MmI0LCAweDc1OGE0MmI1LAorCTB4Yzc3YWRiZTMsIDB4ZmRkNjAxN2YsIDB4MWZlYjdmNTIsIDB4ZmViZjQxMzYsIDB4ZmFmZDUyYjQsIDB4YzNmZWI2MTUsCisJMHhkZjFmMTE2NCwgMHg2M2ZmZWI4NiwgMHg3ZjViMjE3MCwgMHhiZjViMjk1YSwgMHgzYmRiZjU5OSwgMHhmZTE3YWJiZSwKKwkweDhmYmFjMWFmLCAweGUxZmViN2Y0LCAweGJmZWJmNTEzLCAweDdlYmY1Y2E4LCAweDZkZmYxYjMzLCAweDc3YzdjMTUyLAorCTB4MDRlZmY4ZTAsIDB4MmZmYWQ5Y2IsIDB4MTVmMWM3MmEsIDB4NzQwYmRmYjMsIDB4NTViNjBjYTQsIDB4NjRmOGU4ODUsCisJMHg2NDg4NjUwOCwgMHg0YzNlNTE5NCwgMHg0MjEwMjU0NywgMHg2MTkxZDdkYiwgMHg2Y2JiODcwOCwgMHhiMGJlZWU4YywKKwkweDQ0NzM3YTUxLCAweDUxMDkxZGU1LCAweGFjZjJhMjhlLCAweDU5N2NkMzkyLCAweGU0MDUyNGYzLCAweGI5NTM5NjJjLAorCTB4NzU0Zjg4YjcsIDB4NzQ4ODliNjEsIDB4YTFjY2VhNGQsIDB4YmI3Y2U5OGIsIDB4ZTQyMGM0ZGIsIDB4MTk1ZGQ2MTcsCisJMHgyM2JmNzExMiwgMHg5ZGEwMGI3MywgMHhmZGYwYzI0NCwgMHg2Y2M3ODdhMywgMHg5OGNiYWVkNCwgMHg4Zjk1YWEyZSwKKwkweDg4ZjhlYTc3LCAweDk5MzgyN2NkLCAweGYzYTJhYThjLCAweDMwNDQwNjliLCAweDRlM2Y5YTJlLCAweGYyYTEyOGU1LAorCTB4NDcyYTdkZjMsIDB4ZDMyMTNkMjEsIDB4MGZmN2U4ZjEsIDB4OGEyNTljYTksIDB4YjE5NjZmOTYsIDB4ZGU0ODNjN2QsCisJMHg3MjA0OTUxOCwgMHg5NzFjZmQ4MiwgMHgyZjhmYmMxOCwgMHhmZjAwNDIxMSwgMHhhMWRkZDYyZiwgMHg1NDVhN2M4MCwKKwkweDhmNDBhNzZiLCAweGYxYzAyM2NlLCAweDBlNmRkOTE0LCAweDllMTAxNDZkLCAweDJkY2Y4MDFlLCAweGZjODQ4YWM4LAorCTB4OTUzNWEyOTUsIDB4N2VhOGI2ODIsIDB4NmRkZGFlODAsIDB4ODUzMmI0MjQsIDB4NzZiMDVmZDYsIDB4NWQzNzUwZGUsCisJMHhjY2IzYWRmZiwgMHgxZmVjMjI5OSwgMHg4NGQ4MzdjNCwgMHg5YjA2NGM3YywgMHhkNTk5MDk3MiwgMHg0YzFlNGViYSwKKwkweDkyY2NiNzMzLCAweGI0ZDRlZmRmLCAweGU3ZDdlZDlmLCAweGU3ZDYyZDZmLCAweDZjOTBlNWJiLCAweDQ0YTM3ZDAyLAorCTB4ZGZiNDhkMjAsIDB4ZTVmNGFiZGIsIDB4NDJmMTM4ZWEsIDB4MWYyYmMzMDIsIDB4NmM0OTI3ZWYsIDB4OWE0M2I3YmUsCisJMHg4OGRkOWYwOSwgMHhkNjZlMzlkNywgMHhlMDRmOWQ1NiwgMHg3MTg0OTkxZSwgMHg0ODFjZWNiZiwgMHhiMTAzZmYxMCwKKwkweGQ2Y2RkZjllLCAweDFjZWY5YzZkLCAweGEwMmJlMmQ5LCAweGI3NzM5OWYzLCAweGNlMzRmMDg4LCAweGRkOWY3M2JmLAorCTB4ZDM0YjFhNjcsIDB4MjA2NTRmZmEsIDB4OGM3YWUzNDEsIDB4ZDRiYjlmZjMsIDB4ZWEzNzFlYjgsIDB4YzY4MmYzNjEsCisJMHg4YzRlOGNlZiwgMHg5YjY4MTRmNCwgMHg0ZDQzZTAzNCwgMHg2Yjk2OGFiZCwgMHhhMWE4N2MwNiwgMHgzM2NkYjJhZiwKKwkweGQwOTJmOTc1LCAweGEyZmQ1ZDZjLCAweGYyYmE3OWZhLCAweGJhMjViNTQ1LCAweGVlNmIwNWYyLCAweDA1ZTdlNWQwLAorCTB4OWZkNWQ2ZWYsIDB4YWU5OTc0YmIsIDB4ZmJhYWY2ZmMsIDB4MTZiN2U1NzQsIDB4NjdlNWQzYWYsIDB4ZWFlYmQ3ZmIsCisJMHg1MWFiMzJkZiwgMHgyYmVjMmU1NywgMHhlNTEzYThiOSwgMHg1NGEyZmZhYSwgMHgzNmRmMmJkMCwgMHg5NTQ3YTAxMywKKwkweDM4N2U1NWRlLCAweGU5ODI5ZDU5LCAweGE2MGY2YWU5LCAweDI5NGY4MGNiLCAweGIzNzY5YmZmLCAweGRlNzFiMDM0LAorCTB4MmFlZmMwNDUsIDB4NTVjODRlOWMsIDB4NDY0ZmMwNjksIDB4ZDNjMjM3YmEsIDB4NjdmNGRmNDgsIDB4NDg3ZGFjNzAsCisJMHg1MjA1Y2I0ZCwgMHg4N2FlNzIwMCwgMHhmN2VhY2ZlZiwgMHgxMjBlNWM3MywgMHg3MmQzMWNiMiwgMHhmOTZkZjE4NSwKKwkweGM0YzlkNGY2LCAweGM4ZjBmOTA1LCAweGZkZmY0NzJhLCAweGQ3MDExNjkyLCAweDFlOGI0MDQxLCAweGQ0YTM3ODA4LAorCTB4NzBlYmMzYWEsIDB4ZjZiYjNjZGQsIDB4MjU3ZTM4OGIsIDB4MDA3OGVlZjAsIDB4MDEzMmMxNTUsIDB4MzA3YzIxZjgsCisJMHgzMDMxYzZlZCwgMHhjYzcyZGYxZiwgMHhmZGM0MGRiNywgMHg3ZjNhYWJiNywgMHhjMDEyODdjMCwgMHg5M2QzMDBhZiwKKwkweDNkMzBiM2Q1LCAweGY0YzdlZDVlLCAweDRjNjJlYWMzLCAweGMyYWVhZmRmLCAweDI5N2FiM2I0LCAweDgzYWI0N2E2LAorCTB4N2FhNWZlOTgsIDB4NTRlZmE2MGQsIDB4NTZmYTYyZDcsIDB4N2ZhNjNkNzUsIDB4ZGE2MTBlYWUsIDB4NTRjM2VkNWQsCisJMHgzOTVlZGJhNSwgMHg0YWY1Yzg5OSwgMHgxZGQzZmZhZSwgMHhmOTY3ZjMwMiwgMHg3YmZhNDQ1YSwgMHgzN2EzZjIwNywKKwkweGFjZjFmODA1LCAweGEwOTE4YmUzLCAweGNiN2Q5ZjM3LCAweGVmMmY0MDRjLCAweDdhNDY1ZTBmLCAweGM0YWUxN2U4LAorCTB4NjE0NTdhODcsIDB4YWM4NzBhODgsIDB4MWI1NmU1YmUsIDB4NDRkNTkzYzMsIDB4MWI5NTA5ZjIsIDB4YTRmYzVkZjcsCisJMHhjYzY4ZmU3NywgMHhkYTAxMjQ0YiwgMHg5ZDMzYmM4NywgMHg0MTFkZmEzMSwgMHhjM2U3NWYxMCwgMHhjNjQ1ZjExMywKKwkweDcxZjE0MGRlLCAweGU1YmZkMWZjLCAweGY4ZTdiZjQwLCAweDI4M2I2NTNlLCAweGMyNDk3ZWUyLCAweDVmMDE3ODRmLAorCTB4ZmVlMWI4MWEsIDB4ZTVjMWQ5MTMsIDB4ZjdlMDc5ZjIsIDB4N2UxNTQwZjEsIDB4YTY4NDY5MWQsIDB4ZDIzNzA0MTMsCisJMHgzMzU2ZDlkZiwgMHhlZDhlMDA5MSwgMHhmZGExMTBmNiwgMHg4NGY0M2Q5YywgMHhjNWJiZjYwYiwgMHg4N2Y3MjYyOSwKKwkweGE2YTBlMDMxLCAweDZlZTkyZDE1LCAweDY4OWY3Njg3LCAweGQ2Y2ZlN2QzLCAweDI4MmRmOTBhLCAweDM3NzEzZDM3LAorCTB4NzJiYTAxOGQsIDB4MDExYzNmYmIsIDB4NTRjMTRmZjgsIDB4OGE3MTY3ZWQsIDB4MDA3MGZlZTIsIDB4NDVmMThmYzIsCisJMHgyOWQyM2M3MywgMHhkZWIwZGJiNSwgMHhmZDFlN2IzZiwgMHg0NzlkMTNmNSwgMHhiNjgwZjkyYiwgMHhmODY0NWI0NywKKwkweDNlOTFlZGY5LCAweDUzM2U5NmY4LCAweGVkNGYwMDBhLCAweDlmYjAxN2YyLCAweGVmYmZlOGRiLCAweDEyYmY0MTg2LAorCTB4MDM3ZWQ1ZTYsIDB4ZmNkMDYyMmQsIDB4YWNkZWY4MjMsIDB4ZjNiNjhmMWIsIDB4YjQzMTM2YTgsIDB4MjU1ZTlmZWIsCisJMHgyN2E1NWM3MiwgMHgwYmZlZGEyYSwgMHhjZTNiNDAzYSwgMHhmZGNiZDZlYSwgMHhkMDNlNWQ3OCwgMHhlZGQ2ZWE5NiwKKwkweGU1MGJmMDAzLCAweDQ4MmM1MjdiLCAweDljZTUyZjQwLCAweGM3MjQ3YTdhLCAweGVmY2U4MTFhLCAweGY0NjFlMDg4LAorCTB4MTU3YWIwMjYsIDB4ZWZjNTRlOTYsIDB4MDBlYzMyNDEsIDB4YWU3ZTYwM2QsIDB4NWI5ZTZmNGEsIDB4Zjk3MmE1ZGUsCisJMHhlNGM4N2ZkNCwgMHg5YWZmMjg3ZSwgMHhkYTI3MmFjZSwgMHhjNGMwOTUxZiwgMHg3ODBiZjM0NCwgMHhkOTZiN2U2ZSwKKwkweGE3Nzc5MDc0LCAweDVlMWY2YzRjLCAweDYwNWMwYTQ4LCAweGRhOTMxNDk0LCAweDNlNDNkMDFjLCAweGEwN2NhNjI2LAorCTB4ZmZjOThmZmIsIDB4ZWM2OTY1NzYsIDB4MDUyNjExODEsIDB4OGQ2MGIzZTcsIDB4ZmFhNDFmN2UsIDB4NTQ1ZjJlOTMsCisJMHg5MjE3Y2ZhZiwgMHhjZTgwOTIxYiwgMHgxMjY0ZWIwYiwgMHhmNTFmODAxMiwgMHhjNjI2ODllNSwgMHg2YWE0NDUwZiwKKwkweDJiMGZlYzE1LCAweGRmMzEzZGI4LCAweDc0YzFhNDRkLCAweDFlYmIxNTdlLCAweGU3NDc5OWNiLCAweGM5ODliOTcxLAorCTB4MmViZWQ1NmYsIDB4MmZmMzYwNDksIDB4N2M1NDY5NmQsIDB4ZDY4M2ZjYjQsIDB4NDE1YzlmYWMsIDB4MTU2ODdkYTAsCisJMHgzYjgyMTlmOCwgMHg0ZjI2ZWYwNCwgMHhkMGZkZmM1ZiwgMHhhYmU3MWJmOSwgMHhlYzdkMWZlZSwgMHg4YThmM2U3YywKKwkweDE0MmY4MmNkLCAweDZmMTkxZjYzLCAweDEzZmVmODEyLCAweDAzNWUzODQ0LCAweDk5ZThkNmViLCAweGE4Mzg3MzM3LAorCTB4ZjI4Njc5ZjksIDB4ZWZmZTQzMGEsIDB4YTI0NGI3YTYsIDB4ODIyM2I3YTMsIDB4NDBkMzY2ZmYsIDB4NWZhMDVmNDYsCisJMHhmMTQ0NTIwOSwgMHhhN2ZkMjNmZiwgMHg5ZTdmZTlmNCwgMHhiMTNmZGM2OSwgMHhmZmI0MjFmZiwgMHgxNWZmNWQxYywKKwkweDQ3ZmVkNGZmLCAweGRkZmY5OWY0LCAweGQ4YWZmYWIxLCAweDkwNjc3NWI1LCAweGU3ZDI5YmNhLCAweGJhMTE3NjFlLAorCTB4NmE5MjljZmYsIDB4ZmYxNGJjOTMsIDB4YmE1NjliZTUsIDB4NGE0ZTBlODAsIDB4ZjNkMDE3NDEsIDB4MWY5ODkwYTksCisJMHgzZjU3NjE4YSwgMHgzZTBmNGJkNywgMHgwZjc2MDA4NywgMHgzZmZiNGFmYywgMHgzMzAzZjRmZCwgMHg2MmY5N2Y2MCwKKwkweDdiNDZlYzkzLCAweDZjMzliMzY2LCAweGQ5NWFmY2E2LCAweDhjOWQzMjVhLCAweDk2MzFmY2M1LCAweDA4ODlmZDVmLAorCTB4N2QzZDM2ZjksIDB4NzBmNTNlOTYsIDB4MjhjN2Y4MTIsIDB4M2Y3ZDcwYTUsIDB4NjU1MmZhOGMsIDB4YjA3OTQ3ZDMsCisJMHgwNDQ4MDRmZiwgMHgwZWQ4Y2NmOSwgMHg4MDk3M2ZjNiwgMHgxMjllNzFmMiwgMHhjZTljYjdkNywgMHgwMGYwZjUxMywKKwkweGY1YTA0Yjg3LCAweGYwNDQ0ZjgxLCAweGU2NGU5MjRkLCAweDJmZDQzNGE3LCAweGM4NGY3YWU2LCAweDRlM2M0Y2U0LAorCTB4NmZmMjNjNTUsIDB4NWU0MGRmZTQsIDB4MjEyMGYwYWEsIDB4YmI4OGY3YTYsIDB4NzYwYjFiMWUsIDB4N2ZkMzU3NmIsCisJMHg5YzBkMDRiOCwgMHhkYjNiM2U1NCwgMHhlN2YxZTBiMiwgMHhlM2NiZmQzZCwgMHg0NTg3NmU2ZSwgMHg5ZGIwODVkYiwKKwkweDZiZWI4ZGE3LCAweDk3MmQyY2VkLCAweDYzZjAyZWMzLCAweGRlY2EzNzk2LCAweGJlNWNmZDIwLCAweDFmMjc4OWY1LAorCTB4NmRmMjNiMDUsIDB4ZGE2MmY3YjMsIDB4OTdkNmQ5N2YsIDB4ZTY4MTNjZmUsIDB4ODljOWI2Y2IsIDB4MWMzMmQ5ZDMsCisJMHgyZjE0NTI0MiwgMHg2OTZmZmEwMSwgMHhhNTBmMTQ2NiwgMHhmMTQ5N2ZiZiwgMHhlZmRmNjE4YywgMHhhM2UyODg0ZCwKKwkweDg1N2VkYjZjLCAweDhmMGJlOThjLCAweDk1ZmIyZDI5LCAweGJjMGM0NzRlLCAweDAzY2IxY2I0LCAweGY1ZGM0YWJkLAorCTB4M2Y3ODAyOGQsIDB4YzkyMDRmYjUsIDB4ZDllMDMxZTksIDB4MDdlYTEyZjgsIDB4MjNjNDI3MDAsIDB4ZGUyZjUzYzcsCisJMHgxNDAzZjUwYywgMHg1NWNmMjAyZiwgMHg5N2NiMTkzYywgMHhmZDAzNzk3MywgMHgzZDIzNDY3OSwgMHhmODNjZmIzZiwKKwkweDdiMzFkZjdkLCAweGNmYzVmZDYxLCAweDc1ODJlOWRlLCAweDE4YWE5MDljLCAweDMyYjYzZjVkLCAweDJkYzc0N2M5LAorCTB4NmU0OTgzOTYsIDB4ZTJmN2Q5NGMsIDB4N2E0MzNmMGQsIDB4NjdmZDdhMmIsIDB4ZjM1ZWNjNDksIDB4NmY3MDlhYTUsCisJMHhmYWMyYTYwYSwgMHg4Y2RjMzUxNiwgMHg3ZTI0MmJlYiwgMHhjN2UyYmJhNCwgMHg4ZjkwMDJjNCwgMHg3ZjI0NGI5ZiwKKwkweGI4YmUwYzViLCAweDcxN2M2NDU4LCAweGI0NTUyMzYyLCAweGQwNGVmYWU4LCAweGEwZmQwNzZkLCAweDZkMGM1YmZmLAorCTB4MWRjNTdmNDIsIDB4NjdmZmY4MDQsIDB4MmM5YWZmYWEsIDB4MTZlN2ZjYzYsIDB4NGRhZmE3ODYsIDB4YjU0ZjllYWEsCisJMHgzNmJkMmQzYywgMHhmYzAwZWVhZCwgMHg0YmVhMWU5YywgMHg4MDU3M2YwNiwgMHgwZjBlNDE0OCwgMHhhZmRhM2JlMSwKKwkweDY0YjRmYWY4LCAweDkxZTIxZjg2LCAweGFhM2I3ODcyLCAweGVmODE0YzA3LCAweGY2NDNiZjUwLCAweGRhZWFjNzU5LAorCTB4YTNkMmVmOTEsIDB4ZTNlMTJmZTMsIDB4NjBkYjc5ZDMsIDB4NDQ5MTNlZmYsIDB4YWM2MjViOGEsIDB4ZjJhOGE2NmYsCisJMHgzNWM3ZGQzZCwgMHg2ZmUxYTVmNCwgMHhmNzRkZWZjNiwgMHhmOTU2ZmUzMSwgMHgxZjMzMzQzZCwgMHg4MzdiM2ZjYSwKKwkweDgzYjQwZmYxLCAweDJiY2U5MWZkLCAweGZiZTU4YzljLCAweDFlNTAxMjZmLCAweDE2Mzg0OTk4LCAweDljYzkzNzVmLAorCTB4MmFlNWY1YWYsIDB4NGI3OWQwOWQsIDB4NWU4NjljNDIsIDB4ODQwNGZmYTAsIDB4MGFiN2ZhM2YsIDB4OGQzYjY4ZWIsCisJMHg3OGMwMGNiYywgMHhhOWZkYmVhZSwgMHhmOWM0NWI3YywgMHhmOWVhMjNkZiwgMHhiZTMwMzQ5ZiwgMHgwYWJmNWZlZiwKKwkweDJlNTczZWUyLCAweDE0N2M5ZTg3LCAweDY3ZjI5NWY4LCAweDJhZmMwM2QwLCAweGNmYmFjMDE3LCAweGYzZmMxZjM0LAorCTB4OWM5ZjI5NGYsIDB4NTRmOTUxNjksIDB4N2M4ZDNmMmYsIDB4NWM3ZGJjNWEsIDB4YjMzZDNlNGMsIDB4OWYzNjIzMzYsCisJMHhmOTMxZWZkMiwgMHhkM2UzMmQ3NCwgMHg1M2YyNWJmZiwgMHhjMDNlNWY4NSwgMHhmYzI4ZjJlZiwgMHgxZmQ4Nzk1NCwKKwkweGYwZjI4ZDFjLCAweGUxMDc5MzIzLCAweGY0ODc5NDY5LCAweGQzOTIwZGU3LCAweGJhNTRmZTk3LCAweGY0YWRlOTUzLAorCTB4NDA4YjhhOTksIDB4YTVkMmY0ZWUsIDB4NzRiZDc3NGEsIDB4MWY1ZGQyYTksIDB4N2UwZTg4ZmYsIDB4YTAwNGYyYzYsCisJMHgwNTI3NGEwNSwgMHgwZGU0OGZiYiwgMHg2ZjJjZjhhNiwgMHhiNDQwZTc2NywgMHhhNzkwY2JkZCwgMHgzNmUxZjI3MCwKKwkweDFlNWY2YTQ2LCAweDg3Y2RhODljLCAweDQzMTZmOTBjLCAweDVmMjE5ZjdkLCAweDM3ZWZhODYwLCAweGY1MGNhYmU0LAorCTB4ZDAzZmNjNDMsIDB4NDgyMTUwNzYsIDB4N2Q1ZDYxMDcsIDB4M2EwOTM5NzksIDB4NTdiNzJmYzEsIDB4ODdhZmZiNDQsCisJMHg2ZDE1NzljZSwgMHgxZTljZDNkZiwgMHhiMDc5NTIwYSwgMHhlYWVjY2FkMiwgMHgxNTY1NDBjOCwgMHg3NzFlYWZjOCwKKwkweDc5MDA5NWM0LCAweDdiNmJkMzJiLCAweDc4YWUyMjBhLCAweGFjNzg3ZThkLCAweGRiZjk0NDVkLCAweDVhZjkyMjE5LAorCTB4MWY5NDQ1N2YsIDB4OWQ3ZjEwNmEsIDB4ZTY3MmJmYTQsIDB4M2EyNjljNjcsIDB4M2Q4Mjk2ZDIsIDB4YzE3YTJiNTksCisJMHhlY2I4NWQ0NCwgMHgzY2I4MTcxNiwgMHg1Zjg3ZGE3YSwgMHg1ZjdlOGIzZiwgMHhlM2M0NTg3NCwgMHg2YjliMWU4YiwKKwkweDA0OGJjYzJjLCAweGM2YWE1MjdkLCAweDgyNDkzODJlLCAweDdlMDg5ZGJmLCAweDFmNjY3NmMzLCAweGQwNmI1YzJjLAorCTB4YTQ1YWM4MmIsIDB4MTJjNzQyOGIsIDB4ZDUyMmU0MDUsIDB4ZmJkN2RmZTcsIDB4OTc3ZDE5NGQsIDB4MWI4YWZlZjIsCisJMHg3YjZhZTVmNCwgMHgzYjAyMzkzOCwgMHg1ZjQ5YjRhZCwgMHhjZTc2ZTdlZSwgMHg2N2JkMmE5MywgMHgxNzk0MGM5MCwKKwkweDdkODBjMDYwLCAweDM0ZWJlNWNkLCAweGIzZjVmNDcxLCAweDBlN2JmYzI4LCAweGU1ZTgwNDg5LCAweGYwODhiYjZjLAorCTB4Y2VjY2RiM2YsIDB4MjA3MDQ5MDksIDB4ODkyNTRkZjIsIDB4ZTE1MzVjYTAsIDB4YTE3YzA1ZDQsIDB4YmE3NzJmZjQsCisJMHhlNzM1ZmM3NiwgMHg3Y2E1NWExZSwgMHg3ZjYzYmJlNywgMHg5ZGFlZDM0NywgMHgwM2RjOGY2ZiwgMHhhNjZmNWRmOSwKKwkweGQ2ZmE0YmJkLCAweDhhY2ZiMjlmLCAweDdkOWVkOWZlLCAweGU5NGYzYzRlLCAweGRhNmFmYmQ5LCAweDZkZGY5MDNkLAorCTB4N2IzY2MyZjYsIDB4MTYzOTdkZjYsIDB4Yjk2N2E3ZTgsIDB4NTZlNDE4YjksIDB4N2Y4YTUwY2YsIDB4ZmRlY2Q2OWEsCisJMHhlZTI3NmM3MiwgMHg2ZjEwMmI5MywgMHhkMzBhOGJhZiwgMHg3NmZmZGE3MywgMHg5NDg0NDg1NCwgMHhmZmY2MGFhZSwKKwkweDMzZjQ3NjdkLCAweGEyYjc5ZTA0LCAweGVmNjdhMDdmLCAweGM3N2UzOTk3LCAweDk1M2Q2ZjNmLCAweGM3YTRkY2ZjLAorCTB4ODc2ZDY2NDksIDB4N2YzM2M1ZjksIDB4ZjhjZjYwNzMsIDB4YjljMTk2MjcsIDB4NjU3ZWViNmYsIDB4ZjI5ZjJkMDEsCisJMHg0MTYzMzdjMiwgMHg2NzZjZjYxZSwgMHhkY2I3NGQ3YSwgMHgwNWNlMDFiOSwgMHhlZWYzNTJmZSwgMHhiOWMyOTkzMiwKKwkweDEwNjI5ODFiLCAweDg2MmJiOTk1LCAweDYyM2EwZTRjLCAweGY0MWJlNWMxLCAweDNjMjg1YzdiLCAweDA2N2ZmZDNlLAorCTB4Zjc5ZTAyMWUsIDB4NDMzYmI3OTUsIDB4ZmRkNjAxMTYsIDB4NDE3N2QxZDUsIDB4MjMzM2VjMGUsIDB4M2RlYmFhNWQsCisJMHhmNTBjYjJkMywgMHgzYmFkZjM4ZSwgMHhmNWY2NjI0MSwgMHgwYjc1OWNmZiwgMHg3NzU5MGJlMSwgMHg4ZGFmZjQ4NiwKKwkweDA3YTI1ZGVmLCAweDgzZTQ2MmYxLCAweGY3YmU3NGJlLCAweDc1NmZjYzJlLCAweDE3YmU3MTdhLCAweGZmMzNlZjQ4LAorCTB4ODNmZmQ3YzUsIDB4ZTI5ZGJlZjEsIDB4NzVmZTc1ZGQsIDB4YWY4YmZkNTcsIDB4MWZiYzdmYmIsIDB4ZWVmMWMzOWUsCisJMHhjMGY1NzM4NiwgMHhmY2UwZGYwYiwgMHhhYjljYTg3ZSwgMHhmN2U3MTdmZCwgMHhlYWFmZDZmZSwgMHg3OTMwN2ZlNywKKwkweGY1YTBjOGRlLCAweDAzYWQ0OWYzLCAweDJhNmI4YjE0LCAweGEwY2UxYzBlLCAweDcyMTg3ZmE1LCAweDNiZTYxZTMwLAorCTB4MThjMzlmOTksIDB4MTI1ZmI3ZTcsIDB4YzE2NGZkYjAsIDB4ODkxZDc2ODQsIDB4Yzc1ZGI4MTcsIDB4NWNjMWExZWMsCisJMHhhNGJjMTg3ZiwgMHhjMTkwZjUxMCwgMHg3YTY0MWU0MywgMHg4M2E5ZTQ4MywgMHhhNDNmYmU3MywgMHhjYzYyZjAyZCwKKwkweGNiN2NjOTAyLCAweDk1Zjc3OTBmLCAweDBiYjdhZjNjLCAweDFmMTAyNzdmLCAweDRlMGU0MTFjLCAweGEwNDNmN2ZiLAorCTB4MjIxOTBlOWYsIDB4NTM0YWZlYTIsIDB4NzQ1ZjViZDQsIDB4ZTVlZmIzZTUsIDB4Yjk3ZWNlOGEsIDB4NjdiN2EzYzYsCisJMHg3NmY1MTJmMiwgMHhkZmRlNTRjZiwgMHgzZmU2YzIzNCwgMHg0Mjg0MjFjZCwgMHg4NzkzMGUxNCwgMHhmYzExMjZmZSwKKwkweDk2MmY5MzljLCAweDc5ZjM0MDg5LCAweGVjMDJiZmM0LCAweDdkMGVhOTg0LCAweDE5YzE4ZjdmLCAweDU4MGZjNjhjLAorCTB4MTZiYjY5NjQsIDB4YWYxNmRmZmMsIDB4ZDI1ZGZkODAsIDB4NjI3OTQyNjUsIDB4MGU5MDE2YzksIDB4OTg0YmQ1NDYsCisJMHgxZWU0ZGQ3ZiwgMHg3MTllNzAwNywgMHg3NzMzYWVjNSwgMHhmYTk3ZjAxMywgMHg1MjhmMTYxNCwgMHg1ZmRlZmNjMCwKKwkweDQ0ZGRmNzdmLCAweGYwZTJlMzg4LCAweGFlZmZhMjJiLCAweDAzNmVmZjAzLCAweDdhZThkYjA5LCAweDE4MjQ0OTE3LAorCTB4NGVmZTAwOTcsIDB4ZjNhZmJjODEsIDB4ZjBmM2VhNzcsIDB4NjhhNGUzZjMsIDB4ZGZhYmU3M2YsIDB4YjNmZTFkMWYsCisJMHhlZTk0NWRkMywgMHhkYmIwYTdkZiwgMHgxYzA4ZTkwZCwgMHg1M2RhZDI1ZSwgMHhlMGNlZDZmZiwgMHg4NDg1NzgxNSwKKwkweDZlZjNiMTg2LCAweDJlNzM0MGIxLCAweGVjY2NhOTc0LCAweGQ5N2Y1ZGVlLCAweGNjZjYwNTllLCAweDcxZDE5ZWE0LAorCTB4YTA0NzFmOGMsIDB4ZmFlMDE5N2UsIDB4ODllMjU5ZTUsIDB4MWY4MDNhZjMsIDB4NzllMWM3ODcsIDB4MTlkMTIxZDcsCisJMHgwYjZiZGUyYiwgMHg4MTllYjNiNywgMHhmNjlhNTA3MywgMHgxMTVhOTEzNCwgMHg0MTEyN2RmNCwgMHhjOWIwNWRmZiwKKwkweDg4YzUzNjQyLCAweDRkOTQ0ODNiLCAweGUzOWM1Y2ZjLCAweDM5ODhmZThkLCAweGUzNjc4N2UwLCAweGUzNGRhMjJmLAorCTB4OWFlYjc4YjQsIDB4ZGIxYTRhN2UsIDB4ZjNmMDBmMTcsIDB4ZTIxY2U2YmUsIDB4ZDgyZjg1MWYsIDB4MmRkZjAwNzUsCisJMHg4MmJjY2VkNiwgMHg5MjNiN2MxOCwgMHg4MWM2NmZjMywgMHhiZTllZDBhZiwgMHgwNGQxYmRhYywgMHg5MzU5N2U3YywKKwkweDk2OWU3NzQ5LCAweDNkZmQ3MzI2LCAweGJjYzI2NDkzLCAweDNhYjAxYzY2LCAweDg3MmYwMWIzLCAweGQ5YzQyZjQ0LAorCTB4NTEzZmRhMDUsIDB4ODNjZTMxZmMsIDB4ZmU4NGYwOGMsIDB4OWI3YThmYzEsIDB4ZWQ3ODQ2ZWMsIDB4MDAxNjViOTEsCisJMHg2YzdjZjc1YywgMHhlZDY3NjAyMSwgMHg2MmNiNmE1NiwgMHgwYTRmZjNjZCwgMHhkMjIyZTc5YiwgMHhmNGQ4ZTc3MiwKKwkweDRlZjgzZDdmLCAweDI3ODQ3MWVhLCAweDQ0ZDJiZDgzLCAweGQyZmJhZjkwLCAweDNlM2E0MTFmLCAweDQwODQ5OWJiLAorCTB4MDM3ZDgzMWUsIDB4MzM2Y2UxNzIsIDB4ODI4MGZkYzEsIDB4ZDNiMDQxZTQsIDB4YTU1ZmJmMjgsIDB4NjkyZmRmYjUsCisJMHhlYzBjZjZkYiwgMHg4MmVkOTUyMywgMHg5NWNiNWMxYiwgMHhmZTAyYTc1MiwgMHhiYzViNDBiOSwgMHhjMzNiNzIwOCwKKwkweGJhMjFjNmEzLCAweGUxYTRkY2M3LCAweDA5NjRkYjhiLCAweGMyNzA3YmUxLCAweGRjNjE1YjllLCAweDAyMTRiYjRmLAorCTB4YzVlZjlhZmIsIDB4ZmVlNDBiODgsIDB4Yzg1OWVkYTcsIDB4ZWJhZGZkMDcsIDB4ZGFlNGQ1ZjcsIDB4YzNmNDEyYTksCisJMHgxZTkxOWFlNCwgMHg3NGRiMzc0NiwgMHhmZjQ0MmJmOSwgMHgxOWFmZTAyMCwgMHhkZTI1Y2VlNiwgMHg5NmZiZjgxOCwKKwkweGNiMDVkOWQzLCAweDY3ZmZkMGI3LCAweDU1MGRlZGYyLCAweDAyYzVmOWJlLCAweDJjYmQxZjBkLCAweDIzNTU3ZGIzLAorCTB4Yzk2MzkyZGYsIDB4Mjc4MmM1YjcsIDB4NzhiZWUwMTksIDB4YzA2NGYwZWYsIDB4ZjJjM2UyZWIsIDB4NmRmMjU4YzAsCisJMHhkZjNiMzU2YiwgMHg4ZmM3OGU3YSwgMHhmOTUyYjRmNiwgMHg3YzhkMjNmNiwgMHgyZGYyYTU2YiwgMHg4YjdmZjljNiwKKwkweGNmNWZmYWFjLCAweGZmNDJkZjIzLCAweDE1YjdmYzNkLCAweGY1OGM1YmU0LCAweDUzZjBlNDFlLCAweGY2ZDhkYmU1LAorCTB4YzZkZjI4NjMsIDB4NzE3NDlhYjYsIDB4ZGNjYmNmOTYsIDB4N2NhZmQ5OWYsIDB4MDRkZTA2MTMsIDB4ZDkyMWQ0ZmEsCisJMHgzZjQxOGY2YiwgMHhmNmZlYjk1YiwgMHg4MTlmOGYxYywgMHg3ZGNlNDA3MSwgMHhkY2U1MDNmNSwgMHhlNzJhMTczYiwKKwkweGFjZTA5YmZlLCAweDNiYzViOWNhLCAweGY2OWZjNjA4LCAweGU3MjY0M2E1LCAweDcyYTZlZjE2LCAweDY0N2EwMDRlLAorCTB4NWVmMTZlNzIsIDB4MDYzOGZjYzIsIDB4OGZhYTM2ZjksIDB4YmY1ODIzN2MsIDB4MDdkYWNjMzIsIDB4YjkxZmQyZGEsCisJMHhlOTk3ZjY4ZCwgMHg1YTE2YmQ5MywgMHhlZjJhMzMzZiwgMHhkZGU1NjljNiwgMHhiYmM5ZmQ1NywgMHhlZjI2MTc0MywKKwkweDQ3Nzk3MDc2LCAweDkwMzBkOGU1LCAweGYwZmE0NmFmLCAweDc0ZTNlYmI2LCAweGQxM2Y4Y2Y3LCAweDk3ZTA3YmZjLAorCTB4NjczYzQ1NTcsIDB4Y2VjNGRkN2EsIDB4ZmUzNGZlMDUsIDB4NTdkMDM2NDQsIDB4MzNlNmMyODEsIDB4ZDdmNDYxNDIsCisJMHhmZWM0MWQ1ZCwgMHhkNmM4YmNhNywgMHhmMTYwZTE1NywgMHg0Y2FkOTViYiwgMHgxNjZjYWMzZiwgMHg2YmZhMWU0MiwKKwkweGYwYWY4NGRlLCAweGFmNjRhOGJjLCAweDdlNjk5MjQwLCAweDI3ZDU5OWE2LCAweDI0ZTdhOTRmLCAweDg2ODY3YTY0LAorCTB4OTZlNjE2MWUsIDB4YTE3NzdmYTEsIDB4YmZlMDJjNDQsIDB4OWRlNDczMmQsIDB4MmNiNjNkMDIsIDB4Y2I3YmY5OTcsCisJMHhjMzkyZjdmOCwgMHhkZmMwYWI5ZCwgMHhjMDVlYjI1OSwgMHhlZTM1MzI3MywgMHhlY2JmOGQ1MCwgMHhiZWRlNWU3MywKKwkweGM2ODFmZDBjLCAweDNjMTlmMzczLCAweDMzYzY2NjRlLCAweGM2MzFhODQyLCAweDY2ZDk3ZmI5LCAweGE3MWE3ZTdkLAorCTB4Mjc2Mjk5ZTcsIDB4MjZiYzhiYzIsIDB4ZTBjNTM3N2EsIDB4MmY1ZWI1MWYsIDB4Mzg3MTBlOWMsIDB4OWZiODg5MzUsCisJMHhjMjg5YzJmNiwgMHgxN2RlOTNjZCwgMHhkM2QzMTQ0ZSwgMHg3MGEyOTIzMywgMHhhZTk1NzkyOSwgMHhmNWZmYmIzNywKKwkweGFlMzM3MGFhLCAweDk2NzdmNTViLCAweDgzZmE3ZWYxLCAweDNlZTcwYTgzLCAweDI3NzBlN2ViLCAweGQyNzI4NDI0LAorCTB4OTVhYjhmMDgsIDB4MTY2ODNmNWUsIDB4YmE1MGE3YzQsIDB4ZmMxMzM5NDEsIDB4MGQ3MTg4YTMsIDB4ZDYyZTkzMDUsCisJMHg4ZWI4NDNkZCwgMHhlZDU2NGZkMywgMHg4YzcwMjlhNCwgMHg3ZGUyMTMzZCwgMHhmZWFkZGNlMSwgMHg2ZTIxOTc4ZSwKKwkweDllNWJkYzZmLCAweGFmNGVkODRjLCAweGMzZjY2MDk4LCAweDZiMTZkYmY5LCAweDRhYTBlNTA0LCAweDg3NDA4ZDg3LAorCTB4ZjBmN2FlMTQsIDB4YWEwY2Y2N2UsIDB4NjE3NjhjOWEsIDB4M2QwNmUwOWIsIDB4MjJiNjEwMjQsIDB4YWUxNDAzNWMsCisJMHgyMDI0MmY3MCwgMHgyODA2ZmMzMSwgMHgxZGZmMDIzZCwgMHg4MzA1ZmY1YywgMHgwM2MxNWVlMywgMHg3NTNjODBmZSwKKwkweGQwYmMwMmJmLCAweDBjZWQ1OWZhLCAweDgwOTA4MTJmLCAweDExMjZjOTc4LCAweGQ2NTdiYmY0LCAweGMwMzBkZTBiLAorCTB4ZTExMWFkYWYsIDB4ZmE2N2NhYTcsIDB4NDllMmQwZTMsIDB4MmM1MmJmNDMsIDB4OWE0YWM1ZmEsIDB4ZDc4Y2IyZmQsCisJMHhmZGFlNjE5YiwgMHg4Y2YzZDAzMywgMHg4OGQyNjRhNywgMHg3ZGZmYTZlMCwgMHgyNzlmM2QxZiwgMHhhNzg4YzNmZSwKKwkweGI2YmMzOWM3LCAweDAwMWQzYzAyLCAweGJiZDMwOGI3LCAweDNkZTE1ZmMyLCAweDIwM2NiNTE1LCAweDljZjA3NTA1LAorCTB4ZWZiOWU4ZjIsIDB4MTUzOGQ3ODUsIDB4MjBjNzQwNWUsIDB4ODllN2RhZGYsIDB4MTM2YzJmOTAsIDB4YmVmNDgwYzgsCisJMHgzMDczODVlYiwgMHhlYzk3YmYyZCwgMHg3ZmZhYzYzZCwgMHgxODkyZjA0YywgMHhiYTYwYmVlYiwgMHg4YjllODdlZSwKKwkweDdmODJkZDI5LCAweDM2YmEzZmJkLCAweGUxNTFhOWMyLCAweGU3YTcyNmZiLCAweGFmMjM1OTNmLCAweGVmM2QwMTY0LAorCTB4NDljZjkwMTUsIDB4M2NlZWJjN2IsIDB4ZjRjMmJmNmIsIDB4NGE1NjJkODgsIDB4OTFkZDc0ZjcsIDB4YTM3N2IyYzMsCisJMHhkODNjYWZhNywgMHhmNjBiZTFjZSwgMHhkMDFlZjY4MywgMHg4ODEwYjBhNSwgMHhjMTZjZGMwZiwgMHhjNzljMmYzOCwKKwkweDZhOWZhNjMwLCAweDJiNTZmM2U1LCAweDc2NTM3ODE5LCAweDc5ODdmZGZmLCAweDQ3ZTlmZGZmLCAweDhjMGM3ZTZhLAorCTB4NmRjZDcxMDcsIDB4ZDE1MWJjNzQsIDB4ODNmYjhjZjEsIDB4NmY5ZmY3NmEsIDB4Mzk3MmFmNWQsIDB4NGJhZWY3ZjcsCisJMHhjNjg3ZTcxZCwgMHgwNzQ4MDRjMSwgMHg4NzhkNTVlMiwgMHhjN2Y4MjIzOSwgMHhlNWNmYTBjOCwgMHhhZTNlOTIwYiwKKwkweGQ2ZTVjMjJjLCAweDFmZmZkYzNmLCAweDkyN2ZhZmJmLCAweDRlN2JjNmUyLCAweGVmZDViYTc3LCAweDAyY2ZhNDZlLAorCTB4NDFlN2UxMzcsIDB4N2Q4NGRmMTMsIDB4M2IxZjUzZmYsIDB4OTEzNmNhZjcsIDB4ZmY2MTEzMjMsIDB4YTAxMzJjOTgsCisJMHg5MTVmNGZhYiwgMHhlOWY5NmZkMSwgMHg3OTY3MTY1NCwgMHgyNTA3YWJmZCwgMHhjZjVjZGQ3MCwgMHhmNWM4YTE2MiwKKwkweGIzYjQwNGUzLCAweGM3YWU4NzVlLCAweDIxNmUxZTgzLCAweGJmMDg5MWJlLCAweDk1NGZiODJjLCAweGM1M2I1NGQxLAorCTB4NzMzYWY5NDMsIDB4NTIwNmE4NzMsIDB4ZTI0ODk0ZWYsIDB4OTM2ZjAwOWYsIDB4ZWI3ODAyNDQsIDB4ZTI5ODBkZjAsCisJMHgzZjNiZjlhMCwgMHgzMmUwMTkyMiwgMHhiNjAxZmFhMywgMHgwNjQ0M2NjZiwgMHhiZTA5YmQ0MiwgMHg4Y2M2Njg4MSwKKwkweDhkZWNmZDZmLCAweGM2M2NlOTFiLCAweDNkN2EyMmJmLCAweDgzY2NkZWI0LCAweGZhYTEwNzBlLCAweDEzMDZhOGY0LAorCTB4MzVlMDZiZjEsIDB4YzA2YTg0ODEsIDB4NDNmZTM0NmYsIDB4ZWYzMDhkZGYsIDB4NDBlZmFhNjIsIDB4N2I3MTdlZmMsCisJMHhmMjBiOGQ2MywgMHgwZmI2MDIwZCwgMHgyZTc5ZmQwNCwgMHhmNWFkOWViYSwgMHgwZTVkZTQ5ZiwgMHg4M2Q2ODE3MiwKKwkweGFjMGQwMjZlLCAweGYwNDlhMDVlLCAweDYxNmE0ODQyLCAweGU1MDUzYWZiLCAweDE3ODA5MzQ2LCAweDA0ODZiNmJkLAorCTB4ODZmZDYxNjIsIDB4YWRkZmI0MmMsIDB4MzY3ZGI0MGQsIDB4M2RiNDVmZWMsIDB4YzlmNGRiZjQsIDB4ZGM4MjM3MWIsCisJMHhmNmM0ZjNhMSwgMHhiNjNjZWNjZCwgMHgwMGYzYjY5MCwgMHg4MWRkMzRiZiwgMHgwODM0OTVmZCwgMHgxNDE5ZWUwNCwKKwkweGE5N2RiMzM3LCAweDBiZDkxNWY4LCAweGQ3ZmJhZGU1LCAweDlkM2I3ZWUzLCAweDBlOWE5NzhlLCAweDJhNzg1MGZiLAorCTB4MTJjOGQ3ZGUsIDB4NmQ4Zjc4ZGMsIDB4NWZjNDUwZmEsIDB4MjNmODYxMGYsIDB4MWM5ODQzODksIDB4ZGI5ZTc4MTMsCisJMHhmN2RlYWEzZCwgMHhlNDMwZjMyYiwgMHgzMmVmNDI4MywgMHhlN2VkMDA2NSwgMHhkMzAzYjk0ZiwgMHg5ZjU3NDg0ZCwKKwkweDdkYTdhMDI4LCAweGE3ZWRlMTQ4LCAweGM3OWQ3ZWYwLCAweGZkY2MxYzI5LCAweGVjZDRlOTQwLCAweGUxZTZjZDhiLAorCTB4ZGI2MTdlZDgsIDB4NWE3ZjhjMjQsIDB4ZmNmMDBhNDQsIDB4YTY3OGM2N2UsIDB4YTU3NmJlNmYsIDB4YmFmZTA0MzUsCisJMHgxMGM4ZTRkNywgMHg0YWYwN2VmOCwgMHhkZWVmN2UzMywgMHhmNzcwZTRjYSwgMHhjZmY0NGVkMCwgMHgwOTkwNjg5ZSwKKwkweDY5YTgyZmRjLCAweDljNWU1MTEwLCAweGJjZjE5NjY4LCAweDQ2NGM3YzVhLCAweDk1YjQ1ZGI5LCAweDFiMDcxZmU5LAorCTB4NDAyN2JmNTgsIDB4MzkzZjAzNmYsIDB4ZDE3Y2QzOTQsIDB4ZmJkYjgxMTYsIDB4ZjZhYjRlNGMsIDB4OWQ5YmExNjcsCisJMHhiNzcyYWJiYiwgMHhjZmJiYWY4MiwgMHg0Y2I3NTQzZSwgMHhjYTM1OTIwMSwgMHg4ZjJlMGFkYiwgMHgwMmE0YTk0YiwKKwkweGRkY2EzMzQyLCAweDc1NzczODBhLCAweGUzMWE1ZjAxLCAweDNiNTExYzgzLCAweGZjMjBlODA2LCAweGU1NzVkMjE1LAorCTB4M2IwMTMyMmIsIDB4MmJhMGY4NDYsIDB4NmE3ZGU2MGYsIDB4ZWU3ZTgwYWYsIDB4MGY4MmVkZjEsIDB4ZGY4YmJkY2UsCisJMHhmZjUwODczMiwgMHhmYjliY2QwZSwgMHhkZTVmZDgwYiwgMHg1NTA4MTMzNiwgMHhhMDc4MGUzZCwgMHgxY2Q3MmE3MiwKKwkweGU4NmZjYmY5LCAweDViYWY1M2Y3LCAweGQyODQxMjIwLCAweGJiODQzY2NkLCAweGJkOTlkZjFhLCAweDY0NzFjNTg5LAorCTB4MDQ5NzVlYmYsIDB4ZDRjOTJjZjcsIDB4OGEwNzI4MDEsIDB4ZDdlMjQ1ZWEsIDB4ODI1Mzg5YzgsIDB4YjI5ZmM2ZWYsCisJMHg4ZGFkYzFmZCwgMHg2YTU2Y2NlMywgMHgzZDdmNjEwYiwgMHhkMWYyNjY2YSwgMHhkODg2NDliMywgMHhjY2QyYjIwOCwKKwkweDBmYjUzNGU0LCAweDY0YjJmZTMwLCAweDQ1MjRiYWY3LCAweDdiMjUwNzQzLCAweGY0ODkyNWQ3LCAweDA3MWUyYWZiLAorCTB4MmJmYjAzNTEsIDB4YjBhMjU3NmQsIDB4MDlmNjRhNzEsIDB4MzhjZDQ2ZWUsIDB4YmY2YTNmNmEsIDB4NmVkNjZlY2EsCisJMHhmNjk2NWVmOCwgMHhjYzA5N2ZkNywgMHhiOWY5ZDcwZiwgMHhkOGMyZjIwMiwgMHhmYmYxOWY0ZiwgMHgzZmY3MjdlOSwKKwkweDc0MDlkNWNmLCAweDg5YWZiOTVlLCAweGZiOWNhNDE4LCAweGRhZTFmNGMxLCAweDU1MzUwMDczLCAweGRlNzIxNWUzLAorCTB4MDY5ZjExMzAsIDB4YjE3ZmI5N2UsIDB4ZGYwNjlmMTEsIDB4ZGYyOGUzYWQsIDB4ZDc1ZGZjNTMsIDB4MDJhYzg0MjYsCisJMHgxNTI5OGZlNCwgMHgwMzc3OThkOSwgMHhmZjcyNTc5ZiwgMHg3NjU0ZTU3MywgMHhmMTlhZDNiZSwgMHhmYmUwMGFmYSwKKwkweGQyMDJkOWU5LCAweDk1ZmEwOTAzLCAweGFmYTg4OTAxLCAweGI4Y2UyMDc5LCAweDJmYjU5YjI4LCAweDFmODFlZGEyLAorCTB4ZmUzM2Q3NWIsIDB4MDNjMjcyYTQsIDB4NjFiMmE0NzIsIDB4NmZkNjFlNWQsIDB4N2ZkMDNjMTIsIDB4ZDQzY2UzNmIsCisJMHg0NTczOGE0NywgMHhjNzRkZTU4MiwgMHg2ZTJhM2Y1MCwgMHg3YzA4OTYzYiwgMHgwZWI2Zjk0YywgMHg4OWNhODFmNCwKKwkweDcxYzgzNzY2LCAweGZlNTUxZjk1LCAweDA1Yzc4ZDdlLCAweDBjN2I4YjEzLCAweDAwNjdlM2M0LCAweGNiZWMwZGYzLAorCTB4NGMyYmUyZDcsIDB4MTk5YTA3YWUsIDB4MTk3MjA2M2YsIDB4NTViNmJlYmYsIDB4MDg1ZTE1ODYsIDB4OWYzZjIzN2YsCisJMHg1NWY4Y2NkOCwgMHgzY2U2ZWM3YywgMHhiNDVjYTdiOCwgMHgxY2E3YzU4OSwgMHg4MGEyOTg2YywgMHgyNDIyN2QzZSwKKwkweDk3ZDM3ZWUwLCAweDZhZGU5OWJmLCAweDgxMWFlZmU0LCAweDU0M2Y3YmVkLCAweDViZjk1NGJmLCAweDczZmE2M2U1LAorCTB4NGU1NzhjMWQsIDB4YjVlZTE0ZjksIDB4ODY3YWY5MTksIDB4M2JlN2YyZGMsIDB4N2ZhZjdjZTksIDB4Y2U4N2FlOTYsCisJMHhlZjhmY2E3NywgMHhlNDZhNzU3NiwgMHg0MTI3Y2QyNCwgMHg3MTYyNTBiZSwgMHhhOTVjYWEzYywgMHhkN2JjNTg5MCwKKwkweDYxOWY5ZTBmLCAweDdhY2QxYmZjLCAweDczNGFjOGZmLCAweDZlNmI4YjNjLCAweGNmZWU5MTkyLCAweGY4N2Q5ZmM3LAorCTB4ZjNmOTAyZWMsIDB4N2NlYWY5NDIsIDB4MmY4ZWE5ZmMsIDB4YjNmN2Q1ZWUsIDB4YjE5YmQzOTIsIDB4ZDcwYTZlYmYsCisJMHgxZmViODUzMCwgMHhiOGMwOWY5YSwgMHgzZTlmOGZiMSwgMHg1M2YwMDMzNiwgMHgzOWQyODdiNiwgMHg5M2IzNTdkMCwKKwkweDQ5Y2U0MTg0LCAweDRhYWZkYzIxLCAweGM2MWY0NTViLCAweDljZTE0YWJmLCAweDNlNWE5ZDFiLCAweDY1M2U3MTY2LAorCTB4OWU5MTM5Y2YsIDB4NDM5YmI3NGEsIDB4ZDJmYjY5ZDMsIDB4YzU4YzFmOWQsIDB4MTFlNThiYjgsIDB4M2UwYTQzOGMsCisJMHg2MGU1ZjVjZCwgMHg4M2UwNThlNywgMHgxYmM1ODk1MiwgMHgwMGMyZTUxOSwgMHhlODY3M2IwYiwgMHgwNTlmNmRkYSwKKwkweGIzMzYxM2ViLCAweDJkYTVmZDdiLCAweGNkNjZjOGI3LCAweDIyY2Q4NGI5LCAweDFjZjBmNWFiLCAweDE4ZTk0ODMwLAorCTB4ZmNjMjU1ZWUsIDB4ZDVjOWY3YjQsIDB4MmRhZWEzMzgsIDB4YjY5NDRlNGMsIDB4OTYwNzY4YzksIDB4MGRkNmRlNmUsCisJMHg2ZmE1YTM3MSwgMHgxNWRmZDE5OSwgMHhjNjA5ZmNkOCwgMHg2ZTc5NGZjMSwgMHgwMjUzZmEyYiwgMHhmY2VlYTI2ZCwKKwkweGRlYmM0ZmFjLCAweDg2NmMzMTY2LCAweDBhZDZiMzc4LCAweGY5YTNlZjNjLCAweDg5NmY5ODYzLCAweGJlN2FiNzFkLAorCTB4ZTdiMmIyYjgsIDB4NTIwY2VlZjYsIDB4ZmVmZDk2MTAsIDB4OTdjODE3MjksIDB4NWM5YjFkZDMsIDB4ZjliN2I3MTgsCisJMHhmYjY1ZTNmYiwgMHhkY2I1ZTdjNCwgMHg3OWYxYmRmNywgMHhjYTE3ZTFhNywgMHg4NjJkMTMzOCwgMHgwM2NkYzZmOCwKKwkweGYzYTQ4ZjUwLCAweDcxODgyOWNiLCAweDk3YWJkMWNlLCAweDAzN2NmZDZmLCAweDZkNzc4ZmM0LCAweGU2MDFiMzNmLAorCTB4YTdlZGZlNWIsIDB4ODg3ZTIwMWIsIDB4N2VlMmIzZWMsIDB4MDhmYTc4MTcsIDB4ZWRhYWRmYzYsIDB4N2VlMTYyN2UsCisJMHg2MTRmMmQ4ZiwgMHhkYmY3NzJkYywgMHhkNmY0MmY2NiwgMHgxYTQ0ZjdiZCwgMHg2Zjc1OGZjNCwgMHhmYzA5MmFmYiwKKwkweDRlZjY0Yjk2LCAweDkyZWViZjQzLCAweDQ5OTI1MzFkLCAweDRkNDJmZDhjLCAweDE3NDM2ZTgxLCAweGM0NmQzNzEwLAorCTB4ODNkNmMxZDcsIDB4MzFmNGU3MTgsIDB4YmZjODM3YzUsIDB4OTZjYjc4ZGUsIDB4ZWFiZjE2MGEsIDB4Y2Q5NjcxZTEsCisJMHhmYmQzZTNiMSwgMHhkZWI2NTVjNCwgMHgyMDk1ZmQ3OCwgMHhmZTk5NWJmNywgMHhjYWY4ZGU3OCwgMHg3ZjFlMjgzNywKKwkweDZiZjgwMTc0LCAweGIxMDJmZDU2LCAweGZjMzFmN2YxLCAweDc2ZTIxZTMyLCAweGJjZmJmOGY1LCAweDhmZTNkMTc1LAorCTB4ODBlYjU5NDIsIDB4YzMyYmUzN2UsIDB4MzUzNzAwMTcsIDB4YzU5MjdkZmUsIDB4YmUwMTZkNTcsIDB4YzYwY2ZlZDksCisJMHhhNmRlMDJiMywgMHhmOWZmNjA3YiwgMHgwZGVlMGQzYywgMHg3MzIzOTQ5YywgMHg1ZWQ5M2VmMCwgMHgwOWUyMWJiMywKKwkweDg5YmVmNzRiLCAweGUzYmRkM2ZjLCAweDEzNDNmNDc1LCAweDRkZGU4NzFlLCAweGRjNTg3ZjdhLCAweGQ5ZDdjMGIwLAorCTB4OTk3MTY0ZTQsIDB4YjcxMGZlMWMsIDB4NzdlMTcxZTksIDB4ZThjOTlmMWUsIDB4ZWNkYjhkNTgsIDB4YTc3MzVlMmYsCisJMHg2YWQ5ZTk4NSwgMHhkMzQ1N2U1YywgMHgzMWZlM2NiYiwgMHgxNzIxMmY4YSwgMHg3YmVjNzRmMCwgMHg3MGE4MTFlZiwKKwkweDFjMzk3MzcwLCAweDFkOGUzZjhkLCAweGE3MWJkYjE3LCAweGY4MDVmMWNlLCAweDM3YTg3ZDgzLCAweDg3ZTY5OGJlLAorCTB4ZThkZmEyNjQsIDB4MWU0MzEyNGQsIDB4YjhiMjM3NzQsIDB4N2Y1OTZlZTUsIDB4MWY4YTMzZGYsIDB4Y2RiYzhmMTYsCisJMHgwYmExYTdjOCwgMHhkZjNlNDM4YiwgMHg3YzI4N2ZmYywgMHgzM2YyODIzNiwgMHhiYTljMmZiMCwgMHhjNzJkOGViZSwKKwkweGZmN2NlMGRmLCAweDU5NjdkZjc3LCAweGIzZWYxODI4LCAweDYzZDAyN2ZjLCAweDA1MzFlYjQ1LCAweDNiNWVlMGVjLAorCTB4OGJiN2FmOWIsIDB4OWViYmQ1ZmIsIDB4NzU5ZTMxMTYsIDB4OTQ0MWNiNTUsIDB4NTE3OTQ2ZTMsIDB4YzQ1OGVmMDksCisJMHgwYjcxZWY5OCwgMHhkOGRiYzNkNywgMHhkZGI1ZDEzZSwgMHg3ZWQwNzIxOSwgMHg0NmVjMGViYSwgMHgzZTZjYWU3YSwKKwkweGUwOWM0MGE2LCAweGFmN2Y5YmNiLCAweGM2MjlmM2IwLCAweDg0NGZiMDNmLCAweDdhZWZmMzM0LCAweDE2NThmZjc2LAorCTB4ZjhmY2NkNmYsIDB4ZTMzZTcxYzYsIDB4NjNkYTA0ZTMsIDB4ZmU2ODEzOGYsIDB4NTk0ZTM3NDQsIDB4M2I3MTQ1YjAsCisJMHg2OWRlM2ZjZSwgMHhmNDBiNzdjOSwgMHhlOTgzYmE3NywgMHhjNDViYTc4MywgMHhiOWY3NThmYywgMHg2NmZiZTRkZSwKKwkweDc0M2Q3YmVmLCAweDQxNzdjNGJmLCAweDEwMWRlYzljLCAweGZkNDM2NWQxLCAweGY3MzM4OTcyLCAweDQ4NDRiOGFkLAorCTB4YTllZjhjMTUsIDB4ODFlM2M2NTksIDB4MDE0ZGU5N2UsIDB4YWYzOGQ3N2MsIDB4OTVkZjMwMjUsIDB4OWY4ZDVmMDAsCisJMHgwOWZiNzY0NywgMHg0YTcyYTVlOCwgMHgxNWY4MzY0MSwgMHg0OTQ2ZjI4YywgMHgwNjkwOTEzNCwgMHhmOTljNGJmZiwKKwkweGVmM2MxZWM5LCAweDdjMDEwZjA4LCAweDIxMzhjZDFlLCAweDE5ZWZiZjQzLCAweDQ5ZWY1NGZjLCAweDlkMzI1NTY0LAorCTB4YzE0MTdiZGYsIDB4NGJmNjhjYmIsIDB4Njg2MGZlYmUsIDB4ZmY2ZmIzODEsIDB4YWY3ZmRlNmEsIDB4NTUyYmYzYTgsCisJMHhjMTQ3MjM5YSwgMHg1ODJmMjEyZSwgMHhkYzQxYmUzMSwgMHgxN2Y3YzU2NywgMHhiOGFjMWIwMiwgMHhiZTNiODNkZSwKKwkweGViZjUxMjdjLCAweDlkODRjZGM3LCAweDg1ZWI1MGZiLCAweDliOTE1ZmQyLCAweGM3NjI3MWY1LCAweDA2ZmUxYjk3LAorCTB4YTYzNDMzZmEsIDB4YTA2ZDE3ZTMsIDB4Njg2ZWMxZjUsIDB4ZDM5ZGEzYjYsIDB4MmM2ZTNkYjMsIDB4NWU4YTQ1ZjgsCisJMHhjODA2NjdiOCwgMHhhMzNiMjJiMywgMHg5MmU3YTJjNywgMHhiZmI0MzU0MywgMHhmZTU5MDNlMywgMHg3OGExZDZmOCwKKwkweGJiNmNiZmRmLCAweDBmMGNlMzEzLCAweDA5NTVkOGVlLCAweDczZjc1MmZiLCAweDUyZmIwMjc2LCAweGNmNWMwYmY3LAorCTB4MWZiZjg2N2YsIDB4YjQ3YjJmNTQsIDB4NDQyNWM2ZjEsIDB4NzFlZjY4ZjIsIDB4OTU5ZTQxOTQsIDB4ZmMxMDdkZTMsCisJMHgwNDdjZTFjOSwgMHgzOGI2YWFmZSwgMHhmNTQxZmZiYywgMHgxZjNmNWQ1ZiwgMHhiY2JiOTFjYiwgMHg0MWMxYzc0OCwKKwkweDc4NGJkZWVjLCAweDYzMDNjODEwLCAweDRhZmNiNTNkLCAweDhmN2UzMGViLCAweDQ0NzNiNjk4LCAweDQ4OTQwN2ViLAorCTB4MGVkN2NiMjEsIDB4MDNhNGYyNjIsIDB4NjU2YjVmZWIsIDB4Zjc5NmFmZmMsIDB4Y2ZkNTk3ZWQsIDB4ZDVkMzBlYjcsCisJMHhmMjU3ZGI1MywgMHhmNDhjNDFmNywgMHhlMDU1YjM3YiwgMHgyZTZmYzFmZSwgMHg0NWZlZjU4OSwgMHhmN2UzZjk4YywKKwkweDY4MjQwOTlmLCAweDliNjUzZDAyLCAweDgyMjVkZjE1LCAweGRmMTBmMzdiLCAweGU3NjE1M2JlLCAweDMwYWVlNTVhLAorCTB4ODdiMjNmYmUsIDB4NWI3MmUzY2IsIDB4MTk0M2RmMTgsIDB4ZjUwMWU3YzQsIDB4OWQyYzRmMjEsIDB4NTZiYmUyY2YsCisJMHhkZTA0YWNiYiwgMHhjMTc4YTljNywgMHg1NzdjMDNlOSwgMHhmOGYyZmNlYywgMHg4ZTIxYjJlZiwgMHhkNDcxOGVjZCwKKwkweDFjZmMyZjE1LCAweDFjYzJhMGU5LCAweDEwZmMwMzllLCAweDFiMjY2NmQ5LCAweDFkYjdjZjgxLCAweGVkN2UwMzRlLAorCTB4MDk2OWMzOTIsIDB4NTc1ZTczZGYsIDB4YmMzNjYyZDEsIDB4NzFkNmMwMWYsIDB4MGFmZWJhYmEsIDB4ZGVhY2U3YjgsCisJMHg0N2VkMmNhNywgMHg2NTZiM2NjZSwgMHg1ODVmZTg3ZSwgMHg3OGFkNGI3ZCwgMHg2NzdmYWRhZSwgMHhhY2Y1NzRlNywKKwkweGFmNTdiODJjLCAweGM0YjUyZmQ2LCAweGFkNmI4Yjk2LCAweDRmNzYzZmYyLCAweDVlZTdkMWQ4LCAweDQwZWI1YWUyLAorCTB4OTIzYTYzZDAsIDB4NDk1M2VmYzAsIDB4ZTc5MDZlZjUsIDB4ODdkMzliYTUsIDB4ODBlMDlmODAsIDB4ZWU3N2JkNTUsCisJMHhlOGZkODM4OSwgMHg3YjQxZWM4MCwgMHgzZWVkNTIxYSwgMHg5YmRhYjI3MywgMHhmZjAwOGQyNSwgMHg4OTJjYThjZCwKKwkweGYxYTdhM2FlLCAweDA0NDFjMjkzLCAweGIzYWQwZWUyLCAweDBkYmRjOTYyLCAweGEzYzIzYjU2LCAweGM1ZjY2MmQ0LAorCTB4MGNmOGQ3YmEsIDB4YzEwN2Q3YTcsIDB4YzZjNzFmZTgsIDB4Yzc1MGZlMDMsIDB4NTA4NzIwM2QsIDB4NzliNzBmMGUsCisJMHgyZWQ0M2Y1OCwgMHg5YjY1ZWY4MiwgMHhkZWU5Njc2NywgMHhiMTZhOTBjNSwgMHg4NDUzZTUxZSwgMHg1M2E5MDk2NywKKwkweDViZjIzNWIyLCAweDY5NjRhZjFkLCAweDA1OTQ5Njc2LCAweGVhZmZhNWRmLCAweDhhMzE1N2E1LCAweDQ0NGMxMjY3LAorCTB4MzBlMjUwYmQsIDB4YmFhOTc1MjYsIDB4NWM5MjA0ZmIsIDB4MjlmODAxNjAsIDB4ODkyZGMwYTQsIDB4YzhiNTJhNDAsCisJMHg4MmQyMzZlZiwgMHg1YmFhODNhOSwgMHgyYWE4ZmRlYywgMHg2NGYyNzIwMiwgMHgwNDE3YmJlZiwgMHhlZWJjMjhkMywKKwkweDFjMWZiOTQ2LCAweGU5YzVjODRhLCAweDEzZGZmZjcwLCAweGFmYzBkNmU3LCAweGY5YzJlYWNkLCAweGMyMmFhNTk4LAorCTB4Mzc3NGM1ZTQsIDB4ZDA0MjIzZTgsIDB4ZjRhM2JlNGYsIDB4OWY5ZDUzNTQsIDB4N2Y0OGY0MDUsIDB4MGNmZjcwN2MsCisJMHgzZjNhMGY0ZCwgMHhhZmU1ZmI5NywgMHg3NGEyMGY0MCwgMHhmYjU5ZGVjYSwgMHg1MGQ1MDkzMSwgMHgyOGY4NDMxMCwKKwkweDEzMjc1NWZhLCAweDlhZDgzZWY2LCAweGRlZDY4OGI3LCAweDZmZTcyYmY4LCAweDcyOGZkYzEyLCAweDNmYTI0MWNjLAorCTB4YjEwNzlhMTEsIDB4MjZiNmYyMGEsIDB4Mzg1Y2RiZWUsIDB4NDliODc0NDcsIDB4YmI0MmY0MTgsIDB4MzRlZDg0ODMsCisJMHg0ZTk2OGM3NSwgMHg5NWRmZjk2YiwgMHgzYTFhZjM0ZCwgMHg5N2Q0NGY3NSwgMHhjYTgyZjkxYiwgMHgyZGI4YzMzNSwKKwkweGVmZGEzZjA4LCAweDNmN2U4NjY3LCAweGQ5ZmJmNDMzLCAweGMyYWJmNWY3LCAweGU4ZDk2MDI5LCAweDU2MDlmNzg1LAorCTB4Yjg3MDE3NTYsIDB4MWMyY2YxYjEsIDB4YTMzZTE0NmUsIDB4NjIzMzdkZTAsIDB4NzlmOTc5YjIsIDB4YzZkNWMyMzgsCisJMHhmYTg2NjM2NywgMHg2YzgzYWYxNCwgMHgwN2E3MDhlOSwgMHgyMDQ1ZjZlMiwgMHhkNjI0OTY2ZSwgMHg1NzdiYjAxMywKKwkweGE2OWY2YzA4LCAweDRkMGUwNTNmLCAweDIwYjZlMjNiLCAweGM3YzdkZTFmLCAweGY0NjM2NDE5LCAweGVmNWJkZWFlLAorCTB4ZTc4YWRmNWIsIDB4NWJlYTdkMWEsIDB4OGI2ZmFiZmIsIDB4ZGZkOWRmNWQsIDB4ZTczMWVjN2MsIDB4NGNlNTQzZjMsCisJMHhmZTZmMGJlNSwgMHg3YjYxY2UwOSwgMHg4MjliOGRlNSwgMHg2ZjI3NDczMiwgMHg5YzI4ZDkwNiwgMHg3ZjhmZTIyYSwKKwkweDk4NWY4OWRiLCAweGEyMTk2OGRlLCAweGU4MGQ5ZmM3LCAweDZkOGZkMjk1LCAweDExYmJmZTg0LCAweGNiZDFmZGVmLAorCTB4OWEwZWJlM2MsIDB4NzVkMmE0NzcsIDB4M2Y4Zjk0ZmQsIDB4NjM5ZDg5YjUsIDB4Zjk4NGI2ZGYsIDB4ZTdiOWE4ZGQsCisJMHhmMmI3ZmE4MywgMHgxNGI1M2ZmYSwgMHgxOGUwZmZhMSwgMHhiNmU5MTc3ZiwgMHhkZTE3YTY3YSwgMHhlNzg4YWY3NiwKKwkweGZkZGU3ZGNkLCAweGZmMjg1ZjgxLCAweDA4NTRiZWRjLCAweGJkNjNkMzg1LCAweGUwOWE0NDYzLCAweDNlNWNkNDdlLAorCTB4MjA1ZGYxYmUsIDB4YWRlNGYxM2YsIDB4MGJiZDYzMTEsIDB4YmQ0Y2U4YzQsIDB4NmY3YzY1NTcsIDB4ZTAyOTIxNjAsCisJMHhiZmU5M2RlZiwgMHg5MWJhYjI2ZiwgMHhkNjFlNDEwZSwgMHg0YmVlOGU4ZSwgMHg4ZTk0NzVjMSwgMHg3NGE0OWY0MSwKKwkweDcwZWNlNzBjLCAweDNjZTMwNjNkLCAweGYzOGIwYTVjLCAweGU3OGExOGU4LCAweDNiM2NhYTYzLCAweGUxYzRmMWViLAorCTB4ZDM0ZGVhZmUsIDB4NzhiODE3YmQsIDB4NWUzOTI3YmMsIDB4NzNhNWFmMjMsIDB4MmI3YmRkMzYsIDB4MDUzN2IyMzUsCisJMHhlZTdjOTVlNCwgMHhhNmExZTIzMiwgMHgxZThkNDJhZiwgMHhlYTljYTY4ZiwgMHgxMGNjYzhhMSwgMHgyNzcyODRhNiwKKwkweDljODEwYTQ1LCAweGE0MDVkYzkzLCAweDk5NThmNDA4LCAweDVmNWFhN2QxLCAweDU3YWNiYzQ5LCAweGZlOGQ3YzZmLAorCTB4ODc4ODAxYmIsIDB4M2JlMmU1ZDIsIDB4ZDcyOGM5M2MsIDB4ZTAwYjA1ZWQsIDB4ZjVjYWU4OTMsIDB4ZTk3ZDFkZmEsCisJMHhhZDk1YjgyMSwgMHg5ZGQ2MDZiYiwgMHgzNTNkNzdkZSwgMHhmYThiZDc4YSwgMHhmN2RlODRmMywgMHgzZjMwMmM2OSwKKwkweGQzNzllY2QxLCAweDBmZmJmMzAzLCAweGE1MWY4MDk5LCAweDI3YmM3YzJmLCAweDY3N2UxNDQzLCAweGRlMzE4MzQzLAorCTB4M2U5YjhjNDMsIDB4ZGY1N2M2MTIsIDB4OWQ1MzVjNDUsIDB4MmJhZGU3ODIsIDB4MmI4OTdiZjgsIDB4ZmU2MTQ3YWEsCisJMHhlNTllZmU3ZSwgMHhhNjBmNmFhYSwgMHhkZTJjZmMyYSwgMHhjZmM3N2M1YSwgMHg2ZmY1ODIzMiwgMHgyNGZjNzM3MSwKKwkweGZjN2MzODlhLCAweDUyNTkyZmE4LCAweGQwMWNmMGFhLCAweGMzMGFhZWVhLCAweDA4NjQ1OWZiLCAweGRhNjAyN2RkLAorCTB4OWY4NDVhZWUsIDB4ODdlODI2ZTIsIDB4NmYzMWY1YTQsIDB4ZTU0ZDNjODYsIDB4MGY4OGQxZmEsIDB4OGE0NTVkYzksCisJMHhkZGJlNzk2OCwgMHhjZGMwMjBmZiwgMHg3YmE0MTllYSwgMHgzMjljZDAxZiwgMHgwM2RmN2JlYywgMHhmNWE3YTVlYywKKwkweDcyMjYyZTRjLCAweDI3YzIzMjdhLCAweDY1ZWY2MTUxLCAweDlmZDQ3NGFhLCAweGUzYzM1NTVlLCAweGY2YWUxZjc0LAorCTB4ZGZjMzVhNjIsIDB4Nzc4MWFhODEsIDB4M2Q0ODE0N2YsIDB4ZWRjODFmOTgsIDB4NDcwYTFhYzQsIDB4ZGYwOGZlZjgsCisJMHg3M2FhNmIzNywgMHg5NzJjZmNiMSwgMHhhYWE2ODk1NywgMHgyNWMwMzJmZCwgMHg2NmZmMzA4MSwgMHhjOTBjOTA2MiwKKwkweDE0MDQyYzIxLCAweGM0ODI1MjdlLCAweDljZjU3OTAzLCAweGU2YzY5ZGQwLCAweDc0NDFlOWNkLCAweGRjNzc4NjRiLAorCTB4NWUwMDhmM2MsIDB4MjZjYjBlZWEsIDB4NGI4YjkzZjAsIDB4NjgxZjI1YWYsIDB4ZTU5YzU5ZTgsIDB4OTliZjA3OGIsCisJMHhiMDBiZjBlOCwgMHg3ODAwM2RmZiwgMHg0NzU5ZjNhNSwgMHg5NmVmODVlNywgMHhjOTU4N2E3MiwgMHhkMzlhYmVmMSwKKwkweDFmNDA3ZGMzLCAweGQzOTA3ZDM0LCAweGZhZThhZmM1LCAweDY1ZTM1ZjIxLCAweGU2ZDYwMWY3LCAweGM0Yjc3OGIzLAorCTB4Yzc3ZjEzMGMsIDB4ZjFiNDRjMmMsIDB4MTZkZWYxNjQsIDB4MjI3NWQwYTIsIDB4YzUzMDdhOGYsIDB4NWJjOGVhNzcsCisJMHhmYjE3YTQ2NiwgMHhhMTEzZTI2OCwgMHg0M2JiYWRmYywgMHg4MmM5MWRlYywgMHhlMzM3ZDg1NCwgMHgyNzIzNzdkNSwKKwkweGUzNjdlMjdhLCAweGM0YjBkNTQ1LCAweDk5MTM3M2RmLCAweGYzMTFkMWRkLCAweGVmMWFjNjdkLCAweGVmZDgwYjAxLAorCTB4ZWVjN2NkZmQsIDB4YTRhZmE1ZjUsIDB4ZDllYmQ5ZTMsIDB4ZmUwMWM1YmQsIDB4Njg4YmQ5ODIsIDB4ZjU0ZjUxZGUsCisJMHg4Y2U1MDI2ZiwgMHhkZTc0MWQyZSwgMHhjNjdkMWE0NSwgMHhiZmZkOGZkZSwgMHg1MWNkN2VkNCwgMHg3YmU3YzUxYiwKKwkweGU0NTE0MWIwLCAweGI4N2ViYWZmLCAweDYxNGJlMDE1LCAweGM3M2YwMWVkLCAweDJhNDE3MmMzLCAweGYxYzNmZmYwLAorCTB4ODczNWZkYjEsIDB4ODNkMjMyNmQsIDB4MWQzMmZiMmIsIDB4M2VjOWQ3M2QsIDB4OTg5ZWU3NmMsIDB4M2FmYmEzYTksCisJMHhhNjEyNzcyZSwgMHg1NzdkZDA0ZSwgMHg2ZGVmY2NlNSwgMHhiMTJlZWY0YywgMHhiY2MyY2ZmYiwgMHhjNWQxY2U5MiwKKwkweGJjNGE3ZTUxLCAweGE5ZGNiNjIxLCAweGRjMjA5NTkxLCAweGMzMTlhZmRmLCAweGE2NzA1Y2U0LCAweDNlYWJmNGMyLAorCTB4YTdjOTg0NzIsIDB4NmYzMmU0YjMsIDB4NjQ1ZjQzNTAsIDB4ZjAzZDQxMTQsIDB4ZWU4YTk5OGIsIDB4YzAzNWMxZGQsCisJMHg3ZTVlOTQxZiwgMHgwNTdlZTljZCwgMHhjNTRkMDFmMCwgMHg0ZGQyMGExMSwgMHhkYTEzNzRjMiwgMHg1ZjM4YWJhOSwKKwkweDY4ZjljZmRkLCAweDg3YTNlNzJkLCAweGMyNDY3ZjgwLCAweGRmOGNhZTNiLCAweDA1MWRlMjI0LCAweDhiOGQ0OGZiLAorCTB4YzAyNThmYmQsIDB4OGQ0OWI0ZmYsIDB4ZTg1Y2ZlNmQsIDB4YjMyZGU2YWYsIDB4MzUwZmU3MDAsIDB4MTE3NTJmOTIsCisJMHg5NzdlMjllNCwgMHhlZjhmMzA3YiwgMHhlZGViMDZlYSwgMHhiYmYxNTg5ZSwgMHg5MjkzZWQ0YiwgMHhjOTVlMTRlYywKKwkweGRmYmY4Njc2LCAweGZlMjE2N2Q0LCAweDMxNmY2ZTJjLCAweGQ4NzI0YmFjLCAweDE5YWZhZWQwLCAweDY1OGUyOTY5LAorCTB4YmRlY2Q4MWYsIDB4NTNiNzRlZjAsIDB4OWZjODBmNzgsIDB4ODE3ZjZiZDAsIDB4NjY2ZWExN2IsIDB4MzdmZGMyMGUsCisJMHgwNjM5OWY3MCwgMHgzM2IxOGNmZCwgMHgwNDg2NDA3OSwgMHhmZjBkMDhjOSwgMHhkY2Y3ZjFkNywgMHg0NjQ4Mjc4OCwKKwkweGYyYzBlNDY5LCAweGY4MDhmMzhiLCAweDdmZjJmYTc3LCAweDEzNmZmMjNmLCAweDAyMzU3ZjkzLCAweDc4MGM1N2RmLAorCTB4NTUzMWY3NTUsIDB4ZDc4MDQ5ZmUsIDB4YjllNzdkMDEsIDB4ZGQ1Y2EyZjIsIDB4Y2I5OTdiM2QsIDB4M2NiZDYzNmYsCisJMHg0ZjlkOWRiYiwgMHgyZmM0NmYxMSwgMHg3MGE3MmRmNCwgMHhjZTZiYjNjYSwgMHgwOWM0OTQ5NSwgMHg1ZDk1ZWZiZCwKKwkweDQ2MWQ2MzE1LCAweGY2MTI3N2I5LCAweDkyMjU5MDNmLCAweDU5MDVkZjFmLCAweDE5MWU3OGE4LCAweDhmZTRmMjBmLAorCTB4M2ZhNWZlMmMsIDB4YWYxZDQwZmQsIDB4ZWUzMTVjZTgsIDB4NzJlNzg1ZjMsIDB4YWUyOTlmNzEsIDB4MjBmZTQ1Y2YsCisJMHhkOGQ3OGRlMCwgMHg3ZTFhMjc0OSwgMHg5ZGJjMDJlNiwgMHhhM2U3ZTdhOCwgMHhlMjA4NzIwZCwgMHhiYzZmZjY1MiwKKwkweDE0ZDlhMWU3LCAweDg4MzcwYjllLCAweGQ3ZmVmZWVjLCAweDZhMjc3ZGRmLCAweGI2NDgxYmUyLCAweGY1M2FmNTA3LAorCTB4YTExM2I0M2QsIDB4NzNkYTVkM2IsIDB4NThkZmMyZWMsIDB4ZjYyZmEwN2QsIDB4MzYxNGNmYjcsIDB4NmJkZmI2YzQsCisJMHg1M2QwNTdlMCwgMHgxZTgwMWYyOSwgMHg0ODgxZjU0YSwgMHg1Zjg1ZjQxOCwgMHgwOGJkZjE1YiwgMHg2OGRjMWYzNSwKKwkweDU0MGVmOThmLCAweDE5NWE3ZGJlLCAweGRkYmU2N2QwLCAweGM0YTQyNzc3LCAweGZhZmU4MDkxLCAweDhlYTFlNmZlLAorCTB4YTY3YzFjN2IsIDB4MjhmNjRlNzAsIDB4NzBhNWIzOGYsIDB4OWZmM2E5OWYsIDB4ZTNiMjczYjEsIDB4MmM0MjFmZGMsCisJMHg3OGRiOTRmZCwgMHg3MjlmYTdiOSwgMHgyMTY3OGIxNywgMHhlYWU1ZDhlZSwgMHgzYjcxNGU3YywgMHg3YjQ2ZTE3MCwKKwkweGZkOGM3OTY4LCAweGVmYmYyMTdjLCAweDQ3OWY5MGI3LCAweGQ1M2ZmOGE4LCAweGJhMzEzN2FiLCAweDNmMmZmYjUxLAorCTB4ZGZlMThhMzcsIDB4NTNjMjY3NDAsIDB4M2VhZTkwNjMsIDB4N2ZhMzI0M2QsIDB4NGFlYTc4NGQsIDB4ZjJhNTJmN2MsCisJMHg5N2ViMDU5YywgMHg0MTVmZGU4YiwgMHg0ZDc5MTYxYywgMHhmM2JiYmE0NCwgMHg4NzNjMzhmMCwgMHhjM2JjMzJlYSwKKwkweGI3ZjM4N2I4LCAweDJiOWUxNjlhLCAweDg1OTllOWQ1LCAweGVjMGEwNWExLCAweDJhZTc4NWNiLCAweGRlMjExZTkxLAorCTB4MTM5N2VlMTEsIDB4OTM0YmY2ZjIsIDB4MTM1NzRlMjQsIDB4Njk5MWZkYTAsIDB4YTJiZDY5Y2IsIDB4NjRiZjQ2NGUsCisJMHhmZDEyYjA2MiwgMHhlZjc2OGQ4NCwgMHhkYWU0MzFmZCwgMHhlNzQ3YmIxZSwgMHgyY2VhMjgzNywgMHgyMzg5ZmVjNywKKwkweGU3MzUxMjQ4LCAweDdiZjkwYmY1LCAweGQ4ZTc0NWUxLCAweDFkYzQ4NDdiLCAweGNmNDAyOTI0LCAweGU5NDRkZTVjLAorCTB4NmM2ZWZmNTIsIDB4Y2JlMTg5OTcsIDB4Zjg1N2RlYjgsIDB4NWRlOTVmM2EsIDB4ZDY3ZTg0ZWYsIDB4NWViNjYzZmIsCisJMHg3NTE3Y2ZiZSwgMHhmNWQ2MWFlNiwgMHhkNmIxZjFiYiwgMHg0NGNmNWQxNSwgMHhkZmNlNWY2YywgMHgzMTM3MmRmOSwKKwkweDlmZTVhYmJjLCAweGY0ZDVmMWYzLCAweGI4MmNmNTc4LCAweGY4NGE0MzYxLCAweGExODU5MDNiLCAweGZmNzgxNTNiLAorCTB4M2UyMWIwYTgsIDB4YjNhY2QwNDEsIDB4NWQ1NmZlYTgsIDB4ZmQ2MTQ5NWMsIDB4YWFmZjdjM2MsIDB4MzI5ZTYxYTgsCisJMHg3YTQ3MjM1ZiwgMHhlY2ZjMTRmMSwgMHhhMjIzNDlhNSwgMHg4MWZjZmE3OCwgMHgxZGNiNjk5ZSwgMHgxYzE0YWZiMCwKKwkweGZlM2IzZTAzLCAweGU3OWNjNTY0LCAweGYwY2JmNDA5LCAweDhlMDk1Mjc2LCAweDcyYjk0MmFkLCAweDNkZDYyYmE3LAorCTB4Nzg4ZGNmOTQsIDB4MWI3OGU3YWIsIDB4MzVhMzI0MTEsIDB4OTdjNTQ2NzIsIDB4NGRmMWZkYjEsIDB4ZjljMTc3NjUsCisJMHhlY2Y1ZjFmNCwgMHhlNWZlOGY3NSwgMHgxYTdjNmM0YywgMHgzMDc2ZThlMSwgMHg3MWU5YTlmOCwgMHgyZmZiMmZiYSwKKwkweGViOTc4ZTA4LCAweDg1ZmE5YmUyLCAweDBhYmZjNzIzLCAweGQ1M2JmNTI3LCAweDFjMGVhY2FiLCAweGEzN2JiMDk3LAorCTB4MDQxN2I5ZjUsIDB4OGNmOGU4YmYsIDB4YmUyYTRlM2UsIDB4N2U0MWViOTEsIDB4N2MwOTM5NTEsIDB4MDdjOWVhN2EsCisJMHhlNWRiNmFjNiwgMHg4NDBkMjdkYiwgMHg4NWVkNDg3MSwgMHg2ZmRkOGY5ZCwgMHhmZDQxYTdmNywgMHgyMWVmNjRlMCwKKwkweGQxNWJjYTBmLCAweDVkZDc0MzViLCAweDc3NjhmNzEyLCAweGRmYWI1NzE4LCAweDkzNTY1NmJmLCAweDRhNWZjMTJiLAorCTB4YzEyYjg3ZWQsIDB4MDViNTQzNmYsIDB4ZTZhOGEzZDQsIDB4ODQ3ZDA1ZTAsIDB4N2FjNWYxNTYsIDB4ODM5MjZhMTcsCisJMHg1NjU2YjNmOSwgMHg5NWJmYTE1NywgMHgwZGM0ODI1OCwgMHhmOGMyM2Q3ZSwgMHg0MmNjOWM5MiwgMHhkMGU0OTdmZiwKKwkweGVjOGEwMWViLCAweDRkYmY4Mzc3LCAweDY1OTFmN2UxLCAweDNkMjZiZmM5LCAweGM0ZDllYzFiLCAweGJlMDZhMDhjLAorCTB4YmM1ODM5NTcsIDB4YzU5NGRhYzQsIDB4Yjc0Mzg4NDEsIDB4Mzg3MTlmODAsIDB4ZWFjZTM3ZmEsIDB4YTUxN2ZiZWMsCisJMHhkZDI4MDM4NSwgMHhkYTdkY2ZhOSwgMHhlNWNiZTg0NiwgMHhmZTgyMTZjNCwgMHhiYmY0ZDFiNCwgMHg3NDg5MWU3NiwKKwkweDRjN2RiYWRlLCAweGUyYzkxNzBmLCAweDg5MGY3M2MyLCAweDg3MTViZjcwLCAweDcyODJmZDA3LCAweGMzOTczNTc4LAorCTB4ZGMyZWVkY2IsIDB4NjQ1ZDU2N2YsIDB4OGVhMGZiNDIsIDB4MGI3ZWMzZmIsIDB4OGI4NDMwN2UsIDB4ODQzMjc2ODQsCisJMHgyNTdkNDBkZCwgMHhiMGViODgyZSwgMHhkMDQ0N2FjMiwgMHg3Nzk4YzNkYiwgMHgyMjMyOGJjMiwgMHg0MDI1YjEzZSwKKwkweDA0Nzg5ZTNlLCAweGUxMjAwZmM4LCAweGY2ODdhMDU1LCAweDBiYmNlYTRjLCAweGZkNThhN2JlLCAweDVmYmYwMWIzLAorCTB4MTUxYzc2YTQsIDB4ZTA1YTBmYzAsIDB4NWNlMDA0YmYsIDB4M2MzMzA2MmYsIDB4NjJlM2ZlYjQsIDB4YTVlYTAzMjQsCisJMHgxMmI3YTJkMSwgMHhjNDExN2E1OCwgMHhlNzM1ZmI0MSwgMHhjZTFkZWMyYiwgMHg5YmVjNWU2OCwgMHg2NGE5NjhiZiwKKwkweGZhZjg2ZjM4LCAweDJmZjk2ZDEyLCAweDA3NjJiZWFjLCAweGY2NTZmYmVjLCAweDA3ZTI0ZDdlLCAweDlhYjljYTAyLAorCTB4MDE3NzNmNWUsIDB4NzFhOWRiZGUsIDB4ZDIzZDdmMzAsIDB4MjFkNWQwMDUsIDB4OTU5ZjRmYjYsIDB4ZTgwOTcxM2MsCisJMHhmNTk1MWIzZiwgMHg1ZTFlNmVhMiwgMHg3NmUyNWU1ZCwgMHg1M2E1MTM0ZCwgMHhmNGFiOGJmMCwgMHg5OWYyNDIzMSwKKwkweGFlMmU4ZTgwLCAweDc4YjVkZmE1LCAweGMxNWZhMThjLCAweDM5ZmEyMzM4LCAweDQ3ZTc1MDRmLCAweDE1N2E0NWM3LAorCTB4ZmRiMGU1Y2YsIDB4N2IwZjQwZDYsIDB4YTBmZjM2MDQsIDB4MGZlY2NlZDUsIDB4YWYwMTE0MTIsIDB4OTNjMjU1YjMsCisJMHgzYzdjYjA1NiwgMHhkZGYwN2Y1MSwgMHgzZjU1YjdjZiwgMHhmMmMxNTkzNywgMHhjYzBiOTY2ZSwgMHhjNjZhZTc2NywKKwkweDVmNmVjY2Y5LCAweGU1ZmUwMWRkLCAweDBiYTllZGQ5LCAweGI2NjU5Y2UwLCAweDIwOGZmMmU1LCAweDBlNDcyM2RkLAorCTB4ZmM0ZTQxZDgsIDB4ZjlhM2JkOGMsIDB4Y2EyZjIzZDMsIDB4YmM3NzhhMjAsIDB4NDNlZjExYjEsIDB4NzFmOWNlM2YsCisJMHg4MGM4ODkwZSwgMHgyYjcxM2Y3ZiwgMHhjMjFlNGZjYywgMHg1ZTI3Y2RmNSwgMHhjMTkxNmY5ZSwgMHgxYzJkYmQ3ZSwKKwkweDlhM2FmOWJhLCAweGQwYzVmZGJiLCAweGNkNWE2MDc1LCAweDA5NzkxNDM5LCAweDcxNmZlNmQwLCAweDVhMmZhMWU3LAorCTB4N2RlNmQ3NmQsIDB4YmI1OWU1OTksIDB4ZGZmODFjMjgsIDB4YjgyYzkwYzEsIDB4MmRiYWU4YWUsIDB4OWQ3NTA3MDgsCisJMHhhM2UyMjZiNCwgMHhmZGZjNGUxNywgMHhiZDJlMTUyMCwgMHg3YWRmYjZlYiwgMHhmYjBiZjgyZCwgMHgyZGIzNmY5MywKKwkweDcxNjIzZTYzLCAweDQ2NWU2Y2I5LCAweDQ1MDY3ZDM4LCAweGMzOTE1ZWYwLCAweGYyZTgwN2I3LCAweDFkYWY4NzYxLAorCTB4MTJkY2E0ZjgsIDB4MjE4NjkzNDksIDB4NWYyMTg0ZGYsIDB4NGEyZmZhMjksIDB4NzhmODcwYTIsIDB4ODE5MmZmYTgsCisJMHgwMThlOGYwMCwgMHhiZTY3YTQxNywgMHhkNWZjZTljYSwgMHg4M2Y3ZGVmNCwgMHhiZTk5ZDExMywgMHg2NmMxZjk4NiwKKwkweGI1NWI3YTcwLCAweDliOGM0ZGUzLCAweDdiMzBmOGZjLCAweGY0NDJhOTBmLCAweGZhMGY3ZjVjLCAweDRiMTI0NGJmLAorCTB4NTdkMzU1ZWYsIDB4MmRlNjFmYjksIDB4OWQxZjdhODcsIDB4YzQ4NjczYWQsIDB4ZDVhMzNkZTAsIDB4NjY3YWY3OGUsCisJMHhmZDNhOGI2NCwgMHhjMGI2NDY3YiwgMHhjNjNhZDdlMywgMHg0YmQzYTRkZSwgMHhlZWJhNzA1NywgMHgxMWM0MGZkYiwKKwkweGIwNTlmYjE4LCAweDU1ZGEzMjc0LCAweDI0ZjcxNTNiLCAweDBkYzFmZjkwLCAweDRjMTZjZThjLCAweDY3MTA4OWY1LAorCTB4ODA4ZDYxM2MsIDB4MWZmMTg4ZmUsIDB4ODc5MDEyNzYsIDB4MDllMmVhMGIsIDB4YjgyZjgzOWMsIDB4YmMxNjcxN2IsCisJMHhlMWQ5NTA5NywgMHgzOTA0ZWI2OSwgMHhlMGJjMTIxOSwgMHhlZjE2NGI0NywgMHg5ZDI1ZjhjOCwgMHhkODA3YzNkNywKKwkweDNiZjkwYzNlLCAweDlmMGU5ZTYwLCAweDJiZjFhMWM3LCAweDE5NTVjOTc3LCAweGRiZWJhMDZlLCAweDBiOTAzZTFkLAorCTB4YmRmMjZlZjMsIDB4OTIyZDc4MGQsIDB4NzZiNWZiYzIsIDB4M2NkYmJjYzgsIDB4ZjMxZjQwYjksIDB4NGMzZWFjNWEsCisJMHg1MWIyNDQyZCwgMHgyMjRmMzZiOSwgMHgxNTkzNDgxNiwgMHhkZjIxNTkyMiwgMHhlY2U3ZDRmZSwgMHgzYmFkODZiMCwKKwkweGVjMmM0NmQ5LCAweDgwYWZlMWZiLCAweGFjZGYyZTRlLCAweGE2M2RkNmU4LCAweDUxZmY5ZjQ1LCAweDExOWYzZTliLAorCTB4MGViM2U3ZDYsIDB4ODBiN2YzZTksIDB4ODdkMWEzMWEsIDB4ZTc2NWVjMGUsIDB4ZDg2NzY1ZGMsIDB4MDVlN2MxM2QsCisJMHg3ZmMwODNkOCwgMHgzN2I5NDY2YSwgMHgwNzNkYWNhNSwgMHgzY2NmNGRjZSwgMHhmOTQxMzRlYiwgMHhmZDk4NmY5ZSwKKwkweGM1NjJkOTE2LCAweGJmZjZjYmY3LCAweDQ0YjYyMzYzLCAweGJhZDRjNzc4LCAweGQ4Y2ZjYTExLCAweGZmYzA3MjVhLAorCTB4ZmM2M2ViNDQsIDB4NDczNWRkMDMsIDB4ZjNiMWZkODIsIDB4MGNjZWQ1MzIsIDB4Y2VjNDljNjEsIDB4N2I5YzU5NmYsCisJMHgwNDM5OGI2NCwgMHg3NjY3YjFlNywgMHhkMDJjZjUzZiwgMHg4MzJkOTlkZCwgMHg1ZTc5ZWY1MSwgMHhkZmEwOWEwOCwKKwkweGFmMGM3ZGUwLCAweDlkMmU2YzEzLCAweGFjZGIyOWZjLCAweDM4NDZlYmI3LCAweDczZDUzZTk5LCAweGYxMGI5OTRhLAorCTB4ZWJkNDk3NGYsIDB4NDg2OTdkZDcsIDB4NjRlZDFmOWYsIDB4ZDEzZTY3ZjIsIDB4NzM4NzRmN2MsIDB4MTRhYWNmNjYsCisJMHg0ODI3OGJhMCwgMHg1OTgzZmJjYywgMHg5ZjdmMjY0ZSwgMHhlZDUxNWE3ZSwgMHgzM2JmOTE2YywgMHhkMTQ5M2M0NiwKKwkweGEyN2I0ZjdiLCAweDA2NGIzZmU3LCAweGMwMDAxYzQzLCAweDdiZjQ1ODYyLCAweGI1NWM2MTk5LCAweDdjYjk2ZmZmLAorCTB4ZmE3ZWU0NGYsIDB4YzIyMmFiYzgsIDB4YjE3NTc0ZTcsIDB4NTdiODljZWUsIDB4YTZmNmFkM2YsIDB4MzNlY2Q1NGMsCisJMHg5M2ZiZjU4NSwgMHhiODVlYTFlNiwgMHhkNmJlNjkzZiwgMHgzMDcyZGIyZSwgMHg3Mzg4NTZlOSwgMHhkZmUxMmNkOSwKKwkweGZkOWYyYTRmLCAweDEyMTM0M2U0LCAweDAyZDhiYmUxLCAweDFmNzI4NWYzLCAweDJmMmQxZmQ4LCAweGQ1MWVhMGI5LAorCTB4NzFiNTMzM2YsIDB4ZTNmNTQ1MjMsIDB4ZjY2YWE2NTIsIDB4OTc0YTFmZDcsIDB4YmI0YWVmYmQsIDB4ZTU3NjdjMTksCisJMHgxZDc4ZGMxNiwgMHg4MzU5NzdjNSwgMHg2NTZhODVlOCwgMHhmYmZmMzcyZCwgMHg4MzdiODAxOCwgMHhjYjVjZjc4YywKKwkweGJlZjhjOWI3LCAweDBhZjFhMDc5LCAweDM1OTQxM2Y0LCAweGVmODc5ZWJmLCAweGU3OWZhZGU4LCAweDQ4ZTU3OTg1LAorCTB4NDRjYzQwYTQsIDB4OTA0ZGMwZDcsIDB4ODFkZjZjOWUsIDB4ZmQ5NWQ1ZWYsIDB4M2M5MTRlYjUsIDB4N2QzZDVmMzAsCisJMHgzZjQzN2E1MCwgMHg3MjgwZDUxNywgMHhmMDFlMDA2ZSwgMHg1NGY4YzMyZCwgMHhhZTExYmJmNSwgMHg3YjdkMjEyNSwKKwkweDE3ZmViZTIzLCAweDMzZmEzN2E3LCAweDYzNzc4YjRhLCAweDgzZDMwMWJkLCAweGNhNDg3N2Y4LCAweGEzYjk1Mjk3LAorCTB4M2ZjYTJmYjEsIDB4MzhmOGM1YWMsIDB4NTQyODM4ZTMsIDB4YjBkMGU3MzUsIDB4MWY5MDc5N2YsIDB4MjcxZjdjYWQsCisJMHhjNzg3MjU4MiwgMHg3OTY3MGU4ZiwgMHhlODBmMzc3YywgMHgxOTdmZDYwYiwgMHhmYjgxZWE5OSwgMHg3YzkwMzc4ZCwKKwkweGMyMTc5ZjQ4LCAweGUzMjI4OTBmLCAweDZjM2JmNDZiLCAweDc3NWYyM2I1LCAweGZjOWYzYmI5LCAweGYzNDNkMDFkLAorCTB4MThjNzNjMTgsIDB4NzY3YmVmYzQsIDB4ZGVmOGMyNzksIDB4MGZmN2ZhYTAsIDB4NWYyY2RjYmEsIDB4ZjhjNTZlZGEsCisJMHgyYjFmMzM4YSwgMHg0MTk2Y2YyOCwgMHg3ZmQ0MTc1YywgMHhkMTMyNmFkNiwgMHhiNmNjZTY3ZCwgMHg0ZTIxOTMwMSwKKwkweGJkODVhYmIwLCAweDY1YmE3YjJmLCAweDdiZTU2NGMwLCAweGZmMjM0N2Y2LCAweDMxZDZmYmFhLCAweDZmZWU5NWY4LAorCTB4MWI3ZDM4NGYsIDB4MTVkZjAwOWMsIDB4NzkzMjhlMmMsIDB4NTU0NjU1NDAsIDB4ZWRhOTNjMGMsIDB4MGNhYTk1MTIsCisJMHhiNzIyMWZiMCwgMHg5OTFiYmMzYiwgMHg3MjBlOTNiZSwgMHgwNTNmYWNmZiwgMHhkYzc5ZjllZCwgMHhhZTM3YjE3ZiwKKwkweGQ3ZTgxOWUwLCAweGU4ZmFlYjQ5LCAweGUyNDM4NGJmLCAweDBmYWZhMDQ2LCAweGVlNWRlZjQ0LCAweGI1ZjNkMWUxLAorCTB4YmM3ZWQ5ODUsIDB4MzA1NjRhNGYsIDB4NDQ4MTY2M2IsIDB4NGZkNTEyYzIsIDB4MWZiYzgwMTcsIDB4ODM5NDc5OGIsCisJMHg4YzA0MWEwYiwgMHg1NmI4NWEyYiwgMHhlZjc4MWViZiwgMHgwMzc3ZmI1NCwgMHg1ZTJmZTE4YSwgMHg5MTM4ODcwZCwKKwkweDFiOGI0YzE2LCAweGIwMjVlNWY0LCAweGZlMzBiODdmLCAweDRiY2ZjZjAzLCAweDcwZTVmNDliLCAweGJkZjQxMDkzLAorCTB4Y2NlZmU2ZjIsIDB4MzlmNmUwYjEsIDB4N2JlN2Q3NTEsIDB4MWY5M2E5YzksIDB4OGY4ZmNhMzIsIDB4NWY1YzAyYzQsCisJMHg5MDliNTgxOSwgMHg3MDJhZmRmMiwgMHg0MmNhNmU3NywgMHhhNTllZTIwYSwgMHg2NjE2NTIxMywgMHgwNDE4M2JlMSwKKwkweDE2NDVhN2Y2LCAweGIyNjU3NDEyLCAweDgwMDNiYzNjLCAweGM5ZmM4M2FjLCAweGY1ODI1YmRlLCAweDk0ODdlZjY5LAorCTB4YTFlMTI1NGQsIDB4NjEzYWU4YWUsIDB4ZjI3MmRhN2QsIDB4NTk2M2MzMDYsIDB4ZTMxZTEwYmIsIDB4ODIzN2RlOGEsCisJMHg5NWViNmE3NSwgMHgzNzk3ZjVmMywgMHg4MzdlNzU5YiwgMHg4NGYzODgwYSwgMHhlZmQ2OTUzOCwgMHg3OTdlYmFjYywKKwkweDM3ZGQxY2ZjLCAweGU3ZTI5NTg5LCAweDFiYjk1ZWUxLCAweGZjNTYzNGJhLCAweGE3MGU1MWY5LCAweDRjMmU2Zjg3LAorCTB4MTVmY2JlMDUsIDB4Mzg4MzgxZTgsIDB4M2RhOTczMjAsIDB4MDI3MWMyMGEsIDB4OGU4NWI4MDMsIDB4Y2RlYWNiNjMsCisJMHg3MmNlNzk2MywgMHhmOWQ0ZmY5NiwgMHgxMGZkNWU1NSwgMHg3ZWM5Mzc2YSwgMHgyMDU4NTczYywgMHhmNzBjYmMxNiwKKwkweGZkYmE2NjlhLCAweDE3ZmMwMjVmLCAweDEyNjk3Yzk4LCAweDI0NmZhN2YyLCAweDY1MmU0N2M2LCAweGIzMjQ3ZmViLAorCTB4MThhYWQyZWEsIDB4Yzc4YWE5ZjYsIDB4NzgyZDBhZGYsIDB4Y2RkYzE3YmUsIDB4NzY2NzNkZjYsIDB4M2JmYWQ2NDQsCisJMHhlZTRjNWRlMywgMHhjNGU4MWRjNCwgMHgwZWM4ZmU3OCwgMHhhZTExZWYwMSwgMHgzZGUxOGUxNywgMHg3OGQ3ZjViYiwKKwkweDI5Y2ZkODA4LCAweDE3MjA2ZjE0LCAweDA1NjQwYmQ3LCAweGRkOTU2M2JjLCAweDk3OGVmMzNhLCAweDM2ZDk3ZjAwLAorCTB4NWEyYTc3ZDQsIDB4MGUxNTg5MjcsIDB4NzdkMzNmNWMsIDB4NzA4ZDU1ZWMsIDB4NzczYzk4Y2UsIDB4MzNkMDI2NTQsCisJMHgxYmRjZjc1ZCwgMHg4M2NiYmJlMCwgMHgxODNhYTVlMywgMHgwZjJjYTQxZCwgMHgwZDFlMmZhNiwgMHhmMWRjMTdlMywKKwkweDE4ZGJmMDEyLCAweDRkM2ZkZTFiLCAweDI2NzJiMGE2LCAweGY0MDZiYTYwLCAweGIxOTIxNDk3LCAweGNhNzdlNDFmLAorCTB4ZjgyNjRmNzQsIDB4YjE3NjFmNWEsIDB4YzQ5YTA2NzEsIDB4Y2Y0MTMzYjksIDB4ODRmOTY0Y2EsIDB4NDZkZjA1N2IsCisJMHhiODc1YWUyNCwgMHhjOTMzNjRmZSwgMHg3N2MyZjk4NywgMHg2MDJkMTNkMCwgMHg4ODc5NjNjZiwgMHg1NTRhNzllMSwKKwkweDNjOWY4YzA2LCAweDRhODlhNTljLCAweDVlODJlMzE4LCAweGNlZGVmMTUxLCAweGI4OTY3M2UyLCAweDI1ZTNjYTA5LAorCTB4NGU0YTRkNWYsIDB4ZTk1ZmVkYTAsIDB4OTUyZDg2YTIsIDB4NTEwY2FmNTMsIDB4MDNiMGUxZjUsIDB4NjIzMjEwZjQsCisJMHhmNWNmYWIxNCwgMHgyYzE5MjVlMSwgMHg0ZDMxM2RlZSwgMHhiZDU4NTdkNSwgMHg5NzE3ZDkxZSwgMHg3NWYzZjIwNSwKKwkweGU2N2YxN2E2LCAweDljNDFjNWYwLCAweGVjNGExNWRhLCAweDFjNDlkYmI4LCAweDM2NzM4MTRmLCAweGZmZjhkMjEyLAorCTB4YzBiZWIzMDMsIDB4NzM4MTFjN2IsIDB4ZWNkMjEyMmUsIDB4OWIyZWYwMDcsIDB4YmNiMzdlMzYsIDB4MTdiZTAwZjgsCisJMHgzMDNhNDE1YywgMHg0NWEyYjgwZSwgMHg4NTdhNmYxZiwgMHgyYWI4ZjYyZCwgMHg5OWNlMDc5ZCwgMHg0MmVkMTA0OCwKKwkweGMwMjcxZjBhLCAweGNlMGFiMjI3LCAweDA1N2I4MjcxLCAweGNlMDZhZmY0LCAweDE5YTgyNDI5LCAweDQxMmU3MDNmLAorCTB4Njc5ZGVmOWYsIDB4YWQxM2Y2MTIsIDB4ZGFmNWY0NDcsIDB4MjQ3YWM0YmUsIDB4ZTMwNWQzYjcsIDB4NzEzYmJiNzQsCisJMHg5MzljMDhiZiwgMHhhZmJhOWRiMCwgMHg0MTRjODRmNCwgMHhkZDZmZWE5OSwgMHhjM2RlNTYxZSwgMHhlYjU1YTNkZiwKKwkweGNmNzVmZGFiLCAweDk3N2RmODUyLCAweDU1ZGJmNjA4LCAweDg1MTEwNTRkLCAweDlmZWRhM2NiLCAweGJjYjM5ZmEwLAorCTB4NDVjMjNmN2QsIDB4N2MyODg3YTUsIDB4ODFhODI0ZWMsIDB4NDc0ZDUyNGYsIDB4ZmI3OTQ0ZDgsIDB4NTg0ZDBmZTcsCisJMHg0YTUyZmEzZCwgMHgxZjM4MDc1YSwgMHhmNmFlMjcwNywgMHhhMmU1YTQ0ZCwgMHhmNmQ3Yzc0OSwgMHg0NzNlNWVlYywKKwkweDQ5YjBmMmYxLCAweDJiYzhmZWU0LCAweGE4OWQ0ZjU3LCAweGJkZmFmM2M5LCAweGJlM2Y4M2VkLCAweDQ3YjNjYTFhLAorCTB4MWVjYmY2YjMsIDB4Y2IwZmVhYmEsIDB4YTI1Y2E4YTUsIDB4NzAyYjQ4ZWIsIDB4NDMxNmYyNmEsIDB4NjNmMzQxZGUsCisJMHhhMWI3NzkzNCwgMHg5ZTUwZDEzYywgMHg2MTBmYzg2MiwgMHhlMTljYmJmNSwgMHhjODRiZDEzNCwgMHg1Y2E2ODdkYSwKKwkweDAzZGZjMTJkLCAweDgxY2YwZDRhLCAweGM1NmJmYjliLCAweGVmZTFhYmJjLCAweGIzNjQ1NjJiLCAweGQ5NTgxN2JmLAorCTB4Mzg1OTc4MmUsIDB4NjU1ZjgzMTMsIDB4YTc2Y2Y5ZWYsIDB4YzAzNDYwYjIsIDB4OTA2NWUzYTEsIDB4ODI2ZGU1MDMsCisJMHg0NzcwZjQxYiwgMHhlNjMwYjZjYiwgMHhkMzQ3OWRhMSwgMHg3YmRkODVhZSwgMHg4NjM5NmYyYSwgMHg3ZmVkZmFlZCwKKwkweGY4ZjkwOTk0LCAweDYzZWY1MWZlLCAweDE1YzVmM2JkLCAweDc4ZmFlOTkxLCAweDE5ZTJmZWYzLCAweDI2ZmUwODhmLAorCTB4M2JlOGI4ZDcsIDB4ZGVkYjVkYmQsIDB4MzdiZGZlOGMsIDB4NTNiYTQ3MmEsIDB4OGU1MTA3N2QsIDB4MDY3ZmVlMWEsCisJMHgyODhlM2U2MCwgMHhiYzcwYTg5ZiwgMHg3YzU5ZDQ3ZiwgMHgzMWRkZjBiNywgMHhkYjYwNDdlZCwgMHg2NGY5MmZiNywKKwkweDdmOTFlODE5LCAweDBlMzEzOGFkLCAweGZiNzgyYWY0LCAweGRmOGRmNjEwLCAweDYxNGJhMTBhLCAweGY4OTQ3YTFmLAorCTB4NmY3MTg1MmYsIDB4M2Y3OGI4YWYsIDB4NTQ3ZDkxM2MsIDB4ZGUwYzdjZWUsIDB4ODdjZmZkYjUsIDB4N2YwZDVlZTYsCisJMHhiM2E4ZWVlZiwgMHhhOWZjMjg3MywgMHg1MmFlMjM5ZSwgMHg4MWQxYzdjNCwgMHg0MjkyZjg5ZCwgMHhjYjE5NWM2NiwKKwkweDZhMWNlZDBmLCAweDVkYjdmOWEyLCAweGUyZmU1OWViLCAweDJmMjBjN2NlLCAweGVkNjMyZGM0LCAweDE1MGU3NGM3LAorCTB4MmMzMjYwZGQsIDB4NzI2ZGZjNDcsIDB4M2ZmN2U2YzcsIDB4Y2VhMzM5NzIsIDB4YmVlMWVlZWYsIDB4YTQyZTAwOTcsCisJMHg3MDM3ZWQ5YywgMHhlNTQyZDBiZCwgMHhkM2QyOWNlOSwgMHg3ODUxMzc1YiwgMHgxZDg1ZjljYywgMHhhZWE2ZGNlNSwKKwkweGZhNjVhZjFiLCAweGUyMDBiMDcwLCAweGJjMzk5MjhkLCAweGI5NDQzZjcxLCAweDkwZGVhMTJlLCAweDQyNjA3YjBhLAorCTB4YjRjZTlmMTQsIDB4MTdlZTBmMGUsIDB4MDM2ZDU1OTcsIDB4Y2U3OTIwN2QsIDB4MWEyZmRjNjgsIDB4YjhhY2JlOWMsCisJMHg0Mzc0ZDE3MSwgMHhlMmIzNGIyMiwgMHg4YmFlNGNkYywgMHg5NjFmYmMyNiwgMHhmNTEzOGY3YywgMHg3N2YxNWZhNSwKKwkweDIxZGYyOWFlLCAweDVlMzgzODdkLCAweGJiMzE3M2RlLCAweGYzMTczZGVjLCAweDRlNzQxYzJiLCAweDExZGU3ZWMzLAorCTB4MjIyZGViN2MsIDB4MDU2ODI0YTQsIDB4NTBkODk2YmMsIDB4OTFiNWI5MGYsIDB4ZDcyYTE1Y2EsIDB4ZWJiY2Y4ZWIsCisJMHhmZThhNWRkNiwgMHg1ZmMxNWI4MiwgMHhmYmJlMWEzYiwgMHg0NzQ2MTM1MiwgMHgwY2JhZmNmNSwgMHhlZDQ0Nzc5YSwKKwkweGJlOTliYWIwLCAweGRhN2JlZDU0LCAweDVjYWM4ZDc1LCAweGU5NzU1Yjk1LCAweDVmYmFiZGFjLCAweDcxYjBkNzI1LAorCTB4ZTk3NTdmOTIsIDB4NWQ4NzU4NDYsIDB4OGJmNWU3NjIsIDB4YjhkYzhkNjYsIDB4MWJmZmY3MGMsIDB4MWZjMGUyYjIsCisJMHg4MmE1ZjNlMiwgMHhjOTYxZmNkZCwgMHg5ZmU4MTMzMCwgMHg4NjFhN2UyYSwgMHhkMTcyYmVmYiwgMHg3M2YyOWZmMiwKKwkweGJkNGYxNTE2LCAweDViMWM2NWY2LCAweGVhOTEwMmY3LCAweDNmYmQ3NDBmLCAweGZkNzFmYjcyLCAweGNiMTg5ZjU0LAorCTB4M2U5OWIzMGUsIDB4NGNkNzQ1OTEsIDB4NTIyNWYwMzQsIDB4ZmVmODM4ZTcsIDB4Njk0ZTA4M2YsIDB4MTQ3ZmVlYjAsCisJMHhiYzc3N2Y0ZSwgMHhmNzNlZjRmNCwgMHhiZTYxMzI1ZSwgMHhlODRmNGIxNSwgMHhiODcwYmRlZiwgMHhjYjA4NTZmZiwKKwkweGY3OWFkOWM5LCAweGIwNzdlODQ4LCAweGZhNzZiZjMzLCAweGNlNjljN2M3LCAweDUzZGNlN2U3LCAweGJhYTc3YTgxLAorCTB4NzdjZmZiMWUsIDB4NjRkZmMzZTUsIDB4NTFhN2YyMzQsIDB4OGVmYTNjMmYsIDB4M2ZmODJkNjUsIDB4MjgyZDJhOGUsCisJMHg0YjVlOGY4ZiwgMHg1MWM1ZmVmMCwgMHhhYTk0MWVmZSwgMHhhMmZjZTZkNywgMHhkM2IwMTVlYywgMHg0ODg5YzUzNiwKKwkweGJlMDlmNzFmLCAweDdkYzc4MDU0LCAweGZlZTAxZTk0LCAweGEyOGYxYWI2LCAweGYxNzVjN2VlLCAweDQwODVmNWExLAorCTB4YzY4ZjM3MGYsIDB4ODgxZWVmNzMsIDB4NGI3YTg0OGMsIDB4MmViOGRmOTksIDB4ZjBlZDEzYmUsIDB4MzcxZWYxYmEsCisJMHgwN2QwMDk5ZCwgMHg1YjMyMzFlMiwgMHg1ZDRmZmY0MSwgMHhiYWIzYTMwNiwgMHgzZWYwY2I5MiwgMHgyMDk3YTUwNSwKKwkweGU4Y2Q5ZmI2LCAweDQxMjY2ZWFlLCAweDc2NmVhMWJiLCAweDk1OWJkMjBhLCAweDlmMzBhYzg0LCAweGE5MjdlOGZlLAorCTB4MTBhM2M1ODYsIDB4N2I1NjM3YzksIDB4NjM4YzFkNmUsIDB4NzY3YjExN2UsIDB4NDEzNzhlZTcsIDB4NDU2YjVkOGYsCisJMHg4OTUwMTYzZCwgMHhjOWI1MWRlNywgMHgwNzRhNWYzOCwgMHhhYTU3NDhjNSwgMHhkNDliZjY3ZCwgMHgwZjY4ZmRkMCwKKwkweDVmZWVkMTdhLCAweGMzY2RmNGVkLCAweGVlZDJmZmY5LCAweDU4MzdmOTgxLCAweDI2NGIxYWM5LCAweDA1NjQzNTk4LAorCTB4MWYzZTQ5Y2EsIDB4YzYwOGZiNTIsIDB4N2FlNWNjMmYsIDB4NjdjNTdiZTEsIDB4ZmM3ZmEwOWQsIDB4ZmY1MDRlM2MsCisJMHhlYzBmYTUyZSwgMHg5NTg0ZjlmMCwgMHg3ZWQ3YmZjZiwgMHhmOWE5ZWMwYywgMHg2Mjc3YjJmNywgMHgzZTY5OWFjOSwKKwkweDlkMDVmOWZkLCAweGI5ZjgxMjZiLCAweGM0N2Q0ZmY5LCAweDg3ZTM3NDA5LCAweGZmZTgyZTc2LCAweGZmNzA5Y2JmLAorCTB4YmIyZjdmYzYsIDB4YjQ4MjRhY2YsIDB4ZmI2OGE4ZmQsIDB4YzFkZjgxZmIsIDB4ZjliMjJlNWYsIDB4MjdiYjZhOTMsCisJMHhmN2EwZmJkNiwgMHg0NGJmNzFjNywgMHhlZDNlMjNlZCwgMHhjNjM4ZWE3OCwgMHhmOGJkYTk3ZSwgMHhjMjhiYzAwMCwKKwkweDhjZjcwYzNkLCAweDdmNjRiZjIyLCAweGRmMzhjMDk3LCAweGEwZjIyNTQ0LCAweGE5Y2Y5Njk1LCAweGVmZTFlMzE2LAorCTB4M2E5N2ZiODgsIDB4N2NlYWJkNzEsIDB4YWU0NzI2ZTcsIDB4YTE4NDdmNDQsIDB4Y2FmNmUzZmYsIDB4YWI2N2YwMWMsCisJMHg1N2I5MGZmNiwgMHg1YzIxZWY2MywgMHg4NDVlNjg5NCwgMHhiNDExZjg3YiwgMHhlNzdjZmFhMywgMHhlZWQxYjFmNiwKKwkweGIzNWJlNDI0LCAweGRjNmY1ZWI2LCAweGNjMzA0N2JlLCAweDQ3OTVkMzlmLCAweDdlNmYwMDkwLCAweDI4YWYxZTdlLAorCTB4NWVmODM5OTEsIDB4MmFkZTYxOTQsIDB4YmE3Mzc3M2MsIDB4MDhjMmU5NTMsIDB4YzBmZGRkZWYsIDB4MWNlOTUxM2IsCisJMHg5N2ZhZmQwYSwgMHhjNjRlMTE5YSwgMHhmNGZkZDVmZSwgMHgxZmU1MmIxMSwgMHg4MmY1Nzc0YSwgMHg3ZjVhZjQ4MCwKKwkweGM3ZjcxZGI3LCAweDQ5ZTQ2YjFlLCAweGVmYjhkN2JjLCAweDc3NzdjNDZhLCAweDQxMDNjZDg5LCAweGI1NTI4ZjVhLAorCTB4ZjYzM2NmMWQsIDB4OWU4Y2YzYjEsIDB4ODEyMzlkOTEsIDB4OWFlOWJhOWYsIDB4ZGQzZjE0N2QsIDB4NDE4ZDhhYWYsCisJMHhkNTA0OWQ0MSwgMHgzNzE1NWU4ZiwgMHhlZjc3ZmQwMiwgMHhiM2Y1ODZiZSwgMHg4OWRlY2VjYywgMHhiZGMzMDgwNiwKKwkweGFhZGZlMGM0LCAweDgxZjM5ZmMxLCAweDAwMmZiZDg5LCAweDZiNDU4ZjdmLCAweGQxYmRjMzc3LCAweGJjYThjY2UyLAorCTB4MTgwMjgxZTgsIDB4NTczZDRkYmYsIDB4MzhlMDk3ZjIsIDB4M2RmMGRhYjcsIDB4ZTA5MzRhODEsIDB4YjJhYmJkMDMsCisJMHg2N2JjMzJmNCwgMHhkMWRmZjg0MCwgMHhhNTY4ZTU1MSwgMHg5OWEzZGE4OSwgMHgzNGFmYmU1MSwgMHgzMTcyM2ZiZCwKKwkweDQ5MTI5M2YzLCAweGY1YTM0N2UzLCAweGIwM2IwNDVlLCAweDAzYjZiMmRjLCAweDQ5YmI1MWVmLCAweDY4NDNlZmY0LAorCTB4NmI5NWE1ZmMsIDB4ZjMwMzdjY2YsIDB4ZjgzNTZjYWYsIDB4ODNmZTBjMTEsIDB4YTUzZDJkNTIsIDB4ZjUwNGU5NDcsCisJMHg1MzFmOTA3ZSwgMHg3NzViZGUwOSwgMHhiZjNkYmNmMiwgMHgwMThlZmQwMywgMHhmMDMwY2U3ZSwgMHhkNmQ3N2IwMCwKKwkweGMwNDJkZDk5LCAweGM5MzgxYWFmLCAweGVkMDk5NmY0LCAweDBlYzEwNzhkLCAweDE4ZWZjZjhmLCAweDcwMGRjYjBhLAorCTB4OWVmMTlmM2YsIDB4NzVmNmY4YzksIDB4YWE5NWQ4MjIsIDB4NmJiMWEzYmUsIDB4OGM2MWJkMmYsIDB4NGRmNzY1MzYsCisJMHhmMTg2NGVjMSwgMHhmMDEzZTEzYSwgMHhjOWY2YzQ4ZCwgMHhmNzQ4MDNmZiwgMHg4MDAwMjNhZCwgMHgwMDAwODAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDk5OTJiY2NlLAorCTB4OTI2NGNjZTQsIDB4MDkyN2RlNGMsIDB4MjcwMTAwODQsIDB4ZDQ1MDA0MjEsIDB4ZTZhMmJjMjEsIDB4YTJkMTAxZGEsCisJMHgzYzI0MzhiNSwgMHhhMDk5MjExMiwgMHhmN2FkOGI5NSwgMHgyNDg0NDAzMiwgMHgxMTFhMDgwNCwgMHhhMjg0ZTAyOCwKKwkweDE3ZWRhZjYyLCAweDA0YzA2MjJjLCAweDE2YzQ1NDA3LCAweDZiNWVjNWZiLCAweDQ2ZjdmNmQ1LCAweDQ4NWNhMDA4LAorCTB4NmM1Y2IwNDYsIDB4YWQ3YmZjYjUsIDB4NjczMjRmYmQsIDB4ZGU5NTI4OTIsIDB4MWU5ZjdjZGUsIDB4ZWNmYmQ5ZjYsCisJMHhhZjZiNWFjNywgMHhhNWIzZGVmNywgMHg5MGQ3NGIzMiwgMHg0NGI0NDg0OSwgMHhjODQ4NTQ4OCwgMHhiYjExYTZjMiwKKwkweGZlODQwOTU3LCAweDViNjY3M2I5LCAweDg2MmE3OTA5LCAweDgzYzllMDNjLCAweDMzYzhhYmIyLCAweDcyNTk5MDg2LAorCTB4OWUzYzhjNzEsIDB4YjE3MjIzOTAsIDB4Zjc4NzhlNTksIDB4ZGExZTkxODEsIDB4MDhlM2Y4OGUsIDB4NTVjODQ0OTksCisJMHhlMDc1YmJmOCwgMHgyNDIwMzY5MywgMHg2MjVkYmZiZSwgMHg4ZDdlNGQ3NiwgMHgwZTc2ZTg2NSwgMHg4M2E3ZmQwMywKKwkweGQ4YjZkMDkwLCAweDhmOTg2ZWMwLCAweGQxNzk2MDI0LCAweDBkMmRmNDZmLCAweDYxM2EzZjM4LCAweDc2ODdkZjNhLAorCTB4ZmU2MDA2NjYsIDB4NDBjOWE0MTUsIDB4NGE1OTA5YjIsIDB4ZDIyMjA2MDIsIDB4OGZlMjI2NzYsIDB4ZGE0ZmEwMjksCisJMHgxNzNlOTYyYywgMHgyNTEyMzU2ZiwgMHg1NWRmZTA5NywgMHg0MDY1NWZmYSwgMHg2Y2NkMjY1YiwgMHhlMGE1NGI1ZSwKKwkweDkwODYyMTExLCAweGZiMTNhNDI1LCAweGRiNTdiMjU5LCAweDEyMzRlOTZlLCAweDJhZmFkMmI0LCAweGMzNDYwOTEzLAorCTB4NWY1YjU1YjMsIDB4MGYzODQyNGQsIDB4YTM1NWRiNWYsIDB4NDRkMjdmYTYsIDB4MzZkYjg1MDgsIDB4M2I2NjIxMzMsCisJMHhmOTlkYzljYywgMHhlODdmOWQzOCwgMHhiNzZiYmQ2ZCwgMHg2ODY5Yzg0MiwgMHg4NzBmZDQ5MiwgMHgzOGUyZDg4ZSwKKwkweGE4OTQ3MzgwLCAweDU2ODY3NWMzLCAweGQzNzYwNzQ1LCAweDQ4ZWI3Njc1LCAweGI3MGEzZWM1LCAweGMwZjIzNjRkLAorCTB4NTllY2ZhNmMsIDB4MGQ4NzM4YTksIDB4OWQ4YzcwNDMsIDB4M2MyMDY2M2QsIDB4MmI5OTBlMWIsIDB4NmU3ZjE0MDIsCisJMHg1NTcwODc1OSwgMHhkNTg5NWZkZiwgMHg0MGNiYjk2MywgMHg3ZDY5NWEyYSwgMHg1ZmRhNmFkMSwgMHhmNTdkN2Y1ZSwKKwkweDdjMmYxNjNkLCAweDcwMTY1MzM3LCAweGJiZTc4MGRlLCAweDBkNjRjZjAwLCAweDNkZWQwNzdlLCAweDcxYThmYzc0LAorCTB4Nzc3ZWE5ZWMsIDB4Y2RmYjVmNjcsIDB4ZmUxNGRmMGMsIDB4OTUyZGZmMzAsIDB4Mjc4MDJkNTEsIDB4MDQ5M2I5MjIsCisJMHgwNDc1OTQwNywgMHg2M2NmMmVlOSwgMHgwZmVmZDJmMCwgMHhmZDdlNzQwNSwgMHg1ODQ5ZjQwZCwgMHgzMWFkN2Y3YiwKKwkweDk3YjYyY2YwLCAweGU1YTBhZGU3LCAweGI5ZTY5ZjQzLCAweDQ4OWMyODFhLCAweGQwM2U3YmFlLCAweDUxNzNkMmMxLAorCTB4ZjFjMWQwMGEsIDB4ZmY1ZjNmNzMsIDB4ZjE3ZjVhNWIsIDB4YTQ2MjgzNTMsIDB4MzY4MDBiZjUsIDB4MDkwZjFlMjgsCisJMHhlNzY4NGFkZSwgMHgzYzhhMzdiZiwgMHgzNTJkZGY0YiwgMHhiYjhjMzcxMCwgMHg4MDg4YzBmNCwgMHg4MDdiZjY5ZiwKKwkweGIwZmViMTk2LCAweDFhNTljNzE1LCAweDkwYjZkZGUzLCAweGE1ZjRiM2Y2LCAweDQwYTUxNzc4LCAweGYwM2VhYWYyLAorCTB4ZGY1MDczYzIsIDB4NGIzZDc2NjEsIDB4YzUxYTVkZmIsIDB4YTFlOTcxZTgsIDB4YmU3ZWZjMTQsIDB4ZjAxNGJiZDksCisJMHhmYzBjNmM5MywgMHg3YmU5MmZjNywgMHhmNWQxOWFmMiwgMHgyNDVjN2QyYywgMHhmZjMwNDVjMSwgMHgwMTY2YWQ4YiwKKwkweDc1ODQ5ZGRhLCAweGFkMjdkMmM1LCAweGVkNWQ2MDEzLCAweGJmYjYzYzc0LCAweGVmZDIxNjkyLCAweGIyMjdkNTRlLAorCTB4OWQzODcxNzUsIDB4ZTkxYTMwZGEsIDB4OGQ5ZThiNzksIDB4NjAyODNmZTcsIDB4Y2Y3YTkzZmIsIDB4M2U1YTI0OGMsCisJMHg2YmJlNzJmOSwgMHhmNWVhYWQxNSwgMHg0YTA2ODIxOCwgMHg0YjRkYmU3ZiwgMHg4NGIxOTA0ZSwgMHg1ZDk0ZWI5NCwKKwkweDM4NzIyNzAwLCAweGUyYWJlNzFhLCAweDcxNzFiN2MzLCAweDFlZmJkNDI5LCAweDEyNGVlYzdjLCAweGY0ZmVmNDMzLAorCTB4MzEwOTE5YjUsIDB4MGY2YmQzZjUsIDB4ZmQwM2E1MDksIDB4NmFjOGFmNmYsIDB4N2I3MWQyMGQsIDB4NDRiYTQ3ZGEsCisJMHhlNDUyNzVhYywgMHg1OTkwZmE1MywgMHg4MzNkNmVkYiwgMHg4ZjQzYTg2YiwgMHhmYjVhZjRmYiwgMHhiNDRhZjU4NywKKwkweDViZmMxZjFmLCAweGYwZGQyNzg0LCAweGJjMDE3ZWVhLCAweGMxYzU5Nzg3LCAweDc0N2YxNGNhLCAweDg5NDNiZWJkLAorCTB4N2FjOGFmMDgsIDB4MGJiYmQ1YjMsIDB4MTNmNTUzZjgsIDB4MGFmMWYzZmYsIDB4ZjkwODZmODQsIDB4Yzc4YTY5MTksCisJMHgxZGU3NDY3ZCwgMHhiYmVmZDEzNCwgMHg1ZjcxNTliNywgMHhiNGE2M2M2NSwgMHhmNzdlMDE3NSwgMHhiNjlkNzBkYiwKKwkweDBhZDE2ZTY5LCAweDU4OTkxZGU1LCAweDMxNDU3MWJlLCAweDg2YzcxNTM5LCAweGFmOTQwOTI1LCAweGE0ZmZhNDRjLAorCTB4NDkxMjJlZmQsIDB4ZGYwMGE5YWQsIDB4ZWRhMzZjZTcsIDB4ODY5Y2JjY2YsIDB4MjQ2NDVjZjgsIDB4Y2ZiYTI2NzUsCisJMHhlYmMzMjM0OSwgMHhhN2NhMTY5OSwgMHg4ZGNhN2MyOCwgMHhjOTY3Yzg1ZCwgMHhlODA0MDg3ZiwgMHg4NWFiYjY4NSwKKwkweDIwZTk0Yjc2LCAweGUxMDMwNTQ5LCAweDAzNGI3YzA2LCAweDM5NTg0MGI3LCAweGI1YWJjZThiLCAweGZmNzQyNDQ1LAorCTB4ZmFhN2NhMTAsIDB4Y2ZkNTlmZDYsIDB4NjkzZjgwYzcsIDB4MzM3ZjI3YmUsIDB4NTdlOGUxNmEsIDB4NjNlZTJkZjksCisJMHg1OWM0YThiYSwgMHg1MWY5ZmE2MywgMHgxOGU3YWM0NywgMHgxMmMzZjNlMywgMHg0NDY3N2UwMSwgMHhmMjk5NzJlZiwKKwkweDhmYzRjNWI3LCAweDA0OTJiMWZjLCAweDQ3OGVhOWYxLCAweGJiZTMyZGY5LCAweGUxNzdjNjI2LCAweGZjMGQ3NTE5LAorCTB4OGFkMjQxZjcsIDB4MzgwYWIzN2MsIDB4Zjc3YzYwZDIsIDB4Yzc3N2NhMzEsIDB4MDk3N2NkMGUsIDB4YjgwN2M5YTksCisJMHhiOGI3ZWVmYSwgMHhmODAzY2UwMCwgMHgyYWVmZTcyZiwgMHg4YzBkMTMxZSwgMHg1OGY4ZGYwZiwgMHhmZDc5MjQ0MCwKKwkweGVhZGQ3ODcwLCAweGNmYTBlNzNlLCAweDA2ZTI0MmU4LCAweGMwZmJlN2ZlLCAweDgwNmU1MjY0LCAweDUxNjQ4N2IyLAorCTB4NGViMGVjZjgsIDB4YWQwMjdlZjksIDB4MGRjNDQ5ZjcsIDB4OTNiYTMzN2MsIDB4ZmJlODViYjgsIDB4ODdlMjY2OWQsCisJMHgyODI2YTZmZSwgMHhjMGQzOGZkOCwgMHg3OTJmNDJlOCwgMHgyZmFkM2U0OCwgMHhlYTBjZWUyYSwgMHgxM2M0OWY2MCwKKwkweGI1YmRmODE5LCAweGQzYmZmNTkzLCAweDgwMmJiZjRhLCAweGFlZmMwNGVmLCAweGE5MTM3YmVmLCAweGJlZmIwYThkLAorCTB4ZTkxOTkwZjgsIDB4NmI0MWYyZTgsIDB4ZDBmMjg4YzAsIDB4ZmRhMzYxOWIsIDB4NDhkMWZjMjUsIDB4ODczZGJkNjAsCisJMHg3YmU3YzhhYywgMHgyYjZlNjRmNCwgMHg0OTEwZWY2ZCwgMHg3M2UyMmI0ZCwgMHhkODI3ZjYyZCwgMHgyN2U5ZjEzMiwKKwkweDY4MDQyOWM1LCAweDA1M2RiODU3LCAweGFiMjEzMmI2LCAweDY1NTc1ZjkxLCAweGYyODNkZTc2LCAweDgxNTE5Zjc2LAorCTB4ZDZkOTdjN2QsIDB4NzRjYTFjYjUsIDB4ZTVhN2UyM2MsIDB4ZGIwNTY1MmYsIDB4Y2Q0ZmY2ZjksIDB4ZWY3ZDA5ZmYsCisJMHgwYzVjNThmMywgMHhhMDdjZGViYSwgMHhhM2Y4YTMxNywgMHg2ZjE0NGM3YiwgMHg0MmM3YzQzMywgMHg1Njc5ZDI4ZiwKKwkweGUwNjQ1OWE1LCAweGZlMzJkM2M3LCAweGI0YmRmZWY0LCAweDNkN2VkOWZjLCAweDlmZGUwMjMxLCAweDY0OTczYTlkLAorCTB4MmEyN2NkMGQsIDB4NWQ5M2ZhMDMsIDB4NjRiYWY0NjEsIDB4ZDU1Y2I2YWYsIDB4ZGFmYjJkYWEsIDB4OWI1NGU1YjQsCisJMHgxYTI2NzFkNSwgMHgyYWViYTZmNywgMHhiMWEzMjdhNSwgMHgzYTE2ZDNlNiwgMHg0NmFiZTM1ZiwgMHg5NjdmOWJlNCwKKwkweGUwMzY5OWJkLCAweDMxZDBiYTBiLCAweGUzMzFhMzgwLCAweGUwMmY1OGZjLCAweDAxNzNmZGI5LCAweDFiNGE0NjllLAorCTB4YmUwYzc5OWQsIDB4OWIyZWFmYjAsIDB4NzljODY3ZTcsIDB4ZmU5N2NmNDMsIDB4NDcwODc0OTksIDB4OTNjMTg5YjcsCisJMHg5YjFmMDdmMSwgMHhlZTU3ZGQxMiwgMHhmNWQwOGVjZiwgMHgyNTFkOWEyZiwgMHhlZTM3YzZhZiwgMHhhMDQ1ZjFkMiwKKwkweDg5MWNlMGFmLCAweDlmNmRlYjZmLCAweDVkYjE2MzA5LCAweDU5ODlmMjI1LCAweDU3OWQxZGI0LCAweGI3YzY1NmM1LAorCTB4MThjZTkyOTcsIDB4NTRkNTBmZDgsIDB4MTQ1MTMxYWYsIDB4Nzg2MzZjM2UsIDB4MmExYjUyNTgsIDB4MzY3ZmQyMGEsCisJMHhjMjQ2NGJkYiwgMHgyNWFmYTUzYywgMHgxZDdmZTAwZiwgMHg4N2E2MWJmNCwgMHhiMWQzNjZkZCwgMHg3MmNkN2JmNiwKKwkweDM2OGUwNmI3LCAweDk2ZDdkOTRkLCAweGVkODc3NzI0LCAweGZmN2MyNTk3LCAweDYwOTA0NTEzLCAweDdhZjk0YjNkLAorCTB4NmY3ODJmN2UsIDB4OTk1NWY4MDMsIDB4ZTg1MzBjYmEsIDB4ZmQ3ZWI3ZjgsIDB4YzVlZmNhMDUsIDB4NzVjNmNhMmIsCisJMHhkYmQ3MGI4ZiwgMHgxNzU3Yzg4YywgMHhmN2M1ZWEzZiwgMHgzOTliNmZhZiwgMHhjZGI3ZDcxZiwgMHhjZmRjMDBhYywKKwkweDllOTAxNGVjLCAweDAyNWFhNzE3LCAweDViY2ZmYTI2LCAweDViOWY0YzZkLCAweDg0MTNiZjRjLCAweDg0OGM3MDgxLAorCTB4MzMxZGQ5ZGIsIDB4Njc0NzQwOWQsIDB4ZGZjZjFiMDksIDB4NTllNGU0Y2EsIDB4OWIyYmMyOTksIDB4Y2VmZTgxYjUsCisJMHhlYmJlMzFiNiwgMHgzM2YzM2FkYiwgMHg3NzhiNGZlMCwgMHg2NzkwMmU4YSwgMHgxYWVhYzNhNCwgMHg3ZDNjYTA0ZSwKKwkweGY0MGI0MmU0LCAweDBhNmUyOTc3LCAweDZiYmNkZjZkLCAweDdiZTIyY2JhLCAweGZkODAxM2QxLCAweDZmM2JiOTIzLAorCTB4NWRhNWVmYTUsIDB4NzhkZjUwMTMsIDB4Y2Q5MWE3NjMsIDB4MGU3YTY2ZDMsIDB4ZDdlYjcxZDYsIDB4OTJjN2VhMjIsCisJMHgyZjQxNzg4ZSwgMHg0N2I4MzY2YiwgMHg3NjU1N2VjMiwgMHhmMDAzM2IzYywgMHhiMjU2NzY3MiwgMHg0MmZmZGIwZSwKKwkweGMzYzAzMjIwLCAweGRlMDEyMmI2LCAweDBmMjQxNjJmLCAweGFkOGFjZmVjLCAweDcyZTFhNTk1LCAweDExMTM2Y2Q5LAorCTB4MWUzMjUzNWYsIDB4ZTBiMmU4NGIsIDB4ZTQwN2JhN2UsIDB4YmE0ZWQ1NTQsIDB4ZDlmYzYwN2YsIDB4YWY3ZmJkMWYsCisJMHgzZDNmN2MyMywgMHg2MTc0NDQ1YywgMHhiZmM3NzY3MiwgMHg1ZmMxM2QyMCwgMHgzNGY4MDhiMCwgMHhlZWY1YzU4MywKKwkweGJhYjQ2MzJiLCAweDgwNzI2YTJmLCAweDVkNWUyZTVmLCAweGEyMGYyMzkzLCAweDhiZWRmN2JmLCAweDhlMWY3NDFkLAorCTB4NGQ4MzY0MjYsIDB4YjA3NTU3MjAsIDB4ZmQxYWVkMzEsIDB4ZGZiZDI4NzYsIDB4MDM3M2FiOTIsIDB4ZTIyZTRkZGMsCisJMHgxMzNlOTY3ZSwgMHhhMGJmNTQ4ZCwgMHhhMDI1ZjA3YywgMHgxYTc4Nzg4ZiwgMHg5N2QyM2UxMCwgMHg4NzdkZWQwZiwKKwkweGNkOTI2YmFlLCAweGM3YTA1M2ZiLCAweDA3Y2VlMjBjLCAweGI5MjEyYmJjLCAweDAwNWJhYTk4LCAweGM4MGZkNDYyLAorCTB4YjdkMzIzMGUsIDB4NmRlZmE2MjQsIDB4ODFjZjI3ODksIDB4ZmI4ZWEwYmUsIDB4MWUyZmU4NGIsIDB4MWIxZWMyZjksCisJMHhjM2U3YjdlZCwgMHg1YzAxOGVhZiwgMHg4ZmNmZDNhYiwgMHhiYmVjZjkwNSwgMHhhMTQxODVmMiwgMHgwYmI0YjVlYiwKKwkweDJlMmRhZmM4LCAweGYxN2EwMTBmLCAweDBiMjJjZmI1LCAweGFjZjlmYWYyLCAweDQwZTRjNWNmLCAweDZhZmViYWU0LAorCTB4Y2ZiNjdhNjMsIDB4NGU3ZWMyMTEsIDB4NmRmZWQ5ZGIsIDB4ZGNmYTMxYjYsIDB4MDAyYTIyYmUsIDB4MjNiYjc1ZmMsCisJMHhmZjQ5ODY2MCwgMHg3Yzk0ZmJiZCwgMHhjNTM4YTU0NSwgMHhlMTg5YTU3MywgMHg1N2U3YjRkOSwgMHgzYmU4MTE2ZSwKKwkweGExYzNjODIwLCAweGQxZmRiMGFjLCAweDIwMmYzMTViLCAweGRiM2U3MWQyLCAweGYyYzdlZDkzLCAweDkxMmUyOWZlLAorCTB4ZmNmNjU5ZDYsIDB4ZTAwYjJlYWMsIDB4NDE3N2E2ZDQsIDB4MmJhYjhiN2IsIDB4ZDlmN2Q2MDYsIDB4YjAzMTUzOWUsCisJMHgyMjNkOGFiZSwgMHhmMDIyYmJhZSwgMHhiY2MyYzI3OSwgMHhiYWYwYmU3ZSwgMHhjMDBkZmRlMCwgMHg0YjA0Mzg4YiwKKwkweDZjZjg3ZjM4LCAweDA1ODRhNWNmLCAweDk4Mzk1NDE2LCAweDFjMWMyYzdjLCAweDI5ZTQ0NzJlLCAweDViYjc4MDlkLAorCTB4Mzk3ODYxNmYsIDB4MDA2MzBiZjcsIDB4MzMzOWRlZjgsIDB4ZmM2MTVmOTUsIDB4Yzk5NTljZjYsIDB4MjYzNjkzYjMsCisJMHg0ZDY5MDkxZiwgMHg1N2QzNzkwNywgMHgwNzU3M2ZiZSwgMHg2NjQ4ZmZlMywgMHg1YTE4NzdlYiwgMHhmZTNmNjFkMywKKwkweGU3ZWRhMGI3LCAweDA5MWQzYWMxLCAweDU5NWVkZTUwLCAweGY5NDM0MTQ3LCAweDVlMTdiOWQxLCAweGZmN2UwNzQ5LAorCTB4YTRhZmIzZDksIDB4MmZjZDg1OTcsIDB4NzlmNTNiZjIsIDB4OWFlZGM2ZGUsIDB4MjZkZGE3YTYsIDB4NTExOTVlM2EsCisJMHhjMmE2MGJjNywgMHhlMzJlNjU3OCwgMHg0ODVmYzAyNywgMHhkZjc3NzRkZCwgMHhjZjYyYzliZSwgMHhhYjY0ZjZmMCwKKwkweGFmNjBmOTFiLCAweDFkMDBhOGNiLCAweDU2ZjVkZmFhLCAweDgwNGRiOTQ0LCAweGZlNDI2MjE3LCAweDA2MmVkNjU3LAorCTB4ZGI5ZmQwOGQsIDB4ZmEwMWNjM2QsIDB4NDQ3ZGZhYjYsIDB4NDYzOGFlZmYsIDB4ODA5YjQyNGYsIDB4NWU3NDY5NzYsCisJMHg3N2YxZjkwOCwgMHgyZDRlZjdlNiwgMHg3ZjllMjkzZSwgMHgzMmFlNzgwMSwgMHgxMGE1OGU4NSwgMHhjMDAzMGZhNCwKKwkweDkxNmQ1MGNkLCAweGFjMjUzZTQwLCAweDdhMTVmNDYxLCAweGJmZmE4NzQ0LCAweDAxNjlkOTIxLCAweDRlNmI3NjdlLAorCTB4NmU4ZWFkNTQsIDB4Y2M1NDQ3NDQsIDB4YTdmNTQyNTgsIDB4NmM1Y2U0YjQsIDB4NzQ2NjJmZWYsIDB4ODEyMDRmZWYsCisJMHg1OTBjMDIzNSwgMHg5NmJmMjAyMywgMHgzYTljNWU5OSwgMHhiNDBkYzg5MSwgMHhkMzNiM2RmOCwgMHhiNWM0OWM1NywKKwkweGJjNDZjYzU1LCAweDUwN2ZlMDBiLCAweDA1Y2FhMWUxLCAweDhmZTAxZmEwLCAweGQyMTMwNGU3LCAweGEwMmVkMDhmLAorCTB4NWFlYTI4OWUsIDB4NDNiZjQxZTcsIDB4NWQ5ZTUzZDEsIDB4M2QxOTUzYjUsIDB4NDlmZjk1ZjUsIDB4ZTc2NDU0ZjQsCisJMHg5ZTgwM2JmNCwgMHg5M2QyMGFiYywgMHgzZDM4MzRkMywgMHhiYmY5MDIyOSwgMHgwN2JmMTNkYSwgMHgwZTQ0YWNlYywKKwkweGVmOWM0ZGFmLCAweDMxMzExZTg0LCAweDE5MDUwYWJmLCAweGY3OTRiN2FjLCAweDA0YjI2YTU3LCAweDJlMWY5MDQ1LAorCTB4MzBhZWY5ZmQsIDB4ZDUwNzYyN2IsIDB4NDk0ZWMxNmYsIDB4M2U5ZTdkMDIsIDB4NTdjY2Q2NTMsIDB4YjNhNDZmMTAsCisJMHhlOGRhZWMwYiwgMHg4Zjk0MjYwOSwgMHg5OTlkNzVlYiwgMHg4ZTI0YWZhMCwgMHg3NDA3ZDlhYSwgMHhhZjJmMzg5MSwKKwkweDY3ZGEwZDYwLCAweDA3OTAzNmE5LCAweGJmZDE1YjIwLCAweGQzZDhhMmIwLCAweDJmYTYxNzFkLCAweDJmYTgwODc0LAorCTB4YzZlYTNmNTQsIDB4OTlkYjUzZjcsIDB4NjYxYmUwN2UsIDB4ZDdkNzdkNDAsIDB4Y2YwMWY4MjYsIDB4MDA0MzFlZDUsCisJMHg4MTdhYTBmNCwgMHgxYmZjMDFmOSwgMHhlZmQ4MGFjYywgMHgxNTY1MzZjZCwgMHhiZmYzNGZkMCwgMHg1ZDNmMmUyOSwKKwkweGY5ODA2ZjQ3LCAweGQ3NDk3YTEzLCAweGJkMDA5ZmFlLCAweDNlZDA1ODU1LCAweGI2MDViNjZmLCAweDc3NzY4MjJkLAorCTB4MDNiYjYxZTcsIDB4ZjhkOTEzN2YsIDB4ZGY4ZTA5YzMsIDB4N2E4YWRmOWMsIDB4MGE2ZGYzN2EsIDB4ZmM3MDAzZjMsCisJMHgyNzcyY2YzNSwgMHhhODFmNDBkOSwgMHhlNmU3ZWVkMywgMHg5ZDkyNzcxNiwgMHg1MmI1ZWZiZSwgMHhjYWYxZDBjMCwKKwkweDg3ODhjZDFhLCAweDk5YzE5MTY0LCAweGZjOTg5YWM0LCAweDRjMTdjODE5LCAweDg5ODRmNzAwLCAweDRmNGQzMTFjLAorCTB4YjdkM2JlYTMsIDB4ODBhNzI5Y2YsIDB4NmZhZjMyNzIsIDB4ZDBlM2E0Y2UsIDB4M2NmMzU4NzksIDB4OWY3OWEwOTksCisJMHgzYzdlNWE2YSwgMHgwMjRmZDI4YSwgMHhjNDZlODdmOCwgMHhlYmQwN2UyNiwgMHg1NjRjNjFhMywgMHg0ZjcwYzM3NiwKKwkweDkyNDRlOGU5LCAweDg2Y2VmNmExLCAweGNhYzM5MzY5LCAweGY3ZmY3ZGJjLCAweDY5ZjZlZmZmLCAweGZiNzcyOGE5LAorCTB4NTRkYTYxZWEsIDB4Yjc2NWFiMWUsIDB4OWQ2YmNlOTksIDB4YTI1ZWJmYjUsIDB4NGRhOWFlZmEsIDB4ZDdmYmRmNjAsCisJMHg4YTlkM2VkZiwgMHgxZDQxNWVlOCwgMHgzNzdhY2VmZiwgMHg0NGNjYTlmOCwgMHhmY2Y4NWUzMywgMHhmNWZlODhhNCwKKwkweGEyOGI3ZmI0LCAweDAyNTY1ZmI2LCAweGEwNTUzZGZkLCAweDczYWVkZjk2LCAweGQyNmRmOWQzLCAweDkwNDNmYjZiLAorCTB4YTBhMWVmZjIsIDB4NGY4YmU3OGUsIDB4ZGM5YzY4NmEsIDB4M2Q1MDE3YWYsIDB4ZGYxZjYwMjEsIDB4ZmJhYzFmYWYsCisJMHgwNmU5YjRhOCwgMHg3Y2I0NTYzYSwgMHg1NzcyMDBjOSwgMHg4NzNlZjM5NSwgMHhlNDQ3ZmE4MCwgMHhlZjg5N2Q3ZSwKKwkweDU3Y2NlZmQ3LCAweGJhM2Q1MTg3LCAweGJmNDdhMzQ4LCAweGRhYmU0NzY0LCAweDI0YjYwMzM1LCAweDZmOTAzZmI1LAorCTB4MTBmMzFlZmIsIDB4M2VhOGU3ZDAsIDB4ZmE4ZWMwNzIsIDB4NDczM2Y5YzgsIDB4ZWNjZjdkNjgsIDB4NTE0YjFjYmYsCisJMHg3OWIyZGRhMCwgMHhhZWZhZjdhMCwgMHhiZWI3NDg0OCwgMHhhMDQwNjJiZCwgMHhmYmUyNmI3NCwgMHhjMGYxY2E4NSwKKwkweDllOWZhMTcwLCAweDlkMzk5NDFlLCAweDA3NDRmY2RhLCAweDhjMjFkZjc0LCAweGQ1N2QyM2Y3LCAweDcxNGRkZmE0LAorCTB4M2VlNzEyOTksIDB4YjdlZjhmNjIsIDB4ZmRkNzIzMWIsIDB4MGZkOTlkOTEsIDB4NmRlMmRjYmUsIDB4MWVmZmQwMzksCisJMHhkMDllODA4MSwgMHg2MTMyN2I5MCwgMHg5ZjRkZGEwMSwgMHhmYjBjMmMyNCwgMHgyOWVkYjJhZSwgMHg1ZWU1Njc4NCwKKwkweGZjNzBhMGZkLCAweDFjMjIyZWM4LCAweGVjYmUwZmFiLCAweDJlNzFiZTA2LCAweGE4NGYyMDIwLCAweDM3ZjUwMjkwLAorCTB4ODU0NTcyZDIsIDB4NTI0MTM0MGUsIDB4MmY3Zjk4MTgsIDB4MzVjYzhmYWMsIDB4N2Q3NGUxOTAsIDB4NDA5YmQwNDEsCisJMHg5NzdiZGE4ZiwgMHgzNzU4NDZmZiwgMHhhZmEwNGZmZCwgMHhhMTE2N2JiNiwgMHhkNzNlZGQzYywgMHgzMDk5MjE2NCwKKwkweDA4NjViMmNmLCAweDBkY2EzOTA3LCAweDJkYzg2ODcwLCAweGFhNzE4MjRlLCAweDQ1OTBjZDY3LCAweDFjN2FhN2E4LAorCTB4N2EzZjU3ZDQsIDB4ZDMwYzQwNWYsIDB4ZjRkYTFiMDMsIDB4MTRlN2EwMjUsIDB4NTdlZTdkNTEsIDB4ZjY2OWRlNzQsCisJMHg3NDVjNGJkYiwgMHhmYjg4YTcxZiwgMHhlNWE2MWZmMiwgMHhmMWYwNDMyZCwgMHg2ZTRjMWM0NywgMHhmZjFlMGFkNCwKKwkweDVmZDEwYWY3LCAweDZmZmRjMjQ3LCAweDZmNGM2ZDE5LCAweDY4Mzc2OGJjLCAweGVkMTdhZmZjLCAweGQ5Mzc3ZTEyLAorCTB4YzgxNTM5ZGYsIDB4MTVkNGIwZTcsIDB4OGZiNGZhMGQsIDB4ZmIwNzNmYjgsIDB4Y2EyYzc4OTksIDB4YzYyNzg4YjMsCisJMHgxNTJiMWM4ZiwgMHgxYzk5MmJmNCwgMHg4MDZmZWI1ZCwgMHhkYTEyYzlmYSwgMHg3YWVhNDQyZiwgMHhhOWVkYzYxMiwKKwkweDA4MWFiODc3LCAweDdlNTAwN2RmLCAweDllZWQwZjM0LCAweGFiZGU3MWY5LCAweDVjNDU0NzQwLCAweDM4MzllZDRmLAorCTB4YWYyY2JmMzMsIDB4N2ZhYWVmNWYsIDB4MGQ1ODFhZDYsIDB4M2NhYWQ0ZmMsIDB4ZjRmYzAyNTEsIDB4MjRmOTA5NGIsCisJMHhhNzNhODUzMSwgMHhmZjJhN2VkMiwgMHgxYjdlYzc2YSwgMHg3MTUxYmRhMiwgMHhlNmY1ZmU3NCwgMHg4MWQwM2Q0MCwKKwkweDc2YzQ0NWJmLCAweDIwYTZkOThlLCAweDczZDlmM2Y0LCAweDJmZDAxNmQ2LCAweDAyMjY4ZWY1LCAweDE1Y2Q0Yzc0LAorCTB4MWM5ODg3ZjQsIDB4ZjJkMGEyMWUsIDB4NDk3Y2ZmNTQsIDB4YTExMTc5MDAsIDB4YmYwNTRjY2YsIDB4MGUyYmRhMTEsCisJMHhmMzE2MmJmNCwgMHg1MjljMzFmZCwgMHg2ZTEzMTljMSwgMHg3MWFiZGE4NSwgMHhmMWNkZmFmZCwgMHhmMDQ4ZTZhZiwKKwkweDc0N2JkNTUyLCAweDlkZTdlNjI2LCAweGMwOGEzNzM2LCAweGU4NmQ2NGY4LCAweGNhZmMwZTk4LCAweDdhMDI0ZThlLAorCTB4ODBhYjU1NzAsIDB4YmVlNTU0ZTMsIDB4NjViYjAwNjQsIDB4ZGZkYjJiNDksIDB4NTA2NzZlM2UsIDB4NWU4M2E1ZjgsCisJMHhjZDE3MWQ5MSwgMHg0NjVhY2JmNSwgMHg1OGYzYTRlZiwgMHg0NWY5YzAwYSwgMHg2ODQyNGY4NiwgMHhiZGI4NmIzYiwKKwkweGQ1ZDk4YWIyLCAweGY3MDMzZmJjLCAweGJmNzE1Nzg3LCAweDU4ODQ5NTExLCAweGQ1NGUzNjNmLCAweDY3ZjM1NjMzLAorCTB4NzFmMjdiMTMsIDB4NmU5ZDA4YjcsIDB4MmY5OWUwMTEsIDB4ZWFiNmZjNjgsIDB4ZTMxYzdhNzMsIDB4NDM0N2IxM2IsCisJMHg4NmZmNjAzMywgMHhmZjgxN2QyOCwgMHg2YjMwOWI2OCwgMHg3ZDc0OWJkOSwgMHg3MjhmYzZkYiwgMHhhNGU2MGE4MSwKKwkweGMwMTYyNGU0LCAweDE0OGE0YTdiLCAweDlmNmQ4NWVlLCAweDIxYmEwMGNmLCAweDZiZjcwNDI1LCAweGIxMTRkYjc1LAorCTB4NDAwZGM3OGEsIDB4YWU4YzQ4NWYsIDB4YzRmYTgxNjksIDB4M2U1MTcyMDcsIDB4ZmMxZjFmODMsIDB4Yjg3MDc3ZmYsCisJMHhmZjk4NTkyNiwgMHg5ZmRhYjljZSwgMHg4YzFlNTBmOSwgMHgyNmY2NTllZiwgMHgwYTI2M2Y4YywgMHgxNDg5MTVlMywKKwkweDNlM2I1NjM3LCAweGU1N2ZjMGViLCAweDQwNDdmOTI0LCAweDk1NGIzYWZlLCAweDFhOGY5ODAyLCAweDg5ZDc4YTM3LAorCTB4NDNjYWNjMGYsIDB4YmI2NThlM2UsIDB4YTZlZjcwNGIsIDB4NmNlM2JiY2YsIDB4ZGY2YTJlYjgsIDB4ZTE3Y2MwOTUsCisJMHgwZGRiODA3ZCwgMHg0ZTI3NDc2MCwgMHg3MTg3YzlhZCwgMHhjZjA0NGUyMSwgMHg4NGEwYTQ5ZSwgMHhjZjJhNjhmZSwKKwkweDZkM2EwNTlmLCAweGFmMDBjYTMzLCAweDNlYjdiNmQyLCAweDZhNWI3OTAwLCAweGU4MjJhZDIyLCAweDRiN2ExMTNmLAorCTB4ZjM1ZGNjNTYsIDB4MmY3YjZlODAsIDB4MzhmNWQ5OWMsIDB4MDNlZWViY2MsIDB4NDdlMjJmMmUsIDB4N2FkYzhmYWIsCisJMHhjZmNiZDMwYiwgMHg4MGFkMWIzZCwgMHhmMzliYjkxZSwgMHhiMjNmYWE2ZCwgMHg5ODJmYzEzOCwgMHg0N2E5MTkxZCwKKwkweGI1YTcxMjNlLCAweGZmY2FmYTRiLCAweGNkOTIzZDcwLCAweGY3ZTc0ZmNmLCAweGY3N2YxODZjLCAweGI3YWZiYjcxLAorCTB4YzgwYzYyZTIsIDB4ZjQ3ZDU1YWYsIDB4NTE3ZmU1NDYsIDB4YjY1MjllYmYsIDB4ZDgxM2ZhMjcsIDB4NDU3NjdkNjcsCisJMHhiNTIyM2U4NCwgMHg4NDA1MzhiMCwgMHhkYWVmOTBkOSwgMHhlMmZlM2MwYywgMHhmZjA3Y2U3NiwgMHhmOTA3MmQ4NywKKwkweGEyZTdmMWNmLCAweDE3Mzc0MGZkLCAweDk3YThjZDViLCAweDEwNDMzNjQ5LCAweGIyZmI1NWU2LCAweDgwMTNhMDMxLAorCTB4NzU3ODcyMGYsIDB4ODE4YWI4ZjAsIDB4MzllYzZiYzcsIDB4MDcxNDI4MGEsIDB4ZmJlNDFlMGMsIDB4MmNmNDk3ZmUsCisJMHg3ODEzMTJhZSwgMHg1ZTVhMzllMSwgMHhjNzg5Mzg3YSwgMHhlZmY2MDg1ZCwgMHhmMDhkMTgzZiwgMHhjNGE1MWE1ZSwKKwkweDdmNGJmZjQyLCAweDllMjA0NzFkLCAweDAzYzc0YmQyLCAweDdiMzdjZjNjLCAweDRkNzgwYTdmLCAweGM5ZmViMjM2LAorCTB4YzU4NTQ2NmIsIDB4MzYzOTgyNzksIDB4MDA5Njg3MGEsIDB4ZTU0ZWZmZDMsIDB4YmEwNjgyZWEsIDB4MTdkMDE2ZWUsCisJMHgzNTQ2ZGZhMCwgMHhkOWQ2YzJmZSwgMHhjNTg1MjFiYiwgMHgwMTE5NDAwZiwgMHhmYjllYWNiYiwgMHhjYWI4ZDVlOSwKKwkweDJiODdlNjYxLCAweDUzOTNmMWU3LCAweDAzM2QxN2IzLCAweGExNWFiNGExLCAweGI0ZWMwNGE2LCAweGQwNTMwZGNiLAorCTB4ODlmY2JkNmYsIDB4YWYyY2Y4NTksIDB4MTdkYmZhZDMsIDB4YWY3YzFhOTEsIDB4M2Y1NTI3YzYsIDB4MTk3MTE5NzcsCisJMHhlZmRjZmU5OCwgMHg3ZDUxZDQzZiwgMHg4YTkzYTk0NiwgMHgxMjY2N2U0MSwgMHgwM2M4MzU3OSwgMHgzN2IxNGZjNSwKKwkweGU5NmIzZTgxLCAweDgxNzg5NDEzLCAweDkzYjY5OTQyLCAweDgwNTExZGVhLCAweDNhYjU3NWVmLCAweDVhZmU1Yjk0LAorCTB4YTlkYTFiOWQsIDB4MWM1NmYyZjQsIDB4NTdmZDIzZjMsIDB4NTA5N2YzMWMsIDB4MWM2MDA3NTAsIDB4ZTdhYjU5ZjUsCisJMHhkZmRlN2VmZSwgMHhjMjBiYTIyYSwgMHhlN2IwMjc1MywgMHgxOTJhNTkzYSwgMHhmZGFiN2U0YywgMHg0YzZiZWFkNSwKKwkweDRlNmY0MDUzLCAweGZiM2ZhMWQzLCAweDE3M2RjMWIyLCAweDFjZjZjNWZkLCAweGI1YWQ1M2M0LCAweGQ1ODRhZWE2LAorCTB4NmNiYTVlZTMsIDB4ZmViMDc5MGUsIDB4OTYyOTg5NjYsIDB4M2YwM2IxNDQsIDB4ZmE2Mzg4ZWQsIDB4MTZkYzI0NDUsCisJMHg5MWNiNjkzNiwgMHg4MGNhOTA3MSwgMHhiYzRlNWNiNiwgMHg1OWIyOTIyMywgMHg3ZGZjMjBkYywgMHg5NzY3ZTcwNywKKwkweGJjMzkzMjFiLCAweGJiZTAwNjVkLCAweGE1NTdmYWVhLCAweGQyZTliODMyLCAweGFkMmIzM2Q4LCAweDQxZDAyZTc4LAorCTB4MzI4NWY4MTYsIDB4YWFmY2M5ZTEsIDB4ZmYzODI1NzQsIDB4MDIxZDliYWMsIDB4N2NjNDQ3ZDIsIDB4OWU4YzZkNmIsCisJMHgwZmNjZjVmYywgMHgzZmNlZjdmOSwgMHhlMzY3ZGU3MiwgMHg3NjNlZjgxMiwgMHg1NmJlMjEzYiwgMHg1ZTMwMWIyZSwKKwkweDEyZmVhZDdhLCAweGRmNmI0MzkzLCAweGYxZmY5NWY2LCAweGU3YjMyZGY2LCAweDJmYzY0NWViLCAweGE5N2M4Yzg4LAorCTB4Mzk2YjY2NGMsIDB4MGI5ZWI4MjUsIDB4ZDUwYjdiYzIsIDB4ZjUxZDYwMWIsIDB4OTFmMDAxNjIsIDB4NzA1OTc3YTksCisJMHgyOTg3ZDUxZCwgMHg1NWY1YTExZiwgMHg4M2E1NzU4ZiwgMHhlZTJlYWY1YywgMHg4MGJjODFjYSwgMHg2Y2MyZjg0OCwKKwkweGQxOWY5NTI1LCAweDZhMGU2NTc2LCAweDUwZGU4MDhmLCAweDBkODc4ZGE3LCAweGQzYmEwMzhjLCAweGVlYzFlMzFjLAorCTB4MmRlZmI1MzksIDB4Y2NmYjVmOTAsIDB4YmZlOGJmMjgsIDB4ZmY2MTE4OGUsIDB4YmU0NGNjMWYsIDB4M2JjNTg5ZjYsCisJMHhiZTNlZTIxYywgMHhlN2FlZTBhOCwgMHg2MThmNDEzMywgMHhiYjU1NTQ3YSwgMHhjNGY0MDViMSwgMHhmOGIwZGFiMiwKKwkweDUxYWZmYzFhLCAweDc1MjM2ZjFiLCAweDkzYmJmNDc2LCAweDhhZmJlZDY2LCAweDBkZGYxMTFkLCAweDIxMzViZjg4LAorCTB4YmMxOGI2NWUsIDB4NTNiZjYxMjMsIDB4ZjFmMTg0MzksIDB4MDIzYTk1MGIsIDB4NWQxNzJkZjgsIDB4NWQ0ODQwOGIsCisJMHhmM2Y1NmIzMCwgMHhhZjg2NTYwYiwgMHhmZTU1MGU2OSwgMHhjZjAwNzJiOCwgMHg3ODAxZTU3ZCwgMHg5ZTAwZTU3NiwKKwkweDFiYzQ3NWNiLCAweGUwMTU0ZmRlLCAweDI5NzdlMjk5LCAweDk3ODVmM2M3LCAweDllMDBlNDI3LCAweDkwOWJlZmNmLAorCTB4YTJkZTc4MDMsIDB4YmVjMzcyNmYsIDB4NGI3YjI1OTksIDB4ZDNkZDhlMDAsIDB4NDE1ZmE4M2QsIDB4ZDFmNjEzYmMsCisJMHg3ZGUzZDJiNSwgMHhmNDY0ZjM3ZCwgMHhmMzkwZGY3OCwgMHg1YmY4YzdmYywgMHg4YjhmOTI4NiwgMHg5NWExZTZmYSwKKwkweDkyODMwZThmLCAweGNjYTBmYzBhLCAweDM5NDZmYzY0LCAweGZhODM3ZjA5LCAweGY0NDY0Y2YzLCAweGVhZmUxYzdmLAorCTB4MWJjYzQ2ZDIsIDB4M2Y1MTE3NjgsIDB4MmMzYmZiNTEsIDB4M2Y0MWIzNzksIDB4ZDM4MWZjM2EsIDB4ZWU4NjE3ZTUsCisJMHg4YWZjMGFkZiwgMHhlMGZjZmZjNSwgMHgwMmVkNTE2NywgMHhlNDhjYmY1NSwgMHhmYmU2M2ZjNywgMHhmZGMzYjM3YSwKKwkweGQ4M2JmZDk5LCAweGI4ZmZhYWE3LCAweDA1MzFiNzgyLCAweDc3YmQzMTJlLCAweGZlNjJlMDhmLCAweDI3ZjQ1NmUzLAorCTB4OTdjYzc3NTcsIDB4NjlmYzVmYzEsIDB4YWI4ZmY5ODAsIDB4ZmY0N2NlNWYsIDB4ZjVlMDY1NzEsIDB4ZGZjODBhNjAsCisJMHg3YjA2NDE3NiwgMHgyN2NmNzJhNCwgMHhmZDJjOGIzMSwgMHg3M2I1MmY3NiwgMHg4ODZlODA5YiwgMHhmYTQ3MWI0OSwKKwkweGE2MmE3MDM0LCAweDNlZjM4MmRjLCAweDc2OGVmMzBkLCAweGY3NDAwYzg0LCAweDIzZmVkNGQ1LCAweDUyZDU0OTc0LAorCTB4NWJmNDE4ZTgsIDB4MTdhODIwZWQsIDB4ZWQ2OWI2MTQsIDB4YjgwNTRhNDEsIDB4MDMxZWVkZWUsIDB4ZWRlZGRkZjIsCisJMHg3NWY4MDA0MiwgMHg5OTliYzE4MiwgMHhhNDhkNzIwYSwgMHhlNDA3MThjYSwgMHhjMzk3NmNmYiwgMHhlOGYzMDFkZCwKKwkweDAzYmI2YjhmLCAweGEzM2NiMDhlLCAweDQ4YjE2ZGFlLCAweGUyN2E1ZGJmLCAweDZkOWY4MTk2LCAweDI2N2U3MmIzLAorCTB4ZjNmYjdmMjEsIDB4MjFhMDViMGUsIDB4NzNmODZmNGMsIDB4OTUwOWU5ODAsIDB4NDQ5MWJlNmEsIDB4ZDdjNTEyODIsCisJMHgwZmVlMzlhMiwgMHhlZmMwZGYwMSwgMHgzZWZjMTE4MywgMHhhM2M2YWNiYywgMHgzY2ZjNDA5NywgMHhkZTFkZWUyMiwKKwkweDFmOGUyZmFlLCAweGY0ZDZmNzE2LCAweDk1ZjI2YTQzLCAweDViZGM2ZDQyLCAweDc2NjdlZjViLCAweDJiMGZkZDMzLAorCTB4NTdlOWZhMGEsIDB4YmY0YTgzYzUsIDB4ZWQxZmRjZDUsIDB4MTZiOTM4YWIsIDB4MjZkN2Q3ZTgsIDB4MmY1ZjYwYzgsCisJMHg1ZGZhMzE3NSwgMHhlMzJmZWQ0YSwgMHg5ZGZiODFkOCwgMHgwZGZhNTJiNCwgMHhlZDQzNzdlMywgMHhlNDIyOGZmZiwKKwkweDdiZmY0N2QxLCAweDNiNTA2OGYyLCAweGY4ZGY3NGZkLCAweGViYWJkZjZjLCAweDdkZjdmZDU3LCAweGQ4MTc2Y2ViLAorCTB4NTc1ODhjYmUsIDB4ZTkxYWRkYTQsIDB4Y2VlZDU3NzcsIDB4NWY4N2U1NmIsIDB4YWZjM2YwNDUsIDB4YTFmODhmZmUsCisJMHg3ZTI4N2UyOSwgMHhmYzZiOGRhOCwgMHg3ZmYwZmNkZCwgMHg0Y2YxYmUzOSwgMHgzYTMxZDNjNywgMHgzMzJhMmFjYSwKKwkweGQ3YTY0ZWZkLCAweGUyZjEzNWI5LCAweGNkYzVhMjE5LCAweGNiMjJhNmUyLCAweGJiOGM4ODk3LCAweGRjNzgzMzJiLAorCTB4ZDdlN2VkOWQsIDB4NWYxMTE2NWYsIDB4NWMzZTNjNTUsIDB4NDE3NTYxZDUsIDB4NjJjYjBhZDMsIDB4YzY0NmNmOGMsCisJMHhmYjI0MWY0ZiwgMHgyMjhhMDA2NiwgMHg2MTRiYThlMywgMHg3YjdmNjcxZiwgMHg5ZTNmMzUzYywgMHg1Y2U5NDdjNSwKKwkweGExNGYyMTMyLCAweGRmY2I1OGE4LCAweDhhNWNiNzVmLCAweGJiZTE4NmYzLCAweDAyMWE4ZjM4LCAweDQ5YjVkMDgzLAorCTB4ZDg3YjEzZjIsIDB4OTllMzViZmIsIDB4Y2YzYWZkM2UsIDB4NDgxYTcxZTcsIDB4NmNhMWU0MWQsIDB4YzFiYjQ2YjIsCisJMHg1OGVhNzE4ZSwgMHg5YzRhNTFiZSwgMHg3OGZjNGE2NywgMHg5ZTFjZWZlMCwgMHg3NDRmYmYwNywgMHhlOGNmMmUxNCwKKwkweGY4OWY5MTViLCAweGUwMmUyY2FiLCAweDQ3MWZhYTdmLCAweGY3MDc3ZmVkLCAweDlkMmI1ZTgzLCAweGRkYWYxYmRmLAorCTB4N2ZlNTdkZjcsIDB4NTcyZmJlZDIsIDB4ZTM3YmZiYzcsIDB4NmMyOTViNzYsIDB4MjA4MWZiMzQsIDB4Mzg4MDllZmQsCisJMHhiYTQwZTY1MywgMHhhMTlmYWExZCwgMHhiYzc5NzdlOCwgMHhlZTNjNTk2NywgMHhjYzU4ZjczYiwgMHhmZTQ2YmQ5ZiwKKwkweDNhMTg1ZDEyLCAweGIyMjJmZTA1LCAweDdmODBhOGRmLCAweDI4MjVmYzEzLCAweGI4OTMxYjE3LCAweDAyMmFlZWJkLAorCTB4MmViZTQzMzgsIDB4MGM3ZDZiZTQsIDB4YjQzNDljZmYsIDB4YjdkOGQ4ZmUsIDB4ZDhmZTk5ZmYsIDB4ZTkwN2ZlNTcsCisJMHg5ZWM4Mzc4ZiwgMHhlZWNlYjA4ZCwgMHg5MDFjZWUyOSwgMHg3NGFjZWI2ZiwgMHhiZTE3NjBmZSwgMHg3NjhjZjJjMCwKKwkweGVlN2QxOTk4LCAweDkyNWQxODEwLCAweGU0ZDc3MTE1LCAweGFmMTNkOTc3LCAweDg2N2I5ZmU1LCAweDJlZmZmNzljLAorCTB4YTdmZDZjZmYsIDB4YzRiZmNmZjEsIDB4ZTg3NTFmODAsIDB4MmYyY2ZjN2UsIDB4Y2RkM2I4YjcsIDB4Nzc2NDY5ZTMsCisJMHgwN2RiN2Y5OCwgMHhmYmY0NjZmOSwgMHhlYWJlN2MyMywgMHgyZTVjOWRmYiwgMHg0N2RjMTI1YSwgMHhmZjljMWY4MSwKKwkweGIxMjI2NGQwLCAweDY0MjllNTU0LCAweDYzZGFiMTdjLCAweDc1NDJmOGMxLCAweGE5N2JjYjJiLCAweGZmMjA4YzdlLAorCTB4NjlmZjA2YWUsIDB4NjcxNWY4MWUsIDB4MjZmN2QwMTEsIDB4MDAyN2JjZDksIDB4YjIzZWViY2YsIDB4ZjA1OGM1ZjgsCisJMHhhMDI2Y2ZiYiwgMHhjODdjZjVkZiwgMHhiZDk2N2ZjYSwgMHg3YmVmNTA5ZCwgMHgxOWUzMGJhYywgMHg2MWNmYjNjZCwKKwkweGQ1ZDE1NWRlLCAweDBhNGI2YjRiLCAweDQ3ZThiZTcxLCAweDRkNDkxODcwLCAweDFhZmU5ZTM4LCAweGQ1OTZmMmNmLAorCTB4NzgzZTk1ZTcsIDB4N2ZhZmQxYmIsIDB4MTFlNTgyYmUsIDB4MTk2ZTFjZmIsIDB4NWZhYTExZmMsIDB4NDRlOTVhM2MsCisJMHg3ZWY1NTMzZiwgMHg4OTE1YjRhNiwgMHgyN2U0M2Q2YywgMHhkNTRmNDhhOSwgMHg4M2U0YTdmYiwgMHg5YWI0OTRmZiwKKwkweDJkY2Y0MWYzLCAweGVkMDVhM2ZhLCAweDI2OGZmM2JkLCAweGZjYzQ5ZTYzLCAweDk4NTllZjM4LCAweDcwMzBiNWFmLAorCTB4MTlhNWU4MWIsIDB4NzdkMDFjNzQsIDB4MmRiYmVmY2YsIDB4ZjJhZGU2MWYsIDB4M2ZlMDJkYmYsIDB4NThiN2VkYTcsCisJMHg2MjcxN2ViNSwgMHg5NWRkZjk2MiwgMHhmZWE4YTdjZiwgMHhiN2Y0MTBmMywgMHg2MjQzZWY4NSwgMHgzNTlhMmE2OSwKKwkweGY3NTdiZWM4LCAweGMzYThhMjdiLCAweDYwN2YxM2ZlLCAweGNhYjkzOGMyLCAweDg5ZThiNjBmLCAweGNmZGQ5NGQ3LAorCTB4Y2YxMGZlNDcsIDB4M2MxY2ZiZGUsIDB4MTY3ZGIxNWYsIDB4NjVlMTRmY2IsIDB4ZjBhYTdmMGIsIDB4ZmU5OGVjZGMsCisJMHgxZmM3OTgwNywgMHhjYmViYTVlMiwgMHg0YjA1OTMwYiwgMHg3NWViM2M3OCwgMHg3ODg3ZmJjMSwgMHg4MDMyY2YxNiwKKwkweDhhMzE0ZTdkLCAweDJiZTg5NjdlLCAweDkyY2U3ZjRjLCAweDU2NDc0ODBkLCAweDNlMzBkZmJhLCAweGY0MDhlOTQzLAorCTB4Y2VhMWM5ZjgsIDB4OWQ3NGIxYTksIDB4OTM4MzlhYzMsIDB4YWY4N2JlMDEsIDB4ZDI0ZjEwZTgsIDB4OWYxODEzYWMsCisJMHg3OGQ4MTU4OSwgMHhmNTVkOGRkOSwgMHgyMmZmYzAyMywgMHhhMDMzNzdiZiwgMHg4YjkyNjk1MiwgMHhjOTM3ZDQyMSwKKwkweDQwNGU0OWU2LCAweDJlNGQ3YTdmLCAweDdiZmM1NzhjLCAweGVjOTNjYjNkLCAweDQyYmY0Njg4LCAweGNjNTJmYTczLAorCTB4YzhmOWVjOTMsIDB4NDg5Y2ZlODgsIDB4ZmQzZWEwZjksIDB4NDVlNjM1NjQsIDB4MjdmZGI1NjYsIDB4ZmJhYzA5YzYsCisJMHhkNGRjMGQwNSwgMHgwYjA0ZjhlNywgMHgzYmY5NWY4YiwgMHhjZDZlNjA2NywgMHg1N2YyMDc2NCwgMHgxODhmZTNhOSwKKwkweDI1ZWE5NjlmLCAweDU2YTQzY2UwLCAweDgxOTlkNmVmLCAweGU4MjJhZDdmLCAweDJjZGUxY2U3LCAweDE5NWYwMGViLAorCTB4ZjdhNjJmM2MsIDB4N2FjNzVmZjAsIDB4ZTM1MTRlZDEsIDB4ZDc5NjAxMDIsIDB4MGI1YWVmYTQsIDB4YWFiNDk3ZjYsCisJMHhlMDNmMTZlYiwgMHg1NzRkYmY2MywgMHg4NWZkMDc5ZCwgMHhkMmNmZDFhYSwgMHhjZjgwNGQxMSwgMHhhZjY1YjQ2NywKKwkweDMzOTY4OWJlLCAweDgzOGM2NGVhLCAweDkyNWExZWY1LCAweGJhNTU3ZTgxLCAweGFjODNlMWNlLCAweGU1ODEzZDMzLAorCTB4MTgxMzM5MjEsIDB4ZDExZDQ4YmQsIDB4ZDI2NzkwM2EsIDB4ZDE4MmUyNjYsIDB4MzJkZDZiMzMsIDB4Y2I4Nzc5ZjgsCisJMHgyNWI5ZDIxMiwgMHg3MDAyNWJjMSwgMHg4MDdjZTY4ZCwgMHhiOGMyODhhYywgMHg3ZTYyNTVhMiwgMHg4ZjhhZWIxMSwKKwkweDQ0ZTcwMTdlLCAweDAzZjNmMTc2LCAweDllOGYwZjQ3LCAweDdhYmRmZThkLCAweDVmYjgwMDQ5LCAweGM5YmNiMWI2LAorCTB4NzNkYTA5MzksIDB4M2VmMGZkMDcsIDB4NTlhN2Y5OGEsIDB4ZTRjOWZmMWQsIDB4ZmEwYjFkMTcsIDB4M2U4Y2Y0OTcsCisJMHgwYjQ3N2FhNCwgMHg1ODc3MTFmOCwgMHg3YjZmOThiZCwgMHhjNDUwNmQ3MywgMHhmZGRjOTkzOCwgMHg2NjEyODk2NCwKKwkweGYyNjU2Y2NmLCAweGIzMmY3YWE0LCAweDk3ZWQyM2JmLCAweDU1MjM5MzZmLCAweGQyMzk1YTA5LCAweGU5MjdmZTU3LAorCTB4YWUxMjJiMjcsIDB4NWEyMTJlZDMsIDB4NGY1MjJlN2IsIDB4MDZkZmI0ODksIDB4ZmQxMWRiZTgsIDB4YThhZmE1MGQsCisJMHhmZGM1Mjc3OSwgMHhkOWJkMzBlMywgMHg3ZTQzZWFhYSwgMHhiMTRlNWU0ZCwgMHg0YzRiOGQ4NSwgMHhkYjI3ZmVkYSwKKwkweGNjOGY5NjY1LCAweGQ2MTI3NGYzLCAweDkwMjRhYjI4LCAweGQwNDZmZjU3LCAweDBiZTZhNzJmLCAweDVlNTk4YmY5LAorCTB4Zjk0NzVmOGYsIDB4OTdjNDI2NWYsIDB4Mjg0ZjMwOWEsIDB4MDEwNTA0ODUsIDB4MDQ1ZDY2ZmQsIDB4N2M4NDRiYmUsCisJMHhlM2RkZmEyMSwgMHhlZjM4NTkwOSwgMHgyNzU1YzQ5ZCwgMHgwNDU0N2YyMiwgMHhmMjE5Yjc5OCwgMHgzNTJmMzA0YywKKwkweDhjMTE2ZGIwLCAweGM3MDViNzczLCAweGM5OWU0MzMxLCAweDcwMTU0ODM4LCAweDNhN2UwMzZmLCAweDExYzU4MmI1LAorCTB4MDVkY2E5OTIsIDB4YzYxZTRkZmEsIDB4OTczY2QwZTgsIDB4ZjlhODliZTUsIDB4ODdmZTZhMjQsIDB4MGU2Mjg3MGEsCisJMHg4YjExZTRkZiwgMHhkNWVmODEzMiwgMHg0MDE3ZGUwYiwgMHgxODE3YTljZiwgMHg5ODFiZmM3YywgMHg0NmQ5YTExZiwKKwkweDZlNWE2OGY1LCAweGY5ODUxY2FlLCAweGY1ODRiZDdlLCAweDIxZDBhZmVmLCAweDgwZjlhYTVkLCAweDc2MTVjM2NkLAorCTB4MjI2ZmU1M2UsIDB4ZjljZGVmZWEsIDB4NDA2NGJmMmMsIDB4NWMwNDRhMWUsIDB4NmU5NDNjZDUsIDB4ZjYwM2I3YWIsCisJMHhlNGM4YjI2ZCwgMHhhMjM3OWFhOCwgMHhmZTE4NDlkMiwgMHhkZTNhNjZmYywgMHhiZmE2MGVmNiwgMHg3MDE4NTcxNywKKwkweGI3OTViZDFkLCAweGI3YjFmZmEzLCAweGNlNDA0NzUyLCAweDE5MWJiNzE3LCAweGI3OGM0NWRkLCAweDA0ODFhZTdkLAorCTB4NjAyOTVmYTEsIDB4OGU3OWZjYzYsIDB4NWZkMzZmZmYsIDB4YzE3MzVlMjksIDB4NjU3NDdiYmYsIDB4MGE2ZWI4YzksCisJMHg3YTU2MzdlMywgMHgxNjZiZDlmMCwgMHhkN2M4NDU1YSwgMHgwMWU2ODczMSwgMHhmODljZGE0NywgMHg0OWE0M2JhMywKKwkweDRhMTM1NzkwLCAweGVjYzkyODE3LCAweDU0YTBmZTcwLCAweDM3YTA3MmEyLCAweDk0MzFmNDNlLCAweDljN2M0YzVmLAorCTB4NzY4Nzg3OTUsIDB4ZDFmZGI0MDksIDB4ZDhhNTFkYTcsIDB4OTkzMTY4MWUsIDB4OTgyNTNmOTAsIDB4ZWI5NmZkNGIsCisJMHg0MDY0NmY5MCwgMHhjMGE3YzZiZSwgMHhkNzQ4YWE4NywgMHgwYmY0NGVkYSwgMHhjODU2Zjk3MSwgMHg2Njk5MjFmOCwKKwkweDk0YmYzMDBjLCAweDc3YjFmZTgyLCAweGVlNTEzMjkzLCAweGY2YjM3MjViLCAweGFhN2Q0Mjc3LCAweGI0NjlmZDExLAorCTB4ZGRmZGU5MWUsIDB4YmQ1ODUzZTEsIDB4NTI0ZWYwYzIsIDB4ODM2ZjJjYWQsIDB4OWY4MWY5NzQsIDB4MDUzOTliYmQsCisJMHhiMDU1ZDJmZCwgMHhmNGZlYTgxZiwgMHgwNTdiYzVhNiwgMHhlODQxN2FmMCwgMHhlMGZiMGU1YywgMHg5YWZmZTlkZCwKKwkweGUxN2RmNDA3LCAweDAxODY0ZmMwLCAweGEwNjk5OWJmLCAweGZjMjBmOTdhLCAweGUzMjc3MWU1LCAweDRiN2FiZDJmLAorCTB4NzlmYjQwOWQsIDB4MTIxNWUyZGMsIDB4ZTg4M2Y5NjksIDB4OTUyMDMzNzksIDB4MTRkYzZlN2MsIDB4MjAwZDFjMDMsCisJMHhlMDQ0MTdmZSwgMHg3ZjFjZjE3NywgMHg1ZjRjMzliNiwgMHgwOGYzNGRiNCwgMHhjNmI5Zjc5MCwgMHhlZjExZTZjYywKKwkweGJmYThkYzk1LCAweDc3MDhlNzc4LCAweDExYWZmNWQzLCAweDk0NDMzZWI4LCAweDE0M2JiNDU4LCAweDhlZWMxNjI1LAorCTB4YzIxZTJiYTUsIDB4ZWY5MTZmYmMsIDB4OWJhZDQ5ZTcsIDB4N2Y5N2QwNDUsIDB4NGRmOGYyYjcsIDB4ZTVhMWIwZDIsCisJMHhmNjExNWRmMCwgMHgxMjU0ZmE4NSwgMHg4YjY2M2FkOSwgMHg4ZmEwMThjYSwgMHg2ZmUzNDJiNSwgMHgzZGUwOTM0YSwKKwkweDMxZTliM2EzLCAweDVmMjEwYTJiLCAweDRkNzQ2NjdhLCAweDIyY2RjNjIxLCAweGY3ZDJjN2RmLCAweDIzNjU2MTc5LAorCTB4MTRkNGI3NmIsIDB4M2QyODk3NGEsIDB4NjFkZWNkM2IsIDB4ZjNjYjk3MDAsIDB4ZmIwZTU5M2YsIDB4YmJmMjc5NzcsCisJMHhjMmJlNDMxZiwgMHhkNmUyN2FiYiwgMHhlMjRkM2VjMywgMHgxZjJhNDM3MSwgMHgzMmM3YmYwMSwgMHgyODZlMmM2YywKKwkweDAzMWE5ZDZmLCAweGVmODY2Y2U1LCAweGUzMDA0OGRiLCAweGQ4NzNhNWQ0LCAweDQ4M2JjMTM5LCAweDZkMTc2ZDY3LAorCTB4NTdhOWQzMzcsIDB4ZWNlOGMyYmEsIDB4YmU1YjQ1MzYsIDB4MmU1YjU3MjMsIDB4ZmYxMTc5ZTUsIDB4YmZiZWQyZTIsCisJMHhjMDI0ODQ5MywgMHg3ZTI2ZjdmZiwgMHhmZGZjMjIzZCwgMHgxYmVlY2Q4ZiwgMHgwYWFmZmU2MSwgMHgzZmQyOGYyYywKKwkweDg3YThjODg5LCAweGU4M2YwNDNhLCAweDQ5NWZhMzA1LCAweDU5MjZlN2U2LCAweGI5Y2ZkZmJlLCAweDQ0Y2FmMzFkLAorCTB4N2IwOWY1ODIsIDB4MGYyMWJiNGQsIDB4OGIwN2Y1NWYsIDB4OTNiNDdlYmMsIDB4YzhlYzMyOTgsIDB4ODRhZTUwOGYsCisJMHhlODM3OWUwNCwgMHgzOTA5MThjMCwgMHg3ZTY2NGNiMCwgMHg0MGQ2ZGE1MSwgMHg1ZjMwMzlmYiwgMHg1ODI0Yjg0MSwKKwkweGEwMTZlNDc0LCAweGQyMTM0MmViLCAweDI5OGE1MTc1LCAweDI4ZTBlODBhLCAweDNmMWYyM2E3LCAweDU1ZDJhMzg3LAorCTB4OTAzYzQ0OTEsIDB4OWU4NzQwYmYsIDB4ZjU3N2NmMDMsIDB4ZmZmMDExZjIsIDB4NzgyMzNmZmEsIDB4Mjk5MDhhNGUsCisJMHhmMjMxZTYxMiwgMHg4NTU5MDhiMSwgMHhiZDM5YTdlNSwgMHhlZGY5NTUxZSwgMHg2ZmM4NDliZiwgMHg3MDFhYjRkZiwKKwkweDE2YmY4OTVmLCAweDQzOWY4MDViLCAweDVmZDY5OTFiLCAweGYzODUxYzZjLCAweGRkMDNmNzUzLCAweDA5MWNjM2JkLAorCTB4ZmRlNjcyZTgsIDB4NDQ5ODNhNGEsIDB4MmFjYWNjYWUsIDB4MzhmODYyYmQsIDB4NDEwZmU0MDEsIDB4NzM4ZDUyM2QsCisJMHhiZWZhOTlhNSwgMHg0OTc3YzM3MywgMHg3NGJiOWZiYywgMHg4YTRjZGUyYywgMHhkYzlkMWM3OCwgMHgzZjdjYzQ2NSwKKwkweGJmYjQyZjVlLCAweGY3ZTAyNWY1LCAweGRjNGNjNGYxLCAweGI3ODg3Yjc0LCAweDM0NDZlODBiLCAweDRiYTAxNGI4LAorCTB4ZGFlNWNlOTUsIDB4OWQyOWJmNDMsIDB4NzljOWViMDQsIDB4YmI3M2Q3MDQsIDB4ZTRmNTg2NTUsIDB4NmI5YzMyNTIsCisJMHhhZTNiYTdjNywgMHhmNDYxZmEwMCwgMHhlZmIxNDYyZSwgMHhmYjc5MmFlZiwgMHgzZThjMjkyNiwgMHhlYzU1ZjdlOCwKKwkweGY3ZWQ2OGZiLCAweDNkYmRmYTRlLCAweGZhMThmYmVjLCAweGVmYzBkZTdkLCAweDcyMjIwOTA5LCAweGJmZjNlNzZlLAorCTB4ZWU4OWU3OWQsIDB4YmE4MjlhYjEsIDB4OTE3ZmQwYjEsIDB4MTNiZjQ1ZDIsIDB4YzNmN2Q4MTMsIDB4ZTA3YmU4NjIsCisJMHg3Y2RhYjlmYiwgMHg2NWQxMzIwYywgMHg4OGRlM2NjMiwgMHhjMjk5OGJmYywgMHhkNzQwNDk2MywgMHhkYWFhOTliNywKKwkweDZmZmY2OGJiLCAweGQ0Y2NmYzcxLCAweGYzODBiZjc5LCAweGNiY2Q2ZjY2LCAweDU3ZmMwMzc5LCAweGJmYmEyNjI1LAorCTB4MDU1ZjYwYjIsIDB4N2FkMjAyZDcsIDB4YjE5Zjc4YTcsIDB4ZGRmZWUzNjUsIDB4MmQ1ZmY0MDEsIDB4NjlkODQ3N2EsCisJMHg2OWJlODJmOSwgMHhkYzRjYjJkOCwgMHhlMzEzM2IxNywgMHhjNTVmY2UwNywgMHhhMDBlYmFiZiwgMHgzZWE3YTAwMywKKwkweGI3OTg4ODNhLCAweDY3NzIyZjhhLCAweGVkYWMyNjJiLCAweDNjMDg3YWE0LCAweDkwODRiZDU1LCAweGFjOWY5NjFhLAorCTB4OGJhZmY1YTQsIDB4NTMwY2NiMTIsIDB4MGJkMDMwY2QsIDB4ZTNmNGFhZGUsIDB4N2I2OTlkYmUsIDB4OWU5N2YzMTIsCisJMHgwNGJlZjI0ZiwgMHhjMzdiOWRmMywgMHgzNDEyZTllNywgMHgwMTFmY2U3NiwgMHhkZjNhMjA3ZSwgMHhjZTVmZmQ1ZiwKKwkweDA2YmZkNTU3LCAweDY2N2VlN2U0LCAweDBlZTdlNGQwLCAweDcxZDQ3ZmI1LCAweDg5NTdhMDdkLCAweDgyZGJjNzkwLAorCTB4MzliZWI2ZjksIDB4YWI5YzE3MTYsIDB4NjhiZTQxZjAsIDB4NTA3OWM2MjEsIDB4MzAyNDNhYWYsIDB4OTgyZmQ1N2QsCisJMHhhZDc0MWViOCwgMHhlOTg0YmM3OSwgMHhmYTdkNTU0YiwgMHhiZDBmMjY5MiwgMHhiYmNkOWYzOSwgMHhmYTgyOTk3OSwKKwkweDZiMDJhYmQ2LCAweDk4NGY5ZmVmLCAweGQ3OGIzNjNlLCAweDVlYjE5NDJmLCAweDZlNmY1N2NkLCAweGU2YjVmZTYxLAorCTB4ZDAyODQ3OTcsIDB4NTBhM2Q1MmYsIDB4YWU1ODkzMWUsIDB4ZmUzMjY1YTcsIDB4OTE0OTNjZGEsIDB4NDRkYzBjZmQsCisJMHhhZmNmZTg0OCwgMHhmYTY3YTJkZSwgMHhhYjlkNzZkZiwgMHgwYzQxZjMwOCwgMHhmMTYyM2Y1NCwgMHg4NjlmYzY1YiwKKwkweGZkMjNmMWIzLCAweGFhMjc1ZjcwLCAweGMzZjMwMDc2LCAweDQxZmY5NWY1LCAweGIyNTliODdlLCAweDdmNjkzODk3LAorCTB4ZTlkY2YzMGIsIDB4MTc5ODJjZmEsIDB4ZmE1MWM3ZjMsIDB4MjA0OWQxZGMsIDB4MTg2NmFjNGQsIDB4OTFiN2NkZTgsCisJMHhkOTc0Zjc5YSwgMHg2ODA2OWY0OCwgMHhhNTM0NzczZiwgMHg3ZDBkNmNjZiwgMHg4Y2YxOWQxYSwgMHgyMmJjYzIxZiwKKwkweDFkMjQ0MWY5LCAweDY1NzhjNTY2LCAweGQ2ZDlhN2U4LCAweGQwNmFjN2ZhLCAweDJlOGRkYjM3LCAweGYyY2E3Zjk2LAorCTB4NDBmOTIyZTksIDB4NDgxNjdjZDgsIDB4NTEwZTNlNmMsIDB4MDczOGY5YzQsIDB4ZWNiNWNmOWIsIDB4NGNmYTcwOTMsCisJMHgwYzNmNmMyNCwgMHgyNTEyNWZiNSwgMHhmNDE2YjdlMiwgMHg5YjFmOTdlZiwgMHhiZDYwMjNiZCwgMHgyZDY2ZmI3ZCwKKwkweGNjMDYyZmIzLCAweDdkMjBiNDViLCAweDhiMmY3M2RkLCAweDk5YTJmODM3LCAweDQzYjg4MzVjLCAweDE2N2YxZDEyLAorCTB4N2E5ZWZmMWYsIDB4ZmNmNzg3NDYsIDB4NGI3NDgwZDAsIDB4Zjk4NDFmYTcsIDB4YjNmNWU2Y2YsIDB4ZGYzMGFiZGEsCisJMHhmZDM0ZjY2OCwgMHhmZjBkMmVjOSwgMHhlN2JjMjM3NSwgMHgxYzczNzZmMiwgMHgwMmQ4N2FmOSwgMHg3MWI1NGE3MywKKwkweGIzZjdiOTg1LCAweGE0ZGRjNmI4LCAweGJkZjMwZjQ2LCAweDlmYjY4ZTY3LCAweDczZjFhNGI5LCAweDdiOWE5ZmM4LAorCTB4NTRmZGY2YmYsIDB4YzliOWRmNjcsIDB4Nzg4ZjEwMTEsIDB4YmRlMWRiODMsIDB4N2VjMGJmNzQsIDB4ZjE3ZTMzN2EsCisJMHg3ZTk0NjU4ZSwgMHhhZjM0ZmM0NywgMHhkMzAzZmMwMCwgMHg2Y2Y3MmExMywgMHhiN2U3ZTVhNiwgMHg5YmYyYzI4ZiwKKwkweGQxZjgzZjA5LCAweDJiYmY1MGJiLCAweDIwZDNjYjA3LCAweDA4ZWMwYzE5LCAweDZmMjA4ZmQ4LCAweDNkYmRlZThhLAorCTB4ODZmYjhlOTMsIDB4OGNiYmY3OTksIDB4YTMzYmRiZTUsIDB4NjhiM2NkYmMsIDB4MmNkOGU3M2IsIDB4YzY5YzFiY2MsCisJMHg0MmVmNGRmOSwgMHgwZGM3N2Y1NiwgMHhmYTFhOTY1NiwgMHhiOTdlODI4MCwgMHg3OWExNTE2OSwgMHhmMjI3ZmY0MCwKKwkweDc5MDA1MGZmLCAweDc4YjJkM2FjLCAweDUxZDVlMGI5LCAweGY4NDM3ZTUwLCAweDRkZDgxZTdjLCAweDA5MTY1NTNkLAorCTB4Y2M5ZDVmZTAsIDB4NzNhMzk5ZmMsIDB4MGE0OGUwODUsIDB4ZGU3NjY5OTcsIDB4NTc1YjE1N2YsIDB4YzkwYmMxNjksCisJMHgxNWE2M2ZiMCwgMHhiYjQ2N2ViMywgMHg0MzY3ZDRhNiwgMHgyYzQ1ZGQzYiwgMHg2MjliMjRmNywgMHhmYmFhMWY4MCwKKwkweGZiOTM5OTZjLCAweGU0OWViODA3LCAweDE1ZmVmYmUxLCAweDcxYjUyN2Y3LCAweDQ5OGY1ZmI0LCAweDNkMTJjMTcwLAorCTB4ZmI0MTNmMTMsIDB4MzlkODU4OTQsIDB4NTMzYjhmMmMsIDB4NTRlODdmMDIsIDB4ZGM3M2NiMzcsIDB4MDJhYzhhYmEsCisJMHhjZGViNjQ3ZCwgMHhhZDBkNjk2ZSwgMHg3YTIyNmE5ZiwgMHhjZTk0NmI5MCwgMHg5YjdhMDExZiwgMHhmNGYzZTEzYiwKKwkweDhiMmUyMDE4LCAweDNhNTVjZTk2LCAweGY3ZDJhNTlhLCAweGQzMWQyZDM0LCAweGU3MTNmOWZkLCAweGNmZTc2ZmY4LAorCTB4ZjczNjNhMWEsIDB4N2E1MGYxZDMsIDB4MWQ1NzlkMzksIDB4YjQ5YmJmZWUsIDB4OWM2ZmFhZjIsIDB4MzkxODdkODgsCisJMHgwMWZjNTBlZSwgMHg2N2Y5YzJmZSwgMHg3MTVhZmNmZiwgMHhiNjQyYTViZiwgMHhjN2VjMzY1OCwgMHg2ZTNmNzUyNiwKKwkweDc0MThmODAzLCAweDI0ZmU3ODlkLCAweGMyOGQ3MDQzLCAweGU4NDM5YjAzLCAweGQyZmNlYTE1LCAweDMwNTkyN2MwLAorCTB4MjdmMDVlNzAsIDB4ZmIxZDdhYTksIDB4OWIxZDgwNzMsIDB4NzdlOWViY2EsIDB4OWZlZjYyNmUsIDB4MDVmZjFkMTcsCisJMHhkOTZiN2ZlNCwgMHgzNTBhNzY3YywgMHhiZDcwOWY4YywgMHhhYjdmYjU1YSwgMHg2OWI2ZjVkNSwgMHhjNTE0NWJkNywKKwkweGMxM2I3YmNlLCAweGU5M2U4MTRmLCAweGYzN2Q1MWZjLCAweGE4M2MwNmJlLCAweDM5NzFmMWViLCAweGIxZTRjNzNkLAorCTB4ZWVkYWU4MWEsIDB4ZmQyMzk1YjYsIDB4NWZmODlmN2MsIDB4YTBlODdkMDYsIDB4ZTYxODdiYzUsIDB4ZWZlNzU0NzksCisJMHgyMTYzZmIwMCwgMHg5MjVjNjM3MSwgMHhjZTZiYzdkMiwgMHg5ZDQyZmQzMCwgMHhhYTljMjQ2ZiwgMHg5MTlmZTA4NywKKwkweDRmODQ4OWViLCAweDUxM2FkZTNmLCAweDc3Y2Y1MzlmLCAweDFhZjdhZGY1LCAweDIxZWFhOWQ3LCAweDNmZDY4MzBlLAorCTB4MWNmZWU3NjQsIDB4MDBkZmY3M2IsIDB4MmUzYzgxNDUsIDB4ZDAyZTUxMjUsIDB4MDRiYWE3ZWIsIDB4ODk0YTI3ZDQsCisJMHg2OTcwZjkwOSwgMHg3NmRmOTMwOSwgMHg1NDM3ZDMwYiwgMHhmZWQ0M2YzOSwgMHg4MjE2ZjViOCwgMHgyOTc0YTlmYywKKwkweGQ4YzllN2UxLCAweDMwZTkyMmJhLCAweDgyM2Q3NDkxLCAweGQ5NDk5ZTc2LCAweDM5ZjYwMGI2LCAweGZmNGEyNWU4LAorCTB4Y2MyZDRiZmMsIDB4YTljNTdiY2YsIDB4ZjFhZWY1Y2EsIDB4Y2FmYmQ3MjAsIDB4ZDc3YWU0MDMsIDB4ZjMzN2UwNzgsCisJMHhhM2ZjNmQ0NCwgMHgyZmYzMGFmNCwgMHg3YzEwYWZkYSwgMHgxOTNlYmE5NiwgMHg1ZWRkNzIwZiwgMHhmODFlMzVkMiwKKwkweGVlYjFhZGQ2LCAweDFmOWYwMTJmLCAweDM2MWY5OGViLCAweDI0ZmE4ZTEyLCAweGJjNWZlYTlkLCAweGRjOGNmYTI2LAorCTB4ZTk1YzZhM2YsIDB4OTRkNzhiNGQsIDB4MWZkZmJlMzQsIDB4MmNlODQxNzEsIDB4MzhhZTQ2ODIsIDB4Y2RlZmY3OTksCisJMHhmNGE2M2EwNCwgMHhmMjg5NzI4OCwgMHhjMTU3YWJjNywgMHg4MzdmODM5OCwgMHg1MzJjNzIxYywgMHgwOTJkOWJmOSwKKwkweDJlMDhkYmY4LCAweDhmOGMzZGM3LCAweGRiNzU4YjljLCAweDBkMWM1ODkzLCAweDg3MTBmMmUxLCAweDU3MmU3NGNiLAorCTB4ZDExMGVlMmYsIDB4OWRjZDNmOWYsIDB4ZGNiODM0ZmIsIDB4MjRmNWM3N2QsIDB4OGRkN2ZiODAsIDB4NWYwOTcxNzIsCisJMHhhNTNhNDVkNywgMHhkMTdmYjQyMCwgMHhlMmM2N2E4YSwgMHgxZTMxY2JiNywgMHg4ZWFiNjIzMSwgMHg3MjcyNjEyOCwKKwkweDczNGEyMDY0LCAweGJkZThjNDdmLCAweDRjNzk0ZDc2LCAweGZkYTZiMjZiLCAweDlhNTk2ZDBkLCAweDI4ZTBmY2ZhLAorCTB4ZTNiOGZkNGQsIDB4ZjhmMjlhMDUsIDB4ZWQzNTFiY2UsIDB4YWM1MDdjMjcsIDB4YmFlYTRmMjksIDB4YTZmZWQzNWQsCisJMHhjYTZiNjc0ZiwgMHhhYzEyMzAxNCwgMHgwMjgzYjlmYiwgMHg3ZGQ3NGVkOSwgMHhjZDNlZTg3MywgMHg3ZGJkZmZmNywKKwkweDBiODg3MWM2LCAweDMzZjZlMjllLCAweDczM2JiYmYxLCAweGE4MTYxYzI5LCAweDRjYTU3Yzc0LCAweDA4NTA1ZmRiLAorCTB4MDdjMDQ1MGEsIDB4NDY4MmRmZDgsIDB4ODUzY2Q3OTYsIDB4ZGZiYzJlNDIsIDB4N2Q1YTRkODUsIDB4NmQ1NmYxNjIsCisJMHhmMzdkYTJiOSwgMHgwMzk1ZTA1YSwgMHg4YTZhMjFmMywgMHg2NDZjODhlMSwgMHg3OTM0YzQzZSwgMHg3NWU4MGViZSwKKwkweDJmZDUxMjc2LCAweDkxYzYzMDQwLCAweDFhYzdjODM4LCAweDFiN2ZkZjZhLCAweGIwYzg3M2ZlLCAweDZiM2ZjMzZmLAorCTB4N2E4MGQ1YmYsIDB4N2ZiN2UyZmQsIDB4YWZhNDE0NTUsIDB4ZmUyZDRlOGMsIDB4ZmYxNjhhY2QsIDB4ZmM1YWI5ZDEsCisJMHhmYzVhNWQ1YiwgMHhlMmQ0NGVjNywgMHhlMmQ2ZTZkZiwgMHg4YjQ0YWUzZiwgMHgxNjhmNzhmZiwgMHhiNTczODlmZiwKKwkweDZhZjI0ZmY4LCAweGExNTI5ZmYxLCAweDhkNWE3ZmM1LCAweDJiMTlkZjE2LCAweGY0Y2NmOGI0LCAweGZmYmRhODNmLAorCTB4MmFmZjAyMjQsIDB4N2JhZWNjZmYsIDB4MTQ5ZWUyMjgsIDB4ZDE4NWQxMWQsIDB4MGI0NzRhODEsIDB4ZTc5ODE1M2MsCisJMHhjN2U5YmMzMiwgMHhlOTIyNzE5YSwgMHgzYThkZGE4MSwgMHhkYThiODdiYywgMHg2Yjg1ZGI3MSwgMHhiZGNhMGZhNywKKwkweDQ5MWE1ZmQwLCAweGYxMjQ0ZjFmLCAweGIxM2IxODNjLCAweGVlZjk0NTVmLCAweDQwZjgxMjdlLCAweGYyYTE1ZWE0LAorCTB4MWUzOTcwYWQsIDB4YzUwZWZmNmUsIDB4MjdjODA2Y2YsIDB4MjkwZjBmNmUsIDB4MzYxZWMwOWYsIDB4NDNjM2RiZjcsCisJMHg5MDg3ZTlkMSwgMHg1M2ZhODM4ZCwgMHhlZThiZmEyMywgMHgyZTNjZDk5NSwgMHhlMDQ5YWJjMSwgMHhmMjI1ZmQ1ZiwKKwkweDA0ZTkwZmJiLCAweDdlZjlkMjI3LCAweGUzYTFlYjA4LCAweDFhMzUxODdmLCAweDIwM2YxOGZkLCAweDdmY2ZkNDQxLAorCTB4NzQ4NzE5MDgsIDB4NzEyMDA3YjAsIDB4MTNlNzNlOTksIDB4NWNlNTlmMDUsIDB4N2VlNDJmNWUsIDB4ZGJkOWE3MGUsCisJMHgxNmE5NzAwNiwgMHgzMDA5MTliZCwgMHg5ZTI3NmE2ZSwgMHhlMjI3MjIxZiwgMHg4NTVlZTlhZSwgMHg5NzZmZTA5MywKKwkweDdmMDZlOTA4LCAweDk4ZjY3ZDNiLCAweDUxOWM3ZDE5LCAweDI4OWI4N2Y5LCAweDk2NzgzMDhlLCAweDUxNzIxNTRkLAorCTB4MzBhMzE1N2YsIDB4ZmJlY2E4MGYsIDB4YjJhNWNhMDIsIDB4Y2VjZjYxZmYsIDB4NDcwN2E2MjQsIDB4NTBhY2Q3M2UsCisJMHhmNWM0ZDllMSwgMHhmYzBmYTYwMCwgMHhlM2MyOTI3NywgMHg0MTZiYzQzMywgMHhlMDY0YjliOCwgMHhlNjNmYjRmYiwKKwkweGYzMTlmZWZmLCAweDQ5MjVkMTkzLCAweGVjNzhlYzU3LCAweGY4MGNmMTBhLCAweGEyNDFmMzg2LCAweDhjNzNjZDg5LAorCTB4ZTg1NzRjNDQsIDB4OGJjNGQxZmIsIDB4NDljN2RmZmEsIDB4N2FlZTM4NTksIDB4ZDYzMmIyODksIDB4YjdlODI4ZWYsCisJMHhlZmEzYzYwYiwgMHgwNDVjNWJhNywgMHhkM2EyYmRmYywgMHhhYmZmZDA0NSwgMHhjMzJiMDk5NiwgMHhmNTViYWMxZiwKKwkweDdhNzJhNWViLCAweGNjMjU2M2Q4LCAweGU3ZTExNTdmLCAweDI3MjkxMTRiLCAweDNkMTU3Yzg1LCAweDk0ZWQwZjNiLAorCTB4ZjBiYjMyYjYsIDB4MThjZWFiOTgsIDB4NzkyYTJlYjYsIDB4ZWQ3ZTcwNmQsIDB4YzgxY2Y0ZGIsIDB4OTYxMzNkMmYsCisJMHg1ZWUxNGUwZiwgMHgzZjFjOTgzMywgMHhhOGUyY2M5ZSwgMHg2ZTlhNTY2YiwgMHgwZjQ5Nzg4NiwgMHhiZTNkMDc4ZiwKKwkweGY4MGNkYzkyLCAweGU2MTcyNTE0LCAweDQxN2RjMTgxLCAweDBkZWZiMGI2LCAweGI2MWY1YTBlLCAweDQ5OGIyNGRmLAorCTB4M2M1YmQ2NTMsIDB4ZGFjNjU5NzgsIDB4MTc0ODM1OTUsIDB4ZDFhZjdlN2EsIDB4NjQ4N2Q0YmEsIDB4MjE3Zjk4NmYsCisJMHg0YzRmOGY5YSwgMHgxMDI3MjI3ZSwgMHhiZmQyZjJhZSwgMHg1ODEyYTc0ZiwgMHg2NzRiMjhhZiwgMHg5ZmVhZjYzNCwKKwkweGRjMDE0NmFlLCAweGE5M2QzOGFhLCAweGU5M2EzNWYzLCAweGRlZWQ2MTM4LCAweDI1NTdmNGUxLCAweGZlNjAxYTc3LAorCTB4NzQxYzUwZWYsIDB4ZWE0MTNjNDIsIDB4NTZiZGUwNzQsIDB4ZmZiOGU5NzUsIDB4MzdmMGU0ZWYsIDB4OTA4MjE3ZWUsCisJMHhlMDk0NmZmNywgMHhkMmY0MjY4YywgMHhkMjhlM2NkOSwgMHhmNDc3ZGFlOSwgMHg2YjI1ZTIwNCwgMHg3ZTQ0Y2ZjNywKKwkweGI4ZDdiMDY2LCAweDFlNGYwNWE4LCAweGVjYTE2NzdlLCAweGVhOWUwNDFkLCAweDJlOTRlOGQzLCAweDYxYTNmMzg3LAorCTB4OWUwZWRjYzksIDB4M2UwMDI2NDAsIDB4Y2EwZjk5MDYsIDB4ZjY2NTg3YTcsIDB4NTllM2MzY2QsIDB4M2ZjM2MxYmUsCisJMHg0YzdmOTgyNCwgMHhhMmJmZDA1NiwgMHgxM2M0Zjg3ZSwgMHgxYjFiZjIxNywgMHhjNmNiZTEwOSwgMHg1MDAzNzQ5NSwKKwkweGE1NjFiNzFiLCAweGE4NzM3ODg5LCAweGE4MzUyMjFjLCAweDM3MTAyNTFmLCAweGZlNjM1MWQyLCAweGZkMzk1NzA5LAorCTB4ZWJmMDUyY2UsIDB4Mzc4N2IwNWMsIDB4MGQ1M2ZmOGMsIDB4MWY0NWFkOTQsIDB4NjFiOTQwNTUsIDB4OTBhZDhiZTQsCisJMHhiOTgxNjQyYiwgMHgyM2JmMzAzOCwgMHhhMmI2NjcwMCwgMHhlZjdjZmQ0NiwgMHhlZjA3Njg2YSwgMHg0MjVmM2UyMSwKKwkweGFjZjlkM2RmLCAweDgyMWVkMzFmLCAweDBmNjNkMWY2LCAweDUxZjUwYTdkLCAweDliMjlhMDk2LCAweDNmNzUxNzdlLAorCTB4NDViMDQ5NzEsIDB4YjI1Mzg1NWMsIDB4NDg1NmQzZTksIDB4OGUyOGExN2IsIDB4NGY0N2RmZTYsIDB4YzY0NmZkNjQsCisJMHhiYjJkMTIwMywgMHg5MzIxN2RkOSwgMHhiMTY3OGYwOSwgMHgxZmFhZWM3MywgMHhiYmIyZGUzZSwgMHhjNmY4MThhOSwKKwkweDUzZmQ2ZDMwLCAweDk2NzExZTFjLCAweDQxNjc4ZTk3LCAweGU3NjEyYTdkLCAweDkzZmQ3OTU3LCAweDc5NjZkZWJjLAorCTB4ZTU5OGIzYTksIDB4ZGZiZTY4MWMsIDB4YjU4ZmZiY2MsIDB4NTBiZjE4ZTgsIDB4YjFiNzhmMDgsIDB4ZGViYzRkZmEsCisJMHgwOTNiZDZhYywgMHhmYWIxYTc4ZiwgMHhiNDZmNWU3YSwgMHhiYTEyZmNiMCwgMHhhZmRmMzVhZCwgMHhkYzI3ZTNlMywKKwkweDMwZGUyM2FmLCAweDg5Y2M3NGZhLCAweGZhMzBkZTIyLCAweDM1ZGE5N2IwLCAweDlkODViZDY1LCAweDI1YTc5NTIzLAorCTB4ZmI1M2JlNmIsIDB4MWI4ZjljN2QsIDB4ZjM0YjM5MzMsIDB4MjhkODY5OWQsIDB4MzRjZWZiNmQsIDB4NzEwZjIzOTQsCisJMHgwYjUyMWIzOCwgMHhmOWVhZjUzNCwgMHhiM2E3MjI2YywgMHgyNzZiMzI3NiwgMHhmNGQ0NmUzOSwgMHg2MjUxNTE3YiwKKwkweDk5OWZmZjYxLCAweGNiYWRkMmE0LCAweDkwZmI3NDA0LCAweGUyMTEyYjM1LCAweGI5OTU4MWI0LCAweDFmMDE0NGEwLAorCTB4M2Y5OTRmZTEsIDB4NjY3NDc4OWQsIDB4Y2IwNTRhY2QsIDB4YjhiZmRjOTksIDB4MmM0NGU1NjYsIDB4MGI3NGE2ZWYsCisJMHg3NGFjY2ZmNSwgMHgyZDI3Nzk2MSwgMHg1M2Y5ZjQyYiwgMHg1ODk1MGZkYSwgMHgwN2VkMWI2NCwgMHg3ZWQzNGZjYSwKKwkweGVkMTRmOWUwLCAweGQyNGY5ZTA3LCAweDMzN2VhMGYxLCAweDliY2EwZWZkLCAweGRlNTA3ZjY4LCAweGU1OGRkMmIwLAorCTB4YjA0YjJiZjUsIDB4ODNkMmJmNWMsIDB4ZTcyYjc1ZTUsIDB4OTVmMWYzZTIsIDB4NTlhZTdjNWUsIDB4YmJmNTgxNTksCisJMHgzYmViODU5MywgMHgyMjQ4NWY3ZiwgMHg5M2JiYjllMywgMHhkZGU3ZjdjNywgMHgxNmRjZjFhYiwgMHhkNDc2ZTBjMywKKwkweDMyZmZjZTAxLCAweDg5ODhlNzg4LCAweGE1YzYzZmQxLCAweDhmNWIxYWQyLCAweGU3MTliZDgwLCAweDZhNDhmODYxLAorCTB4NWI3YWMxYWMsIDB4ZmQ0NzFiMDksIDB4MjRmYzM4OGUsIDB4MzMxZDg4YjUsIDB4NTk1MGZjNjQsIDB4MjMwZGY5OGQsCisJMHg3MzE3Y2IwOSwgMHhjNDUyODlmYSwgMHg5ZmMyNWZjZiwgMHhiY2ZmNDIxNCwgMHhhYmU1YWI5NCwgMHg3MWY5MTE5OSwKKwkweDk5MjNiM2VhLCAweGIwZTI3OWQ5LCAweGM3MmMzNzFhLCAweDg0MTNkMTM0LCAweGNiOGI1ZTdjLCAweDMzYjFlNzhiLAorCTB4YTljZWQwYWUsIDB4ZTU3YjFjYmQsIDB4NWY4MGEyMTYsIDB4YmZhYjU0YmYsIDB4NjgxNWE3ZGEsIDB4NGFmMTQ0ZjQsCisJMHhhNTMzYjYzNSwgMHg2NzY5YTdkZSwgMHhkYTY5OTQ3MCwgMHg1Y2M5MmQ5NSwgMHhhNDc4MDRlYiwgMHgxYjE4NzViMCwKKwkweGJkMTAxMTU3LCAweGUzMzc5YjBiLCAweDk5OTM2N2I4LCAweGViZDc0YmJkLCAweDNlZmJmZjQ3LCAweGViOTdhZDgxLAorCTB4N2NjYmNmNGQsIDB4ZTQ0NmE2YmQsIDB4YWM2YzIzYWIsIDB4ZDdlYjEzOTgsIDB4ZmYzYzNmMDEsIDB4YWZkYzU4YWIsCisJMHg0M2EzM2RjZiwgMHgxMjQ4ZGZmZiwgMHg0NmJlMDFkMCwgMHhmNTBjZjE1MywgMHg5NjE3NDg2MywgMHg0YWVlMDA2ZiwKKwkweDExNDRmOWNiLCAweDg0OGUzY2ExLCAweDdhYTRiZWQwLCAweGIzMjU3ZmQzLCAweDY2MzNkMGI4LCAweDc5YTUwYjg4LAorCTB4MjNmOTY3OWYsIDB4MzkyYjk0NDEsIDB4YWEzOTFmMWMsIDB4OGE1NWI4ZmUsIDB4NGU5ZGE3ZjQsIDB4N2I1NmZiNDYsCisJMHg1YjhkNDQ5ZSwgMHgyNTE2YjJhZSwgMHgzM2QxM2U4MiwgMHhiNDRmN2U0NCwgMHgxNjliYmVmMywgMHgyNzQ2Mzg1MCwKKwkweGZhYTdjNWNkLCAweDFiYTJiZDdlLCAweDU1ZTU3Y2Y0LCAweDRjZWZhZjBlLCAweDc3YzYwMWU3LCAweDZhZmNlOGMyLAorCTB4MGJiZmE1MzIsIDB4MGM4M2JmNzksIDB4MmMzZDUyMTksIDB4MWFmMGY2ODQsIDB4OTQxZmNhYmQsIDB4ZmQwZmUwNTgsCisJMHhlNjJjNTc2NSwgMHgyMTI3YjQ3MywgMHhjMTk5NDQ3YywgMHhkZTk1YjllNywgMHg3ZmE5MjQ5YiwgMHhmOTk3ZTI5ZCwKKwkweGU0OWJlNDMyLCAweGJkYjY3Y2YwLCAweDM0ZGQ5NzJiLCAweGM3NWZlYTRkLCAweDVmYjYxNGU4LCAweGYyMmI0OTczLAorCTB4Y2U4NzVjZmIsIDB4YTczNWVjYzUsIDB4MGYzM2JlYzYsIDB4NzljMzcyNmIsIDB4NzExNDcxNWYsIDB4NDhjNDJlNDEsCisJMHg1ZWU3ODRkMiwgMHhjODg5YmZjNSwgMHhiN2EzYzQ3ZiwgMHgxN2VhODUxMSwgMHg0MDgwNzI1MSwgMHgyZmRhODczZSwKKwkweDhmZTI3NmUxLCAweGMyZmNiZjM4LCAweDJkZTcwZDMyLCAweDk0ZjdhYmE2LCAweGY5YWY1MWI5LCAweDkwYzk3NjQyLAorCTB4YjM0NWYyY2YsIDB4NGYxMjNmMWUsIDB4NjU3M2ViNmEsIDB4NGE1ZTA3ZDcsIDB4NDdmNjhiOTcsIDB4NTE3YTYwYmIsCisJMHg1Zjc4NGRiOSwgMHgyMDRiYjg5YiwgMHg4M2NlMDJhOSwgMHg5OWQ5YTdlNSwgMHg1YWRmYWE3ZSwgMHhlMGUzZmM0NCwKKwkweDJlMzdhZWQwLCAweGE1ZGFlMDA1LCAweGMyYTlkMDFjLCAweDhhYWJiNjllLCAweDNmMDZlYzMzLCAweDBiODAwOGQ0LAorCTB4MmU1ODczYzAsIDB4NWYyMTcxYzIsIDB4YWI5NWRlZWYsIDB4MTRlZTRlMTAsIDB4NjkzNWU3ODYsIDB4N2NmOWRjMmEsCisJMHhmNzBkZGI4OCwgMHg1NjZhMmRiYiwgMHgzYWVkNWJlZCwgMHg3ZjE1ZTdkNywgMHgzYjZiZWEwZiwgMHg4YmQzY2M0NSwKKwkweDk4ODVlNzg0LCAweDI4NjI2M2Y3LCAweDMzNDZjYmEyLCAweGE3OWQwY2ZmLCAweGMxMjllNjFiLCAweGJlMDBlM2JjLAorCTB4NThiM2Q3MDQsIDB4NWNlMDA0MzYsIDB4NWFkMDhmNjYsIDB4MzFhOTcxODIsIDB4OTcxZTEyM2EsIDB4NTMzMzlmNTIsCisJMHgyNzdhZmYxOCwgMHhiNDY3YzY1OSwgMHgwYjRkZGU3MywgMHhlZjk3ODVjNiwgMHhjMzFlYmE0NywgMHgxMjJjNGZkNywKKwkweGJiNzA5M2NiLCAweDVhYmY3MDk1LCAweGYwNjc2YTgzLCAweDNlMjhlYTNjLCAweGEwZmJiZWRmLCAweDJmM2NiMTQ2LAorCTB4MGFkY2U5MGIsIDB4ZDk0MzE3NzksIDB4NjE0YzNmMTEsIDB4M2I3ZWYyZjEsIDB4ZTgwNmEyODIsIDB4ZjMwOWJjNjcsCisJMHg3Y2Q0MWExYiwgMHgwNTVkZTUxNCwgMHgxM2U5NmJmMywgMHg5YzRjNTFmMiwgMHhkOTU5ZDc0ZSwgMHhmYWVhMDQzZCwKKwkweGJlMzBhNjU2LCAweGEzZTM5MmI5LCAweDIyZWNjNGQ3LCAweDI3ZTRkYjg4LCAweDZmOWY5ZDg0LCAweDU4ZmI0NzJmLAorCTB4YjZmNGYzOGQsIDB4ZDU1MmZjYjMsIDB4NDljOTUwZmYsIDB4MDYwZGY3YTAsIDB4MjIxZGRlODcsIDB4ZGIyYTc3YzYsCisJMHgwZWY3NjBlZiwgMHhmNzg5M2M3NiwgMHgxNGJlZDIzNSwgMHhkZTcyODdhMCwgMHg2YjRlYmNiZSwgMHhlM2Q4MmYwZiwKKwkweDBjYTUxYjU5LCAweGMxMTdiYmI0LCAweDAzZDlhYjdkLCAweDNiNDhlZGVkLCAweGFlMTRiMWZiLCAweDNlNDhiYWJmLAorCTB4MzU0ZTcxYzQsIDB4YTI4YjFmNjYsIDB4MTI2NDM1ZjMsIDB4MjI5N2JmM2MsIDB4NmVmNzg0YmUsIDB4MDliM2VkNTMsCisJMHg3OTI0M2JlZSwgMHg0ODhmYmVlYywgMHg2YTkyYmZiYywgMHgxNWVmMzg0MCwgMHg1YTViOGYwOCwgMHg4ZWY3ZmU5MCwKKwkweGVmN2ZmYjY3LCAweDBlNzc4YjkxLCAweDkzZGNmZGE3LCAweDdlYTZlMGMxLCAweGNiMDY0Zjc3LCAweDA2MDdkZDMzLAorCTB4NGFkZjdkMTUsIDB4Zjk2MGM5NDgsIDB4ZGMzOGJiM2MsIDB4OWI5ZjMzYmYsIDB4NTU3M2U1YWMsIDB4YTJjNzVkNmQsCisJMHgzYjc3ZTQxNSwgMHg4ZjdiZGU4MSwgMHgwZjI2MjVmZCwgMHhlZjA4NDdmNywgMHg4MzNmN2YyZCwgMHgwZGU2MDdjZCwKKwkweDc0ZmJmNDc5LCAweGE3MGJjZjlmLCAweDEyMjk3ZDgzLCAweGZhZWViNzlmLCAweGRhNjk4Y2Y0LCAweDdiYzg1ZDc5LAorCTB4MzY3NmUxMmYsIDB4NTc5ODU2YWYsIDB4NDI2NGYwNGYsIDB4M2FiNDdlNzgsIDB4ODNjNTdkYWYsIDB4ZmQ3Y2VmOWYsCisJMHg5MTMzZTc3YSwgMHg1MDY4YTdjZSwgMHgyNmZkMWQzOCwgMHgwYzMzZWQzOCwgMHhmODBmOWYzZSwgMHgwZGUzZmU3YywKKwkweGMwYzBlZjc2LCAweGQzZDRlYmZhLCAweGVmYzA0NDc2LCAweDgwN2JjZWM1LCAweDdlZjlkMzVkLCAweDg0N2EwMjkwLAorCTB4NjMwMTNiYjMsIDB4YWQ3ZTFjNGMsIDB4MGIzZTljODUsIDB4YTE3MWRmMzksIDB4MWY3YzQ0NGQsIDB4YTRiY2MwNGQsCisJMHhmYmQ1ODk1NiwgMHhhYjAyOGJlYywgMHg4ZWJhZmQyOCwgMHg3OTAwYzgyYywgMHg4OGQwZmQ2MCwgMHg4NmY4YzVmNywKKwkweDRiOGIzN2M4LCAweDk3ZDhlYjY1LCAweDg3MGEwYzJjLCAweGU0N2Y1ZTE4LCAweGI3ZjYxOTQ0LCAweDAxMjMwM2ZlLAorCTB4ZjVjYjUwN2UsIDB4YWI3MmY1ZjQsIDB4NTUwMWVlMDksIDB4MDJlNTA4ZTEsIDB4NDIxOWY0ZmEsIDB4MmU1MDVjOGIsCisJMHg1OGE0YzJmYywgMHhjNzRmMTkwNiwgMHhiMTE0ZGJjNiwgMHhkNGYxZDQ2ZiwgMHg5NzM1MjlhNywgMHgzNzg1ZGRmOSwKKwkweGRlYTNjODQ0LCAweGJjM2RmOTM0LCAweGExNTM2N2FmLCAweDNiZjczYzg0LCAweDRiNTliZmMzLCAweGVmODIxNzJmLAorCTB4ZThjOWRjMjUsIDB4N2EwYTk0YzUsIDB4ZTYzYTcwOTQsIDB4MTNlY2I0N2IsIDB4MDNjZGJmNDIsIDB4YjhiYzE5ZjgsCisJMHg0NjQ3ZGY3ZSwgMHg4NDBjMjJkMiwgMHgyZjRlMjVkMywgMHhmNWQ0ZmFlYSwgMHhkZWI2ZjNhYiwgMHhkNmYzMDBiYywKKwkweGYxMzAxZjAxLCAweDdhOWQ1NDk4LCAweGQ1ZjIxZTJmLCAweDYwZjcyZTU4LCAweDI2MjcyODVkLCAweDdkMGYyYzRiLAorCTB4ZGQ3ODg0YmMsIDB4M2M0NmYxMzQsIDB4Yzc4ZmIwMjcsIDB4MGM5MzQzOWIsIDB4N2U0M2RlODMsIDB4ZmQ3ZjFmMGIsCisJMHgwNGVjZmY5NSwgMHhhZWRmZDVmYiwgMHg0NGQ5ZjNjNywgMHg0NWRlNzJlYSwgMHg4ZWY3YzhlOSwgMHg1MmJkZjc4NCwKKwkweGZiODEyYTdhLCAweGI4OWM4ZTY3LCAweGRkN2EwMzE4LCAweDg0N2FhOTRkLCAweDBmYzA0ZGYzLCAweDExNWMzZTQxLAorCTB4ZmY3ZjMwNGIsIDB4MThiMjE3YzQsIDB4NTM5M2ZmNDYsIDB4NzQ5N2FlNDUsIDB4ZmU1ZTQyNzYsIDB4OTc5NjAyYzYsCisJMHg4MDdhZTE2YywgMHgwNTc3NDRlNSwgMHhmMTMyZGZjYywgMHg0YzIxNDZjNywgMHgxYWE1ZTZjZSwgMHg4NjhkYmJmMSwKKwkweGY2OGI4MjUwLCAweDQ5MTBlYmU3LCAweDJlODFmNTEwLCAweGVmYWI0N2JjLCAweGUwY2M5MWRjLCAweDA1NDg1ZDUwLAorCTB4NDdkYzFlNGMsIDB4OWFkN2VlY2EsIDB4M2UzMGFhOWMsIDB4ODA3ZGU3NGIsIDB4ZjkxYThmYmUsIDB4ZjUwZTVjODUsCisJMHhhY2JjNzQ4NSwgMHgzMmFkZWZmZSwgMHg3OGQ0NjdjMywgMHhhNmM1OWY3NiwgMHhlMTkzYmZjOSwgMHg4MTU4YWVmZSwKKwkweGFmYjQzZGUwLCAweDc5MzVlYWE0LCAweGU4NjQ5ZmZhLCAweDlkOWRiZjc4LCAweDY1ZjliZmEwLCAweDViMDlmMzA5LAorCTB4NDA5OTBmODMsIDB4YzVmNzU3YWYsIDB4ODZkZDU0ZDMsIDB4ZmRmOGViNzYsIDB4ZTYyNmViYWEsIDB4ODA1Y2UwMDYsCisJMHg0YTdmYzc0YSwgMHg2MTUyN2FmNSwgMHhiYzVmNzQ3ZCwgMHhhNzU3N2E4NCwgMHg0N2MyMmE2NywgMHhjOTdjODdjZSwKKwkweGVmMTNhNDMxLCAweDA2ODUyMTBkLCAweGFlNGJlNDE5LCAweDZmZDlhNzRlLCAweGVhNmYxYzJkLCAweGE4YTVlYTkzLAorCTB4NjljMjNjZWYsIDB4NjJmNzk1NTksIDB4MzllMDg5OGIsIDB4NjJiMzJiYTMsIDB4ZDMxNTJmNDEsIDB4MjVjZjNkNTQsCisJMHg2Y2ZmMWMwMywgMHhlMWZhODM5OSwgMHg4ZDJkMzdkOSwgMHhmNTdjZjFlMSwgMHhiM2RhOWE3OSwgMHg3OTdmNDM0MSwKKwkweDAzMzNjYmExLCAweGRlMjIyZmRhLCAweDJlOGZhMGI1LCAweGU3MzUxNjZhLCAweDdkZjJjZmFlLCAweDE0NGFmMGJlLAorCTB4ZjVlOTg2MDksIDB4ODdkZTI3MGIsIDB4NWUxNjQ3ZTcsIDB4YWE0MTIxODksIDB4ZTdlNTlkMjcsIDB4M2NmMmNlN2QsCisJMHg2NTRmN2Y5ZiwgMHhhZjgxYjJmMiwgMHg3NWVhNGI2NywgMHgwOGFlZmJlYSwgMHgwZmYzYjk3ZSwgMHg3ZTMxOTVjZiwKKwkweGY3MDBlZmY5LCAweDAwY2JhMTJhLCAweDhkZTM2ZTdjLCAweGZlM2NjMTdmLCAweDBmNGVkNGQzLCAweDNhZDM3Y2U2LAorCTB4NmMzMDQ4ZTMsIDB4NTc3NmJlOWMsIDB4N2U5ZWI4NGMsIDB4ZmYzODI4YmMsIDB4MTA1YWY1ZmUsIDB4ZmRhOWE3MGUsCisJMHg0YzcwY2RmZiwgMHhiZmIxYzBkMSwgMHgxYzBkMmNmZiwgMHg4MzlmZjYwNywgMHg5OTVlOWZlMywgMHg4ZmZkMmRmYiwKKwkweDQ1N2ZhMjFlLCAweDdlZmVmZjMzLCAweDNkYjhlMTg3LCAweDhmOWVjYjQ3LCAweDY4ZTVmYmE2LCAweDU3ZjZmNTcwLAorCTB4YjBlZDVmMjEsIDB4MjcyZmVmMTEsIDB4NzhjNWFkNmQsIDB4MDQxN2U4OWUsIDB4M2YyZDk5Y2YsIDB4OTBjN2U1ZmMsCisJMHhiNzdjYjY4NywgMHhmNDYzMDVjMSwgMHg1Y2YzNDNlYSwgMHg2MTg3Yzg4MywgMHg3ZGMzZjY0NCwgMHg2ZjczZWEzZSwKKwkweDI3YWUzNjZhLCAweDBhNDliZGYyLCAweDY2NmY5MGM4LCAweDU1ZTQ5NWNhLCAweDlkNjVlODBhLCAweDFmYjhkNTgxLAorCTB4NTQ5ZmM4NGMsIDB4NmZkYWI4M2YsIDB4OWVhODhhNmQsIDB4YWQ3ZGM1NjcsIDB4MTBkMGRiZGUsIDB4N2MwMGVkZWQsCisJMHhlNmE1MTY3ZiwgMHg4MjM3ZjkxZCwgMHg2N2YyYWQxZiwgMHg4NWVlY2NhMiwgMHhhMjFkYTFiMywgMHhlMjI1YjFmYSwKKwkweDkxYTNiZjQ1LCAweGU1ZTQwODc4LCAweGRmNzg2NWU3LCAweDUzZmVmZTAwLCAweGFmYzAwNmNhLCAweGUzZDk4ZTJkLAorCTB4YjcyM2ZmNDUsIDB4M2I5ODM2ZjcsIDB4N2UzMGFlOWQsIDB4ZTk1NGZiZjcsIDB4ZDZmY2U0ZmEsIDB4ZmUzMzM5MDgsCisJMHg0YzgyZTdmZCwgMHhlNjFlZmNjZSwgMHhmZTc2MjU1MSwgMHhmMjEzMmNiMiwgMHhiZGY4YmIwOCwgMHhlMzAxOGEzZCwKKwkweGYwYzc4NTA1LCAweGQ1MzJhZmJlLCAweDhjOGJhZjVlLCAweDQwZDlhNzVmLCAweGVlZmQ1NWZmLCAweDA0NGY5MDMxLAorCTB4OTY0NmMyM2EsIDB4Y2QxZTVkYmYsIDB4ODliZmU1Y2EsIDB4OTA3NTczYzMsIDB4ZjAwNzlmYzIsIDB4ZWM1ZDE1NmUsCisJMHhlMTE5Mzc5ZSwgMHhhMWFmOTE3YSwgMHgxZDMxYjRkNywgMHhlMWNiZDllMCwgMHg3NWZkYjE3YSwgMHg2MmVlNTdiYywKKwkweDdmYzQ3MGRkLCAweGMxM2Y2YmY5LCAweDI1ZjZhMTdiLCAweDBlYTc3Y2YzLCAweDcyOWZjYTJiLCAweGVlMDhhYmEzLAorCTB4Y2M5N2RiMmQsIDB4Mjk1NmNjZjQsIDB4YTYxMDUzMTgsIDB4MmQ0YmFlNzcsIDB4YmU3YWJlNDYsIDB4ZjQwZWI4NmUsCisJMHg3ZmFlMTU3MiwgMHhhMzYwZmNlNiwgMHg0MjkzZWZlYSwgMHgyZWJiZjA0NSwgMHhiZjgzMGJlNywgMHhkZmI3Zjk0NSwKKwkweGEyNjdiZjhjLCAweDExNjVmMDNiLCAweGQxYjc2ZmRlLCAweDE3ODJmNzg4LCAweDY1YjkxODFmLCAweGNhYWZhZDJlLAorCTB4YTU5ZTYxZDEsIDB4ZTcxOTgwZWUsIDB4ZGQ4MWExNzMsIDB4ODJkZjAzYWYsIDB4OTAzYWFlOWMsIDB4NTJjM2JmODIsCisJMHgzY2MyMWQxZSwgMHg1NzI4YWFhOSwgMHhjYTQxYzQwZSwgMHhmNzg0ZGMwZiwgMHgzMGRhOWY3YSwgMHhlNWY4MWQzMiwKKwkweDFkMjU3OGM5LCAweDQwZGQzNWVmLCAweDdkZDc0ZTgxLCAweDdiMDQ2M2IyLCAweGNmMDEzZjVmLCAweDQ2Mzc1OWFkLAorCTB4NWZmMzA3N2IsIDB4ZjIyNDcyYTgsIDB4Yzk3ZDllZmUsIDB4MDA2ZDNkZjksIDB4ZDcyNjkxOWYsIDB4MmQzZTVhNmUsCisJMHhlYjljNThiOCwgMHg4MmI2Njg3OCwgMHg5ZTE3MTY3MSwgMHg5Y2I3MmJkZiwgMHhkYmVmMWFmYiwgMHg3ZWU0ZmU2YSwKKwkweDQ4MWRlZjgyLCAweDE2MWRhYWI3LCAweDk3Mzk1ZTM5LCAweGExMGNmYjMzLCAweDM4N2JmMDc5LCAweGRjMzg2YmU1LAorCTB4YWI5ZjJjMGQsIDB4ODM5Zjk3NWMsIDB4OGRmNzBlNjUsIDB4ZTY1Y2Y3MTEsIDB4YWI3ODMxYTUsIDB4MjQyNzUzY2YsCisJMHhjYThjMmZiYywgMHg2N2M4NzRmZiwgMHg4OGQ4NzUzZSwgMHhlMzZhNzY3NCwgMHhhYWFmM2M2OCwgMHg2MTRlNTc4ZSwKKwkweDc5N2RkMzIyLCAweDA1OGNhZWQyLCAweDYzNGI4ZWJjLCAweDBkN2NhYWZjLCAweGY3ZDUyZmIzLCAweDI1Y2RiYWU1LAorCTB4ODc1MGU3ODAsIDB4YmQyYmY5ODgsIDB4ZTIwNjI4NzIsIDB4YjUzYjZhMWMsIDB4NzY5ZWI3ZGMsIDB4NjVkNzdmMTEsCisJMHhjNDExZjI1ZiwgMHgwMjI3YTUzNywgMHhjZDdiYTRmNCwgMHhmN2Q1ZjI4YSwgMHhlMDM3NzE5YSwgMHhmMTIxN2NmMywKKwkweGZlNWM4MzQ3LCAweGNlNGVmZDgwLCAweGVhMjMwZWQxLCAweDMyMWZiZGJkLCAweGZkYzA3NGJiLCAweDNhNTA5NjQ5LAorCTB4N2JlODFmZGMsIDB4NThmOTA1MmQsIDB4MTc2ODVhNmYsIDB4ZWNjZDkzZDMsIDB4YmQ3N2I1NWUsIDB4MmMzYzc4MTMsCisJMHg5NjQ3ZGY4OSwgMHhlNWQ5ZmEwNCwgMHhmNDEwNzMwZSwgMHhmOGM0ZmEzMywgMHg3MWVjOWY4NiwgMHhkMWMzZmJlMiwKKwkweGY0MzZmYzA0LCAweDUzODU0MDE5LCAweGRmYzRlZmQ4LCAweGZjNGQyMDk1LCAweDdlZmM0ZWZiLCAweDA0NzdiYTc5LAorCTB4ZDllNWU1ZjAsIDB4N2MwYjdmYjQsIDB4MmVlZDhkZGYsIDB4ODA2Zjc5NjcsIDB4ZTY0YmZkMzIsIDB4YmY2MzI1ZTMsCisJMHg3YzBjZGU2OSwgMHg2NGUxN2MyZiwgMHhjNGQwYTdiZiwgMHhkZWIxM2JlYiwgMHhjMDRlZjQ2NywgMHg0YWQxZmM3NSwKKwkweGU3NTkwNjVhLCAweDU1YmJkZWY1LCAweDc4ODcxNjljLCAweGUxNGRlNzU0LCAweDI0NWVmYThjLCAweDk4ZDI2YTVjLAorCTB4MjNjMmE0N2UsIDB4ZjBmYjJlOTIsIDB4MDNmMzJkZjksIDB4OTdjMDA5YmYsIDB4MzYzYzMzYjQsIDB4M2UzMDM0OGMsCisJMHhmNTFhM2Y1MiwgMHhhNTFiNTI1YSwgMHhkNTVhMTNjOSwgMHhmNzYxY2VjMSwgMHg5ZTIyYjA2YywgMHhhN2VlZjU3YiwKKwkweGRlODUxZTQxLCAweGFmNzYxM2Q1LCAweGMwMDhkNTE1LCAweGYwNzEzMGJmLCAweGU3OGU3MmZkLCAweGIzZDY1NzA5LAorCTB4MmY3M2EyN2MsIDB4NmY5ZjRkOWMsIDB4Njc4YWYzODEsIDB4NTUxNWU3MzUsIDB4MjRlZDFmM2YsIDB4MTYyOGZjMDYsCisJMHg5NjUzMTI5NywgMHgxMTZjZjRjNywgMHgzNzdlYzdlNywgMHhjMTVlYTM2NywgMHg2ZmYyMDdkZiwgMHg4NDdlODkxOCwKKwkweDAwZTUwNjUzLCAweGMzNTE4ZWZlLCAweDU1ZDAxZDE4LCAweDFlZjE4YmJkLCAweDlmNWIxMzdmLCAweDdhOGU1ZjdhLAorCTB4N2MyNDRkZWYsIDB4ZDliMmQzNWEsIDB4ZWYxMDkxZWYsIDB4ZjI4NzcwMDMsIDB4ZjAyNGEyNDksIDB4ZmZkZTFhNjAsCisJMHhhMmZmMDE1NSwgMHhhNjE4YWZhMCwgMHgzZjkxOWI3MywgMHgxODVjYTBkNCwgMHhlMTk2Y2Y3OCwgMHhlODNmN2U1YiwKKwkweDNmYmNiNmZmLCAweGViM2FlMDlkLCAweDkwMThmZTVkLCAweGNjY2E5ZmFiLCAweDUzZDhhM2RlLCAweDZjOGJhZTUwLAorCTB4NjlhNzc4OWQsIDB4NGY2YmM4MTIsIDB4ZDYzYzVhNWIsIDB4NTRmYzNmMjMsIDB4OWYyYWY1NjAsIDB4YTA3ZWIwMWIsCisJMHhkYTA3ZTgxNywgMHhhNzhlYmVkMSwgMHgzMjE5YmYzMSwgMHg4Y2E3YjgwOSwgMHg4ZjkwMGRmOCwgMHg5ZjI3Y2FhNiwKKwkweDNjZTBlOTIwLCAweDg5NGRiNzZkLCAweGFlZWM3YTAxLCAweGJkODNiNmNmLCAweDEyNTM2NjVjLCAweGMyZThjMjBhLAorCTB4NzNjMTA2ZjcsIDB4MzdkYzBhYTQsIDB4NWY3ZTAxM2MsIDB4ZmMxNjNkYzIsIDB4NWFlY2ZiNzUsIDB4N2NlNDQxN2YsCisJMHgzNWQyOWE1ZSwgMHg3N2ZlYmMyZiwgMHhlZGZmNGM2OSwgMHg4YTI4ZmJlMiwgMHhkZjkwNjNjMywgMHgyZmJjNDI3OSwKKwkweDc3YWY3OGU2LCAweGZiNDE2Zjc5LCAweGUyZGRhMjMxLCAweDFlOWNiMWFkLCAweGJkMzdkZTIyLCAweGY3OThhZmZhLAorCTB4NGY3YjQzYjEsIDB4NzhmOGNmZGMsIDB4ZjgzNzFlOWYsIDB4MTllMDFiODUsIDB4MTViYWY5ODUsIDB4YWI5ZjE5OWIsCisJMHhlNzM0YmI3OCwgMHhmM2M2NTY1MSwgMHgxZTVhNTNkNSwgMHg1OGUzZGZjNywgMHgwZTdhN2JiMCwgMHhmMTBiN2M2MSwKKwkweDgyZTNkMmEwLCAweGU4MGU3Nzc0LCAweGEyNmRhMTcxLCAweDYyYTJmYjBjLCAweGE5ZjM4OGFiLCAweGRiNGM5YTk3LAorCTB4NWIzM2ZiZTgsIDB4NTVkZmE4ZjUsIDB4NDk5Y2Y5ZjAsIDB4ZGUyMGM2ZjUsIDB4MjgxOTIyMjQsIDB4ZGU0OGNmZGMsCisJMHhiNzVmZDQxOCwgMHg4OTFkZGZmMSwgMHhmNzZkMDc1OCwgMHgwODMwNTQ5ZSwgMHhjZjBjNGM3YywgMHg0MWVjOWYwOCwKKwkweDFkNWRlMGU4LCAweGZjMDE2OWUyLCAweGEzY2MxOTdlLCAweGU0YmY0MDQ1LCAweDAzZWYzNDk5LCAweDc2YTZlZTUwLAorCTB4ZGJmZmRlM2IsIDB4NTlmNzg5NTQsIDB4OGNmYmMyNDQsIDB4YjlmNDhiYzksIDB4ODU0N2FmOTgsIDB4MmEzOGU0NjcsCisJMHg5ZTAxN2IzYywgMHhkZjFkMmZhMCwgMHhmN2NmNzI4ZSwgMHg0YjE0MDg5NCwgMHg0MjVmYjQ4ZSwgMHhjNzRhN2E3YiwKKwkweDgyNmY4ZmY0LCAweGRlYTk5YmY3LCAweGNkOWM4MGEyLCAweDQwMGZlZGZhLCAweGY4ODlkNWNlLCAweDFkNjUyNjdiLAorCTB4NDIyNDA5ZDksIDB4NThkZDgzNWUsIDB4MTg5Y2NlZjYsIDB4YWM5Yzk4NWQsIDB4N2UzMTE2NmYsIDB4NzY2YzNmNTIsCisJMHg3ZjZjNDJjYywgMHhhZmEwNGVmMSwgMHhhMTJiOGE5MywgMHhlOGRkYWMyMCwgMHg4MTc4YmVmNCwgMHg5YmU1NWYwNiwKKwkweGUzMDMxYWZmLCAweDcxZWEzNDU0LCAweDdhNWUyYTVkLCAweGZmOTA5Y2U5LCAweGJmYTM0NTM2LCAweDg0MzUzN2E4LAorCTB4ZWE3OGFhZmQsIDB4ODNjMDZmYTMsIDB4ZGRiNDRmNGEsIDB4MWYzMmU5NWQsIDB4YThmYzhmYzcsIDB4ZTQ1YmQzM2IsCisJMHgxNjRlODQxYSwgMHg4NWM3NDkzZCwgMHhmMTVhYjZmZSwgMHgxZDZiYzJmZSwgMHgxZjQ3ODU1NywgMHhjNmJlZjliZSwKKwkweDU3NzFlMDMyLCAweDc1YmZmYTI2LCAweDRjOTg0YWVmLCAweDY2NjliMjdkLCAweDcyZTNlYzNhLCAweGRmYzAyZjJhLAorCTB4M2U4NDJlNTAsIDB4M2IyNDdiYzYsIDB4NmIwZjc4OGMsIDB4MGYyNWU2ZjksIDB4MWZlNTc4YzAsIDB4ZGY1MDc1MWEsCisJMHg1OGU2Nzg3ZCwgMHg1ZTA0NTc5YywgMHgwN2QyOWMyOSwgMHhjY2RlZjdhMywgMHgwYzJiYmE1MCwgMHhjMDlmNTQ3ZSwKKwkweDI3YWVhZGZkLCAweDBmMzhkZTZjLCAweDdkZTE0ZjZhLCAweDE0OTliZDI0LCAweDYwN2M2MTlmLCAweGJiZDMzYTc2LAorCTB4ODBkOTdiNjgsIDB4YzNlZWNkZjQsIDB4MWNhZjViZTksIDB4NjIzOTVlYjEsIDB4YTQxMWVmYmQsIDB4ZTJmMmUyNmYsCisJMHg2NDdjMTY3YSwgMHgwNWZiYzFkNCwgMHgwMzkxZGM0ZiwgMHg4NmVlYjVmZSwgMHg2ZWFlYjhhOSwgMHhlYzJjN2JiYiwKKwkweGRhNzRlZWFmLCAweDcyZmMyMGZmLCAweDlkNzQxM2MxLCAweGNlYjBkZjc5LCAweDZiZTIzMzI2LCAweDQzZGE3NWM4LAorCTB4YWMzN2M4YmIsIDB4NTBlOWM3ZDMsIDB4NDk2OWU3NWQsIDB4MmJkZmMxODksIDB4ZjAxMjI4M2IsIDB4M2NkMmY4OTcsCisJMHg2NTYyNmYxYiwgMHg5ZjI4OWRmYywgMHg2ZjgzZDE5ZSwgMHgzMWU2MzQ3MywgMHhmYmIzYjRmNiwgMHg0MDNlNTVjOSwKKwkweDdhNDZiYmM3LCAweDc0M2QyMWQwLCAweDI2NWIyYjE3LCAweDEwNmQ3ZDAyLCAweGVkOGJjODY1LCAweDViZjcxODZlLAorCTB4ZWVhZjFkZjgsIDB4N2EwY2EyOGQsIDB4ODMzMTc3NDIsIDB4MjgwN2U1MWYsIDB4M2RkM2JiYjcsIDB4YjBmOTYyNzcsCisJMHhlYThmN2YxZSwgMHhkZjVmZDM1NCwgMHgxZGUxNzNjNywgMHhmYWUwODU3YSwgMHg0MmU3MWIzYywgMHhmODE3Y2U5OSwKKwkweDNkY2I4NTFhLCAweGUzZDU1ZjRjLCAweDllZWJlYmZhLCAweGZmN2E4M2FhLCAweGZjZjAxYmQ2LCAweGFjZjk0MGMzLAorCTB4YTM0NTczODUsIDB4NDQ4N2Q5YTgsIDB4ZGYzYzcwNTIsIDB4YWY3ODI5MTMsIDB4Y2E2NzBhODMsIDB4MWVjMDczNjEsCisJMHhlNTAxZTE1MiwgMHhlMWZhNjMzOSwgMHhhMGU3ZTNlMiwgMHhmNzYwMmY0MSwgMHgwNjdlNzEyMCwgMHg3MjYyYzlmMCwKKwkweDAwODFjZTAyLCAweDI4ZjM4MzFmLCAweDQ4YWJjOTQzLCAweDQ3YTkxM2ZlLCAweGFmOGZiY2ZkLCAweDY1NzFmOTY4LAorCTB4M2UxOGVmYzQsIDB4MTI1ZTUxMTgsIDB4NDY5NjM3YzEsIDB4ZDQ0NTU3ZDQsIDB4ZTc3Y2Y5NTMsIDB4ZTRlN2ZlNjAsCisJMHgyYjVmMmQwYywgMHhmZDU0NzBlMywgMHgwNDFiYmRhMCwgMHgyNGNiNDNiNCwgMHhjZmY2MDBjNSwgMHg3Yzk4NTM0YiwKKwkweGU5ODg5NzJlLCAweGVjOTdkYzE2LCAweDQ0OTk0YjdjLCAweGYwMDU4ZDZhLCAweGI3MDg2NWRlLCAweGI1N2Y2ODkzLAorCTB4NDcyZDNiNDYsIDB4ZGI0NDNlMzEsIDB4Y2FjMjE4OTUsIDB4ZTc1NWJmMmEsIDB4ODc4NzAxZjMsIDB4N2VjZWZjZmEsCisJMHhlMzIxZDI4MSwgMHg4ZmE0MWYxNSwgMHgyOGFmMTgxZiwgMHg3NTdlYjMxMCwgMHg4M2FiZWMwMiwgMHhiZTk1ZGEyMiwKKwkweDIxZmM5OWI3LCAweGYyZGE1ZDVmLCAweDk3ZWUwM2EyLCAweDMwYmNjNmNkLCAweDcwOTFmZDc1LCAweDE0YmI2ZGVjLAorCTB4ZDdlYmJmMDMsIDB4ZTc4MGRjNzMsIDB4ZTNkYWNiOTMsIDB4YjJmZWQxOGEsIDB4N2I4NTA2ODcsIDB4ZGE5ZjVmMGYsCisJMHgxNWQ0OGY1ZiwgMHg2ZjVjMmIzMywgMHhlMTMxNWQyNiwgMHhkNjVhYTNiZiwgMHhkODI1Njk3NiwgMHg3ZTdlMTRiMywKKwkweDlmOGY4YzMxLCAweDA2MmY4OGVhLCAweGQ3ZmNiMmJiLCAweDdlNzBjNWM5LCAweGRhYTE5NmQ2LCAweDFhY2ZjYWZkLAorCTB4MzQxY2RmNjEsIDB4ZTdhMjNmYTIsIDB4ZjgzYWI5ZWQsIDB4MGFlZGU3YmUsIDB4Zjc4ZTVjZmUsIDB4M2U5Y2Y1YjgsCisJMHhjN2UzMGU5NSwgMHhmZWU3YjRlOCwgMHg1YjZmZGMwZCwgMHhkNzY0ZmJhZSwgMHgwZmZmYzBjZCwgMHgwOWFlNjYyNSwKKwkweGViOTczN2YzLCAweDdlMWVkMDBhLCAweDA3OWExZjUxLCAweDdlN2FhNmYzLCAweGFhNTdlNDFkLCAweDE0MzJkOGZkLAorCTB4ZjA3MWFmOTYsIDB4MGZlMDJlZWMsIDB4MTVhNjM2YTcsIDB4MzllOTViMDAsIDB4ZGZlZDAyMzgsIDB4ZTVjNzBmOWUsCisJMHgyNDdmNjhjOCwgMHhiYzJmODBiOSwgMHgzMzk2NTdhOCwgMHhkYWVhYzU3YiwgMHgxZmRmZDk5ZCwgMHhjNjcxMDM4YywKKwkweDhhMTM4MzllLCAweGYzZDA1ZmMwLCAweDJkMmY5YjIxLCAweGI2ODBmZmEzLCAweGE1MWU0M2YzLCAweDRlOGM2ZmRhLAorCTB4ZGQ3OTA0ZDksIDB4YjQ3YWQ3ZTQsIDB4M2FmYTFlMjMsIDB4YjllZTExM2IsIDB4MWUwYzMxODgsIDB4NDFiYjAxOWYsCisJMHgxYWJjZDc5YiwgMHhhYmRlYWRlNywgMHgyYzU3NjkxZCwgMHg0Zjk2MWUyMCwgMHhhOTdmNjExYiwgMHhkYTQ3NzNmNywKKwkweDY5YTQxNTg5LCAweGQwMzA5NzZkLCAweGI4OGFhNDVlLCAweGZiMDA5ZmM5LCAweDQ1NmJmZDVhLCAweGVmNjRiZjc5LAorCTB4YmVmNmEzNTUsIDB4OWZkZjNmNjIsIDB4NjVjN2U0MjYsIDB4YTAzNjNmNzQsIDB4ZmNjMDI5YmYsIDB4YTBlMjc1N2IsCisJMHg2NWVmZDc3MSwgMHg5ZTNhZTI2NCwgMHhiY2RiZmU4ZSwgMHg5ZWJjMzBhZSwgMHg0OWM5MTFkNCwgMHg0MGQyN2FlMSwKKwkweGMxODJjZTRjLCAweGU5Y2JjNmVjLCAweGI0MGQ5ZjYwLCAweDFmYTJjZjE3LCAweGJlZmMzY2EzLCAweDZlZDAzMjMwLAorCTB4YzAxYzU5M2MsIDB4MGQ5M2JkYmMsIDB4YzA5ZWZlMjIsIDB4OTE4ZGRhZjUsIDB4OTdiZmFiZGYsIDB4MmMyMGM5ZTAsCisJMHg2NzcyMTkxZiwgMHgzNzY0ZGZlZCwgMHhjMmFiZTc2YiwgMHhjNzdmY2NkMywgMHhlMmZkYjIyMiwgMHhjYTM3MTYwYywKKwkweDZlMjQ1YWZkLCAweDdhMWRmN2Q4LCAweGRkMTNiZjNjLCAweDFmOTZjNWYyLCAweGViYjY3ZDAwLCAweGUzMDU0Y2U1LAorCTB4MGI3YmY4MmIsIDB4Zjk4OGEwZTQsIDB4YTdlZGJkN2YsIDB4MzkwNDFlNjIsIDB4MWUxYzcwNzMsIDB4ZDc5M2ViMjMsCisJMHg5MzhjNDUwNywgMHg0YTVkYjRmNCwgMHhlZDBhNzg4MCwgMHhiZWM2ZTMwNywgMHg0MDVjYTc4ZSwgMHhlM2NkNDNiZiwKKwkweGZhZjEwY2QxLCAweDA4ZWVmOWZjLCAweDFmOGYyOGJmLCAweGM5OWNiNGY3LCAweGY5NGVmZTAxLCAweGIwMTlhM2UwLAorCTB4ZTJiZTczM2YsIDB4MTU3NTZjZjcsIDB4ZjlkMWZkMDEsIDB4MWJkZWZlYTEsIDB4YTVmYThjYjgsIDB4ZjQxYzVkYTksCisJMHgxOWY1YWFmZSwgMHhjZmUzZWI4NiwgMHg4YmYyMDMyNSwgMHhmN2M0NjdkNiwgMHgwOTVhYjNjZiwgMHg3ZWNlNDAxOSwKKwkweGI0YzUxZTViLCAweGMzNTcwYjgzLCAweDRkYmQzM2ZkLCAweGI3N2YwYjgyLCAweGI5NDQ1ZGI5LCAweDNhM2RhMGI1LAorCTB4NGNiYzUwYTAsIDB4NzJjMTYxMWIsIDB4ZWU3NjRlZjksIDB4ZjkzODg2NjMsIDB4MmU2ZmYwN2QsIDB4N2ZhMjIwZGUsCisJMHhmMmNiNDhmMywgMHg2Nzk4ZjVmNywgMHhlNTgzMjdhMSwgMHg1ZGU3ZjQ2MSwgMHhjNjE0N2MzYywgMHhkYzE0ZmM1OSwKKwkweGM0ZmY0MzEyLCAweDZmZDAwZGZiLCAweDgxMDJkM2U1LCAweGNjODg0YTlmLCAweDc3OTgxOGJmLCAweDE0NGYzNWQxLAorCTB4YzA1ZGU2MDcsIDB4NjkwN2U1ZjksIDB4NDY2ZDE1YmYsIDB4M2MwZmFmZjQsIDB4MWJjODQwZWYsIDB4MjFmN2ZkMDksCisJMHhiYzZmMGVlNSwgMHg5ZjZkMjhlZiwgMHhmOTYwNjJkYiwgMHgzZTM1NjY3ZiwgMHgwZWY2ODVkNSwgMHhkMGYzYjIwOSwKKwkweGE3NGYwNzNkLCAweDg3N2QxZTAzLCAweGIxZmQwN2ZlLCAweGQyMGZlZDQzLCAweDBlM2NmMmNlLCAweDU3ZGZiMDY2LAorCTB4ZDJmYWZkY2MsIDB4ZGE0MTllOWQsIDB4OGIzY2YyMzcsIDB4MzI3ZjdhYmQsIDB4NWI0N2IxZTgsIDB4ZTgzZjIzMmUsCisJMHg2Y2ZjYzgzZCwgMHhmYzRmZjY0MywgMHgwYWVmZTY2NiwgMHg1NzBmZDE5YSwgMHgwZWRmMmFkOCwgMHg4M2VhODRmYiwKKwkweGVlZGY1ZWIwLCAweGQzNzdiM2I1LCAweGJkNTVmOWIyLCAweDZmOTVhYTAyLCAweDBiZjcwNWI4LCAweGRmZjA4ZmVjLAorCTB4YzlmNzUyMDMsIDB4NTNhNzFlNWUsIDB4NzkxYTQ3ZjMsIDB4M2Y5YThkYmUsIDB4NDQ5M2U2YTIsIDB4MjdjZDQzY2UsCisJMHg3YzYxNGM2OSwgMHhmM2MzMmYyMywgMHg5NDViZDAwMSwgMHhlNzdlY2ZjZSwgMHg2OGNmMjIzMywgMHhjOGExYmNhOCwKKwkweDcxOTEwNzczLCAweDhhZTI0MTgyLCAweDQ2YzBhZjJjLCAweGM2YTA2ZTMwLCAweGJlNTQwZDE3LCAweDMxZDY0N2MzLAorCTB4ZDA2NTM3YjMsIDB4MjI3YmZkN2EsIDB4YzU0MzRmZGEsIDB4MWM3NWQ1MWIsIDB4Nzk4NjUxMzksIDB4OGIyZjU1NTYsCisJMHhiMGJmYWZlOCwgMHhiY2UzY2Y1ZiwgMHhlOTQzOGMyMSwgMHhjODYxN2M0ZiwgMHg3ZWNlN2U0NCwgMHhjYjQ3Yzk1ZiwKKwkweDU5MzdkZWYwLCAweGQyOGVmY2QyLCAweGU3MWUxYzU3LCAweGQ5ZjA3MjMzLCAweDk3OGZiOTIzLCAweGU0N2I3ZWQyLAorCTB4ZjVlODAzMzIsIDB4NGEwYjEzZmEsIDB4OWRlOGRlNDAsIDB4ZDc5ODA2NjUsIDB4YTZjNTEzOTEsIDB4NGQ5YmMwNGMsCisJMHhiNmIzN2RjMiwgMHg1M2I3MWQ1ZCwgMHgzZmZmZmU4NiwgMHgxZjAxMmE4MCwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKKwkweDAwMDAwMDAwLCAweDdkYjVmZjAwLCAweDU1OTQ1YzBiLCAweGU3NzlmOGRhLCAweDM4MGMyYjlkLCAweGE1MTE3MjgwLAorCTB4MzgwYTBlZTEsIDB4ZGI5NTkwMmEsIDB4OTc4NDI2OGUsIDB4NGQzMmQ0NWEsIDB4ZTU0NTA3NTcsIDB4ZGI2OTgwMzIsCisJMHhjYmJhZWVlNywgMHg1YWNkNGQ3OCwgMHhiNWFjYThkZCwgMHhiY2MwYzFiZSwgMHgxYTE2M2I2MCwgMHgyNWEzYjYxNCwKKwkweGI2OGI5NTk5LCAweDNmOWI1Yjk5LCAweDAyODZmMzI4LCAweGZmYjlmNTYyLCAweGNmZmViZjZkLCAweDNhZjM5Y2YzLAorCTB4N2U5ODhlZjMsIDB4YmY2N2RmYmIsIDB4ZGU3Mzg3N2UsIDB4NzNjZTdkNzMsIDB4OTMzOWNmM2YsIDB4MTk2ZTM5YTYsCisJMHg5ZWIxOWZkMywgMHhjYWRiMmQxYywgMHhjODdiM2IxOCwgMHg2MzBkODFiYywgMHhmN2ZjMDdlYywgMHhhY2YyYzY1MywKKwkweDE4MDM2MzEyLCAweDMxOWFiYWZiLCAweDNlNTdkZWFmLCAweDdjODFmYjNmLCAweDAyZDhjMTk2LCAweDMxNjM1OGU2LAorCTB4MzMyMzVhNDMsIDB4YmZkMTkxYWYsIDB4MWQxZmIwMWYsIDB4ZjI4MWVlOWIsIDB4OTg4MzU3ZjksIDB4NWRhZmMyMzcsCisJMHhiNjNkMTRmNCwgMHg5NDM1N2Y5YiwgMHgzZDQyNDc3OSwgMHgzNjc3YWYxMywgMHg0ZjI4NTIwNCwgMHgxODcyZjFjMCwKKwkweDlkZTkxMmNiLCAweDZlZGYyZDIyLCAweGViZjY5Y2IyLCAweGE2MTNjMmJmLCAweGM1MzU1N2NhLCAweGY5YTc0ZTU4LAorCTB4NDdmOGU1ZjIsIDB4NjM2ZmZjMGMsIDB4OThjOTE2NDYsIDB4OTc2MjdmOTMsIDB4ZGI3NGZjNWUsIDB4OTEzZjQ4NWMsCisJMHg1ODU2MDkxYywgMHg5ZWQ0ODU1NywgMHhiMTBjMGY3ZiwgMHhlZjU3YmEyNiwgMHgyZDNhZTMzMCwgMHg2M2YyOWJjYywKKwkweDVlNjA4Y2ViLCAweGQ1YWU3MWJmLCAweGY1YTQ2YWJiLCAweDI1NjZlMGY4LCAweDZiZDZmOWI4LCAweDVkN2MzODI2LAorCTB4MzgxMzdkMWQsIDB4ZThlMGFhYzYsIDB4MDU0MTNmZWIsIDB4NGZmYmViYzcsIDB4YWViZmYxYTEsIDB4ZmY0OWJiNGUsCisJMHhiZmQwNmY0MywgMHg1ZjdmMzU1NSwgMHhlZTM0NDliZiwgMHgwYjBkMGNhYSwgMHhhNGY0ODZjZCwgMHg1ZTAwY2RjMSwKKwkweGNiMjM1NTAwLCAweDFkODBjYzY1LCAweDc5NTY1NGMxLCAweDY2YWQxOWM3LCAweDc1MjU3YjVmLCAweDZjYjE3MWIxLAorCTB4OTQ2ZjdjMTQsIDB4ZmRmMGRjMGIsIDB4MjVhZTY1OTIsIDB4OTg1ZDUyMTksIDB4YTFkYmIxODYsIDB4NzA1ZWNlYmQsCisJMHgwODZiZjQxNywgMHg0MTcwOGYwYiwgMHg4OWFjMTMzZiwgMHhjMmVmYWViNCwgMHgyODMwMTUxNiwgMHgwOGYwNmVmZiwKKwkweDgzOGYxNWQ5LCAweGZjYzQyYTJjLCAweGYyYzU0MWFhLCAweGUzN2YxYzdhLCAweGI1ZjcwYzczLCAweDBmYzdjOGNhLAorCTB4ZmMzMzJmZDksIDB4YmEzMGVlY2UsIDB4Nzc3ZWExOTMsIDB4Nzk5NmM3Y2IsIDB4MDZkZmNlMzAsIDB4M2VlMGU2MzksCisJMHhjOTA5ZjMyYiwgMHgzZWUxOTc3OSwgMHg2ZGM3MjZiMywgMHgzZDhjMjE4NSwgMHgwZGFjNjE2ZSwgMHg1MGY2ZGFmMywKKwkweDcyNWVhZjVjLCAweDQwNWRlN2ZjLCAweDA2YWZlYzBmLCAweDc3YzkwZjU2LCAweDI1YWE0NzI2LCAweGNhYmVkN2MzLAorCTB4MDFmOWE3YWEsIDB4NjhiMmM0MzUsIDB4YTUwZDVmNWMsIDB4MDg1NzRkNTUsIDB4ODkxNmQ2Y2UsIDB4YWY3Y2E1ZDYsCisJMHg3NzA0M2Q2MiwgMHg4ODUxZTU4NiwgMHg3ZDJiNWE5MywgMHgxNmE0NzI2ZiwgMHg3MWU2ZmE2NiwgMHhjY2Y3ZmZhZCwKKwkweDlmZDAwZDJlLCAweDQzM2ZmZjYxLCAweGRhZGQ5ZTExLCAweDkwNmRmYjllLCAweDYwZTQ1YTdhLCAweDExYWVmODdmLAorCTB4ZjA3NjM5NzQsIDB4NTBlZDU5MzcsIDB4ZmFlZDg5NWUsIDB4ZGJkOGY2MzEsIDB4ZjMwY2E5ZTUsIDB4OWMyYzllODYsCisJMHhmZmI3YzFmNywgMHhlOTBlZDU5MSwgMHg2ZmNiZmI3NywgMHg1MGVkZjJjMywgMHg2ZWY5MGFkZiwgMHhjZGE1NGY3ZCwKKwkweDY2MjRiZmFmLCAweGY5NDY2OTcxLCAweDBmYjE2YWQyLCAweGY3ZGJlNTgxLCAweGYzODgxY2FmLCAweGRjYzFkMDY4LAorCTB4YTU5YzYxYzMsIDB4NDc0ZjIzNjUsIDB4OWZkODNhMjAsIDB4YjViODQ3OGUsIDB4ZWMzZDU4ZTgsIDB4NTRkMzU3NDcsCisJMHhlNTRhZjkxOSwgMHg0MzA1OGMyNywgMHhmNjE5YmIzZSwgMHg4M2Q5ZjIwNywgMHhmYjAzNWI5OSwgMHg5M2ZmYjk1MywKKwkweDk1NWZiOGU5LCAweDA2OGI3YTM5LCAweGJjMzQxMjk2LCAweGJlMDJiZGNkLCAweDJkMThlNTA3LCAweDJjNTNlMjEyLAorCTB4ZWNjZjVmMWYsIDB4ZmI2MjI1OGMsIDB4YjdkYzA4YmMsIDB4MmEzMTA2MzcsIDB4NDFmOTk3ZmYsIDB4NmJkYmM3MWQsCisJMHhiYzdiYzBmYywgMHhhYmM2MDFiMiwgMHg0N2VmZGI5MCwgMHhhMTdjMDAzZSwgMHhmMmE1ZjExZSwgMHg2NjhlNmZhMywKKwkweDRmNDZiMTU4LCAweDc4Y2ZlZTI0LCAweGQwZjgxNzFjLCAweDM2OWZhMmM3LCAweGFjMGVlMTZiLCAweGZiZTBmZGQ3LAorCTB4MmRlOGIwNmIsIDB4ZjVjMGUxYzksIDB4YjY4YzYyYjgsIDB4NjhjZmM0N2EsIDB4YmYxNGMyNzcsIDB4YWFjZDdkN2QsCisJMHg0ZmYwZjZhMSwgMHgyMjFkYmM0MiwgMHhhMDdiYmFlNiwgMHgyMjU4NzE2NywgMHg0NzBlZTVmZSwgMHgzMGQyYTg3YywKKwkweDM2NDNmMjA3LCAweDA3N2E4MDA5LCAweGU2NjE2NWUyLCAweGU5ZWJjYzk0LCAweGQ0MTViMThhLCAweDdiNTZkYmRmLAorCTB4NTdjNzM1YjMsIDB4MzM2OTkzZmYsIDB4ZDA3ZDFkMzMsIDB4YzEyYTYyMjEsIDB4MDQ3OWVmNTMsIDB4NjE1M2Q5ZTcsCisJMHg3ZDg1NmRiNiwgMHg4MjdlMGJmOCwgMHgzMzRmMmY3NiwgMHg1ODUwZTU3OCwgMHg1NmJjY2U4ZiwgMHgxOTNhM2MwMiwKKwkweDAwNzViYjNjLCAweGQ5YjU3ZmFjLCAweDczYWUxZWYxLCAweGQ3ZTM0M2ZhLCAweDE4M2E1ZTYwLCAweDc4OGM1ZDYxLAorCTB4OGI5ZWQ0NTksIDB4NzI2ZDEyZmIsIDB4M2JlMzgwN2MsIDB4MjJkYjhlOGQsIDB4MDY5Nzg5NjEsIDB4YzFmYjUyM2IsCisJMHgwOGMyYjM1NiwgMHg5ODU2NmYwZSwgMHhmY2U3ZDg1OSwgMHg3OTdjN2NmOSwgMHg1NGI4NDFhNiwgMHgzNmY0YjgwOCwKKwkweDdjNDNmNjI2LCAweDVmYWQ3YWVkLCAweDc0Zjk4MzE2LCAweGNhMDk1ODY5LCAweGRmMzEyZTg3LCAweDk4OGYyMDczLAorCTB4NzEyZTlmMWYsIDB4NDExN2QzMWYsIDB4NjNiYWQyZmQsIDB4ZWI3ZWI5ZmEsIDB4ZWVjYzYwYWYsIDB4ZmM3ZWI4YzksCisJMHgzMDFmYjg4YiwgMHhmZmQ3ODVmZSwgMHhhMWFmZGRmOCwgMHhmNzZmY2VhYiwgMHhjMDA0YjBhNSwgMHhhZDIyZTkxMywKKwkweGM3MWRiYmViLCAweDlkZjU4YjY2LCAweGQ2M2ZmNWM1LCAweDg3YTcxM2RiLCAweDA3M2QzOTc1LCAweDg4N2Y5Y2Y0LAorCTB4NTI3YjY5ZjUsIDB4NWQ3ZDZjN2UsIDB4YzI3Y2I2OWEsIDB4YTU5MjdkOGIsIDB4YWVkN2RlM2UsIDB4N2U1OGYxYTIsCisJMHg0OTdiZTAyYywgMHg5OTA4ZDg1ZCwgMHhlMjBhNTllMywgMHgwNjFiYTk1OSwgMHhhNTViYzNmMSwgMHg4YjNlMDUxZiwKKwkweDVkZWJiZjA1LCAweDE0MTNlMDJhLCAweDVhZjI4NTlhLCAweGZlMzI4ZjgxLCAweGNjZjgwMGE5LCAweGUxZTRmNmQ2LAorCTB4MGIyZjY2M2MsIDB4ZWE3ZTcwZDMsIDB4YmU1MWZjMjYsIDB4MWVhYTU5Y2YsIDB4MzBlMjI1NzcsIDB4MWJmNWNmY2MsCisJMHg2NmYzNGRjOSwgMHgyYjg2ZmYzYywgMHhmMjFlYmRjYywgMHhiZjk1Y2QwNiwgMHgyMWJkNDU0YywgMHhiZDQzNjM1MywKKwkweGYwMTA0YjYxLCAweGZkOGMxMTgwLCAweDhiY2ZlYzU5LCAweGUxOGMxZmMwLCAweGNiMTZiZTU0LCAweGZiNzg4M2EzLAorCTB4ZWUzNTY3ZTgsIDB4NzBiZWQwOTUsIDB4ZTFlMTMzNmMsIDB4OWI2Njk1Y2IsIDB4MzExNTYzMGMsIDB4ODUzMGFjNjAsCisJMHg0N2FlY2M3OSwgMHhlNjNkN2ZiOCwgMHg2MWRiZmIxZiwgMHgxZGUyODM5ZCwgMHhmZWIwZjE1MSwgMHhiODlhMTEzOSwKKwkweDFjM2NkMGJmLCAweDljMDMyNzQzLCAweGM3MGU2OGQ4LCAweGMyMDdiODQwLCAweGU4YjMwYTdmLCAweDM2YzY1ZmIwLAorCTB4YTdlZTkwNjgsIDB4ZTY1MmY4NTgsIDB4YTc4ZTljNGIsIDB4YzcwZWJiMzIsIDB4YTgzOTkwN2IsIDB4YmQyZWYxZGUsCisJMHgxYzFkMDE5ZCwgMHgzMDYwZjQwNywgMHg4Yjk4ODdlZiwgMHgzNzMwNjdjYSwgMHg5Nzk5MzNhNSwgMHhiNTljZmZlYSwKKwkweDAzYTE1ZTUzLCAweGZkMzlmZmMwLCAweDhkOWZmZTM5LCAweGIyNmYwOTkyLCAweGM3YmUwMWUyLCAweDJmMDZiMzgyLAorCTB4N2U0Yzc1ODUsIDB4NjE5OTM1MmUsIDB4MDgwMzM1OWYsIDB4Zjc5YjM3M2UsIDB4YjFjMzg5NjQsIDB4MWRiOGVhY2QsCisJMHhmMDViZGZkNywgMHhkMDM1NGJlZCwgMHgyNWU4YzY4ZiwgMHgyN2M2YmJmYywgMHg3ODEwMGRjNiwgMHhhMjdjZTNmOCwKKwkweDA5ZTM5N2FkLCAweDA2Mzk4MzkwLCAweGQ4YWY3MGUwLCAweGU1ZWQ3YmQyLCAweDhjYmQ3MDkzLCAweGZlOWU0ODU5LAorCTB4OWU1ZmQwNGMsIDB4YjNmZDY2NmMsIDB4NmRkOTdjNzEsIDB4YTVkOGI5YzAsIDB4YmU0MjQ2OGYsIDB4ZDZjYzhjNjAsCisJMHg1YmRlM2NjMywgMHhiZWRlNDhjZSwgMHgxMzc2NWMzNywgMHg4NjlmMjBhZSwgMHg3ZThiZjdmNiwgMHhiYTk5OGQyNywKKwkweGNiZDQxZmFhLCAweGRiM2RiZWZmLCAweDIwYzE2OTBiLCAweDdlZWQ5N2RkLCAweDdmYmUzNWY4LCAweDQ4MzBhYWVkLAorCTB4Y2JhOTI0MjcsIDB4MmQzNmIyMjcsIDB4MDY1Mjc1YzIsIDB4ZjNmMWZiOTQsIDB4ZjVkNWIzZmIsIDB4ZTE5OGUwMGUsCisJMHgyMzI4ZGI5OCwgMHgwZjhjY2RmZCwgMHgxODI2N2ZlOSwgMHg5MGQ4NDNiMiwgMHhiZDFmNjQxZiwgMHg5ZGU5ZWIyOCwKKwkweDBkZGY0NTc0LCAweGVmMTBkOGYzLCAweGIyZmI4Yjk4LCAweDY3YWZiZWY4LCAweDJkMzNiZDIzLCAweGNhMjQ2OGZiLAorCTB4NWQ3Y2EzYTksIDB4MDBkZDAyNWYsIDB4ZDVkM2IyMDYsIDB4N2U4MGQxMjAsIDB4ODgzZTgwY2UsIDB4YjdhMDczZjksCisJMHhkYWExN2E2MSwgMHhkMDQ1ZTk0YSwgMHg1NzdiZjBiMywgMHg5ZWYyOGRiNSwgMHhlYzcyYzJmOCwgMHhjYmRhZWU3NywKKwkweDRlMDY0NzVhLCAweDZkZjA4NTJiLCAweDM2YjdjMDg5LCAweDhjMTM1NzhkLCAweGIyNTViNGY0LCAweDYyNWM3Y2ExLAorCTB4MGMxYjFiNmEsIDB4MWY1MjViZjAsIDB4NjcxZDgzNmYsIDB4NTY5ZTRkNjUsIDB4YjdiMTdlOWMsIDB4NzViNzFmMzAsCisJMHhhZDQ1ZTFjMSwgMHgwNTVjNTY5OCwgMHg2Y2JkMDc4YywgMHgxZmY4NWNhZSwgMHg3ZjVkMDc4OCwgMHg3ZGRhNzJmOSwKKwkweDdhYjY3ZTUwLCAweGJlN2Y4ZDE0LCAweDc3ZTM0ZWRhLCAweGZhNTAxNzU2LCAweDM3ZTNiYzdlLCAweDRiN2IwZjM4LAorCTB4MTU4NDZiNDcsIDB4ZTEzMmU1NzcsIDB4MWQwZDdkY2IsIDB4ZTdjODU4ZGEsIDB4ZDIzYjI1ZDksIDB4ZTY3NmRkZTEsCisJMHg2ZDNkMDM3NiwgMHhiNWI5NzFkNiwgMHhkMjE2ZTQxOSwgMHgyOWNjOThlNSwgMHg1MGNhM2UyZiwgMHhjNzFlMzhhZSwKKwkweDUwOWMxZWYxLCAweGRjZmQ4NzlhLCAweDhiNDhhYTNmLCAweDllZmExZWY1LCAweDFmNzg4OGIxLCAweDhmMGNkZGRlLAorCTB4YmY1ZjAwNTksIDB4Nzg0NGI2ZjQsIDB4ZmQ2MzQ5NzgsIDB4YWU1OWVhMTksIDB4MGJlOTMyMjMsIDB4MmE5ODVhYmQsCisJMHg3MjdiZGZmNCwgMHg3YjA1ZGI4OCwgMHg2MjZmNzhiYiwgMHhjNWI3ZjIxNCwgMHhiODU0NmIzYSwgMHgwY2ViNWYxZiwKKwkweGJiOWQ2YmUwLCAweDk3ZjY4ZjZmLCAweDllZTE5ZDc3LCAweGJlNDMzZWVmLCAweDRiZTcwNWY0LCAweDVlNjczM2IwLAorCTB4OGU2NWJlNDAsIDB4NzZmZWUxYjYsIDB4ZjQwNGJiMDksIDB4Y2Y5NDYwYzksIDB4NDc0MTdhOTUsIDB4ZGYzMDU3YzAsCisJMHgxNGU2YzQxOSwgMHhkNWY3M2U0MiwgMHgxNzQ4YjFkOCwgMHg3Y2FhMWUzOCwgMHg3OTQ5ZGYwYSwgMHg1Zjg0YjlmNSwKKwkweDZkZTM3ZDViLCAweGVjZmZjY2Y3LCAweDcyNWZjODA1LCAweDkwM2E1YzZiLCAweGE3OTg5NzUzLCAweDU3NWM0ZGViLAorCTB4ZmE4NmQ5OWQsIDB4MGRhNDlhNjMsIDB4ZWE3ODRhNWEsIDB4OTM0YzNhMjYsIDB4YzBhNWRhYWMsIDB4ZmFiYzc2NTcsCisJMHgzMDNmYzBlMiwgMHgxYjE4MWJkNCwgMHhkYWRmZGYwNSwgMHhlNzdjNGMxNCwgMHhkNGVkOWQyZCwgMHgyMmZmNmM1MiwKKwkweDUzY2FmZjZmLCAweDA5YjJmY2JmLCAweDQ2MmIyN2QzLCAweDNlZjExMmZjLCAweDVhZTA5YzNlLCAweDIxZDJmYmZjLAorCTB4NjM0MzY3ODgsIDB4YmZhMDFiNjEsIDB4NWU0ODZmNWQsIDB4OTk2MzE2NTMsIDB4YzQ1NjA3MzUsIDB4NmQ4NjdjYzAsCisJMHg4NDBjZDBlOSwgMHhiNDlkNzg3NCwgMHgyMWExZDMxMiwgMHhmODY1ODcwNSwgMHg5NWJjNWVmZSwgMHgyMWIyMzFlNiwKKwkweDcyNDU4ZTVlLCAweGVjZmVlODE5LCAweGE4N2ZhNGE3LCAweDlhOGM5MmY1LCAweDMyMDc2M2NiLCAweDQ0MzI3ZTlmLAorCTB4N2RjMDVjZjIsIDB4NjI3MjE5NTksIDB4YjYzZmM5MDQsIDB4ZGJkOWZhOTEsIDB4OTllM2Y1MzIsIDB4N2NkMDBlYjQsCisJMHg3YTQ1ZGU3MCwgMHhiNzBiYzkxYiwgMHhlY2YxMTZhYiwgMHg0NmNkMjM5MiwgMHhlYmExN2FmYSwgMHg0YmRmZGM3OSwKKwkweGNhMWI0ODhlLCAweDU3MWE3ZDhmLCAweGZmNTg5ZGU4LCAweGY5ZDY5Njk0LCAweDUwYjFkZDQ2LCAweDM1ZmJlNDFkLAorCTB4YmUwOTk4ZWEsIDB4MjFlZjBjNTcsIDB4ZDgzMTU5YjksIDB4YzFkYzcwY2EsIDB4ODA1YmRkMmYsIDB4ZGM2Y2E5ZjAsCisJMHgzOGZkNGI1YiwgMHhlYTA5MzY4ZCwgMHhkMmJkZWM5NSwgMHg4ZDk0NzI4YSwgMHhjNDY0YjY2NywgMHg3ZjllNDZhZiwKKwkweDg2ZGQ5YzYyLCAweGY2YTRiNTcyLCAweDJiNmY5ZTViLCAweDU4MjE3Y2E0LCAweDNmYWM1YTEzLCAweGNmNjllYjhmLAorCTB4ZGFjNTM5MDksIDB4MTE3Zjg4YjMsIDB4ZmI3ZDVhY2EsIDB4YzY3YzA0ZjUsIDB4NWRlMzliZWYsIDB4M2VjYzhiMzEsCisJMHhlOTcyMDZmOSwgMHg4YzU5ZDIwMiwgMHgxYjZmYjc5ZSwgMHhlMDhlMzMzYiwgMHg0OTcyOGI3MiwgMHgzZDM5ZTdlOSwKKwkweDRlNTA5OTczLCAweGFjZmNiOWVhLCAweGY4ODE3ZTA3LCAweDE3ZmZmZDAxLCAweGQxYzhhZmY2LCAweDZjY2E1OTU4LAorCTB4M2VjNzc1ODQsIDB4YjRhZGIwNjcsIDB4ZDMzOGZhZGUsIDB4MzkyMWFkZmIsIDB4NTU3NWU4YWEsIDB4ODk1ODVmNDIsCisJMHgzNmZkYTA1NSwgMHg4MDRlNDNiMywgMHhiOTBiZTY3MSwgMHgwY2Q2YjRjYiwgMHgzMTllNDNkNCwgMHhhNDA5YjVkYiwKKwkweGEzZGU4MWQ3LCAweDRjNjY3OTIxLCAweDA2NThiZDQwLCAweDRmZDEyZjNkLCAweGRmODczM2NmLCAweDM2NmIzYzkyLAorCTB4ZmRiMTQzZGIsIDB4MmZlZmQ2YWQsIDB4MzE1N2Y5ZTYsIDB4NDQ0YjQyNGYsIDB4MzFjODU3NDgsIDB4ZjIzZGUwM2IsCisJMHhhMTI3NzY0ZSwgMHhlYjAzNTdhYSwgMHhlNzkwNzAxYiwgMHg2ZGZhMTIxMywgMHg3YWJhMDU1YSwgMHhmYTk1ODI1MiwKKwkweDdjMTFmODAxLCAweGNhMTllNzYxLCAweDI0M2NhNTA5LCAweGI4NDFlMzliLCAweDQ3ZmE0OGMzLCAweGUxYTJjNDU0LAorCTB4OWFmMGZjOGIsIDB4MTEyM2JkNjksIDB4NWJmZmViMGUsIDB4YmZhODRhZjYsIDB4MWJiMzNmZmQsIDB4YmU3MDI1ZjEsCisJMHgzZmRjMDk0NSwgMHhiOTg5MGJmMSwgMHg5NzU3ODgzNCwgMHg0NWFmNTRmNSwgMHg4ZmViYmVkNywgMHgzNGE1YWVkMCwKKwkweGVkNzY4NmMzLCAweGQ4MjFlNDNlLCAweGY0OWVhODRmLCAweGU2MTA5NmE5LCAweDk5Njk3YTQyLCAweDdkNDZlOTFjLAorCTB4YTdiNDJkZWMsIDB4ODg2NjFlOTAsIDB4N2M0NjI2ZjYsIDB4NDBjNjY1YmEsIDB4MGQwMzg3ZTIsIDB4ZjM1YzE4MDAsCisJMHhhZjZmMDM0YSwgMHgyNjQxZjQ1YiwgMHg5NjNjYmZmNiwgMHhjOTRhYzdlNCwgMHhmNDgxMzZiZCwgMHhjYmU0OTkzNSwKKwkweDZhOGZjMTQ5LCAweDY1MzNiY2MyLCAweDljYjlhZjI4LCAweDkzOWM3MGMyLCAweDYxNTY5NzYwLCAweGEyMjA5MmJkLAorCTB4N2IzMDlhYmIsIDB4N2RkN2YyMGMsIDB4ZGYxMzJkZmYsIDB4NzkwZTE5YWIsIDB4ZjIyNWYxMzMsIDB4YjY0Y2Q0YzcsCisJMHhmZTQxODRjNywgMHgzNTFmYjE2MSwgMHg2N2ZhZWViNSwgMHg2OWM5YmZiMSwgMHgzMjgxYWViNCwgMHhlMmY1NDQ1YiwKKwkweGU5OWYzZjc5LCAweGZkYzczYjc4LCAweGRiZDQ1YWMxLCAweDIwYzUwMjQxLCAweDRlMjg1ZWZjLCAweDJhMDdjODY2LAorCTB4NDRjZWM2MTMsIDB4ZjdlYzUyYmMsIDB4MjhkZjgyZTksIDB4NjMwMzYzZmQsIDB4ZmM2M2VhMmUsIDB4ZjVmOThjZGYsCisJMHgwN2FiYTQyNiwgMHgyMDFkNGM0YiwgMHg5MmM5ZDgzOSwgMHhiZjY4MjExNSwgMHhiZDkwZTgzZSwgMHgxZTViZDQwNiwKKwkweGQzNWZiM2M4LCAweDdmYjAxMjBiLCAweGIzYzI0Y2ZiLCAweGYyN2VjNTYyLCAweGJkYjg0M2NlLCAweGViNjQ2M2RkLAorCTB4N2Q4NDdmNDksIDB4ZGYxZWJjY2QsIDB4MjI2MzNjMmEsIDB4NTJjN2VkZmMsIDB4ZjM5N2E3MDMsIDB4ZDc0ODJmMzgsCisJMHg3MTRhM2IwNywgMHhlMzRkNTVkZSwgMHhjYWVkZmMyMywgMHg4NzU3ZjMxOSwgMHhmMThiZGQxMiwgMHgyM2RiNTYyZSwKKwkweDVlYTEyNzRlLCAweDMyYTk0MDUwLCAweGMxNGUzMjllLCAweGVhNWRhMzE0LCAweDgxOGRmNjhmLCAweDQyMzlhYWY0LAorCTB4NzgzMmFkMGYsIDB4NGRmZDIxYTcsIDB4YTMxZTM5MzcsIDB4NjQyZWNhNzEsIDB4N2ZkOGJlYTEsIDB4OWMzZjVhNGEsCisJMHgzMmZiZjc3ZiwgMHgyNTNkM2M0MywgMHgzMjE0ZjVmNiwgMHg0NWE3YzQ2YywgMHg0YzJmODQyMSwgMHg4ZWJmMWRlNCwKKwkweGY0MWNmZDIwLCAweGM3MzdjMjFhLCAweGRlNTI4NmVmLCAweGNjYzdiN2ExLCAweDFjNWNmYzQ3LCAweGNhNzFmODRjLAorCTB4NzI5ZmJmYzIsIDB4Y2Q3ZTExODYsIDB4ODdmOTVkZmEsIDB4YWE3YmUwMGMsIDB4Nzg3ODRmNTAsIDB4M2YyNjQ1YWEsCisJMHhjYTk2ZGZjZiwgMHhiOWMwM2Q1ZSwgMHg2N2Q1Y2E2YiwgMHhkNzVkYTA1MywgMHgzNzcyYWZiMiwgMHhlMmJlZGE0MywKKwkweDNmOTQzOGYzLCAweDRjNTQ1NmIzLCAweGNhYjM3NmMyLCAweGZjOGZkZDk2LCAweDNkNzQ0NmY5LCAweDQ0MTA2OWNiLAorCTB4MzViNmUxY2MsIDB4ZDcxMWJlYzEsIDB4ZDVjYTdmZDksIDB4MDNjYmU0N2MsIDB4Y2ZjZjlkY2IsIDB4MDk4M2YyODcsCisJMHhjZjg4Njc4ZSwgMHgxMTJiZGJlOCwgMHg3ZDZmOTUxZSwgMHg3M2ZhODcxMSwgMHg3YjJiZjM3NywgMHg2ZGZkMjE1YSwKKwkweGZhNzllMzg4LCAweGY4ZGVlMmJlLCAweGIwOTlkOGQ1LCAweGIwYjUyYWJmLCAweGI3M2Y4MDVmLCAweGM0NWUzYTI3LAorCTB4YmNlMzU1ZWYsIDB4YTJlZWQ4MjksIDB4ZTExZjJkYWUsIDB4OWFkZDk2YzYsIDB4YTVhMTdkZGUsIDB4NzY4NDlmN2UsCisJMHgyNTRiNTA2MCwgMHgwYjNiYjJhNSwgMHg3OTI5ZDFlNywgMHg4NDQ0YTU0MywgMHhiMDBiZTgyMywgMHg2ZjE2OGJlZSwKKwkweGI5ZTIxODY4LCAweGI3Y2JjM2QwLCAweDUzNDdkN2FiLCAweDA3N2UxNDhiLCAweDkxZWU1NzY4LCAweGIzZDIyNmVkLAorCTB4NmY5YzdhZGQsIDB4Mjg3MmZkNjAsIDB4NThiNzdhYTcsIDB4YmMzY2M2NWUsIDB4YTllOWFjM2MsIDB4N2I3ZWY4YmIsCisJMHgxNzlmYjBiZCwgMHhjNTZmMjQ3NiwgMHhmN2I0YmVmZCwgMHgzYjdmMTQ5NSwgMHg3ZWJkMzAzOCwgMHgxN2ZkN2NiZSwKKwkweDhlMDBiZjExLCAweDg3NDRhMTE3LCAweDUwNjBkNWY4LCAweDNiNWQ3ZmQ5LCAweGQ1Zjg1NDYyLCAweGJkZDUyM2I1LAorCTB4NzYyZjhmZGUsIDB4NmNjMWJlMDksIDB4ODhjOWRjOWUsIDB4MmU0Zjc2ZjcsIDB4OWYwYTU1ZWEsIDB4MTY0ZjQ2NjAsCisJMHg5ZTY5NmZkOSwgMHgxNDU3YjQyYywgMHgzZDBhYzMzZSwgMHhmNmVlNTQyOSwgMHg3ZGZkNjBhNCwgMHg3ZDlhY2Y2OCwKKwkweDhhZWQ5NmUzLCAweGZkY2Y1ZGFkLCAweDM2NGQyZThlLCAweGM1NmU4N2U2LCAweGNkZWZkMmJjLCAweDU5YmE5N2Q2LAorCTB4YmJhN2NhYWYsIDB4MDlkM2Y5ZDUsIDB4NzNiNjlmZGMsIDB4ODNiMTVlYTcsIDB4MzA0NzYxNjUsIDB4NTY4ZmIyYWIsCisJMHg1YzExYWZhZSwgMHhlMDU3YWFmZSwgMHgyZTZjNjhmMiwgMHhhZmUwMGRmYSwgMHhlNzM3OWEwNCwgMHhkZGI5M2JlMywKKwkweDIzYjg2ZmJjLCAweDYyYTlmOTE2LCAweDgzMGJlZjlmLCAweDUxY2EwNjdjLCAweGFmMjU2ZjNlLCAweGRlNzAyMWMwLAorCTB4MjBiYWZlMmIsIDB4OTY3YmZkMTYsIDB4NGU1MDhkNDQsIDB4M2Y4ODUxNmMsIDB4MmY5YzRkMmIsIDB4YmU4MWQ0YWQsCisJMHg0OTc2ODE5YSwgMHg1YWQzYzhjOSwgMHhkMTZjNTdiNCwgMHgxYzFmNWFjNSwgMHg2ZTFlNmMxNiwgMHhiODVkM2E0NCwKKwkweDFmZDFiODY1LCAweDFmNmU1NjFmLCAweGYzMGFkODc5LCAweDZiNWRiOGJjLCAweGQ0YWYyOWMzLCAweDdkNDI5ZmJhLAorCTB4ZDk3NmU1NmMsIDB4ZGRmNDYyZTMsIDB4MTdmYTg3NjgsIDB4NjI4ZjA3Y2QsIDB4Yjg1YjA1YmQsIDB4YmY2OTQyOWYsCisJMHg3NDRlNzM3MCwgMHg4NzNjZGZiMSwgMHgzM2MzNTc2ZSwgMHgwZmNlYTNkMywgMHgwN2U3NTI2YiwgMHhmMzkxYWVhMiwKKwkweGRjMzc2ZjNmLCAweDNjOGZjZWFiLCAweGZkOWZjZWFjLCAweDEwZDNhM2NiLCAweGQ3NjQ0YWVkLCAweDg3ZWEzMjUzLAorCTB4NDYxZmU3OWYsIDB4ZGY2ZTcxYjksIDB4ZGZlNGExMWIsIDB4MTViOGEyZjksIDB4OWI4NWRlZjUsIDB4N2Q4NjcwZDUsCisJMHg3MDFmNTA5MywgMHgyZTQ4OTM2ZCwgMHhlOTAzYmE5NiwgMHg2NWJhNmZhMywgMHhkN2UyYjk2YywgMHg5M2M3ZjM0YiwKKwkweGQ1NmFlNjMyLCAweGJmNWY1ZmM2LCAweGQ5YTY3OTkzLCAweDc0YjQ4ZmQxLCAweDIzZDNjOGYxLCAweGUxZGVmZDdkLAorCTB4N2I0N2E0ZDksIDB4MWJkYzcwMjcsIDB4ZGIzMzI5ZDEsIDB4MTY1ZjY4YWQsIDB4ZWVkZmUyOGQsIDB4N2Q5NjNhNWMsCisJMHg2ZDg4MjIwNSwgMHhmODhmOTYzOCwgMHg0NDg0ZjQ1NywgMHhmNWU4YjZmMiwgMHgyZjkxNzdkNCwgMHgzMTk5ZWM3NywKKwkweDA1NjlkMjgxLCAweGNmYzUwZjA0LCAweGYyNDViMGIyLCAweDMyZGU0MDg2LCAweGZjZWRlMzhhLCAweGMxOWI5MmNkLAorCTB4MzJhZWU3YmMsIDB4YzU0MWZjYTgsIDB4NThmM2Q0MWIsIDB4YmVmZWEzNTAsIDB4ZGZjMGU5YjAsIDB4YzRiZmU4MjUsCisJMHhlNTFlOTJmOCwgMHg0MzE2Yzk1NiwgMHhmZGNiMWY4MCwgMHg2NWUxZWEwZSwgMHhkOWQ5MThlNywgMHgxODNmNzU2NSwKKwkweGNkNzNmMmZhLCAweGJhZTFkNjU3LCAweGI4ZmFlMTliLCAweDA3ZDNlNzhhLCAweGY4MDY2MzRmLCAweDg1N2VmZWY4LAorCTB4ZmVhMTEyMzMsIDB4MzJiNTM1OWQsIDB4Mzk4MmFkYzIsIDB4OTIyNGIzMWUsIDB4ODYwZGU5OWQsIDB4N2QwMDJjNzksCisJMHg5MDY5ZjUwOSwgMHgyYmFlYjRiNywgMHgwZGI5ZmI5YiwgMHg0Y2NlNTRmMSwgMHhiNTg1N2U1MCwgMHhiZTFjYTJlNSwKKwkweGUzNjIxOGQyLCAweDVjYjZiMGZlLCAweDQyMTdlNDBiLCAweGMyNTZlMTFlLCAweDljN2MxMjM2LCAweDhlNjU3ZmM4LAorCTB4ZjliZjc2MmYsIDB4ZTdmOTNlZTIsIDB4OGZhZTQ2ZDksIDB4MDNkZWI1M2IsIDB4ZDY3Mjg3MDgsIDB4ZmY3MGVkNGUsCisJMHg2MTM5ZWJmYywgMHg1MWMzMjc1ZCwgMHhjZjY4MDhkZiwgMHhhZjBmZTQ2YywgMHhkZjY5ZWIzMiwgMHgzMDdlOWFhYSwKKwkweGVjNTc3ZmY4LCAweDUxMmVjNTAwLCAweDU5ZmY2ZGZjLCAweGUyMTA3MGY2LCAweGZlYzk2YWY1LCAweGQ0YzY1MWJjLAorCTB4ZjExNWE3YmQsIDB4NzI0Y2Q0YjgsIDB4Y2U1YWUxZmUsIDB4ZDlkMDZiY2YsIDB4NmNkN2ZkMDIsIDB4ZjM3ZDI3NGEsCisJMHg4MjllYzk2MSwgMHg0YzliNjVlYiwgMHgxZTgxMDc2NCwgMHhkYjNhYmYxOCwgMHgzZTgxZDdhNywgMHg5ZmExMzJlOCwKKwkweGJkYzgzNGI4LCAweGU3MGZiZjE1LCAweDhjY2Q3OWY2LCAweGRlMTdkMjE0LCAweGU0NWUzYzkyLCAweDM4NjdhZWMzLAorCTB4ZTY0Y2Q0YmQsIDB4NjRmMzUzZjgsIDB4MGNmZjdkMGMsIDB4ZmE4MzFhYTcsIDB4NmE0YmQ3MjIsIDB4M2Q3MmE1MzYsCisJMHg2MGYzZTY1NiwgMHhmZTIxMGJiZiwgMHhlNjJmMTM1OCwgMHhmMzRhYzAzNSwgMHhjOWY1ZjQ1MiwgMHg4OTczYzcxNiwKKwkweDVlMmNlYjdlLCAweGY0MjQ3YTAxLCAweDk5NWJmYzVmLCAweDk1ODI5ZmExLCAweDNjOTJkYzQ0LCAweGFhNzIxN2FmLAorCTB4OGRjOTkzNjcsIDB4NTJkM2VlZmUsIDB4M2Y5ZTJiNjEsIDB4MTNkZmIzNWMsIDB4MWRjZmRmMzksIDB4ZWEyNmRmNmIsCisJMHg1OGJjNWY5MSwgMHg0ZmZkNzkzMywgMHgzNTY3YmM3MSwgMHg3ZWYxOTVkNiwgMHg1M2RiYjdmMCwgMHhiZDNmY2Y1MCwKKwkweGY3MDIzNGM5LCAweGNlNzBkNGU5LCAweDcyYzc3M2I3LCAweDI1ZDgwMWJmLCAweGVlOTBhZGY2LCAweGZjYThkNDQ5LAorCTB4YjkxMjdiYWIsIDB4ZDEzZmIwOWQsIDB4M2NlOWU5NGEsIDB4YzkwYzQ3ZWUsIDB4MGNmZjI0MmUsIDB4ZjFmMTE1ZWMsCisJMHgxN2VjNzVjMCwgMHg4NWY1OGFlZCwgMHhjN2QyN2U0NywgMHhiMGY4MTQ3YywgMHg0ZTdmN2M3MSwgMHg1YzkxMjIzZiwKKwkweDU4YTRmNTg0LCAweDdiZmI5ZjIwLCAweDRlNzVmOTEzLCAweGVjYTJmOTBiLCAweDBlNTFlMDBiLCAweGJmYzE1YmM5LAorCTB4NDlmYzQ1OWUsIDB4MjdmMDE0YzQsIDB4NTFmYzJmYmIsIDB4NjBjM2M3ZTMsIDB4N2YxMDk4ZWYsIDB4MWY2ODNmMDAsCisJMHgzMjdhZmMxNSwgMHhmMDExZjY5MywgMHhlN2ExZjA4NywgMHhmMDBkZDM0OSwgMHgyODVmNmQ0NywgMHhlNWE5YWRlYiwKKwkweDVkYTA0N2Y2LCAweDMyNzBmODAxLCAweGEwYmNlZmQxLCAweDA0MjdhYzI2LCAweDNjMTRiN2NmLCAweDhlNzc1YTYwLAorCTB4MjA1YTM5ZmYsIDB4ZTZjOWU0MWUsIDB4NGJlZmU0MzQsIDB4ZWExYjIwYTQsIDB4N2Y4NDRiZGQsIDB4NDY3Y2M5N2IsCisJMHg4YjY1OGRmMywgMHg2OGQ3YTQyNCwgMHgwZWM4OTVlNiwgMHhlYzI2NmQ2NiwgMHgwMDNkMjdlZiwgMHhmYzNhM2Y3MywKKwkweGYzMjM1NWU5LCAweDU4NjM3Yjk3LCAweDhmN2YyYTk4LCAweDNmNTU0NjMxLCAweGZhYWYxMmNmLCAweGJhNzQ2ZjdlLAorCTB4ZWI3OGZiZWEsIDB4NjI3ZTU1NzAsIDB4ZmFhYTFkZGEsIDB4YThjNmQ5ZjcsIDB4MzUxYjNmZjIsIDB4YjI3ZjU1NWUsCisJMHg2ZjJhYjI3ZCwgMHhjZTJkMTY2NywgMHg2MGJhYTViZiwgMHg2ZjFmZGEyNCwgMHg1ZTkyMTc1NywgMHhkMTk3MDgxMCwKKwkweDViYWY4Mzg2LCAweGVhNDYyMDZkLCAweDAwYjQ1M2I0LCAweDBlZmRkMWJmLCAweDdjODc4OTJlLCAweDE0ZDMzYWZmLAorCTB4ZThjN2UwMmQsIDB4ZTI1NzgzZDgsIDB4ZDVhMjYwMmQsIDB4NDNlZmYxMDUsIDB4ODA0OTVlMGYsIDB4MzA1ZDc0N2MsCisJMHhjOGM1ZGZjZiwgMHg2NzU4MWYxZSwgMHg5MzMyZTI5ZSwgMHgwOTM2MzBiZiwgMHhlYWVkM2NlMCwgMHhmNjY4NDNhMiwKKwkweGNhN2NiMjdkLCAweDc1YTQ3OGZjLCAweDNmZjMzMjY3LCAweDc1NjZkOGI3LCAweGU1M2Q2MTg0LCAweDU0N2Y1MmJiLAorCTB4ZWZiNTIxNTIsIDB4ZmNmOWNjYmUsIDB4MzkzZmI4MjcsIDB4NzYwYTdhZmYsIDB4YjE4ZmM5MTcsIDB4YWM2YzM0MWMsCisJMHg1YmU3NGNkMSwgMHg3OGJiYThjYywgMHg3YzBjYWZjZCwgMHg4NjMzYjI1MywgMHg2YTk2YjlmZSwgMHhjMjJkNjdkOCwKKwkweGI3YTk0OGNiLCAweGMxZTk0MmRhLCAweGRmNGE2OGVhLCAweDYyYjJiNmFkLCAweDc1NmI2NzgwLCAweGFiODdhNTFhLAorCTB4YTQ3ZTU0NmQsIDB4MWZhNTE0N2EsIDB4M2QyOWRiNTYsIDB4Njk0MDVkNWEsIDB4YTUyMTc1NWIsIDB4YjM0ZjI4MTIsCisJMHhiMzZjNmY5MCwgMHgzYzIxZDVhZCwgMHgzM2IwZGE1YywgMHhkOWZlM2UzMCwgMHhlMWYyZGYxNywgMHg1MTlkOTZhZCwKKwkweGZmMmExNWY2LCAweDRkY2Y2NGNhLCAweGIyMGQ3NWEyLCAweDk0NWI5ZjkwLCAweGE5ZmZkYTFmLCAweGU4ZDFmOTE1LAorCTB4ZjVlMTIzNmMsIDB4ZDU5YjczNjgsIDB4NDhmM2NkOTgsIDB4OTk5Nzc1NjcsIDB4ZWJjYTEzNTcsIDB4ZjVlYmZkNjksCisJMHhmZTQ3MGNmNywgMHhhNjY5ZGEzMCwgMHg1MGJkNDk3YSwgMHhiZGViMGIyZiwgMHhmMmM1YTMxNywgMHhjYTFiN2E0NSwKKwkweDNmMDRlN2NiLCAweDkwMWNkMTBlLCAweDVlOTA5YzcxLCAweGM4MzQzNjdlLCAweDE0NGVmOWMwLCAweDVkZjg1ZmE4LAorCTB4ZjVkNWEzZjEsIDB4ODcwNmYxZjIsIDB4OWRmM2EyMmYsIDB4YzRjZGIzYzEsIDB4MTViOTE0N2YsIDB4YzE4ZGUxMWIsCisJMHhkMTJlYzVmOSwgMHhlNjg4Nzk1MywgMHgyZWZkMTViOCwgMHgwOWRlZDU1ZCwgMHg4NGUzYWY4OCwgMHg2N2E3MWY5YywKKwkweGE2MGYzODY5LCAweDk0ZjkyMjA5LCAweDFhZGY3ZjI3LCAweGNkYzVmOTBiLCAweDM5OGM3MGQyLCAweGRjMjg2NzE4LAorCTB4OTZhMWY2NDIsIDB4NmZlYjMxZDMsIDB4YjZiOGZhZTIsIDB4YTgxNWY0YWQsIDB4ZDYzMjNjNzcsIDB4MTVhMTFlYjYsCisJMHg4MTI1OGZiZCwgMHg1NTU3OTU5ZSwgMHhmMjcyODE5MCwgMHhmNDQ4ZGIzOCwgMHgzMWQ0M2YzZCwgMHg2YTZkZjEwZiwKKwkweDQ2YmRkMDA2LCAweDEzZjQwOTIwLCAweGZjNGMxMDVkLCAweDZhN2Y3YmIzLCAweDUzY2RlYTBlLCAweDBjYmRkNjBjLAorCTB4MjkyY2EyZTgsIDB4NGE3ZWYwODcsIDB4NjQ4ZTZiM2YsIDB4NDQ1ZGZjYzEsIDB4YWNhMjUzMjcsIDB4OWUxYjI1N2IsCisJMHgxOTRjZTQ5ZSwgMHg3MWJmYzc3NywgMHhkMjQ5M2QyZSwgMHg3Y2E5YzdmYSwgMHhjMzFlMzkyMiwgMHg1YzE0NTVmOSwKKwkweGY1ZjlmM2QyLCAweGViZjg5ZTkwLCAweGIzZjEyYjI0LCAweGM5MTkwNzAxLCAweDIxZjE5ZWRmLCAweDdmZDE1ZmM0LAorCTB4NjFmOTE4YjUsIDB4ZWIwNzM1ODYsIDB4NDI3YWU5YzUsIDB4ZmJhMGVlMzEsIDB4NWRjNTJkN2IsIDB4MDdkMGNkNDAsCisJMHgyZjFlZmNmYywgMHg4Yzc4ZjBiNSwgMHg5YTFiYmM0MCwgMHg1NTRkZTVjYywgMHhhYTAzOGYxMiwgMHgyOTFhMzY4YywKKwkweGNmOWNiOTZkLCAweDMwYTI0ZTI4LCAweGQwMzZlZDA5LCAweDU3OTRmYjFlLCAweGRjYjk5MzgzLCAweGU3YTM1ZjhiLAorCTB4NDk2NDNhZmUsIDB4MTA3YjY1MzAsIDB4OGMyZWYyNTMsIDB4MmM3ZGE5MDcsIDB4ZWNlZTUxNDgsIDB4YzdhNjRlMDAsCisJMHhlODdmOTQ3NiwgMHg1NDkyZTNmNywgMHhkZjU4ZWRmNSwgMHgxMWQ5OWRmNywgMHg5ZGZiNGE5YywgMHhiZjdlOTM3NSwKKwkweDQzYzYyYjRhLCAweGRjYzA1OTdjLCAweDdlNDA4NGI4LCAweGI4NzI0NWZlLCAweGZiNDExZTcyLCAweDEzN2Y2MmZjLAorCTB4MzI0OTkzZDksIDB4NzFlMDM3ZTAsIDB4ZmM4N2IwNmMsIDB4OGUyNjc1N2YsIDB4OWUxYTQ5ZWYsIDB4NzdmODY5ZDYsCisJMHg5M2U4MTA3ZCwgMHg3OTBjMWY5MCwgMHgzZWZhNzczYywgMHgxZTQ5ZTFkOSwgMHgwNTk5ZWQ0MCwgMHhhODdiY2JkYiwKKwkweGQwZjMwYzdkLCAweDI4ZjdjYTc4LCAweDlkNDM1ZWY0LCAweDMwNGYyMDQxLCAweGZhNmIyZDFkLCAweGU0OThkYjg0LAorCTB4N2QyMTFmMzEsIDB4ZjkxZjAxNzcsIDB4Nzc1ZjhmZGEsIDB4ZjUyZTg3MDUsIDB4NmM0YWE3ZGYsIDB4Mzc2ZmY2NmYsCisJMHhlZDI5ZGE5NiwgMHhkODZhOTYyYiwgMHhmZmM0MTFkNywgMHg5MjJhNWYwOCwgMHhiNzM3NzYzNCwgMHg1MDk1ZGYzNywKKwkweDdhNmQ2MDRmLCAweGJiNGE2Yjk0LCAweGJlZWZjMDEzLCAweDA1ZmY3ODA2LCAweDI3YTYxZmY4LCAweGY4ZTFlZjgxLAorCTB4YzNkZjAxOWYsIDB4ZjdjMDZmZjQsIDB4ZjAxNGZjYjAsIDB4ODFkYjRjM2QsIDB4OTdmOTYxZWYsIDB4OWQzMGY3YzAsCisJMHgxYjI0MzMzNiwgMHg2OWFhYTRlOSwgMHg4NTVhZmIwYywgMHhmZjg3M2FmNywgMHgzMTg5ZGRmOSwgMHhkOWNiZTM3ZCwKKwkweDllZDc2ZTI0LCAweGZiZmJlZjg4LCAweDdjNzEyNzdmLCAweGRmMzc3MTNhLCAweGQ3OTA2ZWI3LCAweGZlMDE5ZmE4LAorCTB4ZGY4NGIyYWQsIDB4ODc3NzZlNTgsIDB4ZWY5ZTczZjAsIDB4ZDc3ZWI4ZDIsIDB4NWZmM2MzMWQsIDB4M2ZhOGU5MjYsCisJMHhjNjZkODZiYiwgMHhlOWE1ZGZmNiwgMHhlNjQ5ZWYyOSwgMHhmODViYTM3MiwgMHhhOGZmMDEyZiwgMHhjMzFlNjU3ZiwKKwkweDdhYWE0YTg2LCAweDgxNGQyNGVlLCAweGRlZjk4ZmJiLCAweDIzYzdjYzlkLCAweDFjM2Q0NGZjLCAweDBmZGUzMWYxLAorCTB4ODRhZDJiM2YsIDB4ZjE3ODgxOWYsIDB4MjQ5YmEwODUsIDB4NThiYmM3MDMsIDB4MjdjOGYxZTQsIDB4YmU3NDRjYTMsCisJMHhlM2I1ZjMwYSwgMHhjNDlkNzQ3OSwgMHhmYzNhZjFmMSwgMHhlNzdiNzBkNCwgMHg3ZTg0ZmMzYSwgMHhlNzgwNGUwOCwKKwkweDA5M2ZhNDEyLCAweDM1MjUxZmMwLCAweDQ1Yjc3OTg4LCAweGUwODJmYzg2LCAweGEwYjNhMmRjLCAweDMyMjdlZmZmLAorCTB4NmJkYjE2MDAsIDB4ODRjZThmN2EsIDB4MTBjOGQ4ZjIsIDB4ZTQxZDllMmIsIDB4ZDQ1ZTZlM2QsIDB4ZWJiOGZmMTcsCisJMHgzNWZmNWRkZiwgMHhmZmFmNTQ3YSwgMHg3MzhiNzViYSwgMHgzNzVkNWI5MywgMHg5N2U0MTNmMSwgMHhmMDdkM2Y4OCwKKwkweDFmYzgyMTg3LCAweDMzZjg3YzcyLCAweDg0OWVkOTI2LCAweDI2NGI3NGZkLCAweGJiODFmYTJkLCAweDAyMmYxYzRkLAorCTB4MWE1ZGZiZDcsIDB4M2YwNTVmYzcsIDB4MThmYzQwYmUsIDB4YmFjM2ZkODAsIDB4YjllYjdkMTIsIDB4ODBhMGZmMzYsCisJMHgxNDY0MmRmNSwgMHg4ZmI4MTEwZiwgMHg1YmYxNWYwYSwgMHgzOWM5MWRkNywgMHgyNjAxYjgzZSwgMHgwNDFlZmM5MiwKKwkweDcxZmQxYmYyLCAweGM3MGI2NDllLCAweDY3NjcwMWYzLCAweDgxZjk0MjZmLCAweGZmZWEwMjcyLCAweGZhZmRjMzQxLAorCTB4NTZiZWRmMGEsIDB4MjY3M2M5MmUsIDB4MzlmOGE4NjcsIDB4NjdiMDdiNDMsIDB4Y2JlODgxYmYsIDB4YWYyNTYxYWIsCisJMHg0MzgyNWRhMSwgMHg4ZjU5ZDlmOSwgMHhmNmY1ZjMyNSwgMHhhMGQ2NGY0ZSwgMHg5ZGY1ZDRkZSwgMHgyN2YxNDVkOSwKKwkweGExNGU3YjAzLCAweDU5YjVkNjdkLCAweDZkM2RiOGM3LCAweDNjODEyNDlmLCAweDA1N2U4ZjliLCAweDhkYzVmYTJiLAorCTB4YTE3YjZlNzQsIDB4ZDQzZDk5MWEsIDB4ODUzZTVjZjMsIDB4ZjNkNTYxNzYsIDB4ZTgwMjMzMzIsIDB4OWRiZmU3ZTQsCisJMHg2MGIyZjg4NiwgMHg3YTgyY2ViZiwgMHg0ZmNkY2FjNywgMHgzYjdjNDYxZiwgMHg1MTU5MjhkMywgMHhjMjM1NzdkZSwKKwkweDQ1N2VhMWIyLCAweDA0ZGI4ODRkLCAweDhmMjFmM2Y1LCAweGY1OWExN2Y1LCAweDhmMWYyYjZlLCAweDE4YTc0Y2Y0LAorCTB4NjU1MzZiZWYsIDB4ZWZhNWZhMDIsIDB4NzA0NzVlNzksIDB4Yzc4M2IwNWUsIDB4NzliM2JjMzEsIDB4OWY2MzlkMDksCisJMHgwYTJjNGI3MSwgMHhjYmNiZTVkYSwgMHg5ZmQwNjM1YSwgMHgzMzY0YTJmOCwgMHgzOWE3M2I0MCwgMHhlZmRhM2NmZiwKKwkweGNkOTgzYjY1LCAweDNkOGFmZThiLCAweGIyYmU3NDIxLCAweDdmMWQ0NmEwLCAweGE0ZGVlMjUwLCAweDY0YTI3ZDQ3LAorCTB4YWNiY2JhOGIsIDB4OWQ4NzlkNGUsIDB4NmNlYjdlMjEsIDB4M2MzM2M3NTAsIDB4MTVlMjJjOTIsIDB4ZjI3MGQ5ZDIsCisJMHg5Mzg0ZDYzMywgMHhkM2YwYTAxZSwgMHhmNjMxZDkxYiwgMHgzMjRmOWNjNSwgMHhmYTI0NGRmNiwgMHhkZmZkZTU0OSwKKwkweGU2Njk3ZGM2LCAweGRmMjJjOWY5LCAweGRmNGJmOTAxLCAweGUwNTE3ZGYyLCAweGJmOWNhOTUyLCAweDRmNmNiMGM3LAorCTB4OTlkZmM2MzYsIDB4NTVjNzY4MmMsIDB4Y2ExNTdmMzYsIDB4YTgyY2VlMzAsIDB4Y2ZhMjdlZmQsIDB4NTM4YTY1MzcsCisJMHhiYjI0ZDc1YSwgMHgyZDE1YmUxMCwgMHgzZTMxOTdhNiwgMHgzMWVmNzJhZiwgMHhlMTA0MzViZCwgMHgwMWU5MDhmZSwKKwkweDFhZDczMmY3LCAweDFhYmNiZmI0LCAweDNjMjM2YjBkLCAweDE1ZmYyMzZhLCAweDIwMmNmN2IzLCAweGM5YjM3MGJmLAorCTB4NmYzZGU3NDIsIDB4MTMzYWRhN2UsIDB4NjYyNTdiZjMsIDB4ZGMxYzdkYzIsIDB4ZTBiMjc4NGUsIDB4NzVjZTk5NzksCisJMHhiOTNlNmExOSwgMHg3MTkxM2MzZSwgMHgzZDlmNzE1ZiwgMHgxNmJmNjhmZCwgMHgzZWUzYmVlMiwgMHgzZWUzYmVjMywKKwkweGQ4OWZiOGNiLCAweGU2ZWY0NDNlLCAweGNjZWRjMjc4LCAweGZlZjlkYjMzLCAweDJmOWVmYjJhLCAweGRmOTNkMDZmLAorCTB4ZjNlZjk2YjgsIDB4M2ZkN2NmM2QsIDB4YTA3ODQ0MWIsIDB4NjgwZjAyNjMsIDB4ZTE2Y2NmZGYsIDB4YmZkZmFlZmIsCisJMHhmMTEwM2Y1YSwgMHgwZjAwMzZiNywgMHhmMGQ3MGQ5YSwgMHgxZDc3ZTcwMCwgMHg3ZmVjMDQxZSwgMHgwN2NiZjBhOSwKKwkweGZlZTA0MWUyLCAweDQ0ZjgyYmRmLCAweDEwZmEzYzllLCAweGZlMmNkOWM2LCAweGYxNTcxZjA1LCAweGVmMGVjZDczLAorCTB4YWEwNDc4YWMsIDB4MTFmZjFhOWMsIDB4MzkyY2RkOWEsIDB4MDQ5NjM1ZmEsIDB4YjQyMWJkNzIsIDB4YzBmOTA5YjAsCisJMHg4NmJiMDlmMSwgMHhmYzA5OWM1MywgMHg5YzUyNDYzMywgMHhkZGVmYzExYiwgMHgwNTNkZmQ1ZiwgMHg3ZTNiYmZlOSwKKwkweGUyMzc5NmYyLCAweDcwM2FmZjY5LCAweGMxNjFkZDFkLCAweDk2ZWU3ZTVjLCAweDFiOTUxMmRjLCAweDUzODAwNmJjLAorCTB4YTQ1MWYwMWUsIDB4ODFiNmY2NDMsIDB4MDdiYTkxY2UsIDB4MzFlOGY0M2MsIDB4NjkzZjc3YzgsIDB4NDhmNmUxYjYsCisJMHg5NTFmNmU3NiwgMHgxMjc3YmNiNywgMHgzMWFjODZmZCwgMHg5ZmIyYWVjZiwgMHg4ZTUzN2Q4NCwgMHg2ZjdlMTVmNiwKKwkweGVmY2FmYjAwLCAweDdjYjI0ZTNjLCAweDRmM2VlZDQ0LCAweGNhZjVhMDRlLCAweGIyNjZkYjFhLCAweDk1OThlYTgzLAorCTB4ZTNhZjYzY2UsIDB4YmRmODhjZjcsIDB4YTFiYTA3ZTIsIDB4ZjdjMDE2M2UsIDB4ZWI5ZWZjN2QsIDB4MjgzNWNjNjEsCisJMHhiMTRiZTkwYywgMHhiNDdlMTRiMywgMHgwZjRiZjg1MCwgMHgxYjQ0NzYzZCwgMHgwM2FjZWI4MSwgMHhiNWJlZTNiOCwKKwkweDhmZWExZjAwLCAweGRiOWQzZDdlLCAweDhkZDFmOTJhLCAweGYxMTY3ZmE4LCAweGNlNzhlMDBhLCAweDQ2OWY2OGI1LAorCTB4ZDMzMmZjNDYsIDB4MGYwMjlkN2MsIDB4NjA1ZjExMmIsIDB4MDdkOTY1OWQsIDB4Nzc1ZjUxNDIsIDB4NmNlMWZlMGEsCisJMHg0OTdmMjEwZSwgMHg4Zjk4ZGIxOSwgMHhlMzA2NTVmOCwgMHg5YmMwZmI3OSwgMHg0ODdiZWRiMiwgMHhkZTE5YmZjZiwKKwkweDY1NWJmYTI4LCAweDNmZGViYWEzLCAweDI1MGM5ZjkwLCAweDAzZjk5MjdlLCAweGZjNjlkZmUwLCAweDM3YzdjNzNiLAorCTB4N2U4Y2U0ZjIsIDB4Y2JkYzA3MTgsIDB4NmU5MGZkYWMsIDB4NTJkNzI0NmYsIDB4ZmIyOTAzMzcsIDB4MzZlZTliZjUsCisJMHhjZmNhYWQzMiwgMHgzM2U1NTE2ZiwgMHhmYWFhZDEzZCwgMHhhYWFjOWFjMywgMHg2OWJkYzNlZiwgMHgwZjIzZWZhYSwKKwkweDljZjk1NGRiLCAweGZhYWE1MWI2LCAweGFiYjQ5ZmI3LCAweDE3YjQ3N2YyLCAweDc1ZGZlYWE4LCAweGVmOTU1MGFlLAorCTB4ZmNmNTgwY2QsIDB4YmRkNzM5YzgsIDB4ZmVhYTkyZDEsIDB4ZDU0OWFiNzgsIDB4MDQyYTY4M2YsIDB4NjE2OTg5OWYsCisJMHgzMzVlZjJhYSwgMHhmYThkZDM4NywgMHhlZWE2Y2ZiZCwgMHg3ZjZmYjE1NywgMHhmZmRkNGEzNiwgMHhkZmJhYmI2NCwKKwkweDZkODdkZDViLCAweGEwYjUyNzIwLCAweGI5MDc2ZjZmLCAweGQwNGVlOTg5LCAweDZmYTBiNWNiLCAweDhlNWU4MDM3LAorCTB4MmY0MTU3ZjksIDB4N2EwM2Q0YzcsIDB4MDZiZjk2MzksIDB4MWJlNjM5N2EsIDB4ZmNjNzJmNDEsIDB4MzAyM2IwM2UsCisJMHg0MDVkNTRkZiwgMHg4NWQ1OWJlOSwgMHg3ODMzN2U1NCwgMHgwZjcxOGFiNSwgMHg4ODhmNzE4YiwgMHhjNGRiMTk3MSwKKwkweGUwNGRmZWU1LCAweDdmNjhhMWYyLCAweGMzNmZiNDU0LCAweDNjM2U0OWY2LCAweGQ2NDgyOGFjLCAweDFkM2EwNTVjLAorCTB4OGY1ZTdlMTMsIDB4YzVmNjVhZTcsIDB4ZDc2OGY5ZWQsIDB4YjMyZmJjZjcsIDB4Y2MyNzQwYWQsIDB4ZGQ1YzNlZTEsCisJMHgwNDUyZTUxZiwgMHhlYzJmYWYzZiwgMHgwZWZkMDBmOSwgMHgyZDEzN2I5NSwgMHhhZWIwNmU3OCwgMHhmOGEzZTNlOSwKKwkweGI2NTFhYmJkLCAweDZjMWRkZDIyLCAweGZiMTQyYWZhLCAweDE0MTU3OGI5LCAweDllNDI5MWJjLCAweDc3ZjlkZTQxLAorCTB4ZjBmNWY5NDYsIDB4YzdkNWUzMWQsIDB4OTY0NTAxZWYsIDB4ZTQ4Nzk0ZTQsIDB4MjUyNGM1ZDQsIDB4MGU3YmE2ZWYsCisJMHhmNDdiMGQ4NSwgMHhiNmZlNzRlZCwgMHhlZmJmYmU4NywgMHg2ZmJmYTlkMSwgMHhiNzdkNTVhZiwgMHhmNzNjN2Q2MCwKKwkweGNlYzliYWQ1LCAweGY0YTRkMGJlLCAweGNlZmFhNWU3LCAweGZhOGVjOTI0LCAweGVmZWQ4NWYxLCAweGI3MzhjMWFjLAorCTB4MTE0NTNkOGEsIDB4ZGU1NjdlNzgsIDB4ZGU3MjJjNzAsIDB4ZDJmZmMwOGYsIDB4YzgxOTVkYmUsIDB4YTE5YTJiZDcsCisJMHhiZmFmYjMzZiwgMHhjODlkNjY4YSwgMHg5MzNiZjlmMywgMHgyMzg3ZTRmNiwgMHgxODkwNmVkZiwgMHg2YzhiOTI4YSwKKwkweDk1MGRjNTIzLCAweDkxM2JkNTM3LCAweGNkYTc5NTJmLCAweDRlMzllMWQ0LCAweGY2MTY0N2I3LCAweDczYzM4ZjNmLAorCTB4YzdkNzE4NWEsIDB4ZTc0MjU3M2MsIDB4ZjI3ZmJmNDEsIDB4ZTMxZmJhMWMsIDB4ZGU1YmJhNjksIDB4YmI3MWM1MDksCisJMHhkZjg2OWVmMSwgMHhjMjkxM2VmZSwgMHg1MjI3ZGFmNSwgMHg4Yjg3YmRmOCwgMHg2Mjg0ZWY4ZCwgMHhjZjNhYzVmYywKKwkweDVhZWUxYzNiLCAweGEwZmZhZDJmLCAweDRhNDM3N2M4LCAweDY5OTI2ZWYwLCAweDM1NTdhNWZkLCAweDdmNGEwZmI0LAorCTB4ZDRjOGE2Y2YsIDB4ZTRhNmY4Y2YsIDB4NzFkNzVjMTAsIDB4OGRjZjFmMGYsIDB4Y2UzMDA1YzEsIDB4NjJhMmE0ZjgsCisJMHhlODkxZmY5YywgMHhlOTMyMzkxOSwgMHhkYzZmZGM3NSwgMHgzZDYyNjQzZCwgMHg4ZTc4MTNlYSwgMHhmNWRkOTdkZSwKKwkweDU1YjdlODlhLCAweDlmYmRmN2M0LCAweGYyMmI3YWY0LCAweDExMDUyM2RiLCAweDg4MDY0OWMzLCAweGI4NTMzYjdhLAorCTB4NzdhZjkxOWQsIDB4Mzg5Y2ExMjQsIDB4MWY5MmI2NmUsIDB4NjI0MTQ1NzksIDB4NDFlZmVlMDgsIDB4ZTBiY2IxNGMsCisJMHg5N2NiZjI2NSwgMHg4ZWYxZjIzNSwgMHgxMTQyZGE1YiwgMHg4ZTM3OGVlZiwgMHg1MTZmNTE5NCwgMHg3MWMzYWJmYSwKKwkweDZmYWNmOGZkLCAweDRmYjQ1Y2RmLCAweDMzNWFlZTI1LCAweDNmZGJlM2Y2LCAweGIxNGVlZTVlLCAweGVlMjNiYjUwLAorCTB4M2Y1MGQzNjMsIDB4NGMxNjllM2EsIDB4OWVhYjQ1ZmEsIDB4Mzc5NzdiOWYsIDB4NzhmNmZkNzAsIDB4ZWNhZDZjNGIsCisJMHgxNmUxNWU3NywgMHhhNjlkZDFmYiwgMHg2YWVkN2RhMSwgMHgzMzdhODlkMiwgMHg5ZWFhOTllYiwgMHg5ZDU3ZWY4ZSwKKwkweDc3MTYzZTdhLCAweDU3YTg1M2M3LCAweGU5OTQ1ZjNiLCAweGI3NTM4ZWVlLCAweDdmZDcxMjI4LCAweDdlN2E4Yjc2LAorCTB4NGVjZTAyMjUsIDB4ZDIzMjM3OWQsIDB4Y2Q5ZDVmMGYsIDB4NGNjNmU4ZDcsIDB4ZDBhY2RlNzgsIDB4NTNmNjk1ODksCisJMHg2OWUzYzdkOSwgMHgxZTNiMmY1YywgMHgzOTBiZWZjZCwgMHg1ZTEzZDRmNywgMHg1YjdkZTRmYiwgMHhiMTFkZWEzYywKKwkweDRlZTNjMWZmLCAweDJhZDc2NjZmLCAweDVkOWY4MGZhLCAweGQzYWVkMGM0LCAweDY4ZTYyNDE1LCAweDNmNzI3YzEyLAorCTB4NzlmZWM1MmIsIDB4OTdiNDAwY2EsIDB4MDQwZWM5MGEsIDB4M2YyMTBmNjQsIDB4ZmRjM2VhMDgsIDB4ZWRmZWZmOTAsCisJMHhiN2I3MWM1OSwgMHhkNDQwZjQxMSwgMHgxMzRkOGM4MywgMHhhZjRhZmVmMCwgMHhlNjA0MDgwZCwgMHhlNzQ1YmJkYiwKKwkweDE5OGJmNjE2LCAweDQyMDVkMmY1LCAweDc1NmIzZDJmLCAweGJlNzhjYWU0LCAweGViNDM1Y2I4LCAweDgxZGQ4MjcyLAorCTB4ODI1ZDhhNzEsIDB4MTNkYTVkZGYsIDB4MDdkMjMzZmYsIDB4YjQxNmNiMGUsIDB4NzBmMWVlNjcsIDB4YzBkOWQ2M2QsCisJMHg0ZjRhZDJmNSwgMHhhMzQ2ZWZmYywgMHhiM2EwZGRkZSwgMHg1MzVhMDU1OSwgMHgyZmQwYWM1YywgMHhmNWJkMDhjZSwKKwkweDNkMWVmMmNjLCAweDI1ZmIyN2Q5LCAweDVmZjQzNGY2LCAweGNlODliNGQyLCAweDdlODQyYmFiLCAweDkwMzcyMTUxLAorCTB4YjM3MGIwOWUsIDB4YmQwMDJmNWEsIDB4ZGYyZjk1NDUsIDB4MDgzN2E4MWUsIDB4NWQ0NzkwN2YsIDB4NzI3N2Q4YWUsCisJMHgyMWZkMzVlYSwgMHhkMDExZWQxZCwgMHgwZTkwYTM0YiwgMHhkY2FkNTNhMiwgMHg5M2VjMjY2ZiwgMHgyOGI2OTkyNSwKKwkweDVhNzVmN2E0LCAweDRmYzUwNGViLCAweGRhYWFmMDgwLCAweGNlMjk3YWZmLCAweGIyMGNlZGRiLCAweGY0YjBiZDkxLAorCTB4Zjc2YjgyNGQsIDB4ZTkwZWRjMzcsIDB4OGYwNDY2OGUsIDB4ZGJlMWM2NmUsIDB4YmJmMWM0ZGQsIDB4OGRiOTI3NGEsCisJMHg5NWQwMWVkOCwgMHhlZTRhMzNmYSwgMHhiYTg3YThlNSwgMHgyZjg5NDM3YSwgMHhmNDgwNTYzMSwgMHhiNzA2NzhiMCwKKwkweDBiZThlZDM3LCAweDg1MGJmNDg1LCAweDI5ZjkxNDBlLCAweDViYmZiYTcxLCAweGY5ODcyZWRiLCAweDU0ZTQ4N2YxLAorCTB4MTM4ZTc3YWUsIDB4NDI0YjNiNzEsIDB4MDZiZjI0NmMsIDB4OWQ5ZWI5MWEsIDB4OGUxOWUyNTcsIDB4ZWMxMDMwZjgsCisJMHg5ZjlmODM2OCwgMHgyZGQ5YTA3YSwgMHg1MmJhYmQ2MSwgMHhlNDU3MTdlZSwgMHg0NWFkNjRmMywgMHg3ZTJiZmQ4NywKKwkweDRjZmNlNTIyLCAweGI3ODk1ZmU5LCAweDE2ZmY2OWJmLCAweGViZWNkZmU4LCAweDBmZGRlMDFmLCAweGRiMjU3ZGUxLAorCTB4NmUzOWYyNDYsIDB4NmQyZjcyYjIsIDB4YjJhM2QxMTEsIDB4NmY4MDhiOWUsIDB4MWY0NTFmZTgsIDB4NzM5YmVlMGEsCisJMHg3ZTdjODFjYiwgMHhmNzQ2ZGRmZSwgMHhmOTQzZjJjYywgMHg1YzQ1ZjIzYywgMHg0ZjEwN2U3MywgMHhiZjcyYTRjNywKKwkweDBlNTRjYWNjLCAweDJhOTE2NmI3LCAweDU0OWJlYjdjLCAweGM4NTRkOGZiLCAweGYyM2FhN2I3LCAweDQyZGNhOTUzLAorCTB4ZGFlNGI5ZjgsIDB4YTg4YzgwN2QsIDB4ZWVmODNlZjYsIDB4YmRmODhmZTIsIDB4MGY0MDJiYmIsIDB4YmU3ZTdmYzgsCisJMHhhOTI2YjI0OCwgMHhlNzhlMjJmNCwgMHhlMzA4YmM1NSwgMHg0NjhjNGUxZiwgMHg2ZGVjYjgzOCwgMHhjZTc4OTE2OSwKKwkweGNlNmJlOWNlLCAweGM5MzU5MzUyLCAweGVjMmU0ZmRmLCAweGM0ZGIwYzJmLCAweGQxNTI5YzczLCAweDRhNTJjNGJlLAorCTB4NGIxYzE1ZjcsIDB4ZDdlOGFkMjMsIDB4NDg3YTQyYWYsIDB4MDdmZTM5YjgsIDB4ZGJmYzNkZTIsIDB4Yzk1NmY4ODIsCisJMHhkZTdlMzYwYywgMHhhNmRkZjgxZSwgMHg0MTdiM2Q0NSwgMHgwOWM0NWQwMCwgMHg0ODc1YWQzYywgMHhmYjU5OGU3NCwKKwkweGI5ZmI5NmJkLCAweGQ3ZTQ0OTY2LCAweDc5MGExMDdhLCAweDU3YThiN2JjLCAweGEzZTI4NjMyLCAweDlkMmM4NDFlLAorCTB4MTdmNGQ1MDMsIDB4ZTlmZGFmZTcsIDB4YjEwMWVhN2MsIDB4ZGM0NTA3ZmUsIDB4Mjc5ZDIxYzAsIDB4ODczMGZkMWUsCisJMHhjZGY5ZjgyYSwgMHg3M2ExZTYwYywgMHg4ZGFjNTllMiwgMHg5NWMxMTNkMiwgMHhiOWQ0YmQ3YiwgMHhkMWRhMzA2YiwKKwkweGU0MGMzYTlmLCAweGI1NWRhOWZmLCAweDZiZjkwNDM1LCAweGMxNjU1YjE2LCAweDkzMjAyMzczLCAweGJjOGMzZmVkLAorCTB4NzgxMTllYjEsIDB4YmRjNGE0YmUsIDB4OWVkY2ZiMmEsIDB4ZjExYWI4NWEsIDB4NTFlYzFjZTAsIDB4ZGJlYjg4ZjQsCisJMHg5N2IyN2Y5NywgMHgxZjNhNjllMiwgMHg0M2RhN2Q3ZCwgMHgxZTliZWQwYywgMHg1YjI4Nzc4YSwgMHhlZTlhM2MzNCwKKwkweDViNThiODU1LCAweDdmNmZhZTVhLCAweGY2NTRmZDk1LCAweGFhYWNjYTBmLCAweDBjYjU4NTdkLCAweDY3NGNmODAyLAorCTB4ZTk1ZWI5M2QsIDB4YzBhOWZiZTYsIDB4MzNkNzRlMzksIDB4ZjIwOTQxMTUsIDB4ZTA1MGY4OGIsIDB4YWY3MDJiM2UsCisJMHgzZGM0OGI2NCwgMHg2NzQ3NDVhMCwgMHg1Nzg3ZmQ0MCwgMHg0ZmE4YWM2OSwgMHgzN2VmYjc1ZSwgMHg4OWFmMWZkOSwKKwkweDQ4ODZmMjdmLCAweDY4ZGVhNzY0LCAweGZhN2Q5NGJmLCAweDc0MmZiOGI5LCAweDNiYjc4YzMyLCAweGZjOTk3M2Y5LAorCTB4ZmJkYmZmN2QsIDB4NjNhYTRkZjUsIDB4M2JjOTJhN2YsIDB4MWI3NDlmNGIsIDB4YTIzN2E3NDgsIDB4MDM0YjM5Y2IsCisJMHg0ZTgwMzdlOCwgMHgwZGE1ZDFhZiwgMHgzZmRiZjNmZSwgMHhhMjUwZDJjNywgMHg5ZDdmNjU0NywgMHg1MTdmYjA1NiwKKwkweGQ4ODRiNWZlLCAweGZkZmFlY2RjLCAweGU3MTYzYjQ0LCAweGIxMjhkNjUzLCAweGExNWJhNDE3LCAweDdiYjI3NmQ3LAorCTB4NzAwYmY3MDMsIDB4ZTBmMjhlYzUsIDB4NTUzYTAwZjMsIDB4N2M0NmYxZjYsIDB4Mjc3YmUxNGIsIDB4YmI5ZTVjZjQsCisJMHhmY2U5OTMxZSwgMHg3YmM5MGJmMCwgMHgyYzdjODJjOCwgMHhkN2RkMzhmZCwgMHhiMTdmZWE1MiwgMHgyM2YwNmRiYywKKwkweDYzMTdjZmQwLCAweGNmNDI3YTc4LCAweGJjOTRmOWUzLCAweGU1ZmI4ODNkLCAweGI4MzE4OGJlLCAweDQ4NWZmZDcwLAorCTB4OWU1MTYzZTksIDB4YzdmZDIxN2YsIDB4YTUxZjNjZmQsIDB4NDY3ZTYyYjcsIDB4ZTQwYjU4ZDQsIDB4M2YxNGU4NGYsCisJMHg4N2MxMGFkZSwgMHgzYzdmZGNkZCwgMHg1NDcxZjZlMywgMHgzMmVmNjI0ZiwgMHgyZmY1YmY3ZiwgMHhjZjViZjIyNSwKKwkweGYzOGU5NjAxLCAweDVjZmIxZjhiLCAweDlmOTQwMjQxLCAweDcwZTI1NWZhLCAweGFjNWI1ZjNhLCAweDYyZTUwZmVlLAorCTB4YjhmZmY5M2MsIDB4ZDVmNzc2ZGQsIDB4ODY1MTVkMWUsIDB4ZjI2YjljNmYsIDB4NWU2NWRjNmMsIDB4ZjY0YzljNWUsCisJMHhhZDgwODk0MSwgMHhkYjlkM2MzZCwgMHhjZjdlNmVhOSwgMHhiZDM3OTE1MCwgMHhmYjM3NWY4NywgMHgwYmNmMjdmYiwKKwkweDdjYjVlZTdmLCAweGZlNzE5M2ZhLCAweGI2YzBlYWYyLCAweDlmYjA1MjI3LCAweDBiMmJiZDEyLCAweGFiOWYxYmVmLAorCTB4Y2ExYzQzZmQsIDB4OGY2ZDkyZjUsIDB4Yjk5ZTkwYTcsIDB4ZGEwYTVkNmQsIDB4OWY1YjI1MGIsIDB4M2U1M2IxNDgsCisJMHg4YWY2NDFkOCwgMHg3M2JiYWY5NiwgMHhhZjJmMWRmNywgMHhlYjZiZDNmNywgMHgzZjllYjlkMywgMHgwZjIwNzhjYiwKKwkweDQzMDljZGY1LCAweDNmNDZhZDJmLCAweDI0YWZmMjc4LCAweGQ2ZjQ0YzhiLCAweGUwZTUxYWI2LCAweGVmOGUzNGVjLAorCTB4N2M0OGM2YWMsIDB4YTJmZGUxOTksIDB4YmVmZWQ4ZmUsIDB4NDdjN2U0M2EsIDB4MTVkMmJlZDIsIDB4MzRlY2JkNDMsCisJMHgzNjYzYzEyZCwgMHg4Mjg4NmY3MywgMHg2NGFkNmNlZiwgMHhmNWZlNjdhOSwgMHg2MTM5ZDMwNywgMHgxZjQ5MmFkMSwKKwkweDViZTUxZmRkLCAweGUzYjQ3MGQ4LCAweDY4YzJkM2IyLCAweDBlZDc3MzFlLCAweGQ5ZjJjNTZmLCAweDA0Zjk3OGNiLAorCTB4MzhmMWJiODMsIDB4OWU5Y2YzZjYsIDB4ODA0MDY3ZTIsIDB4OWJjN2Y4MjUsIDB4M2I3MWE3NjcsIDB4ODkwNmNlNmEsCisJMHg5YzY1NmJmNCwgMHg2YjIzNjdlNCwgMHg5ZDk5ZDdmZCwgMHgzOWYzZTQyNiwgMHhlNTIxZjEzNywgMHg2NWE0ZGIxZSwKKwkweDg2OGRkZWM3LCAweDFkNmEwZjdlLCAweGY3YzFhNjc3LCAweDQ5OWNjZmEzLCAweDJlMzMzZTQyLCAweGRhMDY3Y2ZjLAorCTB4Yzc3YWM5MTksIDB4ZWViOGE1MGIsIDB4Y2I4YTA2YWQsIDB4OTU4YWNlY2EsIDB4ODhmZWEwYTMsIDB4OGQzY2M3NDcsCisJMHg0NTY1OWNlOSwgMHgzZmEyOTQyZiwgMHgzODcxYjM3NSwgMHhmM2U1NmYwZiwgMHgzNTU5MmM1YiwgMHg1M2JlM2Y2OCwKKwkweDg0NWNkMGZiLCAweDhjNjdiOWRiLCAweGFlMmYxZmE0LCAweDNmNjI4ZDRkLCAweDAyYmZlZjYyLCAweDYxNGQ2ZmZiLAorCTB4ZmJkODA3NmMsIDB4N2IwMmVlOTgsIDB4ZWQ0YmVmMWYsIDB4ZmNhNjhlYWUsIDB4OTRhZGFiMWYsIDB4YmYxY2U5YjIsCisJMHgxZjM4NWIxNiwgMHgyMzdmNTFiOSwgMHgwMmI3OGVjMSwgMHgwYjVlYzkxZiwgMHg3OGZlODFmZCwgMHgxMDdmNmY0NiwKKwkweGE0M2M5OWQ3LCAweGIxM2FlYjYyLCAweDNmNjg2NGFlLCAweDBmN2YxNWRjLCAweGRkN2IyMWMyLCAweDVhYThhZDIzLAorCTB4ZTdlMzQ5OGUsIDB4NWYxYzFmN2EsIDB4ZjFmYTQ3MWIsIDB4NGE5NzhlYjIsIDB4YjQ4NmZiZTEsIDB4ZGVkOGQ5YzIsCisJMHhkOTMyZTViOCwgMHgzZjM0ZWZlZiwgMHg1ZGUxMWIzZSwgMHhkN2MwZDViMiwgMHhlZTdkZDYyNywgMHgxN2E4OTQ5OSwKKwkweGZiZDc3ZmEwLCAweGFiYTdiMjNhLCAweGI0YmM3NGI2LCAweDFiNzlkMjBlLCAweGUzZmJkMTFlLCAweDc3YWVhZGZiLAorCTB4Y2RjZjk4OTYsIDB4NzA0NmVhZTgsIDB4ZDVkMzlmZjgsIDB4M2Y0NDcxMTMsIDB4MzJhZTgxNWIsIDB4YWFiYTc1ZmUsCisJMHhlMDljYjY1YSwgMHhlMTVhNWFmNywgMHg5ZmM4MzRlYSwgMHg5MGUyYjlkMywgMHhmZmE1Y2U5ZSwgMHhiNWRjZjA4NCwKKwkweDJiZjgyMjVmLCAweGJmNjk1NWZjLCAweDliZGI4ZDMyLCAweDA2Y2YxYWU1LCAweDdmMDRlZmQyLCAweDNhMmMxNmZkLAorCTB4ZTY4MWVmODQsIDB4ZGZhODI5YjMsIDB4ZTMzNGRiN2UsIDB4YWZiZGQ3NDcsIDB4ZDIzM2JmOWEsIDB4N2ZmNWYwMDQsCisJMHg3MzQ5NDJjNywgMHgxYjQ0OGVmNSwgMHhjNDU3MmZhYywgMHhkZjdlMDdkZCwgMHhjZTUxYTY5ZCwgMHhlMDVlNDhmMSwKKwkweGFlMmZjOTNmLCAweGQ2MjYwMmEyLCAweDkyZTUxYzJmLCAweDdiNDIwZGU0LCAweGYzZGVlOWFhLCAweDM3OTQ1MGRhLAorCTB4YWQ1MmZiMTIsIDB4ZmQyZmIyMWYsIDB4ZTY4ZGVkZTQsIDB4MTJiNGIzN2IsIDB4ZjhmYWQxZmIsIDB4MzUyN2VkZWUsCisJMHhlZTQzZjdhYSwgMHhiZDUyMGY2OCwgMHg4ZWNkNzFjNywgMHg5ZDNkMzI4MCwgMHgyYWQ0YzRhMywgMHhiZjE4ZjZmMSwKKwkweDRlOWNkNWQzLCAweGM1ZTdmZGYxLCAweDdkYWVhMjdkLCAweDNmNzEyZjYwLCAweGRlZmQ5MzA5LCAweGRjZGYzODM1LAorCTB4MzY3Yzg1OTksIDB4NmY5NWJkNzAsIDB4Mzg3ZTEyNzYsIDB4NGNiZjFlOWIsIDB4ZjhkMzY0ZjYsIDB4OWJhY2RhZjMsCisJMHhiNmMwZmZhZiwgMHhlMjY3N2E0ZSwgMHgxNzNkYWViYywgMHg3ZDJlYTJlZCwgMHg0M2VlMTY3YiwgMHg5ZjljNWJlNSwKKwkweGEwZTE0ZmZmLCAweGQ1YWU5Nzk0LCAweDY0OWRiZjczLCAweDRmMmVmYjIxLCAweDc5ZjY0OGJlLCAweDlmNmU2MWQ3LAorCTB4NGNiZjM2NTcsIDB4ODViN2I0ZmMsIDB4MzRhYTQ3ZmIsIDB4ZTg1MWY5NmQsIDB4ZDFkNDU4NGYsIDB4MzdhY2ZjOGEsCisJMHg5NTRiZGI5YSwgMHhlOGZmOWVlMiwgMHhiNTA3MjE0NCwgMHhmZjc4NzEzZCwgMHg5ZjM4OTJlMCwgMHg3YzM0ZWM1NSwKKwkweGI1ZTkwMDM3LCAweDUyNzFlMzRhLCAweDMwNTY1MGRjLCAweDBiOGY3M2MzLCAweDNlNTBjZjQ4LCAweDFhZmM2OTdiLAorCTB4ZWU3M2YzYzQsIDB4M2Y5MDIzMDEsIDB4OGZmNTkwN2UsIDB4ZmRhN2YyNGEsIDB4OTMyMmQ4MjksIDB4ZTJhYjI5N2UsCisJMHhjM2FkYWY5YSwgMHgxNGMwZjMyZCwgMHhjMWFiZThhNiwgMHgyYWRlZjhhYSwgMHg2NDY3ZjViZCwgMHhlN2UxMWVlZiwKKwkweDM4NDM1NTVlLCAweDM5MzdiMTNkLCAweDNhYWM1NTNkLCAweGViZjY4ZmEwLCAweDllODJhZmVmLCAweGMyNmYzZDE0LAorCTB4NzQ0MWZlOWYsIDB4ZmI2NGNmZjksIDB4YTMzZjIxN2YsIDB4NWZkODZmZmIsIDB4MjRiNzNmNzQsIDB4YmViOTdhODksCisJMHg4YjczM2U3MywgMHg2NDBiYWZiMCwgMHgyNGQ1NWVmYSwgMHg2MmVmM2MzMywgMHgxZTc0MjFkMSwgMHg1MjM2YzA1ZiwKKwkweGU2MDRlMDljLCAweGIxN2E0ZDE5LCAweDdjMjlmZGI2LCAweDlmZTI2NTg3LCAweDM3MTg5MWU0LCAweDlkMmU3YTA1LAorCTB4MzkwN2U3MWIsIDB4ZThhZTMwOTIsIDB4NzAxMjQ2ODQsIDB4ZjY0ZjY0ZjUsIDB4ZTkzOTY3OTMsIDB4OTY4ZDRlNWMsCisJMHgzZDYzOTIyNSwgMHhhN2E0YzEzMSwgMHgzMTVlOWY4YywgMHhmYTdmNWZjYiwgMHg0ZmVkYzQ4NywgMHgyNmY0ODdlOCwKKwkweGY3ZTFlZWU2LCAweDU5M2RiYzQwLCAweDRjNjRlZmZlLCAweDIyZjA1M2ZiLCAweDkzY2M4YjkyLCAweDljNmZjZDNkLAorCTB4YTcxZTc0ZmMsIDB4OWRjZjA1NzEsIDB4ODk1NDlmODEsIDB4ZjkzY2NkZjMsIDB4MGVkMTY3ZmIsIDB4OWY5ZmJjNWEsCisJMHhjNGQwOWRlYiwgMHhjOTcxNGE3ZiwgMHhjMjU4YWY3OCwgMHgxZWZjYmJmYiwgMHhiYjMwNzMzNywgMHg3MzI3ZTkxZCwKKwkweGE5NWZkZDAwLCAweDhjMzEyZGRhLCAweDM2NmNhYjJmLCAweDRkN2Y0NTZjLCAweDEyM2RhZWE1LCAweGQzNWQ3OWYxLAorCTB4ZTdjNDdhMjcsIDB4Y2NlZjNjMmEsIDB4Yjk3ZmY3ZTQsIDB4Zjc0MmRhZmYsIDB4OGMyY2FiYjksIDB4NTM0NTU3ZTQsCisJMHg0N2U4YTdlYSwgMHhhNWNjMzhhYiwgMHgxOGY2ODU2OCwgMHhiN2M4ZTlkOSwgMHhjNmYyYmM3MSwgMHgzYjk3NjQzZCwKKwkweDcyZWM5Nzk5LCAweDZmMWE4MzY3LCAweGY2ZmJhMzdhLCAweDViYTdlN2EzLCAweDhjNjJlZjU1LCAweDYzZTljY2RmLAorCTB4OWFjM2M2MWEsIDB4NDNmOTM5YTksIDB4ZDU0NzQ3YzcsIDB4YzliYmRmZmEsIDB4YjVmMGU3NGYsIDB4NTFhYjlkY2IsCisJMHg5MDRlZTk4ZiwgMHg0YThlZjg2YywgMHgxNTZiOTA3NywgMHgxNGFlNDdlYSwgMHhiZjc0ZDdhZSwgMHgwMTdiMmJiZCwKKwkweGY2NzcxN2YxLCAweDA3N2M0Y2Q0LCAweGUzYjFlYjg2LCAweGNhZDI2ZWQ3LCAweGRmMTlmMzdlLCAweGRkN2ZmZGMyLAorCTB4MWY2NGFjNDEsIDB4MTA2M2JiZWQsIDB4MjlmZGM3ZWUsIDB4MzllOTA1ODUsIDB4ZDFjYzdlZjQsIDB4MjM0ZmQwYmIsCisJMHhhZTA0ZTllZSwgMHg5ZjBhNjhlMywgMHhkZmY0MTFjZiwgMHgzZGU2Zjg2NCwgMHhmMzk2MzYzMSwgMHgzYzI2ZTYzMywKKwkweDYyZjcxNTZhLCAweGE1MTZmODk0LCAweDU3ODExNmZkLCAweDg5MTdlY2Q3LCAweGM0NmU5ZGZiLCAweDA0YmNmMDVmLAorCTB4YmNmMTMyZTMsIDB4MjI5ZGQzMDQsIDB4NGJjZjEzN2UsIDB4ODhhYWZmMzAsIDB4MTJmM2M0ZGYsIDB4MTJmM2M3MmMsCisJMHhmODhhMzdjYywgMHhjMTJmM2M0ZCwgMHg2MDk3OWUzYywgMHhkZjg4YTZmYSwgMHhhNTUzODIzYywgMHgxYWU2YjNiOCwKKwkweGE0NTY4YmM0LCAweGZjYmU4MWI1LCAweGZjODBmMDg5LCAweDEzZmQ3NTQwLCAweDNmM2E5MmUxLCAweDhiZmFhMjUwLAorCTB4NWM2YjliZDIsIDB4YjRhN2U4MTksIDB4ZmRjNTc5MDgsIDB4MWQ4M2ViOTQsIDB4MmFmODQwYmYsIDB4MTVjZjBlZjcsCisJMHhlOTBmYmQzYywgMHg4Y2Y4NWM2OCwgMHhiZDVmNDg1OSwgMHhmOTBjMGRmZCwgMHhjNzc0YWVkMCwgMHhmODc3YWMzMiwKKwkweDliNDkzZGYwLCAweGU4OWEzZjg4LCAweGMzYzRmOGZjLCAweDA1Zjc1NTQzLCAweDVjOGRhNGM3LCAweDMxZjkwZDk1LAorCTB4NmJkYzQ5NjYsIDB4NTBhYzM4ZGUsIDB4NWNmMGZiYjEsIDB4NWIyOGE1YmMsIDB4MDU4MmY5Y2IsIDB4ZDkzY2U0ZjUsCisJMHgyY2UzOGM1OSwgMHg0NDhkMzE4ZSwgMHhkNTNjM2JmZSwgMHgxZmJhNzhmMSwgMHhiODFmY2ViZiwgMHhhMWY1MDkzMCwKKwkweDUzZjU5ZDU2LCAweDNlYmE5N2Y0LCAweDliYjQzMWQyLCAweDUyOWFiZjE0LCAweGU2M2E5MGNmLCAweDNlMzc2YzE5LAorCTB4MDhkNTcxMmQsIDB4MGM4ODFmZWMsIDB4Y2Y1ZDljZjksIDB4NzY3ZTcwMWEsIDB4ZGZjNGIwNGQsIDB4OTE2YWIwOGQsCisJMHhmNjIzM2MwZiwgMHhlYjk1YWM3YiwgMHg1NWJkNWVjNSwgMHg3Njc2OGUxYiwgMHg3OGZlOThkMCwgMHhmNjJhZGE3ZSwKKwkweGRmZDhiMGY3LCAweGYxN2Y2MjIzLCAweDk2OWM2OWJjLCAweDhhNjEzNzlmLCAweDJhOTg0ZGU3LCAweGQyYzc1YTcxLAorCTB4Mjc0YTVmMGEsIDB4MjFjNGY2ZjgsIDB4ZGRiZjE1N2MsIDB4MWEzZWU1MDQsIDB4OWVhMWM0ZjMsIDB4ZDdjMDk5ZjAsCisJMHg5MTlmMDQwNywgMHg3OWViMGFkMiwgMHgyZmRkMGYzYiwgMHhiNGZlMTcyYywgMHhhMGJlNzE0ZSwgMHhlNzY5NTNhYywKKwkweDlkYzdjZjZiLCAweDY3ZjM4YzMyLCAweDEzZGM0ZmQ2LCAweDE4NWNjNDFiLCAweDhkZTUzYWY3LCAweDc1MDdmMjE4LAorCTB4Y2UzZGY5YjksIDB4YzhkYjQwMjksIDB4ZmMxYmQ4YmYsIDB4NzM0NTlkZmMsIDB4N2FmMjk5M2EsIDB4Mjk1YmQ1MTQsCisJMHhlMTE1OWFmYywgMHgwNzE4Mjk2ZCwgMHg0OWU4MjVkZiwgMHg3NmY3MmJjOSwgMHhkZTQwNDYyYiwgMHhhZmFiOGJlYywKKwkweDgyOTZkMjk4LCAweDkyNWRmNTcxLCAweDU0Nzg4MzQ5LCAweDNmN2Y5NWIxLCAweDIyYWRlODJlLCAweGJjYTdmNDQxLAorCTB4YzRmNDYwODcsIDB4ZWY3NDNlZTEsIDB4ZWYwZTIzN2YsIDB4N2IzN2FkODksIDB4ZWY3ZTcwMTcsIDB4OThmMmY3ZTUsCisJMHg4NGUzMDUzNywgMHgyOWNmMjUzYSwgMHhkZmFkODc4YywgMHg4YzQxZjkzOSwgMHg3OWQ0ZWQ4NywgMHg4ZWZjYzI1ZSwKKwkweGM0MWY1MzlkLCAweDY5NGVkODc4LCAweGZmOGIyOWNmLCAweDM4OWUwMWY3LCAweGRmYWQ5NzhjLCAweGY3ZTQ0NTM5LAorCTB4ZjM2NjE0YmMsIDB4M2I1ZWViY2IsIDB4MmJmNWRmODUsIDB4ZjE4ODNlYTYsIDB4ZWUwZDEzYjMsIDB4MmY4OGQ1YzMsCisJMHg2NTc4ZTQ3ZiwgMHgwY2Y3YmRkYSwgMHg5OWJjYTdjMiwgMHg3NzYzZWJlYiwgMHgxYWY4YmRlZiwgMHgyMWJkZTNjYSwKKwkweDU1ZmY2ZTc0LCAweDdiYzEzYzdhLCAweDFiMmJmMzY1LCAweGY2YmFjZjEwLCAweGQ2MGU4OGU4LCAweGQyZjI3YzM3LAorCTB4ODE5ZWE5YWYsIDB4Njg5YjJiOWUsIDB4NmJhMzY0ZjAsIDB4OTc5ZGQ1ZTQsIDB4Mjc3MWMwMWYsIDB4YzFiZTdiMDYsCisJMHhjYzg2OWZmYywgMHg4YzRjNzlhNiwgMHhlZWZjNzRlMCwgMHgzMTA3YTI5MCwgMHhlZjZiYmQ5ZSwgMHhlZTkwYzdlZSwKKwkweGZjNjNmNjI2LCAweDEzMmVmNWRlLCAweGViZDk0ZmVkLCAweGFlZDBlM2U5LCAweDliNjkwYWVmLCAweGVlNTdmZDhkLAorCTB4ZmRmM2YwMzQsIDB4YmRlOGEzZDcsIDB4ZWU3NDllODgsIDB4YjIxZDJlNmYsIDB4YWJlNTBlMzEsIDB4ZGIxZGNkZTYsCisJMHhjNjdlOGQ3ZSwgMHg2ZjNhMjY5ZCwgMHhmYWU3MGFhOSwgMHg5YjVjOTk1ZCwgMHhkZmVkMDhmYiwgMHg4MGZlZGJjYiwKKwkweGEyNjFkZWYzLCAweGY0NTJjZmYzLCAweDc0YmU0MGFkLCAweDE3YmYzMjViLCAweDY2YWZjZmZlLCAweGM5ZTQzZWUzLAorCTB4Y2E3ZWU4NWIsIDB4MGQyNjc1MzcsIDB4ZGViOGUxYzIsIDB4ODNlZjBmZGUsIDB4YzhlYjhlYjgsIDB4ZjkxNTJjY2UsCisJMHg3YzExMTNkMiwgMHhmOWVkYzEzZSwgMHgzN2ZkN2ZiNCwgMHgyZDdjYTFjNiwgMHhmZGU1Zjg4YiwgMHhmMjg5ZWYzOCwKKwkweGNlZDA5N2M2LCAweGY3ZjBhZjYxLCAweDAwZWZjZWNkLCAweGYzYmI0MWI4LCAweDBlOGEzYWY1LCAweDQyMTFkYWVkLAorCTB4YTUzYmI2ZjcsIDB4ZGRmMWIzOGQsIDB4YWYzZDU3MGMsIDB4NDhkYTY5ZDcsIDB4YTdkNTc0ZjAsIDB4NzZiZGY3ZjIsCisJMHhiMGMzYTc0MCwgMHhmOTU1MjZkZSwgMHhiMjU3ZmFmOSwgMHhiMGJkMGVkMCwgMHhhM2Q5MjI3MywgMHhmNDJiOWUwYSwKKwkweDc4MTc1NjUyLCAweGFmZGY4YzJmLCAweDMzN2YxMzJjLCAweGZkOTk4YjhiLCAweGY2MTc0YWZjLCAweDAyZjVkZjNkLAorCTB4ZDBiZmI1ZjMsIDB4YzhmYmEzYTAsIDB4MGFiNjA2YTUsIDB4N2ExNTcxZTMsIDB4YjdiZDhiMjgsIDB4YTY1N2Q3MDAsCisJMHg3ZDQxNGRhOSwgMHhmYjY0NzRhNSwgMHhmMzhiYTQ2YywgMHg4NjhjNjYyNiwgMHgzOTA4MWY3YSwgMHg3Y2I4ZDY1NSwKKwkweDM3YmRlYTMyLCAweDQzMWRjZjlhLCAweDU2ZmExZjM4LCAweDRkYjdlMWQwLCAweDc5ZmZiNzI2LCAweGI3ZmE2MDVmLAorCTB4NTBmZDY2NmEsIDB4N2NmZmNiZWIsIDB4ZGM5ZWZhOTEsIDB4MTM4ZjdhMDcsIDB4NzBjYWIzZWQsIDB4NDE0ZTNmY2UsCisJMHg1ZmUwMDZmZCwgMHhmY2UxMGZiNywgMHg3NTUyY2U2MiwgMHgzYzIxOGNmZCwgMHhkZjUyYjEwZSwgMHg0ZWYyODI5ZSwKKwkweDg4N2QzZmU5LCAweGRhODNlYjg1LCAweDJhMjc3YTc2LCAweDU5NDRkZGIwLCAweGZjNWQ5YmYwLCAweGEzNTk2OWRlLAorCTB4MWRmNzQxZDQsIDB4M2U5MWE0MTAsIDB4NWQxOTk2NzgsIDB4ZTlkMzhjNmUsIDB4NzNhMjFmNmIsIDB4YmRlMDNlYzUsCisJMHgzNGYxMjE4MiwgMHg4OTgzNTk1ZSwgMHgwNzk3MmRlZSwgMHg3ZWEyODdiNSwgMHgwZjY5MGNlNCwgMHhlYmE3YmQ0NSwKKwkweDhiZGU5OTRkLCAweGFmZWJlZGM0LCAweDFiZTA5ZmY0LCAweDk2MTdmMTRmLCAweDUzNzY3NDdhLCAweDcyYzFlMzVmLAorCTB4ODg1ZTJlZDAsIDB4M2UyODAzN2YsIDB4ZWI0MDkyMWIsIDB4ZTYwYTY5MmUsIDB4ZWQyZGE0ZjcsIDB4ZjAzODZmNzQsCisJMHhkM2FlMjExZSwgMHg1ZDhmNDdlMiwgMHhmYTQ3MmY0ZCwgMHg4N2IzZTdkYiwgMHg1N2ZmMGJjNCwgMHhmNzRkZDEwNywKKwkweDQzOGNiZjNmLCAweGIwZDMyODNjLCAweDc4NWU3ODU1LCAweDE1ZjdlMjQxLCAweDE1Zjc0ZjIwLCAweGM3NzM4ODJlLAorCTB4NDFjY2VmYjIsIDB4YmUxNzNmODgsIDB4NzcxZDEyNzUsIDB4ZTdjNGVkNDksIDB4ODhhYWJiY2MsIDB4ZGFlOTc0M2YsCisJMHg0MzQ5Y2Y4OSwgMHhhZTdjNDE3ZiwgMHgzNjdkYWMyYiwgMHhkMGYzMmRmMiwgMHg0YzdiZmMzNSwgMHg0ZmJjNmNmYiwKKwkweGM4ODg2MTczLCAweGY3MjQ2NjBmLCAweDQwZGFlZTA3LCAweGNjYTI2NGZjLCAweGNiZDgxOGUzLCAweDBiZjcwYjNhLAorCTB4MTQyZjc4NzEsIDB4ZWQ2YzYyNzAsIDB4M2JiMjZhODksIDB4OGZkNDU2NzQsIDB4NDI0YTg3NjIsIDB4ZDZmYmQ3ZmYsCisJMHhhOWU4ZmIyZiwgMHgzNzc3NTk4YiwgMHhmMDk2N2QyMiwgMHg5ZjQwNjI3NywgMHhmNTBkNzg2YSwgMHhmNDkxMTliZSwKKwkweGRjMjA0ZGNlLCAweGZlYmU3Mzk0LCAweDgwNWY3ZmUxLCAweDcxMGE2NGZiLCAweGU3ODIxY2FjLCAweDY0ZWQxOWQ1LAorCTB4OTNiNjAwNTcsIDB4YjZmOTVlZmUsIDB4NmVjYmVjODEsIDB4ZTQzNmNmNWQsIDB4Yzc2NjFkNWYsIDB4YTljZjU4ZTMsCisJMHgyZDkzNWI2ZiwgMHhmNmZhN2RlMSwgMHg5YmRmM2M1NiwgMHg3YmUzZGNhMCwgMHg1NzViZTM4NSwgMHg5ZWZjY2JjNiwKKwkweDdjMjczODgyLCAweGJlMDNlYzRlLCAweGY4OGI1ODgxLCAweDdlN2RmMTIxLCAweDBmZjVlOWE3LCAweGI1NzRkZjkxLAorCTB4MGU5ZjEyMjUsIDB4NGRmM2E3YTQsIDB4MGE3YmQzNGYsIDB4YmJhZTQxMjcsIDB4OTNmZmVjZmMsIDB4NzlkMGFmNDUsCisJMHhjMzhjNzRmYywgMHgzZjdmNWYzMCwgMHhhOWZiZjdiNSwgMHgwZGIyMDc2NCwgMHg4Zjg4ZTU3ZSwgMHgyMDdjZWEzNSwKKwkweGJkMmYxMDVjLCAweDExNzAzYTJhLCAweDViYTc4ZmRjLCAweDYzYTNiYmY4LCAweDgyMWRlOGRiLCAweDkwMjlmOTZiLAorCTB4MDdmMmZkOTcsIDB4ZjUwMWYyMDMsIDB4ZWEzYjVlZjEsIDB4MmY1MWM3MGYsIDB4ZjYwZTM4NDAsIDB4N2RiYjIwOWUsCisJMHg1ZDkzOGYzNywgMHhmMjhkNzIwOSwgMHg5Y2U5ODM3YiwgMHhlNDFiYjM1OCwgMHhiNzJlN2Y1NiwgMHg4Nzk0NWU1MCwKKwkweGFhYmY5MWI2LCAweGNlODFhZjZiLCAweDlmMzQ1NjM3LCAweDAzZjVjMzhkLCAweGE2NWY5MjNlLCAweDQ4OGRmOWJjLAorCTB4MTJiZmU3YjQsIDB4YzdjODAzNzYsIDB4ZDk0YjhhNDgsIDB4ZjY4OTFjZGIsIDB4ZDRlZTUyODcsIDB4N2M0NDUyNzgsCisJMHgwZmYyMTY3YywgMHhmNjQyYmNhNSwgMHg1NTNkZDBhNiwgMHgzOWRlOGRhOSwgMHg0ZGU3MGFmOCwgMHg2MzJmMjFmNSwKKwkweDljM2FkMTllLCAweGQ2N2JhNzEyLCAweDBhNmJkZmNjLCAweDgyMTNiN2RjLCAweGEwN2YwMTlmLCAweGJjNTcyNzc3LAorCTB4MGEwNWZkYzksIDB4N2MxNTI4M2YsIDB4Njc5NjIwZTUsIDB4MjhiN2ZhNzAsIDB4ZGU3ODQzZTcsIDB4MDdkZjc0ODMsCisJMHhlMTQwNzg5ZiwgMHhmOTExNmM3YiwgMHhiMTBmOGU3MywgMHhmNjhhYjg3MiwgMHgzN2Y3MmZkNCwgMHhiN2I4YjhmMSwKKwkweDMyMTJiMzNhLCAweGRhZjU5ZGIwLCAweGZjNmI4ZjdkLCAweDVmYzdkMTI4LCAweDEzNDQwZjkwLCAweDhiYTE1ODFmLAorCTB4YmQ5NTc1ODQsIDB4M2FiYmQxMjQsIDB4ZTc5NmIzYTUsIDB4NTBiNjc1NDMsIDB4ZTdiZDA4ZmIsIDB4YWU3MTgyNTksCisJMHgxNWU3ZWJlNiwgMHg0MzE1NDc4OCwgMHgzNGNhOWMzOCwgMHhkYjJlZWVkYywgMHhjZjM5ZDEyNiwgMHgzZjNmMWQwNSwKKwkweDcxNDM3ZTAzLCAweDJkYzcwYmY0LCAweDliZmE0N2NmLCAweGVmNDJiZmRmLCAweGFjZGYxZjZmLCAweDViZWVlYmZmLAorCTB4MWY5ZTVhMmYsIDB4OTc5ZDA3ZDUsIDB4M2FkNGRkMmQsIDB4NWZkZjVkODAsIDB4M2YzNmEzYTksIDB4Yjk3ZDdhZDIsCisJMHgyNjBiZWYzMiwgMHg3NTYzOWU2NSwgMHgzMWUxZmMwMywgMHhiZTNlNzk3ZCwgMHhmOGQwYjhmYiwgMHhhZjgzYzJhZiwKKwkweGMxYjM0MmZiLCAweGUwMTc3MjhiLCAweDc3YjVlNzRiLCAweGYyYTQ1ZDVmLCAweGJmYWNkZWFiLCAweDczYTZlNjUyLAorCTB4M2ZjZDFiOGYsIDB4ZGU0YTc1MzAsIDB4MGFkNzE0MTMsIDB4NzQ0ZjU1ZjQsIDB4MzdlMzc0MDYsIDB4MDI0MzYzZGUsCisJMHg0NTI1MTFmYywgMHgxNTdiZDFiNywgMHhmY2RiYTI4ZSwgMHgyOTgxMTFmZCwgMHgxYTgxY2EzMCwgMHg1MTcwZDk4YSwKKwkweGRiMzg3NDBhLCAweDk0M2MwN2Q2LCAweGI5NDM4OWZhLCAweDgxMzFmNTVmLCAweDk2MjcwM2M3LCAweDIzMWFmZjNmLAorCTB4ZTg2ZDhlM2YsIDB4YzdkZjFiODAsIDB4ZmZmMDQzYjgsIDB4NzE4ZmJlNWIsIDB4YjdhZjMwNGYsIDB4NTc0MTY0ZGYsCisJMHhiZmZlZjc0YiwgMHg3YmI4M2Y5MywgMHgzZjNhNzliNSwgMHgxOGIzMzA2NywgMHg5ZDFhZGVmOCwgMHhlZmRmZDViOSwKKwkweGI3Yjg4OWZiLCAweGU5OTZmNzgwLCAweGVlOWE3OWZlLCAweDE5NDlmZGM3LCAweDQ5ZmNkNzIxLCAweDA0NjQ2ZmE0LAorCTB4NTc0YWY5ZDMsIDB4NmY5MjE1ZDMsIDB4MTYzOTJkZGQsIDB4NmFlOTA3M2MsIDB4ZGU5MTliNzMsIDB4NWZmOWZlYWEsCisJMHhiYjg3Mjg5MSwgMHhiOGE2YmU1YSwgMHhjZmVmYWViMCwgMHgzYWQ4YmM1MiwgMHhiMDc3YjcxMSwgMHhiNTViYzQ0OSwKKwkweGJjYjA0MzU5LCAweDdjYWJlMGJiLCAweGE0NWViN2FjLCAweGY3MDI3ZjNlLCAweGUyYTkyYmE3LCAweDlmN2JmMDJmLAorCTB4MWNkMGQ2NjcsIDB4ZGQ2YjNmN2MsIDB4M2UzMGQ5NTMsIDB4NDVjYzZlMzMsIDB4NzM3NjAwN2UsIDB4OWYwZGNhMzgsCisJMHhmNTFhYzExZiwgMHhlODhiZjE2MywgMHg3MmQyNDg0NywgMHhlOGE2MDIzZiwgMHhlMjRhNDg0NywgMHhhM2NjMDQ3ZSwKKwkweGY0NTMwMTFmLCAweGZhMzk2MDIzLCAweDdlOGYzMDExLCAweDFmYTNjYzA0LCAweDQ3ZThmMzAxLCAweDA4ZmQxNGMwLAorCTB4Yjg4ZGZlNTgsIDB4OGMwZGQxMmYsIDB4Y2QzOWZiOGIsIDB4NjA5N2Y3YzQsIDB4NmZjMDMwZmMsIDB4NzhiZjc4ODksCisJMHg3NzdmM2Q0OSwgMHhhMDRiZWYwNywgMHg3ZTJlYmJmYywgMHhjZmM0NTFhNiwgMHhmOWQxMzY3OCwgMHhkOTVlZDU1ZiwKKwkweGY3ODQ1Yjg2LCAweDE4Mjk1YzJhLCAweDA4NzNkMzQ3LCAweDdiNTUzZmZkLCAweDJiNzJkYjI0LCAweDc5YTc0Zjk2LAorCTB4ZjljOTZiYWMsIDB4ZDc5NjE2NzQsIDB4NWVmODZjZWIsIDB4ZGYxM2UwMTYsIDB4ZTI4OTVhY2YsIDB4ZWE1YWNhOTgsCisJMHgyZTM1NWZjOSwgMHhjZGM1M2Y2YSwgMHgwYzQ4MzU1NywgMHgwY2QzYWNmZCwgMHg5MGFlNGVkYywgMHg5ZDA0NzRhMSwKKwkweDVkMWU5Mjk3LCAweGZiMjM2ODYxLCAweDY0YmI3Y2E1LCAweDVjOWZiZmY1LCAweGYxMzJlYTM1LCAweDc4ZGNlNTA5LAorCTB4MmFjNGZmMDEsIDB4YjE2YjI2M2MsIDB4NzlkYWNlNGEsIDB4NjlmZTEzZmMsIDB4OTEzN2M1ZjUsIDB4MTdhN2UyMWUsCisJMHg2NGYzYzAyZCwgMHhhN2JmOTcyYywgMHg2MDE1MWI3YiwgMHgzNzQ4NDZlMCwgMHg2YjJhN2Y4ZiwgMHhlMzA2YjNkOSwKKwkweDBlMzU2ZWE2LCAweGUyYTFlNWVhLCAweGJmMzg3OGZjLCAweDRjZjA1MThmLCAweDMwYmRlZWYxLCAweDAzNDZlZjVlLAorCTB4ZDJiYjI5ZTksIDB4YmYxMTNiMWQsIDB4ZTRlY2U5MGUsIDB4ZGZiNDM5NmYsIDB4ZTlkNjc2NDQsIDB4N2YyYWE5NGQsCisJMHg4ODNjOWU0YiwgMHg3NThiMWRmYywgMHhlMWVmYzkxMiwgMHhiNjBmMGVhOSwgMHgxZTYwYTdiYiwgMHg4OWVlNTlmOSwKKwkweDU2M2EyMTBlLCAweDVhOTBkMGYwLCAweDgxZjIxYWY4LCAweGYyNTY5OWM1LCAweGQ4MTllNTZmLCAweDExM2ZhODJmLAorCTB4NTNlY2E1NTcsIDB4ZGU4OTRhZGUsIDB4MzY2MjJlNGQsIDB4YzczMDVmYmEsIDB4NTM4OWRmY2UsIDB4YzM5Yjc1ZGUsCisJMHg4MjgzOWM3OCwgMHg0OTM3OGI1NywgMHgzNjRlZGRmYywgMHg1YjNjZTA4OCwgMHhjYjRlNzNjMCwgMHhjNzRlZjQ3YiwKKwkweDU3Nzg4MzNjLCAweGJmY2ZjMzRlLCAweDc4ZjNkNzYzLCAweGMyZjhmOTg2LCAweDgxNzdiZTExLCAweDdjOTMyN2Q4LAorCTB4Y2ExZGJiN2QsIDB4ZTI4M2MxMWQsIDB4OGQ2ZjdlYjgsIDB4OGU4YmZlYzIsIDB4MzczZTI4ZTgsIDB4MTRiZWVhMmYsCisJMHg3MWY5YzkwNywgMHg3OTIwYzcxNCwgMHgwYzNmY2E2NywgMHhhOWZlMzFmZCwgMHhhNDM4NjM4ZSwgMHhlYjg0MWMyYiwKKwkweDI1M2M0NTZlLCAweGQyODM4ZWZmLCAweDk0MjVkNTIzLCAweDI1MWM3ZTJhLCAweGZmN2JiMDZlLCAweGZjNzA3YjFiLAorCTB4NmVmZTJhYmMsIDB4YzVlZjBkZWMsIDB4M2Y3ZGY1MDUsIDB4ZjAyN2I5NGMsIDB4MGUyOWM2MTksIDB4MWYxZmY1YzAsCisJMHhjNGRiZWY4OSwgMHhlMWI2Njc3ZSwgMHhmNmEyZjNmYSwgMHg0NGFhYmRkMywgMHg5MzNmZmZkMSwgMHhmZWUwY2YwYiwKKwkweDBiOTk0M2Q4LCAweGNjMzllMWRiLCAweDNlNjc4MDQ2LCAweDNmNDI0MDJlLCAweGY3OGVjN2I5LCAweDRiZjY3YTUzLAorCTB4YmU1ZjhhMTYsIDB4NWE2ZTZmOGUsIDB4NTUyMWYxOGQsIDB4NmJiZDEyNDksIDB4MzFiNDFmOWQsIDB4Y2ZmYTEyMmYsCisJMHgyMWI3ODg0ZiwgMHhlMjZhYWVkZiwgMHg0ODJlZDY3ZSwgMHhlNWRmYmVmOSwgMHgxOGFhZjdhNiwgMHg4MjZhM2Y3ZiwKKwkweDUzZmJiN2Q4LCAweDNhMWY3ZjFjLCAweDUxM2U1N2MwLCAweGNiNzc1NWQwLCAweDdiYjcxZTE1LCAweDFkNmMzZjczLAorCTB4ZjhjNzNmYmQsIDB4MGZmNDFmN2IsIDB4ZTg3MTM1ZTYsIDB4MmFjN2YyNjAsIDB4MTBkYmQzNzgsIDB4MjZmMTE1YjUsCisJMHg5YmI3ODMyNCwgMHgwZTk4ZWIzNSwgMHhjZDI5MDZmNSwgMHhmYzgwY2M2MSwgMHhhYmNiZTJlYywgMHg3ZDlkNjkyMywKKwkweGY4OTRjNWZiLCAweDk4YmY0MGY2LCAweGJmZmQ3ZjNmLCAweGIwZmY2Yjg4LCAweDQ3YTUxMTdhLCAweGRhNTI5N2FiLAorCTB4ZWZhMmVkNTYsIDB4Y2I2ZTE3MjAsIDB4NmE3ZjM1YjgsIDB4ZmUxZjQ2NGEsIDB4ZjZiNDY2NTQsIDB4ZjQwYWI5MjMsCisJMHgwMWQ2ZmRjZCwgMHg2YmEwNTNmZSwgMHhkZjVkMWY4ZCwgMHg3NzM2MTJkMywgMHgzNTFkZWEyZCwgMHgxMjhmN2E3YSwKKwkweDk4OTc4Y2UzLCAweDMyZDgwZjg5LCAweDJhYTNmNGZhLCAweGRmOTMzMzcwLCAweDQ2OTk5N2I1LCAweGE2YzdmYzIwLAorCTB4ZjAzNTZhMjUsIDB4NDkwY2NlZmQsIDB4NzQ4NjVlNzUsIDB4M2E0M2ViODIsIDB4NDRlOTE0YzEsIDB4N2NlZmU3ZWIsCisJMHg5YzI0MGY1MSwgMHgxNzAwZjVjZCwgMHhkYTI2MDFlOSwgMHg4MWNiMzVkNywgMHhlZWY4NDg3ZiwgMHgzZmM1NDU4ZiwKKwkweDBmZjAwNjJlLCAweGE2MWU1ODMwLCAweDA2MmQ1NWZiLCAweDg5NDY4NzdhLCAweGM5MGIxY2I3LCAweGYwN2QxMWQ1LAorCTB4MjdlNzBmMTMsIDB4M2IzYzgzODMsIDB4NjU3ZmJlZTgsIDB4MWVmM2M1MTAsIDB4M2FmYzcxZDIsIDB4YzljNzhlYjQsCisJMHhmZTQyYjMxNSwgMHg3Y2Y1ZDBkZSwgMHhjY2NiZWU4NSwgMHhmNTM5ZTg4YiwgMHhlZjNmYTgwNywgMHgzM2U5MzMwOSwKKwkweGU0MTY2MjZiLCAweDI1N2MzYmZlLCAweGUwMTA2NTA3LCAweDRiMmM2YjlkLCAweDliZTBiOGMzLCAweDAzYmJjYWE1LAorCTB4ZDAyMWRlZDcsIDB4MjcxY2Y3OGIsIDB4YWE2YTc3ZjAsIDB4NTk1M2ZlODQsIDB4NTRmYTIxNmMsIDB4NmE1NjYxZWUsCisJMHhiMDZiMWQzZCwgMHgxZTEwZmY1ZSwgMHhmNDY1YTFlZiwgMHhjZDcxYzhjZSwgMHhhOWVlZmU0MCwgMHgxM2UzYjNhMCwKKwkweDFiOWZjOTEyLCAweGM1ZTNkMmI5LCAweDkzZWU3YjdlLCAweDcxZGE3ZGU4LCAweDgzMWRmY2MxLCAweGYzYTE0ZDNjLAorCTB4YWVmZWY4MTUsIDB4N2Q0N2RmODYsIDB4OTAyOWRmMTEsIDB4NWZiOTVmNzEsIDB4OTNlZjc3YzQsIDB4MDViMTY5ZWIsCisJMHg3ZmI5NWIyMSwgMHhiM2ZiYmY5OCwgMHgwMGZlMTI1MiwgMHhiNzRiNmVmMSwgMHgxZmRkZTAzYiwgMHgzNzRhZWVmMSwKKwkweDA4ZjU5YzJiLCAweGNhZTk4MWYyLCAweDI3ZDY4ZmZiLCAweGE2YTA3Y2YxLCAweGY3Nzg4ODc0LCAweGNmN2ZlMzg3LAorCTB4ZjkwZGEzNjQsIDB4M2U3MGNkNTksIDB4MDRkMjlhZmYsIDB4YWM5NDhmZWUsIDB4Yjk4ZTUxY2IsIDB4MWM2OGMzN2UsCisJMHg4MzNmYmJkZiwgMHgxZmIyYmJlOSwgMHhhNzJlM2JjYSwgMHg0M2JmMWM0MywgMHg5ZWY4MTFiZSwgMHhlMTUyYjNjYiwKKwkweDRmZDhmOThjLCAweDI3YWY5ZjI2LCAweDQzZTNmMzk5LCAweGI5M2M4NjMzLCAweGM4MzhlMTBkLCAweGY4N2E4MzlhLAorCTB4Yjk2MTUxZGMsIDB4YWM0N2UwMTIsIDB4ODAwY2I5OTYsIDB4YTY5YmU4N2YsIDB4NjlkNjZlNzcsIDB4YmM2MDJiZGQsCisJMHgyZjcxNWE0MSwgMHgzZGY4MmI1ZiwgMHg4MjM0MTk3NCwgMHg5MGY1ZGJlYSwgMHgyMTdhN2EyZiwgMHg4YWJjYTNiMywKKwkweDZjNWVmNDY1LCAweDg3OWY5MTkyLCAweDI5ODYzYjQzLCAweDk0NjQ2OWJhLCAweDg1ZmI4YzgzLCAweGZlZjFmYThhLAorCTB4N2I5OGEyOGIsIDB4ZDlmZDQ0ODUsIDB4NjczYzRhMzUsIDB4MDIwZWZlMmUsIDB4YjYxNzNmMjMsIDB4ZWQ0MTFkMGYsCisJMHhkZWRlMWE1ZCwgMHhiNmY0ODVhZSwgMHg1MWRlZmU0NCwgMHg5ZDAzNmFjZiwgMHgzZTNkMTY4MywgMHhhNGUzZTQ5OCwKKwkweGVkZmJlYWIxLCAweDM4ZjA2N2RmLCAweDk4NWQyNTA1LCAweGY5ZDE1NTY5LCAweDc0ZTk1NWRjLCAweGQ1NzczODllLAorCTB4NDNkNDBhOGMsIDB4NzRjMTBkMWMsIDB4ODFmM2FmMWYsIDB4OWRmMGJiOTcsIDB4YmRkOTcyZjEsIDB4NmJiNDEzZTAsCisJMHgyMTZmMWQzMiwgMHg1OTIwYjk1ZiwgMHgwYTg1ZWY2NywgMHg0NzdjMWY3MywgMHgwZTMxNzE4ZiwgMHg2ZjRiZTRjZiwKKwkweGVkNzBkY2EyLCAweGJhZWY4YTM5LCAweDRjODBmZmRkLCAweGZjNjdlZmVkLCAweDhhYjY2NDdkLCAweDlmNzkwM2JmLAorCTB4MWEzNmIyZWIsIDB4YjQ2ZmJmZmEsIDB4MGVmMjdlNDQsIDB4ZjUwZTI1OTMsIDB4NWZiMTIyYmEsIDB4MTRmZjgyYWQsCisJMHg4MjljMTlhZCwgMHg3ODdkZjU3NiwgMHg5Yzg3ZGVjZSwgMHgzZDc5MzI5MSwgMHhmNzZkZmJlNSwgMHg2MzVkOTUzMCwKKwkweDk5MGRkZjEwLCAweDI1YjdiZDdjLCAweDZiYzVlZmYyLCAweGExODkxZDBkLCAweGE5YmNlYTk4LCAweDhkODZkYTkwLAorCTB4NjVmMTE4ZmQsIDB4ZGZjYjAyNTIsIDB4MjVmYzcwOGMsIDB4OTg3NjMzZjcsIDB4OTdjZTk3OTgsIDB4YWUwOTMzZWIsCisJMHhmMWQzZDYwZSwgMHg2ZWEzYWUzOCwgMHg2M2EzYWQyOCwgMHhkZThlMjU4YywgMHg4YWVmMTBiZiwgMHhmZTcwYjdjZSwKKwkweDhmODYzMWQ0LCAweDFlZDJjYTczLCAweGU5YzE5ZTEyLCAweDlkMTdkZjA3LCAweGViZjRiNjI3LCAweGJhOWYyYmE1LAorCTB4NWJjZGVhMWQsIDB4OTI3YmE0NjYsIDB4NGE5OTlmZjMsIDB4MWFiY2NhNzYsIDB4YjI0N2VlOTksIDB4NDVmN2VhMGQsCisJMHhlMjc0OWU0MSwgMHgwYmRmMDJmYywgMHgxNDE3N2MwZCwgMHhhMGYxMWNmNywgMHg3ODQ0ODM3OCwgMHg5YjRhZGI3NCwKKwkweDdiZGZjZjFlLCAweDAwOWU4MTM2LCAweGRlY2Q4YmRmLCAweDhhMGJkNDI0LCAweDBhZGIyNjZkLCAweDQzNzc4ZmE5LAorCTB4ZTViODA3YmYsIDB4OGNjYmJiZTIsIDB4NTkyMTI2ZmMsIDB4NmUzOGFiOGUsIDB4N2EyMmM2ZDEsIDB4YzMzODMzYTcsCisJMHhkYmIwZmU0MSwgMHhmZDQ0MWVjMCwgMHg0ZTRjOGVlNywgMHhiYzAwOTMzZiwgMHhiNjgzY2VmNCwgMHg5ZmVkMDYzZCwKKwkweGFmMWMxOTNkLCAweDUyNWI4NTI2LCAweDI2OTc4NGNjLCAweDNiYmJmNzg2LCAweDljMTQ5Njc0LCAweDkzNmFjNzVmLAorCTB4NDk5ZWY1MDYsIDB4MDI3ZTM4MmIsIDB4MjNiNTE4ZGQsIDB4MDU5ZmJlMzAsIDB4MTExZWZkMjEsIDB4ZDcyZDY3ZWQsCisJMHg3ZTQyZDYxNiwgMHg5MGVkODgxMCwgMHhlMTliYzQ3MCwgMHgwZThmOWY4NCwgMHhmMTE5ZmM3MywgMHhkODZmZGNlZiwKKwkweGYzOWZlNDI4LCAweGYzZTI2YzM2LCAweGI0Y2ZmYjEyLCAweDllZjBlMzZkLCAweGY4ZmFiOWU1LCAweGEwNTcxODExLAorCTB4YzNhM2MzZTAsIDB4ZmQzMjVhYzYsIDB4ODkwMWUwZjEsIDB4NzNkNjFmZjYsIDB4NmQ4ZGU1MTgsIDB4Y2NjOGRjZDgsCisJMHgwMDdlNTQwMSwgMHg1OGQyNjNmMSwgMHhlNDIxYzUyZiwgMHhlNzg2NGVjOSwgMHg4Y2QxYmRmOCwgMHgxOTdiZTllMiwKKwkweGI1ZGVkN2E3LCAweDBhNmZlMjVhLCAweDAxZjg1MDlmLCAweGVmMWQ4M2UwLCAweGFkZmIyYWM3LCAweDJiZmY4NWYwLAorCTB4NDNlMDA0M2QsIDB4MWJlMTQ1N2MsIDB4ZjA1MTdmMGEsIDB4ODEzM2UxNGIsIDB4YzAxYjM1NzgsIDB4NmEwOGY3N2MsCisJMHhlMTRjZmM0ZiwgMHhjZDBlYjg2MywgMHg1MTdmMWYwOCwgMHg3NmI3NTlmNiwgMHhhZGZjODY4YywgMHhlNGYzOWY2MiwKKwkweDQwZGZiYjhiLCAweDQ5OTg5NDM4LCAweDE3MDZiOTZmLCAweDEyZTA5MWIzLCAweGY4NGQ2N2E3LCAweDQ3Y2FlYTNlLAorCTB4NDAyY2Y3MGEsIDB4NDE2ZGZjN2MsIDB4MzMxZmVhM2MsIDB4MThmN2Q0NGIsIDB4N2Q0OGJlN2YsIDB4NTJjZTcxN2YsCisJMHg1OWM1ZmRmNSwgMHg4NDNlM2Y0YiwgMHg1MDg2YTc3ZSwgMHhiZmRjMDRjNywgMHhmMzNkYmY1MywgMHhmZTUwYTdlMiwKKwkweDkwYmRiZjlmLCAweDhiZWNlZGNjLCAweGI4ZTFjZmY1LCAweDNjYzQ4MmNiLCAweDk2YmNmOWRhLCAweGRjYmU0OWU5LAorCTB4ZmMzMGY0MjYsIDB4OTczMmZiODcsIDB4OGEyZDNhNzEsIDB4ZjI4YTNiMGYsIDB4MjljMjJlNmYsIDB4NjExZmRmMGIsCisJMHg4OWJmY2YwNCwgMHhmNjI1MzlmZCwgMHhmNzM1NjhhNywgMHgyNGI4NzQzYiwgMHg1ZGNjNDNmMiwgMHhhZDc0ZTgyNSwKKwkweDk3ZjI1ZWZhLCAweDM4M2RhYzMxLCAweGY5N2Y3N2QxLCAweGM0YTRkZmNiLCAweGY3MmI1ZDIxLCAweGY5NmIxZDk1LAorCTB4ZTk2OTY2N2QsIDB4MWM1ZmQyNjEsIDB4YWU1MGZiY2EsIDB4OTZhMWY3ODAsIDB4Y2Y3YmYyYjYsIDB4YzRmYmVhZWQsCisJMHgzZDc2ZDljMSwgMHhiNzE4MjlmOSwgMHgxZGE2ZTZhMywgMHgxYjM1ZjFlNCwgMHhiMjhhMGIyNSwgMHhiYzVlNTE2MiwKKwkweDU3ZGQ1MjU2LCAweGRmOTMyNDdiLCAweGQwY2M2YjE3LCAweGZhMGJiZjcyLCAweDFmMzg5NDljLCAweDdjMDRiZTNmLAorCTB4MTVjZmVlODMsIDB4NWZhZTFjNmYsIDB4ZTc0N2M3ZTAsIDB4Njk3OWYyOGEsIDB4ZjI5NTRhMWEsIDB4NTcxZTBjYzYsCisJMHgwMzQ0OGMxYSwgMHg0YjRmYWVmZCwgMHg3ZTI3Y2ZkMCwgMHhhOGJmMjU2NywgMHhkYTZlN2Y1MiwgMHgzN2U4MzU4OCwKKwkweDdmMDFiYjk4LCAweGZlZDdjNzlkLCAweDZhNWE5OTM3LCAweDI2ZjQyOGRmLCAweGZjZjgwZGU3LCAweGZjMmEzOGI1LAorCTB4Mzc5YTBlZjMsIDB4YWY2NWQzZDksIDB4ZGYxNTdhZWUsIDB4ZGNmYjJmYmQsIDB4NmNhNjcyNDAsIDB4Y2Y1ZjM4OTgsCisJMHhhNTRlZTc3MCwgMHg5ZjdlNjNmMywgMHhmN2VjNTJhYSwgMHg4NDVmNWRiOCwgMHhkNTUwOWRhMiwgMHg4NjcxZGZjOCwKKwkweGNhZDMwM2I0LCAweGVmNjQyNTY1LCAweDFlODBkYTU3LCAweGY3OGZhZmMyLCAweGNmZDVmNzdlLCAweGQ5NWZiOTQzLAorCTB4OWY0MWFiMTUsIDB4YTU5ZGY4ODgsIDB4YzhhZmM2Y2EsIDB4ZGVmY2EwZWYsIDB4MmFiYjYwNTIsIDB4NmU1MGZiZTksCisJMHhmZjk4NWFiZiwgMHhlZGU0MTFlZiwgMHg1NDlkMTFkNywgMHhiOTdiNzMzNSwgMHhmMjE1ZWY2YSwgMHg1ZmVkNTc5YiwKKwkweDYzZThlOTFkLCAweDEzZGZkN2ZkLCAweGU4ZTJhYmIxLCAweGNiODZkOGFiLCAweDA2ZmUwZjc0LCAweDRjOWVlYWYxLAorCTB4ZWRjM2VlZjEsIDB4NTM4YTc2ZWMsIDB4MmI4YTMyZDcsIDB4MmViYmY2YmEsIDB4OGQxZmU0ZWUsIDB4YWNkYWFjOGYsCisJMHg1ZWEwNzhhMSwgMHg5ZTFmYjVhZCwgMHhmYjhiNzVjNywgMHhiZWY1ODE1MSwgMHhkNzc2ZTRjZCwgMHg3YzIzYTAyNSwKKwkweDQxYmJhMzc3LCAweGVlOWRmM2E2LCAweGFiYmZlZTA2LCAweDE1YmE3ODZjLCAweDgyNTZhNWVmLCAweDVlYzMwY2UxLAorCTB4ZDk1NDNmYmIsIDB4N2ZhMzMzMjgsIDB4MWZjNjFhZGMsIDB4OWU3OGRjNDUsIDB4ZTg0MmJiZTUsIDB4OGY1Mjk4MWQsCisJMHhmOTg3YWY2NCwgMHgzNGJkODJmNCwgMHhjNzNlNmZjMCwgMHgxYjk1NWUwNSwgMHgyZmI0YjkzYywgMHgwMzg3ZmU2MiwKKwkweDk2ZDI5ZGY0LCAweDJiOWVlOWE3LCAweGZkMjJlYmQ0LCAweDhjYzE4ZmU0LCAweDFjZjU5MzlmLCAweDZlNzY3OWM1LAorCTB4NWFlNzQ5MTksIDB4OTUzZDllYTUsIDB4MDg2Yzc3ZTQsIDB4MGI5NTc4YTYsIDB4ZTliZGY1M2EsIDB4NTNiYzYyNTMsCisJMHhhZmVlM2M5OSwgMHhiMTI0ZTMxMywgMHhlOTMyYWJmZCwgMHhhNDRmMzhhNywgMHgzYTkyMGJjNywgMHg2OGI0ZTM4ZSwKKwkweDZkYzA1YTc3LCAweGE1NGJhMDlkLCAweDIzYTdhOTdlLCAweDlmZWEwOTM0LCAweGQyOThmYTZkLCAweGQ0YmY1MTJlLAorCTB4NzI4NTk2ZGMsIDB4MzA2MzZjZjMsIDB4ZGIzZDYzZGQsIDB4YjdmYzg3ZjgsIDB4OWU0YmJjNjAsIDB4M2YyNWZkMzEsCisJMHg3NGIyOTJmYSwgMHg4OGI2M2Y3YywgMHgwOGVlYjhmYiwgMHg0M2M0Y2Y3MSwgMHg4ODZjZTllYiwgMHhhY2JlZDA5NSwKKwkweDlkNWVmMTEwLCAweDZhODdhZjhkLCAweGZmNWQ3ZTg4LCAweDRkNWRlZmRlLCAweGIxNWRlZWJmLCAweGZlYTA0NmVmLAorCTB4YmQ1NzZjNjIsIDB4ZDViZmY2MmIsIDB4ZmYyOGE1N2YsIDB4ZTMxNDJhNDQsIDB4YjljNWU4ZjQsIDB4MTAxZGZmMzAsCisJMHhlMTNiYTA4YiwgMHhjYzNkOWQ4ZiwgMHg3ZmRlMTBmYSwgMHhkZmYwMWY2NSwgMHhmZmJkMDMwZCwgMHg2NjhmYjQzOSwKKwkweGVjODIzOWZmLCAweDBmZmRmYzRmLCAweDIxZjM3ZmNjLCAweDNkOWIyZjNmLCAweGU4OTVmMDUyLCAweGQ3ZjQxY2Y2LAorCTB4ZmQ3M2M0NzcsIDB4MjgxNmI5YzEsIDB4MGU1YTQwMTEsIDB4ZjgwMmU1ZjgsIDB4ZTYxYWRkMzksIDB4MmNkMGZjODAsCisJMHgwMjc1M2Y2ZSwgMHhlMTg3ZWJmZSwgMHhlNThlM2NjOCwgMHhmODc3ZDgxNCwgMHgzNWViOGM5ZSwgMHg0Y2VjOGU3ZSwKKwkweGJkZTBhNmYwLCAweDRmMTE0ZWJlLCAweGE2ZjcwY2UwLCAweDE3YmY0MDQ0LCAweGE3Mzg5ZTA1LCAweGRmZmM1Mzc4LAorCTB4ZjU2ZTc0YTksIDB4NDVjZDNjNTIsIDB4ZGY4NzNmMTEsIDB4MWNlNzlmZDEsIDB4YzQ3NWViYzEsIDB4ZGVlOGJhNWIsCisJMHg4NjEwZGVjNiwgMHg4ZGU2YWFmYSwgMHg4YWMzYzIxMCwgMHgwZDViNGM1NywgMHhhOGQyNzY3ZSwgMHg1ZjBmYWUyYywKKwkweGFkNzdmM2Q0LCAweDdjZjhkYjVkLCAweDUyMzc0MzRhLCAweDdlMDUxNzNmLCAweGE0NmQwNjk3LCAweGY3MTI5ZGY5LAorCTB4M2NmNTRiODMsIDB4ZjQ2M2ExZGYsIDB4MGVjZjdjOWUsIDB4ODVjZjZlZmUsIDB4Mzg3ZGI2OTgsIDB4ZTkxZDg1Y2UsCisJMHgxMWRhNjcxNCwgMHg0NGQwNWVlZiwgMHg0OTdjNzlkZiwgMHgxNzgzNGVkOSwgMHg0NzdlNzVlNywgMHgyYTAzZGQwOCwKKwkweDNhNjZlZGY4LCAweDMzYWRlYzVmLCAweGNlZmZjODQ4LCAweGNmNzQ2MDBmLCAweDAwZmQ3Y2UxLCAweDI1ZTdkNzkyLAorCTB4Y2YzN2Y5MmIsIDB4ZmQ0MTFmYmYsIDB4YTUyZjU1OTUsIDB4YzA2NTJjZmIsIDB4ODRlZjUwMjYsIDB4YjVmNTAwYjQsCisJMHhjN2NmZjVmMywgMHg3ZTQyZmQyMSwgMHg2YzFkZTYyZCwgMHgyMTVmZWNlMywgMHgyNjBmNmU5ZCwgMHhjZWMyZjMzYiwKKwkweDlmZmJhNDdmLCAweGUwNjkyOGY3LCAweDlmYjI4OWI5LCAweDU5ZTlmN2NhLCAweDJlOTg2ZWRjLCAweGNiMmIzNGUwLAorCTB4ODMyZGNmYzIsIDB4ZDAyNmNmM2QsIDB4MDM3ZDM4ZmEsIDB4MDAyZWM5OWMsIDB4NzE3N2EyN2EsIDB4MjM5YTc5NGUsCisJMHhlY2E3ZTgyNSwgMHhjYTNiMTA4ZCwgMHgzNzlkMGVmNywgMHg4NzA0MGZlNSwgMHgzMGJiZjE2MCwgMHhmM2MyZWM4YywKKwkweDJlYzgyMmRiLCAweGZhOWEyZDA3LCAweDkzMmRiZjM5LCAweDM4OTU0M2UyLCAweGFiYTg0OTkzLCAweDEyNjYzZWQxLAorCTB4MmRlNGYzN2MsIDB4NzA2ZWY0NTksIDB4ZTFjNTMwNWQsIDB4YmI3ZTNkOTQsIDB4NjQ0ZWUyODYsIDB4YmQ5Nzc3YWUsCisJMHhjODkyNmYzYSwgMHhhNjljZjFkYiwgMHg1NmJmNTdlYywgMHg0OWZlNDVlMCwgMHgyOWQ0OGUyNSwgMHhlM2M1NjhmOCwKKwkweGI4YzNmNTc3LCAweDk5NjdmNjViLCAweDY4YWVlM2UyLCAweDIwNjM5Yzc5LCAweDA5NjQ3NjVjLCAweDQ1ZWZiYTNlLAorCTB4ZTAyNzViYTIsIDB4NTAyZWZlMzksIDB4MmYwMzg4YjksIDB4MmNmZGM5ZGYsIDB4N2FlZTZiZTUsIDB4NTFlM2Y4OGUsCisJMHhkZjM4YzMxZCwgMHg0M2E3OWU4YiwgMHhiNGZlZTFmZCwgMHhkZWQ3YzdlOCwgMHhhMWNiZjU0NiwgMHg0MWZmNmYzZSwKKwkweDliNjdjZDI4LCAweDAzOTJlMjhlLCAweGRiOTZlYmY3LCAweGE1ZmY5NGVmLCAweGQwMWU2NWY2LCAweDA3MzhmYTAzLAorCTB4MWVkYWMyYmUsIDB4NDBmOTFjZmIsIDB4YTJlNmM5ODMsIDB4ZDdiNzFlNTIsIDB4ZTAyY2YzYTksIDB4YzQ0YzE5ZjcsCisJMHhjNGMzM2ExZiwgMHhmMzU2ODllZiwgMHgzNWYyODFmOCwgMHg3MTQ3N2YxMywgMHhkMmE3YzcwYSwgMHhlZTg1YTYxZCwKKwkweDM2ZTljZmJlLCAweDExNWNmZTBiLCAweDc0ODdlYjYxLCAweDQxZmIwMTU4LCAweGJmMWYwOWY3LCAweGIzNzVlZThiLAorCTB4N2RhOGViM2YsIDB4MTMxZTdhZTAsIDB4ZTFkMWFlZWQsIDB4ZGNmZjFlNmUsIDB4NGJlZjkwMzksIDB4MjRhOWFiZTcsCisJMHgzOGMyM2E3NywgMHhjOTdjYzM1ZSwgMHhlMzBjZWQ0ZSwgMHg2MDQ4MDUyOSwgMHhlMzg1OGRkYywgMHgwZjE4ZTc0MywKKwkweGQyOWRkZmQ5LCAweDc0M2I0YTFlLCAweDUyZDk1ZGJjLCAweDVlMTc3YmYxLCAweDQ0ZTIzNzFlLCAweDc3YzQ0ZDljLAorCTB4YTFiNDM2NzcsIDB4MzhmYzgxYmUsIDB4NWVhNTA0NzcsIDB4ZWZmNWY4NDMsIDB4OTMxZTAzODYsIDB4YzU5M2Q3N2QsCisJMHg3ZjEyOWJlNSwgMHg5M2Q2ZWY0MywgMHg0N2EzZDM1ZiwgMHg3YTEwZWE3ZSwgMHhmYWUxYjM5ZiwgMHg3YmEwMzNkZiwKKwkweGM1MTIwZGVmLCAweGU5NTlmZjFkLCAweDk0ZmZjNDQ3LCAweGNhY2YwZTczLCAweGUzOWQxMjVkLCAweGE0N2FhZjk3LAorCTB4N2NiZWYxMTQsIDB4NDg5OWE2ZDEsIDB4Y2EzYWNhMGYsIDB4ZWQwMGFjYjUsIDB4YTY0OTBlYWYsIDB4M2Y1ZDgwZjksCisJMHhmNWM2NGE2NywgMHhmZGYwMjllMywgMHg1MTNmZDA0YywgMHg4MDY3MjI4ZSwgMHg1OTY1NGVkNiwgMHg2ZDk1M2QxNSwKKwkweGFiOWNmZTg0LCAweDRlMzQwZGE0LCAweGYyNzc2MmJjLCAweGMyNzAyOWY1LCAweDYzOGMxZjczLCAweDM3MDFmYzU0LAorCTB4Y2YzMmJmNWEsIDB4NTdhN2NkMWIsIDB4Nzg4ZWExZjAsIDB4ZTM0NmVmZWIsIDB4MTMyNDdmN2UsIDB4ZmRmMmI5M2YsCisJMHgzZmUxN2VjOCwgMHgyZmQxYjdhMiwgMHhlMWZkMmE1OSwgMHgxMWQ0MTI3ZCwgMHhjODgzOWZhMSwgMHgwNDZlMzBjZiwKKwkweDNjYzBiYjZmLCAweDgwODdlODUzLCAweGQ1YTZlMzdjLCAweDFhNDNmM2E5LCAweDQ2OGNmOWQ0LCAweDQ1YWIzZTc1LAorCTB4YWJiZGI3OWQsIDB4ZTMxNTlmY2UsIDB4M2I0MjcwMmEsIDB4NmMzZGVmMTgsIDB4ZDAxZmY3MTcsIDB4NGJmYmM2MGUsCisJMHgxZTYzMDc2OCwgMHhkMTRjNjBlZCwgMHhiNDcyYzYwZSwgMHg3NjhmMzE4MywgMHgwZWQxZTYzMCwgMHgxZGI5ZWFiNiwKKwkweGMxZGEyOThjLCAweDhjMzU5ZTU4LCAweGNiNTljOWMzLCAweDBmYjA5MGZkLCAweDlmOGYzYTc2LCAweDAyNmVmY2ExLAorCTB4OGZhODg1ZDgsIDB4YmQyMjBlOTYsIDB4YThiZTdkMGUsIDB4ZWRmZmY0MzcsIDB4NDc4ODA1ZDUsIDB4ZDQ0NzEwYTYsCisJMHhjMzhjMWNiMCwgMHg4MzEzNWI2YSwgMHg5M2UyMDNmNSwgMHg2NjRjMjM5YywgMHhhZmI0MzdmNCwgMHhkNTA2YmIzZSwKKwkweDYzYjMwZTkwLCAweGUyNTdkNjEwLCAweGJlOTYyYTk2LCAweGQ2ZWZiZjQzLCAweGU3ZmFkY2JlLCAweDIyN2RmMjlmLAorCTB4ZmJmMjg3YmYsIDB4YmVmODY1NDMsIDB4MmU3ZTRjYmIsIDB4MzkxZGZmMjMsIDB4ZjdhZmIxOWIsIDB4OGNlMzAzYTMsCisJMHgyMmY4OTVmZSwgMHgzNjhlOGFiYiwgMHg1M2ZlNWMxMiwgMHg3YzgzMTNkNywgMHg0NjFkYWJmZSwgMHgyYmY1Njc3YSwKKwkweDRkOTMxZjcxLCAweGU3N2VhOGI3LCAweGRlNzlkYWYxLCAweGNiOWQxMjkzLCAweDljMmMzZGRjLCAweDA2MWVmN2RhLAorCTB4NzkwZmJiZmQsIDB4ZDBmM2E0YWEsIDB4OWY3N2VmNTksIDB4NDkwNmRlNzgsIDB4YTZkY2UzODMsIDB4Mjc2NDcwZTcsCisJMHgxYzZmMTE2NCwgMHg0ZWE3N2ZjYSwgMHhmNTE1MzFjYywgMHhhN2Y5YmY3MywgMHhmODU0ODNiYiwgMHg3ODdiNzQzMywKKwkweDBjMzVlZmMwLCAweGQ2MWZkNTU0LCAweDdiZjAxMDk0LCAweGJmZDQ0MzBkLCAweGYyYzBmMDIzLCAweDRmNjc2ODAzLAorCTB4NTU1MjMwZGQsIDB4NmJkMjBhZWYsIDB4MjhkNWNhMzYsIDB4ODVjNTk3ZTIsIDB4MjdjNDA1NzcsIDB4NGY3ZWFhODYsCisJMHhhN2FlODk2ZiwgMHhiZmE4NzFlMywgMHhjOTBjNmY2NCwgMHhiNzk4NjI4MywgMHhmMzg4YTQ3ZCwgMHg0OWM3YTU4MSwKKwkweGI3YzQzNWFlLCAweDNkZmEyNTZiLCAweGRlNDI3OWIyLCAweGY5NmFhNWIwLCAweGU3ZTVhMjViLCAweDM2NDZmODdhLAorCTB4YmRjZTgzZWEsIDB4ODRmZWY0NTEsIDB4MTYyNThmODIsIDB4ODExYjBmNjYsIDB4NTk2ZGJjZjEsIDB4ZGUxZmI0NWUsCisJMHhmMTE3Mzk3ZiwgMHg4ZGFlNDJhYSwgMHg3ODFiZGZjMywgMHhjMzZmNzI1NCwgMHhjMjE3YTc4YiwgMHgwMWRlNDRmNywKKwkweDM4ZDYzZmRmLCAweDJmMGYxMTJhLCAweDNhMzljZTFlLCAweGIxN2NlMDBhLCAweDRiN2JhNjQxLCAweGU0NmYzYTcxLAorCTB4ZmYwZmIzMDgsIDB4MjA5Njc0ZTIsIDB4OGRkYWZmZGMsIDB4ZjQxYmZkZmMsIDB4M2VlMWM5NWIsIDB4MThkZGE4ZmMsCisJMHhmNjY0OTQxMSwgMHg4N2MxNWJhZCwgMHg0MWRlZjRkYiwgMHhhZjVkNzA0YiwgMHgwMmFmNDg5OSwgMHhkM2U0OWEzZCwKKwkweGU5MzJjMzk1LCAweDI0NjMyNTZmLCAweDYyYjllOTE3LCAweDRiN2RjYTlkLCAweDg1YTczZDY1LCAweDc4ZDJjODNkLAorCTB4ZWY4YThmYmYsIDB4NjQwZmQzMTcsIDB4Y2UxZDYxNTksIDB4MTkzOGE2ZWEsIDB4NjFhNmI4ZjksIDB4NjNhNDBjNWIsCisJMHhjMzc1OGU4YywgMHhhOGVmZTAwNiwgMHhlZjhhN2YyNSwgMHgyMjdkOTQ5NywgMHhmOGVmOGMzMywgMHhkMDllZTZiYSwKKwkweGRjY2Y1MDNiLCAweDgyNGRiM2FkLCAweDVmMWJlM2ZjLCAweDY1OTVmYmE2LCAweGVkMWViNzVhLCAweGI1MWQ5MmQyLAorCTB4NWVlNjhmNzQsIDB4ODJkMjZlZjEsIDB4OWY2NDQ1ZWQsIDB4Yzg4YjY0MmYsIDB4YzRhNzNjY2UsIDB4OTQ3ODBiOWQsCisJMHg1OGI2OTU4YywgMHg4MjNkZGU2MCwgMHg3Nzg4OTQ2ZiwgMHhmMWY3OTQyYiwgMHhlZmU3NmNhZSwgMHhiODUwM2YzZSwKKwkweGY1ZTc3ZTg3LCAweDkwMmY1MTY1LCAweDljM2Y3YTVlLCAweGZkMDAzNzlhLCAweGY2YzkxZTRkLCAweDFmNGNmNzYzLAorCTB4YzAzZmEwYzQsIDB4YWQ1N2E5ODcsIDB4NzU3MDNlOTQsIDB4OWZiOWQ5MDgsIDB4YTE4NGFmZTAsIDB4YjAwOGM4YmMsCisJMHhmMWU0M2Y3NywgMHhiYmY4YmQxOSwgMHhlZjc4ZjE0OCwgMHgyYTdmZGJkMiwgMHgzYWRiYzNlZSwgMHhjMDBhODdkYSwKKwkweDc4MjM1MTlmLCAweDkwOWRjMzNjLCAweGRmNTY4ZTE2LCAweDE3MWFhOWY3LCAweGU5ZjdjMmFjLCAweGEwOGU4ZmNjLAorCTB4N2MxODY5YmYsIDB4NjA3Zjk3ZWUsIDB4ZmVhYWEyNTIsIDB4MGQwYzBmNDMsIDB4YmUxMTg3YTAsIDB4NzQyZTc0ZWYsCisJMHhiNDRlMmFhNywgMHg0YWNiOTk2MiwgMHhlNGYxZjRmNywgMHhkMjFjYmZjZSwgMHgxMzY3ODQ2NSwgMHhkODJiZWQ1NCwKKwkweDc4YmQ1ZjE0LCAweDQ1YmEzYmZlLCAweDdhNmQ3Zjg0LCAweDM0NGE5N2I0LCAweGJhN2Q2ZTNjLCAweGI3OTQ0M2EzLAorCTB4NDQyYzM5NTMsIDB4MjViNzk3NDUsIDB4NzJlNTNlZGEsIDB4ODNlM2M3NTEsIDB4M2E3YjFmODUsIDB4OTdkODlkZmUsCisJMHgxNjhkODQ1YywgMHhjOWVmZTJlMywgMHhhMWMxZmZhMSwgMHg1NGRhM2JkNiwgMHgzZmMyMjI3MSwgMHhmZGM2OTE1NCwKKwkweDM2YWUxNTQzLCAweDAxZGY5ZTNkLCAweDAwYjFiNWZjLCAweGZjOGRjYTkyLCAweDZmYTgwODVkLCAweGY5ZTcwZDhjLAorCTB4N2ZhZTIzNjUsIDB4YzNmYjBmMmYsIDB4MGYyYWM4NzcsIDB4MmY0ODQ1Y2IsIDB4ZjEyYmRmODEsIDB4MGY5YzAyN2QsCisJMHhlOTQyNzNmYSwgMHhiZmRlNzE5ZCwgMHhjZmMxNTdlOCwgMHhjMDk0MzhjMCwgMHhiNWYxYjI3ZSwgMHhkZjdhMWM5ZiwKKwkweDlhYTNkZThmLCAweDg5ZWZjODVhLCAweGY5OTMzZDNiLCAweDNjMDBmYmJkLCAweDE1ZmRmODUzLCAweGZkMTJjZjdjLAorCTB4NDNiZTFmZGIsIDB4NWRiYmQ2NzgsIDB4MDBiNzYzNjcsIDB4ZjczYjRhOGYsIDB4ZGZlMjA2NzcsIDB4YmUwZjU4MDIsCisJMHg1MWEwYjg2ZiwgMHg1ZTI1YjliMiwgMHhmZmYyZTEwZiwgMHhmNDgyZGMwMSwgMHgwMDgwMDAzNiwgMHgwMDAwMDAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDViY2RmZjAwLCAweDY1OTU1ODBkLCAweGYzYmU3ZTlhLCAweDcwMGUwMWM3LAorCTB4MDQyN2U1NDAsIDB4MDk0YTg4MGYsIDB4NDQxMDFkZjYsIDB4MTgyOTNiNTMsIDB4NTRkYTE1OTUsIDB4MDIxZjQ0YTIsCisJMHg5YTI4MjRmZSwgMHgyZWRiNTJlZCwgMHg0YzczNTBjNywgMHg0YTk3Njg2NywgMHg1N2EzYWIxYiwgMHhiNWFjY2QzOSwKKwkweDhjY2U5YTk4LCAweDdlOTI3YmJiLCAweGE3NzJiMjY4LCAweGE5YWVhZTY5LCAweDY2YjY2M2I1LCAweDNiNDQ4ZGFlLAorCTB4YjViNGQ0NWQsIDB4ZGZiZWZkY2YsIDB4MjNiZWY5YzcsIDB4YjVjY2VkNGMsIDB4ZDcxNzVjM2YsIDB4ZmZmNzllNzMsCisJMHhlN2RlZmU3ZCwgMHhiYmY3OWU3ZCwgMHhjODkxMzJhMywgMHgxYmVmZTI0ZCwgMHhmZmU1NmZmZSwgMHhkNWEyMTJlYywKKwkweDQ0MWY5ZDA3LCAweGFiZTVhMzBhLCAweGFlMGRlY2ZiLCAweDYwZmQ2NWNiLCAweGNiZjVjNWRhLCAweGMzMmE2M2YxLAorCTB4OWMyODRhMjMsIDB4ZDcwNzcwYzcsIDB4NGQ1ZGM2OWIsIDB4MjdiNTNlZGIsIDB4OTdmMWNhMDMsIDB4MzQ2M2ZjNjksCisJMHgyODRhODNjMywgMHgxZTNjNWNhNCwgMHhjYThkOTA1NSwgMHgwYzYxZDY4OSwgMHhmMWMwZDExZiwgMHgzZjY4NWQzYiwKKwkweGFmMjE0YmIwLCAweGEwOWQ5YTIyLCAweGQ0MWViOTc0LCAweDYyYmJkZWI3LCAweGM4NjE0ZDNlLCAweGY1ZTZjYzYzLAorCTB4MTE3NDFjMmQsIDB4MWI4ZDEyOTUsIDB4ZTZlNWMyN2YsIDB4MTQ4N2ZkN2UsIDB4YmJmNzBmNzUsIDB4Y2EyMWQwNjUsCisJMHgxMGU0MWQ1YiwgMHg2YTIxYWNmYiwgMHhmOWJkZjg2NywgMHg5ZGMxZDExNywgMHhlZmViMjY5ZCwgMHg2MGYzNzg2NSwKKwkweGJiMTdlOGJhLCAweGU4N2EyMWNlLCAweDZlODhiOWY0LCAweDc2NDVjMjc0LCAweDc5OGRmZWQzLCAweGEyMmZmMWY1LAorCTB4NzFmZjRjNTMsIDB4MWFmNmU5ZTMsIDB4MGEyNzUxMGYsIDB4N2YwY2I4YjIsIDB4OGZiOTAyNTcsIDB4ODY2ODhjYTgsCisJMHhjY2ZhMzQ5YSwgMHhiMmVmYzI2NCwgMHhmMjFlNzg2ZiwgMHhhM2QzYTBmMCwgMHg1MTIxNjJlZCwgMHg4ZjBjNjg5MCwKKwkweGM3YWQyMmViLCAweGQyNTkzYzAzLCAweGI4ZTkyYmQ5LCAweDQ4Y2JlOWNlLCAweDk5ZGZlMjJkLCAweDNiZmE1NmM5LAorCTB4MzcyODI5N2MsIDB4NjFkODY5YzYsIDB4YTNkMzFmMjMsIDB4M2QzNjNlY2EsIDB4OGM2OGUzYzIsIDB4YzhiNDNlODMsCisJMHgzNDVmMDM2YiwgMHgxYmNkYmM3ZCwgMHg0YzQ2ZTdjNywgMHhjZTRkYjRmZCwgMHhiOWY2ZTI3NCwgMHhkODA5NDYxYiwKKwkweDU3NGRlZjEwLCAweDgzNjFiZWI5LCAweGYwYzQyNmJkLCAweGE0NjdlZjgzLCAweDdkMWNiMDU3LCAweDdhMzljOWIwLAorCTB4YzFmMTBmM2UsIDB4YTk3MzUzZGQsIDB4ODA5NTc4MTgsIDB4NWI4YzFmYTcsIDB4YmM1Y2YyMTQsIDB4MjZkNTA2YWYsCisJMHgzN2ZhZDFlOCwgMHhmOWRhZTRlZiwgMHhlM2I2MjdlNywgMHhmZTc4OGJjOSwgMHg5Mjg3NGQ5NiwgMHg1NTljNzgyYiwKKwkweGY3MmFkZTliLCAweDZkZGQxM2U2LCAweGRlNTRkYWQzLCAweGY3NjUzOWZmLCAweGU1ZTgyZjVlLCAweDg2YTUzZGRkLAorCTB4NTIwMTVkYzcsIDB4ZDhlZTVmMzAsIDB4ZGM0MTk1NTQsIDB4ZGVlYmU1YWUsIDB4NzllM2JkYzcsIDB4ZTk5YzFiYmQsCisJMHg4ZjlmOTYzNiwgMHgzYjI3NmQ3ZiwgMHgyNzU5Y2ZjYiwgMHhlMjRjYmQwNSwgMHg3ZTUyZjFiMywgMHgxODk1M2VjZiwKKwkweDNmNzk2NGVhLCAweDllMjA1MGFiLCAweDVmZGE1N2NiLCAweDViNzE4Mjk4LCAweDc1ODg4ZTNhLCAweGJkMWRiMmFjLAorCTB4YjVmZmYzMDUsIDB4YzMyZGU3OWIsIDB4OTliZGExYmMsIDB4NGUwZDU3OTgsIDB4ODZkYWJjYzQsIDB4ZDE1YTI5MDksCisJMHhiMzVhZmNjOCwgMHg3NWQwNDRhMywgMHg5OWY3MDc2ZiwgMHhhODgxNzQ0OCwgMHhiYTdiN2MxYSwgMHg5ZmYwMmRjMywKKwkweDU5YTEzMDc2LCAweDY0NzVmN2Q0LCAweDBlZDlmYzBhLCAweDFkM2Q4MDlmLCAweGJiYmNhMjg1LCAweGRkZjkyYmM4LAorCTB4Yzc1ZmVmZDksIDB4NTBlNzA0ZjMsIDB4N2MwNzliNjEsIDB4NzgzYTE0ZjMsIDB4MDkyYTc3ZmQsIDB4YTgwMjljNmEsCisJMHhmN2MxNzg2NiwgMHhmZjA0YjMyNywgMHg1ZDg4NzkwYywgMHhhMjdlYWNjZiwgMHg1ZTdjOTMyNiwgMHgyNmE2ZTgzOSwKKwkweDQ1NWVmYzkzLCAweGFlN2MxNmE5LCAweGJlZDJjYjNiLCAweGE5Njc5YmNhLCAweDUyZjMzYWJmLCAweDNlMzVmZDRiLAorCTB4YWViZjA1YmYsIDB4ZmRhNWJhNzAsIDB4MTY1NWVhZjUsIDB4NmI4YWM2ZmMsIDB4MDQxN2VkMmMsIDB4OWJmMDU4MTYsCisJMHhlZDJkNmJhYSwgMHhiMDY5YWU2ZiwgMHg2OGJhZGZkNCwgMHg1NmJlYTVhNSwgMHg5N2MxNmI1YiwgMHhkMmRiYjhhYywKKwkweDBkYjZiNmZlLCAweDc5MDBmYTk2LCAweDcyNzJjNDFkLCAweDYzZTNmOTk0LCAweGYzMTNmZmJhLCAweGQ3Y2VmMDA1LAorCTB4N2NjYzc4MjcsIDB4ZDZkNzM5OWQsIDB4ZGM4YzMzZDYsIDB4MzJkYzg2MWUsIDB4MDdmNWRlN2YsIDB4ZTQ3YzgzOWUsCisJMHgzMjFjYTRkOCwgMHg1M2NiMTAwYywgMHhmNTEzZWFhZiwgMHgzMDU2MTRkOSwgMHgyY2JkOWIwZiwgMHhiYjZjNGRjOCwKKwkweDg5OTlmYWQ4LCAweDMxZjMzZWM3LCAweDdmZmQ3MzBmLCAweGY2YzFjOGIxLCAweDYzYjRlNjYwLCAweGJmMTllM2E1LAorCTB4OTE2ZmJmYzksIDB4Y2NjOGVkODMsIDB4MDY3ZDhlMmIsIDB4MTlmZjBkZmMsIDB4NWRjNGRmODksIDB4ZjZmZWYwNjcsCisJMHhmMjBhMmMzNywgMHg5OTVlNjczYSwgMHgzZDY1NGRiZiwgMHhlYTlkMzdhNCwgMHg3Y2IyMzQ1MywgMHgwZTRkZGY2MiwKKwkweDMwYzA2ZmI5LCAweDMxZTAyM2NiLCAweDE3YzA0Nzk2LCAweDBhOWIxZTU5LCAweDc5NjY1ZTg4LCAweDUwZWJlYzA0LAorCTB4M2IyZmY5NDUsIDB4ZGUzYzA0MmEsIDB4OGRmMDEwMTEsIDB4NGYwMTZhOGUsIDB4ZjgwOGQ0NzQsIDB4MDI0NThlYWIsCisJMHgxMzQzYmFmZSwgMHhiMWQzN2VmZCwgMHgzYTc3YzA0MiwgMHg2ZmY5NDRkYSwgMHg3YzA1ZGEzYiwgMHhjYTI4MjNhZiwKKwkweGExMTU1N2RmLCAweDgyMDJiY2ZmLCAweDAzMzljMmRkLCAweGY2ZWQ1ZGY5LCAweDJlN2NlZDg0LCAweGY5ZTcxMWQwLAorCTB4ZmFjYWJiMjEsIDB4ZWVkODA0YWQsIDB4ZGYxNGRkMzMsIDB4ZDg2M2FhNjgsIDB4NDQ5MTQ2ZDksIDB4OTFjNDY1ZTgsCisJMHg4YmY5ODY3YSwgMHgzN2VkYzM5ZiwgMHg3NDFkNDc2YSwgMHgxYjhmMThjNiwgMHgzODFmMTNkZiwgMHgzNDQyYmIwNywKKwkweDMxMjY3YmQ2LCAweDFmYzA3ZTVhLCAweDAzZTUwNGY4LCAweDI1MzlmNTA1LCAweDNlYmQ5ZmNjLCAweGY5ZjA1M2VkLAorCTB4NGRjNjkyZTYsIDB4YWUzNzZjMjksIDB4MDljZGFhZmMsIDB4NDZkYjc5MzksIDB4OGY5Mzg2MmIsIDB4YjIzZTVkNWUsCisJMHg2MzhjMTQxZCwgMHgyOWI4MTc3ZSwgMHhmMDI2OTI5OCwgMHgwZTYxOGI4MCwgMHg4OGVlYzM5NywgMHgwMTc3ZGUzZiwKKwkweDgxZTQzZTYwLCAweGI5NjNlNTA4LCAweGI2NzBjZGRlLCAweGYxMGE3OTNiLCAweGU1YzM5NGY5LCAweDE0MmYyMTc2LAorCTB4YzI3YWM4NzAsIDB4YjQxZTVjNzgsIDB4YTllNzQ1YTUsIDB4ZGY2MTI0MWEsIDB4ODQ3MTZkNjYsIDB4MWM5MjFmNjAsCisJMHhjODk1YjYxNCwgMHg3MjI1YzlmNiwgMHhkY2IzZTA1ZSwgMHhlNTg1N2UzZCwgMHg0NzhiNTY2NCwgMHgzMjdlZjIwZCwKKwkweDIyNTVkZWI4LCAweDBjZWMwN2RhLCAweGY3M2RmYzlmLCAweDUxNGMyMjliLCAweGQ0NDRhMTMwLCAweGJkNzJmNThiLAorCTB4YTBkNTQ3NTgsIDB4Y2ZmNDAxNDYsIDB4ZWY0ZTM1MjQsIDB4NDFmNTk2ZWYsIDB4NmJjNTlmZjQsIDB4MzBjMTVmODAsCisJMHg5Yzc5ZjE4NCwgMHg3Njg5ZDYwMCwgMHgxODVkYjI4OSwgMHhjZTdjMTRlMywgMHhmNDliMjRmMywgMHg5NjQyZmVjNSwKKwkweGRmNjVmYjgzLCAweDlmNjE1MmU5LCAweGU0NGVkMjczLCAweDNmMzFlZWMxLCAweGZlYjlmOWM2LCAweGRiZDlkNGE2LAorCTB4OWE5ZmNjMjMsIDB4MjZiZmVmMzgsIDB4ZjM0YTVmMzIsIDB4ZmY5NDAyYjQsIDB4YzEzZjE5NGEsIDB4NGMxN2U2MGYsCisJMHhjNDkzNTMxOSwgMHhlN2M2YzRmNiwgMHgzOWY2MzBlNCwgMHgzZjA2MmY5NiwgMHhmNDFiYmEwYywgMHg0OGRiZTU4ZCwKKwkweDRmODkxYWZjLCAweDFhYTlmY2IxLCAweGY0MWJkMjhjLCAweDUxMmY5OTFhLCAweGZmOTUwNWZlLCAweDc1NGNiZTdiLAorCTB4N2FjNmVjZjQsIDB4MmFkYzVhZTIsIDB4N2M2ZGYzZDYsIDB4ZTY5ZmJkYmEsIDB4ODY5MzcwYTUsIDB4ODBjYmRmNDEsCisJMHg1ZWI0ZjI2NywgMHg1ZDIzNTFlOCwgMHg5YTBiY2YzNSwgMHhlMGM1ZWQ3OSwgMHgwYmJiNmM0ZiwgMHgwM2UzYjQyMywKKwkweDc3OWM1NmY3LCAweDZkMjczZTdkLCAweDhiNWZmOWU1LCAweGEwYTczYTY3LCAweDMzZjFlMDNjLCAweGY2ZWFlNjFmLAorCTB4ODRkYThmYTIsIDB4MjkzNzY3M2QsIDB4ZWE1NGZlMDgsIDB4YjQ1YjlhYWMsIDB4OTU5N2Y4NWMsIDB4MzZiZmFiMWUsCisJMHg4ZDlhYWJlZiwgMHhlOGRlNzc5OCwgMHhjZDk1ZmYxOCwgMHg2YmQxY2UzMiwgMHhhNmFmNzFmNSwgMHhmNTZlMzEyZSwKKwkweDZiYmI2YjU4LCAweGRhZjBiZjc1LCAweDVkZjk2YjAyLCAweGNiYWZkZDdlLCAweDkxZDgzY2EzLCAweGJhZTU1MjRhLAorCTB4Y2JmMDliNjgsIDB4ZGM3MmJkMmEsIDB4ZTNhZjlkNmMsIDB4MDk5YTc2N2QsIDB4ODBlNjkxYmUsIDB4NzdmMTdhZjEsCisJMHg3YmQ2MDBhZSwgMHg3ZTA1MDUzNSwgMHhiYzA0ODUwZCwgMHg5YzYyYzI4ZSwgMHgwMWQwZDllYiwgMHgwOWM4OTFiZiwKKwkweDlmZGRjNWJjLCAweDVlOTE2MmViLCAweDg3ZGVkNzZkLCAweDhlNDlmM2RmLCAweGViODUyOTM2LCAweGZiYjVlMzMzLAorCTB4ODliZDE3YTEsIDB4ZTFhZGQ0MzcsIDB4Y2U5NmU2ZjksIDB4NjNiZjQwMmQsIDB4MmZlMTNlOTUsIDB4MTc4ZjczMWMsCisJMHhkZmU0MGJmZSwgMHg4ZmQ1MTY5OSwgMHgxN2ZlZDk1NywgMHhmOTdhZGFmMCwgMHg4OTdjMDA3YywgMHgxNjAyODdjZiwKKwkweDdjZjg1N2Y2LCAweGUxNmQ3ZTAwLCAweDc5YmY0MjA2LCAweGE2MWM4NTNlLCAweGFmZmQxYjdkLCAweDQ3MjFjZWYzLAorCTB4ZjdmNmM4ZTksIDB4MWIzZjI5YmEsIDB4YmM5Y2IxYWIsIDB4OTJhOTNhOTYsIDB4NTVhNzAxOTIsIDB4YTVhZmJmNjIsCisJMHg4YzI0ZDg2NiwgMHg3YzU4MDk3MywgMHhmZjM4NjBiOCwgMHhlOGJmOTBjYSwgMHgzMWM4ZjM3YywgMHgxYjNhNjQ2YSwKKwkweGE3YTU4ZDc0LCAweDgxM2ZlNzQxLCAweDQ3MGRjZmFlLCAweGM0OTU1ZWQ3LCAweDNlZTAzNjM5LCAweDMxM2Q5YWIwLAorCTB4ZjY5NDRkNmEsIDB4ODkzODcwMjAsIDB4ZDc3ZTU5MzIsIDB4YTA4N2IyMWQsIDB4ODk2MzFmOGYsIDB4ZDI1ZjE4NTksCisJMHhiZmE1MGE4OSwgMHhlZjVmNWViZSwgMHgxNjM0MWQ0NywgMHg1M2E3YTZmNCwgMHhiYTVkZjk0NCwgMHhjZmI3MzZjYywKKwkweGQ2NWNmYjEwLCAweDdkZmEyMTVlLCAweDg4YmRhNzE5LCAweDA5MmY5Yzc1LCAweDgyMGY2NDRmLCAweDk5ZDVkYTNlLAorCTB4ZjllNzgzM2MsIDB4MGFiYjU5ZTQsIDB4ZWVjNWJiZmYsIDB4ZDc0MmE2ZGIsIDB4NGZhYmIzNWYsIDB4NTVmNGI4ZjEsCisJMHhlODQyZWU2ZiwgMHg4NmEzOTNkMywgMHhiOGI0NjdiZCwgMHg3YjhkMWQyNSwgMHgzNTc5NTdjNiwgMHhjOGVmMzhiZCwKKwkweGY1Mjk5YTViLCAweDg1ZTgxNDkwLCAweDhkOGYzZTcxLCAweGYyYzJiYjYzLCAweGUxMjVjYmJiLCAweDc5NzVlNzQ4LAorCTB4MTJhN2RiMDIsIDB4NDlkODVlZDEsIDB4NGZkYzdmODMsIDB4NGUzY2Q5ZTAsIDB4MGZjOGVjMzksIDB4N2UzZjg0MTMsCisJMHg5ZWYwMjUyZSwgMHg5MjU2ZjMxZiwgMHhiZjY1OWZjNSwgMHg4MWFkZDg1NywgMHhiMzhlOTJkMSwgMHgzMzIzZTI2OSwKKwkweDczZWNhZjE5LCAweDA3ZWI4ODUyLCAweDFiNWRhNTJhLCAweGRkODViOGYwLCAweGQxYjU3YWFjLCAweGE5ZGNmYjAxLAorCTB4NGNiODhiZGIsIDB4ZjQ5OGY3YmUsIDB4NDA5N2RlM2YsIDB4MjZmYzkzM2UsIDB4ZjA1OWE2MTYsIDB4NGIxMmY1MjQsCisJMHg3YzhhOTRmYiwgMHhlMDZhN2Q0YiwgMHhhOGZkNGIzMiwgMHgzZTBiMTJlYSwgMHhhNTg2NjZhNiwgMHgzOWEyYzY3ZCwKKwkweGJiNGIzYzE2LCAweDdiM2VkMmQ2LCAweDZlMGI0MmM1LCAweDU5NmNhMWQ4LCAweDhiNmQzOTQ0LCAweGI1YzdmZDJkLAorCTB4Y2ZiNGI1MmYsIDB4YTk2MWRlMGIsIDB4NDRlMDYwYTcsIDB4ZDZhZmY3MjEsIDB4YjJkZjhmZmIsIDB4ZTRjZjVhY2UsCisJMHgyZjQzOTViNSwgMHg5MjhmZGZlNCwgMHhlNjE0ZmJhYiwgMHhkOTY3YjU1ZiwgMHg4NGU1ZTg3YywgMHhlYmFjN2JhZSwKKwkweGM3NjU3ZmIxLCAweGEyOWQ5MDM5LCAweGZmYTYyOGQwLCAweGRkYWIzZWQ1LCAweGUyYjRjYWFiLCAweDhiZmY1ZTk1LAorCTB4YWY1Y2RkNjAsIDB4OWZiMmVlZDUsIDB4YjI5ZTQwYTcsIDB4ZjI5NjFjZGIsIDB4ZGRiYTI1YjEsIDB4YzQ1MzQyOWMsCisJMHhmOGRiZjg3ZCwgMHhlMTY2NWRhZiwgMHgyZWJkMmM3ZiwgMHhmZTAzODc5NiwgMHhiNDliYjczMCwgMHg5NzA3MmFjMywKKwkweDMwNzJhYzg2LCAweDFjYWI2OWY5LCAweGU1NThmNzE0LCAweDU2MjNmMmUwLCAweGFkODdmMDM5LCAweDY3ZGE1MDcyLAorCTB4MTNiMjgzOTUsIDB4ZjY5ODM5NTYsIDB4MGMwZTU1OGUsIDB4ZDdlNThjZjksIDB4M2U1NTg4ZjQsIDB4ZTUzNDUzNDgsCisJMHg4YWViZjA4ZiwgMHg4OWY5NTZiMywgMHhiZjUxMGZlNSwgMHg4ZjNjZGZlMCwgMHhmZGU2OGY0MiwgMHgxODVhZmNmOSwKKwkweGZlMjFhZmMzLCAweDc3ZTFiZDMwLCAweDRlNGYwZWNlLCAweDY3ZDU1ZTAxLCAweGY3Y2YxMGE3LCAweGFiY2ZiZTk4LAorCTB4ZjI3OWI3MjcsIDB4NzRlZTllZDksIDB4ZDAyNTc1NjgsIDB4M2FhZTVkNzMsIDB4MGQ1Y2E0YjMsIDB4ODc4ODFkZjQsCisJMHgxOThmYWZkZCwgMHg1YTU5YzdmZiwgMHgxYTJmZGEwMywgMHgwYmFlNTlmNSwgMHg0ZGFmZDFmMiwgMHgzOWU5N2RjMiwKKwkweDFkZGQ4NDk1LCAweGU3YzcyMDk3LCAweDQ3NThiMjdiLCAweGE4N2IxZWYwLCAweGQyNzFkNzkzLCAweDNlYzBhNWQ2LAorCTB4MmI2YjI3MzcsIDB4YTJmNmZmZDEsIDB4MDc3MDg1MzYsIDB4ZmU4MmEwYTMsIDB4OTcxY2ZmZjUsIDB4MWM3ZWJjMGIsCisJMHgxNTFlN2I4OSwgMHgyNDE2Y2E0NSwgMHg3ZDYyZWQ0NSwgMHg3YWYzOTczNiwgMHhmN2U4OTZkNiwgMHhiOWViOTUxNCwKKwkweDE5MTJmYWRmLCAweGJkNTI0OGI3LCAweDI5MGYxMTJlLCAweDIwZTIwMGEyLCAweGFkYzhiZDdjLCAweDhlM2QwNjJmLAorCTB4M2QwMjRmYzcsIDB4OWIyYTZkYmEsIDB4N2QzODhhMzgsIDB4ZjA2N2Q4MjksIDB4YTUzZDNiNTUsIDB4ZmUxMTNmNDgsCisJMHg3ZmVlOGU1ZSwgMHg0ZWZmNTM2NSwgMHgwZWQyNzNhYywgMHg5N2FiOWNiMiwgMHgzMGU0ZGM4NiwgMHhkM2YyN2RkMSwKKwkweGRjNWUwYjVlLCAweDdmNjk2OTkzLCAweGE1OWYxMWY5LCAweGI0MmUxZmRlLCAweGE5ZjY5N2Q0LCAweDQ0ZWNiYzE2LAorCTB4YjRmZGE1ODUsIDB4N2MxNjAyNzcsIDB4ZDJkYWE0N2EsIDB4MzViMzhhZmUsIDB4MjI5YzdjMTYsIDB4NWY3ZmFmZWYsCisJMHhlM2U5MmY5MiwgMHg3ZGU0NDU2MywgMHhiYTlmZGZkNiwgMHhmNzg4YWI3YiwgMHhlMWFkN2JjOSwgMHgyM2Q3NTM0ZiwKKwkweDRjZTIzNzAxLCAweGRlYzcxY2JhLCAweDQwNGM1Yzg3LCAweGZlYzVjZmYwLCAweGIxODNjZTJmLCAweDZiNDdlOTZlLAorCTB4Mjk0ZmJhZjcsIDB4ZGQzZjUxYzksIDB4ZmYwZGIzZjAsIDB4MDE1NTgyOTUsIDB4ZmRjM2I5ZjMsIDB4ZmJhMmY5ZTQsCisJMHg2ZDdmODZmMywgMHg4YmQzY2RmOCwgMHg3MjFjZTI3ZCwgMHgyNmNhYmM2ZSwgMHhjOTExYzFlNCwgMHhjN2Q3OWM4MiwKKwkweGZkZjdiMGQxLCAweGJkZTQ0YmU3LCAweGM2ZmQ3NjIxLCAweDlmZTc2MmJhLCAweGVkOTVlYzVlLCAweDcyOWY3MWY1LAorCTB4YzMzNWVkZDMsIDB4NWNiYTMzZjksIDB4NzM1ZjFjMmQsIDB4YjhmOWYyMTQsIDB4Nzk2NzdkNTMsIDB4OWU3ZjdmZGUsCisJMHhiM2NmYTRjZSwgMHgyZTVjZGU4NCwgMHhiMzY3NWZkNywgMHgzMWEzZjg4OSwgMHg1MmE5OTFjZiwgMHg3ZjM4MGQ1ZSwKKwkweDdlM2JmYjBlLCAweGUzN2RlZWEyLCAweDFmZDg3ODc2LCAweDIxZGRiYzc5LCAweDlmYzcwOGUyLCAweDJjMWI1MTViLAorCTB4MDE0NDNmODAsIDB4ZWY4ZTMzOGMsIDB4N2MwZmUwMDMsIDB4YWUxZmRjMGEsIDB4ZmQxNzZhOTksIDB4YmQ0ODk3Y2YsCisJMHgxMjY1ZGE4YiwgMHgyNDgwNzk3NiwgMHg1ZGRhMDdmZiwgMHgwYzMxN2VlMiwgMHgxODFjODViZiwgMHhjYzdjNDFmYiwKKwkweDYyZTMyMDUxLCAweDM5OGI4ODgwLCAweDA2MmUzMjFjLCAweDQwMzE3MTFjLCAweGZlNTBjNWM0LCAweGYwMmE4NzVjLAorCTB4MDIxNTFkODMsIDB4MjAyM2JlN2YsIDB4ZDUxZDIzZjAsIDB4YTNiY2ZlMDIsIDB4NzIxYjk0NDYsIDB4ZTMyZjRiMTMsCisJMHgxZmYwNjYzZSwgMHhhMzczODg2YSwgMHhlNzFlNDYyMCwgMHhlNWY5MjdkZiwgMHhkOWFjZWI1YiwgMHg2ZjljNWJjMywKKwkweDI0YTU2YWEzLCAweGE2ZGJjZjRhLCAweDJkYzg3OTRhLCAweDNiNDA3NDk1LCAweGVkNDhmZmU4LCAweDI5NDVlY2FhLAorCTB4OTAwZWE3ODgsIDB4NDdmYmM1MmYsIDB4NTNmZjg2ZTIsIDB4NmVlODMwZjQsIDB4ZmFhMzU3ZGMsIDB4MjQ2MWY1MjYsCisJMHhiZmVlMzRiZCwgMHhkMGFjZmJhNiwgMHg4YzdkNThiYiwgMHhiYTU4ZGJkNSwgMHhiZGViM2Y4YiwgMHg4ZDdiZGU1OSwKKwkweGE3YWU4NWY4LCAweGJkMGM1ZjA2LCAweDE2YTQ1Mjc2LCAweDYwNTQyNWY2LCAweGVmN2QwNmFiLCAweGQxZWFiMjRmLAorCTB4YmU5MmE1ZjUsIDB4ODYyM2QwMDMsIDB4NzRkZTdjYTcsIDB4NzY4N2NlMWIsIDB4NTYwN2YwYWYsIDB4OTBjY2I2ZTgsCisJMHhlYzg3ZTZkMywgMHhmM2UyN2NlMiwgMHhlZDM3ZTNkNiwgMHg3ZGI3NzliNywgMHg2ZWVmOWVhOCwgMHhlMjE1YmZiYywKKwkweDIwMWQ5ZDVjLCAweGRhNWYxZjcxLCAweDczNzY4NGE1LCAweGY1YTA4NmJmLCAweDI1MjExNDdjLCAweGZhZTQ2ZmFlLAorCTB4ZTM1ZmI4MTcsIDB4MzNmM2Q4OTYsIDB4ZjIyMWQ2MjAsIDB4ZTZiNWJjMmMsIDB4NzJmZDZiMmUsIDB4MzNjOTFlZmQsCisJMHg2MzI3NjBiYSwgMHg5NjU3MGFmMywgMHg0YWEwZTdlYSwgMHg1ZjcyMzdlYSwgMHhkZDEwNWVlMiwgMHhhMTU3MmU5NywKKwkweDg3MzgyOWYxLCAweGNiYjRhZjcwLCAweGNlMzg0NmI4LCAweDIxZjNhZjc0LCAweDhhMmEzZmNlLCAweDBhMTMzZDMzLAorCTB4NzQ2ZTRlNzEsIDB4MTc3YzEzYTgsIDB4Y2Y0MWExY2IsIDB4OWU4MzNjYTEsIDB4ZWFlNzE4NGYsIDB4ZTIzZjc1M2YsCisJMHg4YmM3Y2Y4YiwgMHg3ZmNmMDU3YiwgMHhiZTc2ZTgyMywgMHhmZjQwYWVjZiwgMHg3YTA4ZjI4NywgMHgzYjQxZjNmYiwKKwkweGU3M2U5OWQ5LCAweGJhMDljNjBmLCAweDdlM2I2MjdlLCAweDk0Y2ZiZTRiLCAweDVmMjhiODc3LCAweGIwMTVjOTQxLAorCTB4YThjNmZiMWYsIDB4NjVkNjYxYzEsIDB4ZmIyMjJkNDAsIDB4ZTFiZjU4OGYsIDB4OTllZTMyNTAsIDB4ZmNjOGNmMmQsCisJMHhiZDMzY2I0NCwgMHg3YjI2MDVlOSwgMHgxMGVhNWNkOCwgMHhhNmRiYmJmYiwgMHhmZjIyOTRiNSwgMHg4YjlkZGY2MCwKKwkweDVmMWRkZTdiLCAweGNlMDBhNjg2LCAweGIxMmRlM2Q3LCAweDc3YjIxOWZiLCAweDQ3MjExNTMzLCAweDYxM2ZiYzAzLAorCTB4YjExNWFhZWYsIDB4MDQ5N2I2M2YsIDB4OTg5YjdiM2QsIDB4MDJjZTNjOWIsIDB4MzQwNjhmMGEsIDB4OTZkYTAwZjIsCisJMHgyMzA3YzEwYSwgMHhhZTEwZDAwZiwgMHhiOWI4ZmIxMCwgMHg4MTMzYjk3MywgMHhkZTc2NDQ5YiwgMHg4YmUwOTU1YiwKKwkweDM5MjIwN2U2LCAweGM3ZmUwOGI0LCAweDliODI3OTQ4LCAweGRlMzE1NTA2LCAweDg4NjcwNmY3LCAweGNkMjgxZTcxLAorCTB4YzZkMGZlOTMsIDB4MWZlMTZiZWQsIDB4MzkzNGY2NWUsIDB4NTM4ODg3NDEsIDB4YTc0YjEzOGUsIDB4ZjNjYTk0M2YsCisJMHgxZDNjMTMyMCwgMHhiYWRmZGQxMywgMHhlN2IwOGEwZCwgMHhjMDJiYTBlYiwgMHg5ZWMyMmJiNywgMHg1ZDY3ZjgxYiwKKwkweGYxMjU1ZTNhLCAweDNjNDkzNzNiLCAweDUxNmNmNGUyLCAweDExN2VlNDUyLCAweDAxM2VjMDJmLCAweDZiZGMxZmIxLAorCTB4MDVmMWU5ZjcsIDB4ZmIxMDAzZWMsIDB4MThlYzM5NDAsIDB4ZTAzMWQ4NzAsIDB4NjFjMDYzYjAsIDB4Yzc2MTAwYzcsCisJMHg2YTk0YmU1MCwgMHg0M2U3MTE3MiwgMHhhY2QyYTMzZSwgMHhhYTZlODMyNywgMHhjODI1ZjkzNCwgMHhlNDcxOTg2NywKKwkweDkxZWRjYzMzLCAweDIzZDczMGNmLCAweDQ3YWU2MTlmLCAweDIzOGNjMzNlLCAweDhmNmU2MTlmLCAweDQ3MTk4NjdjLAorCTB4MWVkY2MzM2UsIDB4OGUzMzBjZjksIDB4M2RiOTg2N2MsIDB4N2FlNjE5ZjIsIDB4ZjVjYzMzZTQsIDB4NzE5ODY3YzgsCisJMHhlZGNjMzNlNCwgMHhkNzMwY2Y5MSwgMHg1OGFlZGVkZiwgMHhiM2I3MWRmMiwgMHgzNWRjODZmOSwgMHhmMjEzNDhlZSwKKwkweGE2YWYzNjMxLCAweDdlZmU3MjBmLCAweDM5NzdkN2UyLCAweGEzZTdjMWYzLCAweGViYjcyMTJiLCAweGM5NTQxMzVhLAorCTB4Yzk2YWFlZTcsIDB4M2U0OTFiNzcsIDB4M2UwYWQ3ZjcsIDB4Nzg5MmViZGYsIDB4MWRlMTlhOTUsIDB4MWU0MjJmYzYsCisJMHhlNjQwYjJhMSwgMHg0NzkxMDAxMSwgMHgwMTFlNDQwMCwgMHg0YTg0NzkxMCwgMHgwMDIzY2M4NywgMHg3MjgwOGYyMiwKKwkweDkxMDAxMWU0LCAweDFlNDQwMDQ3LCAweDA0NzkxMDAxLCAweDAwMTFlNDQwLCAweDNmNDA0NzkxLCAweDkxMDAxMWU0LAorCTB4ZjIzOTQwNDcsIDB4MjNjODgwMDgsIDB4YWYyNGZjYTAsIDB4NjMwNGY5MDMsIDB4MGJhM2YwNWQsIDB4OTYzY2Y3MmMsCisJMHhjZjNkY2I0MywgMHg0N2UxYzE2YiwgMHg4ZmMzZGI5YiwgMHg4ZmMzZDczNiwgMHg4ZmMzZDczNiwgMHhhM2YwZTMzNiwKKwkweDQ3ZTFlZGNkLCAweGE5NTc3MTliLCAweGZjMTdlODRmLCAweGY4M2Y3MzY5LCAweGI4YmM2NmQzLCAweDYyMTJmODJiLAorCTB4ZmFlZmQ3NDQsIDB4OTE4MDhiZGQsIDB4YzU3MWU1MjQsIDB4NDFlYzY3Y2IsIDB4NGY3YzhjNWEsIDB4NGRjOTVlMjQsCisJMHg1NDVjZjk1NSwgMHgxOTJiOGI1YywgMHg4NDRiMDZkNywgMHg3ZWExNGZkZSwgMHhmMjJkZjgxYiwgMHgyZDM3Y2NiNywKKwkweGNkZTQyMTRjLCAweDE0YzhiZjhiLCAweDUxM2U0NmY1LCAweGZkZGYzMWZjLCAweGU3Zjg0OTA3LCAweDVkNzI0NWRkLAorCTB4YmM5NTdmNDYsIDB4N2RhMzQwNzYsIDB4NWRiZTFmMTQsIDB4M2I0NmZjZWMsIDB4ZWI0ZDJmNjEsIDB4MWY5YjBiZTAsCisJMHhiZGZmN2NmOSwgMHgyY2FkOTI5ZSwgMHg4YTZkN2I0ZiwgMHhiMmY3NGZmMCwgMHgxODcwYjU5ZiwgMHhmNzRiMzRiYiwKKwkweGY2ZGFmNjliLCAweDdlZTA0YjFmLCAweGJhOGEwZGZkLCAweGU4OWU4Nzg3LCAweDA5NjczZWEwLCAweDAyNTZkNGU4LAorCTB4ZDRjMjYyM2YsIDB4ZDQ3ZjNkNTQsIDB4NzE2MTYzMzYsIDB4M2M0NmRkNzQsIDB4MDA0NGVkOGYsIDB4ZmQ5OWU3NzksCisJMHg3OWUyNmFlNCwgMHhiOTA3ZmQ2NiwgMHhiOWNmZTE5YSwgMHg3ZTgxMWZhNCwgMHgwZTRkY2ZiOCwgMHgyNjNkODEyYSwKKwkweGFhN2NiZWY5LCAweGUwYjRmZjNjLCAweDVjNGQxOWRhLCAweGRiNWY3OTNlLCAweDc3Zjg2NjhjLCAweDhmZGZiMjA5LAorCTB4NzQxNjQ4OWYsIDB4YjJhMzYxYmMsIDB4OTlmYmNlYzcsIDB4YmIwMjhmYjksIDB4YmU4NTVkYjksIDB4YmNmYmM5ZWUsCisJMHhhZjMxMjZhZSwgMHhjZTZjZDVkNywgMHg3NWNhZWZiZiwgMHhhNDVmNzBmOSwgMHg4OGE2NjU0OCwgMHgzYzg0MmJjNSwKKwkweGRlMzc0MTlkLCAweDFmZDg4YmRmLCAweGM0M2VmODliLCAweDFkM2Q1NzY1LCAweDI0ZDBmZGVmLCAweGE5M2RhZDFmLAorCTB4OTFjZDdjMTYsIDB4MjY4N2VmMmMsIDB4MWY4NTViMzksIDB4ZWVjNDE3MmMsIDB4MTZhZGNlMjEsIDB4ZjVhYmU1OWQsCisJMHg5YTk1YjdmMiwgMHg5ZTc4NGJjZiwgMHgwYmJmNzc1NiwgMHgzNTM1OWJmNCwgMHg2YzM0NmFiNSwgMHgyNzUyNTFmZiwKKwkweDM2YTZlZTQwLCAweGViYzMxYTZjLCAweGQ1MDE0MmQyLCAweGRhYmQwM2VlLCAweDkzZjgxMjVlLCAweGUyMTcwMjM1LAorCTB4MjdkNjJlNTMsIDB4NDE0OWMzY2UsIDB4YTRjODljMjUsIDB4ZGJiODIxYjgsIDB4ZWJmMTlhMzYsIDB4ZTk5YzFiODMsCisJMHg1NDhmYmY2OCwgMHhmODkzMDNiOCwgMHg3NDQ5NzY3ZiwgMHhjMjc0NDU1ZiwgMHg1ZTQwYWYxNiwgMHg0OTk0NzdhOCwKKwkweDdjNzJkOGZlLCAweDU3ZTJmMjBmLCAweDU4ZjkwNDlkLCAweDYxM2FmMGUwLCAweDhkZmQ2MjZmLCAweGVjMGY3N2Q4LAorCTB4ZWMyYWRjN2YsIDB4MjFkMzlmNTQsIDB4M2ZkZDNhZmMsIDB4YjVjYWYwNmEsIDB4MjlkMWI2N2UsIDB4NDM4NjhmZmMsCisJMHgzZWEwN2ZlYywgMHhkZTMwZGZjNiwgMHhhMWRmYjA0MywgMHgxZjhlNzE4NiwgMHg3MjBkNGViYywgMHhiN2RhY2I1NSwKKwkweDczODNiYmM1LCAweGE5YmRhMTc5LCAweGYyZTdkNzJjLCAweDAxNTJkZmY3LCAweDBhZWQ5MGJmLCAweDBkZmIyOWVjLAorCTB4Yjk2NTRlNzcsIDB4NTJmNGQ4NmIsIDB4OTE1ZGVlMzIsIDB4NmZlMTAxZTAsIDB4YTFmMWI2N2MsIDB4OTA1ZjE5NjQsCisJMHg5ZDI2ODlmOSwgMHhhNmZjNDY0ZSwgMHg5MzQ3ZTc1OSwgMHgwM2U1ZWVmZSwgMHhhOTZjNWJiNiwgMHhmMTg2ZWU3MSwKKwkweDJiZDc4MTVlLCAweDNmNTg4YWZjLCAweDliZmJjODkxLCAweDgyYmY1Yzk5LCAweGIxOTViM2Y3LCAweDM2MWFkYmU1LAorCTB4ZmVjNWQyNjcsIDB4YWU2ZmUxYTIsIDB4Yjk1ZGU3ZDIsIDB4YjdkZTI5ZDEsIDB4Mzg5MGEwYWMsIDB4YWM4NjU2MGYsCisJMHhmZWU5NTdlZCwgMHhhZGE3YWFlNywgMHhjYTk4M2ZlNSwgMHhhMWYyMjc3ZSwgMHhkZmE5ZGY4NiwgMHhkYmQ0ZWU5MywKKwkweDdiZGViYzM0LCAweGRhN2JmMGIzLCAweDUwNzVjODljLCAweDA3ZTkwNmRkLCAweDRkMGE3ZWQxLCAweGI1Y2Y4MDUwLAorCTB4Nzc1ZTMzYzUsIDB4YzMyYWEwMjgsIDB4YmE5YmNkYzgsIDB4OTMxZjM0M2YsIDB4MGMxNzNkMzIsIDB4YjIzYjA4MjYsCisJMHg4MTEyZjA3MCwgMHgyOTk4MzJkZiwgMHg4NTgzYWRlMCwgMHgxOWIxMWNiMiwgMHg0YWE0NzNlNiwgMHhlM2M3ZGQwOSwKKwkweDQxZmJhNWJmLCAweDI2NWUwZjM3LCAweDE5ODIwN2VhLCAweDU4MDc4ZTQyLCAweDE0YzUzMThlLCAweDE2NWQzZWRkLAorCTB4ZDYxMTdhNTAsIDB4MzZkNGVmOWUsIDB4ZjlmYWUxOGQsIDB4OTVmODQ5YmIsIDB4ZTI1ZmMzZDcsIDB4OWZmMDQ1OGEsCisJMHg3OTA3YTE0YSwgMHg2ZjlmMTg1NSwgMHgwZjIxMzQ2ZiwgMHg5NzU2YjA3YSwgMHgxMjAzZDY3YiwgMHhlYzIwMjM3NiwKKwkweDEwODJlNTU5LCAweGQyMmM5M2RlLCAweDZmYzBkYmY2LCAweGUwYjVmZTQzLCAweGViZjAwNzI5LCAweDU3Y2I4YTgzLAorCTB4ZTIxNWVlMjQsIDB4NzdjODZjZmUsIDB4MjdkNDFlYWMsIDB4OGYyNmYxZWEsIDB4YzUwZDI3OGMsIDB4NWU1OGIwOWIsCisJMHhjNWI1MDUxYSwgMHg0N2FmYWUwMSwgMHg5ZDEyZjA2YywgMHhhNGFhNGNiMSwgMHg3N2RmNTkyMiwgMHg5MWJjNWI1MCwKKwkweDM1M2ZiZGNmLCAweGIzNjc1MTFlLCAweGIzZjU3ZTA5LCAweDhhMDdiNzlmLCAweDMyYWEyNzRhLCAweDk0ZGIyN2EwLAorCTB4ZThiZWFkOTIsIDB4OWYyODllN2EsIDB4YmE2NjUwMzMsIDB4ZjVkNTJmMjcsIDB4MDMyZWY1OGEsIDB4ZGY3NThlZjcsCisJMHhjMzQxOTA5ZiwgMHg2YzA2MDVmOCwgMHhiZjQzM2E2NCwgMHg3NzIyNTNlYSwgMHhmZWVhNGMyOSwgMHg2NGE4MTRhOSwKKwkweGJlOTJkNmQ2LCAweDc5ZmUyNDRmLCAweDNjNzU4YjlkLCAweGRmZjZkMGY3LCAweGZhMDhmMTZlLCAweGQ0ZmNmYzA4LAorCTB4NDU4MzhiMzUsIDB4YWMxZDg2N2YsIDB4NzdkMDFjNTMsIDB4YWRiZTBlYzMsIDB4YjdhMGU3NjgsIDB4M2NjOGVlYWQsCisJMHhhOGIxMzVmMCwgMHhjNWJlMDVkZiwgMHg2ZGI2ZTdkMiwgMHgzMTI3ZGIzZCwgMHgyNGNiNzIxZCwgMHg1ZDVjZWFmZiwKKwkweDgwYjhmMTRlLCAweGQzZGM0ZTQyLCAweGI5ZTQ4YjFhLCAweGVlNWYwZTQyLCAweGYxMWY5MTEyLCAweGIxOWZiODg5LAorCTB4NmZlMDBmZWYsIDB4ZjQ5NzQzMGYsIDB4YzM2ZmU5MzIsIDB4YTRiOWY2M2YsIDB4ZmYwODBjN2YsIDB4ZTA0ZmVmMTgsCisJMHg3Zjg3MDMxZiwgMHgxOGZmMDgwYywgMHg4MThmZjBlNSwgMHgwZTA2M2ZjMywgMHhmYzM4MThmZiwgMHhjN2Y4NDA2MywKKwkweDE2ZDg3ZjI4LCAweGYzM2Y3NTM4LCAweDY4NWI1MWYzLCAweGQzOTY2MWZmLCAweGVlNmI0N2M3LCAweDUxZWY5ZTMyLAorCTB4MjM4ZjkyZWEsIDB4NjNmYjEzNDgsIDB4NjI3NjExYjksIDB4N2NiMTNlYzgsIDB4NzJhM2NiYjksIDB4ZjRmZGI0YjQsCisJMHg1NDdlNWIyMSwgMHg3Y2I2OWE5ZSwgMHhkYzI5ZjNiYSwgMHg4NDFmZDk4MywgMHg5NDViNmIzZSwgMHg5MTk0ZGM3MCwKKwkweDNiODllY2U1LCAweDNjYmU4NDEyLCAweGQ4NGI4ZjcxLCAweDg5ZDczYWRkLCAweDUxNzlkYzk3LCAweGZlZGJiZTdhLAorCTB4Mjc2OTRlYjcsIDB4M2M3YzEzYzMsIDB4NzhiNmUyZWUsIDB4ODlmZjc2MTUsIDB4YWMxYzlhZjIsIDB4MTU0OGIxMzcsCisJMHhkOWMwMTk3YywgMHhiMjU2Zjg4ZSwgMHhhNWYyODc5NiwgMHg0Y2U1ZTI3NCwgMHg1N2ZmNTc2ZSwgMHg3ZWEyZTdhZiwKKwkweDE3M2NkMWNkLCAweDExYzM2ZmVjLCAweDFmNGNlNmZmLCAweDIxMTM2YmZhLCAweGFmMWUwZGFmLCAweGVhYzVmZTBiLAorCTB4YmNlMmE5OGQsIDB4NzE5MGNmYWQsIDB4OTE0MDk2NWMsIDB4MzFmODMzMDcsIDB4ZGZjNjRjYmIsIDB4ODBlZjc5ZmEsCisJMHgxMjdiZjQxNywgMHhjMGI5YzgxMywgMHgyZGYyNGVkMiwgMHhiODhjZGY1NiwgMHgyYjVjNmM2MiwgMHg3Mjc5NWYxYSwKKwkweDIyZTIzZTRiLCAweGY0ZWQ0OWEzLCAweGM0MmY0YzVkLCAweGQxMjU1YzNkLCAweGZjNmM0YWI4LCAweDVkNWY0ODYzLAorCTB4MTllNzg5NjQsIDB4N2U5OTRkNzAsIDB4YTllZmQ3NGYsIDB4ZDRmNzQzY2QsIDB4ZjAxOTc5YTIsIDB4YmM1NDFmZTcsCisJMHg3OTM3M2Y4OCwgMHg2NzRlYjc3YywgMHg4OWNmYTliYywgMHgzZjM0ODgxNywgMHg2MmNhZTdjZCwgMHg4YWZiZmZiYywKKwkweGJkZjgwZjc3LCAweDU2ZWMyZmRlLCAweGViYzI3ODFkLCAweDIxNTFkYTY5LCAweGM0MjliNmY0LCAweGZhYzhkNDcwLAorCTB4ZGVjMWU0YmQsIDB4NWY2MTlmOWMsIDB4ZWIwYjgwZTEsIDB4NWMwNmYyNmMsIDB4YTc3ZjI2NjksIDB4OTgwOTRiYjEsCisJMHhmODE5ZmRkZiwgMHg4ZTMyNjVlZCwgMHgwN2Q3Yzc1OCwgMHhmNWI2ZWZkMCwgMHg4OGE1YWU3OSwgMHg4M2RiYjI1YiwKKwkweDc0NmI2ZWY3LCAweDcxZmEzMTM5LCAweDYyNWVmMTNiLCAweDBjYmQzZTdlLCAweDdkZTdlYWI5LCAweGJlNjE2ZWMxLAorCTB4NGJmOGQzMTIsIDB4N2U2OWJlMzEsIDB4YjVmYzJmNmUsIDB4NjI0OTY1OTUsIDB4ZWYyZjA2YmMsIDB4MmJkMDBmM2IsCisJMHgxMDc0YzlkNiwgMHhjZWRmZWE3NCwgMHgzY2M0ZjllMywgMHhlMThkZWU4MiwgMHg3YWM1NTM5MCwgMHhmMTgzNGVmMCwKKwkweDEzOTBkZWM1LCAweGU4ZGQyY2YzLCAweDZkN2VmMTE3LCAweGRiNDc5YzliLCAweDg2MmFlYTkyLCAweGJhZjBlNzNmLAorCTB4MWU3ZWNjNzIsIDB4YjJlNDFkY2IsIDB4ZDFmYTk3MGUsIDB4MGZjMmJkNjIsIDB4YTUzYTYyNmUsIDB4NjM0Y2ZmYzEsCisJMHgzMTczZDdiZiwgMHhmNWY0MWFiZCwgMHg1YWE1NzUzNywgMHgwN2FlYzZmZCwgMHhhZDRmZTA5ZCwgMHhmMmM0YWU3ZSwKKwkweDhlNWQzMWUxLCAweGNhYmM2ZTk3LCAweDA4ZWZlODQ1LCAweDUzM2VmMGI4LCAweDZmZmRlOWQzLCAweDIyYjdlMzZiLAorCTB4ZmRkYjUyM2YsIDB4ZjE4ZjMzODgsIDB4NGZkMjY1ZWQsIDB4NDY3NDBjN2QsIDB4M2MzZjM4M2MsIDB4ZmE1M2VmMDEsCisJMHhmNzhiYzZkNywgMHgyZWRlYjViNiwgMHg3YTIxZGZiMSwgMHg4MWY0YzQzZiwgMHgxMWFkZTI1ZiwgMHgwOTM5NjZmNCwKKwkweDUzNWFmZGUyLCAweGQxYmY5NWI3LCAweDcxODkyNGY1LCAweDg0MWJiYTliLCAweDY4NzMyZGZlLCAweDFkNzlhZjJlLAorCTB4YTA5ODVlM2IsIDB4NTk2YTVkMzAsIDB4M2Y5YzE1ZWYsIDB4ZjIxNzJkNWUsIDB4NWJhMWU2NzMsIDB4NzkzZWM1NzMsCisJMHg5MjczYTA5ZCwgMHhkODg3OWJlYSwgMHg5MDhkY2IwNCwgMHhlYTdlNDM2YiwgMHgxYjNlYTU0YiwgMHg5MzJjMWRmMywKKwkweDY1ODM5Y2YxLCAweGJmZTljN2MzLCAweGI2OWI0ZjRkLCAweDcxMDA1MDM1LCAweDE1NTI0Y2JjLCAweGQ0ZjVkYmU1LAorCTB4NWY0MzRmZDAsIDB4NjUzOGY1NmIsIDB4YTQwNWI2ZTMsIDB4OWYwZGVjOTksIDB4MGRjZjZkZGYsIDB4ZGQwMTlmNDMsCisJMHhmOWQ2MmM5ZSwgMHg5MTdjZjRjOSwgMHhmN2JhZjE0YywgMHhlNWQ2N2U3NCwgMHhlMzFlZjU1YiwgMHg3NTU3ZGM2MSwKKwkweDEzOWJhZmJkLCAweDI4YjZiMDllLCAweGI3OThkZWRhLCAweDgzZjY0ZDJlLCAweDVlY2U0M2ZjLCAweGY2ODJlOWQ1LAorCTB4ZGQ3YjQ0ZWIsIDB4YTM3NmU5OWUsIDB4ZWM2ZWM4NzEsIDB4YmIwZTk0ZGIsIDB4NzkxMTVmYjEsIDB4YTVkYjc1YWIsCisJMHg5OWVlYjc1ZiwgMHhmYWRmMTEyNCwgMHhkZjg3NzVmNywgMHg5ZGRiODViOCwgMHgzZDc3Nzg3YiwgMHhhYmFjNmJmNiwKKwkweDQ0ZWQyYzI5LCAweGIwNTNmYjMzLCAweDczZjRjYjFiLCAweDdiNThiM2JmLCAweGM3YTRjY2E3LCAweGNjZjc3ZjRkLAorCTB4ZTJjNWU4NDQsIDB4ZGY5OWZmMWUsIDB4MTg3N2Q4OTIsIDB4NjdiZGU2ZjYsIDB4MGNmNmYxN2UsIDB4MzU3Y2Y0NWYsCisJMHhjYjc0YjFmNiwgMHgzYzFiMzhiZiwgMHg3ZGM5YmE2NiwgMHgyYTVjMmQ2ZSwgMHg1ZjgxMzlkZSwgMHg2ZTM1N2ZiOCwKKwkweDgxZGU0NDU0LCAweGZmYzI1ZGRhLCAweDJiMWRmODM0LCAweGJmYWMwZDA3LCAweDFjYTg5ZThkLCAweGM5MWZmYzE4LAorCTB4ZTUwZDcyNmYsIDB4MGRmZjI0ZTcsIDB4NjA3MjFiN2UsIDB4MTNlMGRiZjAsIDB4ZjkzNTljZTEsIDB4ZmZiYWM2ZmQsCisJMHhiMTdiYWZhMCwgMHhlYjVmYmYyZSwgMHg0NTc4Yjc3YSwgMHhkMDk5NmI5ZSwgMHgyMzU3M2NmNywgMHhhZmFmNWVlNCwKKwkweDBmOTZiMjZkLCAweDY0M2JjOWYxLCAweDJmNDMzN2RmLCAweDlmMjQ3YTA2LCAweDY1MzliNjA2LCAweDQ1ZGY3MjFjLAorCTB4YjljNWNhN2MsIDB4Yjk2M2FjNmYsIDB4ZDY2YzZmMWUsIDB4NzRjYjg2ZTMsIDB4OTRmOTk4M2YsIDB4NmE2NjVlNTQsCisJMHg1M2U0ODRmNywgMHhmZmFmYjNlMywgMHg2MjdkY2ZlYiwgMHg2ZDhlZDI3ZiwgMHhlMmZlMTM4ZiwgMHg4MmZkOWVkMiwKKwkweDFlNWJiNTVmLCAweGJiNzFlNjc0LCAweDc3MTk3MjljLCAweDZkZjNiMjFjLCAweGU3ZTIyZjdlLCAweDc2ZWNiNzhiLAorCTB4Y2E3M2ZmNDIsIDB4ZTU2MmRkMjUsIDB4MDc3ZjRlYmQsIDB4ZTcxNWQwNmIsIDB4ZjczYTYyOGYsIDB4N2JiMGY2OGMsCisJMHhmNTllNzlmYiwgMHhmMTkzZTM2YiwgMHg2Nzk4YzZhZSwgMHhlMzk0Yjk1ZSwgMHgzNGQ0YjZjNiwgMHhkNmQ4ZDdjYywKKwkweGFiZGMwM2YwLCAweGFiMWZiYjBjLCAweGE1ZTNhNzc3LCAweGYxZTUyYzNlLCAweGFmYTc5N2EwLCAweDE1ZDc3MzUyLAorCTB4MzMyZjljNWQsIDB4Yzk3MmFjZTAsIDB4NzkzMTFmYjcsIDB4M2IyNThlZjEsIDB4ZTIyN2U3YjEsIDB4MDQ5YWM0MWQsCisJMHg4MmU1ZjkxNSwgMHhmMzA4NDg4MiwgMHg2ZWIxOGU0MiwgMHhiYzQ1ZGIxNywgMHg4OTY4Mjk4NywgMHgxNDc1OGE3YywKKwkweDAyZmY3YzkwLCAweGYzMjY5NDk4LCAweGVmOGNlOTFmLCAweDMwNTc2NWUxLCAweGQ4NGJiN2NjLCAweDIxMDdkM2E4LAorCTB4ZThkM2Q0MzQsIDB4MWZmNjE5NDgsIDB4ZjI0NmI3NmIsIDB4MzRmOTBjMmIsIDB4NTNiNTg5YzYsIDB4Yzk2ZmVkMjMsCisJMHhlOWRmZGM3NywgMHg1MjVlM2QzYywgMHg3OWJhZTZhOCwgMHg0ZTFmZmFkZSwgMHhmYTNmMTE1MiwgMHgxMmJhN2RiNiwKKwkweDY4NjliZTY0LCAweDE1YWMyY2JmLCAweGI3ZWNjMzY5LCAweDQ2ODNkZTQwLCAweDU1Nzc2ZmRlLCAweGJkZmIzMGZhLAorCTB4ZWJhYzBmMjgsIDB4N2JkNmYxODksIDB4MjVkMjNmMjgsIDB4MTVhNzIzZjMsIDB4ZGZiOGI3M2UsIDB4ZTJmMWI1ZTksCisJMHgyZmIxOTliZCwgMHg1ZGZmM2UyMywgMHg5NDc3ZTdkZiwgMHg4YjcxZTlhNywgMHhjOWZjMTI0OCwgMHhmZjVkMDRiYSwKKwkweGY5NDcxMmMzLCAweDcxYjk1MzAyLCAweDQ2ZjQ5ZmRlLCAweGY2NGNkMjkyLCAweGZkMzZjM2Y5LCAweDc2YzhhNDNjLAorCTB4MWY2ZjgzMTEsIDB4OWM3Mzg4NGYsIDB4NjQ5ZDNhZWMsIDB4Y2E3YzgyMmIsIDB4ZDZmZDE5ZjUsIDB4ZWQ5M2Q1M2IsCisJMHhlMjliNzNiMCwgMHhmNjZlZmJjNCwgMHg4ZTIzMzY5YiwgMHgxNTRjMWNkNCwgMHhkYWRiOTlmMSwgMHhlMGVjY2Y0YiwKKwkweDk4ZGI2ZTcxLCAweDVlYmYwYWFkLCAweGU5OTdmM2Y3LCAweDdkNzEyZmY2LCAweDY4NjllNmMzLCAweDBiY2YyM2JmLAorCTB4NTNkOWJlM2YsIDB4MmRmYzQyZTMsIDB4MmI4MTdiYjEsIDB4ZjJiZGY4NWYsIDB4YWJlNDYwMWUsIDB4MDM1NDJiZDYsCisJMHhmYjBlNWJmZCwgMHhiZGIyYmQwOCwgMHg2NmYzODA1MCwgMHhmZmU5MGVmOSwgMHgxNmQxYjdjZiwgMHg3NWM3M2JlNCwKKwkweDgyY2JjY2Q2LCAweGE4YTlkODdkLCAweDE3NjkyN2YwLCAweDdlZTM1MWRiLCAweDY5MjNiNmM2LCAweDcyY2VjZDRhLAorCTB4OTYyYmViZDAsIDB4MzJmZjFlM2IsIDB4ZWM3NmIxOWMsIDB4N2I4MDI3YTcsIDB4ODE3ZmIxMjcsIDB4YTAzZDYwZmQsCisJMHhiNGI5NTY0YiwgMHg0ZmJiMjc4ZiwgMHhhMjhhZjkyNSwgMHhiZjUzZmNmNCwgMHhjMmU0MzE3ZiwgMHgyMzM1OWJjOCwKKwkweGYyMGEzM2VlLCAweGY5MGU5NzUxLCAweDYzZjNkMjY4LCAweDBhZTdiYjliLCAweDRkZjc3OWJjLCAweDRlOTczYmUyLAorCTB4NjQ3YmU2MzQsIDB4MGY1NTgzZDMsIDB4NzMzZTU5MDcsIDB4YjUzNDdhNzUsIDB4N2UwMWJkY2UsIDB4NzEzZDhhZDEsCisJMHhlMzVlZTJhOSwgMHhmZDlhZTYwYywgMHhmN2RkYTZkMCwgMHhjZTVlZWY4YiwgMHhkZjE3OGVlZSwgMHgxNzdhNTRiZCwKKwkweDNlZjJhNjU0LCAweGY1NGFlZDk3LCAweGMyZTc0ZGRiLCAweGRkZmViYTJiLCAweGYyZDczYWQxLCAweDhmMzM0YWZkLAorCTB4N2ZmMWU1ZTksIDB4ZGUyODkzZGYsIDB4YTVkZjE5MmYsIDB4OGVkNmU1NWMsIDB4ZmJlMzRlYzEsIDB4ZjkzZWU5OTQsCisJMHg2ODk2NGE1ZCwgMHgzZTM2MWJlZiwgMHgxZDMzYzA2ZiwgMHhkMzA3M2JmMiwgMHhkNDM3MzY3NywgMHhkNjk2ZmY3MiwKKwkweDY3MThjOTAzLCAweDk1NmY0M2Q1LCAweGQ3MTA4NTMzLCAweDFhN2MwMzdhLCAweDg3NjZjZWZhLCAweGY5YTZjZWZjLAorCTB4NzdiZmUxYTEsIDB4M2U0MzVjODEsIDB4NGIyMTFjNTcsIDB4NTBiNmYxN2UsIDB4YjU0M2YwOGEsIDB4ZWY5MGI5MzAsCisJMHhmYzI0YmNkNiwgMHg2YTc2YjNkYywgMHhmODZlYjljNywgMHg0NDc5NDYyNSwgMHg5NGQ5YzNhNywgMHg3ZmYwNWNhZSwKKwkweDcyNDdkZWU1LCAweDljN2M2ZTcxLCAweGJkYmFmMTI0LCAweDc2MTJmZWI3LCAweDRlMzI3YjQ4LCAweDEyMGVkZmZhLAorCTB4NTA2MzZkZmUsIDB4ZjdjNmNiZmEsIDB4MWJhYTQ0NTMsIDB4ZTU3M2YwZjcsIDB4OTViYzYyODksIDB4YzYzODc3ZmEsCisJMHgxMGJmZDhiYSwgMHhhODNiMWZlNSwgMHhmN2MwZWIxYSwgMHg3N2U3OTAzNSwgMHhmMDY2ZTExZCwgMHg0N2Y2NWRmMywKKwkweDQ1NzhlZjkxLCAweGJiNzdiZjk3LCAweDdiYzRmM2VjLCAweGY4MDQ1NjIyLCAweDFkNzZlZjE1LCAweGQxMWU0MjQ4LAorCTB4ZWNhYWMzZjAsIDB4ZjBlYzA1ZWYsIDB4N2UyOTBlOTcsIDB4NDU4OWMzOWMsIDB4ODYzZGM0MjcsIDB4NmFjOTc4ZjQsCisJMHg3NWI3OTRhZiwgMHhjYmNlNzMzZiwgMHgyYWZjMmQxZSwgMHgwOGUyZDI1MSwgMHhkN2UzODZiYiwgMHgzNGRmYmExZCwKKwkweDJmZGMxZjg0LCAweGZiMmQ2NWVlLCAweGQyZDA1ZmE0LCAweDA1Zjg0YTczLCAweDdjNjE5Zjg2LCAweGRmNmFiNzQ3LAorCTB4MTgyN2UxMjksIDB4OTQxZjU2ZmQsIDB4MjgzZDY5NzQsIDB4NmQwYTFiY2IsIDB4YTAyNWJjNDYsIDB4YWNiZWUwMTQsCisJMHhkOTcyN2MwOCwgMHgzODM2NGJmZCwgMHgyNWU2ZjhjYywgMHhiZDAwMGExYiwgMHg1ZmE0M2M3YSwgMHgwYjViZTVmOCwKKwkweDMzZWUyNTdmLCAweDcxZjUxYmFkLCAweGU2OWE3NzE5LCAweDQ2MzY5OTRiLCAweGU1YzVjNzdlLCAweGVmZTgzZGUzLAorCTB4NWFkZmRjYjMsIDB4NTBmYmNhMGYsIDB4OGI2MTM1YjgsIDB4ZGFiYjE3NzgsIDB4NmNlYzAwZTMsIDB4N2NmMzg4ZjUsCisJMHgxMGFkOWI1NywgMHg0YTAzYzllZiwgMHg4ZWU3ZjA4MiwgMHhjNmI5ZWZlYSwgMHgzYzRkZmFhYywgMHhkNDU5MDRlMiwKKwkweDEzY2I2YmRmLCAweGE3ZjJiOGVmLCAweDE0MTkzY2YxLCAweDhjYmFlZjE0LCAweGZjMmU2N2VmLCAweDE4YTU0N2UzLAorCTB4ZTQ1Yzc2N2YsIDB4OTc4MDIyMDAsIDB4MDk2YzdiNGUsIDB4NTNiMzI1ZjIsIDB4ZjhhMGE1MjIsIDB4OTUxZjg3YTUsCisJMHgwMGU0NDY3OCwgMHg2MGRlNTBlMiwgMHhlOWNhOTJmNywgMHg2OTVjNDY3ZiwgMHhhZjg5NjJiZSwgMHg2NTY4YWRiZiwKKwkweGUwZWI0MTIwLCAweDZiOGM5Nzc5LCAweGZlN2M4YmY0LCAweDhlNTI2OThjLCAweDdiZTMxY2M2LCAweDVmNTFlZTI0LAorCTB4MzAzZGM0NzgsIDB4Zjg5YjU0NjMsIDB4MjI4YThiYWUsIDB4MTQ3NzY4YTUsIDB4ODIzZTU4N2QsIDB4ZjA4NDI2NWYsCisJMHhjOTNjOGMzZSwgMHg5ODNjY2YzMiwgMHhhOGVmMTIxZiwgMHgzMGRmMzJkYywgMHhmMDJlOWZkMCwgMHhiNDMxY2UzMCwKKwkweGRhMmRkNGZmLCAweDVkZDFjYWM3LCAweGEwZmRlNGQzLCAweDYzZTY0ZTI2LCAweDM5OWM1NDZmLCAweDliOTMwMGZmLAorCTB4ZmEwYjVkYTcsIDB4OGJkYmU0ZDUsIDB4ZGVmMWUzZmQsIDB4YmYwM2JlNGUsIDB4MGQ2ZGU3YTAsIDB4YmU4ZTc5N2YsCisJMHg5ZWZkMWNhZiwgMHhkMzI0YmFlNywgMHgwMjUzZmQwMywgMHhlNWRkZjEwMSwgMHgxYWM3NDU3ZCwgMHhmZDAzZmYzMSwKKwkweGQwZmU0MjZlLCAweGE3MzhjNzc4LCAweGFiZGU0MTNmLCAweGU3MTZhOTJlLCAweDUwNzNlMmFiLCAweDU2M2ZiNzFkLAorCTB4MWRlMzBiNjQsIDB4MTZlNDAzZmYsIDB4Yzc3MjY1NzksIDB4NzhiNmQ5ZjgsIDB4Mzk1YjFlZjEsIDB4MzgxN2NhZmEsCisJMHg5ZmVkYjI2NywgMHhmZWYwYTZmNiwgMHg1MTUyZmZiMywgMHgwN2ViODM2MSwgMHgyNmY2M2NjZSwgMHgzZGMxYmFjMywKKwkweDdkOGZiMWZiLCAweGY2MjM1YWM5LCAweGZhYTA3MjcxLCAweDdlMjRjNjk0LCAweDU2ZTNkYmMwLCAweGU2NDVmOWU1LAorCTB4ZmJiZDFmZjUsIDB4NWIzNGU0OGIsIDB4ZmExNzVkNzQsIDB4Nzg3MzNjY2YsIDB4YzQ1YmEwMmEsIDB4YjUxY2U3YTUsCisJMHhjYzU2MzhjYiwgMHhmYTY0MmU3YSwgMHg2ZTcwYmJjNCwgMHhjMTdlZTgyNywgMHg1ZWUxMGI2MywgMHhlZjY4ZTczOCwKKwkweDFjZGY1ODNiLCAweDdkYzY3N2JjLCAweDZmM2NlZGMxLCAweDk3YzhlNzNlLCAweDFhZjc4YTkzLCAweDY0ZGY5ZDMwLAorCTB4MWFjMGVkNDcsIDB4ZWY0YTNjZmQsIDB4MDU3OWJkZjQsIDB4ZWQ1N2M5Y2UsIDB4NzMwMzc4ODQsIDB4OTYzZmYwNTIsCisJMHgxZmMxNmY3ZiwgMHg2OTljZTNjMSwgMHgyYTM2ZGVmMiwgMHg0ZDM4MjZiZiwgMHgwNzI4NjNlOCwgMHgzZWQzMzhmYSwKKwkweGQwYjUzYmZjLCAweDYzOGY0NTM0LCAweGZjMWE3ZTQ5LCAweGYwNjNmODMyLCAweGRkMzNhMGMzLCAweDE0YTVlMjcwLAorCTB4ZjhiN2QwNDUsIDB4M2ZhZTkyODcsIDB4ZTJmZDc0MTAsIDB4NGI1NjI2ZjgsIDB4ZDcwZmU0YmEsIDB4N2ZmZWZhMGEsCisJMHhmYmM4ZWJhMywgMHgwZDg1ZGY5MywgMHhkZTFlZWZlZCwgMHg3ZjY1OWU1ZiwgMHhkYTVmZmQzZiwgMHhlZmY3ZDA5ZiwKKwkweGQ2MTNiZmJjLCAweDg2NzdhNWZkLCAweDRlNDEyN2UzLCAweDdmMDliMjFlLCAweDI4YmRmNjJhLCAweDk3YjA5MjE1LAorCTB4MTEwNGY2ZjUsIDB4ZTQxMmQ1MzcsIDB4Mjc2YzA2ZjcsIDB4MzQ5ZDgyNWYsIDB4ZWFiOGUzZWMsIDB4OGFmYzMxNDgsCisJMHg2MzhmNDQ5MywgMHg4ZjViMTE1ZCwgMHg1YTc4ZmYyOCwgMHhiMTkzOTBiZSwgMHg3YzRiMjI3NCwgMHg5NDg4ZTEzNywKKwkweDU0ZWQ2ZmMxLCAweDc2ZGQzYjAyLCAweDg3MzNjOGMwLCAweDdhNTY1ZjYxLCAweDQyZWRkZTQ0LCAweGYyNzQxNmM4LAorCTB4YTFhOWRkZjgsIDB4ZGU3OGNiOWQsIDB4NDQ4YjliZWUsIDB4ZDEwMmU1MWUsIDB4MWYzODIzOTQsIDB4N2YwODI0NTcsCisJMHg4NDk1M2JiNCwgMHg5ZGFlZWFkZCwgMHhlNzk2ZmMyOCwgMHhjMmU3YjZiZiwgMHg0ZGFmZWQ1ZiwgMHg2ZWRiZjkxMCwKKwkweGZjM2I2NDdmLCAweDNlMDllZWNmLCAweDdmNGRjODM1LCAweGY4NDRkMGExLCAweDZlMDVjMWFiLCAweDAyZjc0ZjMxLAorCTB4YjdiYjA3NjksIDB4ODNmN2M4ZTcsIDB4ZjIwOWZhMTQsIDB4NDhhZThmNDgsIDB4ZWVjMTc5MTAsIDB4YzQyYzgxZGQsCisJMHhkMjRjM2VjZiwgMHgyZTFmNDM0ZSwgMHhiODczY2JiMSwgMHgxOWNiOGYzYiwgMHhkNGQ0YWMzZSwgMHg2MmJjNjMzNiwKKwkweDZkNDhlZWI5LCAweDc5N2JiM2MyLCAweDM2MDJmODk0LCAweGIyN2U1Yzk5LCAweDZiZTQ0OTNkLCAweGUyMzE3ZDBkLAorCTB4YTc4MmUzZDUsIDB4YzY0ZTgyNzYsIDB4ZWJlZmI2NzcsIDB4NWRkMDY1ZjIsIDB4MGVlZmM4MDksIDB4NzIxYmZhMGQsCisJMHhiYmE3NWEzNiwgMHhiNzk0YWY3MiwgMHhhYmM3ZjdhMSwgMHgxZTNmYmM0OSwgMHg3N2MwNGJjYiwgMHhhYTcxZjU2YSwKKwkweDMyYmU3NDBmLCAweGViMTJmYjQ1LCAweDdjY2I1Y2VlLCAweDkyZmQ2M2IxLCAweDFkZjEyN2ZlLCAweDk1ZmUzMGUxLAorCTB4ZDM4ZjQyYjMsIDB4ZDQ1ZmRmZTgsIDB4ZjUyM2I0OTMsIDB4ZWQxNmY3YzYsIDB4MjgyZGVmZDYsIDB4NzkxNTM2MzIsCisJMHhkYzQ3MjEzYiwgMHg5YWJlZjdmZiwgMHg4ZGQ4MGFiOCwgMHhjMTI1ZGY4MiwgMHg0ZmZmMWM2ZSwgMHg4MGVmYjBmYiwKKwkweGJjZjIxNWJjLCAweDI5NmJjNGYwLCAweGZkZmViZGEyLCAweDFmNWZlMTg5LCAweDgzOTQ3ZmY3LCAweGRkZTRlMjczLAorCTB4ZmMwNThjYWYsIDB4YWQyNmE5MmEsIDB4NzBmNWQ3ODIsIDB4NzBmM2U3ZWQsIDB4MTU5ZmJkNzQsIDB4YmNjZGRmMTEsCisJMHg4ZTY1ZmI1ZiwgMHhmYmRmYjc4OCwgMHhlZmY3OTA4YSwgMHgwMmZmY2ViYSwgMHhiMzhiN2E1ZiwgMHgwMDAwNDBkMAorfTsKKworc3RhdGljIGNvbnN0IHUzMiB0c2VtX2ludF90YWJsZV9kYXRhX2UxaFtdID0geworCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MzNiM2FmOGEsIDB4MjE3MTY4MzAsCisJMHg5ZjAxNDNmOCwgMHgzODYwNjY2NCwgMHg4MTY3YzQwZCwgMHg4MTg1OTc5OCwgMHg4MTg5OTdjMSwgMHg3ODg5OGZjMSwKKwkweDEwYzUzM2ZkLCAweDA2MTE0MTZjLCAweDVlMjAzYjA2LCAweGYwYzBjNDJlLCAweGNlMjEwNDRlLCAweDEwYzBjZTI4LAorCTB4MjBjMGNhMmQsIDB4YWZlMTBhMmIsIDB4NjI2NmQyMDQsIDB4NDBmZjcxZDQsIDB4NGMxOTQ2NjMsIDB4MDg5MjA3YjEsCisJMHg3OTE2MTMzNiwgMHgyNjhjY2M2NCwgMHhjYTg1MjBlZiwgMHg3ZmEwMjE2NywgMHgyNTE3ZjFhMCwgMHgyMmFjYmU1NCwKKwkweDhhODQ2ZTg0LCAweDk3OTM0NTdmLCAweDQzMmJjYTgzLCAweDA5NGRmNWZkLCAweDUwMmFiOWJiLCAweDFhYTAwMDc5LAorCTB4MDM2MDVmODIsIDB4MDAwMDAzNjAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgdHNlbV9wcmFtX2RhdGFfZTFoW10gPSB7CisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhkNTU0NzgwZCwgMHg3MzNlZThiNSwgMHg0OTk5OWNjZSwKKwkweDIxMjY0Y2NlLCAweDYxMDIxMzA5LCAweDQwYTAyMDkyLCAweDIwMGM3ZTE4LCAweGY3ZjA5ZDc4LCAweDgwM2FhNTY4LAorCTB4MDc1MTVhNTYsIDB4NDNmMjEwODEsIDB4YmQxZjUyMDIsIDB4MjQyNjZiZWQsIDB4MWJkNTY4YzEsIDB4YWI0NWE4ZmEsCisJMHg2OGE5MDA3NiwgMHg2MjM0OGVkMSwgMHhhODA3NDBhOCwgMHgwZGI2YTg1YywgMHhjN2Y0MmFkNiwgMHhjNDA1YWQxYiwKKwkweDk2YWE0NDkwLCAweDZiYjk0YWJlLCAweGU2NGZiZGFkLCAweDQwMTk5MzljLCAweDZmNWZiN2JkLCAweDZmZDY5N2JmLAorCTB4NjdkOWNmYjMsIDB4ZGZkN2I1ZWYsIDB4YjVlZDZiNWUsIDB4ODk3NjI4ZjcsIDB4ZWM2NTBlZTUsIDB4Yzc1ZGZlMDIsCisJMHgzMTk5MDJkOCwgMHhmNGEyNzU3NiwgMHgwZDBlYmJjMSwgMHgwN2Y4YWRmZSwgMHhjY2RkMjgzMiwgMHgyODYyYjEyZiwKKwkweDJmNmUyY2ZkLCAweGZjNzA3MjgxLCAweGQ2NWU5NjE4LCAweGYzN2UxOGM5LCAweDk1OTkwNWYxLCAweDMyNzFlNjMyLAorCTB4YjA5NDE3ZjEsIDB4ZGFmMmY1ZWUsIDB4NmQ4N2IyYjcsIDB4ZDViMjg0MjgsIDB4NmNjNjUzZjcsIDB4NjdhYWVkOGMsCisJMHg0NGY2NjE4MSwgMHhmZjU3ODczYiwgMHg5MWMxN2UyZSwgMHhmYTQ4NzBjYiwgMHg4Nzc1NjBjYiwgMHhiYjg3YzE4NywKKwkweGI2ZTJlN2E0LCAweDhlZjU4Yzg5LCAweDdlMmQ4MTYxLCAweDVkZGUwNzE4LCAweGNmZmQwNTliLCAweDMxNmRlYzYxLAorCTB4NzA0NjA1ZTYsIDB4OGE1MGI4NWMsIDB4NGI4MjMxZGYsIDB4ZTczYWY4ZmIsIDB4MGVlNzY4NDIsIDB4MDBjNTVmYWQsCisJMHg3MzM0Y2Y1ZSwgMHhiOWEyNmQ3YiwgMHhmNTBkMThlZSwgMHhhNWZhODk5MSwgMHg2Y2E2MDNkYSwgMHg4ODFkZTAwYywKKwkweGVkNWMwM2YwLCAweGQ3OWE0ZWY1LCAweDgxYmRlYjhmLCAweGI2MzA1NzYxLCAweGY1NDdkZWE3LCAweDJhN2VmNTdkLAorCTB4ZTkyM2Y1ZTMsIDB4MDBmYTgxZjksIDB4YjA1ODczZDUsIDB4ZWFjN2YwOTAsIDB4NjZjYTJjMzYsIDB4ODUzNmYxYWMsCisJMHg3NDEyYzdkZCwgMHg4YzNkNjZmOSwgMHhmZWEyNDU3NywgMHgyMjJjZDFhNywgMHhhNGZlZTRjMywgMHgwMDQyM2JiMCwKKwkweDEzMmJjMzZiLCAweGJjYTEzYTMyLCAweDdmNDFkYjFmLCAweDI4MDE4ZDBmLCAweDNmZGEyNmM2LCAweGRjZTVmNmJjLAorCTB4Y2IxODEzOTksIDB4ZGM5MWVhZmIsIDB4YmRlMDAzOTksIDB4NDZjNjE2YzQsIDB4ZDJhZDc4ZTMsIDB4OWRmMDMxYmMsCisJMHhkYmQxZmJjYSwgMHhlYjYzMjVlYiwgMHhlZDlhMGY4OCwgMHg2NWFmZGZjOSwgMHhmMmNmMDIxMiwgMHg3ZTYwYWMwZSwKKwkweDBmNmJmNDM3LCAweDA3MDEzYmU3LCAweDA0YzY0NGI3LCAweGI4YzMwNjViLCAweDE4NmJlYzQ4LCAweDExMWIzMmZiLAorCTB4MzcwZTAwODksIDB4OGM3OTk3NjEsIDB4ZjM0MmQwZWQsIDB4NWYxY2JiZjAsIDB4OTEyMzBhNDgsIDB4Mjk5YzQwYzMsCisJMHgyY2FiNjU4YywgMHg0NzBhNGIxYywgMHgyYjcxYzEwMywgMHg0YjA3MzNmZSwgMHgwZjRiZDUzZiwgMHg3ZWY1NzFmMiwKKwkweGU3MTFiMmY0LCAweGNlZTRlNTA3LCAweGRlMmM1YjMwLCAweDc3ZmJlMTk3LCAweGU4NjJkMjQyLCAweGU3YzVkOWJmLAorCTB4NzM2MzAyZjMsIDB4MTI0OWJjNzAsIDB4MTJiOTYxMGIsIDB4MmRmYTEyOTksIDB4MzEyNzMyYzcsIDB4ZTVjNjBhZWUsCisJMHg2MTczYmFlMSwgMHg1NDdlODQxNiwgMHhjNzg1OTg1ZiwgMHhmYzgzN2VmMCwgMHg2YzhjYTZmYiwgMHgxYjdmOWI5YSwKKwkweGRhOTQ0M2YxLCAweDQ3NGRkYjFiLCAweDg4YjZmY2I4LCAweGVkYzcwMzNkLCAweDIzZWQ4ODNkLCAweGY2YzMxNjNlLAorCTB4MzliNjY4MmYsIDB4M2I0NGI0NWIsIDB4NmU0OTllMWQsIDB4OTY4YjY4NWIsIDB4MTZjODJmZTgsIDB4ZTVkM2ZhOWIsCisJMHhiZTcyNzY0ZCwgMHg4MWRlZjlkMywgMHhkYTljODA5ZiwgMHhjMjI4ZmJlMSwgMHgzNzA1OTgzYiwgMHhiZGViYzEyNywKKwkweDA3YTViZTYyLCAweDNjMDY0MTVkLCAweGEzNTQyZWFkLCAweGFmYTkyNDJlLCAweDM5ZWIwY2I1LCAweDA2NDA1OTRiLAorCTB4ZTVlYjRlMWEsIDB4MDcwM2I4ZjMsIDB4M2JjYzQ5YzksIDB4MzdjMDAzZTcsIDB4ZmVjMDFkOTQsIDB4MDhlM2U2MGMsCisJMHhkYTAzYThiMCwgMHg4MjZiNzlhYiwgMHgxZjRmNTA2NSwgMHgxYjAyZDVjYywgMHgzNjcyNjMxYywgMHhjZGM0NzNjOSwKKwkweDk3YTFjM2ZhLCAweGZjMTNjN2RhLCAweDAwZGYxNzQ4LCAweDA2MDRlZjVkLCAweDQxZGJhODMyLCAweDc4MDIwY2ExLAorCTB4YTgzYjhmMWEsIDB4ZTVkYzhmZmYsIDB4ZmQzM2IxNDMsIDB4ZjFmNTUzYmIsIDB4M2U0MTRiNzEsIDB4YTYxZmQ3NGUsCisJMHg4M2JlYWJiMiwgMHg2M2ZhZWVjYSwgMHgwZjFhYTY1NCwgMHgyNmM2ZDEyNCwgMHg2MGRmOGMwMywgMHg1ZGNhMjc0MSwKKwkweDA3NWQxMmExLCAweGZmZWUzN2ZkLCAweDIxOGZmMzJhLCAweDg3ODgyM2Y4LCAweDJkMTZjZDc0LCAweDRlNjY1ZTQyLAorCTB4ZjgxNWNkNTksIDB4ZTEyYjdjNDUsIDB4OGU2ZWY5YmMsIDB4YmRiM2M0NWYsIDB4ODY2ZDA5NTAsIDB4MmFkOWNmMzIsCisJMHg3ODZkMWFhZCwgMHhmYzQwNzQwZSwgMHhiODdjMWU5NywgMHgyZWE0ZjEwMSwgMHg4NTVjZTM2NSwgMHg0ZjljMmYyOCwKKwkweDk3Yzg5ZjExLCAweDVmMzgxYWJiLCAweDI4NGVmZDYyLCAweDAyOTUzOWFmLCAweGVmMWM1ZGVmLCAweDUzYTlkYWRhLAorCTB4YzA2MDk5ZGYsIDB4NWM4MmMyOWYsIDB4MjhiZjM5YWUsIDB4NzhjNzdmZjAsIDB4N2IzNDNhODAsIDB4YmRlODI2NDUsCisJMHhiYzA3N2ZiYywgMHg5ZTdkMjY4ZSwgMHg5MDZiOTVjMSwgMHg5ZTJhZGVhMSwgMHgzMGRkZWJhYywgMHhhYmQyN2UyMywKKwkweDUwNzllZGMwLCAweDk3Y2ZhYzFmLCAweGY4ODk3ZmY5LCAweGZhMDRkY2Q4LCAweGQ1N2VlYjA5LCAweDIxZmJjMmFmLAorCTB4NzBlMGY1YTIsIDB4Y2E1NDVjYzUsIDB4MWVlN2NiNWIsIDB4NjJiYzYwOTIsIDB4YThmZGUzZjksIDB4MjlkNDg3ZGUsCisJMHhmNDFhNzc2ZiwgMHg2MDQyYzE2NSwgMHg4NmM2MjJiYywgMHgyZjNmMzVhZSwgMHgzMGViOTg4YywgMHhmMzA0MmQ4MCwKKwkweDNmMzE2ZTJmLCAweGQ5ZGNjZTNmLCAweDJlMTlkMjI3LCAweDgwOTA2ZTQ4LCAweGJkNWFmMzdlLCAweDg0OWE0NWVjLAorCTB4ZjU4ZGRlOTUsIDB4MGRkOWFlMmMsIDB4ZjQyN2ExNzUsIDB4ZGM5OWU0YmEsIDB4YWRmOTgxMTksIDB4OTAwNTkyYmUsCisJMHg0NDkyNjljNiwgMHhlZmM1NmM3OCwgMHgxNDFlOGY4MCwgMHg3ZTk2ZmRlNSwgMHhhYzk5NTJmNCwgMHgwMmVmNTBkOSwKKwkweGY0Yzk4M2RlLCAweGQ2NTRiZTU4LCAweDU2YmM3NDhiLCAweGZkOGJkZTlhLCAweGU2MzEyYmE2LCAweDU0YmY5MGQ1LAorCTB4ZmI2YjEzZTIsIDB4ZjFhMTQ5MzQsIDB4YTA4ZTk0ZDMsIDB4MTRkZWViOGMsIDB4YjZhZGVlYmUsIDB4OWU1MWM2ZjcsCisJMHgwM2Y5OTc1NiwgMHgwMjhmNWMxMSwgMHg0Y2RmOTI1MSwgMHg1ZTUwYjM1OCwgMHgzNjNjMDEzZiwgMHg5MzYzYzM4OSwKKwkweGY1MTg5YzY4LCAweGRiMmJlYjAzLCAweGJjMzhlMTIyLCAweGZhNTdkNWRmLCAweDBkNGE0NDU5LCAweDJkMTkxZmU3LAorCTB4MTY5OGVjNjIsIDB4M2NmZWM0Y2UsIDB4NzA5Y2E0OTIsIDB4NThkM2U4MjYsIDB4YjM2ZmY0NTEsIDB4YzM3MmVhYTEsCisJMHg3NTEzYWJmYiwgMHg3YzczOWRkZiwgMHg0Mzc5YzdjOCwgMHg3NzJiZjRjZCwgMHg3ZjIwMTVkNiwgMHhiMzYyODY1NCwKKwkweDdhNGU3ZjkxLCAweDBlZGViYTdlLCAweGY2MDJkZWYzLCAweDlmZjgwMjgyLCAweDYxZTUwY2U0LCAweGVhOGIzNTNmLAorCTB4ZjMwYWEzODYsIDB4ZTMwM2EyZTMsIDB4MWViN2IyNmUsIDB4Mzk4MjRiMDcsIDB4NWZmNDg4NTksIDB4MDE3NWNjY2IsCisJMHg2N2RiZGUwNSwgMHhmMDNiNzEyYSwgMHgwMWYyN2RhNSwgMHhhYzVjNTdiMiwgMHhjOWM3ZWI4ZSwgMHgwN2I0MzI5MSwKKwkweGVmODMyMzljLCAweDQ1NWVmMGNhLCAweGRlZTc4MDc5LCAweDc1YzMyYjYwLCAweGJjY2MzOWM0LCAweDliM2M4M2NlLAorCTB4YjliNjRhZWEsIDB4NWNjZjRhOWUsIDB4ZjhjYTVjYWEsIDB4ODQwNjllZmEsIDB4YjI2N2ZjMjIsIDB4OTk1ZmUyMjgsCisJMHhmODQxMjgxYywgMHhmM2U2YmMxZSwgMHhhYTY3ODQ3ZSwgMHg4NGE1ZDdjNCwgMHhkZTcyZTJmZSwgMHhiZmI1ZWY0NywKKwkweDAwMzYxZGM4LCAweGY5NzJiNzlmLCAweGVlNGFmYjVmLCAweDhmODgwOWIwLCAweDczOTc5YTU2LCAweDBiOTI2YWM2LAorCTB4NzMyM2YxMTUsIDB4MTNiOTBmZjksIDB4Zjg3OGViZGYsIDB4OTYxYmNmN2IsIDB4ZjQ5NzlhMDUsIDB4NTAyN2YzOTMsCisJMHg2ZjNlMzYzZiwgMHg5ZjllYTNmNywgMHg3ZTNkYmNmMSwgMHgzNjZiZDQxZCwgMHg2ZGY3YTQ0YiwgMHg5Zjg0NWNmYiwKKwkweDNkNzk0N2VlLCAweGQ4ODM1NmVlLCAweDUwMTNjY2ZlLCAweDNhZDU3YzA3LCAweDhhOWMxZTNhLCAweDY2NWU3YmY4LAorCTB4MGIzZDA4NWIsIDB4NGVjZmE4NmQsIDB4M2I2OGY2ZTgsIDB4NzhiYjk3YWYsIDB4ZmVmMzY2YjUsIDB4OGFmYmYxZGIsCisJMHg3ZDQzMDc3NiwgMHhmOTdiYjM1YywgMHhiZWExNTMwZCwgMHg2MTlkYjBmYywgMHgwZDZkOWE5MywgMHhhZmE4MjBlYSwKKwkweGFjMzE0YTg4LCAweGY0ZTc0Y2Y3LCAweGEzOTJlYzg5LCAweDhmN2RhMGRiLCAweDY2ZjcyM2E3LCAweDI3MWRkNzBkLAorCTB4YjgwMDhmZjMsIDB4MzdiOTFkZGQsIDB4NDY1NzFmMDEsIDB4ZGY4ZDliOWYsIDB4MDI5MGVlNTUsIDB4Yzc5ODMxNDAsCisJMHhmMDc5NDNiNiwgMHg1MjUzY2Q1ZCwgMHg1YzdjMDFjMCwgMHhmOTlkM2RiNSwgMHg4OWU1ZjYwZCwgMHgxZDdlMzkzNiwKKwkweDkzY2MxOWNhLCAweDU5Y2JiZjQxLCAweDRmYTQ2Y2ViLCAweGFhMGRiNmNkLCAweGQzOWY0MGRmLCAweGRmOTkyM2Y1LAorCTB4M2NkN2E4OTEsIDB4NzdjMGUzMDUsIDB4MDI5NTlmMmIsIDB4MzY5NWM1MzgsIDB4ZWY3NTNmNmUsIDB4YWFkYzJkNzYsCisJMHhkNDFhZmNlMSwgMHhkNzljNmVlMSwgMHg1YmI2MmEzZCwgMHhjYmJjNWQxZSwgMHgzNmY4NDdlNSwgMHg3ZGUxYjNhYiwKKwkweGQ1OWJhM2U1LCAweGE4NWU4MzcyLCAweDY0MGEzZWRhLCAweGE2ZDcwMGM5LCAweDI0ZTE4MWUyLCAweDBmMDEyMzdhLAorCTB4ODk1M2MxMzMsIDB4ZWRkNjg2N2EsIDB4YTU3NjhhYTgsIDB4MmRhYTdjZmUsIDB4NmFiMWY4OTMsIDB4NWZlYTZjYmIsCisJMHhkN2U0N2JhNywgMHhjODg3ZWM4YywgMHg1NWUxMzc1ZSwgMHgyZjZhZGJhNywgMHhhMDhlZWJlMywgMHhhMGFmNTlkYiwKKwkweDZhNWJkMmEzLCAweDFmMmY1ZmVjLCAweDUwMzgzYTQ0LCAweGZjYTk3YjVmLCAweGNhOGZiZDU2LCAweGEyN2VmNThkLAorCTB4YmY4ODQzY2YsIDB4YzY0ZWRjMTEsIDB4OTdkNzYwZTcsIDB4ODI3YjJmMjEsIDB4YzNlYzBiY2MsIDB4Y2IwNmU2YjIsCisJMHgwYWNmNTBlYywgMHhhMmVlN2FmMSwgMHhjOGJmZTRiMCwgMHhlYzEyZjVmYywgMHgwNGUwYzVkZSwgMHg3YWZkZmFjMSwKKwkweGY2M2IwMTUwLCAweDhhYmMzNTIxLCAweGE2ZmM2MDA1LCAweDA0Y2UwOGZmLCAweDUyOGZmNzdiLCAweDRhZmE4NjM4LAorCTB4YjgyYjg1YjYsIDB4Mjg3Y2M1ZGMsIDB4ZmFjNWViNzcsIDB4MTNmMjVkYjMsIDB4YTllN2Q2MWUsIDB4YmExZjZmYTQsCisJMHgyY2FiNzRhZCwgMHg2MzY2Yjk4OSwgMHhmN2ZiZmNiZCwgMHhiYjNmNTIxNSwgMHhmYTE1MWZhOSwgMHgzZjc0YmUyOSwKKwkweDM2NGZiN2I5LCAweDdiN2I5M2Y1LCAweDAxY2ZkZTg1LCAweGYyZWQyN2VhLCAweGY2ZTg3OWZhLCAweGRjZjBjYzZiLAorCTB4ZjNmN2E5NWUsIDB4YjllM2Y1MzIsIDB4ZGVlNTc5YmMsIDB4Y2YwY2NkMzEsIDB4Y2ZkNGQ1MWQsIDB4ZDIwMTQ1YzAsCisJMHgzZmNlYjJiNywgMHhiNDNiZDYwYywgMHg4ZTY0NzcxNywgMHg1MzQxZmEzNywgMHhjMGRmZDM2ZCwgMHg1MjBkYzVmNSwKKwkweDhjYTNlNDY1LCAweDc5MjY2OWM5LCAweDk5NjYwY2NhLCAweDBjZTYwM2VhLCAweDA5Y2ZiNTMyLCAweDBmZGU5OTE1LAorCTB4ODU5NTc4NWMsIDB4ODllZjM1MmYsIDB4NDA4ZWEyNTEsIDB4ZjY4YjQzYTEsIDB4ZjQ5NTIwZjEsIDB4MjcyMGQ5NGUsCisJMHgyMGY3N2ZjMSwgMHhkZGNlZjQ4ZCwgMHhlMDQ3ODRkNywgMHhhMmIwOGUzYSwgMHgxYWI3NzM3ZiwgMHhlYTRkZWIxZSwKKwkweGNjNDg3NGM3LCAweDg2ZGZhNTg3LCAweDNkZmRmNWE1LCAweDllOWMxZWMyLCAweGI3ZjBmMWZmLCAweDViNWFmYmUwLAorCTB4YTg0Y2YwZWYsIDB4ZmIyYjZiYmYsIDB4YmNmOWUyMzMsIDB4MzI2OWZmZDAsIDB4Njk3NmMzYWIsIDB4ZWZmYTQ2MGUsCisJMHhhZGQyYzI5ZSwgMHg1YjVlMDMxMSwgMHg0OGJmMDA4NiwgMHhlYzViN2U4OSwgMHhhM2YyMWY2MSwgMHg5MDFhOTM2NCwKKwkweDUxMGZkNzNmLCAweGZhMDQxYjE5LCAweDFmZGIxZDc0LCAweDllZTczNTgxLCAweGM0M2VlNTIxLCAweDJmZmQwM2JmLAorCTB4OGMyYWY4ZTMsIDB4NzdjNjlhM2YsIDB4Yjc3YzYwZDgsIDB4OGVmOGY5MmQsIDB4ZjFhNmM5YTIsIDB4YTYxNTA1OWQsCisJMHg4YzJhOWRmMSwgMHg2OTkxZjIwZiwgMHg5ZGYxODk3MywgMHhhZDY2MTdlNCwgMHg4ZWY4ZDI3MywgMHhmZjFhMGE4MiwKKwkweDk4NTU5NTFlLCAweDFiZWI0ZmM2LCAweGM2MGRhMDdmLCAweGZlZTM2MjFkLCAweDE3ZjliZjRhLCAweDdmOWU2MzVkLAorCTB4ZmU3OWE1NDEsIDB4YTE3ZjlmMmEsIDB4OWY4YzUzMmQsIDB4NWEyZmYzNDYsIDB4MmZmM2U1ZTcsIDB4NzdmM2U0YTgsCisJMHhjNmZiN2VmMCwgMHg3ZmUxZjRmNywgMHgyNjNmOGUwNCwgMHhlMjhlZjhjNSwgMHgwZmY5ZTY2OSwgMHhkZmNmMzZhZCwKKwkweDY3MWZjN2MxLCAweDZiZTMxM2NiLCAweDc1ZjhmZTM0LCAweGExZmYzZTNlLCAweGVhYmUzNGQ1LCAweDhmOTAwNzA4LAorCTB4YmFiNGZjZDQsIDB4ODM0M2RhMjgsIDB4MjQwZGZiNDEsIDB4NzJhNDE4MWQsIDB4YmI5M2Y3MjQsIDB4ZTM4MjIyYTQsCisJMHg3N2NlMzRlZSwgMHhiZjAxYTUxZiwgMHhjYTdkMDk2OSwgMHg5ZTI5ZWJhMiwgMHg3NGYwNTJiMiwgMHgzNTMyOGVkNSwKKwkweDA3YmM1YTNjLCAweDAwOTk3ZjdiLCAweDRjYmI2OTc1LCAweDNhMzZjZDdjLCAweGJjMDA1N2EyLCAweGY5MzJlZGRkLAorCTB4NWUzNzRiM2IsIDB4M2Q2OTk1MWIsIDB4MTgwOGZlZTUsIDB4ZmU3YzcxOTAsIDB4ZDk4ZjZmYzcsIDB4YjU5NzljNjIsCisJMHgzZjZhZDY1YywgMHhhYjkwNjlkMSwgMHg5ZDNlZmQzZSwgMHhmODAzYWM4ZCwgMHg1MzVlNDgzNiwgMHg2OWU4MDRmZCwKKwkweDA2ZGVhNjc0LCAweDQ5ZTU4YzdkLCAweGYzYzAzMzhjLCAweGIzOGY0MDc3LCAweDdmZmRmZDExLCAweGQxYjVlZWU4LAorCTB4MGEyZmFmMzAsIDB4MWMyODRmZjgsIDB4NDhkNjI3ZGYsIDB4NDdmZmM0NTEsIDB4YThhOTU2MWIsIDB4YTZiNTk2Y2YsCisJMHgwN2QzZDFhMywgMHg1M2EwYWQ0NywgMHhkOTA3NmVlZiwgMHgzZjRmODA1NSwgMHgxMjE2ZTdlMiwgMHhiZjdlYzY0NSwKKwkweDI0ODcwYmVmLCAweDZmOTY3YmIwLCAweDZlZmE2MDFhLCAweGZiMzY4YjExLCAweGZiOTJmZGEwLCAweGMyZjEwZjE3LAorCTB4ZTg1ZDZmZmMsIDB4MWY5MzJmMTgsIDB4OTFiN2NjMTgsIDB4MWI3Y2IzMWMsIDB4ZGIwYjRlZjgsIDB4YTFmM2Q4MzYsCisJMHhiYjQyY2I3MiwgMHg1MmY5NGZjOSwgMHhiNWJmNWNkOCwgMHhiNmVmNWNjMiwgMHhjZjE4ZWQ0NywgMHhiMTIxNWVlYSwKKwkweDZkZWZkMGNkLCAweGZmOGI3Njc1LCAweDYxNTljN2MzLCAweDA4ZjExMmNiLCAweDgxMTdkZTNlLCAweGU4ZjA3OTg2LAorCTB4ZTNjNzJjMzYsIDB4ZjVkMTJmNjMsIDB4NTZmZjJmNzYsIDB4NmJmNmE3ODcsIDB4OTA1NDcwNzYsIDB4ZTgzOTlkN2UsCisJMHgwZTQ4YjM0NywgMHgyZjYxNzdmOSwgMHhkZTE1Yjc5ZiwgMHg2MGNlZWRkYiwgMHhmZGI5ZTAwOCwgMHhkM2UxMzJhYiwKKwkweGJlZTc3ZjBhLCAweGVjMGRhMGY0LCAweDdmNGRjZWQxLCAweDZlN2RhM2IyLCAweGZlMTU4ZjlkLCAweGU3NWFkNjNiLAorCTB4N2Q3MTU1ZTMsIDB4M2ViMTFjNTgsIDB4NWFlYzk4OGYsIDB4MmY2ZGFjYmQsIDB4ODE4ZWZhZGIsIDB4OWY2MjZhOWYsCisJMHhlMThlZmFkYiwgMHhmM2VkYWFiYiwgMHhkMTE1ZjU0YywgMHgyZmRhOTkyZiwgMHhmNGQ4YjRkZiwgMHgwYWViNTk3ZSwKKwkweDJkMjVmYmQzLCAweGM1ZjU0Y2FiLCAweGRhOWFhZjkxLCAweGMxYjZiMWRmLCAweGJhYjZmZWY0LCAweDZmZWY0ZDdiLAorCTB4YWE2MGQ4YWQsIDB4YjBmYzI5N2YsIDB4MGIyZGZkYTksIDB4NGJkZTliMzcsIDB4ZWQwYzU2ZmIsIDB4MWUxYWJkMjQsCisJMHhlYjc2ODc5YSwgMHg1OWY5MDc3MSwgMHhmMmViYmYzYSwgMHgxNmVjMGE3MCwgMHhkZDgzNGYyYywgMHhjYTAzNjU4MiwKKwkweDZkYmZjODI5LCAweGI3NmIyZjM3LCAweDM1ZWExZTJjLCAweGVkMjc2MWY4LCAweDRmMjgwNTc1LCAweGUyYjdiZTU2LAorCTB4ZjBkZmNhZDMsIDB4MWQ2YzlmOTcsIDB4OGM2YWNiZDIsIDB4M2RiZjQxNDMsIDB4MjQzOTNmMTYsIDB4MWYxZWEwZjQsCisJMHhkY2I5NTZhYywgMHg5YmNjZWY1NiwgMHhiNTdmZmU4ZSwgMHg5NzVlMWYxYSwgMHg5M2VjNGZjNCwgMHhmMzQ0OThlNywKKwkweGU3YTU2ODYwLCAweDViODBkZDIwLCAweGRhYWI3ODBkLCAweGIzODI2YzVlLCAweGUzNGNiZjZiLCAweDA1ZDk0NGFmLAorCTB4MGE1ZjM3ZmQsIDB4ODhmNWM3MWQsIDB4MmMxNjBmYzUsIDB4MDRmMDgzMTgsIDB4ZjZmNTQzN2YsIDB4YmI3ZjVhMWMsCisJMHg3ZDZjZTdlYSwgMHgwYmY4OGVjNywgMHg3ZWFhNzk1MSwgMHhlYTI3OTUyMSwgMHg1M2JlNTRjMywgMHhkYmU1NDE1ZiwKKwkweDc2NTQ3NWY1LCAweGYyYTVhZmQ2LCAweDk1MDhmYWNkLCAweGExNmZhYmJmLCAweGFkZjUzN2YyLCAweGRmYWIxZTU0LAorCTB4ZjVlYmU1NDQsIDB4ZWJiYjJhNTEsIDB4N2NlYTU0ODMsIDB4NDMyN2E3ZGIsIDB4ZmUxNTZlYzIsIDB4YjcyMjQ4MDUsCisJMHhlNDVjYzU1YiwgMHg5NmI4YmVkYywgMHhhY2YxZTUwZiwgMHhiNDcwZDFmNiwgMHgwMzFlY2ZjYiwgMHhjNmE2MTcyMiwKKwkweDUyMWY5NTk3LCAweGM5MDU5NWUyLCAweDAyOGYyOGFlLCAweDdmZjQwNzlkLCAweDc0ZTM0YWVmLCAweDFjZDhkOTcyLAorCTB4ZGVlMzdhMDYsIDB4YzAxZmJlMmIsIDB4MTVkNDEzMzgsIDB4NDdkZjg1OTYsIDB4NDlkY2YzMDMsIDB4MTA3ZjA1ZmEsCisJMHgzYTI5NzVlOSwgMHhjOTZmNjBiMSwgMHg4OWM3YTA3YywgMHg4YTVhZmU0NywgMHg0NTZjODZmZCwgMHgyODM4NWVkYywKKwkweGUyYzk3YWQzLCAweGFmNDgwMzViLCAweGU5Mzc4YTRmLCAweDQwMmZiZjI3LCAweGEzOTMzOWI5LCAweDAwYTNhZmUzLAorCTB4YjJkZjA0ZTMsIDB4YjM5ZmE5NzksIDB4MjBhNjBlNmQsIDB4NDdhNGY3MWUsIDB4ZjY3ZDI0MzEsIDB4YWUwZjU2ZjAsCisJMHg3MjdkYWI3NywgMHhiMzFmMThkNCwgMHhjMmIxMzU5NiwgMHg0Zjk4NjZhOCwgMHg3ZWI5YmI2ZCwgMHhjMzlhNTViNiwKKwkweDhjZmU2OWUzLCAweDVmMjBjNjliLCAweDUwZWZhMzc5LCAweGE1NDdkMTVjLCAweDlmNmFjZmRlLCAweGZlZThlMzRhLAorCTB4NDk5MWRiMzgsIDB4MjE3ZTBhN2MsIDB4ODZhZmZiYjUsIDB4MDkzZjU1MjMsIDB4MWZkOGRhMzgsIDB4MmUyODc3MDAsCisJMHhiOTNmOGExNywgMHgwZjk0Y2U1ZiwgMHhiMWJiOGM1NCwgMHg3MDhmZjYzZCwgMHg3ZmMwNzczZCwgMHg2NTkxZDAxNywKKwkweDdlZjVkNTBhLCAweGM0NzI2MzZiLCAweGVmOWYxNjMxLCAweGRmMDc4ZDMwLCAweGZiOWY3NWY5LCAweGY4YzVkMTQyLAorCTB4ZjQyNzYxNTUsIDB4OWI2YTgyNzksIDB4MGU0NDNlOGYsIDB4NmEyYjk1ZjIsIDB4YTY5OWZiZDYsIDB4NWU3YjZkN2EsCisJMHhlMDBlYjRkNCwgMHg1OWVlNDAzZiwgMHgzYWUwYTQ4NSwgMHhhOGI4MmQ1OCwgMHgyNDVhZDE0NywgMHhlYzhjNmY4MCwKKwkweGYxMjZmY2U3LCAweDRlY2UzNTc2LCAweGJlNDdlYzM1LCAweDU0ZTJmYzY5LCAweGE1NmNiNjNmLCAweDNiZTE1YWY5LAorCTB4YWJkODdmNWQsIDB4NWM3ZTI0NWMsIDB4M2JiZDlmMjUsIDB4ZmZjOGJlZDksIDB4NDhiZWY5OTYsIDB4ZDNkYjhkYjUsCisJMHhhMGYxMTljYywgMHgxMTdjY2FiZiwgMHhlMThiYzYwZiwgMHgwZmMzZWI0ZiwgMHg4ZTMwNGRmOSwgMHhiM2Y3YWVhMSwKKwkweDRkZWY2YTIyLCAweGQ5NzY0ZWI2LCAweDFkNmM5ZGI4LCAweDdiOGM0NWI3LCAweGRjYWRmYzI5LCAweGNlMzY3NDcxLAorCTB4OTVjNzhhZGIsIDB4YjRhYmVmZWQsIDB4ZmZjMGEzMWYsIDB4ZDQ3ODEzNGEsIDB4MGU0NjNiZjEsIDB4ZGZjMGM4YjUsCisJMHgyMmRmZGI5NSwgMHgzZDk0ZjI3YiwgMHgxNzZiZmMzMiwgMHhlMWZkNWJkMSwgMHhiNzE0N2NkNywgMHg2MTFkZTdkNSwKKwkweDlkY2UzODFkLCAweGZmNjdmMTdkLCAweDc1ODViZjJkLCAweGVkOTdkZGYxLCAweGY2MmNiZTNjLCAweDcwMzg3NDM3LAorCTB4ZjUwNmQwZDMsIDB4Njc3NmEyMjUsIDB4OWJjNTE1NWIsIDB4M2Q3NWRkZGYsIDB4NTk0YjZmZDksIDB4NjQ0ZTgzYzgsCisJMHg0NTJkNmIwNSwgMHhiMzBjZjAzYiwgMHg5ZDNjNDFjZCwgMHgyNjdhYWY2MSwgMHg0M2I0ZTgxOCwgMHg5NzRlNDk1NiwKKwkweDEwZWQ5OGI0LCAweGY1NGQ1ZmIwLCAweGY1Y2M5YmU1LCAweDE3M2YzNjcyLCAweDQ2Zjk0Y2Y1LCAweDM0NGE4YjNiLAorCTB4NDdmYmQzM2YsIDB4N2ZlMTJmNjUsIDB4OGY1YmFiMzksIDB4OWRhMzczZWIsIDB4ZTlkZGIzZWYsIDB4ZTgzZTRhNjUsCisJMHgxZTE3OWFkYiwgMHhmZjM4YzUyYiwgMHg3ZWJlNjQ4ZiwgMHgxNTkzZjFlYSwgMHhhYjhlZGM1OSwgMHgzMTU2NmQ4YywKKwkweGI2ODdmZmJlLCAweGNhOWM1ZjA5LCAweDdhZThmYmYwLCAweGNmMjIxZjVjLCAweGZlNmQ4MTRiLCAweGE0ZmRmOGZlLAorCTB4ZDVlMTViZjAsIDB4NzE3ZWVmZDcsIDB4Y2Q0NzAxMWMsIDB4YmM2OTI5NzYsIDB4ODkyY2JmNzcsIDB4NjNmMzlmZjUsCisJMHhiYWE1ZTI4NiwgMHg1YmU3ZDc2ZSwgMHgyMmM5YWZlYSwgMHgxOTMzMmMxZSwgMHhlYmM2N2VlOSwgMHhlODMyZDg4YywKKwkweGYzOGUyMDdkLCAweDM0MDhlOWRiLCAweDcyYzJmY2MyLCAweGY2NGM5OGU4LCAweDE5ODRiYzQ0LCAweDMwZTU4NWRhLAorCTB4NWU5MmVmM2QsIDB4OTNiYjQ3MjksIDB4YjQxMmYxMjksIDB4MjFlZDYxMjMsIDB4M2YwNTU1M2UsIDB4MTI5ZTY5YzgsCisJMHgzMWJiNzc4YywgMHg2NzcxOGJiZSwgMHhkNjBiNjc5NywgMHhlNjJiYmJkNywgMHgxNmI1MWM2MiwgMHhmN2Y0MDFmNSwKKwkweDYxZjY2NzgwLCAweGIyNzA5ZmRjLCAweGY4MTA3OGQ2LCAweGVmMzNlMWQ3LCAweGU2ZmNiODJmLCAweDc1ZWEzYTdhLAorCTB4MDBmODc3ZDQsIDB4OGMwMmY5ZjcsIDB4MjNlOTU0ZTIsIDB4MDFkY2VkY2QsIDB4MWY2Y2ZkNzMsIDB4NWY3Y2UyOWUsCisJMHhmNzFjNTg5YywgMHgwY2I4YjVjNywgMHg0YWM5YjNlMywgMHg1NGJmOWY1NywgMHg4NzFhZmU4NCwgMHg1YTY0ZWMxZiwKKwkweDc5NzhkNmZmLCAweDdlMjI5NWZiLCAweGY0ZjhlNmJmLCAweDg5MTc1OTgxLCAweDkzOWVkNTQ3LCAweGNlYjBkNDU4LAorCTB4MmFiZDJhZDQsIDB4MzllZDYxZjIsIDB4NmE3ZjllODUsIDB4ZDU4N2VhYmQsIDB4ZjM1N2EwZDYsIDB4OTI5YTcwZTUsCisJMHhjMjI4ZjVjMywgMHg2MTM4YzEyNywgMHhlMzgwOWYwMywgMHhmOWNhMzVlYSwgMHg3YzNmMGIwOCwgMHg5OWIyMzg2YSwKKwkweDkxOGZiZjQ5LCAweGUwYzlmOWMzLCAweGZiZmRkNGY4LCAweGUyM2ZmNWZhLCAweDYxZmZiNGJmLCAweDkwOWZmYWZkLAorCTB4MTc5YWZmYWMsIDB4ODExNWQ5OWUsIDB4ODdmMmEyZjUsIDB4MzMwMGY2ZGYsIDB4ZDY5NTc3YjMsIDB4YmRkMDAwZGMsCisJMHgwN2IzNWI3YSwgMHgxMjk0ZjJlNSwgMHhkZjVkMjBmMSwgMHhhMjczY2E4ZCwgMHg1MmExZjg0OSwgMHhhODJlZjlkMSwKKwkweDNmYzRhNTQ5LCAweDlmYTc0N2M0LCAweGU4MGRlNmZlLCAweGNkYjQ3ZmM3LCAweDdlZmYyNWVlLCAweDAwZWUyM2JiLAorCTB4YjZkOTVjYTYsIDB4NzZjN2NiODIsIDB4N2ViYzViYzcsIDB4OWZjOGZiY2YsIDB4N2Q2NmVkYjUsIDB4YjdlNGY5NTEsCisJMHg3ZWI0ZmQ3MywgMHgxYmZmODQ0NSwgMHhlNTYxZmYyNywgMHg4ZDljN2YxMywgMHhlYjJkNThmNiwgMHhmZDY3YmQyNSwKKwkweDk3M2ZjNzBlLCAweDYyYzJmNjQ1LCAweDdiZmZhMzM1LCAweDU2YjIxZjdkLCAweGVkYjZhNWUwLCAweDNlZTNlZjliLAorCTB4ZTdkYjZkNDQsIDB4ZTlhMTcyNGUsIDB4ZmFkMWJmMjQsIDB4MDdmMDg1NWQsIDB4ZDlkYzU1NmUsIDB4YzQ5YmFmMTQsCisJMHhlOWJmMjEyNiwgMHhlZTUxNjE3OCwgMHgzYzJmYzgwZiwgMHg5Y2YxODI1NiwgMHhmNjVlMjdhZSwgMHg3YzhkYTM0OCwKKwkweGQ5ZGZmNWNhLCAweGZkZWY5MmQ4LCAweGFlNWE5ZmQ4LCAweDFhM2Y0MWJhLCAweGNlZGQ2ZWVkLCAweDNmMGJiN2YzLAorCTB4YWIyZjBmNjYsIDB4ZWUwZjcxZWQsIDB4YjY2ZjU0MWYsIDB4ZjU1Y2JlZDMsIDB4ZmZiZjViMzMsIDB4OGU1N2M2MDgsCisJMHg0MDU3MDIzYiwgMHhiY2NmNTVmZiwgMHg1MDM1ZmFmNCwgMHg5ZWNlN2FhZiwgMHg0MzRmOTczZCwgMHhmNDEzNzI5MywKKwkweGQ2ZmY4NWE5LCAweGEzZDA0ZjhlLCAweGE5MmY0N2YyLCAweGNmOGQwZmI4LCAweGEwOTU5ZWJmLCAweGZiNzNkNTRiLAorCTB4M2ZhNjM2NTUsIDB4ZjZjNDY2M2UsIDB4MTI1YTlkYWIsIDB4OWFkZWM0ZmEsIDB4ZmM4NmZlOGQsIDB4ZTkxNTc5YzIsCisJMHg4OTNlZWVmZiwgMHg4MjRjMmMwZCwgMHg5MTJmY2RjZiwgMHgyMjc4OGNkZCwgMHhmNTdhMGE3YSwgMHhiZWQyY2ZkMSwKKwkweDdhNDJlODE2LCAweDZiMmY0MmQxLCAweGZlNDI2OWJiLCAweGE3OGM1ZmIxLCAweGZiM2Y3ZjAzLCAweGY5NzdkYzYzLAorCTB4Nzg4MDIzOGQsIDB4MmVmNjc4YTgsIDB4YTRlN2NlMGYsIDB4ZmNmOWM3NTIsIDB4Y2M1Y2U2YjEsIDB4NDdiMGE4YjMsCisJMHhmMjU0YmQ3MiwgMHg3ZjhmMTVlNywgMHhmOTZmZjg4NSwgMHg1MmU0YWZkMSwgMHhmMzA1ODMzYywgMHg0NDNiNjQ2YywKKwkweGNiOWU3MGYyLCAweGU2OTliZDFlLCAweGM0YzJjZTU5LCAweGM5OGYxNTg3LCAweGExZjBmZjk0LCAweDk3M2NlNmMyLAorCTB4MTZkZTRlNDQsIDB4OGI3MjcyNzIsIDB4NGU4NTkyODMsIDB4ZmI4MjQyZTIsIDB4ZDFjYWFmMTAsIDB4NWJjZjE0NmQsCisJMHhhZjkyZjE0NSwgMHg2YzQ3ZmJlOCwgMHg3NDNmZDUzNSwgMHgyYmI1N2E3MiwgMHg0YjBjMWZiYSwgMHg5ZjdmOTE4OSwKKwkweGU5MDNhN2I4LCAweDcwNDg3YTc0LCAweDZiODFjNjIwLCAweGY4MTExMjk5LCAweGJmNDAyZTkwLCAweDAzNTlkMWYyLAorCTB4NWY5ODlkMzksIDB4ODFkZjE1MjksIDB4Y2Y4MTlmZmUsIDB4M2Q4NzdkYjEsIDB4N2QzMTJhZTgsIDB4MjYxNDJlYzcsCisJMHhjNjIzNWZjNiwgMHhkMGQzYjgwNywgMHgwYjk5M2RiZSwgMHhmOTkyNjBmNiwgMHgzZDI1ZDg2NSwgMHgwY2MxZDQ2ZSwKKwkweDc3OTA2NjdjLCAweGRjNGZmZjJlLCAweDk3NWRlNWNiLCAweDM5YmNlOGZmLCAweGQ3ODNmZWY4LCAweDc3ZTExY2I4LAorCTB4NWMwMGJmNjgsIDB4N2VmNDgxZjEsIDB4ZTkxMjRkZmYsIDB4Mjc4YjA3MDcsIDB4ZWMyN2YzOTMsIDB4ZWZjZGNlNDIsCisJMHhmMDAyZmNhZCwgMHhmNzFlYjgyYiwgMHg5MzhlMGRmMSwgMHhmYjIwNzQ0NSwgMHg3YzIzN2NiNiwgMHgzOGFiZDQ2ZiwKKwkweGJmN2ZhN2FlLCAweDE3MmYxY2JhLCAweDhhZjdlMGZhLCAweGZhMTAwZmM4LCAweGY1Y2EzZDgwLCAweDI0M2Y2YTQwLAorCTB4N2I3NWVkYzIsIDB4YTA4ZmZiZjQsIDB4NDZiYzgyZmMsIDB4ZjZiZjI4ZmMsIDB4YmRmZmNlMTAsIDB4ZmY1ZjA3MWQsCisJMHg3YmNkYzgzMiwgMHhjZDZlNWQzMSwgMHhiNzJhZDU3YSwgMHg2NmFmM2IxNSwgMHgzZGY2ZTRjOSwgMHhjYTkyYzAyZCwKKwkweDJhNGYzYzJkLCAweGYxMjc1YWI3LCAweGFmNWJkZmYzLCAweGVkNTQ3OGVhLCAweGViYWFiZDY2LCAweGI0Zjg1NGM5LAorCTB4OGFjZGM5ZWEsIDB4ZDU2YWYwOWYsIDB4MWFmN2YwOTMsIDB4OGZjZmVkMmIsIDB4ZmNlYTFmM2EsIDB4OWE4M2Y5NTcsCisJMHhmYThmYThhMSwgMHhjM2U3NTRmOCwgMHhmOWQ1M2UzZSwgMHhkMTNjNWZiMCwgMHhmYmViNDc4NCwgMHgxOGRjNjA1ZiwKKwkweGZiYjQyNWY4LCAweDgxZjNiM2Q3LCAweGY4N2JkNWFlLCAweDc3N2MyY2JlLCAweGFmODBlYjA4LCAweDVhZDM3NzIwLAorCTB4MWI2N2U1MGYsIDB4M2Q0YjUxZWIsIDB4YjQxZjY5NjYsIDB4ZjY5NjQzZDQsIDB4Y2ViZDRiNjEsIDB4ZTNjYTNlZDIsCisJMHg1NTA3ZWQ2OSwgMHgzNzEzOWY5ZSwgMHg2M2FmYjdiNSwgMHhiMWM2MzcxMSwgMHhjNzE0Y2FmNywgMHhkNzk4MDFlZSwKKwkweDNiM2RmN2MzLCAweGMyOTFhMzBhLCAweDZmNWI1ZTQ0LCAweGY1MWViYThlLCAweGQ3Yjc4ZjU5LCAweGFmNjJmNjgzLAorCTB4N2FlZmM3OGIsIDB4NGM5ZWJkNDIsIDB4ZDZmNjlkODMsIDB4NzFmNDk5MWUsIDB4NDljZDk0NjcsIDB4MDU4MjRmZTYsCisJMHg2NGViZjQ0ZCwgMHhiOGYzZGVhOSwgMHhkZGRhMGY3YywgMHg1OTJjZGUzMCwgMHg3MThiNTgyYiwgMHhmMjk5NTY5OCwKKwkweGRjMzY5NjY3LCAweDhjZmNjMWUyLCAweDM3YzUzZDllLCAweGNiZTc4NDJlLCAweDliN2NjODhlLCAweGYyNTQxMjMwLAorCTB4MjlkYzdlMGMsIDB4OWE2ODc5MTYsIDB4ZjdjN2ZiODQsIDB4ZWM5N2ZkMTMsIDB4ZDJkZDdlZTEsIDB4NzNmMzkzZmIsCisJMHg1Y2FlZjhhNSwgMHhkZWEyYTM1YiwgMHg2ZGVjN2YwNCwgMHhkZTgzYmVlMywgMHg5NmEzYzU0ZiwgMHgxN2FlN2JlNywKKwkweGZkZmRjZjdjLCAweGVmY2MyN2NhLCAweGIwM2UyMmMzLCAweDcxZmJlNzRjLCAweGNmZjcxYzZjLCAweGFlNzdlNTE5LAorCTB4OTY3NzdhMTYsIDB4ODVjNmZhM2MsIDB4YzM5ZTg3NDAsIDB4MzliZTQzMzIsIDB4M2EyNjQ3YmIsIDB4ZjdjMWRkOWMsCisJMHgzZWNlMjllZiwgMHg5N2I1ZjkwNSwgMHhhZjhlOWRmNCwgMHgxMThmOTQyZSwgMHhkNzUwZjVhOSwgMHhmZDJmYmZmMywKKwkweGRlYTkzNDFhLCAweGVmOTJkYmY1LCAweGViYjVkOTQyLCAweGIxMTdmMGY4LCAweDA1MWJjMmZlLCAweGRiZmQ2NWJmLAorCTB4YTJlN2Q4Y2YsIDB4N2Q5ZThkN2QsIDB4ZWM4N2RhNmUsIDB4ODJmM2ZiZDksIDB4Yjc3ZDYxYWYsIDB4ZjY3MDgwMjMsCisJMHgwOTczZmJlYywgMHgzYWNmNTFmMiwgMHhiMWVhMDU0NywgMHgxZmRjMjE5ZSwgMHhlN2ZiZGM2ZCwgMHgzZjVhNGU5MiwKKwkweDkzN2U3ODliLCAweDY3YzNmYjlkLCAweDRkZjVmY2Y3LCAweDk4NGIxYjI5LCAweGZiMDdkYTE1LCAweGE4N2Y2OWQyLAorCTB4OGEyZWM3ZjYsIDB4ZmRlY2Y1YWIsIDB4Y2VkMWE5NzMsIDB4NTlmM2FjZmYsIDB4N2IxYmY2MjksIDB4NGVlMTZjZGMsCisJMHhlZjkzMmY4NCwgMHgzOGJlZDRkMywgMHhlNjAzNmI2NSwgMHg1N2VkYjQ2MywgMHgxOWZiYzA5NywgMHg4MjVmMzkzZiwKKwkweDI3NjdiMWZhLCAweGVkYmE3YmI3LCAweDdlZTM4ZjlkLCAweDJmZWQ3N2RhLCAweGJkMDNiM2FlLCAweDA2Mzg1MWJhLAorCTB4M2Y1MjlhODEsIDB4OTJkMTFlOWUsIDB4YzUzY2U1ZTEsIDB4MWYxNzJmMGIsIDB4ZTBjN2ZmM2IsIDB4ZjU3ZGEyNDMsCisJMHhhOGVlM2RlYSwgMHhmZjc5YzI1MywgMHhhMmRmY2RlNSwgMHgyMGU3ZDgzZSwgMHhmYmU3ZDRiZSwgMHhlYzgxYWM1ZSwKKwkweGZiY2Q0YjkxLCAweGJjZGQzZmU4LCAweGNjZTVmOGE1LCAweDdjMWZmN2JiLCAweGYyNjM3N2RlLCAweGU1ZmRkNWRiLAorCTB4ZWY5ZjNmYTAsIDB4Y2ZlYTliYmQsIDB4ZWYwNDAzYjgsIDB4NTdiYmYyNjUsIDB4ZmQxYzc5NTUsIDB4OWZmZTc0MWYsCisJMHg4MTNiZWU5OCwgMHhjZjRiOWVlZSwgMHhmODNmZWM3YiwgMHhmZGQzNTNiYywgMHhlZTgyZWRjOCwgMHhhOTQ3Y2M1ZSwKKwkweDgyNzljOWZkLCAweGI5ZWE5M2VmLCAweGNlODdmZjFiLCAweGVmZDdiNzVmLCAweDMxNWEwNWIzLCAweGJkMWQzYjJmLAorCTB4ZTFlNzNjMDEsIDB4ZTE4MmRmOWUsIDB4Y2U0NmZiYzEsIDB4MjhkZGEyZjcsIDB4MmI0YmZkOGIsIDB4ZmI5NTExN2MsCisJMHhmM2M0YjI3ZCwgMHgxZTEwZDlkNiwgMHg0ZmMyNjNjZiwgMHhkNzEwZjM0MiwgMHgyNzJiNDU0ZiwgMHhkNmQxNTRiYiwKKwkweDk0Y2NkZDkzLCAweGYwMTA0NzQwLCAweDc3NTVkZjcyLCAweDg3ZDcyODA2LCAweGM2MTYzZjhkLCAweDAxNjllMGZhLAorCTB4ZmM1YjU3OGEsIDB4MDU4OTI2YzUsIDB4OTU1N2IwMjUsIDB4MTg3ZjNlYWIsIDB4NDhmYjE2ZmQsIDB4NDI1MWRjNWIsCisJMHhkZTU4NWJlNSwgMHg3NjkwZTIyMywgMHg2N2YyNmFhZiwgMHhiYWU2ZDFiNCwgMHgzYmFlNmZjYiwgMHhjNjRlN2Y0NCwKKwkweDU4ZmE3N2UxLCAweGYyZDFlMzE0LCAweDk4YmMwNzk1LCAweDUzOGYyNmNmLCAweGJiMmVhNjE4LCAweGZkMDQ2YjU4LAorCTB4ZmNjZjg3MDYsIDB4NzNmNDIyZmQsIDB4YjQ1YmYxMGQsIDB4YjA2MGUzZGIsIDB4YWQ4ZWZiZmQsIDB4ZjMzODNmMTQsCisJMHg2MDM3NWJmNCwgMHhjYTJmNTViZiwgMHhlOTc4MDljYywgMHg3MTY2ZTFkZSwgMHhhYTI1MWJlNCwgMHhkOTUyM2ZhMiwKKwkweGJlMjkwNzI2LCAweDE3NGJjNGEyLCAweDc1MGJmNjE4LCAweDg3ZWFiMTdiLCAweDcyYWI4MjZlLCAweDE3M2EyM2E3LAorCTB4ZjVkY2FmYmUsIDB4Yjc1YTEyODcsIDB4M2Q5MmY1ZDcsIDB4MGE1YTc5MWIsIDB4M2JlMWEzNmMsIDB4YjAzZjcwNGIsCisJMHhiZTdlNDk1MiwgMHhlNzk1MTFlNCwgMHg0ZWVkNzUxYiwgMHhiYzdlODg1ZiwgMHg2YmU3OWRiNCwgMHhiMTZlYzY1NiwKKwkweDI4NzkwYzNiLCAweGRlYmI1NDFiLCAweGYyMjhmODhlLCAweDJjZjk0NDk0LCAweDRmMzE5ZjA4LCAweGJiNTdiNzUwLAorCTB4N2MzODkyOWUsIDB4ZTYyOGY2ZWQsIDB4N2Y2ZTU2N2QsIDB4MTFlMzFiYWUsIDB4MDExY2M3OTUsIDB4Yjc2YjFiNzQsCisJMHhlZmYxNGZiZiwgMHhjNjdjM2YxOSwgMHg5NzdlNDlkMywgMHhmYjQzZjI2YywgMHg2NWRiN2ZmOSwgMHhiNmNhZWJhMiwKKwkweGExNWJiMjFhLCAweDE5NWRmNDRlLCAweDI3ZDZmZTEzLCAweDdlYWE0ZmY0LCAweDFlMTc3N2I4LCAweGQxZmFhODk0LAorCTB4Nzc4YzFlOTMsIDB4ZTZkOGVlOWMsIDB4ZmI3MDNmMjEsIDB4ZmQzMWUzYzUsIDB4YmRkOGJkZmMsIDB4YzJmYmRmYzIsCisJMHg1NGUzZTQ0OSwgMHhmYzY5ZGVmZSwgMHgzZjUxZDgwNywgMHhmMzdlMmQ1NSwgMHhjNzY0MDFmNiwgMHhjOWE1OWMwMiwKKwkweGZlNzRjN2Y2LCAweGMzZTY3YWE5LCAweGQ5NWUzMWM3LCAweGM3YmRmM2I1LCAweGJmZWFlZTExLCAweGI0NzFlOWZkLAorCTB4OTczZWQ5NDMsIDB4NmEyZGY3MTcsIDB4YzUzNWZlOWYsIDB4ZGVlZmY0NzcsIDB4YTI1Yzc5NTQsIDB4MjkyN2E5ZmIsCisJMHhmZTBkZDYzZSwgMHhiZGQ2ZjYzNiwgMHhmYTAxNjRmNywgMHhmZGNmZGQyMywgMHhlN2ZkMTcyNSwgMHhkMTY3N2IzNSwKKwkweGNmMzU4ZmY5LCAweDkyYzgxOGNmLCAweDIyNWViMWM4LCAweDIzMmY0NmZmLCAweGRiYTU2NzNlLCAweDY0ODNiNmMxLAorCTB4YmEwMTlmMmYsIDB4ZTdkMmJmYTMsIDB4Nzg2YWM3YzcsIDB4ZmMyZmM0N2MsIDB4ZTNjOTFkZjcsIDB4ZjVmY2ZkYTEsCisJMHg1ZTM3MDViNiwgMHg2ZGI4Zjk4YiwgMHg4M2FhMDBmNiwgMHhhZmVkZmE0YiwgMHg1ZWM3M2QwMSwgMHg4ODc3MWQwNiwKKwkweDBiZWM0Y2Y4LCAweGNmZGJmNTE3LCAweDVlODAzZmUwLCAweGZjNzQyZGU3LCAweGY3ZDk2ZGIwLCAweDZkNzdjMTFlLAorCTB4ZWRmYTUyMDMsIDB4OWZjMGNiZjEsIDB4YTIzZDZmMWUsIDB4OTQwZTlkMDYsIDB4YTAzZjlkYjcsIDB4NmZkMjA5NzgsCisJMHhmYmI4NGMyZSwgMHgzMDBiMGY5OSwgMHhkZWNhN2Q1ZSwgMHhiMWU1M2I3YiwgMHhkMTc4NzVlZiwgMHhmYmRjYWQ0ZiwKKwkweGY3NTNjOTA2LCAweDllMjk0N2YzLCAweGIzZGM0NGM5LCAweGYxZmRmNTliLCAweGExYzg5NGY4LCAweGNkYzI3ZGFiLAorCTB4MDc0MTdkZmQsIDB4M2RmODA3OGMsIDB4ZmRmODVjZjQsIDB4NzhmNWFmOWMsIDB4NDAzOGFhNDAsIDB4ZTRmM2MxZDAsCisJMHhjZDcwMzhmNCwgMHg3ZTE1YmYxMywgMHhkMjZlODI3NSwgMHg1YmQ3YTQ2NCwgMHhlYjVmOGQxNywgMHgxZTIyZjA3OCwKKwkweDVjZTMxOTI2LCAweDdkMmVlM2M5LCAweGRkMGIyZTcxLCAweDVmNTZmOGY0LCAweDgzZWEwYjFjLCAweDk1MTE5ZTMxLAorCTB4MzcxNjQ4ZGUsIDB4ZTNjY2RlZWQsIDB4NzM3NmRkNjMsIDB4NGU4MjRkZmUsIDB4ZDUzNWVlM2MsIDB4ZThkMzhlNjEsCisJMHgyZjI1NGRmMywgMHg2YTVlZGNiYSwgMHg0ZjE0OWYxZSwgMHhiYjA4ZDBhMywgMHhiYWJlM2ZiYSwgMHhkZmFlNGUzZSwKKwkweGRlNWM3NzZmLCAweGZkY2E3NTdlLCAweDc1OTJhNTk0LCAweGM3MzZlNTNmLCAweGJjM2Y2OGQ1LCAweDU3Y2EzMmE1LAorCTB4MGM3OWU1ZTgsIDB4YzhiOWJlZmEsIDB4NWE3YWVjMTcsIDB4ZmFjOTc4YTYsIDB4ZWZkMjQxZDgsIDB4ZWZhMWZkNTYsCisJMHhhZGUxNTliNywgMHg2Y2FlZjAxMywgMHhkNzQ3ZWJlNywgMHg4MzU0Nzc0ZSwgMHhlYzBlYmE3ZSwgMHhiOTVlYmUyNiwKKwkweGZkMTUyZGUzLCAweDdmZGI0M2NmLCAweDhiM2I3MmE0LCAweDFmYWUxMWNiLCAweGJhN2NjMzUxLCAweGMyNWZkZDllLAorCTB4ZGYzYzdhZTMsIDB4MzdjZTNhZDksIDB4YTkzZWRjMWMsIDB4OWM3YzkzZGQsIDB4OWJlZjFkZGEsIDB4YzQ4YWE5YzYsCisJMHg3OWZmOWU1NCwgMHgyYjRlZjFmMSwgMHhiZmIwNWJjMSwgMHgzYTc2MWRkMywgMHgyNjNhNzNjZiwgMHhiZmI2NDljZiwKKwkweDE3NjFkOGJiLCAweDJmMmI0MWY2LCAweGJjYTUxZDYxLCAweGJjZmNhM2VlLCAweGQzNTdjNGM1LCAweGNkN2EwZjI4LAorCTB4YzViZjM5ZDEsIDB4NDA2YjhjNzMsIDB4NmM0ZWQxYWMsIDB4ZGE3Y2UwNmIsIDB4Zjk4MjdmZjYsIDB4YTNiNmVmNDgsCisJMHhmZDcxOTY1ZiwgMHgzNWY4ODVkYSwgMHhhZmE1OGJkOCwgMHg4MzcwY2RkNSwgMHg1ZGZkMjg3ZSwgMHhhYmIyMjI2OCwKKwkweDNhNGNlZjU1LCAweDBmYzEzMzY2LCAweDc1YzQwY2UzLCAweGMxZmEwOWExLCAweDlmY2M3ZGZjLCAweGNmNjQ3ODQyLAorCTB4OGYwODM5ZWMsIDB4NWQ3OWI1ZWMsIDB4ZWQ1MmYyNDksIDB4Y2FmMjg4NWEsIDB4NWVlZDdlZjUsIDB4YzMzOGRlNzMsCisJMHg0ZmQwODZmMywgMHg1ZTdhOTVmNywgMHhmMTAzMjg1MSwgMHhjZGM3NjFmNCwgMHgzMjg2NzRiYywgMHg3NzU5MTdiYywKKwkweGQ5YmQwOTRlLCAweGYxNjAxZjU1LCAweDA4MWNmYzExLCAweDdlNDU2YmQ2LCAweDgzOWVjNTcwLCAweDU2MGY1MWIzLAorCTB4MmZlNjI0YzQsIDB4YWRhNDczYzQsIDB4NzYzZjM3MjQsIDB4YTU3M2YyNjQsIDB4NTE1ZGIzNTEsIDB4ZDQ1N2U3YjksCisJMHhiNzhkYjJiZSwgMHg2YTMxNjJhZiwgMHg4YzQ1ZTc4ZiwgMHg2YzRkNWJmNiwgMHhlMTFlYzU4MiwgMHhmMjIzZGRmYywKKwkweDk1Y2ZhYTQyLCAweGZmMjFiOGIyLCAweDlmODI2N2ViLCAweDI2YmRlYWJhLCAweGYwOGQ1ZjNkLCAweGQ2MWFmYjQxLAorCTB4YzRkNGUzNDEsIDB4ZDFjNjk4MDYsIDB4OWI5Y2Q1ZGIsIDB4NDZhZmVhNmEsIDB4YWI3ZTIwZTksIDB4ZjQyZmY3MzksCisJMHhlYWJlNGZiYywgMHhkNDg3ODQ3ZCwgMHhlMDliZTdmZCwgMHg4NTNmZjQ0ZSwgMHhlYjI0MjdjNSwgMHhiNzNkMWE3ZiwKKwkweGU2ZmE4N2U2LCAweGRlNjM3OGYzLCAweDg4MmNiZDAyLCAweGU4OGNmZWEyLCAweGQzY2E3M2U3LCAweGJmODA4ZGEyLAorCTB4M2ZmODVhMjMsIDB4ZGNmODFmNTAsIDB4NjI1ZjBiMWIsIDB4MzI2Y2RlNzgsIDB4NzA5ZjU5ZTUsIDB4MGYwNDdjODgsCisJMHgwNDdjZjBmMywgMHg3NTgzNjIyZCwgMHhjYjZkMTFmOCwgMHhmMjhjNjk4NiwgMHg4YzNiNGUwZCwgMHg1ZTJjMDZmOSwKKwkweDZmNDQ3YTgyLCAweDI1YmRlZmQ3LCAweDdlMzA2MTFmLCAweDE2NTBhYTAyLCAweGRlNjMxNjcwLCAweDhkMDdhYzNmLAorCTB4YjA1YjNjZjMsIDB4OWY5YmE4ZmUsIDB4YmQ2MDJjOTMsIDB4NjBmZjMxZmIsIDB4MGEwM2YwYWIsIDB4ZGM1OGNlMzEsCisJMHhhN2U0YmNmZiwgMHgzZDk5MjczZCwgMHhkMGQ1NmNhMywgMHg5Y2IzNjMwMCwgMHhhMDJhNjcyMywgMHgyOTZmYjMyZiwKKwkweDBiZGYyZTdiLCAweDNkOWIxOTY2LCAweGIzZDBmMzEzLCAweDk3MWIyYzlmLCAweDRiNThmNTA3LCAweGNiZmY3ZjI3LAorCTB4NTAwNTcxYjIsIDB4ZTJlYWU2M2YsIDB4Y2EyNGFiZWYsIDB4YmU1YjU3ZDMsIDB4N2RhMjMzM2IsIDB4MTM3ZDNkMDYsCisJMHhhNGQ0YTY2MCwgMHg0MDljYjNhNywgMHhkZmExMzNjZiwgMHgxZjk5NzE3ZCwgMHg1NTdhMWVmMywgMHhjMjE2Njc4ZSwKKwkweDczMjY0Mzc2LCAweDdlZDYwZGZjLCAweDc1ZmExY2Y3LCAweDBkOWQ2ZDQzLCAweGI3YmU1ZmE4LCAweDc0OTljZmY3LAorCTB4MjNmMzBmZGUsIDB4NmIxZTljZjAsIDB4ZTExZDIyZjIsIDB4MTcwYmU0ZDEsIDB4ZTZiM2FmYzksIDB4NzRmY2U5OTksCisJMHhlYzVjM2I5NSwgMHhkZjM2M2EwNCwgMHgyM2NlOTIzOSwgMHhkZTMxNTIzZSwgMHgyNmUzN2U4OSwgMHg3MGYzYjc5MSwKKwkweDNmMjFiZTVmLCAweDkzYjU3ODk3LCAweDQ0ZjlmN2VmLCAweDBmZDlkNzVlLCAweDJlYjIzMzBhLCAweDdkNmExZmEyLAorCTB4MDYyODI3OGIsIDB4NWU5NDdhYjgsIDB4ZjllZmI3ZGEsIDB4MzFkYmFkZjgsIDB4OTllYjEzMGYsIDB4YzQ5OWQ2NDksCisJMHg3YmU5NGJmNywgMHhmMzA1M2U2YiwgMHgyZDlmMTM2NiwgMHg3ODg2N2MxNSwgMHhmYWYyMWE3MywgMHg5NTExY2I5NywKKwkweGM1NWJkYTA3LCAweDhiZDMzN2ZhLCAweGQ1MjI5N2YzLCAweDlmNTE4NWYyLCAweGI0Yzc0ZjFjLCAweGQzYzQ1Y2YwLAorCTB4Y2YyOTljZTcsIDB4N2E0NWNlNzUsIDB4NjY3NWNmNWEsIDB4ZTAzNzQzMzksIDB4ZTdlNTc5NzcsIDB4ZmFlZTUwMGEsCisJMHhhZDRhNjljZSwgMHhlYjNmNDg3OSwgMHhmNGE2NGZiOSwgMHgxOWY5OTJkYSwgMHhjZmI5YzQ1YiwgMHg3MTBmNzA1NCwKKwkweDcxYzM2Zjg1LCAweGRmZTI3ZThhLCAweDdmZTQxODc5LCAweDgwMzU1MmVjLCAweGQ3NjNhNGE5LCAweGE0MjgwYzRlLAorCTB4NDVkZTc4OWYsIDB4M2MyYmUwYWQsIDB4MWVlNzRlYWUsIDB4Y2ZiNDY2ZWUsIDB4ODI5MGUzZGIsIDB4ZGNmN2Q3ZTgsCisJMHg2MGJiMjVlNSwgMHhlNGI5ZDJmMCwgMHgxN2E0Zjc1ZiwgMHhhOTNmMzBjNiwgMHhkYTdlNmJlNywgMHg0MjdiMDQwZiwKKwkweGIyMWYzOTQyLCAweGYyZWUyMzI3LCAweDY0N2U5YzkwLCAweGNjOGZkMzkxLCAweGI3MWU2OTcyLCAweGJkYmY4MmU3LAorCTB4OGFmM2ZhOTMsIDB4Y2ZkMGMwZmUsIDB4ZWU5ZjljNGQsIDB4ZGY3YWY5OTEsIDB4MzgyN2VmNTMsIDB4N2VjOGIwODYsCisJMHg3NzJmMWZiNCwgMHg4NTNiYWZiYywgMHgwM2U4MjgxZCwgMHgxMTg2ZmZmOCwgMHg2NmM3NDBmZiwgMHgzYTQzYWZhYywKKwkweGM3NGE0YzhlLCAweGI0NzQ2NGU2LCAweGU0OWRjNzllLCAweGZkODdkZjBjLCAweDQ0M2YyYzljLCAweGU3YWQ3MmU3LAorCTB4YzkxMjk5NzAsIDB4ZTk1OTNjNDMsIDB4M2ViNGFiNWIsIDB4YjlkMjViOGMsIDB4M2IyN2RlN2IsIDB4ZDhkZmE3NDYsCisJMHg0ZTg4ZTNiNSwgMHg4NDNlN2EwNiwgMHhmM2RkOGM3MCwgMHhkNmUxMGRiZSwgMHgyOTFkZjhlOSwgMHhjMTRjMWRiOSwKKwkweDhmZmJhYmMwLCAweGQzYjBiYjk3LCAweGJlZDI0ZTE2LCAweGY1Mjk2ZDY0LCAweDgyZDlmODA3LCAweGYzZjAxOGUzLAorCTB4OWZiZmQ2MTQsIDB4ZTE0ZjNmMWEsIDB4M2YwMzJmYmMsIDB4N2UwZTVlY2YsIDB4NGFhZjNmNzQsIDB4ZWUxNTcxYzgsCisJMHhmZjlkMDE1YiwgMHg1YjlmOWZlOCwgMHg5NmNlZTMwNCwgMHgxNWQzZTIzNSwgMHhlZjhhNjRkYiwgMHg3OWI5ZmI0MiwKKwkweDVmYjkwOWI5LCAweDNmNmVhNTMxLCAweGYxNWM1NzllLCAweGI0ZmM0NDk4LCAweDdmYmY5YzU0LCAweGI3YmY5YzRmLAorCTB4MmY5NjAzZTYsIDB4YmQ5ZTkwOGMsIDB4OTQ2MDVlNzQsIDB4NzZkNTQ2ZjQsIDB4MDljM2YzZjMsIDB4M2NhMDJhZmUsCisJMHg4OWVmNzE1ZiwgMHgxNTgwNWY3ZSwgMHgyMTM1NjdmZiwgMHgzNjVkNGJkNywgMHhmZDAyYmRlMywgMHg2NmNlYjdlNCwKKwkweDliY2YyYmNhLCAweGY5MGZkN2QxLCAweGZmOWIzZWZkLCAweGZkZDM4YTBkLCAweDZlMzBjZWNjLCAweDI3YjI1NDE0LAorCTB4MTMxZjExYzYsIDB4NmZkODk5YTUsIDB4YmQyZjkwOTksIDB4Y2Q2YmExYmYsIDB4YzQ2MTVlNzYsIDB4YjhiMDNlN2MsCisJMHhmMDNlN2NjNSwgMHhmOWYzNTY4YSwgMHhjYzliMTFjMCwgMHg4Y2FmMDNlNywgMHg4ZTA3Y2Y5YSwgMHg1NGRlM2VkYSwKKwkweGM2YmIxMzFmLCAweGZiNmM3ZWQ0LCAweDVjN2Q1Mzc0LCAweGY2YTZmM2ZjLCAweDM3Y2YwZTEzLCAweGY4ZWVhZmQ1LAorCTB4YTRmZGE5YjIsIDB4ZGU5YTc3NjMsIDB4MzRhY2U5NGYsIDB4NmE3YTlmYmQsIDB4NmQ3ZWE5YjUsIDB4ZGE5YWJmZWYsCisJMHhmZDcxOTdjNywgMHhlNDdlYTA3NSwgMHhmYTllNjM1NCwgMHhjZGFhNTU4MSwgMHgwZDU3Y2Y4YiwgMHg4YzRiNzliNywKKwkweGZlODM3M2NmLCAweDgzNGIyYzEyLCAweGQyYTc2N2U4LCAweDU3OWMzM2IzLCAweGY3YWUzNTRlLCAweGQyNmVjYzY1LAorCTB4ZTY5YzMzM2YsIDB4ZTIyNWM3YmEsIDB4MmZjMDA1MTAsIDB4MmUwMWZjNDAsIDB4YmM4MTVjYjMsIDB4MWU0MGJhZTUsCisJMHhiNWE2ZWJmMiwgMHg4M2M3ODcwYywgMHg0MGNiMGM1NiwgMHhjYjM5MDI3OSwgMHg5YzllNWQ3NSwgMHg5M2JiNjNlNSwKKwkweGIxZWJlMzJiLCAweDAwM2VlYzllLCAweDJlZjkxMGI1LCAweGIyOWJmOTQyLCAweGUzMmZmNzM4LCAweGZlMzIxNzNkLAorCTB4YzJhNTQ0M2YsIDB4NWU0YTExMjIsIDB4N2M4NjAxNjcsIDB4ZjVmNzVkNmYsIDB4OGY4YWRlZjUsIDB4MjdjNzhiODAsCisJMHgwNGYwZmUxZCwgMHhkYzNmMmNjNSwgMHg0YzU1ZjBkZiwgMHg5MmY4MGM1MCwgMHg3NmE2NzViZCwgMHg0OTljZmYwZSwKKwkweGVmODlmN2M2LCAweGRmY2M5MzQyLCAweGE1ZDUzNDJkLCAweDdmMjk3M2U1LCAweDc2NWMxNTI4LCAweDRmNTE5MmRmLAorCTB4ZTdiMzdlODAsIDB4N2Y1MmE2MmQsIDB4OTZkMGJjZGUsIDB4MDZmMDVmMzQsIDB4YzNmNDY3ZDcsIDB4YzlmZjNjYTMsCisJMHg4MGRkZGY2MCwgMHhmZDkzMzk3NCwgMHhmNzk4NDNlYSwgMHgyZjUxNzJiNiwgMHgwZTc5ZTNmOSwgMHhkNDQ4N2ViMywKKwkweDNhMmYzZGY5LCAweGIzZDY4ZjNjLCAweGViZGViOGQxLCAweDQxOTZkYWU3LCAweDlhNmRkNjIxLCAweGYzZTNiMmVmLAorCTB4NjFhZjMxNzMsIDB4ZmQzZjBhNzAsIDB4Yzc5ZjMxMDEsIDB4OTZhMzIzZWIsIDB4YTczMDYzMjIsIDB4NDE3OTNjZTksCisJMHhkYTM2NzZiYywgMHg5ZTQ1NDM2MSwgMHhlNGI2NDNmNiwgMHgyZTU1NTNmOSwgMHg0NDBjYWViZSwgMHg4MmY2OGQ0NSwKKwkweGMxM2VkMmE2LCAweDc5ZGZmMjk5LCAweDU1YWJmNTMwLCAweGZmMjE1NzBlLCAweGEzYjYzOWRlLCAweDBlYTM5Zjk0LAorCTB4M2Y3ZTc4ZjgsIDB4NzdkNzViODcsIDB4MjFlODVhMDUsIDB4NjAwNTVmZDQsIDB4ZmIwYmY5YjYsIDB4NTE3MDMzYzMsCisJMHhiYzIxNGU2OCwgMHgwNWIyY2E2ZiwgMHg0YWY3YWEzNCwgMHhlYmY4ZGU3NCwgMHhiZWQwMzMyMCwgMHhjMTMyNmZlOSwKKwkweDBhNjA3NGQ3LCAweDVhYTkxNWU1LCAweDI3NDY0NTk4LCAweDdlNDRjOWU2LCAweGYwZWZiZTgyLCAweGU0NGRmNjYxLAorCTB4ZDU1ZDM2YmYsIDB4OTE4OGRlNzcsIDB4M2E4NWFiM2YsIDB4MzcwZmRmYjAsIDB4YTZkYzY5ZGEsIDB4N2RlOTkyZTksCisJMHhlYWJhZDY4MSwgMHhkZTUxYzAxMCwgMHg0YmYxNGU5NiwgMHhlNDBkZDM2NSwgMHgwZTNlYTk3ZiwgMHgxMmUzZDM0ZiwKKwkweDNjMTEyYzFiLCAweGUxZWVjZTNjLCAweDdjM2MwMGY4LCAweDI2NzBmMTA1LCAweDRkOTFmODU4LCAweGFmYmMzNDlmLAorCTB4YmNlOTUwYzksIDB4NzExNDkwZTgsIDB4ZmMzYTZkOGUsIDB4M2EyNjkxYzEsIDB4YzMzMDhkZTcsIDB4ZjZmYzZmMmQsCisJMHgzZjk4NDNhYSwgMHg4MDdhN2NmMiwgMHgyZTNlYTRhNCwgMHg3NzllNmFlOCwgMHgxYmZjZjY3MywgMHgxYWVkMDRiZiwKKwkweDFlMTk5MzVmLCAweGMyNzdmMGY5LCAweDkxZjM0ZjFhLCAweDc4MjRkMWEzLCAweGYwMDZlOWQ3LCAweDk1N2U0MzZmLAorCTB4ZjlhNmNkMzcsIDB4MmY3YTBhMTYsIDB4M2FlMzdhMDcsIDB4ZTY4NWIzZTMsIDB4NmQ3M2ZkMTAsIDB4OWQ2YmU3MGMsCisJMHgwN2ExMGVjNywgMHg4NTc5NzE5ZSwgMHhmOTczOTZmYywgMHhmNTFkMmRmMywgMHg3M2QyMDRjNCwgMHg3M2ZmZDg2ZCwKKwkweDczZjY5NGFlLCAweGRkODkyYjliLCAweDUxN2JhOTc1LCAweDFjNzYxN2FhLCAweGNhMGU1MmMyLCAweGQ0MjdlZTAxLAorCTB4Y2ZkYTM3MGQsIDB4ZTI3ZjFmYTAsIDB4NzJjZGY4MzIsIDB4YjA0YmQ3YzYsIDB4ZTFkOTRiZGYsIDB4NjVhMDRhYjUsCisJMHhlZGE1ZTE3OCwgMHg5MGNmYjQzNCwgMHgwY2ZiNzUwZiwgMHhlNzE0NzllNiwgMHg5ZThiMGJmOSwgMHhhM2Y1ZTgzNywKKwkweDQ0OTllNmM5LCAweGVkOGViZmFmLCAweDllMzk3ZTRlLCAweGJkMDI3ZWQ0LCAweDhlNjQ3NjRlLCAweDY1ZmY1YzlhLAorCTB4ZDQ3YTcxYTQsIDB4Zjk0NjU1N2EsIDB4OTdmNjI5ODUsIDB4ZWRjOTY5NmMsIDB4ZGZlYjU0YzYsIDB4YTI5MGZjYTUsCisJMHhjMDdlZTY4MSwgMHg4NDdmMjE2ZSwgMHhkZmI0YWI5NSwgMHhjZDgzZjY3NSwgMHgzY2M3MGVmNywgMHhmMjg4YWQyMSwKKwkweDkzZjU1MzgzLCAweDA0Yzk3NmJmLCAweDIyYmZjZjgxLCAweDlkZmM3NDFlLCAweGYwMTVlMGIzLCAweGViYTRkN2Y5LAorCTB4ZDNlMDM1NjQsIDB4NGIyN2MyNjYsIDB4ZjQ3YjBjYmIsIDB4MzJiYjlmZDMsIDB4MTZlYTE3OWYsIDB4ZTA3NTg3NzgsCisJMHgxNjA3NWEyZCwgMHhmMThhNTliYywgMHg3ZjM3OTU5NywgMHhhN2MwZWI0NCwgMHgzOWExNjcxZSwgMHgwZmM3YTA4ZSwKKwkweDIxZGY5YzYwLCAweGZjMTdiYTllLCAweDNiN2RjNDRkLCAweGY4ZDk1ZTI5LCAweDE3YmEwOGZjLCAweGFlYmE2NmFmLAorCTB4NzQ5Y2VhNGYsIDB4MTE3MDcyZWUsIDB4MmVjY2U3ZDEsIDB4M2NlMTEwNDcsIDB4NjZlM2M1OTMsIDB4M2E0ZDc2NjcsCisJMHhmNzk5ZjE4NCwgMHgxOTY3MGZlYSwgMHhkOWU2N2NlOSwgMHhlODc2YTVhMywgMHhhM2NlY2NlZiwgMHhmN2U5MGFhNSwKKwkweDlkZGVlOWE4LCAweDJhYmYwYjlhLCAweDNmNWU3ZjQ1LCAweDc3YzdkMGRmLCAweGQzZWJlNGNlLCAweDNmM2Y4Mjc1LAorCTB4NWUzMDFlMjksIDB4MGE1MWZiNGYsIDB4YmJlZDE4N2IsIDB4OWI1NGJjM2UsIDB4NDk5YzE1Y2YsIDB4ZjExNGIzN2YsCisJMHgwZWI5NzgwMCwgMHg0M2QzYWVlOSwgMHgzMzJiODc4ZiwgMHhkYzYwNjYzYSwgMHhmYzBiZjdiNiwgMHgyZThkYTkzZSwKKwkweGUzNTJhNzFlLCAweGNkNzY5ODc1LCAweGUzNWI4NzljLCAweGM0NzVhNjU4LCAweDNiNTBlZjI4LCAweGQyYzcxMWQ2LAorCTB4YzQxYmQ5ZDMsIDB4NzY3NmE3ZWQsIDB4NWZiMWU3ZTcsIDB4N2VlZjI5ZWYsIDB4MDZmNTY3YWMsIDB4ZDBjNzg3M2UsCisJMHgwNmFmZTc2NSwgMHhiYjdjMDNiZCwgMHg3MWZhZGU3MSwgMHhmN2U5NGZlOCwgMHhkOThhZjk2YiwgMHhlMGIxYzJjOCwKKwkweGUyNWU2MWJmLCAweDJkY2I4YTU4LCAweGU2MDdlZmMwLCAweDcxYzQxZWRhLCAweGYzNzMyNWE1LCAweDZjNWM4MTk2LAorCTB4ODc5NGE4ZjIsIDB4MWMwOGNjYTksIDB4ZjM3YzIzZjYsIDB4ZWNlZjgyMTQsIDB4MTdkZjk5NjEsIDB4ODViOWNmMzIsCisJMHhmYzY3YmY5ZiwgMHhmZDliOTIxZSwgMHhhN2Q0YmViNCwgMHhjM2UzZTdlOSwgMHgyYWZlYjg4NSwgMHgxYTUxNmNhYywKKwkweDg1YTcwN2Q0LCAweGQ3MzJjMGVmLCAweDEwZmMzMWQ2LCAweGY2M2FlNzdjLCAweDYwOWMwMjliLCAweGQwYmZjMWU5LAorCTB4Y2FiYjNhYmQsIDB4M2Y3MWZiNDIsIDB4ZTRiNzc3YmEsIDB4YzdmYWMyZGYsIDB4N2U4NWViZmQsIDB4NDhlZmNiZDAsCisJMHhlZjMxYzc3NSwgMHhlYmJlZmVhYywgMHhlYzdjNjE2NiwgMHhiYTNhYWUzYiwgMHg4MmZlMDVmNywgMHhlN2Y0MWY0ZSwKKwkweDMyY2FkZjBhLCAweDZhNjkxYzYxLCAweGExNmI5Y2YzLCAweGUzZjc4NzZlLCAweGNkNjlmYmYwLCAweDU3N2VkMDRkLAorCTB4YWYxZjM4NjYsIDB4NTM0YjcxYzIsIDB4YzEwZjBmOWEsIDB4YjViY2EzM2EsIDB4Y2QyOWI0ZmEsIDB4ZmU2NjMwMTEsCisJMHhlM2NiY2QzNSwgMHgxMGI4NWFlZCwgMHhmNzU3ZDRlOSwgMHhhODZkZGQ0MiwgMHg4NTc1MmQzYiwgMHhkNTc5ZjVkNywKKwkweGU1MGJmYzFjLCAweGMzZGNhZTk1LCAweGQ5Y2EyZGVmLCAweDFiZGY4ZjMzLCAweGVlOGYzZWQ3LCAweDEzNGU2YjhkLAorCTB4OWE2MzQ0N2EsIDB4NTg1NjNjZjEsIDB4Zjg4YmRmMGUsIDB4MTk1ZTkyZWEsIDB4OGY0OGU1Y2UsIDB4MmY3OGE2N2IsCisJMHg1OWMzOWVlMiwgMHgwNmUzYzUxZCwgMHg2MmVlYzFlMSwgMHhiYzc4Y2JiNCwgMHg1MmY1ODBiMywgMHg4YWViYzdhOSwKKwkweDYxY2E4MDU4LCAweDQ4ZTU0NDJjLCAweDU1ZTU0YWQ2LCAweDY4ZTU0NjJjLCAweDA5NjU0MWQ2LCAweGMwMzJhNWViLAorCTB4ZTM5NjMyYmMsIDB4NmNjYTgwNTksIDB4NTlkMWRkNWIsIDB4NjY3ZjRmYTgsIDB4N2MzYTdkMjcsIDB4ODMwM2FhZmIsCisJMHg0NGRlOTExOCwgMHhjNzhkNjZiNywgMHg2NTZiZDZlOSwgMHhkY2JjMWFkOSwgMHgzZjUwZjgyOCwgMHgzNDhkNTU1NywKKwkweGRiNjJiZTAzLCAweGU4N2VjOGYzLCAweGRlZjYzMjEyLCAweGY3MDQ1YjI2LCAweGY5YTNkOTYzLCAweDljNWFiY2Y0LAorCTB4N2UzZWFlNDcsIDB4ZjdjZGVjODAsIDB4NjBmM2M5ODIsIDB4YmI4YmMwNWYsIDB4OTYzZWQzM2UsIDB4M2VkNjdmNTksCisJMHg0MWJlMTFhYSwgMHgzOTQwNWY3ZSwgMHg0MTcwODk1OSwgMHhhMGVjZTZkZCwgMHg3NWY2OTc3MywgMHgzZWU5MDdiMSwKKwkweGI0ZWM2N2I4LCAweDE4NTU1YWJmLCAweGJkNDNiMzJhLCAweGEwNjE3NzZhLCAweDdhODcyMGMxLCAweDY2NTU3MDNlLAorCTB4OTZiYzc3MmMsIDB4ZjU4ODhmMzgsIDB4ZGY4MjVhNzEsIDB4Mjg2ZmI2NTcsIDB4NzdmYjdkYzAsIDB4ZjVhNzFmZjcsCisJMHg4NWU5ODdmZSwgMHhiNjlhOWYzNCwgMHg0ZGQ4NmFhMywgMHhjYTJhN2VmYiwgMHg3ZDM5YmJjZCwgMHg5N2Q5M2FmNiwKKwkweDA2NDBhZWNkLCAweGZkZTk3NzllLCAweDRiNmZiZjM5LCAweDk0ZjdkZmM3LCAweGRmNzE5NzVlLCAweDI4M2Q3MGU0LAorCTB4NWVlOWIwNDIsIDB4Zjk1MWY3YTksIDB4OTUzZjdhOGIsIDB4YjJmN2FiM2YsIDB4NDcwMGY4MjAsIDB4MDRkYTlkZWMsCisJMHgzMGNlNGY5YywgMHg3YmZiY2EyZiwgMHg0MzJiZDhkZSwgMHg3Y2JlNjIyNywgMHhlNjAxYmY5MSwgMHhjZWZkOThkNywKKwkweGRlZDAxM2ZkLCAweDc0MDFjODBjLCAweDc1ZWVlYzBiLCAweGYzYjQyNTEzLCAweGNmMjlmMzdjLCAweGJjNmQxZWU1LAorCTB4NGYwMDhmZjMsIDB4ZTY3MDEyYTMsIDB4NmIyZmI4YzAsIDB4YTAyYmI1M2IsIDB4MjRmY2ZlYmMsIDB4ZTVmZmNlMjcsCisJMHgwZmNkMzZlYywgMHhkZGM2MWJmNSwgMHgyNDdkYzVlYywgMHgwMmUzNmZlOCwgMHhmYTJlY2ZlYSwgMHhmNmM0ZWYxYiwKKwkweDVhM2Y2MmY3LCAweGEyZmQ5ZmEyLCAweDY3N2JiZDdlLCAweDU0M2ZiZTM2LCAweGViZWUwOGNmLCAweGIxYjJkYTczLAorCTB4YmQxZjdmYmYsIDB4MTNmMTk1ZWMsIDB4YmE0NzdlZTksIDB4MTdjYWNhMmYsIDB4NjZjYjlmZDcsIDB4ZTZjYmIwNDEsCisJMHg0MTYwMmI5ZSwgMHhkMzkzYzdhMCwgMHhmOTQyYWVlYiwgMHhkMWJmZDM1NywgMHhhMGZkMDRlYywgMHhhMjU1ZDYxNCwKKwkweGI3YTZmMGJlLCAweDFmNDEzYjM0LCAweDlkMDFiMDZjLCAweGE1OWY1NGJjLCAweGNjNzAwOTVkLCAweGIxODFmYWU0LAorCTB4YTQzMmU2OTYsIDB4YzYyYmIwM2IsIDB4YWU4ZmUxZTMsIDB4ZmE4MjM5OWIsIDB4N2VmZTFhZTMsIDB4ZDc5MTYwZTYsCisJMHhmN2UzZWQwMCwgMHhlZDBiMzFiZCwgMHg5MThhNmFiMiwgMHg2NmU2YjYzMCwgMHhhNDc5Zjc0NiwgMHhjZTJhMzdiMiwKKwkweGMxYThiM2E1LCAweGJhNjFmYmFlLCAweDQyYTdlNDlmLCAweDRjM2VkMDg5LCAweGJkMGYzOWM1LCAweDVjZmVmY2JmLAorCTB4ZmQ4ODczYTYsIDB4ZmRlOGQzZmIsIDB4N2U3NGFiZTEsIDB4Njc5YzUyMGEsIDB4ZGYyMjczY2QsIDB4ODgxYzE1YzMsCisJMHhkNzYzYmVlZCwgMHhiOGY2MGZlNywgMHg1N2Q1ZjExMywgMHhjYzNlMjg4ZiwgMHhmZmU3ZDA0MywgMHg0OWZmY2QyOCwKKwkweGVmMWVmMTM1LCAweGY3ZDgxY2Y1LCAweDdmZDEwNTllLCAweGVhMjY5MjNlLCAweGI3OTIyNzkxLCAweDJmYjRiMzRmLAorCTB4MzRjZmViZDIsIDB4MWZkNjljY2YsIDB4MTJiOGVmOWUsIDB4NTdiNDI3NzUsIDB4ZWFmYTNiY2UsIDB4OWIwNmRmMDgsCisJMHg3ZDJjYmZhNSwgMHhmYzY5ZTdmYywgMHhiNDU5NDJhYSwgMHg1MDUyZjdkZiwgMHg3MjNiZDAzMSwgMHhhYmVmMTlhOCwKKwkweDc4ZWY0NTRkLCAweDliOWIyZmRhLCAweGFlMjNmYmUwLCAweDVmYWQxOTUwLCAweGJmNWEzMzM3LCAweDA2MDJlZTUwLAorCTB4ZTM0ZjE4M2QsIDB4YjljNTU1ZmUsIDB4MjQ3YTI2NTEsIDB4N2E2MjUwZTgsIDB4ZDJlNDEyN2UsIDB4N2NiYjRmYjgsCisJMHhmZTc0NWRjNywgMHhlN2U2OWUyNCwgMHgzZjA4YjBmZCwgMHhiMTY4ZjU1NywgMHhmZmY2N2Y2OSwgMHhlMTY5ZjFjMywKKwkweGM3MDE0YjI4LCAweDFjMzNiZmNjLCAweDNmZTQ5YTU3LCAweGQzNjhjNzAxLCAweDM4N2VmZmYzLCAweDYzODBhNDY2LAorCTB4MWMxNTNmZjYsIDB4MmY0NTdiNTYsIDB4MmJkYTJmZmYsIDB4Y2FiZGEzNTcsIDB4OWQ2YzQxZTMsIDB4ZjdmZGNlOGQsCisJMHhlNTJhMmE2NCwgMHhjOTkzNjllZiwgMHhlMTk1MjA0ZSwgMHhkZjY4ZWVhNywgMHhjZDc3OWYyZiwgMHg4YjFjN2JmYywKKwkweDYxNWY5ZGIxLCAweGQ0NzhjYTJkLCAweDExNjcxMTU3LCAweDg1N2Y4N2VlLCAweDBmY2YwM2Y3LCAweDg2ODNhMDJiLAorCTB4MWY2OTNhNjQsIDB4NTQzNGJmZGIsIDB4ZmUwNWZiODUsIDB4NTQzNWU1ODUsIDB4NTQ2ZWViN2EsIDB4NTg3YTVmNzAsCisJMHhlZmI0MzhlZiwgMHg0ZmQ5NmIzNiwgMHhkZTkzMzMzNywgMHgyZmJhZDA4YiwgMHhiNmJiMjJhZCwgMHg5YjI3OWJlMywKKwkweDYwNzhkZjcxLCAweDY4YzNkZDVhLCAweDkzOTE0YjA3LCAweDI0YTc4N2NkLCAweGQ2ZjVjZjdiLCAweGQxNGZkMzJmLAorCTB4Y2U5ZDE0YmEsIDB4MjkzZjQyYWUsIDB4MGVjNjhhZWEsIDB4YjU5YTNkMjAsIDB4ZjBhM2QyMDAsIDB4MjI5NmQxOWIsCisJMHhkYWY3MmJhOCwgMHhhZjAwMGQwMiwgMHhiZWRkMTk5MiwgMHgxZTU3ZTAwNSwgMHg0ZDc2NGUxOCwgMHhiNjFmZjUxNCwKKwkweDZlODk0MDdmLCAweGZhOWRmY2MxLCAweDFiYjdjNTAwLCAweGE1YjQ3ZDg1LCAweGYzMTdhZTY5LCAweDMwOTllZDk4LAorCTB4N2FlNTIwNGIsIDB4ZDA5N2RkN2IsIDB4NzUzNGQ3NWUsIDB4YWUwYTczYmQsIDB4MDE5NjgxMDcsIDB4MDFmNzVlNWUsCisJMHhiMTE2NGY1YywgMHg3OGE2NjcyMiwgMHhiNDZmZWIwZiwgMHgxYWYyMGQ4MSwgMHg2ZmU5N2VlYSwgMHhiYWI3OWYzMiwKKwkweGQ3MGQzODNlLCAweDhjOTVkNWY5LCAweGY3MDg3ZjdmLCAweGQyY2M5ZTg5LCAweGZiZGZjMmYxLCAweDRmNWM3NTBkLAorCTB4N2Q0NDg2OTQsIDB4ZWI3YmNjMjYsIDB4ZjdkZjVjNjMsIDB4ZDFlYmFiYTYsIDB4NDRmOTg3ZGUsIDB4YzMxYjhlYzgsCisJMHg2MzBlOTNlNywgMHhmNGZlMDA3YiwgMHhiZWI0NDU3MSwgMHhmMTdkNjE0NiwgMHgwYTcxZmJlMCwgMHhmN2QyZjc5ZCwKKwkweDZjNjM5YzgzLCAweGVkODQxZmI0LCAweGMyZWE3ZWU5LCAweDc0MmZkYTIyLCAweDM4ODE2M2NlLCAweDY5ZTcwM2U2LAorCTB4MDk1MTdmN2MsIDB4M2IzY2M0Y2UsIDB4MDRiZjFmNzcsIDB4OGFhNmNlMjksIDB4YTI2ZDEyZmQsIDB4YWQyMDVmMzksCisJMHg5OWI0NWJlOSwgMHhmY2RhMzY5ZSwgMHg1Y2NjMzlkYywgMHg5ZGMwYjA3NywgMHg2MGVjOGY3NCwgMHgyNjgxYmU0YiwKKwkweGIwMDY4N2Y2LCAweDE0NTdlODQxLCAweDZjMzYyMmRiLCAweGNhODVkYTA3LCAweDc2ZGY3ODUxLCAweGVjODExZTMxLAorCTB4MGM1OGZhYTQsIDB4MzFlMzE2OTEsIDB4MGMxZDNmMmIsIDB4MzI4MmMwOWIsIDB4NjQ4NmEzOGYsIDB4Njk4ZTNiZjQsCisJMHgwNzk0N2NlMSwgMHg2NmUyMjY5ZiwgMHg4ZGJmNzg4MywgMHgzNmZmNjFhMSwgMHg4ZmYxNGZjYiwgMHhmNWVmYjQ3YywKKwkweGIzNzljNmZhLCAweDRhOTFmZTI5LCAweDg4OWEyMmJlLCAweGVjMzZkZWU3LCAweGNlOWFmN2EyLCAweDE5MTAwNzM4LAorCTB4YzY4ZTZmZjQsIDB4NmY2YjgxZjMsIDB4ZDc3OWY3ZTIsIDB4OTQ3ZWUxZWUsIDB4ZThiMjdlZmUsIDB4OWM0NTM2YjcsCisJMHgzMjdhZTQxMywgMHhkNjNkZjljMiwgMHg0ODVlZGIzOSwgMHgwZTdjYWNmNywgMHg3NWYzNTZlOSwgMHg2YjRmYzMxYiwKKwkweGRmYjljN2UyLCAweDUzYjdiMTY2LCAweDE1OGRhMWU1LCAweDVmOWY0ZGZlLCAweGYyMThmYzIzLCAweGMyY2U5MDJkLAorCTB4ZDJlYTU5N2YsIDB4NGZiZTZlZTksIDB4YTI0N2JmNDIsIDB4NGY0ZGM4NDcsIDB4YThjNDRhYjksIDB4ZWEwOTgzNDUsCisJMHhlOTg1MzczOSwgMHgzMTcyODIxZSwgMHg2NTRkZjI5ZiwgMHgyYzFmZThiOSwgMHg4MjI1ZmZkZCwgMHg3OWM2ZDk3MywKKwkweDVlNGJkZTJhLCAweGUxMzE3MWJlLCAweDUyZWJjNzQ1LCAweGE3ZjA3ZjhiLCAweDhkMTcwOWQ2LCAweGI0ZjZlOWE3LAorCTB4ZmVlODFmZWUsIDB4NDg0ZmQ1ODAsIDB4NDdlN2ZkZjUsIDB4Y2MzYTI3ZWUsIDB4M2VkMTk1ZjYsIDB4M2MxYWZmZWYsCisJMHhlMDc1ODZjZiwgMHg2N2RlMjBiNiwgMHg0NzNmZmJhNSwgMHhmOThlZWNlYywgMHg3MzY1NWNmOCwgMHgyZWMzZjlmMCwKKwkweDU0NTYwZjdlLCAweGQ4NzU4M2RjLCAweGRmODU5YzVmLCAweDdmM2UyOWNkLCAweDNiMmY5NjI1LCAweGVkZWExYTYzLAorCTB4N2EzZTNmOTcsIDB4NGEwZmY5MDMsIDB4OGQzY2MzNGMsIDB4ZmZmNzBhMzMsIDB4ZTc2MzNhZjQsIDB4MGJmMzhhNjQsCisJMHg3ZWVmNWZiYywgMHhiODY3ZWU5NSwgMHg3NGY3ZjBiZSwgMHhmZGM2YmQzZSwgMHgzZjYzOWQyYSwgMHgzY2E3NjZkMywKKwkweGIxNWRlYmJiLCAweDFkZmRlMzZjLCAweGNkZWUxN2Q3LCAweDc0N2UxOGJlLCAweDgwODhlMWZmLCAweDdiZDE3MGY3LAorCTB4NTcxYTYxMDUsIDB4YjcwNDczZTQsIDB4NTNkMjE3NGEsIDB4ZTdjZDZmN2YsIDB4M2U5OGVjZDgsIDB4YTY2OWU1MTMsCisJMHgyZmY5ZTkyNiwgMHhjZDk3Yzg4ZCwgMHhmYzkzODdmMywgMHhlODliY2Y2NCwgMHhmMzliZmRlNCwgMHhjNzkxYjI0ZCwKKwkweDQ3Y2ZlZWFlLCAweGVmNTlmZjNhLCAweGYxMjM1OTI1LCAweGUwYTllZjczLCAweDE5YjQwNWFhLCAweDNkYzRkMWQ3LAorCTB4ZWYzZDJhMjUsIDB4MGU4NmYxMTYsIDB4NTRmNmZiMWYsIDB4YWM3OTk3OTAsIDB4NzVmYjRlY2UsIDB4ZmQxNzdlZTIsCisJMHg0MTc5OTc1ZSwgMHgyMjQyZmRjYiwgMHhkNjI0MmFmZiwgMHg1ZTQ0MzdjMywgMHhhN2U2M2NkNSwgMHgzNzY4MTdlZiwKKwkweDc1YmY1MWQ5LCAweDZlNjBmYjg4LCAweGYxYmI2MTYyLCAweDQyNWVhNjdjLCAweGI2YmQyNmJmLCAweDdlYjk4ZTYwLAorCTB4Yjc1Y2M4NzMsIDB4ZTdhOGEzZGUsIDB4ZGViNGZjY2QsIDB4ODllZjE1M2YsIDB4OTk5ZGZiZDMsIDB4ZDNlYzNmNDIsCisJMHhiMDNjNWQzZSwgMHg2NzUwN2UyZiwgMHg3MWU4MWY4ZSwgMHg0M2NjMWFiZiwgMHgxZTE4ZmRhNiwgMHhlNGU1OWJmNywKKwkweGJiOGY0ZmUzLCAweDU2YTM3ZjY4LCAweDE2ZTMzNzUzLCAweGM1YjNlYTBjLCAweGM2OTY3Y2YwLCAweDhiYzYwZGY1LAorCTB4NTlhMjllZjAsIDB4NmYxZjdlOGEsIDB4ODBlN2JmNTQsIDB4ZjkwOWNiYmUsIDB4MGRkYzYzMzYsIDB4NWVlOTMwZjMsCisJMHhkZjFlNzBhYiwgMHhhMDcyMTE1NywgMHgwZWNlMTljNywgMHg1ZTY0NjdmMywgMHg0ZGI1YmY4NCwgMHhiYTllZTliMiwKKwkweDEzYjg5NWZiLCAweDAwZmVlMGY5LCAweGYwNGFjM2NmLCAweDZmMTRkNDcxLCAweDQ5YTkzNmQ1LCAweGViZWJiN2VmLAorCTB4OWUwYWY0MDcsIDB4M2VlMDcyNGYsIDB4MDFmN2QwMmYsIDB4YzYzNWU4MjUsIDB4ODg3YjM0MjMsIDB4ZjRmNzc2ZWEsCisJMHhmMmYyM2YwZSwgMHhlMzY2MWIwMywgMHg5ODhkMTA1NSwgMHhjYTc2MGMxZiwgMHg2OTU3ZGEzYiwgMHgwM2RiNzY3ZCwKKwkweDYyMWVmMTg3LCAweGM3ZTZkYmI3LCAweGIzNDFiOGY1LCAweGEzNTdiZWQxLCAweGVmZWI0OWNmLCAweDhiZGFhOTdhLAorCTB4ZWJmN2E0ZmMsIDB4YWUwODU0ZWUsIDB4MDY1MTVhYjMsIDB4YWJmZjA4YmIsIDB4ZGEzMzRmZTAsIDB4ODdkZjMxYWYsCisJMHg5ZTM3ZGZmNSwgMHhkZGZhZWQ0NiwgMHgwYTcwNzViZiwgMHgxMzFkNTljNSwgMHgxN2JjMDE2ZCwgMHhiMWFjMWQ1YywKKwkweGNmYzkyNDNmLCAweDkzNmYxYmVjLCAweDU0OWZiNDkyLCAweDc3NDk0ZmY4LCAweGY1MDdhNzdiLCAweDdjOTZiNzQzLAorCTB4MmRjOGJhM2YsIDB4M2ZjMmZiODksIDB4YjIyYzNjYTUsIDB4NWYzM2MzYzQsIDB4ZWZjNzFlMWYsIDB4OGExYmNlYTUsCisJMHg4YTNlNDkwYiwgMHgyYjZmMjBkYywgMHhjY2Y1OWRjNywgMHhlNDdjOTNmMCwgMHgyZTFjN2NmMiwgMHhhYmRhOGRiNywKKwkweDZjMzc5ZTRlLCAweDE1MmRhN2JlLCAweDQ5NzhlYTNmLCAweGM4ZTUwNzg1LCAweDM3ZTc4YzVkLCAweDdmNzE5OTg2LAorCTB4NDNjNTJkY2UsIDB4NGUzMmQ3OTQsIDB4YjhhZmJhNDksIDB4NTFhMWUwNTYsIDB4Y2FiZjEwMDksIDB4Yjg5Yzg2ZDcsCisJMHg0ZjY0MzQwZSwgMHg3ZmZlZTI3NywgMHgyOGNmZTJiMywgMHg4OGYwZmI0NCwgMHhkNjZlMzBjYywgMHg4ZGNiMzVlNCwKKwkweGZiODhiNjVlLCAweDZkYmFlNzQ1LCAweDc1NTllZjQ5LCAweGVlZmY5MmRhLCAweGJlNmU1ZGNlLCAweDlmZWNiNDRlLAorCTB4NTJkZWU3NDIsIDB4ZDQ2ODA5ZjEsIDB4YTVhNWQ5MTAsIDB4ZjNlZjE3OGEsIDB4NWUxY2VkOTYsIDB4MDRmYzhhNTcsCisJMHhmYzU0ZGZiZCwgMHgxNzdlZWY3MSwgMHg2MTk5M2RmZiwgMHg2NTlmM2E0ZSwgMHg5YzQ5YWYxZCwgMHg3ODAyNmJjMywKKwkweDFhNmRjZWQwLCAweDZjNzg0MWRjLCAweGQxNzhhODlhLCAweGQzZjk3NjhlLCAweDVlZDBkMzk4LCAweGVmNDg5Y2M5LAorCTB4NzhkOTZhY2YsIDB4YTUzNTkwMjYsIDB4NGYxZDNiZTAsIDB4OWY2ZGI5ZDcsIDB4MTZjMmZmOGQsIDB4MGRmOWNiZmUsCisJMHhmYzBkY2JjNSwgMHhmZjE5M2FiNywgMHg5ODNjODc1ZCwgMHhkZTM3ZTFjMywgMHhmMjY0YTlhYiwgMHhiYzJiM2ZmZCwKKwkweGRlM2U3ZTdhLCAweDlmY2M2ZTg3LCAweDg0NWYwNTJhLCAweDFjOGU4ZGM3LCAweGVjMGMzZTlhLCAweDMwM2FiZWRkLAorCTB4ODZkNzhjMzgsIDB4NzNmYjhlN2EsIDB4ZDEzM2E3NzEsIDB4NjQ3ZGQxYmUsIDB4NzU0MjkzNzYsIDB4ZGYwN2RmM2EsCisJMHg2Y2Y3ZjEwNSwgMHgzOWZkYzRkYSwgMHhjMWYzYTgzNSwgMHg0NWJlYWE4ZiwgMHg5ZjU4NWU2MywgMHhiYjJjY2FlZiwKKwkweGRhNTFlNzE3LCAweGFiOWY4MDcxLCAweGY5YTFjYjY5LCAweGFkZWY4YjU3LCAweDljM2RjNmYwLCAweDJmMWVlMzlmLAorCTB4ODJjNzE5OTUsIDB4NzdkZmMwM2YsIDB4ZjM0OGViNjgsIDB4MmRiNzFjNjMsIDB4ZDYzOWRiOGIsIDB4ZjViYmNlZWYsCisJMHhiMTU2ODczYywgMHhmYjQ5ZDFkZiwgMHhmODMzMzkxMiwgMHgzYmJiZDQ3YSwgMHhmZWEzZmM5ZCwgMHhmN2UwNjlmOCwKKwkweDhkZWM1ODY5LCAweDk0MzY3YmJlLCAweGQ1MWRkOTM4LCAweGM3ZDBlZWMyLCAweDgyYzQ1ZDJmLCAweDJmNGJiYmY4LAorCTB4MjcxNmIxYTUsIDB4ODQzYjg3ZDgsIDB4MmRmNjMyMWMsIDB4NzgwYTVmYjEsIDB4N2M2ZmI4MDQsIDB4M2ZlZDE0NzEsCisJMHgwNGJkZmRlOSwgMHhjZmI2MTJjYiwgMHg5MTJjZWRjZCwgMHgzZmMwY2ZlNCwgMHg2ZmJhNjYzMSwgMHgzOWQ5YzZhZCwKKwkweGJlNDdmNTFjLCAweDQ2ZWRkZTFjLCAweDY3NThlMzNmLCAweDVlZGJkNjJlLCAweGUwZjY0ZDNkLCAweDczZjBmMGE1LAorCTB4NTFjMmJmODEsIDB4NTcxZTdkYmEsIDB4MzVkNjcxOGQsIDB4ZjQ1ZDk1Y2YsIDB4YzYzNTVkN2MsIDB4NTBmZTBjNDMsCisJMHhlOWIzNmYwMiwgMHhhMTdlYmY3OSwgMHgxZmU4YmYzZiwgMHg4ZDM5MmJlMywgMHhhMDlhZTljOSwgMHg0YzhiM2U0ZiwKKwkweDBhN2QxOGI4LCAweDI1ZDIzZGU4LCAweDFmZDM5YTNhLCAweGRlNjBmOWY3LCAweDYwN2ZkNzY0LCAweDA5ZWYyN2QxLAorCTB4OWY0ZmZkN2EsIDB4YWUyNjM2NmYsIDB4NDBlNTNmMDEsIDB4ZjE4OGU3ODksIDB4OWZiYzViZGUsIDB4NmZjNzk0ZjcsCisJMHgxNWIyN2Y1YSwgMHhjYjM1NTNmNiwgMHgyYzY5ODdjMCwgMHg4ZGZhODRlMiwgMHhkMTY3Y2U4ZSwgMHhmYWViZDNmZSwKKwkweGM3YzExYmZiLCAweDM5ZmQ4YzlhLCAweGYyZTkxY2I5LCAweGI5MjhiZDViLCAweGVkY2I3ZWRjLCAweDNjMGVmYzIxLAorCTB4YmVlMGY3MTYsIDB4ZmM2MjhiYzcsIDB4ZTgxZmQ4YjYsIDB4NzZiNmIzYmUsIDB4M2Q0ZmUxOTksIDB4OTYxNDVjMGMsCisJMHg0ZTgyNWFjMywgMHhlYmUxZmJmZCwgMHg2MGZmMmU4ZiwgMHgwYjcyOGU0ZSwgMHg0YTM5NDdmOSwgMHg2YmZkY2I1ZiwKKwkweGRmZThjZjVkLCAweGNmYjQ3OTE1LCAweGVlOGYxZjY2LCAweGM4YWM0ZTc3LCAweDc1NzI0MzkzLCAweDA1ZjQ0MzA4LAorCTB4N2JiZGY5NmIsIDB4YTJmZjBiNmYsIDB4ZDM5ZmRjNWEsIDB4MThjN2RmYTUsIDB4ZGUzMzY5MWMsIDB4NWE3NmY1YmIsCisJMHg4N2ZkMTQ0MSwgMHhlNWY3ODdiNywgMHhlZDFhZTYwOSwgMHhmMDU3NmFhZiwgMHgxYmJlZjBkZiwgMHg3Y2E2NTQ3NiwKKwkweGMxYmMwZmQ1LCAweDlhMmZlZTBjLCAweDcxMmVhN2ZkLCAweDNmZWU4ZWFmLCAweGZmZGY4YjM1LCAweDdmMzk4MzYyLAorCTB4MWRkMjRiMzcsIDB4OTFmZmIwZjMsIDB4NzJhZjc0OWQsIDB4YTc1ZjJlNmUsIDB4Y2M3ZjczZjUsIDB4ZjY0MjU5ZDcsCisJMHg1NGFiZTBiNywgMHgwZjM5Zjc3YywgMHg4M2Q0MGY5NywgMHhhZDdjYTQ5MSwgMHgwZGJmOWU5YSwgMHg3MGM0NjBlYiwKKwkweDUzY2VlODRlLCAweGNmMWNlOGMzLCAweDc4YTAxNjEyLCAweDc0OTY5MmU2LCAweGJkZTAzMTE2LCAweGY5ZTRmMWVkLAorCTB4YmU4NDhiMzUsIDB4NGVmNzEzNmYsIDB4NWU3Y2QxYjMsIDB4ZjNlN2JlMDksIDB4MWM5NzViNjgsIDB4YmUwYzllZWUsCisJMHhmYjg5YjcwZSwgMHg2MDk0ZGJjNSwgMHhkNTI5ZTIzYSwgMHgwNzhmYTEzYSwgMHgzY2E3NGIwNCwgMHg2ZjA3ZjM4NywKKwkweGU2ZmQ3MWEwLCAweGZhMjU3ZjcxLCAweGIyNmZmMTdkLCAweGMwMDM3ZGY4LCAweGQ4MjdkMGEzLCAweDliMWUxYmZlLAorCTB4ZTJiZWJlNDksIDB4YjNmYWFjZjksIDB4MjRmZWI0Y2MsIDB4OWU5MzNlZjAsIDB4OTI3ZDc2N2YsIDB4OTI3ZDA5NzksCisJMHhmMjUxZWY0ZCwgMHgzYTc4Y2VkMCwgMHg3Yjc1ZWZjNiwgMHhjZTZkYjBmYSwgMHhkYjc0MjQ5NiwgMHhhYWY0ZTQyNCwKKwkweDNmZWU4NTFjLCAweDc2ZTcxNTFiLCAweGI5NzZhYTQwLCAweDYzOWVlMjU5LCAweDdjMmI0NzgxLCAweGY5YzljNWQ5LAorCTB4ZmUwY2E1ZTMsIDB4N2U3NGY1N2QsIDB4MWJkZTMzNGYsIDB4YjI4NWYzOGYsIDB4NzVmZDAwMjAsIDB4ZjQyMmQ3NGQsCisJMHg2ZmUyNWZmYywgMHg3YWI0OWM2MiwgMHhiZjhmYzNhNywgMHhkM2I1ZDdjZiwgMHhhMjdhODE1NSwgMHg2MmEzYTc2YiwKKwkweDdlOWZkNjhiLCAweDNiNjYzY2JiLCAweDRjY2Y5OWY3LCAweGY1OGM3ZmJmLCAweDcwNTE3NGEwLCAweDVmZDFjZmMyLAorCTB4M2VlOTk3NjgsIDB4OTI3ZjZiNDksIDB4ZWNmMzRkYzcsIDB4ZWMyOWU3ZDMsIDB4YjliOWFmYjAsIDB4ZTc0ZWNkM2UsCisJMHhmMTE3YjE3NCwgMHg1NzJhZDQ3NSwgMHgxZDNjODU0NywgMHgyZDkwZjIxNSwgMHg3NTg3NmJlZSwgMHg5MmViODljOSwKKwkweDAyMTdlZWRlLCAweDJjYzM5M2RmLCAweGU3YzE3ZGU5LCAweGIxMmUwMmRkLCAweDc2YmMzYzJlLCAweDA0YzNmYjA2LAorCTB4MDhjZTdkZmMsIDB4N2VkYTE5YzUsIDB4N2VjMDJmMTMsIDB4ZGM3OGNhYmIsIDB4MTZmZGZhYzAsIDB4OTk4YzY3YzEsCisJMHgzMzQ5ZWFlZCwgMHhiOWU2MTJmZCwgMHhjNWU0OThiMCwgMHhmZGJkN2M3ZCwgMHhiN2JmMThhNCwgMHhkM2I5ZmZmOCwKKwkweGRiYzVlY2ZiLCAweDgwN2JiZmM4LCAweGY0OWEyZWZmLCAweDgxZWI4YTUzLCAweDYxYjQxNzBkLCAweGMxOGZkMTVlLAorCTB4NWZmODMzOGUsIDB4MWRlOGIyYmYsIDB4MGJhZjNjMmIsIDB4ZWZjNGRhNzgsIDB4ZWI4ZDMyODcsIDB4ZjU1ZDJiNjEsCisJMHg3NzlmNGM3NSwgMHgxY2IzMDBmNiwgMHhkN2ZmODJjOCwgMHg5NjQ3MzI4YSwgMHhiOTc0M2M2OCwgMHg3ZDdjNTkxYywKKwkweDVjYzRmOWU2LCAweDQ5ZDJlMjRmLCAweDFlNTg1OWNmLCAweGJjYWY3MDAzLCAweDkwZTZmYzQzLCAweDk1ZGNlZjg4LAorCTB4MzFlZjNlMTksIDB4ZTlkYTNkZjAsIDB4YmIwOTdlYjQsIDB4NmZkYzRkYmMsIDB4YTg4OWRiYTksIDB4NDY2YmM3NGYsCisJMHgwZTAyMjNiOCwgMHg0YWQ3ZDcxYiwgMHhmMzBkN2Q3MiwgMHhlMmE3YmYxMCwgMHhmNjEyN2VhNiwgMHgyNjJiYjcwNiwKKwkweDE2NmRmYzBhLCAweGIyNWY1MWU3LCAweDNmYjIyNmIxLCAweDM5NzQ5ZTA0LCAweDk2NjE5NTFkLCAweDdmOGNhMmQzLAorCTB4YWNkZDM5MGUsIDB4YTQ3MjdjZjIsIDB4Nzg3ZDMyNWYsIDB4OTQyN2VkMWUsIDB4NzFjMTYzODcsIDB4NDU3MmM3OTgsCisJMHg1ZmEwMGI0OCwgMHhmZjMxZGE1YSwgMHgwY2YxZTYwMCwgMHg5NDNmODNkZiwgMHhlMWUzOTA5MywgMHhiZmIxOWY4MiwKKwkweDJkZmMwNjQ1LCAweGYwOWI3MGM4LCAweDdmOGNmOWY3LCAweGY4NzdiYjBlLCAweGRmMzdkNjMxLCAweDdkN2EwY2RiLAorCTB4ZTVjNjg2NTUsIDB4OTQyZmZjMDAsIDB4OWE3ZjhhODMsIDB4ZTAwZTg2ZjksIDB4YTA2YWFlMzksIDB4OWQwY2FhM2IsCisJMHg4YjYyZGEzZiwgMHgzZWQwYjlkNywgMHg2ODAyYzYzZSwgMHgxNmM3Nzc1ZiwgMHg3ZjAwYzZkYiwgMHhmNmUyNmY3NCwKKwkweGRmOWU5ZjYzLCAweDdhMDVmMWM4LCAweGY5N2E4NjM5LCAweGY0YzE2MzhhLCAweDI3NWY1MGQxLCAweDQ1OGFlM2Y4LAorCTB4MTRlN2RmOGMsIDB4Y2ZkMTQ3NzMsIDB4Y2U0NGY1ZDYsIDB4NzAzM2JkNGQsIDB4N2E2NTc3ZGYsIDB4ZjBjYjgzNWQsCisJMHgzYjdkYWZiYywgMHhlODRjMmZiNCwgMHgzN2Q0NmE5YiwgMHg3ZGY2ZDRmZSwgMHg4ZDNhNDY2YiwgMHhlMjA5ZWI4NywKKwkweDczM2E1NjY1LCAweDk3OWUwMGJhLCAweGVlMzIyMzBhLCAweDQ1NzRiZTZiLCAweGU3YmM3OGUxLCAweDc4NWE1MGZkLAorCTB4N2VmODZhZjQsIDB4MGUzZTFjZDIsIDB4YWY0NDc3NmIsIDB4ZDJmZjEyNDgsIDB4ODhhZTc1ZjUsIDB4N2M4YWU1NGYsCisJMHg1ZTM0ZGNlZiwgMHg0NWY0MmM3ZSwgMHhjMWYzOTc4MywgMHg5ZWJjYmRhZiwgMHhjZjFlNDllYiwgMHgxN2VmMTFlYSwKKwkweGRjZWY1Y2M4LCAweDJlZGM5NjU3LCAweGM2N2M2NTg5LCAweGIyNDA2M2Y4LCAweDE5NjNlM2M2LCAweDZmOWVlMjM5LAorCTB4ZWI1ZjQyNWIsIDB4N2M0MjczZmMsIDB4MmVkZjhmYTcsIDB4OWNmY2I1ZTYsIDB4ZTU5ZmUyNjQsIDB4Y2RmMTFkNGEsCisJMHgzZDBhNzNmMiwgMHgxNTIyZTVkNywgMHg3OWZiZTlmZiwgMHg3OGUxMWQ5YiwgMHhiZTdiZDQwNiwgMHhjNjA5NjFmZSwKKwkweGU5ZWYwYTBkLCAweGY4NDhmYmUyLCAweDUyNTM0MDdiLCAweDFlYmU4N2NiLCAweDNkMDZmNGU4LCAweDBkZjE4NmRmLAorCTB4MjcxM2YzZDAsIDB4MThmNDNhZDMsIDB4OWM4NTk3NWYsIDB4MWZmNGVjMWEsIDB4YjY1OWVmZTAsIDB4ZDQ1NTVjNzUsCisJMHhkZjZiYTA2MCwgMHhmZWUwMTk3YSwgMHhkOTVkNzU4YywgMHg1N2M0Yzk4MCwgMHg4OWQ3OWVhNywgMHhhM2VmMmNjZiwKKwkweDI1ZTFkODUyLCAweGJjM2I1NzdmLCAweGM5M2M2M2I0LCAweDU3ODExMmVkLCAweGM3YTZkZTNkLCAweDUwN2IxOGI1LAorCTB4MTNmNzMxZjgsIDB4ZTRjZDI3N2UsIDB4ZGZmODBkZjIsIDB4OWEzZmYwMjEsIDB4N2RiYmZmZTMsIDB4ZWM5NWJmZjgsCisJMHgyZjJlNTY4NCwgMHhhNTJiOWRiOSwgMHhmYTJmOTI2MiwgMHhhNGRkZmY0ZSwgMHg1MmFmZDNjMiwgMHgyZjc4ZTc3ZSwKKwkweDEzZmZlN2Y3LCAweGM5NTU1MDg0LCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZDVmZjAwLAorCTB4ZDVkNDdjNzksIDB4Y2VmZGY4YjUsIDB4MzMyNGI2NzcsIDB4NWY2NGNjYzksIDB4MjU4NDkzMDgsIDB4MjEyNjEyNmEsCisJMHgyNjUwNDEwOSwgMHhjNTExNjEwOSwgMHhmYjA5NDA0OSwgMHg1MTU5ODNiMCwgMHgyZmI1Njk2YywgMHg0YTQ0NDEwMywKKwkweDUwNWQ4YmRmLCAweGQxMDFkYTk0LCAweDEwMWFjNTVhLCAweDgzYjA2MDM0LCAweDY3OTU2MjJjLCAweDA1YjA1NGE0LAorCTB4MjEwOGVlM2IsIDB4ZjE2YjQzYzksIDB4M2RkZTVhNTcsIDB4OTk5YmRlZTcsIDB4MDA2Njc3ZWYsIDB4N2U3ZWJlN2QsCisJMHhkZWI4ZmYwZiwgMHhkZWY3Y2JiOSwgMHhmYjNkY2U3MywgMHgzYWIzYzliZCwgMHgyMTA5NGIyNSwgMHgwYjYyYTIxYiwKKwkweDk5OTQxYzQ4LCAweGM4NGIxMjVlLCAweGJkM2UwOTg4LCAweGU5MDg0NGRkLCAweDk1MjQyNDQ4LCAweGE0MjNhZWZlLAorCTB4NDc1YWVhMGIsIDB4MjQyM2M5MzIsIDB4YmQzODllYWQsIDB4YmVkMTllYjQsIDB4ZmFkMmQyNWYsIDB4ODYzN2Y4NjUsCisJMHhjOTRhZDMxMCwgMHhmZTllMzBiOSwgMHhkM2I2OTRiZSwgMHgzYTE2NmRkZiwgMHg5ZWQwMzEzMCwgMHgxNjA5ZWJjYywKKwkweGQwMjUyMTNiLCAweDgyMGQyN2NmLCAweDkzNmYzNmY5LCAweGI0YmU3NGI0LCAweDYyOTA4OTc2LCAweDJmMTMzNjVhLAorCTB4NGI4YzBhYzksIDB4OTllZmIwNzMsIDB4MDE2OTVlMWMsIDB4YmI0OGRmZWQsIDB4YWM4NDkxOTEsIDB4NTllNzU0ZDMsCisJMHgxNDk5NjgxMiwgMHhiZmE1NjhlMywgMHgwN2JhYjA2ZCwgMHg0ZmVhN2VjMCwgMHhkYTY2N2NmOSwgMHgyZWE5YzQ2NSwKKwkweDdiOGU5YmFkLCAweGI0Y2NlYWMyLCAweDYzZjYwNjI0LCAweDI0NjkyZDk3LCAweDUzOTg5MDg3LCAweDM2NmQ5ZDZjLAorCTB4ZmIwNWQ3MzIsIDB4MTc0Y2ZlMjMsIDB4YzYzZjI0MGMsIDB4MTViMjExZjUsIDB4OTMyODliZDcsIDB4YWI0NmM0MjMsCisJMHgyZjdlODdkMCwgMHhkNmVlNzU2OSwgMHg3ZDYwNTJmNSwgMHg2ZWUyMzY0OSwgMHg0OTQ5NmRhNywgMHg4NGQzYmRjNCwKKwkweDIyOTFkN2ZkLCAweDcwNDhkN2RhLCAweDg3YWI0OTNmLCAweDA1OWY1ZDZjLCAweGRlNzE3OWYzLCAweDM2ZDcxY2FhLAorCTB4ZjkyYWJkZjgsIDB4ZmE1NmEyYmEsIDB4OWYwNmNlN2IsIDB4YjcxZDNlNzYsIDB4MDI2NmIzNzcsIDB4MmJjYzUzZWMsCisJMHgwOTE2ZDFjYSwgMHg4YzdkZDFjNywgMHg3ZDg5ZmQ4MCwgMHg5Mjg5ZmJhOCwgMHg1YmFlMGYxMCwgMHhiMzQ1ZDNmNCwKKwkweDViZjY4NWZkLCAweDRjYzZmMzg1LCAweDZkMGRmMDYwLCAweDJmNmM3N2ZmLCAweDBjYzI2NWZmLCAweDFhZmQ2ZjU4LAorCTB4MDE0ODMxM2QsIDB4NzU2MTNmZjgsIDB4NGQ3MDAyZGQsIDB4MDEyMmRmNmIsIDB4YTY4YzNlNmMsIDB4ZjAyYzM0NzQsCisJMHgyOWEzMGZkZCwgMHg3NmIwMTUzZCwgMHg4N2YzODUzYiwgMHg3OTQ3NGE3YSwgMHhiNDhhM2EwMSwgMHhiMjk1ZmFmZSwKKwkweGEwZjBlMTczLCAweGUyM2QxYWZhLCAweDJjOWU4YjY5LCAweDVlMGJjZjZkLCAweGRmNWM2YWRmLCAweGNiMDY4YjIyLAorCTB4MmNkNzU2YTMsIDB4Yzc2MzRmODAsIDB4ZmJjMDdhYzMsIDB4ZTgxZjZkYjIsIDB4Y2VmODU3ZGQsIDB4ZWU5MWMyYjUsCisJMHhlMjk2OTU3ZiwgMHhiMjVkYWViZCwgMHg0YWU5MjgxOCwgMHhlODEzOTJlZCwgMHhlOGQ2YmVhMCwgMHg2ZmQ0NzgwNSwKKwkweGQ2NGI3NDY3LCAweGExODNiZGU4LCAweGE3YzNiZWRlLCAweGY3ZTllZGExLCAweGZkMzIxZDNiLCAweDBlZmI2ZWI5LAorCTB4N2MxMDUxNjksIDB4MTJiZGViZDMsIDB4NTlhODZiYWMsIDB4MWU5ZjJiOWMsIDB4ZmU4YTk1Y2YsIDB4NDU3ODUxMGYsCisJMHgxYzNiYmE1MSwgMHg1YTQ2M2M0NSwgMHgzYzliOTc3NiwgMHhiNzZmODUxMiwgMHhmZDBmNWRjZSwgMHgxYzYzNTNiYSwKKwkweGY1ZWZkYTFlLCAweDQ4OGZlMzFkLCAweDc3OWFkY2Y0LCAweGFlNTA3YzFhLCAweDMxNGQ2Y2QzLCAweGQ3NzVmNmQyLAorCTB4NDFhZDFkZWIsIDB4YmFkMzY3NzQsIDB4NmIzOGMxNzYsIDB4OGFiMWQ5ODIsIDB4MjA2ZWNhN2UsIDB4OWMxMzE2NDUsCisJMHg0N2ZlMjU3NywgMHhjNWNlY2ZkYywgMHhhMzJjNGI2ZSwgMHhlMDhhNDIyMywgMHgzMTZlM2M1YywgMHg4Mjg5M2Q2MywKKwkweGY3ZDI4Y2JiLCAweGQ3NWIxZDYxLCAweGUxZThjMjRlLCAweDgzNmI5YzUyLCAweDIzZTNiZjA1LCAweDNhZGUzYTBlLAorCTB4M2E5NzlkODEsIDB4N2U4OTFmYmEsIDB4MmVmMzZlYWYsIDB4NjIzOTI3ZGMsIDB4NmZhN2I4NDMsIDB4NzViYmYwOTcsCisJMHhiOWUwYjdkYiwgMHg3M2JiM2FjZSwgMHgyZmZhMWViZiwgMHgyNDUxYTUyNSwgMHgxYjljY2U5OCwgMHhkNWVmY2Y4MywKKwkweDQyNjIzNWYwLCAweGFkZTgxZWJiLCAweGYyYTFmMzhlLCAweDNlOTM2ZTVmLCAweGFmZGZkYTBhLCAweGEzYzIzMjJkLAorCTB4ZmRiNmYzNmUsIDB4NjQ3YmY0NjksIDB4YjYwY2IxMjksIDB4MTNmZGJmNjMsIDB4MDZiNWY3ZDksIDB4NjA3ZmM0MTIsCisJMHg5ZDZjNzk5ZCwgMHg4ZmY4ODI4YiwgMHgzZTE4N2ZkOCwgMHhhZjU4NWJmNCwgMHg0MWQ3NTRlOSwgMHg0ODdjODdjNiwKKwkweDZhZmQ2MjhmLCAweDdlNzA3NmJjLCAweDNjNGY0ZTM4LCAweDkzZGViYmY4LCAweDFkZjNhNzZiLCAweGY5YzY4ZWNlLAorCTB4NzM4MDVmMDQsIDB4YTVmOWMzNWMsIDB4NjIxM2Q2ODYsIDB4NWEwZWI5ZTgsIDB4OWU2ZjU4OGYsIDB4ODJkM2EyYjUsCisJMHgzODQyZTg3MCwgMHhlMmQ2NmMzNCwgMHhhZWY0YWJmYSwgMHhjZTgzY2I0MSwgMHhiOWY5ZWZjMywgMHhmYmRhNmQ3OSwKKwkweGZkZmQzZjdhLCAweDgzYmYyZmU3LCAweDkzNjg2OWY4LCAweDQ4Y2ZjMDljLCAweDNiZmEzYmRiLCAweGJmYWMwMWYyLAorCTB4MjExMjQ5OTEsIDB4YjdmYjA4OTMsIDB4N2EzYmY3NzEsIDB4ZDI3ZGZkM2IsIDB4ODZiZjg2MmUsIDB4MGJiNDNiNWQsCisJMHhjY2ZhMDE0YywgMHgxY2RhZmIzYSwgMHg3Njg2YjNhMCwgMHgwMDkyODkwMywgMHg1ODJlZWU3ZiwgMHgwNTRlOWE4ZiwKKwkweDhkZGYwNDNjLCAweDA5OThjZjg0LCAweDBmMTI4ZjhjLCAweGNmNDg1ZjNkLCAweDczMWFhY2VlLCAweDhhNWY2ZjgwLAorCTB4MzUzYTMwZDMsIDB4MmRiYmRmYjEsIDB4MWZhMDFlYWMsIDB4OTc0MDA3ZjcsIDB4ZDc4ZWQxNTUsIDB4MTU1NDVjZTAsCisJMHgwMjU2OGU0OSwgMHhmYjg2M2NlYiwgMHg3MDY0YTg0OCwgMHg3NTRmNWUwYywgMHg5OTdlNjQ3ZSwgMHg4NWU1Y2YxOCwKKwkweDYzNTk5ZmQ2LCAweDdlYWY5YzBlLCAweGY3YzdjZmJlLCAweGZjOTk1ZTAyLCAweDQ5ZGZiMWYwLCAweGIwM2YyYmI2LAorCTB4ZDJkZTM1NmUsIDB4MGZmNjEyYWQsIDB4MDExNzRmNDMsIDB4MjZiOTZhN2UsIDB4ZTNlODJmZDYsIDB4MGFiNTliZDcsCisJMHhlYWIwNjFmOSwgMHg1NTgzM2U3MSwgMHgwOGRiZWI4YiwgMHg3ZTcyYTFmOCwgMHhjYjlkOGVhMywgMHg1ZThjYWI4ZCwKKwkweGM3ZDMxZmU0LCAweDlmMjg5MTFkLCAweGZiZDBjZjM2LCAweDk5YTQzY2EwLCAweDg3ZWQwZjVmLCAweGQ3ZjdkOGQyLAorCTB4NDM3NzM0NjksIDB4MTM2YWRkN2QsIDB4M2E3YzQ1NjksIDB4YTA0NGQ2OGQsIDB4NGJjNDU4OWIsIDB4NmJkZWFkN2QsCisJMHhmY2ZjZjNhMCwgMHhlYWJmYzY0NSwgMHgwMTJmMjYzZCwgMHhiYTllZTgzZSwgMHg4NDkxYzYxMCwgMHg4MDUzYzcyOCwKKwkweGZkNDFmNzM3LCAweDdhNTBlNjFkLCAweDZmNjNkM2IyLCAweDZhNGZiZmE3LCAweGUwNGNlNzY3LCAweGE0NTFmMjgxLAorCTB4MDRiZjIxMmIsIDB4ZjRmMDAzNWMsIDB4YzA4ZGNlMmEsIDB4MGIzOGE1YzcsIDB4MmNlZTViZTcsIDB4MzNkZDc3ODAsCisJMHg3MzhmZGU1MSwgMHgxMzJlYjdkOSwgMHhhMmFiNGJhMCwgMHhlYTkxZDRkZSwgMHhhODE4ZDhmZCwgMHgwMGZmYzFkNywKKwkweDUyYTc2YzFkLCAweDgzYWU5NGFkLCAweDc2NWQzM2FmLCAweDZlZmIwNzVmLCAweGViMGZmYTMwLCAweDRmNGI2YTI4LAorCTB4OGViOWUxZjYsIDB4MmI3NWI3NDQsIDB4OThmYjRjZGYsIDB4YTU3NzQzZWEsIDB4MzhhNTgxYmMsIDB4YTU2Y2JhYWYsCisJMHg3OGU1MmUzYywgMHg5YmNiYzAxZiwgMHhkNDFmOGNhYywgMHg3OWUzYjcxNSwgMHgxOWI4ZmJhYywgMHgwMjY5YjFjZiwKKwkweDUzYTY2N2UzLCAweGM4NGQ3ZTRhLCAweGIyYmViODRmLCAweGM1NTdjNzAxLCAweDI5OTM4ZmI0LCAweDI1N2VhYmRjLAorCTB4NjQ0OTVhNTksIDB4MjI0NGI5N2UsIDB4OWZhNzkwMmUsIDB4M2IxMDNlNmQsIDB4ZTk3YmUwMGYsIDB4OGRmYjhjYjIsCisJMHg2YzlkZmI2MiwgMHhmYmE4ZTc2NSwgMHhhNDcwMGExOSwgMHgwOTNkNjZmNywgMHg5ZDZiZGZiMywgMHg0YjhlZjg4ZiwKKwkweDBlM2FmNzgwLCAweDk1ZWRlZWViLCAweGY0YTEzZjIzLCAweGNlMjY3OWUyLCAweGRjZjdmYzAxLCAweGY4M2YyOWY2LAorCTB4N2JiYmFlODQsIDB4OWI5NDE4ZGIsIDB4YTQyZWFkMDksIDB4MjhjNGJlOWYsIDB4M2Y0YTU2YzcsIDB4MjA5OTMyMDksCisJMHg2YWFmYmM1MSwgMHg4YTNiMTAzZiwgMHhiOWZjZmI4ZSwgMHg4ZjIwNDU2MSwgMHg5ZTc1ZjExNywgMHgwOTVlNTE3ZCwKKwkweGViZmQ1OTcwLCAweGY2ODY2ZTE3LCAweDBmMTRhZjNhLCAweDk5ZmJiYzdjLCAweGY4MTNmZDVmLCAweDRkNmRkMmZjLAorCTB4ZDY5MTQ5YTAsIDB4ZjdhNzdlZTcsIDB4ZWYxYTdlZDMsIDB4MzNmYmY2MTYsIDB4ZjdlODE2NzEsIDB4ZGYwZjkzZjksCisJMHg2ZDZlZjAwYywgMHhiM2Y2YzU2ZiwgMHhmYWMxNmU0ZiwgMHhlMTdlYmY2YiwgMHhmMjA3ZmZkNSwgMHg4MGViMTVkZSwKKwkweGRjNWY2NzdlLCAweDc3YTk3ODhmLCAweGRmYjA5ZDZiLCAweDcxYmQ3NDQ4LCAweDI3YzY3ZWM3LCAweDM5YzNhZTQxLAorCTB4NGJmYzY1YTgsIDB4ZGZhMGI1ZDAsIDB4NzczZDdmY2YsIDB4YTg3Y2IwNjQsIDB4MTIxOTVkOTcsIDB4MzgzNjRmZjQsCisJMHg1ZTUwOTI5ZSwgMHgxNDM4OWNhMCwgMHg3NDUxYjQ0NSwgMHhkMmQzYWZmZiwgMHg3OTJhY2I0OCwgMHhlMDFkN2VmOSwKKwkweDMzZjE4NzM5LCAweDc5MDkyMWFhLCAweDdmNDMxYmVkLCAweGNjNGM3ZGJmLCAweDJmM2JkNDE2LCAweGNmMDgzM2RkLAorCTB4M2JhMzBjNGQsIDB4Y2Y5MThmM2EsIDB4ODg3OTg0NjMsIDB4ZjMzZWEwOTYsIDB4YTg3NWU2NzYsIDB4Y2QyOTUyZDcsCisJMHhjZTEyNDlmYSwgMHgxYmE2ZTg3MywgMHgxN2I5YzJiNiwgMHg2YWY5ODVlYiwgMHgzYWJkYTFmMiwgMHhmODg5ZTQwMywKKwkweGU3NWYxZDdkLCAweGRmMjY2OGJhLCAweDUzN2U3MWNlLCAweDA3NWE2MTU3LCAweGEzZTdiOWU1LCAweDhkM2YwMTZhLAorCTB4MmIxMGZmN2EsIDB4ZDE4ZjJmYzAsIDB4MjY1NjQzZjEsIDB4OTdkYmVhODcsIDB4Mzg0ZDFhZWIsIDB4OTc3OWU3MWUsCisJMHhmMzI4MjlmMiwgMHg5NGZhNzllOSwgMHg2YmRhNTc5ZSwgMHhmMGUxZTVkYiwgMHgzZTMyZGZiZCwgMHg2MGNhNGQxOSwKKwkweDdkNjZkMzFmLCAweDYyZmMwMTIwLCAweDc1NzU5YWYyLCAweDU4ZTdkNzA4LCAweDcwNTJjNTNiLCAweDc2MGFlOTdiLAorCTB4ZmI3NGQ0N2UsIDB4Y2ZjNGQ1YTQsIDB4NjliNzNiMGYsIDB4ZWMzM2FhYmIsIDB4OGUwY2I3YzgsIDB4NTNmYTQxYzEsCisJMHhhYjc3NTJkYSwgMHhjYjdlZmU5OSwgMHhhNjQzYjcwYSwgMHhjY2Y3Yjc3NCwgMHhiNGU5NzFiMSwgMHg2OTVjZWJmZSwKKwkweDJjYWJkMjM4LCAweDMxZWM3OTMxLCAweDU2MWE3N2UxLCAweGU4OGY5MjU2LCAweGNmYzlkZmI5LCAweDY4ODU5Mjc1LAorCTB4ZTAwYTJjNmYsIDB4YjQ0YjRhYTksIDB4MWY3Zjg0MjYsIDB4NzU4NmI1ZjIsIDB4NjM2ZjVlNWMsIDB4YmVjNjI0ZWIsCisJMHgxYzY2MjljYywgMHgxNmQxYmE2NywgMHg2NzFkMDc1OCwgMHgyZmJkNjEzMiwgMHg5MDdjY2VmMywgMHg5NDVhOWU4ZiwKKwkweGFlM2Q3NjhmLCAweDVmZTBhY2Y3LCAweDNiMzA1M2M0LCAweGE4MWZjMDNmLCAweDdhMDZlNmRlLCAweDdiMzNkMjRkLAorCTB4YjU2M2Y4MDUsIDB4ZjJlNmY0MTksIDB4NDA5MmQ2MjMsIDB4ZGFjZDE0OTksIDB4NmQ5MjcwZDUsIDB4M2JhZTlkYjQsCisJMHg3ZWM0ZTZkZiwgMHg4NTc4OTllNCwgMHgwN2M0OGFmYywgMHgzN2ZlMzkxYiwgMHg0MGM1ZmU0YSwgMHg1MTNkOWU2NywKKwkweGM2ZWJhMDE2LCAweDE0NDNmZDliLCAweDUzODcwOTc2LCAweDllOWJhNzBmLCAweDBlNWU4YzNkLCAweGQ4MWUzNDY5LAorCTB4MzdhZGExZGYsIDB4NDI5NTY5NmMsIDB4YWU1MGYxZTUsIDB4NDg3NWE3OWYsIDB4ZGE0YmMwMTYsIDB4ZmUwNTFhZTYsCisJMHgwYWI3NWVhOCwgMHg1Yzg2Y2FmNCwgMHhmN2Y1MTRhOSwgMHhiZmJmZTU4ZSwgMHgyOTFiZDY4ZSwgMHhiOGRlYTBkZSwKKwkweGFhNGY5ZjhiLCAweGM2ZmY0MmE3LCAweGYwODVlYThlLCAweDg5ODRmNGJkLCAweGZkNDI1OTBlLCAweGFkM2E1YzY4LAorCTB4MTI5M2Q2MzcsIDB4MDcxYmZmMzgsIDB4ZTNhNGY3MzgsIDB4OTRmMjI0M2UsIDB4ZDUyOWU0MWQsIDB4MjY5ZTQxYWIsCisJMHhkZTNlYTNlNiwgMHhmYTg2ZGVlOCwgMHg3M2Q1YzkzNywgMHhmNTEwYjdiOSwgMHg5OTk0YzZmNSwgMHgyMTVmMzgwZSwKKwkweDJhY2Y2MjdjLCAweGVkMWFmN2Q0LCAweGRhMjg4ZWQxLCAweDc0ODc1MjdmLCAweDRjNzdkMzM3LCAweDcyNDdhZDg0LAorCTB4Nzc5MjdkNDIsIDB4NzNkNjE3OTQsIDB4OTQ0N2MwNWUsIDB4ZjAzOWFlYmEsIDB4MDZkZDllZmQsIDB4YWZlZGExZTIsCisJMHhmMjhmMTllZiwgMHhmOThiZDA1YywgMHg3NWNhMDMyNSwgMHg4MTIyZDY5YiwgMHhjNWFlN2U1ZSwgMHg0YzFhM2U0OSwKKwkweDljYjgxZmM4LCAweGRiYWNmMDExLCAweDczODFhNTllLCAweGMzYjc5ZTcyLCAweDk3MTI3YjNmLCAweGMzNmJiNDg3LAorCTB4NjdkMjFmNDIsIDB4MTNkYmQ3M2QsIDB4N2JjMmNlMGMsIDB4ZjQyN2YwODIsIDB4NjQxZDM1MjgsIDB4ZDM1ZTE4ZGIsCisJMHhlMDk0MWYzNiwgMHg3M2YxYWIxMCwgMHg2YmUyNTJjYiwgMHg2NWJiZWJhMiwgMHhhNjM3YzZiMywgMHgxOWFiZjUwMCwKKwkweGU5NTdmN2M4LCAweDc0Mjk1NmM5LCAweGM2MzYyMWJlLCAweDVkZTJhYTJmLCAweGFiMjdjMDg1LCAweGMxMWM5OWE2LAorCTB4ZGEyYWE5ZmMsIDB4ZDIwYTg5YTksIDB4MTU3MTA4ZjMsIDB4MjY3NjNkODMsIDB4Y2ZmMDhjYzksIDB4ZWFjM2Q5YjcsCisJMHg3OWY2YTE2NSwgMHhiNzRmZGExNCwgMHg0ODBhNzliNiwgMHgxNTVkNmQzNiwgMHg5MmU3MGI1ZCwgMHhmMjEzNjNmMiwKKwkweDBmMWQwYjRkLCAweDUxZDZmZGY2LCAweGJlZmIzMjRmLCAweGIxNGRlNzE1LCAweDhlZjlkODU5LCAweDgzMzcxNTc3LAorCTB4YjVjNzIwM2YsIDB4YjMzMWM5ODIsIDB4OGU3ZWRjMjMsIDB4M2UxZTg1NWEsIDB4NzQwMzUwYTcsIDB4MDBlNGQ1MzIsCisJMHhhZmU3ZjJiYiwgMHg2ZTkxZjM0OCwgMHhjMjYwNTQzYywgMHgzOGFmNzE3OSwgMHgyYmQ5OTEzNiwgMHhlMjNiYTAwZSwKKwkweGQ1YmVhMmQ2LCAweDg2ZjJlY2Q4LCAweGM3NDYyYmE3LCAweDAyZmY1NDhkLCAweDE1ZDI5YzNkLCAweDgzYjFhZGUyLAorCTB4Zjc2MTFmYzksIDB4ZDYwODlmMDMsIDB4MTJiOWM1NzcsIDB4MzVmODE2ZTcsIDB4MzdhMDhkZDAsIDB4ZjVhZjZlNzEsCisJMHhmM2YwZjY3YywgMHgxZmY3NDNkMSwgMHhiZGU2OWY0YywgMHhhZmQ3MmU4YywgMHhmYjQzOTdiMiwgMHgwOTYyMmFmYSwKKwkweDc2ZDU1N2I2LCAweDFmMGUxZDkwLCAweDhjOWZkYmFkLCAweDgyM2NjMmYxLCAweGJhYjA2ZGNmLCAweGJkNjBkYTY2LAorCTB4YWI1OGRmNWIsIDB4ZDRiZTAxMjUsIDB4MjFhMWY3YjgsIDB4OGNjZmQyNTcsIDB4ZDE5ZjM2NWEsIDB4YTYwZGUzMWIsCisJMHhiNzA1MjMxZiwgMHgwZjRiMDhiOSwgMHg5NTk4ZTdmMCwgMHhmNzIzZmRlMSwgMHhjZjRjNGNkYSwgMHg2NWZhYjZmYiwKKwkweDdjMDVhNDllLCAweDVmMzJmZDA5LCAweGUzNmJkZjc2LCAweDA4YTUyNWZhLCAweGU5OTJiOTkyLCAweGViYzA0OTk3LAorCTB4OGQ2YzFmODEsIDB4MTEzZjAyZjEsIDB4N2FmNTI2N2UsIDB4MDk5Y2ZjZGMsIDB4MjMzYjBhYmMsIDB4N2ZmNTk2MjksCisJMHgzNTliOWY5OCwgMHhiYzYzZGZiYywgMHhmMDVmYjIwYywgMHhlZTM1ZDgzYywgMHg1OTFjODgwZiwgMHhkZjcxODgwZSwKKwkweDdjNGJkZjk1LCAweDM1MjNjODQ3LCAweDQxZmFjMGZkLCAweGFhN2VjMTZlLCAweDZiZjcyMmYzLCAweDM4ZWRjZmRiLAorCTB4ZTFlZjNkMTUsIDB4ZTAxNmFiZTcsIDB4YmM2MjdhMDgsIDB4ZTcwMGVmZmIsIDB4MTljNDcxNTksIDB4ZWIzZmYxNGYsCisJMHgyN2E0MDY3NywgMHgwNDM3ZGI5MiwgMHgyZDNhZDBlYywgMHg4MDZjMThmMSwgMHgxZmQ3OWQ1NywgMHg3OGE2Yjc4NCwKKwkweDZjZDdiZTM2LCAweDFjZjRjOGY0LCAweDZmNzc4YTVjLCAweDE1M2M3OTg3LCAweDNkMDNlMWM0LCAweDVmOTQ4N2Y2LAorCTB4YmUyNGI5YzAsIDB4NGQyN2UwMTIsIDB4NzAwYjFmYzQsIDB4ZGJiYWM1YjQsIDB4YWVlNTNlOTEsIDB4M2I1M2E4NGMsCisJMHhmM2JlMDBhNiwgMHg5ZmIzMGM0OCwgMHhiZDkwZGVmYSwgMHgyZTNjMjk0MywgMHgzZWZmZmQxOCwgMHhjMmU3YWU4YSwKKwkweDg3ODcxYzhhLCAweGVmN2E3M2NlLCAweDk5ZmY3NzlmLCAweGZiYmYzZWY2LCAweDdlYzEwMWIzLCAweGVjYTM0NmFjLAorCTB4ZWEwN2M2ZDIsIDB4NmRhOTEyM2QsIDB4YmI3N2MzMGYsIDB4OTg2ZmNjNmMsIDB4YmJmMDgzNzUsIDB4YmFkZWExZjUsCisJMHgwYzk5Y2EyMiwgMHhmYjE1OWY3ZSwgMHhhNGFmOTNjYSwgMHhhYzVkMzdjZiwgMHgzZjIwZGUyNCwgMHgwZjFkMTM1YywKKwkweDhlMmU5YWUzLCAweGU2NDNkZmMzLCAweDdjODFmM2E1LCAweDRlOThiYTY4LCAweDc3ZDljMzNjLCAweDMwZmM2ZjgwLAorCTB4YzBkYmYxOWUsIDB4M2Y2YzRjZjgsIDB4ZjNmYTUxYWQsIDB4M2M0NWU1ZmEsIDB4NDIyZWQ3YzMsIDB4MWY2Yjg0MjYsCisJMHhiNWY2Y2YxYSwgMHhkZjlkOWIyYiwgMHgxNzkyNGRiZSwgMHgyYmM1ODNlYywgMHg4Mjk5M2VjYywgMHgxOWZkMzE3NCwKKwkweDE2YzVhNWY0LCAweDBiMTM0ZjhmLCAweGIxZjI4N2ZjLCAweGE5YzY4ODYxLCAweGNjOGY2YTQ2LCAweGY2OGNmMmUzLAorCTB4N2EwNjhlZDMsIDB4MWNmMDU4ZjUsIDB4OWMzOWY5YmEsIDB4ZDdmYWYxZDcsIDB4YWM1ODlmZTAsIDB4NzRkMWM2MjUsCisJMHhjNzQ2Zjk5ZSwgMHhmYmZhNzRlMSwgMHhiMWIxYTYyNywgMHhkZTE2MjYyMCwgMHhlNDA5MjUzYiwgMHg2NmFjZjI1OCwKKwkweDMyMTIyZmY0LCAweGE5ZmEwMmQ2LCAweDk3Y2I0NjQ0LCAweDBmYTRhZTYzLCAweDQ1OGY1MTY5LCAweGYwNzRhMjdhLAorCTB4MmZhZWYxNmYsIDB4MWQwMjFkMDQsIDB4ZjE4N2JhY2MsIDB4NDlmZmQxMzUsIDB4MTdmMzg2OWIsIDB4MWZiZTFkMjUsCisJMHhjNmVmZGYwMSwgMHhlODBhZmM1NywgMHhkNzM4YzFlYywgMHg3YmRlNzAzZiwgMHg1ZmY4MmJjZSwgMHhmYTdmZTQ4ZiwKKwkweGU1ZDNhMDcxLCAweDI0NTNjNzY2LCAweGMzODliYzc0LCAweDRiYjBiN2JkLCAweGRlZjFmZTBmLCAweDQ0YzhmZmU1LAorCTB4ZjVmM2I0N2QsIDB4MWJhN2MwOTMsIDB4MGM5ZjI2OGMsIDB4NWQyZWM1N2EsIDB4MDNlYzVmYjcsIDB4MzM5YzYyZTQsCisJMHhmMzhlOWUzYSwgMHhmYWRhMzgzYywgMHg5MjA5YTUyOSwgMHhmZGM3N2Y0YywgMHhkZTE0NGVkMiwgMHhiYzE5MWI3NywKKwkweDViNzc4ZGRmLCAweGVlOTExM2UzLCAweDc1N2Q4MmU3LCAweGIzOGY2OGMxLCAweGZiZThiZDAxLCAweDI2MzJlM2YxLAorCTB4MzI0M2YwMDUsIDB4NzRiYzRhY2MsIDB4OTk3ODgxYmUsIDB4MDFlYTc0NmYsIDB4MmU5YzBiZmUsIDB4MzhhY2U3NWMsCisJMHg4MTQ1ODk1ZiwgMHhmMmY5M2M4NywgMHgwNzhlZDcwZCwgMHhkM2ViOWY5OSwgMHg3MzBlNWZlMCwgMHhiODcyODYxZSwKKwkweGQxZmExMGZjLCAweGEzMWE3NGYyLCAweDY0OTlkM2RiLCAweGFmMjg0ZWU5LCAweDc3MWQyNWE3LCAweDhiZDc5YjNhLAorCTB4ZWYwODdkNzgsIDB4MzdlYWM0OTcsIDB4NWQzZGJhNzIsIDB4YmZhOWZhYzAsIDB4Y2VmZjI3NzMsIDB4NjJjZWYxYmIsCisJMHhlNzFkMTM4MCwgMHg1ZWJlMDNkMywgMHhiZTgyZjI4ZCwgMHg4ZGQ2Zjk0YywgMHg3YzVlOGNmMSwgMHg1NWJlNjBkNiwKKwkweGY4MDQzN2RjLCAweGM1MDk2ZjYxLCAweGZhY2ZkZDFiLCAweDEzY2NiZWYyLCAweDE5ZjY1N2MwLCAweDU3ZWQ1YjJjLAorCTB4YmU2NGRmYzcsIDB4YzcyZDZmYWUsIDB4OTU4ZTU0MWMsIDB4ZTRkOGU0MmEsIDB4MTBjNzI2NzgsIDB4N2EyNTc0NGYsCisJMHg0MjBkNWZhNiwgMHhjODdkMjBmYywgMHgxYjlmOGVkNywgMHhlOWRjMTlhMiwgMHg0NzhkYTk3OSwgMHg3N2NiZTU3OSwKKwkweDg2ZjdmMTA1LCAweDA0NGU3Njc4LCAweGFkMWQzOTNmLCAweDM4ZGZlM2M0LCAweGZiYzc5YzFmLCAweDY2MTZmMWM5LAorCTB4MzJmYTM5ZWYsIDB4YjZkMzllNjEsIDB4YmJmZjc4ZjAsIDB4OGIxZjFmYWQsIDB4MTk2N2JlODEsIDB4NTNjNGU2ZmEsCisJMHhlYTkzYmI3YSwgMHhjNDIyZmEwZCwgMHgwOWViMGM4NywgMHg3Y2YzNGZiMSwgMHhkY2YzODU3ZiwgMHg4MDk5Yjc3NCwKKwkweGVmODY2YmZjLCAweDU4OWUyMjI1LCAweDdkOTcyOTdjLCAweDNkNGY3Mjk3LCAweDFmODZhZmQ0LCAweDUyYTdkNWYwLAorCTB4ZjRjOTI0M2UsIDB4NTYzYzM2NDMsIDB4MWFhNzE2NzYsIDB4MTZmM2MxNmQsIDB4ZWU0ZmNmZDUsIDB4ZmE4Zjg2MGYsCisJMHhiZTM4YTdiYiwgMHhkYTRiYzZkNiwgMHgwZThmMDE0ZiwgMHg3MzcxODBlMiwgMHgzY2MyZjlkZSwgMHg3OWM5ZDI5YiwKKwkweGExYTNkMThiLCAweGJiMmRjZDcyLCAweGJiN2VjM2Q3LCAweGVhMDZmMDdmLCAweGJlZjRhN2JkLCAweDMwYTY2ZDIxLAorCTB4MTNkZjdhZWQsIDB4ZjY4MTQ4OGYsIDB4M2Q5MWJmYjksIDB4Nzc4ZTdhN2EsIDB4NjJmZjc1NzUsIDB4YmJiZmRkMWEsCisJMHgzOWMwNzY0YiwgMHhkN2ZmZGY3NiwgMHg3ZjQwMjNhMywgMHhjMDM5ZDJlOSwgMHg3NWYyYTBhYywgMHhkMWY2MTY4MywKKwkweDUzYjRmNGNjLCAweGNmZmMyNTFhLCAweDQ3Njk0ZjdkLCAweDQ2ZjFjMzNjLCAweDMzYTQwYWY1LCAweGYxNGUwZmMxLAorCTB4NjIxMmU1YjgsIDB4MTU5ZmJhNDEsIDB4ZWExNWJiMWQsIDB4NmU0YmU1ZmUsIDB4N2NlNjM4ODUsIDB4YTRlYzM4ZTIsCisJMHhlZWVjZmZmMCwgMHg1ZTc3ZTg4OSwgMHgyZmM4OWM0NCwgMHgxZjc0NzllNiwgMHgwNWQzZjMwNiwgMHg0NWY1OTRlYiwKKwkweGZkM2FjYTZkLCAweDkyZWZkMjIyLCAweDczYmZkNTQ3LCAweGY4NjU3MDdmLCAweDc4ZDFkYWY4LCAweGQzOWQyN2E2LAorCTB4Y2ZkZjZmODcsIDB4N2NiZGJmZGIsIDB4ODM3ODgxYmUsIDB4N2M4MDgwZjQsIDB4ZDVkZmMwMmQsIDB4MzkwMjFlZjMsCisJMHhkMzkwMTI1YywgMHg1ZDM3M2U0MiwgMHg4ZjMwOGE4YywgMHhiNzNmN2YwOSwgMHhkZmZhZmMzOCwgMHhlOWEzN2NlNiwKKwkweDc5ZTUxNWEyLCAweGZjMDRmOGU4LCAweGQ4NjY2YTlkLCAweGU5YjVlMDRmLCAweGM0ZjEyYTYyLCAweDNmNDJlYTA3LAorCTB4YzBjYjhjMGMsIDB4MmMwMDJhNzYsIDB4ZjgwNGM2OWYsIDB4MGIwM2YwODAsIDB4MjI0MGZlM2EsIDB4ZGZiNDU0YzYsCisJMHhhYzdhZTYxZSwgMHg1MmZjMDBhNSwgMHhhN2JjODAxZiwgMHgyNzhmNzZmOCwgMHgxMmU5ZmFhZiwgMHgzYTk3ZGRlNywKKwkweGEwMWQ5YjQ0LCAweDI4M2VmNTczLCAweDA3ZjU5YzNkLCAweGUyNGZiOWYxLCAweGFlNzgwOWNkLCAweGYwNjE5MTg2LAorCTB4NzNhNzQxNWQsIDB4MDcxNTUwN2UsIDB4ZjcyZmZlZjIsIDB4ZWIwNzI2NTcsIDB4MGU3ZWZkNjMsIDB4YTg5N2IzM2QsCisJMHgyZGM4NTUyNCwgMHhmMzZiOTJhMiwgMHgyYjFjYTgzYSwgMHgwODYyYmQ0MCwgMHhmNjhmOGQzMCwgMHhiOTNlNDc0ZCwKKwkweDgwOTIzODkwLCAweDE5Zjc3YjhlLCAweGY4MWZkMTMyLCAweDU4OTllNTJkLCAweDNjY2YxNGNmLCAweDEzMzdkMzFkLAorCTB4ZjBkNzBlNTAsIDB4NjRlOTRmZWYsIDB4ZThjNjhkZmEsIDB4ZTJmZWExZDQsIDB4MTI0Yjc2MjQsIDB4ZWU0Yzk4OWEsCisJMHhhNWEyYTE1MiwgMHgxZDQ0OWJmNSwgMHg0N2Q2ODc4OCwgMHgzMDQ4Y2RmMywgMHgyNmZmYWU5ZSwgMHhlZWY5OTI1ZSwKKwkweDA2NTczODE0LCAweGVjMGNhZWY4LCAweDY1MDI5YmM4LCAweDFkODc0OGViLCAweDRiOTIzMWNhLCAweGYwYzFkNmNiLAorCTB4NjczNDhlM2MsIDB4ZDE4ZDdmNDAsIDB4ODlmZDMzMmYsIDB4YzYwOTIwYWUsIDB4YmFiMWVmOGIsIDB4NGNkN2Q3OTksCisJMHgxMTY3MzBiZCwgMHhlMzMyNmVmYywgMHg3NWYzZDdmOSwgMHg3Y2EwNDkwYywgMHgyNDZkZjYwYywgMHhjMWI3ZDg0NiwKKwkweGUzMWNmYmU0LCAweDU0ZjRiYzRiLCAweGY1MmVkMWQ4LCAweDAzZjQxMzY0LCAweDAyNzY5MzQ0LCAweGNlOTkzNWRmLAorCTB4MTZiMzYwN2IsIDB4MWVhMDkxNjIsIDB4YmJlMGI5NjUsIDB4MzM3ZjAwOGYsIDB4OTBjMzM0NzksIDB4MDA5ZjVkYmYsCisJMHhhZGU5NmY3ZSwgMHgyOGZmYzBjNSwgMHhmMzgwMmQzZiwgMHhlYjVkYjExZiwgMHhmMDVlN2Q0MywgMHg1ZjVmMWIyNywKKwkweGE5NGZlNzJiLCAweGZlYzI0MDU0LCAweDdlOWZjZTY1LCAweGZjOGM1ZTZhLCAweGY2Yjg4MTI5LCAweDE0ZGE3ZjAzLAorCTB4NTNmOTAxM2IsIDB4N2FlMzcxMzIsIDB4MTU2ODI3ZTIsIDB4YTVkMTI2N2MsIDB4NmFkNzI3YWMsIDB4MjNjODdjNTUsCisJMHhkZDUyZmFjMSwgMHhlNDhkZGZjYSwgMHhjOTA3Y2ExNCwgMHgxY2I5NGFlNywgMHgyZTRhNzY4ZiwgMHgxNTc0MjNmOCwKKwkweDQ0ZjUxY2VjLCAweGI0ZmQ3OGIxLCAweDlhY2ViNjY4LCAweGJmZjMxYjA0LCAweGZkYjhiMTQ1LCAweDIxMDFmNGQ1LAorCTB4MDE3YWQ1ZmYsIDB4YjVkYTU2MjksIDB4NDEzZDM2OGQsIDB4YjUxMjU1M2YsIDB4N2VhMTg3YTgsIDB4ZjRjMDkzNTAsCisJMHhkMDNkZjc4MywgMHg1ZjIxZjcyZSwgMHgwYmZkYzEzZSwgMHhhYWI4Mjc1MywgMHg3N2RmMTRiNCwgMHg0ZWEzOTFlNiwKKwkweDcyNGIyZTVhLCAweGJhNTAyNmQ3LCAweGI5YTQ3ZTk5LCAweDZiZDY5ZWExLCAweDNlZjkyMmRmLCAweGIxOGUxNjVhLAorCTB4ZjhhNzZkZDQsIDB4ZWNkYjNiNWQsIDB4NmJlYjRkNTgsIDB4M2RkNDhjY2QsIDB4OTdkNDA2ODksIDB4ZGE2OWM4MDgsCisJMHg4MjkzNDViZSwgMHhmMDI2OTFmZSwgMHhiNDdlNTJjNywgMHg0MDExZTIxNiwgMHhkYTA5ODMxNywgMHg1OTNmNTRkMywKKwkweGI2ZTNhNDZiLCAweGQ2NThiN2FjLCAweGQ1OGZjMWRiLCAweDg1ZmMwZTM3LCAweDY1ODg4YjdkLCAweDNlNzMwOTJiLAorCTB4NDc3M2QxMmUsIDB4ZDQyNGZjZjEsIDB4NGUyNTVlMjksIDB4NmRmN2UyNmYsIDB4YWIwZTdiZjAsIDB4M2IwNTI5OGYsCisJMHhlOWNiZmQ5MCwgMHhmYzBiMGNhNCwgMHg0ZjJjYjkzNywgMHg1Y2IzYTlhMCwgMHgzOWViNDg5NywgMHg0ZmU4MWQ2MywKKwkweDhjNGY5YzI2LCAweGU3ZTFkZjEwLCAweDVjZTA1NDcwLCAweGFmMjE3YjYwLCAweGI4N2NlYTBmLCAweGNiZTYwOTJhLAorCTB4YWVlZTBlMjMsIDB4NTgyMzljMGIsIDB4NTBmZTg1YWMsIDB4ZTBmMWNjY2EsIDB4MDkyMzdjNzMsIDB4MmFmOTgzZmMsCisJMHhkZTIzZjMwMywgMHg0M2I2ZjJjNiwgMHg3NmJjNTliMywgMHgxZmI3ZDY4NCwgMHg1ZTI4ZjljZSwgMHhkMzMyZjIxNiwKKwkweDQzYmU1NTI1LCAweGU4YzhiZmU5LCAweDBlZGJiMDM4LCAweGIwYzk3NTIwLCAweDQzY2I1MmVmLCAweDkxZmRmMGFkLAorCTB4ODFlMjc3YWUsIDB4NTIzNjhkYWYsIDB4ZDZjYjQwZmUsIDB4OTJjMzg3MzIsIDB4ODBkNmZiODMsIDB4Mjc0N2E5ZmYsCisJMHgwZTMzOTNlNCwgMHgxMTYwNmI3MywgMHg5Y2Q1ZmJmNCwgMHg5NmQ2YTY5NiwgMHhmYjBjNWVkZiwgMHhlYzA5OTJlYiwKKwkweDVjMWNhMjJmLCAweGMxMzU5MzI5LCAweDhiZTc4N2YyLCAweDA5ZmJmYTg4LCAweDIwN2ZiZmNjLCAweDIxMzc5YzYxLAorCTB4NzRmODJlMjgsIDB4NzI4M2Q3MDIsIDB4OGZmMDJlNDksIDB4MmNmZGYzYTAsIDB4Zjk3NzViZDAsIDB4YmZjZTkxOWIsCisJMHhmZjlmOWRiMiwgMHg3NWMzOWMzYiwgMHgzZTcyZWZhOCwgMHg4YmFkZjgyMCwgMHgyNzRjYzVlNywgMHhhN2MwMWQ0ZSwKKwkweDAxZjI4YTJiLCAweGJlNTYzZjVhLCAweDM0YzBmOTBjLCAweGRmZGZjNmUyLCAweGE2ZjA2MGFiLCAweDdjYzFkNzg4LAorCTB4ZjUyODI2NTMsIDB4Y2E1YzNiOGQsIDB4YjU1YWI0ZmEsIDB4OWViZjQyM2UsIDB4NzRlZWY4MTQsIDB4NDZiZGIyYjcsCisJMHg5NDEzOTdlOCwgMHhlZmFjZTVmYSwgMHg5Y2EyYjI1ZiwgMHhlMWJhN2U0ZCwgMHg5N2YwNDBmMiwgMHg4MjI1ZDU0ZiwKKwkweGU3OTNiMGRmLCAweDE4NGE3NGJiLCAweGY5ZTI2YTFmLCAweDkyMWQ0ZDJlLCAweGE5YTVkZjIyLCAweDg5MDNkZTczLAorCTB4OGQyZWY5NDEsIDB4NzdjYjU3MWQsIDB4MDljOGZhNjEsIDB4ZjgzZjc3OWQsIDB4YTMyYzRmZDUsIDB4MzlkZmE2M2IsCisJMHgwZTIyZjNjMCwgMHg1MTQ0NWU0MiwgMHg3M2NjZmU4MCwgMHg1MjkwOWY5OCwgMHgzM2QxZmEzMywgMHhkMDBlMzEyYywKKwkweDhhNjlkN2FiLCAweDJlYjhhZmQwLCAweGZmZjBhY2Q2LCAweGFjZTU1ZmFlLCAweDlmYzI3ZTgyLCAweGE2NWNmMjI4LAorCTB4M2I3MzQ4MTksIDB4NjQxZDUzZjMsIDB4OGZjYzVjZjksIDB4YjRmNmU1ZTQsIDB4N2UxMjQxMzcsIDB4YzdlODM1ZTEsCisJMHhjNGRmOWQ1MiwgMHgyNGYyODI3OCwgMHhmYTJlNjY3MSwgMHgwYjNiNmIwYiwgMHg0YjVmYzE4YiwgMHhiMWZhMTJlNSwKKwkweDFjNzYwOWJkLCAweDQ0MmVlYjVmLCAweGE2MmRkNzNmLCAweDY4M2YxOGU5LCAweDVkYTJkY2VhLCAweGNmZDAwYTY4LAorCTB4YzVkZDA1NWYsIDB4YmJhMDE4OTAsIDB4NGVkMWZmN2UsIDB4ZGM4ZmZhMDMsIDB4YTA2YmViYjIsIDB4YWZiZDdhYWYsCisJMHgxMmU5Mjg4MCwgMHg3NzI0OGY3ZiwgMHhlYmJjNzA5NiwgMHgxN2QzNWMyYSwgMHgxZWY0Yjg1MSwgMHhmZWMwM2JkNSwKKwkweGUyMDU4YWEzLCAweDU2M2RjNWViLCAweDFhZGE4M2U0LCAweDRkN2VmYzgyLCAweGQ5N2U0MTM5LCAweDRmZjk4NWJiLAorCTB4YmQyZWIzM2UsIDB4OWFmZWY4MTUsIDB4YWE3MjgyNmEsIDB4ZTEwZTM2YzcsIDB4MGY3ODhjYmYsIDB4YTViOGU5M2IsCisJMHgwNTNkMjk5YiwgMHhiNmJiZmZmMSwgMHhhNGY1ZWIyOSwgMHhmZDc4ZjkxZCwgMHg0NGJhMTBmNiwgMHg1NmY4MjRiZSwKKwkweDNhY2JiMTAzLCAweDUyZWM2Yjg4LCAweDk4ODMyNzhlLCAweDc4NzA3NzdjLCAweDNhYmU3MjE3LCAweGFkYjE4ZWZjLAorCTB4YWUxZjZmMTAsIDB4MmM4NWZjNjEsIDB4YTBkN2E0NzQsIDB4ZjJjYjM0ZmQsIDB4YmFiMDE0NjksIDB4ZTkyYmE1YTcsCisJMHgzM2U2YmQ0NywgMHg4Y2M3M2IzMiwgMHhmOWYwOTY3ZiwgMHg4NGJkN2NkNSwgMHg2YjM3NDVlYiwgMHgxNDUwYTFhOSwKKwkweDdmNjg3M2QwLCAweDc0ZDQxZmFjLCAweGMwOWEyOWNhLCAweDM4Zjk4YjNhLCAweGJlMDk1ZmExLCAweDVlNTVmMDJhLAorCTB4YTUxOTQ4NDYsIDB4MzkxMzliYjMsIDB4MzY0OWIzYmUsIDB4OGZjZTliZTAsIDB4NDY0MTJlNzQsIDB4ZjdlNzBkOGIsCisJMHg4YTM0M2Q4MCwgMHg4M2QyOGY3ZiwgMHhhM2NhZTgwNywgMHg3ZTgxN2EzMSwgMHgyOGNkNGFkNywgMHg0N2EwOGM0ZiwKKwkweGU0YmQ3MmQzLCAweGYyZmFmZTQ2LCAweGY0MGM4ZjUyLCAweDRmMzQ5MjMxLCAweGY4MGIzNWI5LCAweGYwMGM1NzZjLAorCTB4MTUyNzRhMWYsIDB4ZmEwMTg5ODksIDB4Y2NiZTI1NjksIDB4OGU4MjkyMWQsIDB4ZmFkYmJkYjAsIDB4MTIzYTU4NjYsCisJMHgxZWY3ZGZmYywgMHgxMTI2MGJkMywgMHhlZmQxYmZhYSwgMHhmNGM0ZmYzYSwgMHgxMmQyODM5NywgMHhjN2FhMTNhNCwKKwkweGU1ZmQwNDFkLCAweGFmYjMwZDRkLCAweDQwNmRkMjI2LCAweDEyOGIyYWJmLCAweDk0NTNlM2ZmLCAweDEwZjY4OWY1LAorCTB4MDEzY2MwZmEsIDB4YmQzYzNmNjcsIDB4YTRjZjU4NWEsIDB4YTczZjY1NWMsIDB4Yzk0NDVmZTAsIDB4MjVjOGIyYmYsCisJMHg3NDNmMDc2NiwgMHhiZmIwNWVmOCwgMHg1YzkyNTY2MywgMHg4ZDUyMDc4OCwgMHg0YzM4MzFjZiwgMHhmMTNlYTViYywKKwkweGQ3ZGJmNzNiLCAweGRiZjE4NjI3LCAweDNkYjhlYWY3LCAweGM2YjNhMmEwLCAweDZjZTc2N2MzLCAweDE0N2EwMTIwLAorCTB4ZDI0NmUyZTcsIDB4Zjg1MGE3MmMsIDB4ZjE2M2JmNDksIDB4MGU4MTFiOTEsIDB4MTk5NDVkMjksIDB4M2JlODFlNDksCisJMHhjM2Y5OThhNCwgMHg3NDEwZjljNCwgMHgxYjZiY2E1NywgMHgyNDBkOWQwNCwgMHg2ZWNlODEwMywgMHg3ZjQyODhlYSwKKwkweDZmNDA4ZGU4LCAweGY5MGI3ZTk0LCAweDBiOWU0MmJjLCAweDJjYjViZGJkLCAweGE0YjJiZTg0LCAweDM5ZWI5NDFjLAorCTB4YWU0MjRmNDAsIDB4OGYxYzk3MGYsIDB4N2EwNTk3ZGYsIDB4ZjZmNTA3YmIsIDB4NDM2YTdhMjAsIDB4M2QyODkyN2EsCisJMHg0NDI3YmZhMSwgMHg1NWRiMmE1ZSwgMHg3ZWYwMjZmNCwgMHhlNWEzZWI5YywgMHg4NWVkMTlhNCwgMHg0ZTRjZDFhOSwKKwkweDNkOTlhYWZhLCAweGQyMjRkOTRmLCAweDhjMzVlYmRiLCAweDEzODhhYWRlLCAweDI4OWNhZGU5LCAweGE4ZDJhNGU5LAorCTB4OTFlOWFiYWMsIDB4YTRhMzUxN2UsIDB4OWJkMjM3MzcsIDB4ZDEyMzRlOWEsIDB4MzdhMDQwZGIsIDB4YWZlMzJmMjEsCisJMHgxMzdiNmY0ZSwgMHhmZjMzZmY0ZCwgMHhlZGJkMjg1YSwgMHg3NmI5MmM0ZCwgMHg2YzdjMTM3YSwgMHhkMmE1OTQ0NywKKwkweGE5N2M3MjA0LCAweGY4NjE3Mjg0LCAweDUwYWQ0MWQxLCAweDg1OTBkYTFmLCAweGFiMGVlN2ZhLCAweDM3YjYwMGUzLAorCTB4MmVlMmY2YjMsIDB4MGVmOTBjYTcsIDB4N2I3ODJiMzksIDB4ZWExMmFiOTYsIDB4M2I2OTJiNGQsIDB4MzhlNGJhOWQsCisJMHg3NDE4ODdjYiwgMHg1YzJmNmIzZiwgMHgwY2MwN2NkZCwgMHgxYjBmMmY3ZSwgMHhiNWYzZjdiZiwgMHhmNzZkMmM3MiwKKwkweGNiZTNlNWFlLCAweGRlYTEyYWRiLCAweGZmOGQ4ZWI0LCAweGMzMjhlMjBjLCAweGRiY2E4ZjIwLCAweGI3NWZiZjBhLAorCTB4Y2NjMWNiMjEsIDB4OGVmN2E2NTcsIDB4MjFkZGZiZTEsIDB4ZTM4MDNjZWQsIDB4MjViOGQ4ZGEsIDB4MDRkMThkODcsCisJMHhjZmE2NmNlZCwgMHgzOWY3Y2NkZSwgMHg2N2RiMzM2NiwgMHg0Y2I3NDdjMiwgMHhhN2JmODNiMCwgMHhkOGZhODNjZiwKKwkweDUyZmE5YWE3LCAweGVjMTE3M2U0LCAweDJkYTk3MmQ0LCAweGMwZjFjYTAzLCAweGJiYzA2NGJmLCAweGNkOWM5ZDYzLAorCTB4ZTk1YjY4ZTIsIDB4NjQ0YWJlMjcsIDB4N2YxMTBlN2UsIDB4NzU3NzM4ODIsIDB4NTVmMzdlOTAsIDB4OGExM2YzMjIsCisJMHg4MjM2NDk3ZSwgMHhjYzc5MTJmYSwgMHg4ODg4NzY4YywgMHgyMTFlZjk4ZiwgMHhkODRmOWMxMiwgMHgxNDhiOGMyMywKKwkweGQzOWYxYjJmLCAweGY4YzNmYThjLCAweGU2NGUyMjgxLCAweGRmYTdjZWQ3LCAweGM1ZmNiYzJkLCAweDk4N2U3MGI4LAorCTB4YmQzMjI0N2YsIDB4ZGI4ZjBjZTUsIDB4N2E5N2RmOGIsIDB4MDc3ZjNjNTksIDB4YzAxYTQ5MTAsIDB4ZDYyNmY3NTUsCisJMHgyYjA4NDRhZCwgMHhiYzAzMjkwZiwgMHg0NmNjN2FiMiwgMHhhOGViYzdlOSwgMHhkMzQ0YmY5MSwgMHg3MDgwZjVhYywKKwkweGZmMzA5NGNiLCAweGYxMTc3MjY4LCAweGFlODZjNWM1LCAweGY4OTZiYzdmLCAweDA4N2YyY2Y0LCAweDU1YjhiZmQ3LAorCTB4ODQ0M2Y5OGYsIDB4MzgzYmI1ZjMsIDB4YzFlOGM4ZmUsIDB4NzJhN2NlNzgsIDB4NzEyNGE1M2MsIDB4MTkzODdkYmIsCisJMHgwZWVhN2MwZSwgMHg4ZDNiYjc4ZSwgMHhhNzI2M2FjZCwgMHhmZTJhNzRkYiwgMHg3YTA0OTE5MSwgMHhmYTg4YTZjZiwKKwkweGM1NWRiMmI4LCAweGVmZjI5NjVmLCAweGY4N2FlNjJlLCAweGZlODdkMjMyLCAweDFlYjk0ZmMyLCAweGQzMTM2NjdlLAorCTB4ZWQyMmVmYzMsIDB4N2RlYzJmZTgsIDB4MGQ5ZGU5OGMsIDB4MmY0MDdiNzQsIDB4YmU0YWJjY2IsIDB4YjI4Y2Y3NTAsCisJMHhhY2FlZDBkZSwgMHgwZWIxNTIzNywgMHhhODc1MzdmMywgMHhmMzFlNGVmOCwgMHg2YTZlZjZjMywgMHhkYmZmMDUyOCwKKwkweGEyOGY0N2QyLCAweGUwYTk3N2RmLCAweDlmMjU1ZTMzLCAweGM2N2VlNDIxLCAweDFlYjkxZTY3LCAweDdiNmEzZmZkLAorCTB4ZDRlOWQ4NWQsIDB4MDkyOWJlM2UsIDB4OTk5NjkwZTMsIDB4Y2MzN2EwZjUsIDB4MGY3OTYxODksIDB4ZjkxZjI5YjIsCisJMHhmNjg4ZDk4MiwgMHhhMGJlMjQ3MiwgMHg1ZTg0ODNiNiwgMHg3ZjBmYWU0MiwgMHgzMjA0YTg1ZSwgMHhlMDgyM2VjMiwKKwkweDVmZWY4MmVmLCAweGI2NTI1ZWMxLCAweGVjMjNmMGFiLCAweDNmMWMxOTk1LCAweGUxZmUyODUzLCAweDc2MTI3ZjNiLAorCTB4OWY4NjMyZDIsIDB4MDg3NWM0YTksIDB4NWRkZWYzZjAsIDB4NmVjMjNmMGMsIDB4OTI3NmU2ZmEsIDB4OTNiNjBlNTMsCisJMHhhZDc1YmQ4NCwgMHhlZmRhOTJmNiwgMHhjZjViY2UyZSwgMHhkYWNmNjEwMCwgMHgwMjZkOWVkMSwgMHhkZGZlNTM0MCwKKwkweDEzYzRmN2IwLCAweGVmZDAyNDU1LCAweDY4NzEwYjU4LCAweDcyZjU0MTc1LCAweDY2YjU3ZmE1LCAweGM4NTJlOWQyLAorCTB4YWU4OGNjOWYsIDB4NDZlMDE3YjgsIDB4ZmZkMTEzM2EsIDB4ZWMyYzkwZDgsIDB4MzRmZjM2MjcsIDB4ZTE3NWNmOWUsCisJMHhkYjM4YWNjYiwgMHgyOWM0ZmM5NSwgMHg4MzZiODZmMywgMHg2ZDVlZTNlYywgMHg0M2Q4MmM1ZiwgMHhmYzI0OTdiZCwKKwkweDYxYWRkNDJlLCAweGYxODE1MWUyLCAweGU4N2M3MTBiLCAweGY3YmViYmY3LCAweDRmNzNlMDY3LCAweGYxM2M2MGM0LAorCTB4MmVjYzk3YzIsIDB4Mjg3OWIwYmMsIDB4ZTM5ZjE1ZTYsIDB4ODcwMTU3NzEsIDB4Nzk5Zjg3MjUsIDB4NzBlNzBmZDUsCisJMHgxMGUxODJlNSwgMHhiYzkzYWViZiwgMHg2ZGE2ZWQ1ZiwgMHg5ZmVlOGMyMywgMHhkM2FkZjljMywgMHhiZThjZjRmOCwKKwkweGVjNDQ1YzU4LCAweGQzZGZiMjNiLCAweGZmNGY3YzgzLCAweDdkYmY5MzFhLCAweDg5ZTYzNDUyLCAweDA0ODdkZmQyLAorCTB4MjczNjg3YzcsIDB4ZjA4MWY4YjMsIDB4ZjkzOTA5YzcsIDB4ZTU2ZjVlNDcsIDB4YTM1YTllZjcsIDB4M2Y5OGZlYzQsCisJMHhmM2JjNTJlMiwgMHgxZmZmODAyOSwgMHg1N2UwZmQ2MSwgMHhmYzg3NDc3YSwgMHgxMGU2ZmMxYywgMHg5OTUyYTRiNywKKwkweGQ3NDJkYmE0LCAweDZkZjlmMTA1LCAweGRmOWYxMGQ3LCAweGM1ZTRjNDk5LCAweGIwOGI0YTM5LCAweGU3MzY0NWJlLAorCTB4MzNiZGYwOGIsIDB4ODY3OTBlM2MsIDB4YzRjZWIxYzcsIDB4YmVkNmI4YjIsIDB4N2NhY2ZlZmUsIDB4MjI2Nzk3OWIsCisJMHhiZjQ1ZDFjNCwgMHhhZThjNWI4ZiwgMHgzZWRlOTQzNSwgMHgzNWFlMjE2YywgMHgxZmQ4M2U1NCwgMHhkZTYzMzQzMSwKKwkweGFmYjYyY2NmLCAweGNjNTYzZGRlLCAweGZlZTMxNTEzLCAweDBlN2U1NDk0LCAweGQ1YWNmMWQ2LCAweDg1Y2ExODc1LAorCTB4MzQ3YmNhNmQsIDB4ZDQxZmIwYmQsIDB4N2FiZWQ4MzcsIDB4YmUyOTU4YTMsIDB4ZWFhNGE3ZjcsIDB4ZGVjZjgwNzMsCisJMHg2N2M0N2VlOSwgMHhhOGE0N2Q3ZiwgMHhkZWZlNzBiYiwgMHg1ZmM4ZmM5YiwgMHgzNDViZjcwOSwgMHgyOTE4ZjNmMCwKKwkweGY4YjU3NjBlLCAweDNjOGUzYTk3LCAweDFlNmY5YzViLCAweGE2YzU5ZTQ3LCAweDFjNzliMzIyLCAweGFjOTE4ZTc5LAorCTB4NzNlZGE3NGQsIDB4ZmZkMTkzM2IsIDB4MzNkNjM0YmUsIDB4ZjY0NzExNDQsIDB4NzhhMzdjYzQsIDB4ZGVjN2EwYmUsCisJMHhlYzM4ODEwMSwgMHgwZTIwZGY2MywgMHgzYmU5Mzk3YiwgMHg0ZTVlYzM4ZiwgMHg1NTg3MTMwYSwgMHgwMjVmZTljNywKKwkweGMwMTc0MWJkLCAweDA2MTZkZGMzLCAweGJlYjkyYWI3LCAweDE3YTBmYzEyLCAweDhmY2MxMjE2LCAweDhmZDkyNDJlLAorCTB4ZWMzZDA2OGMsIDB4OTE3ODhlODgsIDB4ZmEzZDMyNmYsIDB4NzQ0Yjc4NmEsIDB4ZTE1ZDg4NjksIDB4ZjYyNjhlYmYsCisJMHhiYWE0ZmRhMCwgMHg2YTNhOGE2ZCwgMHg4Nzc5NDFlNiwgMHgxNGQzNGJlOSwgMHg2NzM0MDdlMywgMHg1YzBmZmEyYiwKKwkweDNkYTJiZDc5LCAweGE4YTQ1M2NiLCAweDUxYmJhY2U3LCAweDViNzA3ZmQxLCAweGY0M2VhMjg1LCAweGZkMTQ1YmQxLAorCTB4MjhkNmYzYWYsIDB4N2ZlMDE3ZWEsIDB4YzhjOWFmOTAsIDB4NjY3ODZlZDcsIDB4OTJmYzYyODYsIDB4ZjUyYzVlMzcsCisJMHg3Y2I5YjZjMSwgMHg4YjcyZTU2ZSwgMHg3OTVkOWM3OCwgMHgwMmZkY2NhNSwgMHg5ZjZmYzhmYiwgMHhmODk3OThhZiwKKwkweDBhNTQ5ZjI0LCAweGVmZjY0OTcxLCAweDg3YmIyYzVjLCAweGM1OGJiMGIxLCAweGRjNzU4NjA3LCAweDY4NGVmOGE1LAorCTB4YTMyZWQyNWMsIDB4OTEyMWQ1ZGUsIDB4ZjhkMGE0YzcsIDB4ODdjZWQyZTQsIDB4OGFkZTQyZDcsIDB4ZmZhMTdmNWEsCisJMHhhMGM1YjU3MiwgMHgzZTYzNDRlZiwgMHhhOTlmNWFhNCwgMHhhMDI3MzY0YSwgMHhkMjQ2OTFkZSwgMHhlOWFiNWQxOCwKKwkweDBmMGZkNGMyLCAweDQ4NTFmN2I4LCAweGJhMzIzYzg2LCAweDBhMTc0MTU4LCAweGExZjg1MWZjLCAweDc2YzJlYjdmLAorCTB4MmQzNWU2MzMsIDB4ZDIwMTYzNzksIDB4NDk0NTIxYTMsIDB4MjU3NjUxMTcsIDB4MmFlNGM0NWQsIDB4NTBlY2MyZTksCisJMHg5OTVjNDFkMiwgMHhmMGQ0MGU5MiwgMHg3NDk1M2FiNiwgMHhiZmY0ZmM0MSwgMHg3ZTNiYzAyYiwgMHhkNDZlOTI4MiwKKwkweDdkMjIyZWYwLCAweGQ4MGYzMTg3LCAweGRmMDAzOTJiLCAweGViMmY3ODZhLCAweGJhZmI4MmQ4LCAweDNjYjhiZTlhLAorCTB4MzkxN2M3OTksIDB4NzQxZjg3N2MsIDB4NmUxMDlhYjYsIDB4Zjg0OTNmMmMsIDB4ZWVkYzBjMDMsIDB4YmY0YTA5MjYsCisJMHg1NmFiZDA5OCwgMHg4ZGJkNzMyNSwgMHhmMmZjMjNjZiwgMHhkYTBmMjU2YiwgMHhiODcxZmRmMSwgMHgyZmE2NWYzMiwKKwkweDY2ZjllYzBiLCAweGFlNDNmY2MyLCAweGMzMTM5MjA3LCAweGY3ZjExN2ZhLCAweDAxNDVmZTQ4LCAweGZmNWNhOWQ3LAorCTB4ZmYyYzIzYWMsIDB4ZjMxNDc4ZTYsIDB4YmQ1YzdkMGIsIDB4OGI0MmZkMGMsIDB4ZDFlYTMzNDksIDB4NzNjNjZhZTcsCisJMHhmYjA3YTFmZiwgMHgwMjE5ZTFhOSwgMHg1MjlkMzUzZiwgMHhmOTA0OTU3ZCwgMHgxYWEyZWY1ZiwgMHgxNDI3MjZiMiwKKwkweGU0YTc1MjllLCAweDUzM2RjMzMzLCAweDgxZTQyOWQyLCAweDUwMTNkZDliLCAweDg0ZTg1N2ZhLCAweDEyYmYzMDUyLAorCTB4NWY5OGIwZmEsIDB4MzFmMDRmYzAsIDB4ZmMwMWFmMzEsIDB4NTQwZTcwMzIsIDB4MmFlNDhkN2MsIDB4YzdmNmEyZjEsCisJMHg5NjMwMzFjMCwgMHhlYzViYzcwNiwgMHhhMzNlMzgyNCwgMHhmYzA0YzNmNiwgMHg4NGZlZDQyZiwgMHhhY2MwZTE3OCwKKwkweDNhMDdiODU2LCAweDNmNDRlMmRjLCAweDlhZTkwOTVmLCAweGZmMGJiZjA5LCAweGFlMjFmYTBiLCAweDg4N2VmZDIzLAorCTB4MmFlYTcyODgsIDB4MWUyOWRkZjEsIDB4NTY3OGZmYzksIDB4YzQ1NzVjNjgsIDB4M2UxODI5ODksIDB4M2MxZDMzZmEsCisJMHg4MDBmYjI1YSwgMHgxZGVjZDQ3NSwgMHgxNDc0MDg5YSwgMHg5Yzc0OTdlYSwgMHgyM2NlODU3YywgMHhhMWUyZmE2YiwKKwkweDI4MjQxNTVmLCAweDVmN2RjNTA3LCAweDlmYjhmYzk3LCAweDgxZjM4OTNiLCAweDhkZGRmYmUwLCAweDRjZGM3ZGE0LAorCTB4Zjk1MzA3ZjQsIDB4ZjMyNTBiMTgsIDB4YjUwZTkxNWIsIDB4N2Y0NWFkZGUsIDB4MDRlZTg2YjEsIDB4MDQ4ZWJkZTgsCisJMHgwMmIzM2JjNSwgMHg0Mzk3NThlZCwgMHg0NzlhZDdlYiwgMHhjMmM1MzkzMywgMHgzZTU4MDlmMywgMHg0ZmZjZTEyOCwKKwkweGVkOTE5MWQ4LCAweDE2ZmFlNTM1LCAweDQ5NjYxNjk4LCAweGMxMDVmN2Y0LCAweDc1ODZiOGViLCAweGI4MDk3YzhhLAorCTB4OTA3MTBhMjcsIDB4ZDcwNDI5ODEsIDB4Yzc2Yzk1ZDMsIDB4NGZhMjFiZGYsIDB4NmU4NGViYmQsIDB4YzE5OTVkYzUsCisJMHg5ZTkzNmU3YSwgMHhiNzYwMzYxYSwgMHg3MTYwNjRiZiwgMHhmZWE1NzZjZCwgMHhmNGMyOWQxYywgMHhlMDcwYzhlMCwKKwkweGJiMmE1OWY5LCAweDhmN2E2YWU2LCAweDRhZWFjZmM4LCAweGY3ZDYyOGI2LCAweDM2MmI5YzYwLCAweGMwNmY3ZTg1LAorCTB4OTJhN2ZmNDksIDB4NGFiZTMwMjYsIDB4YzQzY2M2ZWUsIDB4ZGUzMjFkMGIsIDB4ODliYzZhYTcsIDB4M2RjNjg3ZjEsCisJMHg5ZWExMWUzMiwgMHgxN2RlMDM0ZSwgMHgwMDcxZGE1ZSwgMHgxNmVlYTVmNSwgMHg3ZWE4ODBjYSwgMHg3ZTg1YjY3MiwKKwkweGUwMTVmMDc5LCAweDI0NmZkYWFmLCAweDMxZTQ0MTdiLCAweDdlZTE0OTBkLCAweDEwNTIwMjg4LCAweGYxMDUwNzljLAorCTB4ZjFiMDk0ZmQsIDB4MjdmY2ZlZmYsIDB4OTNlNzNiNjUsIDB4MWM1ZTcyNTUsIDB4Y2ZlZGEzZGMsIDB4NjVmNmQxNmIsCisJMHg0N2UxMDRkNiwgMHhiOGFmOGZiZCwgMHg3M2FhNTI1ZCwgMHg3MGExNGYwZCwgMHg2MzJiYTBmYiwgMHgyNTU3Y2MyMywKKwkweDAzNGUxZTc3LCAweDFjOTBhY2Y4LCAweDYzMWI3ZjEwLCAweDBkMWJmNzYwLCAweDczNDc3MmYyLCAweGY0Mzc5ZDkwLAorCTB4NzEwNWQ5NWUsIDB4ZWUyYmQzY2UsIDB4NjlmZGMxYjEsIDB4NDk1MGVmMzEsIDB4YThmMGY3ODMsIDB4MGZmZWYxODUsCisJMHgzNmVlMjE4YiwgMHhkNjllYjFjYiwgMHg5ZDk4MWI2NiwgMHgxOGJkZjU5OSwgMHg1ZjNkMGU1ZiwgMHhmYmIzZDNiZiwKKwkweDY2ZWNiYTVmLCAweDY3ZDA1N2JjLCAweDk3NmZkMTk1LCAweDQwYjE5MzIwLCAweGUyYmQ2MjE3LCAweDFkZjhhMmRlLAorCTB4ZmU0MzUzZWUsIDB4NGM3ZGY4YTYsIDB4YmJmMGRmNmIsIDB4YjE0YTY5NjksIDB4MTg3YmRlMmIsIDB4YmMzN2Q5NTMsCisJMHhiYjgwMTRkOSwgMHg0YzZhZDdjOCwgMHhmZDA1YWZkNCwgMHhlYWM4YzdhOCwgMHg3YThiOTljNCwgMHgzYjIzMGFlNCwKKwkweDNkYjhhNzVmLCAweGIwYjA2YTc2LCAweGUwZTY3ZGE3LCAweDI4YzZhODNjLCAweDkzZTYxYzY3LCAweGIwMTMyM2JkLAorCTB4MzhiNGJmM2IsIDB4NWZiOGFjZTMsIDB4YzJjNzliMGIsIDB4ZjllMWU5ZTYsIDB4YWJkZTJiYzMsIDB4YjEyZDdiNDAsCisJMHg1MzFlN2MzNSwgMHhiYmQzMGE0MywgMHg4YWNhMmZlYiwgMHhhZDdhYTYzYywgMHhlYTkxZjMwZiwgMHhiZjE1ZWEyZiwKKwkweGUyZTE0ODdmLCAweGYzZWEwNDMxLCAweDA3MWEwY2NmLCAweDFjNDA1YmViLCAweDgyZmZhMTZiLCAweDEzYzQzMTc1LAorCTB4M2M4ODk3YTQsIDB4N2MzZDM1NjYsIDB4NjhkZmYxY2QsIDB4MzBlZDEyZDUsIDB4YmFlYzBmYmMsIDB4ZmU1N2JmNTIsCisJMHg1ZmJkODcyOSwgMHg0NjhhNDhmMywgMHgxZTYxYTFlNCwgMHgzMDM3YjUzMSwgMHhmN2VlYTc5ZSwgMHg3Y2VhMjllZiwKKwkweGU3ZGUzZjMzLCAweGRiMzdjZmVjLCAweDc3YzU3ZTUzLCAweDk2MmYxYTE5LCAweDFiYzFmMjJiLCAweGQ3MTg3OGU5LAorCTB4MmFhYzcxNzgsIDB4NGJjZjljMWYsIDB4MDI5YmIzZTcsIDB4ZTA5MTY2NzksIDB4NWIzMjc1ZmYsIDB4OTFlNDIzNTcsCisJMHhjZWZmMDdjNSwgMHg5ZGYwMjllOCwgMHhlNjE3OWUwNCwgMHhmOGYzODU4ZiwgMHhmNzhjODc2YywgMHhhMjNkOWY5ZCwKKwkweGNjMzViMDk5LCAweDVjMzkzYmJhLCAweGUyZDQ0ZmFlLCAweDQ3YzFiOTM5LCAweDdjYzI1YjljLCAweGY3MTNmNDVmLAorCTB4M2M3ZGM0MTksIDB4NTU3NmZhZjUsIDB4ZmFjMGU3ZjgsIDB4N2U2NThjNDcsIDB4MmYzY2Y1NjEsIDB4NzU4YWY4NzAsCisJMHg3YzMxYjJlZiwgMHhmMTRhYmUzNCwgMHgyYzI4Zjk4MSwgMHhjZDk3Nzc0ZiwgMHg4M2Y5MThiZiwgMHg0ZmU3ODk0NSwKKwkweDc2M2FkOTkyLCAweGM0Y2ZlMmRkLCAweGNjODk5Y2ZjLCAweDBmNDQ4ZWFlLCAweDdmZGQ1OGY3LCAweDlhNmUzZDQ1LAorCTB4NDhkNTcyMDksIDB4YjI1OWI2YTksIDB4YWJiNzlkMDQsIDB4ZWUwMDQzZDEsIDB4YTFhZjAyYjIsIDB4YmI2M2Q3NzAsCisJMHg2M2YzZjc5OCwgMHg3ZTdlZGNlYywgMHg2MTUzOWQ4YywgMHhhOGZlN2MwZiwgMHhmNDAxZjk4YywgMHhhMGE0OWI0MCwKKwkweDA5Y2ZmYjNjLCAweGRlN2MwYjhiLCAweDNmZmVhMTI2LCAweDRhYzg0ZGRmLCAweDZkZTY3N2NhLCAweGUyZmE2M2FiLAorCTB4NzUzMWMzNTMsIDB4OWZiZjdlMDcsIDB4NTQ3OTk3ZjIsIDB4Y2I0Y2RkZGUsIDB4ZjE1NDZiZjksIDB4MDg1NzZlNjEsCisJMHg4MzcwYmMzOSwgMHgxYjIxZGVjYSwgMHgzY2M2NGJmZSwgMHgyNzk0NjZjZiwgMHgxY2FlN2Y4YiwgMHhhNGRiNzRiZiwKKwkweGVhN2JlMGNmLCAweDRhZmEzNjM4LCAweDcxZmNmZGE5LCAweDRiY2JkNzBhLCAweDgzYzgyOTQ5LCAweDQyZmE5ZmJiLAorCTB4N2M4ZjZiMWYsIDB4N2U1MGNlMWUsIDB4ZjAzMDY4M2IsIDB4ZGQ5NjIzNWQsIDB4MmYyYzE2MmQsIDB4NDFiYjM4YTYsCisJMHhkZDUzZTgzZSwgMHg3YmQ3YzBiZCwgMHhiYWYwNjFkZiwgMHhjOTgxN2Y1MCwgMHgzOWJjYjgwYiwgMHg4NGI5ZjgxMiwKKwkweDkzMzBjZWYyLCAweDg0MWY3OWM1LCAweDJlMTRlYzdiLCAweGZiOTMwMzA2LCAweDM1ZmRkYzcyLCAweDVlOTU3MTkzLAorCTB4N2UxMThiYTQsIDB4Y2EyYjFjY2IsIDB4ZDAwYTQ3MjMsIDB4ZTM3M2MyN2YsIDB4MTNmYzAwMjcsIDB4YzI3MThiOWYsCisJMHg3Yjk3ZDZiZSwgMHhjMzdmMDY5ZiwgMHhlOGQxNTVmYSwgMHg1ODFhMzVmZiwgMHg3YjY3Mzk5YywgMHhjMGVjMDZiOSwKKwkweGZiNDk3NmViLCAweGQ0ZDFkZmMxLCAweGRlMTcyYWI5LCAweGEzZDkzMDE3LCAweGFlMjEzZjMxLCAweDkzMTY1ZTczLAorCTB4MDkzYmVjNzMsIDB4ODAxZGFlYWQsIDB4NTdiODA0Y2YsIDB4M2ViNWQ3NDcsIDB4ZjhjMjliY2IsIDB4MWE4M2QzMzgsCisJMHgyNTdiY2MzOSwgMHgzZGMwN2ZmYiwgMHgzMjFiY2Y2YiwgMHhhMGJjODNkZSwgMHhkN2ZjZjk2NSwgMHg5MTVmODYxMywKKwkweDBlZGYwNTBmLCAweDI5YmFmN2Q2LCAweDQwZDBjOGRjLCAweGM5NzZmYWZkLCAweDc3YzU4YmE3LCAweDUxNWUzMDI0LAorCTB4MzQ5N2RhYmYsIDB4NmZkMWU0MTMsIDB4ZTllZjE4YjQsIDB4NTJlZmQ3NWYsIDB4MjNhZTIwMmIsIDB4Yzk0Y2QwZTQsCisJMHg1YzQ3ZmNjMiwgMHhjNDRlOWQ5ZiwgMHhhYTE3MTYzZiwgMHg5ZDMyNzRlNSwgMHg2MzMzYjFlYiwgMHgxM2U3N2MxOCwKKwkweDliOGMyNjQ3LCAweDFhYjEyNDYxLCAweDU2NjY5NDdhLCAweGZlZTA5N2I2LCAweGQwNTY3NGVhLCAweDIzN2M0NDA3LAorCTB4ZGUxMTFlYjIsIDB4YjRmOGQzZWYsIDB4OTRjN2RkOTksIDB4MjRjMDg2ZmEsIDB4NzJhN2MxNjcsIDB4M2EzN2YzODUsCisJMHhjNjlkYzk5NSwgMHg0YjhmY2MyMSwgMHhjNDI3MTEwNiwgMHgxZDVmMWFkMywgMHg3MmVjMDViYSwgMHhkYjhiMzQ0MywKKwkweDg0NjRiZTUyLCAweDgxMGU1NmY3LCAweDVlZmJhNmJjLCAweDdiMTQ0YWY2LCAweGM3ZGM0MzNmLCAweGUxMGIzOGI2LAorCTB4NGQ1MzYzN2UsIDB4YjdkZTExNDYsIDB4ZWY4N2Q5M2EsIDB4ZmNlOGY0MjAsIDB4Mjk3ZTc4OTksIDB4NGNhODkxYmYsCisJMHhiNmQzNzNiYywgMHhjZTk0YjU1YiwgMHgzZWE4ZDMxYiwgMHgzNjZiZWI0NiwgMHgwYjU1YmNlZCwgMHhmZGIyZTRmNywKKwkweGZlYjQzNThiLCAweDU4YjdhNmZjLCAweDRmZmVmNWZiLCAweGE2ZjJmZWExLCAweGM4YmRhYzEzLCAweGY1YTY1OGJmLAorCTB4NjEzZTliNjMsIDB4YTRkMDYwZWQsIDB4NGQ5N2YyMTEsIDB4ZTg3YWI3ZGQsIDB4NWNhZDY3ZmMsIDB4ZjFmODcxZGYsCisJMHhkZWUzNmExZSwgMHg3ZjYwOWFhMSwgMHg4Y2E5OWJlMiwgMHg2MjhkOWQ1ZiwgMHg5MTY2Y2VmZCwgMHhlZjAwMzViOSwKKwkweDVmZmRmMGRjLCAweDI0ZjBkNTQ4LCAweGM1MmMzNjhkLCAweDkyNzhjNTdlLCAweDIyZGM3ZTEyLCAweGJmMTk2ZTNlLAorCTB4ODYyNjNhODcsIDB4ZjE2MjhiYWMsIDB4YzUyYzRmMjksIDB4YTFjZWMxYzMsIDB4OTg5YjVmMTgsIDB4ZjM3MGUzNmEsCisJMHg2MjI1M2JlMywgMHgzMTRmMDExZSwgMHg1ZGVlZjg5ZiwgMHhiZTU5OTcyMCwgMHg5ZTcwNmQ1YSwgMHg3ZjFjZGRmYSwKKwkweGYwNmIzYmY0LCAweGVjOWM4MzNiLCAweDQ2NGQ2NmZlLCAweGUyOGZlMDIxLCAweGE2ZjFjYjRkLCAweDdiODliYzA1LAorCTB4YjVhZjMwZGYsIDB4NzBmZmY5MDAsIDB4YmMxZjViZjAsIDB4MDU2N2ZiNDQsIDB4OTNhNmFkZDYsIDB4YTdjNjU0OTYsCisJMHhiOGIyYjU5NywgMHgwNzM1OWY2MiwgMHgwYzRjNjllOSwgMHg1OGEyZjc3ZiwgMHgxYzYzOGZiOSwgMHg1YWE2NmYwZSwKKwkweDAxMDczZGY5LCAweGJmMDk2NGFmLCAweDk4ZTFjYWQzLCAweDkzNTIxZmUxLCAweGZkZjdjZGZmLCAweDc3Y2Y1ZjMwLAorCTB4N2MyMGVmYmQsIDB4OGFmZGUxMzksIDB4NmRkNzFkODMsIDB4YjFiMWZiNjUsIDB4Y2Y0YTU0YmMsIDB4MWVmM2Q0MzYsCisJMHg3Njc3Y2M1NiwgMHgxOTdjNmE5NSwgMHg1ZmIwOTAzZCwgMHg3ZjhlMGU1YiwgMHgyMDc3YmY5MCwgMHg3MTgyZjNkZSwKKwkweDNmNGMwNTU5LCAweGRjNTViZDA1LCAweDliOWUyN2QzLCAweGI0ZmZiMDQ5LCAweDNiN2UzZWZmLCAweGQ4MWIzN2JiLAorCTB4N2NjNWFkZTcsIDB4NGZiZTE2OWYsIDB4NTdhN2RiMGIsIDB4NzhlNGFmNDEsIDB4NzM1NGU2NWYsIDB4YzNmNzFkMjgsCisJMHhiY2JlN2ZiZiwgMHhlMjlmM2UyMiwgMHgwZjliODc5YywgMHhiYzI0NzVjZSwgMHhmMWFlZmMxYywgMHg4MmE5ZDYyMiwKKwkweDU1OWMzZjY3LCAweDg0ZjAxM2ViLCAweGYyZTM4ZGYzLCAweGQ2Mjk3NDk0LCAweGYzYTQ3MmY5LCAweGJmMmRmNTlkLAorCTB4MzVjNmNlNTcsIDB4ZjdlNTgwZmMsIDB4YWU5MmJiMTIsIDB4Njk2NTc2MWIsIDB4YzYyZTdlMjAsIDB4MmVjZjAzZTUsCisJMHgzZWJkZjgwOSwgMHg2MDc2ZTU0YiwgMHg5MDg4YzkwNiwgMHgzNTJlNzc4ZiwgMHg3ZjBjYmZiYywgMHhiZDgxZGI1NywKKwkweGFjZWY5NjU2LCAweDI2ZjQwN2Y2LCAweDEwOWNiYTNhLCAweGVlY2YzYTQ3LCAweGY5NTI4ZjZmLCAweGIyOWUyMDJmLAorCTB4MTcxODE0ZDMsIDB4ZmFjYTJmOTAsIDB4YmYwNjM0YzgsIDB4MWY0YmZmNTAsIDB4MzYyZDJmZGUsIDB4Nzc2OGJjNTQsCisJMHgzMWVlYmI1MCwgMHhiZmMwNmRjZCwgMHhlZTJhZTM4YiwgMHg5OGY1YTJjOSwgMHhjMDZkZGQzNCwgMHgyYmQzOGJiZiwKKwkweGZjYTJjOGJlLCAweDY3YTY5Y2RjLCAweGJlMmExYmY1LCAweDYzZmE4NmM4LCAweDhjN2ZkNjdhLCAweGY3ZTA0NWYzLAorCTB4NmRiZmEzYzQsIDB4OGY0MDZhNmMsIDB4YjNiMzRkODgsIDB4MWE5NTUzZmIsIDB4NWZhYmZmN2MsIDB4MDE5ZGY5N2YsCisJMHhkNzAxMTdmNSwgMHg0MWIxNjU0OCwgMHg0ZTJlMWNkMywgMHhlODI2OWM5NSwgMHhjYTEzYzU4MSwgMHg5MGVkN2ZlMCwKKwkweDdjZWRjNGY3LCAweGU3NjE1NmJmLCAweGZiYjJjNmY3LCAweGZlZmJiZGI3LCAweGIyMjdmNzg2LCAweDY5MTlkY2QzLAorCTB4MzE0ZDVkNzQsIDB4NjhiMjczZGQsIDB4ZmJjYzc1N2QsIDB4OWM5MmFmMTgsIDB4M2YwMTBmNTQsIDB4NjY0MmRkODcsCisJMHhkZDRhZjVkMSwgMHgyZmEwNWRlYiwgMHg0NjFjYmI5MSwgMHhmYjk1YzIyZCwgMHgzMTRkZTA3ZCwgMHg1ZTU3YmYwYSwKKwkweGU5N2RjZGZkLCAweDU4MmUzM2VjLCAweDA3Y2U0OGM3LCAweGZhZmQ1ZTlhLCAweDM2NzM4ODJiLCAweGMwMzkzNTlkLAorCTB4NzNiMjNlMmQsIDB4NmZhMDNkZDMsIDB4ZjM3Y2VjOGQsIDB4ZDk4NzI2NmIsIDB4ZWViMTBmN2QsIDB4YTNkN2UwOTEsCisJMHgxODc1OTdiZiwgMHgzYjIzZmQ3MCwgMHhmZDA0NWJhZiwgMHgzM2ExZmQ0NywgMHhhNmU0ZTgwNywgMHg2MDU2YmU1MywKKwkweDVlZmJiZDBiLCAweDFmZGU1NzRlLCAweDc5OGFlY2ZkLCAweDRkZTMxMThjLCAweGU4OWYxZTAyLCAweDE0OTllODA5LAorCTB4NzgzMzM3MWUsIDB4YWI3Y2MyNWMsIDB4NmI2M2M0OWUsIDB4MmI5N2E4ZmQsIDB4YmQ1MGQzZWYsIDB4MTdhNmUzMWQsCisJMHhmYzAzYjQ0OCwgMHhiMzVlZTJmOCwgMHhiMjc4NWZkYSwgMHhmZThmZWU5YSwgMHg1ZDFmNTM3ZSwgMHgzY2RlOTA0MSwKKwkweDMyOTFhMmU2LCAweDljYmQ0MDkyLCAweDRhZjUxNTU4LCAweDdmYTJhYTYzLCAweGQxNGIyNTk1LCAweDNhZTUzZTNlLAorCTB4N2I0NGZiNDUsIDB4MjkzZWEyYTEsIDB4ZmZhMmE0NzcsIDB4NDU3MjhlNmQsIDB4ODliMmY2ZmQsIDB4Y2VkNWZlOGEsCisJMHhkMGJkNDU2YSwgMHgzZmU4YWVkNywgMHhiMjg3NDhmYywgMHgwMTkxMzhmZCwgMHgxZDI3NDUwZiwgMHhmOTJjYTAwNywKKwkweGM3NmU4OWQ4LCAweDA3Y2QzM2QyLCAweDI1ZjkxY2EwLCAweDVmZGE4NzAzLCAweGY2YzVlMzdhLCAweGYwYmJmMDAzLAorCTB4YzdlZmFhOTcsIDB4MzRlOWZmMDgsIDB4ODdkNWU0ZDksIDB4NjhhNjkzZjcsIDB4ZjI1ZTc5NjksIDB4MzU5MTNmMjMsCisJMHgyZDhjN2VlYywgMHhlMDJmN2RkNiwgMHgxOThmZGM0ZCwgMHg4YTUyZmUwMywgMHhlN2I5YWE4NCwgMHg1OWYwYmRkOSwKKwkweDEyNzY1ZmNjLCAweDY5ZmMwMzEwLCAweDdjZmQxOWJhLCAweGNmY2Q3NTI3LCAweGJkYzU5OWZmLCAweGJiZGYwMDA3LAorCTB4YjE1NmFmYTksIDB4ZGQxNzMxZWYsIDB4OTM5NzdkOGEsIDB4MmQzYzJhNjUsIDB4MmNhYmQ0NTcsIDB4MWZmNDUwM2YsCisJMHhkMTRhYjI5ZiwgMHg5MGZlZDEzZSwgMHgyYjBmNGYwYSwgMHgzNjM5YjdlYSwgMHg0NWI0ZjBhOSwgMHgyOGRmYTc4NSwKKwkweDcwZWRmYmRhLCAweDE1N2FiZmVlLCAweDFjYjQ0ZWZjLCAweDA0YWFlZmVkLCAweGE2N2NkYzNjLCAweGQ2NTFmMTBmLAorCTB4NzgwOTU2ZDUsIDB4M2I2NGYxYmEsIDB4ZTdkOGFiZTIsIDB4NTk3NjA0YWEsIDB4MDBmOWE0N2EsIDB4N2Y2YTNlOTQsCisJMHg1YWQ3YjhjMSwgMHhkODNjYjA1MiwgMHhkNWZmNDc2MiwgMHgyYzVjOTZlMSwgMHhmMDM4YjQ4ZiwgMHg5NGI3ZGZmNywKKwkweDhiNTZmOTYxLCAweDZjZmZjYjEzLCAweDU3NjU4MDk5LCAweGY2Y2IwYjhiLCAweGJmZWM3Njk2LCAweGY5ODNhNWIzLAorCTB4ZGZmYmUyYmYsIDB4N2UwMDE4MTUsIDB4YmY4ZDFlODEsIDB4M2M1NmVlMTEsIDB4ZTQzNGQ4ZjcsIDB4ZmVkMTNkOWYsCisJMHgyNmFmYTgxZSwgMHg5NjM2ZGU3NywgMHg4MWU3OGQzMiwgMHhjYzlkODA4OSwgMHhjZWU5YTNjYiwgMHhiZjk0ZTlkMSwKKwkweGFjMWM4NWVkLCAweDQxZmU0MDkyLCAweDA4NTljNmJiLCAweGI0ZTFmODdhLCAweDBlZDEzZjA1LCAweDU1ODFlNDIwLAorCTB4OTU4YjE0YWUsIDB4OGViNDhkZDUsIDB4NjQzMTg2YzgsIDB4MTk5YzRmYzEsIDB4MjUxMDVlNzQsIDB4NzA1ODRjMTgsCisJMHhhMzdiZDQxYiwgMHhiNGRlZmI1OCwgMHhmMjc5YjcwNSwgMHg2MzcxMDdmZSwgMHhlMTdlNDg2NywgMHg3MTMwYjRlMSwKKwkweGQ4Y2ZlN2UzLCAweDM5Y2ZlMGNkLCAweDE5YTg2OTc2LCAweGZiOGM3MWUwLCAweDUwYTQ5Y2I1LCAweGU1OTY4ZjM3LAorCTB4YzgxZDQyZGEsIDB4YmQyYTkzZDksIDB4ZTQ1Mzk0NDQsIDB4ZGU2MWI3ZjIsIDB4MGVlMzhkNzYsIDB4NDViZTZmY2MsCisJMHg2YjdlODA0NywgMHg4YWVmNjYyNCwgMHg5OWQzZGI3ZSwgMHg5YjdiZDBiZCwgMHhlM2E5ZWQwMSwgMHhiYzIyZTcxYSwKKwkweDNkZjUyNzE3LCAweDQ5ZWU3MDAxLCAweGE5Y2EzZWZiLCAweDI2NWY3MzVlLCAweGVkM2JhZmMwLCAweGQ4OWVhYzdiLAorCTB4MDhlNDg0ZjcsIDB4N2MxOGViYWEsIDB4ZjdiYjRmZGUsIDB4ZDljZjg2YmIsIDB4Zjg1MDkyYjQsIDB4NTg1OWE2ZjQsCisJMHgxY2U3YzBkYywgMHhhZjAwN2E4MCwgMHgzNjc2YWYxZiwgMHhkY2FjOWM2MCwgMHg3MWY2MTgzOSwgMHhlNzYwNjVjYywKKwkweGZiYzY2NWQ3LCAweDJjZWI0NDEzLCAweGJmYzgyM2I5LCAweGMzYWU5NzUzLCAweGEyZTE1MzcxLCAweDY3MzlmODFiLAorCTB4ZDVjZTc4YzgsIDB4OWQyODdjZjAsIDB4Mjc0ODFmZDksIDB4OGY0ZTY3NjAsIDB4YjhlMGJiNDEsIDB4NTczN2RkODYsCisJMHg5ZDI2N2ZmNywgMHgxMTczZDljOSwgMHgwZGZkODNkZSwgMHg5NGM1N2I4NywgMHhkMzc3ZTc4NiwgMHg0NDU3N2FmOSwKKwkweGFlYmRkNGUxLCAweGY1OGZhOGExLCAweDlmNzg0YjM2LCAweGYzNGNmN2I3LCAweDcwNmVkNjc5LCAweGRjNjA5MDcwLAorCTB4MWZmYzI2NzIsIDB4ZjNiZTdmNmQsIDB4OTFmZWJmOWUsIDB4NDU3ZjdmZjYsIDB4ODg2NTAzOGMsIDB4ZGY4NDdhZTUsCisJMHg3Njc5ZGUwYywgMHhhN2Y1MTFiYywgMHgyYTAzMzVkOSwgMHhlNGNlMmU0MCwgMHg2NjM5YjA3MSwgMHhjMzg2MTI2ZCwKKwkweDNjM2Q1NmI0LCAweDU0ZDBiODlkLCAweDkwNDI5NmI4LCAweGQ2YTg0ZTJjLCAweDRiNDU1M2MzLCAweDg1YWY5NjMzLAorCTB4MGY0MWFlZjIsIDB4OWYwOWUxZWIsIDB4NmIxZGJjZmEsIDB4YTA2ZDhkNDEsIDB4ZjkwNGI4NDcsIDB4MGI2OGZmOWYsCisJMHg5NWRjZDc1ZCwgMHg3M2Q5OWRiMiwgMHhlYjNhYWU1YywgMHg4NzFlNTFiZSwgMHgzY2UzZGZhMCwgMHgwMTAyODZhZiwKKwkweGQzNjdkNWVkLCAweGZiN2Y4NTI1LCAweDYxYWYwZTU5LCAweGNjN2Y1Y2U5LCAweDFlZWNmOTI3LCAweDYwOWM3ZjUxLAorCTB4ZWVmYjljMzgsIDB4NDQ4NzQ3ZDksIDB4ZGIyODIzODgsIDB4MmVmOGZlYjksIDB4ZmQ1NmU3N2YsIDB4ZWVmODgzZWUsCisJMHhjN2VmMWM3MywgMHg0MTMyOTRmNSwgMHhlNGMxOWM5ZiwgMHgxN2VkNDE0MCwgMHhmZWU4NGJhYiwgMHgxYTJkM2EwYiwKKwkweDZkY2ZkMzhjLCAweGI4NzgwZGQ4LCAweGE4ZjFjMWQwLCAweDllNzAxZDIzLCAweGJkZTY3OGE2LCAweGFhNGQzOThmLAorCTB4OTM1N2ExN2IsIDB4NGIyZThlOTcsIDB4MmNiY2IwNjUsIDB4ODMyYWJiZjYsIDB4NWY1OTY1ZTUsIDB4NDVjODI1NWIsCisJMHgyZDdkMWYyMSwgMHg2ZTNmMzk0YiwgMHhiMDdhM2U0NiwgMHgwZmQ2MjU2NSwgMHgzY2IwNzhiNywgMHhmMzhlYjJkMiwKKwkweDdmNmMzNmUzLCAweGNlNTFlNWFiLCAweDFmOWNiZDhmLCAweDc3YmY4MzNmLCAweGY5NjJkNGI2LCAweGNiMWI4YjZhLAorCTB4MzNkY2UzMDcsIDB4M2UyMjZlMDAsIDB4YzZlOGQ1MzksIDB4OWI0M2QxYmMsIDB4NWZlMjA0MGMsIDB4OTgwZDNhMTcsCisJMHhjNDRmNDA5NywgMHg0MDI3OGYxMywgMHhlZjAxOGRkZSwgMHg2ZmYzYTlmNSwgMHg5ZmJlN2NkNCwgMHhiN2RmNDIxZSwKKwkweDE4OWU5YzU4LCAweGZhMDMzNzk0LCAweGY0YzhjMGUyLCAweGNkZDg4Yzc0LCAweGVkZmU5N2MwLCAweDBmOTA1N2YxLAorCTB4Y2RkYmIzMWQsIDB4YTRiNzRmYTAsIDB4MzhiY2EyNzcsIDB4NzU5YmI0ZTYsIDB4YmM3OWVlYjQsIDB4ZWRiYmI1OTMsCisJMHhhZmFkMDM2NiwgMHhkYWM3ZGY0YSwgMHgxNDczNzYzZCwgMHg3YzdlYWZhZCwgMHgxMmY3NmIxZiwgMHhmODNmMjIwYywKKwkweGM3Yzg2YmY4LCAweDEwNzQ4OWNhLCAweDMxYTU0N2NlLCAweDE3MTUyYzZiLCAweDFmOTc1ZTU0LCAweDNlMzE3Mzg0LAorCTB4Mzg1OGRlNjUsIDB4M2Q3MjVmMTcsIDB4ZDU3ZGEyN2QsIDB4Y2E0ZmE4NDEsIDB4YWI4NWEyZGQsIDB4ZTE1MzRlZGYsCisJMHg5MTU3MTgxYSwgMHg3MTg1YWQ1MCwgMHhhZjk2MzM2MywgMHgwNmUzNzE4MSwgMHgxZTBkYWMzZCwgMHhjNzZmMjEzNywKKwkweGVhZGZhODFhLCAweGZkMDVhMmQ4LCAweGM3Y2U0YmY0LCAweDJlYTIzY2M0LCAweDE2OWYwNWRhLCAweDNhYzM2MGY5LAorCTB4MGEwZjI4NWQsIDB4MGYyODVjM2EsIDB4YTYyYTVjMDQsIDB4N2UwMDNmNTYsIDB4YzkwZWE2YzcsIDB4YTYzYWMxMjIsCisJMHg3MWMxZmQ0YSwgMHg4NDZiYTVjOCwgMHhiZjI5MjJmNywgMHg4ZWZlOThkZSwgMHhkNzFkMTU3OSwgMHhiMTFiZjUwNCwKKwkweGE2NTU5M2ZlLCAweDZmN2Y5NGVmLCAweGRmMjMwZjRkLCAweDBlZjNmMDRlLCAweGJiZjIxZWYyLCAweDNiZDllODRmLAorCTB4NWMwMzVmMWQsIDB4OWI5ZWYwNGEsIDB4MjRiNWRmMTksIDB4ZTNmYTMzNmUsIDB4M2Q4MzM2NDEsIDB4YjY5ZTcyMDQsCisJMHgxOTY1ZTcwZiwgMHg2NDUzZmI5NywgMHhjZWY4NzZlNywgMHhjM2Y5OTE4YiwgMHhhYmZjZmNjYiwgMHg2ODQ0NGRlZSwKKwkweDRmNjFmY2U3LCAweDRiZDk4NWJhLCAweDA2ODc1ZGZjLCAweGQwN2U4NmQyLCAweGE5OTdlNWFiLCAweGY5ZDVhMWYzLAorCTB4NTlmZjIyMTYsIDB4NGY1MTVmOWQsIDB4YTEzMDdiZDgsIDB4ZGVlY2NlNzksIDB4YjM5ZTQ4NmUsIDB4MTlhMmFiYjAsCisJMHg1ZTA1YWQzZiwgMHg3OGY4ZTk0MywgMHgwOTU3Y2YzYSwgMHhhYmM5YzM4NSwgMHgzODY0ZTFjMCwgMHg4N2VjODQzOCwKKwkweDJlZWYzMTc4LCAweDc0YzZmZjI0LCAweGRlYWNmMTFjLCAweGIyMjc3MTE3LCAweDNmODkzNmY3LCAweDVkMDRmZWVjLAorCTB4OGRhZmVlODQsIDB4ZTBjYjVmYzEsIDB4YjNiYmY1NGYsIDB4YjlhYWU3ODAsIDB4YWI3ZTAyNjYsIDB4YzdmM2ZlNjAsCisJMHgzNTFmZjAyYiwgMHhmOGFlZmI1ZiwgMHgwZGI5YjRlNSwgMHg1MDgwZmRlYywgMHgxYzM5NzYzZSwgMHhjMmY3MTMxZiwKKwkweDUzZDBhNWQ1LCAweGU0MWEzZWUxLCAweDM0M2JjMjAxLCAweDRiZWZlNzYwLCAweDgwNjc0Nzc2LCAweGY3ZDE1NjdlLAorCTB4ZDBlYzA2OTUsIDB4ZjM3ZWY2MDQsIDB4OWNkYjliMjIsIDB4ZTkyMmUxNDEsIDB4Yzg4MTdlNTksIDB4ZjFhMzNkYzMsCisJMHhiNmY0MTZmYywgMHhjOWU2Y2RiNCwgMHhiMDgzMmZhOCwgMHg0YWM3NjdhMCwgMHg3ZTNmZTBlYiwgMHg4NzhhZWFkNiwKKwkweGFmZDcyNDcxLCAweDNhMDc3ZTBmLCAweDdhNjk5ZTUyLCAweGExN2Y5MzA2LCAweDVmZTQ1MTI1LCAweGZhZjk2ZWY2LAorCTB4OGEyZmRlOWEsIDB4NzkyYThmMDQsIDB4NDFlZTFmYjQsIDB4NDE4YjI4NWMsIDB4MTEyZGQ5ZjksIDB4ZGIzZmJjMWYsCisJMHg3YTg0OWU1ZCwgMHhiZDAwZjc0YiwgMHhkYWVmY2ExNiwgMHgzMDFlZWUyZSwgMHhkYjU3ZTcwNCwgMHg2NWE5ZGRjNywKKwkweDcxZGRmNjQ2LCAweGQwZWNhMDEzLCAweDA3OWQxZmJiLCAweDA2OTFlMGZlLCAweGNkYmM5MzhjLCAweGM3MjcwZmYzLAorCTB4YjdjM2ZjYjAsIDB4Yzk4MGZkZjksIDB4MDA0YTVlMWYsIDB4ZjY1OTM4ZjksIDB4YTE0ODE1MjUsIDB4MWJmNzc2NzYsCisJMHgwNWVjMmFiMywgMHhkZDM2ZjZhMSwgMHhlZmQ4NThlZiwgMHg5NzZlZWNkNSwgMHg2MDA2Y2JiMSwgMHhmNWRmZGI1NSwKKwkweDkwMjJiZjJiLCAweGU1NmEzZGU3LCAweGUzZjkwMjI1LCAweGJjN2I3M2ZmLCAweGE0ZjUxMzJiLCAweDk1MzNlNGFiLAorCTB4NDE1Yjc5ZjUsIDB4ODk3MzE4ZmYsIDB4MjI4ZTM5ZTUsIDB4OTUyNWNlMmMsIDB4OWJmMmM5YmQsIDB4ZGJiNmE5NzgsCisJMHhiZGE4NjhlNywgMHhhNzZhMWQ5ZSwgMHhhNWZkOTJjZiwgMHhkNDIxZWY1MCwgMHhkODA5Y2Y1ZSwgMHgzNzRlYzJlYiwKKwkweDQ1YmY5NjEwLCAweDM4MDZmN2VkLCAweGRkYjllNzE3LCAweDhmMTMzMTRlLCAweDdjM2YyMTc5LCAweGM4N2RjZTZmLAorCTB4OWYzMGEyMTcsIDB4OGY4ZWY5ZTMsIDB4N2ZhZDYxMTIsIDB4YzVmYzRhZTksIDB4YmQwMGY2MmIsIDB4MjJiZTU5MzcsCisJMHhmNWZhNzljMSwgMHhjMTIwYmYyYiwgMHg3Mzc1YmNlZiwgMHg4ZTliNzczZiwgMHhmZmFhNDNkZCwgMHg4YTcyOGNhNywKKwkweDgwNzViNWNhLCAweDlhZjI3YWE3LCAweDc5MjBlZWZlLCAweGFiZmZkYTRiLCAweDI4YzNkZTFmLCAweDM1ODZhYmZmLAorCTB4YjRmNWJjODEsIDB4N2VkMjc2NGMsIDB4MjIzZWRjZDUsIDB4YWM3NmY5MWUsIDB4MzI5MjdiNzMsIDB4Mjg5ZWQ2NDYsCisJMHhlYWNiYmZmYSwgMHgxM2ZmNDQwMywgMHhiYmY0OWQ5MywgMHg5ZGEyYTlkNSwgMHhkNzhlYmY4ZiwgMHg2Yzc2ZWU4OSwKKwkweDBkZjMxMmNmLCAweDZiMzM3NTY1LCAweDcyZjhjYjZmLCAweDgyMzFlODMyLCAweGUwY2M2ZmJmLCAweDQ3YmY5MWYyLAorCTB4NjNmZGY5NDQsIDB4Y2M1Nzg5MTksIDB4NzNiNjUxYmYsIDB4MWZkZTIwNzksIDB4YzRlMWZhYWEsIDB4NmU3MGEzOTgsCisJMHhiNWNjMjVkYiwgMHg4NzVmYmZhYiwgMHhiNjczZmJmZSwgMHhmN2UwODJmNiwgMHg4ZTllNDU0YSwgMHg3OThjZDJhYiwKKwkweDBkMmYwZDUzLCAweDIyNzQwYWRkLCAweDgxMjc4ZjliLCAweGUzYzVkMmRlLCAweDA5YjI1NWYxLCAweDM2MTcyZWUzLAorCTB4NDkxZWJlMzAsIDB4ZjJiYzViZWYsIDB4NDJiZTA1MTUsIDB4YzBmYmY5ZGEsIDB4ZGZhNDk4MTgsIDB4NjQ5M2ZmM2IsCisJMHhhMGYzM2VmNiwgMHhlODBiY2MyZSwgMHhkZTBjN2NlMCwgMHhjMzdiODQ3YiwgMHgyMTJiZmYyMiwgMHg1ZWMxMzg4NywKKwkweDhhMzk3ODRlLCAweDcxZjk1M2JkLCAweGM1ZGJmMjE3LCAweDc2N2YzMzJmLCAweDI4MDNhNmMzLCAweDc2Y2JlNmRmLAorCTB4Yzg5ZDI3ZjQsIDB4ZjAwYWJmNzYsIDB4MGQ3NzMxZTksIDB4Y2FmODM4YzEsIDB4M2Y1ZDcxNTcsIDB4ZGM3ODViYjIsCisJMHgxODJmMmZhYiwgMHhlMTQzODc5ZSwgMHhjMGFiZmJmZiwgMHg0YWZmZjdmZiwgMHhmYzgyZWZmOCwgMHhiYjczZTAzMiwKKwkweDRkYmVkMGEzLCAweDBlZjVmYWQ2LCAweDY0OWU2Yjg4LCAweGU3OWU1Y2VmLCAweGZhZWQyYjcwLCAweGY4MTVkZjEwLAorCTB4ZDNiMzA2NjcsIDB4ZGM1ODNhZTIsIDB4ODk2NWU0NDYsIDB4YzMzM2ZlZWYsIDB4MWU3NGVjY2MsIDB4NzlhODY5MWYsCisJMHg0N2M0MzQ2YiwgMHhjNGM2ZmUwNCwgMHg3N2YwNzY5MCwgMHgzODM4M2M1MywgMHgwNzgwMWMxZSwgMHg5YzQwZWYwMSwKKwkweDBhY2I4ZTg0LCAweGIwYWVkNzllLCAweDIzZGMwNTBmLCAweDdkMzU2MzlkLCAweGUzYWI3NTg4LCAweDBlOTk3NzA2LAorCTB4ZWY3ZTAwOTYsIDB4ODQ3OTg2ZmEsIDB4YjBiNGNmZGYsIDB4Y2M3ZWI0ZjksIDB4ZjAxMWZjMTMsIDB4MWUwMGM0Y2EsCisJMHhlZjk0MDM3NSwgMHg0NmJjNTE4MCwgMHgyMmI5MjgwZCwgMHhmZmVkOTVkZSwgMHhjMzU3NzhjYiwgMHhmM2Q2NWQ0ZCwKKwkweGY3ZmE5ODM4LCAweGZmMzQwM2ExLCAweGJmZmM3MGFiLCAweGRkOWQ1ZmU2LCAweDNlZDE1ZmJjLCAweGQ3MWJlNTc3LAorCTB4N2UxNTdmZTQsIDB4MWY5NTdmZDEsIDB4ZjVmZjkyMzYsIDB4MTZlZTk5MmYsIDB4MmZjOWJiYTAsIDB4ZmM0MGQxMmUsCisJMHhmZmJkZjZlNiwgMHg4YjAxM2JjOCwgMHg1ZTMwM2JmNywgMHhjYmRmMGY3NCwgMHhmNmZmYTMxNywgMHg5ZTk0N2RmZSwKKwkweDdlNjY2OGJlLCAweDNmZmI1M2E5LCAweDQzZjNkOWQ3LCAweDQ1ZjY2M2U5LCAweGU4ODMzODk5LCAweDc3Y2FmNjZhLAorCTB4NjY5ZjIwNzQsIDB4NWMyMmNkNTMsIDB4YTcwZDZhN2MsIDB4YTEyN2NjMjcsIDB4NDhkNmEwN2MsIDB4ZmNmNDA5NzQsCisJMHhmN2IyZDZkNywgMHgxMDIxNmJhNSwgMHhlN2QyYzM2MywgMHhiNTkzZWRhNiwgMHhjN2VmMDdjNCwgMHgzZWI0OWI1NiwKKwkweDk0ODdjNjAzLCAweGZjMGQ2MWY3LCAweDY4NmE1OTdkLCAweGNhYzVlZTJhLCAweDllZjMxOTRlLCAweDcxNjMyOGVlLAorCTB4NzZhNjE5YTUsIDB4ZmQzOGRmYmMsIDB4ZjdmM2VhYzgsIDB4ZTM1ZGQ5YzEsIDB4YmE3OTYxMjksIDB4OWZkMjdlZTIsCisJMHg1ZTI0ZGYzNCwgMHgzN2U0MDZiNCwgMHgxZTI1OWZmOCwgMHhjM2FlNWM4NywgMHg1YzdhYTQzOCwgMHhmZTc2MDBlZCwKKwkweGNiMTJjYjI2LCAweGYyYzNkODM3LCAweGE0NzljNGQ3LCAweDI4NjIzYmZiLCAweGYwZjM3OTYyLCAweGIzNzU2YWNlLAorCTB4MDBiNDM3Y2UsIDB4YThmZDhmZjQsIDB4YWQ5NTM0N2YsIDB4MzUzYzAwMmEsIDB4MzAzZTk1OGQsIDB4YzBmNDA0MTQsCisJMHhhMjVmOTVhNiwgMHhjN2U2YTM3ZSwgMHhmZDVhZjJlYSwgMHgxY2I3ZWY1MCwgMHhmYTExN2E0MSwgMHgxZjE2YTllMiwKKwkweGE5N2VkNWQ2LCAweDhjN2U2MzU5LCAweDVmOTE5YzcxLCAweGQ0NzBiZDMyLCAweDExODllNzI1LCAweDZmNmY2ZmY2LAorCTB4ZDg0YjNiMDksIDB4NGUzYjZhNWQsIDB4NWVmMTBiZjAsIDB4MGIwMGZiNWMsIDB4NzdjNmJiOTMsIDB4NWE4ZmZiZDgsCisJMHg0MDM0YmU1NiwgMHg1ZjA1NzcyOSwgMHhlZjc2N2NhNSwgMHg0YTVmZTQwMCwgMHg4N2M0MWJmZSwgMHhjNTVmZmRiMSwKKwkweGRmNzQwMzg3LCAweDRkZmYwMGVjLCAweDZmN2IwNjZkLCAweGY1Zjc0ZDVkLCAweGFhN2U0YzI5LCAweDk0YWU1ZGU5LAorCTB4ZDM1MTlmNTEsIDB4M2JmM2EwYmIsIDB4N2ZkMDViOWQsIDB4ZDJjNjBiMzcsIDB4OTI2YWNjNzUsIDB4YzlkNTllZjAsCisJMHhkN2JjMWU5NywgMHhkZGQwOTc0OCwgMHhlMjlkMzNmZSwgMHg0ODZmYmMzZCwgMHhlMDcyYTFmNywgMHhiZTIzYjQ2MywKKwkweDVkMjAxY2I1LCAweDMzZmVlY2QxLCAweGE4NGY0N2MzLCAweGMwYTBiZDFjLCAweGJkMWNhODRmLCAweDVmYzRhZmYwLAorCTB4ZjljZmZkOTgsIDB4ZjA5MDcyNzYsIDB4YzhiYjdmM2MsIDB4NmIyMzlmZjMsIDB4MjZkY2Y3ZDgsIDB4NzkwYTA3OTYsCisJMHg3NjVlYmQ2OCwgMHg1NjY5NmMyZiwgMHg0ZDdmYmUxYiwgMHhlMDU4YjIwZCwgMHhjOWY2Y2IyMywgMHg3NzhiM2Q2NCwKKwkweGRlODM1MzY4LCAweGJlMjZlYTJiLCAweGUwNDk0Nzc3LCAweDliZjk2MjRmLCAweGY3YjM0NjRiLCAweDlhNzlkNDNlLAorCTB4OTFiM2ZmMjIsIDB4YjRjYmJiOGYsIDB4NTQ3ODhmNGIsIDB4ZTYyNDQzYmQsIDB4ZDQ0M2JmNTEsIDB4NjdmYzdhMzgsCisJMHhmN2U3ZmYxOCwgMHgwZmVmZDU4YiwgMHhmOWU0Y2EwZCwgMHg4OGE0NDU5ZiwgMHhjY2FmYzdjNSwgMHg1ZTQwN2FhNywKKwkweDdiOGRmOTA2LCAweGJkYTBiNTJlLCAweGY0Mzk5NzkzLCAweDAxMTkzYzNmLCAweDg2NjUxNzdjLCAweDk5YTVkN2U4LAorCTB4OTRiM2Q2NTcsIDB4ZmE2MmZmZWQsIDB4ZjBkYmNkOTAsIDB4NGE2ZjkxM2QsIDB4ZTcyYzg2MWYsIDB4MzhiNzU4MjQsCisJMHhmOWU3ZmQyNywgMHg2NzllMDMxNSwgMHhlZjcxM2VmMSwgMHhiZGYxZTdmMiwgMHgwOWFmZGU4ZiwgMHhlNmFlODdjNiwKKwkweGNkZDMxOTlmLCAweGY0ZGQwM2FlLCAweDRjZDViN2IxLCAweDk0ZWEzZWYxLCAweDIzMDRmZDA3LCAweGRlZjFiYjhmLAorCTB4OWNiNzg4ZGMsIDB4MGE0YzgxOTAsIDB4NTg2NGJhMGYsIDB4ODQxYmQwYjcsIDB4MGJlMDExMWUsIDB4Y2YwYjdlZmMsCisJMHhmZTU2YjhmNywgMHhkYzRiZmZmMSwgMHhlOWIzZGM0MywgMHg0ZTRhZjlkMSwgMHgxM2RlZmM4MCwgMHhlZjFkZjYxNSwKKwkweDJiOWE5OWQ1LCAweDYwZjlmZmJlLCAweGUwMzU3YjljLCAweGJmZTcwYTY5LCAweDJhZDAxZGUyLCAweDdiZGJiZDk5LAorCTB4M2Y0NjRiYTEsIDB4ZmQxZjhhYzUsIDB4ZGI4ZmI3ZTEsIDB4ZWI1N2U3NDMsIDB4MmY5NjRkNjcsIDB4ZDI0N2FlNTAsCisJMHgyYzM0OWJkNywgMHhkMmE4YmVhZiwgMHg2MDVhZjk4ZSwgMHg0MmRmODBmZiwgMHhmZGQ0MzFmOCwgMHg3ZTJiZDkwZiwKKwkweGY3NzY4OTllLCAweGFjMjcyZWU4LCAweDllYjY1MWU3LCAweDVhNmFmODQ4LCAweGJmMGE1ZmY5LCAweDM3ZWZhNDQ5LAorCTB4Y2NiMTJiZWQsIDB4N2YxZjNhMGYsIDB4ZmQwNDk0Y2MsIDB4MDYzNTNlNWIsIDB4NzRhZDdkZjAsIDB4MGVjZDdmZjEsCisJMHg4ZjEzMmM5OCwgMHhiZTcwZTU0NCwgMHgyNTdhNjVlNCwgMHgyY2U1ZmE2MSwgMHgxY2U1ODVkMiwgMHg5YmE1ODdkMiwKKwkweGY5ZWFiY2IwLCAweDQyZTU4MWM0LCAweDY1ZDNjZjdlLCAweDA5OTFiZjc3LCAweDFmNWQ1NWZlLCAweGZlN2I1M2JlLAorCTB4ZTFlN2JmYTUsIDB4OGYzNzUwM2IsIDB4YTk1YzgzNmEsIDB4YWQ5ZmNhZWYsIDB4MGI3YWFmZDYsIDB4MGQzOGZlZmIsCisJMHhiZmVlYzdmOCwgMHgwZjUxZGE2NywgMHhiMzc3YjZiOCwgMHhkM2NlNzFiZCwgMHhkZGZjNjE5OSwgMHhiMzJlNTlmZiwKKwkweGVlOTcxNTdiLCAweDVhNGRlZjY1LCAweDM2MzIxOGQ4LCAweDI1NzRmYjExLCAweDA5ZjllMTY3LCAweDJkZTRjZGYwLAorCTB4NWM0MjZmODIsIDB4MGQwM2ZmMmIsIDB4OTMyZmNiOGIsIDB4NzUwNWVmZjAsIDB4YzQ3ODM1ZjgsIDB4Nzk2NTE3ZjIsCisJMHg2MmVmYTg2NSwgMHg1NjBkZjllZCwgMHg3MTc5MDRhZiwgMHhmYjU4YTMyMywgMHg1ZGZlMmI3MiwgMHg4ZmM0ZDljZiwKKwkweDNjMmU3MmU3LCAweDNkYzMyYjY1LCAweDBiOTYzYjA5LCAweDU0ZDRmYmY4LCAweGU4OTZjZWUzLCAweDQ2OWQ0NWY4LAorCTB4ZmM0ZGNmOTYsIDB4MDViZjYwODMsIDB4YjE4NDlmNjAsIDB4ZjIwNmNiNzcsIDB4ZTMzNjc0MzgsIDB4NTQyYWMzZjcsCisJMHgwZmNlMDVmZSwgMHgzMzE1ZWMxYSwgMHhlMTcyZDIwNiwgMHg0ODE5Mjc0MCwgMHhhZDk4N2VlOSwgMHgyMGNmZmQ2YiwKKwkweDg2Yjc2MDZmLCAweGNmYWZiZGMwLCAweGUzMDBmZTQ2LCAweDJmZGM2MjJiLCAweGU4M2ExNWVjLCAweGYyYzQ4MmY3LAorCTB4MGNmYjNkOGUsIDB4YTRkNGJkZTIsIDB4Y2JiZDNmNjAsIDB4ZmQwMzE5NWUsIDB4YThiNjE0NmMsIDB4MmI4MDQ1MWYsCisJMHg1NzJhYmRmYywgMHhlNDRjN2IxOCwgMHgxZDAzMGRiMSwgMHgwNDg1ZmQxMSwgMHg0MTdhMjVkZiwgMHg4MTljZjU2MiwKKwkweDRkN2RiZTNmLCAweDNkMzBmYTFlLCAweGMyZmU4N2EwLCAweDdkODBjZWVlLCAweDYyMTNkMzBjLCAweDkyZmZmNTgyLAorCTB4Y2QyMWFmZGYsIDB4NWYwZjEwOTksIDB4MDM0MTg0ZjIsIDB4NTQ3YmM2N2EsIDB4ODMzZGMzMWMsIDB4MTY3YjUzM2YsCisJMHgyZWQ0ZDNjYSwgMHhkNDJmZjI4NSwgMHgwM2YyODUyZSwgMHhmOTQyOTc2YSwgMHhhMTRiYjUxMSwgMHgxMGIxNzQ1YywKKwkweGJlMjIyNGRlLCAweGQ4NjJjZTgxLCAweGE4M2I4ODhmLCAweDkwM2Y5YmQ3LCAweGJiMDZjZGM5LCAweDFkNjI4NjdiLAorCTB4OGViOGY0ZmIsIDB4M2Y1ZGFjMTcsIDB4Yzc1ZDE5ZmQsIDB4NjkwN2JiMGIsIDB4MjQ0YmJlZTAsIDB4ZmJlZWY0NzgsCisJMHhmZTk1ZTY1YiwgMHg3Zjg4OGQzZSwgMHhmMTA3ZGJhOCwgMHhkMmVjMTdlZiwgMHhlODJmZGNhMiwgMHgwZTJlYzdmMCwKKwkweDUwMzE1N2VhLCAweDc3ZjNlMzhmLCAweGYzMGIxYzdmLCAweGUxZmE1OGY3LCAweDU2ZTg5NGVhLCAweGJkNTg2YjI3LAorCTB4ODQ1ZTU3ZTIsIDB4MzlkZDgzNmIsIDB4Y2Y0YmY2MDMsIDB4NGZkODM4ZjcsIDB4N2UxZmM3NDEsIDB4ZTgzYWY3MGEsCisJMHhlZGE3MThmYywgMHg4MjM2ZmE5NSwgMHg4N2RlYTY3ZSwgMHg1ZjYyZGY3YSwgMHg2MWViZmY3NCwgMHhiM2JiMGJmYywKKwkweGRmOTQyNzYxLCAweGY2NWU3NjEwLCAweDQzNzk3N2IxLCAweGY3MGFiYmY3LCAweGFmYTFiYjczLCAweGRjMmJlZTE4LAorCTB4OWIwZTU5N2UsIDB4MmY2MGRhMjcsIDB4YzU3Zjc4NDcsIDB4MzhmZWQwZjUsIDB4ODEyYmE3MWMsIDB4YWU3YjZmYWYsCisJMHhmMTExZjNkNSwgMHg1MGYwMDFlZSwgMHg0YmEzYzgzYiwgMHg1NjBmYTBiMSwgMHhjNzY2NzhmMywgMHhlMzZmNDFhZSwKKwkweDMyMjM5N2ZkLCAweDM4NWZiZjgxLCAweDc3M2NhNmNjLCAweDEyNzhlMTNmLCAweGJkM2VmZTY1LCAweGMyZjVmMDBiLAorCTB4YzEwNzRmYmUsIDB4M2YxNGEwN2IsIDB4YzllZmUwODMsIDB4NjBlMDY4ZmUsIDB4ZmU3ZGZlNDUsIDB4MDMxZmFmYzgsCisJMHhmMWZkYTFmYSwgMHgyNzRlMTVlZiwgMHg2ZTIwYWE1YiwgMHhmZmI4ZDMzZiwgMHhiNjY5NmMxMCwgMHg4ODJhODNlNSwKKwkweDkxNGRjZmRiLCAweGNmMzk0MzBlLCAweGUyMGUzNTllLCAweDc5ZGYyMmY1LCAweDYxZjk2ZTQxLCAweDNhYjc0YTM4LAorCTB4MmI4ZjUxYWEsIDB4MjQxMmU2MDcsIDB4MzE4ZDJhMTcsIDB4MjE2MDUxZmMsIDB4ZjUxNWUyODcsIDB4OGFlOTI5ZjEsCisJMHgzOWVkMTNmZSwgMHhiOTQ5ZjY4YSwgMHhmYmRhMjgzNywgMHg4NjM4YTFlZiwgMHgwNmNmN2UwNywgMHg0MzY1ZjQ3OCwKKwkweDgzZWU4ZDFjLCAweGE3YjU3ZGZkLCAweGNhNzdjYzY0LCAweDk2ZmM3ZGRmLCAweGYyN2Q2ODFiLCAweDdiZTA3N2QzLAorCTB4ZjZmMDJmNmYsIDB4ZjEyYjNiYzksIDB4NTJmNTliZWYsIDB4MjJhOWVhNzgsIDB4YTFlY2E2NzUsIDB4Yzk4MzNmOGQsCisJMHhmZDQyZjY1NCwgMHhjMzBmMjdiZSwgMHhkOGRmZDBiYiwgMHgyNzYwODg1ZSwgMHg5N2E2MTFkNCwgMHhkNDE3YjI0NiwKKwkweDliZTUwMjc2LCAweDM5YmUwNTNmLCAweDE2YTlhNWVjLCAweDYxN2YwZmM4LCAweDIwNjlkN2U0LCAweGU0MGZiNjk3LAorCTB4ZmI3MDY2ZWYsIDB4ZjRmZDEyMjEsIDB4ZmVjOTEzOWYsIDB4MjlmZGYwNzYsIDB4YmY4OGZkMzUsIDB4YzljYTJkNmYsCisJMHhhMTNkZDhjNywgMHgzZWQ3Y2E2ZiwgMHg3Njg2YmUwMSwgMHhhZmRiODdiOSwgMHhjZmY5NTRiYywgMHg2ZjFkZTk4NiwKKwkweDllZmUwM2RmLCAweDk0ZGMzMmEzLCAweGI1YmZiZmU4LCAweDBlNWZmZTE4LCAweGI4NTkzZGQwLCAweDA0ZDQ4MWU1LAorCTB4ZmEwM2RkZmMsIDB4YTdmNzIzNzAsIDB4ZWI5MDM2N2QsIDB4MWZmYmY1NTMsIDB4YjQwZTJkNDgsIDB4MjgxZjE1OTMsCisJMHhhNWZiOTNmYSwgMHg5YWZhOGFiNSwgMHg0MzdkNjUyYywgMHhmMWUwZGFmOSwgMHhjNWIxZjQ5MSwgMHhiYmQzY2U4ZiwKKwkweDlmOWVlMWYzLCAweDNhZWZmNjE0LCAweDgxMjdhZmY2LCAweDRiN2Q4N2YzLCAweGJhN2VkZjkwLCAweGJkZmUxOTdmLAorCTB4NDZmZjc1NTksIDB4MDFmODFmM2EsIDB4YjM5MDQ3MTcsIDB4OTc0ZDRmODIsIDB4ZWFjMjNiZDksIDB4ZWY4YWJmZjYsCisJMHhlZmRiYmUzOSwgMHg4ZjYxNDdiZCwgMHgzMzJmNWU3OSwgMHg5YzVlZmJmOSwgMHgxM2EwYWY1YiwgMHhmOWVlZmIzYiwKKwkweGU4ZmYwZjRkLCAweGVkMmI4ODJiLCAweDc5ZDU3NjYxLCAweDA1MWY5MzJiLCAweGMwZDMzZWJiLCAweDE2MWU4YmRmLAorCTB4YzBhYmU4Y2QsIDB4M2RjMGQ3ZTIsIDB4N2UwNmZmOWEsIDB4MDAzMzRjMmIsIDB4MDAwMDMzNGMsIDB4MDAwODhiMWYsCisJMHgwMDAwMDAwMCwgMHgxOGFkZmYwMCwgMHhmNTE0NzA3YiwgMHg3YmRiZGJmOSwgMHg3OTcyNGI5MiwgMHg3MTIxMTI0MCwKKwkweGMyMjA1NzJmLCAweDQ4NDlhYzkxLCAweDkyZWE0OTAzLCAweGYwM2VhNDEwLCAweGEyYTIxOTAwLCAweDc5OWUwZmFlLAorCTB4MmE5M2E4NGEsIDB4MDI4ZDM2MWQsIDB4ZDZkMzZkNTIsIDB4NGY0ZTJhMmEsIDB4ZDE5NTRhMmMsIDB4MjU2MmJjMzQsCisJMHg0MDU2OTQ3OCwgMHgyZjJhN2IxZCwgMHg0MTljY2E2OSwgMHhlZTQyMTkyMywgMHg4Y2MzOGE4YywgMHhiZjdkZmExZCwKKwkweDVlZGRjZGRkLCAweGM5YTc1NTAyLCAweGY2ZmJiZjFmLCAweGNmZGVmOGY3LCAweDA1MDQ4YWYwLCAweDU3MWEwMTkyLAorCTB4MDJhNjJhMjYsIDB4YzhkYzgyODAsIDB4MDBiNWZiNzEsIDB4YmI0YzYxNzYsIDB4OTRlMDBiM2QsIDB4MTU3MDA0YzksCisJMHhhNTAyOWZkMCwgMHgzMDI3NjEwMCwgMHhmMGVmZGQzOCwgMHhiZGJmNDIzZCwgMHgyMjVmMWM5MSwgMHg5ZTVlZWY3ZSwKKwkweDc3ZGMyMzIzLCAweDQwNTVhNTYwLCAweDVkZmQxMmY4LCAweDM2MWI1ZDE3LCAweDcwOTU2M2RmLCAweGQ0ODAxOTdmLAorCTB4MGZiOTFjZTEsIDB4MWQzMDBhZDAsIDB4ZTdmMDE1ZGYsIDB4MzJhM2E0NTgsIDB4ZTc4NGRiOTIsIDB4ZjcxNmZhZWUsCisJMHgyNDEyZmM1NSwgMHg4MjhmOWQyMCwgMHg3NjA0OGY0ZSwgMHgxNTc5OGY4MCwgMHgwNjI0Mjc5ZSwgMHg4ZGYzYzQ5ZiwKKwkweDIyYjA3ODQ3LCAweDM4MTAwMzNmLCAweDhlYzcwNzdlLCAweDAwNGFiMzM5LCAweDgxNGZkMzk2LCAweDgxNTg3N2JlLAorCTB4YzAwNWJmNjcsIDB4ZWZiNDJiZWYsIDB4ZGY5N2NiY2IsIDB4NmYwODQ5MDQsIDB4ZjI4NmY0YjEsIDB4NDk3MGZiZDgsCisJMHg5MGUzMDM0MywgMHhhYWRjZWQ3ZSwgMHg5ZDViYjdiZiwgMHg3OGM5ZmViNCwgMHhmZjFlMDFhZSwgMHhiNWZiYzc4MiwKKwkweGQ3ZWY2NDEwLCAweDdiN2RjMGVkLCAweGY1Zjk3ZWNjLCAweDBkZmJkMzlmLCAweDBhZjc4Y2JiLCAweGJlZjRjNDg1LAorCTB4MGEwM2Y0YTksIDB4YjNlY2YxMmYsIDB4YjZhZGYwODksIDB4ZjlhYWY4YWIsIDB4YjFiYzNmNmYsIDB4ODM3YWY5MTgsCisJMHg2OWY4NmQxNywgMHg2NGM0ZGY2OCwgMHhkOThmZTJmMCwgMHg5MWFjYTQyOCwgMHg4Y2RjNmM3MiwgMHhlMTQ1YTQ4ZiwKKwkweDVjZmM3ZGMxLCAweDQ3Mzc5ZDNmLCAweDFiNGZlNjcyLCAweDQ0OTA2ZjI5LCAweGI1NjFjOTEzLCAweGJhYjdjNTRiLAorCTB4ODAwNTliZTIsIDB4OWI3NzU2ZjgsIDB4ZTAyYmI4MDEsIDB4MTA4M2M4ZDksIDB4ZGJhMGE3ODMsIDB4YTMzYmYzZTYsCisJMHgyYTVkODdmNCwgMHg1ZmRkMDU4ZiwgMHhhYWYyY2VhNywgMHgwMWQxMmI2YiwgMHg0MDVlMmFlZCwgMHhhNjdhNDFiYiwKKwkweDQ3NDk2MDcxLCAweDEzOWYzMDdjLCAweGFjNzJlMWI3LCAweGU0OTJhMzNiLCAweDgwODM4Yzc0LCAweGI4OWVjODUwLAorCTB4MmRmNDhlZDUsIDB4ZWZhMzlmNTQsIDB4MWZjNTQ4NGUsIDB4YzI2Njc5OTksIDB4Y2JkMzQwYjMsIDB4MmY3N2QyYzIsCisJMHg1MTZmNzg3MiwgMHg0ODg5YTJmNywgMHg3NWRmMWMwMSwgMHgxY2Q0MzFlZiwgMHgwYzNjMTUyYywgMHgyYzUwNjJkZiwKKwkweDI5NjM5N2E0LCAweGE0NjZlY2JlLCAweGRkY2YxZTczLCAweDFjMTJmM2VkLCAweGZmMTBlMDE5LCAweGFlMDQ4YWIxLAorCTB4M2ZlZjYzOGQsIDB4N2NlYmVmNDIsIDB4YjJmOGIzMWQsIDB4YjM1ZjE4OWIsIDB4MzdhODdkNWQsIDB4NWZjMjlhNGUsCisJMHg4ZjI5MTg0YSwgMHhkMGNkNWNhOCwgMHg1Nzk3ZWJhNywgMHg1OWVjODZkZCwgMHhkN2U2YWZkZiwgMHgxZDMxYmFjZSwKKwkweDVjMDRiOGY1LCAweDE2ZmJhNDM2LCAweDYxMGMwZDFlLCAweGRmZTZjYjc4LCAweGUwMzEyNmU2LCAweDVmMjgxOWVmLAorCTB4ZjQ0YTk4MmUsIDB4MmQwNTg0ZmEsIDB4NjhjZmRlMDIsIDB4ZDM5ODM1ZjksIDB4NTY2N2U0NjIsIDB4OGZkNzRlZmQsCisJMHhmNDkxY2YyZSwgMHhmOWFiZjhhOCwgMHg3Yzg0YTBmMiwgMHg5OGU3NmQwZSwgMHhhYTg4MzUxZCwgMHg5Zjk0MzY5ZCwKKwkweGM0NjJjM2ZiLCAweDQ1ZTQxMGRmLCAweGVmYTllOTBlLCAweGU0OTI3MDNhLCAweDAzYWViMWQ4LCAweGNlODAxNmNjLAorCTB4YWQ2YzVkNzUsIDB4N2MwMzNiYjcsIDB4ZDk4ZmUzM2UsIDB4ODM4ZDA5YWYsIDB4YzFhNTViZjgsIDB4NzQ3NzVmOGMsCisJMHgxYzdmY2EzZiwgMHgzMDMyY2JiYywgMHhmODAyZTcwYywgMHgxM2JmN2Q5MywgMHhiZjM1OWY5MCwgMHg2MmQ4ZjJmOCwKKwkweDc5NDM3NmEyLCAweGIyMDdmMzBhLCAweGY0YTNhYmI5LCAweDljMDE1ODE3LCAweDViNjQ3ZjQ4LCAweGMzMmI3ZjgyLAorCTB4YTI3ZWFhMjMsIDB4ZmVmZjZkZDksIDB4NzE5YTI3NDksIDB4MGIxZGZmYmYsIDB4MTU4M2RiMzMsIDB4MWNmZTBmNGYsCisJMHgxMmRiMzVlMSwgMHg1M2ZiOWM5OCwgMHhmZGEyYzk0MSwgMHgwYWZkOTNhZCwgMHg4YTZlNTgxZSwgMHhkYzkzMzRmNCwKKwkweDZkYzUxMzNiLCAweGYzZjlmZmI4LCAweDgxZGQ1ZjkzLCAweDI3NTdjYWYwLCAweGY5MjY0NDhhLCAweGRmODQ1MDkxLAorCTB4ZWZhMDExYjMsIDB4M2RkOGIzM2IsIDB4Y2JiYzU1OTAsIDB4NWZlNGZmMzQsIDB4NzI5YmY2OWUsIDB4NGQzOTdmZGEsCisJMHhmZWJhM2MyNCwgMHg5MGVmM2VjZSwgMHgzNWY1ZTUwMCwgMHg2ODVkZjIwNCwgMHhhNTM4ZTc4MiwgMHhkNzBmODRjZiwKKwkweGU2OWM3NjlhLCAweDM2YWQzZWQwLCAweDc1ZTkyNzc5LCAweDM5N2ZiM2Q1LCAweDU0ZmM4NjVlLCAweGQzZjM3Y2JkLAorCTB4OTViZTkwMzMsIDB4N2EwNThkMWYsIDB4MTFkN2FhMjcsIDB4ZTQyOTIwZjEsIDB4NTFlMDM4YTUsIDB4OWYyNjgwZTMsCisJMHhmZjBlZWRkYSwgMHhhNTcxMzFhNywgMHgwMGM1MjNiZSwgMHhmOTY1NzYzNywgMHg0Nzg5OGQzZiwgMHgxOGNhYTBiNSwKKwkweDFmOThlN2VlLCAweDM1ZmU2OWQ1LCAweDIwZGY5NzhkLCAweDQ4NDNkNDdkLCAweGIxMTA5MzhkLCAweGYyMTU1ZDkyLAorCTB4MjE3MTQ0OWMsIDB4Yzk4ZDg0ZjIsIDB4M2VjZWRlM2YsIDB4MmVjYzRjMTAsIDB4NTMyMDRjZWIsIDB4MDM0YzJmN2MsCisJMHhhZmY5MjY3YiwgMHhmYzJmY2FhYywgMHg5YmFkZTRjNCwgMHg0MmZkMzY1MCwgMHg5M2ZmZWVhYSwgMHhiNThiNGMxNiwKKwkweDM3ODY5ZWNmLCAweGRiMzczZWM5LCAweDM4MGU3ZDk4LCAweDNjNjdmOTgwLCAweDI5MGI3ZjllLCAweGZiMzJmY2VjLAorCTB4ODYxZmNjNTcsIDB4NDVjYjRiZjMsIDB4YzBjNTE3MzAsIDB4ZWUyODkwNWUsIDB4NDUwOWI2MTUsIDB4YWNkYWUwMGYsCisJMHg5NjRhNjVlOSwgMHhhZGZjNDQyZiwgMHg5ZWVkZjhlYSwgMHhiNzNjOThmNywgMHhmMDhhNzgzYywgMHhmZDMyNzYxZSwKKwkweGRjYWE3YmMxLCAweGM0ZDQxY2MzLCAweGY2NjVhOWU2LCAweDdiZmYzNDJmLCAweDdkY2ZlMGMxLCAweDk3Yzg5Y2NmLAorCTB4ZGRiZWZkZjEsIDB4ZWQwMWYzNTMsIDB4ZDgzZTVlZjksIDB4NjdjYTFjZjcsIDB4ZmE3ODMxMzAsIDB4MGYzYjVjNjEsCisJMHhmMjhlMzg3ZiwgMHg3NWJkM2M2MiwgMHhlMDFhNWYyZCwgMHg0NzhkNGUwMSwgMHg3ZTA3YzQ3NSwgMHhiYmViOTEzZiwKKwkweGUxODFmNjQwLCAweGRlODdjNTg0LCAweGZjOThkMzRkLCAweDMyNmY3OWFhLCAweDZmZGMzZmU5LCAweDRlOWUyZmE0LAorCTB4M2U5ZDdkZmQsIDB4OWNmZDdkZmQsIDB4ZWJlYWFkZDksIDB4OWY5ODM1YmMsIDB4Y2M5ZmRmOGEsIDB4ZWZhYzE4MTEsCisJMHhlNjBhNGY5ZiwgMHhiYmU5MzhhNywgMHg4YTk3M2Q0YiwgMHhkNWJkOGM3MCwgMHg2ZmQ0NGZkMCwgMHgzN2UzMWQ4ZCwKKwkweGMzNTM1N2QyLCAweGJlYzA2ZDg5LCAweDcxM2YxNDJiLCAweDVmYjhjODBkLCAweDI2YTZmOTk3LCAweGQxZDlmMDM3LAorCTB4NzY2OTE2Y2UsIDB4NjY2OWU5MDYsIDB4ODJiNzNiY2EsIDB4YjQ4YmQ3NmEsIDB4NzQzYjdkZjgsIDB4ZTVmZDAwNTgsCisJMHg2N2Y1YTlhNCwgMHgzYTA3NWM3NiwgMHg2MzkxNmY3ZSwgMHhjYTcyYWZlMywgMHhmN2VhNjk3NCwgMHgyNTRhYmY4ZiwKKwkweDNmMWM1MWU0LCAweDNhYjI3MmVmLCAweDMzOWJhMjY3LCAweDkwZDk3M2IzLCAweDVmNzBlNzRkLCAweDI4MWRhMDBjLAorCTB4MGRiMTM2OWQsIDB4ZGY3OTkxZTksIDB4NTdiYzZlMzUsIDB4OTNlNDBkNjcsIDB4NjRmN2U4MWYsIDB4MDdkZjY2NWUsCisJMHg5MTk2ZjdiOCwgMHhjODFjYzFiZSwgMHg4YTRmZjU2NywgMHgzYmFjMzgxNSwgMHhhMGM1NjNjMiwgMHhiZTUwZjI4NCwKKwkweGUyNTcxNjA2LCAweDAyZDg2NWUzLCAweDQ3NDg5ZDM1LCAweGZkZDc3ZDA1LCAweGI4YTRlZDExLCAweGU5ZDRkNGNhLAorCTB4YzY1ZTI1MWMsIDB4YmQzNDA3YzEsIDB4OWE5OWE3MTUsIDB4OGZmMTQ2M2EsIDB4ZTkxZjY4ZGIsIDB4NWUwZTgzNmIsCisJMHg3ZjM1NWZmNSwgMHhjNjcyNjk5NiwgMHhkNmM3Y2Y4NCwgMHg1YzVhMGQzMywgMHgxNWQ5MjcwZiwgMHhkYjJmZTkxZSwKKwkweGI4NDA3YTg3LCAweDQwMzgxY2NjLCAweGI0M2Q3YTJiLCAweDQyNjczZWEwLCAweGNiYWY3ZDQwLCAweDY3MjliZjE4LAorCTB4NzhmOTYxMmMsIDB4MzMyMzhiMmEsIDB4ZTdhZWY1MzUsIDB4NjhmNDgwOWEsIDB4ZWI4NTdjYTcsIDB4ZDNjODJlMjYsCisJMHhiMDg4MTNmYSwgMHg5OTk3MDI1NSwgMHg1YjNiMTQ1NiwgMHhhZDhmODM2NywgMHhhZDg5YTA3MywgMHhhZDlkYTE3MywKKwkweDViMDc0MDM3LCAweDViMjA4MjZmLCAweDBkYTA0YTYxLCAweGViNWZmYzU4LCAweDBjM2NjM2VhLCAweGEyNmU1ZDNmLAorCTB4MThiYzVjN2MsIDB4ODdmMzQ2OWEsIDB4MmViYzlhYjUsIDB4ZWE4YzBmMmYsIDB4MWU1YzNmMjUsIDB4NjRjZTQwNzMsCisJMHgyZTRlNWQ3NCwgMHg5ZDk4ZjIxMywgMHg5MWIxNzJlYiwgMHgwNzNkZTIzZCwgMHhhZDY5MzNmOCwgMHg4NzdiMTA4MCwKKwkweDk5ZGU5MjVjLCAweGUwOTk4MjA1LCAweDVjMTg5MDJhLCAweDUxZTUxZGZkLCAweGIyY2Q5MjFhLCAweDU0YjkxNDc3LAorCTB4OGYyNzZlOGQsIDB4OTE3MTcyNmEsIDB4ZWE4ZDhmMGQsIDB4NjA1YmFmNmIsIDB4Y2MzN2FlYjAsIDB4ZmYxNDk5ZDAsCisJMHg3MjEzZWE0NywgMHg4NGUyY2U4OCwgMHgwYzA1MmZjYSwgMHgyMWY3N2UxMSwgMHg2YmUzMTk5ZiwgMHhiMzY1NTE3MSwKKwkweGY3NGVlMTA3LCAweGUzMTk5ZjQ5LCAweDY1NTk3MTY4LCAweDZhYzQ0NTkxLCAweGRmNjNmNWIzLCAweDQ3NjU4NDZjLAorCTB4MWZhMDNlNTIsIDB4M2JjODMxZDksIDB4ODdiYzNlNTAsIDB4ZmE1NGQyODcsIDB4N2NhN2UzOWUsIDB4MTAxZmUzNjksCisJMHgwNzY1NGZjOSwgMHhhZGQ1OTA0MCwgMHgxN2U0NTU2OCwgMHhhZWVmMzU3ZSwgMHhiYTdhYTk3MSwgMHg0YjNmMjZkOSwKKwkweDBmNmY1ODdlLCAweGMzYzgwOTI0LCAweDBjZWFkNjlhLCAweGFjMWI4N2NhLCAweDhjOWZiYmVhLCAweDg5YmVhNjE1LAorCTB4MWUyMWIxNzIsIDB4MmY5NDYxN2IsIDB4MDgxYzU3ZGMsIDB4YjlhMTM4ODcsIDB4NDdhNTFkYzUsIDB4ZjAxZGZmYzcsCisJMHg3ODRhZjlmZSwgMHhhZmNhNjUwZiwgMHgwOWJmMjliOSwgMHhjNjFiZWIyMiwgMHhiM2JiNzk2YiwgMHg5N2M0NGNiMywKKwkweGEzMTcwZTkwLCAweGE5Mzg5NDIzLCAweDI2ZGM4NWI5LCAweGRlOTdiN2NiLCAweGY2YWEyNzBiLCAweDdiNmM5N2I2LAorCTB4NzVlZDc0N2EsIDB4ZDNkZGJiNGIsIDB4YjcwZjdlNDcsIDB4ODAyN2IzN2UsIDB4NDMzZjg2ZWYsIDB4NWRlZjc4YzQsCisJMHhjZThmYmNiNywgMHgzOTQyOWEzNSwgMHg1Zjk3YTg0NSwgMHg5MmI2OWMyNiwgMHhjYWY2ZTgzZCwgMHgyMDk2OTJhMSwKKwkweGY4MTI2ZGRmLCAweGNhMGZjY2FkLCAweDk2NzVjMzVkLCAweGUxZWY2YTI3LCAweGNhMWVmOGE1LCAweGFiZTdkOGEzLAorCTB4NGEwZmIyYzIsIDB4ZDIwZTlhNmEsIDB4NTdiNzJhNWEsIDB4MzllMTBlZTEsIDB4ZjIzNmY0NDIsIDB4ZmZhNDY1OTEsCisJMHhhYzhmOTRjMSwgMHg5YzdmMzE5ZiwgMHgxNjlkZGFhMCwgMHgxZmY3YmFhNywgMHgwYWJjNzg3OSwgMHhkZmM2MjBmYSwKKwkweGJjNWZmNzFhLCAweDhmOGMyZmYwLCAweDkxNGU0MzhkLCAweDdiZWQ5NzhlLCAweDdkZWE5OWE2LCAweGNhYjBjZmRkLAorCTB4ZGQxMWM0MzMsIDB4ZDk3NjY2ZWYsIDB4NzczYjNjMDIsIDB4NWYzYTUyY2QsIDB4ODc4ZjUxZjEsIDB4M2Q3NWVmZTIsCisJMHg4MzJhMzZhMSwgMHhjNjI3ZGRjMywgMHhkN2FmZjZhYiwgMHgzZjcwZGZlOSwgMHg2ZTdjNGYyNCwgMHhhNjQ4N2I0NywKKwkweGE3Y2E4YjNjLCAweGVmMzc2ODNlLCAweGFiN2YyMWI3LCAweDYwZDA3ZWE5LCAweGY2YWJmMTg1LCAweDU4ZmY3YTk1LAorCTB4NTYxZmU0N2YsIDB4MTlmMDNiZWEsIDB4YTk1ZGY4ODUsIDB4Y2I2MmJmZDEsIDB4NWQ5MTM3N2QsIDB4ZmIxYmY0YWQsCisJMHg2Y2FmYmQ0MSwgMHhmNmQ1Y2VkNCwgMHgxZjEzZDdmOCwgMHhlNzhkZGJiNSwgMHhjY2FmYTkxYSwgMHhlYjBjZmFhNywKKwkweDc1ZDUwZjMxLCAweGFhNWJmYjcxLCAweGQ4ZDk1ZjU4LCAweDFmZmVmYzY1LCAweDI0OTVmNjM3LCAweDgxYmYyZDYwLAorCTB4ZDcyZTQ3NTYsIDB4NGU3ZjEwY2UsIDB4ZmQ1OWU3ZDYsIDB4ZjU2ZGU0MzYsIDB4OGJhMmNkZjMsIDB4YzhhNzZjZTAsCisJMHhmNWQxZWJlMiwgMHhiNjFlN2IxMCwgMHhkMTViMzFhNCwgMHg0NmU1NzVmZCwgMHhjM2M3ZDU4ZSwgMHgzNjRiZGZmZCwKKwkweDc4MjhlODg5LCAweGJkZDU4MzI5LCAweDdhYjNhZjU4LCAweGQ5ODgxZDAzLCAweDg2Y2EwMTZiLCAweDNkN2JmYjQzLAorCTB4NDI2YjkyMjUsIDB4ZTc3N2FmM2MsIDB4ZmY0ZjU0ODksIDB4NjcwNDlkNzUsIDB4ZjRmYTUxMmMsIDB4ZGY5YWJlN2EsCisJMHgzZWE1NjU1MSwgMHg5M2VjN2VlOSwgMHhlZjIxMGVjOCwgMHgzN2JjNzJlOSwgMHhmYzA1YjBmZCwgMHhhYTA0M2ZiOCwKKwkweDlhY2U4NjNlLCAweGYzM2U1ZDU4LCAweGU0OWU0ZWM4LCAweGZkNTE4ZmNmLCAweDAyNjk5NmQ5LCAweDBlMWU0NjIxLAorCTB4YTMwODBjNjEsIDB4NGQzNmY1ZjQsIDB4YTk3OTA5N2YsIDB4ZjE0NGZkODYsIDB4ZTRmZGMzMmEsIDB4N2VjMzVjZDIsCisJMHgyYjY5MjM5YiwgMHgwYTQ1MDFlMSwgMHg4ZTI4NGI3YSwgMHg0OGE0ZWZhYiwgMHgyMGY3MGM1MywgMHg1ZmI4ZmY4NCwKKwkweDQzNzE4OWFlLCAweDY0YzM5Y2QyLCAweDE1Y2UxNWNmLCAweDM2OTBkZTZjLCAweDllNzhkMGI3LCAweDVmMTNjYjVmLAorCTB4ODdiODMzYjYsIDB4NjU3Zjk1N2MsIDB4ZTY3NWU4MzYsIDB4N2U5ZTExODAsIDB4MTA5MjFkYjQsIDB4MzlhOGUzYWYsCisJMHgwMGExNmU2ZSwgMHhjMTM2MjVkNSwgMHhkNWNhNWRmOCwgMHg0YzAyNjJlYywgMHg4NjFiY2MzMCwgMHg5NjFjZWVlNSwKKwkweDA5NDVkOTJiLCAweGY3MjBjOGZjLCAweDFlYTFiOTc4LCAweDM0MzRkZDU4LCAweDQyMmEyOWMxLCAweDdkNjMwZjU0LAorCTB4ZDQ2N2Y5NDYsIDB4MjU5ZmU1MTgsIDB4N2UzZGU1MWIsIDB4ZDlkZTUxODUsIDB4NWY3OTQ2NGQsIDB4YWI5NDYyZGQsCisJMHhjZGNhMzE1YiwgMHhlMWE2NzFiMywgMHg0YWY2YzRmYywgMHhmMzc5M2MwMywgMHhkN2YzODYwZCwgMHhlMDE4MTdmOCwKKwkweDM3NmZkYmE5LCAweDcxZDY5ZjljLCAweGEwYmY2MWFmLCAweDVmNjE5NTZiLCAweGQ5Y2JiM2I3LCAweGQ1ODFiNWMxLAorCTB4MDI2NmY2NzEsIDB4YTBlYzE1ZDMsIDB4MDY0M2YwZTgsIDB4ZmY3YWYxN2MsIDB4MTJhYWY4MzEsIDB4NDdhNWNlNTEsCisJMHg0OGMyZGU1MSwgMHgxNDg0NzAzYiwgMHg2ZjE4NzhhMCwgMHg1N2ZhZjEwNywgMHhhYWRmZjRlMiwgMHg5M2Y3OTNlNSwKKwkweGVlNGUzZWNlLCAweDhmNDEyZjNhLCAweGEwYmNkYTdmLCAweGIxZmFjMmRjLCAweDU1NjkwYTdmLCAweGNiNTY3NDg5LAorCTB4YWYyZDNlNmIsIDB4NjQ0ZGY2YzEsIDB4YTk3M2UwMjQsIDB4MGYxNDE4YjAsIDB4M2MyYjFjNTIsIDB4YmIyMmFiZTksCisJMHgxZDM1MGUyYywgMHhlNGEwZjY0NCwgMHgzMjU1N2I2YywgMHg3MDQwOTc5ZCwgMHg0YjQ3NTM4ZCwgMHg1Mjk2ZmU3NCwKKwkweDcyYjFjYzBlLCAweDhmMzY2NzQyLCAweGExNzFjYThiLCAweGUzMjdjYWQyLCAweGZkNmZiMmUxLCAweDU0ZWNjOTZkLAorCTB4Y2ZhN2MzM2EsIDB4MzU1MmI4N2QsIDB4MWM5N2NjNmYsIDB4NDc5MThlNjAsIDB4NGY5ZWE5NDUsIDB4NWQ1ZThjYmMsCisJMHgwODljZmFlZSwgMHg1MmIwN2RlYiwgMHhmYmIyNmZiZCwgMHhkNWEzZGNkYiwgMHg5ZTY2ZTIzNywgMHhhYjMyNWZkNSwKKwkweDMyNzEwZWM3LCAweDZhZGQxZjliLCAweDdkOTBlNjBmLCAweDVmOTBjOTlmLCAweDMxN2NjNWM5LCAweDU2MDUxMjY4LAorCTB4MzZhMTcxYmYsIDB4OGM0YzJhNjIsIDB4NmU1MmYyNTEsIDB4OWY1MTJmOWIsIDB4Y2QyYWVkODYsIDB4OGJmMjE3MjcsCisJMHg0NjVlMmJlNywgMHhhMjU0MmJiZSwgMHhiN2Y0YzViNiwgMHg5OWRlNTcyNywgMHg3MzllNzk0YiwgMHhiYmMyMmZhZCwKKwkweDk3M2NjZmVmLCAweDlmY2M3OTQzLCAweGY3YTJlZDJjLCAweDE5MjFlNzg3LCAweGQ5YzYxN2M4LCAweDQ4NTA0OTkwLAorCTB4MWM0M2NhMDQsIDB4ZDFjZTJmZWIsIDB4ZmM2MjMzMjMsIDB4ZTU4NWEzNzYsIDB4YWRmYWQwMmIsIDB4ZTkzOTM1M2IsCisJMHgwZDEyZDZmZCwgMHhiMTNlMmY2ZiwgMHg5ZGY4ZTMwMiwgMHgzYzk4ODc1ZCwgMHhiNDA3MzM2YSwgMHg3NDQ5YWQzZSwKKwkweDRkZjdmYmUxLCAweGJmNTIxNjcwLCAweGE4OTE1MjA5LCAweGZmN2FlOWY2LCAweDNlZmY5ZTM1LCAweDU3ZWY1NTc5LAorCTB4MzZiZTc3MmYsIDB4MDdkMGRmYjMsIDB4NTFiNDhlYzMsIDB4ZjNmMThkZTcsIDB4ZWFkZjI4YWMsIDB4MjU4ZmJkZmIsCisJMHhmYmQzZmNiMCwgMHgxZjliMzY1OCwgMHg2NDFmZGY0NiwgMHg5YjNiODE3MywgMHhjN2Q4MzAzZSwgMHgxYjFmMmRkZCwKKwkweGU1MWVlZWVjLCAweDI4N2VjMzEzLCAweDhmMTk2MjNkLCAweDY0ZjY4N2ZjLCAweGU1MDNiOWNkLCAweGFkYjc3ZTc3LAorCTB4ZDQ1MGZhODQsIDB4NGM2ZTdmNTcsIDB4NjI3YTFjOWYsIDB4ZjdjMjZjZjIsIDB4YzczY2Y5YmYsIDB4MTc1OWU4ZTgsCisJMHg5ZDM0ZjM2NCwgMHg0ZWViZDNjZiwgMHgyZWI0MzgzMiwgMHgzZTc4ZDZjNCwgMHg1ZjU1YmVmNSwgMHgzYzgzN2ZhZCwKKwkweGMyMjdlYTMzLCAweDliNDcxMThkLCAweGQ0NzlkNGMzLCAweGQ2NjdiZWJhLCAweGMzY2E0YWI4LCAweGIzNTZkOTNkLAorCTB4ZTE1MjRlYmEsIDB4MGFiYjUyYWMsIDB4NmI0Yjk5Y2YsIDB4NDhkY2UyZDgsIDB4MDcwZjZiN2QsIDB4ZDBmNjg3MTIsCisJMHg5Nzg1ZDU3YiwgMHg3NzQ0ZjhhYywgMHg1MGY1NmM4NiwgMHhiOTE5NWE1ZCwgMHg0ODJiNzM0MCwgMHhlMzc5YjEwZiwKKwkweDQxZDk1NGQyLCAweDA2MmMzOWRmLCAweDlkMTk1MmIzLCAweDM4M2ZhODkzLCAweDAzNWU1MjZiLCAweDJmMjUwMThjLAorCTB4ZjUzZTcxZmUsIDB4YWE0OTgzMDEsIDB4ZjhiZTI3ZGQsIDB4ZTkwNTdjZGMsIDB4OTdjNTI1N2UsIDB4MGE0MGY3NGMsCisJMHg5NGU3NjM1OSwgMHhmYTg1OWNmYSwgMHhjMjUzZWE2MiwgMHhmMGNkNzUwZSwgMHhjYzhmOGM3MCwgMHg0NzhhNzViOCwKKwkweGQzZDc1NzhkLCAweDlhZjVlZjhhLCAweGU0NzEyNmRhLCAweDgwZGFjZjBmLCAweDA3ZThhN2U2LCAweDQzMTdkNTEyLAorCTB4MWZhYTZjZmIsIDB4NzA5MjAxOTgsIDB4ZGI2ZWNjZmYsIDB4ZTNjZjY0MGIsIDB4NWZhYTY2OTAsIDB4N2Q2MzVhYjAsCisJMHhiNjViZTE0MSwgMHg3ZDA5YzUwMCwgMHgxMWVlOTMzZSwgMHhmYmM1ZTU3ZSwgMHg2YzJkN2JlOSwgMHgyODk4MzAwZSwKKwkweGQ3N2Y5MDk0LCAweGY1NjAxZDI3LCAweDU5NWM4OWQ3LCAweDE1ZjliMGYyLCAweDdhM2YxNDQ4LCAweDZlYjZkOGY3LAorCTB4Mzk5MWU3NTIsIDB4YWZmZjEyMGIsIDB4MGYxMmI4NzMsIDB4NmE0MjMzZWIsIDB4ZTFjZGE5NWQsIDB4ZjlhYmJlNzQsCisJMHg0M2RmMTljNywgMHg3YzQwNmQ5YiwgMHg3YzFhNWY5ZSwgMHg0ZWU2Y2JjYSwgMHhkOWQxMGU2MiwgMHhkNmU5NTI2YiwKKwkweGQzZjlkNWU5LCAweDczYmU4OGY5LCAweGU3ZDViYjY1LCAweGQ3NzlkMTQ5LCAweDA3ZTQ0OTg2LCAweGNlNzU0NzI4LAorCTB4MmY3NzczYzcsIDB4N2RmZWU1MTgsIDB4N2NiMmJlYmEsIDB4NTU4Zjg4ZjMsIDB4MmRiY2VhNGQsIDB4MDdmNmY3YWEsCisJMHg4ZWRlOTE0ZiwgMHhiYjFjNTkzOCwgMHgzZTc4ZmRkYywgMHg2MTFmZjdlYiwgMHhlZjNlNDBmMiwgMHhmODYyZmUyMiwKKwkweDk5ODllMjVjLCAweDNlZWY5ZTBiLCAweGY4NTc5NGYxLCAweGIzODVmY2UxLCAweGY4NzhmOWQ1LCAweDAyMzk4Yjg1LAorCTB4NzdkZmFmZGUsIDB4YzlkOTI0ZTgsIDB4NmUzYzFjZjAsIDB4ODMxYjZkOGUsIDB4NjhlYTY1N2QsIDB4MGFjYzZiZjMsCisJMHg0ZDkyZjUzMSwgMHg2Y2MxM2ZiZiwgMHg5ZjIxOGZiYywgMHhmYzhiYWNmYywgMHg1ZDg5ZWIxMSwgMHhmOTQyMWY1YSwKKwkweDllYjZlMjkyLCAweGIxZDk3NzJmLCAweGUyZGY0NTRmLCAweGI4YjM2ZjQyLCAweDhlYzk3ODRkLCAweGNiMGE3M2Q3LAorCTB4YTE1Y2ZhNWIsIDB4NDRiY2MzOGQsIDB4NTk5Yjk2M2EsIDB4NzZhZmU3M2MsIDB4YmJhNzY0OGEsIDB4ZDQ4MmY2ZDAsCisJMHgwNGE1OWFkNywgMHhlYjhlM2YzNiwgMHhlNGRiZDc2ZiwgMHhkNjVlYzk0NywgMHg0MTk5NTA3YywgMHgzYmU3NmZmZCwKKwkweDk1N2Q2ODM3LCAweDZiYTY0ZjlhLCAweGYwOWQzOWY2LCAweDY0ZGUxZjEzLCAweDM1OGE1Nzk2LCAweDRkZWM0YWZhLAorCTB4MzMyMWQ1M2MsIDB4ZjlkNWUxNDAsIDB4Nzg4ZjM2ODEsIDB4OGZkNjZkZWMsIDB4Nzc1NzE3ZmQsIDB4MWM3MGVhOTksCisJMHgwMDAwMWM3MAorfTsKKworc3RhdGljIGNvbnN0IHUzMiB1c2VtX2ludF90YWJsZV9kYXRhX2UxaFtdID0geworCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MzNhOThmOGEsIDB4MzJlOGY0MzAsCisJMHgzMWU4YTQzMCwgMHg0M2Q0ZGMzMCwgMHhjZjEyZDM4OCwgMHhiZjRjYTJlMSwgMHg4MzAzMGIzMCwgMHgwMzhiMTAyOCwKKwkweDdmMTAyNGIxLCAweGY4NjA2NDYzLCAweDdlYmM0OGNlLCAweGJiMDQxMTVlLCAweDgxODE4MDQ1LCAweDA3MGZjODBmLAorCTB4MTkwNWZmZDIsIDB4MzMwYjNlMTgsIDB4ZjkwM2YwMzAsIDB4NmRmYzgwYjMsIDB4ODgwODdjNDAsIDB4Mzc2MjgwYzMsCisJMHgyMDY3ZjQ4MCwgMHgwMmM0MGZiZSwgMHgxN2NkZjgyMiwgMHg0MTdmMjAyNCwgMHgwN2ZmOTUwOCwgMHgxMDQyZmY4ZCwKKwkweDYxNjM3ZWJmLCAweDA0OTZmMmZjLCAweDRkZTFiMWU0LCAweDBmOGNkYzA0LCAweGVmNDBhNzdmLCAweDZhODdlMDQwLAorCTB4NTU3ZDdjYTgsIDB4YTAyYjA2MDYsIDB4ODQzYTg3NTgsIDB4N2U0OTA4ZmYsIDB4NDBjYzUwMTYsIDB4OTNlNmMyMTUsCisJMHgwNTUwNjA2NywgMHg2MWFiMWZmMiwgMHgyODFmOTczNywgMHg1Zjk0MDZhZiwgMHgwMDA3MzUwNiwgMHgxNWU1YWM2ZiwKKwkweDAwMDAwMzY4Cit9OworCitzdGF0aWMgY29uc3QgdTMyIHVzZW1fcHJhbV9kYXRhX2UxaFtdID0geworCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4NDUxNDc4MDksIDB4ZjRmNTcwZGEsIDB4NzMyNjRjZjQsCisJMHgxMDkwOTI2NCwgMHhhNzA5MzBhZSwgMHhlMTVjMzgwYSwgMHgxMDg0Y2EzMCwgMHhhOGVhMjQxNiwgMHgxMzg4YTg4OCwKKwkweDJlNDIxMDgxLCAweGY1NzE3NWQxLCAweDExYzNhN2ZiLCAweDllMzc1OTQxLCAweDFkNDdmYWNiLCAweGEyMmNkYzEwLAorCTB4NjAxODg4MDYsIDB4YjIwMGMxYzAsIDB4MTc2MWJiOGEsIDB4YzM2M2Q3MTUsIDB4MDE5MjFhMGQsIDB4ZTVjNThmMTUsCisJMHhlYWFkZjdhYiwgMHg0NGNlZWU5OSwgMHhlZmYzZWJhMiwgMHhlM2ZkZmI3ZSwgMHg1NzU0NTNlMywgMHhlZjU1NWJmNSwKKwkweDVkYmQ2ZjVkLCAweDcxMDI0YTMxLCAweDAyZTQyNmY2LCAweGYyMTFjNmZjLCAweDQ5MDg0ODhjLCAweGUzNmQ5Njg5LAorCTB4MTc0OWM3YzMsIDB4OTJjZGU0NDIsIDB4ODg0MGFkNmIsIDB4MzQzZGJhZjAsIDB4ZmIyMTA0NmUsIDB4MzMwMTA5NTYsCisJMHg1ODc2ODdhZCwgMHhkM2Y1YTEwOSwgMHhjYzA3ZDczNSwgMHhkNDNlYjQxOSwgMHg5YWZhYzFlYywgMHhiZWU3YWMxYywKKwkweDQ4YzNhZWZhLCAweDhhYWZhNWViLCAweDc2MWJhODQ2LCAweGRiMzQ3MjljLCAweDM3MzcyOTA4LCAweDdkMDU3MjNkLAorCTB4MjQ1NTdlMWUsIDB4YzQ1MGU5YWIsIDB4YjI0MGM1MzUsIDB4NDcxZTM5MDgsIDB4YWQxOTZmZDgsIDB4Njg1MjEyYTcsCisJMHg1NWQyZDU2MSwgMHgzY2MyNjczYiwgMHhjNGNjMWE4YSwgMHg2ZTk0ZTE0MiwgMHgxNWVkN2I5OSwgMHhhZjc3M2ViNCwKKwkweGU5NGJhMDQ0LCAweDc3NTM0YWRhLCAweDEwMTc5ZjVhLCAweDY4YmVhMGVhLCAweDRlMzg4N2M3LCAweDU0NTI3OGRiLAorCTB4NGY5MDg4MzcsIDB4MzVjNDcxZmQsIDB4NGQxZGQ2ODAsIDB4ZTdkMTM3YTksIDB4MTMwZDgxYzUsIDB4N2FmMTdmYTEsCisJMHhmZGEwNmRjMSwgMHg3ZTc2NmI4YiwgMHhlYjhiZjAwNCwgMHg4NTIyYmVhNSwgMHg0YWQ2YmYzZiwgMHhkOGQ5MDM1YywKKwkweDYzYWMwODE3LCAweGRmMzBiNWNlLCAweGM0NDgzZmQyLCAweGU3NDVlYjRjLCAweGMwMTEzNmVmLCAweGU0ZGFiMTkxLAorCTB4OGZmOGMzYjUsIDB4MTg3NjVjOWEsIDB4NTFjNzE2YTcsIDB4N2JmYTU5ZjAsIDB4YWY3ZDBlM2EsIDB4MGRjMTY1ZWMsCisJMHgxMDMzMmI0YiwgMHg3NWE3Y2MxZiwgMHhmM2ZhNjU4YiwgMHhhNTU3NTgzNiwgMHhiZmJjM2ZhOSwgMHhmNDEzNDFlNSwKKwkweGQ4MjgxYjliLCAweGZjYzE3MTZjLCAweGMyMjY5OTU2LCAweDk5NTY2YjNjLCAweGUxNDUwNzBhLCAweDUxN2RhZmNkLAorCTB4MmJlM2FmMzMsIDB4YTlmNTc0ZmIsIDB4YTdlNWY1ZGEsIDB4NzM1YThhN2UsIDB4ODg0YzVlYjQsIDB4ZjMwNmNlYTcsCisJMHgxZmFlOTgwZSwgMHg1NDdlN2QxYywgMHhjZjdhNDQ0OCwgMHgyYjg5MTVhZiwgMHg1MjlmMGEyZSwgMHhlZmNiOWYxZSwKKwkweDFmMDI3ZmQyLCAweGQ2MDdiNzZjLCAweGI1ZTk0NDY2LCAweDhlZmYwOWMwLCAweDkzYWNlYmQyLCAweGNlMThjZmQzLAorCTB4Y2E1N2MzNTIsIDB4NzQwZTgwNDcsIDB4Mjc3ZWQ1M2UsIDB4ZDNmOThmOTYsIDB4ZWZjMjdjYjAsIDB4ZTUzZGJjNDIsCisJMHg0YWU1ODgxZiwgMHgzZjlmMWJiZiwgMHg2NThkMWZlZCwgMHhlNTgzZGY4ZCwgMHg1ODQ5ZmViMywgMHhlYzVlZmMwNiwKKwkweDFkM2ZkYWI3LCAweDFmN2UzNWNiLCAweDVmYzE3ZjNlLCAweGJmYWQ2NTg0LCAweGYzYWY5ZjAyLCAweGJkNzJjNDJmLAorCTB4MmZlN2M2NWYsIDB4NTk2MTk3ZmIsIDB4NzJjNmFmZTcsIDB4OTYyNTdmYTMsIDB4ZjYwMGZlZjUsIDB4ZDdlOWNjZGIsCisJMHhlN2MzYWZlMCwgMHg1ODBkZmQ1YiwgMHgyYzIxZmQwNiwgMHg2MmY3Zjg3NywgMHhkNWUzODJiOSwgMHg4YzcyNGQ5MSwKKwkweDBmMGUyZjE0LCAweDIwNzE1MjcxLCAweDFjOWVmOTQ5LCAweGJjOTNkNjg5LCAweDQzM2E5ZWFjLCAweDdhZDEzMWNlLAorCTB4MjlkNjhmYWEsIDB4ODQ5N2JhOWUsIDB4ZGViNGNjNzIsIDB4YTdiNTgyYmQsIDB4YzdjNjQwM2YsIDB4Y2NiYTdhZDEsCisJMHg3ODU3MzNkYSwgMHgzZDY4NWJjNiwgMHhmN2I1OWFiMywgMHhjN2M3OTFhZiwgMHgwMGZmN2FkMywgMHg3ZDc0YmY2YiwKKwkweGQ2OTViYzY4LCAweGVkNjNhZDJmLCAweGQ3MjQ4MjQzLCAweDQyNDNlYjQ2LCAweDlmNmMzZWFjLCAweGViNGVkNzI3LAorCTB4M2Q1ODlhYzMsIDB4ZDczOTIzZWIsIDB4Y2Q1OWViNDEsIDB4MmRiMWZkZWMsIDB4NWEwNGRjYTEsIDB4ZWQ2NjFiMWYsCisJMHgxNjZmOWQ1NywgMHg2N2Y4MzE1ZCwgMHg0NTliZTRiMywgMHhmMjAzMmQyOCwgMHgxYmIxOGYxNCwgMHg3NzdjOWJhZCwKKwkweDk3YzUzNzEzLCAweDFjNjNkNTNjLCAweGM5MjNmMTQzLCAweGJlNGJiZWQ4LCAweDRjMWJkYjFkLCAweDI3YmZiNjMyLAorCTB4NTZmYjYyMTcsIDB4MjdlZDgwMjksIDB4ZGY2YzcyZTUsIDB4ZmI2MDBhNmEsIDB4YWM0MmYyYjcsIDB4YjYxMGE1MDcsCisJMHhiMTJiMmFkYiwgMHhjMjE0ZDA3ZiwgMHg4N2NhZjRmNiwgMHhkNDg3N2RiMCwgMHhjYWVlZWQ4YywgMHg4NzdkYjFjNywKKwkweDFmZGIxOWE5LCAweDk5ZTM1MjViLCAweDBiMGZlYjQwLCAweDJmODFhN2JlLCAweDIyYmUwYjE3LCAweGFkZjgwN2QyLAorCTB4Zjk0YmNkMmUsIDB4ZDMyMDRhYWQsIDB4MDExN2JmODEsIDB4YWFmNmQyNTMsIDB4NDdkNDI2NmUsIDB4N2FjZTNmOWIsCisJMHg2ZjM4MTQ1ZSwgMHhlMTdhODE3NiwgMHgyMDY1MGYwYiwgMHg4ZTExZTc5YywgMHgxNzg4ZTE0NCwgMHhjOWY1OTM4NywKKwkweGFjOWMwZDY4LCAweDM4MTQ4YTRmLCAweGE1OGUxMWViLCAweDdmMzY3MDczLCAweDlmM2I1NjMyLCAweDM4MTU4YTRmLAorCTB4MTQ5MTkyYWYsIDB4ZWI3M2JkOGUsIDB4YjY1YmZhY2EsIDB4MmI3ZjNlNzYsIDB4YzBlY2UwNTEsIDB4NmU3NjI0ZjksCisJMHhiNGM3MGQzZSwgMHgxNjM4NjlmOCwgMHgzODliY2ZjMSwgMHhjZGNlOTQ5ZiwgMHgyZDcxZjQ2NywgMHg4ZjFmNDY3ZSwKKwkweGUxMDlhN2UwLCAweDljMWNlYjc0LCAweGZjNWFlMzg2LCAweGUwOGYxYzM0LCAweGQzODQwM2U3LCAweDFhZWI3M2FiLAorCTB4OWY4YjQyN2QsIDB4ZjgyMjI3ZDEsIDB4YzlmODhjMzksIDB4YWQ5YzFjZTgsIDB4ZDlmOGI1YTcsIDB4OWY4MjNhN2EsCisJMHhiZjRlMTBjZiwgMHg2YzZiYWRjZSwgMHg2MzNmMTZhYiwgMHhmOWY4MjM1YiwgMHg0OTc1ZDcwMiwgMHg2ZDZjZTBlNywKKwkweDZiNjdlMmQ1LCAweGRmM2YwNDZiLCAweDlkYzE5YzIxLCAweDM2ZDhkNzViLCAweGI2YzY3ZTJkLCAweDEyNjNmMDQ1LAorCTB4Y2VkMGNlMDAsIDB4YTVmODI3Y2QsIDB4MmZjMTNmMTYsIDB4NDA0OWY4MjMsIDB4MzczYjIzMzgsIDB4NWE3M2VjOWYsCisJMHg4YjlmNjRmYywgMHhlMTBkMjdlMCwgMHg5YzFjZTk4YywgMHg3ZTJkMzllMCwgMHhmODIyZTc4MiwgMHg1NzM4NDBjOSwKKwkweGQ5NWQ2ZTc2LCAweDkzZjE2OTVmLCAweDNmMDQ1NWZkLCAweGY3NDAwYTk3LCAweDQyMWYzZTFjLCAweDg2M2JkOGUxLAorCTB4MmQzYmUzYjMsIDB4MTc3Yzc2N2UsIDB4OWM3MGNmYzEsIDB4Y2Y5ZjFlNGYsIDB4ZjU1Y2UwNDUsIDB4YWU3ZTJkMGYsCisJMHgzZjA0NDdmYSwgMHg3MjY3MDhkOSwgMHhmOGVjZTBlNywgMHgzYjNmMTY4NywgMHg0ZmMxMTFmZSwgMHg5YWViYWUxZSwKKwkweGFhZWJhZGNlLCAweDVjZmM1YTBiLCAweDY3ZTE4MTc1LCAweGRjYmFkMWQ0LCAweDZkNGVkYTA0LCAweGFmYTQ1YmEzLAorCTB4ZjFlZjNiOGMsIDB4M2EyZWI0MDgsIDB4YmE3NDVkNTksIDB4YTIyZGY4MDksIDB4MjY5MDhmZTIsIDB4YjdkZjQ4OGYsCisJMHhmNjFjNGZhZCwgMHgyNWZiNTExMCwgMHg3NTgyNmZlMywgMHhhNjk3YTlkOSwgMHg0NjEyNGJmNiwgMHhhMGZjNmJjNywKKwkweGE2OTI0ZjQ0LCAweGJiYTkzYzllLCAweDM3OGE3ZmE2LCAweDc1ZGVkMzUzLCAweGY2OWFhNWZhLCAweDlhNjFiZTZlLAorCTB4YjFhMjhmN2EsIDB4MmFiZGZlOWEsIDB4YmRlYTZiYzYsIDB4ZTlhZDVlMTcsIDB4YTBkZjIxOWYsIDB4NzY1OWY3YTksCisJMHhiZjdmYTZhYiwgMHhlZDM1M2JlYSwgMHg2YjE2NTYwMywgMHgyYzA5MmZkYSwgMHhhYjJmZDRkMCwgMHhmZmE2YTVmZCwKKwkweDlhNDViYWUwLCAweDFlMWJjYmY2LCAweDBkMGZiNGQyLCAweDBmYTlhNjNkLCAweGE2YjRmYmRmLCAweGQ1YTZjOGZmLAorCTB4MDc1MWY2OWEsIDB4YzdkYTY5ZDcsIDB4ZDRkNDZmMzQsIDB4NTViOTM4YWYsIDB4ZjBjYWZmZDMsIDB4YjhmYTlhMWIsCisJMHhmNGQyZGZhZiwgMHgxZTczOTRhNywgMHg0NWQ3OGNiZiwgMHhmYjgyMGI5MCwgMHgwOTliYjkwMiwgMHhkZDkwYzVmZCwKKwkweDc3NTM3NTg0LCAweGQ4MjdkYjFiLCAweDI5NDc1ZDBiLCAweDlmMDY0ZGRkLCAweDgxMmQwYmFiLCAweGZkZGE4NGU2LAorCTB4MDM0NWVlOWMsIDB4ZGM1ZjI5OWEsIDB4YzAzN2Q2M2IsIDB4NmJkZjlmNDksIDB4OGNlZTVkZjIsIDB4N2U1MDlmZTEsCisJMHg5NDFhNDgxMSwgMHhmYTk0MDMyZSwgMHhjNjI1MDdmNiwgMHg5YzdiZTNhZiwgMHhiZTg4N2ZlZiwgMHhmNzA4NmU1ZiwKKwkweGJmZjVhNDRmLCAweGMwMDI3MjFiLCAweGQ0MDgyZmRmLCAweDE1N2NhN2ViLCAweGU4MGE5MjJmLCAweDFlMjY2ZjE3LAorCTB4MzMwN2RmZTAsIDB4NTU5NzllYjIsIDB4MTdhY2JjZmMsIDB4MGEyMTUzOTUsIDB4NGJlNDk5NzcsIDB4NWQ2NDNmMDMsCisJMHhmODMyYmJlNSwgMHhlOGJkNTUyOSwgMHhmMjEzYmFiYSwgMHg0ODZlZjBhMiwgMHhlZmRmNGJlZSwgMHhhM2U2OTg1NSwKKwkweGVhMjZjY2YwLCAweDM3YzdhYmU3LCAweGUxMDdmMWQxLCAweGNmYzA3NWY4LCAweDk0ZmM2MTliLCAweDMzOWJlM2Y2LAorCTB4OGZjNjZiNDcsIDB4OGNkMjJmNGIsIDB4ZTNhMjY3MWYsIDB4YWZiZWE5M2IsIDB4NGY4Zjk4ZmMsIDB4OTA5NjMyODksCisJMHgzOGM3YzI2ZCwgMHgwOGJkMzliZSwgMHg0NGQwN2ZjNywgMHhmMWVhM2RmNywgMHg4N2UzMjNlMywgMHgzYTdiZmQ2MCwKKwkweDU4ZTY3ZjVhLCAweDhiZDNmYWVkLCAweGIxMzdlYmI1LCAweDc5NTViZmY1LCAweDhmMWY4ZjhjLCAweDM4NWI3ZmViLAorCTB4NWU5ZmQ2YzYsIDB4NjY2ZmQ2Y2MsIDB4M2JlMzIzNzAsIDB4ODI2ZmY4MjIsIDB4ZDFkN2JmZjUsIDB4NmI2NGZiZmEsCisJMHg0NGJiZGZkNywgMHgxYjMzN2ViYiwgMHhhNzk1YWZmZiwgMHgxYzM2ZjhmOSwgMHgzNGUxNDNmZiwgMHgxMmVmN2Y1YiwKKwkweGY2NjRkZjFjLCAweDRjN2Y4MWI5LCAweDAyMmJlMjNkLCAweDkzZDI3Yzc0LCAweGMwYWVhZTJhLCAweDI4MWM3NDJlLAorCTB4YTY1MTI2MDcsIDB4MjE0OWU0MjcsIDB4NmY3MWU3MTMsIDB4NzNiN2UzM2MsIDB4NTBkZjk0ZjEsIDB4OWNmOGM5MWYsCisJMHhhM2U2YTgwNCwgMHhjZTMyOWNmYiwgMHhlN2Q3ZjNmYiwgMHg2MTZmNDA5OCwgMHhjY2VmZGQzYiwgMHhkZDlkNTNlMSwKKwkweDkzN2YyMjIwLCAweDdlODFjYzI3LCAweDBkYWRiZTc0LCAweGQ5ZjUwY2EyLCAweDAwMTk1YzRmLCAweDI2NmU1OGZkLAorCTB4M2RlMTc4NzcsIDB4ZjNjMTA5MjMsIDB4NWUwZTRmNjMsIDB4YmU5NzVlYWQsIDB4MWQyZDUzOWMsIDB4MTdjOGQ2NmYsCisJMHg5ZTNjOGY5YiwgMHhmM2EwYWMwYywgMHgxODI2MDNjYiwgMHhhNzFmYWQxOSwgMHg5OGQ4MjlmYiwgMHgxMmZiYTYxZSwKKwkweDc0NDg0ZjI4LCAweDI4ZmNmYTNjLCAweDAxOTE2ZmRkLCAweGM0YTliOTZhLCAweDc5ZWM4OGY3LCAweGZmOWQyZmI3LAorCTB4M2NmY2EyMzQsIDB4NTFkYmNlYjgsIDB4MjMzYzI4YTQsIDB4MWFmMWZmYzMsIDB4OThmNDAwMjEsIDB4ZjlmNzRkNTMsCisJMHgzNzJmZjkyYSwgMHgxNzBlZjkzMywgMHgwMmQ1ODEwOCwgMHhmZjdkMmJjNywgMHg4MTNlZmU2NiwgMHgzM2Y4NTFmOSwKKwkweDhmOWRlYzlkLCAweDQ3YjM1Yzc3LCAweGVkZmRkMDcwLCAweDljMGQ2NGNhLCAweDY5NjA0ODViLCAweGI2ZmY3ZDFhLAorCTB4NjIyNTNiMTUsIDB4ZTgyOGJlMDAsIDB4ZTVmODAwYjUsIDB4NzA4NDg5N2UsIDB4NDI5Y2RhOWYsIDB4YTA2NjcxMDYsCisJMHgwNjRlN2RmMCwgMHhkMmU5ZTZmZiwgMHg5YzE1NjZkMSwgMHhjNzljNTI5OSwgMHhmMzMzZTc0YiwgMHg3YmU3MTEzZSwKKwkweGRlZGI0ZjhiLCAweDMxZWFjM2JjLCAweGNhZTVhMTBjLCAweDQ5NDIyNWNmLCAweGI2OTE1YjdlLCAweDZkMGFmNmZkLAorCTB4ZGE4NThlZmQsIDB4ZWUwZjVkM2EsIDB4ZmQ2NDBiZjMsIDB4YmExY2JhNzMsIDB4ZWIyMzNiY2UsIDB4ZjVhNzBiYTYsCisJMHhkNjZkYmM1OSwgMHhkMGQ2NDkzMiwgMHg0ZDczNmU5MSwgMHgxMzNkYmM1OSwgMHg0ZjEwNGVkMCwgMHhmNjlmN2VmOCwKKwkweDY4MWYyOWZkLCAweGVhNTc3M2VhLCAweGY4YmU3MWUwLCAweGRmZmZmNGZmLCAweDg2ZjJmZjRkLCAweDU1NDdjNTljLAorCTB4OWJhZDJhZjMsIDB4YWFhOGY4YmMsIDB4ZWJkYWZjZGYsIDB4ODE3OWY1MzUsIDB4ZTdmZDM0NWIsIDB4YjRkMDJjYWUsCisJMHhhNzllYTljZiwgMHhlY2I1OWY2OSwgMHg0MGJkNGQyZSwgMHhmZmQzNGZiZSwgMHg5YTk1ODU4ZSwgMHg5NjJiZGJmNiwKKwkweDJiNmZkYTZiLCAweGJmNTM1NDdhLCAweDRkNWJmN2M1LCAweGFmYTc5YmZmLCAweDNiMGJiNGQyLCAweDQ2NmVmNWU2LAorCTB4ZGRlYmU5YmIsIDB4ZjRmZTkyOGQsIDB4N2MwMjY2MDcsIDB4YzJiM2YwYTYsIDB4NjlmZDI3ZWYsIDB4NzdlYTdlNTgsCisJMHg3YTA5NTk2MSwgMHhjMzc3ZWE5OCwgMHhhZjk2NTYxNiwgMHhmYTBkZTgyZSwgMHgxM2ZmZTE1YywgMHhlODNhNDU1MiwKKwkweGViM2YzZDRiLCAweDRmOWVhZmY1LCAweDJjNDdhZmU5LCAweDRiMjk0MzNmLCAweDNiMDVlMjA0LCAweDY0ZmRjNmQ2LAorCTB4ZGMzN2Y5ZTUsIDB4MGNlNzgyY2UsIDB4Yzk4OTg5NjUsIDB4NmVjNmM5NjUsIDB4ZWEwMzg5ZTMsIDB4YjYxNWZlYTEsCisJMHgzYTkyZTE4ZSwgMHgyMDQxZDcwMSwgMHg3NDAyOWE0YSwgMHg5NzZkNDFlYiwgMHgzNDdkYWU5YSwgMHgyOWQ5NmNmMywKKwkweDIwNjVmOGUyLCAweGRjYzA2MzkzLCAweDYwMTg3Nzc4LCAweGZhNjM1MGZjLCAweDNlNjE4MzhkLCAweGRlYjFkNzllLAorCTB4NTZmZTgyOTAsIDB4ZTJkMjdmOGIsIDB4N2YwMGZkYTMsIDB4ZmE0ZjJjNWUsIDB4ZGM3OTYzYTcsIDB4YThmMmMzZWYsCisJMHhjM2NiMDhiZiwgMHg5YjJjMGFmZSwgMHhmY2IxMGJmZCwgMHhmOTYzMmZjNCwgMHg5NjE5N2Y5MSwgMHg2MzU3ZjU3ZiwKKwkweDEyYmZkMDc5LCAweDAxZmNmN2NiLCAweDFlZmQ1YjJjLCAweGZkM2UxNTJjLCAweDE4ZWJhMTRmLCAweGFlOWNiZmMzLAorCTB4M2FlOWE4ZGYsIDB4ZjM2NGUwYzYsIDB4MTg3ZDc0ZTEsIDB4NmZjMzFiZTYsIDB4YzhjZTBmZWUsIDB4ZTIzZjk1NDgsCisJMHhkYjcxOGM5OSwgMHg0ZWNlM2MwNSwgMHhjNzE2MjRjOCwgMHhhNjJmNjNlNSwgMHg2ZmQwOWFlMCwgMHgzZDA0MGMwOSwKKwkweGI3ZTA3NjdjLCAweDdkNGUyMWZkLCAweDRhMjUyMGY2LCAweGQzZWJjNzQ2LCAweDNjNDNhZmQzLCAweGVmZmEwZjEwLAorCTB4OTc0YTAxODUsIDB4OTZlZGY2ZTQsIDB4OGI1Nzg2NzgsIDB4YzMyMjRjODEsIDB4ZWZkZTU5MDgsIDB4ODM5ZGY3MDUsCisJMHg0OTI0NmViMCwgMHg3ZGMwN2VmMCwgMHg1YzA2M2RiZCwgMHg3ZTAyMGJlYSwgMHhjNWQ3ODYyZiwgMHgwMDQzNzNmNiwKKwkweGZmYTdmMWRlLCAweDE4ZTUwNTllLCAweGUzMDdmMzAzLCAweDRiZjQ0NTFiLCAweDM3NzllODQ5LCAweDY3YTIzN2UwLAorCTB4ODgzNGVlY2QsIDB4OTlmYjg2ZjcsIDB4OWFmNzY4OWMsIDB4NGZlMmQ2YWUsIDB4YmY4MzVhYmUsIDB4NTVmYzExZTUsCisJMHhmYWZlMjFhNywgMHhjMjhmZmI5ZSwgMHg4Nzg0ZjExZiwgMHg4YTM4MzBkYywgMHhlZjg0NmZiZiwgMHgxZTcyOWZjNywKKwkweDM2ZWYxZmEzLCAweGY4ODNmOGQxLCAweGMxNTUyZGIyLCAweGExM2E1MzZiLCAweGY4MTFmY2UzLCAweDViM2ZjMjlmLAorCTB4ZjAwMTIwM2YsIDB4MTE3MzgxMWMsIDB4N2ZhZjA4ZmEsIDB4ZThmYTBlOWMsIDB4MTZjOWQwMzQsIDB4MGU5Zjc3ODUsCisJMHhjZmJkZDlkZSwgMHg1ZmVmYzAzYiwgMHg0N2NhMjY5MCwgMHgyOTU5ZTA2MywgMHg2NDMyZWI0YiwgMHg2YTRmZGE5YiwKKwkweDU2Y2ZkNmQwLCAweGQwZWE5MzBiLCAweDRjMjU3MTlmLCAweGQ3ZmEwYzFkLCAweDQwOTUxZjI5LCAweGE5NjFhNjRmLAorCTB4NjY5MDU5YzAsIDB4N2QyODcxYzIsIDB4NGZhZjVjOTgsIDB4ZDRmZmI5NDQsIDB4N2VmZDg3MWYsIDB4MDQ3NDc5ZWEsCisJMHg3YThmM2EyNywgMHgwZmJlODQ3MiwgMHg0ZmExN2YyYywgMHhlNDNiZmRjNywgMHgyNjE3ZTM1MywgMHhhMDkxYjM4OCwKKwkweDk3ZmMwZTc0LCAweDA1ZmZmYTM4LCAweDQ2MjM3ODM4LCAweGNiNzAyYmFjLCAweDdjZDk0NGViLCAweGFmNWYzYzM5LAorCTB4ZTdiZThmMTksIDB4MmYwNmNlNTIsIDB4M2M5ZjdlNjQsIDB4ODU3MWM5MTgsIDB4YThhOWE5NWYsIDB4NDhkNjE4ODEsCisJMHhhYzhiNWJlMCwgMHgzNTEyOGZmNSwgMHg2ZTg2ZjJmNSwgMHg4MjVmYzZiMiwgMHg0YTNkNTA3ZiwgMHhmMDIzMDQ4YSwKKwkweDlmNjcwOTRiLCAweDk5NmRhMzM2LCAweDBiZjdlNzQwLCAweDNlODE2MjA4LCAweGQyYmY1ODEwLCAweGNmOTM2NmI4LAorCTB4NzhiMmZjMDUsIDB4ZTgyZTE1ZGEsIDB4ZDVlYjhkNTksIDB4MmZkMjhmY2YsIDB4M2M3NTI4YzMsIDB4ZDllMmY5ZmYsCisJMHhlNDMxYmQ3YiwgMHhkYmQ3Mjc2MywgMHg1NzE2MDYyNSwgMHgwM2IyNzEyMCwgMHg5YTQ4ZDdjZSwgMHg4ZWMxYjhlYywKKwkweGYwNDViMzUzLCAweDNhM2I3MTgzLCAweDBhMGYwYThlLCAweDI5MDE3OTljLCAweDk5NWZmNWFjLCAweDU4MThiNjVjLAorCTB4ZWUzZjQwYmMsIDB4OTRkYzYxOWYsIDB4NmNhZmUzOGIsIDB4YjA4OWZlZmQsIDB4Y2IxZTNkNmUsIDB4N2M5OGNlMWEsCisJMHhiZmY0NTcyOCwgMHgxNTFlMjhhYywgMHhmNDQyZmVmYywgMHhlYmE0NTlmZSwgMHg4NDNkYWUyYSwgMHg5MjkzZWFmYiwKKwkweGVmZmVmZmRjLCAweGU3ZWQ4YmQxLCAweDZlM2I0YjZmLCAweDI2NWJhZDU1LCAweDlkY2UzMDRkLCAweGM0NDBmOWEzLAorCTB4NTQ4N2YzNzUsIDB4NWI3YTlmNWYsIDB4NWQwMTBmMjIsIDB4YWE1ZWQzY2UsIDB4ODI4ZjUwNzksIDB4ZmVhMmIyMTgsCisJMHhmM2Y1OWRmYSwgMHg5ZjdlYzFmMywgMHhmNzA1M2NkYSwgMHhkNzg5YjMyYiwgMHgyMmNhNDEwMSwgMHhmZTA1OWQ1MiwKKwkweDk4NjI2OWY5LCAweDRkM2E3ODA0LCAweGFlMThlY2ZlLCAweGQxMzlkM2EyLCAweGZlYTFmNDg0LCAweGZjZjU2MWZiLAorCTB4YTlhZWZmYTgsIDB4NTM1ZGZmNTMsIDB4YTQzNzI0MmYsIDB4ZTE3OGY5YzIsIDB4MDgwOTEyMTMsIDB4ZmI0ZDNlYjgsCisJMHg3MDg5ZDE3MSwgMHgyYThhOTJlNywgMHg0YjE2NzdmMCwgMHhlOWRmYWVjYywgMHg1NDFlYzYyNCwgMHhmNmJlOTc5ZiwKKwkweGFkMDE1NjRjLCAweDdmMzIyNzdmLCAweDlkZWYzOTQ0LCAweDM3N2I3NTQ3LCAweGI3NWM1ZWRhLCAweGVkYTFlNGNhLAorCTB4NGY4N2VhNDcsIDB4ZmJjMDgyYmIsIDB4M2ZiMDJhODEsIDB4N2I4MmFiZjIsIDB4N2UzZGFiYWQsIDB4ZjVmY2U4N2YsCisJMHhhMWZjNTVmMywgMHg3Y2NlZTc3NiwgMHg4MmI1YTUxZSwgMHhjZjgzMTAyNywgMHg2N2M2NDZhYywgMHgzMGY2M2YwYSwKKwkweDhkZjEzNTNhLCAweDcwZmFiYTAxLCAweGFlOWM3ZDVkLCAweGJkZTVhM2ZlLCAweGZiYzhkMTBiLCAweDAwZGY0NDJmLAorCTB4NmY5MzBhNjMsIDB4YzYwOWRmZDgsIDB4OGZmM2YyMzAsIDB4MGVkNjlmODYsIDB4MTQ5ZmYwZmUsIDB4OWNhZDRmN2UsCisJMHg3ZWUzZjg1MSwgMHhkYjdkZjg1MiwgMHgyYzRhN2ZjZCwgMHhiZGFmYTVmOCwgMHhmYWE2NTliNCwgMHgyNzk1ZjhhOSwKKwkweGE3ZWE4NDFkLCAweDU0ZWFjNjUzLCAweGM5N2ZhNTM3LCAweGUwMGVhNWRhLCAweGQ5NDY5MzgzLCAweDJhN2NmYzAxLAorCTB4YzQwYTRlMjAsIDB4OGM4Yjc3ZDAsIDB4M2RhZmY3MDIsIDB4NmZlMjAxMzYsIDB4ZmYwYTRmZjAsIDB4NWYwZjc1ZDMsCisJMHg3Mzg3NzEwYiwgMHhjNjI3MjU2YiwgMHgyMWNkNmFkNSwgMHhiMmQzOTUzMywgMHg2NGY5NzlmYSwgMHhiMTBmZDYwOCwKKwkweDQ0Njc4M2ZhLCAweGY5NjgzN2E4LCAweDRmNzdmOGIzLCAweDVmNTBiYWE2LCAweDE4MGMzZGNhLCAweGZmYTEwZTNmLAorCTB4ZDhlNmI2NWYsIDB4ZTVmYmIwNDQsIDB4YTY3MjhjMjQsIDB4ZmZjNjBmN2YsIDB4NTNlZDA5M2EsIDB4N2RhMTI5ODEsCisJMHg1M2U0NmUzYiwgMHgyYmY2N2RlMSwgMHg4Y2Y4N2ZhZiwgMHhmMjcyODBlOCwgMHg3NDI3ZDAwOSwgMHgwM2YxODRlNywKKwkweGRjNDU3YmZkLCAweDY4ZGJiZjlmLCAweGYzZjE4MmVmLCAweGU4MTQ2NDUxLCAweDI0MmYwNTMxLCAweGYxNzlmY2MwLAorCTB4NDA4NjY3YjUsIDB4Y2Q2NWI1MWMsIDB4ODU0MTBlZGIsIDB4Y2VkZTQ1MmYsIDB4NmU3YWNkZDYsIDB4YmQ2M2FiYWIsCisJMHg1MWU1NGFkOSwgMHg3ZTJhNDdlZCwgMHhlZjgxYWI4NSwgMHgyY2FjODI0MywgMHhjODBlNDI5MSwgMHgyNTU5MjlhYiwKKwkweGI4ZmE2NWI5LCAweDVmZTdhNWU0LCAweDlhZTIxYTc4LCAweGZkZGQ5ODFmLCAweDJmZjlmYzI4LCAweDJjNmY3ZWVkLAorCTB4MjBkZmNmYWQsIDB4Y2I2N2M5NzUsIDB4NTFhOTA5YjAsIDB4ZmZkMzk0ZmEsIDB4ZDI4YjBlMTcsIDB4NmVkMzc4YTMsCisJMHg3YjMwNmI5MywgMHg5NDUyNDBmZSwgMHhlYzM3ZjMyZSwgMHhlZGMxOTEzNCwgMHhiNzViOTFmMSwgMHg4YjZjZDRkMywKKwkweDQzYmE5ZjQxLCAweDEzMGZjMTEzLCAweDA0Y2VmYjVmLCAweDQzYjUzZmY0LCAweDYyMzM1ZDIwLCAweDZlZDU3M2UwLAorCTB4NGYwMGQzZjQsIDB4YWY0ZTRmNDgsIDB4ZmQ3NGZkMDgsIDB4NDA1ZDI5Y2IsIDB4YTVlOWViYWYsIDB4ZjQxNTM3ZWYsCisJMHgwYjgzMGE0YiwgMHhiZjk0MTJmOSwgMHhmOTBhZGU1ZiwgMHhiYjM1N2Y0OCwgMHgyZjQ1MGYwMSwgMHhmNTgwZWRkZiwKKwkweDMwNTYzMDljLCAweDY5NjY3ZjNlLCAweDVmOGU4N2FhLCAweDRlYTljOTI0LCAweGEyZjNkOTJjLCAweGZjOGU3ZjY3LAorCTB4Y2ZmZjc3MzcsIDB4Y2I1YzU5NTMsIDB4YjY4MGNkZDMsIDB4ZWIwNmVlNGEsIDB4MTM3MzUzOWMsIDB4Zjg5MGIzYWUsCisJMHg5ZThiMGY5MCwgMHgyZmEwYmQxMSwgMHg0OTkyMzRiZiwgMHhjOWM4NjIxYiwgMHg0ZTRlNWNiNywgMHhhNWM0YTZhYywKKwkweGNkNDEzY2ViLCAweGZjZTllNjEwLCAweGM1YWMwYzU5LCAweDE4NWRmYTM4LCAweDVmMzlmYjM3LCAweGIwZThmNTBiLAorCTB4YTMxYzY1ZmUsIDB4YzBkMTkzNTcsIDB4ZWFmNTJlZjUsIDB4ZTZiYmZjZDUsIDB4ZDNhMDI2YzEsIDB4NWQzY2JkYTcsCisJMHg5Y2E1ZmNlMSwgMHgwZjhlNjUxOCwgMHgyYjg1MDJlMSwgMHhjYWViY2ZlZSwgMHhjNjVjNDRlOCwgMHhmNTFlZmUyYywKKwkweDM5ZTE3MmNiLCAweDNjOTI2ZmY0LCAweGY3OWEyMTk2LCAweGU4OGM4NWM4LCAweGYxZjBmN2Y4LCAweGMxZTNiY2U5LAorCTB4MWE5MTNhOWYsIDB4NDAzMDVmN2IsIDB4YjUwMmVjNTIsIDB4NTMzZTJhZWIsIDB4ZmY5MzNiYzksIDB4YmM5OWNiMzUsCisJMHhiODFmZjIyYiwgMHg3ZmI0MTI3ZSwgMHgxMWM5ODA3MSwgMHg5MmY2MDdiYywgMHgxNWQ0MmJjZSwgMHgxNTRlNzdkYiwKKwkweDQ5OTgzZjUwLCAweGFmOWM5NjI4LCAweDZiOWNiODkxLCAweDQyZmNmNWRiLCAweDEyMTQ2ZmU3LCAweGUzMDM3YzU0LAorCTB4ZDAxZDIxMjQsIDB4ODI3YzJhOWYsIDB4YTNkMmFmYmUsIDB4YTNhZTMwZTUsIDB4OGU0NTVjM2QsIDB4ZjA3ZDcyZTcsCisJMHg2YjAzZTgyNSwgMHgxYTkwMWY1NCwgMHhmNjNhMDdhNiwgMHg1M2M0NjU3YiwgMHhlMTc4MTQ4OSwgMHgyYTVmOTA2OSwKKwkweGU0MGJiMmFmLCAweGZhYzJmMjU3LCAweGY4ZGY1YjNmLCAweDZlNTRhZGRlLCAweGU0NTNhYjNlLCAweGY1NTdhYjU2LAorCTB4ZjFiNDViNzIsIDB4NTRmODA0ZTcsIDB4ZjU5ZmI3MmYsIDB4ZTUzMTIwYWMsIDB4Mjk4ZjNlOTYsIDB4ZmY5YjNkYjcsCisJMHhjMTU1N2EyNSwgMHhkNWE0YmE2MywgMHhlYzllOGFhYiwgMHgzZDdhOWYwOCwgMHg0MmU4YzViOSwgMHgyNGY1ZWFiYywKKwkweDU5MjAxZGZkLCAweGUxNTFmOWVkLCAweDhhZmY4NTQzLCAweDBkZWQyYzVmLCAweGE3YzIyOGZhLCAweGY4NDYxZjBhLAorCTB4ZmQ0M2UxNTQsIDB4ZDQ3OGI1YmEsIDB4OWU3YzYzYjcsIDB4Y2I3NzhiZjIsIDB4NTA3YjEzYmIsIDB4MDUwNDk2YmEsCisJMHhlZjg1ZDliNywgMHhjNTNhODFlZCwgMHgwYjZkODc5NywgMHhlOGY0ZjdhYSwgMHg3NDA3YWVhMiwgMHg3ZjVkM2FmNSwKKwkweGQ1ZWVhZThmLCAweGVhZTlmN2Y1LCAweDAxZmViYTE1LCAweDY4Njk0ZmI2LCAweDg3ZTQxMTM0LCAweGI0YmZhNjkwLAorCTB4OWY5MGM4ODgsIDB4ZTIyZWRlMTYsIDB4OWQxYjQxYjksIDB4YmY3ZDE1NzMsIDB4NDA0NjdkNmQsIDB4YTk2MWZhYTYsCisJMHhjM2RiZWQ4NSwgMHhkMDJhYTYyOSwgMHhiMGNlNmQ2NywgMHgxNmVhMDkyMywgMHhmMzZiN2YxNiwgMHgyYTg5MWQ4NiwKKwkweDUwNTBmMWZmLCAweDFjZGM3ZDQ0LCAweGVkNjI5MzIwLCAweDhiYzdhODVmLCAweDFkMjY2YmY0LCAweDkwZjNiM2I1LAorCTB4MTBjNzc4YjYsIDB4YjQ0ZjJmMTgsIDB4Zjg4NDJmYTUsIDB4ODZlOGI1NGMsIDB4OTVkOThlMjMsIDB4NWNlMDNiMzcsCisJMHhlN2Q4MmRhMiwgMHhmOWY0ZTliYSwgMHgyYzg4M2Y5YywgMHgxOGY2NDIyZCwgMHgwZGY2YTliYiwgMHg1NGZjODkyNywKKwkweDk1ZjkwMGI2LCAweGIzZmU5MDJiLCAweDMxMWY2YzgyLCAweDdlNmM0NTdiLCAweDE1ZWZlNjJlLCAweDgxMzFlZWRhLAorCTB4ZmZmZWE0ZGUsIDB4NWY1Yzc1NjEsIDB4YTM1NDUzODEsIDB4YzI5YzFlN2IsIDB4MmZlZDllZjksIDB4ZGI2OGQ3OGIsCisJMHhmYTNmN2M3ZCwgMHgwZmRmMGE1ZiwgMHg3ZWQ5NDMyNSwgMHgwODM4YjA5MCwgMHhlMjc5YmJkNywgMHg1M2E2ZWJhMCwKKwkweDE1ZWRiNDNhLCAweGQ5Y2RmMDA5LCAweDM4NzQ4OGEwLCAweDQwMDg1ZWJiLCAweDI5Yzg4YTVjLCAweDI0NjUzZjI4LAorCTB4YzE0ZWZhOGMsIDB4YzdjODBiNTcsIDB4NTBmNThlODAsIDB4NjcxZmFiY2IsIDB4OTRiYjRmZGQsIDB4Yzg3MGZlNmMsCisJMHhjYjY1YTVmZiwgMHg2ZmZhMGZlNiwgMHhlZjZiZmE4MywgMHhkYTQ4N2ZhNywgMHg2MWRkY2ZmNywgMHhiNmRmNzNjMSwKKwkweDI3Y2M3NjFkLCAweDRlZmVkYjZlLCAweGRmNTBmZGZhLCAweDNjYzM3NjYyLCAweDM1N2M3NmRiLCAweDZkYThmODA0LAorCTB4ZjQwOGI5OTEsIDB4YjYyZjViNTgsIDB4ZmRiYzU5ZmYsIDB4NjhjZDIxYWIsIDB4ZmQyMDk3M2YsIDB4OGIxMzI1NmEsCisJMHhmZWZmMDRkNywgMHg0YTA1ZDA4OSwgMHgwZmYwMmFiYSwgMHhmOTcyN2U3OCwgMHgyMDgwNGI1NiwgMHg3Y2IyYWZmYywKKwkweDNkNmU5ZmI2LCAweGJmOWNmYzY1LCAweDZmYTY0ZWNkLCAweGIyMjVmOTg0LCAweDZkZjJlYzczLCAweGE0YWY5ZTYzLAorCTB4ZWZkNjk3ZTMsIDB4ZWRhMmNkMzQsIDB4Mzc3ZmFmYjksIDB4Mzc5MWYzMDQsIDB4NTVhN2JmMzIsIDB4Y2UxNjdlNmEsCisJMHg2ZjQ5MzdiMSwgMHg5ZTI4OTIyZSwgMHhiYTM4NDE1YiwgMHgyOTlkNzIxMywgMHhjNWI2NTcyZSwgMHgxODc3Y2JjMiwKKwkweDNlMmNlYTk3LCAweDdlZDg5MmRlLCAweDFmMWZkZmY0LCAweDk1MTFlNjAyLCAweDM4ODFlZDA0LCAweGNkZmRkNjAxLAorCTB4M2U4MjFmMjcsIDB4YmU0NjYxZDgsIDB4NTlmYmQ2NTQsIDB4MjNmYTI1NWQsIDB4YTlmNzViMTcsIDB4ZDA3YzMxZmYsCisJMHhhMTBiNzVkOSwgMHhjZTNiYWNjZSwgMHhlZWJkZWZmNCwgMHhjZTE3MjQ0NywgMHhlZDA3MmY0ZiwgMHhiZGZiN2NmOSwKKwkweGVlYzk3ZjU4LCAweDkyNzZmOWM2LCAweGZlOWEwN2RmLCAweDIzN2RmOGMzLCAweGUyZTNiYmE1LCAweGJmZDlmZWViLAorCTB4YTYzYmJhZjksIDB4NzI2NjFmZmIsIDB4MWYyMTNiYmEsIDB4ZWZmNWZjYWMsIDB4NTQzZjdlNzAsIDB4MWZmZGNkY2YsCisJMHhiZjhhZjdjYSwgMHg5Yjc4MzY2ZSwgMHhhNmZjZTg3MiwgMHgzODNiNmE5MywgMHg5Y2E0YjcxNiwgMHg3M2E5MDdkZCwKKwkweDc0NWY1ZWU2LCAweGZjNGFmOTgxLCAweGJmM2Y1MWZjLCAweGVmYjYyNjk1LCAweDk5N2NlMDkzLCAweDEyNmU0YjhlLAorCTB4ZWQ4ZjdlZjgsIDB4ZmVlNWFlOTMsIDB4MGIzZGI1YzUsIDB4ZDZiZDJmZDEsIDB4NjI3N2ZjYzMsIDB4NDY3MzdhZjQsCisJMHg2Y2Q4OWU0MCwgMHhjOTQzYzYzNywgMHhhODNlODNiMCwgMHhhZjI1NzRkZiwgMHg3ZjhiZjc2YiwgMHhhMDQ3ODgxNCwKKwkweGU5YjVmOWZlLCAweDlmODJmNjkzLCAweDYzNGY1ZDdhLCAweDQzY2FjY2M4LCAweGUwZWJiZTUwLCAweGY3NmI0N2NmLAorCTB4YjRmOGI3MzMsIDB4NmJhNzliZjUsIDB4Nzg3MTM3ZWIsIDB4YTJiOWMwZDMsIDB4MGFmMzRmZTMsIDB4NGE3Zjg4MDEsCisJMHg4MTQ4OWViZCwgMHg0NzM0YTg3OCwgMHhmOTAwODIyMiwgMHg2MTRiMTUyNCwgMHg1NzkzNzBkZiwgMHhiMDNkZmVmYiwKKwkweGM1MTkxZGNmLCAweDgyYjhiY2UzLCAweDExNGU3MGY5LCAweDdjNDA1MDM3LCAweDQ0NDJiNzVjLCAweDQ4MzcxMjdkLAorCTB4ZDFkZWY4NDAsIDB4MWUxZGU2MTIsIDB4MDBiMzc4MzMsIDB4NDdjM2Y5Y2YsIDB4ODE5MmZkOTUsIDB4ZTc3YWMzNzMsCisJMHg5MjE1N2M3MSwgMHhjODc3ZjQwYSwgMHhiMjE3MGJmOSwgMHg0YmVlMjBiMywgMHhlNzlhNWZkMCwgMHhlYTFhZTQyMSwKKwkweDBiNjYxN2I3LCAweDYzYzg3OGExLCAweDYxMzkxMjMxLCAweDA1NDNjNDE4LCAweDBmMTM1ODcyLCAweDc3ZTFkNmQ1LAorCTB4Y2UxNDZhNTUsIDB4YzQ3N2ZhYzUsIDB4Zjk3NTNmOGYsIDB4ODdmZmNhMzcsIDB4NDMzZmVhMjUsIDB4MmNmM2U3ODksCisJMHhiM2VjYTdhZSwgMHgzYzMyMDhlZSwgMHg4MTA4OTc5NiwgMHg5MGFiZTQ0YywgMHhiMGNmM2VhNCwgMHhmZGZmMTk5OSwKKwkweDI4ZTE4MWVkLCAweDFlYmYzOTU3LCAweDdmZjZjMDljLCAweGEwYmJmMDIzLCAweDllNjdlZTcyLCAweDEwMDk1ZDk1LAorCTB4ZWMxYjM4ZjcsIDB4NzJkMWNmYzMsIDB4ZmMxOGJlMWQsIDB4YmJlZjlmYmMsIDB4MDA3OTAyZmUsIDB4MjA5YjZjYjQsCisJMHhmZmUwOGI1NCwgMHhmYmM2MzA5MywgMHhiMjE2MDllNCwgMHg1Y2JlNDYzNiwgMHg4NzM5NDk4YiwgMHgyMDdkYzBhZiwKKwkweGEwMmNjNGZjLCAweGE1Y2RmYjIzLCAweGE5MjQyNmFmLCAweDlhZTJiNmU4LCAweGVkMjFjNjUzLCAweGMzYmYwMGU5LAorCTB4N2U0YmNlMzEsIDB4M2NmYjA5NmMsIDB4NGI3ZWViYzAsIDB4OGM2ZjQ0ZjMsIDB4Y2I4M2ZlZjUsIDB4ZGYxYmZlNmYsCisJMHgzNzYzNzdlMCwgMHhjMDI0MzMwNCwgMHg0NDEzMGRjYiwgMHgzOWVhZjljZCwgMHg4N2UzZjcxMywgMHhhZjMwZTE5MywKKwkweDNiMjYzN2ZjLCAweGY2NWQwMGM2LCAweDRlZjg2ZThhLCAweGM2NzgzY2FjLCAweGNlNzE4YmU0LCAweGMwMjdjN2E0LAorCTB4YzkwMDczYzcsIDB4M2NmODA4NWQsIDB4ODEwYjJiZjIsIDB4ZmMzYmQ2ZmQsIDB4ZTQxMDY3ZGMsIDB4YWRjMjBmNjEsCisJMHg0Y2UyMDdiZCwgMHgwYjhiMzM2NiwgMHg3MTNiMzBjZCwgMHhlN2U2Mzc5ZSwgMHhkYzc0Mjk0OCwgMHhhMWNlZjU0MSwKKwkweDlkZDVmNDcwLCAweDQ2MDE5ZmY3LCAweDUxMjQyNDZiLCAweDdlOTRmN2IwLCAweGJmNTg0YmRkLCAweDU5NjcyNjQzLAorCTB4MTEzZmY1YWMsIDB4NzMzYWUyYzcsIDB4ZDFkZWZiODksIDB4ZGQxZmJmYzIsIDB4MGY2ZDdlNzIsIDB4MzI3YjA3OGQsCisJMHhkOGU3N2Q4MSwgMHhjYTA5YWY5ZSwgMHg0MjQ5ZDljNywgMHhlYzNkZjQwMCwgMHgyZjllYjA5ZiwgMHhjNzc5YmRhMCwKKwkweDFiZTVkYWMwLCAweGY4NTY1ZTk4LCAweDExZTc4ZjVlLCAweGY4Y2FjZjFjLCAweDBjN2Q3OTUzLCAweGNmMDUyZjk3LAorCTB4ZjNmNTdlMGEsIDB4N2Q1M2ZhNTUsIDB4OGYxZDRlMzUsIDB4ZTg2MWFlYjgsIDB4Y2IwZjYwY2IsIDB4NDBkMzgyODIsCisJMHg5YjE5OTU0MSwgMHhlNTg3MjA0ZCwgMHgxMDRhOGYwZCwgMHhjNWM1YmY4ZiwgMHgzMDdiNTJlMCwgMHgzYmZlN2Q0NCwKKwkweGUxY2VjY2MzLCAweDMxNWQ4NzFiLCAweGYzZTRmODEzLCAweGExMmZkNDE1LCAweDlmNjY3YmVmLCAweDdkZGQ4MDcxLAorCTB4MTNmZWUwYzcsIDB4ZmYyOTA3N2MsIDB4YmY2YjI0NTEsIDB4ZTg3ZDVmNDcsIDB4OTA0ZjE2NzcsIDB4NzAzMzcwZDQsCisJMHhlNDk2Mzc5ZSwgMHhiOTNlMTA0OCwgMHhkNGE3NjRhZCwgMHgzMzRmYzU1NSwgMHhhZWQ4NDljYywgMHhlMjVlZWYzYywKKwkweGU5Y2YwNjFhLCAweGY5MGYzODc4LCAweDNjODEzMzExLCAweDRkNzU0MWYyLCAweDZkZGJmZGY4LCAweDBmOGM4OTE1LAorCTB4OWE3NmVhOGIsIDB4ZmQ4MTllYjAsIDB4NzE5NGYxOTUsIDB4MzUzNGYyZjQsIDB4MzQxZjliNWYsIDB4MjdiOWI3MmIsCisJMHgxY2RmMjVlMCwgMHg4MzFkYzdiYSwgMHg5NTk4MmY0ZiwgMHg2ODFmODg3MywgMHg2Zjk0M2MyNywgMHhiMjJmZmM4NywKKwkweDc2MjhmNzEzLCAweGFhZjI1OWEyLCAweDM0ZGU0OWYyLCAweGQ5NTczOTMzLCAweGVjYjFhZTg5LCAweDU3NGE4MmM0LAorCTB4ODJjM2EwNTcsIDB4ODJiYTdkZWQsIDB4NDNmODJjOTAsIDB4M2IyYzZhNWUsIDB4OWQ5ZmFlZjEsIDB4YmZjZmJlMmIsCisJMHg0YTliNmQyMywgMHgyYWU1YzRlZCwgMHg4MmQ1MzEzYiwgMHg2ZjdmYTI3YywgMHg3NjkzYjk4MywgMHhmZmRiYTE0MiwKKwkweDJlZjM3ZDYzLCAweGYyMTg4OWQ4LCAweDRmZTM4YmJkLCAweDgyZDMxM2IxLCAweGE2Mjc2ODA1LCAweGRmMzUxNTRkLAorCTB4ZjMzMzZjNWYsIDB4NzY4NzcxNzgsIDB4MTZmNTI3MjIsIDB4NmI2ZTRiYWMsIDB4OTc3OWZlMGMsIDB4ZjNlZmMzZmIsCisJMHgwNzE4M2MzYywgMHg1Y2I3YzVlYywgMHg0NmVkZWJmZiwgMHgzNzFkN2E0NywgMHhhMTNiMjMzNSwgMHg3ODQ1ZmZkNywKKwkweDAyZmFmNDU2LCAweDMzOWIyZmVhLCAweDQxMjFmMTYyLCAweDBiNzA1ZTdlLCAweGYwMDJlYmQ1LCAweDBiZWJkMzIzLAorCTB4MzE3MWU3NmUsIDB4ODJmNTllOWQsIDB4ZDZhMTFkOWUsIDB4MzJmZGVjYjMsIDB4ZTUwYmIzMWYsIDB4OTliZjE5MGQsCisJMHhhZDZmZGI0MSwgMHhiNDcxZGM5NiwgMHhiZDUxYWRmZiwgMHhiYmQ2YTU5YiwgMHg3N2E0NzZkZiwgMHhmZGRlOTg4YiwKKwkweGZkMWMzODNjLCAweGY3ZDY4ZWE3LCAweDU0YjdkNzMxLCAweGM3NzVmNTlmLCAweDMzZTk4ZmUwLCAweDc3ZWY5YWFjLAorCTB4NzM3ZDBjOGUsIDB4OTc5MDI2ZDAsIDB4ZDczYzQ0NzcsIDB4ODBmZGM2M2IsIDB4MWNkZjQzN2QsIDB4ZTllYWYxMDEsCisJMHhiYmU0NDY3MSwgMHhhZDllOWNiZSwgMHg4MTNjNTI3ZSwgMHgzNjc3MmZlMiwgMHhkNzRiYTdmMywgMHhiMmJmODg4YiwKKwkweDY1ZmYyNjdhLCAweDQ1YzA0MmI1LCAweDdkODcxM2ViLCAweGZjZmE4MjYzLCAweDhlN2NlY2VkLCAweDQ3M2YyMGFlLAorCTB4ZWZmOWZmNDUsIDB4M2M0MTU3MzQsIDB4MDEyYWZlNzgsIDB4MWYyMTE3Y2YsIDB4OTczOWYwMWEsIDB4M2RkMGIzZTMsCisJMHhmYTJiZjcxZiwgMHhmMWU1ODMzYywgMHg3MmU0ZDU4ZSwgMHhkM2YxODc4NCwgMHhkZjNmZGU1MiwgMHg3MmY4YzYxYywKKwkweGY3MDRlZmZlLCAweDFmM2VkMjJhLCAweGQ1ZWZiNGExLCAweDMxOWY2MGE3LCAweGRjZjc1NmJmLCAweDExY2YxY2JkLAorCTB4NzE4YjVmYTgsIDB4NmQzYWQyZDQsIDB4NGZmNzFlN2IsIDB4NDFhMTg4ZTYsIDB4ZjU3ZjYwOWIsIDB4Y2IxZGQxMjcsCisJMHgyMmZkMjlkZSwgMHgyN2ZhMjlmOCwgMHhlMjlmYjNmMSwgMHg4NzRmYzQ2NywgMHg5ZGMxNzk5ZiwgMHhhMWZlNWYxOCwKKwkweGUzZTNkMTc4LCAweGJmNWM3MTY3LCAweDQwMjMyMzBjLCAweDNjMTk4ZjFlLCAweGI3ZTQ1ZmE4LCAweDk5MjNjYzQ0LAorCTB4Y2QzZjY4ZmQsIDB4NzEzNzA0M2QsIDB4ZTBjNzc5YmUsIDB4NWYzYzgyYWIsIDB4OWJlNThjYjksIDB4YjBkOWFkY2MsCisJMHg2N2Q2OTUzYiwgMHgxMGExOTFkNCwgMHg1MmJiOWU5NiwgMHhmNjIzOGY2YiwgMHhmY2M1ZGViZiwgMHgwMjBkOGE4MiwKKwkweGUxY2UxNWU0LCAweDA1MTUwOWRmLCAweDFiN2JjNTFlLCAweGVkNDg1ZjZlLCAweDZiM2ZlZDNkLCAweGU3MDdkOTk4LAorCTB4NjEyZGZiYTMsIDB4ZmYwYTlmZDQsIDB4ZjI2Mzg5MmUsIDB4ZTNjZjg4YjQsIDB4MDRmMGY3NDgsIDB4ODIwZDUzYjQsCisJMHg2NDMyZTUxMywgMHhkMjhiNzY2MSwgMHg2ODkzZWUwOSwgMHg0NGQ1ZjMxYywgMHg4ZjE2MTc0ZSwgMHgyYzc0NjA2OCwKKwkweGI5MDM3NGE3LCAweGY1ZTQxODllLCAweGRlMGZlNjNhLCAweGNlYzMzYzE2LCAweDI1M2I4MmI1LCAweDQwODUyZjc2LAorCTB4YjlkZjUxOTIsIDB4ZDhhY2ZmNzEsIDB4Y2I2NzM4NDcsIDB4NzdkMTU1NDksIDB4ZmZjNjIxZmIsIDB4M2UzNzA1NmIsCisJMHhmZWZmZDAwOCwgMHg0MDc2ZmExOSwgMHhlOTlmYzU1NywgMHgzYzE1N2QyYywgMHg3OWQxZDEyZCwgMHg3ZjI5YTViZiwKKwkweDA4ZDc5ZTM4LCAweDIzYTdiYzZlLCAweDBiZTc4ODk4LCAweGJkZDlhYjQ3LCAweGZlNzE4ZjEzLCAweGVjMDVjYmQ3LAorCTB4NjBmN2Q0M2YsIDB4ODcxMzBmNWMsIDB4MTY0OWQzN2MsIDB4NzFjM2ViY2MsIDB4YTY3Zjk5MzMsIDB4ZDY1MDhlZmQsCisJMHhkMGZkMDFlNCwgMHhkMjcyOTUzYywgMHgzNDU5N2U4NCwgMHgzNGU3Y2NiZiwgMHgyNDlmZGQ4MywgMHg1Zjc5YjUxOCwKKwkweDlmZmI5NDYxLCAweGRmZGJmZTAwLCAweGM1YTQ5ZjA3LCAweGRiYjk3ZGExLCAweGY2MzY5ZWM5LCAweGY0MTkxMTMyLAorCTB4ZjkwOTMyZmIsIDB4ZWI4MzY2ZTgsIDB4MmZkMDZjYmQsIDB4ZTQwNDQ5MGYsIDB4MjM3ZGYzZTMsIDB4MDVkMTlmZGYsCisJMHg4ZmU0NDVkYSwgMHg5Nzg2Nzc4MiwgMHg4MGE0ODg0MSwgMHg4MjkxMjZlNSwgMHgzYTVkOThmYiwgMHgyYmZmYzdjMiwKKwkweDAxOWVkN2I1LCAweDgzZjA0ODdjLCAweGY4MDE4OWZkLCAweDdiYWE2Y2FlLCAweGUyMGI5ZTY3LCAweDJmZjYyMzI2LAorCTB4MWJiMWYzODUsIDB4YmRlZjlkNzMsIDB4Y2U1Yzc0MDcsIDB4YmMzOTViZWUsIDB4NjlmNzE3MmMsIDB4YTAyNWRmNzcsCisJMHhmNGE0MWQ5YywgMHg0ZDM3MzgwMiwgMHgzZGVmNzhjZCwgMHg5N2RiYmYzYSwgMHhkNzM5ZTBhNSwgMHgzNGNhNGYwYywKKwkweGIxOWFmNzM4LCAweDY4YmI3NDRmLCAweGQ5ZDc1OWJmLCAweDM2NGU3MDZkLCAweDdjNDhhMDY1LCAweDRlZGNiYzJhLAorCTB4MzM0ZTMwOWEsIDB4OWJhZWUyYTMsIDB4YTg4YTRlNDAsIDB4NTQ3Yjg0M2QsIDB4ZjNmYjgyOGEsIDB4NDZiZDQyYmEsCisJMHg2NWNiZjdjMCwgMHg5ZDJiYTk5ZiwgMHgzM2NhZDM1ZiwgMHhmYzc0MTFhNiwgMHhkMDBmZGE0MiwgMHhmYWMzNWU1ZCwKKwkweGRjMTFhZjk1LCAweDE4NWJhYTkwLCAweDY0ZjUxNDdjLCAweDJmMDExYWUxLCAweGZlYTI2OGFhLCAweDFiODMxYzZmLAorCTB4OWI3MGEzODgsIDB4YjRmYmU4NmEsIDB4MDdkZTE3M2UsIDB4YTcxMjZiYjgsIDB4Mzk1Njc5YzEsIDB4M2ZiZTI3OWQsCisJMHgyNWNmMTJiYSwgMHhiNDdiZTkwYiwgMHhiOWFkMzQ5OSwgMHhhYmNkZTEwYiwgMHg2ZjdjMDgxMSwgMHhlMzNhMzQ1NCwKKwkweDZmMDBkMTkxLCAweGY2ODZlNDlmLCAweDE2ZmU3N2Y3LCAweGQyNjY0YWYzLCAweGY4NTFiYWYxLCAweDNjZTZjNGIzLAorCTB4MmZkZGFiOGMsIDB4OTNiZWYxMzgsIDB4ZWU1MTdkZDksIDB4OTFkY2I4ZGEsIDB4YjlkODdkODEsIDB4ZWY5NDQwYjQsCisJMHhmY2VhOGM3ZSwgMHg5NjE2NDE4NCwgMHhiMGI4NWQwNywgMHhkNWQ2MGFiMiwgMHgxODY0YTcyYywgMHg5OGNlOWY5MCwKKwkweGE1MWY4ZWMwLCAweGZmNTFmNmY4LCAweGU1ODk4OGY1LCAweDQ3Y2EzNDNkLCAweGZkMmFjZDRjLCAweDA3ZDJkOTM5LAorCTB4NDM3NjcxZTUsIDB4Mzk5OWVhMGUsIDB4ZTdlNzhiYzQsIDB4OGZlNjRhYmUsIDB4MDk2YTVhMWMsIDB4NDk4N2UwMDgsCisJMHhkZTc4NzRjZSwgMHhjZjhjZDRiOCwgMHg3NjYyNWY1YiwgMHgzMzU3YjVhNywgMHhkNDRmNDNjNiwgMHg4N2JlMDQ0OCwKKwkweGU3ZDM1YzVhLCAweDg5ZTNhMDI5LCAweDEzOWUxMmY1LCAweGE4NDhjZjhiLCAweGM0YmVlNmNmLCAweDM1OGQ2NGUyLAorCTB4NWE4OWVlMGMsIDB4OWY3MmRmYTYsIDB4ZTgyMjY5YjksIDB4OTU2YmI5ZWQsIDB4MWVhZDY1NzMsIDB4YTMxNTc0MmIsCisJMHhjMmM2N2E5ZSwgMHg1ZjVlOTJmNCwgMHg1MTU0ZjVlOSwgMHg3NmQ4YWFmNSwgMHhiMTg5OWVlOCwgMHgyYWNmNTBlZCwKKwkweGMwZWNhZjE2LCAweDliMTM5NzNlLCAweDQxODZhN2EyLCAweDY5NDE0OTVlLCAweDgxMmI5OWFmLCAweDg5Njc2ZjlmLAorCTB4MmRhMTRkZGUsIDB4NzYwOTNlNWYsIDB4Zjc4ZWM0YjcsIDB4OWQxOTk1MDMsIDB4M2Y4YzA5NGYsIDB4MTlmZmU4MDgsCisJMHg4MjVmMGRjMSwgMHhiMGNkMTQzYywgMHhjNzNmZmRlMCwgMHg0NzIwMWU4MSwgMHhkY2YxOTIyYiwgMHg4MDUwMzBiMywKKwkweDJlZjI1Nzc4LCAweGYyZDRhZWU3LCAweDdkY2U3MmJiLCAweDFlMjQ0ZjhiLCAweGIyMmFmZGI1LCAweGRmYWE4ZjEyLAorCTB4Zjk0NWZmZmIsIDB4NDc3MzhlOTYsIDB4MDhiMDEwODMsIDB4ZTdiNDNmNTAsIDB4ZWViMDIzZTcsIDB4ZTQyZDc5YzQsCisJMHgzYjBhYzFmZSwgMHhmN2ZiZjVmMiwgMHg3YzBhNTk5ZCwgMHg4MTAxZjMzYiwgMHg2NDRlZGY4MCwgMHhjM2Q4MTU1ZiwKKwkweDBiODI5NWIyLCAweDFmNzNiM2UyLCAweGE1Y2ZlZjYwLCAweGRmYmNjM2VmLCAweDJmZTMyZGZmLCAweDkwMmVlN2NhLAorCTB4NDc5YWIyODMsIDB4MzVmZjYwZjcsIDB4YmZlMDBiODIsIDB4ZmQwMGFhYmYsIDB4MjQ1OTIyODksIDB4MTBlNmJlZDgsCisJMHhiZGE4MjNlZSwgMHg0NmEzZmNjMiwgMHgzOTA1NGM1OSwgMHg3NjYyNWIyOCwgMHhjMmI3NzljMiwgMHgxZTdmMGE0ZiwKKwkweDkzNTFkZmUyLCAweDFiOTBmNzM4LCAweDAwZTc3YmU5LCAweDE0YmUwYzQ4LCAweDdiMTEwYmE3LCAweDJlNTNmYzBhLAorCTB4ZjQzYjdlMzMsIDB4MTEwNmU0OTIsIDB4YjI3ZjM4YjksIDB4ZmUxNTY3ZWYsIDB4NDZmZjgxMTMsIDB4YjFhZmY5NDQsCisJMHhmYzA0ZDcyNiwgMHhlMDIwMjI3OCwgMHhmMDJlN2NiOSwgMHhlZmU3ZjAyZiwgMHhiMTBjZjg5NSwgMHg4YmE4ZmRhOSwKKwkweDBmOWVhN2YxLCAweGU1MWZmMWRiLCAweDBhZjNkMDNiLCAweGE4ZmMyYTdmLCAweDQ2YzNjM2U3LCAweDdkZTYwZDMyLAorCTB4YWUwYjUyZjcsIDB4Y2I2YWI3MjMsIDB4Y2U0Yzg1YjQsIDB4YjcyNzNjZjAsIDB4OTA1NGJlZWEsIDB4Y2IyMzQyZWIsCisJMHg1YWYwNTBmYiwgMHg0Mjc5NjQ2YSwgMHg0NGY1ZTZlZCwgMHg2NzViYTlhNSwgMHg0NzliYTdlNiwgMHgyYTNkOGIzNywKKwkweDYzY2IyMjBmLCAweGRlNzFkMTA5LCAweGU2M2NmZjVjLCAweDc3NWU5ZGQzLCAweDZmZjQ1YWU4LCAweDAwM2U1MWI2LAorCTB4OTNiN2FmZmMsIDB4MDI0M2VlMTAsIDB4ZWI4YThmYTgsIDB4MWJlNjBmNDUsIDB4Mzc1OTQzMWEsIDB4NGFlZmY2YWEsCisJMHg1N2ZjYzRmZSwgMHhlMmVmODhlYywgMHgzZTQwZTY4ZCwgMHhmMzc4YmY3ZCwgMHg4ZTc4MjE5MSwgMHhkZmY5ODhiZCwKKwkweGZkMDEzYWYyLCAweDBmMzcyMjYzLCAweDhhM2RlZjgxLCAweDQzOGYyYzhkLCAweDYxM2MxN2VmLCAweDk2ZjBmYjYxLAorCTB4ZTBlOWQ2MmQsIDB4ZWNiNTA5YjcsIDB4YmFlMmFmNWUsIDB4MmFiMzI1OWIsIDB4NDViMGZiYmUsIDB4YjllMWZhNTIsCisJMHgwY2U5NGM4YSwgMHhmY2MzNTVkZiwgMHgyOTRhZjdkNCwgMHhiZjJkMWJmOSwgMHhkYzU3ZmM2NywgMHg1NzNmYTEyMCwKKwkweDE1YTFiYjVjLCAweDBmOGFmM2YyLCAweDViYmY3MTlhLCAweGYzMDY3YjVlLCAweDc5NWY3MzhmLCAweGQ2M2ZkZDg5LAorCTB4YjJmMjZhMjAsIDB4ZDU0M2U1ZGEsIDB4NTFjZTc4OGEsIDB4Nzk4YTVmNTYsIDB4ZTc4ZWI0MWMsIDB4M2M3NTY1MWQsCisJMHhlNjA3ZThmZiwgMHg2NTdmY2NlYiwgMHhhMjk5NjZmYiwgMHhkZmE2ZmU3MCwgMHhiMDllZjAzOSwgMHhmYzBlYjVhNiwKKwkweGZiZjZhNTRlLCAweGU1ZGIxM2YzLCAweGU3MmRkNTNmLCAweDljZDc0ZmY5LCAweDYzMWZhODIwLCAweDBhN2QzZmU3LAorCTB4OTQ3YjgwZmYsIDB4MjdmY2RhMmMsIDB4MWJmNGNiNTIsIDB4YWM1NjY3OWQsIDB4N2UyMjEzZWYsIDB4M2U1ZjRiZDcsCisJMHgyZGJiZjkwYiwgMHgxNjdiM2YxYiwgMHg4ZmYyNWRlNiwgMHhiYzg1OWZjZiwgMHgwOWQwMGEwYywgMHhiYWY5NGE3ZSwKKwkweDUxZGYzMTc3LCAweDg1YTBlZjc5LCAweGZmN2U4M2VmLCAweDZkMTdjYzNiLCAweDA2ZWNjMGZkLCAweDRmZGJhZDY4LAorCTB4ZDFmZjgzYTQsIDB4NTQ5YmUxYmEsIDB4NjdiZDAzYzgsIDB4NzdjNjFlN2IsIDB4YjczNTc5ZWUsIDB4NmYxNTg5MmIsCisJMHg2ZmYwMjVlMywgMHhhYWY5MTNhMCwgMHhkNjM1YmE3YSwgMHhjOGZlNjIzNywgMHhkMDc3NGE2OSwgMHhiNmJjOTExMywKKwkweDJmOTY1MmJhLCAweDZjZjllMmU4LCAweDA3ZTc2M2ViLCAweGFiNWZjYmI3LCAweDJiYmFmMWJmLCAweDMzZDYzZjQxLAorCTB4NzlhMmUxM2YsIDB4M2QyODA3NmMsIDB4MWQwNGVmMmYsIDB4YzU3Y2YzZDcsIDB4MzdiZTZiYmEsIDB4ZmMzNGVkOGYsCisJMHgyYmViZDI4MywgMHhmMDFmMzY4YiwgMHhjZjM5ZmFjYiwgMHhmNTZkMGQzZCwgMHhiMWU2MWRjOSwgMHgzZjgxM2E4NSwKKwkweGQxYjhmZjI1LCAweDgzYzQzMWUyLCAweDExN2M2ZDFjLCAweDdlODEwN2YzLCAweGQ3ZDAyZWY5LCAweGJjNDNhNjVmLAorCTB4YzYxNGE0ZjgsIDB4YmI3ODQ0YjgsIDB4MmI3YmJmMTksIDB4Y2EzZWZlZGUsIDB4ZmJhYmViNTMsIDB4ZjA5N2JmMzEsCisJMHgxMjU2ZTAzYywgMHg0ZDdjYjFmOSwgMHg1ZjJhMDMxZSwgMHg2ZmY5Njc2MywgMHgxZjkwMGU5YywgMHg3M2UwNzJlNywKKwkweGY4YzcwNzllLCAweGViOGZjOTVhLCAweDZjNmUyZjI4LCAweGUzOGIyNjdjLCAweGQyZThiY2YxLCAweDNjZjIxZjM1LAorCTB4ODRkZDI4YjMsIDB4NDNhZjQwZDEsIDB4YTg3NzliZGYsIDB4NzgwOWMxZTAsIDB4ZmJjZWE1MTgsIDB4MTg4NzlkOGMsCisJMHhkMWQ0ZmJjOSwgMHg3YTA5ZTgwZCwgMHg0OWQ3OTIzYywgMHhiZjIxM2RlYiwgMHgxZmJjMjAyZiwgMHg3NWI4OGYyYiwKKwkweDZkMTdjYjE1LCAweDkzZGZiNDk1LCAweGYyYzRlOTQ2LCAweGViYzY0NzQwLCAweGI5ZDAzNmU0LCAweGFkOGJjZmZjLAorCTB4YTllMjg3ZTMsIDB4YzM0YmJjNWYsIDB4NWFiZTBhMzcsIDB4ZWZkNmM3Y2UsIDB4N2Y4NWUzZDMsIDB4ZDlhYjdiZWUsCisJMHg4MmZiZmU4MiwgMHhmYmUxZTM5YiwgMHgyNjQzZmE4MiwgMHhmMThiZGY4MiwgMHhkZGYyOTU3ZCwgMHhiNWI3OGYxMiwKKwkweDdmMzExM2FjLCAweDExYWVhYWIwLCAweDdmNWViYmY1LCAweDE0NzNmMTk0LCAweGUzOGI3Y2ZkLCAweDZiMmFkZTk5LAorCTB4NjVhM2Y2NjAsIDB4YTM2MDNkYTMsIDB4ZDhkZTVhNzAsIDB4YjY1ZDdjODIsIDB4ZjIwOTkwZmUsIDB4NmVkNGY2YjEsCisJMHgwM2JjYjEzMiwgMHgzZjYwNDcyNiwgMHhiN2Y5YWEwMiwgMHgwODczYmNiYywgMHg5ZjdlNzNlYSwgMHg4NTljN2U5MSwKKwkweDYwZjI5YzdjLCAweGQ3Y2E3MWVjLCAweDMzOGNkMTlmLCAweDM5MzNhZTVmLCAweGVmMWYxNzZkLCAweDY2ZTdhMzUzLAorCTB4MTM2OWY3ODAsIDB4YWQzZWEzZjMsIDB4ZmFjNTI3MTMsIDB4NzhiNmU2YmUsIDB4YWJhYmVmODksIDB4M2I1MGZjOTksCisJMHhkOTNhZjc4YSwgMHhhMjRlM2RkOSwgMHhiMmZkMWUyMywgMHgwZmEzZWM3YiwgMHhmNzgwZmRjMiwgMHg0Nzk4NGRkOCwKKwkweGU3OTJiOGIxLCAweDNiOTdmYzVkLCAweGQ4YmRlODBkLCAweGY5ODEzNTdlLCAweGFhZmMwNTJlLCAweGQzOTJmN2Y2LAorCTB4OTM5ZmMwNDcsIDB4ZDQyM2JjZDIsIDB4ZmNjYTMwZTcsIDB4MjQwYzVkNGQsIDB4YjdiZjNlYTAsIDB4ZmIwYWVhNGYsCisJMHg3Yjk0NjI1MywgMHhjZGFlM2NjMiwgMHg3NjA4Y2FmYywgMHhlMmNmYzliMSwgMHg5MWZjZTRmYiwgMHhjOWJjZjBiZSwKKwkweDRjOWRkY2U4LCAweDEwNGQzNmUxLCAweDZkOWExMGRjLCAweDdlMGNmN2NmLCAweGQxZTBjZTI0LCAweDM5MDk1ZmRlLAorCTB4YjNiZWIwZjgsIDB4ODlmYTAzNmUsIDB4NDljODQzNzYsIDB4YTViYjEwYmIsIDB4YjgzNzBkMjksIDB4YTYzMmUyMmUsCisJMHhlNjNjZWE2MiwgMHg4ZmU0M2ZhZiwgMHhlN2RmMGJlYiwgMHg1Yjc1MDgzOSwgMHhhOGRiOWZhMSwgMHg2MTIxNmZiOSwKKwkweGZmNzc1MWI0LCAweDk3ZDAzOTAyLCAweGU3MWIxZmRhLCAweDY3NWUyNTU3LCAweDcwYTZmZjY3LCAweDg3NWVmMTliLAorCTB4MTJhNDQxYzQsIDB4ZGQ4NTc3ZDgsIDB4ZTNjNGZlODcsIDB4NWY3ZTBmMGUsIDB4MjEwMzdmNDYsIDB4YzQ4OTIxZGYsCisJMHhjMWY3ZDViYiwgMHhmNzM1NzFkMCwgMHgzNTcxZDA0YywgMHhiNjhmNDRmNSwgMHg3OGM5M2M5ZSwgMHg0OWJkOTYzNCwKKwkweDI4OThmM2U2LCAweDg5MGYxMGRhLCAweDJmZWUwNjc5LCAweGE1ZmJmMjdiLCAweDk4OWRlNzQ2LCAweDY4MjFkYzQyLAorCTB4Nzk4NmM2YmYsIDB4NjRiYzU0ZTMsIDB4MzY2YzNhZjUsIDB4ZmNlOWJjZWQsIDB4NjEyMjdhMzQsIDB4NjA2Y2IzNTAsCisJMHg3NzNjZDRmMywgMHhlYjgwOTcxMiwgMHhkMzlmNjhmNywgMHg3ZmVhNmFmOSwgMHhjZGY2ZTc4OSwgMHhlZmEwOGM0OCwKKwkweDg0NGQ3MTZjLCAweDA2YWNmZmUzLCAweGRlOGM0YmRmLCAweDRjYzI1NGE0LCAweDRlOTNjYzI2LCAweDQ4M2ZiZTEzLAorCTB4ZTNhMGViZTAsIDB4MjEzYmZhNmIsIDB4ZDdjNmMwN2EsIDB4OWQzZDIxYzIsIDB4MmYwNmVmZWEsIDB4YzZiMDc2ZTcsCisJMHhmYTBhM2RlYSwgMHgwNTc3YWIyNiwgMHhhNzY2ZmEyNiwgMHhjM2EzOWUwOSwgMHgwYmIwNWI2OSwgMHg4NWNjYTdlYSwKKwkweGFkMDhlNGI5LCAweGFmOGNkNTBiLCAweDI4MjBhZWZhLCAweDJjYzM3ZDM3LCAweDg5MmM4NThmLCAweDFjZDUzZjQ3LAorCTB4MzBjYjY0NDcsIDB4Yzg4YTFlZjgsIDB4MjUxODMwZDIsIDB4NWM5ZmNmYzAsIDB4OTQxNDBjOGIsIDB4MzVlNTE5NzEsCisJMHgzYzMwNWVmYSwgMHgxMjg3MzBkZSwgMHgyODlhMGVhMSwgMHg5ZWYxNDNmYywgMHhhYWZjNjFjZiwgMHg4NjY5N2RlYiwKKwkweDc5M2NiMGExLCAweDk0NmNhZWU5LCAweDYyMjA0YmRhLCAweGVmZjRhODY4LCAweDRiMjU3YmRlLCAweDlmN2I4MWY5LAorCTB4MGRkZmVjODgsIDB4YTk1YWI4NzYsIDB4ZGYwZWM1NTMsIDB4NDdjNzU3NmIsIDB4YWEzODllZWEsIDB4NTkzM2FiZWYsCisJMHhiZmQ4Nzg1ZCwgMHg0MjRmNTk3NCwgMHgwYWYwNGIxZSwgMHg3MTA3ZDA1NiwgMHgzY2YxNGJjZSwgMHhlYjg0OTQyYywKKwkweDUxN2Q5OGJmLCAweDRkNzAzOWU2LCAweDExZjhjNGYzLCAweGY3MGE5ZTJjLCAweDQ3YjNmNjhhLCAweDdiNDZjN2JlLAorCTB4ZDRhNmQ2YmMsIDB4ZjBiZmI4NDMsIDB4YmQ0N2VmZDYsIDB4MWZiNzVhNTYsIDB4YTc1MDBkZGIsIDB4ZTZlNGVmNjUsCisJMHgyOTEyM2Q4OSwgMHg3OWQ1YWM1NiwgMHg1ZjgwOTc2OSwgMHhhMDY2OTA1YiwgMHg1YWM0YmNlYiwgMHhjMWE4ZGJiZCwKKwkweDNjMWExM2MzLCAweGE2M2QxNzE4LCAweDNmNjNjM2MzLCAweDNjOTcwZjA4LCAweGExZTIxOGZjLCAweDdjYTZlYmIzLAorCTB4ZTk0YWQwMzEsIDB4ODBjNzI1MzcsIDB4M2E4ZDM3ZjcsIDB4MGJmOGMzNjgsIDB4MWVkMDU5ZmQsIDB4M2FhYjM4NzEsCisJMHhkOTU2OGVmOCwgMHg2ZTM4NTBhNywgMHg5N2YwYTM4MCwgMHg1N2MyOWVmMiwgMHgxZjRkZjExZCwgMHhkZDk0YmNlMiwKKwkweDlmZTVhN2ViLCAweDBjNjdhYjAyLCAweGY1NmIxYmMwLCAweGUwYTViMzFjLCAweGVlYmJmMWZhLCAweGVmMDJiZTI5LAorCTB4NWYyOGU0ODQsIDB4Mzg2ZjliMTMsIDB4NjM1YzI3N2MsIDB4NTViYzczYmQsIDB4OTI5ZGFmMTUsIDB4YTRjYzQwYjMsCisJMHg1OTA1Y2RmMywgMHg0ZjVkMTkxOCwgMHhkMmQ5NDJjYSwgMHhjNTMzYWU5ZiwgMHhlYzNjYzA2MywgMHgxMjZmYWIxYSwKKwkweDFlOThlMzhjLCAweDQ4ZjU1MTBlLCAweDcwZGYwMDVkLCAweGEzOGU4YzQxLCAweDc2ZDU0N2M4LCAweDJhYWY4ZmI2LAorCTB4YjExNjA0MzAsIDB4ZTAwMTYwZjMsIDB4NTlhM2Y5NDUsIDB4YzY2MTFmYzcsIDB4OTA4NzBkMWYsIDB4ODc4MmNhM2YsCisJMHg1NDM0N2YxOCwgMHhlN2U3OGY4ZSwgMHhhZThmYjA2YSwgMHg0MGExZTEyNiwgMHg1N2Q2OTlmNywgMHgyOGJkOGNmMiwKKwkweDU1YzM1OGRmLCAweDQ4NWYyODNkLCAweGZjYmNmYWYyLCAweDMzYWYxMDRiLCAweGNmODdkMjYyLCAweDQ3NTc1OTRiLAorCTB4OWJkZWFkZjQsIDB4ZDgyMGYwZjksIDB4ZTAzM2VlNjcsIDB4Mzc4Mjk4NzksIDB4MmI2MmRmYTUsIDB4NjYxY2IzY2IsCisJMHhmYzAzY2RmNywgMHhkZTZlOGY5NSwgMHhiOGRiZTQwMywgMHhkNzk4Y2ZmNywgMHhjMzc3ZDhlMSwgMHgzMWRmNzg0ZSwKKwkweDE1Yzg1Mjk1LCAweGRmN2FiNzFkLCAweGI3YmZiYzIyLCAweDQwMDNhZTlhLCAweDBjYjA5MDI2LCAweDdjNjNiZDc2LAorCTB4ZTA4OWY5MzAsIDB4NDE5ZWZjMDMsIDB4Mjg0MzhmODAsIDB4NzdmOGViMmYsIDB4ZjBlZTU0NDUsIDB4NTZkZWRhM2IsCisJMHgwM2MzYmY3NiwgMHg1MjA3OTY1NiwgMHhjOTc5MTU2ZCwgMHg3ZDk0YjBmYywgMHhmZmIwNGQ2NywgMHhjMDYyNWYyYSwKKwkweDBlNTAyOWZlLCAweDA5N2ZhZjUyLCAweDFhYjZhYmY2LCAweDBhNzRmOTM1LCAweGEyN2UxNTVkLCAweGY3MGFkNDlhLAorCTB4ZTg5NTVjNDQsIDB4OWZlNWFlNWIsIDB4MGFhNjZiMjQsIDB4MjNkZWYyOWUsIDB4NGQ5ZGUyN2UsIDB4YWVkNDY1MTksCisJMHhiYjA2ZWYzYiwgMHhkMGE3Zjk0YSwgMHg1M2QzYjJhYSwgMHhjMDE2NGIwNiwgMHgyODdmODQ1YiwgMHgwZmEyYzY3ZiwKKwkweDMwMzdlZjdkLCAweGZlMDM4YzFlLCAweDBiNWQ4NmMyLCAweGU4NzczODQ0LCAweGUwYjM1ZDJjLCAweDNmZGEzYTFlLAorCTB4MzYyYTRhY2IsIDB4MTJiM2Y3ZDIsIDB4NjRmNTA5NjgsIDB4ZWJjYWVmNWUsIDB4ZTdkOTU4M2QsIDB4YTA0MWI3MjMsCisJMHhiOGYxNTdjZiwgMHg5ZTU2MmJlYywgMHg1ZTc0NjAzNywgMHhiYzVjZjcwYSwgMHg5ZDlhZjFjMiwgMHhhMGJiNDU2NiwKKwkweGEyOTFhZGM4LCAweDhkYjVjZTBmLCAweDMzM2I3Y2ZjLCAweGJhMDA2OTljLCAweDBjNmM3MjI5LCAweDZhNzY0MjFiLAorCTB4MmU4ZDMyYjQsIDB4YmMzOWU0MDMsIDB4ZTE3OWY3ZTUsIDB4YmQyM2IwYmMsIDB4ZWMyNWY1NzMsIDB4ZjNmZDNmYmIsCisJMHgxZjlmM2U0NiwgMHhkZDdmNWZlZCwgMHg0NmUwZmJlZSwgMHg1YzY5NmZjMCwgMHhkMDM3MjNmMywgMHg5ZjI1ZDk3YSwKKwkweDkxNzY5YzYzLCAweGY1MGFlY2I1LCAweGQ0YmU5ZTc5LCAweGYzYWRmZmNmLCAweDFmZTAxYzI3LCAweDllNmQ3ZWI2LAorCTB4ZmVjZmNiMTQsIDB4ZGZmY2NhY2EsIDB4ZjhlOWZlYmQsIDB4MjE3N2UyOWUsIDB4YWIyNzQwYTksIDB4NjMzNDJmYmYsCisJMHg1NWQ1N2U4OSwgMHg4ZTgwZjJhOCwgMHhlYzA5MzFiMiwgMHg5OWM1OTVhYiwgMHgyYmJlZTljNiwgMHhhZWM3Y2U1NCwKKwkweDVmYjhiMTBhLCAweGU4MzNlODE2LCAweGRkODMzNWRmLCAweGYzMzVmZTU3LCAweDdmZThlMjhmLCAweGM3OTRlZTcwLAorCTB4MzJkZWM5Y2YsIDB4NjlkYjE2ZmEsIDB4M2IwOGI3YmYsIDB4YTg0YWNkNmYsIDB4OTNlZjg0NjgsIDB4Y2YwMzM5ODgsCisJMHhmNjg4NzMyYiwgMHhlNGFjYWZiZSwgMHg4ZjM4MDllYSwgMHg0NzljMGM4NCwgMHhiZGFlOWM2ZSwgMHg0MDM0NmNhYiwKKwkweGNjMGM5ZjdiLCAweDJhMjNjYzU3LCAweDIzY2U4Y2JmLCAweDc4YzEwZmFiLCAweDI5NzAxOTE2LCAweDE5NGQ4NWU2LAorCTB4Yjc5ZmY5NDgsIDB4ZWNjYzBlN2YsIDB4NDI2NzExYjcsIDB4NzY0ZmVmNTQsIDB4YTA5ZGUyZGQsIDB4ZGRhYTViZjEsCisJMHhmZWRmYzdhMCwgMHg1NjIzYmM0ZSwgMHgzNjc1YzVmZSwgMHhmZDdiOWZjNiwgMHgwM2U0MmY1ZSwgMHhkZTNjZjFlOCwKKwkweGJiYjEyYzI1LCAweDhmNWJlM2RhLCAweDE1ZmUzZDRmLCAweDk4ZjFlYWJjLCAweDQyN2I5MWYzLCAweGU5M2MwYzUyLAorCTB4YmYzZDEyZjEsIDB4YmEwMGFjMGMsIDB4ZDExNDBkZTQsIDB4ZDA3NDI5N2UsIDB4Y2JmNjg5ZTMsIDB4NWY2ZjdlODcsCisJMHhmOWMxZmI0MiwgMHgwOGMyYjhhYiwgMHg0MzM3MmY3NiwgMHg0NTdmZGMyMCwgMHhjMjJmMzZmZiwgMHgyNTdmY2MxZiwKKwkweDM3NDhlZDVkLCAweGUzZGI1ZTNkLCAweDk3OWY5M2QxLCAweDFlZGY1ZDFhLCAweDM3ZTYxN2MwLCAweDNlNDAwZmI5LAorCTB4YzI0ZGEzNTksIDB4MWM2ODQ5NzEsIDB4YmM3YmU3NTEsIDB4MDRlNGYxMDIsIDB4YmJlZjFlMWMsIDB4YWE0MGM3MWIsCisJMHg1NzYyYWVmOCwgMHhmZjI4ODhlMiwgMHhlYjVhZmI4YywgMHgyNzA1ZTZlNywgMHgzOWZmMDI5ZSwgMHgwNGI3YzEyYiwKKwkweGNjNDRhNmUyLCAweDhhM2EzY2MwLCAweDNlNWFjM2JmLCAweGNkNmJmY2UzLCAweGY4YTEzZTQwLCAweDBjNDNiNmQ0LAorCTB4NjY0ZmRlMDcsIDB4NWQ0ZTc5ZWQsIDB4ZjRjZjhlYmIsIDB4ZWNmODU3ZWIsIDB4YTYzMDc4MTUsIDB4M2UxNGJlM2QsCisJMHg3ZWUzNjg5YiwgMHgxM2QyNzc3OSwgMHg1YjIxZTRmYywgMHhkZTgwMjQ0NiwgMHg5OGE0YzEyNiwgMHgwNzUxODhmMSwKKwkweDljMzgxMWJkLCAweDA1MWY5MTVmLCAweDc3M2M4YmUyLCAweGY0MjdmOWY2LCAweDhlYjUxMzU3LCAweDFjYzBmOGFhLAorCTB4MmQ5Yjc3ZDEsIDB4Zjg1MmZlODYsIDB4Yjc0ZTRhZTMsIDB4MTNiYzg5MmIsIDB4MTI1NzRiZTIsIDB4N2Q5MTE3ZTMsCisJMHhmZDc0NDY0MCwgMHhkZTNjNmNiMywgMHg4MGY0ODNkMiwgMHhiYWIyZWU3NSwgMHhhZjk5N2VkOCwgMHhlYTZlYjIzMywKKwkweGIzZGQwMjU2LCAweDcxZDlmOGY5LCAweDgzNGVmYzM2LCAweDExMmQ4ZDg0LCAweGJkZTI2N2ZjLCAweDI5MjliMjM1LAorCTB4Zjc4OTBmM2EsIDB4ODQxNWU5MjcsIDB4ZjAzMzcxZjksIDB4MTc4YTVjYmUsIDB4OWQxYWMxNzIsIDB4NjA5YjQyYzcsCisJMHhmODVjN2JjNCwgMHhjNmQ3NGUzYywgMHhiNmRmOTBjOSwgMHgwMDNkZjQ0ZSwgMHhmNjExNmNlYiwgMHgxOWY1YzEwZCwKKwkweGVlYzFmZDQzLCAweDZmM2ZkYmU5LCAweGVkMDY1NWQ4LCAweGY2MjE1ZmI0LCAweDJmOWZmM2UzLCAweDc4NDNiOGIyLAorCTB4M2FiMDM5YmIsIDB4OTRmZjYzYTMsIDB4MDdkYTM1OGEsIDB4ZTFiMjJlNDUsIDB4NDFjYmM4YmIsIDB4Y2MyMmMyY2UsCisJMHg1M2NmYzgzYiwgMHhjMjI5OWM3NiwgMHgzODg3YTBmZCwgMHhlMTQ2NWM5NywgMHgxMTNiM2VlZCwgMHhhOTczZjlmMywKKwkweDdhN2U4MWJhLCAweGI3ZjNkN2JlLCAweDkwMjc5ZjllLCAweDRmNzg0Y2YwLCAweDM2M2ZjN2NmLCAweGRmZjE0MDBmLAorCTB4OTA3MzdjMjIsIDB4ZWVjYThkZjIsIDB4Zjk0MmZjMjksIDB4NWQxYjc5ZTcsIDB4NjM4OGRiNzcsIDB4ZmRiYjgxNGYsCisJMHg1M2NmODhjZSwgMHhmZTI5ZWVjMSwgMHhmMTBmZDQ3OSwgMHgzYWZkMDBiYywgMHhmZjE1ZDNmMiwgMHhmN2NkOTM3YywKKwkweGMyMzNmNDEyLCAweDk5ZmJlODdhLCAweGY4MDY1ZDAzLCAweGNkOTBmZTdlLCAweDU3M2MzMmYzLCAweGVkOGI5NmZjLAorCTB4MjMyZWM4MzcsIDB4M2JlNzQ4MTksIDB4Y2VhMWQzOTMsIDB4NTkzZWYwNDAsIDB4ZjY4MDgxNzksIDB4OTYxMjc2ZWMsCisJMHgyYmRiYmM2MCwgMHg3NmJlY2QyNCwgMHhjOWZjMjVhNiwgMHg1ODdlNzBmZCwgMHg5OWVkMDAzOSwgMHgxNGZhYmUwZiwKKwkweDhmOTY3ZGYxLCAweDEzYmZjNTVjLCAweDBmZWUxODE5LCAweDE2M2JiZWZiLCAweDQzYzdkZjZhLCAweGJkZThhY2MyLAorCTB4YmVkMDlmOWQsIDB4NmUwMDkyZGQsIDB4ODc3YzBhNzMsIDB4ZmI2YjIwNWIsIDB4ZDY1N2M3ZWIsIDB4N2ZhYjg3YTEsCisJMHg2M2RmOWNhZiwgMHhiYjIyZjcwNCwgMHg5ZmMyZmU1NSwgMHg4ZDhmY2M2YywgMHg3ZTJkZjdjYywgMHgzN2M1MDE4ZiwKKwkweGMxYjNkNWQ4LCAweGM1MGYwMjRiLCAweGY0YTU1ZmUwLCAweDhjN2IyNWM1LCAweGU2ZjVhM2MzLCAweGIxZTllNmVkLAorCTB4YzY1MTE3ZWUsIDB4ODMzZGYwNTEsIDB4ZmNmODI5MzQsIDB4NjVmZjE2MzYsIDB4YzAxYzU4ZmIsIDB4NzM0ODQ0ZjAsCisJMHg3ZDk0YWY0ZSwgMHhkZmQwMTNjMywgMHhhMDI3NWJlYiwgMHg5NzUyNWQ3ZiwgMHhmMWE1OTg2MywgMHhiODNlZDlmMywKKwkweGY3MGY5ZjlkLCAweGZhZmY0MDVkLCAweGFmY2ZjYzlkLCAweDQyZmRjNGFiLCAweGY3ZGIzZDQ5LCAweDVjZWY4MmFjLAorCTB4MGM4OWYzYmEsIDB4YjIzZmZmNDIsIDB4YTliYzg1OWYsIDB4OTA0N2I4NTIsIDB4NTNlMDg3YjUsIDB4YWNkNTNlZjUsCisJMHg4OTdkYjI3ZiwgMHhmNjExYjk2OSwgMHhjOTM0YmVhMywgMHg1YWJmZWI0ZCwgMHhmNzQ3MTU1ZSwgMHhjNDE5NTU0ZCwKKwkweDI5YmVlODQyLCAweDI3Y2I1N2YxLCAweGI1NGQxOGFlLCAweDIwNDc5MjczLCAweGIyYWY1ODg5LCAweGZlZmNlOThkLAorCTB4Y2I1N2Y5MzksIDB4ZTM2NTk2YWEsIDB4YWVkZTJiYmUsIDB4MjQ3NmNmZGEsIDB4MmU2ZGU3MWYsIDB4ZmI0NzYzYzQsCisJMHhiYzEyYzdkOCwgMHgzYzU1NzZjOSwgMHhiM2ZmNGY0MiwgMHhlMDA0YWU3MSwgMHg3ZjdjZTViZiwgMHg1OWMyZjU3ZCwKKwkweDBjYjA2ZmI4LCAweGY5MGU5ZjM4LCAweGVlOWNkOTYxLCAweGIzOGYzYjJlLCAweGRjZjdkOTVhLCAweDAwZjRkNmU1LAorCTB4NDU2YmE5ZTgsIDB4ZDllNjBiOWYsIDB4ZmVmOWM2ZjYsIDB4NmI3ZTQ3MTAsIDB4YjdkYzExZTAsIDB4OGViZGY5MDUsCisJMHg1ZTQ1ZmNmYiwgMHg2NWZhYmU3NSwgMHg1ZjY3ZTY3NiwgMHgwM2EzNDk3ZCwgMHg4Y2Q3MWRmNiwgMHg2NzdlMGJmYywKKwkweGVlYzhkYTdlLCAweDZkMTk2YjRkLCAweDRmYjlmOGQyLCAweDAzMmVmMmRhLCAweGQxNDk0YWY4LCAweGNlN2U4MjI3LAorCTB4MjBlYmIxMWUsIDB4ZWM4ZWZiZDgsIDB4NzgwZWQ0NDQsIDB4ZTQwM2IwMDQsIDB4M2M1NGZlZmMsIDB4ZWRkZmFhMDcsCisJMHgwYjY1ZDg4MCwgMHg3NGZkNmVmZiwgMHg5ZGVhNjM3ZCwgMHhmMGRkMmNiNCwgMHhiN2VjMDcxNywgMHhjZmNjZWRiMiwKKwkweGMyNmM2ZDNiLCAweDVlNGE3NDdiLCAweDA3OWVmMTE1LCAweDZkZWE2ZTNhLCAweDlmYWU1ZjEwLCAweDFiMTBmNTk1LAorCTB4MDc2ZDRlMjYsIDB4NDNhZmJmMDksIDB4OGNhZjA3ZjEsIDB4MmVkYzAzOTMsIDB4YmM0ZDcxMmEsIDB4YmQ1YzYzZGYsCisJMHhkYTM4YjFlOCwgMHhmN2E3ODVmYiwgMHgwZjllM2U2NiwgMHgxYjkyMjE3NCwgMHhkOTIzMjVkZCwgMHgzZjIyN2U4NSwKKwkweDVkYmZhMWU3LCAweDBlZjBhZjcwLCAweGZlYmQ3OTVlLCAweDQwYWYxYmYzLCAweDQyNzZhMjY2LCAweGQ3YzkzZjAwLAorCTB4OThlZjA1ODUsIDB4YjdmYzU2M2UsIDB4ZTM2YjVmNzEsIDB4NTI3ZjdhOTcsIDB4ODNlMzNiYjEsIDB4MjBmNDk3NDMsCisJMHg4ZGQ3MTc4MCwgMHg1ZWMyMWRmOCwgMHhlOTRkZTYyMywgMHhmMGJjY2RmZCwgMHhjYWZjMGVjNCwgMHgzNjNmOTE0NywKKwkweDAyYjFmN2Q2LCAweDE5ZDk4NzNkLCAweDdmZDc5NjVmLCAweDk0YWVmNzhlLCAweGI4MzRkMDkxLCAweDVlYWNhNmZmLAorCTB4ZjdjODg2NzQsIDB4NmYyNWU5ZTksIDB4NmFjMWRmYzMsIDB4ZTAyZTRhMGIsIDB4ZWVlMGI2ZGYsIDB4NmY1MDIxYjgsCisJMHg1NjFlMzExMCwgMHg2NWY2NGVmZSwgMHg0MWFkNjdjMCwgMHgyOTFmZWYwOSwgMHgwMWNjN2VkZiwgMHhmM2IxNDBmYSwKKwkweDJmNzY0MWFkLCAweDA4ZjA1YjQ5LCAweGI2ZTA1NzNlLCAweDA2NWYyNDM2LCAweDgxODM2N2Y2LCAweGVkNzczZmVkLAorCTB4ZmEwYWQ2ZjksIDB4NjdmM2Y1ZTEsIDB4YWJkZjcxOTMsIDB4ZmY5ZDY5ZDgsIDB4NzM3N2M0YWIsIDB4YmUyNDYyZWQsCisJMHg4OTZmZjZhYiwgMHhmMjAwN2Q5OCwgMHgyNDEyZjJhNywgMHg3ZjUxMGEyMiwgMHhmZTlkOWRiNSwgMHg5M2IxMmM4OCwKKwkweDgyM2FmNmY2LCAweDgyMzFlMjdmLCAweDc3ZWRlYjljLCAweGZiM2FkZjA0LCAweGZiOWQ4OGZkLCAweDMwYzhiZDhmLAorCTB4ZTFhZmM3YjgsIDB4ZmM3Y2YyN2MsIDB4NzU2ODMzZWUsIDB4MGNmOGMyMmUsIDB4NzZkYTRmZjMsIDB4MTRkOGZhN2QsCisJMHg2NDRmYmU3OCwgMHgxNzlmZmRkZiwgMHhkOGRmZWY5MSwgMHhiMzc3YmYzMSwgMHgyYWY3OGQ0ZCwgMHg2ZWI5ZDdhNCwKKwkweGQxYjc1YTY3LCAweGM3NzZlN2ZlLCAweGQxYjU3OGIzLCAweGJiZmE5OTdkLCAweDAwZmY2ODgzLCAweDNiYTg1N2M3LAorCTB4YmI5MmY3M2IsIDB4M2YzYjdkYzMsIDB4YjcwY2ZmZGEsIDB4NDVlYWZmYmIsIDB4YjhkMmY3OTAsIDB4YzM1MDQ0ZjAsCisJMHg5OTBlNmJmZCwgMHhiMzBjNWY0MCwgMHg3YTYyNWY3YiwgMHg3YTBhY2VhMCwgMHg3YmUzMjY0MCwgMHg1MTZlM2ExMCwKKwkweGZjMGYxOTNjLCAweDRlMjRhZTE1LCAweDc1N2JjM2M4LCAweDc0MDBjMWFmLCAweDAzMzZiMTE5LCAweGYxZDY2NGYzLAorCTB4NzU3OWMxNzMsIDB4OTUwY2E2ZDUsIDB4Y2ZjNzk5N2UsIDB4NzI0YTRlOTUsIDB4ZjllYTkyN2EsIDB4MDNkMzA3NzAsCisJMHgzZjE3NzcyNywgMHgwM2YyZmE4NywgMHhjMzE3ZTkzMywgMHg5ODNiMjYzZSwgMHg5MjY0ZGJiZCwgMHg3ZTg3YWNhNywKKwkweGVmYjgwZDg3LCAweGViNjdiNWQ4LCAweDZlMGZiODFlLCAweDUwZDc0MWRlLCAweDQxYTczN2IwLCAweDg2YmMyODFlLAorCTB4MjBhYWViN2QsIDB4MjNlMWI2Y2YsIDB4YmY1NDE2YjAsIDB4MGQxMDI5YWYsIDB4YzQ2ZGRjNzQsIDB4MDc2NGUyYzUsCisJMHg4ZGZmYjgwYywgMHgyNzg5MTdjNCwgMHgyOWY5ZDYxOSwgMHhmNmRiYmZkNywgMHg1MGU3MzQxYSwgMHhhNDNkZjhkYiwKKwkweDM5ZDlkYTFmLCAweDhiM2I3ZWQ0LCAweDNiZGM2ZDUzLCAweDk0NGVmOTNlLCAweGQwMDFkZjQzLCAweDliNDdlNWZmLAorCTB4NjhhZTFjYWIsIDB4OTdmMTRkNWMsIDB4MzhkODFjYzYsIDB4ZTdmZDMwNjUsIDB4MTM4MzE2OTgsIDB4YjAzYWVkYzgsCisJMHhiYWY1ODQ1YSwgMHgyNWRiNTI0ZSwgMHgxM2ZlNzY5MCwgMHgxYTg5Zjc4NSwgMHgwNjE2YjZkZSwgMHgwZGUzY2U4ZiwKKwkweGZmMDU1MzkwLCAweDNjM2YwMmQ0LCAweDM1YjdkNjg4LCAweGJmMjA5MzE5LCAweGIyYmZjMTRhLCAweDU3N2M2NTBlLAorCTB4YjJhY2YxMWQsIDB4MzY3OTI4YTEsIDB4NTc3YzRmN2UsIDB4Yjg3Y2Y3YjksIDB4YTBmNzI4OTMsIDB4YjZjZTVmMjMsCisJMHgzZjE5NWE3YiwgMHgzZjUwZTljOCwgMHhmZDFlM2JiOSwgMHg5ZWRjNGQ5MiwgMHhkZTgyYjQ5MSwgMHg0ZTg1M2Y4MCwKKwkweDdmNjYwZTA5LCAweDM0NzRmOTk0LCAweGJmYTczYzdlLCAweGJlNTBmZTUyLCAweDY0YjkyNzVlLCAweDFmN2UxYmU0LAorCTB4YzUwZTRiYTAsIDB4YWUzYzgxZjUsIDB4NzdmODNlODYsIDB4YWU3OTU0NWEsIDB4NDdjMDBlZjEsIDB4ZDQ3ZTM2OGIsCisJMHhjMDMwNmNkMCwgMHhkYjY1NThmNywgMHg2NmJjNDQ4NSwgMHg2ZGZlOTNhNCwgMHg3NThjY2Y4NCwgMHgwNzBkN2ZjOCwKKwkweDcxNzFjYTA5LCAweGJlMmM1ZGVkLCAweGY4M2Q0MjQ3LCAweDVlNzg1OGJkLCAweGNmYzNmMjBkLCAweGI0MDliYmFkLAorCTB4YjU1YzEzMWMsIDB4MzdlMjA3YjgsIDB4OGFiOTAwZTQsIDB4MGRjYTg5ZTIsIDB4MjZkNTE1OTQsIDB4Zjc3OWQ3ZTAsCisJMHgzZjJlNzJiMCwgMHhkMmI3OWRmZiwgMHg1ODU5ZjI4NywgMHhmYWZiZjJjMywgMHg3Y2Q4MzIzYSwgMHg0MzEyYmYzOCwKKwkweGZiYzg3NzdjLCAweDdmZGI4ZTc4LCAweDAyMmZkZTY1LCAweGE5ZmFkMmRmLCAweDYxMWJjN2ZhLCAweDk3NWZjYTVjLAorCTB4ZGVlZTIwM2EsIDB4MzA1M2U4ZjAsIDB4NGY1Zjg1NWQsIDB4NGUxMDkxYWQsIDB4N2NmNmJjNTEsIDB4ZDc0ZTcyZmMsCisJMHg3ZTMwMGY1NywgMHgxYTQ2YjMxZiwgMHg4ZDMxZjcwZiwgMHhlMjEzODk5MSwgMHhhY2Q2ZGJjNSwgMHg2ZjdmNDExNSwKKwkweDYwY2U3ZTAzLCAweGZkNzYwZTcyLCAweGFjODdlZWU0LCAweDc3M2IwNGJmLCAweDJlMjA0MGM4LCAweDhhNDRjOWJkLAorCTB4NjJlNGE4MzYsIDB4MzRkN2FhZDcsIDB4NWI1YzViZjIsIDB4ZGZlMzA1MzksIDB4ZTgwMjQ5Y2QsIDB4MTU2ZTQ1NzksCisJMHhiOTMyNmZiYywgMHg1ZmZjYTMyNywgMHgwOWZmOTNhYiwgMHgwZTM5ZmRlYywgMHhiOWM3OTc0NiwgMHg4OTNlM2ZmYywKKwkweDk0N2QzZmNhLCAweDAwNTEyNmI4LCAweGIxNGM5YjM4LCAweGY2OWFlOWVmLCAweGEyMmZmOTIzLCAweGQzYjY4ZjU3LAorCTB4NmMxY2QzYWIsIDB4NDNlOGVmNWYsIDB4ZTZiYjJmYzcsIDB4MjNlYmVlMmMsIDB4ZjM3Y2UzZjMsIDB4NmY4NTA0ZjgsCisJMHg3ZmMwMDQzMiwgMHg1ZjYwYTUzNSwgMHgyYmM1MTdjMCwgMHhhZmZhMzNmMCwgMHgzMjczNmZhMCwgMHhmNmExYmVmMSwKKwkweDM5NDhiOGZjLCAweDZkYzhkMzk3LCAweGYyMjlhZjU0LCAweDdhMDIyYmViLCAweDU4YTg0ZDY3LCAweDcyNzY3ZTBjLAorCTB4N2E3YzhjYmUsIDB4NGVmNWYwNGEsIDB4MTRlZDc2YTIsIDB4YmQwYzczYzgsIDB4ZjRjMWQxMzAsIDB4YTdjOTM5YzgsCisJMHhmZGJjYWZiOSwgMHhlMDc3NDgzYywgMHg2M2JhMjJlYiwgMHgxYTkxNzU4MywgMHg1MWY0MDljMSwgMHg2YzM1NWRkYSwKKwkweGMzOTRiMTVmLCAweGY1MmI5ZTUzLCAweDJmZjc4ZDFmLCAweDk3ODNjNWRhLCAweDMzM2Q5ODNhLCAweDdmYjA1NmMxLAorCTB4MjIzM2Q5ODAsIDB4MjBiOTQ3OGMsIDB4ODNiYmFiODYsIDB4NzZhM2NkYmMsIDB4MWQ5NTU2ZWMsIDB4MjM1NTI1M2IsCisJMHhmODc4MmFiZiwgMHg3M2Y3ZTczNSwgMHg1N2RkNmM4OSwgMHg4Mjk2NzlmMSwgMHg2NzNhYTdlZiwgMHhhMzA0MWJhMiwKKwkweDE0NWFlNGMwLCAweDAwOGJiYzk4LCAweGIxZWVkNGZmLCAweGFmZWY5MTkzLCAweGYzZjdjZDg5LCAweGZlNDJhZmQ3LAorCTB4YzRlNDljNGMsIDB4MzcxZTQ4ZWYsIDB4ODM4OTJkYmEsIDB4MDBlM2U5NjIsIDB4ZmVkNmJiOTYsIDB4YzA1OWY3MDYsCisJMHgxZGY3MjBjNywgMHhjODExNDFjOSwgMHhmZmMxODkwMSwgMHgyYWZmY2EwMSwgMHg0MDdjMjlmYSwgMHg4NzQ1ZTJmOSwKKwkweGY5ZTg0ZjRhLCAweDUzZGYzOTQyLCAweDc3NDliMmYwLCAweGViOGU3ODNlLCAweGJhNWU0NmY5LCAweDUxNTNjODNhLAorCTB4ZTlhM2YzZDYsIDB4Y2U4ZWQyZGMsIDB4NDczYTMwNmYsIDB4YWRlODBiZTUsIDB4ODFkZjg5ZTgsIDB4MmM3NGE1OWMsCisJMHg5YzEyZmQ2NywgMHg4ZmFhOWYzOCwgMHg0ODVlNjE2NywgMHhhYTI3M2YzNSwgMHhmMzI5ZTNlMywgMHg0MmY1YzAzZSwKKwkweDM1M2NlNzQ3LCAweDFjNWZkZjU2LCAweGQ3NDhmM2JhLCAweGU0N2YyOGEwLCAweGMxNzZiZjcxLCAweGIzOWUzMzVhLAorCTB4OWU0YzIwNmYsIDB4MDFmMTVkZTUsIDB4NGU5ZTc3ZjUsIDB4Mjk0Yzc1MjMsIDB4M2U4MDhmYWEsIDB4Mzg1Njg5MWYsCisJMHg0MmQ3NzUwNCwgMHhjNzRiZTkxMywgMHhiMDUxOTczZCwgMHg3ZTZkZjIwYiwgMHgwZmU3MjRkNiwgMHg2MGQ4ZWJhNiwKKwkweDgzNWVhNzkyLCAweDY0ZjcwMWZiLCAweGRmMzkzZjgwLCAweDZmNzg4NGUwLCAweDQwMjljN2EyLCAweDAzNDMwMjNjLAorCTB4ZDhmYjg3MjAsIDB4YjhmYmMzMzgsIDB4YWI3ZGMzMmYsIDB4ZjQxYzNkY2IsIDB4MmY0ZTY5YzEsIDB4MWUwYWJlODUsCisJMHgxZDc3YjIzYSwgMHgwMjVmYjVkMSwgMHhlZGUzYTczZiwgMHgyNmYyM2Q3YSwgMHgzOGU3OWI5NywgMHg0N2FlMmYxZSwKKwkweGM5ZTQxMTY0LCAweDQ0OGI3YzQxLCAweGQzMzY3Zjk4LCAweDkyM2QxMTgzLCAweGQwMWNmMDRkLCAweDllNTVjN2MxLAorCTB4NTA5ZmY1MmIsIDB4NTIxMjM4OGYsIDB4NzQ2NDdhNTQsIDB4NDIzZDRjNzMsIDB4M2ZlNTMxN2YsIDB4ZjQxY2NkNjUsCisJMHhkOGMxYzk2NywgMHgwMjdhNmNmZSwgMHg2MDI5YzdiMywgMHgxNGJmNjk0NywgMHhkMzNkZmQ5OSwgMHg1MDNlZGNkMywKKwkweGM1N2NjNDhlLCAweDhjNjYzNWVhLCAweGM4N2EyYmUzLCAweDg3OGM5NTMxLCAweDAwZWFjZmJmLCAweGE2YmQwYmJiLAorCTB4MDk1ZTBlZmEsIDB4MjY2OWIzZTcsIDB4OWYxNzljMTcsIDB4Zjc0OGMyOTIsIDB4NWNjMzc0NTMsIDB4MTVlMWZjOGQsCisJMHhmNDMxZGU4MCwgMHg4NWY4ODExMSwgMHgyYzllZDdmYywgMHg1MTA2MmVmZSwgMHgxMWU0MTY0ZSwgMHhkNmJiYTNiNCwKKwkweDJhYmU0MjhlLCAweDgwMTRjZmNhLCAweDEzNmI4YjZmLCAweDlhNGY2ODA1LCAweGJlODAzNGUwLCAweDZhMzFkNjUyLAorCTB4NDlmYzg4YTEsIDB4ODI0NDYwZTUsIDB4ZTRhMzFlOGEsIDB4ZDVmMDExMGEsIDB4MjY5N2Q5M2IsIDB4ZDZmZGQyMjUsCisJMHg0Y2ZkNTdhZiwgMHhkMGYxYmYxZCwgMHg2OGI0OGFmYSwgMHgxZmQ2ODZmYywgMHg3Y2ViNzViNCwgMHgyMTM3MjZmYywKKwkweDNmZTQyMGYwLCAweGU0ZjBlYWRjLCAweDU2MzViOGMwLCAweDU5OTQyZTZmLCAweGNlMzAyYjVkLCAweDg4YmNkOWRiLAorCTB4ZTUyZmNiMWYsIDB4MGU0NDRlM2MsIDB4Y2VjYjhiYjQsIDB4NWM2MTc1YWMsIDB4YTdjYzFhNzYsIDB4YTdmMWZiYWMsCisJMHg3M2RlMWMwMCwgMHg2NmVmZDMxMSwgMHhmNWMyZThmMywgMHgyMDg4ZjkwMiwgMHgyYjc4YmEzZCwgMHgyODk3ODg0NCwKKwkweDM4NGVlNzdhLCAweGY2YTE0NTk0LCAweGExYWU3MDA4LCAweDJkZTgxYmM4LCAweDNjOTVhN2YwLCAweGQ5NWI4ODA4LAorCTB4NDAxZjZlMzEsIDB4YzI3YTgyM2UsIDB4NWEzZWE4YjAsIDB4Nzk4ODZmOTEsIDB4MDRjMmYxNWYsIDB4OWZhYTRmZGIsCisJMHg5YmVmZjA0OSwgMHg0NzdjYTk3ZiwgMHgyZDNjYTIyOCwgMHhlYmU5NTA0YywgMHhhNzBmZjNjNywgMHg3NjA4ZjNiMiwKKwkweDdjZGRkZmFmLCAweGI5MTZlNzhjLCAweDRiYTAzNGZmLCAweGExODY3ZWY0LCAweGY5MGM5MzY2LCAweDVjNDNjNGE2LAorCTB4YjFmZTU1NGUsIDB4NzY0MjE0MTAsIDB4NTZmZDYzYzgsIDB4ODc0YTFlMjAsIDB4MmM0NTZmYjYsIDB4ZGUzZmZiOWYsCisJMHhjZmUwMTk0OSwgMHhkNGRjMTgzNywgMHgwYmZjODIzMywgMHg2Zjc3MDc5NCwgMHhkNGE3ZGY4MiwgMHg3MzEyN2JmMSwKKwkweDA5MWU2ZDFhLCAweDFjNDIxZGUyLCAweGEzZGE4ZWZmLCAweDFkMThlNzNkLCAweGRiNGY1ZjRlLCAweGY4Y2QwNzE3LAorCTB4NzJkYWZkYjcsIDB4ZTBhZmJmOTQsIDB4MTU5OGVmYzYsIDB4ZTc3OTBlZmMsIDB4ZDc5ODgxZjEsIDB4ODM3NmFjNjksCisJMHgzMGI2YWQ5YywgMHgyYzJkYWJmOCwgMHhhMmRhYjc2ZSwgMHgwMDRhZTdiYywgMHg3OWQxZGRiYiwgMHgxZWMyZjY3YiwKKwkweGUyNTNmZjE4LCAweDkwZTFkOThkLCAweDBjYzlmODA4LCAweGM5MmMwY2JiLCAweDBjNjc4ZDhkLCAweDcyYjc1YzEzLAorCTB4ZjFjNzVmMGUsIDB4NDZlZjY5YmYsIDB4ZDY3OWVjMTEsIDB4YjBjNWVhODQsIDB4Zjc2M2Q5ZWYsIDB4NmJmYTAwYmQsCisJMHhkZmQ2YjY2YywgMHhmM2YwMjExYiwgMHhmNzA0YzllMSwgMHgyNDljOGE0YiwgMHhlMDlkOTMzNywgMHg2YzFlMjRkYSwKKwkweDFhMGE4MGY2LCAweDEzYjNkMjdiLCAweDVlMDk5NWY2LCAweDU1M2MwMDIyLCAweDgwMDZjZmZlLCAweDg0NzhiYTRiLAorCTB4ZGZjMGJhNmIsIDB4ZmI3ZmU1ZWIsIDB4YjRkOWMzOTAsIDB4NzIwMGJjNzcsIDB4ODI2OWE1ZGYsIDB4OWVkNDFhZTAsCisJMHhmZWMyNTdjZiwgMHg1M2NiMDQ3YiwgMHhmYjJhZmEwMSwgMHg1ZTJmZGVjMiwgMHhhNWYwMDEzYSwgMHhmYWUyNmZmNCwKKwkweDJmOWYwYWZjLCAweDc0YzY0MjE3LCAweDc3MTgyMTNkLCAweDIzNDBmNGNjLCAweGFhMzU0OTVjLCAweGI5MzQ2ZTQ4LAorCTB4NDc5OWViNTQsIDB4NjY4ZjVlMTAsIDB4ZWRkMWQ3MTksIDB4Y2EwNzJmYTAsIDB4MWM0NGI2NjMsIDB4MTBjOWVjNzcsCisJMHhhZDc0YjdlNiwgMHg0M2Y2OTAyMCwgMHg0MDFkMzU3YSwgMHg0NTU3YWEzZiwgMHhkY2Y0MDA5MywgMHg5YzBkZjdiNCwKKwkweDVkYTZjZjZmLCAweGI1ZjJlNGFjLCAweGNhMDVmYjkxLCAweDk4ZDk4ZWJjLCAweGNmYzYzY2RkLCAweDMzNGVhYmE5LAorCTB4YzEyMDc5YmIsIDB4Y2E0YmY5ODcsIDB4N2M3MmFhM2EsIDB4ZmUxNDE1NjksIDB4MTljYmM4NGEsIDB4Y2U1ZTcxZDEsCisJMHhiMjkzMDQ5MSwgMHhkNjA4ZmZkZiwgMHg3OWJkM2U1NywgMHgzZWEwZjAwZiwgMHhlZmJhOTA3ZSwgMHg3NTIzZDIzMCwKKwkweGFmOTZkYjIxLCAweDAwNDBiN2RjLCAweDQ2NzJiMTdkLCAweGEyODFmOGVjLCAweGY4ZjI1NjM3LCAweGU1ZmYyYWFiLAorCTB4NGY0ZjVhOTQsIDB4NjZiMjQ4MjksIDB4ZjI5MmY0YWEsIDB4ZmNkMTUzZGUsIDB4ZmYzYzRkOTcsIDB4N2JjZDAzZTUsCisJMHg4MDVhOTc4MywgMHg3OWIyZWU5ZiwgMHhlNTczYzBjZSwgMHhlM2FkMGJlZiwgMHhkOTQ3Yjc3ZiwgMHhiYWY4MmFjZiwKKwkweDgwZmNjOWMyLCAweDFmZDcwOTAzLCAweGMwMjQ3MzgzLCAweGYxZjI5MzkzLCAweDNjZWM0YjNhLCAweDA2OWRjYmYyLAorCTB4N2UzMDc3ZWUsIDB4NWY4YzRkMjEsIDB4ZmY2YTFkNjAsIDB4YjAwMWJmZWIsIDB4MDBkNzQzMmYsIDB4MDAwMGQ3NDMsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHhjOTMzMjY2NiwKKwkweGU0Y2M5OTI0LCAweDQwMjc1ZTQ5LCAweDIxYzQwYTMwLCAweGViMTQxMDIxLCAweGVmMGMwMTI0LCAweDAyNDE1MDQxLAorCTB4ODA0MjEyMGMsIDB4MmE5NDEzMjQsIDB4ODA2NWJkNmQsIDB4OGQ1MjAzMTgsIDB4OGJkNGI0NWUsIDB4ZDdhNTc4M2EsCisJMHgyOTQxYjYyMiwgMHg4NGVjMWE4NiwgMHgzYTBiYzE1NywgMHg5NGI2MmEyOCwgMHhhYTU0MTQxYiwgMHhhNWFjNDA5MCwKKwkweGQ3Zjk3Yjk2LCAweDY2MWY3YjVhLCAweDk2MjI2NGNlLCAweGJmZWZiZjYyLCAweDc2N2U5ZmZmLCAweDY3ZDljZmIzLAorCTB4ZmJkN2I1OWYsIDB4NjQ5ZWNmYjEsIDB4MTI1OGM0YWIsIDB4ZGQzYjM3NjMsIDB4ZDhjNjdhNjUsIDB4YzFiNzU4YmUsCisJMHg4OGQ4YzQ1YSwgMHg1OTZlZGY2MiwgMHhiOTc4NmM2MSwgMHhkYTFlYjc3NywgMHgzYmJmNTY0YywgMHg5NDA2MTEzNiwKKwkweDY4MjZjNzMzLCAweDNkYWMxZGVjLCAweGEzODRkYTBlLCAweGI4MzhjZTFkLCAweGEzNmFkZmRmLCAweGFjZmE2ZTc5LAorCTB4OGMyZGI5OGIsIDB4YWI5ODk1MGQsIDB4OTc2MzEwNjUsIDB4NjBkNmVmZjAsIDB4MzFkNTZhOWIsIDB4MDYyN2YzMDYsCisJMHhlMzA2MjU0YSwgMHg2Y2I4YzQzNiwgMHhlOTYxYmVmOCwgMHg0MDAxYjJmNSwgMHhmMWQ2NjQ0OSwgMHgwMzYzMWZhYywKKwkweDJiOGQwYWFkLCAweDk2ZWU3NjJjLCAweGE3NTYzZGUxLCAweDhiNzljNjRiLCAweDllZjRhYzYzLCAweDZhNzcxY2M2LAorCTB4MWQzZTdmM2QsIDB4NGU4OTY3OWYsIDB4MzdjMDIyNjksIDB4NWIxOGJmZWMsIDB4ZmI2ZGRkMDMsIDB4MTA2NTI1NGIsCisJMHg2ZjE0NjdiZSwgMHhjMGI2NzMxOSwgMHgwNTYwNTdmOCwgMHgxMTU5NzBhMSwgMHg5ZjdjMjQ5ZSwgMHgzOWViZWY0NCwKKwkweDRhY2YzYmJmLCAweDEyOWNlYWYwLCAweGE4ZmMzMjRjLCAweGU4NjBjN2M1LCAweDMyZjVhNWYwLCAweDAyYzg5ZmMyLAorCTB4NmQwMDAzMTIsIDB4MjMxMmQ2ZDUsIDB4YzZiZDM3YmMsIDB4ZmU2MWI5MjEsIDB4Zjk1YzYyOWIsIDB4MGU2MzVjZjgsCisJMHg2ZDBhMWM1YywgMHgwYWI3Y2U4OSwgMHhlNzEwM2I5ZSwgMHhmOTgxNjUzYywgMHhmNjY4YmYxNywgMHhmYTMxMzQ5ZSwKKwkweGQ1ZmYwNGJiLCAweGZhNjgyNGI2LCAweGVmMzRkNjllLCAweDdmNjBiY2M5LCAweDBkMjNmZTMxLCAweDRjY2ZkYmZlLAorCTB4MzU2MzE4NmMsIDB4NDA3YjE2ZmMsIDB4ZWY4Y2RmNzYsIDB4M2M3NTM1YTksIDB4NzVmYTE3M2EsIDB4YzhjYWY4YmYsCisJMHhhZTBhNDk2MCwgMHg2NTc4ZTAxNywgMHgzZGNjNDE3ZiwgMHhhNzdhZTA5NiwgMHg5OTc3YTRmNSwgMHhiZDI3YTkzNSwKKwkweGRlODI0YTg3LCAweDRhZGU4MTYzLCAweGIyOWY3YTRmLCAweDNiN2EwODI0LCAweGZhYzEwN2RiLCAweGMyNGM1ZGUyLAorCTB4MTM1ZjAxZTcsIDB4ODVkYzNkMzksIDB4Yjc4OGMxYWUsIDB4MzgwMzMyYTUsIDB4NTg3YTQ1NWUsIDB4NTM4ZjRjYWUsCisJMHhhNzFmY2UxNiwgMHgyYTFlOWMyYywgMHgzOGM2ZTYxZCwgMHg3NWQyYjRlZiwgMHg5NmY1ZWY0NiwgMHhiZWJjM2NiMiwKKwkweGRjYWU4Mjc2LCAweDE2Y2Y4MTE3LCAweGVlMzQyZDU5LCAweDA1ZmNmMWFhLCAweDk5ZTI4N2QzLCAweGZiNmRmZGI1LAorCTB4YzFlZmExMGYsIDB4Zjc4NGNiN2YsIDB4YzAzNzg4NDUsIDB4NTgzZjVjN2IsIDB4Zjg0ZWJmZjcsIDB4NTNmOTE5MjgsCisJMHgyMDNhZWE2NywgMHhkYjZhM2UwMSwgMHgyNTg2NDU2NCwgMHg5Yzk1NGMwYywgMHg1YjE5MGIyNywgMHg4OWNkYTBmNSwKKwkweDhiNWNmMDdjLCAweGYxODI4OGU0LCAweDZiMTRjOWNjLCAweDIyNTY0MzMyLCAweDc1ZmQ5ZDYyLCAweDExYmIzZTdjLAorCTB4ODM2MGI4NWEsIDB4YTMzNGRlNzEsIDB4Y2VmMjEzNmYsIDB4OGMzM2MwMWUsIDB4MzgwODI0ZjMsIDB4MDAxZmUwMWEsCisJMHgwNTU1YTc0NywgMHgwZGY3NDljYywgMHg1NTlmZjJlYywgMHhmODUxZmI4MiwgMHg2YTRiOTgyZiwgMHg4MDk3NmY2OSwKKwkweDk5OGFhYjcwLCAweGVmNzAwMGRiLCAweDFmODk5MzZlLCAweGY2OGM2YjlmLCAweDJmZmNjMTQ1LCAweDYwN2YzOTZkLAorCTB4M2ZmYmY0MjYsIDB4YzE2NWMzYTgsIDB4MjdlYjA0ZGYsIDB4NTNhOGY4MzEsIDB4MWNhZDA0YmEsIDB4YzNkM2NhNjcsCisJMHhlZDFjODc3ZCwgMHg0YjdjNjE5MCwgMHg4YjNlNWM3NCwgMHgzNzY0YWM2NywgMHg5NTViM2YzMSwgMHg3YmMwZjMwYiwKKwkweGQzNDdiNTU2LCAweDgyZTU1NmZhLCAweDFmMTBlNDdjLCAweGQ5Zjg4NjNjLCAweDY5NjQ2YjEzLCAweGU0MWJiZDcwLAorCTB4NjcwZGM3MDYsIDB4Y2M4Y2VmMWQsIDB4YmJhOWQyMDksIDB4YmJkOWNiZjUsIDB4MTg5ZWZkNjAsIDB4MjYyN2FmM2UsCisJMHhkZTAwYzdjYiwgMHgwNzE3NWRjZSwgMHg1YjhmMWYyMCwgMHhjYTM1Y2YzNiwgMHhkOTI0ZDhjZSwgMHhhZmU5MWViZCwKKwkweGRlNjZmNzNlLCAweDZmODg3MWM3LCAweDVlMDgzMmM2LCAweDg0MWM5ZmEyLCAweGFjZGUzMmVmLCAweGFjNzJiZjFjLAorCTB4YzlkMWQ2OWUsIDB4ZWViODFkYTIsIDB4MjE5M2EzMTYsIDB4MzljN2JjOWQsIDB4YWQ3OGFiN2YsIDB4ZDlkMWJjMTMsCisJMHgwZGQ0NzQ1NiwgMHg2OGVlN2JlYiwgMHhlZjlmMDM4NiwgMHhlYjM2ZWQ2YywgMHhlMmNiN2RlMCwgMHg3NWMwYmZkZCwKKwkweDcxNWQ5OWM5LCAweGNmODg0MWFlLCAweDA2M2JlYmVlLCAweDA5N2ExZTkxLCAweGZjMWY3N2FmLCAweDc0MWVlNmQ4LAorCTB4ODZkYmViNTUsIDB4N2Q2OTVmY2YsIDB4NDlhNWJkMWUsIDB4M2ZjOWVmOGEsIDB4YjUyMDdjZTEsIDB4Y2E1NWZmYjUsCisJMHhhODYxMzkyNywgMHhjYzU5YmNiNywgMHhkZGQ2MGFiNywgMHg5MzQ4NzgzOCwgMHhjNjllODQ4YywgMHhjNjRmOTQxNCwKKwkweDBjOWZhYzJhLCAweDJhYmJkMjBjLCAweGYxMDdiNWRlLCAweDhjZDdjYWFjLCAweDg0M2VkNzc4LCAweDVlOTNkZjBiLAorCTB4OGZkY2ViNDAsIDB4ZjM0M2ZjZmQsIDB4YWJiYTBkMGEsIDB4YzhlMWU3NWEsIDB4ZmUxM2Y0ZWIsIDB4NmE3YWM1NmIsCisJMHgwY2JmMTY0ZCwgMHg4NjZkYjNmMCwgMHhmOTU0M2EyZiwgMHg1ZTEzZGJlYywgMHgwZTMxYzdhMCwgMHgxYmE4ZTNhZiwKKwkweDhiN2JmOWU5LCAweDQzZTIxNTYzLCAweDYyYmFiMDFmLCAweGY4ZTNmZTA5LCAweDM3M2M1NjNlLCAweDIxYmJkNzE1LAorCTB4ODU4ZjY5YzYsIDB4MzA1NzliZjEsIDB4YjQ1MjBmY2UsIDB4ZGM1ODc5ZTMsIDB4NjhiNjNkZDYsIDB4ZjE1NTkzZDQsCisJMHhkZjM4NTNlZSwgMHhiM2YzYmEwZCwgMHgwMmM3Njg1ZCwgMHhkYzNkZGQyZSwgMHhkNzg2N2MwZSwgMHg3YWRkZGQ2MSwKKwkweGM2NWVhMzgyLCAweGZkNjJhZmY5LCAweDcxZjMyMmU3LCAweGQ5ZmMzYTBmLCAweDU0ZTdhMjFhLCAweGY0MTQ4Y2ZjLAorCTB4NDFmODg5MWQsIDB4ZmZhNWRjODUsIDB4YzQxNGMzYTIsIDB4M2Q0YTA0OGYsIDB4M2U3M2Q2ZGQsIDB4MTBiMjNhYzYsCisJMHg5ZjFkZjZkZSwgMHhmOTgwZTgwZSwgMHg3NGY4ZGVlYSwgMHhkZDZmY2EzNiwgMHhiODg4YTI2ZiwgMHg3ZDczN2VhMywKKwkweGQ5ZjFmMjNjLCAweGM1YmQzNjEyLCAweDdlOWY1M2QyLCAweGE1ZGViY2IxLCAweDFmZmFlNjA3LCAweGNiZDI1ZjZiLAorCTB4NDQ2MDJjMzUsIDB4YjJkYjVkM2IsIDB4ZDEwZmE1YzQsIDB4ZTkzMTAwYTcsIDB4YzA4NjgzZGQsIDB4NjBmZjljMDQsCisJMHgwMDU2Y2M5MSwgMHg4NjNiNzVkZiwgMHg3YTA4YjBhNywgMHg1YWRmNmQ1YSwgMHhiOTk1NWNjZSwgMHhmNTEyZmQ4YywKKwkweDhlZDdmMjFjLCAweDk3ODRmMWExLCAweGUzZTkxYjM2LCAweDk3MDdmMWYwLCAweDE5NDZiYjU3LCAweGUwZWY5ZjdhLAorCTB4MWY3NGYzMTAsIDB4Y2MyMTNmM2MsIDB4ODEzMWI5MGYsIDB4YTIzMTk1ZGIsIDB4NDRlOTQ1MDUsIDB4OGY2Y2NmMzgsCisJMHhkMmUxNzlmNSwgMHhlMmY3ODI5OSwgMHhjY2U5ZTAxOCwgMHhiZDBiNzdiNiwgMHg1ODY3MmZjMCwgMHg1MWQ3YmVlMCwKKwkweDMwYjRiZTdlLCAweDBjMjY3YmY0LCAweDQ1NzBhZjc5LCAweDZlZGU1MDZjLCAweGJmNmJlNjI5LCAweDcxNDNiNWU1LAorCTB4YjA5ZjhjMGEsIDB4MzdhMjc3NzUsIDB4MzBiNzdmMDQsIDB4Zjk5Nzk3ZmQsIDB4Y2JkZjA3MzcsIDB4MWRmNGM3ZDcsCisJMHhlYzFlOTAwMywgMHgwYWM5ZDNmNSwgMHhlYzc2MTNiNCwgMHhhMDdjZTQ0ZCwgMHg0YmNlOTBlOCwgMHgxNWZhZGU4NSwKKwkweDljMTExYTVlLCAweDNhYjJjMjZmLCAweDYwYzJhOGQ3LCAweDk5ODJmNmJmLCAweGZhZmI0MmY5LCAweDVmNGQxMTgwLAorCTB4NWQwYjA1ZWQsIDB4MjZjNDI3YjcsIDB4YzNlOGZlOTIsIDB4ZjhmZWEwZmEsIDB4YmYwYjc4YjYsIDB4ZTBlZGUyYWUsCisJMHg2ODU5ZDM5MCwgMHgyMzlhY2ZiZiwgMHg2MmVkYzlmMywgMHg0NDYzYjc1YywgMHgxMzQ3ZmEwYSwgMHhkNmZlZmU4YywKKwkweGYzMThlMzA4LCAweDc1ZjBiOGQxLCAweGVkZGNiOWJkLCAweDNiZGI5NTFhLCAweGNjOGRlMzdjLCAweDFjYWZjOTFkLAorCTB4OWFmZGMwOWYsIDB4Nzk5OTg3NmUsIDB4ZGJlZmFlNDEsIDB4NzQzYjIwNjgsIDB4ZDMwN2UyZTgsIDB4OWY3ZTgxMGEsCisJMHg1NzU4MzA2ZSwgMHg5ZmFiM2UwMiwgMHhhZmYxOWRkOSwgMHg0ODdhYmY3MCwgMHhmZTgyNTU5NCwgMHgzZmJmOGFhNywKKwkweDY3ODJmMWYyLCAweGZiYWUxNzY0LCAweDI1ZjcwZGQzLCAweDczZjY4M2NmLCAweDgwMWFjN2UwLCAweDAzNDZjMTYzLAorCTB4ZjhkZWFmNWQsIDB4NWE3ZWJhN2QsIDB4Njc4MmU5ZjAsIDB4OWVhMjA2OTIsIDB4NGQ2N2I0M2YsIDB4ZmFiM2FlMzIsCisJMHgxM2JlMWZiZiwgMHhhMzU2YzVmNSwgMHg2ODEwZTA3NSwgMHhhZTQ4YjY2YiwgMHhiMTcyMjE1MSwgMHhhNmIzMDVlOCwKKwkweGFhYzc1NWJmLCAweGJhZWExZDcxLCAweDdjYmVlNDk5LCAweGJjNzgwMTVmLCAweGJhMGZkYzA5LCAweDhmNjVmZjZhLAorCTB4N2YwMTdmZDYsIDB4ZmRjMDliYzUsIDB4NjE1MzQ5OTUsIDB4ZGQ0NTc1ZGQsIDB4ZGVlZTI3ZTQsIDB4ZmM3NjRkMTcsCisJMHhmYzk5MTZiNywgMHhiZjkwZmYwMSwgMHhkMDhkZTdmYywgMHhiZDZmZmIyZiwgMHhjMTA4N2M4MywgMHg1ZTg1YTNlNywKKwkweGY0OGYyYzY2LCAweGY3ODk5NTUwLCAweGM5ZTg3NmNiLCAweDk1OGIyODlmLCAweGQwN2VkZjA5LCAweDA4YzhhMzEzLAorCTB4NjFhMzJkMzksIDB4ZTdkNGY3ZGMsIDB4NDZlYjkxZTQsIDB4ZjFkMWI4YzAsIDB4ZTI3ZTg2MDYsIDB4MjY4YmZjZjcsCisJMHhiN2VmZDAzMCwgMHhkNDdmZDA1ZSwgMHg1MjllYjIxMSwgMHgyM2EzZDRlNiwgMHg5YTBjYzI1MiwgMHhlM2EzYWJlYiwKKwkweDA4ZmY0NzllLCAweDFlYTNkMzI2LCAweGVmNjkzMzJmLCAweGVlM2ZlZThmLCAweGQxYmJkYTM0LCAweDU1NzVlZDU2LAorCTB4Mzk0MzllN2UsIDB4ODM5NDE4MTgsIDB4ZjRmZWZiZGQsIDB4Njc1ODc4YzQsIDB4ZmI5OTQxZDUsIDB4MzNkMDU3NjMsCisJMHg3MmJhZTE2ZiwgMHg1NjZmZGU5MSwgMHgwZWU3ODE2YywgMHhiYTFjZWMwOSwgMHgxYTQzNjlmOCwgMHhjNGIxNTdmMiwKKwkweGQzZmY0MjU2LCAweDkxZTU1MThiLCAweGQ1NDYyMmU0LCAweDljZTgwYzM3LCAweDQ0ZjNhNDE3LCAweDdkY2JjMmM3LAorCTB4YzVjOThiMTQsIDB4MTFmNzJlNGIsIDB4ZWZhZjZmZmUsIDB4ZWYyZTU5YmUsIDB4ZmJkMjMwNGUsIDB4Yjg2MWY1YzMsCisJMHhmYTU3N2NmYywgMHhiZDkwYzI3MCwgMHg2YTU4ZGU1OSwgMHgxN2VkOGU3ZiwgMHgwOTllYjk1YiwgMHhmYWUxOGZkNywKKwkweDFjMmI4NTRmLCAweGIyMGJkYWRlLCAweDRmOGRlZjQ2LCAweDUwNWM2ODUwLCAweGZlZTkxOWZmLCAweDNlYjM4YzM1LAorCTB4NjcxMDg4NGIsIDB4N2MyNjdkODEsIDB4MjllOTg3NzksIDB4ZTFmZjAzYmUsIDB4NjQxYjhlMGMsIDB4MDAyNWVjNTEsCisJMHg2ZmI1ODM1MiwgMHgyNWY1ZWEwYywgMHg1ZTE3NzcxNiwgMHg4NmU5N2VjZiwgMHgwYzE3ZTg1MSwgMHg0M2FjZDJkYywKKwkweDcxMjlkMWZkLCAweDg4MzY2ZDdhLCAweDgyODNmYjE2LCAweDA0NWZkMDcxLCAweGZhMTMxY2RmLCAweDUzYTBlMjAwLAorCTB4MmVmYjY4MTYsIDB4YzMxZjYzMmIsIDB4Y2M0Y2EyZmEsIDB4YmIyMDJlNmIsIDB4MDQxNDM1ZWYsIDB4N2UwMjNmZTcsCisJMHg4ZDk5YzYwYywgMHg5ZmM3OGMyNSwgMHhlYmZmZGMwOSwgMHhhY2U4YTc5YiwgMHhjYmMzZmYzMCwgMHhjMDkzY2VhZCwKKwkweGE3OTdhYmNmLCAweGYyZjJjYjUyLCAweGZiYmY0ODc0LCAweDZmZDA2ZTA0LCAweGJiYmNlN2M0LCAweGE3NWQ2OWEyLAorCTB4Y2EzZTU3MjQsIDB4YmUwMmMzZTUsIDB4NjJkYzdhNzAsIDB4MzVkYmY5NTMsIDB4OWEyZmQ0MjAsIDB4NWY1OTFhNWYsCisJMHhkM2QzNmY1ZiwgMHg2NmE3OTJmOCwgMHg3MWRmYTE2NCwgMHgyY2VlZmRhYSwgMHgwMGE3YTNkNCwgMHg0MWRhMDBkZSwKKwkweDliZmUyM2JkLCAweDg0Yzc4NWZjLCAweGVjMjIzZTNjLCAweDI3ODhiYzQ1LCAweDA0ZTQyMjdmLCAweGQ1YjljN2Q4LAorCTB4ZDE3NGViODIsIDB4YTdjYmQ1ZmQsIDB4ZjJmOGZiNTMsIDB4YzYzZjc0NjUsIDB4MTJmYzQzOTYsIDB4NDA5NWUyMzcsCisJMHhjOWRmYTA1ZiwgMHg4M2Q5MzJiNSwgMHg4MGQ3NDZmOSwgMHg0OWVmNzgwNCwgMHhkMmUyOGU5MywgMHhlNTJkZWI4ZiwKKwkweDlkNzgyY2RiLCAweGZmMzM3YzUxLCAweDUwOWJmMWE5LCAweGI1Y2IyZTJlLCAweGViNmY0NzU4LCAweDc1NzZjNWJjLAorCTB4NzU5NmJjN2EsIDB4YmE1ZGExYzQsIDB4MDBjNzhmY2MsIDB4N2U0MWM5M2IsIDB4NmZiYjJmOWMsIDB4M2M2MTE1YjIsCisJMHhlMzhjOTFkMywgMHhjMDYwNTIzYywgMHhiYTA2MGExNiwgMHhhYTNmNTBiMiwgMHhlMmQ1N2ZlZiwgMHg4NDk2YzViYywKKwkweDg4MWIwZWYxLCAweGNkMTJkMTcyLCAweDljMzg0ZWVkLCAweDFlZmQwNWEzLCAweGJlMDhhZTVlLCAweDg4ZDZhM2M4LAorCTB4ZGRjNjI0YmUsIDB4ZTgyMmFmNjgsIDB4YjllMjcxOTUsIDB4MzhlNzE2MTMsIDB4NDJkZmQxMWIsIDB4MDNhZDI3N2UsCisJMHgzOGVlZTVmOCwgMHgwZWJjNDRlNywgMHg2YzY0YzM3MSwgMHgzY2YwYTU4NywgMHg1NThiMjljZiwgMHhlMjUzOGJmMCwKKwkweDlhNmJiOTdlLCAweGE3MWU0MjJkLCAweDM4NDFiY2I3LCAweDNjNmQ2NzFjLCAweDRmOWUxMzhmLCAweDlmMzU1YjUwLAorCTB4ZTdhYzQ3MzAsIDB4MjZhYjA0YWIsIDB4MzBiNGEzY2YsIDB4NDIzY2E0NjcsIDB4ZTM0OGNkOWIsIDB4Mzk0ZTlkNTIsCisJMHhlZTVkZTk0NiwgMHhmMjNmYmE4NiwgMHg5OTJmOThjYSwgMHg0ZTI4MWNjZSwgMHhkYTViMjMyOSwgMHgzNjkyOGYzMSwKKwkweGYzMDJiN2NhLCAweGUxMDk4ZDJjLCAweDYzMzVlODcyLCAweDViYWZhNTdlLCAweDcxODVlYzk3LCAweDg5NzcwMWM5LAorCTB4MWVkOGUwMTEsIDB4YTVmMDRjOWYsIDB4NDgxNWZhYjAsIDB4MWQ2ZWExYWYsIDB4OWVlODdhMmQsIDB4MDZhNDlmNjgsCisJMHg1MGE0MzA3YiwgMHg1MDkwNDdlOCwgMHg2NTViY2EzMywgMHhhNDQxZmJhYywgMHhmYWNhYjBmMywgMHhmMzA1NDY1NSwKKwkweGY1MTk1ZTUwLCAweDlkYzk2OWNiLCAweDM4ZmUwMzZkLCAweGEyM2EzN2JkLCAweDliMTNmNzVmLCAweDY5NTJmYmQwLAorCTB4ZWYwYTk2MWYsIDB4Nzg0MGMxNzksIDB4OTNjMmZhMTgsIDB4YTFkZTExYjMsIDB4OTdhNmRjMmYsIDB4NWZmNWUyNDIsCisJMHhkZjA0MGNkOCwgMHhiMjhiYmRlOSwgMHgzMGZlN2UyOSwgMHhmNGU2ZTU4YSwgMHhlMGEzNzc5YywgMHhkZjAyMTU4YiwKKwkweGYzMjMxYWFmLCAweGRjNjIzM2RkLCAweDkzZTllYjU1LCAweDZiMjRlN2UwLCAweGI2MzNmNGY0LCAweDVkNGNiYzkwLAorCTB4ZDNkMjc5ZWQsIDB4ZjQyOWIwM2YsIDB4YjdkMzdmOWUsIDB4ZjgwM2ViZWMsIDB4ZTY0YWI3ZmMsIDB4N2EyZmJjNDAsCisJMHhlYmU1MjM3MSwgMHg4Y2I2MzU1ZSwgMHhhOWViODJkZCwgMHgwN2NjMzFkMywgMHg5YmY3ZDllYywgMHg0ZmQwN2Q3ZCwKKwkweGEwODY1NGFjLCAweGY5Zjk3MDdmLCAweGYxMWI5YjgzLCAweGIzNTViZmZhLCAweDM0ZmY4ODIxLCAweGU2MTJlM2RmLAorCTB4MzczMmJlMDUsIDB4ZGFiZWJlMTMsIDB4YzA1NmM1MTQsIDB4NmUxZTE2OTIsIDB4ZTg0M2ZiMTksIDB4MzFkMWFmYWYsCisJMHhlYmUxMmJkNCwgMHg3NDE5Mzc4NiwgMHgwZGZhZDhhOSwgMHg3ZjRlNjJiYSwgMHhkZDJhN2ZkNCwgMHg0ODhjYjE4MSwKKwkweDg4NmU5NTBmLCAweDdiNjdkNDNmLCAweGYwNDZiZDM2LCAweDhmNmQ3MGFiLCAweDdhMmQ3MGU3LCAweGU0NThlYjcxLAorCTB4MzYzNTNlOTMsIDB4MmEzNGYzMDksIDB4OWRhOGZmNWMsIDB4MzNmNjg2YjgsIDB4MjU3MmU4MjAsIDB4OGUxZWY5ZmIsCisJMHhlMTlmYjcwYiwgMHhjNTg5NzM3NiwgMHg1ZGM3MTQ3OSwgMHgxNWNlN2VjOSwgMHhlODQ3YjVmYywgMHg4ZjI5ODU2MSwKKwkweDFkOTJiZTYwLCAweDI3ZGU1MWQ0LCAweDZjNzMyZTljLCAweDlmYTNmMjNkLCAweDNmMjJhZWRhLCAweDhiNjZjNTNhLAorCTB4NmNkZDFmOTgsIDB4ZDliNDdhZTQsIDB4ODk0Y2U2YzYsIDB4MDQxMzBmMjAsIDB4NWQ3NWJhYmMsIDB4ODk4YmI0NDYsCisJMHhiZDQ0NTI2ZCwgMHhmNWMyY2E3NCwgMHhhZmNkZTgxMiwgMHgyM2QzZWU0OSwgMHhmODA4ZDVlYiwgMHhmZjcwZWM5NSwKKwkweDVkZmUyZGZhLCAweGExMjBhYTM4LCAweDVkYmEwYzdmLCAweDNkOWQ0ZjgwLCAweDhmMDI5ZjE0LCAweDdjNTU1ZTJhLAorCTB4ODg0YmUyZmEsIDB4M2YwYjM2NWYsIDB4YTRiYzdiNzMsIDB4YjNhZWUzODksIDB4MTY5Y2UzYWIsIDB4MmY2NjRmN2MsCisJMHhjZWQxM2FmYSwgMHhlZGY4MDM5ZiwgMHhhNWM0ZGVmOCwgMHg1NzVmOTM0YywgMHhmNTg5ZWFmMywgMHgxNDM4Yzk1ZSwKKwkweDNjYTMwMmNkLCAweGJkZGRiNjVjLCAweGJhZTMwMGMyLCAweGYzYzczMDQ2LCAweGIwYWY4ZmQwLCAweGIzYmVhMDk2LAorCTB4MzFkYTNiNTUsIDB4ODY3OGRlZmYsIDB4OTcxYjM3ZTcsIDB4OWE0YWRmMzAsIDB4NzNmZmYxODcsIDB4MmE3Y2E1ZjcsCisJMHhlOTY1ZGRlMiwgMHhmNWQ0MTc2OSwgMHg2N2VhYmQ4MSwgMHgyMmU1NzBlNywgMHhhYmQ5YmQ1YywgMHg4NTE3Mjg2YiwKKwkweDE3Mjc2ZmY2LCAweGQ2ZTg5MWM1LCAweDZiZjVjZjE1LCAweGViZGZmMTg0LCAweGUyYjdjZTg1LCAweGY5ZDEyYmY1LAorCTB4MzkwZjUxMGUsIDB4ZmM4NTNmMTIsIDB4NmIzZjk0NGQsIDB4ZTFlZTkwN2UsIDB4OTE4ZTJjZjQsIDB4N2I3Y2IxZmUsCisJMHgxOWRjYmM0ZiwgMHgyNzZiMmYwOSwgMHhiOGY0ZjJlOCwgMHg4OGVkMTY0ZSwgMHhkYTE2Nzc2NCwgMHhmZmJjZjNiZiwKKwkweGNmNTI3YjQyLCAweDY5ZmMzZmJjLCAweDU2ZTdlN2ZjLCAweDBlYmVkZTNhLCAweGE2NGI3Y2UxLCAweDFmYjllOTM4LAorCTB4NWYzMTE4NzcsIDB4NTVhN2U2YWMsIDB4NGI1ZjNkNzgsIDB4YjlmYTA5Y2MsIDB4NWE5OTZiZjMsIDB4OWI1ZDdhZjUsCisJMHg1NzcxODg1NCwgMHhlNDhiZWVjOSwgMHg3ZmI2NzcxZiwgMHg2NzcxZmU0ZCwgMHhiZWFjN2Y5OCwgMHg0ZjYwNWVmNywKKwkweGIyZDE4Zjk0LCAweGZjZmZmODg1LCAweGNiY2YxZTA2LCAweDQ4ZTlmOTRjLCAweGRmYjNjMzgwLCAweGYxMGE3Y2MwLAorCTB4YjQwZmY5MmYsIDB4Njc5ZmU4NWUsIDB4ZjFjN2UxY2MsIDB4MWVjOTYyNWIsIDB4OGYzMDM4MmUsIDB4YWM1ZjFjZjAsCisJMHhiZTA4NGE2MywgMHg0Y2QxOWMxMiwgMHhiZDk3YzEwOSwgMHgyN2U5YTZkYywgMHhjNjY4ZmFiOSwgMHhhYmVmNGNhNywKKwkweGJlZTY5ZmI5LCAweGJkM2Y3MzQxLCAweGNmZDM0MGJhLCAweDMzNDliZmFjLCAweGE5NTk3YjNlLCAweDFkZTM5ZmE2LAorCTB4YWZkZjE5YTcsIDB4M2Y0ZDc2ZTksIDB4Y2Q2ZWY5YjcsIDB4YjhlNmNkZjgsIDB4ZTAwZWE5ZTcsIDB4YzNmYTA2NzUsCisJMHg3YWM1MmI3YSwgMHg4ZjdmNWJhZiwgMHg5N2U2MzllNiwgMHg5OTJmNThmYywgMHhmOWZkYzgyZiwgMHhiMWZiMzFlNiwKKwkweGYyMjk1MjVlLCAweDE2ZmJkNzEzLCAweGRmOWRlNjY5LCAweGU4MmZjZGFjLCAweDc0YmVkNzU5LCAweDRmOWQ1ZmMwLAorCTB4YmZhMWY4NzIsIDB4ZmVmNmJkNjAsIDB4ODQ4ZGQ2YzIsIDB4ZWQzZTg1Y2YsIDB4NmEyZmM1ZjUsIDB4YTY4N2Y5ZmIsCisJMHg0YzcxYzQwZSwgMHg3ZjQ0MmFlZiwgMHg2ZDc2ZDdlZSwgMHg3NDhhZTJiZSwgMHg1NTc3NWVmNiwgMHhkNTRhOGU3NCwKKwkweDY4YWNkOWQyLCAweGJmOGUxY2U5LCAweGQ4NWIzYzk4LCAweDM3ZGZmODdkLCAweGExZDYyZmUwLCAweDBhZWY4YmU1LAorCTB4NmJiMDdmN2YsIDB4NjIxYjljZjMsIDB4Y2Y1MWM3ZGMsIDB4OTUyZWI3NzUsIDB4Y2JlYmU2MTksIDB4YmJiMjNkNzksCisJMHg4M2ZjY2JmNSwgMHg3ZDNjODQ0YSwgMHhmZDNjOGY2ZSwgMHhiYjEwZjYyNywgMHgzYmU5ZTZhNiwgMHgyMzcyZmViMSwKKwkweDk3ZjUxNmZiLCAweDNjNDU3ZmRkLCAweDMxZTU4MTQ0LCAweDhhY2RmZjgwLCAweGY1Y2JhNjFkLCAweDJmMzA3MzE2LAorCTB4ZDRiZmFlMWYsIDB4NWZmN2Y0MTYsIDB4ODNkN2E0ZWMsIDB4ZjA1NWFhNzUsIDB4ZjdmOGIwZjQsIDB4NWFhNzA4NWQsCisJMHg5ZWVmMThjNywgMHg4OGRlZjA0YiwgMHhmZjgwOGM4MCwgMHhlYTlkN2MyYywgMHg0Yjg3ODAzYywgMHgxMmY4Y2YzOCwKKwkweDUxYzYwYzViLCAweDRiZGNmNzViLCAweDRiNmIwMTcxLCAweDQ4MGVmYWU0LCAweGM0M2UzYTFlLCAweGRhM2QyNTNmLAorCTB4MjM0Y2ZmODIsIDB4ZTQ0YzY4YmIsIDB4MTg5NGQxNzYsIDB4YmYzMWM3MTIsIDB4ZDg1N2JmOGQsIDB4NTFlNmRlYzUsCisJMHhiNWJkMThlYiwgMHhlYTk5MmVkMiwgMHg4ZjU4NWQzMSwgMHhmYmQ3YTA4OSwgMHhmNjgzZmUyNiwgMHhmOTFlOGJlNSwKKwkweDQ1ODliZWQwLCAweGY3YzI3MTIxLCAweDdlYTFmN2JiLCAweDI2ZTdiYzA3LCAweDYzNjI3YmMyLCAweDQxNGE2ZWMxLAorCTB4OThkM2Y5YmIsIDB4YWViNzkyMzgsIDB4M2FlZmIyMDMsIDB4YTRkZTcwYjgsIDB4MDUwNmRiYzQsIDB4ZjBlMTJkZWIsCisJMHg5ZGQ5MzQ4ZSwgMHhkZTdkMTBmYSwgMHg2NmVkNjkyNiwgMHg0M2Y3MDE2MywgMHg5ZGI5MTIwYSwgMHhmOGYwYjJhZCwKKwkweDdiZThhYzc1LCAweDRmNzZmY2MyLCAweDQxNGY4ZjEzLCAweDQyZGJhYTFhLCAweDg5YjFjMWZjLCAweDVjZmUzNGIxLAorCTB4NWM1OGM5NzQsIDB4ZGYxMTQ2Y2YsIDB4ZjQ0OGU2MzcsIDB4MjI0OTQ2YmUsIDB4NWYxZTVlZmIsIDB4NzVkNzE2M2EsCisJMHg4ZTUyNWVjMSwgMHgzZTA0NGFlMywgMHgwNDZmYTJjNywgMHgwZTVmNzM2ZCwgMHgwZGY2MjI4ZiwgMHgxM2ViZjNhOCwKKwkweGI2MTI3YzYxLCAweDRkOGVkNGE1LCAweGM4M2YwYWI0LCAweGZiZDIwMzdhLCAweGRlOTNiNDQ0LCAweDhkNjU5NDZiLAorCTB4OTNiNmE1NWYsIDB4MmViYWY5MTIsIDB4MGEyYWNkYTIsIDB4MjE2OGM5Y2EsIDB4MWU4NDYzMzcsIDB4MTQ3MWZjYzMsCisJMHhjMjczOTMwOSwgMHhkZTRkNjRlOCwgMHg1MTMxODhmOCwgMHg3YTI1OGRlNCwgMHhiYzc0ODlkYywgMHhiN2IxZDA1NSwKKwkweGNmMzNiMjNjLCAweDY5ZDUwN2JhLCAweGFkNzkxZTc4LCAweGQ1OTFlNzk5LCAweDNjOGY3MzNjLCAweGM0NGM2M2IyLAorCTB4MjFkMjMyM2MsIDB4ODc5NDE2YzYsIDB4ZjU5Nzg5ODUsIDB4OWJlYTA2NzMsIDB4Mjc4ZTljYzYsIDB4MWM3ZjIzYzYsCisJMHgyM2NmMWQ5MiwgMHgzMWJjYzdlOCwgMHhlMmI3MDBmOSwgMHg5MWYwMzlkMCwgMHg0YWQ4MWIxMSwgMHg3ODE3ZjQzMywKKwkweDE5MzNjYTE1LCAweDJkOGIwZTIwLCAweGMzZWZjYTA4LCAweDlmODQzOTg5LCAweGE2ZmQ0N2MxLCAweGZjM2ZiODdjLAorCTB4ZjMxZGFiOTgsIDB4MzFhNjAzY2EsIDB4NjZmZmFhMWIsIDB4ODcxNjVjZDYsIDB4MTYwNmM0ZmUsIDB4Mjk1OTZlMzEsCisJMHg2NGJlMzllOCwgMHg5ZTcyOGM5NywgMHgxMmZjMDVkNCwgMHgwNTJiMWU4MSwgMHg1NzhlNDAzZCwgMHg3Nzg3M2QyMCwKKwkweGVlYzliYmI5LCAweGFhNDAzZDA4LCAweDNkYTNlMzBjLCAweGMzOTdmMjNhLCAweDU3MTAzZjlmLCAweDdiZDIzMGY2LAorCTB4YmU3MjJmYjAsIDB4YzM4NWEyZTQsIDB4ZmQ3MThjNjEsIDB4YmMxZmU3MDQsIDB4ZmE4OGMzYWQsIDB4MzdhYTgxNjYsCisJMHgwZjRjNzUyYiwgMHhlODJhOWRmNCwgMHhhZjAzNzUzNywgMHg5NzhiYjM1MywgMHg5ZmFhYzkyZSwgMHg4NjdlNjhjNSwKKwkweGI0YzE2MGZhLCAweDFmZTYxZjU4LCAweDc4ZTViNDE2LCAweDQ0OTcyZTA5LCAweGRiNGYxNWY5LCAweDE3ZjYxNzYxLAorCTB4YzU2YTFkMGMsIDB4N2JmOWQ3NzgsIDB4NDc5MjdkMjYsIDB4N2FlMzFhMmUsIDB4NTEzZWNmNDcsIDB4Y2ZkOTAwZjUsCisJMHhkYzViYWE0NCwgMHhhMmVhZjgyZSwgMHg0MTM4MjE0NSwgMHgwMThkYWYzZiwgMHhiMGQ4MmMzYSwgMHg1M2VlMTc2MiwKKwkweDE5ZGZlZjc4LCAweGNhOGUyN2Q1LCAweGIyNzBjMzVkLCAweGNiMzkwMDNiLCAweGIzZDViMDBhLCAweDM4N2MwMjhhLAorCTB4MjY5OWU2OTUsIDB4MGQ3ZWYxZTYsIDB4ZGYwNTM1ZWYsIDB4MDFkYjQ3N2IsIDB4MDM1MWNmNWEsIDB4NWY4MDlhZjMsCisJMHhhNWRlNzczYSwgMHg5OGRhYmZhMCwgMHhmZjEwNzI2NCwgMHg3MWQ3YmE4YSwgMHgxOTEwZmRkOSwgMHgxZDU3N2QwZiwKKwkweDJkYTMzNjgyLCAweGQ2MDZiYWM2LCAweGI4YzhjYWIxLCAweDc2OGJhYjdmLCAweDVhMjdmZTIwLCAweDJmYzRmNDNhLAorCTB4YzQ3YTVkODksIDB4Njc0MTU5ZTMsIDB4ZGZjOWYxZjQsIDB4Mjc0NDYyNGYsIDB4ZTljNzVkMzksIDB4N2RmMGFkOTYsCisJMHg3OWI1ZmQyMywgMHg3NTEzNzdjMCwgMHgxOTAyZmU0MiwgMHhjYzYyN2Q3OCwgMHhlMDE1NGIzYiwgMHgyYWViMDNjYywKKwkweDdmNDFlOWM3LCAweDY3N2Y4YzRmLCAweDBmZjQwZTY5LCAweDRlM2Y5YmFlLCAweDMxM2RmYzBmLCAweDczMmY5ZGZkLAorCTB4NWFkZmQ0NDAsIDB4MGZlZmM1NTcsIDB4YmVjYmU3N2MsIDB4NWJhYzBmZDAsIDB4NGNkZmVmYzAsIDB4NTlkZWNmYmMsCisJMHhmMzBlM2Q1NywgMHhkNjVlZWZmYiwgMHgwN2ZlN2MwYiwgMHg1N2VmMmU2NCwgMHhiYTUxY2FkYiwgMHhjNjcxNDhmYSwKKwkweGNmMzU0NGIxLCAweDFlZjgwY2NjLCAweDhlZWZkYjU3LCAweGE5NzU5ZGEyLCAweDQxYTc3MGY1LCAweDhlNDcwZjUzLAorCTB4OGRiZjAxMzEsIDB4MTJjNTdjMTcsIDB4OGMwZWM4ZTMsIDB4YWYxYmY0MTMsIDB4MThmZWQzZjcsIDB4Zjg0ZmM5OWQsCisJMHg1ODM1OGViZCwgMHg1YjAwNmY5MSwgMHhmNjE1MmVlYiwgMHhhZWQwN2Y3YywgMHg3MjRiZjk2OSwgMHhlODBjYjYzMiwKKwkweGUyNTYyOTJkLCAweDk4Y2I1NTkzLCAweDNmNzY4Y2RiLCAweGYxZDc4NzU4LCAweGUxNzMzYzNhLCAweGQ0Nzg1NWZiLAorCTB4MGI4MGY3ZjcsIDB4ODViN2FiNDgsIDB4ZTY4MWI1YzIsIDB4MWNlYWUxNTEsIDB4Nzk0NWU1MTIsIDB4MGFhN2VkNTIsCisJMHhmNWQ0YTc1NywgMHhiN2JmMjYyYywgMHgwMTNmYmRhNCwgMHhkYjE5ZDZlOSwgMHhmZjQxMjU5NSwgMHg0NDIzYTRjNSwKKwkweGFlYTRjZWM3LCAweDQ4NDcyNTY3LCAweGE4ZTljMGRmLCAweDM4YzU3MjdiLCAweDE5ZTdiYzJmLCAweDAyNGJhOWQ5LAorCTB4ZjkxOTQ2ZmMsIDB4OGMyNjkzM2UsIDB4OGYzZGUwNTcsIDB4NThiZGI5MjQsIDB4NzNiZTAzZGYsIDB4MzJlZjkxZjgsCisJMHg0Njg3YTQ4ZCwgMHgyN2U2ZDUwZCwgMHhjZjljNDkyYywgMHgzYTNiNDU5YSwgMHgzMGZlYjlhYSwgMHg5YjY3YTVmMCwKKwkweDc4YzA1NmM0LCAweDIzNmVjNWNmLCAweDZkODk4OWRhLCAweDY4NGU4YzI3LCAweDMwOWRiNmViLCAweGMzYWFiZWEyLAorCTB4Yjc1M2NjM2UsIDB4NmY1MTE4YzEsIDB4Nzk5MjQ4NmQsIDB4MGZjYzMyOWUsIDB4ZTAzOTliZGUsIDB4YzdkYzQ0YTEsCisJMHg0NTUxMjk1MCwgMHgwOTFkZGVlZSwgMHhlZjdmYjFhMywgMHhmODI1NWM1YywgMHg4ZWI3MjMyZCwgMHhiOTY2YzdjNiwKKwkweDc2YzIxZmRhLCAweDhiZDhlYjBlLCAweDJkYzMzNDJjLCAweDk5ZDJmYzZiLCAweGJmMWEzMWQ1LCAweDVkYmQ1Njc2LAorCTB4MGNkMzlmZDMsIDB4OWViOTAxZDQsIDB4MWI1ZDJjYjMsIDB4NWI4ODMwM2YsIDB4MmMxOTllMDEsIDB4NmRmYTg3ZjgsCisJMHg4Y2UzYTBiYSwgMHhkYzAxYjVkNCwgMHg2ZGMzMzJjNywgMHhjYzg0NzZmMCwgMHg4NTZkYjEzNywgMHhkNzcwODZkZSwKKwkweGJmNTIwZTRiLCAweDczZTBhNjVlLCAweGExMGFmOTMzLCAweGViNDM3YmQ1LCAweDc5NWJhMzYyLCAweDg2YWVhMzMyLAorCTB4ZDgxNWZiZmIsIDB4NTQ1NmJjMDcsIDB4NDI0NTNlNGIsIDB4YmVlOTE4M2MsIDB4ZmJhMjU1YTcsIDB4NDdjN2Q2OWUsCisJMHhjZjMyM2VlMSwgMHgyNmYyODk1MiwgMHgzYzQ0N2RjOSwgMHgxY2VmZWMyNCwgMHg1MWU4MmIwMSwgMHhmMzMzY2UwMywKKwkweGEzYjMxMmZiLCAweGJlZmUxMGRlLCAweGU5OWNmZjBhLCAweDNmODlhN2U1LCAweGFlYWY5Zjg1LCAweDc2MDJiYTczLAorCTB4YzljZmFlMTcsIDB4ZmU4MGM0ZmUsIDB4NjRlZmFjMzUsIDB4ZGE5ZjA2ODcsIDB4NmQ3YWFjZmUsIDB4NmQzMmNlN2YsCisJMHhmMDkyNmE3ZiwgMHg4MWIyMDdkZiwgMHg5M2QzNGYyOCwgMHg1NWVhM2QyNCwgMHhlNjQ1ZmZiNSwgMHgwMWY5NmZmYiwKKwkweDZiYjJjZDllLCAweDhkNjdmMjI2LCAweGE4ZjU0ZmQxLCAweGZhOWJiMmNkLCAweDVlYjg3ZGVhLCAweGMwZWU0OGM3LAorCTB4OTYzOTIwMWYsIDB4MTk1NzNlNDgsIDB4ZjQxMmQ2OWMsIDB4ZTIyNTZiYTMsIDB4YzQyYzk5ZGIsIDB4OGUwOWM4NWYsCisJMHhiM2RjYmVhNywgMHhkNzEyNjhmZiwgMHhhZWNjYWIzYiwgMHhkYjE3NTRhNSwgMHhjMTM3NTkyOSwgMHhhNzdhNTFhNSwKKwkweDU1YzBmZDFlLCAweGM4YmNlNDUyLCAweGRlZGM0OTYzLCAweDhhMjBjNWJlLCAweDIwMDZiODA3LCAweDlmNWRhMjkzLAorCTB4YzJmM2VmMWEsIDB4NzZmYzA3N2IsIDB4ZmJmZDE3YWUsIDB4MDdjMDg1MDEsIDB4YjczZGNhMGEsIDB4YmQ4NWUzMzcsCisJMHgyNWZlMDQ5OSwgMHhlNDAzN2ZmYSwgMHhkZmE0ZTk5NiwgMHg0OTVhMzQ2ZiwgMHhhNDNiMGJiZiwgMHgyZmU3MGJlYSwKKwkweDdjNjg3NmI0LCAweDNmOGE3ZWM2LCAweDdiNWZhZDI2LCAweGZmNjJmNTBlLCAweGM3ODJjZTdlLCAweGNjNDdiZTAxLAorCTB4ZWM4ZmZkZmMsIDB4MmZiODdjOTAsIDB4M2VkMDZlYTcsIDB4YzAyOTlmZDIsIDB4YmFkZWY4MTYsIDB4NWI0N2ExNTQsCisJMHg1MmFlZmJiNSwgMHgyZTYxYWY1MCwgMHg3YTIwYzI3ZiwgMHhlNTQ5OWE2ZiwgMHg0MWU5Mjc3NiwgMHhiYmFhNWZjOSwKKwkweDQ1MjlmYTA0LCAweDBjYTZmN2JjLCAweGJjOTVmMDg1LCAweDc1YzI0NWE4LCAweDBhZWYzMjY3LCAweDQ2M2ZlM2I0LAorCTB4YjYwYTRjMjEsIDB4OGZjZmVkNTcsIDB4NzlmZGMyOTIsIDB4NjVlNjEyNGIsIDB4MTQ4YzNiNTIsIDB4ZTMyZWIxZWYsCisJMHhlYmE3OTQzZiwgMHhmMjMyN2YzOSwgMHhiMGZjZjg1OSwgMHgwNzU3YWE3YywgMHg3MThiZjJlMywgMHg3N2I5YWY5OCwKKwkweGRjNmZiZjY3LCAweGI0OWIyNGVmLCAweGFhYzFiNzcxLCAweGU3YzdiYjhkLCAweDQ0Y2ZmNTY5LCAweDRjZWY1Njg3LAorCTB4YjlhN2VlMmUsIDB4NTAzOWM1M2YsIDB4Nzk2YTdmNzMsIDB4ODc3ZmE2YTEsIDB4ZjhjZDY2ZWIsIDB4Njk5N2E2YmIsCisJMHhlM2E5NTFmYSwgMHhkYTAwZjJjMiwgMHg5ZTRjNGFmYywgMHhlYjEyYmYzNiwgMHhhMjUxZTZkMCwgMHhiYTdhZmMwZSwKKwkweDlhMzE3ODA0LCAweGMwNmUxZGJjLCAweDQ2YzgxMzQzLCAweDQ3NjgyZGIxLCAweGE4OTljNjA2LCAweDY4NWQxYjQ4LAorCTB4MzRkYjYwYjYsIDB4N2M4ZmNhMjQsIDB4Yzc4N2Q0ZDIsIDB4YmUwNzUxZTEsIDB4Nzk4N2VhOWYsIDB4NGM1YmYxNGMsCisJMHg0OTc4OGE1OCwgMHg4YTYyOTVmMiwgMHg3NTQ0ZDAxOCwgMHhkNDFlMWJkNSwgMHhkM2QzOWJmYSwgMHhlZGE5NWNiOCwKKwkweDk5ZjcyNGIxLCAweGJjMWJhYzY0LCAweDdmNzNhNGE4LCAweDg5ZjE0MDM2LCAweGJmNzE5YTI5LCAweGZjODliYjY4LAorCTB4YmU0ZTM1MjIsIDB4OTQ2NWE3MWMsIDB4MGViYTQwOWMsIDB4ZjU0OWQwN2EsIDB4YWNjYWQ2MTMsIDB4ZGU3YzU3OTgsCisJMHhkYmE5ZjIyOCwgMHg0MWRjM2VmOSwgMHg2NzNhMWRhZCwgMHg0OTJmN2M4OCwgMHg0OWUwZmFlNiwgMHg5YzU4ZTk1NywKKwkweGFjMGRhZWJmLCAweGZhZDNjYTJjLCAweGE3NTg4YzhmLCAweDhmNmI2YmFjLCAweGVmOTY3YjQzLCAweDc5ODhjOGZhLAorCTB4NjE3NWUwYmIsIDB4ZDE1ZGY0ZTcsIDB4NTVmOTVmNTgsIDB4ZmY3MTFjOGIsIDB4ZjdjYzkyYjIsIDB4N2ExM2VjNmIsCisJMHg4M2Y3ZDY3ZCwgMHhiMGM5NTFmMSwgMHhiNTllN2VhMCwgMHhjMzJmY2JiNSwgMHg1ZTgxNjdmYiwgMHg0YTZiZjJmMywKKwkweGZhMGQzZDI0LCAweDNjY2YxMzU5LCAweGE3ZWVhNjk5LCAweGMxZWM2YTcxLCAweDAzN2VjNWRkLCAweGVkNmE5ZmQ5LAorCTB4NzhkMzM5ZjgsIDB4NWM3YTA0NWMsIDB4OTFhMzNkN2IsIDB4MWQ2MzBiZjQsIDB4ODE1YmNjMDYsIDB4OGZkY2Q3NWUsCisJMHhkMjcxMTY0YiwgMHgxMmU4MzY0MCwgMHhhZWEzODFlOCwgMHgyYmI1ZmJjOCwgMHhjNzQ0ZjRkMywgMHhhMjMyZWVhMywKKwkweDRmODA5M2MzLCAweGVjOWY5N2Y0LCAweGQ3OGUzZjgxLCAweDY1ZWRlMTJiLCAweGZhMTA4MWU0LCAweDRmYWI4Zjg1LAorCTB4Y2JmNDdlZTMsIDB4MDdlZGU4YmQsIDB4OTc5ZjdkMDQsIDB4NTRhODA1MDIsIDB4ZTI2OGFlM2QsIDB4YjlhNjk5ZGYsCisJMHhmNzNmNzE4YiwgMHgxYWFmY2NiZSwgMHhlYjMxNWViMSwgMHg3YjQzMTJkNywgMHgwM2Y2ODdmYiwgMHhiOGNmOGZiNCwKKwkweGVlMzI2Zjc1LCAweGVjYjRmNGFmLCAweDdmYzA2NjRkLCAweDA1NjUwNjM1LCAweDFmYzBmM2ZhLCAweGVhN2ZmNDBlLAorCTB4N2YwNGZkNWEsIDB4M2I2MTRiNmQsIDB4OTU2ZGFmNWUsIDB4M2Q5MmE4MWMsIDB4YTE4ZGNlZGIsIDB4NDY4ZWIyNzUsCisJMHhkZjNkZmZhYywgMHg5MzIzNWMwYiwgMHg1Yjc1NWZiOSwgMHgwNGYzYzJiMiwgMHhkYTI3Nzg2ZSwgMHgzZTUxNmRmZCwKKwkweDAwZmM4NDlmLCAweGRhZTEwOWZhLCAweGU4NjZiMTIxLCAweDE0ZGFiZjNmLCAweGEwZmJlZWIxLCAweGQ1OWVmN2MwLAorCTB4NmFiMzhhNDYsIDB4Yzc1Yzc5ZTAsIDB4NDY3ZGNjYmUsIDB4NTZkM2YyMTMsIDB4ZWI4NDk3NTgsIDB4MGM0NzdjMzgsCisJMHhjMGQ0YmZjZSwgMHhlMTUwY2ZkMCwgMHgzODE5OTMzYiwgMHhiMGZmZWI4ZSwgMHhiODFkMDIxMiwgMHgyNjUyYWFiZSwKKwkweDU0Yjg3ZjdjLCAweDlmZTcyM2U0LCAweGI4Yzc0YzZhLCAweDc3ZWY5NmE2LCAweDRkZDk1ZGRmLCAweGFiMGZiZTc5LAorCTB4MzY1NjlmYjksIDB4Mzk3MjQwZGYsIDB4NTdmNzA5NjMsIDB4ZTU1YWY5YzIsIDB4OWYwNWE3ZGIsIDB4Mzg2ZmYzODYsCisJMHhkN2UwZjZkZiwgMHhkN2UzYWJlYSwgMHhlNmJmMjBjYSwgMHhmYTA3ZGRhMywgMHgzZTQxNGU4ZiwgMHhlZWZmMDFmYSwKKwkweGRkYzVmYTY1LCAweGJiODAxNDg2LCAweDgxZDVhMzZmLCAweGNiMDZiZGZiLCAweDUxOTI4N2JlLCAweGY3ZTZlYzZmLAorCTB4OTQ2Y2Q0ODcsIDB4ZWU1MWZlYjgsIDB4MzdhNWY1YzYsIDB4MDkxYWQ5MTksIDB4ZWRkMzg5ZjksIDB4ODUzNzQxMDEsCisJMHgxNDMxNDk3NSwgMHhhMmZhMDVmZiwgMHhiZjUxY2E5ZSwgMHhlOWIwMzA4NywgMHhhNzNmMzE1YiwgMHhmMDY3ZmFlNywKKwkweGQ3MWJhOTZiLCAweDZlNmZmMDg0LCAweDU1NWJlNzMyLCAweDMyMzQwZTJmLCAweDA3YWE1NmY3LCAweDAyOTlmNGI0LAorCTB4ZTA2Y2JjZjMsIDB4MzEyYzljZjUsIDB4YWViZjZlNWYsIDB4NWRhMDUzMzEsIDB4ZTRmNWNjOWYsIDB4ZGE4NzAxMGEsCisJMHg4MGU0Mjc1ZiwgMHhmODRkZGM2NSwgMHhmOGUyNjg5YywgMHg1ZmNjYjcxZiwgMHg5OWY4ZWI4MSwgMHhlYTMwZmRkMSwKKwkweGVmNTkwOWQ1LCAweDZiZGRhMGQ3LCAweDIwZTZmYmVhLCAweDA3MzIxZmNhLCAweGJjNmFlMWY5LCAweGE3YzQ3YmJlLAorCTB4ZjU4M2VlMWIsIDB4MjY4ZmFmOWEsIDB4M2U3NzlhZmEsIDB4MzY3ZTQ1NmUsIDB4NzE0ZDBlZTcsIDB4YjUzZmUwNDcsCisJMHg2MWM4NWNmNSwgMHhkNWYwM2I2ZSwgMHhhYWQ0N2U4NSwgMHg0ZWJiMjlmZCwgMHg3MjlmNjkxYiwgMHgyNDMxYjlkYiwKKwkweGU4ZDIxNzJmLCAweDUzNWNmYWJhLCAweGMxY2Y5NzFhLCAweDlhYTgzZjYyLCAweGFkYmQwNGNmLCAweDhlMDgyZTJmLAorCTB4NzBjMGYxNTMsIDB4YzIxMTVlNzcsIDB4ZWJkMTAyZjMsIDB4MDg2YzI1YmUsIDB4NGUzZmFiNGYsIDB4NzM1OTlmZWIsCisJMHhmMzBiOWE1OCwgMHgxYTcwNjVkYywgMHhmN2VmODAyYywgMHhjNjJmYTdlMywgMHgyZTZmMmZmZCwgMHg4NTFkY2M2NywKKwkweGNjNGNlZmZiLCAweDAzZWUxZDdkLCAweGIwM2Y1MmI0LCAweGVmZmE5NTNjLCAweGRkYTg1NzJjLCAweDg0YmQ3MjYyLAorCTB4NGY2M2JhNzgsIDB4YWJlZDJlN2QsIDB4NTVjYTdjY2MsIDB4M2NlOWVmMGEsIDB4MDUzYjEwNjgsIDB4YTgyN2U0NGQsCisJMHgzNmVlYTFmNSwgMHg3ZWUwOTk5OSwgMHhlYTg5MzZmNywgMHhiM2ZjMmE5ZCwgMHgzNzMzYTQyZiwgMHhlM2RmOTdlOCwKKwkweGRhYzFlMGZiLCAweGRlOTJlZjY1LCAweDFiOWY1NDczLCAweDkwZDI3MTgzLCAweGQ4OGQxMzlhLCAweGYzZmIyY2Y3LAorCTB4OGUyZmY0MTgsIDB4M2U0MTNkODMsIDB4YTU5ZmJmMDMsIDB4MGU0ZmE4NGEsIDB4NWRkZjcxMWIsIDB4Y2QzYjA1YzUsCisJMHg2YmFlYjJmMywgMHhmNzlkY2EwYywgMHg1MGVhODkwZCwgMHgxOWNmNWJjNywgMHg2MmJkYjg1MywgMHg1ODA2Y2EwOCwKKwkweGZmZTAxMzlmLCAweGViODEzOTIyLCAweDNhMjFiNjkzLCAweGRjYTFkZjRlLCAweGQwZmMxMWFmLCAweDcxZDdjMzdlLAorCTB4MzJkMzBmNDgsIDB4ZjE5YmVkZTUsIDB4NDMzMmZkZjksIDB4ZGE1MzVlYjksIDB4YTA4ZDY3MTUsIDB4YmNjMjhmODcsCisJMHg3NWMxNWM5OCwgMHg3ZjdlMWI2MCwgMHhlYjliZDFiYSwgMHhlYmE2ZTc4MCwgMHhmYTliZWYyMiwgMHhiZTcyZjkyYywKKwkweGZmMTRlNDgyLCAweDBhYjdlMDI0LCAweDYwYjM2ZmMxLCAweDhhMzZmMTQ5LCAweDIwZDFmYzgzLCAweGNhZGFiM2NmLAorCTB4YWRiMWViNGUsIDB4ZGE0N2Q4OTcsIDB4MTQ3ZDhjZjgsIDB4YzZmN2M3ZTIsIDB4YWRiNmRmODcsIDB4ODM3MmY5YzMsCisJMHg1OTIzOGM3ZCwgMHg3MTg0NWY4OCwgMHhkZmJjZDMyNCwgMHg5OTRjZjNjYiwgMHgxMWRjNTNmZCwgMHgwZTU5NzlkNiwKKwkweDAzYmZjMDNhLCAweGUzODFkNTdhLCAweGRmOTFkOGE0LCAweDc2N2I1MjA3LCAweGNhMGFjM2M3LCAweGViYmEyOThmLAorCTB4NmMxN2I0MjksIDB4OGVlMjhlODAsIDB4MWZkNmFmNWEsIDB4ZTVjYTk2M2EsIDB4YzBhYTU4ZTEsIDB4N2UzNjhhNWIsCisJMHg0ZTQ5Mzg4MiwgMHgxYzUyNzFlMSwgMHhlMjQzODQxNiwgMHgxNGViZjBhNywgMHhhZTUwOTkzZiwgMHg4MTAzYmRlMCwKKwkweGEyNDRhZjNlLCAweDI5YTk2YTRmLCAweGFiZTUwOTI1LCAweDAxOWNmODk5LCAweDg1N2YyMzlmLCAweDIyOWVkM2FmLAorCTB4YWU0MmQ5ZjIsIDB4MjM1Y2EwNjcsIDB4Yjk3MmI2ZmYsIDB4M2JiNzlmMGUsIDB4ZjM4ZWM0YjUsIDB4NWM3ZGM2YWUsCisJMHg2OWM2ZjQxMSwgMHhmNWRhY2ViMSwgMHhiM2NiZTExMiwgMHgzYTc4NGVkZSwgMHg0YWJiZDZjMywgMHgwMGNmMmY4MSwKKwkweGEwMmZiODFjLCAweDQ5OGFlNWQzLCAweGRiOGQ3YWMwLCAweDA0YjM2MzE1LCAweGZhZGQ0MGY1LCAweDc1NmU3YTE4LAorCTB4NzNlZGRiZmYsIDB4YzI5NzlmYTEsIDB4NmI2Y2ZlZjksIDB4M2NmMTA5OTksIDB4M2Y5NzNkN2IsIDB4ZmRjNzdkZjUsCisJMHg0ZjI4ZWMzMywgMHhhMzJlODY0NSwgMHhiNDY3ZWUwMywgMHgzZjQzODg5ZCwgMHg1NGM3NjhiMCwgMHg2ZjYxY2EzYiwKKwkweDcwYTg2NjcwLCAweGYxNmZiYjJlLCAweDA3ZTczYjQ5LCAweGY1YWE2ZmNjLCAweGJmNGFjZjM4LCAweDc4YmZmMTExLAorCTB4NmRmZTIzMTksIDB4M2E4N2ZlZGYsIDB4NmRiM2UzOTQsIDB4ODdiNDU2MzEsIDB4NzhjNjc2NjcsIDB4YmU3N2ZmNTEsCisJMHg0OWQzZTUxMSwgMHhlMzc4ODcxNCwgMHgzMTlkYWY0MSwgMHg3ZjIyNGM3NCwgMHhjNTZjODc3MywgMHhjNmYzZDFmOCwKKwkweDNjYTE0ZmU3LCAweGExNDdiNjdhLCAweGI3MTZjN2U3LCAweGVkMGU3YzNkLCAweGQ4ZGI0ZDVlLCAweGRhN2NmYWQzLAorCTB4OTU0ZmZlODcsIDB4Zjc2NWRhODcsIDB4ZmVkNTdhZDMsIDB4MGE0ZGNiZTcsIDB4N2FiM2QxZWEsIDB4YjcxNjI3YWUsCisJMHhlZmZlNGFiZSwgMHhmOWRkOGJlMiwgMHhiMzNmMGY1OCwgMHg1MGMzNmZmMywgMHhkYjdlNzlhZiwgMHg5OWY1MGMzZCwKKwkweDYxZWVmNWU3LCAweDVhZjNkZjc4LCAweGJmMjQ3ZDRjLCAweGYzYzY5N2M1LCAweGNjYmRhYTQwLCAweGU0ZDdhMjM5LAorCTB4NWQ4NWEyOGIsIDB4MmU2ODY5YzgsIDB4NDU5ZDdkYzcsIDB4MzAzOWE3ODcsIDB4MmZkZWFiOWYsIDB4N2VkMWQ1Y2EsCisJMHg0NmY3YTJmZSwgMHgzYzg3ZTdkOSwgMHg5N2QwMTBkNywgMHg4N2ExZjVlMywgMHg4NjU0YzU0NywgMHg0MWFhNjVmMiwKKwkweDU1NWUzN2NkLCAweGVhZWYwNzllLCAweDc1ZTQ4NTg3LCAweDE5YTczYTAyLCAweGU4MGVhZGM2LCAweDZhZGFmZWY5LAorCTB4MDZmMTg3YzksIDB4Y2ZlMTJmZjgsIDB4YjlkNTNmOTEsIDB4NDM1YmVlZDAsIDB4ZmM2YjgyN2UsIDB4Y2ZkOGExZTAsCisJMHg1MDUxYWM3NSwgMHhmNmY2OThhZCwgMHg2Njk3ZjEwZiwgMHgyOGZlNzQwNCwgMHg2ZGU5YTNlMCwgMHhmN2YyN2U1MSwKKwkweGQ0MTNmYTAzLCAweGVjZDQ3ZTE3LCAweGU2YzY5ZjczLCAweDM0ZjIxMTQ4LCAweDQ2OGNlZjc5LCAweGFmOWUxZTNkLAorCTB4ODQ1OGJmODEsIDB4ZGVhZmY1NWIsIDB4YTNmOWUzNGYsIDB4MGVhYjdhOGMsIDB4MzQ1NjY3ZjcsIDB4YjVlMjJiMzAsCisJMHhmYTY3NWU0NywgMHgwYTJmOTQ2ZCwgMHg4MTI4ZWZjZiwgMHg0ZTdjMjY3NSwgMHgyMmIzYWZlOSwgMHg4YTVmYWFiYywKKwkweDQxMTZkYzc0LCAweDcyYTYyNDBmLCAweGFmOTU0NGJmLCAweGU4OGU4MDg2LCAweDM1MjgxMGQzLCAweDU2MzY4N2Y1LAorCTB4YWIzNmQ3YzgsIDB4NjhmN2JlOGUsIDB4MDliYTliNjgsIDB4MTcwZDBiZjMsIDB4MGMxOThhZWYsIDB4NzIzODY5ZWYsCisJMHgzZGVmYzMzYiwgMHhhNmE1YWQzYSwgMHhlMmVlN2M1YywgMHgwNjNiYTY2ZCwgMHhmYzI2ZjkwNSwgMHhiODUyYzc3ZCwKKwkweDBiZmEwY2RlLCAweDIxZGZlZDkxLCAweDU5ZmVjZmExLCAweDhhNDBmMDc2LCAweGZmM2RlNDRlLCAweDEwODNiNmVmLAorCTB4Nzg1MjA3OWYsIDB4ZTc5MzNlN2MsIDB4MWU3Yzc4NGYsIDB4YmQ1NDNmNmUsIDB4MDkyYmNlYWMsIDB4Y2JkNGY3M2EsCisJMHg4MWNmYzlhNywgMHhiMmY0OWEzOCwgMHhiOGQwYWE5NCwgMHg3NjI5YjY4YywgMHg0YzhmYWY4YSwgMHg5ZTk2MmJiMywKKwkweDNiZDNmN2YzLCAweDNkNDFiNjc0LCAweDM5ZmQ1N2U3LCAweGQ3YjlkNzhmLCAweDkzOGY3MTg0LCAweDRjZjMyM2VmLAorCTB4YWRkZjY4OTMsIDB4NWM3OWZmZWEsIDB4OWVlNWY5MTIsIDB4YzcwZjgzMGEsIDB4YTYwNTcwYTksIDB4MWRlYzdjZjEsCisJMHgyY2NmODM0ZSwgMHhkNTQ0ZmQwNSwgMHhkZjdjYmM4ZiwgMHhkNTdkZDEyMSwgMHhjN2ZkNTRhZiwgMHg3N2U3OGI4MCwKKwkweGY3ZTUwZGE3LCAweDE3ZGM5OGI3LCAweGY3MWYyZWQwLCAweGQxN2FlOTliLCAweDMxOWQ3ZTA4LCAweGFiOGM1ZWQ3LAorCTB4NjI1M2JhZWUsIDB4NWY4NDA3YTQsIDB4Yjg2OWYyYTksIDB4YWRiZTc5ZGYsIDB4YTNlZTM3ZGYsIDB4NTNmODIwZGYsCisJMHgzMGFjYjM5NSwgMHg1OGVkNTBmOSwgMHhjNzk3MGE1ZSwgMHg4NWUzYjQzYSwgMHhhYWZmYzc2OCwgMHhlN2MzY2ZmMSwKKwkweDQ5NmUzYjA1LCAweDNkMThlN2E1LCAweGJkM2RmNDNmLCAweGZlYmM1MjJiLCAweDBjYTc5MGFjLCAweDNkODE3ZTk1LAorCTB4MjY2ZjA4MjUsIDB4ZDgzZWQwMGIsIDB4N2M2YmVjZGUsIDB4ZGVkNzk3MWEsIDB4YjkwOWU3ZWUsIDB4ZGYzYzkyYjksCisJMHgzZmNjZjQyNiwgMHg1MmNiOWU0YiwgMHhiNWY4NzdmZiwgMHg1ZWMzZmQ5NywgMHgyY2ZiYzdiZSwgMHgyYTQyNjRiNSwKKwkweGFlNWEzNWUwLCAweGZjYTA5NDBmLCAweDYyMjFhN2ZkLCAweGQ4NWQzYWRkLCAweDM1Nzc4ODZiLCAweDY5OWJkOWY0LAorCTB4ZTQ3YzYxZDQsIDB4ODNmOWU2YTksIDB4NmRlNTA0YTYsIDB4YzgwZTYzOGEsIDB4MzE3YjNmYjQsIDB4YzdlODgzYzQsCisJMHg0MDkwYmEyZCwgMHhjYmZhMGQ2ZCwgMHhmMTdjY2VkMCwgMHg2NjIzZDUzMCwgMHg2ZmUxNmI1NiwgMHgzZTJlOWNjMiwKKwkweDg3YzcyNGJmLCAweDM2MmNmM2ZlLCAweGIzNGNmMjhhLCAweGI4YWMxMmRhLCAweGE5MjliOWRmLCAweDk1Y2ExZjY1LAorCTB4NmNhYzkzNzcsIDB4NTBiZjFkMGEsIDB4NzllMjZmMWQsIDB4YjQ2OTY1YjgsIDB4Zjk4NTkyYmYsIDB4YzNlYWIzMDMsCisJMHg3ZmFkN2VmZCwgMHgxYmM4YjM3MCwgMHhiYzI3ZTZmNSwgMHg3YWU2NmVkZSwgMHg3MjRjYmY2NSwgMHhhNmY5ODc1ZSwKKwkweGI2MzMxOTFiLCAweDU5ZTBiZDcxLCAweDc1MjRmM2M2LCAweDdiZTgyYjZkLCAweGZmNzE1YWFjLCAweGYyODA3ZDMzLAorCTB4ODM1ZjU0NTAsIDB4MWVkYmE3YTEsIDB4NjQ3OTQ2NGYsIDB4YTkzZDZkNGUsIDB4NDhmNzg1ZjYsIDB4OTVkNzg2NWYsCisJMHg1ZWI4ZGI2YywgMHhhMmM4ZDRmMiwgMHhjMjRjMzQ4ZSwgMHg5M2M0MmQ3ZSwgMHgyYTVmZTgyOSwgMHgzYmM0NjRjYSwKKwkweDU3ZDlhNWMwLCAweGNmMDVmYWE2LCAweGY5ZDJiYThiLCAweDFjNTMxZmZkLCAweDJmNDc3MzNhLCAweDcxYTZhNDc1LAorCTB4ZjYyNDhlYmMsIDB4MjNhY2Y0NmYsIDB4YWU5YmRiZWQsIDB4NTQ4ZWI5NWMsIDB4ODBkODdhZDcsIDB4ZWE5NWM1ZjEsCisJMHg1ZWE0Y2Y0OSwgMHhkZTUxMjdhZSwgMHhmM2NmNWIzMSwgMHg5MjZkZDliYiwgMHhkOTU1ZjMxNSwgMHhjM2RkN2M2ZCwKKwkweDdmOTM0NzU3LCAweDk1OGZlNjNkLCAweDJhMDdkNDc2LCAweGUxNGVjZTlkLCAweGUxZmIzZGY4LCAweDc1YjQyNTk3LAorCTB4YWI3YThmZTAsIDB4ZmFmNWQ2MTksIDB4NGRkZjRiODcsIDB4YTRjNTdkZTcsIDB4NjM0YjczZTAsIDB4M2ZlOWJiZTgsCisJMHhmODgzMWJkZSwgMHhhNDVhMWQ3ZCwgMHhmNTQ3NmJjZiwgMHhjMTkzZjM5MSwgMHhhOTJiZjU3YywgMHhmOTE2Nzc5NCwKKwkweGMzZDgzZDZhLCAweDI3NWU2MGQ4LCAweDg1NWJiOWZjLCAweDcwODI2YmJlLCAweDNiOWFmMjg1LCAweDI5YmZkZDc4LAorCTB4ZmE4ZTNkY2QsIDB4MzZjYmViM2YsIDB4YTRlODlmOTEsIDB4YzBhYmY0N2MsIDB4MWEzNzk4ZDcsIDB4YmFjNThiMDgsCisJMHg1OWEzMmZmNCwgMHg5YTkxZDYwMywgMHg5MjZmZGM5MiwgMHhhNzRjZmQxYywgMHhmM2MxMWNhMCwgMHg2ZWYyN2Y1NCwKKwkweDYyM2VjODU1LCAweDNjZWIwYmVhLCAweDg1ODA0NmY5LCAweDdkZjAzYmY2LCAweDNhMDgzNzEzLCAweDhiM2M0MWE2LAorCTB4MzM0MDI1NzEsIDB4MDNkMGViMGQsIDB4M2YyN2JkNDUsIDB4ZmU3MWU5OWEsIDB4MzVlZTBjNDcsIDB4YTk3ZDYzZDcsCisJMHg0MTU4ZWY1ZCwgMHg0ZmIwZTA0MiwgMHg3NzU5ZWQ4OSwgMHg1ZWJjOWM5MiwgMHhkNDlmZDZhZSwgMHhmNTZmNzliYSwKKwkweDkzZGYwOTI3LCAweGVhOGZmOWNmLCAweDljZmY2MjRkLCAweDc3NjI2NzVhLCAweGI1ZjhhOGJhLCAweDYxOWViOGFhLAorCTB4ODMyYzNhZmMsIDB4ZDJmYWViNWQsIDB4ZDQyMzkyZGYsIDB4NGMyOTRjN2YsIDB4N2FkYTY3ZjgsIDB4NTdiYzlhZTMsCisJMHhkZWZmNGY4OCwgMHhhOTZkZTMzYSwgMHgxZWZiMWZlYywgMHgwYWRjMDdhNiwgMHgwYzMyMmVmZiwgMHhlNzA5YTFlZSwKKwkweGZhZWUyOTkzLCAweDkxYzRiZmVmLCAweDI2ZWI2ZDlkLCAweDE1ZDlkODdiLCAweDdmOTQwMmM1LCAweGY3NzllMGVjLAorCTB4NTAzZGZlMzYsIDB4NDk2ZmM0MjcsIDB4N2U3Njc2MjEsIDB4NTc3NzlmMGEsIDB4ZmZmMTE5NWIsIDB4MThhOGMwYjYsCisJMHgwYTU4ZmYxYywgMHgyM2VhYzdhNywgMHhiZmEyYTZkMywgMHg2OWU4MGRlZiwgMHgzYzYzMGViZiwgMHhkMDE2ZGIxZSwKKwkweDcyZGZhMTE3LCAweDlhOTJlOTBkLCAweGQxMmU4OTFhLCAweGNiODUzZWRjLCAweDdmNjEyMWQxLCAweGJhNzJhNTBmLAorCTB4ZTNjODdkOTUsIDB4NWU1MmNmMzAsIDB4YmQwYWIxNWYsIDB4NzVlN2E5ZTAsIDB4Yzk5OTdkZjUsIDB4NGY0ZjlhOTIsCisJMHhkOTdmNTQ4OSwgMHg2Mzc2NDVkMSwgMHhmNjg5NDJkNiwgMHhmYWRiN2VkNSwgMHg5MTY5MTNjYiwgMHg1YjMzZjFlYiwKKwkweGJmYWU0NDRmLCAweGZkMjE4Zjk0LCAweDNiM2U1YmQ5LCAweDRiN2Q4ZjNjLCAweDBmNjNjODlhLCAweDVmZWM3OWU2LAorCTB4YmQ2OTVhYTUsIDB4MjUyMWZhYjYsIDB4ZmFlYWIyYzgsIDB4YmUxZDIxYWYsIDB4ODc0MDhiNDgsIDB4NWM3ZjM4NmIsCisJMHhkZjViNzdmYSwgMHg3ZDUyMzBmZCwgMHg2ZmNlMWFmNywgMHhlMTZlZmU0YiwgMHhhN2U5MjI1NywgMHhmM2JmMzg2YiwKKwkweGZkN2Y5ZTNiLCAweDhhZmYzYzc3LCAweDc3ZmYxOGVmLCAweGZmOTg0NGE1LCAweDAxZmRkNWZmLCAweGYwZmZmNWUxLAorCTB4ZmJlMTAyZmQsIDB4Y2MwZWEyMDAsIDB4ODdiZGUyZjcsIDB4N2U1ZGI1YTUsIDB4ZGI3MTRkNjgsIDB4MDdhMDRiYTcsCisJMHg5ODJmMDlmNSwgMHgxODRlOGVkMCwgMHhhYjYxZWJjMSwgMHgxYjdjOTk0NywgMHgwMWJlZTBhNSwgMHg4MzJjNWYxNSwKKwkweDQxZDYxMWM3LCAweGMwNzZiY2U3LCAweDMwMzM5NjczLCAweGIyZjk4ZWNhLCAweGUwZTI4YzExLCAweDhiYWYzMzRlLAorCTB4NmQzNWJkMzEsIDB4YjdjM2VkMGEsIDB4N2UwZWRkYTYsIDB4ZGYyZjUzNDksIDB4MTc0ZTZkMzMsIDB4NzYyZjYxNzEsCisJMHhjOTQ2NjQ2NCwgMHhhY2VmYTg2NywgMHhkNWE1ZmI2MSwgMHg2YWVhMjlkNiwgMHgwZmJlNTZkNiwgMHhiNDk1ZTk5NywKKwkweDRhYmRlOWRiLCAweGYxNDNmYTFhLCAweDM4ZjVmODdiLCAweDI0NmU3MzNmLCAweGRiOWM5NGI4LCAweDcyNTQxZTI5LAorCTB4NDQyN2JlMTAsIDB4NmUzNmQ3ZmQsIDB4YTVlNjBlNDAsIDB4NjIxN2UwNmQsIDB4YWM3MWYwNWQsIDB4NmIzYzUyMGYsCisJMHhmYmVhNzFhNSwgMHhiZjg3ZDg3ZSwgMHg5MzAzMDllZiwgMHhiZGViOWViMCwgMHg2MjczZWY5ZSwgMHg1ZDRkNmE5NiwKKwkweDdmYzFhMGVmLCAweDc1NDRhZTcyLCAweDhjMGZiOTNkLCAweDBmZjNhNDNmLCAweDMwNDczZTdhLCAweGQwNzdlMDMxLAorCTB4MWJkNTJiMzYsIDB4MWZmMTFhZGYsIDB4MjZiYmZjNzksIDB4Y2ZiYmU3NWUsIDB4YzZlYzg3Y2EsIDB4YjhlMDE5YjgsCisJMHhmMTIxNjc2ZiwgMHgyMzVkY2NlZiwgMHhmOGMwYTgzZSwgMHgyZjNmM2ZhMywgMHgyOTVjNDdhNCwgMHg0NTQ3MDVmMiwKKwkweDE3Y2Q0M2JlLCAweDYzYWRmNWE4LCAweDFjNzI0ZjIyLCAweDc2ZDAyZmYzLCAweDVhMDQzZTYwLCAweDVhZWU4ZmE1LAorCTB4NGZhNTI3ZGIsIDB4ODRmMmZkMDQsIDB4ZGU0M2YzYzQsIDB4NTQzZjNjNDMsIDB4MGJmNDc0NjgsIDB4YjgzOTRmZGQsCisJMHhiOWFiZTcwZiwgMHg1MGJmNWU3ZSwgMHhjNTliM2RmMywgMHgyMDdmMGE3YSwgMHgyZmMwYTNmYiwgMHg2YzFjNmMyZCwKKwkweGQ4NWYzYjQ0LCAweDZkOGQxOTk4LCAweGMzYTdkM2JlLCAweGNhOGNlZjUyLCAweDdlOTUzYWFkLCAweGI4NjhmODkxLAorCTB4ZmRlYWU3NTgsIDB4N2JkZjU0NWQsIDB4ZmZlZWFjMzUsIDB4M2Y3YzNlYzMsIDB4YzdlMGI3NDMsIDB4ZDQ2MWY2MWYsCisJMHhiZjU3MmZiZiwgMHhmOGM3ZGQwYSwgMHg1MjM5NTY5MSwgMHhjNDE2Njk1ZCwgMHhkY2U3MDhjNSwgMHg4YWI3MGUyNiwKKwkweGE1N2U1OWVmLCAweDYyNzNkZjBjLCAweGI2MjM1NzZmLCAweDY1MzlkNTA1LCAweDM5YWY3Nzk0LCAweDliZmU4OGQ3LAorCTB4YmVmNzYyZTcsIDB4NjY1ZjI5NWIsIDB4OTg5ZTMwNTQsIDB4YmJjZGExZGQsIDB4ZmU3ODMyZDksIDB4N2Y4OTU1ZmQsCisJMHhhYjFkZTlhZiwgMHg3MGI4ZjhhNywgMHhjN2Y4OWVhYywgMHhmMTRjY2IzNiwgMHg2NGMwY2RhYiwgMHg3MGE3ZjYwYiwKKwkweDNjYTBhOGJmLCAweDZjZmIwY2IxLCAweDgzZjkwMjVhLCAweDg0OTVmYjA1LCAweDc5ODI4M2Y5LCAweGE1ZDhkYjMwLAorCTB4MmJhNzg4NDksIDB4N2NkNTU5ZDUsIDB4NzM5MzE2ZGEsIDB4ZWZmM2QyM2EsIDB4MWVkNmIzYWQsIDB4NGRmYjQyM2MsCisJMHg3OGE5NzVkNSwgMHhiZGE1ZWI1MSwgMHg3ZGQ1NTlkNSwgMHgyZmYyOWUwZiwgMHgzYzM0ZmIzNSwgMHg5ODMxYWVmYSwKKwkweDc5ZGMyYzdmLCAweDVmZjYyOGMyLCAweDgyNzM1MzVhLCAweDFkYzJkODc1LCAweGFhZmVhOGU3LCAweGY1M2Q1YmQ2LAorCTB4ODZhZmM4ZTcsIDB4OTI5Y2U4ZTcsIDB4ZmQ3OWNiNmQsIDB4ODFjMDNiNzUsIDB4ZGJhYzJiNmQsIDB4MDZmY2YwMDksCisJMHgxYjZkOGRkNiwgMHhiZmFmMWJhYywgMHg1YThmM2NiMSwgMHhiNTA3NzJmZiwgMHg1MzE3OTZiYiwgMHg5M2VjMDg1YiwKKwkweGVkYmFjMzY2LCAweDJlZGJhYTM5LCAweGRmNjNkM2VmLCAweDM2ZjVkNTI0LCAweDI4OTVhZWNiLCAweDNmNzUyMWVmLAorCTB4ZmRkNzg3ZWEsIDB4YWY5ZTY4ZTQsIDB4ZDAzN2VjZjEsIDB4ODM5ZTBjNzcsIDB4MjVkZmQyMjYsIDB4MzFiMzczNmQsCisJMHhiMGVhZjgzZSwgMHhhZWUxMWIzYiwgMHgwODViYmFjMywgMHgzYTc1OWM1ZiwgMHhjNjZlNzhjYywgMHg4Y2MzOTc1OSwKKwkweGY2YzJiNmY1LCAweDBmZGM0NmQzLCAweDE4MGZhNzUzLCAweDkwMDYxZjMxLCAweDQ1OTZlM2E3LCAweDdjNzNiNmNmLAorCTB4ODk1YjZmZGYsIDB4YzU3YmYxMTksIDB4ZmZlYjU4ZmEsIDB4M2RmZDhmYWYsIDB4YTBhY2IxZjUsIDB4MjkxZTkyN2MsCisJMHgxYjljZTk3MCwgMHgzNGVmZGRiMSwgMHgxM2QxMGZjZiwgMHg5ZWJjNWRhYiwgMHg1ZjdmYmFiMiwgMHhhZTc1YzM5MiwKKwkweDIxOTUwOWJlLCAweGYzOTQzNWYzLCAweDZjNmQ4NWZjLCAweGY1ZTg3MzdmLCAweDFlMDYxOTI1LCAweDQyMzllMDQ3LAorCTB4NDFmZmRlMTEsIDB4OGUzNWRkMWYsIDB4ZjQxZmRkNWYsIDB4OWQ1N2UwODksIDB4ZWZhMjY0M2QsIDB4MmM3N2RhNDksCisJMHhjNDE4ZWVjOCwgMHgxZjM0M2YwNSwgMHgzMmJjYmFiNywgMHhmN2NmYmYxYiwgMHhiOTYyOGQxZSwgMHhjOWE3NWYzYywKKwkweGJhYjBiMWM3LCAweGI5Nzk2ZjVjLCAweGE3M2FlNTk5LCAweDc1MGJmNjk5LCAweDBlZGRhMTY1LCAweDdkMzE5ZmNmLAorCTB4ZWJiNzE2NTcsIDB4OWU3ZTc0Y2UsIDB4MTU5ZDM3ODMsIDB4YjlmNTFlYjMsIDB4N2JkZjMzZGYsIDB4OGNmYzYxZmQsCisJMHgwYmQ5MWQ3MiwgMHg1MDU3NGViNSwgMHg4MWNiNjdhZSwgMHgxOTk2MGIzZiwgMHgyYjlmNTQ3YywgMHhmYmEwOWZkNywKKwkweGIwNmM2ZTIyLCAweDlmMjNhNDE2LCAweGI0NjgzZjFmLCAweDNjMmQ1ZTYyLCAweDdmMjhlNjNmLCAweDNjMmZhOWExLAorCTB4MWM5MWE4ZWYsIDB4ZDUyYmFjYjgsIDB4ZTA3ZGQ0ZjEsIDB4NDdkYjVhYjMsIDB4MDg2ZGJlNjMsIDB4MDUxYTZlNmIsCisJMHhhZmU5MGZjZiwgMHhlOWZlZTJiMywgMHhiZTNjZjU5ZSwgMHhmODQwYmJmZiwgMHgzNjc5ZTEzOSwgMHg0YmY0MzNlNCwKKwkweDcxZjBmM2MyLCAweGUyMGY5Y2U5LCAweDljZmRiOWQyLCAweDBhMmRiNDgwLCAweDE3M2VhM2NlLCAweGQyZjMzZmNlLAorCTB4ZjBiZjc1YjUsIDB4ZmRjNTUzZmIsIDB4ZDU4MmYyODYsIDB4MTNiZTkxZmQsIDB4NDllZDBjNzQsIDB4YTlhOTc5NDMsCisJMHgzOTdjYzg3ZiwgMHhkYjdmN2NlOSwgMHg0YzFmNTgxMywgMHhmMjBmYWQwYywgMHg1ZDc4NjAzYSwgMHg4NTczZDU1MCwKKwkweDgzMWQ3ZmVkLCAweGZhMDc1ZWY4LCAweDI3OThlZDFhLCAweDBhMGZkNzk1LCAweDhmZDkyOGRmLCAweGE3MDgyMzdhLAorCTB4N2E5NTNmZDgsIDB4MDRlYzdiZjksIDB4NzBjNWQ3YzYsIDB4YTc3NzljZmYsIDB4ODJiOWY5NDQsIDB4OGFlZTVmMDksCisJMHg4MTczM2U4MSwgMHg3NmJkNDNkZCwgMHgwYjJhZmZiMCwgMHhmYTA5YTNlYSwgMHhjN2FlZmMyMiwgMHhkNzJlOTJlMywKKwkweDM0OWViMDk5LCAweDcxZWFlZGY1LCAweGUxNDE5ZGY4LCAweDIzMGU0MzFkLCAweDMwYThlZTVkLCAweGQ1NDBmZWQwLAorCTB4N2I3ZDRkZWUsIDB4N2Y3ZTE4ZmEsIDB4YmM2OGNhZTMsIDB4Y2MzOTI3OWYsIDB4MmYyZjVlMGEsIDB4YjdlM2ViYzUsCisJMHhjZTkzMzFmOCwgMHhhMDc0MjIyNiwgMHg0ZjA3MDNjZiwgMHhiNjZlNTFlYSwgMHgxODI1ZGM5OCwgMHgxMTRlMTczZiwKKwkweDZlMGFhNjc1LCAweDliNjhlZmE3LCAweGU3ZTQ2MDYyLCAweGVlZTZlZDY5LCAweDFmMjhhZmNjLCAweDQ4NTZkZGQ0LAorCTB4ZWUzYjIzZjUsIDB4YjQxNDE4N2YsIDB4YzEzYjg1MzcsIDB4M2I1ZWM1OGUsIDB4ZGQyZjM2M2IsIDB4MTFiY2Y4NGEsCisJMHg2M2MyMThlYywgMHhmNGViYzI5YiwgMHgxMWNmZjRlMSwgMHgyZWNkZWZmNCwgMHhkMTg3YTZmNSwgMHgyYjM5ZTBmZSwKKwkweDZhNTI5ZjI4LCAweDYwYWUzYjRmLCAweGZhMzg2N2RlLCAweGMyMWUxMmViLCAweDM1ZmYyYmQyLCAweGQwOTZmZDBiLAorCTB4NGViNzNmOGIsIDB4ZmJhZjdiZjAsIDB4MzlmZjVhYTcsIDB4ZjRlNmE2NzUsIDB4NjM3NTFkZmYsIDB4ZWI1MmZlMzUsCisJMHg3NmJjNmE0ZCwgMHhkYTgxZjA0NiwgMHgzZmVkMTU5ZSwgMHgxYTAzN2RmYywgMHgzN2RmODhkNywgMHhkZjdmMjJkOCwKKwkweGNlODViYjMwLCAweDZmYmY1MTI5LCAweDI1NjQ2YmQ4LCAweDNmNzExMzViLCAweGM5ZGVmOGFkLCAweGE0ZmM4NTM3LAorCTB4YmVmZjRmYmQsIDB4Zjg4OTE3ZjEsIDB4Mjc4NDkzYmQsIDB4M2MzZDgwNmIsIDB4M2Q1ZTc2NGMsIDB4ZWRhZWFlYWYsCisJMHg2ZDZmOWU3MywgMHg2YmMzZmJlMSwgMHhmYjlmMjM1YiwgMHg3N2RhMDM3MiwgMHgyNzI4ZWY3OCwgMHgyYjUxYmQyMywKKwkweGQ5OGVkYmY2LCAweDk3NDRlYTI2LCAweGViZjc5NmYzLCAweDFlOTZmMzQzLCAweGVlYTQ5MDI1LCAweGJjNTFmNWUzLAorCTB4ZjY2M2NkYTcsIDB4NTNhY2I3OTYsIDB4OTZhZmNmYmYsIDB4YWUxZjY4MWMsIDB4NTliNzBmYjQsIDB4MzVlZGQ3ZWMsCisJMHhlNmZjZTk4ZiwgMHg3OWUxYjk3ZCwgMHhiNWQzZjdjYywgMHg2OTkzOWM3NSwgMHg3NGZmNWE1NiwgMHgzNmU3NDRiNywKKwkweDFhYWU3NDk5LCAweDg2ZmZiN2RhLCAweGNmYjQ4ZDY0LCAweDg3NjEwYmZiLCAweGM4M2E4YmM2LCAweDNmOWM4ZGNmLAorCTB4NDQ5MzdlN2UsIDB4NzdlMGRmZGYsIDB4OWZmNzQ4NzgsIDB4YzNiZmMxYmYsIDB4ZmYwMTc5ZjksIDB4N2JhZDQ3MGUsCisJMHg1Y2Q3ZGZhOCwgMHhkMDdiYWMxZiwgMHg3N2VhNzdmNywgMHgzNjc3ZWEzOSwgMHg1MzlkNzdlYSwgMHhiOWQzNDdkNiwKKwkweDVhMTg4ZmM1LCAweGViZGZiOTUyLCAweDNhN2NiZTI1LCAweGU4ZmRkMTlkLCAweDQ5MWY1NjI4LCAweDk3YTY4ZjVlLAorCTB4ODQ1ZTlkM2MsIDB4ZGM3OWFlZTMsIDB4NDIzZDI5N2IsIDB4ZTMwYzNiZGMsIDB4MjE4Zjc4NDgsIDB4M2M4NWUyMDMsCisJMHgzMDVlMjkxNiwgMHhlMjY5MTQ2NSwgMHhjNzg3ZWEwNSwgMHhlZWFhZDcwYiwgMHhjZmMwYTRmMSwgMHg2ZGY3NWMzNSwKKwkweDZiYzZmYzkxLCAweGRmZWJmZjM4LCAweDQ1YWZmY2YxLCAweDczMmFkYmEyLCAweDFmMTdmM2U0LCAweGJlODQ5MGNjLAorCTB4Y2UxNzllZDcsIDB4YzkyZjdjN2EsIDB4YTQ5MzdhZWQsIDB4ZDUzMzcwN2MsIDB4NGY1NDBkZDMsIDB4NTM2YWY1NTcsCisJMHhiYzdmOWYyYywgMHg2ZGE5YTdjOCwgMHgwYzliNjg5NSwgMHg0YjY1ZjM5MSwgMHg2NDY3ZmRjNCwgMHg5M2U0MzhlNywKKwkweGYzNmEyZjgxLCAweGI0NWI4Mzk3LCAweDViMWJjYmY5LCAweDBjODhlN2I1LCAweDA5Y2Y2YmYxLCAweDNkYWZkYzI5LAorCTB4YTAyOGE2M2YsIDB4Zjg2NjNmM2QsIDB4MzFmOWVkNTEsIDB4ZTdiNDNhMjMsIDB4OTlmY2RjYzcsIDB4NWI5OGZjZjYsCisJMHhjYmY5YjRiYSwgMHgxZWRjMmY1YiwgMHg4ZmE3MWRmNiwgMHg5YzA5NDc5ZiwgMHg5OTVjZmExYiwgMHhiOWQ4NWU2OSwKKwkweDczYjBiYTM1LCAweGNlYzNhMjZiLCAweDFmM2IwOWFkLCAweGUzOWJjYzQ1LCAweDdlNzYxM2VkLCAweDM2N2Q3NjhkLAorCTB4YmEwZGM3YWMsIDB4ZWZkYzdhZmEsIDB4MWVhMjI4ZmEsIDB4Y2Y4Y2NmZDcsIDB4ZGZkZTUxM2QsIDB4ZmE5YjdlOGMsCisJMHgwOTdmZjUzZCwgMHhlMTkxM2IzZSwgMHg3MWY0ODE1ZSwgMHg4NzViMWNhZiwgMHgyMmIxZDU3YywgMHgyZWYzMGIyYSwKKwkweDcyNjk5NWVlLCAweGZiODNmMDIyLCAweGE3YmU4OTUxLCAweDQ2OTk1ZDJmLCAweDM1ZTY3YmZiLCAweGE5M2YyMTBjLAorCTB4NGZjOTM5ODAsIDB4MTE2NzY1OWEsIDB4OWNkODc5Y2YsIDB4M2RlY2Y1YzEsIDB4OGM2NjA2ZjUsIDB4NDYyOTk3YzcsCisJMHgzM2QwYTgxZCwgMHhjMzViMTI0ZCwgMHgyMjY1OGRlZCwgMHhlMzM1NjFmMCwgMHhmYWJiNTg3YywgMHhiZGQ1MWM3MCwKKwkweGM4NTlkZDg1LCAweGViYWFjMTUxLCAweDBlNzlkMDE3LCAweGE4YmRlN2UxLCAweGM2MjNjNjc2LCAweDYzMTZiMGQ1LAorCTB4NjhiYmNjMWEsIDB4NDdjOTNiNmQsIDB4MWUzMDc5ZjgsIDB4ZWExY2Y2YjYsIDB4YjA5NmRhZTEsIDB4N2RiN2Y1ZWIsCisJMHgxZmY3ZjhjYSwgMHgzYzhiZjQ0NiwgMHgyZmZiZGFhZCwgMHg5OWJhODg2NCwgMHg3ZTUwMzk4MywgMHg5YWM3ZjdkYywKKwkweDE1MmNjZmQwLCAweDU2YmI5OWY4LCAweDcwOWQ2MmIyLCAweGQyN2I0MzVlLCAweGI3OWZkMDVkLCAweDRiYjhhNjVmLAorCTB4NzFlYjBmYzUsIDB4M2EyMGNmNGUsIDB4ZmVmY2ZkNTcsIDB4Y2ZhM2YyNWMsIDB4OGUwYTRhMmIsIDB4YjhmMWM3NzMsCisJMHg4N2JiZDI0MSwgMHg3NjU5ZjVlMywgMHhlNzNjNzBmNywgMHg1OGMzZWJhYywgMHg5ZDg3ZjZmYywgMHhkZjkzMjBiOCwKKwkweDNlNTBiZTAwLCAweDk2NTY2ZmY5LCAweDlkZWY5YTFmLCAweDYzMjZiMDZiLCAweGVlY2JjNWJlLCAweDUzNzhhNTRkLAorCTB4N2UyYWJmYzQsIDB4Njc4ODI2M2MsIDB4ZjEwZmIwZTMsIDB4NzQ5ZjVmMmEsIDB4OTFmYTIyNDksIDB4ZmYwMmViNjksCisJMHg3ZTAzZGYwOCwgMHgyNmIzYzUxMCwgMHg3ZTgxNWE2NiwgMHgzOWE1NjlkMCwgMHhkNzYwNWQxOSwgMHgyZmYyMDY0MywKKwkweDQwOTJkOWVlLCAweDBkM2RjNWZlLCAweDFmM2M0NjY1LCAweDA5NmQ5ZWUxLCAweDc5OTY5ZmI0LCAweGJlMzA0NzlkLAorCTB4YTI3OWU5NTUsIDB4MmE1ZjcwYTEsIDB4NGI0ZjdiY2MsIDB4ZDJkNjQzOGUsIDB4ZDEzN2U0ZjEsIDB4MDlkMzUxNzEsCisJMHg3YjI3N2U5NSwgMHg0OGM5ZGZhMSwgMHg2OWJhMDNmNCwgMHg0MzIxZmZhZSwgMHg2ZTgyMDlmOCwgMHg3ZDNiNDFlYywKKwkweDY0YjE1N2U3LCAweGZmZTYyZTZmLCAweGU5OWJkN2NlLCAweGM2N2EyYmY3LCAweDM3YWU1ZTA1LCAweGM0ZDI2ZjJiLAorCTB4MmU3ZGU1M2YsIDB4YmU3NDc1YzcsIDB4MjJkYWY3NzcsIDB4ZGQzODVmYTIsIDB4ZGU2N2ZmY2EsIDB4OGFmZWZjNzAsCisJMHhhMTk2M2VmZCwgMHgxZmFiMzFmZiwgMHhjNjNiNzM5YiwgMHhiNzk3MTJjOSwgMHg5NmM2YWI1OSwgMHhhNWYzYmZhMywKKwkweDhiNmZjZmQwLCAweGM2MzBlOTM4LCAweGJmZDdlMDQ5LCAweGY0MTI3MThiLCAweGQyNzExM2RmLCAweDQxMjcxODA3LAorCTB4NDljNjIxZmIsIDB4ZTcxNDllZDAsIDB4MDc3MmFhMDUsIDB4ZmI3YzQwOGMsIDB4YWZiNzkwYjUsIDB4NjM3OGQ0MzMsCisJMHhkN2U2MmE2OSwgMHhkZGU3ZmZjYSwgMHg1ZjE1OWQyMiwgMHhhMzQ5ZTNmNSwgMHhlYzliMTkzMywgMHhkM2Q3ZmFkNCwKKwkweGViZmQ2OWE3LCAweDRjNzU4MzBlLCAweGQ1ODFkYTJhLCAweDhmNzA1ZWJjLCAweDc4Y2Q2NmViLCAweDk4OGM1N2E2LAorCTB4ODU3OTYwZjcsIDB4OGY2NGViYzEsIDB4M2RlNjIzMTQsIDB4NmJiMDRjNjYsIDB4OTRkOWRmYzYsIDB4MzJkYmU5YWUsCisJMHg5NGY3NWExNSwgMHhlYjlhN2VmMiwgMHhkNDBjNTc3NywgMHgwMDVlZTdmNCwgMHg1ZGY5MGNjNywgMHg1OWY5MjYyOSwKKwkweGM2MjZlMjJhLCAweGFjNWQzOThhLCAweGY1OTdlYzdjLCAweDAwMWU1M2MzLCAweDY4M2NiZjc4LCAweGY0ZTFmYmEwLAorCTB4Yjk1YWU5NTAsIDB4ZWU3Y2E2NWUsIDB4ZjMxMmY1YmMsIDB4OWIyNzg4MDIsIDB4N2Q3YzkxZTcsIDB4Y2U5NjM0N2UsCisJMHg1MmRjNjk5MSwgMHhmNDMxNTZmOCwgMHhkMDMxNmM0ZiwgMHgwZDEzYjJmZSwgMHg3Y2YxNDdmNiwgMHg5MjViMTNlYiwKKwkweDNkYmJmMGUyLCAweGZjY2NhMzc3LCAweGE0YWQ3N2E0LCAweGNiNzlkNTc3LCAweGVmZDA1NjFhLCAweDQ1ZjVjYzI2LAorCTB4Y2MwZjUwMzksIDB4NTY3ZGUzZGQsIDB4NGRkZmEzZWQsIDB4NGU1MDY2NWIsIDB4YmYzZWM4OGUsIDB4MTI3M2Y0NDQsCisJMHgyOTliMzc3ZSwgMHg4MTk5ZmU0ZiwgMHg5MmE3ZjE3OSwgMHhiODcwNzVlNiwgMHgwMzU4OTMzZSwgMHg4ZjliNGZmNiwKKwkweGUwMDA3ODBkLCAweGI5YjEzMzM4LCAweDk1N2U4NzRhLCAweGY0ODkzMDdjLCAweDQzMzIyYmU3LCAweDYyNThhZGJlLAorCTB4MTc4N2YzYTAsIDB4YzQ2ZjI3YmUsIDB4ZDIwYTkzM2UsIDB4ZmE2NWJkMzksIDB4MzliNjBmN2QsIDB4NWQ2N2U2OGEsCisJMHg2ZTMwMjFjMCwgMHg5ZWEyMmZlOSwgMHg1ZWYyMjM1ZiwgMHg2MGY1ZmZkNCwgMHg5ZmMxMWFkZiwgMHgyNTlmNDdjOCwKKwkweDAxMDI2NzMwLCAweDdmMGZmM2NiLCAweDc1NDQ5YzNhLCAweDdkM2UyMDlmLCAweGZmZWViOGY5LCAweDY0YzZiYmQwLAorCTB4NTRmZWZkMDIsIDB4ZmQyN2NiZTUsIDB4YzkxMjYwZjYsIDB4NGZkZTM4NTUsIDB4ZjJmZWI5MWEsIDB4NDE0ODFjYTIsCisJMHgzMzk0MTliZCwgMHgzY2Q1ZmRmZSwgMHg0MWQ5MjM4MywgMHgxYTY4NmI3YSwgMHg2YjkzYWRlYSwgMHg2NDY3OTQwZCwKKwkweGFmMWM2NzdhLCAweDdjNDJiZGNiLCAweGE0ZTdiZWFjLCAweGYwODMxOTVlLCAweGExY2E2YzlkLCAweDU5ZWYwY2VmLAorCTB4NDNmZDkzMmIsIDB4N2RlM2UzZmUsIDB4OTcxZmZmOWMsIDB4N2JiZjE4ZGQsIDB4YzYzNzI0OWIsIDB4NzM3Y2UxZWYsCisJMHhmNGUxOTJkZiwgMHgxMWIzMDQ3YiwgMHhlYTdhMjMyNywgMHhiYzY5YjM4MSwgMHgxN2Y2YTEwZSwgMHgwN2JmZTRlZCwKKwkweGU4NzY4NmMwLCAweDVkMGUwZGE3LCAweDlmN2YwMzQ3LCAweDRlNzM1OGJiLCAweGRmZGY0ZDc5LCAweDljMjNjNzFkLAorCTB4MTdlZmVmY2UsIDB4OWNlOWRmOGYsIDB4OWYxMzIyM2UsIDB4M2NkYmVlOWQsIDB4ZjllODE1MmMsIDB4YjBkNzZlODUsCisJMHhmOWZmYTAwNywgMHg3YTI3ZWY0NCwgMHhmYmI0NmZhNCwgMHg2MmViYzQzZSwgMHhmYzJjZGFkZCwgMHhlZGIzYmE2ZSwKKwkweDg2NmY0N2UzLCAweGIyZjRmZWU3LCAweGJlNjI0MWMxLCAweGM3ZjQ4OTJjLCAweGIzMGJjZGEyLCAweDIxYmJlOWJmLAorCTB4Nzg3ZGZjYzYsIDB4MjY5OWQxZGUsIDB4MmIxNzNlMDEsIDB4OWYzMDYzMmQsIDB4ODRiOTlmMzAsIDB4NTFmOGUyM2QsCisJMHg4NmJjZjBiNiwgMHg3M2NmMWQ3NSwgMHhiYjE0NWM3YywgMHg3OWI0ZTMwNiwgMHg4ZjhjNzk2MSwgMHg4ZDgzZjdjNSwKKwkweDZmYzY5Mjk5LCAweGY1Yzk5ODM4LCAweGU3MWQzY2Q3LCAweDM4Yjc4ODZmLCAweGIxYTYzMWJmLCAweDVlZGVhYTAzLAorCTB4MjIwZmJmOGMsIDB4YWE4MGVkMDcsIDB4MzM1ODZiYjcsIDB4YjNmZDZiOWQsIDB4ZmYzNGJlY2MsIDB4YmY0N2M5NDIsCisJMHgyNzg3NTIyMywgMHgyYWY4YzM1NCwgMHg2YjYzOGYyYiwgMHg1MWYyOGM1ZSwgMHhlNTgwYWE5YywgMHg4ZTBmZjEwYiwKKwkweGU3ODEzZWExLCAweDdlNWYxOTE2LCAweDAxNzdkOTBhLCAweDg2NzVmMDBiLCAweGMxOTNmYjhkLCAweGU5YzgxNTU3LAorCTB4YWNhYTdmNjksIDB4MzQ2YzFiMWIsIDB4ZmI4MWMxYmYsIDB4NzkwODE3MTksIDB4N2M5NjZkYWQsIDB4MjUwNzVlN2UsCisJMHhjYzVmM2EzYiwgMHhkMWQ4NWYzMywgMHhjM2Q0ZmI3MCwgMHhhM2Q5ODUyZSwgMHg5Nzc2NjFmOSwgMHgyY2VkNmIzNSwKKwkweDc5ZTc0YmMwLCAweGMzODZmMGFiLCAweDI1ODk4YWU5LCAweGU2NmEyYzNjLCAweGRjYWIzZWZiLCAweDA4OTM3ZGJlLAorCTB4MTQwMWM5NmUsIDB4MDJjZjAxZWQsIDB4ODA5NTFhZTYsIDB4Yzc5MTc4ZWIsIDB4ODVmMGUxZTksIDB4YmMwN2FiYWYsCisJMHg3MGUxOWQ2MiwgMHhkMWNlMzk1NywgMHg1YjM1ZTVmNywgMHhmODU3YzIyNCwgMHg4NDdhNTQzYSwgMHg1ZDJhNzFmYiwKKwkweGJmMWNiY2FhLCAweGQxMTI2ZDU1LCAweGZmNjVkNGYzLCAweDUwZmVkMTkwLCAweDBiNTg2Zjk1LCAweDc5ZTQyZmZjLAorCTB4NWQ2MDhmOTUsIDB4MmRiZjUwOTMsIDB4MzhmYTA3NTgsIDB4MmQzZjI3YTcsIDB4Yzg3MTJkNjIsIDB4ZGZjYzc1MzcsCisJMHhkM2Y3MjU4OCwgMHg0NzNiOTZmZSwgMHg0ZTc5ZTBlNCwgMHhhOWRjZTk4NywgMHg1NzNmOWIwYSwgMHhlY2E4ODA5NywKKwkweDk2ZmNiNDdjLCAweGUzODc5ZjIwLCAweGJkZjQ0YWZiLCAweDUxMzFmYzVhLCAweDAwZTdhMDY3LCAweDkwNWZmMzVmLAorCTB4OTA5ZmZiZTksIDB4ZjYzZTIyNzEsIDB4N2I1NTdjOTIsIDB4M2ZhYzQ2YmQsIDB4YjlmOWViNTcsIDB4ZDM4MjU3NzIsCisJMHhjYmJmZTdhMywgMHgwNTc4NDU3NCwgMHhkYzM1YWYzZSwgMHg3ZjVhNTlkMSwgMHhlNTc3ZTgzOSwgMHg1YmQyNDdjNiwKKwkweDA5OGYzYWVhLCAweDdiNDU3MzNkLCAweGM1ZGM3N2FmLCAweDQ5MjdkZWM4LCAweDRkZTlhZjk4LCAweDNiMDk1NzdmLAorCTB4M2VlZDFmM2YsIDB4N2ZhYzlmYjQsIDB4M2M2YmNlOTUsIDB4M2E1NWVlYjUsIDB4ZjJmOGQ1OWYsIDB4ZjBiN2RhN2MsCisJMHg4Zjc5ZmFjOSwgMHg3YzRmZWZlMiwgMHhkOTFlNjViMiwgMHhhYjRmMDVmOSwgMHgwYzZkZGU3NiwgMHhkNmNhMWZmNSwKKwkweDVmZWU3ZGNmLCAweDM0NWY2ZjkwLCAweDZhYjk1ZDUzLCAweDQxYzQ1YjhmLCAweDljNjE1N2EwLCAweDUxZWI5ZWIyLAorCTB4ZDVlYjhlYjYsIDB4MDcwZjY4MDUsIDB4MGViYzNkOTEsIDB4ZTU1ZmRkYzcsIDB4M2ZmOTBlYmUsIDB4YzlkOTNhZTQsCisJMHg3ZmI5ZTdmYiwgMHhiZGU2MTNiNSwgMHg4NzE4YTVmZiwgMHhmNTZjOTY5NywgMHhkNWI0YmNmMywgMHhmNmIwZjY4ZiwKKwkweGQzOGUwZmRlLCAweDA3Yzk0YmVmLCAweDZhODFmYmRmLCAweDEzOWUxOWZmLCAweDQyY2UyZWU1LCAweGJmNzYxMzM5LAorCTB4NjU5OGRlNTYsIDB4ZWMyMjNiNDUsIDB4ZGYxYjNmYzQsIDB4YzliZTIwZjcsIDB4ZmVmOGUyYmYsIDB4ZjllMzg5YTgsCisJMHhlZjFjYjVlMywgMHg1MWZhNWI4ZCwgMHg1MzUxZmFmYywgMHgzZWFiZjIzZiwgMHhmODRiOTJkYSwgMHhmODAzNWNhZSwKKwkweGQxNWFiZjI2LCAweDgwNGQ1NWZhLCAweDEwMWY4YzZmLCAweDNkZDcwMGRmLCAweDZmODExNDdiLCAweDEzNzdjNzA3LAorCTB4Y2I1YjMzYzcsIDB4NzgxZWNhZGIsIDB4ZWJmOWQyZjUsIDB4OTQ3YmZmZjcsIDB4Y2Y4NGZkMDMsIDB4OWZmMjdlY2MsCisJMHhkMzJhZGIzZSwgMHhkZmFhNjk1OSwgMHg3ZjNkZmFhNSwgMHhhMmNmY2Q2NiwgMHg3YmUyYTY3ZiwgMHgzZTQwODBlMSwKKwkweGM3OGE5N2VhLCAweDc4ODcxNzdmLCAweDI3OTViODVmLCAweDliZTA3YTRmLCAweGJjZTg1MzM5LCAweGJmZWZjYmZkLAorCTB4Y2UyZDI3ZWMsIDB4YmU5M2Y1MGEsIDB4OThlYTVkMjUsIDB4ZDcyYmY2OGIsIDB4Zjk2NjM5ZTEsIDB4ZDVhMmZiMjEsCisJMHhkZjBiM2ZkZiwgMHg3Y2YwYWQwNywgMHg5ODczMTQ2NSwgMHg0NjRmMDg0YywgMHhiOWI4ZWZmOCwgMHhmZThiZWUxOSwKKwkweGVjZGNmNzJhLCAweGJiOGU0OTdiLCAweDMxYzdiZjM0LCAweDc4MGRmOTg5LCAweDkxNmIwMTllLCAweGVkNGJiZjY4LAorCTB4MjU3MTI1ZDIsIDB4YWQyZGNmMGMsIDB4NjczNjM4MjcsIDB4NjlkZjNiNzEsIDB4M2YyMmNhZWUsIDB4YzcxNDY3NmQsCisJMHgzNTliYThmYiwgMHgwN2E0ZDFmMSwgMHg0MjNmZjExZCwgMHgzZjIwZTAzZiwgMHhkNzkyNzhkZiwgMHg0OWNlZjk0MSwKKwkweGFiNTI0M2M1LCAweGZmM2FlODQyLCAweGI4ZDczZjAyLCAweDljYzQ4MmVhLCAweGMwOWRmYzc2LCAweDYyMmZiNGIxLAorCTB4ZGExNGYzN2UsIDB4NmQwNTUwMDcsIDB4NWVmOGU4NTksIDB4OWNkYmNmYmUsIDB4YzdhMmYzYzUsIDB4NzgwNTRkNzEsCisJMHgxZGY4OTM5ZSwgMHgxYTllNzEzYywgMHgzNzAxNzFkNSwgMHgzYTJlY2RjNywgMHg5Mjc4ZWY2ZiwgMHhjOGNmYzFjOSwKKwkweDA3ZGZhNzhiLCAweGMxZTg1YmI4LCAweGI0N2Q5Njk5LCAweGYxZTYxYzhmLCAweDdiOWUxYjMyLCAweDA1MDFhZWZmLAorCTB4ZjFkNGMyYWMsIDB4NzNjNjg2MzIsIDB4YmVmZTNmNTIsIDB4ZmY1Yjg3NDksIDB4ZGYyMmFjMWIsIDB4YmQ5MmVkYmIsCisJMHgzYTQxM2MyNywgMHhmMzgxY2Y2YSwgMHg4ZmNlNDc0NCwgMHhmZGM1OWFiYywgMHhhNGU5YzkyOSwgMHhjYzE0NDQzYSwKKwkweGRmZWYwZDFkLCAweGViZjBhNTllLCAweGRiM2JmZjYyLCAweGVkOGNmNDAwLCAweDdhOWM5ZTc5LCAweDM5Zjk3OTlkLAorCTB4ZjBhNTM1YjIsIDB4NjcxODliZWYsIDB4YjIxYmQ0MjQsIDB4MzFhZmQzNGUsIDB4OWU4N2ZiZjIsIDB4NWQ3OTNkOWQsCisJMHgzMGVmNjMwNiwgMHhmNDNmN2FjMCwgMHhmZjhmMTk1MywgMHg3MGZiYzZlNywgMHgzYzY0ZDdkZiwgMHhhZDg2Y2E2ZiwKKwkweDc2ZWFmODllLCAweDc4ZWFmMzNkLCAweDdhYzE2NGRiLCAweDZhNjczODg4LCAweDFkZGZjMDkyLCAweDBmMWZjY2M1LAorCTB4YTAzZmVmYmMsIDB4MmVmMTZmM2QsIDB4MWQ3ZmNlYmYsIDB4OWUzMjc1ZTAsIDB4ZTc4Zjk3NjcsIDB4MmIwNjI5ZDYsCisJMHgyZTU1YzdiYywgMHg1MmJjNjAxNSwgMHhjMWRiZjJiMywgMHhjMmVjZjFkYiwgMHg0MjQ2ZWJjOSwgMHg3MGUzYTc1ZiwKKwkweDI5ZTc4MGZlLCAweDFlZmU2MjY2LCAweGNmNWIzMGYwLCAweDljMDVjOGY2LCAweDhmMTc4OGRlLCAweDIwN2RhMTRkLAorCTB4ZGEyNDRiNWQsIDB4ZWRlNmEyYWYsIDB4MDkwZjdhNTUsIDB4OGU4OWVkZTYsIDB4MzA3YzA1MzMsIDB4M2UxYzUzNGYsCisJMHhhZjRjOGM2ZiwgMHhiOGQ0YjIyZiwgMHhlZGUyODViYSwgMHgxNzNlNDJjNSwgMHg0NWI5NzJhYiwgMHg2Yzk2OTcyYiwKKwkweDhmZjQ0NzQxLCAweDQ1MzM2ZjAxLCAweGY5YTRlYjBiLCAweGQ0N2JjNDZiLCAweGQ5Y2RkNzczLCAweDM2NzM3ZTdjLAorCTB4ZjJmZmUzOGYsIDB4NTk4ZmJlNzcsIDB4YWE4ZWY5ZjgsIDB4ZjE0NmQ2N2MsIDB4NGZmN2Q1ZjksIDB4YjY1NDZkMTYsCisJMHhlMTU1ZTY4ZCwgMHg3ZmQ3Y2YwOSwgMHhmOTE1NjFiYSwgMHg2NzdmZDU0OSwgMHhkZjQ0M2ViZSwgMHgzMjRjNWQ1MCwKKwkweGVhMjI1NTc2LCAweDQ5OTllZmE1LCAweDViMWE2NmVlLCAweDNkMmRlYjcyLCAweDE1ZTdhOWM3LCAweDgxODBiMDU2LAorCTB4YmU0NDBmZDcsIDB4ZDFhM2Q4NGMsIDB4YmZjZTg1YjIsIDB4ZWZmODkwYWMsIDB4YzQ5Njc2NzQsIDB4ZTcyMDc1N2EsCisJMHhiZjdjY2NjNywgMHgxZmYwNzllNywgMHhjMDE1M2RmMSwgMHhlZjMxZjgxNywgMHgyN2ZiZjhhYywgMHgxMTU4M2ZhMSwKKwkweDdiNjNkNDY3LCAweDczY2ZjY2NjLCAweGIxMDJjMzllLCAweGZkNDEzOTM5LCAweGQzMjI1OGRiLCAweGZiY2M4NzM5LAorCTB4YWZhYzY0ZjQsIDB4MjEzYWMyYWQsIDB4Y2NlNjNmZWYsIDB4ZTg5NGFjYTAsIDB4ZWEzNmY3M2YsIDB4ODExNzY5YTUsCisJMHg5YmVmYTgwZiwgMHhhOTM4ODRlYywgMHhjZmI4YWY3MywgMHg5ZGYzZDIzNiwgMHhmNjdlMDkwZiwgMHgyN2ZkZTI2ZSwKKwkweDI3OWJmYmQ1LCAweGFiOWRmM2UzLCAweGU0YmZmYmQ1LCAweGYzYTg5ZmZkLCAweDYxZTNmZThiLCAweGRkODQ1N2Y3LAorCTB4ZGZlZjE5ZmYsIDB4MjcyZmRjZjQsIDB4MmQ4ZmQxN2IsIDB4NzE1ZGFjZTUsIDB4Y2ZiZjQ0OTMsIDB4MWJkNDIzZjEsCisJMHg1NjJiMGZhMCwgMHgxNWNmMDlmYSwgMHgyZGJjNWRiYSwgMHhkMGRkN2U2NSwgMHhjYWFiOGYyYiwgMHhlZDA4ZmQ3NiwKKwkweDMyN2IxYzk1LCAweDkyZjVlZDE2LCAweDY3ZjUyNzFjLCAweDY3NDdiYTY2LCAweDhhNjhiYjQzLCAweGJhYzIzNWU0LAorCTB4ZDkxZjExZDksIDB4ZThiZDQ5OGYsIDB4YmQwOTFmZTUsIDB4ZjlmMGE1NWMsIDB4M2NjMzdjNTQsIDB4ZmU4YmIyOTMsCisJMHg5Y2ZlNzlmZSwgMHhiYjllNjNkZCwgMHg1ZDllMDZhZSwgMHg2NjkxNGYwOCwgMHhjMGQ1ZjcxZSwgMHg3NjhlNWQ3MywKKwkweGRhMWZkNTFlLCAweDIzZjlkN2QzLCAweDJlZGMyYjg0LCAweDIzYjFmZTJlLCAweGVjNTNmMzFlLCAweGUyOWRmMTJkLAorCTB4NDJhYzk2Y2EsIDB4MmZmMTdmOTgsIDB4YTE1NTY0NzcsIDB4ODJmYzI1ZmYsIDB4NzY4YmI0M2EsIDB4ZGI4MzE3M2MsCisJMHgzZmRiY2ZjNSwgMHhiNmU1ZmJlNCwgMHg2MGM3MWJiNSwgMHg1MGRhMDAxZCwgMHgwYmQzNThiYiwgMHhiNTZjZGU5YywKKwkweGFmMzhmZmNlLCAweGI0ZjJmZTFiLCAweDU4YjllOTFlLCAweGQzYzlmMmQ3LCAweDkyNmZlNzY4LCAweDU5Nzc3ZTIyLAorCTB4ZGUzYjllMmQsIDB4MzUyNWVmY2IsIDB4ZTAzZjczNjYsIDB4ODdjZWZlYTUsIDB4YjIwYjZmMTAsIDB4YjI5MWU5MTksCisJMHg3OWNmOTE1NSwgMHhiMWU4NWI3ZSwgMHhlNmZmNjEwYSwgMHgyOTM1OGIwZCwgMHgyM2EyZTc4MCwgMHgwZmI4NTVlZSwKKwkweDRlNDM2YWFiLCAweDk3OGRlNjAxLCAweDk2M2U5NjY3LCAweGQ2Zjk4ZGZkLCAweDZkNmY5ZTJlLCAweDBhZDZmOWUzLAorCTB4MjgyOTYwNWIsIDB4ZjY2NmY2NzEsIDB4MzI5OThmNWIsIDB4YTlmZTBmYzEsIDB4YjIyMDY3MmEsIDB4OTQ3OTZjZjAsCisJMHg3OTM1M2ZkYSwgMHgwZjllNDhkNCwgMHhjZmNiZmVjMywgMHhlNTBjN2YxZCwgMHg4M2MyM2Y2NiwgMHg4M2UxZjVmOSwKKwkweDc0M2Y1MWEzLCAweGFjZThjNGU0LCAweDI1ZmU0N2EwLCAweDA4OWJlZTYzLCAweGI3ZTFhY2M3LCAweDkyOWE3ZWQwLAorCTB4NzMwMWQ4YTgsIDB4Zjg5ZWZlNzksIDB4NWMzMjVmZTIsIDB4MzhkZDcwOWIsIDB4NmUyNGYzMWUsIDB4MmVlOTNmYTMsCisJMHg0ZGZiODc1OCwgMHhiYWIzZjY5OSwgMHg5MWRjNjNmMywgMHgyZWZmZjNlYSwgMHhiNjY2ZjBmMCwgMHgzYWZkZGE5NSwKKwkweDA4MjBiMzgwLCAweGYwN2VmYTg3LCAweDYwMDY5N2Y3LCAweGQzMmI5M2JlLCAweDUwZjdlMDg2LCAweDBlNGEzMjI3LAorCTB4ZGYwNTE3NjQsIDB4YmRjMzIyN2YsIDB4ZGY1M2UxMWQsIDB4MDZjNzUyN2YsIDB4NmRmMWM4NjAsIDB4ZDA1NTc4ZTEsCisJMHgwZGQyMDBmNywgMHhlMDQ4ZDc1YSwgMHhlZmI4OTBiNywgMHg5YTMxNTFmNiwgMHg3NjA5YjRmZSwgMHhlM2NkMGNlNiwKKwkweGY0ZDc0YjRlLCAweGQzZjQ1N2E3LCAweDcyYmJiZjhjLCAweGM0ZmVlNmEwLCAweGZhZDBjMGE4LCAweDc3YjdiZjEwLAorCTB4ZjdjYmM5N2YsIDB4NDZjNmM0ZWYsIDB4M2ZiZGZlZTMsIDB4N2RmOWZkYjYsIDB4Y2VlOWZkZmMsIDB4ZmEwNzY0MTcsCisJMHg2ZTc3MGJiNiwgMHgxNjhmMWY3YSwgMHhiNWY0MGYzZSwgMHhhMTUyN2U1MywgMHhmNjlmZGE3YywgMHg4MzlmOGNjYiwKKwkweGQ2ODdkNGUxLCAweGMwYjBjZTkxLCAweDYwYTUyMzUzLCAweGViNmRmYjdjLCAweDdiYWQ4YjQ3LCAweGFlMDU3N2U4LAorCTB4ZjNlOGRkNTUsIDB4Mjg3ZjUxNmMsIDB4MWY2ODA1NjAsIDB4NDdiZmQ3Y2YsIDB4MGIzYWJkNzksIDB4MWQ5OWU3NWYsCisJMHgzYzViOWNmYywgMHhmMDEyZmFlNywgMHgyMGY4NmRmZCwgMHg0MDE3OGJmYSwgMHg5N2ZjODNmMSwgMHg3YWEwOWViNSwKKwkweGFlNmM5YWRiLCAweDk2MzJlYmFmLCAweGY2NGZkMWU4LCAweDY1ZjY4YjQwLCAweDc4YWRlODBjLCAweDNiNDA5YmUwLAorCTB4ZjcwZGJjMWIsIDB4NzJjNGU1YmQsIDB4NTRjMmZkZmYsIDB4OGZlZjliY2EsIDB4ZmQ5ZmY5ZTYsIDB4ZmJmNDA5YzksCisJMHhjNjliOGJjNywgMHgwYmJhZjVkMiwgMHhkYmZmMzQzMSwgMHhiNWY2ODA3MiwgMHhhODkzNWY3OSwgMHg3ZDMxMzE0ZSwKKwkweGNmNWM0YWQ2LCAweGRmNDQwMWZmLCAweDgwMDA2ZGEwLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLAorCTB4N2RjZGZmMDAsIDB4ZDU1NDc4MGIsIDB4Mzk5ZWYwYjUsIDB4NjcwOTFlNjcsIDB4OTkyMTI3MjYsIDB4ZTRjMjEwMjQsCisJMHg0ZTAxMDI0OSwgMHhhYWYwODA0MiwgMHg5ZTE4MDkwMywgMHg2ODMxMDA0ZSwgMHgwY2ZkZTFkMCwgMHhhZjRhODgwOSwKKwkweDA0ODE5YmY0LCAweGE4NmMxODA4LCAweDNiZDE1MDE0LCAweDZhZDQ4MGE0LCAweGE2YTNlYTZmLCAweGQwMDRjN2Q2LAorCTB4YTBkMjk0MWIsIDB4ZGVmNmI3ZmUsIDB4MjJjMDFiNWIsIDB4ZGEwNDZhMjgsIDB4ZmFkMmRlOWYsIDB4M2VmNmI1YWYsCisJMHg4MjQ5OWNjOSwgMHhiZjdiN2I3MiwgMHhkYmUzZWY5ZiwgMHhiM2VmNjc1OSwgMHhkN2JkZWIxZiwgMHg2YjRjZmI1ZSwKKwkweDdlZWYyMDc0LCAweGZmOTliMTg1LCAweDFiMjk3YjcyLCAweDk3ZGFkOGM2LCAweDFlNjA5ZTRjLCAweDg1N2JkMmMwLAorCTB4ZDM1Y2EwZWIsIDB4YmViMTk1MzAsIDB4NTM1NmIzMDgsIDB4ZDczMTYzMWMsIDB4MDQ2YzYxZWYsIDB4MmMwMThjYzEsCisJMHg2NGVjNzI4ZCwgMHg0MzVhNTAzMSwgMHhjM2M2NGZkOSwgMHgzYjQzYWIzMywgMHhlYWFjNjZlYywgMHgzN2JkMTQ3YSwKKwkweDMwMTFkOGJkLCAweGRiYmM3ZDQzLCAweGM2NDhkOGM0LCAweGU5NTNlZDJjLCAweGNiZDdjOWZkLCAweGZjNmJmZWE4LAorCTB4ZmQ2MzFiNzcsIDB4YWY1NGU5ZGMsIDB4NDM4NDk2YzMsIDB4ZGIwNTIyZjIsIDB4YjRmZGE4OWIsIDB4YWNhODQzZWIsCisJMHhjYTg3M2ViYywgMHgxNDdlNzI3NywgMHg4NGZhYzNlZiwgMHgxN2ZhNTM2YiwgMHg1MjZmMWMwMiwgMHg2NGFjNGE3MSwKKwkweDYyOGQ5OTljLCAweGEzM2I3ZWVjLCAweDQ3YWI1NzdmLCAweGFiYTUzMGM3LCAweDcyZDJjOGRmLCAweGU4MWU2MjVkLAorCTB4NDRkZDc2Y2YsIDB4OGY3NGMwZTUsIDB4NmM2MDRlZTYsIDB4ZDk3NmE2ZDYsIDB4ZWM1MWViOGUsIDB4ODAzNGUxZWEsCisJMHhjYmRkZjI4YiwgMHg5M2RlYmFmMiwgMHhiYWI3Y2Q4ZSwgMHg3YmZiYzI4NywgMHhkMDNkNThjZSwgMHhlMmNhMGRiZiwKKwkweGM2NGFmYWIwLCAweGRkNzk0ZDNjLCAweDM2ZTUxYmM3LCAweGRiMTkzYWQzLCAweDZjMmNlNTRjLCAweGNiYjNlZjA3LAorCTB4ZWYzODY1ZGYsIDB4NmYzZTU1N2IsIDB4OTEyNjExYjYsIDB4YjYwNjU4Y2MsIDB4YmY3YWU4NGYsIDB4NjBjMWQwMGQsCisJMHg2ZDk3ODE1ZSwgMHg3N2YwYzNjMSwgMHhkNGFmYmE1MSwgMHg0ZGI0ZmQwZCwgMHg2MDJmZTU2NCwgMHg2YTViNzIzZiwKKwkweDM3MWZlMzk5LCAweDM4Yjc5OWZmLCAweGZlNjI3MWZmLCAweDQ2ZDg5NmJmLCAweGI3ZDdlZmVjLCAweDgxZTZkNmRkLAorCTB4M2MzY2I1NzksIDB4ZWVlNDg0NjIsIDB4Yjc1ZWY3ZWEsIDB4NzZhYmY3OTUsIDB4Y2Y0MDYwZGMsIDB4YjhmYTM3YWEsCisJMHg2NmZhYzI3NywgMHhkYzIwOGYwMiwgMHhkODJkYmFmMSwgMHg5OWNmNDY5OCwgMHg1YjRiMWUyOSwgMHhhYmVhMDlhMywKKwkweDVlZDkxZDljLCAweGNkZjhiZjE4LCAweDZmZjIxMGE4LCAweDMyNTE5YmNiLCAweDlmN2U3MTgzLCAweGU5MTdiYmU5LAorCTB4YTBlNmZjNTgsIDB4MjYxMzkzMTIsIDB4NDY0ZDlhZjksIDB4ZDAzNjU4M2UsIDB4ZWYzZTFmNzMsIDB4ZjFiZGJlNmQsCisJMHhkNjljNjAwOSwgMHg1MzVmYzkxMSwgMHgxODgxNGNjYSwgMHgxZDVmNmZlMCwgMHg4Mjg1OTM5NywgMHhlZjVkMTczZiwKKwkweGM4NGZiMDQzLCAweGM0ZWFkNWNmLCAweGFiYjc0ODI5LCAweGIwZDI2MDliLCAweDRjOWI0NThlLCAweDc1ODI1ZjQzLAorCTB4Y2I0M2I3MzEsIDB4ZWNjYzNjMDIsIDB4NzMwYjYwYmYsIDB4Njk5OTVjYTIsIDB4YzQ4NzMzYmQsIDB4ZTlhMDZiMDYsCisJMHgwNmIxZWI5YSwgMHg5ZWJjYWJmOSwgMHhiZGFmZmQ0NiwgMHhlYjllOTdkZSwgMHhjODQ4YjY3MiwgMHgxOWY5MGQ4NywKKwkweDlmODIyNWUwLCAweDE5N2U0NWVmLCAweDFiODcyNWQzLCAweGUyOGY3ZGQzLCAweDgwZDY2N2ZhLCAweGJlNzhjM2JjLAorCTB4Mjg4NWM5MmQsIDB4NjJmYzVkNDcsIDB4ODBhZjkxNTUsIDB4ODU5NjkyNWYsIDB4Y2I0ZDRkYzksIDB4ZjQyYTk4N2MsCisJMHg3ZTI1ZWYxZiwgMHg3MTY1MDI1OSwgMHhjMTUyZmQ1OCwgMHg3Yjc4OTEwNywgMHg2NWY5MTZlYywgMHg0OGJmNjhiMywKKwkweDAxOTk2NTA5LCAweDI4ZWE5NjBmLCAweGU3Y2MwYjZkLCAweDBhN2JiYzRhLCAweDBlZmQ2NWUyLCAweDE2ZjViZjhlLAorCTB4ZTYwM2IxNmYsIDB4OTM3MWZlYmIsIDB4OGI2MTk0MDYsIDB4YThlYzM5NDcsIDB4NTg3ZDQ2ODcsIDB4ZjE4NWY1NmQsCisJMHhjM2ViZmNlZCwgMHgzMGYwMWI5OCwgMHg5NTI2N2FlNywgMHg4M2JlMDFmZSwgMHhkNzg1ZmViOCwgMHgwZDNhMDllNywKKwkweDhiYjk5MmEzLCAweGQ4YzVjY2NjLCAweDFiYWJhNDA2LCAweGU5YzQ1NDI3LCAweGFkNzdlNjJjLCAweDQzZTI3NDdhLAorCTB4NTNiNWZlMzAsIDB4ODhiZmFhMTYsIDB4YTk4MDJkNzgsIDB4ZTM0ZjAyN2EsIDB4OWI0MTJjYmMsIDB4NzVlNjEwNzYsCisJMHgyYTAyYzJkMSwgMHg3ZWYxNjlkMCwgMHhkZmEwMDU4OSwgMHg0NmZhNTAyNSwgMHhkODNkNTJkMCwgMHgxNDgxZjZjZSwKKwkweGIxNzZjMTZjLCAweDgwNWIxM2NjLCAweGU2ZjU4NGY4LCAweDg2YmUzMWYwLCAweDZkNGM5N2ZmLCAweGZkNDEwZmQ5LAorCTB4OTYxYjMzZTcsIDB4ODFlMDMzOTksIDB4ODY0MTJhNzQsIDB4ODJmZTdlNzUsIDB4YmU3ODI0YzQsIDB4MmU1YmRkNzIsCisJMHg5NGFiMWU1OCwgMHg1MGFhYTYwZSwgMHhjYzE0YzFiZiwgMHg3YmUyODBiNiwgMHg4NmJkZjY0NiwgMHhiYmQzZTA3YSwKKwkweDA4YWRmZTliLCAweGYwZGM3ZGRhLCAweGFhZTkxM2EyLCAweDBlNDliNWUzLCAweDRkM2Y2MTY1LCAweGNjMDBjZjgwLAorCTB4MmE1ZWE5YmQsIDB4NmMzNDJhMGQsIDB4NWRhMWIyOWYsIDB4NzNmM2FkZmMsIDB4YmFhZjlmMjQsIDB4YmE3ODQxOWUsCisJMHhmYTFiNmQ1YSwgMHhmMDMxZjIxMiwgMHhmNWQ3M2UyZCwgMHhhZTNhZWFmMSwgMHhiZWZkNzVkNywgMHhjZWJmZjA1NiwKKwkweGQ3MzI5NWQ3LCAweDRjNGE5NTViLCAweDZlMTY5MDMwLCAweDEzYmNjYTZmLCAweDRjNzJlZjkxLCAweGI3MGIxNjVhLAorCTB4OGU4ZjhkMzcsIDB4MzJmODM5NDUsIDB4NWQ2MWFiNWUsIDB4ODM5NzQyZjYsIDB4ODA0OWZjNTcsIDB4YTQ3YjJlYmMsCisJMHhjN2FlODFjYiwgMHhmM2FlYmQ3NSwgMHgyNmFmNmViZCwgMHgyZjJmZTRmZCwgMHg3OWZjM2JmZSwgMHg4MWQ3Y2QzMiwKKwkweGU2NGQzMDdjLCAweGVjOWE2Yjc2LCAweDFjOWEzZTIwLCAweGZmMjMyNjVmLCAweDc5ZmQ3YjdjLCAweGIzY2ZlODU2LAorCTB4YjZiOWZkMDYsIDB4YzdmOWZkMTcsIDB4ZjM4Nzk0NWIsIDB4ZGE5NjdmNDIsIDB4M2NkZTdkZDgsIDB4M2I2N2RmYWUsCisJMHg0YTJiZmFiYSwgMHg4MzRiNjQ5ZiwgMHgxMzM0OTQ3ZSwgMHhjZDQ3ZmJiNSwgMHhmM2UzNDk1YiwgMHhmZWYzYjZmOCwKKwkweDZmY2ViMTJmLCAweGQzMDNmYmQyLCAweGE0NmZkNGFjLCAweDFmZDA2NzllLCAweDVmMmZmOWVhLCAweDFkYTIwZGNmLAorCTB4NWQ4MTg4ZjgsIDB4NWFmN2JiNDAsIDB4NjE2MWY3MWYsIDB4NDQ0ZWM4MDcsIDB4NjY2ZjA0YzcsIDB4Yjk5MjdlMDcsCisJMHhhN2UyMjA3OCwgMHg0ZWUwM2IwNywgMHg4MGVjM2JmYiwgMHhiY2JhNTdjZSwgMHhjYmExZjJlOCwgMHhlOGZjYTQ0MywKKwkweDExZmQzMGYyLCAweGE0MjFlNjJkLCAweDMwZTYyMDBmLCAweDc4MWM4ZmNhLCAweGU5NTFkNzBlLCAweDcyOGY5M2VlLAorCTB4ZjgxMWNiYTksIDB4ZGQ2NzI0NjEsIDB4OWI5MDgzZWMsIDB4ZGEzMTM5MmUsIDB4NzQyZTVkMGIsIDB4YTZlNWQxMzksCisJMHg1MmM1Yzg1MiwgMHgzY2JhMTcyMSwgMHgxZTlhOTcxYywgMHgzZGVmMGIxYiwgMHg0MzJiZTY5NywgMHhiMWYyZTg3YywKKwkweGJiNDg4NWU2LCAweDMxM2YyYmQwLCAweGYxYTVhN2U0LCAweGE5ZjkwY2Q1LCAweDdlNzBjYTEyLCAweDRmYzJmNWIyLAorCTB4OWY5MTZlZjMsIDB4OWRiZWQyNGEsIDB4OGQzMmIxMWYsIDB4NDBmZjExZmIsIDB4ZDY5OTVhN2UsIDB4MGFiMTVmYjMsCisJMHhjYTdmZWNmOSwgMHhmZDVhYjhhZiwgMHhjYzM3NDI5YiwgMHhlODIxNmFlNywgMHg3ZTJlYjRkOSwgMHhlMzJlZmU5YiwKKwkweGY4MDY0MzdlLCAweDQ2YjQ1MGQ5LCAweDVhYjY3NWYzLCAweGIwNmIwNDA3LCAweDFhYWNkN2RkLCAweDAxZmJhOGYxLAorCTB4N2RlZTkxNGIsIDB4MjdmNGY4YmIsIDB4ZmU3MWZmNjAsIDB4YzE1YmZkM2EsIDB4ZWRmNzVmZmYsIDB4ZDlkMTFkZjQsCisJMHhmNTY2ZGYxNiwgMHhkYmJkMjFlNCwgMHgzN2JmZjYwYywgMHg1YmIxZjE3ZiwgMHg2ZmU2ZjNhNCwgMHg0MjQzZTc0OSwKKwkweGZhMGZmYzZmLCAweGQxN2E4NzhiLCAweDFlZmY4NzEzLCAweDg2MmNjZWJhLCAweGZjMjFmYjNmLCAweDNjNjdhZjdiLAorCTB4MDJmYmU3ZDAsIDB4YTJmMzljMGUsIDB4ZDIyYmNjYmMsIDB4M2MxYmRiZWIsIDB4ZTAxZmE4OTksIDB4ODIzNGIxY2YsCisJMHgwZjA5ZDk4NywgMHg1NmRiM2UwMiwgMHhmZTljZjMwMiwgMHgwMDdkNjc1OCwgMHg4ZjhmMjdlYiwgMHg4ZjMzZWYxMSwKKwkweDNmYjU3NTg5LCAweDViNTFmNjkxLCAweGQ2MGJkYTNkLCAweGFmOGRlZGMwLCAweDBkMGVmNjVkLCAweDc2MDEwYjgzLAorCTB4MTE0NWMxODQsIDB4ZGVkZTAxZjAsIDB4OTUzM2I3MjksIDB4OTcyMDg0ZmMsIDB4NTRkZmU4MmIsIDB4ZmQxNWYzNDAsCisJMHg5ZTY1ZmUwOSwgMHhjZjAxNTcxMywgMHhkYjEzNTRiMywgMHg4YWFhNzQwOSwgMHg1NWQ2ZjgzZiwgMHgyNmNkNmJkNCwKKwkweGUxODc3MjY2LCAweGViYzk3MDIxLCAweGY2ZmQwMTQ5LCAweDlmYzA0OTlhLCAweDM3YzA3OWI3LCAweDBlMjVmYmI4LAorCTB4YWJmMDc2N2YsIDB4ZmEyYzgwODYsIDB4OGQ2YzdmMDUsIDB4YzlhNWI3NDAsIDB4YmZhMDkxZTQsIDB4NjBhNjQ1MzUsCisJMHg3Yzc3NWE3YSwgMHg2N2M5ZDY3ZiwgMHg1NGMwN2NmYSwgMHhkNjY3ZGYxYSwgMHgxZjdiNWJmOCwgMHhhN2VmNGRlOSwKKwkweGRiMjFmYmQzLCAweGQ3N2Y4YzJkLCAweGY2MDllNjc4LCAweGQyOWIwZmUwLCAweDI5MmM1ZGI5LCAweDNlYjFlOThjLAorCTB4ZjhlMjVkMmEsIDB4M2ViMDAxYmYsIDB4ZDM5YTNjM2UsIDB4OTFlNWY3YzQsIDB4ZjlkMzYzZWQsIDB4YjM2NjZkYjgsCisJMHgzNzYzYTdjMCwgMHg1NTliNTlmMiwgMHgxYmIyYjdjNywgMHhiMTk5M2RmMSwgMHhiZTQxM2U0ZSwgMHg0ZTA5ZjE4MSwKKwkweGVhY2E1NDY5LCAweDRmNWNiZTY0LCAweGI2NmViZTA0LCAweDc0ZDMyZmRlLCAweDVmMGJhNjNmLCAweGQ5N2EwODgxLAorCTB4YWJlZjgyNmUsIDB4NmRkYmUwM2QsIDB4MzM3NDNmN2MsIDB4ZGJiOWZkN2EsIDB4NTc2ZjgyZmIsIDB4MzFlYzdjZTgsCisJMHhlYzhjN2JmMCwgMHg4OThjZmUyNSwgMHhlMDAxYTkzNywgMHhhOGRlYjVjNywgMHg3NDJmZGM3YSwgMHgxOTUyNjdjOSwKKwkweDg4Y2EyZGUxLCAweDRiZjkyZWE3LCAweGM4NTEyYjJlLCAweGZkZjUxMjNmLCAweDdhZmNhMzc3LCAweGI5ZWQ5ZGNkLAorCTB4MGQ3Y2VhM2MsIDB4NWUwMGU3ZWYsIDB4ZjdjNjk1ZDEsIDB4ZGJmN2E1NDcsIDB4YmUyM2M4MWQsIDB4ZTU4MjdhYTAsCisJMHhjYTQ3NzliMCwgMHgzYzA0NTM2MywgMHg4NTdlNDIzZSwgMHg0MGZlOTFmYywgMHhjYTc4MDA3YiwgMHg3ZjE2ZmQ0MiwKKwkweGUzMGVlYWQ2LCAweDdmMDUzYjkzLCAweGU1NjI2ZTdjLCAweDI2ZGI0ZmE4LCAweDJkYjIzZjcxLCAweGE0MGY5NzlkLAorCTB4MDJjY2I4ZjMsIDB4NzU0Yjk3YzEsIDB4YzMwZThhN2UsIDB4NDI3ZjkxODMsIDB4NWIwOTVmYjgsIDB4N2U2OWUxMzcsCisJMHg2M2NmMmViYywgMHhiYWMwNjZjYiwgMHg3ZDc4ZTJkYSwgMHhkZGE4ZTM1NSwgMHgzODJlOTQ4MSwgMHg4ZDc1YmZiMiwKKwkweDJmMTBjYjYzLCAweDhhMDdmZDlkLCAweDk5N2RhMGNlLCAweDQwZjZmMDJmLCAweDgxMzM5OGUzLCAweDE3Njc0MTNjLAorCTB4N2ZkYTE5ZDksIDB4NTAwNDdmMDEsIDB4N2YyMjU0MWYsIDB4YzdmM2JhOTgsIDB4ZmM2ZWY0ODQsIDB4ZGY3ODg4MTksCisJMHhmYmM5Yjk2MywgMHhmN2RmZGRjNSwgMHgyY2NmYmM0NCwgMHhiZWYyYjdmMSwgMHgwODhjZGJhMCwgMHhkMDQ2OTZiYSwKKwkweGFlMDIyNGI1LCAweDQxYTBlMWQwLCAweDc5N2FlYWZmLCAweGFkZWVmMzUxLCAweGVhYzc5ODJlLCAweDU5NjdhMGEzLAorCTB4MmQ0ZjNmMzgsIDB4YWQ1ZmI5NDMsIDB4ZWQzYmZjZWEsIDB4MTc2YmYyMGMsIDB4M2MyNzRmM2YsIDB4ZjlkMjZlY2YsCisJMHhkNDZlYzY3NSwgMHg4N2E4NjVjMywgMHg3M2MxNzZjNywgMHgzYzExMGY1MCwgMHgxMzEzY2NiMywgMHhlZDY2YWY2ZSwKKwkweDU3NzU3YjQ2LCAweDBlZmVkZTlkLCAweGFkNzc3ZjZhLCAweGVhOTc5ZmRlLCAweGNmNDIzYTc1LCAweDQyZDc0NDY1LAorCTB4M2VjZDVlZGQsIDB4NWVhYmY1ODMsIDB4NGQxZmVmZTMsIDB4OTAyNjczOWYsIDB4Njg3OTEzNzksIDB4ODFjYmMwODgsCisJMHhkMTEwMzgwOCwgMHhkODM3Y2Y3ZSwgMHhmNzg4ZGFiNywgMHhkN2Q0NDUzNywgMHgyM2ZiYzA0NywgMHhmYmUzM2FlMCwKKwkweDQ4OTg5NzBiLCAweDNmMDIxNzBlLCAweGU1MjIyMTIwLCAweDlhM2Y5MjMyLCAweDljZmQzYmQzLCAweDUyNmU3YjRlLAorCTB4YzgzM2JmYzgsIDB4MGUxYWY0ZDUsIDB4OTVmNzRiMWYsIDB4NzA2MTI5ZDUsIDB4MmUzMmMyZTMsIDB4ZjAxYTMwMTcsCisJMHg3ZmYxODVhNSwgMHgxMjAzNzNhMCwgMHgxN2E1ODNmMCwgMHgxYmQ0ZDliZCwgMHhkYTQ0ZTY1ZiwgMHg3YmZmNWU3YiwKKwkweGZkMTkzM2ZjLCAweDRiZjA2NjY1LCAweGI4NDY0YjhlLCAweDBlZjMxMjQ1LCAweDkwZDk5ZDU0LCAweDc4NzUwZjg3LAorCTB4YTdlZTE5NmQsIDB4YWUzM2VmYTcsIDB4YTJiM2Y2MGIsIDB4NDk1OTRkN2UsIDB4ZDZjNDVmYjgsIDB4ZDZjMjc5OTQsCisJMHhmMjlmYjdhOSwgMHgxYzI1YWZkNywgMHhkNWM2YzNlZiwgMHhiZWEwODc2NSwgMHhhYjI4NTI2MiwgMHg1ZTM4Y2IxYSwKKwkweGQwOTRiZDgyLCAweGY4ODk1NzVlLCAweDI1ZDc5NGNkLCAweDhhY2JkYTJmLCAweGZhZDY1MGU4LCAweDM1ODgzZjcwLAorCTB4NWIzYWUzNjUsIDB4M2U4ODk2MWUsIDB4MGZhMDFhODEsIDB4NzMyMTY5ZTAsIDB4MmVjZWQxNWIsIDB4ODMyYjFlNjYsCisJMHg0YzRiNWNhZCwgMHhmMDIzYzZjYywgMHhhNTg3ZjFkZSwgMHgzZmE3Njg4ZCwgMHg4NWQ3ZDhkYSwgMHgxOWQxYTFmYiwKKwkweDNjNzE3ZjdjLCAweDI5NmJhMDY2LCAweGVlN2QyZGMwLCAweGIyZGI3ZDIzLCAweGM3OTUzMjdkLCAweDBlYjZjZjI0LAorCTB4ZGJmZmIxOTUsIDB4OTI5OTcwZjgsIDB4ODQzMWY1OGIsIDB4MGZlOWFiYTcsIDB4ZjkwNjZkOTUsIDB4OWJiYTUzZjgsCisJMHg1MzhiZWFmMCwgMHg2ZmU4Y2Q1ZCwgMHg4YzMwYjRlZiwgMHg1MWE2MzM5NywgMHgyZWUxNjkxYywgMHg5YzRlZmU1YiwKKwkweDJlMjFlNmNmLCAweGZkMTczZmY0LCAweDMyNGE2Y2IwLCAweGQ1YjQ1YmI0LCAweGQ1MWZhMWEyLCAweDcxNTM1NjZlLAorCTB4OTM5ZGJlN2UsIDB4YTRiZjU4YWQsIDB4ZGI4MTk0NTYsIDB4NmZmMzdjYTksIDB4NDI3MWFhM2YsIDB4NGNhNzhlZmIsCisJMHg5ZmI0MjM1YSwgMHhkZGU5YWQ3MCwgMHhhZjJmMDA2MSwgMHg0NDkwZDBjYiwgMHgzMzM3NWM2ZiwgMHhiNzM5YzYxNSwKKwkweDAyNTA1MDdmLCAweDU1MWYzY2JlLCAweGRlMmNmNmZkLCAweGU1ZmI2MTllLCAweDY3YTdkYzM3LCAweDQ5N2I2MjE1LAorCTB4MmZlZDAyZGQsIDB4OWZmNDczYzAsIDB4MWE5MGVjMmYsIDB4YTcyZjM4NGQsIDB4NGIwNGRhMjMsIDB4NDY1N2YwYmEsCisJMHg1YjBiOWNmMSwgMHhjZjhjNDE2ZCwgMHhmNzdjNTM5ZCwgMHhmNjcxYzdlZSwgMHg2N2QzZDA1YiwgMHhhNzZlNGMxNywKKwkweDlmMTBmMDA5LCAweDI5MmNiM2IxLCAweDA0ZGI5ZjE5LCAweDJlYzY3NzNkLCAweDY4NWYzOTA0LCAweGIyMWZlNGVlLAorCTB4Mzk2MmNiMjcsIDB4MWRhM2ZmMWMsIDB4MWQ2MTg3NjUsIDB4NDQxZjFlMTcsIDB4MTk1ZGFiZjEsIDB4YzAwYzg0OWUsCisJMHgxZTk5MWRmNywgMHhhM2U3OTYxNywgMHhmMzdhZGRiOCwgMHhlODdkZDI2ZiwgMHhmMmYyZmZjNywgMHg5N2YyMTcyMiwKKwkweGQzY2I4MzNiLCAweGI5MTdkNzFiLCAweDU1Zjk4NTE2LCAweDg5OTczZWNiLCAweGJhYjRkZTBmLCAweGRmN2NlMDM3LAorCTB4YzI2MDFlOGMsIDB4NDFmMDM2N2QsIDB4MmY5MzhjNWYsIDB4ZTAxNmZiMTEsIDB4ZjYyZjhkZTcsIDB4OTdmZDVmZTAsCisJMHgxZTVhYzdmMCwgMHgzNmVmMTg0OSwgMHhkMjdlZjVmMCwgMHgwMGRmYjQ5ZiwgMHg4N2UzM2YzOCwgMHhjN2MwMDNiYiwKKwkweGIyMzZkYjFmLCAweDliOGMyOGYzLCAweDc1ZGM1MmZhLCAweGUwN2ExMzA5LCAweGVlMjBhOGI5LCAweDUzNTI1OGFiLAorCTB4YTZmYzc4NzYsIDB4ZmI0NTBlNTMsIDB4ODQxYzA1ZGYsIDB4N2I0MWRmZDcsIDB4MmVmZGY3ZGMsIDB4ZjA4ZTFmZjAsCisJMHhmZGJkMGJmMywgMHg4MDIzYTc3MiwgMHgwZTI3YzVjZSwgMHhmOGY0OGM4NywgMHhmODVmZjY0OCwgMHhlY2I3YmMyZSwKKwkweDgxZDkwYjI5LCAweDZjMjU0ZjY1LCAweDgxNzFjMGVhLCAweDE2YWUzMDZmLCAweDg2N2YyZWI5LCAweGFiZDVkNjg1LAorCTB4NjUyM2IyNWMsIDB4ZmJlMTI5MjUsIDB4YmZhNGMzOTUsIDB4ZTljYjkzN2IsIDB4MGVjYjg3MTksIDB4OTcyZWY1ZTUsCisJMHg5ZmFlNTVjYiwgMHhmMTY1M2NhNiwgMHgxZjJkM2NhMiwgMHg3MGQ5OTBlOSwgMHhmNTNkMjZjNiwgMHhjZmM0NjFkNiwKKwkweDA1NTE3NWYyLCAweGYyZjg5ODM2LCAweGFmNDQ2Y2E3LCAweGEwMjM4Nzc2LCAweGU5Y2ZiZDQyLCAweDljYTE2MzkwLAorCTB4ZDZmNWMxOWYsIDB4M2YyZTBjYTYsIDB4ZWQ5MzEyYzUsIDB4NjJkNjU0MDUsIDB4Y2MwYWY1YmMsIDB4OTdjMDJmYTcsCisJMHg3N2I2M2UzNiwgMHgyOWYzOGMzNCwgMHgwZDFiY2UwYiwgMHhlMWUyYmJmOCwgMHgyNWU1N2E3YywgMHg0YzhlZTI4OSwKKwkweDQxMzNjOGY2LCAweDVjNjBhZTVmLCAweDdjOWU1NDRmLCAweGZlMTEzYWQxLCAweDVmZjU2MmFjLCAweDVjMWZiMDQ5LAorCTB4MDY3Y2JkNTEsIDB4MDY1NzBiZWUsIDB4YzVkYWU3MmQsIDB4YjE2YmZjNWUsIDB4NTViM2Q0NWMsIDB4NWJkODExZmMsCisJMHhmZWZlYmQ2MywgMHhmYTRlZDYxYSwgMHhhMjI5YjJhMywgMHg0ZmY2ZmFiZSwgMHhkNTUzN2UzMCwgMHgzZWJlN2M2YywKKwkweGExN2YxMWMzLCAweDcyNThjMzBmLCAweDVkOGE2MDAxLCAweDMzNjRiNmE5LCAweDA1NzJlYTU4LCAweDVkZDYwY2U0LAorCTB4ZjM0NGMwN2MsIDB4MGE1MWJlNWYsIDB4YzVmZTYwZGEsIDB4ZjhkYzc5N2QsIDB4YzFmMDNmNjMsIDB4NDA3ZjVhMjAsCisJMHgxZWY5NzgwNSwgMHgzMzk2N2Y2ZSwgMHg3ZjBlZDA1MywgMHgxZDYwN2VkZSwgMHgwYTJmMzFjNSwgMHhjNGQwYjM3ZCwKKwkweGU3ZTdjOGJjLCAweGRjNTRiNGEzLCAweDJhN2IyZmVmLCAweGZjYmNmMDhhLCAweGY2ZmY5NWU5LCAweGJlZDdiYzM4LAorCTB4Zjg3YzY2NzksIDB4ZjkwZWJhZmUsIDB4ZDk5OWUzODMsIDB4ZjlmYWJhZTMsIDB4NTJmN2YzNjQsIDB4ZmY4YTBlNTEsCisJMHhiMGM5ZjYxOSwgMHhlY2IxZTVkZSwgMHg5MGQzZjNhNywgMHg2ZWE5Yzk2ZSwgMHhmMmRkYWJhNSwgMHhmMzY3MGYyZCwKKwkweDg2Y2ZiMDc2LCAweDIxZGMyZjc1LCAweGNiZDgzYWQxLCAweDIwODdiMjM2LCAweDNlMzg2YWYzLCAweGI0OWVkNDk3LAorCTB4NjMzZGI5NWEsIDB4ZDlmODRiYWEsIDB4ZjVlN2Q0NmUsIDB4N2ZiYzEyNmQsIDB4ODUyNWVhMGUsIDB4MGY2ODE3ZjAsCisJMHg4N2RmOTc4YiwgMHgzZTkzMjU3ZCwgMHgyYWZhZTFmMSwgMHg2NmZiYTZjYywgMHg1NjFkM2Y1MywgMHgzMzE3ZWY5NCwKKwkweGQ5ZjQ1Yzc4LCAweDJlZTdlZTBjLCAweGE1ZWVkNTRjLCAweDM2YTNmNDM4LCAweGVmMWE0YjZkLCAweGU2MjUxYTQ3LAorCTB4NGFiY2ZiMDEsIDB4M2EzMmRiNzMsIDB4OGRiOWZjYzcsIDB4YjU1NTJiZTIsIDB4MjcyODllNTEsIDB4MmYzYzRiZWQsCisJMHgzMjU1YmY0MCwgMHhkODcxYWQ5MywgMHgxYWU3NWYyZiwgMHhmMDFmZDczNywgMHhjZjE5NDNmYywgMHgzZjVjMWM2NywKKwkweGJlMDJjNjU2LCAweDY2MzhjZTE1LCAweGZjNGJmZmU4LCAweDk3Zjc4MzJiLCAweGZkZWJhYzNjLCAweDVkNGRmMWNlLAorCTB4MTBjM2I5ZjUsIDB4OTVlNzdkNWYsIDB4OTc5ZTNjZTMsIDB4MTkwMTdlNDgsIDB4OWZhMTE2OGYsIDB4MDIzNGJjZjcsCisJMHg3NzBiZDdmNywgMHhmYTgyOWYxYywgMHhmMmNmZjU3NiwgMHhlMTc1N2M1NSwgMHg3YjI3ZGY0ZiwgMHhiOWQwNWFiMSwKKwkweGI0N2RmZDFkLCAweDBjZmYwMDFmLCAweDdlNDI1M2NhLCAweDBmOGYxMjdjLCAweGQwZjgxMjlkLCAweDU3ZDdhZGU5LAorCTB4MzhmMGIwZWUsIDB4NTQ3NWU4M2QsIDB4N2Y5Yjk1MjQsIDB4M2E1NmZkNDMsIDB4NmZhODVjZGEsIDB4OGNiNjVmMmIsCisJMHg2YmZjYmQ0MiwgMHg1ZmI0M2Y5YywgMHhmOGMwNzliNCwgMHgxNjdmODEwZiwgMHhiNDU0NjI1OSwgMHgzMzAyNmI0ZiwKKwkweDY5YWYwOGFkLCAweGY1ZGMxMTMwLCAweGYyMmE0MjVlLCAweGFmYjU2N2UzLCAweGNlNGY5MTM4LCAweGQwYjI4NTQ3LAorCTB4OGJhYzc1MGUsIDB4MDE3MTFhZDIsIDB4N2RjZjhmMmEsIDB4ODhkNTliNTYsIDB4NmEyNTljNzEsIDB4ZjUwNGMzOWIsCisJMHhjNDY0MzY0YiwgMHg0OGZlYmVhMSwgMHhmZWIxNTkwZCwgMHgzMzM0YTZhMywgMHgxZDU1MWVjMiwgMHgxZTQ3YjA4ZiwKKwkweGEwNjdmMDRlLCAweGZmMDQ5YWJhLCAweDZiNTliZWEwLCAweGYzNWNmNGUyLCAweDNhNmI3MWRjLCAweGFjNTU3NzhjLAorCTB4ZGZlN2YzZjcsIDB4NGY3OGM2Y2YsIDB4MzY1YjZhNjUsIDB4NzdhMDExZGEsIDB4ZjNjNDdmNzYsIDB4YzNiMjI2YjMsCisJMHgzYzkzOWY2YiwgMHhlOGJhYzM1MSwgMHgwZGU5MTZiZCwgMHhkMDRhYjVmMiwgMHhhZjRiZWQ3OSwgMHhiZjdjODQzYywKKwkweGQwNWRlOTE2LCAweDZmODA1ZjlkLCAweDE3ZjNkMDRmLCAweGZjNjE0ZTBlLCAweDE3YzgxM2ZkLCAweGI4MDJkZGJhLAorCTB4Mzc3MTgyZDYsIDB4MDlhZjg3MmIsIDB4MjVlNzgwM2UsIDB4OGYyMDc5ZmMsIDB4MTFlODI2ZjQsIDB4ZjkyMzM3ZjQsCisJMHhjNmZhMzdiZCwgMHhiN2ZiNzI2NiwgMHhmNDhkYjM2OCwgMHhlNzI2NmM2YiwgMHgyZjFkZjZmYiwgMHg5ZjdlOTEzYiwKKwkweDZkZmM3ZjNmLCAweDdjYTk0ZjNjLCAweGJiYjJhYzAxLCAweGY4MTdiZTA3LCAweDNiZjVjMmE4LCAweDRmZTRmZTY5LAorCTB4OWQ3YWUxNTQsIDB4ZTRlZmViNWQsIDB4NTU2ZjIxNzMsIDB4NWY0ZmFmOGMsIDB4ZDYyYzk1NmYsIDB4Zjc4YmQ3YWYsCisJMHhiYzg1MzJlMywgMHg5N2FmODEzMCwgMHgxMmY5NzEwNiwgMHg4YWYyODRmMiwgMHgzZWJlOTk3ZSwgMHg1ZjdmMWM1ZiwKKwkweDRjYTJjZmU3LCAweDYyNjk5ZmNlLCAweDcyNmQ0YzlkLCAweGJlOTA3ZTIyLCAweDdmODA2N2E4LCAweDQyNTFkNjNjLAorCTB4Y2Y5MzQwNmYsIDB4MGZmMzA2N2YsIDB4ZmYzZTk3YTMsIDB4ZDAwZjMxNTIsIDB4YjhkODllNmIsIDB4OWJiNjNhMmUsCisJMHhjZTllOGFkOSwgMHgzOTMzZjMyZiwgMHg5YWRkOWNkZiwgMHhmODBjZGE5OCwgMHg1OWY2MGNmYiwgMHhmYzAwNjc5NCwKKwkweGE3OGQ4NzJhLCAweDVlM2U4ZGYzLCAweGE2Y2E0ZmYxLCAweGZmYTFiYWUxLCAweDhmYWZmNjEwLCAweDhmYTA1MWZiLAorCTB4YzQ3Y2ZkOGMsIDB4ZjNlODdjYjgsIDB4YjhiMmU1ZDcsIDB4N2NiNGMxNjYsIDB4ZGNmYmI2MjcsIDB4ZWI4NzkxOTEsCisJMHg2Njk3ZTNlNiwgMHgwN2JlZjRhYSwgMHhkZjc4MDNmZCwgMHgzOGEyNmNkMywgMHhhZmIxNTlmNSwgMHgxNWY1YmIzZiwKKwkweDJlYmNhMmU3LCAweGRlMjI5ZjdlLCAweGFiYjI3ZmMzLCAweGZlNzUzY2ZiLCAweDlhNjdlMzBiLCAweGJiZjZmMTY3LAorCTB4Y2ZhYzIxYTYsIDB4NzUyZjkyMzcsIDB4YzlmY2U5YmMsIDB4ZGY5MDI1MzYsIDB4NTVhN2M5MTIsIDB4MzhhZDY3MjksCisJMHhkZDczZTQ1ZSwgMHg3MThmMzk3ZiwgMHg1ZmZmOTQxNiwgMHhmZjI0ODI5OCwgMHg2NjQ0ZWNiNSwgMHg3Zjg2NWQ5OCwKKwkweDY1ZDUxYjBhLCAweGIzYWYzNjFmLCAweDUxY2I3YjUxLCAweGJkNzUwNzZlLCAweGFhZWJkYmFmLCAweGM0MjVjZjc4LAorCTB4NzkzMjhmZjcsIDB4ZjU2YWM5MWUsIDB4ZjQyNzM2YzQsIDB4MzZlM2U2MzMsIDB4ZmRkNjBmM2EsIDB4NDJkNzA5YzUsCisJMHg5NWM2MGM1MiwgMHgwODJiNGE1ZSwgMHgyZTZiNzdiNywgMHhhZGZlMjA5ZiwgMHg3MGRiNmQ2NCwgMHhjNzcwYjNmZiwKKwkweDIzNDczM2ZiLCAweDQyZDhmZTlmLCAweGI3MGIyZmU3LCAweDFmYTJiNjRlLCAweGUyZjBmMmJlLCAweDczZmY0ODUxLAorCTB4NWQ5ZWRjNzUsIDB4MDQ3OTFkYWEsIDB4NzU3M2U4ZmQsIDB4ZTcxNmI5OGYsIDB4NTNjNTdiZTEsIDB4ODVmM2MyYzYsCisJMHhiZTg5ZjNiYiwgMHg2NmRhYTNlNywgMHg4MGYxZGMyMiwgMHhiZGUxMWFjNCwgMHg2ZTQ3ODc3MSwgMHg3MWUwMWJiYSwKKwkweGI4YjE4MThlLCAweDQ5MGU4ZmNlLCAweGY4YzM2MzI1LCAweDM3NTMwOTYxLCAweDliN2U4ZGRkLCAweDdjYTJhMzFjLAorCTB4NWFmNDI0N2MsIDB4NmJkMzg1OGQsIDB4ZGFmZmUwOTcsIDB4NzljYjkyY2UsIDB4MzY0ZDRkNzEsIDB4MWM3Nzk3OWUsCisJMHhmODBhN2QwNCwgMHg5YmJhYjBhOSwgMHhlYmVlMzg0MiwgMHhhODBmYjQ4OSwgMHg1MjRiNmQ4MiwgMHg5MzViOWQxYywKKwkweGNhYzJiNGRmLCAweGY0MDVjOWVjLCAweGNmMGM5ZWRjLCAweDFlZGE1YTRmLCAweDdjOWNmNWMwLCAweDE5YmY5MWMwLAorCTB4MThkZDJiNzEsIDB4YmJmYjg4YjUsIDB4ZTdlMDM3MjQsIDB4YmUzYWY4ZDIsIDB4MGJkNDc5ZjQsIDB4NGZlYzhiM2UsCisJMHhmZDE1YmY3ZiwgMHg2MjdmZDQ3YywgMHg3ZjZhOTdmZSwgMHhkNmVkMGYzYywgMHg3MTU5YTNhNSwgMHg1ZTRmZmViOCwKKwkweDNmNDNhYThmLCAweGQ3MGIxM2U3LCAweGUwZmY3YTY3LCAweGVlMWM3ZDdmLCAweDY1YmY4MTI3LCAweDMyYmZjMTgwLAorCTB4MWY2N2MwYzAsIDB4MmRiNWZkMWIsIDB4MzNhN2FmMzQsIDB4Y2U5NWZlOGQsIDB4YjJlYjE1YWYsIDB4MDRmM2MyNjIsCisJMHg5OWUzZjliYSwgMHg3NDQ3OTZiNywgMHgwMjg4MGZkOSwgMHgzMThjNWQxNiwgMHhmNmVmOGMwYywgMHg2ZDhiZWJmOSwKKwkweGQ4Mzc4ZmU4LCAweGYzYWMxYjU0LCAweDNjNzdlNDYzLCAweGUyNTk3YTZmLCAweGU3M2IwMGZiLCAweDFlNWY4ZmZmLAorCTB4ZGVmZGM0MTEsIDB4ZjBlNGZmYjIsIDB4MTA1MzI2YjIsIDB4ZWM0ZWE1NTMsIDB4ZmI2MTJlZGUsIDB4MjVmZmUwYTUsCisJMHhkYmZjYzI5YSwgMHgwMWU3YmIzZCwgMHg5YTJiYjNkYiwgMHhiNDMyNWI2ZiwgMHhlNzk0NzJiZiwgMHgxMmI1NDAzZiwKKwkweDlkYmVkN2UxLCAweGY3ZGZmZWVjLCAweGMxNzhmNTY3LCAweDZiYmM3NGFmLCAweGViYmM0MzRjLCAweDM5ZjdkNmY4LAorCTB4MTQ1ZjAyNmYsIDB4ZWZlMTc0MTUsIDB4ZjIwYWZmMGIsIDB4N2RmYjJmNjcsIDB4M2E2OTdlNTQsIDB4ZTQzOGU4ZmIsCisJMHg4NjhjNDc2NywgMHhlNmNiZjM3MiwgMHg0OGZlYTRjNywgMHg2ZmYyOTdmNywgMHhhYzc1N2VlMCwgMHhmY2EyYTMxMiwKKwkweDQ4ZGZlMTdlLCAweGZkOTc4Yzg3LCAweDc0ZWE1NGQ1LCAweDEzNjVlM2Q3LCAweGY3YTE2YTVlLCAweGYxMWU2OGJlLAorCTB4ZWY3ODM4ZGEsIDB4ZWI4NjI1MGQsIDB4ZjdjZjBmNmYsIDB4NjQ2ZmE0ODgsIDB4ZWJmZGM3ZGUsIDB4NzNlMjI3NDYsCisJMHg3ZTlmNWQ3ZCwgMHg5ZjU5ZDM5NywgMHgxNzQ3YTdmNywgMHgyZDVkNzEzYiwgMHg2ZDdkZjY0ZiwgMHg0ZmI3ZDIwYywKKwkweGRhZmU4YThjLCAweDcxZjc5MTcyLCAweDEzZDczZjYxLCAweDQ3MzFlZDE3LCAweDJmOWQwMDY2LCAweDYyZTM5ODFlLAorCTB4YjY5NzM3YTAsIDB4Y2Y4NzlkY2MsIDB4NTI2ZWJkOTcsIDB4NWVkNzVmZDEsIDB4ZmVlMjczMmYsIDB4YmI3MjBmZWEsCisJMHhkZTEyYzU1MywgMHhlNDdjZTEwYiwgMHg2OTdhODRhMCwgMHg4MzliMjk2YywgMHg2NDg2YzdlZCwgMHhjNjdlODZlNiwKKwkweDMyZmNlMGNjLCAweGM0MWNiMmU2LCAweGUwY2Y5ZjgzLCAweDZlMzNjNTM5LCAweDAzM2M1MzQ0LCAweGJjYzVmNWZlLAorCTB4ZTBiZmE1OGUsIDB4ZWYxZDEwNzEsIDB4OWM2YzdlZmEsIDB4MTAzMGY3NTgsIDB4ZjE3N2UyNDMsIDB4M2Y4OGI4YmMsCisJMHg4YmMwZTRmZiwgMHg0YmJmYjBiMywgMHhjZTJhMmM4NywgMHgxNjQzOGJmYiwgMHhlYzE1N2ZlYSwgMHhkZTMwY2NhMywKKwkweDVmN2NhM2M1LCAweDFhNTQ3MDgyLCAweDdmZGYzM2NhLCAweGZiZTI2YWFjLCAweDE2NzVjYThmLCAweDNiYTYzNThmLAorCTB4YjU4NzE2NWYsIDB4M2MxZWZkYzMsIDB4MmJiOGUzNzMsIDB4ZmNlYTFmMDUsIDB4ZDdjM2NhYmEsIDB4MWNlYzBhYjcsCisJMHhmODliZjdhZSwgMHg2ZDM1OTYzNywgMHhjNmY1YmM0MywgMHg3Zjk2ZGZjNywgMHhmYThjYjMzMywgMHg3YjZmOTNhMiwKKwkweDU3ODExN2UzLCAweDViZTQ3Zjk0LCAweGVkNTYyZjlkLCAweDcxZWNlN2U3LCAweDkxMTNmOTRkLCAweGQxM2U3NGZmLAorCTB4MTI2MDRiZjUsIDB4NWE3YjQxY2IsIDB4OTgzOTY1NjMsIDB4NDczMDEzOTcsIDB4Y2ExN2E4NmIsIDB4ZWQwNWI3MTQsCisJMHhmNmY4OWNjMCwgMHgyM2NmNDQxMiwgMHg0YWJmNWM1OSwgMHgxOThmNjZjNSwgMHg4ZDhkNTFlZCwgMHg3OGI3NDdmNCwKKwkweGM3ZDcxNjc3LCAweDI4M2U2NDIxLCAweDc5NTJjY2VmLCAweGE2YWIyNWJlLCAweDgyNWU4NTdkLCAweGVkMDAzMmUzLAorCTB4Yjg5ZjU5NzYsIDB4NDlhMWJhM2YsIDB4ZDljNmUxZTksIDB4ZDk3NWYwMzIsIDB4MzIwN2I4YjgsIDB4ODdiY2M2MzQsCisJMHg0NDc4NzI4ZiwgMHhkNDBiNDhkYywgMHhiMzMzZDJjYiwgMHhjY2FlMDA0YiwgMHgwYWM5NGNmMiwgMHhlMWQyZjdlYiwKKwkweDFlYjgwMWM0LCAweDlmMTUzZTc4LCAweDM3ZGUyOGZmLCAweGVhMjQ2YjIzLCAweGY5ZjQ4NTdmLCAweDYxOGVhNjk3LAorCTB4ZGFiYWQzMWIsIDB4ZjFkZDc5OWYsIDB4NWRkZDJmZDEsIDB4YTU4NWJiNzAsIDB4ZWIwODc5NmEsIDB4OWVlNWU1ZjMsCisJMHhlYzFjY2YyYywgMHgyMmY5ZjIyNywgMHhkZTUyYjZjNiwgMHgzZjVmZTA1YywgMHhmZTA0ZmY0NCwgMHg4ZjQwZWQ3OSwKKwkweDJkNWYwNDNiLCAweGE0MjEyYmIyLCAweDVjYjNhYjMzLCAweGMwMzdmNGVlLCAweDhjNWE2MDE1LCAweDI1OWI3NDhjLAorCTB4MzkwZWU0ZjgsIDB4ZTdlZjgyZDQsIDB4ODJmNTVhYjIsIDB4MDNhMjVjOWQsIDB4NWRlZGY3NWYsIDB4ZDgwNjAzYWYsCisJMHhlMDNmYmQwNSwgMHhiMDJkMmY4NywgMHgxMzZiZTAzZSwgMHgxMDQ2ZGZiMCwgMHhiMTIwMTMxZCwgMHhlOTk4ZjQwMiwKKwkweDMzZmQ3ZmI1LCAweDYwMTM1YmY2LCAweGU3ODQ1MWVkLCAweDEwYzJmNTBhLCAweGNjZmFjZTBjLCAweGQ5NTk0MzVmLAorCTB4ZTMwYzM5YzcsIDB4MWM1NzllMWQsIDB4YjhlODA1MjEsIDB4YzQzZWY5ZmUsIDB4MWY4NTJiZmYsIDB4YzQ0NTdjYzMsCisJMHhiZTU0MWJjZiwgMHg0YjFiZTYxZSwgMHhlMDgwZjZmYywgMHhhY2ZjNGZiNywgMHhmMDQ0MTMzYSwgMHgwYmVjNzY3MywKKwkweDcwZjFlNjE5LCAweGM0NjFlZjk0LCAweGE5ZjMxYWZiLCAweDk0NmVmNWQ0LCAweGZhMjcxYWQ3LCAweDU0ZmY5ZjE5LAorCTB4YWMzNTUwZDIsIDB4M2IyNGZlMTEsIDB4NWVlNDIwOTQsIDB4ZjUwNmRkMGEsIDB4OGRiOTY5YWQsIDB4MGFiNjZmNjgsCisJMHhjNjljYjk3ZSwgMHhkODFjM2Y2OCwgMHgzZmJjYTM2YywgMHhlYTc4ZTM3NiwgMHhhNjk3MDBjMywgMHgzZWUxYWVkZiwKKwkweGI2Y2ZmMmYzLCAweDNhMDUyZTY3LCAweDM4YmQ0MGQ5LCAweGExNTM5ZDYxLCAweGI3NTgyMmNmLCAweGNlODk2MDA1LAorCTB4NGY0NDgzODEsIDB4ZTEzODBmYTgsIDB4YzdiNGI2ZjksIDB4MzE5ZjM5NTIsIDB4NGViNWNhMmYsIDB4ZGRlZjFkMWYsCisJMHhhMzQzMDFlOCwgMHgzM2I2NjlkZiwgMHg3MzJiZWUwYiwgMHhlNTE1MDFkOSwgMHgyN2NiYTc0ZiwgMHhlMDFiYzA3NiwKKwkweGZlNmUzMjdiLCAweDdmYWMxZjQxLCAweGViN2ZmYjk5LCAweGE2MTNhYzRkLCAweGZiMzc0ZWI4LCAweDlmZjkxNmY3LAorCTB4ODMwMTZlMjAsIDB4ZjhiMDM5N2UsIDB4YTJjM2Q5ZGIsIDB4ZTIxYzU2ODMsIDB4ODFlMmVkOTYsIDB4Y2FmNTFlZTIsCisJMHgyNTdhZThiZiwgMHgxZjkzZTU5ZiwgMHhmMTg0NGI4MiwgMHg5MzM2OGI5NiwgMHg4Y2I3MGFhNSwgMHg2YmIwNDllYiwKKwkweDlmZWIxN2M4LCAweGMzYmIyMGNhLCAweDg1OTBmYzY2LCAweGZhMDc2M2I3LCAweDRiNmNiZjEyLCAweDJiMGU4ODkzLAorCTB4ZDc5NDRkOWIsIDB4M2ZiOWIzMzgsIDB4OGNkNTQzNzMsIDB4M2E1NGJlZTYsIDB4ZjNkMzI3YWYsIDB4MmRkZTQ3NGIsCisJMHhkMzg3N2FlNCwgMHg4OTMzZTY2OSwgMHhlODhmMjg5MywgMHhlYTU0NDE5OSwgMHhmODJmNThmMywgMHgxNWYzYzc0ZSwKKwkweDFjYjNjNzJmLCAweDFlMzdkZGM4LCAweDJkNWExM2NmLCAweDNmMjZlODJjLCAweDM1Y2ZkNzg0LCAweGI0YWZkZTExLAorCTB4N2Y5MTk3OWUsIDB4YjEzMDRlZTYsIDB4ZDE0YjAwYmUsIDB4NDk2ZGNmOWMsIDB4MDFlZWU2NjYsIDB4OWY0MTM2YmYsCisJMHg3MzM0NzcyOCwgMHg2YTBiZWQ4NywgMHhmODhkOWNhMiwgMHhkYTc4MGIxZSwgMHg5NzcwMWY3MCwgMHgyNzI3ZDc2OCwKKwkweGE3NGVkMGNlLCAweDhlODEzY2U3LCAweDMzMTU5NGJiLCAweDlkZGIxZDcwLCAweGJmOTE1YTUzLCAweGMzM2Y1YTFjLAorCTB4YjE0OTM2YjgsIDB4YWJjYzFmMjAsIDB4ZWU2M2QyMzAsIDB4MTk2YzIzNWMsIDB4NWJlOTE1ZmYsIDB4NzNlMzc4Y2IsCisJMHg1ZjA4Yzc5YiwgMHhjYjk4ZTlkNCwgMHgxOGU5YzM3MiwgMHhmYTBmM2Y4NiwgMHgzNjNjNTdlMSwgMHhkZWU2M2Y4ZSwKKwkweDc5ZTAxZTM3LCAweDdjYzNmODYxLCAweDMyMjkyYjk2LCAweDE0N2I2ZmUxLCAweGFkZTAxN2M3LCAweGE2M2NmOTExLAorCTB4NThiNzg4YzgsIDB4N2Q0ZjExOGYsIDB4NDhmODhkNGIsIDB4OWJkNzFhZjAsIDB4YTg2ZTllNTgsIDB4MzYwZGY2NGYsCisJMHg1MTVmZjdkNCwgMHg1NDA3ODA2MCwgMHgxZmI0MzU4ZiwgMHgwMTkyNzFiOCwgMHgzMzRjMGI0ZSwgMHg5YmE4Y2ZiNCwKKwkweDFhYjM4MDZkLCAweDFmYjQzNmVlLCAweGExOTE3ZmI0LCAweGNhYjgzNzNlLCAweGU4ZTQzZjUwLCAweGI0M2MwMzdhLAorCTB4ZWQwYzlmZTksIDB4MzE2ZjM3ODcsIDB4NzY4N2U3ZDQsIDB4YjQ0N2VhMWEsIDB4OGYwMGMwZmUsIDB4ZDBjMjdiNmMsCisJMHg4ZDg3ZjQ3ZSwgMHhlZDMxZmE4NiwgMHhjN2VhMWFjZiwgMHgwMGMxN2M1ZCwgMHhkNTc4ZTg0ZiwgMHhlYmI2ZmVkMCwKKwkweDQ0ZjAwY2M3LCAweDdkYTFhZWY2LCAweDAzN2RmZGIxLCAweDBmZmQ1OTNjLCAweDkzZGJmYjQzLCAweGE3ZWExYmNlLAorCTB4ZDQzMzNmYmEsIDB4NmFiOWNmNGYsIDB4N2Y2YTY3ODAsIDB4YjZhZmI0MzEsIDB4YTM2NTQ2ZmEsIDB4MjY1ZDJhZmYsCisJMHhjMDU5YWFiOSwgMHhlYjRhZWFlNSwgMHg3MWNhM2IxYywgMHhkZmYwMzY1MSwgMHg3ZmM5ZDYxMCwgMHhkMjllZDBlMywKKwkweDYyYTU4NTdlLCAweDM0YjI2NGZjLCAweGQ5ZjI0NDNlLCAweGRmNzBkMjZjLCAweGU0YWY2OTExLCAweDhjMWViY2NmLAorCTB4NGM1N2IxYWIsIDB4MDYyMzRmNzQsIDB4MzYxYzhlY2MsIDB4MGVjN2FjN2UsIDB4YjgyZWM0MWIsIDB4ODA2YWE5NmYsCisJMHg4NjQ5YmMxMywgMHg2ZWU1ODlmNiwgMHgyZmIyN2Q0MywgMHg3ZmRmNTBjNywgMHgwNzgwNjY4NSwgMHhkYTE5MTc1NCwKKwkweDMxZThkYzBmLCAweDUyODE2OWMwLCAweDNhOGNmYjQzLCAweDZhY2UwMWFmLCAweDFmYjQzNzI4LCAweGE4NjdkZmI0LAorCTB4MzBhZTBkY2YsIDB4NWEzOTBmZDQsIDB4MzY4NzgwNmQsIDB4MWZiNDM0NmQsIDB4ZDQzMDFjZGUsIDB4MGNlYTg3ZTcsCisJMHgxYjVhMjNmNSwgMHhiNmM4ZjAwYywgMHhhM2Y2ODZmZCwgMHhlYTFhMGMzZiwgMHgzNTFmYjRjNywgMHhkOGJiOGZkNCwKKwkweDc0Mjc4MDY0LCAweGRmZGExYjM0LCAweDgwNjQzZDc2LCAweDg2OTNiMjI3LCAweDMzZjZjNWY2LCAweGZhYjI3ODA2LAorCTB4ZGJmYjQzNWIsIDB4ZWExYWNlOTMsIDB4MTkyZmJhYTcsIDB4NjRmZjc1ZWEsIDB4YzY1N2NlN2EsIDB4OTk1ZmMyZTcsCisJMHhmMGQ5ZmRhOSwgMHg4NzkyNjA3ZSwgMHg1ZTA0N2YyMSwgMHg2ZTM1NjkzMCwgMHhhNzY2ZjZjNiwgMHhkZTgxN2YxMywKKwkweGQwOTI4ZjZlLCAweDNlNTJmMWJmLCAweGY0MjYxYzUyLCAweDA0YzY1ZjAxLCAweGU4NTdjNDRjLCAweDVjNTA1N2VhLAorCTB4YWZlMjllMjgsIDB4OThkYzVhNjQsIDB4MWY3NjAzNzcsIDB4YjRlNjdmZTMsIDB4ZmI3N2Y0MzQsIDB4Mjk1ZGY5NzQsCisJMHhmNmY4OGY1ZiwgMHg2Y2QxZDc3ZSwgMHhkYjZiZjY0NiwgMHhhN2JjYTk0NCwgMHhkOWEzYzMzYywgMHhlYmYyMGUzYywKKwkweGQ5NTNkZjZjLCAweGY4YmZiODA5LCAweGJiZjQxNGQ5LCAweDM2YzBiMjU3LCAweDI5NjRlNzljLCAweGRlMWRhNjJmLAorCTB4OGM2NTFkM2IsIDB4NTRlNWU4NjMsIDB4NmMyZGUwM2IsIDB4MWFhMzI3M2UsIDB4YjI2ZTBhNTIsIDB4YmY2YTlmZGYsCisJMHhmYjNiZWQ0YywgMHgxMzBkZjExNSwgMHg1ODdkN2ZhYywgMHhiZWMyOGZmZiwgMHhhZGJmMDY0MCwgMHgwNTcyMGZjMSwKKwkweGZjMGZlY2JlLCAweGZjN2JjMTJhLCAweGY1ZWYwNDQ5LCAweGVmZGNhOWJiLCAweDA5ZjJhMWNmLCAweDA3ZjU0NmJmLAorCTB4M2YwNDQ1ZmMsIDB4MWMxMGY3ZWQsIDB4ZDk1Mjk3ZjQsIDB4ZjNkMmY3ZTgsIDB4ODI3MmZlNDMsIDB4MTk3ZWMwOGYsCisJMHg3ZmIwYTNjYiwgMHhkODU5ZjJjNiwgMHg3M2ZkNjMwNywgMHhmODQ2MmZiMCwgMHg5NTAwZmVhNywgMHg3YTNhZmU0ZCwKKwkweDgxYmY4MmZlLCAweGZiZmM5N2UwLCAweDNmYjlmZTA5LCAweGZmYjM2NTQ4LCAweGZhYWY5NTI4LCAweDM1ZmVhODliLAorCTB4NmZjMTMzN2YsIDB4ODcwNDQzZjgsIDB4MWYwNGFkZmMsIDB4N2MxMWI3ZjMsIDB4YzEyMWZmYzIsIDB4YTlkYmZiNmYsCisJMHhhNDVmZjU2YywgMHgwNzdmMWRmMiwgMHg1ZmYyOWZkNSwgMHg5ZThiYjgyNywgMHgxMjM4N2Y0NiwgMHhmODhhOWY5ZiwKKwkweGUzN2UxMzJiLCAweDJjM2ZjMTcyLCAweGNiOGJmYjllLCAweGU1YjAyYjM4LCAweDkzMmQ2ZjgyLCAweDc4YzEwZGMwLAorCTB4NDZlY2JmNjAsIDB4ODkxZDdiY2MsIDB4N2M0Mzk1N2MsIDB4ZmM1NmVhNzUsIDB4OThmZGM4ZjksIDB4ZjE5ZjAyNWUsCisJMHgxMzNhZjRmZCwgMHg3NmU4ZDc4ZiwgMHhlODE3ZTQ1ZSwgMHgwM2M1NTI3ZSwgMHgwMGJiMWY3YywgMHgyNzNjNWZmYywKKwkweGVlMjhjZmY4LCAweGI2YTk1ZWFmLCAweDU3M2ZhMGU0LCAweGYwZDY4YTYxLCAweGY1NGFlNTFjLCAweDYxMGZjODFmLAorCTB4MjIwZGRlNzgsIDB4YjY2YmRmNzIsIDB4ZjZjMzNiODMsIDB4YmVmMDE1NzEsIDB4NGVhZmRlMTksIDB4NTRmOWEzNGQsCisJMHg5ZDBiNTZiMCwgMHgyM2NjY2FhMywgMHgzM2RkNWM4MSwgMHhmODlkNzdjMCwgMHg0MDM5ODA3YSwgMHg5ODI1NmFmYiwKKwkweGZmMzhmYjhkLCAweGYwNWZkZjAwLCAweGE1ZWE5NWY5LCAweDU0N2UxMzZmLCAweDY3MGZjZThkLCAweDc3MDk0MmRhLAorCTB4YTRlNGZjNjEsIDB4ZGViZmYxNDQsIDB4ZjIyNTUxZjAsIDB4N2ZhZDdiYzgsIDB4ZmEwYTUyZTMsIDB4OTM3ZmE1ZTUsCisJMHhkMzlmNDg3YywgMHhjNjM5NDcxNiwgMHhmODgzOWMxMywgMHhjODM5ZDRiZSwgMHg1MjYzMjg2YywgMHgzMDQxOGU3ZCwKKwkweGFhMzkzZjlmLCAweDBhMDMzNWVmLCAweDc1OWRmNGZmLCAweGViNGZlZTQ3LCAweDgxZGY0N2RhLCAweDliZjA1MTViLAorCTB4NDJkYjk4Y2IsIDB4ZjNjYzhkNzksIDB4Yjg1ZDVlMTYsIDB4YmUwOGY5OTMsIDB4ZmNhODA1OGIsIDB4MzVjZjhhNWUsCisJMHgwZmU2MjQ2OCwgMHg4ZGY2MDkwNSwgMHhiNGY2YTViNSwgMHhhNTc5YzhhZSwgMHgyMDdhZTIwZCwgMHg1MGQ5OTA2ZCwKKwkweGI5ZjU0ODRlLCAweDM5M2ZiZmIxLCAweGQzYWYzNDNjLCAweGM2Y2Y2ZTYzLCAweGZhZjNlOTc1LCAweGRmOWJhYTVlLAorCTB4NGYxZDYwOWYsIDB4ZjRmZWZjZTMsIDB4NGMxNzU3ZmEsIDB4ZTNmOWRkMTksIDB4MGExN2MwMWYsIDB4Yzc2ODZmOWEsCisJMHgwNmE0MWNmMCwgMHhhZmRmMDc2NCwgMHhmMjg5YWVmOSwgMHhhOGJlNzViOSwgMHhiZTIxODBjMCwgMHg3OTQ0YzliNywKKwkweDAyN2M1ZGZlLCAweGIwZmI4MWZjLCAweGY3YmEwZWY4LCAweDAxMzI3YzA3LCAweDhjNmFiOWQ3LCAweDVmODJiMDE0LAorCTB4Y2MxY2RhNzksIDB4ZjJiOWQxMzYsIDB4MTVjNjJiNTIsIDB4N2YwM2M3OTYsIDB4MDdjZWY3YTQsIDB4MDNmZGM1NmIsCisJMHhkN2YwMzlmZCwgMHgyZmNmNDhlZCwgMHgwNzNhMzE3ZSwgMHhjNmY1NTVmMSwgMHhhYmUyMzcxOCwgMHhjMDc0MGNjNiwKKwkweDkyM2JlMzdkLCAweGI4NTdmM2M2LCAweDBkYzY5N2VhLCAweDkzMjY3OGE1LCAweDRmZTMwZDM1LCAweGViM2Q2ZDMzLAorCTB4N2Y4MmU1ZGIsIDB4NGE1OTI3NGUsIDB4ZjE5ZmQ0ODMsIDB4NDEzZWU1ZmMsIDB4M2QwNGZiYjcsIDB4NjRmYmFmZDcsCisJMHgzZWYzMDQ4ZCwgMHhkZDEyZWM3ZCwgMHhmZjM2ZTk1ZiwgMHg5ODNjOGY4ZCwgMHg1NWM3YzYxOSwgMHg3OGE3NjdjZCwKKwkweDViZGZkMDdhLCAweGRmM2E3ZjQ0LCAweGVmODc1NjQ4LCAweGFmM2UxMmEwLCAweDQ2NWUzZTRlLCAweDdjMGIxMmZjLAorCTB4N2M3YzQxOWMsIDB4NjcxOWNmMDEsIDB4NzczMWRjZDksIDB4MjgwZWQ5NDEsIDB4ZmJlOTQxMDksIDB4ODFmNjk1NjcsCisJMHhlNTQ2OTg4YiwgMHg3MmE1ZTYxMiwgMHhmOTFkOTAzOSwgMHg2ZGQ4MWJkNiwgMHg2MmFmN2M0NSwgMHg2ZDdjZjQ0ZCwKKwkweGYyMTc2MmQxLCAweDhmYjMzMmYxLCAweDMwNmJjOWY2LCAweDdkY2YxNzUzLCAweDEyNDk0NzU5LCAweDM2ZWE0YmM2LAorCTB4ZTgwNDk1YmYsIDB4N2JiMGQzOWIsIDB4Njc2ZmM2MzIsIDB4ODViZTE3MDcsIDB4ZDMyMWQ5NjUsIDB4MDU1YmNjMDUsCisJMHhjZTJlZjhiOSwgMHhiZDU0ZGRhYiwgMHg3ZjhjMWZiNSwgMHhiNzEzNzNmNywgMHhiM2U3ODdmNiwgMHhmNjBmNGUyNCwKKwkweGFlODdhNzJlLCAweDBkZDcyMjM3LCAweGU0OTliMDcyLCAweGViNDNkNjMzLCAweDA2YTU5YzkyLCAweGMyZDhhODM5LAorCTB4YWVmOGE2M2MsIDB4Yjk0ZWY5ZmMsIDB4ZmJmZDVhMjgsIDB4ZTRiZmE4ZmUsIDB4NTQxNzhhMGUsIDB4NDM4YjYxYmQsCisJMHhkYzYyYWYzYSwgMHhmNDc5MzAxZiwgMHgwN2VlODg3OCwgMHhkNWYzZTIzMCwgMHg3NmMzNWEyYywgMHhmZWJlMGE5ZiwKKwkweGJlMjMwMDc0LCAweDFiMDRkNGZlLCAweGZmMmU4MmMyLCAweDkyZmFhNTk0LCAweGVjYmEzMjBhLCAweGI5Zjk5NTc1LAorCTB4YjAyNzg4NjEsIDB4OWY4OWZiZTcsIDB4Y2I2ZDM3Y2YsIDB4MWZiZDQzNGYsIDB4YzRmZjQ1NGMsIDB4YWI0ZGFjZjIsCisJMHgxNWQ4MzM0OSwgMHhhZTlmNzVmNiwgMHgxNmEzZDczOCwgMHg5YzhhODcxZSwgMHhlZGU4YTk5NywgMHg2MjNmYTMzZiwKKwkweDllMDBiMmIzLCAweGIzNWM4MDgzLCAweGZkY2YyODUxLCAweDM1NTcyNGFjLCAweDk3OGM1YTg4LCAweGY5YmFmMjRkLAorCTB4ZmZiMWFjMzksIDB4YWRiZTYyZDMsIDB4ZGQ3MWU1N2YsIDB4ZTMwN2FjMDAsIDB4ZTFjN2RkMjYsIDB4ZGQxNmNhNzYsCisJMHgwZGU5MGUzNSwgMHg5YTcxYTMxNywgMHhlYWQxOTEwNywgMHhlZDI5OGYxYywgMHgzN2JmZTgyOSwgMHg4ZTdlZmI0NCwKKwkweDNmZTNkMWY0LCAweDM1YjJiZWZhLCAweGJhNGM5M2VkLCAweDUyZjYzNjk3LCAweDE4ZjdkZDA1LCAweDgwZmJhMzYzLAorCTB4ZDhiODg4NzcsIDB4MmUzYzQ1MWQsIDB4MDcxZTg3NzYsIDB4MDcxMTFmMWIsIDB4YjBjNzg4OGIsIDB4YzVjNzNkZjEsCisJMHg5OGNjYmQ3NCwgMHhlNGY5YzE2NiwgMHhkN2Q0ZmZiMiwgMHg1ZDE4ZjE0ZiwgMHhhYmIzNzYwZiwgMHg4YTM2OTBiMCwKKwkweDZlMjliYjU3LCAweGM5OWYxOWQxLCAweDRjZjhmMmI3LCAweGQ1YzUzMjQ5LCAweGVlNGY0MmFkLCAweGE0ZmQ3MmYyLAorCTB4MGU1ODlmYmYsIDB4M2VjMzE4NWIsIDB4MGQzMmNlYzIsIDB4MDBkNTA4ZmIsIDB4MzI0ZWE4MGYsIDB4ZDFiODFmYjQsCisJMHgwYjRmYTg2ZCwgMHgzM2VhMThlNCwgMHg5YzAzMzRlYSwgMHg2ODY0NTBkNSwgMHhjN2JmNjgzZiwgMHg0YjA2ZTcwMCwKKwkweDFjODdlZDBkLCAweGExZTAxYWY1LCAweGY2ODZlNTRkLCAweDg2N2Q5YmMzLCAweDBhZDBmY2ZhLCAweGQ2ODhmZDQzLAorCTB4YjIzYzAzNmEsIDB4ZmRhMWEzNmQsIDB4ODYwMzBmZTgsIDB4NzVlZDMxZmEsIDB4MTc3MWZhODYsIDB4ODRmMDBjMWIsCisJMHhmNjg2ZmQ4ZSwgMHgxYTBmNWRiNywgMHgxZmIyMjdlYSwgMHhlZDhiZWExYiwgMHg5M2MwMzMzZiwgMHhkYTE4NWZkNSwKKwkweGQzZWMyNTNmLCAweDg2MmQ0OWVkLCAweDVjNDQwN2U3LCAweGE0ZmJhYTYyLCAweDM5ZTlmZGUxLCAweDUzZjAwYzY3LAorCTB4ODc5NDZmNDgsIDB4ODc5MjU2ZjksIDB4Zjc4M2Y1OTYsIDB4MDdmZDAwNTUsIDB4MTg2YjM3YWMsIDB4ZmRhOTk5ZjMsCisJMHhhYjJmZDBkNiwgMHg2ZGZjNDdlZSwgMHg1MmNmZTI4ZCwgMHg5NDdjYjZhNCwgMHhlZGNjYTdkYiwgMHg2ZDNlNTg2OSwKKwkweDdkYzE2ZjcyLCAweDg5ZjhjNjZmLCAweDJhY2VmNjE0LCAweGNiMDViODU5LCAweDliMzYzMzQxLCAweDlmNDBkYzEzLAorCTB4YTBiNzA3YjksIDB4NjhhOTBjOTgsIDB4MWUwMGJiMzEsIDB4MTZlY2U0YmEsIDB4OGQ2MWQyMTcsIDB4ZmM0NDRhNDksCisJMHhjMWFiNDg2ZiwgMHg4OWE2YzQ3MiwgMHg4ZmQ0MTI1MiwgMHg4MzU4NWRhYywgMHhmZDcxNzU3YSwgMHg2MWNiODU5OSwKKwkweGQ4MzdhMzVlLCAweGEwOWRjZDg5LCAweDNlMzBkYTBiLCAweDZmODg3YjI2LCAweGUyOWIwMDM3LCAweDhjOGMzNjNhLAorCTB4NWRiYmZjYTYsIDB4MzcxOTE1NjMsIDB4YmE3NmJiMzMsIDB4Yjg2ZTMxNmEsIDB4MWQ0MTY3NmIsIDB4YWZjMGRiOTYsCisJMHhhYzYyMGUwZiwgMHgyYzdhZmMwZSwgMHgxZjVmODI3NywgMHgzODZlODU4NCwgMHg5NDU4ODdmMywgMHhhOWUwNzU1MywKKwkweGRmZDczYzI0LCAweGNkNTNlOTNlLCAweGZiMGFlMWFjLCAweGUzMDEzZGNkLCAweDhiNDQyN2Q2LCAweDczN2VjN2JjLAorCTB4N2Y0MjY2MjcsIDB4MGYwMGFiMjgsIDB4ZGNmYTcxZjgsIDB4YmUxZGQyODAsIDB4MmEzYmM0MzYsIDB4MzcyYTE3MDcsCisJMHhkN2JmYTFhNCwgMHhjMGMwZGZhZCwgMHhjM2UyMjdiOSwgMHhhMjc4MDVmYSwgMHhmNWZhNmRmYywgMHg3ODVmYjA3OCwKKwkweGMzZGU2M2RlLCAweDlmNmUxY2U0LCAweGY1OWFlNDA3LCAweGQ3Y2EwMjNjLCAweDk0M2EyZWUyLCAweDgwYzQ5N2UwLAorCTB4ZDMxZmFiOWUsIDB4ZjgwZTViZWEsIDB4MTM2YWQ1OTUsIDB4ZjcxNjM3ZGQsIDB4NGRhNDMwNTYsIDB4NWYxYmUwNzEsCisJMHg3MDBmMTZkZiwgMHg2NGVmNzg5MiwgMHg4ZTBlNmY5ZSwgMHg3MmUzODBhYiwgMHg5MjdmOGMyZSwgMHhjNjFjMDA5NiwKKwkweGJmMDBmYjFmLCAweGYzNWQyY2U3LCAweDBlNjdkY2IxLCAweDJjMmZhMGM4LCAweDA2OWE2NWM1LCAweDIwYjkzY2UzLAorCTB4ZmI5ZDM2OWEsIDB4MjJmZjQ2YWMsIDB4ZmM5ZGU0NGIsIDB4ZmJjYzQ3M2MsIDB4ZmQwZDFjYzYsIDB4ZjU4YjlmYTIsCisJMHg4ZGY3ZWUzYywgMHhmZDgyZDhmZSwgMHg3OTMyYTBhZiwgMHg0MGY5ODg0OSwgMHg1NzlhMjljZiwgMHhjYjBhZDRjMywKKwkweDhjZGEzZmQ3LCAweDA3YzA0ZWY3LCAweDhhM2I0MjZhLCAweGY5ODczN2NmLCAweGI4NzMyYjFiLCAweDVhZjk2MjVmLAorCTB4YTViYWY4YTIsIDB4ODVjNWFiYzYsIDB4NGM5MTZmOGQsIDB4NGZlZDNkZDUsIDB4MTA2NWUyMzcsIDB4NTE4NmFmN2MsCisJMHg0OWY4ZTViZCwgMHhhYzlmNGZiYSwgMHg1Mjk2OTgzNSwgMHhlNzg2MjEzZiwgMHgzZjg4NGEyMSwgMHg0ZDA1YTdlZiwKKwkweDkyM2UwMDRiLCAweGZmN2MzNmUzLCAweDk4MTJkZmExLCAweDRmYmM3ODdmLCAweGJlNjEzNmFlLCAweDZhYTZlMjQyLAorCTB4NTEyMWUyMTMsIDB4YmU3ODZhZjUsIDB4YzM1ZWRjYzgsIDB4YzZlMjc1ZjksIDB4MWUzZmEzYjUsIDB4NmFmNmYzODEsCisJMHg5OTYxMDc5OCwgMHhjODdkZjNhZSwgMHg5Y2I1NDQ4ZSwgMHg3MDMyNjJkNywgMHhlYTVlZTJkZCwgMHgxMzE2Yjc1NSwKKwkweGY0M2FjM2RmLCAweGU3ZTc2OTUyLCAweDNiZDViZDViLCAweGE2YTlkZTBiLCAweGM1MDJkN2JjLCAweDRmNTg0NzhkLAorCTB4MDdlNTJiZTUsIDB4MjNiM2UwN2IsIDB4YTkyZmRjMzksIDB4YTNlNzFhNzcsIDB4YzIxN2U3ZTgsIDB4MTk1NTVjNmUsCisJMHg2ZjQyNWJiNywgMHg2MWNiMWZkYywgMHhmM2ZiOWZiZCwgMHhjZGQ5MTIwYiwgMHg0NGRmYmJlNiwgMHg1YzNhYjFlNywKKwkweGRlMjBlMzBmLCAweGQ4YjQ2ZmVhLCAweDk4ZjU2ZjExLCAweDhiZjY0MTY3LCAweGZhN2FkZDkxLCAweDc3MDczOTg3LAorCTB4NGZmM2JhOWEsIDB4ODkwMDM5MzcsIDB4YmU0MDI5OGIsIDB4MDFhYzFiM2MsIDB4YWRmMjM5ZmMsIDB4Y2E2OWZhMWEsCisJMHhlODRjY2I4MywgMHg2YWIxMjQwYiwgMHg0NjUyMTg0YSwgMHhjM2NhYjQ5NiwgMHg3MmJmMzI2ZSwgMHhmYTI3ZmYyMywKKwkweDY0YzFmMjhjLCAweDM3ZGQzMjVmLCAweGZkZDU3NDEwLCAweDc0NzRlZTgyLCAweGRlMjA2NjI3LCAweGU1NzllNWRmLAorCTB4ODlkY2QzZWIsIDB4NWY5ZDQ3NDgsIDB4NjNmYzlmZDcsIDB4MGU4YzJmOTQsIDB4MmU3ZTA4MWYsIDB4Y2ExMjBkNjIsCisJMHg0NGQ2NThlYiwgMHg0NmQ2NzhlNSwgMHgwNzU4NzdlNSwgMHhjYWE2MWU5NSwgMHgxYTYyNGU1OCwgMHg0YmNjMjU5NSwKKwkweDRkNTYxNGU1LCAweGEwNmIyOTY1LCAweGEyNmIxYTcyLCAweGEzNmIwNjcyLCAweDU0NTNmNjEyLCAweGZiNGE5OTdhLAorCTB4NTdlMGQ5YmUsIDB4Nzk5NzM5NjAsIDB4YWFjNzljYTksIDB4N2M4MGJjYTksIDB4NjcyZGY4MGUsIDB4Y2RkZjA0MGQsCisJMHgwNjZjYTg5YSwgMHg4NDFlZTAzZCwgMHg5NTNiMDk3MSwgMHhjNTllODFhZiwgMHgxMjdmMGRmMiwgMHg5YmJmMjE5NSwKKwkweDk3MTg2ZGI5LCAweDg0ZjJhMWM4LCAweDZkZjJhMzVmLCAweGFkOTUxMTdmLCAweDdiYjUwZjdlLCAweGU1NGE1ZmM3LAorCTB4Y2E5N2JmMjksIDB4MmE3MmZlZDMsIDB4NmEzZWZjZGIsIDB4MDU3ZjllZjcsIDB4YWJmODFmOTUsIDB4ZmYzN2ZjYTksCisJMHhmNDNmMmE0NiwgMHg3N2ZjYTgwNywgMHg1OTk1MWQ3ZiwgMHgwNmZiNDY1NiwgMHg5ZmNhMTM5NiwgMHgzOTQ4ZjQwZCwKKwkweDgxYjhmNTZmLCAweDFjYjkwNWFlLCAweGU2M2RjNzhmLCAweGE0NzhkYzg0LCAweGZlMzBjY2E3LCAweDI3MWM5NGFhLAorCTB4NjZkYzUxMjYsIDB4ZTc1N2JmYmEsIDB4YTMxNmM2M2UsIDB4ZmRjZDNlM2UsIDB4ODNhMjQ3NDgsIDB4ZTFhNTU0ZmMsCisJMHhjOGJjYzMwNCwgMHhkNGJiNTM2NiwgMHhjZjZiNjgwNywgMHhlN2I1Y2ZmNSwgMHg4ZDdmMWQ4MiwgMHgxMGQxZjZkNSwKKwkweDA3NjNkZGFlLCAweGE1YjRmNDdiLCAweDUwNDdmYWFkLCAweGYzNzhmZDJmLCAweGNlZDgzYjVjLCAweDNlZjc4ZWIxLAorCTB4NTRjMzk2N2IsIDB4YWIwNGU2M2YsIDB4ZTY3NjAxNTEsIDB4NTc4M2RmNmUsIDB4YTgxZTcwYjIsIDB4YmM3ZTkzZjcsCisJMHg0Y2U2ZWU2MywgMHgyN2Q3Mjc5YywgMHg1MDBkNzdiMCwgMHg4NTNhZDVmZSwgMHgxYmYyYWZmMiwgMHhhMWEzZTU4ZSwKKwkweDE0YWQ1MzFkLCAweDZiMGJkZGEwLCAweGRlOGFmMTQ3LCAweGViZDY0NWRhLCAweGU5NTkzZGVmLCAweGY1MGYxMDkyLAorCTB4MDFlZGEwN2YsIDB4ZTUwOGM5NGIsIDB4YmMyYzVjNjMsIDB4MWJiN2YzNWYsIDB4MTkzNzQ5OWYsIDB4ZTk5ZGJjM2YsCisJMHhjYzlkZmQyNiwgMHhmZWU2YTRmMywgMHg5MWU3YzA3ZiwgMHhmYWY5NmRmYywgMHgzYmU4Y2ZmOCwgMHgwYTIzYWMxZiwKKwkweDk2MzFiYmU1LCAweGYwMGU5ZmViLCAweDU1ZmY3MTliLCAweGNkZmFlMDJmLCAweDM3NDdlNGU5LCAweGRmNzM3OWVhLAorCTB4MzFiZWE5OTMsIDB4OGFkMmJiNWEsIDB4OGE0Y2U2ZjAsIDB4N2FjN2Q0ODcsIDB4ZmRiMTczYTIsIDB4NDNkMjc0ZDYsCisJMHhlNTE4N2QyOSwgMHhkZWQyZWRiZCwgMHg3MjYxZGQ1NiwgMHhlYjk3MzUzZiwgMHgzNWMyNjU1ZCwgMHg4YmVhMzE3NSwKKwkweDhmMGNjOWVmLCAweGVmN2UwN2RhLCAweDAxZGJkNjgzLCAweDY2YWRlZTZmLCAweGNjNTI5ZWZhLCAweGQxNGEwZjg0LAorCTB4YzkzNzA0MmUsIDB4ZjNhMTI0YTMsIDB4M2EyZmQ1MTgsIDB4NWRiYWZiODIsIDB4MWIzYTM1OWEsIDB4NTExMDdhZTgsCisJMHg5ZDVmZmU4NywgMHg0YTVmZmU0MiwgMHg3ZTNlNTBkZiwgMHhjY2FiNmE1NywgMHhmNTIyZDdmMywgMHhiZTMxNmVkZCwKKwkweDg2ZDg1MWQ5LCAweDZmOWZhZGVmLCAweGE0YmM2Mzc3LCAweGVmNThmZDM3LCAweGY5ZTNlNDBmLCAweGI3ZGEyYmI3LAorCTB4YWMzYzgxOTAsIDB4N2UzZTdkYzgsIDB4MmUxNTM4MmIsIDB4MWU2YmY3MjcsIDB4MTczNjNkY2MsIDB4OGJkNTQzZWYsCisJMHhmMWFkZDhiYywgMHg4YWRlZmE2NiwgMHgyODNhZTA1MiwgMHg1OGFiZjU4NSwgMHhiM2IyNmU0MywgMHg2MmM3MjE2NiwKKwkweDUyM2JmNTNkLCAweGZiYjhlZjI4LCAweGQ3ZjY4ZDNjLCAweGMyM2NjMWExLCAweDg4YmQ3NGY0LCAweDM3OGU3NDViLAorCTB4Mjk0MWRmYTIsIDB4ZDhhN2FlMmMsIDB4YTc4ZDFhNDIsIDB4YmM3ZDMzZGIsIDB4ZjFiZGZmOWQsIDB4NGY3Yzg5NzYsCisJMHgyOGM3M2M3ZCwgMHhkNjFjZmFlMywgMHg0MzlmNWEzNiwgMHg3OGZhNDFmOCwgMHgzZDdkNzBiYiwgMHhlMzdjOGRlNCwKKwkweGYwYmViODc4LCAweGQ3MWI0NmYxLCAweGQxYjViMGU3LCAweGY3MTIxY2ZhLCAweGRiYzczYTZiLCAweGJkNzhmM2Q5LAorCTB4MjIzN2IzOGQsIDB4ZjcyZjRmZmYsIDB4ZGMxM2ZmMGEsIDB4MTgwZTc2NDMsIDB4ZjljNmM1MzQsIDB4MzMwYjY5ZjksCisJMHg5MmJjMDM5YywgMHgxZmYzZWRjYiwgMHg1OTVmMzhmMiwgMHhjOTdhZTM2ZSwgMHhmZGQyYjJlMiwgMHg4YmFlODlhNCwKKwkweDk1YWY5MWJiLCAweDE3M2E2NjNkLCAweDI2ZGZlMjUzLCAweDNjNGU0YjNmLCAweGE3ZGEyNGM1LCAweGZlN2MyNmIyLAorCTB4MTdiZjg5YjQsIDB4OThmNmIwNDgsIDB4NWZkN2IzNjcsIDB4MmMzMzNhMzQsIDB4NTVhODlkYWUsIDB4NmI2ZjMwOWIsCisJMHhlMTk1YWJhMiwgMHg2ZjEyODAzOSwgMHhmMTJiZjVhNSwgMHhlYTE0NjBmNiwgMHhkODA5OGQ1ZiwgMHhmZTgzZWMxYSwKKwkweDhiZGY1MGM0LCAweDk3NGYzMGI5LCAweDE1YzVlNWM2LCAweGY5ODgzZDZmLCAweGQwZTU4OTU0LCAweDllM2UxODZmLAorCTB4ZTRjYzdjMTYsIDB4YjBiMmI0ZjYsIDB4NzkxZDQyZmIsIDB4NWNiYTFmMWMsIDB4YzM2ZmNlNDcsIDB4YzY4NzhlNjAsCisJMHhlYTJhZjA0OSwgMHg4ZTNjMzFjZCwgMHgzZjcwZmE3MywgMHg3YWNjYzdkYSwgMHhmYjgzZGEzNCwgMHgwNjNiZDNmYywKKwkweDczYmMxMDk3LCAweDljMDFlNTJjLCAweDBhNzYzYzNlLCAweGVkNjY2YmVlLCAweGQ4MjY2NjljLCAweDNlMzE1YWM0LAorCTB4ZGRlNzZiMzMsIDB4OTI5ZTdjNjYsIDB4MWRmZTg4YzEsIDB4NWZhNGFkNjcsIDB4MjU1Y2VkNjcsIDB4MTRkM2ZmZGEsCisJMHgwZTY0NWY2YywgMHgxYWUzMDRmYywgMHhlZDFkMGY0NSwgMHhiMTliNzE4MywgMHg2M2ZhMTc4ZSwgMHhiZWRjZGE3OSwKKwkweDc0NzdiZjAxLCAweDg1N2VjYTg3LCAweDczNzc5YmVlLCAweDdkNGQwMzljLCAweDBiNzQ4ZWQ5LCAweDk3N2VjNWM2LAorCTB4ZTY5N2NmY2IsIDB4ZTc4NThmMzAsIDB4ZWUyOTc4OGQsIDB4ZGI2OGZlMzAsIDB4ZmM4MmJjNzEsIDB4NjI4ZWE2OWQsCisJMHgzNGY3NmUzYywgMHg5Y2IwMjdhYiwgMHhjODRhZDIxNCwgMHg5ZWY1NmMyZCwgMHg1YjRhNzJjMCwgMHhiYmJhMDk3NSwKKwkweDljMzYxZmE1LCAweGI4NjFiMmMwLCAweGRmODg3N2VmLCAweDJhOGUwZmMzLCAweDQ5YzYwNjc4LCAweDY4ZGNlZWZkLAorCTB4YjdkMjc3ZjQsIDB4YTQxZTRlODQsIDB4ZWU4NWIxYjgsIDB4ZjIyZGVkYjksIDB4ZGUzMDQ5ZDYsIDB4OGVkN2I3NWUsCisJMHg3YzZmNjg3NiwgMHg2YmY0OTliYSwgMHg1YTBhZjU2YywgMHg4NjY4ODBlNywgMHhmYWFiZGNlYiwgMHg2ZmJmZDBhMiwKKwkweGVmNDZlNzE0LCAweDJjNDczMWY4LCAweDdmMzQ3OWVjLCAweGJmZTA5OWZlLCAweDFlZDdhYWFkLCAweDUyYTA3MjRiLAorCTB4ZmMyMjgzYmUsIDB4NDllNjdhYjQsIDB4M2IyODQzNDIsIDB4MWI4YzQxM2MsIDB4M2Q3MGY1ZWUsIDB4N2VmODUwMWUsCisJMHgwMzZmOWIxOSwgMHg5OGFlOGViZiwgMHgyOWU4YmI5YSwgMHg3ZjMxYjI2YiwgMHhlYzFiZGMxYSwgMHg1MGVkMTY1NywKKwkweDg4M2ZhMjE3LCAweDA2MTE2ZWQ3LCAweDEzYmZjMWZiLCAweDc0M2RiOGM0LCAweDY3M2EyZTI4LCAweDE3MmZlN2QwLAorCTB4N2M2MTdmNDIsIDB4YWQ5ZmYzODYsIDB4OGZhN2JkNzQsIDB4ZjYxNjBlYWIsIDB4NWVkM2YwNDEsIDB4OWY0ZmVmMWYsCisJMHhiNzYwZWM2ZiwgMHg3MzFiNWVmOCwgMHg5MjNlNzE5YiwgMHhjM2FjMGY5OCwgMHhiMDlmMzYxYywgMHhjZWJlYjQ3NiwKKwkweDg5MmQzMzc5LCAweDMwZjU5ZmRmLCAweGI5OTZhZjdlLCAweDNiZjViMGU1LCAweDQ0YmI1ZTZkLCAweDIyYWNkMDc2LAorCTB4MzMzNDNhZmYsIDB4Mjg3MDRiZGQsIDB4MDRmYmE3M2YsIDB4MWFjOGViOTEsIDB4ZGY2OWUzY2MsIDB4MDUxZjYxOTcsCisJMHg3OWE2OTllYiwgMHhmN2U1Y2ExOCwgMHg1NWY5MGY1NSwgMHg3OGU1ODBiMiwgMHhlM2M5ODdlZSwgMHhkODRiMzEyNywKKwkweDQ5ZjhlNTdhLCAweGI0MWE2ZWQ0LCAweGI0ZTdmOGM3LCAweGYyMWEzZWEyLCAweDU0ZDY3NGViLCAweGMxN2RmMmFiLAorCTB4NWY5ODRjODksIDB4ZmM4NjYzMTYsIDB4NGZjMDU5NzQsIDB4OTY1MGJmOTYsIDB4NzFhYmM2ZTYsIDB4ZTgzOTJkMGQsCisJMHg4Y2IwM2QxNywgMHhkNzZhOGNmMiwgMHhmOWM1NmI0ZiwgMHg2YmFjZTUyNiwgMHhlZjdhODM4OSwgMHgyY2VlOWM1NywKKwkweGZiMGRjNzlmLCAweDc5MGQ5MWVmLCAweDAwMmJjOWNiLCAweGY3NWYzZjBlLCAweDA3ZTA2MTE5LCAweGFmOWQ3YjQzLAorCTB4OGFhOTUzMTQsIDB4Y2ZiOTg0N2UsIDB4MzA1OWRkOGQsIDB4ZWRjOWQ5N2YsIDB4NmNiODc4MzcsIDB4ZjJmMTBmNmUsCisJMHhmMDI1N2M2ZSwgMHhjNjY3ZDNhZiwgMHhhN2MyNGNlMCwgMHhiM2JjNzBhYywgMHgyNzdlY2QwZSwgMHgxYmYxMTNhNywKKwkweGQ1ZTMwOWZkLCAweDNlNjJkODgwLCAweDE0ODk0ZDdkLCAweDhlYTFmYmM0LCAweDAxMmNmNmNlLCAweGE3NDkxYWU5LAorCTB4ZWVjNzViNzQsIDB4OTU3ZjVjMmMsIDB4MjNkYmYyOTksIDB4YzQ3ZTBhZjEsIDB4NjdjODY5OWQsIDB4MWVhOWUyNmIsCisJMHgzYWJlNTM5ZSwgMHhmNjc1MjI2NiwgMHgxYjA0ZjUyMywgMHhlZDRkZjFlOSwgMHhkZGMxNjA5ZiwgMHhmOGQ2NGYzYywKKwkweGUwYmUyOTNjLCAweDhhNDI5YzlkLCAweGNjOWM2ODQ3LCAweDBkYWNmYWM2LCAweDhjNjJiYTQ2LCAweGEyNzhmNTA5LAorCTB4YjRhMTgyYzYsIDB4YjRlN2E3NWIsIDB4YTYxMmM2ZjgsIDB4Y2VhYmE3NzQsIDB4N2I3ZDI5NzcsIDB4MTBmMmYzZDYsCisJMHhlYTAzYjA5MywgMHhmM2Q0MWNiNCwgMHhmZmYyNjYwOSwgMHg4NGU2MDliYywgMHhkNmYwN2RmMCwgMHg3MjVmN2NjMSwKKwkweGU5MGEyYmRiLCAweDRlZGU3NjZmLCAweDUwYjRlZmY3LCAweDEzZjQxZjViLCAweDkzMzM1ZDI3LCAweGE5ZDZmZTdmLAorCTB4ODM0ZDhmNjMsIDB4OTZhZmYyNzIsIDB4YzliYjYxZDQsIDB4YmY0NmVkYjAsIDB4MzcyYmU4NjIsIDB4YmYyNjJjNDYsCisJMHhlNTE3MmRhNSwgMHgzYTE2NTVmNSwgMHhiMWY2ODJkOSwgMHg4MjcxNDJkNSwgMHg1MzZmOWZjZCwgMHgzNWZkMjEyNywKKwkweDdkM2U3MTQ2LCAweGI5ODMyM2RjLCAweDI1YTVmYTlkLCAweDlhN2QyNWUwLCAweDdlNDZiMzI2LCAweDZiZTM3NjVlLAorCTB4M2UzYzRlOWQsIDB4YjJjNzc5NDQsIDB4YWJkZGFmODksIDB4YmQ5MzU3NTUsIDB4MzY2M2M5NGMsIDB4YWRiN2M3OGEsCisJMHgyMWJjN2IyNCwgMHhjY2JjYTE5YSwgMHg0MWVlOWI1NiwgMHgxNzY1ZjY3OCwgMHhiMzdmNDMzMywgMHgyMTY1YjczNSwKKwkweDNmMDkxZjllLCAweDU5YWE4ZTczLCAweDY5YTk2MjI2LCAweDNmOWRiOWZjLCAweGU4N2FhYjlmLCAweGMzY2Q1Y2Y5LAorCTB4YmY3YzJiOWYsIDB4NjgxYWE3N2YsIDB4Nzc3ZjQzZjMsIDB4ZWM2ZTcxMmEsIDB4Y2JjZDRlZWYsIDB4YThkYmFmZWIsCisJMHhmZmVjMTRmZSwgMHg0N2I0ZWZkMCwgMHhlYmQ0NTQwNSwgMHhmY2NkMTcwZCwgMHg0ZDE3Y2U3YywgMHgyOTU1YmVmYywKKwkweGZjZTM3NTY4LCAweDRmNzRjZDBhLCAweGJhMjRmYzBmLCAweGY1NGJiZDVmLCAweDdkZWFmZGQyLCAweDA4OGM5N2NjLAorCTB4MzY3MGI1N2UsIDB4YzZhZmQxZjksIDB4ZDVmZWU5OWIsIDB4ZTUzMzFlYWIsIDB4NjQyYTA1ODEsIDB4ZjA1MjFmN2UsCisJMHgyOWU1YWJkMSwgMHg4ZTk2N2U3NCwgMHhkZDdhNDRjOCwgMHg2NDNmMjc2MywgMHg2MjQ0MWUyYiwgMHhkYzdlZjJmYiwKKwkweDdmZGNjODVlLCAweDllMmEzZmQ4LCAweDJjNmQzYmRhLCAweGUwZjkxNGFlLCAweGYyZjk0Y2IwLCAweGUzY2YxZmRmLAorCTB4ZjRhMWYyOTgsIDB4YWU2YmZhMjAsIDB4Y2JiY2EzMGEsIDB4M2YzODkzODUsIDB4Mzk0NTRjNjgsIDB4YzQ2OWExOTgsCisJMHg5ODdiMzVmNywgMHhkYzkzNzY2NiwgMHg1NzQwZmJkMywgMHhjMmFlZTc1YSwgMHgyMmZhNGFmNywgMHgyNGQzNDZiYywKKwkweDdkMDYxODJlLCAweDFlZjg1MzUxLCAweDRjY2Y4M2M3LCAweDBhYmJlZmY5LCAweDQ5YmVmYmM1LCAweDVkN2M3MDg3LAorCTB4ZjkwYjA3Y2UsIDB4Nzc0YWY1ZDQsIDB4M2Y1MWE0M2QsIDB4ZGE0OWQ4OGUsIDB4YzMwNjgwNGUsIDB4ZmJmZjI4MDAsCisJMHhmNTFjZjBhZCwgMHhmNzRjOWM0MiwgMHhjYTE3MDZjNiwgMHg5NzU4NzUyMSwgMHg3ZThiMjdkYywgMHg5NGY5MGIwNywKKwkweDJjZTUxYThmLCAweDdlMTE5MGViLCAweDdlZWZjODVjLCAweDYyZmI5MjE2LCAweGNlOGMwZGJmLCAweDE4MzdmYWNkLAorCTB4YzdjZWMxZGIsIDB4NTIyYzdhODQsIDB4M2YwYmFmOGUsIDB4ZGQwZjEyMzMsIDB4NzllYmVjZjAsIDB4MGFlYjVkOWQsCisJMHhiYWQzNjU0NCwgMHg0MjVkN2NjYywgMHg1YjJhNjVkZiwgMHgyYWE2NzllOCwgMHgxNzljNmU2YiwgMHhkNzBmNzg2YiwKKwkweDBjOTBmZmRmLCAweGFiZDAyYTBlLCAweGUzMWIzY2QwLCAweDMyMDIzMzNjLCAweGFjOTliYmE5LCAweDM3YzVmNDhkLAorCTB4ODhhYjdiYWQsIDB4MzNhZTQ1NzMsIDB4MDZkYjdkNzIsIDB4NjRiZjVjNGIsIDB4MzdlNGJjZjgsIDB4MzdlNGNiMjUsCisJMHg2MzAzZDY1OSwgMHhlNTZiYzcwYywgMHgyM2I3OWRkZSwgMHhlZWNlODc1ZCwgMHg1OWRhMDQzMywgMHg2MmE1NTgxZiwKKwkweDdhMTU1YTVjLCAweGM0YjVmMmM5LCAweDNiNjFlYmY5LCAweDcxMjVhYmYxLCAweDdkZjg0ZTQ2LCAweDI0ZGE5MTliLAorCTB4NTFjNTA4NzUsIDB4ODQxYzllYWYsIDB4MmQ3N2M3NzEsIDB4M2Q0OGZmODQsIDB4YzcwODY2MzcsIDB4NjM3Njk4ZjMsCisJMHg4YmI4ZTQ1ZSwgMHg3Yzc5MTFkMSwgMHhkYmM4YmNjNiwgMHhjODhiZjdhZSwgMHhjODg4Y2JlMywgMHhhODYyMWJlMywKKwkweDg4OGVhYzlmLCAweDE3MWJlM2M4LCAweDZjNTdjNzkxLCAweDRjZTdhNzgwLCAweDliZTNjODhmLCAweDI4ZWY4MDYzLAorCTB4YmVkMGM3YmEsIDB4NTBkOGIzY2MsIDB4YjU3NGE3M2YsIDB4ZWY0ZWZlYTEsIDB4YWVmODA2ZmQsIDB4ZWQwZDg3ZjIsCisJMHgwYzZhZmJlNywgMHg3OGFjZjdmNSwgMHhmYTBmNTBjNCwgMHg3M2I4YzdhMiwgMHg4N2FlMTBmMSwgMHg2ZDNjOTM2YiwKKwkweDEwMzA4MWY0LCAweGZlMGY2Zjc4LCAweDFkY2FhNDgwLCAweGQ5YzdmNmUxLCAweDU2YTJmZWNiLCAweDdkMjllM2QwLAorCTB4ZTI0ODEyN2YsIDB4OGYxMTY2NzEsIDB4MTBjNDc3MDUsIDB4OWQ4ZDBkYWYsIDB4NTE3ZGM3NjYsIDB4NDQ0YjRkOWEsCisJMHhjZDdlY2ViYiwgMHg1ODU4MDZlZCwgMHhjNGU2ZjljMywgMHhkZGE5NGIwNywgMHgzYTc0ZDhmYSwgMHhmYzAyNzk4NywKKwkweGMwZTgxZjZjLCAweDc3Y2YyMGRhLCAweDZmMDAxN2U5LCAweGFiZjc5ZTFjLCAweGY1ZGExMjg1LCAweDc4YTU2ZWJiLAorCTB4NTgzY2U3NmUsIDB4NTU3N2Y1MjksIDB4ZjNlYTJmOWMsIDB4NDNmMThmZGMsIDB4ZWNkYmVlMWIsIDB4NTRjZjMyNTQsCisJMHhlMjhlM2YxZSwgMHhlOTc1MWVlZCwgMHhjMzFhOTZlNywgMHhkNjQ1MWQ3ZSwgMHgxNjRiZTUwMCwgMHgzMGFjNWIwNiwKKwkweDhmZDA1YWRmLCAweDk3ODQ5YWY4LCAweDU1ZGRhMWVjLCAweDNkZTliYjQ1LCAweDEyN2YxYWIwLCAweDk2NTIwZmRkLAorCTB4ZTgxNjAyODQsIDB4YmYyN2VhYjIsIDB4ZjBlM2UxZjgsIDB4MTQ2M2UyYmUsIDB4MjdmODc4YTcsIDB4N2UyMWZjYmYsCisJMHhjNDNmYzQwNywgMHhjODcxNzQ0ZCwgMHhlZWZiY2YxYywgMHg4NzRiYTdmZCwgMHhiYWM2NWY1MSwgMHg2NDYyNWVlOCwKKwkweDliN2RlMjdkLCAweDI2ZWI3YWJlLCAweDNjMTZmYmY1LCAweDM3YTVkYmY4LCAweDhkZGVmZjdiLCAweGQ1ODZiNzY3LAorCTB4NTk3ZjM2ZjcsIDB4NjEzY2M3ZTksIDB4MzU2YTkwN2MsIDB4Y2JkNWMzZGUsIDB4YWFiZTBiZWYsIDB4ZjhhNTZiMWEsCisJMHg1N2M5MmNlNSwgMHhlNWZjZjI4ZiwgMHg3MDdhZmZkOCwgMHg0NWY3YmMzYiwgMHg3MTdiYjVjOSwgMHhiZmNmMDc3ZiwKKwkweDFkYTFjZjhmLCAweDk0OGJmNWUxLCAweDNjZjhhOTJiLCAweGZmZjgwODY1LCAweDU4YTM2NzY4LCAweDZmN2NmOThmLAorCTB4OGI3ZWUxMGMsIDB4NDFkMTU4OWMsIDB4MmIwNGYzZmIsIDB4ZjY1Yzg3YzUsIDB4ZWUzZmEzZjksIDB4NDQ3MzU4Y2IsCisJMHhmNzFlYTBiYywgMHhmN2E3NjBlNSwgMHgxZTg4Zjg4YSwgMHhmNDQxN2YyZiwgMHg5Mjk0NDQ3MywgMHg0MWNlOWYzYSwKKwkweGY3NDAzZDk4LCAweGIxN2Y3NTYyLCAweDhiMzgzYzliLCAweDY1MWJlZTE4LCAweGFlMTBiZTQ1LCAweGFjMTI1YjE3LAorCTB4NTQ5MDFmMTQsIDB4NGI3N2U1MmIsIDB4MmVmYTI4ZWEsIDB4N2QxYjA0YTIsIDB4Mjg3MjQ3M2MsIDB4NjhjZmI0NmQsCisJMHhmMTQ1MTg0OSwgMHg4NjM0MjkwMCwgMHgxMjhhMGNlMiwgMHg0MGRlZmVhMiwgMHg3ZWUwMjRiYSwgMHg3N2RmYjhjNiwKKwkweDVkNjgyYmQ5LCAweDNhY2ZmN2JkLCAweGViNDlmNzlmLCAweDc5ODg5YzYxLCAweDFmNTg3OGUwLCAweGZjNDFjZTM5LAorCTB4OWJkYTFjMmUsIDB4ZTMxZWY2NjUsIDB4NGM4NmQ3MWIsIDB4NGFmNDhlM2MsIDB4YmVlZmI1YjMsIDB4ZmRmNWU1MWQsCisJMHg1ZWIyZjU5ZSwgMHgzMDdmOWU2MiwgMHg4NjY3M2YwYywgMHg2MDVmMTNhNCwgMHg2YzMwN2Y3ZSwgMHgwZmUzY2M1YywKKwkweGU4MDM4MTg3LCAweDYwYzEwNzllLCAweDQyZDgwNjZhLCAweGI5Zjg4MzUxLCAweDZmNTc4ZDA1LCAweDNmYzg5MmQ1LAorCTB4NzQ4N2YzMDQsIDB4ZTc5MDhkZmMsIDB4NjFhZjAyM2YsIDB4YzNlYzU3YjksIDB4NjM1YzgzZjcsIDB4MjU1Zjg0ZjksCisJMHhjODAwZWQzZiwgMHhmYjRmYzIxZiwgMHhmZDA2NTRkZCwgMHhmYTM2NTQzOSwgMHhlNDNmYWEzNSwgMHg4OGY4MjIyZiwKKwkweDUxZjA0M2RmLCAweGNmOTUyOTdmLCAweGZjZjRiZGZhLCAweGMxMzk3ZjM5LCAweGE4ZmJmNTNmLCAweGEwYWZmMjZjLAorCTB4YWJmODJmZTcsIDB4YmZjOTdlMDksIDB4YTM5ZmUwOTEsIDB4ZTc4NTk4NWYsIDB4YmU1NDc1MTMsIDB4ZmFhMDZmZWEsCisJMHgwOWZiZmNkNywgMHhhNDFmYzM3ZSwgMHg0YTNmZTQzMiwgMHg5YmY5OGZjZiwgMHg2ZmUxM2UwOCwgMHg3ZjZkZjgyNiwKKwkweDdmNTZlMDg4LCAweGY4ZWY5NTJiLCAweDI5ZjllOGRiLCAweGEzMDQ4N2ZmLCAweDQ1ZmVlMjNhLCAweGUwM2YxOWQyLAorCTB4ZDk4MTcxMjUsIDB4ZTI1ZTdlOGQsIDB4NGJiMzQ1ODIsIDB4MmU1N2RlMDAsIDB4ZDc2MTdkZDMsIDB4NDFkMmY5N2MsCisJMHgzNDI3OGJlMCwgMHhmYjdiZjY5OSwgMHhlZTI5OTg1NiwgMHhmYjk1ZmJhMywgMHgxNmM3ZDYyYSwgMHhhYTVjZmQ1MywKKwkweDI2OGQ0ODZmLCAweDEyZmY2Y2JmLCAweDU3MWZkZDJiLCAweDk2N2Y3MjU2LCAweGJkYTg1NTJkLCAweGZkNTMyZjkyLAorCTB4OTJlNjJiMTMsIDB4NTM4ZjU4ZGYsIDB4ZDkyYWU3MDAsIDB4MTkzMWQ4MWMsIDB4OTMzMjJkZGIsIDB4MTExZmRlZmUsCisJMHhlM2NhNGRkNywgMHg0ZjI5M2Y3NiwgMHg4ZmFmZjdlNiwgMHhjZmMyMDU0NiwgMHg2MjliMmIyOSwgMHg3MzU1NzAwZCwKKwkweDMwZTNlMDcyLCAweGM2MmQ1OWJlLCAweDFjOTkxYjYxLCAweGNmYzdkZGZlLCAweGFmMzA3ZmY3LCAweDkwZjlkNjA0LAorCTB4MDNjYTRiZTQsIDB4ZTA3MTdjN2MsIDB4OTlkODNjZGMsIDB4YzNiZGIzMzIsIDB4Y2NlNGYyOGEsIDB4OGQ0ZWQ5ZTgsCisJMHhlYmNmZDNjZiwgMHhmZTIyNGU5MiwgMHhlMTMyNjlmNiwgMHg2MWI2OWY2ZiwgMHgyZmVlMjY1YSwgMHhkZGY0YzgxNiwKKwkweGYyMDVjNDhjLCAweGU5OWZiODU3LCAweGZiYTY1ZjM3LCAweDk5NGFjYWE0LCAweDgxNmM4MWUyLCAweDAzNjNlMDU5LAorCTB4ZmNkZmJiYWQsIDB4MGVhZjU0YjksIDB4NzQ3MTQ1M2MsIDB4NmQxM2NhZDcsIDB4MDE2ZmQxOTMsIDB4MWQxMTY1N2MsCisJMHgzOWUyYzUwZSwgMHhiYjg4YjI2ZSwgMHhhNjhmOGZlZSwgMHhmOWM4YjZiYywgMHhmMTdiZmY4YywgMHgzM2YwMDliMywKKwkweDhjZmM0N2FhLCAweDRmM2YwOWVmLCAweGZkZTNmYjg4LCAweDIyMjI3N2M0LCAweDk3N2ZhNGYxLCAweDdkZjEwOWY1LAorCTB4MWUwNmMwZjIsIDB4Mzc2YzhmYmYsIDB4NzMxZmNjNDcsIDB4MmUzYmU4Y2UsIDB4OGZlOTMyOTUsIDB4MjNiODJjMDMsCisJMHhmOTk4ZTMxYiwgMHg3ZTQzZGQzMiwgMHhiM2FhZDI3YywgMHgzZjNlNjEwNywgMHg5MWRkZjNjOCwgMHgyYzlmZWQwNywKKwkweDhlYTE4ZjkxLCAweGZkZTUyYjhkLCAweDFmMjM1YzBmLCAweDdlMDJiZTQxLCAweGRhMDQ3OTVkLCAweGU5M2JiZjZkLAorCTB4N2Q5NDM2NGMsIDB4OGMxNmVlMDMsIDB4MWY0NjNhYmYsIDB4Zjk4OWY2NDgsIDB4MTYxNzY0ZjYsIDB4ODBmYmJmMGEsCisJMHgyYjRmYzQ0NywgMHg2NTFhM2RmOSwgMHgxM2RjOWVlNSwgMHgzODA1ZGM3YywgMHhiNWY1MmJhZSwgMHgwMzA5ZjhhOSwKKwkweDkzMGVkY2Y3LCAweGY5N2VjYTA1LCAweGNmMWMzYWYyLCAweDQ5ZDI0Zjc2LCAweGUwMjEyZjFjLCAweGM3Y2JjN2QxLAorCTB4OWUyZGJlZjEsIDB4OTI1YmJmNTIsIDB4ZjFiZGQzZDgsIDB4MzdlMWY0ZGUsIDB4NzlmNWMxZTksIDB4N2Y1MTNlZTIsCisJMHhlMGY1MWZkNiwgMHg4YTc2OTZlMywgMHg3MGNlMDc1MywgMHgzOGI0YzgzZCwgMHgzOTE3YmZiYSwgMHgyN2Y5NmY0ZSwKKwkweDY0OWY4MTAxLCAweDg4NmYzZjFiLCAweGU3NDc2ZjdjLCAweGYwMjAyNWJlLCAweGYyOGNhZmQ4LCAweGUyY2IyNmI0LAorCTB4ZjY4Y2ZhYmIsIDB4NDYyN2ViZGIsIDB4NzI2ZjliYWIsIDB4ZDQwM2YzMWUsIDB4MWVhZmEwYmYsIDB4OWZhMjYzY2UsCisJMHgxZmJjYTk5NCwgMHgwMjY3ZWYzMywgMHg0NGYwNDc1YiwgMHhlNGRjMGQ0NSwgMHhlODhmNjAxYywgMHgwMGZkOGZjNywKKwkweDdiYmYxZjdlLCAweDE4YWRlZWM1LCAweDQyZDc3Y2I3LCAweGM5MGU3NGI5LCAweGNlZjQ5YmI3LCAweDFmZGEyNWFmLAorCTB4MmIwZGNjYjksIDB4MTdmNTg3OGYsIDB4OWZhOTdjMTQsIDB4NDhkZTYwNDMsIDB4NzlkNzU2NWUsIDB4ZWMwNTUyNDQsCisJMHhhZGYwYzI5MSwgMHg4OGI4ZjdiZiwgMHhlMzc5M2ZhMywgMHg5YmNhNThhMSwgMHg4NTEwZGZjOCwgMHg2NjNlZGZmZSwKKwkweDJjNTAzZTI3LCAweDBjM2YzNTIxLCAweDdmODk4YTdmLCAweGZlNzIyN2NmLCAweDdhYWNmMmM3LCAweDcxMzI4MDVlLAorCTB4MzIyMzllMTQsIDB4ZjUxOWNmN2UsIDB4NzVmYmNjMjgsIDB4Yjc3ZjkzOWYsIDB4ZDMwN2MxNjksIDB4ZmUzYzAzODcsCisJMHgwZmU3NGM5YSwgMHhmY2QxYTVhZSwgMHhjYzFmZjZmZSwgMHg4NmY0Njc5NCwgMHg2NzdlMTc4OCwgMHg2M2RkMDk2ZCwKKwkweGY3MTJjMjRiLCAweDA1NGZiOGE3LCAweGE2MjZmYzc4LCAweDlmN2RmMDg1LCAweDA5YzFmYjQyLCAweGUxNzNlNWQ3LAorCTB4MGFiMjA5N2UsIDB4MjJlZTM3ZjYsIDB4YjhmMmY4YTMsIDB4NmY3MGQ5MGUsIDB4NjM0NWNjNmQsIDB4ODRiZmEwN2IsCisJMHg3NmE0ZGFmYiwgMHhhMTQ0YmI2MywgMHgxNTIzNWRmZiwgMHg3ZThmZmVmYSwgMHhkN2Y1ZDA2ZiwgMHg2NGM1Yjk3ZCwKKwkweGZmNDlhMjI3LCAweDI0YzlhOTNmLCAweDJhMTY0ZmNmLCAweDc2ZGRiMTA3LCAweGZiODRiYjNiLCAweGJiN2NjNzQ0LAorCTB4YzVhMDdhOGEsIDB4NTU3YTRkMTUsIDB4ZmU0ZDExMTksIDB4NjM5NGY2ZjMsIDB4OWZjMDc2ZjYsIDB4MmEwN2U0NmQsCisJMHg2YzAzMmJmYSwgMHhiYjE4ODNiZSwgMHhhYjczZWRmZSwgMHgyMThkMjVlNywgMHg1ZGY1ZGUzZCwgMHgzYmIwMjJlMywKKwkweGYyODJmOTc4LCAweDlkZWNkNjk5LCAweDE1Nzk4OTljLCAweGQ4ZWVmYTY2LCAweDdhYjczYzdmLCAweDIyNzdmODZmLAorCTB4MzA3NTI0ZDMsIDB4ODRlYzU3Y2YsIDB4ZTBkZmExNTcsIDB4NDE4ZmI5YzAsIDB4MzNlYTA2M2YsIDB4ZDdjNjFjZjAsCisJMHgyOTIxN2E4ZSwgMHhmOTA1YmFiZSwgMHhiNjM5NWVhYSwgMHg4NWQwZTI4MiwgMHgyZDU3YTRmMSwgMHhlYTEwZWFiZSwKKwkweGMwYWQ3YTg5LCAweGJhZGYyZTFlLCAweGRjYWFkYzljLCAweGQ1Y2UyOTNmLCAweGJmZmU0OWJlLCAweGU0ZGVkZmE5LAorCTB4MmU1Yzk1ZmMsIDB4MDFjNWJkNzcsIDB4Yjc3ZTdkZjQsIDB4NWViZWM0ZmUsIDB4ZGZkZmMyMWUsIDB4ZTA3OWY0MmEsCisJMHhiZDQ3YjVhYywgMHhkNzI4NjZiZiwgMHhlZjIyNDUxNywgMHgyOTdjNTY2MSwgMHg1NjdlN2Y3ZCwgMHgzY2M2NWRhMCwKKwkweDJlNTBjZjUwLCAweDFjMTJmYjQ3LCAweDJmYjBjZjk0LCAweDdlMzA4NThkLCAweGVkY2Y5ODFlLCAweGUyMGFkOTAzLAorCTB4NTM4YTc0YTcsIDB4ZDRkYTliZDUsIDB4MGE0M2QyMDAsIDB4MmUyZTkxYjksIDB4ZWZlMTg3ZDgsIDB4NmRkZmQ0NzgsCisJMHhmOTc3ZDIwZSwgMHhmYzI4YmU4MiwgMHg2M2Y0MWUzZSwgMHg4NTI4MTdkOCwgMHhlNGQ1ZTJkZCwgMHg2ODcxZWJiZiwKKwkweDdlMDA4ZWZjLCAweDgyYjY4N2ZmLCAweGNhM2E4MmUwLCAweDliOWRmNGNkLCAweDc0MjZmN2M4LCAweGFlZGJlMTE4LAorCTB4Y2M4OWUxMWIsIDB4NjI5YWJkZjgsIDB4YWM5ZTExYmIsIDB4NDNhMWUxMWEsIDB4ZjZlMmJlZjksIDB4YTlmM2UzMjQsCisJMHg2ZmRjMjM2ZSwgMHg5OTk0NjM3ZSwgMHg3OGEwZmZkZiwgMHgwYzE0N2U5NSwgMHhiOGMwM2VmZiwgMHg2NDAxN2Y1OCwKKwkweDYwZjdlMjBjLCAweDIxYWZiN2ZiLCAweGU4ZmY1MDdkLCAweDdlZmY5MjBjLCAweGNhZTIyMjZiLCAweDgxOTViMDBjLAorCTB4ZjNlMzZhNzEsIDB4MmQ4NTljYzQsIDB4YWFlZDdlOTgsIDB4ODdiZTIzOTAsIDB4MmNlNzQ2ZDIsIDB4NzNjMzBmODAsCisJMHhmMjBiN2NmYywgMHg5ZTZjZTFmZiwgMHhkYzMwZDlmZiwgMHhjOGU4NzkzNywgMHhkZTFjNzlhZSwgMHhjZmNlOWIzMywKKwkweDAzNWY1NjJjLCAweDI4Yzc0ZWZkLCAweDM2ZDJlYzk5LCAweDliNzVkMzk5LCAweDM1YmE3MmE2LCAweDU3NzlkMzI3LAorCTB4NjBiNDRhYTIsIDB4NWQ1ZjM2NDUsIDB4NDcyM2M2MWEsIDB4YzkxZTI5OWEsIDB4M2RmOWUyMWEsIDB4ZDNmYWU3ZjQsCisJMHgyYzYyNDFmOSwgMHhlNzczNDM5ZiwgMHhmYTQ3ZGJmZSwgMHg0MGQ4OWQ5NywgMHgyYWZiMDNlNywgMHg3ODhlZmE2NCwKKwkweGY5NDAzZGIyLCAweDJiY2ViMDUzLCAweGNlOTYzODg2LCAweDM5ZjlmM2I3LCAweDUwZDdhYzBhLCAweDYyYmNlYjBmLAorCTB4MTAxZjk3ZTQsIDB4YTJmNWY0OWQsIDB4ZjBjMjA2YmMsIDB4MDgxYTcyODAsIDB4YmU2OTliOGYsIDB4OTQwNzg4ZTUsCisJMHg1MWU3ZjBkNywgMHhiYTE2ZWQ5OSwgMHhkM2Q2MmQ0ZiwgMHg3YWVhZGM5YiwgMHg1NzljNDhhMywgMHhkNzZjNzllYiwKKwkweDFlN2E5OGM0LCAweGZmOTEwNmRiLCAweGUyMzRlY2RhLCAweDI0Zjk1YWUxLCAweDZiNWMzMzhhLCAweGViZWQxMzliLAorCTB4MmY0MThlNDksIDB4MmY1YzZjMDQsIDB4ZGUxZGI5NjAsIDB4N2JkZmI5NDMsIDB4MWM1NGUxNjMsIDB4MjA0NGY1MGYsCisJMHgxNjE0N2JlYywgMHg2ZGZmYTdjMSwgMHhjMjIxYjNiZiwgMHhlZmZiM2YyZiwgMHhmOTE4NmE0NywgMHg5ZTIwOGY5ZCwKKwkweGUzOWMwNzJhLCAweDc3YzVlZGY3LCAweGI2NzgyY2JjLCAweDNlYTVjZjA3LCAweGNiN2FhZjljLCAweGNhZTlhZjFiLAorCTB4YmFlM2I1YmYsIDB4YmZiYzg4YTUsIDB4NWFmODExMmIsIDB4YmZhNWYwMmYsIDB4Mjc0ZDQ1N2YsIDB4MmQ2OTVkM2MsCisJMHgyNzg2ZjdiNiwgMHgxMzI3ZjQyNiwgMHgzMzJmMTNmYSwgMHhiYjNlMmFjZSwgMHhlYzYzNDEyMSwgMHg5ZmRmZTc5OSwKKwkweDY3MWQwMzI3LCAweDk4NWIzZWFkLCAweGNmOWJmMDBhLCAweGNmYzM5ZWZmLCAweDNmYTk3ZDljLCAweGVjMzYxZDM0LAorCTB4M2RmODc5ZjMsIDB4OWQ4ZjU5OGMsIDB4YTFhMjk2YmQsIDB4ODVkZTI2ZGMsIDB4OGE3MGMzZGYsIDB4YmU3ZDE5NzMsCisJMHgwOTJmNzhmYSwgMHhmMWI1NTk3ZCwgMHg5MDY3MWUxZSwgMHgzNTc3MjRiZCwgMHgwMWM1MmYyZSwgMHg3MGVmOGNiZSwKKwkweDU1NDJmOWUyLCAweGQxNmI4NzQyLCAweGQ1N2VmNDRkLCAweGZiZjk3YmM2LCAweDBhMzUzZTk4LCAweDVjYjg4OWYzLAorCTB4ZmJmM2Q2Y2QsIDB4ZmRmOThkNGIsIDB4ZDIyYWU3NGUsIDB4NTAxNjM2N2IsIDB4ZDk0NDJmNTEsIDB4ZWViZTc0M2QsCisJMHgzYTI2ZTYxOSwgMHg3MmI0YzlkYywgMHhjZWVlYmU3ZSwgMHg1YWNjZmE0MiwgMHgzZmQxZWE2ZCwgMHhlN2FhMWQ2YywKKwkweGQ1YmU4NmZiLCAweDJiZGM0Y2I4LCAweGRhMjQ1Mzk4LCAweGM2NWZlM2E5LCAweDdiMzRlZTcxLCAweGYwNWZhMmI2LAorCTB4NDgyY2M2N2YsIDB4Y2Y0MWI3NDAsIDB4NzVkMjFhN2YsIDB4YWRkMGVmNGYsIDB4NzU5Y2ZmZGMsIDB4NDk2ZGM0ZGUsCisJMHhmZjI3OGYwYywgMHg1NzVmMzg3MSwgMHhlZDAwOWM3OCwgMHhmOTc0NmY0NiwgMHgzYzVkMWJhYywgMHg4OWFkMDcxNCwKKwkweGE4YmE3MGYzLCAweDQ4Y2RjZTFkLCAweGQ3MGVkODk3LCAweGQ3ZGViYzk2LCAweDExM2U4ZGRmLCAweGY4MmFiOGY4LAorCTB4ZTQyYmZkMWUsIDB4OWZjMjZmZDcsIDB4NGYzZDFmNGUsIDB4Y2VlNGM2YWMsIDB4NDBlNjdmMjIsIDB4MTQ3YzQzN2YsCisJMHhhZjZlMDIzNiwgMHg3NmZlNjdhMywgMHhjODhmN2Q4NywgMHgzOGE1ZTQ5YSwgMHhjYjVlMjU5MywgMHg5YWU2N2NjMSwKKwkweGU2M2Q0OWJmLCAweGUzMGY2Nzc3LCAweDY3NjZmMzdlLCAweGFmMTdkZDM0LCAweGJlZTk1YTcxLCAweDI3NzM4YjVhLAorCTB4YWVjZDNmNDMsIDB4OTRiYzIzNmMsIDB4ZTYxOGViMzgsIDB4YjNhNmQ1ZDEsIDB4MDZlZGZlMjYsIDB4YWQ3MTVlNjMsCisJMHhlZjVlNmVmMywgMHg5ZGFjYjNlMiwgMHgyZTMxZWJhNiwgMHhiNGU3YjVjZiwgMHg4MTAzYjQxOCwgMHhhZjJlZGZkMywKKwkweGJmZTc2ZTU4LCAweGJkNWJkMjViLCAweGNmMWE2ZTMzLCAweDI5NWE3NjJiLCAweGIxOGE1OGFmLCAweDU3OTRmNzU2LAorCTB4YzdjMTE3ZmMsIDB4NzhiZWI4MmQsIDB4YTc4ZjBmNWMsIDB4YmJiMmViZTksIDB4M2UyM2ZlNzksIDB4ZDU5YTc4YzcsCisJMHhhZmRmYTNlZCwgMHg5N2ZmZDdkMSwgMHg3YTJlOWNhMSwgMHg5YWJiOWI3YiwgMHhhYzk3ZGVhMSwgMHhhY2Y1MWI5YSwKKwkweDg4NGZiZTI0LCAweDRjMjcyNDc2LCAweGZmZTNlYTVmLCAweGVmODVhODY5LCAweDRhOTUzNTk3LCAweDhkZGI5ZGIzLAorCTB4MzllZWJmNTksIDB4MzBmNDdjM2YsIDB4OWRjOTJkZDMsIDB4Y2RiMzM3Y2UsIDB4OTc0NjZmM2MsIDB4ZDU4YWI5ZWYsCisJMHg1Y2MzN2U4MywgMHg3YWYyODkyNSwgMHgyZmVhMDJlNiwgMHhmZmI1ODVjNiwgMHgxZWZjNWRjZSwgMHgyMTI1YWNhYSwKKwkweGVlM2ZiZDNmLCAweDA3ZGY5N2I2LCAweDJlOTgzZGYwLCAweGE5YmRlOWUyLCAweGY1OWZiYTE2LCAweDcwNzk4OTllLAorCTB4Yjc5OTE5ZWIsIDB4NGVjNmY1ZTgsIDB4MWRlM2VkYzYsIDB4YTJkNmNlMzMsIDB4NjIwYzY2MzgsIDB4YjBlNDNmNzQsCisJMHg3OGU3NjJiMywgMHhjY2MzZmU0NiwgMHhhZTYwZDA2MSwgMHhkZTMyNmNhZiwgMHg5ZTVkOThjNywgMHhhZmI2MTZmZiwKKwkweDhmNDA3NjEyLCAweDQ5ZjU1NzE3LCAweDkxZmU1MjBkLCAweDZjMzM5YmU0LCAweDNmOGRjNjI0LCAweDYyNDI1NTlkLAorCTB4ZGY0YTkxZGYsIDB4NGY2YWVjYmQsIDB4ZjZiMGUzNzEsIDB4ZDNmYjQ1ZjMsIDB4MWQ3MWM0NjksIDB4MmI4M2RkZjQsCisJMHgzZThiYjFlYSwgMHhmMjg3ZDEzNywgMHg4YmYxMjIyMSwgMHg5ZGZmMGE3NCwgMHhhMDdmNWQzNSwgMHhmZTExNjdkZCwKKwkweDQ4ZmMzODc5LCAweDEzZGQzOTRjLCAweGJkNTdlZGQwLCAweGY1NzhlN2E1LCAweGJkMDk4NmFmLCAweDM4YWRjYmE5LAorCTB4MWYzM2IwODcsIDB4NGM5MTM0NWQsIDB4MWVhN2VlNWUsIDB4NjdkOWY2N2QsIDB4ZWE3ZTVkNWQsIDB4ZjQ5ZjYxMGUsCisJMHg4MzMzYTI3ZSwgMHhmOThkMTk1NCwgMHg1NDlhNTAyYSwgMHhhY2EzZjEwZiwgMHg2MDA1Mjc1NiwgMHhkYWZmZGI5ZCwKKwkweDI3ZjdmZGYzLCAweGYwMWU3OTc1LCAweDJmYjYxMjYwLCAweGIwNzJmYjcxLCAweGRmMTdjYzhjLCAweDA3MmNiYTk2LAorCTB4MzRkYjcyZTUsIDB4OTQ2YWVlZGQsIDB4OWNlZGJlMzcsIDB4YmU3NDM3ZmIsIDB4MWJjZjBlZmEsIDB4OWQ5MDE5NmYsCisJMHg0YTUxNzk4OCwgMHg1OWJlNDVhYiwgMHhlNDE1YTY1ZSwgMHgzZDEzN2RkNSwgMHgzZmY3MTU2ZSwgMHg2MzFiMWRiNywKKwkweDM2ZjRmOGM3LCAweGNmMGRhMGE1LCAweGYxMjliNzc3LCAweDUzNmRiNDA1LCAweGRlOTAxZTc4LCAweDVlNzg1MTVlLAorCTB4NzhmMWEyOWUsIDB4YmNmMGEyYjcsIDB4YTc3ZjNkMzksIDB4ODRkYmMwNjUsIDB4MDNkZGJkMGYsIDB4OGQxNWFmODIsCisJMHhkMjg4ZTNkZiwgMHg1ZDlkYTgxYSwgMHhiMmY3ZDJmNiwgMHhlMjhjZjFlYywgMHhmZjk1NzY1MiwgMHhhNjc0NTBlZSwKKwkweDkwN2JkOTk5LCAweDJjYzNiNWQ3LCAweGU1YjYxZjY0LCAweGEyNGRiNDE1LCAweDE0NmVjOWY5LCAweDA1NDk2ZDkzLAorCTB4MTE0N2E0NDksIDB4OGQ3ZWYwZWYsIDB4MzE2ZjEzYTMsIDB4MGE5ZmM3ODgsIDB4ZDRmZGViYmMsIDB4ZGU3NWYwYjQsCisJMHg0MTc3NzFiYiwgMHgyM2Y0NWY0OSwgMHg1ZjkwODdiZCwgMHhlYzhiMjliNywgMHg3MjQ2ZWY3OCwgMHhiZmI0ZGUxNCwKKwkweDQzMjY2MWU2LCAweDdmNTc2NjNlLCAweDdmNDUwYTk3LCAweDI0ZmVjNTNmLCAweGZkOGE4MTQ3LCAweGJmY2Y1ODU5LAorCTB4ZThiNmY4YmIsIDB4ZWYzZGVmZTcsIDB4ZmEzNjBjYzAsIDB4MjI2MzA4ZGUsIDB4ZDQ5NDI2OGYsIDB4Mjc2MWY5ZDMsCisJMHg2MzFjZjBmZCwgMHhmZWY3Zjc0NCwgMHhiZDY3N2VkYiwgMHhmZTA5ZGUzMSwgMHhiZjUxNmZlNiwgMHg3YjlkZTY1NCwKKwkweGUxM2QxMjdiLCAweDY4ZDZlNmZlLCAweGJmNzQyZmFlLCAweGZiNzk1NjUxLCAweDBmN2U2NmFkLCAweDlhYmVmZjU1LAorCTB4YjFjYTQ3ZWUsIDB4ZGQ3NDNjNDYsIDB4Yjg3NGUzMDMsIDB4YzgzOGYyYWEsIDB4N2M1MTg1NTUsIDB4YWZhZTUyMjYsCisJMHhiODZlM2E5ZSwgMHhkODc2ODE0NywgMHgyYzcxZmMyMywgMHgwY2Y0Y2ZkMSwgMHgyZTI5NzNjMiwgMHhhM2RjYmFkZiwKKwkweGViZmQ0NDRlLCAweDFmN2Y3NzI4LCAweGE4YTRhYmJmLCAweDMwYjdjYTY2LCAweDVmMTJmZjAxLCAweDkyNDNkZTc3LAorCTB4YzZjZmY0N2EsIDB4MzU3NGU3MGQsIDB4MjQ2ODU2MjUsIDB4YjcyODRhZTcsIDB4ZTAzZjM5MjcsIDB4NzI4Yjk1M2EsCisJMHgxZWNiYTA3ZCwgMHgwM2FlYjhhYiwgMHgxMzg5ZGNlNywgMHhiZjVjZTRjMywgMHhiZmY3YTIxZiwgMHgzNTY0ZTRmZSwKKwkweDc0ZGY1ZDdjLCAweDZlNzljMmZmLCAweDhmNjRmZGU3LCAweGZmMWVkYzVkLCAweGQ4YzdkZjZmLCAweDQwYWViMmVhLAorCTB4MzI2Y2RmZmIsIDB4YzM5MWU1ZWEsIDB4ODZkNjNlYjksIDB4NzVlMGY4OGIsIDB4YjNiN2VlOTksIDB4ZTFiNGJlYTEsCisJMHhkOThiM2Y4MCwgMHhmOTdhOGU1YiwgMHhkZmRmMzU0MCwgMHgxNDk5YjFjYSwgMHg3ZWIwMzk4NywgMHg4MjllNDQ1YSwKKwkweDMwZjBkMDZmLCAweGIzYWEyYzc5LCAweDg1YWJiZTkyLCAweDAzZWQwNzdkLCAweDQ5MWFlODIzLCAweDNhZmU5ZDJmLAorCTB4ZTdlNzI4ZWMsIDB4MjdiZDNhNzIsIDB4OTEyMTJhMjYsIDB4ODlmZTRjMDcsIDB4MDk5OTdlMmIsIDB4ZGNhYjlhZjUsCisJMHhiMDM5ZjI2NywgMHg4MWQ5MWI3ZCwgMHgxMTVkZGFkZSwgMHhhZjZmNGZmYSwgMHhjZTBhZmY2MCwgMHg3M2UyODBhZiwKKwkweGEwZTc1MDU3LCAweGZjZjZhNDlmLCAweDUxOTc2Y2ZiLCAweGVjN2UwNDk4LCAweGIxZTcyZWIwLCAweDJiZjYyYWE5LAorCTB4YWI3OTNmMDksIDB4NTFhZjZmYzgsIDB4YjA5ZWVkMGIsIDB4NDJkOGE1ZjcsIDB4M2UzMGE0ZmIsIDB4ZGUyNWU5YTksCisJMHhjN2FlMWZlNCwgMHhlZmI0NDM5YiwgMHg0ODEwZWZkNywgMHg5ZTYwZDdlOCwgMHhlZTVmMjJhMCwgMHg3ZWQwNDc4YywKKwkweDlkZjBkNGEyLCAweGRlZmM3ZDQ1LCAweDVmMzllZGNmLCAweDY5MGI1NTVmLCAweDAxOGYyODFmLCAweDBiZmMwMTdmLAorCTB4ODE5MmVjNTMsIDB4YmUyZDM3NjQsIDB4ZmNjNDRlN2YsIDB4MjhkYWRmOTUsIDB4MjEyM2Y3OWYsIDB4M2U0MmVkOWYsCisJMHgwMTYzZDM3YiwgMHgyZDJlOGM3NiwgMHhmMDI3NjE2ZSwgMHg0OWYwMDhkMiwgMHg0OWYyMGM0MSwgMHg3MGQ5OGE0ZCwKKwkweDliOTdhM2FlLCAweGUyNmYzYWM0LCAweGJmMGY1NGU3LCAweGMxZTczZjM1LCAweDM5ZjgzZGUxLCAweDlmODRjN2U4LAorCTB4ZTJmZmEzY2YsIDB4ZTg5YmQzMDksIDB4ZjA3YTc4YmYsIDB4NjJjZGVhNzMsIDB4NTNjZTI3ZmYsIDB4Y2RkYzViNGYsCisJMHhkMzk3ODBlZCwgMHgzYmU4NjIxMywgMHhmODdkMTkzZiwgMHhlOGQzZGYzZCwgMHg3ZjgwMTVmNywgMHg0Y2Q5Y2NmNywKKwkweDUzMmNkNjI0LCAweDg0M2E3N2U3LCAweDA2MDhjOTlmLCAweGNhMjc2ZjNmLCAweGFlZjMxOTQ1LCAweGQ1YmRkZmMyLAorCTB4ZGY4OTg4ZTUsIDB4M2EyNmY5YTMsIDB4ZTBkYzA2Y2YsIDB4M2RlM2I2YmMsIDB4ODdiYTNjYmMsIDB4MzlkM2RhNTcsCisJMHhmZTRlYjFkZSwgMHhjN2E2MTMwMSwgMHg0MDFmMDhmYiwgMHg1YTM4YjA5ZCwgMHg0NDYwZjhiNywgMHgzMWMzMTAzYywKKwkweDE5YzVmOTlkLCAweGJmNmZkYmRkLCAweGY5ZjhhMjYxLCAweGUyMGIxZjJlLCAweDUxZGMwMmVmLCAweGJkZGY4YzY0LAorCTB4NzZkOWYyMjUsIDB4N2YyNDYxMmQsIDB4NDI5YTcyYmIsIDB4NmEyNDVmZTgsIDB4NjVmMWUyOGMsIDB4MzlmYjYzMWUsCisJMHhiZGRmOTFhNSwgMHhlZWY5YzYzNiwgMHhlNzIyNWFmNCwgMHhlYmI1ZGY0YiwgMHg3ZmQ3ZDYyNywgMHhmZjhhMmFjZiwKKwkweDIyZmRjNjQ1LCAweDNlYjQ3ZGUzLCAweDNjODUyM2I0LCAweDE4NTRhZmVlLCAweGY1MWNiOGYzLCAweGQ4YmJlODMzLAorCTB4NzE0YWY4NjAsIDB4MzMxNGFlN2QsIDB4YTNhYzM4YzMsIDB4MmRjZjMyM2MsIDB4MjFlY2YwMjAsIDB4NTllM2E2NjUsCisJMHg5Mjg5OWVmZiwgMHg2YmRmZTY2ZiwgMHhmNTQ2ZGMwZCwgMHg3ZTFkYmU3YSwgMHhhYmEyNzE3NywgMHgzYWNhNWQ2YiwKKwkweDExN2M5ZjMxLCAweGJjZjQwZGNmLCAweGQ3MTg1ZGFlLCAweGJjZThiY2M0LCAweGQwODRkMDM2LCAweGM2MDVjZTFmLAorCTB4ZjQ2MGFlNDksIDB4Yjc1ODU3YmQsIDB4ZjBlMjVjZTEsIDB4ZmEyNjJkOWUsIDB4YTMxZjBmMWQsIDB4MWUwMWExZWYsCisJMHhjYzE2ZTc4YywgMHg1ODUwZjE0NywgMHgwMzljZTFiZiwgMHgyMzgwNjlkNiwgMHhlNGRmMDFmNywgMHg5M2RlMWZmZiwKKwkweGEyNzdlM2RlLCAweDI3OGY1MmY1LCAweDYxMzM4Yjc1LCAweDJmYTQ4MDA3LCAweGJkZjM4Yjg2LCAweGZhMjg2Y2ExLAorCTB4MDZmZTRhNDEsIDB4MTQ5NWMzYTIsIDB4NzJjYjVmOWUsIDB4ZGJkZjNlN2EsIDB4ZjdlMWZkMDksIDB4NzI4ODdlOTMsCisJMHgwMTcxODA5MiwgMHgwNGRlZjg2NiwgMHgwZjc0YzhmMywgMHhlN2M0NTRjMCwgMHhlNWViZWE2YSwgMHg0OGM3OTc0MiwKKwkweGNjZDE2ZGJlLCAweGE2ODQ3OThlLCAweGVhMGY2ODgyLCAweDYwMGQ5YjEzLCAweGY4ODUyZWZjLCAweGVlMjRiNzRlLAorCTB4MjgzZmZkM2YsIDB4MDA4MTJiZDQsIDB4MDAwMDgxMmIsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4OTA5NWZmMDAsCisJMHg1MGMzNGIzMSwgMHg5N2JmODUxNCwgMHg0YTM2YWM0NiwgMHgxMDU2ZGFjMSwgMHhhODUwOGEwOSwgMHg3NTVhNTA5NSwKKwkweDk3Mzc1NDMzLCAweDIyMWQwZThjLCAweDM4YmEzODNhLCAweGZjNWQyNTFiLCAweDA5ZjljZTAxLCAweGU2ZTI4NGZlLAorCTB4NDgyYWUwZTYsIDB4MjJiZjgyOTAsIDB4MjZhNjk3ZGUsIDB4Y2JiZDA4MjAsIDB4NzdkZGU3NzksIDB4ZGRmNzNkY2UsCisJMHgyZThkY2MyYiwgMHg1ZWNhNzU1MCwgMHg3NTYxOTA0NywgMHg0NDQ1MDZkMiwgMHg5YWVhMTE1MiwgMHg0N2UxNzUzNiwKKwkweDNjZDZhNWE0LCAweDdjMjJjMTI4LCAweDRjMTIwOTJlLCAweGVjYmJhYTc1LCAweGZiZDQ1YWIyLCAweDVmZmVkMjQ2LAorCTB4NzNlNGVjNmYsIDB4NzU2OWZkNzMsIDB4MjdlN2NhZDIsIDB4MjJmZjhlYmEsIDB4YmE3N2U4OTgsIDB4MDA4MzlkMTIsCisJMHhlNGUzZTFkNiwgMHg2NWY2OGZiZCwgMHhjODc3M2QxMywgMHg1Zjk0ZGNhYywgMHhkNTNkYTNlOCwgMHgzOTcwMDc5YiwKKwkweDNhZGYzNzZiLCAweGRiZTIwZDQ2LCAweDBhYThmMzhhLCAweGE1NjcwNDdiLCAweGZkMzk4Zjc0LCAweGVkMzQ3MzdlLAorCTB4YjBhNTZmMmQsIDB4ZWYzN2U2NTcsIDB4YmY4OTY5NWUsIDB4YzIxYjcxYTUsIDB4YzFlYzg0ODEsIDB4YzgxNDQ3YTgsCisJMHhiZTBkYWFkMSwgMHhiOTQxN2RjZCwgMHgzZTk5Y2I4YiwgMHhiZjA1YzU5MywgMHg2N2ViODFmMCwgMHhmM2JhNzkzMSwKKwkweDg0MTZiZjBmLCAweGNiNjJiY2JmLCAweDVmMWRkN2ZmLCAweDdmNzRmNjhkLCAweDZiN2QyMzhjLCAweGJiOTJmNzJjLAorCTB4NTBhOGRjZTEsIDB4ZDlmNjk1ZjgsIDB4ZjQxMTJlZDUsIDB4NzM4ZGJjZjMsIDB4ZjNlNTY5ZjEsIDB4NzQyYjAwN2UsCisJMHgwMjUwNTc0NywgMHgwMDAwMDI1MAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBjc2VtX2ludF90YWJsZV9kYXRhX2UxaFtdID0geworCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4ZTI0YmZmMDAsIDB4NTFmODYwNjIsIDB4MzhjZmMxMGYsIDB4OTA5ODE4MTksCisJMHg3NzAxNDNmOCwgMHgwMTY4NDMzMSwgMHgyMTA2MDYxNiwgMHg2MjYzNjYyMCwgMHgyMjY3NjA2MCwgMHgwNzJiYmY1ZSwKKwkweDlkODc3ZDgyLCAweDEwMzhlMTgxLCAweDc4MWY2N2RmLCAweDVlMjQwZDdmLCAweGJiM2Y0ZGNkLCAweDJlZDFkMzdlLAorCTB4N2UyN2YwNjIsIDB4MDJhZjg2MDYsIDB4MDU4YjBjMGMsIDB4MjEwYjdjMjEsIDB4ZmNjZmY5NTQsIDB4MThhNDc2MDgsCisJMHgwMmE1NzY2NSwgMHgxNTAwMDNmNSwgMHg4MDUxYjc3YiwgMHgwMDgwNTFiNworfTsKKworc3RhdGljIGNvbnN0IHUzMiBjc2VtX3ByYW1fZGF0YV9lMWhbXSA9IHsKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZGRmZjAwLCAweDQ1NTQ3Yzc5LCAweGJlZGQ3MGI2LCAweDk3YTc3NzRiLAorCTB4NDJjODQyNzQsIDB4NDAxMGRjMjAsIDB4ODA0ZDg4NTQsIDB4MDI0ZGUzYjAsIDB4MTA2MDJhMzEsIDB4NjZiNzFjMTEsCisJMHgwNDQ4NGIwZiwgMHhkM2NlN2NkZSwgMHgwODMxYmFmOSwgMHg1NDRlMzhlOCwgMHgzODdjMDY2NiwgMHhhOGQwNDFhZiwKKwkweDFhMGMxYTUxLCAweDE2NmJjM2IwLCAweDI2NjY1NDE5LCAweGI4YzM4ZTNhLCAweDZjOGE4OWJjLCAweGZkMDExMjQyLAorCTB4NWYyODM3OTgsIDB4M2I3NTUzOWQsIDB4NGRiYTZmN2QsIDB4ZTNmYmU2NWMsIDB4NDVhN2VmY2IsIDB4ZWFiN2JhZGQsCisJMHg5Y2VhZDlkNCwgMHgyNWFhYTc1MywgMHhkN2E5MjA1OSwgMHhmZTE5NzIxMiwgMHg0OGE2Zjk2OCwgMHg1MWQxMTkwOCwKKwkweDFmYjcxNWI2LCAweDA0ODQ2OTI3LCAweDZkZDU5MTVlLCAweDdmYzIyMTAyLCAweDBlZDcyMmI5LCAweDE2YzhlNDI3LAorCTB4ZjVhNTY4MjEsIDB4MjEwNzVlYzgsIDB4ZDM3NjdlYjQsIDB4OTczNWEwYjQsIDB4MGUwNTdkOTAsIDB4YmIzZmRlMGQsCisJMHgyNWViMDhiNSwgMHg5NmUyZmViYiwgMHgyZWU1N2I2OCwgMHg2NWJhODI1MSwgMHg4Yjc3MjllZiwgMHg2YjJhOTA5MywKKwkweGU5NjNhM2YzLCAweDIyNWRmNmYzLCAweDIyODc0MmQ5LCAweDQ5MGIxMjgxLCAweDhkYjhlNDI3LCAweGFjOGJiZmIwLAorCTB4YWFjZWMwYmUsIDB4ZGRmNzliOTUsIDB4MzQ1NmZkMDUsIDB4ZjY5ZDg5NWEsIDB4ZTE3YmI5NTMsIDB4YmViNGIxZDQsCisJMHhlMDRjYjBmMCwgMHhhYjZkY2E5NSwgMHhiZWI0NWU5NCwgMHhhMDg0MjgyOCwgMHgwZmRlYzBmZSwgMHg2MmI2OWM3MCwKKwkweDRjMWExMTUyLCAweDhkYmY2OWM4LCAweGJhZDA1N2E4LCAweDA2N2QzOWJiLCAweGI4MzhiZTdkLCAweDVmZGUxNGEzLAorCTB4MmQ3ODJmNWMsIDB4OWJjNWZkZjQsIDB4ZmU4MTlkZjYsIDB4ZmRjODM3MTcsIDB4OTJmZmRhNDUsIDB4MDc1MTA3M2EsCisJMHgxMzJmYjFiMSwgMHhhOWZjYzc5OCwgMHgxYmU1NmYwMCwgMHg3YWQyYjEzMiwgMHgwYTE1YTVjNSwgMHhiNTQ5MWMwMSwKKwkweGM2MGJiOTRhLCAweDVkNTE0YzdmLCAweDFjNjFjZTMwLCAweGU1NjdjNzQ3LCAweGZhMWM3NDczLCAweDA0OTdiMmRkLAorCTB4OTk2ZDRjMmYsIDB4OWUwMGY4ODUsIDB4NTlmNmRkZDYsIDB4NWU2MTNiNGYsIDB4ZjA4MTk0YWIsIDB4MGFiNWVlZmQsCisJMHgzODMwYjdiYywgMHgwYWJiMTVmYiwgMHg0YTU2NmRmMCwgMHg5YjRkY2UwMSwgMHgzYjgzMDU5NSwgMHhmNzUyNWJmYSwKKwkweGUzYWUwMTk2LCAweDdjMzJmMjFiLCAweGYyZTZlZDMxLCAweGQ1MTA5ZmI0LCAweDRjNWY1MWRhLCAweDAyNzIxNjg4LAorCTB4ZGE2NTQxZGMsIDB4MTdlNzhlOTAsIDB4ZjdhNDE0ODQsIDB4YTg5MTNhOTIsIDB4MjlmZThlYjYsIDB4NDllOTA4NjEsCisJMHhmYTE3ZmZmZiwgMHgyNjgzZTA0ZiwgMHg2ZTViNzA1NywgMHg3Yjk2YmQwNywgMHgwZWQ1YmZlOCwgMHg3MGYzOWQ3YSwKKwkweDg1ZWQ0OWZhLCAweGU1ZWJmZGIxLCAweDBhMDc0MGEzLCAweDgzZGZhZDRmLCAweDRjZmVlM2U1LCAweDU1ZmJkNzJjLAorCTB4ZmM2ZmRiYzQsIDB4ZTBkY2IwODMsIDB4MjdmM2UyZjcsIDB4ZGNiMGEzZmQsIDB4ZmNiMGQ3ZTQsIDB4Y2IwY2JmOWQsCisJMHhkZjFjYmZhMCwgMHg4NTlmZTJkYiwgMHgwZmJmNTZlNSwgMHhhZmUzM2Y5ZiwgMHg1ZmNlYjJjMCwgMHhmNzlmY2Y4ZCwKKwkweGJkNjU4YmRmLCAweDVmY2Y4MDNmLCAweDMyYzNhZmYyLCAweDcyYzVhZmU0LCAweDk2MDM3ZmE3LCAweGJlMjBmZTBkLAorCTB4MGViZjhhZjcsIDB4MDg3ZjQ2Y2IsIDB4MzdmMWVmOWYsIDB4NDdmNjE5NjIsIDB4ZjQwYmRjYjAsIDB4ZGZjNDY1YTUsCisJMHhmZjdlZTU4YywgMHhmYTBmMmM1MSwgMHg0M2JiZjA1YiwgMHgzZTU4OTNmZSwgMHgxZWVlZjFjMiwgMHg4YTI0OGE0NywKKwkweDNjNDZiNzM3LCAweGVhNDg1YzU0LCAweGE2NDhhZDY0LCAweDU2NzJkNGY1LCAweDUwMjNiZjRmLCAweGJhN2FkMGE0LAorCTB4MWUyOWQ2OGYsIDB4MTQ4ZDJkN2IsIDB4NTdiZDY5NTksIDB4YjljZjZiMzUsIDB4NjhkYjE0OWYsIDB4ZGFjMDI3M2QsCisJMHgxNWEyM2RmYiwgMHg1ZmJkNjlkYiwgMHhiODFmNmIyZCwgMHg0NDljNTAyOSwgMHhhYzgzMDNlYiwgMHg0OGZhYWFmZCwKKwkweGFmZDY4M2IxLCAweGZjZjZiMTBhLCAweGQyNzEyOTMwLCAweGQ1ODQ3ZTdhLCAweDI1Njg4ZTBiLCAweDY4MmY1YTJlLAorCTB4MGZjMmY1NjYsIDB4NWE2ZTI1MDMsIDB4ZGY2MTZjMmYsIDB4MjkxMzM5OGYsIDB4MzFmNWE2NDksIDB4YzI3ZGFjZWQsCisJMHg0M2QxMzIyNSwgMHg4MDg4MTNlYiwgMHhkMTY3NjJmNSwgMHgyZjVhMTRjNCwgMHg2OTdhYjBmNiwgMHgxYTkyZDllZiwKKwkweGNhZjZmZjg3LCAweGU1MDk3MzJkLCAweDRkYzBiYTg1LCAweGViNDU5NDlhLCAweGUyMGFjYjRhLCAweGNjMGNmOGE1LAorCTB4MjY0NDdhYzIsIDB4NDhmZGEwZjMsIDB4OGQyNmI2NjAsIDB4YWM4NTc1YTYsIDB4MGVmZmY2ODQsIDB4ZmRmNmM2MmMsCisJMHhlZGVkOGFiMiwgMHhiZWQ4MTU4MSwgMHhkZGIxNTE1ZiwgMHhhYzdlZWFiMiwgMHg2YzM1OTQxZiwgMHgyMGY1NWI0ZiwKKwkweGQxNTA3ZmJlLCAweGFhZTA3ZGIwLCAweDQ4N2ViMTQ3LCAweGE4ZmI2MWY2LCAweGY3YzViZjU1LCAweDZjM2UyOTBmLAorCTB4NTA3NTdjN2YsIDB4ZmZlYjQ4OWIsIDB4MDBiNmY4MjEsIDB4YmUwOGQ3NWYsIDB4ZmMwNzkyMGEsIDB4YTcyY2NhMWEsCisJMHgyMDQ2YmFmYywgMHgxZTNlNDBiMywgMHhmMmE2YTYwNiwgMHhkMTRiMjZiMCwgMHhmZGVkYmY0MCwgMHg1MTY5ZjBiYSwKKwkweDA2OWRiY2UwLCAweDNjY2YwNWY1LCAweGJjZmQ4YjljLCAweGI0YzhmZDgwLCAweDdlZWJiMTFmLCAweGNhMzM3YzI2LAorCTB4NmY4NGNmZDAsIDB4MWE3ZWY0MmEsIDB4N2IxYWJkZTAsIDB4ZmJkOWZhZjcsIDB4M2MyMzE4Y2QsIDB4ZmJkNjJjZGYsCisJMHg1YzdlYzI2OSwgMHg4NGQ3OWJkZCwgMHhmMDhjZTNjYiwgMHhmN2FhNWU1YywgMHg0OWZiMDg3MywgMHgxMTNjMWVlOSwKKwkweDlmYTFhNDc5LCAweGVmNTBiYzg4LCAweDRmZDg0ZmU3LCAweGEzYzFlZWNmLCAweGZkMGRhMzI5LCAweGJkMjJjYTY4LAorCTB4NGZkOGEzOWYsIDB4ODlmYWY3NTYsIDB4ZjA4ZDYzMjgsIDB4N2VmNDRiMjgsIDB4ZmE3ZWM2M2UsIDB4OWE1ZTZmNzQsCisJMHgxZTExYmM3NSwgMHhjZmRlYTU2YiwgMHg2ZTdiYTQ2OSwgMHhlZmQ5ZmFmNywgMHhiZjY3ZTIzMiwgMHhmMzlmOGEyYiwKKwkweGVlODBjZjA4LCAweDZkZDhhYmNkLCAweDNiYjE0ZmM0LCAweGQ4NGI5ZjhhLCAweGViZGQ5NWNmLCAweDg4ZGJiZjY3LAorCTB4MjhlZWZkOWYsIDB4ZTYwMTY0N2UsIDB4ZjM3YmE0MzUsIDB4ZTIzNjRlMmEsIDB4OGEzOTM4YTcsIDB4ZjAwMGI3MWYsCisJMHgzYzFlZWQwYywgMHhmMTFhN2IwNywgMHgxNDY3YjA3MywgMHhjZjA4MTkzZiwgMHgzM2MxZWU4OCwgMHg5Zjg4ZGQzMSwKKwkweGZjNTFlOTg5LCAweGU4Y2YwOGE4LCAweDMwNzNmNWVlLCAweDgzOWY4OGRkLCAweDVjZmM1MWU5LCAweGVmOGNmZDg5LAorCTB4NjYyNmJjZGUsIDB4MzEzM2YxMTgsIDB4MDI5ZjhhMjMsIDB4NTdjOGE3ZWMsIDB4ZGExMGYwODcsIDB4M2Y3MTJiOGYsCisJMHhmMTE4ZmE4NywgMHgxNDRmYTg3MywgMHg5ZmIxNjMzZiwgMHhiYzlmYjQ0OSwgMHhjZDI5ZmJhZSwgMHgzNGE3ZTIzMSwKKwkweDg5OWY4YTI3LCAweGJiZWJlNzg4LCAweDFjYTFjZmQ3LCAweGU1MGU3ZTIzLCAweDA1MzNmMTQ0LCAweGJkZDI5OWZiLAorCTB4MzVmNjk1NzksIDB4MmZiNGE3ZTIsIDB4ZDJiNWNmYzMsIDB4ZTg2NzVjNTAsIDB4ZTkxNWU5ZGEsIDB4MmVmNWQ3MjcsCisJMHhiZWZhMDRkMiwgMHhkMTc1NjFlOCwgMHhmNzYwMjVlMywgMHg0MzNkYmE4OCwgMHhiZTkxMzU5YSwgMHgyOTRmYWNlZiwKKwkweGRhYzQ5ODc4LCAweDAyNzdjNTM1LCAweGNhZDQ1YzdlLCAweDkyNmJiNThiLCAweGVjMTkyNTQ3LCAweGQ1MmQxNGE4LAorCTB4ZDY1MWVmNTAsIDB4Y2Y3ZWYwY2IsIDB4ZjY4NjdlZjIsIDB4MTk1NzU5OGMsIDB4MDU3Y2IzZGEsIDB4YzU3NjdhODYsCisJMHg3ZGZiYzMxOCwgMHhmNTBkOGJhYSwgMHg2MGRlZjdiZSwgMHg3MDM3M2Y3OCwgMHhiNzllYTFiMywgMHhmNzg2MjdlZSwKKwkweDMxY2VkNDA3LCAweDYxYjE1ZmI0LCAweGNhZmRhMWIxLCAweGZkNDM3MmUwLCAweDM3N2ZiYWVhLCAweGY0MjQzZmJjLAorCTB4OWFmZGExODAsIDB4ZWQwZDg3YzYsIDB4MWI4ZjIzNDMsIDB4M2YwZWMzZWEsIDB4NDQ3Zjc4NjksIDB4ZmI0MzE2ZjMsCisJMHgxYmNmYTNjOCwgMHhlY2I3NDdkYSwgMHg5ZWM3ZDQzNCwgMHg3Zjc4NjNkYywgMHg0MzdlZmI3YywgMHg2ZjhiZGFmZCwKKwkweDIyMmZkZTFhLCAweGRiZGEzNjdmLCAweGVmMGMwZmI2LCAweDZhN2NmMjRmLCAweGYzMmViZjY4LCAweGVhOWQ5MzczLAorCTB4OWFiZjFjZjQsIDB4MmI5MDQ1ZDcsIDB4MjA0OTdlODIsIDB4MzU3YjQxNGIsIDB4YWViMDUyZTIsIDB4M2YzMjcyZjQsCisJMHgzZDQwYjVjNSwgMHhkOTQ3Zjk0NiwgMHg0MzRkNTczZiwgMHhkNDdmYTRiZSwgMHg1NWVhMjg2ZSwgMHg3ZDBiNDU3MSwKKwkweGJlMzFkM2ZlLCAweGY5ZjQzYzJiLCAweDM1ZGYxNTRmLCAweDBkZjYzODllLCAweDY0ODEzN2U1LCAweGEwNWFhOTQyLAorCTB4OTVhZmI3MzQsIDB4NjcxN2JmMTksIDB4MzFmODFhNWYsIDB4ZDJjYWJlZmQsIDB4ZDY4NTMwM2UsIDB4MjE0NTg5N2IsCisJMHgwNDU3OGY5MCwgMHg0OWQ1ZGEwYiwgMHhmNzg2YTkyMiwgMHhmZDA0YWM5MiwgMHg4NWI5YjVhNiwgMHhlNDYyMDc0ZiwKKwkweDZhMWY1ZDYxLCAweGZkMWQwODY3LCAweDk5N2Q5M2FlLCAweGZhYWQ0NzY4LCAweGNlNzYwMDI4LCAweDVlNzQzZTlhLAorCTB4NGQ3OTA4YmQsIDB4ZTgxMjI4ZjgsIDB4YjNlZmJmNGYsIDB4ZmI0N2QzMjAsIDB4Y2ZkNDJhYjMsIDB4YTE1ZjFkODgsCisJMHhmMWM2MGZlMywgMHg4NzBmMjAyMywgMHg5ZDExZmM2MCwgMHgxYmY2YjdjNywgMHg5NmRmMTg2NSwgMHhkZjE4NjE1MywKKwkweDNkZjFkMGE2LCAweGY1NWMzZmQ0LCAweDEyOWYxZjE5LCAweDZmMjEwYzYxLCAweGY4ZTE5ZjA5LCAweDFjMGE5Y2Q2LAorCTB4ZmQ0MmFkN2YsIDB4OTNmMWQ4YWUsIDB4YzMzN2UzYTIsIDB4MzQ0YmRmZmMsIDB4OGM2MzdlZmYsIDB4NmM1OWNmZjMsCisJMHhlNmMyYmY5YywgMHhiM2FhZmVmZiwgMHg5YzI0ZmM3YywgMHg1OWMyMDdmZiwgMHhjNTljZmYzNiwgMHhkNjU2ZmU2YywKKwkweDc3N2M3NDZmLCAweDMwMmRmZjE0LCAweGUzMDRmMWZlLCAweDE5YzZmMzViLCAweGE5NzdkZmU3LCAweDM2NTZmZTcxLAorCTB4NWY1NWU5ZmUsIDB4Mzg5ZGYxZjIsIDB4OTdjMmU3ZmUsIDB4OTc3ZGZlNmMsIDB4ZDU4YWY4ZTIsIDB4NTFmZTA1ZTcsCisJMHg4M2FhOTNiMiwgMHg5YmQyN2M3NCwgMHg2MDBjYmUyYSwgMHg5NDBlM2ExNywgMHhkMGE5NTI4MywgMHhlODRkYjIxMCwKKwkweDM0ZmM3MDg3LCAweDU3ZGJmMTg5LCAweDUwZGY5NDQ5LCAweDM5ZjAwNTlmLCAweDU5Y2Q1MjA5LCAweGNlNDZmZDQ4LAorCTB4OGJlYTRiZWIsIDB4ZDg3YmQwMTQsIDB4ZjlhZGZkNGUsIDB4OGQ3OWQ0MWMsIDB4NTkzN2YyMjIsIDB4YTAwZTBkNmYsCisJMHg4YTM2YjZmMCwgMHg1YmNmYTgwMSwgMHhmYTA4M2UzZiwgMHhlZTRhY2FiNSwgMHgyNGVmODcyZSwgMHg5ZmU3ODExMiwKKwkweDk2Yzg3YWZkLCAweGNiOTk3OWQ4LCAweGYxZjJiNWY5LCAweDhiNzkxODk2LCAweDY0YzU4MWZhLCAweDZmODUzNTUwLAorCTB4ODhjMTMwMTIsIDB4ZDQyN2ZhOGUsIDB4ZjhjNzAzOGYsIDB4MTBmN2VhNDMsIDB4MmE3Y2ZmZWEsIDB4OWJmZWYxYjMsCisJMHg2ZjUwN2JmYSwgMHgzYTFlZmVhMSwgMHg3ZTE1NjRjZSwgMHgzNzdiYmI0NywgMHhjZTVmYzI5MywgMHg2MjQ0ZmZlMSwKKwkweDFkYzlmYWYyLCAweGU1NDAzMDQyLCAweDBkOWZhYmYzLCAweGVlZmFmZjQ1LCAweGU5MTQxZDdiLCAweDBlY2M3MDFkLAorCTB4ZTlkNDMwZjQsIDB4YTc0MDAyYmMsIDB4ZTBkNmRkZjYsIDB4YWJmMTAxMTYsIDB4YTFhNmJlMDIsIDB4NzczMjEyNjgsCisJMHg3NWM1MzY1ZCwgMHhkZDdmZmJjNywgMHhlMDkwZTUzYiwgMHhhMjU2ZTQyNiwgMHhmZGY0MTljOSwgMHg3ZDBhNTczYiwKKwkweDE5ZGM3NDNjLCAweGFkODBiNTlhLCAweDA1YjY1YTQzLCAweDViNjQ5YWU1LCAweDczNzIxMTQ2LCAweGY2OTk1MGMzLAorCTB4ZjI2OWE2NDAsIDB4ZTMzMTJkMjcsIDB4ZDYzMzJmNGUsIDB4ZWIxYjk0NjcsIDB4NWIyNmIyYWQsIDB4ZDNhZDVjMjgsCisJMHhmNjk5YjIwNCwgMHhiMTk2NzMzYiwgMHhiZmE3MWY1ZCwgMHg5OWQxOTUyNSwgMHg3MTRlNTc4ZiwgMHhjZDFmNDU5MiwKKwkweDFlMDBiMjg0LCAweGIzY2U5MDdiLCAweDFkNWJlYzNjLCAweDMyYjlhYTllLCAweDFmMWZhMDg5LCAweGFlODA0OWU4LAorCTB4ZWY3YzM0ODEsIDB4NmYzNjFlMjcsIDB4NjRiM2JjMzMsIDB4ZTc0ZTU2OWIsIDB4MThiNjZiMzksIDB4YzMzNmZlMDQsCisJMHg4NzVlZmVmZiwgMHhlNWE3Yzk2NiwgMHg2MjY0MjdiYSwgMHgzMzFmM2NlOSwgMHhjY2Y5YjdmYywgMHhiMGM5MDlmMywKKwkweDYxNWVkZmNlLCAweGU2ZjhjZTdlLCAweDI3ZmZhNzM4LCAweDNjYjQxZmMwLCAweGUxNDFmYzAxLCAweGEzZjljNjNmLAorCTB4ZmUzMmFmNDMsIDB4YTZmYWIyYTgsIDB4NmZiNDNmMDIsIDB4OTVkMjA5MTQsIDB4OWNhZGNiZjMsIDB4MWFkN2U2NWYsCisJMHg5ZjEwODJmOSwgMHgzODVjNzQwYywgMHgzODc4Mjg0YiwgMHg3MjY2MGY4NiwgMHhjMWI4NTgzZSwgMHg5Mjc3MzdjOCwKKwkweDg3MTU5YzgwLCAweGRmYWRiNzJlLCAweGRhYTY2MGZjLCAweDcxMWY3ZTc5LCAweDkxZmRiOWJlLCAweGNlOWY4ODdkLAorCTB4YmE3NDY0ZjMsIDB4Y2VlOWQzOGIsIDB4YWRmYjYzNmEsIDB4NzI3N2FlOWMsIDB4ZjBkYWNlYmEsIDB4N2Q1NGViZDgsCisJMHg0MWE4OWY5MCwgMHhlYWJkZTQxOSwgMHgyZDllOWQzZSwgMHgzOGZhN2EwNiwgMHhkZTcwY2QzZCwgMHhkNzc5ZTljNSwKKwkweGNkM2QxOGNmLCAweDdhNzBiNmYwLCAweDJmMzg2Y2I2LCAweGUxOWQ3ZTkzLCAweGY3NzdjMzM1LCAweDgzZTY5ZGJkLAorCTB4ODFkOWFkNzEsIDB4NmFhY2Y0ZjgsIDB4MmM3MTVhMmMsIDB4ZTg2NTc5ZTYsIDB4NjJjNzE1ZmEsIDB4ZGQ0OTZjZTQsCisJMHg1MTdkNDMzNCwgMHhmYmMzMzZmMCwgMHgzNmNjMzcwYiwgMHg1ZGFmY2ZiNCwgMHhiYjlmNjg2NCwgMHg3ZDQzMWVlZSwKKwkweDg2NjdlMDc2LCAweDc3YmVlZmY3LCAweGNlZmRhMTk1LCAweGVkMGM4N2VhLCAweDY2M2M1N2I3LCAweGRiZTZkZmE4LAorCTB4ZTY3Zjc4NjgsIDB4ZjY4NmNkYWMsIDB4MTljZmU1MTksIDB4ZWQ5N2E3ZGEsIDB4NjlhN2Q0MzAsIDB4MGJlZjBkYmIsCisJMHg2ZGY1MTc3YiwgMHhmN2Q1NzVjMSwgMHhlZjEwMTk5ZiwgMHhmOTE1OWJmYywgMHg3NGVmYWNkNCwgMHhhZmNjNzhiZCwKKwkweGZlZTNmM2UyLCAweGY0OWU1ODQxLCAweDY5ZjlmMTdiLCAweDU3MmMyOGZmLCAweGViYTZmZTgxLCAweDJiMzc2NTgyLAorCTB4ZGQ5ZjFlYWIsIDB4OTc0MmY4MTcsIDB4NmY2NTRmOGIsIDB4YWVkOWU4MGUsIDB4YmVmZWExZjQsIDB4YmZkMWVmNTksCisJMHg4YTc2NzhlYywgMHg0ODE1MmU1ZSwgMHg2ZDgzYWMzOSwgMHg5ZmQ3NGVkYywgMHg0ZWNjMmRkYiwgMHgyYzAxZTQyMCwKKwkweDZlNGMyYTk3LCAweDJhY2NlZTk3LCAweDQ3YTg2ZTI2LCAweDEzM2I1NjA2LCAweDAyNDI0YmY3LCAweDZkN2U2N2NlLAorCTB4ODVjZTAxOWUsIDB4YzEzNmFlMWIsIDB4NmFmOTA1YjcsIDB4ZTE5ODcwNTEsIDB4YjFiYTkyZjksIDB4ZWNjZWVmODYsCisJMHg2NWJlMTExMywgMHg2MWEzZTMyMCwgMHhkZjdmMmIzOSwgMHg3MjMzZmEwMiwgMHgxMGZhNjcyMCwgMHgwMGZiNTc4MCwKKwkweGQxM2Q4ZGViLCAweDJmZTMzYjllLCAweDAwNmM3MTViLCAweGNiMWNiOWUwLCAweDU4NTlmZTkzLCAweGIwZmJmNzFlLAorCTB4YzBhZmU2M2MsIDB4MzU3ZjEzZjIsIDB4N2JmZTJkOTYsIDB4N2Y2ZmZjYjEsIDB4ZmQwZmNiMDAsIDB4ZGY3Y2IwZWIsCisJMHg1MWU1OGI1ZiwgMHhkZjJjMDZmZiwgMHg3Y2IxMDdmMywgMHhlNTg3NWZkNywgMHg5NjEwZmUzYiwgMHgyYzQ2ZmVjZCwKKwkweDk2MWFmZDViLCAweGYwYzRiY2JhLCAweDE4YWNkZjRiLCAweDlmZjVkMTdlLCAweDcyNGYxZmFlLCAweGZjMGQzOTdlLAorCTB4YjYyZjhmMTIsIDB4ODRlMmY5MTgsIDB4NjE3YzhkNWMsIDB4M2E2Njg3ZDYsIDB4ZjdkZmY1OTgsIDB4M2YyOTg3ZTUsCisJMHhkMDc0M2YxMiwgMHhlZjQ0ZGIzYiwgMHg5ZGU4YWViYywgMHg3YmQwYzYyOSwgMHhlMGMzYzU4YSwgMHgwNWZlZjRlMSwKKwkweDVlYzcxYmMwLCAweGZiOGIwNDlmLCAweDQ4M2IxODg4LCAweGZhYzBiMjJiLCAweDJmZWY5Y2IwLCAweDNmNTgwN2QwLAorCTB4YTFhZWM3YzcsIDB4YmRhMzM1ZGQsIDB4ZmEwNDFjMTQsIDB4ZmZhMGRjZjgsIDB4ZjlmMTA4MTksIDB4NTEyOTQ3NzMsCisJMHhjZmNmMTM3MiwgMHg3ODg0YmY0YywgMHhhYmU4ZjE4MCwgMHgyZTk0ODIwYiwgMHhkYmI3M2EzZCwgMHhlZDVlMTg5MywKKwkweGU4NDY1MjE2LCAweDgwZDBmMTdhLCAweDA2NzNiYzY3LCAweGE5MjI1ZDYzLCAweDNiZDA3ZGYwLCAweDVmYTcxNWNkLAorCTB4N2UwMjgzNmEsIDB4OGQ2YmMyYmIsIDB4ZTg3Y2FiZWIsIDB4ZmY5M2Y4ZWYsIDB4OGE3Mjg0MmMsIDB4NDlhMWQ5ODUsCisJMHg4N2I0NDQwNywgMHgyZjY5ZTQ0OSwgMHhlZmFhMzdlMCwgMHg4ODRjZGVhZCwgMHg1MDBmYjc2MywgMHg5MzFlYjgzYywKKwkweDAyZmUyMzEyLCAweDNkZmMwNmM1LCAweDhjZDQ3MTQ0LCAweDI2NmQ1OWViLCAweDU3ZmZhZmUyLCAweDgxYmFiMzAzLAorCTB4NjRmNGFlYmYsIDB4MDM5Y2Y4NTcsIDB4ZTAxN2ZlZjMsIDB4ZDVmZDJiYjMsIDB4OWEyMmRlOTUsIDB4OWQyMzUyZmEsCisJMHgyMWRlZGI3ZiwgMHgzMGFiMGYwNSwgMHg1YmUzYjdlZSwgMHhjMzMyYjdkZiwgMHg3YzhlZjgxMywgMHhmM2FlOTZkYywKKwkweGExMGU3MzcxLCAweGYyZTU5Y2UzLCAweDhhZTFhZTcyLCAweGI0NGJhMDY0LCAweDI5ZTgyZTlmLCAweDM5NDdkN2ZjLAorCTB4ZTZjZWJmYTAsIDB4NmI1YmZiMWEsIDB4MjE1OTJmZWUsIDB4NWM3NDM1YzIsIDB4NjQ5MGEyOTcsIDB4YmU4ODU2NDIsCisJMHgwNmZkMTE1YSwgMHhmYzAwNGI2ZiwgMHg2ZjBlYmRmMSwgMHhkOGZlMGE4ZCwgMHg1NDQ2M2ZlOSwgMHhiN2U4ZDllOCwKKwkweGI0ZmMzYjlmLCAweGU1OWJmYzFiLCAweGIxZjU2Mjk5LCAweGNiZDQ3NDM4LCAweGI1NmU1MGNhLCAweDY4MGZkNjMzLAorCTB4ZDVjZmQ2MzQsIDB4OWMyMTY1MGEsIDB4Y2I3YzlhOTcsIDB4M2MwNzU4MTAsIDB4ZDA2NGM3ZDUsIDB4ZWE1ODk5Y2IsCisJMHg1NGNmMmNmZCwgMHg3ZjRhMWM3MCwgMHg1M2VhNDdhNiwgMHhmNjljY2Y1MCwgMHgxZmJkZjBkYiwgMHhmZDQ0OGUxYiwKKwkweDQwZDFjMDc0LCAweDgzZGZhNTNlLCAweDRiY2U1ZDg4LCAweDM5NDI3ZWZjLCAweDEwMjgyZTkwLCAweGY5NjEyNDhmLAorCTB4ZWNkZmYwMmIsIDB4ZmRjYmJmZjQsIDB4ZWIwOTVmYTAsIDB4MjE1NWJmN2EsIDB4MDZiZDYwMzEsIDB4YzYxYmQ3OWUsCisJMHhmYWE5ZGZhMywgMHg5NzdjMmMxZSwgMHg3MjI0ZGU1OCwgMHg0YTc3ZTc1YywgMHg3ZWY4MzdiNywgMHg3YjNhOTJmMSwKKwkweDRjMmVkMWI1LCAweDFhYWJkNDMxLCAweDc2MGRhYWIzLCAweDBjMDNmYzIyLCAweDAyNDEwYWUxLCAweDY3Mjk3NzdiLAorCTB4YjljOTM2YmYsIDB4MmI2OGY4MGUsIDB4ZGY4MGZiMDQsIDB4YTU1ZWY2MDUsIDB4YTlmMTQ1YWQsIDB4YzBjZDI2MjgsCisJMHhlOTQ2NzM5ZiwgMHhmY2NlYWY3YywgMHg1M2E3ZWE4MCwgMHhlNDA0Yzk2ZiwgMHg1MGEyNWM4YiwgMHg0N2Y0NzYxNSwKKwkweGExNjI1MDU3LCAweDM2YmNiOWY1LCAweDY0Yzk2MWE3LCAweGJkNGVhZjU4LCAweGY1ZGEyMzcyLCAweDFiYjk0OGYzLAorCTB4NTIwYWNkZmMsIDB4Y2ZmMTA4NWIsIDB4MDY1MmM0YjMsIDB4YmM5Njc5NzIsIDB4MjMxNjFlZTMsIDB4MDU0NWU3ODcsCisJMHhjZWJiOTllMSwgMHg3ZjUzMTc2OCwgMHhiODVmNTBkOSwgMHg0MDVmNThjMSwgMHg3ZDg3NGU2ZSwgMHg2NWViMDVmMCwKKwkweDVmNDAxNDEyLCAweDE1M2ZkYjE4LCAweDI0MmQxYzk5LCAweDdkNjA2YmQ1LCAweDc1YjMyZjVmLCAweDQ4ODc4ZTZjLAorCTB4NTU1ZjU0ZDksIDB4ZTE1NGZhYmUsIDB4MWZmZjVhNmMsIDB4ZjQyZGM1OTEsIDB4YTk0NWRkN2QsIDB4MWM1ODlmY2MsCisJMHhiNDY4YWNkYSwgMHg2MTg2ZDNmZCwgMHg0M2NkNTJiNywgMHg4MWFlMGZiZiwgMHg0YmIwMmFmNSwgMHgzYjUzNmVmMCwKKwkweGMyYmJlZmQzLCAweDVmNTc4NjZmLCAweDJmZWQzYmZmLCAweGViMmEzODczLCAweGM3MTgyZDA0LCAweDAyNDliMDBlLAorCTB4NTgwMzc3ZjcsIDB4ODYzYzk2MGUsIDB4NTMyOGMyYjgsIDB4NTNmMzdiZmQsIDB4ZDNmMDMxMWEsIDB4NGFhN2QxNTYsCisJMHg4MGZmMTkzZCwgMHhlZDQ4MjUzZiwgMHhmNDg3ZWY4YSwgMHhmZmE5ZDk5ZiwgMHhmZjZhM2ZjMSwgMHg4NWZmNjliZCwKKwkweGZkNDdmZTg2LCAweGVmZjdmZGE4LCAweDY5NDRmZjA0LCAweDJiZmVlNzQ0LCAweDk1ZjE3ZDVmLCAweDhiMjdkNTAwLAorCTB4NGRkYWZmYjcsIDB4NGE3OGZhZTgsIDB4NTJmNzRkYWEsIDB4ZjZkZDJlZmEsIDB4N2NlODFiYTAsIDB4ODFiODBhNTIsCisJMHhjNTA1NGY1ZiwgMHhmNTljNjBiMiwgMHhlMDQ5M2VlYSwgMHgxNGU2YTJmNiwgMHhmZjA1OGUyMCwgMHg3ZTlmZmRhNCwKKwkweGRmZTgxN2ZlLCAweGY2NGRiNTdmLCAweGNlYWE3YzYwLCAweDM5NTJiMTFhLCAweDY4YjBkNjVjLCAweGZhYzdjOTMyLAorCTB4ZjZiZWFjYzcsIDB4OGRlYTExMGIsIDB4ZmM1YmZlNDYsIDB4MjFkM2FmZWMsIDB4MGE3MjgyZGYsIDB4ZDA0NGQ3OGYsCisJMHhmNWI2NWQ5ZSwgMHg5NzU4NTJiMywgMHhjYTNiNDhhYSwgMHgxODNiZjk5MSwgMHhlYTJhNjJmZiwgMHg3MjRhZDliZiwKKwkweDI3MGE3NmU3LCAweDFjNTVkZGZhLCAweGJmMGQ1NTJmLCAweDQzNzQ0MmY4LCAweGQwMDlmZDc5LCAweDQwNDNkNDE3LAorCTB4NWRmY2Q4YmYsIDB4OTc0ZmI3MDUsIDB4ZTNiNGFlNGEsIDB4MjMyNzE0ZDQsIDB4OGJkMDQ4YzksIDB4OTA0ODVlM2EsCisJMHhhYmUyYTdkOSwgMHgzYzQzZTU0ZiwgMHhiN2Q2Y2NmMiwgMHhiZTBjNDJkYywgMHgxNzNhNzk3NCwgMHg3YjlmZmI5YSwKKwkweGI3N2FjNGQ0LCAweGFjNWJjYTk1LCAweDViYWZhNDFkLCAweGFiYjcyMzZhLCAweDJhNWNhY2MzLCAweDFmOTBkYzQ3LAorCTB4ZWNiMzc0YjMsIDB4NGJjN2QwMGQsIDB4OTlmYTdjNWYsIDB4ZjgzZTIxMjcsIDB4MDA3N2FiMzcsIDB4OGJjOTdmZWQsCisJMHg4NjM3YmZhZiwgMHg5MGVjOTdkNiwgMHg2OWIzMjZkMywgMHgwZWY0ODUzOCwgMHhmZmQxNTRmYSwgMHhhMGU4MmRlZSwKKwkweDVmOTdlMmM3LCAweGVjMjFkNDU3LCAweDFkYTlmZGY5LCAweDYzYjI1OTc0LCAweDc0ODY0MjlmLCAweDY4NDk0N2M2LAorCTB4OGNlMmQyOWYsIDB4YzdkMDlmNDMsIDB4ODgyNzYwYTUsIDB4MDBhZDdlYWYsIDB4MTVlZDRmZmQsIDB4MWM2ZTQ2NDgsCisJMHgxZDdlNmU3YywgMHgxM2MwMDBlZCwgMHgyYmQzOTNkMiwgMHhmYmQzM2Y0YSwgMHhhMDJlOTQ1NSwgMHgzMmY0Y2RiNywKKwkweGY0MDUzN2JmLCAweDJmZDYwOGNiLCAweGZlNTAyZGU0LCAweGU0MGY2OTdlLCAweGY1NmZiZDE1LCAweDVlMmExZTAyLAorCTB4Zjk4NmUxNWEsIDB4MTlhYTkwOWMsIDB4NjBmNTNmOWYsIDB4YWZjNzQ2YmEsIDB4MWVlOTAzOTAsIDB4OGFmM2Q5MmMsCisJMHhmMjFiZmRkZiwgMHhmZmI3YzJkZiwgMHgzNWUzMWQyZCwgMHhlMGIyY2I0NCwgMHg4MmM4MTQ1YSwgMHgzNGRmY2U3OSwKKwkweDgwYjllNzAzLCAweDJiMGY5MGY4LCAweDQxY2IxMjllLCAweDkxMjk3ZTFmLCAweGU0NzExZGIyLCAweDkzOTczY2U0LAorCTB4NzEyODViMTMsIDB4ZDA0ZjNjZTksIDB4NmRmMzA2NjUsIDB4ZGI4MzExZGUsIDB4ODdiZWRlZDAsIDB4MzdmODNlODAsCisJMHgzMTZhMTczZSwgMHgxYjRiZmQ2MCwgMHg5MjFiZDdhMywgMHhhYjUxOTdlZSwgMHhiNzdmOTYzMywgMHgzYTA2NmRhZSwKKwkweDY1YTNlZTlkLCAweDE1NDYzZWMwLCAweDFmMWMwMjkxLCAweGFmZGE2NWMyLCAweDBjYTRmNmY4LCAweDRhYTIyNzQ2LAorCTB4YmEzYmZjODUsIDB4NzNjMDk3ZWUsIDB4ZDY1OWJmNzgsIDB4ZWY4NmY5ZWMsIDB4OGVkY2U1YzgsIDB4ZjFmMjU3ZjEsCisJMHhiMDQ5ZGMyOSwgMHg4ZjQ4OWY1ZSwgMHhiMmFhYjc2ZiwgMHhiYWU4MDdhZSwgMHgzMTY3YzMxZCwgMHg3ZmU0Y2VmMiwKKwkweGRlNGM0M2ViLCAweDRlMGZmOTc1LCAweDBiZjY4MzJiLCAweDgyMzkzMmVmLCAweGE0M2Q2MGVmLCAweGIwMzI0NTcwLAorCTB4MDIyZGRmN2QsIDB4ODkyYjA3ZWEsIDB4YWRmMzkzYzQsIDB4NjM3Mzk3MzIsIDB4Mjg1Zjk5YmIsIDB4MWM5MDkyZmMsCisJMHg0ZTMwMzdjMywgMHhmNzAxZDIyYSwgMHhhN2FjMTYzMSwgMHhkMWU4YzdkZiwgMHhkZGQ3MTgyYSwgMHg4ZTVkNWZiOSwKKwkweGQwN2Q3MjE3LCAweDY0MDdkMjZhLCAweDg5MDNkMzEzLCAweGFlMDBhYWVkLCAweGUwZTU0YjdmLCAweGZjODI0ZjMzLAorCTB4YTgwZDc5NTIsIDB4Mzk3MmJmMjAsIDB4ZmFmM2ZmY2MsIDB4ODRmZGVmMDMsIDB4MjFlN2NkY2EsIDB4N2E4ZDZlNWQsCisJMHgxNWI3MmNkNSwgMHg3ODkwNDczYiwgMHhkM2I5ZmI3MiwgMHgyZGNhZTI0YiwgMHg2ZTU3MWU3ZCwgMHhjZmM4MmQ5ZCwKKwkweGFhZjVhZmZmLCAweDk5MGNjNzhlLCAweDBlZWFmMWUyLCAweDMyN2FlYTNjLCAweDdhY2QzZTExLCAweGM2YTRhNzcyLAorCTB4ZWZmNDkzZDUsIDB4OTlkODUyNWQsIDB4ZDQzZTc1MWYsIDB4MGJmMTZmZjksIDB4MWY0MTdkOTUsIDB4ZTc1NGY5NDUsCisJMHhlYTlmMjhjMywgMHg1ZTI5ZDg3YywgMHhiOWEzYzA2YSwgMHhlZmIwZWZmZCwgMHhkYjYyZmMwMSwgMHg3NTE4ZjUzOCwKKwkweDAxNWU2ZDIxLCAweDMzOGFmZWU1LCAweGI0YWZjYzE2LCAweDVmNzAxNzBkLCAweDA5MDZkMDY0LCAweDNjNWI2ZmViLAorCTB4OWQ0ZWMwMjMsIDB4Y2ZkNWY2M2EsIDB4YmJiZTQ2N2YsIDB4Y2I3ZGYwN2YsIDB4M2YzZTI5NTcsIDB4NmVjODQwMTksCisJMHg1ZjA0NjUyOCwgMHhjOGU3YTU4YSwgMHhlYWIzODMzMCwgMHg0M2Y2MDkwOCwgMHhlNTg5YTBmZCwgMHhjZmY0ZmUzMSwKKwkweGJkZjc2NjY1LCAweDYxY2VlMWZhLCAweGI2YTJjNzgwLCAweGE4MmRjOWMxLCAweDlmYTIwNzM3LCAweGM4ZjVjNTU5LAorCTB4MGM5YTgwYjksIDB4Mzg1Y2Y1ZmEsIDB4NzNjOWZkMGYsIDB4YmM1NzQ1ODcsIDB4MzhlN2M2ZmMsIDB4Zjg4MDVmN2QsCisJMHhiNmRiMmQxOSwgMHhmMjkxNWE5MiwgMHg0NzY5MWI1ZCwgMHhkNWIwMjJiYiwgMHhkOWM1YjY0NiwgMHg5OTkwYWFkZiwKKwkweGY4YTFmYzllLCAweDNlMDNmYTAwLCAweDk0YjdiMzllLCAweDczYjFjNzk2LCAweGJiZWI5ZGZmLCAweDgxZmZmYmE5LAorCTB4ZTE1NWU2ZWIsIDB4YTdiMDE2Y2QsIDB4MzE2YWRhYWUsIDB4ZWI5NjA1YzQsIDB4MGE0MDVkN2MsIDB4ZWVhN2FmODAsCisJMHgwMzg2YmJiNywgMHg1ZThiMGYxZSwgMHgwYWFkMDNjOCwgMHhlMmY4YTE3ZiwgMHhmOWU2OGRmOCwgMHg4ZjYwZmY0MywKKwkweDcwN2IyYjNkLCAweGQwZTRkN2RjLCAweDZiYzNjMDVjLCAweGY2MDQ2ZDY3LCAweGI1MmI3NmQzLCAweGY5YzFlMjRiLAorCTB4YjljMTg1MmIsIDB4Y2JhMzE4ZmIsIDB4YTI5Nzg1OGYsIDB4MThhNDY3MzYsIDB4MDk1YjNkZTIsIDB4M2E2NzZkZjIsCisJMHg3M2YzZTQxMywgMHgyYWI4MjQ3NSwgMHhiMjJkZTgxNywgMHg2ODM1M2Q3YSwgMHg5NDE0ZmJlOCwgMHhlZjgzOGU1ZiwKKwkweDYzNWVkMTJlLCAweGM2OGFmM2U0LCAweGY0MDgyZjFkLCAweGMxNjE2NWJkLCAweGNiZWRhMTYzLCAweGY4MDUxNmE0LAorCTB4NDUzMWFhYTUsIDB4NTQzNjdkMDQsIDB4M2Q1YmYzZDUsIDB4ZTE4OTZlNDMsIDB4MDk2NTY3YmYsIDB4Y2M2MDc5ZTcsCisJMHg1ZTAzYjc2YiwgMHgwODUxOWZjZSwgMHgwNzY4MDFlNCwgMHhmODRmMzFkYiwgMHhmMjE4Nzg3YywgMHhiZDc5YTI1YiwKKwkweDI3NTMyN2VjLCAweDQxMGZkMGNhLCAweDcxZDMzNjNlLCAweGExOTI3ZDcwLCAweGQ3YzRiNjNlLCAweDZhOWFlMDBiLAorCTB4OGRlOTU5NmQsIDB4MWMwMWY3ODMsIDB4N2M5NjNmZWYsIDB4NWI3NjU1NzYsIDB4ZTVkNWRmN2UsIDB4Yzc5NjI3ZDcsCisJMHg5ZDU3ZGRmMCwgMHg5ZTIzMzdlNSwgMHhhNTVmMmVmYywgMHg5N2JjYzA2NiwgMHgwMDY1ZTUzNywgMHgyMWJmOTczZSwKKwkweDU3Yzc4Y2Y3LCAweGRmOTlmYTJmLCAweDAzZTc5ZGI4LCAweGY5NTAzNWI3LCAweDdlNDYyNmJkLCAweGM2ZmNhODFiLAorCTB4ZmNiNjEzODksIDB4MjJmYmYyYzgsIDB4N2IzYzZmYzgsIDB4OTc1N2NmOGMsIDB4YzdmMGZjZGYsIDB4MGRmOWJmMjgsCisJMHhjYTFlNDMxNiwgMHhlZmFmOTk2OSwgMHhlODU3ZTUwOSwgMHhkNDFhNGI3OSwgMHg4ZTIzYWY2NSwgMHg0MDNjMDZiZSwKKwkweGRmM2I3MzljLCAweDQwNzE4MDA3LCAweGJiZTU1NThlLCAweGZjN2ZmMWM5LCAweGY5NzhlNThiLCAweDMzNzk4MjJlLAorCTB4ZTRjZGU5OWQsIDB4MmE2ZWY5NzgsIDB4OWRkMDAyYzcsIDB4MjZmMmYxYzksIDB4OWRiOWM3MmEsIDB4Mjc1MDc3ZTUsCisJMHgyZmRmNjVmOSwgMHhhYmVmYjA4YiwgMHg3YjdmNzMxYSwgMHg0MGFmMWQwNywgMHhmYTM2YmQ5MywgMHgzYzg3NDE3ZSwKKwkweDY3OTU4ODhmLCAweGNmMjA0OTU1LCAweGNmMjdiYjg3LCAweDUzM2NiOGJiLCAweDhkZTdlZDM5LCAweGQ4NmY1NzQzLAorCTB4ZGFmNjFmOTgsIDB4MmZmNTEzZTgsIDB4NDFmZTVmMDMsIDB4NmRlOWZmNDQsIDB4ZmY3M2IzMGIsIDB4NzBjNGZhMzgsCisJMHgwMGRiOGJlMCwgMHg2MzJmY2ExZSwgMHhmZDVhMWQzOSwgMHg3NGJmZWMwMSwgMHg5MDc0YzZjYywgMHhiNTgzOTI5MywKKwkweGVjM2M4MWJmLCAweDAxMzJhZGNhLCAweGUxYWNiODdkLCAweGNkNTNmNDYzLCAweGJlZGQxNzcxLCAweDc0NWZjNzMyLAorCTB4YzM4ZTYyM2QsIDB4YmQzM2E5MmMsIDB4OWRiZTMwYTcsIDB4YmMyMGI2MjYsIDB4NzdhMjRmZTQsIDB4ZDNiZTFjNWIsCisJMHhlNzA0ZWJkZiwgMHg5Y2Y3ZGFlMSwgMHhlY2UwM2JjMywgMHhjZmE0MmUyYSwgMHhmNGI4MmJhMywgMHg3YzJiOTU3OSwKKwkweDg2NGExYmJkLCAweGUyOTFiYzQxLCAweGYwMjVlNTExLCAweGFhNzE4OGE2LCAweDg2MDFhMmYyLCAweDcyYjcwY2YzLAorCTB4MTZkNTg3MzgsIDB4NjJkODQwOTUsIDB4ODBlYmU0MWEsIDB4OWVlMWI1NWYsIDB4MzY4ZmIwNDMsIDB4MDA1YWE4ZTIsCisJMHgzMWQ4ZjU2NiwgMHg1N2Y4MWY1NiwgMHg1MWRiZDljZiwgMHgzY2JhNzU5ZSwgMHgzOTY0ZjljNCwgMHg1ZWI1ZTdlZiwKKwkweDZmYzBjNWQ1LCAweDA3ODI4ZDU1LCAweGM4YWE5ZGQ2LCAweGM2ZGNmMDNmLCAweDk1NWY4ZDgxLCAweDZhMmQxZjAyLAorCTB4ZTQ1NjNjMTIsIDB4ZjAxNDJmYzMsIDB4ZmFlOTRhZmIsIDB4MmMzNGZjMGIsIDB4YmZkYTA1ZmMsIDB4NDQ4YTlhOGIsCisJMHg2ZWQxN2VmOCwgMHhiYmU0MTMwMSwgMHhlOTc3NGZjMiwgMHhmN2MzOTZiNiwgMHgwNGVmYzAyMiwgMHhiYWQ5ZGIzOCwKKwkweGRiZDNlMWM2LCAweDAxODBhNGFiLCAweDJmMjc5MmZlLCAweDcwNjZjOWFlLCAweDAzYjU1NmFiLCAweDc4NTExMWRlLAorCTB4YWYzODhiNjcsIDB4ZTNhYmMyNmUsIDB4MWY3ODJiYmQsIDB4ZTNkZWI4NTIsIDB4YjhkM2ZjNzQsIDB4MjIyZjE4ZjMsCisJMHhmOTZlOTRlMSwgMHg2ZTM1ZGYzNywgMHhkMTlhNDU1NSwgMHg1N2UzZDM1ZiwgMHgyYWRmNDU1YiwgMHg2NTg4ZTIxOSwKKwkweGYzOGM2NDgyLCAweGZiZmM2M2I2LCAweDdmZmZlODQ3LCAweGYwN2ZhZGJlLCAweGRkNzQyMjJmLCAweGQzZmQ3ZGZhLAorCTB4Y2ZiM2VmODgsIDB4ZTgxNTNjN2YsIDB4OTEzNWU0YjIsIDB4NWE1ZDI4ZDgsIDB4ODIyNDVkZWIsIDB4MDU0MTI0ZmIsCisJMHg0MWI4YjBlOCwgMHgyNDBlMzBkNCwgMHhiYmE3MGE0NSwgMHhjMzUxZjE2MiwgMHg4NWRkYjFmMCwgMHg0ZWYxNzA3YSwKKwkweGZkMzI3MDZiLCAweDlmMmJmMTdlLCAweGQzM2Q4M2U2LCAweGExZmI0MGZhLCAweDNjMDM4ODZjLCAweDkzMWNhMDJmLAorCTB4ZWMzZTRiNDAsIDB4ZDg5NjJkMTMsIDB4YmYxOThkYmUsIDB4ODdjNTg1MTEsIDB4Y2M3NmVjY2YsIDB4ZWExMDc5MDIsCisJMHhjNWE5YjlkOCwgMHgzNWIyOTlhMSwgMHg1NTdlMWVjNiwgMHg2NDFjNTk5MSwgMHgxNWFmM2IzNywgMHhiY2MwNGU3OCwKKwkweGY2MmY4MDMxLCAweDhmOWU4ZWRjLCAweGU2MzllNjczLCAweDk0NmUyYzk3LCAweDZhZmU3MDgzLCAweDU2OGVkZDcxLAorCTB4M2UyYzliODgsIDB4YWQ3NWM1NmEsIDB4OGMwYmVlYWEsIDB4N2Y2Yzk2ZmIsIDB4NmFlZjlkOTEsIDB4NzJmZTBkMTQsCisJMHg0ZWI1M2YyNywgMHhiZmMxNTg4YywgMHgzOGM0YTg2YSwgMHg4YzdmYWQzYywgMHgwYmY3MTBmNSwgMHhiNTFmYTNiZiwKKwkweDJiZDM3YjY0LCAweDI1YzI4YTAxLCAweGM2ZWIzZjJmLCAweGRiY2Q1ODczLCAweGQ2YWZlOGRjLCAweGE4ZGM3YjdkLAorCTB4N2ExYTVmOTMsIDB4NTNhNWZiODgsIDB4OTdkZjgwNGUsIDB4Y2QzZDJmYzgsIDB4NjJiNGU0ZjksIDB4N2FlYmVmZjIsCisJMHhlMTRhYmZhMCwgMHg2MzhmMmMyYywgMHhmZmY5NDdiNywgMHgwNzdmMmZjNSwgMHgzYjMzZDU3MSwgMHhjMDFkZmYzZiwKKwkweGYzOWJmNGJkLCAweGUyOGZiYmJmLCAweDdiYjVlYzkzLCAweDNkNTYwZjQwLCAweDQzOGMxN2ZmLCAweDU2NDlkZmU5LAorCTB4N2I5ZmFmYWUsIDB4YWQ3OGUzMTYsIDB4YTE3YWIzN2YsIDB4MTNhNmQ2YjcsIDB4NmFjNzEwMzksIDB4NzQ4ZmYxZGQsCisJMHgzNjU2NTNiMCwgMHg2YmJiNDI0ZCwgMHgwYzkyYWVlNSwgMHhkMDRlYzcxMiwgMHg2MGRmZTA0YiwgMHg2Njg4ZTIzNywKKwkweDM4NjgxZGJhLCAweDllNzAwMzkwLCAweDc0ODc3NGE1LCAweDIxYmM2OGJlLCAweDM4ZTJjOTU0LCAweGQ0MzM4ZjJhLAorCTB4NzZkYjhmYzcsIDB4NGMzNDJiOGEsIDB4NzBmYzY5YmYsIDB4NGFhZjY1MjgsIDB4Nzg1ZjExYmEsIDB4OWFmM2QyOTcsCisJMHg5ZWIxZDA2ZSwgMHg1MzQyOTFjNywgMHg3MGJlMzViZSwgMHhlOTQxZmUxNiwgMHhjNjM1Njc5NSwgMHg5ODZjYmUxNywKKwkweDQyNGY5ZmZmLCAweDg0OGY0MzViLCAweDM3NDg4NWYxLCAweDg1YzdhN2YwLCAweGRmMmQxNGRiLCAweGYzYjk3MjBhLAorCTB4MDBlYjhjMDUsIDB4MDlkMzI2ZmQsIDB4NjVmOGJlYjcsIDB4NGZkNWM0MGUsIDB4NjE3N2VkY2EsIDB4MTU5MzViYmUsCisJMHgzNzE3ZDdmNywgMHhhOWU1MTVmZCwgMHg2OGRiZDc3NSwgMHg5ZjFlMTI3ZiwgMHgzZmQxMjU2ZCwgMHhiOWUzNDcxNiwKKwkweDVkNWI1NWFhLCAweGU5YzEyZTJjLCAweGQ1MGI3MTAwLCAweDdjNzljZjhkLCAweDFlYjVmMTgyLCAweGFmMTQ0OGI3LAorCTB4YzdlZDYwNTgsIDB4NWM1OTRlZjMsIDB4MDdlYjcyYTUsIDB4ODNjNTMxMGEsIDB4ZWIxZDUxODQsIDB4ZTk3YTIyN2UsCisJMHgxZTAwZjA3OCwgMHhlM2M2YzY0NiwgMHhhMjg3YzdlMiwgMHhkZDEzMzhmMSwgMHg4NzEwOWU4MCwgMHg2OGRiYzY4YiwKKwkweDVkYzQzN2JkLCAweGUzNWZjMjgyLCAweDM3NWI3N2M1LCAweGFiNWUzOGIzLCAweGU5NWJjYzZjLCAweGNmOGIxM2EwLAorCTB4NWJkMTM2Y2QsIDB4ZWI1NzZmOWYsIDB4ZjhmMzU3NTYsIDB4MDY5YTc4YWUsIDB4Y2VjZjc2OGIsIDB4Mjk3MzNhZjgsCisJMHg2ZDVmN2ViZSwgMHgzZWQ4N2UxNSwgMHhiY2MxM2NlYiwgMHg3YzAzNTNlZiwgMHhiMWYwZDk1OSwgMHhmYThkNzkwMiwKKwkweGY3Y2ZhNmZhLCAweGNmY2ZiNzBjLCAweDVlNjIyZjNjLCAweDAxZDA5YWVlLCAweGZkNjZlZmQ0LCAweDYxY2UwY2IxLAorCTB4MzdmNzgxYzQsIDB4OGQ2NWRlMWMsIDB4YjMzOGZkNmMsIDB4ZDI3NDE1ZDMsIDB4ZGZlY2NlN2UsIDB4YWNiZDdjOGQsCisJMHg0MDI1NjNmZSwgMHhmNzU0M2JmYiwgMHg0OWZjYzJiMiwgMHg3ZWIwNDcyNiwgMHgzZmUwNjMwNCwgMHg3Y2JlZDJmMywKKwkweGZlNjQ3ZjE2LCAweGFkOWM3OTgwLCAweDg1NTYzZjVjLCAweDU1NTM4ZmUzLCAweDljNjE4NWZmLCAweGMyOTA4MTI1LAorCTB4N2RiZmFjZjIsIDB4MzY5MmQzYmMsIDB4ZGQzYmZhMTMsIDB4YjNjODEzMmMsIDB4Y2IxMjFkM2MsIDB4YWU2YmVkZTIsCisJMHg1ZjdjY2FiNSwgMHhiOWM1OTZiMywgMHhlNzhhM2FlOSwgMHg5Y2VjNWM1ZSwgMHg2MGFhOTg4YiwgMHg2YmE1NjQxYywKKwkweDVmMzg1MWQ0LCAweGE4YTVkMmI5LCAweGFjZDUxZmUwLCAweDM1YmNmYjYyLCAweDAyNjZmNzNmLCAweDZlNTI2YmJkLAorCTB4YWQ2ZDc4YzUsIDB4MzQ5ZWJmMDksIDB4N2Y5YzExNGYsIDB4MWYyYzRjZjEsIDB4ZDY2YWVjMGUsIDB4YzU5YTI5M2IsCisJMHg1NzRhZmYwMCwgMHhlMTRhODY1OSwgMHg4MWZiNGQ1YywgMHhmMjQ0YThmMywgMHhkMTFjMzllMiwgMHhmMzA2NWE1ZCwKKwkweDhmMTYzZDExLCAweDRjN2M0ZTNkLCAweDVmMTM5Njc2LCAweDhmNjQ1ZTBjLCAweGI5MGNkY2YxLCAweDdlODU0YzM0LAorCTB4YTVkOWZkZjQsIDB4ZDg0M2U2YjYsIDB4ZTAwNGQxZTgsIDB4YzdlZjg5MmIsIDB4YzFlMmRkMTcsIDB4MGJkNWI3NzksCisJMHhhYTcxNjA1ZSwgMHgzYTRmNTU5ZSwgMHg3NTgwMzNjYiwgMHg3MjY3NmRhNCwgMHgzZjA2YjkzZSwgMHg1ZjVkMWEyNCwKKwkweDUwYjlmYzFjLCAweGU4MWY2ZmJmLCAweGEyNmVkNWE1LCAweGEzMzk1MGE1LCAweDNjYzU1NTU4LCAweGQ0MzQzZjM4LAorCTB4OWYwMWU0MjYsIDB4ZDdjN2YxN2UsIDB4YjBmNmJmNjgsIDB4YTAzNTIwNDgsIDB4MTllN2E5Y2QsIDB4NjcyMDI5NjksCisJMHhlNjA4ZjIwZSwgMHg1ZjJiMDA5MywgMHhhNzAxZDFlZSwgMHhjMDg0Y2YzOSwgMHg5N2U3MzEyYiwgMHg4YzRlODkyNywKKwkweDI0ZGI5YzdmLCAweDkyMmI5ZmEyLCAweDhlM2I3ZWFiLCAweDA4MjRlZGY5LCAweDY1ZjVmM2YwLCAweDFjZjM4NzA5LAorCTB4ZjAyMzExNzUsIDB4ZTMwYmJkN2UsIDB4OThkZjBiZjMsIDB4NzQwM2YyOGIsIDB4OGY1N2M1ODgsIDB4YjkxZmEzMzIsCisJMHg4N2NlZWVjMSwgMHg3NjhkOWRmZCwgMHg0OTI4MTZmNywgMHhiYzg2NmI0MCwgMHhkZmJjNzllNiwgMHg3M2M2ZTU5ZSwKKwkweDAzMGM1NDQ4LCAweGU3Y2U3ZjYwLCAweDgyZjlmYWYyLCAweGFmOThjM2QyLCAweDdhODA1YmUwLCAweGYxOTY2MzNlLAorCTB4YmVkOTkyOWMsIDB4MWZiNTA4OTcsIDB4MGEwZDdkNjEsIDB4YjM4OTA4ZGUsIDB4MTliOGRmYWYsIDB4ZGVjYWVlZTEsCisJMHhiMGU4ZjFkNywgMHgzOTA5YmQ1MSwgMHgwNGUyNGU0MiwgMHg5N2Q2MjYzYywgMHg2NWI3ZTA1ZCwgMHgwZGM3NmZlMCwKKwkweGI1ZjhlZWZmLCAweDZiZjExYTY2LCAweDc1Zjg4ZDU3LCAweGNmZTMzMjBjLCAweGQ3OTc1Zjg4LCAweGU2Y2EyZjg4LAorCTB4NmZjMzZmYzEsIDB4YjllMzI4ZjIsIDB4N2UxNTdmYWYsIDB4MWRiOGQ5ODcsIDB4ZmY0YWYxYzksIDB4NGNlOTZkY2EsCisJMHg1OWRjMDM2NSwgMHhjMmU1MDQ1MiwgMHhjZWQ5NDcyYywgMHhlZWZmMDA4OCwgMHg4NTVjMTY5MywgMHhlODVkNzk1ZiwKKwkweGY5ZjI2NGFmLCAweDc3ZDhmMzA4LCAweDExMjM5MDBlLCAweDFjYTJmNWUwLCAweGQwMGJjOWMxLCAweGExZjIwZWYzLAorCTB4MjE2OWU4MDcsIDB4NTdjYjkyOWYsIDB4OGFlN2E2MjcsIDB4OWUzZjA3NjksIDB4MDRkYWJmNDMsIDB4ZjIwZDdiZmMsCisJMHg5NTVmM2IwMywgMHhiOTM1ODI0YSwgMHgwZjVlYTcyMCwgMHhiZjIxZGZhYywgMHg4NjRmM2JjZCwgMHgzYmM0ZjY3MywKKwkweGFmOWMwMDZmLCAweDY4Zjk2MGY3LCAweDZkYmY3YjAxLCAweDFhNzNjMTMwLCAweDc0ODVjOGExLCAweGYzNTU0ZmQwLAorCTB4YmZlODM5NDksIDB4YTlmNjk1NDcsIDB4NmNiZWY3ZTAsIDB4MWJiZGYxNjcsIDB4ZDNlYTBhZWMsIDB4YWUxNmVkYTcsCisJMHg3MWJlMjc1NywgMHhiNmM3OTUyZCwgMHhmOWMyYWNiMCwgMHgzNmYwYjZjMCwgMHgzN2E4MDBkYiwgMHhiZDZlNzg4YSwKKwkweDRhZjZhNTJhLCAweDJjMzViZjE4LCAweGQ5ZTZiODMzLCAweGJmYzAwMzgyLCAweDNkNzE5MjZmLCAweDBlMzc5ZDY4LAorCTB4ZWQ0NGMxY2YsIDB4NGZkYjMwYjcsIDB4ZWE3ZjBiNmMsIDB4Y2ZhMzFiOWUsIDB4Yjg5ZjFiNWIsIDB4MWIwZmUyMTIsCisJMHgzMWY3ZjEyZCwgMHhkZjJjZDg1NywgMHhhZThkN2ZjYiwgMHhmMjlkMGRiZiwgMHg1OGQ4NTYyZSwgMHhmZGEzYzc1ZSwKKwkweDRkOTYzY2U4LCAweDYxZDdjNzNiLCAweDM5NjMwZjI2LCAweGI4MmUwZjlkLCAweDJiYmZlNzAxLCAweDNhN2NmZDRjLAorCTB4OGVmMTUyOGYsIDB4NzlkMDg3MWIsIDB4YzQ4YmZlOGUsIDB4MjZkMTJiZjQsIDB4NDc2NzRlY2YsIDB4MWFmZGUwODAsCisJMHg1ZmE4MmZkMCwgMHgwZTJjZmY2YiwgMHg0NGEwYjg4NywgMHhmMGM0NWNlMCwgMHg2ZmU4MDVlYSwgMHg3Y2E2ZTZiZCwKKwkweDUwYTJmOTRlLCAweGJlMDMwZDBiLCAweGMxNGUxODlkLCAweDNlYWEwYTdiLCAweDhmZDc2ODI0LCAweGZjMGM5NjY4LAorCTB4ZDVkN2M4NTksIDB4OWYxNjE2YzIsIDB4ZDhkNDc5MWYsIDB4MzI0NWJhM2UsIDB4OGM0MTQxZDksIDB4NjkzZDhmMWYsCisJMHhmM2FiNWU3YywgMHgwM2E0OWJiOSwgMHgyNGJmYWY5ZiwgMHhkNTE3OTAwYSwgMHgwZmJjNGVkNiwgMHhlNmRiYjg1MCwKKwkweGRhMzg0MmY1LCAweDJiMjljMDJlLCAweGNiMTI1ZTVhLCAweDliZjdhZGUyLCAweDZiMGYyYzZkLCAweDlkNzA0MmEzLAorCTB4ODljMGI4ZDksIDB4MTdmYjA4ZmIsIDB4ZWIzY2M2MmMsIDB4ZWJlNjdlYWYsIDB4NWVkY2VmMWIsIDB4NjY0YTdlOGMsCisJMHgzMjVhZjVmYiwgMHhiZGZjMDUxOSwgMHhhZjc4NjA1YSwgMHhiN2RkOGFjZCwgMHg5ZjlkNGJkMiwgMHhmOWQ2ZmU3NSwKKwkweDkyNDE2YjNhLCAweGNiZGU1ZTJmLCAweDdiYjMzYjYwLCAweDEyMGMxNzhhLCAweGY2ZDdmMDE0LCAweGE5ZmM3ODBhLAorCTB4MjE5ZjAxZjUsIDB4MDY1Y2RiN2YsIDB4MDBkOTAzYzgsIDB4NzllMzU1NGYsIDB4ZTE2ZGJiYjQsIDB4ZmI1NDc5ZjgsCisJMHgwZmU2NmU2ZCwgMHgwNTU4MTAzZSwgMHhhNTNmMWU3OSwgMHgzMjdhMDljMiwgMHhkMWViYmY3MSwgMHhhMDgzYWFkZiwKKwkweGFiNjc3YzJhLCAweGE2ZTc4ZDlkLCAweDE2YzhkYmU2LCAweGI1NGFkMzg4LCAweDgwYmIzNzU5LCAweDVmYWU0YmZmLAorCTB4YjI3ZGUxNDMsIDB4ZWJlYjgyZGMsIDB4ZjA4YmQ5NDYsIDB4YzEwOTJhMDcsIDB4YTczZjAzZjgsIDB4ZDkyYTdiZDUsCisJMHhlYzdlN2IxYywgMHhhOGU4YWQ4OCwgMHhhOGY3Y2U4ZCwgMHhlZWYzODNjZCwgMHgwMDBhZjNlMSwgMHhmZmViZjdiZiwKKwkweGE2YmIwNmUzLCAweGU5MTVhMmVkLCAweDQzZmI4YmQ4LCAweDZkZTc3N2ZhLCAweGQ4MGY0ZjBjLCAweDdiZTA3N2I1LAorCTB4NzI4NjkxNTIsIDB4YmRiOWY1ZTIsIDB4MzljMTg2ZjMsIDB4MThmNzhhNTUsIDB4NWZhMGVhMzksIDB4ZWE5MWU3MDAsCisJMHhjMjhlM2FhMywgMHgyMGI0ZWE5MywgMHg1MzRkMTI1ZiwgMHgwMzFlN2EzZCwgMHhjOGM1ZWZlMSwgMHgwNDA4ODkwNSwKKwkweGJkNzQxY2YyLCAweDg4ODU4NDJhLCAweDcwYzFjYThiLCAweDdlMDIzMzliLCAweDlkMDU2YTQ3LCAweDRlYzEwNTM3LAorCTB4NjZiZmFjNmMsIDB4MWNmNDRjZTksIDB4NTI1MWU2MWMsIDB4ZTQ4NDJjYmUsIDB4MTI3OTgyNzksIDB4ZmQwNWE4OTAsCisJMHhkNzU2ZmFlYiwgMHgwODUzYWJkMywgMHhjN2VhY2JjYSwgMHhlZDBkNjBhNCwgMHg2MmQ0OTM2NywgMHhhZTRhZjg4NywKKwkweDU2YzMxNmE2LCAweGUyYTRhYTc0LCAweDE1M2ViY2Y5LCAweDFjNzNmMzA0LCAweDQ0YTU0Zjc5LCAweGY0MmExNmVkLAorCTB4ZWYxMWJmNDMsIDB4MWZlNzE3OGUsIDB4ZTVmMWQ3NmEsIDB4MmJlMDI3ZmIsIDB4N2VmYjcwZmYsIDB4NzZiYzZmMzAsCisJMHg3NWY3OWUzNiwgMHg1MWU5ZGExYiwgMHhiMWVkYzFmZCwgMHg4ZWZlYmU1MiwgMHgyYmVkOGNmZSwgMHgyNGI1Yzg5MywKKwkweGQ2NmY4ZTM2LCAweDMyN2RiYTFmLCAweDAzY2I3YzdhLCAweDZmZWVmODBlLCAweGFkZGE0ZTBjLCAweGUwOGRkZjA2LAorCTB4MTNlYThkZjMsIDB4MGM4ZTZlYmUsIDB4YmY0MjdkNTMsIDB4M2IwZjA4MmYsIDB4ODJlZWYxMDAsIDB4NzcxYzk5MGYsCisJMHgwMzg3MjdkMiwgMHhmYmVmZTAyMiwgMHg1ZjMzMTFlYSwgMHhiOTUwOGQwYywgMHg1NTgzZWRlNCwgMHg4OWVjYmYzOCwKKwkweGFmYmRhMWQ2LCAweGQyNzdhOGRkLCAweDQwY2YwZGE2LCAweDliZjM5NzNiLCAweDdjYmFjZjE5LCAweGUwYmVlNTliLAorCTB4MmIwMWVmNWUsIDB4NjA5MTBiODMsIDB4MWQwODg3MWUsIDB4YTA3OWE4NzAsIDB4NjA4ODhlOTcsIDB4NTExNWI3ZWYsCisJMHgwZWI4NTAzYywgMHhiOTRiZjk3MiwgMHhlNjFlYmMxMCwgMHg5ZDdjM2ViZiwgMHg3YmU0ZTQxZCwgMHhmYTExMjdhZiwKKwkweGYyN2M0Yzc1LCAweGRlMzdkMTcxLCAweGRjZjhmMmNlLCAweGZiNjU4NzgwLCAweDI0ZjVmMDJlLCAweGNhOGVmNDgyLAorCTB4ZDg5Mzk1MDEsIDB4ZmZjZTg5NzgsIDB4ZTVkNzdlNjYsIDB4M2EwZTA2YTMsIDB4MGJmOWUxZTcsIDB4MjhhY2ViMDIsCisJMHhiZGYwZjA4NCwgMHgwMGYyNmM5NSwgMHhiYjdiNzU1ZSwgMHgyNGI3ZGI4NiwgMHhkZmY2ODU5MCwgMHhlYmUxMGY0YSwKKwkweGY4MTA0ZTUxLCAweGVkZDY0NmE0LCAweDM2MmRhZjc1LCAweDU1ZDJiNTNlLCAweGZiNmRmMTljLCAweGE5MTc1NTM1LAorCTB4ODc5MzE2N2YsIDB4YTNiNTI1NWQsIDB4NTE3NTU2ZmYsIDB4MWJkZmU3YzEsIDB4NDUwYTYxN2YsIDB4ZjM3ZjAxYmEsCisJMHhlMzNiM2RlZCwgMHg1N2M4M2M2ZiwgMHhlNjJmZmZjZiwgMHhiZjNjY2FiNywgMHhmY2M3NmFiNSwgMHg2YmRmMTJjNiwKKwkweDE0N2Y1NDJkLCAweGUzNTc1OGFlLCAweDc3OTNmMTUwLCAweGViM2IwYjMzLCAweDY1N2NmZDA1LCAweDk2NjAzZDIyLAorCTB4NmI0YjkxZjcsIDB4YjQ5ODYwMGYsIDB4NzJhZjc5MGIsIDB4MzIxMmZjNzAsIDB4OThkOWY0MWQsIDB4NzI1YmI1MDgsCisJMHgwNWZmY2IzYiwgMHgwNzJhYmYzZSwgMHhhZGRiN2JjMywgMHg5ZTQxMDNlZCwgMHhkZmJlODg1NiwgMHgxNmE4MTFkOSwKKwkweDhhZWMwNThiLCAweDFlZWQwNGRkLCAweDZlNjNiZWVmLCAweDFlZTZmNzk0LCAweGIzYTdmNTg2LCAweGY2NjAxMDVkLAorCTB4ZjQ0NzVmMjYsIDB4NDhkMGE3YjgsIDB4NzM4ZTgwZTUsIDB4MGU3YmVlYzQsIDB4MzBmMWFmZmEsIDB4MzQwZTE0YmYsCisJMHg2MjNhN2U4MSwgMHg1ZTAzZDVmMywgMHgyNGM2MTQxZCwgMHgyODMyNGYzOCwgMHgyOGUyY2I5MiwgMHgyNWRjODMxMSwKKwkweDQ5ODczMzkyLCAweGRlNzQ0MjhlLCAweGU4MDVhZWIwLCAweDQ4NDAzNmJhLCAweDdiMDJjZjBjLCAweGQ1MDIyMzBhLAorCTB4ZjRiNzYwMmUsIDB4YjA2YzI0MmUsIDB4MDZmMzA0NjUsIDB4N2JiM2U3N2IsIDB4YjAxNzdhMDAsIDB4YjRkZWM3N2IsCisJMHg1YmM5MzhiMywgMHhjYmQxMWQ3YywgMHgwM2YyYjYyMywgMHg5MTJjYmYwMCwgMHhmYmUwYjU4MCwgMHg0MmEwMGRjMywKKwkweDVkODhmMTdjLCAweGIyNzgwN2RiLCAweDhmMzg2OTk1LCAweDBhZjEwZjZjLCAweDUyZDk4ZTk0LCAweGFkN2Q4MDQ4LAorCTB4YzBhYWE1ZDQsIDB4YWQ4NDhhZTIsIDB4ZmVkMjUwNDMsIDB4NDVhYjI3YjIsIDB4ZmVlY2Y3NDAsIDB4NjUwOWNmMDQsCisJMHg0NzEzZmQ4MywgMHhlNWQ5OGU2ZSwgMHg2YjA3MTYxZiwgMHgxZjg3NjRlYywgMHg0ODcxNzJlMywgMHgzMWVkZjNhMSwKKwkweDQ3M2ZlNTk5LCAweDdjMTQzOWUzLCAweGViYWI2ZmMwLCAweGViNmM5YzU2LCAweDIyNWYyYzk3LCAweDZjZjBjMjkwLAorCTB4NjA4MGNiZjYsIDB4ZDc4OTJmMzAsIDB4NjQ4ODU0MWYsIDB4MjliZjQ1NGYsIDB4YjAxOTdjMDAsIDB4NzI2ZmQwZDgsCisJMHhlZjA4NmYxMCwgMHhjN2VhNDk0OSwgMHhiYzExNDVlZSwgMHgyYmZlYTBlYiwgMHhmNzA2ZGRhOSwgMHhhMGYyZTgyNSwKKwkweGUzYTNmOWYzLCAweGY0NGFmNjZlLCAweDczZjhmNzU1LCAweDUyZDNlMGY5LCAweGUwMjdmZjdlLCAweGI5ZGM3NWI5LAorCTB4MjY3MWFiODEsIDB4ZWY4YzM5ZWQsIDB4Njc5MGQxMzQsIDB4NTFhZmQzYTksIDB4MGVjZmQwMzYsIDB4ZmQ1ODkyZjEsCisJMHg4MTA2NTJlZCwgMHgyNDJhZGUzZCwgMHg2YTVmYzE3OSwgMHg3ODMwMjQ1ZCwgMHg0M2NmMWIwNSwgMHhjY2YzMGM5NSwKKwkweGEzM2YzMDc0LCAweGZlYzVlYjhkLCAweDBmMzhiOTQ5LCAweGYzYTA5ZDdkLCAweDVkNzE4NzViLCAweGU3YTIzY2QzLAorCTB4OGNlNzRjOGUsIDB4MzI5MGU3Y2MsIDB4OWRmMWEyZjMsIDB4MmIwN2NjMmMsIDB4MTg0ZWUwNTcsIDB4NDBlYzJlNzIsCisJMHhkZGNhYWNmYiwgMHg5Y2UyNDM5ZSwgMHhiMTY4Yzk5MywgMHhhNjA3M2RjNywgMHhmZDZmMTQ5NywgMHg1ZTQyN2E5MiwKKwkweGU4MGE3NTYxLCAweDk5M2I4Y2Q5LCAweGEzZTMzMDdlLCAweDNkMGMwODRkLCAweDdmNjNmYjA0LCAweGEzZWVlMzkwLAorCTB4ZTY2NjY1ZWIsIDB4ZThmMzI5OGQsIDB4ZDc1OTk5ZmIsIDB4ZGYzZmE5NjMsIDB4YzZlMjk0ZTAsIDB4MDkyNWM3MGIsCisJMHgwYzhmY2MzZiwgMHgxOGRmM2NiMiwgMHhmMzA3MWRmZSwgMHhlNzdiZWIzOSwgMHhiZmM1MGQzZCwgMHgxYmU5ZTMxZCwKKwkweDM3ZGUxODkyLCAweDZmYmMzMTI0LCAweGFhN2M3NDUwLCAweDFkN2YyMGM5LCAweDVmMjFhZjc1LCAweDk2ZGZiZDYyLAorCTB4NTA5ZTQxMjIsIDB4NzNlNTBiMjAsIDB4YmJkMTg3YmUsIDB4ZWQwZDdkZTMsIDB4YmI0NDllOTYsIDB4MTI1MDM2ZmUsCisJMHgwZGIyNjVlYiwgMHg3ZGM1OWVmOSwgMHhkZmUwYmNmNCwgMHg5OTRiOWZmOCwgMHhkYmE3ZWQ0OCwgMHg4ZDUwNWYzOCwKKwkweGMyOWJlOGMwLCAweDdlYjBiZWUwLCAweDRlOWI4ZTEyLCAweDE0ODFkYTJkLCAweDJkY2EwYmNmLCAweDlkMDc4ODVlLAorCTB4MWJiZWYzOWQsIDB4YzljZGM4OGUsIDB4NzgyNDJlNmUsIDB4MGQ3YWI1ZjQsIDB4MTU3ZjczZjgsIDB4ZDEyNWI3N2QsCisJMHg1MDM2ZDI3ZSwgMHhmMTgzZDU0NSwgMHhhNTI1YzgwNSwgMHg4ZmI4ZjVkMywgMHgzNzEyZGIzOSwgMHhjNDk3Y2ZlZiwKKwkweDkyNTc3NmZjLCAweGNjYzhlMTA3LCAweGVhNzQ4YTljLCAweDAxNGU0ZmE4LCAweGE3Y2NjMzdmLCAweGU2YjM1ZTU0LAorCTB4YjczOGVmMGQsIDB4MTE2NmY5NDYsIDB4NmYyY2Q5ZTAsIDB4MTQ2OTMyNmQsIDB4MjA4YWRkNzAsIDB4NzY3NGQyYmUsCisJMHg5NzViN2FlNiwgMHg0MzkwMzQ5NywgMHhhNzJhOGZkOCwgMHg3M2E3NTQ3YSwgMHgzYTZhZmUzZiwgMHg0ZmYxM2JjNiwKKwkweDFmZmVmZjA4LCAweGM3Yjg0N2UwLCAweGQ0NWVhMzE3LCAweDYyMGM4OGU1LCAweDdhMGVkZTdhLCAweGQ5Y2UyNjM3LAorCTB4M2VkN2Y0ZDYsIDB4ZDFmODlmYjAsIDB4NjBiYmNmY2YsIDB4NTJlZmU5M2YsIDB4ZWNmNDBiYmIsIDB4ZWNmZmZiYzksCisJMHg4Zjg2M2M4MiwgMHg4ZWYxNjdlZSwgMHhkN2ZlNGNiYiwgMHhmZjRjNDkyMywgMHg1ZTU0OTQ3ZiwgMHhkYmJhZjMwMywKKwkweDJmYTE3NWZmLCAweGJkYzk1Zjg2LCAweDUxNjQ1ZjZjLCAweDZmOWQzNDUwLCAweGFlMzc5ZTM0LCAweDE3Y2Y5OTBjLAorCTB4OTVkZjEwMDcsIDB4ZmQ3OGZjNTIsIDB4ZTcxNjI0ZmUsIDB4NTliZjU0NTksIDB4N2M2MTU2YzksIDB4YWU4MWFmZGYsCisJMHg3OTdmYjkyNywgMHgwM2RkODFiMiwgMHhhNzMzYzNhMiwgMHgzZTAyYTg3ZSwgMHg1NmMzZGZkNywgMHgyY2RlYWZiZSwKKwkweDliNDNmNWIzLCAweDNlNjJmYjBjLCAweDljMzMzNzhlLCAweGE0ZmRmODg3LCAweGEyMmQ3ZmYzLCAweDhlOWIzM2RmLAorCTB4YzNkNTJmNzUsIDB4ZjNjYjMwYmUsIDB4ZmU2M2NmMzUsIDB4OWMyOTZhNDcsIDB4OTBmZjlmZTcsIDB4YmMzNGZlODAsCisJMHhjZjVkM2Y3ZiwgMHhjNWFlZjc3YywgMHgzY2YzMzNmZCwgMHhhMDhmZGYzYiwgMHg5MGI1ZGZhMSwgMHhjZTdjZGJkMywKKwkweGVkOTg2MTZhLCAweDNlMjNjZjZmLCAweGY5NGVjZjk0LCAweDBmOTY2MTE4LCAweDllMjM4ZTZkLCAweDAwZTc5YzNiLAorCTB4ZjEyNjM0M2MsIDB4MzI0MmFiN2QsIDB4NzYyZWYyMTIsIDB4ZmM5N2VlMWUsIDB4Njc1ZWY5NmQsIDB4ZDNmMmI5ZjgsCisJMHhhNGY0NGYzYywgMHg5MzU5NjA5ZiwgMHhkYmYzYjJhNCwgMHg4MTRiYjdlMSwgMHhlZTM1OTZiZiwgMHhiZTY1N2JjMCwKKwkweDBjYWEzZWFiLCAweDg0ZmY3MjlmLCAweDZhMjVlODc0LCAweGU4MTFmZTVmLCAweGMxODI3YzQ4LCAweGY5YjY1Y2VlLAorCTB4NjVmY2MyYmMsIDB4ZjgzYjlmODYsIDB4MWYwMDNiZjMsIDB4ZWVjZWNmYjgsIDB4YTk2M2I5MGYsIDB4ZGVmNjIxN2MsCisJMHg4YzkyZjc5OSwgMHhhMjY3ZWJmYiwgMHgzY2Q5ZTRlNywgMHg5M2JlZjkyYSwgMHg1ZjMzM2YzZSwgMHg5YjNlNzBkNywKKwkweDlhZGE3NWI3LCAweDM1Y2E3NDVlLCAweGY4NzIyNzRkLCAweGZiY2MwNzc5LCAweDIxNjZmOWQ2LCAweDhhY2QyZjI5LAorCTB4YmQzYTFmYzMsIDB4ZmUxMDdjYTIsIDB4ZDNhYmMyMjUsIDB4NmNlZDVlNjksIDB4MjY0MGFmM2UsIDB4ODRjYmY3ZGYsCisJMHgyZjk5OTJiOCwgMHhkNzZmM2FiYSwgMHg4MGU0YjcyYSwgMHhkZWU5OWFiYywgMHhmYjNjZTA5YSwgMHgzZWQ4OTNkZiwKKwkweDJiNTUzY2VkLCAweDlmMzhiZDA1LCAweGM0ZjFhZjk0LCAweGE1MjcyYmQ4LCAweDgxZjc0M2RhLCAweDdjNjU2ZDFjLAorCTB4ZTA2YmQ1MWMsIDB4N2ViZTgyYmMsIDB4N2NmNWM2NGIsIDB4ODBjZDRiYjksIDB4MWU5MDkxN2IsIDB4ODc2MTVlNzAsCisJMHhlOWVmMDAzNSwgMHg2YmY3MWNlMywgMHhmMDE5N2Y1YSwgMHg2OWU1ODY1ZCwgMHg3ZmQ2Yjk3ZiwgMHg4MmZiNDc0MCwKKwkweDEwZGRlNzhkLCAweDQ0MWI2ZGM3LCAweGVhZDNiZTMwLCAweDcxZWJjMjMyLCAweGM3OGYwODg4LCAweGE1YmJkNmMxLAorCTB4MWYzN2YzNTIsIDB4ZGFkYTBlODAsIDB4YzcxMWY5OGMsIDB4ZDBmOGYxMmYsIDB4YmM1OTZiMjUsIDB4MTBlZDVlNzksCisJMHhkZDA1ZjcwYywgMHhmNzRhZTVjNSwgMHhmNGU2ZWUzZiwgMHhmNmNjMmJiYiwgMHg5YTZjZTdiZCwgMHhkZjMwZjQ4NiwKKwkweGZiODQ3MjY3LCAweDA0MWJiMzJkLCAweGZhNjYyM2Q0LCAweDc3NWVmN2NjLCAweGRjZWRmNDBhLCAweGRmN2UxMTYwLAorCTB4MTFlNDVlODksIDB4NmU5OWJiYTQsIDB4NzYxZTFkZWIsIDB4YWQ1NDhkYmYsIDB4YzczZjdkYzAsIDB4NGZiODA5MzcsCisJMHhkZTgxMjRiOCwgMHg4ZjA3NzdmYiwgMHgzZTczNzc2NywgMHg4MjI0NzllNiwgMHg1NWQ2ZTE3ZiwgMHg5ODExN2E2YiwKKwkweGY4MDU1MGZmLCAweDNlYmYwY2RjLCAweDYzNDRmOWZmLCAweDM3Y2Y4NzdhLCAweGNiNDhiY2QxLCAweDgyOWYyY2I1LAorCTB4YzI4YmUzYWYsIDB4NjVhOTdlZWMsIDB4YWYyYzg4OGYsIDB4NzQ4YmM3OTMsIDB4Y2Q3ODc1ZjgsIDB4OTcxNTI4ZjMsCisJMHhkYjZmM2U2MiwgMHgwOWYzMTEwNiwgMHhkNzA0MGFlZiwgMHg3N2NiYmRjMCwgMHgzZDcwMTZhZCwgMHg1ZDI3NDQ0ZCwKKwkweDMyZmJlODRmLCAweDYzNjcxYWNiLCAweGY2OGY5NTdlLCAweGRiNjk3NjAzLCAweGQ5MTcwNDg3LCAweGRlMDI3NWI2LAorCTB4OWU5MDkzN2YsIDB4OTQ1Nzk2NjEsIDB4MzA4NDllODgsIDB4NzRhM2NkYmEsIDB4N2U2ZTM4N2IsIDB4M2ZkNjkxNWMsCisJMHg3ODI3M2Y3NiwgMHg3NjNmZDZiZCwgMHgzMDg0ODk3ZiwgMHhkZDQ5NjRhZiwgMHg0YWYzYzMzNCwgMHg3NzRmNTE4NywKKwkweDNhYTQ3ZjI1LCAweDJlOWNkZTdlLCAweGU5ZmNiYTZmLCAweDljMWViOGYyLCAweGE1MWZiMDczLCAweDVjZWNhMWUwLAorCTB4ZTg2M2NmYzAsIDB4ZmJmZDUwYWYsIDB4ZmY4YjA3NzMsIDB4N2QxYjdhM2MsIDB4ZjNjNmQ5NjUsIDB4Zjk4NGZkODYsCisJMHhlNmJkMThhMywgMHg3OWYxOTM4YiwgMHhlMjgzNzVhMiwgMHhkNzg3YTBjMSwgMHhmODdhOGMzYSwgMHg5ZjQ3Y2U4NywKKwkweGZhMjcyZTg3LCAweDYyNzJjY2ZjLCAweDBmNGNkZWZlLCAweGE2NjcwZTNkLCAweDAwMWU5OThiLCAweDQ3MGRmODI3LAorCTB4MDdjMTFjOWEsIDB4MDQ0NzljMjgsIDB4YzlhMDc3MDYsIDB4NjZiNzcwOGUsIDB4ZmU3MDY4OTYsIDB4ZWRkNjU5NjYsCisJMHgwZjgxMWU1OCwgMHg1N2JkODM0NywgMHhlZDAzOGNmZSwgMHg3OTU3ZWU1NiwgMHg0NTAzZTdlMywgMHhmNzZlMjVlZCwKKwkweDQxOTYxOTg4LCAweDkzMTExZTMwLCAweDJlYzc5MGJjLCAweDc3YWE1YjY2LCAweDdkOGE3OWQyLCAweGQyMTgzOTY5LAorCTB4OWMyMmJkOTksIDB4OTkyZGFlZTcsIDB4MTQzZGMyMjAsIDB4NzdiY2ZjMzUsIDB4Mzc5ZDg1OGQsIDB4YzNkYmZiZDMsCisJMHhlZDk3YTBmMSwgMHg4MDQ2ZjI4ZSwgMHg5YTlmZWNlNywgMHhmZTJjMWQwYiwgMHhjZTBhZmU4YywgMHgxNDNkZWUxMywKKwkweDc2MGRiZmE4LCAweGYzMDRlYmYwLCAweGM4ZDIwYjY5LCAweDgzYjdhMDAxLCAweGVlNDBhMzY4LCAweDcyYTQ3NDNmLAorCTB4ZmZlZDljM2IsIDB4Mjg2Y2JmZDEsIDB4Y2JjYjU2YmQsIDB4M2Y5MDk3YWEsIDB4NDliM2UyZmMsIDB4MzdiMjVmNzAsCisJMHg5NzIyYjJkOSwgMHgzOGUyZmZkNiwgMHhiOWVlMDkzZCwgMHhjZTViNjZmMywgMHhmZGE4N2FlNywgMHhkNTljZjhlZCwKKwkweGVmOWNiNmFmLCAweDczN2ZlYjQ3LCAweGQ4NzU2MTljLCAweGY4N2I4MmE4LCAweDA1Mjc2NzFjLCAweDFlMzhjMzA2LAorCTB4YjVlYWU3YTYsIDB4MjQzZTQxYWIsIDB4YTU5N2YzMGIsIDB4YzNjNjBhZmQsIDB4ZDVmZGZkZjUsIDB4MTdlMGU2OTQsCisJMHg3OWY5Yzg3ZiwgMHgxN2UyYWFjZCwgMHgyYzY3MTAxYywgMHg2ZmQ4NTRkNiwgMHg3MWJlMGFkZSwgMHhlYTVmZWZjZiwKKwkweDE2MWQxNTc4LCAweDRhMDM2N2JjLCAweDFjYTdmZmMwLCAweDQ4NWQzYTlmLCAweGU0MzU3NjgzLCAweDc2OTA5MjNkLAorCTB4YjQ4M2VjMzUsIDB4MWRjNzdjM2IsIDB4OTFkODdkYjQsIDB4NTcyMDA5ZTYsIDB4NWZiY2VmMGQsIDB4ZjY4ZGY3ODgsCisJMHhhMzBjZmQ2NSwgMHhmM2E2ZTIwYywgMHg5ZjZhZmIzOSwgMHg4YWZiYjFjZCwgMHhjZmEyOGVlZCwgMHgwYzk0M2U4MSwKKwkweGFhMDg0NzY4LCAweGVkNDFkYzg3LCAweGE4OGQxYTg2LCAweDMxZjgxZTRhLCAweDgxYmRiYjQ2LCAweDQ5ZDdkOWYzLAorCTB4Y2Y5MWU3ZTUsIDB4OWY1MDQ3N2EsIDB4N2RmMGU1M2MsIDB4ZmQ5YmUzMDUsIDB4ZGE5Y2QyMTEsIDB4ZjI1M2ZlMmQsCisJMHg3YWY4YzVlZiwgMHhkMWUzNzY2YSwgMHhmZjlmMjAzOSwgMHgwYWZkY2VjNSwgMHg3YWY5ODY5YSwgMHg5ZWY3YTNkYiwKKwkweDFkZjdmNDEwLCAweDcxMGJjOTI0LCAweDk5MjVlMjM2LCAweGI3MWU3NDgxLCAweDRhYmUzMGIwLCAweDRiZjE4YzJiLAorCTB4ZjdlODdjZjgsIDB4OTUxZWUxMTMsIDB4MWZiNjBlOTEsIDB4ODIyN2U3NGMsIDB4YTg5NDM2OWYsIDB4Zjg4MzBlNTgsCisJMHg5YWIwMWU0MywgMHg0ODdiZWIwZiwgMHhiNDdkZThlOCwgMHhjY2VkYzdmZiwgMHgxMWQ1YjdlZiwgMHg4NDY3NWM0MywKKwkweDc3MDdkOTkzLCAweDI3NWM1OGI5LCAweDBjZGQwZTQ5LCAweDBiZTkzZGZhLCAweGRlZmQwMWUyLCAweGUxMjI5NGY2LAorCTB4YjllNGE2N2UsIDB4MGUzOWY3MTEsIDB4ZjgyZTMwNTksIDB4NDBmNDFjYWMsIDB4NGFmZGJkN2MsIDB4M2E0MmRkNDksCisJMHg3NGUzNmJmYSwgMHg1YzdkZmJkNywgMHg3ODg0YWY1MSwgMHhiMzE3NWNjYSwgMHgyMjJkOWUyNywgMHg3ZWRhZjc5OCwKKwkweGZlYzIwOTRhLCAweGFkYjY2YTU3LCAweGNmNGZkNjNhLCAweDRmYWRkZmU3LCAweGE0ZTQxZTJlLCAweDg5MjlhODY1LAorCTB4ZjcyM2Y4YzAsIDB4ZDI5MjgzNTIsIDB4MDJmYTg1ZTMsIDB4NzZjNWYwM2IsIDB4NDNjNTExYzAsIDB4MGY3M2Q1YWEsCisJMHg5ZTdhOTdmNCwgMHhjZjhiOWJjMiwgMHhhNGFmYzQzNSwgMHhmOGE2NGQwZSwgMHg1MzgzNzMxZCwgMHg5ZTI5N2I4NSwKKwkweGMwNmU4N2I1LCAweDJkMTdiZjNjLCAweDc2ZDNmZjc4LCAweGVhMGQzYmM1LCAweDFlYTljZmRiLCAweDliM2QwNzg4LAorCTB4ZjljMjRhMWIsIDB4ZjljMTY4YmMsIDB4YmY2YTRmNmMsIDB4ZmI4NTM5NmEsIDB4OGUyYzQxZTEsIDB4NjQ4ODM5MjAsCisJMHgyYTc5MDU0YiwgMHhjZmExZWY1NiwgMHg3ZDk5M2JjNywgMHhlNGMyZGFiYiwgMHg2MmE5ZGFhOSwgMHg4ZTgxNzFmZCwKKwkweDE1ZWYwMDVmLCAweGY5ZTkxY2ExLCAweGVjZWQ2ZDE3LCAweDViY2Y0NzFjLCAweGU3ZTA0NTlhLCAweDNmYmE2OWE0LAorCTB4MGZjMTExMWYsIDB4NzA0ZTU3MWYsIDB4OTRlNzFkNWQsIDB4YWQzYTJhODMsIDB4MjE3NjczOWEsIDB4ZDZjZWZmZGMsCisJMHgyZTFmMDk4ZCwgMHgyOWYyY2M5ZCwgMHhlZmMyZWZiZCwgMHhmMjcwMWMyMSwgMHhiZWY4MzZmYiwgMHg0ZjljYjVkMCwKKwkweGQxMTY5M2M2LCAweDVmYzdkYjQ2LCAweDJlNDhkZTI0LCAweDhjNmFmN2RjLCAweDVhNjMzZWRmLCAweGZlZjEyN2U3LAorCTB4NDRjZjc2YjUsIDB4OGM0NDVjNzgsIDB4MGRhNGYwZWIsIDB4YWUyMGE3YTUsIDB4MDkzNDRjNWMsIDB4NjZjNGE5ZjgsCisJMHhkY2Y1ODc2YSwgMHg5YWM0ZjcwZCwgMHhmMjczYzllZSwgMHhlNDg3MmI3NSwgMHhlOGZkZTZjNCwgMHhlMjQ5ZmI3MSwKKwkweDQ3Njg4ZGUwLCAweGMwNWUyOTk0LCAweGY2YTcwZWNiLCAweDBkNGZkODU3LCAweGRiZjJmNzUwLCAweGY4Y2YzZGUyLAorCTB4YTBkNjdlNTksIDB4NTcwMjBlOGIsIDB4NzRmZTUwZmYsIDB4ZGFhZTdjYzIsIDB4ZDNiMDFiNTAsIDB4OWZkNTVmNzksCisJMHgwODdjMGZmNSwgMHhhNzhhZTVmYSwgMHhiZTgwN2FkMiwgMHhlOTdhNzM3NywgMHhjMDc3Y2VhNSwgMHhjNjY0OWU1ZiwKKwkweDNhNmI5ZTVmLCAweDI3M2VmM2U0LCAweGYyZTg5YjhiLCAweGZkMDc3YzA2LCAweGI3ODM5MWVjLCAweGE0MWZkYmM3LAorCTB4ZjAxZjdhZmMsIDB4NDEyNzBlZWIsIDB4NTkxN2ZhN2IsIDB4NjcyMDU5YjYsIDB4OWRmYjM4ZmEsIDB4ZTVjZGZmOGMsCisJMHhmN2NiNTU5YSwgMHgwNDEyZWZjMSwgMHhjNmViNjRiZSwgMHgzMTE3NWVjNCwgMHg2ZWJhMmU0ZiwgMHhhYjc4MzMyNywKKwkweDUzZTlkYWQ0LCAweDI5Yzc2ZjIxLCAweDNhNGU1ZTYzLCAweGNiMTYzNzNmLCAweGZjMzE1OTJmLCAweGFiNWRmM2EyLAorCTB4M2FkZmY5OTMsIDB4ZmVlYzk0ZmYsIDB4Mjg0YjllMzMsIDB4MDZmYTkyZjksIDB4Mzc2YTI0YjksIDB4MjEzM2ZjZWEsCisJMHhiMzdkYzExMCwgMHg4OWQ5ODQwOSwgMHg5OWQ5ZmU2NiwgMHgyZThhN2Y4MCwgMHhhZGU4MTJhOCwgMHg5ODczZmM0ZSwKKwkweGJlMjI0ZmYxLCAweGIwNDhmZGExLCAweGU3Zjk5YTBlLCAweGUzYjcyNzE5LCAweDI1Y2ZmMjEyLCAweDY1NjllMDM3LAorCTB4ZWViN2M5NTMsIDB4OGRmYTM0ZWYsIDB4NzJlNjdjZjksIDB4YmU3ZTIzYjQsIDB4ZWYxYzY3ZTcsIDB4MWJkYTk1YmIsCisJMHg0YzZmNDFmMywgMHgyZjQxNzhiMSwgMHhiZWM4ZWU1MCwgMHgzYmJiYzI5OSwgMHhiNWQ3YmY0OSwgMHgzYmVhMGYzYSwKKwkweDc2ODdhNjI0LCAweDg3YThhZDg0LCAweDNlN2QzODc2LCAweGIyNjU4YjhjLCAweGYyNDQ3NGYzLCAweGI2ZmU0MGI1LAorCTB4OGQ0ZDk3YjcsIDB4N2VmYjI3YmQsIDB4MzkyMThmY2UsIDB4ZDgwNGZhMzIsIDB4M2UzMDZmNDUsIDB4MDBhNTM1MTgsCisJMHg1OTIxYmM2ZSwgMHgxODVlOThmMywgMHgwY2Q5NTI3ZSwgMHhkMGIyOGZiZiwgMHg5Mzg2ZjQ1NSwgMHg3NDA2N2ZiZSwKKwkweGM3NTNhYzA3LCAweDYwYjdiYzE0LCAweGY1MDUzMWQ5LCAweGRmN2JhYmUzLCAweDkzYjg4NTJlLCAweDcyM2ExNzllLAorCTB4YzVhNWRiY2YsIDB4YzY3ZGUxODMsIDB4ZmQ3MzZmNmYsIDB4NjUzMWQ3YWEsIDB4ZTlhNWY0MWUsIDB4ODRkMWQ4NWUsCisJMHhiZGYzMzFlOSwgMHg0N2MwZTVhZSwgMHhlNmVkMWRmOSwgMHg0OTQzNGVmYiwgMHg5MzNkMmUyYywgMHgwZTliYjJhOCwKKwkweGY5NThmZDMxLCAweDg4NWQ3MDgzLCAweDk5ZDNkZWY5LCAweDRmZDAxYjkxLCAweDVmNWRlNWI4LCAweDM5NGY3YmZjLAorCTB4ZGZlZjk4N2YsIDB4NzdjOTNhZmMsIDB4Zjk1ZmU2MWEsIDB4OTg1ZWYzNDIsIDB4YmFkOTUxMDIsIDB4YWZhYTUyMWQsCisJMHg1NzllZjc2NiwgMHhlOTNmMDFlNywgMHgxNDdmODg3MiwgMHgwNjhmYTE3ZiwgMHhmNWRkZWUxOSwgMHgxMWU4ZjVmMiwKKwkweDdiZWVjNGFmLCAweGJmNzA1MTY4LCAweDdkODQ5N2U3LCAweDk4ZWJlMjE3LCAweDQwZjRjNWNkLCAweDZlOTdjYWMxLAorCTB4NTU4NzM4MDcsIDB4MmU4MDA3NjgsIDB4Zjk5OTNiZmYsIDB4MTEyMmJmZDcsIDB4Y2RkMDFlNWIsIDB4M2E5YzYxMmIsCisJMHgyNzI1YWIyNCwgMHg4OGY3OGU4NCwgMHhjZTA4M2U1NCwgMHg5OWU5ZWQ3NSwgMHg1ZmM2MGMzNCwgMHg1YzM5ZjJlOCwKKwkweGVkNDg2ZjYwLCAweDkxYmJlMTg3LCAweDgxODYwYTYzLCAweDVkMGU3NzFlLCAweDM1ZDYwM2RkLCAweDU3MGE2ZTFkLAorCTB4MDc2NzM2ZDksIDB4MTc1YzNhMWMsIDB4NzQyY2JmMzksIDB4N2FiODc2Y2QsIDB4MmY0MGVmYjIsIDB4ZGM3YzdlMzUsCisJMHhmY2ViZGYwNiwgMHg4MmZhNmExMCwgMHg1ZjBjNDFmMSwgMHhmMDc0MWYwMCwgMHhkNDM3NzA4NSwgMHhmMWE0M2M3NSwKKwkweGQ4ZmZhZjUyLCAweDk3ZmJhMTdjLCAweGY4MDVmMjVkLCAweGM1ZWZlZThmLCAweDcxNWM0MzE3LCAweDczZGE4MmY4LAorCTB4ZDliOWUxYzMsIDB4MmMyOTBiOWUsIDB4ZmNmY2NjY2YsIDB4YmUxMTQ3MjksIDB4ZTYwODU1ZWYsIDB4NzZiZDkwODksCisJMHhiZTNiYmJmNiwgMHhiZjJmOGMxNCwgMHhiNjYzNjFlYywgMHgwNzNjNzQ3ZCwgMHg1Y2ViOTU3YywgMHhmOTBlNGNhOSwKKwkweDIzNDNkZjNkLCAweDQzOWZkYTAyLCAweDAzYjhhMmE5LCAweGE4ZGViY2VkLCAweDdmMWNiZDI3LCAweGMwMjBiOGU0LAorCTB4NGI5ODVkZmQsIDB4Njg3NjBkOWMsIDB4NmJkODA3YTQsIDB4MjM5M2FkNDMsIDB4MWQzYjBmMjAsIDB4N2VjMWIyMTMsCisJMHhjYjhjNzAyYywgMHgzMmJmZjk4MywgMHhiMDViZTU2OCwgMHhhYmQyYmRhNCwgMHg2YWFkZTVlMiwgMHhlYmE1N2Q4NywKKwkweDViYmMwM2MzLCAweDVkNWJmYzdkLCAweGQ1YWUzZjhjLCAweGQwMTBmOWQ4LCAweGU4NzBiMWViLCAweDA5OTAwM2ViLAorCTB4MzMyMjEwZTAsIDB4YTgxZDk3MmQsIDB4MTQyZGMzYzcsIDB4MWMwMmQ3NmYsIDB4MDRmYjBmMTQsIDB4NDNmNjAwZDIsCisJMHgyYjRiNDU5MSwgMHg2N2IwM2IwMSwgMHhkYjM4MDI0NCwgMHgwMzkxZmU5YSwgMHhlMWM5YTc3MSwgMHg3ODA1MWZkZiwKKwkweDViZmJlYjI3LCAweDk2ZmVlMzVlLCAweGVkZDZkZWQ5LCAweGQwZmZkZDIxLCAweDIyODkyNWVkLCAweGEwYWJiNzQyLAorCTB4YTczYzA0N2QsIDB4YmRjMGY0ZjgsIDB4NDViZWIwZTAsIDB4ZjUzZTc4NmMsIDB4OTVlYTczZjEsIDB4ODk2Nzk3MWEsCisJMHg5ZjMyNjNjZSwgMHgxOWE0NGRjNywgMHgyZTk3MjJlMSwgMHhlOTQ3MWU1ZiwgMHg2M2UzOTUzMywgMHg0OTEyNjFmMiwKKwkweDQyNzY4N2NhLCAweGZkYzAxNGE2LCAweDRjOTAyNDMzLCAweDE1ZTI5OWM3LCAweDdjMzEyN2M4LCAweDYzMjhkMzczLAorCTB4YTQyNmZlMWQsIDB4ZDVkM2Y0NzcsIDB4NjM3NWU2ZmIsIDB4ZmZjZTI5YWMsIDB4N2VjM2NiNDMsIDB4NGRmYzZlNzYsCisJMHgzYzE3M2IzZiwgMHg5MDE4OWZhNiwgMHg5NTFkZmQ2MCwgMHg3YjAzY2VjYiwgMHgyYjBlMWUxOCwgMHgyM2IxZDdmMSwKKwkweDU4Yzc5ZTVjLCAweDNjZTFmMjVhLCAweGZmM2RiZWU0LCAweGZmNzM3NWM0LCAweDA3YmU3ZjllLCAweDUzZThlNDc2LAorCTB4YzYzYzgxMTIsIDB4Mjc4NmE3MzEsIDB4MjhlYmJlZTMsIDB4ZWY0YWY5MTUsIDB4MDZiM2VhYjcsIDB4NDljZjYxMDcsCisJMHg4N2U4N2RlYywgMHgxNWRhM2MyOCwgMHhjYjBkOWYwMCwgMHhmZTNjY2VkNywgMHhlMTc3ZjQwNCwgMHhmMzYyNDQ5OCwKKwkweDVmMTU0YmU0LCAweDk2OGY4ODdmLCAweDBmZjE3YmYyLCAweGQyOWVjYzA5LCAweGZiZjEwZmRiLCAweDc4Yjk3N2E4LAorCTB4OTNkMjhlN2MsIDB4MWFjNGM3ZmIsIDB4NTQyOWU3NDMsIDB4NzQxNzI1MTMsIDB4YzljYTc1ZDAsIDB4N2U1MjUzYjIsCisJMHhkZmMwZmE2NywgMHg3ZTFmM2EyNywgMHg1Nzc0OWU0YiwgMHhmYjBlN2VhNSwgMHg1ZWI2MmVmNywgMHhjMzdmMDM5MiwKKwkweDM1ZDcwY2YzLCAweGZkODEyM2RjLCAweDQ4YTY1ZDdlLCAweGFmNzE5OGI0LCAweDFmYTdhOTU3LCAweGViZDhmNzEzLAorCTB4MDdiZmQ5MzIsIDB4MmE2MjdiOWUsIDB4MTExZTc5ZTQsIDB4MmFhYzY1MzEsIDB4N2NhZGUzYmMsIDB4NzE4YjM3YTgsCisJMHhmMTliYTdjZiwgMHgxZWY4NWQ3YiwgMHg4ODdmZjgwOSwgMHg1NzRkYzk5YiwgMHg4YWI5OGZlMywgMHg0MDM1YzlmMiwKKwkweGMwZWNjMjc3LCAweGM4ZTUwMTQyLCAweDdiZmRkZjRjLCAweGNiNDdhM2ZlLCAweDRlZjhjNGUwLCAweDFkMzM3ZjQ0LAorCTB4OGM1MzNiNWUsIDB4ZDE1ZDIxZmIsIDB4N2JiN2NjYzMsIDB4NTcwMzNjZTksIDB4ZDk3YWVmYzAsIDB4ZDc3ZjAwNDgsCisJMHg4M2Y1ODNjYiwgMHhlYmFjNGNmZSwgMHhmNGQ1NWFmYywgMHhmM2IwMGY3NCwgMHhkNDlkM2U3NCwgMHhlOGNkZjE4MywKKwkweDIwZjQ0ZmRkLCAweDk5N2EwZWNlLCAweDE5YjgyNmYxLCAweDc1ZDk3NmZkLCAweDYzM2JjNGJiLCAweDY3ZjQ3ZDJhLAorCTB4YTMyMTBlYmEsIDB4ZTQzMzQ4MDYsIDB4NTg3Mzk0ZDksIDB4OGE1YmJlNjcsIDB4ZjllMTA5NzYsIDB4NmRmNWU2ZmYsCisJMHgyNGM3NzhhNiwgMHhkZDVkYTc1MCwgMHgzYThiN2Y0YiwgMHhiOWY3NWJiYiwgMHg5NWE5MWQ5NywgMHg5NTJjMWQ2MCwKKwkweGM2M2QzMjU2LCAweDFlMWQ3OGVkLCAweDQyZmY5ZDMzLCAweDQ0ZmUxMWNhLCAweGMwZjk5OWYwLCAweDY4YWVlNzBjLAorCTB4ZWI4NmIyN2UsIDB4ZmI0ZjdlODEsIDB4NzJiOWZlZjQsIDB4ZTg3OTljNmEsIDB4ZDA4NWI4ZjgsIDB4ZmJhZjM4ZjUsCisJMHhkYjhlNzFlYiwgMHg0ZmU3ZmZjOCwgMHhhMDEzZmM0ZSwgMHg5OWJjOTEzNSwgMHhkNzZlNjZlOSwgMHgwYzI5NDdmNSwKKwkweDAwNjU4MDUwLCAweGVlMjE5M2VjLCAweGQyODc5NDc0LCAweDYwZDEwYThiLCAweDlkYjdiYTVmLCAweDM3OWIxYTdjLAorCTB4ZTQwYWY5M2EsIDB4ZjYxZTE1YjcsIDB4MmRiZjExMmMsIDB4ZGYxMjI4YmIsIDB4OTNiZTBlYjAsIDB4MDA3MzFmMWIsCisJMHg2YTk2ZWRkZiwgMHhmN2Y0NWUxZCwgMHg1MzI0ZDVhNywgMHhhY2ZjNGQzYywgMHgwNzNjMTZmOCwgMHgxMDIxNjJkZSwKKwkweGZlMTQ5YjVhLCAweDE5YzQwMGUyLCAweGNjMTI4ZWFhLCAweGVmMGUyZjA3LCAweDNkM2UwMTJiLCAweDlmYTMzNTI4LAorCTB4OTA4MTc2ZDUsIDB4Y2VlYzYyYzcsIDB4MDM4ZDcwYzYsIDB4MzRjNmIyZWMsIDB4NTBlOTllNzYsIDB4OWJlNDMxMGEsCisJMHg3ZDMzNzExZSwgMHhkY2VjNzhkZCwgMHhiYjRlMmQ1NCwgMHg3OWY4Y2M5OCwgMHhmMmQyZDEzYSwgMHhkNzRiM2ZlOSwKKwkweDNmMDBmZTUxLCAweGUzMGJhN2I4LCAweGVmMDUxMzI0LCAweGI3NjA2OWViLCAweDlmZWVjNmRjLCAweGY5MWE2YjZjLAorCTB4Yjc4NTFhN2EsIDB4ZDQxNGNlZjUsIDB4ZDcxYTkzMzMsIDB4ODRhMWUzZGUsIDB4MGMzZDdkMDgsIDB4MTZjZmI3OWYsCisJMHg3YmU4NWJiYywgMHhlYjE3YWFhNSwgMHhkMTcyZjNhNSwgMHg0ZGY5MWJlZiwgMHhhMTkzZTk4ZiwgMHhmZDE5N2FmZCwKKwkweDUyZTI0OTllLCAweDY3NTVlMjA5LCAweGYwMDI4NTMzLCAweDJkMDhmNzI3LCAweGYyZjdlMGFiLCAweDM4ZDhkMzAyLAorCTB4MDFlODEzYzQsIDB4OTMzYmU5ZmUsIDB4ZGZjNTBjN2IsIDB4ZmFmNTUxNzQsIDB4MjA1ZGZjMDAsIDB4NTZkZmYyNjIsCisJMHhjZmJmM2FlZSwgMHhjZTU3ZGI0YSwgMHg3MzNmMzAxMCwgMHgwNDliMjc5MiwgMHg3NGE3Zjg2MiwgMHhiYWYzODI5ZCwKKwkweDBjNTE5YzM5LCAweGNjYmQzZDdjLCAweGMyMmM0ZTc4LCAweGU1MTljOWVkLCAweGRkOGMxMjBlLCAweDI4M2MxNTI3LAorCTB4ZWRlYzg3ZDcsIDB4NWNlZmUyYjcsIDB4ZTYwNGM5MzYsIDB4MGRmOWNiYTcsIDB4Y2U2N2RmOWMsIDB4NmVmODYxZWEsCisJMHhhNzc2NjExYSwgMHg3MjM3NTcyZSwgMHhmYjgxYmJmOSwgMHhiMmY5YjdjZCwgMHgxMzk3ZTMwZCwgMHg4MWZkMGY2NiwKKwkweDkyMDQ0ZmI0LCAweDNjYjMyNzk0LCAweGNkZWRhOWEyLCAweDJmMGVkZWVmLCAweDgwNDdiZDg5LCAweDkwNzFiYzNlLAorCTB4OTcxNWVmYzksIDB4YzhiZTQ2YWUsIDB4Yzc4MGJjMTQsIDB4ZmI2MzVlMjksIDB4ZTc0Y2EzNGQsIDB4NmJmMjRkMTQsCisJMHgyMDMzMGZkNiwgMHhhY2VjNGEzYiwgMHgzMDdkNzQyNywgMHgyMTk0NDlhMywgMHg4OGEzMzQxZSwgMHg2MmVkMTllMiwKKwkweDk1ZGVkZGEzLCAweDk0OTkxOGJlLCAweDUyNWM1ZjQwLCAweGE0MzMwNDFmLCAweGIwZjhiZTkzLCAweDhiZTk3YmVjLAorCTB4MzJkYmE5NTcsIDB4MzZmNWNhOGEsIDB4MjFmNDZmNWQsIDB4NGM2ZjQwN2QsIDB4MDA5ZmViMTIsIDB4ZWJhMzZhM2UsCisJMHgxZjBlMzVhNiwgMHgxZThlZWJlOSwgMHg3MmE1MjgwNywgMHgwY2UwN2E4YywgMHg3NDllMmZjYiwgMHg4NjA0OGIzMSwKKwkweGEyMDFjNDc1LCAweDI1ZGE4NDdhLCAweGQyZjYzOGRlLCAweDYxOWU3NzdlLCAweDU3YWEyM2ZmLCAweGI5MTJlYzYyLAorCTB4MjVkYjg3ZjAsIDB4YWEzZGE4OTMsIDB4YmQ3YzAwMTQsIDB4YzI1MmJlMTEsIDB4OTBhNTk2ZTIsIDB4YzNmMTAyYzgsCisJMHgwZTMwMmZjYywgMHg3ZjUxMjU1NCwgMHhhN2U3ZDcxNiwgMHhmZmEzOWU5OSwgMHhlNDNiNTIxMiwgMHhlOGFmNmNjMywKKwkweDNjMDllODcxLCAweDk3ZTY2MTdlLCAweDE2ZjIzYzY4LCAweDNhNDJlMzE5LCAweDNlMDI5NDlmLCAweDExNmZmZTQxLAorCTB4MmJhMDlmNzEsIDB4MzdjN2QxYmUsIDB4MTRjNDRiZjMsIDB4NWY5MmVhMWYsIDB4NTc3ZGRjYjgsIDB4ZTZlZDM5N2UsCisJMHhhNGZlYTFmMSwgMHg0NGY4Nzc3ZiwgMHg1ZjlkMGZlNywgMHg5YmNkZWJjYywgMHhhMjUxMzhhNiwgMHhiMDlmZTZmNSwKKwkweGJjNGNmNGRlLCAweDQ4M2ViY2RlLCAweDk1ZGViZDQ2LCAweDk5MmU3MzVkLCAweDZlODlmOWU5LCAweDc1NzczYjBmLAorCTB4ZDgyNzBjZTUsIDB4NTk5MjEzMzUsIDB4NmViZTgxN2UsIDB4MWI1ZGUzNDUsIDB4ZGViYzlmMTgsIDB4N2Q4MjQ3MzIsCisJMHgxZmQwMmFhNiwgMHhkMDc0MWRiOSwgMHg1ZjNhYzVlMywgMHg2MDI3NWIyZSwgMHhkNzMyNzQ3YywgMHgyYzRkYWQ1ZiwKKwkweDUxMzU1ODVlLCAweDhmZDFjMjBjLCAweDRmNjNmMDkyLCAweDZmYmIzYWIwLCAweDE0ZWZhNzQ2LCAweGQyNDUyN2NlLAorCTB4ZmY3ZTA5M2UsIDB4ZTBhZjI2ZjQsIDB4YzY5M2I4ODUsIDB4MzU1MzhkZTMsIDB4NjY4ZGUzMDEsIDB4NDRkN2I1YmQsCisJMHgxZmJjZTlmNywgMHhiYmUwYmZmMCwgMHgyMDg0Y2E5YiwgMHhmZDY2OTNmOCwgMHhiMzIyZmQzNiwgMHg1M2Q5M2EyZiwKKwkweGNjZDg5ZjdjLCAweDczMjY1NzJmLCAweGY0OTdkMGZkLCAweDE1ZGE1N2ZkLCAweGRkYmY5MmEzLCAweGVmYmZkMGFlLAorCTB4YjA2NWNlOGEsIDB4YzBmZmEwYTYsIDB4M2IwMTkzZWUsIDB4ZGQ3Y2U4MWUsIDB4MmRmYjA5NDUsIDB4NDlkYTM2NDksCisJMHhmYzE0Y2UxNywgMHhmZTRmN2QwYSwgMHgzYTFlZjliZSwgMHgxYWJhN2NmMywgMHgxN2Y3NTBiZiwgMHg4ZmEwZmZiOCwKKwkweGNlYzQ4MzdiLCAweGE3ZDc5YmY3LCAweGZlMjNkNzJlLCAweDc3NWU5OTlkLCAweGI1ZTMxYjI0LCAweDNkNzQ1ZDNhLAorCTB4NWNlZjA5ZGMsIDB4NWJhMjI3NGYsIDB4ZDc1YTdhNTcsIDB4M2Q2YWZmODcsIDB4YWZhZmY3YWQsIDB4NjZiOGZhMjMsCisJMHg3ZmM4OWRmZCwgMHg5YWYxZjVkNCwgMHhkYjhjMTZjZCwgMHhmYTdlZTc4YywgMHhmZTNmMWU3OCwgMHg3ZWU3YjcwNSwKKwkweGRmZmNjYzk5LCAweDE2NmQyZmI2LCAweDMyNDM2ZjU4LCAweGVjMGIyN2RiLCAweDY5ZmM2MjczLCAweDA3NjY1ZWZiLAorCTB4YmUyYTVjZDksIDB4NjIyMGEwZjcsIDB4MTFjMWU0N2MsIDB4ZDRkN2Q0MTYsIDB4ZjMwNjFhMDcsIDB4MTkwOThhOTYsCisJMHhiZGJkZmIwNCwgMHhiZDZmN2VkOCwgMHg3ZDQ3MjkxNCwgMHg5YzA4OTVlZiwgMHg4YzVkMTNkMywgMHgxZmRjMWUxZiwKKwkweDdmZmExZGI4LCAweDk2ODE5M2YwLCAweDQ3NGY4YzFhLCAweDFhNWVjMTlhLCAweDdlZTEyMDU5LCAweGM1NTU4YTU5LAorCTB4OTM2Yjc2NzgsIDB4NmEzYmVmMTUsIDB4ZjZiZmZkZGIsIDB4OTdjZmQwYzksIDB4ZTUyZTBiYzQsIDB4NzQ2YjI2YzEsCisJMHhjN2Y0MGFiZiwgMHgwODg4ZjEyNCwgMHhlZDZkMWNmOSwgMHgxYjAzZWYwNCwgMHgwMjUyMmIzNywgMHhkMjc4ZDk3ZSwKKwkweGZmZmUwMzVjLCAweGMxZTU4NTE4LCAweDZjZDRmMTliLCAweGZiY2NhNzVhLCAweDJjNGQyNTVkLCAweGM1YzRhNWZmLAorCTB4ZWQzYTVmZjMsIDB4ZWZlMzM0NTcsIDB4MDQ5MDRmMjYsIDB4YmNlOTBkNmYsIDB4Yzk5MmYxNWYsIDB4ZWZkOGU5ZGYsCisJMHhkMTVmYjA0YSwgMHg3N2QxZjRjOCwgMHgwMzE4YWZkZCwgMHhkZTdjYTAzNCwgMHhkNzAxY2JhNCwgMHhiZWMxMjQ0ZiwKKwkweGVkODU3NmM1LCAweGNkYmZiNTc3LCAweDY5OTNkM2VkLCAweDVkNDZlMzcxLCAweGRlZWM1ZmVkLCAweDdkYzFhNDliLAorCTB4ZWZmOWRiMjMsIDB4ZGJkZWVjNmMsIDB4MTNmMzUzNGIsIDB4ZDJkZjlmYmYsIDB4ZDhkMzBjNWUsIDB4ODRiMzdmNWUsCisJMHhiZTNjNzNmOSwgMHg5YTBiOGQxYiwgMHg5MGU5Y2JmMSwgMHg2YjQ4MWY2OCwgMHhmNTA0MWNmNCwgMHhlN2RmNzA5NSwKKwkweGFhZTE4YTgyLCAweDVkNGY4YWVmLCAweDRmMWZiNjZlLCAweGI3ZWY4MGQyLCAweDAxYTVlZjFmLCAweGRjNzlmYjFjLAorCTB4YmNmNTZiZDAsIDB4ZWVjMmY2MDUsIDB4NzA5MmU3NjMsIDB4NTRkMTU4M2YsIDB4NTNkYTRmZjAsIDB4YWU3NjVlNmMsCisJMHgyODQxYzk5MiwgMHhmNjEwNjA2YiwgMHhlZmYwZjdhYiwgMHhiZmI1MjdiNiwgMHhlYzVhNzU3OSwgMHhiZmRiMGU3ZSwKKwkweGQ3ZDljZmQxLCAweDQ3ZjMwNDI4LCAweDNmOTYxNjAyLCAweDBjZGZjNjYyLCAweDNiOTM4ZjBmLCAweDIyNzRmYWYxLAorCTB4YmM2MmE5YTcsIDB4MDk2ZjUwM2MsIDB4M2YzMDU3Y2IsIDB4Y2U0YzNjOTcsIDB4ZmRmZTJmZmYsIDB4ODAwMDY2ODQsCisJMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1YmJkZmYwMCwgMHhkNTU0NzgwZCwgMHhkY2VlZmU5OSwKKwkweGYyNjY3N2I5LCAweGZjOTk5OTMzLCAweDRkYzJmZTEwLCAweDAwOTA4MTAyLCAweDdlMTAwODQzLCAweDUwMjAyMWQ0LAorCTB4NDU0MDY0N2UsIDB4MDQzYWJhZWMsIDB4YTFiZjkwODUsIDB4NTZkM2ViYjEsIDB4NDEyNmUxZjcsIDB4MjdkM2UwOGEsCisJMHg2Nzk2ZGQ2ZCwgMHg1NzA2N2RiNSwgMHgzYjEyNTRiNiwgMHg3NzA3MDRjMSwgMHgwOGEwMGVjMiwgMHg4MGEwZGI1NCwKKwkweDExZGFlM2MyLCAweDI0ODZhMjI5LCAweGVjNTZiYjBkLCAweDNiZWZkZDZlLCAweDY2NjRkY2U3LCAweGVjZmE1YzE4LAorCTB4Zjg3MjgzNzYsIDB4OWNmNzM5ZWUsIDB4ZmJkZjdjZWYsIDB4YjM3MzlkZmQsIDB4MzMwMDAxZDMsIDB4Njg3NzZlMDEsCisJMHhkYjAwZDkwMCwgMHg4YzgwMmY2NCwgMHhkZTA4MjBjZiwgMHgxNmU5MWJmNCwgMHhkMzA1ZDYwOSwgMHg3YWU3NzY4OCwKKwkweGE5ZGZlMGE3LCAweGNlMWE2YmE2LCAweDJjYjBlZjkxLCAweDdhNDQ4ZjM1LCAweDQyZDFlOTg2LCAweGM2MzllN2E0LAorCTB4Njk5ZTdhNzIsIDB4ZjgwNmUyODYsIDB4YmE1YmM4NjcsIDB4Y2ZjMDBlNjgsIDB4MDM4NzVlOWMsIDB4ZDI1N2U5ZDcsCisJMHgwMDE5NDg3NiwgMHg2NTA0OTM2NiwgMHg1MjhlZDg1OSwgMHhlYzM3MzgwMywgMHg2NWFjMDE1MiwgMHgzYzFkYWViOCwKKwkweGFhNDAxNzRlLCAweGQyMWI3NDA1LCAweDU0ZmIzNjBkLCAweDFlOTVmMWEwLCAweGQxMWE0YjZkLCAweDg3YzQzZDAwLAorCTB4YTUwMzlhMzksIDB4ZDMzNmJlZDgsIDB4YmUwMGIzMDQsIDB4YWRjMWZiNGQsIDB4MWVmOGFhYTQsIDB4YzVhOGZmYmUsCisJMHhmYjgxY2UzNywgMHhlYzQ2YjdhYiwgMHgxZmY2MDE1YSwgMHhhNDA0NzNiYSwgMHg2YzFkN2VkMSwgMHhjZjJmMjViZiwKKwkweGM2MDI4NWNiLCAweDMzZmZlMTU3LCAweGY4Yzk2NTVmLCAweDc1ZjBhNmRhLCAweDJjOTQwZjdhLCAweDY0YmY1YzA0LAorCTB4MWE1ZjhhMWMsIDB4NTk5OTRmZDYsIDB4NDE2ZGNmNjMsIDB4ZjQ5ZjNkMDAsIDB4OTA5NWM5ZTAsIDB4ZWVhYTcxNmUsCisJMHhjZTM0Zjk5ZCwgMHhiNmYyNjdkMCwgMHgyMWZkNDE0NSwgMHg2OWFhNzI1ZiwgMHhjZTUxZTkwYiwgMHhjMGU5NmQzMCwKKwkweDg5ODc0ZWY2LCAweGFjNThiZmNkLCAweGI3OTAzMDAzLCAweDhlMGRmNTFhLCAweDUzMzViYzgxLCAweDk2ZmE0ZDM4LAorCTB4NDg4MWIyZTUsIDB4OWI3ZjUyMzksIDB4ODcxZTdlZWUsIDB4MGY4MTk4YzIsIDB4ZGRmYTQ3MWUsIDB4M2JkYzRhMDcsCisJMHhjMjkwYmU5MSwgMHg1MDJlYjFlNSwgMHg3YTQ1MTJkMCwgMHgzNjMwMjViYSwgMHg5ZDM5N2M4MiwgMHhmN2M5MmYzZSwKKwkweDA0YzA5NjliLCAweDJkYjRhNzg2LCAweGU0YmYzNGU5LCAweGNhMGVmODAxLCAweDNkMTA0MjQzLCAweGYxNmVmYjgwLAorCTB4MDIxNmE2ODAsIDB4MWNlNzgwOGMsIDB4OTAwMDRiOTcsIDB4MzMyYWY4MmIsIDB4MjU2MGJhZDksIDB4ODczN2RlYjksCisJMHgxNzU4ZDVjYiwgMHgxYzg1Njg2NSwgMHgzZjgyYTdlNCwgMHhmNWMwZjgzNywgMHhjMWJlYjQ3ZCwgMHgzMDFmMTBjZiwKKwkweDE1Mzk3MWM2LCAweDQ4NTdjZmQ4LCAweGQzM2NkMWY3LCAweDBhMzIxZTUwLCAweGZmZjNkNzA1LCAweGEwYjAxNGRlLAorCTB4M2ZmOGZkZmMsIDB4MzI1ZjJmZDEsIDB4Yzk4OTc0MDUsIDB4MmNmZDZkM2QsIDB4MzNhZDg4ZjYsIDB4OTk2NmFkZTcsCisJMHg5ZmUzYWIzMSwgMHhlY2Q0NGM1OSwgMHhiYjU0M2NhNywgMHhmNzQ4ZWMwMiwgMHhhZDQ2MmY5OCwgMHgzN2Y2MWQ2MiwKKwkweDljZjkxYzZlLCAweDdkOWZkZTI3LCAweDhkMzBiN2MyLCAweGM3ZTJmN2RhLCAweGZmYTc4M2NkLCAweDE1ZmJlMzIwLAorCTB4ZTUwMTkwMTAsIDB4ZDA5YTI3MzIsIDB4MzFmZTVhMWYsIDB4NGFlZjNmY2QsIDB4NzdiZmYzZmMsIDB4N2RiMTY3YTQsCisJMHg1ZjUxODI4ZCwgMHg3NzIyN2RiMSwgMHg5NWEzNWViOCwgMHg2NmY4MzdhZiwgMHhkM2UxMDY0MSwgMHhhMmQ5NDY2YywKKwkweDg2NGQ1NWZjLCAweGEyYmY2YzBhLCAweDNhMDAzYjlmLCAweDBiMzhlMmI3LCAweDU2YWRjMWMwLCAweGUzMzk0ZWQ2LAorCTB4ODRlYjQwZDgsIDB4MjY5MDIyYjYsIDB4MzViYWJjMDIsIDB4MWQ4NmI1OTcsIDB4MGYwMzM5NGQsIDB4NzU5OGQ0YzEsCisJMHgzOTBkZGUwNCwgMHhlNWM3YmUwZSwgMHhlOTNhM2QzOCwgMHg1NjkxZjNhNywgMHhkMDEwMjg0ZSwgMHg1NzMwZTU4NiwKKwkweDVkMTA2YmM4LCAweGYwNzllOTA2LCAweDQ3NWI5YTRhLCAweGJiYzlkNjdhLCAweDRiNGZiMjY1LCAweDk4YjQwOWFlLAorCTB4MTRiNGQ5ZmQsIDB4ZDMwZDI2ZDAsIDB4NzE1YzkzYTksIDB4YjhmNDJjYjQsIDB4OWU3ZjY2Y2QsIDB4ZjRmNzQyZTEsCisJMHgzMzNhZTJlNCwgMHhlZWU5M2FjNCwgMHg0MWYzNzE1MSwgMHhlOGM0ZmYwMCwgMHhlMmQ3NTVmMywgMHg2N2VlMTIxMywKKwkweDBhZjU1YTQ2LCAweDQ1NDY1N2RhLCAweGU1ZmNkYzQxLCAweGJiY2JjNjZmLCAweDA5MWViYzBjLCAweDhmYmY3NjVmLAorCTB4YjNmYmUzZmMsIDB4Y2M3ZjYwY2UsIDB4MmI0ODhhZjgsIDB4ZmJjNTQ3YzMsIDB4NWVlN2NmZjEsIDB4NmYzYmE3OGEsCisJMHhjOTliYjdhNiwgMHg3NGZlYTYxMywgMHgyZTVmZDY3ZSwgMHg1ZTI3YTc0ZiwgMHhlMzRiOTk5ZSwgMHg4ZGVkOTllNSwKKwkweDc1ODhlNzk3LCAweGU5MWFmMmYxLCAweGU4Yzc5NzhiLCAweGZkNzFjOWVhLCAweGM1OTRiNzYzLCAweDMzYmVlM2QxLAorCTB4YmU3YzZlMzcsIDB4MTc0NzE5NWUsIDB4MzcxNjU4ZWUsIDB4OWFlYjQyN2UsIDB4ZWVlMjdhMzgsIDB4MmY4ZGM2NmYsCisJMHhmNWM1NTQwZSwgMHhmOWFiZWM5NywgMHgyNTNmZjQ4YiwgMHg5ZTM3MThkOCwgMHgxYWZhNmNjNCwgMHg3ZDBiNGZmZCwKKwkweGJmYmQ2ZTJmLCAweDlkZmZmZTk2LCAweGNmN2U4ZmY0LCAweDdhNDRiZmQwLCAweDQyZmE0OTlmLCAweDFjMzY1OTNmLAorCTB4MDZiODljOWYsIDB4Zjg2NzRiZjksIDB4ZGExMmViOGQsIDB4ZTlhOTVlYTUsIDB4MGNiZWJjYzQsIDB4ZjdkODJkZGMsCisJMHhjODk1ZWM4YywgMHg1MTQ2OGRiZiwgMHg2YzZmZDA5YiwgMHhmOTM1NDEzMywgMHg0Yzk4MWZmZCwgMHg4NmQzNzkwZiwKKwkweDk0ZTRkY2VkLCAweGFhY2ZmY2Q4LCAweDE0YjhhNjYwLCAweGU5NGQ2ZTNiLCAweDRkYTMzOGYwLCAweDc4ZDg5YTc3LAorCTB4ZDM3ZWRmYzMsIDB4ZDE0NGI1YTIsIDB4Yjk5NzRlOWYsIDB4OWIzZjQ1M2YsIDB4NzA3ZjQ0ZWUsIDB4MjE0MjdhNDEsCisJMHhlOTY0YTkzNywgMHhjNTk0YWY4YSwgMHhkOGJjODc5ZCwgMHg2YTRiMjEzYSwgMHhkODYzMzZjNCwgMHhhMTVmNmJiZiwKKwkweDgxYTgyZTUyLCAweGZlMjEzZmJkLCAweGJkZWVjOTRmLCAweDQ4NmZmZmM4LCAweDE3NDkyMzIwLCAweGVmM2YxNjZlLAorCTB4YTY5NmZjMzcsIDB4Zjg2MzM4NjUsIDB4ZTIzMzRjMWEsIDB4ZjE0MTk2YWQsIDB4NDJlMWYwNzMsIDB4M2ZjZWQ3ZTYsCisJMHhmNTBiNGU4OCwgMHhmYmU1NWU3ZiwgMHgxMTVmYzYzMSwgMHhlMTUzZWQ3ZSwgMHg5ZmM5N2FkNywgMHhhYmZiODY1OSwKKwkweDVkMzhmY2Y3LCAweDRmY2U3OWMzLCAweDE4YzFhNTgyLCAweDM5MGIxNTM5LCAweDJjMWMxOTgxLCAweDNhZTNjY2VlLAorCTB4NGJiMzUwYmIsIDB4ZGZmMzg4ZDksIDB4YTE2YzJlZjcsIDB4MTNmYmVlNzUsIDB4NmY3ZDg5NmMsIDB4ZmU2MTUzYjYsCisJMHg2NjUzYjY3MSwgMHg3MjZjNWFlZCwgMHgzMTZiY2U1MSwgMHgxOGNiMzlhNiwgMHg1ZGIwOTExZCwgMHhiMjE0MDI3NSwKKwkweDdjYmVkNWNiLCAweDBlZjI4NDg1LCAweGUxNzZjZmI4LCAweGQxNDgwYjkyLCAweGUwM2RkZWY4LCAweDlmZmZjODU1LAorCTB4OWQzZWIwN2IsIDB4ZjNjZDBkYzYsIDB4MTE3NzEzYzYsIDB4YTJhMmQ3M2UsIDB4ZDc3OTJmMjksIDB4ZTgzOTJiYTksCisJMHg5MzZlMDYwZiwgMHg3NWM0OWM1OCwgMHhmYmRjZjRhYywgMHgyOTI3ZThjMCwgMHhkZjAzOWNiZSwgMHhhZmE4YjNkNSwKKwkweGYzNjZlMDM1LCAweDcyMjJmMzE5LCAweDA1Y2NmY2UzLCAweDM4OTkyMjE1LCAweDEyYzE3ZThmLCAweDM0N2M4YmQ4LAorCTB4ZmE4MjVlNTIsIDB4YzExZWVjNjksIDB4Y2Q3ZjVmZTIsIDB4ODI3ZmRiMWYsIDB4MWQxYTFlZTMsIDB4ZmFmMTRiMWQsCisJMHg4YTlmY2Q0MiwgMHhlZmY3Y2Y0OCwgMHg3ZDQzNDE5NiwgMHg3N2M1Mzc3ZSwgMHg5MGMwZTExNywgMHhhZjg3ZjljMywKKwkweGM2M2Y1M2E1LCAweGQ4NjdhNjVkLCAweDY1ZWY3MTZmLCAweGRlY2ZkYmYyLCAweDczYWRjNjMzLCAweGRlOWJiODJlLAorCTB4ZDAxNDBhODMsIDB4NjdmMTFiOWMsIDB4NDk2ODE0YjQsIDB4ZTA2YTM1MmUsIDB4M2U0M2RmZTcsIDB4ZTZjMjk0ZTEsCisJMHg1OWIyZjAzMywgMHg1ZjMxYTVlMCwgMHg5NzhiMTExYiwgMHhiYzIxZjRjNiwgMHg3MWFiN2NiMCwgMHhhNmVjY2NhZiwKKwkweDAwMTZkYmIxLCAweDgxNTljYjk0LCAweGViZmVmZjNiLCAweDIzNGY3ZDJmLCAweDFmM2RlNzgyLCAweGM0MzQ2ZTIxLAorCTB4MzcxMWVmYzksIDB4OGZiZGM2MWEsIDB4M2Y0NDM3MTEsIDB4ODg2YjdiMmEsIDB4ZmU5ZThmZGYsIDB4NzlhM2VlYzgsCisJMHhiZTM1YjllZiwgMHg3MzgxYTVmYiwgMHgzZGYyNDM3ZiwgMHgwODNlZjFjOSwgMHg1Zjk4ZTc4MywgMHgyOGQ2MmNlZiwKKwkweGYwNzg1YmFmLCAweGViY2EzOWZhLCAweDlhMmQzYTFhLCAweGNlYWJlOTA1LCAweDY5NjdmMWU4LCAweDY4MDkyMWZjLAorCTB4YzZjNDQzN2MsIDB4YTc0MzU1OWMsIDB4N2Y2MWIwMTQsIDB4ZmI2M2E4NGQsIDB4ZGE2YmE0NjgsIDB4ZDg1Mzk3NTYsCisJMHg3MjIxZGJmMCwgMHg5MDFmZjUwNywgMHg3ZmQ4Y2QwMiwgMHg3YjVlYWI3OSwgMHhmMGI4NzUwOSwgMHg2OTk3ZWJkNSwKKwkweGY5NTdiZWRlLCAweGVhYjY1N2JjLCAweDkwMTNjYzFiLCAweDAzZmViMDNlLCAweGQzYWVhZjlhLCAweDZmZDQzNjAyLAorCTB4OGVhMjMzOWYsIDB4YTQzYWY1YTYsIDB4MWQ1N2FkMjAsIDB4ZjM0YWExZmMsIDB4N2FiMGJmNTcsIDB4YjUzOWE1M2MsCisJMHhjNmFhOWFmYiwgMHhiZWJmZjhjNywgMHgwZDU1YTc4MywgMHhmOWRkNTRlNSwgMHg1YzYyYzVjMywgMHgwMTVmMGYzOSwKKwkweGZlYzYzNzY2LCAweDM2OWEwNzM3LCAweDJlZTM2Mzk4LCAweDdiMjc1YmZlLCAweDJkZjc3ZTEyLCAweGUxNzVmZjIxLAorCTB4MjcxMjE2YzIsIDB4NjdhZTk1ZmEsIDB4NzY1N2U2MjUsIDB4Yjg3MmJmMzMsIDB4ODVmZWRmZmQsIDB4OGJmNDNiZDYsCisJMHgyODFiODQwOSwgMHg4Mzc5MzViZiwgMHhiMTcxNjc1NywgMHg1NzAzYWM0MSwgMHg5ZWE5NTFkZSwgMHgyZTU0ZTg2OSwKKwkweDdjNjVlN2M3LCAweDc3YTczNWZjLCAweGY5MjY3M2FmLCAweDg1YjQ5ODU1LCAweDc5ZjEzYmQ1LCAweDI1OTQwZWUyLAorCTB4N2U3YWUxZTUsIDB4MzkwZmIzMGEsIDB4OGY1ZDQwNmQsIDB4MDY5ZjdjZmMsIDB4Yzc2NjNmMjAsIDB4ZjQ4NTVhODAsCisJMHg1NzE4OTcwZSwgMHhjZGVjMGQ2MCwgMHgzZWJmOTFiZiwgMHg2N2FkOTlhNywgMHhhYzVmMDAyZCwgMHhjZmRhMzBkZiwKKwkweDgyYjFmZjQ0LCAweGQ1MjhkNTRmLCAweDk1MTVkYTE3LCAweGY5MTBkYjcwLCAweDdmOTBkNTQ0LCAweGM1YzNlODdmLAorCTB4N2RlZjI0OWUsIDB4NjI5NWZjMjIsIDB4MjllZjU2ZjIsIDB4NDY4ZmI2MWYsIDB4NzE0YTM5YTksIDB4NDRkMGYxYWEsCisJMHhkNjdhNjc0ZCwgMHgyZWJmOGNhMywgMHg1OGZiNDY5YiwgMHg1OTkzZjA3OCwgMHgzZWY5OThkMSwgMHg1NzhjN2M0MywKKwkweDVmODZlOTg2LCAweDIxNTUzODdkLCAweGUxZmNiZGI5LCAweGNjN2E3MzU0LCAweGFhZDI3MjNlLCAweGUwZjk0OTAzLAorCTB4YmI0OWUyZjEsIDB4NWJhZDBhZjcsIDB4MzVhMmQwN2YsIDB4ZGNkYjdjMzMsIDB4Mzg3N2MyMTEsIDB4NDQ2NjhkZDUsCisJMHhjYjliNTZmOCwgMHgzZjdkZjE2MywgMHgyYzIxYmJlMywgMHhkMGU5MTFiYiwgMHg2YmVkNWExMCwgMHhkZGQzZTM2MiwKKwkweGI0MzkwNmE0LCAweGM5OWMyNzQwLCAweDIzYzMyZjBlLCAweDM3YWUyN2ZjLCAweGZlMzBlMjhiLCAweDc1NmEzZmEwLAorCTB4Nzg0NzdlZmEsIDB4NTVlOWE3MzEsIDB4ZGFmODk4ZTYsIDB4MzVlNjhhNjAsIDB4NWYzZmE0NGIsIDB4ZmIxODgyZWIsCisJMHhhZDc0ZDM5MywgMHg5OWU0OGIzOSwgMHg2MWI1OTZlOSwgMHhhZTI2MjlmZCwgMHg2YTJkM2U5NywgMHhkYjFjNTE3NywKKwkweGJkOTFmMzhhLCAweDkzYjEzZTQ0LCAweDM2ODdiN2ZjLCAweDNiZWVjOTU4LCAweDQ3YWUwZTljLCAweDQ4MWNkNzU1LAorCTB4ODc3YTA5YjcsIDB4YmIyNmFkZWEsIDB4YzI5MzkxZGEsIDB4MmUzMWI1ZWIsIDB4MDlmZmVmODYsIDB4YWY2NDdkYWYsCisJMHgzZTAyOGViOCwgMHgwOWY3N2Y1NiwgMHgwNThkZjViYywgMHhmNzI5N2ZlNiwgMHg5NGM5OWMyMywgMHgxOTkyMTVlZiwKKwkweGNlMzQxY2Y5LCAweGJkYWE2YTFmLCAweDg3OTc2YjE0LCAweDdmMTM3M2VlLCAweDFmN2YwYTRhLCAweDEzNWUzODcyLAorCTB4NzE3NWNkZDcsIDB4YWE2OTNkOWMsIDB4MTMxMDVkNmEsIDB4ZTVjNzEzODcsIDB4YzM5OWI4ZDAsIDB4Y2ViMzAwNzIsCisJMHg2OTcwMDFjZSwgMHhmZWZjMzI0ZiwgMHg3NzY5NTljMiwgMHhkZTVkZmU5MSwgMHhjZDg3ZTQ0OSwgMHg1MWUxMThjNCwKKwkweDgxZjI5MzUzLCAweGQ5NWNiM2UzLCAweDJlNGRlM2MzLCAweDU1NGY1YjA3LCAweGViOTIwZTdjLCAweGFkMzkzOTdmLAorCTB4NjcyNjVlYTgsIDB4ZWM4ZDZjMzQsIDB4MDU3ZjY4NzgsIDB4OWIzYjUyNmEsIDB4OTFkZWY4MmUsIDB4YzRmN2FmMWYsCisJMHgzOGM0ZDM3MSwgMHg1NmU3YTRjNSwgMHg2NTg3OWYxMSwgMHhkYWZkMzc2NiwgMHgzMWJmZDMwMCwgMHg5ZDcyM2ZhZSwKKwkweGVkN2MzZmViLCAweDc5ZDkwZjJlLCAweGNmODY1YWZlLCAweDVjNTk3ZjRmLCAweGJiY2NjNzI2LCAweDg1Mzk1OWNlLAorCTB4MTJlNzkzZjYsIDB4NWNmNDUwNzgsIDB4MmJhNDdiZTIsIDB4NzMzZjFmN2UsIDB4NjJiODY3N2EsIDB4NGM2MDFmY2UsCisJMHgwNGUxMmRkNiwgMHgxNmUwN2Q0NCwgMHg4M2ViMGVmMSwgMHhiNTdjNjY0OSwgMHhlNGRjNTIxZiwgMHgxZTQ0M2JkZiwKKwkweGMzMmYwNjZjLCAweDM1YjgyYTQ5LCAweGUwN2FmNzU2LCAweDdmNzBmM2Q3LCAweGIwNGM0NzJkLCAweDFkM2I0OTEzLAorCTB4ZjM2MjhjNzIsIDB4MDRkOGIwNzksIDB4OGEzMjZjYmIsIDB4NGIxNThmMDgsIDB4MzIzMjEyYmQsIDB4OWFlMjVmZWMsCisJMHhjODZkOGRmNiwgMHg2NWQwMjFlZiwgMHhkN2M3M2Y1ZSwgMHgzYzkxZTBjMSwgMHhmYmZkNmM1MiwgMHhkNWFkY2Q1YSwKKwkweDVhZjljZmJmLCAweGViMTNjZWM4LCAweGQzMTEzOWRmLCAweDE2ZTMzNTdhLCAweDk2ZDdlMGVhLCAweDFmODNhZDI1LAorCTB4NTNkN2M1NzQsIDB4YzYzNGJiMGYsIDB4YzcxMjcwNWMsIDB4MTI5MjMwNjEsIDB4MzAyOGU3ZTAsIDB4ODQ1YzcwODMsCisJMHhlZGZhODRlMSwgMHhhNTU1YmMzOSwgMHgyNzU2NDliZSwgMHhmNGQ3MzNjNiwgMHg0MThjNzZhNywgMHhlNWNmMWIzYiwKKwkweGZkMGI3NDQwLCAweDhkZjNjYTNiLCAweGI1ZmFiYWExLCAweDQ0ZmYyY2M5LCAweDdhYjMyNDdmLCAweDQ5NzgyMWQyLAorCTB4ZTYzOTVmZDAsIDB4NzExOGJjNDksIDB4OTFlNWQ1YzcsIDB4YzlkYTVmZTMsIDB4YjRiYmI2ZmYsIDB4MDY3ZTkyZGYsCisJMHg3OTQwY2E0ZSwgMHg1NTFjY2Q5YywgMHhlYmVjNDk5ZCwgMHg5OGIzZTUyMCwgMHhlMmU0YmM4ZiwgMHg5MjFhZDY3ZSwKKwkweGRmNWMwMTNjLCAweGUyODA3OWFhLCAweDk4ZTFjZGJjLCAweDU5ZDhjNzJlLCAweDg1Yzc4Yjk1LCAweGYyMTdlM2ZhLAorCTB4YWYyM2NjNTQsIDB4OTdiNGRlOWEsIDB4NWQ3NWZjZTIsIDB4Y2M3NGVjMDcsIDB4ZWRmZTdiNTMsIDB4YjQxNDc0NTksCisJMHg0ZWRiZWNjOCwgMHhiNGE5ZmI3NiwgMHhmOTRhYzhhNywgMHg1NGMwOGVlMSwgMHg1MjMwNGY5MiwgMHg3NzcxNDE5MCwKKwkweDczNzQxOThhLCAweGY4ZmM4ZGQ5LCAweDUwYTZlMzc3LCAweDMzYmIwZDg2LCAweDNjMjUzYjU5LCAweGE3ZTUxMzYzLAorCTB4MmZkZjA4ZmUsIDB4MGJhMGExYWQsIDB4OGM0OTBlMmMsIDB4YjhiNTBiZWUsIDB4YmZmZjNlNjgsIDB4M2YyMjhmNzYsCisJMHg5ZjliM2ZiNSwgMHg0NWY4YmUyZiwgMHgwY2RmN2YwOSwgMHhhY2ZmMWE2NiwgMHgxZWYwMjljYiwgMHhkNDc5ZDEzMCwKKwkweGQ1OGU3MTdlLCAweGM2Y2M4NWY3LCAweDA5NGZlYjE5LCAweDg4MWQ5MDJkLCAweGViNDhkMjgzLCAweDE2NGU3NjUxLAorCTB4Y2E3Y2IwYjYsIDB4Nzk3MDAyZjYsIDB4YTNjZjMxODQsIDB4NGJjMzljZjMsIDB4YmY1MWUyODAsIDB4ZjYxMmRjMTMsCisJMHhiMDBjYTdiNywgMHhkYmEwNjdmYywgMHg5MTJmM2RhMiwgMHhlYzgxNWFkYywgMHg3NWU1NWRiZCwgMHhmNjAyMzE0YiwKKwkweDczZjBkYTQwLCAweGY4NWIzZDYzLCAweDQ0ZTY3NGE3LCAweGZjNTBmMGI4LCAweGUxNWI5OWIzLCAweDc5NThiNGI2LAorCTB4ODc3OTMzYTcsIDB4YTZjODBmMjksIDB4MzRhNjIyNzUsIDB4NzdkMWNmY2EsIDB4MWFmOGNmM2UsIDB4YmFkODEzZTYsCisJMHhjY2M1OWYwNiwgMHgwM2FiYjdjZiwgMHg2MmNmMWY5NywgMHgwNzA4Mzk3YywgMHg4NGY5YzBjNSwgMHhmYzhkNDRmMCwKKwkweDYxZTFjZDljLCAweDM0MzliMGZiLCAweGM4ZGQyZWI3LCAweDI2MmE3Zjk3LCAweDNmM2Y2ODYwLCAweDdiMjE4NjY4LAorCTB4YTdmNmZiMjYsIDB4YjQ1NmQzMGMsIDB4OGUwMmY2ODUsIDB4M2MzN2QwNmIsIDB4MGM3ZTY4YjUsIDB4NjJhNjhlNGQsCisJMHhhZWQzZmRmOCwgMHgxYjZkNGY4ZCwgMHg3NDhkY2VjMywgMHg4YTlmZjUxOSwgMHhmNjhiYmE2ZCwgMHhiZDBhZWRjOSwKKwkweDhjYmIyN2E3LCAweDcyOGRjMWNiLCAweGZlZjJiNTRhLCAweGYzODhmMWExLCAweGY4ZDNhMjM0LCAweDkxYzViNzM4LAorCTB4ZDk5ZjJjYmEsIDB4MThiZDkwMGIsIDB4YTViN2Q5ZjksIDB4NTAzYmU1YzgsIDB4ZjQzZmJkYjUsIDB4YmVlMjk0NjYsCisJMHgxZjQ3NGQ3YSwgMHg5ZjcxYzM2YiwgMHg0NTE2MGZhZCwgMHg3ZDUwZmVhOCwgMHg1ZjNlMTNlZiwgMHhkNzZhYmY3OSwKKwkweGVkYmJmMjE0LCAweGY5MDU3YjhhLCAweDIzZmVhODlmLCAweGE4YmYwNzk2LCAweGVjNjMzYjY4LCAweGU0MGNjNjBlLAorCTB4ZDcxMzdlMTAsIDB4ZmU2ZjlmZjEsIDB4ZmRiOWU1MTEsIDB4YWFjZDI0ODcsIDB4YzgxZGZmOTEsIDB4YzIxYmJlMjMsCisJMHhkN2U0YWIxZiwgMHg2NDNlODdmZCwgMHg5OTEzZWQ3OSwgMHg1ZWI0MmJiZSwgMHgyMTY5YTg0NSwgMHhiNDBlNzVjOSwKKwkweDJlZGY5MGI2LCAweDMwNDFmOTExLCAweGMxOTNmYjk3LCAweDM3Y2Y0NTMzLCAweDllYzFlOGM1LCAweDBlZGM3MTI5LAorCTB4OWM1MWM2ZjgsIDB4M2Q3YjBiMGEsIDB4YjYyN2Y1NGMsIDB4MmZlZTQ3NWQsIDB4NDRiYmY5YTQsIDB4ZDdiYzZjN2QsCisJMHg5MzQ3NDcwNCwgMHgzNWUxOWJkYywgMHg5ZGM1MGVkNiwgMHhlMTI5Nzk4MCwgMHhmNTljZTRhYywgMHg3OGNjNGYyMSwKKwkweGJmM2YyNjZiLCAweDAyZjU4YWI1LCAweDEzM2ZiZTk5LCAweDJlNDdiNWJmLCAweGU3ZGE3NmFhLCAweGQ1MWU2MGE1LAorCTB4OTNhYzQxOTUsIDB4YzhmYzQ5MWQsIDB4ZDgyNmZkOTAsIDB4YTAzY2RmOTMsIDB4MTVmZjc4ZDIsIDB4ZjUwNTdlNjAsCisJMHhmNTAzMmRiZCwgMHg2ODVjZmZiNywgMHhkZTdjN2FmMiwgMHhhMGM5M2E4NSwgMHhhZjNjZTE3YywgMHhlZjE0YmIxMywKKwkweDc0ZGYxYTY4LCAweGU0YTlmM2Y2LCAweGE4MjgwNmM3LCAweDc3OWY3ZmUxLCAweGI5MjM4ZWQ3LCAweDUzMmJmZTIxLAorCTB4ODAzYWNlYzgsIDB4NGVjMzM1ZjksIDB4ZjE0ZWM5NGIsIDB4N2ZjMjUyZmQsIDB4Y2NjNWQxMzksIDB4M2RhYmI3MmYsCisJMHg3NjVkOThjYiwgMHgxMmVjODA5OSwgMHgwMWVjY2ZmMSwgMHhiOGEwZWZmMSwgMHg3YjQwZWE1YywgMHg2NDRmZWY2MCwKKwkweDYzZGVkZTc2LCAweDE2N2NiMGYyLCAweDQ2MDRmYWZkLCAweDc0NGRkZTU3LCAweDA3MjJjZjdiLCAweGUyMTM3M2IzLAorCTB4MzVlYzhjYjksIDB4MTNjZDk0NzIsIDB4YTYzNGEwMDQsIDB4ZWM2ZjAyNWMsIDB4Y2I5NTQxMzksIDB4Zjg2Y2YwY2UsCisJMHg3ZWMyMmRjYiwgMHgwY2I0OTM4MywgMHg1NTIzZWUzNywgMHgyM2VjZTM5NiwgMHg1YTcyNWUyNiwgMHg3ZmM3ZDNjNCwKKwkweDllYTc5M2ZjLCAweGE3OGY0Zjk5LCAweDEwZTEzOGYzLCAweGNlOWI1MjcxLCAweDIyYTNmZWZjLCAweDNlYmUzNTU2LAorCTB4ZTUxYjU1NzcsIDB4YWNjOTZmZTUsIDB4YTczOGIwZmYsIDB4MWM5YzA4ODgsIDB4MTQxNGU3MTUsIDB4Y2ZkNDM0MzcsCisJMHg3NWZjZTI2YiwgMHhmNDFlZDIyNiwgMHg1YjNjYjNhMywgMHg1NTZlNTIxNiwgMHgxOGY1YjRiMSwgMHhjMWJkNzNiNSwKKwkweGNlMzI5NDg1LCAweDRjNzNkNzVmLCAweDQyNWU2NmUxLCAweGZhM2NlYmY4LCAweGY5MzMxMjhkLCAweGNlYmNmM2JkLAorCTB4ZTA3MmZjZWIsIDB4MGU1MTE3ODMsIDB4Zjk0NjFkOGYsIDB4Yjg1Mzg5MjcsIDB4Y2MzZjg2MWQsIDB4ZWU0MzQ2YjMsCisJMHg5MmZkZmQ4ZCwgMHhmOTdlNDdlMSwgMHhmYTQzYWEwZCwgMHgxYTYxZTUzYSwgMHgwMjAzNjNlMywgMHg5OTU1ZTg5YiwKKwkweDQ3NGE3OGJmLCAweGY0YzgzZWM2LCAweDc5NDRjOWFjLCAweDM1YmVkOWNhLCAweDljZWY5NDk5LCAweGNjODczMmZlLAorCTB4NDVjY2ViYjIsIDB4YWE3NzNmNTYsIDB4NGZjMjEyOWUsIDB4OWM5NjAxNjcsIDB4N2I3YTcwNDksIDB4NTFmNGMyYTYsCisJMHg2NzNmODk2ZSwgMHg4NGM3ZGEzMSwgMHhiMGU5MTQxZCwgMHhiMWY1NjI0YiwgMHhmZDUwMDhlYywgMHg1NDdiMjlkYywKKwkweDgwYWU4M2NjLCAweGY5MWU3NmJlLCAweGY4MWU3MTFiLCAweDBmMWY4ODA4LCAweDZjZmQ0MWZlLCAweDk0MjNlNDE0LAorCTB4ZGFkYzYwYjcsIDB4NzcxMjhjZjgsIDB4MmRlNDY3M2UsIDB4YjA3YmM2NzUsIDB4ZGFmODQ0YzUsIDB4MWZlMDk2MTQsCisJMHhjZmQ1MTY1MSwgMHhhM2FmOGZjNSwgMHhkOWU3MDViYywgMHg3YzczZGExYywgMHhlNmI1ZWEzNCwgMHhjYTdlODQ4NSwKKwkweDc5YjlkODViLCAweDc1YTNkNTkwLCAweGZlNWM0YTZkLCAweDM4YTY1OGYyLCAweDQyODQyYzBmLCAweDU3MTA1ZmNhLAorCTB4NjYyODRmY2MsIDB4MWM0MTYxMzgsIDB4NmRmNmM4NGYsIDB4NmZkZjNiMjAsIDB4ZmY0MmYyZTIsIDB4MDM3M2VjY2EsCisJMHhiNzlmMTVlMSwgMHgzNGJmNzI1NywgMHhjYzAyMTU3MCwgMHg4ZjA1ZjY3ZSwgMHhiOWRmOTFkOSwgMHg1YTZlZjk2ZCwKKwkweGY3OTlhZTYzLCAweGYzZTUwZGNmLCAweDQwNzMwZDdiLCAweGE5MGE4ZDVlLCAweGIzMTZmOGYwLCAweDljZjc1YWZjLAorCTB4NTRiOTQ1YzksIDB4MGUwOTdmMGIsIDB4NTliNWZlN2UsIDB4ZTQ1YWJlZWMsIDB4NGEwMzliNzcsIDB4MmZjZWZjZDIsCisJMHg0MDgxY2RjNiwgMHg2OWJiYWQwYiwgMHg0N2NlYzQ5ZiwgMHg4ZmM1Zjc2YiwgMHhkNTM5MGJmNywgMHg5YzdkM2VlZCwKKwkweDgzZWFmZDhlLCAweDRlNDJmZDA5LCAweGYzZmM1MGZlLCAweDc4NzI3YzAzLCAweDFlNTM5MGQ2LCAweGYzNzNiMWU0LAorCTB4Njc1NmI3MTMsIDB4N2NmMGE2N2QsIDB4OGYzMTZkZTMsIDB4MzgxNjFmZDEsIDB4OTA2ZGMwNmEsIDB4NzIwMmViN2UsCisJMHgyZDU0NzA4MCwgMHhmNzllNzZlOSwgMHhkYzdhZGE0MiwgMHgwNjAzMDZkZiwgMHhiOTQxZmUxYSwgMHhiNGU0MmMzYywKKwkweGVkODdlMDQxLCAweDdmYWZkZjFmLCAweGJkZDAwYTRlLCAweGM3NGZjM2QzLCAweDVlMDM1ZmYzLCAweGRmM2UzNDc1LAorCTB4OTUyZGY5ZDgsIDB4ZjExMmY1Y2UsIDB4YjBhNmRkNTYsIDB4Yzg0NmI3ZmMsIDB4MzU1ZjExMjcsIDB4NTU2OWY4NDMsCisJMHhlMjI1YmUyOSwgMHhkZDI3YzFhYiwgMHhiNzllN2Y4NCwgMHgzN2Y5NmZmZiwgMHhhNjIzNWNmNCwgMHhlYzIyNTVhOSwKKwkweDFmZjZhODljLCAweGRkYWViNzI0LCAweGZiNDM1ZjdjLCAweDRiZmJmYjExLCAweGQwZGU3NWY3LCAweGNjOTg2NGY3LAorCTB4ZjMzNGJkZjQsIDB4ZjhhNWViMTYsIDB4ZTU0M2JiN2MsIDB4ZTY2ODMzNzYsIDB4OWUwNmNhZTcsIDB4MmM1ZmRmMTIsCisJMHhiYjI1ZjVmMiwgMHgzNTdhZGU3OSwgMHhlNzRlY2Q3NCwgMHg4MzNkZmRjNCwgMHg2OWFkNjA3NiwgMHhhMjQ3YzUyOSwKKwkweGE1ZjhjN2M3LCAweDVkNzkzMjRmLCAweGEzZjczZGJkLCAweGJmM2U1MDFmLCAweDYzNzE0M2E0LCAweDYzNzUwN2E2LAorCTB4ZjFjNTJmMTUsIDB4ZTdhZmIxYmEsIDB4MmJhZDhmOGMsIDB4MWQyNWY4YzUsIDB4ZThkYjM0OGYsIDB4OTI5N2UyM2MsCisJMHgzZmIyY2M5YiwgMHg4OTQ3NzdmYywgMHhmNzI0ZGJkNiwgMHg3OGZmN2MwNCwgMHhlNjZmZTBjZiwgMHg1MzcyNWU5MSwKKwkweGZlN2NkMTY3LCAweGRhNGIzYmVlLCAweGZjZmUzZTkxLCAweGZkNmM3NzBjLCAweGY3YzVkYzc5LCAweGMyYWM2NGI3LAorCTB4YThlZjZhZTIsIDB4NDE1YTdmZDQsIDB4M2Q5ZTg1ZTcsIDB4NWY3YmJlY2MsIDB4ZmIyNTU5N2QsIDB4MjA5NzZmZWYsCisJMHg5ZTNhMTcxNywgMHgxZDI1ZWM3YiwgMHhmMDdiZGRlNSwgMHhmYWM5NGFiNCwgMHg2YWQzY2VjMiwgMHg4NWYyNmJmNCwKKwkweDQ1OGU1OGFiLCAweGFiNmE3OWQ4LCAweGI3OGY3NTRhLCAweDk0NmFmN2ViLCAweDNlMTdhN2YyLCAweDM1NTRlNzY0LAorCTB4M2U1M2U3OTQsIDB4ZDAxYzljZjYsIDB4YmFjNzlmZjAsIDB4NGYwOTUxNWYsIDB4OGMxMjZkMGQsIDB4NTdlZDhmYzgsCisJMHg0MWY5M2Y1OCwgMHhlMzZlM2ZhMiwgMHg2OWMwZDRmZSwgMHg4MWE1YzA5NSwgMHg1NWI3MDM1MywgMHhkODZjZmZjMiwKKwkweDg2OTcxYzkxLCAweDllMDhkYTlmLCAweGJlNzBhM2VkLCAweGFiZDZkYTQ3LCAweGQyM2QwNzk0LCAweDEzN2UzZjFhLAorCTB4NjhkMzk5ZDUsIDB4YTZlNWM3M2MsIDB4OWJmZGYxZGQsIDB4MzNhOGYwODcsIDB4ZWZlODlkM2YsIDB4MWUwNGIyNGEsCisJMHhmMDk4YTE4YiwgMHgxYWE5MTgzOCwgMHg3ZmRjNDY2NywgMHgxYzY2YmE3ZSwgMHg3OTQ3YjkyNCwgMHgyMzc3YzQ1MywKKwkweGJlNGNkZWJlLCAweDJhNmJhMTdkLCAweDE4ZmY0NWM1LCAweGZlMTdkNTg1LCAweGM2YTFmZjMxLCAweDE2NjY2NWUyLAorCTB4ZjBlMmNiYzcsIDB4NTY5ZTk4MWYsIDB4YTIyYzhmODQsIDB4YWY4MjU2ZjUsIDB4MzJiY2U0OGUsIDB4N2NhMGVhOWMsCisJMHhkYjk0NDU3OSwgMHgyNWIwYjJmMSwgMHgzZjg4OTAxMCwgMHgyYjg3OGIxMywgMHg3MDhkYjgyMSwgMHhjMmQ4N2ZkMCwKKwkweDk1NWYyOWNmLCAweGMyMDRkZTU4LCAweDcyMTI2ZGJmLCAweGJjZTQyNGRmLCAweGQxYjFlYjA5LCAweGE4ODNkZGY0LAorCTB4ZGQ0NDFiYzcsIDB4OWVkMjc5YmQsIDB4MzQwMjU0ZTMsIDB4OTNiYWZlODgsIDB4ZTcyNGVjYzcsIDB4Y2ZmZGMwNjUsCisJMHgzZmY3MjBiMiwgMHg3ODhjZmU4NiwgMHgxOGY3Njg5MiwgMHhmZDI0MWVhOSwgMHg0MDJkODZkNywgMHgxNzJjMzNkZiwKKwkweDFiNzk2N2ZlLCAweDQ2ZTkxZmZhLCAweDMyM2ZkMDNmLCAweGVmNDdlMTk1LCAweGM2Mjc3Y2UyLCAweGY4Y2U4NmNmLAorCTB4NzhiMjBiZjEsIDB4ZjIyODNhM2UsIDB4NzEyY2FhZTAsIDB4YjZmNDIwM2UsIDB4NGI1MjAwNjIsIDB4OWE2NWJlNzEsCisJMHhiN2IwMGVlYywgMHhmZWI0Y2M3YSwgMHg0Nzg4YTk4OSwgMHg1Njg0ZmY5YywgMHhhMjRiZTE5OCwgMHg4ZGZkYTM0ZiwKKwkweDdhMGRlZmM4LCAweGUxOGI5ZDE1LCAweDM1YTNhMGY4LCAweDdmN2ViNjJkLCAweGViZDc4YjJiLCAweDlkNjQ3MzM1LAorCTB4ZWY1MzEwZjQsIDB4NGZjYjJhYWMsIDB4Mzc3Y2VmNWEsIDB4MzFiZmM3MGIsIDB4ZDNkM2MzNjYsIDB4Y2YxZGViNjMsCisJMHhlM2MyMjI5ZSwgMHhiYzdmNzNmNywgMHhmMTU3YmU4MiwgMHhkMmZmNzFiNywgMHg2NmYzODE1NywgMHgyYzBlZmU1MCwKKwkweDU5YjdmNjFmLCAweGY4OTc1NDAyLCAweDM3NTQ0ZjExLCAweDkwYmMyMTJjLCAweDNiYTU4NmJkLCAweDJmNTgyZjA5LAorCTB4YWZmMzQ5M2MsIDB4ZGMzYjJiYTYsIDB4YzYxMGVhZmYsIDB4ZjU3ZTljNjksIDB4ZmMzMDNmYTIsIDB4ZjdjZjFjOWQsCisJMHg5MTFiNzI4ZCwgMHhlYTMwN2VhYywgMHg3ODJmODY4NiwgMHg2ZjNjNmE3ZSwgMHhmZDU5NDczMCwgMHgxODk2MTBkMCwKKwkweDVlOGYzYjdlLCAweDdlNDdjYmNmLCAweDk4ZmZiYmZiLCAweDUwZGIxZWI3LCAweDlkYjM4ZjE2LCAweGY0OGJjMTk1LAorCTB4ZWRlN2M5MWQsIDB4ZTg3OWE0ZDYsIDB4YjY5NzFmOTAsIDB4NTA2OTdiMzEsIDB4M2YyYzM5YTIsIDB4ZTBmOTg0MzksCisJMHhkZTM3YWM2YywgMHgxYmQ1OTRmZSwgMHgwZjZkNDc5ZCwgMHhjYWI0M2NiMSwgMHgzNWYxY2UzNywgMHg2NjgyNmE3YSwKKwkweGMzMzZjZjk2LCAweDllNTJkNjM2LCAweDZkZmY5YjEzLCAweDUyZWZmMDcyLCAweDQ4Mzg4YTM2LCAweGViODgxM2Y0LAorCTB4ZjZmNjM4OGQsIDB4ODNmZDFiYjIsIDB4MDVlYTZmZTEsIDB4YmU4MzM3YWUsIDB4YTM3NDllN2QsIDB4NzYxN2E4OWYsCisJMHg2N2JhNWI1MywgMHg4OTY4YTUzYiwgMHhiMGJkNTA3OSwgMHg1OWZjY2MyNywgMHg4M2NjNGJkYywgMHg2YmMwNGFkZSwKKwkweDJjMjlkYmQzLCAweDI5M2ZlZGNmLCAweDE4NGNlODNiLCAweDUxZjNmYmU1LCAweDdlNjFlZjk0LCAweDFjZTQ5MDVmLAorCTB4Y2Y4MTUzZjQsIDB4ZDlmZjcxNWUsIDB4ZjkzMzIxNTQsIDB4ZDZmMGU2OTksIDB4OGU1MDliYzgsIDB4YTdmZDM3MGMsCisJMHgyNzU0MDJkMywgMHhhNTdlMWM5NCwgMHhiYjUwNzA4MCwgMHhkYWM1YzcwZiwgMHhjN2QxZWExZiwgMHhmMDBhMGZiZSwKKwkweDJhNjBhNTczLCAweGZhMzFkM2JiLCAweDY1N2UxZmY3LCAweGU5YWRlMTMyLCAweGI4OGIyZmVkLCAweGE5MTdhZTdlLAorCTB4Y2ZlNzM3NTksIDB4ZDc4OTI1NjgsIDB4ZDc4OTI2YmYsIDB4YThlNjVkYmYsIDB4ZmYyZWVhOWQsIDB4ODgxYmQ5MjEsCisJMHhlZmExYWJkMSwgMHhjMDhlMDQwZiwgMHg4YmZjZWJjYywgMHg5YmEzMWE1OSwgMHhhNjFmMWNjMiwgMHhmYWUyZGU2ZSwKKwkweDhmMzlmOTZiLCAweGExYmZkNmMyLCAweGYzNzExMmJmLCAweDg4MGVmMTM1LCAweDVmODBjNDJmLCAweGYzZjg2MDE5LAorCTB4N2UzMTM2OWYsIDB4NzMwN2E3ZmMsIDB4NGViZWUzNjIsIDB4ZmYyMDhlZjMsIDB4Y2MwNzU0ZDcsIDB4ZjkwMmE0OWYsCisJMHgzYTY3ZjQ1ZCwgMHhkZmNiY2JkNSwgMHhlYTdjYjFiMywgMHgxNWFlYzE3OCwgMHhjODE1N2ZjYywgMHhiMWViZmU0MCwKKwkweGM2MjY2YmI3LCAweDU5OGQ4YmM2LCAweDI1NGMzZjMyLCAweDE2NTJlNDM5LCAweDVmNWYwY2YzLCAweGQ2MTlhMWM4LAorCTB4OGUwMjczODgsIDB4YjkzMzhmZTcsIDB4ZWFmYWMxNWYsIDB4ODljZjY0Y2YsIDB4ZTZhZGQ1ZjUsIDB4MTZkZDRkYzUsCisJMHhmZjY0NzNhMCwgMHhjZWZiMGIwNSwgMHg0ZGVlZjNlNCwgMHgyZjg3N2VhYywgMHhkZmM5MTM3YywgMHg4ZDM3Y2Y4MCwKKwkweDZmMGVjN2RhLCAweDNmY2Y0ODlhLCAweDFhNzliYzNmLCAweDlhOTRmNzNiLCAweDRlOTllMmUzLCAweGJlNTJlNWZjLAorCTB4YzM0NzM2NzQsIDB4YjNlZWZhZmUsIDB4ZmFiOGJiZWMsIDB4NGZmMTg1NmUsIDB4Y2IzYzZjNzQsIDB4ZWZlN2U2YzgsCisJMHhlYzZjNDdmZCwgMHgwMjgyNDM3YywgMHgxZjE4MDM4ZSwgMHhlNzVkNmYzNywgMHhhOGJmMmNlYiwgMHg1ODllYzkwYiwKKwkweDhkZWYxODNjLCAweGIxNzFlNmNiLCAweDIwZTA1YjMwLCAweDllOTg3OTI4LCAweDE3NWI3ODNiLCAweDUzZjE5OTdhLAorCTB4MWU5OTA0YWIsIDB4ZGUxNGRhOWIsIDB4Y2M1YmNlZGYsIDB4M2ExZjE5M2IsIDB4YmZlMjc0YjgsIDB4ZjliZmNlODMsCisJMHhlNzNiMDhiZCwgMHgzZWNjOTFjMCwgMHgwNzE1MjcwNiwgMHg2YmZkMjI3NiwgMHgxZDcyODQ3YSwgMHgzZjgwOTgwYywKKwkweGU0ZmJiMGI3LCAweDE5ODUxMzk2LCAweDEzYzFmYjg0LCAweDhiMjU2NzJmLCAweDNkZDI2ZjFiLCAweDU0ZTU0MjBhLAorCTB4MTI0M2FmM2UsIDB4ZjM2NTJmZmIsIDB4ZTc1Mzg3ZjMsIDB4YjUzYjNmYjksIDB4OTkzMTM3YzAsIDB4OTJhMWQzNWYsCisJMHg5MDkyZTlkNywgMHgzNGIyYTc3NywgMHg0NWRjN2RkOSwgMHgzMWJlZGYzMSwgMHg0ZmRhMjlmYSwgMHhkZDhkODc2ZiwKKwkweGY5M2FmNWM3LCAweDAzYzJlYTc5LCAweDE0OTljZDI3LCAweDk5YTUzYjdmLCAweDI3NmE0NzE0LCAweGJlODhiYmJkLAorCTB4OWNiYTQwMDMsIDB4ZTQ2ZDVhZmMsIDB4YWM3N2JiMTAsIDB4ZWM1OGViNmYsIDB4NDc0N2MyNDksIDB4MzJkZmM3MzYsCisJMHhlNjdkZjkzNSwgMHgzYmZmNDRiNywgMHg3NTE2Y2VlMCwgMHhhZTEzMmVkNCwgMHhjNTBhY2VmNywgMHgxZGU1OTNiMSwKKwkweGU4OTFiNDllLCAweDdlMTJlZjg3LCAweDBhOTVlZWY4LCAweDAxZGU1M2NiLCAweDE2ZjdlMTRkLCAweDk1NjE3ZWZjLAorCTB4MDk3N2IzZjAsIDB4MjJhYWJjZmYsIDB4NTdiZTNmYjksIDB4MzlmYWIzY2MsIDB4MTdlZTkyNzgsIDB4YzdlMjdiNTYsCisJMHhiZGYyMmJkZCwgMHhmMzYxZTAzNSwgMHhhMTM0YmRkZiwgMHhmNzdkZTQ1ZiwgMHhjMWYyMTM3YSwgMHg4Yjg3ZTE2YywKKwkweDcwZmM4OGEwLCAweGU5MDNlMzEwLCAweGM2ZDhiMWJkLCAweDI5ZjJlY2UyLCAweDA5ZTY5MjEzLCAweGQyZmZkMWM3LAorCTB4YzQyNzAzZjcsIDB4ZmU4NjA0NzcsIDB4NjVkZjhhOWIsIDB4OTFkNGViZjEsIDB4OTkzOTJmZjMsIDB4NDE0MWI2ZmYsCisJMHhlMWIxZmI5MiwgMHhmZGQ4NjVmOCwgMHhlMmVmNWMzZCwgMHhjMWRlYTFiZSwgMHg3ZmY0MzQ3OSwgMHhkOGEzMmIxNSwKKwkweGZmNDMyZDczLCAweDdmNzM2NzRmLCAweGI2Y2ZiYjU5LCAweGIwYmVmNjI1LCAweGEzOGNlODNlLCAweDViOTFhMWZkLAorCTB4ZmJmOGM1MmUsIDB4OGM3MzgxNWEsIDB4NzNkOGU2MDEsIDB4ZGY2NDE3OTAsIDB4ZjRkOWQ5ZDMsIDB4Y2IyZjZiM2QsCisJMHgyYzA3NzFhZiwgMHhmMmJlZTE3ZSwgMHgyY2YyYmVjNCwgMHhlYWU5NzEzMSwgMHg3MTQ5ZjVjOCwgMHg5NzNmYmMzYywKKwkweDE2N2ZmZGNlLCAweDViMTQ4ZjZiLCAweDA3ZDVmZDk4LCAweDZiZGQwMGE1LCAweDNkYjg0N2Q1LCAweGIxMjNkZmQ2LAorCTB4Y2VhMmMyNzMsIDB4ODU3YmVjMjMsIDB4YjcyNDhiYjUsIDB4MzNiMWJiODcsIDB4YTM4MTlmYzQsIDB4Y2YxZTU2NTUsCisJMHhjOTBjYmMwZCwgMHhmYTg4ZTA0YiwgMHgyNWRmYmUyOSwgMHg5ZTIyN2JlMiwgMHg2MmNmNDIyNiwgMHg4ZjNlZmY5YSwKKwkweGVjZWZhNmU0LCAweDc1YTM4YTZlLCAweDMwYTc1ZmQzLCAweDIxMWMzMzc0LCAweDliZjIxNTJlLCAweDI0ZmE3ODg5LAorCTB4ZjI0OWQ3ZGIsIDB4ZWQ3MWZhYzMsIDB4NTRmZjljMTQsIDB4ODQ3OWM3ZjEsIDB4ZDg5Yjg2OWYsIDB4MWQ4NTZmZDEsCisJMHg0ZmQzNGJlZCwgMHgzYmFmZmM1MSwgMHgwZmQ1ZWUyMCwgMHgyNGEyODcxNCwgMHhmMmMwMTM5NywgMHhjZjY3NWVjMCwKKwkweDFmOWU0NmY2LCAweGZhZjU3YmIzLCAweDBmN2Q4ZDg4LCAweDc1NGUxZjU4LCAweDZjZWU4OGRiLCAweDc1NGM5OTRhLAorCTB4YTc3NjU4NjQsIDB4ZjNhMmJkMjIsIDB4ZGZhYTIyZjQsIDB4ZWZmMzk0NTcsIDB4MDFkNDFhM2MsIDB4M2FiNjg3OTYsCisJMHhiZjg5Mjc3ZCwgMHhiOGE2ZWU5NSwgMHhjZjgzNzRmYiwgMHhkMTNkZTE5YiwgMHhlMTI0NWRjZiwgMHhmY2Y1ZmY2NCwKKwkweDk3MjE0NWNmLCAweDcyZDc5M2M2LCAweDlkN2UxMzI2LCAweDUzNjVkZmJlLCAweDQ1ZmQ3OTNjLCAweGZjZjZhZTk1LAorCTB4OWM1OTVmOTMsIDB4OGQzOGQxYTksIDB4NzZkOTViOGQsIDB4ZTMxZDFiNjQsIDB4Y2Y0ZmZjMWEsIDB4NGVmZTMwNzYsCisJMHgyYzMxODEyOSwgMHhiNWJkMmNiZiwgMHgwZTlhNGJlZiwgMHhmMjk1MzFiZCwgMHgyNzIzYmVlOSwgMHgzODMxYWFhNywKKwkweDdmNDQ2ZGVmLCAweDRkN2Y0NDlkLCAweDZiZjYxMjYwLCAweGFkMjRhZDY2LCAweGI3MGVmOTExLCAweGIxZjc3ZjY3LAorCTB4ZTg1ZjNhMWMsIDB4YTUyZTNiMjUsIDB4ZTI5ZGFjZjYsIDB4M2JjNzdkNjQsIDB4Nzc5NDA5ZjYsIDB4OThkNmYxNzQsCisJMHg2NjU4NmFlZiwgMHgyZDFjYzBlMywgMHg5NjNkMzdiYSwgMHg3ZjE5MjdiZiwgMHgxZTdjODM1NywgMHhkZGQxNjg4MCwKKwkweDViZmI2MjUzLCAweDQwZmRhZmZlLCAweDAzZjMwZTdhLCAweDYwM2YzOGQxLCAweDdiYWIwOWM4LCAweDg3OTlkNTlkLAorCTB4OWU5ZWVjMmQsIDB4YmY2MjViZWUsIDB4ZTFjZTJhY2YsIDB4MTYzNjY5N2UsIDB4NzNhZjY0M2QsIDB4OTBiOTllZTgsCisJMHgzYzMzMzM1MiwgMHgyMjE5YjQ0MCwgMHgwN2RkMTc2NiwgMHhkZGZlNjQ0NywgMHhlN2U2MThkYSwgMHg2N2Y1ODk2NywKKwkweGU4NDcyMzliLCAweGUyMzljZGJiLCAweGY0MmU3MjdlLCAweGMzYjc3MWIwLCAweGUwM2Q2YjAwLCAweDA5NWI1MzMwLAorCTB4NTg1NmQ2NmUsIDB4NmNhOWNiMjMsIDB4NjUwNjBkMmYsIDB4YzcyNDdmZDIsIDB4ZTU2Y2JjZWMsIDB4NGM5MGYyYmYsCisJMHgzMzcyYzNkZiwgMHgxZTQzNjVjMywgMHhmMTYzZGQzMiwgMHhmNzEyZmZlZiwgMHhmMWMzOTk1MywgMHhmZGMzZGIzOCwKKwkweGY0MTZhNTBmLCAweDA0MDU2NmRkLCAweDZkZjlmZGQ5LCAweGU4ZjcxNTEwLCAweDBmMzFmN2M5LCAweDM3YmEzN2ViLAorCTB4OTlkMzBkYmIsIDB4MDA4ZjI2MTQsIDB4ZjY5ZjNmMWIsIDB4NGZkYjI3MjMsIDB4MzM1MzM5NzQsIDB4N2YxMDcyMmMsCisJMHhmNGM3MjQ1MiwgMHhlZmFkZWE1NSwgMHhkODA3M2ZhMywgMHgwMzBkZjZiYywgMHgwZjk3OGY3ZCwgMHhjM2JhM2JkZiwKKwkweGRmNDdiYzZmLCAweDBmMWU0YTk5LCAweDZkZDUwZWZiLCAweDFkNTA4YjRkLCAweDFkZThkYTgzLCAweGU4MDU2M2YyLAorCTB4NTZhYTczMzcsIDB4ZmUxY2NjZTYsIDB4YzA3YzFmOWUsIDB4ZmM0OGNmYmUsIDB4N2JiNjlmOWUsIDB4YmJmODY3MjUsCisJMHhkMjdiZTMyZiwgMHg5YTM1ODE3ZCwgMHgyZWIxZjEwOSwgMHgxMTk2ZWFjYiwgMHhiY2Q2NjUxZiwgMHg2NTdiZWMxOSwKKwkweGUxMjU2ZmE3LCAweDM2ZDQ4MmVhLCAweDBlNjI0ZDgxLCAweGE4Nzk2NGNjLCAweDc4MmE1NWMwLCAweDkyZmY2ODJhLAorCTB4MDI3ZGY4YzcsIDB4YzVkMTc4NjAsIDB4MDM5ZWI3ZjksIDB4NTIzOGY3ZWMsIDB4MmJmN2ZjMmQsIDB4YWQwZTIxNzYsCisJMHg4ZDdlODYyZSwgMHgyNzg1OGZiZSwgMHhlZjk0NmExNiwgMHhkZDVhNzc2ZSwgMHg4ODU5Y2Y5NCwgMHg3ZTYxZDRkZiwKKwkweDNiZmNhYzViLCAweDVlNmIxNjhhLCAweGYxYjhmYzgwLCAweDNjYTI1ODVkLCAweDNkMTY1MDViLCAweDU2ZGQwZWNjLAorCTB4ZmMyNzJmOTYsIDB4YzU5YjQ3ZmUsIDB4Y2Y5MjJkZjcsIDB4NDcyYmQzYjcsIDB4ZjI1YzFlNTAsIDB4MmNiOWY5YWIsCisJMHhjYzc5NDcyZiwgMHhiYTYxZTQzNywgMHg3MDI4ZjdmMSwgMHhmZGExZGZmZiwgMHg4MmZlZmUyNywgMHgwNDU0NmZiMSwKKwkweGM4NDM4ZjAzLCAweDgzODM5MGQzLCAweGM3NzE0NGY0LCAweGY0MzI3YTgzLCAweDlmMmMzMDVjLCAweDBlNWMyOTVkLAorCTB4NTI0MTdkMGEsIDB4YzhkNWRlYzgsIDB4NmZmNzEzNWUsIDB4MDFiZmVmZWMsIDB4OGYxYTNlYzMsIDB4MDAwMDM0MzAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgeHNlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDI3N2JmZjAwLCAweGEzZjBjMGNkLCAweGE1ZmQ4MTFlLCAweDc5YmExODE4LAorCTB4ODk2OGM1NTAsIDB4MzAzMjcxMzcsIDB4MzAzMTcwYjAsIDB4MDY3MTAyNjgsIDB4MjAzNmRlZDAsIDB4MTdjNDBlZGQsCisJMHgxMDIyZjg4MCwgMHgzMDMzNzE5YiwgMHgxMTcxMDIxNCwgMHhmMjAzMmYxMCwgMHg1NmRjZDA5MywgMHg1MGMwYzRjMSwKKwkweDQwMzVjNDA1LCAweDNhYzQwNzVjLCAweGJhMGMwYzhjLCAweDFmZGJjNDhjLCAweGYwYzBjNDJmLCAweGQ3YzEwYzQyLAorCTB4NDg2MDY3MTAsIDB4ZmY5ZmE0OTEsIDB4NTRlZTFiMDcsIDB4YzI3ZGFmYTEsIDB4ODYwYzBjYWEsIDB4NDY2MmE4YmEsCisJMHg1ZDYzN2M2OCwgMHhhMDk4NjZmYywgMHhmMWEyOWJjOSwgMHgxN2U4ZjBjZCwgMHg4N2U1NDBiNCwgMHhlM2YyYTIxOSwKKwkweDc2MTgxOThjLCAweDM3MDlhOTIyLCAweDc0MTZlZmM0LCAweGY3YTgwMmZjLCAweDAwMDMxMDI1LCAweDIyMDM3YmViLAorCTB4MDAwMDAzNjgKK307CisKK3N0YXRpYyBjb25zdCB1MzIgeHNlbV9wcmFtX2RhdGFfZTFoW10gPSB7CisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTU0N2MwOSwgMHg3M2I5ZjhiOSwgMHhjOTk5ZGVlNywKKwkweGFjODQ5OTJjLCAweDVkODZmMTJjLCAweDQ4NDA5YzA0LCAweDU4NzZjNDQzLCAweDA2MjJiNGE0LCAweDMwYTIwYTk3LAorCTB4OTAzN2Q5NmMsIDB4ZmY2OWYwZmEsIDB4YTVhYjA4MTksIDB4NjhkMDZhMWEsIDB4NjgzMDRlYzEsIDB4MWEwNzQxYjAsCisJMHgwMWMwNDgzMCwgMHg2YTJiZTJkNCwgMHg2ZDhhZDNlYywgMHgyYzM0ODBjNSwgMHgwZGM0NjQ4NiwgMHgzZmYyZDNkZSwKKwkweGNkY2U3N2RmLCAweDExMzM3YmRjLCAweGJmZmJmYjZjLCAweDRmMTY5ZmU1LCAweGI3ZmIzZGNlLCAweGU3N2NlZjlkLAorCTB4OTJjYzVmM2IsIDB4NDA3ZTEyNDAsIDB4YTFmODY1YzgsIDB4MjExMzE4ZTksIDB4NWQyNDVjNjQsIDB4ODhmZGZkNmMsCisJMHhlNTIyN2Q1MywgMHhhY2M4OTU3ZiwgMHg0NjVhNDhlMCwgMHg0NmRiZTQyYSwgMHhiMjEzYmU0NSwgMHhiMTZmZWIxMiwKKwkweDU4OTM0NmI5LCAweGM0MDJkMzQ4LCAweDkzZGYzZjQ1LCAweDg0NTkyMjY4LCAweGY4MjZlN2RjLCAweDliY2UyNWIzLAorCTB4MTIxMjY0MjYsIDB4NmY3MTY4ZGUsIDB4MjVkZmE3NGQsIDB4ZDAyNDI1YzUsIDB4YjcyMGZkNzQsIDB4NGE3NjgwNWYsCisJMHhlYmMzZTQxMiwgMHg5YTU2ZjcyNSwgMHgxNjVmNWYyNywgMHhjYWQ5YmRhMSwgMHgyN2U4MTNkYSwgMHhmODdjOTA4OSwKKwkweGQyMjExMDdkLCAweGU4Zjg5MTQ1LCAweDAyNGJhNGZjLCAweDMyMjQ1YmE2LCAweDRmY2U5NzJmLCAweDI2NDZkZjcyLAorCTB4NzNmMzIyM2EsIDB4OTM5MmU0MjcsIDB4OTk0ZWZiZjQsIDB4NTJlZmQzOTYsIDB4MzdkNWFlNDIsIDB4MmQ3ZTUyMzIsCisJMHhlNGZlNzAxMSwgMHg1ZmVjNGFlYiwgMHhmYmI1NmYxZCwgMHhkNzE3YWIzNiwgMHhkZmI1MTdlYiwgMHg1YzE3ZGNiYiwKKwkweGNiNzU3ZGYwLCAweDJkMGZkOGVkLCAweGMzOTY3NWMxLCAweDllNWExNGZjLCAweGE2MjY1MjcwLCAweDM4MTFmZjQ4LAorCTB4MzUxYzcwMDUsIDB4NzFkMGI0YWYsIDB4ZjA4ODQ3YmYsIDB4ODRlZDM3Y2EsIDB4Yjc2YWJiYWUsIDB4NWMyODU4YTQsCisJMHg0Mjk2ZWYyNiwgMHhkMmY5YTAzZiwgMHg3OTAwMjEzYSwgMHgyMTFiMDFkMywgMHg5YjlkNmUxNCwgMHg5NGU0M2U1OSwKKwkweDdjZmY1MGJkLCAweDJlZDNjZDNkLCAweDhmYWQyZGNhLCAweGRkNzAwMGRjLCAweDM4YWQ5MjJkLCAweGU2MDlhZTRjLAorCTB4YWRjMmFlZGIsIDB4NmNmM2U1OTksIDB4Nzc1YTViMmMsIDB4MmZiNDJlNzAsIDB4MWIxMGI2NjgsIDB4NmY3NGFmZWQsCisJMHg2ODFiOGNmZSwgMHg0NDg4ZmYzZSwgMHhiNmU5NGFhMCwgMHg5YTVmNzIxNSwgMHg0MTA4MGMyZiwgMHgyMjRkNzdjOCwKKwkweDhmN2ZiZTM4LCAweGViNDZkODE4LCAweDkzNWFiOTc3LCAweDNjNzBhNGVlLCAweGNhMjU2OTU3LCAweDY3NmYzYTMwLAorCTB4MTQxZGQyNmIsIDB4OWQ4MTQ1MGUsIDB4NTE1ZGExNTMsIDB4MTIwMWUwYTMsIDB4ZGI3YmJjOWEsIDB4NWRiNGE5ZWIsCisJMHg2M2MxNzZlOSwgMHg2ZTI5NzBhMSwgMHgzODY1MTNiMCwgMHhmYTY1YzM5YiwgMHgwYzQ5YmRhZiwgMHgyZjk2ODBmZCwKKwkweGU5MjRlYmE1LCAweGE5ZWFkNzgwLCAweDM3ZjE4NDQ0LCAweDAyMzM4YWNhLCAweGMzOTU3M2E3LCAweGU0ODk2Mjg5LAorCTB4NzFkM2I3NGIsIDB4MTdiMmJiNjgsIDB4YjEyYzBmMDQsIDB4NDA3YzQ0Y2MsIDB4NmQ3YjlkOTcsIDB4YzA3MTllYjMsCisJMHg0M2M4NTZmYSwgMHhiNWFlYjA5ZCwgMHgwZmNiZDQzMiwgMHg1MzYzZGZjYywgMHhmMjc1N2U2MCwgMHhiNDVlNWE1NCwKKwkweGQzY2U0ZWI5LCAweGUxYjhiZmUwLCAweDM1NThhMjNhLCAweDk0MWRhYWYzLCAweDYzMGZhNWFjLCAweDg5OTI4ZTdhLAorCTB4ODQ0NTNlNzYsIDB4MjAwZTgzNzgsIDB4NTMzYzgwODMsIDB4ODU3ZDE3YzMsIDB4NzE3N2M0MzgsIDB4OWZlYmE4ODMsCisJMHg0NDkwOTI0MiwgMHhlOGY3ZGZmYSwgMHhmZTVlMTRhZiwgMHhhYjg0NGVmZCwgMHg5Y2E1Yjc4YSwgMHg1ZGJjNTQ4ZSwKKwkweGNjNDNmY2UwLCAweGZmNmQyY2UxLCAweGUwMDhmYTZhLCAweGJhYTdjZTgxLCAweDJmZTk4ZGQyLCAweGFkMzA1MzJiLAorCTB4M2YxMDU0YTksIDB4NjhmYzAzOGYsIDB4ZGJjZjgxYmEsIDB4MzQ0YzgxMzUsIDB4NWU1ZDcxZDMsIDB4OGIzNjA2ZTIsCisJMHgyODlkZWU5ZiwgMHgyZTdjN2NkMSwgMHhlM2RkMjdjYiwgMHg1OTZmOTQxMywgMHgyZTNlOWFiZiwgMHg0ZjAzZTZmOSwKKwkweGJkNTMyMjZlLCAweDk3OWE1NGU2LCAweDg3ODg0YjdkLCAweGQ1YmU2ZjhlLCAweDIxM2M2NTNiLCAweGEzZGYxMmFmLAorCTB4ZTRkMTdlYjAsIDB4MTJiYzAwMmIsIDB4YTVjOTRjMTIsIDB4NTAyMzU5NzgsIDB4YjVlMTQyMzksIDB4ZTE0OTE2MTYsCisJMHhkMjk1MjZiMCwgMHhlM2QzYzUzMywgMHgyMzNkNjZmNywgMHgwOWFkN2MwYSwgMHhmNjdiY2Y5MCwgMHhhN2VjNzRlMSwKKwkweDY5OTFmYjE2LCAweGRjYWU4MzNmLCAweDZjZGNkMjRmLCAweDczNDkzZjVkLCAweGVhN2VkNDBiLCAweGFiOTg5ZmIwLAorCTB4YjlmMWU3ZWIsIDB4Y2NmOWZhMzksIDB4NzlmYjUyMmQsIDB4YWU4OWVhMWUsIDB4ZDI1NzViYWIsIDB4ZjlmYTA5YmMsCisJMHg3ZWMxMmJjYywgMHgxMGYxZWY5MiwgMHhhYTJmYWQxZiwgMHhiZDVhNDNmNCwgMHgzNDc3MmQyMiwgMHg5ODc5OGRjNiwKKwkweGQyNjhlOTY4LCAweDQ5Y2ZlODFlLCAweDQ3NGI0YWI5LCAweDNhMzFkOWIxLCAweGM2ZjM4YTdlLCAweGE2N2RmMmViLAorCTB4NGZkNWQ1ZjUsIDB4MmJhODFkY2MsIDB4YzIzNTllNGYsIDB4NzcwZTk3NDAsIDB4MGYzYzc1ZmIsIDB4OTE1OTcyOTMsCisJMHgzMmJlZTVlZiwgMHg3ZDg5OWRjYSwgMHhmYmZmMzhhZCwgMHhlZTUwM2FmYiwgMHgxYmUzOWZkYywgMHg4NmYzYTZlNiwKKwkweGZmOGExMmI5LCAweGY1ZGY2NWZiLCAweDQzNzQyOGVlLCAweDE0OTAyNWQ3LCAweGE0MTMxNTQ4LCAweDEyYjVmMmM2LAorCTB4N2VhNGRiODMsIDB4NDEzZDBmNWYsIDB4YzI5Yjk3ZGIsIDB4ZmU2OGUzNDMsIDB4OGZmMTMwODgsIDB4ODBiZmVlYjAsCisJMHg4Yjc4YTUzMCwgMHhkNDA1NDkxMSwgMHg5NDEwYjE4YiwgMHhiM2QzNmI3ZiwgMHhlMDZiZjE5ZSwgMHhhNTAwNmViYSwKKwkweGVmZDIyMTE3LCAweDAyOTdjOTNhLCAweGFmZTZkOGY0LCAweGFlN2QwM2YwLCAweDYwNTMyMDE5LCAweDU0ODI3MjEyLAorCTB4Njk4M2ZjODQsIDB4Mjk3OTAxZmIsIDB4NGM4YjdmMDAsIDB4N2M3Njg3ZTUsIDB4MTIzZjhlOTksIDB4ZjE4NzZmYzcsCisJMHhkZjE5N2EzYiwgMHgzNzViMzAzMiwgMHg0MGFkMzViZSwgMHhhNjU1YmUzNywgMHgwOGZlNTNlMywgMHhmMWYzOTdmYiwKKwkweDA4NzJmYzI5LCAweGM3MmM5NGY5LCAweDA1NjkyZGYxLCAweDk5NWFmZTM4LCAweDhmYzZlODE0LCAweDRiZmYxZWU5LAorCTB4MTg2YmY3MTgsIDB4ZmFjYTMxM2YsIDB4ZDdlOGU2MDcsIDB4NWZhNDU2OWYsIDB4NGZkNmNjYmYsIDB4ZjhmOWY4NTYsCisJMHg0MTdlYjgzMSwgMHhhN2Y1YjNmMCwgMHg1YmY1YjExNSwgMHhlM2RkYmY1OCwgMHgyZmUxYmFiYiwgMHg4NzVjNzQwYiwKKwkweDA3ZmFjYmQwLCAweGZmYWZkMDRkLCAweGZhZmQxMjlhLCAweGY3N2M2YzJkLCAweDdjN2M3NThhLCAweDI3MWY4ZTA3LAorCTB4YmZlYjYzYWMsIDB4OTdjNzA0YTYsIDB4ZDAwZjNlMmQsIDB4YTYyZmRjOTEsIDB4NjlmYjAwMjIsIDB4Yzk0MGNhN2YsCisJMHg5OGJkMDMyOCwgMHg4NDI3OGYwZSwgMHg5M2RmOTNjYSwgMHhmYjg3MDg4MSwgMHg3ZGRkMTg2MywgMHhjZGU5NDMxOSwKKwkweDI0YTc5MTExLCAweGVlOTAzOTQwLCAweGE2OWM2NWMzLCAweGNhMjcxYjhiLCAweGUzZjY3ZjZjLCAweDRmOThiZWJlLAorCTB4ODhiMzUxNzUsIDB4MmM2YTRkNzQsIDB4YmU3NDIxODEsIDB4MWZhMmNkOWQsIDB4NmU2YThiZjIsIDB4OWZiODg4MGMsCisJMHg5ODgyM2QzMiwgMHhmZmJlMDg0OSwgMHhhZGE4ZDM3NSwgMHhkMzE5NzVkYSwgMHg3YjUyZDVjNSwgMHhiYWFmODY5YiwKKwkweDMyMjRmYmU1LCAweGFmY2U4MmJjLCAweDVjNjA4ODAyLCAweGU1NGVkZjI0LCAweGY4NzJhMTM0LCAweDkwYzc5NTI0LAorCTB4NWU5ODk2OWUsIDB4NzFjYThhNzIsIDB4MzdjYjRjMzIsIDB4ZTI1ZTk4MmIsIDB4YTcwZWVmMjcsIDB4OWYwOWZmZjMsCisJMHhjMTk5YmI3ZiwgMHgxMDk5N2RiYiwgMHhiOTdmZjgwMCwgMHhmMjBjODk3MSwgMHg5ZGI1NzE2YywgMHg4ZjMyM2QwMiwKKwkweGYwYTc4ZTcyLCAweGY1MDA0YjVlLCAweDAwMWRiYTI5LCAweDU2NDJlZTdjLCAweDAzYzNlNDI0LCAweDUwMmViY2I3LAorCTB4YjZiZjJkM2QsIDB4M2RkZGFlOGYsIDB4ODUzYWIwMjQsIDB4NjFiODVmZDYsIDB4NWQzNzAwZmUsIDB4OTY1OTljZmYsCisJMHg0ZmVjMjIzMSwgMHg4NGNmZGJjNCwgMHg5OWZhNGM3YywgMHhkNTk5MDliMiwgMHg0N2VhNTFiNCwgMHg5MmNkNzczMywKKwkweGRhNjliNjRlLCAweGYzZTlmNmNmLCAweGY5ZjQwYTczLCAweDk5MjAyOTRlLCAweDE0Mjk5ZjQwLCAweGY3ZWQxZDQ4LAorCTB4Yjk3ZDBhZGUsIDB4MjEzNGNlM2EsIDB4OGY5NWUxOWUsIDB4ODMwYTEzZjcsIDB4NWVlOWZhNTQsIDB4NjdjMGM3NDgsCisJMHhhZTc1ZTIzNywgMHhlNzU1YjU5YiwgMHg0NGEwZmU1MywgMHhiNzFmYjg0MiwgMHg3ZmM0MTIyNSwgMHhiOWYzZDYyMiwKKwkweGYzOGRiYWQ5LCAweGJkNTkyYjlkLCAweDczM2U3NGI5LCAweDllMTExMDFmLCAweDFkYjdmOWM2LCAweGEzNGQ3YmIwLAorCTB4OTlmYjVhNjksIDB4NWM2ODI0MDQsIDB4ZjNmZTcxOGYsIDB4ZTNkNzFiOTYsIDB4OTg3ZjYxOTYsIDB4Njc3ZTM3ZWYsCisJMHhhN2E0NjI3NCwgMHg4Zjg5ZTZmMiwgMHg1M2QwZDI5ZCwgMHg4ZjQ3ZjA2OSwgMHgyYmI0ZDI5ZCwgMHhjYmE5OTg2ZSwKKwkweGViNjYwNjE3LCAweGNlZDdlN2VhLCAweGFlMmY5NWQ3LCAweDJmOTVkNDJlLCAweDk3NDRiNzVjLCAweDQwN2ZlZjlmLAorCTB4ZjJkZTdmNTcsIDB4N2JmMmJhMTUsIDB4Y2FlYmQ2MmIsIDB4ZDQ2YzE0ZTcsIDB4OWVmYjY3ZTUsIDB4NmJiZmQ1ZDQsCisJMHg1Y2FlOWQ1NiwgMHg0ZDc4NTAzOCwgMHhkZjU1Y2ExYiwgMHhiN2EwYTkzNSwgMHg0MDIxNjA3ZSwgMHhhYmJkMmE4ZiwKKwkweGVhODY3MGZjLCAweGEzOWU5MDJkLCAweDJiYTQwYjdhLCAweGZmMjk0ZjgwLCAweGI0YjJmNjliLCAweDZiZmNlYjdjLAorCTB4ZmViZDFhZGMsIDB4MDY5MTU0YjQsIDB4N2JhNDY0ZmMsIDB4ZjQ4ZDNjMjMsIDB4NDVmYTdmNGQsIDB4YjRkNDg3ZGIsCisJMHgyMGI5MjA0NCwgMHg3ZWY4YmFlNywgMHg1ZWJmN2VhZSwgMHg2NDdhNzEzMCwgMHg3ZTEyOWRlNywgMHg5NWQ5Mjg5ZSwKKwkweDNiY2UwOTNhLCAweDY4Njg3MjI1LCAweDdlZjdhMzg1LCAweDc1YzA1MDQ5LCAweDEzZDJkMDEwLCAweDVhOTQ2ZjAxLAorCTB4NmUyYjcwMzUsIDB4Njc5YmE0MTgsIDB4YzcxMTQxYzcsIDB4YTVkZTAzMmYsIDB4ZTQ4MzJmZjIsIDB4MGYyMDBiMzYsCisJMHg2ZWQzODc0MiwgMHhmMWYzMDUxZiwgMHg0Y2Y5MDVlZSwgMHhmZjcxMTM5YSwgMHhmNjljYThlZCwgMHhlMDA5MjlkOCwKKwkweDk5ZTk4Yjk3LCAweGI2OTg1OWNhLCAweDNkMzBmYTU3LCAweGU5ODA1OTU1LCAweDRjMGFjYWM5LCAweDYzOTcyYWRiLAorCTB4OGZkMmJjN2EsIDB4ZDcyYTVmZTksIDB4Y2FhN2ZhNjEsIDB4NTU4ZjRjNmEsIDB4YzdmYTYyZDYsIDB4OWRhNjAwY2EsCisJMHg1NTRjNWU5NSwgMHg5Mzk2ZWRiYSwgMHhlNTZmNWNiOSwgMHg4MWZhMGJlNywgMHgyZDdjYWRlOSwgMHgxNWJkZmQyMiwKKwkweDAyOTNkMWY5LCAweGYxYzE3OGZjLCAweGNiZDA1MGU1LCAweDQ4YTMxYzJmLCAweDVlMWRlZjRlLCAweDE1ZTg3YTQ2LAorCTB4N2E4YmM0YWUsIDB4ZTI4MDVlNDUsIDB4NzJjZjRmYjksIDB4OTNjMzBjNWIsIDB4MTFhNjQ0Y2QsIDB4MGZkNjM3MmEsCisJMHg2MGIzZDY3OSwgMHgyNGNkZTYyNCwgMHgzYzA3ZGExZSwgMHhmYTUxOWQzMywgMHhlMDE0N2JhNSwgMHgyMjc4NGFlYiwKKwkweDM4NjhmMGRlLCAweGY1M2ZiNzBmLCAweGVmZDA1OTlmLCAweGI2NDBjMmY1LCAweDcxMTYxZTVmLCAweDY3YTEyNGJmLAorCTB4ZWZhZjgwM2MsIDB4OTVlMTM3MGEsIDB4NmY4MGQzMGYsIDB4ZjBhYTI3Y2UsIDB4MzQyMzRkNmIsIDB4YjFiODIyNWQsCisJMHgxNjRkMGJmZiwgMHhiNjM4MDY2MiwgMHg4NDcwMDNkOCwgMHgxOWU0NzBiZCwgMHg0Yjc3ZWMxNywgMHg1M2VhYzQ1MywKKwkweDU3ODc3YjYzLCAweGRhYmQzMDY5LCAweDc5NGY1OWExLCAweGExN2YzZWIzLCAweGNlYzY5ODVhLCAweDFkZWM0YWY5LAorCTB4ZGNhZTgwYTMsIDB4MDA4NmE3ZDUsIDB4NTUzMDUzZmUsIDB4MjI5YTU5ZmIsIDB4YjllYTM4ZTMsIDB4MjFjNjM0OTYsCisJMHgyMTczZDI5ZCwgMHhjZjY3ZmJkNiwgMHgyMjdlYjdhMywgMHgxZjIyNjhmMywgMHhiYjAxZDg1MywgMHhlNTc0MWU1YywKKwkweDdjMGY0YmYzLCAweDczOTczZjliLCAweGQyMmQ0ZjAxLCAweGM3OWZiMDk3LCAweDA3OTc3ZmQwLCAweGNjNjZiZjQyLAorCTB4MDc5NmZkYWIsIDB4N2FlNWJmNDUsIDB4MWJhOGRlZjgsIDB4ZDQ1M2I2OGYsIDB4ZWJiNDM3MzMsIDB4YTRjZDVlOWQsCisJMHgxNTI3NWQ1ZCwgMHhkZWRjMTk2ZCwgMHhhYjYwZGM1MiwgMHgzOGZkY2JkNiwgMHgzOWJjYmU1ZCwgMHgwZmI3NWFiNSwKKwkweGVmOTQyZmMwLCAweDA2NjA4MTQ5LCAweDU0ZTEyOWJhLCAweGFjNzY2NWQ0LCAweDFjZmNlODEzLCAweDJkZmIwNTI2LAorCTB4NTJiZDU4MTcsIDB4NTNlYzliNmIsIDB4NDE1YjBjOTAsIDB4YWQ5MDU4MGYsIDB4ZDc3MjlkZDIsIDB4M2U1Y2E5OWYsCisJMHgzYzg5N2JmYiwgMHhlZWRjZTUwYywgMHgyNTQ3ZjZhMiwgMHhmY2QxMzEzMCwgMHhkMDViOWU0MiwgMHhlNDFkM2M1NCwKKwkweDM3M2RkOWRkLCAweDg4YjBmZWEzLCAweDEwZTBiYWU0LCAweGIzYWE0MDUzLCAweDRmMzkwZjQwLCAweGVlODBkMzRjLAorCTB4YjgzZjkzY2YsIDB4MDNjZTZhYzYsIDB4Y2UzMjRjNzMsIDB4ZmQzYWUxNjcsIDB4MjdmNTQ4M2UsIDB4NTZiZjNlNWQsCisJMHhiNzIzY2Y5ZiwgMHhlNzlkMDEyNSwgMHgyMDI0NDhkNSwgMHhjYmVhM2YwMCwgMHg3ZTMxMzY2ZiwgMHg2YjE1MjdjOCwKKwkweGM1NTg3ZjYwLCAweGRjMGIxM2NmLCAweGYyOGZkY2M0LCAweDViNGJlOTdiLCAweDc5ZDNlNmIyLCAweGY5MzEzMDJjLAorCTB4MGJkZjllYWQsIDB4NTExZTk5ZTMsIDB4YzE5M2FjMTQsIDB4ZDM3MWYzOWUsIDB4NDBkYzlmZDgsIDB4MGQ2MDdkYTAsCisJMHhiYmZjMzFkOCwgMHhhNTM2Y2YwNSwgMHhlYmJlZmUyNywgMHg1NWYzOGRmYywgMHg3NjFlOGZmNywgMHhkMjhmM2UwNCwKKwkweDg4MWJjMTA2LCAweDk4NTQ4ZmIyLCAweGY4ZmZiZTA0LCAweGViMDk3ZTk5LCAweDFiOTllOGQ2LCAweDQzNWFmOTBjLAorCTB4ZmY5MGRlYmUsIDB4ODEyZGU5YmIsIDB4NjFjZGU4ZTgsIDB4MjUzMDZkZjIsIDB4ZmQwMmZhMzIsIDB4NjU4NzMwNGEsCisJMHg3ZmQyM2ZkZiwgMHg2YmZlOGY0YSwgMHhmN2ZkYTlmZiwgMHhlOTY3ZmRhNywgMHhhN2ZmYWZmYSwgMHhjN2I4M2ZmNiwKKwkweGZhZDE4M2ZjLCAweGM3Njk3ZDJmLCAweDM3OTUzZjFlLCAweDcyNmUyZjQ1LCAweDljZmZiYTExLCAweDc5Mjc1NzM1LAorCTB4YjY0YmZlMjgsIDB4ZTJmYjQ2YWQsIDB4MDVkZmIzMTksIDB4MjAzNjdjZjQsIDB4Mzk0NDBiNGUsIDB4NzEzNjlmNTcsCisJMHgzYWYxMjViYiwgMHhjMGY3MzgwNCwgMHg3M2ZmYjRhZiwgMHgwNjdjZmZjZiwgMHhkY2JlNWI5YywgMHgzY2YxYjkyNiwKKwkweDU5MDk2MGQzLCAweDM1OTY5ZjI4LCAweGEzMjc0ZTE1LCAweGU1ODI3ZjMxLCAweDQyMmE3ZWQ3LCAweDlmNGY1OWJlLAorCTB4NGE2ZGNmNDUsIDB4YTUxYmZiMDIsIDB4ODdlZmFlMTQsIDB4YWIyYTVmNTAsIDB4ZDg1NGViZmYsIDB4MTg0OWNhN2YsCisJMHgwZWQ4Y2NmOSwgMHg4ZjE4YmZjNiwgMHgxY2JlNzFmMiwgMHhjZTljYjNkYiwgMHg3MmYwZjUxMywgMHhhNmYyOTcwZSwKKwkweGJhMmE3ZjlmLCAweDY5ZDFmZDIwLCAweDM2OTMxN2I0LCAweGVkOGQ5M2Q0LCAweDczZmViODBhLCAweDY4NGNlNGNjLAorCTB4ZjkxZWFhYTcsIDB4YzgxZWY5MWUsIDB4MjQyZTE1NGQsIDB4ZjExZmY0YzAsIDB4ZTFhMzJkYTUsIDB4ZmY1MWRhZmMsCisJMHg4MWEwOTc3YiwgMHgxNzZmY2E5NywgMHhmZDdmMGI4MiwgMHg1Y2JiZDJiMiwgMHhiMWU3ZTRlZSwgMHhiNjAwYmI0OCwKKwkweGRlYjk5YTUzLCAweDEyZDJjMmQ2LCAweDdiMDJlNDI5LCAweGU0OWQ0OTY5LCAweDI1Y2ZkM2YxLCAweGY2Nzk5ZTNiLAorCTB4N2U0ZjM4MjksIDB4YTEwY2YxNjAsIDB4NzhlZjE3ZmQsIDB4MzQzOThmZWQsIDB4NGE1M2JjNWYsIDB4NDA0OWNlOTgsCisJMHhhN2UwOGE0OCwgMHgzZTViZmU5YywgMHhhMjhmODIyNiwgMHgyYjI2YmVkZiwgMHg4N2Y3ZDhhMywgMHgyOTc4MjNlMiwKKwkweDI2NTA3OWRlLCAweDYzYzI3YWEzLCAweGRjYTBmMDcyLCAweDlmODI4OGU2LCAweGEwYTk4OWUwLCAweDdkMmY4OTVmLAorCTB4Y2ZmZTAzMjMsIDB4NzI0ODEwMWUsIDB4ZDY3ODE0N2EsIDB4MDI3YTg2YmQsIDB4YzlmMTA5YzAsIDB4M2Y4ZGQ1ZjEsCisJMHg4YTcyZmQ0MywgMHg0NmViOTAxNywgMHhlZGViMTk3YywgMHhmYTA1ZjJlNSwgMHhhNTIxZmIwNSwgMHgwNjVlMTdlZiwKKwkweDJjOWZmMzNiLCAweGMxNDM4MDFlLCAweDYwYjlmNzBiLCAweDE1Y2RhNzNkLCAweGFjYjdjZThjLCAweGYxZDJmMjRlLAorCTB4OTI3ZjI0MGIsIDB4YmRmNjUzMWIsIDB4MjI5ZmU5ZTAsIDB4ZjNiZmU1ZmQsIDB4N2U3NjI0ZDMsIDB4NzA5YWE2ZjMsCisJMHhjMmE3ZjJhZiwgMHhiZTZmMTczYSwgMHg0Nzk5ZDcxMywgMHgwNTg3NDg3YywgMHg5MDVjYzQ1YiwgMHhjOTk4NWY5NywKKwkweGY4NTE5ZGI0LCAweGU0Yzg5ZTY0LCAweDE0YWRlOWU2LCAweGE3OWQ3NGI5LCAweDc2ODQzNmU5LCAweDgxODgzZmQ3LAorCTB4NThiZjY4NmQsIDB4ZmMxZTQwNDIsIDB4OTM5N2I1NTQsIDB4YzJmZjk4YTUsIDB4NGUzNWYwY2EsIDB4YWE3ZWY1NTQsCisJMHhiN2U5NjlmNSwgMHhlMDJiNmQ3ZSwgMHg2ZjAwZGNlOSwgMHhjYWJkZDgzMiwgMHhlMWNmZDk4OSwgMHhmZGE2NWMyMSwKKwkweDk0ZGNlZjhhLCAweDE0NDRmMGNjLCAweDQ3NmYxNjczLCAweGYwYzk4MmY1LCAweDRhYjdlYTFkLCAweDVkNjhkYjVlLAorCTB4M2QzOTcyM2IsIDB4M2UzMmZlMzIsIDB4MGM3NzlkM2UsIDB4OTNhN2U3ZWMsIDB4Y2EzMDQxNDgsIDB4YWE4ODM2ZmEsCisJMHhiYWZiYTAxYywgMHhmYzM0Y2U4NiwgMHg3ZWJmZjhjZSwgMHg5NTc3ZTMzZCwgMHhhNzMzMDNmZiwgMHhlZmU3Zjk0MSwKKwkweDc2ODIzZTMyLCAweDc5ZDI1ZmIwLCAweGZjYjE5Mjg1LCAweGNhMDIxZGUwLCAweDQ1MDkwYjA3LCAweDg5N2FmM2UzLAorCTB4ZGNiZWI5ZjMsIDB4ZmU3NDJmNDgsIDB4NDM1NjIxNjYsIDB4M2M0ZTMwMzcsIDB4NWVlZDAxZTIsIDB4YmRiNDM1NzksCisJMHhiOGMyYWU1NiwgMHhhYWZkOWVhZSwgMHhlNWNmOWM3YywgMHg5NTIyZGRjMSwgMHhlNDQ1ZDcwNywgMHhlNGNjZDkwMSwKKwkweDk3N2FlZjQwLCAweDIyNThmMTFmLCAweDBhN2Q5ZTA1LCAweGFiZjI5N2Y4LCAweDk1ZmUwMTVmLCAweDlmZmQ2MTcyLAorCTB4ZTNmZTFlMzQsIDB4M2U2Zjk0ZGQsIDB4YWI3Y2FhMDksIDB4YmU0NmFiOTcsIDB4MmUzNWQ4MmQsIDB4YjI3ZWRmMmEsCisJMHhkZjNhMjMyMSwgMHhmOTUxZWZkMiwgMHhkYmUzMDM3NiwgMHg1NTcyZDdmZiwgMHhhODk1NjM4NSwgMHg5Y2FhYWI5NywKKwkweDQ2OWUwZGVjLCAweDJhMjY5OTM5LCAweDljYTM1NzA4LCAweDkyZWYzZmE0LCAweGE4ZjQ5ZWFjLCAweDdmNGFhMWQyLAorCTB4YmQyOWJmNDUsIDB4Mzc1MWU0MDYsIDB4ZDg3NGFhOWQsIDB4MWQyYWE3NGQsIDB4ZTg5ZmIwZjYsIDB4YmYyYzY4ZTAsCisJMHhkMjgyNjgxOSwgMHhmN2RlZWU0YiwgMHg3OGEzZjZhNiwgMHhmNzYxNjkyZCwgMHhlYmRkYjQ1MCwgMHhmMmYwYTc5MCwKKwkweGFhNDczNmUyLCAweGEwOTdlZjVmLCAweGY5MGMwN2NkLCAweGQ3YmVhMWEwLCAweGQ0MzVjZjkwLCAweDE1ZjIxOWY3LAorCTB4NjYwMWZhODYsIDB4MmMzZTY4M2YsIDB4OTA4N2E0MTMsIDB4OTJiNGJlYWUsIDB4Yjc2MDlkZjgsIDB4ZGRhMjJmZGIsCisJMHg3OWNlOGJhZSwgMHhkNWRmNmQwZCwgMHg1M2YwMWU5OCwgMHhjNmRhYjBmOSwgMHg0NGUxOGZjZSwgMHhiM2M4MGQ3OSwKKwkweDE1ZDg3NzJlLCAweGQzMWI3OTBmLCAweGMzNzJiYjdiLCAweGZlOGQzOGFlLCAweDQ0NDVhMjc4LCAweDIwMTZkYzc5LAorCTB4OGNmNmI0ZDMsIDB4MjE1NDVmMDgsIDB4NmY0OGRhZmUsIDB4ZDkwZWNjZTUsIDB4NzdlZWMzMTUsIDB4NjkxZDEyNmYsCisJMHg1OWRjZTFjYiwgMHgxOTI4N2EyZCwgMHhlZTJiNDU5MCwgMHhiYTg5ODE3MiwgMHhhZGQwNjVhYiwgMHhjNWY3ZThiMywKKwkweDVhZWM4ODZmLCAweGE3MzVlZmM0LCAweDY3MGRjZTZhLCAweDA5ZjFmZjg4LCAweDZkOTdkYzAyLCAweDZjMmZmYzQwLAorCTB4NDU4OGU3NjEsIDB4NzNkM2EyMWIsIDB4ZTc5NzZmMTEsIDB4ZGM4MzI2NTgsIDB4NDlmZmZhYTQsIDB4ZWQ1NTlkYWQsCisJMHhlMWIzNjBhNywgMHg5Y2NkY2I3YiwgMHgzY2YxYWJlZSwgMHgyZmFmNTQ1NywgMHhkMGYzZjFmNywgMHg2NDdlNTU0OSwKKwkweDFmOTQwYzkwLCAweGYzODFkMDcwLCAweDM3YmI5NzM4LCAweDlkNmYyMzg5LCAweDc1ZDBmMTQ1LCAweDM3NDAyNDQ0LAorCTB4YzQ0NDVhMTcsIDB4NzY0Njg1YzMsIDB4ODlmYzQ5NWYsIDB4MjQ2NTNmYzgsIDB4ODU0ZWYyOGMsIDB4YzdmMDA3NTcsCisJMHg1MGU1ZGViMCwgMHhiMzBmZWVjNywgMHg0YTU1YTQxZSwgMHhmNDc5ZmNmNiwgMHhiMWRhNjhhZiwgMHhmYmExODNlNywKKwkweGZiZDJmZjIwLCAweDNkMjY3ZjY5LCAweDYwM2U0ZmViLCAweGQ3NmUzYjQzLCAweGJiZGUyNzAxLCAweDMzN2ZlZDc0LAorCTB4ZWZjODQxZWQsIDB4YmVmMDc4YjUsIDB4YTM1N2MwZjksIDB4NTZiYThlODEsIDB4OGU0MDBhNWEsIDB4Zjc2MDBkNzUsCisJMHhiZmZiNTVmNCwgMHhmYjg2ZGQxYSwgMHg5ZmM0MmFlNywgMHg1ZmNlY2NkMywgMHhmM2ZlNWExNywgMHg1ZmIzZGMzOCwKKwkweDAyYWJhMTY4LCAweDFkODBlMGZkLCAweDJmZTVlMWVkLCAweGQwOGVkMGRiLCAweDJjYWJmZmI1LCAweGI3OWZlMzlmLAorCTB4YmY3ZTMyOWUsIDB4YjMyNGU1ZDIsIDB4ZTJmY2MxNzYsIDB4N2NiYTVkOTgsIDB4NTY2N2Y4ZGYsIDB4ZDM3M2ZkYzAsCisJMHgyZDIxNzk0MSwgMHgzN2NhZmM5ZiwgMHg3NjNlNDFhMywgMHg0ZjdhNjJlZCwgMHgzNGY2ZDRhNywgMHhhY2E0MWZkYywKKwkweGEyNDJiNGJhLCAweGU2MDRlZTcwLCAweGY5NGY0YmU4LCAweGY5MjY3MmFiLCAweGNiODM0NjQ3LCAweGI5MWY2ODM3LAorCTB4ZmY1Yzc4NWEsIDB4MDIxZTA2M2YsIDB4YjQ5NjIzZGUsIDB4MDE1NjAzMzgsIDB4ZjhlOTdkZDYsIDB4MWMxZTQxOWYsCisJMHhhYTVkMjBiMCwgMHhiODI0ZmRlYiwgMHgyYjkxZjUwMiwgMHhhYzA2N2JhZCwgMHhkMzdmZjEzYiwgMHhkNWQwODViYSwKKwkweGJmZjRiYmFjLCAweGUzM2ZiZTM5LCAweDBmOTFhOGZiLCAweGZlZjlkMjdhLCAweGMzYmYzMWZiLCAweDVlZjljMWU5LAorCTB4ZTJmZmJkMjUsIDB4NzdkZTFiN2YsIDB4YWViYmJjNTEsIDB4ZmZjNmVlYmMsIDB4MWRlZWViZTYsIDB4ZTVjYzZmZWYsCisJMHhmZGMzNzc3OCwgMHhkZjJiZjk3YiwgMHhhYmJlZmNlMCwgMHgzZmZhM2I5YywgMHhiZWFhZmQ3NCwgMHhmMjkzM2JmZSwKKwkweDNmYWQwNjZlLCAweDQwM2I1NDhkLCAweGU5NTFmOGIxLCAweDY4MzIzN2ExLCAweDFmZmFlZmU5LCAweDRlZjk4MzhlLAorCTB4YzYzNWY3ZTIsIDB4NjY2MzdkZjksIDB4NzA0OWJlZTcsIDB4MjVjNzQzNmYsIDB4ZWYzZjAyNzEsIDB4M2Y1MjczYjEsCisJMHg1YmY0NWZhZSwgMHg0ODdhODc5NiwgMHg0MGJmZmViZiwgMHg5NTk4ODI3ZCwgMHhmYzBmYjgxYSwgMHgwZjQyZGE1ZCwKKwkweDMxOTAzNmZhLCAweDc3OTA3Y2M3LCAweGZhZjNjOGRmLCAweDA0YWZlMmYzLCAweGNhYWI4NWUyLCAweDFmMzc2OTdlLAorCTB4N2ZiNTNkMDEsIDB4NThmNTExN2YsIDB4ZmFmZWEyOWEsIDB4ZmIxYTZiYWEsIDB4Y2VlYjIyNWUsIDB4ZjQ1MjNmMzMsCisJMHgwOWE5OWJlNywgMHgxNGQwNzNmYSwgMHg4NDRkZGZkZSwgMHg4NzI2ZmZjZCwgMHgzODUwMDgxMCwgMHg1OGYwMWE0YywKKwkweDI3NDNkODAyLCAweDQwODg5MTBkLCAweDZmODk1M2YzLCAweGE2MWI5YzE1LCAweDdkZmRmNDM4LCAweGUzYzRmNzAwLAorCTB4YjdjYzcwMjIsIDB4N2YwMjJkZWUsIDB4YzA0N2FiM2UsIDB4OTg3NTg2ZmUsIDB4MzM1ODllNTAsIDB4ZTE4M2E0MDUsCisJMHhiZmNjNjZiNSwgMHgwMzhmNzI2MywgMHhlMWI4Y2YzOCwgMHgyMDFlNGZhNSwgMHhjYWY1NTc2MCwgMHg2NWNiYTE0YywKKwkweDJmYWZmMWY2LCAweDA1OTA5ZTVmLCAweDAzZjY2ZmU3LCAweDUwYjc3OGZlLCAweDY2ZDE3ZDdkLCAweGViYTE4YTEyLAorCTB4ZmUyNjZjNWQsIDB4OGJiMDc4ZDgsIDB4Y2VhNGU0MGEsIDB4YzNjZmFhMmUsIDB4MjI5M2Y3Y2YsIDB4N2VhOTVjZmQsCisJMHhjZmY4NzQ2ZiwgMHg3NGEyNWY0ZSwgMHgyMTA4NzI3ZiwgMHhmYmM1MjE3YiwgMHg1M2NmNjYyZSwgMHg2YmRmNTdjZiwKKwkweDNmMmFmMDYxLCAweGQ5MDMwMjRhLCAweGFiOThiOGJkLCAweDJjNWEzZmI5LCAweGU5N2JiYTMxLCAweGMyYzZiYjJmLAorCTB4ZDc2MjY2YjksIDB4OGZjNjU4YzgsIDB4OTA0ZmNjOTksIDB4ODgxNzk3ZWIsIDB4MDA3MWViMTIsIDB4YzU4YTBlM2YsCisJMHhhMjIzYjE3YiwgMHhkOWRmOWEzMywgMHhmYWRlN2U3NiwgMHhkMjk3ZGMwZCwgMHg1NDllYWJiNCwgMHg5M2Y3YTA4YiwKKwkweGZjZjlkYTMwLCAweDJkYjI1NmY1LCAweGFlNDI3ZjhhLCAweDM4MmRkYWE0LCAweDk4OGZlOGRlLCAweDM2N2FmNjA1LAorCTB4MzRkYTYyZmUsIDB4OGViNzhiNTYsIDB4YTNjZDY3ZTksIDB4N2UwMWUyN2IsIDB4MmJlZTZhNGUsIDB4YzJmODUxZmUsCisJMHhiYmUwMGVmOSwgMHgzNTM2ZDZkZCwgMHgyZWRmMGEzNywgMHg2MzNkOTg5MCwgMHg3ODRiYTFjNiwgMHg1MmQxMWViZSwKKwkweDFmM2UwMjY3LCAweGRkZDI2ZjUxLCAweDcxMmRkZGJiLCAweDE5MGM3ZGZkLCAweDcxOWFmMzAzLCAweDA0Y2NlNmM4LAorCTB4M2QxMTFjYmMsIDB4ZGU1N2VmZTAsIDB4OGJlY2E5ZjIsIDB4ODQ2NDZmNzIsIDB4ZjYwZmY0MjcsIDB4OGRjOTVhZDYsCisJMHg4MjkzZWVlMywgMHhmYmFlMDEwYiwgMHg5YzA5NWJjZSwgMHhkNWNhZjZiNywgMHhlOWU2ZDFjNSwgMHgyZTc5YjBiMCwKKwkweDQ2ZmJjMTI2LCAweDgzZjdmZmE3LCAweDQ3MmVjNGVmLCAweDU3OWMxMjY4LCAweDc1ZjIwOWVhLCAweDQ4MjNmYTRmLAorCTB4NDgxYTE3YzcsIDB4OWMzMWU0MDAsIDB4NWMyZTQwNmYsIDB4MWZiODI0NjgsIDB4MDJmYzkwNTAsIDB4ZGY5NDZiY2UsCisJMHhjNzNkYTA3ZiwgMHhmOWRlNmIwZiwgMHhjYTQ3ZDgxYiwgMHg5ODM3MDQ1YSwgMHg2ZGNjY2JhMCwgMHhjYWVkZDgzMiwKKwkweDkwNDRlMzliLCAweGVhOGExOWRiLCAweDc1MWVlOTBmLCAweDZhMmY4Njg3LCAweGViYzIzMzI1LCAweDM5YmVjZTcwLAorCTB4MWQ2N2VlMzAsIDB4Y2Q3ZDgxMzIsIDB4MDVkODZhZmIsIDB4OTZiM2ZmNzIsIDB4YmQwN2M4YjEsIDB4OTViN2ViYWQsCisJMHgwNDhhNjhhNCwgMHg2YmE0MTBmZCwgMHg2YzhjM2QyMywgMHg2ZmU1ZDE4YywgMHg4MTdkN2QxMCwgMHhkYTU4NjZiZiwKKwkweGUwYTI3OTk2LCAweDdjNjY0NzJmLCAweDJkZjJkNTdhLCAweDdjOTlmZmYwLCAweDZmOTU1NzdiLCAweGMzNTczMTNlLAorCTB4ZDE5OTI2NDcsIDB4MjViZTQ2YmQsIDB4NGI2ZjkzNDcsIDB4ZTAxOTI1MDUsIDB4YTBmZjc0YmUsIDB4ZDJlYmMwNjQsCisJMHg2OGM0YTQzNywgMHgyNTQ3NmRmMiwgMHg5MTdiMDdiYiwgMHgzNTc2YjFmYiwgMHhiZDc2Zjk1MSwgMHg1MTM1YmU0NiwKKwkweDRmYzUxNmY5LCAweGYxMzI0M2EwLCAweGYyMGFlZGZkLCAweGMzNWZmMDJkLCAweGJlNDAzYjdmLCAweGJlNjdhMzQ1LAorCTB4NmRmMmE4M2YsIDB4OTQwOWNiNzQsIDB4NGM5YmEzNmYsIDB4MmZjY2ZmM2EsIDB4ODRkZjI4YWYsIDB4OWY0MDNiYzQsCisJMHhlYzc5MjIzYSwgMHgwNzY3ZTg1MSwgMHhlNDVlZGZkNywgMHgwZTMwMzY3ZSwgMHhiMjcxYjljOCwgMHg1YWJmYzcxYiwKKwkweGI1NzI5NzM5LCAweDA4YmZlZTcyLCAweDViOWNhYWNlLCAweDlmYTA5YmJhLCAweDY0M2E0ZjZhLCAweDVlZTk2ZTcyLAorCTB4YTAwNGU3MmEsIDB4OTZlNzI2NDcsIDB4OGVjYzI3ZWUsIDB4YzM2ZjkwNjMsIDB4ODIzN2M4N2IsIDB4YWM0MmNiZjUsCisJMHhmYTczNzk3ZCwgMHhmZWQwZjcxMywgMHg4ZjI1NzhjNiwgMHgxMzFmZDY5NSwgMHhiNGUzNzc5MSwgMHg2YzljNmVmMiwKKwkweDkwZjczODQ2LCAweDRlYWU0Nzc3LCAweGYyZTZlZGRlLCAweDgxYjFjYThlLCAweGY0OGQ1ZjIwLCAweGZiZDE2OWUxLAorCTB4N2YxYmVlZmYsIDB4YzBiN2YxYmEsIDB4Nzg4YTZmMmYsIDB4ODk4ZWY1MGYsIDB4MzViYzE3ZGQsIDB4ZDAyNjc0ZmUsCisJMHhjOTk5MDZkNywgMHg3Yjk3MWY1ZiwgMHhlYzdlOTU5ZCwgMHg2Y2FiZjI3ZiwgMHhlYzhkYTU3ZCwgMHgxMzU5NDEzZCwKKwkweGVhY2IwZmQzLCAweDdmNDI4MGM1LCAweDA5NzM5YTlkLCAweGY3MGE5M2VmLCAweGU2OTkyNDBiLCAweDFmYWE1YTY3LAorCTB4ZmQzZTgwNzcsIDB4M2ViODQ0OWMsIDB4NDM0MzNkM2QsIDB4OGJiMjhiMGYsIDB4NjU1YmNlZDEsIDB4OTQyNTZkNzMsCisJMHg4OTk5MTc4ZiwgMHhjNWI5ZWMxNSwgMHg0MTY3YTk4ZSwgMHg2NmNlMmQ5ZiwgMHhmZTYyZGZmNiwgMHg1NDRiZjU1ZCwKKwkweGY3OGQzM2ZkLCAweDRiY2Q3OWU5LCAweDdhNDdlZjVlLCAweGIwY2ZhYmRlLCAweDc4Y2ViYzMwLCAweDFmODAwODQ2LAorCTB4ZjY3YmNmNjEsIDB4ZTI4NWNhMDAsIDB4MTVmN2ZkMDYsIDB4YzUzM2ZkN2MsIDB4NzkxNzg0MzYsIDB4OGI2Y2Y0NWIsCisJMHg4YzJiM2ZjMiwgMHhlMWMyM2E3MCwgMHg4M2EyZTE0NCwgMHgwYTg4NDA1MywgMHhlOWU5OGEyNywgMHhiODExNDkxOSwKKwkweGI2ZDliZTE0LCAweDg1YzBlYzA2LCAweDZmNzgwYTRmLCAweDBhYjc1YzY4LCAweDU1ZmFlMzM3LCAweGQxNzZhYTM4LAorCTB4N2U1ZmRlNjIsIDB4MzNiZTFkNGIsIDB4ODU0NWMyMzEsIDB4ZGQxZTExYjMsIDB4YTNjMDM3NzAsIDB4ZmZmNmU2NGEsCisJMHhmYzE2MzIwYywgMHhhMGRkMjg1OCwgMHg5YmZmZjE5YywgMHhiOTBmZmU4OCwgMHhkZWU4ODcxMywgMHhmMmU3YWM0MywKKwkweGM0ZjU2YzdmLCAweDNkZGQ3MGM5LCAweGUxODJmYzEzLCAweGM5NzZhZTNlLCAweDM3ZGZlMGViLCAweDA2MzI5OGVlLAorCTB4NzIxYmQzYjYsIDB4OTdiODNlMmMsIDB4YTMwYjZlZGIsIDB4ZjBlOTU0MWMsIDB4Y2Q4NzRlMjMsIDB4ZmFmYmJlMWMsCisJMHg3M2MyNGM1NiwgMHgwNmUwYjM2MSwgMHg2NDNjYTQzZCwgMHg1Mzk2Yjg0MywgMHgyYWQxYjQ3YSwgMHg3MmZjOWY4NywKKwkweDFiYWI4NzJhLCAweGYzMzRiYmRmLCAweGMxZTI4OWZkLCAweDc1MWZlNzA0LCAweGY3YjAwYWJmLCAweDE4NWI2MzMxLAorCTB4MTgxYmNhNWUsIDB4MTg0OTMyNWUsIDB4YjU2NWVmZWQsIDB4ZDc0NDI3ODIsIDB4MDRiY2Q2NTMsIDB4Zjk1NTgyZmQsCisJMHg1YTFjN2Y0YywgMHg1ZmExNDUzYywgMHgyNWZhMzQ3MywgMHg4YWNjOWM2MCwgMHhiY2M1OWJlYywgMHhmNTRiMGNkZSwKKwkweDNmOWVjMTFmLCAweDFkNDdmMjgzLCAweGRmZmQyMTkyLCAweDk1ZjdkMGI3LCAweGY4OGM0NWZjLCAweDZkYzM5MGZhLAorCTB4MDFkNWMwMDcsIDB4ZmQzMzBiZjAsIDB4ZGYwOTc0MmIsIDB4ZTVlNWE4Y2QsIDB4YWUwZWJmNjYsIDB4YzhiYTlmOTMsCisJMHhhMGJmNmZlOCwgMHgxYmE1MWQ4MCwgMHhiNGNmNDA2ZSwgMHgzNzBhOWM3YywgMHg0M2MwNjdhMCwgMHhmMjExN2NjYiwKKwkweDdkZGUxNDc5LCAweDE3YWU3YmQyLCAweDdjYjRjN2VlLCAweDA0ZmZiODVmLCAweGUwOGI3ZmViLCAweGZkZDY1MTIxLAorCTB4M2JmYmU5OWQsIDB4ZmM2Zjc1ZDIsIDB4YmU4MTkxZmUsIDB4OGY4NWIyZGYsIDB4ZGVmYTA1OGUsIDB4OTNkZjIwMmYsCisJMHgzZGZkMzg5NiwgMHg0ZGNlY2M5NywgMHgwZjk0NmRkYiwgMHgwZGU2MWVlMCwgMHhlOTU1YjNjOSwgMHgxY2MyMWYyOSwKKwkweDUwOWU3MGNlLCAweDZiOTI3NjM0LCAweDU3ZTAyMTYxLCAweGZmNDU2MGQ4LCAweDQwYzc5YzMwLCAweGU1NmFhZmE2LAorCTB4NDkxYjBlZjUsIDB4ZjdiMzIzYmMsIDB4ZjljNmZmZmUsIDB4NDk3ZDM3YWMsIDB4ZjE4MjhmY2QsIDB4ZDMzNjhlNDAsCisJMHhjNjQ3ODZmMSwgMHhhYTE3ZWUzMywgMHhlYjRhZTAxZCwgMHhiMWZlNWJiMiwgMHg3Y2UzYTk3NSwgMHg3Mjk5ZmY1NywKKwkweDI4Zjc4YWQyLCAweGMzOGQxZmFhLCAweGUwOTQyYmU0LCAweDMwNGQzYWZjLCAweGMyZDFmZGViLCAweDcwZmZjZjFjLAorCTB4MmRmY2IyZmYsIDB4YWIxNDkzZmQsIDB4NGRlMmZkZWUsIDB4MjlmODgzYTIsIDB4NGFmMzNlZGMsIDB4Y2I1NDJmYzgsCisJMHhlYzAyNmY3OCwgMHgzZWU4OTMxZiwgMHg4ZWNmOTM0OCwgMHgxZWZmN2I4ZSwgMHg1ZWYxMTcyYywgMHhmYjM3ZDZlNiwKKwkweGQ1YmRjMjk0LCAweDhhNjdjY2FkLCAweGEwMjE5YWRjLCAweDc0MGVmMGZlLCAweDcwZjQxZTM2LCAweGY4NWFmMTJiLAorCTB4ZmIzY2I0OTAsIDB4NzgwMTcxN2IsIDB4NWY1MTkwNjcsIDB4N2NhMTU5M2QsIDB4NTAyMWE2M2QsIDB4NzI2N2E5MDUsCisJMHhjMDJkZTEzOCwgMHgwMDkxNDRkNywgMHg3ZGJkNWFiZSwgMHg3YmZlYzMyNiwgMHgwNjQ5NWZkZiwgMHg5ZWE4Y2U5OCwKKwkweDM5OGNmZDgwLCAweDVlYTExMjQyLCAweDhmMTEzNzhlLCAweDNlOWJlMzMzLCAweDNhNzZmNzdmLCAweDQ1NDdmMWJmLAorCTB4Y2RlYjQyOGYsIDB4MDA3MGVjM2MsIDB4NmNkZjBkOWYsIDB4NWMwZDNlMjIsIDB4MGFhMDQ4NzIsIDB4NGZlMzQ3ZWMsCisJMHg3OTA3NmY3OSwgMHgxZWY1NDA1MCwgMHg2ODJmZjdmMCwgMHg0MTcyYWJhOSwgMHhlZDgwYjM3ZSwgMHhhOWJlZmRjYiwKKwkweDFkYmYzYTJlLCAweGJkNGU5ZmI1LCAweGFkMDJlNDBlLCAweDZmOTRkZDA3LCAweGViY2FmNTY2LCAweGIyYjgwZjA1LAorCTB4OTQ2Y2I1ZTYsIDB4MGJkNDZlNTEsIDB4NDc2Y2EwZjgsIDB4ZDY1NjIwNDAsIDB4ZmI0YWMwNmYsIDB4YjY5OWIxZGQsCisJMHg4YmZkODRjZiwgMHhlYjdlODdiNiwgMHg3NmY3N2QzZiwgMHg5ZTc0M2I5MCwgMHhkZDkxYmVkOCwgMHg3NmQxZTZjZiwKKwkweGZkNDlmMDBhLCAweDcwYWZlYzEyLCAweDVkZTA0MGIzLCAweGRiMjM0MTQyLCAweDRhOGUwYTlmLCAweDNhNmYyODFlLAorCTB4YmJlZTI0ZjgsIDB4YTk3OGU5ZDMsIDB4ODUxZmIwZTksIDB4OGVmYmUwYTYsIDB4ZGYxYjgyYjEsIDB4NDM0OTRkZDUsCisJMHgwYjA1ZDViOSwgMHgwMWQ2MDY4NiwgMHhlMDVjYmVlYywgMHg1MWZlN2U3OSwgMHgyZDM3YmZmNSwgMHhjZjM3N2ZjYywKKwkweDQzZWU0MmIzLCAweDNiMmI3OWZiLCAweGY0ODRkZDMxLCAweGZhMGNhOWY0LCAweDZmMGEyOWRhLCAweDNiZjc4NTFmLAorCTB4NzBlMTdmZGMsIDB4OWI3MmM3ZjYsIDB4NjczYzdmNjYsIDB4YmZmNDg0MTksIDB4ZmEyMjc5YTgsIDB4YjkyNjJkNGIsCisJMHg2MzNmYWY3OCwgMHhkZjNiZDMzYywgMHgwMDE2ZDFiZSwgMHg1MmRiZGRiYiwgMHgzZjdjM2ZiOCwgMHhiZjA1YTM3YywKKwkweDcyNjBlZTc3LCAweDFiNDA3M2I4LCAweDZmNGY2OWRhLCAweDQ3YmMwODk2LCAweGEyMmNkYWE4LCAweDI4ZGQzODljLAorCTB4YjhiNWZkZTEsIDB4OWRiOTQyNDUsIDB4MjFlOTgzYmYsIDB4N2ViMzM3ODcsIDB4ZmQzMDM3NGYsIDB4M2I5NmYyNmQsCisJMHg5YzNlYzJhNywgMHhlZmJkNGRiZiwgMHgzZDVhNzI2NiwgMHgwYmI5ZTY4NywgMHg1MTliZmI3NSwgMHhiODcyYWFjZSwKKwkweGEwYTNjMzk0LCAweDVmZWYwZWJhLCAweDU0Yjc3MjhkLCAweGYyMGQwZmRkLCAweDY1ZWUxNGI2LCAweDg0MzVmZWYxLAorCTB4MzQxYTU0N2MsIDB4OTgzOTEzZmEsIDB4MGQ3Mzg2M2MsIDB4MTJlODQzZDAsIDB4NTFkOTc3ZDIsIDB4NDZiOWMwODksCisJMHgyYTYzYjhmOCwgMHhlYzJjZTdhYywgMHg3YzdjYjRmNywgMHhmYjg1ZTA4YiwgMHg5NjYzODJmMCwgMHg4MWUzZWEwMCwKKwkweDE1ZmVmM2Y5LCAweDJjMGY5OWY2LCAweGJmYzA1MDQ0LCAweGNhODNlMjlkLCAweGY4NGI2Y2E5LCAweGVmZDE4ZjJmLAorCTB4ODJiMWRmNjcsIDB4OWZhNTA4YTcsIDB4ZDU3ZjA4ZjksIDB4MWI3MzM0MmYsIDB4N2NjOGYzZjMsIDB4ZGUwOTI2YTcsCisJMHg3ZDI5OTI3ZiwgMHhkN2U0MGU1MCwgMHg5MWE3YzQ4YSwgMHhlZjA1NjcxYiwgMHhmZGIzNzdlZCwgMHhmZmY1YWRjMSwKKwkweGYzYWI5NGNjLCAweDZmZWQ5ZjYwLCAweGQ5NTFmMjY1LCAweGRkZmJlMTI2LCAweDQ0N2NmY2MzLCAweGI3ZTgwYmNmLAorCTB4NjM3N2I4NTksIDB4ODdhMWFjOTIsIDB4OTMxYmZkYzIsIDB4NmIyMGU4YTgsIDB4MTU0NDdmYjgsIDB4Mjg1YmY3N2YsCisJMHgwZjBhNzFiMywgMHhjZDNhZWUwOCwgMHg2YTNmNmEzOCwgMHhkNjVlZjJiZiwgMHg5NjdlZDA2ZSwgMHgyMTdmZDZmNiwKKwkweGY5ZDcwZmNjLCAweGMzNzIwYzg1LCAweGYxOGY0ZmQ4LCAweGZiMjdlOTdiLCAweGMwZDYyZmRmLCAweGI3ZWNlZDNiLAorCTB4Y2U2ZTc0NDUsIDB4MjBmYTc4ZmUsIDB4OWE4MGJkZWQsIDB4NTkwYzdlYWEsIDB4NTc4ODlhZWYsIDB4YmZlY2JmMDMsCisJMHgwNmFmMTBjNCwgMHgyOGUzNGRkZiwgMHhkZGZjNTNmZiwgMHhiOWY0Y2NkMiwgMHhlNDI3NzFhNiwgMHhiYmNjNGNkMiwKKwkweGI4Y2JkZjgxLCAweDBhNmNiYTNkLCAweGNhNjllZmJiLCAweGYwMTU2Nzc4LCAweDAxNGNmNGZmLCAweDdkZjg4MWU5LAorCTB4ZDQwNDlmNzIsIDB4NGZmMDE0ZGYsIDB4ZWQ2NGNmY2UsIDB4ZTA3YjY5ZjMsIDB4MTkyN2E2Y2IsIDB4YTE3OTUyOWYsCisJMHhkYjI5M2M4MCwgMHhkNjJhNzFiYywgMHhlODE0MTdhZiwgMHgzZTZlYTliZiwgMHhkOTA1MjVlYSwgMHhmYWYyYzEyMiwKKwkweDE1MjdhODEzLCAweDAwNDg5ZjM0LCAweDViZmNhNjdlLCAweGQ5NDBmYTAzLCAweGM0MWI4YjA0LCAweDJhOTdjYWIxLAorCTB4ZmRjZGJmOWYsIDB4M2RkNTg5ODksIDB4Y2JmOGZjMGEsIDB4ZjBhMmE5ODAsIDB4NzA5NDc4YjcsIDB4NjVmMTk1YmQsCisJMHhkYmUzMzY3OSwgMHhiMDQ4NzdiNywgMHg3M2UxYWJjMiwgMHg4Zjk1NmJlNCwgMHhjY2UzZTA0NSwgMHhkZTFmMWYwOCwKKwkweGJlMDY1OTNjLCAweGQwMTAxZDNlLCAweGM4MzI2MmVmLCAweGVkZjNlMDAxLCAweDMxZWZiNzAyLCAweGY5NmFmNjNkLAorCTB4NjY3YTRhZmMsIDB4ZDg1ZmU1MjksIDB4NTczZTU1MmYsIDB4Y2ZjOGRhZjksIDB4M2JiNmU2YWQsIDB4ZGRmNzFlNjAsCisJMHg0Yzc1YzM2OCwgMHgzZmRlZmVmZSwgMHgxNWU0YzdkZSwgMHhmZTRkZDdkZSwgMHgyMDQ5MDNmZSwgMHhjY2NjZjMxZiwKKwkweDZiODU0N2FmLCAweDgxZjk5OWE5LCAweGNkNTc5OGY1LCAweDZhZjUzOTBhLCAweGM3OTg2N2U2LCAweDVlZGU4YjQ2LAorCTB4YzcxMmQ4NzIsIDB4MjVlYjlkZmMsIDB4ZjEyYmZiYTQsIDB4YmIzZTBmNjcsIDB4NWFiY2ZlNGEsIDB4N2YxMmJhYmUsCisJMHhmYjhiZTNhYSwgMHgwNjFjZmRmNSwgMHhkOWViOGUyMCwgMHg2Mzg1Mjc1ZiwgMHg3N2YxYzI4OCwgMHg1ZmEwY2Y4ZCwKKwkweDRmZTdmOWQ5LCAweDE0M2MwMGNjLCAweDBlNzRhM2VmLCAweDI0ZThkNWY0LCAweGU2NzM5MDIxLCAweDQ1NWJlZTAwLAorCTB4ZmQxN2EyNGQsIDB4YWNhMWNkNjUsIDB4M2U1YTlkZGIsIDB4YzUzZmZlNjYsIDB4OWU5MTNhMmYsIDB4MDI1OTc2OGEsCisJMHhhMmZiNjlkMywgMHg0NjhmMWYzZCwgMHg2MTk1OGMzZiwgMHgzZmYyNGZmNCwgMHg3ZjY1ZjVjZiwgMHg4M2UwNjhkYiwKKwkweDQzZjMzMzIyLCAweDk5ODVjYTMyLCAweDc3M2ZhNjU2LCAweDgyY2ZiNWVjLCAweDJjMGQwOWY1LCAweGYwNTE0MGRlLAorCTB4YjlhMmM5MmUsIDB4OTU2Njk4YTcsIDB4MmY3ODdhZDQsIDB4MGM3NGE3ZTgsIDB4N2U2MTMxZWYsIDB4YWFlZTc3ZGEsCisJMHg3NmM3NTFmZiwgMHg5YThhMjcyNiwgMHgyZGM0MDBhNSwgMHhkOWQ4NmEyOCwgMHg0NWE1ZmUwOSwgMHhmZjY4MmNjNywKKwkweDE0Zjg2ZjJhLCAweGJmMjdlN2ZkLCAweDJiZWQwM2I4LCAweGVlYTJjZGU1LCAweDNmODdhZDNlLCAweGIyMTg4MzVmLAorCTB4NTM1YTFmODAsIDB4ZDFmZmRlMjksIDB4MDdjYzA5ZmMsIDB4NzdkY2ZmYjksIDB4N2UyYjM3ZjQsIDB4M2YxZWZmNzEsCisJMHg2ZmYxNjEwNSwgMHg3YzgxNzM5ZiwgMHhjZGJhZDczOSwgMHgwZDdkN2U4NSwgMHhkYjVmZWVkZiwgMHhiODJmN2ZjMywKKwkweGRkZWZmYjllLCAweGI5ZTA5YTcyLCAweGRlZmZiYTI2LCAweDMyODVmODM5LCAweGJkNTY4M2NhLCAweGU4NjkxZWZmLAorCTB4OWQyNWZhODMsIDB4OTQ2ZTU2NjcsIDB4ZmQ2ZThmZmIsIDB4NGYxN2M3N2MsIDB4Yzc3OWZmODMsIDB4ODY5ZTRmYWUsCisJMHhlZGZjOTc3OSwgMHhhZmMxYTdiMywgMHhlMWIwMWM4OCwgMHhmY2ZlNTdiZSwgMHhhYmFmZTg3YiwgMHg2NTY0ZGJiNiwKKwkweGZkYjlkYTc0LCAweGVlNzdmNDM5LCAweDgxZTJjMGZjLCAweDlmZjczYWRlLCAweGIyZmYwMzRlLCAweDkyOTc5ZGNlLAorCTB4NmNiOTllYzAsIDB4ZWY2ODRkZmYsIDB4NzI3YmI2NWQsIDB4NmZiMjg5MzIsIDB4NmZkMDI5YTgsIDB4YWRmYzJhZTAsCisJMHhkYzNiNzg4ZCwgMHg5ZmZkMTg3NCwgMHg4M2JjNTNjZSwgMHhjYmY2ZWMxYywgMHg3ZjMyOTYwYywgMHg2M2ZiODU1NywKKwkweDZmZjc0NjM2LCAweGQ5N2ZlMWVmLCAweDM3YWRmYjc0LCAweDYyNmZmYzgyLCAweGZkMTVlNGZhLCAweGY4YTVkZjMwLAorCTB4ZjAyYWZlYmMsIDB4NmRmZGM4ZDgsIDB4YWI3Y2I3ODMsIDB4Zjg3OWU2MWYsIDB4YzlhYmUyODUsIDB4OWEyZmM3ODAsCisJMHgyOWZhZmYxNiwgMHhkM2VhNmIyOCwgMHhlODY2MWZhYiwgMHhmYWE3ZTAyYSwgMHhkZWFkZmJjZiwgMHg2ZmMwYWM1NywKKwkweGZlODM3ZWJiLCAweGU5YmY4MGFmLCAweDVmNDdlYzBhLCAweDgzZmJjMWE0LCAweDJlNzg1MjMzLCAweGZkZTEzZmVjLAorCTB4NTJiZjhjMTYsIDB4ZTQ3ZGZmYjQsIDB4ZWZkZGNlYTcsIDB4NzA5YTlkYTAsIDB4ZDI0ZWY2M2YsIDB4OGRmY2MzZmQsCisJMHg3YWRlYmUwNSwgMHhlNGRmZjMyNywgMHg0ZWZmMDA3OCwgMHhiOWRmODVjNSwgMHg2YmEzMjcxZiwgMHgzN2IzYmZkNSwKKwkweGFjYWZjZWJmLCAweGZkNTZmZjRjLCAweGZmZWI0YmZhLCAweDIzMjRmZGNjLCAweDAxYjIxMzc4LCAweGY1YmUyNzVmLAorCTB4MDcwYTgyM2QsIDB4MTFjYjk3MzcsIDB4N2VlOGU1YmYsIDB4Y2I3ZWRkYjQsIDB4M2UwMWJjMDYsIDB4ZjZlYTlmNjEsCisJMHhmZWY5YTY0YiwgMHhmMjRlZDA2MywgMHhmODNmMzQ3ZSwgMHhlZmU2M2FjZSwgMHhkZmU5MjlkYywgMHhjNGYwNDY4ZiwKKwkweDBkNTgyM2RmLCAweGFiODFjYmZlLCAweGQyYmU1ZmYzLCAweDljMmJiZTNhLCAweDM0NTI4MjRlLCAweDNhYmMyN2FlLAorCTB4ZGYyZThlYmUsIDB4M2ZjMjZkMTMsIDB4OTE2ZDVlZjYsIDB4OTMxZjdjNjAsIDB4N2YwNDRiNjAsIDB4Y2Y2ODEzOTAsCisJMHhmMzdmM2VlYywgMHhmYjcwNzZmNSwgMHgyMmYzYzc3YiwgMHgwOWFlYmZmYSwgMHg2ZWY5NDYxZSwgMHgxMDY1MWY5NCwKKwkweDdjY2EyMzQ3LCAweGJlOThkOTg3LCAweGY2Y2NkNjVlLCAweGNlNWQ4ZThmLCAweGQzZjY4MzgwLCAweGQyMmY2ODcxLAorCTB4MDllMzU5NzUsIDB4N2JmYjRmZDksIDB4MzJiN2UxYmQsIDB4N2M2MmM3YmIsIDB4NDA0N2ZiMDQsIDB4MTc4ZTllYjMsCisJMHg3ZTY2OGUwZSwgMHg2ZmRlY2NkYSwgMHgxZjFjNjcxYywgMHhmYTI1YmNhNywgMHg5ZjhkZTUzOCwgMHhmNjI5YzZlYSwKKwkweGUzYjc2NTA3LCAweDMzOWRlM2NhLCAweGZlODJlZjdiLCAweDNkMzJiNWNlLCAweDljNTA1Y2YxLCAweDU4N2RlZDE2LAorCTB4ZjdlMjRkOGEsIDB4YTUyY2Q1NjEsIDB4MjVjNjI4ZmIsIDB4MjQzOGIyNzEsIDB4ZjUwNjJiYTIsIDB4ZWNjZTY1Y2UsCisJMHg5MDA5YjE2MywgMHg1NDA3ZThjYSwgMHgwZGZiODJiNSwgMHgwMjkzY2NmZCwgMHhmZTcyYWVmOCwgMHg1NzdjYzA5OCwKKwkweGY2MzU3YzAzLCAweDIzZWRjOTFmLCAweDI5NGFhZmEwLCAweDc3NjA5OWI5LCAweDM5MWRjYTMwLCAweDFhMDI0NGMxLAorCTB4NGU3MzJmN2MsIDB4NWVmMDU2NGIsIDB4ZjAxZmQ0MjQsIDB4YjRlMzNjNzksIDB4NjQ3ZWZkMDQsIDB4NjQ3ZDVmYjAsCisJMHhlOTkyNmIyNiwgMHgwYmYyM2VmYywgMHg1ZmI0MTU5ZSwgMHgwM2M3ZjVmMiwgMHhmYjNkOWQ3MiwgMHg4N2JlZjM1NywKKwkweGE5YmQ5ZDQ0LCAweDBlM2UxMmNjLCAweDhhZjIxNWU3LCAweGM0MjNlZjBkLCAweGU3OGMzNjAzLCAweDBkYjRmZTUwLAorCTB4Zjc3ODdiZDcsIDB4ZGVhMmNmNTcsIDB4NjEwYjZiZmQsIDB4NTRmNDQzZjcsIDB4ZGNhNDcxMDMsIDB4YmJkMzhmYWMsCisJMHgzZmZhN2FiZiwgMHhjNjg2YWY0MSwgMHhhN2ZjZmM3NCwgMHg0ZjM4N2Q2OSwgMHhmY2YxZGEzNCwgMHg3NjJiYjVkMywKKwkweGFmY2ZlYTM0LCAweGU0MDMzODNjLCAweGQxOWRiZTVhLCAweGM5OGJmZTYzLCAweDVmZGEyYTgxLCAweGI3Y2IyMjdiLAorCTB4ZjE4MDE4ZWYsIDB4Mzk3NzhhMDMsIDB4ZjBmMTFmZDEsIDB4NjBjYTk3ZWUsIDB4ZDE3Y2VhOWYsIDB4YTQwNjZlMGUsCisJMHhmZmFlMTVmMywgMHgzYmM3ODZmZiwgMHhhZDE0OTVhYSwgMHgzMTIxNzI1ZiwgMHgyMDc3ZGEyYiwgMHhlNTY3OTBjNSwKKwkweDdmMDQ5ZWY4LCAweDgxMWYzOGIyLCAweDE2MzlhYjFkLCAweGJkNTA4ZmRmLCAweDc5Y2ZkNzU4LCAweDA3YmY3YzI5LAorCTB4OTdkZmQ4ZTksIDB4ZjUwOTliYmQsIDB4YWM2MDc5MDUsIDB4MWZmZjk2YTcsIDB4ZTViNzkzMWIsIDB4MTFjZWRhMTYsCisJMHg4NzJlNWZhOSwgMHhiYWJlNThmMywgMHhhZDI3OTMyZiwgMHgyYWU3ZmY1OCwgMHg5ZWYyZjM5ZCwgMHhlYmZhYjJmZCwKKwkweGY1NzUwMzZkLCAweDNjNjVmNmQ0LCAweDdlOTE4OGRlLCAweDE2ZmRlNzFmLCAweDJjMzM3YzM3LCAweDI4OGQzYzVhLAorCTB4M2ZlZmM3ZjMsIDB4MDRkZjg4MTUsIDB4MWI0ZWNiN2EsIDB4Nzc4MjUxYzYsIDB4YmYwZmUwZjgsIDB4NWZmNzY2NDcsCisJMHhjNjEwYWUyNSwgMHhlNWM3ZDkzMywgMHgwODRjNDk3MSwgMHhlNWY0YWJlMywgMHg5MGZhODBmMywgMHgxN2I2ZDYyNywKKwkweDJmYTVlZjAwLCAweGU3YzQwOGQ5LCAweGU5YzU3ZDI5LCAweGVlOTc3YzA1LCAweDU3ZmRhYWY5LCAweDY2ZWZlMDk5LAorCTB4ZTk1ZWJiNDcsIDB4NzQ4MmZmMmIsIDB4Y2QwOTZhNTAsIDB4M2I2NTc4YzUsIDB4OTllMjA0MmQsIDB4MjM3Y2VjNzUsCisJMHg0M2I1ZjgwZCwgMHg3ZmM1YTUwYSwgMHg2OTVlYmRjYiwgMHg0Nzg4NjJkMCwgMHg1MmVmZTdlMCwgMHg3ZGUxODMwMywKKwkweGIzM2VmYWJkLCAweGQzMzkxN2E4LCAweGRlZjc2MzY1LCAweGJkZGU2Y2ZiLCAweDdkNzdlNDM2LCAweDk1NzM5ZWRjLAorCTB4ZWZiNDgzY2QsIDB4ZTg5NDhiYjQsIDB4OWI0ZGYxNzIsIDB4NjlkOTc3ZjQsIDB4YTNiOGU1YmIsIDB4MzdjNzNiYzcsCisJMHg0OWU3M2U2MSwgMHgyMDE4MTI2YiwgMHgwZTNlYThjYiwgMHgyMWE4YmNmMiwgMHgwZmQ4M2ZiZCwgMHg3N2Q0ZDkwZSwKKwkweGVjMmM0YWVjLCAweDA1MjQ4NzQ3LCAweDA2ODdkOWNmLCAweGZiYjVmZDI4LCAweGFiNGE5OWNjLCAweGFlZDA5NjYyLAorCTB4ZGQ1NzY5ODMsIDB4MDk3ZDc5YTcsIDB4NjZkYTI3ZjgsIDB4MWY3YjkzNDUsIDB4OGYwOGVjZDksIDB4MWJjNWFiMjIsCisJMHgwNzY0OWRlZCwgMHgwMmRlYWZkZiwgMHgxYjIyNDA2MywgMHgxZDQzZjgxNywgMHg0MDE0OTBmNywgMHg0NjI4YmMzOSwKKwkweDBmZjRmZDYxLCAweGI4YmRmMGM4LCAweDJkMjBlZjYxLCAweGQ1Y2QwYTFjLCAweDI5ZjI4ZjU4LCAweGQ0OTBiM2MyLAorCTB4ZjkxYTk5YzgsIDB4Yjg1NzhlYWQsIDB4ZjE5OGExZGMsIDB4M2ZmOWJhM2QsIDB4OGM1NWU5YmEsIDB4Yzg4ZDE5ZTAsCisJMHg3NDcyNzg5YSwgMHhiMzNiNDVjNywgMHgyY2MwZWVmYSwgMHg3ZTAxNWFlNSwgMHg5Yjc1YzkzMiwgMHg2YTk1MjA0NSwKKwkweDEyMThmN2U0LCAweGQ1NDFkNGM0LCAweGFhYmYxNjJlLCAweDNjOWM4MDgyLCAweDgzNDcxZGQzLCAweGQ3ODExYTYwLAorCTB4ZmRmNzI4MDMsIDB4OTIxOTA4MDMsIDB4MTI4NmZhMGUsIDB4ZWZjMGQ2ZWIsIDB4ZjM4NWNkOTIsIDB4MDgyYjk4YjEsCisJMHhkZGQzMTc5MywgMHg3ZTBhN2ZhMCwgMHhlOTRjYjkxZiwgMHg2MWIyYWFhOSwgMHg0MGY3OGIxMCwgMHgwZDdlZjBiYywKKwkweDNmM2E1ODU1LCAweDRiZjVmYjk3LCAweGQ1ZjkwN2EwLCAweDI3ZGY3MGI4LCAweDYyMGEyYTgxLCAweGJiNDUzMzcwLAorCTB4ZTJjMjI0ZWIsIDB4NDYzYmFkOTksIDB4YjQ4ZmU3YjQsIDB4ZmZhZjgxMTgsIDB4MDczMWNhMjAsIDB4Njk4NGZjODksCisJMHhjODJhYzQxZSwgMHhiZmQ4YWFkYiwgMHg5Y2ZkYzM2NSwgMHhhMDQyNGRjMywgMHgyNDFkZGExZiwgMHg2M2E5YTc2NCwKKwkweDk2OWNmOWE0LCAweDM0OTk1ZGZmLCAweGY3NGJhMWFmLCAweDkxYjk3ZDA0LCAweDMzNWNhODJmLCAweGY4NDQxYjhjLAorCTB4MzczZjdlZDEsIDB4YTFiOWZiZjQsIDB4YWRiZmNmZGYsIDB4ZTU0ZTE1NWYsIDB4MTBlOTQxZDYsIDB4NjU3NTYwODcsCisJMHg4ZDhkYzM5MCwgMHhhMzcwZTU2NywgMHg3MTBlMTlmMCwgMHhjNjI5ODhkNywgMHgxMWNkZWZjMywgMHgzNjdjMzFhZSwKKwkweGYxNGZhODE2LCAweDFkMjYyNzNhLCAweGQ4ZjNmNGUxLCAweGFmZjA2MTAzLCAweDA0YjUwOTI1LCAweDA0YWJjM2NlLAorCTB4YzkyMmZlMzUsIDB4MTFkYTY4NzUsIDB4NzBmOTE1YjcsIDB4NGU2NzFmM2QsIDB4ZjU3N2EzMGMsIDB4ZmFjZjdjMWQsCisJMHhlOGVmYmMzNiwgMHg1YmQ2ZGY1MSwgMHhmNWU4OThmZCwgMHhjN2NkYmQ5ZCwgMHhkZjNlNzUxZSwgMHhiZDk0Y2U1NSwKKwkweDcwNWJmZWYyLCAweDZmMmRkYjVmLCAweGZhOTQxNGRjLCAweDYyNzNkYjc3LCAweDcxYTViZjY4LCAweGMzNmI3ZmVkLAorCTB4YjQ2ZjRjMmYsIDB4MmZlM2Q3ZjYsIDB4ZDI5NWU4MDYsIDB4ZmQ2MGNjNGYsIDB4N2JkZTIzNzcsIDB4N2NmOTk3YTMsCisJMHg0OGVmMzQxZCwgMHg5YmJhZWJhNSwgMHg5ZWE1M2Y4ZiwgMHhiM2RmNzdkZCwgMHhlOGUzZDk4YywgMHhmNTBiY2ZmMSwKKwkweDc3ZmFmMGU3LCAweGFlZDFmMzViLCAweDg3ZTYyMjcwLCAweDllZTEyNzE4LCAweGRlMTdhNjVhLCAweGY3ODg5MGYzLAorCTB4MDhlMjNkYWIsIDB4N2Y5NDJmYzEsIDB4MDQyZTVkZWUsIDB4ZTJkMWU5NDIsIDB4ZTM3NzkxMjIsIDB4ZjhmM2ZmNjgsCisJMHg0MzM4YzZmOCwgMHg1ZDRjYTIzZSwgMHgzMzhiNDYyNywgMHg3ZDRjZThjNCwgMHg1ZjhjNjU4NywgMHhmMmU0ODhiMCwKKwkweGVmZmE1MWY4LCAweDkzMzczNmVkLCAweDVjODBlNjg3LCAweDJmYjIzMjNkLCAweDNhNTIzN2Y5LCAweGQyOTI3ZDA2LAorCTB4ODk2N2RjMzEsIDB4NzEyZDNkZmMsIDB4ZmFiZmNjYzksIDB4M2M5ZDc4OGUsIDB4YjEyOGEwYmIsIDB4YzUzNmJmYjgsCisJMHgyZTFiZTJlYiwgMHhjNzI0YWYxZCwgMHhmOWI1ZTQ2OSwgMHhiZjE3NWRhMiwgMHhhNGYyNGFhNSwgMHgyZTkyYmM4MCwKKwkweGNhMTQ0NzVlLCAweDNlYzVmMjU3LCAweDUzOTRkMTQ0LCAweDE5OTkxNDNkLCAweGVlNTEzNmRjLCAweDIwMDM5OGE0LAorCTB4NWNlZWNjZTcsIDB4NmM3YTBmOTIsIDB4YjU0ZmEzMWMsIDB4YTIzMDljYmUsIDB4OWI3YzZmNWIsIDB4MjYyYzdiZmUsCisJMHhlOTZjZjkxMSwgMHhjNjE5MjUxMiwgMHhlYjczZGEwOSwgMHhjYWU4OTNlMSwgMHgzZDFjZjhmNiwgMHg4M2JmYzFlOSwKKwkweGQ2MGFiYmFkLCAweDNkNzNkZTlkLCAweDgzYzdiMjU1LCAweDc3NGU3M2ZhLCAweGNjMmIxYmJjLCAweGVmMjhiNDRmLAorCTB4ZGZiZjMwMmIsIDB4MmFlYzA0NGIsIDB4MzllM2UxM2QsIDB4YmJmMGEwMTMsIDB4N2U4N2U4MTAsIDB4ZjRlYzYyMjEsCisJMHhjM2FmZThhMSwgMHgxMDc1ZTRmNSwgMHhmNWNhOTFjZiwgMHhlM2JlM2M1NSwgMHhmMWNmMWUyYSwgMHg3MzdmMWU2MSwKKwkweGE4ZjM4ZjBkLCAweGE5ZWFjZmMyLCAweGQ2ODIzOGM2LCAweGFiN2ZhY2MxLCAweGMxMjdlMzliLCAweDQzZTNlMWM0LAorCTB4NTI5YWM5N2QsIDB4MzY4NGY3ODEsIDB4ZTIwODQ1NzcsIDB4NzRmZTkxNzEsIDB4YmI2OTgwOWYsIDB4YjI3ZTExYWIsCisJMHg5MjdkYTA5YiwgMHgwNWJjYzdkNiwgMHg2YTk1MzRmMiwgMHhjYzFlMjI0NywgMHg0ZjkyMGFlZSwgMHhmYmI2MWZjYiwKKwkweGQ5YjgwMmRlLCAweDQxYmM3ZDE0LCAweGMzNDBjYTRiLCAweDllMDFiMGJkLCAweGM5M2QzZDJhLCAweGE3MDI2MmU0LAorCTB4MTI3YzIzMjcsIDB4NTNkZjE2NjQsIDB4ZjRkZWEzYTUsIDB4Y2ZlZTJhYWEsIDB4ODNkMmE5YmIsIDB4MmI4ZjE1NjksCisJMHg4NDcxMDU1NSwgMHg4ZjI5NGUyMCwgMHhjZmM4OTQyMywgMHg4ZTE0NTU4OSwgMHhiZTA5ZmRmMCwgMHg2NjU1NTY2ZiwKKwkweDlkYTY3OTYzLCAweGE2MDk1M2VkLCAweGMwMTI4MzhhLCAweGJiMzA5ZTI1LCAweGY0OWY4MjY3LCAweDU1Y2MyMmNmLAorCTB4ZmM1MjdlMTQsIDB4N2FiYzgxNDQsIDB4ZTdjMzU4OGYsIDB4NzQ0MWU5Y2QsIDB4ZTE3MTBkOWIsIDB4MmYwMDI3OTQsCisJMHgyNjQ4NmYzNSwgMHg5NzE1ZTdiOCwgMHhkNjNlNGNkZiwgMHhjYjM4YjNkMCwgMHgzNDc2MDcxYiwgMHg2MDEzZTFkMSwKKwkweGUwMzlmYmZmLCAweDIzNjdjZTk1LCAweDU5YzYxNzlkLCAweDlhYjBmNGU1LCAweGE3MmQ3ZGUzLCAweGRlM2NmNTg3LAorCTB4NWQzODJmZTcsIDB4MGZkNzRhM2MsIDB4N2IwZjJhZjksIDB4MWE2MWIwMzcsIDB4Yzg0YjhiZjMsIDB4NjhiOGYxMzAsCisJMHgzYmY1YTIyMSwgMHg4OTA0ZjM4YiwgMHgzYzg5ZDc0YywgMHg3MThhNjBhYSwgMHgwYjMxYzhlZiwgMHgyNDdkOGJkMiwKKwkweDdlNTA4YWYxLCAweDhiMDA4MWVjLCAweDBhOWI5OTYzLCAweDFhOWM2NmZiLCAweDEyODI3MmI3LCAweGI2MWYxYjM3LAorCTB4M2UzY2NjODYsIDB4MWRjZWM4OWMsIDB4M2RlMzUxYWQsIDB4NTkwZTc5NTYsIDB4ZGJkZWZjZTEsIDB4ZGNjZTBlN2MsCisJMHhmNmJjNjA0MywgMHhkMjBlODg1MSwgMHg3YjNiOTdjNywgMHg2YTNiY2QzMSwgMHg3ZjRkZmVhOSwgMHhkYTVmMWVlYywKKwkweDVhZTdhMDZhLCAweDM3M2YwMTBiLCAweGJlN2Y5ZDA3LCAweGY3YjFhZjQ2LCAweGQ5MDgwNzYyLCAweGE5ZDhhNDdmLAorCTB4NDUwNzRiM2MsIDB4OTdmN2UyODMsIDB4MDA2YzgzYjUsIDB4MDU3MzBhNjcsIDB4YTQ5YjFkZWMsIDB4MDM5MDU0ZGMsCisJMHhkYmEyZTI5YiwgMHg0Y2VjNjI2ZCwgMHg4ZTY1NzY1ZiwgMHg4ZDc1ZDFkMCwgMHhlZTc2YzVlNCwgMHhmNDc0NjMwOSwKKwkweDRmZTVjMzVmLCAweGRkMWM5NGZjLCAweDdjZGU1NTc3LCAweDBiZmFjMzFlLCAweDMwOTk3ZGRhLCAweDk5OGJhNGFmLAorCTB4YjcwOWJmYzgsIDB4NTUzZjk3NDUsIDB4Mzg4N2VjOTIsIDB4OThhMzU1MDAsIDB4OTRjZmYzYmMsIDB4NDNkNTllOTksCisJMHg3NTM5MzA5ZSwgMHhmOGYwOGM4MSwgMHg4NjQ2NzQzNSwgMHhiZjA3ZDQxMywgMHhlMmViMjk5YywgMHgzZTAzYWUxOSwKKwkweDYzNzEwNjE5LCAweDAyYWZmZDE5LCAweDM4YTlhMDdlLCAweDg5ZmE0NjU4LCAweGYzYzI2ZTlmLCAweDVmY2UxYWVhLAorCTB4ZGE3ZTczMGYsIDB4MTFlOWY5YzAsIDB4YzQwYjIzZTAsIDB4Njc3YzY1OWYsIDB4YjBlMTllMjYsIDB4NThiOTU0OWYsCisJMHhmZTAxMmRkYywgMHhjNTU0OWI0ZiwgMHg3MTg3OTgyYywgMHgwNDU5OGY4ZSwgMHgzMmE4OWZiOCwgMHg0MzE3NTM3YiwKKwkweDU5ZTJkNmJlLCAweGUzMWU2MGE5LCAweGVkNmJmYjAxLCAweGRmN2YzNDRhLCAweDJjZTI3ZDkwLCAweDZjZDc4NTNiLAorCTB4NmFjN2JmOGUsIDB4YWNmZTIyYzcsIDB4YWMwMTRmNmUsIDB4YzE4OGVjY2IsIDB4NTBkNTdkZjMsIDB4NzNiNDQxNmIsCisJMHhiMzNiNzRjMiwgMHgyZjc4NTA4ZiwgMHg0Y2ZhN2U4NCwgMHg4NzNlZTljYiwgMHg2NmExOTk4MSwgMHhmZGMyMTY2NiwKKwkweDFkMDc3ODMxLCAweGVkY2E3ZTg1LCAweGZkMjE4ZjRjLCAweDQ2YjA2NGZkLCAweDM4ZjBkNDBlLCAweDkzZjE0NDcxLAorCTB4YjA3OTFhZTEsIDB4MDI1NGM4NzIsIDB4NzI5ZTllNzYsIDB4YjgzOTE3YTAsIDB4MmFjMWM5OGQsIDB4MDYyZmVmODEsCisJMHhmOGYxNTZiYywgMHgzNDFjYWFkYiwgMHhjNGEzNWUwMywgMHg0ZDdkNWFkNywgMHhiZTdkZWViNiwgMHhiMWI4ZTVjNCwKKwkweDNiM2IzYWRlLCAweDllMjFhZDM3LCAweDU5ZTg0ZmIwLCAweDBlYjRlMTRlLCAweDNmZDkxNGUwLCAweGEwZTNiYTczLAorCTB4M2FjYTIwZmQsIDB4MGNlZmYyOGMsIDB4NTMyMDgzZWMsIDB4MzM4YzNlY2MsIDB4OWU1NjQ4YjIsIDB4ZTU3MjBmMTgsCisJMHg0Y2JmOThkZiwgMHgzYTgyN2E2ZiwgMHg0MmM1ZmU1ZSwgMHgyZWYyNjdkYywgMHhiZmZkYzc4ZSwgMHgyMTNjNzZhMCwKKwkweDJiMDJhZTcwLCAweGY2OWRlNmJkLCAweDc1M2ZjZGU5LCAweGQ3NGVkZTAxLCAweGNkZDNmYmYyLCAweDU3ZmMwMDUyLAorCTB4MmVhZWQ3NGUsIDB4NGRiNTdjYzMsIDB4ZmM0YzljMDEsIDB4ODgyZTAzZTUsIDB4NjllOGIyY2IsIDB4Y2Y1M2VmMTEsCisJMHhkMGQzZjhjNCwgMHhjYmViZWZmZiwgMHg3ZjhkNDU5NywgMHhiNWJhOGFjNCwgMHgxNjlmMjA2OSwgMHhlZjhiNWQ2ZCwKKwkweDdiYzRjZWVjLCAweGYyNmFlNjg3LCAweGJkNDE1MzI0LCAweDk2ZDM4ZDUwLCAweDBiYzU4Y2Y3LCAweGZiNmY1ZGZhLAorCTB4ZThlNmRlNTIsIDB4ZjgyYWZkZTcsIDB4Y2E1YWY0MTUsIDB4MWViN2EwMmYsIDB4NDM4NGU1NzQsIDB4N2U2N2ZmMTQsCisJMHhiMjdkNDM2OSwgMHg0Mjc3ZjY0YSwgMHgxZGFiNmFiZSwgMHhmOGFhOTA1YSwgMHgxZTNmZjFlOCwgMHgwYmI0ZGZiNiwKKwkweDc2YzNjN2U0LCAweDg5NDgzZWVmLCAweGVkNGJjNTgzLCAweGY4ZWEzZTZkLCAweDg1NmI2MGVkLCAweDc4YTdiNzdiLAorCTB4YTc4YTE0MWMsIDB4MWJiYjNhOTksIDB4ZTc2Yjc3YmIsIDB4ZWQ2MjE0NzYsIDB4OTc4NjNjYTUsIDB4YmI5NGJkMmIsCisJMHg3MTBjOWY5OCwgMHhlNzU3MmY0NywgMHgxZjlmOTY3MywgMHgwN2I1NmQxNywgMHgwM2QxNDY1NiwgMHg4NGY3ZjExNiwKKwkweDg2N2RmODhiLCAweGJiNjcyZjRhLCAweDY3NDYyZGY1LCAweDE3MjVmZjZhLCAweDYyZjQ2NWFmLCAweGI5ZTE0YmEwLAorCTB4OWY4NzQ4NTEsIDB4N2Y3MDkxMWQsIDB4MTFiYjllMTEsIDB4NWQ5NGI0ZTMsIDB4MTJmZDYxYjQsIDB4ZjgyOGYzZDEsCisJMHg0NWI3OTM3NywgMHhkZWZiZDNhNCwgMHg1OWY3ODcxOCwgMHg5MDc4ODYxZCwgMHgwOWU5ODNhMiwgMHhiMTc3OWE2YSwKKwkweGU2OWZhNzU4LCAweGIwY2ExNjA1LCAweDJjNWRlNzlmLCAweGY2MGM3NDYzLCAweDkzOTgzODY3LCAweDY4OWI1ZTZmLAorCTB4MDM5NmY0ZTYsIDB4YjRkZDJmZWQsIDB4NmZjYmQ2OTIsIDB4MjY0ZWY0NjMsIDB4YmVkMGNiZjgsIDB4M2NmNzY3NTgsCisJMHg4YTBlNDUxYywgMHgzNzE3NDUwZSwgMHg4NGFkYmYzNCwgMHg0OWY4NzNiNSwgMHg3ZmZlZTY4MiwgMHg5ZThiOGYxMSwKKwkweDQ1YzU5MTdmLCAweDQ5M2Y2ZTI0LCAweGYyZTczYTAxLCAweGZhOWY0MjI5LCAweDI2MWRiNWY4LCAweDdhZTMyZjg2LAorCTB4MTMzYWY4MTMsIDB4NDM3YmQ3YmEsIDB4M2VmZGViMmYsIDB4MGZkNzJmNWIsIDB4MWJjNmRiZjIsIDB4ZjFhYmY1ZDYsCisJMHg1OTE1ZDZkMSwgMHg1ZmFjMDRjZiwgMHg5NzBkZTNjMiwgMHhkNWRlMTg5OCwgMHg0YzFkMWJmMiwgMHg3YjY5YWIwZSwKKwkweGE1ZTIyY2U1LCAweDhmMjE1MWZiLCAweGI4MTc5OGFiLCAweGNmM2UwNjRmLCAweDJmMTcxY2RiLCAweDVmOTlkNjY4LAorCTB4YTdlNzQ3M2IsIDB4MWYzYjU3OTIsIDB4NmZlNTcwZTMsIDB4ZDAyZjJmOWUsIDB4OWUzNzU1ZjAsIDB4NmJhZjI5ZmMsCisJMHg4NmUzNzRmMSwgMHgzYTU3NTMzZSwgMHhiZGNhMWY2MCwgMHgzZWUzMDFkNiwgMHg2NWY3M2E1YiwgMHhiYzMyZmQwMiwKKwkweGEzZmQ5MTlkLCAweGRkMGU1MDJiLCAweGNlZjY4YWU3LCAweGRiYzA0NmU1LCAweDM4N2NlZDM4LCAweGM5ZmIwNmRlLAorCTB4YTM3YmVkNDgsIDB4NThlM2QxOGIsIDB4YmUyYjZmYjYsIDB4ZGJiYmVlMWYsIDB4NDQ1MTY0OWYsIDB4ZDEzNzk3N2EsCisJMHhlMzg0NjlmMSwgMHg1OWJmMGUyYywgMHg4ZTFjNzBkZCwgMHg4NjU3NTQ3ZSwgMHg3ZjNhNzVlMywgMHhjOGUxNWVhOSwKKwkweDQ5YzJhZmYxLCAweGIwZjU0ZWZkLCAweDE4NDQ4ZTk5LCAweDU3ZjdiMDk3LCAweDBhYWZlM2I1LCAweDI3ZjE5MTdlLAorCTB4YTFkZWZhZjAsIDB4YTJmYzgyNGYsIDB4ZjRmODEyZjIsIDB4MWYzZmIzZWMsIDB4YjBmNzZkYWQsIDB4MzBiZGUyN2QsCisJMHhiYWJlYTkwZSwgMHhkODNmYjU3YiwgMHhkZjUwNzk3ZCwgMHgwNDczYzkzZiwgMHhhZGZlNmJjZSwgMHhhZThhYTdhMiwKKwkweGE5ZjYzMGJiLCAweDU2YWUxMGNlLCAweGFlYWRkZmJmLCAweDc2MGUxODZjLCAweDIwY2FhYWQ2LCAweDQwYmI1NGE2LAorCTB4OGE2YThiYmQsIDB4Njg1ZmQwMWUsIDB4NzhiNDZmMTUsIDB4YmMzOWViNTQsIDB4MzJiNjU3NTcsIDB4NGZkNTkxM2IsCisJMHgyNDBmNjBkYywgMHg5OWM5MmY4YywgMHgzMzM3NjhiMSwgMHg4MzdhZjQzYiwgMHg2MGRjZjkyYywgMHg3YmY5OTNhNywKKwkweDViZWNjOTY3LCAweGU3MDk5ZTk3LCAweGJmMGM4NGUwLCAweDFkNmJiZTA2LCAweDQzNjJmZmNjLCAweGY4M2Y1MmNhLAorCTB4M2VjMTU5ZWQsIDB4MjJlZDA4MzksIDB4ODE3Njc0MTcsIDB4OWM4YmNkNTcsIDB4ZjBkNGVlOTQsIDB4ZjU4MzMxYTMsCisJMHg5MDQyNTJlNSwgMHgyNDZlMWRhMCwgMHg0NzlkYWVmZCwgMHgyZWNlYWI0MiwgMHhkOThiODQ2YSwgMHgxMmZiYzJlYSwKKwkweDJlZjZlMTMzLCAweGVmZjUwZjBlLCAweDcyZTVhYzY0LCAweGNkZGI4NmI4LCAweDE5N2IwNzFlLCAweGJiNGFkZjg1LAorCTB4MzVhM2Y3MGIsIDB4MzlkODk4ZDcsIDB4ZjNjNjZhYzMsIDB4NDBmMWI4MzUsIDB4OGZkNjM5N2QsIDB4N2FjMWIwZWIsCisJMHg0M2YzZDA0NCwgMHhlNDQyNzc5OCwgMHg3YjQzMTExYSwgMHgyMzhmOTAwOSwgMHgzZWY5MDA4YSwgMHhmNDA2YjQyNCwKKwkweDZkODlhZWQ2LCAweGQ5ZjdjM2Y3LCAweGUwMWQ1ZjM2LCAweGQ2ZDRjYmY3LCAweDRmZDgwMmUzLCAweDAwYzM3ZDczLAorCTB4M2ZhMmI1Y2UsIDB4N2ZmNWExNDMsIDB4YTAzMzg2MmQsIDB4M2EyZDFhNWUsIDB4NmJkMmNmMTYsIDB4YTdkYWFmYzAsCisJMHhmMTYxOTdiOSwgMHhiMTc5MjM0MCwgMHhlNTlhZmU2NywgMHhjNTNkYzM2NiwgMHhlNWI0YzNkNywgMHgyZDk0NmNmYiwKKwkweDdiZmNmNWM2LCAweDBiMWYwOTI5LCAweDc0YjZlZjI4LCAweGYxNzNjOWRiLCAweDhlNTFkMDdkLCAweGEwMGZhNDRmLAorCTB4YmY2YzIzYWYsIDB4NjI1NjYwYmUsIDB4NGRmZDk5ZTMsIDB4Njc2NzU1NzksIDB4NmFhZjJhYjYsIDB4ZjNmMzMzYzYsCisJMHg1N2E1M2Q1MCwgMHg3NGFiYTdiMCwgMHgzNWVjZDgzMiwgMHhhOTBkM2QwMSwgMHg3NGI1ZGZhNiwgMHg4MzJmNDUxMSwKKwkweDcyZjcwNjcxLCAweDBmY2VhMTFmLCAweDNjMDAwN2RlLCAweDZjNTk4YmM1LCAweGM1ZDAzMWJmLCAweDI1ZmI2ZWJlLAorCTB4YjMyYTdiZmIsIDB4YWYzM2MyNTUsIDB4YTIzOGY5NjIsIDB4ZDFmYzYwZmUsIDB4ZTNlZGJhMGYsIDB4Y2RkZTU4YWIsCisJMHhkODBiZTU3MiwgMHgwNWExZGM3ZCwgMHhhNmQ3ZThiMSwgMHhjYjc2NjNjZSwgMHhjM2QwNTZkYSwgMHgyZWE0Yjc2NiwKKwkweGQ5OTlmYjg0LCAweDBhZmVlYmQ2LCAweDdjMjkzZWU5LCAweGUyNzIwZWM4LCAweGU3OWUyY2E3LCAweDJhYmRlZmRkLAorCTB4ZmJiYTY5ZDksIDB4ZGVmOGFkZGQsIDB4Y2ZkZjM0ZmEsIDB4MDRiMDkyZTYsIDB4YjcxMWY3ZjgsIDB4MDFlYmVjY2MsCisJMHhjNDA1ZDNlNCwgMHgwOTQxZjNjMywgMHg4NGY3YmRjZSwgMHg0MmRlNzcwMiwgMHgxYWJlZjc3MywgMHg2MjhlMDViOCwKKwkweDVmODQ4ZjczLCAweDgyZjk3NDAzLCAweGMzNjhhOWVlLCAweDdiMzVkYjU2LCAweGQ2Nzk2NzVlLCAweDY2ZmQ3YmFlLAorCTB4YjIyN2FlMmIsIDB4NWZhZTJiNWUsIDB4ZjY0NDFmNWQsIDB4YjhlZWYyYzQsIDB4OTEyZTJjYzAsIDB4MGI0OThmMGEsCisJMHhkYjY3YmFkOSwgMHg3Yzk4ZmNlNywgMHhkYjM5ZGU4YiwgMHhjY2FmZWEzYSwgMHhjN2NkODg3ZiwgMHhhMWNmOWYwOCwKKwkweDRlYzVjYTg4LCAweGE0ZTRkNzg3LCAweGUxZDBmZmViLCAweDVlYjQ5ZDE1LCAweDY2OWMzNTg5LCAweDYyZmM4ODFlLAorCTB4ZTg5OTdjODEsIDB4YWU4OTI2YmIsIDB4ZGYwMGZjZmYsIDB4NDM4MDQ0YjAsIDB4ZDJhYjlmNmIsIDB4ZjRlNGRmMmYsCisJMHhlZmE3MjZmZCwgMHhlM2JiZDMzNywgMHgxZWEwMjcxOCwgMHhhZTAyNGY3ZCwgMHhiM2E3MDY2YiwgMHg0N2RmYmIzNSwKKwkweDZmZjNjYzNmLCAweGE1NGI3OGIwLCAweDgzZWI3MmEyLCAweDQ5MTMzNzY4LCAweDZhYWMzOGI0LCAweGRmYjcyNmZhLAorCTB4MGU5NTRlMjgsIDB4MGRjZTNjMDMsIDB4NGQxOTk3ZTMsIDB4OWZiYmY0NzYsIDB4ZjRlYTI5OTEsIDB4MDI5OTE5ZjAsCisJMHgxZDZiODdmNywgMHgyZjRlODc3ZCwgMHhkMmY1YzU1ZCwgMHhmZjgwZmQ5ZSwgMHg4NTlmYjE4MSwgMHgzOWUzMjdjYiwKKwkweDllZWM4ZjZjLCAweGZmZGZmMjA4LCAweDg1YjNhMzM0LCAweDI5M2MyODUzLCAweDEzYWNlNWRkLCAweGZjNzBkZWYwLAorCTB4ZjIwMjM2YTksIDB4MWM0ZDYxNzAsIDB4ODVmM2ZiODEsIDB4MjBmYmZjMGYsIDB4ZDY1MGM3ODgsIDB4ODFiNzM0YWEsCisJMHgxZTA4MGM5YywgMHg4YjI1YmZiMCwgMHg0NjdlMzI0YiwgMHgxMGU5YjVlNywgMHhiZjIxODdkYiwgMHhmMGU5ZTYwNCwKKwkweDNkOGQwZTJhLCAweGM4YWE0M2JhLCAweGRmNWQwMzcwLCAweDNjODJmMGViLCAweGY3ODc3Zjk4LCAweDZmZTc4YzAzLAorCTB4N2IwNDFkMGUsIDB4Zjk5ZWJhYjcsIDB4MDBkOTI4ZjcsIDB4OWI0MWY5ZmYsIDB4MzEyYjUzMTcsIDB4MzZiOTUwYzcsCisJMHg5MGFjNGNkZiwgMHg2Y2M0Y2IyNiwgMHg3M2NiN2M4MywgMHgxZTRiYjA1ZiwgMHgxOGU0ZWViNiwgMHhkZmRmNjU2MiwKKwkweDcyZjQwNGI4LCAweDViYWM4MzVkLCAweDNlYTBhOGY3LCAweDNlYjM3ZDdmLCAweGU3ZDIxMTlmLCAweGU3ZDExZWM3LAorCTB4NDMxYTgzYjcsIDB4ZmZjMzk1ZjEsIDB4ZmRhMWQ0Y2UsIDB4ODc3ZjAyMTYsIDB4MGI0NWY4YTYsIDB4MGNiZWIzZmEsCisJMHgwNWZhMDA3YiwgMHg0ZGRlNTBkYSwgMHg4MmM5NmUyZSwgMHg1ZTRmZDZmYiwgMHg5Y2UwOWE3MCwgMHhkZjliZWZiZiwKKwkweDc4NmQ3ZGUyLCAweGM5ZTMxZDg3LCAweDBjNTNmYzFmLCAweGMwN2YwMTg5LCAweGExNWI2ZDE3LCAweDA0ZTI5OGJjLAorCTB4MmZjNTc3ZWMsIDB4MGVjMGVhZGEsIDB4N2E4NDY3YjIsIDB4NWZhMDBkMWUsIDB4MzFiZjllYzUsIDB4NzZmMGY5YmYsCisJMHg2ZmVlMDA0YiwgMHhkY2ZiZDkzZiwgMHg5ZjZmNDAwYiwgMHhmYTg3ZWY2YywgMHhkZjgyY2JjZSwgMHhkN2Y5ZmQwNCwKKwkweGM0ZTY3YzMzLCAweDI3MmQ3ZGIwLCAweGRlMzNkMjg2LCAweDc1Y2ZlYmJiLCAweDFjOTkzYmY3LCAweDFlNmNhZjY5LAorCTB4NGU1OWZiMDEsIDB4YjQ3ZmIzM2MsIDB4MDExYzFlNTcsIDB4OGYwZTVjZmIsIDB4NDllYWFlNDMsIDB4YmM3ZTNjMzksCisJMHgyNzRmZWE5YiwgMHhlNTE0MzlkOSwgMHgwZmNlNzBjMiwgMHhiMjA1ODE3OSwgMHhkNWZhMDFkNywgMHg1MzkwMTg4YSwKKwkweDc5ZTU2NzVkLCAweGFjMzU4ZmUwLCAweDE1NDcwZjU2LCAweGY0MDZkN2NmLCAweDdjZjkyYmRmLCAweGY3Y2QxMDE2LAorCTB4NTZmN2I4NzQsIDB4YmQwMGE0ZDYsIDB4YmVhMjQzM2QsIDB4ZjljMzVjN2IsIDB4NjVlN2Y5ZTgsIDB4ZjIyZmJjZjUsCisJMHhkMTQ0NjhmOCwgMHhjODhhY2ZiYywgMHgxZmFjYjI3MywgMHhiZTAwMjVmOCwgMHgxN2JlNDYwNiwgMHhmYjU1YzYxYiwKKwkweGZmZmJjYTlmLCAweDkyZmNjYWNjLCAweGNlMWMzODEzLCAweDdkNDExZTU1LCAweGFkZGY1YmEwLCAweDY4YTc3YWY0LAorCTB4MDdiNTc5ZjIsIDB4ZmMyM2U2OTMsIDB4ZDAyZDI2MGUsIDB4MWZiNmYzOWUsIDB4ZmUwMzlhNGUsIDB4ZmM2NjBkMzYsCisJMHhiMzI1NTNiYiwgMHgyNzI0N2Q5ZiwgMHg0MThiYmUwMSwgMHgwMzk0Mjc5OCwgMHhhZjgyM2IxYywgMHhkNTFlYTBiOSwKKwkweGZkNjhjNzY3LCAweDZmNmJmMjU3LCAweGVjZDE0ZWYyLCAweGNlOTVkZmQ3LCAweGJiNjVlM2JiLCAweGNhNWU1YzE5LAorCTB4MTZmZGJkY2UsIDB4YTJjZGJiYTAsIDB4MDcxNWFhMDcsIDB4MTQ3OWJjZWYsIDB4ODRiMzdiYzAsIDB4NzY0YjcyZWYsCisJMHhiZGI3MTg0YSwgMHhiNDA2ZWViYywgMHhiZTM3MTQ1MywgMHhmZmUzMTUzMywgMHgwM2RmMzkzZCwgMHg5MzMyY2FmMywKKwkweDlhMGM3MTVjLCAweGY0ODBlZTE4LCAweDhjNmVjYjRjLCAweDYxZmM1N2FmLCAweDYwNTY2YzhkLCAweGEzYmE3YWJlLAorCTB4YTNmMDhjNzQsIDB4NmRkNjU0MWEsIDB4MTVkZTUzYzAsIDB4N2VhYjNmZTgsIDB4MzBiN2UyMzcsIDB4YzQ2ZjZmYTAsCisJMHgxYmE3MmI1MywgMHg4YjVjMzNmYSwgMHgzZWJkNjM2ZiwgMHg4ZWY4ZmRkMywgMHg5NTM5NjRiMiwgMHg1NDNiMWE2MywKKwkweGY0NmFhOWM5LCAweDAzOGUzM2Q3LCAweGEzNDRkYTM3LCAweDc3MDNlY2E3LCAweDFkYWZlMDFiLCAweGZlODM2ZmNjLAorCTB4ZWUyY2Q2MDgsIDB4ZTU4ODNhZDcsIDB4ZDAyMDBlMzEsIDB4MDQ3ZmFjMTUsIDB4M2JjMGEyOTksIDB4MzRjOGRiY2MsCisJMHhkMWI5NTU0OCwgMHgwZDFjMWQ5MSwgMHhkYTE2NWZmNSwgMHhmNjE1ZmQ5ZSwgMHhlZDdlNDRlNywgMHgyZTMwODc3MCwKKwkweDNlZmU1ZjYyLCAweDc5NjE0M2I1LCAweGE4M2FlZmY1LCAweDM2MmQ0NWU1LCAweGU0ZjhmM2Y0LCAweDcxZjI4Y2JjLAorCTB4NDE5N2Y4MDUsIDB4MjY2YzE3ZmQsIDB4M2ViZmRkMTMsIDB4MTI2N2Q5ZDksIDB4MDQ3NjJkZjgsIDB4NzNkY2JjNTksCisJMHhlNDkzM2VjMSwgMHg4ZDc3ZDk2ZiwgMHgwZmRkNDE3MiwgMHg3NGFmYzA0ZiwgMHhlOWMyZmNkZiwgMHg0YjdlYzMwZCwKKwkweGNlYmYzMTU2LCAweDE5MTUzZWU0LCAweGE0ZjA1MTE1LCAweDJiOTA0YmI2LCAweDEyM2NlMDMyLCAweGQ5ZTFkN2JlLAorCTB4YTdmMjcwOGEsIDB4YzE3MjNlYzMsIDB4ODFmNjgyOTcsIDB4MTIxZWRjZjksIDB4MDZmZGNlZWYsIDB4YmFkMjc1ZmEsCisJMHhmZTJmZmE1ZSwgMHhlODE1Yjg4OCwgMHg3M2QxNjNlYiwgMHhlNDUwN2JiZiwgMHhhNjUxNmY5ZSwgMHg5MGYzZGYwZiwKKwkweGI0NWNlYzU1LCAweDY2NDI0Y2QwLCAweDg0MmVlZmFhLCAweGU2MzQ2M2ZkLCAweGI4NWJiZjcxLCAweGE2ZmY0MDU5LAorCTB4ZWJmNDFiNDUsIDB4ZGFhZDc4ODEsIDB4NDA1MDg3YmYsIDB4MjJkZmIxYWEsIDB4NjBiNGM0MTIsIDB4MTBiY2JlYjMsCisJMHhmODE3MjNmNiwgMHhmYzdiYjA2NywgMHhiOTdkN2FhMiwgMHhhNGE4NGVmYSwgMHgxYTI1YjJmMSwgMHhlYTIwYmVkYywKKwkweDJlYzliY2ZhLCAweGIzNmUxNzlhLCAweGRiZWVmY2UyLCAweDM1ZWVjYjE0LCAweDdkODVlMjY0LCAweDg5YzliYzMwLAorCTB4Zjg5OGJjNzIsIDB4YmUzZjNiZDgsIDB4MzAzZjk2MGYsIDB4ZDI4OGJiZGYsIDB4ODVmMmQ3NjcsIDB4MzA3ZDQ1ZGUsCisJMHg3ZDgxMDc3ZSwgMHhmODk1YjE2ZiwgMHgxZTU4NjM1ZCwgMHgwYjIwMTdlMiwgMHgzOGIyOWYyMSwgMHhlZDRlYjA1MSwKKwkweDI5ZTI5NjNiLCAweDE1YzAzNDI0LCAweDUzYWMyZjU5LCAweDY1ZGU0ZTViLCAweDExNmUyY2Y4LCAweGJkNjBhMzQyLAorCTB4NjQ0MjdlZjAsIDB4MmJkNmQ1ZWIsIDB4NjkyODcwZTEsIDB4MTFlY2U4YjQsIDB4MGE3ZmUwYTUsIDB4OTc0ZDMzN2UsCisJMHhiOTdlYmEyZCwgMHg4ZmRkMWYzZiwgMHg2OWUyOGQ4OSwgMHgwZGRjYjc1MywgMHg0ZmNkMWI1YywgMHhkNzg3MzhmZSwKKwkweDUyZjMzYmE2LCAweDA1MWYzZjgxLCAweDA3MmZiMzNkLCAweDE3M2QzNjY4LCAweDYxY2M5MDgzLCAweDcxZDJiNzgwLAorCTB4ZTc3NmM2NjIsIDB4MjU2YjNjYjEsIDB4NjQ3ZDRmY2IsIDB4NTFlOTBmZTAsIDB4MWJjZWZlMWIsIDB4MTQyYzZmZGUsCisJMHhmNzg3NWY3MywgMHg3ZGI5Y2Y1NywgMHg3MWQxNzYzZiwgMHg2OWJjOWExNiwgMHhlZjUzZTQ2NiwgMHg1Y2Q3ZjQ1MCwKKwkweGM0ZmZkNmNlLCAweDJiNmI4YTk4LCAweDU1N2I5Y2EyLCAweDA0MmUzZTdjLCAweGJmZDFiZWYxLCAweGNlYWJlZDk3LAorCTB4N2RhNGIwY2MsIDB4YzVjOGI0NWYsIDB4YTFlYzRmZTQsIDB4MTA3NzdjMzYsIDB4YmJlMDJkZGUsIDB4MTM4NTI3YzcsCisJMHhjOWYwMmVmOCwgMHhjZTA0MjkxZiwgMHg2ZjE0MjllNSwgMHgxNDlmMWYyMCwgMHhiZjg4MmFjOCwgMHg3MzM0ZDk5NSwKKwkweGJmODA2YmM5LCAweGEzZDQxOGNjLCAweDhhMjY5YjRhLCAweDNmNWMwZWE1LCAweDE1ZWNhM2QzLCAweDk5ZWY3MDc1LAorCTB4MThmODZmM2MsIDB4ZWViYTZiYTAsIDB4ZmYwMWI3NzksIDB4NWI4NDE0YmIsIDB4NDFkMTgzYWEsIDB4ZmE3ZjRhY2EsCisJMHg3ZTMwOTFkMiwgMHg4MGQ3OTJlZSwgMHhlMGM1NDZlZiwgMHgwYTY0ZDkzYiwgMHhhNjNjNjcyYiwgMHg0YTJmNDBlYiwKKwkweDQxMDcxOTIxLCAweDU3NGNhNzhlLCAweDc3MmQ4MGM2LCAweDkzOGQ4YjkzLCAweGNkZTcxMjY4LCAweDBjNmRmZDA0LAorCTB4MjQzZmM3Y2IsIDB4NzEyMmI3NzgsIDB4MjU3NWM0NmQsIDB4MzY5ZmQ4NWIsIDB4N2ZhMGVmODIsIDB4ODA0ZWMxNWEsCisJMHhlNzg2MDFlNSwgMHgzMDE5MTVjOSwgMHg5NjIwZjI3ZSwgMHhmNDIxYzgyNiwgMHg4ZGRhM2E1MywgMHhjZGVhMWY3NywKKwkweGU1MDRkY2NiLCAweDEzNGJiMmYyLCAweGZiNjllMzkzLCAweGMwZjQxZGEzLCAweGQxZDVlNTRjLCAweDFkOWVhYWZlLAorCTB4NDM5ZTgwNzIsIDB4ZjU2NzBmMDYsIDB4MmNiMTVlYjksIDB4MjdlNWY5ODMsIDB4MTBmYWE5YTQsIDB4NzkyNWQ3YWIsCisJMHhmYzgyYzc2MywgMHhkYmU5ODc3YywgMHhiMWJjM2I5ZiwgMHg4Mzc3MzdlMCwgMHhiODBmZGQxYywgMHhmY2E5ZTM4NiwKKwkweDM0MDQ5ZGEyLCAweGQ2N2NiZmYyLCAweGE0ZGVmODk3LCAweGY3NGJhMmZjLCAweDY5YzllMjFkLCAweDBhNGI0OWZkLAorCTB4ZTNkYzYxMGUsIDB4N2U4YWQyNTIsIDB4YmQ0MWE1YzksIDB4MzEwZGViZmYsIDB4ZTk1NWM3ZDEsIDB4NDhhMmZjYmMsCisJMHg5NWM3NTFmYywgMHhmNjJmZGZmNSwgMHhkMTNlZmUyMSwgMHhiZmU5MjVlYSwgMHhmOWY0MTQ1ZiwgMHgzZDc4YWZlNiwKKwkweGQ5Mjc3ZTMzLCAweGM3MzgyZTZkLCAweDA3N2Q4NzRkLCAweGU0YzA0OWU0LCAweGUwOGZhZTk3LCAweGE2ZGRkM2E1LAorCTB4MTUzYTZmZGIsIDB4NzFlMmVmOTYsIDB4YjU3MmQ1NzUsIDB4MzI1OWNlZmYsIDB4YzYxMzlmN2YsIDB4YTkyYTNhNzEsCisJMHg3OWYwYTI0MCwgMHhiNDUzZTVhYSwgMHgxY2I0OTZhMywgMHg3NGE4Zjg0NCwgMHg5ZDkzODExMSwgMHg0YTcwMzVmOCwKKwkweDk5MGQ2YWFhLCAweGZlZmY4ZjI4LCAweDQ3NmI0NTkxLCAweDcyNTE0YjVlLCAweDNmYjNmMzg4LCAweGYyOTdhZDZmLAorCTB4MmZjNDEyNmYsIDB4M2RiN2YwZDcsIDB4NTFkZjliYjMsIDB4ODkzMjZjY2MsIDB4YmY5OWRlZGMsIDB4NGQwNGNhNzYsCisJMHg2ZWVmZDc5ZSwgMHgyMWY4MmZlZiwgMHg2NDhlNjc5NCwgMHhhNDdiZGZlZCwgMHgwNzJiNzdmMCwgMHg1ZDEzZTQ0NywKKwkweDUzYWU1YTQ3LCAweGYyMWFiNzkzLCAweGE1MWY5YTBlLCAweGU1MGRiYmM5LCAweDE0ZjI4NjA5LCAweGFiM2ZiZTQzLAorCTB4YTUwY2UxZGYsIDB4ZGE0MjFlODksIDB4MjFmZDI5MWUsIDB4OGViOTVkZmMsIDB4ODg1Y2QwZDQsIDB4YWM0MWIwMzgsCisJMHhkZGZjMjFmOCwgMHhmNjRjZDJjOSwgMHg1YWNiMTQ3NywgMHhiMzczMGYwNCwgMHhmMzJiZjA2MiwgMHg4NzMwN2JiMCwKKwkweDM4NWU0ZGE3LCAweGZhZDBlMDEyLCAweDkyODNjODNhLCAweGZhMGRjMTY2LCAweDMzYjgyM2JlLCAweGE3Njg3OTg0LAorCTB4ZDkwNWRhNjgsIDB4ZTA5MmFkM2IsIDB4NmJkNzZjMDksIDB4Yzg0ZGMzZmYsIDB4M2YwZjBmY2YsIDB4ZTRhZWY1ODksCisJMHhlYmE2NDRlZiwgMHhmMzdiZTBmZCwgMHg3Yzk4NzRiMywgMHg1M2RmNjExNywgMHhlYzc3MGNlMywgMHg3N2YyM2Y3YywKKwkweGNlZjdlOGVkLCAweDk0NjFlZjU0LCAweGFhZjc4NmE3LCAweDQ3MWYzMGU1LCAweDM4NTQ1Zjg0LCAweDAyZmMzYzNlLAorCTB4ZjNmYzVkYzYsIDB4NDBmNzk2YTgsIDB4ZmIyZmIwMGQsIDB4OTVlODA1NzQsIDB4MWU5ZTk2MWYsIDB4YzQxNjdhMDcsCisJMHhlM2ZkODQ2ZSwgMHgyZDcwMjE3MSwgMHgxMTRmNDdlYywgMHhlZTMwYjVkZiwgMHgwZTQzYTViZCwgMHgzOTk0OWZjMiwKKwkweDgxNmRiNTJlLCAweDFlYzMxMDUwLCAweDNmZjA4ZjVkLCAweDAwMWI2Y2VlLCAweGRhZTg5MjdmLCAweDRmOTYxYWQ4LAorCTB4MTAwOGMzNmMsIDB4ZmQzNzYyNmIsIDB4MzlmYjRjZDAsIDB4ODA2ZGEwM2UsIDB4YzU0N2U2ODksIDB4NDNlNTY2MWUsCisJMHhmZTQwYjZkYSwgMHhiMGRmZDhjZSwgMHgwMzZkNTFmMiwgMHgxZDFjMzc0NCwgMHhkYjdmMTExYSwgMHgzZWY5ZDFkYywKKwkweDFiYzk5NjJkLCAweDA2NDM3ZTc1LCAweDQxNjM1MzdiLCAweGZiNjEyYThmLCAweGI0ODczYzBlLCAweGI3M2FiOTUyLAorCTB4NmQ4ZWRjZTgsIDB4ZmY3MzFlMTQsIDB4NmVmMjhlZDUsIDB4M2ZlZGM3NWIsIDB4M2ZiMWZhNjYsIDB4OTJhMGZjMTcsCisJMHg1ZjcxYmMzOSwgMHg0NjZlZjk0NCwgMHhmNjE1MjFiZCwgMHgzZTA4ZjhjMiwgMHgwYWFkNjk5ZCwgMHgyYTIzMWJlZSwKKwkweDkwNWU4Mjc2LCAweGVlMjQ3NzNjLCAweGVmNGU5ZDFiLCAweDkxNzFkOGRhLCAweDlhMDQ4YmY0LCAweDhkYWM3OWQyLAorCTB4MmVmOTMzNzUsIDB4NWIzZGYwOWEsIDB4ZDQ0ZTgzZjIsIDB4ZjFlNTFlOWYsIDB4MjFkZjI5YmEsIDB4NWUzODM4N2QsCisJMHg4Y2Y1ZjJjNiwgMHhhMWU3NjU4ZCwgMHhkODRkZDc0NCwgMHhhZjVjZGRjZiwgMHhkODFmNTlhZCwgMHhmZmYwYTM2ZSwKKwkweGRlMGU3YTkzLCAweDM5ZTRmNGM4LCAweGM0ZWU1NDc1LCAweDM3ODE3ZjgyLCAweDFjYzllNDE1LCAweDhjOGYwN2IwLAorCTB4YmZiZDU1ZTQsIDB4MWRlNjgzMjYsIDB4Y2Q1OGYzOTEsIDB4MzZhYTZmNGMsIDB4MWQ0ZDc4MmUsIDB4NTVlNTU3MmIsCisJMHhhZjZiM2E0ZCwgMHg1NWM5NWJlZSwgMHg4ZmM5M2UwYywgMHhkNjE1YmI1ZSwgMHhmZjMzMzc2MSwgMHg4NmIzYzU4MSwKKwkweDdhODE1ZDZlLCAweDVmMzg2ZGMwLCAweGMyYTZmNWUyLCAweGUxNTRmY2I5LCAweGEzZTgxMzQwLCAweDBkYTY3ZTJhLAorCTB4ZWI4MmRlZjYsIDB4MmEzOGY3ZTEsIDB4ZDdmMWQ0OWUsIDB4MTQyZjc1ZjIsIDB4ZjYwMTFlYTksIDB4ZTEwZmI3NzQsCisJMHhkMThhZjU0OSwgMHhlOTlkNzJlYywgMHg1YWU5NmIxNSwgMHg3YzJhMWYwMSwgMHgxYzZkYjk4OSwgMHgwNDVmZmY3YywKKwkweDBjZmZhNWE3LCAweDdlZGRmZDM4LCAweGJjN2JkM2RjLCAweGZkMDM1OWM3LCAweGFkM2YyZTk3LCAweGUxYzM4ZjdmLAorCTB4OTIxMGI4ZmUsIDB4ZjEzNTMzOTIsIDB4Mzg3N2U4NTMsIDB4ZjJlYWRlNzcsIDB4NzM1NjIyZmQsIDB4YzFmNzM1YmYsCisJMHhkNTNmZDQ1MiwgMHhlNWZmZDhmNSwgMHg5MTc3NjlhNSwgMHhkNDY5ZmM5ZSwgMHhjOWZmOGYwZiwgMHgwMmVjMDFiYSwKKwkweGNhMjBlNWM3LCAweDI2M2ZlM2UzLCAweDM4ZTQyZWY4LCAweGVhYTU2NzhmLCAweDVhZmY1OWI3LCAweDZkY2UxNDdjLAorCTB4MjIyYjExZmYsIDB4N2E1NGQ4N2QsIDB4ZTY3NzcyMTAsIDB4YTdhZWY4NTEsIDB4M2JiYzM5ZGIsIDB4ZDQ2NGZkNTcsCisJMHhjNzg2YmFmZCwgMHhlMDc5YWRhMSwgMHhkMWFmN2MzYSwgMHgzY2YwZGE0NSwgMHgyODI2Y2ZlZSwgMHg2N2NiYmIzZiwKKwkweDRhNzJjNTBmLCAweGM4MWI3ZTI3LCAweDhjMThjMjg5LCAweDQxOTM1ZmM3LCAweGNkNDk3ZGYwLCAweDBlNTgxMWVjLAorCTB4YzdmNDU4ZTcsIDB4NzFjNTZkOTksIDB4M2EzMjY2NmEsIDB4NDc4YzI5YWMsIDB4NWRjODIxN2IsIDB4NzQ2ZjViODAsCisJMHhlY2M1NTQ5NCwgMHgxZGVjYzQxZiwgMHg3ZjFmYmRhZCwgMHhmOWY5OTYyZiwgMHg3NmRiMzNkYiwgMHhlZDdhMGZiZiwKKwkweGI1ZWExYjA2LCAweDU3YmM0MjgwLCAweGYxYzY0ZWE5LCAweDhmZWMzZDI4LCAweGNkOTdmZGM1LCAweGE5NjNlMTYzLAorCTB4NWM3MTg3ODEsIDB4ZDYwM2RhMGYsIDB4NTFmM2JkM2EsIDB4YWVjY2ZkY2UsIDB4ZGIzN2ZjYzAsIDB4MThlYjNhYzgsCisJMHg1NTkwZTYzOCwgMHg3Y2Y5MmYyOCwgMHhlODEzZjU0OCwgMHhlYjhmMzE1NywgMHg1YzE1MWY4OSwgMHg3MjFlODI3MCwKKwkweDFlZGJiNjM0LCAweGY5ZjM4NWUwLCAweDE3Y2FjMjAyLCAweDAxM2Y2NDNjLCAweDBmMDVhYmU3LCAweDY0Yjc3OGIxLAorCTB4ZmQ1ZTRkZGQsIDB4NmI5ZDA5M2QsIDB4ZjlkM2Q4MTIsIDB4MDlkODZkNGYsIDB4M2I0MWYwNzAsIDB4MWZmZmY0MTcsCisJMHhlNDFmNzg0ZSwgMHhjM2JkODg3YiwgMHg3ZWRhN2UyNSwgMHg0N2ZkYTQ3OCwgMHg5NzYwZjdjMCwgMHg0OWZjZDkxNywKKwkweDE2ODk1ZGE1LCAweDU4YTNmNGU3LCAweGZkNTM5N2VlLCAweDllM2I1Nzg0LCAweDVmYjE4ZTNhLCAweDAzNmM4ZTdhLAorCTB4MGY3MGEzN2UsIDB4ZjBhODNiYzEsIDB4NTlkZmQ4Y2YsIDB4NDEzN2NlMzAsIDB4NDZjMmZmMGUsIDB4OGE1NmU3Y2IsCisJMHgzYzI5MmI3MSwgMHhiODlkY2I3ZCwgMHhmM2JlNzU1ZSwgMHhhMjM3YzM5MiwgMHg3ZmQwYzI5ZCwgMHgwYjJjYmRiYiwKKwkweDc5ZWFlN2VjLCAweDM5YTQzYzg4LCAweGU0NWMyMWZmLCAweGY4ODQ1ZTQ4LCAweDU3M2M2MTAxLCAweGNmY2VmOGY1LAorCTB4Mjg3M2M2Y2QsIDB4NjhiMzdmMjEsIDB4MmJiZjc1ZWIsIDB4ZmNjMzA0NTAsIDB4ODIyOTVkMzksIDB4ZTNlNmYwMTksCisJMHgxY2IyZmVmNywgMHhlYjcyMGI5ZSwgMHg1MGViMDJmZiwgMHg4MDAwNTg5ZSwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKKwkweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3YzBiLCAweDczYjlmODk5LCAweDMzMzJiY2VmLCAweDQ5MzI0Y2M5LAorCTB4OWI4ZjIxMjYsIDB4ODA0MDIxMDcsIDB4NTIwMjRjNDksIDB4MTg3ODQzMWYsIDB4YTQwNzZiMzUsIDB4NDM4YjViMTYsCisJMHg5MjExMjNjMiwgMHhiMTc1YjY4OSwgMHg1MTAwY2I2NSwgMHg4ZDA0MjIwOCwgMHg0MTM4MGFiYywgMHhiYjZiYmE1MCwKKwkweDA2MDIyMmMxLCAweGI2YTJkMTFhLCAweDZlYjQyZmVhLCAweGZkZmVlZDU3LCAweDU4Zjg4ODQ1LCAweDE2NTQ0NjQ5LAorCTB4ZWZmZmFkNWIsIDB4OTliOWNlZmIsIDB4NTE0NDkzYjksIDB4NjdmNGRkYmIsIDB4NzM5ZWU3MmYsIDB4NzdjZWY5Y2YsCisJMHhjZWY5ZjdiZSwgMHhlOTlhMTYxOSwgMHhmNDY2MmRlYiwgMHhmYzNlNzlmNywgMHgzMzU3N2Y4NywgMHgzMDM0ZTg5NiwKKwkweDdjZDhjYTk2LCAweDk2NzczNTk5LCAweGViNDdkZjQ0LCAweDZkNjdhYTI1LCAweDM0OTY3ZDViLCAweDBiYmMwMmM2LAorCTB4NjZmNTM2ZTYsIDB4NjA3ZGExZmIsIDB4Njk0ZGY5YjksIDB4ZWI4OGJjMjIsIDB4NjMzMGIxOWYsIDB4YjU2ZDhjMTUsCisJMHg5OTM1OTBiMiwgMHhmNDEyNmRiMSwgMHhiYmNmMGU1MywgMHg3OTM1ZTE2YywgMHgyMzU4MGQ4YywgMHhjNjAyYjA4ZiwKKwkweDU5YWZjNzgyLCAweDFiZmJlZjgwLCAweDRkMDY1NDEyLCAweDA4NTg5ODc2LCAweDhlZTNhMWNiLCAweDU3NmMzZWYwLAorCTB4NjRjNDViZDQsIDB4N2MxODA3YTgsIDB4MjRiZTc4NmUsIDB4MGQyNDg0NzcsIDB4NWU5YWM2MDgsIDB4ODdhY2Y3OTIsCisJMHhhZTQ3ZmQ3NiwgMHhiMmFjZmRlNSwgMHg0MWNhMGNhOSwgMHhiOGMxMzZhOCwgMHg1NzVmZDBjMSwgMHhhNGM2NDRiMiwKKwkweGZmMWExNjM5LCAweDZjMjkyMWNjLCAweDY2YzNmYWM2LCAweDg1ZTBkM2U2LCAweGJmZTFmYWZmLCAweDJmMTgzMmZhLAorCTB4MjcxOTA4NmMsIDB4MTAyYjEzYzEsIDB4ODIzNmMzOGUsIDB4NDBkYTY2MDMsIDB4ODEzZjdkZTMsIDB4OWJmMTg3YWQsCisJMHgwMGNmOTIwYywgMHg4ZGI3NGRmNSwgMHhmMGUxYWYwYiwgMHg2N2UwMTg1OCwgMHhjOWFkMDA5OSwgMHhlODI0NWFjMCwKKwkweGI1ZTA1MzJmLCAweGU4YmE3MGM5LCAweGE3NWUxMjhlLCAweGY4YTViYjQwLCAweDNkZGE5NTBmLCAweGNiOWMwMTJiLAorCTB4NjQ3YTFiMmMsIDB4ZTEzOTkzODAsIDB4MGRiZmE4M2YsIDB4ZWJhMmYzZWIsIDB4YmZlMWI0ZDAsIDB4MzQ3OWMzM2YsCisJMHgyZGI4MDQxZCwgMHgzZDk3Yjg1MSwgMHg2ZGM3OWZhNiwgMHgyN2FkMTRjYywgMHg3ZWI0NDNiOCwgMHgyZjhlNzJiNiwKKwkweDQ3ODU4MzM2LCAweDUxMGViYzAzLCAweDg0Zjc1NWI2LCAweGYyYzdjNDY1LCAweDY1Y2NlY2U5LCAweGVmNDRmNGQwLAorCTB4ZWIxZGJmMmMsIDB4M2MyZDU5M2IsIDB4NWYzMGVmODMsIDB4ZGE5ZWUwMTgsIDB4MjhjY2YxZDUsIDB4ZWVhYWVmNjgsCisJMHgwNmU5YzZjOSwgMHhhMGIxZmY5NywgMHgzYWU4YjJlZiwgMHhkZTVlNzA2YiwgMHg3NjY2NTliNSwgMHgwM2JlOGYxYSwKKwkweGVjMDc3YzUwLCAweDljZWM2ZWQ0LCAweGQ1Y2ZiMTA5LCAweDQxYWE1ZGY0LCAweGViYzcxNWJlLCAweDg4MTk1N2M1LAorCTB4MDQ4NjVmMWMsIDB4Yzg2OTZjZTMsIDB4ZGFiYWUwMzcsIDB4YjAwNTc4MTQsIDB4YjMxYjZhMmUsIDB4ZDllMTE1NjcsCisJMHhjMWM3MzQ1NywgMHhlYzg5ODNkOCwgMHhkM2UxM2Y1NiwgMHhmZTg3ZTk1YiwgMHgyZDU2NzUxZSwgMHhlOTdmNDI3NCwKKwkweDlkNWJhYWFlLCAweGJmMWM3Y2E5LCAweDAyOWZhNzAzLCAweDZiYTUwZDQwLCAweDQ3ZTFhOWVkLCAweGQwNWU5NzZiLAorCTB4MWY2Y2RhNWMsIDB4YzRkYjlkYjksIDB4OWVkOTE2ZjEsIDB4ZjA4M2RlMTQsIDB4MTc5NTEyMjgsIDB4YjFkOGRlZmYsCisJMHg4ODUzZTA5ZSwgMHg5NWQ4ZWU2ZSwgMHhlYmY4NDYxNywgMHhlOTA5OWI1OSwgMHg5YjBiMTk3YywgMHg1YjE3OGU5MCwKKwkweGU4MTEyODU4LCAweDRiMzQzMTYyLCAweDZkOTJlNzgyLCAweGFjYzZhNjY2LCAweDVmNTg0MzVmLCAweGFlMWNlZDY2LAorCTB4ZDNmNzRhNjUsIDB4NGRkMjIyNTIsIDB4NzRiM2Y1MGYsIDB4YjJkZGJlYmYsIDB4MDFkYmFjMTksIDB4ZDYxNjhkZjUsCisJMHhhNzY3YzM2ZCwgMHg0NTg5YmViZSwgMHhlMWUwOGUwOCwgMHhmZWJhY2RjZiwgMHhjM2FkMWI1OSwgMHhjODYzMmI3NiwKKwkweGJlNjU0OWE3LCAweGZlMDFiYmJjLCAweGVmNDYwYmM4LCAweGI3Y2ZhMDFlLCAweDc4NjhiYWM0LCAweDM1NTY3NjQ4LAorCTB4NjQxMzllMjAsIDB4YjIzM2NkMDMsIDB4MDNkZTE2Y2EsIDB4YjAzM2VjZjMsIDB4NGRlNzVjN2EsIDB4MWNlYjc2MmUsCisJMHg2NGFmZjY3OCwgMHhhMTIzNDJiZSwgMHg3N2FlMjI2MywgMHgxZmQ3M2UzYywgMHg3ZDIzZDZiNSwgMHgxM2Y5NDE2YywKKwkweDM4MzczZjQzLCAweDVlZTc4NDhkLCAweGJlNDdhYjEzLCAweGZkMGQ1Y2E5LCAweGE2YTVjOGM1LCAweGZjMDFlYzliLAorCTB4OTcyNjk3NmUsIDB4YzQ2ZjlkNjAsIDB4YTg2YjY2NzUsIDB4OWU5MWVkOGMsIDB4NGZlMzJlMTIsIDB4ODNiZGJiZWQsCisJMHhhN2YzMzdlZCwgMHg0YjdiZjljMiwgMHhhZTA3NDI0MywgMHgwY2VlOTQ1MywgMHhjNGFlZTg4YywgMHhmN2MwMGE2ZiwKKwkweDU4M2M4NTQ3LCAweDM4ZmRmOTYwLCAweDQwYTNmN2E0LCAweGExZjdjODA4LCAweDBiOTcyYjRlLCAweDcyZmU3MzhhLAorCTB4YTc3ZDFmMjgsIDB4NDU1ZWJiYzQsIDB4ZTI3MmUwZmEsIDB4ZDgxMmY3ZTgsIDB4ZjlmMjE4NmEsIDB4ZGVmNWZlZjcsCisJMHhmY2ZlYTE5NywgMHgwY2Q1MjYzYiwgMHg0NjkxMGJmNSwgMHg0YThmM2Q2MCwgMHg4NWUzODdjYywgMHhmNzg3MzA5ZSwKKwkweGMwNjViYmMxLCAweGIyY2YwOGI2LCAweDI4YzIxM2UzLCAweDAyOTkwZWRmLCAweDM4ZTExN2RiLCAweGZiYmQxYjhmLAorCTB4ODk2NWJiZTAsIDB4NDIzYzVmZTEsIDB4YTA1ZTE5ZjUsIDB4OTE5NGY2NDQsIDB4ODhlODYxZDMsIDB4MTA5ZjdmOGQsCisJMHhiOTVmYjdmZSwgMHgxYmRkM2ViMSwgMHhhYzdiZjY4MiwgMHgwN2M4MTM4MSwgMHgwOTM1NjY5OSwgMHg5N2JmNjVmYiwKKwkweGJiYTcxZjE5LCAweDNiZjgwNWM4LCAweDgyNGFmMzhkLCAweDM4NDk1NDI3LCAweGZhODM5NzRlLCAweDU4Y2FmZTAxLAorCTB4Njk5Y2ZkMDQsIDB4ODBmOWE3NGQsIDB4MzhlMWY0ZGMsIDB4Zjc5YTM2NjcsIDB4MzJkY2RjYTAsIDB4ZWQ0NGFlMzgsCisJMHhiM2ZkMWI0ZiwgMHhmYTdjYTAzMiwgMHgyYWVmNTI4OSwgMHg5YmYwMWFhOCwgMHg3ZjQwNGRiYSwgMHg1ZjRiNGRjMSwKKwkweGVhMTdhMDY0LCAweGM0NmVlYTBjLCAweGEzNmUzYjBmLCAweDExZWI2ODc5LCAweDA2YTRiOGRjLCAweGFkYjc4M2ViLAorCTB4ZGFlNTAxYjgsIDB4NzI4OWZjNDgsIDB4YmJjOGM1OWEsIDB4NDFjOTE2N2UsIDB4OWY1MWRmZmEsIDB4ZmE4ZGQ5ZGYsCisJMHg1N2FjNmJhMCwgMHgyYzBmNWFhNiwgMHg5Mzg3ZDAzZSwgMHg3MjMzZWRiNywgMHgxOThlNDZmYywgMHhiNTJmNGY4OSwKKwkweGE1MGJhNDdmLCAweDFjMGZlYjkyLCAweDk0ZjIwODI3LCAweGYyNDJmYzY5LCAweDBmMmNhNjM0LCAweDE4ZWJlNjU3LAorCTB4ZmM0ZTlhM2MsIDB4ZGIzZjVmMWYsIDB4ZjkwOGY4MTEsIDB4ZmZmZWU5YTcsIDB4OGFiOTYzNzksIDB4OWU0ODQ1ZTMsCisJMHhlMjU0YjZiMSwgMHhkYmJiODAzMywgMHg2ZGY3ZGYwMiwgMHhlNTVmMTA3NywgMHhmNzBmNTBhZSwgMHg3NDFlYmFlMiwKKwkweDMzNWQzY2QxLCAweGNiMDNiMjdjLCAweDNjYThmMzNiLCAweDFjNmRjODU1LCAweGUyYzZmNTE2LCAweGNhZjQ4YzI5LAorCTB4NThiNTk5NjIsIDB4ZDE3ZGU4Y2EsIDB4ZjY3ZjY4NzYsIDB4Y2Y1YTZjODksIDB4Y2ViNjY2YzUsIDB4MzZjZTdjMDIsCisJMHhkYjNmZmE3MCwgMHhmMDBhNzIwMSwgMHgyNWVlNjc1MywgMHg0ZGZlY2IzOSwgMHhiNTE4ZmI2MiwgMHhjYjc2YzE2YiwKKwkweGIyOGM5MDYwLCAweGI5NDM3OGExLCAweDM4NWJjM2E1LCAweDdmZmEwY2E2LCAweGU5MDc2NzZhLCAweDhhNzIwNjAxLAorCTB4OWEwNWQ4YzUsIDB4YTRmOTQzMWMsIDB4Y2RmZDllZmIsIDB4NDg2M2M3YWMsIDB4YzdjNGI3OTMsIDB4ZDlmNGE5MzAsCisJMHgyOGYyYTIxMywgMHg3MmNmZTlkOSwgMHgzMGExNjA1NSwgMHg1Njc3ZjExZCwgMHgwNGU5ZGMwZSwgMHg4NTg0YjZmOSwKKwkweGIwMzYzZTQ4LCAweGUzNmE3YTZlLCAweDcyZTViYzgxLCAweDJlZTVjMmQ3LCAweDQxMmUxMzNlLCAweDNhYzZkZWZlLAorCTB4YTIzNjZlNDksIDB4ZWU0ZTFhNDQsIDB4M2JiOTAwYWUsIDB4Y2JiOTY0NzEsIDB4ZTIyOTczNTgsIDB4ZGQ4Yjc4MzUsCisJMHgyMjFlNzg4YiwgMHhkNzdjODU3ZiwgMHhjNGRkMzFkNiwgMHgxNWQ0ZjBlNSwgMHg0NDk1OTk2MSwgMHhlODlhOTBmMSwKKwkweDExNWE5NjliLCAweDU3YzFhYmQ1LCAweDEyNzUxNjJkLCAweDFmMmNmZDk2LCAweGRhNjNhZGU1LCAweDdkNDFhN2JmLAorCTB4OTQzZTYxNTAsIDB4ZTYxZWI2OWIsIDB4YmJmNzgwZWIsIDB4ZjNmNWZkODQsIDB4ZjFmYTk1MzQsIDB4MTg1ZDM4OTgsCisJMHg4NTJiM2YxNSwgMHg5ZWFhY2FmYSwgMHg0OWYyMDM2ZSwgMHhiY2EyNzMyYSwgMHhmZWYwZjQ3NywgMHhiYmUwMzk3NywKKwkweGNiOGVmYzMyLCAweDJkZWZjMWNkLCAweGU2MjEyNWFjLCAweDU2YTNhYWZiLCAweDQ3MGJhM2EyLCAweGU5MzM2MTFjLAorCTB4MGJhZTQwYzMsIDB4YjNmYjRiZmEsIDB4ZmVhNGVjOTksIDB4ZjM5MjBlYTMsIDB4YWYzNjQ2ZmQsIDB4ZDFiYmRhMTMsCisJMHhiY2Y1YTIxZSwgMHhhZWZiZmE4NywgMHgyMTllOGYyYiwgMHgyMThhMzU1NiwgMHg4ZGQ3NGFlZCwgMHhlY2Q2NTY0MiwKKwkweDllYmNjNjgzLCAweDFlZGY0ODliLCAweGM3YzhhYjMwLCAweDc3YmQ1YzE3LCAweDYzYzYxOTYyLCAweGVkYmYyNzI4LAorCTB4ZjA1ZGE5NTIsIDB4OWZkMmY0ZTAsIDB4ZGZhMGZiYzIsIDB4MGRkOGU1ZWUsIDB4OThiZDIyOTQsIDB4NjRkZDFmZTUsCisJMHgyNTliNzU4MSwgMHgwNWRjODhhZiwgMHhkYjY2MzY3MCwgMHg2Nzg3Mjg5ZCwgMHg5ZmQ3ZmVlNCwgMHhiYmYyODY2ZSwKKwkweDhjY2M4ZDA3LCAweGZhNmZiZWViLCAweGIyM2Y5NjNjLCAweDFiMDg2ODljLCAweGQwYzZmNzRmLCAweGZhZmRkMmViLAorCTB4YmVhNzYzNzIsIDB4MmZhYzNjMWMsIDB4Yjg3MmUxZGYsIDB4ZGUyNzhlY2YsIDB4ZjQwZTdlZjQsIDB4YmYzNzM2NjQsCisJMHg5YWYwMDFkMywgMHhkYzkzMzI5ZiwgMHhmODE1ZGViYywgMHgyNmU3YTQ2NywgMHhlMjI0ZTQ0MywgMHhmZWZiOWNkMSwKKwkweDczYWUwMGM0LCAweDNlMTIwN2Q3LCAweDNkMjY0MGNkLCAweGM4YmYxYzI1LCAweDBiYWMxNzU3LCAweGQ4YzM5ZDcyLAorCTB4ODU3YjUxZWIsIDB4NDc4NDBjNTksIDB4NTEzZDA2YjAsIDB4MjBlNDEwZjksIDB4ZGVmOTVmMDEsIDB4YmZlNjFhN2QsCisJMHg3MzgyNGU3OCwgMHhkNWYxYmQzNSwgMHhiZGEyNTQ1NCwgMHhlMGIyMzA0MiwgMHg0NWRmNmJiNiwgMHgzNWRhMWViYiwKKwkweDBkOTg5YzkwLCAweGZhYWUwMGVkLCAweDJmNmU1YzZkLCAweGM4ODkzZDYzLCAweGQ3NjA0ZDBmLCAweDdmMDk2MDU4LAorCTB4YjFmNGUyZTcsIDB4ZDk1MjI1YjQsIDB4NGY2Y2ZmMGQsIDB4NzA4YjFlYWUsIDB4N2UyOTlmMmEsIDB4ZDhiNWZmNWMsCisJMHhmNjFkOGM2ZiwgMHgxZGZiOGI5MCwgMHhkYjViZjc0YiwgMHhhMWY4NjJmYSwgMHgyYmE1ZDNiMSwgMHhiNDY3MGYwNywKKwkweDVkZTJjNWY1LCAweDI1NTMzZmYwLCAweGI2ZGVkNjI1LCAweGI5MGYwMjFiLCAweDdiMGY5MTUyLCAweGZjNjBkMzRkLAorCTB4ODhmYjNmYWIsIDB4ZTU5MmY3ZjQsIDB4MGE5ZDkwY2YsIDB4ZWRjMDU4ZjMsIDB4NzI4YWFiMzYsIDB4NGY1ZGM5NzUsCisJMHgyZmNkN2JkMywgMHgyNzZkOWIzOCwgMHhlZDk5ZTBiZiwgMHg5OTc2NWU2NiwgMHgxNzc2N2NhOCwgMHg3NDk2NWJmNywKKwkweGE3OWM2MTRhLCAweGNhNjJlNzM0LCAweGJiYTc5NDM0LCAweDFiMzM0ZThjLCAweDNjNzhkNzhhLCAweDNmZjNiZGJlLAorCTB4ZjU0YzE5MTMsIDB4ZmEzYTQyNmQsIDB4MWJiNzEyMTMsIDB4NjQ4OWNkOWMsIDB4ODljZGFhOWYsIDB4YjcwNTFmNjgsCisJMHhjYTJlZjM1ZCwgMHg2NGJiMjVhOSwgMHg3NjM1ZWEyZiwgMHhjZDFkZTFjYywgMHhlYzczM2NiMCwgMHhmM2Y2M2IyMiwKKwkweDgwMzRjYTYxLCAweDRjZjc3ZGEzLCAweDY1ZWY0Y2E3LCAweDQ4ZjkxODdmLCAweDBkNWNmNWYxLCAweDkzZGQ5NWVmLAorCTB4NjdiN2U0NTUsIDB4OTdmODcxNzcsIDB4MjA4ZjJjYjgsIDB4OTlmZDVkMWQsIDB4NjJiMjc2NGMsIDB4Y2ZiNDAxNjAsCisJMHhiMWJlNGRkYSwgMHhjZWVhYjdjOCwgMHg3ZDcwYjM3ZCwgMHg2OTlkOWVkZSwgMHg5NGJmZjZhMCwgMHhlMmYxMTM5OCwKKwkweGVmODY5ZTVhLCAweDFmOGE0ODk3LCAweDViN2ViNGY5LCAweDdlYWM0ZDQzLCAweDEzMjVkNWJlLCAweDVkY2I0ZGJmLAorCTB4Mjc2YmQ2OTEsIDB4ZjUwOWJhYmUsIDB4ZTAyZWUzNTUsIDB4Y2U3ZjFjMjMsIDB4ZDliYTdmZWIsIDB4NjkyYmU1MWQsCisJMHhhNjFiYjZjZSwgMHgxYThmZmY2MiwgMHg4Mzc3YzhiZCwgMHgzZmU3Nzc3YSwgMHg1ZmUxN2QxMSwgMHg2ZGNhMjU3NywKKwkweGNhNmZhZjhlLCAweGM2OWI2NjY3LCAweDI4NDVjZDI3LCAweDZlYWM5NzNmLCAweDYzMGU3MjJlLCAweGM5ZjIwZmNmLAorCTB4NmY5N2NlNGUsIDB4YjdlZTI0YjksIDB4ZWNlYjI1NjYsIDB4MDBmYzkxZGQsIDB4ODdjMWIxN2IsIDB4OTk3OGI3ZjgsCisJMHhkMzNjMWY2ZiwgMHg3ZjQzMGRjMSwgMHhhMTU5MjEyZiwgMHgxMzY0ODRmYSwgMHhlNGY5NDllMSwgMHhhOTJmZmQ4ZSwKKwkweDNlMDcxNzY4LCAweDY1Y2NmYTQ0LCAweDI3ZDQ1MmJlLCAweDk1NTljNDZhLCAweGVjMmI3NDg0LCAweGRiOTNiNjA1LAorCTB4OTA3ZjYwODEsIDB4OTUyNWI1YmQsIDB4YzYzZWIyM2QsIDB4ZmU4OTMzZmYsIDB4OGE3YzRlNDAsIDB4YjVmZmEyNzIsCisJMHg3ZTIyNGY0ZiwgMHg5ZmRlNzI5YiwgMHg3ODNhZmE4OCwgMHgwYTkzMjNmMSwgMHg0OTc3YjVmMywgMHg1ZWVkYmYyNCwKKwkweDA5YmE0MzNmLCAweDBiNjZjZDc2LCAweDM3NzJhMjRiLCAweDIxN2FlNWU4LCAweDI2Mzc1ZTdlLCAweDc1MWNiOTFiLAorCTB4YWI5ZmE4NDcsIDB4YjczZjM4NTIsIDB4ZDNkMTE4YmIsIDB4NjQwOWU1OGUsIDB4ODc3MGVlOTcsIDB4NTdmNDA4YWQsCisJMHgyOWY2NWJlNSwgMHhlNzU4NzU2OCwgMHg2NzVmMGIwNiwgMHhmYjVmZGVjYiwgMHhiMGYzYTQ2NCwgMHg2NThkMWNlNCwKKwkweDQwYzdmMzk1LCAweDBjYjBmY2ZkLCAweGI3YmJiY2UzLCAweDgzZTU0NDIwLCAweGQ0MzJiY2QzLCAweGJjM2VmN2Q5LAorCTB4NzRmMTFmMmUsIDB4ZjZjNWU4ZDgsIDB4MjI2ZjZmNzYsIDB4YmRkZGVmY2UsIDB4N2U3MTEyNjcsIDB4OWE2NTdiZjUsCisJMHg4M2Y4N2Q3NywgMHg1MTI1NDViNCwgMHgyOTE3ZjEzOSwgMHg3NjhjOTA1MCwgMHhjN2IyNWI4MiwgMHhmNzc3OGJjYSwKKwkweGQwYjY5ODdlLCAweGQyNTNmZGNlLCAweGUzYzNlNTk3LCAweGFkMzVkZDI1LCAweGZhYmZiZjE4LCAweGVmMmViZTJhLAorCTB4NDYxY2QyZmQsIDB4MTU5ZWY4MzksIDB4ZmM4YzU5ZjQsIDB4ZjVjMWNmN2QsIDB4Y2Q2NGQ0ZGIsIDB4NDFjY2U4Y2YsCisJMHg1NjU4MzNmZCwgMHhmYzcwMWFjNiwgMHhmY2Y5MzkxZiwgMHgxY2NlYTZkZCwgMHg5NmZmY2JlNCwgMHhiNmRjZmRmNCwKKwkweDkwNjE2NjRlLCAweDI0ZWIwZDRiLCAweGZmOTkwNjE2LCAweGNjOWUyZmRlLCAweGVlZmZmOTQxLCAweDZhNzMyN2JlLAorCTB4ZmY4YmUwNjMsIDB4ZDBjZTdiNGUsIDB4OWFmMTEzYzYsIDB4ZDc4ZGE2NWEsIDB4ZDVlMzg1OWQsIDB4YTI2ZmNkN2EsCisJMHg2NmViNjE5YywgMHgyNmY5MDZmYSwgMHhkYjYzM2Y5ZiwgMHg4YTNlNmRiMywgMHhkNzAwMGNhNywgMHhkZjZhMWQyMiwKKwkweGY4MjdkNDBkLCAweGNjMmViODJjLCAweDRlOTBjNjEyLCAweDZkZGM5NzZkLCAweGJlN2NmZWM2LCAweGRmZGEzNzQyLAorCTB4ZmQ3MWY3ZGEsIDB4OTI3YTBhYjcsIDB4YTdlNDRiMGUsIDB4MjQyMjRhZGEsIDB4ZmNiNmJmOWYsIDB4MTNkN2U4ZjcsCisJMHg0Yzk4ZDlkNiwgMHg3MjcyM2ZmMiwgMHgzMGZhMjMxNCwgMHg0ZDRjZGUyMSwgMHg1NWY1MDU3NiwgMHg1ZjRlMWFkYSwKKwkweGM4MWIxZjkxLCAweDI0Mjc3MDFmLCAweDNmNjA2NDRlLCAweDc2M2QzMjk5LCAweDE3NTc2Zjk0LCAweDkyMThiNDI1LAorCTB4MTg0ZTdkZjAsIDB4MTY2NzY3ZGIsIDB4MmFhMTc3ZDMsIDB4MzRhMWZmNGUsIDB4MGM5ZTcxNDYsIDB4ZmYyMTJjZDYsCisJMHg5N2I3MjczMiwgMHhlNzMwYTZiMywgMHg0ZmVlMjg3YSwgMHg4NzhjNzZlNiwgMHgwNWM5Yjc3OSwgMHhjNjEyZmViNCwKKwkweDY4YmMzNDI1LCAweDA4ZTkwMWZhLCAweDkyN2JlNWU1LCAweGVhNDhlODg1LCAweDk0N2VjODkyLCAweGIxZjM5ZDBkLAorCTB4ZWFlODkxZGYsIDB4OGFkNzVjNmUsIDB4OTYwZDVkMjgsIDB4YjU3NDQxZmYsIDB4MDg2ZjFiNDksIDB4YTI1NDA1NWQsCisJMHg3ODY1OGYyYiwgMHhmNjI1NTJiYSwgMHg5MGIzZGE5NSwgMHg3NGFmZmQxZiwgMHg0MjRkYWY4MSwgMHg2YzdlNDRmZSwKKwkweDQwMTZmMWUxLCAweDQ2YjdjZTE5LCAweGIxNjM1N2Y0LCAweDQ3YThjYjc3LCAweDYzZjdjNmJjLCAweGMxM2I4ZmUzLAorCTB4MjVmZjQ1ZWUsIDB4Nzg3Y2VkMDMsIDB4NDBiMzVhOGUsIDB4M2Q2Mzc1YTUsIDB4ZGFlZmU4YmQsIDB4NWY0ODViMjYsCisJMHhjOWU4NmJkZSwgMHg3ZDI2M2I0MywgMHhhNDAxZjM1YywgMHgyNWY5ZjQ4ZiwgMHg2ZmM4NmI2NSwgMHg1ZWExNzJjYiwKKwkweDcxNGI1ZDQwLCAweGZkZDNlNTg3LCAweDdlODA4ZWRjLCAweDliNjY4ZTkxLCAweGJhNmIzZmM4LCAweGRiOWY5YTZiLAorCTB4MmZjNGQ1MTEsIDB4MTU1NjBkYzEsIDB4YWVmNGUwZjUsIDB4Zjc2NDU1YmMsIDB4MzM1ZTYwYWYsIDB4ZjZjNzcxZDEsCisJMHg5YzJmMThjNSwgMHhhY2EyZjc2YiwgMHgyMTNjNjJiMywgMHhlN2FmZTcwNSwgMHg5M2E5NTZiYiwgMHhiNWQwZjFlYywKKwkweDVkNzI4YmNjLCAweGJiYjY0NzhiLCAweDE0ZmY3NzdhLCAweDA5NDM3ZmY1LCAweGYxODNmN2Y5LCAweDdhNDY0MmM5LAorCTB4Y2JlNWRkYTMsIDB4MWViYzA2NDgsIDB4YTc4ZjFiZmEsIDB4MTk0Mjk3YjUsIDB4ZjU4OTRmOWUsIDB4Y2JlZDlmNmMsCisJMHg3NmI5NDE3MCwgMHhkZWYwOTU4MywgMHgwN2ViYzFkZSwgMHg0OWEwODAxYywgMHhmZWE0YTcxNCwgMHhlYjg1OTI1OCwKKwkweDgxZjJhMWExLCAweDUzNjk5YmUyLCAweDBkYjdmNjk4LCAweGI5NWE5OWNiLCAweDQxZDkyYjZkLCAweGU3YjdmZjFhLAorCTB4MjUxYzc4NzEsIDB4YzhiNDNjZmUsIDB4ZjFkY2RmMmYsIDB4NDdmMDAyN2MsIDB4YTY4ZGM2MWEsIDB4YjQyMTE3ZDIsCisJMHhjOTJlMjlmNywgMHg3Y2I2MTRjYiwgMHg2NDgwMDBkMCwgMHhlYjI3ZjE2MiwgMHg1YjExNWM2NywgMHhkZmEzZWRlNiwKKwkweDdhYzdhZjViLCAweGY1ODNiZmQwLCAweDY1ZTgzNjA4LCAweDAyYjNlY2FkLCAweGQxMWQ2YjFjLCAweDYwZWMwNTdhLAorCTB4N2M0OTYxY2IsIDB4MzM3NWU0ZmYsIDB4OTJmZTYxMGIsIDB4OTNmNDNmMTgsIDB4YWZjNjFmNTYsIDB4NWUzNzRjYWMsCisJMHg1YzRhN2MyYywgMHhkZmU4NDZmZiwgMHg3N2VkNmFhZSwgMHgwNjg0Y2Y1NiwgMHhlNTY5OTYwZiwgMHhiMmY5ZDc4ZiwKKwkweGJlYTMzZmEwLCAweGY4YTk0MjNmLCAweDc4ZGEwYjFlLCAweDYzMzgzZGNmLCAweGE4YWM4NmZkLCAweGMyZjYwMDdkLAorCTB4MzRjZjI4MjcsIDB4ZWJlZDYxM2IsIDB4NjA5MzZkMzUsIDB4NDNmMzliMmMsIDB4NGQ1ZmVhMTMsIDB4MTJkZDA3ZGYsCisJMHhmY2YxMjFkOSwgMHhiZTkxNGI2YSwgMHgwODVkN2Q5OSwgMHhjZWE1NzVmNiwgMHg3MGE1YjZiZSwgMHhiMjE2N2FmYiwKKwkweDI0MjVmODI0LCAweGZjMmI4M2JmLCAweGIwNWJlZDBjLCAweGJlYjA5MjRiLCAweGNmZjdiNWZmLCAweGZkZjUwZDNlLAorCTB4NzI3MmZlNzMsIDB4NmVlZDhhOTQsIDB4NTU3ZThmOWYsIDB4ZjI0MmEyZjAsIDB4MGU1ZmI4MzcsIDB4OTYzN2MwNGIsCisJMHg4MzU3NmUyZSwgMHhiNDc4YTczZSwgMHgzOWI3M2Y0NiwgMHg0MmI4ZmQwNSwgMHhlZDZjZTMwYywgMHhhNDBhYTRjNywKKwkweDczYTNmMDc3LCAweGY5NmIwM2JlLCAweDY2NWYxNGEzLCAweDlmZDQ0NTRhLCAweDY1Zjc5ZjhjLCAweDE4OWUzYzI5LAorCTB4NWVkYWFlMmMsIDB4OTVlZmZkODQsIDB4ZWIwYmRhMTgsIDB4MmRhNzRmOGIsIDB4Y2RlYTdmMjQsIDB4ZGYzMTQ1YjQsCisJMHg5MDdlMWMzNSwgMHhkZmIwZDlmMCwgMHgyZjFlMmMzOCwgMHg4ZjA5OTE0YiwgMHhmMDllNDc0ZCwgMHgyZjc4ZGNhMSwKKwkweGE4NGM5MTJjLCAweDY4YWRjMjU3LCAweDFiZDdkNmQ3LCAweGU1NjQyMmQwLCAweDUzMzcwNWUxLCAweDg5OWU3ZDdjLAorCTB4NjVmOTg2OGQsIDB4ZGMxNzdkMDgsIDB4MmE2ODYzN2YsIDB4OTNmZTFiY2UsIDB4ZmYwZWQ1ZTAsIDB4M2IxMzkyNjIsCisJMHhiNGVjNTllNiwgMHg3YjVjNTE0ZiwgMHg5OWMxZTEzYiwgMHhhYzNjNDNlMCwgMHhjMGNhYWUyZiwgMHhjZjY2OWE3MSwKKwkweDFlNWM1MjcyLCAweDZmYWMzOWVjLCAweDE0N2JlYmJhLCAweDVhZTBkN2E3LCAweDhkNThkODdmLCAweGQ4MjU0ZWY2LAorCTB4YjgwNmJmNzUsIDB4YWJhZjkzYjMsIDB4OGY1ZjAyZjYsIDB4ZmU5NDBmOTIsIDB4NDY1YmNhMTAsIDB4YmEyZmUzOTAsCisJMHg0OGI0NWQzOSwgMHhjYmI3ZDBmZSwgMHg2MmM3OGUyOSwgMHg4N2I5NzJlMywgMHg3ZDc4ZmRiOSwgMHg2OWRhODk4YSwKKwkweDUxNGZhZmVmLCAweDg0NTdhZjA4LCAweGI5MjNhNjdhLCAweDZkN2E1NzFjLCAweDk5MDc1NzY4LCAweGFiZjQwM2VmLAorCTB4ZWVhZWRmOTksIDB4ZjJlMjc1YTMsIDB4YTU1MmJkY2IsIDB4ZGRjNTkzNzgsIDB4YWMyNGVmN2IsIDB4N2YyMTQyYmYsCisJMHgwZmJkMjk4NiwgMHhhZGZkYjhlMCwgMHgyNjdhZWY2ZSwgMHg3N2NiMDBmOCwgMHhlYTFjNTA5NSwgMHgxZTYwNGE2OCwKKwkweGIwYTU2ZmFlLCAweDVjOGZmYjU3LCAweDEyNWI1YTUzLCAweGY3NWFiZmI1LCAweDAxYWJjMjM5LCAweGY1MGVhZDBmLAorCTB4OTM5NDZhZmUsIDB4MjcyNDI4OWYsIDB4MzNkMjI1OTksIDB4Zjg2OWZhMWQsIDB4ZmJmNTMyNmIsIDB4MGVhMDViMDcsCisJMHg4NmI1NjlmYiwgMHg0MjBlOTE1YiwgMHg3M2I1MzIxZCwgMHg2Mzc0YjFjZiwgMHhlMjNlZWYzZiwgMHhkMzNiNDBlOCwKKwkweDQ4NjM2ZWU4LCAweDUwYmVlMGM3LCAweGY2ZTJjNDljLCAweGQzY2ExNTMzLCAweDA5MTQwYjQzLCAweDVkOWM0NWY1LAorCTB4NDllMzFkMzMsIDB4MjliOGI3ZTQsIDB4ZjgyNTU4ZGUsIDB4YzE1MDM0NjMsIDB4NDJiMTBiNTksIDB4NTEyOWU3Y2IsCisJMHg0ZmY5ZTczYiwgMHg1MmY4MmFlNywgMHgxNjBjN2ZiMywgMHgzMTllMWYxZSwgMHhmOGUxODEyZiwgMHg0OWM4OWVlYywKKwkweGRkOWJjNjAzLCAweGUxZWQwYzNkLCAweGM2ODk0ZWM2LCAweGRjN2UyYzY5LCAweGQyY2JmZTg0LCAweDQxZGZjZTRlLAorCTB4ZmUwMDZmZTEsIDB4NThhZWQwNzIsIDB4NzYxMzYyOTEsIDB4NzdhNzBiNjYsIDB4MTQ3MjczZDYsIDB4YmUzMWY5ZTIsCisJMHgzYjQxOGM5ZSwgMHhiMmRmYWM0NywgMHhmZDY5ZGE4YSwgMHhiYzljNDQ5OSwgMHg0MDkzYzQ1MSwgMHhkYWZkNTIxMywKKwkweDU4Y2VjZDE0LCAweGMyNmQ5ZTJkLCAweDZlZTNlMGNlLCAweDMyN2M3YTkxLCAweGQyNTRiM2UyLCAweGU3YjU3M2M1LAorCTB4OTI3NzIxNmUsIDB4MjE2NjQ0NGUsIDB4YmU4MDQ2ZmYsIDB4NWRiNGFlMzAsIDB4NmZmYjdkOWEsIDB4MmJkYjdlNjEsCisJMHgxNGQxNzljNiwgMHhjOTM5MDBmMywgMHg0ODFlZjg2NSwgMHg3ZTVlZjAxMSwgMHg0ODU5ODNmOCwgMHgxMTlhYWMzNywKKwkweDllMWQzNmJmLCAweGZkOGEzNzI2LCAweGQyMTdiNDA0LCAweDU4MWRjZDZkLCAweDMxNmI3ZTlmLCAweGVmOGM2N2U5LAorCTB4NWVjMGJlZTMsIDB4M2IwY2Q3ODEsIDB4NTY3OWViOGYsIDB4OWY3MGYyODcsIDB4ZmY4NGU5MmQsIDB4ZjhlMmRmZjYsCisJMHgxZjY4MTIxMywgMHhjNmQ2MWQyMywgMHg3NWNmNGM5MSwgMHhiMGYyZDcxOCwgMHgzZjUxYTdkMiwgMHgzMmQ0NmE3YiwKKwkweDRmZGI0Nzg0LCAweGQ5YThmZGMyLCAweGE5YzcyNDI1LCAweDdjOTVlYzljLCAweGFiZjllMDdiLCAweDAxZTExNzE0LAorCTB4ODQ2YWJjZmMsIDB4ZWQ4N2RmMTcsIDB4ZjRhZGZkZDEsIDB4MzhhNWNkZTksIDB4ZTExZmVlMmUsIDB4NWJhMzNmYjMsCisJMHhlYjM1MzhhMSwgMHhmYzhmYmRkZCwgMHhmMTEzYjM3ZSwgMHhiOWY4NzM1NSwgMHhkNmZmNTE1NywgMHhlZDI3NTg1OCwKKwkweDJkZDljNWY3LCAweGYxYmM0ZTNmLCAweDAzYTM5NDQ5LCAweGJlZWVjZWU3LCAweGNlZmFlMTFiLCAweGQ2ODA2ZjIxLAorCTB4NWM4ZjZmNDcsIDB4Y2ZiNzE1N2QsIDB4NTM2N2RiZGYsIDB4MjNkYzhlZDEsIDB4OGZkODM2ZTQsIDB4NWZhMTI3YzQsCisJMHhkZTMyN2Y3MiwgMHg0NTM5N2M4ZSwgMHg5NjBjOWZlZiwgMHgyNDc2ZWVmZiwgMHhmMDA0MmY4NywgMHhlZjkxOGJlZCwKKwkweDBkZmZlMTQxLCAweDQ0NGY5ZmQ0LCAweDIwZmFmNWZkLCAweDJiZmZhMDNjLCAweGVkNTA3NmEzLCAweDJiZWQxYjVlLAorCTB4NzExN2ZhMGYsIDB4OGZmM2M4ZjYsIDB4MGY0ODQyZDgsIDB4MTRhZDNiZTcsIDB4ZmVjNDU0NzcsIDB4ZTQ0NzM5Y2MsCisJMHg4YjUyNDQ0ZSwgMHgyODRkZTRlYiwgMHhiZGI3ODM2ZiwgMHhmMDAzMmJmNywgMHhmN2MxZDI5ZiwgMHhlYzQ5MTQzYiwKKwkweDMzMjBiYzg3LCAweDczZTM3ZmJlLCAweDI5NGZlZWM2LCAweDVmMWU1OWFlLCAweDNlNDdjYTA5LCAweDZlMjI2NWVmLAorCTB4NDhiOTJjYjQsIDB4N2MzMmZiZTUsIDB4NjI1OTZhNWYsIDB4NTNkYTExNzcsIDB4YjQzZDA5NGYsIDB4YWJlZjgxMmMsCisJMHhkZDRjYjgwYywgMHhhYzdiYWViOCwgMHhiNDI5ZjM4MSwgMHg2N2JmYzJmZiwgMHhiMWFiMzFiZiwgMHg2MTFkMmZmYiwKKwkweDI5OWRkNzZlLCAweDYwOWI3NDM2LCAweDFmNjgxZDllLCAweGUwNmRiYWUwLCAweGZiODMzMGZiLCAweDFkY2RjN2Q1LAorCTB4NTE5MzgyNjYsIDB4YzQ1NWEwNzksIDB4OTVmZGI1ZWIsIDB4NTcxZTNjZTMsIDB4Y2U1MWY2MjcsIDB4MTBmYzU5Y2MsCisJMHg0OGI1YTk2ZSwgMHg5ZmU4ZDVjZCwgMHg4ZDNmNTg1ZCwgMHhkZTc3ZDdlMiwgMHg3NTllOWIzZiwgMHhmNzcxZjRlYiwKKwkweGRlOTlhY2M1LCAweDVhOTRmYjZiLCAweDc5OTZiYmJjLCAweDhlNWVkYzRkLCAweDYwMGQxMWM2LCAweDk0ZWJhOGJmLAorCTB4Nzk5N2Q0MmEsIDB4ZTUxYWI5Y2MsIDB4ZDU4MjFhYmYsIDB4MTZjZjBjOWEsIDB4MmVkMWEyNzgsIDB4NzNiNDI0MTksCisJMHgwMjc3NTY5NCwgMHgxNmRhZWZhZSwgMHg1MGE5ZTkwMywgMHhlZDg3YzE4YiwgMHhiOGU3M2MzNCwgMHhkMmE5MWM3OSwKKwkweGIwMWFlM2NkLCAweDQ3MWM2MTU0LCAweDQ1MThiNjdiLCAweGI3ZjQ1ZmRjLCAweGYxYmExOThhLCAweDczZjg5MDY5LAorCTB4MWVhOTUzYWQsIDB4ZmQ2YjVmNGUsIDB4MmQ5YjE4YjUsIDB4NjQ4YmE3MTgsIDB4N2RhZTI4MWIsIDB4NDc5YmU0YzEsCisJMHgyMmU0ZTM3MSwgMHhiNjdjMDIxNiwgMHg1NWQ3OWEzOCwgMHg5ZGUyN2FmMywgMHg5Zjg4ZDYwYiwgMHhiODU0YWZlYSwKKwkweDY0ZDRjOTIxLCAweDM3NmU5Zjk0LCAweGUzYzY1MzhmLCAweGJlOWI1MTZkLCAweGQyMWZiZjFjLCAweGViOTdkNjEwLAorCTB4NDY0YzYwNTgsIDB4ODgzZmRmMDEsIDB4NzM3NmVmN2QsIDB4N2Q2MTc1ZjksIDB4ZDdiN2MwOWUsIDB4OWI1NjcyODQsCisJMHg4ZTJjYWFmZiwgMHg3ZjM2NDMzNywgMHhjZDU3NjdlNiwgMHg3N2M4M2E0MywgMHgyMDNmMjg5OSwgMHhhYmUzYzVkZiwKKwkweDNmODIxMzMwLCAweDQ0Yjc0YWZmLCAweDZmMDcxMWY0LCAweDQ4NmQxYTBiLCAweGRmN2NhZDVmLCAweDFmYzJhYmVlLAorCTB4ZWU1NWY3MGYsIDB4N2MxZmExMzQsIDB4YWI2N2RjMWUsIDB4ZGY2ODlhNzMsIDB4MjRlMzUyZjQsIDB4NzJmNWJhYjcsCisJMHhmN2ZjYjA2OCwgMHg5ZmI5NjdmNywgMHgzYzhiMmFkNCwgMHhhMWM5MjcwZSwgMHhjYjlmMjc1YSwgMHg0OGZiYzkxOSwKKwkweDgzYjdiZTM3LCAweDY4ZjM4MDlkLCAweDZlZDBjYjk1LCAweDlkYTM3ZTk5LCAweGRjNzRkMWU2LCAweGM2ZTA3MTRhLAorCTB4YTgzOWJkMTUsIDB4N2FhYTliYzcsIDB4MjAzZjMwOGIsIDB4YWQwOGJmMWUsIDB4NjgyZmM5YTIsIDB4ZmYwNmViNTcsCisJMHhkODg0ZWQwMywgMHhjNTQ3ZTQ3NiwgMHg3ZWZhMDdlZiwgMHgzZjQ1NGVlNCwgMHhlNzgxY2NlNywgMHhiMDFkNWY1MCwKKwkweDdmODJiZTkyLCAweDM4YzY2ZDNkLCAweGIyM2M5MWNiLCAweDAyM2FjNmEzLCAweDMwNWRiMDJiLCAweGEzZjc3YmExLAorCTB4NzBiNzY4NzksIDB4Y2JiMWE5YmIsIDB4NjE3NjgxZGMsIDB4M2VjYzRiNmQsIDB4MDZkZmZlMWIsIDB4NWIxYmJlZmQsCisJMHg3N2YxNGM5NywgMHg1ZjdmYWVkNiwgMHhiYmVlMzNiZiwgMHg2ZDcwZmIyMSwgMHg0YzViY2ViNCwgMHhlZmM4YjE4MSwKKwkweDlmNjg3N2EwLCAweDgxODM1Y2ZjLCAweDY0ZWJiN2Y2LCAweGI3OTQ2MmVmLCAweDdiN2FhY2U3LCAweGFmODM5Y2ZjLAorCTB4OWFkZGNmZDcsIDB4YzIyZGUxM2QsIDB4MGYyYzFlNzUsIDB4MTE2ZjY3NTksIDB4ODE5ZDczYWUsIDB4NjlmYjYyMDUsCisJMHhmNTg2NzVjNCwgMHhmOWQ2MjY1ZCwgMHg4YjkzMTNkYywgMHgzZmRmOWQ3MCwgMHhkNzA4YjkzMCwgMHhjZGIxOGI3OSwKKwkweGE4ZjM3Yzg3LCAweDFiOTBmMDMzLCAweGU5OWJlZGZhLCAweGY3MGE3YjI3LCAweDJlOGY5MTNkLCAweGM0MGYxZTk1LAorCTB4ZmY4MWUzZDEsIDB4ZWZhNDdhM2QsIDB4Yzc4N2QyNDYsIDB4ZWJkMGUxMDYsIDB4Y2Q0OWI3NDMsIDB4NmI1MDc5NDIsCisJMHg1ZWExN2YzMSwgMHhlMzYxYmZjNCwgMHhjNTMzMTY3OCwgMHhmYTdmOGUzYiwgMHg1MDQ3YzZlMSwgMHg2NGM5NzQwZSwKKwkweDFkZmQ2ODhmLCAweDY4MDUwMjU3LCAweGQ1N2YxZDBmLCAweDIzNDkwZGUzLCAweGVkMThiZmY3LCAweDA3ZGEwYWFkLAorCTB4NDU1YzYxMGMsIDB4N2IzNDAzZjMsIDB4OWYxZTVlMzIsIDB4Yzc3OWYzMTIsIDB4N2I0MmFiZWQsIDB4OGRjNmViZmMsCisJMHg0YjNiYzVlYiwgMHhlNzZlNDNmOCwgMHgzY2JjOTVlZSwgMHg3MTQ5ZGM2ZSwgMHgwYjYzYTZlNCwgMHg3ZTI3MTg5YywKKwkweGM2ZTNjYzI3LCAweDUyOTQ0ZjRkLCAweGZjMjFiOGRjLCAweDJkZTYzNzRjLCAweDg5YzkyZWIxLCAweGRlYzM0N2ZlLAorCTB4ZGIxNzEzMzcsIDB4ZjgyZTdlYTMsIDB4NWYyMzZmYjUsIDB4M2Y3ZThiMzEsIDB4OTlmMDlkZTksIDB4YzEzYjNhYzQsCisJMHg3MWVhMTU3ZCwgMHg0MjYyM2I5YiwgMHg3ZjAyNmZiYSwgMHg5YWQ0ZjMwZiwgMHhlYzQ5Yzg5NCwgMHgyOGNkYzliNywKKwkweGIwZmNhMzFmLCAweGYyZDNmZmRlLCAweDRkZjg3NmEyLCAweDc0Nzc3NzI0LCAweGQ3OTQ2MTQ5LCAweDVlNDBhNjY5LAorCTB4OTYzNWVhMTYsIDB4OGI2YjNjZTUsIDB4NmVjN2Q5ZjIsIDB4NzdmNzFiOWYsIDB4YmVkYmZiYTMsIDB4ZTRjNzcxZmYsCisJMHg0ZjZlZjUxYiwgMHgzNWVkZmEyMiwgMHhlNTEzOWYzMiwgMHg5MDg3NzZkOSwgMHhiN2M5MGE2NywgMHhjMmJhNzc4ZiwKKwkweGI3ODhmZjNjLCAweGVkY2MzOGZmLCAweGVmMmQwNjg0LCAweDBhZGQ2MTQ4LCAweGI5ZTJkN2FjLCAweGJkNzBkN2JlLAorCTB4Yzc3N2RlNTEsIDB4YjJkOGZiYzksIDB4MTRiZDJmYjYsIDB4ZjZlM2QxZjcsIDB4MGRkYjYzYmYsIDB4ZWNjN2U3ZWUsCisJMHg2MWZhZWI3ZiwgMHhiOTZhYTVjZCwgMHg1ZjViZmY3ZSwgMHgzMjdlZTIxZiwgMHhiMmYyYzNmMCwgMHhlYjZhZmQyOCwKKwkweDkzNmZkMWEwLCAweGViMDc0Mzg4LCAweGY0ODNkZjRmLCAweDM5MmMzYzFiLCAweGU2NWJiZWQxLCAweDBjYmJmNGU1LAorCTB4YzRmMzJkZmMsIDB4M2FjZWZjYTEsIDB4MjM4OTc5ZjUsIDB4YWE2OTdmZjEsIDB4Y2IwN2ZmOWUsIDB4ZWFmOGEwZmYsCisJMHg5YzlhYTkxNSwgMHhjZGFmN2NlNCwgMHgwZmRiOGI1ZiwgMHhlMjRiYjNjZSwgMHhhZjM3MTk3YywgMHgzZTM1M2Y3OCwKKwkweDk5ZjlhZWRlLCAweDZmMGYyYTk3LCAweGUzODc4NDFjLCAweDBmZmNiMDYzLCAweGM2Yjc4Nzk2LCAweGZkYTQ2NWUxLAorCTB4MGYyY2FmOGMsIDB4MzVmNzk3ZmYsIDB4MzViNjNhMWUsIDB4YjQwZWZkMTEsIDB4NTk0ZmQxZTMsIDB4ZjNjOGNmYjcsCisJMHhiMWZkMDAyMywgMHg2NGIzYzVmYiwgMHg5ZmVmOGZiYiwgMHg3ZWJkNWFjYSwgMHgyNTlkNWUxZiwgMHg1ZjM5ZTFmNiwKKwkweDRjODRmMzNmLCAweGY2MjhkNmViLCAweDM5OGYxYjg5LCAweGRlYjRkOGJjLCAweDY5ZjY4NGJlLCAweDZmNGZmN2UzLAorCTB4ZTE2NjA3NjMsIDB4YTNlZmM1NTIsIDB4MmU3ZTQzMmUsIDB4ZDRmZGYyZjgsIDB4YmNjMWQ0ZDYsIDB4NWJjYzNjODUsCisJMHhjYmQyYWNhOCwgMHgxZmVjNjdmOSwgMHhkNjYyMDRhNiwgMHgxYzA0YWFiZCwgMHhkYmU4NjE4MiwgMHg3MjU4ODRhMiwKKwkweGE5YWRmYmNjLCAweDQ2N2VhZWRjLCAweDRjNzhmN2U0LCAweGE1ZTYxZDZjLCAweDdjZDg3MjZjLCAweDBjNzhjZmU4LAorCTB4NDdlOGZmM2MsIDB4MjhlZGZlMjksIDB4YzBhYTJkMTcsIDB4MzJlZjkxZWIsIDB4MjFlNWUwMDMsIDB4OTVjOTI3NjMsCisJMHg4YmRkYTM1MCwgMHhkZjhiNTA3MiwgMHgyYzdmZmQ2OCwgMHg1OTJlYzFmNiwgMHhmYmQxYzdmZiwgMHg3YTY1ZmY4MSwKKwkweDUzY2ZjNzhmLCAweDc1NWY3OGRhLCAweGUwMWI2ZWRmLCAweDhjMTdjNzQ2LCAweGRjNDVmOGU4LCAweDRhMWJjYTVmLAorCTB4MzNmNTIzYmYsIDB4OWNiZjFkMTIsIDB4OTUyMTdmZWEsIDB4MjI2ZmEyZTQsIDB4YTI1YzJiZTUsIDB4NDc5NWIxOWMsCisJMHg4ODljNjBjZSwgMHgxOGFiMzQxZCwgMHgwOTM4YzRkNywgMHgxOTBkYzdlOSwgMHg1YmQyNmYyMiwgMHg4MGYyOWIzOSwKKwkweGJmOTg5NWJkLCAweGYzZmUwNmY1LCAweGM4ZWQ5MWYyLCAweGUxZjVjMWJlLCAweDg4ZGY2NDc2LCAweGVjZjVmM2ViLAorCTB4ZmU5ZGJiYzgsIDB4N2Q2NzQ4YjMsIDB4NmY5NDdjZDMsIDB4ZjAwMWQ2YmUsIDB4MGJmODdmYTMsIDB4ZDNiNDc3OWUsCisJMHhhNzczZTljYSwgMHgyZDkyZTljNCwgMHg3OGE0Yjk0ZiwgMHg3NDcxYTdjYiwgMHg5MWZmZTlmNSwgMHg4ZGE0YjUxYywKKwkweGJkZmU1NzY0LCAweDEyNWZlOGU1LCAweDcyM2E3ZTMxLCAweGE3OWUyMTNmLCAweDc4NDNkNTViLCAweGQ4OTMxYzhiLAorCTB4NzZiODk4OWUsIDB4ZTBjZmYzMTAsIDB4YWYwMTBjZmIsIDB4ZTEyM2ZlZjYsIDB4ZjM0YzJjMzcsIDB4ZmJjMWE2NjUsCisJMHg1OGIzNWZmNywgMHgzZTk4MTI1OCwgMHgzNjJlNWNlNSwgMHhhZmI0ZWRmOSwgMHhmM2M5ZDRkMCwgMHgzMDU2OWE1ZiwKKwkweDE4NGRlMzkyLCAweDc4YzEyZDM3LCAweDk4YjY2Y2UyLCAweDQyODE4OWUyLCAweGZiNWI5M2NjLCAweDI3MjQzZGJhLAorCTB4MGU3ZGJjNjEsIDB4ZmZhZjNiNDMsIDB4ZGViZTVlMzUsIDB4ZmVjNjI4MTUsIDB4Njk3YTJiODMsIDB4Y2U3ZGEzMWYsCisJMHg1NTg3OTQ3YiwgMHhmNzg3ZjlmOSwgMHhiYzEzOTc1NCwgMHg5YjcwNGYxNCwgMHg2ZTI1ZTdmNSwgMHgwZWZiZTM0YywKKwkweGE2OWZkM2RhLCAweGUyOGZiYmFkLCAweGYzZDdlZmY5LCAweGRiYTBlMmJjLCAweDg0YjhjNGU3LCAweGE5YjcwZjE2LAorCTB4ZDBhZmI0M2QsIDB4NmYxYjkwNzQsIDB4MGY5ZjMyOTUsIDB4ZDExNjY5ZmIsIDB4NjljMWQzNTMsIDB4NjUzNzE4YTUsCisJMHhiNDUyZDY5ZCwgMHg2Y2ZmMmI3NywgMHhmZGVmYmYyNywgMHg0ZjI5MzJiYiwgMHhlMDRhNjhlMiwgMHg1MWQ3ODQ2YSwKKwkweGVkMTZiZTFlLCAweDA3MTg1Y2QzLCAweDBmZjdkZWVkLCAweDcwOGE1YjVjLCAweDBiNmZmMjZiLCAweGZkYTFjZGM2LAorCTB4MWUzZTg3MTYsIDB4ZGYzYzJjY2UsIDB4NTFkMWUxYmIsIDB4MWFiY2RjNWEsIDB4ZjA0NWIzZjEsIDB4NTViN2IzMjEsCisJMHhlZjg2MWVjZSwgMHg5NzRmN2UzNSwgMHhmYTdmZDQwZCwgMHgzZmI0MmRmNywgMHgyZDgzYzlhZSwgMHgxNGIwMTY0NiwKKwkweDI0YzhlNTQ0LCAweDc0MTgzZjkxLCAweGFlYzVmYzhiLCAweDQ1M2YzY2Q5LCAweGE5ZTJlZDk0LCAweGY3MWRmM2UxLAorCTB4YWYzODQ5Y2MsIDB4MzdjYTY5NDksIDB4NGE3MmM3ZGIsIDB4YWM3ZGQ4ZjYsIDB4ZWEwMTQ4YmYsIDB4ZDBjNGYzMTcsCisJMHhhNTE1ODc0ZiwgMHgyMmVkOGI3OCwgMHg5ZGYzYTNiNywgMHhjNzIzYTIyNiwgMHhhN2Y3YzYzYSwgMHg5ZWQwOGU4MCwKKwkweDMzZDIyMmJmLCAweDU5ZTYwOTNkLCAweDA1N2RkZWQ4LCAweDQ1ZjhmN2UyLCAweDMyOTNhZDAzLCAweDk3ZGE0NWZiLAorCTB4NzhmODkyNDksIDB4NWI3YTFiMDUsIDB4YzYxYzYwYzcsIDB4Yjg5NWNhZjksIDB4YjM5YjZhOTQsIDB4MzZmOGI3MGEsCisJMHhhNDc3ZmNiOSwgMHgxNzM3ZGYxMSwgMHhmZjU1NzhlMywgMHg5Mzc5ZTQ2MSwgMHg1ZjE0NmNjNywgMHg0NjU5Y2Y2OCwKKwkweGFmZmQ5Mzc5LCAweDNlZTc3NTliLCAweGI2MjE5ZmUyLCAweGYzMjRmMjlhLCAweGY2OTFmZjBmLCAweDI1MDcxYzA3LAorCTB4ZTdiNGRlMWQsIDB4YmU3NjY5N2QsIDB4OTllYTE1NmYsIDB4NTczNWI5NDUsIDB4MmFiZTQ5YjgsIDB4NDIxY2ZlYzcsCisJMHg1NTY5NDM3YiwgMHgxNmIwZjI1MCwgMHg0NTYwY2ZhMywgMHg1MThhYjVmOSwgMHhiYjc0N2YzYywgMHg5NWViODBkMywKKwkweDA2NjJmMjJiLCAweDYyNzVmZjhlLCAweDZkMTVmYzgwLCAweGYzY2MyMDNmLCAweGY3YmQ4YzlhLCAweGFjYTYxZmEwLAorCTB4ODQyYWJkZWEsIDB4NjVkMDcxZWIsIDB4YTliOGMyNjgsIDB4ZjE0NGQyMzEsIDB4OGEzNjYzOTYsIDB4MmUxZWU2YWYsCisJMHgyODJkZmQ1OCwgMHhkMjczYWVlNywgMHhkMWMwZDdmZSwgMHg2Zjk0YjlhNSwgMHgzZDFjZjMwZSwgMHg0Y2VmM2NjYywKKwkweGNkNDg3OWUzLCAweDYzOTQ1ZTgyLCAweDMzZWEwMzM2LCAweGUyZjMzMzY1LCAweDNlMmQ3OWU4LCAweDdlZjgwMmU3LAorCTB4M2EyMTUzYjQsIDB4MDgxNjk4NWYsIDB4OWUwZTdhZTMsIDB4YzA5ZTU5NmYsIDB4M2MyOGI3Y2YsIDB4ZmU1OGUyM2UsCisJMHhkY2YxMmZmYSwgMHhiNzExNmVjOCwgMHhmYzdjNzEzZCwgMHhiNWYzOGExYywgMHhmZGUyMTIyYSwgMHg1MWU3OGI4MiwKKwkweDNmYTY5NjNlLCAweGY3YzUxMDg3LCAweGNkNDdjYTA5LCAweGFlNDdmNjNmLCAweGY2MGRhMGJmLCAweDdkMzkxOGFmLAorCTB4MGVlZWFkMjgsIDB4M2JmNjI3OGMsIDB4N2I3Zjk0MDIsIDB4NGNiNzRiNjUsIDB4YmVjZTYzZmIsIDB4MThkNWFhMDcsCisJMHhkNzFiNjZiZiwgMHhiOWZiNGQyNywgMHhjN2VmMWUxZiwgMHhmOTFlOTk3YywgMHhlMTNjYTBlZCwgMHhmY2IwNjQ3YSwKKwkweDdhNGZiMjBmLCAweDU3YzdmNGUyLCAweGRlOTg0ZmY2LCAweDUzYjc4YmFmLCAweDIxYjhmZGUyLCAweDdmNWM3Nzc2LAorCTB4NWEyYmQ5MjMsIDB4NzQ1NTQ5YmUsIDB4M2IzNzZlMWMsIDB4YTQyODdiMzQsIDB4YjJhOWM3Y2IsIDB4MTY2YmYzOGIsCisJMHgyNjBmZmY3ZCwgMHgyMmZmNzkzYiwgMHg4ZDZkMjczZiwgMHg3ZDQxNGFiYSwgMHhlMjhjMmZmNSwgMHg5MGZlNWE3MywKKwkweGFhMTQyZjk2LCAweDIxM2Q3OWUyLCAweGI3Y2U4NTgzLCAweGU1MWI1ODc5LCAweGRkNjI4ZDA5LCAweGI0NzE0NDkyLAorCTB4YTdkZjg2NWUsIDB4N2MxMGJlNjMsIDB4ZjJkMmZmZmYsIDB4Y2M1ZGZmYTksIDB4MzkyNjRlYmIsIDB4YmYwODRhYTksCisJMHg1MjRjZjMxNSwgMHhmNmYwZWUxMCwgMHg3N2RlMzhjNSwgMHgxNTllMzRlYywgMHhjODUyNGNmMywgMHhjZGZlMjA5ZiwKKwkweGQ0ZmNmM2Y0LCAweDdmN2NmNWU5LCAweDMwZjQxMzIxLCAweDM5MGIzMzk2LCAweDk5ZTc1YTVkLCAweGNiNTU1ZjI4LAorCTB4NGNmMmQxMWYsIDB4MDk1NGJjMzQsIDB4NTk4ZTY3N2MsIDB4NTA3Mjg3OWMsIDB4OTJkOTQ3Y2IsIDB4ZmI0NGFkZTAsCisJMHg3YjAyNTVhNywgMHg5MGQzZTcxYSwgMHg3ODRiZjIyMCwgMHhmOTBkZWRiZiwgMHhhZmY3YTQ2MSwgMHg4ZjEyN2Y5YiwKKwkweDY1MGYyZDY3LCAweDNkMjA2MjcyLCAweDVlN2EyMmJkLCAweGQxMWZjYjRlLCAweDNkNjYyNmU4LCAweGM3MWRhZTA5LAorCTB4NTU1ZjNkYjgsIDB4MGM3OWEyNmYsIDB4NzE0NzVjMzQsIDB4MDMwNjgxYzksIDB4ZDU1ZmJkNDMsIDB4MTg3NGU2NjUsCisJMHg3OThlZGUzNywgMHhmZDhkZDYyNiwgMHhlNTJiNjEyYSwgMHhmODdhMGJkNywgMHhkNjE2N2IzMiwgMHhiZWUzMThiNywKKwkweDJmZWU1NjI3LCAweDdmZGUwM2U4LCAweDNkMjc2NTc2LCAweGE3NTJhYzA3LCAweDMzY2U4OTNjLCAweDk1MDk0N2NlLAorCTB4NWViOGU5ZTMsIDB4NmFmMzFjYjksIDB4OTAxMjM5MjIsIDB4MGZlZDg0ZDAsIDB4MzUzOTUwZDcsIDB4YTc5NjA2ZjIsCisJMHg1MWFlNWU3YSwgMHg4YzBjNGY0MCwgMHhhMDk2ZWM4ZSwgMHgyZGRiN2ZiZCwgMHg5OWI0OGNiYywgMHg3ZDNkZmEwOSwKKwkweGU0YTg0ZDc2LCAweDM2M2JlODFiLCAweDJhYTM2ZjI0LCAweDM3ZTI5NTNkLCAweGJjNTBmNGY3LCAweDcyYmJlODQ4LAorCTB4MGNkOTFmMmUsIDB4YWJjNzk4NzMsIDB4OWQ5YjhhNTQsIDB4M2IyM2M4Y2EsIDB4N2Y5YzVlYzAsIDB4YjNlYjA3YjAsCisJMHg4MzY3MTRjYywgMHg1M2ZmYTI3YSwgMHg3YWYxYTdhMywgMHhjYjNmYWY5NSwgMHgwZGZjZjA3MiwgMHhmOTQyMWJkNiwKKwkweDFhNmYyYTc2LCAweDkxMWJhYmM1LCAweGIyOWVjMDNmLCAweDcwNzMwMjNiLCAweDNkNDljZjVkLCAweDljM2YyMjc3LAorCTB4MjVjZmY5OWEsIDB4MGVlN2U3NDgsIDB4ZTUxMGI0ZmQsIDB4YjAyNjM1Y2YsIDB4Mzc5MTg3ZDMsIDB4ZGU1YzE5NjksCisJMHhlYmVkMTgwYywgMHg2NWU3ZTgyNCwgMHhkOGZiZTA3YiwgMHhmOWI2YWJjZiwgMHg3Y2Q1MzBiMywgMHgxMzM0Y2E1ZSwKKwkweGExNjAxZDFlLCAweGZmMjhjODVmLCAweGI5ZmFjNTUyLCAweGQxZmI3MmU2LCAweDYxMmZjMzM1LCAweDJiMWFlODFlLAorCTB4YTAzNTIzODcsIDB4MDk5ZWM4ZjgsIDB4MDNiZTk1Y2MsIDB4MDkyMzVmZjMsIDB4NDlhOTg2ZmIsIDB4NmFhODg3ZTQsCisJMHhjYjIxZmExMiwgMHg1OTQ2YjljNCwgMHhmODJjYjdmMCwgMHg3YjJiMGZmYiwgMHhkODMwMTUwYSwgMHgyY2RjZWYyZSwKKwkweGRlZGZlNzBmLCAweDY4NmZlNzE4LCAweDVjZTk0ZGNmLCAweGQ1OTFjZjRlLCAweDZlMWY0ODA5LCAweGQ3ZGY5MWUzLAorCTB4MjZjOTNhYzAsIDB4YmRmMTE4NmYsIDB4ZmI0MWRiMjYsIDB4MmEzYjRmYjcsIDB4YWZkMGJkM2QsIDB4ZTUyZmZiOTQsCisJMHgyNmJkNTc5OCwgMHg3MWNhNWZmYiwgMHhmNjRlNGQ5ZiwgMHhlNTMxZmM3YSwgMHhmNTJhZTk0ZCwgMHgyMWRiMDMzNywKKwkweGU1Y2Q2Y2ZlLCAweGJiZmQ3ZjE4LCAweGZkMDQ5N2Y1LCAweGZlZmQ3Yzk1LCAweDczMzFmYjA2LCAweDIyNTk5NmI4LAorCTB4ZGRmMDBhMzksIDB4MDNjMGQ2Y2QsIDB4MTYxNzdlYjgsIDB4YjNmYjQ5YmMsIDB4N2E5ZTY2NzcsIDB4NGUyYmYzMDMsCisJMHg4OGNmOTkxOSwgMHg5YzQzMjQ3MiwgMHg4ZWJkMDMzZiwgMHg3NWNjOWVlMywgMHhjZTUzZjNmMSwgMHhiMTEzZDM2ZCwKKwkweGYyZTljMDVjLCAweDdkYTYxNjVhLCAweGZjYjk5YWY1LCAweGFjZjVlM2JjLCAweGRhMTdhNWE3LCAweGFhMzFlMzVkLAorCTB4NzFmYzMxYmQsIDB4NWYyZmFhYWQsIDB4ZDcyZmFjNWYsIDB4N2Y4ZTNjODgsIDB4ZGZkZmVhZjIsIDB4ZDIwYTIyYzAsCisJMHg3Y2E3YjdlOSwgMHhmZGY2MjYzNiwgMHgyZmRmNTY1MywgMHg5MjllOGY5MCwgMHhlODY3ZGU3OCwgMHhmYjI0ZTY3MiwKKwkweGQwODUyZGQ5LCAweDY0ZmYxOTllLCAweGM5ZmYzOGE2LCAweDU1ZmYxM2YzLCAweDRlNGY1ZmY4LCAweGI2OWY1NDYxLAorCTB4ODJjN2IyZGYsIDB4MmQ5ZTIyZjUsIDB4MWVmMWZhOGIsIDB4MjY0ZGM5NjYsIDB4MzBmYTQ5YjksIDB4NDczYzg5MjIsCisJMHhiMGYxZWQzNywgMHg3OTNiYjc0MywgMHg5YWRhMTc1YywgMHgwYjQzOWZhMCwgMHg5YTRiYzI1NCwgMHg0MmFlYzBkZCwKKwkweDEwYjcyYmZlLCAweGJlNzQ2OWZmLCAweDBhZjQwYWM2LCAweDY1MWNhOTc4LCAweDVkZmE0MDQ5LCAweGMzNmVmNDYzLAorCTB4YjMwNGU0YmUsIDB4NWE2ZmZhOGEsIDB4OTZmYTg1YTIsIDB4ZmU5MGE2N2YsIDB4MzMzNTY1NTgsIDB4ZGM0Zjk0MjcsCisJMHg2ODY1NDA5NywgMHg0NGUwNzI0NywgMHg3MThjMjk4NSwgMHhlZTQyMzVlZSwgMHg0ODFiZjdjYiwgMHhjYzJhNTY3ZiwKKwkweGQwMWI3OThmLCAweDlmZGYxYmFlLCAweDNiNTBiMGM4LCAweDdjNWNkMjk4LCAweGYxYThjYTdmLCAweGYyODUzNGQ1LAorCTB4MWFlYzA1MzgsIDB4ZjQ4OGMxM2YsIDB4NTdlMGFiN2UsIDB4YjNjZGYwNTksIDB4ZmI4ZDA3MDAsIDB4NzE0MWRjODIsCisJMHgwNWJkNTUzMCwgMHg2MzJkZTdjYiwgMHg3MDUxMWNlOCwgMHg2MjliOWNmMCwgMHg5ZDhhYzFjMCwgMHhmOGJiZGY4MiwKKwkweDNmOGQzMzM5LCAweGQyMDE3OTM1LCAweDI4YjcxMGFkLCAweDZkMGUzMTI1LCAweDNlYTFhN2FmLCAweDZiNWY2NDY2LAorCTB4MDdlZGFhZmMsIDB4NzZiNDViNjYsIDB4Y2ZmYjBmOGEsIDB4M2NkOWRmMTAsIDB4ZGNiODQyNzksIDB4NDdmY2E2NjgsCisJMHg3YWVhNWVmMSwgMHgxZmE0MTNlZSwgMHhhZjc3YWY4ZCwgMHgzZDdjNDBiZCwgMHgzZmM1ZGYxNCwgMHgwZTc1ZjJhNiwKKwkweDk4ZjdjNzI3LCAweDM5MWZlNDJjLCAweGVhMTY0YzYxLCAweGFmMmUzNTlmLCAweDE3Mjk4ZmVhLCAweDRiY2ZmOTAzLAorCTB4M2I0MDdjNDYsIDB4N2Q1OGRmMjgsIDB4OTE4OTUwYWEsIDB4ZTcwZjM2ZjMsIDB4NGJlNzY4NTcsIDB4YjA5ZjdjMDEsCisJMHg2N2M4NTlhYSwgMHhjOGRiOGNjMywgMHg3ZGZkYjVjNywgMHhiOGMwZjVjNywgMHgwMzg0ZWVkMCwgMHg3Yjc2ODVjNiwKKwkweDQzNmVlNmFkLCAweDRmZTM3MGUyLCAweDJmYmM3MTUxLCAweDZlYjE5NzFiLCAweDA0ZWI5ZTIyLCAweDQyMGU4MTVlLAorCTB4ZTEzYTM3MTgsIDB4NWUzZDEwMzAsIDB4NGY3YmYyMjcsIDB4NThmMWYyYTQsIDB4YTY1ZjNlYjEsIDB4NDBkMGU4MTAsCisJMHhmY2ZhNThmOSwgMHg5ZGE0NmI5OCwgMHhiNmVmYTgyZCwgMHgyMGY3MTM1YSwgMHhlODI3M2RkZCwgMHg2N2VkYTRlMiwKKwkweDNjZWY2ODg1LCAweDU5ZThiZjM3LCAweDkyYjNlYjk0LCAweDkxMjBiNTU2LCAweDg5M2FjNzVjLCAweDc1NzkzNWVmLAorCTB4NGFjZGUzMjEsIDB4MWFkYzgzMmMsIDB4YmZmNTgxZTcsIDB4N2NkNGZmMzMsIDB4ZDc1OWZjZWMsIDB4NWZkNDQyZDYsCisJMHg3YmM2MGYyMCwgMHhhZmMyODc1MiwgMHgzNzA2OWZkMSwgMHhmYmQyMjFkMiwgMHhjMWM2MWQyMCwgMHhiYjExZDFhZiwKKwkweDBiMTI5M2ExLCAweDg4YmQ4MTc3LCAweDA0N2VjZDRmLCAweDkxZTc4ODRmLCAweGY5ZDFkOWFiLCAweGIyY2YxMTAxLAorCTB4MzQ3OWYzMzQsIDB4NmJlZTA4ODQsIDB4OWU1MDBmNWMsIDB4MDE5OWU1ZDksIDB4NjlkNjA3OWYsIDB4NzIwZmE0ZGUsCisJMHg1OWVjNmMxNCwgMHg3NmUzMDYzMCwgMHhmZmI0ZWYwMCwgMHhlZGUzNzg0YiwgMHhhN2NiMmZlNSwgMHhiNThmODkxZSwKKwkweGZiMzlhNWYxLCAweDM4M2E5ZjI5LCAweGQ1Zjk0ZWQ3LCAweDY5M2U0NWQzLCAweDcxNDBkZWIwLCAweGM4YWJmMDc0LAorCTB4OTY2MjZmMWUsIDB4YTlkZGNhMzAsIDB4ZjJkNWJlYzIsIDB4M2M0YThmZmMsIDB4YzI3YTE5M2UsIDB4YjE4YmVlYWMsCisJMHg1OWU2ODc5MywgMHgxZGM3OTRhYiwgMHhiMWYzYzE1YSwgMHg0NmUwZWQwNywgMHg5MDYwZWM5NSwgMHgwNTczYmFkYiwKKwkweDc2NWNhNWVkLCAweGQyYWVkZmI3LCAweDI0YTc5OTc5LCAweDgwYjQzZWRlLCAweDdkYjNkYzUxLCAweGU0NWZhOGI2LAorCTB4NThmNzZiMGMsIDB4N2NkMTY5NDgsIDB4NDYwZWY2ZjcsIDB4YzhlZWRmZjQsIDB4NTk0Y2ZhYTcsIDB4MTZmZGNiOWMsCisJMHg3OWVkMzdkNywgMHhiZjZjNGZkYywgMHhiN2VhODhiOSwgMHg1MmM3ODQyNCwgMHg4N2Q4OGY1ZSwgMHhmNWZiODFkZiwKKwkweDdmMWZiMDVmLCAweGUzZjM0NzlmLCAweGIwNzUxYzc4LCAweGEzOGE3N2ZjLCAweGI0MGNlYTNlLCAweDJhMmRmZDIxLAorCTB4ODExOGU1ZjEsIDB4M2M0Y2VhNWUsIDB4YmFmNDBhOWUsIDB4N2E2MTg3YjMsIDB4ZmEyMTczNWYsIDB4ZTZiMmQ3M2IsCisJMHg0NDA1MGM1NywgMHgyZTkwNWJhZiwgMHg3YTA3OGRlNywgMHhlYmQxZDAyZCwgMHg5NzA1NGY1NiwgMHg0Njk3MDhkYiwKKwkweDVhNzQ4M2FmLCAweDE3Mzc5ZjFjLCAweDc2ZmI2MzA4LCAweDliOWZlNzU3LCAweDMyZTgzZmQwLCAweDMwZGU3OTdiLAorCTB4OTc4YzgzY2YsIDB4MmNmMDMxMGYsIDB4NmUzYzM4NTQsIDB4ZjY3ODI2NTksIDB4YzFjNGZmMTMsIDB4MTM3YzI5NzMsCisJMHg4Y2U5YTc0YiwgMHhmYzQ4YzdmMywgMHg5MGIwYWU5MywgMHgzZmNhMmNhMywgMHg0ZjAzNTk0ZiwgMHg3YzgzYjhlMiwKKwkweDBiZjcwZjc0LCAweGRiMmRjMDg3LCAweGJhNmU5ZTg5LCAweDA1MTdlZjk5LCAweGUzZWY1YzZkLCAweDhjMDY1MWJlLAorCTB4N2Y4YzViM2YsIDB4ODY3ZmFiNTMsIDB4OTZjZGRiMGIsIDB4ZTFiYTFlMzgsIDB4MWNmZjAwN2YsIDB4YWJiYjNmNTEsCisJMHhlNmM2ZjI5MSwgMHg4ZTllMzBjYywgMHg3OTM0NzNiNSwgMHhjZDUzZWRhOSwgMHg3NDZmZWQxMywgMHgxZTYyMzZjZSwKKwkweGZkMWFkY2Y3LCAweDViYmNkMGZlLCAweDRkZDRmZWY4LCAweGNjZmRmNTczLCAweGEwM2UxYjYzLCAweDZjZDY0NmZjLAorCTB4YmJjZGZjNDQsIDB4OGFmZjVmNDUsIDB4Njk1ZjcwNjcsIDB4M2QyYmVlMGMsIDB4MDMyOWUyMmIsIDB4NDdjODI3YzAsCisJMHhiMjVkNGRiZiwgMHhmM2EwNzZmMywgMHgyOTJmM2YzMSwgMHhjY2NmMzhjMywgMHg5YmJkODZiNCwgMHg4ZWU4ZmNhMSwKKwkweDZkZmU1NDcxLCAweDc0N2ZmN2RhLCAweDE3NzdlYjBhLCAweDQxODY3OTUxLCAweDkwYzdlN2UyLCAweDhhY2Y4MTBmLAorCTB4MmViZTZmMmIsIDB4ODlmNTExMmYsIDB4NDY3NmY3ZTgsIDB4ODEwOTNkZWYsIDB4Y2VkMGQ5ZjYsIDB4ZjI5ZjMxMzMsCisJMHhmODg4NjczZSwgMHg1ZTIyYzBjMCwgMHgwNzI0ZmQ3ZiwgMHg1NWJkZWQ0ZiwgMHg4Y2VhZjhhNSwgMHhlNDdjYzg4NCwKKwkweGZmNGIxNzgzLCAweDkwZjMwY2IzLCAweDcyOGJlNDY3LCAweGIwZTM1M2Q5LCAweGMxZjRhY2ZjLCAweGZkNjdkNDdjLAorCTB4ZDcwNTc2OGQsIDB4Yzc5MzI5YTEsIDB4NGIxN2M3YTUsIDB4ZTIyNzYzZGQsIDB4N2ZkMTJjNzksIDB4NGQ1NzlmMjMsCisJMHg5MTMyMmZkOSwgMHhmMTU0NjY0ZiwgMHhhNzdiYzY3ZSwgMHgzYjYwMTZiNSwgMHhmNzJhNzljMywgMHgxMTEyNWE2NywKKwkweDE5YmYxYWZmLCAweGQ5YTQxZjg0LCAweDI3MjE3ZThkLCAweGQ5YmRmNDllLCAweGZhZmQwMjkyLCAweGE3MTc5MjJkLAorCTB4MjZmMjlmZTgsIDB4OWQ5ODE3YzUsIDB4ZmJmM2E3OWYsIDB4NmI4YzE0ZjIsIDB4M2NmMWY3NGYsIDB4ZDhhYjZkZDUsCisJMHhiNmYzYjQyYSwgMHhkNjUzZTk1ZCwgMHgwYjc0ZmQ0MCwgMHg3YTA0ZjVhMywgMHhiZDIwNjUzNywgMHgyNzIwZmU0ZiwKKwkweGFlY2M4OTExLCAweDllOGQ3N2E3LCAweDNlNzQ2YjY2LCAweGMwY2Y0ZjQzLCAweGZlZmM3NmE3LCAweDhlYjVlNGNiLAorCTB4N2E1MWFkOWUsIDB4MDljZTI5MWUsIDB4YTA2NDY1NzAsIDB4NWU5NmY4NWMsIDB4MTM4ZTBkOGYsIDB4ZTNmMThmYzcsCisJMHhmMDI3MjQ4ZSwgMHg0NmRlNTYyZiwgMHhiZTI0ZWJlMSwgMHhiZmVjYzJjYiwgMHgzNmNiZTQwMiwgMHhlMWM3MmY4ZCwKKwkweDFlODY0Y2ZjLCAweDJiOTQzZjNhLCAweDAxZDFjNzc5LCAweDBiNWUyOWRjLCAweGZlMzhiOWU5LCAweGM2Y2JlMGQ0LAorCTB4NTBkOTcyZDgsIDB4ZDE0ZmYwYjgsIDB4ZTdmZTUwZWMsIDB4OTY0M2Y4YzYsIDB4N2NlZjg3YTgsIDB4MTcwYTM5MmMsCisJMHhmMTE1M2Y4YywgMHhmMGUxZWVjMCwgMHhiOTlhOTJlYywgMHg4NjdlMTE1YywgMHhkMjY4YjcxNiwgMHgzZjU4N2JlNiwKKwkweDdlMDRjYWRmLCAweDcxODNkZjhlLCAweDI4NWJkYTI2LCAweGY3MDgzNzFkLCAweDM2ODNhYzI1LCAweGRmZDBhMDlmLAorCTB4ODc3ZTJkNzMsIDB4MWRmNmU2MDksIDB4Y2ZkMTFkNTcsIDB4YmE4MzQxNzcsIDB4ODExZDVkNzAsIDB4Mjc5YzIzNmYsCisJMHhlODYzYTEwYywgMHgzZTYyMmQ4ZiwgMHhmYTA2NWZkYSwgMHg0NDU0NjdmMCwgMHgzNzgzNGJkNywgMHgyMzRkNGYxZSwKKwkweGY5ZjhkMWM4LCAweGJhMjdlM2M0LCAweGY4MTkzZDZlLCAweDBkZTdjZWQ0LCAweGU3MTJmN2NlLCAweGI4OWY2ZjE5LAorCTB4NWY3OGZhNGQsIDB4MjVjYjg4YjIsIDB4YzU3MGUzNDcsIDB4MTJjMzVmNTgsIDB4ZjM4NzE0YmMsIDB4ZDViZmU0NGEsCisJMHg3MjgxYmQ4MCwgMHg1MTlhYTZiOSwgMHg2ZWQ5MjQzYywgMHg2NjljMzhhMCwgMHgyN2M0OGM3NywgMHg0OGM1NWY1NywKKwkweDYzMmNkNTRlLCAweDlmMjA1Y2UyLCAweGE2M2QzYzVmLCAweDkzMWZkZWIzLCAweGI3NTE2YmZmLCAweGFmN2U0NDJmLAorCTB4ZjBmMmViYjcsIDB4NmUzY2VjNmIsIDB4MWI5MzVlYmYsIDB4ZjUwMmI3YWMsIDB4ODg3OTYwZmMsIDB4NDBhZGVmOWUsCisJMHhmZjdmMTNiOSwgMHgxZTQ1Y2Q1NywgMHgyOGJlNGUyZiwgMHhmYmM2YjNkMSwgMHhmOWVhMDU2NiwgMHgwYWRlZWFlNCwKKwkweDI0MGY1Zjk0LCAweDc1YzVlZWY5LCAweGUzYzBjMzdkLCAweGRjZjhmMWVhLCAweGUyZDA2MTlhLCAweGE3NDQ5N2M1LAorCTB4NzgzNDdjZjEsIDB4ZDgxMWRhY2UsIDB4ZjE2OGUzODEsIDB4MGY1MjczYTQsIDB4MzhhNjRmOGYsIDB4M2M4MWZmNDUsCisJMHg0YmEwNjdhNCwgMHgyMDY2OWEyMywgMHgxY2ZmM2YyNywgMHgzN2ZjNTE5ZCwgMHhmNzI2ZWRlMCwgMHg3YjljOWFlZCwKKwkweDE4ZGNlNDk4LCAweDVjZmRkN2ExLCAweGJlOWNmODllLCAweDRlMWMxOWJkLCAweDAyMWRjYmMyLCAweDllODUzMzJmLAorCTB4MjY1M2JmM2QsIDB4YWY4NjY0M2YsIDB4YTE2ZTJiNzgsIDB4YjIzNzlmMDQsIDB4OGZiMWYxMzAsIDB4OGY3NmEzZjQsCisJMHhhODMwNzlkNywgMHg2M2ZkYjFiYSwgMHg0YmI3ZDIwZSwgMHhmZGEzYTg1ZSwgMHgwY2RiMzFhNSwgMHg5N2QxOGQ0YywKKwkweGJhMDljMzYzLCAweGVmYzY0MWZiLCAweDI3OTVkNjRmLCAweGRhZWE2Njc0LCAweGFmOWMzYTRmLCAweDFlZWQyZmFiLAorCTB4ZWNiZmFiYTcsIDB4Yjk1ZDMyZjksIDB4YWVhYTY3YTIsIDB4YWI1N2U0ZmQsIDB4N2JjYmU1NzQsIDB4N2ZiNWQzYWYsCisJMHhlMDNkZjUwNCwgMHhjY2VmNWJmNSwgMHhlZmZmYmRkMSwgMHhjNzllYjMxZCwgMHgyMzJiZGNmZCwgMHg3ZjdkZDNkZiwKKwkweDU4MTljNDQ2LCAweDBjNTNkN2M4LCAweGQxYTg1ZmYzLCAweGRkNWFjNWVmLCAweDc0ZDY2MGY3LCAweDA3Mjg5NTRiLAorCTB4MGRjMmRmZjgsIDB4MWE3ZDRmM2MsIDB4YmZiNjJjNjAsIDB4N2I3YTZkNDUsIDB4NTA4YjI2NjIsIDB4NTg1MzVmN2UsCisJMHhjYzMzNzZmMiwgMHgzN2Q3ZDM1MywgMHhiYzIwZWUxYywgMHgwMTNkZDk3ZSwgMHgwYzBiZGM2MywgMHgxOTdkMGY0OCwKKwkweDg1OGM2NzYwLCAweDE0YjBhNDdmLCAweDg5MWJiM2NjLCAweGZkNmNiZmZmLCAweGQ3ZTE1ODhiLCAweDQ3YjM3ZjVhLAorCTB4NTU1NmZlYmYsIDB4NjJiNmZlYmYsIDB4YmMzYmZhZmQsIDB4OWE0ZmY1ZmEsIDB4OTc3ZjVmYTIsIDB4MjlmZWJmNGYsCisJMHg0ZmY1ZmFkNSwgMHgzZmQ3ZWJmNSwgMHhmZDdlOWU3ZCwgMHhmNWZhMDIzMywgMHg1ZmFmNTUxZiwgMHhmZDY2ZWNmNywKKwkweGQ3MmVlNzdhLCAweGU4NWU2YmFmLCAweDM2ZmRmZDM2LCAweGQxYTA3NDcxLCAweDBiNGYyNjkzLCAweDc3MTFkZGQ2LAorCTB4MTk4MThlMWYsIDB4YTM0MmU4NjIsIDB4N2FmZTg1YjMsIDB4ZGQxYTVmY2EsIDB4NzhkZDEzZjYsIDB4ODYzMWY0ZjEsCisJMHg2ZmNiYmM4OSwgMHg5OTg1MWY0OCwgMHg3Zjk4MTc0MCwgMHgzZjkyY2M5OSwgMHgxYmVmM2QyNywgMHhkNDNhOTk5ZCwKKwkweDU2ZTRkMGJlLCAweGY1OGYzZWFjLCAweDY3OTI0NzhmLCAweGYwOTRmNDQzLCAweDUzZDQ0Nzk3LCAweGEzNWIyZmU4LAorCTB4NzQ0OGYyZmUsIDB4ZmQwMzFhZmEsIDB4YTA2ZjgzNGEsIDB4NGVjZGQ4MzgsIDB4MDQ4OWM3MGUsIDB4ODg3ZmI3NmUsCisJMHgzYjQzOTc1NSwgMHhlMDA1MzM2OCwgMHgwM2U3MGQ3ZCwgMHgzMDk2YmZlMywgMHhkZjFkZTI5ZSwgMHgxYzQ2OWQ2MywKKwkweDQzZDYxNmY3LCAweDQyMmNmOWNmLCAweGVhNzMwMGNmLCAweDY0MmM3ZGNlLCAweDdmODg5MzdlLCAweDgxNTk5NzVjLAorCTB4NGFkZTkxNzEsIDB4MTYxN2EzOTQsIDB4ZjY4MzdhOWMsIDB4Yjk0YzVlYjMsIDB4NGUzMjdiYTQsIDB4NjhjOTdlZTMsCisJMHhiOTBhY2VjNiwgMHgyNmZiODdkMSwgMHg4YWI3ZWU1MCwgMHhhOThmYTA3OCwgMHg5ZTdjMThlZSwgMHhkYWNiZjExNSwKKwkweDU3ZTkxMmU5LCAweDdlNTAyNzI2LCAweDI1NzdlZDU3LCAweGZmYjU0ZmQyLCAweDk5NzU5ZmMzLCAweGZmMWVhZTNjLAorCTB4YzM1Y2IzNWMsIDB4MGJiMDliNmIsIDB4NWY3MDdkYjgsIDB4YmJmNTRhYTYsIDB4YjI3NmFhNjAsIDB4OTQ0ZWJkNDMsCisJMHhkZjFmZDBmZiwgMHg0NGQ4NzhjNywgMHhjMmM3YjlmZSwgMHhhMjk1MDRlMSwgMHhlM2E2NGM1YywgMHhiOGVlYjQ3NCwKKwkweGNiZWU3OGZlLCAweDRkZjBlMTYzLCAweDIyZTU5ODUwLCAweDAyY2YxZmJjLCAweDk1ZGUxNzY0LCAweGRmZmQ0Zjk5LAorCTB4ZTM4ODgwYWIsIDB4ZmVjMzhmZmQsIDB4MTU2ODRhM2QsIDB4YzA3ZmQxYzUsIDB4NWJmNDcxZjQsIDB4YTM4YTI1OWEsCisJMHg4NWUwMDBmZiwgMHhmNWU5YzdhNywgMHhjYWQ2MWVhMCwgMHgzM2JjMDVhYiwgMHg0ZmJjMWRiMCwgMHgxODRiMzRmNywKKwkweGZkYmFmYWZmLCAweDc4YzNmNjBkLCAweDc4ODdmODNmLCAweDU5YTFlMmQ3LCAweDU4NjY4NzQwLCAweDYwM2ZiZGQ3LAorCTB4OGY4YmNmMTQsIDB4NDE5MjhlOGIsIDB4OTNmZTYzYTIsIDB4ZjdhYjlmOTEsIDB4OWZiOGRiMjgsIDB4ZDRlYmQyN2EsCisJMHhkMTk4N2RjNSwgMHhiZjIwZTc4NSwgMHhiY2MyZGVjYywgMHhlNzMxYjNlNSwgMHg4N2JkNjAwYywgMHhlOTc0N2ZiZCwKKwkweGJmMmZiZTI4LCAweDMxNjc2NTY2LCAweDRmZDg4ZGQxLCAweDdlZTU3YmJjLCAweDk3OGFjYjJhLCAweDNlZjEwYWYyLAorCTB4ZjdjYzU3MmEsIDB4YzdkNDM3MjYsIDB4ODc2MmJiZjAsIDB4OTBlNDYzZWYsIDB4Y2JhN2VlZDEsIDB4ZDk1OWVlNTcsCisJMHg0Njc4ZmI0MywgMHhkYWQ2NmY3MSwgMHg4MTljM2JhYywgMHgyZmM3Nzg5OCwgMHg2MzFkODUzMywgMHgxYTY3MzEwOSwKKwkweGZjMzdhNjEzLCAweGUxOWQzM2JkLCAweGU1NGVjYWZhLCAweGNiNWZhYzZjLCAweDg4NmM5NzllLCAweGNmNDE0NmI3LAorCTB4ZDdiYTA5MmYsIDB4NjA3YjM2ZTAsIDB4NWViODE4YmMsIDB4ZThkZWY0MTIsIDB4M2NlMTMxZWMsIDB4ZThiNTgyNWUsCisJMHhkMmI0YjhjMSwgMHhkM2ZiYTZlMywgMHgxYzkzNzE2ZSwgMHg4M2FjNDFiYSwgMHg4ZGQ0YTBmOSwgMHgwYWNjNGFlNywKKwkweDVlYzVmOTllLCAweDgzMmZkYTdhLCAweDY0YmNmNzI2LCAweDc2ZWZiODY0LCAweDI0MzVjNTRmLCAweGNkYzk0ZDRmLAorCTB4OGZhMDZlZGUsIDB4YzhiNGJlMWYsIDB4YWYwNjE4MTksIDB4NTFlY2QzZGEsIDB4YzVjYWM0MmUsIDB4NWY4NTMyZTcsCisJMHhjNjRkOTkzZSwgMHgxZTA2MTk3NSwgMHg3NDNmOTNkMiwgMHg1ODdlNmZmMiwgMHg3ZTU4ZjNjMSwgMHhmOTQ2MDNmOCwKKwkweGZjMzk2Y2VkLCAweDk0ZjE0NjU1LCAweGY3MjRiY2NhLCAweDJmNDIyYzVjLCAweDA2MDRhYzM3LCAweGU4ZjYwMzFjLAorCTB4OTgwYjBiNGEsIDB4NjZiMjFmNDEsIDB4OThkMmQzYjIsIDB4NDM2OWU4OGYsIDB4M2FkZThiZTksIDB4ZjY1ZWNlZjgsCisJMHhjZmY0NjJiYiwgMHhhZmY4YWJlZiwgMHgyYTNiMmM2NiwgMHhmMmM3YWY1ZiwgMHg3NThmYjFmYSwgMHgxZDlhMGU2MiwKKwkweGRlNTM3MTYxLCAweGUwYWYxODUwLCAweGFmZjcxODRjLCAweDNiNjM1N2ZiLCAweDFmNzk4ZjdjLCAweGUwMWVmMGQ1LAorCTB4NTc0Mjc3YjksIDB4MjZkYmRiMDQsIDB4ZWIwNzdkMWUsIDB4OTZkZGVjMTMsIDB4ZTEyZWY4MDIsIDB4MDA1NWU2MTYsCisJMHhmMmRlYTk1ZiwgMHg3NGYwMDU2OSwgMHhiMDJmNDM5NSwgMHhiZGYxMzZkNCwgMHgzN2VmMGE2ZCwgMHhkZDI2YmY3ZSwKKwkweDQzZGY4N2JlLCAweGZiMTMwNTczLCAweDA0NWVmY2EyLCAweGQ1MjMzZjZkLCAweDBhYWRhN2JlLCAweGJlYTE1NmU1LAorCTB4OGY4MTQxZmUsIDB4Y2ZlM2ZiMTQsIDB4MzAzZDYzZTcsIDB4YWQxNjY4ZGMsIDB4YmJkNDQwN2YsIDB4NTRmNzhmZWMsCisJMHhkZDE2NWNmMSwgMHhmZjQ1OWJmNywgMHg5NzAzNzY0OSwgMHhmYjEzMmE1NywgMHg5MzdlYmNiNiwgMHhmNTZhYjdhOCwKKwkweDY1ZjYyNjFlLCAweGE4YWI3ZDc5LCAweGRlNzlkYjM3LCAweGVlYjdiMDEyLCAweGZjNjJiNWZiLCAweDJjMGM1YmI0LAorCTB4ZWVjZjQzMTAsIDB4MTAyYzA5YjksIDB4MzVjOTFmNDMsIDB4ZDFiMmJhYzksIDB4M2IyNWNmY2UsIDB4YmVlYTY0NjcsCisJMHg1YmJkZmFkMywgMHg0NTc4OWI4YywgMHg0YjNiZWViZSwgMHhmYjdkMzhlMSwgMHhjZmE0YzliOSwgMHgzNjc4MTBlZSwKKwkweGVhZTk5NTY1LCAweGFjZmVmM2I1LCAweGYyNzNiNDVkLCAweGFhN2I4YTc2LCAweGFhZjNkZmFlLCAweGUwNzI4NDlhLAorCTB4ZGQxYWU1ZWMsIDB4Yjc0ODJkN2EsIDB4ZDNmMjM4NzcsIDB4YmMyMWJmNzEsIDB4YTMzNTNhMTIsIDB4YTc4OGIxM2MsCisJMHg2ODNkM2M1MywgMHhhNTUzYzA1YywgMHg3Yjg4OWU3MiwgMHg4NTM5NTlhZSwgMHg2ZTgwN2JjYSwgMHg5NWExZmViMSwKKwkweDgyZWYyYTVlLCAweDlmY2YwYWIyLCAweGJjMmEzZjQzLCAweDYwZmQwZWRmLCAweDgzZjQyYjc5LCAweDFmYTEwN2NmLAorCTB4ZTMwMDNlN2MsIDB4Zjg2NmZkNjEsIDB4YTA5YmNiMGUsIDB4YjdkZjJjM2YsIDB4N2JlNTQ3ZDIsIDB4Yjk1MzU2NTcsCisJMHhjYTlmYTU3NSwgMHhhM2NlNTc2YiwgMHgwMzJiZGRlNywgMHhiMmIzNWNmNCwgMHg4ZTY3ZWE5ZSwgMHg2YmVkZmFlMiwKKwkweGIzOTQwNWU3LCAweDk5ODBiY2Y4LCAweGU3YTIyYWEzLCAweDgwYmNiNDNhLCAweGZlZjBkMzBlLCAweGI4YTNjZGRjLAorCTB4ZmU2NWNjMWMsIDB4ZmU5YzJkYTcsIDB4ZWNjODllZTksIDB4YTM0ZjlkMGQsIDB4ZTdlMjliZGYsIDB4YTFiMTkxZWIsCisJMHhkNTVkZWE5OSwgMHgzYmVkMWM3YywgMHhhY2IxMGVlNiwgMHgxNThjN2U0YSwgMHhlYTRiZjVkYiwgMHgxOTk3Y2E2YSwKKwkweGNjZWFlM2NiLCAweDI1NmE2MjEzLCAweGZlOTc0ZWJmLCAweDEzZTkwODk0LCAweDVmMmY1OGE1LCAweGRmYzNjY2YzLAorCTB4ZTMxMDFkNTMsIDB4M2VjZDg1YzgsIDB4OGE2NThlOWMsIDB4YzRmMzFiYmYsIDB4OWQwMGRlZWQsIDB4MDhiZGNmZWYsCisJMHg5YjFmODM5ZCwgMHhhNjJhZjE3NCwgMHhhZWUyZTk4MiwgMHhjOWQxZGJkMSwgMHg3Njc0Y2EzMywgMHg4OWIxN2NhYSwKKwkweGJlYjI1OWRhLCAweDcyNjc2YmE3LCAweGQ1ZGFlYWQ3LCAweGM3YmJjZDJlLCAweGM1MThmODgzLCAweGIwZGU2MWU3LAorCTB4YjhjMDY1OGEsIDB4ZDMzN2RhOGIsIDB4YmFjNWViYjgsIDB4YmRmOTdjYzEsIDB4M2UyNDA3ZDYsIDB4M2RiZjYxNWYsCisJMHhiNWYzMTRlYSwgMHgzYWI5MjA2YywgMHg0NThiYzVjNiwgMHhjYTAzMjE0OSwgMHg5ZDdmZjdjMywgMHhjOGZhZmM0NCwKKwkweDQ3OGEwNjQzLCAweDAzNjE2NThlLCAweDUwNzhkN2FlLCAweDgxM2Y1OGQzLCAweDEyNzk1MmY1LCAweDk3Mjg1NzRhLAorCTB4ZjJjNjU1MzIsIDB4N2U0MjJjNjUsIDB4YWI2ZmQ4MmUsIDB4ZTQ5YjlkNzEsIDB4Mjg1NjQzYzAsIDB4M2MwZWNiOWYsCisJMHhiYTkxZjNjYSwgMHg4OTE0YWY0OSwgMHhlY2QyMjhmNSwgMHg3YzRhNmRkOCwgMHgyOGRkNmY3YywgMHhlN2Y1OGZmMiwKKwkweDliZjdlMjk1LCAweGQzMmEzOTU3LCAweDFmZThmZWQxLCAweGU2Y2M3ZjIxLCAweDQyZGNmMzM5LCAweGUzMmRiZmMwLAorCTB4ZWY2YTdhNGQsIDB4YzMwZDU1ZWYsIDB4Nzg3ZGUzOWUsIDB4ZjJjZGY0OTQsIDB4ZmJmYWMzM2UsIDB4MWZkZTgxYjgsCisJMHgyYjljNzljNiwgMHg1ZTY2MDNmOSwgMHgwOGMyYTZiMSwgMHg4YzZiMDlmOSwgMHg5MzUwOWM5YSwgMHhlY2I2M2Q5OCwKKwkweGYzMzE2MjRkLCAweGFiZTU2NDc4LCAweGVjMDkwYTA1LCAweDc2NGRlMTAwLCAweGU3Y2M3NDZhLCAweGVhNTI3ZjJiLAorCTB4MjJhNjNjYzQsIDB4N2ZiOTM3OTEsIDB4OGNlMTQ2NjUsIDB4N2JlZmQxZDEsIDB4YjMxNDFkMDQsIDB4YzVmZjkyNGUsCisJMHhmYzk3ODM2ZSwgMHhlNzUzOWY0OCwgMHhkYjBiNWE3NywgMHg0NDVlNzg3YywgMHg5OGJjYzcxZSwgMHhiNTk2MzM2MywKKwkweGY5NmIzOWQxLCAweDIzYzkzMjZmLCAweDRjYjVjNGY5LCAweGMxMjNiYjA1LCAweDdiMjE2NjE5LCAweGZjMjY1ZmI0LAorCTB4ZjkwOTFmZDcsIDB4MDY3ZDkxZjksIDB4NjhlNzJmYzEsIDB4YzhmOWUxZjcsIDB4ZTljOGY5ZGUsIDB4ZDQ5ZTYyNzUsCisJMHhmYTQ2ZWQ0NywgMHhhZmFkM2U0OCwgMHg1ZjdhNzYyZiwgMHgyZTlkMDAwZCwgMHgyMmYzNjgzZSwgMHg2ZGM1MDk3OCwKKwkweGJjYTAzZjc0LCAweDEyNTk2MjViLCAweDIwZjNjMWMxLCAweDZjYmRiOTkzLCAweDQyYzk1NmRjLCAweDFiNTc5ZWIwLAorCTB4YmYwOTg3MDIsIDB4ODMyMWVhYmQsIDB4NWRhMWZjYTYsIDB4ZWU4OThhNjMsIDB4Nzg4MzFmNjcsIDB4NmU1ZTIzYjEsCisJMHg0MzgxOWMyZSwgMHgxZTEzMTYxNywgMHhiZjc5ODkxNywgMHgyNmIxZTYyNSwgMHg4MGJmYzM1YiwgMHg3ODdjZjk4NywKKwkweDc2ZTJlMDlmLCAweGNmZDZlZmNkLCAweGFhOTJkZWYzLCAweDRiN2Q2MzZmLCAweGEwZjk0YzhmLCAweDk3M2NmOGYxLAorCTB4NDRjNGE3ZjgsIDB4ZjFkYWYwNTgsIDB4NzAwNDZlM2MsIDB4YTBmYzg1YmUsIDB4ODgyOWRjMjAsIDB4YjY5ZmJlNWYsCisJMHhlMzBhNjljNCwgMHhhOTdlZTAzOSwgMHgzMGYyOWFiMywgMHg3ZjI4MTgyNywgMHhkZjJlOWUzNSwgMHhmMzY4ZjYxNywKKwkweDZkM2QyNzI4LCAweGNmNDRiMzllLCAweDczZGY3MmQxLCAweDdmYzg1MzBiLCAweGFlZDY3YWUwLCAweDlmMTZiY2YwLAorCTB4Zjc4ZDhkNGYsIDB4MjhlMmQ3YWQsIDB4NDEzZjVmMjIsIDB4ZGY3ODNiYzAsIDB4NDc5ZTM4ZDgsIDB4ZGIzZDY3NjgsCisJMHgyNDY2NGYzMCwgMHg5NTkwYzZiZiwgMHhjMGQ3ZTcxNywgMHg1NGZkMjBkMiwgMHg2NTFmMjg1OCwgMHhhNGU3OTZiZCwKKwkweDhmMjk1MjllLCAweGU3OTg5ZTFiLCAweGJhNzQxMTY0LCAweGI5ZWZjMWQ2LCAweDNhMzdlNmQwLCAweGQxZDFjYjhiLAorCTB4MDZmZjljNTksIDB4ODZkZTVhMmMsIDB4MjYzNGE2YWYsIDB4YWJiNmJmZmYsIDB4NmQ3NWZjOGUsIDB4YzQ0MDZhM2YsCisJMHhmNDEyMDY0OSwgMHg4MjBkNDdmYiwgMHg2ZDllMDYxNCwgMHg3ZGMwNGFhYiwgMHgxZmJlMzY5MCwgMHgzZDc1ZDBkNSwKKwkweGQ4ZjJlZmJmLCAweDI4NWY3NDAzLCAweDNkMjJhOWY0LCAweDc1ZjY4OWQ0LCAweGZhZmVmNGViLCAweGUyMDFmZGEyLAorCTB4NDA3OGY4ZDcsIDB4OTgwZmZmYmMsIDB4MWU1ZGExMzMsIDB4NjdlN2ZmZWYsIDB4Y2JkZjdmMDksIDB4ZTliZjcxNGEsCisJMHg5MzgyODZjYywgMHgyOWI3MDAwOSwgMHhkMWI5ZDE4ZiwgMHg3NGUzZjI1MSwgMHhhNTU4M2JlZiwgMHgyNmNmNzg2ZCwKKwkweGNhZjdlMTJiLCAweDBmZmZhZmM0LCAweDk3ODQ0ZGIyLCAweGRmNWYxMmZkLCAweGYxM2I2OGQwLCAweDJlMGFmZWMxLAorCTB4N2QzZmY2MDcsIDB4MjhkMTg2ZmUsIDB4N2QyNTcyY2YsIDB4OTFhZTcxM2UsIDB4ODE4Yjc3ZGYsIDB4YzlkZjc4N2UsCisJMHhmOTcwZjU1OCwgMHgwY2IyMzM2MiwgMHg1ZmNmNGNkZiwgMHg4ZDdiOTdhMSwgMHhkYTRmN2I4NywgMHhkMzdmOTI1NCwKKwkweDRmM2Q3MGIzLCAweDg0YjEyNWZlLCAweGY3NDIyOGY4LCAweDgzYjlhM2U2LCAweDc4ZGMyMWUzLCAweGUxODBlMzZlLAorCTB4ZjRiMWY5ODMsIDB4NDUyY2RkZjAsIDB4NjZmODZkYzAsIDB4MWU4Njc4ZjIsIDB4YWYyNTczYWUsIDB4ZTFjNzVkYTQsCisJMHhmNTBiMjliYSwgMHhiNGU5Zjc2MywgMHgwZDdjN2NkOCwgMHhjMzU1MDNhZSwgMHhmODZlMmI5ZiwgMHgwMjlhNzhhNiwKKwkweDhiMGU1NGYwLCAweGMyMmZmYWE3LCAweGYwZDMwMWQzLCAweGMwNGNmY2YwLCAweGYyY2Y2ZmYzLCAweGQ2ODYyZWZiLAorCTB4NmRmYjQzN2YsIDB4MWVmZTFjNjcsIDB4YzUwOWI5ZWIsIDB4MzNmYmMwMzYsIDB4MmZhNzlmYzIsIDB4MDRjMmY2OGQsCisJMHgwNWNiM2FmZSwgMHhmOTBiOTY3ZCwgMHg4OTVmMjVlMywgMHg0YzlmNWYwNSwgMHgwYTlkNjRmOSwgMHg3MmMxYTk0YiwKKwkweDJhZWY0MmU1LCAweDRhN2Y3YTM1LCAweGZjYTAxMGQwLCAweDc5YmFmNjdjLCAweDQ0NzdmOTU4LCAweDk5MDM4NWM4LAorCTB4Mzg3OGIwZDIsIDB4ZjRmOWU2MjgsIDB4YThiOWI1OGIsIDB4ZDU3ZGVlNjcsIDB4YjQyZTUwY2MsIDB4NWVmZGZiMDgsCisJMHhlZjA1YTc2NywgMHg4OGYwZDU5ZiwgMHgwNjc4MzJlNSwgMHg1ZWM1OTE0ZCwgMHg2NDdmOTcyYywgMHg4Y2MzZWQ1MSwKKwkweDZkZTNlMDY3LCAweDZkMWJlMzhhLCAweGFiZjllZDNjLCAweDBmYWU2MmFjLCAweGNjNjU2N2E1LCAweGM1NzRkZmRiLAorCTB4ZDQyZjc0MmIsIDB4NjQ4NTcyYTYsIDB4N2ZjNmQ3ZWYsIDB4Y2U1ZTllYmIsIDB4NzY5MmJmNzUsIDB4NWY5N2E3MDMsCisJMHg0OTM0YmQyMSwgMHgxYjdlMjU2ZiwgMHhmMjI5NDFjYSwgMHhjYmVlMDk3MiwgMHhmZjM0MDI5YiwgMHg0M2IxZTAyMCwKKwkweGVkYTc4YTFhLCAweGY5YjQ1ZTgyLCAweGUwZDdmMzY5LCAweDkwYjk1Yzc2LCAweDlhZjFjMWQ2LCAweDQxYzY5NDk5LAorCTB4MTdkMzVlZDEsIDB4ZTFmZjQyNDksIDB4NWM1ZjQ4YmMsIDB4MGY3M2YwYTEsIDB4ZmJhZDBhMTUsIDB4ZTk1MzI5YTYsCisJMHhiMTAxY2E1YywgMHhkY2I5MWUyZiwgMHhmODNkZWMzNCwgMHhmNzZmMDI3ZCwgMHgwZjYzZmM1ZSwgMHgyZWExYjVmYSwKKwkweGMwMGJkZDIzLCAweDhkY2Y1ZTk0LCAweDRiZjEyZjc4LCAweDBjMzNkZDBhLCAweGY3OGQ1NGY0LCAweGUyZmQzZDFjLAorCTB4ZjNiNDQ0ZjksIDB4ZjJlMmNjZGUsIDB4MmUyY2NkZWMsIDB4Y2EyZTA3MGYsIDB4ZTQ1ZTc0ZDUsIDB4NzI5YzhmYzUsCisJMHhjZTlmZmQwYywgMHg0ZDNlYzU5MiwgMHgwMzllMGY0ZiwgMHhmM2M2NThkOSwgMHgxZWMyZWRkZiwgMHg1N2Q4YmZiMCwKKwkweGE3ZGJmMDhmLCAweGM1MmNjNGZjLCAweGIyMWZkYmQwLCAweDQ2ZDcwNGNjLCAweDBiY2QyNDUzLCAweGM5OGYwNWZkLAorCTB4ODJlYzliYWMsIDB4NmRhZmJhNWUsIDB4OTM5YjljZjAsIDB4ZmNhOWExZTMsIDB4OGVmNjg2NTksIDB4ZTNkZjhiYmQsCisJMHhlNTRiM2E3NiwgMHgzZWUwMTY3MiwgMHhjNjEzZWYwNCwgMHhjM2FjZTQ3ZSwgMHgyZjE4NzJmYSwgMHhjM2JkZmEzZiwKKwkweGExMzNkN2M5LCAweGIyYTNkZjgyLCAweDM4M2Y4YWU5LCAweDI0Yjg5ZWYxLCAweGM3ZmRkMTg5LCAweGVhMzZjODNmLAorCTB4NTdhZGExY2UsIDB4MmNlYzFjYjksIDB4M2I0MWU5ZWYsIDB4Mjg1NGU0MmUsIDB4ZmJiM2E3MmYsIDB4ZmJkYTBiMGUsCisJMHhmMmY4NWYxYSwgMHg4YWQ3YmNmOCwgMHg0ZWQ3N2NmYiwgMHgzOWUzMGUyOSwgMHhkNzhlOGQxNCwgMHgyMDJlMDc2NCwKKwkweGJlMDQ2ZWRmLCAweGFmZWM5Yzc4LCAweGMyNzRmZjFlLCAweGYzMTRiMzhmLCAweDFlYjAyNzVjLCAweDk1ODZhZmJhLAorCTB4ODdjODljOWIsIDB4OGU4MzA2YzUsIDB4ZTZjOWFlZGYsIDB4NDEzZGEzNzQsIDB4ZjNkZDkzZmQsIDB4OWFiYjQxNjMsCisJMHgyYzNiOTdkZSwgMHg3ZGI1Y2YwYywgMHgxMjc2NzE3YywgMHhiNjcyYTdkYSwgMHg5ZDc5ZWY2NiwgMHhlZDhmYzc4OCwKKwkweDdjNGVjOTczLCAweDBkZjZiN2ZiLCAweGRhMDc3OWIxLCAweDczZjAyZGYzLCAweGNiNDRjN2JiLCAweDU5ZmViYzhiLAorCTB4MGIzMTdlZDgsIDB4ZTk3NjgzZGMsIDB4Nzc1OTc2ZTIsIDB4YzE2ZGZmZGUsIDB4ZGEyZThiZTcsIDB4OWQ4Yzc3NTgsCisJMHhmN2NhNjhiZiwgMHhhMmQyYmNlOCwgMHhmZWY0ODk4YiwgMHhmNDlmOTE2ZCwgMHgyYTRiYzhiNiwgMHg4YWYwZjMxNCwKKwkweGRmZDkxNWU3LCAweGM2ZjdmZWQwLCAweGZmNWRjYmM5LCAweDk3MmQ0OGY5LCAweGQwZDk4NTk3LCAweDZiZDRhMzZmLAorCTB4ZTM2YTdmNDIsIDB4YjlkMGJmZDQsIDB4N2ZjMGI3OTEsIDB4ZDE3ZjM2ZWYsIDB4Nzc1ODUzM2MsIDB4ZWQ4M2I4Y2MsCisJMHg3NzU5NWEyZSwgMHhhOGJhZWM0YSwgMHhiZTc0NzcwNCwgMHg2YjdmYWE3NiwgMHhmMDRiZTdhNSwgMHhjNzg3NGEzOCwKKwkweDNhMDVmZjY4LCAweGJmZWQwZTNjLCAweDVhZGZlYTg4LCAweGZkMjVmYzU5LCAweGZmYTExZjhmLCAweGQxZmMxZDNjLAorCTB4N2RlOTBiN2UsIDB4NDdkYTg5ZmYsIDB4MjcyZmMwNmQsIDB4NzhlZjU3YmEsIDB4OGVlYmYzMGEsIDB4N2NmZWU5OWIsCisJMHg4YWIzYjg3NiwgMHg5MmZkYWZjZSwgMHgzYmM2YjlkMSwgMHgwNmYyN2Y4ZiwgMHhiOWRkY2RlNiwgMHgzMWM1ZTRjNywKKwkweGY5OTE4YzA2LCAweDQzZjQ2MWRlLCAweGYwODY3MzIxLCAweDc5ZWQyOTFlLCAweGNkMDE3NjQzLCAweDQ1YmRmZTI3LAorCTB4MGYzMTNiMDksIDB4MzhhYzUyY2UsIDB4NTg1OTNmNTEsIDB4ZjEzNTc4NGYsIDB4OTNlNDg1ODMsIDB4ZmFkNzk3MTYsCisJMHgyNjcyODcxZCwgMHhmNzZhM2U0NiwgMHhmNjJiYmM4NSwgMHgwYjYwZmY4ZCwgMHhjMGFlY2MyYywgMHg4MTU3ZjczMiwKKwkweDljNjIzNzczLCAweGQ5NjFlMWFkLCAweDc0MjFlZmM5LCAweGM1YTIzZjkxLCAweGYzZjQxNWJiLCAweGUzZDQzMDBhLAorCTB4ZTNmZTc4NjcsIDB4NGIwMzcyM2YsIDB4MGU3ZTZlOTEsIDB4ZGZlMzAwZTIsIDB4MDFiZDg0ZjIsIDB4ZmYwYTRmOGEsCisJMHg4ZjZiM2VlZiwgMHhmNzIzMWJjNywgMHhkZjJiNjQ1NiwgMHg4YjZmZGY0YywgMHg3ZjE1MzdkMywgMHhlYjliYTQ3YSwKKwkweDhmMzgxNTliLCAweDU3ZTdiOTQ2LCAweDhlNzg3OWI1LCAweDFiZGM1N2E5LCAweDViZGQ5MmE1LCAweGVlOTI3ZTViLAorCTB4ZmNkNWFiOTcsIDB4ZmJmMTc1ZjksIDB4YjQyZWQ5ZWMsIDB4N2NmOGI1ODMsIDB4YTEzZmU2MjIsIDB4ZjNjOGRmYmUsCisJMHhiYzZjZWJlZiwgMHgxNGZiZjc1YywgMHg0Nzg5Y2YzYSwgMHhlZjEwNGE0NSwgMHhkZjk3YjI5ZCwgMHhmYzI0ZTgyYiwKKwkweDBmMzAxNzllLCAweDIwZTYzNjU4LCAweDllMDQwNzdlLCAweDQzM2Q3N2NmLCAweDVmOWUxOGY3LCAweGEwZTg5YTM3LAorCTB4YTUzZjM3ZWUsIDB4NjQwZWM5N2IsIDB4NjNhY2ZjOGEsIDB4NzU0M2QyMGUsIDB4ZGUyNTZmNjYsIDB4OTMyMDc3OTMsCisJMHg0YTlkOWJkYiwgMHg4YzU5NjI3NywgMHhhYjM2YjlmZCwgMHhmYmViZTQ4YSwgMHhkMDFiNDZlYiwgMHhiYWYwZDczZSwKKwkweDhkODVjODUzLCAweDg5NTAzYzVhLCAweDZkZmRlMjU0LCAweGJmNzc5N2VmLCAweGEwZjA3YTRjLCAweGM2ZTc3ZTk1LAorCTB4NGE5M2U4NzAsIDB4YTM3MTRmYmEsIDB4YWZhNWVlOTksIDB4Y2I3NjM0M2EsIDB4MmM2ZmE4M2MsIDB4YThiZTUwMzIsCisJMHhlMDk1OTBlMSwgMHhkZjllYjczOSwgMHhhMmRmODRlZiwgMHgzNDNjNmViZSwgMHhhODBmN2U4YSwgMHhiY2ExMTZjZSwKKwkweDZmMDRjNmFlLCAweGQ0OTdlZTExLCAweGRkMTZmYTFkLCAweGJlZTY3ZjI3LCAweDM3MjgzOWIxLCAweDM5YWFhNzRmLAorCTB4N2RlZTdmNzQsIDB4Zjc5ODc0ODAsIDB4Zjg2MzYzZTksIDB4NzRjOWQ2ZmIsIDB4ZDFiMWQyNWUsIDB4YWUyZTE4MTYsCisJMHhmODkzZTlhMSwgMHg2NDBlYTNmYiwgMHg0NjFmZjY5NiwgMHg3OGI1OGNmYywgMHg5MTc5NDBmNywgMHhiOGIwM2Y3NiwKKwkweGY5ZWVhYzBmLCAweGYzMTUxY2M4LCAweDU1N2Y4NWFjLCAweDMzZWY3ZjY3LCAweGZkYWRmN2JhLCAweDNkMzg1YmNkLAorCTB4Y2QwMjdkZjMsIDB4YjcxZjhiM2YsIDB4MDM5ZGU4NGUsIDB4ZmM3Y2M4YTYsIDB4MzViYWE2N2QsIDB4OWUyNmZmMDIsCisJMHgyODY3NTY4NywgMHhkMzI3ZGZhNSwgMHhlZTMxYmZmMCwgMHgwNDU3ZDU3ZSwgMHg5OWU3YjVkZSwgMHhiN2JhMTUxNywKKwkweDFjODFlYzBlLCAweDczM2E1N2RjLCAweDc2ZjQ0Y2RjLCAweDNhNzhlMzY2LCAweDU3OGRhZDJmLCAweDAyNzFiODA3LAorCTB4NTY0ZTllOWYsIDB4ZmVmYWUyMjcsIDB4YmFhZmM4NTksIDB4ZDRlZmRjMzUsIDB4MzYxOWQ3ZGUsIDB4NDc3YWUzNTcsCisJMHg2Zjk0Yzk4ZSwgMHgyNDhjZTAzMywgMHhkNjg4N2VlMiwgMHhjZTBmMmI0ZSwgMHhkZmE2NGJhNywgMHhmOTkwM2ExOSwKKwkweGQwM2JhZDM0LCAweDMyYmE0MzE1LCAweGZhNDFjNmZjLCAweGZlMWJmODM2LCAweDk3ZWY0NTdiLCAweGY1MGQ5MGIzLAorCTB4ZjI2NmFiZjQsIDB4MzMxYzRlZDMsIDB4ZjAzYzFkOTMsIDB4M2I3NzNmMWEsIDB4N2IyZjFlZTQsIDB4YWRlZjA3MjQsCisJMHgxNDY2ZmUwYywgMHhlYzgxYjVjOSwgMHgzNzZlNmVjOCwgMHhiOGRlZTk1YiwgMHhjOTgxNTM4MSwgMHg0MzJjZmY2MiwKKwkweDgxOTc4YmRjLCAweDYzODVkYWY2LCAweGQ3YjQ2ZWQ2LCAweDIwZmI0OWUwLCAweDQzZDdiNjIxLCAweGU4ZGI4ZmVmLAorCTB4ZDI3ODBmZmUsIDB4MWQyNjA5MzksIDB4OWNlZmQwZjQsIDB4N2RmMTM2YjAsIDB4Njc3ZjdkMGYsIDB4Y2EwYzYwNGUsCisJMHhhMDBiM2JlOSwgMHhkZjdlM2I3ZiwgMHhlNDJlZWQ0NywgMHgxOTYxMjYwNywgMHg3OGM1MzJmZSwgMHg3NjZmZDQ5OSwKKwkweDRiZGU5NzIwLCAweGVmZjg3OTFmLCAweGZhODliNDdiLCAweDlhMGZhYTFlLCAweDFlNjk5MzAzLCAweDhlYjA3NjdmLAorCTB4NGRmOWU2NjEsIDB4MmY3YjdmZWYsIDB4OWJlNDg1M2IsIDB4OTllMDM3MDYsIDB4YmM3OGJmZWMsIDB4ZTIwYzcyNzgsCisJMHgzZTM4NWRmNywgMHg3MDcyZTllMiwgMHgzZTA0YmYzZCwgMHg1ZjkwYTc4YywgMHg3MWQ3YzVkMiwgMHg5NzEzNThmZCwKKwkweGM5ZTNhZDI3LCAweDQzMWJhNWNlLCAweDU2OWFmMjYyLCAweGU4OWI3YjFkLCAweGRiZThjMDcyLCAweDcyMjk3YThhLAorCTB4YmRmOGM4Y2EsIDB4NjAxOTYwNmEsIDB4NmYwYTYxOWMsIDB4ZmNlMzY3NTcsIDB4OWVmMWMxYTQsIDB4Njg2ZTZmYzgsCisJMHhlZjRmNzllNSwgMHg5Y2VkZTJmZCwgMHgyNzNjNzYwNSwgMHg5Y2VlYjZmYiwgMHg4M2Y3MTZhYywgMHhhZTMxMTI0ZSwKKwkweDg5YWFmNzYyLCAweGRlZGMyNWI1LCAweGZlMmUwOTk2LCAweDhkMWI0ZGZiLCAweDU1NGVmZDJhLCAweDE0YjFiZWU4LAorCTB4NTI2MzM4NGYsIDB4OGViZGQxMGYsIDB4OTAxODI3ZWIsIDB4NWNiZDVhOWUsIDB4ZjhkYTg0ZjYsIDB4OWFmYmI0YmMsCisJMHhlMjk3N2JiNCwgMHg5Y2RkZjJmMSwgMHgzOGJiZmUwMiwgMHhkZTJiNzAyYywgMHhhOTlhN2RkOSwgMHg4ZGIzNjI2OSwKKwkweGM3YWI5ZmVlLCAweGViY2EwMTdmLCAweDJiM2UwZDBiLCAweGJkMjViZmNmLCAweDM3OWVmNDMwLCAweDhlZmM5N2QzLAorCTB4Zjk2ZGZmZDUsIDB4ZTY4Y2I5MDcsIDB4MjUwZGVhZDksIDB4Yzc3ZDVlYTIsIDB4NTgzZWZkYzksIDB4YmJmNDk1M2QsCisJMHg3NzQ5ZTdjYywgMHhiZWEwNjZlOCwgMHg5MzlhZGZmNiwgMHgwNzI0ZjU0YSwgMHg3ZDc4OTFkZiwgMHhmMjY5OWQzYywKKwkweDkwM2UwODZlLCAweGZjNWZiMDZlLCAweDNkYmVmYTBlLCAweDQ4ZDVjNzg3LCAweDc5YmRlMDU4LCAweDdiYTI2NDJjLAorCTB4MGFiZTg0NjEsIDB4Y2YwMThhNGEsIDB4ZDRiOWY3NzUsIDB4YmVjYmE0NDQsIDB4NTVlNDgyZDYsIDB4NTJlMGE3OTgsCisJMHhlODYyY2FkMywgMHhhMzJjZjgyNCwgMHg5ZTJhY2NmMywgMHhiZjhjOTg0ZiwgMHg4ODliZTI3MywgMHhjOTAzYmNmMSwKKwkweDNjNDIzOGZhLCAweGViNGY4ZjNjLCAweGZmNWIxZjlkLCAweDc3MmUxY2QzLCAweDFmYjg3MzViLCAweDI2MWNlYmY4LAorCTB4M2M3OGZlZWMsIDB4MjI1ODNhNzIsIDB4MWJkNWEwZTgsIDB4Y2FmYzhhYjgsIDB4YjY0Yjc2YjgsIDB4ODhmYTA5MjUsCisJMHhkNGY2ZGY3YiwgMHhjYWJlNTMzZiwgMHg4NWJkZmQ0ZSwgMHhkZTNkNjIzNSwgMHg5MjE0ZGU3OSwgMHg4MTMzZTEyNiwKKwkweDM3ZWI4ZGYyLCAweGZmNTc3OTczLCAweDVkZDE0ZDQyLCAweGZjZTc0Y2JjLCAweDRkZGM3NWE3LCAweDcwYjMwZmJmLAorCTB4YzYyMmNjY2YsIDB4OGJhZDE3ZTUsIDB4NzMwYjlmNDYsIDB4ZGY2ODQ1N2MsIDB4NGVjYmI2NDUsIDB4NmRmYTkzZTQsCisJMHhhYWQzYzEzMiwgMHhjM2I2NTliNCwgMHg4Y2RiYjNmYiwgMHgwYmQ1Zjc2NCwgMHgwNTY2Y2U3OCwgMHgxNGRkNjkxMiwKKwkweGVmMDA5OGE2LCAweDIyNDA5NTY3LCAweGM1ZGJiNWQ5LCAweGNkYzRlMGVmLCAweGEyYmRkYTAzLCAweDFmODMwZDk0LAorCTB4YzI2NzVmMGIsIDB4NzQzMGMxNGYsIDB4ZWI0MGNhNzAsIDB4ODk4MTMwYjQsIDB4ZTg5MzQ3ZGYsIDB4ZWNkOWM3OWMsCisJMHhlZTU4YWRjMCwgMHhlZTllN2YwMywgMHhhMDZiNmU5ZiwgMHhmMWUyNTU3YiwgMHgyMDEyZDY3ZCwgMHhlNjIyNWQ3YSwKKwkweDdlMzNlMWEzLCAweDAzOWYwZDFjLCAweDlmYjQ0Zjg4LCAweGZhNDFkZjllLCAweDhjYTBmODJmLCAweGVlOWVjYzE0LAorCTB4ZWNmYzkwZmEsIDB4YmU2NmM3NjksIDB4YmY3YzJkZjEsIDB4MTUxOGVjMTksIDB4Y2JmZTZkZjUsIDB4MDc3ZDQ3ZGYsCisJMHg5OGVkMGE3MiwgMHg2OTA1NjNkYSwgMHhhMzZmNGUyYywgMHhkMmZiNTkzZiwgMHg4YzQzNDRkYywgMHg5NzZkNmNiZSwKKwkweGI1YTU5ZjY5LCAweDIyZTI0ZTcwLCAweDA2ZmU3ZjZhLCAweGFhZDNhZmE0LCAweGE2MmNhZDM3LCAweDlhMzkyYmRkLAorCTB4YWY1ZmE5M2YsIDB4NGQ3ZmNkYmEsIDB4MzdlYTcxYzQsIDB4ZGE1ZTY5MTgsIDB4NGMwMDBjYmEsIDB4NmNkYjg3MjQsCisJMHg4MWZmYTQ2MSwgMHhhYmY1MDhhYywgMHg3ZDIwZDNhZCwgMHhmNDY4M2FlMywgMHhjZDNlZWQwNCwgMHg3ODcxOGE3MSwKKwkweDJmMmZiNmJjLCAweDg2MWRlOTUwLCAweDAwM2YxNjRlLCAweGRiN2Y2MmUzLCAweGU2OWY3NDFjLCAweGUxYWI4ZWE1LAorCTB4MDViZDcwNjMsIDB4ZDcxOTUzNWYsIDB4YzUxZTc3NzEsIDB4MTRhNzBkYzcsIDB4ZGQzZjA2NGEsIDB4ZjIwZTRkNzYsCisJMHgwN2Q4MWQ3MSwgMHg5M2E4ODcxOCwgMHhiZGQwNmYyMiwgMHg3NGNjYzdhNiwgMHhlNmRkNmZlZiwgMHg3OGUyYjdhNSwKKwkweDBkOTlhZjc1LCAweGZjNzdkZjU4LCAweDU3MDQ4OTlhLCAweDllMDJiYWRjLCAweGY3YTM4NjcyLCAweDhlNDhiYzgxLAorCTB4NjA3ZjA2MzcsIDB4NmI3ZjEwNTcsIDB4OWI4MTg5ZjMsIDB4OGIzZjAwZTAsIDB4YzgxOWM1ZWUsIDB4OTE4Y2Y1ODMsCisJMHhlMWNkN2YwMywgMHhlZjY4MWFmMSwgMHhmMzdkMTEzNCwgMHhlNzA2OTk3YiwgMHhhZjliOGNlYiwgMHhhZmJlNmUzMywKKwkweGU2NmZhMjMwLCAweDE2N2NkMDBkLCAweGUwMzY2ZWJlLCAweDVmZjc4NWZiLCAweGI3NzE4NDVmLCAweDY5ZDNmNWJlLAorCTB4YmVjOTdkNWUsIDB4N2Q1ZmM4ODksIDB4MzBmZmQwMzksIDB4ZmRlMTcyZjIsIDB4MmY5MmNmMzAsIDB4OTU5YjY3OTgsCisJMHg3OWM0NmJkNiwgMHhiMzc2NDcyNiwgMHgyN2E3OTgyZiwgMHhiN2NmM2Y1NywgMHg3ZTkxMzUxNCwgMHhjYzg4ZTM0ZiwKKwkweGNjMTI4ZTMwLCAweDE2ZmM2ZmY2LCAweDk3ZWZkMzJmLCAweDFlOWM4ZDA1LCAweDc0NmQ5YjgyLCAweDhiYmZhYTJlLAorCTB4YzlhZjhmZGYsIDB4MTJlZjE4MDEsIDB4ZjQ0MGMxZTksIDB4NmVhNTU3ZDAsIDB4NzVmNDgyOTksIDB4ZmRjNGVjOWYsCisJMHg5N2Y1YmU4YSwgMHgyZmJmOGNiZCwgMHg3NjUxYjdkNywgMHg1N2QwZGRhMiwgMHhmMjA3ZjFjNSwgMHg1Zjc4ZjQ4MCwKKwkweDJhMDZmZjhlLCAweGVmZDIzNzFmLCAweGZiNjk5ZGE0LCAweDNlZTg5ZmViLCAweGZhNDY2MzgyLCAweDNjODFlMjNkLAorCTB4NTg3OWM2ZmYsIDB4YWU1MTc4MDYsIDB4ZTI2ZTVlMDEsIDB4ZTY5MWFiNzYsIDB4YzFlZWJhZGYsIDB4ZGExZjU4NzUsCisJMHg2ZmNlODkzNiwgMHg3YWQ3ZDUwYywgMHg5MDZmZDczYywgMHgxNGM4N2M3NSwgMHhkZTBiYzY5NSwgMHgxN2VlOGEzZiwKKwkweDEyMGNmMGQxLCAweDIzZmQwOGI2LCAweDllNTgxZjBkLCAweDk3OGEyMTNiLCAweDhmN2YzOGEwLCAweDhmYmYwMjc2LAorCTB4YzQzM2M4NGIsIDB4MTNkNzNlNGYsIDB4ZTUwNThlNzgsIDB4MTlhNzllMTgsIDB4Y2JjNTVmNDksIDB4N2JiZDc4OWYsCisJMHg0ZmI2YWU2MywgMHgwZGM3OTdhOSwgMHg3OWFmYmY3MSwgMHg2OTc5NWM1YiwgMHgxNjU4ZGM5YywgMHg1NzE4ZGY1NywKKwkweDg2ZjlmYTBmLCAweGNmZDJlMmUxLCAweGEyY2Y4ZTBjLCAweDFhMjE5MjdlLCAweDRmYjgxZDFmLCAweDU2YjRiZjIyLAorCTB4MDdlODRkNTEsIDB4ZWI4ZDNlM2QsIDB4NTk4NTNhZTcsIDB4ZTRiZTIyYWUsIDB4MTU2YTczZTcsIDB4YzMyZTYyZDYsCisJMHhhYzUzNWVmNywgMHhiNWZkMDRiZiwgMHg5Y2ExOTM5OCwgMHhiNDEwZTVjMCwgMHg5NGM1MzZhYiwgMHhjMWFiNzkzNSwKKwkweGEzYzA0YWIzLCAweDljNzZiZjNkLCAweDdkYzQ2NmEwLCAweDE1Yjk1NThjLCAweGNhMzFmNzQzLCAweGJmNWZmY2U0LAorCTB4MTFkNjdlODgsIDB4ZTBjY2ZjOTksIDB4YjBmZjVjMGIsIDB4ZjJkYzNmNGYsIDB4M2JlZjFiOTgsIDB4MzIzY2EwMmUsCisJMHg3OGYxZmU2ZCwgMHg2MWZjMzgxYywgMHhlNGRlZmQyMiwgMHg1ZjNhMjZmMywgMHg1Mjk1ZGI1ZSwgMHg3MjU4N2U0NSwKKwkweDZmYmM1ODY0LCAweDQ0ZmFlNWNkLCAweGU5NWZhZmViLCAweDZiMWQ5YzRkLCAweGM0ZGViMzQ3LCAweGFkZjdkZmQ4LAorCTB4NGFlMWZjM2QsIDB4N2YwMTZiZjQsIDB4OGU0NjM5MjEsIDB4NWE5NjM5OWYsIDB4ZGQ2NWZlODUsIDB4ZjBhYjMyZWYsCisJMHg1Y2QxZWZiYywgMHgzZWEwMGUyZCwgMHhlNmY5MDFiYywgMHgxM2UyOTk4OCwgMHgzM2NjMmZmZCwgMHgyZmZkZjdlMCwKKwkweDlkZTc4YmQ0LCAweGZmNjA5Zjc0LCAweDcwNzI2NzViLCAweGZlODM0NGZjLCAweGNmN2Y4OWJlLCAweDlkNTRmNmU1LAorCTB4NTdkZGNkZTEsIDB4OWEzZmZjYTIsIDB4MjYyNmI3OWUsIDB4Mjg2NzVkMGUsIDB4MzFmOGJmMjMsIDB4YzIzZTY0NjMsCisJMHgzYWZmNzYwZCwgMHhmYWQ1MDNjYywgMHgxMmFiOWEzOSwgMHhkZTQ3ZmQxYywgMHhlMWYyOGRkZSwgMHgzMmVjYzZjYywKKwkweDQ3ZmQyYjE0LCAweGRjMWY5MGM2LCAweDQ1NjVkYWZmLCAweGZmNmI1Zjc4LCAweDk0NWUxOTdkLCAweGQ1MTk4ZjBiLAorCTB4ZTJkZmI5M2IsIDB4OGJjOWVlZjAsIDB4ZTBlMzg3ZjYsIDB4OTFmZjYzZmUsIDB4M2YxODk1YzksIDB4YzM4ZDdmZTgsCisJMHgyNzhhNjUwYiwgMHhlNjEwYmI0MCwgMHgyNmZkNmE1ZiwgMHg5ODRkZDQxYSwgMHg2NzdlY2U4ZiwgMHg4ZWUyYmYyNCwKKwkweGYxZDIwYWNmLCAweGQzNDQ5NTdlLCAweGEwNTBmN2YwLCAweGMzY2ZhMTFmLCAweGQ2ZjM0ZDVlLCAweGZkZTM3ZGYyLAorCTB4MzdmZjJkMGMsIDB4ZWVkMzBmZGUsIDB4MTdmNzhmOGIsIDB4M2RkYjU5ZWIsIDB4ZWYxYzk3OTgsIDB4NmU2MTgyMzcsCisJMHhkZjg5YTUwOSwgMHg0ZWJmYTczMywgMHhmNzRiZjdkMiwgMHhkZmQ2NmU3ZiwgMHhmNjEyMWQ5ZiwgMHg3MWU0ODU4MCwKKwkweDdhZTNmMDJkLCAweDc5ODUzZjhhLCAweDNjOWQ2ZmRjLCAweGM1ZWM3ZWVjLCAweDZmYTc2ZTVjLCAweDdlNmRmZGI1LAorCTB4OWViYWNjNmYsIDB4MDNjNTMwMzYsIDB4NjI2ZDNkNzgsIDB4NzBkOTRmMTYsIDB4OWM4NWUzZmUsIDB4YzM3YjkyNWEsCisJMHhiMTc1OGRmYiwgMHhhMWIxZDZmNywgMHhhYWU5ZTQ3ZSwgMHg5ZGY5ZTUzMCwgMHhlZmQzMmY1ZSwgMHhmNWMzYzQ1OSwKKwkweGY4YzhmZDU1LCAweGViZGZiNWVmLCAweGM0ZWQwNGY4LCAweDAwOTM4YzU0LCAweGU0NWZjOWE0LCAweGQ1ZTFlYjNmLAorCTB4YmYxNTY5ZjAsIDB4MDFmZmYyYTMsIDB4OTQ5MTEzZGQsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCisJMHg3ZGI1ZmYwMCwgMHhjNTU0N2MwYiwgMHhiZGRjZjhkNSwgMHhjMzc2NGNmYiwgMHgwODNjODQyNiwgMHg4MTNiY2Q4NCwKKwkweDQ0OTAyYzI0LCAweDhmMmVkNGFjLCAweDAzMTBmMGM0LCAweDU4NTA4MjJhLCAweDg5ZGU0MDIwLCAweGM1YjBmZDYwLAorCTB4NDA4MDIxNjYsIDB4MTUxYTg2ZDEsIDB4MjYwZGRhMmIsIDB4MjJlYzEyMDgsIDB4NzYwZDEyMDEsIDB4NGE4ODg5NDEsCisJMHhhZGI0NTUwMywgMHgyMDJhMjVmMiwgMHhkNDEwOTIwNCwgMHhlYjZiZmU4ZiwgMHg3MzMzOWNmZiwgMHhkMDgyMGZiMywKKwkweGNmZThmYmY2LCAweDk5ZGVlNjRlLCAweDdkZTczM2I5LCAweGZkOTk5Y2NlLCAweGY3Zjg3YmZlLCAweDE3YmVjNjEzLAorCTB4NjJhMmQ5YTUsIDB4Yzk2MzEwNmMsIDB4MmQ5OTkwZmYsIDB4NDNiMmIxOTQsIDB4ODkxYWU3MWEsIDB4YWZkYWMwYjEsCisJMHhmNTBiOTk5ZiwgMHgzOThkMTZlZSwgMHhmOTU4YzJjNiwgMHg2NzI2ZDkyMSwgMHg2NTlhYzYzMCwgMHgzZTBjNDI2NywKKwkweDA4YTgyMmZmLCAweDhmMzc5N2RlLCAweDMzY2NjYjMxLCAweDljYjM3OTVlLCAweGFjNjU0Y2U3LCAweGQ4NmFlOWFiLAorCTB4NjcxYTU0ZTIsIDB4ZmQ4OGM1YmEsIDB4YTFkYWI2OWYsIDB4YzJhY2M4MzQsIDB4NTdiNGY0NjUsIDB4NGM4YjU4Y2EsCisJMHg2OWRlMjhmMywgMHg5OTMyZmVhOCwgMHhlMWVmYmZkMSwgMHhiMDU3NTJiZiwgMHgyOWJjYmQ0ZiwgMHhiZDRiZmFiMiwKKwkweDdmOGM1ZWE3LCAweDM2N2ZjMjQ0LCAweDhjNTk2N2E2LCAweGVjNTdmMDk1LCAweDYxODdlYTcyLCAweDVkZGU2MDUzLAorCTB4MTkxMmU3YjUsIDB4YjJhOGQxMmMsIDB4YTEzMjVhYzcsIDB4MTY5ZGY4OWUsIDB4NjdiNThjZWIsIDB4N2U2ODk5ZTUsCisJMHg2Nzk4MTY0MSwgMHgyMGRiZjNiNywgMHhiN2QyZjMwNiwgMHhiZjljMzZjOCwgMHgyYzMyZmNmZiwgMHhmZjMyYzY1YSwKKwkweGMyZTVmOTgzLCAweGYzM2NjMmZjLCAweDU4NjRmOTgzLCAweDU5ZTY3OTA2LCAweGIyZDFlOTY2LCAweDNlODc5ODU4LAorCTB4YzQ4ZDlkMjgsIDB4YTM2OWI2MTYsIDB4ZmMyMmZkYTAsIDB4NmEyZmRlMTMsIDB4MDU4ZDNjNTksIDB4NzlhOTM2MzEsCisJMHhlMDAzMWFjOSwgMHhiMjVhYmJhMSwgMHg3ZTc5ZTBlYSwgMHhmMDBkYzAwYiwgMHg3NjRkYmY5MCwgMHg5MzJmMDA1YSwKKwkweDMxMWQ1NjkyLCAweGQzZjE3ZDQwLCAweGU2YmExZWYwLCAweGNmNGVlM2M4LCAweDllY2JmNjg2LCAweGI4N2VhOTkwLAorCTB4MWFkMzkxZjYsIDB4MGQzNmViYzQsIDB4MDMxZTIxZDMsIDB4ZWY4YmI2ODIsIDB4YTE1ZjljMzEsIDB4Y2I2MTVmOTgsCisJMHg3YzEyMGJkNCwgMHhkOTIxZDk2ZiwgMHhmNWZlYzZlYSwgMHg1ZjNlMmIyNiwgMHg3OWYzNDFiYywgMHg5NmZhZDdiYiwKKwkweGRlMzAxZmUwLCAweGQzOTJhZDkyLCAweGE5MmRlMzBkLCAweDk1ZGY3ZGY2LCAweDM4YjJkMGU5LCAweGVmZDViZmU4LAorCTB4OTlmYWVkNzksIDB4NTRiMTQyNDcsIDB4NTFkNjA5MzMsIDB4OGY3ZGY0ZTgsIDB4Zjk4NmRlZmYsIDB4NzdiZjhiOTQsCisJMHg4YzFlNmMyNiwgMHgzMDMyZTlmOCwgMHg2MWY4MDZkNiwgMHg4NjMwZjZlYSwgMHgxYTNkYmJhNSwgMHg3Y2Q1ZDhmMSwKKwkweDU4ZjExYTM2LCAweDI0ZmZmYWZlLCAweGE3ZjA3ZWIyLCAweDE0YzVhYzk0LCAweGUwMTAyZTdhLCAweGY3ZDg5MTY5LAorCTB4YWJmYmE0MmEsIDB4NjlmYWYzZDMsIDB4ZTcwODdhM2YsIDB4YzcxYTlkOGIsIDB4M2ZiYzJiNjAsIDB4NzQ2ZGZiNTIsCisJMHhiMzQ5ZDIzYiwgMHgxZmI5OTg3ZCwgMHg5ZjFiZWRmYSwgMHgwOGFhMGMzOSwgMHg4NjA2ZGQyYywgMHgzY2NiODY2NSwKKwkweDRkZTRmOTA1LCAweGQyMTM3OThkLCAweDMzZjVmNmM3LCAweGYwZGQ0M2I3LCAweDAwNjYwNjg2LCAweGYxMjMwNGY1LAorCTB4MTJjN2YyMGIsIDB4M2UxNTcxYWYsIDB4ZDliMTI5ZDksIDB4OTk0MjY2NTQsIDB4Njg5MmYzOGEsIDB4OTMwZmRmNWUsCisJMHgxZTc3MWU4OCwgMHhkMDllOWRlZSwgMHg2OTg2N2NkZiwgMHgyMWU4ZGRhOCwgMHgzNDdkZGE4YywgMHhkMjM1NmYyYywKKwkweDExY2E4MDViLCAweDM2NjBmODg0LCAweGUwMTQyNTliLCAweGFhZmEwOTJiLCAweGUxMjE1OTVhLCAweDRkNTYwOGYzLAorCTB4YTJlNjEwZTUsIDB4ZWNjNjA1ZjIsIDB4YWNjZjZjNDYsIDB4NjMzMzg0NjYsIDB4N2UxMTgzNDMsIDB4NWViNGYzYzQsCisJMHhlNmU5MGFiYiwgMHg5Yjc3MDI2NywgMHg4ZTBmNGUyNCwgMHg4N2FjZTY2MCwgMHgzZDVhZTViZiwgMHhhNjMwMDc5MywKKwkweGQ4NDFlZDY1LCAweGYzMzY5NGM5LCAweGJkZTBjM2Q3LCAweDI1NTk0M2U2LCAweDQzYzhiZDAxLCAweGNkNWE3YzE1LAorCTB4OGM2ZmRmODgsIDB4YzZmMDBkZjcsIDB4MTdmN2UxZGYsIDB4YTU3OGUyZTUsIDB4ODNhNjY1ZmIsIDB4NmEzNzJlZjEsCisJMHhlZDg4ZGI5OCwgMHg5ZGEwNWY4MSwgMHhiNWFmZmRlNiwgMHg1YTk3MjgzMSwgMHhlYjAwOTYyNCwgMHgzZTNhODcyOCwKKwkweGI2YTcxZjJmLCAweDUyZTBiZDM5LCAweDc4ZjBlMTZmLCAweGYwNDg5MmRhLCAweDhlZGI1MmU4LCAweDMzZmE0MzRkLAorCTB4MmMzYWQyMmYsIDB4MmU3ZTRlMzgsIDB4MTEzNDcxODMsIDB4YWYzOGI0OGIsIDB4ZDA0ZmVmYzMsIDB4ODJkZTIwYzcsCisJMHhlYjM3YzRkNSwgMHhiNmVmOTQ1YiwgMHg2NGZjNzE5OSwgMHg3OGYzMjlkNSwgMHhhOTkzZGY3OCwgMHhmMWUxZGI2NiwKKwkweGNkYzZhM2Y5LCAweGY3Y2E0N2M4LCAweDNmMWMyY2JhLCAweDEyODEyYjY3LCAweDk3Y2YzYzkyLCAweDgzOTdkYzY0LAorCTB4ZmIzMjk3ZmQsIDB4YTVhM2E0N2EsIDB4N2I3MzMyMzUsIDB4MGQ3OWZkZDEsIDB4NmI5MmY3YzcsIDB4YzYzZGNjODEsCisJMHg0Y2M0NWZhYiwgMHg2YjkyZDc1YSwgMHhiY2ZjZjQ0MSwgMHg2ZjNiYjc4MSwgMHg5ZWYxNzRlMiwgMHhjN2M1ZDM4NSwKKwkweDg4NWZiYmUyLCAweGFmMmRiZmZhLCAweGVhZjJiZWFjLCAweGVmMWYwYmYyLCAweGQ2ZTVjNDU4LCAweGE1NDc0ODdiLAorCTB4NDRjZTdiNTIsIDB4ODhmYWM0ZjgsIDB4ZjVjYTJkNWUsIDB4ZTY2Njk1YjMsIDB4M2FkMGZkZDYsIDB4ZDdiNzMyMDcsCisJMHg1ZGRhZmI3NywgMHg0MGY3MzAzMywgMHg2ODU5Yjg2ZiwgMHgxYWY1OWVmZSwgMHhjYWQ5ZmRlOSwgMHgzMWMwOWI4OCwKKwkweDllOGUwN2NhLCAweGUwN2NlM2YxLCAweDg5ZjhmZDc4LCAweDY1NmNmZWY0LCAweDFmYzY0ZGYyLCAweDYzZjE4MzcxLAorCTB4MTllZmU2N2MsIDB4YWY5ZTllMzcsIDB4MjBiMTU1NGQsIDB4OWZiNWFiYTAsIDB4NmNjNDljZTgsIDB4NzRhN2FlN2EsCisJMHhiYWQ2ZWY4MiwgMHhmZDJkZTkyNywgMHg0ZDgzYWZmMCwgMHhlMTYzNjI4YSwgMHg4YjljYTM3ZCwgMHhiY2Q5N2M3NCwKKwkweGFlN2M4Y2M4LCAweDc0YjkwNjA5LCAweGQ4ZDdmNDFiLCAweDcxODBlZjcyLCAweDAzMjFjMTc1LCAweDVhYWY3ZTkxLAorCTB4ZGY1ZDY4ZTIsIDB4MWQxMDU3MDYsIDB4YjQ3NDNiN2YsIDB4OGZjMTg4ZWMsIDB4N2Q2MWU0NTQsIDB4OTk3YzkwZWQsCisJMHg1OWZhYjM3OCwgMHg3YWU1ZjM5MiwgMHgyMWQzN2RmZSwgMHg5ZmU0NGE2MCwgMHhhZjQyZjVkYiwgMHgxOGJjYzlmZiwKKwkweGQ0MzU1M2JlLCAweGY0Yzk4ZmFlLCAweGY5OTRjN2NjLCAweGIzM2M0MzM2LCAweDk0MzBmYjI2LCAweDgxOWI4ZjAzLAorCTB4ODAxZjg5NmYsIDB4NWFiZDYxYWYsIDB4M2JiYmZlYzksIDB4OWZkODFmODAsIDB4OGExZWFjNzUsIDB4MjRmNjBkNmYsCisJMHg0NzFmMTdiMywgMHgwOWZkNzBjNCwgMHg3Mjg1MTBkYywgMHhhODZhYzFkMSwgMHg0YWJhNmYyYywgMHhmZjAwYjY3MCwKKwkweGY3OTRiYWUyLCAweGUwODdhY2U1LCAweGMyY2Q3YzhlLCAweDE2ZDUyNjkxLCAweDRmNjRkZjdhLCAweGNjZjM0YmNhLAorCTB4NzhlZWNmYTMsIDB4MDE1MGU4YzcsIDB4ZmQwZWU5ZmYsIDB4ZDllMTA4MjMsIDB4NmU5OWVlYWQsIDB4MjJkNWQyODUsCisJMHg3N2MzN2EwNywgMHg4ZmU3MGM2NCwgMHg0ZWJmNDMwOSwgMHg2NWU3ODc2ZiwgMHhkM2U0MGZkOCwgMHgyNzE2NmYyMywKKwkweGQzMjlmY2ExLCAweGJjZTNhNGY1LCAweGY3ZjliYzhmLCAweGRmZjc5NDc0LCAweDg2MWUyYTFlLCAweDdiNDI3N2NmLAorCTB4M2RiNDEzYjIsIDB4ZjFhZjU2NjUsIDB4YTFkOTk5ZTIsIDB4OTMyOWViMWEsIDB4ZWY4OGUyNjMsIDB4M2NlZjlmZmMsCisJMHhlNzE4MzU1NCwgMHg4ODYyMDBkMSwgMHg1Njc3YzA4NSwgMHhlNWY3MTdiZSwgMHhkYjA3MjQ0MCwgMHgxODY3Mjg1MywKKwkweDBiN2E5N2M4LCAweGNhZjc0ZGRhLCAweDNlY2E1NzI4LCAweGVhMDRkYjAyLCAweGJmNWNjZDE5LCAweDRlNjUwYzY3LAorCTB4NjdkYTBjNTUsIDB4N2M0NmNkMWYsIDB4Y2Q2YTY1OTUsIDB4YzA0YTU4MmEsIDB4MWFlNzM2YTgsIDB4YTk5MDFmNzgsCisJMHgxZDFlYTMzNywgMHg1ZjdmODQzZSwgMHgwZTNjZmE4YiwgMHg0NDBmNjdmYiwgMHhlNDE0ZmRiYywgMHgwZjI0N2ZlYywKKwkweDJiZWNmY2VhLCAweDA2YjJhOWY3LCAweGRjYTk1ZWY4LCAweDAwZTUxZDNlLCAweDMxZTk4NWM4LCAweDA3ZDk3ZTMwLAorCTB4YjU0ODlmNWYsIDB4MzA5ZThiNjAsIDB4ZDBiNzRmYzQsIDB4ZTMxMjdmM2YsIDB4Mzc5MzFhM2MsIDB4ZmJhYWU5MTMsCisJMHhlM2Q3NzdmZSwgMHhiYjI0MzdhMywgMHg4OGUzZDcxZCwgMHg1ZjUxNWJkNCwgMHhlYzY3MDhiMCwgMHhjZWJjMmY0YywKKwkweGJhMDk1MThkLCAweGJhMDFlZTAxLCAweGI2ZTYyZTFkLCAweDc5NmJiMDY3LCAweDY3MjVlOTMwLCAweGI5NDNkMjA4LAorCTB4MWU1MWQ5OGEsIDB4ZDQwMDY5YjIsIDB4ZjMyZTkxZGIsIDB4ZjVhNjY2ZDIsIDB4ZDBkNzlmYTcsIDB4NmM2MmNiNzgsCisJMHg0YWJlNzA4YiwgMHhjZDY2OGZmYiwgMHhjM2Y3YjM0ZCwgMHgwNGE5NDg4NywgMHgyMWViYWQ0ZiwgMHhhOTRmNjc5YywKKwkweGYwMWRiYWQxLCAweDgyYmUyMWYwLCAweGQyY2QyZjdlLCAweDkzYjA2NWI5LCAweDBkYzYzNWJhLCAweDI3ZDFkMDEyLAorCTB4MDc1YmYzODEsIDB4MTg0ZmZhYzEsIDB4Y2ViODE1ZWQsIDB4NWU0YzBmZDksIDB4YzhlOTc1OGYsIDB4YTQ3MmNiNDAsCisJMHg1OWVkODVjYiwgMHgwNjM5OTc4OCwgMHhiZWY4YzNmYiwgMHgxNjFmNmY0NCwgMHgzY2JjNGIwNiwgMHgwMDM0OWVkNCwKKwkweDQwZGU2YTk1LCAweDk3OTY2ZjBlLCAweGZjZWZkNzk2LCAweDc1M2M3Y2Y5LCAweDU0YjdmYTQ2LCAweDMxYjdhNWMwLAorCTB4NDlkOTAwNmUsIDB4Njc0ODBkYWYsIDB4MTUyZTlmMzAsIDB4ZDBmZDQwMmIsIDB4MTVmYmU2MjUsIDB4MjVlNjIzZTgsCisJMHgyNzljMGJhNywgMHg3ZGExMGJiNSwgMHhlZDQ5ZGQ2MSwgMHg5N2Y1YWYyMiwgMHhlYWUwODU4MiwgMHgzYTdhMmVjNywKKwkweDE3NDVkYjg2LCAweGRiZmVmZGY3LCAweDlkNTBjMDVmLCAweDQ0NDgxY2RmLCAweGJhNThiNWJiLCAweDc2ZmFlYjQ0LAorCTB4NjJmOWM5ZDcsIDB4YmViOGQ1N2QsIDB4YTI3YjdhNDcsIDB4MTJhZWIwYjUsIDB4OTcyZDYxZDcsIDB4ZWE3ZDYyMWYsCisJMHg1YTFmYzQ5ZSwgMHgyZGFhOTc1ZiwgMHg4MGUyZTg4NywgMHhmMThmYWU2NCwgMHgzYzZkMmJmNCwgMHhmNDA1MTM5OSwKKwkweDNjMTc1MDVlLCAweDk2NzRlNjVhLCAweGU4NTY3NDg4LCAweGQxNzg4Zjg0LCAweDAyOGUzMmIxLCAweGRlNDJlNTlmLAorCTB4ZjAxNGFlZjUsIDB4YjY3NmUwMDksIDB4ZmJlNTFmMDIsIDB4MzNlMGZjNjcsIDB4OGQ5M2RkNWYsIDB4MmFiZjk4ZjMsCisJMHhhOWU1YzU1OCwgMHg3OTQ3ZTg5MywgMHhlZmE1NjBiZiwgMHhmYjE0YWI3NywgMHg0OWM5MzFlNywgMHg3ZWJjNjZmMywKKwkweGRjZWMxMWQwLCAweGVhOWQ3NTA0LCAweGEyZjc4N2VhLCAweGIyYTY5MGRkLCAweDJkYjBkZGEyLCAweDY4YzA2NDAwLAorCTB4ZjAyOGZlYzYsIDB4MDdjODAyZjMsIDB4ZGYzZDA4N2QsIDB4MDIyM2NmODAsIDB4Njc4OGZmNzgsIDB4ZTgyYWNlNTQsCisJMHg5OWExMzc5ZiwgMHgzMmE1ZjBlOCwgMHg2Zjg2NTVhMywgMHg5OGUwNjQyZCwgMHgzMzE2MTRjMCwgMHg2N2Q5ZDkxYiwKKwkweDUwZmRmZmM3LCAweDY4ZjNhYzNiLCAweGYwOGRkZDhjLCAweDE1NTAzMDVmLCAweGMzY2QyMWZkLCAweGRhMDY2MjNlLAorCTB4MWMzOGUzNmYsIDB4ZmQxN2IzYWYsIDB4OTk5MzNmZTAsIDB4YjFlNDY0MzUsIDB4ZmJlNDJhY2QsIDB4OTRiZTY2OTksCisJMHhlM2U3MTIyNSwgMHg4MzRkOTk3YiwgMHhkOTlmYmJkZiwgMHgyZWE5ZGRhOSwgMHg5M2ZkMGRhZCwgMHhjMTViZTg1MywKKwkweDBlNjAxZmJjLCAweDM5ODczZTdhLCAweGRjY2I5Y2E5LCAweGFjYTdmZWQ0LCAweDFmMGFlYTlkLCAweDA4MmZmZDAwLAorCTB4M2U3ZmY0ZTUsIDB4ZjliYTI2NWMsIDB4MzI3ZGU3MTgsIDB4NGFlODdkMzAsIDB4Njc4Y2M3NTgsIDB4NWZjODEyOTMsCisJMHhmMDQ0MTlhYiwgMHg2N2JjZDliOSwgMHg4ZjhlMWM0OCwgMHg3MWRiZDhjNiwgMHg2ZmRjZGU5YywgMHg3MTgxYWM1ZSwKKwkweGQxMzc3YTU0LCAweDk4OWM5ZjVmLCAweGUxZDA0ODM0LCAweGI2ODljYjBmLCAweGNjN2YzZWRlLCAweGI4NzAwOTE4LAorCTB4MmVmNGEwNGIsIDB4NjNmOTMxNWIsIDB4Mzk5MWIyZDksIDB4ZTM2ZDNmMDAsIDB4NTNmYTI3NjQsIDB4NDNhYjZjYzcsCisJMHg5M2FhNjU0MywgMHhjYWIzNmQ1ZSwgMHg1OWRmZjdhNCwgMHg1MDE5NGNjZCwgMHhjNjk0Njc3ZiwgMHg2Yjc0NDU1YSwKKwkweDVkM2MzZDIzLCAweGNkN2Q5NzhjLCAweDc4MDBmNmZlLCAweDU4NmU1ZDNlLCAweGRjZjUwYzFiLCAweDc5MGZlMDIxLAorCTB4ZDBlNGQ1ZDEsIDB4YjNlNDZhYmQsIDB4Y2ZiZWYxMjksIDB4ZmFmYWE1YTcsIDB4NmFiMzc3NGQsIDB4M2QzYmUxMTksCisJMHg2MWRkYjdjMywgMHg5NWQwMGI4NCwgMHgzZmZiOTYyYSwgMHhmZTFiMzg2YywgMHg4ZmUxZWNiZCwgMHgzMWY5MTQ3YiwKKwkweDFiYjZhYWVkLCAweGQ2MjYzMWU2LCAweGY1ODU4ODZlLCAweGVjZmJiZjJmLCAweDUzMmVmYzdjLCAweGEwYzYwZmIzLAorCTB4YjMyMTNhNWUsIDB4NzNmZWYwNGQsIDB4ZDgxYjEzZTAsIDB4ODI1NjVmNGIsIDB4Mzk3ZTAzMDYsIDB4ZDYxZmY2MDcsCisJMHgwZDNiMDJiZiwgMHgxNjk1OGJjYiwgMHg1ZDgxMmYyYSwgMHgyYWJiZWY4NSwgMHgyMDdmNTRhZCwgMHgxNjI0MmYzNiwKKwkweGMzNjhiZjQwLCAweGVkMWRiNTE1LCAweGZhMmNlYWZlLCAweDVmNDEwYWZlLCAweDJhYjcyYTZkLCAweGJiNjdmOTEwLAorCTB4Yjg3ZDQ1NjQsIDB4MjEzNmQwYzIsIDB4YTJiNmUwMTAsIDB4MTgwYWM2M2UsIDB4YWU0ZDQ1NjYsIDB4YmU3ZTljNTYsCisJMHhkMTA3MmYzYiwgMHg0NTU4ZjRiOCwgMHhkN2E1OTYyYiwgMHhkMjA3NjYyNCwgMHg4YmNlNDE3ZSwgMHgzZWJiZjFjNiwKKwkweGRkZDY3Y2ZjLCAweGU1N2NmY2YwLCAweDg1ZmVmYTU4LCAweGJmN2QxYjRhLCAweGNhOTczMmIzLCAweDNjN2I1ODhhLAorCTB4NzRiNWIzYjYsIDB4MjBiNDBlYjQsIDB4N2QxMGFlMzYsIDB4YTFkMGRkZGMsIDB4YjY3YTgyOGUsIDB4ZGYyMWIyNGQsCisJMHg0ZTYzNjlkZCwgMHhhYjc1ZTAyNywgMHhhZGE5ZWI4NiwgMHgwZjkwYTdhMCwgMHg3Y2NkYTdjNywgMHg3YTg2NjFlMSwKKwkweGUzOGU5ZWM0LCAweDMwYTUzZmRjLCAweDNlOTljNzFiLCAweGRiMWFhMTc2LCAweDYzMWRmMDNkLCAweDc0M2M2MzAzLAorCTB4NjViYTMzNzYsIDB4ZjJmYzcyN2UsIDB4ZGRkMTEyOWIsIDB4MWVlNTk1NjUsIDB4YzcxY2FiYjQsIDB4N2EwZmIyNjUsCisJMHgxODU1MzBkNSwgMHhlMTkzZjdiZiwgMHg3NGUwMDc0ZSwgMHg3MGI4ZmVmOSwgMHgzNWNiNjc5NCwgMHgyZjEwZjA5NiwKKwkweDI3ZTlkNjM5LCAweGRjZjczYWM3LCAweGRmYWRlMTE2LCAweGRmNWM0MzNhLCAweGQwZTUwNWZlLCAweDgxMGU1YzY3LAorCTB4YjdlZTc0YTUsIDB4MTE4Y2E3MjgsIDB4OTc2ZmM0NTYsIDB4NTIwMDQzZjAsIDB4Y2I4ZmE4ODEsIDB4NDA2ZjgyYjQsCisJMHgzM2JkNjA4ZSwgMHg4M2M4MmQ4MCwgMHg1MWFiZDY3YSwgMHhmMDBmOTAxMywgMHg4ZjI0OTY3YiwgMHhmNTdjNDk5YywKKwkweDU4NWZkOGQ5LCAweGU5ZGJkZjNjLCAweGRmOTdmMjVhLCAweDUzYjJmZDQyLCAweDVlODBkMGU1LCAweDVkNWNjY2JhLAorCTB4ZWFiYWUzYWYsIDB4MTdiNDU2OGMsIDB4YzA3NTI1OTMsIDB4ZWZlYzEwY2EsIDB4OTY0YmJlMjQsIDB4MjA5NWVhMmMsCisJMHhmYWJkNzY0NywgMHgxOWU3ZTBjMiwgMHg4ZDhjMDlkYSwgMHg2YzZmZjc4NSwgMHhmMzM5MjQwOSwgMHg2NjdhYzY4NiwKKwkweDgxN2ZmNjI1LCAweGM5Zjk3ZmY3LCAweGMyNmYzZjQ3LCAweGQxZDI4OWYyLCAweDEwNTk0MjhmLCAweGNkNzA0MjFiLAorCTB4NzBlMTRkZmYsIDB4NTExMWIzYTQsIDB4NmYxODA2ODAsIDB4NmRjOTQxZjcsIDB4YWQyYzY3NDgsIDB4NDg5YWYwZTYsCisJMHg2ZGM4Y2Y5OCwgMHg1MGMxYWExZCwgMHhhYTkzYWE4ZSwgMHhjYTYxMWNiMCwgMHhmYmMzMjYzZCwgMHhjZDBiNThiMiwKKwkweDhjNDM0YzYzLCAweDMyZWM4NTFjLCAweDlmOTdmOWQ4LCAweDZiZTFiZDkwLCAweDVjZDZhNDg3LCAweDc5OTgzMDk5LAorCTB4OTJlMTkxZWMsIDB4YTVlMjIyZWIsIDB4MzQ3YTc0Y2EsIDB4NGQ1NjNiZTksIDB4Yjk2ZmVjZTMsIDB4Njk3MzRmZjcsCisJMHhlMGU5NjAxZCwgMHhhZDZhMTdiYywgMHg4ZTljMWZhNCwgMHhjYmIzYTQ1YSwgMHhkOTJiNjRmNiwgMHhlNzhlNzllNywKKwkweGVkOTdiZjEwLCAweDE3ZDQ1NjYxLCAweGZmNWZjMDA3LCAweGEzM2ZiNjExLCAweGFjMWU3NWE2LCAweGYxODQxOTNiLAorCTB4MDdlMDAxOWIsIDB4ZTk3ZGUwMWIsIDB4OTNkMjFlYTgsIDB4MGMyZDQzYTUsIDB4YzVmNDNiYmYsIDB4M2UxMTcyYmIsCisJMHg2YmZiOGQ2NSwgMHhiZDEyOWM2OSwgMHg4MmQ5ZmQxNSwgMHg1MTViNTdmZCwgMHhjY2M5YjI2ZiwgMHhkNWY0ODA5YSwKKwkweDlhYmZlYmM4LCAweDFlYTJiMzY0LCAweDg2ZmRhODJkLCAweGE4ZjJkYmQ3LCAweDgzZGUwNzllLCAweGU2MmZkYjFhLAorCTB4NDJiM2Q5NzYsIDB4NzRmNmIxMmYsIDB4YjI0NDViOTIsIDB4N2ViZTBmMTYsIDB4ZmRmMWFmMDUsIDB4NjQ0NzE4ZDYsCisJMHhjZmEzZDE4NSwgMHg0MTZkMGY0MCwgMHhmMmQ0ODhmZSwgMHhlNjEzNmRmZSwgMHg2ZTVjMTM0NiwgMHhlMzI5MGY1MSwKKwkweDBlNjVhYjNjLCAweDJkNDVlYTAzLCAweDIwZjU5N2Q3LCAweDYwM2U5MDJmLCAweDdjNzExN2ZjLCAweGM5NDY2ZjQ1LAorCTB4YWMyMzVhNTIsIDB4MWQ1OWVhM2IsIDB4ZjhiN2IzOTcsIDB4ZDYwM2Q5OWQsIDB4ZWM1NGRlOTMsIDB4MWY2MTcyYjgsCisJMHhlODEzNjE1NCwgMHhiZmI0NjVkZiwgMHg4OTcwZjI4MiwgMHg2ZDRjYjNkMCwgMHhlM2JiNDU0OSwgMHg3NzZkYTMzMywKKwkweDYwNzFkOTJjLCAweDdmNDhhOGU3LCAweDY1ZWIxZWZkLCAweDcxNzVkODMyLCAweDMxOWQ3NjVlLCAweDE3ZjQ5NmU0LAorCTB4ZTNmNmQ5MzMsIDB4N2RiNTZlN2EsIDB4OWZlNzk4YTgsIDB4MDM0MzNjYzUsIDB4MWQyYzlkYTIsIDB4ODdmODBhZmQsCisJMHg3ODU4ZTk4NCwgMHg1ODcxODZkMiwgMHg0NDdlZjFmNCwgMHhjMTU2ZWIyNCwgMHhlMTFkMDczYSwgMHg4YmIxZTNmNSwKKwkweDFiMDVhY2I3LCAweDc3YTQ3ZGZkLCAweDMzODI0NzBlLCAweGZiNDMwMDUwLCAweGNhNmU3OTRjLCAweDYyMTBmNGUwLAorCTB4MTFkZDkzZDcsIDB4NTQ2MmIwM2UsIDB4MzM3ZDE3ODUsIDB4YzIwYzdiYjUsIDB4NjUzZmQzNjMsIDB4ZGI3Njg0YjcsCisJMHhmYzUyMzNmZiwgMHg4NmRlN2ZjNywgMHhmZDdmZWUzOCwgMHgxNTBlNjI0YywgMHgyZDE1ZDdkMiwgMHhiNGQxNmJiNSwKKwkweGY0M2RmZWVmLCAweGI1NGMyOTZiLCAweDAwN2IzZmEyLCAweDcxYzdhZGYwLCAweDhlYzk2YTY2LCAweDA1ZGI0MTZhLAorCTB4MDljY2I3ZGEsIDB4ODZmN2I5MjMsIDB4Yzc0MWNiODYsIDB4ZGZkZTAwOWMsIDB4ZjdjMTAwMDAsIDB4Njg5ZGMzYWIsCisJMHg1NWQ2MGRhNywgMHhlMzg2OTdiYywgMHhkZjEyMDU1NywgMHgxYjljNjhiNCwgMHhjN2ZjNzE2MiwgMHhiMmY4ZDIwNiwKKwkweGU4ZTFiZGZlLCAweGU0MjI3ZDdmLCAweDllZTQ5NTUxLCAweGM3NmRmMThiLCAweGVmYzMyZDE1LCAweGEzYmIwNGQ1LAorCTB4NTM1ZWExY2EsIDB4N2ZkYTljMzgsIDB4ZWQxOTJhMDIsIDB4NWI2MDlhYzQsIDB4MDNkOWNhMjQsIDB4ZmU0OTk0ZmYsCisJMHhiYTgyOGNkNSwgMHhjNTEzZTQ5MSwgMHhkODY2NmE2MSwgMHhmZWExODMyMiwgMHg0ZDRiYzBhMCwgMHg5OWZlYjNhZCwKKwkweDRjOWU3YzUwLCAweGI4YzYwY2UzLCAweGUxOGJiNjFlLCAweGMzNDVmY2UzLCAweDA3YTdkOWZiLCAweDA3NWVkMWFhLAorCTB4ZjA4OTE0NGQsIDB4MDI3ZTZkZmIsIDB4ZTNjMmQyYzUsIDB4MDg3MWM4MjYsIDB4Y2ZiN2UxNWYsIDB4MTk0NzcyMTYsCisJMHhiM2U4M2IxZiwgMHhmZmUzMGVkMCwgMHgzN2E5MmNlNiwgMHg1ZmRkN2YyMCwgMHgwZDAwZTg2MCwgMHg1ODI5M2VjMiwKKwkweGY1YmY0MjYzLCAweGQ2ZWNiYjdlLCAweGY3NjA1YzgxLCAweGVjZmFkYjY1LCAweGRmMWM1ODgyLCAweGJkMjFjNzI2LAorCTB4OTM3ZTJiZTUsIDB4ZjVjMjMxN2IsIDB4ZGIzZDFlY2QsIDB4ZTAyMzc2NDQsIDB4YmE3YWVkMzUsIDB4MWZkZjgwYmIsCisJMHhmOGUzZmU4MCwgMHhjN2ZkYmNhNywgMHg5ZmU3MWQ0MiwgMHg2ODg3NDgwYiwgMHg0M2RhMDYwZiwgMHg0ZGU1ZmU3MCwKKwkweGY2ZjI5ZjkzLCAweDU5MmNlNzJiLCAweDQwNzI0NDE3LCAweGE1NTJmNzdjLCAweDEzMmZhOWVkLCAweGE1Yzg0ZWQwLAorCTB4ZjJhZWY5NTIsIDB4N2E5OWRjYmQsIDB4ZmU4YTE0OWIsIDB4NzE4OWNlOGQsIDB4MGVjMjA1YzAsIDB4NjdiOWQ3MmQsCisJMHg2NzNlM2YyMSwgMHhlZmEzMGZiMCwgMHg0NzRjNWQxNCwgMHg2Njc0MzE3YiwgMHg0NzVjMDBmMiwgMHgwZTYwYmJmNywKKwkweDAyMzNkYjQxLCAweDgwNTA2N2NmLCAweDRjMmI5ZTIzLCAweGQ0NGMzNzQ0LCAweDQ4MThiZmVkLCAweGRmMDRiOWY2LAorCTB4NjJmYTNhNDEsIDB4ZGEzYjY5OGQsIDB4MmRhZDc2NzMsIDB4ZDFkMjA5NzIsIDB4NDdiMjQwZjIsIDB4YzFkYzgwY2UsCisJMHgwNDk0Y2Y3MSwgMHhmYmNlMWQxMywgMHhjOGZiZjE3NSwgMHhiNGYyNjc2ZiwgMHg1YTY3OWY0NCwgMHhlOWY3YmRiOCwKKwkweDg1YWRkOTRhLCAweGJjY2Q3N2Y1LCAweGY0MjI0Y2Y2LCAweDQ1ZjU1YWViLCAweGRiMjg1NmQ2LCAweDFhMzVmY2Q3LAorCTB4MzViY2QxZjUsIDB4ZGZiMGQzYTUsIDB4ZDM1NWEyYmMsIDB4ZTIzNzRlMTEsIDB4M2EyNTc5ZjMsIDB4NmUxY2NjYzEsCisJMHhiNzZjZTM1MywgMHg2NzQyYmUyMywgMHgzOTQxY2I1ZSwgMHhlNGI4YjgzZCwgMHgxN2MxOGMzOSwgMHhjNGVmZDljNywKKwkweGRiNjk5N2Y1LCAweDY1MWUxMGNiLCAweDhkMTY3YzZmLCAweGYzNzc3M2Y2LCAweGExNWI3YmNiLCAweDI3ZDkzMzZjLAorCTB4MzViMmJmNjAsIDB4YzNhY2M1NzcsIDB4NTVmZjg0YzEsIDB4MDE3YzA2YTYsIDB4NjcxZTdkMWQsIDB4ZTVmN2MxY2YsCisJMHhkODg5ZGM5MywgMHgyZGE2OTJlZiwgMHg1NmM2ZTEwNywgMHg3ZGRkOWFkZCwgMHg4MGZlYTViMSwgMHg0MDYwN2U4NCwKKwkweGIyOTUxOTRiLCAweGQxZTcxZDMzLCAweGE0ODNiOTI5LCAweGQ4MjM4NDM4LCAweDRiZWViMDBmLCAweDcwNTA3NzY2LAorCTB4Yzk4ZDQ1MmEsIDB4ZTlkZTI4OWUsIDB4NWE5YTNlYmIsIDB4NDAzYjg4OTgsIDB4NmM5NzYyYmYsIDB4MzJkZDIwMzMsCisJMHhlYmU3MTZhNywgMHg5ZTE4YmVkZiwgMHg3YzViYmI1MywgMHhmYzVjYzQ1ZSwgMHg5M2QzNzA3OSwgMHhhYjdkMjA3NywKKwkweDM3ZjcxYjk5LCAweGQ4NGFlZTJlLCAweGJjYmZmODhlLCAweDZmNDRlNWZmLCAweGJjYmZkODNmLCAweGZkN2NiZTdlLAorCTB4MDBiZTkwOTcsIDB4ODllMDk3OGUsIDB4NDFhYmU5MDYsIDB4NzVmZmUzZTcsIDB4ZmEyNDhhZWQsIDB4ZmQxMWVmODIsCisJMHg3MjRhZWQ3NCwgMHg4ZjkyZjI2ZSwgMHgzMDdlNDI1ZCwgMHgwNjZiMmJhYiwgMHg5NWNkYmRkMiwgMHgyMjk2NzY4NSwKKwkweDk1ZGU5ODJmLCAweGIyNWJmZTRlLCAweDE1ZmQxZDJiLCAweDNjYjBkZTQ1LCAweDc3M2QyMjU3LCAweGZkYjExMmJhLAorCTB4OGQ2N2Y0MDEsIDB4ZWQxNmVmOWUsIDB4YzRkZGFhOGUsIDB4NTUwZThlZTMsIDB4NmM0N2Q2MDYsIDB4ZWUzMmJhYzcsCisJMHhiNDk3ZDZjZCwgMHg0ZjUzZWI1NSwgMHg5ZmQ2ZmE3MSwgMHg5NWZjZjIxMCwgMHgxZjhhYjQ1NywgMHg4MmJmMGIyYywKKwkweDVhM2MxNDU5LCAweDcwNDZmZGI4LCAweDgxNTZiM2Y5LCAweDU5NTFjM2NiLCAweGJmODAzNzE4LCAweGRjZGU2OTYyLAorCTB4ZmI4NTdlNmYsIDB4ZDk0NjA3Y2QsIDB4MmFhZTUwYTMsIDB4NjA4MWY5ZmUsIDB4NWVhMmE3YTgsIDB4ZWE1NmYzZTUsCisJMHhlN2ZjMWMwYSwgMHg0YmNmZTZiZCwgMHhmN2JlMzBhMywgMHgxZjhmMWM0NiwgMHhiY2I4MTk1NSwgMHhiOTcwMzJhYSwKKwkweDE1OTRkYWI0LCAweDM0YWJlZjhlLCAweGEyYTZjNzYwLCAweGVlMmM3MmJmLCAweDBlMDc4ZDRiLCAweDM2NmQyYWU3LAorCTB4ZjU3ZGMxMTAsIDB4ZTk0NzViYTUsIDB4NmQ5NzZmOTEsIDB4YTZmN2E1MWIsIDB4NjM5ZGFhOGYsIDB4ZGU2MDU5OGUsCisJMHhhZGFhNzY5NywgMHhiNTJhODRiOCwgMHhkN2I0NDlmMywgMHgyZWNhNzZhYSwgMHg3YWY3YTMwNywgMHg2NGJmYjQxYiwKKwkweGRiMDI3MjNjLCAweGUzYzZkZDJkLCAweDY1ZmY0YTE2LCAweGY5NmRiMzViLCAweGIxMWVmMzVlLCAweDY5YmUxN2QzLAorCTB4YzhmYWRmMmUsIDB4NTFmYWRmMjYsIDB4ZmQwNjQ1YjQsIDB4Yjk0NmZkZWIsIDB4OGU2M2ViN2QsIDB4N2ZjZmQ2ZjksCisJMHgyNDJjZjBmOCwgMHhmMWQ5MDJjMywgMHhlM2Y2OGNhNCwgMHhhMThlNzM1ZiwgMHhjMGVhZjkzZSwgMHhmNzhhMjBjMSwKKwkweDhhZGY5NjdjLCAweGFkYjJmMTc2LCAweDNjMDc3MGJlLCAweDM4Mjc2ODRhLCAweDc3YTQ0ODc2LCAweGZjZmU5ZDBiLAorCTB4MDMxZjNmZDIsIDB4NWYzODk0NDYsIDB4MTRkZDM3YjIsIDB4M2FhYjQ3MzEsIDB4OWRmNmZhZTYsIDB4ODZjYjM1Y2MsCisJMHg3Zjk1YTU3MSwgMHg4YzcyZmI4YSwgMHg1ZGRiZGM2NywgMHgwZmU4YjQ1YiwgMHg0NmY3N2ZmOSwgMHgzNjhjY2I3YywKKwkweDE2MzdjNjBiLCAweDdlZWZlNThlLCAweGZiMjI3MmI0LCAweDdjZGJjNzAyLCAweDcxZTkwNzMyLCAweGQyMjRhZmUxLAorCTB4MjVmNzBiYzMsIDB4ZDM3NDhkYmQsIDB4MTRjZTc3YjEsIDB4MTJlNTY3MmEsIDB4Y2JiODk0M2MsIDB4NmRjOTE2YjIsCisJMHgyYzc5YmE4MiwgMHg2NTBmZGJlYiwgMHg2YjQ1ZWYzMCwgMHhhMWYxM2U3NSwgMHhmM2JlY2RmYywgMHhmYmUzNWE1OCwKKwkweGUxZDM1OTdlLCAweDZiYmVlMWJmLCAweGRhNDVmZTgxLCAweGE2ZDgyZWE3LCAweDM5NmI4YmYzLCAweGJkM2I0MmRmLAorCTB4N2U0NjJiZTgsIDB4ZjdkZDUxNzgsIDB4NWVlMmZlYmEsIDB4MTQzYWM0NGIsIDB4ZWUzOTkwZmIsIDB4NmU0ZWI4NjQsCisJMHg4ZWRmODIwMiwgMHgzZDcyMDdmZiwgMHhjNGQ3NmNjNCwgMHg4ZGQ4ZjIwZiwgMHg5NWE5YWEzZiwgMHhjY2E1N2UxMSwKKwkweDhlMzk4OGZlLCAweDIwNzc1MWZjLCAweDBlYTk2N2NjLCAweGE0ZDFiMWVjLCAweDU3N2Q2OTg3LCAweDc4YTAwZWI3LAorCTB4MDY2NzNjMDcsIDB4YjU5NTdlNzgsIDB4YmU3ZWExNjUsIDB4ZjJiMjY4ZGEsIDB4OTY1YjU5MzgsIDB4YTBjYmVhMTksCisJMHg2MDJiZjA4ZSwgMHgxMmE3MDRkNSwgMHhhNzMyY2I5NCwgMHhkZGI3OWIxYiwgMHhiM2FkZjRlMCwgMHg5N2I3NmU2YSwKKwkweDExODdkZGE4LCAweDlkYWNjNTFlLCAweGJkMWUyMWZhLCAweGJhYzA5NWRiLCAweDNiNDEwOTNlLCAweGIzM2ZhZmM0LAorCTB4ZGNiYzljNTIsIDB4OTVmYzI1YTgsIDB4ZjNhZjdkMzcsIDB4MGJmOGFmN2UsIDB4YzRhMmZmOGEsIDB4ZjQ1NzdlZTEsCisJMHhiN2QyMDA2MCwgMHgzNTg3ZDg0NiwgMHg1YjdiOWQxYiwgMHg5NGViM2Q2MSwgMHgwMzE2ZGViOCwgMHg2YjA3YTdjOSwKKwkweDdiMDdiY2I5LCAweDU5ZDcxMTMwLCAweGQ2ODUyNWIzLCAweDhiNjRhMGZkLCAweGY2YjY4NzU5LCAweDdmZDEzZDBjLAorCTB4ZDNkODMwNGQsIDB4OTI0NzY0YTEsIDB4MjM3NjAwYmQsIDB4NzMzZGFkZDksIDB4MTJlZGNlYjQsIDB4MzcyZThmZGEsCisJMHg0ZjM1YzFkYSwgMHhjYTA2ZjhmMywgMHg5ZjZiYjI0OSwgMHg1MjdkOTAzMCwgMHgyN2RiODMzMywgMHhhOWMyNWIzNSwKKwkweGNhNzA1ZmZmLCAweGYyNTc2ODkxLCAweDkxM2NkNGY5LCAweDk5NWRlZGM2LCAweDhjZTE2M2Y3LCAweDY1ZjYwN2U2LAorCTB4NWU2YmRlYTIsIDB4YjJmZjVkOGEsIDB4ZjExMTNlZDksIDB4MjZiN2FjYWQsIDB4ZmI4NGM3YjgsIDB4ZTA2MGFjMWQsCisJMHg3YWY5ZTkyZCwgMHgwMDdhYmZhMSwgMHhmZjA3MTgwZSwgMHhjNTZiY2E1MiwgMHhkZGE1MDk3ZCwgMHgxZjVjZjE3ZCwKKwkweGVkYjA0ZDY0LCAweDVlMjhlZDEwLCAweGIxOWFhZjllLCAweGE3OTgyN2U5LCAweDUyY2E4Y2YwLCAweDdmMDVlMzE1LAorCTB4ZDcxMTJkOWIsIDB4YzMxNmU1ZmYsIDB4OTlkM2M0NjgsIDB4Njc5ZTVjNTEsIDB4MDVmMWUwNGQsIDB4ZGI2YzViZjAsCisJMHg1ZTIyZmY3MSwgMHhmZDc3MTNlNSwgMHg2MTRlZjhhOSwgMHhmNWU2ODViYywgMHgyZjhmMzY2NSwgMHgyOGYyMzI5YSwKKwkweGRhYjYwMzhlLCAweGY1ZjZmZTgyLCAweGJlZjllMzBiLCAweGVmMzZiZTY4LCAweDk5ZmI4ZmY4LCAweDM2MTcwMjhmLAorCTB4NWYxN2ZiODksIDB4YmU5MTI0M2UsIDB4OWEyNGY1ODQsIDB4MWJmNTllYTEsIDB4YmU3ZmM1MDMsIDB4YzE0NzdhMTQsCisJMHgyNjUxZDAwNywgMHhjNzIxNjFlOSwgMHhjNjdlOTBjMiwgMHgxOWU3ZTg3OCwgMHhhNDBlMTc0MSwgMHhmZDM3OGIwYiwKKwkweDgzYzdkMmY4LCAweDA5ZWNmZjAyLCAweDA0ZDY5ZjZlLCAweDEzY2Q3YWYzLCAweDlmYTAzNzI5LCAweDY1MGZmZGZlLAorCTB4ZmNiNTM1YmQsIDB4MDFkZmJmYmQsIDB4ZGUzNmIwNzQsIDB4NzRmZTllMGIsIDB4NGNjZWQ0YzAsIDB4N2YzNWZkZWYsCisJMHg4ZDk2YzgzYSwgMHg1N2U3MjhjOSwgMHhiNDU2MDE0OCwgMHhmZTA4NTdjNywgMHgxMTg0YjE1OCwgMHgwYWIxNDYzZCwKKwkweDgyMzVmOTA5LCAweDAwOGYyOWI5LCAweGM3MDE4MWU0LCAweGMwMGY3MWZiLCAweDdmMGY4YmRjLCAweGJjY2Y0ZDcyLAorCTB4MTY3OGRmZjUsIDB4YTg5ZjUzZWMsIDB4OWY2OWY0OGYsIDB4NzlmMThlNmQsIDB4OGE0NDU3N2YsIDB4OTZjOWZiY2YsCisJMHhhOWY1M2U1MSwgMHhiNGZiYjdjOSwgMHhkZTNhZGJiZiwgMHhkOGNmN2VhNywgMHg2N2VkM2VjOSwgMHhkNGY4NjZkOCwKKwkweGM2YWNjYzZkLCAweGVlNTRiN2Y5LCAweGNkZTBmYjI0LCAweDk3ZGM1NzRhLCAweDY1YzNkNzA5LCAweDNlYzhlZTljLAorCTB4YTZiMTk1OGIsIDB4YWE2NzA3YmEsIDB4MGRjNjFlODEsIDB4MDYyMmIyMzgsIDB4ZWRlMzg3ZWEsIDB4ZTQ3NTFlYmMsCisJMHhiMTk5OGM2YSwgMHhmMjE3ZTJiNywgMHg1NzIzODhmYSwgMHgzNDdlYTE2MywgMHhkZmFmMTE3ZSwgMHg3ZjVmYzhjMSwKKwkweDRjZjE3ZTI3LCAweDE1YzUyYTQ3LCAweDY2N2UyMThmLCAweDhhMzhhYjVkLCAweGFiNDdlMTZlLCAweDQxODkyZTY3LAorCTB4MjRjOTJmMWUsIDB4NjdlY2FlMzksIDB4M2Y2MzEzZGMsIDB4YmNhY2ZjODQsIDB4OGQ5ZmRhNTcsIDB4YWZiYmZkZTcsCisJMHg3ZGRmZjk3MCwgMHgyMzc3Y2I4NSwgMHhmZTgzMjkxYSwgMHgzMmZjMTJmZCwgMHgwZTA0ZmVmYSwgMHg2ZjQxMzYyMiwKKwkweGE2MmZmZGE0LCAweDhiZWE1Y2Q3LCAweDk0ZmM4MzQzLCAweDNjNjE4YzZjLCAweGYwMTJhNWFmLCAweGQzNzA4MDlkLAorCTB4MzRhZWU5NTMsIDB4MzJhNDc5NTMsIDB4MmJiN2NhODIsIDB4ZTAxZjJjMmQsIDB4NGM5OTVhZGEsIDB4MmI0YWIxZTUsCisJMHgzOTVlM2YzZCwgMHgyYmY3Y2E5NiwgMHhhODllNTQ2ZCwgMHhhZGIyYTVjYywgMHgwOTRhOGYzMiwgMHgyODc5YTk4YywKKwkweDM3NTg3NjNmLCAweDBlMmUxMDY4LCAweGJkMzlmMDc1LCAweGM2ZTUyZjI3LCAweGNlY2Q0YzcyLCAweGM2ODVmODI5LAorCTB4NWY2YzE4NmYsIDB4MzFkZDkzYzQsIDB4NzE3MTRjYzQsIDB4ZDM1YmJjZjEsIDB4NzNkMjIyZjMsIDB4YzE2NjE1ZDUsCisJMHhhNmMzYjg3YywgMHg5ZmI0MTZkMywgMHg0NGY1MzJhYiwgMHg5YjRmNTJlZiwgMHhiOGViZTUwNSwgMHhiYWFmNWUwYywKKwkweDY3NTE2NmQyLCAweGZkZWEzYWYwLCAweDI4ZDc2MGVlLCAweGE1NTUwYmQ0LCAweDE4OWFlYjQ2LCAweDQ0OGVlZjdjLAorCTB4YTE1NzE5N2UsIDB4Mzg3ZmEyYjUsIDB4M2U2N2E3YTksIDB4YTMzOGYxZjIsIDB4ZjQ3YTgyZDYsIDB4MmRmNWE5YjAsCisJMHg3M2NhM2RmMSwgMHhkY2MyYmJhOSwgMHgzNDU3ZGMyYSwgMHhlMmNjNTliNCwgMHg3YzBlMzgzYiwgMHhjMWY1MDYzNywKKwkweGJiZTE4N2I4LCAweGVkMDU2ZTM0LCAweDY3OWI4ZDA3LCAweGU0YWVmYmVjLCAweDBmZmQ1ZGY3LCAweGU0YTI3NzdmLAorCTB4NWVmOGRkZjUsIDB4ZmYzYTZlZjgsIDB4YmJlN2M1YWUsIDB4ZTVlYzk5NmUsIDB4MGZiMjZlMmIsIDB4MTFhZDgzYmEsCisJMHhmYTk1NWYyOCwgMHg0YTlmN2MyNCwgMHgzM2QyNDI3MSwgMHgxOTZlMmNlMywgMHhlODg3ZWZmNywgMHgwNzBkM2NiOCwKKwkweGE1ZTBkMmYzLCAweDYyNzg5NTZmLCAweDY3NWYyZjVkLCAweDA4YmJhNTU3LCAweGIwOTI2YWY5LCAweDU5NjkyNjU3LAorCTB4YTk5M2MyMzIsIDB4OThmZTI4MDIsIDB4MWFkNzdmMmQsIDB4Y2RlNWY1MDUsIDB4OWRjYzI4ZDIsIDB4ZGJjYmE0OTgsCisJMHg5YWFlN2U0NiwgMHhjYTE2MWRjYiwgMHhiNzUzMzJmNSwgMHhlZDBjYmUxNSwgMHg1OTQ1ODU0ZSwgMHg0ODZhZGYzMSwKKwkweDBmMTYwMWM0LCAweDNjYmIzODcyLCAweGZhZjUxNTM3LCAweGQ0ZGY5MTI5LCAweDQ4NGY2NDFjLCAweDliZGM3OTgwLAorCTB4MjU0YTcyMGEsIDB4ZDlmNzE5ODgsIDB4ZGU0OTAzNzIsIDB4Y2E0YTFmNzcsIDB4YTY3ZjdiNDQsIDB4MDE5ZmIyY2UsCisJMHgzYzI2YTcxZiwgMHg3MjBkNTMzMywgMHg0YjAwZTY3MSwgMHhmYWM2NjRhNiwgMHhiNzBmNWUzNiwgMHhiZGUwOTdlYywKKwkweDczMzMzZDk5LCAweGMxZmZlZGQyLCAweDQ5MzRmYWZlLCAweDM4MWY5N2VkLCAweGFkZjgwMTM2LCAweGM4YjJmNzM0LAorCTB4ZmIyMWVjNTcsIDB4ZTQ5OGM3ZjYsIDB4NzdlMjg4MzQsIDB4OWVjN2E0NmUsIDB4MDNkMjI2YzksIDB4OGU1YjhmMTgsCisJMHg5MmQ1M2JmMiwgMHgzNWEyZWQ4OSwgMHhmZjA4NDEzZCwgMHg5NGQ0ZWZlZSwgMHg4MzJkMDIzZiwgMHhlMzhhZjNlZSwKKwkweGYzYzJkOGJjLCAweGUzZjlmYzRhLCAweGFiZDcwMjcyLCAweDlmM2NmMWU1LCAweGFmNDIyY2E5LCAweDRhZTViMmE3LAorCTB4OGY3Y2EzMGUsIDB4M2ZmNDc4YmMsIDB4NTdlZGVhYzEsIDB4MDI3N2ZlYmYsIDB4NTk4ZTFmZGYsIDB4NDdmMWU1YWYsCisJMHg2NTMwYTExNCwgMHhlYTUzMDA1YiwgMHhhOTZiY2MwZSwgMHgzMTQwMjQ3ZCwgMHg0ZTAwNmQ0NiwgMHg1NDdlYzVhNiwKKwkweDI0Y2RmYTZmLCAweDFiN2I0ZmI1LCAweDY3YmNmN2I2LCAweGQyOWYwNDM2LCAweGNmN2VhNGJmLCAweDhiYzZkNjZmLAorCTB4MmNiZDIxZWYsIDB4ODI1YzRlNjUsIDB4NGRhOWZlYmYsIDB4MGJmYzUxMGMsIDB4YTEwYmYzYzIsIDB4ZTM4YmYyMDYsCisJMHhhMDU3YTA2NSwgMHgxNzQwYThjZiwgMHgwY2ViMzNjNSwgMHhkY2MxN2U5YywgMHhjNTRlYjJhMCwgMHhjMDAzNmJkZiwKKwkweDUwZmE4NWZlLCAweDlhM2VlM2E4LCAweDIyYmVkMTNiLCAweDY3ZjUxMDcxLCAweGVmMmZlYzY2LCAweDIyOTFmZWE1LAorCTB4MWY3OTRlNmYsIDB4MTk3OTUxOGUsIDB4MGNkYWU5ZjMsIDB4NTU5MzhlNTgsIDB4NGU0ZGMyZmQsIDB4YzQ2YmZmMWMsCisJMHg4M2E1NTc3NywgMHgyZmQyZjU5ZCwgMHgyYjQxODE1ZCwgMHg4NjU0ZjFiZCwgMHhmZGRlOGRmZCwgMHhhNTNmNTAyNiwKKwkweGZkZDgyOTdmLCAweDljOTIwNzY3LCAweDhkMjk3YTI2LCAweDJiM2U1MTU3LCAweDRiNmZjZGY4LCAweDM2YjBkNzY4LAorCTB4YTU2MWVhMmQsIDB4YWI5MDY5ZGYsIDB4NDEwZmJkZjgsIDB4MDlmOTYyY2UsIDB4YzBiM2Q3YzgsIDB4OWNhOTdmOWIsCisJMHg5NWE3ZTU0ZCwgMHhhNjdlN2E3NiwgMHhmNmNhODBiMiwgMHhmZTdhMGFjYSwgMHgyYTRhZTU3OSwgMHg2NTM1Y2Q2NywKKwkweDM3OTQ5ZjIwLCAweGJkNjc2NmFkLCAweGE1ZDRiYWU4LCAweDRiZWY3YmIxLCAweDNmZGYxZTllLCAweGUwNGFlY2JkLAorCTB4OThlOWRkNzYsIDB4OTViYmRmZmUsIDB4YmM3Mjc3ZjcsIDB4ODE3ZDgzNzUsIDB4ZGZkMDI0ZjYsIDB4OGRjODczNWEsCisJMHgxMzZlOGNlZCwgMHgzNzdhYmZkZiwgMHg3NzczZDM4NSwgMHgyNWQ3YWYyNCwgMHg1MzZlYTg2OCwgMHhmZmQ4YWRiMSwKKwkweGQxMmQxNGRkLCAweGM2NDQ4YWViLCAweDJjNzg4OWRiLCAweGRmOGQxZmQwLCAweDNlNTRlNzA3LCAweDE5Y2VkMjhlLAorCTB4MmZlZGNhYWYsIDB4ZjIyNTk4NGYsIDB4ZTg5ZjQ0NzYsIDB4YzYzZDIwMmYsIDB4OTk2N2QxNzgsIDB4OWZkM2U4ODUsCisJMHgzOTEzNmEyZSwgMHgzOGViYzRkZiwgMHgyZWExNDVkZCwgMHg3MDhjN2RjMiwgMHgwYTczMTM4MywgMHhkYzM2YmU2MCwKKwkweDM4OTNhZjU3LCAweDlmNDc1ZTNkLCAweDVkOWZlZTJhLCAweDBlMzA5ZjQ3LCAweDVjZTgwOWMxLCAweDdlYzdmMjgyLAorCTB4ZWY5NGEzZjQsIDB4MGI2ZmJlMGEsIDB4ZTA4Y2ZkMzMsIDB4YTMzMWEyZGMsIDB4MGNiMWY4YmUsIDB4YWFmZWM1ODAsCisJMHgwZjk4MTNkZSwgMHhiMjY2MTUxZSwgMHhmNjQ4OWVlMCwgMHhmZThhYzZlMywgMHgxMjNmYzdlNCwgMHg2ZmZkN2RiOCwKKwkweDFmOGZiZmFmLCAweGRkN2ZkNzdkLCAweGQwN2VjNWJhLCAweGU0OWJhZWFkLCAweGE0NGJjYTA5LCAweGMzZTQ3ZTlmLAorCTB4M2U0NTA0YTUsIDB4MTM5MWZhNzAsIDB4M2Y1MGU3NmQsIDB4MzUwNjRiNzQsIDB4MGRiYmIzYzYsIDB4ODNhZTJlOWMsCisJMHg0ZmE3MGE1YiwgMHgwNTZhM2U4NSwgMHhiYWUxNDQ3ZCwgMHhlOWViM2NlMiwgMHhkZjgwN2Y5YiwgMHhjYTMxOTZmYSwKKwkweGEzYzdmMGViLCAweGQ2YmM1NzIyLCAweDJmMDRmN2Y1LCAweGQ4MThjMjc5LCAweDQ4N2ZkMDE3LCAweDA5ZjY5MTg5LAorCTB4MDk5YTI0NTcsIDB4Y2U4M2RkN2UsIDB4NmYwMmRmY2YsIDB4ZTI3YTE1OWYsIDB4YTdkZjE1NzksIDB4ZGY3NmU0NTAsCisJMHgzMDVlNDk3MywgMHg5ZTQ3ZDUyMywgMHg3YTMzYjQzMywgMHhiZjg4ZTkwZSwgMHhmMDU2MmFkYywgMHhmODUxZmExYSwKKwkweDcwYmYyZjI5LCAweGVmNTNjMGFjLCAweGVlMTU0Y2VjLCAweDZiN2Q3NWJmLCAweGNkMWU1MDc0LCAweDY4MzM5ZWUwLAorCTB4MDU2ZDc0NDcsIDB4N2ZmYzgwMDMsIDB4ZjQwOTM0ZGIsIDB4ODc4YzEyZDksIDB4YWZiZTMwNTgsIDB4OGJlOGZkYTcsCisJMHgyNGIyMGY2MCwgMHg3MmJhZTc2OCwgMHhmMjk4ZWQwNiwgMHgwN2E2NjRlNywgMHg3ZGNmYzlkMCwgMHg2NWU5MGIzMywKKwkweDk5OGQyMWU5LCAweDRmYWQ5YWVjLCAweDNiN2E0MzFkLCAweDUwNTkyOGQ3LCAweGMyMzU3N2RmLCAweGIzOWY3MWIyLAorCTB4NDAzNGU0YzYsIDB4NjNhODFjZmIsIDB4NjUzYjY1ZmIsIDB4MDM1MjI1MjcsIDB4MTRmZTkwN2IsIDB4Mjg2YjNiZGYsCisJMHg3NzdiNDU4YiwgMHhhMzNmNzNlMiwgMHhiNWE1ZjhmZCwgMHg3MTg3MGIxMiwgMHhhMmJhZGFkZiwgMHhlN2VhMTIzNSwKKwkweGY5ZmNmMWI2LCAweDdmY2YwMzJhLCAweDZiMzc5MWNmLCAweGI0N2M2MzA3LCAweDMxMmYzZjk2LCAweDdiZmU1MGU2LAorCTB4NzU2NjJlZDEsIDB4YWY2NWJjNjMsIDB4YTVmM2ZjODksIDB4MTU3OWJlMzUsIDB4ZWI3Y2RiMDUsIDB4NWNiZTIyODUsCisJMHhiY2ZiZTc1NCwgMHg0ZjM3YzFhNCwgMHhjOGEyNGM2MywgMHhhMzYxNDhjMywgMHgxMzVhNWUyOCwgMHgyMjgwNzY0MiwKKwkweDc3ZTQ2ZjRmLCAweDM5NzM5NmQ5LCAweDYxZDdkOGM5LCAweDBmOTVlZjE4LCAweGI5ZmQxMzdkLCAweDg4NjdkNzkxLAorCTB4MmZkNDA3N2EsIDB4YTJmMWMzN2YsIDB4Yzk0Y2E1YzAsIDB4MTk2NDg4MmIsIDB4MjNjYzBjYWUsIDB4M2Y3MTk4MzQsCisJMHg4YmY5YWNhYSwgMHg3M2Y5ODYyMCwgMHg4OWQzZWQwMSwgMHgyOTk3NWYzZiwgMHg5MzYzNmFkZiwgMHhhNTY5ZmI0YywKKwkweDMwOTc4NjJkLCAweGZmNmNiMGNmLCAweDg0YzVhZDQ5LCAweGVjODg3ZjcwLCAweDYzOThiYjgwLCAweDZlOGJmYTNkLAorCTB4NmZlNDRhOTUsIDB4OGRkYzUxYjcsIDB4NTI5NjdhZDksIDB4NjBkOWJiN2MsIDB4ZjY1YWZkNDYsIDB4NzNhZGM3ZmEsCisJMHg2MjVmYmViMSwgMHhkMGUzYzQwNiwgMHhhNTkzYTI3NiwgMHg1ZmI0YzljZiwgMHhjOWYyZDBjZCwgMHg4Yzg5ZDBmMiwKKwkweGJiM2M0NTc4LCAweGNmM2VkMDA2LCAweGUyM2JjNDMyLCAweGU3OGVmMDE5LCAweDM0ZTdlNDFiLCAweGJiYTVmNzg0LAorCTB4YjU1ZjdhNjQsIDB4ZWQ4YjRhYjUsIDB4N2UzOTM5Y2YsIDB4YzhlN2JjMTUsIDB4NDVjZjA4YWIsIDB4NGU3YzcwMmYsCisJMHg5OWZlYWU3YywgMHg1ZDgzYTQwMCwgMHhkZjczYjIxYSwgMHg3OTgzN2U4MiwgMHhkMDNhMWYzZiwgMHg3N2UzZTIxZSwKKwkweGRmMTQ0YmQ1LCAweDY2ODNhM2VhLCAweGUwMWQxZjVkLCAweDA3NDY2ZjNjLCAweDY3YTQ5ZmMwLCAweDA2MDc0NjZmLAorCTB4NGZlNDE3OTQsIDB4OGExYTNiOGYsIDB4ZjhjZmVkZjYsIDB4OWRiODk0N2MsIDB4MWY5Yjk3MTIsIDB4MTBmYTU5ZDIsCisJMHhkODg4NGQzNCwgMHgxYjJjZjY0NywgMHgwODk1NWY2MCwgMHhlNGNjZTY3MiwgMHg3NGRjMjgwZiwgMHg1MWVlY2E2YSwKKwkweGZmMDM0Zjk0LCAweGJmOTQ2MWY0LCAweGZiN2NmMDQ3LCAweDQ0NGI3ZmU3LCAweDMzMWRkMDc5LCAweDE4YzFkYjYzLAorCTB4YWUwNzY3YzIsIDB4OTAzODNiYTcsIDB4OTIzZGQzZWIsIDB4M2FlN2EyNTMsIDB4OTNiZTBlYjcsIDB4ZjkxNTcyMGQsCisJMHhhM2E5YmQ5MiwgMHhhMGY3NDNmOCwgMHg4OTNlMWUwNywgMHgxODRmNjhmYiwgMHhjOTJlODhhZCwgMHhlMmJhZmRjNiwKKwkweGMxM2U3Nzk2LCAweGNjNmIyN2Y4LCAweDdkZjhmOWI2LCAweDQ2MmIyZmMyLCAweDM3ZGYxMGJmLCAweGI1ZTg1ZjgwLAorCTB4M2Y5OTI4ZGYsIDB4NGJiZjdlYTAsIDB4Y2I3NWE1OGMsIDB4ZjI1NmViMmEsIDB4MDU5OGVhZGYsIDB4ZTVlYjk1ZWQsCisJMHhhZmY5MjMzZiwgMHg2ODZlYWZjNCwgMHgwMWU5Zjk5ZiwgMHg3NmU3ZmM4ZiwgMHhmMTBjNzMxOSwgMHhlNWMwYjczYiwKKwkweGY3MTEzMmQzLCAweDcxYzhmYTNkLCAweDY3NWM0MGY1LCAweDUzMzczZjFkLCAweDI5NzIwMmQ4LCAweGY4YTVjZTk0LAorCTB4ZDEzMjk3YzgsIDB4MTlkMjNjZmUsIDB4NDcyYmYxYzAsIDB4ZWM5NTAxYzUsIDB4OWQzZTQ3MmQsIDB4ZWM5NGUzODQsCisJMHgyMTk0ZTNlMiwgMHg5ODFjMjBmZCwgMHhkYzAwOTlmYiwgMHgyODY5NzAyNywgMHg4NGM0NTkxZSwgMHg1OTMyNjk1YywKKwkweGU0N2U5NmRkLCAweDdhZWQ1ZDQ4LCAweGU5ZmQ3ZjM0LCAweDM3ZWMxOGE3LCAweDFkM2Y4NDVjLCAweGI2ZmEzNTk1LAorCTB4OTdjYTAzZmIsIDB4ZDI1ZjI0MTEsIDB4MDc3ZjQ3YmUsIDB4MjNkMzIzNjksIDB4ZDRlNWIyNDcsIDB4ZjVhZmU4MDEsCisJMHhlNDAwY2IzMiwgMHhiOWU5MWJlMywgMHhkYWMwYWRhNCwgMHgzOGE2ZTM1ZSwgMHhiM2VkNGNmNSwgMHhhOWY2NjE1ZiwKKwkweDdjMjJiOWE3LCAweGIyNmM4ZmRhLCAweGU1MWZiY2Y4LCAweDNmNzlmNjRlLCAweGE3ZDU5OGU2LCAweGQ2MzZkOTllLAorCTB4OWY2ZGZkYTcsIDB4YjdlYTdjZDgsIDB4YjRmYWU3YjcsIDB4M2NhYmUzYmYsIDB4MmE2ZjdhOWYsIDB4ZjYwN2U3YWMsCisJMHg5MDhhZWVlZiwgMHhiNjRmZGE3YywgMHgwN2M2N2MxOCwgMHg5OWYwNGUwZCwgMHhmM2VjMWM5YSwgMHhlMWM4ZDdiYywKKwkweGVmNzFhMzc0LCAweGFiOGVmYWI2LCAweDhjZjdiOWY4LCAweDg2N2YxZGY1LCAweDViZGM3N2NkLCAweGQwMGVjM2M1LAorCTB4NGQxMDZhOWIsIDB4NjI4ZjQxM2IsIDB4YzAyNTRhZjksIDB4ODZmMWVjMWQsIDB4YmZhYTA4Y2EsIDB4ZDJhMTY5NWEsCisJMHhjZjRjOTk1NSwgMHg1MmI0YWI1ZiwgMHgyYzcyYjFiZCwgMHg3ZDgwMGZkNSwgMHhiMDI2ZjU4ZiwgMHgxZDdjYjFmNywKKwkweDdlN2M3Y2VjLCAweDhhYjU3ODMzLCAweGRmMTMxZWVmLCAweGNiYmUyZTNkLCAweDA3NmUxNmQ4LCAweGVmMmUwNGRjLAorCTB4NDQyN2ZlOGIsIDB4YWZlYzM2ZmYsIDB4Njk2MWQwZjEsIDB4MWFlYWE2NmUsIDB4OTBmOGVkZjAsIDB4MmY4YzVhMGIsCisJMHhlN2I3OTZkOCwgMHhmM2RmOWZhMCwgMHgwM2I2Y2NhZSwgMHhmM2JiMzA1ZiwgMHhlYTI4NjU1OCwgMHgxZjNjODFhOSwKKwkweDNkZTdhZjIxLCAweGVkOTcxNzhjLCAweGZlZTMzMzhmLCAweDNmYTZjNmM3LCAweDVkZjdjMDlkLCAweDMzYzUzMjhkLAorCTB4MTE3ZDM0OGUsIDB4YmE1Y2UzODQsIDB4NTAzZWNjMDYsIDB4OTdhODM3ZTgsIDB4ZmFhMjRkZmMsIDB4Nzk4Zjc4MjYsCisJMHg4MmY3OTNmOCwgMHhjYjdhNGI2MSwgMHg1MmViN2E0NSwgMHhkMjc3NTJiYywgMHg4NmJjOGRmOSwgMHhkYTc2ZGFiZCwKKwkweGVmNGJkYzU3LCAweGY1YmUwNWRmLCAweGQ2YjNiZjc5LCAweGRiMTliZGU3LCAweGRhYjY3ZWUzLCAweGM1Zjc3ZTQ5LAorCTB4MzczYzY1MjYsIDB4OTc4OTJmYjUsIDB4YzVkMjNjZTgsIDB4YzdhZDZmOWQsIDB4YmRkMmJlN2MsIDB4M2VlMjA3MGIsCisJMHhjOWMzNzE2MCwgMHgwMDNmYzViMCwgMHg3NjA3Y2JmZiwgMHgyZjVjYTJhNywgMHhmOWM1OTY2ZCwgMHg2OTVlM2UyMywKKwkweDg5MWU3MmIzLCAweDdlMjRiZmNmLCAweGNhMDg0ZTZmLCAweDIxODkwNmVkLCAweDZhYjEyZTdhLCAweDZlMmE4ZmNhLAorCTB4Mzk0MTJmYWEsIDB4NTczYzljNWEsIDB4OTcyMWYxNDMsIDB4M2MwMWUyMmMsIDB4Y2NjNGIwZGYsIDB4YmFlNjdkYjgsCisJMHgzNWU3ODQxYSwgMHgzYTNhZTBmZiwgMHhiYTg1ZjMxZCwgMHhjMjBhZGU1YiwgMHhmOWUzNzZlZiwgMHhkZWZjMmYxMywKKwkweGRjZWRjNDkzLCAweGRmYjg5MjdiLCAweDJkZjFhOTc0LCAweGQxYjkzZjNhLCAweGJiODcxNmY1LCAweDNmZWI0ZGRhLAorCTB4NTBkZGVhMjIsIDB4NjQ5YmJjMTIsIDB4MzVlMTdmNWEsIDB4OGNhMGYwOTksIDB4NGM5MjYwZjcsIDB4NGE2ZTRkZTMsCisJMHg0ZWJhZTEzMCwgMHhmMmY3ZjhiOSwgMHg3OWZjMmM5MywgMHg5YzdjYzJmYywgMHgzOTg4ZjFmZiwgMHg5NWQ5MzI5OSwKKwkweDNkZGYyZTNjLCAweGNhM2Q2YTdjLCAweGU4MGZjYzUxLCAweDA0N2IwZmNmLCAweGI1Zjk4NWM3LCAweDc3YzYzYzhhLAorCTB4MGViNWY3ZTMsIDB4Y2YxZmI4MDYsIDB4NzQ4YTM4MWQsIDB4Mjc0ZmUyODAsIDB4NDczZGZiNzEsIDB4M2Q0NzhmNmIsCisJMHhhMTY4Y2E3MSwgMHhkYzlhZjgzOCwgMHhmN2UyMTMzOCwgMHgzY2Y4OTYwOCwgMHg1N2RhMjVmNywgMHhkZmU0NmEyOCwKKwkweDBiNmU2NTNiLCAweGQ1M2JiYTQyLCAweDNiNDY0NjM4LCAweDQwYWYxOTQ2LCAweGJlOGZiNzdjLCAweDIwZTZmMGZiLAorCTB4NmIzODE1M2MsIDB4MDc4ZTM4OGQsIDB4N2U3OWZjN2YsIDB4NzFlNjk5OTIsIDB4MTY3Mjc5ZGMsIDB4OTJhNzRiZGEsCisJMHg2OGNlYzkwMywgMHhmY2ZkZjJkNSwgMHhlZjZlMDZlMiwgMHhhYTg5NmE5ZSwgMHg1YmY2YmQ5NSwgMHhiYTNlMDVmMiwKKwkweGQ3ODQ1NTkzLCAweDY4OGQyNmFlLCAweGY5OWViNzM3LCAweDdjNzBkM2I0LCAweGM3Y2VmOWQ1LCAweDEyNzhlY2VjLAorCTB4MTc5MmVjZWQsIDB4NTQ5MzNhNjQsIDB4YzMwOGE5YTIsIDB4ZTZkZjlmZjUsIDB4MDEwMmJmM2IsIDB4M2I4ZDEyZTcsCisJMHg1ZThiY2MyYywgMHhmOGZiOWE0YiwgMHhkZTc0NDhjNiwgMHg4NTg5ZjBhYywgMHhmMWUwYTlmMCwgMHhjNzNmMzI1NCwKKwkweDlmODIyYTcyLCAweDViZDkyYTgzLCAweGQxZWQ3NDRmLCAweDE5YWUzY2Y3LCAweGJmM2M1ZmY1LCAweGFlN2U2NmY2LAorCTB4Zjk3ODBmNjIsIDB4M2NmZDBjNDksIDB4YTY1YzZlNGQsIDB4ZjdhM2Q2MmEsIDB4YmY2ZDEzN2IsIDB4ZmU4NDFhNGIsCisJMHg4NWY5MWU1MywgMHg4YTI2ZWM0MCwgMHgzYzdkYTA4YiwgMHhhN2VmZTUwMCwgMHg3Yjc3ZTBjZiwgMHhkODc5ZjkxYiwKKwkweDExNzM3ZDUyLCAweDVhZjVmYmVlLCAweGJlNjA0MTgxLCAweDRlMzRkYmJkLCAweGQxMThjZmUxLCAweGVjMmE1ZDRlLAorCTB4N2IxNmYzZDQsIDB4YTNmYjhjOTYsIDB4YWViNDU1YWIsIDB4ODlkOTA2OTIsIDB4NDI1ZDk4ZjksIDB4MWJkZTVkZGUsCisJMHg2OWQyMGY3MywgMHg4Y2Q5MzFjOSwgMHg1NzQ0Y2RmZSwgMHg2NWM3YWZjYywgMHhmYjI2ZGU5MCwgMHhlZGM1Y2NhZSwKKwkweDEyOWRiMmRjLCAweDdkOGFiNWQ5LCAweDhiZWMyYTUxLCAweDNkOGVjMjczLCAweGRiODdiYWI3LCAweGY2MjQ4N2I3LAorCTB4Y2VjNzhjNTQsIDB4NDU3NjE1MjgsIDB4M2Q3OWJjYTksIDB4OWZmYjJiZTYsIDB4Mzk2YzJkYWYsIDB4ZmQ4OWU3NGMsCisJMHhlZjE2ZDVjZiwgMHhiYTk3YWRmNCwgMHhiZjhhZWI3YywgMHg5ZjUyNGVmNywgMHhmZTgyOTI3ZiwgMHg5NGE3ZDgwOSwKKwkweGMwYTlmMTJmLCAweGFjYWZlMmE3LCAweDIzODZiMzQ4LCAweDViNTQ2ZmJmLCAweDAzNzEyOGE2LCAweGExZjk1Nzg0LAorCTB4NmYzODg1N2QsIDB4OTU4MDQ5NjcsIDB4NmY5NTg3ZmMsIDB4YmZiYjVjMTAsIDB4Nzc0OTdlZTYsIDB4NzdmNWEzMDQsCisJMHhlZWRmMGUzMywgMHhlNWRmNGUyNiwgMHhjN2E5YzkxYSwgMHg3MDIzYThmZSwgMHg1Y2U0YmQzYywgMHhhM2E4NzY4ZCwKKwkweDEyZTQ4ODM3LCAweGY3YzFlMWU2LCAweGZlZTFjZjk2LCAweGEzNjMwZGE3LCAweDg1NWE5NTMwLCAweDI5ZmQxNDBmLAorCTB4YTlkZWNkY2UsIDB4YmQ4Mzk3NmUsIDB4MjQ5NWMzZTQsIDB4MTI0ZTc3NmUsIDB4NGMyYjQ4ZjksIDB4ODM1ZmQyNTYsCisJMHhjMWViYjljNSwgMHgwZjZmNmU3YSwgMHg1MzU3M2I1NiwgMHg2NjMxZmUzYywgMHhmMjcxNDM1OSwgMHg0ZTkwYTMwMywKKwkweGYxNGVhZTMwLCAweDEyM2Q1NWZmLCAweGViMWZjM2M1LCAweDA2M2Y5MDkxLCAweDc5MTFhZDliLCAweGY4NDlmNTVlLAorCTB4MDc2M2Q1M2UsIDB4NDhmNjMzMGMsIDB4YzdiYTlkZjgsIDB4ZDczYWY4OTQsIDB4NjZkNDMzZWYsIDB4ODk0ZmNlMGQsCisJMHg4N2ZiMjkzYiwgMHg3Mzk0ZmNjYSwgMHhmM2U3ZmYwOCwgMHg4Y2ZjYzMzMywgMHhiZTAxZjk5ZSwgMHhhYmZmNjAwNywKKwkweDBmYjI1NjE5LCAweGU3Mjg2N2EyLCAweDFlNDgyYWZkLCAweDA0YmNmMDI4LCAweDcwMDkzZWY0LCAweGE0MWQzMTg1LAorCTB4ODc2ZDkyOWIsIDB4NDBmZTc4NzMsIDB4Y2JkZjlkMWIsIDB4YzhlYmUyMDksIDB4MzllM2Y5MTEsIDB4OTQxY2JjMDEsCisJMHgyYjM1ZjFjYywgMHg5ZThiYzc5OSwgMHgzNzIyYTUxMCwgMHg4NWI2NDlkZiwgMHgyZmI5NDMyNSwgMHgzOTMyMmYzOSwKKwkweDYyY2U3M2QzLCAweDljZmMwN2Y5LCAweDg3YmNiZjg1LCAweDU3NGY0NGU3LCAweGVlNTEwZjgxLCAweDMyNDJiNGZkLAorCTB4NjNkOGZiYzcsIDB4ZjljYWJmOWMsIDB4MmEzZTNlYTMsIDB4ZTIyNWUwZmUsIDB4YjViMGU2MTMsIDB4OWU2MTg3MjUsCisJMHgwNWVmZTcwMiwgMHg3OGU2MGQyYiwgMHgxNzI4YmUyZiwgMHhjNWE2MjA3ZSwgMHg3Mjk3ZmVlMiwgMHg1Y2MwYmU0ZSwKKwkweGVjNDBlNzQ4LCAweGU4Y2NjMzJiLCAweDk3Y2I5NTk3LCAweGFmZmY1ZTI4LCAweDkzNzk1ZGYyLCAweGUwNmRkZDZmLAorCTB4NDkzNmVmZjQsIDB4OWVkY2ZmZTQsIDB4MTNjZjY3ZGMsIDB4ZmUwYjQ2M2YsIDB4YjQ0YmI1YTgsIDB4OWRmYjVjMmYsCisJMHhlNmRiYzc5YSwgMHhiYjVmMTQ0OSwgMHg3Y2YyMWUxZiwgMHg2MGFlZDE3YSwgMHhkZDliZTUzYywgMHgzN2RhNTUwZiwKKwkweGZiMTUwOWFiLCAweDlmYjRhMWQ2LCAweGY3NTg5Zjc3LCAweGUyZGYyMmZkLCAweDgzMTVjNmE4LCAweGE1YTNhMGYxLAorCTB4M2Y4ZTJiN2EsIDB4N2Y2OGI5ODcsIDB4YTM2YjFlN2QsIDB4ZDk2MDc0ZjIsIDB4ZWUwZDM3N2UsIDB4ZmNmZThhMTgsCisJMHhjNTFkNzZjNywgMHg2ZWQ3NmFhMSwgMHg0ZjVjYTEzNywgMHhiOGNkNmI2NywgMHhkOGEwMDZjZiwgMHg1Yjk4ZmRmOSwKKwkweGYyNTM4ZmRmLCAweDBlMmVjMTg5LCAweGZjMDRmYTQ3LCAweDdmZmM0NmNmLCAweDE4ODliODA1LCAweGUyZmY3ZDdkLAorCTB4M2U1M2Y2OGYsIDB4ZmJjM2U3NTIsIDB4ZDBjMDNkNjYsIDB4ZmYyMWVhYWYsIDB4YjU2MmE4YTgsIDB4MWM0ZGY2ODYsCisJMHhjYjM5MmRhYywgMHhlZjA1NTc4MywgMHhmMGZhZGUwYSwgMHgxZjE2NjE2YSwgMHg4NjlhYzJiYywgMHg0YmU0OWMyMCwKKwkweGZkMmU0ODMzLCAweDc3YTg2NjRlLCAweDA1NTc4NjZmLCAweGY4MTEzZmVlLCAweGU1Y2NkNjU5LCAweDE1YmUzZjk3LAorCTB4ZTc4MDNjM2MsIDB4ZGY0OGUyYTMsIDB4MzEzYzIzNmUsIDB4N2Y0YmM5MWQsIDB4YmUxOWI4N2EsIDB4ZTFlNzMwODAsCisJMHgzYWExODlhYiwgMHg1NGEzMmZmMiwgMHgyZDQ2OWU1YywgMHgzOGJlMjg5NSwgMHhiNTBmZDk5NywgMHhmMDJiMzk0MywKKwkweGJiZDEwZDUzLCAweDgxM2NkYmMwLCAweGYzOTk4ZmI3LCAweGZmOThlNGVlLCAweDkzYmRiYzNkLCAweDNjOWQ1NzljLAorCTB4ZjViZTdhZTgsIDB4ZjExYmQzZTcsIDB4ZmFjNTg5NjUsIDB4M2E1ZjQ1NDcsIDB4MWZhM2YyMTksIDB4NmJmMWZiM2YsCisJMHhmMGFkMWUxZiwgMHhkYTNjMmYzZiwgMHg1ZjExMDY1NywgMHg2ZTViZTFmNiwgMHg4OGJkMzViOCwgMHhhYTFjNjA3ZiwKKwkweDcxNmJkZjg5LCAweDYwOTU3ZTUzLCAweDU3Y2Y4MDIxLCAweGE2ZjU3ZDkzLCAweDJlMDUzNzgyLCAweDlkZWI4YTM3LAorCTB4YzIzYjcyZDYsIDB4ZmI0Yzg4ZjEsIDB4ZWU0OTlmOTgsIDB4NjM5NDY2YTMsIDB4ZmNlOGE3MjksIDB4YjNmZWQyOWIsCisJMHgxZjQzNmRkNSwgMHgxYjNlNzE4MiwgMHg1YWQzY2JjZiwgMHhkNGE5MWY5ZSwgMHgzZTNjMDE2ZCwgMHhjZWE0NTlmOCwKKwkweDRjZmRlYjgxLCAweGZhODA5OTRhLCAweGJmZTkzM2UyLCAweGI4N2FmM2E2LCAweDM5ZjU4MmQ2LCAweDUwY2MxM2UxLAorCTB4ZTI1MWFkM2YsIDB4N2M0NDZiODksIDB4NjdlNTQ5YzAsIDB4NDQ5YjZlNzMsIDB4MzZmNjI0ZWQsIDB4M2Y5ZjhlZjMsCisJMHg3Y2ZjNTEyYSwgMHg5YzcyODgwMSwgMHg2Nzg0Y2M1ZiwgMHhmZWFmMzE3MywgMHg0NmUzY2ZjYywgMHg3MmRmM2VkMSwKKwkweDFmNTBmMWRmLCAweDkyMWM1MGM3LCAweDVlNzc4YmZiLCAweGY0MmNkMWViLCAweDdhN2QzYmQyLCAweGZlMTVkMjcwLAorCTB4Y2U5MzNmM2MsIDB4ZDgwODE2MWIsIDB4Yjg1MjQyZGEsIDB4ZTdlNGVjN2YsIDB4ZDMzZDE1MzYsIDB4ZDE5ZjZjN2IsCisJMHg0MTdhNGUzYiwgMHhlYWZiOTVjNCwgMHg3YjQ0NGYyOSwgMHgzYmMzYTllYiwgMHhlMzg4OTU3ZSwgMHhlOTFkNjgxNCwKKwkweGFiZmI3ZTc4LCAweGQxYTNlN2RhLCAweGYxZDgyODllLCAweGI3ZDkyMjc4LCAweGEyMjYzNjNiLCAweGZkYjA1MjlmLAorCTB4YWEzNjg5NTcsIDB4NGZjOWRhMDcsIDB4Nzc3NWYzNTIsIDB4YTVmZGI5ZWUsIDB4ZTc3YTVlNGQsIDB4NmZkY2UxZDEsCisJMHg5YzNmYTc5OSwgMHg5NGVlNzY4ZCwgMHg2MWQ3OTcxMSwgMHhlN2UxM2UzYywgMHhmMzg3ZGQxMiwgMHgwZWI2ZDY1MywKKwkweDY0ZmNkZmY1LCAweDQ2YWNlZjRlLCAweGUxOTk3MjRmLCAweDczYzAyZGY5LCAweDc1ZGRjYTdkLCAweDkzYzdhN2M4LAorCTB4NDNlNGQwYmYsIDB4OWE4YTVkM2IsIDB4Mzk5ZjMzZTAsIDB4N2VlMzg3MzcsIDB4NWNjOTA2ZjYsIDB4MGZkYmJjY2YsCisJMHg4NWNhZmRhNSwgMHg0NDZkMjU2YiwgMHhlMGI3ZWEyOCwgMHhlYTNmZTg1MSwgMHgxZTY5ODI1MiwgMHg2YThjMzY4YiwKKwkweDU3ZjNlN2M1LCAweDc0NTNlN2YxLCAweDM4NTNjNmNlLCAweGNhNWFiM2NlLCAweDEwZjkwMjM3LCAweGFmYzc5ZGViLAorCTB4ZjFlN2UxNGIsIDB4Yzg5NjZjMTcsIDB4OTNiZTU3YWUsIDB4YWQ1ODRjZjAsIDB4Mjk3NTNhZjcsIDB4ZDQ2NzJmNDIsCisJMHhjZTUxZGM5MSwgMHg3NTViNGUwOSwgMHgxODA4ZWRmMiwgMHhiYjZhOWZmNywgMHgzOWM2MDUyOSwgMHg3OGI5ZjRmMSwKKwkweDE0OWYzYzM3LCAweGZkMTUyMTcyLCAweGZkYWQwNDliLCAweGVlYjg4NWI3LCAweDgzY2EzYWVkLCAweDkyOGY0OGNiLAorCTB4ZThmZGExYzMsIDB4ODUzZmM3ODcsIDB4MGI1NTgyZTUsIDB4ZjI4ODViN2YsIDB4MTQ3ZWFiNzEsIDB4ZjNlNjE3NGYsCisJMHg1NTU5MmU1YiwgMHhhYWRmM2YyOCwgMHhjMjExNjA3ZCwgMHhmNWE3YWJlZCwgMHhhZjJmOTc2NCwgMHhmZDY3MGE0ZCwKKwkweGJlNTI4ZmYwLCAweDhkYzdmODBjLCAweDdhOTU1ZDgyLCAweDlhNTc3NzJhLCAweDllZGEzY2U5LCAweGZmYWEwOGNhLAorCTB4MjU0MmQyYmUsIDB4NmJlOWNkOWIsIDB4OGRjYjk5YjksIDB4ZTYzNzhkMWIsIDB4ODBiMzIwNWEsIDB4YzFiMTlhYmQsCisJMHg3MDYzMmNjMCwgMHg5Yzk2Y2U1ZiwgMHgxODQ4NzAwMiwgMHhhMzdkYmE1ZSwgMHhhNTZlMTc1OCwgMHg0Y2M0NzI4YywKKwkweDZjNjQzODQ0LCAweDRkMTVhODdjLCAweGVlMTRkMGRhLCAweDZhNzdiZDY3LCAweGVkZjIzNDQzLCAweDJmMWQ1NWIyLAorCTB4NTM3YWUyMTYsIDB4N2Y2MTQ2ZjIsIDB4MTQyYmI2ZmQsIDB4ZjlhYjc4MzcsIDB4ZWYwOGY5ZjEsIDB4YmUzYWVkODIsCisJMHhhZmVlYjEzZSwgMHhmZjBjNGU5ZSwgMHg3OGVmOGMyZCwgMHg3YzdlNDM1NywgMHgxNzhlYjZmOSwgMHg3OGI5NDIzNywKKwkweDZmNWE0M2YzLCAweGY1ZDViZjdhLCAweGZiZTE0YzhlLCAweGFiZTMzNzlkLCAweDVmZTFjMTFiLCAweDQ1NWZhYmU3LAorCTB4N2Y2Y2ZmMTMsIDB4ZjllMWVlOWMsIDB4N2NhYWY5NzcsIDB4ZGY4MjZhZDUsIDB4ZDliYzk0YmEsIDB4Njk1ZjVmNDgsCisJMHg0ZmM4ZDExYywgMHg5OGZjYTU1ZiwgMHg0ODcxZGNlOCwgMHhmMjJiZjgyMiwgMHg0YjNmZTk1NSwgMHhlNTU4YmZjMCwKKwkweGM2MmUzY2RhLCAweDYxYmY1ZjIzLCAweGMzZGYwNDE5LCAweGQxMTNlN2NkLCAweDY5YTZmZGFlLCAweGZiYWUwZmNlLAorCTB4YjdiZjI1NDAsIDB4ZWJlMDA5YTUsIDB4NTI4ODJmN2QsIDB4NzFlZDY5NjYsIDB4OTY1ZjU4NTYsIDB4ZmZlMGM3MzgsCisJMHgxMmEyOTFkZSwgMHg2ZmRmMmNmNiwgMHg1NzkyN2ZjNywgMHgxN2U4MDc3ZSwgMHg0Zjk4MDBjNywgMHgwZWU0OGI0OSwKKwkweGU5YWUzZjQwLCAweDIwZWEwYmFlLCAweGZiMTIzM2Q0LCAweGM5MWUyN2RjLCAweDdhNWVlN2Q4LCAweGJkZjM0NmY2LAorCTB4ZTM4NjU5NTksIDB4ZWVlNDc4MjQsIDB4N2NhODlmNmQsIDB4YmRiOTYzZWUsIDB4N2VlN2MwM2QsIDB4MDNmZjNlOTMsCisJMHgzZjY5Njk5ZSwgMHgzOTU2YjIyNywgMHg0Yzc5ODBiZiwgMHg3NDI5Y2Q1ZCwgMHg5NjgyZTI1ZSwgMHgwMGViYjFlMywKKwkweDNlM2MzOWQ4LCAweDdiYWY2NGMzLCAweDc3MzQyZTIyLCAweGY1OWNhM2E2LCAweGViZDk2ZjVmLCAweDI1MWY0NDlkLAorCTB4MjE1ZjhmNGQsIDB4ZjI2OWI2M2YsIDB4Y2RmYTc1MDUsIDB4NDc3ODdmZDcsIDB4NzFkYmRkMjcsIDB4ODU5ZWQzNDEsCisJMHhiNjk3NTRmZSwgMHg1MGYxMWQzZCwgMHhlNzk3MDZmNiwgMHg5NDFjMmFmZiwgMHg2MDFiODVlNywgMHg2NWU3YzAyMSwKKwkweDI0ZTg5ZTkyLCAweDcxNDRiZTViLCAweDNjNjNhZTgxLCAweGZjZDY1MDJlLCAweGRlZDNjOTEyLCAweDI5OTcxZTE2LAorCTB4ODRlNWI1NTcsIDB4YTJhMzFjNjMsIDB4NTllNTE1YTMsIDB4OTNmNzA0NmYsIDB4MDliZGM0Y2EsIDB4MWU4NGUyZTMsCisJMHhlMzQ0Zjc1NCwgMHhkOGI3MGU3OSwgMHgzYmZjNTYyNywgMHhmOTAxODdiYywgMHgyYWU1NWNiNSwgMHhmNGE1ZmNhMSwKKwkweDJkZmI4NjQwLCAweGUxOWY5MTE3LCAweDMxOTVmY2Y5LCAweGJmY2U5MWViLCAweDhkMWEwZTcyLCAweGY0YmRmMWYyLAorCTB4MWM1MTk3YmYsIDB4NjY4MTBmZWYsIDB4ZDkxMWVjOTksIDB4NmZiYzJmMjcsIDB4Mjc5OTRlMWQsIDB4YWVjNTMwYzgsCisJMHg4YmM5ZjQwOSwgMHhlZTVhZDcyZSwgMHgzOGY2N2IyMSwgMHgxZjJiN2ZkZiwgMHhiZDg5ZjljZSwgMHg3NGE5ZjljZSwKKwkweDg0NmQ2MWVkLCAweDgyMGQ3OGQ3LCAweDZlZmIxNDlmLCAweDRlZmUxZmNhLCAweGQxMzg3OTdjLCAweDkyZjkxYzc2LAorCTB4NzhlMjE1Y2UsIDB4OTI5YzAzMTEsIDB4Nzk2NWRhMjQsIDB4MmQ4ZDFiZjYsIDB4OTVjZmFmYzIsIDB4OTM3OTdkZTksCisJMHg4ZTVmNzBjYywgMHgyZjI4OTg0NSwgMHg1MzU1OTcyMCwgMHhlNjE0ZTU3ZSwgMHgzMzliNDcxYSwgMHhmMTI3ZjZlYSwKKwkweDdmYTk5YjVlLCAweGZlNjBjNzkwLCAweGI0NDFmODE2LCAweDYwMTM5ZDdmLCAweGE2ZmNjNzhmLCAweGMwNDkyYWQzLAorCTB4YzMzMTk1ZDUsIDB4ODdlOTlmNGIsIDB4NGUzNTNkNzMsIDB4ZjU4ZjQ4OTYsIDB4OWQ5MjA2NDQsIDB4ZTk3Njc5MzIsCisJMHg2OWZiNmYzYywgMHg4M2I3OGFiNCwgMHg2MjZlYzg3MSwgMHhhZTdlMWVjZSwgMHhlZTkzZGRjNiwgMHhhY2M4ZWY3ZCwKKwkweDkwNTYwNDNmLCAweDhjYWU2NDVlLCAweDg5ZGY1ZTU5LCAweGU2ZjVjZTFjLCAweDA2ZmZkYzU1LCAweGZiMTcyOTNhLAorCTB4NzdmMmQ5YWMsIDB4YmQzZGEwY2YsIDB4NWZkZjEwZmMsIDB4Zjk4YWFkM2MsIDB4ZThiM2YzMTgsIDB4ZTc4NGI2ZGMsCisJMHg3OTM5ZjlhMywgMHhiYzM2Njc2NiwgMHg2ZDJiYWY2NywgMHgyYTA3OWQxMCwgMHhjYzMxMjNkZiwgMHhkNjZiMmI3MywKKwkweDUxMzhjNzZkLCAweDBjM2RhNjk5LCAweGQzNjM3OWU5LCAweGU3YTQ1YTQ3LCAweDRkNzdkYzcyLCAweDc5YWJlN2UzLAorCTB4NzI0ZjVjZGMsIDB4NDhjY2RjYmMsIDB4MjUzNjk1N2YsIDB4YmJmMThjN2QsIDB4OGI1YzYzZDIsIDB4OTI0ZmFhOTYsCisJMHgxYjcyOGU3ZiwgMHhiOGRjNTdiZiwgMHgxMmYxZmM5NywgMHhiYzdmMjZlNiwgMHg2ZTk3YzFhNCwgMHg4ZmZhMjM3YSwKKwkweGI3MGU0N2RmLCAweDMyMzNkY2Y4LCAweDhmZTcyYjc5LCAweDMyNWVlMjU5LCAweDkzYjBlMjI2LCAweGJkNmJjMjIzLAorCTB4MGE0NTMxY2YsIDB4Y2VlNGQ4M2MsIDB4NzRjNzY4NzUsIDB4YmM1NjRhYzcsIDB4YzAzYmE2OTcsIDB4MjNlZDE2YjEsCisJMHg2YmI3MjI0NywgMHg5ZGRjZGZiYSwgMHg4YmU0OTRiMSwgMHgzNGRlZTMzMywgMHhkYjg3NTdiYywgMHg2YzM3OTNiMSwKKwkweGYzNWVjYjUxLCAweGUzZWUyYzk5LCAweDA1NjAwZWViLCAweGY2ZWYwODA3LCAweDkwOGY4ODIxLCAweGUxYThiY2E0LAorCTB4OWUzZWU4ODMsIDB4N2M2MDc3MTMsIDB4ZjI3YjljNDgsIDB4NDQ2ZmM3NWYsIDB4MzhiOGU4NWMsIDB4N2JjY2E5YmYsCisJMHg5NzE0NTQ2YSwgMHg3NDQ5Y2M2NywgMHgxOWNlMmFkNCwgMHg0YTM2NzkyOSwgMHgxZWIxMGFmZiwgMHgzZDA3N2VjNSwKKwkweGZiNDNmZTFkLCAweDkzNGZiODI1LCAweGYyNjlmNjJmLCAweGJlNGQzZWM1LCAweDE3YzlhN2Q4LCAweDYyZjkzNGZiLAorCTB4ZWM1ZjI2OWYsIDB4N2Q4YmU0ZDMsIDB4NGZiMTdjOWEsIDB4NjlmNjJmOTMsIDB4MGQzZWM1ZjIsIDB4NTRlMmMzZTUsCisJMHgxMWNkZmYzMSwgMHhkMWVhMzRmYiwgMHhjMWI1ZTQ1NiwgMHgxMGU5ZmE5ZSwgMHhkZjYwZmFiZiwgMHgyNDQzYTdmNiwKKwkweDg5NjBmYWRmLCAweDI1N2M0ZmRhLCAweDExODc2OWY2LCAweDIxNjZhM2UzLCAweDU0N2M3ODlmLCAweDJhNzlkZjM5LAorCTB4ZTExOTNlZDAsIDB4ZmNlNzljYWMsIDB4MDNhOWY3MmEsIDB4NDI5MzRmYzgsIDB4ZDliZjkwZTYsIDB4Y2EyNmZlMGIsCisJMHhmNmUxY2FhMywgMHhlYzc3NmMzYywgMHgyZGY4YzRkOCwgMHgxNDBkMjcyNCwgMHhlMGZkM2NlNywgMHg5ODczOWYwOCwKKwkweGFjYzc5M2UzLCAweGM2MzA3YmM1LCAweDdlNzEyNTFiLCAweDllNjQ3YWJjLCAweDM4YzFmZmUyLCAweDY2MTY1YjEzLAorCTB4MzA3Y2I5YTgsIDB4MmQ5Y2JkYTMsIDB4NzdlM2U0OTcsIDB4YzYxYTQ3OTYsIDB4MjRkNjFjYTAsIDB4ZjcwZWU3ZGIsCisJMHg4MzM5ZGI5MiwgMHg1ZGEzYzU5NywgMHg3Y2IxYWFkNCwgMHhjNzVhZjE4YywgMHhiZjNhMWEwNywgMHg5NGY1YzRhYiwKKwkweDhkMjVlZjc2LCAweDkzN2VjNDJmLCAweDhlZDZlMzkzLCAweGZjZjVmMWM2LCAweDk2OWIzOGJlLCAweDZjZmNlMDM1LAorCTB4ZWU4OTQwYWEsIDB4MzUxNjYxNmUsIDB4ZTFjMjgzY2EsIDB4NTgyNjZlOWMsIDB4ZDZlYzdkYjgsIDB4MTgyMWQ0NWEsCisJMHgxZjE4MDk4ZiwgMHhhZDEzNzk4YSwgMHgwNGM3Y2YwMiwgMHgzYzBiOGY5ZSwgMHhhNGQ3N2VlMywgMHg4NWRmYmUwNCwKKwkweDYxNzdlZTI1LCAweGQ1OGRlNGE5LCAweDFmMmRlNGE1LCAweDI3YjRmMjRlLCAweGM0YWNlMTFhLCAweGU3MjhhNmZkLAorCTB4ZWU4Yjk4ZmMsIDB4ZDA1MTdjMzMsIDB4YmU3MGQyNmQsIDB4NzI2MWYyY2YsIDB4MDljM2EzZGUsIDB4YjczYTJlM2YsCisJMHg2OWUyMmM1OSwgMHg0MzdmNjI5ZCwgMHhjZmQyYTc1OSwgMHhmYmYxOWZkMywgMHgwNzMyNDY1YywgMHg4M2IzNjdlZSwKKwkweDA4NzY0ZjIyLCAweDlmNTAyM2Q4LCAweGU0OWMzMDc5LCAweDdhMWU3MjkwLCAweDA3ZWUxOGU2LCAweGZjZTI3ZGIwLAorCTB4MTMyNTg0NjIsIDB4YzQ0YWEzZjksIDB4ZmM5Y2JiNTMsIDB4NDg2OTZkMWMsIDB4MjM5ZTIyNWIsIDB4YTU3YzEyZTgsCisJMHhkMTczOTVkNCwgMHg2ZWExYTNhNSwgMHgyODRiOWNmNCwgMHg4ODk2ZDk5ZCwgMHgyNGJhMTJlNywgMHgwZGNlOGE4MywKKwkweDRmZWZlNzZmLCAweDhkMmJiZTA5LCAweGY3MjllMzE1LCAweGQxNWRlODRlLCAweDQzZWU4Nzg4LCAweGJjZjFhMzA3LAorCTB4N2JhMzI2ZGQsIDB4NmVmYjk3MjksIDB4MjgxMWRlN2UsIDB4M2E5NmYzMTYsIDB4Y2MxOWQ3MjUsIDB4Zjc3NDdkY2YsCisJMHgxZTYzZjcxYiwgMHhmNWM2YTc3ZCwgMHhkYjFmZDYyMiwgMHhjYzdlZTg3ZCwgMHhmNjk0ZWRjZiwgMHhiZjdiMzE5ZSwKKwkweGM2OGFlNDFmLCAweDc3NDdkZGZjLCAweDgzZjdmMGI3LCAweDZjMThiZWY2LCAweDVlNmJhYWY1LCAweGI1ZWY4MzNiLAorCTB4OGZkZDBlNmIsIDB4NzU1M2JjZjksIDB4NDg5NTYzY2UsIDB4NzRlN2JmMmYsIDB4ZmZiM2Q4NjUsIDB4YjhhZGMyMWMsCisJMHgxM2VkZGI5OSwgMHhmNGJmZWNmNiwgMHhmZGU1ZWExYSwgMHgzZmVmZGEyNiwgMHhlMDg2M2MzOCwgMHhmMmZjZDU1ZCwKKwkweGFlYjNhNDY2LCAweGJmZGUzY2JkLCAweDE3YTNlMWE5LCAweDc0ZWQ0MTdmLCAweDU0ZGMwZDc0LCAweGMxODMyYjlkLAorCTB4OWVlY2Q2NzcsIDB4MWE5YWYzNGIsIDB4ZWIxYWZhZTgsIDB4NDYzODhkNGYsIDB4OTAzYTk4ZjMsIDB4MTFkNmYzZjMsCisJMHhlNzhmZGRlZiwgMHhlZmY2YmEwMSwgMHg2ZWY5MDQ3OSwgMHg2ODMwMDBlYSwgMHhmOWJiM2U3MSwgMHg3ZGEyYTBmOSwKKwkweGJmZDA5MzI5LCAweGNkYjUzMmVmLCAweDVlY2JmMWM3LCAweGYzMzlkMWQxLCAweDc0ZTE3ZGEyLCAweGMzZGJjNzJmLAorCTB4OTkzOWY5NjMsIDB4YThkMWQ1ZTEsIDB4ZWZhZjU1NjcsIDB4NTA4YmYxZGEsIDB4ZmRhMDY3NmMsIDB4NmUxMGYyOWUsCisJMHhiNWM5MTVlNywgMHhmZTExMGY1OSwgMHgzY2YxZGE1ZSwgMHg4MTk3N2JjZSwgMHgzMTBiNWZmNiwgMHhjMmY1MDJhNiwKKwkweGE3MTQwOTFkLCAweDVmMWZlMzdmLCAweDY0M2M0N2NjLCAweDdjZThkYmNiLCAweDA2NzVkN2NmLCAweDk0ZTFjMjE1LAorCTB4Y2YwMDM2ZDYsIDB4Njk0ZTM4ZDMsIDB4MTQyY2RmYzgsIDB4ZmNkM2MyZjUsIDB4NjA1MTdkYmMsIDB4MmZlMTBlN2IsCisJMHhmNTFhM2FiNCwgMHg0N2MwZDE2YywgMHhhN2JjZTNhNywgMHhhMjJmZDVjYSwgMHhlNjVlYzNiZiwgMHhkODVkYzZmNywKKwkweDdlODM3MDA1LCAweDk0MzVlYTE3LCAweGNiYjVkYWFkLCAweDNiZTJlNzQ0LCAweDc4ZjllYWE1LCAweDllYTM4OTNmLAorCTB4NTQzNGViYjcsIDB4ZjUxZDNjMTMsIDB4YjRkZWZjNDksIDB4NDhlODMwNWQsIDB4ZTdjNWI3NmMsIDB4OTdmYTg1ZjksCisJMHhiZDFmZDFkMywgMHhmMjU0Y2FmOCwgMHg1NWZhMTU0YiwgMHhjZWE4YTVmOCwgMHgzZjFkN2NmZiwgMHhmZTI0NWFiNywKKwkweDMzMDc2NjY2LCAweDJlOTNjNTdhLCAweGViYWU3ODFlLCAweGZmZDNjY2I3LCAweGNlODY4MzYyLCAweGQ4ZWExNzc5LAorCTB4NTYwZmNjNWEsIDB4ZWEyOGExZjgsIDB4NWY1YzVjYWUsIDB4MTEzNmFhOTEsIDB4MzFjMjk2ZWQsIDB4MmY5MWYzZWQsCisJMHgzZTk4MTgyZSwgMHgyN2JkZGEwMiwgMHhlMzUxNTVmNCwgMHhmZjY4MTllYSwgMHhhNjNlNjhkZSwgMHhiZjhmOWMxMSwKKwkweGViN2FlMDg5LCAweGQzODMyNjliLCAweGJmZDFiZjdiLCAweDk5OTJiNGZjLCAweGQ0ZjA0ZmRmLCAweDdiZTE1YTdmLAorCTB4YWQzZGYwZGUsIDB4YjRmZDA0YWIsIDB4M2YyZTEwYjIsIDB4YmM3YjQwY2UsIDB4N2M1MDJlOTMsIDB4YmY0YWMxNjcsCisJMHg3ODIzOTI3MywgMHhiNjk5NjQ1ZSwgMHg5ZWY1MTEzZCwgMHg4NjNmZmUzMiwgMHhhODVkYjk5YiwgMHhiN2ZiYTc2ZSwKKwkweDQ1NGRmYmZjLCAweGM4ZTUwNDczLCAweGI3OWU3ZTZlLCAweGEwZWE1MWE4LCAweDUyMDgyMjczLCAweDhiNjY3YmFmLAorCTB4ZTYyNzBlZjQsIDB4ODc4N2Y1MDksIDB4MDc4MTJjODgsIDB4MTFiOWViMTgsIDB4YTI4ZjM0MzEsIDB4MDc5ZDAzMDYsCisJMHgwZjY4MGUyZiwgMHhjNGE5M2I0MiwgMHhmNjg0MWVkNCwgMHgzMmViZDc0ZiwgMHhlODg5YzNkZCwgMHg4ZmM2NTUwYiwKKwkweDg5NGY3Y2Y1LCAweDM0YmExNjEzLCAweGRmN2Y0MzM2LCAweDFjNjBlNTgzLCAweDBkZmUxOTcyLCAweDA0NzU3OGEwLAorCTB4NjgyYTI3ZGYsIDB4Y2ZlN2U0MGEsIDB4MWU3NGVkY2QsIDB4MjYzY2ZmZGIsIDB4YzVlY2QzYWUsIDB4MmY0ZDVkOGYsCisJMHhlOWZiNzk4NSwgMHg3OTcwNDdhMywgMHgxMDc1MmRkMCwgMHhlM2ZmNzRkZiwgMHg4M2E0NjhmMywgMHg4YjViMTUyMiwKKwkweDI1MTc5NWZiLCAweGVhMDIyZTdlLCAweGEyZTIxZTc0LCAweGZhMmNmN2Q4LCAweGY0ODAxOGQ2LCAweDEyOWJmMTczLAorCTB4YTkyZWUzZTIsIDB4ZmI1Y2U0OWQsIDB4N2M5MzNmZWUsIDB4OTNiNGQyZTgsIDB4YzQ2OGZiOWMsIDB4ZThmYzkzN2YsCisJMHg4ZjlmNmUwYSwgMHg0NDdkYWI3MiwgMHhkOTFmN2YwZiwgMHgyM2NmMWYzZSwgMHg3Yzc1ODliZCwgMHg4MWZmZjc4ZiwKKwkweGZkZGFlZmZlLCAweGVmYThmZGVkLCAweDhmM2NjYWE3LCAweDMxYTRiZDgyLCAweDg3MTBmOGYzLCAweDI3MDEzMmY3LAorCTB4YWU5YzM2YzYsIDB4NjM0M2ZmMjQsIDB4MmRkMGZkNDEsIDB4MTY2ZjAzZTgsIDB4OThmZTVlNjQsIDB4Y2M1ZDRmYzIsCisJMHhmOTExYTdiMiwgMHhjN2RmODBiMywgMHhjMzU1NzYwMywgMHhjZGZmNjg2YiwgMHg4NGZiYTMwOSwgMHhlY2E2ZTFmYywKKwkweGZjODY4NjMzLCAweDY5ZTIyOTZkLCAweGMwZmVjOTg2LCAweDY5NTM4MDA4LCAweDE3ZjkzYjZhLCAweDg3YTRlZDQwLAorCTB4OTFkNGRlY2EsIDB4ZTlhZGQ5OWYsIDB4MmJmMjgxZDksIDB4OGI5ZjY0YzUsIDB4NmRiNDRhZWQsIDB4YmMyNDMzZWIsCisJMHgxNWJkYTBhNywgMHhjYTI5ZmE0ZCwgMHgzOTk3YzdmOSwgMHhiZWE1NzViZCwgMHg4ODRkY2ZjNCwgMHg4MTYyY2E3ZCwKKwkweGIyNWJiYzA3LCAweGUyNDNlOTE2LCAweDY5YWI3ZTc4LCAweDZmMjhmYmRmLCAweDQ4ZTJkYWJhLCAweGQzZjNmYjRlLAorCTB4ZThhN2E2ODUsIDB4NDA0ZjhhOWUsIDB4ZTJiYzNiYWYsIDB4N2MyYzlmMDAsIDB4NjYwMWYyOTksIDB4ZjE4ODFlNjMsCisJMHhiZGJlNzNmYSwgMHhmZTRiZGRkZiwgMHhmNWVjZGIyMCwgMHhjNmIxZTkxYywgMHgxNzBmZWViNywgMHgwZmI3NGJhNCwKKwkweGRlNjgzODFmLCAweDAwZGY5MDNiLCAweGRhMTNjNWZlLCAweGJlODc3ZWU4LCAweGNiYTg0Y2ZhLCAweDdlMjNmNTVlLAorCTB4NzhmNmJmNzUsIDB4MGZkYTAwNWYsIDB4NTA1ZDg0M2IsIDB4OWE3ZGQ0MzIsIDB4M2MzZGY3ZmMsIDB4ZjQwYWI3NmYsCisJMHgwN2Y3ZDUxYSwgMHg2YWE1N2U1MiwgMHg1MGFkZTgwZiwgMHg1ZjUwYjdhZSwgMHg1MWI1MDcxNCwgMHhiZjZiYWFkYywKKwkweGQ3NzlmNjhlLCAweGM2OGY5ZjM0LCAweDUyM2QwM2Y1LCAweGY5YjhhNjdjLCAweDdjY2JkZDIwLCAweDRjODdmZDEwLAorCTB4OTQ2MThmZDIsIDB4MzliZmIzMTcsIDB4ZTUxMGZkMGMsIDB4OTVjYTg5NzksIDB4ZDNmNWYyMjgsIDB4Y2YyODdlNTEsCisJMHgyMjc3NjU0YiwgMHhkYTk1ZjM5ZCwgMHg4Mzg4ZmVlOCwgMHgyYTI1ZGU2MiwgMHgxNzU4Y2JhOCwgMHhkZjM4OTZmMywKKwkweDJmN2U2NmIzLCAweDVlZGUzZjk2LCAweDc2ZWRjMTE5LCAweDlmNzQwZjkwLCAweDc5ZDc5YWU3LCAweDA3OTE0MGRjLAorCTB4MWNhZTQyODUsIDB4OWNhOWU3YzEsIDB4M2VjYWNkZmYsIDB4NDQyZDc0MTEsIDB4NGU0N2VmYmUsIDB4MGIzMDhmMjQsCisJMHhlMjgyYjg3ZiwgMHg1ODQ2M2IzYSwgMHhhN2Y0NWQ3OCwgMHg4OWRjNzk3MSwgMHhkMWJkOTdkZSwgMHg4YTliMWU5OSwKKwkweDNkY2EyY2ZkLCAweDE0NzkxZTVmLCAweDI4MmY5MWU3LCAweDBlNDgyMjA3LCAweGMxODRkMWFjLCAweDk0NWU4YWJhLAorCTB4YzJhMmZlZTgsIDB4YTA3M2FiNzksIDB4N2VhNjViMzksIDB4MmQ0OWVlODgsIDB4ZTM1YmJjYzAsIDB4YTdmMmYzZjUsCisJMHg1N2I4ZjFhMywgMHhlYzUyZjI4OCwgMHhlMGVkMTUwMywgMHgzNTE3NDBmYiwgMHhlNDBkMWY3YywgMHgyZmY1ZTUwZCwKKwkweDA3M2FiNDliLCAweDY4NDk2ZmY5LCAweDRmZGJkNmE5LCAweGQ3ZjhkOWJlLCAweDU4YWY1YjlkLCAweDBmZGUxMzlkLAorCTB4ZGNhZDE3OWYsIDB4NWQ4ODNhZDIsIDB4YmRhMTVlM2YsIDB4NzJjYzI3MzYsIDB4ZGU2NTczZmQsIDB4M2NjYTBkMTcsCisJMHg3OTA2NjgyNywgMHhlYWY2NjNjMywgMHg3MzRmYmMxYywgMHg4NWRmZmU5OSwgMHhjNWY3NWYwNywgMHhmNTFiOWQ2NiwKKwkweGY2OTdjMDJlLCAweDU2YmNlZTgzLCAweGJkNWYxM2UxLCAweGNjODU3OGQ5LCAweDM3MWZmYjQ5LCAweDU5N2ZiZjlhLAorCTB4NTM0ZmI5MjIsIDB4NTdmMDJkNWUsIDB4ZjlkOWYxM2QsIDB4YTBmZGVmNjgsIDB4ZjZiZTQyMjksIDB4MTYwYTI1YzUsCisJMHg0MDdiYTMwZSwgMHg3OTg3MGJlYywgMHg0YmZjMjVjNywgMHg1NTgzOTQxMCwgMHhhMGUyMzM5NCwgMHhiZTcwZjgxMiwKKwkweDI4NzgxZmI1LCAweDA0NjdmZmVkLCAweDMyOWE0ZmNmLCAweGUwZDVmMzgyLCAweGJkY2ZjNWE5LCAweGEzOWUyOGM2LAorCTB4ZTM3NDFkNGUsIDB4NTRhNjIxZjMsIDB4N2NiNzRmY2UsIDB4MjA2MjY0M2UsIDB4NjBjODc3NmYsIDB4Zjc0ZmI4YzYsCisJMHg1YzUxYmZhMSwgMHg3MTlkN2JiOCwgMHgzMDZmZGYzNiwgMHhkZjc4NDhiMiwgMHhkZGI2OTExYSwgMHg4YWZiZmUzYiwKKwkweGU3ODE0NzM4LCAweDdlZmNlOWJlLCAweGUzODdlNmIyLCAweGJlYTZhOTRhLCAweDFiZDkxMmI4LCAweGNmYjQ4MWE5LAorCTB4OTU3NGQ1ZDIsIDB4NGI3NzViZjQsIDB4NDNmNzE5YTYsIDB4NDY5Y2RhYmEsIDB4N2ZmMmI3ZTQsIDB4ZWExODRmZmMsCisJMHhiMzk2YWVlMSwgMHhmNWQ2OTc5NCwgMHg1N2NhNzlkZCwgMHgwNmYyMjhkYiwgMHg3Yzg5MzQ4ZiwgMHgwOThiMzZhZiwKKwkweDdlZTc3NzlmLCAweDM2ZWQ4MzkxLCAweDU3MTNkMjg5LCAweGE1MzE3MWUwLCAweDI1NjVmYzU0LCAweGZmNzVlMDdlLAorCTB4NmI4NDI4ZDEsIDB4OTNlMzc5YmQsIDB4YTYwZjMwMTksIDB4MWRkZmE2YWYsIDB4MDQzOWZmMDAsIDB4YWUyNzg3ZjUsCisJMHhhMWZmMDk2MCwgMHgyYjhjNGEzYywgMHhiOGYwMjdjNCwgMHg1NzE4OTYwMiwgMHhiOGYwZDc4OCwgMHhhZTMxZDYwMiwKKwkweDE1YzYyNTgwLCAweDE1YzYzOWYwLCAweDA1NzE4ZWIwLCAweDAxNWM2M2FjLCAweGMwNTcxOGViLCAweGY4MGFlMzEyLAorCTB4OGU3MTZiZmMsIDB4Mzc4YzFiYTMsIDB4OTIzNGY3MWUsIDB4Y2Y1MTVmZmMsIDB4ODg1NzZiZjcsIDB4ZDQ1N2ExZmIsCisJMHg4NWI3OTQ0YSwgMHgwZjUwMzhlNywgMHhkM2M3OTc1ZSwgMHg1Yzc4ZjIyOCwgMHhiMDNmNjg1YiwgMHg0NTZjYmY3YywKKwkweDBmNzllMTU0LCAweDc5ZjMwZTg3LCAweDNjNjI4ZTdhLCAweDY0YWY3Y2E4LCAweGU3YzE2ZDVkLCAweDFiMWU2OWIzLAorCTB4OWUzZjMyNWIsIDB4MzVlYmNmODcsIDB4YWM5N2JjNTYsIDB4MzA5YmU1YmIsIDB4YjUxNTc3OGMsIDB4NmFkYzUzZDQsCisJMHgyZDIxZjg1MiwgMHg2MjQxYjllMSwgMHhhNTlkNmYxOCwgMHhhOTcyN2VlMywgMHhkMzQ3NGYwYywgMHhkMWQ5MjliZSwKKwkweGYyMzZiYWE1LCAweDRhNzc4YTVmLCAweGRkZjNlZjY2LCAweDkwYWY2M2U1LCAweDliY2JlODljLCAweGY5Y2MxOTcyLAorCTB4YzZkNWZhM2UsIDB4NGZmMGFlZjMsIDB4NTdkODhmYzQsIDB4ZjQ5YmNhNWUsIDB4M2Q5MTU5ZTUsIDB4MmQxZjY1ZTIsCisJMHg3YzY0ZmRjNSwgMHhlNzQ3N2YyZSwgMHhkMWMxNGE0YiwgMHg5M2Y1MjgxZCwgMHhjZmI3ZTU4NywgMHg3N2IyZDQ1YywKKwkweGUyOWJkZTNkLCAweDc3ZGNkZmJmLCAweDlmNmZjZjVlLCAweGQ4YWE2NTc5LCAweGNmYzUxZTRmLCAweDlkM2VlNDg5LAorCTB4N2MzZjY3YmYsIDB4NDc1YWI3YWYsIDB4NzBlNTRhZjYsIDB4MjY2YTY1N2IsIDB4MjhkODZiZTYsIDB4OTBmNDcyZWUsCisJMHgyZmFkZmM4MSwgMHhjNGY5MjRiNywgMHgyMWU1YjI1ZCwgMHhhZTU4ZjcxNCwgMHg2YjhmNDg5MSwgMHhiMGViZWQ5MiwKKwkweGM1ZGNjNGRmLCAweDE4OTk2ZjE0LCAweDU2N2UyMjYxLCAweGE0YmRmMGU4LCAweGZkZjFjN2JjLCAweGM1MGIzNGYyLAorCTB4ZWM3NWIyYmIsIDB4Yzg5ZTM0NjcsIDB4Zjg5MjgyZWYsIDB4YTI0YWJiMmQsIDB4MzIxN2E5N2IsIDB4NTk3YjlkMmIsCisJMHhmMmY3ZTM2MCwgMHgyZGU4ZjcyOSwgMHg0MWNmM2M2MCwgMHg1YmU1YWJhMSwgMHgyODJiYjIyNCwgMHhmYjg2MTEwMCwKKwkweDBiOWUxYzlkLCAweDdiYTFkZTVhLCAweGM0ZWIxNjRmLCAweGJlMmE3ZTNkLCAweDg5YjUxZTFmLCAweGMxMmNiZmU3LAorCTB4ZGVmMGE0MWIsIDB4NThhYmQwMTAsIDB4YjM3ZDllODIsIDB4MDNkYjllMWQsIDB4M2I3MzQ0ODcsIDB4ZTM4ZTEyZGYsCisJMHhhMWFlM2MyZiwgMHhmMGVjZTEzYywgMHhhNGVkMTNiYiwgMHgzZTUxMjdlZiwgMHhmNmVmNWUwMywgMHg5MjFmODhmZCwKKwkweDBjZjliZWEzLCAweDQzNzkzNTQ3LCAweDQ4YWRkZDcwLCAweGIxZTcxNGE3LCAweGIyYmM3OTUzLCAweDllMjU0YTgwLAorCTB4NzYyZmU0YTMsIDB4MTdiODNhMWYsIDB4Y2U1ZDlmYmYsIDB4ZTFiZGU1ZWYsIDB4ZmU4MGJkNzksIDB4ZTcyOWFkY2YsCisJMHhmOTE0NWUxNSwgMHg1M2FhNTE3NSwgMHg3NWZjZjA2MywgMHgyYjQ2YjdkNCwgMHhmYzNiM2ZhZSwgMHg4YWY3OWQxMCwKKwkweDRlMWZlMzEzLCAweGU1MDM3YmNjLCAweDM5ODgyZDhhLCAweGNiZWUxZmIwLCAweDczM2MwMzU0LCAweGM2MTIwMTcwLAorCTB4M2MzNjVkY2QsIDB4NDg3M2QzMzcsIDB4ZjUxZTUzMzIsIDB4Y2I3M2YyNzUsIDB4MjllZmNjM2EsIDB4ZGVlODk3OGYsCisJMHhlYTgwOWNmMCwgMHgzZjE4MzBlYywgMHg4YWM2MzYyNywgMHg4OWJjYmJmMiwgMHhhMGJiNWRjNywgMHhjM2JmNzhlNCwKKwkweDMxODFmNzQ5LCAweDE0ZDczZjdlLCAweDI0OTBiNzgxLCAweDRjZDQ4OWZiLCAweDgyYTlmM2NmLCAweGFlNWJiYTZmLAorCTB4OWJlMWZjZjIsIDB4ZThlYjY1YzcsIDB4YjA2NjEzYmUsIDB4MjFiMWY3MmEsIDB4MTg4ZWE3ZGUsIDB4ODU1OWYxNGEsCisJMHhjMjFiN2E2ZSwgMHg3Y2RkMjNiNywgMHhiY2MzZjQyZSwgMHg2ODM1Mjc3OSwgMHg2Yzk4N2MzZiwgMHgzMGUxMGNmZiwKKwkweGJhY2FmZjNmLCAweGZmNjc1YTMwLCAweGNmMjUzMWYxLCAweGE2M2UzZmRlLCAweGFiZmZlZGM4LCAweDJiZjdmYWZjLAorCTB4NTEzY2E4MmIsIDB4YjZjYTkyYjksIDB4MDdiZDA3NGEsIDB4ZWE3NWYwYmQsIDB4ZmY1NWM1YWQsIDB4OGZmNWYwOGUsCisJMHg2NWJkMzJhYiwgMHhlMDU3ZTkwMCwgMHhmNmM3MWU2ZiwgMHg1ZjAyYTM4YiwgMHg3YWY4YmNhYiwgMHhhMmYwNGI2MiwKKwkweGQ0N2Y2ODBkLCAweDRmZmVlOTY4LCAweDYxNWU3N2NjLCAweDQ5YTAzOTI0LCAweGFhOWUzN2ViLCAweGYxNDhjZGMwLAorCTB4MTg2NjVlZDcsIDB4OTA5ZmYwOGQsIDB4YzE1NmE3MWMsIDB4OTI2OTAxZmIsIDB4ZjIwMGZlY2YsIDB4ZjkwZmFlMDksCisJMHgxM2U0NGIwNCwgMHhmM2RjNTdiNSwgMHg3MGIwMmQwNSwgMHgxYzA3YjcwNiwgMHgwODE4MGY2NCwgMHg4MzU3ZWJhZiwKKwkweDFlZjA5MGZjLCAweGZjOGZiMzI1LCAweDNmMjdlNGI4LCAweDkwNzk3MWMwLCAweGYwYjU3ZGNlLCAweGVmMjUyNmZjLAorCTB4ZDcxNDAyNzMsIDB4NGYyM2Y3NDYsIDB4MGM5ZTVjNWMsIDB4YzJlZDcwMGQsIDB4MGIyZDBjZWYsIDB4YTNlMmJjYTAsCisJMHg0NzVmNGUxYSwgMHhiOWJjZjIzNywgMHhlZmM3OTY3YywgMHhhZTVlYmE2ZiwgMHgxNjNlMjEwNCwgMHhmMzM5ZWMwZiwKKwkweGZjNWZiNDNjLCAweDM1ZDkyMzJiLCAweDY2OTcyM2ViLCAweDI1NzIyN2ZkLCAweGMzYzM4ZDIwLCAweDYzMjU4MTMxLAorCTB4Y2FjZGYyN2UsIDB4ZTA0NWVlN2UsIDB4MzE0ZTY2ZjcsIDB4MmU1YjlmOTEsIDB4N2NiMmEwZWMsIDB4NzJhN2YxMzMsCisJMHhlZDRjYjQzZSwgMHhlZDhmNThlYSwgMHhmZjNjNGQ0MiwgMHhiZWU4Y2Q0MywgMHhjMWFhNTM5NiwgMHhjMTU5OWVmYywKKwkweGM0YTZhNzY3LCAweDU4NjA1ZTUxLCAweGE4ODdiZjE1LCAweGVlODk2ZWU3LCAweGM4MTQ5ZTAzLCAweDU2Yzg1N2VmLAorCTB4MGNiYzk1ZTUsIDB4Yjk1NmRmZWYsIDB4NTRjMWVmYzUsIDB4MTIyYmY4ZDMsIDB4NzNkMTVjNzksIDB4NmJkYjk1MWUsCisJMHhiYTI2Yjk1MSwgMHhiYWY2NDEzZiwgMHhjNjMxYTkzZiwgMHgzOWY0NWVlYiwgMHg2ZWNmYmVmYywgMHg0ZGZmNzJhNywKKwkweGEwODdiY2RlLCAweDdlMWNjZDVmLCAweGIzMzc2NmNmLCAweDAzZmI4MTNjLCAweDcxMDA4MjhlLCAweGI1ZTgxMjdmLAorCTB4OTlmZGNmMGMsIDB4ZWRjOWZlMDcsIDB4MTU0MjllYmMsIDB4MTlhZDUzOWQsIDB4ZWI4ZDU5NjUsIDB4NDJjYzc5YWEsCisJMHgyN2Y3M2RlZiwgMHhlOGRjZjg3MSwgMHg4MmRiOWMzZSwgMHg4MzY5ZjllYywgMHhlNzE3YmZhZSwgMHhjZTZmMjkxOSwKKwkweDY2OWZlYzEyLCAweGUzNGZmN2U0LCAweGVlZDA4ZGU1LCAweDRmZTE5Y2U4LCAweDBlMzg0MGVjLCAweDNkYTI2NGIxLAorCTB4NzA2YzY4YmUsIDB4MTFmNDA0OTYsIDB4MDZmMzA2YTUsIDB4ZDQ2MzBmZTgsIDB4NDZkMDVmNzQsIDB4NzFmMzEzYjUsCisJMHg3ZGM1YTg4NywgMHhlZjIxNmEwMSwgMHhkMTgwYzg2MSwgMHg4NWE2ZGVkNCwgMHg5NmE3YzJmYSwgMHhhYmVhMWIzMSwKKwkweGYzZjc0NjI4LCAweGZlZjllYmM2LCAweDU4NjNmNDM4LCAweDQ2NDZiODYyLCAweDdjNzhjODNkLCAweDNlMDBlMTY4LAorCTB4NDY3MGMyZmUsIDB4NDVhNWNmYmYsIDB4M2JmMjUwMTYsIDB4MjY3N2YwYjMsIDB4YjBiYmM1MTgsIDB4ZWE2OGQwN2YsCisJMHhmZWYxNTBlZiwgMHhjMzk0MzUzNiwgMHg1MjNkZjhlMiwgMHhiNDc0ZWIzZCwgMHhmMWYwYmEyZiwgMHhhNzFmYTRhMSwKKwkweDc3M2RmMDRkLCAweGU3OGQzMjdmLCAweGI4ZTUyODJkLCAweDlmMGY4Yjc0LCAweDQyOWI1YTJmLCAweGQ2OGI4YmZiLAorCTB4M2I0NTI5Y2UsIDB4NDgxMGRlYzQsIDB4ZWYzYjAyZTcsIDB4ZWYwYmE5N2IsIDB4OWQ5NjJmNzEsIDB4ZjU4MjNmNGIsCisJMHg1N2I3NGVjYywgMHg0YTJmN2MyMywgMHhhMWZiZjk5NiwgMHhkZmZiYTJjMSwgMHg4YzllNjJkMiwgMHhmMmUzMzVkZCwKKwkweDc3NGU1MGViLCAweGY3ODEzZGVjLCAweDRmYmY0ZGU0LCAweDE5ZDNmZWE2LCAweGFkOWE4ZmJmLCAweGRlNmNmN2U1LAorCTB4OGVhMmI4ZWQsIDB4MWVlZmYxODAsIDB4YmNiYzUxMjcsIDB4NDY4ZTYwYzMsIDB4YzBhMTZlZmIsIDB4NWM2OWYzZDcsCisJMHgzZjVjMmY3ZSwgMHhlYmZkMTEzNCwgMHhiZGRmNzFiYiwgMHg1YTczM2QxZiwgMHgwZmRlNTNiNCwgMHhmYzdjYzg5YiwKKwkweGZiYzU0ZjliLCAweGZlZjhkMzRmLCAweGZlMzhiMGZjLCAweGFlODM3ZjNlLCAweDRiMDgyZTIzLCAweDRhMDkzYjhkLAorCTB4NGVjMjc1OGQsIDB4NThiNGNmNWMsIDB4ZTExNWIzOTYsIDB4Mzc4ZjI4ZjgsIDB4OWI5ODE4NzYsIDB4OGQzZWIxZTgsCisJMHgzZDY3NmFlMCwgMHgzYWUzOGYxZCwgMHgzYWQwNDZlYSwgMHhhMzliYzYzYSwgMHg3MTBlNWVlOSwgMHgzMzEyZWI3ZiwKKwkweGUzMWQ0Zjk3LCAweDk4Y2U3N2Y5LCAweGE5MjE0ZGRiLCAweDFlZjA3ZjljLCAweGE1MDJjNWQ3LCAweDNkNTY1NzY3LAorCTB4NWJiNDFiNzksIDB4ZTc0ZjRhYmMsIDB4N2QzYzk3MzUsIDB4OGIyYmY5MmYsIDB4YTczYTY0NmIsIDB4ZGVmYjM2YzksCisJMHhjNGZhMGFlMywgMHhiZmYzZjM4ZCwgMHhkZWZmZDU4ZiwgMHhkMjM5YzQ1NSwgMHg4OTY2ZmU0MSwgMHg5NTU4NjhlOCwKKwkweGYxZmI4YjU1LCAweDRlYzA1YjNkLCAweDQ2ZjlmNzgwLCAweDA1ZGEzYzc3LCAweDc1ODM1NmY5LCAweGJkY2ZkNDhkLAorCTB4ZGMwMWRmYWMsIDB4NmI5ZWYwYjIsIDB4Y2Y5M2YxNDYsIDB4ZTAxZmVkZDMsIDB4MmY1NjE3NzcsIDB4MDM1MDdiYTQsCisJMHgxNzE0ZWQ1MywgMHgyMTdlMDYxYiwgMHg0ODQxM2ZkYSwgMHg2OWQ3MDAzZiwgMHg3ZmJhNWUwMCwgMHg4OTFlZGQ0MiwKKwkweDM0ZmFjZmZlLCAweDljYzQzY2YxLCAweDM0YmEyNDY4LCAweDBlZTdlNDMwLCAweGU3MTEzOThkLCAweGEwY2ViMWQ3LAorCTB4NmQzMTk5NDIsIDB4ZTA0ZmE3MGQsIDB4MzQ3YWJkMWIsIDB4MDE2MDMzOWUsIDB4NGJiZmJmYzgsIDB4NmYzOTc0ZTMsCisJMHgxNmFmM2FiNSwgMHg2ZDQwNDNlYSwgMHg2ZTkwNDI5YiwgMHg0ZTdkMTE0NiwgMHg1MGViZGFiNiwgMHgxOGY1N2RhZiwKKwkweDczNzI4YjFiLCAweDdjMmRlNmYxLCAweDRjZmYwMjVlLCAweDM0ZTc0NmRkLCAweDE5OGZhYWJmLCAweDBhMDY3OThkLAorCTB4NGViNjRjM2QsIDB4NGRlNjliMzgsIDB4ODQ0OWY3MDcsIDB4MzFjZjU4N2YsIDB4ZWIxYTM3ZDQsIDB4MmY1YzRlYTIsCisJMHhmNDhjM2YzYywgMHg5YjgyNmQzMSwgMHhlNWIyMTJmMiwgMHhiY2ZkZmExMiwgMHhmNzQ2MDhkZSwgMHhjZTMyZjRmMiwKKwkweGQ0MWJiZGFmLCAweDM5MTQ2N2E0LCAweGEwMDNjOGExLCAweGQzOWUxYjA3LCAweDdmZmRmMDU1LCAweGYyMjg3ZjY1LAorCTB4NzI0M2UwMDYsIDB4OGExYjkxNDUsIDB4NGJlODUxN2MsIDB4NzRmZTMzOTEsIDB4N2NjMDFmMzUsIDB4NGZlYTY4ZTcsCisJMHg2MzkxNGNmMiwgMHg2OGQ1MGViOCwgMHhmMDUxN2M4ZiwgMHg1ZTMwZDlhYywgMHg4MTU3NzE0NSwgMHhkMmY5NmNlNywKKwkweDg3MDg4MzllLCAweDJkZDkyMzAyLCAweGVhMzE3MDdkLCAweDVhZDEyZTA5LCAweGNmZjc4NGQ2LCAweGI3OTQzZDU2LAorCTB4ZTNkMjI5NzcsIDB4ZDA2MzczMmYsIDB4ZTA1Yjk4ZmUsIDB4YTdmMjllN2IsIDB4MjhlN2JlMTUsIDB4M2RmNGFjMTcsCisJMHhlNTZmMzk0NywgMHhmYzYyOGU5ZiwgMHgwZmIwMGQ4OSwgMHg5Y2ZjMDc0YiwgMHgxN2I5ZTVmOSwgMHhlZmVhODYzZSwKKwkweDgxMzE3OTdlLCAweGVhOTdkOWZiLCAweGFlZWZjNTlmLCAweDY4ZjMxMDBhLCAweGE1NWFmM2U3LCAweDRjMzFiZDI1LAorCTB4MGZmODgxZDgsIDB4NzE4OGIyZjEsIDB4MTMxODVkM2UsIDB4ZGZmNTAyN2MsIDB4MDkzZjEwNWYsIDB4ZjFjMWZmYjgsCisJMHg2N2UwNDY3MywgMHhlODBmYzIxMSwgMHhhZTNhZTE3ZSwgMHgxMjFjM2E5NywgMHhhZDE2MjNjNSwgMHhjMWJhN2MxNSwKKwkweGU3ZjQ3Y2Y3LCAweDMwM2RhYzkxLCAweGZhOGU3M2NlLCAweGEzMTJjN2YzLCAweDczOTVhZjkxLCAweGZjMGRmNmQzLAorCTB4ZjJiNGI1NWMsIDB4NzYyZmQ5MTgsIDB4ODcyZDdlZTUsIDB4MmI1YWZkZGYsIDB4ZWJmOWY5NWIsIDB4Y2Q3M2RmNzYsCisJMHgyZDM2MTk4MSwgMHhmNzE4MmJjNSwgMHgxZjI1MTZhMywgMHhkNTM2ZjllMSwgMHhiYmY3MTk5MiwgMHhmY2YzYzVmMywKKwkweGI5Y2Y5MjBkLCAweDFlNzQ5Y2I5LCAweGE2OThkYTE3LCAweGEzYjYzYzI2LCAweGNhZjE0MjlkLCAweDBhMmZkMjZhLAorCTB4YTBkYzgyOWQsIDB4ZDVmOTdjNzMsIDB4YmQ0YmI0YTMsIDB4ZjEyMmU4ZTQsIDB4Y2FiMjcxN2MsIDB4MzZkNzc3ZTcsCisJMHhlYmZkZjFhNiwgMHgxODFhNjQ3NiwgMHhhYzcyNTM3NywgMHgzYmM5MDk3NiwgMHg5NTQ3YzUwYiwgMHg0NzkyOGJmNiwKKwkweGMxYjhjN2FmLCAweGViZjhjZGEyLCAweDMzZmU5ZTQ3LCAweDM2N2NmOWQzLCAweGRjOTRmOThhLCAweGU1ZjdjZTQwLAorCTB4Yjc5ZmUxNTUsIDB4OWZjOWJjZDMsIDB4Zjc3NTdhMmUsIDB4MDMzYmY4YWIsIDB4OTFkNTdmNDUsIDB4MjkxYTI5OWUsCisJMHg5ZDUzZDlmNiwgMHgzZWQyZjc1OSwgMHg1NWQ3M2YzMiwgMHg2OTNkZjAyNiwgMHhlODQxNjdmNywgMHhmMjM3OTQyNywKKwkweGVjYTFiMmZiLCAweDU1NmNiMmMwLCAweDY1ZmJmOTAxLCAweDkwODdlMDU2LCAweGRmYmZmM2ViLCAweDQxYWZmNTdlLAorCTB4ODhlY2JlM2MsIDB4NDdmZmJmMTIsIDB4ZDY1NTYzYmYsIDB4MWZjNTA1ZjgsIDB4NjQ3NzJlZDAsIDB4NGY5NDc4ZDAsCisJMHg1Y2JmZGZlZSwgMHhmYjg4MmVmYSwgMHg5NzA0ZWRiMSwgMHg4NGRmNDNlYywgMHg1ZmY2M2NkMSwgMHhmOTc5YjhhNSwKKwkweGY2NjE3NWExLCAweGRkN2RkNjdlLCAweGNmMTEwMTM5LCAweDJhZjgxNzI4LCAweGUwYWY5YjY3LCAweGFhZjk1YWZlLAorCTB4YzgyY2YzZGMsIDB4YmY3ZmJlMzMsIDB4Y2UyMmU5NzUsIDB4OGRiYjFiNzAsIDB4NGNkNWQ2ZjIsIDB4NWNjZjdkZTUsCisJMHgwN2UxMzNhZiwgMHhiN2NiMjVmMywgMHhiZDlkNzNmMiwgMHhkYzAwY2I2YSwgMHhlNzE2ZWI5NywgMHgxZGRiZmNiNCwKKwkweGMzN2VlNzRmLCAweDBjMjdlMDY1LCAweGM4Mzc3NDQ0LCAweGRkZDNjZmI0LCAweDY1NzhlM2MwLCAweGUyYjU0ZjBkLAorCTB4NzAzMmQ4ZjksIDB4OTU5ZDkxOWMsIDB4OGQ2NTQ0NzMsIDB4ZWI3YmQzMzIsIDB4MWE0N2NjMzUsIDB4MTY3OWUzNzgsCisJMHhmZGQxMzZlZiwgMHhjOTJlODUzNCwgMHhlOWYzMGY1NiwgMHg5MDY5N2YwNSwgMHgxNjVlN2NkNywgMHg3M2FjNTU3NCwKKwkweGNhZjhlMTY1LCAweDcyMTA1ZmZjLCAweGQ4NTc2OTRjLCAweGI3OWQxNGYyLCAweDY0NWQ3Njg1LCAweDkwM2VmYzlmLAorCTB4OWViMmZkZjEsIDB4Y2VjZjM4MTMsIDB4N2Y2ODYzNmQsIDB4YjdiNWQwYWIsIDB4MGQ4ZmUyOGMsIDB4NzJiNzk0ODEsCisJMHg3ZTdiZTM1MSwgMHhkZWY4OWY3YiwgMHg2NzZlNzRiZSwgMHgyNGRlNjI3NCwgMHhhNjU1N2ZmNiwgMHgxM2NlMTliOCwKKwkweGU0YTJmMWY5LCAweDJjZDFjZjliLCAweDczYTczNWZhLCAweDNhN2U2NTNiLCAweDdkYTUwM2U3LCAweDI4MjNhYmExLAorCTB4NmY5ZmRhMWUsIDB4NmY5NTEzZmEsIDB4NmY3YzdiNjEsIDB4YmQ0NzRiNmMsIDB4OTAzMWJlNzksIDB4NmY5ZWQzY2UsCisJMHgwZGU3M2U3YywgMHhkNzY1ZGVmOCwgMHg4YmM5NTBmOCwgMHhmM2E3NGViZiwgMHg2ZGU1ZTVmOCwgMHg3M2IwNWNlMiwKKwkweGUyNjczOGEwLCAweDM2NzRmNWEyLCAweDVmZTg0OTQ0LCAweGFmZmM4YTk2LCAweDQxN2RjNmNlLCAweGM3NWZlMjJhLAorCTB4NjI3YmY2N2YsIDB4ZWZiYmFmYjMsIDB4MjY0Yzc3YWMsIDB4Zjc2Y2JmOWUsIDB4N2ZlY2VmYjksIDB4ZjEzMmZjNmIsCisJMHgxM2NhYThkYywgMHhiN2JmZTFkZiwgMHg1ZGRmOTRjYSwgMHg0YTc2ZjMzMSwgMHg0OGZlNzYzYywgMHgwZTc4MDNjYiwKKwkweDdmYzdiZDk3LCAweGZlZWMwZDk3LCAweDlhM2ZkMTY3LCAweGU0ODFjN2ZmLCAweGFkZWZlMjdmLCAweGY3ZWJmZDYwLAorCTB4ZmNkOWJlZjksIDB4NDRhZTQyMzEsIDB4NGNiZTUzYjQsIDB4MWZiNzBjNDcsIDB4Y2M0ODM2NGEsIDB4MDYyYjcwMDYsCisJMHg2ODAwNzJmYSwgMHhiMzMyOWM0YiwgMHgyMzFkZmRlMywgMHgyNzcyZmVmOSwgMHgyNDc2YmZkMCwgMHg2N2NhMGJjOSwKKwkweDFkZmUwMzM5LCAweDZiYzEwZWZkLCAweDI0YjkzZjdjLCAweGU3ODg5ZGQ2LCAweDVlNDUzYjAzLCAweDNiODg0OTQxLAorCTB4N2I4YzIwNzEsIDB4Yzk0OWQwNDksIDB4YjdhMjc3NGMsIDB4ZGRiMjUzN2YsIDB4OTczNTc5NGQsIDB4YmUxZDNlNDQsCisJMHhjOTVlNzhjNywgMHgyM2FlZGU2OCwgMHhlNzQ1ZGNjNiwgMHgxODliZjYzOCwgMHg4M2FhYWJkYSwgMHhkMmMzYTIyNiwKKwkweGJkZGIwZDk3LCAweDQ2OTlkNWNmLCAweDkyZmZmYjcyLCAweGVlMWJkZjk2LCAweDUzZTdjMWQ4LCAweGUzNGQ1NDE4LAorCTB4NWRmNDEyNWMsIDB4ZjM0ZDUwMTgsIDB4MjljZTIzM2IsIDB4YmQ3OTZhMTcsIDB4YmVlOGMzNDMsIDB4ZmM1ZDllZmUsCisJMHg5MThiYTEzZSwgMHgzYmYwMDc2ZCwgMHg1MGE1NzcxNywgMHg4YzQ3NjlkZSwgMHhiZDEzNjk3MywgMHg0NTI2NzllNywKKwkweDM4ZGNlOGFmLCAweDRjYmIwYmFmLCAweGY3MjgyZTc0LCAweDlmNjk1Yjk3LCAweDI3NGViN2IxLCAweGMyZTFkYzYxLAorCTB4MWVlNzQ2MjAsIDB4MjIwZmQ0MmUsIDB4YjI0MTdkN2QsIDB4YzJmMzdjNTAsIDB4YmM2OTAzYmIsIDB4NzQ5NWNhYTIsCisJMHhjNDA4YTViZSwgMHg1MDlkZGEwNCwgMHg3NmJkYTJlNiwgMHg2OGI5ZmVhMSwgMHg2ZmE4NWZlNCwgMHg1NTlkYmFjMCwKKwkweGYyMzlmZmNmLCAweGJiZmU0ZWU5LCAweGY5NWYxNzEwLCAweGJlZjc4YTdiLCAweGVmZmE1MjhmLCAweDU0ZjgyODlmLAorCTB4ZTQ4ZGE3ZGUsIDB4OTIzNjk4ZmMsIDB4OTFhOGYzZjMsIDB4M2JkZTdlNjYsIDB4MmM0Y2Y1ZDAsIDB4MzdmMzhmYWQsCisJMHgwMmZjOTljMCwgMHhhZmJhMjdlMCwgMHgzOWFiOGNlNywgMHg4YTcxODI0YywgMHhhODZjOWEwZSwgMHhlZTM0M2JkZiwKKwkweDBlMDllN2M0LCAweDc4NzdlMjgxLCAweDE3ODVmOTE4LCAweGJmMjQwYzc2LCAweDFhNjhhYzFjLCAweDM0OGVjMmU3LAorCTB4ZjI1MmQzY2EsIDB4YWRhMWE2NGQsIDB4MjM0Yzc4NDYsIDB4ZGJjYjY2ZjgsIDB4ZTVmZWU5ZDIsIDB4YzdjYTQwYmEsCisJMHgzNmZjN2EyOSwgMHhjODlmZTUxNSwgMHg3YTJlZWVkYywgMHg1MTM0ZjE3NSwgMHg0ZDdlZTFiNywgMHhhMTdmY2ZkMSwKKwkweDkzZTI4YmMwLCAweDg5Njk1ZTRhLCAweDhmYTVhMzkwLCAweGYzMDAzMWRmLCAweDY1MWZkOTcwLCAweGFhYmI5M2NhLAorCTB4ZmU4Zjc5ZTYsIDB4NDhlNWY5NzAsIDB4YmMwZjQ3MjEsIDB4MDI1YjdjNDAsIDB4YzNiZjhlNzQsIDB4YzJmMjJjNTQsCisJMHg3MWUxNWY4YiwgMHg3N2Y1ZTI5NiwgMHhmMWYyNGIzYywgMHhkZTYxODY4NCwgMHg1M2Q3MjVlZiwgMHgyZjcwZGU0MSwKKwkweDk2ZTVjOTE4LCAweGRhOTViZmE3LCAweGRlN2I0MzE3LCAweDlhMjBiZGZmLCAweGU1MGQwZWNmLCAweGViZTNmYjI5LAorCTB4MjJiZmZiOTYsIDB4OGJmZDViZmYsIDB4ZjQwNzYwNWMsIDB4OTU3YzFmYjMsIDB4NTdmMjNkYjUsIDB4MDYwZDAzOTQsCisJMHhmMjllODNhYiwgMHg4ZDRlYmRmYywgMHhkZjNmMjk2YiwgMHhkMGY5MjA2MCwgMHhhZjdlMmMxOSwgMHgxMWU3OTJiNSwKKwkweGZhOWZhZjE0LCAweDM4NTdjYTZiLCAweDY5OWQyZjc1LCAweDdmZWNlNjVhLCAweGE0NzRhZWJmLCAweDBmOGJlZjg2LAorCTB4M2U0MDBlYjQsIDB4ZTA3YzA1MmMsIDB4M2ExZjgwNzgsIDB4YThmZWNlNWYsIDB4ZWJmZWZlYTEsIDB4Y2I5MjNhOTksCisJMHhkYzNlM2VmNSwgMHgzYmExZjNjMywgMHg3NGJjNzMwNywgMHg3YTQ0OWFiZSwgMHhkMzk4MjNhNywgMHhmYzk3Y2MzNSwKKwkweDVlNjBjZWQ0LCAweGU2MDRhMjUyLCAweDNkMzk5OGRmLCAweDkxNzc4ZTc0LCAweGVkMjlkZGZmLCAweGMzNDNiMmE1LAorCTB4MTRhZDE1ZmIsIDB4ZTZlMjJiYmYsIDB4NDgyNTIzZjksIDB4ZmY3ODcxYjMsIDB4YjQzNmU2Y2YsIDB4NjcxZTUwM2IsCisJMHhhZGQyYTY4ZCwgMHgxZWZlYjkwYiwgMHhmMjYzYTA3NiwgMHg3ZTBhOGVlZiwgMHhlODcwZjI1MiwgMHhhZTI4MDE3NywKKwkweDNjYTJkMmU5LCAweGFmYmIwYmI1LCAweGRmZmFlMWE0LCAweGVmZTdlMDhiLCAweGFlNDNjYTI1LCAweGZiMjkyOTFiLAorCTB4NTQwNzk0ZWMsIDB4MmIzYzI1Y2MsIDB4OWZiNDQ4NzYsIDB4YTFmNmJjNWYsIDB4ZTJmYmE0NDIsIDB4OTE3MzJkOGEsCisJMHgxNDc1OTQxZiwgMHhmYTJlNTlhYiwgMHg0YzkyMWQ0OSwgMHg3ZWJmMDFmMywgMHhlYmQ0Y2NjMSwgMHhmN2MwYTdiZiwKKwkweDE5N2NjYWY3LCAweDNkMjdjZmRmLCAweDZmYjZiYzAzLCAweDUzYjE0NWE0LCAweDU3OGMzNTU5LCAweDRjZGE1NmIyLAorCTB4ZmM1MTg5ZGYsIDB4MDUzZWJlNGUsIDB4ODNlZmI4NGUsIDB4M2M0YThjZjksIDB4NTdlYjQ2ZTAsIDB4ZjlhMzc5ZTYsCisJMHg3NWU0MjNiYywgMHhkN2U1OGM0NywgMHgxZmRmMTBlMywgMHhhZTRmMjRjOCwgMHg0MDY2Mzc3ZSwgMHg2ZGQ4MGZjOCwKKwkweGNhYTE0YmY0LCAweDBmZmYzMDc4LCAweDM4YzExNzUxLCAweDU2NzkwYWNmLCAweDc5YzNmMzBjLCAweGZkZjM2ZTI2LAorCTB4M2FlNDgwN2QsIDB4MDZmMGZhZGYsIDB4YTM2YTdhZGYsIDB4YzViZDNkNmYsIDB4ZGI3ZDZlYjcsIDB4ZGY4MmRlYjcsCisJMHgwOWMwZjRjZCwgMHgwNzNjNjFmZCwgMHg4NzljNTNiMSwgMHhjZjE4N2Y0MCwgMHg4YzNmYTEzMywgMHhiMTg3ZjQ3NSwKKwkweDlmMTg3ZjQ0LCAweDc1OGMzZmEzLCAweDhlYjE4N2Y0LCAweDg5MjViMGZlLCAweGEyNThjM2ZiLCAweDY1Y2Y4YzNmLAorCTB4NDk1Mzg3MmIsIDB4MDIzZjhmMmQsIDB4MmZiNDZjMWUsIDB4NWRmOTQ3M2YsIDB4ZDEwYmYwMGEsIDB4NDIxYzJkMWUsCisJMHg3Y2M2MWQ3NiwgMHg3ZTk1NzdlOSwgMHhkMjI5NmQ3OSwgMHhmZDkzMGNkMSwgMHhjYzRjYzhkMiwgMHgxZjViNmFjNywKKwkweGYyZmRlZDg5LCAweDFiNDY0YTk0LCAweDY4NmYxODhjLCAweDNkN2U3NzVmLCAweDI2MjkyMTlhLCAweGFmNmMxNWZiLAorCTB4YWU5NTJmZTQsIDB4NGY3ZThiN2MsIDB4ZTViNTdkYWYsIDB4NzhlMTNmOGYsIDB4ZjI4N2I4YTIsIDB4Nzg0NTRmN2IsCisJMHg3MTRjYmU0ZiwgMHhmOGEzM2QyZSwgMHhkZmRmNTU5ZSwgMHhmOWZlZGMzZCwgMHg2NzlhYjc0NiwgMHg1ODAxZmZmNCwKKwkweDAwZGI4YmJiLCAweDAwMDBkYjhiLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjY2RmZjAwLCAweGQ1OTQ3NDBiLAorCTB4ZTZmZWVmYmQsIDB4NDkzMjQ5OTUsIDB4NDFlNDIxMjYsIDB4MjFlNGNjMjAsIDB4NDkzODkzMTEsIDB4NDcxMTRiYzgsCisJMHhhOGQ1MzA0OCwgMHg2ODRkNDNjMywgMHg0MDkyMTM4YywgMHhhM2MzMDQ4MCwgMHg3Yjk2YzRlYiwgMHhhNDQwMTgzMywKKwkweDUxYjc4ZDcwLCAweGExM2EzOTUxLCAweGU4NWRlOTRhLCAweGI2OTUwYTA5LCAweDEwMDY3MzljLCAweDRlNmQ4YWM1LAorCTB4YjZhYmFkNWIsIDB4YTkwNzg4MzgsIDB4NjgzNDk2ODcsIDB4NjllZGVjNTcsIDB4ZGZmN2ZmZWYsIDB4YmVmOTk3ZGYsCisJMHhiYzdiNTI0OSwgMHhhY2RkNzdhYiwgMHg3YmZlN2JhNSwgMHhmZTNmNmZlZiwgMHhlZmZmZmRlZiwgMHhmYzQyMTA4ZCwKKwkweGZiNWJmZTg1LCAweGRhZjA4YzdjLCAweDg1ZmRmZjA1LCAweDQ0MmZkZmZmLCAweDU5Y2YxMGI5LCAweDBlOWQzMjQ3LAorCTB4ZDc3YzJlMjEsIDB4NGY1YzViYmUsIDB4MTg2OGFjNjUsIDB4MDZlNmE0MmEsIDB4MDlhNDQ5YmIsIDB4YjhkZjExYjEsCisJMHg1MzM1YTg4NCwgMHhlZjA0NzlhNywgMHgyOGM3ZjY1MSwgMHhhNGYzNGM0MiwgMHg4ODVkMzEwOCwgMHg0OWY5MzNkMSwKKwkweDA1ZmZmYTgyLCAweDJjNGYzNzdmLCAweGE4Y2FjNzViLCAweGFkZGUwZWIzLCAweDZjY2YzMDk4LCAweDU0OGFmMDliLAorCTB4NzM1ZGZiMWEsIDB4NGYxYTA1ZjAsIDB4YTI0ZDc5ZDQsIDB4ZWE0ZDg4NDIsIDB4MzVlY2U3MWEsIDB4NTkxMDUxMDksCisJMHgzOGMxYjVlZiwgMHhiZmViNzQyMSwgMHgwMThhNjBlZSwgMHg2MTlhMWEyZSwgMHhiMWZkN2ZlOCwgMHg0OTdiNDMxYywKKwkweGJkYTFhZTY4LCAweDEzZDZmOTZkLCAweDk2MjE0NGU2LCAweGY0MzMyZWVkLCAweGJjMTE2YWJiLCAweGE3Y2ZhYmNmLAorCTB4ZWE2ZTAzMDcsIDB4ZjBkMWJiZTcsIDB4M2FlYTEwOWQsIDB4OTM2ZWIyOWQsIDB4YzNmY2U0NzUsIDB4ZDFkMzdmZDQsCisJMHhlMzAwNGY0YywgMHgyZjBiMzVlZSwgMHg4ZDAzYjdlZCwgMHgyYjY0NDJhNSwgMHg0ZjE4MWQ4MSwgMHgxNzllMmEwYywKKwkweDZhNTZiYzY4LCAweGU4YmI1M2Y3LCAweDlkMzhmM2IxLCAweDJjM2I3ZTJhLCAweDJkYTRlMDIyLCAweDliZjM0NDdkLAorCTB4ZDFlNzdmYTksIDB4YzI1NmUwZjQsIDB4YzljNjFmNGIsIDB4ZjBhNzc2YTQsIDB4NmI3OGQzMjYsIDB4ODcxNzBlZTYsCisJMHg2ZjM1OWM2OCwgMHhkMDQyYmI3ZSwgMHg4M2NjYmIxNiwgMHgyMTVjY2VkOSwgMHgwM2MxMmIzNiwgMHg5ZjEwYjM0ZSwKKwkweGFiNGUxY2E0LCAweGQ5ODc3NmE2LCAweGY0NDNjOGJmLCAweGZjYTY3Y2I5LCAweGU3ODQ1NWM3LCAweDFlY2M4N2NiLAorCTB4MGQ2ZDkzY2MsIDB4MjkxMjk1YTUsIDB4YWIyNjgzODUsIDB4MDM4Y2VjMDYsIDB4Y2RmYjA3ZmQsIDB4NjNhMjQxNzUsCisJMHg5Y2MzYWQxNiwgMHhjMThmZTExMiwgMHg3OTcxNjlmZSwgMHgzNWJlYzg4ZSwgMHgwYjZkOTg3ZSwgMHg3ZDg0ZGNjZCwKKwkweDc5ZWIxY2JkLCAweDBhM2Y4MDQxLCAweDlkYmM2MmVmLCAweDhmZTAyYjMxLCAweDgwOTQ1YjhlLCAweDNlYzhmYWVkLAorCTB4NzdlNTNhMzcsIDB4ZWEzZTdlZGEsIDB4N2MwNjMyYTUsIDB4ZGIzZTY1ZTYsIDB4YmU1ZmI2YWMsIDB4OGJiMTQ0ZjYsCisJMHg3YmQ5ZDFmNiwgMHgyYzRjZGIyYywgMHhlODc0Y2ViMCwgMHgwMTk1MjY0MCwgMHhmYjE5YmZiYiwgMHhmZmNjMThlOSwKKwkweDY3OWE3Y2M1LCAweDYxNjYzYmVkLCAweDNlZmZmZWE2LCAweDlhYjEyOGIwLCAweDhiYzlmN2Y2LCAweGMxM2Q0ZjU2LAorCTB4ZGI3ZmY3MGYsIDB4YWM3ZGE2MTYsIDB4MWU2ZDA0YjUsIDB4M2JiZTNiMmEsIDB4Nzk1MmYzNjgsIDB4YWU0MWMxZWIsCisJMHg2NWIwNzU1ZiwgMHhiNTc1ZjgzMSwgMHg3ZDgxZGVlOCwgMHhiZjEyYjI1ZiwgMHhiMWQxZjBlYiwgMHhhNGU3ZDk1MCwKKwkweDMxZWViZjc1LCAweGM0Nzc3ZjMxLCAweDZiZGEzZjA5LCAweGE3NGZmM2NkLCAweDk1MDc3ZjYyLCAweGI5N2IyYzEyLAorCTB4ODVhZGIwZWYsIDB4N2VkNDdiZWEsIDB4N2EzMmYyZDEsIDB4NzRlZDU5NzYsIDB4YTQzYTNmZWEsIDB4OTJhN2RlMzAsCisJMHhkNzQzYmI4ZiwgMHgxYjJjN2NiMiwgMHg3Y2I5NzM3MywgMHg4ODIxM2FlYywgMHhiZTExZGYyNSwgMHhhNTc0NDEyMiwKKwkweDNlZjAxYWI1LCAweGZjY2NkNjdhLCAweDFjZGM3YTM5LCAweDg3NDlmNDE0LCAweDBjYmE5NDJkLCAweDJiMTdmODc0LAorCTB4Zjg4YmExZDMsIDB4YTRmODhhYTcsIDB4NDBkZjdlOGIsIDB4ZDliZTZmYTUsIDB4ZDQwZmJmYzAsIDB4YmRmODFiYzQsCisJMHg4OGU0ZTg0MSwgMHhjYzQ3YmJjNiwgMHhlYmNiYzAzMCwgMHhlZmZkMGQ3MywgMHg5NDVkN2U1ZCwgMHhkYTQ2OTQzYywKKwkweDBkZmZmOGNkLCAweGJiODI3NjkxLCAweDRhNWMwNGI2LCAweGM2ODVhMDIyLCAweDMwYjcyYTdhLCAweGY4NjZkZDlmLAorCTB4OGQyYzRiYmUsIDB4M2Y5ZjAzZjQsIDB4Njc4YzZmZmYsIDB4NGI2ZDg2MjEsIDB4MjZiZjY4OGIsIDB4YWZkMTA3YTIsCisJMHhhZDVlN2ZjMSwgMHg2ZDNkNzMwZiwgMHhiMzk3MjBjNCwgMHg5OGJmM2Q3MywgMHhmMjMxN2M0ZiwgMHg0N2VjNTViNiwKKwkweGRmMDg5ZmM1LCAweDdmNDZlODE1LCAweDIwZTkxM2I5LCAweDlkNWExMTA0LCAweGIxZDY4OTM3LCAweGE5YzkwOGZlLAorCTB4NjE4YTVmNDEsIDB4MDZlYjE3ZDAsIDB4NzRiNmJhMWQsIDB4MmE2MjhiZDQsIDB4YjQwNTliZTksIDB4YjBjMGFlOGYsCisJMHhmOGMxZGJhZCwgMHg0YTExNjRiNywgMHhhMjJiZjdkNiwgMHhkYmZiODUyNywgMHhiYzI0NTJiMywgMHhhYzQ3ZjUwNSwKKwkweGY4NzU4NjFmLCAweDY4NjM3OGMzLCAweDgxNmU2MzNmLCAweGFmYjc0NGJjLCAweGFjMGI3ZGE3LCAweDNkZmVlYzQ3LAorCTB4MmRmYWQ1ZjQsIDB4ZGU2MzFmNzUsIDB4ZWEzY2RhZjUsIDB4YWU5ZjFhZjgsIDB4ZWJkZjRiZGUsIDB4OWUzZDFkZDYsCisJMHg3MmM1YzRhMywgMHhlMWUwZjZiZCwgMHg3ZTEwNjdkNywgMHg0YjkyZjk5NiwgMHg0MzlkNDcyMCwgMHg4NTJkYWM0YiwKKwkweGQzNGRmOTEzLCAweDlhMGY1N2ZiLCAweGYwNmUzMTgzLCAweGI3ZTYyOWRmLCAweDhmNTY4M2QxLCAweGIyZjAxYmY4LAorCTB4MGYxODJiZGUsIDB4OGFiODdjZDEsIDB4ZjlhNzY1ZjYsIDB4M2M1MTFkNTcsIDB4MDNmNjQ1NDEsIDB4ZjE0NmQ2N2UsCisJMHg5YWNkYzYyNywgMHhiZTFhNmYwNCwgMHhkNTE3ZjFjNiwgMHg2ODNmMWFiZSwgMHgyOThmYWI5ZCwgMHgwOWNiZTg0MSwKKwkweGE3YzY4OTc4LCAweDNmMmFjZjNhLCAweDBhZWI5MGZkLCAweGM2YTJiYWYyLCAweGYyZDE1NTE1LCAweGZlODZjOWI4LAorCTB4ZTExNGZiYTMsIDB4MWYxOGJlNTQsIDB4MmM2Y2M3NGIsIDB4ZTU3M2IzZGYsIDB4MmE4ZTQ3ZmUsIDB4ZGRmNGZkOWUsCisJMHhhZTE2NjMzZCwgMHgxZjFmZTcxZiwgMHhmMjE0YWRlMSwgMHg5MjFmMDEzNywgMHg3ZTUyN2M5ZiwgMHhlMzRiMWVlZSwKKwkweDdjNWVmZWVmLCAweDM0ZmM0NWY1LCAweGVmZGM1NzNiLCAweDdhZjQ0NDczLCAweDYyMWU5ZTQ0LCAweDQ5Mjk0YjNlLAorCTB4NWI0OGJkNDgsIDB4YWNlNWRmYTAsIDB4M2IzZDU0MWYsIDB4NGQyNDNlOTUsIDB4ZmM5NGZhY2YsIDB4NzFlN2U2MDMsCisJMHhmODk0ZTNiYiwgMHhhNTc1NjhkYywgMHhlYjRmODMyNywgMHhkNDY4ZjY4YywgMHhkNjRhNGFlMiwgMHg2NDJkMjFmOSwKKwkweGMwZDM1ZDY3LCAweGMyZDMzM2JmLCAweDYwOWY4ZTM0LCAweDRmNGQ1N2U4LCAweDc2ZjFkNWZiLCAweDBlY2RjYjZjLAorCTB4NmZmM2JlZWIsIDB4ZWEwOWE2YjcsIDB4MWE3NWJkOWYsIDB4Y2ViMTJkOTcsIDB4OTY5MWQ4MzQsIDB4ZWMxZjY2YWQsCisJMHhhNDhmODdlMywgMHg1ZjExNTVhNywgMHg5YWRkYjg3ZCwgMHg3YzQzNGY1YSwgMHg2Y2JjZTBmOCwgMHg5NmI4MDQ1MSwKKwkweGM1OGYwYmNiLCAweDEzMWQwNDM0LCAweDYyNWQ1NWY3LCAweGZkNzQ3YzYyLCAweGFlZDhmN2Y3LCAweDM2NzRkNmZkLAorCTB4Yjc3MjAxYjEsIDB4MTU2MjY4ZmQsIDB4ZmI2ZWIzOGQsIDB4NjQ5YzJhY2YsIDB4ZmU0Yzg3Y2YsIDB4ZmZkYTEyYmEsCisJMHhkYjIwY2EyNywgMHgyYzFjZTE3MywgMHhmYzQ1MTVmNiwgMHg2YmRiYjU4OSwgMHgzYmY3NjFkMywgMHg1OWVhN2NmZiwKKwkweDU2ZmY3ZGQ4LCAweGY4ODk5YTZiLCAweDI3M2YzN2U4LCAweDNkYjBhODdiLCAweDUyZTIzZjYzLCAweDRiZTNlNGFjLAorCTB4ZmIwN2M0MmYsIDB4MjkyZmZmODgsIDB4ZjU0YjFiYzIsIDB4OGEyN2NjNmIsIDB4N2FmYjA2OWQsIDB4ZmZjYzFlZmMsCisJMHhiNzlhNzZjZiwgMHgwZjA2ZjMxYywgMHg0ZjVlNjA2NCwgMHhlYmNjMWFlMCwgMHhlNDlmOWFkZiwgMHhkZGZlMmJmZiwKKwkweDdmYTU3YjAzLCAweGU3YjU0MDc3LCAweGEwMzI4ODU3LCAweDNiNWVjMWRiLCAweDk3YWJmZmMzLCAweDg4NDczZDEwLAorCTB4MGMxOWJkNDMsIDB4ZTJlYmQ0YmYsIDB4ODBiN2E4NzIsIDB4MzkxNGQ3ZWIsIDB4NDZmYmJkMjUsIDB4M2NkMjM2NGEsCisJMHhhMGEyODU4MSwgMHhhM2FkZWQ5YiwgMHhkZmViNDJjMCwgMHhlMDc5YzRhNCwgMHgzYzUyNmM0ZiwgMHhmZGQwNGVlOSwKKwkweGNlZDJjOWU3LCAweDVlOGJmNGFhLCAweGU0MjM0ZGNmLCAweGYzZjhlOTgzLCAweDY4YmIzMWU2LCAweDJkZWZmMWQzLAorCTB4MmYwMGQ5MjIsIDB4ZmExYTY3YjIsIDB4ODZkZDNhZDcsIDB4YWUzMzViZjYsIDB4YzU3ZmI0MzUsIDB4NmY4MDYyNTUsCisJMHhmNDM2YTgyZiwgMHg4YjczYzNiZiwgMHhlYWFiYmUwMSwgMHg0YmZlODYyYiwgMHhmMDBjNGJiYywgMHg0MzQ2YmFiMiwKKwkweDJkN2RiYmZmLCAweDFiN2JmNjg2LCAweDFiZGExOGQ2LCAweGYwMGMxYmZkLCAweDM0MWUzYjU3LCAweDdiYWZiZmY0LAorCTB4MmJkZGExYWIsIDB4YmJkODE2OWMsIDB4MTcxZjQ0ZTMsIDB4ODg1ZmZkZTEsIDB4YmQzNzI4MmUsIDB4ZDNkMGVmOWQsCisJMHg1MzIyZmU3NSwgMHg3YzI0ZDBmNywgMHhmNDg5NjhmYiwgMHhlYTUxN2U2ZiwgMHg5OGZlMDVkZCwgMHg0ODdjOTI2NSwKKwkweGMzYWUxN2E1LCAweGQ0MjdiMDMzLCAweDBhNDIyNTllLCAweDM4NjIyYmZiLCAweGRkMTM3YzEzLCAweDdlN2RiYTJmLAorCTB4MmVhYmM5ZmMsIDB4ZjRhZGExYTIsIDB4ZTkwYjA2YzMsIDB4Mjc5NWY5OGQsIDB4YmUwOTcyY2IsIDB4MWI2YmU1ZjMsCisJMHhlNjFmYTQyZCwgMHgyYWYyNzhkZiwgMHhiNjk1MWZlMCwgMHgzMmZiNzIzNSwgMHhjMzQ1YWVjMSwgMHgwNDM3NmZjYiwKKwkweDZmZjM5ZDY4LCAweDgxZWRkOWNlLCAweGU5MTNmM2RmLCAweDlmYzU0Y2Y3LCAweGJlNWI3N2Q4LCAweDEwY2EzN2RjLAorCTB4OTNjYTIzZjEsIDB4NWYyODhmYzQsIDB4YjM2YzdlMjMsIDB4ZmM0N2JmOTIsIDB4YWY0Y2YyODgsIDB4ZDQ3ZmViODcsCisJMHhkOWU1YzU1YiwgMHgzZjk3MmY1ZSwgMHg3MmUzYWRlZSwgMHhlNWM3ZDdiOCwgMHhiODFiN2I0ZiwgMHg5ZmFmNzlmYywKKwkweGI3Yjc3YmJmLCAweDdhZjdjYjgzLCAweDk3ZmViOWJiLCAweGZlNWMzZGJkLCAweGY1YzAzN2FhLCAweDJjMjg5NmFmLAorCTB4MDEwMmI0ZmYsIDB4MDM3YjA1YmQsIDB4Nzc2ZjVkZmUsIDB4NzdhNGNjODQsIDB4ZTVlYjMxYzUsIDB4ZjI0YWJkNzEsCisJMHhkZGE1NzhhZCwgMHhhMmE5NWM1NCwgMHg2ZWJlY2E4OSwgMHg1Yzg3OGUxMSwgMHgxN2M5MmQ4NiwgMHgzOWY4YmU4OSwKKwkweDdhMjM3ZWQ5LCAweGVhMmUyMmQ0LCAweGM2MWZhZGZjLCAweGFmNDI0ZjdhLCAweGM5ZDMzMTA4LCAweGZmYWQ1OGZhLAorCTB4NjllZjUyYTcsIDB4MTVlZTVmYWUsIDB4OTc3YTdkN2EsIDB4ZDAyM2ZmZGIsIDB4YjJmNzFkZmIsIDB4ZWMzMzMyZmMsCisJMHgyNGU5Zjc1MywgMHgyNGM3N2E2YSwgMHg5M2UzMjYzYSwgMHg1OTNlNTQ2NywgMHhjNjJjNGY2MCwgMHgzZDgxNmVmOSwKKwkweGIyN2IwODNiLCAweDgzZWUxMmMwLCAweDRjZmJlYTFlLCAweDNkMjIxZWI4LCAweGM2YzEyMjc0LCAweDExZWZhOTdhLAorCTB4Y2ExM2ZiMGIsIDB4OWJlMTgyYTcsIDB4N2RjMzA1NTIsIDB4YTE5YjBkOWYsIDB4M2QzODE3NzcsIDB4NTQ1NzZjMTksCisJMHgwMjJlY2YzOCwgMHhkZDcyMjk0OSwgMHg0YTFlNjc1OCwgMHhhN2NkNTNjMiwgMHhmM2IwNDVlMSwgMHgyZTZjMzkzNywKKwkweDVmOWMwOWU4LCAweGNmMzE0YTYyLCAweDAyYmNkYWJiLCAweGQ3YmQ1MmUzLCAweGZmM2ZkZjQ2LCAweDY4OTkwODk5LAorCTB4NWZhOGIzNWQsIDB4MTBhNWYzMmMsIDB4ODdkODE3MjgsIDB4ODc5MjNlY2QsIDB4Mjc2ZjU0OTksIDB4OWJkNTE2NzgsCisJMHgwMmQ3YmI2NSwgMHg2YzNhN2MzYSwgMHg3NmExMWQ4NiwgMHgwM2RiMjQ5MSwgMHg3Y2M4OTRhNiwgMHgyYzEzM2FkYSwKKwkweGVjYTk3ZTM0LCAweGU3MmE1ODk3LCAweDM5YzBiYzAxLCAweDNhZDBhMjU0LCAweDFlMWNiYWZiLCAweDAyZGQyMWUwLAorCTB4NWVmZWU3ZGUsIDB4NTQzZjdmMzMsIDB4M2ExZTA0ZTIsIDB4ZmI0MTFlMWQsIDB4ZTIwNTJjMjAsIDB4YWYxZmI5NGEsCisJMHhkNzIyYzEzMywgMHg1ZmE5ZjM1MywgMHg0MzJmZDE3OCwgMHg3MWQ0NjI3OCwgMHg4MDNkYjJlYywgMHgwZDRhNmU3MSwKKwkweDhmODA1YTY1LCAweDIwMjc5YjZlLCAweDlkNjJmMWM3LCAweGZiMmYxN2U4LCAweGI5M2FjYzg1LCAweGFkMDNmYmNkLAorCTB4YWNmZmVjOTcsIDB4ZjQzNzYxOTQsIDB4NGM0M2YxMmUsIDB4MmJkNGY4MjksIDB4NTM5OTYxZjksIDB4YTk3MDgzZjIsCisJMHgxYTFmY2FiMCwgMHg0YTc1MmNiZiwgMHhlZGNhZmM5MiwgMHg3OGQyOTY3NywgMHhhZmU3MThiZSwgMHg3ZmNlNDllMywKKwkweDk3ZTZlNGFhLCAweDUxMmNkZjEwLCAweDFmYmZmNWZkLCAweGZkMjU3OGJmLCAweDdiYmQ1MjY3LCAweGY0NjhkZjIyLAorCTB4ZTM0N2Y4ZDEsIDB4ZDIzZTY4ODMsIDB4YjdhMzQwZjgsIDB4N2YzNDVkZjYsIDB4MzQ1NWYzNDUsIDB4NGJiMDJkM2YsCisJMHgwZjhlODMzYSwgMHg0OWY5MTMyOSwgMHg5MDY4NzRmOSwgMHg2NzY5ZGZkNywgMHg0ZmNkMTZiYiwgMHgzNTMwN2NkMSwKKwkweDRlN2RjOTNmLCAweGZkMDhhM2U0LCAweGNmMmY4ZjgxLCAweGRlNmVjMzQ3LCAweGE0ZmI2NmM3LCAweDhmZjFhNDdjLAorCTB4MWYxYTRmYzYsIDB4MTYyMjNmZGQsIDB4Y2I1MzUxMjcsIDB4OTQ3NWViOTgsIDB4Y2ZmYzcyN2IsIDB4OGFiNDhmNDAsCisJMHhhYjMzMTY1YiwgMHhiZTQ1Y2QzOCwgMHg5ZWZkODk4NCwgMHg1YmRmYTI5OCwgMHg1MDFmYzRiMSwgMHgyZjczYzIzYywKKwkweDJlMzM4MWZjLCAweDdlYzVkOGFiLCAweDQyNTFkN2I2LCAweGVhYTQ1YmY0LCAweDliYTIzM2QxLCAweDhmYjkxY2VkLAorCTB4NDZiNWQwMDEsIDB4YzJhMmYxMjUsIDB4ZDc3ZmVjZDUsIDB4MmM3ZThjMzgsIDB4ODhmYzIzMmMsIDB4MTdlZmQ0ZGIsCisJMHgwZGI3YzlmZiwgMHg2YTljNThlYiwgMHg1MzZmNmZmNCwgMHg0NTViZTNmZCwgMHgzNzVmOGYzZiwgMHhmMGJkYWEzMywKKwkweDZmOWJmNjU2LCAweDZmZDYzM2NiLCAweDVlZmQ1NTI4LCAweGNmNDM3MGI3LCAweDVjOGYwOGQ2LCAweDdlY2RkODlmLAorCTB4NTcyYThkNmIsIDB4NzJmZDJhNTksIDB4OWYzMTY2NWQsIDB4ZmMyYjU4ZjAsIDB4ZDdmNzI4MTYsIDB4NjJmMzY3N2UsCisJMHg4MDQ1NWJkYywgMHgyMDg4YWZlMSwgMHgxMDhiYjc5NywgMHgxOTA3NzM4ZiwgMHgwOTc3YzAwMiwgMHg2OWRjMDU2MSwKKwkweDkxYjZjOTFmLCAweGZiMzdhZDQ4LCAweGY4NWY4MDNmLCAweDM5ZmU1OWRiLCAweGM2MzZjNzM4LCAweGNmMjBmYmZhLAorCTB4NmNlZmUyYTcsIDB4NWJlNjgwN2EsIDB4MGYyOGI2NTQsIDB4NzFhYzlkZGYsIDB4ZDI3NTNmYjEsIDB4MWRmZWNiOWUsCisJMHgxMjlhYzJlNCwgMHhjOTM3Y2Y5MSwgMHhmZDkxZTYzZSwgMHgxM2Y2NDUzYSwgMHg5ZmIyNjllNSwgMHhkZWM3NjQ3OSwKKwkweGY4MDlmYjIwLCAweDAyYWQ4MmI2LCAweDI5NzYyZGRmLCAweGI3ZGJhMmMyLCAweGNlZWRmZGY2LCAweDZkMzJjMjQ1LAorCTB4N2I3NGZiNmEsIDB4ZmE2N2Y3ZjEsIDB4NGFkZjdmODksIDB4MTIyMzUzOWUsIDB4NjBkNjU2NTEsIDB4YTcyNTZmYmYsCisJMHg2MzE5NjQ5YiwgMHhkNWU4YjJlMywgMHg0ZmZjYzliYywgMHhmMzIyZmY4ZCwgMHhhNmY5ZTYyZCwgMHhkNzg2YjNjMiwKKwkweDc4NmE3YzY4LCAweDdkNzgxMmZlLCAweDNlYmMzMjY5LCAweGNlZDgyMjUzLCAweDU5NWZkYThmLCAweDU3NTViODhmLAorCTB4ZGU2ZmQ0YmMsIDB4MDY0NDEzNTcsIDB4YTNjNmVmZjEsIDB4MWJmZDFjZjIsIDB4ZTMxMzMxMmMsIDB4ZjdiNTNjNGIsCisJMHhlNDJjMjhkYywgMHgyYmRjN2Y0YSwgMHhhYWYzYzAwMiwgMHg4ZmFlNmE5ZSwgMHhmNzg5OGY4ZSwgMHg2YmY4NjE2ZSwKKwkweGQ5NTcyZjJhLCAweGRkZTgyMWZkLCAweDZiYTFhNWNiLCAweDFmMTJjM2M4LCAweGJjNGJlYmVmLCAweGVkZjllNjgxLAorCTB4Y2UwZjY2NGIsIDB4ZDc2NjlkMjcsIDB4YWNlMjBmNmUsIDB4MmYzZDk5NmYsIDB4OWQzZmZiZTAsIDB4NzI0YTVlY2EsCisJMHgzNjlmOWUyNSwgMHhkM2FjMzllOSwgMHg5ZGE4ZjEyZSwgMHhlMzlkYmVjMywgMHhjZTE0Yjk2MywgMHgyM2M4MGNiMiwKKwkweDVmOTgyOWZkLCAweDkyNjY1ZmYzLCAweGZlMjc2OTJmLCAweGU1OTM2N2RkLCAweDQ1NGNmZTU0LCAweDUyOWZlOTFjLAorCTB4NTBmYWNmZWUsIDB4Yzc3ZDFmYTMsIDB4NTM4ZDE2NzAsIDB4ZWIyNmZhNDEsIDB4YWYzZTM4ZDEsIDB4ZjdkZTlkNzgsCisJMHgwOGQ1MGVkOCwgMHhjNWFmYmY4MywgMHgyNTUzNDYyMywgMHg2Yjg4MTcxZSwgMHhiMDNjNDQ5ZSwgMHgwNDU1OGNlNiwKKwkweDgyMTQ3ZGE5LCAweDI1MGNmNjhmLCAweDdhMzViZDA4LCAweGZhMTlhYWU2LCAweDExNDEzNmI2LCAweDU0MmY2MGQzLAorCTB4NjE5MzEyN2QsIDB4M2U5ZDJlMTIsIDB4MDljNTc1ODgsIDB4ZTM4ZjhlOTcsIDB4NzAwYzUyMGIsIDB4YTE4NjY3ODIsCisJMHg4ZTU1NTI3ZiwgMHgzYmQ5M2RhMSwgMHhhZDNlZDBkNywgMHg0ZjAwZDRhZSwgMHhlODYwZGRmNywgMHhkMGIwZGU5ZiwKKwkweDZmZmE2NzAwLCAweGVhY2ZmNDMzLCAweDM1ODA2YTU4LCAweGFiMjU5NTdkLCAweDE1ZWVhY2M0LCAweGY3NjdlZjg2LAorCTB4NzdmNDM0YWMsIDB4ZGExYWQ2MDcsIDB4ZmI4OTcxY2QsIDB4YmMwNjhmNTksIDB4NGUzNDA1YzMsIDB4ZWU0ZTNhOWQsCisJMHg3ZTg2OGRjZSwgMHhhYTZkZDA4MiwgMHhiZmM4OWM4MCwgMHhjZWViMTI2NywgMHgzYWNmNDQyOCwgMHhjODdhYWFjNywKKwkweGQ3ZmY3ZTY5LCAweGQ3MzRlYjhkLCAweGJjYTk5MjViLCAweDdmZDQ2NWQ1LCAweDc4NDYxOWI1LCAweDQyODRlMzkxLAorCTB4NGU0NThiNDMsIDB4ZWFjZTFlYTMsIDB4OGNlMDE4YjYsIDB4ZDc5YmQyMzIsIDB4NTE2MjhmZDEsIDB4MmY4MmYxY2MsCisJMHhhZTdmYmZhMiwgMHg3OGQxZmU4MSwgMHg4NGYwN2UyMiwgMHg2OWVjOWZkMCwgMHhiMzdhZWIwMCwgMHg4ZjdiMDJkNSwKKwkweDFmN2U4MmZjLCAweGYxZTgyZmM4LCAweDFlODJmYzgwLCAweGRmNDE3ZTQ2LCAweDdkMDVmOTFmLCAweGZhMGJmMjNiLAorCTB4NDYzM2IyZjYsIDB4MWIwZjk3ZmEsIDB4OWVmOTVmZTksIDB4NWYxYWZlOTEsIDB4ZWFhNzQ1NGUsIDB4ODQzZjkxYjAsCisJMHg3ZjJiZjE1ZiwgMHg1ZTM3NGU4NSwgMHgzNDRmZjIzMiwgMHgzNzI2NmU3ZCwgMHhmNDE1MzkyNywgMHhkNzIxM2M1MCwKKwkweDlkZDdhNzk3LCAweGZhMjJmNDUxLCAweGY3YzA0YzA0LCAweDlmNDkwNGNjLCAweGEwNDk3NWQwLCAweGIzMTllZDU3LAorCTB4OGZmYzEyMDgsIDB4Yzc3Y2ZiNTEsIDB4MjMyODZmZTIsIDB4YWI4NmYwM2QsIDB4ZWJmYTAzMzQsIDB4MTQ3YWUxNjYsCisJMHg5ZGM1ZGI3MSwgMHg4Njg4NGYyNiwgMHg3ZTM1MTE1ZCwgMHg3ZGZmMGNmNSwgMHgxYTE3YTQ2NSwgMHhiNmNkNWRhNiwKKwkweGZjNDYzZjgxLCAweGRjOWU3MDczLCAweGQ5ZGRlYWE1LCAweGMwZmM3MjcxLCAweDEyN2NjMTQyLCAweGQ4MzliYWY4LAorCTB4MzM5ZWUzNDcsIDB4Y2ZkMDJiZjUsIDB4YjdmNDRmZGYsIDB4MGJmYmZiZTMsIDB4ZDQ3Zjc5YmIsIDB4Y2RmN2MxNDMsCisJMHgwZDkzMWFmZiwgMHhlMGI2NzliOCwgMHgwYzI4YjA3MywgMHg4ODQ5MmY5NywgMHgyY2U2YzVlOCwgMHhkNDNiMjdhYSwKKwkweGUzOWVhNjU1LCAweGRmNGVkNDNjLCAweGI4Yzk5Nzc1LCAweDY5Yzc4MjRlLCAweGExNTE3OGUzLCAweDQ0NGUyMmYwLAorCTB4ZTZlY2FmYzcsIDB4NmNlM2UwMjIsIDB4NjNlMDFjZWMsIDB4ZGU0MWU0YzAsIDB4MjU3NTZjMjAsIDB4ZGUwNTFmNDEsCisJMHhiZGU0MGIzNCwgMHg5ZmMyMTdlMCwgMHg1N2ZhYTU5YiwgMHgyOWU0NjI1OSwgMHg1ZWNlNzNhYywgMHhkN2FiYjA2MSwKKwkweDYyYzJlZDA2LCAweDBkMzk3ZmM4LCAweDg2NTBkMTcwLCAweGM3ZjVmZmExLCAweDkyZjY4NjVjLCAweGJkYTE4MTUwLAorCTB4MDBjNzhjZWMsIDB4MTk1NzBmOTcsIDB4ZTdiZTU3ZmEsIDB4ZTFkNWMwMzUsIDB4MWJmZjQzM2EsIDB4ZjAwY2Y5MmYsCisJMHhlZjllNDU2YywgMHgyMzk2NTNiZiwgMHg5OTJlMjFmMywgMHgzODdlNmJkZiwgMHg2YmZhNTA3OSwgMHhmOWFmZGNmMiwKKwkweDQ5ZmZhMmQ1LCAweDM4NzExZGFmLCAweGJmMzU3Zjk1LCAweDZkYTNmMzVjLCAweGNmZDA0MDg0LCAweGY2YzJkM2I2LAorCTB4ZmE1ZGE2NjAsIDB4ZjYyZGZlYzksIDB4NjgyN2M4ZjMsIDB4NTdlNmJhZmUsIDB4MDhhOWZlNmIsIDB4NzZmNTdhZDQsCisJMHhmNjkzYmU4NywgMHgzNWViZjU0NSwgMHg4YmYzNTlmZiwgMHg0YzVkOGIxMywgMHhiMjM2ZWIzZiwgMHg0YjA3ZTBhYiwKKwkweGFlNzYxMzM4LCAweDFhNGM0NjM5LCAweDRjYjk3OTBmLCAweGQ3YTI1YjllLCAweDdhMmJhZGFmLCAweGE3NjJjNGZlLAorCTB4ZGM3NTE3ZTQsIDB4N2VlMmVjMTcsIDB4Y2NmZTI0ZGYsIDB4ZjU3Y2FhYmYsIDB4NjNiZWI5OWYsIDB4YWQ2N2NmZTAsCisJMHhiYjU2Zjc5ZSwgMHhmNGYzZWJmZiwgMHgxMzIxZmMyNSwgMHhmNWYzNTJmZSwgMHgyNjRkZmQ3MiwgMHhjNzY3YzcxMywKKwkweGQ3MmU1ZmQ3LCAweDBiZjU5NWFmLCAweGQ5MjFkZmM5LCAweDM3ZTJmMzU5LCAweDFmYzgzYWY3LCAweGMyYzdiNjc4LAorCTB4YWYzMzk2NzEsIDB4ZTQwYzZjNWMsIDB4NWUxMjFmYzEsIDB4ZmM5YjMzOGMsIDB4M2UwN2QwN2MsIDB4MGIwN2NlMDUsCisJMHhkZjNjY2RjYiwgMHg3NzI5MzJhNSwgMHhjZjJjYmQxMSwgMHhkMjQyYTM2NSwgMHhjNmM3YjQ3ZiwgMHhlODQ5ZDQ3OSwKKwkweGVkYTA3Y2NkLCAweDhiNDNmMTA3LCAweDUxMGRjNjU1LCAweGM5Njg2ZTIyLCAweGMwNDM3MTk3LCAweDQ0YTIxYjg4LAorCTB4MmZmNTEwZGMsIDB4M2UxODdhZjcsIDB4ZjBjNTViZDIsIDB4MGNiZDdhZjcsIDB4ZTNhZGViMWYsIDB4M2ViZDA3ZjIsCisJMHgyNmY4ZDdhZSwgMHg3OWRhNWYxYSwgMHhjNDNmYTM0YiwgMHgyZjIzNzYxMCwgMHgxZmViMWY4YSwgMHg2ZDcyZjQ5MiwKKwkweGQzZjZmYWIwLCAweGEyNGRlYjE2LCAweGUwOGQyOTRlLCAweDhmMTUxZWYzLCAweDNjNDllNjMzLCAweDdmZTQxZmEwLAorCTB4ZTZiNTdlYWEsIDB4OWJjNDI0YzIsIDB4YzkyYjg1NDcsIDB4YWFlMjU3ZjksIDB4Njg3YzJmN2YsIDB4OTczZjFmNzgsCisJMHg5NDliY2I4ZSwgMHg1MmU0YTk4NywgMHhjZWViM2YzYiwgMHhkMTc3MmNhYiwgMHhiNzJkMThmMiwgMHgzZmU3NzhkMSwKKwkweGZjN2JiOWRkLCAweDUzYzVhYjVjLCAweGU4ZDUzOTU0LCAweDU1YjVjOWEyLCAweDVmYTExYjg0LCAweGNlMjY3OTgyLAorCTB4NjA5YzNmNTMsIDB4ZjNjNWEzOTQsIDB4MDc3ZjdlMjQsIDB4YmNmMmEyMzksIDB4MzI2Njk5Y2IsIDB4ZmRiMmY4NDcsCisJMHgxMDE3ZjI3MSwgMHg0ODY5ZWYxZiwgMHg4MDU5ZTBlNCwgMHg3ZGJhOGZjZSwgMHhkMmZhZjAyZSwgMHgyYjdlYTA2ZSwKKwkweGQwNjJhYzA3LCAweGIwNzU3ZDg1LCAweDQ0MDk2ZDFkLCAweGQ4NDcxYjlmLCAweGFkZGI2YzlmLCAweDNlNDY5ZjM4LAorCTB4ZTdlNGU3N2YsIDB4ZDEzZmNlNGEsIDB4NmZjMjZkMzgsIDB4ZmJkYmJhYzMsIDB4YWI1NmZkOGQsIDB4ZmNlOGNhZTcsCisJMHhkNTNjZDU0YSwgMHg4Nzg0NzlkZSwgMHg3ZjM1MWZmZCwgMHgxOWY2YTFkZSwgMHg2ZTYwOWZlNywgMHg2MGRmMWE5MiwKKwkweDE0MzJhNDc5LCAweGI5YmYzYmEzLCAweDhiMjhlZjkwLCAweGI4Yjc4NGMwLCAweDZkYzNkODAyLCAweDZiYmU0ZjE2LAorCTB4Nzg2OWJmMjIsIDB4OTdlNzk4OWIsIDB4ZjdjNDFiZjcsIDB4YTBmY2Y5NjIsIDB4MjMyZmY5ZTUsIDB4NmFmYTBmY2YsCisJMHhmZmI1MTRmOSwgMHg5ODU5ODBlNSwgMHg0OGUwZGY3MSwgMHg3ZmE3ZTcwYywgMHg0ZjdiM2E2YiwgMHg3Zjk3NGI4ZSwKKwkweDExYjc5MDk5LCAweDMwOWZiODg5LCAweDI3YmE2ODdhLCAweGI0YmFjOTMwLCAweDFiMzYxZmQyLCAweDY4NGM5MWVlLAorCTB4MTEzNDdhZGYsIDB4MTdjZWM5ZTcsIDB4ZjNhNjllNjUsIDB4Nzk2OTUzYzUsIDB4M2NkN2JkM2EsIDB4MWJmYmMyY2YsCisJMHhlN2RiZjkzMiwgMHg5YmRjOGY0ZCwgMHg2MGM3ZmI1OCwgMHgzNTdhY2EzMSwgMHg5ZmJkMTI3ZSwgMHg1ZjM2YmQ3MSwKKwkweGE1MTlmZTYxLCAweGFiNWViMWZkLCAweGE0N2Y3ODUzLCAweDQ5ZTQwNTE3LCAweDExMmZkN2NiLCAweDVhOTQ1NGExLAorCTB4YjNiZmM0M2UsIDB4ZTVhMGU5OWEsIDB4ZDU0MjVhNDMsIDB4ZmJiYjhmYmMsIDB4YThlMzViNTYsIDB4MmRhOWY4NGIsCisJMHg0OGFlNzFiNSwgMHg0YjNjMjQ5ZSwgMHgyYTk5YmZkZSwgMHhhYzZjYjI1ZiwgMHgzZTViYzc4NCwgMHhiMzhmMjM3NiwKKwkweGU2NWI5ZTZkLCAweGQ5ZWRiNjRmLCAweGVlNmZmZjAwLCAweDFlMDU2MTQxLCAweDRlMzk1NmMyLCAweDU1M2U5ZTM0LAorCTB4ZGNiOTI0ZTUsIDB4NmUzN2I3YTgsIDB4NmY2ZjU4NTUsIDB4Zjc5NmFkODQsIDB4NmI2ZjU4N2MsIDB4MTU3ZWQ1ZjAsCisJMHhhNmYwOTVhZSwgMHg1YjBlMTJlZCwgMHgyNDk1M2IxZCwgMHgwNWM0NWZiOSwgMHhkODk0NGZiMCwgMHg4N2IxY2UwZiwKKwkweGY2MDIzOGQ0LCAweDQwZmIxMjgxLCAweDYwMTVmNDNkLCAweGQwYzAyYmU4LCAweGFmYTE4MDU3LCAweGExNWY0MjUwLAorCTB4NjVmMGE1N2UsIDB4YmM4ODhlMjMsIDB4NGU0ZThkNGUsIDB4ZDFhOWQ3OTAsIDB4ZWJjODFmZjksIDB4NzVlNDYxZTgsCisJMHhkNzkxZmRmNCwgMHhhZjIzYjdkMSwgMHg1ZTQ3NmZhMywgMHhhZjIzMGY0NywgMHhiYzhmZWZhMywgMHg1ZTQ2MWU4ZSwKKwkweDc5MWZkZjQ3LCAweGJjOGMzZDFkLCAweGYyM2ZiZThlLCAweGU0NzZmYTNhLCAweGM4ZWRmNDc1LCAweGU0NjFlOGViLAorCTB4OTFmZGY0NzUsIDB4ZGZiN2QxZDcsIDB4ZjIxOGEzZGYsIDB4OWE5M2Y3M2UsIDB4ZWViNWRmMDYsIDB4NzFmY2M2OWQsCisJMHgzMTNiZWRkYSwgMHg0MWZiZTg4ZiwgMHg2NmJmOWZmYywgMHg4ZjlkMDFjZCwgMHg2ZWRmMDFhZiwgMHg0OGYzOGFlYywKKwkweDQ5ZDdmNzNhLCAweGE0ODQ5YmJhLCAweGQzMjM0OGYzLCAweGMyNGQ4Yjc5LCAweGU3NzQ5ZWI1LCAweGYyMGZmZTI0LAorCTB4OTk1NjM1MjksIDB4N2M4OTQxNGYsIDB4NTNlNDRhMGEsIDB4NTI5ZjIyNTAsIDB4MjlmMzJmOTMsIDB4NDE0ZjkxMjgsCisJMHgyODI5ZjIzZCwgMHg4OTQxNGY5MSwgMHhlNDRhMGE3YywgMHg5ZjIyNTA1MywgMHgxNGY5MTI4MiwgMHgwYTdjODc3YywKKwkweDUwNTNlNDRhLCAweDRhMGE3YzhmLCAweDdmNTA1M2U0LCAweGJjODFkNjhlLCAweGY4MmViNjhhLCAweGYzODY3OWNiLAorCTB4ZTFhMWYxMWMsIDB4YzAzNGU3M2MsIDB4ZmRmNTk3ZjAsIDB4ZGJlYjJmZTEsIDB4ZGJlYjJmZTEsIDB4NjFlYjJmZTEsCisJMHhmZWZhY2JmOCwgMHhiMGY1OTdmMCwgMHhlNThiOWU2OSwgMHhmZWIzN2UwYywgMHg3YWNkZjgzYiwgMHg3MDNmYThiOCwKKwkweDNiYTBiMTFhLCAweDM1ZWVmZGY2LCAweGU1MDRlMTk0LCAweGRmNDljNTU5LCAweDE1YjdmZjk3LCAweDYzODU4M2M4LAorCTB4MGY2NGVjOTUsIDB4MGZhZGJmZDksIDB4ZDgyMWE4YWQsIDB4MmJhN2RlYWYsIDB4ZDAyNjIzMTYsIDB4NDRkOGYzOWIsCisJMHgwNDQ4N2YzNywgMHhlOGEwOGY3MSwgMHhkNzZlNGNmMywgMHg0N2ZjYWFmMiwgMHgyMjM5MmY3NCwgMHg1MzVmMGZkOCwKKwkweDdkYTVkNzI0LCAweDMzNGUxMWVmLCAweDA0N2ZhZDRhLCAweGY0NWZiYzllLCAweGQ2M2Y1YWZjLCAweDkwNzViYTk3LAorCTB4ZmRjMTJjOWQsIDB4OGUyZDkyODYsIDB4NGZjNDVkZDIsIDB4ZmIwYTRjMDcsIDB4OWZjODA3YTEsIDB4NWU4OTNhNWEsCisJMHhhM2ZkNTBhYSwgMHgyN2MzYTYwMywgMHhhMjJmNzBlMywgMHhhN2VjZjE0NSwgMHg4OGIxYWZhMSwgMHhlMDUyZDYzMywKKwkweGZlMTRiYmE5LCAweGIyNzk3NjQyLCAweGRmNzVhZmVhLCAweGRhM2Y3YjgwLCAweDFkYjhiNWJhLCAweGYyMmYwOWU5LAorCTB4ODQ0N2YzZWYsIDB4YjllNjhkYWQsIDB4NmI2MTUzZTksIDB4OTM2NmRmODcsIDB4YzNiZTAyZmUsIDB4ODBiYWVkYjksCisJMHhlM2FmZGRlMiwgMHg2OTcyODJlZiwgMHgwZDgxZmNmZiwgMHhmZDUxYjQzNywgMHg2ZmJhODc3NSwgMHgxNzFmODc2OCwKKwkweGNlZmJiZjI3LCAweGM3OGM4OTczLCAweGZiMjliNzNiLCAweGY5OWZiNGNkLCAweDkwNzc4NDg3LCAweGNiOTQ5NWZhLAorCTB4ODc3NWRmZjMsIDB4OWUzNmI2OWMsIDB4ZDc2YjY5ZDcsIDB4OTdkODQzZGYsIDB4NWNlMTczNmQsIDB4ODgzNWMyMjgsCisJMHg4YTc5ODlmZiwgMHhmMDQ0NDE3OCwgMHgwZDdiZmI0NiwgMHg0NDg2YmJmYiwgMHg3NWQ3ZjEwNSwgMHgzZmZiNjMwNywKKwkweGQ3NTFmMWQyLCAweDdlMDFiMjUwLCAweGZmNjY1OGUwLCAweDU5ZmUzYTQ3LCAweDcyNDQxZjg3LCAweGVjMjA2ZTQxLAorCTB4ZjI0YWE3NTYsIDB4YzNiZDZhZjUsIDB4NzljNTFiZTQsIDB4NjIzZWNiYTIsIDB4OWE2ZWZlMDMsIDB4N2I4YjVjOTcsCisJMHhmMGI4ZTI2YywgMHhlNmVmODNlNCwgMHg0ZTlmNmNiNSwgMHhiZDA3ZjJlYiwgMHhiYTAzZGMxZSwgMHhkM2VlZDNlOSwKKwkweDYzZWYzZjBjLCAweDgyYTdkOTk4LCAweDcwZjZjN2Q3LCAweGM1MDk0MDRlLCAweDBjZWUyYTEzLCAweDA5NTI5YTBjLAorCTB4ZDViMDIzYmUsIDB4ODdmZTg2OWEsIDB4MDBlZTA3ODQsIDB4YTBiMTI4OTksIDB4NDJhZmIyMzQsIDB4NTU4YTZjMzEsCisJMHhkNGUyMmZjMCwgMHg5MWZmMWQzNCwgMHg3ZTBlNThlNiwgMHgwNTU4ZjEyOSwgMHhjNTg5NjNmOCwgMHg4OWJlODU2OSwKKwkweGVmYTIzN2Y2LCAweDcxZmY5MDdmLCAweDY4NjdiY2FmLCAweDZiMWVjMGI1LCAweDUzOGI1MWZlLCAweDM2ZWFmNWFlLAorCTB4MmQxZmZiMmIsIDB4ZDBmZmM5NDcsIDB4ZmNkNTJiZGQsIDB4MDg1ZWVkMGQsIDB4MTA5ZTFkZjksIDB4ZGI5MWY4ZWMsCisJMHhiOWQ0MmUzOSwgMHg3ZmJlMWRlMSwgMHg3ODNiODlmMSwgMHhmYWY4OTkyMCwgMHhmN2MzOWM5MywgMHhiN2UxYjk1NCwKKwkweGM5NGZhYzI4LCAweDI3MmNlODZmLCAweDNmNmNiNjNjLCAweDU1ZjM4ODlkLCAweGZiMGFmMDM4LCAweDNkYjc1NzFiLAorCTB4MDhlMzI4OWUsIDB4YTZkMTFmMzIsIDB4Y2Y4YjQ5ZTIsIDB4NjhmNGFiYjQsIDB4N2QwMWVmNTMsIDB4M2JjYjdhNDgsCisJMHgwODZlZWQ4NywgMHhiZDY4MzZmNywgMHhmYjQ0NTdlYywgMHhiOTFmOWE4NywgMHgzODRmMWI0ZSwgMHhhNDVjNDVkZiwKKwkweDhiYjdmNjgzLCAweDViYmJkNWEwLCAweDg5ODg2NDc2LCAweGQ1M2FlM2ZlLCAweGNkYjM1Y2FmLCAweDNhN2VmN2NhLAorCTB4YzJlZDkwNDQsIDB4M2Y1NDYwOWEsIDB4YmFjZmJlZjUsIDB4OWRmYWM2ODMsIDB4YTdmZTUxZTUsIDB4ZWVkMjJlN2EsCisJMHg3ZGJjYjZlNSwgMHg3ZmY2NmVlYSwgMHg2ZjljYWRiYSwgMHhmZDJhZGE2YiwgMHgwNDU4NzEyMSwgMHg4YmMwMTVmMywKKwkweDM3MDRiMTRjLCAweDk0N2FmNTFkLCAweDI3ZTdmODQ5LCAweDFmNTQ1ZmFhLCAweDJlYmM2NThlLCAweDdkNjc4YjE5LAorCTB4OGIyYzc0YjIsIDB4MzJjNjdiZTEsIDB4NGM3N2JjYjksIDB4OGE1YzhiZGUsIDB4M2JkMTBjNTgsIDB4OTEwNGFiNWMsCisJMHhlYTk5ZmI0ZiwgMHg3YjhkZGQwZiwgMHgyMDYzYTA5MiwgMHg5NDc5Zjk5ZCwgMHgxNDUzMTlmOCwgMHhhZTZhN2FhYiwKKwkweDc3MDUzOTU3LCAweGRmZWFkZWIzLCAweGY1OTg3YjhlLCAweGNiZmQ4MjgzLCAweGQxMzdlMDNiLCAweGEzZjAwZGY4LAorCTB4ZGMxZTQxYTYsIDB4YjczZjdjYjUsIDB4NmVmOTExNGUsIDB4OTUwNmMzYzgsIDB4MDQxZTQ5ZmYsIDB4ZWIyZjBmZWIsCisJMHg0MTI1OWFiNSwgMHhmMDY5YWZkYywgMHhlZTgxMzYxZiwgMHgwM2Y4MWM5YSwgMHhlZjgwMmRlNywgMHg1NzM2MjgwOCwKKwkweGY4Mjc5ZjIxLCAweDc5ZjFhY2JjLCAweGM3MzQzY2I0LCAweDg3MjVmMWFiLCAweGZiOGQxZjhjLCAweDlkMmM1OGE3LAorCTB4ZDdlMDQ1YmIsIDB4ZGVkNGJjMmIsIDB4MGNlMDE4OGMsIDB4ZjcwODExOTUsIDB4ZmRiMjg1MDksIDB4YWY1ZmQxZTQsCisJMHhkM2MzODZkOCwgMHgzNDNmOGM5NywgMHhhZjRjNGM5OSwgMHhmNmY3ZjIxMSwgMHg3MGM1NjA0MywgMHg2NWU0M2E2ZCwKKwkweGNiYmE1MmI3LCAweDUzY2Y1OTE1LCAweDU3MmYwYjk1LCAweDJiYzVjZWU4LCAweGY5MjJmOTU1LCAweDYzZjljNzRiLAorCTB4ZTlmOTIzZTMsIDB4NDBmZjEyNjIsIDB4Y2YwOTViMmIsIDB4YTRlNmIzOTAsIDB4YTIxNGQ3ZjAsIDB4YzJlNTI3Y2MsCisJMHhkYjBjNDM1YiwgMHhlMjdkZDQyOCwgMHg3M2FkMDQyMiwgMHg3YzY3MGE4NSwgMHg5ZGZkZWUyZiwgMHg4NjFmOGM4NSwKKwkweDVlNWY5NjJmLCAweGJmZmMyODExLCAweDhhNGQ4N2QwLCAweGFiNTdlZjg1LCAweGZjOTg3MWY4LCAweGVmYzM5NTFmLAorCTB4ODMxNzg3YjcsIDB4MjM4NWYxYWUsIDB4MWEyZGQwMzYsIDB4MWVlZGY3M2YsIDB4ZjA4NzMzZGEsIDB4ZTkyMTUxOTAsCisJMHhiN2ViNjRkNywgMHgwNDUxNzlmMiwgMHhiNTVmODhhZCwgMHgyMmZiNGExNiwgMHhhZmVjYWUyYywgMHhjNWM0M2U3MiwKKwkweGRmNmQzZTcxLCAweDg5ZjdhYTFmLCAweGFjZTFmMWEzLCAweDdlMDI3NjkwLCAweGY0OGU2YmIyLCAweDRmYzI1MTkzLAorCTB4ZjgxYzdkYzYsIDB4MjdlMTgwYzksIDB4OGM5Zjg0YTMsIDB4ODBjOWY4N2EsIDB4ODYwMzI3ZTEsIDB4N2UxODBjOWYsCisJMHhjOWY4NGEzMiwgMHhlNGMyN2ZhOCwgMHhkMTMwZmYzZCwgMHhmMDUzNjlmMywgMHhhN2M0YWJmMCwgMHg0ZGZhYTU5ZiwKKwkweGE3ZmViNDE1LCAweGQ3OWI4ZjcxLCAweDExZmRlN2VmLCAweDE5NWViMGRmLCAweDVmYzQ1M2Q3LCAweDFmMDg4YWY2LAorCTB4NzBiOWVjYWQsIDB4ZTExMzk0ZDQsIDB4YmY5ZGI2YTcsIDB4ZTIwNWVhN2YsIDB4MTdlNDk1OGYsIDB4M2JmZDllNDIsCisJMHhmMTRjNTA5NSwgMHhkY2Y2N2NkNCwgMHg5Nzk2MzhkYSwgMHg2MzZlYmVlNywgMHgxYjY0ZGJmZCwgMHg0Nzc3NmQzZSwKKwkweGNmN2VmOWYwLCAweDdkNGFiNGZmLCAweGQxNzdjYTE5LCAweDYzYmEyYmI4LCAweDRmZmZkMDNkLCAweGIxZDJmYTU1LAorCTB4MGY0MmY4ZGUsIDB4YWQzMmU1ZDMsIDB4MjUxZGVmODksIDB4YmY1MGIzZmEsIDB4OWViZjBjNTIsIDB4YmY5YWZkNDEsCisJMHhkYTM2NzZmMSwgMHhiNmVlMzgxZiwgMHgxY2I3MGY0MSwgMHhlMTkxZDkyYiwgMHgxNzdlZjdjMiwgMHhlMWM1YjVmOCwKKwkweDU4Y2ZjMWI0LCAweGVkOTkyZGJmLCAweDhjYmE3MzZlLCAweDczYzcxMmRiLCAweDQ3YTM0YmRlLCAweGI3OGM4NTU1LAorCTB4YjgyOTUyN2QsIDB4OTc5ZWEyYmMsIDB4MjVkNjQxMDgsIDB4NmU5MjdlODYsIDB4YzVhNmYyZDEsIDB4NThlM2EzMTEsCisJMHhmM2NhNzg5MSwgMHgwNzEwNzMzYiwgMHgzZTllMTU0OSwgMHgyMTdjNDRkNywgMHg4ZDJiNjFjZSwgMHhlM2EyNTFjNCwKKwkweDZhZjJlMzFkLCAweDlkZjg4NjEzLCAweDUwYTlhZTU2LCAweGRiY2VmNzBjLCAweDg1YWJjZmM3LCAweGQ3ZTFkMzhiLAorCTB4MTEzOGE2M2YsIDB4Yjg3MzZlNmYsIDB4YjgyNmFkZWUsIDB4MzcxNThjZWQsIDB4OGE3ZDQ1MzIsIDB4ZjA0OTk2Y2IsCisJMHg3MzhhMjNjOCwgMHhiOWJkZTgzZiwgMHgxMzU2ZjU4NCwgMHhmNzhhNTI2OCwgMHhiNzJjZDUwYiwgMHhjYjJhNDE2ZCwKKwkweGFmZWY5NmE2LCAweGQ2NmE3NjNlLCAweDkwYWZiMWY3LCAweGI2NzU4NmQ3LCAweDE0YjZiZDM5LCAweGRhZDNkZjlkLAorCTB4ZjdmNTc4YWYsIDB4YjFiODM1MjAsIDB4OWIwZGM2NDIsIDB4ZmMwMTE4ZTgsIDB4NmRkOWI3ZGQsIDB4MjUzODg5NWIsCisJMHhmZmI4M2ZiOSwgMHgxM2U1NDZiNywgMHhjN2VhM2JlZCwgMHg3M2VhMWZmNywgMHhhYmUwZWJjNCwgMHhmNDE3ZGExMSwKKwkweGQ1MmJlNjE2LCAweGUzMTJiZjhkLCAweGZlYTdlNmViLCAweDU2YjViN2VjLCAweDJkNzhmMDI0LCAweDFiYjdkYTRlLAorCTB4NDlkNzkzYTUsIDB4OGQzYzYwNzgsIDB4NWNmMWExZWMsIDB4YmRlMzBmM2MsIDB4N2FiNDE0MzUsIDB4YmJkYzFlYjAsCisJMHgzMzg1NzgyMCwgMHgyYjNjYzU2OCwgMHg3YzcwOTViNywgMHhjZTViYmZkZiwgMHg2Yzk5ZGZlMywgMHg2NzVmODIyYiwKKwkweGU5NjZkYTcxLCAweDNiZTIzZGZkLCAweDBlMTM2NWYwLCAweDVlYmNhOWY3LCAweDA4ZGI4N2Y2LCAweDQzZjAyOTRmLAorCTB4NzVmZmM4NTMsIDB4OGI1N2M0NGMsIDB4ZmViNmZlYmEsIDB4ZDhmZmEzNjQsIDB4ZjQxNTk4ZmYsIDB4NGFlZDU0NjksCisJMHg1NDllMWQzNCwgMHhiNmU1NzhmOSwgMHhkNzc4NmM1YiwgMHhmMmYxNjZkMCwgMHg4YWJmMDdiYiwgMHgxMGRmN2ZlZiwKKwkweDkwZjkwYmJiLCAweGFkMjc4MWM2LCAweGFlMWY4MjZlLCAweDkzZjY3ZTkwLCAweGVhZGY5MjE1LCAweGI4Zjk0MjczLAorCTB4MjFiMjMxZTcsIDB4MzcyMWVmOTYsIDB4YmY3OWZiM2EsIDB4OWM3ZWY4ZTMsIDB4YzRmZjAzZjAsIDB4MTM3YzYzZTksCisJMHg5ZjcwMDQ5ZiwgMHg0OGMwNmRhZiwgMHgxMjdhYzhkZiwgMHg4MWI2ZGM3OCwgMHg1NWJmOTYxNiwgMHhhOWNkYmYxNiwKKwkweDEzZGVjNzVmLCAweGE1ZTEwYWY5LCAweDgxNWVlNDkxLCAweGIzZmE3MWZkLCAweDFmMTczZmMxLCAweGY3OWIzN2JmLAorCTB4N2JlNGViNDksIDB4ZTJkNzFlNTQsIDB4MzdjYzc5OGMsIDB4ZmYxYWQ3Y2MsIDB4Nzk0OTk3MzQsIDB4YTk3YmU2ZDYsCisJMHhiZGYzYzJjMiwgMHhiNGU1MjVmNCwgMHhkZjBiNzc2ZCwgMHgxMGNkNjk4MywgMHg2MmY5NDUxZSwgMHg1M2U0ZDUzOSwKKwkweDM1NDZkNzkzLCAweDdiYmFkOTJlLCAweGY0ZWJmMDg5LCAweGVlZWZkOTBkLCAweGNmYzEyNzk3LCAweDJiOWQ3NTY1LAorCTB4M2UxMjdhNTQsIDB4YjhiYTEzNWYsIDB4M2QyYWJiZGQsIDB4NzI4YzcyOWIsIDB4ZWUzMGYxOGYsIDB4OWJlZTU1MjksCisJMHgzN2YyODYxNiwgMHg2YmZhNDYxNCwgMHhjOGE1MzZmMywgMHhlMGZmYzBlZiwgMHhiZDJhNTNiMywgMHhmNzIzN2ZkMSwKKwkweGVhYTRmMTU3LCAweGJkNzFkNjhkLCAweDFhN2I2ODcxLCAweDg1NjFjNmY0LCAweGY3MWI1NGYzLCAweGUzNmViZjQ4LAorCTB4ZTcxYzA5OGIsIDB4YWY4ZDhmZmEsIDB4ZWExZWY4ZmUsIDB4ODMxM2M5ZjcsIDB4MTNmN2ZhY2QsIDB4MjdhOTIxNmQsCisJMHg4MjlmYzlkYSwgMHhkYWE1NThkZSwgMHhmZjYyODZmZCwgMHg3Mjc0MmI0ZiwgMHgxN2FkZjZkYywgMHhhYzVjODFhZiwKKwkweGY4YjkyYTE4LCAweDBlZmJjMTRiLCAweGVhZmNkZjQxLCAweDczYmUxZmM1LCAweDVmNjIyYjgzLCAweGRjYWM3ZGI1LAorCTB4MTZkNjZmZjksIDB4NzI2ZjFlODcsIDB4NTYwYWJiOWYsIDB4NDkzY2VmMGEsIDB4NWFjMzljMmYsIDB4MWRmMjI5YjcsCisJMHhmZDhkOGY1OSwgMHhkMWRlOGQ0ZiwgMHhmMjQyZDA3YywgMHhmMDg4ZWFkYiwgMHhhOWZmNDY4MSwgMHg3OGRiMjZmYywKKwkweDVmZDI0ZTNlLCAweDA3YzZiN2EzLCAweDNhMzViZDFhLCAweDlkMjk3YmYxLCAweGZiYWRhZmZmLCAweDJiNWU5NTMzLAorCTB4NTMxZGZlNTQsIDB4ODc0NTZlZTUsIDB4ZTU4YWI2ZGIsIDB4MDU2YjZkZGQsIDB4YjFmYTZiZGYsIDB4NGUzZjU4Y2QsCisJMHg3ZWI4ZTcyNywgMHhjMGI5MDFkZiwgMHg2OWQwMjJiYiwgMHhjNjU1Yjc3NCwgMHhhMDRkMGYyMywgMHhiZWVjMzY1MywKKwkweDZhZDU4ZWI2LCAweDhkNWRiMWRjLCAweGZjZDJhZTFmLCAweDRjN2Y2MmUwLCAweGFiNGU4ZWE1LCAweDZhNzQ5MzlmLAorCTB4NWZlZGU5N2QsIDB4ZmJjNWMwZmYsIDB4NGY2YzdhOTMsIDB4MmI4YmZiMGMsIDB4YmQzMzBlODcsIDB4NjYzZTc3MWEsCisJMHhmNGJmNTM3NSwgMHg1ZjQxYjc0YSwgMHgzODk3NzZiNywgMHhiMTVmMzcxMSwgMHhmOTBhZDA3MywgMHg0ZDc0YWY0ZiwKKwkweGVhNGRlZmNhLCAweGFmMGQ2MGJkLCAweGNlOGEzZmIwLCAweGExZmQ2OWVlLCAweDNjZDMwZWY3LCAweDI2YzQzNzliLAorCTB4MzY4ZDFlZTIsIDB4ZjI1MmI3OGYsIDB4NzI3NzZiNzUsIDB4ZWQ2YmU2MGEsIDB4MzgxZmY5NmUsIDB4M2Y3YTY4Y2YsCisJMHhjNDJlZWU1YSwgMHg0OTU4Nzk0YSwgMHgyZjJlNDI5ZiwgMHhkZWM5ZTJkYywgMHgzZjMxMzg1OCwgMHg5NTk1OTVhNiwKKwkweDEwY2Y2ZTkyLCAweDI1NmY3MTdhLCAweGJiZTg3ZTJiLCAweDAzZDY0M2MwLCAweDkzZTQxZTcxLCAweDQxYzJmMmYzLAorCTB4YzYzZTBiY2MsIDB4MTdhNDZkYmEsIDB4YWYyNWZmNzEsIDB4YWM3YmZjMzMsIDB4YmU3NDVjODMsIDB4MjEzMjgyZWYsCisJMHhkMjNiZTY0NSwgMHg5MjZmZGUwOCwgMHhjYzcyYjNlZiwgMHg1MmFmYmNiMiwgMHgwZjZhM2JkYSwgMHg4NmE0NWRhMSwKKwkweDY4ZmZiMWNiLCAweDVmOTUzNWJkLCAweDM2YTdmMWExLCAweDlhOWViNDRlLCAweDU3Nzc3ZjZhLCAweGEyZmE3OTRhLAorCTB4YWI3MDVkZmQsIDB4NGYwMjkzNzEsIDB4NmRlNjlkYjYsIDB4MDc4ZTc0N2UsIDB4ZGEyZmE0NzEsIDB4ZTY0ZTJkYTcsCisJMHg0YmY3YzY5NywgMHgzMjk1NWFjYywgMHhlNGYzN2VjOSwgMHhmZGVhNjgzOSwgMHg0ZGE2ZDQwZSwgMHg3OTA5ZGZiMiwKKwkweGI0NGU1NTVmLCAweDc5ZTNlZmJiLCAweDI3OTk3ZTkyLCAweGRkOTBhMGI5LCAweDZjMmVlZmEyLCAweDY1ZmJlNTg4LAorCTB4MzhiNGJlZGEsIDB4NWVmYWRmZmQsIDB4MTRjYWMxZTEsIDB4NGUxNGZlMzUsIDB4MTRkOTNmODAsIDB4NDg3ZmNhYTcsCisJMHhhMjVmYThjMiwgMHhmZGVjZDdhYiwgMHgyMTM4NjczOSwgMHgzZjlmYTc0NSwgMHhhMWVkNTZlYSwgMHgzYzgxZWYwOCwKKwkweDgxNWM5ZThiLCAweGZlYjljNzc4LCAweDQyYTYwOTBiLCAweDlmNWNhN2YwLCAweGFiNjZkZGY2LCAweGY0MGY1Y2U3LAorCTB4YmUxOGY2ZGMsIDB4ZDM3ZTRlZWYsIDB4ZGE5M2M0MGUsIDB4YTcxY2M5MDMsIDB4ZWNhN2FmYjksIDB4ZTcxYTVlZTIsCisJMHhmYzU5NmRiZSwgMHhmM2YzNTBkZSwgMHgyZmZhYTk1NywgMHg4ZWNiNzM3ZSwgMHhlYmRmZjQ0YSwgMHg2ZjhmYzI3NiwKKwkweDg4NmNmODc3LCAweDJjMGZjNWMzLCAweGRmYjBlNWIxLCAweDVhMDFjZjJiLCAweDIyYjM2YWRlLCAweDBjOWVmYzdjLAorCTB4NjU3MjExZmEsIDB4N2IwNzkxM2EsIDB4ZjRhZjdhYjMsIDB4NjI0ZGViZmYsIDB4YjM5YmYyMjcsIDB4MzM4YjdjZmIsCisJMHg1MjllMWZhMSwgMHhjNTI3ZjAzYywgMHhkYWEzZDIzZSwgMHhjNzc0OGM3OSwgMHg2ZmJlYzU4NywgMHhlZjY4YmY0MSwKKwkweGM2YzJlNmVmLCAweDIxOWZiMTlhLCAweDgyOWRjZTJmLCAweDA3ZWMwYmZjLCAweGE2NWUwMWViLCAweDZlNzFmY2E5LAorCTB4YWI4MjdjZTAsIDB4MmZjZjgyMzAsIDB4ZTM0ODFlZmIsIDB4ZDY3ZjJkMGIsIDB4MTk0ZmY4OGUsIDB4MGQyOWEzZjgsCisJMHhlNmE2ZDFmYywgMHgyYzBjNzZjOSwgMHg3MDdkYjg2MiwgMHhlOWZiYmYxOSwgMHg0NzNhNjc0MywgMHhmYjU2M2RiNiwKKwkweGVmMDhhMDQ0LCAweGRhM2UyNTc4LCAweDA5ZGQxNmJhLCAweDdmNjNhOGJmLCAweDM1Y2UzMjRjLCAweGI2NDBkNmQ5LAorCTB4MWI2ZDBmZGUsIDB4MDFkZjk4N2MsIDB4ZTU4YzFhNWQsIDB4Y2UzNTQwNzcsIDB4NjdiODM1MjUsIDB4N2M5ZjZhYjMsCisJMHgzYmY1YTc2NywgMHhiNTk3ZWFhMSwgMHhlZjBjOGI1ZCwgMHg0YzY5ZGE3OSwgMHhkOWZmOGQyNywgMHg1ZmRmM2M1MCwKKwkweDA0ZTlkZWQzLCAweDk1ZTNmZWVjLCAweDRlYmRmMmU1LCAweGQzYmU0YmI1LCAweGFlZmVlNGM5LCAweDVhZjRlMzQ5LAorCTB4YmU1N2IxNzksIDB4M2JiZGQwZmIsIDB4YmU5MWIzYmEsIDB4MjU3YWVjZWYsIDB4N2JhY2UzMTEsIDB4NGUxNTY3ZmMsCisJMHhjZWI3YzcxMywgMHg3N2YxZmM2MCwgMHhiYmU1N2I0NywgMHgyN2M3ZjZhMywgMHhiZTAzZmY3ZiwgMHgxYzc2N2YwNiwKKwkweGM2NzkwYzUzLCAweGVjNDk4MmZiLCAweGMyNDNmYTg3LCAweGRmYjZmYzg2LCAweGJkY2ZkODI5LCAweGIwM2QxNjY0LAorCTB4YTI1ZjlhZWIsIDB4YzU1MmZmZDUsIDB4ZmVhNGE1YzMsIDB4Y2Q3ZmQwNmMsIDB4NjFiMzI3ODEsIDB4MjA5MzdlMzcsCisJMHhmNzAzYTZlMSwgMHhjODdhMDhmZSwgMHhmNDhjN2NmZiwgMHhmZDgyMmRiZiwgMHhmNDgwZDZkYiwgMHg2NGY3YjU5NywKKwkweDM4ZWM3ODQyLCAweDE5NTQ3Zjg3LCAweDQ2YjlmMmNmLCAweGFkYTQ5NzdkLCAweGFlMGJmYzhiLCAweGQ0NDU4ZGZmLAorCTB4NmY3ODFkNjEsIDB4ZGY3ZTdlMDQsIDB4M2QwNzZhMTIsIDB4MTQ3ZjI3ZGYsIDB4MmExMzhmNzksIDB4NmZkZmJkZmYsCisJMHg4N2Y3Y2M1ZSwgMHg1N2UwMTA0OCwgMHg0YWZmZGZiYywgMHg5YTg5ZjIwMiwgMHhmZTZiNTYxZiwgMHhiNGVmMTc5NSwKKwkweGVmOTUxZTM3LCAweDg3MGJlMzgxLCAweGQ0MjMxY2Y5LCAweGE3N2FjOTc4LCAweGRmOGRiN2U0LCAweDRhY2UyZWI3LAorCTB4NmI4YWJmNjUsIDB4ZGIyMTJkM2EsIDB4YWI1YWY0NjQsIDB4ZjBlMzRkZmEsIDB4MmU3Y2MzOTEsIDB4ZmQyNDNjZWIsCisJMHhmM2ExY2U4MiwgMHg3ZTY4MTdlYywgMHg3MGJlZjY4NiwgMHhlY2YzYTFkZCwgMHhhZGRmNjgyNywgMHhkMmYxMjIzZiwKKwkweGI3ZDY0NDc1LCAweDc4YjQ5ODE0LCAweGMzYzk1NzhiLCAweDM4NjE1OTc5LCAweGI0ZDJjMmJmLCAweDliOWIwMGQ1LAorCTB4M2E1MDVhYjYsIDB4MDhjODc4ZDUsIDB4MGFiYmU1ZmIsIDB4OTllN2NhN2UsIDB4YjhlYTZkYWUsIDB4ZjM3NTViMDQsCisJMHg5NzRkNTZjNSwgMHgzZWE4ZGFlZiwgMHhhNWVmODFkNywgMHhiYmRhZDczZCwgMHg1MGYzYzg4ZSwgMHgyNzZlMmJhOCwKKwkweGVmNWQ4M2RmLCAweGViZWNhMGIwLCAweGRmM2RiMDcyLCAweGMwMmE2ZGQ3LCAweDEyYWY3NTdkLCAweDcxZGNmZWM3LAorCTB4ZjRkNmZlZjUsIDB4MjJjNmVmNzUsIDB4NDYyOTkwNGUsIDB4N2NkYzk5NGUsIDB4MTU2NjZiNmYsIDB4MDIyZTliOGQsCisJMHg3YjRiOGY3YywgMHg5ZmU1NzQ0ZiwgMHhmOGMzMmUzZiwgMHhhZmMyNjIwYiwgMHg1Yjk4MDIyMCwgMHg3OTA5YTMzNSwKKwkweGUxNDkwNTkzLCAweGY3M2M2MDMyLCAweGQzODRiYTU4LCAweDBlMjBhZmMzLCAweDM3MjQwY2U1LCAweGE1ZjI4ZjIxLAorCTB4OGFmNTRhZTMsIDB4MzBlZWNlMjEsIDB4MGEwN2FmZjksIDB4ZGIyZWM2YmEsIDB4YzQ2MzVjNjQsIDB4NTc5OWI5MDYsCisJMHhmYTY4ZjkyNSwgMHhlMjQ3M2E0OSwgMHg4M2I5ZjUxYywgMHhkM2U5ODFjZiwgMHg5YjlkZjliYSwgMHhhMTk3MGMyOCwKKwkweDgzN2M3MWRmLCAweDhjN2Y2MGZiLCAweDQyMGVmZjkzLCAweGY2ZjU5NzllLCAweDAyNzU1OGM2LCAweDNkZTk5Nzk3LAorCTB4YTQyNWFlYWEsIDB4OWYwMzYzZTYsIDB4ZjdmODgyOWIsIDB4YTEyYjhlMDQsIDB4YmNmZGViNmYsIDB4NGYyOTJhZWUsCisJMHg5Nzk5MThiZSwgMHhjZWIxNGJiZCwgMHhlNGZhMjdmYSwgMHg4MzVmZGI5MCwgMHhjYzcyZmE3NSwgMHhiOGI5MjU0NSwKKwkweDdkZWYyYjE3LCAweGI3ZjM1MTVmLCAweDUwYmNiZjlhLCAweDdhOTY3NjlkLCAweGM4Y2RiM2NlLCAweGI0ZmU0MDcwLAorCTB4ZDc4YTg5ZmIsIDB4MWY1MmVmY2IsIDB4OGFkOTNjMmEsIDB4YzQ3MzdmNzUsIDB4MTYyMGVmY2UsIDB4NzNjOWM0OGUsCisJMHhiNjNhOGNkNSwgMHhkOWIxN2RhZiwgMHgyZTI4M2ZlYywgMHhmZWEyNjg4YiwgMHgyMTRkMGIyNywgMHhhNmZmZGZkYywKKwkweDU5OWU3M2IwLCAweDZkZmNhM2Q4LCAweGMzZGYyYzUzLCAweGYxYmY4ZTU2LCAweDk2NGRlYzM5LCAweDkyYTdmN2Y5LAorCTB4ZmY1OTlmNjgsIDB4OGJhMDc4YTAsIDB4ZmUyZjQ3OWIsIDB4NmNhODRmZTMsIDB4MTg3ZmRiMWEsIDB4ZmU0OTExZmIsCisJMHhiOWMzZjA2NiwgMHg3ZWYzYmFkMSwgMHg5ZDM3ZjU0MiwgMHhiNDhmNzY0MywgMHg4ZmJmNDI2MywgMHg5ZTdlMGZlMywKKwkweGFjOGE2Mjk4LCAweGM1YzhjYWVmLCAweDg3OWQ1ZjE3LCAweGU5ZjFjZWQyLCAweDMyY2RjNzg1LCAweDllYjUxNTllLAorCTB4YmUyZTE5MmIsIDB4OThmZDRlMGYsIDB4YTYxYzU3M2UsIDB4MGI4N2NlMjAsIDB4MGY3YTlmOGYsIDB4N2I4ODViZWIsCisJMHhkODM3MzhjZSwgMHhmNmY1OTdhZCwgMHgyNTY2Yjg0ZSwgMHgxNTBlN2UyMywgMHg4OGFjOTdmYSwgMHhiNTQwNzgzZSwKKwkweGFlN2Q2OTRiLCAweDdiMDhkYzlmLCAweDIwNTlhNmY5LCAweDY1MTQ0MGVlLCAweDA3ZDY4ODNlLCAweDQyNWY4MzNmLAorCTB4YWEzN2M2ZmUsIDB4MDdlZDc5ZTQsIDB4NTQ2ZmJlMzksIDB4NjcwNjVjYjEsIDB4OWJlNzJlNDEsIDB4YjY5ZmJmMjcsCisJMHhlMzUxNGFhZiwgMHhkMWFlOTI1OSwgMHg4YmE2OGI3NCwgMHhlNzcxNmY4NiwgMHg4NTI0ZTlmMCwgMHhhOGY0NWNmMSwKKwkweGM2MmVlZmM0LCAweGI3NjdlN2VmLCAweDE5OGE5ODkzLCAweGM2MzZmYmZmLCAweGY4NmZmZmYzLCAweGNhN2RlMmZkLAorCTB4ZmJlMzczZjcsIDB4ZDNlZDNhZmMsIDB4NzdlN2Q4NmQsIDB4OTNlZDFmZmUsIDB4YmNkZmMwZjUsIDB4M2VlMzYxY2YsCisJMHhiMTQyZmFkMywgMHg4ZjM3YzA3MywgMHg4YWNmZDg5YiwgMHgwYTJhMzdiZSwgMHg2NmQxZWIwNCwgMHg1M2M3MWM3MywKKwkweGRkZjI3MWZkLCAweGQzY2ZlOTAxLCAweGRlOWE5ZmQwLCAweDJlMTc1ZDljLCAweDRlNzFiZjgyLCAweGFlYjE2Nzg4LAorCTB4ZWI4ODY5YjAsIDB4MzBlNTU2MmYsIDB4YzMxNGNjZGYsIDB4YzI3ZWZjOTksIDB4M2Y4NzJlMTIsIDB4MzViZmI2NmIsCisJMHg0YmIyMjNmNywgMHgwZjA0OGYwMywgMHhmNGUzNGFiZiwgMHg1NmE3YzEyOSwgMHhlZGRkNWY0MSwgMHg5NWRjZmNlMCwKKwkweGE1NjAyOWEwLCAweDQ1OTIwNjc5LCAweDdmOWEzMWYxLCAweGNlNWNjZDYwLCAweGFhMTE1Y2IzLCAweGIxYjA2YTllLAorCTB4ZWNmNmEyOWUsIDB4Y2EzN2I0MWUsIDB4ZjlmZGVmZjYsIDB4YTNmODFlYzIsIDB4Zjc4MmY5MjMsIDB4YWUyMjUwMzMsCisJMHhjMGYwNGJkOSwgMHhmZjZlMDI5MiwgMHhmNmU3YTZhMSwgMHg5N2VmYzgyNCwgMHg4MTkzZTYwOCwgMHhlZjdjMjkzNSwKKwkweDgzYTdlOWU0LCAweDBlOGVjMmQ3LCAweDExMzM3YTBjLCAweGY0NGNhYjU3LCAweDE5Yzc0MTg3LCAweDA3OWY2OTY2LAorCTB4ZTU0ZjU0ZGMsIDB4YjFhZjhhMTMsIDB4YzkxNGUzMWQsIDB4ZTMxYjg2ZjUsIDB4NDM0MDNhNWUsIDB4MmE5MWU2YzUsCisJMHgzZDczZmFhNSwgMHhkNWNmOWMwOSwgMHg2MzhiNDdlNCwgMHg3ZjljMGVjZiwgMHhkZWQyNzgwYSwgMHhmMmEwN2YyMywKKwkweGM1Nzc4Njk5LCAweGE2NjdkZjJiLCAweGU4ZDY3OGFhLCAweDZhNWJmMWEwLCAweGE2Y2Y3YzljLCAweDM3N2M5MTZjLAorCTB4YmQ3OTFmN2UsIDB4MzNjOGZiZTAsIDB4Mjc3ODI5NjksIDB4NzFlMzFjZDcsIDB4NGFkZmRmMDEsIDB4ZmQ2MThmZjIsCisJMHgzZTg4MWI3ZCwgMHhkMjQzZWM2NiwgMHg1YmRlMWNlMSwgMHg5OTdmZTI0ZSwgMHg3ZTVhNGRhYiwgMHgzNDYzZGY5ZiwKKwkweDlhNWZhOTBiLCAweDNkMTdmN2I1LCAweDIyMTdmN2M2LCAweGVmMTkzMzNjLCAweGU4OWY5ODkxLCAweDNlZGQ2N2ZiLAorCTB4NWZiZTM1NWIsIDB4ZDJmYjY1ZWUsIDB4ZDlkZWYyYWMsIDB4N2E0ZjM0ZmYsIDB4NWFhOTI4NmYsIDB4NjIzYjk1ZGEsCisJMHg5ZGZjODlmZCwgMHhmMzQ1MGVmYSwgMHg3Yzk2Y2ZjMywgMHhlNGY2MGIzYywgMHhjYzZmODNkYywgMHhhMjU3Nzk0NCwKKwkweGY2OWFiOTJmLCAweDFmZTM0NGYzLCAweDdkYzRjMzE2LCAweGY3ZTYxOTkwLCAweGZlMzQxZjM0LCAweGU1YzcxNjcxLAorCTB4ZmNjMWJjYjcsIDB4NTdhZWI3ZmYsIDB4MDFmZmM3NWIsIDB4MDkzNGUxNzAsIDB4MDAwMDQ4ZDAKIH07CiAKICNlbmRpZiAvKl9fQk5YMlhfSU5JVF9WQUxVRVNfSF9fKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjI3NDNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCkBAIC0wLDAgKzEsNDUyNyBAQAorLyogQ29weXJpZ2h0IDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZQorICogYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLmh0bWwgKHRoZSAiR1BMIikuCisgKgorICogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworICogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisgKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorICogY29uc2VudC4KKyAqCisgKiBXcml0dGVuIGJ5IFlhbml2IFJvc25lcgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgImJueDJ4X3JlZy5oIgorI2luY2x1ZGUgImJueDJ4X2Z3X2RlZnMuaCIKKyNpbmNsdWRlICJibngyeF9oc2kuaCIKKyNpbmNsdWRlICJibngyeF9saW5rLmgiCisjaW5jbHVkZSAiYm54MnguaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTVVBQT1JUX0NMNzMgMCAvKiBDdXJyZW50bHkgbm8gKi8KKyNkZWZpbmUgRVRIX0hMRU4gCQkJMTQKKyNkZWZpbmUgRVRIX09WUkVIRUFECQkoRVRIX0hMRU4gKyA4KS8qIDggZm9yIENSQyArIFZMQU4qLworI2RlZmluZSBFVEhfTUlOX1BBQ0tFVF9TSVpFCQk2MAorI2RlZmluZSBFVEhfTUFYX1BBQ0tFVF9TSVpFCQkxNTAwCisjZGVmaW5lIEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUJOTYwMAorI2RlZmluZSBNRElPX0FDQ0VTU19USU1FT1VUCQkxMDAwCisjZGVmaW5lIEJNQUNfQ09OVFJPTF9SWF9FTkFCTEUJMgorI2RlZmluZSBNQVhfTVRVX1NJWkUJCTUwMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgIFNob3J0Y3V0IGRlZmluaXRpb25zICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE5JR19TVEFUVVNfWEdYUzBfTElOSzEwRyBcCisJCU5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfWEdYUzBfTElOSzEwRworI2RlZmluZSBOSUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTIFwKKwkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVUworI2RlZmluZSBOSUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTX1NJWkUgXAorCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTX1NJWkUKKyNkZWZpbmUgTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTIFwKKwkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTCisjZGVmaW5lIE5JR19NQVNLX01JX0lOVCBcCisJCU5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19FTUFDMF9NSVNDX01JX0lOVAorI2RlZmluZSBOSUdfTUFTS19YR1hTMF9MSU5LMTBHIFwKKwkJTklHX01BU0tfSU5URVJSVVBUX1BPUlQwX1JFR19NQVNLX1hHWFMwX0xJTksxMEcKKyNkZWZpbmUgTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgXAorCQlOSUdfTUFTS19JTlRFUlJVUFRfUE9SVDBfUkVHX01BU0tfWEdYUzBfTElOS19TVEFUVVMKKyNkZWZpbmUgTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUyBcCisJCU5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTCisKKyNkZWZpbmUgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFIFwKKwkJKE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0NMNzNfQVVUT05FR19DT01QTEVURSB8IFwKKwkJIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0NMMzdfQVVUT05FR19DT01QTEVURSkKKworI2RlZmluZSBYR1hTX1JFU0VUX0JJVFMgXAorCShNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfUlNUQl9IVyB8ICAgXAorCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfSUREUSB8ICAgICAgXAorCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfUFdSRFdOIHwgICAgXAorCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfUFdSRFdOX1NEIHwgXAorCSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfVFhEX0ZJRk9fUlNUQikKKworI2RlZmluZSBTRVJERVNfUkVTRVRfQklUUyBcCisJKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9TRVJERVMwX1JTVEJfSFcgfCBcCisJIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9TRVJERVMwX0lERFEgfCAgICBcCisJIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9TRVJERVMwX1BXUkRXTiB8ICBcCisJIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX01JU0NfTklHX01VWF9TRVJERVMwX1BXUkRXTl9TRCkKKworI2RlZmluZSBBVVRPTkVHX0NMMzcJCVNIQVJFRF9IV19DRkdfQU5fRU5BQkxFX0NMMzcKKyNkZWZpbmUgQVVUT05FR19DTDczCQlTSEFSRURfSFdfQ0ZHX0FOX0VOQUJMRV9DTDczCisjZGVmaW5lIEFVVE9ORUdfQkFNCQkJU0hBUkVEX0hXX0NGR19BTl9FTkFCTEVfQkFNCisjZGVmaW5lIEFVVE9ORUdfUEFSQUxMRUwJCVwKKwkJCQlTSEFSRURfSFdfQ0ZHX0FOX0VOQUJMRV9QQVJBTExFTF9ERVRFQ1RJT04KKyNkZWZpbmUgQVVUT05FR19TR01JSV9GSUJFUl9BVVRPREVUCVwKKwkJCQlTSEFSRURfSFdfQ0ZHX0FOX0VOX1NHTUlJX0ZJQkVSX0FVVE9fREVURUNUCisjZGVmaW5lIEFVVE9ORUdfUkVNT1RFX1BIWQkJU0hBUkVEX0hXX0NGR19BTl9FTkFCTEVfUkVNT1RFX1BIWQorCisjZGVmaW5lIEdQX1NUQVRVU19QQVVTRV9SU09MVVRJT05fVFhTSURFIFwKKwkJCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX1BBVVNFX1JTT0xVVElPTl9UWFNJREUKKyNkZWZpbmUgR1BfU1RBVFVTX1BBVVNFX1JTT0xVVElPTl9SWFNJREUgXAorCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfUEFVU0VfUlNPTFVUSU9OX1JYU0lERQorI2RlZmluZSBHUF9TVEFUVVNfU1BFRURfTUFTSyBcCisJCQlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfTUFTSworI2RlZmluZSBHUF9TVEFUVVNfMTBNCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xME0KKyNkZWZpbmUgR1BfU1RBVFVTXzEwME0JTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwME0KKyNkZWZpbmUgR1BfU1RBVFVTXzFHCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xRworI2RlZmluZSBHUF9TVEFUVVNfMl81RwlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMl81RworI2RlZmluZSBHUF9TVEFUVVNfNUcJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzVHCisjZGVmaW5lIEdQX1NUQVRVU182RwlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfNkcKKyNkZWZpbmUgR1BfU1RBVFVTXzEwR19ISUcgXAorCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwR19ISUcKKyNkZWZpbmUgR1BfU1RBVFVTXzEwR19DWDQgXAorCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwR19DWDQKKyNkZWZpbmUgR1BfU1RBVFVTXzEyR19ISUcgXAorCQkJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEyR19ISUcKKyNkZWZpbmUgR1BfU1RBVFVTXzEyXzVHIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMl81RworI2RlZmluZSBHUF9TVEFUVVNfMTNHCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xM0cKKyNkZWZpbmUgR1BfU1RBVFVTXzE1RwlNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTVHCisjZGVmaW5lIEdQX1NUQVRVU18xNkcJTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzE2RworI2RlZmluZSBHUF9TVEFUVVNfMUdfS1ggTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzFHX0tYCisjZGVmaW5lIEdQX1NUQVRVU18xMEdfS1g0IFwKKwkJCU1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMEdfS1g0CisKKyNkZWZpbmUgTElOS18xMFRIRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBUSEQKKyNkZWZpbmUgTElOS18xMFRGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBURkQKKyNkZWZpbmUgTElOS18xMDBUWEhECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMFRYSEQKKyNkZWZpbmUgTElOS18xMDBUNAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwVDQKKyNkZWZpbmUgTElOS18xMDBUWEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMFRYRkQKKyNkZWZpbmUgTElOS18xMDAwVEhECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBUSEQKKyNkZWZpbmUgTElOS18xMDAwVEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBURkQKKyNkZWZpbmUgTElOS18xMDAwWEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBYRkQKKyNkZWZpbmUgTElOS18yNTAwVEhECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBUSEQKKyNkZWZpbmUgTElOS18yNTAwVEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBURkQKKyNkZWZpbmUgTElOS18yNTAwWEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBYRkQKKyNkZWZpbmUgTElOS18xMEdURkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwR1RGRAorI2RlZmluZSBMSU5LXzEwR1hGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBHWEZECisjZGVmaW5lIExJTktfMTJHVEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMkdURkQKKyNkZWZpbmUgTElOS18xMkdYRkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEyR1hGRAorI2RlZmluZSBMSU5LXzEyXzVHVEZECQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEyXzVHVEZECisjZGVmaW5lIExJTktfMTJfNUdYRkQJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTJfNUdYRkQKKyNkZWZpbmUgTElOS18xM0dURkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEzR1RGRAorI2RlZmluZSBMSU5LXzEzR1hGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTNHWEZECisjZGVmaW5lIExJTktfMTVHVEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNUdURkQKKyNkZWZpbmUgTElOS18xNUdYRkQJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzE1R1hGRAorI2RlZmluZSBMSU5LXzE2R1RGRAkJCUxJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTZHVEZECisjZGVmaW5lIExJTktfMTZHWEZECQkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNkdYRkQKKworI2RlZmluZSBQSFlfWEdYU19GTEFHCQkJMHgxCisjZGVmaW5lIFBIWV9TR01JSV9GTEFHCQkJMHgyCisjZGVmaW5lIFBIWV9TRVJERVNfRkxBRwkJCTB4NAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENMNDVfV1JfT1ZFUl9DTDIyKF9icCwgX3BvcnQsIF9waHlfYWRkciwgX2JhbmssIF9hZGRyLCBfdmFsKSBcCisJYm54MnhfY2w0NV93cml0ZShfYnAsIF9wb3J0LCAwLCBfcGh5X2FkZHIsIFwKKwkJREVGQVVMVF9QSFlfREVWX0FERFIsIFwKKwkJKF9iYW5rICsgKF9hZGRyICYgMHhmKSksIFwKKwkJX3ZhbCkKKworI2RlZmluZSBDTDQ1X1JEX09WRVJfQ0wyMihfYnAsIF9wb3J0LCBfcGh5X2FkZHIsIF9iYW5rLCBfYWRkciwgX3ZhbCkgXAorCWJueDJ4X2NsNDVfcmVhZChfYnAsIF9wb3J0LCAwLCBfcGh5X2FkZHIsIFwKKwkJREVGQVVMVF9QSFlfREVWX0FERFIsIFwKKwkJKF9iYW5rICsgKF9hZGRyICYgMHhmKSksIFwKKwkJX3ZhbCkKKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X3BoeV9tZGlvKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX1NUICsKKwkJICAgcGFyYW1zLT5wb3J0KjB4MTgsIDApOworCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsgcGFyYW1zLT5wb3J0KjB4MTgsCisJCSAgIERFRkFVTFRfUEhZX0RFVl9BRERSKTsKK30KKworc3RhdGljIHUzMiBibngyeF9iaXRzX2VuKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiBiaXRzKQoreworCXUzMiB2YWwgPSBSRUdfUkQoYnAsIHJlZyk7CisKKwl2YWwgfD0gYml0czsKKwlSRUdfV1IoYnAsIHJlZywgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdTMyIGJueDJ4X2JpdHNfZGlzKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiBiaXRzKQoreworCXUzMiB2YWwgPSBSRUdfUkQoYnAsIHJlZyk7CisKKwl2YWwgJj0gfmJpdHM7CisJUkVHX1dSKGJwLCByZWcsIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZW1hY19pbml0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJICAgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3sKKwkvKiByZXNldCBhbmQgdW5yZXNldCB0aGUgZW1hYyBjb3JlICovCisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1MzIgZW1hY19iYXNlID0gcG9ydCA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOworCXUzMiB2YWw7CisJdTE2IHRpbWVvdXQ7CisKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAorCQkgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0VNQUMwX0hBUkRfQ09SRSA8PCBwb3J0KSk7CisJdWRlbGF5KDUpOworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfU0VULAorCQkgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0VNQUMwX0hBUkRfQ09SRSA8PCBwb3J0KSk7CisKKwkvKiBpbml0IGVtYWMgLSB1c2UgcmVhZC1tb2RpZnktd3JpdGUgKi8KKwkvKiBzZWxmIGNsZWFyIHJlc2V0ICovCisJdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01PREUpOworCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19NT0RFLCAodmFsIHwgRU1BQ19NT0RFX1JFU0VUKSk7CisKKwl0aW1lb3V0ID0gMjAwOworCWRvCisJeworCQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTU9ERSk7CisJCURQKE5FVElGX01TR19MSU5LLCAiRU1BQyByZXNldCByZWcgaXMgJXVcbiIsIHZhbCk7CisJCWlmICghdGltZW91dCkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJFTUFDIHRpbWVvdXQhXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQl0aW1lb3V0LS07CisJfXdoaWxlICh2YWwgJiBFTUFDX01PREVfUkVTRVQpOworCisJLyogU2V0IG1hYyBhZGRyZXNzICovCisJdmFsID0gKChwYXJhbXMtPm1hY19hZGRyWzBdIDw8IDgpIHwKKwkJcGFyYW1zLT5tYWNfYWRkclsxXSk7CisJRU1BQ19XUihFTUFDX1JFR19FTUFDX01BQ19NQVRDSCwgdmFsKTsKKworCXZhbCA9ICgocGFyYW1zLT5tYWNfYWRkclsyXSA8PCAyNCkgfAorCSAgICAgICAocGFyYW1zLT5tYWNfYWRkclszXSA8PCAxNikgfAorCSAgICAgICAocGFyYW1zLT5tYWNfYWRkcls0XSA8PCA4KSB8CisJCXBhcmFtcy0+bWFjX2FkZHJbNV0pOworCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19NQUNfTUFUQ0ggKyA0LCB2YWwpOworfQorCitzdGF0aWMgdTggYm54MnhfZW1hY19lbmFibGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsIHU4IGxiKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTMyIGVtYWNfYmFzZSA9IHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwl1MzIgdmFsOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGluZyBFTUFDXG4iKTsKKworCS8qIGVuYWJsZSBlbWFjIGFuZCBub3QgYm1hYyAqLworCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfUE9SVCArIHBvcnQqNCwgMSk7CisKKwkvKiBmb3IgcGFsYWRpdW0gKi8KKwlpZiAoQ0hJUF9SRVZfSVNfRU1VTChicCkpIHsKKwkJLyogVXNlIGxhbmUgMSAob2YgbGFuZXMgMC0zKSAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19MQU5FX1NFTF9QMCArIHBvcnQqNCwgMSk7CisJCVJFR19XUihicCwgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKworCQkJICAgIHBvcnQqNCwgMSk7CisJfQorCS8qIGZvciBmcGdhICovCisJZWxzZQorCisJaWYgKENISVBfUkVWX0lTX0ZQR0EoYnApKSB7CisJCS8qIFVzZSBsYW5lIDEgKG9mIGxhbmVzIDAtMykgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9lbWFjX2VuYWJsZTogU2V0dGluZyBGUEdBXG4iKTsKKworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19MQU5FX1NFTF9QMCArIHBvcnQqNCwgMSk7CisJCVJFR19XUihicCwgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKyBwb3J0KjQsCisJCQkgICAgMCk7CisJfSBlbHNlCisJLyogQVNJQyAqLworCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCXUzMiBzZXJfbGFuZSA9ICgocGFyYW1zLT5sYW5lX2NvbmZpZyAmCisJCQkgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfTUFTSykgPj4KKwkJCSAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9TSElGVCk7CisKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTXG4iKTsKKwkJLyogc2VsZWN0IHRoZSBtYXN0ZXIgbGFuZXMgKG91dCBvZiAwLTMpICovCisJCVJFR19XUihicCwgTklHX1JFR19YR1hTX0xBTkVfU0VMX1AwICsKKwkJCSAgIHBvcnQqNCwgc2VyX2xhbmUpOworCQkvKiBzZWxlY3QgWEdYUyAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsKKwkJCSAgIHBvcnQqNCwgMSk7CisKKwl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXNcbiIpOworCQkvKiBzZWxlY3QgU2VyRGVzICovCisJCVJFR19XUihicCwgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKworCQkJICAgcG9ydCo0LCAwKTsKKwl9CisKKwkvKiBlbmFibGUgZW1hYyAqLworCVJFR19XUihicCwgTklHX1JFR19OSUdfRU1BQzBfRU4gKyBwb3J0KjQsIDEpOworCisJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKSB7CisJCS8qIGNvbmZpZyBHTUlJIG1vZGUgKi8KKwkJdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01PREUpOworCQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTU9ERSwKKwkJCSAgICAodmFsIHwgRU1BQ19NT0RFX1BPUlRfR01JSSkpOworCX0gZWxzZSB7IC8qIEFTSUMgKi8KKwkJLyogcGF1c2UgZW5hYmxlL2Rpc2FibGUgKi8KKwkJYm54MnhfYml0c19kaXMoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSwKKwkJCSAgICAgICBFTUFDX1JYX01PREVfRkxPV19FTik7CisJCWlmICh2YXJzLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfUlgpCisJCQlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKworCQkJCSAgICBFTUFDX1JFR19FTUFDX1JYX01PREUsCisJCQkJICAgIEVNQUNfUlhfTU9ERV9GTE9XX0VOKTsKKworCQlibngyeF9iaXRzX2RpcyhicCwgIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfVFhfTU9ERSwKKwkJCSAgICAgICBFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOKTsKKwkJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9UWCkKKwkJCWJueDJ4X2JpdHNfZW4oYnAsIGVtYWNfYmFzZSArCisJCQkJICAgIEVNQUNfUkVHX0VNQUNfVFhfTU9ERSwKKwkJCQkgICAgICBFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOKTsKKwl9CisKKwkvKiBLRUVQX1ZMQU5fVEFHLCBwcm9taXNjdW91cyAqLworCXZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19SWF9NT0RFKTsKKwl2YWwgfD0gRU1BQ19SWF9NT0RFX0tFRVBfVkxBTl9UQUcgfCBFTUFDX1JYX01PREVfUFJPTUlTQ1VPVVM7CisJRU1BQ19XUihFTUFDX1JFR19FTUFDX1JYX01PREUsIHZhbCk7CisKKwkvKiBTZXQgTG9vcGJhY2sgKi8KKwl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTU9ERSk7CisJaWYgKGxiKQorCQl2YWwgfD0gMHg4MTA7CisJZWxzZQorCQl2YWwgJj0gfjB4ODEwOworCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19NT0RFLCB2YWwpOworCisJLyogZW5hYmxlIGVtYWMgZm9yIGp1bWJvIHBhY2tldHMgKi8KKwlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfUlhfTVRVX1NJWkUsCisJCShFTUFDX1JYX01UVV9TSVpFX0pVTUJPX0VOQSB8CisJCSAoRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSArIEVUSF9PVlJFSEVBRCkpKTsKKworCS8qIHN0cmlwIENSQyAqLworCVJFR19XUihicCwgTklHX1JFR19OSUdfSU5HUkVTU19FTUFDMF9OT19DUkMgKyBwb3J0KjQsIDB4MSk7CisKKwkvKiBkaXNhYmxlIHRoZSBOSUcgaW4vb3V0IHRvIHRoZSBibWFjICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX0lOX0VOICsgcG9ydCo0LCAweDApOworCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9QQVVTRV9PVVRfRU4gKyBwb3J0KjQsIDB4MCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX09VVF9FTiArIHBvcnQqNCwgMHgwKTsKKworCS8qIGVuYWJsZSB0aGUgTklHIGluL291dCB0byB0aGUgZW1hYyAqLworCVJFR19XUihicCwgTklHX1JFR19FTUFDMF9JTl9FTiArIHBvcnQqNCwgMHgxKTsKKwl2YWwgPSAwOworCWlmICh2YXJzLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfVFgpCisJCXZhbCA9IDE7CisKKwlSRUdfV1IoYnAsIE5JR19SRUdfRU1BQzBfUEFVU0VfT1VUX0VOICsgcG9ydCo0LCB2YWwpOworCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfT1VUX0VOICsgcG9ydCo0LCAweDEpOworCisJaWYgKENISVBfUkVWX0lTX0VNVUwoYnApKSB7CisJCS8qIHRha2UgdGhlIEJpZ01hYyBvdXQgb2YgcmVzZXQgKi8KKwkJUkVHX1dSKGJwLAorCQkJICAgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfU0VULAorCQkJICAgKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9CTUFDMCA8PCBwb3J0KSk7CisKKwkJLyogZW5hYmxlIGFjY2VzcyBmb3IgYm1hYyByZWdpc3RlcnMgKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX1JFR1NfT1VUX0VOICsgcG9ydCo0LCAweDEpOworCX0KKworCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfRU1BQzsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyB1OCBibngyeF9ibWFjX2VuYWJsZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJCSAgdTggaXNfbGIpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1MzIgYm1hY19hZGRyID0gcG9ydCA/IE5JR19SRUdfSU5HUkVTU19CTUFDMV9NRU0gOgorCQkJICAgICAgIE5JR19SRUdfSU5HUkVTU19CTUFDMF9NRU07CisJdTMyIHdiX2RhdGFbMl07CisJdTMyIHZhbDsKKworCURQKE5FVElGX01TR19MSU5LLCAiRW5hYmxpbmcgQmlnTUFDXG4iKTsKKwkvKiByZXNldCBhbmQgdW5yZXNldCB0aGUgQmlnTWFjICovCisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9DTEVBUiwKKwkgICAgICAgKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9CTUFDMCA8PCBwb3J0KSk7CisJbXNsZWVwKDEpOworCisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsCisJICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOworCisJLyogZW5hYmxlIGFjY2VzcyBmb3IgYm1hYyByZWdpc3RlcnMgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfUkVHU19PVVRfRU4gKyBwb3J0KjQsIDB4MSk7CisKKwkvKiBYR1hTIGNvbnRyb2wgKi8KKwl3Yl9kYXRhWzBdID0gMHgzYzsKKwl3Yl9kYXRhWzFdID0gMDsKKwlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsKKwkJICAgICAgQklHTUFDX1JFR0lTVEVSX0JNQUNfWEdYU19DT05UUk9MLAorCQkgICAgICB3Yl9kYXRhLCAyKTsKKworCS8qIHR4IE1BQyBTQSAqLworCXdiX2RhdGFbMF0gPSAoKHBhcmFtcy0+bWFjX2FkZHJbMl0gPDwgMjQpIHwKKwkJICAgICAgIChwYXJhbXMtPm1hY19hZGRyWzNdIDw8IDE2KSB8CisJCSAgICAgICAocGFyYW1zLT5tYWNfYWRkcls0XSA8PCA4KSB8CisJCQlwYXJhbXMtPm1hY19hZGRyWzVdKTsKKwl3Yl9kYXRhWzFdID0gKChwYXJhbXMtPm1hY19hZGRyWzBdIDw8IDgpIHwKKwkJCXBhcmFtcy0+bWFjX2FkZHJbMV0pOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfVFhfU09VUkNFX0FERFIsCisJCSAgICB3Yl9kYXRhLCAyKTsKKworCS8qIHR4IGNvbnRyb2wgKi8KKwl2YWwgPSAweGMwOworCWlmICh2YXJzLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfVFgpCisJCXZhbCB8PSAweDgwMDAwMDsKKwl3Yl9kYXRhWzBdID0gdmFsOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfVFhfQ09OVFJPTCwKKwkJCXdiX2RhdGEsIDIpOworCisJLyogbWFjIGNvbnRyb2wgKi8KKwl2YWwgPSAweDM7CisJaWYgKGlzX2xiKSB7CisJCXZhbCB8PSAweDQ7CisJCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxlIGJtYWMgbG9vcGJhY2tcbiIpOworCX0KKwl3Yl9kYXRhWzBdID0gdmFsOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQk1BQ19DT05UUk9MLAorCQkgICAgd2JfZGF0YSwgMik7CisKKworCS8qIHNldCByeCBtdHUgKi8KKwl3Yl9kYXRhWzBdID0gRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSArIEVUSF9PVlJFSEVBRDsKKwl3Yl9kYXRhWzFdID0gMDsKKwlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX1JYX01BWF9TSVpFLAorCQkJd2JfZGF0YSwgMik7CisKKwkvKiByeCBjb250cm9sIHNldCB0byBkb24ndCBzdHJpcCBjcmMgKi8KKwl2YWwgPSAweDE0OworCWlmICh2YXJzLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfUlgpCisJCXZhbCB8PSAweDIwOworCXdiX2RhdGFbMF0gPSB2YWw7CisJd2JfZGF0YVsxXSA9IDA7CisJUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9SWF9DT05UUk9MLAorCQkJd2JfZGF0YSwgMik7CisKKwkvKiBzZXQgdHggbXR1ICovCisJd2JfZGF0YVswXSA9IEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUgKyBFVEhfT1ZSRUhFQUQ7CisJd2JfZGF0YVsxXSA9IDA7CisJUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9UWF9NQVhfU0laRSwKKwkJCXdiX2RhdGEsIDIpOworCisJLyogc2V0IGNudCBtYXggc2l6ZSAqLworCXdiX2RhdGFbMF0gPSBFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFICsgRVRIX09WUkVIRUFEOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQ05UX01BWF9TSVpFLAorCQkgICAgd2JfZGF0YSwgMik7CisKKwkvKiBjb25maWd1cmUgc2FmYyAqLworCXdiX2RhdGFbMF0gPSAweDEwMDAyMDA7CisJd2JfZGF0YVsxXSA9IDA7CisJUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9SWF9MTEZDX01TR19GTERTLAorCQkgICAgd2JfZGF0YSwgMik7CisJLyogZml4IGZvciBlbXVsYXRpb24gKi8KKwlpZiAoQ0hJUF9SRVZfSVNfRU1VTChicCkpIHsKKwkJd2JfZGF0YVswXSA9IDB4ZjAwMDsKKwkJd2JfZGF0YVsxXSA9IDA7CisJCVJFR19XUl9ETUFFKGJwLAorCQkJICAgIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9UWF9QQVVTRV9USFJFU0hPTEQsCisJCQkgICAgd2JfZGF0YSwgMik7CisJfQorCisJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCArIHBvcnQqNCwgMHgxKTsKKwlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19MQU5FX1NFTF9QMCArIHBvcnQqNCwgMHgwKTsKKwlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0VNQUMwX1BPUlQgKyBwb3J0KjQsIDB4MCk7CisJdmFsID0gMDsKKwlpZiAodmFycy0+Zmxvd19jdHJsICYgRkxPV19DVFJMX1RYKQorCQl2YWwgPSAxOworCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9QQVVTRV9PVVRfRU4gKyBwb3J0KjQsIHZhbCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19FTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDB4MCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX0VNQUMwX0lOX0VOICsgcG9ydCo0LCAweDApOworCVJFR19XUihicCwgTklHX1JFR19FTUFDMF9QQVVTRV9PVVRfRU4gKyBwb3J0KjQsIDB4MCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX0lOX0VOICsgcG9ydCo0LCAweDEpOworCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDB4MSk7CisKKwl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX0JNQUM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3BoeV9kZWFzc2VydChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggcGh5X2ZsYWdzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiB2YWw7CisKKwlpZiAocGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgeworCQlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3BoeV9kZWFzc2VydDpYR1hTXG4iKTsKKwkJdmFsID0gWEdYU19SRVNFVF9CSVRTOworCisJfSBlbHNlIHsgLyogU2VyRGVzICovCisJCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfcGh5X2RlYXNzZXJ0OlNlckRlc1xuIik7CisJCXZhbCA9IFNFUkRFU19SRVNFVF9CSVRTOworCX0KKworCXZhbCA9IHZhbCA8PCAocGFyYW1zLT5wb3J0KjE2KTsKKworCS8qIHJlc2V0IGFuZCB1bnJlc2V0IHRoZSBTZXJEZXMvWEdYUyAqLworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfQ0xFQVIsCisJCSAgICB2YWwpOworCXVkZWxheSg1MDApOworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfU0VULAorCQkgICAgdmFsKTsKKwlibngyeF9zZXRfcGh5X21kaW8ocGFyYW1zKTsKK30KKwordm9pZCBibngyeF9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IGxpbmtfdmFycyAgICp2YXJzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IGxpbmtfMTBnOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisKKwlpZiAocGFyYW1zLT5zd2l0Y2hfY2ZnID09ICBTV0lUQ0hfQ0ZHXzFHKQorCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfU0VSREVTX0ZMQUc7CisJZWxzZQorCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfWEdYU19GTEFHOworCXZhcnMtPmxpbmtfc3RhdHVzID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJCQkgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQkJCSAgIHBvcnRfbWJbcG9ydF0ubGlua19zdGF0dXMpKTsKKworCXZhcnMtPmxpbmtfdXAgPSAodmFycy0+bGlua19zdGF0dXMgJiBMSU5LX1NUQVRVU19MSU5LX1VQKTsKKworCWlmICh2YXJzLT5saW5rX3VwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAicGh5IGxpbmsgdXBcbiIpOworCisJCXZhcnMtPnBoeV9saW5rX3VwID0gMTsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCXN3aXRjaCAodmFycy0+bGlua19zdGF0dXMgJgorCQkJCQlMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYX01BU0spIHsKKwkJCWNhc2UgTElOS18xMFRIRDoKKwkJCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKwkJCQkvKiBmYWxsIHRocnUgKi8KKwkJCWNhc2UgTElOS18xMFRGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTA7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTElOS18xMDBUWEhEOgorCQkJCXZhcnMtPmR1cGxleCA9IERVUExFWF9IQUxGOworCQkJCS8qIGZhbGwgdGhydSAqLworCQkJY2FzZSBMSU5LXzEwMFQ0OgorCQkJY2FzZSBMSU5LXzEwMFRYRkQ6CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMSU5LXzEwMDBUSEQ6CisJCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCQkJLyogZmFsbCB0aHJ1ICovCisJCQljYXNlIExJTktfMTAwMFRGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMSU5LXzI1MDBUSEQ6CisJCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCQkJLyogZmFsbCB0aHJ1ICovCisJCQljYXNlIExJTktfMjUwMFRGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMjUwMDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMSU5LXzEwR1RGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTElOS18xMkdURkQ6CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEyMDAwOworCQkJCWJyZWFrOworCisJCQljYXNlIExJTktfMTJfNUdURkQ6CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEyNTAwOworCQkJCWJyZWFrOworCisJCQljYXNlIExJTktfMTNHVEZEOgorCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMzAwMDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMSU5LXzE1R1RGRDoKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTUwMDA7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTElOS18xNkdURkQ6CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzE2MDAwOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZhcnMtPmxpbmtfc3RhdHVzICYgTElOS19TVEFUVVNfVFhfRkxPV19DT05UUk9MX0VOQUJMRUQpCisJCQl2YXJzLT5mbG93X2N0cmwgfD0gRkxPV19DVFJMX1RYOworCQllbHNlCisJCQl2YXJzLT5mbG93X2N0cmwgJj0gfkZMT1dfQ1RSTF9UWDsKKworCQlpZiAodmFycy0+bGlua19zdGF0dXMgJiBMSU5LX1NUQVRVU19SWF9GTE9XX0NPTlRST0xfRU5BQkxFRCkKKwkJCXZhcnMtPmZsb3dfY3RybCB8PSBGTE9XX0NUUkxfUlg7CisJCWVsc2UKKwkJCXZhcnMtPmZsb3dfY3RybCAmPSB+RkxPV19DVFJMX1JYOworCisJCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCAmJgorCQkJICAgICgocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMCkgfHwKKwkJCSAgICAgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwKSkpIHsKKwkJCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX1NHTUlJX0ZMQUc7CisJCQl9IGVsc2UgeworCQkJCXZhcnMtPnBoeV9mbGFncyAmPSB+UEhZX1NHTUlJX0ZMQUc7CisJCQl9CisJCX0KKworCQkvKiBhbnl0aGluZyAxMCBhbmQgb3ZlciB1c2VzIHRoZSBibWFjICovCisJCWxpbmtfMTBnID0gKCh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEwMDAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEyMDAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEyNTAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEzMDAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzE1MDAwKSB8fAorCQkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzE2MDAwKSk7CisJCWlmIChsaW5rXzEwZykKKwkJCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfQk1BQzsKKwkJZWxzZQorCQkJdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9FTUFDOworCisJfSBlbHNlIHsgLyogbGluayBkb3duICovCisJCURQKE5FVElGX01TR19MSU5LLCAicGh5IGxpbmsgZG93blxuIik7CisKKwkJdmFycy0+cGh5X2xpbmtfdXAgPSAwOworCisJCXZhcnMtPmxpbmVfc3BlZWQgPSAwOworCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJdmFycy0+Zmxvd19jdHJsID0gRkxPV19DVFJMX05PTkU7CisKKwkJLyogaW5kaWNhdGUgbm8gbWFjIGFjdGl2ZSAqLworCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX05PTkU7CisJfQorCisJRFAoTkVUSUZfTVNHX0xJTkssICJsaW5rX3N0YXR1cyAweCV4ICBwaHlfbGlua191cCAleFxuIiwKKwkJIHZhcnMtPmxpbmtfc3RhdHVzLCB2YXJzLT5waHlfbGlua191cCk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJsaW5lX3NwZWVkICV4ICBkdXBsZXggJXggIGZsb3dfY3RybCAweCV4XG4iLAorCQkgdmFycy0+bGluZV9zcGVlZCwgdmFycy0+ZHVwbGV4LCB2YXJzLT5mbG93X2N0cmwpOworfQorCitzdGF0aWMgdm9pZCBibngyeF91cGRhdGVfbW5nKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MzIgbGlua19zdGF0dXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJUkVHX1dSKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAorCQkJICAgIHBvcnRfbWJbcGFyYW1zLT5wb3J0XS5saW5rX3N0YXR1cyksCisJCQlsaW5rX3N0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2JtYWNfcnhfZGlzYWJsZShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0KQoreworCXUzMiBibWFjX2FkZHIgPSBwb3J0ID8gTklHX1JFR19JTkdSRVNTX0JNQUMxX01FTSA6CisJCU5JR19SRUdfSU5HUkVTU19CTUFDMF9NRU07CisJdTMyIHdiX2RhdGFbMl07CisgICAgdTMyIG5pZ19ibWFjX2VuYWJsZSA9IFJFR19SRChicCwgTklHX1JFR19CTUFDMF9SRUdTX09VVF9FTiArIHBvcnQqNCk7CisKKwkvKiBPbmx5IGlmIHRoZSBibWFjIGlzIG91dCBvZiByZXNldCAqLworCWlmIChSRUdfUkQoYnAsIE1JU0NfUkVHX1JFU0VUX1JFR18yKSAmCisJCQkoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpICYmCisJICAgIG5pZ19ibWFjX2VuYWJsZSkgeworCisJCS8qIENsZWFyIFJ4IEVuYWJsZSBiaXQgaW4gQk1BQ19DT05UUk9MIHJlZ2lzdGVyICovCisJCVJFR19SRF9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQk1BQ19DT05UUk9MLAorCQkJICAgIHdiX2RhdGEsIDIpOworCQl3Yl9kYXRhWzBdICY9IH5CTUFDX0NPTlRST0xfUlhfRU5BQkxFOworCQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX0JNQUNfQ09OVFJPTCwKKwkJCSAgICB3Yl9kYXRhLCAyKTsKKworCQltc2xlZXAoMSk7CisJfQorfQorCitzdGF0aWMgdTggYm54MnhfcGJmX3VwZGF0ZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTMyIGZsb3dfY3RybCwKKwkJCSB1MzIgbGluZV9zcGVlZCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXUzMiBpbml0X2NyZCwgY3JkOworCXUzMiBjb3VudCA9IDEwMDA7CisJdTMyIHBhdXNlID0gMDsKKworCS8qIGRpc2FibGUgcG9ydCAqLworCVJFR19XUihicCwgUEJGX1JFR19ESVNBQkxFX05FV19UQVNLX1BST0NfUDAgKyBwb3J0KjQsIDB4MSk7CisKKwkvKiB3YWl0IGZvciBpbml0IGNyZWRpdCAqLworCWluaXRfY3JkID0gUkVHX1JEKGJwLCBQQkZfUkVHX1AwX0lOSVRfQ1JEICsgcG9ydCo0KTsKKwljcmQgPSBSRUdfUkQoYnAsIFBCRl9SRUdfUDBfQ1JFRElUICsgcG9ydCo4KTsKKwlEUChORVRJRl9NU0dfTElOSywgImluaXRfY3JkIDB4JXggIGNyZCAweCV4XG4iLCBpbml0X2NyZCwgY3JkKTsKKworCXdoaWxlICgoaW5pdF9jcmQgIT0gY3JkKSAmJiBjb3VudCkgeworCQltc2xlZXAoNSk7CisKKwkJY3JkID0gUkVHX1JEKGJwLCBQQkZfUkVHX1AwX0NSRURJVCArIHBvcnQqOCk7CisJCWNvdW50LS07CisJfQorCWNyZCA9IFJFR19SRChicCwgUEJGX1JFR19QMF9DUkVESVQgKyBwb3J0KjgpOworCWlmIChpbml0X2NyZCAhPSBjcmQpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJCVUchIGluaXRfY3JkIDB4JXggIT0gY3JkIDB4JXhcbiIsCisJCQkgIGluaXRfY3JkLCBjcmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmxvd19jdHJsICYgRkxPV19DVFJMX1JYKQorCQlwYXVzZSA9IDE7CisJUkVHX1dSKGJwLCBQQkZfUkVHX1AwX1BBVVNFX0VOQUJMRSArIHBvcnQqNCwgcGF1c2UpOworCWlmIChwYXVzZSkgeworCQkvKiB1cGRhdGUgdGhyZXNob2xkICovCisJCVJFR19XUihicCwgUEJGX1JFR19QMF9BUkJfVEhSU0ggKyBwb3J0KjQsIDApOworCQkvKiB1cGRhdGUgaW5pdCBjcmVkaXQgKi8KKwkJaW5pdF9jcmQgPSA3Nzg7CQkvKiAoODAwLTE4LTQpICovCisKKwl9IGVsc2UgeworCQl1MzIgdGhyZXNoID0gKEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUgKworCQkJICAgICAgRVRIX09WUkVIRUFEKS8xNjsKKworCQkvKiB1cGRhdGUgdGhyZXNob2xkICovCisJCVJFR19XUihicCwgUEJGX1JFR19QMF9BUkJfVEhSU0ggKyBwb3J0KjQsIHRocmVzaCk7CisJCS8qIHVwZGF0ZSBpbml0IGNyZWRpdCAqLworCQlzd2l0Y2ggKGxpbmVfc3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDoKKwkJY2FzZSBTUEVFRF8xMDA6CisJCWNhc2UgU1BFRURfMTAwMDoKKwkJCWluaXRfY3JkID0gdGhyZXNoICsgNTUgLSAyMjsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFRURfMjUwMDoKKwkJCWluaXRfY3JkID0gdGhyZXNoICsgMTM4IC0gMjI7CisJCQlicmVhazsKKworCQljYXNlIFNQRUVEXzEwMDAwOgorCQkJaW5pdF9jcmQgPSB0aHJlc2ggKyA1NTMgLSAyMjsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFRURfMTIwMDA6CisJCQlpbml0X2NyZCA9IHRocmVzaCArIDY2NCAtIDIyOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVFRF8xMzAwMDoKKwkJCWluaXRfY3JkID0gdGhyZXNoICsgNzQyIC0gMjI7CisJCQlicmVhazsKKworCQljYXNlIFNQRUVEXzE2MDAwOgorCQkJaW5pdF9jcmQgPSB0aHJlc2ggKyA3NzggLSAyMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbnZhbGlkIGxpbmVfc3BlZWQgMHgleFxuIiwKKwkJCQkgIGxpbmVfc3BlZWQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KKwlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfSU5JVF9DUkQgKyBwb3J0KjQsIGluaXRfY3JkKTsKKwlEUChORVRJRl9NU0dfTElOSywgIlBCRiB1cGRhdGVkIHRvIHNwZWVkICVkIGNyZWRpdCAlZFxuIiwKKwkJIGxpbmVfc3BlZWQsIGluaXRfY3JkKTsKKworCS8qIHByb2JlIHRoZSBjcmVkaXQgY2hhbmdlcyAqLworCVJFR19XUihicCwgUEJGX1JFR19JTklUX1AwICsgcG9ydCo0LCAweDEpOworCW1zbGVlcCg1KTsKKwlSRUdfV1IoYnAsIFBCRl9SRUdfSU5JVF9QMCArIHBvcnQqNCwgMHgwKTsKKworCS8qIGVuYWJsZSBwb3J0ICovCisJUkVHX1dSKGJwLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMCArIHBvcnQqNCwgMHgwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBibngyeF9nZXRfZW1hY19iYXNlKHUzMiBleHRfcGh5X3R5cGUsIHU4IHBvcnQpCit7CisJdTMyIGVtYWNfYmFzZTsKKwlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKwkJZW1hY19iYXNlID0gR1JDQkFTRV9FTUFDMDsKKwkJYnJlYWs7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQllbWFjX2Jhc2UgPSAocG9ydCkgPyBHUkNCQVNFX0VNQUMwOiBHUkNCQVNFX0VNQUMxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllbWFjX2Jhc2UgPSAocG9ydCkgPyBHUkNCQVNFX0VNQUMxOiBHUkNCQVNFX0VNQUMwOworCQlicmVhazsKKwl9CisJcmV0dXJuIGVtYWNfYmFzZTsKKworfQorCit1OCBibngyeF9jbDQ1X3dyaXRlKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHUzMiBleHRfcGh5X3R5cGUsCisJCSAgdTggcGh5X2FkZHIsIHU4IGRldmFkLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXUzMiB0bXAsIHNhdmVkX21vZGU7CisJdTggaSwgcmMgPSAwOworCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGV4dF9waHlfdHlwZSwgcG9ydCk7CisKKwkvKiBzZXQgY2xhdXNlIDQ1IG1vZGUsIHNsb3cgZG93biB0aGUgTURJTyBjbG9jayB0byAyLjVNSHoKKwkgKiAoYSB2YWx1ZSBvZiA0OT09MHgzMSkgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBBVVRPIHBvbGwgaXMgb2ZmCisJICovCisJc2F2ZWRfbW9kZSA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOworCXRtcCA9IHNhdmVkX21vZGUgJiB+KEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8CisJCQkgICAgIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCk7CisJdG1wIHw9IChFTUFDX01ESU9fTU9ERV9DTEFVU0VfNDUgfAorCQkoNDkgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKSk7CisJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdG1wKTsKKwlSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKKwl1ZGVsYXkoNDApOworCisJLyogYWRkcmVzcyAqLworCisJdG1wID0gKChwaHlfYWRkciA8PCAyMSkgfCAoZGV2YWQgPDwgMTYpIHwgcmVnIHwKKwkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9BRERSRVNTIHwKKwkgICAgICAgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSk7CisJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgdG1wKTsKKworCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7CisJCXVkZWxheSgxMCk7CisKKwkJdG1wID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSk7CisJCWlmICghKHRtcCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpKSB7CisJCQl1ZGVsYXkoNSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAodG1wICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkgeworCQlEUChORVRJRl9NU0dfTElOSywgIndyaXRlIHBoeSByZWdpc3RlciBmYWlsZWRcbiIpOworCQlyYyA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJLyogZGF0YSAqLworCQl0bXAgPSAoKHBoeV9hZGRyIDw8IDIxKSB8IChkZXZhZCA8PCAxNikgfCB2YWwgfAorCQkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9XUklURV80NSB8CisJCSAgICAgICBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKTsKKwkJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgdG1wKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgeworCQkJdWRlbGF5KDEwKTsKKworCQkJdG1wID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKworCQkJCQkgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOworCQkJaWYgKCEodG1wICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKKwkJCQl1ZGVsYXkoNSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHRtcCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAid3JpdGUgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCQlyYyA9IC1FRkFVTFQ7CisJCX0KKwl9CisKKwkvKiBSZXN0b3JlIHRoZSBzYXZlZCBtb2RlICovCisJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgc2F2ZWRfbW9kZSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3U4IGJueDJ4X2NsNDVfcmVhZChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1MzIgZXh0X3BoeV90eXBlLAorCQkgdTggcGh5X2FkZHIsIHU4IGRldmFkLCB1MTYgcmVnLCB1MTYgKnJldF92YWwpCit7CisJdTMyIHZhbCwgc2F2ZWRfbW9kZTsKKwl1MTYgaTsKKwl1OCByYyA9IDA7CisKKwl1MzIgbWRpb19jdHJsID0gYm54MnhfZ2V0X2VtYWNfYmFzZShleHRfcGh5X3R5cGUsIHBvcnQpOworCS8qIHNldCBjbGF1c2UgNDUgbW9kZSwgc2xvdyBkb3duIHRoZSBNRElPIGNsb2NrIHRvIDIuNU1IegorCSAqIChhIHZhbHVlIG9mIDQ5PT0weDMxKSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIEFVVE8gcG9sbCBpcyBvZmYKKwkgKi8KKwlzYXZlZF9tb2RlID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7CisJdmFsID0gc2F2ZWRfbW9kZSAmICgoRU1BQ19NRElPX01PREVfQVVUT19QT0xMIHwKKwkJCSAgICAgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UKSk7CisJdmFsIHw9IChFTUFDX01ESU9fTU9ERV9DTEFVU0VfNDUgfAorCQkoNDkgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKSk7CisJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdmFsKTsKKwlSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKKwl1ZGVsYXkoNDApOworCisJLyogYWRkcmVzcyAqLworCXZhbCA9ICgocGh5X2FkZHIgPDwgMjEpIHwgKGRldmFkIDw8IDE2KSB8IHJlZyB8CisJICAgICAgIEVNQUNfTURJT19DT01NX0NPTU1BTkRfQUREUkVTUyB8CisJICAgICAgIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpOworCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIHZhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgeworCQl1ZGVsYXkoMTApOworCisJCXZhbCA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOworCQlpZiAoISh2YWwgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSkgeworCQkJdWRlbGF5KDUpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHZhbCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJyZWFkIHBoeSByZWdpc3RlciBmYWlsZWRcbiIpOworCisJCSpyZXRfdmFsID0gMDsKKwkJcmMgPSAtRUZBVUxUOworCisJfSBlbHNlIHsKKwkJLyogZGF0YSAqLworCQl2YWwgPSAoKHBoeV9hZGRyIDw8IDIxKSB8IChkZXZhZCA8PCAxNikgfAorCQkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9SRUFEXzQ1IHwKKwkJICAgICAgIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpOworCQlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB2YWwpOworCisJCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7CisJCQl1ZGVsYXkoMTApOworCisJCQl2YWwgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArCisJCQkJCSAgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOworCQkJaWYgKCEodmFsICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKKwkJCQkqcmV0X3ZhbCA9ICh1MTYpKHZhbCAmIEVNQUNfTURJT19DT01NX0RBVEEpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICh2YWwgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgInJlYWQgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7CisKKwkJCSpyZXRfdmFsID0gMDsKKwkJCXJjID0gLUVGQVVMVDsKKwkJfQorCX0KKworCS8qIFJlc3RvcmUgdGhlIHNhdmVkIG1vZGUgKi8KKwlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCBzYXZlZF9tb2RlKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X2Flcl9tbWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IGxpbmtfdmFycyAgICp2YXJzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiBzZXJfbGFuZTsKKwl1MTYgb2Zmc2V0OworCisJc2VyX2xhbmUgPSAoKHBhcmFtcy0+bGFuZV9jb25maWcgJgorCQkgICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX01BU0spID4+CisJCSAgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfU0hJRlQpOworCisJb2Zmc2V0ID0gKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpID8KKwkJKHBhcmFtcy0+cGh5X2FkZHIgKyBzZXJfbGFuZSkgOiAwOworCisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0FFUl9CTE9DSywKKwkJCSAgICAgIE1ESU9fQUVSX0JMT0NLX0FFUl9SRUcsIDB4MzgwMCArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9tYXN0ZXJfbG4oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IG5ld19tYXN0ZXJfbG4sIHNlcl9sYW5lOworCXNlcl9sYW5lID0gICgocGFyYW1zLT5sYW5lX2NvbmZpZyAmCisJCSAgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfTUFTSykgPj4KKwkJICAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9TSElGVCk7CisKKwkvKiBzZXQgdGhlIG1hc3Rlcl9sbiBmb3IgQU4gKi8KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfWEdYU19CTE9DSzIsCisJCQkgICAgICBNRElPX1hHWFNfQkxPQ0syX1RFU1RfTU9ERV9MQU5FLAorCQkJICAgICAgJm5ld19tYXN0ZXJfbG4pOworCisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syICwKKwkJCSAgICAgIE1ESU9fWEdYU19CTE9DSzJfVEVTVF9NT0RFX0xBTkUsCisJCQkgICAgICAobmV3X21hc3Rlcl9sbiB8IHNlcl9sYW5lKSk7Cit9CisKK3N0YXRpYyB1OCBibngyeF9yZXNldF91bmljb3JlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiBtaWlfY29udHJvbDsKKwl1MTYgaTsKKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsICZtaWlfY29udHJvbCk7CisKKwkvKiByZXNldCB0aGUgdW5pY29yZSAqLworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkgICAgICAobWlpX2NvbnRyb2wgfAorCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNFVCkpOworCisJLyogd2FpdCBmb3IgdGhlIHJlc2V0IHRvIHNlbGYgY2xlYXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTURJT19BQ0NFU1NfVElNRU9VVDsgaSsrKSB7CisJCXVkZWxheSg1KTsKKworCQkvKiB0aGUgcmVzZXQgZXJhc2VkIHRoZSBwcmV2aW91cyBiYW5rIHZhbHVlICovCisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAorCQkJICAgICAgJm1paV9jb250cm9sKTsKKworCQlpZiAoIShtaWlfY29udHJvbCAmIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNFVCkpIHsKKwkJCXVkZWxheSg1KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJRFAoTkVUSUZfTVNHX0xJTkssICJCVUchIFhHWFMgaXMgc3RpbGwgaW4gcmVzZXQhXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKKworfQorCitzdGF0aWMgdm9pZCBibngyeF9zZXRfc3dhcF9sYW5lcyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwkvKiBFYWNoIHR3byBiaXRzIHJlcHJlc2VudHMgYSBsYW5lIG51bWJlcjoKKwkgICBObyBzd2FwIGlzIDAxMjMgPT4gMHgxYiBubyBuZWVkIHRvIGVuYWJsZSB0aGUgc3dhcCAqLworCXUxNiBzZXJfbGFuZSwgcnhfbGFuZV9zd2FwLCB0eF9sYW5lX3N3YXA7CisKKwlzZXJfbGFuZSA9ICgocGFyYW1zLT5sYW5lX2NvbmZpZyAmCisJCQkgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfTUFTSykgPj4KKwkJCVBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX1NISUZUKTsKKwlyeF9sYW5lX3N3YXAgPSAoKHBhcmFtcy0+bGFuZV9jb25maWcgJgorCQkJICAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX1JYX01BU0spID4+CisJCQkgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19SWF9TSElGVCk7CisJdHhfbGFuZV9zd2FwID0gKChwYXJhbXMtPmxhbmVfY29uZmlnICYKKwkJCSAgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19UWF9NQVNLKSA+PgorCQkJICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfVFhfU0hJRlQpOworCisJaWYgKHJ4X2xhbmVfc3dhcCAhPSAweDFiKSB7CisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMiwKKwkJCQkgICAgTURJT19YR1hTX0JMT0NLMl9SWF9MTl9TV0FQLAorCQkJCSAgICAocnhfbGFuZV9zd2FwIHwKKwkJCQkgICAgTURJT19YR1hTX0JMT0NLMl9SWF9MTl9TV0FQX0VOQUJMRSB8CisJCQkJICAgIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUF9GT1JDRV9FTkFCTEUpKTsKKwl9IGVsc2UgeworCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMiwKKwkJCQkgICAgICBNRElPX1hHWFNfQkxPQ0syX1JYX0xOX1NXQVAsIDApOworCX0KKworCWlmICh0eF9sYW5lX3N3YXAgIT0gMHgxYikgeworCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMiwKKwkJCQkgICAgICBNRElPX1hHWFNfQkxPQ0syX1RYX0xOX1NXQVAsCisJCQkJICAgICAgKHR4X2xhbmVfc3dhcCB8CisJCQkJICAgICAgIE1ESU9fWEdYU19CTE9DSzJfVFhfTE5fU1dBUF9FTkFCTEUpKTsKKwl9IGVsc2UgeworCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMiwKKwkJCQkgICAgICBNRElPX1hHWFNfQkxPQ0syX1RYX0xOX1NXQVAsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X3BhcmFsbGVsX2RldGVjdGlvbihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgICAgICAgdTggICAgICAgICAgICAgICAgcGh5X2ZsYWdzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiBjb250cm9sMjsKKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKKwkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMiwKKwkJCSAgICAgICZjb250cm9sMik7CisKKworCWNvbnRyb2wyIHw9IE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMl9QUkxfRFRfRU47CisKKworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKKwkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMiwKKwkJCSAgICAgIGNvbnRyb2wyKTsKKworCWlmIChwaHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiWEdYU1xuIik7CisKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCU1ESU9fUkVHX0JBTktfMTBHX1BBUkFMTEVMX0RFVEVDVCwKKwkJCQlNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOSywKKwkJCQlNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOS19DTlQpOworCisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQlNRElPX1JFR19CQU5LXzEwR19QQVJBTExFTF9ERVRFQ1QsCisJCQkJTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0wsCisJCQkJJmNvbnRyb2wyKTsKKworCisJCWNvbnRyb2wyIHw9CisJCSAgICBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfQ09OVFJPTF9QQVJERVQxMEdfRU47CisKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCU1ESU9fUkVHX0JBTktfMTBHX1BBUkFMTEVMX0RFVEVDVCwKKwkJCQlNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfQ09OVFJPTCwKKwkJCQljb250cm9sMik7CisKKwkJLyogRGlzYWJsZSBwYXJhbGxlbCBkZXRlY3Rpb24gb2YgSGlHICovCisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQlNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0syLAorCQkJCU1ESU9fWEdYU19CTE9DSzJfVU5JQ09SRV9NT0RFXzEwRywKKwkJCQlNRElPX1hHWFNfQkxPQ0syX1VOSUNPUkVfTU9ERV8xMEdfQ1g0X1hHWFMgfAorCQkJCU1ESU9fWEdYU19CTE9DSzJfVU5JQ09SRV9NT0RFXzEwR19ISUdJR19YR1hTKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9hdXRvbmVnKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBsaW5rX3ZhcnMgICAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgcmVnX3ZhbDsKKworCS8qIENMMzcgQXV0b25lZyAqLworCisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwgJnJlZ192YWwpOworCisJLyogQ0wzNyBBdXRvbmVnIEVuYWJsZWQgKi8KKwlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykKKwkJcmVnX3ZhbCB8PSBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU47CisJZWxzZSAvKiBDTDM3IEF1dG9uZWcgRGlzYWJsZWQgKi8KKwkJcmVnX3ZhbCAmPSB+KE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8CisJCQkgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNUQVJUX0FOKTsKKworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsIHJlZ192YWwpOworCisJLyogRW5hYmxlL0Rpc2FibGUgQXV0b2RldGVjdGlvbiAqLworCisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMLAorCQkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxLCAmcmVnX3ZhbCk7CisJcmVnX3ZhbCAmPSB+TURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX1NJR05BTF9ERVRFQ1RfRU47CisJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpCisJCXJlZ192YWwgfD0gTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0FVVE9ERVQ7CisJZWxzZQorCQlyZWdfdmFsICY9IH5NRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfQVVUT0RFVDsKKworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKKwkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMSwgcmVnX3ZhbCk7CisKKwkvKiBFbmFibGUgVGV0b25JSSBhbmQgQkFNIGF1dG9uZWcgKi8KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQkFNX05FWFRfUEFHRSwKKwkJCSAgICAgIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkwsCisJCQkgICZyZWdfdmFsKTsKKwlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykgeworCQkvKiBFbmFibGUgQkFNIGFuZWcgTW9kZSBhbmQgVGV0b25JSSBhbmVnIE1vZGUgKi8KKwkJcmVnX3ZhbCB8PSAoTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTF9CQU1fTU9ERSB8CisJCQkgICAgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTF9URVRPTl9BTik7CisJfSBlbHNlIHsKKwkJLyogVGV0b25JSSBhbmQgQkFNIEF1dG9uZWcgRGlzYWJsZWQgKi8KKwkJcmVnX3ZhbCAmPSB+KE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfQkFNX01PREUgfAorCQkJICAgICBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMX1RFVE9OX0FOKTsKKwl9CisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0JBTV9ORVhUX1BBR0UsCisJCQkgICAgICBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMLAorCQkJICAgICAgcmVnX3ZhbCk7CisKKwkvKiBFbmFibGUgQ2xhdXNlIDczIEFuZWcgKi8KKwlpZiAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpICYmCisJICAgIChTVVBQT1JUX0NMNzMpKSB7CisJCS8qIEVuYWJsZSBCQU0gU3RhdGlvbiBNYW5hZ2VyICovCisKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCisJCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMSwKKwkJCQkgICAoTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fRU4gfAorCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fU1RBVElPTl9NTkdSX0VOIHwKKwkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX05QX0FGVEVSX0JQX0VOKSk7CisKKwkJLyogTWVyZ2UgQ0w3MyBhbmQgQ0wzNyBhbmVnIHJlc29sdXRpb24gKi8KKwkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCisJCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMywKKwkJCQkgICAgICAmcmVnX3ZhbCk7CisKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKKwkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDMsCisJCQkocmVnX3ZhbCB8CisJCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwzX1VTRV9DTDczX0hDRF9NUikpOworCisJCS8qIFNldCB0aGUgQ0w3MyBBTiBzcGVlZCAqLworCisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAorCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMiwgJnJlZ192YWwpOworCQkvKiBJbiB0aGUgU2VyRGVzIHdlIHN1cHBvcnQgb25seSB0aGUgMUcuCisJCSAgIEluIHRoZSBYR1hTIHdlIHN1cHBvcnQgdGhlIDEwRyBLWDQKKwkJICAgYnV0IHdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCB0aGUgS1IgKi8KKwkJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYU1xuIik7CisJCQkvKiAxMEcgS1g0ICovCisJCQlyZWdfdmFsIHw9IE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwR19LWDQ7CisJCX0gZWxzZSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlc1xuIik7CisJCQkvKiAxMDAwTSBLWCAqLworCQkJcmVnX3ZhbCB8PSBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMDAwTV9LWDsKKwkJfQorCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKKwkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjIsIHJlZ192YWwpOworCisJCS8qIENMNzMgQXV0b25lZyBFbmFibGVkICovCisJCXJlZ192YWwgPSBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTjsKKwl9IGVsc2UgeworCQkvKiBDTDczIEF1dG9uZWcgRGlzYWJsZWQgKi8KKwkJcmVnX3ZhbCA9IDA7CisJfQorCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKKwkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLCByZWdfdmFsKTsKK30KKworLyogcHJvZ3JhbSBTZXJEZXMsIGZvcmNlZCBzcGVlZCAqLworc3RhdGljIHZvaWQgYm54MnhfcHJvZ3JhbV9zZXJkZXMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHJlZ192YWw7CisKKwkvKiBwcm9ncmFtIGR1cGxleCwgZGlzYWJsZSBhdXRvbmVnICovCisKKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLCAmcmVnX3ZhbCk7CisJcmVnX3ZhbCAmPSB+KE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9GVUxMX0RVUExFWCB8CisJCSAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOKTsKKwlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQlyZWdfdmFsIHw9IE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9GVUxMX0RVUExFWDsKKwlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLCByZWdfdmFsKTsKKworCS8qIHByb2dyYW0gc3BlZWQKKwkgICAtIG5lZWRlZCBvbmx5IGlmIHRoZSBzcGVlZCBpcyBncmVhdGVyIHRoYW4gMUcgKDIuNUcgb3IgMTBHKSAqLworCWlmICghKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDApIHx8CisJICAgICAgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwKSB8fAorCSAgICAgIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwKSkpIHsKKwkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCisJCQkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMSwgJnJlZ192YWwpOworCQkvKiBjbGVhcmluZyB0aGUgc3BlZWQgdmFsdWUgYmVmb3JlIHNldHRpbmcgdGhlIHJpZ2h0IHNwZWVkICovCisJCXJlZ192YWwgJj0gfk1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfTUFTSzsKKwkJcmVnX3ZhbCB8PSAoTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9SRUZDTEtfU0VMXzE1Nl8yNU0gfAorCQkJICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfU0VMKTsKKwkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMDApCisJCQlyZWdfdmFsIHw9CisJCQkJTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF8xMEdfQ1g0OworCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMzAwMCkKKwkJCXJlZ192YWwgfD0KKwkJCQlNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzEzRzsKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCisJCQkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMSwgcmVnX3ZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9zZXRfYnJjbV9jbDM3X2FkdmVydGlzbWVudChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgdmFsID0gMDsKKworCS8qIGNvbmZpZ3VyZSB0aGUgNDggYml0cyBmb3IgQkFNIEFOICovCisKKwkvKiBzZXQgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovCisJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJiBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzJfNUcpCisJCXZhbCB8PSBNRElPX09WRVJfMUdfVVAxXzJfNUc7CisJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJiBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwRykKKwkJdmFsIHw9IE1ESU9fT1ZFUl8xR19VUDFfMTBHOworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19PVkVSXzFHLAorCQkJICAgICAgTURJT19PVkVSXzFHX1VQMSwgdmFsKTsKKworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19PVkVSXzFHLAorCQkJICAgICAgTURJT19PVkVSXzFHX1VQMywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9pZWVlX2FuZWdfYWR2ZXJ0aXNtZW50KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCQkgICB1MzIgKmllZWVfZmMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJLyogZm9yIEFOLCB3ZSBhcmUgYWx3YXlzIHB1Ymxpc2hpbmcgZnVsbCBkdXBsZXggKi8KKwl1MTYgYW5fYWR2ID0gTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfRlVMTF9EVVBMRVg7CisKKwkvKiByZXNvbHZlIHBhdXNlIG1vZGUgYW5kIGFkdmVydGlzZW1lbnQKKwkgKiBQbGVhc2UgcmVmZXIgdG8gVGFibGUgMjhCLTMgb2YgdGhlIDgwMi4zYWItMTk5OSBzcGVjICovCisKKwlzd2l0Y2ggKHBhcmFtcy0+cmVxX2Zsb3dfY3RybCkgeworCWNhc2UgRkxPV19DVFJMX0FVVE86CisJCWlmIChwYXJhbXMtPm10dSA8PSBNQVhfTVRVX1NJWkUpIHsKKwkJCWFuX2FkdiB8PQorCQkJICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOworCQl9IGVsc2UgeworCQkJYW5fYWR2IHw9CisJCSAgICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDOworCQl9CisJCWJyZWFrOworCWNhc2UgRkxPV19DVFJMX1RYOgorCQlhbl9hZHYgfD0KKwkJICAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM7CisJCWJyZWFrOworCisJY2FzZSBGTE9XX0NUUkxfUlg6CisJY2FzZSBGTE9XX0NUUkxfQk9USDoKKwkJYW5fYWR2IHw9IE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEg7CisJCWJyZWFrOworCisJY2FzZSBGTE9XX0NUUkxfTk9ORToKKwlkZWZhdWx0OgorCQlhbl9hZHYgfD0gTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfTk9ORTsKKwkJYnJlYWs7CisJfQorCisJKmllZWVfZmMgPSBhbl9hZHY7CisKKwlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEViwgYW5fYWR2KTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfcmVzdGFydF9hdXRvbmVnXG4iKTsKKwlpZiAoU1VQUE9SVF9DTDczKSB7CisJCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBjbGF1c2UgNzMgYW5lZyAqLworCQl1MTYgYW5fY3RybDsKKworCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKKwkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKKwkJCQkgICZhbl9jdHJsKTsKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCU1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCisJCQkJTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCisJCQkJKGFuX2N0cmwgfAorCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOIHwKKwkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9SRVNUQVJUX0FOKSk7CisKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgYW5kIHJlc3RhcnQgQkFNL0NMMzcgYW5lZyAqLworCQl1MTYgbWlpX2NvbnRyb2w7CisKKwkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCQkgICAgICAmbWlpX2NvbnRyb2wpOworCQlEUChORVRJRl9NU0dfTElOSywKKwkJCSAiYm54MnhfcmVzdGFydF9hdXRvbmVnIG1paV9jb250cm9sIGJlZm9yZSA9IDB4JXhcbiIsCisJCQkgbWlpX2NvbnRyb2wpOworCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAorCQkJCSAgICAgIChtaWlfY29udHJvbCB8CisJCQkJTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKKwkJCQlNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTVEFSVF9BTikpOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdGlhbGl6ZV9zZ21paV9wcm9jZXNzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiBjb250cm9sMTsKKworCS8qIGluIFNHTUlJIG1vZGUsIHRoZSB1bmljb3JlIGlzIGFsd2F5cyBzbGF2ZSAqLworCisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMLAorCQkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxLAorCQkgICAgICAmY29udHJvbDEpOworCWNvbnRyb2wxIHw9IE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9JTlZFUlRfU0lHTkFMX0RFVEVDVDsKKwkvKiBzZXQgc2dtaWkgbW9kZSAoYW5kIG5vdCBmaWJlcikgKi8KKwljb250cm9sMSAmPSB+KE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9GSUJFUl9NT0RFIHwKKwkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0FVVE9ERVQgfAorCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfTVNUUl9NT0RFKTsKKwlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfU0VSREVTX0RJR0lUQUwsCisJCQkgICAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDEsCisJCQkgICAgICBjb250cm9sMSk7CisKKwkvKiBpZiBmb3JjZWQgc3BlZWQgKi8KKwlpZiAoIShwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKSkgeworCQkvKiBzZXQgc3BlZWQsIGRpc2FibGUgYXV0b25lZyAqLworCQl1MTYgbWlpX2NvbnRyb2w7CisKKwkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCQkgICAgICAmbWlpX2NvbnRyb2wpOworCQltaWlfY29udHJvbCAmPSB+KE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8CisJCQkJIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9NQU5fU0dNSUlfU1BfTUFTS3wKKwkJCQkgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0ZVTExfRFVQTEVYKTsKKworCQlzd2l0Y2ggKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDA6CisJCQltaWlfY29udHJvbCB8PQorCQkJCU1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9NQU5fU0dNSUlfU1BfMTAwOworCQkJYnJlYWs7CisJCWNhc2UgU1BFRURfMTAwMDoKKwkJCW1paV9jb250cm9sIHw9CisJCQkJTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF8xMDAwOworCQkJYnJlYWs7CisJCWNhc2UgU1BFRURfMTA6CisJCQkvKiB0aGVyZSBpcyBub3RoaW5nIHRvIHNldCBmb3IgMTBNICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIGludmFsaWQgc3BlZWQgZm9yIFNHTUlJICovCisJCQlEUChORVRJRl9NU0dfTElOSywgIkludmFsaWQgcmVxX2xpbmVfc3BlZWQgMHgleFxuIiwKKwkJCQkgIHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzZXR0aW5nIHRoZSBmdWxsIGR1cGxleCAqLworCQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJbWlpX2NvbnRyb2wgfD0KKwkJCQlNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfRlVMTF9EVVBMRVg7CisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkJICAgICAgbWlpX2NvbnRyb2wpOworCisJfSBlbHNlIHsgLyogQU4gbW9kZSAqLworCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgQU4gKi8KKwkJYm54MnhfcmVzdGFydF9hdXRvbmVnKHBhcmFtcyk7CisJfQorfQorCisKKy8qCisgKiBsaW5rIG1hbmFnZW1lbnQKKyAqLworCitzdGF0aWMgdm9pZCBibngyeF9wYXVzZV9yZXNvbHZlKHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsIHUzMiBwYXVzZV9yZXN1bHQpCit7CisJc3dpdGNoIChwYXVzZV9yZXN1bHQpIHsJCQkvKiBBU1lNIFAgQVNZTSBQICovCisJY2FzZSAweGI6CQkJCS8qICAgMSAgMCAgIDEgIDEgKi8KKwkJdmFycy0+Zmxvd19jdHJsID0gRkxPV19DVFJMX1RYOworCQlicmVhazsKKworCWNhc2UgMHhlOgkJCQkvKiAgIDEgIDEgICAxICAwICovCisJCXZhcnMtPmZsb3dfY3RybCA9IEZMT1dfQ1RSTF9SWDsKKwkJYnJlYWs7CisKKwljYXNlIDB4NToJCQkJLyogICAwICAxICAgMCAgMSAqLworCWNhc2UgMHg3OgkJCQkvKiAgIDAgIDEgICAxICAxICovCisJY2FzZSAweGQ6CQkJCS8qICAgMSAgMSAgIDAgIDEgKi8KKwljYXNlIDB4ZjoJCQkJLyogICAxICAxICAgMSAgMSAqLworCQl2YXJzLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfQk9USDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB1OCBibngyeF9leHRfcGh5X3Jlc292ZV9mYyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggZXh0X3BoeV9hZGRyOworCXUxNiBsZF9wYXVzZTsJLyogbG9jYWwgKi8KKwl1MTYgbHBfcGF1c2U7CS8qIGxpbmsgcGFydG5lciAqLworCXUxNiBhbl9jb21wbGV0ZTsgLyogQU4gY29tcGxldGUgKi8KKwl1MTYgcGF1c2VfcmVzdWx0OworCXU4IHJldCA9IDA7CisJdTMyIGV4dF9waHlfdHlwZTsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCWV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisKKwlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkvKiByZWFkIHR3aWNlICovCisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkgICAgICBNRElPX0FOX1JFR19TVEFUVVMsICZhbl9jb21wbGV0ZSk7CisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJICAgICAgTURJT19BTl9SRUdfU1RBVFVTLCAmYW5fY29tcGxldGUpOworCisJaWYgKGFuX2NvbXBsZXRlICYgTURJT19BTl9SRUdfU1RBVFVTX0FOX0NPTVBMRVRFKSB7CisJCXJldCA9IDE7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkgICAgICBNRElPX0FOX1JFR19BRFZfUEFVU0UsICZsZF9wYXVzZSk7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkgICAgICBNRElPX0FOX1JFR19MUF9BVVRPX05FRywgJmxwX3BhdXNlKTsKKwkJcGF1c2VfcmVzdWx0ID0gKGxkX3BhdXNlICYKKwkJCQlNRElPX0FOX1JFR19BRFZfUEFVU0VfTUFTSykgPj4gODsKKwkJcGF1c2VfcmVzdWx0IHw9IChscF9wYXVzZSAmCisJCQkJIE1ESU9fQU5fUkVHX0FEVl9QQVVTRV9NQVNLKSA+PiAxMDsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJFeHQgUEhZIHBhdXNlIHJlc3VsdCAweCV4IFxuIiwKKwkJICAgcGF1c2VfcmVzdWx0KTsKKwkJYm54MnhfcGF1c2VfcmVzb2x2ZSh2YXJzLCBwYXVzZV9yZXN1bHQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIGJueDJ4X2Zsb3dfY3RybF9yZXNvbHZlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJCQkgIHUzMiBncF9zdGF0dXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IGxkX3BhdXNlOwkvKiBsb2NhbCBkcml2ZXIgKi8KKwl1MTYgbHBfcGF1c2U7CS8qIGxpbmsgcGFydG5lciAqLworCXUxNiBwYXVzZV9yZXN1bHQ7CisKKwl2YXJzLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfTk9ORTsKKworCS8qIHJlc29sdmUgZnJvbSBncF9zdGF0dXMgaW4gY2FzZSBvZiBBTiBjb21wbGV0ZSBhbmQgbm90IHNnbWlpICovCisJaWYgKChwYXJhbXMtPnJlcV9mbG93X2N0cmwgPT0gRkxPV19DVFJMX0FVVE8pICYmCisJICAgIChncF9zdGF0dXMgJiBNRElPX0FOX0NMNzNfT1JfMzdfQ09NUExFVEUpICYmCisJICAgICghKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9TR01JSV9GTEFHKSkgJiYKKwkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpKSB7CisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWLAorCQkJCSAgICAgICZsZF9wYXVzZSk7CisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCU1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQlNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BQklMSVRZMSwKKwkJCSZscF9wYXVzZSk7CisJCXBhdXNlX3Jlc3VsdCA9IChsZF9wYXVzZSAmCisJCQkJTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfTUFTSyk+PjU7CisJCXBhdXNlX3Jlc3VsdCB8PSAobHBfcGF1c2UgJgorCQkJCSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9NQVNLKT4+NzsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJwYXVzZV9yZXN1bHQgMHgleFxuIiwgcGF1c2VfcmVzdWx0KTsKKwkJYm54MnhfcGF1c2VfcmVzb2x2ZSh2YXJzLCBwYXVzZV9yZXN1bHQpOworCX0gZWxzZSBpZiAoKHBhcmFtcy0+cmVxX2Zsb3dfY3RybCA9PSBGTE9XX0NUUkxfQVVUTykgJiYKKwkJICAgKGJueDJ4X2V4dF9waHlfcmVzb3ZlX2ZjKHBhcmFtcywgdmFycykpKSB7CisJCXJldHVybjsKKwl9IGVsc2UgeworCQl2YXJzLT5mbG93X2N0cmwgPSBwYXJhbXMtPnJlcV9mbG93X2N0cmw7CisJCWlmICh2YXJzLT5mbG93X2N0cmwgPT0gRkxPV19DVFJMX0FVVE8pIHsKKwkJCWlmIChwYXJhbXMtPm10dSA8PSBNQVhfTVRVX1NJWkUpCisJCQkJdmFycy0+Zmxvd19jdHJsID0gRkxPV19DVFJMX0JPVEg7CisJCQllbHNlCisJCQkJdmFycy0+Zmxvd19jdHJsID0gRkxPV19DVFJMX1RYOworCQl9CisJfQorCURQKE5FVElGX01TR19MSU5LLCAiZmxvd19jdHJsIDB4JXhcbiIsIHZhcnMtPmZsb3dfY3RybCk7Cit9CisKKworc3RhdGljIHU4IGJueDJ4X2xpbmtfc2V0dGluZ3Nfc3RhdHVzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgICAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCQkJICAgICAgdTMyIGdwX3N0YXR1cykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCByYyA9IDA7CisJdmFycy0+bGlua19zdGF0dXMgPSAwOworCisJaWYgKGdwX3N0YXR1cyAmIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0xJTktfU1RBVFVTKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAicGh5IGxpbmsgdXAgZ3Bfc3RhdHVzPTB4JXhcbiIsCisJCQkgZ3Bfc3RhdHVzKTsKKworCQl2YXJzLT5waHlfbGlua191cCA9IDE7CisJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfU1RBVFVTX0xJTktfVVA7CisKKwkJaWYgKGdwX3N0YXR1cyAmIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0RVUExFWF9TVEFUVVMpCisJCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJZWxzZQorCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisKKwkJYm54MnhfZmxvd19jdHJsX3Jlc29sdmUocGFyYW1zLCB2YXJzLCBncF9zdGF0dXMpOworCisJCXN3aXRjaCAoZ3Bfc3RhdHVzICYgR1BfU1RBVFVTX1NQRUVEX01BU0spIHsKKwkJY2FzZSBHUF9TVEFUVVNfMTBNOgorCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwOworCQkJaWYgKHZhcnMtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEwVEZEOworCQkJZWxzZQorCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTBUSEQ7CisJCQlicmVhazsKKworCQljYXNlIEdQX1NUQVRVU18xMDBNOgorCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWlmICh2YXJzLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xMDBUWEZEOworCQkJZWxzZQorCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTAwVFhIRDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BfU1RBVFVTXzFHOgorCQljYXNlIEdQX1NUQVRVU18xR19LWDoKKwkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJaWYgKHZhcnMtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEwMDBURkQ7CisJCQllbHNlCisJCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xMDAwVEhEOworCQkJYnJlYWs7CisKKwkJY2FzZSBHUF9TVEFUVVNfMl81RzoKKwkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8yNTAwOworCQkJaWYgKHZhcnMtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzI1MDBURkQ7CisJCQllbHNlCisJCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18yNTAwVEhEOworCQkJYnJlYWs7CisKKwkJY2FzZSBHUF9TVEFUVVNfNUc6CisJCWNhc2UgR1BfU1RBVFVTXzZHOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICJsaW5rIHNwZWVkIHVuc3VwcG9ydGVkICBncF9zdGF0dXMgMHgleFxuIiwKKwkJCQkgIGdwX3N0YXR1cyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQljYXNlIEdQX1NUQVRVU18xMEdfS1g0OgorCQljYXNlIEdQX1NUQVRVU18xMEdfSElHOgorCQljYXNlIEdQX1NUQVRVU18xMEdfQ1g0OgorCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xMEdURkQ7CisJCQlicmVhazsKKworCQljYXNlIEdQX1NUQVRVU18xMkdfSElHOgorCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEyMDAwOworCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xMkdURkQ7CisJCQlicmVhazsKKworCQljYXNlIEdQX1NUQVRVU18xMl81RzoKKwkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMjUwMDsKKwkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTJfNUdURkQ7CisJCQlicmVhazsKKworCQljYXNlIEdQX1NUQVRVU18xM0c6CisJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTMwMDA7CisJCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LXzEzR1RGRDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BfU1RBVFVTXzE1RzoKKwkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xNTAwMDsKKwkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfMTVHVEZEOworCQkJYnJlYWs7CisKKwkJY2FzZSBHUF9TVEFUVVNfMTZHOgorCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzE2MDAwOworCQkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS18xNkdURkQ7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICAibGluayBzcGVlZCB1bnN1cHBvcnRlZCBncF9zdGF0dXMgMHgleFxuIiwKKwkJCQkgIGdwX3N0YXR1cyk7CisJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LX1NUQVRVU19TRVJERVNfTElOSzsKKworCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykgeworCQkJdmFycy0+YXV0b25lZyA9IEFVVE9fTkVHX0VOQUJMRUQ7CisKKwkJCWlmIChncF9zdGF0dXMgJiBNRElPX0FOX0NMNzNfT1JfMzdfQ09NUExFVEUpIHsKKwkJCQl2YXJzLT5hdXRvbmVnIHw9IEFVVE9fTkVHX0NPTVBMRVRFOworCQkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9CisJCQkJCUxJTktfU1RBVFVTX0FVVE9fTkVHT1RJQVRFX0NPTVBMRVRFOworCQkJfQorCisJCQl2YXJzLT5hdXRvbmVnIHw9IEFVVE9fTkVHX1BBUkFMTEVMX0RFVEVDVElPTl9VU0VEOworCQkJdmFycy0+bGlua19zdGF0dXMgfD0KKwkJCQlMSU5LX1NUQVRVU19QQVJBTExFTF9ERVRFQ1RJT05fVVNFRDsKKworCQl9CisJCWlmICh2YXJzLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfVFgpCisJCSAgICAgICB2YXJzLT5saW5rX3N0YXR1cyB8PQorCQkJTElOS19TVEFUVVNfVFhfRkxPV19DT05UUk9MX0VOQUJMRUQ7CisKKwkJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9SWCkKKwkJICAgICAgIHZhcnMtPmxpbmtfc3RhdHVzIHw9CisJCQlMSU5LX1NUQVRVU19SWF9GTE9XX0NPTlRST0xfRU5BQkxFRDsKKworCX0gZWxzZSB7IC8qIGxpbmtfZG93biAqLworCQlEUChORVRJRl9NU0dfTElOSywgInBoeSBsaW5rIGRvd25cbiIpOworCisJCXZhcnMtPnBoeV9saW5rX3VwID0gMDsKKwkJdmFycy0+bGluZV9zcGVlZCA9IDA7CisJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOworCQl2YXJzLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfTk9ORTsKKwkJdmFycy0+YXV0b25lZyA9IEFVVE9fTkVHX0RJU0FCTEVEOworCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX05PTkU7CisJfQorCisJRFAoTkVUSUZfTVNHX0xJTkssICJncF9zdGF0dXMgMHgleCAgcGh5X2xpbmtfdXAgJXggbGluZV9zcGVlZCAleCBcbiIsCisJCSBncF9zdGF0dXMsIHZhcnMtPnBoeV9saW5rX3VwLCB2YXJzLT5saW5lX3NwZWVkKTsKKwlEUChORVRJRl9NU0dfTElOSywgImR1cGxleCAleCAgZmxvd19jdHJsIDB4JXgiCisJCSAiIGF1dG9uZWcgMHgleFxuIiwKKwkJIHZhcnMtPmR1cGxleCwKKwkJIHZhcnMtPmZsb3dfY3RybCwgdmFycy0+YXV0b25lZyk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJsaW5rX3N0YXR1cyAweCV4XG4iLCB2YXJzLT5saW5rX3N0YXR1cyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9zZ21paV90eF9kcml2ZXIoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IGxwX3VwMjsKKwl1MTYgdHhfZHJpdmVyOworCisJLyogcmVhZCBwcmVjb21wICovCisKKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfT1ZFUl8xRywKKwkJCSAgICAgIE1ESU9fT1ZFUl8xR19MUF9VUDIsICZscF91cDIpOworCisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX1RYMCwKKwkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwgJnR4X2RyaXZlcik7CisKKwkvKiBiaXRzIFsxMDo3XSBhdCBscF91cDIsIHBvc2l0aW9uZWQgYXQgWzE1OjEyXSAqLworCWxwX3VwMiA9ICgoKGxwX3VwMiAmIE1ESU9fT1ZFUl8xR19MUF9VUDJfUFJFRU1QSEFTSVNfTUFTSykgPj4KKwkJICAgTURJT19PVkVSXzFHX0xQX1VQMl9QUkVFTVBIQVNJU19TSElGVCkgPDwKKwkJICBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfU0hJRlQpOworCisJaWYgKChscF91cDIgIT0gMCkgJiYKKwkgICAgKGxwX3VwMiAhPSAodHhfZHJpdmVyICYgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0spKSkgeworCQkvKiByZXBsYWNlIHR4X2RyaXZlciBiaXRzIFsxNToxMl0gKi8KKwkJdHhfZHJpdmVyICY9IH5NRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSzsKKwkJdHhfZHJpdmVyIHw9IGxwX3VwMjsKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfVFgwLAorCQkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwgdHhfZHJpdmVyKTsKKwl9Cit9CisKK3N0YXRpYyB1OCBibngyeF9lbWFjX3Byb2dyYW0oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICB1MzIgbGluZV9zcGVlZCwgdTMyIGR1cGxleCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXUxNiBtb2RlID0gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAic2V0dGluZyBsaW5rIHNwZWVkICYgZHVwbGV4XG4iKTsKKwlibngyeF9iaXRzX2RpcyhicCwgR1JDQkFTRV9FTUFDMCArIHBvcnQqMHg0MDAgKworCQkgICAgIEVNQUNfUkVHX0VNQUNfTU9ERSwKKwkJICAgICAoRU1BQ19NT0RFXzI1R19NT0RFIHwKKwkJICAgICBFTUFDX01PREVfUE9SVF9NSUlfMTBNIHwKKwkJICAgICBFTUFDX01PREVfSEFMRl9EVVBMRVgpKTsKKwlzd2l0Y2ggKGxpbmVfc3BlZWQpIHsKKwljYXNlIFNQRUVEXzEwOgorCQltb2RlIHw9IEVNQUNfTU9ERV9QT1JUX01JSV8xME07CisJCWJyZWFrOworCisJY2FzZSBTUEVFRF8xMDA6CisJCW1vZGUgfD0gRU1BQ19NT0RFX1BPUlRfTUlJOworCQlicmVhazsKKworCWNhc2UgU1BFRURfMTAwMDoKKwkJbW9kZSB8PSBFTUFDX01PREVfUE9SVF9HTUlJOworCQlicmVhazsKKworCWNhc2UgU1BFRURfMjUwMDoKKwkJbW9kZSB8PSAoRU1BQ19NT0RFXzI1R19NT0RFIHwgRU1BQ19NT0RFX1BPUlRfR01JSSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogMTBHIG5vdCB2YWxpZCBmb3IgRU1BQyAqLworCQlEUChORVRJRl9NU0dfTElOSywgIkludmFsaWQgbGluZV9zcGVlZCAweCV4XG4iLCBsaW5lX3NwZWVkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGR1cGxleCA9PSBEVVBMRVhfSEFMRikKKwkJbW9kZSB8PSBFTUFDX01PREVfSEFMRl9EVVBMRVg7CisJYm54MnhfYml0c19lbihicCwKKwkJICAgIEdSQ0JBU0VfRU1BQzAgKyBwb3J0KjB4NDAwICsgRU1BQ19SRUdfRU1BQ19NT0RFLAorCQkgICAgbW9kZSk7CisKKwlibngyeF9zZXRfbGVkKGJwLCBwYXJhbXMtPnBvcnQsIExFRF9NT0RFX09QRVIsCisJCSAgICBsaW5lX3NwZWVkLCBwYXJhbXMtPmh3X2xlZF9tb2RlLCBwYXJhbXMtPmNoaXBfaWQpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIFBoeSBzZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBibngyeF9od19yZXNldChzdHJ1Y3QgYm54MnggKmJwKQoreworCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCisJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1cpOworCW1zbGVlcCgxKTsKKwlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZXh0X3BoeV9yZXNldChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgIHN0cnVjdCBsaW5rX3ZhcnMgICAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgZXh0X3BoeV90eXBlOworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwlEUChORVRJRl9NU0dfTElOSywgIlBvcnQgJXg6IGJueDJ4X2V4dF9waHlfcmVzZXRcbiIsIHBhcmFtcy0+cG9ydCk7CisJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sZWQgYnkgR1BJTyAxCisJICogR2l2ZSBpdCAxbXMgb2YgcmVzZXQgcHVsc2UKKwkgKi8KKwlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgeworCisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIERpcmVjdFxuIik7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA1Lzg3MDZcbiIpOworCisJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCk7CisKKwkJCS8qIEhXIHJlc2V0ICovCisJCQlibngyeF9od19yZXNldChicCk7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwgMHhhMDQwKTsKKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJCQkvKiBVbnNldCBMb3cgUG93ZXIgTW9kZSBhbmQgU1cgcmVzZXQgKi8KKwkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIKTsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDgwNzJcbiIpOworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgICAgICAxPDwxNSk7CisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQkJeworCQkJdTE2IGVtYWNfYmFzZTsKKwkJCWVtYWNfYmFzZSA9IChwYXJhbXMtPnBvcnQpID8gR1JDQkFTRV9FTUFDMCA6CisJCQkJCUdSQ0JBU0VfRU1BQzE7CisKKwkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIKTsKKworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIKTsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDgwNzNcbiIpOworCQkJYm54MnhfY2w0NV93cml0ZShicCwKKwkJCQkgICAgICAgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgICAgICAxPDwxNSk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgU0ZYNzEwMVxuIik7CisKKwkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIKTsKKworCQkJLyogSFcgcmVzZXQgKi8KKwkJCWJueDJ4X2h3X3Jlc2V0KGJwKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIFBIWSBGYWlsdXJlIGRldGVjdGVkXG4iKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCisJCQkgICBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJCWJyZWFrOworCQl9CisKKwl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KKwkJZXh0X3BoeV90eXBlID0gU0VSREVTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKKwkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIERpcmVjdFxuIik7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfQkNNNTQ4MjoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIDU0ODJcbiIpOworCQkJYm54MnhfaHdfcmVzZXQoYnApOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJCSBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9iY204MDcyX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXUxNiBmd192ZXIxLCBmd192ZXIyOworCisJLyogTmVlZCB0byB3YWl0IDIwMG1zIGFmdGVyIHJlc2V0ICovCisJbXNsZWVwKDIwMCk7CisJLyogQm9vdCBwb3J0IGZyb20gZXh0ZXJuYWwgUk9NCisJICogU2V0IHNlcl9ib290X2N0bCBiaXQgaW4gdGhlIE1JU0NfQ1RSTDEgcmVnaXN0ZXIKKwkgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJCSAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAxKTsKKworCS8qIFJlc2V0IGludGVybmFsIG1pY3JvcHJvY2Vzc29yICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCQkgIE1ESU9fUE1BX0RFVkFELAorCQkJICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCQkgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fUkVTRVRfSU5URVJOQUxfTVApOworCS8qIHNldCBtaWNybyByZXNldCA9IDAgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJCSAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCQkgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9NSUNST19SRVNFVCk7CisJLyogUmVzZXQgaW50ZXJuYWwgbWljcm9wcm9jZXNzb3IgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJCSAgTURJT19QTUFfREVWQUQsCisJCQkgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJCSAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9SRVNFVF9JTlRFUk5BTF9NUCk7CisJLyogd2FpdCBmb3IgMTAwbXMgZm9yIGNvZGUgZG93bmxvYWQgdmlhIFNQSSBwb3J0ICovCisJbXNsZWVwKDEwMCk7CisKKwkvKiBDbGVhciBzZXJfYm9vdF9jdGwgYml0ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCQkgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMCk7CisJLyogV2FpdCAxMDBtcyAqLworCW1zbGVlcCgxMDApOworCisJLyogUHJpbnQgdGhlIFBIWSBGVyB2ZXJzaW9uICovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJCSAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZmd192ZXIxKTsKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkJICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJmZ3X3ZlcjIpOworCURQKE5FVElGX01TR19MSU5LLCAiODA3MiBGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwgZndfdmVyMSwgZndfdmVyMik7Cit9CisKK3N0YXRpYyB1OCBibngyeF84MDczX2lzX3Nucl9uZWVkZWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJLyogVGhpcyBpcyBvbmx5IHJlcXVpcmVkIGZvciA4MDczQTEsIHZlcnNpb24gMTAyIG9ubHkgKi8KKworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXUxNiB2YWw7CisKKwkvKiBSZWFkIDgwNzMgSFcgcmV2aXNpb24qLworCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAweGM4MDEsICZ2YWwpOworCisJaWYgKHZhbCAhPSAxKSB7CisJCS8qIE5vIG5lZWQgdG8gd29ya2Fyb3VuZCBpbiA4MDczIEExICovCisJCXJldHVybiAwOworCX0KKworCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZ2YWwpOworCisJLyogU05SIHNob3VsZCBiZSBhcHBsaWVkIG9ubHkgZm9yIHZlcnNpb24gMHgxMDIgKi8KKwlpZiAodmFsICE9IDB4MTAyKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdTggYm54MnhfYmNtODA3M194YXVpX3dhKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXUxNiB2YWwsIGNudCwgY250MSA7CisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgMHhjODAxLCAmdmFsKTsKKworCWlmICh2YWwgPiAwKSB7CisJCS8qIE5vIG5lZWQgdG8gd29ya2Fyb3VuZCBpbiA4MDczIEExICovCisJCXJldHVybiAwOworCX0KKwkvKiBYQVVJIHdvcmthcm91bmQgaW4gODA3MyBBMDogKi8KKworCS8qIEFmdGVyIGxvYWRpbmcgdGhlIGJvb3QgUk9NIGFuZCByZXN0YXJ0aW5nIEF1dG9uZWcsCisJcG9sbCBEZXYxLCBSZWcgJEM4MjA6ICovCisKKwlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDA7IGNudCsrKSB7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgMHhjODIwLCAmdmFsKTsKKwkJICAvKiBJZiBiaXQgWzE0XSA9IDAgb3IgYml0IFsxM10gPSAwLCBjb250aW51ZSBvbiB3aXRoCisJCSAgIHN5c3RlbSBpbml0aWFsaXphdGlvbiAoWEFVSSB3b3JrLWFyb3VuZCBub3QgcmVxdWlyZWQsCisJCSAgICBhcyB0aGVzZSBiaXRzIGluZGljYXRlIDIuNUcgb3IgMUcgbGluayB1cCkuICovCisJCWlmICghKHZhbCAmICgxPDwxNCkpIHx8ICEodmFsICYgKDE8PDEzKSkpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEFVSSB3b3JrLWFyb3VuZCBub3QgcmVxdWlyZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAoISh2YWwgJiAoMTw8MTUpKSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJjbGMgYml0IDE1IHdlbnQgb2ZmXG4iKTsKKwkJCSAvKiBJZiBiaXQgMTUgaXMgMCwgdGhlbiBwb2xsIERldjEsIFJlZyAkQzg0MSB1bnRpbAorCQkJICBpdCdzIE1TQiAoYml0IDE1KSBnb2VzIHRvIDEgKGluZGljYXRpbmcgdGhhdCB0aGUKKwkJCSAgWEFVSSB3b3JrYXJvdW5kIGhhcyBjb21wbGV0ZWQpLAorCQkJICB0aGVuIGNvbnRpbnVlIG9uIHdpdGggc3lzdGVtIGluaXRpYWxpemF0aW9uLiovCisJCQlmb3IgKGNudDEgPSAwOyBjbnQxIDwgMTAwMDsgY250MSsrKSB7CisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCisJCQkJCWV4dF9waHlfYWRkciwKKwkJCQkJTURJT19QTUFfREVWQUQsCisJCQkJCTB4Yzg0MSwgJnZhbCk7CisJCQkJaWYgKHZhbCAmICgxPDwxNSkpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAgIlhBVUkgd29ya2Fyb3VuZCBoYXMgY29tcGxldGVkXG4iKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJIH0KKwkJCQkgbXNsZWVwKDMpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJbXNsZWVwKDMpOworCX0KKwlEUChORVRJRl9NU0dfTElOSywgIldhcm5pbmc6IFhBVUkgd29yay1hcm91bmQgdGltZW91dCAhISFcbiIpOworCXJldHVybiAtRUlOVkFMOworCit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjIsIHZhbDsKKwkvKiBOZWVkIHRvIHdhaXQgMTAwbXMgYWZ0ZXIgcmVzZXQgKi8KKwltc2xlZXAoMTAwKTsKKwkvKiBCb290IHBvcnQgZnJvbSBleHRlcm5hbCBST00JKi8KKwkvKiBFREMgZ3JzdCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICAweDAwMDEpOworCisJLyogdWNvZGUgcmVib290IGFuZCByc3QgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAorCQkgICAgICAgMHgwMDhjKTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAxKTsKKworCS8qIFJlc2V0IGludGVybmFsIG1pY3JvcHJvY2Vzc29yICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fTUlDUk9fUkVTRVQpOworCisJLyogUmVsZWFzZSBzcnN0IGJpdCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKKworCS8qIHdhaXQgZm9yIDEwMG1zIGZvciBjb2RlIGRvd25sb2FkIHZpYSBTUEkgcG9ydCAqLworCW1zbGVlcCgxMDApOworCisJLyogQ2xlYXIgc2VyX2Jvb3RfY3RsIGJpdCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAwKTsKKworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJmZ3X3ZlcjIpOworCURQKE5FVElGX01TR19MSU5LLCAiODA3MyBGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwgZndfdmVyMSwgZndfdmVyMik7CisKKwkvKiBPbmx5IHNldCBiaXQgMTAgPSAxIChUeCBwb3dlciBkb3duKSAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19UWF9QT1dFUl9ET1dOLCAmdmFsKTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfVFhfUE9XRVJfRE9XTiwgKHZhbCB8IDE8PDEwKSk7CisKKwltc2xlZXAoNjAwKTsKKwkvKiBSZWxlYXNlIGJpdCAxMCAoUmVsZWFzZSBUeCBwb3dlciBkb3duKSAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfVFhfUE9XRVJfRE9XTiwgKHZhbCAmICh+KDE8PDEwKSkpKTsKKworfQorCitzdGF0aWMgdm9pZCBibngyeF9iY204MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTE2IHZhbDsKKwl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgMHhjODAxLCAmdmFsKTsKKworCWlmICh2YWwgPT0gMCkgeworCQkvKiBNdXN0bid0IHNldCBsb3cgcG93ZXIgbW9kZSBpbiA4MDczIEEwICovCisJCXJldHVybjsKKwl9CisKKwkvKiBEaXNhYmxlIFBMTCBzZXF1ZW5jZXIgKHVzZSByZWFkLW1vZGlmeS13cml0ZSB0byBjbGVhciBiaXQgMTMpICovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsCisJCSAgICAgICBNRElPX1hTX1BMTF9TRVFVRU5DRVIsICZ2YWwpOworCXZhbCAmPSB+KDE8PDEzKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgdmFsKTsKKworCS8qIFBMTCBjb250cm9scyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVFLCAweDEwNzcpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVELCAweDAwMDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVDLCAweDAzMEIpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVCLCAweDEyNDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19YU19ERVZBRCwgMHg4MDVBLCAweDI0OTApOworCisJLyogVHggQ29udHJvbHMgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsIDB4ODBBNywgMHgwQzc0KTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsIDB4ODBBNiwgMHg5MDQxKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsIDB4ODBBNSwgMHg0NjQwKTsKKworCS8qIFJ4IENvbnRyb2xzICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwRkUsIDB4MDFDNCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwRkQsIDB4OTI0OSk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1hTX0RFVkFELCAweDgwRkMsIDB4MjAxNSk7CisKKwkvKiBFbmFibGUgUExMIHNlcXVlbmNlciAgKHVzZSByZWFkLW1vZGlmeS13cml0ZSB0byBzZXQgYml0IDEzKSAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1hTX0RFVkFELAorCQkgICAgICAgTURJT19YU19QTExfU0VRVUVOQ0VSLCAmdmFsKTsKKwl2YWwgfD0gKDE8PDEzKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgdmFsKTsKK30KK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTgwN3hfZm9yY2VfMTBHKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwkvKiBGb3JjZSBLUiBvciBLWCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJICAgICAgIDB4MjA0MCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR18xMEdfQ1RSTDIsCisJCSAgICAgICAweDAwMGIpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfQkNNX0NUUkwsCisJCSAgICAgICAweDAwMDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsCisJCSAgICAgICAweDAwMDApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9leHRfcGh5X3NldF9wYXVzZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHZhbDsKKwl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCS8qIHJlYWQgbW9kaWZ5IHdyaXRlIHBhdXNlIGFkdmVydGl6aW5nICovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkgICAgICBNRElPX0FOX1JFR19BRFZfUEFVU0UsICZ2YWwpOworCisJdmFsICY9IH5NRElPX0FOX1JFR19BRFZfUEFVU0VfQk9USDsKKwkvKiBQbGVhc2UgcmVmZXIgdG8gVGFibGUgMjhCLTMgb2YgODAyLjNhYi0xOTk5IHNwZWMuICovCisKKwlpZiAodmFycy0+aWVlZV9mYyAmCisJICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUMpIHsKKwkJdmFsIHw9ICBNRElPX0FOX1JFR19BRFZfUEFVU0VfQVNZTU1FVFJJQzsKKwl9CisJaWYgKHZhcnMtPmllZWVfZmMgJgorCSAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIKSB7CisJCXZhbCB8PQorCQkgTURJT19BTl9SRUdfQURWX1BBVVNFX1BBVVNFOworCX0KKwlEUChORVRJRl9NU0dfTElOSywKKwkJICJFeHQgcGh5IEFOIGFkdmVydGl6ZSAweCV4XG4iLCB2YWwpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCSAgICAgICBNRElPX0FOX1JFR19BRFZfUEFVU0UsIHZhbCk7Cit9CisKK3N0YXRpYyB1OCBibngyeF9leHRfcGh5X2luaXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTMyIGV4dF9waHlfdHlwZTsKKwl1OCBleHRfcGh5X2FkZHI7CisJdTE2IGNudDsKKwl1MTYgY3RybCA9IDA7CisJdTE2IHZhbCA9IDA7CisJdTggcmMgPSAwOworCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCWV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisKKwkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb2Z0IHJlc2V0IGlzIG9mZiAoZXhwZWN0IGZvciB0aGUgODA3MjoKKwkJICogZHVlIHRvIHRoZSBsb2NrLCBpdCB3aWxsIGJlIGRvbmUgaW5zaWRlIHRoZSBzcGVjaWZpYworCQkgKiBoYW5kbGluZykKKwkJICovCisJCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRSkgJiYKKwkJICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTikgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykpIHsKKwkJCS8qIFdhaXQgZm9yIHNvZnQgcmVzZXQgdG8gZ2V0IGNsZWFyZWQgdXB0byAxIHNlYyAqLworCQkJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDAwOyBjbnQrKykgeworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAmY3RybCk7CisJCQkJaWYgKCEoY3RybCAmICgxPDwxNSkpKQorCQkJCQlicmVhazsKKwkJCQltc2xlZXAoMSk7CisJCQl9CisJCQlEUChORVRJRl9NU0dfTElOSywgImNvbnRyb2wgcmVnIDB4JXggKGFmdGVyICVkIG1zKVxuIiwKKwkJCQkgY3RybCwgY250KTsKKwkJfQorCisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIERpcmVjdFxuIik7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNVxuIik7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMLAorCQkJCSAgICAgICAweDgyODgpOworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJCQkgICAgICAgMHg3ZmJmKTsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ01VX1BMTF9CWVBBU1MsCisJCQkJICAgICAgIDB4MDEwMCk7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1dJU19ERVZBRCwKKwkJCQkgICAgICAgTURJT19XSVNfUkVHX0xBU0lfQ05UTCwgMHgxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKKworCQkJbXNsZWVwKDEwKTsKKwkJCS8qIEZvcmNlIHNwZWVkICovCisJCQkvKiBGaXJzdCBlbmFibGUgTEFTSSAqLworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAorCQkJCSAgICAgICAweDA0MDApOworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4MDAwNCk7CisKKwkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDAwKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYgZm9yY2UgMTBHYnBzXG4iKTsKKworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0RJR0lUQUxfQ1RSTCwKKwkJCQkJICAgICAgIDB4NDAwKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogRm9yY2UgMUdicHMgdXNpbmcgYXV0b25lZyB3aXRoIDFHCisJCQkJYWR2ZXJ0aXNtZW50ICovCisKKwkJCQkvKiBBbGxvdyBDTDM3IHRocm91Z2ggQ0w3MyAqLworCQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2IEF1dG9OZWdcbiIpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0NMNzMsCisJCQkJCSAgICAgICAweDA0MGMpOworCisJCQkJLyogRW5hYmxlIEZ1bGwtRHVwbGV4IGFkdmVydGlzbWVudCBvbiBDTDM3ICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfRkQsCisJCQkJCSAgICAgICAweDAwMjApOworCQkJCS8qIEVuYWJsZSBDTDM3IEFOICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfQU4sCisJCQkJCSAgICAgICAweDEwMDApOworCQkJCS8qIDFHIHN1cHBvcnQgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQURWLCAoMTw8NSkpOworCisJCQkJLyogRW5hYmxlIGNsYXVzZSA3MyBBTiAqLworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLAorCQkJCQkgICAgICAgMHgxMjAwKTsKKworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKKwkJeworCQkJdTE2IHRtcDE7CisJCQl1MTYgcnhfYWxhcm1fY3RybF92YWw7CisJCQl1MTYgbGFzaV9jdHJsX3ZhbDsKKwkJCWlmIChleHRfcGh5X3R5cGUgPT0KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKSB7CisJCQkJcnhfYWxhcm1fY3RybF92YWwgPSAweDQwMDsKKwkJCQlsYXNpX2N0cmxfdmFsID0gMHgwMDA0OworCQkJfSBlbHNlIHsKKwkJCQkvKiBJbiA4MDczLCBwb3J0MSBpcyBkaXJlY3RlZCB0aHJvdWdoIGVtYWMwIGFuZAorCQkJCSAqIHBvcnQwIGlzIGRpcmVjdGVkIHRocm91Z2ggZW1hYzEKKwkJCQkgKi8KKwkJCQlyeF9hbGFybV9jdHJsX3ZhbCA9ICgxPDwyKTsKKwkJCQkvKmxhc2lfY3RybF92YWwgPSAweDAwMDU7Ki8KKwkJCQlsYXNpX2N0cmxfdmFsID0gMHgwMDA0OworCQkJfQorCisJCQkvKiBXYWl0IGZvciBzb2Z0IHJlc2V0IHRvIGdldCBjbGVhcmVkIHVwdG8gMSBzZWMgKi8KKwkJCWZvciAoY250ID0gMDsgY250IDwgMTAwMDsgY250KyspIHsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkJICAgICAgJmN0cmwpOworCQkJCWlmICghKGN0cmwgJiAoMTw8MTUpKSkKKwkJCQkJYnJlYWs7CisJCQkJbXNsZWVwKDEpOworCQkJfQorCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJIjgwN3ggY29udHJvbCByZWcgMHgleCAoYWZ0ZXIgJWQgbXMpXG4iLAorCQkJCWN0cmwsIGNudCk7CisKKwkJCWlmIChleHRfcGh5X3R5cGUgPT0KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKXsKKwkJCQlibngyeF9iY204MDcyX2V4dGVybmFsX3JvbV9ib290KHBhcmFtcyk7CisJCQl9IGVsc2UgeworCQkJCWJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3QocGFyYW1zKTsKKwkJCQkvKiBJbiBjYXNlIG9mIDgwNzMgd2l0aCBsb25nIHhhdWkgbGluZXMsCisJCQkJZG9uJ3Qgc2V0IHRoZSA4MDczIHhhdWkgbG93IHBvd2VyKi8KKwkJCQlibngyeF9iY204MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKHBhcmFtcyk7CisJCQl9CisKKwkJCS8qIGVuYWJsZSBMQVNJICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJICAgICAgIHJ4X2FsYXJtX2N0cmxfdmFsKTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsCisJCQkJICAgICAgIGxhc2lfY3RybF92YWwpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnRtcDEpOworCisJCQlEUChORVRJRl9NU0dfTElOSywgIkJlZm9yZSByb20gUlhfQUxBUk0ocG9ydDEpOiIKKwkJCQkJICAgICAiMHgleFxuIiwgdG1wMSk7CisKKwkJCS8qIElmIHRoaXMgaXMgZm9yY2VkIHNwZWVkLCBzZXQgdG8gS1Igb3IgS1gKKwkJCSAqIChhbGwgb3RoZXIgYXJlIG5vdCBzdXBwb3J0ZWQpCisJCQkgKi8KKwkJCWlmICghKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpKSB7CisJCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwMCkgeworCQkJCQlibngyeF9iY204MDd4X2ZvcmNlXzEwRyhwYXJhbXMpOworCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJICAgIkZvcmNlZCBzcGVlZCAxMEcgb24gODA3WFxuIik7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSBpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PQorCQkJCQkgICBTUEVFRF8yNTAwKSB7CisJCQkJCXZhbCA9ICgxPDw1KTsKKwkJCQkJLyogTm90ZSB0aGF0IDIuNUcgd29ya3Mgb25seQorCQkJCQl3aGVuIHVzZWQgd2l0aCAxRyBhZHZlcnRpc21lbnQgKi8KKwkJCQl9IGVsc2UKKwkJCQkJdmFsID0gKDE8PDUpOworCQkJfSBlbHNlIHsKKworCQkJCXZhbCA9IDA7CisJCQkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkJCQlQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwRykKKwkJCQkJdmFsIHw9ICgxPDw3KTsKKworCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkJUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykKKwkJCQkJdmFsIHw9ICgxPDw1KTsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIjgwN3ggYXV0b25lZyB2YWwgPSAweCV4XG4iLCB2YWwpOworCQkJCS8qdmFsID0gKCgxPDw1KXwoMTw8NykpOyovCisJCQl9CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgIE1ESU9fQU5fUkVHX0FEViwgdmFsKTsKKworCQkJaWYgKGV4dF9waHlfdHlwZSA9PQorCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpIHsKKwkJCQkvKiBEaXNhYmxlIDIuNUdoeiAqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgMHg4MzI5LCAmdG1wMSk7CisvKiBTVVBQT1JUX1NQRUVEX0NBUEFCSUxJVFkKKwkJCQkoRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGxpbmsgb3JkZXIsIGl0cyBub3QKKwkJCQlwb3NzaWJsZSB0byBlbmFibGUgMi41RyB3aXRoaW4gdGhlIGF1dG9uZWcKKwkJCQljYXBhYmlsaXRpZXMpCisJCQkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMl81RykKKyovCisJCQkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMjUwMCkgeworCQkJCQl1MTYgcGh5X3ZlcjsKKwkJCQkJLyogQWxsb3cgMi41RyBmb3IgQTEgYW5kIGFib3ZlICovCisJCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJCQkJIGV4dF9waHlfYWRkciwKKwkJCQkJIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgMHhjODAxLCAmcGh5X3Zlcik7CisKKwkJCQkJaWYgKHBoeV92ZXIgPiAwKQorCQkJCQkJdG1wMSB8PSAxOworCQkJCQllbHNlCisJCQkJCQl0bXAxICY9IDB4ZmZmZTsKKwkJCX0KKwkJCQllbHNlCisJCQkJCXRtcDEgJj0gMHhmZmZlOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgMHg4MzI5LCB0bXAxKTsKKwkJCX0KKwkJCS8qIEFkZCBzdXBwb3J0IGZvciBDTDM3IChwYXNzaXZlIG1vZGUpIEkgKi8KKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfQ0w3MywgMHgwNDBjKTsKKwkJCS8qIEFkZCBzdXBwb3J0IGZvciBDTDM3IChwYXNzaXZlIG1vZGUpIElJICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0ZELCAweDIwKTsKKwkJCS8qIEFkZCBzdXBwb3J0IGZvciBDTDM3IChwYXNzaXZlIG1vZGUpIElJSSAqLworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19BTiwgMHgxMDAwKTsKKwkJCS8qIFJlc3RhcnQgYXV0b25lZyAqLworCQkJbXNsZWVwKDUwMCk7CisKKwkJCWlmIChleHRfcGh5X3R5cGUgPT0KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSB7CisKKwkJCS8qIFRoZSBTTlIgd2lsbCBpbXByb3ZlIGFib3V0IDJkYiBieSBjaGFuZ2luZyB0aGUKKwkJCQlCVyBhbmQgRkVFIG1haW4gdGFwLiBSZXN0IGNvbW1hbmRzIGFyZSBleGVjdXRlZAorCQkJCWFmdGVyIGxpbmsgaXMgdXAqLworCQkJLyogQ2hhbmdlIEZGRSBtYWluIGN1cnNvciB0byA1IGluIEVEQyByZWdpc3RlciAqLworCQkJCWlmIChibngyeF84MDczX2lzX3Nucl9uZWVkZWQocGFyYW1zKSkKKwkJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgTURJT19QTUFfREVWQUQsCisJCQkJCQkgICAgTURJT19QTUFfUkVHX0VEQ19GRkVfTUFJTiwKKwkJCQkJCSAgICAweEZCMEMpOworCisJCQkvKiBFbmFibGUgRkVDIChGb3J3YXJlIEVycm9yIENvcnJlY3Rpb24pCisJCQkgICBSZXF1ZXN0IGluIHRoZSBBTiAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgIE1ESU9fQU5fUkVHX0FEVjIsICZ0bXAxKTsKKworCQkJdG1wMSB8PSAoMTw8MTUpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgIE1ESU9fQU5fUkVHX0FEVjIsIHRtcDEpOworCQkJfQorCisJCQlibngyeF9leHRfcGh5X3NldF9wYXVzZShwYXJhbXMsIHZhcnMpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLCAweDEyMDApOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4MDd4IEF1dG9uZWcgUmVzdGFydDogIgorCQkJICAgIkFkdmVydGlzZSAxRz0leCwgMTBHPSV4XG4iLAorCQkJICAgKCh2YWwgJiAoMTw8NSkpID4gMCksCisJCQkgICAoKHZhbCAmICgxPDw3KSkgPiAwKSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkiU2V0dGluZyB0aGUgU0ZYNzEwMSBMQVNJIGluZGljYXRpb25cbiIpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMHgxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJICAiU2V0dGluZyB0aGUgU0ZYNzEwMSBMRUQgdG8gYmxpbmsgb24gdHJhZmZpY1xuIik7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHXzcxMDdfTEVEX0NOVEwsICgxPDwzKSk7CisKKwkJCWJueDJ4X2V4dF9waHlfc2V0X3BhdXNlKHBhcmFtcywgdmFycyk7CisJCQkvKiBSZXN0YXJ0IGF1dG9uZWcgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkgICAgICBNRElPX0FOX1JFR19DVFJMLCAmdmFsKTsKKwkJCXZhbCB8PSAweDIwMDsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICJYR1hTIFBIWSBGYWlsdXJlIGRldGVjdGVkIDB4JXhcbiIsCisJCQkJIHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCisJCQkJICBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KKy8qCQlleHRfcGh5X2FkZHIgPSAoKGJwLT5leHRfcGh5X2NvbmZpZyAmCisJCQkJIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQlQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9BRERSX1NISUZUKTsKKyovCisJCWV4dF9waHlfdHlwZSA9IFNFUkRFU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyBEaXJlY3RcbiIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0JDTTU0ODI6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyA1NDgyXG4iKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBTZXJEZXMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKKwkJCSAgIHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyB1OCBibngyeF9leHRfcGh5X2lzX2xpbmtfdXAoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiBleHRfcGh5X3R5cGU7CisJdTggZXh0X3BoeV9hZGRyOworCXUxNiB2YWwxID0gMCwgdmFsMjsKKwl1MTYgcnhfc2QsIHBjc19zdGF0dXM7CisJdTggZXh0X3BoeV9saW5rX3VwID0gMDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCWV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisKKwkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIERpcmVjdFxuIik7CisJCQlleHRfcGh5X2xpbmtfdXAgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDVcbiIpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19XSVNfREVWQUQsCisJCQkJICAgICAgTURJT19XSVNfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7CisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDUgTEFTSSBzdGF0dXMgMHgleFxuIiwgdmFsMSk7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fV0lTX0RFVkFELAorCQkJCSAgICAgIE1ESU9fV0lTX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA1IExBU0kgc3RhdHVzIDB4JXhcbiIsIHZhbDEpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfU0QsICZyeF9zZCk7CisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDUgcnhfc2QgMHgleFxuIiwgcnhfc2QpOworCQkJZXh0X3BoeV9saW5rX3VwID0gKHJ4X3NkICYgMHgxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2IExBU0kgc3RhdHVzIDB4JXhcbiIsIHZhbDEpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1JYX1NELCAmcnhfc2QpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsCisJCQkJICAgICAgTURJT19QQ1NfUkVHX1NUQVRVUywgJnBjc19zdGF0dXMpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLCAmdmFsMik7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLCAmdmFsMik7CisKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiByeF9zZCAweCV4IgorCQkJICAgIiAgcGNzX3N0YXR1cyAweCV4IDFHYnBzIGxpbmtfc3RhdHVzIDB4JXhcbiIsCisJCQkgICByeF9zZCwgcGNzX3N0YXR1cywgdmFsMik7CisJCQkvKiBsaW5rIGlzIHVwIGlmIGJvdGggYml0IDAgb2YgcG1kX3J4X3NkIGFuZAorCQkJICogYml0IDAgb2YgcGNzX3N0YXR1cyBhcmUgc2V0LCBvciBpZiB0aGUgYXV0b25lZyBiaXQKKwkJCSAgIDEgaXMgc2V0CisJCQkgKi8KKwkJCWV4dF9waHlfbGlua191cCA9ICgocnhfc2QgJiBwY3Nfc3RhdHVzICYgMHgxKSB8fAorCQkJCQkgICAodmFsMiAmICgxPDwxKSkpOworCQkJLyogY2xlYXIgTEFTSSBpbmRpY2F0aW9uKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnZhbDIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CisJCXsKKwkJCWlmIChleHRfcGh5X3R5cGUgPT0KKwkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgeworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsCisJCQkJICAgICAgTURJT19QQ1NfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUENTX1JFR19MQVNJX1NUQVRVUywgJnZhbDIpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICI4NzB4IExBU0kgc3RhdHVzIDB4JXgtPjB4JXhcbiIsCisJCQkJICB2YWwxLCB2YWwyKTsKKworCQkJfSBlbHNlIHsKKwkJCQkvKiBJbiA4MDczLCBwb3J0MSBpcyBkaXJlY3RlZCB0aHJvdWdoIGVtYWMwIGFuZAorCQkJCSAqIHBvcnQwIGlzIGRpcmVjdGVkIHRocm91Z2ggZW1hYzEKKwkJCQkgKi8KKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDIpOworCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgIjg3MDMgTEFTSSBzdGF0dXMgMHgleC0+MHgleFxuIiwKKwkJCQkJICB2YWwxLCB2YWwyKTsKKwkJCX0KKworCQkJLyogY2xlYXIgdGhlIGludGVycnVwdCBMQVNJIHN0YXR1cyByZWdpc3RlciAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BDU19ERVZBRCwKKwkJCQkgICAgICBNRElPX1BDU19SRUdfU1RBVFVTLCAmdmFsMik7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUENTX1JFR19TVEFUVVMsICZ2YWwxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODA3eCBQQ1Mgc3RhdHVzIDB4JXgtPjB4JXhcbiIsCisJCQkgICB2YWwyLCB2YWwxKTsKKwkJCS8qIENoZWNrIHRoZSBMQVNJICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnZhbDIpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sCisJCQkJICAgICAgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJLUiAweDkwMDMgMHgleC0+MHgleFxuIiwKKwkJCSAgIHZhbDIsIHZhbDEpOworCQkJLyogQ2hlY2sgdGhlIGxpbmsgc3RhdHVzICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUENTX1JFR19TVEFUVVMsICZ2YWwyKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiS1IgUENTIHN0YXR1cyAweCV4XG4iLCB2YWwyKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfU1RBVFVTLCAmdmFsMik7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19TVEFUVVMsICZ2YWwxKTsKKwkJCWV4dF9waHlfbGlua191cCA9ICgodmFsMSAmIDQpID09IDQpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJQTUFfUkVHX1NUQVRVUz0weCV4XG4iLCB2YWwxKTsKKwkJCWlmIChleHRfcGh5X3R5cGUgPT0KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSB7CisJCQkJdTE2IGFuMTAwMF9zdGF0dXMgPSAwOworCQkJCWlmIChleHRfcGh5X2xpbmtfdXAgJiYKKwkJCQkgICAgKAorCQkJCSAgICAgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgIT0gU1BFRURfMTAwMDApCisJCQkJICAgICApKSB7CisJCQkJCWlmIChibngyeF9iY204MDczX3hhdWlfd2EocGFyYW1zKQorCQkJCQkgICAgICE9IDApIHsKKwkJCQkJCWV4dF9waHlfbGlua191cCA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgIE1ESU9fWFNfREVWQUQsCisJCQkJCQkgICAgICAweDgzMDQsCisJCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgTURJT19YU19ERVZBRCwKKwkJCQkJCSAgICAgIDB4ODMwNCwKKwkJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKKwkJCQl9CisJCQkJLyogQ2hlY2sgdGhlIGxpbmsgc3RhdHVzIG9uIDEuMS4yICovCisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgTURJT19QTUFfUkVHX1NUQVRVUywgJnZhbDIpOworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgIE1ESU9fUE1BX1JFR19TVEFUVVMsICZ2YWwxKTsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIktSIFBNQSBzdGF0dXMgMHgleC0+MHgleCwiCisJCQkJCSAgICAgImFuX2xpbmtfc3RhdHVzPTB4JXhcbiIsCisJCQkJCSAgdmFsMiwgdmFsMSwgYW4xMDAwX3N0YXR1cyk7CisKKwkJCQlleHRfcGh5X2xpbmtfdXAgPSAoKCh2YWwxICYgNCkgPT0gNCkgfHwKKwkJCQkJCSAgICAoYW4xMDAwX3N0YXR1cyAmICgxPDwxKSkpOworCQkJCWlmIChleHRfcGh5X2xpbmtfdXAgJiYKKwkJCQkgICAgYm54MnhfODA3M19pc19zbnJfbmVlZGVkKHBhcmFtcykpIHsKKwkJCQkJLyogVGhlIFNOUiB3aWxsIGltcHJvdmUgYWJvdXQgMmRiYnkKKwkJCQkJY2hhbmdpbmcgdGhlIEJXIGFuZCBGRUUgbWFpbiB0YXAuKi8KKworCQkJCQkvKiBUaGUgMXN0IHdyaXRlIHRvIGNoYW5nZSBGRkUgbWFpbgorCQkJCQl0YXAgaXMgc2V0IGJlZm9yZSByZXN0YXJ0IEFOICovCisJCQkJCS8qIENoYW5nZSBQTEwgQmFuZHdpZHRoIGluIEVEQworCQkJCQlyZWdpc3RlciAqLworCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgIE1ESU9fUE1BX1JFR19QTExfQkFORFdJRFRILAorCQkJCQkJICAgIDB4MjZCQyk7CisKKwkJCQkJLyogQ2hhbmdlIENEUiBCYW5kd2lkdGggaW4gRURDCisJCQkJCXJlZ2lzdGVyICovCisJCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgTURJT19QTUFfREVWQUQsCisJCQkJCQkgICAgTURJT19QTUFfUkVHX0NEUl9CQU5EV0lEVEgsCisJCQkJCQkgICAgMHgwMzMzKTsKKworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDIpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgIjEwRy1iYXNlLVQgTEFTSSBzdGF0dXMgMHgleC0+MHgleFxuIiwKKwkJCQkgIHZhbDIsIHZhbDEpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1NUQVRVUywgJnZhbDIpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICIxMEctYmFzZS1UIFBNQSBzdGF0dXMgMHgleC0+MHgleFxuIiwKKwkJCQkgdmFsMiwgdmFsMSk7CisJCQlleHRfcGh5X2xpbmtfdXAgPSAoKHZhbDEgJiA0KSA9PSA0KTsKKwkJCS8qIGlmIGxpbmsgaXMgdXAKKwkJCSAqIHByaW50IHRoZSBBTiBvdXRjb21lIG9mIHRoZSBTRlg3MTAxIFBIWQorCQkJICovCisJCQlpZiAoZXh0X3BoeV9saW5rX3VwKSB7CisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19NQVNURVJfU1RBVFVTLAorCQkJCQkgICAgICAmdmFsMik7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAiU0ZYNzEwMSBBTiBzdGF0dXMgMHgleC0+TWFzdGVyPSV4XG4iLAorCQkJCQkgIHZhbDIsCisJCQkJCSAodmFsMiAmICgxPDwxNCkpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCisJCQkgICBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJCWV4dF9waHlfbGlua191cCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJfSBlbHNlIHsgLyogU2VyRGVzICovCisJCWV4dF9waHlfdHlwZSA9IFNFUkRFU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyBEaXJlY3RcbiIpOworCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9CQ001NDgyOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgNTQ4MlxuIik7CisJCQlleHRfcGh5X2xpbmtfdXAgPSAxOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJCSBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJCWV4dF9waHlfbGlua191cCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBleHRfcGh5X2xpbmtfdXA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2xpbmtfaW50X2VuYWJsZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXUzMiBleHRfcGh5X3R5cGU7CisJdTMyIG1hc2s7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJLyogc2V0dGluZyB0aGUgc3RhdHVzIHRvIHJlcG9ydCBvbiBsaW5rIHVwCisJICAgZm9yIGVpdGhlciBYR1hTIG9yIFNlckRlcyAqLworCisJaWYgKHBhcmFtcy0+c3dpdGNoX2NmZyA9PSBTV0lUQ0hfQ0ZHXzEwRykgeworCQltYXNrID0gKE5JR19NQVNLX1hHWFMwX0xJTksxMEcgfAorCQkJTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMpOworCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWQgWEdYUyBpbnRlcnJ1cHRcbiIpOworCQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJaWYgKChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgorCQkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFKSAmJgorCQkgICAgKGV4dF9waHlfdHlwZSAhPQorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OKSkgeworCQkJbWFzayB8PSBOSUdfTUFTS19NSV9JTlQ7CisJCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWQgZXh0ZXJuYWwgcGh5IGludFxuIik7CisJCX0KKworCX0gZWxzZSB7IC8qIFNlckRlcyAqLworCQltYXNrID0gTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUzsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGVkIFNlckRlcyBpbnRlcnJ1cHRcbiIpOworCQlleHRfcGh5X3R5cGUgPSBTRVJERVNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQlpZiAoKGV4dF9waHlfdHlwZSAhPQorCQkJCVBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgorCQkgICAgKGV4dF9waHlfdHlwZSAhPQorCQkJCVBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pKSB7CisJCQltYXNrIHw9IE5JR19NQVNLX01JX0lOVDsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxlZCBleHRlcm5hbCBwaHkgaW50XG4iKTsKKwkJfQorCX0KKwlibngyeF9iaXRzX2VuKGJwLAorCQkgICAgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAorCQkgICAgICBtYXNrKTsKKwlEUChORVRJRl9NU0dfTElOSywgInBvcnQgJXgsIGlzX3hneHM9JXgsIGludF9zdGF0dXMgMHgleFxuIiwgcG9ydCwKKwkJIChwYXJhbXMtPnN3aXRjaF9jZmcgPT0gU1dJVENIX0NGR18xMEcpLAorCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpKTsKKworCURQKE5FVElGX01TR19MSU5LLCAiIGludF9tYXNrIDB4JXgsIE1JX0lOVCAleCwgU0VSREVTX0xJTksgJXhcbiIsCisJCSBSRUdfUkQoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpLAorCQkgUkVHX1JEKGJwLCBOSUdfUkVHX0VNQUMwX1NUQVRVU19NSVNDX01JX0lOVCArIHBvcnQqMHgxOCksCisJCSBSRUdfUkQoYnAsIE5JR19SRUdfU0VSREVTMF9TVEFUVVNfTElOS19TVEFUVVMrcG9ydCoweDNjKSk7CisJRFAoTkVUSUZfTVNHX0xJTkssICIgMTBHICV4LCBYR1hTX0xJTksgJXhcbiIsCisJICAgUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX1NUQVRVU19MSU5LMTBHICsgcG9ydCoweDY4KSwKKwkgICBSRUdfUkQoYnAsIE5JR19SRUdfWEdYUzBfU1RBVFVTX0xJTktfU1RBVFVTICsgcG9ydCoweDY4KSk7Cit9CisKKworLyoKKyAqIGxpbmsgbWFuYWdlbWVudAorICovCitzdGF0aWMgdm9pZCBibngyeF9saW5rX2ludF9hY2soc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsIHUxNiBpc18xMGcpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKworCS8qIGZpcnN0IHJlc2V0IGFsbCBzdGF0dXMKKwkgKiB3ZSBhc3N1bWUgb25seSBvbmUgbGluZSB3aWxsIGJlIGNoYW5nZSBhdCBhIHRpbWUgKi8KKwlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAorCQkgICAgIChOSUdfU1RBVFVTX1hHWFMwX0xJTksxMEcgfAorCQkgICAgICBOSUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTIHwKKwkJICAgICAgTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTKSk7CisJaWYgKHZhcnMtPnBoeV9saW5rX3VwKSB7CisJCWlmIChpc18xMGcpIHsKKwkJCS8qIERpc2FibGUgdGhlIDEwRyBsaW5rIGludGVycnVwdAorCQkJICogYnkgd3JpdGluZyAxIHRvIHRoZSBzdGF0dXMgcmVnaXN0ZXIKKwkJCSAqLworCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxMEcgWEdYUyBwaHkgbGluayB1cFxuIik7CisJCQlibngyeF9iaXRzX2VuKGJwLAorCQkJCSAgICAgIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKKwkJCQkgICAgICBOSUdfU1RBVFVTX1hHWFMwX0xJTksxMEcpOworCisJCX0gZWxzZSBpZiAocGFyYW1zLT5zd2l0Y2hfY2ZnID09IFNXSVRDSF9DRkdfMTBHKSB7CisJCQkvKiBEaXNhYmxlIHRoZSBsaW5rIGludGVycnVwdAorCQkJICogYnkgd3JpdGluZyAxIHRvIHRoZSByZWxldmFudCBsYW5lCisJCQkgKiBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyCisJCQkgKi8KKwkJCXUzMiBzZXJfbGFuZSA9ICgocGFyYW1zLT5sYW5lX2NvbmZpZyAmCisJCQkJICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX01BU0spID4+CisJCQkJICAgIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTVEVSX1NISUZUKTsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxRyBYR1hTIHBoeSBsaW5rIHVwXG4iKTsKKwkJCWJueDJ4X2JpdHNfZW4oYnAsCisJCQkJICAgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAorCQkJCSAgICAgICgoMSA8PCBzZXJfbGFuZSkgPDwKKwkJCQkgICAgICAgTklHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVU19TSVpFKSk7CisKKwkJfSBlbHNlIHsgLyogU2VyRGVzICovCisJCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyBwaHkgbGluayB1cFxuIik7CisJCQkvKiBEaXNhYmxlIHRoZSBsaW5rIGludGVycnVwdAorCQkJICogYnkgd3JpdGluZyAxIHRvIHRoZSBzdGF0dXMgcmVnaXN0ZXIKKwkJCSAqLworCQkJYm54MnhfYml0c19lbihicCwKKwkJCQkgICAgICBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCisJCQkJICAgICAgTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTKTsKKwkJfQorCisJfSBlbHNlIHsgLyogbGlua19kb3duICovCisJfQorfQorCitzdGF0aWMgdTggYm54MnhfZm9ybWF0X3Zlcih1MzIgbnVtLCB1OCAqc3RyLCB1MTYgbGVuKQoreworCXU4ICpzdHJfcHRyID0gc3RyOworCXUzMiBtYXNrID0gMHhmMDAwMDAwMDsKKwl1OCBzaGlmdCA9IDgqNDsKKwl1OCBkaWdpdDsKKwlpZiAobGVuIDwgMTApIHsKKwkJLyogTmVlZCBtb3JlIHRoZW4gMTBjaGFycyBmb3IgdGhpcyBmb3JtYXQgKi8KKwkJKnN0cl9wdHIgPSAnXDAnOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJd2hpbGUgKHNoaWZ0ID4gMCkgeworCisJCXNoaWZ0IC09IDQ7CisJCWRpZ2l0ID0gKChudW0gJiBtYXNrKSA+PiBzaGlmdCk7CisJCWlmIChkaWdpdCA8IDB4YSkKKwkJCSpzdHJfcHRyID0gZGlnaXQgKyAnMCc7CisJCWVsc2UKKwkJCSpzdHJfcHRyID0gZGlnaXQgLSAweGEgKyAnYSc7CisJCXN0cl9wdHIrKzsKKwkJbWFzayA9IG1hc2sgPj4gNDsKKwkJaWYgKHNoaWZ0ID09IDQqNCkgeworCQkJKnN0cl9wdHIgPSAnOic7CisJCQlzdHJfcHRyKys7CisJCX0KKwl9CisJKnN0cl9wdHIgPSAnXDAnOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGJueDJ4X3R1cm5fb25fc2Yoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTggZXh0X3BoeV9hZGRyKQoreworCXUzMiBjbnQgPSAwOworCXUxNiBjdHJsID0gMDsKKwkvKiBFbmFibGUgRU1BQzAgaW4gdG8gZW5hYmxlIE1ESU8gKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1NFVCwKKwkgICAgICAgKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9FTUFDMF9IQVJEX0NPUkUgPDwgcG9ydCkpOworCW1zbGVlcCg1KTsKKworCS8qIHRha2UgZXh0IHBoeSBvdXQgb2YgcmVzZXQgKi8KKwlibngyeF9zZXRfZ3BpbyhicCwKKwkJCU1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCU1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCk7CisKKwlibngyeF9zZXRfZ3BpbyhicCwKKwkJCU1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCU1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCk7CisKKwkvKiB3YWl0IGZvciA1bXMgKi8KKwltc2xlZXAoNSk7CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDA7IGNudCsrKSB7CisJCW1zbGVlcCgxKTsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkgICAgICAgJmN0cmwpOworCQlpZiAoIShjdHJsICYgKDE8PDE1KSkpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiUmVzZXQgY29tcGxldGVkXG5cbiIpOworCQkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF90dXJuX29mZl9zZihzdHJ1Y3QgYm54MnggKmJwKQoreworCS8qIHB1dCBzZiB0byByZXNldCAqLworCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsIE1JU0NfUkVHSVNURVJTX0dQSU9fTE9XKTsKKwlibngyeF9zZXRfZ3BpbyhicCwKKwkJCU1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCU1JU0NfUkVHSVNURVJTX0dQSU9fTE9XKTsKK30KKwordTggYm54MnhfZ2V0X2V4dF9waHlfZndfdmVyc2lvbihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggZHJpdmVyX2xvYWRlZCwKKwkJCSAgICAgIHU4ICp2ZXJzaW9uLCB1MTYgbGVuKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiBleHRfcGh5X3R5cGUgPSAwOworCXUxNiB2YWwgPSAwOworCXU4IGV4dF9waHlfYWRkciA9IDAgOworCXU4IHN0YXR1cyA9IDAgOworCXUzMiB2ZXJfbnVtOworCisJaWYgKHZlcnNpb24gPT0gTlVMTCB8fCBwYXJhbXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiByZXNldCB0aGUgcmV0dXJuZWQgdmFsdWUgdG8gemVybyAqLworCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCWV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisKKwlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKworCQlpZiAobGVuIDwgNSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIFRha2UgZXh0IHBoeSBvdXQgb2YgcmVzZXQgKi8KKwkJaWYgKCFkcml2ZXJfbG9hZGVkKQorCQkJYm54MnhfdHVybl9vbl9zZihicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X2FkZHIpOworCisJCS8qICB3YWl0IGZvciAxbXMgKi8KKwkJbXNsZWVwKDEpOworCisJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLCAmdmFsKTsKKwkJdmVyc2lvblsyXSA9ICh2YWwgJiAweEZGKTsKKwkJdmVyc2lvblszXSA9ICgodmFsICYgMHhGRjAwKT4+OCk7CisKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHXzcxMDFfVkVSMiwKKwkJCSAgICAgICZ2YWwpOworCQl2ZXJzaW9uWzBdID0gKHZhbCAmIDB4RkYpOworCQl2ZXJzaW9uWzFdID0gKCh2YWwgJiAweEZGMDApPj44KTsKKwkJdmVyc2lvbls0XSA9ICdcMCc7CisKKwkJaWYgKCFkcml2ZXJfbG9hZGVkKQorCQkJYm54MnhfdHVybl9vZmZfc2YoYnApOworCQlicmVhazsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCXsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmdmFsKTsKKwkJdmVyX251bSA9IHZhbDw8MTY7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJnZhbCk7CisJCXZlcl9udW0gfD0gdmFsOworCQlzdGF0dXMgPSBibngyeF9mb3JtYXRfdmVyKHZlcl9udW0sIHZlcnNpb24sIGxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgorCisJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJnZhbCk7CisJCXZlcl9udW0gPSB2YWw8PDE2OworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZ2YWwpOworCQl2ZXJfbnVtIHw9IHZhbDsKKwkJc3RhdHVzID0gYm54MnhfZm9ybWF0X3Zlcih2ZXJfbnVtLCB2ZXJzaW9uLCBsZW4pOworCQlicmVhazsKKworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQlicmVhazsKKworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9nZXRfZXh0X3BoeV9md192ZXJzaW9uOiIKKwkJCQkgICAgIiB0eXBlIGlzIEZBSUxVUkUhXG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X3hneHNfbG9vcGJhY2soc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkJCSAgdTggaXNfMTBnKQoreworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisKKwlpZiAoaXNfMTBnKSB7CisJCSB1MzIgbWRfZGV2YWQ7CisKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDEwRyBsb29wYmFjayBlbmFibGVcbiIpOworCisJCS8qIGNoYW5nZSB0aGUgdW5pX3BoeV9hZGRyIGluIHRoZSBuaWcgKi8KKwkJbWRfZGV2YWQgPSBSRUdfUkQoYnAsIChOSUdfUkVHX1hHWFMwX0NUUkxfTURfREVWQUQgKworCQkJCQkgIHBvcnQqMHgxOCkpOworCisJCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsgcG9ydCoweDE4LCAweDUpOworCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIDAsCisJCQkgICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgICA1LAorCQkJICAgICAgIChNRElPX1JFR19CQU5LX0FFUl9CTE9DSyArCisJCQkJKE1ESU9fQUVSX0JMT0NLX0FFUl9SRUcgJiAweGYpKSwKKwkJCSAgICAgICAweDI4MDApOworCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIDAsCisJCQkgICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgICA1LAorCQkJICAgICAgIChNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwICsKKwkJCQkoTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wgJiAweGYpKSwKKwkJCSAgICAgICAweDYwNDEpOworCisJCS8qIHNldCBhZXIgbW1kIGJhY2sgKi8KKwkJYm54Mnhfc2V0X2Flcl9tbWQocGFyYW1zLCB2YXJzKTsKKworCQkvKiBhbmQgbWRfZGV2YWQgKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfTURfREVWQUQgKyBwb3J0KjB4MTgsCisJCQkgICAgbWRfZGV2YWQpOworCisJfSBlbHNlIHsKKwkJdTE2IG1paV9jb250cm9sOworCisJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyAxRyBsb29wYmFjayBlbmFibGVcbiIpOworCisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAorCQkJCSAgICAgICZtaWlfY29udHJvbCk7CisKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkJICAgICAgKG1paV9jb250cm9sIHwKKwkJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0xPT1BCQUNLKSk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGJueDJ4X2V4dF9waHlfbG9vcGJhY2soc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggZXh0X3BoeV9hZGRyOworCXUzMiBleHRfcGh5X3R5cGU7CisKKwlpZiAocGFyYW1zLT5zd2l0Y2hfY2ZnID09IFNXSVRDSF9DRkdfMTBHKSB7CisJCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQkvKiBDTDM3IEF1dG9uZWcgRW5hYmxlZCAqLworCQlleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJImV4dF9waHlfbG9vcGJhY2s6IFdlIHNob3VsZCBub3QgZ2V0IGhlcmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKKwkJCURQKE5FVElGX01TR19MSU5LLCAiZXh0X3BoeV9sb29wYmFjazogODcwNVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJleHRfcGh5X2xvb3BiYWNrOiA4NzA2XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJCQkvKiBTRlg3MTAxX1hHWFNfVEVTVDEgKi8KKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fWFNfREVWQUQsCisJCQkJICAgICAgIE1ESU9fWFNfU0ZYNzEwMV9YR1hTX1RFU1QxLAorCQkJCSAgICAgICAweDEwMCk7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkiZXh0X3BoeV9sb29wYmFjazogc2V0IGV4dCBwaHkgbG9vcGJhY2tcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKworCQkJYnJlYWs7CisJCX0gLyogc3dpdGNoIGV4dGVybmFsIFBIWSB0eXBlICovCisJfSBlbHNlIHsKKwkJLyogc2VyZGVzICovCisJCWV4dF9waHlfdHlwZSA9IFNFUkRFU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCWV4dF9waHlfYWRkciA9IChwYXJhbXMtPmV4dF9waHlfY29uZmlnICAmCisJCVBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX0FERFJfTUFTSykKKwkJPj4gUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfQUREUl9TSElGVDsKKwl9Cit9CisKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBibngyeF9vdmVycmlkZV9sZWRfdmFsdWUgLQorICoKKyAqIE92ZXJyaWRlIHRoZSBsZWQgdmFsdWUgb2YgdGhlIHJlcXVzdGVkIGxlZAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3U4IGJueDJ4X292ZXJyaWRlX2xlZF92YWx1ZShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJICB1MzIgbGVkX2lkeCwgdTMyIHZhbHVlKQoreworCXUzMiByZWdfdmFsOworCisJLyogSWYgcG9ydCAwIHRoZW4gdXNlIEVNQUMwLCBlbHNlIHVzZSBFTUFDMSovCisJdTMyIGVtYWNfYmFzZSA9IChwb3J0KSA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOworCisJRFAoTkVUSUZfTVNHX0xJTkssCisJCSAiYm54Mnhfb3ZlcnJpZGVfbGVkX3ZhbHVlKCkgcG9ydCAleCBsZWRfaWR4ICVkIHZhbHVlICVkXG4iLAorCQkgcG9ydCwgbGVkX2lkeCwgdmFsdWUpOworCisJc3dpdGNoIChsZWRfaWR4KSB7CisJY2FzZSAwOiAvKiAxME1CIGxlZCAqLworCQkvKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBMRUQgcmVnaXN0ZXIgaW4KKwkJdGhlIEVNQUMgYmxvY2sgKi8KKwkJcmVnX3ZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19MRUQpOworCQkvKiBTZXQgdGhlIE9WRVJSSURFIGJpdCB0byAxICovCisJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCS8qIElmIHZhbHVlIGlzIDEsIHNldCB0aGUgMTBNX09WRVJSSURFIGJpdCwKKwkJb3RoZXJ3aXNlIHJlc2V0IGl0LiovCisJCXJlZ192YWwgPSAodmFsdWUgPT0gMSkgPyAocmVnX3ZhbCB8IEVNQUNfTEVEXzEwTUJfT1ZFUlJJREUpIDoKKwkJCShyZWdfdmFsICYgfkVNQUNfTEVEXzEwTUJfT1ZFUlJJREUpOworCQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTEVELCByZWdfdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAxOiAvKjEwME1CIGxlZCAgICAqLworCQkvKlJlYWQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIExFRCByZWdpc3RlciBpbgorCQl0aGUgRU1BQyBibG9jayAqLworCQlyZWdfdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCk7CisJCS8qICBTZXQgdGhlIE9WRVJSSURFIGJpdCB0byAxICovCisJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCS8qICBJZiB2YWx1ZSBpcyAxLCBzZXQgdGhlIDEwME1fT1ZFUlJJREUgYml0LAorCQlvdGhlcndpc2UgcmVzZXQgaXQuKi8KKwkJcmVnX3ZhbCA9ICh2YWx1ZSA9PSAxKSA/IChyZWdfdmFsIHwgRU1BQ19MRURfMTAwTUJfT1ZFUlJJREUpIDoKKwkJCShyZWdfdmFsICYgfkVNQUNfTEVEXzEwME1CX09WRVJSSURFKTsKKwkJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCwgcmVnX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgMjogLyogMTAwME1CIGxlZCAqLworCQkvKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBMRUQgcmVnaXN0ZXIgaW4gdGhlCisJCUVNQUMgYmxvY2sgKi8KKwkJcmVnX3ZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19MRUQpOworCQkvKiBTZXQgdGhlIE9WRVJSSURFIGJpdCB0byAxICovCisJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCS8qIElmIHZhbHVlIGlzIDEsIHNldCB0aGUgMTAwME1fT1ZFUlJJREUgYml0LCBvdGhlcndpc2UKKwkJcmVzZXQgaXQuICovCisJCXJlZ192YWwgPSAodmFsdWUgPT0gMSkgPyAocmVnX3ZhbCB8IEVNQUNfTEVEXzEwMDBNQl9PVkVSUklERSkgOgorCQkJKHJlZ192YWwgJiB+RU1BQ19MRURfMTAwME1CX09WRVJSSURFKTsKKwkJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCwgcmVnX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgMzogLyogMjUwME1CIGxlZCAqLworCQkvKiAgUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTEVEIHJlZ2lzdGVyIGluIHRoZQorCQlFTUFDIGJsb2NrKi8KKwkJcmVnX3ZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19MRUQpOworCQkvKiBTZXQgdGhlIE9WRVJSSURFIGJpdCB0byAxICovCisJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCS8qICBJZiB2YWx1ZSBpcyAxLCBzZXQgdGhlIDI1MDBNX09WRVJSSURFIGJpdCwgb3RoZXJ3aXNlCisJCXJlc2V0IGl0LiovCisJCXJlZ192YWwgPSAodmFsdWUgPT0gMSkgPyAocmVnX3ZhbCB8IEVNQUNfTEVEXzI1MDBNQl9PVkVSUklERSkgOgorCQkJKHJlZ192YWwgJiB+RU1BQ19MRURfMjUwME1CX09WRVJSSURFKTsKKwkJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX0xFRCwgcmVnX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgNDogLyoxMEcgbGVkICovCisJCWlmIChwb3J0ID09IDApIHsKKwkJCVJFR19XUihicCwgTklHX1JFR19MRURfMTBHX1AwLAorCQkJCSAgICB2YWx1ZSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEXzEwR19QMSwKKwkJCQkgICAgdmFsdWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgNTogLyogVFJBRkZJQyBsZWQgKi8KKwkJLyogRmluZCBpZiB0aGUgdHJhZmZpYyBjb250cm9sIGlzIHZpYSBCTUFDIG9yIEVNQUMgKi8KKwkJaWYgKHBvcnQgPT0gMCkKKwkJCXJlZ192YWwgPSBSRUdfUkQoYnAsIE5JR19SRUdfTklHX0VNQUMwX0VOKTsKKwkJZWxzZQorCQkJcmVnX3ZhbCA9IFJFR19SRChicCwgTklHX1JFR19OSUdfRU1BQzFfRU4pOworCisJCS8qICBPdmVycmlkZSB0aGUgdHJhZmZpYyBsZWQgaW4gdGhlIEVNQUM6Ki8KKwkJaWYgKHJlZ192YWwgPT0gMSkgeworCQkJLyogUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTEVEIHJlZ2lzdGVyIGluCisJCQl0aGUgRU1BQyBibG9jayAqLworCQkJcmVnX3ZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsKKwkJCQkJICAgICBFTUFDX1JFR19FTUFDX0xFRCk7CisJCQkvKiBTZXQgdGhlIFRSQUZGSUNfT1ZFUlJJREUgYml0IHRvIDEgKi8KKwkJCXJlZ192YWwgfD0gRU1BQ19MRURfT1ZFUlJJREU7CisJCQkvKiBJZiB2YWx1ZSBpcyAxLCBzZXQgdGhlIFRSQUZGSUMgYml0LCBvdGhlcndpc2UKKwkJCXJlc2V0IGl0LiovCisJCQlyZWdfdmFsID0gKHZhbHVlID09IDEpID8gKHJlZ192YWwgfCBFTUFDX0xFRF9UUkFGRklDKSA6CisJCQkJKHJlZ192YWwgJiB+RU1BQ19MRURfVFJBRkZJQyk7CisJCQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTEVELCByZWdfdmFsKTsKKwkJfSBlbHNlIHsgLyogT3ZlcnJpZGUgdGhlIHRyYWZmaWMgbGVkIGluIHRoZSBCTUFDOiAqLworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9DT05UUk9MX09WRVJSSURFX1RSQUZGSUNfUDAKKwkJCQkgICArIHBvcnQqNCwgMSk7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX0NPTlRST0xfVFJBRkZJQ19QMCArIHBvcnQqNCwKKwkJCQkgICAgdmFsdWUpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQKE5FVElGX01TR19MSU5LLAorCQkJICJibngyeF9vdmVycmlkZV9sZWRfdmFsdWUoKSB1bmtub3duIGxlZCBpbmRleCAlZCAiCisJCQkgIihzaG91bGQgYmUgMC01KVxuIiwgbGVkX2lkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisKK3U4IGJueDJ4X3NldF9sZWQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTggbW9kZSwgdTMyIHNwZWVkLAorCSAgICAgICB1MTYgaHdfbGVkX21vZGUsIHUzMiBjaGlwX2lkKQoreworCXU4IHJjID0gMDsKKwlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3NldF9sZWQ6IHBvcnQgJXgsIG1vZGUgJWRcbiIsIHBvcnQsIG1vZGUpOworCURQKE5FVElGX01TR19MSU5LLCAic3BlZWQgMHgleCwgaHdfbGVkX21vZGUgMHgleFxuIiwKKwkJIHNwZWVkLCBod19sZWRfbW9kZSk7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBMRURfTU9ERV9PRkY6CisJCVJFR19XUihicCwgTklHX1JFR19MRURfMTBHX1AwICsgcG9ydCo0LCAwKTsKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9NT0RFX1AwICsgcG9ydCo0LAorCQkJICAgU0hBUkVEX0hXX0NGR19MRURfTUFDMSk7CisJCWJyZWFrOworCisJY2FzZSBMRURfTU9ERV9PUEVSOgorCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX01PREVfUDAgKyBwb3J0KjQsIGh3X2xlZF9tb2RlKTsKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9DT05UUk9MX09WRVJSSURFX1RSQUZGSUNfUDAgKworCQkJICAgcG9ydCo0LCAwKTsKKwkJLyogU2V0IGJsaW5raW5nIHJhdGUgdG8gfjE1LjlIeiAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX0NPTlRST0xfQkxJTktfUkFURV9QMCArIHBvcnQqNCwKKwkJCSAgIExFRF9CTElOS19SQVRFX1ZBTCk7CisJCVJFR19XUihicCwgTklHX1JFR19MRURfQ09OVFJPTF9CTElOS19SQVRFX0VOQV9QMCArCisJCQkgICBwb3J0KjQsIDEpOworCQlpZiAoIUNISVBfSVNfRTFIKGJwKSAmJgorCQkgICAgKChzcGVlZCA9PSBTUEVFRF8yNTAwKSB8fAorCQkgICAgIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB8fAorCQkgICAgIChzcGVlZCA9PSBTUEVFRF8xMDApIHx8CisJCSAgICAgKHNwZWVkID09IFNQRUVEXzEwKSkpIHsKKwkJCS8qIE9uIEV2ZXJlc3QgMSBBeCBjaGlwIHZlcnNpb25zIGZvciBzcGVlZHMgbGVzcyB0aGFuCisJCQkxMEcgTEVEIHNjaGVtZSBpcyBkaWZmZXJlbnQgKi8KKwkJCVJFR19XUihicCwgTklHX1JFR19MRURfQ09OVFJPTF9PVkVSUklERV9UUkFGRklDX1AwCisJCQkJICAgKyBwb3J0KjQsIDEpOworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9DT05UUk9MX1RSQUZGSUNfUDAgKworCQkJCSAgIHBvcnQqNCwgMCk7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX0NPTlRST0xfQkxJTktfVFJBRkZJQ19QMCArCisJCQkJICAgcG9ydCo0LCAxKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJjID0gLUVJTlZBTDsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9zZXRfbGVkOiBJbnZhbGlkIGxlZCBtb2RlICVkXG4iLAorCQkJIG1vZGUpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJjOworCit9CisKK3U4IGJueDJ4X3Rlc3RfbGluayhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgZ3Bfc3RhdHVzID0gMDsKKworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19HUF9TVEFUVVMsCisJCQkgICAgICBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMSwKKwkJCSAgICAgICZncF9zdGF0dXMpOworCS8qIGxpbmsgaXMgdXAgb25seSBpZiBib3RoIGxvY2FsIHBoeSBhbmQgZXh0ZXJuYWwgcGh5IGFyZSB1cCAqLworCWlmICgoZ3Bfc3RhdHVzICYgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfTElOS19TVEFUVVMpICYmCisJICAgIGJueDJ4X2V4dF9waHlfaXNfbGlua191cChwYXJhbXMsIHZhcnMpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRVNSQ0g7Cit9CisKK3N0YXRpYyB1OCBibngyeF9saW5rX2luaXRpYWxpemUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggcmMgPSAwOworCisJLyogQWN0aXZhdGUgdGhlIGV4dGVybmFsIFBIWSAqLworCWJueDJ4X2V4dF9waHlfcmVzZXQocGFyYW1zLCB2YXJzKTsKKworCWJueDJ4X3NldF9hZXJfbW1kKHBhcmFtcywgdmFycyk7CisKKwlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykKKwkJYm54Mnhfc2V0X21hc3Rlcl9sbihwYXJhbXMpOworCisJcmMgPSBibngyeF9yZXNldF91bmljb3JlKHBhcmFtcyk7CisJLyogcmVzZXQgdGhlIFNlckRlcyBhbmQgd2FpdCBmb3IgcmVzZXQgYml0IHJldHVybiBsb3cgKi8KKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJYm54Mnhfc2V0X2Flcl9tbWQocGFyYW1zLCB2YXJzKTsKKworCS8qIHNldHRpbmcgdGhlIG1hc3RlckxuX2RlZiBhZ2FpbiBhZnRlciB0aGUgcmVzZXQgKi8KKwlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgeworCQlibngyeF9zZXRfbWFzdGVyX2xuKHBhcmFtcyk7CisJCWJueDJ4X3NldF9zd2FwX2xhbmVzKHBhcmFtcyk7CisJfQorCisJLyogU2V0IFBhcmFsbGVsIERldGVjdCAqLworCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQorCQlibngyeF9zZXRfcGFyYWxsZWxfZGV0ZWN0aW9uKHBhcmFtcywgdmFycy0+cGh5X2ZsYWdzKTsKKworCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkICYmCisJCSAgICAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwKSB8fAorCQkgICAgIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwKSkpIHsKKwkJCXZhcnMtPnBoeV9mbGFncyB8PSBQSFlfU0dNSUlfRkxBRzsKKwkJfSBlbHNlIHsKKwkJCXZhcnMtPnBoeV9mbGFncyAmPSB+UEhZX1NHTUlJX0ZMQUc7CisJCX0KKwl9CisKKwlpZiAoISh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfU0dNSUlfRkxBRykpIHsKKwkJdTE2IGJhbmssIHJ4X2VxOworCisJCXJ4X2VxID0gKChwYXJhbXMtPnNlcmRlc19jb25maWcgJgorCQkJICBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLKSA+PgorCQkJIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUKTsKKworCQlEUChORVRJRl9NU0dfTElOSywgInNldHRpbmcgcnggZXEgdG8gMHgleFxuIiwgcnhfZXEpOworCQlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1JYMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1JYX0FMTDsKKwkJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19SWDEtTURJT19SRUdfQkFOS19SWDApKSB7CisJCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuayAsCisJCQkJCSAgICAgIE1ESU9fUlgwX1JYX0VRX0JPT1NULAorCQkJCQkgICAgICAoKHJ4X2VxICYKKwkJCQlNRElPX1JYMF9SWF9FUV9CT09TVF9FUVVBTElaRVJfQ1RSTF9NQVNLKSB8CisJCQkJTURJT19SWDBfUlhfRVFfQk9PU1RfT0ZGU0VUX0NUUkwpKTsKKwkJfQorCisJCS8qIGZvcmNlZCBzcGVlZCByZXF1ZXN0ZWQ/ICovCisJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkICE9IFNQRUVEX0FVVE9fTkVHKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIm5vdCBTR01JSSwgbm8gQU5cbiIpOworCisJCQkvKiBkaXNhYmxlIGF1dG9uZWcgKi8KKwkJCWJueDJ4X3NldF9hdXRvbmVnKHBhcmFtcywgdmFycyk7CisKKwkJCS8qIHByb2dyYW0gc3BlZWQgYW5kIGR1cGxleCAqLworCQkJYm54MnhfcHJvZ3JhbV9zZXJkZXMocGFyYW1zKTsKKwkJCXZhcnMtPmllZWVfZmMgPQorCQkJCU1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX05PTkU7CisKKwkJfSBlbHNlIHsgLyogQU5fbW9kZSAqLworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJub3QgU0dNSUksIEFOXG4iKTsKKworCQkJLyogQU4gZW5hYmxlZCAqLworCQkJYm54Mnhfc2V0X2JyY21fY2wzN19hZHZlcnRpc21lbnQocGFyYW1zKTsKKworCQkJLyogcHJvZ3JhbSBkdXBsZXggJiBwYXVzZSBhZHZlcnRpc2VtZW50IChmb3IgYW5lZykgKi8KKwkJCWJueDJ4X3NldF9pZWVlX2FuZWdfYWR2ZXJ0aXNtZW50KHBhcmFtcywKKwkJCQkJCSAgICAgICAmdmFycy0+aWVlZV9mYyk7CisKKwkJCS8qIGVuYWJsZSBhdXRvbmVnICovCisJCQlibngyeF9zZXRfYXV0b25lZyhwYXJhbXMsIHZhcnMpOworCisJCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgQU4gKi8KKwkJCWJueDJ4X3Jlc3RhcnRfYXV0b25lZyhwYXJhbXMpOworCQl9CisKKwl9IGVsc2UgeyAvKiBTR01JSSBtb2RlICovCisJCURQKE5FVElGX01TR19MSU5LLCAiU0dNSUlcbiIpOworCisJCWJueDJ4X2luaXRpYWxpemVfc2dtaWlfcHJvY2VzcyhwYXJhbXMpOworCX0KKworCS8qIGluaXQgZXh0IHBoeSBhbmQgZW5hYmxlIGxpbmsgc3RhdGUgaW50ICovCisJcmMgfD0gYm54MnhfZXh0X3BoeV9pbml0KHBhcmFtcywgdmFycyk7CisKKwlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAorCQkgICAgICAgKE5JR19TVEFUVVNfWEdYUzBfTElOSzEwRyB8CisJCQlOSUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTIHwKKwkJCU5JR19TVEFUVVNfU0VSREVTMF9MSU5LX1NUQVRVUykpOworCisJcmV0dXJuIHJjOworCit9CisKKwordTggYm54MnhfcGh5X2luaXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisKKwl1MzIgdmFsOworCURQKE5FVElGX01TR19MSU5LLCAiUGh5IEluaXRpYWxpemF0aW9uIHN0YXJ0ZWRcbiIpOworCURQKE5FVElGX01TR19MSU5LLCAicmVxX3NwZWVkID0gJWQsIHJlcV9mbG93Y3RybD0lZFxuIiwKKwkJICBwYXJhbXMtPnJlcV9saW5lX3NwZWVkLCBwYXJhbXMtPnJlcV9mbG93X2N0cmwpOworCXZhcnMtPmxpbmtfc3RhdHVzID0gMDsKKwlpZiAocGFyYW1zLT5zd2l0Y2hfY2ZnID09ICBTV0lUQ0hfQ0ZHXzFHKQorCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfU0VSREVTX0ZMQUc7CisJZWxzZQorCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfWEdYU19GTEFHOworCisJLyogZGlzYWJsZSBhdHRlbnRpb25zICovCisJYm54MnhfYml0c19kaXMoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwYXJhbXMtPnBvcnQqNCwKKwkJICAgICAgIChOSUdfTUFTS19YR1hTMF9MSU5LX1NUQVRVUyB8CisJCQlOSUdfTUFTS19YR1hTMF9MSU5LMTBHIHwKKwkJCU5JR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMgfAorCQkJTklHX01BU0tfTUlfSU5UKSk7CisKKwlibngyeF9lbWFjX2luaXQocGFyYW1zLCB2YXJzKTsKKworCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkgeworCQl2YXJzLT5saW5rX3VwID0gMTsKKwkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOworCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJdmFycy0+Zmxvd19jdHJsID0gRkxPV19DVFJMX05PTkU7CisJCXZhcnMtPmxpbmtfc3RhdHVzID0gKExJTktfU1RBVFVTX0xJTktfVVAgfCBMSU5LXzEwR1RGRCk7CisJCS8qIGVuYWJsZSBvbiBFMS41IEZQR0EgKi8KKwkJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQkJdmFycy0+Zmxvd19jdHJsIHw9CisJCQkJKEZMT1dfQ1RSTF9UWCB8IEZMT1dfQ1RSTF9SWCk7CisJCQl2YXJzLT5saW5rX3N0YXR1cyB8PQorCQkJCQkoTElOS19TVEFUVVNfVFhfRkxPV19DT05UUk9MX0VOQUJMRUQgfAorCQkJCQkgTElOS19TVEFUVVNfUlhfRkxPV19DT05UUk9MX0VOQUJMRUQpOworCQl9CisKKwkJYm54MnhfZW1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAwKTsKKwkJYm54MnhfcGJmX3VwZGF0ZShwYXJhbXMsIHZhcnMtPmZsb3dfY3RybCwgdmFycy0+bGluZV9zcGVlZCk7CisJCS8qIGRpc2FibGUgZHJhaW4gKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERQorCQkJCSAgICArIHBhcmFtcy0+cG9ydCo0LCAwKTsKKworCQkvKiB1cGRhdGUgc2hhcmVkIG1lbW9yeSAqLworCQlibngyeF91cGRhdGVfbW5nKHBhcmFtcywgdmFycy0+bGlua19zdGF0dXMpOworCisJCXJldHVybiAwOworCisJfSBlbHNlCisJaWYgKENISVBfUkVWX0lTX0VNVUwoYnApKSB7CisKKwkJdmFycy0+bGlua191cCA9IDE7CisJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCXZhcnMtPmZsb3dfY3RybCA9IEZMT1dfQ1RSTF9OT05FOworCQl2YXJzLT5saW5rX3N0YXR1cyA9IChMSU5LX1NUQVRVU19MSU5LX1VQIHwgTElOS18xMEdURkQpOworCisJCWJueDJ4X2JtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMCk7CisKKwkJYm54MnhfcGJmX3VwZGF0ZShwYXJhbXMsIHZhcnMtPmZsb3dfY3RybCwgdmFycy0+bGluZV9zcGVlZCk7CisJCS8qIERpc2FibGUgZHJhaW4gKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERQorCQkJCSAgICArIHBhcmFtcy0+cG9ydCo0LCAwKTsKKworCQkvKiB1cGRhdGUgc2hhcmVkIG1lbW9yeSAqLworCQlibngyeF91cGRhdGVfbW5nKHBhcmFtcywgdmFycy0+bGlua19zdGF0dXMpOworCisJCXJldHVybiAwOworCisJfSBlbHNlCisJaWYgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19CTUFDKSB7CisJCXZhcnMtPmxpbmtfdXAgPSAxOworCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOworCQl2YXJzLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfTk9ORTsKKwkJdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9CTUFDOworCisJCXZhcnMtPnBoeV9mbGFncyA9IFBIWV9YR1hTX0ZMQUc7CisKKwkJYm54MnhfcGh5X2RlYXNzZXJ0KHBhcmFtcywgdmFycy0+cGh5X2ZsYWdzKTsKKwkJLyogc2V0IGJtYWMgbG9vcGJhY2sgKi8KKwkJYm54MnhfYm1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAxKTsKKworCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsKKwkJICAgIHBhcmFtcy0+cG9ydCo0LCAwKTsKKwl9IGVsc2UgaWYgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FTUFDKSB7CisJCXZhcnMtPmxpbmtfdXAgPSAxOworCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCXZhcnMtPmZsb3dfY3RybCA9IEZMT1dfQ1RSTF9OT05FOworCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX0VNQUM7CisKKwkJdmFycy0+cGh5X2ZsYWdzID0gUEhZX1hHWFNfRkxBRzsKKworCQlibngyeF9waHlfZGVhc3NlcnQocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOworCQkvKiBzZXQgYm1hYyBsb29wYmFjayAqLworCQlibngyeF9lbWFjX2VuYWJsZShwYXJhbXMsIHZhcnMsIDEpOworCQlibngyeF9lbWFjX3Byb2dyYW0ocGFyYW1zLCB2YXJzLT5saW5lX3NwZWVkLAorCQkJCQkgICAgICB2YXJzLT5kdXBsZXgpOworCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsKKwkJICAgIHBhcmFtcy0+cG9ydCo0LCAwKTsKKwl9IGVsc2UgaWYgKChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfWEdYU18xMCkgfHwKKwkJICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVF9QSFkpKSB7CisJCXZhcnMtPmxpbmtfdXAgPSAxOworCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOworCQl2YXJzLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfTk9ORTsKKworCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfWEdYU19GTEFHOworCisJCXZhbCA9IFJFR19SRChicCwKKwkJCQkgTklHX1JFR19YR1hTMF9DVFJMX1BIWV9BRERSKworCQkJCSBwYXJhbXMtPnBvcnQqMHgxOCk7CisJCXBhcmFtcy0+cGh5X2FkZHIgPSAodTgpdmFsOworCisJCWJueDJ4X3BoeV9kZWFzc2VydChwYXJhbXMsIHZhcnMtPnBoeV9mbGFncyk7CisJCWJueDJ4X2xpbmtfaW5pdGlhbGl6ZShwYXJhbXMsIHZhcnMpOworCisJCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfQk1BQzsKKworCQlibngyeF9ibWFjX2VuYWJsZShwYXJhbXMsIHZhcnMsIDApOworCisJCWlmIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfWEdYU18xMCkgeworCQkJLyogc2V0IDEwRyBYR1hTIGxvb3BiYWNrICovCisJCQlibngyeF9zZXRfeGd4c19sb29wYmFjayhwYXJhbXMsIHZhcnMsIDEpOworCQl9IGVsc2UgeworCQkJLyogc2V0IGV4dGVybmFsIHBoeSBsb29wYmFjayAqLworCQkJYm54MnhfZXh0X3BoeV9sb29wYmFjayhwYXJhbXMpOworCQl9CisJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKworCQkJICAgIHBhcmFtcy0+cG9ydCo0LCAwKTsKKwl9IGVsc2UKKwkvKiBObyBsb29wYmFjayAqLworCXsKKworCQlibngyeF9waHlfZGVhc3NlcnQocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOworCQlzd2l0Y2ggKHBhcmFtcy0+c3dpdGNoX2NmZykgeworCQljYXNlIFNXSVRDSF9DRkdfMUc6CisJCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX1NFUkRFU19GTEFHOworCQkJaWYgKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCSAgICAgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9NQVNLKSA9PQorCQkJICAgICBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0JDTTU0ODIpIHsKKwkJCQl2YXJzLT5waHlfZmxhZ3MgfD0KKwkJCQkJUEhZX1NHTUlJX0ZMQUc7CisJCQl9CisKKwkJCXZhbCA9IFJFR19SRChicCwKKwkJCQkJIE5JR19SRUdfU0VSREVTMF9DVFJMX1BIWV9BRERSKworCQkJCQkgcGFyYW1zLT5wb3J0KjB4MTApOworCisJCQlwYXJhbXMtPnBoeV9hZGRyID0gKHU4KXZhbDsKKworCQkJYnJlYWs7CisJCWNhc2UgU1dJVENIX0NGR18xMEc6CisJCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX1hHWFNfRkxBRzsKKwkJCXZhbCA9IFJFR19SRChicCwKKwkJCQkgTklHX1JFR19YR1hTMF9DVFJMX1BIWV9BRERSKworCQkJCSBwYXJhbXMtPnBvcnQqMHgxOCk7CisJCQlwYXJhbXMtPnBoeV9hZGRyID0gKHU4KXZhbDsKKworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUChORVRJRl9NU0dfTElOSywgIkludmFsaWQgc3dpdGNoX2NmZ1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJYm54MnhfbGlua19pbml0aWFsaXplKHBhcmFtcywgdmFycyk7CisJCWJueDJ4X2xpbmtfaW50X2VuYWJsZShwYXJhbXMpOworCX0KKwlyZXR1cm4gMDsKK30KKwordTggYm54MnhfbGlua19yZXNldChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3sKKworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiBleHRfcGh5X2NvbmZpZyA9IHBhcmFtcy0+ZXh0X3BoeV9jb25maWc7CisJdTE2IGh3X2xlZF9tb2RlID0gcGFyYW1zLT5od19sZWRfbW9kZTsKKwl1MzIgY2hpcF9pZCA9IHBhcmFtcy0+Y2hpcF9pZDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShleHRfcGh5X2NvbmZpZyk7CisJLyogZGlzYWJsZSBhdHRlbnRpb25zICovCisKKwl2YXJzLT5saW5rX3N0YXR1cyA9IDA7CisJYm54MnhfdXBkYXRlX21uZyhwYXJhbXMsIHZhcnMtPmxpbmtfc3RhdHVzKTsKKwlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKKwkJICAgICAoTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgfAorCQkgICAgICBOSUdfTUFTS19YR1hTMF9MSU5LMTBHIHwKKwkJICAgICAgTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUyB8CisJCSAgICAgIE5JR19NQVNLX01JX0lOVCkpOworCisJLyogYWN0aXZhdGUgbmlnIGRyYWluICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArIHBvcnQqNCwgMSk7CisKKwkvKiBkaXNhYmxlIG5pZyBlZ3Jlc3MgaW50ZXJmYWNlICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX09VVF9FTiArIHBvcnQqNCwgMCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19FTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDApOworCisJLyogU3RvcCBCaWdNYWMgcnggKi8KKwlibngyeF9ibWFjX3J4X2Rpc2FibGUoYnAsIHBvcnQpOworCisJLyogZGlzYWJsZSBlbWFjICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX05JR19FTUFDMF9FTiArIHBvcnQqNCwgMCk7CisKKwltc2xlZXAoMTApOworCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGVkIGJ5IEdQSU8gMQorCSAqIEhvbGQgaXQgYXMgdmFycyBsb3cKKwkgKi8KKwkgLyogY2xlYXIgbGluayBsZWQgKi8KKwlibngyeF9zZXRfbGVkKGJwLCBwb3J0LCBMRURfTU9ERV9PRkYsIDAsIGh3X2xlZF9tb2RlLCBjaGlwX2lkKTsKKwlpZiAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgeworCQlpZiAoKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKSAmJgorCQkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSkgeworCQkJLyogSFcgcmVzZXQgKi8KKworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XKTsKKworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XKTsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJyZXNldCBleHRlcm5hbCBQSFlcbiIpOworCQl9IGVsc2UgeworCisJCQl1OCBleHRfcGh5X2FkZHIgPSAoKGV4dF9waHlfY29uZmlnICYKKwkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisKKwkJCS8qIFNXIHJlc2V0ICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgICAgICAxPDwxNSk7CisKKwkJCS8qIFNldCBMb3cgUG93ZXIgTW9kZSAqLworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCQkJICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgMTw8MTEpOworCisKKwkJCWlmIChleHRfcGh5X3R5cGUgPT0KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDgwNzMgcG9ydCAlZCBpbnRvIgorCQkJCQkgImxvdyBwb3dlciBtb2RlXG4iLAorCQkJCQkgcG9ydCk7CisJCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkJTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XKTsKKwkJCX0KKwkJfQorCX0KKwkvKiByZXNldCB0aGUgU2VyRGVzL1hHWFMgKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX0NMRUFSLAorCSAgICAgICAoMHgxZmYgPDwgKHBvcnQqMTYpKSk7CisKKwkvKiByZXNldCBCaWdNYWMgKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAorCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKKworCS8qIGRpc2FibGUgbmlnIGluZ3Jlc3MgaW50ZXJmYWNlICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX0lOX0VOICsgcG9ydCo0LCAwKTsKKwlSRUdfV1IoYnAsIE5JR19SRUdfRU1BQzBfSU5fRU4gKyBwb3J0KjQsIDApOworCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDApOworCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfT1VUX0VOICsgcG9ydCo0LCAwKTsKKwl2YXJzLT5saW5rX3VwID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzaG91bGQgY2FsbGVkIHVwb24gbGluayBpbnRlcnJ1cHQgKi8KKy8qIEluIGNhc2UgdmFycy0+bGlua191cCwgZHJpdmVyIG5lZWRzIHRvCisJMS4gVXBkYXRlIHRoZSBwYmYKKwkyLiBEaXNhYmxlIGRyYWluCisJMy4gVXBkYXRlIHRoZSBzaGFyZWQgbWVtb3J5CisJNC4gSW5kaWNhdGUgbGluayB1cAorCTUuIFNldCBMRURzCisgICBPdGhlcndpc2UsCisJMS4gVXBkYXRlIHNoYXJlZCBtZW1vcnkKKwkyLiBSZXNldCBCaWdNYWMKKwkzLiBSZXBvcnQgbGluayBkb3duCisJNC4gVW5zZXQgTEVEcworKi8KK3U4IGJueDJ4X2xpbmtfdXBkYXRlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTE2IGk7CisJdTE2IGdwX3N0YXR1czsKKwl1MTYgbGlua18xMGc7CisJdTggcmMgPSAwOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJwb3J0ICV4LCBYR1hTPyV4LCBpbnRfc3RhdHVzIDB4JXhcbiIsCisJIHBvcnQsCisJKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpLAorCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCkpOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJpbnRfbWFzayAweCV4IE1JX0lOVCAleCwgU0VSREVTX0xJTksgJXhcbiIsCisJUkVHX1JEKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KSwKKwlSRUdfUkQoYnAsIE5JR19SRUdfRU1BQzBfU1RBVFVTX01JU0NfTUlfSU5UICsgcG9ydCoweDE4KSwKKwlSRUdfUkQoYnAsIE5JR19SRUdfU0VSREVTMF9TVEFUVVNfTElOS19TVEFUVVMgKyBwb3J0KjB4M2MpKTsKKworCURQKE5FVElGX01TR19MSU5LLCAiIDEwRyAleCwgWEdYU19MSU5LICV4XG4iLAorCSAgUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX1NUQVRVU19MSU5LMTBHICsgcG9ydCoweDY4KSwKKwkgIFJFR19SRChicCwgTklHX1JFR19YR1hTMF9TVEFUVVNfTElOS19TVEFUVVMgKyBwb3J0KjB4NjgpKTsKKworCisJLyogYXZvaWQgZmFzdCB0b2dnbGluZyAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCW1zbGVlcCgxMCk7CisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwb3J0LCBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfR1BfU1RBVFVTLAorCQkJCSAgICAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxLAorCQkJCSAgICAgICZncF9zdGF0dXMpOworCX0KKworCXJjID0gYm54MnhfbGlua19zZXR0aW5nc19zdGF0dXMocGFyYW1zLCB2YXJzLCBncF9zdGF0dXMpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBhbnl0aGluZyAxMCBhbmQgb3ZlciB1c2VzIHRoZSBibWFjICovCisJbGlua18xMGcgPSAoKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTAwMDApIHx8CisJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMjAwMCkgfHwKKwkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzEyNTAwKSB8fAorCQkgICAgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTMwMDApIHx8CisJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xNTAwMCkgfHwKKwkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzE2MDAwKSk7CisKKwlibngyeF9saW5rX2ludF9hY2socGFyYW1zLCB2YXJzLCBsaW5rXzEwZyk7CisKKwkvKiBsaW5rIGlzIHVwIG9ubHkgaWYgYm90aCBsb2NhbCBwaHkgYW5kIGV4dGVybmFsIHBoeSBhcmUgdXAgKi8KKwl2YXJzLT5saW5rX3VwID0gKHZhcnMtPnBoeV9saW5rX3VwICYmCisJCQkgICBibngyeF9leHRfcGh5X2lzX2xpbmtfdXAocGFyYW1zLCB2YXJzKSk7CisKKwlpZiAoIXZhcnMtPnBoeV9saW5rX3VwICYmCisJICAgIFJFR19SRChicCwgTklHX1JFR19FTUFDMF9TVEFUVVNfTUlTQ19NSV9JTlQgKyBwb3J0KjB4MTgpKSB7CisJCWJueDJ4X2V4dF9waHlfaXNfbGlua191cChwYXJhbXMsIHZhcnMpOyAvKiBDbGVhciBpbnRlcnJ1cHQgKi8KKwl9CisKKwlpZiAodmFycy0+bGlua191cCkgeworCQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LX1NUQVRVU19MSU5LX1VQOworCQlpZiAobGlua18xMGcpIHsKKwkJCWJueDJ4X2JtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMCk7CisJCQlibngyeF9zZXRfbGVkKGJwLCBwb3J0LCBMRURfTU9ERV9PUEVSLAorCQkJCSAgICBTUEVFRF8xMDAwMCwgcGFyYW1zLT5od19sZWRfbW9kZSwKKwkJCQkgICAgcGFyYW1zLT5jaGlwX2lkKTsKKworCQl9IGVsc2UgeworCQkJYm54MnhfZW1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAwKTsKKwkJCXJjID0gYm54MnhfZW1hY19wcm9ncmFtKHBhcmFtcywgdmFycy0+bGluZV9zcGVlZCwKKwkJCQkJICAgICAgdmFycy0+ZHVwbGV4KTsKKworCQkJLyogQU4gY29tcGxldGU/ICovCisJCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFKSB7CisJCQkJaWYgKCEodmFycy0+cGh5X2ZsYWdzICYKKwkJCQkgICAgICBQSFlfU0dNSUlfRkxBRykpCisJCQkJCWJueDJ4X3NldF9zZ21paV90eF9kcml2ZXIocGFyYW1zKTsKKwkJCX0KKwkJfQorCisJCS8qIFBCRiAtIGxpbmsgdXAgKi8KKwkJcmMgfD0gYm54MnhfcGJmX3VwZGF0ZShwYXJhbXMsIHZhcnMtPmZsb3dfY3RybCwKKwkJCQkgICAgICB2YXJzLT5saW5lX3NwZWVkKTsKKworCQkvKiBkaXNhYmxlIGRyYWluICovCisJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKyBwb3J0KjQsIDApOworCisJCS8qIHVwZGF0ZSBzaGFyZWQgbWVtb3J5ICovCisJCWJueDJ4X3VwZGF0ZV9tbmcocGFyYW1zLCB2YXJzLT5saW5rX3N0YXR1cyk7CisKKwl9IGVsc2UgeyAvKiBsaW5rIGRvd24gKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJQb3J0ICV4OiBMaW5rIGlzIGRvd25cbiIsIHBhcmFtcy0+cG9ydCk7CisJCWJueDJ4X3NldF9sZWQoYnAsIHBvcnQsIExFRF9NT0RFX09GRiwKKwkJCSAgICAwLCBwYXJhbXMtPmh3X2xlZF9tb2RlLAorCQkJICAgIHBhcmFtcy0+Y2hpcF9pZCk7CisKKwkJLyogaW5kaWNhdGUgbm8gbWFjIGFjdGl2ZSAqLworCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX05PTkU7CisKKwkJLyogdXBkYXRlIHNoYXJlZCBtZW1vcnkgKi8KKwkJdmFycy0+bGlua19zdGF0dXMgPSAwOworCQlibngyeF91cGRhdGVfbW5nKHBhcmFtcywgdmFycy0+bGlua19zdGF0dXMpOworCisJCS8qIGFjdGl2YXRlIG5pZyBkcmFpbiAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsgcG9ydCo0LCAxKTsKKworCQkvKiByZXNldCBCaWdNYWMgKi8KKwkJYm54MnhfYm1hY19yeF9kaXNhYmxlKGJwLCBwYXJhbXMtPnBvcnQpOworCQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArCisJCQkgICBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9DTEVBUiwKKwkJCSAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOworCisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zZng3MTAxX3NwX3N3X3Jlc2V0KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHU4IHBoeV9hZGRyKQoreworCXUxNiB2YWwsIGNudDsKKworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJICAgICAgcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9SRVNFVCwgJnZhbCk7CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IDEwOyBjbnQrKykgeworCQltc2xlZXAoNTApOworCQkvKiBXcml0ZXMgYSBzZWxmLWNsZWFyaW5nIHJlc2V0ICovCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJCSAgICAgICBwaHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfNzEwMV9SRVNFVCwKKwkJCSAgICAgICAodmFsIHwgKDE8PDE1KSkpOworCQkvKiBXYWl0IGZvciBjbGVhciAqLworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAorCQkJICAgICAgcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR183MTAxX1JFU0VULCAmdmFsKTsKKworCQlpZiAoKHZhbCAmICgxPDwxNSkpID09IDApCisJCQlicmVhazsKKwl9Cit9CisjZGVmaW5lIFJFU0VSVkVEX1NJWkUgMjU2CisvKiBtYXggYXBwbGljYXRpb24gaXMgMTYwSyBieXRlcyAtIGRhdGEgYXQgZW5kIG9mIFJBTSAqLworI2RlZmluZSBNQVhfQVBQX1NJWkUgMTYwKjEwMjQgLSBSRVNFUlZFRF9TSVpFCisKKy8qIEhlYWRlciBpcyAxNCBieXRlcyAqLworI2RlZmluZSBIRUFERVJfU0laRSAxNAorI2RlZmluZSBEQVRBX09GRlNFVCBIRUFERVJfU0laRQorCisjZGVmaW5lIFNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKSBcCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwgXAorCQkJZXh0X3BoeV9hZGRyLCBcCisJCQlNRElPX1BDU19ERVZBRCwgXAorCQkJTURJT19QQ1NfUkVHXzcxMDFfU1BJX0NUUkxfQUREUiwgMSkKKworLyogUHJvZ3JhbXMgYW4gaW1hZ2UgdG8gRFNQJ3MgZmxhc2ggdmlhIHRoZSBTUEkgcG9ydCovCitzdGF0aWMgdTggYm54Mnhfc2Z4NzEwMV9mbGFzaF9kb3dubG9hZChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCSAgICAgdTggZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgY2hhciBkYXRhW10sIHUzMiBzaXplKQoreworCWNvbnN0IHUxNiBudW1fdHJhbnMgPSBzaXplLzQ7IC8qIDQgYnl0ZXMgY2FuIGJlIHNlbnQgYXQgYSB0aW1lICovCisJLyogRG9lc24ndCBpbmNsdWRlIGxhc3QgdHJhbnMhKi8KKwljb25zdCB1MTYgbGFzdF90cmFuc19zaXplID0gc2l6ZSU0OyAvKiBOdW0gYnl0ZXMgb24gbGFzdCB0cmFucyAqLworCXUxNiB0cmFuc19jbnQsIGJ5dGVfY250OworCXUzMiBkYXRhX2luZGV4OworCXUxNiB0bXA7CisJdTE2IGNvZGVfc3RhcnRlZCA9IDA7CisJdTE2IGltYWdlX3JldmlzaW9uMSwgaW1hZ2VfcmV2aXNpb24yOworCXUxNiBjbnQ7CisKKwlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3NmeDcxMDFfZmxhc2hfZG93bmxvYWQgZmlsZV9zaXplPSVkXG4iLCBzaXplKTsKKwkvKiBHb2luZyB0byBmbGFzaCovCisJaWYgKChzaXplLUhFQURFUl9TSVpFKSA+IE1BWF9BUFBfU0laRSkgeworCQkvKiBUaGlzIHZlcnkgb2Z0ZW4gd2lsbCBiZSB0aGUgY2FzZSwgYmVjYXVzZSB0aGUgaW1hZ2UgaXMgYnVpbHQKKwkJd2l0aCAxNjBLYnl0ZXMgc2l6ZSB3aGVyZWFzIHRoZSB0b3RhbCBpbWFnZSBzaXplIG11c3QgYWN0dWFsbHkKKwkJYmUgMTYwS2J5dGVzLVJFU0VSVkVEX1NJWkUgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJXYXJuaW5nLCBmaWxlIHNpemUgd2FzICVkIGJ5dGVzICIKKwkJCSAidHJ1bmNhdGVkIHRvICVkIGJ5dGVzXG4iLCBzaXplLCBNQVhfQVBQX1NJWkUpOworCQlzaXplID0gTUFYX0FQUF9TSVpFK0hFQURFUl9TSVpFOworCX0KKwlEUChORVRJRl9NU0dfTElOSywgIkZpbGUgdmVyc2lvbiBpcyAlYyVjXG4iLCBkYXRhWzB4MTRlXSwgZGF0YVsweDE0Zl0pOworCURQKE5FVElGX01TR19MSU5LLCAiICAgICAgICAgICAgICAgICVjJWNcbiIsIGRhdGFbMHgxNTBdLCBkYXRhWzB4MTUxXSk7CisJLyogUHV0IHRoZSBEU1AgaW4gZG93bmxvYWQgbW9kZSBieSBzZXR0aW5nIEZMQVNIX0NGR1syXSB0byAxCisJICAgYW5kIGlzc3VpbmcgYSByZXNldC4qLworCisJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdIKTsKKworCWJueDJ4X3NmeDcxMDFfc3Bfc3dfcmVzZXQoYnAsIHBvcnQsIGV4dF9waHlfYWRkcik7CisKKwkvKiB3YWl0IDAuNSBzZWMgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspCisJCW1zbGVlcCg1KTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBjYW4gYWNjZXNzIHRoZSBEU1AKKwkgICBBbmQgaXQncyBpbiB0aGUgY29ycmVjdCBtb2RlICh3YWl0aW5nIGZvciBkb3dubG9hZCkgKi8KKworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BDU19ERVZBRCwKKwkJICAgICAgTURJT19QQ1NfUkVHXzcxMDFfRFNQX0FDQ0VTUywgJnRtcCk7CisKKwlpZiAodG1wICE9IDB4MDAwQSkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkRTUCBpcyBub3QgaW4gd2FpdGluZyBvbiBkb3dubG9hZCBtb2RlLiAiCisJCQkgIkV4cGVjdGVkIDB4MDAwQSwgcmVhZCAweCUwNFhcbiIsIHRtcCk7CisJCURQKE5FVElGX01TR19MSU5LLCAiRG93bmxvYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTXV4IHRoZSBTUEkgaW50ZXJmYWNlIGF3YXkgZnJvbSB0aGUgaW50ZXJuYWwgcHJvY2Vzc29yICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BDU19ERVZBRCwKKwkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9NVVgsIDEpOworCisJLyogUmVzZXQgdGhlIFNQSSBwb3J0ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BDU19ERVZBRCwKKwkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9DVFJMX0FERFIsIDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QQ1NfREVWQUQsCisJCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfQ1RSTF9BRERSLAorCQkgICAgICAgKDE8PE1ESU9fUENTX1JFR183MTAxX1NQSV9SRVNFVF9CSVQpKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0NUUkxfQUREUiwgMCk7CisKKwkvKiBFcmFzZSB0aGUgZmxhc2ggKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKKwkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfV1JJVEVfRU5BQkxFX0NNRCk7CisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0JZVEVTX1RPX1RSQU5TRkVSX0FERFIsCisJCSAgICAgICAxKTsKKworCVNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKKwkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfQlVMS19FUkFTRV9DTUQpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BDU19ERVZBRCwKKwkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9CWVRFU19UT19UUkFOU0ZFUl9BRERSLAorCQkgICAgICAgMSk7CisJU1BJX1NUQVJUX1RSQU5TRkVSKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOworCisJLyogV2FpdCAxMCBzZWNvbmRzLCB0aGUgbWF4aW11bSB0aW1lIGZvciB0aGUgZXJhc2UgdG8gY29tcGxldGUgKi8KKwlEUChORVRJRl9NU0dfTElOSywgIkVyYXNpbmcgZmxhc2gsIHRoaXMgdGFrZXMgMTAgc2Vjb25kcy4uLlxuIik7CisJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDAwOyBjbnQrKykKKwkJbXNsZWVwKDEwKTsKKworCURQKE5FVElGX01TR19MSU5LLCAiRG93bmxvYWRpbmcgZmxhc2gsIHBsZWFzZSB3YWl0Li4uXG4iKTsKKwlkYXRhX2luZGV4ID0gMDsKKwlmb3IgKHRyYW5zX2NudCA9IDA7IHRyYW5zX2NudCA8IG51bV90cmFuczsgdHJhbnNfY250KyspIHsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAorCQkJICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgIE1ESU9fUENTX0RFVkFELAorCQkJICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAorCQkJICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSX1dSSVRFX0VOQUJMRV9DTUQpOworCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QQ1NfREVWQUQsCisJCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0JZVEVTX1RPX1RSQU5TRkVSX0FERFIsCisJCQkgICAgICAgMSk7CisJCVNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKKworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCisJCQkgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfUEFHRV9QUk9HUkFNX0NNRCk7CisKKwkJLyogQml0cyAyMy0xNiBvZiBhZGRyZXNzICovCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QQ1NfREVWQUQsCisJCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKKwkJCSAgICAgICAoZGF0YV9pbmRleD4+MTYpKTsKKwkJLyogQml0cyAxNS04IG9mIGFkZHJlc3MgKi8KKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BDU19ERVZBRCwKKwkJCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAorCQkJICAgICAgIChkYXRhX2luZGV4Pj44KSk7CisKKwkJLyogQml0cyA3LTAgb2YgYWRkcmVzcyAqLworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCisJCQkgICAgICAgKCh1MTYpZGF0YV9pbmRleCkpOworCisJCWJ5dGVfY250ID0gMDsKKwkJd2hpbGUgKGJ5dGVfY250IDwgNCAmJiBkYXRhX2luZGV4IDwgc2l6ZSkgeworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCisJCQkgICAgICAgZGF0YVtkYXRhX2luZGV4KytdKTsKKwkJCWJ5dGVfY250Kys7CisJCX0KKworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9CWVRFU19UT19UUkFOU0ZFUl9BRERSLAorCQkJICAgICAgIGJ5dGVfY250KzQpOworCisJCVNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKKwkJbXNsZWVwKDUpOyAvKiBXYWl0IDUgbXMgbWluaW11bSBiZXR3ZWVuIHRyYW5zcyAqLworCisJCS8qIExldCB0aGUgdXNlciBrbm93IHNvbWV0aGluZydzIGdvaW5nIG9uLiovCisJCS8qIGEgcGFjaWZpZXIgZXZlciA0SyAqLworCQlpZiAoKGRhdGFfaW5kZXggJSAxMDIzKSA9PSAwKQorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJEb3dubG9hZCAlZCUlXG4iLCBkYXRhX2luZGV4L3NpemUpOworCX0KKworCURQKE5FVElGX01TR19MSU5LLCAiXG4iKTsKKwkvKiBUcmFuc2ZlciB0aGUgbGFzdCBibG9jayBpZiB0aGVyZSBpcyBkYXRhIHJlbWFpbmluZyAqLworCWlmIChsYXN0X3RyYW5zX3NpemUpIHsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCQlleHRfcGh5X2FkZHIsCisJCQlNRElPX1BDU19ERVZBRCwKKwkJCU1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCisJCQlNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSX1dSSVRFX0VOQUJMRV9DTUQpOworCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QQ1NfREVWQUQsCisJCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0JZVEVTX1RPX1RSQU5TRkVSX0FERFIsCisJCQkgICAgICAgMSk7CisKKwkJU1BJX1NUQVJUX1RSQU5TRkVSKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOworCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCQkgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgTURJT19QQ1NfREVWQUQsCisJCQkgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCisJCQkgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfUEFHRV9QUk9HUkFNX0NNRCk7CisKKwkJLyogQml0cyAyMy0xNiBvZiBhZGRyZXNzICovCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QQ1NfREVWQUQsCisJCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKKwkJCSAgICAgICAoZGF0YV9pbmRleD4+MTYpKTsKKwkJLyogQml0cyAxNS04IG9mIGFkZHJlc3MgKi8KKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BDU19ERVZBRCwKKwkJCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAorCQkJICAgICAgIChkYXRhX2luZGV4Pj44KSk7CisKKwkJLyogQml0cyA3LTAgb2YgYWRkcmVzcyAqLworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCisJCQkgICAgICAgKCh1MTYpZGF0YV9pbmRleCkpOworCisJCWJ5dGVfY250ID0gMDsKKwkJd2hpbGUgKGJ5dGVfY250IDwgbGFzdF90cmFuc19zaXplICYmIGRhdGFfaW5kZXggPCBzaXplKSB7CisJCQkvKiBCaXRzIDctMCBvZiBhZGRyZXNzICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCQkJZXh0X3BoeV9hZGRyLAorCQkJCU1ESU9fUENTX0RFVkFELAorCQkJCU1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCisJCQkJZGF0YVtkYXRhX2luZGV4KytdKTsKKwkJCWJ5dGVfY250Kys7CisJCX0KKworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAorCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9CWVRFU19UT19UUkFOU0ZFUl9BRERSLAorCQkJICAgICAgIGJ5dGVfY250KzQpOworCisJCVNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKKwl9CisKKwkvKiBEU1AgUmVtb3ZlIERvd25sb2FkIE1vZGUgKi8KKwlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLCBNSVNDX1JFR0lTVEVSU19HUElPX0xPVyk7CisKKwlibngyeF9zZng3MTAxX3NwX3N3X3Jlc2V0KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOworCisJLyogd2FpdCAwLjUgc2VjIHRvIGFsbG93IGl0IHRvIHJ1biAqLworCWZvciAoY250ID0gMDsgY250IDwgMTAwOyBjbnQrKykKKwkJbXNsZWVwKDUpOworCisJYm54MnhfaHdfcmVzZXQoYnApOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDA7IGNudCsrKQorCQltc2xlZXAoNSk7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBjb2RlIGlzIHN0YXJ0ZWQuIEluIGNhc2UgdGhlIGRvd25sb2FkCisJY2hlY2tzdW0gZmFpbGVkLCB0aGUgY29kZSB3b24ndCBiZSBzdGFydGVkLiAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BDU19ERVZBRCwKKwkJICAgICAgTURJT19QQ1NfUkVHXzcxMDFfRFNQX0FDQ0VTUywKKwkJICAgICAgJnRtcCk7CisKKwljb2RlX3N0YXJ0ZWQgPSAodG1wICYgKDE8PDQpKTsKKwlpZiAoIWNvZGVfc3RhcnRlZCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkRvd25sb2FkIGZhaWxlZC4gUGxlYXNlIGNoZWNrIGZpbGUuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVmVyaWZ5IHRoYXQgdGhlIGZpbGUgcmV2aXNpb24gaXMgbm93IGVxdWFsIHRvIHRoZSBpbWFnZQorCXJldmlzaW9uIHdpdGhpbiB0aGUgRFNQICovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLAorCQkgICAgICAmaW1hZ2VfcmV2aXNpb24xKTsKKworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHXzcxMDFfVkVSMiwKKwkJICAgICAgJmltYWdlX3JldmlzaW9uMik7CisKKwlpZiAoZGF0YVsweDE0ZV0JIT0gKGltYWdlX3JldmlzaW9uMiYweEZGKSB8fAorCSAgICBkYXRhWzB4MTRmXSAhPSAoKGltYWdlX3JldmlzaW9uMiYweEZGMDApPj44KSB8fAorCSAgICBkYXRhWzB4MTUwXSAhPSAoaW1hZ2VfcmV2aXNpb24xJjB4RkYpIHx8CisJICAgIGRhdGFbMHgxNTFdICE9ICgoaW1hZ2VfcmV2aXNpb24xJjB4RkYwMCk+PjgpKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRG93bmxvYWQgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlEUChORVRJRl9NU0dfTElOSywgIkRvd25sb2FkICVkJSVcbiIsIGRhdGFfaW5kZXgvc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3U4IGJueDJ4X2ZsYXNoX2Rvd25sb2FkKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHUzMiBleHRfcGh5X2NvbmZpZywKKwkJICAgICAgdTggZHJpdmVyX2xvYWRlZCwgY2hhciBkYXRhW10sIHUzMiBzaXplKQoreworCXU4IHJjID0gMDsKKwl1MzIgZXh0X3BoeV90eXBlOworCXU4IGV4dF9waHlfYWRkcjsKKwlleHRfcGh5X2FkZHIgPSAoKGV4dF9waHlfY29uZmlnICYKKwkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisKKwlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShleHRfcGh5X2NvbmZpZyk7CisKKwlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkiRmxhc2ggZG93bmxvYWQgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBleHQgcGh5XG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJCS8qIFRha2UgZXh0IHBoeSBvdXQgb2YgcmVzZXQgKi8KKwkJaWYgKCFkcml2ZXJfbG9hZGVkKQorCQkJYm54MnhfdHVybl9vbl9zZihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKKwkJcmMgPSBibngyeF9zZng3MTAxX2ZsYXNoX2Rvd25sb2FkKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIsCisJCQkJCQlkYXRhLCBzaXplKTsKKwkJaWYgKCFkcml2ZXJfbG9hZGVkKQorCQkJYm54MnhfdHVybl9vZmZfc2YoYnApOworCQlicmVhazsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTjoKKwlkZWZhdWx0OgorCQlEUChORVRJRl9NU0dfTElOSywgIkludmFsaWQgZXh0IHBoeSB0eXBlXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJjOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmggYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0ZDM3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaApAQCAtMCwwICsxLDE2OCBAQAorLyogQ29weXJpZ2h0IDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZQorICogYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLmh0bWwgKHRoZSAiR1BMIikuCisgKgorICogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworICogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisgKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorICogY29uc2VudC4KKyAqCisgKiBXcml0dGVuIGJ5IFlhbml2IFJvc25lcgorICoKKyAqLworCisjaWZuZGVmIEJOWDJYX0xJTktfSAorI2RlZmluZSBCTlgyWF9MSU5LX0gKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIERlZmluZXMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgREVGQVVMVF9QSFlfREVWX0FERFIgMworCisKKworI2RlZmluZSBGTE9XX0NUUkxfQVVUTwkJUE9SVF9GRUFUVVJFX0ZMT1dfQ09OVFJPTF9BVVRPCisjZGVmaW5lIEZMT1dfQ1RSTF9UWAkJUE9SVF9GRUFUVVJFX0ZMT1dfQ09OVFJPTF9UWAorI2RlZmluZSBGTE9XX0NUUkxfUlgJCVBPUlRfRkVBVFVSRV9GTE9XX0NPTlRST0xfUlgKKyNkZWZpbmUgRkxPV19DVFJMX0JPVEgJCVBPUlRfRkVBVFVSRV9GTE9XX0NPTlRST0xfQk9USAorI2RlZmluZSBGTE9XX0NUUkxfTk9ORQkJUE9SVF9GRUFUVVJFX0ZMT1dfQ09OVFJPTF9OT05FCisKKyNkZWZpbmUgU1BFRURfQVVUT19ORUcJICAgIDAKKyNkZWZpbmUgU1BFRURfMTIwMDAJCTEyMDAwCisjZGVmaW5lIFNQRUVEXzEyNTAwCQkxMjUwMAorI2RlZmluZSBTUEVFRF8xMzAwMAkJMTMwMDAKKyNkZWZpbmUgU1BFRURfMTUwMDAJCTE1MDAwCisjZGVmaW5lIFNQRUVEXzE2MDAwCQkxNjAwMAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIElucHV0cyBwYXJhbWV0ZXJzIHRvIHRoZSBDTEMgKi8KK3N0cnVjdCBsaW5rX3BhcmFtcyB7CisKKwl1OCBwb3J0OworCisJLyogRGVmYXVsdCAvIFVzZXIgQ29uZmlndXJhdGlvbiAqLworCXU4IGxvb3BiYWNrX21vZGU7CisjZGVmaW5lIExPT1BCQUNLX05PTkUJMAorI2RlZmluZSBMT09QQkFDS19FTUFDCTEKKyNkZWZpbmUgTE9PUEJBQ0tfQk1BQwkyCisjZGVmaW5lIExPT1BCQUNLX1hHWFNfMTAJMworI2RlZmluZSBMT09QQkFDS19FWFRfUEhZCTQKKworCXUxNiByZXFfZHVwbGV4OworCXUxNiByZXFfZmxvd19jdHJsOworCXUxNiByZXFfbGluZV9zcGVlZDsgLyogQWxzbyBkZXRlcm1pbmUgQXV0b05lZyAqLworCisJLyogRGV2aWNlIHBhcmFtZXRlcnMgKi8KKwl1OCBtYWNfYWRkcls2XTsKKwl1MTYgbXR1OworCisKKwkvKiBzaG1lbSBwYXJhbWV0ZXJzICovCisJdTMyIHNobWVtX2Jhc2U7CisJdTMyIHNwZWVkX2NhcF9tYXNrOworCXUzMiBzd2l0Y2hfY2ZnOworI2RlZmluZSBTV0lUQ0hfQ0ZHXzFHCQlQT1JUX0ZFQVRVUkVfQ09OX1NXSVRDSF8xR19TV0lUQ0gKKyNkZWZpbmUgU1dJVENIX0NGR18xMEcJCVBPUlRfRkVBVFVSRV9DT05fU1dJVENIXzEwR19TV0lUQ0gKKyNkZWZpbmUgU1dJVENIX0NGR19BVVRPX0RFVEVDVAlQT1JUX0ZFQVRVUkVfQ09OX1NXSVRDSF9BVVRPX0RFVEVDVAorCisJdTE2IGh3X2xlZF9tb2RlOyAvKiBwYXJ0IG9mIHRoZSBod19jb25maWcgcmVhZCBmcm9tIHRoZSBzaG1lbSAqLworCXUzMiBzZXJkZXNfY29uZmlnOworCXUzMiBsYW5lX2NvbmZpZzsKKwl1MzIgZXh0X3BoeV9jb25maWc7CisjZGVmaW5lIFhHWFNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKQkoZXh0X3BoeV9jb25maWcgJiBcCisJCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0spCisjZGVmaW5lIFNFUkRFU19FWFRfUEhZX1RZUEUoZXh0X3BoeV9jb25maWcpCShleHRfcGh5X2NvbmZpZyAmIFwKKwkJCQkJUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9NQVNLKQorCS8qIFBoeSByZWdpc3RlciBwYXJhbWV0ZXIgKi8KKwl1MzIgY2hpcF9pZDsKKworCS8qIHBoeV9hZGRyIHBvcHVsYXRlZCBieSB0aGUgQ0xDICovCisJdTggcGh5X2FkZHI7CisJLyogRGV2aWNlIHBvaW50ZXIgcGFzc2VkIHRvIGFsbCBjYWxsYmFjayBmdW5jdGlvbnMgKi8KKwlzdHJ1Y3QgYm54MnggKmJwOworfTsKKworLyogT3V0cHV0IHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBsaW5rX3ZhcnMgeworCXU4IHBoeV9saW5rX3VwOyAvKiBpbnRlcm5hbCBwaHkgbGluayBpbmRpY2F0aW9uICovCisJdTggbGlua191cDsKKwl1MTYgZHVwbGV4OworCXUxNiBmbG93X2N0cmw7CisJdTMyIGllZWVfZmM7CisJdTggbWFjX3R5cGU7CisKKyNkZWZpbmUgTUFDX1RZUEVfTk9ORQkwCisjZGVmaW5lIE1BQ19UWVBFX0VNQUMJMQorI2RlZmluZSBNQUNfVFlQRV9CTUFDCTIKKwl1MTYgbGluZV9zcGVlZDsKKwl1MzIgYXV0b25lZzsKKyNkZWZpbmUgQVVUT19ORUdfRElTQUJMRUQJCQkweDAKKyNkZWZpbmUgQVVUT19ORUdfRU5BQkxFRAkJCTB4MQorI2RlZmluZSBBVVRPX05FR19DT01QTEVURQkJCTB4MgorI2RlZmluZSBBVVRPX05FR19QQVJBTExFTF9ERVRFQ1RJT05fVVNFRCAJMHgzCisKKwl1OCBwaHlfZmxhZ3M7CisKKwkvKiBUaGUgc2FtZSBkZWZpbml0aW9ucyBhcyB0aGUgc2htZW0gcGFyYW1ldGVyICovCisJdTMyIGxpbmtfc3RhdHVzOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbml0aWFsaXplIHRoZSBwaHkgKi8KK3U4IGJueDJ4X3BoeV9pbml0KHN0cnVjdCBsaW5rX3BhcmFtcyAqaW5wdXQsIHN0cnVjdCBsaW5rX3ZhcnMgKm91dHB1dCk7CisKKy8qIFJlc2V0IHRoZSBsaW5rLiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gZHJpdmVyIG9yIGludGVyZmFjZSBnb2VzIGRvd24gKi8KK3U4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpOworCisvKiBibngyeF9saW5rX3VwZGF0ZSBzaG91bGQgYmUgY2FsbGVkIHVwb24gbGluayBpbnRlcnJ1cHQgKi8KK3U4IGJueDJ4X2xpbmtfdXBkYXRlKHN0cnVjdCBsaW5rX3BhcmFtcyAqaW5wdXQsIHN0cnVjdCBsaW5rX3ZhcnMgKm91dHB1dCk7CisKKy8qIHVzZSB0aGUgZm9sbG93aW5nIGNsNDUgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgZnJvbSBleHRlcm5hbF9waHkKKyAgSW4gb3JkZXIgdG8gdXNlIGl0IHRvIHJlYWQvd3JpdGUgaW50ZXJuYWwgcGh5IHJlZ2lzdGVycywgdXNlCisgIERFRkFVTFRfUEhZX0RFVl9BRERSIGFzIGRldmFkLCBhbmQgKF9iYW5rICsgKF9hZGRyICYgMHhmKSkgYXMKKyAgVXNlIGV4dF9waHlfdHlwZSBvZiAwIGluIGNhc2Ugb2YgY2wyMiBvdmVyIGNsNDUKKyAgdGhlIHJlZ2lzdGVyICovCit1OCBibngyeF9jbDQ1X3JlYWQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTMyIGV4dF9waHlfdHlwZSwKKwkJIHU4IHBoeV9hZGRyLCB1OCBkZXZhZCwgdTE2IHJlZywgdTE2ICpyZXRfdmFsKTsKKwordTggYm54MnhfY2w0NV93cml0ZShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1MzIgZXh0X3BoeV90eXBlLAorCQkgIHU4IHBoeV9hZGRyLCB1OCBkZXZhZCwgdTE2IHJlZywgdTE2IHZhbCk7CisKKy8qIFJlYWRzIHRoZSBsaW5rX3N0YXR1cyBmcm9tIHRoZSBzaG1lbSwKKyAgIGFuZCB1cGRhdGUgdGhlIGxpbmsgdmFycyBhY2NvcmRpbmFseSAqLwordm9pZCBibngyeF9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGxpbmtfcGFyYW1zICppbnB1dCwKKwkJCSAgICBzdHJ1Y3QgbGlua192YXJzICpvdXRwdXQpOworLyogcmV0dXJucyBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmd192ZXJzaW9uIG9mIHRoZSBleHRlcm5hbCBwaHkgKi8KK3U4IGJueDJ4X2dldF9leHRfcGh5X2Z3X3ZlcnNpb24oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHU4IGRyaXZlcl9sb2FkZWQsCisJCQkgICAgICB1OCAqdmVyc2lvbiwgdTE2IGxlbik7CisKKy8qIFNldC9VbnNldCB0aGUgbGVkCisgICBCYXNpY2FsbHksIHRoZSBDTEMgdGFrZXMgY2FyZSBvZiB0aGUgbGVkIGZvciB0aGUgbGluaywgYnV0IGluIGNhc2Ugb25lIG5lZWRzCisgICB0byBzZXQvdW5zZXQgdGhlIGxlZCB1bm5hdHVhbGx5LCBzZXQgdGhlICJtb2RlIiB0byBMRURfTU9ERV9PUEVSIHRvCisgICBibGluayB0aGUgbGVkLCBhbmQgTEVEX01PREVfT0ZGIHRvIHNldCB0aGUgbGVkIG9mZi4qLwordTggYm54Mnhfc2V0X2xlZChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1OCBtb2RlLCB1MzIgc3BlZWQsCisJICAgICAgIHUxNiBod19sZWRfbW9kZSwgdTMyIGNoaXBfaWQpOworI2RlZmluZSBMRURfTU9ERV9PRkYJMAorI2RlZmluZSBMRURfTU9ERV9PUEVSIAkyCisKK3U4IGJueDJ4X292ZXJyaWRlX2xlZF92YWx1ZShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1MzIgbGVkX2lkeCwgdTMyIHZhbHVlKTsKKwordTggYm54MnhfZmxhc2hfZG93bmxvYWQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTMyIGV4dF9waHlfY29uZmlnLAorCQkgICAgICB1OCBkcml2ZXJfbG9hZGVkLCBjaGFyIGRhdGFbXSwgdTMyIHNpemUpOworLyogR2V0IHRoZSBhY3R1YWwgbGluayBzdGF0dXMuIEluIGNhc2UgaXQgcmV0dXJucyAwLCBsaW5rIGlzIHVwLAorCW90aGVyd2lzZSBsaW5rIGlzIGRvd24qLwordTggYm54MnhfdGVzdF9saW5rKHN0cnVjdCBsaW5rX3BhcmFtcyAqaW5wdXQsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpOworCisKKyNlbmRpZiAvKiBCTlgyWF9MSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYzYmVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCkBAIC0wLDAgKzEsMTAyOTQgQEAKKy8qIGJueDJ4X21haW4uYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiBFaWxvbiBHcmVlbnN0ZWluIDxlaWxvbmdAYnJvYWRjb20uY29tPgorICogV3JpdHRlbiBieTogRWxpZXplciBUYW1pcgorICogQmFzZWQgb24gY29kZSBmcm9tIE1pY2hhZWwgQ2hhbidzIGJueDIgZHJpdmVyCisgKiBVRFAgQ1NVTSBlcnJhdGEgd29ya2Fyb3VuZCBieSBBcmlrIEdlbmRlbG1hbgorICogU2xvd3BhdGggcmV3b3JrIGJ5IFZsYWRpc2xhdiBab2xvdGFyb3YKKyAqIFN0YXRpc3RpY3MgYW5kIExpbmsgbWFuYWdlbWVudCBieSBZaXRjaGFrIEdlcnRuZXIKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+ICAvKiBmb3IgZGV2X2luZm8oKSAqLworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpZmRlZiBORVRJRl9GX0hXX1ZMQU5fVFgKKwkjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgorI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAiYm54MnhfcmVnLmgiCisjaW5jbHVkZSAiYm54MnhfZndfZGVmcy5oIgorI2luY2x1ZGUgImJueDJ4X2hzaS5oIgorI2luY2x1ZGUgImJueDJ4X2xpbmsuaCIKKyNpbmNsdWRlICJibngyeC5oIgorI2luY2x1ZGUgImJueDJ4X2luaXQuaCIKKworI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMS40NS42IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUgICAgICAiMjAwOC8wNi8yMyIKKyNkZWZpbmUgQk5YMlhfQkNfVkVSCQkweDA0MDIwMAorCisvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcgKi8KKyNkZWZpbmUgVFhfVElNRU9VVAkJKDUqSFopCisKK3N0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KKwkiQnJvYWRjb20gTmV0WHRyZW1lIElJIDU3NzF4IDEwR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgIgorCURSVl9NT0RVTEVfTkFNRSAiICIgRFJWX01PRFVMRV9WRVJTSU9OICIgKCIgRFJWX01PRFVMRV9SRUxEQVRFICIpXG4iOworCitNT0RVTEVfQVVUSE9SKCJFbGllemVyIFRhbWlyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBCQ001NzcxMCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9NT0RVTEVfVkVSU0lPTik7CisKK3N0YXRpYyBpbnQgdXNlX2ludGE7CitzdGF0aWMgaW50IHBvbGw7CitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIGludCBkaXNhYmxlX3RwYTsKK3N0YXRpYyBpbnQgbm9tY3A7CitzdGF0aWMgaW50IGxvYWRfY291bnRbM107IC8qIDAtY29tbW9uLCAxLXBvcnQwLCAyLXBvcnQxICovCitzdGF0aWMgaW50IHVzZV9tdWx0aTsKKworbW9kdWxlX3BhcmFtKHVzZV9pbnRhLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHBvbGwsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV90cGEsIGludCwgMCk7Cittb2R1bGVfcGFyYW0obm9tY3AsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9pbnRhLCAidXNlIElOVCNBIGluc3RlYWQgb2YgTVNJLVgiKTsKK01PRFVMRV9QQVJNX0RFU0MocG9sbCwgInVzZSBwb2xsaW5nIChmb3IgZGVidWcpIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVmYXVsdCBkZWJ1ZyBtc2dsZXZlbCIpOworTU9EVUxFX1BBUk1fREVTQyhub21jcCwgImlnbm9yZSBtYW5hZ2VtZW50IENQVSIpOworCisjaWZkZWYgQk5YMlhfTVVMVEkKK21vZHVsZV9wYXJhbSh1c2VfbXVsdGksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9tdWx0aSwgInVzZSBwZXItQ1BVIHF1ZXVlcyIpOworI2VuZGlmCisKK2VudW0gYm54MnhfYm9hcmRfdHlwZSB7CisJQkNNNTc3MTAgPSAwLAorCUJDTTU3NzExID0gMSwKKwlCQ001NzcxMUUgPSAyLAorfTsKKworLyogaW5kZXhlZCBieSBib2FyZF90eXBlLCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCB7CisJY2hhciAqbmFtZTsKK30gYm9hcmRfaW5mb1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyAiQnJvYWRjb20gTmV0WHRyZW1lIElJIEJDTTU3NzEwIFhHYiIgfSwKKwl7ICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTc3MTEgWEdiIiB9LAorCXsgIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBCQ001NzcxMUUgWEdiIiB9Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBibngyeF9wY2lfdGJsW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQkNNNTc3MTAgfSwKKwl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCQ001NzcxMSB9LAorCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTFFLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCQ001NzcxMUUgfSwKKwl7IDAgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJueDJ4X3BjaV90YmwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiB1c2VkIG9ubHkgYXQgaW5pdAorICogbG9ja2luZyBpcyBkb25lIGJ5IG1jcAorICovCitzdGF0aWMgdm9pZCBibngyeF9yZWdfd3JfaW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCB1MzIgdmFsKQoreworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywgYWRkcik7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicC0+cGRldiwgUENJQ0ZHX0dSQ19EQVRBLCB2YWwpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywKKwkJCSAgICAgICBQQ0lDRkdfVkVORE9SX0lEX09GRlNFVCk7Cit9CisKK3N0YXRpYyB1MzIgYm54MnhfcmVnX3JkX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkcikKK3sKKwl1MzIgdmFsOworCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicC0+cGRldiwgUENJQ0ZHX0dSQ19BRERSRVNTLCBhZGRyKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfREFUQSwgJnZhbCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicC0+cGRldiwgUENJQ0ZHX0dSQ19BRERSRVNTLAorCQkJICAgICAgIFBDSUNGR19WRU5ET1JfSURfT0ZGU0VUKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBjb25zdCB1MzIgZG1hZV9yZWdfZ29fY1tdID0geworCURNQUVfUkVHX0dPX0MwLCBETUFFX1JFR19HT19DMSwgRE1BRV9SRUdfR09fQzIsIERNQUVfUkVHX0dPX0MzLAorCURNQUVfUkVHX0dPX0M0LCBETUFFX1JFR19HT19DNSwgRE1BRV9SRUdfR09fQzYsIERNQUVfUkVHX0dPX0M3LAorCURNQUVfUkVHX0dPX0M4LCBETUFFX1JFR19HT19DOSwgRE1BRV9SRUdfR09fQzEwLCBETUFFX1JFR19HT19DMTEsCisJRE1BRV9SRUdfR09fQzEyLCBETUFFX1JFR19HT19DMTMsIERNQUVfUkVHX0dPX0MxNCwgRE1BRV9SRUdfR09fQzE1Cit9OworCisvKiBjb3B5IGNvbW1hbmQgaW50byBETUFFIGNvbW1hbmQgbWVtb3J5IGFuZCBzZXQgRE1BRSBjb21tYW5kIGdvICovCitzdGF0aWMgdm9pZCBibngyeF9wb3N0X2RtYWUoc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSwKKwkJCSAgICBpbnQgaWR4KQoreworCXUzMiBjbWRfb2Zmc2V0OworCWludCBpOworCisJY21kX29mZnNldCA9IChETUFFX1JFR19DTURfTUVNICsgc2l6ZW9mKHN0cnVjdCBkbWFlX2NvbW1hbmQpICogaWR4KTsKKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKS80KTsgaSsrKSB7CisJCVJFR19XUihicCwgY21kX29mZnNldCArIGkqNCwgKigoKHUzMiAqKWRtYWUpICsgaSkpOworCisJCURQKEJOWDJYX01TR19PRkYsICJETUFFIGNtZFslZF0uJWQgKDB4JTA4eCkgOiAweCUwOHhcbiIsCisJCSAgIGlkeCwgaSwgY21kX29mZnNldCArIGkqNCwgKigoKHUzMiAqKWRtYWUpICsgaSkpOworCX0KKwlSRUdfV1IoYnAsIGRtYWVfcmVnX2dvX2NbaWR4XSwgMSk7Cit9CisKK3ZvaWQgYm54Mnhfd3JpdGVfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1MzIgZHN0X2FkZHIsCisJCSAgICAgIHUzMiBsZW4zMikKK3sKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlID0gJmJwLT5pbml0X2RtYWU7CisJdTMyICp3Yl9jb21wID0gYm54Mnhfc3AoYnAsIHdiX2NvbXApOworCWludCBjbnQgPSAyMDA7CisKKwlpZiAoIWJwLT5kbWFlX3JlYWR5KSB7CisJCXUzMiAqZGF0YSA9IGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKTsKKworCQlEUChCTlgyWF9NU0dfT0ZGLCAiRE1BRSBpcyBub3QgcmVhZHkgKGRzdF9hZGRyICUwOHggIGxlbjMyICVkKSIKKwkJICAgIiAgdXNpbmcgaW5kaXJlY3RcbiIsIGRzdF9hZGRyLCBsZW4zMik7CisJCWJueDJ4X2luaXRfaW5kX3dyKGJwLCBkc3RfYWRkciwgZGF0YSwgbGVuMzIpOworCQlyZXR1cm47CisJfQorCisJbXV0ZXhfbG9jaygmYnAtPmRtYWVfbXV0ZXgpOworCisJbWVtc2V0KGRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7CisKKwlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAorCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkJKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisJZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oZG1hX2FkZHIpOworCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGRtYV9hZGRyKTsKKwlkbWFlLT5kc3RfYWRkcl9sbyA9IGRzdF9hZGRyID4+IDI7CisJZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOworCWRtYWUtPmxlbiA9IGxlbjMyOworCWRtYWUtPmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CisJZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKKwlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CisKKwlEUChCTlgyWF9NU0dfT0ZGLCAiZG1hZTogb3Bjb2RlIDB4JTA4eFxuIgorCSAgIERQX0xFVkVMICJzcmNfYWRkciAgWyV4OiUwOHhdICBsZW4gWyVkICo0XSAgIgorCQkgICAgImRzdF9hZGRyIFsleDolMDh4ICglMDh4KV1cbiIKKwkgICBEUF9MRVZFTCAiY29tcF9hZGRyIFsleDolMDh4XSAgY29tcF92YWwgMHglMDh4XG4iLAorCSAgIGRtYWUtPm9wY29kZSwgZG1hZS0+c3JjX2FkZHJfaGksIGRtYWUtPnNyY19hZGRyX2xvLAorCSAgIGRtYWUtPmxlbiwgZG1hZS0+ZHN0X2FkZHJfaGksIGRtYWUtPmRzdF9hZGRyX2xvLCBkc3RfYWRkciwKKwkgICBkbWFlLT5jb21wX2FkZHJfaGksIGRtYWUtPmNvbXBfYWRkcl9sbywgZG1hZS0+Y29tcF92YWwpOworCURQKEJOWDJYX01TR19PRkYsICJkYXRhIFsweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhdXG4iLAorCSAgIGJwLT5zbG93cGF0aC0+d2JfZGF0YVswXSwgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzFdLAorCSAgIGJwLT5zbG93cGF0aC0+d2JfZGF0YVsyXSwgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzNdKTsKKworCSp3Yl9jb21wID0gMDsKKworCWJueDJ4X3Bvc3RfZG1hZShicCwgZG1hZSwgSU5JVF9ETUFFX0MoYnApKTsKKworCXVkZWxheSg1KTsKKworCXdoaWxlICgqd2JfY29tcCAhPSBETUFFX0NPTVBfVkFMKSB7CisJCURQKEJOWDJYX01TR19PRkYsICJ3Yl9jb21wIDB4JTA4eFxuIiwgKndiX2NvbXApOworCisJCS8qIGFkanVzdCBkZWxheSBmb3IgZW11bGF0aW9uL0ZQR0EgKi8KKwkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQorCQkJbXNsZWVwKDEwMCk7CisJCWVsc2UKKwkJCXVkZWxheSg1KTsKKworCQlpZiAoIWNudCkgeworCQkJQk5YMlhfRVJSKCJkbWFlIHRpbWVvdXQhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWNudC0tOworCX0KKworCW11dGV4X3VubG9jaygmYnAtPmRtYWVfbXV0ZXgpOworfQorCit2b2lkIGJueDJ4X3JlYWRfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc3JjX2FkZHIsIHUzMiBsZW4zMikKK3sKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlID0gJmJwLT5pbml0X2RtYWU7CisJdTMyICp3Yl9jb21wID0gYm54Mnhfc3AoYnAsIHdiX2NvbXApOworCWludCBjbnQgPSAyMDA7CisKKwlpZiAoIWJwLT5kbWFlX3JlYWR5KSB7CisJCXUzMiAqZGF0YSA9IGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKTsKKwkJaW50IGk7CisKKwkJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUUgaXMgbm90IHJlYWR5IChzcmNfYWRkciAlMDh4ICBsZW4zMiAlZCkiCisJCSAgICIgIHVzaW5nIGluZGlyZWN0XG4iLCBzcmNfYWRkciwgbGVuMzIpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuMzI7IGkrKykKKwkJCWRhdGFbaV0gPSBibngyeF9yZWdfcmRfaW5kKGJwLCBzcmNfYWRkciArIGkqNCk7CisJCXJldHVybjsKKwl9CisKKwltdXRleF9sb2NrKCZicC0+ZG1hZV9tdXRleCk7CisKKwltZW1zZXQoYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pLCAwLCBzaXplb2YodTMyKSAqIDQpOworCW1lbXNldChkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOworCisJZG1hZS0+b3Bjb2RlID0gKERNQUVfQ01EX1NSQ19HUkMgfCBETUFFX0NNRF9EU1RfUENJIHwKKwkJCURNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJCURNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKyNlbHNlCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CisjZW5kaWYKKwkJCShCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAorCQkJKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCWRtYWUtPnNyY19hZGRyX2xvID0gc3JjX2FkZHIgPj4gMjsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfZGF0YSkpOworCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2RhdGEpKTsKKwlkbWFlLT5sZW4gPSBsZW4zMjsKKwlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOworCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CisJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCisJRFAoQk5YMlhfTVNHX09GRiwgImRtYWU6IG9wY29kZSAweCUwOHhcbiIKKwkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKKwkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCisJICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKKwkgICBkbWFlLT5vcGNvZGUsIGRtYWUtPnNyY19hZGRyX2hpLCBkbWFlLT5zcmNfYWRkcl9sbywKKwkgICBkbWFlLT5sZW4sIGRtYWUtPmRzdF9hZGRyX2hpLCBkbWFlLT5kc3RfYWRkcl9sbywgc3JjX2FkZHIsCisJICAgZG1hZS0+Y29tcF9hZGRyX2hpLCBkbWFlLT5jb21wX2FkZHJfbG8sIGRtYWUtPmNvbXBfdmFsKTsKKworCSp3Yl9jb21wID0gMDsKKworCWJueDJ4X3Bvc3RfZG1hZShicCwgZG1hZSwgSU5JVF9ETUFFX0MoYnApKTsKKworCXVkZWxheSg1KTsKKworCXdoaWxlICgqd2JfY29tcCAhPSBETUFFX0NPTVBfVkFMKSB7CisKKwkJLyogYWRqdXN0IGRlbGF5IGZvciBlbXVsYXRpb24vRlBHQSAqLworCQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCisJCQltc2xlZXAoMTAwKTsKKwkJZWxzZQorCQkJdWRlbGF5KDUpOworCisJCWlmICghY250KSB7CisJCQlCTlgyWF9FUlIoImRtYWUgdGltZW91dCFcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJY250LS07CisJfQorCURQKEJOWDJYX01TR19PRkYsICJkYXRhIFsweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhdXG4iLAorCSAgIGJwLT5zbG93cGF0aC0+d2JfZGF0YVswXSwgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzFdLAorCSAgIGJwLT5zbG93cGF0aC0+d2JfZGF0YVsyXSwgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzNdKTsKKworCW11dGV4X3VubG9jaygmYnAtPmRtYWVfbXV0ZXgpOworfQorCisvKiB1c2VkIG9ubHkgZm9yIHNsb3dwYXRoIHNvIG5vdCBpbmxpbmVkICovCitzdGF0aWMgdm9pZCBibngyeF93Yl93cihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgcmVnLCB1MzIgdmFsX2hpLCB1MzIgdmFsX2xvKQoreworCXUzMiB3Yl93cml0ZVsyXTsKKworCXdiX3dyaXRlWzBdID0gdmFsX2hpOworCXdiX3dyaXRlWzFdID0gdmFsX2xvOworCVJFR19XUl9ETUFFKGJwLCByZWcsIHdiX3dyaXRlLCAyKTsKK30KKworI2lmZGVmIFVTRV9XQl9SRAorc3RhdGljIHU2NCBibngyeF93Yl9yZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgcmVnKQoreworCXUzMiB3Yl9kYXRhWzJdOworCisJUkVHX1JEX0RNQUUoYnAsIHJlZywgd2JfZGF0YSwgMik7CisKKwlyZXR1cm4gSElMT19VNjQod2JfZGF0YVswXSwgd2JfZGF0YVsxXSk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBibngyeF9tY19hc3NlcnQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwljaGFyIGxhc3RfaWR4OworCWludCBpLCByYyA9IDA7CisJdTMyIHJvdzAsIHJvdzEsIHJvdzIsIHJvdzM7CisKKwkvKiBYU1RPUk0gKi8KKwlsYXN0X2lkeCA9IFJFR19SRDgoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICBYU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUKTsKKwlpZiAobGFzdF9pZHgpCisJCUJOWDJYX0VSUigiWFNUT1JNX0FTU0VSVF9MSVNUX0lOREVYIDB4JXhcbiIsIGxhc3RfaWR4KTsKKworCS8qIHByaW50IHRoZSBhc3NlcnRzICovCisJZm9yIChpID0gMDsgaSA8IFNUUk9NX0FTU0VSVF9BUlJBWV9TSVpFOyBpKyspIHsKKworCQlyb3cwID0gUkVHX1JEKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJICAgICAgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSk7CisJCXJvdzEgPSBSRUdfUkQoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgNCk7CisJCXJvdzIgPSBSRUdfUkQoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgOCk7CisJCXJvdzMgPSBSRUdfUkQoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgMTIpOworCisJCWlmIChyb3cwICE9IENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFKSB7CisJCQlCTlgyWF9FUlIoIlhTVE9STV9BU1NFUlRfSU5ERVggMHgleCA9IDB4JTA4eCIKKwkJCQkgICIgMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCisJCQkJICBpLCByb3czLCByb3cyLCByb3cxLCByb3cwKTsKKwkJCXJjKys7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFRTVE9STSAqLworCWxhc3RfaWR4ID0gUkVHX1JEOChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSAgIFRTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQpOworCWlmIChsYXN0X2lkeCkKKwkJQk5YMlhfRVJSKCJUU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVggMHgleFxuIiwgbGFzdF9pZHgpOworCisJLyogcHJpbnQgdGhlIGFzc2VydHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU1RST01fQVNTRVJUX0FSUkFZX1NJWkU7IGkrKykgeworCisJCXJvdzAgPSBSRUdfUkQoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBUU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpKTsKKwkJcm93MSA9IFJFR19SRChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkgKyA0KTsKKwkJcm93MiA9IFJFR19SRChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkgKyA4KTsKKwkJcm93MyA9IFJFR19SRChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkgKyAxMik7CisKKwkJaWYgKHJvdzAgIT0gQ09NTU9OX0FTTV9JTlZBTElEX0FTU0VSVF9PUENPREUpIHsKKwkJCUJOWDJYX0VSUigiVFNUT1JNX0FTU0VSVF9JTkRFWCAweCV4ID0gMHglMDh4IgorCQkJCSAgIiAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKKwkJCQkgIGksIHJvdzMsIHJvdzIsIHJvdzEsIHJvdzApOworCQkJcmMrKzsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogQ1NUT1JNICovCisJbGFzdF9pZHggPSBSRUdfUkQ4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJICAgQ1NUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCk7CisJaWYgKGxhc3RfaWR4KQorCQlCTlgyWF9FUlIoIkNTVE9STV9BU1NFUlRfTElTVF9JTkRFWCAweCV4XG4iLCBsYXN0X2lkeCk7CisKKwkvKiBwcmludCB0aGUgYXNzZXJ0cyAqLworCWZvciAoaSA9IDA7IGkgPCBTVFJPTV9BU1NFUlRfQVJSQVlfU0laRTsgaSsrKSB7CisKKwkJcm93MCA9IFJFR19SRChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgIENTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaSkpOworCQlyb3cxID0gUkVHX1JEKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJICAgICAgQ1NUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDQpOworCQlyb3cyID0gUkVHX1JEKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJICAgICAgQ1NUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDgpOworCQlyb3czID0gUkVHX1JEKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJICAgICAgQ1NUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSArIDEyKTsKKworCQlpZiAocm93MCAhPSBDT01NT05fQVNNX0lOVkFMSURfQVNTRVJUX09QQ09ERSkgeworCQkJQk5YMlhfRVJSKCJDU1RPUk1fQVNTRVJUX0lOREVYIDB4JXggPSAweCUwOHgiCisJCQkJICAiIDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAorCQkJCSAgaSwgcm93Mywgcm93Miwgcm93MSwgcm93MCk7CisJCQlyYysrOworCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBVU1RPUk0gKi8KKwlsYXN0X2lkeCA9IFJFR19SRDgoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICBVU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUKTsKKwlpZiAobGFzdF9pZHgpCisJCUJOWDJYX0VSUigiVVNUT1JNX0FTU0VSVF9MSVNUX0lOREVYIDB4JXhcbiIsIGxhc3RfaWR4KTsKKworCS8qIHByaW50IHRoZSBhc3NlcnRzICovCisJZm9yIChpID0gMDsgaSA8IFNUUk9NX0FTU0VSVF9BUlJBWV9TSVpFOyBpKyspIHsKKworCQlyb3cwID0gUkVHX1JEKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkJICAgICAgVVNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpKSk7CisJCXJvdzEgPSBSRUdfUkQoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBVU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgNCk7CisJCXJvdzIgPSBSRUdfUkQoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBVU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgOCk7CisJCXJvdzMgPSBSRUdfUkQoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICAgICBVU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGkpICsgMTIpOworCisJCWlmIChyb3cwICE9IENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFKSB7CisJCQlCTlgyWF9FUlIoIlVTVE9STV9BU1NFUlRfSU5ERVggMHgleCA9IDB4JTA4eCIKKwkJCQkgICIgMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCisJCQkJICBpLCByb3czLCByb3cyLCByb3cxLCByb3cwKTsKKwkJCXJjKys7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZndfZHVtcChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiBtYXJrLCBvZmZzZXQ7CisJdTMyIGRhdGFbOV07CisJaW50IHdvcmQ7CisKKwltYXJrID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfU0NSQVRDSCArIDB4ZjEwNCk7CisJbWFyayA9ICgobWFyayArIDB4MykgJiB+MHgzKTsKKwlwcmludGsoS0VSTl9FUlIgUEZYICJiZWdpbiBmdyBkdW1wIChtYXJrIDB4JXgpXG4iIEtFUk5fRVJSLCBtYXJrKTsKKworCWZvciAob2Zmc2V0ID0gbWFyayAtIDB4MDgwMDAwMDA7IG9mZnNldCA8PSAweEY5MDA7IG9mZnNldCArPSAweDgqNCkgeworCQlmb3IgKHdvcmQgPSAwOyB3b3JkIDwgODsgd29yZCsrKQorCQkJZGF0YVt3b3JkXSA9IGh0b25sKFJFR19SRChicCwgTUNQX1JFR19NQ1BSX1NDUkFUQ0ggKworCQkJCQkJICBvZmZzZXQgKyA0KndvcmQpKTsKKwkJZGF0YVs4XSA9IDB4MDsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCAoY2hhciAqKWRhdGEpOworCX0KKwlmb3IgKG9mZnNldCA9IDB4RjEwODsgb2Zmc2V0IDw9IG1hcmsgLSAweDA4MDAwMDAwOyBvZmZzZXQgKz0gMHg4KjQpIHsKKwkJZm9yICh3b3JkID0gMDsgd29yZCA8IDg7IHdvcmQrKykKKwkJCWRhdGFbd29yZF0gPSBodG9ubChSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9TQ1JBVENIICsKKwkJCQkJCSAgb2Zmc2V0ICsgNCp3b3JkKSk7CisJCWRhdGFbOF0gPSAweDA7CisJCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgKGNoYXIgKilkYXRhKTsKKwl9CisJcHJpbnRrKCJcbiIgS0VSTl9FUlIgUEZYICJlbmQgb2YgZncgZHVtcFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3BhbmljX2R1bXAoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaTsKKwl1MTYgaiwgc3RhcnQsIGVuZDsKKworCUJOWDJYX0VSUigiYmVnaW4gY3Jhc2ggZHVtcCAtLS0tLS0tLS0tLS0tLS0tLVxuIik7CisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKwkJc3RydWN0IGV0aF90eF9kYl9kYXRhICpod19wcm9kcyA9IGZwLT5od190eF9wcm9kczsKKworCQlCTlgyWF9FUlIoInF1ZXVlWyVkXTogdHhfcGt0X3Byb2QoJXgpICB0eF9wa3RfY29ucygleCkiCisJCQkgICIgIHR4X2JkX3Byb2QoJXgpICB0eF9iZF9jb25zKCV4KSAgKnR4X2NvbnNfc2IoJXgpXG4iLAorCQkJICBpLCBmcC0+dHhfcGt0X3Byb2QsIGZwLT50eF9wa3RfY29ucywgZnAtPnR4X2JkX3Byb2QsCisJCQkgIGZwLT50eF9iZF9jb25zLCBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpKTsKKwkJQk5YMlhfRVJSKCIgICAgICAgICAgcnhfY29tcF9wcm9kKCV4KSAgcnhfY29tcF9jb25zKCV4KSIKKwkJCSAgIiAgKnJ4X2NvbnNfc2IoJXgpICAqcnhfYmRfY29uc19zYigleCkiCisJCQkgICIgIHJ4X3NnZV9wcm9kKCV4KSAgbGFzdF9tYXhfc2dlKCV4KVxuIiwKKwkJCSAgZnAtPnJ4X2NvbXBfcHJvZCwgZnAtPnJ4X2NvbXBfY29ucywKKwkJCSAgbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSwKKwkJCSAgbGUxNl90b19jcHUoKmZwLT5yeF9iZF9jb25zX3NiKSwKKwkJCSAgZnAtPnJ4X3NnZV9wcm9kLCBmcC0+bGFzdF9tYXhfc2dlKTsKKwkJQk5YMlhfRVJSKCIgICAgICAgICAgZnBfY19pZHgoJXgpICBmcF91X2lkeCgleCkiCisJCQkgICIgIGJkIGRhdGEoJXgsJXgpICByeF9hbGxvY19mYWlsZWQoJWx4KVxuIiwKKwkJCSAgZnAtPmZwX2NfaWR4LCBmcC0+ZnBfdV9pZHgsIGh3X3Byb2RzLT5wYWNrZXRzX3Byb2QsCisJCQkgIGh3X3Byb2RzLT5iZHNfcHJvZCwgZnAtPnJ4X2FsbG9jX2ZhaWxlZCk7CisKKwkJc3RhcnQgPSBUWF9CRChsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpIC0gMTApOworCQllbmQgPSBUWF9CRChsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpICsgMjQ1KTsKKwkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgeworCQkJc3RydWN0IHN3X3R4X2JkICpzd19iZCA9ICZmcC0+dHhfYnVmX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigicGFja2V0WyV4XT1bJXAsJXhdXG4iLCBqLAorCQkJCSAgc3dfYmQtPnNrYiwgc3dfYmQtPmZpcnN0X2JkKTsKKwkJfQorCisJCXN0YXJ0ID0gVFhfQkQoZnAtPnR4X2JkX2NvbnMgLSAxMCk7CisJCWVuZCA9IFRYX0JEKGZwLT50eF9iZF9jb25zICsgMjU0KTsKKwkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgeworCQkJdTMyICp0eF9iZCA9ICh1MzIgKikmZnAtPnR4X2Rlc2NfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJ0eF9iZFsleF09WyV4OiV4OiV4OiV4XVxuIiwKKwkJCQkgIGosIHR4X2JkWzBdLCB0eF9iZFsxXSwgdHhfYmRbMl0sIHR4X2JkWzNdKTsKKwkJfQorCisJCXN0YXJ0ID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSAtIDEwKTsKKwkJZW5kID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSArIDUwMyk7CisJCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKKwkJCXUzMiAqcnhfYmQgPSAodTMyICopJmZwLT5yeF9kZXNjX3Jpbmdbal07CisJCQlzdHJ1Y3Qgc3dfcnhfYmQgKnN3X2JkID0gJmZwLT5yeF9idWZfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJyeF9iZFsleF09WyV4OiV4XSAgc3dfYmQ9WyVwXVxuIiwKKwkJCQkgIGosIHJ4X2JkWzFdLCByeF9iZFswXSwgc3dfYmQtPnNrYik7CisJCX0KKworCQlzdGFydCA9IDA7CisJCWVuZCA9IFJYX1NHRV9DTlQqTlVNX1JYX1NHRV9QQUdFUzsKKwkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgeworCQkJdTMyICpyeF9zZ2UgPSAodTMyICopJmZwLT5yeF9zZ2VfcmluZ1tqXTsKKwkJCXN0cnVjdCBzd19yeF9wYWdlICpzd19wYWdlID0gJmZwLT5yeF9wYWdlX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigicnhfc2dlWyV4XT1bJXg6JXhdICBzd19wYWdlPVslcF1cbiIsCisJCQkJICBqLCByeF9zZ2VbMV0sIHJ4X3NnZVswXSwgc3dfcGFnZS0+cGFnZSk7CisJCX0KKworCQlzdGFydCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zIC0gMTApOworCQllbmQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyArIDUwMyk7CisJCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKKwkJCXUzMiAqY3FlID0gKHUzMiAqKSZmcC0+cnhfY29tcF9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImNxZVsleF09WyV4OiV4OiV4OiV4XVxuIiwKKwkJCQkgIGosIGNxZVswXSwgY3FlWzFdLCBjcWVbMl0sIGNxZVszXSk7CisJCX0KKwl9CisKKwlCTlgyWF9FUlIoImRlZl9jX2lkeCgldSkgIGRlZl91X2lkeCgldSkgIGRlZl94X2lkeCgldSkiCisJCSAgIiAgZGVmX3RfaWR4KCV1KSAgZGVmX2F0dF9pZHgoJXUpICBhdHRuX3N0YXRlKCV1KSIKKwkJICAiICBzcHFfcHJvZF9pZHgoJXUpXG4iLAorCQkgIGJwLT5kZWZfY19pZHgsIGJwLT5kZWZfdV9pZHgsIGJwLT5kZWZfeF9pZHgsIGJwLT5kZWZfdF9pZHgsCisJCSAgYnAtPmRlZl9hdHRfaWR4LCBicC0+YXR0bl9zdGF0ZSwgYnAtPnNwcV9wcm9kX2lkeCk7CisKKwlibngyeF9md19kdW1wKGJwKTsKKwlibngyeF9tY19hc3NlcnQoYnApOworCUJOWDJYX0VSUigiZW5kIGNyYXNoIGR1bXAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCisJYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRUQ7CisJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHNfc3RhdGUgLSBESVNBQkxFRFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2ludF9lbmFibGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCXUzMiBhZGRyID0gcG9ydCA/IEhDX1JFR19DT05GSUdfMSA6IEhDX1JFR19DT05GSUdfMDsKKwl1MzIgdmFsID0gUkVHX1JEKGJwLCBhZGRyKTsKKwlpbnQgbXNpeCA9IChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpID8gMSA6IDA7CisKKwlpZiAobXNpeCkgeworCQl2YWwgJj0gfkhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzA7CisJCXZhbCB8PSAoSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKKwkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKKwl9IGVsc2UgeworCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgfAorCQkJSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKKwkJCUhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wIHwKKwkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKKworCQlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpICBNU0ktWCAlZFxuIiwKKwkJICAgdmFsLCBwb3J0LCBhZGRyLCBtc2l4KTsKKworCQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CisKKwkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzA7CisJfQorCisJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgTVNJLVggJWRcbiIsCisJICAgdmFsLCBwb3J0LCBhZGRyLCBtc2l4KTsKKworCVJFR19XUihicCwgYWRkciwgdmFsKTsKKworCWlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJLyogaW5pdCBsZWFkaW5nL3RyYWlsaW5nIGVkZ2UgKi8KKwkJaWYgKElTX0UxSE1GKGJwKSkgeworCQkJdmFsID0gKDB4ZmUwZiB8ICgxIDw8IChCUF9FMUhWTihicCkgKyA0KSkpOworCQkJaWYgKGJwLT5wb3J0LnBtZikKKwkJCQkvKiBlbmFibGUgbmlnIGF0dGVudGlvbiAqLworCQkJCXZhbCB8PSAweDAxMDA7CisJCX0gZWxzZQorCQkJdmFsID0gMHhmZmZmOworCisJCVJFR19XUihicCwgSENfUkVHX1RSQUlMSU5HX0VER0VfMCArIHBvcnQqOCwgdmFsKTsKKwkJUkVHX1dSKGJwLCBIQ19SRUdfTEVBRElOR19FREdFXzAgKyBwb3J0KjgsIHZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9pbnRfZGlzYWJsZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJdTMyIGFkZHIgPSBwb3J0ID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wOworCXUzMiB2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOworCisJdmFsICY9IH4oSENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMCB8CisJCSBIQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzAgfAorCQkgSENfQ09ORklHXzBfUkVHX0lOVF9MSU5FX0VOXzAgfAorCQkgSENfQ09ORklHXzBfUkVHX0FUVE5fQklUX0VOXzApOworCisJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KVxuIiwKKwkgICB2YWwsIHBvcnQsIGFkZHIpOworCisJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOworCWlmIChSRUdfUkQoYnAsIGFkZHIpICE9IHZhbCkKKwkJQk5YMlhfRVJSKCJCVUchIHByb3BlciB2YWwgbm90IHJlYWQgZnJvbSBJR1UhXG4iKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfaW50X2Rpc2FibGVfc3luYyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBtc2l4ID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgPyAxIDogMDsKKwlpbnQgaTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0IGhhbmRsaW5nICovCisJYXRvbWljX2luYygmYnAtPmludHJfc2VtKTsKKwkvKiBwcmV2ZW50IHRoZSBIVyBmcm9tIHNlbmRpbmcgaW50ZXJydXB0cyAqLworCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKKworCS8qIG1ha2Ugc3VyZSBhbGwgSVNScyBhcmUgZG9uZSAqLworCWlmIChtc2l4KSB7CisJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2ldLnZlY3Rvcik7CisKKwkJLyogb25lIG1vcmUgZm9yIHRoZSBTbG93IFBhdGggSVJRICovCisJCXN5bmNocm9uaXplX2lycShicC0+bXNpeF90YWJsZVtpXS52ZWN0b3IpOworCX0gZWxzZQorCQlzeW5jaHJvbml6ZV9pcnEoYnAtPnBkZXYtPmlycSk7CisKKwkvKiBtYWtlIHN1cmUgc3BfdGFzayBpcyBub3QgcnVubmluZyAqLworCWNhbmNlbF93b3JrX3N5bmMoJmJwLT5zcF90YXNrKTsKK30KKworLyogZmFzdCBwYXRoICovCisKKy8qCisgKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2Fja19zYihzdHJ1Y3QgYm54MnggKmJwLCB1OCBzYl9pZCwKKwkJCQl1OCBzdG9ybSwgdTE2IGluZGV4LCB1OCBvcCwgdTggdXBkYXRlKQoreworCXUzMiBpZ3VfYWRkciA9IChJR1VfQUREUl9JTlRfQUNLICsgSUdVX0ZVTkNfQkFTRSAqIEJQX0ZVTkMoYnApKSAqIDg7CisJc3RydWN0IGlndV9hY2tfcmVnaXN0ZXIgaWd1X2FjazsKKworCWlndV9hY2suc3RhdHVzX2Jsb2NrX2luZGV4ID0gaW5kZXg7CisJaWd1X2Fjay5zYl9pZF9hbmRfZmxhZ3MgPQorCQkJKChzYl9pZCA8PCBJR1VfQUNLX1JFR0lTVEVSX1NUQVRVU19CTE9DS19JRF9TSElGVCkgfAorCQkJIChzdG9ybSA8PCBJR1VfQUNLX1JFR0lTVEVSX1NUT1JNX0lEX1NISUZUKSB8CisJCQkgKHVwZGF0ZSA8PCBJR1VfQUNLX1JFR0lTVEVSX1VQREFURV9JTkRFWF9TSElGVCkgfAorCQkJIChvcCA8PCBJR1VfQUNLX1JFR0lTVEVSX0lOVEVSUlVQVF9NT0RFX1NISUZUKSk7CisKKwlEUChCTlgyWF9NU0dfT0ZGLCAid3JpdGUgMHglMDh4IHRvIElHVSBhZGRyIDB4JXhcbiIsCisJICAgKCoodTMyICopJmlndV9hY2spLCBCQVJfSUdVX0lOVE1FTSArIGlndV9hZGRyKTsKKwlSRUdfV1IoYnAsIEJBUl9JR1VfSU5UTUVNICsgaWd1X2FkZHIsICgqKHUzMiAqKSZpZ3VfYWNrKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGJueDJ4X3VwZGF0ZV9mcHNiX2lkeChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCXN0cnVjdCBob3N0X3N0YXR1c19ibG9jayAqZnBzYiA9IGZwLT5zdGF0dXNfYmxrOworCXUxNiByYyA9IDA7CisKKwliYXJyaWVyKCk7IC8qIHN0YXR1cyBibG9jayBpcyB3cml0dGVuIHRvIGJ5IHRoZSBjaGlwICovCisJaWYgKGZwLT5mcF9jX2lkeCAhPSBmcHNiLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpIHsKKwkJZnAtPmZwX2NfaWR4ID0gZnBzYi0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4OworCQlyYyB8PSAxOworCX0KKwlpZiAoZnAtPmZwX3VfaWR4ICE9IGZwc2ItPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCkgeworCQlmcC0+ZnBfdV9pZHggPSBmcHNiLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXg7CisJCXJjIHw9IDI7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgYm54MnhfaGFzX3dvcmsoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKK3sKKwl1MTYgcnhfY29uc19zYiA9IGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYik7CisKKwlpZiAoKHJ4X2NvbnNfc2IgJiBNQVhfUkNRX0RFU0NfQ05UKSA9PSBNQVhfUkNRX0RFU0NfQ05UKQorCQlyeF9jb25zX3NiKys7CisKKwlpZiAoKGZwLT5yeF9jb21wX2NvbnMgIT0gcnhfY29uc19zYikgfHwKKwkgICAgKGZwLT50eF9wa3RfcHJvZCAhPSBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpKSB8fAorCSAgICAoZnAtPnR4X3BrdF9wcm9kICE9IGZwLT50eF9wa3RfY29ucykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MTYgYm54MnhfYWNrX2ludChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiBpZ3VfYWRkciA9IChJR1VfQUREUl9TSU1EX01BU0sgKyBJR1VfRlVOQ19CQVNFICogQlBfRlVOQyhicCkpICogODsKKwl1MzIgcmVzdWx0ID0gUkVHX1JEKGJwLCBCQVJfSUdVX0lOVE1FTSArIGlndV9hZGRyKTsKKworCURQKEJOWDJYX01TR19PRkYsICJyZWFkIDB4JTA4eCBmcm9tIElHVSBhZGRyIDB4JXhcbiIsCisJICAgcmVzdWx0LCBCQVJfSUdVX0lOVE1FTSArIGlndV9hZGRyKTsKKworI2lmZGVmIElHVV9ERUJVRworI3dhcm5pbmcgSUdVX0RFQlVHIGFjdGl2ZQorCWlmIChyZXN1bHQgPT0gMCkgeworCQlCTlgyWF9FUlIoInJlYWQgJXggZnJvbSBJR1VcbiIsIHJlc3VsdCk7CisJCVJFR19XUihicCwgVE1fUkVHX1RJTUVSX1NPRlRfUlNULCAwKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qCisgKiBmYXN0IHBhdGggc2VydmljZSBmdW5jdGlvbnMKKyAqLworCisvKiBmcmVlIHNrYiBpbiB0aGUgcGFja2V0IHJpbmcgYXQgcG9zIGlkeAorICogcmV0dXJuIGlkeCBvZiBsYXN0IGJkIGZyZWVkCisgKi8KK3N0YXRpYyB1MTYgYm54MnhfZnJlZV90eF9wa3Qoc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKKwkJCSAgICAgdTE2IGlkeCkKK3sKKwlzdHJ1Y3Qgc3dfdHhfYmQgKnR4X2J1ZiA9ICZmcC0+dHhfYnVmX3JpbmdbaWR4XTsKKwlzdHJ1Y3QgZXRoX3R4X2JkICp0eF9iZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhfYnVmLT5za2I7CisJdTE2IGJkX2lkeCA9IFRYX0JEKHR4X2J1Zi0+Zmlyc3RfYmQpLCBuZXdfY29uczsKKwlpbnQgbmJkOworCisJRFAoQk5YMlhfTVNHX09GRiwgInBrdF9pZHggJWQgIGJ1ZmYgQCglcCktPnNrYiAlcFxuIiwKKwkgICBpZHgsIHR4X2J1Ziwgc2tiKTsKKworCS8qIHVubWFwIGZpcnN0IGJkICovCisJRFAoQk5YMlhfTVNHX09GRiwgImZyZWUgYmRfaWR4ICVkXG4iLCBiZF9pZHgpOworCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfaWR4XTsKKwlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBCRF9VTk1BUF9BRERSKHR4X2JkKSwKKwkJCSBCRF9VTk1BUF9MRU4odHhfYmQpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCW5iZCA9IGxlMTZfdG9fY3B1KHR4X2JkLT5uYmQpIC0gMTsKKwluZXdfY29ucyA9IG5iZCArIHR4X2J1Zi0+Zmlyc3RfYmQ7CisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCWlmIChuYmQgPiAoTUFYX1NLQl9GUkFHUyArIDIpKSB7CisJCUJOWDJYX0VSUigiQkFEIG5iZCFcbiIpOworCQlibngyeF9wYW5pYygpOworCX0KKyNlbmRpZgorCisJLyogU2tpcCBhIHBhcnNlIGJkIGFuZCB0aGUgVFNPIHNwbGl0IGhlYWRlciBiZAorCSAgIHNpbmNlIHRoZXkgaGF2ZSBubyBtYXBwaW5nICovCisJaWYgKG5iZCkKKwkJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7CisKKwlpZiAodHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkICYgKEVUSF9UWF9CRF9GTEFHU19JUF9DU1VNIHwKKwkJCQkJICAgRVRIX1RYX0JEX0ZMQUdTX1RDUF9DU1VNIHwKKwkJCQkJICAgRVRIX1RYX0JEX0ZMQUdTX1NXX0xTTykpIHsKKwkJaWYgKC0tbmJkKQorCQkJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7CisJCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfaWR4XTsKKwkJLyogaXMgdGhpcyBhIFRTTyBzcGxpdCBoZWFkZXIgYmQ/ICovCisJCWlmICh0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgJiBFVEhfVFhfQkRfRkxBR1NfU1dfTFNPKSB7CisJCQlpZiAoLS1uYmQpCisJCQkJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7CisJCX0KKwl9CisKKwkvKiBub3cgZnJlZSBmcmFncyAqLworCXdoaWxlIChuYmQgPiAwKSB7CisKKwkJRFAoQk5YMlhfTVNHX09GRiwgImZyZWUgZnJhZyBiZF9pZHggJWRcbiIsIGJkX2lkeCk7CisJCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfaWR4XTsKKwkJcGNpX3VubWFwX3BhZ2UoYnAtPnBkZXYsIEJEX1VOTUFQX0FERFIodHhfYmQpLAorCQkJICAgICAgIEJEX1VOTUFQX0xFTih0eF9iZCksIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlpZiAoLS1uYmQpCisJCQliZF9pZHggPSBUWF9CRChORVhUX1RYX0lEWChiZF9pZHgpKTsKKwl9CisKKwkvKiByZWxlYXNlIHNrYiAqLworCUJVR19UUkFQKHNrYik7CisJZGV2X2tmcmVlX3NrYihza2IpOworCXR4X2J1Zi0+Zmlyc3RfYmQgPSAwOworCXR4X2J1Zi0+c2tiID0gTlVMTDsKKworCXJldHVybiBuZXdfY29uczsKK30KKworc3RhdGljIGlubGluZSB1MTYgYm54MnhfdHhfYXZhaWwoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKK3sKKwlzMTYgdXNlZDsKKwl1MTYgcHJvZDsKKwl1MTYgY29uczsKKworCWJhcnJpZXIoKTsgLyogVGVsbCBjb21waWxlciB0aGF0IHByb2QgYW5kIGNvbnMgY2FuIGNoYW5nZSAqLworCXByb2QgPSBmcC0+dHhfYmRfcHJvZDsKKwljb25zID0gZnAtPnR4X2JkX2NvbnM7CisKKwkvKiBOVU1fVFhfUklOR1MgPSBudW1iZXIgb2YgIm5leHQtcGFnZSIgZW50cmllcworCSAgIEl0IHdpbGwgYmUgdXNlZCBhcyBhIHRocmVzaG9sZCAqLworCXVzZWQgPSBTVUJfUzE2KHByb2QsIGNvbnMpICsgKHMxNilOVU1fVFhfUklOR1M7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJQlVHX1RSQVAodXNlZCA+PSAwKTsKKwlCVUdfVFJBUCh1c2VkIDw9IGZwLT5icC0+dHhfcmluZ19zaXplKTsKKwlCVUdfVFJBUCgoZnAtPmJwLT50eF9yaW5nX3NpemUgLSB1c2VkKSA8PSBNQVhfVFhfQVZBSUwpOworI2VuZGlmCisKKwlyZXR1cm4gKHMxNikoZnAtPmJwLT50eF9yaW5nX3NpemUpIC0gdXNlZDsKK30KKworc3RhdGljIHZvaWQgYm54MnhfdHhfaW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIGludCB3b3JrKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7CisJdTE2IGh3X2NvbnMsIHN3X2NvbnMsIGJkX2NvbnMgPSBmcC0+dHhfYmRfY29uczsKKwlpbnQgZG9uZSA9IDA7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCisJCXJldHVybjsKKyNlbmRpZgorCisJaHdfY29ucyA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7CisJc3dfY29ucyA9IGZwLT50eF9wa3RfY29uczsKKworCXdoaWxlIChzd19jb25zICE9IGh3X2NvbnMpIHsKKwkJdTE2IHBrdF9jb25zOworCisJCXBrdF9jb25zID0gVFhfQkQoc3dfY29ucyk7CisKKwkJLyogcHJlZmV0Y2goYnAtPnR4X2J1Zl9yaW5nW3BrdF9jb25zXS5za2IpOyAqLworCisJCURQKE5FVElGX01TR19UWF9ET05FLCAiaHdfY29ucyAldSAgc3dfY29ucyAldSAgcGt0X2NvbnMgJXVcbiIsCisJCSAgIGh3X2NvbnMsIHN3X2NvbnMsIHBrdF9jb25zKTsKKworLyoJCWlmIChORVhUX1RYX0lEWChzd19jb25zKSAhPSBod19jb25zKSB7CisJCQlybWIoKTsKKwkJCXByZWZldGNoKGZwLT50eF9idWZfcmluZ1tORVhUX1RYX0lEWChzd19jb25zKV0uc2tiKTsKKwkJfQorKi8KKwkJYmRfY29ucyA9IGJueDJ4X2ZyZWVfdHhfcGt0KGJwLCBmcCwgcGt0X2NvbnMpOworCQlzd19jb25zKys7CisJCWRvbmUrKzsKKworCQlpZiAoZG9uZSA9PSB3b3JrKQorCQkJYnJlYWs7CisJfQorCisJZnAtPnR4X3BrdF9jb25zID0gc3dfY29uczsKKwlmcC0+dHhfYmRfY29ucyA9IGJkX2NvbnM7CisKKwkvKiBOZWVkIHRvIG1ha2UgdGhlIHR4X2NvbnMgdXBkYXRlIHZpc2libGUgdG8gc3RhcnRfeG1pdCgpCisJICogYmVmb3JlIGNoZWNraW5nIGZvciBuZXRpZl9xdWV1ZV9zdG9wcGVkKCkuICBXaXRob3V0IHRoZQorCSAqIG1lbW9yeSBiYXJyaWVyLCB0aGVyZSBpcyBhIHNtYWxsIHBvc3NpYmlsaXR5IHRoYXQgc3RhcnRfeG1pdCgpCisJICogd2lsbCBtaXNzIGl0IGFuZCBjYXVzZSB0aGUgcXVldWUgdG8gYmUgc3RvcHBlZCBmb3JldmVyLgorCSAqLworCXNtcF9tYigpOworCisJLyogVEJEIG5lZWQgYSB0aHJlc2g/ICovCisJaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikpKSB7CisKKwkJbmV0aWZfdHhfbG9jayhicC0+ZGV2KTsKKworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSAmJgorCQkgICAgKGJueDJ4X3R4X2F2YWlsKGZwKSA+PSBNQVhfU0tCX0ZSQUdTICsgMykpCisJCQluZXRpZl93YWtlX3F1ZXVlKGJwLT5kZXYpOworCisJCW5ldGlmX3R4X3VubG9jayhicC0+ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NwX2V2ZW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCisJCQkgICB1bmlvbiBldGhfcnhfY3FlICpycl9jcWUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKKwlpbnQgY2lkID0gU1dfQ0lEKHJyX2NxZS0+cmFtcm9kX2NxZS5jb25uX2FuZF9jbWRfZGF0YSk7CisJaW50IGNvbW1hbmQgPSBDUUVfQ01EKHJyX2NxZS0+cmFtcm9kX2NxZS5jb25uX2FuZF9jbWRfZGF0YSk7CisKKwlEUChCTlgyWF9NU0dfU1AsCisJICAgImZwICVkICBjaWQgJWQgIGdvdCByYW1yb2QgIyVkICBzdGF0ZSBpcyAleCAgdHlwZSBpcyAlZFxuIiwKKwkgICBGUF9JRFgoZnApLCBjaWQsIGNvbW1hbmQsIGJwLT5zdGF0ZSwKKwkgICBycl9jcWUtPnJhbXJvZF9jcWUucmFtcm9kX3R5cGUpOworCisJYnAtPnNwcV9sZWZ0Kys7CisKKwlpZiAoRlBfSURYKGZwKSkgeworCQlzd2l0Y2ggKGNvbW1hbmQgfCBmcC0+c3RhdGUpIHsKKwkJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQIHwKKwkJCQkJCUJOWDJYX0ZQX1NUQVRFX09QRU5JTkcpOgorCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJnb3QgTVVMVElbJWRdIHNldHVwIHJhbXJvZFxuIiwKKwkJCSAgIGNpZCk7CisJCQlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOOworCQkJYnJlYWs7CisKKwkJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCB8IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkcpOgorCQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImdvdCBNVUxUSVslZF0gaGFsdCByYW1yb2RcbiIsCisJCQkgICBjaWQpOworCQkJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVEVEOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUJOWDJYX0VSUigidW5leHBlY3RlZCBNQyByZXBseSAoJWQpICAiCisJCQkJICAiZnAtPnN0YXRlIGlzICV4XG4iLCBjb21tYW5kLCBmcC0+c3RhdGUpOworCQkJYnJlYWs7CisJCX0KKwkJbWIoKTsgLyogZm9yY2UgYm54Mnhfd2FpdF9yYW1yb2QoKSB0byBzZWUgdGhlIGNoYW5nZSAqLworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChjb21tYW5kIHwgYnAtPnN0YXRlKSB7CisJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCB8IEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfUE9SVCk6CisJCURQKE5FVElGX01TR19JRlVQLCAiZ290IHNldHVwIHJhbXJvZFxuIik7CisJCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX09QRU47CisJCWJyZWFrOworCisJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCB8IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfSEFMVCk6CisJCURQKE5FVElGX01TR19JRkRPV04sICJnb3QgaGFsdCByYW1yb2RcbiIpOworCQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0RFTEVURTsKKwkJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVEVEOworCQlicmVhazsKKworCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwgfCBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQpOgorCQlEUChORVRJRl9NU0dfSUZET1dOLCAiZ290IGRlbGV0ZSByYW1yb2QgZm9yIE1VTFRJWyVkXVxuIiwgY2lkKTsKKwkJYm54MnhfZnAoYnAsIGNpZCwgc3RhdGUpID0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEOworCQlicmVhazsKKworCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMgfCBCTlgyWF9TVEFURV9PUEVOKToKKwljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDIHwgQk5YMlhfU1RBVEVfRElBRyk6CisJCURQKE5FVElGX01TR19JRlVQLCAiZ290IHNldCBtYWMgcmFtcm9kXG4iKTsKKwkJYnAtPnNldF9tYWNfcGVuZGluZyA9IDA7CisJCWJyZWFrOworCisJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyB8IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfSEFMVCk6CisJCURQKE5FVElGX01TR19JRkRPV04sICJnb3QgKHVuKXNldCBtYWMgcmFtcm9kXG4iKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCTlgyWF9FUlIoInVuZXhwZWN0ZWQgTUMgcmVwbHkgKCVkKSAgYnAtPnN0YXRlIGlzICV4XG4iLAorCQkJICBjb21tYW5kLCBicC0+c3RhdGUpOworCQlicmVhazsKKwl9CisJbWIoKTsgLyogZm9yY2UgYm54Mnhfd2FpdF9yYW1yb2QoKSB0byBzZWUgdGhlIGNoYW5nZSAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfZnJlZV9yeF9zZ2Uoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkgICAgIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3Qgc3dfcnhfcGFnZSAqc3dfYnVmID0gJmZwLT5yeF9wYWdlX3JpbmdbaW5kZXhdOworCXN0cnVjdCBwYWdlICpwYWdlID0gc3dfYnVmLT5wYWdlOworCXN0cnVjdCBldGhfcnhfc2dlICpzZ2UgPSAmZnAtPnJ4X3NnZV9yaW5nW2luZGV4XTsKKworCS8qIFNraXAgIm5leHQgcGFnZSIgZWxlbWVudHMgKi8KKwlpZiAoIXBhZ2UpCisJCXJldHVybjsKKworCXBjaV91bm1hcF9wYWdlKGJwLT5wZGV2LCBwY2lfdW5tYXBfYWRkcihzd19idWYsIG1hcHBpbmcpLAorCQkgICAgICAgQkNNX1BBR0VfU0laRSpQQUdFU19QRVJfU0dFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCV9fZnJlZV9wYWdlcyhwYWdlLCBQQUdFU19QRVJfU0dFX1NISUZUKTsKKworCXN3X2J1Zi0+cGFnZSA9IE5VTEw7CisJc2dlLT5hZGRyX2hpID0gMDsKKwlzZ2UtPmFkZHJfbG8gPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2Uoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkJICAgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgaW50IGxhc3QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKQorCQlibngyeF9mcmVlX3J4X3NnZShicCwgZnAsIGkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBibngyeF9hbGxvY19yeF9zZ2Uoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkgICAgIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9BVE9NSUMsIFBBR0VTX1BFUl9TR0VfU0hJRlQpOworCXN0cnVjdCBzd19yeF9wYWdlICpzd19idWYgPSAmZnAtPnJ4X3BhZ2VfcmluZ1tpbmRleF07CisJc3RydWN0IGV0aF9yeF9zZ2UgKnNnZSA9ICZmcC0+cnhfc2dlX3JpbmdbaW5kZXhdOworCWRtYV9hZGRyX3QgbWFwcGluZzsKKworCWlmICh1bmxpa2VseShwYWdlID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1hcHBpbmcgPSBwY2lfbWFwX3BhZ2UoYnAtPnBkZXYsIHBhZ2UsIDAsIEJDTV9QQUdFX1NJWkUqUEFHRVNfUEVSX1NHRSwKKwkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSkpIHsKKwkJX19mcmVlX3BhZ2VzKHBhZ2UsIFBBR0VTX1BFUl9TR0VfU0hJRlQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzd19idWYtPnBhZ2UgPSBwYWdlOworCXBjaV91bm1hcF9hZGRyX3NldChzd19idWYsIG1hcHBpbmcsIG1hcHBpbmcpOworCisJc2dlLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKKwlzZ2UtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJueDJ4X2FsbG9jX3J4X3NrYihzdHJ1Y3QgYm54MnggKmJwLAorCQkJCSAgICAgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgdTE2IGluZGV4KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHN3X3J4X2JkICpyeF9idWYgPSAmZnAtPnJ4X2J1Zl9yaW5nW2luZGV4XTsKKwlzdHJ1Y3QgZXRoX3J4X2JkICpyeF9iZCA9ICZmcC0+cnhfZGVzY19yaW5nW2luZGV4XTsKKwlkbWFfYWRkcl90IG1hcHBpbmc7CisKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGJwLT5yeF9idWZfc2l6ZSk7CisJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwgYnAtPnJ4X2J1Zl91c2Vfc2l6ZSwKKwkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykpKSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcnhfYnVmLT5za2IgPSBza2I7CisJcGNpX3VubWFwX2FkZHJfc2V0KHJ4X2J1ZiwgbWFwcGluZywgbWFwcGluZyk7CisKKwlyeF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7CisJcnhfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG5vdGUgdGhhdCB3ZSBhcmUgbm90IGFsbG9jYXRpbmcgYSBuZXcgc2tiLAorICogd2UgYXJlIGp1c3QgbW92aW5nIG9uZSBmcm9tIGNvbnMgdG8gcHJvZAorICogd2UgYXJlIG5vdCBjcmVhdGluZyBhIG5ldyBtYXBwaW5nLAorICogc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgZG1hX21hcHBpbmdfZXJyb3IoKS4KKyAqLworc3RhdGljIHZvaWQgYm54MnhfcmV1c2Vfcnhfc2tiKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGNvbnMsIHUxNiBwcm9kKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7CisJc3RydWN0IHN3X3J4X2JkICpjb25zX3J4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbY29uc107CisJc3RydWN0IHN3X3J4X2JkICpwcm9kX3J4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbcHJvZF07CisJc3RydWN0IGV0aF9yeF9iZCAqY29uc19iZCA9ICZmcC0+cnhfZGVzY19yaW5nW2NvbnNdOworCXN0cnVjdCBldGhfcnhfYmQgKnByb2RfYmQgPSAmZnAtPnJ4X2Rlc2NfcmluZ1twcm9kXTsKKworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+cGRldiwKKwkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoY29uc19yeF9idWYsIG1hcHBpbmcpLAorCQkJCSAgICAgICBicC0+cnhfb2Zmc2V0ICsgUlhfQ09QWV9USFJFU0gsCisJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlwcm9kX3J4X2J1Zi0+c2tiID0gY29uc19yeF9idWYtPnNrYjsKKwlwY2lfdW5tYXBfYWRkcl9zZXQocHJvZF9yeF9idWYsIG1hcHBpbmcsCisJCQkgICBwY2lfdW5tYXBfYWRkcihjb25zX3J4X2J1ZiwgbWFwcGluZykpOworCSpwcm9kX2JkID0gKmNvbnNfYmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF91cGRhdGVfbGFzdF9tYXhfc2dlKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCisJCQkJCSAgICAgdTE2IGlkeCkKK3sKKwl1MTYgbGFzdF9tYXggPSBmcC0+bGFzdF9tYXhfc2dlOworCisJaWYgKFNVQl9TMTYoaWR4LCBsYXN0X21heCkgPiAwKQorCQlmcC0+bGFzdF9tYXhfc2dlID0gaWR4OworfQorCitzdGF0aWMgdm9pZCBibngyeF9jbGVhcl9zZ2VfbWFza19uZXh0X2VsZW1zKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAxOyBpIDw9IE5VTV9SWF9TR0VfUEFHRVM7IGkrKykgeworCQlpbnQgaWR4ID0gUlhfU0dFX0NOVCAqIGkgLSAxOworCisJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKKwkJCVNHRV9NQVNLX0NMRUFSX0JJVChmcCwgaWR4KTsKKwkJCWlkeC0tOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF91cGRhdGVfc2dlX3Byb2Qoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKKwkJCQkgIHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSAqZnBfY3FlKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7CisJdTE2IHNnZV9sZW4gPSBCQ01fUEFHRV9BTElHTihsZTE2X3RvX2NwdShmcF9jcWUtPnBrdF9sZW4pIC0KKwkJCQkgICAgIGxlMTZfdG9fY3B1KGZwX2NxZS0+bGVuX29uX2JkKSkgPj4KKwkJICAgICAgQkNNX1BBR0VfU0hJRlQ7CisJdTE2IGxhc3RfbWF4LCBsYXN0X2VsZW0sIGZpcnN0X2VsZW07CisJdTE2IGRlbHRhID0gMDsKKwl1MTYgaTsKKworCWlmICghc2dlX2xlbikKKwkJcmV0dXJuOworCisJLyogRmlyc3QgbWFyayBhbGwgdXNlZCBwYWdlcyAqLworCWZvciAoaSA9IDA7IGkgPCBzZ2VfbGVuOyBpKyspCisJCVNHRV9NQVNLX0NMRUFSX0JJVChmcCwgUlhfU0dFKGxlMTZfdG9fY3B1KGZwX2NxZS0+c2dsW2ldKSkpOworCisJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgImZwX2NxZS0+c2dsWyVkXSA9ICVkXG4iLAorCSAgIHNnZV9sZW4gLSAxLCBsZTE2X3RvX2NwdShmcF9jcWUtPnNnbFtzZ2VfbGVuIC0gMV0pKTsKKworCS8qIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIGxhc3QgU0dFIGluZGV4IGlzIHRoZSBiaWdnZXN0ICovCisJcHJlZmV0Y2goKHZvaWQgKikoZnAtPnNnZV9tYXNrKSk7CisJYm54MnhfdXBkYXRlX2xhc3RfbWF4X3NnZShmcCwgbGUxNl90b19jcHUoZnBfY3FlLT5zZ2xbc2dlX2xlbiAtIDFdKSk7CisKKwlsYXN0X21heCA9IFJYX1NHRShmcC0+bGFzdF9tYXhfc2dlKTsKKwlsYXN0X2VsZW0gPSBsYXN0X21heCA+PiBSWF9TR0VfTUFTS19FTEVNX1NISUZUOworCWZpcnN0X2VsZW0gPSBSWF9TR0UoZnAtPnJ4X3NnZV9wcm9kKSA+PiBSWF9TR0VfTUFTS19FTEVNX1NISUZUOworCisJLyogSWYgcmluZyBpcyBub3QgZnVsbCAqLworCWlmIChsYXN0X2VsZW0gKyAxICE9IGZpcnN0X2VsZW0pCisJCWxhc3RfZWxlbSsrOworCisJLyogTm93IHVwZGF0ZSB0aGUgcHJvZCAqLworCWZvciAoaSA9IGZpcnN0X2VsZW07IGkgIT0gbGFzdF9lbGVtOyBpID0gTkVYVF9TR0VfTUFTS19FTEVNKGkpKSB7CisJCWlmIChsaWtlbHkoZnAtPnNnZV9tYXNrW2ldKSkKKwkJCWJyZWFrOworCisJCWZwLT5zZ2VfbWFza1tpXSA9IFJYX1NHRV9NQVNLX0VMRU1fT05FX01BU0s7CisJCWRlbHRhICs9IFJYX1NHRV9NQVNLX0VMRU1fU1o7CisJfQorCisJaWYgKGRlbHRhID4gMCkgeworCQlmcC0+cnhfc2dlX3Byb2QgKz0gZGVsdGE7CisJCS8qIGNsZWFyIHBhZ2UtZW5kIGVudHJpZXMgKi8KKwkJYm54MnhfY2xlYXJfc2dlX21hc2tfbmV4dF9lbGVtcyhmcCk7CisJfQorCisJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKKwkgICAiZnAtPmxhc3RfbWF4X3NnZSA9ICVkICBmcC0+cnhfc2dlX3Byb2QgPSAlZFxuIiwKKwkgICBmcC0+bGFzdF9tYXhfc2dlLCBmcC0+cnhfc2dlX3Byb2QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfaW5pdF9zZ2VfcmluZ19iaXRfbWFzayhzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCS8qIFNldCB0aGUgbWFzayB0byBhbGwgMS1zOiBpdCdzIGZhc3RlciB0byBjb21wYXJlIHRvIDAgdGhhbiB0byAweGYtcyAqLworCW1lbXNldChmcC0+c2dlX21hc2ssIDB4ZmYsCisJICAgICAgIChOVU1fUlhfU0dFID4+IFJYX1NHRV9NQVNLX0VMRU1fU0hJRlQpKnNpemVvZih1NjQpKTsKKworCS8qIENsZWFyIHRoZSB0d28gbGFzdCBpbmRlY2VzIGluIHRoZSBwYWdlIHRvIDE6CisJICAgdGhlc2UgYXJlIHRoZSBpbmRlY2VzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgIm5leHQiIGVsZW1lbnQsCisJICAgaGVuY2Ugd2lsbCBuZXZlciBiZSBpbmRpY2F0ZWQgYW5kIHNob3VsZCBiZSByZW1vdmVkIGZyb20KKwkgICB0aGUgY2FsY3VsYXRpb25zLiAqLworCWJueDJ4X2NsZWFyX3NnZV9tYXNrX25leHRfZWxlbXMoZnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF90cGFfc3RhcnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgdTE2IHF1ZXVlLAorCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBjb25zLCB1MTYgcHJvZCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCXN0cnVjdCBzd19yeF9iZCAqY29uc19yeF9idWYgPSAmZnAtPnJ4X2J1Zl9yaW5nW2NvbnNdOworCXN0cnVjdCBzd19yeF9iZCAqcHJvZF9yeF9idWYgPSAmZnAtPnJ4X2J1Zl9yaW5nW3Byb2RdOworCXN0cnVjdCBldGhfcnhfYmQgKnByb2RfYmQgPSAmZnAtPnJ4X2Rlc2NfcmluZ1twcm9kXTsKKwlkbWFfYWRkcl90IG1hcHBpbmc7CisKKwkvKiBtb3ZlIGVtcHR5IHNrYiBmcm9tIHBvb2wgdG8gcHJvZCBhbmQgbWFwIGl0ICovCisJcHJvZF9yeF9idWYtPnNrYiA9IGZwLT50cGFfcG9vbFtxdWV1ZV0uc2tiOworCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShicC0+cGRldiwgZnAtPnRwYV9wb29sW3F1ZXVlXS5za2ItPmRhdGEsCisJCQkJIGJwLT5yeF9idWZfdXNlX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJcGNpX3VubWFwX2FkZHJfc2V0KHByb2RfcnhfYnVmLCBtYXBwaW5nLCBtYXBwaW5nKTsKKworCS8qIG1vdmUgcGFydGlhbCBza2IgZnJvbSBjb25zIHRvIHBvb2wgKGRvbid0IHVubWFwIHlldCkgKi8KKwlmcC0+dHBhX3Bvb2xbcXVldWVdID0gKmNvbnNfcnhfYnVmOworCisJLyogbWFyayBiaW4gc3RhdGUgYXMgc3RhcnQgLSBwcmludCBlcnJvciBpZiBjdXJyZW50IHN0YXRlICE9IHN0b3AgKi8KKwlpZiAoZnAtPnRwYV9zdGF0ZVtxdWV1ZV0gIT0gQk5YMlhfVFBBX1NUT1ApCisJCUJOWDJYX0VSUigic3RhcnQgb2YgYmluIG5vdCBpbiBzdG9wIFslZF1cbiIsIHF1ZXVlKTsKKworCWZwLT50cGFfc3RhdGVbcXVldWVdID0gQk5YMlhfVFBBX1NUQVJUOworCisJLyogcG9pbnQgcHJvZF9iZCB0byBuZXcgc2tiICovCisJcHJvZF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7CisJcHJvZF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJZnAtPnRwYV9xdWV1ZV91c2VkIHw9ICgxIDw8IHF1ZXVlKTsKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgImZwLT50cGFfcXVldWVfdXNlZCA9IDB4JWx4XG4iLAorI2Vsc2UKKwlEUChORVRJRl9NU0dfUlhfU1RBVFVTLCAiZnAtPnRwYV9xdWV1ZV91c2VkID0gMHglbGx4XG4iLAorI2VuZGlmCisJICAgZnAtPnRwYV9xdWV1ZV91c2VkKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGJueDJ4X2ZpbGxfZnJhZ19za2Ioc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSAqZnBfY3FlLAorCQkJICAgICAgIHUxNiBjcWVfaWR4KQoreworCXN0cnVjdCBzd19yeF9wYWdlICpyeF9wZywgb2xkX3J4X3BnOworCXN0cnVjdCBwYWdlICpzZ2U7CisJdTE2IGxlbl9vbl9iZCA9IGxlMTZfdG9fY3B1KGZwX2NxZS0+bGVuX29uX2JkKTsKKwl1MzIgaSwgZnJhZ19sZW4sIGZyYWdfc2l6ZSwgcGFnZXM7CisJaW50IGVycjsKKwlpbnQgajsKKworCWZyYWdfc2l6ZSA9IGxlMTZfdG9fY3B1KGZwX2NxZS0+cGt0X2xlbikgLSBsZW5fb25fYmQ7CisJcGFnZXMgPSBCQ01fUEFHRV9BTElHTihmcmFnX3NpemUpID4+IEJDTV9QQUdFX1NISUZUOworCisJLyogVGhpcyBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZW5hYmxlIGZvcndhcmRpbmcgc3VwcG9ydCAqLworCWlmIChmcmFnX3NpemUpCisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSBtaW4oKHUzMilCQ01fUEFHRV9TSVpFLAorCQkJCQkgICAgICAgbWF4KGZyYWdfc2l6ZSwgKHUzMilsZW5fb25fYmQpKTsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAocGFnZXMgPiA4KlBBR0VTX1BFUl9TR0UpIHsKKwkJQk5YMlhfRVJSKCJTR0wgbGVuZ3RoIGlzIHRvbyBsb25nOiAlZC4gQ1FFIGluZGV4IGlzICVkXG4iLAorCQkJICBwYWdlcywgY3FlX2lkeCk7CisJCUJOWDJYX0VSUigiZnBfY3FlLT5wa3RfbGVuID0gJWQgIGZwX2NxZS0+bGVuX29uX2JkID0gJWRcbiIsCisJCQkgIGZwX2NxZS0+cGt0X2xlbiwgbGVuX29uX2JkKTsKKwkJYm54MnhfcGFuaWMoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorI2VuZGlmCisKKwkvKiBSdW4gdGhyb3VnaCB0aGUgU0dMIGFuZCBjb21wb3NlIHRoZSBmcmFnbWVudGVkIHNrYiAqLworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgcGFnZXM7IGkgKz0gUEFHRVNfUEVSX1NHRSwgaisrKSB7CisJCXUxNiBzZ2VfaWR4ID0gUlhfU0dFKGxlMTZfdG9fY3B1KGZwX2NxZS0+c2dsW2pdKSk7CisKKwkJLyogRlcgZ2l2ZXMgdGhlIGluZGljZXMgb2YgdGhlIFNHRSBhcyBpZiB0aGUgcmluZyBpcyBhbiBhcnJheQorCQkgICAobWVhbmluZyB0aGF0ICJuZXh0IiBlbGVtZW50IHdpbGwgY29uc3VtZSAyIGluZGljZXMpICovCisJCWZyYWdfbGVuID0gbWluKGZyYWdfc2l6ZSwgKHUzMikoQkNNX1BBR0VfU0laRSpQQUdFU19QRVJfU0dFKSk7CisJCXJ4X3BnID0gJmZwLT5yeF9wYWdlX3Jpbmdbc2dlX2lkeF07CisJCXNnZSA9IHJ4X3BnLT5wYWdlOworCQlvbGRfcnhfcGcgPSAqcnhfcGc7CisKKwkJLyogSWYgd2UgZmFpbCB0byBhbGxvY2F0ZSBhIHN1YnN0aXR1dGUgcGFnZSwgd2Ugc2ltcGx5IHN0b3AKKwkJICAgd2hlcmUgd2UgYXJlIGFuZCBkcm9wIHRoZSB3aG9sZSBwYWNrZXQgKi8KKwkJZXJyID0gYm54MnhfYWxsb2Nfcnhfc2dlKGJwLCBmcCwgc2dlX2lkeCk7CisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlmcC0+cnhfYWxsb2NfZmFpbGVkKys7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJLyogVW5tYXAgdGhlIHBhZ2UgYXMgd2UgciBnb2luZyB0byBwYXNzIGl0IHRvIHRoZSBzdGFjayAqLworCQlwY2lfdW5tYXBfcGFnZShicC0+cGRldiwgcGNpX3VubWFwX2FkZHIoJm9sZF9yeF9wZywgbWFwcGluZyksCisJCQkgICAgICBCQ01fUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJLyogQWRkIG9uZSBmcmFnIGFuZCB1cGRhdGUgdGhlIGFwcHJvcHJpYXRlIGZpZWxkcyBpbiB0aGUgc2tiICovCisJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIGosIG9sZF9yeF9wZy5wYWdlLCAwLCBmcmFnX2xlbik7CisKKwkJc2tiLT5kYXRhX2xlbiArPSBmcmFnX2xlbjsKKwkJc2tiLT50cnVlc2l6ZSArPSBmcmFnX2xlbjsKKwkJc2tiLT5sZW4gKz0gZnJhZ19sZW47CisKKwkJZnJhZ19zaXplIC09IGZyYWdfbGVuOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBibngyeF90cGFfc3RvcChzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAorCQkJICAgdTE2IHF1ZXVlLCBpbnQgcGFkLCBpbnQgbGVuLCB1bmlvbiBldGhfcnhfY3FlICpjcWUsCisJCQkgICB1MTYgY3FlX2lkeCkKK3sKKwlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICZmcC0+dHBhX3Bvb2xbcXVldWVdOworCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKKwkvKiBhbGxvYyBuZXcgc2tiICovCisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGJwLT5yeF9idWZfc2l6ZSk7CisKKwkvKiBVbm1hcCBza2IgaW4gdGhlIHBvb2wgYW55d2F5LCBhcyB3ZSBhcmUgZ29pbmcgdG8gY2hhbmdlCisJICAgcG9vbCBlbnRyeSBzdGF0dXMgdG8gQk5YMlhfVFBBX1NUT1AgZXZlbiBpZiBuZXcgc2tiIGFsbG9jYXRpb24KKwkgICBmYWlscy4gKi8KKwlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAorCQkJIGJwLT5yeF9idWZfdXNlX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkvKiBpZiBhbGxvYyBmYWlsZWQgZHJvcCB0aGUgcGFja2V0IGFuZCBrZWVwIHRoZSBidWZmZXIgaW4gdGhlIGJpbiAqLworCWlmIChsaWtlbHkobmV3X3NrYikpIHsKKworCQlwcmVmZXRjaChza2IpOworCQlwcmVmZXRjaCgoKGNoYXIgKikoc2tiKSkgKyAxMjgpOworCisJCS8qIGVsc2UgZml4IGlwIHhzdW0gYW5kIGdpdmUgaXQgdG8gdGhlIHN0YWNrICovCisJCS8qIChubyBuZWVkIHRvIG1hcCB0aGUgbmV3IHNrYikgKi8KKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJCWlmIChwYWQgKyBsZW4gPiBicC0+cnhfYnVmX3NpemUpIHsKKwkJCUJOWDJYX0VSUigic2tiX3B1dCBpcyBhYm91dCB0byBmYWlsLi4uICAiCisJCQkJICAicGFkICVkICBsZW4gJWQgIHJ4X2J1Zl9zaXplICVkXG4iLAorCQkJCSAgcGFkLCBsZW4sIGJwLT5yeF9idWZfc2l6ZSk7CisJCQlibngyeF9wYW5pYygpOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYKKworCQlza2JfcmVzZXJ2ZShza2IsIHBhZCk7CisJCXNrYl9wdXQoc2tiLCBsZW4pOworCisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGJwLT5kZXYpOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCisJCXsKKwkJCXN0cnVjdCBpcGhkciAqaXBoOworCisJCQlpcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOworCQkJaXBoLT5jaGVjayA9IDA7CisJCQlpcGgtPmNoZWNrID0gaXBfZmFzdF9jc3VtKCh1OCAqKWlwaCwgaXBoLT5paGwpOworCQl9CisKKwkJaWYgKCFibngyeF9maWxsX2ZyYWdfc2tiKGJwLCBmcCwgc2tiLAorCQkJCQkgJmNxZS0+ZmFzdF9wYXRoX2NxZSwgY3FlX2lkeCkpIHsKKyNpZmRlZiBCQ01fVkxBTgorCQkJaWYgKChicC0+dmxncnAgIT0gTlVMTCkgJiYKKwkJCSAgICAobGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpICYKKwkJCSAgICAgUEFSU0lOR19GTEFHU19WTEFOKSkKKwkJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBicC0+dmxncnAsCisJCQkJCQlsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUuCisJCQkJCQkJICAgIHZsYW5fdGFnKSk7CisJCQllbHNlCisjZW5kaWYKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQl9IGVsc2UgeworCQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgcGFnZXMiCisJCQkgICAiIC0gZHJvcHBpbmcgcGFja2V0IVxuIik7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCX0KKworCQlicC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCQkvKiBwdXQgbmV3IHNrYiBpbiBiaW4gKi8KKwkJZnAtPnRwYV9wb29sW3F1ZXVlXS5za2IgPSBuZXdfc2tiOworCisJfSBlbHNlIHsKKwkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKKwkJICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgc2tiIC0gZHJvcHBpbmcgcGFja2V0IVxuIik7CisJCWZwLT5yeF9hbGxvY19mYWlsZWQrKzsKKwl9CisKKwlmcC0+dHBhX3N0YXRlW3F1ZXVlXSA9IEJOWDJYX1RQQV9TVE9QOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfdXBkYXRlX3J4X3Byb2Qoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKKwkJCQkJdTE2IGJkX3Byb2QsIHUxNiByeF9jb21wX3Byb2QsCisJCQkJCXUxNiByeF9zZ2VfcHJvZCkKK3sKKwlzdHJ1Y3QgdHN0b3JtX2V0aF9yeF9wcm9kdWNlcnMgcnhfcHJvZHMgPSB7MH07CisJaW50IGk7CisKKwkvKiBVcGRhdGUgcHJvZHVjZXJzICovCisJcnhfcHJvZHMuYmRfcHJvZCA9IGJkX3Byb2Q7CisJcnhfcHJvZHMuY3FlX3Byb2QgPSByeF9jb21wX3Byb2Q7CisJcnhfcHJvZHMuc2dlX3Byb2QgPSByeF9zZ2VfcHJvZDsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzKS80OyBpKyspCisJCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFRTVE9STV9SWF9QUk9EU19PRkZTRVQoQlBfUE9SVChicCksIEZQX0NMX0lEKGZwKSkgKyBpKjQsCisJCSAgICAgICAoKHUzMiAqKSZyeF9wcm9kcylbaV0pOworCisJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKKwkgICAiV3JvdGU6IGJkX3Byb2QgJXUgIGNxZV9wcm9kICV1ICBzZ2VfcHJvZCAldVxuIiwKKwkgICBiZF9wcm9kLCByeF9jb21wX3Byb2QsIHJ4X3NnZV9wcm9kKTsKK30KKworc3RhdGljIGludCBibngyeF9yeF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCXUxNiBiZF9jb25zLCBiZF9wcm9kLCBiZF9wcm9kX2Z3LCBjb21wX3JpbmdfY29uczsKKwl1MTYgaHdfY29tcF9jb25zLCBzd19jb21wX2NvbnMsIHN3X2NvbXBfcHJvZDsKKwlpbnQgcnhfcGt0ID0gMDsKKwl1MTYgcXVldWU7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCisJCXJldHVybiAwOworI2VuZGlmCisKKwkvKiBDUSAibmV4dCBlbGVtZW50IiBpcyBvZiB0aGUgc2l6ZSBvZiB0aGUgcmVndWxhciBlbGVtZW50LAorCSAgIHRoYXQncyB3aHkgaXQncyBvayBoZXJlICovCisJaHdfY29tcF9jb25zID0gbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKTsKKwlpZiAoKGh3X2NvbXBfY29ucyAmIE1BWF9SQ1FfREVTQ19DTlQpID09IE1BWF9SQ1FfREVTQ19DTlQpCisJCWh3X2NvbXBfY29ucysrOworCisJYmRfY29ucyA9IGZwLT5yeF9iZF9jb25zOworCWJkX3Byb2QgPSBmcC0+cnhfYmRfcHJvZDsKKwliZF9wcm9kX2Z3ID0gYmRfcHJvZDsKKwlzd19jb21wX2NvbnMgPSBmcC0+cnhfY29tcF9jb25zOworCXN3X2NvbXBfcHJvZCA9IGZwLT5yeF9jb21wX3Byb2Q7CisKKwkvKiBNZW1vcnkgYmFycmllciBuZWNlc3NhcnkgYXMgc3BlY3VsYXRpdmUgcmVhZHMgb2YgdGhlIHJ4CisJICogYnVmZmVyIGNhbiBiZSBhaGVhZCBvZiB0aGUgaW5kZXggaW4gdGhlIHN0YXR1cyBibG9jaworCSAqLworCXJtYigpOworCisJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKKwkgICAicXVldWVbJWRdOiAgaHdfY29tcF9jb25zICV1ICBzd19jb21wX2NvbnMgJXVcbiIsCisJICAgRlBfSURYKGZwKSwgaHdfY29tcF9jb25zLCBzd19jb21wX2NvbnMpOworCisJd2hpbGUgKHN3X2NvbXBfY29ucyAhPSBod19jb21wX2NvbnMpIHsKKwkJc3RydWN0IHN3X3J4X2JkICpyeF9idWYgPSBOVUxMOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQl1bmlvbiBldGhfcnhfY3FlICpjcWU7CisJCXU4IGNxZV9mcF9mbGFnczsKKwkJdTE2IGxlbiwgcGFkOworCisJCWNvbXBfcmluZ19jb25zID0gUkNRX0JEKHN3X2NvbXBfY29ucyk7CisJCWJkX3Byb2QgPSBSWF9CRChiZF9wcm9kKTsKKwkJYmRfY29ucyA9IFJYX0JEKGJkX2NvbnMpOworCisJCWNxZSA9ICZmcC0+cnhfY29tcF9yaW5nW2NvbXBfcmluZ19jb25zXTsKKwkJY3FlX2ZwX2ZsYWdzID0gY3FlLT5mYXN0X3BhdGhfY3FlLnR5cGVfZXJyb3JfZmxhZ3M7CisKKwkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgIkNRRSB0eXBlICV4ICBlcnIgJXggIHN0YXR1cyAleCIKKwkJICAgIiAgcXVldWUgJXggIHZsYW4gJXggIGxlbiAldVxuIiwgQ1FFX1RZUEUoY3FlX2ZwX2ZsYWdzKSwKKwkJICAgY3FlX2ZwX2ZsYWdzLCBjcWUtPmZhc3RfcGF0aF9jcWUuc3RhdHVzX2ZsYWdzLAorCQkgICBjcWUtPmZhc3RfcGF0aF9jcWUucnNzX2hhc2hfcmVzdWx0LAorCQkgICBsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUudmxhbl90YWcpLAorCQkgICBsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGt0X2xlbikpOworCisJCS8qIGlzIHRoaXMgYSBzbG93cGF0aCBtc2c/ICovCisJCWlmICh1bmxpa2VseShDUUVfVFlQRShjcWVfZnBfZmxhZ3MpKSkgeworCQkJYm54Mnhfc3BfZXZlbnQoZnAsIGNxZSk7CisJCQlnb3RvIG5leHRfY3FlOworCisJCS8qIHRoaXMgaXMgYW4gcnggcGFja2V0ICovCisJCX0gZWxzZSB7CisJCQlyeF9idWYgPSAmZnAtPnJ4X2J1Zl9yaW5nW2JkX2NvbnNdOworCQkJc2tiID0gcnhfYnVmLT5za2I7CisJCQlsZW4gPSBsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGt0X2xlbik7CisJCQlwYWQgPSBjcWUtPmZhc3RfcGF0aF9jcWUucGxhY2VtZW50X29mZnNldDsKKworCQkJLyogSWYgQ1FFIGlzIG1hcmtlZCBib3RoIFRQQV9TVEFSVCBhbmQgVFBBX0VORAorCQkJICAgaXQgaXMgYSBub24tVFBBIENRRSAqLworCQkJaWYgKCghZnAtPmRpc2FibGVfdHBhKSAmJgorCQkJICAgIChUUEFfVFlQRShjcWVfZnBfZmxhZ3MpICE9CisJCQkJCShUUEFfVFlQRV9TVEFSVCB8IFRQQV9UWVBFX0VORCkpKSB7CisJCQkJcXVldWUgPSBjcWUtPmZhc3RfcGF0aF9jcWUucXVldWVfaW5kZXg7CisKKwkJCQlpZiAoVFBBX1RZUEUoY3FlX2ZwX2ZsYWdzKSA9PSBUUEFfVFlQRV9TVEFSVCkgeworCQkJCQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAorCQkJCQkgICAiY2FsbGluZyB0cGFfc3RhcnQgb24gcXVldWUgJWRcbiIsCisJCQkJCSAgIHF1ZXVlKTsKKworCQkJCQlibngyeF90cGFfc3RhcnQoZnAsIHF1ZXVlLCBza2IsCisJCQkJCQkJYmRfY29ucywgYmRfcHJvZCk7CisJCQkJCWdvdG8gbmV4dF9yeDsKKwkJCQl9CisKKwkJCQlpZiAoVFBBX1RZUEUoY3FlX2ZwX2ZsYWdzKSA9PSBUUEFfVFlQRV9FTkQpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKKwkJCQkJICAgImNhbGxpbmcgdHBhX3N0b3Agb24gcXVldWUgJWRcbiIsCisJCQkJCSAgIHF1ZXVlKTsKKworCQkJCQlpZiAoIUJOWDJYX1JYX1NVTV9GSVgoY3FlKSkKKwkJCQkJCUJOWDJYX0VSUigiU1RPUCBvbiBub25lIFRDUCAiCisJCQkJCQkJICAiZGF0YVxuIik7CisKKwkJCQkJLyogVGhpcyBpcyBhIHNpemUgb2YgdGhlIGxpbmVhciBkYXRhCisJCQkJCSAgIG9uIHRoaXMgc2tiICovCisJCQkJCWxlbiA9IGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS4KKwkJCQkJCQkJbGVuX29uX2JkKTsKKwkJCQkJYm54MnhfdHBhX3N0b3AoYnAsIGZwLCBxdWV1ZSwgcGFkLAorCQkJCQkJICAgIGxlbiwgY3FlLCBjb21wX3JpbmdfY29ucyk7CisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCQkJCQlpZiAoYnAtPnBhbmljKQorCQkJCQkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKworCQkJCQlibngyeF91cGRhdGVfc2dlX3Byb2QoZnAsCisJCQkJCQkJJmNxZS0+ZmFzdF9wYXRoX2NxZSk7CisJCQkJCWdvdG8gbmV4dF9jcWU7CisJCQkJfQorCQkJfQorCisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYnAtPnBkZXYsCisJCQkJCXBjaV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCisJCQkJCQkgICAgICAgcGFkICsgUlhfQ09QWV9USFJFU0gsCisJCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXByZWZldGNoKHNrYik7CisJCQlwcmVmZXRjaCgoKGNoYXIgKikoc2tiKSkgKyAxMjgpOworCisJCQkvKiBpcyB0aGlzIGFuIGVycm9yIHBhY2tldD8gKi8KKwkJCWlmICh1bmxpa2VseShjcWVfZnBfZmxhZ3MgJiBFVEhfUlhfRVJST1JfRkFMR1MpKSB7CisJCQkvKiBkbyB3ZSBzb21ldGltZXMgZm9yd2FyZCBlcnJvciBwYWNrZXRzIGFueXdheT8gKi8KKwkJCQlEUChORVRJRl9NU0dfUlhfRVJSLAorCQkJCSAgICJFUlJPUiAgZmxhZ3MgJXggIHJ4IHBhY2tldCAldVxuIiwKKwkJCQkgICBjcWVfZnBfZmxhZ3MsIHN3X2NvbXBfY29ucyk7CisJCQkJLyogVEJEIG1ha2Ugc3VyZSBNQyBjb3VudHMgdGhpcyBhcyBhIGRyb3AgKi8KKwkJCQlnb3RvIHJldXNlX3J4OworCQkJfQorCisJCQkvKiBTaW5jZSB3ZSBkb24ndCBoYXZlIGEganVtYm8gcmluZworCQkJICogY29weSBzbWFsbCBwYWNrZXRzIGlmIG10dSA+IDE1MDAKKwkJCSAqLworCQkJaWYgKChicC0+ZGV2LT5tdHUgPiBFVEhfTUFYX1BBQ0tFVF9TSVpFKSAmJgorCQkJICAgIChsZW4gPD0gUlhfQ09QWV9USFJFU0gpKSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CisKKwkJCQluZXdfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LAorCQkJCQkJCSAgIGxlbiArIHBhZCk7CisJCQkJaWYgKG5ld19za2IgPT0gTlVMTCkgeworCQkJCQlEUChORVRJRl9NU0dfUlhfRVJSLAorCQkJCQkgICAiRVJST1IgIHBhY2tldCBkcm9wcGVkICIKKwkJCQkJICAgImJlY2F1c2Ugb2YgYWxsb2MgZmFpbHVyZVxuIik7CisJCQkJCWZwLT5yeF9hbGxvY19mYWlsZWQrKzsKKwkJCQkJZ290byByZXVzZV9yeDsKKwkJCQl9CisKKwkJCQkvKiBhbGlnbmVkIGNvcHkgKi8KKwkJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIHBhZCwKKwkJCQkJCSAgICBuZXdfc2tiLT5kYXRhICsgcGFkLCBsZW4pOworCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIHBhZCk7CisJCQkJc2tiX3B1dChuZXdfc2tiLCBsZW4pOworCisJCQkJYm54MnhfcmV1c2Vfcnhfc2tiKGZwLCBza2IsIGJkX2NvbnMsIGJkX3Byb2QpOworCisJCQkJc2tiID0gbmV3X3NrYjsKKworCQkJfSBlbHNlIGlmIChibngyeF9hbGxvY19yeF9za2IoYnAsIGZwLCBiZF9wcm9kKSA9PSAwKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKKwkJCQkJcGNpX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKKwkJCQkJCSBicC0+cnhfYnVmX3VzZV9zaXplLAorCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJc2tiX3Jlc2VydmUoc2tiLCBwYWQpOworCQkJCXNrYl9wdXQoc2tiLCBsZW4pOworCisJCQl9IGVsc2UgeworCQkJCURQKE5FVElGX01TR19SWF9FUlIsCisJCQkJICAgIkVSUk9SICBwYWNrZXQgZHJvcHBlZCBiZWNhdXNlICIKKwkJCQkgICAib2YgYWxsb2MgZmFpbHVyZVxuIik7CisJCQkJZnAtPnJ4X2FsbG9jX2ZhaWxlZCsrOworcmV1c2Vfcng6CisJCQkJYm54MnhfcmV1c2Vfcnhfc2tiKGZwLCBza2IsIGJkX2NvbnMsIGJkX3Byb2QpOworCQkJCWdvdG8gbmV4dF9yeDsKKwkJCX0KKworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYnAtPmRldik7CisKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCWlmIChicC0+cnhfY3N1bSAmJiBCTlgyWF9SWF9TVU1fT0soY3FlKSkKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCisJCQkvKiBUQkQgZG8gd2UgcGFzcyBiYWQgY3N1bSBwYWNrZXRzIGluIHByb21pc2MgKi8KKwkJfQorCisjaWZkZWYgQkNNX1ZMQU4KKwkJaWYgKChicC0+dmxncnAgIT0gTlVMTCkgJiYKKwkJICAgIChsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGFyc19mbGFncy5mbGFncykgJgorCQkgICAgIFBBUlNJTkdfRkxBR1NfVkxBTikpCisJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBicC0+dmxncnAsCisJCQkJbGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnZsYW5fdGFnKSk7CisJCWVsc2UKKyNlbmRpZgorCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKworCQlicC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworbmV4dF9yeDoKKwkJcnhfYnVmLT5za2IgPSBOVUxMOworCisJCWJkX2NvbnMgPSBORVhUX1JYX0lEWChiZF9jb25zKTsKKwkJYmRfcHJvZCA9IE5FWFRfUlhfSURYKGJkX3Byb2QpOworCQliZF9wcm9kX2Z3ID0gTkVYVF9SWF9JRFgoYmRfcHJvZF9mdyk7CisJCXJ4X3BrdCsrOworbmV4dF9jcWU6CisJCXN3X2NvbXBfcHJvZCA9IE5FWFRfUkNRX0lEWChzd19jb21wX3Byb2QpOworCQlzd19jb21wX2NvbnMgPSBORVhUX1JDUV9JRFgoc3dfY29tcF9jb25zKTsKKworCQlpZiAocnhfcGt0ID09IGJ1ZGdldCkKKwkJCWJyZWFrOworCX0gLyogd2hpbGUgKi8KKworCWZwLT5yeF9iZF9jb25zID0gYmRfY29uczsKKwlmcC0+cnhfYmRfcHJvZCA9IGJkX3Byb2RfZnc7CisJZnAtPnJ4X2NvbXBfY29ucyA9IHN3X2NvbXBfY29uczsKKwlmcC0+cnhfY29tcF9wcm9kID0gc3dfY29tcF9wcm9kOworCisJLyogVXBkYXRlIHByb2R1Y2VycyAqLworCWJueDJ4X3VwZGF0ZV9yeF9wcm9kKGJwLCBmcCwgYmRfcHJvZF9mdywgc3dfY29tcF9wcm9kLAorCQkJICAgICBmcC0+cnhfc2dlX3Byb2QpOworCW1taW93YigpOyAvKiBrZWVwIHByb2QgdXBkYXRlcyBvcmRlcmVkICovCisKKwlmcC0+cnhfcGt0ICs9IHJ4X3BrdDsKKwlmcC0+cnhfY2FsbHMrKzsKKworCXJldHVybiByeF9wa3Q7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBibngyeF9tc2l4X2ZwX2ludChpbnQgaXJxLCB2b2lkICpmcF9jb29raWUpCit7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9IGZwX2Nvb2tpZTsKKwlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBicC0+ZGV2OworCWludCBpbmRleCA9IEZQX0lEWChmcCk7CisKKwlEUChCTlgyWF9NU0dfRlAsICJnb3QgYW4gTVNJLVggaW50ZXJydXB0IG9uIElEWDpTQiBbJWQ6JWRdXG4iLAorCSAgIGluZGV4LCBGUF9TQl9JRChmcCkpOworCWJueDJ4X2Fja19zYihicCwgRlBfU0JfSUQoZnApLCBVU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCisJCXJldHVybiBJUlFfSEFORExFRDsKKyNlbmRpZgorCisJcHJlZmV0Y2goZnAtPnJ4X2NvbnNfc2IpOworCXByZWZldGNoKGZwLT50eF9jb25zX3NiKTsKKwlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CisJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOworCisJbmV0aWZfcnhfc2NoZWR1bGUoZGV2LCAmYm54MnhfZnAoYnAsIGluZGV4LCBuYXBpKSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBibngyeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJdTE2IHN0YXR1cyA9IGJueDJ4X2Fja19pbnQoYnApOworCXUxNiBtYXNrOworCisJLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIHNoYXJlZCBhbmQgaXQncyBub3QgZm9yIHVzICovCisJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSAwKSkgeworCQlEUChORVRJRl9NU0dfSU5UUiwgIm5vdCBvdXIgaW50ZXJydXB0IVxuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gaW50ZXJydXB0ICBzdGF0dXMgJXVcbiIsIHN0YXR1cyk7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCisJCXJldHVybiBJUlFfSEFORExFRDsKKyNlbmRpZgorCisJLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGVkICovCisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKSB7CisJCURQKE5FVElGX01TR19JTlRSLCAiY2FsbGVkIGJ1dCBpbnRyX3NlbSBub3QgMCwgcmV0dXJuaW5nXG4iKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCW1hc2sgPSAweDIgPDwgYnAtPmZwWzBdLnNiX2lkOworCWlmIChzdGF0dXMgJiBtYXNrKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOworCisJCXByZWZldGNoKGZwLT5yeF9jb25zX3NiKTsKKwkJcHJlZmV0Y2goZnAtPnR4X2NvbnNfc2IpOworCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CisJCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKKworCQluZXRpZl9yeF9zY2hlZHVsZShkZXYsICZibngyeF9mcChicCwgMCwgbmFwaSkpOworCisJCXN0YXR1cyAmPSB+bWFzazsKKwl9CisKKworCWlmICh1bmxpa2VseShzdGF0dXMgJiAweDEpKSB7CisJCXNjaGVkdWxlX3dvcmsoJmJwLT5zcF90YXNrKTsKKworCQlzdGF0dXMgJj0gfjB4MTsKKwkJaWYgKCFzdGF0dXMpCisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKHN0YXR1cykKKwkJRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gdW5rbm93biBpbnRlcnJ1cHQhIChzdGF0dXMgJXUpXG4iLAorCQkgICBzdGF0dXMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBlbmQgb2YgZmFzdCBwYXRoICovCisKK3N0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX2hhbmRsZShzdHJ1Y3QgYm54MnggKmJwLCBlbnVtIGJueDJ4X3N0YXRzX2V2ZW50IGV2ZW50KTsKKworLyogTGluayAqLworCisvKgorICogR2VuZXJhbCBzZXJ2aWNlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgYm54MnhfaHdfbG9jayhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVzb3VyY2UpCit7CisJdTMyIGxvY2tfc3RhdHVzOworCXUzMiByZXNvdXJjZV9iaXQgPSAoMSA8PCByZXNvdXJjZSk7CisJdTggcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBjbnQ7CisKKwkvKiBWYWxpZGF0aW5nIHRoYXQgdGhlIHJlc291cmNlIGlzIHdpdGhpbiByYW5nZSAqLworCWlmIChyZXNvdXJjZSA+IEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKSB7CisJCURQKE5FVElGX01TR19IVywKKwkJICAgInJlc291cmNlKDB4JXgpID4gSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUoMHgleClcbiIsCisJCSAgIHJlc291cmNlLCBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFZhbGlkYXRpbmcgdGhhdCB0aGUgcmVzb3VyY2UgaXMgbm90IGFscmVhZHkgdGFrZW4gKi8KKwlsb2NrX3N0YXR1cyA9IFJFR19SRChicCwgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMSArIHBvcnQqOCk7CisJaWYgKGxvY2tfc3RhdHVzICYgcmVzb3VyY2VfYml0KSB7CisJCURQKE5FVElGX01TR19IVywgImxvY2tfc3RhdHVzIDB4JXggIHJlc291cmNlX2JpdCAweCV4XG4iLAorCQkgICBsb2NrX3N0YXR1cywgcmVzb3VyY2VfYml0KTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJLyogVHJ5IGZvciAxIHNlY29uZCBldmVyeSA1bXMgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IDIwMDsgY250KyspIHsKKwkJLyogVHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sgKi8KKwkJUkVHX1dSKGJwLCBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xICsgcG9ydCo4ICsgNCwKKwkJICAgICAgIHJlc291cmNlX2JpdCk7CisJCWxvY2tfc3RhdHVzID0gUkVHX1JEKGJwLCBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xICsgcG9ydCo4KTsKKwkJaWYgKGxvY2tfc3RhdHVzICYgcmVzb3VyY2VfYml0KQorCQkJcmV0dXJuIDA7CisKKwkJbXNsZWVwKDUpOworCX0KKwlEUChORVRJRl9NU0dfSFcsICJUaW1lb3V0XG4iKTsKKwlyZXR1cm4gLUVBR0FJTjsKK30KKworc3RhdGljIGludCBibngyeF9od191bmxvY2soc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlc291cmNlKQoreworCXUzMiBsb2NrX3N0YXR1czsKKwl1MzIgcmVzb3VyY2VfYml0ID0gKDEgPDwgcmVzb3VyY2UpOworCXU4IHBvcnQgPSBCUF9QT1JUKGJwKTsKKworCS8qIFZhbGlkYXRpbmcgdGhhdCB0aGUgcmVzb3VyY2UgaXMgd2l0aGluIHJhbmdlICovCisJaWYgKHJlc291cmNlID4gSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUpIHsKKwkJRFAoTkVUSUZfTVNHX0hXLAorCQkgICAicmVzb3VyY2UoMHgleCkgPiBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSgweCV4KVxuIiwKKwkJICAgcmVzb3VyY2UsIEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVmFsaWRhdGluZyB0aGF0IHRoZSByZXNvdXJjZSBpcyBjdXJyZW50bHkgdGFrZW4gKi8KKwlsb2NrX3N0YXR1cyA9IFJFR19SRChicCwgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMSArIHBvcnQqOCk7CisJaWYgKCEobG9ja19zdGF0dXMgJiByZXNvdXJjZV9iaXQpKSB7CisJCURQKE5FVElGX01TR19IVywgImxvY2tfc3RhdHVzIDB4JXggIHJlc291cmNlX2JpdCAweCV4XG4iLAorCQkgICBsb2NrX3N0YXR1cywgcmVzb3VyY2VfYml0KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJUkVHX1dSKGJwLCBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xICsgcG9ydCo4LCByZXNvdXJjZV9iaXQpOworCXJldHVybiAwOworfQorCisvKiBIVyBMb2NrIGZvciBzaGFyZWQgZHVhbCBwb3J0IFBIWXMgKi8KK3N0YXRpYyB2b2lkIGJueDJ4X3BoeV9od19sb2NrKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisKKwltdXRleF9sb2NrKCZicC0+cG9ydC5waHlfbXV0ZXgpOworCisJaWYgKChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgfHwKKwkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSkKKwkJYm54MnhfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworfQorCitzdGF0aWMgdm9pZCBibngyeF9waHlfaHdfdW5sb2NrKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisKKwlpZiAoKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKSB8fAorCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpKQorCQlibngyeF9od191bmxvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfODA3Ml9NRElPKTsKKworCW11dGV4X3VubG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKK30KKworaW50IGJueDJ4X3NldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUpCit7CisJLyogVGhlIEdQSU8gc2hvdWxkIGJlIHN3YXBwZWQgaWYgc3dhcCByZWdpc3RlciBpcyBzZXQgYW5kIGFjdGl2ZSAqLworCWludCBncGlvX3BvcnQgPSAoUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCkgJiYKKwkJCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpKSBeIEJQX1BPUlQoYnApOworCWludCBncGlvX3NoaWZ0ID0gZ3Bpb19udW0gKworCQkJKGdwaW9fcG9ydCA/IE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCA6IDApOworCXUzMiBncGlvX21hc2sgPSAoMSA8PCBncGlvX3NoaWZ0KTsKKwl1MzIgZ3Bpb19yZWc7CisKKwlpZiAoZ3Bpb19udW0gPiBNSVNDX1JFR0lTVEVSU19HUElPXzMpIHsKKwkJQk5YMlhfRVJSKCJJbnZhbGlkIEdQSU8gJWRcbiIsIGdwaW9fbnVtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYm54MnhfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9HUElPKTsKKwkvKiByZWFkIEdQSU8gYW5kIG1hc2sgZXhjZXB0IHRoZSBmbG9hdCBiaXRzICovCisJZ3Bpb19yZWcgPSAoUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPKSAmIE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVQpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1c6CisJCURQKE5FVElGX01TR19MSU5LLCAiU2V0IEdQSU8gJWQgKHNoaWZ0ICVkKSAtPiBvdXRwdXQgbG93XG4iLAorCQkgICBncGlvX251bSwgZ3Bpb19zaGlmdCk7CisJCS8qIGNsZWFyIEZMT0FUIGFuZCBzZXQgQ0xSICovCisJCWdwaW9fcmVnICY9IH4oZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVRfUE9TKTsKKwkJZ3Bpb19yZWcgfD0gIChncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19DTFJfUE9TKTsKKwkJYnJlYWs7CisKKwljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0g6CisJCURQKE5FVElGX01TR19MSU5LLCAiU2V0IEdQSU8gJWQgKHNoaWZ0ICVkKSAtPiBvdXRwdXQgaGlnaFxuIiwKKwkJICAgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOworCQkvKiBjbGVhciBGTE9BVCBhbmQgc2V0IFNFVCAqLworCQlncGlvX3JlZyAmPSB+KGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0ZMT0FUX1BPUyk7CisJCWdwaW9fcmVnIHw9ICAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fU0VUX1BPUyk7CisJCWJyZWFrOworCisJY2FzZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOUFVUX0hJX1ogOgorCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBHUElPICVkIChzaGlmdCAlZCkgLT4gaW5wdXRcbiIsCisJCSAgIGdwaW9fbnVtLCBncGlvX3NoaWZ0KTsKKwkJLyogc2V0IEZMT0FUICovCisJCWdwaW9fcmVnIHw9IChncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVF9QT1MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCVJFR19XUihicCwgTUlTQ19SRUdfR1BJTywgZ3Bpb19yZWcpOworCWJueDJ4X2h3X3VubG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9HUElPKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3NldF9zcGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBzcGlvX251bSwgdTMyIG1vZGUpCit7CisJdTMyIHNwaW9fbWFzayA9ICgxIDw8IHNwaW9fbnVtKTsKKwl1MzIgc3Bpb19yZWc7CisKKwlpZiAoKHNwaW9fbnVtIDwgTUlTQ19SRUdJU1RFUlNfU1BJT180KSB8fAorCSAgICAoc3Bpb19udW0gPiBNSVNDX1JFR0lTVEVSU19TUElPXzcpKSB7CisJCUJOWDJYX0VSUigiSW52YWxpZCBTUElPICVkXG4iLCBzcGlvX251bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJueDJ4X2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfU1BJTyk7CisJLyogcmVhZCBTUElPIGFuZCBtYXNrIGV4Y2VwdCB0aGUgZmxvYXQgYml0cyAqLworCXNwaW9fcmVnID0gKFJFR19SRChicCwgTUlTQ19SRUdfU1BJTykgJiBNSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgTUlTQ19SRUdJU1RFUlNfU1BJT19PVVRQVVRfTE9XIDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgU1BJTyAlZCAtPiBvdXRwdXQgbG93XG4iLCBzcGlvX251bSk7CisJCS8qIGNsZWFyIEZMT0FUIGFuZCBzZXQgQ0xSICovCisJCXNwaW9fcmVnICY9IH4oc3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVRfUE9TKTsKKwkJc3Bpb19yZWcgfD0gIChzcGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT19DTFJfUE9TKTsKKwkJYnJlYWs7CisKKwljYXNlIE1JU0NfUkVHSVNURVJTX1NQSU9fT1VUUFVUX0hJR0ggOgorCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBTUElPICVkIC0+IG91dHB1dCBoaWdoXG4iLCBzcGlvX251bSk7CisJCS8qIGNsZWFyIEZMT0FUIGFuZCBzZXQgU0VUICovCisJCXNwaW9fcmVnICY9IH4oc3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVRfUE9TKTsKKwkJc3Bpb19yZWcgfD0gIChzcGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT19TRVRfUE9TKTsKKwkJYnJlYWs7CisKKwljYXNlIE1JU0NfUkVHSVNURVJTX1NQSU9fSU5QVVRfSElfWjoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgU1BJTyAlZCAtPiBpbnB1dFxuIiwgc3Bpb19udW0pOworCQkvKiBzZXQgRkxPQVQgKi8KKwkJc3Bpb19yZWcgfD0gKHNwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUX1BPUyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPLCBzcGlvX3JlZyk7CisJYm54MnhfaHdfdW5sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1NQSU8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2NhbGNfZmNfYWR2KHN0cnVjdCBibngyeCAqYnApCit7CisJc3dpdGNoIChicC0+bGlua192YXJzLmllZWVfZmMpIHsKKwljYXNlIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX05PTkU6CisJCWJwLT5wb3J0LmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF9Bc3ltX1BhdXNlIHwKKwkJCQkJICBBRFZFUlRJU0VEX1BhdXNlKTsKKwkJYnJlYWs7CisJY2FzZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOgorCQlicC0+cG9ydC5hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF9Bc3ltX1BhdXNlIHwKKwkJCQkJIEFEVkVSVElTRURfUGF1c2UpOworCQlicmVhazsKKwljYXNlIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM6CisJCWJwLT5wb3J0LmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX0FzeW1fUGF1c2UgfAorCQkJCQkgIEFEVkVSVElTRURfUGF1c2UpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2xpbmtfcmVwb3J0KHN0cnVjdCBibngyeCAqYnApCit7CisJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkgeworCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCisJCQluZXRpZl9jYXJyaWVyX29uKGJwLT5kZXYpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXMgTklDIExpbmsgaXMgVXAsICIsIGJwLT5kZXYtPm5hbWUpOworCisJCXByaW50aygiJWQgTWJwcyAiLCBicC0+bGlua192YXJzLmxpbmVfc3BlZWQpOworCisJCWlmIChicC0+bGlua192YXJzLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCXByaW50aygiZnVsbCBkdXBsZXgiKTsKKwkJZWxzZQorCQkJcHJpbnRrKCJoYWxmIGR1cGxleCIpOworCisJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAhPSBGTE9XX0NUUkxfTk9ORSkgeworCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgRkxPV19DVFJMX1JYKSB7CisJCQkJcHJpbnRrKCIsIHJlY2VpdmUgIik7CisJCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgRkxPV19DVFJMX1RYKQorCQkJCQlwcmludGsoIiYgdHJhbnNtaXQgIik7CisJCQl9IGVsc2UgeworCQkJCXByaW50aygiLCB0cmFuc21pdCAiKTsKKwkJCX0KKwkJCXByaW50aygiZmxvdyBjb250cm9sIE9OIik7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCisJfSBlbHNlIHsgLyogbGlua19kb3duICovCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBOSUMgTGluayBpcyBEb3duXG4iLCBicC0+ZGV2LT5uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyB1OCBibngyeF9pbml0aWFsX3BoeV9pbml0KHN0cnVjdCBibngyeCAqYnApCit7CisJdTggcmM7CisKKwkvKiBJbml0aWFsaXplIGxpbmsgcGFyYW1ldGVycyBzdHJ1Y3R1cmUgdmFyaWFibGVzICovCisJYnAtPmxpbmtfcGFyYW1zLm10dSA9IGJwLT5kZXYtPm10dTsKKworCWJueDJ4X3BoeV9od19sb2NrKGJwKTsKKwlyYyA9IGJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwlibngyeF9waHlfaHdfdW5sb2NrKGJwKTsKKworCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApCisJCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKKworCWJueDJ4X2NhbGNfZmNfYWR2KGJwKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54MnhfbGlua19zZXQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlibngyeF9waHlfaHdfbG9jayhicCk7CisJYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOworCWJueDJ4X3BoeV9od191bmxvY2soYnApOworCisJYm54MnhfY2FsY19mY19hZHYoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9fbGlua19yZXNldChzdHJ1Y3QgYm54MnggKmJwKQoreworCWJueDJ4X3BoeV9od19sb2NrKGJwKTsKKwlibngyeF9saW5rX3Jlc2V0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwlibngyeF9waHlfaHdfdW5sb2NrKGJwKTsKK30KKworc3RhdGljIHU4IGJueDJ4X2xpbmtfdGVzdChzdHJ1Y3QgYm54MnggKmJwKQoreworCXU4IHJjOworCisJYm54MnhfcGh5X2h3X2xvY2soYnApOworCXJjID0gYm54MnhfdGVzdF9saW5rKCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwlibngyeF9waHlfaHdfdW5sb2NrKGJwKTsKKworCXJldHVybiByYzsKK30KKworLyogQ2FsY3VsYXRlcyB0aGUgc3VtIG9mIHZuX21pbl9yYXRlcy4KKyAgIEl0J3MgbmVlZGVkIGZvciBmdXJ0aGVyIG5vcm1hbGl6aW5nIG9mIHRoZSBtaW5fcmF0ZXMuCisKKyAgIFJldHVybnM6CisgICAgIHN1bSBvZiB2bl9taW5fcmF0ZXMKKyAgICAgICBvcgorICAgICAwIC0gaWYgYWxsIHRoZSBtaW5fcmF0ZXMgYXJlIDAuCisgICAgIEluIHRoZSBsYXRlciBjYXNlIGZhaW5lc3MgYWxnb3JpdGhtIHNob3VsZCBiZSBkZWFjdGl2YXRlZC4KKyAgICAgSWYgbm90IGFsbCBtaW5fcmF0ZXMgYXJlIHplcm8gdGhlbiB0aG9zZSB0aGF0IGFyZSB6ZXJvZXMgd2lsbAorICAgICBiZSBzZXQgdG8gMS4KKyAqLworc3RhdGljIHUzMiBibngyeF9jYWxjX3ZuX3dzdW0oc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaSwgcG9ydCA9IEJQX1BPUlQoYnApOworCXUzMiB3c3VtID0gMDsKKwlpbnQgYWxsX3plcm8gPSAxOworCisJZm9yIChpID0gMDsgaSA8IEUxSFZOX01BWDsgaSsrKSB7CisJCXUzMiB2bl9jZmcgPQorCQkJU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1syKmkgKyBwb3J0XS5jb25maWcpOworCQl1MzIgdm5fbWluX3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLKSA+PgorCQkJCSAgICAgRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKKwkJaWYgKCEodm5fY2ZnICYgRlVOQ19NRl9DRkdfRlVOQ19ISURFKSkgeworCQkJLyogSWYgbWluIHJhdGUgaXMgemVybyAtIHNldCBpdCB0byAxICovCisJCQlpZiAoIXZuX21pbl9yYXRlKQorCQkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOworCQkJZWxzZQorCQkJCWFsbF96ZXJvID0gMDsKKworCQkJd3N1bSArPSB2bl9taW5fcmF0ZTsKKwkJfQorCX0KKworCS8qIC4uLiBvbmx5IGlmIGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9zIC0gZGlzYWJsZSBGQUlSTkVTUyAqLworCWlmIChhbGxfemVybykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gd3N1bTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF9wb3J0X21pbm1heChzdHJ1Y3QgYm54MnggKmJwLAorCQkJCSAgIGludCBlbl9mbmVzcywKKwkJCQkgICB1MTYgcG9ydF9yYXRlLAorCQkJCSAgIHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCAqbV9jbW5nX3BvcnQpCit7CisJdTMyIHJfcGFyYW0gPSBwb3J0X3JhdGUgLyA4OworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGk7CisKKwltZW1zZXQobV9jbW5nX3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpKTsKKworCS8qIEVuYWJsZSBtaW5tYXggb25seSBpZiB3ZSBhcmUgaW4gZTFobWYgbW9kZSAqLworCWlmIChJU19FMUhNRihicCkpIHsKKwkJdTMyIGZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjOworCQl1MzIgdF9mYWlyOworCisJCS8qIEVuYWJsZSByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzICovCisJCW1fY21uZ19wb3J0LT5mbGFncy5jbW5nX3ZuX2VuYWJsZSA9IDE7CisJCW1fY21uZ19wb3J0LT5mbGFncy5mYWlybmVzc19lbmFibGUgPSBlbl9mbmVzcyA/IDEgOiAwOworCQltX2NtbmdfcG9ydC0+ZmxhZ3MucmF0ZV9zaGFwaW5nX2VuYWJsZSA9IDE7CisKKwkJaWYgKCFlbl9mbmVzcykKKwkJCURQKE5FVElGX01TR19JRlVQLCAiQWxsIE1JTiB2YWx1ZXMgYXJlIHplcm9lcyIKKwkJCSAgICIgIGZhaXJuZXNzIHdpbGwgYmUgZGlzYWJsZWRcbiIpOworCisJCS8qIDEwMCB1c2VjIGluIFNETSB0aWNrcyA9IDI1IHNpbmNlIGVhY2ggdGljayBpcyA0IHVzZWMgKi8KKwkJbV9jbW5nX3BvcnQtPnJzX3ZhcnMucnNfcGVyaW9kaWNfdGltZW91dCA9CisJCQkJCQlSU19QRVJJT0RJQ19USU1FT1VUX1VTRUMgLyA0OworCisJCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBubyB0aW1lciBhcm1pbmcgd2lsbCBvY2N1cgorCQkgICAxLjI1IGNvZWZmaWNpZW50IGlzIGZvciB0aGUgdGhyZXNob2xkIHRvIGJlIGEgbGl0dGxlIGJpZ2dlcgorCQkgICB0aGFuIHRoZSByZWFsIHRpbWUsIHRvIGNvbXBlbnNhdGUgZm9yIHRpbWVyIGluLWFjY3VyYWN5ICovCisJCW1fY21uZ19wb3J0LT5yc192YXJzLnJzX3RocmVzaG9sZCA9CisJCQkJKFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQyAqIHJfcGFyYW0gKiA1KSAvIDQ7CisKKwkJLyogcmVzb2x1dGlvbiBvZiBmYWlybmVzcyB0aW1lciAqLworCQlmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyA9IFFNX0FSQl9CWVRFUyAvIHJfcGFyYW07CisJCS8qIGZvciAxMEcgaXQgaXMgMTAwMHVzZWMuIGZvciAxRyBpdCBpcyAxMDAwMHVzZWMuICovCisJCXRfZmFpciA9IFRfRkFJUl9DT0VGIC8gcG9ydF9yYXRlOworCisJCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCB3ZSB3b24ndCBhcm0KKwkJICAgdGhlIHRpbWVyIGFueW1vcmUgKi8KKwkJbV9jbW5nX3BvcnQtPmZhaXJfdmFycy5mYWlyX3RocmVzaG9sZCA9IFFNX0FSQl9CWVRFUzsKKworCQkvKiB3ZSBtdWx0aXBseSBieSAxZTMvOCB0byBnZXQgYnl0ZXMvbXNlYy4KKwkJICAgV2UgZG9uJ3Qgd2FudCB0aGUgY3JlZGl0cyB0byBwYXNzIGEgY3JlZGl0CisJCSAgIG9mIHRoZSBUX0ZBSVIqRkFJUl9NRU0gKGFsZ29yaXRobSByZXNvbHV0aW9uKSAqLworCQltX2NtbmdfcG9ydC0+ZmFpcl92YXJzLnVwcGVyX2JvdW5kID0KKwkJCQkJCXJfcGFyYW0gKiB0X2ZhaXIgKiBGQUlSX01FTTsKKwkJLyogc2luY2UgZWFjaCB0aWNrIGlzIDQgdXNlYyAqLworCQltX2NtbmdfcG9ydC0+ZmFpcl92YXJzLmZhaXJuZXNzX3RpbWVvdXQgPQorCQkJCQkJZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWMgLyA0OworCisJfSBlbHNlIHsKKwkJLyogRGlzYWJsZSByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzICovCisJCW1fY21uZ19wb3J0LT5mbGFncy5jbW5nX3ZuX2VuYWJsZSA9IDA7CisJCW1fY21uZ19wb3J0LT5mbGFncy5mYWlybmVzc19lbmFibGUgPSAwOworCQltX2NtbmdfcG9ydC0+ZmxhZ3MucmF0ZV9zaGFwaW5nX2VuYWJsZSA9IDA7CisKKwkJRFAoTkVUSUZfTVNHX0lGVVAsCisJCSAgICJTaW5nbGUgZnVuY3Rpb24gbW9kZSAgbWlubWF4IHdpbGwgYmUgZGlzYWJsZWRcbiIpOworCX0KKworCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSAvIDQ7IGkrKykKKwkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkgICAgICAgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgKyBpICogNCwKKwkJICAgICAgICgodTMyICopKG1fY21uZ19wb3J0KSlbaV0pOworfQorCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3ZuX21pbm1heChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYywKKwkJCQkgICB1MzIgd3N1bSwgdTE2IHBvcnRfcmF0ZSwKKwkJCQkgc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0ICptX2NtbmdfcG9ydCkKK3sKKwlzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuIG1fcnNfdm47CisJc3RydWN0IGZhaXJuZXNzX3ZhcnNfcGVyX3ZuIG1fZmFpcl92bjsKKwl1MzIgdm5fY2ZnID0gU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOworCXUxNiB2bl9taW5fcmF0ZSwgdm5fbWF4X3JhdGU7CisJaW50IGk7CisKKwkvKiBJZiBmdW5jdGlvbiBpcyBoaWRkZW4gLSBzZXQgbWluIGFuZCBtYXggdG8gemVyb2VzICovCisJaWYgKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfSElERSkgeworCQl2bl9taW5fcmF0ZSA9IDA7CisJCXZuX21heF9yYXRlID0gMDsKKworCX0gZWxzZSB7CisJCXZuX21pbl9yYXRlID0gKCh2bl9jZmcgJiBGVU5DX01GX0NGR19NSU5fQldfTUFTSykgPj4KKwkJCQlGVU5DX01GX0NGR19NSU5fQldfU0hJRlQpICogMTAwOworCQkvKiBJZiBGQUlSTkVTUyBpcyBlbmFibGVkIChub3QgYWxsIG1pbiByYXRlcyBhcmUgemVyb2VzKSBhbmQKKwkJICAgaWYgY3VycmVudCBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEuCisJCSAgIFRoaXMgaXMgYSByZXF1aXJtZW50IG9mIHRoZSBhbGdvcml0aG0uICovCisJCWlmICgodm5fbWluX3JhdGUgPT0gMCkgJiYgd3N1bSkKKwkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOworCQl2bl9tYXhfcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+CisJCQkJRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKSAqIDEwMDsKKwl9CisKKwlEUChORVRJRl9NU0dfSUZVUCwgImZ1bmMgJWQ6IHZuX21pbl9yYXRlPSVkICB2bl9tYXhfcmF0ZT0lZCAgIgorCSAgICJ3c3VtPSVkXG4iLCBmdW5jLCB2bl9taW5fcmF0ZSwgdm5fbWF4X3JhdGUsIHdzdW0pOworCisJbWVtc2V0KCZtX3JzX3ZuLCAwLCBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl92bikpOworCW1lbXNldCgmbV9mYWlyX3ZuLCAwLCBzaXplb2Yoc3RydWN0IGZhaXJuZXNzX3ZhcnNfcGVyX3ZuKSk7CisKKwkvKiBnbG9iYWwgdm4gY291bnRlciAtIG1heGltYWwgTWJwcyBmb3IgdGhpcyB2biAqLworCW1fcnNfdm4udm5fY291bnRlci5yYXRlID0gdm5fbWF4X3JhdGU7CisKKwkvKiBxdW90YSAtIG51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZCBpbiB0aGlzIHBlcmlvZCAqLworCW1fcnNfdm4udm5fY291bnRlci5xdW90YSA9CisJCQkJKHZuX21heF9yYXRlICogUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDKSAvIDg7CisKKyNpZmRlZiBCTlgyWF9QRVJfUFJPVF9RT1MKKwkvKiBwZXIgcHJvdG9jb2wgY291bnRlciAqLworCWZvciAocHJvdG9jb2wgPSAwOyBwcm90b2NvbCA8IE5VTV9PRl9QUk9UT0NPTFM7IHByb3RvY29sKyspIHsKKwkJLyogbWF4aW1hbCBNYnBzIGZvciB0aGlzIHByb3RvY29sICovCisJCW1fcnNfdm4ucHJvdG9jb2xfY291bnRlcnNbcHJvdG9jb2xdLnJhdGUgPQorCQkJCQkJcHJvdG9jb2xfbWF4X3JhdGVbcHJvdG9jb2xdOworCQkvKiB0aGUgcXVvdGEgaW4gZWFjaCB0aW1lciBwZXJpb2QgLQorCQkgICBudW1iZXIgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQgaW4gdGhpcyBwZXJpb2QgKi8KKwkJbV9yc192bi5wcm90b2NvbF9jb3VudGVyc1twcm90b2NvbF0ucXVvdGEgPQorCQkJKHUzMikocnNfcGVyaW9kaWNfdGltZW91dF91c2VjICoKKwkJCSAgKChkb3VibGUpbV9yc192bi4KKwkJCQkgICBwcm90b2NvbF9jb3VudGVyc1twcm90b2NvbF0ucmF0ZS84KSk7CisJfQorI2VuZGlmCisKKwlpZiAod3N1bSkgeworCQkvKiBjcmVkaXQgZm9yIGVhY2ggcGVyaW9kIG9mIHRoZSBmYWlybmVzcyBhbGdvcml0aG06CisJCSAgIG51bWJlciBvZiBieXRlcyBpbiBUX0ZBSVIgKHRoZSB2biBzaGFyZSB0aGUgcG9ydCByYXRlKS4KKwkJICAgd3N1bSBzaG91bGQgbm90IGJlIGxhcmdlciB0aGFuIDEwMDAwLCB0aHVzCisJCSAgIFRfRkFJUl9DT0VGIC8gKDggKiB3c3VtKSB3aWxsIGFsd2F5cyBiZSBncmF0ZXIgdGhhbiB6ZXJvICovCisJCW1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEgPQorCQkJbWF4KCh1NjQpKHZuX21pbl9yYXRlICogKFRfRkFJUl9DT0VGIC8gKDggKiB3c3VtKSkpLAorCQkJICAgICh1NjQpKG1fY21uZ19wb3J0LT5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgKiAyKSk7CisJCURQKE5FVElGX01TR19JRlVQLCAibV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YT0lZFxuIiwKKwkJICAgbV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YSk7CisJfQorCisjaWZkZWYgQk5YMlhfUEVSX1BST1RfUU9TCisJZG8geworCQl1MzIgcHJvdG9jb2xXZWlnaHRTdW0gPSAwOworCisJCWZvciAocHJvdG9jb2wgPSAwOyBwcm90b2NvbCA8IE5VTV9PRl9QUk9UT0NPTFM7IHByb3RvY29sKyspCisJCQlwcm90b2NvbFdlaWdodFN1bSArPQorCQkJCQlkcnZJbml0LnByb3RvY29sX21pbl9yYXRlW3Byb3RvY29sXTsKKwkJLyogcGVyIHByb3RvY29sIGNvdW50ZXIgLQorCQkgICBOT1QgTkVFREVEIElGIE5PIFBFUi1QUk9UT0NPTCBDT05HRVNUSU9OIE1BTkFHRU1FTlQgKi8KKwkJaWYgKHByb3RvY29sV2VpZ2h0U3VtID4gMCkgeworCQkJZm9yIChwcm90b2NvbCA9IDA7CisJCQkgICAgIHByb3RvY29sIDwgTlVNX09GX1BST1RPQ09MUzsgcHJvdG9jb2wrKykKKwkJCQkvKiBjcmVkaXQgZm9yIGVhY2ggcGVyaW9kIG9mIHRoZQorCQkJCSAgIGZhaXJuZXNzIGFsZ29yaXRobSAtIG51bWJlciBvZiBieXRlcyBpbgorCQkJCSAgIFRfRkFJUiAodGhlIHByb3RvY29sIHNoYXJlIHRoZSB2biByYXRlKSAqLworCQkJCW1fZmFpcl92bi5wcm90b2NvbF9jcmVkaXRfZGVsdGFbcHJvdG9jb2xdID0KKwkJCQkJKHUzMikoKHZuX21pbl9yYXRlIC8gOCkgKiB0X2ZhaXIgKgorCQkJCQlwcm90b2NvbF9taW5fcmF0ZSAvIHByb3RvY29sV2VpZ2h0U3VtKTsKKwkJfQorCX0gd2hpbGUgKDApOworI2VuZGlmCisKKwkvKiBTdG9yZSBpdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCByYXRlX3NoYXBpbmdfdmFyc19wZXJfdm4pLzQ7IGkrKykKKwkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkgICAgICAgWFNUT1JNX1JBVEVfU0hBUElOR19QRVJfVk5fVkFSU19PRkZTRVQoZnVuYykgKyBpICogNCwKKwkJICAgICAgICgodTMyICopKCZtX3JzX3ZuKSlbaV0pOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgZmFpcm5lc3NfdmFyc19wZXJfdm4pLzQ7IGkrKykKKwkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkgICAgICAgWFNUT1JNX0ZBSVJORVNTX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jKSArIGkgKiA0LAorCQkgICAgICAgKCh1MzIgKikoJm1fZmFpcl92bikpW2ldKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBsaW5rIGludGVycnVwdCAqLworc3RhdGljIHZvaWQgYm54MnhfbGlua19hdHRuKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHZuOworCisJLyogTWFrZSBzdXJlIHRoYXQgd2UgYXJlIHN5bmNlZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgKi8KKwlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOworCisJYm54MnhfcGh5X2h3X2xvY2soYnApOworCWJueDJ4X2xpbmtfdXBkYXRlKCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwlibngyeF9waHlfaHdfdW5sb2NrKGJwKTsKKworCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApIHsKKworCQlpZiAoYnAtPmxpbmtfdmFycy5tYWNfdHlwZSA9PSBNQUNfVFlQRV9CTUFDKSB7CisJCQlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHM7CisKKwkJCXBzdGF0cyA9IGJueDJ4X3NwKGJwLCBwb3J0X3N0YXRzKTsKKwkJCS8qIHJlc2V0IG9sZCBibWFjIHN0YXRzICovCisJCQltZW1zZXQoJihwc3RhdHMtPm1hY19zdHhbMF0pLCAwLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWFjX3N0eCkpOworCQl9CisJCWlmICgoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHx8CisJCSAgICAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX0RJU0FCTEVEKSkKKwkJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfTElOS19VUCk7CisJfQorCisJLyogaW5kaWNhdGUgbGluayBzdGF0dXMgKi8KKwlibngyeF9saW5rX3JlcG9ydChicCk7CisKKwlpZiAoSVNfRTFITUYoYnApKSB7CisJCWludCBmdW5jOworCisJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykgeworCQkJaWYgKHZuID09IEJQX0UxSFZOKGJwKSkKKwkJCQljb250aW51ZTsKKworCQkJZnVuYyA9ICgodm4gPDwgMSkgfCBCUF9QT1JUKGJwKSk7CisKKwkJCS8qIFNldCB0aGUgYXR0ZW50aW9uIHRvd2FyZHMgb3RoZXIgZHJpdmVycworCQkJICAgb24gdGhlIHNhbWUgcG9ydCAqLworCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzAgKworCQkJICAgICAgIChMSU5LX1NZTkNfQVRURU5USU9OX0JJVF9GVU5DXzAgKyBmdW5jKSo0LCAxKTsKKwkJfQorCX0KKworCWlmIChDSElQX0lTX0UxSChicCkgJiYgKGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCA+IDApKSB7CisJCXN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCBtX2NtbmdfcG9ydDsKKwkJdTMyIHdzdW07CisJCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisKKwkJLyogSW5pdCBSQVRFIFNIQVBJTkcgYW5kIEZBSVJORVNTIGNvbnRleHRzICovCisJCXdzdW0gPSBibngyeF9jYWxjX3ZuX3dzdW0oYnApOworCQlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwLCAoaW50KXdzdW0sCisJCQkJCWJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCwKKwkJCQkJJm1fY21uZ19wb3J0KTsKKwkJaWYgKElTX0UxSE1GKGJwKSkKKwkJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykKKwkJCQlibngyeF9pbml0X3ZuX21pbm1heChicCwgMip2biArIHBvcnQsCisJCQkJCXdzdW0sIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCwKKwkJCQkJCSAgICAgJm1fY21uZ19wb3J0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X19saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pCisJCXJldHVybjsKKworCWJueDJ4X2xpbmtfc3RhdHVzX3VwZGF0ZSgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7CisKKwlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKQorCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX0xJTktfVVApOworCWVsc2UKKwkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKKworCS8qIGluZGljYXRlIGxpbmsgc3RhdHVzICovCisJYm54MnhfbGlua19yZXBvcnQoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9wbWZfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwl1MzIgdmFsOworCisJYnAtPnBvcnQucG1mID0gMTsKKwlEUChORVRJRl9NU0dfTElOSywgInBtZiAlZFxuIiwgYnAtPnBvcnQucG1mKTsKKworCS8qIGVuYWJsZSBuaWcgYXR0ZW50aW9uICovCisJdmFsID0gKDB4ZmYwZiB8ICgxIDw8IChCUF9FMUhWTihicCkgKyA0KSkpOworCVJFR19XUihicCwgSENfUkVHX1RSQUlMSU5HX0VER0VfMCArIHBvcnQqOCwgdmFsKTsKKwlSRUdfV1IoYnAsIEhDX1JFR19MRUFESU5HX0VER0VfMCArIHBvcnQqOCwgdmFsKTsKKworCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfUE1GKTsKK30KKworLyogZW5kIG9mIExpbmsgKi8KKworLyogc2xvdyBwYXRoICovCisKKy8qCisgKiBHZW5lcmFsIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworLyogdGhlIHNsb3cgcGF0aCBxdWV1ZSBpcyBvZGQgc2luY2UgY29tcGxldGlvbnMgYXJyaXZlIG9uIHRoZSBmYXN0cGF0aCByaW5nICovCitzdGF0aWMgaW50IGJueDJ4X3NwX3Bvc3Qoc3RydWN0IGJueDJ4ICpicCwgaW50IGNvbW1hbmQsIGludCBjaWQsCisJCQkgdTMyIGRhdGFfaGksIHUzMiBkYXRhX2xvLCBpbnQgY29tbW9uKQoreworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisKKwlEUChCTlgyWF9NU0dfU1AvKk5FVElGX01TR19USU1FUiovLAorCSAgICJTUFFFICgleDoleCkgIGNvbW1hbmQgJWQgIGh3X2NpZCAleCAgZGF0YSAoJXg6JXgpICBsZWZ0ICV4XG4iLAorCSAgICh1MzIpVTY0X0hJKGJwLT5zcHFfbWFwcGluZyksICh1MzIpKFU2NF9MTyhicC0+c3BxX21hcHBpbmcpICsKKwkgICAodm9pZCAqKWJwLT5zcHFfcHJvZF9iZCAtICh2b2lkICopYnAtPnNwcSksIGNvbW1hbmQsCisJICAgSFdfQ0lEKGJwLCBjaWQpLCBkYXRhX2hpLCBkYXRhX2xvLCBicC0+c3BxX2xlZnQpOworCisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2JoKCZicC0+c3BxX2xvY2spOworCisJaWYgKCFicC0+c3BxX2xlZnQpIHsKKwkJQk5YMlhfRVJSKCJCVUchIFNQUSByaW5nIGZ1bGwhXG4iKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmJwLT5zcHFfbG9jayk7CisJCWJueDJ4X3BhbmljKCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogQ0lEIG5lZWRzIHBvcnQgbnVtYmVyIHRvIGJlIGVuY29kZWQgaW50IGl0ICovCisJYnAtPnNwcV9wcm9kX2JkLT5oZHIuY29ubl9hbmRfY21kX2RhdGEgPQorCQkJY3B1X3RvX2xlMzIoKChjb21tYW5kIDw8IFNQRV9IRFJfQ01EX0lEX1NISUZUKSB8CisJCQkJICAgICBIV19DSUQoYnAsIGNpZCkpKTsKKwlicC0+c3BxX3Byb2RfYmQtPmhkci50eXBlID0gY3B1X3RvX2xlMTYoRVRIX0NPTk5FQ1RJT05fVFlQRSk7CisJaWYgKGNvbW1vbikKKwkJYnAtPnNwcV9wcm9kX2JkLT5oZHIudHlwZSB8PQorCQkJY3B1X3RvX2xlMTYoKDEgPDwgU1BFX0hEUl9DT01NT05fUkFNUk9EX1NISUZUKSk7CisKKwlicC0+c3BxX3Byb2RfYmQtPmRhdGEubWFjX2NvbmZpZ19hZGRyLmhpID0gY3B1X3RvX2xlMzIoZGF0YV9oaSk7CisJYnAtPnNwcV9wcm9kX2JkLT5kYXRhLm1hY19jb25maWdfYWRkci5sbyA9IGNwdV90b19sZTMyKGRhdGFfbG8pOworCisJYnAtPnNwcV9sZWZ0LS07CisKKwlpZiAoYnAtPnNwcV9wcm9kX2JkID09IGJwLT5zcHFfbGFzdF9iZCkgeworCQlicC0+c3BxX3Byb2RfYmQgPSBicC0+c3BxOworCQlicC0+c3BxX3Byb2RfaWR4ID0gMDsKKwkJRFAoTkVUSUZfTVNHX1RJTUVSLCAiZW5kIG9mIHNwcVxuIik7CisKKwl9IGVsc2UgeworCQlicC0+c3BxX3Byb2RfYmQrKzsKKwkJYnAtPnNwcV9wcm9kX2lkeCsrOworCX0KKworCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NQUV9QUk9EX09GRlNFVChmdW5jKSwKKwkgICAgICAgYnAtPnNwcV9wcm9kX2lkeCk7CisKKwlzcGluX3VubG9ja19iaCgmYnAtPnNwcV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogYWNxdWlyZSBzcGxpdCBNQ1AgYWNjZXNzIGxvY2sgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQgYm54MnhfbG9ja19hbHIoc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgaSwgaiwgdmFsOworCWludCByYyA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCWkgPSAxMDA7CisJZm9yIChqID0gMDsgaiA8IGkqMTA7IGorKykgeworCQl2YWwgPSAoMVVMIDw8IDMxKTsKKwkJUkVHX1dSKGJwLCBHUkNCQVNFX01DUCArIDB4OWMsIHZhbCk7CisJCXZhbCA9IFJFR19SRChicCwgR1JDQkFTRV9NQ1AgKyAweDljKTsKKwkJaWYgKHZhbCAmICgxTCA8PCAzMSkpCisJCQlicmVhazsKKworCQltc2xlZXAoNSk7CisJfQorCWlmICghKHZhbCAmICgxTCA8PCAzMSkpKSB7CisJCUJOWDJYX0VSUigiQ2Fubm90IGFjcXVpcmUgbnZyYW0gaW50ZXJmYWNlXG4iKTsKKwkJcmMgPSAtRUJVU1k7CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKiBSZWxlYXNlIHNwbGl0IE1DUCBhY2Nlc3MgbG9jayByZWdpc3RlciAqLworc3RhdGljIHZvaWQgYm54MnhfdW5sb2NrX2FscihzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiB2YWwgPSAwOworCisJUkVHX1dSKGJwLCBHUkNCQVNFX01DUCArIDB4OWMsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGJueDJ4X3VwZGF0ZV9kc2JfaWR4KHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jayAqZGVmX3NiID0gYnAtPmRlZl9zdGF0dXNfYmxrOworCXUxNiByYyA9IDA7CisKKwliYXJyaWVyKCk7IC8qIHN0YXR1cyBibG9jayBpcyB3cml0dGVuIHRvIGJ5IHRoZSBjaGlwICovCisKKwlpZiAoYnAtPmRlZl9hdHRfaWR4ICE9IGRlZl9zYi0+YXR0ZW5fc3RhdHVzX2Jsb2NrLmF0dG5fYml0c19pbmRleCkgeworCQlicC0+ZGVmX2F0dF9pZHggPSBkZWZfc2ItPmF0dGVuX3N0YXR1c19ibG9jay5hdHRuX2JpdHNfaW5kZXg7CisJCXJjIHw9IDE7CisJfQorCWlmIChicC0+ZGVmX2NfaWR4ICE9IGRlZl9zYi0+Y19kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCkgeworCQlicC0+ZGVmX2NfaWR4ID0gZGVmX3NiLT5jX2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4OworCQlyYyB8PSAyOworCX0KKwlpZiAoYnAtPmRlZl91X2lkeCAhPSBkZWZfc2ItPnVfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpIHsKKwkJYnAtPmRlZl91X2lkeCA9IGRlZl9zYi0+dV9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleDsKKwkJcmMgfD0gNDsKKwl9CisJaWYgKGJwLT5kZWZfeF9pZHggIT0gZGVmX3NiLT54X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KSB7CisJCWJwLT5kZWZfeF9pZHggPSBkZWZfc2ItPnhfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXg7CisJCXJjIHw9IDg7CisJfQorCWlmIChicC0+ZGVmX3RfaWR4ICE9IGRlZl9zYi0+dF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCkgeworCQlicC0+ZGVmX3RfaWR4ID0gZGVmX3NiLT50X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4OworCQlyYyB8PSAxNjsKKwl9CisJcmV0dXJuIHJjOworfQorCisvKgorICogc2xvdyBwYXRoIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQgYm54MnhfYXR0bl9pbnRfYXNzZXJ0ZWQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFzc2VydGVkKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwl1MzIgaWd1X2FkZHIgPSAoSUdVX0FERFJfQVRUTl9CSVRTX1NFVCArIElHVV9GVU5DX0JBU0UgKiBmdW5jKSAqIDg7CisJdTMyIGFldV9hZGRyID0gcG9ydCA/IE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18xIDoKKwkJCSAgICAgIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18wOworCXUzMiBuaWdfaW50X21hc2tfYWRkciA9IHBvcnQgPyBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQxIDoKKwkJCQkgICAgICAgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMDsKKworCWlmICh+YnAtPmFldV9tYXNrICYgKGFzc2VydGVkICYgMHhmZikpCisJCUJOWDJYX0VSUigiSUdVIEVSUk9SXG4iKTsKKwlpZiAoYnAtPmF0dG5fc3RhdGUgJiBhc3NlcnRlZCkKKwkJQk5YMlhfRVJSKCJJR1UgRVJST1JcbiIpOworCisJRFAoTkVUSUZfTVNHX0hXLCAiYWV1X21hc2sgJXggIG5ld2x5IGFzc2VydGVkICV4XG4iLAorCSAgIGJwLT5hZXVfbWFzaywgYXNzZXJ0ZWQpOworCWJwLT5hZXVfbWFzayAmPSB+KGFzc2VydGVkICYgMHhmZik7CisJRFAoTkVUSUZfTVNHX0hXLCAiYWZ0ZXIgbWFza2luZzogYWV1X21hc2sgJXhcbiIsIGJwLT5hZXVfbWFzayk7CisKKwlSRUdfV1IoYnAsIGFldV9hZGRyLCBicC0+YWV1X21hc2spOworCisJYnAtPmF0dG5fc3RhdGUgfD0gYXNzZXJ0ZWQ7CisKKwlpZiAoYXNzZXJ0ZWQgJiBBVFROX0hBUkRfV0lSRURfTUFTSykgeworCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX05JR19GT1JfRlVOQykgeworCisJCQkvKiBzYXZlIG5pZyBpbnRlcnJ1cHQgbWFzayAqLworCQkJYnAtPm5pZ19tYXNrID0gUkVHX1JEKGJwLCBuaWdfaW50X21hc2tfYWRkcik7CisJCQlSRUdfV1IoYnAsIG5pZ19pbnRfbWFza19hZGRyLCAwKTsKKworCQkJYm54MnhfbGlua19hdHRuKGJwKTsKKworCQkJLyogaGFuZGxlIHVuaWNvcmUgYXR0bj8gKi8KKwkJfQorCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX1NXX1RJTUVSXzRfRlVOQykKKwkJCURQKE5FVElGX01TR19IVywgIkFUVE5fU1dfVElNRVJfNF9GVU5DIVxuIik7CisKKwkJaWYgKGFzc2VydGVkICYgR1BJT18yX0ZVTkMpCisJCQlEUChORVRJRl9NU0dfSFcsICJHUElPXzJfRlVOQyFcbiIpOworCisJCWlmIChhc3NlcnRlZCAmIEdQSU9fM19GVU5DKQorCQkJRFAoTkVUSUZfTVNHX0hXLCAiR1BJT18zX0ZVTkMhXG4iKTsKKworCQlpZiAoYXNzZXJ0ZWQgJiBHUElPXzRfRlVOQykKKwkJCURQKE5FVElGX01TR19IVywgIkdQSU9fNF9GVU5DIVxuIik7CisKKwkJaWYgKHBvcnQgPT0gMCkgeworCQkJaWYgKGFzc2VydGVkICYgQVRUTl9HRU5FUkFMX0FUVE5fMSkgeworCQkJCURQKE5FVElGX01TR19IVywgIkFUVE5fR0VORVJBTF9BVFROXzEhXG4iKTsKKwkJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMSwgMHgwKTsKKwkJCX0KKwkJCWlmIChhc3NlcnRlZCAmIEFUVE5fR0VORVJBTF9BVFROXzIpIHsKKwkJCQlEUChORVRJRl9NU0dfSFcsICJBVFROX0dFTkVSQUxfQVRUTl8yIVxuIik7CisJCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzIsIDB4MCk7CisJCQl9CisJCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX0dFTkVSQUxfQVRUTl8zKSB7CisJCQkJRFAoTkVUSUZfTVNHX0hXLCAiQVRUTl9HRU5FUkFMX0FUVE5fMyFcbiIpOworCQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8zLCAweDApOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGFzc2VydGVkICYgQVRUTl9HRU5FUkFMX0FUVE5fNCkgeworCQkJCURQKE5FVElGX01TR19IVywgIkFUVE5fR0VORVJBTF9BVFROXzQhXG4iKTsKKwkJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNCwgMHgwKTsKKwkJCX0KKwkJCWlmIChhc3NlcnRlZCAmIEFUVE5fR0VORVJBTF9BVFROXzUpIHsKKwkJCQlEUChORVRJRl9NU0dfSFcsICJBVFROX0dFTkVSQUxfQVRUTl81IVxuIik7CisJCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzUsIDB4MCk7CisJCQl9CisJCQlpZiAoYXNzZXJ0ZWQgJiBBVFROX0dFTkVSQUxfQVRUTl82KSB7CisJCQkJRFAoTkVUSUZfTVNHX0hXLCAiQVRUTl9HRU5FUkFMX0FUVE5fNiFcbiIpOworCQkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl82LCAweDApOworCQkJfQorCQl9CisKKwl9IC8qIGlmIGhhcmR3aXJlZCAqLworCisJRFAoTkVUSUZfTVNHX0hXLCAiYWJvdXQgdG8gbWFzayAweCUwOHggYXQgSUdVIGFkZHIgMHgleFxuIiwKKwkgICBhc3NlcnRlZCwgQkFSX0lHVV9JTlRNRU0gKyBpZ3VfYWRkcik7CisJUkVHX1dSKGJwLCBCQVJfSUdVX0lOVE1FTSArIGlndV9hZGRyLCBhc3NlcnRlZCk7CisKKwkvKiBub3cgc2V0IGJhY2sgdGhlIG1hc2sgKi8KKwlpZiAoYXNzZXJ0ZWQgJiBBVFROX05JR19GT1JfRlVOQykKKwkJUkVHX1dSKGJwLCBuaWdfaW50X21hc2tfYWRkciwgYnAtPm5pZ19tYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQwKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhdHRuKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IHJlZ19vZmZzZXQ7CisJdTMyIHZhbDsKKworCXJlZ19vZmZzZXQgPSAocG9ydCA/IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCA6CisJCQkgICAgIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCk7CisKKwlpZiAoYXR0biAmIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81KSB7CisKKwkJdmFsID0gUkVHX1JEKGJwLCByZWdfb2Zmc2V0KTsKKwkJdmFsICY9IH5BRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNTsKKwkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOworCisJCUJOWDJYX0VSUigiU1BJTzUgaHcgYXR0ZW50aW9uXG4iKTsKKworCQlzd2l0Y2ggKGJwLT5jb21tb24uYm9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSykgeworCQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6CisJCQkvKiBGYW4gZmFpbHVyZSBhdHRlbnRpb24gKi8KKworCQkJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sZWQgYnkgR1BJTyAxICovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1cpOworCQkJLyogTG93IHBvd2VyIG1vZGUgaXMgY29udHJvbGVkIGJ5IEdQSU8gMiAqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XKTsKKwkJCS8qIG1hcmsgdGhlIGZhaWx1cmUgKi8KKwkJCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyAmPQorCQkJCQl+UE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTUFTSzsKKwkJCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyB8PQorCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOworCQkJU0hNRU1fV1IoYnAsCisJCQkJIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLgorCQkJCQkJCWV4dGVybmFsX3BoeV9jb25maWcsCisJCQkJIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisJCQkvKiBsb2cgdGhlIGZhaWx1cmUgKi8KKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkZhbiBGYWlsdXJlIG9uIE5ldHdvcmsiCisJCQkgICAgICAgIiBDb250cm9sbGVyICVzIGhhcyBjYXVzZWQgdGhlIGRyaXZlciB0byIKKwkJCSAgICAgICAiIHNodXRkb3duIHRoZSBjYXJkIHRvIHByZXZlbnQgcGVybWFuZW50IgorCQkJICAgICAgICIgZGFtYWdlLiAgUGxlYXNlIGNvbnRhY3QgRGVsbCBTdXBwb3J0IGZvciIKKwkJCSAgICAgICAiIGFzc2lzdGFuY2VcbiIsIGJwLT5kZXYtPm5hbWUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzApIHsKKworCQl2YWwgPSBSRUdfUkQoYnAsIHJlZ19vZmZzZXQpOworCQl2YWwgJj0gfihhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8wKTsKKwkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOworCisJCUJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgYXR0ZW50aW9uIHNldDAgMHgleFxuIiwKKwkJCSAgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzApKTsKKwkJYm54MnhfcGFuaWMoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYXR0bikKK3sKKwl1MzIgdmFsOworCisJaWYgKGF0dG4gJiBCTlgyWF9ET09SUV9BU1NFUlQpIHsKKworCQl2YWwgPSBSRUdfUkQoYnAsIERPUlFfUkVHX0RPUlFfSU5UX1NUU19DTFIpOworCQlCTlgyWF9FUlIoIkRCIGh3IGF0dGVudGlvbiAweCV4XG4iLCB2YWwpOworCQkvKiBET1JRIGRpc2NhcmQgYXR0ZW50aW9uICovCisJCWlmICh2YWwgJiAweDIpCisJCQlCTlgyWF9FUlIoIkZBVEFMIGVycm9yIGZyb20gRE9SUVxuIik7CisJfQorCisJaWYgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzEpIHsKKworCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCQlpbnQgcmVnX29mZnNldDsKKworCQlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzEgOgorCQkJCSAgICAgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8xKTsKKworCQl2YWwgPSBSRUdfUkQoYnAsIHJlZ19vZmZzZXQpOworCQl2YWwgJj0gfihhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8xKTsKKwkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOworCisJCUJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgYXR0ZW50aW9uIHNldDEgMHgleFxuIiwKKwkJCSAgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzEpKTsKKwkJYm54MnhfcGFuaWMoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYXR0bikKK3sKKwl1MzIgdmFsOworCisJaWYgKGF0dG4gJiBBRVVfSU5QVVRTX0FUVE5fQklUU19DRkNfSFdfSU5URVJSVVBUKSB7CisKKwkJdmFsID0gUkVHX1JEKGJwLCBDRkNfUkVHX0NGQ19JTlRfU1RTX0NMUik7CisJCUJOWDJYX0VSUigiQ0ZDIGh3IGF0dGVudGlvbiAweCV4XG4iLCB2YWwpOworCQkvKiBDRkMgZXJyb3IgYXR0ZW50aW9uICovCisJCWlmICh2YWwgJiAweDIpCisJCQlCTlgyWF9FUlIoIkZBVEFMIGVycm9yIGZyb20gQ0ZDXG4iKTsKKwl9CisKKwlpZiAoYXR0biAmIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1BYUF9IV19JTlRFUlJVUFQpIHsKKworCQl2YWwgPSBSRUdfUkQoYnAsIFBYUF9SRUdfUFhQX0lOVF9TVFNfQ0xSXzApOworCQlCTlgyWF9FUlIoIlBYUCBodyBhdHRlbnRpb24gMHgleFxuIiwgdmFsKTsKKwkJLyogUlFfVVNETURQX0ZJRk9fT1ZFUkZMT1cgKi8KKwkJaWYgKHZhbCAmIDB4MTgwMDApCisJCQlCTlgyWF9FUlIoIkZBVEFMIGVycm9yIGZyb20gUFhQXG4iKTsKKwl9CisKKwlpZiAoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMikgeworCisJCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJCWludCByZWdfb2Zmc2V0OworCisJCXJlZ19vZmZzZXQgPSAocG9ydCA/IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMiA6CisJCQkJICAgICBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzIpOworCisJCXZhbCA9IFJFR19SRChicCwgcmVnX29mZnNldCk7CisJCXZhbCAmPSB+KGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzIpOworCQlSRUdfV1IoYnAsIHJlZ19vZmZzZXQsIHZhbCk7CisKKwkJQk5YMlhfRVJSKCJGQVRBTCBIVyBibG9jayBhdHRlbnRpb24gc2V0MiAweCV4XG4iLAorCQkJICAoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMikpOworCQlibngyeF9wYW5pYygpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQzKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhdHRuKQoreworCXUzMiB2YWw7CisKKwlpZiAoYXR0biAmIEVWRVJFU1RfR0VOX0FUVE5fSU5fVVNFX01BU0spIHsKKworCQlpZiAoYXR0biAmIEJOWDJYX1BNRl9MSU5LX0FTU0VSVCkgeworCQkJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKworCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEyICsgZnVuYyo0LCAwKTsKKwkJCWJueDJ4X19saW5rX3N0YXR1c191cGRhdGUoYnApOworCQkJaWYgKFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9zdGF0dXMpICYKKwkJCQkJCQlEUlZfU1RBVFVTX1BNRikKKwkJCQlibngyeF9wbWZfdXBkYXRlKGJwKTsKKworCQl9IGVsc2UgaWYgKGF0dG4gJiBCTlgyWF9NQ19BU1NFUlRfQklUUykgeworCisJCQlCTlgyWF9FUlIoIk1DIGFzc2VydCFcbiIpOworCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEwLCAwKTsKKwkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl85LCAwKTsKKwkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl84LCAwKTsKKwkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl83LCAwKTsKKwkJCWJueDJ4X3BhbmljKCk7CisKKwkJfSBlbHNlIGlmIChhdHRuICYgQk5YMlhfTUNQX0FTU0VSVCkgeworCisJCQlCTlgyWF9FUlIoIk1DUCBhc3NlcnQhXG4iKTsKKwkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMSwgMCk7CisJCQlibngyeF9md19kdW1wKGJwKTsKKworCQl9IGVsc2UKKwkJCUJOWDJYX0VSUigiVW5rbm93biBIVyBhc3NlcnQhIChhdHRuIDB4JXgpXG4iLCBhdHRuKTsKKwl9CisKKwlpZiAoYXR0biAmIEVWRVJFU1RfTEFUQ0hFRF9BVFROX0lOX1VTRV9NQVNLKSB7CisJCUJOWDJYX0VSUigiTEFUQ0hFRCBhdHRlbnRpb24gMHglMDh4IChtYXNrZWQpXG4iLCBhdHRuKTsKKwkJaWYgKGF0dG4gJiBCTlgyWF9HUkNfVElNRU9VVCkgeworCQkJdmFsID0gQ0hJUF9JU19FMUgoYnApID8KKwkJCQlSRUdfUkQoYnAsIE1JU0NfUkVHX0dSQ19USU1FT1VUX0FUVE4pIDogMDsKKwkJCUJOWDJYX0VSUigiR1JDIHRpbWUtb3V0IDB4JTA4eFxuIiwgdmFsKTsKKwkJfQorCQlpZiAoYXR0biAmIEJOWDJYX0dSQ19SU1YpIHsKKwkJCXZhbCA9IENISVBfSVNfRTFIKGJwKSA/CisJCQkJUkVHX1JEKGJwLCBNSVNDX1JFR19HUkNfUlNWX0FUVE4pIDogMDsKKwkJCUJOWDJYX0VSUigiR1JDIHJlc2VydmVkIDB4JTA4eFxuIiwgdmFsKTsKKwkJfQorCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9DTFJfTEFUQ0hfU0lHTkFMLCAweDdmZik7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9hdHRuX2ludF9kZWFzc2VydGVkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBkZWFzc2VydGVkKQoreworCXN0cnVjdCBhdHRuX3JvdXRlIGF0dG47CisJc3RydWN0IGF0dG5fcm91dGUgZ3JvdXBfbWFzazsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBpbmRleDsKKwl1MzIgcmVnX2FkZHI7CisJdTMyIHZhbDsKKworCS8qIG5lZWQgdG8gdGFrZSBIVyBsb2NrIGJlY2F1c2UgTUNQIG9yIG90aGVyIHBvcnQgbWlnaHQgYWxzbworCSAgIHRyeSB0byBoYW5kbGUgdGhpcyBldmVudCAqLworCWJueDJ4X2xvY2tfYWxyKGJwKTsKKworCWF0dG4uc2lnWzBdID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzFfRlVOQ18wICsgcG9ydCo0KTsKKwlhdHRuLnNpZ1sxXSA9IFJFR19SRChicCwgTUlTQ19SRUdfQUVVX0FGVEVSX0lOVkVSVF8yX0ZVTkNfMCArIHBvcnQqNCk7CisJYXR0bi5zaWdbMl0gPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9BRlRFUl9JTlZFUlRfM19GVU5DXzAgKyBwb3J0KjQpOworCWF0dG4uc2lnWzNdID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzRfRlVOQ18wICsgcG9ydCo0KTsKKwlEUChORVRJRl9NU0dfSFcsICJhdHRuOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAorCSAgIGF0dG4uc2lnWzBdLCBhdHRuLnNpZ1sxXSwgYXR0bi5zaWdbMl0sIGF0dG4uc2lnWzNdKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9EWU5BTUlDX0FUVE5fR1JQUzsgaW5kZXgrKykgeworCQlpZiAoZGVhc3NlcnRlZCAmICgxIDw8IGluZGV4KSkgeworCQkJZ3JvdXBfbWFzayA9IGJwLT5hdHRuX2dyb3VwW2luZGV4XTsKKworCQkJRFAoTkVUSUZfTVNHX0hXLCAiZ3JvdXBbJWRdOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAorCQkJICAgaW5kZXgsIGdyb3VwX21hc2suc2lnWzBdLCBncm91cF9tYXNrLnNpZ1sxXSwKKwkJCSAgIGdyb3VwX21hc2suc2lnWzJdLCBncm91cF9tYXNrLnNpZ1szXSk7CisKKwkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQzKGJwLAorCQkJCQlhdHRuLnNpZ1szXSAmIGdyb3VwX21hc2suc2lnWzNdKTsKKwkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQxKGJwLAorCQkJCQlhdHRuLnNpZ1sxXSAmIGdyb3VwX21hc2suc2lnWzFdKTsKKwkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQyKGJwLAorCQkJCQlhdHRuLnNpZ1syXSAmIGdyb3VwX21hc2suc2lnWzJdKTsKKwkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQwKGJwLAorCQkJCQlhdHRuLnNpZ1swXSAmIGdyb3VwX21hc2suc2lnWzBdKTsKKworCQkJaWYgKChhdHRuLnNpZ1swXSAmIGdyb3VwX21hc2suc2lnWzBdICYKKwkJCQkJCUhXX1BSVFlfQVNTRVJUX1NFVF8wKSB8fAorCQkJICAgIChhdHRuLnNpZ1sxXSAmIGdyb3VwX21hc2suc2lnWzFdICYKKwkJCQkJCUhXX1BSVFlfQVNTRVJUX1NFVF8xKSB8fAorCQkJICAgIChhdHRuLnNpZ1syXSAmIGdyb3VwX21hc2suc2lnWzJdICYKKwkJCQkJCUhXX1BSVFlfQVNTRVJUX1NFVF8yKSkKKwkJCSAgICAgICBCTlgyWF9FUlIoIkZBVEFMIEhXIGJsb2NrIHBhcml0eSBhdHRlbnRpb25cbiIpOworCQl9CisJfQorCisJYm54MnhfdW5sb2NrX2FscihicCk7CisKKwlyZWdfYWRkciA9IChJR1VfQUREUl9BVFROX0JJVFNfQ0xSICsgSUdVX0ZVTkNfQkFTRSAqIEJQX0ZVTkMoYnApKSAqIDg7CisKKwl2YWwgPSB+ZGVhc3NlcnRlZDsKKy8qCURQKE5FVElGX01TR19JTlRSLCAid3JpdGUgMHglMDh4IHRvIElHVSBhZGRyIDB4JXhcbiIsCisJICAgdmFsLCBCQVJfSUdVX0lOVE1FTSArIHJlZ19hZGRyKTsgKi8KKwlSRUdfV1IoYnAsIEJBUl9JR1VfSU5UTUVNICsgcmVnX2FkZHIsIHZhbCk7CisKKwlpZiAoYnAtPmFldV9tYXNrICYgKGRlYXNzZXJ0ZWQgJiAweGZmKSkKKwkJQk5YMlhfRVJSKCJJR1UgQlVHIVxuIik7CisJaWYgKH5icC0+YXR0bl9zdGF0ZSAmIGRlYXNzZXJ0ZWQpCisJCUJOWDJYX0VSUigiSUdVIEJVRyFcbiIpOworCisJcmVnX2FkZHIgPSBwb3J0ID8gTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEgOgorCQkJICBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMDsKKworCURQKE5FVElGX01TR19IVywgImFldV9tYXNrICV4XG4iLCBicC0+YWV1X21hc2spOworCWJwLT5hZXVfbWFzayB8PSAoZGVhc3NlcnRlZCAmIDB4ZmYpOworCisJRFAoTkVUSUZfTVNHX0hXLCAibmV3IG1hc2sgJXhcbiIsIGJwLT5hZXVfbWFzayk7CisJUkVHX1dSKGJwLCByZWdfYWRkciwgYnAtPmFldV9tYXNrKTsKKworCURQKE5FVElGX01TR19IVywgImF0dG5fc3RhdGUgJXhcbiIsIGJwLT5hdHRuX3N0YXRlKTsKKwlicC0+YXR0bl9zdGF0ZSAmPSB+ZGVhc3NlcnRlZDsKKwlEUChORVRJRl9NU0dfSFcsICJuZXcgc3RhdGUgJXhcbiIsIGJwLT5hdHRuX3N0YXRlKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfYXR0bl9pbnQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwkvKiByZWFkIGxvY2FsIGNvcHkgb2YgYml0cyAqLworCXUzMiBhdHRuX2JpdHMgPSBicC0+ZGVmX3N0YXR1c19ibGstPmF0dGVuX3N0YXR1c19ibG9jay5hdHRuX2JpdHM7CisJdTMyIGF0dG5fYWNrID0gYnAtPmRlZl9zdGF0dXNfYmxrLT5hdHRlbl9zdGF0dXNfYmxvY2suYXR0bl9iaXRzX2FjazsKKwl1MzIgYXR0bl9zdGF0ZSA9IGJwLT5hdHRuX3N0YXRlOworCisJLyogbG9vayBmb3IgY2hhbmdlZCBiaXRzICovCisJdTMyIGFzc2VydGVkICAgPSAgYXR0bl9iaXRzICYgfmF0dG5fYWNrICYgfmF0dG5fc3RhdGU7CisJdTMyIGRlYXNzZXJ0ZWQgPSB+YXR0bl9iaXRzICYgIGF0dG5fYWNrICYgIGF0dG5fc3RhdGU7CisKKwlEUChORVRJRl9NU0dfSFcsCisJICAgImF0dG5fYml0cyAleCAgYXR0bl9hY2sgJXggIGFzc2VydGVkICV4ICBkZWFzc2VydGVkICV4XG4iLAorCSAgIGF0dG5fYml0cywgYXR0bl9hY2ssIGFzc2VydGVkLCBkZWFzc2VydGVkKTsKKworCWlmICh+KGF0dG5fYml0cyBeIGF0dG5fYWNrKSAmIChhdHRuX2JpdHMgXiBhdHRuX3N0YXRlKSkKKwkJQk5YMlhfRVJSKCJCQUQgYXR0ZW50aW9uIHN0YXRlXG4iKTsKKworCS8qIGhhbmRsZSBiaXRzIHRoYXQgd2VyZSByYWlzZWQgKi8KKwlpZiAoYXNzZXJ0ZWQpCisJCWJueDJ4X2F0dG5faW50X2Fzc2VydGVkKGJwLCBhc3NlcnRlZCk7CisKKwlpZiAoZGVhc3NlcnRlZCkKKwkJYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZChicCwgZGVhc3NlcnRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NwX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJueDJ4LCBzcF90YXNrKTsKKwl1MTYgc3RhdHVzOworCisKKwkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKi8KKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKKwkJRFAoQk5YMlhfTVNHX1NQLCAiY2FsbGVkIGJ1dCBpbnRyX3NlbSBub3QgMCwgcmV0dXJuaW5nXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN0YXR1cyA9IGJueDJ4X3VwZGF0ZV9kc2JfaWR4KGJwKTsKKy8qCWlmIChzdGF0dXMgPT0gMCkJCQkJICAgICAqLworLyoJCUJOWDJYX0VSUigic3B1cmlvdXMgc2xvd3BhdGggaW50ZXJydXB0IVxuIik7ICovCisKKwlEUChCTlgyWF9NU0dfU1AsICJnb3QgYSBzbG93cGF0aCBpbnRlcnJ1cHQgKHVwZGF0ZWQgJXgpXG4iLCBzdGF0dXMpOworCisJLyogSFcgYXR0ZW50aW9ucyAqLworCWlmIChzdGF0dXMgJiAweDEpCisJCWJueDJ4X2F0dG5faW50KGJwKTsKKworCS8qIENTdG9ybSBldmVudHM6IHF1ZXJ5X3N0YXRzLCBwb3J0IGRlbGV0ZSByYW1yb2QgKi8KKwlpZiAoc3RhdHVzICYgMHgyKQorCQlicC0+c3RhdHNfcGVuZGluZyA9IDA7CisKKwlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQVRURU5USU9OX0lELCBicC0+ZGVmX2F0dF9pZHgsCisJCSAgICAgSUdVX0lOVF9OT1AsIDEpOworCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBVU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdV9pZHgpLAorCQkgICAgIElHVV9JTlRfTk9QLCAxKTsKKwlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQ1NUT1JNX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX2NfaWR4KSwKKwkJICAgICBJR1VfSU5UX05PUCwgMSk7CisJYm54MnhfYWNrX3NiKGJwLCBERUZfU0JfSUQsIFhTVE9STV9JRCwgbGUxNl90b19jcHUoYnAtPmRlZl94X2lkeCksCisJCSAgICAgSUdVX0lOVF9OT1AsIDEpOworCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBUU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdF9pZHgpLAorCQkgICAgIElHVV9JTlRfRU5BQkxFLCAxKTsKKworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYm54MnhfbXNpeF9zcF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKi8KKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKKwkJRFAoQk5YMlhfTVNHX1NQLCAiY2FsbGVkIGJ1dCBpbnRyX3NlbSBub3QgMCwgcmV0dXJuaW5nXG4iKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBYU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCisJCXJldHVybiBJUlFfSEFORExFRDsKKyNlbmRpZgorCisJc2NoZWR1bGVfd29yaygmYnAtPnNwX3Rhc2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBlbmQgb2Ygc2xvdyBwYXRoICovCisKKy8qIFN0YXRpc3RpY3MgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTWFjcm9zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzdW1baGk6bG9dICs9IGFkZFtoaTpsb10gKi8KKyNkZWZpbmUgQUREXzY0KHNfaGksIGFfaGksIHNfbG8sIGFfbG8pIFwKKwlkbyB7IFwKKwkJc19sbyArPSBhX2xvOyBcCisJCXNfaGkgKz0gYV9oaSArIChzX2xvIDwgYV9sbykgPyAxIDogMDsgXAorCX0gd2hpbGUgKDApCisKKy8qIGRpZmZlcmVuY2UgPSBtaW51ZW5kIC0gc3VidHJhaGVuZCAqLworI2RlZmluZSBESUZGXzY0KGRfaGksIG1faGksIHNfaGksIGRfbG8sIG1fbG8sIHNfbG8pIFwKKwlkbyB7IFwKKwkJaWYgKG1fbG8gPCBzX2xvKSB7IFwKKwkJCS8qIHVuZGVyZmxvdyAqLyBcCisJCQlkX2hpID0gbV9oaSAtIHNfaGk7IFwKKwkJCWlmIChkX2hpID4gMCkgeyBcCisJCQkvKiB3ZSBjYW4gJ2xvYW4nIDEgKi8gXAorCQkJCWRfaGktLTsgXAorCQkJCWRfbG8gPSBtX2xvICsgKFVJTlRfTUFYIC0gc19sbykgKyAxOyBcCisJCQl9IGVsc2UgeyBcCisJCQkvKiBtX2hpIDw9IHNfaGkgKi8gXAorCQkJCWRfaGkgPSAwOyBcCisJCQkJZF9sbyA9IDA7IFwKKwkJCX0gXAorCQl9IGVsc2UgeyBcCisJCQkvKiBtX2xvID49IHNfbG8gKi8gXAorCQkJaWYgKG1faGkgPCBzX2hpKSB7IFwKKwkJCQlkX2hpID0gMDsgXAorCQkJCWRfbG8gPSAwOyBcCisJCQl9IGVsc2UgeyBcCisJCQkvKiBtX2hpID49IHNfaGkgKi8gXAorCQkJCWRfaGkgPSBtX2hpIC0gc19oaTsgXAorCQkJCWRfbG8gPSBtX2xvIC0gc19sbzsgXAorCQkJfSBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVVBEQVRFX1NUQVQ2NChzLCB0KSBcCisJZG8geyBcCisJCURJRkZfNjQoZGlmZi5oaSwgbmV3LT5zIyNfaGksIHBzdGF0cy0+bWFjX3N0eFswXS50IyNfaGksIFwKKwkJCWRpZmYubG8sIG5ldy0+cyMjX2xvLCBwc3RhdHMtPm1hY19zdHhbMF0udCMjX2xvKTsgXAorCQlwc3RhdHMtPm1hY19zdHhbMF0udCMjX2hpID0gbmV3LT5zIyNfaGk7IFwKKwkJcHN0YXRzLT5tYWNfc3R4WzBdLnQjI19sbyA9IG5ldy0+cyMjX2xvOyBcCisJCUFERF82NChwc3RhdHMtPm1hY19zdHhbMV0udCMjX2hpLCBkaWZmLmhpLCBcCisJCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0udCMjX2xvLCBkaWZmLmxvKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVVBEQVRFX1NUQVQ2NF9OSUcocywgdCkgXAorCWRvIHsgXAorCQlESUZGXzY0KGRpZmYuaGksIG5ldy0+cyMjX2hpLCBvbGQtPnMjI19oaSwgXAorCQkJZGlmZi5sbywgbmV3LT5zIyNfbG8sIG9sZC0+cyMjX2xvKTsgXAorCQlBRERfNjQoZXN0YXRzLT50IyNfaGksIGRpZmYuaGksIFwKKwkJICAgICAgIGVzdGF0cy0+dCMjX2xvLCBkaWZmLmxvKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIHN1bVtoaTpsb10gKz0gYWRkICovCisjZGVmaW5lIEFERF9FWFRFTkRfNjQoc19oaSwgc19sbywgYSkgXAorCWRvIHsgXAorCQlzX2xvICs9IGE7IFwKKwkJc19oaSArPSAoc19sbyA8IGEpID8gMSA6IDA7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFVQREFURV9FWFRFTkRfU1RBVChzKSBcCisJZG8geyBcCisJCUFERF9FWFRFTkRfNjQocHN0YXRzLT5tYWNfc3R4WzFdLnMjI19oaSwgXAorCQkJICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnMjI19sbywgXAorCQkJICAgICAgbmV3LT5zKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVVBEQVRFX0VYVEVORF9UU1RBVChzLCB0KSBcCisJZG8geyBcCisJCWRpZmYgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5zKSAtIG9sZF90Y2xpZW50LT5zOyBcCisJCW9sZF90Y2xpZW50LT5zID0gbGUzMl90b19jcHUodGNsaWVudC0+cyk7IFwKKwkJQUREX0VYVEVORF82NChmc3RhdHMtPnQjI19oaSwgZnN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBVUERBVEVfRVhURU5EX1hTVEFUKHMsIHQpIFwKKwlkbyB7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnMpIC0gb2xkX3hjbGllbnQtPnM7IFwKKwkJb2xkX3hjbGllbnQtPnMgPSBsZTMyX3RvX2NwdSh4Y2xpZW50LT5zKTsgXAorCQlBRERfRVhURU5EXzY0KGZzdGF0cy0+dCMjX2hpLCBmc3RhdHMtPnQjI19sbywgZGlmZik7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogR2VuZXJhbCBzZXJ2aWNlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbmxpbmUgbG9uZyBibngyeF9oaWxvKHUzMiAqaGlyZWYpCit7CisJdTMyIGxvID0gKihoaXJlZiArIDEpOworI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQorCXUzMiBoaSA9ICpoaXJlZjsKKworCXJldHVybiBISUxPX1U2NChoaSwgbG8pOworI2Vsc2UKKwlyZXR1cm4gbG87CisjZW5kaWYKK30KKworLyoKKyAqIEluaXQgc2VydmljZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCBibngyeF9zdG9ybV9zdGF0c19pbml0KHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKworCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSwgMSk7CisJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCSAgICAgICBYU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpICsgNCwgMCk7CisKKwlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArIFRTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYyksIDEpOworCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSArIDQsIDApOworCisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpLCAwKTsKKwlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJICAgICAgIENTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYykgKyA0LCAwKTsKKworCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgWFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSwKKwkgICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOworCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgWFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSArIDQsCisJICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKKworCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgVFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSwKKwkgICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOworCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgVFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSArIDQsCisJICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc3Rvcm1fc3RhdHNfcG9zdChzdHJ1Y3QgYm54MnggKmJwKQoreworCWlmICghYnAtPnN0YXRzX3BlbmRpbmcpIHsKKwkJc3RydWN0IGV0aF9xdWVyeV9yYW1yb2RfZGF0YSByYW1yb2RfZGF0YSA9IHswfTsKKwkJaW50IHJjOworCisJCXJhbXJvZF9kYXRhLmRydl9jb3VudGVyID0gYnAtPnN0YXRzX2NvdW50ZXIrKzsKKwkJcmFtcm9kX2RhdGEuY29sbGVjdF9wb3J0XzFiID0gYnAtPnBvcnQucG1mID8gMSA6IDA7CisJCXJhbXJvZF9kYXRhLmN0cl9pZF92ZWN0b3IgPSAoMSA8PCBCUF9DTF9JRChicCkpOworCisJCXJjID0gYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU1RBVF9RVUVSWSwgMCwKKwkJCQkgICAoKHUzMiAqKSZyYW1yb2RfZGF0YSlbMV0sCisJCQkJICAgKCh1MzIgKikmcmFtcm9kX2RhdGEpWzBdLCAwKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCS8qIHN0YXRzIHJhbXJvZCBoYXMgaXQncyBvd24gc2xvdCBvbiB0aGUgc3BxICovCisJCQlicC0+c3BxX2xlZnQrKzsKKwkJCWJwLT5zdGF0c19wZW5kaW5nID0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisKKwlicC0+ZXhlY3V0ZXJfaWR4ID0gMDsKKwlicC0+c3RhdHNfY291bnRlciA9IDA7CisKKwkvKiBwb3J0IHN0YXRzICovCisJaWYgKCFCUF9OT01DUChicCkpCisJCWJwLT5wb3J0LnBvcnRfc3R4ID0gU0hNRU1fUkQoYnAsIHBvcnRfbWJbcG9ydF0ucG9ydF9zdHgpOworCWVsc2UKKwkJYnAtPnBvcnQucG9ydF9zdHggPSAwOworCURQKEJOWDJYX01TR19TVEFUUywgInBvcnRfc3R4IDB4JXhcbiIsIGJwLT5wb3J0LnBvcnRfc3R4KTsKKworCW1lbXNldCgmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMpLCAwLCBzaXplb2Yoc3RydWN0IG5pZ19zdGF0cykpOworCWJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuYnJiX2Rpc2NhcmQgPQorCQkJUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVQwX0JSQl9ESVNDQVJEICsgcG9ydCoweDM4KTsKKwlSRUdfUkRfRE1BRShicCwgTklHX1JFR19TVEFUMF9FR1JFU1NfTUFDX1BLVDAgKyBwb3J0KjB4NTAsCisJCSAgICAmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuZWdyZXNzX21hY19wa3QwX2xvKSwgMik7CisJUkVHX1JEX0RNQUUoYnAsIE5JR19SRUdfU1RBVDBfRUdSRVNTX01BQ19QS1QxICsgcG9ydCoweDUwLAorCQkgICAgJihicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmVncmVzc19tYWNfcGt0MV9sbyksIDIpOworCisJLyogZnVuY3Rpb24gc3RhdHMgKi8KKwltZW1zZXQoJmJwLT5kZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKwltZW1zZXQoJmJwLT5vbGRfdGNsaWVudCwgMCwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOworCW1lbXNldCgmYnAtPm9sZF94Y2xpZW50LCAwLCBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CisJbWVtc2V0KCZicC0+ZXRoX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2V0aF9zdGF0cykpOworCisJYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRUQ7CisJaWYgKElTX0UxSE1GKGJwKSAmJiBicC0+cG9ydC5wbWYgJiYgYnAtPnBvcnQucG9ydF9zdHgpCisJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfUE1GKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfaHdfc3RhdHNfcG9zdChzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWUgPSAmYnAtPnN0YXRzX2RtYWU7CisJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOworCisJKnN0YXRzX2NvbXAgPSBETUFFX0NPTVBfVkFMOworCisJLyogbG9hZGVyICovCisJaWYgKGJwLT5leGVjdXRlcl9pZHgpIHsKKwkJaW50IGxvYWRlcl9pZHggPSBQTUZfRE1BRV9DKGJwKTsKKworCQltZW1zZXQoZG1hZSwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFlX2NvbW1hbmQpKTsKKworCQlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAorCQkJCURNQUVfQ01EX0NfRFNUX0dSQyB8IERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJCQlETUFFX0NNRF9EU1RfUkVTRVQgfAorI2lmZGVmIF9fQklHX0VORElBTgorCQkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJCQlETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CisjZW5kaWYKKwkJCQkoQlBfUE9SVChicCkgPyBETUFFX0NNRF9QT1JUXzEgOgorCQkJCQkgICAgICAgRE1BRV9DTURfUE9SVF8wKSB8CisJCQkJKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCQlkbWFlLT5zcmNfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBkbWFlWzBdKSk7CisJCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGRtYWVbMF0pKTsKKwkJZG1hZS0+ZHN0X2FkZHJfbG8gPSAoRE1BRV9SRUdfQ01EX01FTSArCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkgKgorCQkJCSAgICAgKGxvYWRlcl9pZHggKyAxKSkgPj4gMjsKKwkJZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOworCQlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkgPj4gMjsKKwkJaWYgKENISVBfSVNfRTEoYnApKQorCQkJZG1hZS0+bGVuLS07CisJCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeCArIDFdID4+IDI7CisJCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmNvbXBfdmFsID0gMTsKKworCQkqc3RhdHNfY29tcCA9IDA7CisJCWJueDJ4X3Bvc3RfZG1hZShicCwgZG1hZSwgbG9hZGVyX2lkeCk7CisKKwl9IGVsc2UgaWYgKGJwLT5mdW5jX3N0eCkgeworCQkqc3RhdHNfY29tcCA9IDA7CisJCWJueDJ4X3Bvc3RfZG1hZShicCwgZG1hZSwgSU5JVF9ETUFFX0MoYnApKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfc3RhdHNfY29tcChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKKwlpbnQgY250ID0gMTA7CisKKwltaWdodF9zbGVlcCgpOworCXdoaWxlICgqc3RhdHNfY29tcCAhPSBETUFFX0NPTVBfVkFMKSB7CisJCW1zbGVlcCgxKTsKKwkJaWYgKCFjbnQpIHsKKwkJCUJOWDJYX0VSUigidGltZW91dCB3YWl0aW5nIGZvciBzdGF0cyBmaW5pc2hlZFxuIik7CisJCQlicmVhazsKKwkJfQorCQljbnQtLTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBTdGF0aXN0aWNzIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfcG1mX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWU7CisJdTMyIG9wY29kZTsKKwlpbnQgbG9hZGVyX2lkeCA9IFBNRl9ETUFFX0MoYnApOworCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKKworCS8qIHNhbml0eSAqLworCWlmICghSVNfRTFITUYoYnApIHx8ICFicC0+cG9ydC5wbWYgfHwgIWJwLT5wb3J0LnBvcnRfc3R4KSB7CisJCUJOWDJYX0VSUigiQlVHIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlicC0+ZXhlY3V0ZXJfaWR4ID0gMDsKKworCW9wY29kZSA9IChETUFFX0NNRF9TUkNfR1JDIHwgRE1BRV9DTURfRFNUX1BDSSB8CisJCSAgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkgIERNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCSAgRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8CisjZWxzZQorCQkgIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkgIChCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAorCQkgIChCUF9FMUhWTihicCkgPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKKworCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKKwlkbWFlLT5vcGNvZGUgPSAob3Bjb2RlIHwgRE1BRV9DTURfQ19EU1RfR1JDKTsKKwlkbWFlLT5zcmNfYWRkcl9sbyA9IGJwLT5wb3J0LnBvcnRfc3R4ID4+IDI7CisJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOworCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpKTsKKwlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBwb3J0X3N0YXRzKSk7CisJZG1hZS0+bGVuID0gRE1BRV9MRU4zMl9SRF9NQVg7CisJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOworCWRtYWUtPmNvbXBfYWRkcl9oaSA9IDA7CisJZG1hZS0+Y29tcF92YWwgPSAxOworCisJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCWRtYWUtPm9wY29kZSA9IChvcGNvZGUgfCBETUFFX0NNRF9DX0RTVF9QQ0kpOworCWRtYWUtPnNyY19hZGRyX2xvID0gKGJwLT5wb3J0LnBvcnRfc3R4ID4+IDIpICsgRE1BRV9MRU4zMl9SRF9NQVg7CisJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOworCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpICsKKwkJCQkgICBETUFFX0xFTjMyX1JEX01BWCAqIDQpOworCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpICsKKwkJCQkgICBETUFFX0xFTjMyX1JEX01BWCAqIDQpOworCWRtYWUtPmxlbiA9IChzaXplb2Yoc3RydWN0IGhvc3RfcG9ydF9zdGF0cykgPj4gMikgLSBETUFFX0xFTjMyX1JEX01BWDsKKwlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCisJKnN0YXRzX2NvbXAgPSAwOworCWJueDJ4X2h3X3N0YXRzX3Bvc3QoYnApOworCWJueDJ4X3N0YXRzX2NvbXAoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9wb3J0X3N0YXRzX2luaXQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IHZuID0gQlBfRTFIVk4oYnApOworCXUzMiBvcGNvZGU7CisJaW50IGxvYWRlcl9pZHggPSBQTUZfRE1BRV9DKGJwKTsKKwl1MzIgbWFjX2FkZHI7CisJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOworCisJLyogc2FuaXR5ICovCisJaWYgKCFicC0+bGlua192YXJzLmxpbmtfdXAgfHwgIWJwLT5wb3J0LnBtZikgeworCQlCTlgyWF9FUlIoIkJVRyFcbiIpOworCQlyZXR1cm47CisJfQorCisJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CisKKwkvKiBNQ1AgKi8KKwlvcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAorCQkgIERNQUVfQ01EX0NfRFNUX0dSQyB8IERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJICBETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAorI2lmZGVmIF9fQklHX0VORElBTgorCQkgIERNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJICBETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CisjZW5kaWYKKwkJICAocG9ydCA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAorCQkgICh2biA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCisJaWYgKGJwLT5wb3J0LnBvcnRfc3R4KSB7CisKKwkJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCQlkbWFlLT5vcGNvZGUgPSBvcGNvZGU7CisJCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpKTsKKwkJZG1hZS0+c3JjX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykpOworCQlkbWFlLT5kc3RfYWRkcl9sbyA9IGJwLT5wb3J0LnBvcnRfc3R4ID4+IDI7CisJCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKKwkJZG1hZS0+bGVuID0gc2l6ZW9mKHN0cnVjdCBob3N0X3BvcnRfc3RhdHMpID4+IDI7CisJCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKKwkJZG1hZS0+Y29tcF92YWwgPSAxOworCX0KKworCWlmIChicC0+ZnVuY19zdHgpIHsKKworCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKKwkJZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZnVuY19zdGF0cykpOworCQlkbWFlLT5zcmNfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmdW5jX3N0YXRzKSk7CisJCWRtYWUtPmRzdF9hZGRyX2xvID0gYnAtPmZ1bmNfc3R4ID4+IDI7CisJCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKKwkJZG1hZS0+bGVuID0gc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpID4+IDI7CisJCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKKwkJZG1hZS0+Y29tcF92YWwgPSAxOworCX0KKworCS8qIE1BQyAqLworCW9wY29kZSA9IChETUFFX0NNRF9TUkNfR1JDIHwgRE1BRV9DTURfRFNUX1BDSSB8CisJCSAgRE1BRV9DTURfQ19EU1RfR1JDIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkgIERNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCSAgRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8CisjZWxzZQorCQkgIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkgIChwb3J0ID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCSAgKHZuIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisKKwlpZiAoYnAtPmxpbmtfdmFycy5tYWNfdHlwZSA9PSBNQUNfVFlQRV9CTUFDKSB7CisKKwkJbWFjX2FkZHIgPSAocG9ydCA/IE5JR19SRUdfSU5HUkVTU19CTUFDMV9NRU0gOgorCQkJCSAgIE5JR19SRUdfSU5HUkVTU19CTUFDMF9NRU0pOworCisJCS8qIEJJR01BQ19SRUdJU1RFUl9UWF9TVEFUX0dUUEtUIC4uCisJCSAgIEJJR01BQ19SRUdJU1RFUl9UWF9TVEFUX0dUQllUICovCisJCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKKwkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOworCQlkbWFlLT5zcmNfYWRkcl9sbyA9IChtYWNfYWRkciArCisJCQkJICAgICBCSUdNQUNfUkVHSVNURVJfVFhfU1RBVF9HVFBLVCkgPj4gMjsKKwkJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOworCQlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpKTsKKwkJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSk7CisJCWRtYWUtPmxlbiA9ICg4ICsgQklHTUFDX1JFR0lTVEVSX1RYX1NUQVRfR1RCWVQgLQorCQkJICAgICBCSUdNQUNfUkVHSVNURVJfVFhfU1RBVF9HVFBLVCkgPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOworCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCQlkbWFlLT5jb21wX3ZhbCA9IDE7CisKKwkJLyogQklHTUFDX1JFR0lTVEVSX1JYX1NUQVRfR1I2NCAuLgorCQkgICBCSUdNQUNfUkVHSVNURVJfUlhfU1RBVF9HUklQSiAqLworCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKKwkJZG1hZS0+c3JjX2FkZHJfbG8gPSAobWFjX2FkZHIgKworCQkJCSAgICAgQklHTUFDX1JFR0lTVEVSX1JYX1NUQVRfR1I2NCkgPj4gMjsKKwkJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOworCQlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpICsKKwkJCQlvZmZzZXRvZihzdHJ1Y3QgYm1hY19zdGF0cywgcnhfc3RhdF9ncjY0X2xvKSk7CisJCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKworCQkJCW9mZnNldG9mKHN0cnVjdCBibWFjX3N0YXRzLCByeF9zdGF0X2dyNjRfbG8pKTsKKwkJZG1hZS0+bGVuID0gKDggKyBCSUdNQUNfUkVHSVNURVJfUlhfU1RBVF9HUklQSiAtCisJCQkgICAgIEJJR01BQ19SRUdJU1RFUl9SWF9TVEFUX0dSNjQpID4+IDI7CisJCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKKwkJZG1hZS0+Y29tcF92YWwgPSAxOworCisJfSBlbHNlIGlmIChicC0+bGlua192YXJzLm1hY190eXBlID09IE1BQ19UWVBFX0VNQUMpIHsKKworCQltYWNfYWRkciA9IChwb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzApOworCisJCS8qIEVNQUNfUkVHX0VNQUNfUlhfU1RBVF9BQyAoRU1BQ19SRUdfRU1BQ19SWF9TVEFUX0FDX0NPVU5UKSovCisJCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKKwkJZG1hZS0+b3Bjb2RlID0gb3Bjb2RlOworCQlkbWFlLT5zcmNfYWRkcl9sbyA9IChtYWNfYWRkciArCisJCQkJICAgICBFTUFDX1JFR19FTUFDX1JYX1NUQVRfQUMpID4+IDI7CisJCWRtYWUtPnNyY19hZGRyX2hpID0gMDsKKwkJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSk7CisJCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykpOworCQlkbWFlLT5sZW4gPSBFTUFDX1JFR19FTUFDX1JYX1NUQVRfQUNfQ09VTlQ7CisJCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKKwkJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKKwkJZG1hZS0+Y29tcF92YWwgPSAxOworCisJCS8qIEVNQUNfUkVHX0VNQUNfUlhfU1RBVF9BQ18yOCAqLworCQlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKKwkJZG1hZS0+c3JjX2FkZHJfbG8gPSAobWFjX2FkZHIgKworCQkJCSAgICAgRU1BQ19SRUdfRU1BQ19SWF9TVEFUX0FDXzI4KSA+PiAyOworCQlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19zdGF0cykgKworCQkgICAgIG9mZnNldG9mKHN0cnVjdCBlbWFjX3N0YXRzLCByeF9zdGF0X2ZhbHNlY2FycmllcmVycm9ycykpOworCQlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpICsKKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgZW1hY19zdGF0cywgcnhfc3RhdF9mYWxzZWNhcnJpZXJlcnJvcnMpKTsKKwkJZG1hZS0+bGVuID0gMTsKKwkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOworCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCQlkbWFlLT5jb21wX3ZhbCA9IDE7CisKKwkJLyogRU1BQ19SRUdfRU1BQ19UWF9TVEFUX0FDIChFTUFDX1JFR19FTUFDX1RYX1NUQVRfQUNfQ09VTlQpKi8KKwkJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCQlkbWFlLT5vcGNvZGUgPSBvcGNvZGU7CisJCWRtYWUtPnNyY19hZGRyX2xvID0gKG1hY19hZGRyICsKKwkJCQkgICAgIEVNQUNfUkVHX0VNQUNfVFhfU1RBVF9BQykgPj4gMjsKKwkJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOworCQlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtYWNfc3RhdHMpICsKKwkJCW9mZnNldG9mKHN0cnVjdCBlbWFjX3N0YXRzLCB0eF9zdGF0X2lmaGNvdXRvY3RldHMpKTsKKwkJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX3N0YXRzKSArCisJCQlvZmZzZXRvZihzdHJ1Y3QgZW1hY19zdGF0cywgdHhfc3RhdF9pZmhjb3V0b2N0ZXRzKSk7CisJCWRtYWUtPmxlbiA9IEVNQUNfUkVHX0VNQUNfVFhfU1RBVF9BQ19DT1VOVDsKKwkJZG1hZS0+Y29tcF9hZGRyX2xvID0gZG1hZV9yZWdfZ29fY1tsb2FkZXJfaWR4XSA+PiAyOworCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCQlkbWFlLT5jb21wX3ZhbCA9IDE7CisJfQorCisJLyogTklHICovCisJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCWRtYWUtPm9wY29kZSA9IG9wY29kZTsKKwlkbWFlLT5zcmNfYWRkcl9sbyA9IChwb3J0ID8gTklHX1JFR19TVEFUMV9CUkJfRElTQ0FSRCA6CisJCQkJICAgIE5JR19SRUdfU1RBVDBfQlJCX0RJU0NBUkQpID4+IDI7CisJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOworCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG5pZ19zdGF0cykpOworCWRtYWUtPmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG5pZ19zdGF0cykpOworCWRtYWUtPmxlbiA9IChzaXplb2Yoc3RydWN0IG5pZ19zdGF0cykgLSA0KnNpemVvZih1MzIpKSA+PiAyOworCWRtYWUtPmNvbXBfYWRkcl9sbyA9IGRtYWVfcmVnX2dvX2NbbG9hZGVyX2lkeF0gPj4gMjsKKwlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCWRtYWUtPmNvbXBfdmFsID0gMTsKKworCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKKwlkbWFlLT5vcGNvZGUgPSBvcGNvZGU7CisJZG1hZS0+c3JjX2FkZHJfbG8gPSAocG9ydCA/IE5JR19SRUdfU1RBVDFfRUdSRVNTX01BQ19QS1QwIDoKKwkJCQkgICAgTklHX1JFR19TVEFUMF9FR1JFU1NfTUFDX1BLVDApID4+IDI7CisJZG1hZS0+c3JjX2FkZHJfaGkgPSAwOworCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG5pZ19zdGF0cykgKworCQkJb2Zmc2V0b2Yoc3RydWN0IG5pZ19zdGF0cywgZWdyZXNzX21hY19wa3QwX2xvKSk7CisJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnX3N0YXRzKSArCisJCQlvZmZzZXRvZihzdHJ1Y3QgbmlnX3N0YXRzLCBlZ3Jlc3NfbWFjX3BrdDBfbG8pKTsKKwlkbWFlLT5sZW4gPSAoMipzaXplb2YodTMyKSkgPj4gMjsKKwlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7CisJZG1hZS0+Y29tcF9hZGRyX2hpID0gMDsKKwlkbWFlLT5jb21wX3ZhbCA9IDE7CisKKwlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJZG1hZS0+b3Bjb2RlID0gKERNQUVfQ01EX1NSQ19HUkMgfCBETUFFX0NNRF9EU1RfUENJIHwKKwkJCURNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJCURNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKyNlbHNlCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CisjZW5kaWYKKwkJCShwb3J0ID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCQkodm4gPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKKwlkbWFlLT5zcmNfYWRkcl9sbyA9IChwb3J0ID8gTklHX1JFR19TVEFUMV9FR1JFU1NfTUFDX1BLVDEgOgorCQkJCSAgICBOSUdfUkVHX1NUQVQwX0VHUkVTU19NQUNfUEtUMSkgPj4gMjsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgbmlnX3N0YXRzKSArCisJCQlvZmZzZXRvZihzdHJ1Y3QgbmlnX3N0YXRzLCBlZ3Jlc3NfbWFjX3BrdDFfbG8pKTsKKwlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBuaWdfc3RhdHMpICsKKwkJCW9mZnNldG9mKHN0cnVjdCBuaWdfc3RhdHMsIGVncmVzc19tYWNfcGt0MV9sbykpOworCWRtYWUtPmxlbiA9ICgyKnNpemVvZih1MzIpKSA+PiAyOworCWRtYWUtPmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKKwlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CisKKwkqc3RhdHNfY29tcCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2Z1bmNfc3RhdHNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWUgPSAmYnAtPnN0YXRzX2RtYWU7CisJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOworCisJLyogc2FuaXR5ICovCisJaWYgKCFicC0+ZnVuY19zdHgpIHsKKwkJQk5YMlhfRVJSKCJCVUchXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWJwLT5leGVjdXRlcl9pZHggPSAwOworCW1lbXNldChkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOworCisJZG1hZS0+b3Bjb2RlID0gKERNQUVfQ01EX1NSQ19QQ0kgfCBETUFFX0NNRF9EU1RfR1JDIHwKKwkJCURNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJCURNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKyNlbHNlCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CisjZW5kaWYKKwkJCShCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAorCQkJKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ1bmNfc3RhdHMpKTsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmdW5jX3N0YXRzKSk7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBicC0+ZnVuY19zdHggPj4gMjsKKwlkbWFlLT5kc3RfYWRkcl9oaSA9IDA7CisJZG1hZS0+bGVuID0gc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpID4+IDI7CisJZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKKwlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKKworCSpzdGF0c19jb21wID0gMDsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfc3RhcnQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpZiAoYnAtPnBvcnQucG1mKQorCQlibngyeF9wb3J0X3N0YXRzX2luaXQoYnApOworCisJZWxzZSBpZiAoYnAtPmZ1bmNfc3R4KQorCQlibngyeF9mdW5jX3N0YXRzX2luaXQoYnApOworCisJYm54MnhfaHdfc3RhdHNfcG9zdChicCk7CisJYm54Mnhfc3Rvcm1fc3RhdHNfcG9zdChicCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX3BtZl9zdGFydChzdHJ1Y3QgYm54MnggKmJwKQoreworCWJueDJ4X3N0YXRzX2NvbXAoYnApOworCWJueDJ4X3N0YXRzX3BtZl91cGRhdGUoYnApOworCWJueDJ4X3N0YXRzX3N0YXJ0KGJwKTsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfcmVzdGFydChzdHJ1Y3QgYm54MnggKmJwKQoreworCWJueDJ4X3N0YXRzX2NvbXAoYnApOworCWJueDJ4X3N0YXRzX3N0YXJ0KGJwKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfYm1hY19zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgYm1hY19zdGF0cyAqbmV3ID0gYm54Mnhfc3AoYnAsIG1hY19zdGF0cy5ibWFjX3N0YXRzKTsKKwlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7CisJc3RydWN0IHJlZ3BhaXIgZGlmZjsKKworCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncmVyYiwgcnhfc3RhdF9pZmhjaW5iYWRvY3RldHMpOworCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncmZjcywgcnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnMpOworCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncnVuZCwgcnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0cyk7CisJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyb3ZyLCByeF9zdGF0X2RvdDNzdGF0c2ZyYW1lc3Rvb2xvbmcpOworCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncmZyZywgcnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JqYnIsIHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnMpOworCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncnhwZiwgcnhfc3RhdF9ibWFjX3hwZik7CisJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeGNmLCByeF9zdGF0X2JtYWNfeGNmKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZCk7CisJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeHBmLCByeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3R4cGYsIHR4X3N0YXRfb3V0eG9mZnNlbnQpOworCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndHhwZiwgdHhfc3RhdF9mbG93Y29udHJvbGRvbmUpOworCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDY0LCB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHMpOworCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDEyNywKKwkJCQl0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjVvY3RldHN0bzEyN29jdGV0cyk7CisJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0MjU1LAorCQkJCXR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMjhvY3RldHN0bzI1NW9jdGV0cyk7CisJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0NTExLAorCQkJCXR4X3N0YXRfZXRoZXJzdGF0c3BrdHMyNTZvY3RldHN0bzUxMW9jdGV0cyk7CisJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0MTAyMywKKwkJCQl0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3QxNTE4LAorCQkJCXR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3QyMDQ3LCB0eF9zdGF0X2JtYWNfMjA0Nyk7CisJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0NDA5NSwgdHhfc3RhdF9ibWFjXzQwOTUpOworCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDkyMTYsIHR4X3N0YXRfYm1hY185MjE2KTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3QxNjM4MywgdHhfc3RhdF9ibWFjXzE2MzgzKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3RlcnIsCisJCQkJdHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzKTsKKwlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3R1ZmwsIHR4X3N0YXRfYm1hY191ZmwpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9lbWFjX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBlbWFjX3N0YXRzICpuZXcgPSBibngyeF9zcChicCwgbWFjX3N0YXRzLmVtYWNfc3RhdHMpOworCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMgKnBzdGF0cyA9IGJueDJ4X3NwKGJwLCBwb3J0X3N0YXRzKTsKKworCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X2lmaGNpbmJhZG9jdGV0cyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHR4X3N0YXRfaWZoY291dGJhZG9jdGV0cyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQocnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnMpOworCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9ycyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQocnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0cyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50cyk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnMpOworCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZCk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZCk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZCk7CisJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWQpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X291dHhvbnNlbnQpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X291dHhvZmZzZW50KTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9mbG93Y29udHJvbGRvbmUpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY0b2N0ZXRzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzKTsKKwlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHMpOworCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnMpOworfQorCitzdGF0aWMgaW50IGJueDJ4X2h3X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBuaWdfc3RhdHMgKm5ldyA9IGJueDJ4X3NwKGJwLCBuaWdfc3RhdHMpOworCXN0cnVjdCBuaWdfc3RhdHMgKm9sZCA9ICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cyk7CisJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzID0gYm54Mnhfc3AoYnAsIHBvcnRfc3RhdHMpOworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCXN0cnVjdCByZWdwYWlyIGRpZmY7CisKKwlpZiAoYnAtPmxpbmtfdmFycy5tYWNfdHlwZSA9PSBNQUNfVFlQRV9CTUFDKQorCQlibngyeF9ibWFjX3N0YXRzX3VwZGF0ZShicCk7CisKKwllbHNlIGlmIChicC0+bGlua192YXJzLm1hY190eXBlID09IE1BQ19UWVBFX0VNQUMpCisJCWJueDJ4X2VtYWNfc3RhdHNfdXBkYXRlKGJwKTsKKworCWVsc2UgeyAvKiB1bnJlYWNoZWQgKi8KKwkJQk5YMlhfRVJSKCJzdGF0cyB1cGRhdGVkIGJ5IGRtYWUgYnV0IG5vIE1BQyBhY3RpdmVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJQUREX0VYVEVORF82NChwc3RhdHMtPmJyYl9kcm9wX2hpLCBwc3RhdHMtPmJyYl9kcm9wX2xvLAorCQkgICAgICBuZXctPmJyYl9kaXNjYXJkIC0gb2xkLT5icmJfZGlzY2FyZCk7CisKKwlVUERBVEVfU1RBVDY0X05JRyhlZ3Jlc3NfbWFjX3BrdDAsCisJCQkJCWV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0cyk7CisJVVBEQVRFX1NUQVQ2NF9OSUcoZWdyZXNzX21hY19wa3QxLCBldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzKTsKKworCW1lbWNweShvbGQsIG5ldywgc2l6ZW9mKHN0cnVjdCBuaWdfc3RhdHMpKTsKKworCW1lbWNweSgmKGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfaGkpLCAmKHBzdGF0cy0+bWFjX3N0eFsxXSksCisJICAgICAgIHNpemVvZihzdHJ1Y3QgbWFjX3N0eCkpOworCWVzdGF0cy0+YnJiX2Ryb3BfaGkgPSBwc3RhdHMtPmJyYl9kcm9wX2hpOworCWVzdGF0cy0+YnJiX2Ryb3BfbG8gPSBwc3RhdHMtPmJyYl9kcm9wX2xvOworCisJcHN0YXRzLT5ob3N0X3BvcnRfc3RhdHNfc3RhcnQgPSArK3BzdGF0cy0+aG9zdF9wb3J0X3N0YXRzX2VuZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBldGhfc3RhdHNfcXVlcnkgKnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ3X3N0YXRzKTsKKwlpbnQgY2xfaWQgPSBCUF9DTF9JRChicCk7CisJc3RydWN0IHRzdG9ybV9wZXJfcG9ydF9zdGF0cyAqdHBvcnQgPQorCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5wb3J0X3N0YXRpc3RpY3M7CisJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp0Y2xpZW50ID0KKwkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07CisJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9ICZicC0+b2xkX3RjbGllbnQ7CisJc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp4Y2xpZW50ID0KKwkJCSZzdGF0cy0+eHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07CisJc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfeGNsaWVudCA9ICZicC0+b2xkX3hjbGllbnQ7CisJc3RydWN0IGhvc3RfZnVuY19zdGF0cyAqZnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ1bmNfc3RhdHMpOworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCXUzMiBkaWZmOworCisJLyogYXJlIHN0b3JtIHN0YXRzIHZhbGlkPyAqLworCWlmICgodTE2KShsZTE2X3RvX2NwdSh0Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9CisJCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKKwkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHMgbm90IHVwZGF0ZWQgYnkgdHN0b3JtIgorCQkgICAiICB0c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKKwkJICAgdGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICgodTE2KShsZTE2X3RvX2NwdSh4Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9CisJCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKKwkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHMgbm90IHVwZGF0ZWQgYnkgeHN0b3JtIgorCQkgICAiICB4c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKKwkJICAgeGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOworCQlyZXR1cm4gLTI7CisJfQorCisJZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSA9CisJZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSA9CisJCQkJbGUzMl90b19jcHUodGNsaWVudC0+dG90YWxfcmN2X2J5dGVzLmhpKTsKKwlmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvID0KKwlmc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvID0KKwkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfYnl0ZXMubG8pOworCisJZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9CisJCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Vycm9yX2J5dGVzLmhpKTsKKwllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvID0KKwkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfZXJyb3JfYnl0ZXMubG8pOworCUFERF82NChlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2hpLAorCSAgICAgICBlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2xvKTsKKworCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCSAgICAgICBlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCSAgICAgICBlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvKTsKKworCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X3VuaWNhc3RfcGt0cywgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl9tdWx0aWNhc3RfcGt0cywKKwkJCQl0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZCk7CisJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfYnJvYWRjYXN0X3BrdHMsCisJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWQpOworCisJZnN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSA9CisJCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dG90YWxfc2VudF9ieXRlcy5oaSk7CisJZnN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbyA9CisJCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dG90YWxfc2VudF9ieXRlcy5sbyk7CisKKwlVUERBVEVfRVhURU5EX1hTVEFUKHVuaWNhc3RfcGt0c19zZW50LAorCQkJCXRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7CisJVVBEQVRFX0VYVEVORF9YU1RBVChtdWx0aWNhc3RfcGt0c19zZW50LAorCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKKwlVUERBVEVfRVhURU5EX1hTVEFUKGJyb2FkY2FzdF9wa3RzX3NlbnQsCisJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOworCisJbWVtY3B5KGVzdGF0cywgJihmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpIC0gMipzaXplb2YodTMyKSk7CisKKwllc3RhdHMtPm1hY19maWx0ZXJfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRwb3J0LT5tYWNfZmlsdGVyX2Rpc2NhcmQpOworCWVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPnh4b3ZlcmZsb3dfZGlzY2FyZCk7CisJZXN0YXRzLT5icmJfdHJ1bmNhdGVfZGlzY2FyZCA9CisJCQkJbGUzMl90b19jcHUodHBvcnQtPmJyYl90cnVuY2F0ZV9kaXNjYXJkKTsKKwllc3RhdHMtPm1hY19kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPm1hY19kaXNjYXJkKTsKKworCW9sZF90Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5oaSA9CisJCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMuaGkpOworCW9sZF90Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5sbyA9CisJCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMubG8pOworCW9sZF90Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmhpID0KKwkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmhpKTsKKwlvbGRfdGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5sbyA9CisJCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5sbyk7CisJb2xkX3RjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMuaGkgPQorCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMuaGkpOworCW9sZF90Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmxvID0KKwkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmxvKTsKKwlvbGRfdGNsaWVudC0+dG90YWxfcmN2X3BrdHMgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfcGt0cyk7CisKKwlvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQpOworCW9sZF90Y2xpZW50LT5wYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCA9CisJCQkJbGUzMl90b19jcHUodGNsaWVudC0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQpOworCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkID0KKwlvbGRfdGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkID0gbGUzMl90b19jcHUodGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkKTsKKwlvbGRfdGNsaWVudC0+dHRsMF9kaXNjYXJkID0gbGUzMl90b19jcHUodGNsaWVudC0+dHRsMF9kaXNjYXJkKTsKKworCW9sZF94Y2xpZW50LT50b3RhbF9zZW50X3BrdHMgPSBsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X3BrdHMpOworCW9sZF94Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQuaGkgPQorCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5oaSk7CisJb2xkX3hjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5sbyA9CisJCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dW5pY2FzdF9ieXRlc19zZW50LmxvKTsKKwlvbGRfeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQuaGkgPQorCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPm11bHRpY2FzdF9ieXRlc19zZW50LmhpKTsKKwlvbGRfeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQubG8gPQorCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPm11bHRpY2FzdF9ieXRlc19zZW50LmxvKTsKKwlvbGRfeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQuaGkgPQorCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPmJyb2FkY2FzdF9ieXRlc19zZW50LmhpKTsKKwlvbGRfeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQubG8gPQorCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPmJyb2FkY2FzdF9ieXRlc19zZW50LmxvKTsKKworCWZzdGF0cy0+aG9zdF9mdW5jX3N0YXRzX3N0YXJ0ID0gKytmc3RhdHMtPmhvc3RfZnVuY19zdGF0c19lbmQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYm54MnhfbmV0X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPSAmYnAtPm9sZF90Y2xpZW50OworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuc3RhdHMgPSAmYnAtPmRldi0+c3RhdHM7CisKKwluc3RhdHMtPnJ4X3BhY2tldHMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSkgKworCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSArCisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpOworCisJbnN0YXRzLT50eF9wYWNrZXRzID0KKwkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpICsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSkgKworCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKKworCW5zdGF0cy0+cnhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpKTsKKworCW5zdGF0cy0+dHhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKTsKKworCW5zdGF0cy0+cnhfZHJvcHBlZCA9IG9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkICsKKwkJCSAgICAgZXN0YXRzLT5tYWNfZGlzY2FyZDsKKwluc3RhdHMtPnR4X2Ryb3BwZWQgPSAwOworCisJbnN0YXRzLT5tdWx0aWNhc3QgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKKworCW5zdGF0cy0+Y29sbGlzaW9ucyA9CisJCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzc2luZ2xlY29sbGlzaW9uZnJhbWVzX2xvICsKKwkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lc19sbyArCisJCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbGF0ZWNvbGxpc2lvbnNfbG8gKworCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfbG87CisKKwllc3RhdHMtPmphYmJlcl9wYWNrZXRzX3JlY2VpdmVkID0KKwkJCQlvbGRfdGNsaWVudC0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQgKworCQkJCWVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2xvOworCisJbnN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0KKwkJCQllc3RhdHMtPnJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfbG8gKworCQkJCWVzdGF0cy0+amFiYmVyX3BhY2tldHNfcmVjZWl2ZWQ7CisJbnN0YXRzLT5yeF9vdmVyX2Vycm9ycyA9IGVzdGF0cy0+YnJiX2Ryb3BfbG8gKworCQkJCSBlc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkOworCW5zdGF0cy0+cnhfY3JjX2Vycm9ycyA9IGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnNfbG87CisJbnN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPSBlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2xvOworCW5zdGF0cy0+cnhfZmlmb19lcnJvcnMgPSBvbGRfdGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkOworCW5zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9IGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkOworCisJbnN0YXRzLT5yeF9lcnJvcnMgPSBuc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+cnhfY3JjX2Vycm9ycyArCisJCQkgICAgbnN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+cnhfZmlmb19lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+cnhfbWlzc2VkX2Vycm9yczsKKworCW5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPQorCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvICsKKwkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2xvOworCW5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPSBlc3RhdHMtPnJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzX2xvOworCW5zdGF0cy0+dHhfZmlmb19lcnJvcnMgPSAwOworCW5zdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7CisJbnN0YXRzLT50eF93aW5kb3dfZXJyb3JzID0gMDsKKworCW5zdGF0cy0+dHhfZXJyb3JzID0gbnN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyArCisJCQkgICAgbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9yczsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOworCWludCB1cGRhdGUgPSAwOworCisJaWYgKCpzdGF0c19jb21wICE9IERNQUVfQ09NUF9WQUwpCisJCXJldHVybjsKKworCWlmIChicC0+cG9ydC5wbWYpCisJCXVwZGF0ZSA9IChibngyeF9od19zdGF0c191cGRhdGUoYnApID09IDApOworCisJdXBkYXRlIHw9IChibngyeF9zdG9ybV9zdGF0c191cGRhdGUoYnApID09IDApOworCisJaWYgKHVwZGF0ZSkKKwkJYm54MnhfbmV0X3N0YXRzX3VwZGF0ZShicCk7CisKKwllbHNlIHsKKwkJaWYgKGJwLT5zdGF0c19wZW5kaW5nKSB7CisJCQlicC0+c3RhdHNfcGVuZGluZysrOworCQkJaWYgKGJwLT5zdGF0c19wZW5kaW5nID09IDMpIHsKKwkJCQlCTlgyWF9FUlIoInN0YXRzIG5vdCB1cGRhdGVkIGZvciAzIHRpbWVzXG4iKTsKKwkJCQlibngyeF9wYW5pYygpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKworCWlmIChicC0+bXNnbGV2ZWwgJiBORVRJRl9NU0dfVElNRVIpIHsKKwkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9ICZicC0+b2xkX3RjbGllbnQ7CisJCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXRzID0gJmJwLT5kZXYtPnN0YXRzOworCQlpbnQgaTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6XG4iLCBicC0+ZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgdHggYXZhaWwgKCU0eCkgIHR4IGhjIGlkeCAoJXgpIgorCQkJCSAgIiAgdHggcGt0ICglbHgpXG4iLAorCQkgICAgICAgYm54MnhfdHhfYXZhaWwoYnAtPmZwKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KCpicC0+ZnAtPnR4X2NvbnNfc2IpLCBuc3RhdHMtPnR4X3BhY2tldHMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiICByeCB1c2FnZSAoJTR4KSAgcnggaGMgaWR4ICgleCkiCisJCQkJICAiICByeCBwa3QgKCVseClcbiIsCisJCSAgICAgICAodTE2KShsZTE2X3RvX2NwdSgqYnAtPmZwLT5yeF9jb25zX3NiKSAtCisJCQkgICAgIGJwLT5mcC0+cnhfY29tcF9jb25zKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KCpicC0+ZnAtPnJ4X2NvbnNfc2IpLCBuc3RhdHMtPnJ4X3BhY2tldHMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiICAlcyAoWG9mZiBldmVudHMgJXUpICBicmIgZHJvcHMgJXVcbiIsCisJCSAgICAgICBuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpPyAiWG9mZiIgOiAiWG9uIiwKKwkJICAgICAgIGVzdGF0cy0+ZHJpdmVyX3hvZmYsIGVzdGF0cy0+YnJiX2Ryb3BfbG8pOworCQlwcmludGsoS0VSTl9ERUJVRyAidHN0YXRzOiBjaGVja3N1bV9kaXNjYXJkICV1ICAiCisJCQkicGFja2V0c190b29fYmlnX2Rpc2NhcmQgJXUgIG5vX2J1ZmZfZGlzY2FyZCAldSAgIgorCQkJIm1hY19kaXNjYXJkICV1ICBtYWNfZmlsdGVyX2Rpc2NhcmQgJXUgICIKKwkJCSJ4eG92cmZsb3dfZGlzY2FyZCAldSAgYnJiX3RydW5jYXRlX2Rpc2NhcmQgJXUgICIKKwkJCSJ0dGwwX2Rpc2NhcmQgJXVcbiIsCisJCSAgICAgICBvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCwKKwkJICAgICAgIG9sZF90Y2xpZW50LT5wYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCwKKwkJICAgICAgIG9sZF90Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQsIGVzdGF0cy0+bWFjX2Rpc2NhcmQsCisJCSAgICAgICBlc3RhdHMtPm1hY19maWx0ZXJfZGlzY2FyZCwgZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQsCisJCSAgICAgICBlc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkLAorCQkgICAgICAgb2xkX3RjbGllbnQtPnR0bDBfZGlzY2FyZCk7CisKKwkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJbJWRdOiAlbHVcdCVsdVx0JWx1XG4iLCBpLAorCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCB0eF9wa3QpLAorCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9wa3QpLAorCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9jYWxscykpOworCQl9CisJfQorCisJYm54MnhfaHdfc3RhdHNfcG9zdChicCk7CisJYm54Mnhfc3Rvcm1fc3RhdHNfcG9zdChicCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3BvcnRfc3RhdHNfc3RvcChzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWU7CisJdTMyIG9wY29kZTsKKwlpbnQgbG9hZGVyX2lkeCA9IFBNRl9ETUFFX0MoYnApOworCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKKworCWJwLT5leGVjdXRlcl9pZHggPSAwOworCisJb3Bjb2RlID0gKERNQUVfQ01EX1NSQ19QQ0kgfCBETUFFX0NNRF9EU1RfR1JDIHwKKwkJICBETUFFX0NNRF9DX0VOQUJMRSB8CisJCSAgRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJICBETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKyNlbHNlCisJCSAgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAorI2VuZGlmCisJCSAgKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCSAgKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCisJaWYgKGJwLT5wb3J0LnBvcnRfc3R4KSB7CisKKwkJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCQlpZiAoYnAtPmZ1bmNfc3R4KQorCQkJZG1hZS0+b3Bjb2RlID0gKG9wY29kZSB8IERNQUVfQ01EX0NfRFNUX0dSQyk7CisJCWVsc2UKKwkJCWRtYWUtPm9wY29kZSA9IChvcGNvZGUgfCBETUFFX0NNRF9DX0RTVF9QQ0kpOworCQlkbWFlLT5zcmNfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBwb3J0X3N0YXRzKSk7CisJCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpKTsKKwkJZG1hZS0+ZHN0X2FkZHJfbG8gPSBicC0+cG9ydC5wb3J0X3N0eCA+PiAyOworCQlkbWFlLT5kc3RfYWRkcl9oaSA9IDA7CisJCWRtYWUtPmxlbiA9IHNpemVvZihzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzKSA+PiAyOworCQlpZiAoYnAtPmZ1bmNfc3R4KSB7CisJCQlkbWFlLT5jb21wX2FkZHJfbG8gPSBkbWFlX3JlZ19nb19jW2xvYWRlcl9pZHhdID4+IDI7CisJCQlkbWFlLT5jb21wX2FkZHJfaGkgPSAwOworCQkJZG1hZS0+Y29tcF92YWwgPSAxOworCQl9IGVsc2UgeworCQkJZG1hZS0+Y29tcF9hZGRyX2xvID0KKwkJCQlVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCQkJZG1hZS0+Y29tcF9hZGRyX2hpID0KKwkJCQlVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCQkJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCisJCQkqc3RhdHNfY29tcCA9IDA7CisJCX0KKwl9CisKKwlpZiAoYnAtPmZ1bmNfc3R4KSB7CisKKwkJZG1hZSA9IGJueDJ4X3NwKGJwLCBkbWFlW2JwLT5leGVjdXRlcl9pZHgrK10pOworCQlkbWFlLT5vcGNvZGUgPSAob3Bjb2RlIHwgRE1BRV9DTURfQ19EU1RfUENJKTsKKwkJZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZnVuY19zdGF0cykpOworCQlkbWFlLT5zcmNfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmdW5jX3N0YXRzKSk7CisJCWRtYWUtPmRzdF9hZGRyX2xvID0gYnAtPmZ1bmNfc3R4ID4+IDI7CisJCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKKwkJZG1hZS0+bGVuID0gc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpID4+IDI7CisJCWRtYWUtPmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKKworCQkqc3RhdHNfY29tcCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9zdGF0c19zdG9wKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHVwZGF0ZSA9IDA7CisKKwlibngyeF9zdGF0c19jb21wKGJwKTsKKworCWlmIChicC0+cG9ydC5wbWYpCisJCXVwZGF0ZSA9IChibngyeF9od19zdGF0c191cGRhdGUoYnApID09IDApOworCisJdXBkYXRlIHw9IChibngyeF9zdG9ybV9zdGF0c191cGRhdGUoYnApID09IDApOworCisJaWYgKHVwZGF0ZSkgeworCQlibngyeF9uZXRfc3RhdHNfdXBkYXRlKGJwKTsKKworCQlpZiAoYnAtPnBvcnQucG1mKQorCQkJYm54MnhfcG9ydF9zdGF0c19zdG9wKGJwKTsKKworCQlibngyeF9od19zdGF0c19wb3N0KGJwKTsKKwkJYm54Mnhfc3RhdHNfY29tcChicCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9zdGF0c19kb19ub3RoaW5nKHN0cnVjdCBibngyeCAqYnApCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXZvaWQgKCphY3Rpb24pKHN0cnVjdCBibngyeCAqYnApOworCWVudW0gYm54Mnhfc3RhdHNfc3RhdGUgbmV4dF9zdGF0ZTsKK30gYm54Mnhfc3RhdHNfc3RtW1NUQVRTX1NUQVRFX01BWF1bU1RBVFNfRVZFTlRfTUFYXSA9IHsKKy8qIHN0YXRlCWV2ZW50CSovCit7CisvKiBESVNBQkxFRAlQTUYJKi8ge2JueDJ4X3N0YXRzX3BtZl91cGRhdGUsIFNUQVRTX1NUQVRFX0RJU0FCTEVEfSwKKy8qCQlMSU5LX1VQCSovIHtibngyeF9zdGF0c19zdGFydCwgICAgICBTVEFUU19TVEFURV9FTkFCTEVEfSwKKy8qCQlVUERBVEUJKi8ge2JueDJ4X3N0YXRzX2RvX25vdGhpbmcsIFNUQVRTX1NUQVRFX0RJU0FCTEVEfSwKKy8qCQlTVE9QCSovIHtibngyeF9zdGF0c19kb19ub3RoaW5nLCBTVEFUU19TVEFURV9ESVNBQkxFRH0KK30sCit7CisvKiBFTkFCTEVECVBNRgkqLyB7Ym54Mnhfc3RhdHNfcG1mX3N0YXJ0LCAgU1RBVFNfU1RBVEVfRU5BQkxFRH0sCisvKgkJTElOS19VUAkqLyB7Ym54Mnhfc3RhdHNfcmVzdGFydCwgICAgU1RBVFNfU1RBVEVfRU5BQkxFRH0sCisvKgkJVVBEQVRFCSovIHtibngyeF9zdGF0c191cGRhdGUsICAgICBTVEFUU19TVEFURV9FTkFCTEVEfSwKKy8qCQlTVE9QCSovIHtibngyeF9zdGF0c19zdG9wLCAgICAgICBTVEFUU19TVEFURV9ESVNBQkxFRH0KK30KK307CisKK3N0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX2hhbmRsZShzdHJ1Y3QgYm54MnggKmJwLCBlbnVtIGJueDJ4X3N0YXRzX2V2ZW50IGV2ZW50KQoreworCWVudW0gYm54Mnhfc3RhdHNfc3RhdGUgc3RhdGUgPSBicC0+c3RhdHNfc3RhdGU7CisKKwlibngyeF9zdGF0c19zdG1bc3RhdGVdW2V2ZW50XS5hY3Rpb24oYnApOworCWJwLT5zdGF0c19zdGF0ZSA9IGJueDJ4X3N0YXRzX3N0bVtzdGF0ZV1bZXZlbnRdLm5leHRfc3RhdGU7CisKKwlpZiAoKGV2ZW50ICE9IFNUQVRTX0VWRU5UX1VQREFURSkgfHwgKGJwLT5tc2dsZXZlbCAmIE5FVElGX01TR19USU1FUikpCisJCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRlICVkIC0+IGV2ZW50ICVkIC0+IHN0YXRlICVkXG4iLAorCQkgICBzdGF0ZSwgZXZlbnQsIGJwLT5zdGF0c19zdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gKHN0cnVjdCBibngyeCAqKSBkYXRhOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQorCQlyZXR1cm47CisKKwlpZiAoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkKKwkJZ290byB0aW1lcl9yZXN0YXJ0OworCisJaWYgKHBvbGwpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbMF07CisJCWludCByYzsKKworCQlibngyeF90eF9pbnQoZnAsIDEwMDApOworCQlyYyA9IGJueDJ4X3J4X2ludChmcCwgMTAwMCk7CisJfQorCisJaWYgKCFCUF9OT01DUChicCkpIHsKKwkJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwkJdTMyIGRydl9wdWxzZTsKKwkJdTMyIG1jcF9wdWxzZTsKKworCQkrK2JwLT5md19kcnZfcHVsc2Vfd3Jfc2VxOworCQlicC0+ZndfZHJ2X3B1bHNlX3dyX3NlcSAmPSBEUlZfUFVMU0VfU0VRX01BU0s7CisJCS8qIFRCRCAtIGFkZCBTWVNURU1fVElNRSAqLworCQlkcnZfcHVsc2UgPSBicC0+ZndfZHJ2X3B1bHNlX3dyX3NlcTsKKwkJU0hNRU1fV1IoYnAsIGZ1bmNfbWJbZnVuY10uZHJ2X3B1bHNlX21iLCBkcnZfcHVsc2UpOworCisJCW1jcF9wdWxzZSA9IChTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5tY3BfcHVsc2VfbWIpICYKKwkJCSAgICAgTUNQX1BVTFNFX1NFUV9NQVNLKTsKKwkJLyogVGhlIGRlbHRhIGJldHdlZW4gZHJpdmVyIHB1bHNlIGFuZCBtY3AgcmVzcG9uc2UKKwkJICogc2hvdWxkIGJlIDEgKGJlZm9yZSBtY3AgcmVzcG9uc2UpIG9yIDAgKGFmdGVyIG1jcCByZXNwb25zZSkKKwkJICovCisJCWlmICgoZHJ2X3B1bHNlICE9IG1jcF9wdWxzZSkgJiYKKwkJICAgIChkcnZfcHVsc2UgIT0gKChtY3BfcHVsc2UgKyAxKSAmIE1DUF9QVUxTRV9TRVFfTUFTSykpKSB7CisJCQkvKiBzb21lb25lIGxvc3QgYSBoZWFydGJlYXQuLi4gKi8KKwkJCUJOWDJYX0VSUigiZHJ2X3B1bHNlICgweCV4KSAhPSBtY3BfcHVsc2UgKDB4JXgpXG4iLAorCQkJCSAgZHJ2X3B1bHNlLCBtY3BfcHVsc2UpOworCQl9CisJfQorCisJaWYgKChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgfHwKKwkgICAgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9ESVNBQkxFRCkpCisJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfVVBEQVRFKTsKKwordGltZXJfcmVzdGFydDoKKwltb2RfdGltZXIoJmJwLT50aW1lciwgamlmZmllcyArIGJwLT5jdXJyZW50X2ludGVydmFsKTsKK30KKworLyogZW5kIG9mIFN0YXRpc3RpY3MgKi8KKworLyogbmljIGluaXQgKi8KKworLyoKKyAqIG5pYyBpbml0IHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQgYm54MnhfemVyb19zYihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2JfaWQpCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKworCWJueDJ4X2luaXRfZmlsbChicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCVVTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQocG9ydCwgc2JfaWQpLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChwb3J0LCBzYl9pZCksIDAsCisJCQlzaXplb2Yoc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrKS80KTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF9zYihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2JfaWQsCisJCQkgIHN0cnVjdCBob3N0X3N0YXR1c19ibG9jayAqc2IsCWRtYV9hZGRyX3QgbWFwcGluZykKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJaW50IGluZGV4OworCXU2NCBzZWN0aW9uOworCisJLyogVVNUT1JNICovCisJc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrLAorCQkJCQkgICAgdV9zdGF0dXNfYmxvY2spOworCXNiLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKKworCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgVVNUT1JNX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQocG9ydCwgc2JfaWQpLCBVNjRfTE8oc2VjdGlvbikpOworCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgKChVU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBzYl9pZCkpICsgNCksCisJICAgICAgIFU2NF9ISShzZWN0aW9uKSk7CisJUkVHX1dSOChicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgRlBfVVNCX0ZVTkNfT0ZGICsKKwkJVVNUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChwb3J0LCBzYl9pZCksIGZ1bmMpOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQorCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCSBVU1RPUk1fU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgc2JfaWQsIGluZGV4KSwgMSk7CisKKwkvKiBDU1RPUk0gKi8KKwlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2ssCisJCQkJCSAgICBjX3N0YXR1c19ibG9jayk7CisJc2ItPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOworCisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCSAgICAgICBDU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBzYl9pZCksIFU2NF9MTyhzZWN0aW9uKSk7CisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCSAgICAgICAoKENTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIHNiX2lkKSkgKyA0KSwKKwkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKKwlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBGUF9DU0JfRlVOQ19PRkYgKworCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgZnVuYyk7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19DU1RPUk1fU0JfTlVNX0lORElDRVM7IGluZGV4KyspCisJCVJFR19XUjE2KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJIENTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBzYl9pZCwgaW5kZXgpLCAxKTsKKworCWJueDJ4X2Fja19zYihicCwgc2JfaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOworfQorCitzdGF0aWMgdm9pZCBibngyeF96ZXJvX2RlZl9zYihzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisKKwlibngyeF9pbml0X2ZpbGwoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQlVU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgdXN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOworCWJueDJ4X2luaXRfZmlsbChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkJCUNTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBjc3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJWFNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIDAsCisJCQlzaXplb2Yoc3RydWN0IHhzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrKS80KTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCisJCQlUU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgdHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9pbml0X2RlZl9zYihzdHJ1Y3QgYm54MnggKmJwLAorCQkJICAgICAgc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jayAqZGVmX3NiLAorCQkJICAgICAgZG1hX2FkZHJfdCBtYXBwaW5nLCBpbnQgc2JfaWQpCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCBpbmRleCwgdmFsLCByZWdfb2Zmc2V0OworCXU2NCBzZWN0aW9uOworCisJLyogQVRUTiAqLworCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCisJCQkJCSAgICBhdHRlbl9zdGF0dXNfYmxvY2spOworCWRlZl9zYi0+YXR0ZW5fc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOworCisJYnAtPmRlZl9hdHRfaWR4ID0gMDsKKwlicC0+YXR0bl9zdGF0ZSA9IDA7CisKKwlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzAgOgorCQkJICAgICBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzApOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0RZTkFNSUNfQVRUTl9HUlBTOyBpbmRleCsrKSB7CisJCWJwLT5hdHRuX2dyb3VwW2luZGV4XS5zaWdbMF0gPSBSRUdfUkQoYnAsCisJCQkJCQkgICAgIHJlZ19vZmZzZXQgKyAweDEwKmluZGV4KTsKKwkJYnAtPmF0dG5fZ3JvdXBbaW5kZXhdLnNpZ1sxXSA9IFJFR19SRChicCwKKwkJCQkJICAgICAgIHJlZ19vZmZzZXQgKyAweDQgKyAweDEwKmluZGV4KTsKKwkJYnAtPmF0dG5fZ3JvdXBbaW5kZXhdLnNpZ1syXSA9IFJFR19SRChicCwKKwkJCQkJICAgICAgIHJlZ19vZmZzZXQgKyAweDggKyAweDEwKmluZGV4KTsKKwkJYnAtPmF0dG5fZ3JvdXBbaW5kZXhdLnNpZ1szXSA9IFJFR19SRChicCwKKwkJCQkJICAgICAgIHJlZ19vZmZzZXQgKyAweGMgKyAweDEwKmluZGV4KTsKKwl9CisKKwlicC0+YWV1X21hc2sgPSBSRUdfUkQoYnAsIChwb3J0ID8gTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEgOgorCQkJCQkgIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18wKSk7CisKKwlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBIQ19SRUdfQVRUTl9NU0cxX0FERFJfTCA6CisJCQkgICAgIEhDX1JFR19BVFROX01TRzBfQUREUl9MKTsKKworCVJFR19XUihicCwgcmVnX29mZnNldCwgVTY0X0xPKHNlY3Rpb24pKTsKKwlSRUdfV1IoYnAsIHJlZ19vZmZzZXQgKyA0LCBVNjRfSEkoc2VjdGlvbikpOworCisJcmVnX29mZnNldCA9IChwb3J0ID8gSENfUkVHX0FUVE5fTlVNX1AxIDogSENfUkVHX0FUVE5fTlVNX1AwKTsKKworCXZhbCA9IFJFR19SRChicCwgcmVnX29mZnNldCk7CisJdmFsIHw9IHNiX2lkOworCVJFR19XUihicCwgcmVnX29mZnNldCwgdmFsKTsKKworCS8qIFVTVE9STSAqLworCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCisJCQkJCSAgICB1X2RlZl9zdGF0dXNfYmxvY2spOworCWRlZl9zYi0+dV9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOworCisJYnAtPmRlZl91X2lkeCA9IDA7CisKKwlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJICAgICAgIFVTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jKSwgVTY0X0xPKHNlY3Rpb24pKTsKKwlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJICAgICAgICgoVVNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmMpKSArIDQpLAorCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOworCVJFR19XUjgoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArICBERUZfVVNCX0ZVTkNfT0ZGICsKKwkJVVNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIGZ1bmMpOworCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgVVNUT1JNX0hDX0JUUl9PRkZTRVQoZnVuYyksCisJICAgICAgIEJOWDJYX0JUUik7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQorCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCSBVU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmMsIGluZGV4KSwgMSk7CisKKwkvKiBDU1RPUk0gKi8KKwlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrLAorCQkJCQkgICAgY19kZWZfc3RhdHVzX2Jsb2NrKTsKKwlkZWZfc2ItPmNfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKKworCWJwLT5kZWZfY19pZHggPSAwOworCisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCSAgICAgICBDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuYyksIFU2NF9MTyhzZWN0aW9uKSk7CisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCSAgICAgICAoKENTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jKSkgKyA0KSwKKwkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKKwlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyAgREVGX0NTQl9GVU5DX09GRiArCisJCUNTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCBmdW5jKTsKKwlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9IQ19CVFJfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICBCTlgyWF9CVFIpOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKKwkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJCQkgQ1NUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jLCBpbmRleCksIDEpOworCisJLyogVFNUT1JNICovCisJc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaywKKwkJCQkJICAgIHRfZGVmX3N0YXR1c19ibG9jayk7CisJZGVmX3NiLT50X2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7CisKKwlicC0+ZGVmX3RfaWR4ID0gMDsKKworCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgVFNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmMpLCBVNjRfTE8oc2VjdGlvbikpOworCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgKChUU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuYykpICsgNCksCisJICAgICAgIFU2NF9ISShzZWN0aW9uKSk7CisJUkVHX1dSOChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgIERFRl9UU0JfRlVOQ19PRkYgKworCQlUU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgZnVuYyk7CisJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fSENfQlRSX09GRlNFVChmdW5jKSwKKwkgICAgICAgQk5YMlhfQlRSKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX1RTVE9STV9ERUZfU0JfTlVNX0lORElDRVM7IGluZGV4KyspCisJCVJFR19XUjE2KGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKworCQkJIFRTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuYywgaW5kZXgpLCAxKTsKKworCS8qIFhTVE9STSAqLworCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2ssCisJCQkJCSAgICB4X2RlZl9zdGF0dXNfYmxvY2spOworCWRlZl9zYi0+eF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOworCisJYnAtPmRlZl94X2lkeCA9IDA7CisKKwlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJICAgICAgIFhTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jKSwgVTY0X0xPKHNlY3Rpb24pKTsKKwlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJICAgICAgICgoWFNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmMpKSArIDQpLAorCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOworCVJFR19XUjgoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArICBERUZfWFNCX0ZVTkNfT0ZGICsKKwkJWFNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIGZ1bmMpOworCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX0hDX0JUUl9PRkZTRVQoZnVuYyksCisJICAgICAgIEJOWDJYX0JUUik7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQorCQlSRUdfV1IxNihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkJCSBYU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmMsIGluZGV4KSwgMSk7CisKKwlicC0+c3RhdHNfcGVuZGluZyA9IDA7CisKKwlibngyeF9hY2tfc2IoYnAsIHNiX2lkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX2NvYWxlc2NlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgaTsKKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCWludCBzYl9pZCA9IGJwLT5mcFtpXS5zYl9pZDsKKworCQkvKiBIQ19JTkRFWF9VX0VUSF9SWF9DUV9DT05TICovCisJCVJFR19XUjgoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQlVU1RPUk1fU0JfSENfVElNRU9VVF9PRkZTRVQocG9ydCwgc2JfaWQsCisJCQkJCQkgICBIQ19JTkRFWF9VX0VUSF9SWF9DUV9DT05TKSwKKwkJCWJwLT5yeF90aWNrcy8xMik7CisJCVJFR19XUjE2KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkJIFVTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBzYl9pZCwKKwkJCQkJCSAgIEhDX0lOREVYX1VfRVRIX1JYX0NRX0NPTlMpLAorCQkJIGJwLT5yeF90aWNrcyA/IDAgOiAxKTsKKworCQkvKiBIQ19JTkRFWF9DX0VUSF9UWF9DUV9DT05TICovCisJCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJCQlDU1RPUk1fU0JfSENfVElNRU9VVF9PRkZTRVQocG9ydCwgc2JfaWQsCisJCQkJCQkgICBIQ19JTkRFWF9DX0VUSF9UWF9DUV9DT05TKSwKKwkJCWJwLT50eF90aWNrcy8xMik7CisJCVJFR19XUjE2KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJIENTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBzYl9pZCwKKwkJCQkJCSAgIEhDX0lOREVYX0NfRVRIX1RYX0NRX0NPTlMpLAorCQkJIGJwLT50eF90aWNrcyA/IDAgOiAxKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9mcmVlX3RwYV9wb29sKHN0cnVjdCBibngyeCAqYnAsCisJCQkJICAgICAgIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIGludCBsYXN0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgeworCQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICYoZnAtPnRwYV9wb29sW2ldKTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4X2J1Zi0+c2tiOworCisJCWlmIChza2IgPT0gTlVMTCkgeworCQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgInRwYSBiaW4gJWQgZW1wdHkgb24gZnJlZVxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChmcC0+dHBhX3N0YXRlW2ldID09IEJOWDJYX1RQQV9TVEFSVCkKKwkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsCisJCQkJCSBwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAorCQkJCQkgYnAtPnJ4X2J1Zl91c2Vfc2l6ZSwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyeF9idWYtPnNrYiA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3J4X3JpbmdzKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwl1MTYgcmluZ19wcm9kLCBjcWVfcmluZ19wcm9kID0gMDsKKwlpbnQgaSwgajsKKworCWJwLT5yeF9idWZfdXNlX3NpemUgPSBicC0+ZGV2LT5tdHU7CisJYnAtPnJ4X2J1Zl91c2Vfc2l6ZSArPSBicC0+cnhfb2Zmc2V0ICsgRVRIX09WUkVIRUFEOworCWJwLT5yeF9idWZfc2l6ZSA9IGJwLT5yeF9idWZfdXNlX3NpemUgKyA2NDsKKworCWlmIChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpIHsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsCisJCSAgICJyeF9idWZfdXNlX3NpemUgJWQgIHJ4X2J1Zl9zaXplICVkICBlZmZlY3RpdmVfbXR1ICVkXG4iLAorCQkgICBicC0+cnhfYnVmX3VzZV9zaXplLCBicC0+cnhfYnVmX3NpemUsCisJCSAgIGJwLT5kZXYtPm10dSArIEVUSF9PVlJFSEVBRCk7CisKKwkJZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUg7IGkrKykgeworCQkJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOworCisJCQkJZnAtPnRwYV9wb29sW2ldLnNrYiA9CisJCQkJICAgbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LCBicC0+cnhfYnVmX3NpemUpOworCQkJCWlmICghZnAtPnRwYV9wb29sW2ldLnNrYikgeworCQkJCQlCTlgyWF9FUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSBUUEEgIgorCQkJCQkJICAic2tiIHBvb2wgZm9yIHF1ZXVlWyVkXSAtICIKKwkJCQkJCSAgImRpc2FibGluZyBUUEEgb24gdGhpcyAiCisJCQkJCQkgICJxdWV1ZSFcbiIsIGopOworCQkJCQlibngyeF9mcmVlX3RwYV9wb29sKGJwLCBmcCwgaSk7CisJCQkJCWZwLT5kaXNhYmxlX3RwYSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwY2lfdW5tYXBfYWRkcl9zZXQoKHN0cnVjdCBzd19yeF9iZCAqKQorCQkJCQkJCSZicC0+ZnAtPnRwYV9wb29sW2ldLAorCQkJCQkJICAgbWFwcGluZywgMCk7CisJCQkJZnAtPnRwYV9zdGF0ZVtpXSA9IEJOWDJYX1RQQV9TVE9QOworCQkJfQorCQl9CisJfQorCisJZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07CisKKwkJZnAtPnJ4X2JkX2NvbnMgPSAwOworCQlmcC0+cnhfY29uc19zYiA9IEJOWDJYX1JYX1NCX0lOREVYOworCQlmcC0+cnhfYmRfY29uc19zYiA9IEJOWDJYX1JYX1NCX0JEX0lOREVYOworCisJCS8qICJuZXh0IHBhZ2UiIGVsZW1lbnRzIGluaXRpYWxpemF0aW9uICovCisJCS8qIFNHRSByaW5nICovCisJCWZvciAoaSA9IDE7IGkgPD0gTlVNX1JYX1NHRV9QQUdFUzsgaSsrKSB7CisJCQlzdHJ1Y3QgZXRoX3J4X3NnZSAqc2dlOworCisJCQlzZ2UgPSAmZnAtPnJ4X3NnZV9yaW5nW1JYX1NHRV9DTlQgKiBpIC0gMl07CisJCQlzZ2UtPmFkZHJfaGkgPQorCQkJCWNwdV90b19sZTMyKFU2NF9ISShmcC0+cnhfc2dlX21hcHBpbmcgKworCQkJCQlCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JYX1NHRV9QQUdFUykpKTsKKwkJCXNnZS0+YWRkcl9sbyA9CisJCQkJY3B1X3RvX2xlMzIoVTY0X0xPKGZwLT5yeF9zZ2VfbWFwcGluZyArCisJCQkJCUJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fUlhfU0dFX1BBR0VTKSkpOworCQl9CisKKwkJYm54MnhfaW5pdF9zZ2VfcmluZ19iaXRfbWFzayhmcCk7CisKKwkJLyogUlggQkQgcmluZyAqLworCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9SWF9SSU5HUzsgaSsrKSB7CisJCQlzdHJ1Y3QgZXRoX3J4X2JkICpyeF9iZDsKKworCQkJcnhfYmQgPSAmZnAtPnJ4X2Rlc2NfcmluZ1tSWF9ERVNDX0NOVCAqIGkgLSAyXTsKKwkJCXJ4X2JkLT5hZGRyX2hpID0KKwkJCQljcHVfdG9fbGUzMihVNjRfSEkoZnAtPnJ4X2Rlc2NfbWFwcGluZyArCisJCQkJCSAgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JYX1JJTkdTKSkpOworCQkJcnhfYmQtPmFkZHJfbG8gPQorCQkJCWNwdV90b19sZTMyKFU2NF9MTyhmcC0+cnhfZGVzY19tYXBwaW5nICsKKwkJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fUlhfUklOR1MpKSk7CisJCX0KKworCQkvKiBDUSByaW5nICovCisJCWZvciAoaSA9IDE7IGkgPD0gTlVNX1JDUV9SSU5HUzsgaSsrKSB7CisJCQlzdHJ1Y3QgZXRoX3J4X2NxZV9uZXh0X3BhZ2UgKm5leHRwZzsKKworCQkJbmV4dHBnID0gKHN0cnVjdCBldGhfcnhfY3FlX25leHRfcGFnZSAqKQorCQkJCSZmcC0+cnhfY29tcF9yaW5nW1JDUV9ERVNDX0NOVCAqIGkgLSAxXTsKKwkJCW5leHRwZy0+YWRkcl9oaSA9CisJCQkJY3B1X3RvX2xlMzIoVTY0X0hJKGZwLT5yeF9jb21wX21hcHBpbmcgKworCQkJCQkgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JDUV9SSU5HUykpKTsKKwkJCW5leHRwZy0+YWRkcl9sbyA9CisJCQkJY3B1X3RvX2xlMzIoVTY0X0xPKGZwLT5yeF9jb21wX21hcHBpbmcgKworCQkJCQkgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1JDUV9SSU5HUykpKTsKKwkJfQorCisJCS8qIEFsbG9jYXRlIFNHRXMgYW5kIGluaXRpYWxpemUgdGhlIHJpbmcgZWxlbWVudHMgKi8KKwkJZm9yIChpID0gMCwgcmluZ19wcm9kID0gMDsKKwkJICAgICBpIDwgTUFYX1JYX1NHRV9DTlQqTlVNX1JYX1NHRV9QQUdFUzsgaSsrKSB7CisKKwkJCWlmIChibngyeF9hbGxvY19yeF9zZ2UoYnAsIGZwLCByaW5nX3Byb2QpIDwgMCkgeworCQkJCUJOWDJYX0VSUigid2FzIG9ubHkgYWJsZSB0byBhbGxvY2F0ZSAiCisJCQkJCSAgIiVkIHJ4IHNnZXNcbiIsIGkpOworCQkJCUJOWDJYX0VSUigiZGlzYWJsaW5nIFRQQSBmb3IgcXVldWVbJWRdXG4iLCBqKTsKKwkJCQkvKiBDbGVhbnVwIGFscmVhZHkgYWxsb2NhdGVkIGVsZW1lbnRzICovCisJCQkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGZwLCByaW5nX3Byb2QpOworCQkJCWJueDJ4X2ZyZWVfdHBhX3Bvb2woYnAsIGZwLAorCQkJCQkgICAgICBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUgpOworCQkJCWZwLT5kaXNhYmxlX3RwYSA9IDE7CisJCQkJcmluZ19wcm9kID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJpbmdfcHJvZCA9IE5FWFRfU0dFX0lEWChyaW5nX3Byb2QpOworCQl9CisJCWZwLT5yeF9zZ2VfcHJvZCA9IHJpbmdfcHJvZDsKKworCQkvKiBBbGxvY2F0ZSBCRHMgYW5kIGluaXRpYWxpemUgQkQgcmluZyAqLworCQlmcC0+cnhfY29tcF9jb25zID0gZnAtPnJ4X2FsbG9jX2ZhaWxlZCA9IDA7CisJCWNxZV9yaW5nX3Byb2QgPSByaW5nX3Byb2QgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7CisJCQlpZiAoYm54MnhfYWxsb2Nfcnhfc2tiKGJwLCBmcCwgcmluZ19wcm9kKSA8IDApIHsKKwkJCQlCTlgyWF9FUlIoIndhcyBvbmx5IGFibGUgdG8gYWxsb2NhdGUgIgorCQkJCQkgICIlZCByeCBza2JzXG4iLCBpKTsKKwkJCQlmcC0+cnhfYWxsb2NfZmFpbGVkKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyaW5nX3Byb2QgPSBORVhUX1JYX0lEWChyaW5nX3Byb2QpOworCQkJY3FlX3JpbmdfcHJvZCA9IE5FWFRfUkNRX0lEWChjcWVfcmluZ19wcm9kKTsKKwkJCUJVR19UUkFQKHJpbmdfcHJvZCA+IGkpOworCQl9CisKKwkJZnAtPnJ4X2JkX3Byb2QgPSByaW5nX3Byb2Q7CisJCS8qIG11c3Qgbm90IGhhdmUgbW9yZSBhdmFpbGFibGUgQ1FFcyB0aGFuIEJEcyAqLworCQlmcC0+cnhfY29tcF9wcm9kID0gbWluKCh1MTYpKE5VTV9SQ1FfUklOR1MqUkNRX0RFU0NfQ05UKSwKKwkJCQkgICAgICAgY3FlX3JpbmdfcHJvZCk7CisJCWZwLT5yeF9wa3QgPSBmcC0+cnhfY2FsbHMgPSAwOworCisJCS8qIFdhcm5pbmchCisJCSAqIHRoaXMgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgKHRvIHRoZSBUU1RPUk0pCisJCSAqIG11c3Qgb25seSBiZSBkb25lIGFmdGVyIGNoaXAgaXMgaW5pdGlhbGl6ZWQKKwkJICovCisJCWJueDJ4X3VwZGF0ZV9yeF9wcm9kKGJwLCBmcCwgcmluZ19wcm9kLCBmcC0+cnhfY29tcF9wcm9kLAorCQkJCSAgICAgZnAtPnJ4X3NnZV9wcm9kKTsKKwkJaWYgKGogIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFVTVE9STV9NRU1fV09SS0FST1VORF9BRERSRVNTX09GRlNFVChmdW5jKSwKKwkJICAgICAgIFU2NF9MTyhmcC0+cnhfY29tcF9tYXBwaW5nKSk7CisJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFVTVE9STV9NRU1fV09SS0FST1VORF9BRERSRVNTX09GRlNFVChmdW5jKSArIDQsCisJCSAgICAgICBVNjRfSEkoZnAtPnJ4X2NvbXBfbWFwcGluZykpOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF90eF9yaW5nKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGksIGo7CisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKKworCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9UWF9SSU5HUzsgaSsrKSB7CisJCQlzdHJ1Y3QgZXRoX3R4X2JkICp0eF9iZCA9CisJCQkJJmZwLT50eF9kZXNjX3JpbmdbVFhfREVTQ19DTlQgKiBpIC0gMV07CisKKwkJCXR4X2JkLT5hZGRyX2hpID0KKwkJCQljcHVfdG9fbGUzMihVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyArCisJCQkJCSAgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1RYX1JJTkdTKSkpOworCQkJdHhfYmQtPmFkZHJfbG8gPQorCQkJCWNwdV90b19sZTMyKFU2NF9MTyhmcC0+dHhfZGVzY19tYXBwaW5nICsKKwkJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fVFhfUklOR1MpKSk7CisJCX0KKworCQlmcC0+dHhfcGt0X3Byb2QgPSAwOworCQlmcC0+dHhfcGt0X2NvbnMgPSAwOworCQlmcC0+dHhfYmRfcHJvZCA9IDA7CisJCWZwLT50eF9iZF9jb25zID0gMDsKKwkJZnAtPnR4X2NvbnNfc2IgPSBCTlgyWF9UWF9TQl9JTkRFWDsKKwkJZnAtPnR4X3BrdCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3NwX3Jpbmcoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCisJc3Bpbl9sb2NrX2luaXQoJmJwLT5zcHFfbG9jayk7CisKKwlicC0+c3BxX2xlZnQgPSBNQVhfU1BRX1BFTkRJTkc7CisJYnAtPnNwcV9wcm9kX2lkeCA9IDA7CisJYnAtPmRzYl9zcF9wcm9kID0gQk5YMlhfU1BfRFNCX0lOREVYOworCWJwLT5zcHFfcHJvZF9iZCA9IGJwLT5zcHE7CisJYnAtPnNwcV9sYXN0X2JkID0gYnAtPnNwcV9wcm9kX2JkICsgTUFYX1NQX0RFU0NfQ05UOworCisJUkVHX1dSKGJwLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIFhTVE9STV9TUFFfUEFHRV9CQVNFX09GRlNFVChmdW5jKSwKKwkgICAgICAgVTY0X0xPKGJwLT5zcHFfbWFwcGluZykpOworCVJFR19XUihicCwKKwkgICAgICAgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyBYU1RPUk1fU1BRX1BBR0VfQkFTRV9PRkZTRVQoZnVuYykgKyA0LAorCSAgICAgICBVNjRfSEkoYnAtPnNwcV9tYXBwaW5nKSk7CisKKwlSRUdfV1IoYnAsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgWFNUT1JNX1NQUV9QUk9EX09GRlNFVChmdW5jKSwKKwkgICAgICAgYnAtPnNwcV9wcm9kX2lkeCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfY29udGV4dChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGV0aF9jb250ZXh0ICpjb250ZXh0ID0gYm54Mnhfc3AoYnAsIGNvbnRleHRbaV0uZXRoKTsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCXU4IHNiX2lkID0gRlBfU0JfSUQoZnApOworCisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9oaSA9CisJCQkJCQlVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9sbyA9CisJCQkJCQlVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9oaSA9CisJCQkJCQlVNjRfSEkoZnAtPnR4X3Byb2RzX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5kYl9kYXRhX2FkZHJfbG8gPQorCQkJCQkJVTY0X0xPKGZwLT50eF9wcm9kc19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuc3RhdGlzdGljc19kYXRhID0gKEJQX0NMX0lEKGJwKSB8CisJCQkJWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFKTsKKworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc2JfaW5kZXhfbnVtYmVycyA9CisJCQkJCQlCTlgyWF9SWF9TQl9JTkRFWF9OVU07CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5jbGllbnRJZCA9IEZQX0NMX0lEKGZwKTsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uZmxhZ3MgPQorCQkJVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfTUNfQUxJR05NRU5UOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24ubWNfYWxpZ25tZW50X3NpemUgPSA2NDsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmJkX2J1ZmZfc2l6ZSA9CisJCQkJCQlicC0+cnhfYnVmX3VzZV9zaXplOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uYmRfcGFnZV9iYXNlX2hpID0KKwkJCQkJCVU2NF9ISShmcC0+cnhfZGVzY19tYXBwaW5nKTsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmJkX3BhZ2VfYmFzZV9sbyA9CisJCQkJCQlVNjRfTE8oZnAtPnJ4X2Rlc2NfbWFwcGluZyk7CisJCWlmICghZnAtPmRpc2FibGVfdHBhKSB7CisJCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uZmxhZ3MgfD0KKwkJCQkoVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBIHwKKwkJCQkgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcpOworCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNnZV9idWZmX3NpemUgPQorCQkJCQkodTE2KShCQ01fUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UpOworCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNnZV9wYWdlX2Jhc2VfaGkgPQorCQkJCQkJVTY0X0hJKGZwLT5yeF9zZ2VfbWFwcGluZyk7CisJCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc2dlX3BhZ2VfYmFzZV9sbyA9CisJCQkJCQlVNjRfTE8oZnAtPnJ4X3NnZV9tYXBwaW5nKTsKKwkJfQorCisJCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnNiX2luZGV4X251bWJlciA9CisJCQkJCQlIQ19JTkRFWF9DX0VUSF9UWF9DUV9DT05TOworCQljb250ZXh0LT5jc3Rvcm1fc3RfY29udGV4dC5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKKworCQljb250ZXh0LT54c3Rvcm1fYWdfY29udGV4dC5jZHVfcmVzZXJ2ZWQgPQorCQkJQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShIV19DSUQoYnAsIGkpLAorCQkJCQkgICAgICAgQ0RVX1JFR0lPTl9OVU1CRVJfWENNX0FHLAorCQkJCQkgICAgICAgRVRIX0NPTk5FQ1RJT05fVFlQRSk7CisJCWNvbnRleHQtPnVzdG9ybV9hZ19jb250ZXh0LmNkdV91c2FnZSA9CisJCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCisJCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9VQ01fQUcsCisJCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW5kX3RhYmxlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgaTsKKworCWlmICghaXNfbXVsdGkoYnApKQorCQlyZXR1cm47CisKKwlEUChORVRJRl9NU0dfSUZVUCwgIkluaXRpYWxpemluZyBpbmRpcmVjdGlvbiB0YWJsZVxuIik7CisJZm9yIChpID0gMDsgaSA8IFRTVE9STV9JTkRJUkVDVElPTl9UQUJMRV9TSVpFOyBpKyspCisJCVJFR19XUjgoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCisJCQlUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfT0ZGU0VUKHBvcnQpICsgaSwKKwkJCWkgJSBicC0+bnVtX3F1ZXVlcyk7CisKKwlSRUdfV1IoYnAsIFBSU19SRUdfQV9QUlNVXzIwLCAweGYpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zZXRfY2xpZW50X2NvbmZpZyhzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCB0c3Rvcm1fZXRoX2NsaWVudF9jb25maWcgdHN0b3JtX2NsaWVudCA9IHswfTsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBpOworCisJdHN0b3JtX2NsaWVudC5tdHUgPSBicC0+ZGV2LT5tdHUgKyBFVEhfT1ZSRUhFQUQ7CisJdHN0b3JtX2NsaWVudC5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPSAwOworCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzID0KKwkJCQlUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEU7CisjaWZkZWYgQkNNX1ZMQU4KKwlpZiAoYnAtPnJ4X21vZGUgJiYgYnAtPnZsZ3JwKSB7CisJCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzIHw9CisJCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEU7CisJCURQKE5FVElGX01TR19JRlVQLCAidmxhbiByZW1vdmFsIGVuYWJsZWRcbiIpOworCX0KKyNlbmRpZgorCisJaWYgKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgeworCQl0c3Rvcm1fY2xpZW50Lm1heF9zZ2VzX2Zvcl9wYWNrZXQgPQorCQkJQkNNX1BBR0VfQUxJR04odHN0b3JtX2NsaWVudC5tdHUpID4+IEJDTV9QQUdFX1NISUZUOworCQl0c3Rvcm1fY2xpZW50Lm1heF9zZ2VzX2Zvcl9wYWNrZXQgPQorCQkJKCh0c3Rvcm1fY2xpZW50Lm1heF9zZ2VzX2Zvcl9wYWNrZXQgKworCQkJICBQQUdFU19QRVJfU0dFIC0gMSkgJiAofihQQUdFU19QRVJfU0dFIC0gMSkpKSA+PgorCQkJUEFHRVNfUEVSX1NHRV9TSElGVDsKKworCQl0c3Rvcm1fY2xpZW50LmNvbmZpZ19mbGFncyB8PQorCQkJCVRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkc7CisJfQorCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVFNUT1JNX0NMSUVOVF9DT05GSUdfT0ZGU0VUKHBvcnQsIGJwLT5mcFtpXS5jbF9pZCksCisJCSAgICAgICAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVswXSk7CisJCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFRTVE9STV9DTElFTlRfQ09ORklHX09GRlNFVChwb3J0LCBicC0+ZnBbaV0uY2xfaWQpICsgNCwKKwkJICAgICAgICgodTMyICopJnRzdG9ybV9jbGllbnQpWzFdKTsKKwl9CisKKwlEUChCTlgyWF9NU0dfT0ZGLCAidHN0b3JtX2NsaWVudDogMHglMDh4IDB4JTA4eFxuIiwKKwkgICAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVswXSwgKCh1MzIgKikmdHN0b3JtX2NsaWVudClbMV0pOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCB0c3Rvcm1fZXRoX21hY19maWx0ZXJfY29uZmlnIHRzdG9ybV9tYWNfZmlsdGVyID0gezB9OworCWludCBtb2RlID0gYnAtPnJ4X21vZGU7CisJaW50IG1hc2sgPSAoMSA8PCBCUF9MX0lEKGJwKSk7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwlpbnQgaTsKKworCURQKE5FVElGX01TR19SWF9TVEFUVVMsICJyeCBtb2RlIGlzICVkXG4iLCBtb2RlKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQk5YMlhfUlhfTU9ERV9OT05FOiAvKiBubyBSeCAqLworCQl0c3Rvcm1fbWFjX2ZpbHRlci51Y2FzdF9kcm9wX2FsbCA9IG1hc2s7CisJCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2Ryb3BfYWxsID0gbWFzazsKKwkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfZHJvcF9hbGwgPSBtYXNrOworCQlicmVhazsKKwljYXNlIEJOWDJYX1JYX01PREVfTk9STUFMOgorCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKKwkJYnJlYWs7CisJY2FzZSBCTlgyWF9SWF9NT0RFX0FMTE1VTFRJOgorCQl0c3Rvcm1fbWFjX2ZpbHRlci5tY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKKwkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CisJCWJyZWFrOworCWNhc2UgQk5YMlhfUlhfTU9ERV9QUk9NSVNDOgorCQl0c3Rvcm1fbWFjX2ZpbHRlci51Y2FzdF9hY2NlcHRfYWxsID0gbWFzazsKKwkJdHN0b3JtX21hY19maWx0ZXIubWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CisJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCTlgyWF9FUlIoIkJBRCByeCBtb2RlICglZClcbiIsIG1vZGUpOworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fZXRoX21hY19maWx0ZXJfY29uZmlnKS80OyBpKyspIHsKKwkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVFNUT1JNX01BQ19GSUxURVJfQ09ORklHX09GRlNFVChmdW5jKSArIGkgKiA0LAorCQkgICAgICAgKCh1MzIgKikmdHN0b3JtX21hY19maWx0ZXIpW2ldKTsKKworLyoJCURQKE5FVElGX01TR19JRlVQLCAidHN0b3JtX21hY19maWx0ZXJbJWRdOiAweCUwOHhcbiIsIGksCisJCSAgICgodTMyICopJnRzdG9ybV9tYWNfZmlsdGVyKVtpXSk7ICovCisJfQorCisJaWYgKG1vZGUgIT0gQk5YMlhfUlhfTU9ERV9OT05FKQorCQlibngyeF9zZXRfY2xpZW50X2NvbmZpZyhicCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWwoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgdHN0b3JtX2V0aF9mdW5jdGlvbl9jb21tb25fY29uZmlnIHRzdG9ybV9jb25maWcgPSB7MH07CisJc3RydWN0IHN0YXRzX2luZGljYXRpb25fZmxhZ3Mgc3RhdHNfZmxhZ3MgPSB7MH07CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCBpOworCisJaWYgKGlzX211bHRpKGJwKSkgeworCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyA9IE1VTFRJX0ZMQUdTOworCQl0c3Rvcm1fY29uZmlnLnJzc19yZXN1bHRfbWFzayA9IE1VTFRJX01BU0s7CisJfQorCisJdHN0b3JtX2NvbmZpZy5sZWFkaW5nX2NsaWVudF9pZCA9IEJQX0xfSUQoYnApOworCisJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKworCSAgICAgICBUU1RPUk1fRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19PRkZTRVQoZnVuYyksCisJICAgICAgICgqKHUzMiAqKSZ0c3Rvcm1fY29uZmlnKSk7CisKKy8qCURQKE5FVElGX01TR19JRlVQLCAidHN0b3JtX2NvbmZpZzogMHglMDh4XG4iLAorCSAgICgqKHUzMiAqKSZ0c3Rvcm1fY29uZmlnKSk7ICovCisKKwlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsgLyogbm8gcnggdW50aWwgbGluayBpcyB1cCAqLworCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKKworCXN0YXRzX2ZsYWdzLmNvbGxlY3RfZXRoID0gMTsKKworCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSwKKwkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzBdKTsKKwlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9TVEFUU19GTEFHU19PRkZTRVQocG9ydCkgKyA0LAorCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMV0pOworCisJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKHBvcnQpLAorCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMF0pOworCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSArIDQsCisJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVsxXSk7CisKKwlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9TVEFUU19GTEFHU19PRkZTRVQocG9ydCksCisJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVswXSk7CisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKHBvcnQpICsgNCwKKwkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzFdKTsKKworLyoJRFAoTkVUSUZfTVNHX0lGVVAsICJzdGF0c19mbGFnczogMHglMDh4IDB4JTA4eFxuIiwKKwkgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMF0sICgodTMyICopJnN0YXRzX2ZsYWdzKVsxXSk7ICovCisKKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCVJFR19XUjgoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCwKKwkJCUlTX0UxSE1GKGJwKSk7CisJCVJFR19XUjgoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArIFRTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCwKKwkJCUlTX0UxSE1GKGJwKSk7CisJCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCwKKwkJCUlTX0UxSE1GKGJwKSk7CisJCVJFR19XUjgoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArIFVTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCwKKwkJCUlTX0UxSE1GKGJwKSk7CisKKwkJUkVHX1dSMTYoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9FMUhPVl9PRkZTRVQoZnVuYyksCisJCQkgYnAtPmUxaG92KTsKKwl9CisKKwkvKiBaZXJvIHRoaXMgbWFudWFseSBhcyBpdHMgaW5pdGlhbGl6YXRpb24gaXMKKwkgICBjdXJyZW50bHkgbWlzc2luZyBpbiB0aGUgaW5pdFRvb2wgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVVNUT1JNX0FHR19EQVRBX1NJWkUgPj4gMjsgaSsrKQorCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCSAgICAgICBVU1RPUk1fQUdHX0RBVEFfT0ZGU0VUICsgNCppLCAwKTsKKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCQl1MTYgbWF4X2FnZ19zaXplOworCisJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBGUF9DTF9JRChmcCkpLAorCQkgICAgICAgVTY0X0xPKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKKwkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIEZQX0NMX0lEKGZwKSkgKyA0LAorCQkgICAgICAgVTY0X0hJKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKKworCQltYXhfYWdnX3NpemUgPSBtaW4oKHUzMikoYnAtPnJ4X2J1Zl91c2Vfc2l6ZSArCisJCQkJCSA4KkJDTV9QQUdFX1NJWkUqUEFHRVNfUEVSX1NHRSksCisJCQkJICAgKHUzMikweGZmZmYpOworCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCSBVU1RPUk1fTUFYX0FHR19TSVpFX09GRlNFVChwb3J0LCBGUF9DTF9JRChmcCkpLAorCQkJIG1heF9hZ2dfc2l6ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9uaWNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJZnAtPmJwID0gYnA7CisJCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRDsKKwkJZnAtPmluZGV4ID0gaTsKKwkJZnAtPmNsX2lkID0gQlBfTF9JRChicCkgKyBpOworCQlmcC0+c2JfaWQgPSBmcC0+Y2xfaWQ7CisJCURQKE5FVElGX01TR19JRlVQLAorCQkgICAiYm54MnhfaW5pdF9zYiglcCwlcCkgaW5kZXggJWQgIGNsX2lkICVkICBzYiAlZFxuIiwKKwkJICAgYnAsIGZwLT5zdGF0dXNfYmxrLCBpLCBGUF9DTF9JRChmcCksIEZQX1NCX0lEKGZwKSk7CisJCWJueDJ4X2luaXRfc2IoYnAsIEZQX1NCX0lEKGZwKSwgZnAtPnN0YXR1c19ibGssCisJCQkgICAgICBmcC0+c3RhdHVzX2Jsa19tYXBwaW5nKTsKKwl9CisKKwlibngyeF9pbml0X2RlZl9zYihicCwgYnAtPmRlZl9zdGF0dXNfYmxrLAorCQkJICBicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywgREVGX1NCX0lEKTsKKwlibngyeF91cGRhdGVfY29hbGVzY2UoYnApOworCWJueDJ4X2luaXRfcnhfcmluZ3MoYnApOworCWJueDJ4X2luaXRfdHhfcmluZyhicCk7CisJYm54MnhfaW5pdF9zcF9yaW5nKGJwKTsKKwlibngyeF9pbml0X2NvbnRleHQoYnApOworCWJueDJ4X2luaXRfaW50ZXJuYWwoYnApOworCWJueDJ4X3N0b3JtX3N0YXRzX2luaXQoYnApOworCWJueDJ4X2luaXRfaW5kX3RhYmxlKGJwKTsKKwlibngyeF9pbnRfZW5hYmxlKGJwKTsKK30KKworLyogZW5kIG9mIG5pYyBpbml0ICovCisKKy8qCisgKiBnemlwIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCBibngyeF9ndW56aXBfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQoreworCWJwLT5ndW56aXBfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYnAtPnBkZXYsIEZXX0JVRl9TSVpFLAorCQkJCQkgICAgICAmYnAtPmd1bnppcF9tYXBwaW5nKTsKKwlpZiAoYnAtPmd1bnppcF9idWYgID09IE5VTEwpCisJCWdvdG8gZ3VuemlwX25vbWVtMTsKKworCWJwLT5zdHJtID0ga21hbGxvYyhzaXplb2YoKmJwLT5zdHJtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJwLT5zdHJtICA9PSBOVUxMKQorCQlnb3RvIGd1bnppcF9ub21lbTI7CisKKwlicC0+c3RybS0+d29ya3NwYWNlID0ga21hbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmIChicC0+c3RybS0+d29ya3NwYWNlID09IE5VTEwpCisJCWdvdG8gZ3VuemlwX25vbWVtMzsKKworCXJldHVybiAwOworCitndW56aXBfbm9tZW0zOgorCWtmcmVlKGJwLT5zdHJtKTsKKwlicC0+c3RybSA9IE5VTEw7CisKK2d1bnppcF9ub21lbTI6CisJcGNpX2ZyZWVfY29uc2lzdGVudChicC0+cGRldiwgRldfQlVGX1NJWkUsIGJwLT5ndW56aXBfYnVmLAorCQkJICAgIGJwLT5ndW56aXBfbWFwcGluZyk7CisJYnAtPmd1bnppcF9idWYgPSBOVUxMOworCitndW56aXBfbm9tZW0xOgorCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBDYW5ub3QgYWxsb2NhdGUgZmlybXdhcmUgYnVmZmVyIGZvciIKKwkgICAgICAgIiB1bi1jb21wcmVzc2lvblxuIiwgYnAtPmRldi0+bmFtZSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2d1bnppcF9lbmQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlrZnJlZShicC0+c3RybS0+d29ya3NwYWNlKTsKKworCWtmcmVlKGJwLT5zdHJtKTsKKwlicC0+c3RybSA9IE5VTEw7CisKKwlpZiAoYnAtPmd1bnppcF9idWYpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChicC0+cGRldiwgRldfQlVGX1NJWkUsIGJwLT5ndW56aXBfYnVmLAorCQkJCSAgICBicC0+Z3VuemlwX21hcHBpbmcpOworCQlicC0+Z3VuemlwX2J1ZiA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGJueDJ4X2d1bnppcChzdHJ1Y3QgYm54MnggKmJwLCB1OCAqemJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgbiwgcmM7CisKKwkvKiBjaGVjayBnemlwIGhlYWRlciAqLworCWlmICgoemJ1ZlswXSAhPSAweDFmKSB8fCAoemJ1ZlsxXSAhPSAweDhiKSB8fCAoemJ1ZlsyXSAhPSBaX0RFRkxBVEVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluID0gMTA7CisKKyNkZWZpbmUgRk5BTUUJCQkJMHg4CisKKwlpZiAoemJ1ZlszXSAmIEZOQU1FKQorCQl3aGlsZSAoKHpidWZbbisrXSAhPSAwKSAmJiAobiA8IGxlbikpOworCisJYnAtPnN0cm0tPm5leHRfaW4gPSB6YnVmICsgbjsKKwlicC0+c3RybS0+YXZhaWxfaW4gPSBsZW4gLSBuOworCWJwLT5zdHJtLT5uZXh0X291dCA9IGJwLT5ndW56aXBfYnVmOworCWJwLT5zdHJtLT5hdmFpbF9vdXQgPSBGV19CVUZfU0laRTsKKworCXJjID0gemxpYl9pbmZsYXRlSW5pdDIoYnAtPnN0cm0sIC1NQVhfV0JJVFMpOworCWlmIChyYyAhPSBaX09LKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHpsaWJfaW5mbGF0ZShicC0+c3RybSwgWl9GSU5JU0gpOworCWlmICgocmMgIT0gWl9PSykgJiYgKHJjICE9IFpfU1RSRUFNX0VORCkpCisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBGaXJtd2FyZSBkZWNvbXByZXNzaW9uIGVycm9yOiAlc1xuIiwKKwkJICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5zdHJtLT5tc2cpOworCisJYnAtPmd1bnppcF9vdXRsZW4gPSAoRldfQlVGX1NJWkUgLSBicC0+c3RybS0+YXZhaWxfb3V0KTsKKwlpZiAoYnAtPmd1bnppcF9vdXRsZW4gJiAweDMpCisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBGaXJtd2FyZSBkZWNvbXByZXNzaW9uIGVycm9yOiIKKwkJCQkgICAgIiBndW56aXBfb3V0bGVuICglZCkgbm90IGFsaWduZWRcbiIsCisJCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+Z3VuemlwX291dGxlbik7CisJYnAtPmd1bnppcF9vdXRsZW4gPj49IDI7CisKKwl6bGliX2luZmxhdGVFbmQoYnAtPnN0cm0pOworCisJaWYgKHJjID09IFpfU1RSRUFNX0VORCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIG5pYyBsb2FkL3VubG9hZCAqLworCisvKgorICogR2VuZXJhbCBzZXJ2aWNlIGZ1bmN0aW9ucworICovCisKKy8qIHNlbmQgYSBOSUcgbG9vcGJhY2sgZGVidWcgcGFja2V0ICovCitzdGF0aWMgdm9pZCBibngyeF9sYl9wY2t0KHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHdiX3dyaXRlWzNdOworCisJLyogRXRoZXJuZXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgKi8KKwl3Yl93cml0ZVswXSA9IDB4NTU1NTU1NTU7CisJd2Jfd3JpdGVbMV0gPSAweDU1NTU1NTU1OworCXdiX3dyaXRlWzJdID0gMHgyMDsJCS8qIFNPUCAqLworCVJFR19XUl9ETUFFKGJwLCBOSUdfUkVHX0RFQlVHX1BBQ0tFVF9MQiwgd2Jfd3JpdGUsIDMpOworCisJLyogTk9OLUlQIHByb3RvY29sICovCisJd2Jfd3JpdGVbMF0gPSAweDA5MDAwMDAwOworCXdiX3dyaXRlWzFdID0gMHg1NTU1NTU1NTsKKwl3Yl93cml0ZVsyXSA9IDB4MTA7CQkvKiBFT1AsIGVvcF9idmFsaWQgPSAwICovCisJUkVHX1dSX0RNQUUoYnAsIE5JR19SRUdfREVCVUdfUEFDS0VUX0xCLCB3Yl93cml0ZSwgMyk7Cit9CisKKy8qIHNvbWUgb2YgdGhlIGludGVybmFsIG1lbW9yaWVzCisgKiBhcmUgbm90IGRpcmVjdGx5IHJlYWRhYmxlIGZyb20gdGhlIGRyaXZlcgorICogdG8gdGVzdCB0aGVtIHdlIHNlbmQgZGVidWcgcGFja2V0cworICovCitzdGF0aWMgaW50IGJueDJ4X2ludF9tZW1fdGVzdChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBmYWN0b3I7CisJaW50IGNvdW50LCBpOworCXUzMiB2YWwgPSAwOworCisJaWYgKENISVBfUkVWX0lTX0ZQR0EoYnApKQorCQlmYWN0b3IgPSAxMjA7CisJZWxzZSBpZiAoQ0hJUF9SRVZfSVNfRU1VTChicCkpCisJCWZhY3RvciA9IDIwMDsKKwllbHNlCisJCWZhY3RvciA9IDE7CisKKwlEUChORVRJRl9NU0dfSFcsICJzdGFydCBwYXJ0MVxuIik7CisKKwkvKiBEaXNhYmxlIGlucHV0cyBvZiBwYXJzZXIgbmVpZ2hib3IgYmxvY2tzICovCisJUkVHX1dSKGJwLCBUU0RNX1JFR19FTkFCTEVfSU4xLCAweDApOworCVJFR19XUihicCwgVENNX1JFR19QUlNfSUZFTiwgMHgwKTsKKwlSRUdfV1IoYnAsIENGQ19SRUdfREVCVUcwLCAweDEpOworCU5JR19XUihOSUdfUkVHX1BSU19SRVFfSU5fRU4sIDB4MCk7CisKKwkvKiAgV3JpdGUgMCB0byBwYXJzZXIgY3JlZGl0cyBmb3IgQ0ZDIHNlYXJjaCByZXF1ZXN0ICovCisJUkVHX1dSKGJwLCBQUlNfUkVHX0NGQ19TRUFSQ0hfSU5JVElBTF9DUkVESVQsIDB4MCk7CisKKwkvKiBzZW5kIEV0aGVybmV0IHBhY2tldCAqLworCWJueDJ4X2xiX3Bja3QoYnApOworCisJLyogVE9ETyBkbyBpIHJlc2V0IE5JRyBzdGF0aXN0aWM/ICovCisJLyogV2FpdCB1bnRpbCBOSUcgcmVnaXN0ZXIgc2hvd3MgMSBwYWNrZXQgb2Ygc2l6ZSAweDEwICovCisJY291bnQgPSAxMDAwICogZmFjdG9yOworCXdoaWxlIChjb3VudCkgeworCisJCWJueDJ4X3JlYWRfZG1hZShicCwgTklHX1JFR19TVEFUMl9CUkJfT0NURVQsIDIpOworCQl2YWwgPSAqYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pOworCQlpZiAodmFsID09IDB4MTApCisJCQlicmVhazsKKworCQltc2xlZXAoMTApOworCQljb3VudC0tOworCX0KKwlpZiAodmFsICE9IDB4MTApIHsKKwkJQk5YMlhfRVJSKCJOSUcgdGltZW91dCAgdmFsID0gMHgleFxuIiwgdmFsKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFdhaXQgdW50aWwgUFJTIHJlZ2lzdGVyIHNob3dzIDEgcGFja2V0ICovCisJY291bnQgPSAxMDAwICogZmFjdG9yOworCXdoaWxlIChjb3VudCkgeworCQl2YWwgPSBSRUdfUkQoYnAsIFBSU19SRUdfTlVNX09GX1BBQ0tFVFMpOworCQlpZiAodmFsID09IDEpCisJCQlicmVhazsKKworCQltc2xlZXAoMTApOworCQljb3VudC0tOworCX0KKwlpZiAodmFsICE9IDB4MSkgeworCQlCTlgyWF9FUlIoIlBSUyB0aW1lb3V0IHZhbCA9IDB4JXhcbiIsIHZhbCk7CisJCXJldHVybiAtMjsKKwl9CisKKwkvKiBSZXNldCBhbmQgaW5pdCBCUkIsIFBSUyAqLworCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsIDB4MDMpOworCW1zbGVlcCg1MCk7CisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9TRVQsIDB4MDMpOworCW1zbGVlcCg1MCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgQlJCMV9DT01NT05fU1RBUlQsIEJSQjFfQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgUFJTX0NPTU1PTl9TVEFSVCwgUFJTX0NPTU1PTl9FTkQpOworCisJRFAoTkVUSUZfTVNHX0hXLCAicGFydDJcbiIpOworCisJLyogRGlzYWJsZSBpbnB1dHMgb2YgcGFyc2VyIG5laWdoYm9yIGJsb2NrcyAqLworCVJFR19XUihicCwgVFNETV9SRUdfRU5BQkxFX0lOMSwgMHgwKTsKKwlSRUdfV1IoYnAsIFRDTV9SRUdfUFJTX0lGRU4sIDB4MCk7CisJUkVHX1dSKGJwLCBDRkNfUkVHX0RFQlVHMCwgMHgxKTsKKwlOSUdfV1IoTklHX1JFR19QUlNfUkVRX0lOX0VOLCAweDApOworCisJLyogV3JpdGUgMCB0byBwYXJzZXIgY3JlZGl0cyBmb3IgQ0ZDIHNlYXJjaCByZXF1ZXN0ICovCisJUkVHX1dSKGJwLCBQUlNfUkVHX0NGQ19TRUFSQ0hfSU5JVElBTF9DUkVESVQsIDB4MCk7CisKKwkvKiBzZW5kIDEwIEV0aGVybmV0IHBhY2tldHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJYm54MnhfbGJfcGNrdChicCk7CisKKwkvKiBXYWl0IHVudGlsIE5JRyByZWdpc3RlciBzaG93cyAxMCArIDEKKwkgICBwYWNrZXRzIG9mIHNpemUgMTEqMHgxMCA9IDB4YjAgKi8KKwljb3VudCA9IDEwMDAgKiBmYWN0b3I7CisJd2hpbGUgKGNvdW50KSB7CisKKwkJYm54MnhfcmVhZF9kbWFlKGJwLCBOSUdfUkVHX1NUQVQyX0JSQl9PQ1RFVCwgMik7CisJCXZhbCA9ICpibngyeF9zcChicCwgd2JfZGF0YVswXSk7CisJCWlmICh2YWwgPT0gMHhiMCkKKwkJCWJyZWFrOworCisJCW1zbGVlcCgxMCk7CisJCWNvdW50LS07CisJfQorCWlmICh2YWwgIT0gMHhiMCkgeworCQlCTlgyWF9FUlIoIk5JRyB0aW1lb3V0ICB2YWwgPSAweCV4XG4iLCB2YWwpOworCQlyZXR1cm4gLTM7CisJfQorCisJLyogV2FpdCB1bnRpbCBQUlMgcmVnaXN0ZXIgc2hvd3MgMiBwYWNrZXRzICovCisJdmFsID0gUkVHX1JEKGJwLCBQUlNfUkVHX05VTV9PRl9QQUNLRVRTKTsKKwlpZiAodmFsICE9IDIpCisJCUJOWDJYX0VSUigiUFJTIHRpbWVvdXQgIHZhbCA9IDB4JXhcbiIsIHZhbCk7CisKKwkvKiBXcml0ZSAxIHRvIHBhcnNlciBjcmVkaXRzIGZvciBDRkMgc2VhcmNoIHJlcXVlc3QgKi8KKwlSRUdfV1IoYnAsIFBSU19SRUdfQ0ZDX1NFQVJDSF9JTklUSUFMX0NSRURJVCwgMHgxKTsKKworCS8qIFdhaXQgdW50aWwgUFJTIHJlZ2lzdGVyIHNob3dzIDMgcGFja2V0cyAqLworCW1zbGVlcCgxMCAqIGZhY3Rvcik7CisJLyogV2FpdCB1bnRpbCBOSUcgcmVnaXN0ZXIgc2hvd3MgMSBwYWNrZXQgb2Ygc2l6ZSAweDEwICovCisJdmFsID0gUkVHX1JEKGJwLCBQUlNfUkVHX05VTV9PRl9QQUNLRVRTKTsKKwlpZiAodmFsICE9IDMpCisJCUJOWDJYX0VSUigiUFJTIHRpbWVvdXQgIHZhbCA9IDB4JXhcbiIsIHZhbCk7CisKKwkvKiBjbGVhciBOSUcgRU9QIEZJRk8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykKKwkJUkVHX1JEKGJwLCBOSUdfUkVHX0lOR1JFU1NfRU9QX0xCX0ZJRk8pOworCXZhbCA9IFJFR19SRChicCwgTklHX1JFR19JTkdSRVNTX0VPUF9MQl9FTVBUWSk7CisJaWYgKHZhbCAhPSAxKSB7CisJCUJOWDJYX0VSUigiY2xlYXIgb2YgTklHIGZhaWxlZFxuIik7CisJCXJldHVybiAtNDsKKwl9CisKKwkvKiBSZXNldCBhbmQgaW5pdCBCUkIsIFBSUywgTklHICovCisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9DTEVBUiwgMHgwMyk7CisJbXNsZWVwKDUwKTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVCwgMHgwMyk7CisJbXNsZWVwKDUwKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBCUkIxX0NPTU1PTl9TVEFSVCwgQlJCMV9DT01NT05fRU5EKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBQUlNfQ09NTU9OX1NUQVJULCBQUlNfQ09NTU9OX0VORCk7CisjaWZuZGVmIEJDTV9JU0NTSQorCS8qIHNldCBOSUMgbW9kZSAqLworCVJFR19XUihicCwgUFJTX1JFR19OSUNfTU9ERSwgMSk7CisjZW5kaWYKKworCS8qIEVuYWJsZSBpbnB1dHMgb2YgcGFyc2VyIG5laWdoYm9yIGJsb2NrcyAqLworCVJFR19XUihicCwgVFNETV9SRUdfRU5BQkxFX0lOMSwgMHg3ZmZmZmZmZik7CisJUkVHX1dSKGJwLCBUQ01fUkVHX1BSU19JRkVOLCAweDEpOworCVJFR19XUihicCwgQ0ZDX1JFR19ERUJVRzAsIDB4MCk7CisJTklHX1dSKE5JR19SRUdfUFJTX1JFUV9JTl9FTiwgMHgxKTsKKworCURQKE5FVElGX01TR19IVywgImRvbmVcbiIpOworCisJcmV0dXJuIDA7IC8qIE9LICovCit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9ibG9ja3NfYXR0ZW50aW9uKHN0cnVjdCBibngyeCAqYnApCit7CisJUkVHX1dSKGJwLCBQWFBfUkVHX1BYUF9JTlRfTUFTS18wLCAwKTsKKwlSRUdfV1IoYnAsIFBYUF9SRUdfUFhQX0lOVF9NQVNLXzEsIDApOworCVJFR19XUihicCwgRE9SUV9SRUdfRE9SUV9JTlRfTUFTSywgMCk7CisJUkVHX1dSKGJwLCBDRkNfUkVHX0NGQ19JTlRfTUFTSywgMCk7CisJUkVHX1dSKGJwLCBRTV9SRUdfUU1fSU5UX01BU0ssIDApOworCVJFR19XUihicCwgVE1fUkVHX1RNX0lOVF9NQVNLLCAwKTsKKwlSRUdfV1IoYnAsIFhTRE1fUkVHX1hTRE1fSU5UX01BU0tfMCwgMCk7CisJUkVHX1dSKGJwLCBYU0RNX1JFR19YU0RNX0lOVF9NQVNLXzEsIDApOworCVJFR19XUihicCwgWENNX1JFR19YQ01fSU5UX01BU0ssIDApOworLyoJUkVHX1dSKGJwLCBYU0VNX1JFR19YU0VNX0lOVF9NQVNLXzAsIDApOyAqLworLyoJUkVHX1dSKGJwLCBYU0VNX1JFR19YU0VNX0lOVF9NQVNLXzEsIDApOyAqLworCVJFR19XUihicCwgVVNETV9SRUdfVVNETV9JTlRfTUFTS18wLCAwKTsKKwlSRUdfV1IoYnAsIFVTRE1fUkVHX1VTRE1fSU5UX01BU0tfMSwgMCk7CisJUkVHX1dSKGJwLCBVQ01fUkVHX1VDTV9JTlRfTUFTSywgMCk7CisvKglSRUdfV1IoYnAsIFVTRU1fUkVHX1VTRU1fSU5UX01BU0tfMCwgMCk7ICovCisvKglSRUdfV1IoYnAsIFVTRU1fUkVHX1VTRU1fSU5UX01BU0tfMSwgMCk7ICovCisJUkVHX1dSKGJwLCBHUkNCQVNFX1VQQiArIFBCX1JFR19QQl9JTlRfTUFTSywgMCk7CisJUkVHX1dSKGJwLCBDU0RNX1JFR19DU0RNX0lOVF9NQVNLXzAsIDApOworCVJFR19XUihicCwgQ1NETV9SRUdfQ1NETV9JTlRfTUFTS18xLCAwKTsKKwlSRUdfV1IoYnAsIENDTV9SRUdfQ0NNX0lOVF9NQVNLLCAwKTsKKy8qCVJFR19XUihicCwgQ1NFTV9SRUdfQ1NFTV9JTlRfTUFTS18wLCAwKTsgKi8KKy8qCVJFR19XUihicCwgQ1NFTV9SRUdfQ1NFTV9JTlRfTUFTS18xLCAwKTsgKi8KKwlpZiAoQ0hJUF9SRVZfSVNfRlBHQShicCkpCisJCVJFR19XUihicCwgUFhQMl9SRUdfUFhQMl9JTlRfTUFTS18wLCAweDU4MDAwMCk7CisJZWxzZQorCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BYUDJfSU5UX01BU0tfMCwgMHg0ODAwMDApOworCVJFR19XUihicCwgVFNETV9SRUdfVFNETV9JTlRfTUFTS18wLCAwKTsKKwlSRUdfV1IoYnAsIFRTRE1fUkVHX1RTRE1fSU5UX01BU0tfMSwgMCk7CisJUkVHX1dSKGJwLCBUQ01fUkVHX1RDTV9JTlRfTUFTSywgMCk7CisvKglSRUdfV1IoYnAsIFRTRU1fUkVHX1RTRU1fSU5UX01BU0tfMCwgMCk7ICovCisvKglSRUdfV1IoYnAsIFRTRU1fUkVHX1RTRU1fSU5UX01BU0tfMSwgMCk7ICovCisJUkVHX1dSKGJwLCBDRFVfUkVHX0NEVV9JTlRfTUFTSywgMCk7CisJUkVHX1dSKGJwLCBETUFFX1JFR19ETUFFX0lOVF9NQVNLLCAwKTsKKy8qCVJFR19XUihicCwgTUlTQ19SRUdfTUlTQ19JTlRfTUFTSywgMCk7ICovCisJUkVHX1dSKGJwLCBQQkZfUkVHX1BCRl9JTlRfTUFTSywgMFgxOCk7CQkvKiBiaXQgMyw0IG1hc2tlZCAqLworfQorCisKK3N0YXRpYyBpbnQgYm54MnhfaW5pdF9jb21tb24oc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgdmFsLCBpOworCisJRFAoQk5YMlhfTVNHX01DUCwgInN0YXJ0aW5nIGNvbW1vbiBpbml0ICBmdW5jICVkXG4iLCBCUF9GVU5DKGJwKSk7CisKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVCwgMHhmZmZmZmZmZik7CisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsIDB4ZmZmYyk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBNSVNDX0NPTU1PTl9TVEFSVCwgTUlTQ19DT01NT05fRU5EKTsKKwlpZiAoQ0hJUF9JU19FMUgoYnApKQorCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0UxSE1GX01PREUsIElTX0UxSE1GKGJwKSk7CisKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX0xDUExMX0NUUkxfUkVHXzIsIDB4MTAwKTsKKwltc2xlZXAoMzApOworCVJFR19XUihicCwgTUlTQ19SRUdfTENQTExfQ1RSTF9SRUdfMiwgMHgwKTsKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIFBYUF9DT01NT05fU1RBUlQsIFBYUF9DT01NT05fRU5EKTsKKwlpZiAoQ0hJUF9JU19FMShicCkpIHsKKwkJLyogZW5hYmxlIEhXIGludGVycnVwdCBmcm9tIFBYUCBvbiBVU0RNIG92ZXJmbG93CisJCSAgIGJpdCAxNiBvbiBJTlRfTUFTS18wICovCisJCVJFR19XUihicCwgUFhQX1JFR19QWFBfSU5UX01BU0tfMCwgMCk7CisJfQorCisJYm54MnhfaW5pdF9ibG9jayhicCwgUFhQMl9DT01NT05fU1RBUlQsIFBYUDJfQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9weHAoYnApOworCisjaWZkZWYgX19CSUdfRU5ESUFOCisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9RTV9FTkRJQU5fTSwgMSk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9UTV9FTkRJQU5fTSwgMSk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9TUkNfRU5ESUFOX00sIDEpOworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfQ0RVX0VORElBTl9NLCAxKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0RCR19FTkRJQU5fTSwgMSk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9IQ19FTkRJQU5fTSwgMSk7CisKKy8qCVJFR19XUihicCwgUFhQMl9SRUdfUkRfUEJGX1NXQVBfTU9ERSwgMSk7ICovCisJUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9RTV9TV0FQX01PREUsIDEpOworCVJFR19XUihicCwgUFhQMl9SRUdfUkRfVE1fU1dBUF9NT0RFLCAxKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX1NSQ19TV0FQX01PREUsIDEpOworCVJFR19XUihicCwgUFhQMl9SRUdfUkRfQ0RVUkRfU1dBUF9NT0RFLCAxKTsKKyNlbmRpZgorCisjaWZuZGVmIEJDTV9JU0NTSQorCQkvKiBzZXQgTklDIG1vZGUgKi8KKwkJUkVHX1dSKGJwLCBQUlNfUkVHX05JQ19NT0RFLCAxKTsKKyNlbmRpZgorCisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9DRFVfUF9TSVpFLCAyKTsKKyNpZmRlZiBCQ01fSVNDU0kKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1RNX1BfU0laRSwgNSk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9RTV9QX1NJWkUsIDUpOworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfU1JDX1BfU0laRSwgNSk7CisjZW5kaWYKKworCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSAmJiBDSElQX0lTX0UxSChicCkpCisJCVJFR19XUihicCwgUFhQMl9SRUdfUEdMX1RBR1NfTElNSVQsIDB4MSk7CisKKwkvKiBsZXQgdGhlIEhXIGRvIGl0J3MgbWFnaWMgLi4uICovCisJbXNsZWVwKDEwMCk7CisJLyogZmluaXNoIFBYUCBpbml0ICovCisJdmFsID0gUkVHX1JEKGJwLCBQWFAyX1JFR19SUV9DRkdfRE9ORSk7CisJaWYgKHZhbCAhPSAxKSB7CisJCUJOWDJYX0VSUigiUFhQMiBDRkcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJdmFsID0gUkVHX1JEKGJwLCBQWFAyX1JFR19SRF9JTklUX0RPTkUpOworCWlmICh2YWwgIT0gMSkgeworCQlCTlgyWF9FUlIoIlBYUDIgUkRfSU5JVCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfRElTQUJMRV9JTlBVVFMsIDApOworCVJFR19XUihicCwgUFhQMl9SRUdfUkRfRElTQUJMRV9JTlBVVFMsIDApOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgRE1BRV9DT01NT05fU1RBUlQsIERNQUVfQ09NTU9OX0VORCk7CisKKwkvKiBjbGVhbiB0aGUgRE1BRSBtZW1vcnkgKi8KKwlicC0+ZG1hZV9yZWFkeSA9IDE7CisJYm54MnhfaW5pdF9maWxsKGJwLCBUU0VNX1JFR19QUkFNLCAwLCA4KTsKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIFRDTV9DT01NT05fU1RBUlQsIFRDTV9DT01NT05fRU5EKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBVQ01fQ09NTU9OX1NUQVJULCBVQ01fQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgQ0NNX0NPTU1PTl9TVEFSVCwgQ0NNX0NPTU1PTl9FTkQpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFhDTV9DT01NT05fU1RBUlQsIFhDTV9DT01NT05fRU5EKTsKKworCWJueDJ4X3JlYWRfZG1hZShicCwgWFNFTV9SRUdfUEFTU0lWRV9CVUZGRVIsIDMpOworCWJueDJ4X3JlYWRfZG1hZShicCwgQ1NFTV9SRUdfUEFTU0lWRV9CVUZGRVIsIDMpOworCWJueDJ4X3JlYWRfZG1hZShicCwgVFNFTV9SRUdfUEFTU0lWRV9CVUZGRVIsIDMpOworCWJueDJ4X3JlYWRfZG1hZShicCwgVVNFTV9SRUdfUEFTU0lWRV9CVUZGRVIsIDMpOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgUU1fQ09NTU9OX1NUQVJULCBRTV9DT01NT05fRU5EKTsKKwkvKiBzb2Z0IHJlc2V0IHB1bHNlICovCisJUkVHX1dSKGJwLCBRTV9SRUdfU09GVF9SRVNFVCwgMSk7CisJUkVHX1dSKGJwLCBRTV9SRUdfU09GVF9SRVNFVCwgMCk7CisKKyNpZmRlZiBCQ01fSVNDU0kKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBUSU1FUlNfQ09NTU9OX1NUQVJULCBUSU1FUlNfQ09NTU9OX0VORCk7CisjZW5kaWYKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIERRX0NPTU1PTl9TVEFSVCwgRFFfQ09NTU9OX0VORCk7CisJUkVHX1dSKGJwLCBET1JRX1JFR19EUE1fQ0lEX09GU1QsIEJDTV9QQUdFX1NISUZUKTsKKwlpZiAoIUNISVBfUkVWX0lTX1NMT1coYnApKSB7CisJCS8qIGVuYWJsZSBodyBpbnRlcnJ1cHQgZnJvbSBkb29yYmVsbCBRICovCisJCVJFR19XUihicCwgRE9SUV9SRUdfRE9SUV9JTlRfTUFTSywgMCk7CisJfQorCisJYm54MnhfaW5pdF9ibG9jayhicCwgQlJCMV9DT01NT05fU1RBUlQsIEJSQjFfQ09NTU9OX0VORCk7CisJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKSB7CisJCS8qIGZpeCBmb3IgZW11bGF0aW9uIGFuZCBGUEdBIGZvciBubyBwYXVzZSAqLworCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzAsIDUxMyk7CisJCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMSwgNTEzKTsKKwkJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAsIDApOworCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMSwgMCk7CisJfQorCisJYm54MnhfaW5pdF9ibG9jayhicCwgUFJTX0NPTU1PTl9TVEFSVCwgUFJTX0NPTU1PTl9FTkQpOworCWlmIChDSElQX0lTX0UxSChicCkpCisJCVJFR19XUihicCwgUFJTX1JFR19FMUhPVl9NT0RFLCBJU19FMUhNRihicCkpOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgVFNETV9DT01NT05fU1RBUlQsIFRTRE1fQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgQ1NETV9DT01NT05fU1RBUlQsIENTRE1fQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgVVNETV9DT01NT05fU1RBUlQsIFVTRE1fQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgWFNETV9DT01NT05fU1RBUlQsIFhTRE1fQ09NTU9OX0VORCk7CisKKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSLCAwLAorCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKKwkJYm54MnhfaW5pdF9maWxsKGJwLAorCQkJCVRTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAorCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKKwkJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsCisJCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOworCQlibngyeF9pbml0X2ZpbGwoYnAsCisJCQkJQ1NUT1JNX0lOVE1FTV9BRERSICsgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIsCisJCQkJMCwgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOworCQlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiwgMCwKKwkJCQlTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7CisJCWJueDJ4X2luaXRfZmlsbChicCwKKwkJCQlYU1RPUk1fSU5UTUVNX0FERFIgKyBTVE9STV9JTlRNRU1fU0laRV9FMUgvMiwKKwkJCQkwLCBTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7CisJCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSLCAwLAorCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKKwkJYm54MnhfaW5pdF9maWxsKGJwLAorCQkJCVVTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAorCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKKwl9IGVsc2UgeyAvKiBFMSAqLworCQlibngyeF9pbml0X2ZpbGwoYnAsIFRTVE9STV9JTlRNRU1fQUREUiwgMCwKKwkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7CisJCWJueDJ4X2luaXRfZmlsbChicCwgQ1NUT1JNX0lOVE1FTV9BRERSLCAwLAorCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxKTsKKwkJYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIsIDAsCisJCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTEpOworCQlibngyeF9pbml0X2ZpbGwoYnAsIFVTVE9STV9JTlRNRU1fQUREUiwgMCwKKwkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7CisJfQorCisJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9DT01NT05fU1RBUlQsIFRTRU1fQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgVVNFTV9DT01NT05fU1RBUlQsIFVTRU1fQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgQ1NFTV9DT01NT05fU1RBUlQsIENTRU1fQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgWFNFTV9DT01NT05fU1RBUlQsIFhTRU1fQ09NTU9OX0VORCk7CisKKwkvKiBzeW5jIHNlbWkgcnRjICovCisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9DTEVBUiwKKwkgICAgICAgMHg4MDAwMDAwMCk7CisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9TRVQsCisJICAgICAgIDB4ODAwMDAwMDApOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgVVBCX0NPTU1PTl9TVEFSVCwgVVBCX0NPTU1PTl9FTkQpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFhQQl9DT01NT05fU1RBUlQsIFhQQl9DT01NT05fRU5EKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBQQkZfQ09NTU9OX1NUQVJULCBQQkZfQ09NTU9OX0VORCk7CisKKwlSRUdfV1IoYnAsIFNSQ19SRUdfU09GVF9SU1QsIDEpOworCWZvciAoaSA9IFNSQ19SRUdfS0VZUlNTMF8wOyBpIDw9IFNSQ19SRUdfS0VZUlNTMV85OyBpICs9IDQpIHsKKwkJUkVHX1dSKGJwLCBpLCAweGMwY2FjMDFhKTsKKwkJLyogVE9ETzogcmVwbGFjZSB3aXRoIHNvbWV0aGluZyBtZWFuaW5nZnVsICovCisJfQorCWlmIChDSElQX0lTX0UxSChicCkpCisJCWJueDJ4X2luaXRfYmxvY2soYnAsIFNSQ0hfQ09NTU9OX1NUQVJULCBTUkNIX0NPTU1PTl9FTkQpOworCVJFR19XUihicCwgU1JDX1JFR19TT0ZUX1JTVCwgMCk7CisKKwlpZiAoc2l6ZW9mKHVuaW9uIGNkdV9jb250ZXh0KSAhPSAxMDI0KQorCQkvKiB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgYSBjb250ZXh0IGlzIDEwMjQgYnl0ZXMgKi8KKwkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJwbGVhc2UgYWRqdXN0IHRoZSBzaXplIG9mIgorCQkgICAgICAgIiBjZHVfY29udGV4dCglbGQpXG4iLCAobG9uZylzaXplb2YodW5pb24gY2R1X2NvbnRleHQpKTsKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIENEVV9DT01NT05fU1RBUlQsIENEVV9DT01NT05fRU5EKTsKKwl2YWwgPSAoNCA8PCAyNCkgKyAoMCA8PCAxMikgKyAxMDI0OworCVJFR19XUihicCwgQ0RVX1JFR19DRFVfR0xPQkFMX1BBUkFNUywgdmFsKTsKKwlpZiAoQ0hJUF9JU19FMShicCkpIHsKKwkJLyogISEhIGZpeCBweHAgY2xpZW50IGNyZGl0IHVudGlsIGV4Y2VsIHVwZGF0ZSAqLworCQlSRUdfV1IoYnAsIENEVV9SRUdfQ0RVX0RFQlVHLCAweDI2NCk7CisJCVJFR19XUihicCwgQ0RVX1JFR19DRFVfREVCVUcsIDApOworCX0KKworCWJueDJ4X2luaXRfYmxvY2soYnAsIENGQ19DT01NT05fU1RBUlQsIENGQ19DT01NT05fRU5EKTsKKwlSRUdfV1IoYnAsIENGQ19SRUdfSU5JVF9SRUcsIDB4N0ZGKTsKKworCWJueDJ4X2luaXRfYmxvY2soYnAsIEhDX0NPTU1PTl9TVEFSVCwgSENfQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgTUlTQ19BRVVfQ09NTU9OX1NUQVJULCBNSVNDX0FFVV9DT01NT05fRU5EKTsKKworCS8qIFBYUENTIENPTU1PTiBjb21lcyBoZXJlICovCisJLyogUmVzZXQgUENJRSBlcnJvcnMgZm9yIGRlYnVnICovCisJUkVHX1dSKGJwLCAweDI4MTQsIDB4ZmZmZmZmZmYpOworCVJFR19XUihicCwgMHgzODIwLCAweGZmZmZmZmZmKTsKKworCS8qIEVNQUMwIENPTU1PTiBjb21lcyBoZXJlICovCisJLyogRU1BQzEgQ09NTU9OIGNvbWVzIGhlcmUgKi8KKwkvKiBEQlUgQ09NTU9OIGNvbWVzIGhlcmUgKi8KKwkvKiBEQkcgQ09NTU9OIGNvbWVzIGhlcmUgKi8KKworCWJueDJ4X2luaXRfYmxvY2soYnAsIE5JR19DT01NT05fU1RBUlQsIE5JR19DT01NT05fRU5EKTsKKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCVJFR19XUihicCwgTklHX1JFR19MTEhfTUZfTU9ERSwgSVNfRTFITUYoYnApKTsKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSF9FMUhPVl9NT0RFLCBJU19FMUhNRihicCkpOworCX0KKworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJbXNsZWVwKDIwMCk7CisKKwkvKiBmaW5pc2ggQ0ZDIGluaXQgKi8KKwl2YWwgPSByZWdfcG9sbChicCwgQ0ZDX1JFR19MTF9JTklUX0RPTkUsIDEsIDEwMCwgMTApOworCWlmICh2YWwgIT0gMSkgeworCQlCTlgyWF9FUlIoIkNGQyBMTF9JTklUIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXZhbCA9IHJlZ19wb2xsKGJwLCBDRkNfUkVHX0FDX0lOSVRfRE9ORSwgMSwgMTAwLCAxMCk7CisJaWYgKHZhbCAhPSAxKSB7CisJCUJOWDJYX0VSUigiQ0ZDIEFDX0lOSVQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJdmFsID0gcmVnX3BvbGwoYnAsIENGQ19SRUdfQ0FNX0lOSVRfRE9ORSwgMSwgMTAwLCAxMCk7CisJaWYgKHZhbCAhPSAxKSB7CisJCUJOWDJYX0VSUigiQ0ZDIENBTV9JTklUIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCVJFR19XUihicCwgQ0ZDX1JFR19ERUJVRzAsIDApOworCisJLyogcmVhZCBOSUcgc3RhdGlzdGljCisJICAgdG8gc2VlIGlmIHRoaXMgaXMgb3VyIGZpcnN0IHVwIHNpbmNlIHBvd2VydXAgKi8KKwlibngyeF9yZWFkX2RtYWUoYnAsIE5JR19SRUdfU1RBVDJfQlJCX09DVEVULCAyKTsKKwl2YWwgPSAqYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pOworCisJLyogZG8gaW50ZXJuYWwgbWVtb3J5IHNlbGYgdGVzdCAqLworCWlmICgoQ0hJUF9JU19FMShicCkpICYmICh2YWwgPT0gMCkgJiYgYm54MnhfaW50X21lbV90ZXN0KGJwKSkgeworCQlCTlgyWF9FUlIoImludGVybmFsIG1lbSBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzd2l0Y2ggKGJwLT5jb21tb24uYm9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSykgeworCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRzoKKwkJLyogRmFuIGZhaWx1cmUgaXMgaW5kaWNhdGVkIGJ5IFNQSU8gNSAqLworCQlibngyeF9zZXRfc3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfU1BJT181LAorCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX1NQSU9fSU5QVVRfSElfWik7CisKKwkJLyogc2V0IHRvIGFjdGl2ZSBsb3cgbW9kZSAqLworCQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NQSU9fSU5UKTsKKwkJdmFsIHw9ICgoMSA8PCBNSVNDX1JFR0lTVEVSU19TUElPXzUpIDw8CisJCQkJCU1JU0NfUkVHSVNURVJTX1NQSU9fSU5UX09MRF9TRVRfUE9TKTsKKwkJUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPX0lOVCwgdmFsKTsKKworCQkvKiBlbmFibGUgaW50ZXJydXB0IHRvIHNpZ25hbCB0aGUgSUdVICovCisJCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfU1BJT19FVkVOVF9FTik7CisJCXZhbCB8PSAoMSA8PCBNSVNDX1JFR0lTVEVSU19TUElPXzUpOworCQlSRUdfV1IoYnAsIE1JU0NfUkVHX1NQSU9fRVZFTlRfRU4sIHZhbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogY2xlYXIgUFhQMiBhdHRlbnRpb25zICovCisJUkVHX1JEKGJwLCBQWFAyX1JFR19QWFAyX0lOVF9TVFNfQ0xSXzApOworCisJZW5hYmxlX2Jsb2Nrc19hdHRlbnRpb24oYnApOworCisJaWYgKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgeworCQlzdHJ1Y3QgdHN0b3JtX2V0aF90cGFfZXhpc3QgdG1wID0gezB9OworCisJCXRtcC50cGFfZXhpc3QgPSAxOworCisJCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX1RQQV9FWElTVF9PRkZTRVQsCisJCSAgICAgICAoKHUzMiAqKSZ0bXApWzBdKTsKKwkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fVFBBX0VYSVNUX09GRlNFVCArIDQsCisJCSAgICAgICAoKHUzMiAqKSZ0bXApWzFdKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9pbml0X3BvcnQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCXUzMiB2YWw7CisKKwlEUChCTlgyWF9NU0dfTUNQLCAic3RhcnRpbmcgcG9ydCBpbml0ICBwb3J0ICV4XG4iLCBwb3J0KTsKKworCVJFR19XUihicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwgMCk7CisKKwkvKiBQb3J0IFBYUCBjb21lcyBoZXJlICovCisJLyogUG9ydCBQWFAyIGNvbWVzIGhlcmUgKi8KKyNpZmRlZiBCQ01fSVNDU0kKKwkvKiBQb3J0MCAgMQorCSAqIFBvcnQxICAzODUgKi8KKwlpKys7CisJd2Jfd3JpdGVbMF0gPSBPTkNISVBfQUREUjEoYnAtPnRpbWVyc19tYXBwaW5nKTsKKwl3Yl93cml0ZVsxXSA9IE9OQ0hJUF9BRERSMihicC0+dGltZXJzX21hcHBpbmcpOworCVJFR19XUl9ETUFFKGJwLCBQWFAyX1JFR19SUV9PTkNISVBfQVQgKyBpKjgsIHdiX3dyaXRlLCAyKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX1RNMF9MMlAgKyBmdW5jKjQsIFBYUF9PTkVfSUxUKGkpKTsKKworCS8qIFBvcnQwICAyCisJICogUG9ydDEgIDM4NiAqLworCWkrKzsKKwl3Yl93cml0ZVswXSA9IE9OQ0hJUF9BRERSMShicC0+cW1fbWFwcGluZyk7CisJd2Jfd3JpdGVbMV0gPSBPTkNISVBfQUREUjIoYnAtPnFtX21hcHBpbmcpOworCVJFR19XUl9ETUFFKGJwLCBQWFAyX1JFR19SUV9PTkNISVBfQVQgKyBpKjgsIHdiX3dyaXRlLCAyKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX1FNMF9MMlAgKyBmdW5jKjQsIFBYUF9PTkVfSUxUKGkpKTsKKworCS8qIFBvcnQwICAzCisJICogUG9ydDEgIDM4NyAqLworCWkrKzsKKwl3Yl93cml0ZVswXSA9IE9OQ0hJUF9BRERSMShicC0+dDFfbWFwcGluZyk7CisJd2Jfd3JpdGVbMV0gPSBPTkNISVBfQUREUjIoYnAtPnQxX21hcHBpbmcpOworCVJFR19XUl9ETUFFKGJwLCBQWFAyX1JFR19SUV9PTkNISVBfQVQgKyBpKjgsIHdiX3dyaXRlLCAyKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX1NSQzBfTDJQICsgZnVuYyo0LCBQWFBfT05FX0lMVChpKSk7CisjZW5kaWYKKwkvKiBQb3J0IENNcyBjb21lIGhlcmUgKi8KKworCS8qIFBvcnQgUU0gY29tZXMgaGVyZSAqLworI2lmZGVmIEJDTV9JU0NTSQorCVJFR19XUihicCwgVE1fUkVHX0xJTjBfU0NBTl9USU1FICsgZnVuYyo0LCAxMDI0LzY0KjIwKTsKKwlSRUdfV1IoYnAsIFRNX1JFR19MSU4wX01BWF9BQ1RJVkVfQ0lEICsgZnVuYyo0LCAzMSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBmdW5jID8gVElNRVJTX1BPUlQxX1NUQVJUIDogVElNRVJTX1BPUlQwX1NUQVJULAorCQkJICAgICBmdW5jID8gVElNRVJTX1BPUlQxX0VORCA6IFRJTUVSU19QT1JUMF9FTkQpOworI2VuZGlmCisJLyogUG9ydCBEUSBjb21lcyBoZXJlICovCisJLyogUG9ydCBCUkIxIGNvbWVzIGhlcmUgKi8KKwkvKiBQb3J0IFBSUyBjb21lcyBoZXJlICovCisJLyogUG9ydCBUU0RNIGNvbWVzIGhlcmUgKi8KKwkvKiBQb3J0IENTRE0gY29tZXMgaGVyZSAqLworCS8qIFBvcnQgVVNETSBjb21lcyBoZXJlICovCisJLyogUG9ydCBYU0RNIGNvbWVzIGhlcmUgKi8KKwlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gVFNFTV9QT1JUMV9TVEFSVCA6IFRTRU1fUE9SVDBfU1RBUlQsCisJCQkgICAgIHBvcnQgPyBUU0VNX1BPUlQxX0VORCA6IFRTRU1fUE9SVDBfRU5EKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gVVNFTV9QT1JUMV9TVEFSVCA6IFVTRU1fUE9SVDBfU1RBUlQsCisJCQkgICAgIHBvcnQgPyBVU0VNX1BPUlQxX0VORCA6IFVTRU1fUE9SVDBfRU5EKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gQ1NFTV9QT1JUMV9TVEFSVCA6IENTRU1fUE9SVDBfU1RBUlQsCisJCQkgICAgIHBvcnQgPyBDU0VNX1BPUlQxX0VORCA6IENTRU1fUE9SVDBfRU5EKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gWFNFTV9QT1JUMV9TVEFSVCA6IFhTRU1fUE9SVDBfU1RBUlQsCisJCQkgICAgIHBvcnQgPyBYU0VNX1BPUlQxX0VORCA6IFhTRU1fUE9SVDBfRU5EKTsKKwkvKiBQb3J0IFVQQiBjb21lcyBoZXJlICovCisJLyogUG9ydCBYUEIgY29tZXMgaGVyZSAqLworCisJYm54MnhfaW5pdF9ibG9jayhicCwgcG9ydCA/IFBCRl9QT1JUMV9TVEFSVCA6IFBCRl9QT1JUMF9TVEFSVCwKKwkJCSAgICAgcG9ydCA/IFBCRl9QT1JUMV9FTkQgOiBQQkZfUE9SVDBfRU5EKTsKKworCS8qIGNvbmZpZ3VyZSBQQkYgdG8gd29yayB3aXRob3V0IFBBVVNFIG10dSA5MDAwICovCisJUkVHX1dSKGJwLCBQQkZfUkVHX1AwX1BBVVNFX0VOQUJMRSArIHBvcnQqNCwgMCk7CisKKwkvKiB1cGRhdGUgdGhyZXNob2xkICovCisJUkVHX1dSKGJwLCBQQkZfUkVHX1AwX0FSQl9USFJTSCArIHBvcnQqNCwgKDkwNDAvMTYpKTsKKwkvKiB1cGRhdGUgaW5pdCBjcmVkaXQgKi8KKwlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfSU5JVF9DUkQgKyBwb3J0KjQsICg5MDQwLzE2KSArIDU1MyAtIDIyKTsKKworCS8qIHByb2JlIGNoYW5nZXMgKi8KKwlSRUdfV1IoYnAsIFBCRl9SRUdfSU5JVF9QMCArIHBvcnQqNCwgMSk7CisJbXNsZWVwKDUpOworCVJFR19XUihicCwgUEJGX1JFR19JTklUX1AwICsgcG9ydCo0LCAwKTsKKworI2lmZGVmIEJDTV9JU0NTSQorCS8qIHRlbGwgdGhlIHNlYXJjaGVyIHdoZXJlIHRoZSBUMiB0YWJsZSBpcyAqLworCVJFR19XUihicCwgU1JDX1JFR19DT1VOVEZSRUUwICsgZnVuYyo0LCAxNioxMDI0LzY0KTsKKworCXdiX3dyaXRlWzBdID0gVTY0X0xPKGJwLT50Ml9tYXBwaW5nKTsKKwl3Yl93cml0ZVsxXSA9IFU2NF9ISShicC0+dDJfbWFwcGluZyk7CisJUkVHX1dSX0RNQUUoYnAsIFNSQ19SRUdfRklSU1RGUkVFMCArIGZ1bmMqNCwgd2Jfd3JpdGUsIDIpOworCXdiX3dyaXRlWzBdID0gVTY0X0xPKCh1NjQpYnAtPnQyX21hcHBpbmcgKyAxNioxMDI0IC0gNjQpOworCXdiX3dyaXRlWzFdID0gVTY0X0hJKCh1NjQpYnAtPnQyX21hcHBpbmcgKyAxNioxMDI0IC0gNjQpOworCVJFR19XUl9ETUFFKGJwLCBTUkNfUkVHX0xBU1RGUkVFMCArIGZ1bmMqNCwgd2Jfd3JpdGUsIDIpOworCisJUkVHX1dSKGJwLCBTUkNfUkVHX05VTUJFUl9IQVNIX0JJVFMwICsgZnVuYyo0LCAxMCk7CisJLyogUG9ydCBTUkNIIGNvbWVzIGhlcmUgKi8KKyNlbmRpZgorCS8qIFBvcnQgQ0RVIGNvbWVzIGhlcmUgKi8KKwkvKiBQb3J0IENGQyBjb21lcyBoZXJlICovCisKKwlpZiAoQ0hJUF9JU19FMShicCkpIHsKKwkJUkVHX1dSKGJwLCBIQ19SRUdfTEVBRElOR19FREdFXzAgKyBwb3J0KjgsIDApOworCQlSRUdfV1IoYnAsIEhDX1JFR19UUkFJTElOR19FREdFXzAgKyBwb3J0KjgsIDApOworCX0KKwlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gSENfUE9SVDFfU1RBUlQgOiBIQ19QT1JUMF9TVEFSVCwKKwkJCSAgICAgcG9ydCA/IEhDX1BPUlQxX0VORCA6IEhDX1BPUlQwX0VORCk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gTUlTQ19BRVVfUE9SVDFfU1RBUlQgOgorCQkJCSAgICBNSVNDX0FFVV9QT1JUMF9TVEFSVCwKKwkJCSAgICAgcG9ydCA/IE1JU0NfQUVVX1BPUlQxX0VORCA6IE1JU0NfQUVVX1BPUlQwX0VORCk7CisJLyogaW5pdCBhZXVfbWFza19hdHRuX2Z1bmNfMC8xOgorCSAqICAtIFNGIG1vZGU6IGJpdHMgMy03IGFyZSBtYXNrZWQuIG9ubHkgYml0cyAwLTIgYXJlIGluIHVzZQorCSAqICAtIE1GIG1vZGU6IGJpdCAzIGlzIG1hc2tlZC4gYml0cyAwLTIgYXJlIGluIHVzZSBhcyBpbiBTRgorCSAqICAgICAgICAgICAgIGJpdHMgNC03IGFyZSB1c2VkIGZvciAicGVyIHZuIGdyb3VwIGF0dGVudGlvbiIgKi8KKwlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18wICsgcG9ydCo0LAorCSAgICAgICAoSVNfRTFITUYoYnApID8gMHhGNyA6IDB4NykpOworCisJLyogUG9ydCBQWFBDUyBjb21lcyBoZXJlICovCisJLyogUG9ydCBFTUFDMCBjb21lcyBoZXJlICovCisJLyogUG9ydCBFTUFDMSBjb21lcyBoZXJlICovCisJLyogUG9ydCBEQlUgY29tZXMgaGVyZSAqLworCS8qIFBvcnQgREJHIGNvbWVzIGhlcmUgKi8KKwlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gTklHX1BPUlQxX1NUQVJUIDogTklHX1BPUlQwX1NUQVJULAorCQkJICAgICBwb3J0ID8gTklHX1BPUlQxX0VORCA6IE5JR19QT1JUMF9FTkQpOworCisJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCArIHBvcnQqNCwgMSk7CisKKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCXUzMiB3c3VtOworCQlzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgbV9jbW5nX3BvcnQ7CisJCWludCB2bjsKKworCQkvKiAweDIgZGlzYWJsZSBlMWhvdiwgMHgxIGVuYWJsZSAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX01GICsgcG9ydCo0LAorCQkgICAgICAgKElTX0UxSE1GKGJwKSA/IDB4MSA6IDB4MikpOworCisJCS8qIEluaXQgUkFURSBTSEFQSU5HIGFuZCBGQUlSTkVTUyBjb250ZXh0cy4KKwkJICAgSW5pdGlhbGl6ZSBhcyBpZiB0aGVyZSBpcyAxMEcgbGluay4gKi8KKwkJd3N1bSA9IGJueDJ4X2NhbGNfdm5fd3N1bShicCk7CisJCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnAsIChpbnQpd3N1bSwgMTAwMDAsICZtX2NtbmdfcG9ydCk7CisJCWlmIChJU19FMUhNRihicCkpCisJCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspCisJCQkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0LAorCQkJCQl3c3VtLCAxMDAwMCwgJm1fY21uZ19wb3J0KTsKKwl9CisKKwkvKiBQb3J0IE1DUCBjb21lcyBoZXJlICovCisJLyogUG9ydCBETUFFIGNvbWVzIGhlcmUgKi8KKworCXN3aXRjaCAoYnAtPmNvbW1vbi5ib2FyZCAmIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9NQVNLKSB7CisJY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjJHOgorCQkvKiBhZGQgU1BJTyA1IHRvIGdyb3VwIDAgKi8KKwkJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzApOworCQl2YWwgfD0gQUVVX0lOUFVUU19BVFROX0JJVFNfU1BJTzU7CisJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wLCB2YWwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWJueDJ4X19saW5rX3Jlc2V0KGJwKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIElMVF9QRVJfRlVOQwkJKDc2OC8yKQorI2RlZmluZSBGVU5DX0lMVF9CQVNFKGZ1bmMpCShmdW5jICogSUxUX1BFUl9GVU5DKQorLyogdGhlIHBoeXMgYWRkcmVzcyBpcyBzaGlmdGVkIHJpZ2h0IDEyIGJpdHMgYW5kIGhhcyBhbiBhZGRlZAorICAgMT12YWxpZCBiaXQgYWRkZWQgdG8gdGhlIDUzcmQgYml0CisgICB0aGVuIHNpbmNlIHRoaXMgaXMgYSB3aWRlIHJlZ2lzdGVyKFRNKQorICAgd2Ugc3BsaXQgaXQgaW50byB0d28gMzIgYml0IHdyaXRlcworICovCisjZGVmaW5lIE9OQ0hJUF9BRERSMSh4KQkJKCh1MzIpKCgodTY0KXggPj4gMTIpICYgMHhGRkZGRkZGRikpCisjZGVmaW5lIE9OQ0hJUF9BRERSMih4KQkJKCh1MzIpKCgxIDw8IDIwKSB8ICgodTY0KXggPj4gNDQpKSkKKyNkZWZpbmUgUFhQX09ORV9JTFQoeCkJCSgoKHgpIDw8IDEwKSB8IHgpCisjZGVmaW5lIFBYUF9JTFRfUkFOR0UoZiwgbCkJKCgobCkgPDwgMTApIHwgZikKKworI2RlZmluZSBDTklDX0lMVF9MSU5FUwkJMAorCitzdGF0aWMgdm9pZCBibngyeF9pbHRfd3Ioc3RydWN0IGJueDJ4ICpicCwgdTMyIGluZGV4LCBkbWFfYWRkcl90IGFkZHIpCit7CisJaW50IHJlZzsKKworCWlmIChDSElQX0lTX0UxSChicCkpCisJCXJlZyA9IFBYUDJfUkVHX1JRX09OQ0hJUF9BVF9CMCArIGluZGV4Kjg7CisJZWxzZSAvKiBFMSAqLworCQlyZWcgPSBQWFAyX1JFR19SUV9PTkNISVBfQVQgKyBpbmRleCo4OworCisJYm54Mnhfd2Jfd3IoYnAsIHJlZywgT05DSElQX0FERFIxKGFkZHIpLCBPTkNISVBfQUREUjIoYWRkcikpOworfQorCitzdGF0aWMgaW50IGJueDJ4X2luaXRfZnVuYyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwlpbnQgaTsKKworCURQKEJOWDJYX01TR19NQ1AsICJzdGFydGluZyBmdW5jIGluaXQgIGZ1bmMgJXhcbiIsIGZ1bmMpOworCisJaSA9IEZVTkNfSUxUX0JBU0UoZnVuYyk7CisKKwlibngyeF9pbHRfd3IoYnAsIGksIGJueDJ4X3NwX21hcHBpbmcoYnAsIGNvbnRleHQpKTsKKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCVJFR19XUihicCwgUFhQMl9SRUdfUlFfQ0RVX0ZJUlNUX0lMVCwgaSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfUlFfQ0RVX0xBU1RfSUxULCBpICsgQ05JQ19JTFRfTElORVMpOworCX0gZWxzZSAvKiBFMSAqLworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX0NEVTBfTDJQICsgZnVuYyo0LAorCQkgICAgICAgUFhQX0lMVF9SQU5HRShpLCBpICsgQ05JQ19JTFRfTElORVMpKTsKKworCisJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQkJYm54MnhfaW5pdF9ibG9jayhicCwKKwkJCQkJIGNtX3N0YXJ0W2Z1bmNdW2ldLCBjbV9lbmRbZnVuY11baV0pOworCisJCVJFR19XUihicCwgTklHX1JFR19MTEgwX0ZVTkNfRU4gKyBwb3J0KjgsIDEpOworCQlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9GVU5DX1ZMQU5fSUQgKyBwb3J0KjgsIGJwLT5lMWhvdik7CisJfQorCisJLyogSEMgaW5pdCBwZXIgZnVuY3Rpb24gKi8KKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMiArIGZ1bmMqNCwgMCk7CisKKwkJUkVHX1dSKGJwLCBIQ19SRUdfTEVBRElOR19FREdFXzAgKyBwb3J0KjgsIDApOworCQlSRUdfV1IoYnAsIEhDX1JFR19UUkFJTElOR19FREdFXzAgKyBwb3J0KjgsIDApOworCX0KKwlibngyeF9pbml0X2Jsb2NrKGJwLCBoY19saW1pdHNbZnVuY11bMF0sIGhjX2xpbWl0c1tmdW5jXVsxXSk7CisKKwlpZiAoQ0hJUF9JU19FMUgoYnApKQorCQlSRUdfV1IoYnAsIEhDX1JFR19GVU5DX05VTV9QMCArIHBvcnQqNCwgZnVuYyk7CisKKwkvKiBSZXNldCBQQ0lFIGVycm9ycyBmb3IgZGVidWcgKi8KKwlSRUdfV1IoYnAsIDB4MjExNCwgMHhmZmZmZmZmZik7CisJUkVHX1dSKGJwLCAweDIxMjAsIDB4ZmZmZmZmZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfaW5pdF9odyhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbG9hZF9jb2RlKQoreworCWludCBpLCByYyA9IDA7CisKKwlEUChCTlgyWF9NU0dfTUNQLCAiZnVuY3Rpb24gJWQgIGxvYWRfY29kZSAleFxuIiwKKwkgICBCUF9GVU5DKGJwKSwgbG9hZF9jb2RlKTsKKworCWJwLT5kbWFlX3JlYWR5ID0gMDsKKwltdXRleF9pbml0KCZicC0+ZG1hZV9tdXRleCk7CisJYm54MnhfZ3VuemlwX2luaXQoYnApOworCisJc3dpdGNoIChsb2FkX2NvZGUpIHsKKwljYXNlIEZXX01TR19DT0RFX0RSVl9MT0FEX0NPTU1PTjoKKwkJcmMgPSBibngyeF9pbml0X2NvbW1vbihicCk7CisJCWlmIChyYykKKwkJCWdvdG8gaW5pdF9od19lcnI7CisJCS8qIG5vIGJyZWFrICovCisKKwljYXNlIEZXX01TR19DT0RFX0RSVl9MT0FEX1BPUlQ6CisJCWJwLT5kbWFlX3JlYWR5ID0gMTsKKwkJcmMgPSBibngyeF9pbml0X3BvcnQoYnApOworCQlpZiAocmMpCisJCQlnb3RvIGluaXRfaHdfZXJyOworCQkvKiBubyBicmVhayAqLworCisJY2FzZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9GVU5DVElPTjoKKwkJYnAtPmRtYWVfcmVhZHkgPSAxOworCQlyYyA9IGJueDJ4X2luaXRfZnVuYyhicCk7CisJCWlmIChyYykKKwkJCWdvdG8gaW5pdF9od19lcnI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQk5YMlhfRVJSKCJVbmtub3duIGxvYWRfY29kZSAoMHgleCkgZnJvbSBNQ1BcbiIsIGxvYWRfY29kZSk7CisJCWJyZWFrOworCX0KKworCWlmICghQlBfTk9NQ1AoYnApKSB7CisJCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisKKwkJYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEgPQorCQkJCShTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5kcnZfcHVsc2VfbWIpICYKKwkJCQkgRFJWX1BVTFNFX1NFUV9NQVNLKTsKKwkJYnAtPmZ1bmNfc3R4ID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZndfbWJfcGFyYW0pOworCQlEUChCTlgyWF9NU0dfTUNQLCAiZHJ2X3B1bHNlIDB4JXggIGZ1bmNfc3R4IDB4JXhcbiIsCisJCSAgIGJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxLCBicC0+ZnVuY19zdHgpOworCX0gZWxzZQorCQlicC0+ZnVuY19zdHggPSAwOworCisJLyogdGhpcyBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSBndW56aXAgZW5kICovCisJYm54MnhfemVyb19kZWZfc2IoYnApOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQlibngyeF96ZXJvX3NiKGJwLCBCUF9MX0lEKGJwKSArIGkpOworCitpbml0X2h3X2VycjoKKwlibngyeF9ndW56aXBfZW5kKGJwKTsKKworCXJldHVybiByYzsKK30KKworLyogc2VuZCB0aGUgTUNQIGEgcmVxdWVzdCwgYmxvY2sgdW50aWwgdGhlcmUgaXMgYSByZXBseSAqLworc3RhdGljIHUzMiBibngyeF9md19jb21tYW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBjb21tYW5kKQoreworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJdTMyIHNlcSA9ICsrYnAtPmZ3X3NlcTsKKwl1MzIgcmMgPSAwOworCisJU0hNRU1fV1IoYnAsIGZ1bmNfbWJbZnVuY10uZHJ2X21iX2hlYWRlciwgKGNvbW1hbmQgfCBzZXEpKTsKKwlEUChCTlgyWF9NU0dfTUNQLCAid3JvdGUgY29tbWFuZCAoJXgpIHRvIEZXIE1CXG4iLCAoY29tbWFuZCB8IHNlcSkpOworCisJLyogbGV0IHRoZSBGVyBkbyBpdCdzIG1hZ2ljIC4uLiAqLworCW1zbGVlcCgxMDApOyAvKiBUQkQgKi8KKworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJbXNsZWVwKDkwMCk7CisKKwlyYyA9IFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmZ3X21iX2hlYWRlcik7CisJRFAoQk5YMlhfTVNHX01DUCwgInJlYWQgKCV4KSBzZXEgaXMgKCV4KSBmcm9tIEZXIE1CXG4iLCByYywgc2VxKTsKKworCS8qIGlzIHRoaXMgYSByZXBseSB0byBvdXIgY29tbWFuZD8gKi8KKwlpZiAoc2VxID09IChyYyAmIEZXX01TR19TRVFfTlVNQkVSX01BU0spKSB7CisJCXJjICY9IEZXX01TR19DT0RFX01BU0s7CisKKwl9IGVsc2UgeworCQkvKiBGVyBCVUchICovCisJCUJOWDJYX0VSUigiRlcgZmFpbGVkIHRvIHJlc3BvbmQhXG4iKTsKKwkJYm54MnhfZndfZHVtcChicCk7CisJCXJjID0gMDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfbWVtKHN0cnVjdCBibngyeCAqYnApCit7CisKKyNkZWZpbmUgQk5YMlhfUENJX0ZSRUUoeCwgeSwgc2l6ZSkgXAorCWRvIHsgXAorCQlpZiAoeCkgeyBcCisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBzaXplLCB4LCB5KTsgXAorCQkJeCA9IE5VTEw7IFwKKwkJCXkgPSAwOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQk5YMlhfRlJFRSh4KSBcCisJZG8geyBcCisJCWlmICh4KSB7IFwKKwkJCXZmcmVlKHgpOyBcCisJCQl4ID0gTlVMTDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisJaW50IGk7CisKKwkvKiBmYXN0cGF0aCAqLworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisKKwkJLyogU3RhdHVzIGJsb2NrcyAqLworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsayksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykgKworCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEpKTsKKworCQkvKiBmYXN0IHBhdGggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjIHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpKTsKKwkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKKworCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9idWZfcmluZykpOworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgcnhfZGVzY19yaW5nKSwKKwkJCSAgICAgICBibngyeF9mcChicCwgaSwgcnhfZGVzY19tYXBwaW5nKSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkgKiBOVU1fUlhfQkQpOworCisJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX3JpbmcpLAorCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX21hcHBpbmcpLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX2Zhc3RfcGF0aF9yeF9jcWUpICoKKwkJCSAgICAgICBOVU1fUkNRX0JEKTsKKworCQkvKiBTR0UgcmluZyAqLworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgcnhfc2dlX3JpbmcpLAorCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfbWFwcGluZyksCisJCQkgICAgICAgQkNNX1BBR0VfU0laRSAqIE5VTV9SWF9TR0VfUEFHRVMpOworCX0KKwkvKiBlbmQgb2YgZmFzdHBhdGggKi8KKworCUJOWDJYX1BDSV9GUkVFKGJwLT5kZWZfc3RhdHVzX2JsaywgYnAtPmRlZl9zdGF0dXNfYmxrX21hcHBpbmcsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaykpOworCisJQk5YMlhfUENJX0ZSRUUoYnAtPnNsb3dwYXRoLCBicC0+c2xvd3BhdGhfbWFwcGluZywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYm54Mnhfc2xvd3BhdGgpKTsKKworI2lmZGVmIEJDTV9JU0NTSQorCUJOWDJYX1BDSV9GUkVFKGJwLT50MSwgYnAtPnQxX21hcHBpbmcsIDY0KjEwMjQpOworCUJOWDJYX1BDSV9GUkVFKGJwLT50MiwgYnAtPnQyX21hcHBpbmcsIDE2KjEwMjQpOworCUJOWDJYX1BDSV9GUkVFKGJwLT50aW1lcnMsIGJwLT50aW1lcnNfbWFwcGluZywgOCoxMDI0KTsKKwlCTlgyWF9QQ0lfRlJFRShicC0+cW0sIGJwLT5xbV9tYXBwaW5nLCAxMjgqMTAyNCk7CisjZW5kaWYKKwlCTlgyWF9QQ0lfRlJFRShicC0+c3BxLCBicC0+c3BxX21hcHBpbmcsIEJDTV9QQUdFX1NJWkUpOworCisjdW5kZWYgQk5YMlhfUENJX0ZSRUUKKyN1bmRlZiBCTlgyWF9LRlJFRQorfQorCitzdGF0aWMgaW50IGJueDJ4X2FsbG9jX21lbShzdHJ1Y3QgYm54MnggKmJwKQoreworCisjZGVmaW5lIEJOWDJYX1BDSV9BTExPQyh4LCB5LCBzaXplKSBcCisJZG8geyBcCisJCXggPSBwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwgc2l6ZSwgeSk7IFwKKwkJaWYgKHggPT0gTlVMTCkgXAorCQkJZ290byBhbGxvY19tZW1fZXJyOyBcCisJCW1lbXNldCh4LCAwLCBzaXplKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQk5YMlhfQUxMT0MoeCwgc2l6ZSkgXAorCWRvIHsgXAorCQl4ID0gdm1hbGxvYyhzaXplKTsgXAorCQlpZiAoeCA9PSBOVUxMKSBcCisJCQlnb3RvIGFsbG9jX21lbV9lcnI7IFwKKwkJbWVtc2V0KHgsIDAsIHNpemUpOyBcCisJfSB3aGlsZSAoMCkKKworCWludCBpOworCisJLyogZmFzdHBhdGggKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlibngyeF9mcChicCwgaSwgYnApID0gYnA7CisKKwkJLyogU3RhdHVzIGJsb2NrcyAqLworCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspLAorCQkJCSZibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBldGhfdHhfZGJfZGF0YSkpOworCisJCWJueDJ4X2ZwKGJwLCBpLCBod190eF9wcm9kcykgPQorCQkJCSh2b2lkICopKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKSArIDEpOworCisJCWJueDJ4X2ZwKGJwLCBpLCB0eF9wcm9kc19tYXBwaW5nKSA9CisJCQkJYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZykgKworCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spOworCisJCS8qIGZhc3QgcGF0aCByaW5nczogdHhfYnVmIHR4X2Rlc2MgcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLworCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3Qgc3dfdHhfYmQpICogTlVNX1RYX0JEKTsKKwkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAorCQkJCSZibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGV0aF90eF9iZCkgKiBOVU1fVFhfQkQpOworCisJCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9idWZfcmluZyksCisJCQkJc2l6ZW9mKHN0cnVjdCBzd19yeF9iZCkgKiBOVU1fUlhfQkQpOworCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X2Rlc2NfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX21hcHBpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3J4X2JkKSAqIE5VTV9SWF9CRCk7CisKKwkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX3JpbmcpLAorCQkJCSZibngyeF9mcChicCwgaSwgcnhfY29tcF9tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGV0aF9mYXN0X3BhdGhfcnhfY3FlKSAqCisJCQkJTlVNX1JDUV9CRCk7CisKKwkJLyogU0dFIHJpbmcgKi8KKwkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X3BhZ2VfcmluZyksCisJCQkJc2l6ZW9mKHN0cnVjdCBzd19yeF9wYWdlKSAqIE5VTV9SWF9TR0UpOworCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X3NnZV9yaW5nKSwKKwkJCQkmYm54MnhfZnAoYnAsIGksIHJ4X3NnZV9tYXBwaW5nKSwKKwkJCQlCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CisJfQorCS8qIGVuZCBvZiBmYXN0cGF0aCAqLworCisJQk5YMlhfUENJX0FMTE9DKGJwLT5kZWZfc3RhdHVzX2JsaywgJmJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLAorCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2spKTsKKworCUJOWDJYX1BDSV9BTExPQyhicC0+c2xvd3BhdGgsICZicC0+c2xvd3BhdGhfbWFwcGluZywKKwkJCXNpemVvZihzdHJ1Y3QgYm54Mnhfc2xvd3BhdGgpKTsKKworI2lmZGVmIEJDTV9JU0NTSQorCUJOWDJYX1BDSV9BTExPQyhicC0+dDEsICZicC0+dDFfbWFwcGluZywgNjQqMTAyNCk7CisKKwkvKiBJbml0aWFsaXplIFQxICovCisJZm9yIChpID0gMDsgaSA8IDY0KjEwMjQ7IGkgKz0gNjQpIHsKKwkJKih1NjQgKikoKGNoYXIgKilicC0+dDEgKyBpICsgNTYpID0gMHgwVUw7CisJCSoodTY0ICopKChjaGFyICopYnAtPnQxICsgaSArIDMpID0gMHgwVUw7CisJfQorCisJLyogYWxsb2NhdGUgc2VhcmNoZXIgVDIgdGFibGUKKwkgICB3ZSBhbGxvY2F0ZSAxLzQgb2YgYWxsb2MgbnVtIGZvciBUMgorCSAgKHdoaWNoIGlzIG5vdCBlbnRlcmVkIGludG8gdGhlIElMVCkgKi8KKwlCTlgyWF9QQ0lfQUxMT0MoYnAtPnQyLCAmYnAtPnQyX21hcHBpbmcsIDE2KjEwMjQpOworCisJLyogSW5pdGlhbGl6ZSBUMiAqLworCWZvciAoaSA9IDA7IGkgPCAxNioxMDI0OyBpICs9IDY0KQorCQkqICh1NjQgKikoKGNoYXIgKilicC0+dDIgKyBpICsgNTYpID0gYnAtPnQyX21hcHBpbmcgKyBpICsgNjQ7CisKKwkvKiBub3cgZml4dXAgdGhlIGxhc3QgbGluZSBpbiB0aGUgYmxvY2sgdG8gcG9pbnQgdG8gdGhlIG5leHQgYmxvY2sgKi8KKwkqKHU2NCAqKSgoY2hhciAqKWJwLT50MiArIDEwMjQqMTYtOCkgPSBicC0+dDJfbWFwcGluZzsKKworCS8qIFRpbWVyIGJsb2NrIGFycmF5IChNQVhfQ09OTio4KSBwaHlzIHVuY2FjaGVkIGZvciBub3cgMTAyNCBjb25ucyAqLworCUJOWDJYX1BDSV9BTExPQyhicC0+dGltZXJzLCAmYnAtPnRpbWVyc19tYXBwaW5nLCA4KjEwMjQpOworCisJLyogUU0gcXVldWVzICgxMjgqTUFYX0NPTk4pICovCisJQk5YMlhfUENJX0FMTE9DKGJwLT5xbSwgJmJwLT5xbV9tYXBwaW5nLCAxMjgqMTAyNCk7CisjZW5kaWYKKworCS8qIFNsb3cgcGF0aCByaW5nICovCisJQk5YMlhfUENJX0FMTE9DKGJwLT5zcHEsICZicC0+c3BxX21hcHBpbmcsIEJDTV9QQUdFX1NJWkUpOworCisJcmV0dXJuIDA7CisKK2FsbG9jX21lbV9lcnI6CisJYm54MnhfZnJlZV9tZW0oYnApOworCXJldHVybiAtRU5PTUVNOworCisjdW5kZWYgQk5YMlhfUENJX0FMTE9DCisjdW5kZWYgQk5YMlhfQUxMT0MKK30KKworc3RhdGljIHZvaWQgYm54MnhfZnJlZV90eF9za2JzKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGk7CisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQl1MTYgYmRfY29ucyA9IGZwLT50eF9iZF9jb25zOworCQl1MTYgc3dfcHJvZCA9IGZwLT50eF9wa3RfcHJvZDsKKwkJdTE2IHN3X2NvbnMgPSBmcC0+dHhfcGt0X2NvbnM7CisKKwkJd2hpbGUgKHN3X2NvbnMgIT0gc3dfcHJvZCkgeworCQkJYmRfY29ucyA9IGJueDJ4X2ZyZWVfdHhfcGt0KGJwLCBmcCwgVFhfQkQoc3dfY29ucykpOworCQkJc3dfY29ucysrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9mcmVlX3J4X3NrYnMoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaSwgajsKKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBqKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQkQ7IGkrKykgeworCQkJc3RydWN0IHN3X3J4X2JkICpyeF9idWYgPSAmZnAtPnJ4X2J1Zl9yaW5nW2ldOworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4X2J1Zi0+c2tiOworCisJCQlpZiAoc2tiID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsCisJCQkJCSBwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAorCQkJCQkgYnAtPnJ4X2J1Zl91c2Vfc2l6ZSwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJfQorCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkKKwkJCWJueDJ4X2ZyZWVfdHBhX3Bvb2woYnAsIGZwLAorCQkJCQkgICAgRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTFIKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfc2ticyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWJueDJ4X2ZyZWVfdHhfc2ticyhicCk7CisJYm54MnhfZnJlZV9yeF9za2JzKGJwKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZnJlZV9tc2l4X2lycXMoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaSwgb2Zmc2V0ID0gMTsKKworCWZyZWVfaXJxKGJwLT5tc2l4X3RhYmxlWzBdLnZlY3RvciwgYnAtPmRldik7CisJRFAoTkVUSUZfTVNHX0lGRE9XTiwgInJlbGVhc2VkIHNwIGlycSAoJWQpXG4iLAorCSAgIGJwLT5tc2l4X3RhYmxlWzBdLnZlY3Rvcik7CisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlEUChORVRJRl9NU0dfSUZET1dOLCAiYWJvdXQgdG8gcmVsZWFzZSBmcCAjJWQtPiVkIGlycSAgIgorCQkgICAic3RhdGUgJXhcbiIsIGksIGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3RvciwKKwkJICAgYm54MnhfZnAoYnAsIGksIHN0YXRlKSk7CisKKwkJaWYgKGJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkgIT0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEKQorCQkJQk5YMlhfRVJSKCJJUlEgb2YgZnAgIyVkIGJlaW5nIGZyZWVkIHdoaWxlICIKKwkJCQkgICJzdGF0ZSAhPSBjbG9zZWRcbiIsIGkpOworCisJCWZyZWVfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3RvciwgJmJwLT5mcFtpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF9mcmVlX2lycShzdHJ1Y3QgYm54MnggKmJwKQoreworCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpIHsKKwkJYm54MnhfZnJlZV9tc2l4X2lycXMoYnApOworCQlwY2lfZGlzYWJsZV9tc2l4KGJwLT5wZGV2KTsKKwkJYnAtPmZsYWdzICY9IH5VU0lOR19NU0lYX0ZMQUc7CisKKwl9IGVsc2UKKwkJZnJlZV9pcnEoYnAtPnBkZXYtPmlycSwgYnAtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfZW5hYmxlX21zaXgoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaSwgcmMsIG9mZnNldDsKKworCWJwLT5tc2l4X3RhYmxlWzBdLmVudHJ5ID0gMDsKKwlvZmZzZXQgPSAxOworCURQKE5FVElGX01TR19JRlVQLCAibXNpeF90YWJsZVswXS5lbnRyeSA9IDAgKHNsb3dwYXRoKVxuIik7CisKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlpbnQgaWd1X3ZlYyA9IG9mZnNldCArIGkgKyBCUF9MX0lEKGJwKTsKKworCQlicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS5lbnRyeSA9IGlndV92ZWM7CisJCURQKE5FVElGX01TR19JRlVQLCAibXNpeF90YWJsZVslZF0uZW50cnkgPSAlZCAiCisJCSAgICIoZmFzdHBhdGggIyV1KVxuIiwgaSArIG9mZnNldCwgaWd1X3ZlYywgaSk7CisJfQorCisJcmMgPSBwY2lfZW5hYmxlX21zaXgoYnAtPnBkZXYsICZicC0+bXNpeF90YWJsZVswXSwKKwkJCSAgICAgYnAtPm51bV9xdWV1ZXMgKyBvZmZzZXQpOworCWlmIChyYykgeworCQlEUChORVRJRl9NU0dfSUZVUCwgIk1TSS1YIGlzIG5vdCBhdHRhaW5hYmxlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlicC0+ZmxhZ3MgfD0gVVNJTkdfTVNJWF9GTEFHOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfcmVxX21zaXhfaXJxcyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpLCByYywgb2Zmc2V0ID0gMTsKKworCXJjID0gcmVxdWVzdF9pcnEoYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLCBibngyeF9tc2l4X3NwX2ludCwgMCwKKwkJCSBicC0+ZGV2LT5uYW1lLCBicC0+ZGV2KTsKKwlpZiAocmMpIHsKKwkJQk5YMlhfRVJSKCJyZXF1ZXN0IHNwIGlycSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXJjID0gcmVxdWVzdF9pcnEoYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yLAorCQkJCSBibngyeF9tc2l4X2ZwX2ludCwgMCwKKwkJCQkgYnAtPmRldi0+bmFtZSwgJmJwLT5mcFtpXSk7CisJCWlmIChyYykgeworCQkJQk5YMlhfRVJSKCJyZXF1ZXN0IGZwICMlZCBpcnEgZmFpbGVkICByYyAlZFxuIiwKKwkJCQkgIGkgKyBvZmZzZXQsIHJjKTsKKwkJCWJueDJ4X2ZyZWVfbXNpeF9pcnFzKGJwKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQlibngyeF9mcChicCwgaSwgc3RhdGUpID0gQk5YMlhfRlBfU1RBVEVfSVJROworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3JlcV9pcnEoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHJlcXVlc3RfaXJxKGJwLT5wZGV2LT5pcnEsIGJueDJ4X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkgYnAtPmRldi0+bmFtZSwgYnAtPmRldik7CisJaWYgKCFyYykKKwkJYm54MnhfZnAoYnAsIDAsIHN0YXRlKSA9IEJOWDJYX0ZQX1NUQVRFX0lSUTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIEluaXQgc2VydmljZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCBibngyeF9zZXRfbWFjX2FkZHJfZTEoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kICpjb25maWcgPSBibngyeF9zcChicCwgbWFjX2NvbmZpZyk7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKworCS8qIENBTSBhbGxvY2F0aW9uCisJICogdW5pY2FzdHMgMC0zMTpwb3J0MCAzMi02Mzpwb3J0MQorCSAqIG11bHRpY2FzdCA2NC0xMjc6cG9ydDAgMTI4LTE5MTpwb3J0MQorCSAqLworCWNvbmZpZy0+aGRyLmxlbmd0aF82YiA9IDI7CisJY29uZmlnLT5oZHIub2Zmc2V0ID0gcG9ydCA/IDMxIDogMDsKKwljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKKworCS8qIHByaW1hcnkgTUFDICovCisJY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9CisJCQkJCXN3YWIxNigqKHUxNiAqKSZicC0+ZGV2LT5kZXZfYWRkclswXSk7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciA9CisJCQkJCXN3YWIxNigqKHUxNiAqKSZicC0+ZGV2LT5kZXZfYWRkclsyXSk7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5LmxzYl9tYWNfYWRkciA9CisJCQkJCXN3YWIxNigqKHUxNiAqKSZicC0+ZGV2LT5kZXZfYWRkcls0XSk7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5LmZsYWdzID0gY3B1X3RvX2xlMTYocG9ydCk7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0udGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0gMDsKKwljb25maWctPmNvbmZpZ190YWJsZVswXS50YXJnZXRfdGFibGVfZW50cnkuY2xpZW50X2lkID0gMDsKKwljb25maWctPmNvbmZpZ190YWJsZVswXS50YXJnZXRfdGFibGVfZW50cnkudmxhbl9pZCA9IDA7CisKKwlEUChORVRJRl9NU0dfSUZVUCwgInNldHRpbmcgTUFDICglMDR4OiUwNHg6JTA0eClcbiIsCisJICAgY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciwKKwkgICBjb25maWctPmNvbmZpZ190YWJsZVswXS5jYW1fZW50cnkubWlkZGxlX21hY19hZGRyLAorCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNhbV9lbnRyeS5sc2JfbWFjX2FkZHIpOworCisJLyogYnJvYWRjYXN0ICovCisJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9IDB4ZmZmZjsKKwljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubWlkZGxlX21hY19hZGRyID0gMHhmZmZmOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5sc2JfbWFjX2FkZHIgPSAweGZmZmY7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5LmZsYWdzID0gY3B1X3RvX2xlMTYocG9ydCk7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0KKwkJCQlUU1RPUk1fQ0FNX1RBUkdFVF9UQUJMRV9FTlRSWV9CUk9BRENBU1Q7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LmNsaWVudF9pZCA9IDA7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LnZsYW5faWQgPSAwOworCisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKKwkJICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwKKwkJICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9tYWNfYWRkcl9lMWgoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kX2UxaCAqY29uZmlnID0KKwkJKHN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWRfZTFoICopYm54Mnhfc3AoYnAsIG1hY19jb25maWcpOworCisJaWYgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9PUEVOKSB7CisJCURQKE5FVElGX01TR19JRlVQLCAic3RhdGUgaXMgJXgsIHJldHVybmluZ1xuIiwgYnAtPnN0YXRlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENBTSBhbGxvY2F0aW9uIGZvciBFMUgKKwkgKiB1bmljYXN0czogYnkgZnVuYyBudW1iZXIKKwkgKiBtdWx0aWNhc3Q6IDIwK0ZVTkMqMjAsIDIwIGVhY2gKKwkgKi8KKwljb25maWctPmhkci5sZW5ndGhfNmIgPSAxOworCWNvbmZpZy0+aGRyLm9mZnNldCA9IEJQX0ZVTkMoYnApOworCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOworCisJLyogcHJpbWFyeSBNQUMgKi8KKwljb25maWctPmNvbmZpZ190YWJsZVswXS5tc2JfbWFjX2FkZHIgPQorCQkJCQlzd2FiMTYoKih1MTYgKikmYnAtPmRldi0+ZGV2X2FkZHJbMF0pOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLm1pZGRsZV9tYWNfYWRkciA9CisJCQkJCXN3YWIxNigqKHUxNiAqKSZicC0+ZGV2LT5kZXZfYWRkclsyXSk7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0ubHNiX21hY19hZGRyID0KKwkJCQkJc3dhYjE2KCoodTE2ICopJmJwLT5kZXYtPmRldl9hZGRyWzRdKTsKKwljb25maWctPmNvbmZpZ190YWJsZVswXS5jbGllbnRfaWQgPSBCUF9MX0lEKGJwKTsKKwljb25maWctPmNvbmZpZ190YWJsZVswXS52bGFuX2lkID0gMDsKKwljb25maWctPmNvbmZpZ190YWJsZVswXS5lMWhvdl9pZCA9IGNwdV90b19sZTE2KGJwLT5lMWhvdik7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0uZmxhZ3MgPSBCUF9QT1JUKGJwKTsKKworCURQKE5FVElGX01TR19JRlVQLCAic2V0dGluZyBNQUMgKCUwNHg6JTA0eDolMDR4KSAgRTFIT1YgJWQgIENMSUQgJWRcbiIsCisJICAgY29uZmlnLT5jb25maWdfdGFibGVbMF0ubXNiX21hY19hZGRyLAorCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLm1pZGRsZV9tYWNfYWRkciwKKwkgICBjb25maWctPmNvbmZpZ190YWJsZVswXS5sc2JfbWFjX2FkZHIsIGJwLT5lMWhvdiwgQlBfTF9JRChicCkpOworCisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKKwkJICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwKKwkJICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfd2FpdF9yYW1yb2Qoc3RydWN0IGJueDJ4ICpicCwgaW50IHN0YXRlLCBpbnQgaWR4LAorCQkJICAgICBpbnQgKnN0YXRlX3AsIGludCBwb2xsKQoreworCS8qIGNhbiB0YWtlIGEgd2hpbGUgaWYgYW55IHBvcnQgaXMgcnVubmluZyAqLworCWludCBjbnQgPSA1MDA7CisKKwlEUChORVRJRl9NU0dfSUZVUCwgIiVzIGZvciBzdGF0ZSB0byBiZWNvbWUgJXggb24gSURYIFslZF1cbiIsCisJICAgcG9sbCA/ICJwb2xsaW5nIiA6ICJ3YWl0aW5nIiwgc3RhdGUsIGlkeCk7CisKKwltaWdodF9zbGVlcCgpOworCXdoaWxlIChjbnQtLSkgeworCQlpZiAocG9sbCkgeworCQkJYm54MnhfcnhfaW50KGJwLT5mcCwgMTApOworCQkJLyogaWYgaW5kZXggaXMgZGlmZmVyZW50IGZyb20gMAorCQkJICogdGhlIHJlcGx5IGZvciBzb21lIGNvbW1hbmRzIHdpbGwKKwkJCSAqIGJlIG9uIHRoZSBub25lIGRlZmF1bHQgcXVldWUKKwkJCSAqLworCQkJaWYgKGlkeCkKKwkJCQlibngyeF9yeF9pbnQoJmJwLT5mcFtpZHhdLCAxMCk7CisJCX0KKwkJbWIoKTsgLyogc3RhdGUgaXMgY2hhbmdlZCBieSBibngyeF9zcF9ldmVudCgpICovCisKKwkJaWYgKCpzdGF0ZV9wID09IHN0YXRlKQorCQkJcmV0dXJuIDA7CisKKwkJbXNsZWVwKDEpOworCX0KKworCS8qIHRpbWVvdXQhICovCisJQk5YMlhfRVJSKCJ0aW1lb3V0ICVzIGZvciBzdGF0ZSAleCBvbiBJRFggWyVkXVxuIiwKKwkJICBwb2xsID8gInBvbGxpbmciIDogIndhaXRpbmciLCBzdGF0ZSwgaWR4KTsKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJYm54MnhfcGFuaWMoKTsKKyNlbmRpZgorCisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCBibngyeF9zZXR1cF9sZWFkaW5nKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHJjOworCisJLyogcmVzZXQgSUdVIHN0YXRlICovCisJYm54MnhfYWNrX3NiKGJwLCBicC0+ZnBbMF0uc2JfaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOworCisJLyogU0VUVVAgcmFtcm9kICovCisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCwgMCwgMCwgMCwgMCk7CisKKwkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCisJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfU1RBVEVfT1BFTiwgMCwgJihicC0+c3RhdGUpLCAwKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBibngyeF9zZXR1cF9tdWx0aShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaW5kZXgpCit7CisJLyogcmVzZXQgSUdVIHN0YXRlICovCisJYm54MnhfYWNrX3NiKGJwLCBicC0+ZnBbaW5kZXhdLnNiX2lkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKKworCS8qIFNFVFVQIHJhbXJvZCAqLworCWJwLT5mcFtpbmRleF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOSU5HOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCwgaW5kZXgsIDAsIGluZGV4LCAwKTsKKworCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwlyZXR1cm4gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX09QRU4sIGluZGV4LAorCQkJCSAmKGJwLT5mcFtpbmRleF0uc3RhdGUpLCAwKTsKK30KKworc3RhdGljIGludCBibngyeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CitzdGF0aWMgdm9pZCBibngyeF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3N0YXRpYyBpbnQgYm54MnhfbmljX2xvYWQoc3RydWN0IGJueDJ4ICpicCwgaW50IGxvYWRfbW9kZSkKK3sKKwl1MzIgbG9hZF9jb2RlOworCWludCBpLCByYzsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKKwkJcmV0dXJuIC1FUEVSTTsKKyNlbmRpZgorCisJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FEOworCisJLyogU2VuZCBMT0FEX1JFUVVFU1QgY29tbWFuZCB0byBNQ1AKKwkgICBSZXR1cm5zIHRoZSB0eXBlIG9mIExPQUQgY29tbWFuZDoKKwkgICBpZiBpdCBpcyB0aGUgZmlyc3QgcG9ydCB0byBiZSBpbml0aWFsaXplZAorCSAgIGNvbW1vbiBibG9ja3Mgc2hvdWxkIGJlIGluaXRpYWxpemVkLCBvdGhlcndpc2UgLSBub3QKKwkqLworCWlmICghQlBfTk9NQ1AoYnApKSB7CisJCWxvYWRfY29kZSA9IGJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9MT0FEX1JFUSk7CisJCWlmICghbG9hZF9jb2RlKSB7CisJCQlCTlgyWF9FUlIoIk1DUCByZXNwb25zZSBmYWlsdXJlLCB1bmxvYWRpbmdcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlpZiAobG9hZF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9MT0FEX1JFRlVTRUQpCisJCQlyZXR1cm4gLUVCVVNZOyAvKiBvdGhlciBwb3J0IGluIGRpYWdub3N0aWMgbW9kZSAqLworCisJfSBlbHNlIHsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJOTyBNQ1AgbG9hZCBjb3VudHMgYmVmb3JlIHVzICVkLCAlZCwgJWRcbiIsCisJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOworCQlsb2FkX2NvdW50WzBdKys7CisJCWxvYWRfY291bnRbMSArIEJQX1BPUlQoYnApXSsrOworCQlEUChORVRJRl9NU0dfSUZVUCwgIk5PIE1DUCBuZXcgbG9hZCBjb3VudHMgICAgICAgJWQsICVkLCAlZFxuIiwKKwkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CisJCWlmIChsb2FkX2NvdW50WzBdID09IDEpCisJCQlsb2FkX2NvZGUgPSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT047CisJCWVsc2UgaWYgKGxvYWRfY291bnRbMSArIEJQX1BPUlQoYnApXSA9PSAxKQorCQkJbG9hZF9jb2RlID0gRldfTVNHX0NPREVfRFJWX0xPQURfUE9SVDsKKwkJZWxzZQorCQkJbG9hZF9jb2RlID0gRldfTVNHX0NPREVfRFJWX0xPQURfRlVOQ1RJT047CisJfQorCisJaWYgKChsb2FkX2NvZGUgPT0gRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OKSB8fAorCSAgICAobG9hZF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9MT0FEX1BPUlQpKQorCQlicC0+cG9ydC5wbWYgPSAxOworCWVsc2UKKwkJYnAtPnBvcnQucG1mID0gMDsKKwlEUChORVRJRl9NU0dfTElOSywgInBtZiAlZFxuIiwgYnAtPnBvcnQucG1mKTsKKworCS8qIGlmIHdlIGNhbid0IHVzZSBNU0ktWCB3ZSBvbmx5IG5lZWQgb25lIGZwLAorCSAqIHNvIHRyeSB0byBlbmFibGUgTVNJLVggd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBmcCdzCisJICogYW5kIGZhbGxiYWNrIHRvIGludGEgd2l0aCBvbmUgZnAKKwkgKi8KKwlpZiAodXNlX2ludGEpIHsKKwkJYnAtPm51bV9xdWV1ZXMgPSAxOworCisJfSBlbHNlIHsKKwkJaWYgKCh1c2VfbXVsdGkgPiAxKSAmJiAodXNlX211bHRpIDw9IEJQX01BWF9RVUVVRVMoYnApKSkKKwkJCS8qIHVzZXIgcmVxdWVzdGVkIG51bWJlciAqLworCQkJYnAtPm51bV9xdWV1ZXMgPSB1c2VfbXVsdGk7CisKKwkJZWxzZSBpZiAodXNlX211bHRpKQorCQkJYnAtPm51bV9xdWV1ZXMgPSBtaW5fdCh1MzIsIG51bV9vbmxpbmVfY3B1cygpLAorCQkJCQkgICAgICAgQlBfTUFYX1FVRVVFUyhicCkpOworCQllbHNlCisJCQlicC0+bnVtX3F1ZXVlcyA9IDE7CisKKwkJaWYgKGJueDJ4X2VuYWJsZV9tc2l4KGJwKSkgeworCQkJLyogZmFpbGVkIHRvIGVuYWJsZSBNU0ktWCAqLworCQkJYnAtPm51bV9xdWV1ZXMgPSAxOworCQkJaWYgKHVzZV9tdWx0aSkKKwkJCQlCTlgyWF9FUlIoIk11bHRpIHJlcXVlc3RlZCBidXQgZmFpbGVkIgorCQkJCQkgICIgdG8gZW5hYmxlIE1TSS1YXG4iKTsKKwkJfQorCX0KKwlEUChORVRJRl9NU0dfSUZVUCwKKwkgICAic2V0IG51bWJlciBvZiBxdWV1ZXMgdG8gJWRcbiIsIGJwLT5udW1fcXVldWVzKTsKKworCWlmIChibngyeF9hbGxvY19tZW0oYnApKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQlibngyeF9mcChicCwgaSwgZGlzYWJsZV90cGEpID0KKwkJCQkJKChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpID09IDApOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHQgaGFuZGxpbmcgdW50aWwgSFcgaXMgaW5pdGlhbGl6ZWQgKi8KKwlhdG9taWNfc2V0KCZicC0+aW50cl9zZW0sIDEpOworCisJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgeworCQlyYyA9IGJueDJ4X3JlcV9tc2l4X2lycXMoYnApOworCQlpZiAocmMpIHsKKwkJCXBjaV9kaXNhYmxlX21zaXgoYnAtPnBkZXYpOworCQkJZ290byBsb2FkX2Vycm9yOworCQl9CisJfSBlbHNlIHsKKwkJYm54MnhfYWNrX2ludChicCk7CisJCXJjID0gYm54MnhfcmVxX2lycShicCk7CisJCWlmIChyYykgeworCQkJQk5YMlhfRVJSKCJJUlEgcmVxdWVzdCBmYWlsZWQsIGFib3J0aW5nXG4iKTsKKwkJCWdvdG8gbG9hZF9lcnJvcjsKKwkJfQorCX0KKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQluZXRpZl9uYXBpX2FkZChicC0+ZGV2LCAmYm54MnhfZnAoYnAsIGksIG5hcGkpLAorCQkJICAgICAgIGJueDJ4X3BvbGwsIDEyOCk7CisKKwkvKiBJbml0aWFsaXplIEhXICovCisJcmMgPSBibngyeF9pbml0X2h3KGJwLCBsb2FkX2NvZGUpOworCWlmIChyYykgeworCQlCTlgyWF9FUlIoIkhXIGluaXQgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJCWdvdG8gbG9hZF9lcnJvcjsKKwl9CisKKwkvKiBFbmFibGUgaW50ZXJydXB0IGhhbmRsaW5nICovCisJYXRvbWljX3NldCgmYnAtPmludHJfc2VtLCAwKTsKKworCS8qIFNldHVwIE5JQyBpbnRlcm5hbHMgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJYm54MnhfbmljX2luaXQoYnApOworCisJLyogU2VuZCBMT0FEX0RPTkUgY29tbWFuZCB0byBNQ1AgKi8KKwlpZiAoIUJQX05PTUNQKGJwKSkgeworCQlsb2FkX2NvZGUgPSBibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfTE9BRF9ET05FKTsKKwkJaWYgKCFsb2FkX2NvZGUpIHsKKwkJCUJOWDJYX0VSUigiTUNQIHJlc3BvbnNlIGZhaWx1cmUsIHVubG9hZGluZ1xuIik7CisJCQlyYyA9IC1FQlVTWTsKKwkJCWdvdG8gbG9hZF9pbnRfZGlzYWJsZTsKKwkJfQorCX0KKworCWJueDJ4X3N0YXRzX2luaXQoYnApOworCisJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9QT1JUOworCisJLyogRW5hYmxlIFJ4IGludGVycnVwdCBoYW5kbGluZyBiZWZvcmUgc2VuZGluZyB0aGUgcmFtcm9kCisJICAgYXMgaXQncyBjb21wbGV0ZWQgb24gUnggRlAgcXVldWUgKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJbmFwaV9lbmFibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CisKKwlyYyA9IGJueDJ4X3NldHVwX2xlYWRpbmcoYnApOworCWlmIChyYykgeworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwkJYnAtPnBhbmljID0gMTsKKyNlbmRpZgorCQlnb3RvIGxvYWRfc3RvcF9uZXRpZjsKKwl9CisKKwlpZiAoQ0hJUF9JU19FMUgoYnApKQorCQlpZiAoYnAtPm1mX2NvbmZpZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfRElTQUJMRUQpIHsKKwkJCUJOWDJYX0VSUigiISEhICBtZl9jZmcgZnVuY3Rpb24gZGlzYWJsZWRcbiIpOworCQkJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfRElTQUJMRUQ7CisJCX0KKworCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKKwkJZm9yX2VhY2hfbm9uZGVmYXVsdF9xdWV1ZShicCwgaSkgeworCQkJcmMgPSBibngyeF9zZXR1cF9tdWx0aShicCwgaSk7CisJCQlpZiAocmMpCisJCQkJZ290byBsb2FkX3N0b3BfbmV0aWY7CisJCX0KKworCWlmIChDSElQX0lTX0UxKGJwKSkKKwkJYm54Mnhfc2V0X21hY19hZGRyX2UxKGJwKTsKKwllbHNlCisJCWJueDJ4X3NldF9tYWNfYWRkcl9lMWgoYnApOworCisJaWYgKGJwLT5wb3J0LnBtZikKKwkJYm54MnhfaW5pdGlhbF9waHlfaW5pdChicCk7CisKKwkvKiBTdGFydCBmYXN0IHBhdGggKi8KKwlzd2l0Y2ggKGxvYWRfbW9kZSkgeworCWNhc2UgTE9BRF9OT1JNQUw6CisJCS8qIFR4IHF1ZXVlIHNob3VsZCBiZSBvbmx5IHJlZW5hYmxlZCAqLworCQluZXRpZl93YWtlX3F1ZXVlKGJwLT5kZXYpOworCQlibngyeF9zZXRfcnhfbW9kZShicC0+ZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIExPQURfT1BFTjoKKwkJLyogSVJRIGlzIG9ubHkgcmVxdWVzdGVkIGZyb20gYm54Mnhfb3BlbiAqLworCQluZXRpZl9zdGFydF9xdWV1ZShicC0+ZGV2KTsKKwkJYm54Mnhfc2V0X3J4X21vZGUoYnAtPmRldik7CisJCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpCisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHVzaW5nIE1TSS1YXG4iLAorCQkJICAgICAgIGJwLT5kZXYtPm5hbWUpOworCQlicmVhazsKKworCWNhc2UgTE9BRF9ESUFHOgorCQlibngyeF9zZXRfcnhfbW9kZShicC0+ZGV2KTsKKwkJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfRElBRzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoIWJwLT5wb3J0LnBtZikKKwkJYm54MnhfX2xpbmtfc3RhdHVzX3VwZGF0ZShicCk7CisKKwkvKiBzdGFydCB0aGUgdGltZXIgKi8KKwltb2RfdGltZXIoJmJwLT50aW1lciwgamlmZmllcyArIGJwLT5jdXJyZW50X2ludGVydmFsKTsKKworCisJcmV0dXJuIDA7CisKK2xvYWRfc3RvcF9uZXRpZjoKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJbmFwaV9kaXNhYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOworCitsb2FkX2ludF9kaXNhYmxlOgorCWJueDJ4X2ludF9kaXNhYmxlX3N5bmMoYnApOworCisJLyogUmVsZWFzZSBJUlFzICovCisJYm54MnhfZnJlZV9pcnEoYnApOworCisJLyogRnJlZSBTS0JzLCBTR0VzLCBUUEEgcG9vbCBhbmQgZHJpdmVyIGludGVybmFscyAqLworCWJueDJ4X2ZyZWVfc2ticyhicCk7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLAorCQkJCQlSWF9TR0VfQ05UKk5VTV9SWF9TR0VfUEFHRVMpOworbG9hZF9lcnJvcjoKKwlibngyeF9mcmVlX21lbShicCk7CisKKwkvKiBUQkQgd2UgcmVhbGx5IG5lZWQgdG8gcmVzZXQgdGhlIGNoaXAKKwkgICBpZiB3ZSB3YW50IHRvIHJlY292ZXIgZnJvbSB0aGlzICovCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGJueDJ4X3N0b3BfbXVsdGkoc3RydWN0IGJueDJ4ICpicCwgaW50IGluZGV4KQoreworCWludCByYzsKKworCS8qIGhhbHQgdGhlIGNvbm5lY3Rpb24gKi8KKwlicC0+ZnBbaW5kZXhdLnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVElORzsKKwlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9IQUxULCBpbmRleCwgMCwgMCwgMCk7CisKKwkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCisJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfSEFMVEVELCBpbmRleCwKKwkJCSAgICAgICAmKGJwLT5mcFtpbmRleF0uc3RhdGUpLCAxKTsKKwlpZiAocmMpIC8qIHRpbWVvdXQgKi8KKwkJcmV0dXJuIHJjOworCisJLyogZGVsZXRlIGNmYyBlbnRyeSAqLworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwsIGluZGV4LCAwLCAwLCAxKTsKKworCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwlyYyA9IGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9DTE9TRUQsIGluZGV4LAorCQkJICAgICAgICYoYnAtPmZwW2luZGV4XS5zdGF0ZSksIDEpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc3RvcF9sZWFkaW5nKHN0cnVjdCBibngyeCAqYnApCit7CisJdTE2IGRzYl9zcF9wcm9kX2lkeDsKKwkvKiBpZiB0aGUgb3RoZXIgcG9ydCBpcyBoYW5kbGluZyB0cmFmZmljLAorCSAgIHRoaXMgY2FuIHRha2UgYSBsb3Qgb2YgdGltZSAqLworCWludCBjbnQgPSA1MDA7CisJaW50IHJjOworCisJbWlnaHRfc2xlZXAoKTsKKworCS8qIFNlbmQgSEFMVCByYW1yb2QgKi8KKwlicC0+ZnBbMF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIDAsIDAsIEJQX0NMX0lEKGJwKSwgMCk7CisKKwkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCisJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfSEFMVEVELCAwLAorCQkJICAgICAgICYoYnAtPmZwWzBdLnN0YXRlKSwgMSk7CisJaWYgKHJjKSAvKiB0aW1lb3V0ICovCisJCXJldHVybjsKKworCWRzYl9zcF9wcm9kX2lkeCA9ICpicC0+ZHNiX3NwX3Byb2Q7CisKKwkvKiBTZW5kIFBPUlRfREVMRVRFIHJhbXJvZCAqLworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1BPUlRfREVMLCAwLCAwLCAwLCAxKTsKKworCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gdG8gYXJyaXZlIG9uIGRlZmF1bHQgc3RhdHVzIGJsb2NrCisJICAgd2UgYXJlIGdvaW5nIHRvIHJlc2V0IHRoZSBjaGlwIGFueXdheQorCSAgIHNvIHRoZXJlIGlzIG5vdCBtdWNoIHRvIGRvIGlmIHRoaXMgdGltZXMgb3V0CisJICovCisJd2hpbGUgKGRzYl9zcF9wcm9kX2lkeCA9PSAqYnAtPmRzYl9zcF9wcm9kKSB7CisJCW1zbGVlcCgxKTsKKwkJaWYgKCFjbnQpIHsKKwkJCURQKE5FVElGX01TR19JRkRPV04sICJ0aW1lb3V0IHdhaXRpbmcgZm9yIHBvcnQgZGVsICIKKwkJCSAgICJkc2Jfc3BfcHJvZCAweCV4ICE9IGRzYl9zcF9wcm9kX2lkeCAweCV4XG4iLAorCQkJICAgKmJwLT5kc2Jfc3BfcHJvZCwgZHNiX3NwX3Byb2RfaWR4KTsKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJCQlibngyeF9wYW5pYygpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCQljbnQtLTsKKwl9CisJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9VTkxPQUQ7CisJYnAtPmZwWzBdLnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEOworfQorCitzdGF0aWMgdm9pZCBibngyeF9yZXNldF9mdW5jKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCBiYXNlLCBpOworCisJLyogQ29uZmlndXJlIElHVSAqLworCVJFR19XUihicCwgSENfUkVHX0xFQURJTkdfRURHRV8wICsgcG9ydCo4LCAwKTsKKwlSRUdfV1IoYnAsIEhDX1JFR19UUkFJTElOR19FREdFXzAgKyBwb3J0KjgsIDApOworCisJUkVHX1dSKGJwLCBIQ19SRUdfQ09ORklHXzAgKyBwb3J0KjQsIDB4MTAwMCk7CisKKwkvKiBDbGVhciBJTFQgKi8KKwliYXNlID0gRlVOQ19JTFRfQkFTRShmdW5jKTsKKwlmb3IgKGkgPSBiYXNlOyBpIDwgYmFzZSArIElMVF9QRVJfRlVOQzsgaSsrKQorCQlibngyeF9pbHRfd3IoYnAsIGksIDApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9yZXNldF9wb3J0KHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwl1MzIgdmFsOworCisJUkVHX1dSKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LCAwKTsKKworCS8qIERvIG5vdCByY3YgcGFja2V0cyB0byBCUkIgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9CUkIxX0RSVl9NQVNLICsgcG9ydCo0LCAweDApOworCS8qIERvIG5vdCBkaXJlY3QgcmN2IHBhY2tldHMgdGhhdCBhcmUgbm90IGZvciBNQ1AgdG8gdGhlIEJSQiAqLworCVJFR19XUihicCwgKHBvcnQgPyBOSUdfUkVHX0xMSDFfQlJCMV9OT1RfTUNQIDoKKwkJCSAgIE5JR19SRUdfTExIMF9CUkIxX05PVF9NQ1ApLCAweDApOworCisJLyogQ29uZmlndXJlIEFFVSAqLworCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzAgKyBwb3J0KjQsIDApOworCisJbXNsZWVwKDEwMCk7CisJLyogQ2hlY2sgZm9yIEJSQiBwb3J0IG9jY3VwYW5jeSAqLworCXZhbCA9IFJFR19SRChicCwgQlJCMV9SRUdfUE9SVF9OVU1fT0NDX0JMT0NLU18wICsgcG9ydCo0KTsKKwlpZiAodmFsKQorCQlEUChORVRJRl9NU0dfSUZET1dOLAorCQkgICAiQlJCMSBpcyBub3QgZW1wdHkgICVkIGJsb29rcyBhcmUgb2NjdXBpZWRcbiIsIHZhbCk7CisKKwkvKiBUT0RPOiBDbG9zZSBEb29yYmVsbCBwb3J0PyAqLworfQorCitzdGF0aWMgdm9pZCBibngyeF9yZXNldF9jb21tb24oc3RydWN0IGJueDJ4ICpicCkKK3sKKwkvKiByZXNldF9jb21tb24gKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX0NMRUFSLAorCSAgICAgICAweGQzZmZmZjdmKTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLCAweDE0MDMpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9yZXNldF9jaGlwKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZXNldF9jb2RlKQoreworCURQKEJOWDJYX01TR19NQ1AsICJmdW5jdGlvbiAlZCAgcmVzZXRfY29kZSAleFxuIiwKKwkgICBCUF9GVU5DKGJwKSwgcmVzZXRfY29kZSk7CisKKwlzd2l0Y2ggKHJlc2V0X2NvZGUpIHsKKwljYXNlIEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OOgorCQlibngyeF9yZXNldF9wb3J0KGJwKTsKKwkJYm54MnhfcmVzZXRfZnVuYyhicCk7CisJCWJueDJ4X3Jlc2V0X2NvbW1vbihicCk7CisJCWJyZWFrOworCisJY2FzZSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX1BPUlQ6CisJCWJueDJ4X3Jlc2V0X3BvcnQoYnApOworCQlibngyeF9yZXNldF9mdW5jKGJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEZXX01TR19DT0RFX0RSVl9VTkxPQURfRlVOQ1RJT046CisJCWJueDJ4X3Jlc2V0X2Z1bmMoYnApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJOWDJYX0VSUigiVW5rbm93biByZXNldF9jb2RlICgweCV4KSBmcm9tIE1DUFxuIiwgcmVzZXRfY29kZSk7CisJCWJyZWFrOworCX0KK30KKworLyogbXN1dCBiZSBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3N0YXRpYyBpbnQgYm54MnhfbmljX3VubG9hZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgdW5sb2FkX21vZGUpCit7CisJdTMyIHJlc2V0X2NvZGUgPSAwOworCWludCBpLCBjbnQ7CisKKwlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQ7CisKKwlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsKKwlibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShicCk7CisKKwlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgeworCQluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOworCQlicC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CS8qIHByZXZlbnQgdHggdGltZW91dCAqLworCX0KKworCWRlbF90aW1lcl9zeW5jKCZicC0+dGltZXIpOworCVNITUVNX1dSKGJwLCBmdW5jX21iW0JQX0ZVTkMoYnApXS5kcnZfcHVsc2VfbWIsCisJCSAoRFJWX1BVTFNFX0FMV0FZU19BTElWRSB8IGJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxKSk7CisJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKKworCS8qIFdhaXQgdW50aWwgYWxsIGZhc3QgcGF0aCB0YXNrcyBjb21wbGV0ZSAqLworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorI2lmZGVmIF9fcG93ZXJwYzY0X18KKwkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgImZwLT50cGFfcXVldWVfdXNlZCA9IDB4JWx4XG4iLAorI2Vsc2UKKwkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImZwLT50cGFfcXVldWVfdXNlZCA9IDB4JWxseFxuIiwKKyNlbmRpZgorCQkgICBmcC0+dHBhX3F1ZXVlX3VzZWQpOworI2VuZGlmCisJCWNudCA9IDEwMDA7CisJCXNtcF9ybWIoKTsKKwkJd2hpbGUgKGJueDJ4X2hhc193b3JrKGZwKSkgeworCQkJbXNsZWVwKDEpOworCQkJaWYgKCFjbnQpIHsKKwkJCQlCTlgyWF9FUlIoInRpbWVvdXQgd2FpdGluZyBmb3IgcXVldWVbJWRdXG4iLAorCQkJCQkgIGkpOworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwkJCQlibngyeF9wYW5pYygpOworCQkJCXJldHVybiAtRUJVU1k7CisjZWxzZQorCQkJCWJyZWFrOworI2VuZGlmCisJCQl9CisJCQljbnQtLTsKKwkJCXNtcF9ybWIoKTsKKwkJfQorCX0KKworCS8qIFdhaXQgdW50aWwgYWxsIHNsb3cgcGF0aCB0YXNrcyBjb21wbGV0ZSAqLworCWNudCA9IDEwMDA7CisJd2hpbGUgKChicC0+c3BxX2xlZnQgIT0gTUFYX1NQUV9QRU5ESU5HKSAmJiBjbnQtLSkKKwkJbXNsZWVwKDEpOworCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCW5hcGlfZGlzYWJsZSgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgYWZ0ZXIgVHggYW5kIFJ4IGFyZSBkaXNhYmxlZCBvbiBzdGFjayBsZXZlbCAqLworCWJueDJ4X2ludF9kaXNhYmxlX3N5bmMoYnApOworCisJLyogUmVsZWFzZSBJUlFzICovCisJYm54MnhfZnJlZV9pcnEoYnApOworCisJaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKQorCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX01DUDsKKworCWVsc2UgaWYgKGJwLT53b2wpIHsKKwkJdTMyIGVtYWNfYmFzZSA9IEJQX1BPUlQoYnApID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7CisJCXU4ICptYWNfYWRkciA9IGJwLT5kZXYtPmRldl9hZGRyOworCQl1MzIgdmFsOworCisJCS8qIFRoZSBtYWMgYWRkcmVzcyBpcyB3cml0dGVuIHRvIGVudHJpZXMgMS00IHRvCisJCSAgIHByZXNlcnZlIGVudHJ5IDAgd2hpY2ggaXMgdXNlZCBieSB0aGUgUE1GICovCisJCXZhbCA9IChtYWNfYWRkclswXSA8PCA4KSB8IG1hY19hZGRyWzFdOworCQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTUFDX01BVENIICsgKEJQX0UxSFZOKGJwKSArIDEpKjgsIHZhbCk7CisKKwkJdmFsID0gKG1hY19hZGRyWzJdIDw8IDI0KSB8IChtYWNfYWRkclszXSA8PCAxNikgfAorCQkgICAgICAobWFjX2FkZHJbNF0gPDwgOCkgfCBtYWNfYWRkcls1XTsKKwkJRU1BQ19XUihFTUFDX1JFR19FTUFDX01BQ19NQVRDSCArIChCUF9FMUhWTihicCkgKyAxKSo4ICsgNCwKKwkJCXZhbCk7CisKKwkJcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9FTjsKKworCX0gZWxzZQorCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0RJUzsKKworCS8qIENsb3NlIG11bHRpIGFuZCBsZWFkaW5nIGNvbm5lY3Rpb25zCisJICAgQ29tcGxldGlvbnMgZm9yIHJhbXJvZHMgYXJlIGNvbGxlY3RlZCBpbiBhIHN5bmNocm9ub3VzIHdheSAqLworCWZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIGkpCisJCWlmIChibngyeF9zdG9wX211bHRpKGJwLCBpKSkKKwkJCWdvdG8gdW5sb2FkX2Vycm9yOworCisJaWYgKENISVBfSVNfRTFIKGJwKSkKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfRlVOQ19FTiArIEJQX1BPUlQoYnApKjgsIDApOworCisJYm54Mnhfc3RvcF9sZWFkaW5nKGJwKTsKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJLyogSWYgcmFtcm9kIGNvbXBsZXRpb24gdGltZWQgb3V0IC0gYnJlYWsgaGVyZSEgKi8KKwlpZiAoYnAtPnBhbmljKSB7CisJCUJOWDJYX0VSUigiU3RvcCBsZWFkaW5nIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKyNlbmRpZgorCisJaWYgKChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9VTkxPQUQpIHx8CisJICAgIChicC0+ZnBbMF0uc3RhdGUgIT0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEKSkgeworCQlEUChORVRJRl9NU0dfSUZET1dOLCAiZmFpbGVkIHRvIGNsb3NlIGxlYWRpbmcgcHJvcGVybHkhICAiCisJCSAgICJzdGF0ZSAweCV4ICBmcFswXS5zdGF0ZSAweCV4XG4iLAorCQkgICBicC0+c3RhdGUsIGJwLT5mcFswXS5zdGF0ZSk7CisJfQorCit1bmxvYWRfZXJyb3I6CisJaWYgKCFCUF9OT01DUChicCkpCisJCXJlc2V0X2NvZGUgPSBibngyeF9md19jb21tYW5kKGJwLCByZXNldF9jb2RlKTsKKwllbHNlIHsKKwkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIk5PIE1DUCBsb2FkIGNvdW50cyAgICAgICVkLCAlZCwgJWRcbiIsCisJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOworCQlsb2FkX2NvdW50WzBdLS07CisJCWxvYWRfY291bnRbMSArIEJQX1BPUlQoYnApXS0tOworCQlEUChORVRJRl9NU0dfSUZET1dOLCAiTk8gTUNQIG5ldyBsb2FkIGNvdW50cyAgJWQsICVkLCAlZFxuIiwKKwkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CisJCWlmIChsb2FkX2NvdW50WzBdID09IDApCisJCQlyZXNldF9jb2RlID0gRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT047CisJCWVsc2UgaWYgKGxvYWRfY291bnRbMSArIEJQX1BPUlQoYnApXSA9PSAwKQorCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfUE9SVDsKKwkJZWxzZQorCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfRlVOQ1RJT047CisJfQorCisJaWYgKChyZXNldF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OKSB8fAorCSAgICAocmVzZXRfY29kZSA9PSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX1BPUlQpKQorCQlibngyeF9fbGlua19yZXNldChicCk7CisKKwkvKiBSZXNldCB0aGUgY2hpcCAqLworCWJueDJ4X3Jlc2V0X2NoaXAoYnAsIHJlc2V0X2NvZGUpOworCisJLyogUmVwb3J0IFVOTE9BRF9ET05FIHRvIE1DUCAqLworCWlmICghQlBfTk9NQ1AoYnApKQorCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOworCisJLyogRnJlZSBTS0JzLCBTR0VzLCBUUEEgcG9vbCBhbmQgZHJpdmVyIGludGVybmFscyAqLworCWJueDJ4X2ZyZWVfc2ticyhicCk7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLAorCQkJCQlSWF9TR0VfQ05UKk5VTV9SWF9TR0VfUEFHRVMpOworCWJueDJ4X2ZyZWVfbWVtKGJwKTsKKworCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0NMT1NFRDsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJueDJ4LCByZXNldF90YXNrKTsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlCTlgyWF9FUlIoInJlc2V0IHRhc2sgY2FsbGVkIGJ1dCBTVE9QX09OX0VSUk9SIGRlZmluZWQiCisJCSAgIiBzbyByZXNldCBub3QgZG9uZSB0byBhbGxvdyBkZWJ1ZyBkdW1wLFxuIgorCSBLRVJOX0VSUiAiIHlvdSB3aWxsIG5lZWQgdG8gcmVib290IHdoZW4gZG9uZVxuIik7CisJcmV0dXJuOworI2VuZGlmCisKKwlydG5sX2xvY2soKTsKKworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJZ290byByZXNldF90YXNrX2V4aXQ7CisKKwlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKKwlibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOworCityZXNldF90YXNrX2V4aXQ6CisJcnRubF91bmxvY2soKTsKK30KKworLyogZW5kIG9mIG5pYyBsb2FkL3VubG9hZCAqLworCisvKiBldGh0b29sX29wcyAqLworCisvKgorICogSW5pdCBzZXJ2aWNlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF91bmRpX3VubG9hZChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiB2YWw7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgZHJpdmVyIGFscmVhZHkgbG9hZGVkICovCisJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19VTlBSRVBBUkVEKTsKKwlpZiAodmFsID09IDB4MSkgeworCQkvKiBDaGVjayBpZiBpdCBpcyB0aGUgVU5ESSBkcml2ZXIKKwkJICogVU5ESSBkcml2ZXIgaW5pdGlhbGl6ZXMgQ0lEIG9mZnNldCBmb3Igbm9ybWFsIGJlbGwgdG8gMHg3CisJCSAqLworCQl2YWwgPSBSRUdfUkQoYnAsIERPUlFfUkVHX05PUk1fQ0lEX09GU1QpOworCQlpZiAodmFsID09IDB4NykgeworCQkJdTMyIHJlc2V0X2NvZGUgPSBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfRElTOworCQkJLyogc2F2ZSBvdXIgZnVuYyBhbmQgZndfc2VxICovCisJCQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCQkJdTE2IGZ3X3NlcSA9IGJwLT5md19zZXE7CisKKwkJCUJOWDJYX0RFVl9JTkZPKCJVTkRJIGlzIGFjdGl2ZSEgcmVzZXQgZGV2aWNlXG4iKTsKKworCQkJLyogdHJ5IHVubG9hZCBVTkRJIG9uIHBvcnQgMCAqLworCQkJYnAtPmZ1bmMgPSAwOworCQkJYnAtPmZ3X3NlcSA9IChTSE1FTV9SRChicCwKKwkJCQkJICAgICBmdW5jX21iW2JwLT5mdW5jXS5kcnZfbWJfaGVhZGVyKSAmCisJCQkJICAgICAgRFJWX01TR19TRVFfTlVNQkVSX01BU0spOworCisJCQlyZXNldF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgcmVzZXRfY29kZSk7CisJCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOworCisJCQkvKiBpZiBVTkRJIGlzIGxvYWRlZCBvbiB0aGUgb3RoZXIgcG9ydCAqLworCQkJaWYgKHJlc2V0X2NvZGUgIT0gRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT04pIHsKKworCQkJCWJwLT5mdW5jID0gMTsKKwkJCQlicC0+Zndfc2VxID0gKFNITUVNX1JEKGJwLAorCQkJCQkgICAgIGZ1bmNfbWJbYnAtPmZ1bmNdLmRydl9tYl9oZWFkZXIpICYKKwkJCQkJICAgICAgRFJWX01TR19TRVFfTlVNQkVSX01BU0spOworCisJCQkJYm54MnhfZndfY29tbWFuZChicCwKKwkJCQkJICAgICBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfRElTKTsKKwkJCQlibngyeF9md19jb21tYW5kKGJwLAorCQkJCQkJIERSVl9NU0dfQ09ERV9VTkxPQURfRE9ORSk7CisKKwkJCQkvKiByZXN0b3JlIG91ciBmdW5jIGFuZCBmd19zZXEgKi8KKwkJCQlicC0+ZnVuYyA9IGZ1bmM7CisJCQkJYnAtPmZ3X3NlcSA9IGZ3X3NlcTsKKwkJCX0KKworCQkJLyogcmVzZXQgZGV2aWNlICovCisJCQlSRUdfV1IoYnAsCisJCQkgICAgICAgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzFfQ0xFQVIsCisJCQkgICAgICAgMHhkM2ZmZmY3Zik7CisJCQlSRUdfV1IoYnAsCisJCQkgICAgICAgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCisJCQkgICAgICAgMHgxNDAzKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2dldF9jb21tb25faHdpbmZvKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbCwgdmFsMiwgdmFsMywgdmFsNCwgaWQ7CisKKwkvKiBHZXQgdGhlIGNoaXAgcmV2aXNpb24gaWQgYW5kIG51bWJlci4gKi8KKwkvKiBjaGlwIG51bToxNi0zMSwgcmV2OjEyLTE1LCBtZXRhbDo0LTExLCBib25kX2lkOjAtMyAqLworCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfQ0hJUF9OVU0pOworCWlkID0gKCh2YWwgJiAweGZmZmYpIDw8IDE2KTsKKwl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0NISVBfUkVWKTsKKwlpZCB8PSAoKHZhbCAmIDB4ZikgPDwgMTIpOworCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfQ0hJUF9NRVRBTCk7CisJaWQgfD0gKCh2YWwgJiAweGZmKSA8PCA0KTsKKwlSRUdfUkQoYnAsIE1JU0NfUkVHX0JPTkRfSUQpOworCWlkIHw9ICh2YWwgJiAweGYpOworCWJwLT5jb21tb24uY2hpcF9pZCA9IGlkOworCWJwLT5saW5rX3BhcmFtcy5jaGlwX2lkID0gYnAtPmNvbW1vbi5jaGlwX2lkOworCUJOWDJYX0RFVl9JTkZPKCJjaGlwIElEIGlzIDB4JXhcbiIsIGlkKTsKKworCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9DRkc0KTsKKwlicC0+Y29tbW9uLmZsYXNoX3NpemUgPSAoTlZSQU1fMU1CX1NJWkUgPDwKKwkJCQkgKHZhbCAmIE1DUFJfTlZNX0NGRzRfRkxBU0hfU0laRSkpOworCUJOWDJYX0RFVl9JTkZPKCJmbGFzaF9zaXplIDB4JXggKCVkKVxuIiwKKwkJICAgICAgIGJwLT5jb21tb24uZmxhc2hfc2l6ZSwgYnAtPmNvbW1vbi5mbGFzaF9zaXplKTsKKworCWJwLT5jb21tb24uc2htZW1fYmFzZSA9IFJFR19SRChicCwgTUlTQ19SRUdfU0hBUkVEX01FTV9BRERSKTsKKwlicC0+bGlua19wYXJhbXMuc2htZW1fYmFzZSA9IGJwLT5jb21tb24uc2htZW1fYmFzZTsKKwlCTlgyWF9ERVZfSU5GTygic2htZW0gb2Zmc2V0IGlzIDB4JXhcbiIsIGJwLT5jb21tb24uc2htZW1fYmFzZSk7CisKKwlpZiAoIWJwLT5jb21tb24uc2htZW1fYmFzZSB8fAorCSAgICAoYnAtPmNvbW1vbi5zaG1lbV9iYXNlIDwgMHhBMDAwMCkgfHwKKwkgICAgKGJwLT5jb21tb24uc2htZW1fYmFzZSA+PSAweEMwMDAwKSkgeworCQlCTlgyWF9ERVZfSU5GTygiTUNQIG5vdCBhY3RpdmVcbiIpOworCQlicC0+ZmxhZ3MgfD0gTk9fTUNQX0ZMQUc7CisJCXJldHVybjsKKwl9CisKKwl2YWwgPSBTSE1FTV9SRChicCwgdmFsaWRpdHlfbWFwW0JQX1BPUlQoYnApXSk7CisJaWYgKCh2YWwgJiAoU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTyB8IFNIUl9NRU1fVkFMSURJVFlfTUIpKQorCQkhPSAoU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTyB8IFNIUl9NRU1fVkFMSURJVFlfTUIpKQorCQlCTlgyWF9FUlIoIkJBRCBNQ1AgdmFsaWRpdHkgc2lnbmF0dXJlXG4iKTsKKworCWJwLT5jb21tb24uaHdfY29uZmlnID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcuY29uZmlnKTsKKwlicC0+Y29tbW9uLmJvYXJkID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcuYm9hcmQpOworCisJQk5YMlhfREVWX0lORk8oImh3X2NvbmZpZyAweCUwOHggIGJvYXJkIDB4JTA4eFxuIiwKKwkJICAgICAgIGJwLT5jb21tb24uaHdfY29uZmlnLCBicC0+Y29tbW9uLmJvYXJkKTsKKworCWJwLT5saW5rX3BhcmFtcy5od19sZWRfbW9kZSA9ICgoYnAtPmNvbW1vbi5od19jb25maWcgJgorCQkJCQlTSEFSRURfSFdfQ0ZHX0xFRF9NT0RFX01BU0spID4+CisJCQkJICAgICAgIFNIQVJFRF9IV19DRkdfTEVEX01PREVfU0hJRlQpOworCisJdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLmJjX3JldikgPj4gODsKKwlicC0+Y29tbW9uLmJjX3ZlciA9IHZhbDsKKwlCTlgyWF9ERVZfSU5GTygiYmNfdmVyICVYXG4iLCB2YWwpOworCWlmICh2YWwgPCBCTlgyWF9CQ19WRVIpIHsKKwkJLyogZm9yIG5vdyBvbmx5IHdhcm4KKwkJICogbGF0ZXIgd2UgbWlnaHQgbmVlZCB0byBlbmZvcmNlIHRoaXMgKi8KKwkJQk5YMlhfRVJSKCJUaGlzIGRyaXZlciBuZWVkcyBiY192ZXIgJVggYnV0IGZvdW5kICVYLCIKKwkJCSAgIiBwbGVhc2UgdXBncmFkZSBCQ1xuIiwgQk5YMlhfQkNfVkVSLCB2YWwpOworCX0KKwlCTlgyWF9ERVZfSU5GTygiJXNXb0wgQ2FwYWJsZVxuIiwKKwkJICAgICAgIChicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRyk/ICJOb3QgIiA6ICIiKTsKKworCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtKTsKKwl2YWwyID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcucGFydF9udW1bNF0pOworCXZhbDMgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5wYXJ0X251bVs4XSk7CisJdmFsNCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtWzEyXSk7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAicGFydCBudW1iZXIgJVgtJVgtJVgtJVhcbiIsCisJICAgICAgIHZhbCwgdmFsMiwgdmFsMywgdmFsNCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF9saW5rX3NldHRpbmdzX3N1cHBvcnRlZChzdHJ1Y3QgYm54MnggKmJwLAorCQkJCQkJICAgIHUzMiBzd2l0Y2hfY2ZnKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJdTMyIGV4dF9waHlfdHlwZTsKKworCXN3aXRjaCAoc3dpdGNoX2NmZykgeworCWNhc2UgU1dJVENIX0NGR18xRzoKKwkJQk5YMlhfREVWX0lORk8oInN3aXRjaF9jZmcgMHgleCAoMUcpXG4iLCBzd2l0Y2hfY2ZnKTsKKworCQlleHRfcGh5X3R5cGUgPQorCQkJU0VSREVTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChEaXJlY3QpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9UUCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9CQ001NDgyOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg1NDgyKVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9UUCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlCTlgyWF9FUlIoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgorCQkJCSAgIkJBRCBTZXJEZXMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKKwkJCQkgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisJCQlyZXR1cm47CisJCX0KKworCQlicC0+cG9ydC5waHlfYWRkciA9IFJFR19SRChicCwgTklHX1JFR19TRVJERVMwX0NUUkxfUEhZX0FERFIgKworCQkJCQkgICBwb3J0KjB4MTApOworCQlCTlgyWF9ERVZfSU5GTygicGh5X2FkZHIgMHgleFxuIiwgYnAtPnBvcnQucGh5X2FkZHIpOworCQlicmVhazsKKworCWNhc2UgU1dJVENIX0NGR18xMEc6CisJCUJOWDJYX0RFVl9JTkZPKCJzd2l0Y2hfY2ZnIDB4JXggKDEwRylcbiIsIHN3aXRjaF9jZmcpOworCisJCWV4dF9waHlfdHlwZSA9CisJCQlYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoRGlyZWN0KVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9UUCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNSlcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNilcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDgwNzIpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4MDczKVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKFNGWDcxMDEpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1RQIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CisJCQlCTlgyWF9FUlIoIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWQgMHgleFxuIiwKKwkJCQkgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQk5YMlhfRVJSKCJOVlJBTSBjb25maWcgZXJyb3IuICIKKwkJCQkgICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJCSAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWJwLT5wb3J0LnBoeV9hZGRyID0gUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfUEhZX0FERFIgKworCQkJCQkgICBwb3J0KjB4MTgpOworCQlCTlgyWF9ERVZfSU5GTygicGh5X2FkZHIgMHgleFxuIiwgYnAtPnBvcnQucGh5X2FkZHIpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQk5YMlhfRVJSKCJCQUQgc3dpdGNoX2NmZyBsaW5rX2NvbmZpZyAweCV4XG4iLAorCQkJICBicC0+cG9ydC5saW5rX2NvbmZpZyk7CisJCXJldHVybjsKKwl9CisJYnAtPmxpbmtfcGFyYW1zLnBoeV9hZGRyID0gYnAtPnBvcnQucGh5X2FkZHI7CisKKwkvKiBtYXNrIHdoYXQgd2Ugc3VwcG9ydCBhY2NvcmRpbmcgdG8gc3BlZWRfY2FwX21hc2sgKi8KKwlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgorCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBNX0hBTEYpKQorCQlicC0+cG9ydC5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMGJhc2VUX0hhbGY7CisKKwlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgorCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBNX0ZVTEwpKQorCQlicC0+cG9ydC5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMGJhc2VUX0Z1bGw7CisKKwlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgorCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTAwTV9IQUxGKSkKKwkJYnAtPnBvcnQuc3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTAwYmFzZVRfSGFsZjsKKworCWlmICghKGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayAmCisJCQkJUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMDBNX0ZVTEwpKQorCQlicC0+cG9ydC5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOworCisJaWYgKCEoYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrICYKKwkJCQkJUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykpCisJCWJwLT5wb3J0LnN1cHBvcnRlZCAmPSB+KFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkJCVNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCk7CisKKwlpZiAoIShicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgJgorCQkJCQlQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzJfNUcpKQorCQlicC0+cG9ydC5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbDsKKworCWlmICghKGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayAmCisJCQkJCVBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKSkKKwkJYnAtPnBvcnQuc3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworCisJQk5YMlhfREVWX0lORk8oInN1cHBvcnRlZCAweCV4XG4iLCBicC0+cG9ydC5zdXBwb3J0ZWQpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfbGlua19zZXR0aW5nc19yZXF1ZXN0ZWQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlicC0+bGlua19wYXJhbXMucmVxX2R1cGxleCA9IERVUExFWF9GVUxMOworCisJc3dpdGNoIChicC0+cG9ydC5saW5rX2NvbmZpZyAmIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEX01BU0spIHsKKwljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEX0FVVE86CisJCWlmIChicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfQXV0b25lZykgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfQVVUT19ORUc7CisJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IGJwLT5wb3J0LnN1cHBvcnRlZDsKKwkJfSBlbHNlIHsKKwkJCXUzMiBleHRfcGh5X3R5cGUgPQorCQkJICAgIFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisKKwkJCWlmICgoZXh0X3BoeV90eXBlID09CisJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpIHx8CisJCQkgICAgKGV4dF9waHlfdHlwZSA9PQorCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2KSkgeworCQkJCS8qIGZvcmNlIDEwRywgbm8gQU4gKi8KKwkJCQlicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9CisJCQkJCQkoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkJIEFEVkVSVElTRURfRklCUkUpOworCQkJCWJyZWFrOworCQkJfQorCQkJQk5YMlhfRVJSKCJOVlJBTSBjb25maWcgZXJyb3IuICIKKwkJCQkgICJJbnZhbGlkIGxpbmtfY29uZmlnIDB4JXgiCisJCQkJICAiICBBdXRvbmVnIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJICBicC0+cG9ydC5saW5rX2NvbmZpZyk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwTV9GVUxMOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCkgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTA7CisJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8CisJCQkJCQlBRFZFUlRJU0VEX1RQKTsKKwkJfSBlbHNlIHsKKwkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkJICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgorCQkJCSAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKKwkJCQkgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAorCQkJCSAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTBNX0hBTEY6CisJCWlmIChicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTBiYXNlVF9IYWxmKSB7CisJCQlicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDsKKwkJCWJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CisJCQkJCQlBRFZFUlRJU0VEX1RQKTsKKwkJfSBlbHNlIHsKKwkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkJICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgorCQkJCSAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKKwkJCQkgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAorCQkJCSAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTAwTV9GVUxMOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwpIHsKKwkJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWJwLT5wb3J0LmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CisJCQkJCQlBRFZFUlRJU0VEX1RQKTsKKwkJfSBlbHNlIHsKKwkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkJICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgorCQkJCSAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKKwkJCQkgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAorCQkJCSAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTAwTV9IQUxGOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYpIHsKKwkJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCQkJQURWRVJUSVNFRF9UUCk7CisJCX0gZWxzZSB7CisJCQlCTlgyWF9FUlIoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgorCQkJCSAgIkludmFsaWQgbGlua19jb25maWcgMHgleCIKKwkJCQkgICIgIHNwZWVkX2NhcF9tYXNrIDB4JXhcbiIsCisJCQkJICBicC0+cG9ydC5saW5rX2NvbmZpZywKKwkJCQkgIGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzFHOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKSB7CisJCQlicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCQlBRFZFUlRJU0VEX1RQKTsKKwkJfSBlbHNlIHsKKwkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkJICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgorCQkJCSAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKKwkJCQkgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAorCQkJCSAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMl81RzoKKwkJaWYgKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbCkgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMjUwMDsKKwkJCWJwLT5wb3J0LmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMjUwMGJhc2VYX0Z1bGwgfAorCQkJCQkJQURWRVJUSVNFRF9UUCk7CisJCX0gZWxzZSB7CisJCQlCTlgyWF9FUlIoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgorCQkJCSAgIkludmFsaWQgbGlua19jb25maWcgMHgleCIKKwkJCQkgICIgIHNwZWVkX2NhcF9tYXNrIDB4JXhcbiIsCisJCQkJICBicC0+cG9ydC5saW5rX2NvbmZpZywKKwkJCQkgIGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwR19DWDQ6CisJY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xMEdfS1g0OgorCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTBHX0tSOgorCQlpZiAoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCkgeworCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCQlBRFZFUlRJU0VEX0ZJQlJFKTsKKwkJfSBlbHNlIHsKKwkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkJICAiSW52YWxpZCBsaW5rX2NvbmZpZyAweCV4IgorCQkJCSAgIiAgc3BlZWRfY2FwX21hc2sgMHgleFxuIiwKKwkJCQkgIGJwLT5wb3J0LmxpbmtfY29uZmlnLAorCQkJCSAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCisJCQkgICJCQUQgbGluayBzcGVlZCBsaW5rX2NvbmZpZyAweCV4XG4iLAorCQkJICBicC0+cG9ydC5saW5rX2NvbmZpZyk7CisJCWJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9IFNQRUVEX0FVVE9fTkVHOworCQlicC0+cG9ydC5hZHZlcnRpc2luZyA9IGJwLT5wb3J0LnN1cHBvcnRlZDsKKwkJYnJlYWs7CisJfQorCisJYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPSAoYnAtPnBvcnQubGlua19jb25maWcgJgorCQkJCQkgUE9SVF9GRUFUVVJFX0ZMT1dfQ09OVFJPTF9NQVNLKTsKKwlpZiAoKGJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsID09IEZMT1dfQ1RSTF9BVVRPKSAmJgorCSAgICAoIWJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9BdXRvbmVnKSkKKwkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPSBGTE9XX0NUUkxfTk9ORTsKKworCUJOWDJYX0RFVl9JTkZPKCJyZXFfbGluZV9zcGVlZCAlZCAgcmVxX2R1cGxleCAlZCAgcmVxX2Zsb3dfY3RybCAweCV4IgorCQkgICAgICAgIiAgYWR2ZXJ0aXNpbmcgMHgleFxuIiwKKwkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCwKKwkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4LAorCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwsIGJwLT5wb3J0LmFkdmVydGlzaW5nKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2dldF9wb3J0X2h3aW5mbyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJdTMyIHZhbCwgdmFsMjsKKworCWJwLT5saW5rX3BhcmFtcy5icCA9IGJwOworCWJwLT5saW5rX3BhcmFtcy5wb3J0ID0gcG9ydDsKKworCWJwLT5saW5rX3BhcmFtcy5zZXJkZXNfY29uZmlnID0KKwkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnNlcmRlc19jb25maWcpOworCWJwLT5saW5rX3BhcmFtcy5sYW5lX2NvbmZpZyA9CisJCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5sYW5lX2NvbmZpZyk7CisJYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnID0KKwkJU0hNRU1fUkQoYnAsCisJCQkgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uZXh0ZXJuYWxfcGh5X2NvbmZpZyk7CisJYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrID0KKwkJU0hNRU1fUkQoYnAsCisJCQkgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uc3BlZWRfY2FwYWJpbGl0eV9tYXNrKTsKKworCWJwLT5wb3J0LmxpbmtfY29uZmlnID0KKwkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfZmVhdHVyZV9jb25maWdbcG9ydF0ubGlua19jb25maWcpOworCisJQk5YMlhfREVWX0lORk8oInNlcmRlc19jb25maWcgMHglMDh4ICBsYW5lX2NvbmZpZyAweCUwOHhcbiIKKwkgICAgIEtFUk5fSU5GTyAiICBleHRfcGh5X2NvbmZpZyAweCUwOHggIHNwZWVkX2NhcF9tYXNrIDB4JTA4eCIKKwkJICAgICAgICIgIGxpbmtfY29uZmlnIDB4JTA4eFxuIiwKKwkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5zZXJkZXNfY29uZmlnLAorCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLmxhbmVfY29uZmlnLAorCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnLAorCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrLCBicC0+cG9ydC5saW5rX2NvbmZpZyk7CisKKwlicC0+bGlua19wYXJhbXMuc3dpdGNoX2NmZyA9IChicC0+cG9ydC5saW5rX2NvbmZpZyAmCisJCQkJICAgICAgUE9SVF9GRUFUVVJFX0NPTk5FQ1RFRF9TV0lUQ0hfTUFTSyk7CisJYm54MnhfbGlua19zZXR0aW5nc19zdXBwb3J0ZWQoYnAsIGJwLT5saW5rX3BhcmFtcy5zd2l0Y2hfY2ZnKTsKKworCWJueDJ4X2xpbmtfc2V0dGluZ3NfcmVxdWVzdGVkKGJwKTsKKworCXZhbDIgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubWFjX3VwcGVyKTsKKwl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubWFjX2xvd2VyKTsKKwlicC0+ZGV2LT5kZXZfYWRkclswXSA9ICh1OCkodmFsMiA+PiA4ICYgMHhmZik7CisJYnAtPmRldi0+ZGV2X2FkZHJbMV0gPSAodTgpKHZhbDIgJiAweGZmKTsKKwlicC0+ZGV2LT5kZXZfYWRkclsyXSA9ICh1OCkodmFsID4+IDI0ICYgMHhmZik7CisJYnAtPmRldi0+ZGV2X2FkZHJbM10gPSAodTgpKHZhbCA+PiAxNiAmIDB4ZmYpOworCWJwLT5kZXYtPmRldl9hZGRyWzRdID0gKHU4KSh2YWwgPj4gOCAgJiAweGZmKTsKKwlicC0+ZGV2LT5kZXZfYWRkcls1XSA9ICh1OCkodmFsICYgMHhmZik7CisJbWVtY3B5KGJwLT5saW5rX3BhcmFtcy5tYWNfYWRkciwgYnAtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoYnAtPmRldi0+cGVybV9hZGRyLCBicC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9nZXRfaHdpbmZvKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwl1MzIgdmFsLCB2YWwyOworCWludCByYyA9IDA7CisKKwlibngyeF9nZXRfY29tbW9uX2h3aW5mbyhicCk7CisKKwlicC0+ZTFob3YgPSAwOworCWJwLT5lMWhtZiA9IDA7CisJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQlicC0+bWZfY29uZmlnID0KKwkJCVNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKKworCQl2YWwgPQorCQkgICAoU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5lMWhvdl90YWcpICYKKwkJICAgIEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19NQVNLKTsKKwkJaWYgKHZhbCAhPSBGVU5DX01GX0NGR19FMUhPVl9UQUdfREVGQVVMVCkgeworCisJCQlicC0+ZTFob3YgPSB2YWw7CisJCQlicC0+ZTFobWYgPSAxOworCQkJQk5YMlhfREVWX0lORk8oIk1GIG1vZGUgIEUxSE9WIGZvciBmdW5jICVkIGlzICVkICIKKwkJCQkgICAgICAgIigweCUwNHgpXG4iLAorCQkJCSAgICAgICBmdW5jLCBicC0+ZTFob3YsIGJwLT5lMWhvdik7CisJCX0gZWxzZSB7CisJCQlCTlgyWF9ERVZfSU5GTygiU2luZ2xlIGZ1bmN0aW9uIG1vZGVcbiIpOworCQkJaWYgKEJQX0UxSFZOKGJwKSkgeworCQkJCUJOWDJYX0VSUigiISEhICBObyB2YWxpZCBFMUhPViBmb3IgZnVuYyAlZCwiCisJCQkJCSAgIiAgYWJvcnRpbmdcbiIsIGZ1bmMpOworCQkJCXJjID0gLUVQRVJNOworCQkJfQorCQl9CisJfQorCisJaWYgKCFCUF9OT01DUChicCkpIHsKKwkJYm54MnhfZ2V0X3BvcnRfaHdpbmZvKGJwKTsKKworCQlicC0+Zndfc2VxID0gKFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9tYl9oZWFkZXIpICYKKwkJCSAgICAgIERSVl9NU0dfU0VRX05VTUJFUl9NQVNLKTsKKwkJQk5YMlhfREVWX0lORk8oImZ3X3NlcSAweCUwOHhcbiIsIGJwLT5md19zZXEpOworCX0KKworCWlmIChJU19FMUhNRihicCkpIHsKKwkJdmFsMiA9IFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10ubWFjX3VwcGVyKTsKKwkJdmFsID0gU0hNRU1fUkQoYnAsICBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10ubWFjX2xvd2VyKTsKKwkJaWYgKCh2YWwyICE9IEZVTkNfTUZfQ0ZHX1VQUEVSTUFDX0RFRkFVTFQpICYmCisJCSAgICAodmFsICE9IEZVTkNfTUZfQ0ZHX0xPV0VSTUFDX0RFRkFVTFQpKSB7CisJCQlicC0+ZGV2LT5kZXZfYWRkclswXSA9ICh1OCkodmFsMiA+PiA4ICYgMHhmZik7CisJCQlicC0+ZGV2LT5kZXZfYWRkclsxXSA9ICh1OCkodmFsMiAmIDB4ZmYpOworCQkJYnAtPmRldi0+ZGV2X2FkZHJbMl0gPSAodTgpKHZhbCA+PiAyNCAmIDB4ZmYpOworCQkJYnAtPmRldi0+ZGV2X2FkZHJbM10gPSAodTgpKHZhbCA+PiAxNiAmIDB4ZmYpOworCQkJYnAtPmRldi0+ZGV2X2FkZHJbNF0gPSAodTgpKHZhbCA+PiA4ICAmIDB4ZmYpOworCQkJYnAtPmRldi0+ZGV2X2FkZHJbNV0gPSAodTgpKHZhbCAmIDB4ZmYpOworCQkJbWVtY3B5KGJwLT5saW5rX3BhcmFtcy5tYWNfYWRkciwgYnAtPmRldi0+ZGV2X2FkZHIsCisJCQkgICAgICAgRVRIX0FMRU4pOworCQkJbWVtY3B5KGJwLT5kZXYtPnBlcm1fYWRkciwgYnAtPmRldi0+ZGV2X2FkZHIsCisJCQkgICAgICAgRVRIX0FMRU4pOworCQl9CisKKwkJcmV0dXJuIHJjOworCX0KKworCWlmIChCUF9OT01DUChicCkpIHsKKwkJLyogb25seSBzdXBwb3NlZCB0byBoYXBwZW4gb24gZW11bGF0aW9uL0ZQR0EgKi8KKwkJQk5YMlhfRVJSKCJ3YXJuaW5nIHJlbmRvbSBNQUMgd29ya2Fyb3VuZCBhY3RpdmVcbiIpOworCQlyYW5kb21fZXRoZXJfYWRkcihicC0+ZGV2LT5kZXZfYWRkcik7CisJCW1lbWNweShicC0+ZGV2LT5wZXJtX2FkZHIsIGJwLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X2JwKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwlpbnQgcmM7CisKKwlpZiAobm9tY3ApCisJCWJwLT5mbGFncyB8PSBOT19NQ1BfRkxBRzsKKworCW11dGV4X2luaXQoJmJwLT5wb3J0LnBoeV9tdXRleCk7CisKKwlJTklUX1dPUksoJmJwLT5zcF90YXNrLCBibngyeF9zcF90YXNrKTsKKwlJTklUX1dPUksoJmJwLT5yZXNldF90YXNrLCBibngyeF9yZXNldF90YXNrKTsKKworCXJjID0gYm54MnhfZ2V0X2h3aW5mbyhicCk7CisKKwkvKiBuZWVkIHRvIHJlc2V0IGNoaXAgaWYgdW5kaSB3YXMgYWN0aXZlICovCisJaWYgKCFCUF9OT01DUChicCkpCisJCWJueDJ4X3VuZGlfdW5sb2FkKGJwKTsKKworCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRlBHQSBkZXRlY3RlZFxuIik7CisKKwlpZiAoQlBfTk9NQ1AoYnApICYmIChmdW5jID09IDApKQorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCSAgICAgICAiTUNQIGRpc2FibGVkLCBtdXN0IGxvYWQgZGV2aWNlcyBpbiBvcmRlciFcbiIpOworCisJLyogU2V0IFRQQSBmbGFncyAqLworCWlmIChkaXNhYmxlX3RwYSkgeworCQlicC0+ZmxhZ3MgJj0gflRQQV9FTkFCTEVfRkxBRzsKKwkJYnAtPmRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOworCX0gZWxzZSB7CisJCWJwLT5mbGFncyB8PSBUUEFfRU5BQkxFX0ZMQUc7CisJCWJwLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCX0KKworCisJYnAtPnR4X3Jpbmdfc2l6ZSA9IE1BWF9UWF9BVkFJTDsKKwlicC0+cnhfcmluZ19zaXplID0gTUFYX1JYX0FWQUlMOworCisJYnAtPnJ4X2NzdW0gPSAxOworCWJwLT5yeF9vZmZzZXQgPSAwOworCisJYnAtPnR4X3RpY2tzID0gNTA7CisJYnAtPnJ4X3RpY2tzID0gMjU7CisKKwlicC0+c3RhdHNfdGlja3MgPSAxMDAwMDAwICYgMHhmZmZmMDA7CisKKwlicC0+dGltZXJfaW50ZXJ2YWwgPSAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgPyA1KkhaIDogSFopOworCWJwLT5jdXJyZW50X2ludGVydmFsID0gKHBvbGwgPyBwb2xsIDogYnAtPnRpbWVyX2ludGVydmFsKTsKKworCWluaXRfdGltZXIoJmJwLT50aW1lcik7CisJYnAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgYnAtPmN1cnJlbnRfaW50ZXJ2YWw7CisJYnAtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYnA7CisJYnAtPnRpbWVyLmZ1bmN0aW9uID0gYm54MnhfdGltZXI7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBldGh0b29sIHNlcnZpY2UgZnVuY3Rpb25zCisgKi8KKworLyogQWxsIGV0aHRvb2wgZnVuY3Rpb25zIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLworCitzdGF0aWMgaW50IGJueDJ4X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWNtZC0+c3VwcG9ydGVkID0gYnAtPnBvcnQuc3VwcG9ydGVkOworCWNtZC0+YWR2ZXJ0aXNpbmcgPSBicC0+cG9ydC5hZHZlcnRpc2luZzsKKworCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJY21kLT5zcGVlZCA9IGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZDsKKwkJY21kLT5kdXBsZXggPSBicC0+bGlua192YXJzLmR1cGxleDsKKwl9IGVsc2UgeworCQljbWQtPnNwZWVkID0gYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkOworCQljbWQtPmR1cGxleCA9IGJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4OworCX0KKwlpZiAoSVNfRTFITUYoYnApKSB7CisJCXUxNiB2bl9tYXhfcmF0ZTsKKworCQl2bl9tYXhfcmF0ZSA9ICgoYnAtPm1mX2NvbmZpZyAmIEZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLKSA+PgorCQkJCUZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVCkgKiAxMDA7CisJCWlmICh2bl9tYXhfcmF0ZSA8IGNtZC0+c3BlZWQpCisJCQljbWQtPnNwZWVkID0gdm5fbWF4X3JhdGU7CisJfQorCisJaWYgKGJwLT5saW5rX3BhcmFtcy5zd2l0Y2hfY2ZnID09IFNXSVRDSF9DRkdfMTBHKSB7CisJCXUzMiBleHRfcGh5X3R5cGUgPQorCQkJWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKworCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CisJCQlCTlgyWF9FUlIoIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWQgMHgleFxuIiwKKwkJCQkgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJICAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlCisJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisKKwljbWQtPnBoeV9hZGRyZXNzID0gYnAtPnBvcnQucGh5X2FkZHI7CisJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisKKwlpZiAoYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQorCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwllbHNlCisJCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKworCWNtZC0+bWF4dHhwa3QgPSAwOworCWNtZC0+bWF4cnhwa3QgPSAwOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJldGh0b29sX2NtZDogY21kICVkXG4iCisJICAgRFBfTEVWRUwgIiAgc3VwcG9ydGVkIDB4JXggIGFkdmVydGlzaW5nIDB4JXggIHNwZWVkICVkXG4iCisJICAgRFBfTEVWRUwgIiAgZHVwbGV4ICVkICBwb3J0ICVkICBwaHlfYWRkcmVzcyAlZCAgdHJhbnNjZWl2ZXIgJWRcbiIKKwkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICBtYXh0eHBrdCAlZCAgbWF4cnhwa3QgJWRcbiIsCisJICAgY21kLT5jbWQsIGNtZC0+c3VwcG9ydGVkLCBjbWQtPmFkdmVydGlzaW5nLCBjbWQtPnNwZWVkLAorCSAgIGNtZC0+ZHVwbGV4LCBjbWQtPnBvcnQsIGNtZC0+cGh5X2FkZHJlc3MsIGNtZC0+dHJhbnNjZWl2ZXIsCisJICAgY21kLT5hdXRvbmVnLCBjbWQtPm1heHR4cGt0LCBjbWQtPm1heHJ4cGt0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgYWR2ZXJ0aXNpbmc7CisKKwlpZiAoSVNfRTFITUYoYnApKQorCQlyZXR1cm4gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAiZXRodG9vbF9jbWQ6IGNtZCAlZFxuIgorCSAgIERQX0xFVkVMICIgIHN1cHBvcnRlZCAweCV4ICBhZHZlcnRpc2luZyAweCV4ICBzcGVlZCAlZFxuIgorCSAgIERQX0xFVkVMICIgIGR1cGxleCAlZCAgcG9ydCAlZCAgcGh5X2FkZHJlc3MgJWQgIHRyYW5zY2VpdmVyICVkXG4iCisJICAgRFBfTEVWRUwgIiAgYXV0b25lZyAlZCAgbWF4dHhwa3QgJWQgIG1heHJ4cGt0ICVkXG4iLAorCSAgIGNtZC0+Y21kLCBjbWQtPnN1cHBvcnRlZCwgY21kLT5hZHZlcnRpc2luZywgY21kLT5zcGVlZCwKKwkgICBjbWQtPmR1cGxleCwgY21kLT5wb3J0LCBjbWQtPnBoeV9hZGRyZXNzLCBjbWQtPnRyYW5zY2VpdmVyLAorCSAgIGNtZC0+YXV0b25lZywgY21kLT5tYXh0eHBrdCwgY21kLT5tYXhyeHBrdCk7CisKKwlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CisJCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9BdXRvbmVnKSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBdXRvbmVnIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKiBhZHZlcnRpc2UgdGhlIHJlcXVlc3RlZCBzcGVlZCBhbmQgZHVwbGV4IGlmIHN1cHBvcnRlZCAqLworCQljbWQtPmFkdmVydGlzaW5nICY9IGJwLT5wb3J0LnN1cHBvcnRlZDsKKworCQlicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPSBTUEVFRF9BVVRPX05FRzsKKwkJYnAtPmxpbmtfcGFyYW1zLnJlcV9kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfQXV0b25lZyB8CisJCQkJCSBjbWQtPmFkdmVydGlzaW5nKTsKKworCX0gZWxzZSB7IC8qIGZvcmNlZCBzcGVlZCAqLworCQkvKiBhZHZlcnRpc2UgdGhlIHJlcXVlc3RlZCBzcGVlZCBhbmQgZHVwbGV4IGlmIHN1cHBvcnRlZCAqLworCQlzd2l0Y2ggKGNtZC0+c3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDoKKwkJCWlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgeworCQkJCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmCisJCQkJICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCkpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAgICIxME0gZnVsbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCisJCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgQURWRVJUSVNFRF9UUCk7CisJCQl9IGVsc2UgeworCQkJCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmCisJCQkJICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfSGFsZikpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAgICIxME0gaGFsZiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCisJCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgQURWRVJUSVNFRF9UUCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNQRUVEXzEwMDoKKwkJCWlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgeworCQkJCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmCisJCQkJCQlTVVBQT1JURURfMTAwYmFzZVRfRnVsbCkpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAgICIxMDBNIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKworCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCEoYnAtPnBvcnQuc3VwcG9ydGVkICYKKwkJCQkJCVNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmKSkgeworCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJICAgIjEwME0gaGFsZiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCisJCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIEFEVkVSVElTRURfVFApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVFRF8xMDAwOgorCQkJaWYgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxRyBoYWxmIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoIShicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxRyBmdWxsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlhZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkgICAgICAgQURWRVJUSVNFRF9UUCk7CisJCQlicmVhazsKKworCQljYXNlIFNQRUVEXzI1MDA6CisJCQlpZiAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgICAiMi41RyBoYWxmIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoIShicC0+cG9ydC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwpKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICAgIjIuNUcgZnVsbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbCB8CisJCQkJICAgICAgIEFEVkVSVElTRURfVFApOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVFRF8xMDAwMDoKKwkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiMTBHIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWlmICghKGJwLT5wb3J0LnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwpKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxMEcgZnVsbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCSAgICAgICBBRFZFUlRJU0VEX0ZJQlJFKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlVuc3VwcG9ydGVkIHNwZWVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID0gY21kLT5zcGVlZDsKKwkJYnAtPmxpbmtfcGFyYW1zLnJlcV9kdXBsZXggPSBjbWQtPmR1cGxleDsKKwkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgPSBhZHZlcnRpc2luZzsKKwl9CisKKwlEUChORVRJRl9NU0dfTElOSywgInJlcV9saW5lX3NwZWVkICVkXG4iCisJICAgRFBfTEVWRUwgIiAgcmVxX2R1cGxleCAlZCAgYWR2ZXJ0aXNpbmcgMHgleFxuIiwKKwkgICBicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQsIGJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4LAorCSAgIGJwLT5wb3J0LmFkdmVydGlzaW5nKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKKwkJYm54MnhfbGlua19zZXQoYnApOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFBIWV9GV19WRVJfTEVOCQkJMTAKKworc3RhdGljIHZvaWQgYm54MnhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJY2hhciBwaHlfZndfdmVyW1BIWV9GV19WRVJfTEVOXTsKKworCXN0cmNweShpbmZvLT5kcml2ZXIsIERSVl9NT0RVTEVfTkFNRSk7CisJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9NT0RVTEVfVkVSU0lPTik7CisKKwlwaHlfZndfdmVyWzBdID0gJ1wwJzsKKwlpZiAoYnAtPnBvcnQucG1mKSB7CisJCWJueDJ4X3BoeV9od19sb2NrKGJwKTsKKwkJYm54MnhfZ2V0X2V4dF9waHlfZndfdmVyc2lvbigmYnAtPmxpbmtfcGFyYW1zLAorCQkJCQkgICAgIChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfQ0xPU0VEKSwKKwkJCQkJICAgICBwaHlfZndfdmVyLCBQSFlfRldfVkVSX0xFTik7CisJCWJueDJ4X3BoeV9od191bmxvY2soYnApOworCX0KKworCXNucHJpbnRmKGluZm8tPmZ3X3ZlcnNpb24sIDMyLCAiJWQuJWQuJWQ6JWQgQkM6JXglcyVzIiwKKwkJIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04sIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04sCisJCSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OLAorCQkgQkNNXzU3MTBfRldfQ09NUElMRV9GTEFHUywgYnAtPmNvbW1vbi5iY192ZXIsCisJCSAoKHBoeV9md192ZXJbMF0gIT0gJ1wwJyk/ICIgUEhZOiI6IiIpLCBwaHlfZndfdmVyKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGJwLT5wZGV2KSk7CisJaW5mby0+bl9zdGF0cyA9IEJOWDJYX05VTV9TVEFUUzsKKwlpbmZvLT50ZXN0aW5mb19sZW4gPSBCTlgyWF9OVU1fVEVTVFM7CisJaW5mby0+ZWVkdW1wX2xlbiA9IGJwLT5jb21tb24uZmxhc2hfc2l6ZTsKKwlpbmZvLT5yZWdkdW1wX2xlbiA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSB7CisJCXdvbC0+c3VwcG9ydGVkID0gMDsKKwkJd29sLT53b2xvcHRzID0gMDsKKwl9IGVsc2UgeworCQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUM7CisJCWlmIChicC0+d29sKQorCQkJd29sLT53b2xvcHRzID0gV0FLRV9NQUdJQzsKKwkJZWxzZQorCQkJd29sLT53b2xvcHRzID0gMDsKKwl9CisJbWVtc2V0KCZ3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpIHsKKwkJaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYnAtPndvbCA9IDE7CisJfSBlbHNlCisJCWJwLT53b2wgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYm54MnhfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gYnAtPm1zZ2xldmVsOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGxldmVsKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCWJwLT5tc2dsZXZlbCA9IGxldmVsOworfQorCitzdGF0aWMgaW50IGJueDJ4X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghYnAtPnBvcnQucG1mKQorCQlyZXR1cm4gMDsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKKwkJYm54MnhfbGlua19zZXQoYnApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gYnAtPmNvbW1vbi5mbGFzaF9zaXplOworfQorCitzdGF0aWMgaW50IGJueDJ4X2FjcXVpcmVfbnZyYW1fbG9jayhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGNvdW50LCBpOworCXUzMiB2YWwgPSAwOworCisJLyogYWRqdXN0IHRpbWVvdXQgZm9yIGVtdWxhdGlvbi9GUEdBICovCisJY291bnQgPSBOVlJBTV9USU1FT1VUX0NPVU5UOworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJY291bnQgKj0gMTAwOworCisJLyogcmVxdWVzdCBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCisJUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX1NXX0FSQiwKKwkgICAgICAgKE1DUFJfTlZNX1NXX0FSQl9BUkJfUkVRX1NFVDEgPDwgcG9ydCkpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50KjEwOyBpKyspIHsKKwkJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX1NXX0FSQik7CisJCWlmICh2YWwgJiAoTUNQUl9OVk1fU1dfQVJCX0FSQl9BUkIxIDw8IHBvcnQpKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDUpOworCX0KKworCWlmICghKHZhbCAmIChNQ1BSX05WTV9TV19BUkJfQVJCX0FSQjEgPDwgcG9ydCkpKSB7CisJCURQKEJOWDJYX01TR19OVk0sICJjYW5ub3QgZ2V0IGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2VcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3JlbGVhc2VfbnZyYW1fbG9jayhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGNvdW50LCBpOworCXUzMiB2YWwgPSAwOworCisJLyogYWRqdXN0IHRpbWVvdXQgZm9yIGVtdWxhdGlvbi9GUEdBICovCisJY291bnQgPSBOVlJBTV9USU1FT1VUX0NPVU5UOworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJY291bnQgKj0gMTAwOworCisJLyogcmVsaW5xdWlzaCBudnJhbSBpbnRlcmZhY2UgKi8KKwlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fU1dfQVJCLAorCSAgICAgICAoTUNQUl9OVk1fU1dfQVJCX0FSQl9SRVFfQ0xSMSA8PCBwb3J0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQqMTA7IGkrKykgeworCQl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fU1dfQVJCKTsKKwkJaWYgKCEodmFsICYgKE1DUFJfTlZNX1NXX0FSQl9BUkJfQVJCMSA8PCBwb3J0KSkpCisJCQlicmVhazsKKworCQl1ZGVsYXkoNSk7CisJfQorCisJaWYgKHZhbCAmIChNQ1BSX05WTV9TV19BUkJfQVJCX0FSQjEgPDwgcG9ydCkpIHsKKwkJRFAoQk5YMlhfTVNHX05WTSwgImNhbm5vdCBmcmVlIGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2VcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBibngyeF9lbmFibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbDsKKworCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9BQ0NFU1NfRU5BQkxFKTsKKworCS8qIGVuYWJsZSBib3RoIGJpdHMsIGV2ZW4gb24gcmVhZCAqLworCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9BQ0NFU1NfRU5BQkxFLAorCSAgICAgICAodmFsIHwgTUNQUl9OVk1fQUNDRVNTX0VOQUJMRV9FTiB8CisJCSAgICAgIE1DUFJfTlZNX0FDQ0VTU19FTkFCTEVfV1JfRU4pKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZGlzYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0FDQ0VTU19FTkFCTEUpOworCisJLyogZGlzYWJsZSBib3RoIGJpdHMsIGV2ZW4gYWZ0ZXIgcmVhZCAqLworCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9BQ0NFU1NfRU5BQkxFLAorCSAgICAgICAodmFsICYgfihNQ1BSX05WTV9BQ0NFU1NfRU5BQkxFX0VOIHwKKwkJCU1DUFJfTlZNX0FDQ0VTU19FTkFCTEVfV1JfRU4pKSk7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfbnZyYW1fcmVhZF9kd29yZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCB1MzIgKnJldF92YWwsCisJCQkJICB1MzIgY21kX2ZsYWdzKQoreworCWludCBjb3VudCwgaSwgcmM7CisJdTMyIHZhbDsKKworCS8qIGJ1aWxkIHRoZSBjb21tYW5kIHdvcmQgKi8KKwljbWRfZmxhZ3MgfD0gTUNQUl9OVk1fQ09NTUFORF9ET0lUOworCisJLyogbmVlZCB0byBjbGVhciBET05FIGJpdCBzZXBhcmF0ZWx5ICovCisJUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NPTU1BTkQsIE1DUFJfTlZNX0NPTU1BTkRfRE9ORSk7CisKKwkvKiBhZGRyZXNzIG9mIHRoZSBOVlJBTSB0byByZWFkIGZyb20gKi8KKwlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQUREUiwKKwkgICAgICAgKG9mZnNldCAmIE1DUFJfTlZNX0FERFJfTlZNX0FERFJfVkFMVUUpKTsKKworCS8qIGlzc3VlIGEgcmVhZCBjb21tYW5kICovCisJUkVHX1dSKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NPTU1BTkQsIGNtZF9mbGFncyk7CisKKwkvKiBhZGp1c3QgdGltZW91dCBmb3IgZW11bGF0aW9uL0ZQR0EgKi8KKwljb3VudCA9IE5WUkFNX1RJTUVPVVRfQ09VTlQ7CisJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQorCQljb3VudCAqPSAxMDA7CisKKwkvKiB3YWl0IGZvciBjb21wbGV0aW9uICovCisJKnJldF92YWwgPSAwOworCXJjID0gLUVCVVNZOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXVkZWxheSg1KTsKKwkJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NPTU1BTkQpOworCisJCWlmICh2YWwgJiBNQ1BSX05WTV9DT01NQU5EX0RPTkUpIHsKKwkJCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9SRUFEKTsKKwkJCS8qIHdlIHJlYWQgbnZyYW0gZGF0YSBpbiBjcHUgb3JkZXIKKwkJCSAqIGJ1dCBldGh0b29sIHNlZXMgaXQgYXMgYW4gYXJyYXkgb2YgYnl0ZXMKKwkJCSAqIGNvbnZlcnRpbmcgdG8gYmlnLWVuZGlhbiB3aWxsIGRvIHRoZSB3b3JrICovCisJCQl2YWwgPSBjcHVfdG9fYmUzMih2YWwpOworCQkJKnJldF92YWwgPSB2YWw7CisJCQlyYyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBibngyeF9udnJhbV9yZWFkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHU4ICpyZXRfYnVmLAorCQkJICAgIGludCBidWZfc2l6ZSkKK3sKKwlpbnQgcmM7CisJdTMyIGNtZF9mbGFnczsKKwl1MzIgdmFsOworCisJaWYgKChvZmZzZXQgJiAweDAzKSB8fCAoYnVmX3NpemUgJiAweDAzKSB8fCAoYnVmX3NpemUgPT0gMCkpIHsKKwkJRFAoQk5YMlhfTVNHX05WTSwKKwkJICAgIkludmFsaWQgcGFyYW1ldGVyOiBvZmZzZXQgMHgleCAgYnVmX3NpemUgMHgleFxuIiwKKwkJICAgb2Zmc2V0LCBidWZfc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChvZmZzZXQgKyBidWZfc2l6ZSA+IGJwLT5jb21tb24uZmxhc2hfc2l6ZSkgeworCQlEUChCTlgyWF9NU0dfTlZNLCAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAoMHgleCkgKyIKKwkJCQkgICIgYnVmX3NpemUgKDB4JXgpID4gZmxhc2hfc2l6ZSAoMHgleClcbiIsCisJCSAgIG9mZnNldCwgYnVmX3NpemUsIGJwLT5jb21tb24uZmxhc2hfc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlcXVlc3QgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLworCXJjID0gYm54MnhfYWNxdWlyZV9udnJhbV9sb2NrKGJwKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIGVuYWJsZSBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCisJYm54MnhfZW5hYmxlX252cmFtX2FjY2VzcyhicCk7CisKKwkvKiByZWFkIHRoZSBmaXJzdCB3b3JkKHMpICovCisJY21kX2ZsYWdzID0gTUNQUl9OVk1fQ09NTUFORF9GSVJTVDsKKwl3aGlsZSAoKGJ1Zl9zaXplID4gc2l6ZW9mKHUzMikpICYmIChyYyA9PSAwKSkgeworCQlyYyA9IGJueDJ4X252cmFtX3JlYWRfZHdvcmQoYnAsIG9mZnNldCwgJnZhbCwgY21kX2ZsYWdzKTsKKwkJbWVtY3B5KHJldF9idWYsICZ2YWwsIDQpOworCisJCS8qIGFkdmFuY2UgdG8gdGhlIG5leHQgZHdvcmQgKi8KKwkJb2Zmc2V0ICs9IHNpemVvZih1MzIpOworCQlyZXRfYnVmICs9IHNpemVvZih1MzIpOworCQlidWZfc2l6ZSAtPSBzaXplb2YodTMyKTsKKwkJY21kX2ZsYWdzID0gMDsKKwl9CisKKwlpZiAocmMgPT0gMCkgeworCQljbWRfZmxhZ3MgfD0gTUNQUl9OVk1fQ09NTUFORF9MQVNUOworCQlyYyA9IGJueDJ4X252cmFtX3JlYWRfZHdvcmQoYnAsIG9mZnNldCwgJnZhbCwgY21kX2ZsYWdzKTsKKwkJbWVtY3B5KHJldF9idWYsICZ2YWwsIDQpOworCX0KKworCS8qIGRpc2FibGUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLworCWJueDJ4X2Rpc2FibGVfbnZyYW1fYWNjZXNzKGJwKTsKKwlibngyeF9yZWxlYXNlX252cmFtX2xvY2soYnApOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGJueDJ4X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmVlYnVmKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByYzsKKworCURQKEJOWDJYX01TR19OVk0sICJldGh0b29sX2VlcHJvbTogY21kICVkXG4iCisJICAgRFBfTEVWRUwgIiAgbWFnaWMgMHgleCAgb2Zmc2V0IDB4JXggKCVkKSAgbGVuIDB4JXggKCVkKVxuIiwKKwkgICBlZXByb20tPmNtZCwgZWVwcm9tLT5tYWdpYywgZWVwcm9tLT5vZmZzZXQsIGVlcHJvbS0+b2Zmc2V0LAorCSAgIGVlcHJvbS0+bGVuLCBlZXByb20tPmxlbik7CisKKwkvKiBwYXJhbWV0ZXJzIGFscmVhZHkgdmFsaWRhdGVkIGluIGV0aHRvb2xfZ2V0X2VlcHJvbSAqLworCisJcmMgPSBibngyeF9udnJhbV9yZWFkKGJwLCBlZXByb20tPm9mZnNldCwgZWVidWYsIGVlcHJvbS0+bGVuKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBibngyeF9udnJhbV93cml0ZV9kd29yZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCB1MzIgdmFsLAorCQkJCSAgIHUzMiBjbWRfZmxhZ3MpCit7CisJaW50IGNvdW50LCBpLCByYzsKKworCS8qIGJ1aWxkIHRoZSBjb21tYW5kIHdvcmQgKi8KKwljbWRfZmxhZ3MgfD0gTUNQUl9OVk1fQ09NTUFORF9ET0lUIHwgTUNQUl9OVk1fQ09NTUFORF9XUjsKKworCS8qIG5lZWQgdG8gY2xlYXIgRE9ORSBiaXQgc2VwYXJhdGVseSAqLworCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9DT01NQU5ELCBNQ1BSX05WTV9DT01NQU5EX0RPTkUpOworCisJLyogd3JpdGUgdGhlIGRhdGEgKi8KKwlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fV1JJVEUsIHZhbCk7CisKKwkvKiBhZGRyZXNzIG9mIHRoZSBOVlJBTSB0byB3cml0ZSB0byAqLworCVJFR19XUihicCwgTUNQX1JFR19NQ1BSX05WTV9BRERSLAorCSAgICAgICAob2Zmc2V0ICYgTUNQUl9OVk1fQUREUl9OVk1fQUREUl9WQUxVRSkpOworCisJLyogaXNzdWUgdGhlIHdyaXRlIGNvbW1hbmQgKi8KKwlSRUdfV1IoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ09NTUFORCwgY21kX2ZsYWdzKTsKKworCS8qIGFkanVzdCB0aW1lb3V0IGZvciBlbXVsYXRpb24vRlBHQSAqLworCWNvdW50ID0gTlZSQU1fVElNRU9VVF9DT1VOVDsKKwlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCisJCWNvdW50ICo9IDEwMDsKKworCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwlyYyA9IC1FQlVTWTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQl1ZGVsYXkoNSk7CisJCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9DT01NQU5EKTsKKwkJaWYgKHZhbCAmIE1DUFJfTlZNX0NPTU1BTkRfRE9ORSkgeworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgQllURV9PRkZTRVQob2Zmc2V0KQkJKDggKiAob2Zmc2V0ICYgMHgwMykpCisKK3N0YXRpYyBpbnQgYm54MnhfbnZyYW1fd3JpdGUxKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHU4ICpkYXRhX2J1ZiwKKwkJCSAgICAgIGludCBidWZfc2l6ZSkKK3sKKwlpbnQgcmM7CisJdTMyIGNtZF9mbGFnczsKKwl1MzIgYWxpZ25fb2Zmc2V0OworCXUzMiB2YWw7CisKKwlpZiAob2Zmc2V0ICsgYnVmX3NpemUgPiBicC0+Y29tbW9uLmZsYXNoX3NpemUpIHsKKwkJRFAoQk5YMlhfTVNHX05WTSwgIkludmFsaWQgcGFyYW1ldGVyOiBvZmZzZXQgKDB4JXgpICsiCisJCQkJICAiIGJ1Zl9zaXplICgweCV4KSA+IGZsYXNoX3NpemUgKDB4JXgpXG4iLAorCQkgICBvZmZzZXQsIGJ1Zl9zaXplLCBicC0+Y29tbW9uLmZsYXNoX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiByZXF1ZXN0IGFjY2VzcyB0byBudnJhbSBpbnRlcmZhY2UgKi8KKwlyYyA9IGJueDJ4X2FjcXVpcmVfbnZyYW1fbG9jayhicCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBlbmFibGUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLworCWJueDJ4X2VuYWJsZV9udnJhbV9hY2Nlc3MoYnApOworCisJY21kX2ZsYWdzID0gKE1DUFJfTlZNX0NPTU1BTkRfRklSU1QgfCBNQ1BSX05WTV9DT01NQU5EX0xBU1QpOworCWFsaWduX29mZnNldCA9IChvZmZzZXQgJiB+MHgwMyk7CisJcmMgPSBibngyeF9udnJhbV9yZWFkX2R3b3JkKGJwLCBhbGlnbl9vZmZzZXQsICZ2YWwsIGNtZF9mbGFncyk7CisKKwlpZiAocmMgPT0gMCkgeworCQl2YWwgJj0gfigweGZmIDw8IEJZVEVfT0ZGU0VUKG9mZnNldCkpOworCQl2YWwgfD0gKCpkYXRhX2J1ZiA8PCBCWVRFX09GRlNFVChvZmZzZXQpKTsKKworCQkvKiBudnJhbSBkYXRhIGlzIHJldHVybmVkIGFzIGFuIGFycmF5IG9mIGJ5dGVzCisJCSAqIGNvbnZlcnQgaXQgYmFjayB0byBjcHUgb3JkZXIgKi8KKwkJdmFsID0gYmUzMl90b19jcHUodmFsKTsKKworCQlyYyA9IGJueDJ4X252cmFtX3dyaXRlX2R3b3JkKGJwLCBhbGlnbl9vZmZzZXQsIHZhbCwKKwkJCQkJICAgICBjbWRfZmxhZ3MpOworCX0KKworCS8qIGRpc2FibGUgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLworCWJueDJ4X2Rpc2FibGVfbnZyYW1fYWNjZXNzKGJwKTsKKwlibngyeF9yZWxlYXNlX252cmFtX2xvY2soYnApOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGJueDJ4X252cmFtX3dyaXRlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHU4ICpkYXRhX2J1ZiwKKwkJCSAgICAgaW50IGJ1Zl9zaXplKQoreworCWludCByYzsKKwl1MzIgY21kX2ZsYWdzOworCXUzMiB2YWw7CisJdTMyIHdyaXR0ZW5fc29fZmFyOworCisJaWYgKGJ1Zl9zaXplID09IDEpCS8qIGV0aHRvb2wgKi8KKwkJcmV0dXJuIGJueDJ4X252cmFtX3dyaXRlMShicCwgb2Zmc2V0LCBkYXRhX2J1ZiwgYnVmX3NpemUpOworCisJaWYgKChvZmZzZXQgJiAweDAzKSB8fCAoYnVmX3NpemUgJiAweDAzKSB8fCAoYnVmX3NpemUgPT0gMCkpIHsKKwkJRFAoQk5YMlhfTVNHX05WTSwKKwkJICAgIkludmFsaWQgcGFyYW1ldGVyOiBvZmZzZXQgMHgleCAgYnVmX3NpemUgMHgleFxuIiwKKwkJICAgb2Zmc2V0LCBidWZfc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChvZmZzZXQgKyBidWZfc2l6ZSA+IGJwLT5jb21tb24uZmxhc2hfc2l6ZSkgeworCQlEUChCTlgyWF9NU0dfTlZNLCAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAoMHgleCkgKyIKKwkJCQkgICIgYnVmX3NpemUgKDB4JXgpID4gZmxhc2hfc2l6ZSAoMHgleClcbiIsCisJCSAgIG9mZnNldCwgYnVmX3NpemUsIGJwLT5jb21tb24uZmxhc2hfc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlcXVlc3QgYWNjZXNzIHRvIG52cmFtIGludGVyZmFjZSAqLworCXJjID0gYm54MnhfYWNxdWlyZV9udnJhbV9sb2NrKGJwKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIGVuYWJsZSBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCisJYm54MnhfZW5hYmxlX252cmFtX2FjY2VzcyhicCk7CisKKwl3cml0dGVuX3NvX2ZhciA9IDA7CisJY21kX2ZsYWdzID0gTUNQUl9OVk1fQ09NTUFORF9GSVJTVDsKKwl3aGlsZSAoKHdyaXR0ZW5fc29fZmFyIDwgYnVmX3NpemUpICYmIChyYyA9PSAwKSkgeworCQlpZiAod3JpdHRlbl9zb19mYXIgPT0gKGJ1Zl9zaXplIC0gc2l6ZW9mKHUzMikpKQorCQkJY21kX2ZsYWdzIHw9IE1DUFJfTlZNX0NPTU1BTkRfTEFTVDsKKwkJZWxzZSBpZiAoKChvZmZzZXQgKyA0KSAlIE5WUkFNX1BBR0VfU0laRSkgPT0gMCkKKwkJCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0xBU1Q7CisJCWVsc2UgaWYgKChvZmZzZXQgJSBOVlJBTV9QQUdFX1NJWkUpID09IDApCisJCQljbWRfZmxhZ3MgfD0gTUNQUl9OVk1fQ09NTUFORF9GSVJTVDsKKworCQltZW1jcHkoJnZhbCwgZGF0YV9idWYsIDQpOworCisJCXJjID0gYm54MnhfbnZyYW1fd3JpdGVfZHdvcmQoYnAsIG9mZnNldCwgdmFsLCBjbWRfZmxhZ3MpOworCisJCS8qIGFkdmFuY2UgdG8gdGhlIG5leHQgZHdvcmQgKi8KKwkJb2Zmc2V0ICs9IHNpemVvZih1MzIpOworCQlkYXRhX2J1ZiArPSBzaXplb2YodTMyKTsKKwkJd3JpdHRlbl9zb19mYXIgKz0gc2l6ZW9mKHUzMik7CisJCWNtZF9mbGFncyA9IDA7CisJfQorCisJLyogZGlzYWJsZSBhY2Nlc3MgdG8gbnZyYW0gaW50ZXJmYWNlICovCisJYm54MnhfZGlzYWJsZV9udnJhbV9hY2Nlc3MoYnApOworCWJueDJ4X3JlbGVhc2VfbnZyYW1fbG9jayhicCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZWVidWYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJjOworCisJRFAoQk5YMlhfTVNHX05WTSwgImV0aHRvb2xfZWVwcm9tOiBjbWQgJWRcbiIKKwkgICBEUF9MRVZFTCAiICBtYWdpYyAweCV4ICBvZmZzZXQgMHgleCAoJWQpICBsZW4gMHgleCAoJWQpXG4iLAorCSAgIGVlcHJvbS0+Y21kLCBlZXByb20tPm1hZ2ljLCBlZXByb20tPm9mZnNldCwgZWVwcm9tLT5vZmZzZXQsCisJICAgZWVwcm9tLT5sZW4sIGVlcHJvbS0+bGVuKTsKKworCS8qIHBhcmFtZXRlcnMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gZXRodG9vbF9zZXRfZWVwcm9tICovCisKKwkvKiBJZiB0aGUgbWFnaWMgbnVtYmVyIGlzIFBIWSAoMHgwMDUwNDg1OSkgdXBncmFkZSB0aGUgUEhZIEZXICovCisJaWYgKGVlcHJvbS0+bWFnaWMgPT0gMHgwMDUwNDg1OSkKKwkJaWYgKGJwLT5wb3J0LnBtZikgeworCisJCQlibngyeF9waHlfaHdfbG9jayhicCk7CisJCQlyYyA9IGJueDJ4X2ZsYXNoX2Rvd25sb2FkKGJwLCBCUF9QT1JUKGJwKSwKKwkJCQkJICAgICBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcsCisJCQkJCSAgICAgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9DTE9TRUQpLAorCQkJCQkgICAgIGVlYnVmLCBlZXByb20tPmxlbik7CisJCQlpZiAoKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSB8fAorCQkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfRElTQUJMRUQpKSB7CisJCQkJcmMgfD0gYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLAorCQkJCQkJICAgICAgICZicC0+bGlua192YXJzKTsKKwkJCQlyYyB8PSBibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLAorCQkJCQkJICAgICAmYnAtPmxpbmtfdmFycyk7CisJCQl9CisJCQlibngyeF9waHlfaHdfdW5sb2NrKGJwKTsKKworCQl9IGVsc2UgLyogT25seSB0aGUgUE1GIGNhbiBhY2Nlc3MgdGhlIFBIWSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZQorCQlyYyA9IGJueDJ4X252cmFtX3dyaXRlKGJwLCBlZXByb20tPm9mZnNldCwgZWVidWYsIGVlcHJvbS0+bGVuKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBibngyeF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbWVtc2V0KGNvYWwsIDAsIHNpemVvZihzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSkpOworCisJY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgPSBicC0+cnhfdGlja3M7CisJY29hbC0+dHhfY29hbGVzY2VfdXNlY3MgPSBicC0+dHhfdGlja3M7CisJY29hbC0+c3RhdHNfYmxvY2tfY29hbGVzY2VfdXNlY3MgPSBicC0+c3RhdHNfdGlja3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJYnAtPnJ4X3RpY2tzID0gKHUxNikgY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7CisJaWYgKGJwLT5yeF90aWNrcyA+IDMwMDApCisJCWJwLT5yeF90aWNrcyA9IDMwMDA7CisKKwlicC0+dHhfdGlja3MgPSAodTE2KSBjb2FsLT50eF9jb2FsZXNjZV91c2VjczsKKwlpZiAoYnAtPnR4X3RpY2tzID4gMHgzMDAwKQorCQlicC0+dHhfdGlja3MgPSAweDMwMDA7CisKKwlicC0+c3RhdHNfdGlja3MgPSBjb2FsLT5zdGF0c19ibG9ja19jb2FsZXNjZV91c2VjczsKKwlpZiAoYnAtPnN0YXRzX3RpY2tzID4gMHhmZmZmMDApCisJCWJwLT5zdGF0c190aWNrcyA9IDB4ZmZmZjAwOworCWJwLT5zdGF0c190aWNrcyAmPSAweGZmZmYwMDsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCWJueDJ4X3VwZGF0ZV9jb2FsZXNjZShicCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGNoYW5nZWQgPSAwOworCWludCByYyA9IDA7CisKKwlpZiAoZGF0YSAmIEVUSF9GTEFHX0xSTykgeworCQlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKSB7CisJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCQkJYnAtPmZsYWdzIHw9IFRQQV9FTkFCTEVfRkxBRzsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisKKwl9IGVsc2UgaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgeworCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKKwkJYnAtPmZsYWdzICY9IH5UUEFfRU5BQkxFX0ZMQUc7CisJCWNoYW5nZWQgPSAxOworCX0KKworCWlmIChjaGFuZ2VkICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKKwkJcmMgPSBibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwllcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUlhfQVZBSUw7CisJZXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOworCWVyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisKKwllcmluZy0+cnhfcGVuZGluZyA9IGJwLT5yeF9yaW5nX3NpemU7CisJZXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IDA7CisJZXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOworCisJZXJpbmctPnR4X21heF9wZW5kaW5nID0gTUFYX1RYX0FWQUlMOworCWVyaW5nLT50eF9wZW5kaW5nID0gYnAtPnR4X3Jpbmdfc2l6ZTsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICplcmluZykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmMgPSAwOworCisJaWYgKChlcmluZy0+cnhfcGVuZGluZyA+IE1BWF9SWF9BVkFJTCkgfHwKKwkgICAgKGVyaW5nLT50eF9wZW5kaW5nID4gTUFYX1RYX0FWQUlMKSB8fAorCSAgICAoZXJpbmctPnR4X3BlbmRpbmcgPD0gTUFYX1NLQl9GUkFHUyArIDQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJwLT5yeF9yaW5nX3NpemUgPSBlcmluZy0+cnhfcGVuZGluZzsKKwlicC0+dHhfcmluZ19zaXplID0gZXJpbmctPnR4X3BlbmRpbmc7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOworCQlyYyA9IGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcGF1c2UpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwllcGF1c2UtPmF1dG9uZWcgPSAoYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPT0gRkxPV19DVFJMX0FVVE8pICYmCisJCQkgIChicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpOworCisJZXBhdXNlLT5yeF9wYXVzZSA9ICgoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBGTE9XX0NUUkxfUlgpID09CisJCQkgICAgRkxPV19DVFJMX1JYKTsKKwllcGF1c2UtPnR4X3BhdXNlID0gKChicC0+bGlua192YXJzLmZsb3dfY3RybCAmIEZMT1dfQ1RSTF9UWCkgPT0KKwkJCSAgICBGTE9XX0NUUkxfVFgpOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJldGh0b29sX3BhdXNlcGFyYW06IGNtZCAlZFxuIgorCSAgIERQX0xFVkVMICIgIGF1dG9uZWcgJWQgIHJ4X3BhdXNlICVkICB0eF9wYXVzZSAlZFxuIiwKKwkgICBlcGF1c2UtPmNtZCwgZXBhdXNlLT5hdXRvbmVnLCBlcGF1c2UtPnJ4X3BhdXNlLCBlcGF1c2UtPnR4X3BhdXNlKTsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwYXVzZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChJU19FMUhNRihicCkpCisJCXJldHVybiAwOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJldGh0b29sX3BhdXNlcGFyYW06IGNtZCAlZFxuIgorCSAgIERQX0xFVkVMICIgIGF1dG9uZWcgJWQgIHJ4X3BhdXNlICVkICB0eF9wYXVzZSAlZFxuIiwKKwkgICBlcGF1c2UtPmNtZCwgZXBhdXNlLT5hdXRvbmVnLCBlcGF1c2UtPnJ4X3BhdXNlLCBlcGF1c2UtPnR4X3BhdXNlKTsKKworCWJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsID0gRkxPV19DVFJMX0FVVE87CisKKwlpZiAoZXBhdXNlLT5yeF9wYXVzZSkKKwkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgfD0gRkxPV19DVFJMX1JYOworCisJaWYgKGVwYXVzZS0+dHhfcGF1c2UpCisJCWJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsIHw9IEZMT1dfQ1RSTF9UWDsKKworCWlmIChicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9PSBGTE9XX0NUUkxfQVVUTykKKwkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPSBGTE9XX0NUUkxfTk9ORTsKKworCWlmIChlcGF1c2UtPmF1dG9uZWcpIHsKKwkJaWYgKCEoYnAtPnBvcnQuc3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIkF1dG9uZWcgbm90IHN1cHBvcnRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpCisJCQlicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9IEZMT1dfQ1RSTF9BVVRPOworCX0KKworCURQKE5FVElGX01TR19MSU5LLAorCSAgICJyZXFfZmxvd19jdHJsIDB4JXhcbiIsIGJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKKwkJYm54MnhfbGlua19zZXQoYnApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGJueDJ4X2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gYnAtPnJ4X2NzdW07Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlicC0+cnhfY3N1bSA9IGRhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlpZiAoZGF0YSkgeworCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7CisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCX0gZWxzZSB7CisJCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7CisJCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKK30gYm54MnhfdGVzdHNfc3RyX2FycltCTlgyWF9OVU1fVEVTVFNdID0geworCXsgInJlZ2lzdGVyX3Rlc3QgKG9mZmxpbmUpIiB9LAorCXsgIm1lbW9yeV90ZXN0IChvZmZsaW5lKSIgfSwKKwl7ICJsb29wYmFja190ZXN0IChvZmZsaW5lKSIgfSwKKwl7ICJudnJhbV90ZXN0IChvbmxpbmUpIiB9LAorCXsgImludGVycnVwdF90ZXN0IChvbmxpbmUpIiB9LAorCXsgImxpbmtfdGVzdCAob25saW5lKSIgfSwKKwl7ICJpZGxlIGNoZWNrIChvbmxpbmUpIiB9LAorCXsgIk1DIGVycm9ycyAob25saW5lKSIgfQorfTsKKworc3RhdGljIGludCBibngyeF9zZWxmX3Rlc3RfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gQk5YMlhfTlVNX1RFU1RTOworfQorCitzdGF0aWMgaW50IGJueDJ4X3Rlc3RfcmVnaXN0ZXJzKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGlkeCwgaSwgcmMgPSAtRU5PREVWOworCXUzMiB3cl92YWwgPSAwOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQl1MzIgIG9mZnNldDA7CisJCXUzMiAgb2Zmc2V0MTsKKwkJdTMyICBtYXNrOworCX0gcmVnX3RibFtdID0geworLyogMCAqLwkJeyBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAsICAgICAgNCwgMHgwMDAwMDNmZiB9LAorCQl7IERPUlFfUkVHX0RCX0FERFIwLCAgICAgICAgICAgICAgICAgICA0LCAweGZmZmZmZmZmIH0sCisJCXsgSENfUkVHX0FHR19JTlRfMCwgICAgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAzZmYgfSwKKwkJeyBQQkZfUkVHX01BQ19JRjBfRU5BQkxFLCAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAorCQl7IFBCRl9SRUdfUDBfSU5JVF9DUkQsICAgICAgICAgICAgICAgICA0LCAweDAwMDAwN2ZmIH0sCisJCXsgUFJTX1JFR19DSURfUE9SVF8wLCAgICAgICAgICAgICAgICAgIDQsIDB4MDBmZmZmZmYgfSwKKwkJeyBQWFAyX1JFR19QU1dSUV9DRFUwX0wyUCwgICAgICAgICAgICAgNCwgMHgwMDBmZmZmZiB9LAorCQl7IFBYUDJfUkVHX1JRX0NEVTBfRUZJUlNUX01FTV9BRERSLCAgICA4LCAweDAwMDNmZmZmIH0sCisJCXsgUFhQMl9SRUdfUFNXUlFfVE0wX0wyUCwgICAgICAgICAgICAgIDQsIDB4MDAwZmZmZmYgfSwKKwkJeyBQWFAyX1JFR19SUV9VU0RNMF9FRklSU1RfTUVNX0FERFIsICAgOCwgMHgwMDAzZmZmZiB9LAorLyogMTAgKi8JeyBQWFAyX1JFR19QU1dSUV9UU0RNMF9MMlAsICAgICAgICAgICAgNCwgMHgwMDBmZmZmZiB9LAorCQl7IFFNX1JFR19DT05OTlVNXzAsICAgICAgICAgICAgICAgICAgICA0LCAweDAwMGZmZmZmIH0sCisJCXsgVE1fUkVHX0xJTjBfTUFYX0FDVElWRV9DSUQsICAgICAgICAgIDQsIDB4MDAwM2ZmZmYgfSwKKwkJeyBTUkNfUkVHX0tFWVJTUzBfMCwgICAgICAgICAgICAgICAgICA0MCwgMHhmZmZmZmZmZiB9LAorCQl7IFNSQ19SRUdfS0VZUlNTMF83LCAgICAgICAgICAgICAgICAgIDQwLCAweGZmZmZmZmZmIH0sCisJCXsgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDQsIDB4MDAwMDAwMDEgfSwKKwkJeyBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMCwgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMyB9LAorCQl7IFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAgICAgICA0LCAweDAwMDAwMGZmIH0sCisJCXsgTklHX1JFR19FR1JFU1NfTU5HMF9GSUZPLCAgICAgICAgICAgMjAsIDB4ZmZmZmZmZmYgfSwKKwkJeyBOSUdfUkVHX0xMSDBfVF9CSVQsICAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAorLyogMjAgKi8JeyBOSUdfUkVHX0VNQUMwX0lOX0VOLCAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAorCQl7IE5JR19SRUdfQk1BQzBfSU5fRU4sICAgICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCisJCXsgTklHX1JFR19YQ00wX09VVF9FTiwgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKKwkJeyBOSUdfUkVHX0JSQjBfT1VUX0VOLCAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAorCQl7IE5JR19SRUdfTExIMF9YQ01fTUFTSywgICAgICAgICAgICAgICA0LCAweDAwMDAwMDA3IH0sCisJCXsgTklHX1JFR19MTEgwX0FDUElfUEFUXzZfTEVOLCAgICAgICAgNjgsIDB4MDAwMDAwZmYgfSwKKwkJeyBOSUdfUkVHX0xMSDBfQUNQSV9QQVRfMF9DUkMsICAgICAgICA2OCwgMHhmZmZmZmZmZiB9LAorCQl7IE5JR19SRUdfTExIMF9ERVNUX01BQ18wXzAsICAgICAgICAgMTYwLCAweGZmZmZmZmZmIH0sCisJCXsgTklHX1JFR19MTEgwX0RFU1RfSVBfMF8xLCAgICAgICAgICAxNjAsIDB4ZmZmZmZmZmYgfSwKKwkJeyBOSUdfUkVHX0xMSDBfSVBWNF9JUFY2XzAsICAgICAgICAgIDE2MCwgMHgwMDAwMDAwMSB9LAorLyogMzAgKi8JeyBOSUdfUkVHX0xMSDBfREVTVF9VRFBfMCwgICAgICAgICAgIDE2MCwgMHgwMDAwZmZmZiB9LAorCQl7IE5JR19SRUdfTExIMF9ERVNUX1RDUF8wLCAgICAgICAgICAgMTYwLCAweDAwMDBmZmZmIH0sCisJCXsgTklHX1JFR19MTEgwX1ZMQU5fSURfMCwgICAgICAgICAgICAxNjAsIDB4MDAwMDBmZmYgfSwKKwkJeyBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCwgICAgICAgNCwgMHgwMDAwMDAwMSB9LAorCQl7IE5JR19SRUdfTEVEX0NPTlRST0xfT1ZFUlJJREVfVFJBRkZJQ19QMCwgNCwgMHgwMDAwMDAwMSB9LAorCQl7IE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCwgICAgICA0LCAweDA3ZmZmZmZmIH0sCisJCXsgTklHX1JFR19YR1hTMF9DVFJMX0VYVFJFTU9URU1ESU9TVCwgMjQsIDB4MDAwMDAwMDEgfSwKKwkJeyBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9QSFlfQUREUiwgICAgICAxNiwgMHgwMDAwMDAxZiB9LAorCisJCXsgMHhmZmZmZmZmZiwgMCwgMHgwMDAwMDAwMCB9CisJfTsKKworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJcmV0dXJuIHJjOworCisJLyogUmVwZWF0IHRoZSB0ZXN0IHR3aWNlOgorCSAgIEZpcnN0IGJ5IHdyaXRpbmcgMHgwMDAwMDAwMCwgc2Vjb25kIGJ5IHdyaXRpbmcgMHhmZmZmZmZmZiAqLworCWZvciAoaWR4ID0gMDsgaWR4IDwgMjsgaWR4KyspIHsKKworCQlzd2l0Y2ggKGlkeCkgeworCQljYXNlIDA6CisJCQl3cl92YWwgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXdyX3ZhbCA9IDB4ZmZmZmZmZmY7CisJCQlicmVhazsKKwkJfQorCisJCWZvciAoaSA9IDA7IHJlZ190YmxbaV0ub2Zmc2V0MCAhPSAweGZmZmZmZmZmOyBpKyspIHsKKwkJCXUzMiBvZmZzZXQsIG1hc2ssIHNhdmVfdmFsLCB2YWw7CisJCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCisJCQlvZmZzZXQgPSByZWdfdGJsW2ldLm9mZnNldDAgKyBwb3J0KnJlZ190YmxbaV0ub2Zmc2V0MTsKKwkJCW1hc2sgPSByZWdfdGJsW2ldLm1hc2s7CisKKwkJCXNhdmVfdmFsID0gUkVHX1JEKGJwLCBvZmZzZXQpOworCisJCQlSRUdfV1IoYnAsIG9mZnNldCwgd3JfdmFsKTsKKwkJCXZhbCA9IFJFR19SRChicCwgb2Zmc2V0KTsKKworCQkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgcmVnaXN0ZXIncyB2YWx1ZSAqLworCQkJUkVHX1dSKGJwLCBvZmZzZXQsIHNhdmVfdmFsKTsKKworCQkJLyogdmVyaWZ5IHRoYXQgdmFsdWUgaXMgYXMgZXhwZWN0ZWQgdmFsdWUgKi8KKwkJCWlmICgodmFsICYgbWFzaykgIT0gKHdyX3ZhbCAmIG1hc2spKQorCQkJCWdvdG8gdGVzdF9yZWdfZXhpdDsKKwkJfQorCX0KKworCXJjID0gMDsKKwordGVzdF9yZWdfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfdGVzdF9tZW1vcnkoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaSwgaiwgcmMgPSAtRU5PREVWOworCXUzMiB2YWw7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCXUzMiBvZmZzZXQ7CisJCWludCBzaXplOworCX0gbWVtX3RibFtdID0geworCQl7IENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsICAgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRV9TSVpFIH0sCisJCXsgQ0ZDX1JFR19BQ1RJVklUWV9DT1VOVEVSLCBDRkNfUkVHX0FDVElWSVRZX0NPVU5URVJfU0laRSB9LAorCQl7IENGQ19SRUdfTElOS19MSVNULCAgICAgICAgQ0ZDX1JFR19MSU5LX0xJU1RfU0laRSB9LAorCQl7IERNQUVfUkVHX0NNRF9NRU0sICAgICAgICAgRE1BRV9SRUdfQ01EX01FTV9TSVpFIH0sCisJCXsgVENNX1JFR19YWF9ERVNDUl9UQUJMRSwgICBUQ01fUkVHX1hYX0RFU0NSX1RBQkxFX1NJWkUgfSwKKwkJeyBVQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAgIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEVfU0laRSB9LAorCQl7IFhDTV9SRUdfWFhfREVTQ1JfVEFCTEUsICAgWENNX1JFR19YWF9ERVNDUl9UQUJMRV9TSVpFIH0sCisKKwkJeyAweGZmZmZmZmZmLCAwIH0KKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQljaGFyICpuYW1lOworCQl1MzIgb2Zmc2V0OworCQl1MzIgbWFzazsKKwl9IHBydHlfdGJsW10gPSB7CisJCXsgIkNDTV9SRUdfQ0NNX1BSVFlfU1RTIiwgICAgIENDTV9SRUdfQ0NNX1BSVFlfU1RTLCAgICAgMCB9LAorCQl7ICJDRkNfUkVHX0NGQ19QUlRZX1NUUyIsICAgICBDRkNfUkVHX0NGQ19QUlRZX1NUUywgICAgIDAgfSwKKwkJeyAiRE1BRV9SRUdfRE1BRV9QUlRZX1NUUyIsICAgRE1BRV9SRUdfRE1BRV9QUlRZX1NUUywgICAwIH0sCisJCXsgIlRDTV9SRUdfVENNX1BSVFlfU1RTIiwgICAgIFRDTV9SRUdfVENNX1BSVFlfU1RTLCAgICAgMCB9LAorCQl7ICJVQ01fUkVHX1VDTV9QUlRZX1NUUyIsICAgICBVQ01fUkVHX1VDTV9QUlRZX1NUUywgICAgIDAgfSwKKwkJeyAiWENNX1JFR19YQ01fUFJUWV9TVFMiLCAgICAgWENNX1JFR19YQ01fUFJUWV9TVFMsICAgICAweDEgfSwKKworCQl7IE5VTEwsIDB4ZmZmZmZmZmYsIDAgfQorCX07CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCisJCXJldHVybiByYzsKKworCS8qIEdvIHRocm91Z2ggYWxsIHRoZSBtZW1vcmllcyAqLworCWZvciAoaSA9IDA7IG1lbV90YmxbaV0ub2Zmc2V0ICE9IDB4ZmZmZmZmZmY7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IG1lbV90YmxbaV0uc2l6ZTsgaisrKQorCQkJUkVHX1JEKGJwLCBtZW1fdGJsW2ldLm9mZnNldCArIGoqNCk7CisKKwkvKiBDaGVjayB0aGUgcGFyaXR5IHN0YXR1cyAqLworCWZvciAoaSA9IDA7IHBydHlfdGJsW2ldLm9mZnNldCAhPSAweGZmZmZmZmZmOyBpKyspIHsKKwkJdmFsID0gUkVHX1JEKGJwLCBwcnR5X3RibFtpXS5vZmZzZXQpOworCQlpZiAodmFsICYgfihwcnR5X3RibFtpXS5tYXNrKSkgeworCQkJRFAoTkVUSUZfTVNHX0hXLAorCQkJICAgIiVzIGlzIDB4JXhcbiIsIHBydHlfdGJsW2ldLm5hbWUsIHZhbCk7CisJCQlnb3RvIHRlc3RfbWVtX2V4aXQ7CisJCX0KKwl9CisKKwlyYyA9IDA7CisKK3Rlc3RfbWVtX2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF9uZXRpZl9zdGFydChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmJwLT5pbnRyX3NlbSkpIHsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKKwkJCWJueDJ4X2ludF9lbmFibGUoYnApOworCQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCQkJbmFwaV9lbmFibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CisJCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCisJCQkJbmV0aWZfd2FrZV9xdWV1ZShicC0+ZGV2KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfbmV0aWZfc3RvcChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKKwkJbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKKwkJYnAtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KKwkJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCQluYXBpX2Rpc2FibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CisJfQorCWJueDJ4X2ludF9kaXNhYmxlX3N5bmMoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF93YWl0X2Zvcl9saW5rKHN0cnVjdCBibngyeCAqYnAsIHU4IGxpbmtfdXApCit7CisJaW50IGNudCA9IDEwMDA7CisKKwlpZiAobGlua191cCkKKwkJd2hpbGUgKGJueDJ4X2xpbmtfdGVzdChicCkgJiYgY250LS0pCisJCQltc2xlZXAoMTApOworfQorCitzdGF0aWMgaW50IGJueDJ4X3J1bl9sb29wYmFjayhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgbG9vcGJhY2tfbW9kZSwgdTggbGlua191cCkKK3sKKwl1bnNpZ25lZCBpbnQgcGt0X3NpemUsIG51bV9wa3RzLCBpOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgY2hhciAqcGFja2V0OworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOworCXUxNiB0eF9zdGFydF9pZHgsIHR4X2lkeDsKKwl1MTYgcnhfc3RhcnRfaWR4LCByeF9pZHg7CisJdTE2IHBrdF9wcm9kOworCXN0cnVjdCBzd190eF9iZCAqdHhfYnVmOworCXN0cnVjdCBldGhfdHhfYmQgKnR4X2JkOworCWRtYV9hZGRyX3QgbWFwcGluZzsKKwl1bmlvbiBldGhfcnhfY3FlICpjcWU7CisJdTggY3FlX2ZwX2ZsYWdzOworCXN0cnVjdCBzd19yeF9iZCAqcnhfYnVmOworCXUxNiBsZW47CisJaW50IHJjID0gLUVOT0RFVjsKKworCWlmIChsb29wYmFja19tb2RlID09IEJOWDJYX01BQ19MT09QQkFDSykgeworCQlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX0JNQUM7CisJCWJueDJ4X3BoeV9od19sb2NrKGJwKTsKKwkJYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOworCQlibngyeF9waHlfaHdfdW5sb2NrKGJwKTsKKworCX0gZWxzZSBpZiAobG9vcGJhY2tfbW9kZSA9PSBCTlgyWF9QSFlfTE9PUEJBQ0spIHsKKwkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19YR1hTXzEwOworCQlibngyeF9waHlfaHdfbG9jayhicCk7CisJCWJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwkJYm54MnhfcGh5X2h3X3VubG9jayhicCk7CisJCS8qIHdhaXQgdW50aWwgbGluayBzdGF0ZSBpcyByZXN0b3JlZCAqLworCQlibngyeF93YWl0X2Zvcl9saW5rKGJwLCBsaW5rX3VwKTsKKworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBrdF9zaXplID0gMTUxNDsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGJwLT5yeF9idWZfc2l6ZSk7CisJaWYgKCFza2IpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHRlc3RfbG9vcGJhY2tfZXhpdDsKKwl9CisJcGFja2V0ID0gc2tiX3B1dChza2IsIHBrdF9zaXplKTsKKwltZW1jcHkocGFja2V0LCBicC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbXNldChwYWNrZXQgKyBFVEhfQUxFTiwgMCwgKEVUSF9ITEVOIC0gRVRIX0FMRU4pKTsKKwlmb3IgKGkgPSBFVEhfSExFTjsgaSA8IHBrdF9zaXplOyBpKyspCisJCXBhY2tldFtpXSA9ICh1bnNpZ25lZCBjaGFyKSAoaSAmIDB4ZmYpOworCisJbnVtX3BrdHMgPSAwOworCXR4X3N0YXJ0X2lkeCA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7CisJcnhfc3RhcnRfaWR4ID0gbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKTsKKworCXBrdF9wcm9kID0gZnAtPnR4X3BrdF9wcm9kKys7CisJdHhfYnVmID0gJmZwLT50eF9idWZfcmluZ1tUWF9CRChwa3RfcHJvZCldOworCXR4X2J1Zi0+Zmlyc3RfYmQgPSBmcC0+dHhfYmRfcHJvZDsKKwl0eF9idWYtPnNrYiA9IHNrYjsKKworCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbVFhfQkQoZnAtPnR4X2JkX3Byb2QpXTsKKwltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisJdHhfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOworCXR4X2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKKwl0eF9iZC0+bmJkID0gY3B1X3RvX2xlMTYoMSk7CisJdHhfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KHNrYl9oZWFkbGVuKHNrYikpOworCXR4X2JkLT52bGFuID0gY3B1X3RvX2xlMTYocGt0X3Byb2QpOworCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IChFVEhfVFhfQkRfRkxBR1NfU1RBUlRfQkQgfAorCQkJCSAgICAgICBFVEhfVFhfQkRfRkxBR1NfRU5EX0JEKTsKKwl0eF9iZC0+Z2VuZXJhbF9kYXRhID0gKChVTklDQVNUX0FERFJFU1MgPDwKKwkJCQlFVEhfVFhfQkRfRVRIX0FERFJfVFlQRV9TSElGVCkgfCAxKTsKKworCWZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QgPQorCQljcHVfdG9fbGUxNihsZTE2X3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kKSArIDEpOworCW1iKCk7IC8qIEZXIHJlc3RyaWN0aW9uOiBtdXN0IG5vdCByZW9yZGVyIHdyaXRpbmcgbmJkIGFuZCBwYWNrZXRzICovCisJZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QgPQorCQljcHVfdG9fbGUzMihsZTMyX3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCkgKyAxKTsKKwlET09SQkVMTChicCwgRlBfSURYKGZwKSwgMCk7CisKKwltbWlvd2IoKTsKKworCW51bV9wa3RzKys7CisJZnAtPnR4X2JkX3Byb2QrKzsKKwlicC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwl1ZGVsYXkoMTAwKTsKKworCXR4X2lkeCA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7CisJaWYgKHR4X2lkeCAhPSB0eF9zdGFydF9pZHggKyBudW1fcGt0cykKKwkJZ290byB0ZXN0X2xvb3BiYWNrX2V4aXQ7CisKKwlyeF9pZHggPSBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpOworCWlmIChyeF9pZHggIT0gcnhfc3RhcnRfaWR4ICsgbnVtX3BrdHMpCisJCWdvdG8gdGVzdF9sb29wYmFja19leGl0OworCisJY3FlID0gJmZwLT5yeF9jb21wX3JpbmdbUkNRX0JEKGZwLT5yeF9jb21wX2NvbnMpXTsKKwljcWVfZnBfZmxhZ3MgPSBjcWUtPmZhc3RfcGF0aF9jcWUudHlwZV9lcnJvcl9mbGFnczsKKwlpZiAoQ1FFX1RZUEUoY3FlX2ZwX2ZsYWdzKSB8fCAoY3FlX2ZwX2ZsYWdzICYgRVRIX1JYX0VSUk9SX0ZBTEdTKSkKKwkJZ290byB0ZXN0X2xvb3BiYWNrX3J4X2V4aXQ7CisKKwlsZW4gPSBsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGt0X2xlbik7CisJaWYgKGxlbiAhPSBwa3Rfc2l6ZSkKKwkJZ290byB0ZXN0X2xvb3BiYWNrX3J4X2V4aXQ7CisKKwlyeF9idWYgPSAmZnAtPnJ4X2J1Zl9yaW5nW1JYX0JEKGZwLT5yeF9iZF9jb25zKV07CisJc2tiID0gcnhfYnVmLT5za2I7CisJc2tiX3Jlc2VydmUoc2tiLCBjcWUtPmZhc3RfcGF0aF9jcWUucGxhY2VtZW50X29mZnNldCk7CisJZm9yIChpID0gRVRIX0hMRU47IGkgPCBwa3Rfc2l6ZTsgaSsrKQorCQlpZiAoKihza2ItPmRhdGEgKyBpKSAhPSAodW5zaWduZWQgY2hhcikgKGkgJiAweGZmKSkKKwkJCWdvdG8gdGVzdF9sb29wYmFja19yeF9leGl0OworCisJcmMgPSAwOworCit0ZXN0X2xvb3BiYWNrX3J4X2V4aXQ6CisJYnAtPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwlmcC0+cnhfYmRfY29ucyA9IE5FWFRfUlhfSURYKGZwLT5yeF9iZF9jb25zKTsKKwlmcC0+cnhfYmRfcHJvZCA9IE5FWFRfUlhfSURYKGZwLT5yeF9iZF9wcm9kKTsKKwlmcC0+cnhfY29tcF9jb25zID0gTkVYVF9SQ1FfSURYKGZwLT5yeF9jb21wX2NvbnMpOworCWZwLT5yeF9jb21wX3Byb2QgPSBORVhUX1JDUV9JRFgoZnAtPnJ4X2NvbXBfcHJvZCk7CisKKwkvKiBVcGRhdGUgcHJvZHVjZXJzICovCisJYm54MnhfdXBkYXRlX3J4X3Byb2QoYnAsIGZwLCBmcC0+cnhfYmRfcHJvZCwgZnAtPnJ4X2NvbXBfcHJvZCwKKwkJCSAgICAgZnAtPnJ4X3NnZV9wcm9kKTsKKwltbWlvd2IoKTsgLyoga2VlcCBwcm9kIHVwZGF0ZXMgb3JkZXJlZCAqLworCit0ZXN0X2xvb3BiYWNrX2V4aXQ6CisJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19OT05FOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGJueDJ4X3Rlc3RfbG9vcGJhY2soc3RydWN0IGJueDJ4ICpicCwgdTggbGlua191cCkKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQorCQlyZXR1cm4gQk5YMlhfTE9PUEJBQ0tfRkFJTEVEOworCisJYm54MnhfbmV0aWZfc3RvcChicCk7CisKKwlpZiAoYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9NQUNfTE9PUEJBQ0ssIGxpbmtfdXApKSB7CisJCURQKE5FVElGX01TR19QUk9CRSwgIk1BQyBsb29wYmFjayBmYWlsZWRcbiIpOworCQlyYyB8PSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEOworCX0KKworCWlmIChibngyeF9ydW5fbG9vcGJhY2soYnAsIEJOWDJYX1BIWV9MT09QQkFDSywgbGlua191cCkpIHsKKwkJRFAoTkVUSUZfTVNHX1BST0JFLCAiUEhZIGxvb3BiYWNrIGZhaWxlZFxuIik7CisJCXJjIHw9IEJOWDJYX1BIWV9MT09QQkFDS19GQUlMRUQ7CisJfQorCisJYm54MnhfbmV0aWZfc3RhcnQoYnApOworCisJcmV0dXJuIHJjOworfQorCisjZGVmaW5lIENSQzMyX1JFU0lEVUFMCQkJMHhkZWJiMjBlMworCitzdGF0aWMgaW50IGJueDJ4X3Rlc3RfbnZyYW0oc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJaW50IG9mZnNldDsKKwkJaW50IHNpemU7CisJfSBudnJhbV90YmxbXSA9IHsKKwkJeyAgICAgMCwgIDB4MTQgfSwgLyogYm9vdHN0cmFwICovCisJCXsgIDB4MTQsICAweGVjIH0sIC8qIGRpciAqLworCQl7IDB4MTAwLCAweDM1MCB9LCAvKiBtYW51Zl9pbmZvICovCisJCXsgMHg0NTAsICAweGYwIH0sIC8qIGZlYXR1cmVfaW5mbyAqLworCQl7IDB4NjQwLCAgMHg2NCB9LCAvKiB1cGdyYWRlX2tleV9pbmZvICovCisJCXsgMHg2YTQsICAweDY0IH0sCisJCXsgMHg3MDgsICAweDcwIH0sIC8qIG1hbnVmX2tleV9pbmZvICovCisJCXsgMHg3NzgsICAweDcwIH0sCisJCXsgICAgIDAsICAgICAwIH0KKwl9OworCXUzMiBidWZbMHgzNTAgLyA0XTsKKwl1OCAqZGF0YSA9ICh1OCAqKWJ1ZjsKKwlpbnQgaSwgcmM7CisJdTMyIG1hZ2ljLCBjc3VtOworCisJcmMgPSBibngyeF9udnJhbV9yZWFkKGJwLCAwLCBkYXRhLCA0KTsKKwlpZiAocmMpIHsKKwkJRFAoTkVUSUZfTVNHX1BST0JFLCAibWFnaWMgdmFsdWUgcmVhZCAocmMgLSVkKVxuIiwgLXJjKTsKKwkJZ290byB0ZXN0X252cmFtX2V4aXQ7CisJfQorCisJbWFnaWMgPSBiZTMyX3RvX2NwdShidWZbMF0pOworCWlmIChtYWdpYyAhPSAweDY2OTk1NWFhKSB7CisJCURQKE5FVElGX01TR19QUk9CRSwgIm1hZ2ljIHZhbHVlICgweCUwOHgpXG4iLCBtYWdpYyk7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byB0ZXN0X252cmFtX2V4aXQ7CisJfQorCisJZm9yIChpID0gMDsgbnZyYW1fdGJsW2ldLnNpemU7IGkrKykgeworCisJCXJjID0gYm54MnhfbnZyYW1fcmVhZChicCwgbnZyYW1fdGJsW2ldLm9mZnNldCwgZGF0YSwKKwkJCQkgICAgICBudnJhbV90YmxbaV0uc2l6ZSk7CisJCWlmIChyYykgeworCQkJRFAoTkVUSUZfTVNHX1BST0JFLAorCQkJICAgIm52cmFtX3RibFslZF0gcmVhZCBkYXRhIChyYyAtJWQpXG4iLCBpLCAtcmMpOworCQkJZ290byB0ZXN0X252cmFtX2V4aXQ7CisJCX0KKworCQljc3VtID0gZXRoZXJfY3JjX2xlKG52cmFtX3RibFtpXS5zaXplLCBkYXRhKTsKKwkJaWYgKGNzdW0gIT0gQ1JDMzJfUkVTSURVQUwpIHsKKwkJCURQKE5FVElGX01TR19QUk9CRSwKKwkJCSAgICJudnJhbV90YmxbJWRdIGNzdW0gdmFsdWUgKDB4JTA4eClcbiIsIGksIGNzdW0pOworCQkJcmMgPSAtRU5PREVWOworCQkJZ290byB0ZXN0X252cmFtX2V4aXQ7CisJCX0KKwl9CisKK3Rlc3RfbnZyYW1fZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfdGVzdF9pbnRyKHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZCAqY29uZmlnID0gYm54Mnhfc3AoYnAsIG1hY19jb25maWcpOworCWludCBpLCByYzsKKworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljb25maWctPmhkci5sZW5ndGhfNmIgPSAwOworCWNvbmZpZy0+aGRyLm9mZnNldCA9IDA7CisJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gQlBfQ0xfSUQoYnApOworCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CisKKwlyYyA9IGJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCisJCQkgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgbWFjX2NvbmZpZykpLAorCQkJICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwgMCk7CisJaWYgKHJjID09IDApIHsKKwkJYnAtPnNldF9tYWNfcGVuZGluZysrOworCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJaWYgKCFicC0+c2V0X21hY19wZW5kaW5nKQorCQkJCWJyZWFrOworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCQl9CisJCWlmIChpID09IDEwKQorCQkJcmMgPSAtRU5PREVWOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRlc3QsIHU2NCAqYnVmKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKHU2NCkgKiBCTlgyWF9OVU1fVEVTVFMpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybjsKKworCS8qIG9mZmxpbmUgdGVzdHMgYXJlIG5vdCBzdXBwb2VydGVkIGluIE1GIG1vZGUgKi8KKwlpZiAoSVNfRTFITUYoYnApKQorCQlldGVzdC0+ZmxhZ3MgJj0gfkVUSF9URVNUX0ZMX09GRkxJTkU7CisKKwlpZiAoZXRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgeworCQl1OCBsaW5rX3VwOworCisJCWxpbmtfdXAgPSBicC0+bGlua192YXJzLmxpbmtfdXA7CisJCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOworCQlibngyeF9uaWNfbG9hZChicCwgTE9BRF9ESUFHKTsKKwkJLyogd2FpdCB1bnRpbCBsaW5rIHN0YXRlIGlzIHJlc3RvcmVkICovCisJCWJueDJ4X3dhaXRfZm9yX2xpbmsoYnAsIGxpbmtfdXApOworCisJCWlmIChibngyeF90ZXN0X3JlZ2lzdGVycyhicCkgIT0gMCkgeworCQkJYnVmWzBdID0gMTsKKwkJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJCX0KKwkJaWYgKGJueDJ4X3Rlc3RfbWVtb3J5KGJwKSAhPSAwKSB7CisJCQlidWZbMV0gPSAxOworCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwkJfQorCQlidWZbMl0gPSBibngyeF90ZXN0X2xvb3BiYWNrKGJwLCBsaW5rX3VwKTsKKwkJaWYgKGJ1ZlsyXSAhPSAwKQorCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKworCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKKwkJYm54MnhfbmljX2xvYWQoYnAsIExPQURfTk9STUFMKTsKKwkJLyogd2FpdCB1bnRpbCBsaW5rIHN0YXRlIGlzIHJlc3RvcmVkICovCisJCWJueDJ4X3dhaXRfZm9yX2xpbmsoYnAsIGxpbmtfdXApOworCX0KKwlpZiAoYm54MnhfdGVzdF9udnJhbShicCkgIT0gMCkgeworCQlidWZbM10gPSAxOworCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCX0KKwlpZiAoYm54MnhfdGVzdF9pbnRyKGJwKSAhPSAwKSB7CisJCWJ1Zls0XSA9IDE7CisJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJfQorCWlmIChicC0+cG9ydC5wbWYpCisJCWlmIChibngyeF9saW5rX3Rlc3QoYnApICE9IDApIHsKKwkJCWJ1Zls1XSA9IDE7CisJCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCQl9CisJYnVmWzddID0gYm54MnhfbWNfYXNzZXJ0KGJwKTsKKwlpZiAoYnVmWzddICE9IDApCisJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisKKyNpZmRlZiBCTlgyWF9FWFRSQV9ERUJVRworCWJueDJ4X3BhbmljX2R1bXAoYnApOworI2VuZGlmCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWxvbmcgb2Zmc2V0OworCWludCBzaXplOworCXUzMiBmbGFnczsKKwljaGFyIHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOworfSBibngyeF9zdGF0c19hcnJbQk5YMlhfTlVNX1NUQVRTXSA9IHsKKy8qIDEgKi8JeyBTVEFUU19PRkZTRVQzMih2YWxpZF9ieXRlc19yZWNlaXZlZF9oaSksICAgICA4LCAxLCAicnhfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihlcnJvcl9ieXRlc19yZWNlaXZlZF9oaSksICAgICA4LCAxLCAicnhfZXJyb3JfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksICA4LCAxLCAidHhfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHNfaGkpLCA4LCAwLCAidHhfZXJyb3JfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgMSwgInJ4X3VjYXN0X3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAxLCAicnhfbWNhc3RfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsIDEsICJyeF9iY2FzdF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKKwkJCQkJCTgsIDEsICJ0eF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpKSwKKwkJCQkJCTgsIDAsICJ0eF9tYWNfZXJyb3JzIiB9LAorLyogMTAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKSwKKwkJCQkJCTgsIDAsICJ0eF9jYXJyaWVyX2Vycm9ycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzX2hpKSwKKwkJCQkJCTgsIDAsICJyeF9jcmNfZXJyb3JzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfaGkpLAorCQkJCQkJOCwgMCwgInJ4X2FsaWduX2Vycm9ycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzc2luZ2xlY29sbGlzaW9uZnJhbWVzX2hpKSwKKwkJCQkJCTgsIDAsICJ0eF9zaW5nbGVfY29sbGlzaW9ucyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzbXVsdGlwbGVjb2xsaXNpb25mcmFtZXNfaGkpLAorCQkJCQkJOCwgMCwgInR4X211bHRpX2NvbGxpc2lvbnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2RlZmVycmVkdHJhbnNtaXNzaW9uc19oaSksCisJCQkJCQk4LCAwLCAidHhfZGVmZXJyZWQiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfaGkpLAorCQkJCQkJOCwgMCwgInR4X2V4Y2Vzc19jb2xsaXNpb25zIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNsYXRlY29sbGlzaW9uc19oaSksCisJCQkJCQk4LCAwLCAidHhfbGF0ZV9jb2xsaXNpb25zIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19oaSksCisJCQkJCQk4LCAwLCAidHhfdG90YWxfY29sbGlzaW9ucyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50c19oaSksCisJCQkJCQk4LCAwLCAicnhfZnJhZ21lbnRzIiB9LAorLyogMjAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnNfaGkpLCA4LCAwLCAicnhfamFiYmVycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfaGkpLAorCQkJCQkJOCwgMCwgInJ4X3VuZGVyc2l6ZV9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQpLAorCQkJCQkJNCwgMSwgInJ4X292ZXJzaXplX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfaGkpLAorCQkJCQkJOCwgMCwgInR4XzY0X2J5dGVfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NW9jdGV0c3RvMTI3b2N0ZXRzX2hpKSwKKwkJCQkJOCwgMCwgInR4XzY1X3RvXzEyN19ieXRlX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTI4b2N0ZXRzdG8yNTVvY3RldHNfaGkpLAorCQkJCQk4LCAwLCAidHhfMTI4X3RvXzI1NV9ieXRlX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHNfaGkpLAorCQkJCQk4LCAwLCAidHhfMjU2X3RvXzUxMV9ieXRlX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNTEyb2N0ZXRzdG8xMDIzb2N0ZXRzX2hpKSwKKwkJCQkJOCwgMCwgInR4XzUxMl90b18xMDIzX2J5dGVfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaSksCisJCQkJCTgsIDAsICJ0eF8xMDI0X3RvXzE1MjJfYnl0ZV9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19oaSksCisJCQkJCTgsIDAsICJ0eF8xNTIzX3RvXzkwMjJfYnl0ZV9wYWNrZXRzIiB9LAorLyogMzAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9oaSksCisJCQkJCQk4LCAwLCAicnhfeG9uX2ZyYW1lcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgMCwgInJ4X3hvZmZfZnJhbWVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9vdXR4b25zZW50X2hpKSwgIDgsIDAsICJ0eF94b25fZnJhbWVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9vdXR4b2Zmc2VudF9oaSksIDgsIDAsICJ0eF94b2ZmX2ZyYW1lcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsIDAsICJyeF9tYWNfY3RybF9mcmFtZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihtYWNfZmlsdGVyX2Rpc2NhcmQpLCAgIDQsIDEsICJyeF9maWx0ZXJlZF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkKSwgICAgICA0LCAxLCAicnhfZGlzY2FyZHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih4eG92ZXJmbG93X2Rpc2NhcmQpLCAgIDQsIDEsICJyeF9md19kaXNjYXJkcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGJyYl9kcm9wX2hpKSwgICAgICAgICAgOCwgMSwgImJyYl9kaXNjYXJkIiB9LAorLyogMzkgKi97IFNUQVRTX09GRlNFVDMyKGJyYl90cnVuY2F0ZV9kaXNjYXJkKSwgOCwgMSwgImJyYl90cnVuY2F0ZSIgfQorfTsKKworc3RhdGljIHZvaWQgYm54MnhfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmJ1ZikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaSwgajsKKworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKKwkJCWlmIChJU19FMUhNRihicCkgJiYgKCFibngyeF9zdGF0c19hcnJbaV0uZmxhZ3MpKQorCQkJCWNvbnRpbnVlOworCQkJc3RyY3B5KGJ1ZiArIGoqRVRIX0dTVFJJTkdfTEVOLAorCQkJICAgICAgIGJueDJ4X3N0YXRzX2FycltpXS5zdHJpbmcpOworCQkJaisrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBFVEhfU1NfVEVTVDoKKwkJbWVtY3B5KGJ1ZiwgYm54MnhfdGVzdHNfc3RyX2Fyciwgc2l6ZW9mKGJueDJ4X3Rlc3RzX3N0cl9hcnIpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGJueDJ4X2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpLCBudW1fc3RhdHMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7CisJCWlmIChJU19FMUhNRihicCkgJiYgKCFibngyeF9zdGF0c19hcnJbaV0uZmxhZ3MpKQorCQkJY29udGludWU7CisJCW51bV9zdGF0cysrOworCX0KKwlyZXR1cm4gbnVtX3N0YXRzOworfQorCitzdGF0aWMgdm9pZCBibngyeF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqYnVmKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiAqaHdfc3RhdHMgPSAodTMyICopJmJwLT5ldGhfc3RhdHM7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7CisJCWlmIChJU19FMUhNRihicCkgJiYgKCFibngyeF9zdGF0c19hcnJbaV0uZmxhZ3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKGJueDJ4X3N0YXRzX2FycltpXS5zaXplID09IDApIHsKKwkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCisJCQlidWZbal0gPSAwOworCQkJaisrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGJueDJ4X3N0YXRzX2FycltpXS5zaXplID09IDQpIHsKKwkJCS8qIDQtYnl0ZSBjb3VudGVyICovCisJCQlidWZbal0gPSAodTY0KSAqKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCk7CisJCQlqKys7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiA4LWJ5dGUgY291bnRlciAqLworCQlidWZbal0gPSBISUxPX1U2NCgqKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCksCisJCQkJICAqKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCArIDEpKTsKKwkJaisrOworCX0KK30KKworc3RhdGljIGludCBibngyeF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGk7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWJwLT5wb3J0LnBtZikKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGF0YSA9PSAwKQorCQlkYXRhID0gMjsKKworCWZvciAoaSA9IDA7IGkgPCAoZGF0YSAqIDIpOyBpKyspIHsKKwkJaWYgKChpICUgMikgPT0gMCkKKwkJCWJueDJ4X3NldF9sZWQoYnAsIHBvcnQsIExFRF9NT0RFX09QRVIsIFNQRUVEXzEwMDAsCisJCQkJICAgICAgYnAtPmxpbmtfcGFyYW1zLmh3X2xlZF9tb2RlLAorCQkJCSAgICAgIGJwLT5saW5rX3BhcmFtcy5jaGlwX2lkKTsKKwkJZWxzZQorCQkJYm54Mnhfc2V0X2xlZChicCwgcG9ydCwgTEVEX01PREVfT0ZGLCAwLAorCQkJCSAgICAgIGJwLT5saW5rX3BhcmFtcy5od19sZWRfbW9kZSwKKwkJCQkgICAgICBicC0+bGlua19wYXJhbXMuY2hpcF9pZCk7CisKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoNTAwKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkKKwkJYm54Mnhfc2V0X2xlZChicCwgcG9ydCwgTEVEX01PREVfT1BFUiwKKwkJCSAgICAgIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCwKKwkJCSAgICAgIGJwLT5saW5rX3BhcmFtcy5od19sZWRfbW9kZSwKKwkJCSAgICAgIGJwLT5saW5rX3BhcmFtcy5jaGlwX2lkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGJueDJ4X2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MJCT0gYm54MnhfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gYm54Mnhfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbwkJPSBibngyeF9nZXRfZHJ2aW5mbywKKwkuZ2V0X3dvbAkJPSBibngyeF9nZXRfd29sLAorCS5zZXRfd29sCQk9IGJueDJ4X3NldF93b2wsCisJLmdldF9tc2dsZXZlbAkJPSBibngyeF9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPSBibngyeF9zZXRfbXNnbGV2ZWwsCisJLm53YXlfcmVzZXQJCT0gYm54MnhfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X2VlcHJvbV9sZW4JCT0gYm54MnhfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20JCT0gYm54MnhfZ2V0X2VlcHJvbSwKKwkuc2V0X2VlcHJvbQkJPSBibngyeF9zZXRfZWVwcm9tLAorCS5nZXRfY29hbGVzY2UJCT0gYm54MnhfZ2V0X2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UJCT0gYm54Mnhfc2V0X2NvYWxlc2NlLAorCS5nZXRfcmluZ3BhcmFtCQk9IGJueDJ4X2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0JCT0gYm54Mnhfc2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3BhdXNlcGFyYW0JCT0gYm54MnhfZ2V0X3BhdXNlcGFyYW0sCisJLnNldF9wYXVzZXBhcmFtCQk9IGJueDJ4X3NldF9wYXVzZXBhcmFtLAorCS5nZXRfcnhfY3N1bQkJPSBibngyeF9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0JCT0gYm54Mnhfc2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCisJLnNldF9mbGFncwkJPSBibngyeF9zZXRfZmxhZ3MsCisJLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKKwkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28JCT0gYm54Mnhfc2V0X3RzbywKKwkuc2VsZl90ZXN0X2NvdW50CT0gYm54Mnhfc2VsZl90ZXN0X2NvdW50LAorCS5zZWxmX3Rlc3QJCT0gYm54Mnhfc2VsZl90ZXN0LAorCS5nZXRfc3RyaW5ncwkJPSBibngyeF9nZXRfc3RyaW5ncywKKwkucGh5c19pZAkJPSBibngyeF9waHlzX2lkLAorCS5nZXRfc3RhdHNfY291bnQJPSBibngyeF9nZXRfc3RhdHNfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzCT0gYm54MnhfZ2V0X2V0aHRvb2xfc3RhdHMsCit9OworCisvKiBlbmQgb2YgZXRodG9vbF9vcHMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogR2VuZXJhbCBzZXJ2aWNlIGZ1bmN0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBibngyeF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgcGNpX3Bvd2VyX3Qgc3RhdGUpCit7CisJdTE2IHBtY3NyOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnAtPnBkZXYsIGJwLT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgJnBtY3NyKTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFBDSV9EMDoKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGJwLT5wZGV2LCBicC0+cG1fY2FwICsgUENJX1BNX0NUUkwsCisJCQkJICAgICAgKChwbWNzciAmIH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKSB8CisJCQkJICAgICAgIFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpKTsKKworCQlpZiAocG1jc3IgJiBQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKQorCQkvKiBkZWxheSByZXF1aXJlZCBkdXJpbmcgdHJhbnNpdGlvbiBvdXQgb2YgRDNob3QgKi8KKwkJCW1zbGVlcCgyMCk7CisJCWJyZWFrOworCisJY2FzZSBQQ0lfRDNob3Q6CisJCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOworCQlwbWNzciB8PSAzOworCisJCWlmIChicC0+d29sKQorCQkJcG1jc3IgfD0gUENJX1BNX0NUUkxfUE1FX0VOQUJMRTsKKworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYnAtPnBkZXYsIGJwLT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwKKwkJCQkgICAgICBwbWNzcik7CisKKwkJLyogTm8gbW9yZSBtZW1vcnkgYWNjZXNzIGFmdGVyIHRoaXMgcG9pbnQgdW50aWwKKwkJKiBkZXZpY2UgaXMgYnJvdWdodCBiYWNrIHRvIEQwLgorCQkqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG5ldF9kZXZpY2Ugc2VydmljZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50IGJueDJ4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJueDJ4X2Zhc3RwYXRoLAorCQkJCQkJIG5hcGkpOworCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7CisJaW50IHdvcmtfZG9uZSA9IDA7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCisJCWdvdG8gcG9sbF9wYW5pYzsKKyNlbmRpZgorCisJcHJlZmV0Y2goZnAtPnR4X2J1Zl9yaW5nW1RYX0JEKGZwLT50eF9wa3RfY29ucyldLnNrYik7CisJcHJlZmV0Y2goZnAtPnJ4X2J1Zl9yaW5nW1JYX0JEKGZwLT5yeF9iZF9jb25zKV0uc2tiKTsKKwlwcmVmZXRjaCgoY2hhciAqKShmcC0+cnhfYnVmX3JpbmdbUlhfQkQoZnAtPnJ4X2JkX2NvbnMpXS5za2IpICsgMjU2KTsKKworCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CisKKwlpZiAoKGZwLT50eF9wa3RfcHJvZCAhPSBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpKSB8fAorCSAgICAoZnAtPnR4X3BrdF9wcm9kICE9IGZwLT50eF9wa3RfY29ucykpCisJCWJueDJ4X3R4X2ludChmcCwgYnVkZ2V0KTsKKworCWlmIChsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpICE9IGZwLT5yeF9jb21wX2NvbnMpCisJCXdvcmtfZG9uZSA9IGJueDJ4X3J4X2ludChmcCwgYnVkZ2V0KTsKKworCXJtYigpOyAvKiBibngyeF9oYXNfd29yaygpIHJlYWRzIHRoZSBzdGF0dXMgYmxvY2sgKi8KKworCS8qIG11c3Qgbm90IGNvbXBsZXRlIGlmIHdlIGNvbnN1bWVkIGZ1bGwgYnVkZ2V0ICovCisJaWYgKCh3b3JrX2RvbmUgPCBidWRnZXQpICYmICFibngyeF9oYXNfd29yayhmcCkpIHsKKworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKK3BvbGxfcGFuaWM6CisjZW5kaWYKKwkJbmV0aWZfcnhfY29tcGxldGUoYnAtPmRldiwgbmFwaSk7CisKKwkJYm54MnhfYWNrX3NiKGJwLCBGUF9TQl9JRChmcCksIFVTVE9STV9JRCwKKwkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX3VfaWR4KSwgSUdVX0lOVF9OT1AsIDEpOworCQlibngyeF9hY2tfc2IoYnAsIEZQX1NCX0lEKGZwKSwgQ1NUT1JNX0lELAorCQkJICAgICBsZTE2X3RvX2NwdShmcC0+ZnBfY19pZHgpLCBJR1VfSU5UX0VOQUJMRSwgMSk7CisJfQorCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKworLyogd2Ugc3BsaXQgdGhlIGZpcnN0IEJEIGludG8gaGVhZGVycyBhbmQgZGF0YSBCRHMKKyAqIHRvIGVhc2UgdGhlIHBhaW4gb2Ygb3VyIGZlbGxvdyBtaWNvY29kZSBlbmdpbmVlcnMKKyAqIHdlIHVzZSBvbmUgbWFwcGluZyBmb3IgYm90aCBCRHMKKyAqIFNvIGZhciB0aGlzIGhhcyBvbmx5IGJlZW4gb2JzZXJ2ZWQgdG8gaGFwcGVuCisgKiBpbiBPdGhlciBPcGVyYXRpbmcgU3lzdGVtcyhUTSkKKyAqLworc3RhdGljIG5vaW5saW5lIHUxNiBibngyeF90eF9zcGxpdChzdHJ1Y3QgYm54MnggKmJwLAorCQkJCSAgIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCisJCQkJICAgc3RydWN0IGV0aF90eF9iZCAqKnR4X2JkLCB1MTYgaGxlbiwKKwkJCQkgICB1MTYgYmRfcHJvZCwgaW50IG5iZCkKK3sKKwlzdHJ1Y3QgZXRoX3R4X2JkICpoX3R4X2JkID0gKnR4X2JkOworCXN0cnVjdCBldGhfdHhfYmQgKmRfdHhfYmQ7CisJZG1hX2FkZHJfdCBtYXBwaW5nOworCWludCBvbGRfbGVuID0gbGUxNl90b19jcHUoaF90eF9iZC0+bmJ5dGVzKTsKKworCS8qIGZpcnN0IGZpeCBmaXJzdCBCRCAqLworCWhfdHhfYmQtPm5iZCA9IGNwdV90b19sZTE2KG5iZCk7CisJaF90eF9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYoaGxlbik7CisKKwlEUChORVRJRl9NU0dfVFhfUVVFVUVELAkiVFNPIHNwbGl0IGhlYWRlciBzaXplIGlzICVkICIKKwkgICAiKCV4OiV4KSBuYmQgJWRcbiIsIGhfdHhfYmQtPm5ieXRlcywgaF90eF9iZC0+YWRkcl9oaSwKKwkgICBoX3R4X2JkLT5hZGRyX2xvLCBoX3R4X2JkLT5uYmQpOworCisJLyogbm93IGdldCBhIG5ldyBkYXRhIEJECisJICogKGFmdGVyIHRoZSBwYmQpIGFuZCBmaWxsIGl0ICovCisJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKKwlkX3R4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF07CisKKwltYXBwaW5nID0gSElMT19VNjQobGUzMl90b19jcHUoaF90eF9iZC0+YWRkcl9oaSksCisJCQkgICBsZTMyX3RvX2NwdShoX3R4X2JkLT5hZGRyX2xvKSkgKyBobGVuOworCisJZF90eF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7CisJZF90eF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7CisJZF90eF9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYob2xkX2xlbiAtIGhsZW4pOworCWRfdHhfYmQtPnZsYW4gPSAwOworCS8qIHRoaXMgbWFya3MgdGhlIEJEIGFzIG9uZSB0aGF0IGhhcyBubyBpbmRpdmlkdWFsIG1hcHBpbmcKKwkgKiB0aGUgRlcgaWdub3JlcyB0aGlzIGZsYWcgaW4gYSBCRCBub3QgbWFya2VkIHN0YXJ0CisJICovCisJZF90eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgPSBFVEhfVFhfQkRfRkxBR1NfU1dfTFNPOworCURQKE5FVElGX01TR19UWF9RVUVVRUQsCisJICAgIlRTTyBzcGxpdCBkYXRhIHNpemUgaXMgJWQgKCV4OiV4KVxuIiwKKwkgICBkX3R4X2JkLT5uYnl0ZXMsIGRfdHhfYmQtPmFkZHJfaGksIGRfdHhfYmQtPmFkZHJfbG8pOworCisJLyogdXBkYXRlIHR4X2JkIGZvciBtYXJraW5nIHRoZSBsYXN0IEJEIGZsYWcgKi8KKwkqdHhfYmQgPSBkX3R4X2JkOworCisJcmV0dXJuIGJkX3Byb2Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGJueDJ4X2NzdW1fZml4KHVuc2lnbmVkIGNoYXIgKnRfaGVhZGVyLCB1MTYgY3N1bSwgczggZml4KQoreworCWlmIChmaXggPiAwKQorCQljc3VtID0gKHUxNikgfmNzdW1fZm9sZChjc3VtX3N1Yihjc3VtLAorCQkJCWNzdW1fcGFydGlhbCh0X2hlYWRlciAtIGZpeCwgZml4LCAwKSkpOworCisJZWxzZSBpZiAoZml4IDwgMCkKKwkJY3N1bSA9ICh1MTYpIH5jc3VtX2ZvbGQoY3N1bV9hZGQoY3N1bSwKKwkJCQljc3VtX3BhcnRpYWwodF9oZWFkZXIsIC1maXgsIDApKSk7CisKKwlyZXR1cm4gc3dhYjE2KGNzdW0pOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBibngyeF94bWl0X3R5cGUoc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1MzIgcmM7CisKKwlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJcmMgPSBYTUlUX1BMQUlOOworCisJZWxzZSB7CisJCWlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQVjYpKSB7CisJCQlyYyA9IFhNSVRfQ1NVTV9WNjsKKwkJCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKQorCQkJCXJjIHw9IFhNSVRfQ1NVTV9UQ1A7CisKKwkJfSBlbHNlIHsKKwkJCXJjID0gWE1JVF9DU1VNX1Y0OworCQkJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKKwkJCQlyYyB8PSBYTUlUX0NTVU1fVENQOworCQl9CisJfQorCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY0KQorCQlyYyB8PSBYTUlUX0dTT19WNDsKKworCWVsc2UgaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY2KQorCQlyYyB8PSBYTUlUX0dTT19WNjsKKworCXJldHVybiByYzsKK30KKworLyogY2hlY2sgaWYgcGFja2V0IHJlcXVpcmVzIGxpbmVhcml6YXRpb24gKHBhY2tldCBpcyB0b28gZnJhZ21lbnRlZCkgKi8KK3N0YXRpYyBpbnQgYm54MnhfcGt0X3JlcV9saW4oc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgdTMyIHhtaXRfdHlwZSkKK3sKKwlpbnQgdG9fY29weSA9IDA7CisJaW50IGhsZW4gPSAwOworCWludCBmaXJzdF9iZF9zeiA9IDA7CisKKwkvKiAzID0gMSAoZm9yIGxpbmVhciBkYXRhIEJEKSArIDIgKGZvciBQQkQgYW5kIGxhc3QgQkQpICovCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPj0gKE1BWF9GRVRDSF9CRCAtIDMpKSB7CisKKwkJaWYgKHhtaXRfdHlwZSAmIFhNSVRfR1NPKSB7CisJCQl1bnNpZ25lZCBzaG9ydCBsc29fbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwkJCS8qIENoZWNrIGlmIExTTyBwYWNrZXQgbmVlZHMgdG8gYmUgY29waWVkOgorCQkJICAgMyA9IDEgKGZvciBoZWFkZXJzIEJEKSArIDIgKGZvciBQQkQgYW5kIGxhc3QgQkQpICovCisJCQlpbnQgd25kX3NpemUgPSBNQVhfRkVUQ0hfQkQgLSAzOworCQkJLyogTnVtYmVyIG9mIHdpZG5vd3MgdG8gY2hlY2sgKi8KKwkJCWludCBudW1fd25kcyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgLSB3bmRfc2l6ZTsKKwkJCWludCB3bmRfaWR4ID0gMDsKKwkJCWludCBmcmFnX2lkeCA9IDA7CisJCQl1MzIgd25kX3N1bSA9IDA7CisKKwkJCS8qIEhlYWRlcnMgbGVuZ3RoICovCisJCQlobGVuID0gKGludCkoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YSkgKworCQkJCXRjcF9oZHJsZW4oc2tiKTsKKworCQkJLyogQW1vdW50IG9mIGRhdGEgKHcvbyBoZWFkZXJzKSBvbiBsaW5lYXIgcGFydCBvZiBTS0IqLworCQkJZmlyc3RfYmRfc3ogPSBza2JfaGVhZGxlbihza2IpIC0gaGxlbjsKKworCQkJd25kX3N1bSAgPSBmaXJzdF9iZF9zejsKKworCQkJLyogQ2FsY3VsYXRlIHRoZSBmaXJzdCBzdW0gLSBpdCdzIHNwZWNpYWwgKi8KKwkJCWZvciAoZnJhZ19pZHggPSAwOyBmcmFnX2lkeCA8IHduZF9zaXplIC0gMTsgZnJhZ19pZHgrKykKKwkJCQl3bmRfc3VtICs9CisJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZnJhZ19pZHhdLnNpemU7CisKKwkJCS8qIElmIHRoZXJlIHdhcyBkYXRhIG9uIGxpbmVhciBza2IgZGF0YSAtIGNoZWNrIGl0ICovCisJCQlpZiAoZmlyc3RfYmRfc3ogPiAwKSB7CisJCQkJaWYgKHVubGlrZWx5KHduZF9zdW0gPCBsc29fbXNzKSkgeworCQkJCQl0b19jb3B5ID0gMTsKKwkJCQkJZ290byBleGl0X2xibDsKKwkJCQl9CisKKwkJCQl3bmRfc3VtIC09IGZpcnN0X2JkX3N6OworCQkJfQorCisJCQkvKiBPdGhlcnMgYXJlIGVhc2llcjogcnVuIHRocm91Z2ggdGhlIGZyYWcgbGlzdCBhbmQKKwkJCSAgIGNoZWNrIGFsbCB3aW5kb3dzICovCisJCQlmb3IgKHduZF9pZHggPSAwOyB3bmRfaWR4IDw9IG51bV93bmRzOyB3bmRfaWR4KyspIHsKKwkJCQl3bmRfc3VtICs9CisJCQkgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbd25kX2lkeCArIHduZF9zaXplIC0gMV0uc2l6ZTsKKworCQkJCWlmICh1bmxpa2VseSh3bmRfc3VtIDwgbHNvX21zcykpIHsKKwkJCQkJdG9fY29weSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl3bmRfc3VtIC09CisJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbd25kX2lkeF0uc2l6ZTsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJLyogaW4gbm9uLUxTTyB0b28gZnJhZ21lbnRlZCBwYWNrZXQgc2hvdWxkIGFsd2F5cworCQkJICAgYmUgbGluZWFyaXplZCAqLworCQkJdG9fY29weSA9IDE7CisJCX0KKwl9CisKK2V4aXRfbGJsOgorCWlmICh1bmxpa2VseSh0b19jb3B5KSkKKwkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKKwkJICAgIkxpbmVhcml6YXRpb24gSVMgUkVRVUlSRUQgZm9yICVzIHBhY2tldC4gIgorCQkgICAibnVtX2ZyYWdzICVkICBobGVuICVkICBmaXJzdF9iZF9zeiAlZFxuIiwKKwkJICAgKHhtaXRfdHlwZSAmIFhNSVRfR1NPKSA/ICJMU08iIDogIm5vbi1MU08iLAorCQkgICBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzLCBobGVuLCBmaXJzdF9iZF9zeik7CisKKwlyZXR1cm4gdG9fY29weTsKK30KKworLyogY2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jaworICogYm54MnhfdHhfaW50KCkgcnVucyB3aXRob3V0IG5ldGlmX3R4X2xvY2sgdW5sZXNzIGl0IG5lZWRzIHRvIGNhbGwKKyAqIG5ldGlmX3dha2VfcXVldWUoKQorICovCitzdGF0aWMgaW50IGJueDJ4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwOworCXN0cnVjdCBzd190eF9iZCAqdHhfYnVmOworCXN0cnVjdCBldGhfdHhfYmQgKnR4X2JkOworCXN0cnVjdCBldGhfdHhfcGFyc2VfYmQgKnBiZCA9IE5VTEw7CisJdTE2IHBrdF9wcm9kLCBiZF9wcm9kOworCWludCBuYmQsIGZwX2luZGV4OworCWRtYV9hZGRyX3QgbWFwcGluZzsKKwl1MzIgeG1pdF90eXBlID0gYm54MnhfeG1pdF90eXBlKGJwLCBza2IpOworCWludCB2bGFuX29mZiA9IChicC0+ZTFob3YgPyA0IDogMCk7CisJaW50IGk7CisJdTggaGxlbiA9IDA7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKyNlbmRpZgorCisJZnBfaW5kZXggPSAoc21wX3Byb2Nlc3Nvcl9pZCgpICUgYnAtPm51bV9xdWV1ZXMpOworCWZwID0gJmJwLT5mcFtmcF9pbmRleF07CisKKwlpZiAodW5saWtlbHkoYm54MnhfdHhfYXZhaWwoYnAtPmZwKSA8CisJCQkJCShza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMykpKSB7CisJCWJwLT5ldGhfc3RhdHMuZHJpdmVyX3hvZmYrKywKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlCTlgyWF9FUlIoIkJVRyEgVHggcmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJTS0I6IHN1bW1lZCAleCAgcHJvdG9jb2wgJXggIHByb3RvY29sKCV4LCV4KSIKKwkgICAiICBnc28gdHlwZSAleCAgeG1pdF90eXBlICV4XG4iLAorCSAgIHNrYi0+aXBfc3VtbWVkLCBza2ItPnByb3RvY29sLCBpcHY2X2hkcihza2IpLT5uZXh0aGRyLAorCSAgIGlwX2hkcihza2IpLT5wcm90b2NvbCwgc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSwgeG1pdF90eXBlKTsKKworCS8qIEZpcnN0LCBjaGVjayBpZiB3ZSBuZWVkIHRvIGxpbmVhcmFpemUgdGhlIHNrYgorCSAgIChkdWUgdG8gRlcgcmVzdHJpY3Rpb25zKSAqLworCWlmIChibngyeF9wa3RfcmVxX2xpbihicCwgc2tiLCB4bWl0X3R5cGUpKSB7CisJCS8qIFN0YXRpc3RpY3Mgb2YgbGluZWFyaXphdGlvbiAqLworCQlicC0+bGluX2NudCsrOworCQlpZiAoc2tiX2xpbmVhcml6ZShza2IpICE9IDApIHsKKwkJCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJTS0IgbGluZWFyaXphdGlvbiBmYWlsZWQgLSAiCisJCQkgICAic2lsZW50bHkgZHJvcHBpbmcgdGhpcyBTS0JcbiIpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwlQbGVhc2UgcmVhZCBjYXJlZnVsbHkuIEZpcnN0IHdlIHVzZSBvbmUgQkQgd2hpY2ggd2UgbWFyayBhcyBzdGFydCwKKwl0aGVuIGZvciBUU08gb3IgeHN1bSB3ZSBoYXZlIGEgcGFyc2luZyBpbmZvIEJELAorCWFuZCBvbmx5IHRoZW4gd2UgaGF2ZSB0aGUgcmVzdCBvZiB0aGUgVFNPIEJEcy4KKwkoZG9uJ3QgZm9yZ2V0IHRvIG1hcmsgdGhlIGxhc3Qgb25lIGFzIGxhc3QsCisJYW5kIHRvIHVubWFwIG9ubHkgQUZURVIgeW91IHdyaXRlIHRvIHRoZSBCRCAuLi4pCisJQW5kIGFib3ZlIGFsbCwgYWxsIHBkYiBzaXplcyBhcmUgaW4gd29yZHMgLSBOT1QgRFdPUkRTIQorCSovCisKKwlwa3RfcHJvZCA9IGZwLT50eF9wa3RfcHJvZCsrOworCWJkX3Byb2QgPSBUWF9CRChmcC0+dHhfYmRfcHJvZCk7CisKKwkvKiBnZXQgYSB0eF9idWYgYW5kIGZpcnN0IEJEICovCisJdHhfYnVmID0gJmZwLT50eF9idWZfcmluZ1tUWF9CRChwa3RfcHJvZCldOworCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF07CisKKwl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgPSBFVEhfVFhfQkRfRkxBR1NfU1RBUlRfQkQ7CisJdHhfYmQtPmdlbmVyYWxfZGF0YSA9IChVTklDQVNUX0FERFJFU1MgPDwKKwkJCSAgICAgICBFVEhfVFhfQkRfRVRIX0FERFJfVFlQRV9TSElGVCk7CisJdHhfYmQtPmdlbmVyYWxfZGF0YSB8PSAxOyAvKiBoZWFkZXIgbmJkICovCisKKwkvKiByZW1lbWJlciB0aGUgZmlyc3QgQkQgb2YgdGhlIHBhY2tldCAqLworCXR4X2J1Zi0+Zmlyc3RfYmQgPSBmcC0+dHhfYmRfcHJvZDsKKwl0eF9idWYtPnNrYiA9IHNrYjsKKworCURQKE5FVElGX01TR19UWF9RVUVVRUQsCisJICAgInNlbmRpbmcgcGt0ICV1IEAlcCAgbmV4dF9pZHggJXUgIGJkICV1IEAlcFxuIiwKKwkgICBwa3RfcHJvZCwgdHhfYnVmLCBmcC0+dHhfcGt0X3Byb2QsIGJkX3Byb2QsIHR4X2JkKTsKKworCWlmICgoYnAtPnZsZ3JwICE9IE5VTEwpICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQl0eF9iZC0+dmxhbiA9IGNwdV90b19sZTE2KHZsYW5fdHhfdGFnX2dldChza2IpKTsKKwkJdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9IEVUSF9UWF9CRF9GTEFHU19WTEFOX1RBRzsKKwkJdmxhbl9vZmYgKz0gNDsKKwl9IGVsc2UKKwkJdHhfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7CisKKwlpZiAoeG1pdF90eXBlKSB7CisKKwkJLyogdHVybiBvbiBwYXJzaW5nIGFuZCBnZXQgYSBCRCAqLworCQliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOworCQlwYmQgPSAodm9pZCAqKSZmcC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdOworCisJCW1lbXNldChwYmQsIDAsIHNpemVvZihzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkKSk7CisJfQorCisJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTSkgeworCQlobGVuID0gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhICsgdmxhbl9vZmYpIC8gMjsKKworCQkvKiBmb3Igbm93IE5TIGZsYWcgaXMgbm90IHVzZWQgaW4gTGludXggKi8KKwkJcGJkLT5nbG9iYWxfZGF0YSA9IChobGVuIHwKKwkJCQkgICAgKChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QXzgwMjFRKSkgPDwKKwkJCQkgICAgIEVUSF9UWF9QQVJTRV9CRF9MTENfU05BUF9FTl9TSElGVCkpOworCisJCXBiZC0+aXBfaGxlbiA9IChza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0KKwkJCQlza2JfbmV0d29ya19oZWFkZXIoc2tiKSkgLyAyOworCisJCWhsZW4gKz0gcGJkLT5pcF9obGVuICsgdGNwX2hkcmxlbihza2IpIC8gMjsKKworCQlwYmQtPnRvdGFsX2hsZW4gPSBjcHVfdG9fbGUxNihobGVuKTsKKwkJaGxlbiA9IGhsZW4qMiAtIHZsYW5fb2ZmOworCisJCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfVENQX0NTVU07CisKKwkJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9WNCkKKwkJCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PQorCQkJCQkJRVRIX1RYX0JEX0ZMQUdTX0lQX0NTVU07CisJCWVsc2UKKwkJCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfSVBWNjsKKworCQlpZiAoeG1pdF90eXBlICYgWE1JVF9DU1VNX1RDUCkgeworCQkJcGJkLT50Y3BfcHNldWRvX2NzdW0gPSBzd2FiMTYodGNwX2hkcihza2IpLT5jaGVjayk7CisKKwkJfSBlbHNlIHsKKwkJCXM4IGZpeCA9IFNLQl9DU19PRkYoc2tiKTsgLyogc2lnbmVkISAqLworCisJCQlwYmQtPmdsb2JhbF9kYXRhIHw9IEVUSF9UWF9QQVJTRV9CRF9DU19BTllfRkxHOworCQkJcGJkLT5jc19vZmZzZXQgPSBmaXggLyAyOworCisJCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAorCQkJICAgImhsZW4gJWQgIG9mZnNldCAlZCAgZml4ICVkICBjc3VtIGJlZm9yZSBmaXggJXhcbiIsCisJCQkgICBsZTE2X3RvX2NwdShwYmQtPnRvdGFsX2hsZW4pLCBwYmQtPmNzX29mZnNldCwgZml4LAorCQkJICAgU0tCX0NTKHNrYikpOworCisJCQkvKiBIVyBidWc6IGZpeHVwIHRoZSBDU1VNICovCisJCQlwYmQtPnRjcF9wc2V1ZG9fY3N1bSA9CisJCQkJYm54MnhfY3N1bV9maXgoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSwKKwkJCQkJICAgICAgIFNLQl9DUyhza2IpLCBmaXgpOworCisJCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAiY3N1bSBhZnRlciBmaXggJXhcbiIsCisJCQkgICBwYmQtPnRjcF9wc2V1ZG9fY3N1bSk7CisJCX0KKwl9CisKKwltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwl0eF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7CisJdHhfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOworCW5iZCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAoKHBiZCA9PSBOVUxMKT8gMSA6IDIpOworCXR4X2JkLT5uYmQgPSBjcHVfdG9fbGUxNihuYmQpOworCXR4X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihza2JfaGVhZGxlbihza2IpKTsKKworCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJmaXJzdCBiZCBAJXAgIGFkZHIgKCV4OiV4KSAgbmJkICVkIgorCSAgICIgIG5ieXRlcyAlZCAgZmxhZ3MgJXggIHZsYW4gJXhcbiIsCisJICAgdHhfYmQsIHR4X2JkLT5hZGRyX2hpLCB0eF9iZC0+YWRkcl9sbywgbGUxNl90b19jcHUodHhfYmQtPm5iZCksCisJICAgbGUxNl90b19jcHUodHhfYmQtPm5ieXRlcyksIHR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCwKKwkgICBsZTE2X3RvX2NwdSh0eF9iZC0+dmxhbikpOworCisJaWYgKHhtaXRfdHlwZSAmIFhNSVRfR1NPKSB7CisKKwkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKKwkJICAgIlRTTyBwYWNrZXQgbGVuICVkICBobGVuICVkICB0b3RhbCBsZW4gJWQgIHRzbyBzaXplICVkXG4iLAorCQkgICBza2ItPmxlbiwgaGxlbiwgc2tiX2hlYWRsZW4oc2tiKSwKKwkJICAgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7CisKKwkJdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9IEVUSF9UWF9CRF9GTEFHU19TV19MU087CisKKwkJaWYgKHVubGlrZWx5KHNrYl9oZWFkbGVuKHNrYikgPiBobGVuKSkKKwkJCWJkX3Byb2QgPSBibngyeF90eF9zcGxpdChicCwgZnAsICZ0eF9iZCwgaGxlbiwKKwkJCQkJCSBiZF9wcm9kLCArK25iZCk7CisKKwkJcGJkLT5sc29fbXNzID0gY3B1X3RvX2xlMTYoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7CisJCXBiZC0+dGNwX3NlbmRfc2VxID0gc3dhYjMyKHRjcF9oZHIoc2tiKS0+c2VxKTsKKwkJcGJkLT50Y3BfZmxhZ3MgPSBwYmRfdGNwX2ZsYWdzKHNrYik7CisKKwkJaWYgKHhtaXRfdHlwZSAmIFhNSVRfR1NPX1Y0KSB7CisJCQlwYmQtPmlwX2lkID0gc3dhYjE2KGlwX2hkcihza2IpLT5pZCk7CisJCQlwYmQtPnRjcF9wc2V1ZG9fY3N1bSA9CisJCQkJc3dhYjE2KH5jc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0+c2FkZHIsCisJCQkJCQkJICBpcF9oZHIoc2tiKS0+ZGFkZHIsCisJCQkJCQkJICAwLCBJUFBST1RPX1RDUCwgMCkpOworCisJCX0gZWxzZQorCQkJcGJkLT50Y3BfcHNldWRvX2NzdW0gPQorCQkJCXN3YWIxNih+Y3N1bV9pcHY2X21hZ2ljKCZpcHY2X2hkcihza2IpLT5zYWRkciwKKwkJCQkJCQkmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsCisJCQkJCQkJMCwgSVBQUk9UT19UQ1AsIDApKTsKKworCQlwYmQtPmdsb2JhbF9kYXRhIHw9IEVUSF9UWF9QQVJTRV9CRF9QU0VVRE9fQ1NfV0lUSE9VVF9MRU47CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgeworCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisKKwkJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKKwkJdHhfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXTsKKworCQltYXBwaW5nID0gcGNpX21hcF9wYWdlKGJwLT5wZGV2LCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkgICAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJdHhfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOworCQl0eF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7CisJCXR4X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihmcmFnLT5zaXplKTsKKwkJdHhfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7CisJCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IDA7CisKKwkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKKwkJICAgImZyYWcgJWQgIGJkIEAlcCAgYWRkciAoJXg6JXgpICBuYnl0ZXMgJWQgIGZsYWdzICV4XG4iLAorCQkgICBpLCB0eF9iZCwgdHhfYmQtPmFkZHJfaGksIHR4X2JkLT5hZGRyX2xvLAorCQkgICBsZTE2X3RvX2NwdSh0eF9iZC0+bmJ5dGVzKSwgdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkKTsKKwl9CisKKwkvKiBub3cgYXQgbGFzdCBtYXJrIHRoZSBCRCBhcyB0aGUgbGFzdCBCRCAqLworCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfRU5EX0JEOworCisJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwgImxhc3QgYmQgQCVwICBmbGFncyAleFxuIiwKKwkgICB0eF9iZCwgdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkKTsKKworCWJkX3Byb2QgPSBUWF9CRChORVhUX1RYX0lEWChiZF9wcm9kKSk7CisKKwkvKiBub3cgc2VuZCBhIHR4IGRvb3JiZWxsLCBjb3VudGluZyB0aGUgbmV4dCBCRAorCSAqIGlmIHRoZSBwYWNrZXQgY29udGFpbnMgb3IgZW5kcyB3aXRoIGl0CisJICovCisJaWYgKFRYX0JEX1BPRkYoYmRfcHJvZCkgPCBuYmQpCisJCW5iZCsrOworCisJaWYgKHBiZCkKKwkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKKwkJICAgIlBCRCBAJXAgIGlwX2RhdGEgJXggIGlwX2hsZW4gJXUgIGlwX2lkICV1ICBsc29fbXNzICV1IgorCQkgICAiICB0Y3BfZmxhZ3MgJXggIHhzdW0gJXggIHNlcSAldSAgaGxlbiAldVxuIiwKKwkJICAgcGJkLCBwYmQtPmdsb2JhbF9kYXRhLCBwYmQtPmlwX2hsZW4sIHBiZC0+aXBfaWQsCisJCSAgIHBiZC0+bHNvX21zcywgcGJkLT50Y3BfZmxhZ3MsIHBiZC0+dGNwX3BzZXVkb19jc3VtLAorCQkgICBwYmQtPnRjcF9zZW5kX3NlcSwgbGUxNl90b19jcHUocGJkLT50b3RhbF9obGVuKSk7CisKKwlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAiZG9vcmJlbGw6IG5iZCAlZCAgYmQgJXVcbiIsIG5iZCwgYmRfcHJvZCk7CisKKwlmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kID0KKwkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCkgKyBuYmQpOworCW1iKCk7IC8qIEZXIHJlc3RyaWN0aW9uOiBtdXN0IG5vdCByZW9yZGVyIHdyaXRpbmcgbmJkIGFuZCBwYWNrZXRzICovCisJZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QgPQorCQljcHVfdG9fbGUzMihsZTMyX3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCkgKyAxKTsKKwlET09SQkVMTChicCwgRlBfSURYKGZwKSwgMCk7CisKKwltbWlvd2IoKTsKKworCWZwLT50eF9iZF9wcm9kICs9IG5iZDsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCWlmICh1bmxpa2VseShibngyeF90eF9hdmFpbChmcCkgPCBNQVhfU0tCX0ZSQUdTICsgMykpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlicC0+ZXRoX3N0YXRzLmRyaXZlcl94b2ZmKys7CisJCWlmIChibngyeF90eF9hdmFpbChmcCkgPj0gTUFYX1NLQl9GUkFHUyArIDMpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQorCWZwLT50eF9wa3QrKzsKKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKy8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLworc3RhdGljIGludCBibngyeF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7CisKKwlyZXR1cm4gYm54MnhfbmljX2xvYWQoYnAsIExPQURfT1BFTik7Cit9CisKKy8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLworc3RhdGljIGludCBibngyeF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogVW5sb2FkIHRoZSBkcml2ZXIsIHJlbGVhc2UgSVJRcyAqLworCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9DTE9TRSk7CisJaWYgKGF0b21pY19yZWFkKCZicC0+cGRldi0+ZW5hYmxlX2NudCkgPT0gMSkKKwkJaWYgKCFDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QzaG90KTsKKworCXJldHVybiAwOworfQorCisvKiBjYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGZyb20gc2V0X211bHRpY2FzdCAqLworc3RhdGljIHZvaWQgYm54Mnhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgcnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9STUFMOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisKKwlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pIHsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJzdGF0ZSBpcyAleCwgcmV0dXJuaW5nXG4iLCBicC0+c3RhdGUpOworCQlyZXR1cm47CisJfQorCisJRFAoTkVUSUZfTVNHX0lGVVAsICJkZXYtPmZsYWdzID0gJXhcbiIsIGRldi0+ZmxhZ3MpOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJcnhfbW9kZSA9IEJOWDJYX1JYX01PREVfUFJPTUlTQzsKKworCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAorCQkgKChkZXYtPm1jX2NvdW50ID4gQk5YMlhfTUFYX01VTFRJQ0FTVCkgJiYgQ0hJUF9JU19FMShicCkpKQorCQlyeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9BTExNVUxUSTsKKworCWVsc2UgeyAvKiBzb21lIG11bHRpY2FzdHMgKi8KKwkJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCQlpbnQgaSwgb2xkLCBvZmZzZXQ7CisJCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKKwkJCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgKmNvbmZpZyA9CisJCQkJCQlibngyeF9zcChicCwgbWNhc3RfY29uZmlnKTsKKworCQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OworCQkJICAgICBtY2xpc3QgJiYgKGkgPCBkZXYtPm1jX2NvdW50KTsKKwkJCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKworCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgorCQkJCQljYW1fZW50cnkubXNiX21hY19hZGRyID0KKwkJCQkJc3dhYjE2KCoodTE2ICopJm1jbGlzdC0+ZG1pX2FkZHJbMF0pOworCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgorCQkJCQljYW1fZW50cnkubWlkZGxlX21hY19hZGRyID0KKwkJCQkJc3dhYjE2KCoodTE2ICopJm1jbGlzdC0+ZG1pX2FkZHJbMl0pOworCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgorCQkJCQljYW1fZW50cnkubHNiX21hY19hZGRyID0KKwkJCQkJc3dhYjE2KCoodTE2ICopJm1jbGlzdC0+ZG1pX2FkZHJbNF0pOworCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLmNhbV9lbnRyeS5mbGFncyA9CisJCQkJCQkJY3B1X3RvX2xlMTYocG9ydCk7CisJCQkJY29uZmlnLT5jb25maWdfdGFibGVbaV0uCisJCQkJCXRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9IDA7CisJCQkJY29uZmlnLT5jb25maWdfdGFibGVbaV0uCisJCQkJCXRhcmdldF90YWJsZV9lbnRyeS5jbGllbnRfaWQgPSAwOworCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgorCQkJCQl0YXJnZXRfdGFibGVfZW50cnkudmxhbl9pZCA9IDA7CisKKwkJCQlEUChORVRJRl9NU0dfSUZVUCwKKwkJCQkgICAic2V0dGluZyBNQ0FTVFslZF0gKCUwNHg6JTA0eDolMDR4KVxuIiwgaSwKKwkJCQkgICBjb25maWctPmNvbmZpZ190YWJsZVtpXS4KKwkJCQkJCWNhbV9lbnRyeS5tc2JfbWFjX2FkZHIsCisJCQkJICAgY29uZmlnLT5jb25maWdfdGFibGVbaV0uCisJCQkJCQljYW1fZW50cnkubWlkZGxlX21hY19hZGRyLAorCQkJCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgorCQkJCQkJY2FtX2VudHJ5LmxzYl9tYWNfYWRkcik7CisJCQl9CisJCQlvbGQgPSBjb25maWctPmhkci5sZW5ndGhfNmI7CisJCQlpZiAob2xkID4gaSkgeworCQkJCWZvciAoOyBpIDwgb2xkOyBpKyspIHsKKwkJCQkJaWYgKENBTV9JU19JTlZBTElEKGNvbmZpZy0+CisJCQkJCQkJICAgY29uZmlnX3RhYmxlW2ldKSkgeworCQkJCQkJaS0tOyAvKiBhbHJlYWR5IGludmFsaWRhdGVkICovCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQkvKiBpbnZhbGlkYXRlICovCisJCQkJCUNBTV9JTlZBTElEQVRFKGNvbmZpZy0+CisJCQkJCQkgICAgICAgY29uZmlnX3RhYmxlW2ldKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJCQlvZmZzZXQgPSBCTlgyWF9NQVhfRU1VTF9NVUxUSSooMSArIHBvcnQpOworCQkJZWxzZQorCQkJCW9mZnNldCA9IEJOWDJYX01BWF9NVUxUSUNBU1QqKDEgKyBwb3J0KTsKKworCQkJY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gaTsKKwkJCWNvbmZpZy0+aGRyLm9mZnNldCA9IG9mZnNldDsKKwkJCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwkJCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CisKKwkJCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCisJCQkJICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1jYXN0X2NvbmZpZykpLAorCQkJCSAgIFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBtY2FzdF9jb25maWcpKSwKKwkJCQkgICAgICAwKTsKKwkJfSBlbHNlIHsgLyogRTFIICovCisJCQkvKiBBY2NlcHQgb25lIG9yIG1vcmUgbXVsdGljYXN0cyAqLworCQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisJCQl1MzIgbWNfZmlsdGVyW01DX0hBU0hfU0laRV07CisJCQl1MzIgY3JjLCBiaXQsIHJlZ2lkeDsKKwkJCWludCBpOworCisJCQltZW1zZXQobWNfZmlsdGVyLCAwLCA0ICogTUNfSEFTSF9TSVpFKTsKKworCQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OworCQkJICAgICBtY2xpc3QgJiYgKGkgPCBkZXYtPm1jX2NvdW50KTsKKwkJCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKworCQkJCURQKE5FVElGX01TR19JRlVQLCAiQWRkaW5nIG1jYXN0IE1BQzogIgorCQkJCSAgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCQkgICBtY2xpc3QtPmRtaV9hZGRyWzBdLCBtY2xpc3QtPmRtaV9hZGRyWzFdLAorCQkJCSAgIG1jbGlzdC0+ZG1pX2FkZHJbMl0sIG1jbGlzdC0+ZG1pX2FkZHJbM10sCisJCQkJICAgbWNsaXN0LT5kbWlfYWRkcls0XSwgbWNsaXN0LT5kbWlfYWRkcls1XSk7CisKKwkJCQljcmMgPSBjcmMzMmNfbGUoMCwgbWNsaXN0LT5kbWlfYWRkciwgRVRIX0FMRU4pOworCQkJCWJpdCA9IChjcmMgPj4gMjQpICYgMHhmZjsKKwkJCQlyZWdpZHggPSBiaXQgPj4gNTsKKwkJCQliaXQgJj0gMHgxZjsKKwkJCQltY19maWx0ZXJbcmVnaWR4XSB8PSAoMSA8PCBiaXQpOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgTUNfSEFTSF9TSVpFOyBpKyspCisJCQkJUkVHX1dSKGJwLCBNQ19IQVNIX09GRlNFVChicCwgaSksCisJCQkJICAgICAgIG1jX2ZpbHRlcltpXSk7CisJCX0KKwl9CisKKwlicC0+cnhfbW9kZSA9IHJ4X21vZGU7CisJYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoYnApOworfQorCisvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3N0YXRpYyBpbnQgYm54MnhfY2hhbmdlX21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcigodTggKikoYWRkci0+c2FfZGF0YSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWlmIChDSElQX0lTX0UxKGJwKSkKKwkJCWJueDJ4X3NldF9tYWNfYWRkcl9lMShicCk7CisJCWVsc2UKKwkJCWJueDJ4X3NldF9tYWNfYWRkcl9lMWgoYnApOworCX0KKworCXJldHVybiAwOworfQorCisvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3N0YXRpYyBpbnQgYm54MnhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKGlmcik7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR01JSVBIWToKKwkJZGF0YS0+cGh5X2lkID0gYnAtPnBvcnQucGh5X2FkZHI7CisKKwkJLyogZmFsbHRocm91Z2ggKi8KKworCWNhc2UgU0lPQ0dNSUlSRUc6IHsKKwkJdTE2IG1paV9yZWd2YWw7CisKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQltdXRleF9sb2NrKCZicC0+cG9ydC5waHlfbXV0ZXgpOworCQllcnIgPSBibngyeF9jbDQ1X3JlYWQoYnAsIEJQX1BPUlQoYnApLCAwLCBicC0+cG9ydC5waHlfYWRkciwKKwkJCQkgICAgICBERUZBVUxUX1BIWV9ERVZfQUREUiwKKwkJCQkgICAgICAoZGF0YS0+cmVnX251bSAmIDB4MWYpLCAmbWlpX3JlZ3ZhbCk7CisJCWRhdGEtPnZhbF9vdXQgPSBtaWlfcmVndmFsOworCQltdXRleF91bmxvY2soJmJwLT5wb3J0LnBoeV9tdXRleCk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2FzZSBTSU9DU01JSVJFRzoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCW11dGV4X2xvY2soJmJwLT5wb3J0LnBoeV9tdXRleCk7CisJCWVyciA9IGJueDJ4X2NsNDVfd3JpdGUoYnAsIEJQX1BPUlQoYnApLCAwLCBicC0+cG9ydC5waHlfYWRkciwKKwkJCQkgICAgICAgREVGQVVMVF9QSFlfREVWX0FERFIsCisJCQkJICAgICAgIChkYXRhLT5yZWdfbnVtICYgMHgxZiksIGRhdGEtPnZhbF9pbik7CisJCW11dGV4X3VubG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKKwkJcmV0dXJuIGVycjsKKworCWRlZmF1bHQ6CisJCS8qIGRvIG5vdGhpbmcgKi8KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KK3N0YXRpYyBpbnQgYm54MnhfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmMgPSAwOworCisJaWYgKChuZXdfbXR1ID4gRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSkgfHwKKwkgICAgKChuZXdfbXR1ICsgRVRIX0hMRU4pIDwgRVRIX01JTl9QQUNLRVRfU0laRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhpcyBkb2VzIG5vdCByYWNlIHdpdGggcGFja2V0IGFsbG9jYXRpb24KKwkgKiBiZWNhdXNlIHRoZSBhY3R1YWwgYWxsb2Mgc2l6ZSBpcworCSAqIG9ubHkgdXBkYXRlZCBhcyBwYXJ0IG9mIGxvYWQKKwkgKi8KKwlkZXYtPm10dSA9IG5ld19tdHU7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOworCQlyYyA9IGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBibngyeF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJaWYgKCFicC0+cGFuaWMpCisJCWJueDJ4X3BhbmljKCk7CisjZW5kaWYKKwkvKiBUaGlzIGFsbG93cyB0aGUgbmV0aWYgdG8gYmUgc2h1dGRvd24gZ3JhY2VmdWxseSBiZWZvcmUgcmVzZXR0aW5nICovCisJc2NoZWR1bGVfd29yaygmYnAtPnJlc2V0X3Rhc2spOworfQorCisjaWZkZWYgQkNNX1ZMQU4KKy8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLworc3RhdGljIHZvaWQgYm54Mnhfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCB2bGFuX2dyb3VwICp2bGdycCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWJwLT52bGdycCA9IHZsZ3JwOworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCWJueDJ4X3NldF9jbGllbnRfY29uZmlnKGJwKTsKK30KKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfUE9MTF9DT05UUk9MTEVSKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSKQorc3RhdGljIHZvaWQgcG9sbF9ibngyeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGlzYWJsZV9pcnEoYnAtPnBkZXYtPmlycSk7CisJYm54MnhfaW50ZXJydXB0KGJwLT5wZGV2LT5pcnEsIGRldik7CisJZW5hYmxlX2lycShicC0+cGRldi0+aXJxKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwOworCWludCByYzsKKworCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CisJYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJYnAtPmRldiA9IGRldjsKKwlicC0+cGRldiA9IHBkZXY7CisJYnAtPmZsYWdzID0gMDsKKwlicC0+ZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmdcbiIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIFBDSSBkZXZpY2UgYmFzZSBhZGRyZXNzLCIKKwkJICAgICAgICIgYWJvcnRpbmdcbiIpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9kaXNhYmxlOworCX0KKworCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfTUVNKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZmluZCBzZWNvbmQgUENJIGRldmljZSIKKwkJICAgICAgICIgYmFzZSBhZGRyZXNzLCBhYm9ydGluZ1xuIik7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGU7CisJfQorCisJaWYgKGF0b21pY19yZWFkKCZwZGV2LT5lbmFibGVfY250KSA9PSAxKSB7CisJCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpOworCQlpZiAocmMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywiCisJCQkgICAgICAgIiBhYm9ydGluZ1xuIik7CisJCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKKwkJfQorCisJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwl9CisKKwlicC0+cG1fY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKKwlpZiAoYnAtPnBtX2NhcCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIHBvd2VyIG1hbmFnZW1lbnQiCisJCSAgICAgICAiIGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKKwl9CisKKwlicC0+cGNpZV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoYnAtPnBjaWVfY2FwID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGZpbmQgUENJIEV4cHJlc3MgY2FwYWJpbGl0eSwiCisJCSAgICAgICAiIGFib3J0aW5nXG4iKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKKwl9CisKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykgPT0gMCkgeworCQlicC0+ZmxhZ3MgfD0gVVNJTkdfREFDX0ZMQUc7CisJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggInBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayIKKwkJCSAgICAgICAiIGZhaWxlZCwgYWJvcnRpbmdcbiIpOworCQkJcmMgPSAtRUlPOworCQkJZ290byBlcnJfb3V0X3JlbGVhc2U7CisJCX0KKworCX0gZWxzZSBpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBETUEsIgorCQkgICAgICAgIiBhYm9ydGluZ1xuIik7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJfb3V0X3JlbGVhc2U7CisJfQorCisJZGV2LT5tZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJZGV2LT5iYXNlX2FkZHIgPSBkZXYtPm1lbV9zdGFydDsKKwlkZXYtPm1lbV9lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIDApOworCisJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisKKwlicC0+cmVndmlldyA9IGlvcmVtYXBfbm9jYWNoZShkZXYtPmJhc2VfYWRkciwKKwkJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAoIWJwLT5yZWd2aWV3KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgcmVnaXN0ZXIgc3BhY2UsIGFib3J0aW5nXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKKwl9CisKKwlicC0+ZG9vcmJlbGxzID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwKKwkJCQkJbWluX3QodTY0LCBCTlgyWF9EQl9TSVpFLAorCQkJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpKSk7CisJaWYgKCFicC0+ZG9vcmJlbGxzKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgZG9vcmJlbGwgc3BhY2UsIGFib3J0aW5nXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfdW5tYXA7CisJfQorCisJYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDApOworCisJLyogY2xlYW4gaW5kaXJlY3QgYWRkcmVzc2VzICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicC0+cGRldiwgUENJQ0ZHX0dSQ19BRERSRVNTLAorCQkJICAgICAgIFBDSUNGR19WRU5ET1JfSURfT0ZGU0VUKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzg4X0YwICsgQlBfUE9SVChicCkqMTYsIDApOworCVJFR19XUihicCwgUFhQMl9SRUdfUEdMX0FERFJfOENfRjAgKyBCUF9QT1JUKGJwKSoxNiwgMCk7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19QR0xfQUREUl85MF9GMCArIEJQX1BPUlQoYnApKjE2LCAwKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzk0X0YwICsgQlBfUE9SVChicCkqMTYsIDApOworCisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBibngyeF9zdGFydF94bWl0OworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOworCisJZGV2LT5ldGh0b29sX29wcyA9ICZibngyeF9ldGh0b29sX29wczsKKwlkZXYtPm9wZW4gPSBibngyeF9vcGVuOworCWRldi0+c3RvcCA9IGJueDJ4X2Nsb3NlOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gYm54Mnhfc2V0X3J4X21vZGU7CisJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBibngyeF9jaGFuZ2VfbWFjX2FkZHI7CisJZGV2LT5kb19pb2N0bCA9IGJueDJ4X2lvY3RsOworCWRldi0+Y2hhbmdlX210dSA9IGJueDJ4X2NoYW5nZV9tdHU7CisJZGV2LT50eF90aW1lb3V0ID0gYm54MnhfdHhfdGltZW91dDsKKyNpZmRlZiBCQ01fVkxBTgorCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGJueDJ4X3ZsYW5fcnhfcmVnaXN0ZXI7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfUE9MTF9DT05UUk9MTEVSKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSKQorCWRldi0+cG9sbF9jb250cm9sbGVyID0gcG9sbF9ibngyeDsKKyNlbmRpZgorCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwlpZiAoYnAtPmZsYWdzICYgVVNJTkdfREFDX0ZMQUcpCisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworI2lmZGVmIEJDTV9WTEFOCisJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYKTsKKyNlbmRpZgorCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKworCXJldHVybiAwOworCitlcnJfb3V0X3VubWFwOgorCWlmIChicC0+cmVndmlldykgeworCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKKwkJYnAtPnJlZ3ZpZXcgPSBOVUxMOworCX0KKwlpZiAoYnAtPmRvb3JiZWxscykgeworCQlpb3VubWFwKGJwLT5kb29yYmVsbHMpOworCQlicC0+ZG9vcmJlbGxzID0gTlVMTDsKKwl9CisKK2Vycl9vdXRfcmVsZWFzZToKKwlpZiAoYXRvbWljX3JlYWQoJnBkZXYtPmVuYWJsZV9jbnQpID09IDEpCisJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisKK2Vycl9vdXRfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCitlcnJfb3V0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfZ2V0X3BjaWVfd2lkdGgoc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgdmFsID0gUkVHX1JEKGJwLCBQQ0lDRkdfT0ZGU0VUICsgUENJQ0ZHX0xJTktfQ09OVFJPTCk7CisKKwl2YWwgPSAodmFsICYgUENJQ0ZHX0xJTktfV0lEVEgpID4+IFBDSUNGR19MSU5LX1dJRFRIX1NISUZUOworCXJldHVybiB2YWw7Cit9CisKKy8qIHJldHVybiB2YWx1ZSBvZiAxPTIuNUdIeiAyPTVHSHogKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2dldF9wY2llX3NwZWVkKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbCA9IFJFR19SRChicCwgUENJQ0ZHX09GRlNFVCArIFBDSUNGR19MSU5LX0NPTlRST0wpOworCisJdmFsID0gKHZhbCAmIFBDSUNGR19MSU5LX1NQRUVEKSA+PiBQQ0lDRkdfTElOS19TUEVFRF9TSElGVDsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdGF0aWMgaW50IHZlcnNpb25fcHJpbnRlZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgYm54MnggKmJwOworCWludCByYzsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCWlmICh2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQorCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOworCisJLyogZGV2IHplcm9lZCBpbiBpbml0X2V0aGVyZGV2ICovCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpicCkpOworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlicC0+bXNnbGV2ZWwgPSBkZWJ1ZzsKKworCXJjID0gYm54MnhfaW5pdF9kZXYocGRldiwgZGV2KTsKKwlpZiAocmMgPCAwKSB7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIik7CisJCWdvdG8gaW5pdF9vbmVfZXhpdDsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKworCXJjID0gYm54MnhfaW5pdF9icChicCk7CisJaWYgKHJjKSB7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWdvdG8gaW5pdF9vbmVfZXhpdDsKKwl9CisKKwlicC0+Y29tbW9uLm5hbWUgPSBib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm5hbWU7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzICglYyVkKSBQQ0ktRSB4JWQgJXMgZm91bmQgYXQgbWVtICVseCwiCisJICAgICAgICIgSVJRICVkLCAiLCBkZXYtPm5hbWUsIGJwLT5jb21tb24ubmFtZSwKKwkgICAgICAgKENISVBfUkVWKGJwKSA+PiAxMikgKyAnQScsIChDSElQX01FVEFMKGJwKSA+PiA0KSwKKwkgICAgICAgYm54MnhfZ2V0X3BjaWVfd2lkdGgoYnApLAorCSAgICAgICAoYm54MnhfZ2V0X3BjaWVfc3BlZWQoYnApID09IDIpID8gIjVHSHogKEdlbjIpIiA6ICIyLjVHSHoiLAorCSAgICAgICBkZXYtPmJhc2VfYWRkciwgYnAtPnBkZXYtPmlycSk7CisJcHJpbnRrKEtFUk5fQ09OVCAibm9kZSBhZGRyICVzXG4iLCBwcmludF9tYWMobWFjLCBkZXYtPmRldl9hZGRyKSk7CisJcmV0dXJuIDA7CisKK2luaXRfb25lX2V4aXQ6CisJaWYgKGJwLT5yZWd2aWV3KQorCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKKworCWlmIChicC0+ZG9vcmJlbGxzKQorCQlpb3VubWFwKGJwLT5kb29yYmVsbHMpOworCisJZnJlZV9uZXRkZXYoZGV2KTsKKworCWlmIChhdG9taWNfcmVhZCgmcGRldi0+ZW5hYmxlX2NudCkgPT0gMSkKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBibngyeF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJueDJ4ICpicDsKKworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOworCQlyZXR1cm47CisJfQorCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKKwlpZiAoYnAtPnJlZ3ZpZXcpCisJCWlvdW5tYXAoYnAtPnJlZ3ZpZXcpOworCisJaWYgKGJwLT5kb29yYmVsbHMpCisJCWlvdW5tYXAoYnAtPmRvb3JiZWxscyk7CisKKwlmcmVlX25ldGRldihkZXYpOworCisJaWYgKGF0b21pY19yZWFkKCZwZGV2LT5lbmFibGVfY250KSA9PSAxKQorCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK30KKworc3RhdGljIGludCBibngyeF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYm54MnggKmJwOworCisJaWYgKCFkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQkFEIG5ldCBkZXZpY2UgZnJvbSBibngyeF9pbml0X29uZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlydG5sX2xvY2soKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCisJYm54MnhfbmljX3VubG9hZChicCwgVU5MT0FEX05PUk1BTCk7CisKKwlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJ0bmxfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYm54MnggKmJwOworCWludCByYzsKKworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcnRubF9sb2NrKCk7CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiAwOworCX0KKworCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QwKTsKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisKKwlyYyA9IGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7CisKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGJueDJ4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZworICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGJueDJ4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkJcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcnRubF9sb2NrKCk7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfQ0xPU0UpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcnRubF91bmxvY2soKTsKKworCS8qIFJlcXVlc3QgYSBzbG90IHJlc2V0ICovCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7Cit9CisKKy8qKgorICogYm54MnhfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgUENJIGJ1cyBoYXMgYmVlbiByZXNldAorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBibngyeF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlydG5sX2xvY2soKTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0XG4iKTsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7CisKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworLyoqCisgKiBibngyeF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXQKKyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgYm54MnhfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlydG5sX2xvY2soKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCWJueDJ4X25pY19sb2FkKGJwLCBMT0FEX09QRU4pOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCisJcnRubF91bmxvY2soKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgYm54MnhfZXJyX2hhbmRsZXIgPSB7CisJLmVycm9yX2RldGVjdGVkID0gYm54MnhfaW9fZXJyb3JfZGV0ZWN0ZWQsCisJLnNsb3RfcmVzZXQgPSBibngyeF9pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUgPSBibngyeF9pb19yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm54MnhfcGNpX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgPSBEUlZfTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgID0gYm54MnhfcGNpX3RibCwKKwkucHJvYmUgICAgICAgPSBibngyeF9pbml0X29uZSwKKwkucmVtb3ZlICAgICAgPSBfX2RldmV4aXRfcChibngyeF9yZW1vdmVfb25lKSwKKwkuc3VzcGVuZCAgICAgPSBibngyeF9zdXNwZW5kLAorCS5yZXN1bWUgICAgICA9IGJueDJ4X3Jlc3VtZSwKKwkuZXJyX2hhbmRsZXIgPSAmYm54MnhfZXJyX2hhbmRsZXIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBibngyeF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJueDJ4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYm54MnhfY2xlYW51cCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYm54MnhfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGJueDJ4X2luaXQpOworbW9kdWxlX2V4aXQoYm54MnhfY2xlYW51cCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKaW5kZXggNWExYWEwYi4uMTVjOWE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKQEAgLTM4LDIxICszOCwxOSBAQAogICAgd2FzIGFzc2VydGVkLiAqLwogI2RlZmluZSBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfMAkJCQkgMHg2MDBjOAogI2RlZmluZSBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfMQkJCQkgMHg2MDBjYwotI2RlZmluZSBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfMgkJCQkgMHg2MDBkMAotI2RlZmluZSBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfMwkJCQkgMHg2MDBkNAogI2RlZmluZSBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfNAkJCQkgMHg2MDBkOAogLyogW1NUIDMyXSBUaGUgbnVtYmVyIG9mIGN5Y2xlcyB0aGF0IHRoZSBwYXVzZSBzaWduYWwgdG93YXJkcyBNQUMgIzAgd2FzCiAgICBhc3NlcnRlZC4gKi8KICNkZWZpbmUgQlJCMV9SRUdfTlVNX09GX1BBVVNFX0NZQ0xFU18wCQkJCSAweDYwMGI4CiAjZGVmaW5lIEJSQjFfUkVHX05VTV9PRl9QQVVTRV9DWUNMRVNfMQkJCQkgMHg2MDBiYwotI2RlZmluZSBCUkIxX1JFR19OVU1fT0ZfUEFVU0VfQ1lDTEVTXzIJCQkJIDB4NjAwYzAKLSNkZWZpbmUgQlJCMV9SRUdfTlVNX09GX1BBVVNFX0NZQ0xFU18zCQkJCSAweDYwMGM0CiAvKiBbUlcgMTBdIFdyaXRlIGNsaWVudCAwOiBEZS1hc3NlcnQgcGF1c2UgdGhyZXNob2xkLiAqLwogI2RlZmluZSBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8wIAkJCSAweDYwMDc4CiAjZGVmaW5lIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzEgCQkJIDB4NjAwN2MKIC8qIFtSVyAxMF0gV3JpdGUgY2xpZW50IDA6IEFzc2VydCBwYXVzZSB0aHJlc2hvbGQuICovCiAjZGVmaW5lIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMAkJCQkgMHg2MDA2OAogI2RlZmluZSBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzEJCQkJIDB4NjAwNmMKKy8qIFtSIDI0XSBUaGUgbnVtYmVyIG9mIGZ1bGwgYmxvY2tzIG9jY3BpZWQgYnkgcG9ydC4gKi8KKyNkZWZpbmUgQlJCMV9SRUdfUE9SVF9OVU1fT0NDX0JMT0NLU18wCQkJCSAweDYwMDk0CiAvKiBbUlcgMV0gUmVzZXQgdGhlIGRlc2lnbiBieSBzb2Z0d2FyZS4gKi8KICNkZWZpbmUgQlJCMV9SRUdfU09GVF9SRVNFVAkJCQkJIDB4NjAwZGMKIC8qIFtSIDVdIFVzZWQgdG8gcmVhZCB0aGUgdmFsdWUgb2YgdGhlIFhYIHByb3RlY3Rpb24gQ0FNIG9jY3VwYW5jeSBjb3VudGVyLiAqLwpAQCAtNzIsNiArNzAsOCBAQAogI2RlZmluZSBDQ01fUkVHX0NDTV9JTlRfTUFTSwkJCQkJIDB4ZDAxZTQKIC8qIFtSIDExXSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCAqLwogI2RlZmluZSBDQ01fUkVHX0NDTV9JTlRfU1RTCQkJCQkgMHhkMDFkOAorLyogW1IgMjddIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCisjZGVmaW5lIENDTV9SRUdfQ0NNX1BSVFlfU1RTCQkJCQkgMHhkMDFlOAogLyogW1JXIDNdIFRoZSBzaXplIG9mIEFHIGNvbnRleHQgcmVnaW9uIDAgaW4gUkVHLXBhaXJzLiBEZXNpZ25hdGVzIHRoZSBNUwogICAgUkVHLXBhaXIgbnVtYmVyIChlLmcuIGlmIHJlZ2lvbiAwIGlzIDYgUkVHLXBhaXJzOyB0aGUgdmFsdWUgc2hvdWxkIGJlIDUpLgogICAgSXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiB0aGUgQUcgY29udGV4dCBSRUctcGFpcnMgd3JpdHRlbiBiYWNrOwpAQCAtMTkwLDI1ICsxOTAsMjAgQEAKICAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAogICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLwogI2RlZmluZSBDQ01fUkVHX1BCRl9XRUlHSFQJCQkJCSAweGQwMGFjCi0vKiBbUlcgNl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBvZiBxdWV1ZSBudW1iZXIgMSBwZXIgcG9ydCBpbmRleC4gKi8KICNkZWZpbmUgQ0NNX1JFR19QSFlTX1FOVU0xXzAJCQkJCSAweGQwMTM0CiAjZGVmaW5lIENDTV9SRUdfUEhZU19RTlVNMV8xCQkJCQkgMHhkMDEzOAotLyogW1JXIDZdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgb2YgcXVldWUgbnVtYmVyIDIgcGVyIHBvcnQgaW5kZXguICovCiAjZGVmaW5lIENDTV9SRUdfUEhZU19RTlVNMl8wCQkJCQkgMHhkMDEzYwogI2RlZmluZSBDQ01fUkVHX1BIWVNfUU5VTTJfMQkJCQkJIDB4ZDAxNDAKLS8qIFtSVyA2XSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIG9mIHF1ZXVlIG51bWJlciAzIHBlciBwb3J0IGluZGV4LiAqLwogI2RlZmluZSBDQ01fUkVHX1BIWVNfUU5VTTNfMAkJCQkJIDB4ZDAxNDQKLS8qIFtSVyA2XSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIG9mIHF1ZXVlIG51bWJlciAwIHdpdGggUU9TIGVxdWFsIDAgcG9ydAotICAgaW5kZXggMC4gKi8KKyNkZWZpbmUgQ0NNX1JFR19QSFlTX1FOVU0zXzEJCQkJCSAweGQwMTQ4CiAjZGVmaW5lIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMAkJCQkgMHhkMDExNAogI2RlZmluZSBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzEJCQkJIDB4ZDAxMTgKLS8qIFtSVyA2XSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIG9mIHF1ZXVlIG51bWJlciAwIHdpdGggUU9TIGVxdWFsIDEgcG9ydAotICAgaW5kZXggMC4gKi8KICNkZWZpbmUgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wCQkJCSAweGQwMTFjCiAjZGVmaW5lIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMQkJCQkgMHhkMDEyMAotLyogW1JXIDZdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgb2YgcXVldWUgbnVtYmVyIDAgd2l0aCBRT1MgZXF1YWwgMiBwb3J0Ci0gICBpbmRleCAwLiAqLwogI2RlZmluZSBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAJCQkJIDB4ZDAxMjQKKyNkZWZpbmUgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8xCQkJCSAweGQwMTI4CisjZGVmaW5lIENDTV9SRUdfUU9TX1BIWVNfUU5VTTNfMAkJCQkgMHhkMDEyYworI2RlZmluZSBDQ01fUkVHX1FPU19QSFlTX1FOVU0zXzEJCQkJIDB4ZDAxMzAKIC8qIFtSVyAxXSBTVE9STSAtIENNIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtMjUzLDYgKzI0OCw3IEBACiAgICBtZWNoYW5pc20uIFRoZSBmaWVsZHMgYXJlOiBbNTowXSAtIG1lc3NhZ2UgbGVuZ3RoOyBbMTI6Nl0gLSBtZXNzYWdlCiAgICBwb2ludGVyOyAxODoxM10gLSBuZXh0IHBvaW50ZXIuICovCiAjZGVmaW5lIENDTV9SRUdfWFhfREVTQ1JfVEFCTEUJCQkJCSAweGQwMzAwCisjZGVmaW5lIENDTV9SRUdfWFhfREVTQ1JfVEFCTEVfU0laRQkJCQkgMzYKIC8qIFtSIDddIFVzZWQgdG8gcmVhZCB0aGUgdmFsdWUgb2YgWFggcHJvdGVjdGlvbiBGcmVlIGNvdW50ZXIuICovCiAjZGVmaW5lIENDTV9SRUdfWFhfRlJFRSAJCQkJCSAweGQwMTg0CiAvKiBbUlcgNl0gSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyZWRpdCBjb3VudGVyOyByZXNwb25zaWJsZSBmb3IgZnVsZmlsbGluZwpAQCAtMjk2LDYgKzI5Miw4IEBACiAvKiBbV0IgMjRdIE1BVFQgcmFtIGFjY2Vzcy4gZWFjaCBlbnRyeSBoYXMgdGhlIGZvbGxvd2luZwogICAgZm9ybWF0OntSZWdpb25MZW5ndGhbMTE6MF07IGVnaW9uT2Zmc2V0WzExOjBdfSAqLwogI2RlZmluZSBDRFVfUkVHX01BVFQJCQkJCQkgMHgxMDExMDAKKy8qIFtSVyAxXSB3aGVuIHRoaXMgYml0IGlzIHNldCB0aGUgQ0RVIG9wZXJhdGVzIGluIGUxaG1mIG1vZGUgKi8KKyNkZWZpbmUgQ0RVX1JFR19NRl9NT0RFIAkJCQkJIDB4MTAxMDUwCiAvKiBbUiAxXSBpbmRpY2F0aW9uIHRoZSBpbml0aWFsaXppbmcgdGhlIGFjdGl2aXR5IGNvdW50ZXIgYnkgdGhlIGhhcmR3YXJlCiAgICB3YXMgZG9uZS4gKi8KICNkZWZpbmUgQ0ZDX1JFR19BQ19JTklUX0RPTkUJCQkJCSAweDEwNDA3OApAQCAtMzMwLDYgKzMyOCw5IEBACiAgICBmaWVsZCBhbGxvd3MgY2hhbmdpbmcgdGhlIHByaW9yaXRpZXMgb2YgdGhlIHdlaWdodGVkLXJvdW5kLXJvYmluIGFyYml0ZXIKICAgIHdoaWNoIHNlbGVjdHMgd2hpY2ggQ0ZDIGxvYWQgY2xpZW50IHNob3VsZCBiZSBzZXJ2ZWQgbmV4dCAqLwogI2RlZmluZSBDRkNfUkVHX0xDUkVRX1dFSUdIVFMJCQkJCSAweDEwNDA4NAorLyogW1JXIDE2XSBMaW5rIExpc3QgcmFtIGFjY2VzczsgZGF0YSA9IHtwcmV2X2xjaWQ7IGV4dF9sY2lkfSAqLworI2RlZmluZSBDRkNfUkVHX0xJTktfTElTVAkJCQkJIDB4MTA0YzAwCisjZGVmaW5lIENGQ19SRUdfTElOS19MSVNUX1NJWkUJCQkJCSAyNTYKIC8qIFtSIDFdIGluZGljYXRpb24gdGhlIGluaXRpYWxpemluZyB0aGUgbGluayBsaXN0IGJ5IHRoZSBoYXJkd2FyZSB3YXMgZG9uZS4gKi8KICNkZWZpbmUgQ0ZDX1JFR19MTF9JTklUX0RPTkUJCQkJCSAweDEwNDA3NAogLyogW1IgOV0gTnVtYmVyIG9mIGFsbG9jYXRlZCBMQ0lEcyB3aGljaCBhcmUgYXQgZW1wdHkgc3RhdGUgKi8KQEAgLTM0Miw2ICszNDMsNDUgQEAKICNkZWZpbmUgQ0ZDX1JFR19OVU1fTENJRFNfTEVBVklORwkJCQkgMHgxMDQwMTgKIC8qIFtSVyA4XSBUaGUgZXZlbnQgaWQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDAgKi8KICNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8wCQkJCSAweGMyMDM4CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMQkJCQkgMHhjMjAzYworI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEwCQkJCSAweGMyMDYwCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTEJCQkJIDB4YzIwNjQKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xMgkJCQkgMHhjMjA2OAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEzCQkJCSAweGMyMDZjCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4YzIwNzAKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xNQkJCQkgMHhjMjA3NAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE2CQkJCSAweGMyMDc4CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTcJCQkJIDB4YzIwN2MKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xOAkJCQkgMHhjMjA4MAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE5CQkJCSAweGMyMDg0CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMgkJCQkgMHhjMjA0MAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIwCQkJCSAweGMyMDg4CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjEJCQkJIDB4YzIwOGMKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yMgkJCQkgMHhjMjA5MAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIzCQkJCSAweGMyMDk0CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjQJCQkJIDB4YzIwOTgKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yNQkJCQkgMHhjMjA5YworI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI2CQkJCSAweGMyMGEwCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjcJCQkJIDB4YzIwYTQKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yOAkJCQkgMHhjMjBhOAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI5CQkJCSAweGMyMGFjCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMwkJCQkgMHhjMjA0NAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMwCQkJCSAweGMyMGIwCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzEJCQkJIDB4YzIwYjQKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF80CQkJCSAweGMyMDQ4CisvKiBbUlcgMV0gVGhlIFQgYml0IGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8wCQkJCQkgMHhjMjBiOAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMQkJCQkJIDB4YzIwYmMKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzEwCQkJCQkgMHhjMjBlMAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMTEJCQkJCSAweGMyMGU0CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xMgkJCQkJIDB4YzIwZTgKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzEzCQkJCQkgMHhjMjBlYworI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMTQJCQkJCSAweGMyMGYwCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xNQkJCQkJIDB4YzIwZjQKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzE2CQkJCQkgMHhjMjBmOAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMTcJCQkJCSAweGMyMGZjCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xOAkJCQkJIDB4YzIxMDAKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzE5CQkJCQkgMHhjMjEwNAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIENTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHhjMjAwOAogLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KQEAgLTM1OCw2ICszOTgsOSBAQAogLyogW1JXIDMyXSBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIENTRE1fUkVHX0NTRE1fSU5UX01BU0tfMAkJCQkgMHhjMjI5YwogI2RlZmluZSBDU0RNX1JFR19DU0RNX0lOVF9NQVNLXzEJCQkJIDB4YzIyYWMKKy8qIFtSIDMyXSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBDU0RNX1JFR19DU0RNX0lOVF9TVFNfMCAJCQkJIDB4YzIyOTAKKyNkZWZpbmUgQ1NETV9SRUdfQ1NETV9JTlRfU1RTXzEgCQkJCSAweGMyMmEwCiAvKiBbUlcgMTFdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgQ1NETV9SRUdfQ1NETV9QUlRZX01BU0sgCQkJCSAweGMyMmJjCiAvKiBbUiAxMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KQEAgLTQ0Myw2ICs0ODYsOSBAQAogLyogW1JXIDMyXSBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIENTRU1fUkVHX0NTRU1fSU5UX01BU0tfMAkJCQkgMHgyMDAxMTAKICNkZWZpbmUgQ1NFTV9SRUdfQ1NFTV9JTlRfTUFTS18xCQkJCSAweDIwMDEyMAorLyogW1IgMzJdIEludGVycnVwdCByZWdpc3RlciAjMCByZWFkICovCisjZGVmaW5lIENTRU1fUkVHX0NTRU1fSU5UX1NUU18wIAkJCQkgMHgyMDAxMDQKKyNkZWZpbmUgQ1NFTV9SRUdfQ1NFTV9JTlRfU1RTXzEgCQkJCSAweDIwMDExNAogLyogW1JXIDMyXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIENTRU1fUkVHX0NTRU1fUFJUWV9NQVNLXzAJCQkJIDB4MjAwMTMwCiAjZGVmaW5lIENTRU1fUkVHX0NTRU1fUFJUWV9NQVNLXzEJCQkJIDB4MjAwMTQwCkBAIC00NTMsOSArNDk5LDggQEAKICNkZWZpbmUgQ1NFTV9SRUdfRU5BQkxFX09VVAkJCQkJIDB4MjAwMGE4CiAvKiBbUlcgMzJdIFRoaXMgYWRkcmVzcyBzcGFjZSBjb250YWlucyBhbGwgcmVnaXN0ZXJzIGFuZCBtZW1vcmllcyB0aGF0IGFyZQogICAgcGxhY2VkIGluIFNFTV9GQVNUIGJsb2NrLiBUaGUgU0VNX0ZBU1QgcmVnaXN0ZXJzIGFyZSBkZXNjcmliZWQgaW4KLSAgIGFwcGVuZGl4IEIuIEluIG9yZGVyIHRvIGFjY2VzcyB0aGUgU0VNX0ZBU1QgcmVnaXN0ZXJzIHRoZSBiYXNlIGFkZHJlc3MKLSAgIENTRU1fUkVHSVNURVJTX0ZBU1RfTUVNT1JZIChPZmZzZXQ6IDB4MjIwMDAwKSBzaG91bGQgYmUgYWRkZWQgdG8gZWFjaAotICAgU0VNX0ZBU1QgcmVnaXN0ZXIgb2Zmc2V0LiAqLworICAgYXBwZW5kaXggQi4gSW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBzZW1fZmFzdCByZWdpc3RlcnMgdGhlIGJhc2UgYWRkcmVzcworICAgfmZhc3RfbWVtb3J5LmZhc3RfbWVtb3J5IHNob3VsZCBiZSBhZGRlZCB0byBlYWNoc2VtX2Zhc3QgcmVnaXN0ZXIgb2Zmc2V0LiAqLwogI2RlZmluZSBDU0VNX1JFR19GQVNUX01FTU9SWQkJCQkJIDB4MjIwMDAwCiAvKiBbUlcgMV0gRGlzYWJsZXMgaW5wdXQgbWVzc2FnZXMgZnJvbSBGSUMwIE1heSBiZSB1cGRhdGVkIGR1cmluZyBydW5fdGltZQogICAgYnkgdGhlIG1pY3JvY29kZSAqLwpAQCAtNTM5LDEzICs1ODQsMTAgQEAKICNkZWZpbmUgREJHX1JFR19EQkdfUFJUWV9NQVNLCQkJCQkgMHhjMGE4CiAvKiBbUiAxXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLwogI2RlZmluZSBEQkdfUkVHX0RCR19QUlRZX1NUUwkJCQkJIDB4YzA5YwotLyogW1JXIDJdIGRlYnVnIG9ubHk6IFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlIGNyZWRpdCBmb3IgUENJIHJlcXVlc3QgdHlwZSA0Ci0gICBpbnRlcmZhY2U7IE1VU1QgYmUgY29uZmlndXJlZCBBRlRFUiBwY2lfZXh0X2J1ZmZlcl9zdHJ0X2FkZHJfbHNiL21zYiBhcmUKLSAgIGNvbmZpZ3VyZWQgKi8KLSNkZWZpbmUgREJHX1JFR19QQ0lfUkVRX0NSRURJVAkJCQkJIDB4YzEyMAogLyogW1JXIDMyXSBDb21tYW5kcyBtZW1vcnkuIFRoZSBhZGRyZXNzIHRvIGNvbW1hbmQgWDsgcm93IFkgaXMgdG8gY2FsY3VsYXRlZAogICAgYXMgMTQqWCtZLiAqLwogI2RlZmluZSBETUFFX1JFR19DTURfTUVNCQkJCQkgMHgxMDI0MDAKKyNkZWZpbmUgRE1BRV9SRUdfQ01EX01FTV9TSVpFCQkJCQkgMjI0CiAvKiBbUlcgMV0gSWYgMCAtIHRoZSBDUkMtMTZjIGluaXRpYWwgdmFsdWUgaXMgYWxsIHplcm9lczsgaWYgMSAtIHRoZSBDUkMtMTZjCiAgICBpbml0aWFsIHZhbHVlIGlzIGFsbCBvbmVzLiAqLwogI2RlZmluZSBETUFFX1JFR19DUkMxNkNfSU5JVAkJCQkJIDB4MTAyMDFjCkBAIC02MzAsNiArNjcyLDggQEAKICNkZWZpbmUgRE9SUV9SRUdfQUdHX0NNRDMJCQkJCSAweDE3MDA2YwogLyogW1JXIDI4XSBVQ00gSGVhZGVyLiAqLwogI2RlZmluZSBET1JRX1JFR19DTUhFQURfUlgJCQkJCSAweDE3MDA1MAorLyogW1JXIDMyXSBEb29yYmVsbCBhZGRyZXNzIGZvciBSQkMgZG9vcmJlbGxzIChmdW5jdGlvbiAwKS4gKi8KKyNkZWZpbmUgRE9SUV9SRUdfREJfQUREUjAJCQkJCSAweDE3MDA4YwogLyogW1JXIDVdIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgRE9SUV9SRUdfRE9SUV9JTlRfTUFTSwkJCQkJIDB4MTcwMTgwCiAvKiBbUiA1XSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCAqLwpAQCAtNjkwLDc1ICs3MzQsMzMgQEAKICNkZWZpbmUgSENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMCAJCQkgKDB4MTw8MSkKICNkZWZpbmUgSENfUkVHX0FHR19JTlRfMAkJCQkJIDB4MTA4MDUwCiAjZGVmaW5lIEhDX1JFR19BR0dfSU5UXzEJCQkJCSAweDEwODA1NAotLyogW1JXIDE2XSBhdHRlbnRpb24gYml0IGFuZCBhdHRlbnRpb24gYWNrbm93bGVkZ2UgYml0cyBzdGF0dXMgZm9yIHBvcnQgMAotICAgYW5kIDEgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgYWRkcmVzcyBtYXA6IGFkZHIgMCAtIGF0dG5fYml0XzA7IGFkZHIgMQotICAgLSBhdHRuX2Fja19iaXRfMDsgYWRkciAyIC0gYXR0bl9iaXRfMTsgYWRkciAzIC0gYXR0bl9hY2tfYml0XzE7ICovCiAjZGVmaW5lIEhDX1JFR19BVFROX0JJVCAJCQkJCSAweDEwODEyMAotLyogW1JXIDE2XSBhdHRuIGJpdHMgc3RhdHVzIGluZGV4IGZvciBhdHRuIGJpdCBtc2c7IGFkZHIgMCAtIGZ1bmN0aW9uIDA7Ci0gICBhZGRyIDEgLSBmdW5jdGluIDEgKi8KICNkZWZpbmUgSENfUkVHX0FUVE5fSURYIAkJCQkJIDB4MTA4MTAwCi0vKiBbUlcgMzJdIHBvcnQgMCBsb3dlciAzMiBiaXRzIGFkZHJlc3MgZmllbGQgZm9yIGF0dG4gbWVzc2FnLiAqLwogI2RlZmluZSBIQ19SRUdfQVRUTl9NU0cwX0FERFJfTCAJCQkJIDB4MTA4MDE4Ci0vKiBbUlcgMzJdIHBvcnQgMSBsb3dlciAzMiBiaXRzIGFkZHJlc3MgZmllbGQgZm9yIGF0dG4gbWVzc2FnLiAqLwogI2RlZmluZSBIQ19SRUdfQVRUTl9NU0cxX0FERFJfTCAJCQkJIDB4MTA4MDIwCi0vKiBbUlcgOF0gc3RhdHVzIGJsb2NrIG51bWJlciBmb3IgYXR0biBiaXQgbXNnIC0gZnVuY3Rpb24gMDsgKi8KICNkZWZpbmUgSENfUkVHX0FUVE5fTlVNX1AwCQkJCQkgMHgxMDgwMzgKLS8qIFtSVyA4XSBzdGF0dXMgYmxvY2sgbnVtYmVyIGZvciBhdHRuIGJpdCBtc2cgLSBmdW5jdGlvbiAxICovCiAjZGVmaW5lIEhDX1JFR19BVFROX05VTV9QMQkJCQkJIDB4MTA4MDNjCiAjZGVmaW5lIEhDX1JFR19DT05GSUdfMCAJCQkJCSAweDEwODAwMAogI2RlZmluZSBIQ19SRUdfQ09ORklHXzEgCQkJCQkgMHgxMDgwMDQKKyNkZWZpbmUgSENfUkVHX0ZVTkNfTlVNX1AwCQkJCQkgMHgxMDgwYWMKKyNkZWZpbmUgSENfUkVHX0ZVTkNfTlVNX1AxCQkJCQkgMHgxMDgwYjAKIC8qIFtSVyAzXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIEhDX1JFR19IQ19QUlRZX01BU0sJCQkJCSAweDEwODBhMAogLyogW1IgM10gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgSENfUkVHX0hDX1BSVFlfU1RTCQkJCQkgMHgxMDgwOTQKLS8qIFtSVyAxN10gc3RhdHVzIGJsb2NrIGludGVycnVwdCBtYXNrOyBvbmUgaW4gZWFjaCBiaXQgbWVhbnMgdW5tYXNrOyB6ZXJvdwotICAgaW4gZWFjaCBiaXQgbWVhbnMgbWFzazsgYml0IDAgLSBkZWZhdWx0IFNCOyBiaXQgMSAtIFNCXzA7IGJpdCAyIC0gU0JfMS4uLgotICAgYml0IDE2LSBTQl8xNTsgYWRkciAwIC0gcG9ydCAwOyBhZGRyIDEgLSBwb3J0IDEgKi8KICNkZWZpbmUgSENfUkVHX0lOVF9NQVNLIAkJCQkJIDB4MTA4MTA4Ci0vKiBbUlcgMTZdIHBvcnQgMCBhdHRuIGJpdCBjb25kaXRpb24gbW9uaXRvcmluZzsgZWFjaCBiaXQgdGhhdCBpcyBzZXQgd2lsbAotICAgbG9jayBhIGNoYW5nZSBmcm9uIDAgdG8gMSBpbiB0aGUgY29ycmVzcG9uZGluZyBhdHRlbnRpb24gc2lnbmFscyB0aGF0Ci0gICBjb21lcyBmcm9tIHRoZSBBRVUgKi8KICNkZWZpbmUgSENfUkVHX0xFQURJTkdfRURHRV8wCQkJCQkgMHgxMDgwNDAKICNkZWZpbmUgSENfUkVHX0xFQURJTkdfRURHRV8xCQkJCQkgMHgxMDgwNDgKLS8qIFtSVyAxNl0gYWxsIHByb2R1Y2VyIGFuZCBjb25zdW1lciBvZiBwb3J0IDAgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcKLSAgIGFkZHJlc3NlczsgVV9wcm9kOiAwLTE1OyBDX3Byb2Q6IDE2LTMxOyBVX2NvbnM6IDMyLTQ3OyBDX2NvbnM6NDgtNjM7Ci0gICBEZWZvdWx0X3Byb2Q6IFUvQy9YL1QvQXR0bi02NC82NS82Ni82Ny82ODsgRGVmb3VsdF9jb25zOgotICAgVS9DL1gvVC9BdHRuLTY5LzcwLzcxLzcyLzczICovCiAjZGVmaW5lIEhDX1JFR19QMF9QUk9EX0NPTlMJCQkJCSAweDEwODIwMAotLyogW1JXIDE2XSBhbGwgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIG9mIHBvcnQgMWFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nCi0gICBhZGRyZXNzZXM7IFVfcHJvZDogMC0xNTsgQ19wcm9kOiAxNi0zMTsgVV9jb25zOiAzMi00NzsgQ19jb25zOjQ4LTYzOwotICAgRGVmb3VsdF9wcm9kOiBVL0MvWC9UL0F0dG4tNjQvNjUvNjYvNjcvNjg7IERlZm91bHRfY29uczoKLSAgIFUvQy9YL1QvQXR0bi02OS83MC83MS83Mi83MyAqLwogI2RlZmluZSBIQ19SRUdfUDFfUFJPRF9DT05TCQkJCQkgMHgxMDg0MDAKLS8qIFtXIDFdIFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgb25seSBhbmQgaGFzIDQgYWRkcmVzc2VzIGFzIGZvbGxvdzogMCA9Ci0gICBjbGVhciBhbGwgUEJBIGJpdHMgcG9ydCAwOyAxID0gY2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyByZXF1ZXN0Ci0gICBwb3J0MDsgMiA9IGNsZWFyIGFsbCBQQkEgYml0cyBwb3J0IDE7IDMgPSBjbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzCi0gICByZXF1ZXN0IHBvcnQxOyBoZXJlIGlzIG5vIG1lYW5pbmcgZm9yIHRoZSBkYXRhIGluIHRoaXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgSENfUkVHX1BCQV9DT01NQU5ECQkJCQkgMHgxMDgxNDAKICNkZWZpbmUgSENfUkVHX1BDSV9DT05GSUdfMAkJCQkJIDB4MTA4MDEwCiAjZGVmaW5lIEhDX1JFR19QQ0lfQ09ORklHXzEJCQkJCSAweDEwODAxNAotLyogW1JXIDI0XSBhbGwgY291bnRlcnMgYWNvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBhZGRyZXNzOiBMU0I6IDA9cmVhZDsgMT0KLSAgIHJlYWRfY2xlYXI7IDAtNzEgPSBIVyBjb3VudGVycyAodGhlIGluc2lkZSBvcmRlciBpcyB0aGUgc2FtZSBhcyB0aGUKLSAgIGludGVycnVwdCB0YWJsZSBpbiB0aGUgc3BlYyk7IDcyLTIxOSA9IFNXIGNvdW50ZXJzIDEgKHN0b3BzIGFmdGVyIGZpcnN0Ci0gICBjb25zdW1lciB1cGQpIHRoZSBpbnNpZGUgb3JkZXIgaXM6IDcyLTEwMyAtIFVfbm9uX2RlZmF1bHRfcDA7IDEwNC0xMzUKLSAgIENfbm9uX2RlZmF1bF9wMDsgMzYtMTQ1IFUvQy9YL1QvQXR0bl9kZWZhdWx0X3AwOyAxNDYtMTc3Ci0gICBVX25vbl9kZWZhdWx0X3AxOyAxNzgtMjA5IENfbm9uX2RlZmF1bF9wMTsgMTAtMjE5IFUvQy9YL1QvQXR0bl9kZWZhdWx0X3AxCi0gICA7IDIyMC0zNjcgPSBTVyBjb3VudGVycyAyIChzdG9wcyB3aGVuIHByb2Q9Y29ucykgdGhlIGluc2lkZSBvcmRlciBpczoKLSAgIDIyMC0yNTEgLSBVX25vbl9kZWZhdWx0X3AwOyAyNTItMjgzIENfbm9uX2RlZmF1bF9wMDsgODQtMjkzCi0gICBVL0MvWC9UL0F0dG5fZGVmYXVsdF9wMDsgMjk0LTMyNSBVX25vbl9kZWZhdWx0X3AxOyAzMjYtMzU3Ci0gICBDX25vbl9kZWZhdWxfcDE7IDU4LTM2NyBVL0MvWC9UL0F0dG5fZGVmYXVsdF9wMSA7IDM2OC01MTUgPSBtYWlsYm94Ci0gICBjb3VudGVyczsgKHRoZSBpbnNpZGUgb3JkZXIgb2YgdGhlIG1haWxib3ggY291bnRlciBpcyAzNjgtNDMxIFUgYW5kIEMKLSAgIG5vbl9kZWZhdWx0X3AwOyA0MzItNDQxIFUvQy9YL1QvQXR0bl9kZWZhdWx0X3AwOyA0NDItNTA1IFUgYW5kIEMKLSAgIG5vbl9kZWZhdWx0X3AxOyA1MDYtNTE1IFUvQy9YL1QvQXR0bl9kZWZhdWx0X3AxKSAqLwogI2RlZmluZSBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTCQkJCSAweDEwOTAwMAotLyogW1JXIDE2XSBwb3J0IDAgYXR0biBiaXQgY29uZGl0aW9uIG1vbml0b3Jpbmc7IGVhY2ggYml0IHRoYXQgaXMgc2V0IHdpbGwKLSAgIGxvY2sgYSBjaGFuZ2UgZnJvbiAxIHRvIDAgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYXR0ZW50aW9uIHNpZ25hbHMgdGhhdAotICAgY29tZXMgZnJvbSB0aGUgQUVVICovCiAjZGVmaW5lIEhDX1JFR19UUkFJTElOR19FREdFXzAJCQkJCSAweDEwODA0NAogI2RlZmluZSBIQ19SRUdfVFJBSUxJTkdfRURHRV8xCQkJCQkgMHgxMDgwNGMKICNkZWZpbmUgSENfUkVHX1VDX1JBTV9BRERSXzAJCQkJCSAweDEwODAyOAogI2RlZmluZSBIQ19SRUdfVUNfUkFNX0FERFJfMQkJCQkJIDB4MTA4MDMwCi0vKiBbUlcgMTZdIHVzdG9ybSBhZGRyZXNzIGZvciBjb2FsZXNjIG5vdyBtZXNzYWdlICovCiAjZGVmaW5lIEhDX1JFR19VU1RPUk1fQUREUl9GT1JfQ09BTEVTQ0UgCQkJIDB4MTA4MDY4CiAjZGVmaW5lIEhDX1JFR19WUUlEXzAJCQkJCQkgMHgxMDgwMDgKICNkZWZpbmUgSENfUkVHX1ZRSURfMQkJCQkJCSAweDEwODAwYwpAQCAtODgzLDE0ICs4ODUsMTYgQEAKICAgIHJvbV9wYXJpdHk7IFsyOV0gTUNQIExhdGNoZWQgdW1wX3J4X3Bhcml0eTsgWzMwXSBNQ1AgTGF0Y2hlZAogICAgdW1wX3R4X3Bhcml0eTsgWzMxXSBNQ1AgTGF0Y2hlZCBzY3BhZF9wYXJpdHk7ICovCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9BRlRFUl9JTlZFUlRfNF9NQ1AgCQkJIDB4YTQ1OAotLyogW1cgMTFdIHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgcmVzdWx0cyB3aXRoIHRoZSBjbGVhciBvZiB0aGUgbGF0Y2hlZAorLyogW1cgMTRdIHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgcmVzdWx0cyB3aXRoIHRoZSBjbGVhciBvZiB0aGUgbGF0Y2hlZAogICAgc2lnbmFsczsgb25lIGluIGQwIGNsZWFycyBSQkNSIGxhdGNoOyBvbmUgaW4gZDEgY2xlYXJzIFJCQ1QgbGF0Y2g7IG9uZSBpbgogICAgZDIgY2xlYXJzIFJCQ04gbGF0Y2g7IG9uZSBpbiBkMyBjbGVhcnMgUkJDVSBsYXRjaDsgb25lIGluIGQ0IGNsZWFycyBSQkNQCiAgICBsYXRjaDsgb25lIGluIGQ1IGNsZWFycyBHUkMgTGF0Y2hlZCB0aW1lb3V0IGF0dGVudGlvbjsgb25lIGluIGQ2IGNsZWFycwogICAgR1JDIExhdGNoZWQgcmVzZXJ2ZWQgYWNjZXNzIGF0dGVudGlvbjsgb25lIGluIGQ3IGNsZWFycyBMYXRjaGVkCiAgICByb21fcGFyaXR5OyBvbmUgaW4gZDggY2xlYXJzIExhdGNoZWQgdW1wX3J4X3Bhcml0eTsgb25lIGluIGQ5IGNsZWFycwotICAgTGF0Y2hlZCB1bXBfdHhfcGFyaXR5OyBvbmUgaW4gZDEwIGNsZWFycyBMYXRjaGVkIHNjcGFkX3Bhcml0eTsgcmVhZCBmcm9tCi0gICB0aGlzIHJlZ2lzdGVyIHJldHVybiB6ZXJvICovCisgICBMYXRjaGVkIHVtcF90eF9wYXJpdHk7IG9uZSBpbiBkMTAgY2xlYXJzIExhdGNoZWQgc2NwYWRfcGFyaXR5IChib3RoCisgICBwb3J0cyk7IG9uZSBpbiBkMTEgY2xlYXJzIHB4cHZfbWlzY19tcHNfYXR0bjsgb25lIGluIGQxMiBjbGVhcnMKKyAgIHB4cF9taXNjX2V4cF9yb21fYXR0bjA7IG9uZSBpbiBkMTMgY2xlYXJzIHB4cF9taXNjX2V4cF9yb21fYXR0bjE7IHJlYWQKKyAgIGZyb20gdGhpcyByZWdpc3RlciByZXR1cm4gemVybyAqLwogI2RlZmluZSBNSVNDX1JFR19BRVVfQ0xSX0xBVENIX1NJR05BTAkJCQkgMHhhNDVjCiAvKiBbUlcgMzJdIGZpcnN0IDMyYiBmb3IgZW5hYmxpbmcgdGhlIG91dHB1dCBmb3IgZnVuY3Rpb24gMCBvdXRwdXQwLiBtYXBwZWQKICAgIGFzIGZvbGxvd3M6IFswXSBOSUcgYXR0ZW50aW9uIGZvciBmdW5jdGlvbjA7IFsxXSBOSUcgYXR0ZW50aW9uIGZvcgpAQCAtOTA3LDcgKzkxMSwxMSBAQAogICAgVFNFTUkgSHcgaW50ZXJydXB0OyBbMzBdIFBCRiBQYXJpdHkgZXJyb3I7IFszMV0gUEJGIEh3IGludGVycnVwdDsgKi8KICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wCQkJIDB4YTA2YwogI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzEJCQkgMHhhMDdjCisjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMgkJCSAweGEwOGMKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8zCQkJIDB4YTA5YworI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzUJCQkgMHhhMGJjCisjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfNgkJCSAweGEwY2MKKyNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF83CQkJIDB4YTBkYwogLyogW1JXIDMyXSBmaXJzdCAzMmIgZm9yIGVuYWJsaW5nIHRoZSBvdXRwdXQgZm9yIGZ1bmN0aW9uIDEgb3V0cHV0MC4gbWFwcGVkCiAgICBhcyBmb2xsb3dzOiBbMF0gTklHIGF0dGVudGlvbiBmb3IgZnVuY3Rpb24wOyBbMV0gTklHIGF0dGVudGlvbiBmb3IKICAgIGZ1bmN0aW9uMTsgWzJdIEdQSU8xIGZ1bmN0aW9uIDE7IFszXSBHUElPMiBmdW5jdGlvbiAxOyBbNF0gR1BJTzMgZnVuY3Rpb24KQEAgLTkyMyw5ICs5MzEsMTMgQEAKICAgIFRTRU1JIEh3IGludGVycnVwdDsgWzMwXSBQQkYgUGFyaXR5IGVycm9yOyBbMzFdIFBCRiBIdyBpbnRlcnJ1cHQ7ICovCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMAkJCSAweGExMGMKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8xCQkJIDB4YTExYworI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzIJCQkgMHhhMTJjCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMwkJCSAweGExM2MKLS8qIFtSVyAzMl0gZmlyc3QgMzJiIGZvciBlbmFibGluZyB0aGUgb3V0cHV0IGZvciBjbG9zZSB0aGUgZ2F0ZSBuaWcgMC4KLSAgIG1hcHBlZCBhcyBmb2xsb3dzOiBbMF0gTklHIGF0dGVudGlvbiBmb3IgZnVuY3Rpb24wOyBbMV0gTklHIGF0dGVudGlvbiBmb3IKKyNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF81CQkJIDB4YTE1YworI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzYJCQkgMHhhMTZjCisjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfNwkJCSAweGExN2MKKy8qIFtSVyAzMl0gZmlyc3QgMzJiIGZvciBlbmFibGluZyB0aGUgb3V0cHV0IGZvciBjbG9zZSB0aGUgZ2F0ZSBuaWcuIG1hcHBlZAorICAgYXMgZm9sbG93czogWzBdIE5JRyBhdHRlbnRpb24gZm9yIGZ1bmN0aW9uMDsgWzFdIE5JRyBhdHRlbnRpb24gZm9yCiAgICBmdW5jdGlvbjE7IFsyXSBHUElPMSBmdW5jdGlvbiAwOyBbM10gR1BJTzIgZnVuY3Rpb24gMDsgWzRdIEdQSU8zIGZ1bmN0aW9uCiAgICAwOyBbNV0gR1BJTzQgZnVuY3Rpb24gMDsgWzZdIEdQSU8xIGZ1bmN0aW9uIDE7IFs3XSBHUElPMiBmdW5jdGlvbiAxOyBbOF0KICAgIEdQSU8zIGZ1bmN0aW9uIDE7IFs5XSBHUElPNCBmdW5jdGlvbiAxOyBbMTBdIFBDSUUgZ2x1ZS9QWFAgVlBEIGV2ZW50CkBAIC05MzksOCArOTUxLDggQEAKICAgIFRTRU1JIEh3IGludGVycnVwdDsgWzMwXSBQQkYgUGFyaXR5IGVycm9yOyBbMzFdIFBCRiBIdyBpbnRlcnJ1cHQ7ICovCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUxX05JR18wCQkJCSAweGEwZWMKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTFfTklHXzEJCQkJIDB4YTE4YwotLyogW1JXIDMyXSBmaXJzdCAzMmIgZm9yIGVuYWJsaW5nIHRoZSBvdXRwdXQgZm9yIGNsb3NlIHRoZSBnYXRlIHB4cCAwLgotICAgbWFwcGVkIGFzIGZvbGxvd3M6IFswXSBOSUcgYXR0ZW50aW9uIGZvciBmdW5jdGlvbjA7IFsxXSBOSUcgYXR0ZW50aW9uIGZvcgorLyogW1JXIDMyXSBmaXJzdCAzMmIgZm9yIGVuYWJsaW5nIHRoZSBvdXRwdXQgZm9yIGNsb3NlIHRoZSBnYXRlIHB4cC4gbWFwcGVkCisgICBhcyBmb2xsb3dzOiBbMF0gTklHIGF0dGVudGlvbiBmb3IgZnVuY3Rpb24wOyBbMV0gTklHIGF0dGVudGlvbiBmb3IKICAgIGZ1bmN0aW9uMTsgWzJdIEdQSU8xIGZ1bmN0aW9uIDA7IFszXSBHUElPMiBmdW5jdGlvbiAwOyBbNF0gR1BJTzMgZnVuY3Rpb24KICAgIDA7IFs1XSBHUElPNCBmdW5jdGlvbiAwOyBbNl0gR1BJTzEgZnVuY3Rpb24gMTsgWzddIEdQSU8yIGZ1bmN0aW9uIDE7IFs4XQogICAgR1BJTzMgZnVuY3Rpb24gMTsgWzldIEdQSU80IGZ1bmN0aW9uIDE7IFsxMF0gUENJRSBnbHVlL1BYUCBWUEQgZXZlbnQKQEAgLTk4NCwzNCArOTk2LDM0IEBACiAgICBpbnRlcnJ1cHQ7ICovCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMV9PVVRfMAkJCSAweGExMTAKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTJfRlVOQ18xX09VVF8xCQkJIDB4YTEyMAotLyogW1JXIDMyXSBzZWNvbmQgMzJiIGZvciBlbmFibGluZyB0aGUgb3V0cHV0IGZvciBjbG9zZSB0aGUgZ2F0ZSBuaWcgMC4KLSAgIG1hcHBlZCBhcyBmb2xsb3dzOiBbMF0gUEJDbGllbnQgUGFyaXR5IGVycm9yOyBbMV0gUEJDbGllbnQgSHcgaW50ZXJydXB0OwotICAgWzJdIFFNIFBhcml0eSBlcnJvcjsgWzNdIFFNIEh3IGludGVycnVwdDsgWzRdIFRpbWVycyBQYXJpdHkgZXJyb3I7IFs1XQotICAgVGltZXJzIEh3IGludGVycnVwdDsgWzZdIFhTRE0gUGFyaXR5IGVycm9yOyBbN10gWFNETSBIdyBpbnRlcnJ1cHQ7IFs4XQotICAgWENNIFBhcml0eSBlcnJvcjsgWzldIFhDTSBIdyBpbnRlcnJ1cHQ7IFsxMF0gWFNFTUkgUGFyaXR5IGVycm9yOyBbMTFdCi0gICBYU0VNSSBIdyBpbnRlcnJ1cHQ7IFsxMl0gRG9vcmJlbGxRIFBhcml0eSBlcnJvcjsgWzEzXSBEb29yYmVsbFEgSHcKLSAgIGludGVycnVwdDsgWzE0XSBOSUcgUGFyaXR5IGVycm9yOyBbMTVdIE5JRyBIdyBpbnRlcnJ1cHQ7IFsxNl0gVmF1eCBQQ0kKLSAgIGNvcmUgUGFyaXR5IGVycm9yOyBbMTddIFZhdXggUENJIGNvcmUgSHcgaW50ZXJydXB0OyBbMThdIERlYnVnIFBhcml0eQotICAgZXJyb3I7IFsxOV0gRGVidWcgSHcgaW50ZXJydXB0OyBbMjBdIFVTRE0gUGFyaXR5IGVycm9yOyBbMjFdIFVTRE0gSHcKLSAgIGludGVycnVwdDsgWzIyXSBVQ00gUGFyaXR5IGVycm9yOyBbMjNdIFVDTSBIdyBpbnRlcnJ1cHQ7IFsyNF0gVVNFTUkKLSAgIFBhcml0eSBlcnJvcjsgWzI1XSBVU0VNSSBIdyBpbnRlcnJ1cHQ7IFsyNl0gVVBCIFBhcml0eSBlcnJvcjsgWzI3XSBVUEIgSHcKLSAgIGludGVycnVwdDsgWzI4XSBDU0RNIFBhcml0eSBlcnJvcjsgWzI5XSBDU0RNIEh3IGludGVycnVwdDsgWzMwXSBDQ00KLSAgIFBhcml0eSBlcnJvcjsgWzMxXSBDQ00gSHcgaW50ZXJydXB0OyAqLworLyogW1JXIDMyXSBzZWNvbmQgMzJiIGZvciBlbmFibGluZyB0aGUgb3V0cHV0IGZvciBjbG9zZSB0aGUgZ2F0ZSBuaWcuIG1hcHBlZAorICAgYXMgZm9sbG93czogWzBdIFBCQ2xpZW50IFBhcml0eSBlcnJvcjsgWzFdIFBCQ2xpZW50IEh3IGludGVycnVwdDsgWzJdIFFNCisgICBQYXJpdHkgZXJyb3I7IFszXSBRTSBIdyBpbnRlcnJ1cHQ7IFs0XSBUaW1lcnMgUGFyaXR5IGVycm9yOyBbNV0gVGltZXJzIEh3CisgICBpbnRlcnJ1cHQ7IFs2XSBYU0RNIFBhcml0eSBlcnJvcjsgWzddIFhTRE0gSHcgaW50ZXJydXB0OyBbOF0gWENNIFBhcml0eQorICAgZXJyb3I7IFs5XSBYQ00gSHcgaW50ZXJydXB0OyBbMTBdIFhTRU1JIFBhcml0eSBlcnJvcjsgWzExXSBYU0VNSSBIdworICAgaW50ZXJydXB0OyBbMTJdIERvb3JiZWxsUSBQYXJpdHkgZXJyb3I7IFsxM10gRG9vcmJlbGxRIEh3IGludGVycnVwdDsgWzE0XQorICAgTklHIFBhcml0eSBlcnJvcjsgWzE1XSBOSUcgSHcgaW50ZXJydXB0OyBbMTZdIFZhdXggUENJIGNvcmUgUGFyaXR5IGVycm9yOworICAgWzE3XSBWYXV4IFBDSSBjb3JlIEh3IGludGVycnVwdDsgWzE4XSBEZWJ1ZyBQYXJpdHkgZXJyb3I7IFsxOV0gRGVidWcgSHcKKyAgIGludGVycnVwdDsgWzIwXSBVU0RNIFBhcml0eSBlcnJvcjsgWzIxXSBVU0RNIEh3IGludGVycnVwdDsgWzIyXSBVQ00KKyAgIFBhcml0eSBlcnJvcjsgWzIzXSBVQ00gSHcgaW50ZXJydXB0OyBbMjRdIFVTRU1JIFBhcml0eSBlcnJvcjsgWzI1XSBVU0VNSQorICAgSHcgaW50ZXJydXB0OyBbMjZdIFVQQiBQYXJpdHkgZXJyb3I7IFsyN10gVVBCIEh3IGludGVycnVwdDsgWzI4XSBDU0RNCisgICBQYXJpdHkgZXJyb3I7IFsyOV0gQ1NETSBIdyBpbnRlcnJ1cHQ7IFszMF0gQ0NNIFBhcml0eSBlcnJvcjsgWzMxXSBDQ00gSHcKKyAgIGludGVycnVwdDsgKi8KICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTJfTklHXzAJCQkJIDB4YTBmMAogI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFMl9OSUdfMQkJCQkgMHhhMTkwCi0vKiBbUlcgMzJdIHNlY29uZCAzMmIgZm9yIGVuYWJsaW5nIHRoZSBvdXRwdXQgZm9yIGNsb3NlIHRoZSBnYXRlIHB4cCAwLgotICAgbWFwcGVkIGFzIGZvbGxvd3M6IFswXSBQQkNsaWVudCBQYXJpdHkgZXJyb3I7IFsxXSBQQkNsaWVudCBIdyBpbnRlcnJ1cHQ7Ci0gICBbMl0gUU0gUGFyaXR5IGVycm9yOyBbM10gUU0gSHcgaW50ZXJydXB0OyBbNF0gVGltZXJzIFBhcml0eSBlcnJvcjsgWzVdCi0gICBUaW1lcnMgSHcgaW50ZXJydXB0OyBbNl0gWFNETSBQYXJpdHkgZXJyb3I7IFs3XSBYU0RNIEh3IGludGVycnVwdDsgWzhdCi0gICBYQ00gUGFyaXR5IGVycm9yOyBbOV0gWENNIEh3IGludGVycnVwdDsgWzEwXSBYU0VNSSBQYXJpdHkgZXJyb3I7IFsxMV0KLSAgIFhTRU1JIEh3IGludGVycnVwdDsgWzEyXSBEb29yYmVsbFEgUGFyaXR5IGVycm9yOyBbMTNdIERvb3JiZWxsUSBIdwotICAgaW50ZXJydXB0OyBbMTRdIE5JRyBQYXJpdHkgZXJyb3I7IFsxNV0gTklHIEh3IGludGVycnVwdDsgWzE2XSBWYXV4IFBDSQotICAgY29yZSBQYXJpdHkgZXJyb3I7IFsxN10gVmF1eCBQQ0kgY29yZSBIdyBpbnRlcnJ1cHQ7IFsxOF0gRGVidWcgUGFyaXR5Ci0gICBlcnJvcjsgWzE5XSBEZWJ1ZyBIdyBpbnRlcnJ1cHQ7IFsyMF0gVVNETSBQYXJpdHkgZXJyb3I7IFsyMV0gVVNETSBIdwotICAgaW50ZXJydXB0OyBbMjJdIFVDTSBQYXJpdHkgZXJyb3I7IFsyM10gVUNNIEh3IGludGVycnVwdDsgWzI0XSBVU0VNSQotICAgUGFyaXR5IGVycm9yOyBbMjVdIFVTRU1JIEh3IGludGVycnVwdDsgWzI2XSBVUEIgUGFyaXR5IGVycm9yOyBbMjddIFVQQiBIdwotICAgaW50ZXJydXB0OyBbMjhdIENTRE0gUGFyaXR5IGVycm9yOyBbMjldIENTRE0gSHcgaW50ZXJydXB0OyBbMzBdIENDTQotICAgUGFyaXR5IGVycm9yOyBbMzFdIENDTSBIdyBpbnRlcnJ1cHQ7ICovCisvKiBbUlcgMzJdIHNlY29uZCAzMmIgZm9yIGVuYWJsaW5nIHRoZSBvdXRwdXQgZm9yIGNsb3NlIHRoZSBnYXRlIHB4cC4gbWFwcGVkCisgICBhcyBmb2xsb3dzOiBbMF0gUEJDbGllbnQgUGFyaXR5IGVycm9yOyBbMV0gUEJDbGllbnQgSHcgaW50ZXJydXB0OyBbMl0gUU0KKyAgIFBhcml0eSBlcnJvcjsgWzNdIFFNIEh3IGludGVycnVwdDsgWzRdIFRpbWVycyBQYXJpdHkgZXJyb3I7IFs1XSBUaW1lcnMgSHcKKyAgIGludGVycnVwdDsgWzZdIFhTRE0gUGFyaXR5IGVycm9yOyBbN10gWFNETSBIdyBpbnRlcnJ1cHQ7IFs4XSBYQ00gUGFyaXR5CisgICBlcnJvcjsgWzldIFhDTSBIdyBpbnRlcnJ1cHQ7IFsxMF0gWFNFTUkgUGFyaXR5IGVycm9yOyBbMTFdIFhTRU1JIEh3CisgICBpbnRlcnJ1cHQ7IFsxMl0gRG9vcmJlbGxRIFBhcml0eSBlcnJvcjsgWzEzXSBEb29yYmVsbFEgSHcgaW50ZXJydXB0OyBbMTRdCisgICBOSUcgUGFyaXR5IGVycm9yOyBbMTVdIE5JRyBIdyBpbnRlcnJ1cHQ7IFsxNl0gVmF1eCBQQ0kgY29yZSBQYXJpdHkgZXJyb3I7CisgICBbMTddIFZhdXggUENJIGNvcmUgSHcgaW50ZXJydXB0OyBbMThdIERlYnVnIFBhcml0eSBlcnJvcjsgWzE5XSBEZWJ1ZyBIdworICAgaW50ZXJydXB0OyBbMjBdIFVTRE0gUGFyaXR5IGVycm9yOyBbMjFdIFVTRE0gSHcgaW50ZXJydXB0OyBbMjJdIFVDTQorICAgUGFyaXR5IGVycm9yOyBbMjNdIFVDTSBIdyBpbnRlcnJ1cHQ7IFsyNF0gVVNFTUkgUGFyaXR5IGVycm9yOyBbMjVdIFVTRU1JCisgICBIdyBpbnRlcnJ1cHQ7IFsyNl0gVVBCIFBhcml0eSBlcnJvcjsgWzI3XSBVUEIgSHcgaW50ZXJydXB0OyBbMjhdIENTRE0KKyAgIFBhcml0eSBlcnJvcjsgWzI5XSBDU0RNIEh3IGludGVycnVwdDsgWzMwXSBDQ00gUGFyaXR5IGVycm9yOyBbMzFdIENDTSBIdworICAgaW50ZXJydXB0OyAqLwogI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFMl9QWFBfMAkJCQkgMHhhMTAwCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUyX1BYUF8xCQkJCSAweGExYTAKIC8qIFtSVyAzMl0gdGhpcmQgMzJiIGZvciBlbmFibGluZyB0aGUgb3V0cHV0IGZvciBmdW5jdGlvbiAwIG91dHB1dDAuIG1hcHBlZApAQCAtMTA0NCwzNCArMTA1NiwzNCBAQAogICAgYXR0bjE7ICovCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUzX0ZVTkNfMV9PVVRfMAkJCSAweGExMTQKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTNfRlVOQ18xX09VVF8xCQkJIDB4YTEyNAotLyogW1JXIDMyXSB0aGlyZCAzMmIgZm9yIGVuYWJsaW5nIHRoZSBvdXRwdXQgZm9yIGNsb3NlIHRoZSBnYXRlIG5pZyAwLgotICAgbWFwcGVkIGFzIGZvbGxvd3M6IFswXSBDU0VNSSBQYXJpdHkgZXJyb3I7IFsxXSBDU0VNSSBIdyBpbnRlcnJ1cHQ7IFsyXQotICAgUFhQIFBhcml0eSBlcnJvcjsgWzNdIFBYUCBIdyBpbnRlcnJ1cHQ7IFs0XSBQWFBwY2lDbG9ja0NsaWVudCBQYXJpdHkKLSAgIGVycm9yOyBbNV0gUFhQcGNpQ2xvY2tDbGllbnQgSHcgaW50ZXJydXB0OyBbNl0gQ0ZDIFBhcml0eSBlcnJvcjsgWzddIENGQwotICAgSHcgaW50ZXJydXB0OyBbOF0gQ0RVIFBhcml0eSBlcnJvcjsgWzldIENEVSBIdyBpbnRlcnJ1cHQ7IFsxMF0gRE1BRQotICAgUGFyaXR5IGVycm9yOyBbMTFdIERNQUUgSHcgaW50ZXJydXB0OyBbMTJdIElHVSAoSEMpIFBhcml0eSBlcnJvcjsgWzEzXQotICAgSUdVIChIQykgSHcgaW50ZXJydXB0OyBbMTRdIE1JU0MgUGFyaXR5IGVycm9yOyBbMTVdIE1JU0MgSHcgaW50ZXJydXB0OwotICAgWzE2XSBweHBfbWlzY19tcHNfYXR0bjsgWzE3XSBGbGFzaCBldmVudDsgWzE4XSBTTUIgZXZlbnQ7IFsxOV0gTUNQIGF0dG4wOwotICAgWzIwXSBNQ1AgYXR0bjE7IFsyMV0gU1cgdGltZXJzIGF0dG5fMSBmdW5jMDsgWzIyXSBTVyB0aW1lcnMgYXR0bl8yIGZ1bmMwOwotICAgWzIzXSBTVyB0aW1lcnMgYXR0bl8zIGZ1bmMwOyBbMjRdIFNXIHRpbWVycyBhdHRuXzQgZnVuYzA7IFsyNV0gUEVSU1Q7Ci0gICBbMjZdIFNXIHRpbWVycyBhdHRuXzEgZnVuYzE7IFsyN10gU1cgdGltZXJzIGF0dG5fMiBmdW5jMTsgWzI4XSBTVyB0aW1lcnMKLSAgIGF0dG5fMyBmdW5jMTsgWzI5XSBTVyB0aW1lcnMgYXR0bl80IGZ1bmMxOyBbMzBdIEdlbmVyYWwgYXR0bjA7IFszMV0KLSAgIEdlbmVyYWwgYXR0bjE7ICovCisvKiBbUlcgMzJdIHRoaXJkIDMyYiBmb3IgZW5hYmxpbmcgdGhlIG91dHB1dCBmb3IgY2xvc2UgdGhlIGdhdGUgbmlnLiBtYXBwZWQKKyAgIGFzIGZvbGxvd3M6IFswXSBDU0VNSSBQYXJpdHkgZXJyb3I7IFsxXSBDU0VNSSBIdyBpbnRlcnJ1cHQ7IFsyXSBQWFAKKyAgIFBhcml0eSBlcnJvcjsgWzNdIFBYUCBIdyBpbnRlcnJ1cHQ7IFs0XSBQWFBwY2lDbG9ja0NsaWVudCBQYXJpdHkgZXJyb3I7CisgICBbNV0gUFhQcGNpQ2xvY2tDbGllbnQgSHcgaW50ZXJydXB0OyBbNl0gQ0ZDIFBhcml0eSBlcnJvcjsgWzddIENGQyBIdworICAgaW50ZXJydXB0OyBbOF0gQ0RVIFBhcml0eSBlcnJvcjsgWzldIENEVSBIdyBpbnRlcnJ1cHQ7IFsxMF0gRE1BRSBQYXJpdHkKKyAgIGVycm9yOyBbMTFdIERNQUUgSHcgaW50ZXJydXB0OyBbMTJdIElHVSAoSEMpIFBhcml0eSBlcnJvcjsgWzEzXSBJR1UgKEhDKQorICAgSHcgaW50ZXJydXB0OyBbMTRdIE1JU0MgUGFyaXR5IGVycm9yOyBbMTVdIE1JU0MgSHcgaW50ZXJydXB0OyBbMTZdCisgICBweHBfbWlzY19tcHNfYXR0bjsgWzE3XSBGbGFzaCBldmVudDsgWzE4XSBTTUIgZXZlbnQ7IFsxOV0gTUNQIGF0dG4wOyBbMjBdCisgICBNQ1AgYXR0bjE7IFsyMV0gU1cgdGltZXJzIGF0dG5fMSBmdW5jMDsgWzIyXSBTVyB0aW1lcnMgYXR0bl8yIGZ1bmMwOyBbMjNdCisgICBTVyB0aW1lcnMgYXR0bl8zIGZ1bmMwOyBbMjRdIFNXIHRpbWVycyBhdHRuXzQgZnVuYzA7IFsyNV0gUEVSU1Q7IFsyNl0gU1cKKyAgIHRpbWVycyBhdHRuXzEgZnVuYzE7IFsyN10gU1cgdGltZXJzIGF0dG5fMiBmdW5jMTsgWzI4XSBTVyB0aW1lcnMgYXR0bl8zCisgICBmdW5jMTsgWzI5XSBTVyB0aW1lcnMgYXR0bl80IGZ1bmMxOyBbMzBdIEdlbmVyYWwgYXR0bjA7IFszMV0gR2VuZXJhbAorICAgYXR0bjE7ICovCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUzX05JR18wCQkJCSAweGEwZjQKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTNfTklHXzEJCQkJIDB4YTE5NAotLyogW1JXIDMyXSB0aGlyZCAzMmIgZm9yIGVuYWJsaW5nIHRoZSBvdXRwdXQgZm9yIGNsb3NlIHRoZSBnYXRlIHB4cCAwLgotICAgbWFwcGVkIGFzIGZvbGxvd3M6IFswXSBDU0VNSSBQYXJpdHkgZXJyb3I7IFsxXSBDU0VNSSBIdyBpbnRlcnJ1cHQ7IFsyXQotICAgUFhQIFBhcml0eSBlcnJvcjsgWzNdIFBYUCBIdyBpbnRlcnJ1cHQ7IFs0XSBQWFBwY2lDbG9ja0NsaWVudCBQYXJpdHkKLSAgIGVycm9yOyBbNV0gUFhQcGNpQ2xvY2tDbGllbnQgSHcgaW50ZXJydXB0OyBbNl0gQ0ZDIFBhcml0eSBlcnJvcjsgWzddIENGQwotICAgSHcgaW50ZXJydXB0OyBbOF0gQ0RVIFBhcml0eSBlcnJvcjsgWzldIENEVSBIdyBpbnRlcnJ1cHQ7IFsxMF0gRE1BRQotICAgUGFyaXR5IGVycm9yOyBbMTFdIERNQUUgSHcgaW50ZXJydXB0OyBbMTJdIElHVSAoSEMpIFBhcml0eSBlcnJvcjsgWzEzXQotICAgSUdVIChIQykgSHcgaW50ZXJydXB0OyBbMTRdIE1JU0MgUGFyaXR5IGVycm9yOyBbMTVdIE1JU0MgSHcgaW50ZXJydXB0OwotICAgWzE2XSBweHBfbWlzY19tcHNfYXR0bjsgWzE3XSBGbGFzaCBldmVudDsgWzE4XSBTTUIgZXZlbnQ7IFsxOV0gTUNQIGF0dG4wOwotICAgWzIwXSBNQ1AgYXR0bjE7IFsyMV0gU1cgdGltZXJzIGF0dG5fMSBmdW5jMDsgWzIyXSBTVyB0aW1lcnMgYXR0bl8yIGZ1bmMwOwotICAgWzIzXSBTVyB0aW1lcnMgYXR0bl8zIGZ1bmMwOyBbMjRdIFNXIHRpbWVycyBhdHRuXzQgZnVuYzA7IFsyNV0gUEVSU1Q7Ci0gICBbMjZdIFNXIHRpbWVycyBhdHRuXzEgZnVuYzE7IFsyN10gU1cgdGltZXJzIGF0dG5fMiBmdW5jMTsgWzI4XSBTVyB0aW1lcnMKLSAgIGF0dG5fMyBmdW5jMTsgWzI5XSBTVyB0aW1lcnMgYXR0bl80IGZ1bmMxOyBbMzBdIEdlbmVyYWwgYXR0bjA7IFszMV0KLSAgIEdlbmVyYWwgYXR0bjE7ICovCisvKiBbUlcgMzJdIHRoaXJkIDMyYiBmb3IgZW5hYmxpbmcgdGhlIG91dHB1dCBmb3IgY2xvc2UgdGhlIGdhdGUgcHhwLiBtYXBwZWQKKyAgIGFzIGZvbGxvd3M6IFswXSBDU0VNSSBQYXJpdHkgZXJyb3I7IFsxXSBDU0VNSSBIdyBpbnRlcnJ1cHQ7IFsyXSBQWFAKKyAgIFBhcml0eSBlcnJvcjsgWzNdIFBYUCBIdyBpbnRlcnJ1cHQ7IFs0XSBQWFBwY2lDbG9ja0NsaWVudCBQYXJpdHkgZXJyb3I7CisgICBbNV0gUFhQcGNpQ2xvY2tDbGllbnQgSHcgaW50ZXJydXB0OyBbNl0gQ0ZDIFBhcml0eSBlcnJvcjsgWzddIENGQyBIdworICAgaW50ZXJydXB0OyBbOF0gQ0RVIFBhcml0eSBlcnJvcjsgWzldIENEVSBIdyBpbnRlcnJ1cHQ7IFsxMF0gRE1BRSBQYXJpdHkKKyAgIGVycm9yOyBbMTFdIERNQUUgSHcgaW50ZXJydXB0OyBbMTJdIElHVSAoSEMpIFBhcml0eSBlcnJvcjsgWzEzXSBJR1UgKEhDKQorICAgSHcgaW50ZXJydXB0OyBbMTRdIE1JU0MgUGFyaXR5IGVycm9yOyBbMTVdIE1JU0MgSHcgaW50ZXJydXB0OyBbMTZdCisgICBweHBfbWlzY19tcHNfYXR0bjsgWzE3XSBGbGFzaCBldmVudDsgWzE4XSBTTUIgZXZlbnQ7IFsxOV0gTUNQIGF0dG4wOyBbMjBdCisgICBNQ1AgYXR0bjE7IFsyMV0gU1cgdGltZXJzIGF0dG5fMSBmdW5jMDsgWzIyXSBTVyB0aW1lcnMgYXR0bl8yIGZ1bmMwOyBbMjNdCisgICBTVyB0aW1lcnMgYXR0bl8zIGZ1bmMwOyBbMjRdIFNXIHRpbWVycyBhdHRuXzQgZnVuYzA7IFsyNV0gUEVSU1Q7IFsyNl0gU1cKKyAgIHRpbWVycyBhdHRuXzEgZnVuYzE7IFsyN10gU1cgdGltZXJzIGF0dG5fMiBmdW5jMTsgWzI4XSBTVyB0aW1lcnMgYXR0bl8zCisgICBmdW5jMTsgWzI5XSBTVyB0aW1lcnMgYXR0bl80IGZ1bmMxOyBbMzBdIEdlbmVyYWwgYXR0bjA7IFszMV0gR2VuZXJhbAorICAgYXR0bjE7ICovCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEUzX1BYUF8wCQkJCSAweGExMDQKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTNfUFhQXzEJCQkJIDB4YTFhNAogLyogW1JXIDMyXSBmb3VydGggMzJiIGZvciBlbmFibGluZyB0aGUgb3V0cHV0IGZvciBmdW5jdGlvbiAwIG91dHB1dDAubWFwcGVkCkBAIC0xMDg4LDYgKzExMDAsMTAgQEAKICAgIExhdGNoZWQgdW1wX3R4X3Bhcml0eTsgWzMxXSBNQ1AgTGF0Y2hlZCBzY3BhZF9wYXJpdHk7ICovCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEU0X0ZVTkNfMF9PVVRfMAkJCSAweGEwNzgKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18wX09VVF8yCQkJIDB4YTA5OAorI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzBfT1VUXzQJCQkgMHhhMGI4CisjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEU0X0ZVTkNfMF9PVVRfNQkJCSAweGEwYzgKKyNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18wX09VVF82CQkJIDB4YTBkOAorI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzBfT1VUXzcJCQkgMHhhMGU4CiAvKiBbUlcgMzJdIGZvdXJ0aCAzMmIgZm9yIGVuYWJsaW5nIHRoZSBvdXRwdXQgZm9yIGZ1bmN0aW9uIDEgb3V0cHV0MC5tYXBwZWQKICAgIGFzIGZvbGxvd3M6IFswXSBHZW5lcmFsIGF0dG4yOyBbMV0gR2VuZXJhbCBhdHRuMzsgWzJdIEdlbmVyYWwgYXR0bjQ7IFszXQogICAgR2VuZXJhbCBhdHRuNTsgWzRdIEdlbmVyYWwgYXR0bjY7IFs1XSBHZW5lcmFsIGF0dG43OyBbNl0gR2VuZXJhbCBhdHRuODsKQEAgLTExMDIsMzQgKzExMTgsMzYgQEAKICAgIExhdGNoZWQgdW1wX3R4X3Bhcml0eTsgWzMxXSBNQ1AgTGF0Y2hlZCBzY3BhZF9wYXJpdHk7ICovCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEU0X0ZVTkNfMV9PVVRfMAkJCSAweGExMTgKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18xX09VVF8yCQkJIDB4YTEzOAotLyogW1JXIDMyXSBmb3VydGggMzJiIGZvciBlbmFibGluZyB0aGUgb3V0cHV0IGZvciBjbG9zZSB0aGUgZ2F0ZSBuaWcKLSAgIDAubWFwcGVkIGFzIGZvbGxvd3M6IFswXSBHZW5lcmFsIGF0dG4yOyBbMV0gR2VuZXJhbCBhdHRuMzsgWzJdIEdlbmVyYWwKLSAgIGF0dG40OyBbM10gR2VuZXJhbCBhdHRuNTsgWzRdIEdlbmVyYWwgYXR0bjY7IFs1XSBHZW5lcmFsIGF0dG43OyBbNl0KLSAgIEdlbmVyYWwgYXR0bjg7IFs3XSBHZW5lcmFsIGF0dG45OyBbOF0gR2VuZXJhbCBhdHRuMTA7IFs5XSBHZW5lcmFsIGF0dG4xMTsKLSAgIFsxMF0gR2VuZXJhbCBhdHRuMTI7IFsxMV0gR2VuZXJhbCBhdHRuMTM7IFsxMl0gR2VuZXJhbCBhdHRuMTQ7IFsxM10KLSAgIEdlbmVyYWwgYXR0bjE1OyBbMTRdIEdlbmVyYWwgYXR0bjE2OyBbMTVdIEdlbmVyYWwgYXR0bjE3OyBbMTZdIEdlbmVyYWwKLSAgIGF0dG4xODsgWzE3XSBHZW5lcmFsIGF0dG4xOTsgWzE4XSBHZW5lcmFsIGF0dG4yMDsgWzE5XSBHZW5lcmFsIGF0dG4yMTsKLSAgIFsyMF0gTWFpbiBwb3dlciBpbnRlcnJ1cHQ7IFsyMV0gUkJDUiBMYXRjaGVkIGF0dG47IFsyMl0gUkJDVCBMYXRjaGVkCi0gICBhdHRuOyBbMjNdIFJCQ04gTGF0Y2hlZCBhdHRuOyBbMjRdIFJCQ1UgTGF0Y2hlZCBhdHRuOyBbMjVdIFJCQ1AgTGF0Y2hlZAotICAgYXR0bjsgWzI2XSBHUkMgTGF0Y2hlZCB0aW1lb3V0IGF0dGVudGlvbjsgWzI3XSBHUkMgTGF0Y2hlZCByZXNlcnZlZAotICAgYWNjZXNzIGF0dGVudGlvbjsgWzI4XSBNQ1AgTGF0Y2hlZCByb21fcGFyaXR5OyBbMjldIE1DUCBMYXRjaGVkCi0gICB1bXBfcnhfcGFyaXR5OyBbMzBdIE1DUCBMYXRjaGVkIHVtcF90eF9wYXJpdHk7IFszMV0gTUNQIExhdGNoZWQKLSAgIHNjcGFkX3Bhcml0eTsgKi8KKyNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18xX09VVF80CQkJIDB4YTE1OAorI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzFfT1VUXzUJCQkgMHhhMTY4CisjZGVmaW5lIE1JU0NfUkVHX0FFVV9FTkFCTEU0X0ZVTkNfMV9PVVRfNgkJCSAweGExNzgKKyNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18xX09VVF83CQkJIDB4YTE4OAorLyogW1JXIDMyXSBmb3VydGggMzJiIGZvciBlbmFibGluZyB0aGUgb3V0cHV0IGZvciBjbG9zZSB0aGUgZ2F0ZSBuaWcubWFwcGVkCisgICBhcyBmb2xsb3dzOiBbMF0gR2VuZXJhbCBhdHRuMjsgWzFdIEdlbmVyYWwgYXR0bjM7IFsyXSBHZW5lcmFsIGF0dG40OyBbM10KKyAgIEdlbmVyYWwgYXR0bjU7IFs0XSBHZW5lcmFsIGF0dG42OyBbNV0gR2VuZXJhbCBhdHRuNzsgWzZdIEdlbmVyYWwgYXR0bjg7CisgICBbN10gR2VuZXJhbCBhdHRuOTsgWzhdIEdlbmVyYWwgYXR0bjEwOyBbOV0gR2VuZXJhbCBhdHRuMTE7IFsxMF0gR2VuZXJhbAorICAgYXR0bjEyOyBbMTFdIEdlbmVyYWwgYXR0bjEzOyBbMTJdIEdlbmVyYWwgYXR0bjE0OyBbMTNdIEdlbmVyYWwgYXR0bjE1OworICAgWzE0XSBHZW5lcmFsIGF0dG4xNjsgWzE1XSBHZW5lcmFsIGF0dG4xNzsgWzE2XSBHZW5lcmFsIGF0dG4xODsgWzE3XQorICAgR2VuZXJhbCBhdHRuMTk7IFsxOF0gR2VuZXJhbCBhdHRuMjA7IFsxOV0gR2VuZXJhbCBhdHRuMjE7IFsyMF0gTWFpbiBwb3dlcgorICAgaW50ZXJydXB0OyBbMjFdIFJCQ1IgTGF0Y2hlZCBhdHRuOyBbMjJdIFJCQ1QgTGF0Y2hlZCBhdHRuOyBbMjNdIFJCQ04KKyAgIExhdGNoZWQgYXR0bjsgWzI0XSBSQkNVIExhdGNoZWQgYXR0bjsgWzI1XSBSQkNQIExhdGNoZWQgYXR0bjsgWzI2XSBHUkMKKyAgIExhdGNoZWQgdGltZW91dCBhdHRlbnRpb247IFsyN10gR1JDIExhdGNoZWQgcmVzZXJ2ZWQgYWNjZXNzIGF0dGVudGlvbjsKKyAgIFsyOF0gTUNQIExhdGNoZWQgcm9tX3Bhcml0eTsgWzI5XSBNQ1AgTGF0Y2hlZCB1bXBfcnhfcGFyaXR5OyBbMzBdIE1DUAorICAgTGF0Y2hlZCB1bXBfdHhfcGFyaXR5OyBbMzFdIE1DUCBMYXRjaGVkIHNjcGFkX3Bhcml0eTsgKi8KICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTRfTklHXzAJCQkJIDB4YTBmOAogI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFNF9OSUdfMQkJCQkgMHhhMTk4Ci0vKiBbUlcgMzJdIGZvdXJ0aCAzMmIgZm9yIGVuYWJsaW5nIHRoZSBvdXRwdXQgZm9yIGNsb3NlIHRoZSBnYXRlIHB4cAotICAgMC5tYXBwZWQgYXMgZm9sbG93czogWzBdIEdlbmVyYWwgYXR0bjI7IFsxXSBHZW5lcmFsIGF0dG4zOyBbMl0gR2VuZXJhbAotICAgYXR0bjQ7IFszXSBHZW5lcmFsIGF0dG41OyBbNF0gR2VuZXJhbCBhdHRuNjsgWzVdIEdlbmVyYWwgYXR0bjc7IFs2XQotICAgR2VuZXJhbCBhdHRuODsgWzddIEdlbmVyYWwgYXR0bjk7IFs4XSBHZW5lcmFsIGF0dG4xMDsgWzldIEdlbmVyYWwgYXR0bjExOwotICAgWzEwXSBHZW5lcmFsIGF0dG4xMjsgWzExXSBHZW5lcmFsIGF0dG4xMzsgWzEyXSBHZW5lcmFsIGF0dG4xNDsgWzEzXQotICAgR2VuZXJhbCBhdHRuMTU7IFsxNF0gR2VuZXJhbCBhdHRuMTY7IFsxNV0gR2VuZXJhbCBhdHRuMTc7IFsxNl0gR2VuZXJhbAotICAgYXR0bjE4OyBbMTddIEdlbmVyYWwgYXR0bjE5OyBbMThdIEdlbmVyYWwgYXR0bjIwOyBbMTldIEdlbmVyYWwgYXR0bjIxOwotICAgWzIwXSBNYWluIHBvd2VyIGludGVycnVwdDsgWzIxXSBSQkNSIExhdGNoZWQgYXR0bjsgWzIyXSBSQkNUIExhdGNoZWQKLSAgIGF0dG47IFsyM10gUkJDTiBMYXRjaGVkIGF0dG47IFsyNF0gUkJDVSBMYXRjaGVkIGF0dG47IFsyNV0gUkJDUCBMYXRjaGVkCi0gICBhdHRuOyBbMjZdIEdSQyBMYXRjaGVkIHRpbWVvdXQgYXR0ZW50aW9uOyBbMjddIEdSQyBMYXRjaGVkIHJlc2VydmVkCi0gICBhY2Nlc3MgYXR0ZW50aW9uOyBbMjhdIE1DUCBMYXRjaGVkIHJvbV9wYXJpdHk7IFsyOV0gTUNQIExhdGNoZWQKLSAgIHVtcF9yeF9wYXJpdHk7IFszMF0gTUNQIExhdGNoZWQgdW1wX3R4X3Bhcml0eTsgWzMxXSBNQ1AgTGF0Y2hlZAotICAgc2NwYWRfcGFyaXR5OyAqLworLyogW1JXIDMyXSBmb3VydGggMzJiIGZvciBlbmFibGluZyB0aGUgb3V0cHV0IGZvciBjbG9zZSB0aGUgZ2F0ZSBweHAubWFwcGVkCisgICBhcyBmb2xsb3dzOiBbMF0gR2VuZXJhbCBhdHRuMjsgWzFdIEdlbmVyYWwgYXR0bjM7IFsyXSBHZW5lcmFsIGF0dG40OyBbM10KKyAgIEdlbmVyYWwgYXR0bjU7IFs0XSBHZW5lcmFsIGF0dG42OyBbNV0gR2VuZXJhbCBhdHRuNzsgWzZdIEdlbmVyYWwgYXR0bjg7CisgICBbN10gR2VuZXJhbCBhdHRuOTsgWzhdIEdlbmVyYWwgYXR0bjEwOyBbOV0gR2VuZXJhbCBhdHRuMTE7IFsxMF0gR2VuZXJhbAorICAgYXR0bjEyOyBbMTFdIEdlbmVyYWwgYXR0bjEzOyBbMTJdIEdlbmVyYWwgYXR0bjE0OyBbMTNdIEdlbmVyYWwgYXR0bjE1OworICAgWzE0XSBHZW5lcmFsIGF0dG4xNjsgWzE1XSBHZW5lcmFsIGF0dG4xNzsgWzE2XSBHZW5lcmFsIGF0dG4xODsgWzE3XQorICAgR2VuZXJhbCBhdHRuMTk7IFsxOF0gR2VuZXJhbCBhdHRuMjA7IFsxOV0gR2VuZXJhbCBhdHRuMjE7IFsyMF0gTWFpbiBwb3dlcgorICAgaW50ZXJydXB0OyBbMjFdIFJCQ1IgTGF0Y2hlZCBhdHRuOyBbMjJdIFJCQ1QgTGF0Y2hlZCBhdHRuOyBbMjNdIFJCQ04KKyAgIExhdGNoZWQgYXR0bjsgWzI0XSBSQkNVIExhdGNoZWQgYXR0bjsgWzI1XSBSQkNQIExhdGNoZWQgYXR0bjsgWzI2XSBHUkMKKyAgIExhdGNoZWQgdGltZW91dCBhdHRlbnRpb247IFsyN10gR1JDIExhdGNoZWQgcmVzZXJ2ZWQgYWNjZXNzIGF0dGVudGlvbjsKKyAgIFsyOF0gTUNQIExhdGNoZWQgcm9tX3Bhcml0eTsgWzI5XSBNQ1AgTGF0Y2hlZCB1bXBfcnhfcGFyaXR5OyBbMzBdIE1DUAorICAgTGF0Y2hlZCB1bXBfdHhfcGFyaXR5OyBbMzFdIE1DUCBMYXRjaGVkIHNjcGFkX3Bhcml0eTsgKi8KICNkZWZpbmUgTUlTQ19SRUdfQUVVX0VOQUJMRTRfUFhQXzAJCQkJIDB4YTEwOAogI2RlZmluZSBNSVNDX1JFR19BRVVfRU5BQkxFNF9QWFBfMQkJCQkgMHhhMWE4CiAvKiBbUlcgMV0gc2V0L2NsciBnZW5lcmFsIGF0dGVudGlvbiAwOyB0aGlzIHdpbGwgc2V0L2NsciBiaXQgOTQgaW4gdGhlIGFldQpAQCAtMTE0OCw2ICsxMTY2LDcgQEAKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xOQkJCQkgMHhhMDRjCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTAJCQkJIDB4YTAyOAogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzExCQkJCSAweGEwMmMKKyNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMgkJCQkgMHhhMDMwCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMgkJCQkgMHhhMDA4CiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMjAJCQkJIDB4YTA1MAogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzIxCQkJCSAweGEwNTQKQEAgLTExNTgsNiArMTE3Nyw3IEBACiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNwkJCQkgMHhhMDFjCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fOAkJCQkgMHhhMDIwCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fOQkJCQkgMHhhMDI0CisjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX01BU0sJCQkJIDB4YTYxYwogLyogW1JXIDMyXSBmaXJzdCAzMmIgZm9yIGludmVydGluZyB0aGUgaW5wdXQgZm9yIGZ1bmN0aW9uIDA7IGZvciBlYWNoIGJpdDoKICAgIDA9IGRvIG5vdCBpbnZlcnQ7IDE9IGludmVydDsgbWFwcGVkIGFzIGZvbGxvd3M6IFswXSBOSUcgYXR0ZW50aW9uIGZvcgogICAgZnVuY3Rpb24wOyBbMV0gTklHIGF0dGVudGlvbiBmb3IgZnVuY3Rpb24xOyBbMl0gR1BJTzEgbWNwOyBbM10gR1BJTzIgbWNwOwpAQCAtMTE4OSwxMCArMTIwOSwyOSBAQAogI2RlZmluZSBNSVNDX1JFR19BRVVfSU5WRVJURVJfMl9GVU5DXzAJCQkJIDB4YTIzMAogI2RlZmluZSBNSVNDX1JFR19BRVVfSU5WRVJURVJfMl9GVU5DXzEJCQkJIDB4YTI0MAogLyogW1JXIDEwXSBbNzowXSA9IG1hc2sgOCBhdHRlbnRpb24gb3V0cHV0IHNpZ25hbHMgdG93YXJkIElHVSBmdW5jdGlvbjA7Ci0gICBbOTo4XSA9IG1hc2sgY2xvc2UgdGhlIGdhdGVzIHNpZ25hbHMgb2YgZnVuY3Rpb24gMCB0b3dhcmQgUFhQIFs4XSBhbmQgTklHCi0gICBbOV0uIFplcm8gPSBtYXNrOyBvbmUgPSB1bm1hc2sgKi8KKyAgIFs5OjhdID0gcmFzZXJ2ZWQuIFplcm8gPSBtYXNrOyBvbmUgPSB1bm1hc2sgKi8KICNkZWZpbmUgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzAJCQkJIDB4YTA2MAogI2RlZmluZSBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMQkJCQkgMHhhMDY0CisvKiBbUlcgMV0gSWYgc2V0IGEgc3lzdGVtIGtpbGwgb2NjdXJyZWQgKi8KKyNkZWZpbmUgTUlTQ19SRUdfQUVVX1NZU19LSUxMX09DQ1VSUkVECQkJCSAweGE2MTAKKy8qIFtSVyAzMl0gUmVwcmVzZW50IHRoZSBzdGF0dXMgb2YgdGhlIGlucHV0IHZlY3RvciB0byB0aGUgQUVVIHdoZW4gYSBzeXN0ZW0KKyAgIGtpbGwgb2NjdXJyZWQuIFRoZSByZWdpc3RlciBpcyByZXNldCBpbiBwb3IgcmVzZXQuIE1hcHBlZCBhcyBmb2xsb3dzOiBbMF0KKyAgIE5JRyBhdHRlbnRpb24gZm9yIGZ1bmN0aW9uMDsgWzFdIE5JRyBhdHRlbnRpb24gZm9yIGZ1bmN0aW9uMTsgWzJdIEdQSU8xCisgICBtY3A7IFszXSBHUElPMiBtY3A7IFs0XSBHUElPMyBtY3A7IFs1XSBHUElPNCBtY3A7IFs2XSBHUElPMSBmdW5jdGlvbiAxOworICAgWzddIEdQSU8yIGZ1bmN0aW9uIDE7IFs4XSBHUElPMyBmdW5jdGlvbiAxOyBbOV0gR1BJTzQgZnVuY3Rpb24gMTsgWzEwXQorICAgUENJRSBnbHVlL1BYUCBWUEQgZXZlbnQgZnVuY3Rpb24wOyBbMTFdIFBDSUUgZ2x1ZS9QWFAgVlBEIGV2ZW50CisgICBmdW5jdGlvbjE7IFsxMl0gUENJRSBnbHVlL1BYUCBFeHBhbnNpb24gUk9NIGV2ZW50MDsgWzEzXSBQQ0lFIGdsdWUvUFhQCisgICBFeHBhbnNpb24gUk9NIGV2ZW50MTsgWzE0XSBTUElPNDsgWzE1XSBTUElPNTsgWzE2XSBNU0kvWCBpbmRpY2F0aW9uIGZvcgorICAgbWNwOyBbMTddIE1TSS9YIGluZGljYXRpb24gZm9yIGZ1bmN0aW9uIDE7IFsxOF0gQlJCIFBhcml0eSBlcnJvcjsgWzE5XQorICAgQlJCIEh3IGludGVycnVwdDsgWzIwXSBQUlMgUGFyaXR5IGVycm9yOyBbMjFdIFBSUyBIdyBpbnRlcnJ1cHQ7IFsyMl0gU1JDCisgICBQYXJpdHkgZXJyb3I7IFsyM10gU1JDIEh3IGludGVycnVwdDsgWzI0XSBUU0RNIFBhcml0eSBlcnJvcjsgWzI1XSBUU0RNIEh3CisgICBpbnRlcnJ1cHQ7IFsyNl0gVENNIFBhcml0eSBlcnJvcjsgWzI3XSBUQ00gSHcgaW50ZXJydXB0OyBbMjhdIFRTRU1JCisgICBQYXJpdHkgZXJyb3I7IFsyOV0gVFNFTUkgSHcgaW50ZXJydXB0OyBbMzBdIFBCRiBQYXJpdHkgZXJyb3I7IFszMV0gUEJGIEh3CisgICBpbnRlcnJ1cHQ7ICovCisjZGVmaW5lIE1JU0NfUkVHX0FFVV9TWVNfS0lMTF9TVEFUVVNfMAkJCQkgMHhhNjAwCisjZGVmaW5lIE1JU0NfUkVHX0FFVV9TWVNfS0lMTF9TVEFUVVNfMQkJCQkgMHhhNjA0CisjZGVmaW5lIE1JU0NfUkVHX0FFVV9TWVNfS0lMTF9TVEFUVVNfMgkJCQkgMHhhNjA4CisjZGVmaW5lIE1JU0NfUkVHX0FFVV9TWVNfS0lMTF9TVEFUVVNfMwkJCQkgMHhhNjBjCiAvKiBbUiA0XSBUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgZGV2aWNlLiAnMCcgLSAyIFBvcnRzOyAnMScgLSAxCiAgICBQb3J0LiAqLwogI2RlZmluZSBNSVNDX1JFR19CT05EX0lECQkJCQkgMHhhNDAwCkBAIC0xMjA2LDggKzEyNDUsODAgQEAKICAgIHN0YXJ0cyBhdCAweDAgZm9yIHRoZSBBMCB0YXBlLW91dCBhbmQgaW5jcmVtZW50cyBieSBvbmUgZm9yIGVhY2gKICAgIGFsbC1sYXllciB0YXBlLW91dC4gKi8KICNkZWZpbmUgTUlTQ19SRUdfQ0hJUF9SRVYJCQkJCSAweGE0MGMKLS8qIFtSVyAzMl0gVGhlIGZvbGxvd2luZyBkcml2ZXIgcmVnaXN0ZXJzKDEuLjYpIHJlcHJlc2VudCA2IGRyaXZlcnMgYW5kIDMyCi0gICBjbGllbnRzLiBFYWNoIGNsaWVudCBjYW4gYmUgY29udHJvbGxlZCBieSBvbmUgZHJpdmVyIG9ubHkuIE9uZSBpbiBlYWNoCisvKiBbUlcgMzJdIFRoZSBmb2xsb3dpbmcgZHJpdmVyIHJlZ2lzdGVycygxLi4uMTYpIHJlcHJlc2VudCAxNiBkcml2ZXJzIGFuZAorICAgMzIgY2xpZW50cy4gRWFjaCBjbGllbnQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb25lIGRyaXZlciBvbmx5LiBPbmUgaW4gZWFjaAorICAgYml0IHJlcHJlc2VudCB0aGF0IHRoaXMgZHJpdmVyIGNvbnRyb2wgdGhlIGFwcHJvcHJpYXRlIGNsaWVudCAoRXg6IGJpdCA1CisgICBpcyBzZXQgbWVhbnMgdGhpcyBkcml2ZXIgY29udHJvbCBjbGllbnQgbnVtYmVyIDUpLiBhZGRyMSA9IHNldDsgYWRkcjAgPQorICAgY2xlYXI7IHJlYWQgZnJvbSBib3RoIGFkZHJlc3NlcyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0ID0gc3RhdHVzLiB3cml0ZQorICAgdG8gYWRkcmVzcyAxIHdpbGwgc2V0IGEgcmVxdWVzdCB0byBjb250cm9sIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyCisgICBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcyBzZXQuIGlmIHRoZSBjbGllbnQgaXMgZnJlZSAodGhlCisgICBhcHByb3ByaWF0ZSBiaXQgaW4gYWxsIHRoZSBvdGhlciBkcml2ZXJzIGlzIGNsZWFyKSBvbmUgd2lsbCBiZSB3cml0dGVuIHRvCisgICB0aGF0IGRyaXZlciByZWdpc3RlcjsgaWYgdGhlIGNsaWVudCBpc24ndCBmcmVlIHRoZSBiaXQgd2lsbCByZW1haW4gemVyby4KKyAgIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0ICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZ2FpbiBjb250cm9sIG9uIGEKKyAgIGNsaWVudCBpdCBhbHJlYWR5IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXCisgICBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCkuIHdyaXRlIHRvIGFkZHJlc3MgMCB3aWxsIHNldCBhIHJlcXVlc3QgdG8KKyAgIGZyZWUgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMKKyAgIHNldC4gaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBjbGVhciAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGZyZWUgYSBjbGllbnQKKyAgIGl0IGRvZXNuJ3QgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cgaW50ZXJydXB0IHdpbGwKKyAgIGJlIGFzc2VydGVkKS4gKi8KKyNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTAJCQkJIDB4YTNlMAorI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xMF9TSVpFIAkJCSAyCisvKiBbUlcgMzJdIFRoZSBmb2xsb3dpbmcgZHJpdmVyIHJlZ2lzdGVycygxLi4uMTYpIHJlcHJlc2VudCAxNiBkcml2ZXJzIGFuZAorICAgMzIgY2xpZW50cy4gRWFjaCBjbGllbnQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb25lIGRyaXZlciBvbmx5LiBPbmUgaW4gZWFjaAorICAgYml0IHJlcHJlc2VudCB0aGF0IHRoaXMgZHJpdmVyIGNvbnRyb2wgdGhlIGFwcHJvcHJpYXRlIGNsaWVudCAoRXg6IGJpdCA1CisgICBpcyBzZXQgbWVhbnMgdGhpcyBkcml2ZXIgY29udHJvbCBjbGllbnQgbnVtYmVyIDUpLiBhZGRyMSA9IHNldDsgYWRkcjAgPQorICAgY2xlYXI7IHJlYWQgZnJvbSBib3RoIGFkZHJlc3NlcyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0ID0gc3RhdHVzLiB3cml0ZQorICAgdG8gYWRkcmVzcyAxIHdpbGwgc2V0IGEgcmVxdWVzdCB0byBjb250cm9sIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyCisgICBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcyBzZXQuIGlmIHRoZSBjbGllbnQgaXMgZnJlZSAodGhlCisgICBhcHByb3ByaWF0ZSBiaXQgaW4gYWxsIHRoZSBvdGhlciBkcml2ZXJzIGlzIGNsZWFyKSBvbmUgd2lsbCBiZSB3cml0dGVuIHRvCisgICB0aGF0IGRyaXZlciByZWdpc3RlcjsgaWYgdGhlIGNsaWVudCBpc24ndCBmcmVlIHRoZSBiaXQgd2lsbCByZW1haW4gemVyby4KKyAgIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0ICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZ2FpbiBjb250cm9sIG9uIGEKKyAgIGNsaWVudCBpdCBhbHJlYWR5IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXCisgICBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCkuIHdyaXRlIHRvIGFkZHJlc3MgMCB3aWxsIHNldCBhIHJlcXVlc3QgdG8KKyAgIGZyZWUgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMKKyAgIHNldC4gaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBjbGVhciAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGZyZWUgYSBjbGllbnQKKyAgIGl0IGRvZXNuJ3QgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cgaW50ZXJydXB0IHdpbGwKKyAgIGJlIGFzc2VydGVkKS4gKi8KKyNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTEJCQkJIDB4YTNlOAorI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xMV9TSVpFIAkJCSAyCisvKiBbUlcgMzJdIFRoZSBmb2xsb3dpbmcgZHJpdmVyIHJlZ2lzdGVycygxLi4uMTYpIHJlcHJlc2VudCAxNiBkcml2ZXJzIGFuZAorICAgMzIgY2xpZW50cy4gRWFjaCBjbGllbnQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb25lIGRyaXZlciBvbmx5LiBPbmUgaW4gZWFjaAorICAgYml0IHJlcHJlc2VudCB0aGF0IHRoaXMgZHJpdmVyIGNvbnRyb2wgdGhlIGFwcHJvcHJpYXRlIGNsaWVudCAoRXg6IGJpdCA1CisgICBpcyBzZXQgbWVhbnMgdGhpcyBkcml2ZXIgY29udHJvbCBjbGllbnQgbnVtYmVyIDUpLiBhZGRyMSA9IHNldDsgYWRkcjAgPQorICAgY2xlYXI7IHJlYWQgZnJvbSBib3RoIGFkZHJlc3NlcyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0ID0gc3RhdHVzLiB3cml0ZQorICAgdG8gYWRkcmVzcyAxIHdpbGwgc2V0IGEgcmVxdWVzdCB0byBjb250cm9sIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyCisgICBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcyBzZXQuIGlmIHRoZSBjbGllbnQgaXMgZnJlZSAodGhlCisgICBhcHByb3ByaWF0ZSBiaXQgaW4gYWxsIHRoZSBvdGhlciBkcml2ZXJzIGlzIGNsZWFyKSBvbmUgd2lsbCBiZSB3cml0dGVuIHRvCisgICB0aGF0IGRyaXZlciByZWdpc3RlcjsgaWYgdGhlIGNsaWVudCBpc24ndCBmcmVlIHRoZSBiaXQgd2lsbCByZW1haW4gemVyby4KKyAgIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0ICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZ2FpbiBjb250cm9sIG9uIGEKKyAgIGNsaWVudCBpdCBhbHJlYWR5IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXCisgICBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCkuIHdyaXRlIHRvIGFkZHJlc3MgMCB3aWxsIHNldCBhIHJlcXVlc3QgdG8KKyAgIGZyZWUgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMKKyAgIHNldC4gaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBjbGVhciAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGZyZWUgYSBjbGllbnQKKyAgIGl0IGRvZXNuJ3QgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cgaW50ZXJydXB0IHdpbGwKKyAgIGJlIGFzc2VydGVkKS4gKi8KKyNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTIJCQkJIDB4YTNmMAorI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xMl9TSVpFIAkJCSAyCisvKiBbUlcgMzJdIFRoZSBmb2xsb3dpbmcgZHJpdmVyIHJlZ2lzdGVycygxLi4uMTYpIHJlcHJlc2VudCAxNiBkcml2ZXJzIGFuZAorICAgMzIgY2xpZW50cy4gRWFjaCBjbGllbnQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb25lIGRyaXZlciBvbmx5LiBPbmUgaW4gZWFjaAorICAgYml0IHJlcHJlc2VudCB0aGF0IHRoaXMgZHJpdmVyIGNvbnRyb2wgdGhlIGFwcHJvcHJpYXRlIGNsaWVudCAoRXg6IGJpdCA1CisgICBpcyBzZXQgbWVhbnMgdGhpcyBkcml2ZXIgY29udHJvbCBjbGllbnQgbnVtYmVyIDUpLiBhZGRyMSA9IHNldDsgYWRkcjAgPQorICAgY2xlYXI7IHJlYWQgZnJvbSBib3RoIGFkZHJlc3NlcyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0ID0gc3RhdHVzLiB3cml0ZQorICAgdG8gYWRkcmVzcyAxIHdpbGwgc2V0IGEgcmVxdWVzdCB0byBjb250cm9sIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyCisgICBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcyBzZXQuIGlmIHRoZSBjbGllbnQgaXMgZnJlZSAodGhlCisgICBhcHByb3ByaWF0ZSBiaXQgaW4gYWxsIHRoZSBvdGhlciBkcml2ZXJzIGlzIGNsZWFyKSBvbmUgd2lsbCBiZSB3cml0dGVuIHRvCisgICB0aGF0IGRyaXZlciByZWdpc3RlcjsgaWYgdGhlIGNsaWVudCBpc24ndCBmcmVlIHRoZSBiaXQgd2lsbCByZW1haW4gemVyby4KKyAgIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0ICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZ2FpbiBjb250cm9sIG9uIGEKKyAgIGNsaWVudCBpdCBhbHJlYWR5IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXCisgICBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCkuIHdyaXRlIHRvIGFkZHJlc3MgMCB3aWxsIHNldCBhIHJlcXVlc3QgdG8KKyAgIGZyZWUgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMKKyAgIHNldC4gaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBjbGVhciAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGZyZWUgYSBjbGllbnQKKyAgIGl0IGRvZXNuJ3QgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cgaW50ZXJydXB0IHdpbGwKKyAgIGJlIGFzc2VydGVkKS4gKi8KKyNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTMJCQkJIDB4YTNmOAorI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xM19TSVpFIAkJCSAyCisvKiBbUlcgMzJdIFRoZSBmb2xsb3dpbmcgZHJpdmVyIHJlZ2lzdGVycygxLi4uMTYpIHJlcHJlc2VudCAxNiBkcml2ZXJzIGFuZAorICAgMzIgY2xpZW50cy4gRWFjaCBjbGllbnQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb25lIGRyaXZlciBvbmx5LiBPbmUgaW4gZWFjaAogICAgYml0IHJlcHJlc2VudCB0aGF0IHRoaXMgZHJpdmVyIGNvbnRyb2wgdGhlIGFwcHJvcHJpYXRlIGNsaWVudCAoRXg6IGJpdCA1CiAgICBpcyBzZXQgbWVhbnMgdGhpcyBkcml2ZXIgY29udHJvbCBjbGllbnQgbnVtYmVyIDUpLiBhZGRyMSA9IHNldDsgYWRkcjAgPQogICAgY2xlYXI7IHJlYWQgZnJvbSBib3RoIGFkZHJlc3NlcyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0ID0gc3RhdHVzLiB3cml0ZQpAQCAtMTIyMyw2ICsxMzM0LDQ3IEBACiAgICBpdCBkb2Vzbid0IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXIGludGVycnVwdCB3aWxsCiAgICBiZSBhc3NlcnRlZCkuICovCiAjZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEJCQkJIDB4YTUxMAorI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xNAkJCQkgMHhhNWUwCisjZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzE0X1NJWkUgCQkJIDIKKy8qIFtSVyAzMl0gVGhlIGZvbGxvd2luZyBkcml2ZXIgcmVnaXN0ZXJzKDEuLi4xNikgcmVwcmVzZW50IDE2IGRyaXZlcnMgYW5kCisgICAzMiBjbGllbnRzLiBFYWNoIGNsaWVudCBjYW4gYmUgY29udHJvbGxlZCBieSBvbmUgZHJpdmVyIG9ubHkuIE9uZSBpbiBlYWNoCisgICBiaXQgcmVwcmVzZW50IHRoYXQgdGhpcyBkcml2ZXIgY29udHJvbCB0aGUgYXBwcm9wcmlhdGUgY2xpZW50IChFeDogYml0IDUKKyAgIGlzIHNldCBtZWFucyB0aGlzIGRyaXZlciBjb250cm9sIGNsaWVudCBudW1iZXIgNSkuIGFkZHIxID0gc2V0OyBhZGRyMCA9CisgICBjbGVhcjsgcmVhZCBmcm9tIGJvdGggYWRkcmVzc2VzIHdpbGwgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgPSBzdGF0dXMuIHdyaXRlCisgICB0byBhZGRyZXNzIDEgd2lsbCBzZXQgYSByZXF1ZXN0IHRvIGNvbnRyb2wgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIKKyAgIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzIHNldC4gaWYgdGhlIGNsaWVudCBpcyBmcmVlICh0aGUKKyAgIGFwcHJvcHJpYXRlIGJpdCBpbiBhbGwgdGhlIG90aGVyIGRyaXZlcnMgaXMgY2xlYXIpIG9uZSB3aWxsIGJlIHdyaXR0ZW4gdG8KKyAgIHRoYXQgZHJpdmVyIHJlZ2lzdGVyOyBpZiB0aGUgY2xpZW50IGlzbid0IGZyZWUgdGhlIGJpdCB3aWxsIHJlbWFpbiB6ZXJvLgorICAgaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBzZXQgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBnYWluIGNvbnRyb2wgb24gYQorICAgY2xpZW50IGl0IGFscmVhZHkgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cKKyAgIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkKS4gd3JpdGUgdG8gYWRkcmVzcyAwIHdpbGwgc2V0IGEgcmVxdWVzdCB0bworICAgZnJlZSBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpciBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcworICAgc2V0LiBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIGNsZWFyICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZnJlZSBhIGNsaWVudAorICAgaXQgZG9lc24ndCBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVyBpbnRlcnJ1cHQgd2lsbAorICAgYmUgYXNzZXJ0ZWQpLiAqLworI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xNQkJCQkgMHhhNWU4CisjZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzE1X1NJWkUgCQkJIDIKKy8qIFtSVyAzMl0gVGhlIGZvbGxvd2luZyBkcml2ZXIgcmVnaXN0ZXJzKDEuLi4xNikgcmVwcmVzZW50IDE2IGRyaXZlcnMgYW5kCisgICAzMiBjbGllbnRzLiBFYWNoIGNsaWVudCBjYW4gYmUgY29udHJvbGxlZCBieSBvbmUgZHJpdmVyIG9ubHkuIE9uZSBpbiBlYWNoCisgICBiaXQgcmVwcmVzZW50IHRoYXQgdGhpcyBkcml2ZXIgY29udHJvbCB0aGUgYXBwcm9wcmlhdGUgY2xpZW50IChFeDogYml0IDUKKyAgIGlzIHNldCBtZWFucyB0aGlzIGRyaXZlciBjb250cm9sIGNsaWVudCBudW1iZXIgNSkuIGFkZHIxID0gc2V0OyBhZGRyMCA9CisgICBjbGVhcjsgcmVhZCBmcm9tIGJvdGggYWRkcmVzc2VzIHdpbGwgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgPSBzdGF0dXMuIHdyaXRlCisgICB0byBhZGRyZXNzIDEgd2lsbCBzZXQgYSByZXF1ZXN0IHRvIGNvbnRyb2wgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIKKyAgIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzIHNldC4gaWYgdGhlIGNsaWVudCBpcyBmcmVlICh0aGUKKyAgIGFwcHJvcHJpYXRlIGJpdCBpbiBhbGwgdGhlIG90aGVyIGRyaXZlcnMgaXMgY2xlYXIpIG9uZSB3aWxsIGJlIHdyaXR0ZW4gdG8KKyAgIHRoYXQgZHJpdmVyIHJlZ2lzdGVyOyBpZiB0aGUgY2xpZW50IGlzbid0IGZyZWUgdGhlIGJpdCB3aWxsIHJlbWFpbiB6ZXJvLgorICAgaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBzZXQgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBnYWluIGNvbnRyb2wgb24gYQorICAgY2xpZW50IGl0IGFscmVhZHkgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cKKyAgIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkKS4gd3JpdGUgdG8gYWRkcmVzcyAwIHdpbGwgc2V0IGEgcmVxdWVzdCB0bworICAgZnJlZSBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpciBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcworICAgc2V0LiBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIGNsZWFyICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZnJlZSBhIGNsaWVudAorICAgaXQgZG9lc24ndCBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVyBpbnRlcnJ1cHQgd2lsbAorICAgYmUgYXNzZXJ0ZWQpLiAqLworI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xNgkJCQkgMHhhNWYwCisjZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzE2X1NJWkUgCQkJIDIKKy8qIFtSVyAxXSBlMWhtZiBmb3IgV09MLiBJZiBjbHIgV09MIHNpZ25hbCBvIHRoZSBQWFAgd2lsbCBiZSBzZW5kIG9uIGJpdCAwCisgICBvbmx5LiAqLworI2RlZmluZSBNSVNDX1JFR19FMUhNRl9NT0RFCQkJCQkgMHhhNWY4CiAvKiBbUlcgMzJdIEdQSU8uIFszMS0yOF0gRkxPQVQgcG9ydCAwOyBbMjctMjRdIEZMT0FUIHBvcnQgMDsgV2hlbiBhbnkgb2YKICAgIHRoZXNlIGJpdHMgaXMgd3JpdHRlbiBhcyBhICcxJzsgdGhlIGNvcnJlc3BvbmRpbmcgU1BJTyBiaXQgd2lsbCB0dXJuIG9mZgogICAgaXQncyBkcml2ZXJzIGFuZCBiZWNvbWUgYW4gaW5wdXQuIFRoaXMgaXMgdGhlIHJlc2V0IHN0YXRlIG9mIGFsbCBHUElPCkBAIC0xMjQwLDYgKzEzOTIsMTggQEAKICAgIFRoaXMgaXMgdGhlIHJlc3VsdCB2YWx1ZSBvZiB0aGUgcGluOyBub3QgdGhlIGRyaXZlIHZhbHVlLiBXcml0aW5nIHRoZXNlCiAgICBiaXRzIHdpbGwgaGF2ZSBub3QgZWZmZWN0LiAqLwogI2RlZmluZSBNSVNDX1JFR19HUElPCQkJCQkJIDB4YTQ5MAorLyogW1IgMjhdIHRoaXMgZmllbGQgaG9sZCB0aGUgbGFzdCBpbmZvcm1hdGlvbiB0aGF0IGNhdXNlZCByZXNlcnZlZAorICAgYXR0ZW50aW9uLiBiaXRzIFsxOTowXSAtIGFkZHJlc3M7IFsyMjoyMF0gZnVuY3Rpb247IFsyM10gcmVzZXJ2ZWQ7CisgICBbMjc6MjRdIHRoZSBtYXN0ZXIgdGhhdGNhdXNlZCB0aGUgYXR0ZW50aW9uIC0gYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcKKyAgIGVuY29kZWluZzoxID0gcHhwOyAyID0gbWNwOyAzID0gdXNkbTsgNCA9IHRzZG07IDUgPSB4c2RtOyA2ID0gY3NkbTsgNyA9CisgICBkYnU7IDggPSBkbWFlICovCisjZGVmaW5lIE1JU0NfUkVHX0dSQ19SU1ZfQVRUTgkJCQkJIDB4YTNjMAorLyogW1IgMjhdIHRoaXMgZmllbGQgaG9sZCB0aGUgbGFzdCBpbmZvcm1hdGlvbiB0aGF0IGNhdXNlZCB0aW1lb3V0CisgICBhdHRlbnRpb24uIGJpdHMgWzE5OjBdIC0gYWRkcmVzczsgWzIyOjIwXSBmdW5jdGlvbjsgWzIzXSByZXNlcnZlZDsKKyAgIFsyNzoyNF0gdGhlIG1hc3RlciB0aGF0Y2F1c2VkIHRoZSBhdHRlbnRpb24gLSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZworICAgZW5jb2RlaW5nOjEgPSBweHA7IDIgPSBtY3A7IDMgPSB1c2RtOyA0ID0gdHNkbTsgNSA9IHhzZG07IDYgPSBjc2RtOyA3ID0KKyAgIGRidTsgOCA9IGRtYWUgKi8KKyNkZWZpbmUgTUlTQ19SRUdfR1JDX1RJTUVPVVRfQVRUTgkJCQkgMHhhM2M0CiAvKiBbUlcgMV0gU2V0dGluZyB0aGlzIGJpdCBlbmFibGVzIGEgdGltZXIgaW4gdGhlIEdSQyBibG9jayB0byB0aW1lb3V0IGFueQogICAgYWNjZXNzIHRoYXQgZG9lcyBub3QgZmluaXNoIHdpdGhpbgogICAgfm1pc2NfcmVnaXN0ZXJzX2dyY190aW1vdXRfdmFsLmdyY190aW1lb3V0X3ZhbCBjeWNsZXMuIFdoZW4gdGhpcyBiaXQgaXMKQEAgLTEyODIsNiArMTQ0NiwxMSBAQAogI2RlZmluZSBNSVNDX1JFR19NSVNDX1BSVFlfTUFTSyAJCQkJIDB4YTM5OAogLyogW1IgMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgTUlTQ19SRUdfTUlTQ19QUlRZX1NUUwkJCQkJIDB4YTM4YworI2RlZmluZSBNSVNDX1JFR19OSUdfV09MX1AwCQkJCQkgMHhhMjcwCisjZGVmaW5lIE1JU0NfUkVHX05JR19XT0xfUDEJCQkJCSAweGEyNzQKKy8qIFtSIDFdIElmIHNldCBpbmRpY2F0ZSB0aGF0IHRoZSBwY2llX3JzdF9iIHdhcyBhc3NlcnRlZCB3aXRob3V0IHBlcnN0CisgICBhc3NlcnRpb24gKi8KKyNkZWZpbmUgTUlTQ19SRUdfUENJRV9IT1RfUkVTRVQgCQkJCSAweGE2MTgKIC8qIFtSVyAzMl0gMzIgTFNCIG9mIHN0b3JtIFBMTCBmaXJzdCByZWdpc3RlcjsgcmVzZXQgdmFsID0gMHggMDcxZDI5MTEuCiAgICBpbnNpZGUgb3JkZXIgb2YgdGhlIGJpdHMgaXM6IFswXSBQMSBkaXZpZGVyWzBdIChyZXNldCB2YWx1ZSAxKTsgWzFdIFAxCiAgICBkaXZpZGVyWzFdIChyZXNldCB2YWx1ZSAwKTsgWzJdIFAxIGRpdmlkZXJbMl0gKHJlc2V0IHZhbHVlIDApOyBbM10gUDEKQEAgLTEzMDMsNyArMTQ3Miw3IEBACiAjZGVmaW5lIE1JU0NfUkVHX1BMTF9TVE9STV9DVFJMXzIJCQkJIDB4YTI5OAogI2RlZmluZSBNSVNDX1JFR19QTExfU1RPUk1fQ1RSTF8zCQkJCSAweGEyOWMKICNkZWZpbmUgTUlTQ19SRUdfUExMX1NUT1JNX0NUUkxfNAkJCQkgMHhhMmEwCi0vKiBbUlcgMzJdIHJlc2V0IHJlZyMxOyByaXRlL3JlYWQgb25lID0gdGhlIHNwZWNpZmljIGJsb2NrIGlzIG91dCBvZiByZXNldDsKKy8qIFtSVyAzMl0gcmVzZXQgcmVnIzI7IHJpdGUvcmVhZCBvbmUgPSB0aGUgc3BlY2lmaWMgYmxvY2sgaXMgb3V0IG9mIHJlc2V0OwogICAgd3JpdGUvcmVhZCB6ZXJvID0gdGhlIHNwZWNpZmljIGJsb2NrIGlzIGluIHJlc2V0OyBhZGRyIDAtd3ItIHRoZSB3cml0ZQogICAgdmFsdWUgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSByZWdpc3RlcjsgYWRkciAxLXNldCAtIG9uZSB3aWxsIGJlIHdyaXR0ZW4KICAgIHRvIGFsbCB0aGUgYml0cyB0aGF0IGhhdmUgdGhlIHZhbHVlIG9mIG9uZSBpbiB0aGUgZGF0YSB3cml0dGVuIChiaXRzIHRoYXQKQEAgLTEzMTEsMTQgKzE0ODAsMTIgQEAKICAgIHdyaXR0ZW4gdG8gYWxsIHRoZSBiaXRzIHRoYXQgaGF2ZSB0aGUgdmFsdWUgb2Ygb25lIGluIHRoZSBkYXRhIHdyaXR0ZW4KICAgIChiaXRzIHRoYXQgaGF2ZSB0aGUgdmFsdWUgb2YgemVybyB3aWxsIG5vdCBiZSBjaGFuZ2UpOyBhZGRyIDMtaWdub3JlOwogICAgcmVhZCBpZ25vcmUgZnJvbSBhbGwgYWRkciBleGNlcHQgYWRkciAwMDsgaW5zaWRlIG9yZGVyIG9mIHRoZSBiaXRzIGlzOgotICAgWzBdIHJzdF9icmIxOyBbMV0gcnN0X3ByczsgWzJdIHJzdF9zcmM7IFszXSByc3RfdHNkbTsgWzRdIHJzdF90c2VtOyBbNV0KLSAgIHJzdF90Y207IFs2XSByc3RfcmJjcjsgWzddIHJzdF9uaWc7IFs4XSByc3RfdXNkbTsgWzldIHJzdF91Y207IFsxMF0KLSAgIHJzdF91c2VtOyBbMTFdIHJzdF91cGI7IFsxMl0gcnN0X2NjbTsgWzEzXSByc3RfY3NlbTsgWzE0XSByc3RfY3NkbTsgWzE1XQotICAgcnN0X3JiY3U7IFsxNl0gcnN0X3BiZjsgWzE3XSByc3RfcW07IFsxOF0gcnN0X3RtOyBbMTldIHJzdF9kb3JxOyBbMjBdCi0gICByc3RfeGNtOyBbMjFdIHJzdF94c2RtOyBbMjJdIHJzdF94c2VtOyBbMjNdIHJzdF9yYmN0OyBbMjRdIHJzdF9jZHU7IFsyNV0KLSAgIHJzdF9jZmM7IFsyNl0gcnN0X3B4cDsgWzI3XSByc3RfcHhwdjsgWzI4XSByc3RfcmJjcDsgWzI5XSByc3RfaGM7IFszMF0KLSAgIHJzdF9kbWFlOyBbMzFdIHJzdF9zZW1pX3J0YzsgKi8KLSNkZWZpbmUgTUlTQ19SRUdfUkVTRVRfUkVHXzEJCQkJCSAweGE1ODAKKyAgIFswXSByc3RfYm1hYzA7IFsxXSByc3RfYm1hYzE7IFsyXSByc3RfZW1hYzA7IFszXSByc3RfZW1hYzE7IFs0XSByc3RfZ3JjOworICAgWzVdIHJzdF9tY3Bfbl9yZXNldF9yZWdfaGFyZF9jb3JlOyBbNl0gcnN0XyBtY3Bfbl9oYXJkX2NvcmVfcnN0X2I7IFs3XQorICAgcnN0XyBtY3Bfbl9yZXNldF9jbW5fY3B1OyBbOF0gcnN0XyBtY3Bfbl9yZXNldF9jbW5fY29yZTsgWzldIHJzdF9yYmNuOworICAgWzEwXSByc3RfZGJnOyBbMTFdIHJzdF9taXNjX2NvcmU7IFsxMl0gcnN0X2RidWUgKFVBUlQpOyBbMTNdCisgICBQY2lfcmVzZXRtZGlvX247IFsxNF0gcnN0X2VtYWMwX2hhcmRfY29yZTsgWzE1XSByc3RfZW1hYzFfaGFyZF9jb3JlOyAxNl0KKyAgIHJzdF9weHBfcnFfcmRfd3I7IDMxOjE3XSByZXNlcnZlZCAqLwogI2RlZmluZSBNSVNDX1JFR19SRVNFVF9SRUdfMgkJCQkJIDB4YTU5MAogLyogW1JXIDIwXSAyMCBiaXQgR1JDIGFkZHJlc3Mgd2hlcmUgdGhlIHNjcmF0Y2gtcGFkIG9mIHRoZSBNQ1AgdGhhdCBpcwogICAgc2hhcmVkIHdpdGggdGhlIGRyaXZlciByZXNpZGVzICovCkBAIC0xMzQ1LDcgKzE1MTIsNyBAQAogICAgc2VsZWN0IFZBVVggc3VwcGx5LiAoVGhpcyBpcyBhbiBvdXRwdXQgcGluIG9ubHk7IGl0IGlzIG5vdCBjb250cm9sbGVkIGJ5CiAgICB0aGUgU0VUIGFuZCBDTFIgZmllbGRzOyBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZSBNYWluIFBvd2VyIFNNOyB0aGUgRkxPQVQKICAgIGZpZWxkIGlzIG5vdCBhcHBsaWNhYmxlIGZvciB0aGlzIHBpbjsgb25seSB0aGUgVkFMVUUgZmllbGRzIGlzIHJlbGV2YW50IC0KLSAgIGl0IHJlZmxlY3RzIHRoZSBvdXRwdXQgdmFsdWUpOyBbM10gcmVzZXJ2ZWQ7IFs0XSBzcGlvXzQ7IFs1XSBzcGlvXzU7IFs2XQorICAgaXQgcmVmbGVjdHMgdGhlIG91dHB1dCB2YWx1ZSk7IFszXSBwb3J0IHN3YXAgWzRdIHNwaW9fNDsgWzVdIHNwaW9fNTsgWzZdCiAgICBCaXQgMCBvZiBVTVAgZGV2aWNlIElEIHNlbGVjdDsgcmVhZCBieSBVTVAgZmlybXdhcmU7IFs3XSBCaXQgMSBvZiBVTVAKICAgIGRldmljZSBJRCBzZWxlY3Q7IHJlYWQgYnkgVU1QIGZpcm13YXJlLiAqLwogI2RlZmluZSBNSVNDX1JFR19TUElPCQkJCQkJIDB4YTRmYwpAQCAtMTM5NCw4ICsxNTYxLDkgQEAKICNkZWZpbmUgTklHX1JFR19CUkIxX1BBVVNFX0lOX0VOCQkJCSAweDEwMGM4CiAvKiBbUlcgMV0gb3V0cHV0IGVuYWJsZSBmb3IgUlggQlJCMSBMUCBJRiAqLwogI2RlZmluZSBOSUdfUkVHX0JSQl9MQl9PVVRfRU4JCQkJCSAweDEwMTAwCi0vKiBbV0JfVyA3Ml0gRGVidWcgcGFja2V0IHRvIExQIGZyb20gUkJDOyBEYXRhIHNwZWxsaW5nOls2MzowXSBkYXRhOyA2NF0KLSAgIGVycm9yOyBbNjc6NjVdZW9wX2J2YWxpZDsgWzY4XWVvcDsgWzY5XXNvcDsgWzcwXXBvcnRfaWQ7IDcxXWZsdXNoICovCisvKiBbV0JfVyA4Ml0gRGVidWcgcGFja2V0IHRvIExQIGZyb20gUkJDOyBEYXRhIHNwZWxsaW5nOls2MzowXSBkYXRhOyA2NF0KKyAgIGVycm9yOyBbNjc6NjVdZW9wX2J2YWxpZDsgWzY4XWVvcDsgWzY5XXNvcDsgWzcwXXBvcnRfaWQ7IDcxXWZsdXNoOworICAgNzI6NzNdLXZuaWNfbnVtOyA4MTo3NF0tc2lkZWJhbmRfaW5mbyAqLwogI2RlZmluZSBOSUdfUkVHX0RFQlVHX1BBQ0tFVF9MQiAJCQkJIDB4MTA4MDAKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFRYIERlYnVnIHBhY2tldCAqLwogI2RlZmluZSBOSUdfUkVHX0VHUkVTU19ERUJVR19JTl9FTgkJCQkgMHgxMDBkYwpAQCAtMTQwOSw2ICsxNTc3LDggQEAKIC8qIFtSVyAxXSBNQUMgY29uZmlndXJhdGlvbiBmb3IgcGFja2V0cyBvZiBwb3J0MC4gSWYgMSAtIGFsbCBwYWNrZXQgb3V0cHV0cwogICAgdG8gZW1hYyBmb3IgcG9ydDA7IG90aGVyIHdheSB0byBibWFjIGZvciBwb3J0MCAqLwogI2RlZmluZSBOSUdfUkVHX0VHUkVTU19FTUFDMF9QT1JUCQkJCSAweDEwMDU4CisvKiBbUlcgMzJdIFRYX01OR19GSUZPIGluIE5JR19UWF9QT1JUMDsgZGF0YVszMTowXSB3cml0dGVuIGluIEZJRk8gb3JkZXIuICovCisjZGVmaW5lIE5JR19SRUdfRUdSRVNTX01ORzBfRklGTwkJCQkgMHgxMDQ1YwogLyogW1JXIDFdIElucHV0IGVuYWJsZSBmb3IgVFggUEJGIHVzZXIgcGFja2V0IHBvcnQwIElGICovCiAjZGVmaW5lIE5JR19SRUdfRUdSRVNTX1BCRjBfSU5fRU4JCQkJIDB4MTAwY2MKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFRYIFBCRiB1c2VyIHBhY2tldCBwb3J0MSBJRiAqLwpAQCAtMTQzOCw2ICsxNjA4LDggQEAKICNkZWZpbmUgTklHX1JFR19JTkdSRVNTX0VPUF9MQl9GSUZPCQkJCSAweDEwNGU0CiAvKiBbUlcgMV0gbGVkIDEwZyBmb3IgcG9ydCAwICovCiAjZGVmaW5lIE5JR19SRUdfTEVEXzEwR19QMAkJCQkJIDB4MTAzMjAKKy8qIFtSVyAxXSBsZWQgMTBnIGZvciBwb3J0IDEgKi8KKyNkZWZpbmUgTklHX1JFR19MRURfMTBHX1AxCQkJCQkgMHgxMDMyNAogLyogW1JXIDFdIFBvcnQwOiBUaGlzIGJpdCBpcyBzZXQgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgdGhlCiAgICB+bmlnX3JlZ2lzdGVyc19sZWRfY29udHJvbF9ibGlua19yYXRlX3AwLmxlZF9jb250cm9sX2JsaW5rX3JhdGVfcDAgZmllbGQKICAgIGRlZmluZWQgYmVsb3cuIElmIHRoaXMgYml0IGlzIGNsZWFyZWQ7IHRoZW4gdGhlIGJsaW5rIHJhdGUgd2lsbCBiZSBhYm91dApAQCAtMTQ0OCw3ICsxNjIwLDcgQEAKICAgIGlzIHJlc2V0IHRvIDB4MDgwOyBnaXZpbmcgYSBkZWZhdWx0IGJsaW5rIHBlcmlvZCBvZiBhcHByb3hpbWF0ZWx5IDhIei4gKi8KICNkZWZpbmUgTklHX1JFR19MRURfQ09OVFJPTF9CTElOS19SQVRFX1AwCQkJIDB4MTAzMTAKIC8qIFtSVyAxXSBQb3J0MDogSWYgc2V0IGFsb25nIHdpdGggdGhlCi0gICBuaWdfcmVnaXN0ZXJzX2xlZF9jb250cm9sX292ZXJyaWRlX3RyYWZmaWNfcDAubGVkX2NvbnRyb2xfb3ZlcnJpZGVfdHJhZmZpY19wMAorIH5uaWdfcmVnaXN0ZXJzX2xlZF9jb250cm9sX292ZXJyaWRlX3RyYWZmaWNfcDAubGVkX2NvbnRyb2xfb3ZlcnJpZGVfdHJhZmZpY19wMAogICAgYml0IGFuZCB+bmlnX3JlZ2lzdGVyc19sZWRfY29udHJvbF90cmFmZmljX3AwLmxlZF9jb250cm9sX3RyYWZmaWNfcDAgTEVECiAgICBiaXQ7IHRoZSBUcmFmZmljIExFRCB3aWxsIGJsaW5rIHdpdGggdGhlIGJsaW5rIHJhdGUgc3BlY2lmaWVkIGluCiAgICB+bmlnX3JlZ2lzdGVyc19sZWRfY29udHJvbF9ibGlua19yYXRlX3AwLmxlZF9jb250cm9sX2JsaW5rX3JhdGVfcDAgYW5kCkBAIC0xNDcwLDE5ICsxNjQyLDQ3IEBACiAvKiBbUlcgNF0gbGVkIG1vZGUgZm9yIHBvcnQwOiAwIE1BQzsgMS0zIFBIWTE7IDQgTUFDMjsgNS03IFBIWTQ7IDgtTUFDMzsKICAgIDktMTFQSFk3OyAxMiBNQUM0OyAxMy0xNSBQSFkxMDsgKi8KICNkZWZpbmUgTklHX1JFR19MRURfTU9ERV9QMAkJCQkJIDB4MTAyZjAKKyNkZWZpbmUgTklHX1JFR19MTEgwX0FDUElfUEFUXzBfQ1JDCQkJCSAweDEwMTVjCisjZGVmaW5lIE5JR19SRUdfTExIMF9BQ1BJX1BBVF82X0xFTgkJCQkgMHgxMDE1NAogI2RlZmluZSBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTSwkJCQkgMHgxMDI0NAorI2RlZmluZSBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19NRgkJCQkgMHgxNjA0OAogLyogW1JXIDFdIHNlbmQgdG8gQlJCMSBpZiBubyBtYXRjaCBvbiBhbnkgb2YgUk1QIHJ1bGVzLiAqLwogI2RlZmluZSBOSUdfUkVHX0xMSDBfQlJCMV9OT1RfTUNQCQkJCSAweDEwMjVjCisvKiBbUlcgMl0gRGV0ZXJtaW5lIHRoZSBjbGFzc2lmaWNhdGlvbiBwYXJ0aWNpcGFudHMuIDA6IG5vIGNsYXNzaWZpY2F0aW9uLjE6CisgICBjbGFzc2lmaWNhdGlvbiB1cG9uIFZMQU4gaWQuIDI6IGNsYXNzaWZpY2F0aW9uIHVwb24gTUFDIGFkZHJlc3MuIDM6CisgICBjbGFzc2lmaWNhdGlvbiB1cG9uIGJvdGggVkxBTiBpZCAmIE1BQyBhZGRyLiAqLworI2RlZmluZSBOSUdfUkVHX0xMSDBfQ0xTX1RZUEUJCQkJCSAweDE2MDgwCiAvKiBbUlcgMzJdIGNtIGhlYWRlciBmb3IgbGxoMCAqLwogI2RlZmluZSBOSUdfUkVHX0xMSDBfQ01fSEVBREVSCQkJCQkgMHgxMDA3YworI2RlZmluZSBOSUdfUkVHX0xMSDBfREVTVF9JUF8wXzEJCQkJIDB4MTAxZGMKKyNkZWZpbmUgTklHX1JFR19MTEgwX0RFU1RfTUFDXzBfMAkJCQkgMHgxMDFjMAorLyogW1JXIDE2XSBkZXN0aW5hdGlvbiBUQ1AgYWRkcmVzcyAxLiBUaGUgTExIIHdpbGwgbG9vayBmb3IgdGhpcyBhZGRyZXNzIGluCisgICBhbGwgaW5jb21pbmcgcGFja2V0cy4gKi8KKyNkZWZpbmUgTklHX1JFR19MTEgwX0RFU1RfVENQXzAgCQkJCSAweDEwMjIwCisvKiBbUlcgMTZdIGRlc3RpbmF0aW9uIFVEUCBhZGRyZXNzIDEgVGhlIExMSCB3aWxsIGxvb2sgZm9yIHRoaXMgYWRkcmVzcyBpbgorICAgYWxsIGluY29taW5nIHBhY2tldHMuICovCisjZGVmaW5lIE5JR19SRUdfTExIMF9ERVNUX1VEUF8wIAkJCQkgMHgxMDIxNAogI2RlZmluZSBOSUdfUkVHX0xMSDBfRVJST1JfTUFTSyAJCQkJIDB4MTAwOGMKIC8qIFtSVyA4XSBldmVudCBpZCBmb3IgbGxoMCAqLwogI2RlZmluZSBOSUdfUkVHX0xMSDBfRVZFTlRfSUQJCQkJCSAweDEwMDg0CisjZGVmaW5lIE5JR19SRUdfTExIMF9GVU5DX0VOCQkJCQkgMHgxNjBmYworI2RlZmluZSBOSUdfUkVHX0xMSDBfRlVOQ19WTEFOX0lECQkJCSAweDE2MTAwCisvKiBbUlcgMV0gRGV0ZXJtaW5lIHRoZSBJUCB2ZXJzaW9uIHRvIGxvb2sgZm9yIGluCisgICB+bmlnX3JlZ2lzdGVyc19sbGgwX2Rlc3RfaXBfMC5sbGgwX2Rlc3RfaXBfMC4gMCAtIElQdjY7IDEtSVB2NCAqLworI2RlZmluZSBOSUdfUkVHX0xMSDBfSVBWNF9JUFY2XzAJCQkJIDB4MTAyMDgKKy8qIFtSVyAxXSB0IGJpdCBmb3IgbGxoMCAqLworI2RlZmluZSBOSUdfUkVHX0xMSDBfVF9CSVQJCQkJCSAweDEwMDc0CisvKiBbUlcgMTJdIFZMQU4gSUQgMS4gSW4gY2FzZSBvZiBWTEFOIHBhY2tldCB0aGUgTExIIHdpbGwgbG9vayBmb3IgdGhpcyBJRC4gKi8KKyNkZWZpbmUgTklHX1JFR19MTEgwX1ZMQU5fSURfMAkJCQkJIDB4MTAyMmMKIC8qIFtSVyA4XSBpbml0IGNyZWRpdCBjb3VudGVyIGZvciBwb3J0MCBpbiBMTEggKi8KICNkZWZpbmUgTklHX1JFR19MTEgwX1hDTV9JTklUX0NSRURJVAkJCQkgMHgxMDU1NAogI2RlZmluZSBOSUdfUkVHX0xMSDBfWENNX01BU0sJCQkJCSAweDEwMTMwCiAvKiBbUlcgMV0gc2VuZCB0byBCUkIxIGlmIG5vIG1hdGNoIG9uIGFueSBvZiBSTVAgcnVsZXMuICovCiAjZGVmaW5lIE5JR19SRUdfTExIMV9CUkIxX05PVF9NQ1AJCQkJIDB4MTAyZGMKKy8qIFtSVyAyXSBEZXRlcm1pbmUgdGhlIGNsYXNzaWZpY2F0aW9uIHBhcnRpY2lwYW50cy4gMDogbm8gY2xhc3NpZmljYXRpb24uMToKKyAgIGNsYXNzaWZpY2F0aW9uIHVwb24gVkxBTiBpZC4gMjogY2xhc3NpZmljYXRpb24gdXBvbiBNQUMgYWRkcmVzcy4gMzoKKyAgIGNsYXNzaWZpY2F0aW9uIHVwb24gYm90aCBWTEFOIGlkICYgTUFDIGFkZHIuICovCisjZGVmaW5lIE5JR19SRUdfTExIMV9DTFNfVFlQRQkJCQkJIDB4MTYwODQKIC8qIFtSVyAzMl0gY20gaGVhZGVyIGZvciBsbGgxICovCiAjZGVmaW5lIE5JR19SRUdfTExIMV9DTV9IRUFERVIJCQkJCSAweDEwMDgwCiAjZGVmaW5lIE5JR19SRUdfTExIMV9FUlJPUl9NQVNLIAkJCQkgMHgxMDA5MApAQCAtMTQ5MSwxMyArMTY5MSwyNiBAQAogLyogW1JXIDhdIGluaXQgY3JlZGl0IGNvdW50ZXIgZm9yIHBvcnQxIGluIExMSCAqLwogI2RlZmluZSBOSUdfUkVHX0xMSDFfWENNX0lOSVRfQ1JFRElUCQkJCSAweDEwNTY0CiAjZGVmaW5lIE5JR19SRUdfTExIMV9YQ01fTUFTSwkJCQkJIDB4MTAxMzQKKy8qIFtSVyAxXSBXaGVuIHRoaXMgYml0IGlzIHNldDsgdGhlIExMSCB3aWxsIGV4cGVjdCBhbGwgcGFja2V0cyB0byBiZSB3aXRoCisgICBlMWhvdiAqLworI2RlZmluZSBOSUdfUkVHX0xMSF9FMUhPVl9NT0RFCQkJCQkgMHgxNjBkOAorLyogW1JXIDFdIFdoZW4gdGhpcyBiaXQgaXMgc2V0OyB0aGUgTExIIHdpbGwgY2xhc3NpZnkgdGhlIHBhY2tldCBiZWZvcmUKKyAgIHNlbmRpbmcgaXQgdG8gdGhlIEJSQiBvciBjYWxjdWxhdGluZyBXb0wgb24gaXQuICovCisjZGVmaW5lIE5JR19SRUdfTExIX01GX01PREUJCQkJCSAweDE2MDI0CiAjZGVmaW5lIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAJCQkJIDB4MTAzMzAKICNkZWZpbmUgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMQkJCQkgMHgxMDMzNAogLyogW1JXIDFdIE91dHB1dCBzaWduYWwgZnJvbSBOSUcgdG8gRU1BQzAuIFdoZW4gc2V0IGVuYWJsZXMgdGhlIEVNQUMwIGJsb2NrLiAqLwogI2RlZmluZSBOSUdfUkVHX05JR19FTUFDMF9FTgkJCQkJIDB4MTAwM2MKKy8qIFtSVyAxXSBPdXRwdXQgc2lnbmFsIGZyb20gTklHIHRvIEVNQUMxLiBXaGVuIHNldCBlbmFibGVzIHRoZSBFTUFDMSBibG9jay4gKi8KKyNkZWZpbmUgTklHX1JFR19OSUdfRU1BQzFfRU4JCQkJCSAweDEwMDQwCiAvKiBbUlcgMV0gT3V0cHV0IHNpZ25hbCBmcm9tIE5JRyB0byBUWF9FTUFDMC4gV2hlbiBzZXQgaW5kaWNhdGVzIHRvIHRoZQogICAgRU1BQzAgdG8gc3RyaXAgdGhlIENSQyBmcm9tIHRoZSBpbmdyZXNzIHBhY2tldHMuICovCiAjZGVmaW5lIE5JR19SRUdfTklHX0lOR1JFU1NfRU1BQzBfTk9fQ1JDCQkJIDB4MTAwNDQKKy8qIFtSIDMyXSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBOSUdfUkVHX05JR19JTlRfU1RTXzAJCQkJCSAweDEwM2IwCisjZGVmaW5lIE5JR19SRUdfTklHX0lOVF9TVFNfMQkJCQkJIDB4MTAzYzAKKy8qIFtSIDMyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBOSUdfUkVHX05JR19QUlRZX1NUUwkJCQkJIDB4MTAzZDAKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFJYIFBCRiBMUCBJRiAqLwogI2RlZmluZSBOSUdfUkVHX1BCRl9MQl9JTl9FTgkJCQkJIDB4MTAwYjQKIC8qIFtSVyAxXSBWYWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIHdpbGwgYmUgdHJhbnNtaXR0ZWQgdG8gcG9ydCBzd2FwIHdoZW4KQEAgLTE1MTQsOSArMTcyNywyMSBAQAogLyogW1IgMzJdIFJ4IHN0YXRpc3RpY3MgOiBJbiB1c2VyIHBhY2tldHMgZGlzY2FyZGVkIGR1ZSB0byBCUkIgYmFja3ByZXNzdXJlCiAgICBmb3IgcG9ydDAgKi8KICNkZWZpbmUgTklHX1JFR19TVEFUMF9CUkJfRElTQ0FSRAkJCQkgMHgxMDVmMAorLyogW1dCX1IgMzZdIFR4IHN0YXRpc3RpY3MgOiBOdW1iZXIgb2YgcGFja2V0cyBmcm9tIGVtYWMwIG9yIGJtYWMwIHRoYXQKKyAgIGJldHdlZW4gMTAyNCBhbmQgMTUyMiBieXRlcyBmb3IgcG9ydDAgKi8KKyNkZWZpbmUgTklHX1JFR19TVEFUMF9FR1JFU1NfTUFDX1BLVDAJCQkJIDB4MTA3NTAKKy8qIFtXQl9SIDM2XSBUeCBzdGF0aXN0aWNzIDogTnVtYmVyIG9mIHBhY2tldHMgZnJvbSBlbWFjMCBvciBibWFjMCB0aGF0CisgICBiZXR3ZWVuIDE1MjMgYnl0ZXMgYW5kIGFib3ZlIGZvciBwb3J0MCAqLworI2RlZmluZSBOSUdfUkVHX1NUQVQwX0VHUkVTU19NQUNfUEtUMQkJCQkgMHgxMDc2MAogLyogW1IgMzJdIFJ4IHN0YXRpc3RpY3MgOiBJbiB1c2VyIHBhY2tldHMgZGlzY2FyZGVkIGR1ZSB0byBCUkIgYmFja3ByZXNzdXJlCiAgICBmb3IgcG9ydDEgKi8KICNkZWZpbmUgTklHX1JFR19TVEFUMV9CUkJfRElTQ0FSRAkJCQkgMHgxMDYyOAorLyogW1dCX1IgMzZdIFR4IHN0YXRpc3RpY3MgOiBOdW1iZXIgb2YgcGFja2V0cyBmcm9tIGVtYWMxIG9yIGJtYWMxIHRoYXQKKyAgIGJldHdlZW4gMTAyNCBhbmQgMTUyMiBieXRlcyBmb3IgcG9ydDEgKi8KKyNkZWZpbmUgTklHX1JFR19TVEFUMV9FR1JFU1NfTUFDX1BLVDAJCQkJIDB4MTA3YTAKKy8qIFtXQl9SIDM2XSBUeCBzdGF0aXN0aWNzIDogTnVtYmVyIG9mIHBhY2tldHMgZnJvbSBlbWFjMSBvciBibWFjMSB0aGF0CisgICBiZXR3ZWVuIDE1MjMgYnl0ZXMgYW5kIGFib3ZlIGZvciBwb3J0MSAqLworI2RlZmluZSBOSUdfUkVHX1NUQVQxX0VHUkVTU19NQUNfUEtUMQkJCQkgMHgxMDdiMAogLyogW1dCX1IgNjRdIFJ4IHN0YXRpc3RpY3MgOiBVc2VyIG9jdGV0cyByZWNlaXZlZCBmb3IgTFAgKi8KICNkZWZpbmUgTklHX1JFR19TVEFUMl9CUkJfT0NURVQgCQkJCSAweDEwN2UwCiAjZGVmaW5lIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMAkJCQkgMHgxMDMyOApAQCAtMTUyOSw4ICsxNzU0LDEyIEBACiAjZGVmaW5lIE5JR19SRUdfWENNMF9PVVRfRU4JCQkJCSAweDEwMGYwCiAvKiBbUlcgMV0gb3V0cHV0IGVuYWJsZSBmb3IgUlhfWENNMSBJRiAqLwogI2RlZmluZSBOSUdfUkVHX1hDTTFfT1VUX0VOCQkJCQkgMHgxMDBmNAorLyogW1JXIDFdIGNvbnRyb2wgdG8geGd4cyAtIHJlbW90ZSBQSFkgaW4tYmFuZCBNRElPICovCisjZGVmaW5lIE5JR19SRUdfWEdYUzBfQ1RSTF9FWFRSRU1PVEVNRElPU1QJCQkgMHgxMDM0OAogLyogW1JXIDVdIGNvbnRyb2wgdG8geGd4cyAtIENMNDUgREVWQUQgKi8KICNkZWZpbmUgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFECQkJCSAweDEwMzNjCisvKiBbUlcgMV0gY29udHJvbCB0byB4Z3hzOyAwIC0gY2xhdXNlIDQ1OyAxIC0gY2xhdXNlIDIyICovCisjZGVmaW5lIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9TVAkJCQkgMHgxMDMzOAogLyogW1JXIDVdIGNvbnRyb2wgdG8geGd4cyAtIENMMjIgUEhZX0FERCBhbmQgQ0w0NSBQUlRBRCAqLwogI2RlZmluZSBOSUdfUkVHX1hHWFMwX0NUUkxfUEhZX0FERFIJCQkJIDB4MTAzNDAKIC8qIFtSIDFdIHN0YXR1cyBmcm9tIHhneHMwIHRoYXQgaW5wdXRzIHRvIGludGVycnVwdCBsb2dpYyBvZiBsaW5rMTBnLiAqLwpAQCAtMTYyNiw3ICsxODU1LDYgQEAKICNkZWZpbmUgUFJTX1JFR19DRkNfU0VBUkNIX0lOSVRJQUxfQ1JFRElUCQkJIDB4NDAxMWMKIC8qIFtSVyAyNF0gQ0lEIGZvciBwb3J0IDAgaWYgbm8gbWF0Y2ggKi8KICNkZWZpbmUgUFJTX1JFR19DSURfUE9SVF8wCQkJCQkgMHg0MDBmYwotI2RlZmluZSBQUlNfUkVHX0NJRF9QT1JUXzEJCQkJCSAweDQwMTAwCiAvKiBbUlcgMzJdIFRoZSBDTSBoZWFkZXIgZm9yIGZsdXNoIG1lc3NhZ2Ugd2hlcmUgJ2xvYWQgZXhpc3RlZCcgYml0IGluIENGQwogICAgbG9hZCByZXNwb25zZSBpcyByZXNldCBhbmQgcGFja2V0IHR5cGUgaXMgMC4gVXNlZCBpbiBwYWNrZXQgc3RhcnQgbWVzc2FnZQogICAgdG8gVENNLiAqLwpAQCAtMTY1OCwxMSArMTg4NiwxNSBAQAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9UWVBFXzQJCQkJCSAweDQwMDg4CiAvKiBbUlcgMzJdIFRoZSBDTSBoZWFkZXIgaW4gY2FzZSB0aGVyZSB3YXMgbm90IGEgbWF0Y2ggb24gdGhlIGNvbm5lY3Rpb24gKi8KICNkZWZpbmUgUFJTX1JFR19DTV9OT19NQVRDSF9IRFIgCQkJCSAweDQwMGI4CisvKiBbUlcgMV0gSW5kaWNhdGVzIGlmIGluIGUxaG92IG1vZGUuIDA9bm9uLWUxaG92IG1vZGU7IDE9ZTFob3YgbW9kZS4gKi8KKyNkZWZpbmUgUFJTX1JFR19FMUhPVl9NT0RFCQkJCQkgMHg0MDFjOAogLyogW1JXIDhdIFRoZSA4LWJpdCBldmVudCBJRCBmb3IgYSBtYXRjaCBhbmQgcGFja2V0IHR5cGUgMS4gVXNlZCBpbiBwYWNrZXQKICAgIHN0YXJ0IG1lc3NhZ2UgdG8gVENNLiAqLwogI2RlZmluZSBQUlNfUkVHX0VWRU5UX0lEXzEJCQkJCSAweDQwMDU0CiAjZGVmaW5lIFBSU19SRUdfRVZFTlRfSURfMgkJCQkJIDB4NDAwNTgKICNkZWZpbmUgUFJTX1JFR19FVkVOVF9JRF8zCQkJCQkgMHg0MDA1YworLyogW1JXIDE2XSBUaGUgRXRoZXJuZXQgdHlwZSB2YWx1ZSBmb3IgRkNvRSAqLworI2RlZmluZSBQUlNfUkVHX0ZDT0VfVFlQRQkJCQkJIDB4NDAxZDAKIC8qIFtSVyA4XSBDb250ZXh0IHJlZ2lvbiBmb3IgZmx1c2ggcGFja2V0IHdpdGggcGFja2V0IHR5cGUgMC4gVXNlZCBpbiBDRkMKICAgIGxvYWQgcmVxdWVzdCBtZXNzYWdlLiAqLwogI2RlZmluZSBQUlNfUkVHX0ZMVVNIX1JFR0lPTlNfVFlQRV8wCQkJCSAweDQwMDA0CkBAIC0xNzMwLDggKzE5NjIsMTcgQEAKICNkZWZpbmUgUFhQMl9SRUdfSFNUX0RBVEFfRklGT19TVEFUVVMJCQkJIDB4MTIwNDdjCiAvKiBbUiA3XSBEZWJ1ZyBvbmx5OiBOdW1iZXIgb2YgdXNlZCBlbnRyaWVzIGluIHRoZSBoZWFkZXIgRklGTyAqLwogI2RlZmluZSBQWFAyX1JFR19IU1RfSEVBREVSX0ZJRk9fU1RBVFVTIAkJCSAweDEyMDQ3OAorI2RlZmluZSBQWFAyX1JFR19QR0xfQUREUl84OF9GMCAJCQkJIDB4MTIwNTM0CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9BRERSXzhDX0YwIAkJCQkgMHgxMjA1MzgKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX0FERFJfOTBfRjAgCQkJCSAweDEyMDUzYworI2RlZmluZSBQWFAyX1JFR19QR0xfQUREUl85NF9GMCAJCQkJIDB4MTIwNTQwCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9DT05UUk9MMAkJCQkJIDB4MTIwNDkwCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9DT05UUk9MMQkJCQkJIDB4MTIwNTE0CisvKiBbUlcgMzJdIHRoaXJkIGR3b3JkIGRhdGEgb2YgZXhwYW5zaW9uIHJvbSByZXF1ZXN0LiB0aGlzIHJlZ2lzdGVyIGlzCisgICBzcGVjaWFsLiByZWFkaW5nIGZyb20gaXQgcHJvdmlkZXMgYSB2ZWN0b3Igb3V0c3RhbmRpbmcgcmVhZCByZXF1ZXN0cy4gaWYKKyAgIGEgYml0IGlzIHplcm8gaXQgbWVhbnMgdGhhdCBhIHJlYWQgcmVxdWVzdCBvbiB0aGUgY29ycmVzcG9uZGluZyB0YWcgZGlkCisgICBub3QgZmluaXNoIHlldCAobm90IGFsbCBjb21wbGV0aW9ucyBoYXZlIGFycml2ZWQgZm9yIGl0KSAqLworI2RlZmluZSBQWFAyX1JFR19QR0xfRVhQX1JPTTIJCQkJCSAweDEyMDgwOAogLyogW1JXIDMyXSBJbmJvdW5kIGludGVycnVwdCB0YWJsZSBmb3IgQ1NETTogYml0c1szMToxNl0tbWFzazsKICAgIGl0c1sxNTowXS1hZGRyZXNzICovCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9JTlRfQ1NETV8wIAkJCQkgMHgxMjA0ZjQKQEAgLTE3NzUsOCArMjAxNiw3IEBACiAvKiBbUiAxXSB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHJlYWQgcmVxdWVzdCB3YXMgYmxvY2tlZCBiZWNhdXNlIG9mCiAgICBidXNfbWFzdGVyX2VuIHdhcyBkZWFzc2VydGVkICovCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9SRUFEX0JMT0NLRUQJCQkJIDB4MTIwNTY4Ci0vKiBbUiA2XSBkZWJ1ZyBvbmx5ICovCi0jZGVmaW5lIFBYUDJfUkVHX1BHTF9UWFJfQ0RUUwkJCQkJIDB4MTIwNTI4CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9UQUdTX0xJTUlUIAkJCQkgMHgxMjA1YTgKIC8qIFtSIDE4XSBkZWJ1ZyBvbmx5ICovCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9UWFdfQ0RUUwkJCQkJIDB4MTIwNTJjCiAvKiBbUiAxXSB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHdyaXRlIHJlcXVlc3Qgd2FzIGJsb2NrZWQgYmVjYXVzZSBvZgpAQCAtMTgyOCwxMiArMjA2OCwxNCBAQAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9RTTBfTDJQCQkJCQkgMHgxMjAwMzgKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfU1JDMF9MMlAgCQkJCSAweDEyMDA1NAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9UTTBfTDJQCQkJCQkgMHgxMjAwMWMKLS8qIFtSVyAyNV0gSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwotI2RlZmluZSBQWFAyX1JFR19QWFAyX0lOVF9NQVNLCQkJCQkgMHgxMjA1NzgKLS8qIFtSIDI1XSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCAqLwotI2RlZmluZSBQWFAyX1JFR19QWFAyX0lOVF9TVFMJCQkJCSAweDEyMDU2YwotLyogW1JDIDI1XSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLwotI2RlZmluZSBQWFAyX1JFR19QWFAyX0lOVF9TVFNfQ0xSCQkJCSAweDEyMDU3MAorI2RlZmluZSBQWFAyX1JFR19QU1dSUV9UU0RNMF9MMlAJCQkJIDB4MTIwMGUwCisvKiBbUlcgMzJdIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KKyNkZWZpbmUgUFhQMl9SRUdfUFhQMl9JTlRfTUFTS18wCQkJCSAweDEyMDU3OAorLyogW1IgMzJdIEludGVycnVwdCByZWdpc3RlciAjMCByZWFkICovCisjZGVmaW5lIFBYUDJfUkVHX1BYUDJfSU5UX1NUU18wIAkJCQkgMHgxMjA1NmMKKyNkZWZpbmUgUFhQMl9SRUdfUFhQMl9JTlRfU1RTXzEgCQkJCSAweDEyMDYwOAorLyogW1JDIDMyXSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBQWFAyX1JFR19QWFAyX0lOVF9TVFNfQ0xSXzAJCQkJIDB4MTIwNTcwCiAvKiBbUlcgMzJdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgUFhQMl9SRUdfUFhQMl9QUlRZX01BU0tfMAkJCQkgMHgxMjA1ODgKICNkZWZpbmUgUFhQMl9SRUdfUFhQMl9QUlRZX01BU0tfMQkJCQkgMHgxMjA1OTgKQEAgLTIwMTYsOCArMjI1OCwxMiBAQAogI2RlZmluZSBQWFAyX1JFR19SUV9CV19XUl9VQk9VTkQyOQkJCQkgMHgxMjAyYTQKIC8qIFtSVyA3XSBCYW5kd2lkdGggdXBwZXIgYm91bmQgZm9yIFZRMzAgKi8KICNkZWZpbmUgUFhQMl9SRUdfUlFfQldfV1JfVUJPVU5EMzAJCQkJIDB4MTIwMmE4CisvKiBbUlcgMThdIGV4dGVybmFsIGZpcnN0X21lbV9hZGRyIGZpZWxkIGluIEwyUCB0YWJsZSBmb3IgQ0RVIG1vZHVsZSBwb3J0IDAgKi8KKyNkZWZpbmUgUFhQMl9SRUdfUlFfQ0RVMF9FRklSU1RfTUVNX0FERFIJCQkgMHgxMjAwMDgKIC8qIFtSVyAyXSBFbmRpYW4gbW9kZSBmb3IgY2R1ICovCiAjZGVmaW5lIFBYUDJfUkVHX1JRX0NEVV9FTkRJQU5fTQkJCQkgMHgxMjAxYTAKKyNkZWZpbmUgUFhQMl9SRUdfUlFfQ0RVX0ZJUlNUX0lMVAkJCQkgMHgxMjA2MWMKKyNkZWZpbmUgUFhQMl9SRUdfUlFfQ0RVX0xBU1RfSUxUCQkJCSAweDEyMDYyMAogLyogW1JXIDNdIHBhZ2Ugc2l6ZSBpbiBMMlAgdGFibGUgZm9yIENEVSBtb2R1bGU7IC00azsgLThrOyAtMTZrOyAtMzJrOyAtNjRrOwogICAgLTEyOGsgKi8KICNkZWZpbmUgUFhQMl9SRUdfUlFfQ0RVX1BfU0laRQkJCQkJIDB4MTIwMDE4CkBAIC0yMDI5LDE0ICsyMjc1LDI2IEBACiAvKiBbUlcgMV0gV2hlbiAnMSc7IHJlcXVlc3RzIHdpbGwgZW50ZXIgaW5wdXQgYnVmZmVycyBidXQgd29udCBnZXQgb3V0CiAgICB0b3dhcmRzIHRoZSBnbHVlICovCiAjZGVmaW5lIFBYUDJfUkVHX1JRX0RJU0FCTEVfSU5QVVRTCQkJCSAweDEyMDMzMAorLyogW1JXIDFdIDEgLSBTUiB3aWxsIGJlIGFsaWduZWQgYnkgNjRCOyAwIC0gU1Igd2lsbCBiZSBhbGlnbmVkIGJ5IDhCICovCisjZGVmaW5lIFBYUDJfUkVHX1JRX0RSQU1fQUxJR04JCQkJCSAweDEyMDViMAorLyogW1JXIDFdIElmIDEgSUxUIGZhaWxpdWUgd2lsbCBub3QgcmVzdWx0IGluIEVMVCBhY2Nlc3M7IEFuIGludGVycnVwdCB3aWxsCisgICBiZSBhc3NlcnRlZCAqLworI2RlZmluZSBQWFAyX1JFR19SUV9FTFRfRElTQUJMRSAJCQkJIDB4MTIwNjZjCiAvKiBbUlcgMl0gRW5kaWFuIG1vZGUgZm9yIGhjICovCiAjZGVmaW5lIFBYUDJfUkVHX1JRX0hDX0VORElBTl9NIAkJCQkgMHgxMjAxYTgKKy8qIFtSVyAxXSB3aGVuICcwJyBJTFQgbG9naWMgd2lsbCB3b3JrIGFzIGluIEEwOyBvdGhlcndpc2UgQjA7IGZvciBiYWNrCisgICBjb21wYXRpYmlsaXR5IG5lZWRzOyBOb3RlIHRoYXQgZGlmZmVyZW50IHJlZ2lzdGVycyBhcmUgdXNlZCBwZXIgbW9kZSAqLworI2RlZmluZSBQWFAyX1JFR19SUV9JTFRfTU9ERQkJCQkJIDB4MTIwNWI0CiAvKiBbV0IgNTNdIE9uY2hpcCBhZGRyZXNzIHRhYmxlICovCiAjZGVmaW5lIFBYUDJfUkVHX1JRX09OQ0hJUF9BVAkJCQkJIDB4MTIyMDAwCisvKiBbV0IgNTNdIE9uY2hpcCBhZGRyZXNzIHRhYmxlIC0gQjAgKi8KKyNkZWZpbmUgUFhQMl9SRUdfUlFfT05DSElQX0FUX0IwCQkJCSAweDEyODAwMAogLyogW1JXIDEzXSBQZW5kaW5nIHJlYWQgbGltaXRlciB0aHJlc2hvbGQ7IGluIER3b3JkcyAqLwogI2RlZmluZSBQWFAyX1JFR19SUV9QRFJfTElNSVQJCQkJCSAweDEyMDMzYwogLyogW1JXIDJdIEVuZGlhbiBtb2RlIGZvciBxbSAqLwogI2RlZmluZSBQWFAyX1JFR19SUV9RTV9FTkRJQU5fTSAJCQkJIDB4MTIwMTk0CisjZGVmaW5lIFBYUDJfUkVHX1JRX1FNX0ZJUlNUX0lMVAkJCQkgMHgxMjA2MzQKKyNkZWZpbmUgUFhQMl9SRUdfUlFfUU1fTEFTVF9JTFQgCQkJCSAweDEyMDYzOAogLyogW1JXIDNdIHBhZ2Ugc2l6ZSBpbiBMMlAgdGFibGUgZm9yIFFNIG1vZHVsZTsgLTRrOyAtOGs7IC0xNms7IC0zMms7IC02NGs7CiAgICAtMTI4ayAqLwogI2RlZmluZSBQWFAyX1JFR19SUV9RTV9QX1NJWkUJCQkJCSAweDEyMDA1MApAQCAtMjA1MCwxNiArMjMwOCwyMiBAQAogI2RlZmluZSBQWFAyX1JFR19SUV9SRF9NQlMxCQkJCQkgMHgxMjAxNjgKIC8qIFtSVyAyXSBFbmRpYW4gbW9kZSBmb3Igc3JjICovCiAjZGVmaW5lIFBYUDJfUkVHX1JRX1NSQ19FTkRJQU5fTQkJCQkgMHgxMjAxOWMKKyNkZWZpbmUgUFhQMl9SRUdfUlFfU1JDX0ZJUlNUX0lMVAkJCQkgMHgxMjA2M2MKKyNkZWZpbmUgUFhQMl9SRUdfUlFfU1JDX0xBU1RfSUxUCQkJCSAweDEyMDY0MAogLyogW1JXIDNdIHBhZ2Ugc2l6ZSBpbiBMMlAgdGFibGUgZm9yIFNSQyBtb2R1bGU7IC00azsgLThrOyAtMTZrOyAtMzJrOyAtNjRrOwogICAgLTEyOGsgKi8KICNkZWZpbmUgUFhQMl9SRUdfUlFfU1JDX1BfU0laRQkJCQkJIDB4MTIwMDZjCiAvKiBbUlcgMl0gRW5kaWFuIG1vZGUgZm9yIHRtICovCiAjZGVmaW5lIFBYUDJfUkVHX1JRX1RNX0VORElBTl9NIAkJCQkgMHgxMjAxOTgKKyNkZWZpbmUgUFhQMl9SRUdfUlFfVE1fRklSU1RfSUxUCQkJCSAweDEyMDY0NAorI2RlZmluZSBQWFAyX1JFR19SUV9UTV9MQVNUX0lMVCAJCQkJIDB4MTIwNjQ4CiAvKiBbUlcgM10gcGFnZSBzaXplIGluIEwyUCB0YWJsZSBmb3IgVE0gbW9kdWxlOyAtNGs7IC04azsgLTE2azsgLTMyazsgLTY0azsKICAgIC0xMjhrICovCiAjZGVmaW5lIFBYUDJfUkVHX1JRX1RNX1BfU0laRQkJCQkJIDB4MTIwMDM0CiAvKiBbUiA1XSBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdWZpZm87IGhpcyBmaWZvIGhhcyBsMnAgY29tcGxldGlvbnMgKi8KICNkZWZpbmUgUFhQMl9SRUdfUlFfVUZJRk9fTlVNX09GX0VOVFJZCQkJCSAweDEyMDgwYworLyogW1JXIDE4XSBleHRlcm5hbCBmaXJzdF9tZW1fYWRkciBmaWVsZCBpbiBMMlAgdGFibGUgZm9yIFVTRE0gbW9kdWxlIHBvcnQgMCAqLworI2RlZmluZSBQWFAyX1JFR19SUV9VU0RNMF9FRklSU1RfTUVNX0FERFIJCQkgMHgxMjAwOTQKIC8qIFtSIDhdIE51bWJlciBvZiBlbnRyaWVzIG9jY3VwaWVkIGJ5IHZxIDAgaW4gcHN3cnEgbWVtb3J5ICovCiAjZGVmaW5lIFBYUDJfUkVHX1JRX1ZRMF9FTlRSWV9DTlQJCQkJIDB4MTIwODEwCiAvKiBbUiA4XSBOdW1iZXIgb2YgZW50cmllcyBvY2N1cGllZCBieSB2cSAxMCBpbiBwc3dycSBtZW1vcnkgKi8KQEAgLTIxMzAsMTkgKzIzOTQsNjMgQEAKIC8qIFtSVyAzXSBNYXggYnVyc3Qgc2l6ZSBmaWxlZCBmb3Igd3JpdGUgcmVxdWVzdHMgcG9ydCAxOyAwMDAgLSAxMjhCOwogICAgMDAxOjI1NkI7IDAxMDogNTEyQjsgKi8KICNkZWZpbmUgUFhQMl9SRUdfUlFfV1JfTUJTMQkJCQkJIDB4MTIwMTY0CisvKiBbUlcgMl0gMCAtIDEyOEI7ICAtIDI1NkI7ICAtIDUxMkI7ICAtIDEwMjRCOyB3aGVuIHRoZSBwYXlsb2FkIGluIHRoZQorICAgYnVmZmVyIHJlYWNoZXMgdGhpcyBudW1iZXIgaGFzX3BheWxvYWQgd2lsbCBiZSBhc3NlcnRlZCAqLworI2RlZmluZSBQWFAyX1JFR19XUl9DRFVfTVBTCQkJCQkgMHgxMjA1ZjAKKy8qIFtSVyAyXSAwIC0gMTI4QjsgIC0gMjU2QjsgIC0gNTEyQjsgIC0gMTAyNEI7IHdoZW4gdGhlIHBheWxvYWQgaW4gdGhlCisgICBidWZmZXIgcmVhY2hlcyB0aGlzIG51bWJlciBoYXNfcGF5bG9hZCB3aWxsIGJlIGFzc2VydGVkICovCisjZGVmaW5lIFBYUDJfUkVHX1dSX0NTRE1fTVBTCQkJCQkgMHgxMjA1ZDAKKy8qIFtSVyAyXSAwIC0gMTI4QjsgIC0gMjU2QjsgIC0gNTEyQjsgIC0gMTAyNEI7IHdoZW4gdGhlIHBheWxvYWQgaW4gdGhlCisgICBidWZmZXIgcmVhY2hlcyB0aGlzIG51bWJlciBoYXNfcGF5bG9hZCB3aWxsIGJlIGFzc2VydGVkICovCisjZGVmaW5lIFBYUDJfUkVHX1dSX0RCR19NUFMJCQkJCSAweDEyMDVlOAorLyogW1JXIDJdIDAgLSAxMjhCOyAgLSAyNTZCOyAgLSA1MTJCOyAgLSAxMDI0Qjsgd2hlbiB0aGUgcGF5bG9hZCBpbiB0aGUKKyAgIGJ1ZmZlciByZWFjaGVzIHRoaXMgbnVtYmVyIGhhc19wYXlsb2FkIHdpbGwgYmUgYXNzZXJ0ZWQgKi8KKyNkZWZpbmUgUFhQMl9SRUdfV1JfRE1BRV9NUFMJCQkJCSAweDEyMDVlYwogLyogW1JXIDEwXSBpZiBOdW1iZXIgb2YgZW50cmllcyBpbiBkbWFlIGZpZm8gd2lsbCBiZSBoaWdlciB0aGFuIHRoaXMKICAgIHRocmVzaG9sZCB0aGVuIGhhc19wYXlsb2FkIGluZGljYXRpb24gd2lsbCBiZSBhc3NlcnRlZDsgdGhlIGRlZmF1bHQgdmFsdWUKICAgIHNob3VsZCBiZSBlcXVhbCB0byAmZ3Q7ICB3cml0ZSBNQlMgc2l6ZSEgKi8KICNkZWZpbmUgUFhQMl9SRUdfV1JfRE1BRV9USAkJCQkJIDB4MTIwMzY4CisvKiBbUlcgMl0gMCAtIDEyOEI7ICAtIDI1NkI7ICAtIDUxMkI7ICAtIDEwMjRCOyB3aGVuIHRoZSBwYXlsb2FkIGluIHRoZQorICAgYnVmZmVyIHJlYWNoZXMgdGhpcyBudW1iZXIgaGFzX3BheWxvYWQgd2lsbCBiZSBhc3NlcnRlZCAqLworI2RlZmluZSBQWFAyX1JFR19XUl9IQ19NUFMJCQkJCSAweDEyMDVjOAorLyogW1JXIDJdIDAgLSAxMjhCOyAgLSAyNTZCOyAgLSA1MTJCOyAgLSAxMDI0Qjsgd2hlbiB0aGUgcGF5bG9hZCBpbiB0aGUKKyAgIGJ1ZmZlciByZWFjaGVzIHRoaXMgbnVtYmVyIGhhc19wYXlsb2FkIHdpbGwgYmUgYXNzZXJ0ZWQgKi8KKyNkZWZpbmUgUFhQMl9SRUdfV1JfUU1fTVBTCQkJCQkgMHgxMjA1ZGMKKy8qIFtSVyAxXSAwIC0gd29ya2luZyBpbiBBMCBtb2RlOyAgLSB3b3JraW5nIGluIEIwIG1vZGUgKi8KKyNkZWZpbmUgUFhQMl9SRUdfV1JfUkVWX01PREUJCQkJCSAweDEyMDY3MAorLyogW1JXIDJdIDAgLSAxMjhCOyAgLSAyNTZCOyAgLSA1MTJCOyAgLSAxMDI0Qjsgd2hlbiB0aGUgcGF5bG9hZCBpbiB0aGUKKyAgIGJ1ZmZlciByZWFjaGVzIHRoaXMgbnVtYmVyIGhhc19wYXlsb2FkIHdpbGwgYmUgYXNzZXJ0ZWQgKi8KKyNkZWZpbmUgUFhQMl9SRUdfV1JfU1JDX01QUwkJCQkJIDB4MTIwNWU0CisvKiBbUlcgMl0gMCAtIDEyOEI7ICAtIDI1NkI7ICAtIDUxMkI7ICAtIDEwMjRCOyB3aGVuIHRoZSBwYXlsb2FkIGluIHRoZQorICAgYnVmZmVyIHJlYWNoZXMgdGhpcyBudW1iZXIgaGFzX3BheWxvYWQgd2lsbCBiZSBhc3NlcnRlZCAqLworI2RlZmluZSBQWFAyX1JFR19XUl9UTV9NUFMJCQkJCSAweDEyMDVlMAorLyogW1JXIDJdIDAgLSAxMjhCOyAgLSAyNTZCOyAgLSA1MTJCOyAgLSAxMDI0Qjsgd2hlbiB0aGUgcGF5bG9hZCBpbiB0aGUKKyAgIGJ1ZmZlciByZWFjaGVzIHRoaXMgbnVtYmVyIGhhc19wYXlsb2FkIHdpbGwgYmUgYXNzZXJ0ZWQgKi8KKyNkZWZpbmUgUFhQMl9SRUdfV1JfVFNETV9NUFMJCQkJCSAweDEyMDVkNAogLyogW1JXIDEwXSBpZiBOdW1iZXIgb2YgZW50cmllcyBpbiB1c2RtZHAgZmlmbyB3aWxsIGJlIGhpZ2VyIHRoYW4gdGhpcwogICAgdGhyZXNob2xkIHRoZW4gaGFzX3BheWxvYWQgaW5kaWNhdGlvbiB3aWxsIGJlIGFzc2VydGVkOyB0aGUgZGVmYXVsdCB2YWx1ZQogICAgc2hvdWxkIGJlIGVxdWFsIHRvICZndDsgIHdyaXRlIE1CUyBzaXplISAqLwogI2RlZmluZSBQWFAyX1JFR19XUl9VU0RNRFBfVEgJCQkJCSAweDEyMDM0OAorLyogW1JXIDJdIDAgLSAxMjhCOyAgLSAyNTZCOyAgLSA1MTJCOyAgLSAxMDI0Qjsgd2hlbiB0aGUgcGF5bG9hZCBpbiB0aGUKKyAgIGJ1ZmZlciByZWFjaGVzIHRoaXMgbnVtYmVyIGhhc19wYXlsb2FkIHdpbGwgYmUgYXNzZXJ0ZWQgKi8KKyNkZWZpbmUgUFhQMl9SRUdfV1JfVVNETV9NUFMJCQkJCSAweDEyMDVjYworLyogW1JXIDJdIDAgLSAxMjhCOyAgLSAyNTZCOyAgLSA1MTJCOyAgLSAxMDI0Qjsgd2hlbiB0aGUgcGF5bG9hZCBpbiB0aGUKKyAgIGJ1ZmZlciByZWFjaGVzIHRoaXMgbnVtYmVyIGhhc19wYXlsb2FkIHdpbGwgYmUgYXNzZXJ0ZWQgKi8KKyNkZWZpbmUgUFhQMl9SRUdfV1JfWFNETV9NUFMJCQkJCSAweDEyMDVkOAogLyogW1IgMV0gZGVidWcgb25seTogSW5kaWNhdGlvbiBpZiBQU1dIU1QgYXJiaXRlciBpcyBpZGxlICovCiAjZGVmaW5lIFBYUF9SRUdfSFNUX0FSQl9JU19JRExFIAkJCQkgMHgxMDMwMDQKIC8qIFtSIDhdIGRlYnVnIG9ubHk6IEEgYml0IG1hc2sgZm9yIGFsbCBQU1dIU1QgYXJiaXRlciBjbGllbnRzLiAnMScgbWVhbnMKICAgIHRoaXMgY2xpZW50IGlzIHdhaXRpbmcgZm9yIHRoZSBhcmJpdGVyLiAqLwogI2RlZmluZSBQWFBfUkVHX0hTVF9DTElFTlRTX1dBSVRJTkdfVE9fQVJCCQkJIDB4MTAzMDA4CisvKiBbUiAxXSBkZWJ1ZyBvbmx5OiAnMScgbWVhbnMgdGhpcyBQU1dIU1QgaXMgZGlzY2FyZGluZyBkb29yYmVsbHMuIFRoaXMgYml0CisgICBzaG91bGQgdXBkYXRlIGFjY29yaW5nIHRvICdoc3RfZGlzY2FyZF9kb29yYmVsbHMnIHJlZ2lzdGVyIHdoZW4gdGhlIHN0YXRlCisgICBtYWNoaW5lIGlzIGlkbGUgKi8KKyNkZWZpbmUgUFhQX1JFR19IU1RfRElTQ0FSRF9ET09SQkVMTFNfU1RBVFVTCQkJIDB4MTAzMGEwCisvKiBbUiA2XSBkZWJ1ZyBvbmx5OiBBIGJpdCBtYXNrIGZvciBhbGwgUFNXSFNUIGludGVybmFsIHdyaXRlIGNsaWVudHMuICcxJworICAgbWVhbnMgdGhpcyBQU1dIU1QgaXMgZGlzY2FyZGluZyBpbnB1dHMgZnJvbSB0aGlzIGNsaWVudC4gRWFjaCBiaXQgc2hvdWxkCisgICB1cGRhdGUgYWNjb3JpbmcgdG8gJ2hzdF9kaXNjYXJkX2ludGVybmFsX3dyaXRlcycgcmVnaXN0ZXIgd2hlbiB0aGUgc3RhdGUKKyAgIG1hY2hpbmUgaXMgaWRsZS4gKi8KKyNkZWZpbmUgUFhQX1JFR19IU1RfRElTQ0FSRF9JTlRFUk5BTF9XUklURVNfU1RBVFVTCQkgMHgxMDMwOWMKIC8qIFtXQiAxNjBdIFVzZWQgZm9yIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmJvdW5kIGludGVycnVwdHMgbWVtb3J5ICovCiAjZGVmaW5lIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UIAkJCQkgMHgxMDM4MDAKIC8qIFtSVyAzMl0gSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwpAQCAtMjE2NSwxOCArMjQ3MywyNSBAQAogI2RlZmluZSBRTV9SRUdfQUNUQ1RSSU5JVFZBTF8zCQkJCQkgMHgxNjgwNGMKIC8qIFtSVyAzMl0gVGhlIGJhc2UgbG9naWNhbCBhZGRyZXNzIChpbiBieXRlcykgb2YgZWFjaCBwaHlzaWNhbCBxdWV1ZS4gVGhlCiAgICBpbmRleCBJIHJlcHJlc2VudHMgdGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlci4gVGhlIDEyIGxzYnMgYXJlIGlnbm9yZSBhbmQKLSAgIGNvbnNpZGVyZWQgemVybyBzbyBwcmFjdGljYWxseSB0aGVyZSBhcmUgb25seSAyMCBiaXRzIGluIHRoaXMgcmVnaXN0ZXIuICovCisgICBjb25zaWRlcmVkIHplcm8gc28gcHJhY3RpY2FsbHkgdGhlcmUgYXJlIG9ubHkgMjAgYml0cyBpbiB0aGlzIHJlZ2lzdGVyOworICAgcXVldWVzIDYzLTAgKi8KICNkZWZpbmUgUU1fUkVHX0JBU0VBRERSIAkJCQkJIDB4MTY4OTAwCiAvKiBbUlcgMTZdIFRoZSBieXRlIGNyZWRpdCBjb3N0IGZvciBlYWNoIHRhc2suIFRoaXMgdmFsdWUgaXMgZm9yIGJvdGggcG9ydHMgKi8KICNkZWZpbmUgUU1fUkVHX0JZVEVDUkRDT1NUCQkJCQkgMHgxNjgyMzQKIC8qIFtSVyAxNl0gVGhlIGluaXRpYWwgYnl0ZSBjcmVkaXQgdmFsdWUgZm9yIGJvdGggcG9ydHMuICovCiAjZGVmaW5lIFFNX1JFR19CWVRFQ1JESU5JVFZBTAkJCQkJIDB4MTY4MjM4CiAvKiBbUlcgMzJdIEEgYml0IHBlciBwaHlzaWNhbCBxdWV1ZS4gSWYgdGhlIGJpdCBpcyBjbGVhcmVkIHRoZW4gdGhlIHBoeXNpY2FsCi0gICBxdWV1ZSB1c2VzIHBvcnQgMCBlbHNlIGl0IHVzZXMgcG9ydCAxLiAqLworICAgcXVldWUgdXNlcyBwb3J0IDAgZWxzZSBpdCB1c2VzIHBvcnQgMTsgcXVldWVzIDMxLTAgKi8KICNkZWZpbmUgUU1fUkVHX0JZVEVDUkRQT1JUX0xTQgkJCQkJIDB4MTY4MjI4CiAvKiBbUlcgMzJdIEEgYml0IHBlciBwaHlzaWNhbCBxdWV1ZS4gSWYgdGhlIGJpdCBpcyBjbGVhcmVkIHRoZW4gdGhlIHBoeXNpY2FsCi0gICBxdWV1ZSB1c2VzIHBvcnQgMCBlbHNlIGl0IHVzZXMgcG9ydCAxLiAqLworICAgcXVldWUgdXNlcyBwb3J0IDAgZWxzZSBpdCB1c2VzIHBvcnQgMTsgcXVldWVzIDk1LTY0ICovCisjZGVmaW5lIFFNX1JFR19CWVRFQ1JEUE9SVF9MU0JfRVhUX0EJCQkJIDB4MTZlNTIwCisvKiBbUlcgMzJdIEEgYml0IHBlciBwaHlzaWNhbCBxdWV1ZS4gSWYgdGhlIGJpdCBpcyBjbGVhcmVkIHRoZW4gdGhlIHBoeXNpY2FsCisgICBxdWV1ZSB1c2VzIHBvcnQgMCBlbHNlIGl0IHVzZXMgcG9ydCAxOyBxdWV1ZXMgNjMtMzIgKi8KICNkZWZpbmUgUU1fUkVHX0JZVEVDUkRQT1JUX01TQgkJCQkJIDB4MTY4MjI0CisvKiBbUlcgMzJdIEEgYml0IHBlciBwaHlzaWNhbCBxdWV1ZS4gSWYgdGhlIGJpdCBpcyBjbGVhcmVkIHRoZW4gdGhlIHBoeXNpY2FsCisgICBxdWV1ZSB1c2VzIHBvcnQgMCBlbHNlIGl0IHVzZXMgcG9ydCAxOyBxdWV1ZXMgMTI3LTk2ICovCisjZGVmaW5lIFFNX1JFR19CWVRFQ1JEUE9SVF9NU0JfRVhUX0EJCQkJIDB4MTZlNTFjCiAvKiBbUlcgMTZdIFRoZSBieXRlIGNyZWRpdCB2YWx1ZSB0aGF0IGlmIGFib3ZlIHRoZSBRTSBpcyBjb25zaWRlcmVkIGFsbW9zdAogICAgZnVsbCAqLwogI2RlZmluZSBRTV9SRUdfQllURUNSRURJVEFGVUxMVEhSCQkJCSAweDE2ODA5NApAQCAtMjIwMyw3ICsyNTE4LDcgQEAKICNkZWZpbmUgUU1fUkVHX0NNSU5UVk9RTUFTS182CQkJCQkgMHgxNjgyMGMKICNkZWZpbmUgUU1fUkVHX0NNSU5UVk9RTUFTS183CQkJCQkgMHgxNjgyMTAKIC8qIFtSVyAyMF0gVGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBkaXZpZGVkIGJ5IDE2IHdoaWNoIGRpY3RhdGVzIHRoZSBzaXplCi0gICBvZiBlYWNoIHF1ZXVlIHBlciBwb3J0IDAgKi8KKyAgIG9mIGVhY2ggcXVldWUgd2hpY2ggYmVsb25ncyB0byBldmVuIGZ1bmN0aW9uIG51bWJlci4gKi8KICNkZWZpbmUgUU1fUkVHX0NPTk5OVU1fMAkJCQkJIDB4MTY4MDIwCiAvKiBbUiA2XSBLZWVwIHRoZSBmaWxsIGxldmVsIG9mIHRoZSBmaWZvIGZyb20gd3JpdGUgY2xpZW50IDQgKi8KICNkZWZpbmUgUU1fUkVHX0NRTV9XUkNfRklGT0xWTAkJCQkJIDB4MTY4MDE4CkBAIC0yMjE2LDc0ICsyNTMxLDE3OSBAQAogICAgYnlwYXNzIGVuYWJsZSAqLwogI2RlZmluZSBRTV9SRUdfRU5CWVBWT1FNQVNLCQkJCQkgMHgxNjgyM2MKIC8qIFtSVyAzMl0gQSBiaXQgbWFzayBwZXIgZWFjaCBwaHlzaWNhbCBxdWV1ZS4gSWYgYSBiaXQgaXMgc2V0IHRoZW4gdGhlCi0gICBwaHlzaWNhbCBxdWV1ZSB1c2VzIHRoZSBieXRlIGNyZWRpdCAqLworICAgcGh5c2ljYWwgcXVldWUgdXNlcyB0aGUgYnl0ZSBjcmVkaXQ7IHF1ZXVlcyAzMS0wICovCiAjZGVmaW5lIFFNX1JFR19FTkJZVEVDUkRfTFNCCQkJCQkgMHgxNjgyMjAKIC8qIFtSVyAzMl0gQSBiaXQgbWFzayBwZXIgZWFjaCBwaHlzaWNhbCBxdWV1ZS4gSWYgYSBiaXQgaXMgc2V0IHRoZW4gdGhlCi0gICBwaHlzaWNhbCBxdWV1ZSB1c2VzIHRoZSBieXRlIGNyZWRpdCAqLworICAgcGh5c2ljYWwgcXVldWUgdXNlcyB0aGUgYnl0ZSBjcmVkaXQ7IHF1ZXVlcyA5NS02NCAqLworI2RlZmluZSBRTV9SRUdfRU5CWVRFQ1JEX0xTQl9FWFRfQQkJCQkgMHgxNmU1MTgKKy8qIFtSVyAzMl0gQSBiaXQgbWFzayBwZXIgZWFjaCBwaHlzaWNhbCBxdWV1ZS4gSWYgYSBiaXQgaXMgc2V0IHRoZW4gdGhlCisgICBwaHlzaWNhbCBxdWV1ZSB1c2VzIHRoZSBieXRlIGNyZWRpdDsgcXVldWVzIDYzLTMyICovCiAjZGVmaW5lIFFNX1JFR19FTkJZVEVDUkRfTVNCCQkJCQkgMHgxNjgyMWMKKy8qIFtSVyAzMl0gQSBiaXQgbWFzayBwZXIgZWFjaCBwaHlzaWNhbCBxdWV1ZS4gSWYgYSBiaXQgaXMgc2V0IHRoZW4gdGhlCisgICBwaHlzaWNhbCBxdWV1ZSB1c2VzIHRoZSBieXRlIGNyZWRpdDsgcXVldWVzIDEyNy05NiAqLworI2RlZmluZSBRTV9SRUdfRU5CWVRFQ1JEX01TQl9FWFRfQQkJCQkgMHgxNmU1MTQKIC8qIFtSVyA0XSBJZiBjbGVhcmVkIHRoZW4gdGhlIHNlY29uZGFyeSBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgc2VydmVkIGJ5IHRoZQogICAgUlIgYXJiaXRlciAqLwogI2RlZmluZSBRTV9SRUdfRU5TRUMJCQkJCQkgMHgxNjgwZjAKLS8qIFtSVyAzMl0gQSBiaXQgdmVjdG9yIHBlciBlYWNoIHBoeXNpY2FsIHF1ZXVlIHdoaWNoIHNlbGVjdHMgd2hpY2ggZnVuY3Rpb24KLSAgIG51bWJlciB0byB1c2Ugb24gUENJIGFjY2VzcyBmb3IgdGhhdCBxdWV1ZS4gKi8KKy8qIFtSVyAzMl0gTkEgKi8KICNkZWZpbmUgUU1fUkVHX0ZVTkNOVU1TRUxfTFNCCQkJCQkgMHgxNjgyMzAKLS8qIFtSVyAzMl0gQSBiaXQgdmVjdG9yIHBlciBlYWNoIHBoeXNpY2FsIHF1ZXVlIHdoaWNoIHNlbGVjdHMgd2hpY2ggZnVuY3Rpb24KLSAgIG51bWJlciB0byB1c2Ugb24gUENJIGFjY2VzcyBmb3IgdGhhdCBxdWV1ZS4gKi8KKy8qIFtSVyAzMl0gTkEgKi8KICNkZWZpbmUgUU1fUkVHX0ZVTkNOVU1TRUxfTVNCCQkJCQkgMHgxNjgyMmMKIC8qIFtSVyAzMl0gQSBtYXNrIHJlZ2lzdGVyIHRvIG1hc2sgdGhlIEFsbW9zdCBlbXB0eSBzaWduYWxzIHdoaWNoIHdpbGwgbm90Ci0gICBiZSB1c2UgZm9yIHRoZSBhbG1vc3QgZW1wdHkgaW5kaWNhdGlvbiB0byB0aGUgSFcgYmxvY2sgKi8KKyAgIGJlIHVzZSBmb3IgdGhlIGFsbW9zdCBlbXB0eSBpbmRpY2F0aW9uIHRvIHRoZSBIVyBibG9jazsgcXVldWVzIDMxOjAgKi8KICNkZWZpbmUgUU1fUkVHX0hXQUVNUFRZTUFTS19MU0IgCQkJCSAweDE2ODIxOAogLyogW1JXIDMyXSBBIG1hc2sgcmVnaXN0ZXIgdG8gbWFzayB0aGUgQWxtb3N0IGVtcHR5IHNpZ25hbHMgd2hpY2ggd2lsbCBub3QKLSAgIGJlIHVzZSBmb3IgdGhlIGFsbW9zdCBlbXB0eSBpbmRpY2F0aW9uIHRvIHRoZSBIVyBibG9jayAqLworICAgYmUgdXNlIGZvciB0aGUgYWxtb3N0IGVtcHR5IGluZGljYXRpb24gdG8gdGhlIEhXIGJsb2NrOyBxdWV1ZXMgOTUtNjQgKi8KKyNkZWZpbmUgUU1fUkVHX0hXQUVNUFRZTUFTS19MU0JfRVhUX0EJCQkJIDB4MTZlNTEwCisvKiBbUlcgMzJdIEEgbWFzayByZWdpc3RlciB0byBtYXNrIHRoZSBBbG1vc3QgZW1wdHkgc2lnbmFscyB3aGljaCB3aWxsIG5vdAorICAgYmUgdXNlIGZvciB0aGUgYWxtb3N0IGVtcHR5IGluZGljYXRpb24gdG8gdGhlIEhXIGJsb2NrOyBxdWV1ZXMgNjM6MzIgKi8KICNkZWZpbmUgUU1fUkVHX0hXQUVNUFRZTUFTS19NU0IgCQkJCSAweDE2ODIxNAorLyogW1JXIDMyXSBBIG1hc2sgcmVnaXN0ZXIgdG8gbWFzayB0aGUgQWxtb3N0IGVtcHR5IHNpZ25hbHMgd2hpY2ggd2lsbCBub3QKKyAgIGJlIHVzZSBmb3IgdGhlIGFsbW9zdCBlbXB0eSBpbmRpY2F0aW9uIHRvIHRoZSBIVyBibG9jazsgcXVldWVzIDEyNy05NiAqLworI2RlZmluZSBRTV9SRUdfSFdBRU1QVFlNQVNLX01TQl9FWFRfQQkJCQkgMHgxNmU1MGMKIC8qIFtSVyA0XSBUaGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXVlc3QgdG8gQ0ZDICovCiAjZGVmaW5lIFFNX1JFR19PVVRMRFJFUSAJCQkJCSAweDE2ODgwNAogLyogW1JDIDFdIEEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IG92ZXJmbG93IGVycm9yIG9jY3VycmVkIGluIG9uZSBvZiB0aGUKICAgIHF1ZXVlcy4gKi8KICNkZWZpbmUgUU1fUkVHX09WRkVSUk9SIAkJCQkJIDB4MTY4MDVjCi0vKiBbUkMgNl0gdGhlIFEgd2VyZSB0aGUgcXZlcmZsb3cgb2NjdXJzICovCisvKiBbUkMgN10gdGhlIFEgd2VyZSB0aGUgcXZlcmZsb3cgb2NjdXJzICovCiAjZGVmaW5lIFFNX1JFR19PVkZRTlVNCQkJCQkJIDB4MTY4MDU4Ci0vKiBbUiAzMl0gUGF1c2Ugc3RhdGUgZm9yIHBoeXNpY2FsIHF1ZXVlcyAzMS0wICovCisvKiBbUiAxNl0gUGF1c2Ugc3RhdGUgZm9yIHBoeXNpY2FsIHF1ZXVlcyAxNS0wICovCiAjZGVmaW5lIFFNX1JFR19QQVVTRVNUQVRFMAkJCQkJIDB4MTY4NDEwCi0vKiBbUiAzMl0gUGF1c2Ugc3RhdGUgZm9yIHBoeXNpY2FsIHF1ZXVlcyA2NC0zMiAqLworLyogW1IgMTZdIFBhdXNlIHN0YXRlIGZvciBwaHlzaWNhbCBxdWV1ZXMgMzEtMTYgKi8KICNkZWZpbmUgUU1fUkVHX1BBVVNFU1RBVEUxCQkJCQkgMHgxNjg0MTQKKy8qIFtSIDE2XSBQYXVzZSBzdGF0ZSBmb3IgcGh5c2ljYWwgcXVldWVzIDQ3LTMyICovCisjZGVmaW5lIFFNX1JFR19QQVVTRVNUQVRFMgkJCQkJIDB4MTZlNjg0CisvKiBbUiAxNl0gUGF1c2Ugc3RhdGUgZm9yIHBoeXNpY2FsIHF1ZXVlcyA2My00OCAqLworI2RlZmluZSBRTV9SRUdfUEFVU0VTVEFURTMJCQkJCSAweDE2ZTY4OAorLyogW1IgMTZdIFBhdXNlIHN0YXRlIGZvciBwaHlzaWNhbCBxdWV1ZXMgNzktNjQgKi8KKyNkZWZpbmUgUU1fUkVHX1BBVVNFU1RBVEU0CQkJCQkgMHgxNmU2OGMKKy8qIFtSIDE2XSBQYXVzZSBzdGF0ZSBmb3IgcGh5c2ljYWwgcXVldWVzIDk1LTgwICovCisjZGVmaW5lIFFNX1JFR19QQVVTRVNUQVRFNQkJCQkJIDB4MTZlNjkwCisvKiBbUiAxNl0gUGF1c2Ugc3RhdGUgZm9yIHBoeXNpY2FsIHF1ZXVlcyAxMTEtOTYgKi8KKyNkZWZpbmUgUU1fUkVHX1BBVVNFU1RBVEU2CQkJCQkgMHgxNmU2OTQKKy8qIFtSIDE2XSBQYXVzZSBzdGF0ZSBmb3IgcGh5c2ljYWwgcXVldWVzIDEyNy0xMTIgKi8KKyNkZWZpbmUgUU1fUkVHX1BBVVNFU1RBVEU3CQkJCQkgMHgxNmU2OTgKIC8qIFtSVyAyXSBUaGUgUENJIGF0dHJpYnV0ZXMgZmllbGQgdXNlZCBpbiB0aGUgUENJIHJlcXVlc3QuICovCiAjZGVmaW5lIFFNX1JFR19QQ0lSRVFBVCAJCQkJCSAweDE2ODA1NAogLyogW1IgMTZdIFRoZSBieXRlIGNyZWRpdCBvZiBwb3J0IDAgKi8KICNkZWZpbmUgUU1fUkVHX1BPUlQwQllURUNSRAkJCQkJIDB4MTY4MzAwCiAvKiBbUiAxNl0gVGhlIGJ5dGUgY3JlZGl0IG9mIHBvcnQgMSAqLwogI2RlZmluZSBRTV9SRUdfUE9SVDFCWVRFQ1JECQkJCQkgMHgxNjgzMDQKLS8qIFtXQiA1NF0gUG9pbnRlciBUYWJsZSBNZW1vcnk7IFRoZSBtYXBwaW5nIGlzIGFzIGZvbGxvdzogcHRydGJsWzUzOjMwXQotICAgcmVhZCBwb2ludGVyOyBwdHJ0YmxbMjk6Nl0gd3JpdGUgcG9pbnRlcjsgcHRydGJsWzU6NF0gcmVhZCBiYW5rMDsKLSAgIHB0cnRibFszOjJdIHJlYWQgYmFuayAxOyBwdHJ0YmxbMTowXSB3cml0ZSBiYW5rOyAqLworLyogW1JXIDNdIHBjaSBmdW5jdGlvbiBudW1iZXIgb2YgcXVldWVzIDE1LTAgKi8KKyNkZWZpbmUgUU1fUkVHX1BRMlBDSUZVTkNfMAkJCQkJIDB4MTZlNmJjCisjZGVmaW5lIFFNX1JFR19QUTJQQ0lGVU5DXzEJCQkJCSAweDE2ZTZjMAorI2RlZmluZSBRTV9SRUdfUFEyUENJRlVOQ18yCQkJCQkgMHgxNmU2YzQKKyNkZWZpbmUgUU1fUkVHX1BRMlBDSUZVTkNfMwkJCQkJIDB4MTZlNmM4CisjZGVmaW5lIFFNX1JFR19QUTJQQ0lGVU5DXzQJCQkJCSAweDE2ZTZjYworI2RlZmluZSBRTV9SRUdfUFEyUENJRlVOQ181CQkJCQkgMHgxNmU2ZDAKKyNkZWZpbmUgUU1fUkVHX1BRMlBDSUZVTkNfNgkJCQkJIDB4MTZlNmQ0CisjZGVmaW5lIFFNX1JFR19QUTJQQ0lGVU5DXzcJCQkJCSAweDE2ZTZkOAorLyogW1dCIDU0XSBQb2ludGVyIFRhYmxlIE1lbW9yeSBmb3IgcXVldWVzIDYzLTA7IFRoZSBtYXBwaW5nIGlzIGFzIGZvbGxvdzoKKyAgIHB0cnRibFs1MzozMF0gcmVhZCBwb2ludGVyOyBwdHJ0YmxbMjk6Nl0gd3JpdGUgcG9pbnRlcjsgcHRydGJsWzU6NF0gcmVhZAorICAgYmFuazA7IHB0cnRibFszOjJdIHJlYWQgYmFuayAxOyBwdHJ0YmxbMTowXSB3cml0ZSBiYW5rOyAqLwogI2RlZmluZSBRTV9SRUdfUFRSVEJMCQkJCQkJIDB4MTY4YTAwCisvKiBbV0IgNTRdIFBvaW50ZXIgVGFibGUgTWVtb3J5IGZvciBxdWV1ZXMgMTI3LTY0OyBUaGUgbWFwcGluZyBpcyBhcyBmb2xsb3c6CisgICBwdHJ0YmxbNTM6MzBdIHJlYWQgcG9pbnRlcjsgcHRydGJsWzI5OjZdIHdyaXRlIHBvaW50ZXI7IHB0cnRibFs1OjRdIHJlYWQKKyAgIGJhbmswOyBwdHJ0YmxbMzoyXSByZWFkIGJhbmsgMTsgcHRydGJsWzE6MF0gd3JpdGUgYmFuazsgKi8KKyNkZWZpbmUgUU1fUkVHX1BUUlRCTF9FWFRfQQkJCQkJIDB4MTZlMjAwCiAvKiBbUlcgMl0gSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBRTV9SRUdfUU1fSU5UX01BU0sJCQkJCSAweDE2ODQ0NAogLyogW1IgMl0gSW50ZXJydXB0IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgUU1fUkVHX1FNX0lOVF9TVFMJCQkJCSAweDE2ODQzOAotLyogW1JXIDldIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KKy8qIFtSVyAxMl0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBRTV9SRUdfUU1fUFJUWV9NQVNLCQkJCQkgMHgxNjg0NTQKLS8qIFtSIDldIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCisvKiBbUiAxMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgUU1fUkVHX1FNX1BSVFlfU1RTCQkJCQkgMHgxNjg0NDgKIC8qIFtSIDMyXSBDdXJyZW50IHF1ZXVlcyBpbiBwaXBlbGluZTogUXVldWVzIGZyb20gMzIgdG8gNjMgKi8KICNkZWZpbmUgUU1fUkVHX1FTVEFUVVNfSElHSAkJCQkJIDB4MTY4MDJjCisvKiBbUiAzMl0gQ3VycmVudCBxdWV1ZXMgaW4gcGlwZWxpbmU6IFF1ZXVlcyBmcm9tIDk2IHRvIDEyNyAqLworI2RlZmluZSBRTV9SRUdfUVNUQVRVU19ISUdIX0VYVF9BCQkJCSAweDE2ZTQwOAogLyogW1IgMzJdIEN1cnJlbnQgcXVldWVzIGluIHBpcGVsaW5lOiBRdWV1ZXMgZnJvbSAwIHRvIDMxICovCiAjZGVmaW5lIFFNX1JFR19RU1RBVFVTX0xPVwkJCQkJIDB4MTY4MDI4Ci0vKiBbUiAyNF0gVGhlIG51bWJlciBvZiB0YXNrcyBxdWV1ZWQgZm9yIGVhY2ggcXVldWUgKi8KKy8qIFtSIDMyXSBDdXJyZW50IHF1ZXVlcyBpbiBwaXBlbGluZTogUXVldWVzIGZyb20gNjQgdG8gOTUgKi8KKyNkZWZpbmUgUU1fUkVHX1FTVEFUVVNfTE9XX0VYVF9BCQkJCSAweDE2ZTQwNAorLyogW1IgMjRdIFRoZSBudW1iZXIgb2YgdGFza3MgcXVldWVkIGZvciBlYWNoIHF1ZXVlOyBxdWV1ZXMgNjMtMCAqLwogI2RlZmluZSBRTV9SRUdfUVRBU0tDVFJfMAkJCQkJIDB4MTY4MzA4CisvKiBbUiAyNF0gVGhlIG51bWJlciBvZiB0YXNrcyBxdWV1ZWQgZm9yIGVhY2ggcXVldWU7IHF1ZXVlcyAxMjctNjQgKi8KKyNkZWZpbmUgUU1fUkVHX1FUQVNLQ1RSX0VYVF9BXzAgCQkJCSAweDE2ZTU4NAogLyogW1JXIDRdIFF1ZXVlIHRpZWQgdG8gVk9RICovCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzAJCQkJCSAweDE2ODBmNAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMAkJCQkJIDB4MTY4MTFjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMAkJCQkJIDB4MTZlNDljCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMQkJCQkJIDB4MTZlNGEwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMgkJCQkJIDB4MTZlNGE0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMwkJCQkJIDB4MTZlNGE4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNAkJCQkJIDB4MTZlNGFjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNQkJCQkJIDB4MTZlNGIwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNgkJCQkJIDB4MTZlNGI0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNwkJCQkJIDB4MTZlNGI4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwOAkJCQkJIDB4MTZlNGJjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwOQkJCQkJIDB4MTZlNGMwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMAkJCQkJIDB4MTZlNDljCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMQkJCQkJIDB4MTZlNGEwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMgkJCQkJIDB4MTZlNGE0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMwkJCQkJIDB4MTZlNGE4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNAkJCQkJIDB4MTZlNGFjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNQkJCQkJIDB4MTZlNGIwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNgkJCQkJIDB4MTZlNGI0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNwkJCQkJIDB4MTZlNGI4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwOAkJCQkJIDB4MTZlNGJjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwOQkJCQkJIDB4MTZlNGMwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzExCQkJCQkgMHgxNjgxMjAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEwCQkJCQkgMHgxNmU0YzQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTExCQkJCQkgMHgxNmU0YzgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEyCQkJCQkgMHgxNmU0Y2MKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEzCQkJCQkgMHgxNmU0ZDAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE0CQkJCQkgMHgxNmU0ZDQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE1CQkJCQkgMHgxNmU0ZDgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE2CQkJCQkgMHgxNmU0ZGMKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE3CQkJCQkgMHgxNmU0ZTAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE4CQkJCQkgMHgxNmU0ZTQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE5CQkJCQkgMHgxNmU0ZTgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEwCQkJCQkgMHgxNmU0YzQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTExCQkJCQkgMHgxNmU0YzgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEyCQkJCQkgMHgxNmU0Y2MKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEzCQkJCQkgMHgxNmU0ZDAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE0CQkJCQkgMHgxNmU0ZDQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE1CQkJCQkgMHgxNmU0ZDgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE2CQkJCQkgMHgxNmU0ZGMKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE3CQkJCQkgMHgxNmU0ZTAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE4CQkJCQkgMHgxNmU0ZTQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE5CQkJCQkgMHgxNmU0ZTgKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTIJCQkJCSAweDE2ODEyNAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjAJCQkJCSAweDE2ZTRlYworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjEJCQkJCSAweDE2ZTRmMAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjIJCQkJCSAweDE2ZTRmNAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjMJCQkJCSAweDE2ZTRmOAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjQJCQkJCSAweDE2ZTRmYworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjUJCQkJCSAweDE2ZTUwMAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjYJCQkJCSAweDE2ZTUwNAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjcJCQkJCSAweDE2ZTUwOAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjAJCQkJCSAweDE2ZTRlYworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjEJCQkJCSAweDE2ZTRmMAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjIJCQkJCSAweDE2ZTRmNAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjMJCQkJCSAweDE2ZTRmOAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjQJCQkJCSAweDE2ZTRmYworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjUJCQkJCSAweDE2ZTUwMAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjYJCQkJCSAweDE2ZTUwNAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjcJCQkJCSAweDE2ZTUwOAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMwkJCQkJIDB4MTY4MTI4CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzE0CQkJCQkgMHgxNjgxMmMKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTUJCQkJCSAweDE2ODEzMAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xNgkJCQkJIDB4MTY4MTM0CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzE3CQkJCQkgMHgxNjgxMzgKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMjEJCQkJCSAweDE2ODE0OAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8yMgkJCQkJIDB4MTY4MTRjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzIzCQkJCQkgMHgxNjgxNTAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMjQJCQkJCSAweDE2ODE1NAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8yNQkJCQkJIDB4MTY4MTU4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzI2CQkJCQkgMHgxNjgxNWMKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMjcJCQkJCSAweDE2ODE2MAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8yOAkJCQkJIDB4MTY4MTY0CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzI5CQkJCQkgMHgxNjgxNjgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMzAJCQkJCSAweDE2ODE2YworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8zMQkJCQkJIDB4MTY4MTcwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzMyCQkJCQkgMHgxNjgxNzQKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMzMJCQkJCSAweDE2ODE3OAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8zNAkJCQkJIDB4MTY4MTdjCkBAIC0yMzI4LDE3ICsyNzQ4LDc5IEBACiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzYxCQkJCQkgMHgxNjgxZTgKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjIJCQkJCSAweDE2ODFlYwogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82MwkJCQkJIDB4MTY4MWYwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzY0CQkJCQkgMHgxNmU0MGMKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjUJCQkJCSAweDE2ZTQxMAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82NgkJCQkJIDB4MTZlNDE0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzY3CQkJCQkgMHgxNmU0MTgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjgJCQkJCSAweDE2ZTQxYworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82OQkJCQkJIDB4MTZlNDIwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzYwCQkJCQkgMHgxNjgxZTQKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjEJCQkJCSAweDE2ODFlOAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82MgkJCQkJIDB4MTY4MWVjCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzYzCQkJCQkgMHgxNjgxZjAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjQJCQkJCSAweDE2ZTQwYworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82NQkJCQkJIDB4MTZlNDEwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzY5CQkJCQkgMHgxNmU0MjAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNwkJCQkJIDB4MTY4MTEwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzcwCQkJCQkgMHgxNmU0MjQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzEJCQkJCSAweDE2ZTQyOAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83MgkJCQkJIDB4MTZlNDJjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzczCQkJCQkgMHgxNmU0MzAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzQJCQkJCSAweDE2ZTQzNAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83NQkJCQkJIDB4MTZlNDM4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzc2CQkJCQkgMHgxNmU0M2MKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzcJCQkJCSAweDE2ZTQ0MAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83OAkJCQkJIDB4MTZlNDQ0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzc5CQkJCQkgMHgxNmU0NDgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzAJCQkJCSAweDE2ZTQyNAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83MQkJCQkJIDB4MTZlNDI4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzcyCQkJCQkgMHgxNmU0MmMKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzMJCQkJCSAweDE2ZTQzMAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83NAkJCQkJIDB4MTZlNDM0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzc1CQkJCQkgMHgxNmU0MzgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzYJCQkJCSAweDE2ZTQzYworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83NwkJCQkJIDB4MTZlNDQwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzc4CQkJCQkgMHgxNmU0NDQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzkJCQkJCSAweDE2ZTQ0OAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84CQkJCQkgMHgxNjgxMTQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODAJCQkJCSAweDE2ZTQ0YworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84MQkJCQkJIDB4MTZlNDUwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzgyCQkJCQkgMHgxNmU0NTQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODMJCQkJCSAweDE2ZTQ1OAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84NAkJCQkJIDB4MTZlNDVjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzg1CQkJCQkgMHgxNmU0NjAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODYJCQkJCSAweDE2ZTQ2NAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84NwkJCQkJIDB4MTZlNDY4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzg4CQkJCQkgMHgxNmU0NmMKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODkJCQkJCSAweDE2ZTQ3MAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84MAkJCQkJIDB4MTZlNDRjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzgxCQkJCQkgMHgxNmU0NTAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODUJCQkJCSAweDE2ZTQ2MAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84NgkJCQkJIDB4MTZlNDY0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzg3CQkJCQkgMHgxNmU0NjgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODgJCQkJCSAweDE2ZTQ2YworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84OQkJCQkJIDB4MTZlNDcwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzkJCQkJCSAweDE2ODExOAotLyogW1IgMjRdIFJlbWFpbmluZyBwYXVzZSB0aW1lb3V0IGZvciBwb3J0IDAgKi8KLSNkZWZpbmUgUU1fUkVHX1JFTUFJTlBBVVNFVE0wCQkJCQkgMHgxNjg0MTgKLS8qIFtSIDI0XSBSZW1haW5pbmcgcGF1c2UgdGltZW91dCBmb3IgcG9ydCAxICovCi0jZGVmaW5lIFFNX1JFR19SRU1BSU5QQVVTRVRNMQkJCQkJIDB4MTY4NDFjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzkwCQkJCQkgMHgxNmU0NzQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTEJCQkJCSAweDE2ZTQ3OAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85MgkJCQkJIDB4MTZlNDdjCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzkzCQkJCQkgMHgxNmU0ODAKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTQJCQkJCSAweDE2ZTQ4NAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85NQkJCQkJIDB4MTZlNDg4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzk2CQkJCQkgMHgxNmU0OGMKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTcJCQkJCSAweDE2ZTQ5MAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85OAkJCQkJIDB4MTZlNDk0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzk5CQkJCQkgMHgxNmU0OTgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTAJCQkJCSAweDE2ZTQ3NAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85MQkJCQkJIDB4MTZlNDc4CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzkyCQkJCQkgMHgxNmU0N2MKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTMJCQkJCSAweDE2ZTQ4MAorI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85NAkJCQkJIDB4MTZlNDg0CisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzk1CQkJCQkgMHgxNmU0ODgKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTYJCQkJCSAweDE2ZTQ4YworI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85NwkJCQkJIDB4MTZlNDkwCisjZGVmaW5lIFFNX1JFR19RVk9RSURYXzk4CQkJCQkgMHgxNmU0OTQKKyNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTkJCQkJCSAweDE2ZTQ5OAogLyogW1JXIDFdIEluaXRpYWxpemF0aW9uIGJpdCBjb21tYW5kICovCiAjZGVmaW5lIFFNX1JFR19TT0ZUX1JFU0VUCQkJCQkgMHgxNjg0MjgKIC8qIFtSVyA4XSBUaGUgY3JlZGl0IGNvc3QgcGVyIGV2ZXJ5IHRhc2sgaW4gdGhlIFFNLiBBIHZhbHVlIHBlciBlYWNoIFZPUSAqLwpAQCAtMjM3Miw0NCArMjg1NCwxMDMgQEAKICNkZWZpbmUgUU1fUkVHX1ZPUUlOSVRDUkVESVRfNAkJCQkJIDB4MTY4MDcwCiAjZGVmaW5lIFFNX1JFR19WT1FJTklUQ1JFRElUXzUJCQkJCSAweDE2ODA3NAogLyogW1JXIDFdIFRoZSBwb3J0IG9mIHdoaWNoIFZPUSBiZWxvbmdzICovCisjZGVmaW5lIFFNX1JFR19WT1FQT1JUXzAJCQkJCSAweDE2ODJhMAogI2RlZmluZSBRTV9SRUdfVk9RUE9SVF8xCQkJCQkgMHgxNjgyYTQKICNkZWZpbmUgUU1fUkVHX1ZPUVBPUlRfMTAJCQkJCSAweDE2ODJjOAogI2RlZmluZSBRTV9SRUdfVk9RUE9SVF8xMQkJCQkJIDB4MTY4MmNjCiAjZGVmaW5lIFFNX1JFR19WT1FQT1JUXzIJCQkJCSAweDE2ODJhOAotLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUSAqLworLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDMxLTAgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzBfTFNCCQkJCQkgMHgxNjgyNDAKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA5NS02NCAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfMF9MU0JfRVhUX0EJCQkJIDB4MTZlNTI0CisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgNjMtMzIgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzBfTVNCCQkJCQkgMHgxNjgyNDQKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAxMjctOTYgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzBfTVNCX0VYVF9BCQkJCSAweDE2ZTUyOAorLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDMxLTAgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzEwX0xTQgkJCQkJIDB4MTY4MjkwCisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgOTUtNjQgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzEwX0xTQl9FWFRfQQkJCQkgMHgxNmU1NzQKKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA2My0zMiAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfMTBfTVNCCQkJCQkgMHgxNjgyOTQKKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAxMjctOTYgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzEwX01TQl9FWFRfQQkJCQkgMHgxNmU1NzgKKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAzMS0wICovCisjZGVmaW5lIFFNX1JFR19WT1FRTUFTS18xMV9MU0IJCQkJCSAweDE2ODI5OAorLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDk1LTY0ICovCisjZGVmaW5lIFFNX1JFR19WT1FRTUFTS18xMV9MU0JfRVhUX0EJCQkJIDB4MTZlNTdjCisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgNjMtMzIgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzExX01TQgkJCQkJIDB4MTY4MjljCisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgMTI3LTk2ICovCisjZGVmaW5lIFFNX1JFR19WT1FRTUFTS18xMV9NU0JfRVhUX0EJCQkJIDB4MTZlNTgwCisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgMzEtMCAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfMV9MU0IJCQkJCSAweDE2ODI0OAorLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDk1LTY0ICovCisjZGVmaW5lIFFNX1JFR19WT1FRTUFTS18xX0xTQl9FWFRfQQkJCQkgMHgxNmU1MmMKKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA2My0zMiAqLwogI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfMV9NU0IJCQkJCSAweDE2ODI0YwotLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUSAqLworLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDEyNy05NiAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfMV9NU0JfRVhUX0EJCQkJIDB4MTZlNTMwCisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgMzEtMCAqLwogI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfMl9MU0IJCQkJCSAweDE2ODI1MAotLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUSAqLworLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDk1LTY0ICovCisjZGVmaW5lIFFNX1JFR19WT1FRTUFTS18yX0xTQl9FWFRfQQkJCQkgMHgxNmU1MzQKKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA2My0zMiAqLwogI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfMl9NU0IJCQkJCSAweDE2ODI1NAotLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUSAqLworLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDEyNy05NiAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfMl9NU0JfRVhUX0EJCQkJIDB4MTZlNTM4CisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgMzEtMCAqLwogI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfM19MU0IJCQkJCSAweDE2ODI1OAotLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUSAqLworLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDk1LTY0ICovCisjZGVmaW5lIFFNX1JFR19WT1FRTUFTS18zX0xTQl9FWFRfQQkJCQkgMHgxNmU1M2MKKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAxMjctOTYgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzNfTVNCX0VYVF9BCQkJCSAweDE2ZTU0MAorLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDMxLTAgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzRfTFNCCQkJCQkgMHgxNjgyNjAKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA5NS02NCAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfNF9MU0JfRVhUX0EJCQkJIDB4MTZlNTQ0CisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgNjMtMzIgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzRfTVNCCQkJCQkgMHgxNjgyNjQKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAxMjctOTYgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzRfTVNCX0VYVF9BCQkJCSAweDE2ZTU0OAorLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDMxLTAgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzVfTFNCCQkJCQkgMHgxNjgyNjgKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA5NS02NCAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfNV9MU0JfRVhUX0EJCQkJIDB4MTZlNTRjCisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgNjMtMzIgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzVfTVNCCQkJCQkgMHgxNjgyNmMKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAxMjctOTYgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzVfTVNCX0VYVF9BCQkJCSAweDE2ZTU1MAorLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDMxLTAgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzZfTFNCCQkJCQkgMHgxNjgyNzAKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA5NS02NCAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfNl9MU0JfRVhUX0EJCQkJIDB4MTZlNTU0CisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgNjMtMzIgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzZfTVNCCQkJCQkgMHgxNjgyNzQKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAxMjctOTYgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzZfTVNCX0VYVF9BCQkJCSAweDE2ZTU1OAorLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDMxLTAgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzdfTFNCCQkJCQkgMHgxNjgyNzgKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA5NS02NCAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfN19MU0JfRVhUX0EJCQkJIDB4MTZlNTVjCisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgNjMtMzIgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzdfTVNCCQkJCQkgMHgxNjgyN2MKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAxMjctOTYgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzdfTVNCX0VYVF9BCQkJCSAweDE2ZTU2MAorLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDMxLTAgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzhfTFNCCQkJCQkgMHgxNjgyODAKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA5NS02NCAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfOF9MU0JfRVhUX0EJCQkJIDB4MTZlNTY0CisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgNjMtMzIgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzhfTVNCCQkJCQkgMHgxNjgyODQKLS8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1EgKi8KKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAxMjctOTYgKi8KKyNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzhfTVNCX0VYVF9BCQkJCSAweDE2ZTU2OAorLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDMxLTAgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzlfTFNCCQkJCQkgMHgxNjgyODgKKy8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyA5NS02NCAqLworI2RlZmluZSBRTV9SRUdfVk9RUU1BU0tfOV9MU0JfRVhUX0EJCQkJIDB4MTZlNTZjCisvKiBbUlcgMzJdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVk9ROyBxdWV1ZXMgMTI3LTk2ICovCisjZGVmaW5lIFFNX1JFR19WT1FRTUFTS185X01TQl9FWFRfQQkJCQkgMHgxNmU1NzAKIC8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMAkJCQkJIDB4MTY4ODBjCiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEJCQkJCSAweDE2ODgxMApAQCAtMjQzMSwxNCArMjk3Miw3OCBAQAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNQkJCQkJIDB4MTY4ODI4CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE1X1NJWkUJCQkJIDEKIC8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTYJCQkJCSAweDE2ZTAwMAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNl9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE3CQkJCQkgMHgxNmUwMDQKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTdfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOAkJCQkJIDB4MTZlMDA4CisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE4X1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTkJCQkJCSAweDE2ZTAwYworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOV9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEwCQkJCQkgMHgxNjg4MTQKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTEJCQkJCSAweDE2ODgxOAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMgkJCQkJIDB4MTY4ODFjCiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEzCQkJCQkgMHgxNjg4MjAKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTQJCQkJCSAweDE2ODgyNAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNQkJCQkJIDB4MTY4ODI4CisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE2CQkJCQkgMHgxNmUwMDAKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTcJCQkJCSAweDE2ZTAwNAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOAkJCQkJIDB4MTZlMDA4CisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE5CQkJCQkgMHgxNmUwMGMKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMgkJCQkJIDB4MTY4ODJjCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIwCQkJCQkgMHgxNmUwMTAKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjBfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMQkJCQkJIDB4MTZlMDE0CisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIxX1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjIJCQkJCSAweDE2ZTAxOAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMl9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIzCQkJCQkgMHgxNmUwMWMKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjNfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNAkJCQkJIDB4MTZlMDIwCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI0X1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjUJCQkJCSAweDE2ZTAyNAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNV9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI2CQkJCQkgMHgxNmUwMjgKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjZfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNwkJCQkJIDB4MTZlMDJjCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI3X1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjgJCQkJCSAweDE2ZTAzMAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yOF9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI5CQkJCQkgMHgxNmUwMzQKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjlfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMAkJCQkJIDB4MTZlMDEwCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIxCQkJCQkgMHgxNmUwMTQKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjIJCQkJCSAweDE2ZTAxOAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMwkJCQkJIDB4MTZlMDFjCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI0CQkJCQkgMHgxNmUwMjAKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjUJCQkJCSAweDE2ZTAyNAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNgkJCQkJIDB4MTZlMDI4CisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI3CQkJCQkgMHgxNmUwMmMKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjgJCQkJCSAweDE2ZTAzMAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yOQkJCQkJIDB4MTZlMDM0CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMJCQkJCSAweDE2ODgzMAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMAkJCQkJIDB4MTZlMDM4CisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMwX1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzEJCQkJCSAweDE2ZTAzYworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMV9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMwCQkJCQkgMHgxNmUwMzgKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzEJCQkJCSAweDE2ZTAzYwogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU180CQkJCQkgMHgxNjg4MzQKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfNQkJCQkJIDB4MTY4ODM4CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzYJCQkJCSAweDE2ODgzYwpAQCAtMjQ0Nyw2ICszMDUyLDcwIEBACiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzkJCQkJCSAweDE2ODg0OAogLyogW1IgNl0gS2VlcCB0aGUgZmlsbCBsZXZlbCBvZiB0aGUgZmlmbyBmcm9tIHdyaXRlIGNsaWVudCAxICovCiAjZGVmaW5lIFFNX1JFR19YUU1fV1JDX0ZJRk9MVkwJCQkJCSAweDE2ODAwMAorI2RlZmluZSBCUkIxX0JSQjFfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBCUkIxX0JSQjFfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBCUkIxX0JSQjFfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IgCQkgKDB4MTw8MCkKKyNkZWZpbmUgQlJCMV9CUkIxX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIEJSQjFfQlJCMV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIEJSQjFfQlJCMV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIEJSQjFfQlJCMV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBCUkIxX0JSQjFfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgQ0NNX0NDTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIENDTV9DQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKKyNkZWZpbmUgQ0NNX0NDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBDQ01fQ0NNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIENDTV9DQ01fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBDQ01fQ0NNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgQ0NNX0NDTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBDQ01fQ0NNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAorI2RlZmluZSBDRFVfQ0RVX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgQ0RVX0NEVV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAorI2RlZmluZSBDRFVfQ0RVX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIENEVV9DRFVfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgQ0RVX0NEVV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIENEVV9DRFVfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBDRFVfQ0RVX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIENEVV9DRFVfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCisjZGVmaW5lIENGQ19DRkNfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBDRkNfQ0ZDX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIENGQ19DRkNfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgQ0ZDX0NGQ19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBDRkNfQ0ZDX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgQ0ZDX0NGQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIENGQ19DRkNfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgQ0ZDX0NGQ19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKKyNkZWZpbmUgQ1NETV9DU0RNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBDU0RNX0NTRE1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIENTRE1fQ1NETV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKKyNkZWZpbmUgQ1NETV9DU0RNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgQ1NETV9DU0RNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCisjZGVmaW5lIENTRE1fQ1NETV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgQ1NETV9DU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgQ1NETV9DU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBDU0VNX0NTRU1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIENTRU1fQ1NFTV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKKyNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCisjZGVmaW5lIENTRU1fQ1NFTV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgREJHX0RCR19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIERCR19EQkdfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKKyNkZWZpbmUgREJHX0RCR19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBEQkdfREJHX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIERCR19EQkdfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBEQkdfREJHX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgREJHX0RCR19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBEQkdfREJHX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAorI2RlZmluZSBETUFFX0RNQUVfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBETUFFX0RNQUVfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBETUFFX0RNQUVfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IgCQkgKDB4MTw8MCkKKyNkZWZpbmUgRE1BRV9ETUFFX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIERNQUVfRE1BRV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIERNQUVfRE1BRV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIERNQUVfRE1BRV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBETUFFX0RNQUVfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKICNkZWZpbmUgRE9SUV9ET1JRX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKICNkZWZpbmUgRE9SUV9ET1JRX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKICNkZWZpbmUgRE9SUV9ET1JRX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SIAkJICgweDE8PDApCkBAIC0yNDU1LDYgKzMxMjQsMjIgQEAKICNkZWZpbmUgRE9SUV9ET1JRX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKICNkZWZpbmUgRE9SUV9ET1JRX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCiAjZGVmaW5lIERPUlFfRE9SUV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBIQ19IQ19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SIAkJCSAoMHgxPDwwKQorI2RlZmluZSBIQ19IQ19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAorI2RlZmluZSBIQ19IQ19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBIQ19IQ19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBIQ19IQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIEhDX0hDX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCisjZGVmaW5lIEhDX0hDX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIEhDX0hDX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAorI2RlZmluZSBNSVNDX01JU0NfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBNSVNDX01JU0NfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBNSVNDX01JU0NfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IgCQkgKDB4MTw8MCkKKyNkZWZpbmUgTUlTQ19NSVNDX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIE1JU0NfTUlTQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIE1JU0NfTUlTQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIE1JU0NfTUlTQ19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBNSVNDX01JU0NfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKICNkZWZpbmUgTklHX05JR19JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKICNkZWZpbmUgTklHX05JR19JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKICNkZWZpbmUgTklHX05JR19JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SIAkJICgweDE8PDApCkBAIC0yNDYzLDYgKzMxNDgsNzAgQEAKICNkZWZpbmUgTklHX05JR19JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKICNkZWZpbmUgTklHX05JR19JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCiAjZGVmaW5lIE5JR19OSUdfSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBQQkZfUEJGX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUEJGX1BCRl9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAorI2RlZmluZSBQQkZfUEJGX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFBCRl9QQkZfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgUEJGX1BCRl9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFBCRl9QQkZfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBQQkZfUEJGX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFBCRl9QQkZfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCisjZGVmaW5lIFBCX1BCX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IgCQkJICgweDE8PDApCisjZGVmaW5lIFBCX1BCX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIFBCX1BCX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFBCX1BCX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFBCX1BCX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUEJfUEJfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKKyNkZWZpbmUgUEJfUEJfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUEJfUEJfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIFBSU19QUlNfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBQUlNfUFJTX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIFBSU19QUlNfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUFJTX1BSU19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBQUlNfUFJTX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUFJTX1BSU19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFBSU19QUlNfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUFJTX1BSU19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKKyNkZWZpbmUgUFhQMl9QWFAyX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBQWFAyX1BYUDJfSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFBYUDJfUFhQMl9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKKyNkZWZpbmUgUFhQMl9QWFAyX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgUFhQMl9QWFAyX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCisjZGVmaW5lIFBYUDJfUFhQMl9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgUFhQMl9QWFAyX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUFhQMl9QWFAyX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgUFhQX1BYUF9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUFhQX1BYUF9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgUFhQX1BYUF9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SIAkJICgweDE8PDApCisjZGVmaW5lIFBYUF9QWFBfSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBQWFBfUFhQX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBQWFBfUFhQX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBQWFBfUFhQX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUFhQX1BYUF9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFFNX1FNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IgCQkJICgweDE8PDApCisjZGVmaW5lIFFNX1FNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIFFNX1FNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFFNX1FNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFFNX1FNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUU1fUU1fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKKyNkZWZpbmUgUU1fUU1fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgUU1fUU1fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIFNFTV9GQVNUX1NFTV9GQVNUX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQorI2RlZmluZSBTRU1fRkFTVF9TRU1fRkFTVF9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJIDAKKyNkZWZpbmUgU0VNX0ZBU1RfU0VNX0ZBU1RfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IgCSAoMHgxPDwwKQorI2RlZmluZSBTRU1fRkFTVF9TRU1fRkFTVF9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCSAwCisjZGVmaW5lIFNFTV9GQVNUX1NFTV9GQVNUX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQorI2RlZmluZSBTRU1fRkFTVF9TRU1fRkFTVF9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJIDAKKyNkZWZpbmUgU0VNX0ZBU1RfU0VNX0ZBU1RfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQorI2RlZmluZSBTRU1fRkFTVF9TRU1fRkFTVF9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFCSAwCisjZGVmaW5lIFNSQ19TUkNfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBTUkNfU1JDX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIFNSQ19TUkNfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgU1JDX1NSQ19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBTUkNfU1JDX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgU1JDX1NSQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFNSQ19TUkNfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgU1JDX1NSQ19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKICNkZWZpbmUgVENNX1RDTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCiAjZGVmaW5lIFRDTV9UQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKICNkZWZpbmUgVENNX1RDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQpAQCAtMjQ3MSw2ICszMjIwLDc4IEBACiAjZGVmaW5lIFRDTV9UQ01fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAogI2RlZmluZSBUQ01fVENNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCiAjZGVmaW5lIFRDTV9UQ01fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCisjZGVmaW5lIFRNX1RNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IgCQkJICgweDE8PDApCisjZGVmaW5lIFRNX1RNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIFRNX1RNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFRNX1RNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFRNX1RNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgVE1fVE1fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKKyNkZWZpbmUgVE1fVE1fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgVE1fVE1fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIFRTRE1fVFNETV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgVFNETV9UU0RNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBUU0RNX1RTRE1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCisjZGVmaW5lIFRTRE1fVFNETV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFRTRE1fVFNETV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQorI2RlZmluZSBUU0RNX1RTRE1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFRTRE1fVFNETV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFRTRE1fVFNETV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFRTRU1fVFNFTV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgVFNFTV9UU0VNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBUU0VNX1RTRU1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCisjZGVmaW5lIFRTRU1fVFNFTV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFRTRU1fVFNFTV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQorI2RlZmluZSBUU0VNX1RTRU1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFRTRU1fVFNFTV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFRTRU1fVFNFTV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFVDTV9VQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBVQ01fVUNNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCisjZGVmaW5lIFVDTV9VQ01fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgVUNNX1VDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBVQ01fVUNNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgVUNNX1VDTV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFVDTV9VQ01fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgVUNNX1VDTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKKyNkZWZpbmUgVVNETV9VU0RNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBVU0RNX1VTRE1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFVTRE1fVVNETV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKKyNkZWZpbmUgVVNETV9VU0RNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgVVNETV9VU0RNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCisjZGVmaW5lIFVTRE1fVVNETV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgVVNETV9VU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgVVNETV9VU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgVVNFTV9VU0VNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBVU0VNX1VTRU1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFVTRU1fVVNFTV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKKyNkZWZpbmUgVVNFTV9VU0VNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgVVNFTV9VU0VNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCisjZGVmaW5lIFVTRU1fVVNFTV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgVVNFTV9VU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKKyNkZWZpbmUgVVNFTV9VU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgWENNX1hDTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFhDTV9YQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKKyNkZWZpbmUgWENNX1hDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBYQ01fWENNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCisjZGVmaW5lIFhDTV9YQ01fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBYQ01fWENNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgWENNX1hDTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBYQ01fWENNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAorI2RlZmluZSBYU0RNX1hTRE1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFhTRE1fWFNETV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgWFNETV9YU0RNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQorI2RlZmluZSBYU0RNX1hTRE1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBYU0RNX1hTRE1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKKyNkZWZpbmUgWFNETV9YU0RNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBYU0RNX1hTRE1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBYU0RNX1hTRE1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBYU0VNX1hTRU1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCisjZGVmaW5lIFhTRU1fWFNFTV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKKyNkZWZpbmUgWFNFTV9YU0VNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQorI2RlZmluZSBYU0VNX1hTRU1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBYU0VNX1hTRU1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKKyNkZWZpbmUgWFNFTV9YU0VNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAorI2RlZmluZSBYU0VNX1hTRU1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQorI2RlZmluZSBYU0VNX1hTRU1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAogI2RlZmluZSBDRkNfREVCVUcxX1JFR19XUklURV9BQyAJCQkJICgweDE8PDQpCiAjZGVmaW5lIENGQ19ERUJVRzFfUkVHX1dSSVRFX0FDX1NJWkUJCQkJIDQKIC8qIFtSIDFdIGRlYnVnIG9ubHk6IFRoaXMgYml0IGluZGljYXRlcyB3aGV0ZXIgaW5kaWNhdGVzIHRoYXQgZXh0ZXJuYWwKQEAgLTI0ODMsNiArMzMwNCwxNCBAQAogICAgfmRiZ19yZWdpc3RlcnNfZGVidWdfdGFyZ2V0PTAgKGludGVybmFsIGJ1ZmZlcikgKi8KICNkZWZpbmUgREJHX1JFR19XUkFQX09OX0lOVF9CVUZGRVIJCQkJIDB4YzEyOAogI2RlZmluZSBEQkdfUkVHX1dSQVBfT05fSU5UX0JVRkZFUl9TSVpFIAkJCSAxCisjZGVmaW5lIFFNX1FNX1BSVFlfU1RTX1JFR19XUkJVRkYJCQkJICgweDE8PDgpCisjZGVmaW5lIFFNX1FNX1BSVFlfU1RTX1JFR19XUkJVRkZfU0laRQkJCQkgOAorI2RlZmluZSBRTV9RTV9QUlRZX1NUU19DTFJfUkVHX1dSQlVGRgkJCQkgKDB4MTw8OCkKKyNkZWZpbmUgUU1fUU1fUFJUWV9TVFNfQ0xSX1JFR19XUkJVRkZfU0laRQkJCSA4CisjZGVmaW5lIFFNX1FNX1BSVFlfU1RTX1dSX1JFR19XUkJVRkYJCQkJICgweDE8PDgpCisjZGVmaW5lIFFNX1FNX1BSVFlfU1RTX1dSX1JFR19XUkJVRkZfU0laRQkJCSA4CisjZGVmaW5lIFFNX1FNX1BSVFlfTUFTS19SRUdfV1JCVUZGCQkJCSAoMHgxPDw4KQorI2RlZmluZSBRTV9RTV9QUlRZX01BU0tfUkVHX1dSQlVGRl9TSVpFIAkJCSA4CiAvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzAJCQkJCSAweDE2ODgwYwogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18wX1NJWkUJCQkJIDEKQEAgLTI1MzEsMjAgKzMzNjAsNjcgQEAKIC8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfOQkJCQkJIDB4MTY4ODQ4CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzlfU0laRQkJCQkgMQotLyogW1JXIDIyXSBOdW1iZXIgb2YgZnJlZSBlbGVtZW50IGluIHRoZSBmcmVlIGxpc3Qgb2YgVDIgZW50cmllcyAtIHBvcnQgMC4gKi8KKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTYJCQkJCSAweDE2ZTAwMAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNl9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE3CQkJCQkgMHgxNmUwMDQKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTdfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOAkJCQkJIDB4MTZlMDA4CisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE4X1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTkJCQkJCSAweDE2ZTAwYworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOV9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIwCQkJCQkgMHgxNmUwMTAKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjBfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMQkJCQkJIDB4MTZlMDE0CisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIxX1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjIJCQkJCSAweDE2ZTAxOAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMl9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIzCQkJCQkgMHgxNmUwMWMKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjNfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNAkJCQkJIDB4MTZlMDIwCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI0X1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjUJCQkJCSAweDE2ZTAyNAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNV9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI2CQkJCQkgMHgxNmUwMjgKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjZfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNwkJCQkJIDB4MTZlMDJjCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI3X1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjgJCQkJCSAweDE2ZTAzMAorI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yOF9TSVpFCQkJCSAxCisvKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI5CQkJCQkgMHgxNmUwMzQKKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjlfU0laRQkJCQkgMQorLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMAkJCQkJIDB4MTZlMDM4CisjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMwX1NJWkUJCQkJIDEKKy8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KKyNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzEJCQkJCSAweDE2ZTAzYworI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMV9TSVpFCQkJCSAxCiAjZGVmaW5lIFNSQ19SRUdfQ09VTlRGUkVFMAkJCQkJIDB4NDA1MDAKLS8qIFtXQiA2NF0gRmlyc3QgZnJlZSBlbGVtZW50IGluIHRoZSBmcmVlIGxpc3Qgb2YgVDIgZW50cmllcyAtIHBvcnQgMC4gKi8KKy8qIFtSVyAxXSBJZiBjbHIgdGhlIHNlYXJjaGVyIGlzIGNvbXBhdGlibGUgdG8gRTEgQTAgLSBzdXBwb3J0IG9ubHkgdHdvCisgICBwb3J0cy4gSWYgc2V0IHRoZSBzZWFyY2hlciBzdXBwb3J0IDggZnVuY3Rpb25zLiAqLworI2RlZmluZSBTUkNfUkVHX0UxSE1GX0VOQUJMRQkJCQkJIDB4NDA0Y2MKICNkZWZpbmUgU1JDX1JFR19GSVJTVEZSRUUwCQkJCQkgMHg0MDUxMAogI2RlZmluZSBTUkNfUkVHX0tFWVJTUzBfMAkJCQkJIDB4NDA0MDgKKyNkZWZpbmUgU1JDX1JFR19LRVlSU1MwXzcJCQkJCSAweDQwNDI0CiAjZGVmaW5lIFNSQ19SRUdfS0VZUlNTMV85CQkJCQkgMHg0MDQ1NAotLyogW1dCIDY0XSBMYXN0IGZyZWUgZWxlbWVudCBpbiB0aGUgZnJlZSBsaXN0IG9mIFQyIGVudHJpZXMgLSBwb3J0IDAuICovCiAjZGVmaW5lIFNSQ19SRUdfTEFTVEZSRUUwCQkJCQkgMHg0MDUzMAotLyogW1JXIDVdIFRoZSBudW1iZXIgb2YgaGFzaCBiaXRzIHVzZWQgZm9yIHRoZSBzZWFyY2ggKGgpOyBWYWx1ZXMgY2FuIGJlIDgKLSAgIHRvIDI0LiAqLwogI2RlZmluZSBTUkNfUkVHX05VTUJFUl9IQVNIX0JJVFMwCQkJCSAweDQwNDAwCiAvKiBbUlcgMV0gUmVzZXQgaW50ZXJuYWwgc3RhdGUgbWFjaGluZXMuICovCiAjZGVmaW5lIFNSQ19SRUdfU09GVF9SU1QJCQkJCSAweDQwNDljCi0vKiBbUiAxXSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCAqLworLyogW1IgM10gSW50ZXJydXB0IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgU1JDX1JFR19TUkNfSU5UX1NUUwkJCQkJIDB4NDA0YWMKIC8qIFtSVyAzXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFNSQ19SRUdfU1JDX1BSVFlfTUFTSwkJCQkJIDB4NDA0YzgKQEAgLTI2MzcsMTEgKzM1MTMsMTQgQEAKICAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAogICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLwogI2RlZmluZSBUQ01fUkVHX1BCRl9XRUlHSFQJCQkJCSAweDUwMGI0Ci0vKiBbUlcgNl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciAwIHBlciBwb3J0IGluZGV4LiAqLwogI2RlZmluZSBUQ01fUkVHX1BIWVNfUU5VTTBfMAkJCQkJIDB4NTAwZTAKICNkZWZpbmUgVENNX1JFR19QSFlTX1FOVU0wXzEJCQkJCSAweDUwMGU0Ci0vKiBbUlcgNl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciAxIHBlciBwb3J0IGluZGV4LiAqLwogI2RlZmluZSBUQ01fUkVHX1BIWVNfUU5VTTFfMAkJCQkJIDB4NTAwZTgKKyNkZWZpbmUgVENNX1JFR19QSFlTX1FOVU0xXzEJCQkJCSAweDUwMGVjCisjZGVmaW5lIFRDTV9SRUdfUEhZU19RTlVNMl8wCQkJCQkgMHg1MDBmMAorI2RlZmluZSBUQ01fUkVHX1BIWVNfUU5VTTJfMQkJCQkJIDB4NTAwZjQKKyNkZWZpbmUgVENNX1JFR19QSFlTX1FOVU0zXzAJCQkJCSAweDUwMGY4CisjZGVmaW5lIFRDTV9SRUdfUEhZU19RTlVNM18xCQkJCQkgMHg1MDBmYwogLyogW1JXIDFdIElucHV0IHBycyBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzIGRpc3JlZ2FyZGVkOwogICAgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZSB0cmVhdGVkIGFzIHVzdWFsOwogICAgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTI2NzAsNiArMzU0OSw4IEBACiAjZGVmaW5lIFRDTV9SRUdfVENNX0lOVF9NQVNLCQkJCQkgMHg1MDFkYwogLyogW1IgMTFdIEludGVycnVwdCByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFRDTV9SRUdfVENNX0lOVF9TVFMJCQkJCSAweDUwMWQwCisvKiBbUiAyN10gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgVENNX1JFR19UQ01fUFJUWV9TVFMJCQkJCSAweDUwMWUwCiAvKiBbUlcgM10gVGhlIHNpemUgb2YgQUcgY29udGV4dCByZWdpb24gMCBpbiBSRUctcGFpcnMuIERlc2lnbmF0ZXMgdGhlIE1TCiAgICBSRUctcGFpciBudW1iZXIgKGUuZy4gaWYgcmVnaW9uIDAgaXMgNiBSRUctcGFpcnM7IHRoZSB2YWx1ZSBzaG91bGQgYmUgNSkuCiAgICBJcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHRoZSBBRyBjb250ZXh0IFJFRy1wYWlycyB3cml0dGVuIGJhY2s7CkBAIC0yNzI5LDYgKzM2MTAsNyBAQAogICAgbWVjaGFuaXNtLiBUaGUgZmllbGRzIGFyZTogWzU6MF0gLSBsZW5ndGggb2YgdGhlIG1lc3NhZ2U7IDE1OjZdIC0gbWVzc2FnZQogICAgcG9pbnRlcjsgMjA6MTZdIC0gbmV4dCBwb2ludGVyLiAqLwogI2RlZmluZSBUQ01fUkVHX1hYX0RFU0NSX1RBQkxFCQkJCQkgMHg1MDI4MAorI2RlZmluZSBUQ01fUkVHX1hYX0RFU0NSX1RBQkxFX1NJWkUJCQkJIDMyCiAvKiBbUiA2XSBVc2UgdG8gcmVhZCB0aGUgdmFsdWUgb2YgWFggcHJvdGVjdGlvbiBGcmVlIGNvdW50ZXIuICovCiAjZGVmaW5lIFRDTV9SRUdfWFhfRlJFRSAJCQkJCSAweDUwMTc4CiAvKiBbUlcgNl0gSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyZWRpdCBjb3VudGVyOyByZXNwb25zaWJsZSBmb3IgZnVsZmlsbGluZwpAQCAtMjc4MCw3ICszNjYyLDcgQEAKIC8qIFtSVyA0XSBMb2FkIHZhbHVlIGZvciBleHBpcmF0aW9uIGNyZWRpdCBjbnQuIENGQyBtYXggbnVtYmVyIG9mCiAgICBvdXRzdGFuZGluZyBsb2FkIHJlcXVlc3RzIGZvciB0aW1lcnMgKGV4cGlyYXRpb24pIGNvbnRleHQgbG9hZGluZy4gKi8KICNkZWZpbmUgVE1fUkVHX0VYUF9DUkRDTlRfVkFMCQkJCQkgMHgxNjQyMzgKLS8qIFtSVyAxOF0gTGluZWFyMCBNYXggYWN0aXZlIGNpZC4gKi8KKy8qIFtSVyAxOF0gTGluZWFyMCBNYXggYWN0aXZlIGNpZCAoaW4gYmFua3Mgb2YgMzIgZW50cmllcykuICovCiAjZGVmaW5lIFRNX1JFR19MSU4wX01BWF9BQ1RJVkVfQ0lECQkJCSAweDE2NDA0OAogLyogW1dCIDY0XSBMaW5lYXIwIHBoeSBhZGRyZXNzLiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9QSFlfQUREUgkJCQkJIDB4MTY0MjcwCkBAIC0yODA0LDYgKzM2ODYsMjEgQEAKICNkZWZpbmUgVE1fUkVHX1RNX0lOVF9TVFMJCQkJCSAweDE2NDBmMAogLyogW1JXIDhdIFRoZSBldmVudCBpZCBmb3IgYWdncmVnYXRlZCBpbnRlcnJ1cHQgMCAqLwogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAJCQkJIDB4NDIwMzgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yCQkJCSAweDQyMDQwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjAJCQkJIDB4NDIwODgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMQkJCQkgMHg0MjA4YworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIyCQkJCSAweDQyMDkwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjMJCQkJIDB4NDIwOTQKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNAkJCQkgMHg0MjA5OAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI1CQkJCSAweDQyMDljCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjYJCQkJIDB4NDIwYTAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNwkJCQkgMHg0MjBhNAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI4CQkJCSAweDQyMGE4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjkJCQkJIDB4NDIwYWMKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zCQkJCSAweDQyMDQ0CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzAJCQkJIDB4NDIwYjAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMQkJCQkgMHg0MjBiNAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQJCQkJIDB4NDIwNDgKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNmY19yc3AgbGNpZCAqLwogI2RlZmluZSBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIJCQkJIDB4NDIwMDgKIC8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCkBAIC0yODY4LDYgKzM3NjUsOSBAQAogLyogW1JXIDMyXSBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFRTRE1fUkVHX1RTRE1fSU5UX01BU0tfMAkJCQkgMHg0MjI5YwogI2RlZmluZSBUU0RNX1JFR19UU0RNX0lOVF9NQVNLXzEJCQkJIDB4NDIyYWMKKy8qIFtSIDMyXSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBUU0RNX1JFR19UU0RNX0lOVF9TVFNfMCAJCQkJIDB4NDIyOTAKKyNkZWZpbmUgVFNETV9SRUdfVFNETV9JTlRfU1RTXzEgCQkJCSAweDQyMmEwCiAvKiBbUlcgMTFdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgVFNETV9SRUdfVFNETV9QUlRZX01BU0sgCQkJCSAweDQyMmJjCiAvKiBbUiAxMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KQEAgLTI5MDgsOSArMzgwOCw4IEBACiAjZGVmaW5lIFRTRU1fUkVHX0VOQUJMRV9PVVQJCQkJCSAweDE4MDBhOAogLyogW1JXIDMyXSBUaGlzIGFkZHJlc3Mgc3BhY2UgY29udGFpbnMgYWxsIHJlZ2lzdGVycyBhbmQgbWVtb3JpZXMgdGhhdCBhcmUKICAgIHBsYWNlZCBpbiBTRU1fRkFTVCBibG9jay4gVGhlIFNFTV9GQVNUIHJlZ2lzdGVycyBhcmUgZGVzY3JpYmVkIGluCi0gICBhcHBlbmRpeCBCLiBJbiBvcmRlciB0byBhY2Nlc3MgdGhlIFNFTV9GQVNUIHJlZ2lzdGVycyB0aGUgYmFzZSBhZGRyZXNzCi0gICBUU0VNX1JFR0lTVEVSU19GQVNUX01FTU9SWSAoT2Zmc2V0OiAweDFhMDAwMCkgc2hvdWxkIGJlIGFkZGVkIHRvIGVhY2gKLSAgIFNFTV9GQVNUIHJlZ2lzdGVyIG9mZnNldC4gKi8KKyAgIGFwcGVuZGl4IEIuIEluIG9yZGVyIHRvIGFjY2VzcyB0aGUgc2VtX2Zhc3QgcmVnaXN0ZXJzIHRoZSBiYXNlIGFkZHJlc3MKKyAgIH5mYXN0X21lbW9yeS5mYXN0X21lbW9yeSBzaG91bGQgYmUgYWRkZWQgdG8gZWFjaHNlbV9mYXN0IHJlZ2lzdGVyIG9mZnNldC4gKi8KICNkZWZpbmUgVFNFTV9SRUdfRkFTVF9NRU1PUlkJCQkJCSAweDFhMDAwMAogLyogW1JXIDFdIERpc2FibGVzIGlucHV0IG1lc3NhZ2VzIGZyb20gRklDMCBNYXkgYmUgdXBkYXRlZCBkdXJpbmcgcnVuX3RpbWUKICAgIGJ5IHRoZSBtaWNyb2NvZGUgKi8KQEAgLTI5OTMsNiArMzg5Miw5IEBACiAvKiBbUlcgMzJdIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgVFNFTV9SRUdfVFNFTV9JTlRfTUFTS18wCQkJCSAweDE4MDEwMAogI2RlZmluZSBUU0VNX1JFR19UU0VNX0lOVF9NQVNLXzEJCQkJIDB4MTgwMTEwCisvKiBbUiAzMl0gSW50ZXJydXB0IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgVFNFTV9SRUdfVFNFTV9JTlRfU1RTXzAgCQkJCSAweDE4MDBmNAorI2RlZmluZSBUU0VNX1JFR19UU0VNX0lOVF9TVFNfMSAJCQkJIDB4MTgwMTA0CiAvKiBbUlcgMzJdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgVFNFTV9SRUdfVFNFTV9QUlRZX01BU0tfMAkJCQkgMHgxODAxMjAKICNkZWZpbmUgVFNFTV9SRUdfVFNFTV9QUlRZX01BU0tfMQkJCQkgMHgxODAxMzAKQEAgLTMwODgsMTIgKzM5OTAsMTUgQEAKICNkZWZpbmUgVUNNX1JFR19OX1NNX0NUWF9MRF8yCQkJCQkgMHhlMDA1YwogI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzMJCQkJCSAweGUwMDYwCiAjZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfNAkJCQkJIDB4ZTAwNjQKLS8qIFtSVyA2XSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIDAgcGVyIHBvcnQgaW5kZXggKENJRFsyM10pICovCisjZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfNQkJCQkJIDB4ZTAwNjgKICNkZWZpbmUgVUNNX1JFR19QSFlTX1FOVU0wXzAJCQkJCSAweGUwMTEwCiAjZGVmaW5lIFVDTV9SRUdfUEhZU19RTlVNMF8xCQkJCQkgMHhlMDExNAotLyogW1JXIDZdIFRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIgMSBwZXIgcG9ydCBpbmRleCAoQ0lEWzIzXSkgKi8KICNkZWZpbmUgVUNNX1JFR19QSFlTX1FOVU0xXzAJCQkJCSAweGUwMTE4CiAjZGVmaW5lIFVDTV9SRUdfUEhZU19RTlVNMV8xCQkJCQkgMHhlMDExYworI2RlZmluZSBVQ01fUkVHX1BIWVNfUU5VTTJfMAkJCQkJIDB4ZTAxMjAKKyNkZWZpbmUgVUNNX1JFR19QSFlTX1FOVU0yXzEJCQkJCSAweGUwMTI0CisjZGVmaW5lIFVDTV9SRUdfUEhZU19RTlVNM18wCQkJCQkgMHhlMDEyOAorI2RlZmluZSBVQ01fUkVHX1BIWVNfUU5VTTNfMQkJCQkJIDB4ZTAxMmMKIC8qIFtSVyA4XSBUaGUgRXZlbnQgSUQgZm9yIFRpbWVycyBmb3JtYXR0aW5nIGluIGNhc2Ugb2Ygc3RvcCBkb25lLiAqLwogI2RlZmluZSBVQ01fUkVHX1NUT1BfRVZOVF9JRAkJCQkJIDB4ZTAwYWMKIC8qIFtSQyAxXSBTZXQgd2hlbiB0aGUgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikKQEAgLTMxMzIsNiArNDAzNyw4IEBACiAjZGVmaW5lIFVDTV9SRUdfVUNNX0lOVF9NQVNLCQkJCQkgMHhlMDFkNAogLyogW1IgMTFdIEludGVycnVwdCByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFVDTV9SRUdfVUNNX0lOVF9TVFMJCQkJCSAweGUwMWM4CisvKiBbUiAyN10gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgVUNNX1JFR19VQ01fUFJUWV9TVFMJCQkJCSAweGUwMWQ4CiAvKiBbUlcgMl0gVGhlIHNpemUgb2YgQUcgY29udGV4dCByZWdpb24gMCBpbiBSRUctcGFpcnMuIERlc2lnbmF0ZXMgdGhlIE1TCiAgICBSRUctcGFpciBudW1iZXIgKGUuZy4gaWYgcmVnaW9uIDAgaXMgNiBSRUctcGFpcnM7IHRoZSB2YWx1ZSBzaG91bGQgYmUgNSkuCiAgICBJcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHRoZSBBRyBjb250ZXh0IFJFRy1wYWlycyB3cml0dGVuIGJhY2s7CkBAIC0zMTg5LDYgKzQwOTYsNyBAQAogICAgbWVjaGFuaXNtLiBUaGUgZmllbGRzIGFyZTpbNTowXSAtIG1lc3NhZ2UgbGVuZ3RoOyAxNDo2XSAtIG1lc3NhZ2UKICAgIHBvaW50ZXI7IDE5OjE1XSAtIG5leHQgcG9pbnRlci4gKi8KICNkZWZpbmUgVUNNX1JFR19YWF9ERVNDUl9UQUJMRQkJCQkJIDB4ZTAyODAKKyNkZWZpbmUgVUNNX1JFR19YWF9ERVNDUl9UQUJMRV9TSVpFCQkJCSAzMgogLyogW1IgNl0gVXNlIHRvIHJlYWQgdGhlIFhYIHByb3RlY3Rpb24gRnJlZSBjb3VudGVyLiAqLwogI2RlZmluZSBVQ01fUkVHX1hYX0ZSRUUgCQkJCQkgMHhlMDE2YwogLyogW1JXIDZdIEluaXRpYWwgdmFsdWUgZm9yIHRoZSBjcmVkaXQgY291bnRlcjsgcmVzcG9uc2libGUgZm9yIGZ1bGZpbGxpbmcKQEAgLTMyMTgsNiArNDEyNiwyMSBAQAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE3CQkJCSAweGM0MDdjCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTgJCQkJIDB4YzQwODAKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOQkJCQkgMHhjNDA4NAorI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIJCQkJIDB4YzQwNDAKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMAkJCQkgMHhjNDA4OAorI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIxCQkJCSAweGM0MDhjCisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjIJCQkJIDB4YzQwOTAKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMwkJCQkgMHhjNDA5NAorI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI0CQkJCSAweGM0MDk4CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjUJCQkJIDB4YzQwOWMKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNgkJCQkgMHhjNDBhMAorI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI3CQkJCSAweGM0MGE0CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjgJCQkJIDB4YzQwYTgKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yOQkJCQkgMHhjNDBhYworI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMJCQkJIDB4YzQwNDQKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMAkJCQkgMHhjNDBiMAorI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMxCQkJCSAweGM0MGI0CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNAkJCQkgMHhjNDA0OAogLyogW1JXIDFdIEZvciBlYWNoIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IGluZGV4IHdoZXRoZXIgdGhlIG1vZGUgaXMgbm9ybWFsICgwKQogICAgb3IgYXV0by1tYXNrLW1vZGUgKDEpICovCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8wIAkJCQkgMHhjNDFiOApAQCAtMzI5OCw2ICs0MjIxLDkgQEAKIC8qIFtSVyAzMl0gSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBVU0RNX1JFR19VU0RNX0lOVF9NQVNLXzAJCQkJIDB4YzQyYTAKICNkZWZpbmUgVVNETV9SRUdfVVNETV9JTlRfTUFTS18xCQkJCSAweGM0MmIwCisvKiBbUiAzMl0gSW50ZXJydXB0IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgVVNETV9SRUdfVVNETV9JTlRfU1RTXzAgCQkJCSAweGM0Mjk0CisjZGVmaW5lIFVTRE1fUkVHX1VTRE1fSU5UX1NUU18xIAkJCQkgMHhjNDJhNAogLyogW1JXIDExXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFVTRE1fUkVHX1VTRE1fUFJUWV9NQVNLIAkJCQkgMHhjNDJjMAogLyogW1IgMTFdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCkBAIC0zMzM4LDkgKzQyNjQsOCBAQAogI2RlZmluZSBVU0VNX1JFR19FTkFCTEVfT1VUCQkJCQkgMHgzMDAwYTgKIC8qIFtSVyAzMl0gVGhpcyBhZGRyZXNzIHNwYWNlIGNvbnRhaW5zIGFsbCByZWdpc3RlcnMgYW5kIG1lbW9yaWVzIHRoYXQgYXJlCiAgICBwbGFjZWQgaW4gU0VNX0ZBU1QgYmxvY2suIFRoZSBTRU1fRkFTVCByZWdpc3RlcnMgYXJlIGRlc2NyaWJlZCBpbgotICAgYXBwZW5kaXggQi4gSW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBTRU1fRkFTVCByZWdpc3RlcnMuLi4gdGhlIGJhc2UgYWRkcmVzcwotICAgVVNFTV9SRUdJU1RFUlNfRkFTVF9NRU1PUlkgKE9mZnNldDogMHgzMjAwMDApIHNob3VsZCBiZSBhZGRlZCB0byBlYWNoCi0gICBTRU1fRkFTVCByZWdpc3RlciBvZmZzZXQuICovCisgICBhcHBlbmRpeCBCLiBJbiBvcmRlciB0byBhY2Nlc3MgdGhlIHNlbV9mYXN0IHJlZ2lzdGVycyB0aGUgYmFzZSBhZGRyZXNzCisgICB+ZmFzdF9tZW1vcnkuZmFzdF9tZW1vcnkgc2hvdWxkIGJlIGFkZGVkIHRvIGVhY2hzZW1fZmFzdCByZWdpc3RlciBvZmZzZXQuICovCiAjZGVmaW5lIFVTRU1fUkVHX0ZBU1RfTUVNT1JZCQkJCQkgMHgzMjAwMDAKIC8qIFtSVyAxXSBEaXNhYmxlcyBpbnB1dCBtZXNzYWdlcyBmcm9tIEZJQzAgTWF5IGJlIHVwZGF0ZWQgZHVyaW5nIHJ1bl90aW1lCiAgICBieSB0aGUgbWljcm9jb2RlICovCkBAIC0zNDIzLDYgKzQzNDgsOSBAQAogLyogW1JXIDMyXSBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFVTRU1fUkVHX1VTRU1fSU5UX01BU0tfMAkJCQkgMHgzMDAxMTAKICNkZWZpbmUgVVNFTV9SRUdfVVNFTV9JTlRfTUFTS18xCQkJCSAweDMwMDEyMAorLyogW1IgMzJdIEludGVycnVwdCByZWdpc3RlciAjMCByZWFkICovCisjZGVmaW5lIFVTRU1fUkVHX1VTRU1fSU5UX1NUU18wIAkJCQkgMHgzMDAxMDQKKyNkZWZpbmUgVVNFTV9SRUdfVVNFTV9JTlRfU1RTXzEgCQkJCSAweDMwMDExNAogLyogW1JXIDMyXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFVTRU1fUkVHX1VTRU1fUFJUWV9NQVNLXzAJCQkJIDB4MzAwMTMwCiAjZGVmaW5lIFVTRU1fUkVHX1VTRU1fUFJUWV9NQVNLXzEJCQkJIDB4MzAwMTQwCkBAIC0zNDkxLDExICs0NDE5LDggQEAKICAgIHdyaXRlcyB0aGUgaW5pdGlhbCBjcmVkaXQgdmFsdWU7IHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKICAgIGNyZWRpdCBjb3VudGVyLiBNdXN0IGJlIGluaXRpYWxpemVkIHRvIDY0IGF0IHN0YXJ0LXVwLiAqLwogI2RlZmluZSBYQ01fUkVHX0ZJQzFfSU5JVF9DUkQJCQkJCSAweDIwNDEwCi0vKiBbUlcgOF0gVGhlIG1heGltdW0gZGVsYXllZCBBQ0sgY291bnRlciB2YWx1ZS5NdXN0IGJlIGF0IGxlYXN0IDIuIFBlciBwb3J0Ci0gICB2YWx1ZS4gKi8KICNkZWZpbmUgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAJCQkJIDB4MjAxMTgKICNkZWZpbmUgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzEJCQkJIDB4MjAxMWMKLS8qIFtSVyAyOF0gVGhlIGRlbGF5ZWQgQUNLIHRpbWVvdXQgaW4gdGlja3MuIFBlciBwb3J0IHZhbHVlLiAqLwogI2RlZmluZSBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMAkJCQkgMHgyMDEwOAogI2RlZmluZSBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMQkJCQkgMHgyMDEwYwogLyogW1JXIDFdIEFyYml0cmF0aW9qbiBiZXR3ZWVuIElucHV0IEFyYml0ZXIgZ3JvdXBzOiAwIC0gZmFpciBSb3VuZC1Sb2JpbjsgMQpAQCAtMzU0NSw2ICs0NDcwLDcgQEAKICNkZWZpbmUgWENNX1JFR19OX1NNX0NUWF9MRF8yCQkJCQkgMHgyMDA2OAogI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzMJCQkJCSAweDIwMDZjCiAjZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfNAkJCQkJIDB4MjAwNzAKKyNkZWZpbmUgWENNX1JFR19OX1NNX0NUWF9MRF81CQkJCQkgMHgyMDA3NAogLyogW1JXIDFdIElucHV0IHBiZiBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzIGRpc3JlZ2FyZGVkOwogICAgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZSB0cmVhdGVkIGFzIHVzdWFsOwogICAgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTM1NTYsNiArNDQ4Miw4IEBACiAgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKICAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KICNkZWZpbmUgWENNX1JFR19QQkZfV0VJR0hUCQkJCQkgMHgyMDBkMAorI2RlZmluZSBYQ01fUkVHX1BIWVNfUU5VTTNfMAkJCQkJIDB4MjAxMDAKKyNkZWZpbmUgWENNX1JFR19QSFlTX1FOVU0zXzEJCQkJCSAweDIwMTA0CiAvKiBbUlcgOF0gVGhlIEV2ZW50IElEIGZvciBUaW1lcnMgZm9ybWF0dGluZyBpbiBjYXNlIG9mIHN0b3AgZG9uZS4gKi8KICNkZWZpbmUgWENNX1JFR19TVE9QX0VWTlRfSUQJCQkJCSAweDIwMGI4CiAvKiBbUkMgMV0gU2V0IGF0IG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pIGF0CkBAIC0zNjAzLDUzICs0NTMxLDE3IEBACiAgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKICAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KICNkZWZpbmUgWENNX1JFR19VU0VNX1dFSUdIVAkJCQkJIDB4MjAwYzgKLS8qIFtSVyAyXSBEQSBjb3VudGVyIGNvbW1hbmQ7IHVzZWQgaW4gY2FzZSBvZiB3aW5kb3cgdXBkYXRlIGRvb3JiZWxsLlRoZQotICAgZmlyc3QgaW5kZXggc3RhbmRzIGZvciB0aGUgdmFsdWUgRGFFbmFibGUgb2YgdGhhdCBjb25uZWN0aW9uLiBUaGUgc2Vjb25kCi0gICBpbmRleCBzdGFuZHMgZm9yIHBvcnQgbnVtYmVyLiAqLwogI2RlZmluZSBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMCAJCQkJIDB4MjAxZDQKLS8qIFtSVyAyXSBEQSBjb3VudGVyIGNvbW1hbmQ7IHVzZWQgaW4gY2FzZSBvZiB3aW5kb3cgdXBkYXRlIGRvb3JiZWxsLlRoZQotICAgZmlyc3QgaW5kZXggc3RhbmRzIGZvciB0aGUgdmFsdWUgRGFFbmFibGUgb2YgdGhhdCBjb25uZWN0aW9uLiBUaGUgc2Vjb25kCi0gICBpbmRleCBzdGFuZHMgZm9yIHBvcnQgbnVtYmVyLiAqLwogI2RlZmluZSBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMSAJCQkJIDB4MjAxZDgKLS8qIFtSVyAyXSBEQSBjb3VudGVyIGNvbW1hbmQ7IHVzZWQgaW4gY2FzZSBvZiB3aW5kb3cgdXBkYXRlIGRvb3JiZWxsLlRoZQotICAgZmlyc3QgaW5kZXggc3RhbmRzIGZvciB0aGUgdmFsdWUgRGFFbmFibGUgb2YgdGhhdCBjb25uZWN0aW9uLiBUaGUgc2Vjb25kCi0gICBpbmRleCBzdGFuZHMgZm9yIHBvcnQgbnVtYmVyLiAqLwogI2RlZmluZSBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMCAJCQkJIDB4MjAxZGMKLS8qIFtSVyAyXSBEQSBjb3VudGVyIGNvbW1hbmQ7IHVzZWQgaW4gY2FzZSBvZiB3aW5kb3cgdXBkYXRlIGRvb3JiZWxsLlRoZQotICAgZmlyc3QgaW5kZXggc3RhbmRzIGZvciB0aGUgdmFsdWUgRGFFbmFibGUgb2YgdGhhdCBjb25uZWN0aW9uLiBUaGUgc2Vjb25kCi0gICBpbmRleCBzdGFuZHMgZm9yIHBvcnQgbnVtYmVyLiAqLwogI2RlZmluZSBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMSAJCQkJIDB4MjAxZTAKLS8qIFtSVyA4XSBEQSBjb3VudGVyIHVwZGF0ZSB2YWx1ZSB1c2VkIGluIGNhc2Ugb2Ygd2luZG93IHVwZGF0ZSBkb29yYmVsbC5UaGUKLSAgIGZpcnN0IGluZGV4IHN0YW5kcyBmb3IgdGhlIHZhbHVlIERhRW5hYmxlIG9mIHRoYXQgY29ubmVjdGlvbi4gVGhlIHNlY29uZAotICAgaW5kZXggc3RhbmRzIGZvciBwb3J0IG51bWJlci4gKi8KICNkZWZpbmUgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwCQkJCSAweDIwMWU0Ci0vKiBbUlcgOF0gREEgY291bnRlciB1cGRhdGUgdmFsdWU7IHVzZWQgaW4gY2FzZSBvZiB3aW5kb3cgdXBkYXRlCi0gICBkb29yYmVsbC5UaGUgZmlyc3QgaW5kZXggc3RhbmRzIGZvciB0aGUgdmFsdWUgRGFFbmFibGUgb2YgdGhhdAotICAgY29ubmVjdGlvbi4gVGhlIHNlY29uZCBpbmRleCBzdGFuZHMgZm9yIHBvcnQgbnVtYmVyLiAqLwogI2RlZmluZSBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEJCQkJIDB4MjAxZTgKLS8qIFtSVyA4XSBEQSBjb3VudGVyIHVwZGF0ZSB2YWx1ZTsgdXNlZCBpbiBjYXNlIG9mIHdpbmRvdyB1cGRhdGUKLSAgIGRvb3JiZWxsLlRoZSBmaXJzdCBpbmRleCBzdGFuZHMgZm9yIHRoZSB2YWx1ZSBEYUVuYWJsZSBvZiB0aGF0Ci0gICBjb25uZWN0aW9uLiBUaGUgc2Vjb25kIGluZGV4IHN0YW5kcyBmb3IgcG9ydCBudW1iZXIuICovCiAjZGVmaW5lIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMAkJCQkgMHgyMDFlYwotLyogW1JXIDhdIERBIGNvdW50ZXIgdXBkYXRlIHZhbHVlOyB1c2VkIGluIGNhc2Ugb2Ygd2luZG93IHVwZGF0ZQotICAgZG9vcmJlbGwuVGhlIGZpcnN0IGluZGV4IHN0YW5kcyBmb3IgdGhlIHZhbHVlIERhRW5hYmxlIG9mIHRoYXQKLSAgIGNvbm5lY3Rpb24uIFRoZSBzZWNvbmQgaW5kZXggc3RhbmRzIGZvciBwb3J0IG51bWJlci4gKi8KICNkZWZpbmUgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExCQkJCSAweDIwMWYwCi0vKiBbUlcgMV0gREEgdGltZXIgY29tbWFuZDsgdXNlZCBpbiBjYXNlIG9mIHdpbmRvdyB1cGRhdGUgZG9vcmJlbGwuVGhlIGZpcnN0Ci0gICBpbmRleCBzdGFuZHMgZm9yIHRoZSB2YWx1ZSBEYUVuYWJsZSBvZiB0aGF0IGNvbm5lY3Rpb24uIFRoZSBzZWNvbmQgaW5kZXgKLSAgIHN0YW5kcyBmb3IgcG9ydCBudW1iZXIuICovCiAjZGVmaW5lIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwCQkJIDB4MjAxYzQKLS8qIFtSVyAxXSBEQSB0aW1lciBjb21tYW5kOyB1c2VkIGluIGNhc2Ugb2Ygd2luZG93IHVwZGF0ZSBkb29yYmVsbC5UaGUgZmlyc3QKLSAgIGluZGV4IHN0YW5kcyBmb3IgdGhlIHZhbHVlIERhRW5hYmxlIG9mIHRoYXQgY29ubmVjdGlvbi4gVGhlIHNlY29uZCBpbmRleAotICAgc3RhbmRzIGZvciBwb3J0IG51bWJlci4gKi8KICNkZWZpbmUgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEJCQkgMHgyMDFjOAotLyogW1JXIDFdIERBIHRpbWVyIGNvbW1hbmQ7IHVzZWQgaW4gY2FzZSBvZiB3aW5kb3cgdXBkYXRlIGRvb3JiZWxsLlRoZSBmaXJzdAotICAgaW5kZXggc3RhbmRzIGZvciB0aGUgdmFsdWUgRGFFbmFibGUgb2YgdGhhdCBjb25uZWN0aW9uLiBUaGUgc2Vjb25kIGluZGV4Ci0gICBzdGFuZHMgZm9yIHBvcnQgbnVtYmVyLiAqLwogI2RlZmluZSBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQxMAkJCSAweDIwMWNjCi0vKiBbUlcgMV0gREEgdGltZXIgY29tbWFuZDsgdXNlZCBpbiBjYXNlIG9mIHdpbmRvdyB1cGRhdGUgZG9vcmJlbGwuVGhlIGZpcnN0Ci0gICBpbmRleCBzdGFuZHMgZm9yIHRoZSB2YWx1ZSBEYUVuYWJsZSBvZiB0aGF0IGNvbm5lY3Rpb24uIFRoZSBzZWNvbmQgaW5kZXgKLSAgIHN0YW5kcyBmb3IgcG9ydCBudW1iZXIuICovCiAjZGVmaW5lIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDExCQkJIDB4MjAxZDAKIC8qIFtSVyAxXSBDTSAtIENGQyBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzIGRpc3JlZ2FyZGVkOwogICAgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZSB0cmVhdGVkIGFzIHVzdWFsOwpAQCAtMzY1OSw2ICs0NTUxLDggQEAKICNkZWZpbmUgWENNX1JFR19YQ01fSU5UX01BU0sJCQkJCSAweDIwMmI0CiAvKiBbUiAxNF0gSW50ZXJydXB0IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgWENNX1JFR19YQ01fSU5UX1NUUwkJCQkJIDB4MjAyYTgKKy8qIFtSIDMwXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBYQ01fUkVHX1hDTV9QUlRZX1NUUwkJCQkJIDB4MjAyYjgKIC8qIFtSVyA0XSBUaGUgc2l6ZSBvZiBBRyBjb250ZXh0IHJlZ2lvbiAwIGluIFJFRy1wYWlycy4gRGVzaWduYXRlcyB0aGUgTVMKICAgIFJFRy1wYWlyIG51bWJlciAoZS5nLiBpZiByZWdpb24gMCBpcyA2IFJFRy1wYWlyczsgdGhlIHZhbHVlIHNob3VsZCBiZSA1KS4KICAgIElzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdGhlIEFHIGNvbnRleHQgUkVHLXBhaXJzIHdyaXR0ZW4gYmFjazsKQEAgLTM3MTUsNiArNDYwOSw3IEBACiAgICBtZWNoYW5pc20uIFRoZSBmaWVsZHMgYXJlOiBbNTowXSAtIG1lc3NhZ2UgbGVuZ3RoOyAxMTo2XSAtIG1lc3NhZ2UKICAgIHBvaW50ZXI7IDE2OjEyXSAtIG5leHQgcG9pbnRlci4gKi8KICNkZWZpbmUgWENNX1JFR19YWF9ERVNDUl9UQUJMRQkJCQkJIDB4MjA0ODAKKyNkZWZpbmUgWENNX1JFR19YWF9ERVNDUl9UQUJMRV9TSVpFCQkJCSAzMgogLyogW1IgNl0gVXNlZCB0byByZWFkIHRoZSBYWCBwcm90ZWN0aW9uIEZyZWUgY291bnRlci4gKi8KICNkZWZpbmUgWENNX1JFR19YWF9GUkVFIAkJCQkJIDB4MjAyNDAKIC8qIFtSVyA2XSBJbml0aWFsIHZhbHVlIGZvciB0aGUgY3JlZGl0IGNvdW50ZXI7IHJlc3BvbnNpYmxlIGZvciBmdWxmaWxsaW5nCkBAIC0zNzI4LDcgKzQ2MjMsNyBAQAogI2RlZmluZSBYQ01fUkVHX1hYX01TR19OVU0JCQkJCSAweDIwNDI4CiAvKiBbUlcgOF0gVGhlIEV2ZW50IElEOyBzZW50IHRvIHRoZSBTVE9STSBpbiBjYXNlIG9mIFhYIG92ZXJmbG93LiAqLwogI2RlZmluZSBYQ01fUkVHX1hYX09WRkxfRVZOVF9JRCAJCQkJIDB4MjAwNTgKLS8qIFtSVyAxNV0gSW5kaXJlY3QgYWNjZXNzIHRvIHRoZSBYWCB0YWJsZSBvZiB0aGUgWFggcHJvdGVjdGlvbiBtZWNoYW5pc20uCisvKiBbUlcgMTZdIEluZGlyZWN0IGFjY2VzcyB0byB0aGUgWFggdGFibGUgb2YgdGhlIFhYIHByb3RlY3Rpb24gbWVjaGFuaXNtLgogICAgVGhlIGZpZWxkcyBhcmU6WzQ6MF0gLSB0YWlsIHBvaW50ZXI7IDk6NV0gLSBMaW5rIExpc3Qgc2l6ZTsgMTQ6MTBdIC0KICAgIGhlYWRlciBwb2ludGVyLiAqLwogI2RlZmluZSBYQ01fUkVHX1hYX1RBQkxFCQkJCQkgMHgyMDUwMApAQCAtMzc0NSw2ICs0NjQwLDkgQEAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNwkJCQkgMHgxNjYwN2MKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOAkJCQkgMHgxNjYwODAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOQkJCQkgMHgxNjYwODQKKyNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMAkJCQkgMHgxNjYwNjAKKyNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMQkJCQkgMHgxNjYwNjQKKyNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMgkJCQkgMHgxNjYwNjgKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yCQkJCSAweDE2NjA0MAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIwCQkJCSAweDE2NjA4OAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIxCQkJCSAweDE2NjA4YwpAQCAtMzc1Niw2ICs0NjU0LDE1IEBACiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjcJCQkJIDB4MTY2MGE0CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjgJCQkJIDB4MTY2MGE4CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjkJCQkJIDB4MTY2MGFjCisjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMwkJCQkgMHgxNjYwNDQKKyNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMAkJCQkgMHgxNjYwYjAKKyNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMQkJCQkgMHgxNjYwYjQKKyNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF80CQkJCSAweDE2NjA0OAorI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzUJCQkJIDB4MTY2MDRjCisjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfNgkJCQkgMHgxNjYwNTAKKyNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF83CQkJCSAweDE2NjA1NAorI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzgJCQkJIDB4MTY2MDU4CisjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfOQkJCQkgMHgxNjYwNWMKIC8qIFtSVyAxXSBGb3IgZWFjaCBhZ2dyZWdhdGVkIGludGVycnVwdCBpbmRleCB3aGV0aGVyIHRoZSBtb2RlIGlzIG5vcm1hbCAoMCkKICAgIG9yIGF1dG8tbWFzay1tb2RlICgxKSAqLwogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMCAJCQkJIDB4MTY2MWI4CkBAIC0zODMyLDYgKzQ3MzksOSBAQAogLyogW1JXIDMyXSBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFhTRE1fUkVHX1hTRE1fSU5UX01BU0tfMAkJCQkgMHgxNjYyOWMKICNkZWZpbmUgWFNETV9SRUdfWFNETV9JTlRfTUFTS18xCQkJCSAweDE2NjJhYworLyogW1IgMzJdIEludGVycnVwdCByZWdpc3RlciAjMCByZWFkICovCisjZGVmaW5lIFhTRE1fUkVHX1hTRE1fSU5UX1NUU18wIAkJCQkgMHgxNjYyOTAKKyNkZWZpbmUgWFNETV9SRUdfWFNETV9JTlRfU1RTXzEgCQkJCSAweDE2NjJhMAogLyogW1JXIDExXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFhTRE1fUkVHX1hTRE1fUFJUWV9NQVNLIAkJCQkgMHgxNjYyYmMKIC8qIFtSIDExXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLwpAQCAtMzg3Miw5ICs0NzgyLDggQEAKICNkZWZpbmUgWFNFTV9SRUdfRU5BQkxFX09VVAkJCQkJIDB4MjgwMGE4CiAvKiBbUlcgMzJdIFRoaXMgYWRkcmVzcyBzcGFjZSBjb250YWlucyBhbGwgcmVnaXN0ZXJzIGFuZCBtZW1vcmllcyB0aGF0IGFyZQogICAgcGxhY2VkIGluIFNFTV9GQVNUIGJsb2NrLiBUaGUgU0VNX0ZBU1QgcmVnaXN0ZXJzIGFyZSBkZXNjcmliZWQgaW4KLSAgIGFwcGVuZGl4IEIuIEluIG9yZGVyIHRvIGFjY2VzcyB0aGUgU0VNX0ZBU1QgcmVnaXN0ZXJzIHRoZSBiYXNlIGFkZHJlc3MKLSAgIFhTRU1fUkVHSVNURVJTX0ZBU1RfTUVNT1JZIChPZmZzZXQ6IDB4MmEwMDAwKSBzaG91bGQgYmUgYWRkZWQgdG8gZWFjaAotICAgU0VNX0ZBU1QgcmVnaXN0ZXIgb2Zmc2V0LiAqLworICAgYXBwZW5kaXggQi4gSW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBzZW1fZmFzdCByZWdpc3RlcnMgdGhlIGJhc2UgYWRkcmVzcworICAgfmZhc3RfbWVtb3J5LmZhc3RfbWVtb3J5IHNob3VsZCBiZSBhZGRlZCB0byBlYWNoc2VtX2Zhc3QgcmVnaXN0ZXIgb2Zmc2V0LiAqLwogI2RlZmluZSBYU0VNX1JFR19GQVNUX01FTU9SWQkJCQkJIDB4MmEwMDAwCiAvKiBbUlcgMV0gRGlzYWJsZXMgaW5wdXQgbWVzc2FnZXMgZnJvbSBGSUMwIE1heSBiZSB1cGRhdGVkIGR1cmluZyBydW5fdGltZQogICAgYnkgdGhlIG1pY3JvY29kZSAqLwpAQCAtMzk1Nyw2ICs0ODY2LDkgQEAKIC8qIFtSVyAzMl0gSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBYU0VNX1JFR19YU0VNX0lOVF9NQVNLXzAJCQkJIDB4MjgwMTEwCiAjZGVmaW5lIFhTRU1fUkVHX1hTRU1fSU5UX01BU0tfMQkJCQkgMHgyODAxMjAKKy8qIFtSIDMyXSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBYU0VNX1JFR19YU0VNX0lOVF9TVFNfMCAJCQkJIDB4MjgwMTA0CisjZGVmaW5lIFhTRU1fUkVHX1hTRU1fSU5UX1NUU18xIAkJCQkgMHgyODAxMTQKIC8qIFtSVyAzMl0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBYU0VNX1JFR19YU0VNX1BSVFlfTUFTS18wCQkJCSAweDI4MDEzMAogI2RlZmluZSBYU0VNX1JFR19YU0VNX1BSVFlfTUFTS18xCQkJCSAweDI4MDE0MApAQCAtMzk5MywxMCArNDkwNSwxNCBAQAogI2RlZmluZSBCSUdNQUNfUkVHSVNURVJfVFhfU09VUkNFX0FERFIJCQkJICgweDA4PDwzKQogI2RlZmluZSBCSUdNQUNfUkVHSVNURVJfVFhfU1RBVF9HVEJZVAkJCQkgKDB4MjA8PDMpCiAjZGVmaW5lIEJJR01BQ19SRUdJU1RFUl9UWF9TVEFUX0dUUEtUCQkJCSAoMHgwQzw8MykKKyNkZWZpbmUgRU1BQ19MRURfMTAwME1CX09WRVJSSURFCQkJCSAoMUw8PDEpCisjZGVmaW5lIEVNQUNfTEVEXzEwME1CX09WRVJSSURFIAkJCQkgKDFMPDwyKQorI2RlZmluZSBFTUFDX0xFRF8xME1CX09WRVJSSURFCQkJCQkgKDFMPDwzKQorI2RlZmluZSBFTUFDX0xFRF8yNTAwTUJfT1ZFUlJJREUJCQkJICgxTDw8MTIpCisjZGVmaW5lIEVNQUNfTEVEX09WRVJSSURFCQkJCQkgKDFMPDwwKQorI2RlZmluZSBFTUFDX0xFRF9UUkFGRklDCQkJCQkgKDFMPDw2KQogI2RlZmluZSBFTUFDX01ESU9fQ09NTV9DT01NQU5EX0FERFJFU1MJCQkJICgwTDw8MjYpCi0jZGVmaW5lIEVNQUNfTURJT19DT01NX0NPTU1BTkRfUkVBRF8yMgkJCQkgKDJMPDwyNikKICNkZWZpbmUgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9SRUFEXzQ1CQkJCSAoM0w8PDI2KQotI2RlZmluZSBFTUFDX01ESU9fQ09NTV9DT01NQU5EX1dSSVRFXzIyIAkJCSAoMUw8PDI2KQogI2RlZmluZSBFTUFDX01ESU9fQ09NTV9DT01NQU5EX1dSSVRFXzQ1IAkJCSAoMUw8PDI2KQogI2RlZmluZSBFTUFDX01ESU9fQ09NTV9EQVRBCQkJCQkgKDB4ZmZmZkw8PDApCiAjZGVmaW5lIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kJCQkJICgxTDw8MjkpCkBAIC00MDA1LDE0ICs0OTIxLDEyIEBACiAjZGVmaW5lIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVAkJCQkgKDB4M2ZMPDwxNikKICNkZWZpbmUgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUCQkJIDE2CiAjZGVmaW5lIEVNQUNfTU9ERV8yNUdfTU9ERQkJCQkJICgxTDw8NSkKLSNkZWZpbmUgRU1BQ19NT0RFX0FDUElfUkNWRAkJCQkJICgxTDw8MjApCiAjZGVmaW5lIEVNQUNfTU9ERV9IQUxGX0RVUExFWAkJCQkJICgxTDw8MSkKLSNkZWZpbmUgRU1BQ19NT0RFX01QS1QJCQkJCQkgKDFMPDwxOCkKLSNkZWZpbmUgRU1BQ19NT0RFX01QS1RfUkNWRAkJCQkJICgxTDw8MTkpCiAjZGVmaW5lIEVNQUNfTU9ERV9QT1JUX0dNSUkJCQkJCSAoMkw8PDIpCiAjZGVmaW5lIEVNQUNfTU9ERV9QT1JUX01JSQkJCQkJICgxTDw8MikKICNkZWZpbmUgRU1BQ19NT0RFX1BPUlRfTUlJXzEwTQkJCQkJICgzTDw8MikKICNkZWZpbmUgRU1BQ19NT0RFX1JFU0VUIAkJCQkJICgxTDw8MCkKKyNkZWZpbmUgRU1BQ19SRUdfRU1BQ19MRUQJCQkJCSAweGMKICNkZWZpbmUgRU1BQ19SRUdfRU1BQ19NQUNfTUFUQ0ggCQkJCSAweDEwCiAjZGVmaW5lIEVNQUNfUkVHX0VNQUNfTURJT19DT01NIAkJCQkgMHhhYwogI2RlZmluZSBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSAJCQkJIDB4YjQKQEAgLTQwMzAsMTQgKzQ5NDQsMTYgQEAKICNkZWZpbmUgRU1BQ19SWF9NT0RFX1BST01JU0NVT1VTCQkJCSAoMUw8PDgpCiAjZGVmaW5lIEVNQUNfUlhfTVRVX1NJWkVfSlVNQk9fRU5BCQkJCSAoMUw8PDMxKQogI2RlZmluZSBFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOCQkJCSAoMUw8PDMpCi0jZGVmaW5lIEVNQUNfVFhfTU9ERV9SRVNFVAkJCQkJICgxTDw8MCkKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT18wCQkJCQkgMAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPXzEJCQkJCSAxCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fMgkJCQkJIDIKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT18zCQkJCQkgMwogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0NMUl9QT1MJCQkJIDE2CiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVQJCQkJICgweGZmTDw8MjQpCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVRfUE9TCQkJCSAyNAorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gJCQkJIDEKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlBVVF9ISV9aCQkJCSAyCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fTE9XIAkJCQkgMAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIIAkJCSAxCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVwkJCQkgMAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQJCQkJIDQKQEAgLTQxMjcsNyArNTA0Myw3IEBACiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1hTRU1JX1BBUklUWV9FUlJPUiAJICAgICAgKDE8PDEwKQogI2RlZmluZSBSRVNFUlZFRF9HRU5FUkFMX0FUVEVOVElPTl9CSVRfMAkwCiAKLSNkZWZpbmUgRVZFUkVTVF9HRU5fQVRUTl9JTl9VU0VfTUFTSwkJMHgzZTAKKyNkZWZpbmUgRVZFUkVTVF9HRU5fQVRUTl9JTl9VU0VfTUFTSwkJMHgzZmZlMAogI2RlZmluZSBFVkVSRVNUX0xBVENIRURfQVRUTl9JTl9VU0VfTUFTSwkweGZmZTAwMDAwCiAKICNkZWZpbmUgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzYJNgpAQCAtNDE1Niw2ICs1MDcyLDE3IEBACiAvKiBtY3AgZXJyb3IgYXR0ZW50aW9uIGJpdCAqLwogI2RlZmluZSBNQ1BfRkFUQUxfQVNTRVJUX0FUVEVOVElPTl9CSVQJICAgICAgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzExCiAKKy8qRTFIIE5JRyBzdGF0dXMgc3luYyBhdHRlbnRpb24gbWFwcGVkIHRvIGdyb3VwIDQtNyovCisjZGVmaW5lIExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfMAkgICAgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzEyCisjZGVmaW5lIExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfMQkgICAgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzEzCisjZGVmaW5lIExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfMgkgICAgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzE0CisjZGVmaW5lIExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfMwkgICAgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzE1CisjZGVmaW5lIExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfNAkgICAgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzE2CisjZGVmaW5lIExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfNQkgICAgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzE3CisjZGVmaW5lIExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfNgkgICAgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzE4CisjZGVmaW5lIExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfNwkgICAgUkVTRVJWRURfR0VORVJBTF9BVFRFTlRJT05fQklUXzE5CisKKwogI2RlZmluZSBMQVRDSEVEX0FUVE5fUkJDUgkJCTIzCiAjZGVmaW5lIExBVENIRURfQVRUTl9SQkNUCQkJMjQKICNkZWZpbmUgTEFUQ0hFRF9BVFROX1JCQ04JCQkyNQpAQCAtNDIyMSwyMiArNTE0OCw0MSBAQAogI2RlZmluZSBQQ0lDRkdfT0ZGU0VUCQkJCQkweDIwMDAKICNkZWZpbmUgUENJQ0ZHX1ZFTkRPUl9JRF9PRkZTRVQgCQkJMHgwMAogI2RlZmluZSBQQ0lDRkdfREVWSUNFX0lEX09GRlNFVCAJCQkweDAyCi0jZGVmaW5lIFBDSUNGR19TVUJTWVNURU1fVkVORE9SX0lEX09GRlNFVAkJMHgyYwotI2RlZmluZSBQQ0lDRkdfU1VCU1lTVEVNX0lEX09GRlNFVAkJCTB4MmUKLSNkZWZpbmUgUENJQ0ZHX0lOVF9MSU5FIAkJCQkweDNjCi0jZGVmaW5lIFBDSUNGR19JTlRfUElOCQkJCQkweDNkCisjZGVmaW5lIFBDSUNGR19DT01NQU5EX09GRlNFVAkJCQkweDA0CisjZGVmaW5lIFBDSUNGR19TVEFUVVNfT0ZGU0VUCQkJCTB4MDYKKyNkZWZpbmUgUENJQ0ZHX1JFVkVTSU9OX0lECQkJCSAgICAweDA4CiAjZGVmaW5lIFBDSUNGR19DQUNIRV9MSU5FX1NJWkUJCQkJMHgwYwogI2RlZmluZSBQQ0lDRkdfTEFURU5DWV9USU1FUgkJCQkweDBkCi0jZGVmaW5lIFBDSUNGR19SRVZFU0lPTl9JRAkJCQkweDA4Ci0jZGVmaW5lIFBDSUNGR19CQVJfMV9MT1cJCQkJMHgxMAotI2RlZmluZSBQQ0lDRkdfQkFSXzFfSElHSAkJCQkweDE0Ci0jZGVmaW5lIFBDSUNGR19CQVJfMl9MT1cJCQkJMHgxOAotI2RlZmluZSBQQ0lDRkdfQkFSXzJfSElHSAkJCQkweDFjCi0jZGVmaW5lIFBDSUNGR19HUkNfQUREUkVTUwkJCQkweDc4Ci0jZGVmaW5lIFBDSUNGR19HUkNfREFUQSAJCQkJMHg4MAorI2RlZmluZSBQQ0lDRkdfQkFSXzFfTE9XCQkJCSAgICAweDEwCisjZGVmaW5lIFBDSUNGR19CQVJfMV9ISUdICQkJCSAgICAweDE0CisjZGVmaW5lIFBDSUNGR19CQVJfMl9MT1cJCQkJICAgIDB4MTgKKyNkZWZpbmUgUENJQ0ZHX0JBUl8yX0hJR0gJCQkJICAgIDB4MWMKKyNkZWZpbmUgUENJQ0ZHX1NVQlNZU1RFTV9WRU5ET1JfSURfT0ZGU0VUCTB4MmMKKyNkZWZpbmUgUENJQ0ZHX1NVQlNZU1RFTV9JRF9PRkZTRVQJCQkweDJlCisjZGVmaW5lIFBDSUNGR19JTlRfTElORSAJCQkJICAgIDB4M2MKKyNkZWZpbmUgUENJQ0ZHX0lOVF9QSU4JCQkJCSAgICAweDNkCisjZGVmaW5lIFBDSUNGR19QTV9DU1JfT0ZGU0VUCQkJMHg0YworI2RlZmluZSBQQ0lDRkdfR1JDX0FERFJFU1MJCQkJICAgIDB4NzgKKyNkZWZpbmUgUENJQ0ZHX0dSQ19EQVRBIAkJCQkgICAgMHg4MAogI2RlZmluZSBQQ0lDRkdfREVWSUNFX0NPTlRST0wJCQkJMHhiNAogI2RlZmluZSBQQ0lDRkdfTElOS19DT05UUk9MCQkJCTB4YmMKIAorI2RlZmluZSBQQ0lDRkdfQ09NTUFORF9JT19TUEFDRSAJCSAgICAoMTw8MCkKKyNkZWZpbmUgUENJQ0ZHX0NPTU1BTkRfTUVNX1NQQUNFCQkgICAgKDE8PDEpCisjZGVmaW5lIFBDSUNGR19DT01NQU5EX0JVU19NQVNURVIJCSAgICAoMTw8MikKKyNkZWZpbmUgUENJQ0ZHX0NPTU1BTkRfU1BFQ0lBTF9DWUNMRVMJCSAgICAoMTw8MykKKyNkZWZpbmUgUENJQ0ZHX0NPTU1BTkRfTVdJX0NZQ0xFUwkJICAgICgxPDw0KQorI2RlZmluZSBQQ0lDRkdfQ09NTUFORF9WR0FfU05PT1AJCSAgICAoMTw8NSkKKyNkZWZpbmUgUENJQ0ZHX0NPTU1BTkRfUEVSUl9FTkEgCQkgICAgKDE8PDYpCisjZGVmaW5lIFBDSUNGR19DT01NQU5EX1NURVBQSU5HIAkJICAgICgxPDw3KQorI2RlZmluZSBQQ0lDRkdfQ09NTUFORF9TRVJSX0VOQSAJCSAgICAoMTw8OCkKKyNkZWZpbmUgUENJQ0ZHX0NPTU1BTkRfRkFTVF9CMkIgCQkgICAgKDE8PDkpCisjZGVmaW5lIFBDSUNGR19DT01NQU5EX0lOVF9ESVNBQkxFCQkgICAgKDE8PDEwKQorI2RlZmluZSBQQ0lDRkdfQ09NTUFORF9SRVNFUlZFRCAJCSAgICAoMHgxZjw8MTEpCisKKyNkZWZpbmUgUENJQ0ZHX1BNX0NTUl9TVEFURQkJCSAgICAoMHgzPDwwKQorI2RlZmluZSBQQ0lDRkdfUE1fQ1NSX1BNRV9TVEFUVVMJCSAgICAoMTw8MTUpCisKICNkZWZpbmUgQkFSX1VTVFJPUk1fSU5UTUVNCQkJCTB4NDAwMDAwCiAjZGVmaW5lIEJBUl9DU1RST1JNX0lOVE1FTQkJCQkweDQxMDAwMAogI2RlZmluZSBCQVJfWFNUUk9STV9JTlRNRU0JCQkJMHg0MjAwMDAKQEAgLTQzMzYsNyArNTI4Miw3IEBACiAjZGVmaW5lIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX01BSU5fUlNUCTB4ODAwMAogCiAjZGVmaW5lIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjEJCQkweDEwCi0jZGVmaW5lIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMgkJCTB4MDEKKyNkZWZpbmUgTURJT19DTDczX0lFRUVCMV9BTl9BRFYyCQkJCTB4MDEKICNkZWZpbmUgTURJT19DTDczX0lFRUVCMV9BTl9BRFYyX0FEVlJfMTAwME0JCTB4MDAwMAogI2RlZmluZSBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMDAwTV9LWAkJMHgwMDIwCiAjZGVmaW5lIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwR19LWDQJCTB4MDA0MApAQCAtNDM2NSw3ICs1MzExLDcgQEAKICNkZWZpbmUgTURJT19SRUdfQkFOS19SWF9BTEwJCQkJMHg4MGYwCiAjZGVmaW5lIE1ESU9fUlhfQUxMX1JYX0VRX0JPT1NUIAkJCTB4MWMKICNkZWZpbmUgTURJT19SWF9BTExfUlhfRVFfQk9PU1RfRVFVQUxJWkVSX0NUUkxfTUFTSwkweDcKLSNkZWZpbmUgTURJT19SWF9BTExfUlhfRVFfQk9PU1RfT0ZGU0VUX0NUUkwJCTB4MTAKKyNkZWZpbmUgTURJT19SWF9BTExfUlhfRVFfQk9PU1RfT0ZGU0VUX0NUUkwJMHgxMAogCiAjZGVmaW5lIE1ESU9fUkVHX0JBTktfVFgwCQkJCTB4ODA2MAogI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVIJCQkJMHgxNwpAQCAtNDM5MiwyMTMgKzUzMzgsMjY2IEBACiAjZGVmaW5lIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUAkJCTB4MTAKICNkZWZpbmUgTURJT19YR1hTX0JMT0NLMl9SWF9MTl9TV0FQX0VOQUJMRQkJMHg4MDAwCiAjZGVmaW5lIE1ESU9fWEdYU19CTE9DSzJfUlhfTE5fU1dBUF9GT1JDRV9FTkFCTEUJMHg0MDAwCi0jZGVmaW5lIE1ESU9fWEdYU19CTE9DSzJfVFhfTE5fU1dBUAkJCTB4MTEKKyNkZWZpbmUgTURJT19YR1hTX0JMT0NLMl9UWF9MTl9TV0FQCQkweDExCiAjZGVmaW5lIE1ESU9fWEdYU19CTE9DSzJfVFhfTE5fU1dBUF9FTkFCTEUJCTB4ODAwMAotI2RlZmluZSBNRElPX1hHWFNfQkxPQ0syX1VOSUNPUkVfTU9ERV8xMEcJCTB4MTQKKyNkZWZpbmUgTURJT19YR1hTX0JMT0NLMl9VTklDT1JFX01PREVfMTBHCTB4MTQKICNkZWZpbmUgTURJT19YR1hTX0JMT0NLMl9VTklDT1JFX01PREVfMTBHX0NYNF9YR1hTCTB4MDAwMQogI2RlZmluZSBNRElPX1hHWFNfQkxPQ0syX1VOSUNPUkVfTU9ERV8xMEdfSElHSUdfWEdYUwkweDAwMTAKLSNkZWZpbmUgTURJT19YR1hTX0JMT0NLMl9URVNUX01PREVfTEFORSAJCTB4MTUKKyNkZWZpbmUgTURJT19YR1hTX0JMT0NLMl9URVNUX01PREVfTEFORSAJMHgxNQogCiAjZGVmaW5lIE1ESU9fUkVHX0JBTktfR1BfU1RBVFVTIAkJCTB4ODEyMAotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMQkJCSAgICAweDFCCi0jZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0NMNzNfQVVUT05FR19DT01QTEVURSAweDAwMDEKLSNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQ0wzN19BVVRPTkVHX0NPTVBMRVRFIDB4MDAwMgotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9MSU5LX1NUQVRVUwkgICAgMHgwMDA0Ci0jZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0RVUExFWF9TVEFUVVMJICAgIDB4MDAwOAotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9DTDczX01SX0xQX05QX0FOX0FCTEUgMHgwMDEwCi0jZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0NMNzNfTFBfTlBfQkFNX0FCTEUgICAweDAwMjAKLQotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9QQVVTRV9SU09MVVRJT05fVFhTSURFIDB4MDA0MAotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9QQVVTRV9SU09MVVRJT05fUlhTSURFIDB4MDA4MAotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfTUFTSyAgICAgMHgzZjAwCi0jZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xME0JICAgIDB4MDAwMAotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTAwTSAgICAgMHgwMTAwCi0jZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xRwkgICAgMHgwMjAwCi0jZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8yXzVHICAgICAweDAzMDAKLSNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzVHCSAgICAweDA0MDAKLSNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzZHCSAgICAweDA1MDAKLSNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwR19ISUcgIDB4MDYwMAotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTBHX0NYNCAgMHgwNzAwCi0jZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMkdfSElHICAweDA4MDAKLSNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEyXzVHICAgIDB4MDkwMAotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTNHCSAgICAweDBBMDAKLSNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzE1RwkgICAgMHgwQjAwCi0jZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xNkcJICAgIDB4MEMwMAotI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMUdfS1ggICAgMHgwRDAwCi0jZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMEdfS1g0ICAweDBFMDAKKyNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzEJCQkJMHgxQgorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9DTDczX0FVVE9ORUdfQ09NUExFVEUJMHgwMDAxCisjZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0NMMzdfQVVUT05FR19DT01QTEVURQkweDAwMDIKKyNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfTElOS19TVEFUVVMJCTB4MDAwNAorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9EVVBMRVhfU1RBVFVTCQkweDAwMDgKKyNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQ0w3M19NUl9MUF9OUF9BTl9BQkxFCTB4MDAxMAorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9DTDczX0xQX05QX0JBTV9BQkxFCTB4MDAyMAorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9QQVVTRV9SU09MVVRJT05fVFhTSURFCTB4MDA0MAorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9QQVVTRV9SU09MVVRJT05fUlhTSURFCTB4MDA4MAorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfTUFTSyAJMHgzZjAwCisjZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xME0JCTB4MDAwMAorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTAwTSAJMHgwMTAwCisjZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xRwkJMHgwMjAwCisjZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8yXzVHIAkweDAzMDAKKyNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzVHCQkweDA0MDAKKyNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzZHCQkweDA1MDAKKyNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEwR19ISUcJMHgwNjAwCisjZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMEdfQ1g0CTB4MDcwMAorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTJHX0hJRwkweDA4MDAKKyNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzEyXzVHCTB4MDkwMAorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMTNHCQkweDBBMDAKKyNkZWZpbmUgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfQUNUVUFMX1NQRUVEXzE1RwkJMHgwQjAwCisjZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xNkcJCTB4MEMwMAorI2RlZmluZSBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9BQ1RVQUxfU1BFRURfMUdfS1gJMHgwRDAwCisjZGVmaW5lIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxX0FDVFVBTF9TUEVFRF8xMEdfS1g0CTB4MEUwMAogCiAKICNkZWZpbmUgTURJT19SRUdfQkFOS18xMEdfUEFSQUxMRUxfREVURUNUCQkweDgxMzAKLSNkZWZpbmUgTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0wJICAgIDB4MTEKLSNkZWZpbmUgTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0xfUEFSREVUMTBHX0VOIDB4MQotI2RlZmluZSBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOSwkgICAgMHgxMwotI2RlZmluZSBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOS19DTlQJICAgICgweGI3MTw8MSkKKyNkZWZpbmUgTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0wJCTB4MTEKKyNkZWZpbmUgTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0xfUEFSREVUMTBHX0VOCTB4MQorI2RlZmluZSBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOSwkJMHgxMworI2RlZmluZSBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOS19DTlQJCSgweGI3MTw8MSkKIAogI2RlZmluZSBNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMCQkJMHg4MzAwCi0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMQkJMHgxMAotI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfRklCRVJfTU9ERSAweDAwMDEKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX1RCSV9JRgkweDAwMDIKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX1NJR05BTF9ERVRFQ1RfRU4JICAweDAwMDQKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0lOVkVSVF9TSUdOQUxfREVURUNUIDB4MDAwOAotI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfQVVUT0RFVAkweDAwMTAKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX01TVFJfTU9ERQkweDAwMjAKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wyCQkweDExCi0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMl9QUkxfRFRfRU4JMHgwMDAxCi0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMl9BTl9GU1RfVE1SIDB4MDA0MAotI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfU1RBVFVTMQkJMHgxNAotI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfU1RBVFVTMV9EVVBMRVgJMHgwMDA0Ci0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9TVEFUVVMxX1NQRUVEX01BU0sJMHgwMDE4Ci0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9TVEFUVVMxX1NQRUVEX1NISUZUIDMKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX1NUQVRVUzFfU1BFRURfMl81RwkweDAwMTgKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX1NUQVRVUzFfU1BFRURfMUcJMHgwMDEwCi0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9TVEFUVVMxX1NQRUVEXzEwME0JMHgwMDA4Ci0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9TVEFUVVMxX1NQRUVEXzEwTQkweDAwMDAKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMQkJCTB4MTgKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9SRUZDTEtfU0VMX01BU0sJMHhFMDAwCi0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfUkVGQ0xLX1NFTF8yNU0JMHgwMDAwCi0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfUkVGQ0xLX1NFTF8xMDBNCTB4MjAwMAotI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX1JFRkNMS19TRUxfMTI1TQkweDQwMDAKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9SRUZDTEtfU0VMXzE1Nl8yNU0JMHg2MDAwCi0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfUkVGQ0xLX1NFTF8xODdfNU0JMHg4MDAwCi0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfU0VMCTB4MDAxMAotI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEX01BU0sJMHgwMDBmCi0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfMl81RwkweDAwMDAKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF81RwkweDAwMDEKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF82RwkweDAwMDIKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF8xMEdfSElHCTB4MDAwMwotI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzEwR19DWDQJMHgwMDA0Ci0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfMTJHCTB4MDAwNQotI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzEyXzVHCTB4MDAwNgotI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzEzRwkweDAwMDcKLSNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF8xNUcJMHgwMDA4Ci0jZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfMTZHCTB4MDAwOQorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDEJCQkweDEwCisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9GSUJFUl9NT0RFIAkJMHgwMDAxCisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9UQklfSUYJCQkweDAwMDIKKyNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX1NJR05BTF9ERVRFQ1RfRU4JCTB4MDAwNAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfSU5WRVJUX1NJR05BTF9ERVRFQ1QJMHgwMDA4CisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9BVVRPREVUCQkJMHgwMDEwCisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9NU1RSX01PREUJCQkweDAwMjAKKyNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wyCQkJMHgxMQorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDJfUFJMX0RUX0VOCQkJMHgwMDAxCisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMl9BTl9GU1RfVE1SIAkJMHgwMDQwCisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9TVEFUVVMxCQkJMHgxNAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfU1RBVFVTMV9EVVBMRVgJCQkweDAwMDQKKyNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX1NUQVRVUzFfU1BFRURfTUFTSwkJCTB4MDAxOAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfU1RBVFVTMV9TUEVFRF9TSElGVCAJCTMKKyNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX1NUQVRVUzFfU1BFRURfMl81RwkJCTB4MDAxOAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfU1RBVFVTMV9TUEVFRF8xRwkJCTB4MDAxMAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfU1RBVFVTMV9TUEVFRF8xMDBNCQkJMHgwMDA4CisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9TVEFUVVMxX1NQRUVEXzEwTQkJCTB4MDAwMAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxCQkJCTB4MTgKKyNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9SRUZDTEtfU0VMX01BU0sJCQkweEUwMDAKKyNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9SRUZDTEtfU0VMXzI1TQkJCTB4MDAwMAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX1JFRkNMS19TRUxfMTAwTQkJCTB4MjAwMAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX1JFRkNMS19TRUxfMTI1TQkJCTB4NDAwMAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX1JFRkNMS19TRUxfMTU2XzI1TQkJCTB4NjAwMAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX1JFRkNMS19TRUxfMTg3XzVNCQkJMHg4MDAwCisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfU0VMCQkJMHgwMDEwCisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfTUFTSwkJCTB4MDAwZgorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzJfNUcJCQkweDAwMDAKKyNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF81RwkJCTB4MDAwMQorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzZHCQkJMHgwMDAyCisjZGVmaW5lIE1ESU9fU0VSREVTX0RJR0lUQUxfTUlTQzFfRk9SQ0VfU1BFRURfMTBHX0hJRwkJCTB4MDAwMworI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzEwR19DWDQJCQkweDAwMDQKKyNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF8xMkcJCQkweDAwMDUKKyNkZWZpbmUgTURJT19TRVJERVNfRElHSVRBTF9NSVNDMV9GT1JDRV9TUEVFRF8xMl81RwkJCTB4MDAwNgorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzEzRwkJCTB4MDAwNworI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzE1RwkJCTB4MDAwOAorI2RlZmluZSBNRElPX1NFUkRFU19ESUdJVEFMX01JU0MxX0ZPUkNFX1NQRUVEXzE2RwkJCTB4MDAwOQogCiAjZGVmaW5lIE1ESU9fUkVHX0JBTktfT1ZFUl8xRwkJCQkweDgzMjAKLSNkZWZpbmUgTURJT19PVkVSXzFHX0RJR0NUTF8zXzQgCQkJMHgxNAotI2RlZmluZSBNRElPX09WRVJfMUdfRElHQ1RMXzNfNF9NUF9JRF9NQVNLCQkweGZmZTAKLSNkZWZpbmUgTURJT19PVkVSXzFHX0RJR0NUTF8zXzRfTVBfSURfU0hJRlQJCTUKLSNkZWZpbmUgTURJT19PVkVSXzFHX1VQMQkJCQkweDE5Ci0jZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDFfMl81RwkJCQkweDAwMDEKLSNkZWZpbmUgTURJT19PVkVSXzFHX1VQMV81RwkJCQkweDAwMDIKLSNkZWZpbmUgTURJT19PVkVSXzFHX1VQMV82RwkJCQkweDAwMDQKLSNkZWZpbmUgTURJT19PVkVSXzFHX1VQMV8xMEcJCQkJMHgwMDEwCi0jZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDFfMTBHSAkJCQkweDAwMDgKLSNkZWZpbmUgTURJT19PVkVSXzFHX1VQMV8xMkcJCQkJMHgwMDIwCi0jZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDFfMTJfNUcJCQkJMHgwMDQwCi0jZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDFfMTNHCQkJCTB4MDA4MAotI2RlZmluZSBNRElPX09WRVJfMUdfVVAxXzE1RwkJCQkweDAxMDAKLSNkZWZpbmUgTURJT19PVkVSXzFHX1VQMV8xNkcJCQkJMHgwMjAwCi0jZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDIJCQkJMHgxQQotI2RlZmluZSBNRElPX09WRVJfMUdfVVAyX0lQUkVEUklWRVJfTUFTSwkJMHgwMDA3Ci0jZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDJfSURSSVZFUl9NQVNLCQkJMHgwMDM4Ci0jZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDJfUFJFRU1QSEFTSVNfTUFTSwkJMHgwM0MwCi0jZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDMJCQkJMHgxQgotI2RlZmluZSBNRElPX09WRVJfMUdfVVAzX0hJR0lHMiAJCQkweDAwMDEKLSNkZWZpbmUgTURJT19PVkVSXzFHX0xQX1VQMQkJCQkweDFDCi0jZGVmaW5lIE1ESU9fT1ZFUl8xR19MUF9VUDIJCQkJMHgxRAotI2RlZmluZSBNRElPX09WRVJfMUdfTFBfVVAyX01SX0FEVl9PVkVSXzFHX01BU0sgCTB4MDNmZgotI2RlZmluZSBNRElPX09WRVJfMUdfTFBfVVAyX1BSRUVNUEhBU0lTX01BU0sJCTB4MDc4MAotI2RlZmluZSBNRElPX09WRVJfMUdfTFBfVVAyX1BSRUVNUEhBU0lTX1NISUZUCQk3Ci0jZGVmaW5lIE1ESU9fT1ZFUl8xR19MUF9VUDMJCQkJMHgxRQorI2RlZmluZSBNRElPX09WRVJfMUdfRElHQ1RMXzNfNCAJCQkJMHgxNAorI2RlZmluZSBNRElPX09WRVJfMUdfRElHQ1RMXzNfNF9NUF9JRF9NQVNLCQkJCTB4ZmZlMAorI2RlZmluZSBNRElPX09WRVJfMUdfRElHQ1RMXzNfNF9NUF9JRF9TSElGVAkJCQk1CisjZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDEJCQkJCTB4MTkKKyNkZWZpbmUgTURJT19PVkVSXzFHX1VQMV8yXzVHCQkJCQkJMHgwMDAxCisjZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDFfNUcJCQkJCQkweDAwMDIKKyNkZWZpbmUgTURJT19PVkVSXzFHX1VQMV82RwkJCQkJCTB4MDAwNAorI2RlZmluZSBNRElPX09WRVJfMUdfVVAxXzEwRwkJCQkJCTB4MDAxMAorI2RlZmluZSBNRElPX09WRVJfMUdfVVAxXzEwR0gJCQkJCQkweDAwMDgKKyNkZWZpbmUgTURJT19PVkVSXzFHX1VQMV8xMkcJCQkJCQkweDAwMjAKKyNkZWZpbmUgTURJT19PVkVSXzFHX1VQMV8xMl81RwkJCQkJCTB4MDA0MAorI2RlZmluZSBNRElPX09WRVJfMUdfVVAxXzEzRwkJCQkJCTB4MDA4MAorI2RlZmluZSBNRElPX09WRVJfMUdfVVAxXzE1RwkJCQkJCTB4MDEwMAorI2RlZmluZSBNRElPX09WRVJfMUdfVVAxXzE2RwkJCQkJCTB4MDIwMAorI2RlZmluZSBNRElPX09WRVJfMUdfVVAyCQkJCQkweDFBCisjZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDJfSVBSRURSSVZFUl9NQVNLCQkJCTB4MDAwNworI2RlZmluZSBNRElPX09WRVJfMUdfVVAyX0lEUklWRVJfTUFTSwkJCQkJMHgwMDM4CisjZGVmaW5lIE1ESU9fT1ZFUl8xR19VUDJfUFJFRU1QSEFTSVNfTUFTSwkJCQkweDAzQzAKKyNkZWZpbmUgTURJT19PVkVSXzFHX1VQMwkJCQkJMHgxQgorI2RlZmluZSBNRElPX09WRVJfMUdfVVAzX0hJR0lHMiAJCQkJCTB4MDAwMQorI2RlZmluZSBNRElPX09WRVJfMUdfTFBfVVAxCQkJCQkweDFDCisjZGVmaW5lIE1ESU9fT1ZFUl8xR19MUF9VUDIJCQkJCTB4MUQKKyNkZWZpbmUgTURJT19PVkVSXzFHX0xQX1VQMl9NUl9BRFZfT1ZFUl8xR19NQVNLIAkJCTB4MDNmZgorI2RlZmluZSBNRElPX09WRVJfMUdfTFBfVVAyX1BSRUVNUEhBU0lTX01BU0sJCQkJMHgwNzgwCisjZGVmaW5lIE1ESU9fT1ZFUl8xR19MUF9VUDJfUFJFRU1QSEFTSVNfU0hJRlQJCQkJNworI2RlZmluZSBNRElPX09WRVJfMUdfTFBfVVAzCQkJCQkJMHgxRQogCiAjZGVmaW5lIE1ESU9fUkVHX0JBTktfQkFNX05FWFRfUEFHRQkJCTB4ODM1MAotI2RlZmluZSBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMCQkweDEwCi0jZGVmaW5lIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfQkFNX01PREUJMHgwMDAxCi0jZGVmaW5lIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfVEVUT05fQU4JMHgwMDAyCisjZGVmaW5lIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkwJCQkweDEwCisjZGVmaW5lIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfQkFNX01PREUJCQkweDAwMDEKKyNkZWZpbmUgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTF9URVRPTl9BTgkJCTB4MDAwMgogCi0jZGVmaW5lIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAJCQkweDgzNzAKLSNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMSAJCTB4MTIKLSNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fRU4JCQkweDgwMDAKLSNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fU1RBVElPTl9NTkdSX0VOCTB4NDAwMAotI2RlZmluZSBNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9OUF9BRlRFUl9CUF9FTgkweDIwMDAKLSNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMyAJCTB4MTQKLSNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMM19VU0VfQ0w3M19IQ0RfTVIgMHgwMDAxCisjZGVmaW5lIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAJCTB4ODM3MAorI2RlZmluZSBNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxIAkJCTB4MTIKKyNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fRU4JCQkJMHg4MDAwCisjZGVmaW5lIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX1NUQVRJT05fTU5HUl9FTgkJMHg0MDAwCisjZGVmaW5lIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX05QX0FGVEVSX0JQX0VOCQkweDIwMDAKKyNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMyAJCQkweDE0CisjZGVmaW5lIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDNfVVNFX0NMNzNfSENEX01SIAkJMHgwMDAxCiAKLSNkZWZpbmUgTURJT19SRUdfQkFOS19BRVJfQkxPQ0sgCQkJMHhGRkQwCi0jZGVmaW5lIE1ESU9fQUVSX0JMT0NLX0FFUl9SRUcJCQkJMHgxRQorI2RlZmluZSBNRElPX1JFR19CQU5LX0FFUl9CTE9DSyAJCTB4RkZEMAorI2RlZmluZSBNRElPX0FFUl9CTE9DS19BRVJfUkVHCQkJCQkweDFFCiAKLSNkZWZpbmUgTURJT19SRUdfQkFOS19DT01CT19JRUVFMAkJCTB4RkZFMAotI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MCQkJMHgxMAotI2RlZmluZSBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfTUFOX1NHTUlJX1NQX01BU0sJMHgyMDQwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9NQU5fU0dNSUlfU1BfMTAJMHgwMDAwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9NQU5fU0dNSUlfU1BfMTAwCTB4MjAwMAotI2RlZmluZSBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfTUFOX1NHTUlJX1NQXzEwMDAJMHgwMDQwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9GVUxMX0RVUExFWCAJMHgwMTAwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNUQVJUX0FOCQkweDAyMDAKLSNkZWZpbmUgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOCQkweDEwMDAKLSNkZWZpbmUgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0xPT1BCQUNLCQkweDQwMDAKLSNkZWZpbmUgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU0VUCQkweDgwMDAKLSNkZWZpbmUgTURJT19DT01CT19JRUVFMF9NSUlfU1RBVFVTCQkJMHgxMQotI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX01JSV9TVEFUVVNfTElOS19QQVNTCQkweDAwMDQKLSNkZWZpbmUgTURJT19DT01CT19JRUVFMF9NSUlfU1RBVFVTX0FVVE9ORUdfQ09NUExFVEUJMHgwMDIwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWCQkJMHgxNAotI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9GVUxMX0RVUExFWAkweDAwMjAKLSNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfSEFMRl9EVVBMRVgJMHgwMDQwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX01BU0sJMHgwMTgwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX05PTkUJMHgwMDAwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX1NZTU1FVFJJQwkweDAwODAKLSNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQwkweDAxMDAKLSNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USAkweDAxODAKLSNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfTkVYVF9QQUdFIAkweDgwMDAKLSNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19MSU5LX1BBUlRORVJfQUJJTElUWTEgMHgxNQotI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BQklMSVRZMV9ORVhUX1BBR0UgICAgMHg4MDAwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxX0FDSwkgICAgIDB4NDAwMAotI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BQklMSVRZMV9QQVVTRV9NQVNLICAgMHgwMTgwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxX1BBVVNFX05PTkVcCi0JMHgwMDAwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxX1BBVVNFX0JPVEhcCi0JMHgwMTgwCi0jZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxX0hBTEZfRFVQX0NBUCAweDAwNDAKLSNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19MSU5LX1BBUlRORVJfQUJJTElUWTFfRlVMTF9EVVBfQ0FQIDB4MDAyMAotI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BQklMSVRZMV9TR01JSV9NT0RFICAgMHgwMDAxCisjZGVmaW5lIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAJCTB4RkZFMAorI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MCQkJCTB4MTAKKyNkZWZpbmUgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF9NQVNLCQkJMHgyMDQwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9NQU5fU0dNSUlfU1BfMTAJCQkweDAwMDAKKyNkZWZpbmUgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF8xMDAJCQkweDIwMDAKKyNkZWZpbmUgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF8xMDAwCQkJMHgwMDQwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9GVUxMX0RVUExFWCAJCQkweDAxMDAKKyNkZWZpbmUgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU1RBUlRfQU4JCQkJMHgwMjAwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTgkJCQkweDEwMDAKKyNkZWZpbmUgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0xPT1BCQUNLCQkJCTB4NDAwMAorI2RlZmluZSBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTRVQJCQkJMHg4MDAwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfTUlJX1NUQVRVUwkJCQkweDExCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfTUlJX1NUQVRVU19MSU5LX1BBU1MJCQkJMHgwMDA0CisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfTUlJX1NUQVRVU19BVVRPTkVHX0NPTVBMRVRFCQkJMHgwMDIwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWCQkJCTB4MTQKKyNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfRlVMTF9EVVBMRVgJCQkweDAwMjAKKyNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfSEFMRl9EVVBMRVgJCQkweDAwNDAKKyNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfTUFTSwkJCTB4MDE4MAorI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9OT05FCQkJMHgwMDAwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX1NZTU1FVFJJQwkJCTB4MDA4MAorI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDCQkJMHgwMTAwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEgJCQkweDAxODAKKyNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfTkVYVF9QQUdFIAkJCTB4ODAwMAorI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BQklMSVRZMSAJMHgxNQorI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BQklMSVRZMV9ORVhUX1BBR0UJMHg4MDAwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxX0FDSwkJMHg0MDAwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxX1BBVVNFX01BU0sJMHgwMTgwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxX1BBVVNFX05PTkUJMHgwMDAwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxX1BBVVNFX0JPVEgJMHgwMTgwCisjZGVmaW5lIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfTElOS19QQVJUTkVSX0FCSUxJVFkxX0hBTEZfRFVQX0NBUAkweDAwNDAKKyNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19MSU5LX1BBUlRORVJfQUJJTElUWTFfRlVMTF9EVVBfQ0FQCTB4MDAyMAorLypXaGVudGhlbGlua3BhcnRuZXJpc2luU0dNSUltb2RlKGJpdDA9MSksdGhlbgorYml0MTU9bGluayxiaXQxMj1kdXBsZXgsYml0czExOjEwPXNwZWVkLGJpdDE0PWFja25vd2xlZGdlLgorVGhlb3RoZXJiaXRzYXJlcmVzZXJ2ZWRhbmRzaG91bGRiZXplcm8qLworI2RlZmluZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0xJTktfUEFSVE5FUl9BQklMSVRZMV9TR01JSV9NT0RFCTB4MDAwMQogCiAKLSNkZWZpbmUgRVhUX1BIWV9BVVRPX05FR19ERVZBRAkJCQkweDcKLSNkZWZpbmUgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRAkJCTB4MQotI2RlZmluZSBFWFRfUEhZX09QVF9XSVNfREVWQUQJCQkJMHgyCi0jZGVmaW5lIEVYVF9QSFlfT1BUX1BDU19ERVZBRAkJCQkweDMKLSNkZWZpbmUgRVhUX1BIWV9PUFRfUEhZX1hTX0RFVkFECQkJMHg0Ci0jZGVmaW5lIEVYVF9QSFlfT1BUX0NOVEwJCQkJMHgwCi0jZGVmaW5lIEVYVF9QSFlfT1BUX0NOVEwyCQkJCTB4NwotI2RlZmluZSBFWFRfUEhZX09QVF9QTURfUlhfU0QJCQkJMHhhCi0jZGVmaW5lIEVYVF9QSFlfT1BUX1BNRF9NSVNDX0NOVEwJCQkweGNhMGEKLSNkZWZpbmUgRVhUX1BIWV9PUFRfUEhZX0lERU5USUZJRVIJCQkweGM4MDAKLSNkZWZpbmUgRVhUX1BIWV9PUFRfUE1EX0RJR0lUQUxfQ05UCQkJMHhjODA4Ci0jZGVmaW5lIEVYVF9QSFlfT1BUX1BNRF9ESUdJVEFMX1NBVFVTCQkJMHhjODA5Ci0jZGVmaW5lIEVYVF9QSFlfT1BUX0NNVV9QTExfQllQQVNTCQkJMHhjYTA5Ci0jZGVmaW5lIEVYVF9QSFlfT1BUX0xBU0lfQ05UTAkJCQkweDkwMDIKLSNkZWZpbmUgRVhUX1BIWV9PUFRfUlhfQUxBUk0JCQkJMHg5MDAzCi0jZGVmaW5lIEVYVF9QSFlfT1BUX0xBU0lfU1RBVFVTIAkJCTB4OTAwNQotI2RlZmluZSBFWFRfUEhZX09QVF9QQ1NfU1RBVFVTCQkJCTB4MDAyMAotI2RlZmluZSBFWFRfUEhZX09QVF9YR1hTX0xBTkVfU1RBVFVTCQkJMHgwMDE4Ci0jZGVmaW5lIEVYVF9QSFlfT1BUX0FOX0xJTktfU1RBVFVTCQkJMHg4MzA0Ci0jZGVmaW5lIEVYVF9QSFlfT1BUX0FOX0NMMzdfQ0w3MwkJCTB4ODM3MAotI2RlZmluZSBFWFRfUEhZX09QVF9BTl9DTDM3X0ZECQkJCTB4ZmZlNAotI2RlZmluZSBFWFRfUEhZX09QVF9BTl9DTDM3X0FOCQkJCTB4ZmZlMAotI2RlZmluZSBFWFRfUEhZX09QVF9BTl9BRFYJCQkJMHgxMQorI2RlZmluZSBNRElPX1BNQV9ERVZBRAkJCTB4MQorLyppZWVlKi8KKyNkZWZpbmUgTURJT19QTUFfUkVHX0NUUkwJCTB4MAorI2RlZmluZSBNRElPX1BNQV9SRUdfU1RBVFVTCQkweDEKKyNkZWZpbmUgTURJT19QTUFfUkVHXzEwR19DVFJMMgkJMHg3CisjZGVmaW5lIE1ESU9fUE1BX1JFR19SWF9TRAkJMHhhCisvKmJjbSovCisjZGVmaW5lIE1ESU9fUE1BX1JFR19CQ01fQ1RSTAkJMHgwMDk2CisjZGVmaW5lIE1ESU9fUE1BX1JFR19GRUNfQ1RSTAkJMHgwMGFiCisjZGVmaW5lIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMCTB4OTAwMAorI2RlZmluZSBNRElPX1BNQV9SRUdfTEFTSV9DVFJMCQkweDkwMDIKKyNkZWZpbmUgTURJT19QTUFfUkVHX1JYX0FMQVJNCQkweDkwMDMKKyNkZWZpbmUgTURJT19QTUFfUkVHX1RYX0FMQVJNCQkweDkwMDQKKyNkZWZpbmUgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTCTB4OTAwNQorI2RlZmluZSBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIJMHhjODAwCisjZGVmaW5lIE1ESU9fUE1BX1JFR19ESUdJVEFMX0NUUkwJMHhjODA4CisjZGVmaW5lIE1ESU9fUE1BX1JFR19ESUdJVEFMX1NUQVRVUwkweGM4MDkKKyNkZWZpbmUgTURJT19QTUFfUkVHX1RYX1BPV0VSX0RPV04JMHhjYTAyCisjZGVmaW5lIE1ESU9fUE1BX1JFR19DTVVfUExMX0JZUEFTUwkweGNhMDkKKyNkZWZpbmUgTURJT19QTUFfUkVHX01JU0NfQ1RSTAkJMHhjYTBhCisjZGVmaW5lIE1ESU9fUE1BX1JFR19HRU5fQ1RSTAkJMHhjYTEwCisjZGVmaW5lIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fUkVTRVRfSU5URVJOQUxfTVAJMHgwMTg4CisjZGVmaW5lIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fTUlDUk9fUkVTRVQJCTB4MDE4YQorI2RlZmluZSBNRElPX1BNQV9SRUdfUk9NX1ZFUjEJCTB4Y2ExOQorI2RlZmluZSBNRElPX1BNQV9SRUdfUk9NX1ZFUjIJCTB4Y2ExYQorI2RlZmluZSBNRElPX1BNQV9SRUdfRURDX0ZGRV9NQUlOCTB4Y2ExYgorI2RlZmluZSBNRElPX1BNQV9SRUdfUExMX0JBTkRXSURUSAkweGNhMWQKKyNkZWZpbmUgTURJT19QTUFfUkVHX0NEUl9CQU5EV0lEVEgJMHhjYTQ2CisjZGVmaW5lIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxIAkweGNhODUKIAotI2RlZmluZSBFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQJCQkweDEKLSNkZWZpbmUgRVhUX1BIWV9LUl9QQ1NfREVWQUQJCQkJMHgzCi0jZGVmaW5lIEVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQJCQkweDcKLSNkZWZpbmUgRVhUX1BIWV9LUl9DVFJMIAkJCQkweDAwMDAKLSNkZWZpbmUgRVhUX1BIWV9LUl9TVEFUVVMJCQkJMHgwMDAxCi0jZGVmaW5lIEVYVF9QSFlfS1JfQVVUT19ORUdfQ09NUExFVEUJCSAgICAJMHgwMDIwCi0jZGVmaW5lIEVYVF9QSFlfS1JfQVVUT19ORUdfQURWRVJUCQkJMHgwMDEwCi0jZGVmaW5lIEVYVF9QSFlfS1JfQVVUT19ORUdfQURWRVJUX1BBVVNFCSAgICAJMHgwNDAwCi0jZGVmaW5lIEVYVF9QSFlfS1JfQVVUT19ORUdfQURWRVJUX1BBVVNFX0FTWU1NRVRSSUMgCTB4MDgwMAotI2RlZmluZSBFWFRfUEhZX0tSX0FVVE9fTkVHX0FEVkVSVF9QQVVTRV9CT1RICSAgICAJMHgwQzAwCi0jZGVmaW5lIEVYVF9QSFlfS1JfQVVUT19ORUdfQURWRVJUX1BBVVNFX01BU0sJICAgIAkweDBDMDAKLSNkZWZpbmUgRVhUX1BIWV9LUl9MUF9BVVRPX05FRwkJCQkweDAwMTMKLSNkZWZpbmUgRVhUX1BIWV9LUl9DVFJMMgkJCQkweDAwMDcKLSNkZWZpbmUgRVhUX1BIWV9LUl9QQ1NfU1RBVFVTCQkJCTB4MDAyMAotI2RlZmluZSBFWFRfUEhZX0tSX1BNRF9DVFJMCQkJCTB4MDA5NgotI2RlZmluZSBFWFRfUEhZX0tSX0xBU0lfQ05UTAkJCQkweDkwMDIKLSNkZWZpbmUgRVhUX1BIWV9LUl9MQVNJX1NUQVRVUwkJCQkweDkwMDUKLSNkZWZpbmUgRVhUX1BIWV9LUl9NSVNDX0NUUkwxCQkJCTB4Y2E4NQotI2RlZmluZSBFWFRfUEhZX0tSX0dFTl9DVFJMCQkJCTB4Y2ExMAotI2RlZmluZSBFWFRfUEhZX0tSX1JPTV9DT0RFCQkJCTB4Y2ExOQotI2RlZmluZSBFWFRfUEhZX0tSX1JPTV9SRVNFVF9JTlRFUk5BTF9NUAkJMHgwMTg4Ci0jZGVmaW5lIEVYVF9QSFlfS1JfUk9NX01JQ1JPX1JFU0VUCQkJMHgwMThhCisjZGVmaW5lIE1ESU9fUE1BX1JFR183MTAxX1JFU0VUIAkweGMwMDAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzcxMDdfTEVEX0NOVEwJMHhjMDA3CisjZGVmaW5lIE1ESU9fUE1BX1JFR183MTAxX1ZFUjEJCTB4YzAyNgorI2RlZmluZSBNRElPX1BNQV9SRUdfNzEwMV9WRVIyCQkweGMwMjcKIAotI2RlZmluZSBFWFRfUEhZX1NGWDcxMDFfWEdYU19URVNUMQkgICAgMHhjMDBhCisKKyNkZWZpbmUgTURJT19XSVNfREVWQUQJCQkweDIKKy8qYmNtKi8KKyNkZWZpbmUgTURJT19XSVNfUkVHX0xBU0lfQ05UTAkJMHg5MDAyCisjZGVmaW5lIE1ESU9fV0lTX1JFR19MQVNJX1NUQVRVUwkweDkwMDUKKworI2RlZmluZSBNRElPX1BDU19ERVZBRAkJCTB4MworI2RlZmluZSBNRElPX1BDU19SRUdfU1RBVFVTCQkweDAwMjAKKyNkZWZpbmUgTURJT19QQ1NfUkVHX0xBU0lfU1RBVFVTCTB4OTAwNQorI2RlZmluZSBNRElPX1BDU19SRUdfNzEwMV9EU1BfQUNDRVNTCTB4RDAwMAorI2RlZmluZSBNRElPX1BDU19SRUdfNzEwMV9TUElfTVVYCTB4RDAwOAorI2RlZmluZSBNRElPX1BDU19SRUdfNzEwMV9TUElfQ1RSTF9BRERSIDB4RTEyQQorI2RlZmluZSBNRElPX1BDU19SRUdfNzEwMV9TUElfUkVTRVRfQklUICg1KQorI2RlZmluZSBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSIDB4RTAyQQorI2RlZmluZSBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSX1dSSVRFX0VOQUJMRV9DTUQgKDYpCisjZGVmaW5lIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfQlVMS19FUkFTRV9DTUQJICgweEM3KQorI2RlZmluZSBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSX1BBR0VfUFJPR1JBTV9DTUQgKDIpCisjZGVmaW5lIE1ESU9fUENTX1JFR183MTAxX1NQSV9CWVRFU19UT19UUkFOU0ZFUl9BRERSIDB4RTAyOAorCisKKyNkZWZpbmUgTURJT19YU19ERVZBRAkJCTB4NAorI2RlZmluZSBNRElPX1hTX1BMTF9TRVFVRU5DRVIJCTB4ODAwMAorI2RlZmluZSBNRElPX1hTX1NGWDcxMDFfWEdYU19URVNUMQkweGMwMGEKKworI2RlZmluZSBNRElPX0FOX0RFVkFECQkJMHg3CisvKmllZWUqLworI2RlZmluZSBNRElPX0FOX1JFR19DVFJMCQkweDAwMDAKKyNkZWZpbmUgTURJT19BTl9SRUdfU1RBVFVTCQkweDAwMDEKKyNkZWZpbmUgTURJT19BTl9SRUdfU1RBVFVTX0FOX0NPTVBMRVRFCQkweDAwMjAKKyNkZWZpbmUgTURJT19BTl9SRUdfQURWX1BBVVNFCQkweDAwMTAKKyNkZWZpbmUgTURJT19BTl9SRUdfQURWX1BBVVNFX1BBVVNFCQkweDA0MDAKKyNkZWZpbmUgTURJT19BTl9SRUdfQURWX1BBVVNFX0FTWU1NRVRSSUMJMHgwODAwCisjZGVmaW5lIE1ESU9fQU5fUkVHX0FEVl9QQVVTRV9CT1RICQkweDBDMDAKKyNkZWZpbmUgTURJT19BTl9SRUdfQURWX1BBVVNFX01BU0sJCTB4MEMwMAorI2RlZmluZSBNRElPX0FOX1JFR19BRFYgCQkweDAwMTEKKyNkZWZpbmUgTURJT19BTl9SRUdfQURWMgkJMHgwMDEyCisjZGVmaW5lIE1ESU9fQU5fUkVHX0xQX0FVVE9fTkVHIAkweDAwMTMKKyNkZWZpbmUgTURJT19BTl9SRUdfTUFTVEVSX1NUQVRVUwkweDAwMjEKKy8qYmNtKi8KKyNkZWZpbmUgTURJT19BTl9SRUdfTElOS19TVEFUVVMgCTB4ODMwNAorI2RlZmluZSBNRElPX0FOX1JFR19DTDM3X0NMNzMJCTB4ODM3MAorI2RlZmluZSBNRElPX0FOX1JFR19DTDM3X0FOCQkweGZmZTAKKyNkZWZpbmUgTURJT19BTl9SRUdfQ0wzN19GRAkJMHhmZmU0CisKKworI2RlZmluZSBJR1VfRlVOQ19CQVNFCQkJMHgwNDAwCisKKyNkZWZpbmUgSUdVX0FERFJfTVNJWAkJCTB4MDAwMAorI2RlZmluZSBJR1VfQUREUl9JTlRfQUNLCQkweDAyMDAKKyNkZWZpbmUgSUdVX0FERFJfUFJPRF9VUEQJCTB4MDIwMQorI2RlZmluZSBJR1VfQUREUl9BVFROX0JJVFNfVVBECTB4MDIwMgorI2RlZmluZSBJR1VfQUREUl9BVFROX0JJVFNfU0VUCTB4MDIwMworI2RlZmluZSBJR1VfQUREUl9BVFROX0JJVFNfQ0xSCTB4MDIwNAorI2RlZmluZSBJR1VfQUREUl9DT0FMRVNDRV9OT1cJMHgwMjA1CisjZGVmaW5lIElHVV9BRERSX1NJTURfTUFTSwkJMHgwMjA2CisjZGVmaW5lIElHVV9BRERSX1NJTURfTk9NQVNLCTB4MDIwNworI2RlZmluZSBJR1VfQUREUl9NU0lfQ1RMCQkweDAyMTAKKyNkZWZpbmUgSUdVX0FERFJfTVNJX0FERFJfTE8JMHgwMjExCisjZGVmaW5lIElHVV9BRERSX01TSV9BRERSX0hJCTB4MDIxMgorI2RlZmluZSBJR1VfQUREUl9NU0lfREFUQQkJMHgwMjEzCisKKyNkZWZpbmUgSUdVX0lOVF9FTkFCTEUJCQkwCisjZGVmaW5lIElHVV9JTlRfRElTQUJMRSAJCTEKKyNkZWZpbmUgSUdVX0lOVF9OT1AJCQkJMgorI2RlZmluZSBJR1VfSU5UX05PUDIJCQkzCisKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDVhNjczNzIuLmIyMTE0ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTQxOSw4ICs0MTksMTAgQEAKIAl9CiAKIAlpZiAoIWJvbmQtPmFsYl9pbmZvLnByaW1hcnlfaXNfcHJvbWlzYykgewotCQlib25kLT5hbGJfaW5mby5wcmltYXJ5X2lzX3Byb21pc2MgPSAxOwotCQlkZXZfc2V0X3Byb21pc2N1aXR5KGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlLT5kZXYsIDEpOworCQlpZiAoIWRldl9zZXRfcHJvbWlzY3VpdHkoYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUtPmRldiwgMSkpCisJCQlib25kLT5hbGJfaW5mby5wcmltYXJ5X2lzX3Byb21pc2MgPSAxOworCQllbHNlCisJCQlib25kLT5hbGJfaW5mby5wcmltYXJ5X2lzX3Byb21pc2MgPSAwOwogCX0KIAogCWJvbmQtPmFsYl9pbmZvLnJsYl9wcm9taXNjX3RpbWVvdXRfY291bnRlciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCA1MGE0MGU0Li5hNjQxZWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTg4LDYgKzg4LDcgQEAKICNkZWZpbmUgQk9ORF9MSU5LX0FSUF9JTlRFUlYJMAogCiBzdGF0aWMgaW50IG1heF9ib25kcwk9IEJPTkRfREVGQVVMVF9NQVhfQk9ORFM7CitzdGF0aWMgaW50IG51bV9ncmF0X2FycCA9IDE7CiBzdGF0aWMgaW50IG1paW1vbgk9IEJPTkRfTElOS19NT05fSU5URVJWOwogc3RhdGljIGludCB1cGRlbGF5CT0gMDsKIHN0YXRpYyBpbnQgZG93bmRlbGF5CT0gMDsKQEAgLTk5LDExICsxMDAsMTMgQEAKIHN0YXRpYyBpbnQgYXJwX2ludGVydmFsID0gQk9ORF9MSU5LX0FSUF9JTlRFUlY7CiBzdGF0aWMgY2hhciAqYXJwX2lwX3RhcmdldFtCT05EX01BWF9BUlBfVEFSR0VUU10gPSB7IE5VTEwsIH07CiBzdGF0aWMgY2hhciAqYXJwX3ZhbGlkYXRlID0gTlVMTDsKLXN0YXRpYyBpbnQgZmFpbF9vdmVyX21hYyA9IDA7CitzdGF0aWMgY2hhciAqZmFpbF9vdmVyX21hYyA9IE5VTEw7CiBzdHJ1Y3QgYm9uZF9wYXJhbXMgYm9uZGluZ19kZWZhdWx0czsKIAogbW9kdWxlX3BhcmFtKG1heF9ib25kcywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X2JvbmRzLCAiTWF4IG51bWJlciBvZiBib25kZWQgZGV2aWNlcyIpOworbW9kdWxlX3BhcmFtKG51bV9ncmF0X2FycCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX2dyYXRfYXJwLCAiTnVtYmVyIG9mIGdyYXR1aXRvdXMgQVJQIHBhY2tldHMgdG8gc2VuZCBvbiBmYWlsb3ZlciBldmVudCIpOwogbW9kdWxlX3BhcmFtKG1paW1vbiwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWlpbW9uLCAiTGluayBjaGVjayBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMiKTsKIG1vZHVsZV9wYXJhbSh1cGRlbGF5LCBpbnQsIDApOwpAQCAtMTMzLDggKzEzNiw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGFycF9pcF90YXJnZXQsICJhcnAgdGFyZ2V0cyBpbiBuLm4ubi5uIGZvcm0iKTsKIG1vZHVsZV9wYXJhbShhcnBfdmFsaWRhdGUsIGNoYXJwLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYXJwX3ZhbGlkYXRlLCAidmFsaWRhdGUgc3JjL2RzdCBvZiBBUlAgcHJvYmVzOiBub25lIChkZWZhdWx0KSwgYWN0aXZlLCBiYWNrdXAgb3IgYWxsIik7Ci1tb2R1bGVfcGFyYW0oZmFpbF9vdmVyX21hYywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZmFpbF9vdmVyX21hYywgIkZvciBhY3RpdmUtYmFja3VwLCBkbyBub3Qgc2V0IGFsbCBzbGF2ZXMgdG8gdGhlIHNhbWUgTUFDLiAgMCBvZiBvZmYgKGRlZmF1bHQpLCAxIGZvciBvbi4iKTsKK21vZHVsZV9wYXJhbShmYWlsX292ZXJfbWFjLCBjaGFycCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZhaWxfb3Zlcl9tYWMsICJGb3IgYWN0aXZlLWJhY2t1cCwgZG8gbm90IHNldCBhbGwgc2xhdmVzIHRvIHRoZSBzYW1lIE1BQy4gIG5vbmUgKGRlZmF1bHQpLCBhY3RpdmUgb3IgZm9sbG93Iik7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTg3LDYgKzE5MCwxMyBAQAogewlOVUxMLAkJCS0xfSwKIH07CiAKK3N0cnVjdCBib25kX3Bhcm1fdGJsIGZhaWxfb3Zlcl9tYWNfdGJsW10gPSB7Cit7CSJub25lIiwJCQlCT05EX0ZPTV9OT05FfSwKK3sJImFjdGl2ZSIsCQlCT05EX0ZPTV9BQ1RJVkV9LAorewkiZm9sbG93IiwJCUJPTkRfRk9NX0ZPTExPV30sCit7CU5VTEwsCQkJLTF9LAorfTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3J3YXJkIGRlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZCBib25kX3NlbmRfZ3JhdHVpdG91c19hcnAoc3RydWN0IGJvbmRpbmcgKmJvbmQpOwpAQCAtMjYxLDE0ICsyNzEsMTQgQEAKICAqLwogc3RhdGljIGludCBib25kX2RlbF92bGFuKHN0cnVjdCBib25kaW5nICpib25kLCB1bnNpZ25lZCBzaG9ydCB2bGFuX2lkKQogewotCXN0cnVjdCB2bGFuX2VudHJ5ICp2bGFuLCAqbmV4dDsKKwlzdHJ1Y3Qgdmxhbl9lbnRyeSAqdmxhbjsKIAlpbnQgcmVzID0gLUVOT0RFVjsKIAogCWRwcmludGsoImJvbmQ6ICVzLCB2bGFuIGlkICVkXG4iLCBib25kLT5kZXYtPm5hbWUsIHZsYW5faWQpOwogCiAJd3JpdGVfbG9ja19iaCgmYm9uZC0+bG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgbmV4dCwgJmJvbmQtPnZsYW5fbGlzdCwgdmxhbl9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCAmYm9uZC0+dmxhbl9saXN0LCB2bGFuX2xpc3QpIHsKIAkJaWYgKHZsYW4tPnZsYW5faWQgPT0gdmxhbl9pZCkgewogCQkJbGlzdF9kZWwoJnZsYW4tPnZsYW5fbGlzdCk7CiAKQEAgLTc2MiwzOSArNzcyLDQ5IEBACiAvKgogICogUHVzaCB0aGUgcHJvbWlzY3VpdHkgZmxhZyBkb3duIHRvIGFwcHJvcHJpYXRlIHNsYXZlcwogICovCi1zdGF0aWMgdm9pZCBib25kX3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IGluYykKK3N0YXRpYyBpbnQgYm9uZF9zZXRfcHJvbWlzY3VpdHkoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBpbmMpCiB7CisJaW50IGVyciA9IDA7CiAJaWYgKFVTRVNfUFJJTUFSWShib25kLT5wYXJhbXMubW9kZSkpIHsKIAkJLyogd3JpdGUgbG9jayBhbHJlYWR5IGFjcXVpcmVkICovCiAJCWlmIChib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSkgewotCQkJZGV2X3NldF9wcm9taXNjdWl0eShib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZS0+ZGV2LCBpbmMpOworCQkJZXJyID0gZGV2X3NldF9wcm9taXNjdWl0eShib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZS0+ZGV2LAorCQkJCQkJICBpbmMpOwogCQl9CiAJfSBlbHNlIHsKIAkJc3RydWN0IHNsYXZlICpzbGF2ZTsKIAkJaW50IGk7CiAJCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKLQkJCWRldl9zZXRfcHJvbWlzY3VpdHkoc2xhdmUtPmRldiwgaW5jKTsKKwkJCWVyciA9IGRldl9zZXRfcHJvbWlzY3VpdHkoc2xhdmUtPmRldiwgaW5jKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KKwlyZXR1cm4gZXJyOwogfQogCiAvKgogICogUHVzaCB0aGUgYWxsbXVsdGkgZmxhZyBkb3duIHRvIGFsbCBzbGF2ZXMKICAqLwotc3RhdGljIHZvaWQgYm9uZF9zZXRfYWxsbXVsdGkoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBpbmMpCitzdGF0aWMgaW50IGJvbmRfc2V0X2FsbG11bHRpKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgaW5jKQogeworCWludCBlcnIgPSAwOwogCWlmIChVU0VTX1BSSU1BUlkoYm9uZC0+cGFyYW1zLm1vZGUpKSB7CiAJCS8qIHdyaXRlIGxvY2sgYWxyZWFkeSBhY3F1aXJlZCAqLwogCQlpZiAoYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUpIHsKLQkJCWRldl9zZXRfYWxsbXVsdGkoYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUtPmRldiwgaW5jKTsKKwkJCWVyciA9IGRldl9zZXRfYWxsbXVsdGkoYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUtPmRldiwKKwkJCQkJICAgICAgIGluYyk7CiAJCX0KIAl9IGVsc2UgewogCQlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOwogCQlpbnQgaTsKIAkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgewotCQkJZGV2X3NldF9hbGxtdWx0aShzbGF2ZS0+ZGV2LCBpbmMpOworCQkJZXJyID0gZGV2X3NldF9hbGxtdWx0aShzbGF2ZS0+ZGV2LCBpbmMpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQorCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC05NTUsNiArOTc1LDcgQEAKIAl9CiAKIAlpZiAobmV3X2FjdGl2ZSkgeworCQkvKiBGSVhNRTogU2lnbmFsIGVycm9ycyB1cHN0cmVhbS4gKi8KIAkJaWYgKGJvbmQtPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQkJZGV2X3NldF9wcm9taXNjdWl0eShuZXdfYWN0aXZlLT5kZXYsIDEpOwogCQl9CkBAIC05NzAsNiArOTkxLDgyIEBACiAJfQogfQogCisvKgorICogYm9uZF9kb19mYWlsX292ZXJfbWFjCisgKgorICogUGVyZm9ybSBzcGVjaWFsIE1BQyBhZGRyZXNzIHN3YXBwaW5nIGZvciBmYWlsX292ZXJfbWFjIHNldHRpbmdzCisgKgorICogQ2FsbGVkIHdpdGggUlROTCwgYm9uZC0+bG9jayBmb3IgcmVhZCwgY3Vycl9zbGF2ZV9sb2NrIGZvciB3cml0ZV9iaC4KKyAqLworc3RhdGljIHZvaWQgYm9uZF9kb19mYWlsX292ZXJfbWFjKHN0cnVjdCBib25kaW5nICpib25kLAorCQkJCSAgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlLAorCQkJCSAgc3RydWN0IHNsYXZlICpvbGRfYWN0aXZlKQoreworCXU4IHRtcF9tYWNbRVRIX0FMRU5dOworCXN0cnVjdCBzb2NrYWRkciBzYWRkcjsKKwlpbnQgcnY7CisKKwlzd2l0Y2ggKGJvbmQtPnBhcmFtcy5mYWlsX292ZXJfbWFjKSB7CisJY2FzZSBCT05EX0ZPTV9BQ1RJVkU6CisJCWlmIChuZXdfYWN0aXZlKQorCQkJbWVtY3B5KGJvbmQtPmRldi0+ZGV2X2FkZHIsICBuZXdfYWN0aXZlLT5kZXYtPmRldl9hZGRyLAorCQkJICAgICAgIG5ld19hY3RpdmUtPmRldi0+YWRkcl9sZW4pOworCQlicmVhazsKKwljYXNlIEJPTkRfRk9NX0ZPTExPVzoKKwkJLyoKKwkJICogaWYgbmV3X2FjdGl2ZSAmJiBvbGRfYWN0aXZlLCBzd2FwIHRoZW0KKwkJICogaWYganVzdCBvbGRfYWN0aXZlLCBkbyBub3RoaW5nIChnb2luZyB0byBubyBhY3RpdmUgc2xhdmUpCisJCSAqIGlmIGp1c3QgbmV3X2FjdGl2ZSwgc2V0IG5ld19hY3RpdmUgdG8gYm9uZCdzIE1BQworCQkgKi8KKwkJaWYgKCFuZXdfYWN0aXZlKQorCQkJcmV0dXJuOworCisJCXdyaXRlX3VubG9ja19iaCgmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKwkJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworCisJCWlmIChvbGRfYWN0aXZlKSB7CisJCQltZW1jcHkodG1wX21hYywgbmV3X2FjdGl2ZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQkJbWVtY3B5KHNhZGRyLnNhX2RhdGEsIG9sZF9hY3RpdmUtPmRldi0+ZGV2X2FkZHIsCisJCQkgICAgICAgRVRIX0FMRU4pOworCQkJc2FkZHIuc2FfZmFtaWx5ID0gbmV3X2FjdGl2ZS0+ZGV2LT50eXBlOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHNhZGRyLnNhX2RhdGEsIGJvbmQtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJCXNhZGRyLnNhX2ZhbWlseSA9IGJvbmQtPmRldi0+dHlwZTsKKwkJfQorCisJCXJ2ID0gZGV2X3NldF9tYWNfYWRkcmVzcyhuZXdfYWN0aXZlLT5kZXYsICZzYWRkcik7CisJCWlmIChydikgeworCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IEVycm9yICVkIHNldHRpbmcgTUFDIG9mIHNsYXZlICVzXG4iLAorCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgLXJ2LCBuZXdfYWN0aXZlLT5kZXYtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoIW9sZF9hY3RpdmUpCisJCQlnb3RvIG91dDsKKworCQltZW1jcHkoc2FkZHIuc2FfZGF0YSwgdG1wX21hYywgRVRIX0FMRU4pOworCQlzYWRkci5zYV9mYW1pbHkgPSBvbGRfYWN0aXZlLT5kZXYtPnR5cGU7CisKKwkJcnYgPSBkZXZfc2V0X21hY19hZGRyZXNzKG9sZF9hY3RpdmUtPmRldiwgJnNhZGRyKTsKKwkJaWYgKHJ2KQorCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IEVycm9yICVkIHNldHRpbmcgTUFDIG9mIHNsYXZlICVzXG4iLAorCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgLXJ2LCBuZXdfYWN0aXZlLT5kZXYtPm5hbWUpOworb3V0OgorCQlyZWFkX2xvY2soJmJvbmQtPmxvY2spOworCQl3cml0ZV9sb2NrX2JoKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBib25kX2RvX2ZhaWxfb3Zlcl9tYWMgaW1wb3NzaWJsZTogYmFkIHBvbGljeSAlZFxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgYm9uZC0+cGFyYW1zLmZhaWxfb3Zlcl9tYWMpOworCQlicmVhazsKKwl9CisKK30KKworCiAvKioKICAqIGZpbmRfYmVzdF9pbnRlcmZhY2UgLSBzZWxlY3QgdGhlIGJlc3QgYXZhaWxhYmxlIHNsYXZlIHRvIGJlIHRoZSBhY3RpdmUgb25lCiAgKiBAYm9uZDogb3VyIGJvbmRpbmcgc3RydWN0CkBAIC0xMDM3LDcgKzExMzQsOCBAQAogICogYmVjYXVzZSBpdCBpcyBhcHBhcmVudGx5IHRoZSBiZXN0IGF2YWlsYWJsZSBzbGF2ZSB3ZSBoYXZlLCBldmVuIHRob3VnaCBpdHMKICAqIHVwZGVsYXkgaGFzbid0IHRpbWVkIG91dCB5ZXQuCiAgKgotICogV2FybmluZzogQ2FsbGVyIG11c3QgaG9sZCBjdXJyX3NsYXZlX2xvY2sgZm9yIHdyaXRpbmcuCisgKiBJZiBuZXdfYWN0aXZlIGlzIG5vdCBOVUxMLCBjYWxsZXIgbXVzdCBob2xkIGJvbmQtPmxvY2sgZm9yIHJlYWQgYW5kCisgKiBjdXJyX3NsYXZlX2xvY2sgZm9yIHdyaXRlX2JoLgogICovCiB2b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKQogewpAQCAtMTA0OCw2ICsxMTQ2LDggQEAKIAl9CiAKIAlpZiAobmV3X2FjdGl2ZSkgeworCQluZXdfYWN0aXZlLT5qaWZmaWVzID0gamlmZmllczsKKwogCQlpZiAobmV3X2FjdGl2ZS0+bGluayA9PSBCT05EX0xJTktfQkFDSykgewogCQkJaWYgKFVTRVNfUFJJTUFSWShib25kLT5wYXJhbXMubW9kZSkpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCkBAIC0xMDU5LDcgKzExNTksNiBAQAogCiAJCQluZXdfYWN0aXZlLT5kZWxheSA9IDA7CiAJCQluZXdfYWN0aXZlLT5saW5rID0gQk9ORF9MSU5LX1VQOwotCQkJbmV3X2FjdGl2ZS0+amlmZmllcyA9IGppZmZpZXM7CiAKIAkJCWlmIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfODAyM0FEKSB7CiAJCQkJYm9uZF8zYWRfaGFuZGxlX2xpbmtfY2hhbmdlKG5ld19hY3RpdmUsIEJPTkRfTElOS19VUCk7CkBAIC0xMTAxLDIyICsxMjAwLDIyIEBACiAKIAkJaWYgKG5ld19hY3RpdmUpIHsKIAkJCWJvbmRfc2V0X3NsYXZlX2FjdGl2ZV9mbGFncyhuZXdfYWN0aXZlKTsKLQkJfQogCi0JCS8qIHdoZW4gYm9uZGluZyBkb2VzIG5vdCBzZXQgdGhlIHNsYXZlIE1BQyBhZGRyZXNzLCB0aGUgYm9uZCBNQUMKLQkJICogYWRkcmVzcyBpcyB0aGUgb25lIG9mIHRoZSBhY3RpdmUgc2xhdmUuCi0JCSAqLwotCQlpZiAobmV3X2FjdGl2ZSAmJiBib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYykKLQkJCW1lbWNweShib25kLT5kZXYtPmRldl9hZGRyLCAgbmV3X2FjdGl2ZS0+ZGV2LT5kZXZfYWRkciwKLQkJCQluZXdfYWN0aXZlLT5kZXYtPmFkZHJfbGVuKTsKLQkJaWYgKGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlICYmCi0JCQl0ZXN0X2JpdChfX0xJTktfU1RBVEVfTElOS1dBVENIX1BFTkRJTkcsCi0JCQkJCSZib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZS0+ZGV2LT5zdGF0ZSkpIHsKLQkJCWRwcmludGsoImRlbGF5aW5nIGdyYXR1aXRvdXMgYXJwIG9uICVzXG4iLAotCQkJCWJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlLT5kZXYtPm5hbWUpOwotCQkJYm9uZC0+c2VuZF9ncmF0X2FycCA9IDE7Ci0JCX0gZWxzZQorCQkJaWYgKGJvbmQtPnBhcmFtcy5mYWlsX292ZXJfbWFjKQorCQkJCWJvbmRfZG9fZmFpbF9vdmVyX21hYyhib25kLCBuZXdfYWN0aXZlLAorCQkJCQkJICAgICAgb2xkX2FjdGl2ZSk7CisKKwkJCWJvbmQtPnNlbmRfZ3JhdF9hcnAgPSBib25kLT5wYXJhbXMubnVtX2dyYXRfYXJwOwogCQkJYm9uZF9zZW5kX2dyYXR1aXRvdXNfYXJwKGJvbmQpOworCisJCQl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CisJCQlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CisKKwkJCW5ldGRldl9ib25kaW5nX2NoYW5nZShib25kLT5kZXYpOworCisJCQlyZWFkX2xvY2soJmJvbmQtPmxvY2spOworCQkJd3JpdGVfbG9ja19iaCgmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKwkJfQogCX0KIH0KIApAQCAtMTEyOSw3ICsxMjI4LDcgQEAKICAqIC0gVGhlIHByaW1hcnlfc2xhdmUgaGFzIGdvdCBpdHMgbGluayBiYWNrLgogICogLSBBIHNsYXZlIGhhcyBnb3QgaXRzIGxpbmsgYmFjayBhbmQgdGhlcmUncyBubyBvbGQgY3Vycl9hY3RpdmVfc2xhdmUuCiAgKgotICogV2FybmluZzogQ2FsbGVyIG11c3QgaG9sZCBjdXJyX3NsYXZlX2xvY2sgZm9yIHdyaXRpbmcuCisgKiBDYWxsZXIgbXVzdCBob2xkIGJvbmQtPmxvY2sgZm9yIHJlYWQgYW5kIGN1cnJfc2xhdmVfbG9jayBmb3Igd3JpdGVfYmguCiAgKi8KIHZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKQogewpAQCAtMTM3NiwxNCArMTQ3NSwxNCBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQogCQkJICAgICAgICI6ICVzOiBXYXJuaW5nOiBUaGUgZmlyc3Qgc2xhdmUgZGV2aWNlICIKIAkJCSAgICAgICAic3BlY2lmaWVkIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyB0aGUgTUFDICIKLQkJCSAgICAgICAiYWRkcmVzcy4gRW5hYmxpbmcgdGhlIGZhaWxfb3Zlcl9tYWMgb3B0aW9uLiIsCisJCQkgICAgICAgImFkZHJlc3MuIFNldHRpbmcgZmFpbF9vdmVyX21hYyB0byBhY3RpdmUuIiwKIAkJCSAgICAgICBib25kX2Rldi0+bmFtZSk7Ci0JCQlib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYyA9IDE7Ci0JCX0gZWxzZSBpZiAoIWJvbmQtPnBhcmFtcy5mYWlsX292ZXJfbWFjKSB7CisJCQlib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYyA9IEJPTkRfRk9NX0FDVElWRTsKKwkJfSBlbHNlIGlmIChib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYyAhPSBCT05EX0ZPTV9BQ1RJVkUpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQogCQkJCSI6ICVzOiBFcnJvcjogVGhlIHNsYXZlIGRldmljZSBzcGVjaWZpZWQgIgogCQkJCSJkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgdGhlIE1BQyBhZGRyZXNzLCAiCi0JCQkJImJ1dCBmYWlsX292ZXJfbWFjIGlzIG5vdCBlbmFibGVkLlxuIgorCQkJCSJidXQgZmFpbF9vdmVyX21hYyBpcyBub3Qgc2V0IHRvIGFjdGl2ZS5cbiIKIAkJCQksIGJvbmRfZGV2LT5uYW1lKTsKIAkJCXJlcyA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBlcnJfdW5kb19mbGFnczsKQEAgLTE0NTYsMjAgKzE1NTUsMjQgQEAKIAlpZiAoIVVTRVNfUFJJTUFSWShib25kLT5wYXJhbXMubW9kZSkpIHsKIAkJLyogc2V0IHByb21pc2N1aXR5IGxldmVsIHRvIG5ldyBzbGF2ZSAqLwogCQlpZiAoYm9uZF9kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJCWRldl9zZXRfcHJvbWlzY3VpdHkoc2xhdmVfZGV2LCAxKTsKKwkJCXJlcyA9IGRldl9zZXRfcHJvbWlzY3VpdHkoc2xhdmVfZGV2LCAxKTsKKwkJCWlmIChyZXMpCisJCQkJZ290byBlcnJfY2xvc2U7CiAJCX0KIAogCQkvKiBzZXQgYWxsbXVsdGkgbGV2ZWwgdG8gbmV3IHNsYXZlICovCiAJCWlmIChib25kX2Rldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKLQkJCWRldl9zZXRfYWxsbXVsdGkoc2xhdmVfZGV2LCAxKTsKKwkJCXJlcyA9IGRldl9zZXRfYWxsbXVsdGkoc2xhdmVfZGV2LCAxKTsKKwkJCWlmIChyZXMpCisJCQkJZ290byBlcnJfY2xvc2U7CiAJCX0KIAotCQluZXRpZl90eF9sb2NrX2JoKGJvbmRfZGV2KTsKKwkJbmV0aWZfYWRkcl9sb2NrX2JoKGJvbmRfZGV2KTsKIAkJLyogdXBsb2FkIG1hc3RlcidzIG1jX2xpc3QgdG8gbmV3IHNsYXZlICovCiAJCWZvciAoZG1pID0gYm9uZF9kZXYtPm1jX2xpc3Q7IGRtaTsgZG1pID0gZG1pLT5uZXh0KSB7CiAJCQlkZXZfbWNfYWRkIChzbGF2ZV9kZXYsIGRtaS0+ZG1pX2FkZHIsIGRtaS0+ZG1pX2FkZHJsZW4sIDApOwogCQl9Ci0JCW5ldGlmX3R4X3VubG9ja19iaChib25kX2Rldik7CisJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGJvbmRfZGV2KTsKIAl9CiAKIAlpZiAoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFXzgwMjNBRCkgewpAQCAtMTQ5MCw2ICsxNTkzLDEwIEBACiAKIAlib25kX2NvbXB1dGVfZmVhdHVyZXMoYm9uZCk7CiAKKwl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmxvY2spOworCisJcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKKwogCW5ld19zbGF2ZS0+bGFzdF9hcnBfcnggPSBqaWZmaWVzOwogCiAJaWYgKGJvbmQtPnBhcmFtcy5taWltb24gJiYgIWJvbmQtPnBhcmFtcy51c2VfY2FycmllcikgewpAQCAtMTU2Niw2ICsxNjczLDggQEAKIAkJfQogCX0KIAorCXdyaXRlX2xvY2tfYmgoJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CisKIAlzd2l0Y2ggKGJvbmQtPnBhcmFtcy5tb2RlKSB7CiAJY2FzZSBCT05EX01PREVfQUNUSVZFQkFDS1VQOgogCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhuZXdfc2xhdmUpOwpAQCAtMTYxMyw5ICsxNzIyLDExIEBACiAJCWJyZWFrOwogCX0gLyogc3dpdGNoKGJvbmRfbW9kZSkgKi8KIAorCXdyaXRlX3VubG9ja19iaCgmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKwogCWJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7CiAKLQl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmxvY2spOworCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKIAogCXJlcyA9IGJvbmRfY3JlYXRlX3NsYXZlX3N5bWxpbmtzKGJvbmRfZGV2LCBzbGF2ZV9kZXYpOwogCWlmIChyZXMpCkBAIC0xNjM5LDYgKzE3NTAsMTAgQEAKIAogZXJyX3Jlc3RvcmVfbWFjOgogCWlmICghYm9uZC0+cGFyYW1zLmZhaWxfb3Zlcl9tYWMpIHsKKwkJLyogWFhYIFRPRE8gLSBmb20gZm9sbG93IG1vZGUgbmVlZHMgdG8gY2hhbmdlIG1hc3RlcidzCisJCSAqIE1BQyBpZiB0aGlzIHNsYXZlJ3MgTUFDIGlzIGluIHVzZSBieSB0aGUgYm9uZCwgb3IgYXQKKwkJICogbGVhc3QgcHJpbnQgYSB3YXJuaW5nLgorCQkgKi8KIAkJbWVtY3B5KGFkZHIuc2FfZGF0YSwgbmV3X3NsYXZlLT5wZXJtX2h3YWRkciwgRVRIX0FMRU4pOwogCQlhZGRyLnNhX2ZhbWlseSA9IHNsYXZlX2Rldi0+dHlwZTsKIAkJZGV2X3NldF9tYWNfYWRkcmVzcyhzbGF2ZV9kZXYsICZhZGRyKTsKQEAgLTE2OTMsMjAgKzE4MDgsMTggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbWFjX2FkZHJfZGlmZmVyID0gbWVtY21wKGJvbmRfZGV2LT5kZXZfYWRkciwKLQkJCQkgc2xhdmUtPnBlcm1faHdhZGRyLAotCQkJCSBFVEhfQUxFTik7Ci0JaWYgKCFtYWNfYWRkcl9kaWZmZXIgJiYgKGJvbmQtPnNsYXZlX2NudCA+IDEpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJICAgICAgICI6ICVzOiBXYXJuaW5nOiB0aGUgcGVybWFuZW50IEhXYWRkciBvZiAlcyAtICIKLQkJICAgICAgICIlcyAtIGlzIHN0aWxsIGluIHVzZSBieSAlcy4gIgotCQkgICAgICAgIlNldCB0aGUgSFdhZGRyIG9mICVzIHRvIGEgZGlmZmVyZW50IGFkZHJlc3MgIgotCQkgICAgICAgInRvIGF2b2lkIGNvbmZsaWN0cy5cbiIsCi0JCSAgICAgICBib25kX2Rldi0+bmFtZSwKLQkJICAgICAgIHNsYXZlX2Rldi0+bmFtZSwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIHNsYXZlLT5wZXJtX2h3YWRkciksCi0JCSAgICAgICBib25kX2Rldi0+bmFtZSwKLQkJICAgICAgIHNsYXZlX2Rldi0+bmFtZSk7CisJaWYgKCFib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYykgeworCQltYWNfYWRkcl9kaWZmZXIgPSBtZW1jbXAoYm9uZF9kZXYtPmRldl9hZGRyLCBzbGF2ZS0+cGVybV9od2FkZHIsCisJCQkJCSBFVEhfQUxFTik7CisJCWlmICghbWFjX2FkZHJfZGlmZmVyICYmIChib25kLT5zbGF2ZV9jbnQgPiAxKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKKwkJCSAgICAgICAiOiAlczogV2FybmluZzogdGhlIHBlcm1hbmVudCBIV2FkZHIgb2YgJXMgLSAiCisJCQkgICAgICAgIiVzIC0gaXMgc3RpbGwgaW4gdXNlIGJ5ICVzLiAiCisJCQkgICAgICAgIlNldCB0aGUgSFdhZGRyIG9mICVzIHRvIGEgZGlmZmVyZW50IGFkZHJlc3MgIgorCQkJICAgICAgICJ0byBhdm9pZCBjb25mbGljdHMuXG4iLAorCQkJICAgICAgIGJvbmRfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUsCisJCQkgICAgICAgcHJpbnRfbWFjKG1hYywgc2xhdmUtPnBlcm1faHdhZGRyKSwKKwkJCSAgICAgICBib25kX2Rldi0+bmFtZSwgc2xhdmVfZGV2LT5uYW1lKTsKIAl9CiAKIAkvKiBJbmZvcm0gQUQgcGFja2FnZSBvZiB1bmJpbmRpbmcgb2Ygc2xhdmUuICovCkBAIC0xODIzLDkgKzE5MzYsOSBAQAogCQl9CiAKIAkJLyogZmx1c2ggbWFzdGVyJ3MgbWNfbGlzdCBmcm9tIHNsYXZlICovCi0JCW5ldGlmX3R4X2xvY2tfYmgoYm9uZF9kZXYpOworCQluZXRpZl9hZGRyX2xvY2tfYmgoYm9uZF9kZXYpOwogCQlib25kX21jX2xpc3RfZmx1c2goYm9uZF9kZXYsIHNsYXZlX2Rldik7Ci0JCW5ldGlmX3R4X3VubG9ja19iaChib25kX2Rldik7CisJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGJvbmRfZGV2KTsKIAl9CiAKIAluZXRkZXZfc2V0X21hc3RlcihzbGF2ZV9kZXYsIE5VTEwpOwpAQCAtMTgzMyw3ICsxOTQ2LDcgQEAKIAkvKiBjbG9zZSBzbGF2ZSBiZWZvcmUgcmVzdG9yaW5nIGl0cyBtYWMgYWRkcmVzcyAqLwogCWRldl9jbG9zZShzbGF2ZV9kZXYpOwogCi0JaWYgKCFib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYykgeworCWlmIChib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYyAhPSBCT05EX0ZPTV9BQ1RJVkUpIHsKIAkJLyogcmVzdG9yZSBvcmlnaW5hbCAoInBlcm1hbmVudCIpIG1hYyBhZGRyZXNzICovCiAJCW1lbWNweShhZGRyLnNhX2RhdGEsIHNsYXZlLT5wZXJtX2h3YWRkciwgRVRIX0FMRU4pOwogCQlhZGRyLnNhX2ZhbWlseSA9IHNsYXZlX2Rldi0+dHlwZTsKQEAgLTE5NDYsOSArMjA1OSw5IEBACiAJCQl9CiAKIAkJCS8qIGZsdXNoIG1hc3RlcidzIG1jX2xpc3QgZnJvbSBzbGF2ZSAqLwotCQkJbmV0aWZfdHhfbG9ja19iaChib25kX2Rldik7CisJCQluZXRpZl9hZGRyX2xvY2tfYmgoYm9uZF9kZXYpOwogCQkJYm9uZF9tY19saXN0X2ZsdXNoKGJvbmRfZGV2LCBzbGF2ZV9kZXYpOwotCQkJbmV0aWZfdHhfdW5sb2NrX2JoKGJvbmRfZGV2KTsKKwkJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGJvbmRfZGV2KTsKIAkJfQogCiAJCW5ldGRldl9zZXRfbWFzdGVyKHNsYXZlX2RldiwgTlVMTCk7CkBAIC0yMTM2LDE3ICsyMjQ5LDYgQEAKIAkgKiBwcm9ncmFtIGNvdWxkIG1vbml0b3IgdGhlIGxpbmsgaXRzZWxmIGlmIG5lZWRlZC4KIAkgKi8KIAotCWlmIChib25kLT5zZW5kX2dyYXRfYXJwKSB7Ci0JCWlmIChib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSAmJiB0ZXN0X2JpdChfX0xJTktfU1RBVEVfTElOS1dBVENIX1BFTkRJTkcsCi0JCQkJJmJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlLT5kZXYtPnN0YXRlKSkKLQkJCWRwcmludGsoIk5lZWRzIHRvIHNlbmQgZ3JhdHVpdG91cyBhcnAgYnV0IG5vdCB5ZXRcbiIpOwotCQllbHNlIHsKLQkJCWRwcmludGsoInNlbmRpbmcgZGVsYXllZCBncmF0dWl0b3VzIGFycCBvbiBvbiAlc1xuIiwKLQkJCQlib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZS0+ZGV2LT5uYW1lKTsKLQkJCWJvbmRfc2VuZF9ncmF0dWl0b3VzX2FycChib25kKTsKLQkJCWJvbmQtPnNlbmRfZ3JhdF9hcnAgPSAwOwotCQl9Ci0JfQogCXJlYWRfbG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKIAlvbGRjdXJyZW50ID0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmU7CiAJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CkBAIC0yMzg3LDYgKzI0ODksMTMgQEAKIAkJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwogCQlyZXR1cm47CiAJfQorCisJaWYgKGJvbmQtPnNlbmRfZ3JhdF9hcnApIHsKKwkJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOworCQlib25kX3NlbmRfZ3JhdHVpdG91c19hcnAoYm9uZCk7CisJCXJlYWRfdW5sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOworCX0KKwogCWlmIChfX2JvbmRfbWlpX21vbml0b3IoYm9uZCwgMCkpIHsKIAkJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwogCQlydG5sX2xvY2soKTsKQEAgLTIzOTcsNyArMjUwNiw3IEBACiAJCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CiAJfQogCi0JZGVsYXkgPSAoKGJvbmQtPnBhcmFtcy5taWltb24gKiBIWikgLyAxMDAwKSA/IDogMTsKKwlkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC0+cGFyYW1zLm1paW1vbik7CiAJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwogCXF1ZXVlX2RlbGF5ZWRfd29yayhib25kLT53cSwgJmJvbmQtPm1paV93b3JrLCBkZWxheSk7CiB9CkBAIC0yNDI2LDM3ICsyNTM1LDE0IEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKLXN0YXRpYyBpbnQgYm9uZF9oYXNfaXAoc3RydWN0IGJvbmRpbmcgKmJvbmQpCi17Ci0Jc3RydWN0IHZsYW5fZW50cnkgKnZsYW4sICp2bGFuX25leHQ7Ci0KLQlpZiAoYm9uZC0+bWFzdGVyX2lwKQotCQlyZXR1cm4gMTsKLQotCWlmIChsaXN0X2VtcHR5KCZib25kLT52bGFuX2xpc3QpKQotCQlyZXR1cm4gMDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCB2bGFuX25leHQsICZib25kLT52bGFuX2xpc3QsCi0JCQkJIHZsYW5fbGlzdCkgewotCQlpZiAodmxhbi0+dmxhbl9pcCkKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGJvbmRfaGFzX3RoaXNfaXAoc3RydWN0IGJvbmRpbmcgKmJvbmQsIF9fYmUzMiBpcCkKIHsKLQlzdHJ1Y3Qgdmxhbl9lbnRyeSAqdmxhbiwgKnZsYW5fbmV4dDsKKwlzdHJ1Y3Qgdmxhbl9lbnRyeSAqdmxhbjsKIAogCWlmIChpcCA9PSBib25kLT5tYXN0ZXJfaXApCiAJCXJldHVybiAxOwogCi0JaWYgKGxpc3RfZW1wdHkoJmJvbmQtPnZsYW5fbGlzdCkpCi0JCXJldHVybiAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIHZsYW5fbmV4dCwgJmJvbmQtPnZsYW5fbGlzdCwKLQkJCQkgdmxhbl9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCAmYm9uZC0+dmxhbl9saXN0LCB2bGFuX2xpc3QpIHsKIAkJaWYgKGlwID09IHZsYW4tPnZsYW5faXApCiAJCQlyZXR1cm4gMTsKIAl9CkBAIC0yNDk4LDcgKzI1ODQsNyBAQAogewogCWludCBpLCB2bGFuX2lkLCBydjsKIAlfX2JlMzIgKnRhcmdldHMgPSBib25kLT5wYXJhbXMuYXJwX3RhcmdldHM7Ci0Jc3RydWN0IHZsYW5fZW50cnkgKnZsYW4sICp2bGFuX25leHQ7CisJc3RydWN0IHZsYW5fZW50cnkgKnZsYW47CiAJc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2OwogCXN0cnVjdCBmbG93aSBmbDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKQEAgLTI1NDUsOCArMjYzMSw3IEBACiAJCX0KIAogCQl2bGFuX2lkID0gMDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIHZsYW5fbmV4dCwgJmJvbmQtPnZsYW5fbGlzdCwKLQkJCQkJIHZsYW5fbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sICZib25kLT52bGFuX2xpc3QsIHZsYW5fbGlzdCkgewogCQkJdmxhbl9kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoYm9uZC0+dmxncnAsIHZsYW4tPnZsYW5faWQpOwogCQkJaWYgKHZsYW5fZGV2ID09IHJ0LT51LmRzdC5kZXYpIHsKIAkJCQl2bGFuX2lkID0gdmxhbi0+dmxhbl9pZDsKQEAgLTI1NzYsNiArMjY2MSw4IEBACiAvKgogICogS2ljayBvdXQgYSBncmF0dWl0b3VzIEFSUCBmb3IgYW4gSVAgb24gdGhlIGJvbmRpbmcgbWFzdGVyIHBsdXMgb25lCiAgKiBmb3IgZWFjaCBWTEFOIGFib3ZlIHVzLgorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgY3Vycl9zbGF2ZV9sb2NrIGZvciByZWFkIG9yIGJldHRlcgogICovCiBzdGF0aWMgdm9pZCBib25kX3NlbmRfZ3JhdHVpdG91c19hcnAoc3RydWN0IGJvbmRpbmcgKmJvbmQpCiB7CkBAIC0yNTg1LDkgKzI2NzIsMTMgQEAKIAogCWRwcmludGsoImJvbmRfc2VuZF9ncmF0X2FycDogYm9uZCAlcyBzbGF2ZSAlc1xuIiwgYm9uZC0+ZGV2LT5uYW1lLAogCQkJCXNsYXZlID8gc2xhdmUtPmRldi0+bmFtZSA6ICJOVUxMIik7Ci0JaWYgKCFzbGF2ZSkKKworCWlmICghc2xhdmUgfHwgIWJvbmQtPnNlbmRfZ3JhdF9hcnAgfHwKKwkgICAgdGVzdF9iaXQoX19MSU5LX1NUQVRFX0xJTktXQVRDSF9QRU5ESU5HLCAmc2xhdmUtPmRldi0+c3RhdGUpKQogCQlyZXR1cm47CiAKKwlib25kLT5zZW5kX2dyYXRfYXJwLS07CisKIAlpZiAoYm9uZC0+bWFzdGVyX2lwKSB7CiAJCWJvbmRfYXJwX3NlbmQoc2xhdmUtPmRldiwgQVJQT1BfUkVQTFksIGJvbmQtPm1hc3Rlcl9pcCwKIAkJCQlib25kLT5tYXN0ZXJfaXAsIDApOwpAQCAtMjcwNyw3ICsyNzk4LDcgQEAKIAogCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CiAKLQlkZWx0YV9pbl90aWNrcyA9IChib25kLT5wYXJhbXMuYXJwX2ludGVydmFsICogSFopIC8gMTAwMDsKKwlkZWx0YV9pbl90aWNrcyA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC0+cGFyYW1zLmFycF9pbnRlcnZhbCk7CiAKIAlpZiAoYm9uZC0+a2lsbF90aW1lcnMpIHsKIAkJZ290byBvdXQ7CkBAIC0yNzY0LDggKzI4NTUsNyBAQAogCQkJICogaWYgd2UgZG9uJ3Qga25vdyBvdXIgaXAgeWV0CiAJCQkgKi8KIAkJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHNsYXZlLT5kZXYtPnRyYW5zX3N0YXJ0ICsgMipkZWx0YV9pbl90aWNrcykgfHwKLQkJCSAgICAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzbGF2ZS0+ZGV2LT5sYXN0X3J4ICsgMipkZWx0YV9pbl90aWNrcykgJiYKLQkJCSAgICAgYm9uZF9oYXNfaXAoYm9uZCkpKSB7CisJCQkgICAgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc2xhdmUtPmRldi0+bGFzdF9yeCArIDIqZGVsdGFfaW5fdGlja3MpKSkgewogCiAJCQkJc2xhdmUtPmxpbmsgID0gQk9ORF9MSU5LX0RPV047CiAJCQkJc2xhdmUtPnN0YXRlID0gQk9ORF9TVEFURV9CQUNLVVA7CkBAIC0yODEzLDI0NSArMjkwMywzMDQgQEAKIH0KIAogLyoKLSAqIFdoZW4gdXNpbmcgYXJwIG1vbml0b3JpbmcgaW4gYWN0aXZlLWJhY2t1cCBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzCi0gKiBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBiYWNrdXAgc2xhdmVzIGhhdmUgd2VudCBkb3duIG9yIGEgbmV3Ci0gKiBjdXJyZW50IHNsYXZlIG5lZWRzIHRvIGJlIGZvdW5kLgotICogVGhlIGJhY2t1cCBzbGF2ZXMgbmV2ZXIgZ2VuZXJhdGUgdHJhZmZpYywgdGhleSBhcmUgY29uc2lkZXJlZCB1cCBieSBtZXJlbHkKLSAqIHJlY2VpdmluZyB0cmFmZmljLiBJZiB0aGUgY3VycmVudCBzbGF2ZSBnb2VzIGRvd24sIGVhY2ggYmFja3VwIHNsYXZlIHdpbGwKLSAqIGJlIGdpdmVuIHRoZSBvcHBvcnR1bml0eSB0byB0eC9yeCBhbiBhcnAgYmVmb3JlIGJlaW5nIHRha2VuIGRvd24gLSB0aGlzCi0gKiBwcmV2ZW50cyBhbGwgc2xhdmVzIGZyb20gYmVpbmcgdGFrZW4gZG93biBkdWUgdG8gdGhlIGN1cnJlbnQgc2xhdmUgbm90Ci0gKiBzZW5kaW5nIGFueSB0cmFmZmljIGZvciB0aGUgYmFja3VwcyB0byByZWNlaXZlLiBUaGUgYXJwcyBhcmUgbm90IG5lY2Vzc2FyaWx5Ci0gKiBuZWNlc3NhcnksIGFueSB0eCBhbmQgcnggdHJhZmZpYyB3aWxsIGtlZXAgdGhlIGN1cnJlbnQgc2xhdmUgdXAuIFdoaWxlIGFueQotICogcnggdHJhZmZpYyB3aWxsIGtlZXAgdGhlIGJhY2t1cCBzbGF2ZXMgdXAsIHRoZSBjdXJyZW50IHNsYXZlIGlzIHJlc3BvbnNpYmxlCi0gKiBmb3IgZ2VuZXJhdGluZyB0cmFmZmljIHRvIGtlZXAgdGhlbSB1cCByZWdhcmRsZXNzIG9mIGFueSBvdGhlciB0cmFmZmljIHRoZXkKLSAqIG1heSBoYXZlIHJlY2VpdmVkLgotICogc2VlIGxvYWRiYWxhbmNlX2FycF9tb25pdG9yIGZvciBhcnAgbW9uaXRvcmluZyBpbiBsb2FkIGJhbGFuY2luZyBtb2RlCisgKiBDYWxsZWQgdG8gaW5zcGVjdCBzbGF2ZXMgZm9yIGFjdGl2ZS1iYWNrdXAgbW9kZSBBUlAgbW9uaXRvciBsaW5rIHN0YXRlCisgKiBjaGFuZ2VzLiAgU2V0cyBuZXdfbGluayBpbiBzbGF2ZXMgdG8gc3BlY2lmeSB3aGF0IGFjdGlvbiBzaG91bGQgdGFrZQorICogcGxhY2UgZm9yIHRoZSBzbGF2ZS4gIFJldHVybnMgMCBpZiBubyBjaGFuZ2VzIGFyZSBmb3VuZCwgPjAgaWYgY2hhbmdlcworICogdG8gbGluayBzdGF0ZXMgbXVzdCBiZSBjb21taXR0ZWQuCisgKgorICogQ2FsbGVkIHdpdGggYm9uZC0+bG9jayBoZWxkIGZvciByZWFkLgogICovCi12b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIGludCBib25kX2FiX2FycF9pbnNwZWN0KHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgZGVsdGFfaW5fdGlja3MpCiB7Ci0Jc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsCi0JCQkJCSAgICBhcnBfd29yay53b3JrKTsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOwotCWludCBkZWx0YV9pbl90aWNrczsKLQlpbnQgaTsKKwlpbnQgaSwgY29tbWl0ID0gMDsKIAotCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7Ci0KLQlkZWx0YV9pbl90aWNrcyA9IChib25kLT5wYXJhbXMuYXJwX2ludGVydmFsICogSFopIC8gMTAwMDsKLQotCWlmIChib25kLT5raWxsX3RpbWVycykgewotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoYm9uZC0+c2xhdmVfY250ID09IDApIHsKLQkJZ290byByZV9hcm07Ci0JfQotCi0JLyogZGV0ZXJtaW5lIGlmIGFueSBzbGF2ZSBoYXMgY29tZSB1cCBvciBhbnkgYmFja3VwIHNsYXZlIGhhcwotCSAqIGdvbmUgZG93bgotCSAqIFRPRE86IHdoYXQgYWJvdXQgdXAvZG93biBkZWxheSBpbiBhcnAgbW9kZT8gaXQgd2Fzbid0IGhlcmUgYmVmb3JlCi0JICogICAgICAgc28gaXQgY2FuIHdhaXQKLQkgKi8KIAlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHNsYXZlLCBpKSB7CisJCXNsYXZlLT5uZXdfbGluayA9IEJPTkRfTElOS19OT0NIQU5HRTsKKwogCQlpZiAoc2xhdmUtPmxpbmsgIT0gQk9ORF9MSU5LX1VQKSB7Ci0JCQlpZiAodGltZV9iZWZvcmVfZXEoamlmZmllcywKLQkJCSAgICBzbGF2ZV9sYXN0X3J4KGJvbmQsIHNsYXZlKSArIGRlbHRhX2luX3RpY2tzKSkgewotCi0JCQkJc2xhdmUtPmxpbmsgPSBCT05EX0xJTktfVVA7Ci0KLQkJCQl3cml0ZV9sb2NrX2JoKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCi0JCQkJaWYgKCghYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUpICYmCi0JCQkJICAgIHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIHNsYXZlLT5kZXYtPnRyYW5zX3N0YXJ0ICsgZGVsdGFfaW5fdGlja3MpKSB7Ci0JCQkJCWJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShib25kLCBzbGF2ZSk7Ci0JCQkJCWJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlID0gTlVMTDsKLQkJCQl9IGVsc2UgaWYgKGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlICE9IHNsYXZlKSB7Ci0JCQkJCS8qIHRoaXMgc2xhdmUgaGFzIGp1c3QgY29tZSB1cCBidXQgd2UKLQkJCQkJICogYWxyZWFkeSBoYXZlIGEgY3VycmVudCBzbGF2ZTsgdGhpcwotCQkJCQkgKiBjYW4gYWxzbyBoYXBwZW4gaWYgYm9uZF9lbnNsYXZlIGFkZHMKLQkJCQkJICogYSBuZXcgc2xhdmUgdGhhdCBpcyB1cCB3aGlsZSB3ZSBhcmUKLQkJCQkJICogc2VhcmNoaW5nIGZvciBhIG5ldyBzbGF2ZQotCQkJCQkgKi8KLQkJCQkJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3Moc2xhdmUpOwotCQkJCQlib25kLT5jdXJyZW50X2FycF9zbGF2ZSA9IE5VTEw7Ci0JCQkJfQotCi0JCQkJYm9uZF9zZXRfY2Fycmllcihib25kKTsKLQotCQkJCWlmIChzbGF2ZSA9PSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCQkJCSAgICAgICAiOiAlczogJXMgaXMgdXAgYW5kIG5vdyB0aGUgIgotCQkJCQkgICAgICAgImFjdGl2ZSBpbnRlcmZhY2VcbiIsCi0JCQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsCi0JCQkJCSAgICAgICBzbGF2ZS0+ZGV2LT5uYW1lKTsKLQkJCQkJbmV0aWZfY2Fycmllcl9vbihib25kLT5kZXYpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJCQkJICAgICAgICI6ICVzOiBiYWNrdXAgaW50ZXJmYWNlICVzIGlzICIKLQkJCQkJICAgICAgICJub3cgdXBcbiIsCi0JCQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsCi0JCQkJCSAgICAgICBzbGF2ZS0+ZGV2LT5uYW1lKTsKLQkJCQl9Ci0KLQkJCQl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CisJCQlpZiAodGltZV9iZWZvcmVfZXEoamlmZmllcywgc2xhdmVfbGFzdF9yeChib25kLCBzbGF2ZSkgKworCQkJCQkgICBkZWx0YV9pbl90aWNrcykpIHsKKwkJCQlzbGF2ZS0+bmV3X2xpbmsgPSBCT05EX0xJTktfVVA7CisJCQkJY29tbWl0Kys7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZWFkX2xvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CiAKLQkJCWlmICgoc2xhdmUgIT0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUpICYmCi0JCQkgICAgKCFib25kLT5jdXJyZW50X2FycF9zbGF2ZSkgJiYKLQkJCSAgICAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzbGF2ZV9sYXN0X3J4KGJvbmQsIHNsYXZlKSArIDMqZGVsdGFfaW5fdGlja3MpICYmCi0JCQkgICAgIGJvbmRfaGFzX2lwKGJvbmQpKSkgewotCQkJCS8qIGEgYmFja3VwIHNsYXZlIGhhcyBnb25lIGRvd247IHRocmVlIHRpbWVzCi0JCQkJICogdGhlIGRlbHRhIGFsbG93cyB0aGUgY3VycmVudCBzbGF2ZSB0byBiZQotCQkJCSAqIHRha2VuIG91dCBiZWZvcmUgdGhlIGJhY2t1cCBzbGF2ZS4KLQkJCQkgKiBub3RlOiBhIG5vbi1udWxsIGN1cnJlbnRfYXJwX3NsYXZlIGluZGljYXRlcwotCQkJCSAqIHRoZSBjdXJyX2FjdGl2ZV9zbGF2ZSB3ZW50IGRvd24gYW5kIHdlIGFyZQotCQkJCSAqIHNlYXJjaGluZyBmb3IgYSBuZXcgb25lOyB1bmRlciB0aGlzCi0JCQkJICogY29uZGl0aW9uIHdlIG9ubHkgdGFrZSB0aGUgY3Vycl9hY3RpdmVfc2xhdmUKLQkJCQkgKiBkb3duIC0gdGhpcyBnaXZlcyBlYWNoIHNsYXZlIGEgY2hhbmNlIHRvCi0JCQkJICogdHgvcnggdHJhZmZpYyBiZWZvcmUgYmVpbmcgdGFrZW4gb3V0Ci0JCQkJICovCisJCQljb250aW51ZTsKKwkJfQogCi0JCQkJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CisJCS8qCisJCSAqIEdpdmUgc2xhdmVzIDIqZGVsdGEgYWZ0ZXIgYmVpbmcgZW5zbGF2ZWQgb3IgbWFkZQorCQkgKiBhY3RpdmUuICBUaGlzIGF2b2lkcyBib3VuY2luZywgYXMgdGhlIGxhc3QgcmVjZWl2ZQorCQkgKiB0aW1lcyBuZWVkIGEgZnVsbCBBUlAgbW9uaXRvciBjeWNsZSB0byBiZSB1cGRhdGVkLgorCQkgKi8KKwkJaWYgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHNsYXZlLT5qaWZmaWVzICsKKwkJCQkgICAyICogZGVsdGFfaW5fdGlja3MpKQorCQkJY29udGludWU7CiAKLQkJCQlzbGF2ZS0+bGluayAgPSBCT05EX0xJTktfRE9XTjsKKwkJLyoKKwkJICogQmFja3VwIHNsYXZlIGlzIGRvd24gaWY6CisJCSAqIC0gTm8gY3VycmVudF9hcnBfc2xhdmUgQU5ECisJCSAqIC0gbW9yZSB0aGFuIDMqZGVsdGEgc2luY2UgbGFzdCByZWNlaXZlIEFORAorCQkgKiAtIHRoZSBib25kIGhhcyBhbiBJUCBhZGRyZXNzCisJCSAqCisJCSAqIE5vdGU6IGEgbm9uLW51bGwgY3VycmVudF9hcnBfc2xhdmUgaW5kaWNhdGVzCisJCSAqIHRoZSBjdXJyX2FjdGl2ZV9zbGF2ZSB3ZW50IGRvd24gYW5kIHdlIGFyZQorCQkgKiBzZWFyY2hpbmcgZm9yIGEgbmV3IG9uZTsgdW5kZXIgdGhpcyBjb25kaXRpb24KKwkJICogd2Ugb25seSB0YWtlIHRoZSBjdXJyX2FjdGl2ZV9zbGF2ZSBkb3duIC0gdGhpcworCQkgKiBnaXZlcyBlYWNoIHNsYXZlIGEgY2hhbmNlIHRvIHR4L3J4IHRyYWZmaWMKKwkJICogYmVmb3JlIGJlaW5nIHRha2VuIG91dAorCQkgKi8KKwkJaWYgKHNsYXZlLT5zdGF0ZSA9PSBCT05EX1NUQVRFX0JBQ0tVUCAmJgorCQkgICAgIWJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHNsYXZlX2xhc3RfcngoYm9uZCwgc2xhdmUpICsKKwkJCSAgICAgICAzICogZGVsdGFfaW5fdGlja3MpKSB7CisJCQlzbGF2ZS0+bmV3X2xpbmsgPSBCT05EX0xJTktfRE9XTjsKKwkJCWNvbW1pdCsrOworCQl9CiAKLQkJCQlpZiAoc2xhdmUtPmxpbmtfZmFpbHVyZV9jb3VudCA8IFVJTlRfTUFYKSB7Ci0JCQkJCXNsYXZlLT5saW5rX2ZhaWx1cmVfY291bnQrKzsKLQkJCQl9Ci0KLQkJCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhzbGF2ZSk7Ci0KLQkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCQkJICAgICAgICI6ICVzOiBiYWNrdXAgaW50ZXJmYWNlICVzIGlzIG5vdyBkb3duXG4iLAotCQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsCi0JCQkJICAgICAgIHNsYXZlLT5kZXYtPm5hbWUpOwotCQkJfSBlbHNlIHsKLQkJCQlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKLQkJCX0KKwkJLyoKKwkJICogQWN0aXZlIHNsYXZlIGlzIGRvd24gaWY6CisJCSAqIC0gbW9yZSB0aGFuIDIqZGVsdGEgc2luY2UgdHJhbnNtaXR0aW5nIE9SCisJCSAqIC0gKG1vcmUgdGhhbiAyKmRlbHRhIHNpbmNlIHJlY2VpdmUgQU5ECisJCSAqICAgIHRoZSBib25kIGhhcyBhbiBJUCBhZGRyZXNzKQorCQkgKi8KKwkJaWYgKChzbGF2ZS0+c3RhdGUgPT0gQk9ORF9TVEFURV9BQ1RJVkUpICYmCisJCSAgICAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzbGF2ZS0+ZGV2LT50cmFuc19zdGFydCArCisJCQkJICAgIDIgKiBkZWx0YV9pbl90aWNrcykgfHwKKwkJICAgICAgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc2xhdmVfbGFzdF9yeChib25kLCBzbGF2ZSkKKwkJCQkgICAgICsgMiAqIGRlbHRhX2luX3RpY2tzKSkpKSB7CisJCQlzbGF2ZS0+bmV3X2xpbmsgPSBCT05EX0xJTktfRE9XTjsKKwkJCWNvbW1pdCsrOwogCQl9CiAJfQogCiAJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCXNsYXZlID0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmU7CisKKwkvKgorCSAqIFRyaWdnZXIgYSBjb21taXQgaWYgdGhlIHByaW1hcnkgb3B0aW9uIHNldHRpbmcgaGFzIGNoYW5nZWQuCisJICovCisJaWYgKGJvbmQtPnByaW1hcnlfc2xhdmUgJiYKKwkgICAgKGJvbmQtPnByaW1hcnlfc2xhdmUgIT0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUpICYmCisJICAgIChib25kLT5wcmltYXJ5X3NsYXZlLT5saW5rID09IEJPTkRfTElOS19VUCkpCisJCWNvbW1pdCsrOworCiAJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CiAKLQlpZiAoc2xhdmUpIHsKLQkJLyogaWYgd2UgaGF2ZSBzZW50IHRyYWZmaWMgaW4gdGhlIHBhc3QgMiphcnBfaW50ZXJ2YWxzIGJ1dAotCQkgKiBoYXZlbid0IHhtaXQgYW5kIHJ4IHRyYWZmaWMgaW4gdGhhdCB0aW1lIGludGVydmFsLCBzZWxlY3QKLQkJICogYSBkaWZmZXJlbnQgc2xhdmUuIHNsYXZlLT5qaWZmaWVzIGlzIG9ubHkgdXBkYXRlZCB3aGVuCi0JCSAqIGEgc2xhdmUgZmlyc3QgYmVjb21lcyB0aGUgY3Vycl9hY3RpdmVfc2xhdmUgLSBub3QgbmVjZXNzYXJpbHkKLQkJICogYWZ0ZXIgZXZlcnkgYXJwOyB0aGlzIGVuc3VyZXMgdGhlIHNsYXZlIGhhcyBhIGZ1bGwgMipkZWx0YQotCQkgKiBiZWZvcmUgYmVpbmcgdGFrZW4gb3V0LiBpZiBhIHByaW1hcnkgaXMgYmVpbmcgdXNlZCwgY2hlY2sKLQkJICogaWYgaXQgaXMgdXAgYW5kIG5lZWRzIHRvIHRha2Ugb3ZlciBhcyB0aGUgY3Vycl9hY3RpdmVfc2xhdmUKLQkJICovCi0JCWlmICgodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzbGF2ZS0+ZGV2LT50cmFuc19zdGFydCArIDIqZGVsdGFfaW5fdGlja3MpIHx8Ci0JCQkodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzbGF2ZV9sYXN0X3J4KGJvbmQsIHNsYXZlKSArIDIqZGVsdGFfaW5fdGlja3MpICYmCi0JCQkgYm9uZF9oYXNfaXAoYm9uZCkpKSAmJgotCQkJdGltZV9hZnRlcl9lcShqaWZmaWVzLCBzbGF2ZS0+amlmZmllcyArIDIqZGVsdGFfaW5fdGlja3MpKSB7CisJcmV0dXJuIGNvbW1pdDsKK30KIAotCQkJc2xhdmUtPmxpbmsgID0gQk9ORF9MSU5LX0RPV047CisvKgorICogQ2FsbGVkIHRvIGNvbW1pdCBsaW5rIHN0YXRlIGNoYW5nZXMgbm90ZWQgYnkgaW5zcGVjdGlvbiBzdGVwIG9mCisgKiBhY3RpdmUtYmFja3VwIG1vZGUgQVJQIG1vbml0b3IuCisgKgorICogQ2FsbGVkIHdpdGggUlROTCBhbmQgYm9uZC0+bG9jayBmb3IgcmVhZC4KKyAqLworc3RhdGljIHZvaWQgYm9uZF9hYl9hcnBfY29tbWl0KHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgZGVsdGFfaW5fdGlja3MpCit7CisJc3RydWN0IHNsYXZlICpzbGF2ZTsKKwlpbnQgaTsKIAotCQkJaWYgKHNsYXZlLT5saW5rX2ZhaWx1cmVfY291bnQgPCBVSU5UX01BWCkgeworCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKKwkJc3dpdGNoIChzbGF2ZS0+bmV3X2xpbmspIHsKKwkJY2FzZSBCT05EX0xJTktfTk9DSEFOR0U6CisJCQljb250aW51ZTsKKworCQljYXNlIEJPTkRfTElOS19VUDoKKwkJCXdyaXRlX2xvY2tfYmgoJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CisKKwkJCWlmICghYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUgJiYKKwkJCSAgICB0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCBzbGF2ZS0+ZGV2LT50cmFuc19zdGFydCArCisJCQkJCSAgIGRlbHRhX2luX3RpY2tzKSkgeworCQkJCXNsYXZlLT5saW5rID0gQk9ORF9MSU5LX1VQOworCQkJCWJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShib25kLCBzbGF2ZSk7CisJCQkJYm9uZC0+Y3VycmVudF9hcnBfc2xhdmUgPSBOVUxMOworCisJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkJCSAgICAgICAiOiAlczogJXMgaXMgdXAgYW5kIG5vdyB0aGUgIgorCQkJCSAgICAgICAiYWN0aXZlIGludGVyZmFjZVxuIiwKKwkJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKworCQkJfSBlbHNlIGlmIChib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSAhPSBzbGF2ZSkgeworCQkJCS8qIHRoaXMgc2xhdmUgaGFzIGp1c3QgY29tZSB1cCBidXQgd2UKKwkJCQkgKiBhbHJlYWR5IGhhdmUgYSBjdXJyZW50IHNsYXZlOyB0aGlzIGNhbgorCQkJCSAqIGFsc28gaGFwcGVuIGlmIGJvbmRfZW5zbGF2ZSBhZGRzIGEgbmV3CisJCQkJICogc2xhdmUgdGhhdCBpcyB1cCB3aGlsZSB3ZSBhcmUgc2VhcmNoaW5nCisJCQkJICogZm9yIGEgbmV3IHNsYXZlCisJCQkJICovCisJCQkJc2xhdmUtPmxpbmsgPSBCT05EX0xJTktfVVA7CisJCQkJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3Moc2xhdmUpOworCQkJCWJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlID0gTlVMTDsKKworCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCQkgICAgICAgIjogJXM6IGJhY2t1cCBpbnRlcmZhY2UgJXMgaXMgbm93IHVwXG4iLAorCQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOworCQkJfQorCisJCQl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CisKKwkJCWJyZWFrOworCisJCWNhc2UgQk9ORF9MSU5LX0RPV046CisJCQlpZiAoc2xhdmUtPmxpbmtfZmFpbHVyZV9jb3VudCA8IFVJTlRfTUFYKQogCQkJCXNsYXZlLT5saW5rX2ZhaWx1cmVfY291bnQrKzsKLQkJCX0KIAotCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkJICAgICAgICI6ICVzOiBsaW5rIHN0YXR1cyBkb3duIGZvciBhY3RpdmUgaW50ZXJmYWNlICIKLQkJCSAgICAgICAiJXMsIGRpc2FibGluZyBpdFxuIiwKLQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsCisJCQlzbGF2ZS0+bGluayA9IEJPTkRfTElOS19ET1dOOworCisJCQlpZiAoc2xhdmUgPT0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkJICAgICAgICI6ICVzOiBsaW5rIHN0YXR1cyBkb3duIGZvciBhY3RpdmUgIgorCQkJCSAgICAgICAiaW50ZXJmYWNlICVzLCBkaXNhYmxpbmcgaXRcbiIsCisJCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CisKKwkJCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhzbGF2ZSk7CisKKwkJCQl3cml0ZV9sb2NrX2JoKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOworCisJCQkJYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpOworCQkJCWlmIChib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSkKKwkJCQkJYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUtPmppZmZpZXMgPQorCQkJCQkJamlmZmllczsKKworCQkJCXdyaXRlX3VubG9ja19iaCgmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKworCQkJCWJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlID0gTlVMTDsKKworCQkJfSBlbHNlIGlmIChzbGF2ZS0+c3RhdGUgPT0gQk9ORF9TVEFURV9CQUNLVVApIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkJICAgICAgICI6ICVzOiBiYWNrdXAgaW50ZXJmYWNlICVzIGlzIG5vdyBkb3duXG4iLAorCQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOworCisJCQkJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3Moc2xhdmUpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBpbXBvc3NpYmxlOiBuZXdfbGluayAlZCBvbiBzbGF2ZSAlc1xuIiwKKwkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIHNsYXZlLT5uZXdfbGluaywKIAkJCSAgICAgICBzbGF2ZS0+ZGV2LT5uYW1lKTsKLQotCQkJd3JpdGVfbG9ja19iaCgmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKLQotCQkJYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpOwotCQkJc2xhdmUgPSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZTsKLQotCQkJd3JpdGVfdW5sb2NrX2JoKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCi0JCQlib25kLT5jdXJyZW50X2FycF9zbGF2ZSA9IHNsYXZlOwotCi0JCQlpZiAoc2xhdmUpIHsKLQkJCQlzbGF2ZS0+amlmZmllcyA9IGppZmZpZXM7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoKGJvbmQtPnByaW1hcnlfc2xhdmUpICYmCi0JCQkgICAoYm9uZC0+cHJpbWFyeV9zbGF2ZSAhPSBzbGF2ZSkgJiYKLQkJCSAgIChib25kLT5wcmltYXJ5X3NsYXZlLT5saW5rID09IEJPTkRfTElOS19VUCkpIHsKLQkJCS8qIGF0IHRoaXMgcG9pbnQsIHNsYXZlIGlzIHRoZSBjdXJyX2FjdGl2ZV9zbGF2ZSAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkJICAgICAgICI6ICVzOiBjaGFuZ2luZyBmcm9tIGludGVyZmFjZSAlcyB0byBwcmltYXJ5ICIKLQkJCSAgICAgICAiaW50ZXJmYWNlICVzXG4iLAotCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwKLQkJCSAgICAgICBzbGF2ZS0+ZGV2LT5uYW1lLAotCQkJICAgICAgIGJvbmQtPnByaW1hcnlfc2xhdmUtPmRldi0+bmFtZSk7Ci0KLQkJCS8qIHByaW1hcnkgaXMgdXAgc28gc3dpdGNoIHRvIGl0ICovCi0JCQl3cml0ZV9sb2NrX2JoKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCQkJYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKGJvbmQsIGJvbmQtPnByaW1hcnlfc2xhdmUpOwotCQkJd3JpdGVfdW5sb2NrX2JoKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCi0JCQlzbGF2ZSA9IGJvbmQtPnByaW1hcnlfc2xhdmU7Ci0JCQlzbGF2ZS0+amlmZmllcyA9IGppZmZpZXM7Ci0JCX0gZWxzZSB7Ci0JCQlib25kLT5jdXJyZW50X2FycF9zbGF2ZSA9IE5VTEw7Ci0JCX0KLQotCQkvKiB0aGUgY3VycmVudCBzbGF2ZSBtdXN0IHR4IGFuIGFycCB0byBlbnN1cmUgYmFja3VwIHNsYXZlcwotCQkgKiByeCB0cmFmZmljCi0JCSAqLwotCQlpZiAoc2xhdmUgJiYgYm9uZF9oYXNfaXAoYm9uZCkpIHsKLQkJCWJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIHNsYXZlKTsKIAkJfQogCX0KIAorCS8qCisJICogTm8gcmFjZSB3aXRoIGNoYW5nZXMgdG8gcHJpbWFyeSB2aWEgc3lzZnMsIGFzIHdlIGhvbGQgcnRubC4KKwkgKi8KKwlpZiAoYm9uZC0+cHJpbWFyeV9zbGF2ZSAmJgorCSAgICAoYm9uZC0+cHJpbWFyeV9zbGF2ZSAhPSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSkgJiYKKwkgICAgKGJvbmQtPnByaW1hcnlfc2xhdmUtPmxpbmsgPT0gQk9ORF9MSU5LX1VQKSkgeworCQl3cml0ZV9sb2NrX2JoKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOworCQlib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoYm9uZCwgYm9uZC0+cHJpbWFyeV9zbGF2ZSk7CisJCXdyaXRlX3VubG9ja19iaCgmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKwl9CisKKwlib25kX3NldF9jYXJyaWVyKGJvbmQpOworfQorCisvKgorICogU2VuZCBBUlAgcHJvYmVzIGZvciBhY3RpdmUtYmFja3VwIG1vZGUgQVJQIG1vbml0b3IuCisgKgorICogQ2FsbGVkIHdpdGggYm9uZC0+bG9jayBoZWxkIGZvciByZWFkLgorICovCitzdGF0aWMgdm9pZCBib25kX2FiX2FycF9wcm9iZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKK3sKKwlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOworCWludCBpOworCisJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOworCisJaWYgKGJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlICYmIGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlKQorCQlwcmludGsoIlBST0JFOiBjX2FycCAlcyAmJiBjYXMgJXMgQkFEXG4iLAorCQkgICAgICAgYm9uZC0+Y3VycmVudF9hcnBfc2xhdmUtPmRldi0+bmFtZSwKKwkJICAgICAgIGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlLT5kZXYtPm5hbWUpOworCisJaWYgKGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlKSB7CisJCWJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlKTsKKwkJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKwogCS8qIGlmIHdlIGRvbid0IGhhdmUgYSBjdXJyX2FjdGl2ZV9zbGF2ZSwgc2VhcmNoIGZvciB0aGUgbmV4dCBhdmFpbGFibGUKIAkgKiBiYWNrdXAgc2xhdmUgZnJvbSB0aGUgY3VycmVudF9hcnBfc2xhdmUgYW5kIG1ha2UgaXQgdGhlIGNhbmRpZGF0ZQogCSAqIGZvciBiZWNvbWluZyB0aGUgY3Vycl9hY3RpdmVfc2xhdmUKIAkgKi8KLQlpZiAoIXNsYXZlKSB7Ci0JCWlmICghYm9uZC0+Y3VycmVudF9hcnBfc2xhdmUpIHsKLQkJCWJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlID0gYm9uZC0+Zmlyc3Rfc2xhdmU7CisKKwlpZiAoIWJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlKSB7CisJCWJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlID0gYm9uZC0+Zmlyc3Rfc2xhdmU7CisJCWlmICghYm9uZC0+Y3VycmVudF9hcnBfc2xhdmUpCisJCQlyZXR1cm47CisJfQorCisJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3MoYm9uZC0+Y3VycmVudF9hcnBfc2xhdmUpOworCisJLyogc2VhcmNoIGZvciBuZXh0IGNhbmRpZGF0ZSAqLworCWJvbmRfZm9yX2VhY2hfc2xhdmVfZnJvbShib25kLCBzbGF2ZSwgaSwgYm9uZC0+Y3VycmVudF9hcnBfc2xhdmUtPm5leHQpIHsKKwkJaWYgKElTX1VQKHNsYXZlLT5kZXYpKSB7CisJCQlzbGF2ZS0+bGluayA9IEJPTkRfTElOS19CQUNLOworCQkJYm9uZF9zZXRfc2xhdmVfYWN0aXZlX2ZsYWdzKHNsYXZlKTsKKwkJCWJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIHNsYXZlKTsKKwkJCXNsYXZlLT5qaWZmaWVzID0gamlmZmllczsKKwkJCWJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlID0gc2xhdmU7CisJCQlicmVhazsKIAkJfQogCi0JCWlmIChib25kLT5jdXJyZW50X2FycF9zbGF2ZSkgewotCQkJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3MoYm9uZC0+Y3VycmVudF9hcnBfc2xhdmUpOworCQkvKiBpZiB0aGUgbGluayBzdGF0ZSBpcyB1cCBhdCB0aGlzIHBvaW50LCB3ZQorCQkgKiBtYXJrIGl0IGRvd24gLSB0aGlzIGNhbiBoYXBwZW4gaWYgd2UgaGF2ZQorCQkgKiBzaW11bHRhbmVvdXMgbGluayBmYWlsdXJlcyBhbmQKKwkJICogcmVzZWxlY3RfYWN0aXZlX2ludGVyZmFjZSBkb2Vzbid0IG1ha2UgdGhpcworCQkgKiBvbmUgdGhlIGN1cnJlbnQgc2xhdmUgc28gaXQgaXMgc3RpbGwgbWFya2VkCisJCSAqIHVwIHdoZW4gaXQgaXMgYWN0dWFsbHkgZG93bgorCQkgKi8KKwkJaWYgKHNsYXZlLT5saW5rID09IEJPTkRfTElOS19VUCkgeworCQkJc2xhdmUtPmxpbmsgPSBCT05EX0xJTktfRE9XTjsKKwkJCWlmIChzbGF2ZS0+bGlua19mYWlsdXJlX2NvdW50IDwgVUlOVF9NQVgpCisJCQkJc2xhdmUtPmxpbmtfZmFpbHVyZV9jb3VudCsrOwogCi0JCQkvKiBzZWFyY2ggZm9yIG5leHQgY2FuZGlkYXRlICovCi0JCQlib25kX2Zvcl9lYWNoX3NsYXZlX2Zyb20oYm9uZCwgc2xhdmUsIGksIGJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlLT5uZXh0KSB7Ci0JCQkJaWYgKElTX1VQKHNsYXZlLT5kZXYpKSB7Ci0JCQkJCXNsYXZlLT5saW5rID0gQk9ORF9MSU5LX0JBQ0s7Ci0JCQkJCWJvbmRfc2V0X3NsYXZlX2FjdGl2ZV9mbGFncyhzbGF2ZSk7Ci0JCQkJCWJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIHNsYXZlKTsKLQkJCQkJc2xhdmUtPmppZmZpZXMgPSBqaWZmaWVzOwotCQkJCQlib25kLT5jdXJyZW50X2FycF9zbGF2ZSA9IHNsYXZlOwotCQkJCQlicmVhazsKLQkJCQl9CisJCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhzbGF2ZSk7CiAKLQkJCQkvKiBpZiB0aGUgbGluayBzdGF0ZSBpcyB1cCBhdCB0aGlzIHBvaW50LCB3ZQotCQkJCSAqIG1hcmsgaXQgZG93biAtIHRoaXMgY2FuIGhhcHBlbiBpZiB3ZSBoYXZlCi0JCQkJICogc2ltdWx0YW5lb3VzIGxpbmsgZmFpbHVyZXMgYW5kCi0JCQkJICogcmVzZWxlY3RfYWN0aXZlX2ludGVyZmFjZSBkb2Vzbid0IG1ha2UgdGhpcwotCQkJCSAqIG9uZSB0aGUgY3VycmVudCBzbGF2ZSBzbyBpdCBpcyBzdGlsbCBtYXJrZWQKLQkJCQkgKiB1cCB3aGVuIGl0IGlzIGFjdHVhbGx5IGRvd24KLQkJCQkgKi8KLQkJCQlpZiAoc2xhdmUtPmxpbmsgPT0gQk9ORF9MSU5LX1VQKSB7Ci0JCQkJCXNsYXZlLT5saW5rICA9IEJPTkRfTElOS19ET1dOOwotCQkJCQlpZiAoc2xhdmUtPmxpbmtfZmFpbHVyZV9jb3VudCA8IFVJTlRfTUFYKSB7Ci0JCQkJCQlzbGF2ZS0+bGlua19mYWlsdXJlX2NvdW50Kys7Ci0JCQkJCX0KLQotCQkJCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhzbGF2ZSk7Ci0KLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkJCQkgICAgICAgIjogJXM6IGJhY2t1cCBpbnRlcmZhY2UgJXMgaXMgIgotCQkJCQkgICAgICAgIm5vdyBkb3duLlxuIiwKLQkJCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwKLQkJCQkJICAgICAgIHNsYXZlLT5kZXYtPm5hbWUpOwotCQkJCX0KLQkJCX0KKwkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCSAgICAgICAiOiAlczogYmFja3VwIGludGVyZmFjZSAlcyBpcyBub3cgZG93bi5cbiIsCisJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKIAkJfQogCX0KK30KKwordm9pZCBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZywKKwkJCQkJICAgIGFycF93b3JrLndvcmspOworCWludCBkZWx0YV9pbl90aWNrczsKKworCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CisKKwlpZiAoYm9uZC0+a2lsbF90aW1lcnMpCisJCWdvdG8gb3V0OworCisJZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtPnBhcmFtcy5hcnBfaW50ZXJ2YWwpOworCisJaWYgKGJvbmQtPnNsYXZlX2NudCA9PSAwKQorCQlnb3RvIHJlX2FybTsKKworCWlmIChib25kLT5zZW5kX2dyYXRfYXJwKSB7CisJCXJlYWRfbG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKwkJYm9uZF9zZW5kX2dyYXR1aXRvdXNfYXJwKGJvbmQpOworCQlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKwl9CisKKwlpZiAoYm9uZF9hYl9hcnBfaW5zcGVjdChib25kLCBkZWx0YV9pbl90aWNrcykpIHsKKwkJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworCQlydG5sX2xvY2soKTsKKwkJcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKKworCQlib25kX2FiX2FycF9jb21taXQoYm9uZCwgZGVsdGFfaW5fdGlja3MpOworCisJCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKwkJcnRubF91bmxvY2soKTsKKwkJcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKKwl9CisKKwlib25kX2FiX2FycF9wcm9iZShib25kKTsKIAogcmVfYXJtOgogCWlmIChib25kLT5wYXJhbXMuYXJwX2ludGVydmFsKSB7CkBAIC0zMTI4LDcgKzMyNzcsOCBAQAogCiAJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVAgJiYKIAkgICAgYm9uZC0+cGFyYW1zLmZhaWxfb3Zlcl9tYWMpCi0JCXNlcV9wcmludGYoc2VxLCAiIChmYWlsX292ZXJfbWFjKSIpOworCQlzZXFfcHJpbnRmKHNlcSwgIiAoZmFpbF9vdmVyX21hYyAlcykiLAorCQkgICBmYWlsX292ZXJfbWFjX3RibFtib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hY10ubW9kZW5hbWUpOwogCiAJc2VxX3ByaW50ZihzZXEsICJcbiIpOwogCkBAIC0zNTAwLDEzICszNjUwLDEzIEBACiB7CiAJc3RydWN0IGluX2lmYWRkciAqaWZhID0gcHRyOwogCXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldiwgKmV2ZW50X2RldiA9IGlmYS0+aWZhX2Rldi0+ZGV2OwotCXN0cnVjdCBib25kaW5nICpib25kLCAqYm9uZF9uZXh0OwotCXN0cnVjdCB2bGFuX2VudHJ5ICp2bGFuLCAqdmxhbl9uZXh0OworCXN0cnVjdCBib25kaW5nICpib25kOworCXN0cnVjdCB2bGFuX2VudHJ5ICp2bGFuOwogCiAJaWYgKGRldl9uZXQoaWZhLT5pZmFfZGV2LT5kZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJvbmQsIGJvbmRfbmV4dCwgJmJvbmRfZGV2X2xpc3QsIGJvbmRfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoYm9uZCwgJmJvbmRfZGV2X2xpc3QsIGJvbmRfbGlzdCkgewogCQlpZiAoYm9uZC0+ZGV2ID09IGV2ZW50X2RldikgewogCQkJc3dpdGNoIChldmVudCkgewogCQkJY2FzZSBORVRERVZfVVA6CkBAIC0zNTIwLDExICszNjcwLDcgQEAKIAkJCX0KIAkJfQogCi0JCWlmIChsaXN0X2VtcHR5KCZib25kLT52bGFuX2xpc3QpKQotCQkJY29udGludWU7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIHZsYW5fbmV4dCwgJmJvbmQtPnZsYW5fbGlzdCwKLQkJCQkJIHZsYW5fbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sICZib25kLT52bGFuX2xpc3QsIHZsYW5fbGlzdCkgewogCQkJdmxhbl9kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoYm9uZC0+dmxncnAsIHZsYW4tPnZsYW5faWQpOwogCQkJaWYgKHZsYW5fZGV2ID09IGV2ZW50X2RldikgewogCQkJCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTM3MTYsNiArMzg2Miw3IEBACiAKIAl3cml0ZV9sb2NrX2JoKCZib25kLT5sb2NrKTsKIAorCWJvbmQtPnNlbmRfZ3JhdF9hcnAgPSAwOwogCiAJLyogc2lnbmFsIHRpbWVycyBub3QgdG8gcmUtYXJtICovCiAJYm9uZC0+a2lsbF90aW1lcnMgPSAxOwpAQCAtMzkzMyw2ICs0MDgwLDEwIEBACiAJICogRG8gcHJvbWlzYyBiZWZvcmUgY2hlY2tpbmcgbXVsdGljYXN0X21vZGUKIAkgKi8KIAlpZiAoKGJvbmRfZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAmJiAhKGJvbmQtPmZsYWdzICYgSUZGX1BST01JU0MpKSB7CisJCS8qCisJCSAqIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSB0aGUgZXJyb3Igd2hlbiBvbmUgb2YgdGhlIG11bHRpLXNsYXZlcworCQkgKiBlbmNvdW50ZXJzIGVycm9yLgorCQkgKi8KIAkJYm9uZF9zZXRfcHJvbWlzY3VpdHkoYm9uZCwgMSk7CiAJfQogCkBAIC0zOTQyLDYgKzQwOTMsMTAgQEAKIAogCS8qIHNldCBhbGxtdWx0aSBmbGFnIHRvIHNsYXZlcyAqLwogCWlmICgoYm9uZF9kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAmJiAhKGJvbmQtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQkvKgorCQkgKiBGSVhNRTogTmVlZCB0byBoYW5kbGUgdGhlIGVycm9yIHdoZW4gb25lIG9mIHRoZSBtdWx0aS1zbGF2ZXMKKwkJICogZW5jb3VudGVycyBlcnJvci4KKwkJICovCiAJCWJvbmRfc2V0X2FsbG11bHRpKGJvbmQsIDEpOwogCX0KIApAQCAtNDA2MCwxMCArNDIxNSwxMCBAQAogCWRwcmludGsoImJvbmQ9JXAsIG5hbWU9JXNcbiIsIGJvbmQsIChib25kX2RldiA/IGJvbmRfZGV2LT5uYW1lIDogIk5vbmUiKSk7CiAKIAkvKgotCSAqIElmIGZhaWxfb3Zlcl9tYWMgaXMgZW5hYmxlZCwgZG8gbm90aGluZyBhbmQgcmV0dXJuIHN1Y2Nlc3MuCi0JICogUmV0dXJuaW5nIGFuIGVycm9yIGNhdXNlcyBpZmVuc2xhdmUgdG8gZmFpbC4KKwkgKiBJZiBmYWlsX292ZXJfbWFjIGlzIHNldCB0byBhY3RpdmUsIGRvIG5vdGhpbmcgYW5kIHJldHVybgorCSAqIHN1Y2Nlc3MuICBSZXR1cm5pbmcgYW4gZXJyb3IgY2F1c2VzIGlmZW5zbGF2ZSB0byBmYWlsLgogCSAqLwotCWlmIChib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYykKKwlpZiAoYm9uZC0+cGFyYW1zLmZhaWxfb3Zlcl9tYWMgPT0gQk9ORF9GT01fQUNUSVZFKQogCQlyZXR1cm4gMDsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihzYS0+c2FfZGF0YSkpIHsKQEAgLTQ1MTgsOSArNDY3Myw5IEBACiAJCXN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldiA9IGJvbmQtPmRldjsKIAogCQlib25kX3dvcmtfY2FuY2VsX2FsbChib25kKTsKLQkJbmV0aWZfdHhfbG9ja19iaChib25kX2Rldik7CisJCW5ldGlmX2FkZHJfbG9ja19iaChib25kX2Rldik7CiAJCWJvbmRfbWNfbGlzdF9kZXN0cm95KGJvbmQpOwotCQluZXRpZl90eF91bmxvY2tfYmgoYm9uZF9kZXYpOworCQluZXRpZl9hZGRyX3VubG9ja19iaChib25kX2Rldik7CiAJCS8qIFJlbGVhc2UgdGhlIGJvbmRlZCBzbGF2ZXMgKi8KIAkJYm9uZF9yZWxlYXNlX2FsbChib25kX2Rldik7CiAJCWJvbmRfZGVzdHJveShib25kKTsKQEAgLTQ1NjgsNyArNDcyMyw3IEBACiAKIHN0YXRpYyBpbnQgYm9uZF9jaGVja19wYXJhbXMoc3RydWN0IGJvbmRfcGFyYW1zICpwYXJhbXMpCiB7Ci0JaW50IGFycF92YWxpZGF0ZV92YWx1ZTsKKwlpbnQgYXJwX3ZhbGlkYXRlX3ZhbHVlLCBmYWlsX292ZXJfbWFjX3ZhbHVlOwogCiAJLyoKIAkgKiBDb252ZXJ0IHN0cmluZyBwYXJhbWV0ZXJzLgpAQCAtNDYxOCwxMSArNDc3MywxMSBAQAogCQl9CiAJfQogCi0JaWYgKG1heF9ib25kcyA8IDEgfHwgbWF4X2JvbmRzID4gSU5UX01BWCkgeworCWlmIChtYXhfYm9uZHMgPCAwIHx8IG1heF9ib25kcyA+IElOVF9NQVgpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQogCQkgICAgICAgIjogV2FybmluZzogbWF4X2JvbmRzICglZCkgbm90IGluIHJhbmdlICVkLSVkLCBzbyBpdCAiCiAJCSAgICAgICAid2FzIHJlc2V0IHRvIEJPTkRfREVGQVVMVF9NQVhfQk9ORFMgKCVkKVxuIiwKLQkJICAgICAgIG1heF9ib25kcywgMSwgSU5UX01BWCwgQk9ORF9ERUZBVUxUX01BWF9CT05EUyk7CisJCSAgICAgICBtYXhfYm9uZHMsIDAsIElOVF9NQVgsIEJPTkRfREVGQVVMVF9NQVhfQk9ORFMpOwogCQltYXhfYm9uZHMgPSBCT05EX0RFRkFVTFRfTUFYX0JPTkRTOwogCX0KIApAQCAtNDY1OCw2ICs0ODEzLDEzIEBACiAJCXVzZV9jYXJyaWVyID0gMTsKIAl9CiAKKwlpZiAobnVtX2dyYXRfYXJwIDwgMCB8fCBudW1fZ3JhdF9hcnAgPiAyNTUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkgICAgICAgIjogV2FybmluZzogbnVtX2dyYXRfYXJwICglZCkgbm90IGluIHJhbmdlIDAtMjU1IHNvIGl0ICIKKwkJICAgICAgICJ3YXMgcmVzZXQgdG8gMSBcbiIsIG51bV9ncmF0X2FycCk7CisJCW51bV9ncmF0X2FycCA9IDE7CisJfQorCiAJLyogcmVzZXQgdmFsdWVzIGZvciA4MDIuM2FkICovCiAJaWYgKGJvbmRfbW9kZSA9PSBCT05EX01PREVfODAyM0FEKSB7CiAJCWlmICghbWlpbW9uKSB7CkBAIC00ODE0LDcgKzQ5NzYsNyBAQAogCiAJCXByaW50aygiXG4iKTsKIAotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChtYXhfYm9uZHMpIHsKIAkJLyogbWlpbW9uIGFuZCBhcnBfaW50ZXJ2YWwgbm90IHNldCwgd2UgbmVlZCBvbmUgc28gdGhpbmdzCiAJCSAqIHdvcmsgYXMgZXhwZWN0ZWQsIHNlZSBib25kaW5nLnR4dCBmb3IgZGV0YWlscwogCQkgKi8KQEAgLTQ4MzYsMTUgKzQ5OTgsMjkgQEAKIAkJcHJpbWFyeSA9IE5VTEw7CiAJfQogCi0JaWYgKGZhaWxfb3Zlcl9tYWMgJiYgKGJvbmRfbW9kZSAhPSBCT05EX01PREVfQUNUSVZFQkFDS1VQKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkgICAgICAgIjogV2FybmluZzogZmFpbF9vdmVyX21hYyBvbmx5IGFmZmVjdHMgIgotCQkgICAgICAgImFjdGl2ZS1iYWNrdXAgbW9kZS5cbiIpOworCWlmIChmYWlsX292ZXJfbWFjKSB7CisJCWZhaWxfb3Zlcl9tYWNfdmFsdWUgPSBib25kX3BhcnNlX3Bhcm0oZmFpbF9vdmVyX21hYywKKwkJCQkJCSAgICAgIGZhaWxfb3Zlcl9tYWNfdGJsKTsKKwkJaWYgKGZhaWxfb3Zlcl9tYWNfdmFsdWUgPT0gLTEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJICAgICAgICI6IEVycm9yOiBpbnZhbGlkIGZhaWxfb3Zlcl9tYWMgXCIlc1wiXG4iLAorCQkJICAgICAgIGFycF92YWxpZGF0ZSA9PSBOVUxMID8gIk5VTEwiIDogYXJwX3ZhbGlkYXRlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGJvbmRfbW9kZSAhPSBCT05EX01PREVfQUNUSVZFQkFDS1VQKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkJICAgICAgICI6IFdhcm5pbmc6IGZhaWxfb3Zlcl9tYWMgb25seSBhZmZlY3RzICIKKwkJCSAgICAgICAiYWN0aXZlLWJhY2t1cCBtb2RlLlxuIik7CisJfSBlbHNlIHsKKwkJZmFpbF9vdmVyX21hY192YWx1ZSA9IEJPTkRfRk9NX05PTkU7CisJfQogCiAJLyogZmlsbCBwYXJhbXMgc3RydWN0IHdpdGggdGhlIHByb3BlciB2YWx1ZXMgKi8KIAlwYXJhbXMtPm1vZGUgPSBib25kX21vZGU7CiAJcGFyYW1zLT54bWl0X3BvbGljeSA9IHhtaXRfaGFzaHR5cGU7CiAJcGFyYW1zLT5taWltb24gPSBtaWltb247CisJcGFyYW1zLT5udW1fZ3JhdF9hcnAgPSBudW1fZ3JhdF9hcnA7CiAJcGFyYW1zLT5hcnBfaW50ZXJ2YWwgPSBhcnBfaW50ZXJ2YWw7CiAJcGFyYW1zLT5hcnBfdmFsaWRhdGUgPSBhcnBfdmFsaWRhdGVfdmFsdWU7CiAJcGFyYW1zLT51cGRlbGF5ID0gdXBkZWxheTsKQEAgLTQ4NTIsNyArNTAyOCw3IEBACiAJcGFyYW1zLT51c2VfY2FycmllciA9IHVzZV9jYXJyaWVyOwogCXBhcmFtcy0+bGFjcF9mYXN0ID0gbGFjcF9mYXN0OwogCXBhcmFtcy0+cHJpbWFyeVswXSA9IDA7Ci0JcGFyYW1zLT5mYWlsX292ZXJfbWFjID0gZmFpbF9vdmVyX21hYzsKKwlwYXJhbXMtPmZhaWxfb3Zlcl9tYWMgPSBmYWlsX292ZXJfbWFjX3ZhbHVlOwogCiAJaWYgKHByaW1hcnkpIHsKIAkJc3RybmNweShwYXJhbXMtPnByaW1hcnksIHByaW1hcnksIElGTkFNU0laKTsKQEAgLTQ4NjUsMTYgKzUwNDEsMzIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBib25kaW5nX25ldGRldl94bWl0X2xvY2tfa2V5Oworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBib25kaW5nX25ldGRldl9hZGRyX2xvY2tfa2V5OworCitzdGF0aWMgdm9pZCBib25kX3NldF9sb2NrZGVwX2NsYXNzX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEsCisJCQkJICAgICAgIHZvaWQgKl91bnVzZWQpCit7CisJbG9ja2RlcF9zZXRfY2xhc3MoJnR4cS0+X3htaXRfbG9jaywKKwkJCSAgJmJvbmRpbmdfbmV0ZGV2X3htaXRfbG9ja19rZXkpOworfQorCitzdGF0aWMgdm9pZCBib25kX3NldF9sb2NrZGVwX2NsYXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbG9ja2RlcF9zZXRfY2xhc3MoJmRldi0+YWRkcl9saXN0X2xvY2ssCisJCQkgICZib25kaW5nX25ldGRldl9hZGRyX2xvY2tfa2V5KTsKKwluZXRkZXZfZm9yX2VhY2hfdHhfcXVldWUoZGV2LCBib25kX3NldF9sb2NrZGVwX2NsYXNzX29uZSwgTlVMTCk7Cit9CiAKIC8qIENyZWF0ZSBhIG5ldyBib25kIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQgYm9uZGluZyBwYXJhbWV0ZXJzLgogICogSWYgbmFtZSBpcyBOVUxMLCBvYnRhaW4gYSBzdWl0YWJsZSAiYm9uZCVkIiBuYW1lIGZvciB1cy4KICAqIENhbGxlciBtdXN0IE5PVCBob2xkIHJ0bmxfbG9jazsgd2UgbmVlZCB0byByZWxlYXNlIGl0IGhlcmUgYmVmb3JlIHdlCiAgKiBzZXQgdXAgb3VyIHN5c2ZzIGVudHJpZXMuCiAgKi8KLWludCBib25kX2NyZWF0ZShjaGFyICpuYW1lLCBzdHJ1Y3QgYm9uZF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IGJvbmRpbmcgKipuZXdib25kKQoraW50IGJvbmRfY3JlYXRlKGNoYXIgKm5hbWUsIHN0cnVjdCBib25kX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldjsKLQlzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgKm54dDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZDsKIAlpbnQgcmVzOwogCiAJcnRubF9sb2NrKCk7CkBAIC00ODgyLDcgKzUwNzQsNyBAQAogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBib25kIGFscmVhZHkgZXhpc3RzLiAqLwogCWlmIChuYW1lKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShib25kLCBueHQsICZib25kX2Rldl9saXN0LCBib25kX2xpc3QpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYm9uZCwgJmJvbmRfZGV2X2xpc3QsIGJvbmRfbGlzdCkKIAkJCWlmIChzdHJuaWNtcChib25kLT5kZXYtPm5hbWUsIG5hbWUsIElGTkFNU0laKSA9PSAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCiAJCQkgICAgICAgIjogY2Fubm90IGFkZCBib25kICVzOyBpdCBhbHJlYWR5IGV4aXN0c1xuIiwKQEAgLTQ5MjMsMTAgKzUxMTUsNyBAQAogCQlnb3RvIG91dF9ib25kOwogCX0KIAotCWxvY2tkZXBfc2V0X2NsYXNzKCZib25kX2Rldi0+X3htaXRfbG9jaywgJmJvbmRpbmdfbmV0ZGV2X3htaXRfbG9ja19rZXkpOwotCi0JaWYgKG5ld2JvbmQpCi0JCSpuZXdib25kID0gYm9uZF9kZXYtPnByaXY7CisJYm9uZF9zZXRfbG9ja2RlcF9jbGFzcyhib25kX2Rldik7CiAKIAluZXRpZl9jYXJyaWVyX29mZihib25kX2Rldik7CiAKQEAgLTQ5NTcsNyArNTE0Niw3IEBACiB7CiAJaW50IGk7CiAJaW50IHJlczsKLQlzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgKm54dDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZDsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CiAKQEAgLTQ5NzMsNyArNTE2Miw3IEBACiAJaW5pdF9yd3NlbSgmYm9uZGluZ19yd3NlbSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X2JvbmRzOyBpKyspIHsKLQkJcmVzID0gYm9uZF9jcmVhdGUoTlVMTCwgJmJvbmRpbmdfZGVmYXVsdHMsIE5VTEwpOworCQlyZXMgPSBib25kX2NyZWF0ZShOVUxMLCAmYm9uZGluZ19kZWZhdWx0cyk7CiAJCWlmIChyZXMpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC00OTg3LDcgKzUxNzYsNyBAQAogCiAJZ290byBvdXQ7CiBlcnI6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJvbmQsIG54dCwgJmJvbmRfZGV2X2xpc3QsIGJvbmRfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoYm9uZCwgJmJvbmRfZGV2X2xpc3QsIGJvbmRfbGlzdCkgewogCQlib25kX3dvcmtfY2FuY2VsX2FsbChib25kKTsKIAkJZGVzdHJveV93b3JrcXVldWUoYm9uZC0+d3EpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKaW5kZXggMDhmM2QzOS4uNmNhYWMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKQEAgLTUwLDkgKzUwLDkgQEAKIGV4dGVybiBzdHJ1Y3QgYm9uZF9wYXJtX3RibCBib25kX2xhY3BfdGJsW107CiBleHRlcm4gc3RydWN0IGJvbmRfcGFybV90YmwgeG1pdF9oYXNodHlwZV90YmxbXTsKIGV4dGVybiBzdHJ1Y3QgYm9uZF9wYXJtX3RibCBhcnBfdmFsaWRhdGVfdGJsW107CitleHRlcm4gc3RydWN0IGJvbmRfcGFybV90YmwgZmFpbF9vdmVyX21hY190YmxbXTsKIAogc3RhdGljIGludCBleHBlY3RlZF9yZWZjb3VudCA9IC0xOwotc3RhdGljIHN0cnVjdCBjbGFzcyAqbmV0ZGV2X2NsYXNzOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGF0YSBTdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogQm9uZGluZyBzeXNmcyBsb2NrLiAgV2h5IGNhbid0IHdlIGp1c3QgdXNlIHRoZSBzdWJzeXN0ZW0gbG9jaz8KQEAgLTExMSw3ICsxMTEsNiBAQAogCWNoYXIgKmlmbmFtZTsKIAlpbnQgcnYsIHJlcyA9IGNvdW50OwogCXN0cnVjdCBib25kaW5nICpib25kOwotCXN0cnVjdCBib25kaW5nICpueHQ7CiAKIAlzc2NhbmYoYnVmZmVyLCAiJTE2cyIsIGNvbW1hbmQpOyAvKiBJRk5BTVNJWiovCiAJaWZuYW1lID0gY29tbWFuZCArIDE7CkBAIC0xMjIsNyArMTIxLDcgQEAKIAlpZiAoY29tbWFuZFswXSA9PSAnKycpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQogCQkJIjogJXMgaXMgYmVpbmcgY3JlYXRlZC4uLlxuIiwgaWZuYW1lKTsKLQkJcnYgPSBib25kX2NyZWF0ZShpZm5hbWUsICZib25kaW5nX2RlZmF1bHRzLCAmYm9uZCk7CisJCXJ2ID0gYm9uZF9jcmVhdGUoaWZuYW1lLCAmYm9uZGluZ19kZWZhdWx0cyk7CiAJCWlmIChydikgewogCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBCb25kIGNyZWF0aW9uIGZhaWxlZC5cbiIpOwogCQkJcmVzID0gcnY7CkBAIC0xMzQsNyArMTMzLDcgQEAKIAkJcnRubF9sb2NrKCk7CiAJCWRvd25fd3JpdGUoJmJvbmRpbmdfcndzZW0pOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShib25kLCBueHQsICZib25kX2Rldl9saXN0LCBib25kX2xpc3QpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYm9uZCwgJmJvbmRfZGV2X2xpc3QsIGJvbmRfbGlzdCkKIAkJCWlmIChzdHJuaWNtcChib25kLT5kZXYtPm5hbWUsIGlmbmFtZSwgSUZOQU1TSVopID09IDApIHsKIAkJCQkvKiBjaGVjayB0aGUgcmVmIGNvdW50IG9uIHRoZSBib25kJ3Mga29iamVjdC4KIAkJCQkgKiBJZiBpdCdzID4gZXhwZWN0ZWQsIHRoZW4gdGhlcmUncyBhIGZpbGUgb3BlbiwKQEAgLTU0OCw0MiArNTQ3LDM3IEBACiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGQpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJvbmQtPnBhcmFtcy5mYWlsX292ZXJfbWFjKSArIDE7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMgJWRcbiIsCisJCSAgICAgICBmYWlsX292ZXJfbWFjX3RibFtib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hY10ubW9kZW5hbWUsCisJCSAgICAgICBib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc3RvcmVfZmFpbF9vdmVyX21hYyhzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IG5ld192YWx1ZTsKLQlpbnQgcmV0ID0gY291bnQ7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGQpOwogCiAJaWYgKGJvbmQtPnNsYXZlX2NudCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQogCQkgICAgICAgIjogJXM6IENhbid0IGFsdGVyIGZhaWxfb3Zlcl9tYWMgd2l0aCBzbGF2ZXMgaW4gYm9uZC5cbiIsCiAJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOwotCQlyZXQgPSAtRVBFUk07Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVQRVJNOwogCX0KIAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmbmV3X3ZhbHVlKSAhPSAxKSB7CisJbmV3X3ZhbHVlID0gYm9uZF9wYXJzZV9wYXJtKGJ1ZiwgZmFpbF9vdmVyX21hY190YmwpOworCWlmIChuZXdfdmFsdWUgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkgICAgICAgIjogJXM6IG5vIGZhaWxfb3Zlcl9tYWMgdmFsdWUgc3BlY2lmaWVkLlxuIiwKLQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OworCQkgICAgICAgIjogJXM6IElnbm9yaW5nIGludmFsaWQgZmFpbF9vdmVyX21hYyB2YWx1ZSAlcy5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIGJ1Zik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICgobmV3X3ZhbHVlID09IDApIHx8IChuZXdfdmFsdWUgPT0gMSkpIHsKLQkJYm9uZC0+cGFyYW1zLmZhaWxfb3Zlcl9tYWMgPSBuZXdfdmFsdWU7Ci0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXM6IFNldHRpbmcgZmFpbF9vdmVyX21hYyB0byAlZC5cbiIsCi0JCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkgICAgICAgIjogJXM6IElnbm9yaW5nIGludmFsaWQgZmFpbF9vdmVyX21hYyB2YWx1ZSAlZC5cbiIsCi0JCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSk7Ci0JfQotb3V0OgotCXJldHVybiByZXQ7CisJYm9uZC0+cGFyYW1zLmZhaWxfb3Zlcl9tYWMgPSBuZXdfdmFsdWU7CisJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAlczogU2V0dGluZyBmYWlsX292ZXJfbWFjIHRvICVzICglZCkuXG4iLAorCSAgICAgICBib25kLT5kZXYtPm5hbWUsIGZhaWxfb3Zlcl9tYWNfdGJsW25ld192YWx1ZV0ubW9kZW5hbWUsCisJICAgICAgIG5ld192YWx1ZSk7CisKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihmYWlsX292ZXJfbWFjLCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X2ZhaWxfb3Zlcl9tYWMsIGJvbmRpbmdfc3RvcmVfZmFpbF9vdmVyX21hYyk7CkBAIC05NTIsNiArOTQ2LDQ1IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobGFjcF9yYXRlLCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X2xhY3AsIGJvbmRpbmdfc3RvcmVfbGFjcCk7CiAKIC8qCisgKiBTaG93IGFuZCBzZXQgdGhlIG51bWJlciBvZiBncmF0IEFSUCB0byBzZW5kIGFmdGVyIGEgZmFpbG92ZXIgZXZlbnQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd19uX2dyYXRfYXJwKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChkKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBib25kLT5wYXJhbXMubnVtX2dyYXRfYXJwKTsKK30KKworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zdG9yZV9uX2dyYXRfYXJwKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgbmV3X3ZhbHVlLCByZXQgPSBjb3VudDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoZCk7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJm5ld192YWx1ZSkgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBubyBudW1fZ3JhdF9hcnAgdmFsdWUgc3BlY2lmaWVkLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAobmV3X3ZhbHVlIDwgMCB8fCBuZXdfdmFsdWUgPiAyNTUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogSW52YWxpZCBudW1fZ3JhdF9hcnAgdmFsdWUgJWQgbm90IGluIHJhbmdlIDAtMjU1OyByZWplY3RlZC5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCWJvbmQtPnBhcmFtcy5udW1fZ3JhdF9hcnAgPSBuZXdfdmFsdWU7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobnVtX2dyYXRfYXJwLCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X25fZ3JhdF9hcnAsIGJvbmRpbmdfc3RvcmVfbl9ncmF0X2FycCk7CisvKgogICogU2hvdyBhbmQgc2V0IHRoZSBNSUkgbW9uaXRvciBpbnRlcnZhbC4gIFRoZXJlIGFyZSB0d28gdHJpY2t5IGJpdHMKICAqIGhlcmUuICBGaXJzdCwgaWYgTUlJIG1vbml0b3JpbmcgaXMgYWN0aXZhdGVkLCB0aGVuIHdlIG11c3QgZGlzYWJsZQogICogQVJQIG1vbml0b3JpbmcuICBTZWNvbmQsIGlmIHRoZSB0aW1lciBpc24ndCBydW5uaW5nLCB3ZSBtdXN0CkBAIC0xMzg4LDYgKzE0MjEsNyBAQAogCSZkZXZfYXR0cl91cGRlbGF5LmF0dHIsCiAJJmRldl9hdHRyX2xhY3BfcmF0ZS5hdHRyLAogCSZkZXZfYXR0cl94bWl0X2hhc2hfcG9saWN5LmF0dHIsCisJJmRldl9hdHRyX251bV9ncmF0X2FycC5hdHRyLAogCSZkZXZfYXR0cl9taWltb24uYXR0ciwKIAkmZGV2X2F0dHJfcHJpbWFyeS5hdHRyLAogCSZkZXZfYXR0cl91c2VfY2Fycmllci5hdHRyLApAQCAtMTQxMiwxOSArMTQ0Niw5IEBACiAgKi8KIGludCBib25kX2NyZWF0ZV9zeXNmcyh2b2lkKQogewotCWludCByZXQgPSAwOwotCXN0cnVjdCBib25kaW5nICpmaXJzdGJvbmQ7CisJaW50IHJldDsKIAotCS8qIGdldCB0aGUgbmV0ZGV2IGNsYXNzIHBvaW50ZXIgKi8KLQlmaXJzdGJvbmQgPSBjb250YWluZXJfb2YoYm9uZF9kZXZfbGlzdC5uZXh0LCBzdHJ1Y3QgYm9uZGluZywgYm9uZF9saXN0KTsKLQlpZiAoIWZpcnN0Ym9uZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQluZXRkZXZfY2xhc3MgPSBmaXJzdGJvbmQtPmRldi0+ZGV2LmNsYXNzOwotCWlmICghbmV0ZGV2X2NsYXNzKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldCA9IGNsYXNzX2NyZWF0ZV9maWxlKG5ldGRldl9jbGFzcywgJmNsYXNzX2F0dHJfYm9uZGluZ19tYXN0ZXJzKTsKKwlyZXQgPSBuZXRkZXZfY2xhc3NfY3JlYXRlX2ZpbGUoJmNsYXNzX2F0dHJfYm9uZGluZ19tYXN0ZXJzKTsKIAkvKgogCSAqIFBlcm1pdCBtdWx0aXBsZSBsb2FkcyBvZiB0aGUgbW9kdWxlIGJ5IGlnbm9yaW5nIGZhaWx1cmVzIHRvCiAJICogY3JlYXRlIHRoZSBib25kaW5nX21hc3RlcnMgc3lzZnMgZmlsZS4gIEJvbmRpbmcgZGV2aWNlcwpAQCAtMTQ0MywxMCArMTQ2Nyw2IEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAibmV0d29yayBkZXZpY2UgbmFtZWQgJXMgYWxyZWFkeSBleGlzdHMgaW4gc3lzZnMiLAogCQkJICAgICAgIGNsYXNzX2F0dHJfYm9uZGluZ19tYXN0ZXJzLmF0dHIubmFtZSk7Ci0JCWVsc2UgewotCQkJbmV0ZGV2X2NsYXNzID0gTlVMTDsKLQkJCXJldHVybiAwOwotCQl9CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTE0NTgsOCArMTQ3OCw3IEBACiAgKi8KIHZvaWQgYm9uZF9kZXN0cm95X3N5c2ZzKHZvaWQpCiB7Ci0JaWYgKG5ldGRldl9jbGFzcykKLQkJY2xhc3NfcmVtb3ZlX2ZpbGUobmV0ZGV2X2NsYXNzLCAmY2xhc3NfYXR0cl9ib25kaW5nX21hc3RlcnMpOworCW5ldGRldl9jbGFzc19yZW1vdmVfZmlsZSgmY2xhc3NfYXR0cl9ib25kaW5nX21hc3RlcnMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAppbmRleCBhM2M3NGUyLi5mYjczMGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgImJvbmRfM2FkLmgiCiAjaW5jbHVkZSAiYm9uZF9hbGIuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTgkiMy4yLjUiCi0jZGVmaW5lIERSVl9SRUxEQVRFCSJNYXJjaCAyMSwgMjAwOCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjMuMy4wIgorI2RlZmluZSBEUlZfUkVMREFURQkiSnVuZSAxMCwgMjAwOCIKICNkZWZpbmUgRFJWX05BTUUJImJvbmRpbmciCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiRXRoZXJuZXQgQ2hhbm5lbCBCb25kaW5nIERyaXZlciIKIApAQCAtMTI1LDYgKzEyNSw3IEBACiAJaW50IG1vZGU7CiAJaW50IHhtaXRfcG9saWN5OwogCWludCBtaWltb247CisJaW50IG51bV9ncmF0X2FycDsKIAlpbnQgYXJwX2ludGVydmFsOwogCWludCBhcnBfdmFsaWRhdGU7CiAJaW50IHVzZV9jYXJyaWVyOwpAQCAtMTU3LDYgKzE1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9hcnBfcng7CiAJczggICAgIGxpbms7ICAgIC8qIG9uZSBvZiBCT05EX0xJTktfWFhYWCAqLworCXM4ICAgICBuZXdfbGluazsKIAlzOCAgICAgc3RhdGU7ICAgLyogb25lIG9mIEJPTkRfU1RBVEVfWFhYWCAqLwogCXUzMiAgICBvcmlnaW5hbF9mbGFnczsKIAl1MzIgICAgb3JpZ2luYWxfbXR1OwpAQCAtMTY5LDYgKzE3MSwxMSBAQAogfTsKIAogLyoKKyAqIExpbmsgcHNldWRvLXN0YXRlIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IG1vbml0b3JzCisgKi8KKyNkZWZpbmUgQk9ORF9MSU5LX05PQ0hBTkdFIC0xCisKKy8qCiAgKiBIZXJlIGFyZSB0aGUgbG9ja2luZyBwb2xpY2llcyBmb3IgdGhlIHR3byBib25kaW5nIGxvY2tzOgogICoKICAqIDEpIEdldCBib25kLT5sb2NrIHdoZW4gcmVhZGluZy93cml0aW5nIHNsYXZlIGxpc3QuCkBAIC0yNDEsNiArMjQ4LDEwIEBACiAJcmV0dXJuIChzdHJ1Y3QgYm9uZGluZyAqKXNsYXZlLT5kZXYtPm1hc3Rlci0+cHJpdjsKIH0KIAorI2RlZmluZSBCT05EX0ZPTV9OT05FCQkJMAorI2RlZmluZSBCT05EX0ZPTV9BQ1RJVkUJCQkxCisjZGVmaW5lIEJPTkRfRk9NX0ZPTExPVwkJCTIKKwogI2RlZmluZSBCT05EX0FSUF9WQUxJREFURV9OT05FCQkwCiAjZGVmaW5lIEJPTkRfQVJQX1ZBTElEQVRFX0FDVElWRQkoMSA8PCBCT05EX1NUQVRFX0FDVElWRSkKICNkZWZpbmUgQk9ORF9BUlBfVkFMSURBVEVfQkFDS1VQCSgxIDw8IEJPTkRfU1RBVEVfQkFDS1VQKQpAQCAtMzAxLDcgKzMxMiw3IEBACiAKIHN0cnVjdCB2bGFuX2VudHJ5ICpib25kX25leHRfdmxhbihzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHZsYW5fZW50cnkgKmN1cnIpOwogaW50IGJvbmRfZGV2X3F1ZXVlX3htaXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpOwotaW50IGJvbmRfY3JlYXRlKGNoYXIgKm5hbWUsIHN0cnVjdCBib25kX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgYm9uZGluZyAqKm5ld2JvbmQpOworaW50IGJvbmRfY3JlYXRlKGNoYXIgKm5hbWUsIHN0cnVjdCBib25kX3BhcmFtcyAqcGFyYW1zKTsKIHZvaWQgYm9uZF9kZXN0cm95KHN0cnVjdCBib25kaW5nICpib25kKTsKIGludCAgYm9uZF9yZWxlYXNlX2FuZF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2Rldik7CiBpbnQgYm9uZF9jcmVhdGVfc3lzZnModm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKaW5kZXggYTUwOTMzNy4uNjM4YzlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYwpAQCAtMTE1Myw5ICsxMTUzLDcgQEAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCQluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9IHQxX25ldHBvbGw7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQ0hFTFNJT19UMV9OQVBJCiAJCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksIHQxX3BvbGwsIDY0KTsKLSNlbmRpZgogCiAJCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZ0MV9ldGh0b29sX29wcyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKaW5kZXggOGE3ZWZkMy4uZDZjN2QyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCkBAIC0xMzk2LDIwICsxMzk2LDEwIEBACiAKIAlpZiAodW5saWtlbHkoYWRhcHRlci0+dmxhbl9ncnAgJiYgcC0+dmxhbl92YWxpZCkpIHsKIAkJc3QtPnZsYW5feHRyYWN0Kys7Ci0jaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfTkFQSQotCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsCi0JCQkJCQkgbnRvaHMocC0+dmxhbikpOwotI2Vsc2UKLQkJCXZsYW5faHdhY2NlbF9yeChza2IsIGFkYXB0ZXItPnZsYW5fZ3JwLAotCQkJCQludG9ocyhwLT52bGFuKSk7Ci0jZW5kaWYKLQl9IGVsc2UgewotI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxX05BUEkKKwkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsCisJCQkJCSBudG9ocyhwLT52bGFuKSk7CisJfSBlbHNlCiAJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0jZWxzZQotCQluZXRpZl9yeChza2IpOwotI2VuZGlmCi0JfQogfQogCiAvKgpAQCAtMTU2OCw3ICsxNTU4LDYgQEAKIAlyZXR1cm4gKGUtPkdlbmVyYXRpb25CaXQgPT0gUS0+Z2VuYml0KTsKIH0KIAotI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxX05BUEkKIC8qCiAgKiBBIHNpbXBsZXIgdmVyc2lvbiBvZiBwcm9jZXNzX3Jlc3BvbnNlcygpIHRoYXQgaGFuZGxlcyBvbmx5IHB1cmUgKGkuZS4sCiAgKiBub24gZGF0YS1jYXJyeWluZykgcmVzcG9uc2VzLiAgU3VjaCByZXNwb25lcyBhcmUgdG9vIGxpZ2h0LXdlaWdodCB0byBqdXN0aWZ5CkBAIC0xNjM2LDkgKzE2MjUsNiBAQAogCXJldHVybiB3b3JrX2RvbmU7CiB9CiAKLS8qCi0gKiBOQVBJIHZlcnNpb24gb2YgdGhlIG1haW4gaW50ZXJydXB0IGhhbmRsZXIuCi0gKi8KIGlycXJldHVybl90IHQxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gZGF0YTsKQEAgLTE2NTYsNyArMTY0Miw4IEBACiAJCQllbHNlIHsKIAkJCQkvKiBubyBkYXRhLCBubyBOQVBJIG5lZWRlZCAqLwogCQkJCXdyaXRlbChzZ2UtPnJlc3BRLmNpZHgsIGFkYXB0ZXItPnJlZ3MgKyBBX1NHX1NMRUVQSU5HKTsKLQkJCQluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7CS8qIHVuZG8gc2NoZWR1bGVfcHJlcCAqLworCQkJCS8qIHVuZG8gc2NoZWR1bGVfcHJlcCAqLworCQkJCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAkJCX0KIAkJfQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xNjcyLDUzICsxNjU5LDYgQEAKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkICE9IDApOwogfQogCi0jZWxzZQotLyoKLSAqIE1haW4gaW50ZXJydXB0IGhhbmRsZXIsIG9wdGltaXplZCBhc3N1bWluZyB0aGF0IHdlIHRvb2sgYSAnREFUQScKLSAqIGludGVycnVwdC4KLSAqCi0gKiAxLiBDbGVhciB0aGUgaW50ZXJydXB0Ci0gKiAyLiBMb29wIHdoaWxlIHdlIGZpbmQgdmFsaWQgZGVzY3JpcHRvcnMgYW5kIHByb2Nlc3MgdGhlbTsgYWNjdW11bGF0ZQotICogICAgICBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIGxvb3AKLSAqIDMuIFRlbGwgdGhlIFNHRSBhdCB3aGljaCBpbmRleCB3ZSBzdG9wcGVkIHByb2Nlc3NpbmcgZGVzY3JpcHRvcnMKLSAqIDQuIEJvb2trZWVwaW5nOyBmcmVlIFRYIGJ1ZmZlcnMsIHJpbmcgZG9vcmJlbGwgaWYgdGhlcmUgYXJlIGFueQotICogICAgICBvdXRzdGFuZGluZyBUWCBidWZmZXJzIHdhaXRpbmcsIHJlcGxlbmlzaCBSWCBidWZmZXJzLCBwb3RlbnRpYWxseQotICogICAgICByZWVuYWJsZSB1cHBlciBsYXllcnMgaWYgdGhleSB3ZXJlIHR1cm5lZCBvZmYgZHVlIHRvIGxhY2sgb2YgVFgKLSAqICAgICAgcmVzb3VyY2VzIHdoaWNoIGFyZSBhdmFpbGFibGUgYWdhaW4uCi0gKiA1LiBJZiB3ZSB0b29rIGFuIGludGVycnVwdCwgYnV0IG5vIHZhbGlkIHJlc3BRIGRlc2NyaXB0b3JzIHdhcyBmb3VuZCB3ZQotICogICAgICBsZXQgdGhlIHNsb3dfaW50cl9oYW5kbGVyIHJ1biBhbmQgZG8gZXJyb3IgaGFuZGxpbmcuCi0gKi8KLWlycXJldHVybl90IHQxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpjb29raWUpCi17Ci0JaW50IHdvcmtfZG9uZTsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNvb2tpZTsKLQlzdHJ1Y3QgcmVzcFEgKlEgPSAmYWRhcHRlci0+c2dlLT5yZXNwUTsKLQotCXNwaW5fbG9jaygmYWRhcHRlci0+YXN5bmNfbG9jayk7Ci0KLQl3cml0ZWwoRl9QTF9JTlRSX1NHRV9EQVRBLCBhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7Ci0KLQlpZiAobGlrZWx5KHJlc3BvbnNlc19wZW5kaW5nKGFkYXB0ZXIpKSkKLQkJd29ya19kb25lID0gcHJvY2Vzc19yZXNwb25zZXMoYWRhcHRlciwgLTEpOwotCWVsc2UKLQkJd29ya19kb25lID0gdDFfc2xvd19pbnRyX2hhbmRsZXIoYWRhcHRlcik7Ci0KLQkvKgotCSAqIFRoZSB1bmNvbmRpdGlvbmFsIGNsZWFyaW5nIG9mIHRoZSBQTF9DQVVTRSBhYm92ZSBtYXkgaGF2ZSByYWNlZAotCSAqIHdpdGggRE1BIGNvbXBsZXRpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGdlbmVyYXRpb24gb2YgYSByZXNwb25zZQotCSAqIHRvIGNhdXNlIHVzIHRvIG1pc3MgdGhlIHJlc3VsdGluZyBkYXRhIGludGVycnVwdC4gIFRoZSBuZXh0IHdyaXRlCi0JICogaXMgYWxzbyB1bmNvbmRpdGlvbmFsIHRvIHJlY292ZXIgdGhlIG1pc3NlZCBpbnRlcnJ1cHQgYW5kIHJlbmRlcgotCSAqIHRoaXMgcmFjZSBoYXJtbGVzcy4KLQkgKi8KLQl3cml0ZWwoUS0+Y2lkeCwgYWRhcHRlci0+cmVncyArIEFfU0dfU0xFRVBJTkcpOwotCi0JaWYgKCF3b3JrX2RvbmUpCi0JCWFkYXB0ZXItPnNnZS0+c3RhdHMudW5oYW5kbGVkX2lycXMrKzsKLQlzcGluX3VubG9jaygmYWRhcHRlci0+YXN5bmNfbG9jayk7Ci0JcmV0dXJuIElSUV9SRVRWQUwod29ya19kb25lICE9IDApOwotfQotI2VuZGlmCi0KIC8qCiAgKiBFbnF1ZXVlcyB0aGUgc2tfYnVmZiBvbnRvIHRoZSBjbWRRW3FpZF0gYW5kIGhhcyBoYXJkd2FyZSBmZXRjaCBpdC4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcG1hYy5jIGIvZHJpdmVycy9uZXQvY3BtYWMuYwppbmRleCA3ZjNmNjJlLi5hNzgwMGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jcG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NwbWFjLmMKQEAgLTU0NCw3ICs1NDQsNyBAQAogCiAJc3Bpbl91bmxvY2soJnByaXYtPnJ4X2xvY2spOwogCW5ldGlmX3J4X2NvbXBsZXRlKHByaXYtPmRldiwgbmFwaSk7Ci0JbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOworCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhwcml2LT5kZXYpOwogCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAKIAlhdG9taWNfaW5jKCZwcml2LT5yZXNldF9wZW5kaW5nKTsKQEAgLTU2OSwxMSArNTY5LDcgQEAKIAogCWxlbiA9IG1heChza2ItPmxlbiwgRVRIX1pMRU4pOwogCXF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQogCW5ldGlmX3N0b3Bfc3VicXVldWUoZGV2LCBxdWV1ZSk7Ci0jZWxzZQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSNlbmRpZgogCiAJZGVzYyA9ICZwcml2LT5kZXNjX3JpbmdbcXVldWVdOwogCWlmICh1bmxpa2VseShkZXNjLT5kYXRhZmxhZ3MgJiBDUE1BQ19PV04pKSB7CkBAIC02MjYsMjQgKzYyMiwxNCBAQAogCiAJCWRldl9rZnJlZV9za2JfaXJxKGRlc2MtPnNrYik7CiAJCWRlc2MtPnNrYiA9IE5VTEw7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQogCQlpZiAobmV0aWZfc3VicXVldWVfc3RvcHBlZChkZXYsIHF1ZXVlKSkKIAkJCW5ldGlmX3dha2Vfc3VicXVldWUoZGV2LCBxdWV1ZSk7Ci0jZWxzZQotCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotI2VuZGlmCiAJfSBlbHNlIHsKIAkJaWYgKG5ldGlmX21zZ190eF9lcnIocHJpdikgJiYgbmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICIlczogZW5kX3htaXQ6IHNwdXJpb3VzIGludGVycnVwdFxuIiwgZGV2LT5uYW1lKTsKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCiAJCWlmIChuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGRldiwgcXVldWUpKQogCQkJbmV0aWZfd2FrZV9zdWJxdWV1ZShkZXYsIHF1ZXVlKTsKLSNlbHNlCi0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCi0JCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0jZW5kaWYKIAl9CiB9CiAKQEAgLTc2NCw5ICs3NTAsNyBAQAogCWJhcnJpZXIoKTsKIAlhdG9taWNfZGVjKCZwcml2LT5yZXNldF9wZW5kaW5nKTsKIAotCWZvciAoaSA9IDA7IGkgPCBDUE1BQ19RVUVVRVM7IGkrKykKLQkJbmV0aWZfd2FrZV9zdWJxdWV1ZShwcml2LT5kZXYsIGkpOwotCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKKwluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMocHJpdi0+ZGV2KTsKIAljcG1hY193cml0ZShwcml2LT5yZWdzLCBDUE1BQ19NQUNfSU5UX0VOQUJMRSwgMyk7CiB9CiAKQEAgLTc5NSw3ICs3NzksNyBAQAogCQkJCSAgICAgZGV2LT5uYW1lLCB0eF9jb2RlLCB0eF9jaGFubmVsLCBtYWNzdGF0dXMpOwogCQl9CiAKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKIAkJY3BtYWNfaHdfc3RvcChkZXYpOwogCQlpZiAoc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yaykpCiAJCQlhdG9taWNfaW5jKCZwcml2LT5yZXNldF9wZW5kaW5nKTsKQEAgLTg1Niw5ICs4NDAsNyBAQAogCWJhcnJpZXIoKTsKIAlhdG9taWNfZGVjKCZwcml2LT5yZXNldF9wZW5kaW5nKTsKIAotCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKLQlmb3IgKGkgPSAwOyBpIDwgQ1BNQUNfUVVFVUVTOyBpKyspCi0JCW5ldGlmX3dha2Vfc3VicXVldWUoZGV2LCBpKTsKKwluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMocHJpdi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBjcG1hY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKQEAgLTk0OSw3ICs5MzEsNyBAQAogCiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAlpZiAocHJpdi0+cGh5LT5saW5rKSB7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKIAkJaWYgKHByaXYtPnBoeS0+ZHVwbGV4ICE9IHByaXYtPm9sZGR1cGxleCkgewogCQkJbmV3X3N0YXRlID0gMTsKIAkJCXByaXYtPm9sZGR1cGxleCA9IHByaXYtPnBoeS0+ZHVwbGV4OwpAQCAtOTYzLDEwICs5NDUsOCBAQAogCQlpZiAoIXByaXYtPm9sZGxpbmspIHsKIAkJCW5ld19zdGF0ZSA9IDE7CiAJCQlwcml2LT5vbGRsaW5rID0gMTsKLQkJCW5ldGlmX3NjaGVkdWxlKGRldik7CiAJCX0KIAl9IGVsc2UgaWYgKHByaXYtPm9sZGxpbmspIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQluZXdfc3RhdGUgPSAxOwogCQlwcml2LT5vbGRsaW5rID0gMDsKIAkJcHJpdi0+b2xkc3BlZWQgPSAwOwpAQCAtMTA4Niw3ICsxMDY2LDcgQEAKIAlzdHJ1Y3QgY3BtYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CiAKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5yZXNldF93b3JrKTsKIAluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwpAQCAtMTE3OSw3ICsxMTU5LDYgQEAKIAlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGNwbWFjX3NldF9tdWx0aWNhc3RfbGlzdDsKIAlkZXYtPnR4X3RpbWVvdXQgICAgICAgICA9IGNwbWFjX3R4X3RpbWVvdXQ7CiAJZGV2LT5ldGh0b29sX29wcyAgICAgICAgPSAmY3BtYWNfZXRodG9vbF9vcHM7Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX01VTFRJX1FVRVVFOwogCiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmcHJpdi0+bmFwaSwgY3BtYWNfcG9sbCwgNjQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKaW5kZXggYWNlYmU0My4uMjcxMTQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgInQzY2Rldi5oIgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC05Miw2ICs5Myw3IEBACiAJdW5zaWduZWQgaW50IGdlbjsgICAgICAgICAgIC8qIGZyZWUgbGlzdCBnZW5lcmF0aW9uICovCiAJc3RydWN0IGZsX3BnX2NodW5rIHBnX2NodW5rOy8qIHBhZ2UgY2h1bmsgY2FjaGUgKi8KIAl1bnNpZ25lZCBpbnQgdXNlX3BhZ2VzOyAgICAgLyogd2hldGhlciBGTCB1c2VzIHBhZ2VzIG9yIHNrX2J1ZmZzICovCisJdW5zaWduZWQgaW50IG9yZGVyOwkgICAgLyogb3JkZXIgb2YgcGFnZSBhbGxvY2F0aW9ucyAqLwogCXN0cnVjdCByeF9kZXNjICpkZXNjOyAgICAgICAvKiBhZGRyZXNzIG9mIEhXIFJ4IGRlc2NyaXB0b3IgcmluZyAqLwogCXN0cnVjdCByeF9zd19kZXNjICpzZGVzYzsgICAvKiBhZGRyZXNzIG9mIFNXIFJ4IGRlc2NyaXB0b3IgcmluZyAqLwogCWRtYV9hZGRyX3QgICBwaHlzX2FkZHI7ICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIEhXIHJpbmcgc3RhcnQgKi8KQEAgLTExNiwxMiArMTE4LDE1IEBACiAJdW5zaWduZWQgaW50IHBvbGxpbmc7CS8qIGlzIHRoZSBxdWV1ZSBzZXJ2aWNlZCB0aHJvdWdoIE5BUEk/ICovCiAJdW5zaWduZWQgaW50IGhvbGRvZmZfdG1yOwkvKiBpbnRlcnJ1cHQgaG9sZG9mZiB0aW1lciBpbiAxMDBucyAqLwogCXVuc2lnbmVkIGludCBuZXh0X2hvbGRvZmY7CS8qIGhvbGRvZmYgdGltZSBmb3IgbmV4dCBpbnRlcnJ1cHQgKi8KKwl1bnNpZ25lZCBpbnQgcnhfcmVjeWNsZV9idWY7IC8qIHdoZXRoZXIgcmVjeWNsaW5nIG9jY3VycmVkCisJCQkJCXdpdGhpbiBjdXJyZW50IHNvcC1lb3AgKi8KIAlzdHJ1Y3QgcnNwX2Rlc2MgKmRlc2M7CS8qIGFkZHJlc3Mgb2YgSFcgcmVzcG9uc2UgcmluZyAqLwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSByaW5nICovCiAJdW5zaWduZWQgaW50IGNudHh0X2lkOwkvKiBTR0UgY29udGV4dCBpZCBmb3IgdGhlIHJlc3BvbnNlIHEgKi8KIAlzcGlubG9ja190IGxvY2s7CS8qIGd1YXJkcyByZXNwb25zZSBwcm9jZXNzaW5nICovCiAJc3RydWN0IHNrX2J1ZmYgKnJ4X2hlYWQ7CS8qIG9mZmxvYWQgcGFja2V0IHJlY2VpdmUgcXVldWUgaGVhZCAqLwogCXN0cnVjdCBza19idWZmICpyeF90YWlsOwkvKiBvZmZsb2FkIHBhY2tldCByZWNlaXZlIHF1ZXVlIHRhaWwgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqcGdfc2tiOyAvKiB1c2VkIHRvIGJ1aWxkIGZyYWcgbGlzdCBpbiBuYXBpIGhhbmRsZXIgKi8KIAogCXVuc2lnbmVkIGxvbmcgb2ZmbG9hZF9wa3RzOwogCXVuc2lnbmVkIGxvbmcgb2ZmbG9hZF9idW5kbGVzOwpAQCAtMTY5LDE2ICsxNzQsMjkgQEAKIAlTR0VfUFNUQVRfVFhfQ1NVTSwJLyogIyBvZiBUWCBjaGVja3N1bSBvZmZsb2FkcyAqLwogCVNHRV9QU1RBVF9WTEFORVgsCS8qICMgb2YgVkxBTiB0YWcgZXh0cmFjdGlvbnMgKi8KIAlTR0VfUFNUQVRfVkxBTklOUywJLyogIyBvZiBWTEFOIHRhZyBpbnNlcnRpb25zICovCisJU0dFX1BTVEFUX0xST19BR0dSLAkvKiAjIG9mIHBhZ2UgY2h1bmtzIGFkZGVkIHRvIExSTyBzZXNzaW9ucyAqLworCVNHRV9QU1RBVF9MUk9fRkxVU0hFRCwJLyogIyBvZiBmbHVzaGVkIExSTyBzZXNzaW9ucyAqLworCVNHRV9QU1RBVF9MUk9fTk9fREVTQywJLyogIyBvZiBvdmVyZmxvd24gTFJPIHNlc3Npb25zICovCiAKIAlTR0VfUFNUQVRfTUFYCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKKyNkZWZpbmUgVDNfTUFYX0xST19TRVMgOAorI2RlZmluZSBUM19NQVhfTFJPX01BWF9QS1RTIDY0CisKIHN0cnVjdCBzZ2VfcXNldCB7CQkvKiBhbiBTR0UgcXVldWUgc2V0ICovCiAJc3RydWN0IGFkYXB0ZXIgKmFkYXA7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IHNnZV9yc3BxIHJzcHE7CiAJc3RydWN0IHNnZV9mbCBmbFtTR0VfUlhRX1BFUl9TRVRdOwogCXN0cnVjdCBzZ2VfdHhxIHR4cVtTR0VfVFhRX1BFUl9TRVRdOworCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOworCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Rlc2NbVDNfTUFYX0xST19TRVNdOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmxyb19mcmFnX3RibDsKKwlpbnQgbHJvX25mcmFnczsKKwlpbnQgbHJvX2VuYWJsZWQ7CisJaW50IGxyb19mcmFnX2xlbjsKKwl2b2lkICpscm9fdmE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAl1bnNpZ25lZCBsb25nIHR4cV9zdG9wcGVkOwkvKiB3aGljaCBUeCBxdWV1ZXMgYXJlIHN0b3BwZWQgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0eF9yZWNsYWltX3RpbWVyOwkvKiByZWNsYWltcyBUWCBidWZmZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCmluZGV4IDhlOGViZDcuLjllY2Y4YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCkBAIC0zNTEsNiArMzUxLDcgQEAKIAogc3RydWN0IHFzZXRfcGFyYW1zIHsJCS8qIFNHRSBxdWV1ZSBzZXQgcGFyYW1ldGVycyAqLwogCXVuc2lnbmVkIGludCBwb2xsaW5nOwkvKiBwb2xsaW5nL2ludGVycnVwdCBzZXJ2aWNlIGZvciByc3BxICovCisJdW5zaWduZWQgaW50IGxybzsJLyogbGFyZ2UgcmVjZWl2ZSBvZmZsb2FkICovCiAJdW5zaWduZWQgaW50IGNvYWxlc2NlX3VzZWNzOwkvKiBpcnEgY29hbGVzY2luZyB0aW1lciAqLwogCXVuc2lnbmVkIGludCByc3BxX3NpemU7CS8qICMgb2YgZW50cmllcyBpbiByZXNwb25zZSBxdWV1ZSAqLwogCXVuc2lnbmVkIGludCBmbF9zaXplOwkvKiAjIG9mIGVudHJpZXMgaW4gcmVndWxhciBmcmVlIGxpc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2N0bF9kZWZzLmggYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19jdGxfZGVmcy5oCmluZGV4IGVkMGVjZDkuLjZhZDkyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2N0bF9kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfY3RsX2RlZnMuaApAQCAtMTExLDEwICsxMTEsNyBAQAogCXVuc2lnbmVkIGludCBsbGltaXQ7CiAJdW5zaWduZWQgaW50IHVsaW1pdDsKIAl1bnNpZ25lZCBpbnQgdGFnbWFzazsKLQl1bnNpZ25lZCBpbnQgcGdzejM7Ci0JdW5zaWduZWQgaW50IHBnc3oyOwotCXVuc2lnbmVkIGludCBwZ3N6MTsKLQl1bnNpZ25lZCBpbnQgcGdzejA7CisJdTggcGdzel9mYWN0b3JbNF07CiAJdW5zaWduZWQgaW50IG1heF9yeHN6OwogCXVuc2lnbmVkIGludCBtYXhfdHhzejsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2lvY3RsLmggYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19pb2N0bC5oCmluZGV4IDBhODJmY2QuLjY4MjAwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2lvY3RsLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfaW9jdGwuaApAQCAtOTAsNiArOTAsNyBAQAogCWludDMyX3QgZmxfc2l6ZVsyXTsKIAlpbnQzMl90IGludHJfbGF0OwogCWludDMyX3QgcG9sbGluZzsKKwlpbnQzMl90IGxybzsKIAlpbnQzMl90IGNvbmdfdGhyZXM7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKaW5kZXggM2EzMTI3Mi4uNTQ0N2YzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwpAQCAtMTIxMiw2ICsxMjEyLDkgQEAKIAkiVkxBTmluc2VydGlvbnMgICAgICIsCiAJIlR4Q3N1bU9mZmxvYWQgICAgICAiLAogCSJSeENzdW1Hb29kICAgICAgICAgIiwKKwkiTHJvQWdncmVnYXRlZCAgICAgICIsCisJIkxyb0ZsdXNoZWQgICAgICAgICAiLAorCSJMcm9Ob0Rlc2MgICAgICAgICAgIiwKIAkiUnhEcm9wcyAgICAgICAgICAgICIsCiAKIAkiQ2hlY2tUWEVuVG9nZ2xlZCAgICIsCkBAIC0xMzQwLDYgKzEzNDMsOSBAQAogCSpkYXRhKysgPSBjb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCBTR0VfUFNUQVRfVkxBTklOUyk7CiAJKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9UWF9DU1VNKTsKIAkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX1JYX0NTVU1fR09PRCk7CisJKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9MUk9fQUdHUik7CisJKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9MUk9fRkxVU0hFRCk7CisJKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9MUk9fTk9fREVTQyk7CiAJKmRhdGErKyA9IHMtPnJ4X2NvbmdfZHJvcHM7CiAKIAkqZGF0YSsrID0gcy0+bnVtX3RvZ2dsZWQ7CkBAIC0xNTU4LDYgKzE1NjQsMTMgQEAKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXAtPnJ4X2NzdW1fb2ZmbG9hZCA9IGRhdGE7CisJaWYgKCFkYXRhKSB7CisJCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcC0+YWRhcHRlcjsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gcC0+Zmlyc3RfcXNldDsgaSA8IHAtPmZpcnN0X3FzZXQgKyBwLT5ucXNldHM7IGkrKykKKwkJCWFkYXAtPnNnZS5xc1tpXS5scm9fZW5hYmxlZCA9IDA7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xODMwLDYgKzE4NDMsMTEgQEAKIAkJCQl9CiAJCQl9CiAJCX0KKwkJaWYgKHQubHJvID49IDApIHsKKwkJCXN0cnVjdCBzZ2VfcXNldCAqcXMgPSAmYWRhcHRlci0+c2dlLnFzW3QucXNldF9pZHhdOworCQkJcS0+bHJvID0gdC5scm87CisJCQlxcy0+bHJvX2VuYWJsZWQgPSB0LmxybzsKKwkJfQogCQlicmVhazsKIAl9CiAJY2FzZSBDSEVMU0lPX0dFVF9RU0VUX1BBUkFNUzp7CkBAIC0xODQ5LDYgKzE4NjcsNyBAQAogCQl0LmZsX3NpemVbMF0gPSBxLT5mbF9zaXplOwogCQl0LmZsX3NpemVbMV0gPSBxLT5qdW1ib19zaXplOwogCQl0LnBvbGxpbmcgPSBxLT5wb2xsaW5nOworCQl0LmxybyA9IHEtPmxybzsKIAkJdC5pbnRyX2xhdCA9IHEtPmNvYWxlc2NlX3VzZWNzOwogCQl0LmNvbmdfdGhyZXMgPSBxLT5jb25nX3RocmVzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKaW5kZXggY2YyNjk2OC4uYzViM2RlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwpAQCAtMjA3LDYgKzIwNywxNyBAQAogCQlicmVhazsKIAljYXNlIFVMUF9JU0NTSV9TRVRfUEFSQU1TOgogCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9VTFBSWF9JU0NTSV9UQUdNQVNLLCB1aWlwLT50YWdtYXNrKTsKKwkJLyogc2V0IE1heFJ4RGF0YSBhbmQgTWF4Q29hbGVzY2VTaXplIHRvIDE2MjI0ICovCisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1RQX1BBUkFfUkVHMiwgMHgzZjYwM2Y2MCk7CisJCS8qIHByb2dyYW0gdGhlIGRkcCBwYWdlIHNpemVzICovCisJCXsKKwkJCWludCBpOworCQkJdW5zaWduZWQgaW50IHZhbCA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJCXZhbCB8PSAodWlpcC0+cGdzel9mYWN0b3JbaV0gJiAweEYpIDw8ICg4ICogaSk7CisJCQlpZiAodmFsKQorCQkJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1VMUFJYX0lTQ1NJX1BTWiwgdmFsKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU9QTk9UU1VQUDsKQEAgLTEyNTUsNiArMTI2NiwyNSBAQAogCW11dGV4X3VubG9jaygmY3hnYjNfZGJfbG9jayk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGFkYXAydHlwZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgdHlwZSA9IDA7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPnBhcmFtcy5yZXYpIHsKKwljYXNlIFQzX1JFVl9BOgorCQl0eXBlID0gVDNBOworCQlicmVhazsKKwljYXNlIFQzX1JFVl9COgorCWNhc2UgVDNfUkVWX0IyOgorCQl0eXBlID0gVDNCOworCQlicmVhazsKKwljYXNlIFQzX1JFVl9DOgorCQl0eXBlID0gVDNDOworCQlicmVhazsKKwl9CisJcmV0dXJuIHR5cGU7Cit9CisKIHZvaWQgX19kZXZpbml0IGN4Z2IzX2FkYXB0ZXJfb2ZsZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgdDNjZGV2ICp0ZGV2ID0gJmFkYXB0ZXItPnRkZXY7CkBAIC0xMjY0LDcgKzEyOTQsNyBAQAogCWN4Z2IzX3NldF9kdW1teV9vcHModGRldik7CiAJdGRldi0+c2VuZCA9IHQzX29mZmxvYWRfdHg7CiAJdGRldi0+Y3RsID0gY3hnYl9vZmZsb2FkX2N0bDsKLQl0ZGV2LT50eXBlID0gYWRhcHRlci0+cGFyYW1zLnJldiA9PSAwID8gVDNBIDogVDNCOworCXRkZXYtPnR5cGUgPSBhZGFwMnR5cGUoYWRhcHRlcik7CiAKIAlyZWdpc3Rlcl90ZGV2KHRkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmMgYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYwppbmRleCBmNTEwMTQwLi44MjVlNTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJCWF0b21pY19zZXQoJmUtPnJlZmNudCwgMSk7CiAJCW5laWdoX3JlcGxhY2UoZSwgbmVpZ2gpOwogCQlpZiAobmVpZ2gtPmRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikKLQkJCWUtPnZsYW4gPSB2bGFuX2Rldl9pbmZvKG5laWdoLT5kZXYpLT52bGFuX2lkOworCQkJZS0+dmxhbiA9IHZsYW5fZGV2X3ZsYW5faWQobmVpZ2gtPmRldik7CiAJCWVsc2UKIAkJCWUtPnZsYW4gPSBWTEFOX05PTkU7CiAJCXNwaW5fdW5sb2NrKCZlLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaAppbmRleCA1NjcxNzg4Li40YmRhMjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCkBAIC0xNTE3LDE2ICsxNTE3LDE4IEBACiAKICNkZWZpbmUgQV9VTFBSWF9JU0NTSV9UQUdNQVNLIDB4NTE0CiAKLSNkZWZpbmUgU19IUFowICAgIDAKLSNkZWZpbmUgTV9IUFowICAgIDB4ZgotI2RlZmluZSBWX0hQWjAoeCkgKCh4KSA8PCBTX0hQWjApCi0jZGVmaW5lIEdfSFBaMCh4KSAoKCh4KSA+PiBTX0hQWjApICYgTV9IUFowKQorI2RlZmluZSBBX1VMUFJYX0lTQ1NJX1BTWiAweDUxOAogCiAjZGVmaW5lIEFfVUxQUlhfVEREUF9MTElNSVQgMHg1MWMKIAogI2RlZmluZSBBX1VMUFJYX1RERFBfVUxJTUlUIDB4NTIwCiAjZGVmaW5lIEFfVUxQUlhfVEREUF9QU1ogMHg1MjgKIAorI2RlZmluZSBTX0hQWjAgICAgMAorI2RlZmluZSBNX0hQWjAgICAgMHhmCisjZGVmaW5lIFZfSFBaMCh4KSAoKHgpIDw8IFNfSFBaMCkKKyNkZWZpbmUgR19IUFowKHgpICgoKHgpID4+IFNfSFBaMCkgJiBNX0hQWjApCisKICNkZWZpbmUgQV9VTFBSWF9TVEFHX0xMSU1JVCAweDUyYwogCiAjZGVmaW5lIEFfVUxQUlhfU1RBR19VTElNSVQgMHg1MzAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKaW5kZXggNzk2ZWIzMC4uYTk2MzMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKQEAgLTU1LDYgKzU1LDkgQEAKICAqIGRpcmVjdGx5LgogICovCiAjZGVmaW5lIEZMMF9QR19DSFVOS19TSVpFICAyMDQ4CisjZGVmaW5lIEZMMF9QR19PUkRFUiAwCisjZGVmaW5lIEZMMV9QR19DSFVOS19TSVpFIChQQUdFX1NJWkUgPiA4MTkyID8gMTYzODQgOiA4MTkyKQorI2RlZmluZSBGTDFfUEdfT1JERVIgKFBBR0VfU0laRSA+IDgxOTIgPyAwIDogMSkKIAogI2RlZmluZSBTR0VfUlhfRFJPUF9USFJFUyAxNgogCkBAIC0zNTksNyArMzYyLDcgQEAKIAl9CiAKIAlpZiAocS0+cGdfY2h1bmsucGFnZSkgewotCQlfX2ZyZWVfcGFnZShxLT5wZ19jaHVuay5wYWdlKTsKKwkJX19mcmVlX3BhZ2VzKHEtPnBnX2NodW5rLnBhZ2UsIHEtPm9yZGVyKTsKIAkJcS0+cGdfY2h1bmsucGFnZSA9IE5VTEw7CiAJfQogfQpAQCAtMzc2LDEzICszNzksMTYgQEAKICAqCUFkZCBhIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4gbGVuZ3RoIHRvIHRoZSBzdXBwbGllZCBIVyBhbmQgU1cgUngKICAqCWRlc2NyaXB0b3JzLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX29uZV9yeF9idWYodm9pZCAqdmEsIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJICBzdHJ1Y3QgcnhfZGVzYyAqZCwgc3RydWN0IHJ4X3N3X2Rlc2MgKnNkLAotCQkJCSAgdW5zaWduZWQgaW50IGdlbiwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW5saW5lIGludCBhZGRfb25lX3J4X2J1Zih2b2lkICp2YSwgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgc3RydWN0IHJ4X2Rlc2MgKmQsIHN0cnVjdCByeF9zd19kZXNjICpzZCwKKwkJCQkgdW5zaWduZWQgaW50IGdlbiwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCiAJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHZhLCBsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSkpCisJCXJldHVybiAtRU5PTUVNOworCiAJcGNpX3VubWFwX2FkZHJfc2V0KHNkLCBkbWFfYWRkciwgbWFwcGluZyk7CiAKIAlkLT5hZGRyX2xvID0gY3B1X3RvX2JlMzIobWFwcGluZyk7CkBAIC0zOTAsMTIgKzM5NiwxNCBAQAogCXdtYigpOwogCWQtPmxlbl9nZW4gPSBjcHVfdG9fYmUzMihWX0ZMRF9HRU4xKGdlbikpOwogCWQtPmdlbjIgPSBjcHVfdG9fYmUzMihWX0ZMRF9HRU4yKGdlbikpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFsbG9jX3BnX2NodW5rKHN0cnVjdCBzZ2VfZmwgKnEsIHN0cnVjdCByeF9zd19kZXNjICpzZCwgZ2ZwX3QgZ2ZwKQorc3RhdGljIGludCBhbGxvY19wZ19jaHVuayhzdHJ1Y3Qgc2dlX2ZsICpxLCBzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2QsIGdmcF90IGdmcCwKKwkJCSAgdW5zaWduZWQgaW50IG9yZGVyKQogewogCWlmICghcS0+cGdfY2h1bmsucGFnZSkgewotCQlxLT5wZ19jaHVuay5wYWdlID0gYWxsb2NfcGFnZShnZnApOworCQlxLT5wZ19jaHVuay5wYWdlID0gYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlcik7CiAJCWlmICh1bmxpa2VseSghcS0+cGdfY2h1bmsucGFnZSkpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJcS0+cGdfY2h1bmsudmEgPSBwYWdlX2FkZHJlc3MocS0+cGdfY2h1bmsucGFnZSk7CkBAIC00MDQsNyArNDEyLDcgQEAKIAlzZC0+cGdfY2h1bmsgPSBxLT5wZ19jaHVuazsKIAogCXEtPnBnX2NodW5rLm9mZnNldCArPSBxLT5idWZfc2l6ZTsKLQlpZiAocS0+cGdfY2h1bmsub2Zmc2V0ID09IFBBR0VfU0laRSkKKwlpZiAocS0+cGdfY2h1bmsub2Zmc2V0ID09IChQQUdFX1NJWkUgPDwgb3JkZXIpKQogCQlxLT5wZ19jaHVuay5wYWdlID0gTlVMTDsKIAllbHNlIHsKIAkJcS0+cGdfY2h1bmsudmEgKz0gcS0+YnVmX3NpemU7CkBAIC00MjQsMTUgKzQzMiwxOCBAQAogICoJYWxsb2NhdGVkIHdpdGggdGhlIHN1cHBsaWVkIGdmcCBmbGFncy4gIFRoZSBjYWxsZXIgbXVzdCBhc3N1cmUgdGhhdAogICoJQG4gZG9lcyBub3QgZXhjZWVkIHRoZSBxdWV1ZSdzIGNhcGFjaXR5LgogICovCi1zdGF0aWMgdm9pZCByZWZpbGxfZmwoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfZmwgKnEsIGludCBuLCBnZnBfdCBnZnApCitzdGF0aWMgaW50IHJlZmlsbF9mbChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNnZV9mbCAqcSwgaW50IG4sIGdmcF90IGdmcCkKIHsKIAl2b2lkICpidWZfc3RhcnQ7CiAJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkID0gJnEtPnNkZXNjW3EtPnBpZHhdOwogCXN0cnVjdCByeF9kZXNjICpkID0gJnEtPmRlc2NbcS0+cGlkeF07CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKIAogCXdoaWxlIChuLS0pIHsKKwkJaW50IGVycjsKKwogCQlpZiAocS0+dXNlX3BhZ2VzKSB7Ci0JCQlpZiAodW5saWtlbHkoYWxsb2NfcGdfY2h1bmsocSwgc2QsIGdmcCkpKSB7CisJCQlpZiAodW5saWtlbHkoYWxsb2NfcGdfY2h1bmsocSwgc2QsIGdmcCwgcS0+b3JkZXIpKSkgewogbm9tZW06CQkJCXEtPmFsbG9jX2ZhaWxlZCsrOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNDQ3LDggKzQ1OCwxNiBAQAogCQkJYnVmX3N0YXJ0ID0gc2tiLT5kYXRhOwogCQl9CiAKLQkJYWRkX29uZV9yeF9idWYoYnVmX3N0YXJ0LCBxLT5idWZfc2l6ZSwgZCwgc2QsIHEtPmdlbiwKLQkJCSAgICAgICBhZGFwLT5wZGV2KTsKKwkJZXJyID0gYWRkX29uZV9yeF9idWYoYnVmX3N0YXJ0LCBxLT5idWZfc2l6ZSwgZCwgc2QsIHEtPmdlbiwKKwkJCQkgICAgIGFkYXAtPnBkZXYpOworCQlpZiAodW5saWtlbHkoZXJyKSkgeworCQkJaWYgKCFxLT51c2VfcGFnZXMpIHsKKwkJCQlrZnJlZV9za2Ioc2QtPnNrYik7CisJCQkJc2QtPnNrYiA9IE5VTEw7CisJCQl9CisJCQlicmVhazsKKwkJfQorCiAJCWQrKzsKIAkJc2QrKzsKIAkJaWYgKCsrcS0+cGlkeCA9PSBxLT5zaXplKSB7CkBAIC00NTgsMTQgKzQ3NywxOSBAQAogCQkJZCA9IHEtPmRlc2M7CiAJCX0KIAkJcS0+Y3JlZGl0cysrOworCQljb3VudCsrOwogCX0KIAl3bWIoKTsKLQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19LRE9PUkJFTEwsIFZfRUdSQ05UWChxLT5jbnR4dF9pZCkpOworCWlmIChsaWtlbHkoY291bnQpKQorCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19LRE9PUkJFTEwsIFZfRUdSQ05UWChxLT5jbnR4dF9pZCkpOworCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZWZpbGxfZmwoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfZmwgKmZsKQogewotCXJlZmlsbF9mbChhZGFwLCBmbCwgbWluKDE2VSwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyksIEdGUF9BVE9NSUMpOworCXJlZmlsbF9mbChhZGFwLCBmbCwgbWluKDE2VSwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyksCisJCSAgR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVApOwogfQogCiAvKioKQEAgLTU2MCw2ICs1ODQsOCBAQAogCW1lbXNldChxLT50eHEsIDAsIHNpemVvZihzdHJ1Y3Qgc2dlX3R4cSkgKiBTR0VfVFhRX1BFUl9TRVQpOwogCXEtPnR4cV9zdG9wcGVkID0gMDsKIAltZW1zZXQoJnEtPnR4X3JlY2xhaW1fdGltZXIsIDAsIHNpemVvZihxLT50eF9yZWNsYWltX3RpbWVyKSk7CisJa2ZyZWUocS0+bHJvX2ZyYWdfdGJsKTsKKwlxLT5scm9fbmZyYWdzID0gcS0+bHJvX2ZyYWdfbGVuID0gMDsKIH0KIAogCkBAIC03NDAsMTkgKzc2NiwyMiBAQAogICogCXRoYXQgYXJlIHBhZ2UgY2h1bmtzIHJhdGhlciB0aGFuIHNrX2J1ZmZzLgogICovCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmdldF9wYWNrZXRfcGcoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfZmwgKmZsLAotCQkJCSAgICAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IGRyb3BfdGhyZXMpCisJCQkJICAgICBzdHJ1Y3Qgc2dlX3JzcHEgKnEsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICB1bnNpZ25lZCBpbnQgZHJvcF90aHJlcykKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiLCAqc2tiOwogCXN0cnVjdCByeF9zd19kZXNjICpzZCA9ICZmbC0+c2Rlc2NbZmwtPmNpZHhdOwogCi0JaWYgKGxlbiA8PSBTR0VfUlhfQ09QWV9USFJFUykgewotCQlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKLQkJCV9fc2tiX3B1dChza2IsIGxlbik7CisJbmV3c2tiID0gc2tiID0gcS0+cGdfc2tiOworCisJaWYgKCFza2IgJiYgKGxlbiA8PSBTR0VfUlhfQ09QWV9USFJFUykpIHsKKwkJbmV3c2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyk7CisJCWlmIChsaWtlbHkobmV3c2tiICE9IE5VTEwpKSB7CisJCQlfX3NrYl9wdXQobmV3c2tiLCBsZW4pOwogCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGFkYXAtPnBkZXYsCiAJCQkJCSAgICBwY2lfdW5tYXBfYWRkcihzZCwgZG1hX2FkZHIpLCBsZW4sCiAJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJbWVtY3B5KHNrYi0+ZGF0YSwgc2QtPnBnX2NodW5rLnZhLCBsZW4pOworCQkJbWVtY3B5KG5ld3NrYi0+ZGF0YSwgc2QtPnBnX2NodW5rLnZhLCBsZW4pOwogCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGFkYXAtPnBkZXYsCiAJCQkJCSAgICBwY2lfdW5tYXBfYWRkcihzZCwgZG1hX2FkZHIpLCBsZW4sCiAJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtNzYxLDE0ICs3OTAsMTYgQEAKIHJlY3ljbGU6CiAJCWZsLT5jcmVkaXRzLS07CiAJCXJlY3ljbGVfcnhfYnVmKGFkYXAsIGZsLCBmbC0+Y2lkeCk7Ci0JCXJldHVybiBza2I7CisJCXEtPnJ4X3JlY3ljbGVfYnVmKys7CisJCXJldHVybiBuZXdza2I7CiAJfQogCi0JaWYgKHVubGlrZWx5KGZsLT5jcmVkaXRzIDw9IGRyb3BfdGhyZXMpKQorCWlmICh1bmxpa2VseShxLT5yeF9yZWN5Y2xlX2J1ZiB8fCAoIXNrYiAmJiBmbC0+Y3JlZGl0cyA8PSBkcm9wX3RocmVzKSkpCiAJCWdvdG8gcmVjeWNsZTsKIAotCXNrYiA9IGFsbG9jX3NrYihTR0VfUlhfUFVMTF9MRU4sIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghc2tiKSkgeworCWlmICghc2tiKQorCQluZXdza2IgPSBhbGxvY19za2IoU0dFX1JYX1BVTExfTEVOLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIW5ld3NrYikpIHsKIAkJaWYgKCFkcm9wX3RocmVzKQogCQkJcmV0dXJuIE5VTEw7CiAJCWdvdG8gcmVjeWNsZTsKQEAgLTc3NiwyMSArODA3LDI5IEBACiAKIAlwY2lfdW5tYXBfc2luZ2xlKGFkYXAtPnBkZXYsIHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkciksCiAJCQkgZmwtPmJ1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCV9fc2tiX3B1dChza2IsIFNHRV9SWF9QVUxMX0xFTik7Ci0JbWVtY3B5KHNrYi0+ZGF0YSwgc2QtPnBnX2NodW5rLnZhLCBTR0VfUlhfUFVMTF9MRU4pOwotCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIDAsIHNkLT5wZ19jaHVuay5wYWdlLAotCQkJICAgc2QtPnBnX2NodW5rLm9mZnNldCArIFNHRV9SWF9QVUxMX0xFTiwKLQkJCSAgIGxlbiAtIFNHRV9SWF9QVUxMX0xFTik7Ci0Jc2tiLT5sZW4gPSBsZW47Ci0Jc2tiLT5kYXRhX2xlbiA9IGxlbiAtIFNHRV9SWF9QVUxMX0xFTjsKLQlza2ItPnRydWVzaXplICs9IHNrYi0+ZGF0YV9sZW47CisJaWYgKCFza2IpIHsKKwkJX19za2JfcHV0KG5ld3NrYiwgU0dFX1JYX1BVTExfTEVOKTsKKwkJbWVtY3B5KG5ld3NrYi0+ZGF0YSwgc2QtPnBnX2NodW5rLnZhLCBTR0VfUlhfUFVMTF9MRU4pOworCQlza2JfZmlsbF9wYWdlX2Rlc2MobmV3c2tiLCAwLCBzZC0+cGdfY2h1bmsucGFnZSwKKwkJCQkgICBzZC0+cGdfY2h1bmsub2Zmc2V0ICsgU0dFX1JYX1BVTExfTEVOLAorCQkJCSAgIGxlbiAtIFNHRV9SWF9QVUxMX0xFTik7CisJCW5ld3NrYi0+bGVuID0gbGVuOworCQluZXdza2ItPmRhdGFfbGVuID0gbGVuIC0gU0dFX1JYX1BVTExfTEVOOworCX0gZWxzZSB7CisJCXNrYl9maWxsX3BhZ2VfZGVzYyhuZXdza2IsIHNrYl9zaGluZm8obmV3c2tiKS0+bnJfZnJhZ3MsCisJCQkJICAgc2QtPnBnX2NodW5rLnBhZ2UsCisJCQkJICAgc2QtPnBnX2NodW5rLm9mZnNldCwgbGVuKTsKKwkJbmV3c2tiLT5sZW4gKz0gbGVuOworCQluZXdza2ItPmRhdGFfbGVuICs9IGxlbjsKKwl9CisJbmV3c2tiLT50cnVlc2l6ZSArPSBuZXdza2ItPmRhdGFfbGVuOwogCiAJZmwtPmNyZWRpdHMtLTsKIAkvKgogCSAqIFdlIGRvIG5vdCByZWZpbGwgRkxzIGhlcmUsIHdlIGxldCB0aGUgY2FsbGVyIGRvIGl0IHRvIG92ZXJsYXAgYQogCSAqIHByZWZldGNoLgogCSAqLwotCXJldHVybiBza2I7CisJcmV0dXJuIG5ld3NrYjsKIH0KIAogLyoqCkBAIC0xODMxLDkgKzE4NzAsMTAgQEAKICAqCWlmIGl0IHdhcyBpbW1lZGlhdGUgZGF0YSBpbiBhIHJlc3BvbnNlLgogICovCiBzdGF0aWMgdm9pZCByeF9ldGgoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfcnNwcSAqcnEsCi0JCSAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBwYWQpCisJCSAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBwYWQsIGludCBscm8pCiB7CiAJc3RydWN0IGNwbF9yeF9wa3QgKnAgPSAoc3RydWN0IGNwbF9yeF9wa3QgKikoc2tiLT5kYXRhICsgcGFkKTsKKwlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gcnNwcV90b19xc2V0KHJxKTsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKIAogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpwKSArIHBhZCk7CkBAIC0xODUwLDE4ICsxODkwLDIwMiBAQAogCWlmICh1bmxpa2VseShwLT52bGFuX3ZhbGlkKSkgewogCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gcGktPnZsYW5fZ3JwOwogCi0JCXJzcHFfdG9fcXNldChycSktPnBvcnRfc3RhdHNbU0dFX1BTVEFUX1ZMQU5FWF0rKzsKKwkJcXMtPnBvcnRfc3RhdHNbU0dFX1BTVEFUX1ZMQU5FWF0rKzsKIAkJaWYgKGxpa2VseShncnApKQotCQkJX192bGFuX2h3YWNjZWxfcngoc2tiLCBncnAsIG50b2hzKHAtPnZsYW4pLAotCQkJCQkgIHJxLT5wb2xsaW5nKTsKKwkJCWlmIChscm8pCisJCQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYigmcXMtPmxyb19tZ3IsIHNrYiwKKwkJCQkJCQkgICAgIGdycCwKKwkJCQkJCQkgICAgIG50b2hzKHAtPnZsYW4pLAorCQkJCQkJCSAgICAgcCk7CisJCQllbHNlCisJCQkJX192bGFuX2h3YWNjZWxfcngoc2tiLCBncnAsIG50b2hzKHAtPnZsYW4pLAorCQkJCQkgIAkgIHJxLT5wb2xsaW5nKTsKIAkJZWxzZQogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9IGVsc2UgaWYgKHJxLT5wb2xsaW5nKQotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCWVsc2UKKwl9IGVsc2UgaWYgKHJxLT5wb2xsaW5nKSB7CisJCWlmIChscm8pCisJCQlscm9fcmVjZWl2ZV9za2IoJnFzLT5scm9fbWdyLCBza2IsIHApOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCX0gZWxzZQogCQluZXRpZl9yeChza2IpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpc19ldGhfdGNwKHUzMiByc3MpCit7CisJcmV0dXJuIEdfSEFTSFRZUEUobnRvaGwocnNzKSkgPT0gUlNTX0hBU0hfNF9UVVBMRTsKK30KKworLyoqCisgKglscm9fZnJhbWVfb2sgLSBjaGVjayBpZiBhbiBpbmdyZXNzIHBhY2tldCBpcyBlbGlnaWJsZSBmb3IgTFJPCisgKglAcDogdGhlIENQTCBoZWFkZXIgb2YgdGhlIHBhY2tldAorICoKKyAqCVJldHVybnMgdHJ1ZSBpZiBhIHJlY2VpdmVkIHBhY2tldCBpcyBlbGlnaWJsZSBmb3IgTFJPLgorICoJVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3QgYmUgdHJ1ZToKKyAqCS0gcGFja2V0IGlzIFRDUC9JUCBFdGhlcm5ldCBJSSAoY2hlY2tlZCBlbHNld2hlcmUpCisgKgktIG5vdCBhbiBJUCBmcmFnbWVudAorICoJLSBubyBJUCBvcHRpb25zCisgKgktIFRDUC9JUCBjaGVja3N1bXMgYXJlIGNvcnJlY3QKKyAqCS0gdGhlIHBhY2tldCBpcyBmb3IgdGhpcyBob3N0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxyb19mcmFtZV9vayhjb25zdCBzdHJ1Y3QgY3BsX3J4X3BrdCAqcCkKK3sKKwljb25zdCBzdHJ1Y3QgZXRoaGRyICplaCA9IChzdHJ1Y3QgZXRoaGRyICopKHAgKyAxKTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmloID0gKHN0cnVjdCBpcGhkciAqKShlaCArIDEpOworCisJcmV0dXJuICgqKCh1OCAqKXAgKyAxKSAmIDB4OTApID09IDB4MTAgJiYgcC0+Y3N1bSA9PSBodG9ucygweGZmZmYpICYmCisJCWVoLT5oX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSAmJiBpaC0+aWhsID09IChzaXplb2YoKmloKSA+PiAyKTsKK30KKworI2RlZmluZSBUQ1BfRkxBR19NQVNLIChUQ1BfRkxBR19DV1IgfCBUQ1BfRkxBR19FQ0UgfCBUQ1BfRkxBR19VUkcgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgVENQX0ZMQUdfQUNLIHwgVENQX0ZMQUdfUFNIIHwgVENQX0ZMQUdfUlNUIHxcCisJCSAgICAgICAgICAgICAgICAgICAgICAgVENQX0ZMQUdfU1lOIHwgVENQX0ZMQUdfRklOKQorI2RlZmluZSBUU1RBTVBfV09SRCAoKFRDUE9QVF9OT1AgPDwgMjQpIHwgKFRDUE9QVF9OT1AgPDwgMTYpIHxcCisgICAgICAgICAgICAgICAgICAgICAoVENQT1BUX1RJTUVTVEFNUCA8PCA4KSB8IFRDUE9MRU5fVElNRVNUQU1QKQorCisvKioKKyAqCWxyb19zZWdtZW50X29rIC0gY2hlY2sgaWYgYSBUQ1Agc2VnbWVudCBpcyBlbGlnaWJsZSBmb3IgTFJPCisgKglAdGNwaDogdGhlIFRDUCBoZWFkZXIgb2YgdGhlIHBhY2tldAorICoKKyAqCVJldHVybnMgdHJ1ZSBpZiBhIFRDUCBwYWNrZXQgaXMgZWxpZ2libGUgZm9yIExSTy4gIFRoaXMgcmVxdWlyZXMgdGhhdAorICoJdGhlIHBhY2tldCBoYXZlIG9ubHkgdGhlIEFDSyBmbGFnIHNldCBhbmQgbm8gVENQIG9wdGlvbnMgYmVzaWRlcworICoJdGltZSBzdGFtcHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxyb19zZWdtZW50X29rKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgpCit7CisJaW50IG9wdGxlbjsKKworCWlmICh1bmxpa2VseSgodGNwX2ZsYWdfd29yZCh0Y3BoKSAmIFRDUF9GTEFHX01BU0spICE9IFRDUF9GTEFHX0FDSykpCisJCXJldHVybiAwOworCisJb3B0bGVuID0gKHRjcGgtPmRvZmYgPDwgMikgLSBzaXplb2YoKnRjcGgpOworCWlmIChvcHRsZW4pIHsKKwkJY29uc3QgdTMyICpvcHQgPSAoY29uc3QgdTMyICopKHRjcGggKyAxKTsKKworCQlpZiAob3B0bGVuICE9IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQgfHwKKwkJICAgICpvcHQgIT0gaHRvbmwoVFNUQU1QX1dPUkQpIHx8ICFvcHRbMl0pCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdDNfZ2V0X2xyb19oZWFkZXIodm9pZCAqKmVoLCAgdm9pZCAqKmlwaCwgdm9pZCAqKnRjcGgsCisJCQkgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQoreworCWNvbnN0IHN0cnVjdCBjcGxfcnhfcGt0ICpjcGwgPSBwcml2OworCisJaWYgKCFscm9fZnJhbWVfb2soY3BsKSkKKwkJcmV0dXJuIC0xOworCisJKmVoID0gKHN0cnVjdCBldGhoZHIgKikoY3BsICsgMSk7CisJKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoKHN0cnVjdCBldGhoZHIgKikqZWggKyAxKTsKKwkqdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopKChzdHJ1Y3QgaXBoZHIgKikqaXBoICsgMSk7CisKKwkgaWYgKCFscm9fc2VnbWVudF9vaygqdGNwaCkpCisJCXJldHVybiAtMTsKKworCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdDNfZ2V0X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHZvaWQgKippcGgsIHZvaWQgKip0Y3BoLCB1NjQgKmhkcl9mbGFncywKKwkJCSAgICAgIHZvaWQgKnByaXYpCit7CisJdm9pZCAqZWg7CisKKwlyZXR1cm4gdDNfZ2V0X2xyb19oZWFkZXIoJmVoLCBpcGgsIHRjcGgsIGhkcl9mbGFncywgcHJpdik7Cit9CisKK3N0YXRpYyBpbnQgdDNfZ2V0X2ZyYWdfaGVhZGVyKHN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWcsIHZvaWQgKiplaCwKKwkJCSAgICAgIHZvaWQgKippcGgsIHZvaWQgKip0Y3BoLCB1NjQgKmhkcl9mbGFncywKKwkJCSAgICAgIHZvaWQgKnByaXYpCit7CisJcmV0dXJuIHQzX2dldF9scm9faGVhZGVyKGVoLCBpcGgsIHRjcGgsIGhkcl9mbGFncywgcHJpdik7Cit9CisKKy8qKgorICoJbHJvX2FkZF9wYWdlIC0gYWRkIGEgcGFnZSBjaHVuayB0byBhbiBMUk8gc2Vzc2lvbgorICoJQGFkYXA6IHRoZSBhZGFwdGVyCisgKglAcXM6IHRoZSBhc3NvY2lhdGVkIHF1ZXVlIHNldAorICoJQGZsOiB0aGUgZnJlZSBsaXN0IGNvbnRhaW5pbmcgdGhlIHBhZ2UgY2h1bmsgdG8gYWRkCisgKglAbGVuOiBwYWNrZXQgbGVuZ3RoCisgKglAY29tcGxldGU6IEluZGljYXRlcyB0aGUgbGFzdCBmcmFnbWVudCBvZiBhIGZyYW1lCisgKgorICoJQWRkIGEgcmVjZWl2ZWQgcGFja2V0IGNvbnRhaW5lZCBpbiBhIHBhZ2UgY2h1bmsgdG8gYW4gZXhpc3RpbmcgTFJPCisgKglzZXNzaW9uLgorICovCitzdGF0aWMgdm9pZCBscm9fYWRkX3BhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfcXNldCAqcXMsCisJCQkgc3RydWN0IHNnZV9mbCAqZmwsIGludCBsZW4sIGludCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2QgPSAmZmwtPnNkZXNjW2ZsLT5jaWR4XTsKKwlzdHJ1Y3QgY3BsX3J4X3BrdCAqY3BsOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnJ4X2ZyYWcgPSBxcy0+bHJvX2ZyYWdfdGJsOworCWludCBucl9mcmFncyA9IHFzLT5scm9fbmZyYWdzLCBmcmFnX2xlbiA9IHFzLT5scm9fZnJhZ19sZW47CisJaW50IG9mZnNldCA9IDA7CisKKwlpZiAoIW5yX2ZyYWdzKSB7CisJCW9mZnNldCA9IDIgKyBzaXplb2Yoc3RydWN0IGNwbF9yeF9wa3QpOworCQlxcy0+bHJvX3ZhID0gY3BsID0gc2QtPnBnX2NodW5rLnZhICsgMjsKKwl9CisKKwlmbC0+Y3JlZGl0cy0tOworCisJbGVuIC09IG9mZnNldDsKKwlwY2lfdW5tYXBfc2luZ2xlKGFkYXAtPnBkZXYsIHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkciksCisJCQkgZmwtPmJ1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJcnhfZnJhZyArPSBucl9mcmFnczsKKwlyeF9mcmFnLT5wYWdlID0gc2QtPnBnX2NodW5rLnBhZ2U7CisJcnhfZnJhZy0+cGFnZV9vZmZzZXQgPSBzZC0+cGdfY2h1bmsub2Zmc2V0ICsgb2Zmc2V0OworCXJ4X2ZyYWctPnNpemUgPSBsZW47CisJZnJhZ19sZW4gKz0gbGVuOworCXFzLT5scm9fbmZyYWdzKys7CisJcXMtPmxyb19mcmFnX2xlbiA9IGZyYWdfbGVuOworCisJaWYgKCFjb21wbGV0ZSkKKwkJcmV0dXJuOworCisJcXMtPmxyb19uZnJhZ3MgPSBxcy0+bHJvX2ZyYWdfbGVuID0gMDsKKwljcGwgPSBxcy0+bHJvX3ZhOworCisJaWYgKHVubGlrZWx5KGNwbC0+dmxhbl92YWxpZCkpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFzLT5uZXRkZXY7CisJCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJc3RydWN0IHZsYW5fZ3JvdXAgKmdycCA9IHBpLT52bGFuX2dycDsKKworCQlpZiAobGlrZWx5KGdycCAhPSBOVUxMKSkgeworCQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX2ZyYWdzKCZxcy0+bHJvX21nciwKKwkJCQkJCSAgICAgICBxcy0+bHJvX2ZyYWdfdGJsLAorCQkJCQkJICAgICAgIGZyYWdfbGVuLCBmcmFnX2xlbiwKKwkJCQkJCSAgICAgICBncnAsIG50b2hzKGNwbC0+dmxhbiksCisJCQkJCQkgICAgICAgY3BsLCAwKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlscm9fcmVjZWl2ZV9mcmFncygmcXMtPmxyb19tZ3IsIHFzLT5scm9fZnJhZ190YmwsCisJCQkgIGZyYWdfbGVuLCBmcmFnX2xlbiwgY3BsLCAwKTsKK30KKworLyoqCisgKglpbml0X2xyb19tZ3IgLSBpbml0aWFsaXplIGEgTFJPIG1hbmFnZXIgb2JqZWN0CisgKglAbHJvX21ncjogdGhlIExSTyBtYW5hZ2VyIG9iamVjdAorICovCitzdGF0aWMgdm9pZCBpbml0X2xyb19tZ3Ioc3RydWN0IHNnZV9xc2V0ICpxcywgc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyKQoreworCWxyb19tZ3ItPmRldiA9IHFzLT5uZXRkZXY7CisJbHJvX21nci0+ZmVhdHVyZXMgPSBMUk9fRl9OQVBJOworCWxyb19tZ3ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWxyb19tZ3ItPmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJbHJvX21nci0+bWF4X2Rlc2MgPSBUM19NQVhfTFJPX1NFUzsKKwlscm9fbWdyLT5scm9fYXJyID0gcXMtPmxyb19kZXNjOworCWxyb19tZ3ItPmdldF9mcmFnX2hlYWRlciA9IHQzX2dldF9mcmFnX2hlYWRlcjsKKwlscm9fbWdyLT5nZXRfc2tiX2hlYWRlciA9IHQzX2dldF9za2JfaGVhZGVyOworCWxyb19tZ3ItPm1heF9hZ2dyID0gVDNfTUFYX0xST19NQVhfUEtUUzsKKwlpZiAobHJvX21nci0+bWF4X2FnZ3IgPiBNQVhfU0tCX0ZSQUdTKQorCQlscm9fbWdyLT5tYXhfYWdnciA9IE1BWF9TS0JfRlJBR1M7Cit9CisKIC8qKgogICoJaGFuZGxlX3JzcF9jbnRybF9pbmZvIC0gaGFuZGxlcyBjb250cm9sIGluZm9ybWF0aW9uIGluIGEgcmVzcG9uc2UKICAqCUBxczogdGhlIHF1ZXVlIHNldCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNwb25zZQpAQCAtMTk0Nyw2ICsyMTcxLDEyIEBACiAJcmV0dXJuIChyLT5pbnRyX2dlbiAmIEZfUlNQRF9HRU4yKSA9PSBxLT5nZW47CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9yc3BxX2J1ZnN0YXRlKHN0cnVjdCBzZ2VfcnNwcSAqIGNvbnN0IHEpCit7CisJcS0+cGdfc2tiID0gTlVMTDsKKwlxLT5yeF9yZWN5Y2xlX2J1ZiA9IDA7Cit9CisKICNkZWZpbmUgUlNQRF9HVFNfTUFTSyAgKEZfUlNQRF9UWFEwX0dUUyB8IEZfUlNQRF9UWFExX0dUUykKICNkZWZpbmUgUlNQRF9DVFJMX01BU0sgKFJTUERfR1RTX01BU0sgfCBcCiAJCQlWX1JTUERfVFhRMF9DUihNX1JTUERfVFhRMF9DUikgfCBcCkBAIC0xOTg0LDEwICsyMjE0LDExIEBACiAJcS0+bmV4dF9ob2xkb2ZmID0gcS0+aG9sZG9mZl90bXI7CiAKIAl3aGlsZSAobGlrZWx5KGJ1ZGdldF9sZWZ0ICYmIGlzX25ld19yZXNwb25zZShyLCBxKSkpIHsKLQkJaW50IGV0aCwgZXRocGFkID0gMjsKKwkJaW50IHBhY2tldF9jb21wbGV0ZSwgZXRoLCBldGhwYWQgPSAyLCBscm8gPSBxcy0+bHJvX2VuYWJsZWQ7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCQl1MzIgbGVuLCBmbGFncyA9IG50b2hsKHItPmZsYWdzKTsKLQkJX19iZTMyIHJzc19oaSA9ICooY29uc3QgX19iZTMyICopciwgcnNzX2xvID0gci0+cnNzX2hkci5yc3NfaGFzaF92YWw7CisJCV9fYmUzMiByc3NfaGkgPSAqKGNvbnN0IF9fYmUzMiAqKXIsCisJCSAgICAgICByc3NfbG8gPSByLT5yc3NfaGRyLnJzc19oYXNoX3ZhbDsKIAogCQlldGggPSByLT5yc3NfaGRyLm9wY29kZSA9PSBDUExfUlhfUEtUOwogCkBAIC0yMDE1LDYgKzIyNDYsOSBAQAogCQl9IGVsc2UgaWYgKChsZW4gPSBudG9obChyLT5sZW5fY3EpKSAhPSAwKSB7CiAJCQlzdHJ1Y3Qgc2dlX2ZsICpmbDsKIAorCQkJaWYgKGV0aCkKKwkJCQlscm8gPSBxcy0+bHJvX2VuYWJsZWQgJiYgaXNfZXRoX3RjcChyc3NfaGkpOworCiAJCQlmbCA9IChsZW4gJiBGX1JTUERfRkxRKSA/ICZxcy0+ZmxbMV0gOiAmcXMtPmZsWzBdOwogCQkJaWYgKGZsLT51c2VfcGFnZXMpIHsKIAkJCQl2b2lkICphZGRyID0gZmwtPnNkZXNjW2ZsLT5jaWR4XS5wZ19jaHVuay52YTsKQEAgLTIwMjQsOSArMjI1OCwxOCBAQAogCQkJCXByZWZldGNoKGFkZHIgKyBMMV9DQUNIRV9CWVRFUyk7CiAjZW5kaWYKIAkJCQlfX3JlZmlsbF9mbChhZGFwLCBmbCk7CisJCQkJaWYgKGxybyA+IDApIHsKKwkJCQkJbHJvX2FkZF9wYWdlKGFkYXAsIHFzLCBmbCwKKwkJCQkJCSAgICAgR19SU1BEX0xFTihsZW4pLAorCQkJCQkJICAgICBmbGFncyAmIEZfUlNQRF9FT1ApOworCQkJCQkgZ290byBuZXh0X2ZsOworCQkJCX0KIAotCQkJCXNrYiA9IGdldF9wYWNrZXRfcGcoYWRhcCwgZmwsIEdfUlNQRF9MRU4obGVuKSwKLQkJCQkJCSBldGggPyBTR0VfUlhfRFJPUF9USFJFUyA6IDApOworCQkJCXNrYiA9IGdldF9wYWNrZXRfcGcoYWRhcCwgZmwsIHEsCisJCQkJCQkgICAgR19SU1BEX0xFTihsZW4pLAorCQkJCQkJICAgIGV0aCA/CisJCQkJCQkgICAgU0dFX1JYX0RST1BfVEhSRVMgOiAwKTsKKwkJCQlxLT5wZ19za2IgPSBza2I7CiAJCQl9IGVsc2UKIAkJCQlza2IgPSBnZXRfcGFja2V0KGFkYXAsIGZsLCBHX1JTUERfTEVOKGxlbiksCiAJCQkJCQkgZXRoID8gU0dFX1JYX0RST1BfVEhSRVMgOiAwKTsKQEAgLTIwMzYsNyArMjI3OSw3IEBACiAJCQkJcS0+cnhfZHJvcHMrKzsKIAkJCX0gZWxzZSBpZiAodW5saWtlbHkoci0+cnNzX2hkci5vcGNvZGUgPT0gQ1BMX1RSQUNFX1BLVCkpCiAJCQkJX19za2JfcHVsbChza2IsIDIpOwotCituZXh0X2ZsOgogCQkJaWYgKCsrZmwtPmNpZHggPT0gZmwtPnNpemUpCiAJCQkJZmwtPmNpZHggPSAwOwogCQl9IGVsc2UKQEAgLTIwNjAsOSArMjMwMywxMyBAQAogCQkJcS0+Y3JlZGl0cyA9IDA7CiAJCX0KIAotCQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgeworCQlwYWNrZXRfY29tcGxldGUgPSBmbGFncyAmCisJCQkJICAoRl9SU1BEX0VPUCB8IEZfUlNQRF9JTU1fREFUQV9WQUxJRCB8CisJCQkJICAgRl9SU1BEX0FTWU5DX05PVElGKTsKKworCQlpZiAoc2tiICE9IE5VTEwgJiYgcGFja2V0X2NvbXBsZXRlKSB7CiAJCQlpZiAoZXRoKQotCQkJCXJ4X2V0aChhZGFwLCBxLCBza2IsIGV0aHBhZCk7CisJCQkJcnhfZXRoKGFkYXAsIHEsIHNrYiwgZXRocGFkLCBscm8pOwogCQkJZWxzZSB7CiAJCQkJcS0+b2ZmbG9hZF9wa3RzKys7CiAJCQkJLyogUHJlc2VydmUgdGhlIFJTUyBpbmZvIGluIGNzdW0gJiBwcmlvcml0eSAqLwpAQCAtMjA3MiwxMSArMjMxOSwxOSBAQAogCQkJCQkJICAgICAgIG9mZmxvYWRfc2ticywKIAkJCQkJCSAgICAgICBuZ2F0aGVyZWQpOwogCQkJfQorCisJCQlpZiAoZmxhZ3MgJiBGX1JTUERfRU9QKQorCQkJCWNsZWFyX3JzcHFfYnVmc3RhdGUocSk7CiAJCX0KIAkJLS1idWRnZXRfbGVmdDsKIAl9CiAKIAlkZWxpdmVyX3BhcnRpYWxfYnVuZGxlKCZhZGFwLT50ZGV2LCBxLCBvZmZsb2FkX3NrYnMsIG5nYXRoZXJlZCk7CisJbHJvX2ZsdXNoX2FsbCgmcXMtPmxyb19tZ3IpOworCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9MUk9fQUdHUl0gPSBxcy0+bHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOworCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9MUk9fRkxVU0hFRF0gPSBxcy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOworCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9MUk9fTk9fREVTQ10gPSBxcy0+bHJvX21nci5zdGF0cy5ub19kZXNjOworCiAJaWYgKHNsZWVwaW5nKQogCQljaGVja19yaW5nX2RiKGFkYXAsIHFzLCBzbGVlcGluZyk7CiAKQEAgLTI2MTgsOCArMjg3Myw5IEBACiAJCSAgICAgIGludCBpcnFfdmVjX2lkeCwgY29uc3Qgc3RydWN0IHFzZXRfcGFyYW1zICpwLAogCQkgICAgICBpbnQgbnR4cSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpbnQgaSwgcmV0ID0gLUVOT01FTTsKKwlpbnQgaSwgYXZhaWwsIHJldCA9IC1FTk9NRU07CiAJc3RydWN0IHNnZV9xc2V0ICpxID0gJmFkYXB0ZXItPnNnZS5xc1tpZF07CisJc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyID0gJnEtPmxyb19tZ3I7CiAKIAlpbml0X3FzZXRfY250eHQocSwgaWQpOwogCWluaXRfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIpOwpAQCAtMjY4NywxMSArMjk0MywyMyBAQAogI2Vsc2UKIAlxLT5mbFswXS5idWZfc2l6ZSA9IFNHRV9SWF9TTV9CVUZfU0laRSArIHNpemVvZihzdHJ1Y3QgY3BsX3J4X2RhdGEpOwogI2VuZGlmCi0JcS0+ZmxbMF0udXNlX3BhZ2VzID0gRkwwX1BHX0NIVU5LX1NJWkUgPiAwOworI2lmIEZMMV9QR19DSFVOS19TSVpFID4gMAorCXEtPmZsWzFdLmJ1Zl9zaXplID0gRkwxX1BHX0NIVU5LX1NJWkU7CisjZWxzZQogCXEtPmZsWzFdLmJ1Zl9zaXplID0gaXNfb2ZmbG9hZChhZGFwdGVyKSA/CiAJCSgxNiAqIDEwMjQpIC0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSA6CiAJCU1BWF9GUkFNRV9TSVpFICsgMiArIHNpemVvZihzdHJ1Y3QgY3BsX3J4X3BrdCk7CisjZW5kaWYKIAorCXEtPmZsWzBdLnVzZV9wYWdlcyA9IEZMMF9QR19DSFVOS19TSVpFID4gMDsKKwlxLT5mbFsxXS51c2VfcGFnZXMgPSBGTDFfUEdfQ0hVTktfU0laRSA+IDA7CisJcS0+ZmxbMF0ub3JkZXIgPSBGTDBfUEdfT1JERVI7CisJcS0+ZmxbMV0ub3JkZXIgPSBGTDFfUEdfT1JERVI7CisKKwlxLT5scm9fZnJhZ190YmwgPSBrY2FsbG9jKE1BWF9GUkFNRV9TSVpFIC8gRkwxX1BHX0NIVU5LX1NJWkUgKyAxLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJcS0+bHJvX25mcmFncyA9IHEtPmxyb19mcmFnX2xlbiA9IDA7CiAJc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKIAogCS8qIEZMIHRocmVzaG9sZCBjb21wYXJpc29uIHVzZXMgPCAqLwpAQCAtMjc0Miw4ICszMDEwLDIzIEBACiAJcS0+bmV0ZGV2ID0gZGV2OwogCXQzX3VwZGF0ZV9xc2V0X2NvYWxlc2NlKHEsIHApOwogCi0JcmVmaWxsX2ZsKGFkYXB0ZXIsICZxLT5mbFswXSwgcS0+ZmxbMF0uc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JcmVmaWxsX2ZsKGFkYXB0ZXIsICZxLT5mbFsxXSwgcS0+ZmxbMV0uc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaW5pdF9scm9fbWdyKHEsIGxyb19tZ3IpOworCisJYXZhaWwgPSByZWZpbGxfZmwoYWRhcHRlciwgJnEtPmZsWzBdLCBxLT5mbFswXS5zaXplLAorCQkJICBHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCk7CisJaWYgKCFhdmFpbCkgeworCQlDSF9BTEVSVChhZGFwdGVyLCAiZnJlZSBsaXN0IHF1ZXVlIDAgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCWlmIChhdmFpbCA8IHEtPmZsWzBdLnNpemUpCisJCUNIX1dBUk4oYWRhcHRlciwgImZyZWUgbGlzdCBxdWV1ZSAwIGVuYWJsZWQgd2l0aCAlZCBjcmVkaXRzXG4iLAorCQkJYXZhaWwpOworCisJYXZhaWwgPSByZWZpbGxfZmwoYWRhcHRlciwgJnEtPmZsWzFdLCBxLT5mbFsxXS5zaXplLAorCQkJICBHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCk7CisJaWYgKGF2YWlsIDwgcS0+ZmxbMV0uc2l6ZSkKKwkJQ0hfV0FSTihhZGFwdGVyLCAiZnJlZSBsaXN0IHF1ZXVlIDEgZW5hYmxlZCB3aXRoICVkIGNyZWRpdHNcbiIsCisJCQlhdmFpbCk7CiAJcmVmaWxsX3JzcHEoYWRhcHRlciwgJnEtPnJzcHEsIHEtPnJzcHEuc2l6ZSAtIDEpOwogCiAJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfR1RTLCBWX1JTUFEocS0+cnNwcS5jbnR4dF9pZCkgfApAQCAtMjc1Miw5ICszMDM1LDkgQEAKIAltb2RfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBUWF9SRUNMQUlNX1BFUklPRCk7CiAJcmV0dXJuIDA7CiAKLSAgICAgIGVycl91bmxvY2s6CitlcnJfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKLSAgICAgIGVycjoKK2VycjoKIAl0M19mcmVlX3FzZXQoYWRhcHRlciwgcSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI4NzYsNyArMzE1OSw3IEBACiAJCXEtPmNvYWxlc2NlX3VzZWNzID0gNTsKIAkJcS0+cnNwcV9zaXplID0gMTAyNDsKIAkJcS0+Zmxfc2l6ZSA9IDEwMjQ7Ci0JCXEtPmp1bWJvX3NpemUgPSA1MTI7CisgCQlxLT5qdW1ib19zaXplID0gNTEyOwogCQlxLT50eHFfc2l6ZVtUWFFfRVRIXSA9IDEwMjQ7CiAJCXEtPnR4cV9zaXplW1RYUV9PRkxEXSA9IDEwMjQ7CiAJCXEtPnR4cV9zaXplW1RYUV9DVFJMXSA9IDI1NjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2NwbC5oIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfY3BsLmgKaW5kZXggYjdhMWEzMS4uOTE3OTcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfY3BsLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfY3BsLmgKQEAgLTE3NCw2ICsxNzQsMTMgQEAKIAlDT05HX0FMR19ISUdIU1BFRUQKIH07CiAKK2VudW0gewkJCS8qIFJTUyBoYXNoIHR5cGUgKi8KKwlSU1NfSEFTSF9OT05FID0gMCwKKwlSU1NfSEFTSF8yX1RVUExFID0gMSwKKwlSU1NfSEFTSF80X1RVUExFID0gMiwKKwlSU1NfSEFTSF9UQ1BWNiA9IDMKK307CisKIHVuaW9uIG9wY29kZV90aWQgewogCV9fYmUzMiBvcGNvZGVfdGlkOwogCV9fdTggb3Bjb2RlOwpAQCAtMTg0LDYgKzE5MSwxMyBAQAogI2RlZmluZSBHX09QQ09ERSh4KSAoKCh4KSA+PiBTX09QQ09ERSkgJiAweEZGKQogI2RlZmluZSBHX1RJRCh4KSAgICAoKHgpICYgMHhGRkZGRkYpCiAKKyNkZWZpbmUgU19RTlVNIDAKKyNkZWZpbmUgR19RTlVNKHgpICgoKHgpID4+IFNfUU5VTSkgJiAweEZGRkYpCisKKyNkZWZpbmUgU19IQVNIVFlQRSAyMgorI2RlZmluZSBNX0hBU0hUWVBFIDB4MworI2RlZmluZSBHX0hBU0hUWVBFKHgpICgoKHgpID4+IFNfSEFTSFRZUEUpICYgTV9IQVNIVFlQRSkKKwogLyogdGlkIGlzIGFzc3VtZWQgdG8gYmUgMjQtYml0cyAqLwogI2RlZmluZSBNS19PUENPREVfVElEKG9wY29kZSwgdGlkKSAoVl9PUENPREUob3Bjb2RlKSB8ICh0aWQpKQogCkBAIC03NjgsNiArNzgyLDEyIEBACiAJX19iZTMyIHBhcmFtOwogfTsKIAorLyogdHhfZGF0YV93ci5mbGFncyBmaWVsZHMgKi8KKyNkZWZpbmUgU19UWF9BQ0tfUEFHRVMJMjEKKyNkZWZpbmUgTV9UWF9BQ0tfUEFHRVMJMHg3CisjZGVmaW5lIFZfVFhfQUNLX1BBR0VTKHgpICgoeCkgPDwgU19UWF9BQ0tfUEFHRVMpCisjZGVmaW5lIEdfVFhfQUNLX1BBR0VTKHgpICgoKHgpID4+IFNfVFhfQUNLX1BBR0VTKSAmIE1fVFhfQUNLX1BBR0VTKQorCiAvKiB0eF9kYXRhX3dyLnBhcmFtIGZpZWxkcyAqLwogI2RlZmluZSBTX1RYX1BPUlQgICAgMAogI2RlZmluZSBNX1RYX1BPUlQgICAgMHg3CkBAIC0xNDQxLDQgKzE0NjEsMzUgQEAKICNkZWZpbmUgTV9URVJNX1RJRCAgICAweEZGRkZGCiAjZGVmaW5lIFZfVEVSTV9USUQoeCkgKCh4KSA8PCBTX1RFUk1fVElEKQogI2RlZmluZSBHX1RFUk1fVElEKHgpICgoKHgpID4+IFNfVEVSTV9USUQpICYgTV9URVJNX1RJRCkKKworLyogVUxQX1RYIG9wY29kZXMgKi8KK2VudW0geyBVTFBfTUVNX1JFQUQgPSAyLCBVTFBfTUVNX1dSSVRFID0gMywgVUxQX1RYUEtUID0gNCB9OworCisjZGVmaW5lIFNfVUxQVFhfQ01ECTI4CisjZGVmaW5lIE1fVUxQVFhfQ01ECTB4RgorI2RlZmluZSBWX1VMUFRYX0NNRCh4KQkoKHgpIDw8IFNfVUxQVFhfQ01EKQorCisjZGVmaW5lIFNfVUxQVFhfTkZMSVRTCTAKKyNkZWZpbmUgTV9VTFBUWF9ORkxJVFMJMHhGRgorI2RlZmluZSBWX1VMUFRYX05GTElUUyh4KSAoKHgpIDw8IFNfVUxQVFhfTkZMSVRTKQorCitzdHJ1Y3QgdWxwX21lbV9pbyB7CisJV1JfSERSOworCV9fYmUzMiBjbWRfbG9ja19hZGRyOworCV9fYmUzMiBsZW47Cit9OworCisvKiB1bHBfbWVtX2lvLmNtZF9sb2NrX2FkZHIgZmllbGRzICovCisjZGVmaW5lIFNfVUxQX01FTUlPX0FERFIJMAorI2RlZmluZSBNX1VMUF9NRU1JT19BRERSCTB4N0ZGRkZGRgorI2RlZmluZSBWX1VMUF9NRU1JT19BRERSKHgpCSgoeCkgPDwgU19VTFBfTUVNSU9fQUREUikKKyNkZWZpbmUgU19VTFBfTUVNSU9fTE9DSwkyNworI2RlZmluZSBWX1VMUF9NRU1JT19MT0NLKHgpCSgoeCkgPDwgU19VTFBfTUVNSU9fTE9DSykKKyNkZWZpbmUgRl9VTFBfTUVNSU9fTE9DSwlWX1VMUF9NRU1JT19MT0NLKDFVKQorCisvKiB1bHBfbWVtX2lvLmxlbiBmaWVsZHMgKi8KKyNkZWZpbmUgU19VTFBfTUVNSU9fREFUQV9MRU4JMjgKKyNkZWZpbmUgTV9VTFBfTUVNSU9fREFUQV9MRU4JMHhGCisjZGVmaW5lIFZfVUxQX01FTUlPX0RBVEFfTEVOKHgpCSgoeCkgPDwgU19VTFBfTUVNSU9fREFUQV9MRU4pCisKICNlbmRpZgkJCQkvKiBUM19DUExfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdDNjZGV2LmggYi9kcml2ZXJzL25ldC9jeGdiMy90M2NkZXYuaAppbmRleCBhMThjOGExLi4wYTIxY2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy90M2NkZXYuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy90M2NkZXYuaApAQCAtNDUsNyArNDUsOCBAQAogCiBlbnVtIHQzY3R5cGUgewogCVQzQSA9IDAsCi0JVDNCCisJVDNCLAorCVQzQywKIH07CiAKIHN0cnVjdCB0M2NkZXYgewpAQCAtNjMsNiArNjQsNyBAQAogCXZvaWQgKmwzb3B0OwkJLyogb3B0aW9uYWwgbGF5ZXIgMyBkYXRhICovCiAJdm9pZCAqbDRvcHQ7CQkvKiBvcHRpb25hbCBsYXllciA0IGRhdGEgKi8KIAl2b2lkICp1bHA7CQkvKiB1bHAgc3R1ZmYgKi8KKwl2b2lkICp1bHBfaXNjc2k7CS8qIHVscCBpc2NzaSAqLwogfTsKIAogI2VuZGlmCQkJCS8qIF9UM0NERVZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCmluZGV4IDZiMWU3N2MuLjNlMzUwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvZGVjbGFuY2UuYwpAQCAtNzczLDggKzc3Myw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXYgPSAwOwotCiBzdGF0aWMgaW50IGxhbmNlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl2b2xhdGlsZSB1MTYgKmliID0gKHZvbGF0aWxlIHUxNiAqKWRldi0+bWVtX3N0YXJ0OwpAQCAtNzgyLDggKzc4MCw2IEBACiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX3JlZ3MgKmxsID0gbHAtPmxsOwogCWludCBzdGF0dXMgPSAwOwogCi0JbGFzdF9kZXYgPSBkZXY7Ci0KIAkvKiBTdG9wIHRoZSBMYW5jZSAqLwogCXdyaXRlcmVnKCZsbC0+cmFwLCBMRV9DU1IwKTsKIAl3cml0ZXJlZygmbGwtPnJkcCwgTEVfQzBfU1RPUCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbDJrLmMgYi9kcml2ZXJzL25ldC9kbDJrLmMKaW5kZXggZTIzM2QwNC4uZjgwMzcxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGwyay5jCisrKyBiL2RyaXZlcnMvbmV0L2RsMmsuYwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJCQllbnRyeSA9IG5wLT5vbGRfcnggJSBSWF9SSU5HX1NJWkU7CiAJCQkvKiBEcm9wcGVkIHBhY2tldHMgZG9uJ3QgbmVlZCB0byByZS1hbGxvY2F0ZSAqLwogCQkJaWYgKG5wLT5yeF9za2J1ZmZbZW50cnldID09IE5VTEwpIHsKLQkJCQlza2IgPSBkZXZfYWxsb2Nfc2tiIChucC0+cnhfYnVmX3N6KTsKKwkJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiIChkZXYsIG5wLT5yeF9idWZfc3opOwogCQkJCWlmIChza2IgPT0gTlVMTCkgewogCQkJCQlucC0+cnhfcmluZ1tlbnRyeV0uZnJhZ2luZm8gPSAwOwogCQkJCQlwcmludGsgKEtFUk5fSU5GTwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJLyogQWxsb2NhdGUgdGhlIHJ4IGJ1ZmZlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKIAkJLyogQWxsb2NhdGVkIGZpeGVkIHNpemUgb2Ygc2tidWZmICovCi0JCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiIChucC0+cnhfYnVmX3N6KTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5ldGRldl9hbGxvY19za2IgKGRldiwgbnAtPnJ4X2J1Zl9zeik7CiAJCW5wLT5yeF9za2J1ZmZbaV0gPSBza2I7CiAJCWlmIChza2IgPT0gTlVMTCkgewogCQkJcHJpbnRrIChLRVJOX0VSUgpAQCAtODY3LDcgKzg2Nyw3IEBACiAJCQkJCQkgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiX3B1dCAoc2tiID0gbnAtPnJ4X3NrYnVmZltlbnRyeV0sIHBrdF9sZW4pOwogCQkJCW5wLT5yeF9za2J1ZmZbZW50cnldID0gTlVMTDsKLQkJCX0gZWxzZSBpZiAoKHNrYiA9IGRldl9hbGxvY19za2IgKHBrdF9sZW4gKyAyKSkgIT0gTlVMTCkgeworCQkJfSBlbHNlIGlmICgoc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHBrdF9sZW4gKyAyKSkpIHsKIAkJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUobnAtPnBkZXYsCiAJCQkJCQkJICAgIGRlc2NfdG9fZG1hKGRlc2MpLAogCQkJCQkJCSAgICBucC0+cnhfYnVmX3N6LApAQCAtOTA0LDcgKzkwNCw3IEBACiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCS8qIERyb3BwZWQgcGFja2V0cyBkb24ndCBuZWVkIHRvIHJlLWFsbG9jYXRlICovCiAJCWlmIChucC0+cnhfc2tidWZmW2VudHJ5XSA9PSBOVUxMKSB7Ci0JCQlza2IgPSBkZXZfYWxsb2Nfc2tiIChucC0+cnhfYnVmX3N6KTsKKwkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBucC0+cnhfYnVmX3N6KTsKIAkJCWlmIChza2IgPT0gTlVMTCkgewogCQkJCW5wLT5yeF9yaW5nW2VudHJ5XS5mcmFnaW5mbyA9IDA7CiAJCQkJcHJpbnRrIChLRVJOX0lORk8KQEAgLTE3NTMsNyArMTc1Myw3IEBACiAKIAkvKiBTdG9wIFR4IGFuZCBSeCBsb2dpY3MgKi8KIAl3cml0ZWwgKFR4RGlzYWJsZSB8IFJ4RGlzYWJsZSB8IFN0YXRzRGlzYWJsZSwgaW9hZGRyICsgTUFDQ3RybCk7Ci0Jc3luY2hyb25pemVfaXJxIChkZXYtPmlycSk7CisKIAlmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7CiAJZGVsX3RpbWVyX3N5bmMgKCZucC0+dGltZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IDg2NDI5NWUuLjBiMGYxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC00NCw5ICs0NCw4IEBACiAKICNkZWZpbmUgRE05MDAwX1BIWQkJMHg0MAkvKiBQSFkgYWRkcmVzcyAweDAxICovCiAKLSNkZWZpbmUgQ0FSRE5BTUUgImRtOTAwMCIKLSNkZWZpbmUgUEZYIENBUkROQU1FICI6ICIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMzAiCisjZGVmaW5lIENBUkROQU1FCSJkbTkwMDAiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjMxIgogCiAjaWZkZWYgQ09ORklHX0JMQUNLRklOCiAjZGVmaW5lIHJlYWRzYglpbnNiCkBAIC01NSw5ICs1NCw2IEBACiAjZGVmaW5lIHdyaXRlc2IJb3V0c2IKICNkZWZpbmUgd3JpdGVzdwlvdXRzdwogI2RlZmluZSB3cml0ZXNsCW91dHNsCi0jZGVmaW5lIERFRkFVTFRfVFJJR0dFUiBJUlFGX1RSSUdHRVJfSElHSAotI2Vsc2UKLSNkZWZpbmUgREVGQVVMVF9UUklHR0VSICgwKQogI2VuZGlmCiAKIC8qCkBAIC04NSwyMyArODEsMzYgQEAKICAqIHRoZXNlIHR3byBkZXZpY2VzLgogICovCiAKKy8qIFRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIG9yaWdpbmFsIERNOTAwMEUsIGFuZCBub3cgdGhlIHR3byBuZXdlcgorICogZGV2aWNlcywgRE05MDAwQSBhbmQgRE05MDAwQi4KKyAqLworCitlbnVtIGRtOTAwMF90eXBlIHsKKwlUWVBFX0RNOTAwMEUsCS8qIG9yaWdpbmFsIERNOTAwMCAqLworCVRZUEVfRE05MDAwQSwKKwlUWVBFX0RNOTAwMEIKK307CisKIC8qIFN0cnVjdHVyZS9lbnVtIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHR5cGVkZWYgc3RydWN0IGJvYXJkX2luZm8gewogCi0Jdm9pZCBfX2lvbWVtICppb19hZGRyOwkvKiBSZWdpc3RlciBJL08gYmFzZSBhZGRyZXNzICovCi0Jdm9pZCBfX2lvbWVtICppb19kYXRhOwkvKiBEYXRhIEkvTyBhZGRyZXNzICovCi0JdTE2IGlycTsJCS8qIElSUSAqLworCXZvaWQgX19pb21lbQkqaW9fYWRkcjsJLyogUmVnaXN0ZXIgSS9PIGJhc2UgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbQkqaW9fZGF0YTsJLyogRGF0YSBJL08gYWRkcmVzcyAqLworCXUxNgkJIGlycTsJCS8qIElSUSAqLwogCi0JdTE2IHR4X3BrdF9jbnQ7Ci0JdTE2IHF1ZXVlX3BrdF9sZW47Ci0JdTE2IHF1ZXVlX3N0YXJ0X2FkZHI7Ci0JdTE2IGRidWdfY250OwotCXU4IGlvX21vZGU7CQkvKiAwOndvcmQsIDI6Ynl0ZSAqLwotCXU4IHBoeV9hZGRyOwotCXVuc2lnbmVkIGludCBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaW5fc3VzcGVuZCA6MTsKKwl1MTYJCXR4X3BrdF9jbnQ7CisJdTE2CQlxdWV1ZV9wa3RfbGVuOworCXUxNgkJcXVldWVfc3RhcnRfYWRkcjsKKwl1MTYJCWRidWdfY250OworCXU4CQlpb19tb2RlOwkJLyogMDp3b3JkLCAyOmJ5dGUgKi8KKwl1OAkJcGh5X2FkZHI7CisJdTgJCWltcl9hbGw7CiAKLQlpbnQgZGVidWdfbGV2ZWw7CisJdW5zaWduZWQgaW50CWZsYWdzOworCXVuc2lnbmVkIGludAlpbl9zdXNwZW5kIDoxOworCWludAkJZGVidWdfbGV2ZWw7CisKKwllbnVtIGRtOTAwMF90eXBlIHR5cGU7CiAKIAl2b2lkICgqaW5ibGspKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqZGF0YSwgaW50IGxlbmd0aCk7CiAJdm9pZCAoKm91dGJsaykodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICpkYXRhLCBpbnQgbGVuZ3RoKTsKQEAgLTEyMCwxMCArMTI5LDEwIEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBwaHlfcG9sbDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgKm5kZXY7CiAKLQlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdAlsb2NrOwogCiAJc3RydWN0IG1paV9pZl9pbmZvIG1paTsKLQl1MzIgbXNnX2VuYWJsZTsKKwl1MzIJCW1zZ19lbmFibGU7CiB9IGJvYXJkX2luZm9fdDsKIAogLyogZGVidWcgY29kZSAqLwpAQCAtMTQwLDI2ICsxNDksNiBAQAogCXJldHVybiBkZXYtPnByaXY7CiB9CiAKLS8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBpbnQgZG05MDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGRtOTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBkbTkwMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgZG05MDAwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGRtOTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJlcSwgaW50IGNtZCk7Ci0KLXN0YXRpYyB2b2lkIGRtOTAwMF9pbml0X2RtOTAwMChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLQotc3RhdGljIGlycXJldHVybl90IGRtOTAwMF9pbnRlcnJ1cHQoaW50LCB2b2lkICopOwotCi1zdGF0aWMgaW50IGRtOTAwMF9waHlfcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5YWRkcl91bnN1c2VkLCBpbnQgcmVnKTsKLXN0YXRpYyB2b2lkIGRtOTAwMF9waHlfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeWFkZHJfdW51c2VkLCBpbnQgcmVnLAotCQkJICAgaW50IHZhbHVlKTsKLQotc3RhdGljIHZvaWQgZG05MDAwX3JlYWRfZWVwcm9tKGJvYXJkX2luZm9fdCAqLCBpbnQgYWRkciwgdTggKnRvKTsKLXN0YXRpYyB2b2lkIGRtOTAwMF93cml0ZV9lZXByb20oYm9hcmRfaW5mb190ICosIGludCBhZGRyLCB1OCAqZHApOwotc3RhdGljIHZvaWQgZG05MDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgZG05MDAwX2hhc2hfdGFibGUoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci0KIC8qIERNOTAwMCBuZXR3b3JrIGJvYXJkIHJvdXRpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdm9pZApAQCAtMzAyLDQ0ICsyOTEsMTAgQEAKIAogc3RhdGljIHZvaWQgZG05MDAwX3NjaGVkdWxlX3BvbGwoYm9hcmRfaW5mb190ICpkYikKIHsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRiLT5waHlfcG9sbCwgSFogKiAyKTsKKwlpZiAoZGItPnR5cGUgPT0gVFlQRV9ETTkwMDBFKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRiLT5waHlfcG9sbCwgSFogKiAyKTsKIH0KIAotLyogT3VyIHdhdGNoZG9nIHRpbWVkIG91dC4gQ2FsbGVkIGJ5IHRoZSBuZXR3b3JraW5nIGxheWVyICovCi1zdGF0aWMgdm9pZCBkbTkwMDBfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWJvYXJkX2luZm9fdCAqZGIgPSAoYm9hcmRfaW5mb190ICopIGRldi0+cHJpdjsKLQl1OCByZWdfc2F2ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogU2F2ZSBwcmV2aW91cyByZWdpc3RlciBhZGRyZXNzICovCi0JcmVnX3NhdmUgPSByZWFkYihkYi0+aW9fYWRkcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLGZsYWdzKTsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQlkbTkwMDBfcmVzZXQoZGIpOwotCWRtOTAwMF9pbml0X2RtOTAwMChkZXYpOwotCS8qIFdlIGNhbiBhY2NlcHQgVFggcGFja2V0cyBhZ2FpbiAqLwotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQotCS8qIFJlc3RvcmUgcHJldmlvdXMgcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXdyaXRlYihyZWdfc2F2ZSwgZGItPmlvX2FkZHIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLGZsYWdzKTsKLX0KLQotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0vKgotICpVc2VkIGJ5IG5ldGNvbnNvbGUKLSAqLwotc3RhdGljIHZvaWQgZG05MDAwX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKLQlkbTkwMDBfaW50ZXJydXB0KGRldi0+aXJxLGRldik7Ci0JZW5hYmxlX2lycShkZXYtPmlycSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCBkbTkwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpyZXEsIGludCBjbWQpCiB7CiAJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOwpAQCAtMzUwLDc1MCArMzA1LDYgQEAKIAlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmRtLT5taWksIGlmX21paShyZXEpLCBjbWQsIE5VTEwpOwogfQogCi0vKiBldGh0b29sIG9wcyAqLwotCi1zdGF0aWMgdm9pZCBkbTkwMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQotewotCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKLQotCXN0cmNweShpbmZvLT5kcml2ZXIsIENBUkROQU1FKTsKLQlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04pOwotCXN0cmNweShpbmZvLT5idXNfaW5mbywgdG9fcGxhdGZvcm1fZGV2aWNlKGRtLT5kZXYpLT5uYW1lKTsKLX0KLQotc3RhdGljIHUzMiBkbTkwMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOwotCi0JcmV0dXJuIGRtLT5tc2dfZW5hYmxlOwotfQotCi1zdGF0aWMgdm9pZCBkbTkwMDBfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKLXsKLQlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7Ci0KLQlkbS0+bXNnX2VuYWJsZSA9IHZhbHVlOwotfQotCi1zdGF0aWMgaW50IGRtOTAwMF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCi17Ci0JYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOwotCi0JbWlpX2V0aHRvb2xfZ3NldCgmZG0tPm1paSwgY21kKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkbTkwMDBfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQotewotCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKLQotCXJldHVybiBtaWlfZXRodG9vbF9zc2V0KCZkbS0+bWlpLCBjbWQpOwotfQotCi1zdGF0aWMgaW50IGRtOTAwMF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOwotCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZkbS0+bWlpKTsKLX0KLQotc3RhdGljIHUzMiBkbTkwMDBfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7Ci0JcmV0dXJuIG1paV9saW5rX29rKCZkbS0+bWlpKTsKLX0KLQotI2RlZmluZSBETV9FRVBST01fTUFHSUMJCSgweDQ0NEQzOTRCKQotCi1zdGF0aWMgaW50IGRtOTAwMF9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAxMjg7Ci19Ci0KLXN0YXRpYyBpbnQgZG05MDAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZSwgdTggKmRhdGEpCi17Ci0JYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOwotCWludCBvZmZzZXQgPSBlZS0+b2Zmc2V0OwotCWludCBsZW4gPSBlZS0+bGVuOwotCWludCBpOwotCi0JLyogRUVQUk9NIGFjY2VzcyBpcyBhbGlnbmVkIHRvIHR3byBieXRlcyAqLwotCi0JaWYgKChsZW4gJiAxKSAhPSAwIHx8IChvZmZzZXQgJiAxKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChkbS0+ZmxhZ3MgJiBETTkwMDBfUExBVEZfTk9fRUVQUk9NKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWVlLT5tYWdpYyA9IERNX0VFUFJPTV9NQUdJQzsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMikKLQkJZG05MDAwX3JlYWRfZWVwcm9tKGRtLCAob2Zmc2V0ICsgaSkgLyAyLCBkYXRhICsgaSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkbTkwMDBfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlLCB1OCAqZGF0YSkKLXsKLQlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7Ci0JaW50IG9mZnNldCA9IGVlLT5vZmZzZXQ7Ci0JaW50IGxlbiA9IGVlLT5sZW47Ci0JaW50IGk7Ci0KLQkvKiBFRVBST00gYWNjZXNzIGlzIGFsaWduZWQgdG8gdHdvIGJ5dGVzICovCi0KLQlpZiAoKGxlbiAmIDEpICE9IDAgfHwgKG9mZnNldCAmIDEpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGRtLT5mbGFncyAmIERNOTAwMF9QTEFURl9OT19FRVBST00pCi0JCXJldHVybiAtRU5PRU5UOwotCi0JaWYgKGVlLT5tYWdpYyAhPSBETV9FRVBST01fTUFHSUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyKQotCQlkbTkwMDBfd3JpdGVfZWVwcm9tKGRtLCAob2Zmc2V0ICsgaSkgLyAyLCBkYXRhICsgaSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBkbTkwMDBfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9kcnZpbmZvCQk9IGRtOTAwMF9nZXRfZHJ2aW5mbywKLQkuZ2V0X3NldHRpbmdzCQk9IGRtOTAwMF9nZXRfc2V0dGluZ3MsCi0JLnNldF9zZXR0aW5ncwkJPSBkbTkwMDBfc2V0X3NldHRpbmdzLAotCS5nZXRfbXNnbGV2ZWwJCT0gZG05MDAwX2dldF9tc2dsZXZlbCwKLQkuc2V0X21zZ2xldmVsCQk9IGRtOTAwMF9zZXRfbXNnbGV2ZWwsCi0JLm53YXlfcmVzZXQJCT0gZG05MDAwX253YXlfcmVzZXQsCi0JLmdldF9saW5rCQk9IGRtOTAwMF9nZXRfbGluaywKLSAJLmdldF9lZXByb21fbGVuCQk9IGRtOTAwMF9nZXRfZWVwcm9tX2xlbiwKLSAJLmdldF9lZXByb20JCT0gZG05MDAwX2dldF9lZXByb20sCi0gCS5zZXRfZWVwcm9tCQk9IGRtOTAwMF9zZXRfZWVwcm9tLAotfTsKLQotc3RhdGljIHZvaWQKLWRtOTAwMF9wb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KQotewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwotCWJvYXJkX2luZm9fdCAqZGIgPSBjb250YWluZXJfb2YoZHcsIGJvYXJkX2luZm9fdCwgcGh5X3BvbGwpOwotCi0JbWlpX2NoZWNrX21lZGlhKCZkYi0+bWlpLCBuZXRpZl9tc2dfbGluayhkYiksIDApOwotCQotCWlmIChuZXRpZl9ydW5uaW5nKGRiLT5uZGV2KSkKLQkJZG05MDAwX3NjaGVkdWxlX3BvbGwoZGIpOwotfQotCi0vKiBkbTkwMDBfcmVsZWFzZV9ib2FyZAotICoKLSAqIHJlbGVhc2UgYSBib2FyZCwgYW5kIGFueSBtYXBwZWQgcmVzb3VyY2VzCi0gKi8KLQotc3RhdGljIHZvaWQKLWRtOTAwMF9yZWxlYXNlX2JvYXJkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBib2FyZF9pbmZvICpkYikKLXsKLQlpZiAoZGItPmRhdGFfcmVzID09IE5VTEwpIHsKLQkJaWYgKGRiLT5hZGRyX3JlcyAhPSBOVUxMKQotCQkJcmVsZWFzZV9tZW1fcmVnaW9uKCh1bnNpZ25lZCBsb25nKWRiLT5pb19hZGRyLCA0KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHVubWFwIG91ciByZXNvdXJjZXMgKi8KLQotCWlvdW5tYXAoZGItPmlvX2FkZHIpOwotCWlvdW5tYXAoZGItPmlvX2RhdGEpOwotCi0JLyogcmVsZWFzZSB0aGUgcmVzb3VyY2VzICovCi0KLQlpZiAoZGItPmRhdGFfcmVxICE9IE5VTEwpIHsKLQkJcmVsZWFzZV9yZXNvdXJjZShkYi0+ZGF0YV9yZXEpOwotCQlrZnJlZShkYi0+ZGF0YV9yZXEpOwotCX0KLQotCWlmIChkYi0+YWRkcl9yZXEgIT0gTlVMTCkgewotCQlyZWxlYXNlX3Jlc291cmNlKGRiLT5hZGRyX3JlcSk7Ci0JCWtmcmVlKGRiLT5hZGRyX3JlcSk7Ci0JfQotfQotCi0jZGVmaW5lIHJlc19zaXplKF9yKSAoKChfciktPmVuZCAtIChfciktPnN0YXJ0KSArIDEpCi0KLS8qCi0gKiBTZWFyY2ggRE05MDAwIGJvYXJkLCBhbGxvY2F0ZSBzcGFjZSBhbmQgcmVnaXN0ZXIgaXQKLSAqLwotc3RhdGljIGludCBfX2RldmluaXQKLWRtOTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBib2FyZF9pbmZvICpkYjsJLyogUG9pbnQgYSBib2FyZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKLQljb25zdCB1bnNpZ25lZCBjaGFyICptYWNfc3JjOwotCXVuc2lnbmVkIGxvbmcgYmFzZTsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgaW9zaXplOwotCWludCBpOwotCXUzMiBpZF92YWw7Ci0KLQkvKiBJbml0IG5ldHdvcmsgZGV2aWNlICovCi0JbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZiAoc3RydWN0IGJvYXJkX2luZm8pKTsKLQlpZiAoIW5kZXYpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGRldmljZS5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKLQotCWRldl9kYmcoJnBkZXYtPmRldiwgImRtOTAwMF9wcm9iZSgpXG4iKTsKLQotCS8qIHNldHVwIGJvYXJkIGluZm8gc3RydWN0dXJlICovCi0JZGIgPSAoc3RydWN0IGJvYXJkX2luZm8gKikgbmRldi0+cHJpdjsKLQltZW1zZXQoZGIsIDAsIHNpemVvZiAoKmRiKSk7Ci0KLQlkYi0+ZGV2ID0gJnBkZXYtPmRldjsKLQlkYi0+bmRldiA9IG5kZXY7Ci0KLQlzcGluX2xvY2tfaW5pdCgmZGItPmxvY2spOwotCW11dGV4X2luaXQoJmRiLT5hZGRyX2xvY2spOwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJmRiLT5waHlfcG9sbCwgZG05MDAwX3BvbGxfd29yayk7Ci0KLQotCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzIDwgMikgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgPT0gMikgewotCQliYXNlID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7Ci0KLQkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYmFzZSwgNCwgbmRldi0+bmFtZSkpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJbmRldi0+YmFzZV9hZGRyID0gYmFzZTsKLQkJbmRldi0+aXJxID0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7Ci0JCWRiLT5pb19hZGRyID0gKHZvaWQgX19pb21lbSAqKWJhc2U7Ci0JCWRiLT5pb19kYXRhID0gKHZvaWQgX19pb21lbSAqKShiYXNlICsgNCk7Ci0KLQkJLyogZW5zdXJlIGF0IGxlYXN0IHdlIGhhdmUgYSBkZWZhdWx0IHNldCBvZiBJTyByb3V0aW5lcyAqLwotCQlkbTkwMDBfc2V0X2lvKGRiLCAyKTsKLQotCX0gZWxzZSB7Ci0JCWRiLT5hZGRyX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JCWRiLT5kYXRhX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JCWRiLT5pcnFfcmVzICA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7Ci0KLQkJaWYgKGRiLT5hZGRyX3JlcyA9PSBOVUxMIHx8IGRiLT5kYXRhX3JlcyA9PSBOVUxMIHx8Ci0JCSAgICBkYi0+aXJxX3JlcyA9PSBOVUxMKSB7Ci0JCQlkZXZfZXJyKGRiLT5kZXYsICJpbnN1ZmZpY2llbnQgcmVzb3VyY2VzXG4iKTsKLQkJCXJldCA9IC1FTk9FTlQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWkgPSByZXNfc2l6ZShkYi0+YWRkcl9yZXMpOwotCQlkYi0+YWRkcl9yZXEgPSByZXF1ZXN0X21lbV9yZWdpb24oZGItPmFkZHJfcmVzLT5zdGFydCwgaSwKLQkJCQkJCSAgcGRldi0+bmFtZSk7Ci0KLQkJaWYgKGRiLT5hZGRyX3JlcSA9PSBOVUxMKSB7Ci0JCQlkZXZfZXJyKGRiLT5kZXYsICJjYW5ub3QgY2xhaW0gYWRkcmVzcyByZWcgYXJlYVxuIik7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlkYi0+aW9fYWRkciA9IGlvcmVtYXAoZGItPmFkZHJfcmVzLT5zdGFydCwgaSk7Ci0KLQkJaWYgKGRiLT5pb19hZGRyID09IE5VTEwpIHsKLQkJCWRldl9lcnIoZGItPmRldiwgImZhaWxlZCB0byBpb3JlbWFwIGFkZHJlc3MgcmVnXG4iKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlvc2l6ZSA9IHJlc19zaXplKGRiLT5kYXRhX3Jlcyk7Ci0JCWRiLT5kYXRhX3JlcSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihkYi0+ZGF0YV9yZXMtPnN0YXJ0LCBpb3NpemUsCi0JCQkJCQkgIHBkZXYtPm5hbWUpOwotCi0JCWlmIChkYi0+ZGF0YV9yZXEgPT0gTlVMTCkgewotCQkJZGV2X2VycihkYi0+ZGV2LCAiY2Fubm90IGNsYWltIGRhdGEgcmVnIGFyZWFcbiIpOwotCQkJcmV0ID0gLUVJTzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJZGItPmlvX2RhdGEgPSBpb3JlbWFwKGRiLT5kYXRhX3Jlcy0+c3RhcnQsIGlvc2l6ZSk7Ci0KLQkJaWYgKGRiLT5pb19kYXRhID09IE5VTEwpIHsKLQkJCWRldl9lcnIoZGItPmRldiwiZmFpbGVkIHRvIGlvcmVtYXAgZGF0YSByZWdcbiIpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogZmlsbCBpbiBwYXJhbWV0ZXJzIGZvciBuZXQtZGV2IHN0cnVjdHVyZSAqLwotCi0JCW5kZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRiLT5pb19hZGRyOwotCQluZGV2LT5pcnEJPSBkYi0+aXJxX3Jlcy0+c3RhcnQ7Ci0KLQkJLyogZW5zdXJlIGF0IGxlYXN0IHdlIGhhdmUgYSBkZWZhdWx0IHNldCBvZiBJTyByb3V0aW5lcyAqLwotCQlkbTkwMDBfc2V0X2lvKGRiLCBpb3NpemUpOwotCX0KLQotCS8qIGNoZWNrIHRvIHNlZSBpZiBhbnl0aGluZyBpcyBiZWluZyBvdmVyLXJpZGRlbiAqLwotCWlmIChwZGF0YSAhPSBOVUxMKSB7Ci0JCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGUgZHJpdmVyIHdhbnRzIHRvIG92ZXItcmlkZSB0aGUKLQkJICogZGVmYXVsdCBJTyB3aWR0aCAqLwotCi0JCWlmIChwZGF0YS0+ZmxhZ3MgJiBETTkwMDBfUExBVEZfOEJJVE9OTFkpCi0JCQlkbTkwMDBfc2V0X2lvKGRiLCAxKTsKLQotCQlpZiAocGRhdGEtPmZsYWdzICYgRE05MDAwX1BMQVRGXzE2QklUT05MWSkKLQkJCWRtOTAwMF9zZXRfaW8oZGIsIDIpOwotCi0JCWlmIChwZGF0YS0+ZmxhZ3MgJiBETTkwMDBfUExBVEZfMzJCSVRPTkxZKQotCQkJZG05MDAwX3NldF9pbyhkYiwgNCk7Ci0KLQkJLyogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgSU8gcm91dGluZQotCQkgKiBvdmVyLXJpZGVzICovCi0KLQkJaWYgKHBkYXRhLT5pbmJsayAhPSBOVUxMKQotCQkJZGItPmluYmxrID0gcGRhdGEtPmluYmxrOwotCi0JCWlmIChwZGF0YS0+b3V0YmxrICE9IE5VTEwpCi0JCQlkYi0+b3V0YmxrID0gcGRhdGEtPm91dGJsazsKLQotCQlpZiAocGRhdGEtPmR1bXBibGsgIT0gTlVMTCkKLQkJCWRiLT5kdW1wYmxrID0gcGRhdGEtPmR1bXBibGs7Ci0KLQkJZGItPmZsYWdzID0gcGRhdGEtPmZsYWdzOwotCX0KLQotCWRtOTAwMF9yZXNldChkYik7Ci0KLQkvKiB0cnkgdHdvIHRpbWVzLCBETTkwMDAgc29tZXRpbWVzIGdldHMgdGhlIGZpcnN0IHJlYWQgd3JvbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlkX3ZhbCAgPSBpb3IoZGIsIERNOTAwMF9WSURMKTsKLQkJaWRfdmFsIHw9ICh1MzIpaW9yKGRiLCBETTkwMDBfVklESCkgPDwgODsKLQkJaWRfdmFsIHw9ICh1MzIpaW9yKGRiLCBETTkwMDBfUElETCkgPDwgMTY7Ci0JCWlkX3ZhbCB8PSAodTMyKWlvcihkYiwgRE05MDAwX1BJREgpIDw8IDI0OwotCi0JCWlmIChpZF92YWwgPT0gRE05MDAwX0lEKQotCQkJYnJlYWs7Ci0JCWRldl9lcnIoZGItPmRldiwgInJlYWQgd3JvbmcgaWQgMHglMDh4XG4iLCBpZF92YWwpOwotCX0KLQotCWlmIChpZF92YWwgIT0gRE05MDAwX0lEKSB7Ci0JCWRldl9lcnIoZGItPmRldiwgIndyb25nIGlkOiAweCUwOHhcbiIsIGlkX3ZhbCk7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGZyb20gdGhpcyBwb2ludCB3ZSBhc3N1bWUgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgRE05MDAwICovCi0KLQkvKiBkcml2ZXIgc3lzdGVtIGZ1bmN0aW9uICovCi0JZXRoZXJfc2V0dXAobmRldik7Ci0KLQluZGV2LT5vcGVuCQkgPSAmZG05MDAwX29wZW47Ci0JbmRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gJmRtOTAwMF9zdGFydF94bWl0OwotCW5kZXYtPnR4X3RpbWVvdXQgICAgICAgICA9ICZkbTkwMDBfdGltZW91dDsKLQluZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpOwotCW5kZXYtPnN0b3AJCSA9ICZkbTkwMDBfc3RvcDsKLQluZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmZG05MDAwX2hhc2hfdGFibGU7Ci0JbmRldi0+ZXRodG9vbF9vcHMJID0gJmRtOTAwMF9ldGh0b29sX29wczsKLQluZGV2LT5kb19pb2N0bAkJID0gJmRtOTAwMF9pb2N0bDsKLQotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JbmRldi0+cG9sbF9jb250cm9sbGVyCSA9ICZkbTkwMDBfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCi0KLQlkYi0+bXNnX2VuYWJsZSAgICAgICA9IE5FVElGX01TR19MSU5LOwotCWRiLT5taWkucGh5X2lkX21hc2sgID0gMHgxZjsKLQlkYi0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7Ci0JZGItPm1paS5mb3JjZV9tZWRpYSAgPSAwOwotCWRiLT5taWkuZnVsbF9kdXBsZXggID0gMDsKLQlkYi0+bWlpLmRldgkgICAgID0gbmRldjsKLQlkYi0+bWlpLm1kaW9fcmVhZCAgICA9IGRtOTAwMF9waHlfcmVhZDsKLQlkYi0+bWlpLm1kaW9fd3JpdGUgICA9IGRtOTAwMF9waHlfd3JpdGU7Ci0KLQltYWNfc3JjID0gImVlcHJvbSI7Ci0KLQkvKiB0cnkgcmVhZGluZyB0aGUgbm9kZSBhZGRyZXNzIGZyb20gdGhlIGF0dGFjaGVkIEVFUFJPTSAqLwotCWZvciAoaSA9IDA7IGkgPCA2OyBpICs9IDIpCi0JCWRtOTAwMF9yZWFkX2VlcHJvbShkYiwgaSAvIDIsIG5kZXYtPmRldl9hZGRyK2kpOwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5kZXYtPmRldl9hZGRyKSkgewotCQkvKiB0cnkgcmVhZGluZyBmcm9tIG1hYyAqLwotCQkKLQkJbWFjX3NyYyA9ICJjaGlwIjsKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCW5kZXYtPmRldl9hZGRyW2ldID0gaW9yKGRiLCBpK0RNOTAwMF9QQVIpOwotCX0KLQotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZGV2LT5kZXZfYWRkcikpCi0JCWRldl93YXJuKGRiLT5kZXYsICIlczogSW52YWxpZCBldGhlcm5ldCBNQUMgYWRkcmVzcy4gUGxlYXNlICIKLQkJCSAic2V0IHVzaW5nIGlmY29uZmlnXG4iLCBuZGV2LT5uYW1lKTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOwotCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKLQotCWlmIChyZXQgPT0gMCkgewotCQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQkJcHJpbnRrKCIlczogZG05MDAwIGF0ICVwLCVwIElSUSAlZCBNQUM6ICVzICglcylcbiIsCi0JCSAgICAgICBuZGV2LT5uYW1lLCAgZGItPmlvX2FkZHIsIGRiLT5pb19kYXRhLCBuZGV2LT5pcnEsCi0JCSAgICAgICBwcmludF9tYWMobWFjLCBuZGV2LT5kZXZfYWRkciksIG1hY19zcmMpOwotCX0KLQlyZXR1cm4gMDsKLQotb3V0OgotCWRldl9lcnIoZGItPmRldiwgIm5vdCBmb3VuZCAoJWQpLlxuIiwgcmV0KTsKLQotCWRtOTAwMF9yZWxlYXNlX2JvYXJkKHBkZXYsIGRiKTsKLQlmcmVlX25ldGRldihuZGV2KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiAgT3BlbiB0aGUgaW50ZXJmYWNlLgotICogIFRoZSBpbnRlcmZhY2UgaXMgb3BlbmVkIHdoZW5ldmVyICJpZmNvbmZpZyIgYWN0aXZlcyBpdC4KLSAqLwotc3RhdGljIGludAotZG05MDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlib2FyZF9pbmZvX3QgKmRiID0gKGJvYXJkX2luZm9fdCAqKSBkZXYtPnByaXY7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IGRiLT5pcnFfcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwotCi0JaWYgKG5ldGlmX21zZ19pZnVwKGRiKSkKLQkJZGV2X2RiZyhkYi0+ZGV2LCAiZW5hYmxpbmcgJXNcbiIsIGRldi0+bmFtZSk7Ci0KLQkvKiBJZiB0aGVyZSBpcyBubyBJUlEgdHlwZSBzcGVjaWZpZWQsIGRlZmF1bHQgdG8gc29tZXRoaW5nIHRoYXQKLQkgKiBtYXkgd29yaywgYW5kIHRlbGwgdGhlIHVzZXIgdGhhdCB0aGlzIGlzIGEgcHJvYmxlbSAqLwotCi0JaWYgKGlycWZsYWdzID09IElSUUZfVFJJR0dFUl9OT05FKSB7Ci0JCWRldl93YXJuKGRiLT5kZXYsICJXQVJOSU5HOiBubyBJUlEgcmVzb3VyY2UgZmxhZ3Mgc2V0LlxuIik7Ci0JCWlycWZsYWdzID0gREVGQVVMVF9UUklHR0VSOwotCX0KLQkKLQlpcnFmbGFncyB8PSBJUlFGX1NIQVJFRDsKLQotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmRtOTAwMF9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtPm5hbWUsIGRldikpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JLyogSW5pdGlhbGl6ZSBETTkwMDAgYm9hcmQgKi8KLQlkbTkwMDBfcmVzZXQoZGIpOwotCWRtOTAwMF9pbml0X2RtOTAwMChkZXYpOwotCi0JLyogSW5pdCBkcml2ZXIgdmFyaWFibGUgKi8KLQlkYi0+ZGJ1Z19jbnQgPSAwOwotCi0JbWlpX2NoZWNrX21lZGlhKCZkYi0+bWlpLCBuZXRpZl9tc2dfbGluayhkYiksIDEpOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCi0JZG05MDAwX3NjaGVkdWxlX3BvbGwoZGIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbml0aWxpemUgZG05MDAwIGJvYXJkCi0gKi8KLXN0YXRpYyB2b2lkCi1kbTkwMDBfaW5pdF9kbTkwMDAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlib2FyZF9pbmZvX3QgKmRiID0gKGJvYXJkX2luZm9fdCAqKSBkZXYtPnByaXY7Ci0KLQlkbTkwMDBfZGJnKGRiLCAxLCAiZW50ZXJpbmcgJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qIEkvTyBtb2RlICovCi0JZGItPmlvX21vZGUgPSBpb3IoZGIsIERNOTAwMF9JU1IpID4+IDY7CS8qIElTUiBiaXQ3OjYga2VlcHMgSS9PIG1vZGUgKi8KLQotCS8qIEdQSU8wIG9uIHByZS1hY3RpdmF0ZSBQSFkgKi8KLQlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBSRUdfMUYgYml0MCBhY3RpdmF0ZSBwaHl4Y2VyICovCi0JaW93KGRiLCBETTkwMDBfR1BDUiwgR1BDUl9HRVBfQ05UTCk7CS8qIExldCBHUElPMCBvdXRwdXQgKi8KLQlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBFbmFibGUgUEhZICovCi0KLQlpZiAoZGItPmZsYWdzICYgRE05MDAwX1BMQVRGX0VYVF9QSFkpCi0JCWlvdyhkYiwgRE05MDAwX05DUiwgTkNSX0VYVF9QSFkpOwotCi0JLyogUHJvZ3JhbSBvcGVyYXRpbmcgcmVnaXN0ZXIgKi8KLQlpb3coZGIsIERNOTAwMF9UQ1IsIDApOwkgICAgICAgIC8qIFRYIFBvbGxpbmcgY2xlYXIgKi8KLQlpb3coZGIsIERNOTAwMF9CUFRSLCAweDNmKTsJLyogTGVzcyAzS2IsIDIwMHVzICovCi0JaW93KGRiLCBETTkwMDBfRkNSLCAweGZmKTsJLyogRmxvdyBDb250cm9sICovCi0JaW93KGRiLCBETTkwMDBfU01DUiwgMCk7ICAgICAgICAvKiBTcGVjaWFsIE1vZGUgKi8KLQkvKiBjbGVhciBUWCBzdGF0dXMgKi8KLQlpb3coZGIsIERNOTAwMF9OU1IsIE5TUl9XQUtFU1QgfCBOU1JfVFgyRU5EIHwgTlNSX1RYMUVORCk7Ci0JaW93KGRiLCBETTkwMDBfSVNSLCBJU1JfQ0xSX1NUQVRVUyk7IC8qIENsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KLQotCS8qIFNldCBhZGRyZXNzIGZpbHRlciB0YWJsZSAqLwotCWRtOTAwMF9oYXNoX3RhYmxlKGRldik7Ci0KLQkvKiBFbmFibGUgVFgvUlggaW50ZXJydXB0IG1hc2sgKi8KLQlpb3coZGIsIERNOTAwMF9JTVIsIElNUl9QQVIgfCBJTVJfUFRNIHwgSU1SX1BSTSk7Ci0KLQkvKiBJbml0IERyaXZlciB2YXJpYWJsZSAqLwotCWRiLT50eF9wa3RfY250ID0gMDsKLQlkYi0+cXVldWVfcGt0X2xlbiA9IDA7Ci0JZGV2LT50cmFuc19zdGFydCA9IDA7Ci19Ci0KLS8qCi0gKiAgSGFyZHdhcmUgc3RhcnQgdHJhbnNtaXNzaW9uLgotICogIFNlbmQgYSBwYWNrZXQgdG8gbWVkaWEgZnJvbSB0aGUgdXBwZXIgbGF5ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWRtOTAwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlib2FyZF9pbmZvX3QgKmRiID0gKGJvYXJkX2luZm9fdCAqKSBkZXYtPnByaXY7Ci0KLQlkbTkwMDBfZGJnKGRiLCAzLCAiJXM6XG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoZGItPnR4X3BrdF9jbnQgPiAxKQotCQlyZXR1cm4gMTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOwotCi0JLyogTW92ZSBkYXRhIHRvIERNOTAwMCBUWCBSQU0gKi8KLQl3cml0ZWIoRE05MDAwX01XQ01ELCBkYi0+aW9fYWRkcik7Ci0KLQkoZGItPm91dGJsaykoZGItPmlvX2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0KLQlkYi0+dHhfcGt0X2NudCsrOwotCS8qIFRYIGNvbnRyb2w6IEZpcnN0IHBhY2tldCBpbW1lZGlhdGVseSBzZW5kLCBzZWNvbmQgcGFja2V0IHF1ZXVlICovCi0JaWYgKGRiLT50eF9wa3RfY250ID09IDEpIHsKLQkJLyogU2V0IFRYIGxlbmd0aCB0byBETTkwMDAgKi8KLQkJaW93KGRiLCBETTkwMDBfVFhQTEwsIHNrYi0+bGVuKTsKLQkJaW93KGRiLCBETTkwMDBfVFhQTEgsIHNrYi0+bGVuID4+IDgpOwotCi0JCS8qIElzc3VlIFRYIHBvbGxpbmcgY29tbWFuZCAqLwotCQlpb3coZGIsIERNOTAwMF9UQ1IsIFRDUl9UWFJFUSk7CS8qIENsZWFyZWQgYWZ0ZXIgVFggY29tcGxldGUgKi8KLQotCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogc2F2ZSB0aGUgdGltZSBzdGFtcCAqLwotCX0gZWxzZSB7Ci0JCS8qIFNlY29uZCBwYWNrZXQgKi8KLQkJZGItPnF1ZXVlX3BrdF9sZW4gPSBza2ItPmxlbjsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBmcmVlIHRoaXMgU0tCICovCi0JZGV2X2tmcmVlX3NrYihza2IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kbTkwMDBfc2h1dGRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlib2FyZF9pbmZvX3QgKmRiID0gKGJvYXJkX2luZm9fdCAqKSBkZXYtPnByaXY7Ci0KLQkvKiBSRVNFVCBkZXZpY2UgKi8KLQlkbTkwMDBfcGh5X3dyaXRlKGRldiwgMCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwkvKiBQSFkgUkVTRVQgKi8KLQlpb3coZGIsIERNOTAwMF9HUFIsIDB4MDEpOwkvKiBQb3dlci1Eb3duIFBIWSAqLwotCWlvdyhkYiwgRE05MDAwX0lNUiwgSU1SX1BBUik7CS8qIERpc2FibGUgYWxsIGludGVycnVwdCAqLwotCWlvdyhkYiwgRE05MDAwX1JDUiwgMHgwMCk7CS8qIERpc2FibGUgUlggKi8KLX0KLQotLyoKLSAqIFN0b3AgdGhlIGludGVyZmFjZS4KLSAqIFRoZSBpbnRlcmZhY2UgaXMgc3RvcHBlZCB3aGVuIGl0IGlzIGJyb3VnaHQuCi0gKi8KLXN0YXRpYyBpbnQKLWRtOTAwMF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCWJvYXJkX2luZm9fdCAqZGIgPSAoYm9hcmRfaW5mb190ICopIG5kZXYtPnByaXY7Ci0KLQlpZiAobmV0aWZfbXNnX2lmZG93bihkYikpCi0JCWRldl9kYmcoZGItPmRldiwgInNodXR0aW5nIGRvd24gJXNcbiIsIG5kZXYtPm5hbWUpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkYi0+cGh5X3BvbGwpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKLQluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKLQotCS8qIGZyZWUgaW50ZXJydXB0ICovCi0JZnJlZV9pcnEobmRldi0+aXJxLCBuZGV2KTsKLQotCWRtOTAwMF9zaHV0ZG93bihuZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogRE05MDAwIGludGVycnVwdCBoYW5kbGVyCi0gKiByZWNlaXZlIHRoZSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXIsIGZyZWUgdGhlIHRyYW5zbWl0dGVkIHBhY2tldAotICovCi0KLXN0YXRpYyB2b2lkCi1kbTkwMDBfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib2FyZF9pbmZvX3QgKiBkYikKLXsKLQlpbnQgdHhfc3RhdHVzID0gaW9yKGRiLCBETTkwMDBfTlNSKTsJLyogR290IFRYIHN0YXR1cyAqLwotCi0JaWYgKHR4X3N0YXR1cyAmIChOU1JfVFgyRU5EIHwgTlNSX1RYMUVORCkpIHsKLQkJLyogT25lIHBhY2tldCBzZW50IGNvbXBsZXRlICovCi0JCWRiLT50eF9wa3RfY250LS07Ci0JCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCi0JCWlmIChuZXRpZl9tc2dfdHhfZG9uZShkYikpCi0JCQlkZXZfZGJnKGRiLT5kZXYsICJ0eCBkb25lLCBOU1IgJTAyeFxuIiwgdHhfc3RhdHVzKTsKLQotCQkvKiBRdWV1ZSBwYWNrZXQgY2hlY2sgJiBzZW5kICovCi0JCWlmIChkYi0+dHhfcGt0X2NudCA+IDApIHsKLQkJCWlvdyhkYiwgRE05MDAwX1RYUExMLCBkYi0+cXVldWVfcGt0X2xlbik7Ci0JCQlpb3coZGIsIERNOTAwMF9UWFBMSCwgZGItPnF1ZXVlX3BrdF9sZW4gPj4gOCk7Ci0JCQlpb3coZGIsIERNOTAwMF9UQ1IsIFRDUl9UWFJFUSk7Ci0JCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJfQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JfQotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QKLWRtOTAwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0JYm9hcmRfaW5mb190ICpkYiA9IChib2FyZF9pbmZvX3QgKikgZGV2LT5wcml2OwotCWludCBpbnRfc3RhdHVzOwotCXU4IHJlZ19zYXZlOwotCi0JZG05MDAwX2RiZyhkYiwgMywgImVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBBIHJlYWwgaW50ZXJydXB0IGNvbWluZyAqLwotCi0Jc3Bpbl9sb2NrKCZkYi0+bG9jayk7Ci0KLQkvKiBTYXZlIHByZXZpb3VzIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLQlyZWdfc2F2ZSA9IHJlYWRiKGRiLT5pb19hZGRyKTsKLQotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQlpb3coZGIsIERNOTAwMF9JTVIsIElNUl9QQVIpOwotCi0JLyogR290IERNOTAwMCBpbnRlcnJ1cHQgc3RhdHVzICovCi0JaW50X3N0YXR1cyA9IGlvcihkYiwgRE05MDAwX0lTUik7CS8qIEdvdCBJU1IgKi8KLQlpb3coZGIsIERNOTAwMF9JU1IsIGludF9zdGF0dXMpOwkvKiBDbGVhciBJU1Igc3RhdHVzICovCi0KLQlpZiAobmV0aWZfbXNnX2ludHIoZGIpKQotCQlkZXZfZGJnKGRiLT5kZXYsICJpbnRlcnJ1cHQgc3RhdHVzICUwMnhcbiIsIGludF9zdGF0dXMpOwotCi0JLyogUmVjZWl2ZWQgdGhlIGNvbWluZyBwYWNrZXQgKi8KLQlpZiAoaW50X3N0YXR1cyAmIElTUl9QUlMpCi0JCWRtOTAwMF9yeChkZXYpOwotCi0JLyogVHJuYXNtaXQgSW50ZXJydXB0IGNoZWNrICovCi0JaWYgKGludF9zdGF0dXMgJiBJU1JfUFRTKQotCQlkbTkwMDBfdHhfZG9uZShkZXYsIGRiKTsKLQotCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHQgbWFzayAqLwotCWlvdyhkYiwgRE05MDAwX0lNUiwgSU1SX1BBUiB8IElNUl9QVE0gfCBJTVJfUFJNKTsKLQotCS8qIFJlc3RvcmUgcHJldmlvdXMgcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXdyaXRlYihyZWdfc2F2ZSwgZGItPmlvX2FkZHIpOwotCi0Jc3Bpbl91bmxvY2soJmRiLT5sb2NrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RydWN0IGRtOTAwMF9yeGhkciB7Ci0JdTgJUnhQa3RSZWFkeTsKLQl1OAlSeFN0YXR1czsKLQlfX2xlMTYJUnhMZW47Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotLyoKLSAqICBSZWNlaXZlZCBhIHBhY2tldCBhbmQgcGFzcyB0byB1cHBlciBsYXllcgotICovCi1zdGF0aWMgdm9pZAotZG05MDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JYm9hcmRfaW5mb190ICpkYiA9IChib2FyZF9pbmZvX3QgKikgZGV2LT5wcml2OwotCXN0cnVjdCBkbTkwMDBfcnhoZHIgcnhoZHI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1OCByeGJ5dGUsICpyZHB0cjsKLQlib29sIEdvb2RQYWNrZXQ7Ci0JaW50IFJ4TGVuOwotCi0JLyogQ2hlY2sgcGFja2V0IHJlYWR5IG9yIG5vdCAqLwotCWRvIHsKLQkJaW9yKGRiLCBETTkwMDBfTVJDTURYKTsJLyogRHVtbXkgcmVhZCAqLwotCi0JCS8qIEdldCBtb3N0IHVwZGF0ZWQgZGF0YSAqLwotCQlyeGJ5dGUgPSByZWFkYihkYi0+aW9fZGF0YSk7Ci0KLQkJLyogU3RhdHVzIGNoZWNrOiB0aGlzIGJ5dGUgbXVzdCBiZSAwIG9yIDEgKi8KLQkJaWYgKHJ4Ynl0ZSA+IERNOTAwMF9QS1RfUkRZKSB7Ci0JCQlkZXZfd2FybihkYi0+ZGV2LCAic3RhdHVzIGNoZWNrIGZhaWw6ICVkXG4iLCByeGJ5dGUpOwotCQkJaW93KGRiLCBETTkwMDBfUkNSLCAweDAwKTsJLyogU3RvcCBEZXZpY2UgKi8KLQkJCWlvdyhkYiwgRE05MDAwX0lTUiwgSU1SX1BBUik7CS8qIFN0b3AgSU5UIHJlcXVlc3QgKi8KLQkJCXJldHVybjsKLQkJfQotCi0JCWlmIChyeGJ5dGUgIT0gRE05MDAwX1BLVF9SRFkpCi0JCQlyZXR1cm47Ci0KLQkJLyogQSBwYWNrZXQgcmVhZHkgbm93ICAmIEdldCBzdGF0dXMvbGVuZ3RoICovCi0JCUdvb2RQYWNrZXQgPSB0cnVlOwotCQl3cml0ZWIoRE05MDAwX01SQ01ELCBkYi0+aW9fYWRkcik7Ci0KLQkJKGRiLT5pbmJsaykoZGItPmlvX2RhdGEsICZyeGhkciwgc2l6ZW9mKHJ4aGRyKSk7Ci0KLQkJUnhMZW4gPSBsZTE2X3RvX2NwdShyeGhkci5SeExlbik7Ci0KLQkJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMoZGIpKQotCQkJZGV2X2RiZyhkYi0+ZGV2LCAiUlg6IHN0YXR1cyAlMDJ4LCBsZW5ndGggJTA0eFxuIiwKLQkJCQlyeGhkci5SeFN0YXR1cywgUnhMZW4pOwotCi0JCS8qIFBhY2tldCBTdGF0dXMgY2hlY2sgKi8KLQkJaWYgKFJ4TGVuIDwgMHg0MCkgewotCQkJR29vZFBhY2tldCA9IGZhbHNlOwotCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoZGIpKQotCQkJCWRldl9kYmcoZGItPmRldiwgIlJYOiBCYWQgUGFja2V0IChydW50KVxuIik7Ci0JCX0KLQotCQlpZiAoUnhMZW4gPiBETTkwMDBfUEtUX01BWCkgewotCQkJZGV2X2RiZyhkYi0+ZGV2LCAiUlNUOiBSWCBMZW46JXhcbiIsIFJ4TGVuKTsKLQkJfQotCi0JCWlmIChyeGhkci5SeFN0YXR1cyAmIDB4YmYpIHsKLQkJCUdvb2RQYWNrZXQgPSBmYWxzZTsKLQkJCWlmIChyeGhkci5SeFN0YXR1cyAmIDB4MDEpIHsKLQkJCQlpZiAobmV0aWZfbXNnX3J4X2VycihkYikpCi0JCQkJCWRldl9kYmcoZGItPmRldiwgImZpZm8gZXJyb3JcbiIpOwotCQkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKLQkJCX0KLQkJCWlmIChyeGhkci5SeFN0YXR1cyAmIDB4MDIpIHsKLQkJCQlpZiAobmV0aWZfbXNnX3J4X2VycihkYikpCi0JCQkJCWRldl9kYmcoZGItPmRldiwgImNyYyBlcnJvclxuIik7Ci0JCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQl9Ci0JCQlpZiAocnhoZHIuUnhTdGF0dXMgJiAweDgwKSB7Ci0JCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoZGIpKQotCQkJCQlkZXZfZGJnKGRiLT5kZXYsICJsZW5ndGggZXJyb3JcbiIpOwotCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJfQotCQl9Ci0KLQkJLyogTW92ZSBkYXRhIGZyb20gRE05MDAwICovCi0JCWlmIChHb29kUGFja2V0Ci0JCSAgICAmJiAoKHNrYiA9IGRldl9hbGxvY19za2IoUnhMZW4gKyA0KSkgIT0gTlVMTCkpIHsKLQkJCXNrYl9yZXNlcnZlKHNrYiwgMik7Ci0JCQlyZHB0ciA9ICh1OCAqKSBza2JfcHV0KHNrYiwgUnhMZW4gLSA0KTsKLQotCQkJLyogUmVhZCByZWNlaXZlZCBwYWNrZXQgZnJvbSBSWCBTUkFNICovCi0KLQkJCShkYi0+aW5ibGspKGRiLT5pb19kYXRhLCByZHB0ciwgUnhMZW4pOwotCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBSeExlbjsKLQotCQkJLyogUGFzcyB0byB1cHBlciBsYXllciAqLwotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJCW5ldGlmX3J4KHNrYik7Ci0JCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQotCQl9IGVsc2UgewotCQkJLyogbmVlZCB0byBkdW1wIHRoZSBwYWNrZXQncyBkYXRhICovCi0KLQkJCShkYi0+ZHVtcGJsaykoZGItPmlvX2RhdGEsIFJ4TGVuKTsKLQkJfQotCX0gd2hpbGUgKHJ4Ynl0ZSA9PSBETTkwMDBfUEtUX1JEWSk7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQKIGRtOTAwMF9yZWFkX2xvY2tlZChib2FyZF9pbmZvX3QgKmRiLCBpbnQgcmVnKQogewpAQCAtMTExNSw3ICszMjYsNyBAQAogCS8qIFRoZSBETTkwMDAgZGF0YSBzaGVldHMgc2F5IHdlIHNob3VsZCBiZSBhYmxlIHRvCiAJICogcG9sbCB0aGUgRVJSRSBiaXQgaW4gRVBDUiB0byB3YWl0IGZvciB0aGUgRUVQUk9NCiAJICogb3BlcmF0aW9uLiBGcm9tIHRlc3Rpbmcgc2V2ZXJhbCBjaGlwcywgdGhpcyBiaXQKLQkgKiBkb2VzIG5vdCBzZWVtIHRvIHdvcmsuIAorCSAqIGRvZXMgbm90IHNlZW0gdG8gd29yay4KIAkgKgogCSAqIFdlIGF0dGVtcHQgdG8gdXNlIHRoZSBiaXQsIGJ1dCBmYWxsIGJhY2sgdG8gdGhlCiAJICogdGltZW91dCAod2hpY2ggaXMgd2h5IHdlIGRvIG5vdCByZXR1cm4gYW4gZXJyb3IKQEAgLTExMjksNiArMzQwLDggQEAKIAkJaWYgKChzdGF0dXMgJiBFUENSX0VSUkUpID09IDApCiAJCQlicmVhazsKIAorCQltc2xlZXAoMSk7CisKIAkJaWYgKHRpbWVvdXQtLSA8IDApIHsKIAkJCWRldl9kYmcoZGItPmRldiwgInRpbWVvdXQgd2FpdGluZyBFRVBST01cbiIpOwogCQkJYnJlYWs7CkBAIC0xMjA5LDYgKzQyMiwyMTMgQEAKIAltdXRleF91bmxvY2soJmRiLT5hZGRyX2xvY2spOwogfQogCisvKiBldGh0b29sIG9wcyAqLworCitzdGF0aWMgdm9pZCBkbTkwMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKKworCXN0cmNweShpbmZvLT5kcml2ZXIsIENBUkROQU1FKTsKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04pOworCXN0cmNweShpbmZvLT5idXNfaW5mbywgdG9fcGxhdGZvcm1fZGV2aWNlKGRtLT5kZXYpLT5uYW1lKTsKK30KKworc3RhdGljIHUzMiBkbTkwMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOworCisJcmV0dXJuIGRtLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBkbTkwMDBfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKK3sKKwlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7CisKKwlkbS0+bXNnX2VuYWJsZSA9IHZhbHVlOworfQorCitzdGF0aWMgaW50IGRtOTAwMF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOworCisJbWlpX2V0aHRvb2xfZ3NldCgmZG0tPm1paSwgY21kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbTkwMDBfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKKworCXJldHVybiBtaWlfZXRodG9vbF9zc2V0KCZkbS0+bWlpLCBjbWQpOworfQorCitzdGF0aWMgaW50IGRtOTAwMF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOworCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZkbS0+bWlpKTsKK30KKworc3RhdGljIHUzMiBkbTkwMDBfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7CisJdTMyIHJldDsKKworCWlmIChkbS0+ZmxhZ3MgJiBETTkwMDBfUExBVEZfRVhUX1BIWSkKKwkJcmV0ID0gbWlpX2xpbmtfb2soJmRtLT5taWkpOworCWVsc2UKKwkJcmV0ID0gZG05MDAwX3JlYWRfbG9ja2VkKGRtLCBETTkwMDBfTlNSKSAmIE5TUl9MSU5LU1QgPyAxIDogMDsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgRE1fRUVQUk9NX01BR0lDCQkoMHg0NDREMzk0QikKKworc3RhdGljIGludCBkbTkwMDBfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMTI4OworfQorCitzdGF0aWMgaW50IGRtOTAwMF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWUsIHU4ICpkYXRhKQoreworCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKKwlpbnQgb2Zmc2V0ID0gZWUtPm9mZnNldDsKKwlpbnQgbGVuID0gZWUtPmxlbjsKKwlpbnQgaTsKKworCS8qIEVFUFJPTSBhY2Nlc3MgaXMgYWxpZ25lZCB0byB0d28gYnl0ZXMgKi8KKworCWlmICgobGVuICYgMSkgIT0gMCB8fCAob2Zmc2V0ICYgMSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZG0tPmZsYWdzICYgRE05MDAwX1BMQVRGX05PX0VFUFJPTSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwllZS0+bWFnaWMgPSBETV9FRVBST01fTUFHSUM7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpCisJCWRtOTAwMF9yZWFkX2VlcHJvbShkbSwgKG9mZnNldCArIGkpIC8gMiwgZGF0YSArIGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG05MDAwX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZSwgdTggKmRhdGEpCit7CisJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOworCWludCBvZmZzZXQgPSBlZS0+b2Zmc2V0OworCWludCBsZW4gPSBlZS0+bGVuOworCWludCBpOworCisJLyogRUVQUk9NIGFjY2VzcyBpcyBhbGlnbmVkIHRvIHR3byBieXRlcyAqLworCisJaWYgKChsZW4gJiAxKSAhPSAwIHx8IChvZmZzZXQgJiAxKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkbS0+ZmxhZ3MgJiBETTkwMDBfUExBVEZfTk9fRUVQUk9NKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWlmIChlZS0+bWFnaWMgIT0gRE1fRUVQUk9NX01BR0lDKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMikKKwkJZG05MDAwX3dyaXRlX2VlcHJvbShkbSwgKG9mZnNldCArIGkpIC8gMiwgZGF0YSArIGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZG05MDAwX2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbwkJPSBkbTkwMDBfZ2V0X2RydmluZm8sCisJLmdldF9zZXR0aW5ncwkJPSBkbTkwMDBfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gZG05MDAwX3NldF9zZXR0aW5ncywKKwkuZ2V0X21zZ2xldmVsCQk9IGRtOTAwMF9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPSBkbTkwMDBfc2V0X21zZ2xldmVsLAorCS5ud2F5X3Jlc2V0CQk9IGRtOTAwMF9ud2F5X3Jlc2V0LAorCS5nZXRfbGluawkJPSBkbTkwMDBfZ2V0X2xpbmssCisgCS5nZXRfZWVwcm9tX2xlbgkJPSBkbTkwMDBfZ2V0X2VlcHJvbV9sZW4sCisgCS5nZXRfZWVwcm9tCQk9IGRtOTAwMF9nZXRfZWVwcm9tLAorIAkuc2V0X2VlcHJvbQkJPSBkbTkwMDBfc2V0X2VlcHJvbSwKK307CisKK3N0YXRpYyB2b2lkIGRtOTAwMF9zaG93X2NhcnJpZXIoYm9hcmRfaW5mb190ICpkYiwKKwkJCQl1bnNpZ25lZCBjYXJyaWVyLCB1bnNpZ25lZCBuc3IpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkYi0+bmRldjsKKwl1bnNpZ25lZCBuY3IgPSBkbTkwMDBfcmVhZF9sb2NrZWQoZGIsIERNOTAwMF9OQ1IpOworCisJaWYgKGNhcnJpZXIpCisJCWRldl9pbmZvKGRiLT5kZXYsICIlczogbGluayB1cCwgJWRNYnBzLCAlcy1kdXBsZXgsIG5vIExQQVxuIiwKKwkJCSBuZGV2LT5uYW1lLCAobnNyICYgTlNSX1NQRUVEKSA/IDEwIDogMTAwLAorCQkJIChuY3IgJiBOQ1JfRkRYKSA/ICJmdWxsIiA6ICJoYWxmIik7CisJZWxzZQorCQlkZXZfaW5mbyhkYi0+ZGV2LCAiJXM6IGxpbmsgZG93blxuIiwgbmRldi0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitkbTkwMDBfcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlib2FyZF9pbmZvX3QgKmRiID0gY29udGFpbmVyX29mKGR3LCBib2FyZF9pbmZvX3QsIHBoeV9wb2xsKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRiLT5uZGV2OworCisJaWYgKGRiLT5mbGFncyAmIERNOTAwMF9QTEFURl9TSU1QTEVfUEhZICYmCisJICAgICEoZGItPmZsYWdzICYgRE05MDAwX1BMQVRGX0VYVF9QSFkpKSB7CisJCXVuc2lnbmVkIG5zciA9IGRtOTAwMF9yZWFkX2xvY2tlZChkYiwgRE05MDAwX05TUik7CisJCXVuc2lnbmVkIG9sZF9jYXJyaWVyID0gbmV0aWZfY2Fycmllcl9vayhuZGV2KSA/IDEgOiAwOworCQl1bnNpZ25lZCBuZXdfY2FycmllcjsKKworCQluZXdfY2FycmllciA9IChuc3IgJiBOU1JfTElOS1NUKSA/IDEgOiAwOworCisJCWlmIChvbGRfY2FycmllciAhPSBuZXdfY2FycmllcikgeworCQkJaWYgKG5ldGlmX21zZ19saW5rKGRiKSkKKwkJCQlkbTkwMDBfc2hvd19jYXJyaWVyKGRiLCBuZXdfY2FycmllciwgbnNyKTsKKworCQkJaWYgKCFuZXdfY2FycmllcikKKwkJCQluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKKwkJCWVsc2UKKwkJCQluZXRpZl9jYXJyaWVyX29uKG5kZXYpOworCQl9CisJfSBlbHNlCisJCW1paV9jaGVja19tZWRpYSgmZGItPm1paSwgbmV0aWZfbXNnX2xpbmsoZGIpLCAwKTsKKwkKKwlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKKwkJZG05MDAwX3NjaGVkdWxlX3BvbGwoZGIpOworfQorCisvKiBkbTkwMDBfcmVsZWFzZV9ib2FyZAorICoKKyAqIHJlbGVhc2UgYSBib2FyZCwgYW5kIGFueSBtYXBwZWQgcmVzb3VyY2VzCisgKi8KKworc3RhdGljIHZvaWQKK2RtOTAwMF9yZWxlYXNlX2JvYXJkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBib2FyZF9pbmZvICpkYikKK3sKKwkvKiB1bm1hcCBvdXIgcmVzb3VyY2VzICovCisKKwlpb3VubWFwKGRiLT5pb19hZGRyKTsKKwlpb3VubWFwKGRiLT5pb19kYXRhKTsKKworCS8qIHJlbGVhc2UgdGhlIHJlc291cmNlcyAqLworCisJcmVsZWFzZV9yZXNvdXJjZShkYi0+ZGF0YV9yZXEpOworCWtmcmVlKGRiLT5kYXRhX3JlcSk7CisKKwlyZWxlYXNlX3Jlc291cmNlKGRiLT5hZGRyX3JlcSk7CisJa2ZyZWUoZGItPmFkZHJfcmVxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZG05MDAwX3R5cGVfdG9fY2hhcihlbnVtIGRtOTAwMF90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBUWVBFX0RNOTAwMEU6IHJldHVybiAnZSc7CisJY2FzZSBUWVBFX0RNOTAwMEE6IHJldHVybiAnYSc7CisJY2FzZSBUWVBFX0RNOTAwMEI6IHJldHVybiAnYic7CisJfQorCisJcmV0dXJuICc/JzsKK30KKwogLyoKICAqICBTZXQgRE05MDAwIG11bHRpY2FzdCBhZGRyZXNzCiAgKi8KQEAgLTEyNjAsNiArNjgwLDM2MiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiB9CiAKKy8qCisgKiBJbml0aWxpemUgZG05MDAwIGJvYXJkCisgKi8KK3N0YXRpYyB2b2lkCitkbTkwMDBfaW5pdF9kbTkwMDAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlib2FyZF9pbmZvX3QgKmRiID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGludCBpbXI7CisKKwlkbTkwMDBfZGJnKGRiLCAxLCAiZW50ZXJpbmcgJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIEkvTyBtb2RlICovCisJZGItPmlvX21vZGUgPSBpb3IoZGIsIERNOTAwMF9JU1IpID4+IDY7CS8qIElTUiBiaXQ3OjYga2VlcHMgSS9PIG1vZGUgKi8KKworCS8qIEdQSU8wIG9uIHByZS1hY3RpdmF0ZSBQSFkgKi8KKwlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBSRUdfMUYgYml0MCBhY3RpdmF0ZSBwaHl4Y2VyICovCisJaW93KGRiLCBETTkwMDBfR1BDUiwgR1BDUl9HRVBfQ05UTCk7CS8qIExldCBHUElPMCBvdXRwdXQgKi8KKwlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBFbmFibGUgUEhZICovCisKKwlpZiAoZGItPmZsYWdzICYgRE05MDAwX1BMQVRGX0VYVF9QSFkpCisJCWlvdyhkYiwgRE05MDAwX05DUiwgTkNSX0VYVF9QSFkpOworCisJLyogUHJvZ3JhbSBvcGVyYXRpbmcgcmVnaXN0ZXIgKi8KKwlpb3coZGIsIERNOTAwMF9UQ1IsIDApOwkgICAgICAgIC8qIFRYIFBvbGxpbmcgY2xlYXIgKi8KKwlpb3coZGIsIERNOTAwMF9CUFRSLCAweDNmKTsJLyogTGVzcyAzS2IsIDIwMHVzICovCisJaW93KGRiLCBETTkwMDBfRkNSLCAweGZmKTsJLyogRmxvdyBDb250cm9sICovCisJaW93KGRiLCBETTkwMDBfU01DUiwgMCk7ICAgICAgICAvKiBTcGVjaWFsIE1vZGUgKi8KKwkvKiBjbGVhciBUWCBzdGF0dXMgKi8KKwlpb3coZGIsIERNOTAwMF9OU1IsIE5TUl9XQUtFU1QgfCBOU1JfVFgyRU5EIHwgTlNSX1RYMUVORCk7CisJaW93KGRiLCBETTkwMDBfSVNSLCBJU1JfQ0xSX1NUQVRVUyk7IC8qIENsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KKworCS8qIFNldCBhZGRyZXNzIGZpbHRlciB0YWJsZSAqLworCWRtOTAwMF9oYXNoX3RhYmxlKGRldik7CisKKwlpbXIgPSBJTVJfUEFSIHwgSU1SX1BUTSB8IElNUl9QUk07CisJaWYgKGRiLT50eXBlICE9IFRZUEVfRE05MDAwRSkKKwkJaW1yIHw9IElNUl9MTktDSE5HOworCisJZGItPmltcl9hbGwgPSBpbXI7CisKKwkvKiBFbmFibGUgVFgvUlggaW50ZXJydXB0IG1hc2sgKi8KKwlpb3coZGIsIERNOTAwMF9JTVIsIGltcik7CisKKwkvKiBJbml0IERyaXZlciB2YXJpYWJsZSAqLworCWRiLT50eF9wa3RfY250ID0gMDsKKwlkYi0+cXVldWVfcGt0X2xlbiA9IDA7CisJZGV2LT50cmFuc19zdGFydCA9IDA7Cit9CisKKy8qIE91ciB3YXRjaGRvZyB0aW1lZCBvdXQuIENhbGxlZCBieSB0aGUgbmV0d29ya2luZyBsYXllciAqLworc3RhdGljIHZvaWQgZG05MDAwX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlib2FyZF9pbmZvX3QgKmRiID0gKGJvYXJkX2luZm9fdCAqKSBkZXYtPnByaXY7CisJdTggcmVnX3NhdmU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFNhdmUgcHJldmlvdXMgcmVnaXN0ZXIgYWRkcmVzcyAqLworCXJlZ19zYXZlID0gcmVhZGIoZGItPmlvX2FkZHIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOworCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCWRtOTAwMF9yZXNldChkYik7CisJZG05MDAwX2luaXRfZG05MDAwKGRldik7CisJLyogV2UgY2FuIGFjY2VwdCBUWCBwYWNrZXRzIGFnYWluICovCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCisJLyogUmVzdG9yZSBwcmV2aW91cyByZWdpc3RlciBhZGRyZXNzICovCisJd3JpdGViKHJlZ19zYXZlLCBkYi0+aW9fYWRkcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqICBIYXJkd2FyZSBzdGFydCB0cmFuc21pc3Npb24uCisgKiAgU2VuZCBhIHBhY2tldCB0byBtZWRpYSBmcm9tIHRoZSB1cHBlciBsYXllci4KKyAqLworc3RhdGljIGludAorZG05MDAwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvYXJkX2luZm9fdCAqZGIgPSBkZXYtPnByaXY7CisKKwlkbTkwMDBfZGJnKGRiLCAzLCAiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZGItPnR4X3BrdF9jbnQgPiAxKQorCQlyZXR1cm4gMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOworCisJLyogTW92ZSBkYXRhIHRvIERNOTAwMCBUWCBSQU0gKi8KKwl3cml0ZWIoRE05MDAwX01XQ01ELCBkYi0+aW9fYWRkcik7CisKKwkoZGItPm91dGJsaykoZGItPmlvX2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwlkYi0+dHhfcGt0X2NudCsrOworCS8qIFRYIGNvbnRyb2w6IEZpcnN0IHBhY2tldCBpbW1lZGlhdGVseSBzZW5kLCBzZWNvbmQgcGFja2V0IHF1ZXVlICovCisJaWYgKGRiLT50eF9wa3RfY250ID09IDEpIHsKKwkJLyogU2V0IFRYIGxlbmd0aCB0byBETTkwMDAgKi8KKwkJaW93KGRiLCBETTkwMDBfVFhQTEwsIHNrYi0+bGVuKTsKKwkJaW93KGRiLCBETTkwMDBfVFhQTEgsIHNrYi0+bGVuID4+IDgpOworCisJCS8qIElzc3VlIFRYIHBvbGxpbmcgY29tbWFuZCAqLworCQlpb3coZGIsIERNOTAwMF9UQ1IsIFRDUl9UWFJFUSk7CS8qIENsZWFyZWQgYWZ0ZXIgVFggY29tcGxldGUgKi8KKworCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogc2F2ZSB0aGUgdGltZSBzdGFtcCAqLworCX0gZWxzZSB7CisJCS8qIFNlY29uZCBwYWNrZXQgKi8KKwkJZGItPnF1ZXVlX3BrdF9sZW4gPSBza2ItPmxlbjsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CisKKwkvKiBmcmVlIHRoaXMgU0tCICovCisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBETTkwMDAgaW50ZXJydXB0IGhhbmRsZXIKKyAqIHJlY2VpdmUgdGhlIHBhY2tldCB0byB1cHBlciBsYXllciwgZnJlZSB0aGUgdHJhbnNtaXR0ZWQgcGFja2V0CisgKi8KKworc3RhdGljIHZvaWQgZG05MDAwX3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9hcmRfaW5mb190ICpkYikKK3sKKwlpbnQgdHhfc3RhdHVzID0gaW9yKGRiLCBETTkwMDBfTlNSKTsJLyogR290IFRYIHN0YXR1cyAqLworCisJaWYgKHR4X3N0YXR1cyAmIChOU1JfVFgyRU5EIHwgTlNSX1RYMUVORCkpIHsKKwkJLyogT25lIHBhY2tldCBzZW50IGNvbXBsZXRlICovCisJCWRiLT50eF9wa3RfY250LS07CisJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCisJCWlmIChuZXRpZl9tc2dfdHhfZG9uZShkYikpCisJCQlkZXZfZGJnKGRiLT5kZXYsICJ0eCBkb25lLCBOU1IgJTAyeFxuIiwgdHhfc3RhdHVzKTsKKworCQkvKiBRdWV1ZSBwYWNrZXQgY2hlY2sgJiBzZW5kICovCisJCWlmIChkYi0+dHhfcGt0X2NudCA+IDApIHsKKwkJCWlvdyhkYiwgRE05MDAwX1RYUExMLCBkYi0+cXVldWVfcGt0X2xlbik7CisJCQlpb3coZGIsIERNOTAwMF9UWFBMSCwgZGItPnF1ZXVlX3BrdF9sZW4gPj4gOCk7CisJCQlpb3coZGIsIERNOTAwMF9UQ1IsIFRDUl9UWFJFUSk7CisJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJfQorCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQorfQorCitzdHJ1Y3QgZG05MDAwX3J4aGRyIHsKKwl1OAlSeFBrdFJlYWR5OworCXU4CVJ4U3RhdHVzOworCV9fbGUxNglSeExlbjsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisvKgorICogIFJlY2VpdmVkIGEgcGFja2V0IGFuZCBwYXNzIHRvIHVwcGVyIGxheWVyCisgKi8KK3N0YXRpYyB2b2lkCitkbTkwMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlib2FyZF9pbmZvX3QgKmRiID0gKGJvYXJkX2luZm9fdCAqKSBkZXYtPnByaXY7CisJc3RydWN0IGRtOTAwMF9yeGhkciByeGhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU4IHJ4Ynl0ZSwgKnJkcHRyOworCWJvb2wgR29vZFBhY2tldDsKKwlpbnQgUnhMZW47CisKKwkvKiBDaGVjayBwYWNrZXQgcmVhZHkgb3Igbm90ICovCisJZG8geworCQlpb3IoZGIsIERNOTAwMF9NUkNNRFgpOwkvKiBEdW1teSByZWFkICovCisKKwkJLyogR2V0IG1vc3QgdXBkYXRlZCBkYXRhICovCisJCXJ4Ynl0ZSA9IHJlYWRiKGRiLT5pb19kYXRhKTsKKworCQkvKiBTdGF0dXMgY2hlY2s6IHRoaXMgYnl0ZSBtdXN0IGJlIDAgb3IgMSAqLworCQlpZiAocnhieXRlID4gRE05MDAwX1BLVF9SRFkpIHsKKwkJCWRldl93YXJuKGRiLT5kZXYsICJzdGF0dXMgY2hlY2sgZmFpbDogJWRcbiIsIHJ4Ynl0ZSk7CisJCQlpb3coZGIsIERNOTAwMF9SQ1IsIDB4MDApOwkvKiBTdG9wIERldmljZSAqLworCQkJaW93KGRiLCBETTkwMDBfSVNSLCBJTVJfUEFSKTsJLyogU3RvcCBJTlQgcmVxdWVzdCAqLworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHJ4Ynl0ZSAhPSBETTkwMDBfUEtUX1JEWSkKKwkJCXJldHVybjsKKworCQkvKiBBIHBhY2tldCByZWFkeSBub3cgICYgR2V0IHN0YXR1cy9sZW5ndGggKi8KKwkJR29vZFBhY2tldCA9IHRydWU7CisJCXdyaXRlYihETTkwMDBfTVJDTUQsIGRiLT5pb19hZGRyKTsKKworCQkoZGItPmluYmxrKShkYi0+aW9fZGF0YSwgJnJ4aGRyLCBzaXplb2YocnhoZHIpKTsKKworCQlSeExlbiA9IGxlMTZfdG9fY3B1KHJ4aGRyLlJ4TGVuKTsKKworCQlpZiAobmV0aWZfbXNnX3J4X3N0YXR1cyhkYikpCisJCQlkZXZfZGJnKGRiLT5kZXYsICJSWDogc3RhdHVzICUwMngsIGxlbmd0aCAlMDR4XG4iLAorCQkJCXJ4aGRyLlJ4U3RhdHVzLCBSeExlbik7CisKKwkJLyogUGFja2V0IFN0YXR1cyBjaGVjayAqLworCQlpZiAoUnhMZW4gPCAweDQwKSB7CisJCQlHb29kUGFja2V0ID0gZmFsc2U7CisJCQlpZiAobmV0aWZfbXNnX3J4X2VycihkYikpCisJCQkJZGV2X2RiZyhkYi0+ZGV2LCAiUlg6IEJhZCBQYWNrZXQgKHJ1bnQpXG4iKTsKKwkJfQorCisJCWlmIChSeExlbiA+IERNOTAwMF9QS1RfTUFYKSB7CisJCQlkZXZfZGJnKGRiLT5kZXYsICJSU1Q6IFJYIExlbjoleFxuIiwgUnhMZW4pOworCQl9CisKKwkJLyogcnhoZHIuUnhTdGF0dXMgaXMgaWRlbnRpY2FsIHRvIFJTUiByZWdpc3Rlci4gKi8KKwkJaWYgKHJ4aGRyLlJ4U3RhdHVzICYgKFJTUl9GT0UgfCBSU1JfQ0UgfCBSU1JfQUUgfAorCQkJCSAgICAgIFJTUl9QTEUgfCBSU1JfUldUTyB8CisJCQkJICAgICAgUlNSX0xDUyB8IFJTUl9SRikpIHsKKwkJCUdvb2RQYWNrZXQgPSBmYWxzZTsKKwkJCWlmIChyeGhkci5SeFN0YXR1cyAmIFJTUl9GT0UpIHsKKwkJCQlpZiAobmV0aWZfbXNnX3J4X2VycihkYikpCisJCQkJCWRldl9kYmcoZGItPmRldiwgImZpZm8gZXJyb3JcbiIpOworCQkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCX0KKwkJCWlmIChyeGhkci5SeFN0YXR1cyAmIFJTUl9DRSkgeworCQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGRiKSkKKwkJCQkJZGV2X2RiZyhkYi0+ZGV2LCAiY3JjIGVycm9yXG4iKTsKKwkJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCX0KKwkJCWlmIChyeGhkci5SeFN0YXR1cyAmIFJTUl9SRikgeworCQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGRiKSkKKwkJCQkJZGV2X2RiZyhkYi0+ZGV2LCAibGVuZ3RoIGVycm9yXG4iKTsKKwkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCX0KKwkJfQorCisJCS8qIE1vdmUgZGF0YSBmcm9tIERNOTAwMCAqLworCQlpZiAoR29vZFBhY2tldAorCQkgICAgJiYgKChza2IgPSBkZXZfYWxsb2Nfc2tiKFJ4TGVuICsgNCkpICE9IE5VTEwpKSB7CisJCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQkJcmRwdHIgPSAodTggKikgc2tiX3B1dChza2IsIFJ4TGVuIC0gNCk7CisKKwkJCS8qIFJlYWQgcmVjZWl2ZWQgcGFja2V0IGZyb20gUlggU1JBTSAqLworCisJCQkoZGItPmluYmxrKShkYi0+aW9fZGF0YSwgcmRwdHIsIFJ4TGVuKTsKKwkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gUnhMZW47CisKKwkJCS8qIFBhc3MgdG8gdXBwZXIgbGF5ZXIgKi8KKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQluZXRpZl9yeChza2IpOworCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisKKwkJfSBlbHNlIHsKKwkJCS8qIG5lZWQgdG8gZHVtcCB0aGUgcGFja2V0J3MgZGF0YSAqLworCisJCQkoZGItPmR1bXBibGspKGRiLT5pb19kYXRhLCBSeExlbik7CisJCX0KKwl9IHdoaWxlIChyeGJ5dGUgPT0gRE05MDAwX1BLVF9SRFkpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG05MDAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlib2FyZF9pbmZvX3QgKmRiID0gZGV2LT5wcml2OworCWludCBpbnRfc3RhdHVzOworCXU4IHJlZ19zYXZlOworCisJZG05MDAwX2RiZyhkYiwgMywgImVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBBIHJlYWwgaW50ZXJydXB0IGNvbWluZyAqLworCisJc3Bpbl9sb2NrKCZkYi0+bG9jayk7CisKKwkvKiBTYXZlIHByZXZpb3VzIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwlyZWdfc2F2ZSA9IHJlYWRiKGRiLT5pb19hZGRyKTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlpb3coZGIsIERNOTAwMF9JTVIsIElNUl9QQVIpOworCisJLyogR290IERNOTAwMCBpbnRlcnJ1cHQgc3RhdHVzICovCisJaW50X3N0YXR1cyA9IGlvcihkYiwgRE05MDAwX0lTUik7CS8qIEdvdCBJU1IgKi8KKwlpb3coZGIsIERNOTAwMF9JU1IsIGludF9zdGF0dXMpOwkvKiBDbGVhciBJU1Igc3RhdHVzICovCisKKwlpZiAobmV0aWZfbXNnX2ludHIoZGIpKQorCQlkZXZfZGJnKGRiLT5kZXYsICJpbnRlcnJ1cHQgc3RhdHVzICUwMnhcbiIsIGludF9zdGF0dXMpOworCisJLyogUmVjZWl2ZWQgdGhlIGNvbWluZyBwYWNrZXQgKi8KKwlpZiAoaW50X3N0YXR1cyAmIElTUl9QUlMpCisJCWRtOTAwMF9yeChkZXYpOworCisJLyogVHJuYXNtaXQgSW50ZXJydXB0IGNoZWNrICovCisJaWYgKGludF9zdGF0dXMgJiBJU1JfUFRTKQorCQlkbTkwMDBfdHhfZG9uZShkZXYsIGRiKTsKKworCWlmIChkYi0+dHlwZSAhPSBUWVBFX0RNOTAwMEUpIHsKKwkJaWYgKGludF9zdGF0dXMgJiBJU1JfTE5LQ0hORykgeworCQkJLyogZmlyZSBhIGxpbmstY2hhbmdlIHJlcXVlc3QgKi8KKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGItPnBoeV9wb2xsLCAxKTsKKwkJfQorCX0KKworCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHQgbWFzayAqLworCWlvdyhkYiwgRE05MDAwX0lNUiwgZGItPmltcl9hbGwpOworCisJLyogUmVzdG9yZSBwcmV2aW91cyByZWdpc3RlciBhZGRyZXNzICovCisJd3JpdGViKHJlZ19zYXZlLCBkYi0+aW9fYWRkcik7CisKKwlzcGluX3VubG9jaygmZGItPmxvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKy8qCisgKlVzZWQgYnkgbmV0Y29uc29sZQorICovCitzdGF0aWMgdm9pZCBkbTkwMDBfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCWRtOTAwMF9pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldik7CisJZW5hYmxlX2lycShkZXYtPmlycSk7Cit9CisjZW5kaWYKKworLyoKKyAqICBPcGVuIHRoZSBpbnRlcmZhY2UuCisgKiAgVGhlIGludGVyZmFjZSBpcyBvcGVuZWQgd2hlbmV2ZXIgImlmY29uZmlnIiBhY3RpdmVzIGl0LgorICovCitzdGF0aWMgaW50CitkbTkwMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWJvYXJkX2luZm9fdCAqZGIgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IGRiLT5pcnFfcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOworCisJaWYgKG5ldGlmX21zZ19pZnVwKGRiKSkKKwkJZGV2X2RiZyhkYi0+ZGV2LCAiZW5hYmxpbmcgJXNcbiIsIGRldi0+bmFtZSk7CisKKwkvKiBJZiB0aGVyZSBpcyBubyBJUlEgdHlwZSBzcGVjaWZpZWQsIGRlZmF1bHQgdG8gc29tZXRoaW5nIHRoYXQKKwkgKiBtYXkgd29yaywgYW5kIHRlbGwgdGhlIHVzZXIgdGhhdCB0aGlzIGlzIGEgcHJvYmxlbSAqLworCisJaWYgKGlycWZsYWdzID09IElSUUZfVFJJR0dFUl9OT05FKQorCQlkZXZfd2FybihkYi0+ZGV2LCAiV0FSTklORzogbm8gSVJRIHJlc291cmNlIGZsYWdzIHNldC5cbiIpOworCisJaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsICZkbTkwMDBfaW50ZXJydXB0LCBpcnFmbGFncywgZGV2LT5uYW1lLCBkZXYpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCS8qIEluaXRpYWxpemUgRE05MDAwIGJvYXJkICovCisJZG05MDAwX3Jlc2V0KGRiKTsKKwlkbTkwMDBfaW5pdF9kbTkwMDAoZGV2KTsKKworCS8qIEluaXQgZHJpdmVyIHZhcmlhYmxlICovCisJZGItPmRidWdfY250ID0gMDsKKworCW1paV9jaGVja19tZWRpYSgmZGItPm1paSwgbmV0aWZfbXNnX2xpbmsoZGIpLCAxKTsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQorCWRtOTAwMF9zY2hlZHVsZV9wb2xsKGRiKTsKKworCXJldHVybiAwOworfQogCiAvKgogICogU2xlZXAsIGVpdGhlciBieSB1c2luZyBtc2xlZXAoKSBvciBpZiB3ZSBhcmUgc3VzcGVuZGluZywgdGhlbgpAQCAtMTI5NCw3ICsxMDcwLDcgQEAKIAkvKiBGaWxsIHRoZSBwaHl4Y2VyIHJlZ2lzdGVyIGludG8gUkVHXzBDICovCiAJaW93KGRiLCBETTkwMDBfRVBBUiwgRE05MDAwX1BIWSB8IHJlZyk7CiAKLQlpb3coZGIsIERNOTAwMF9FUENSLCAweGMpOwkvKiBJc3N1ZSBwaHl4Y2VyIHJlYWQgY29tbWFuZCAqLworCWlvdyhkYiwgRE05MDAwX0VQQ1IsIEVQQ1JfRVJQUlIgfCBFUENSX0VQT1MpOwkvKiBJc3N1ZSBwaHl4Y2VyIHJlYWQgY29tbWFuZCAqLwogCiAJd3JpdGViKHJlZ19zYXZlLCBkYi0+aW9fYWRkcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssZmxhZ3MpOwpAQCAtMTMyMyw3ICsxMDk5LDggQEAKICAqICAgV3JpdGUgYSB3b3JkIHRvIHBoeXhjZXIKICAqLwogc3RhdGljIHZvaWQKLWRtOTAwMF9waHlfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeWFkZHJfdW51c2VkLCBpbnQgcmVnLCBpbnQgdmFsdWUpCitkbTkwMDBfcGh5X3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSBpbnQgcGh5YWRkcl91bnVzZWQsIGludCByZWcsIGludCB2YWx1ZSkKIHsKIAlib2FyZF9pbmZvX3QgKmRiID0gKGJvYXJkX2luZm9fdCAqKSBkZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNDQsNyArMTEyMSw3IEBACiAJaW93KGRiLCBETTkwMDBfRVBEUkwsIHZhbHVlKTsKIAlpb3coZGIsIERNOTAwMF9FUERSSCwgdmFsdWUgPj4gOCk7CiAKLQlpb3coZGIsIERNOTAwMF9FUENSLCAweGEpOwkvKiBJc3N1ZSBwaHl4Y2VyIHdyaXRlIGNvbW1hbmQgKi8KKwlpb3coZGIsIERNOTAwMF9FUENSLCBFUENSX0VQT1MgfCBFUENSX0VSUFJXKTsJLyogSXNzdWUgcGh5eGNlciB3cml0ZSBjb21tYW5kICovCiAKIAl3cml0ZWIocmVnX3NhdmUsIGRiLT5pb19hZGRyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwpAQCAtMTM2Myw2ICsxMTQwLDI3MyBAQAogCW11dGV4X3VubG9jaygmZGItPmFkZHJfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkCitkbTkwMDBfc2h1dGRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlib2FyZF9pbmZvX3QgKmRiID0gZGV2LT5wcml2OworCisJLyogUkVTRVQgZGV2aWNlICovCisJZG05MDAwX3BoeV93cml0ZShkZXYsIDAsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsJLyogUEhZIFJFU0VUICovCisJaW93KGRiLCBETTkwMDBfR1BSLCAweDAxKTsJLyogUG93ZXItRG93biBQSFkgKi8KKwlpb3coZGIsIERNOTAwMF9JTVIsIElNUl9QQVIpOwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHQgKi8KKwlpb3coZGIsIERNOTAwMF9SQ1IsIDB4MDApOwkvKiBEaXNhYmxlIFJYICovCit9CisKKy8qCisgKiBTdG9wIHRoZSBpbnRlcmZhY2UuCisgKiBUaGUgaW50ZXJmYWNlIGlzIHN0b3BwZWQgd2hlbiBpdCBpcyBicm91Z2h0LgorICovCitzdGF0aWMgaW50CitkbTkwMDBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlib2FyZF9pbmZvX3QgKmRiID0gbmRldi0+cHJpdjsKKworCWlmIChuZXRpZl9tc2dfaWZkb3duKGRiKSkKKwkJZGV2X2RiZyhkYi0+ZGV2LCAic2h1dHRpbmcgZG93biAlc1xuIiwgbmRldi0+bmFtZSk7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRiLT5waHlfcG9sbCk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOworCisJLyogZnJlZSBpbnRlcnJ1cHQgKi8KKwlmcmVlX2lycShuZGV2LT5pcnEsIG5kZXYpOworCisJZG05MDAwX3NodXRkb3duKG5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgcmVzX3NpemUoX3IpICgoKF9yKS0+ZW5kIC0gKF9yKS0+c3RhcnQpICsgMSkKKworLyoKKyAqIFNlYXJjaCBETTkwMDAgYm9hcmQsIGFsbG9jYXRlIHNwYWNlIGFuZCByZWdpc3RlciBpdAorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorZG05MDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGJvYXJkX2luZm8gKmRiOwkvKiBQb2ludCBhIGJvYXJkIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hY19zcmM7CisJaW50IHJldCA9IDA7CisJaW50IGlvc2l6ZTsKKwlpbnQgaTsKKwl1MzIgaWRfdmFsOworCisJLyogSW5pdCBuZXR3b3JrIGRldmljZSAqLworCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGJvYXJkX2luZm8pKTsKKwlpZiAoIW5kZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGRldmljZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgImRtOTAwMF9wcm9iZSgpXG4iKTsKKworCS8qIHNldHVwIGJvYXJkIGluZm8gc3RydWN0dXJlICovCisJZGIgPSBuZGV2LT5wcml2OworCW1lbXNldChkYiwgMCwgc2l6ZW9mKCpkYikpOworCisJZGItPmRldiA9ICZwZGV2LT5kZXY7CisJZGItPm5kZXYgPSBuZGV2OworCisJc3Bpbl9sb2NrX2luaXQoJmRiLT5sb2NrKTsKKwltdXRleF9pbml0KCZkYi0+YWRkcl9sb2NrKTsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZkYi0+cGh5X3BvbGwsIGRtOTAwMF9wb2xsX3dvcmspOworCisJZGItPmFkZHJfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkYi0+ZGF0YV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWRiLT5pcnFfcmVzICA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisKKwlpZiAoZGItPmFkZHJfcmVzID09IE5VTEwgfHwgZGItPmRhdGFfcmVzID09IE5VTEwgfHwKKwkgICAgZGItPmlycV9yZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRiLT5kZXYsICJpbnN1ZmZpY2llbnQgcmVzb3VyY2VzXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCisJaW9zaXplID0gcmVzX3NpemUoZGItPmFkZHJfcmVzKTsKKwlkYi0+YWRkcl9yZXEgPSByZXF1ZXN0X21lbV9yZWdpb24oZGItPmFkZHJfcmVzLT5zdGFydCwgaW9zaXplLAorCQkJCQkgIHBkZXYtPm5hbWUpOworCisJaWYgKGRiLT5hZGRyX3JlcSA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGItPmRldiwgImNhbm5vdCBjbGFpbSBhZGRyZXNzIHJlZyBhcmVhXG4iKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJZGItPmlvX2FkZHIgPSBpb3JlbWFwKGRiLT5hZGRyX3Jlcy0+c3RhcnQsIGlvc2l6ZSk7CisKKwlpZiAoZGItPmlvX2FkZHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRiLT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCBhZGRyZXNzIHJlZ1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlvc2l6ZSA9IHJlc19zaXplKGRiLT5kYXRhX3Jlcyk7CisJZGItPmRhdGFfcmVxID0gcmVxdWVzdF9tZW1fcmVnaW9uKGRiLT5kYXRhX3Jlcy0+c3RhcnQsIGlvc2l6ZSwKKwkJCQkJICBwZGV2LT5uYW1lKTsKKworCWlmIChkYi0+ZGF0YV9yZXEgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRiLT5kZXYsICJjYW5ub3QgY2xhaW0gZGF0YSByZWcgYXJlYVxuIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWRiLT5pb19kYXRhID0gaW9yZW1hcChkYi0+ZGF0YV9yZXMtPnN0YXJ0LCBpb3NpemUpOworCisJaWYgKGRiLT5pb19kYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycihkYi0+ZGV2LCAiZmFpbGVkIHRvIGlvcmVtYXAgZGF0YSByZWdcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBmaWxsIGluIHBhcmFtZXRlcnMgZm9yIG5ldC1kZXYgc3RydWN0dXJlICovCisJbmRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGItPmlvX2FkZHI7CisJbmRldi0+aXJxCT0gZGItPmlycV9yZXMtPnN0YXJ0OworCisJLyogZW5zdXJlIGF0IGxlYXN0IHdlIGhhdmUgYSBkZWZhdWx0IHNldCBvZiBJTyByb3V0aW5lcyAqLworCWRtOTAwMF9zZXRfaW8oZGIsIGlvc2l6ZSk7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgYW55dGhpbmcgaXMgYmVpbmcgb3Zlci1yaWRkZW4gKi8KKwlpZiAocGRhdGEgIT0gTlVMTCkgeworCQkvKiBjaGVjayB0byBzZWUgaWYgdGhlIGRyaXZlciB3YW50cyB0byBvdmVyLXJpZGUgdGhlCisJCSAqIGRlZmF1bHQgSU8gd2lkdGggKi8KKworCQlpZiAocGRhdGEtPmZsYWdzICYgRE05MDAwX1BMQVRGXzhCSVRPTkxZKQorCQkJZG05MDAwX3NldF9pbyhkYiwgMSk7CisKKwkJaWYgKHBkYXRhLT5mbGFncyAmIERNOTAwMF9QTEFURl8xNkJJVE9OTFkpCisJCQlkbTkwMDBfc2V0X2lvKGRiLCAyKTsKKworCQlpZiAocGRhdGEtPmZsYWdzICYgRE05MDAwX1BMQVRGXzMyQklUT05MWSkKKwkJCWRtOTAwMF9zZXRfaW8oZGIsIDQpOworCisJCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IElPIHJvdXRpbmUKKwkJICogb3Zlci1yaWRlcyAqLworCisJCWlmIChwZGF0YS0+aW5ibGsgIT0gTlVMTCkKKwkJCWRiLT5pbmJsayA9IHBkYXRhLT5pbmJsazsKKworCQlpZiAocGRhdGEtPm91dGJsayAhPSBOVUxMKQorCQkJZGItPm91dGJsayA9IHBkYXRhLT5vdXRibGs7CisKKwkJaWYgKHBkYXRhLT5kdW1wYmxrICE9IE5VTEwpCisJCQlkYi0+ZHVtcGJsayA9IHBkYXRhLT5kdW1wYmxrOworCisJCWRiLT5mbGFncyA9IHBkYXRhLT5mbGFnczsKKwl9CisKKyNpZmRlZiBDT05GSUdfRE05MDAwX0ZPUkNFX1NJTVBMRV9QSFlfUE9MTAorCWRiLT5mbGFncyB8PSBETTkwMDBfUExBVEZfU0lNUExFX1BIWTsKKyNlbmRpZgorCisJZG05MDAwX3Jlc2V0KGRiKTsKKworCS8qIHRyeSBtdWx0aXBsZSB0aW1lcywgRE05MDAwIHNvbWV0aW1lcyBnZXRzIHRoZSByZWFkIHdyb25nICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZF92YWwgID0gaW9yKGRiLCBETTkwMDBfVklETCk7CisJCWlkX3ZhbCB8PSAodTMyKWlvcihkYiwgRE05MDAwX1ZJREgpIDw8IDg7CisJCWlkX3ZhbCB8PSAodTMyKWlvcihkYiwgRE05MDAwX1BJREwpIDw8IDE2OworCQlpZF92YWwgfD0gKHUzMilpb3IoZGIsIERNOTAwMF9QSURIKSA8PCAyNDsKKworCQlpZiAoaWRfdmFsID09IERNOTAwMF9JRCkKKwkJCWJyZWFrOworCQlkZXZfZXJyKGRiLT5kZXYsICJyZWFkIHdyb25nIGlkIDB4JTA4eFxuIiwgaWRfdmFsKTsKKwl9CisKKwlpZiAoaWRfdmFsICE9IERNOTAwMF9JRCkgeworCQlkZXZfZXJyKGRiLT5kZXYsICJ3cm9uZyBpZDogMHglMDh4XG4iLCBpZF92YWwpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJZGVudGlmeSB3aGF0IHR5cGUgb2YgRE05MDAwIHdlIGFyZSB3b3JraW5nIG9uICovCisKKwlpZF92YWwgPSBpb3IoZGIsIERNOTAwMF9DSElQUik7CisJZGV2X2RiZyhkYi0+ZGV2LCAiZG05MDAwIHJldmlzaW9uIDB4JTAyeFxuIiwgaWRfdmFsKTsKKworCXN3aXRjaCAoaWRfdmFsKSB7CisJY2FzZSBDSElQUl9ETTkwMDBBOgorCQlkYi0+dHlwZSA9IFRZUEVfRE05MDAwQTsKKwkJYnJlYWs7CisJY2FzZSBDSElQUl9ETTkwMDBCOgorCQlkYi0+dHlwZSA9IFRZUEVfRE05MDAwQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhkYi0+ZGV2LCAiSUQgJTAyeCA9PiBkZWZhdWx0aW5nIHRvIERNOTAwMEVcbiIsIGlkX3ZhbCk7CisJCWRiLT50eXBlID0gVFlQRV9ETTkwMDBFOworCX0KKworCS8qIGZyb20gdGhpcyBwb2ludCB3ZSBhc3N1bWUgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgRE05MDAwICovCisKKwkvKiBkcml2ZXIgc3lzdGVtIGZ1bmN0aW9uICovCisJZXRoZXJfc2V0dXAobmRldik7CisKKwluZGV2LT5vcGVuCQkgPSAmZG05MDAwX29wZW47CisJbmRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gJmRtOTAwMF9zdGFydF94bWl0OworCW5kZXYtPnR4X3RpbWVvdXQgICAgICAgICA9ICZkbTkwMDBfdGltZW91dDsKKwluZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpOworCW5kZXYtPnN0b3AJCSA9ICZkbTkwMDBfc3RvcDsKKwluZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmZG05MDAwX2hhc2hfdGFibGU7CisJbmRldi0+ZXRodG9vbF9vcHMJID0gJmRtOTAwMF9ldGh0b29sX29wczsKKwluZGV2LT5kb19pb2N0bAkJID0gJmRtOTAwMF9pb2N0bDsKKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJbmRldi0+cG9sbF9jb250cm9sbGVyCSA9ICZkbTkwMDBfcG9sbF9jb250cm9sbGVyOworI2VuZGlmCisKKwlkYi0+bXNnX2VuYWJsZSAgICAgICA9IE5FVElGX01TR19MSU5LOworCWRiLT5taWkucGh5X2lkX21hc2sgID0gMHgxZjsKKwlkYi0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CisJZGItPm1paS5mb3JjZV9tZWRpYSAgPSAwOworCWRiLT5taWkuZnVsbF9kdXBsZXggID0gMDsKKwlkYi0+bWlpLmRldgkgICAgID0gbmRldjsKKwlkYi0+bWlpLm1kaW9fcmVhZCAgICA9IGRtOTAwMF9waHlfcmVhZDsKKwlkYi0+bWlpLm1kaW9fd3JpdGUgICA9IGRtOTAwMF9waHlfd3JpdGU7CisKKwltYWNfc3JjID0gImVlcHJvbSI7CisKKwkvKiB0cnkgcmVhZGluZyB0aGUgbm9kZSBhZGRyZXNzIGZyb20gdGhlIGF0dGFjaGVkIEVFUFJPTSAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpICs9IDIpCisJCWRtOTAwMF9yZWFkX2VlcHJvbShkYiwgaSAvIDIsIG5kZXYtPmRldl9hZGRyK2kpOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5kZXYtPmRldl9hZGRyKSkgeworCQkvKiB0cnkgcmVhZGluZyBmcm9tIG1hYyAqLworCQkKKwkJbWFjX3NyYyA9ICJjaGlwIjsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCW5kZXYtPmRldl9hZGRyW2ldID0gaW9yKGRiLCBpK0RNOTAwMF9QQVIpOworCX0KKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZGV2LT5kZXZfYWRkcikpCisJCWRldl93YXJuKGRiLT5kZXYsICIlczogSW52YWxpZCBldGhlcm5ldCBNQUMgYWRkcmVzcy4gUGxlYXNlICIKKwkJCSAic2V0IHVzaW5nIGlmY29uZmlnXG4iLCBuZGV2LT5uYW1lKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOworCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKKworCWlmIChyZXQgPT0gMCkgeworCQlERUNMQVJFX01BQ19CVUYobWFjKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRtOTAwMCVjIGF0ICVwLCVwIElSUSAlZCBNQUM6ICVzICglcylcbiIsCisJCSAgICAgICBuZGV2LT5uYW1lLCBkbTkwMDBfdHlwZV90b19jaGFyKGRiLT50eXBlKSwKKwkJICAgICAgIGRiLT5pb19hZGRyLCBkYi0+aW9fZGF0YSwgbmRldi0+aXJxLAorCQkgICAgICAgcHJpbnRfbWFjKG1hYywgbmRldi0+ZGV2X2FkZHIpLCBtYWNfc3JjKTsKKwl9CisJcmV0dXJuIDA7CisKK291dDoKKwlkZXZfZXJyKGRiLT5kZXYsICJub3QgZm91bmQgKCVkKS5cbiIsIHJldCk7CisKKwlkbTkwMDBfcmVsZWFzZV9ib2FyZChwZGV2LCBkYik7CisJZnJlZV9uZXRkZXYobmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50CiBkbTkwMDBfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC0xNDMyLDcgKzE0NzYsNyBAQAogewogCXByaW50ayhLRVJOX0lORk8gIiVzIEV0aGVybmV0IERyaXZlciwgViVzXG4iLCBDQVJETkFNRSwgRFJWX1ZFUlNJT04pOwogCi0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZG05MDAwX2RyaXZlcik7CS8qIHNlYXJjaCBib2FyZCBhbmQgcmVnaXN0ZXIgKi8KKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkbTkwMDBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuaCBiL2RyaXZlcnMvbmV0L2RtOTAwMC5oCmluZGV4IDgyY2FkMzYuLmJhMjVjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5oCkBAIC00NSw2ICs0NSw5IEBACiAjZGVmaW5lIERNOTAwMF9DSElQUiAgICAgICAgICAgMHgyQwogI2RlZmluZSBETTkwMDBfU01DUiAgICAgICAgICAgIDB4MkYKIAorI2RlZmluZSBDSElQUl9ETTkwMDBBCSAgICAgICAweDE5CisjZGVmaW5lIENISVBSX0RNOTAwMEIJICAgICAgIDB4MUIKKwogI2RlZmluZSBETTkwMDBfTVJDTURYICAgICAgICAgIDB4RjAKICNkZWZpbmUgRE05MDAwX01SQ01EICAgICAgICAgICAweEYyCiAjZGVmaW5lIERNOTAwMF9NUlJMICAgICAgICAgICAgMHhGNApAQCAtMTMxLDUgKzEzNCwxMyBAQAogI2RlZmluZSBETTkwMDBfUEtUX1JEWQkJMHgwMQkvKiBQYWNrZXQgcmVhZHkgdG8gcmVjZWl2ZSAqLwogI2RlZmluZSBETTkwMDBfUEtUX01BWAkJMTUzNgkvKiBSZWNlaXZlZCBwYWNrZXQgbWF4IHNpemUgKi8KIAorLyogRE05MDAwQSAvIERNOTAwMEIgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBJTVJfTE5LQ0hORwkJKDE8PDUpCisjZGVmaW5lIElNUl9VTkRFUlJVTgkJKDE8PDQpCisKKyNkZWZpbmUgSVNSX0xOS0NITkcJCSgxPDw1KQorI2RlZmluZSBJU1JfVU5ERVJSVU4JCSgxPDw0KQorCiAjZW5kaWYgLyogX0RNOTAwMFhfSF8gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggMzFmZWFlMS4uMTllMzE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC05MCwxMCArOTAsMTMgQEAKICNkZWZpbmUgRTEwMDBfRVJSKGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiZTEwMDA6ICIgYXJncykKIAogI2RlZmluZSBQRlggImUxMDAwOiAiCi0jZGVmaW5lIERQUklOVEsobmxldmVsLCBrbGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCSh2b2lkKSgoTkVUSUZfTVNHXyMjbmxldmVsICYgYWRhcHRlci0+bXNnX2VuYWJsZSkgJiYgXAotCXByaW50ayhLRVJOXyMja2xldmVsIFBGWCAiJXM6ICVzOiAiIGZtdCwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBcCi0JCV9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpKQorCisjZGVmaW5lIERQUklOVEsobmxldmVsLCBrbGV2ZWwsIGZtdCwgYXJncy4uLikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoTkVUSUZfTVNHXyMjbmxldmVsICYgYWRhcHRlci0+bXNnX2VuYWJsZSkJCQlcCisJCXByaW50ayhLRVJOXyMja2xldmVsIFBGWCAiJXM6ICVzOiAiIGZtdCwJCVwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgX19mdW5jX18sICMjYXJncyk7CVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgRTEwMDBfTUFYX0lOVFIgMTAKIApAQCAtMTUxLDkgKzE1NCw5IEBACiAjZGVmaW5lIEUxMDAwX01BU1RFUl9TTEFWRQllMTAwMF9tc19od19kZWZhdWx0CiAjZW5kaWYKIAotI2RlZmluZSBFMTAwMF9NTkdfVkxBTl9OT05FIC0xCisjZGVmaW5lIEUxMDAwX01OR19WTEFOX05PTkUgKC0xKQogLyogTnVtYmVyIG9mIHBhY2tldCBzcGxpdCBkYXRhIGJ1ZmZlcnMgKG5vdCBpbmNsdWRpbmcgdGhlIGhlYWRlciBidWZmZXIpICovCi0jZGVmaW5lIFBTX1BBR0VfQlVGRkVSUyBNQVhfUFNfQlVGRkVSUy0xCisjZGVmaW5lIFBTX1BBR0VfQlVGRkVSUyAoTUFYX1BTX0JVRkZFUlMgLSAxKQogCiAvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAogICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCkBAIC0xNjUsOSArMTY4LDEzIEBACiAJdTE2IG5leHRfdG9fd2F0Y2g7CiB9OwogCitzdHJ1Y3QgZTEwMDBfcHNfcGFnZSB7CisJc3RydWN0IHBhZ2UgKnBzX3BhZ2VbUFNfUEFHRV9CVUZGRVJTXTsKK307CiAKLXN0cnVjdCBlMTAwMF9wc19wYWdlIHsgc3RydWN0IHBhZ2UgKnBzX3BhZ2VbUFNfUEFHRV9CVUZGRVJTXTsgfTsKLXN0cnVjdCBlMTAwMF9wc19wYWdlX2RtYSB7IHU2NCBwc19wYWdlX2RtYVtQU19QQUdFX0JVRkZFUlNdOyB9Oworc3RydWN0IGUxMDAwX3BzX3BhZ2VfZG1hIHsKKwl1NjQgcHNfcGFnZV9kbWFbUFNfUEFHRV9CVUZGRVJTXTsKK307CiAKIHN0cnVjdCBlMTAwMF90eF9yaW5nIHsKIAkvKiBwb2ludGVyIHRvIHRoZSBkZXNjcmlwdG9yIHJpbmcgbWVtb3J5ICovCkBAIC0yMTcsMTMgKzIyNCwxMyBAQAogCXUxNiByZHQ7CiB9OwogCi0jZGVmaW5lIEUxMDAwX0RFU0NfVU5VU0VEKFIpIFwKLQkoKCgoUiktPm5leHRfdG9fY2xlYW4gPiAoUiktPm5leHRfdG9fdXNlKSA/IDAgOiAoUiktPmNvdW50KSArIFwKLQkoUiktPm5leHRfdG9fY2xlYW4gLSAoUiktPm5leHRfdG9fdXNlIC0gMSkKKyNkZWZpbmUgRTEwMDBfREVTQ19VTlVTRUQoUikJCQkJCQlcCisJKCgoKFIpLT5uZXh0X3RvX2NsZWFuID4gKFIpLT5uZXh0X3RvX3VzZSkJCQlcCisJICA/IDAgOiAoUiktPmNvdW50KSArIChSKS0+bmV4dF90b19jbGVhbiAtIChSKS0+bmV4dF90b191c2UgLSAxKQogCi0jZGVmaW5lIEUxMDAwX1JYX0RFU0NfUFMoUiwgaSkJICAgIFwKKyNkZWZpbmUgRTEwMDBfUlhfREVTQ19QUyhSLCBpKQkJCQkJCVwKIAkoJigoKHVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0ICopKChSKS5kZXNjKSlbaV0pKQotI2RlZmluZSBFMTAwMF9SWF9ERVNDX0VYVChSLCBpKQkgICAgXAorI2RlZmluZSBFMTAwMF9SWF9ERVNDX0VYVChSLCBpKQkJCQkJCVwKIAkoJigoKHVuaW9uIGUxMDAwX3J4X2Rlc2NfZXh0ZW5kZWQgKikoKFIpLmRlc2MpKVtpXSkpCiAjZGVmaW5lIEUxMDAwX0dFVF9ERVNDKFIsIGksIHR5cGUpCSgmKCgoc3RydWN0IHR5cGUgKikoKFIpLmRlc2MpKVtpXSkpCiAjZGVmaW5lIEUxMDAwX1JYX0RFU0MoUiwgaSkJCUUxMDAwX0dFVF9ERVNDKFIsIGksIGUxMDAwX3J4X2Rlc2MpCkBAIC0yNDYsOSArMjUzLDcgQEAKIAl1MTYgbGlua19zcGVlZDsKIAl1MTYgbGlua19kdXBsZXg7CiAJc3BpbmxvY2tfdCBzdGF0c19sb2NrOwotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJc3BpbmxvY2tfdCB0eF9xdWV1ZV9sb2NrOwotI2VuZGlmCiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzOwogCXVuc2lnbmVkIGludCB0b3RhbF90eF9wYWNrZXRzOwogCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlczsKQEAgLTI4NiwyMiArMjkxLDE2IEBACiAJYm9vbCBkZXRlY3RfdHhfaHVuZzsKIAogCS8qIFJYICovCi0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKLQlib29sICgqY2xlYW5fcngpIChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCi0JCQkgIGludCAqd29ya19kb25lLCBpbnQgd29ya190b19kbyk7Ci0jZWxzZQotCWJvb2wgKCpjbGVhbl9yeCkgKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotCQkJICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZyk7Ci0jZW5kaWYKLQl2b2lkICgqYWxsb2NfcnhfYnVmKSAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKLQkJCQlpbnQgY2xlYW5lZF9jb3VudCk7CisJYm9vbCAoKmNsZWFuX3J4KShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKKwkJCSBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKKwkJCSBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pOworCXZvaWQgKCphbGxvY19yeF9idWYpKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKKwkJCSAgICAgaW50IGNsZWFuZWRfY291bnQpOwogCXN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nOyAgICAgIC8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCi0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcG9sbGluZ19uZXRkZXY7ICAvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLwotI2VuZGlmCisKIAlpbnQgbnVtX3R4X3F1ZXVlczsKIAlpbnQgbnVtX3J4X3F1ZXVlczsKIApAQCAtMzE3LDcgKzMxNiw2IEBACiAJdTY0IGdvcmNsX29sZDsKIAl1MTYgcnhfcHNfYnNpemUwOwogCi0KIAkvKiBPUyBkZWZpbmVkIHN0cnVjdHMgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpAQCAtMzQyLDYgKzM0MCwxMCBAQAogCWJvb2wgcXVhZF9wb3J0X2E7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgZWVwcm9tX3dvbDsKKworCS8qIGZvciBpb3BvcnQgZnJlZSAqLworCWludCBiYXJzOworCWludCBuZWVkX2lvcG9ydDsKIH07CiAKIGVudW0gZTEwMDBfc3RhdGVfdCB7CkBAIC0zNTMsOSArMzU1LDE4IEBACiBleHRlcm4gY2hhciBlMTAwMF9kcml2ZXJfbmFtZVtdOwogZXh0ZXJuIGNvbnN0IGNoYXIgZTEwMDBfZHJpdmVyX3ZlcnNpb25bXTsKIAorZXh0ZXJuIGludCBlMTAwMF91cChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBlMTAwMF9kb3duKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGUxMDAwX3JlaW5pdF9sb2NrZWQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgZTEwMDBfcmVzZXQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBlMTAwMF9zZXRfc3BkX2RwbHgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBzcGRkcGx4KTsKK2V4dGVybiBpbnQgZTEwMDBfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IGUxMDAwX3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgZTEwMDBfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGUxMDAwX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBlMTAwMF91cGRhdGVfc3RhdHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBfcG93ZXJfdXBfcGh5KHN0cnVjdCBlMTAwMF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgZTEwMDBfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogZXh0ZXJuIHZvaWQgZTEwMDBfY2hlY2tfb3B0aW9ucyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiAKLQogI2VuZGlmIC8qIF9FMTAwMF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCmluZGV4IGEzZjZhOWMuLjZhMzg5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKQEAgLTI5LDIxICsyOSw4IEBACiAvKiBldGh0b29sIHN1cHBvcnQgZm9yIGUxMDAwICovCiAKICNpbmNsdWRlICJlMTAwMC5oIgotCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotZXh0ZXJuIGludCBlMTAwMF91cChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gdm9pZCBlMTAwMF9kb3duKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiB2b2lkIGUxMDAwX3JlaW5pdF9sb2NrZWQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIHZvaWQgZTEwMDBfcmVzZXQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIGludCBlMTAwMF9zZXRfc3BkX2RwbHgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBzcGRkcGx4KTsKLWV4dGVybiBpbnQgZTEwMDBfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gaW50IGUxMDAwX3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIHZvaWQgZTEwMDBfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiB2b2lkIGUxMDAwX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gdm9pZCBlMTAwMF91cGRhdGVfc3RhdHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi0KIHN0cnVjdCBlMTAwMF9zdGF0cyB7CiAJY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOwogCWludCBzaXplb2Zfc3RhdDsKQEAgLTExMiw4ICs5OSw4IEBACiB9OwogI2RlZmluZSBFMTAwMF9URVNUX0xFTglBUlJBWV9TSVpFKGUxMDAwX2dzdHJpbmdzX3Rlc3QpCiAKLXN0YXRpYyBpbnQKLWUxMDAwX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCitzdGF0aWMgaW50IGUxMDAwX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpAQCAtMTYyLDcgKzE0OSw3IEBACiAJCQllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAJfQogCi0JaWYgKEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19MVSkgeworCWlmIChlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpIHsKIAogCQllMTAwMF9nZXRfc3BlZWRfYW5kX2R1cGxleChodywgJmFkYXB0ZXItPmxpbmtfc3BlZWQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkYXB0ZXItPmxpbmtfZHVwbGV4KTsKQEAgLTE4NSw4ICsxNzIsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQorc3RhdGljIGludCBlMTAwMF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKQEAgLTIzMSw5ICsyMTgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotZTEwMDBfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQorc3RhdGljIHZvaWQgZTEwMDBfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0yNTEsOSArMjM3LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLWUxMDAwX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3N0YXRpYyBpbnQgZTEwMDBfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKQEAgLTI4OSwxNSArMjc0LDEzIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHUzMgotZTEwMDBfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyB1MzIgZTEwMDBfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJcmV0dXJuIGFkYXB0ZXItPnJ4X2NzdW07CiB9CiAKLXN0YXRpYyBpbnQKLWUxMDAwX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBlMTAwMF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJYWRhcHRlci0+cnhfY3N1bSA9IGRhdGE7CkBAIC0zMDksMTggKzI5MiwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyCi1lMTAwMF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHUzMiBlMTAwMF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXJldHVybiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfQ1NVTSkgIT0gMDsKIH0KIAotc3RhdGljIGludAotZTEwMDBfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IGUxMDAwX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlIDwgZTEwMDBfODI1NDMpIHsKKwlpZiAoaHctPm1hY190eXBlIDwgZTEwMDBfODI1NDMpIHsKIAkJaWYgKCFkYXRhKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiAwOwpAQCAtMzM0LDEyICszMTYsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotZTEwMDBfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgZTEwMDBfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JaWYgKChhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTQ0KSB8fAotCSAgICAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NDcpKQorCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpZiAoKGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTQ0KSB8fAorCSAgICAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3KSkKIAkJcmV0dXJuIGRhdGEgPyAtRUlOVkFMIDogMDsKIAogCWlmIChkYXRhKQpAQCAtMzU3LDMwICszNDAsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMgotZTEwMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgdTMyIGUxMDAwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlyZXR1cm4gYWRhcHRlci0+bXNnX2VuYWJsZTsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIGUxMDAwX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJYWRhcHRlci0+bXNnX2VuYWJsZSA9IGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQKLWUxMDAwX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIGludCBlMTAwMF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKICNkZWZpbmUgRTEwMDBfUkVHU19MRU4gMzIKIAlyZXR1cm4gRTEwMDBfUkVHU19MRU4gKiBzaXplb2YodTMyKTsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JICAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnApCitzdGF0aWMgdm9pZCBlMTAwMF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLAorCQkJICAgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKQEAgLTM5MSwyMiArMzcwLDIyIEBACiAKIAlyZWdzLT52ZXJzaW9uID0gKDEgPDwgMjQpIHwgKGh3LT5yZXZpc2lvbl9pZCA8PCAxNikgfCBody0+ZGV2aWNlX2lkOwogCi0JcmVnc19idWZmWzBdICA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKLQlyZWdzX2J1ZmZbMV0gID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUyk7CisJcmVnc19idWZmWzBdICA9IGVyMzIoQ1RSTCk7CisJcmVnc19idWZmWzFdICA9IGVyMzIoU1RBVFVTKTsKIAotCXJlZ3NfYnVmZlsyXSAgPSBFMTAwMF9SRUFEX1JFRyhodywgUkNUTCk7Ci0JcmVnc19idWZmWzNdICA9IEUxMDAwX1JFQURfUkVHKGh3LCBSRExFTik7Ci0JcmVnc19idWZmWzRdICA9IEUxMDAwX1JFQURfUkVHKGh3LCBSREgpOwotCXJlZ3NfYnVmZls1XSAgPSBFMTAwMF9SRUFEX1JFRyhodywgUkRUKTsKLQlyZWdzX2J1ZmZbNl0gID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJEVFIpOworCXJlZ3NfYnVmZlsyXSAgPSBlcjMyKFJDVEwpOworCXJlZ3NfYnVmZlszXSAgPSBlcjMyKFJETEVOKTsKKwlyZWdzX2J1ZmZbNF0gID0gZXIzMihSREgpOworCXJlZ3NfYnVmZls1XSAgPSBlcjMyKFJEVCk7CisJcmVnc19idWZmWzZdICA9IGVyMzIoUkRUUik7CiAKLQlyZWdzX2J1ZmZbN10gID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRDVEwpOwotCXJlZ3NfYnVmZls4XSAgPSBFMTAwMF9SRUFEX1JFRyhodywgVERMRU4pOwotCXJlZ3NfYnVmZls5XSAgPSBFMTAwMF9SRUFEX1JFRyhodywgVERIKTsKLQlyZWdzX2J1ZmZbMTBdID0gRTEwMDBfUkVBRF9SRUcoaHcsIFREVCk7Ci0JcmVnc19idWZmWzExXSA9IEUxMDAwX1JFQURfUkVHKGh3LCBUSURWKTsKKwlyZWdzX2J1ZmZbN10gID0gZXIzMihUQ1RMKTsKKwlyZWdzX2J1ZmZbOF0gID0gZXIzMihURExFTik7CisJcmVnc19idWZmWzldICA9IGVyMzIoVERIKTsKKwlyZWdzX2J1ZmZbMTBdID0gZXIzMihURFQpOworCXJlZ3NfYnVmZlsxMV0gPSBlcjMyKFRJRFYpOwogCi0JcmVnc19idWZmWzEyXSA9IGFkYXB0ZXItPmh3LnBoeV90eXBlOyAgLyogUEhZIHR5cGUgKElHUD0xLCBNODg9MCkgKi8KKwlyZWdzX2J1ZmZbMTJdID0gaHctPnBoeV90eXBlOyAgLyogUEhZIHR5cGUgKElHUD0xLCBNODg9MCkgKi8KIAlpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3ApIHsKIAkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJICAgIElHUDAxRTEwMDBfUEhZX0FHQ19BKTsKQEAgLTQ2NCwyMCArNDQzLDIwIEBACiAJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJgogCSAgICBody0+bWFjX3R5cGUgPCBlMTAwMF84MjU3MSAmJgogCSAgICBody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewotCQlyZWdzX2J1ZmZbMjZdID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1BTkMpOworCQlyZWdzX2J1ZmZbMjZdID0gZXIzMihNQU5DKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLWUxMDAwX2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgaW50IGUxMDAwX2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXJldHVybiBhZGFwdGVyLT5ody5lZXByb20ud29yZF9zaXplICogMjsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJcmV0dXJuIGh3LT5lZXByb20ud29yZF9zaXplICogMjsKIH0KIAotc3RhdGljIGludAotZTEwMDBfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpCitzdGF0aWMgaW50IGUxMDAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmJ5dGVzKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpAQCAtNTA0LDEwICs0ODMsMTIgQEAKIAkJCQkJICAgIGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxLAogCQkJCQkgICAgZWVwcm9tX2J1ZmYpOwogCWVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgbGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDE7IGkrKykKLQkJCWlmICgocmV0X3ZhbCA9IGUxMDAwX3JlYWRfZWVwcm9tKGh3LCBmaXJzdF93b3JkICsgaSwgMSwKLQkJCQkJCQkmZWVwcm9tX2J1ZmZbaV0pKSkKKwkJZm9yIChpID0gMDsgaSA8IGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxOyBpKyspIHsKKwkJCXJldF92YWwgPSBlMTAwMF9yZWFkX2VlcHJvbShodywgZmlyc3Rfd29yZCArIGksIDEsCisJCQkJCQkgICAgJmVlcHJvbV9idWZmW2ldKTsKKwkJCWlmIChyZXRfdmFsKQogCQkJCWJyZWFrOworCQl9CiAJfQogCiAJLyogRGV2aWNlJ3MgZWVwcm9tIGlzIGFsd2F5cyBsaXR0bGUtZW5kaWFuLCB3b3JkIGFkZHJlc3NhYmxlICovCkBAIC01MjEsOSArNTAyLDggQEAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIAotc3RhdGljIGludAotZTEwMDBfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpCitzdGF0aWMgaW50IGUxMDAwX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmJ5dGVzKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpAQCAtNTg0LDExICs1NjQsMTEgQEAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCitzdGF0aWMgdm9pZCBlMTAwMF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAljaGFyIGZpcm13YXJlX3ZlcnNpb25bMzJdOwogCXUxNiBlZXByb21fZGF0YTsKIApAQCAtNTk3LDggKzU3Nyw4IEBACiAKIAkvKiBFRVBST00gaW1hZ2UgdmVyc2lvbiAjIGlzIHJlcG9ydGVkIGFzIGZpcm13YXJlIHZlcnNpb24gIyBmb3IKIAkgKiA4MjU3ezF8MnwzfSBjb250cm9sbGVycyAqLwotCWUxMDAwX3JlYWRfZWVwcm9tKCZhZGFwdGVyLT5odywgNSwgMSwgJmVlcHJvbV9kYXRhKTsKLQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CisJZTEwMDBfcmVhZF9lZXByb20oaHcsIDUsIDEsICZlZXByb21fZGF0YSk7CisJc3dpdGNoIChody0+bWFjX3R5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTcxOgogCWNhc2UgZTEwMDBfODI1NzI6CiAJY2FzZSBlMTAwMF84MjU3MzoKQEAgLTYxOSwxMiArNTk5LDEyIEBACiAJZHJ2aW5mby0+ZWVkdW1wX2xlbiA9IGUxMDAwX2dldF9lZXByb21fbGVuKG5ldGRldik7CiB9CiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKK3N0YXRpYyB2b2lkIGUxMDAwX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWUxMDAwX21hY190eXBlIG1hY190eXBlID0gYWRhcHRlci0+aHcubWFjX3R5cGU7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwllMTAwMF9tYWNfdHlwZSBtYWNfdHlwZSA9IGh3LT5tYWNfdHlwZTsKIAlzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhkciA9IGFkYXB0ZXItPnR4X3Jpbmc7CiAJc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4ZHIgPSBhZGFwdGVyLT5yeF9yaW5nOwogCkBAIC02NDAsMTIgKzYyMCwxMiBAQAogCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKK3N0YXRpYyBpbnQgZTEwMDBfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JZTEwMDBfbWFjX3R5cGUgbWFjX3R5cGUgPSBhZGFwdGVyLT5ody5tYWNfdHlwZTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWUxMDAwX21hY190eXBlIG1hY190eXBlID0gaHctPm1hY190eXBlOwogCXN0cnVjdCBlMTAwMF90eF9yaW5nICp0eGRyLCAqdHhfb2xkOwogCXN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeGRyLCAqcnhfb2xkOwogCWludCBpLCBlcnI7CkBAIC02OTEsOSArNjcxLDExIEBACiAKIAlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCS8qIFRyeSB0byBnZXQgbmV3IHJlc291cmNlcyBiZWZvcmUgZGVsZXRpbmcgb2xkICovCi0JCWlmICgoZXJyID0gZTEwMDBfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKSkpCisJCWVyciA9IGUxMDAwX3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CisJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9zZXR1cF9yeDsKLQkJaWYgKChlcnIgPSBlMTAwMF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpKSkKKwkJZXJyID0gZTEwMDBfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gZXJyX3NldHVwX3R4OwogCiAJCS8qIHNhdmUgdGhlIG5ldywgcmVzdG9yZSB0aGUgb2xkIGluIG9yZGVyIHRvIGZyZWUgaXQsCkBAIC03MDcsNyArNjg5LDggQEAKIAkJa2ZyZWUocnhfb2xkKTsKIAkJYWRhcHRlci0+cnhfcmluZyA9IHJ4ZHI7CiAJCWFkYXB0ZXItPnR4X3JpbmcgPSB0eGRyOwotCQlpZiAoKGVyciA9IGUxMDAwX3VwKGFkYXB0ZXIpKSkKKwkJZXJyID0gZTEwMDBfdXAoYWRhcHRlcik7CisJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9zZXR1cDsKIAl9CiAKQEAgLTcyOCwxMiArNzExLDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGJvb2wgcmVnX3BhdHRlcm5fdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLAotCQkJICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKQorc3RhdGljIGJvb2wgcmVnX3BhdHRlcm5fdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLCBpbnQgcmVnLAorCQkJICAgICB1MzIgbWFzaywgdTMyIHdyaXRlKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RhdGljIGNvbnN0IHUzMiB0ZXN0W10gPQogCQl7MHg1QTVBNUE1QSwgMHhBNUE1QTVBNSwgMHgwMDAwMDAwMCwgMHhGRkZGRkZGRn07Ci0JdTggX19pb21lbSAqYWRkcmVzcyA9IGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWc7CisJdTggX19pb21lbSAqYWRkcmVzcyA9IGh3LT5od19hZGRyICsgcmVnOwogCXUzMiByZWFkOwogCWludCBpOwogCkBAIC03NTEsMTAgKzczNSwxMSBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgcmVnX3NldF9hbmRfY2hlY2soc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSwKLQkJCSAgICAgIGludCByZWcsIHUzMiBtYXNrLCB1MzIgd3JpdGUpCitzdGF0aWMgYm9vbCByZWdfc2V0X2FuZF9jaGVjayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLCBpbnQgcmVnLAorCQkJICAgICAgdTMyIG1hc2ssIHUzMiB3cml0ZSkKIHsKLQl1OCBfX2lvbWVtICphZGRyZXNzID0gYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZzsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXU4IF9faW9tZW0gKmFkZHJlc3MgPSBody0+aHdfYWRkciArIHJlZzsKIAl1MzIgcmVhZDsKIAogCXdyaXRlbCh3cml0ZSAmIG1hc2ssIGFkZHJlc3MpOwpAQCAtNzcyLDcgKzc1Nyw3IEBACiAjZGVmaW5lIFJFR19QQVRURVJOX1RFU1QocmVnLCBtYXNrLCB3cml0ZSkJCQkgICAgIFwKIAlkbyB7CQkJCQkJCSAgICAgXAogCQlpZiAocmVnX3BhdHRlcm5fdGVzdChhZGFwdGVyLCBkYXRhLAkJICAgICBcCi0JCQkgICAgIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgICBcCisJCQkgICAgIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpICAgXAogCQkJICAgICA/IEUxMDAwXyMjcmVnIDogRTEwMDBfODI1NDJfIyNyZWcsCSAgICAgXAogCQkJICAgICBtYXNrLCB3cml0ZSkpCQkJICAgICBcCiAJCQlyZXR1cm4gMTsJCQkJICAgICBcCkBAIC03ODEsMjIgKzc2NiwyMiBAQAogI2RlZmluZSBSRUdfU0VUX0FORF9DSEVDSyhyZWcsIG1hc2ssIHdyaXRlKQkJCSAgICAgXAogCWRvIHsJCQkJCQkJICAgICBcCiAJCWlmIChyZWdfc2V0X2FuZF9jaGVjayhhZGFwdGVyLCBkYXRhLAkJICAgICBcCi0JCQkgICAgICAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpICBcCisJCQkgICAgICAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSAgXAogCQkJICAgICAgPyBFMTAwMF8jI3JlZyA6IEUxMDAwXzgyNTQyXyMjcmVnLCAgICAgXAogCQkJICAgICAgbWFzaywgd3JpdGUpKQkJCSAgICAgXAogCQkJcmV0dXJuIDE7CQkJCSAgICAgXAogCX0gd2hpbGUgKDApCiAKLXN0YXRpYyBpbnQKLWUxMDAwX3JlZ190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCitzdGF0aWMgaW50IGUxMDAwX3JlZ190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCiB7CiAJdTMyIHZhbHVlLCBiZWZvcmUsIGFmdGVyOwogCXUzMiBpLCB0b2dnbGU7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCS8qIFRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgUmVhZCBPbmx5LCBzbyBhIHdyaXRlIHNob3VsZCBmYWlsLgogCSAqIFNvbWUgYml0cyB0aGF0IGdldCB0b2dnbGVkIGFyZSBpZ25vcmVkLgogCSAqLwotCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjX3R5cGUpIHsKKwlzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogCS8qIHRoZXJlIGFyZSBzZXZlcmFsIGJpdHMgb24gbmV3ZXIgaGFyZHdhcmUgdGhhdCBhcmUgci93ICovCiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgyNTcyOgpAQCAtODEyLDEwICs3OTcsMTAgQEAKIAkJYnJlYWs7CiAJfQogCi0JYmVmb3JlID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpOwotCXZhbHVlID0gKEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmIHRvZ2dsZSk7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTLCB0b2dnbGUpOwotCWFmdGVyID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYgdG9nZ2xlOworCWJlZm9yZSA9IGVyMzIoU1RBVFVTKTsKKwl2YWx1ZSA9IChlcjMyKFNUQVRVUykgJiB0b2dnbGUpOworCWV3MzIoU1RBVFVTLCB0b2dnbGUpOworCWFmdGVyID0gZXIzMihTVEFUVVMpICYgdG9nZ2xlOwogCWlmICh2YWx1ZSAhPSBhZnRlcikgewogCQlEUFJJTlRLKERSViwgRVJSLCAiZmFpbGVkIFNUQVRVUyByZWdpc3RlciB0ZXN0IGdvdDogIgogCQkgICAgICAgICIweCUwOFggZXhwZWN0ZWQ6IDB4JTA4WFxuIiwgYWZ0ZXIsIHZhbHVlKTsKQEAgLTgyMyw5ICs4MDgsOSBAQAogCQlyZXR1cm4gMTsKIAl9CiAJLyogcmVzdG9yZSBwcmV2aW91cyBzdGF0dXMgKi8KLQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMsIGJlZm9yZSk7CisJZXczMihTVEFUVVMsIGJlZm9yZSk7CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikgeworCWlmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikgewogCQlSRUdfUEFUVEVSTl9URVNUKEZDQUwsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYpOwogCQlSRUdfUEFUVEVSTl9URVNUKEZDQUgsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYpOwogCQlSRUdfUEFUVEVSTl9URVNUKEZDVCwgMHgwMDAwRkZGRiwgMHhGRkZGRkZGRik7CkBAIC04NDUsMjAgKzgzMCwyMCBAQAogCiAJUkVHX1NFVF9BTkRfQ0hFQ0soUkNUTCwgMHhGRkZGRkZGRiwgMHgwMDAwMDAwMCk7CiAKLQliZWZvcmUgPSAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbiA/CisJYmVmb3JlID0gKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuID8KIAkgICAgICAgICAgMHgwNkMzQjMzRSA6IDB4MDZERkIzRkUpOwogCVJFR19TRVRfQU5EX0NIRUNLKFJDVEwsIGJlZm9yZSwgMHgwMDNGRkZGQik7CiAJUkVHX1NFVF9BTkRfQ0hFQ0soVENUTCwgMHhGRkZGRkZGRiwgMHgwMDAwMDAwMCk7CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpIHsKKwlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSB7CiAKIAkJUkVHX1NFVF9BTkRfQ0hFQ0soUkNUTCwgYmVmb3JlLCAweEZGRkZGRkZGKTsKIAkJUkVHX1BBVFRFUk5fVEVTVChSREJBTCwgMHhGRkZGRkZGMCwgMHhGRkZGRkZGRik7Ci0JCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKQorCQlpZiAoaHctPm1hY190eXBlICE9IGUxMDAwX2ljaDhsYW4pCiAJCQlSRUdfUEFUVEVSTl9URVNUKFRYQ1csIDB4QzAwMEZGRkYsIDB4MDAwMEZGRkYpOwogCQlSRUdfUEFUVEVSTl9URVNUKFREQkFMLCAweEZGRkZGRkYwLCAweEZGRkZGRkZGKTsKIAkJUkVHX1BBVFRFUk5fVEVTVChUSURWLCAweDAwMDBGRkZGLCAweDAwMDBGRkZGKTsKLQkJdmFsdWUgPSAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbiA/CisJCXZhbHVlID0gKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuID8KIAkJICAgICAgICAgRTEwMDBfUkFSX0VOVFJJRVNfSUNIOExBTiA6IEUxMDAwX1JBUl9FTlRSSUVTKTsKIAkJZm9yIChpID0gMDsgaSA8IHZhbHVlOyBpKyspIHsKIAkJCVJFR19QQVRURVJOX1RFU1QoUkEgKyAoKChpIDw8IDEpICsgMSkgPDwgMiksIDB4ODAwM0ZGRkYsCkBAIC04NzQsNyArODU5LDcgQEAKIAogCX0KIAotCXZhbHVlID0gKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4gPworCXZhbHVlID0gKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuID8KIAkJCUUxMDAwX01DX1RCTF9TSVpFX0lDSDhMQU4gOiBFMTAwMF9NQ19UQkxfU0laRSk7CiAJZm9yIChpID0gMDsgaSA8IHZhbHVlOyBpKyspCiAJCVJFR19QQVRURVJOX1RFU1QoTVRBICsgKGkgPDwgMiksIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYpOwpAQCAtODgzLDkgKzg2OCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWUxMDAwX2VlcHJvbV90ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCitzdGF0aWMgaW50IGUxMDAwX2VlcHJvbV90ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MTYgdGVtcDsKIAl1MTYgY2hlY2tzdW0gPSAwOwogCXUxNiBpOwpAQCAtODkzLDcgKzg3OCw3IEBACiAJKmRhdGEgPSAwOwogCS8qIFJlYWQgYW5kIGFkZCB1cCB0aGUgY29udGVudHMgb2YgdGhlIEVFUFJPTSAqLwogCWZvciAoaSA9IDA7IGkgPCAoRUVQUk9NX0NIRUNLU1VNX1JFRyArIDEpOyBpKyspIHsKLQkJaWYgKChlMTAwMF9yZWFkX2VlcHJvbSgmYWRhcHRlci0+aHcsIGksIDEsICZ0ZW1wKSkgPCAwKSB7CisJCWlmICgoZTEwMDBfcmVhZF9lZXByb20oaHcsIGksIDEsICZ0ZW1wKSkgPCAwKSB7CiAJCQkqZGF0YSA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtOTAxLDMwICs4ODYsMzAgQEAKIAl9CiAKIAkvKiBJZiBDaGVja3N1bSBpcyBub3QgQ29ycmVjdCByZXR1cm4gZXJyb3IgZWxzZSB0ZXN0IHBhc3NlZCAqLwotCWlmICgoY2hlY2tzdW0gIT0gKHUxNikgRUVQUk9NX1NVTSkgJiYgISgqZGF0YSkpCisJaWYgKChjaGVja3N1bSAhPSAodTE2KUVFUFJPTV9TVU0pICYmICEoKmRhdGEpKQogCQkqZGF0YSA9IDI7CiAKIAlyZXR1cm4gKmRhdGE7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdAotZTEwMDBfdGVzdF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCitzdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfdGVzdF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCi0JYWRhcHRlci0+dGVzdF9pY3IgfD0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJQ1IpOworCWFkYXB0ZXItPnRlc3RfaWNyIHw9IGVyMzIoSUNSKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludAotZTEwMDBfaW50cl90ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCitzdGF0aWMgaW50IGUxMDAwX2ludHJfdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJdTMyIG1hc2ssIGkgPSAwOwogCWJvb2wgc2hhcmVkX2ludCA9IHRydWU7CiAJdTMyIGlycSA9IGFkYXB0ZXItPnBkZXYtPmlycTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCiAJKmRhdGEgPSAwOwogCkBAIC05NDIsMTMgKzkyNywxMyBAQAogCSAgICAgICAgKHNoYXJlZF9pbnQgPyAic2hhcmVkIiA6ICJ1bnNoYXJlZCIpKTsKIAogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCi0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1DLCAweEZGRkZGRkZGKTsKKwlldzMyKElNQywgMHhGRkZGRkZGRik7CiAJbXNsZWVwKDEwKTsKIAogCS8qIFRlc3QgZWFjaCBpbnRlcnJ1cHQgKi8KIAlmb3IgKDsgaSA8IDEwOyBpKyspIHsKIAotCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbiAmJiBpID09IDgpCisJCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbiAmJiBpID09IDgpCiAJCQljb250aW51ZTsKIAogCQkvKiBJbnRlcnJ1cHQgdG8gdGVzdCAqLwpAQCAtOTYyLDggKzk0Nyw4IEBACiAJCQkgKiB0ZXN0IGZhaWxlZC4KIAkJCSAqLwogCQkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwotCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1DLCBtYXNrKTsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElDUywgbWFzayk7CisJCQlldzMyKElNQywgbWFzayk7CisJCQlldzMyKElDUywgbWFzayk7CiAJCQltc2xlZXAoMTApOwogCiAJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSB7CkBAIC05NzksOCArOTY0LDggQEAKIAkJICogdGVzdCBmYWlsZWQuCiAJCSAqLwogCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNUywgbWFzayk7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElDUywgbWFzayk7CisJCWV3MzIoSU1TLCBtYXNrKTsKKwkJZXczMihJQ1MsIG1hc2spOwogCQltc2xlZXAoMTApOwogCiAJCWlmICghKGFkYXB0ZXItPnRlc3RfaWNyICYgbWFzaykpIHsKQEAgLTk5Niw4ICs5ODEsOCBAQAogCQkJICogdGVzdCBmYWlsZWQuCiAJCQkgKi8KIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgfm1hc2sgJiAweDAwMDA3RkZGKTsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElDUywgfm1hc2sgJiAweDAwMDA3RkZGKTsKKwkJCWV3MzIoSU1DLCB+bWFzayAmIDB4MDAwMDdGRkYpOworCQkJZXczMihJQ1MsIH5tYXNrICYgMHgwMDAwN0ZGRik7CiAJCQltc2xlZXAoMTApOwogCiAJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IpIHsKQEAgLTEwMDgsNyArOTkzLDcgQEAKIAl9CiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwotCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgMHhGRkZGRkZGRik7CisJZXczMihJTUMsIDB4RkZGRkZGRkYpOwogCW1zbGVlcCgxMCk7CiAKIAkvKiBVbmhvb2sgdGVzdCBpbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtMTAxNyw4ICsxMDAyLDcgQEAKIAlyZXR1cm4gKmRhdGE7CiB9CiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9mcmVlX2Rlc2NfcmluZ3Moc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBlMTAwMF9mcmVlX2Rlc2NfcmluZ3Moc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4ZHIgPSAmYWRhcHRlci0+dGVzdF90eF9yaW5nOwogCXN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeGRyID0gJmFkYXB0ZXItPnRlc3RfcnhfcmluZzsKQEAgLTEwNjQsOSArMTA0OCw5IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9zZXR1cF9kZXNjX3JpbmdzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBlMTAwMF9zZXR1cF9kZXNjX3JpbmdzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4ZHIgPSAmYWRhcHRlci0+dGVzdF90eF9yaW5nOwogCXN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeGRyID0gJmFkYXB0ZXItPnRlc3RfcnhfcmluZzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CkBAIC0xMDc4LDQxICsxMDYyLDM5IEBACiAJaWYgKCF0eGRyLT5jb3VudCkKIAkJdHhkci0+Y291bnQgPSBFMTAwMF9ERUZBVUxUX1RYRDsKIAotCWlmICghKHR4ZHItPmJ1ZmZlcl9pbmZvID0ga2NhbGxvYyh0eGRyLT5jb3VudCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpKSkgeworCXR4ZHItPmJ1ZmZlcl9pbmZvID0ga2NhbGxvYyh0eGRyLT5jb3VudCwgc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXR4ZHItPmJ1ZmZlcl9pbmZvKSB7CiAJCXJldF92YWwgPSAxOwogCQlnb3RvIGVycl9ub21lbTsKIAl9CiAKIAl0eGRyLT5zaXplID0gdHhkci0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpOwogCXR4ZHItPnNpemUgPSBBTElHTih0eGRyLT5zaXplLCA0MDk2KTsKLQlpZiAoISh0eGRyLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhkci0+c2l6ZSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR4ZHItPmRtYSkpKSB7CisJdHhkci0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4ZHItPnNpemUsICZ0eGRyLT5kbWEpOworCWlmICghdHhkci0+ZGVzYykgewogCQlyZXRfdmFsID0gMjsKIAkJZ290byBlcnJfbm9tZW07CiAJfQogCW1lbXNldCh0eGRyLT5kZXNjLCAwLCB0eGRyLT5zaXplKTsKIAl0eGRyLT5uZXh0X3RvX3VzZSA9IHR4ZHItPm5leHRfdG9fY2xlYW4gPSAwOwogCi0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVERCQUwsCi0JCQkoKHU2NCkgdHhkci0+ZG1hICYgMHgwMDAwMDAwMEZGRkZGRkZGKSk7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVERCQUgsICgodTY0KSB0eGRyLT5kbWEgPj4gMzIpKTsKLQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBURExFTiwKLQkJCXR4ZHItPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKSk7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVERILCAwKTsKLQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBURFQsIDApOwotCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFRDVEwsCi0JCQlFMTAwMF9UQ1RMX1BTUCB8IEUxMDAwX1RDVExfRU4gfAotCQkJRTEwMDBfQ09MTElTSU9OX1RIUkVTSE9MRCA8PCBFMTAwMF9DVF9TSElGVCB8Ci0JCQlFMTAwMF9GRFhfQ09MTElTSU9OX0RJU1RBTkNFIDw8IEUxMDAwX0NPTERfU0hJRlQpOworCWV3MzIoVERCQUwsICgodTY0KXR4ZHItPmRtYSAmIDB4MDAwMDAwMDBGRkZGRkZGRikpOworCWV3MzIoVERCQUgsICgodTY0KXR4ZHItPmRtYSA+PiAzMikpOworCWV3MzIoVERMRU4sIHR4ZHItPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKSk7CisJZXczMihUREgsIDApOworCWV3MzIoVERULCAwKTsKKwlldzMyKFRDVEwsIEUxMDAwX1RDVExfUFNQIHwgRTEwMDBfVENUTF9FTiB8CisJICAgICBFMTAwMF9DT0xMSVNJT05fVEhSRVNIT0xEIDw8IEUxMDAwX0NUX1NISUZUIHwKKwkgICAgIEUxMDAwX0ZEWF9DT0xMSVNJT05fRElTVEFOQ0UgPDwgRTEwMDBfQ09MRF9TSElGVCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdHhkci0+Y291bnQ7IGkrKykgewogCQlzdHJ1Y3QgZTEwMDBfdHhfZGVzYyAqdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4ZHIsIGkpOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDEwMjQ7CiAKLQkJaWYgKCEoc2tiID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9LRVJORUwpKSkgeworCQlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2tiKSB7CiAJCQlyZXRfdmFsID0gMzsKIAkJCWdvdG8gZXJyX25vbWVtOwogCQl9CkBAIC0xMTM1LDQwICsxMTE3LDQwIEBACiAJaWYgKCFyeGRyLT5jb3VudCkKIAkJcnhkci0+Y291bnQgPSBFMTAwMF9ERUZBVUxUX1JYRDsKIAotCWlmICghKHJ4ZHItPmJ1ZmZlcl9pbmZvID0ga2NhbGxvYyhyeGRyLT5jb3VudCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKSkpIHsKKwlyeGRyLT5idWZmZXJfaW5mbyA9IGtjYWxsb2Mocnhkci0+Y291bnQsIHNpemVvZihzdHJ1Y3QgZTEwMDBfYnVmZmVyKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFyeGRyLT5idWZmZXJfaW5mbykgewogCQlyZXRfdmFsID0gNDsKIAkJZ290byBlcnJfbm9tZW07CiAJfQogCiAJcnhkci0+c2l6ZSA9IHJ4ZHItPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF9yeF9kZXNjKTsKLQlpZiAoIShyeGRyLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgcnhkci0+c2l6ZSwgJnJ4ZHItPmRtYSkpKSB7CisJcnhkci0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHJ4ZHItPnNpemUsICZyeGRyLT5kbWEpOworCWlmICghcnhkci0+ZGVzYykgewogCQlyZXRfdmFsID0gNTsKIAkJZ290byBlcnJfbm9tZW07CiAJfQogCW1lbXNldChyeGRyLT5kZXNjLCAwLCByeGRyLT5zaXplKTsKIAlyeGRyLT5uZXh0X3RvX3VzZSA9IHJ4ZHItPm5leHRfdG9fY2xlYW4gPSAwOwogCi0JcmN0bCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkNUTCk7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKLQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSREJBTCwKLQkJCSgodTY0KSByeGRyLT5kbWEgJiAweEZGRkZGRkZGKSk7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkRCQUgsICgodTY0KSByeGRyLT5kbWEgPj4gMzIpKTsKLQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRExFTiwgcnhkci0+c2l6ZSk7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkRILCAwKTsKLQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRFQsIDApOworCXJjdGwgPSBlcjMyKFJDVEwpOworCWV3MzIoUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKKwlldzMyKFJEQkFMLCAoKHU2NClyeGRyLT5kbWEgJiAweEZGRkZGRkZGKSk7CisJZXczMihSREJBSCwgKCh1NjQpcnhkci0+ZG1hID4+IDMyKSk7CisJZXczMihSRExFTiwgcnhkci0+c2l6ZSk7CisJZXczMihSREgsIDApOworCWV3MzIoUkRULCAwKTsKIAlyY3RsID0gRTEwMDBfUkNUTF9FTiB8IEUxMDAwX1JDVExfQkFNIHwgRTEwMDBfUkNUTF9TWl8yMDQ4IHwKIAkJRTEwMDBfUkNUTF9MQk1fTk8gfCBFMTAwMF9SQ1RMX1JETVRTX0hBTEYgfAotCQkoYWRhcHRlci0+aHcubWNfZmlsdGVyX3R5cGUgPDwgRTEwMDBfUkNUTF9NT19TSElGVCk7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7CisJCShody0+bWNfZmlsdGVyX3R5cGUgPDwgRTEwMDBfUkNUTF9NT19TSElGVCk7CisJZXczMihSQ1RMLCByY3RsKTsKIAogCWZvciAoaSA9IDA7IGkgPCByeGRyLT5jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBlMTAwMF9yeF9kZXNjICpyeF9kZXNjID0gRTEwMDBfUlhfREVTQygqcnhkciwgaSk7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJaWYgKCEoc2tiID0gYWxsb2Nfc2tiKEUxMDAwX1JYQlVGRkVSXzIwNDggKyBORVRfSVBfQUxJR04sCi0JCQkJR0ZQX0tFUk5FTCkpKSB7CisJCXNrYiA9IGFsbG9jX3NrYihFMTAwMF9SWEJVRkZFUl8yMDQ4ICsgTkVUX0lQX0FMSUdOLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFza2IpIHsKIAkJCXJldF92YWwgPSA2OwogCQkJZ290byBlcnJfbm9tZW07CiAJCX0KQEAgLTExODksNzMgKzExNzEsNzQgQEAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX3BoeV9kaXNhYmxlX3JlY2VpdmVyKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgZTEwMDBfcGh5X2Rpc2FibGVfcmVjZWl2ZXIoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwogCS8qIFdyaXRlIG91dCB0byBQSFkgcmVnaXN0ZXJzIDI5IGFuZCAzMCB0byBkaXNhYmxlIHRoZSBSZWNlaXZlci4gKi8KLQllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgMjksIDB4MDAxRik7Ci0JZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIDMwLCAweDhGRkMpOwotCWUxMDAwX3dyaXRlX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCAyOSwgMHgwMDFBKTsKLQllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgMzAsIDB4OEZGMCk7CisJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMjksIDB4MDAxRik7CisJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMzAsIDB4OEZGQyk7CisJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMjksIDB4MDAxQSk7CisJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMzAsIDB4OEZGMCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9waHlfcmVzZXRfY2xrX2FuZF9jcnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBlMTAwMF9waHlfcmVzZXRfY2xrX2FuZF9jcnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MTYgcGh5X3JlZzsKIAogCS8qIEJlY2F1c2Ugd2UgcmVzZXQgdGhlIFBIWSBhYm92ZSwgd2UgbmVlZCB0byByZS1mb3JjZSBUWF9DTEsgaW4gdGhlCiAJICogRXh0ZW5kZWQgUEhZIFNwZWNpZmljIENvbnRyb2wgUmVnaXN0ZXIgdG8gMjVNSHogY2xvY2suICBUaGlzCiAJICogdmFsdWUgZGVmYXVsdHMgYmFjayB0byBhIDIuNU1IeiBjbG9jayB3aGVuIHRoZSBQSFkgaXMgcmVzZXQuCiAJICovCi0JZTEwMDBfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsICZwaHlfcmVnKTsKKwllMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLCAmcGh5X3JlZyk7CiAJcGh5X3JlZyB8PSBNODhFMTAwMF9FUFNDUl9UWF9DTEtfMjU7Ci0JZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsCisJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywKIAkJTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsIHBoeV9yZWcpOwogCiAJLyogSW4gYWRkaXRpb24sIGJlY2F1c2Ugb2YgdGhlIHMvdyByZXNldCBhYm92ZSwgd2UgbmVlZCB0byBlbmFibGUKIAkgKiBDUlMgb24gVFguICBUaGlzIG11c3QgYmUgc2V0IGZvciBib3RoIGZ1bGwgYW5kIGhhbGYgZHVwbGV4CiAJICogb3BlcmF0aW9uLgogCSAqLwotCWUxMDAwX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfcmVnKTsKKwllMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfcmVnKTsKIAlwaHlfcmVnIHw9IE04OEUxMDAwX1BTQ1JfQVNTRVJUX0NSU19PTl9UWDsKLQllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywKKwllMTAwMF93cml0ZV9waHlfcmVnKGh3LAogCQlNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCBwaHlfcmVnKTsKIH0KIAotc3RhdGljIGludAotZTEwMDBfbm9uaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGUxMDAwX25vbmludGVncmF0ZWRfcGh5X2xvb3BiYWNrKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGN0cmxfcmVnOwogCXUxNiBwaHlfcmVnOwogCiAJLyogU2V0dXAgdGhlIERldmljZSBDb250cm9sIFJlZ2lzdGVyIGZvciBQSFkgbG9vcGJhY2sgdGVzdC4gKi8KIAotCWN0cmxfcmVnID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMKTsKKwljdHJsX3JlZyA9IGVyMzIoQ1RSTCk7CiAJY3RybF9yZWcgfD0gKEUxMDAwX0NUUkxfSUxPUyB8CQkvKiBJbnZlcnQgTG9zcy1PZi1TaWduYWwgKi8KIAkJICAgICBFMTAwMF9DVFJMX0ZSQ1NQRCB8CS8qIFNldCB0aGUgRm9yY2UgU3BlZWQgQml0ICovCiAJCSAgICAgRTEwMDBfQ1RSTF9GUkNEUFggfAkvKiBTZXQgdGhlIEZvcmNlIER1cGxleCBCaXQgKi8KIAkJICAgICBFMTAwMF9DVFJMX1NQRF8xMDAwIHwJLyogRm9yY2UgU3BlZWQgdG8gMTAwMCAqLwogCQkgICAgIEUxMDAwX0NUUkxfRkQpOwkJLyogRm9yY2UgRHVwbGV4IHRvIEZVTEwgKi8KIAotCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwsIGN0cmxfcmVnKTsKKwlldzMyKENUUkwsIGN0cmxfcmVnKTsKIAogCS8qIFJlYWQgdGhlIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyICgweDEwKSAqLwotCWUxMDAwX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfcmVnKTsKKwllMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfcmVnKTsKIAogCS8qIENsZWFyIEF1dG8tQ3Jvc3NvdmVyIGJpdHMgaW4gUEhZIFNwZWNpZmljIENvbnRyb2wgUmVnaXN0ZXIKIAkgKiAoYml0cyA2OjUpLgogCSAqLwogCXBoeV9yZWcgJj0gfk04OEUxMDAwX1BTQ1JfQVVUT19YX01PREU7Ci0JZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsIHBoeV9yZWcpOworCWUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsIHBoeV9yZWcpOwogCiAJLyogUGVyZm9ybSBzb2Z0d2FyZSByZXNldCBvbiB0aGUgUEhZICovCi0JZTEwMDBfcGh5X3Jlc2V0KCZhZGFwdGVyLT5odyk7CisJZTEwMDBfcGh5X3Jlc2V0KGh3KTsKIAogCS8qIEhhdmUgdG8gc2V0dXAgVFhfQ0xLIGFuZCBUWF9DUlMgYWZ0ZXIgc29mdHdhcmUgcmVzZXQgKi8KIAllMTAwMF9waHlfcmVzZXRfY2xrX2FuZF9jcnMoYWRhcHRlcik7CiAKLQllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgUEhZX0NUUkwsIDB4ODEwMCk7CisJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgUEhZX0NUUkwsIDB4ODEwMCk7CiAKIAkvKiBXYWl0IGZvciByZXNldCB0byBjb21wbGV0ZS4gKi8KIAl1ZGVsYXkoNTAwKTsKQEAgLTEyNjcsNTUgKzEyNTAsNTUgQEAKIAllMTAwMF9waHlfZGlzYWJsZV9yZWNlaXZlcihhZGFwdGVyKTsKIAogCS8qIFNldCB0aGUgbG9vcGJhY2sgYml0IGluIHRoZSBQSFkgY29udHJvbCByZWdpc3Rlci4gKi8KLQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgJnBoeV9yZWcpOworCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0NUUkwsICZwaHlfcmVnKTsKIAlwaHlfcmVnIHw9IE1JSV9DUl9MT09QQkFDSzsKLQllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgUEhZX0NUUkwsIHBoeV9yZWcpOworCWUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV9DVFJMLCBwaHlfcmVnKTsKIAogCS8qIFNldHVwIFRYX0NMSyBhbmQgVFhfQ1JTIG9uZSBtb3JlIHRpbWUuICovCiAJZTEwMDBfcGh5X3Jlc2V0X2Nsa19hbmRfY3JzKGFkYXB0ZXIpOwogCiAJLyogQ2hlY2sgUGh5IENvbmZpZ3VyYXRpb24gKi8KLQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgJnBoeV9yZWcpOworCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0NUUkwsICZwaHlfcmVnKTsKIAlpZiAocGh5X3JlZyAhPSAweDQxMDApCiAJCSByZXR1cm4gOTsKIAotCWUxMDAwX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLCAmcGh5X3JlZyk7CisJZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwgJnBoeV9yZWcpOwogCWlmIChwaHlfcmVnICE9IDB4MDA3MCkKIAkJcmV0dXJuIDEwOwogCi0JZTEwMDBfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgMjksICZwaHlfcmVnKTsKKwllMTAwMF9yZWFkX3BoeV9yZWcoaHcsIDI5LCAmcGh5X3JlZyk7CiAJaWYgKHBoeV9yZWcgIT0gMHgwMDFBKQogCQlyZXR1cm4gMTE7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotZTEwMDBfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGUxMDAwX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGN0cmxfcmVnID0gMDsKIAl1MzIgc3RhdF9yZWcgPSAwOwogCi0JYWRhcHRlci0+aHcuYXV0b25lZyA9IGZhbHNlOworCWh3LT5hdXRvbmVnID0gZmFsc2U7CiAKLQlpZiAoYWRhcHRlci0+aHcucGh5X3R5cGUgPT0gZTEwMDBfcGh5X204OCkgeworCWlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X204OCkgewogCQkvKiBBdXRvLU1ESS9NRElYIE9mZiAqLwotCQllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywKKwkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywKIAkJCQkgICAgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgMHgwODA4KTsKIAkJLyogcmVzZXQgdG8gdXBkYXRlIEF1dG8tTURJL01ESVggKi8KLQkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV9DVFJMLCAweDkxNDApOworCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgMHg5MTQwKTsKIAkJLyogYXV0b25lZyBvZmYgKi8KLQkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV9DVFJMLCAweDgxNDApOwotCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcucGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpCi0JCWUxMDAwX3dyaXRlX3BoeV9yZWcoJmFkYXB0ZXItPmh3LAorCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgMHg4MTQwKTsKKwl9IGVsc2UgaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfZ2c4MjU2MykKKwkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywKIAkJICAgICAgICAgICAgICAgICAgICBHRzgyNTYzX1BIWV9LTVJOX01PREVfQ1RSTCwKIAkJICAgICAgICAgICAgICAgICAgICAweDFDQyk7CiAKLQljdHJsX3JlZyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTCk7CisJY3RybF9yZWcgPSBlcjMyKENUUkwpOwogCi0JaWYgKGFkYXB0ZXItPmh3LnBoeV90eXBlID09IGUxMDAwX3BoeV9pZmUpIHsKKwlpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZmUpIHsKIAkJLyogZm9yY2UgMTAwLCBzZXQgbG9vcGJhY2sgKi8KLQkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV9DVFJMLCAweDYxMDApOworCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgMHg2MTAwKTsKIAogCQkvKiBOb3cgc2V0IHVwIHRoZSBNQUMgdG8gdGhlIHNhbWUgc3BlZWQvZHVwbGV4IGFzIHRoZSBQSFkuICovCiAJCWN0cmxfcmVnICY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7IC8qIENsZWFyIHRoZSBzcGVlZCBzZWwgYml0cyAqLwpAQCAtMTMyNSwxMCArMTMwOCwxMCBAQAogCQkJICAgICBFMTAwMF9DVFJMX0ZEKTsJIC8qIEZvcmNlIER1cGxleCB0byBGVUxMICovCiAJfSBlbHNlIHsKIAkJLyogZm9yY2UgMTAwMCwgc2V0IGxvb3BiYWNrICovCi0JCWUxMDAwX3dyaXRlX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgMHg0MTQwKTsKKwkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgUEhZX0NUUkwsIDB4NDE0MCk7CiAKIAkJLyogTm93IHNldCB1cCB0aGUgTUFDIHRvIHRoZSBzYW1lIHNwZWVkL2R1cGxleCBhcyB0aGUgUEhZLiAqLwotCQljdHJsX3JlZyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTCk7CisJCWN0cmxfcmVnID0gZXIzMihDVFJMKTsKIAkJY3RybF9yZWcgJj0gfkUxMDAwX0NUUkxfU1BEX1NFTDsgLyogQ2xlYXIgdGhlIHNwZWVkIHNlbCBiaXRzICovCiAJCWN0cmxfcmVnIHw9IChFMTAwMF9DVFJMX0ZSQ1NQRCB8IC8qIFNldCB0aGUgRm9yY2UgU3BlZWQgQml0ICovCiAJCQkgICAgIEUxMDAwX0NUUkxfRlJDRFBYIHwgLyogU2V0IHRoZSBGb3JjZSBEdXBsZXggQml0ICovCkBAIC0xMzM2LDIzICsxMzE5LDIzIEBACiAJCQkgICAgIEUxMDAwX0NUUkxfRkQpOwkgLyogRm9yY2UgRHVwbGV4IHRvIEZVTEwgKi8KIAl9CiAKLQlpZiAoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlciAmJgotCSAgIGFkYXB0ZXItPmh3LnBoeV90eXBlID09IGUxMDAwX3BoeV9tODgpCisJaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyICYmCisJICAgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9tODgpCiAJCWN0cmxfcmVnIHw9IEUxMDAwX0NUUkxfSUxPUzsgLyogSW52ZXJ0IExvc3Mgb2YgU2lnbmFsICovCiAJZWxzZSB7CiAJCS8qIFNldCB0aGUgSUxPUyBiaXQgb24gdGhlIGZpYmVyIE5pYyBpcyBoYWxmCiAJCSAqIGR1cGxleCBsaW5rIGlzIGRldGVjdGVkLiAqLwotCQlzdGF0X3JlZyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKTsKKwkJc3RhdF9yZWcgPSBlcjMyKFNUQVRVUyk7CiAJCWlmICgoc3RhdF9yZWcgJiBFMTAwMF9TVEFUVVNfRkQpID09IDApCiAJCQljdHJsX3JlZyB8PSAoRTEwMDBfQ1RSTF9JTE9TIHwgRTEwMDBfQ1RSTF9TTFUpOwogCX0KIAotCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwsIGN0cmxfcmVnKTsKKwlldzMyKENUUkwsIGN0cmxfcmVnKTsKIAogCS8qIERpc2FibGUgdGhlIHJlY2VpdmVyIG9uIHRoZSBQSFkgc28gd2hlbiBhIGNhYmxlIGlzIHBsdWdnZWQgaW4sIHRoZQogCSAqIFBIWSBkb2VzIG5vdCBiZWdpbiB0byBhdXRvbmVnIHdoZW4gYSBjYWJsZSBpcyByZWNvbm5lY3RlZCB0byB0aGUgTklDLgogCSAqLwotCWlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfbTg4KQorCWlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X204OCkKIAkJZTEwMDBfcGh5X2Rpc2FibGVfcmVjZWl2ZXIoYWRhcHRlcik7CiAKIAl1ZGVsYXkoNTAwKTsKQEAgLTEzNjAsMTUgKzEzNDMsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotZTEwMDBfc2V0X3BoeV9sb29wYmFjayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgZTEwMDBfc2V0X3BoeV9sb29wYmFjayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUxNiBwaHlfcmVnID0gMDsKIAl1MTYgY291bnQgPSAwOwogCi0Jc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgeworCXN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU0MzoKLQkJaWYgKGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwkJaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCQkvKiBBdHRlbXB0IHRvIHNldHVwIExvb3BiYWNrIG1vZGUgb24gTm9uLWludGVncmF0ZWQgUEhZLgogCQkJICogU29tZSBQSFkgcmVnaXN0ZXJzIGdldCBjb3JydXB0ZWQgYXQgcmFuZG9tLCBzbwogCQkJICogYXR0ZW1wdCB0aGlzIDEwIHRpbWVzLgpAQCAtMTQwMiw5ICsxMzg1LDkgQEAKIAkJLyogRGVmYXVsdCBQSFkgbG9vcGJhY2sgd29yayBpcyB0byByZWFkIHRoZSBNSUkKIAkJICogY29udHJvbCByZWdpc3RlciBhbmQgYXNzZXJ0IGJpdCAxNCAobG9vcGJhY2sgbW9kZSkuCiAJCSAqLwotCQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgJnBoeV9yZWcpOworCQllMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9DVFJMLCAmcGh5X3JlZyk7CiAJCXBoeV9yZWcgfD0gTUlJX0NSX0xPT1BCQUNLOwotCQllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgUEhZX0NUUkwsIHBoeV9yZWcpOworCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgcGh5X3JlZyk7CiAJCXJldHVybiAwOwogCQlicmVhazsKIAl9CkBAIC0xNDEyLDggKzEzOTUsNyBAQAogCXJldHVybiA4OwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9zZXR1cF9sb29wYmFja190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBlMTAwMF9zZXR1cF9sb29wYmFja190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJjdGw7CkBAIC0xNDMxLDE0ICsxNDEzLDE0IEBACiAJCWNhc2UgZTEwMDBfODI1NzI6CiAjZGVmaW5lIEUxMDAwX1NFUkRFU19MQl9PTiAweDQxMAogCQkJZTEwMDBfc2V0X3BoeV9sb29wYmFjayhhZGFwdGVyKTsKLQkJCUUxMDAwX1dSSVRFX1JFRyhodywgU0NUTCwgRTEwMDBfU0VSREVTX0xCX09OKTsKKwkJCWV3MzIoU0NUTCwgRTEwMDBfU0VSREVTX0xCX09OKTsKIAkJCW1zbGVlcCgxMCk7CiAJCQlyZXR1cm4gMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKKwkJCXJjdGwgPSBlcjMyKFJDVEwpOwogCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX0xCTV9UQ1ZSOwotCQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsKTsKKwkJCWV3MzIoUkNUTCwgcmN0bCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0gZWxzZSBpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpCkBAIC0xNDQ3LDE2ICsxNDI5LDE1IEBACiAJcmV0dXJuIDc7CiB9CiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9sb29wYmFja19jbGVhbnVwKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgZTEwMDBfbG9vcGJhY2tfY2xlYW51cChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiByY3RsOwogCXUxNiBwaHlfcmVnOwogCi0JcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKKwlyY3RsID0gZXIzMihSQ1RMKTsKIAlyY3RsICY9IH4oRTEwMDBfUkNUTF9MQk1fVENWUiB8IEUxMDAwX1JDVExfTEJNX01BQyk7Ci0JRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsKTsKKwlldzMyKFJDVEwsIHJjdGwpOwogCiAJc3dpdGNoIChody0+bWFjX3R5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTcxOgpAQCAtMTQ2NCw3ICsxNDQ1LDcgQEAKIAkJaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIgfHwKIAkJICAgIGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CiAjZGVmaW5lIEUxMDAwX1NFUkRFU19MQl9PRkYgMHg0MDAKLQkJCUUxMDAwX1dSSVRFX1JFRyhodywgU0NUTCwgRTEwMDBfU0VSREVTX0xCX09GRik7CisJCQlldzMyKFNDVEwsIEUxMDAwX1NFUkRFU19MQl9PRkYpOwogCQkJbXNsZWVwKDEwKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNDg5LDggKzE0NzAsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX2NyZWF0ZV9sYnRlc3RfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGZyYW1lX3NpemUpCitzdGF0aWMgdm9pZCBlMTAwMF9jcmVhdGVfbGJ0ZXN0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGZyYW1lX3NpemUpCiB7CiAJbWVtc2V0KHNrYi0+ZGF0YSwgMHhGRiwgZnJhbWVfc2l6ZSk7CiAJZnJhbWVfc2l6ZSAmPSB+MTsKQEAgLTE0OTksOCArMTQ4MCw4IEBACiAJbWVtc2V0KCZza2ItPmRhdGFbZnJhbWVfc2l6ZSAvIDIgKyAxMl0sIDB4QUYsIDEpOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9jaGVja19sYnRlc3RfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGZyYW1lX3NpemUpCitzdGF0aWMgaW50IGUxMDAwX2NoZWNrX2xidGVzdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZSkKIHsKIAlmcmFtZV9zaXplICY9IH4xOwogCWlmICgqKHNrYi0+ZGF0YSArIDMpID09IDB4RkYpIHsKQEAgLTE1MTIsMTYgKzE0OTMsMTYgQEAKIAlyZXR1cm4gMTM7CiB9CiAKLXN0YXRpYyBpbnQKLWUxMDAwX3J1bl9sb29wYmFja190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBlMTAwMF9ydW5fbG9vcGJhY2tfdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBlMTAwMF90eF9yaW5nICp0eGRyID0gJmFkYXB0ZXItPnRlc3RfdHhfcmluZzsKIAlzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhkciA9ICZhZGFwdGVyLT50ZXN0X3J4X3Jpbmc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWludCBpLCBqLCBrLCBsLCBsYywgZ29vZF9jbnQsIHJldF92YWw9MDsKIAl1bnNpZ25lZCBsb25nIHRpbWU7CiAKLQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRFQsIHJ4ZHItPmNvdW50IC0gMSk7CisJZXczMihSRFQsIHJ4ZHItPmNvdW50IC0gMSk7CiAKIAkvKiBDYWxjdWxhdGUgdGhlIGxvb3AgY291bnQgYmFzZWQgb24gdGhlIGxhcmdlc3QgZGVzY3JpcHRvciByaW5nCiAJICogVGhlIGlkZWEgaXMgdG8gd3JhcCB0aGUgbGFyZ2VzdCByaW5nIGEgbnVtYmVyIG9mIHRpbWVzIHVzaW5nIDY0CkBAIC0xNTQ0LDcgKzE1MjUsNyBAQAogCQkJCSAgICAJUENJX0RNQV9UT0RFVklDRSk7CiAJCQlpZiAodW5saWtlbHkoKytrID09IHR4ZHItPmNvdW50KSkgayA9IDA7CiAJCX0KLQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVERULCBrKTsKKwkJZXczMihURFQsIGspOwogCQltc2xlZXAoMjAwKTsKIAkJdGltZSA9IGppZmZpZXM7IC8qIHNldCB0aGUgc3RhcnQgdGltZSBmb3IgdGhlIHJlY2VpdmUgKi8KIAkJZ29vZF9jbnQgPSAwOwpAQCAtMTU3NywyMSArMTU1OCwyNCBAQAogCXJldHVybiByZXRfdmFsOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9sb29wYmFja190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCitzdGF0aWMgaW50IGUxMDAwX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSkKIHsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCiAJLyogUEhZIGxvb3BiYWNrIGNhbm5vdCBiZSBwZXJmb3JtZWQgaWYgU29ML0lERVIKIAkgKiBzZXNzaW9ucyBhcmUgYWN0aXZlICovCi0JaWYgKGUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jaygmYWRhcHRlci0+aHcpKSB7CisJaWYgKGUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jayhodykpIHsKIAkJRFBSSU5USyhEUlYsIEVSUiwgIkNhbm5vdCBkbyBQSFkgbG9vcGJhY2sgdGVzdCAiCiAJCSAgICAgICAgIndoZW4gU29ML0lERVIgaXMgYWN0aXZlLlxuIik7CiAJCSpkYXRhID0gMDsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCgqZGF0YSA9IGUxMDAwX3NldHVwX2Rlc2NfcmluZ3MoYWRhcHRlcikpKQorCSpkYXRhID0gZTEwMDBfc2V0dXBfZGVzY19yaW5ncyhhZGFwdGVyKTsKKwlpZiAoKmRhdGEpCiAJCWdvdG8gb3V0OwotCWlmICgoKmRhdGEgPSBlMTAwMF9zZXR1cF9sb29wYmFja190ZXN0KGFkYXB0ZXIpKSkKKwkqZGF0YSA9IGUxMDAwX3NldHVwX2xvb3BiYWNrX3Rlc3QoYWRhcHRlcik7CisJaWYgKCpkYXRhKQogCQlnb3RvIGVycl9sb29wYmFjazsKIAkqZGF0YSA9IGUxMDAwX3J1bl9sb29wYmFja190ZXN0KGFkYXB0ZXIpOwogCWUxMDAwX2xvb3BiYWNrX2NsZWFudXAoYWRhcHRlcik7CkBAIC0xNjAyLDM4ICsxNTg2LDM3IEBACiAJcmV0dXJuICpkYXRhOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9saW5rX3Rlc3Qoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSkKK3N0YXRpYyBpbnQgZTEwMDBfbGlua190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAkqZGF0YSA9IDA7Ci0JaWYgKGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKKwlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKIAkJaW50IGkgPSAwOwotCQlhZGFwdGVyLT5ody5zZXJkZXNfbGlua19kb3duID0gdHJ1ZTsKKwkJaHctPnNlcmRlc19saW5rX2Rvd24gPSB0cnVlOwogCiAJCS8qIE9uIHNvbWUgYmxhZGUgc2VydmVyIGRlc2lnbnMsIGxpbmsgZXN0YWJsaXNobWVudAogCQkgKiBjb3VsZCB0YWtlIGFzIGxvbmcgYXMgMi0zIG1pbnV0ZXMgKi8KIAkJZG8gewotCQkJZTEwMDBfY2hlY2tfZm9yX2xpbmsoJmFkYXB0ZXItPmh3KTsKLQkJCWlmICghYWRhcHRlci0+aHcuc2VyZGVzX2xpbmtfZG93bikKKwkJCWUxMDAwX2NoZWNrX2Zvcl9saW5rKGh3KTsKKwkJCWlmICghaHctPnNlcmRlc19saW5rX2Rvd24pCiAJCQkJcmV0dXJuICpkYXRhOwogCQkJbXNsZWVwKDIwKTsKIAkJfSB3aGlsZSAoaSsrIDwgMzc1MCk7CiAKIAkJKmRhdGEgPSAxOwogCX0gZWxzZSB7Ci0JCWUxMDAwX2NoZWNrX2Zvcl9saW5rKCZhZGFwdGVyLT5odyk7Ci0JCWlmIChhZGFwdGVyLT5ody5hdXRvbmVnKSAgLyogaWYgYXV0b19uZWcgaXMgc2V0IHdhaXQgZm9yIGl0ICovCisJCWUxMDAwX2NoZWNrX2Zvcl9saW5rKGh3KTsKKwkJaWYgKGh3LT5hdXRvbmVnKSAgLyogaWYgYXV0b19uZWcgaXMgc2V0IHdhaXQgZm9yIGl0ICovCiAJCQltc2xlZXAoNDAwMCk7CiAKLQkJaWYgKCEoRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0xVKSkgeworCQlpZiAoIShlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpKSB7CiAJCQkqZGF0YSA9IDE7CiAJCX0KIAl9CiAJcmV0dXJuICpkYXRhOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgc3NldCkKK3N0YXRpYyBpbnQgZTEwMDBfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCiB7CiAJc3dpdGNoIChzc2V0KSB7CiAJY2FzZSBFVEhfU1NfVEVTVDoKQEAgLTE2NDUsMTEgKzE2MjgsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJICAgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRoX3Rlc3QsIHU2NCAqZGF0YSkKK3N0YXRpYyB2b2lkIGUxMDAwX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJYm9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwogCiAJc2V0X2JpdChfX0UxMDAwX1RFU1RJTkcsICZhZGFwdGVyLT5mbGFncyk7CkBAIC0xNjU3LDkgKzE2NDAsOSBAQAogCQkvKiBPZmZsaW5lIHRlc3RzICovCiAKIAkJLyogc2F2ZSBzcGVlZCwgZHVwbGV4LCBhdXRvbmVnIHNldHRpbmdzICovCi0JCXUxNiBhdXRvbmVnX2FkdmVydGlzZWQgPSBhZGFwdGVyLT5ody5hdXRvbmVnX2FkdmVydGlzZWQ7Ci0JCXU4IGZvcmNlZF9zcGVlZF9kdXBsZXggPSBhZGFwdGVyLT5ody5mb3JjZWRfc3BlZWRfZHVwbGV4OwotCQl1OCBhdXRvbmVnID0gYWRhcHRlci0+aHcuYXV0b25lZzsKKwkJdTE2IGF1dG9uZWdfYWR2ZXJ0aXNlZCA9IGh3LT5hdXRvbmVnX2FkdmVydGlzZWQ7CisJCXU4IGZvcmNlZF9zcGVlZF9kdXBsZXggPSBody0+Zm9yY2VkX3NwZWVkX2R1cGxleDsKKwkJdTggYXV0b25lZyA9IGh3LT5hdXRvbmVnOwogCiAJCURQUklOVEsoSFcsIElORk8sICJvZmZsaW5lIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCkBAIC0xNjkyLDkgKzE2NzUsOSBAQAogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAogCQkvKiByZXN0b3JlIHNwZWVkLCBkdXBsZXgsIGF1dG9uZWcgc2V0dGluZ3MgKi8KLQkJYWRhcHRlci0+aHcuYXV0b25lZ19hZHZlcnRpc2VkID0gYXV0b25lZ19hZHZlcnRpc2VkOwotCQlhZGFwdGVyLT5ody5mb3JjZWRfc3BlZWRfZHVwbGV4ID0gZm9yY2VkX3NwZWVkX2R1cGxleDsKLQkJYWRhcHRlci0+aHcuYXV0b25lZyA9IGF1dG9uZWc7CisJCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPSBhdXRvbmVnX2FkdmVydGlzZWQ7CisJCWh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID0gZm9yY2VkX3NwZWVkX2R1cGxleDsKKwkJaHctPmF1dG9uZWcgPSBhdXRvbmVnOwogCiAJCWUxMDAwX3Jlc2V0KGFkYXB0ZXIpOwogCQljbGVhcl9iaXQoX19FMTAwMF9URVNUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOwpAQCAtMTcxNyw3ICsxNzAwLDggQEAKIAltc2xlZXBfaW50ZXJydXB0aWJsZSg0ICogMTAwMCk7CiB9CiAKLXN0YXRpYyBpbnQgZTEwMDBfd29sX2V4Y2x1c2lvbihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQorc3RhdGljIGludCBlMTAwMF93b2xfZXhjbHVzaW9uKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCByZXR2YWwgPSAxOyAvKiBmYWlsIGJ5IGRlZmF1bHQgKi8KQEAgLTE3NDIsNyArMTcyNiw3IEBACiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9TRVJERVM6CiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9DT1BQRVI6CiAJCS8qIFdha2UgZXZlbnRzIG5vdCBzdXBwb3J0ZWQgb24gcG9ydCBCICovCi0JCWlmIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpIHsKKwkJaWYgKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpIHsKIAkJCXdvbC0+c3VwcG9ydGVkID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNzY2LDcgKzE3NTAsNyBAQAogCQkvKiBkdWFsIHBvcnQgY2FyZHMgb25seSBzdXBwb3J0IFdvTCBvbiBwb3J0IEEgZnJvbSBub3cgb24KIAkJICogdW5sZXNzIGl0IHdhcyBlbmFibGVkIGluIHRoZSBlZXByb20gZm9yIHBvcnQgQgogCQkgKiBzbyBleGNsdWRlIEZVTkNfMSBwb3J0cyBmcm9tIGhhdmluZyBXb0wgZW5hYmxlZCAqLwotCQlpZiAoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xICYmCisJCWlmIChlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xICYmCiAJCSAgICAhYWRhcHRlci0+ZWVwcm9tX3dvbCkgewogCQkJd29sLT5zdXBwb3J0ZWQgPSAwOwogCQkJYnJlYWs7CkBAIC0xNzc4LDEwICsxNzYyLDExIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQorc3RhdGljIHZvaWQgZTEwMDBfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfVUNBU1QgfCBXQUtFX01DQVNUIHwKIAkgICAgICAgICAgICAgICAgIFdBS0VfQkNBU1QgfCBXQUtFX01BR0lDOwpAQCAtMTc5Myw3ICsxNzc4LDcgQEAKIAkJcmV0dXJuOwogCiAJLyogYXBwbHkgYW55IHNwZWNpZmljIHVuc3VwcG9ydGVkIG1hc2tzIGhlcmUgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPmh3LmRldmljZV9pZCkgeworCXN3aXRjaCAoaHctPmRldmljZV9pZCkgewogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfUVVBRF9DT1BQRVJfS1NQMzoKIAkJLyogS1NQMyBkb2VzIG5vdCBzdXBwcG9ydCBVQ0FTVCB3YWtlLXVwcyAqLwogCQl3b2wtPnN1cHBvcnRlZCAmPSB+V0FLRV9VQ0FTVDsKQEAgLTE4MTgsOCArMTgwMyw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3N0YXRpYyBpbnQgZTEwMDBfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0xODYzLDYxICsxODQ3LDYwIEBACiAvKiBiaXQgZGVmaW5lcyBmb3IgYWRhcHRlci0+bGVkX3N0YXR1cyAqLwogI2RlZmluZSBFMTAwMF9MRURfT04JCTAKIAotc3RhdGljIHZvaWQKLWUxMDAwX2xlZF9ibGlua19jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBlMTAwMF9sZWRfYmxpbmtfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBlMTAwMF9hZGFwdGVyICopIGRhdGE7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCWlmICh0ZXN0X2FuZF9jaGFuZ2VfYml0KEUxMDAwX0xFRF9PTiwgJmFkYXB0ZXItPmxlZF9zdGF0dXMpKQotCQllMTAwMF9sZWRfb2ZmKCZhZGFwdGVyLT5odyk7CisJCWUxMDAwX2xlZF9vZmYoaHcpOwogCWVsc2UKLQkJZTEwMDBfbGVkX29uKCZhZGFwdGVyLT5odyk7CisJCWUxMDAwX2xlZF9vbihodyk7CiAKIAltb2RfdGltZXIoJmFkYXB0ZXItPmJsaW5rX3RpbWVyLCBqaWZmaWVzICsgRTEwMDBfSURfSU5URVJWQUwpOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBlMTAwMF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCiAJaWYgKCFkYXRhKQogCQlkYXRhID0gSU5UX01BWDsKIAotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxKSB7CisJaWYgKGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxKSB7CiAJCWlmICghYWRhcHRlci0+YmxpbmtfdGltZXIuZnVuY3Rpb24pIHsKIAkJCWluaXRfdGltZXIoJmFkYXB0ZXItPmJsaW5rX3RpbWVyKTsKIAkJCWFkYXB0ZXItPmJsaW5rX3RpbWVyLmZ1bmN0aW9uID0gZTEwMDBfbGVkX2JsaW5rX2NhbGxiYWNrOwotCQkJYWRhcHRlci0+YmxpbmtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCQkJYWRhcHRlci0+YmxpbmtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7CiAJCX0KLQkJZTEwMDBfc2V0dXBfbGVkKCZhZGFwdGVyLT5odyk7CisJCWUxMDAwX3NldHVwX2xlZChodyk7CiAJCW1vZF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwogCQltc2xlZXBfaW50ZXJydXB0aWJsZShkYXRhICogMTAwMCk7CiAJCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5ibGlua190aW1lcik7Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWZlKSB7CisJfSBlbHNlIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lmZSkgewogCQlpZiAoIWFkYXB0ZXItPmJsaW5rX3RpbWVyLmZ1bmN0aW9uKSB7CiAJCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5ibGlua190aW1lcik7CiAJCQlhZGFwdGVyLT5ibGlua190aW1lci5mdW5jdGlvbiA9IGUxMDAwX2xlZF9ibGlua19jYWxsYmFjazsKLQkJCWFkYXB0ZXItPmJsaW5rX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKKwkJCWFkYXB0ZXItPmJsaW5rX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyOwogCQl9CiAJCW1vZF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwogCQltc2xlZXBfaW50ZXJydXB0aWJsZShkYXRhICogMTAwMCk7CiAJCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5ibGlua190aW1lcik7CiAJCWUxMDAwX3dyaXRlX3BoeV9yZWcoJihhZGFwdGVyLT5odyksIElGRV9QSFlfU1BFQ0lBTF9DT05UUk9MX0xFRCwgMCk7CiAJfSBlbHNlIHsKLQkJZTEwMDBfYmxpbmtfbGVkX3N0YXJ0KCZhZGFwdGVyLT5odyk7CisJCWUxMDAwX2JsaW5rX2xlZF9zdGFydChodyk7CiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKIAl9CiAKLQllMTAwMF9sZWRfb2ZmKCZhZGFwdGVyLT5odyk7CisJZTEwMDBfbGVkX29mZihodyk7CiAJY2xlYXJfYml0KEUxMDAwX0xFRF9PTiwgJmFkYXB0ZXItPmxlZF9zdGF0dXMpOwotCWUxMDAwX2NsZWFudXBfbGVkKCZhZGFwdGVyLT5odyk7CisJZTEwMDBfY2xlYW51cF9sZWQoaHcpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWUxMDAwX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBpbnQgZTEwMDBfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQpAQCAtMTkyNSw5ICsxOTA4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCXN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKQorc3RhdGljIHZvaWQgZTEwMDBfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBpOwpAQCAtMTk0MSw4ICsxOTIzLDggQEAKIC8qCUJVR19PTihpICE9IEUxMDAwX1NUQVRTX0xFTik7ICovCiB9CiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKK3N0YXRpYyB2b2lkIGUxMDAwX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQsCisJCQkgICAgICB1OCAqZGF0YSkKIHsKIAl1OCAqcCA9IGRhdGE7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwppbmRleCA5YTRiNmNiLi45ZDZlZGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKQEAgLTQyLDQ4ICs0Miw2NSBAQAogCiBzdGF0aWMgdTggZTEwMDBfYXJjX3N1YnN5c3RlbV92YWxpZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIHMzMiBlMTAwMF9jaGVja19wb2xhcml0eShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBlMTAwMF9yZXZfcG9sYXJpdHkgKnBvbGFyaXR5KTsKK3N0YXRpYyBzMzIgZTEwMDBfY2hlY2tfcG9sYXJpdHkoc3RydWN0IGUxMDAwX2h3ICpodywKKwkJCQllMTAwMF9yZXZfcG9sYXJpdHkgKnBvbGFyaXR5KTsKIHN0YXRpYyB2b2lkIGUxMDAwX2NsZWFyX2h3X2NudHJzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHZvaWQgZTEwMDBfY2xlYXJfdmZ0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfY29tbWl0X3NoYWRvd19yYW0oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX2NvbmZpZ19kc3BfYWZ0ZXJfbGlua19jaGFuZ2Uoc3RydWN0IGUxMDAwX2h3ICpodywKLQkJCQkJCSAgYm9vbCBsaW5rX3VwKTsKKwkJCQkJICAgICAgYm9vbCBsaW5rX3VwKTsKIHN0YXRpYyBzMzIgZTEwMDBfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXAoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX2RldGVjdF9naWdfcGh5KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBlMTAwMF9lcmFzZV9pY2g4XzRrX3NlZ21lbnQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGJhbmspOwogc3RhdGljIHMzMiBlMTAwMF9nZXRfYXV0b19yZF9kb25lKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIHMzMiBlMTAwMF9nZXRfY2FibGVfbGVuZ3RoKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiAqbWluX2xlbmd0aCwgdTE2ICptYXhfbGVuZ3RoKTsKK3N0YXRpYyBzMzIgZTEwMDBfZ2V0X2NhYmxlX2xlbmd0aChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgKm1pbl9sZW5ndGgsCisJCQkJICB1MTYgKm1heF9sZW5ndGgpOwogc3RhdGljIHMzMiBlMTAwMF9nZXRfaHdfZWVwcm9tX3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfZ2V0X3BoeV9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfZ2V0X3NvZnR3YXJlX2ZsYWcoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX2ljaDhfY3ljbGVfaW5pdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfaWNoOF9mbGFzaF9jeWNsZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgdGltZW91dCk7CiBzdGF0aWMgczMyIGUxMDAwX2lkX2xlZF9pbml0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIHMzMiBlMTAwMF9pbml0X2xjZF9mcm9tX252bV9jb25maWdfcmVnaW9uKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBjbmZfYmFzZV9hZGRyLCB1MzIgY25mX3NpemUpOworc3RhdGljIHMzMiBlMTAwMF9pbml0X2xjZF9mcm9tX252bV9jb25maWdfcmVnaW9uKHN0cnVjdCBlMTAwMF9odyAqaHcsCisJCQkJCQkgdTMyIGNuZl9iYXNlX2FkZHIsCisJCQkJCQkgdTMyIGNuZl9zaXplKTsKIHN0YXRpYyBzMzIgZTEwMDBfaW5pdF9sY2RfZnJvbV9udm0oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgdm9pZCBlMTAwMF9pbml0X3J4X2FkZHJzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHZvaWQgZTEwMDBfaW5pdGlhbGl6ZV9oYXJkd2FyZV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIGJvb2wgZTEwMDBfaXNfb25ib2FyZF9udm1fZWVwcm9tKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBlMTAwMF9rdW1lcmFuX2xvY2tfbG9zc193b3JrYXJvdW5kKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBlMTAwMF9tbmdfZW5hYmxlX2hvc3RfaWYoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgczMyIGUxMDAwX21uZ19ob3N0X2lmX3dyaXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICpidWZmZXIsIHUxNiBsZW5ndGgsIHUxNiBvZmZzZXQsIHU4ICpzdW0pOwotc3RhdGljIHMzMiBlMTAwMF9tbmdfd3JpdGVfY21kX2hlYWRlcihzdHJ1Y3QgZTEwMDBfaHcqIGh3LCBzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfY29tbWFuZF9oZWFkZXIqIGhkcik7CitzdGF0aWMgczMyIGUxMDAwX21uZ19ob3N0X2lmX3dyaXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICpidWZmZXIsIHUxNiBsZW5ndGgsCisJCQkJICAgdTE2IG9mZnNldCwgdTggKnN1bSk7CitzdGF0aWMgczMyIGUxMDAwX21uZ193cml0ZV9jbWRfaGVhZGVyKHN0cnVjdCBlMTAwMF9odyogaHcsCisJCQkJICAgICAgc3RydWN0IGUxMDAwX2hvc3RfbW5nX2NvbW1hbmRfaGVhZGVyCisJCQkJICAgICAgKmhkcik7CiBzdGF0aWMgczMyIGUxMDAwX21uZ193cml0ZV9jb21taXQoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgczMyIGUxMDAwX3BoeV9pZmVfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbyk7Ci1zdGF0aWMgczMyIGUxMDAwX3BoeV9pZ3BfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbyk7Ci1zdGF0aWMgczMyIGUxMDAwX3JlYWRfZWVwcm9tX2VlcmQoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwotc3RhdGljIHMzMiBlMTAwMF93cml0ZV9lZXByb21fZWV3cihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3BoeV9pZmVfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywKKwkJCQkgIHN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5X2luZm8pOworc3RhdGljIHMzMiBlMTAwMF9waHlfaWdwX2dldF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcsCisJCQkJICBzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gKnBoeV9pbmZvKTsKK3N0YXRpYyBzMzIgZTEwMDBfcmVhZF9lZXByb21fZWVyZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCisJCQkJICB1MTYgKmRhdGEpOworc3RhdGljIHMzMiBlMTAwMF93cml0ZV9lZXByb21fZWV3cihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCisJCQkJICAgdTE2ICpkYXRhKTsKIHN0YXRpYyBzMzIgZTEwMDBfcG9sbF9lZXJkX2Vld3JfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBpbnQgZWVyZCk7Ci1zdGF0aWMgczMyIGUxMDAwX3BoeV9tODhfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbyk7CitzdGF0aWMgczMyIGUxMDAwX3BoeV9tODhfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywKKwkJCQkgIHN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5X2luZm8pOwogc3RhdGljIHZvaWQgZTEwMDBfcHV0X2h3X2VlcHJvbV9zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX3JlYWRfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTggKmRhdGEpOwotc3RhdGljIHMzMiBlMTAwMF92ZXJpZnlfd3JpdGVfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTggYnl0ZSk7CitzdGF0aWMgczMyIGUxMDAwX3ZlcmlmeV93cml0ZV9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LAorCQkJCQl1OCBieXRlKTsKIHN0YXRpYyBzMzIgZTEwMDBfd3JpdGVfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTggYnl0ZSk7CiBzdGF0aWMgczMyIGUxMDAwX3JlYWRfaWNoOF93b3JkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTE2ICpkYXRhKTsKLXN0YXRpYyBzMzIgZTEwMDBfcmVhZF9pY2g4X2RhdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LCB1MzIgc2l6ZSwgdTE2ICpkYXRhKTsKLXN0YXRpYyBzMzIgZTEwMDBfd3JpdGVfaWNoOF9kYXRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTMyIHNpemUsIHUxNiBkYXRhKTsKLXN0YXRpYyBzMzIgZTEwMDBfcmVhZF9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSk7Ci1zdGF0aWMgczMyIGUxMDAwX3dyaXRlX2VlcHJvbV9pY2g4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiB3b3JkcywgdTE2ICpkYXRhKTsKK3N0YXRpYyBzMzIgZTEwMDBfcmVhZF9pY2g4X2RhdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LCB1MzIgc2l6ZSwKKwkJCQl1MTYgKmRhdGEpOworc3RhdGljIHMzMiBlMTAwMF93cml0ZV9pY2g4X2RhdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LCB1MzIgc2l6ZSwKKwkJCQkgdTE2IGRhdGEpOworc3RhdGljIHMzMiBlMTAwMF9yZWFkX2VlcHJvbV9pY2g4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiB3b3JkcywKKwkJCQkgIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3dyaXRlX2VlcHJvbV9pY2g4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiB3b3JkcywKKwkJCQkgICB1MTYgKmRhdGEpOwogc3RhdGljIHZvaWQgZTEwMDBfcmVsZWFzZV9zb2Z0d2FyZV9mbGFnKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBlMTAwMF9zZXRfZDNfbHBsdV9zdGF0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGFjdGl2ZSk7CiBzdGF0aWMgczMyIGUxMDAwX3NldF9kMF9scGx1X3N0YXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgYWN0aXZlKTsKQEAgLTEwMSwyMyArMTE4LDIxIEBACiBzdGF0aWMgdm9pZCBlMTAwMF9yYWlzZV9tZGlfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqY3RybCk7CiBzdGF0aWMgdm9pZCBlMTAwMF9sb3dlcl9tZGlfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqY3RybCk7CiBzdGF0aWMgdm9pZCBlMTAwMF9zaGlmdF9vdXRfbWRpX2JpdHMoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNvdW50KTsKKwkJCQkgICAgIHUxNiBjb3VudCk7CiBzdGF0aWMgdTE2IGUxMDAwX3NoaWZ0X2luX21kaV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBlMTAwMF9waHlfcmVzZXRfZHNwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBlMTAwMF93cml0ZV9lZXByb21fc3BpKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKTsKLXN0YXRpYyBzMzIgZTEwMDBfd3JpdGVfZWVwcm9tX21pY3Jvd2lyZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3dyaXRlX2VlcHJvbV9taWNyb3dpcmUoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogc3RhdGljIHMzMiBlMTAwMF9zcGlfZWVwcm9tX3JlYWR5KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHZvaWQgZTEwMDBfcmFpc2VfZWVfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqZWVjZCk7CiBzdGF0aWMgdm9pZCBlMTAwMF9sb3dlcl9lZV9jbGsoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICplZWNkKTsKLXN0YXRpYyB2b2lkIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNvdW50KTsKK3N0YXRpYyB2b2lkIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBkYXRhLCB1MTYgY291bnQpOwogc3RhdGljIHMzMiBlMTAwMF93cml0ZV9waHlfcmVnX2V4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWdfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHBoeV9kYXRhKTsKKwkJCQkgIHUxNiBwaHlfZGF0YSk7CiBzdGF0aWMgczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19leChzdHJ1Y3QgZTEwMDBfaHcgKmh3LHUzMiByZWdfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKnBoeV9kYXRhKTsKKwkJCQkgdTE2ICpwaHlfZGF0YSk7CiBzdGF0aWMgdTE2IGUxMDAwX3NoaWZ0X2luX2VlX2JpdHMoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IGNvdW50KTsKIHN0YXRpYyBzMzIgZTEwMDBfYWNxdWlyZV9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgdm9pZCBlMTAwMF9yZWxlYXNlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKQEAgLTEyNyw4ICsxNDIsNyBAQAogc3RhdGljIHMzMiBlMTAwMF9zZXRfcGh5X21vZGUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX2hvc3RfaWZfcmVhZF9jb29raWUoc3RydWN0IGUxMDAwX2h3ICpodywgdTggKmJ1ZmZlcik7CiBzdGF0aWMgdTggZTEwMDBfY2FsY3VsYXRlX21uZ19jaGVja3N1bShjaGFyICpidWZmZXIsIHUzMiBsZW5ndGgpOwotc3RhdGljIHMzMiBlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTBfMTAwKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBkdXBsZXgpOworc3RhdGljIHMzMiBlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTBfMTAwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBkdXBsZXgpOwogc3RhdGljIHMzMiBlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAogLyogSUdQIGNhYmxlIGxlbmd0aCB0YWJsZSAqLwpAQCAtMTU5LDggKzE3Myw3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX3NldF9waHlfdHlwZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9zZXRfcGh5X3R5cGUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBERUJVR0ZVTkMoImUxMDAwX3NldF9waHlfdHlwZSIpOwogCkBAIC0yMTAsOCArMjIzLDcgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWUxMDAwX3BoeV9pbml0X3NjcmlwdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHZvaWQgZTEwMDBfcGh5X2luaXRfc2NyaXB0KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIHJldF92YWw7CiAgICAgdTE2IHBoeV9zYXZlZF9kYXRhOwpAQCAtMzA2LDggKzMxOCw3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfc2V0X21hY190eXBlKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfc2V0X21hY190eXBlKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAJREVCVUdGVU5DKCJlMTAwMF9zZXRfbWFjX3R5cGUiKTsKIApAQCAtNDc0LDggKzQ4NSw3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotZTEwMDBfc2V0X21lZGlhX3R5cGUoc3RydWN0IGUxMDAwX2h3ICpodykKK3ZvaWQgZTEwMDBfc2V0X21lZGlhX3R5cGUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MzIgc3RhdHVzOwogCkBAIC01MTAsNyArNTIwLDcgQEAKICAgICAgICAgICAgIGh3LT5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN0YXR1cyA9IEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpOworICAgICAgICAgICAgc3RhdHVzID0gZXIzMihTVEFUVVMpOwogICAgICAgICAgICAgaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19UQklNT0RFKSB7CiAgICAgICAgICAgICAgICAgaHctPm1lZGlhX3R5cGUgPSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyOwogICAgICAgICAgICAgICAgIC8qIHRiaV9jb21wYXRpYmlsaXR5IG5vdCB2YWxpZCBvbiBmaWJlciAqLwpAQCAtNTI4LDggKzUzOCw3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfcmVzZXRfaHcoc3RydWN0IGUxMDAwX2h3ICpodykKK3MzMiBlMTAwMF9yZXNldF9odyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBjdHJsOwogICAgIHUzMiBjdHJsX2V4dDsKQEAgLTU1OSwxNSArNTY4LDE1IEBACiAKICAgICAvKiBDbGVhciBpbnRlcnJ1cHQgbWFzayB0byBzdG9wIGJvYXJkIGZyb20gZ2VuZXJhdGluZyBpbnRlcnJ1cHRzICovCiAgICAgREVCVUdPVVQoIk1hc2tpbmcgb2ZmIGFsbCBpbnRlcnJ1cHRzXG4iKTsKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIElNQywgMHhmZmZmZmZmZik7CisgICAgZXczMihJTUMsIDB4ZmZmZmZmZmYpOwogCiAgICAgLyogRGlzYWJsZSB0aGUgVHJhbnNtaXQgYW5kIFJlY2VpdmUgdW5pdHMuICBUaGVuIGRlbGF5IHRvIGFsbG93CiAgICAgICogYW55IHBlbmRpbmcgdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlIGJlZm9yZSB3ZSBoaXQgdGhlIE1BQyB3aXRoCiAgICAgICogdGhlIGdsb2JhbCByZXNldC4KICAgICAgKi8KLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIDApOwotICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVENUTCwgRTEwMDBfVENUTF9QU1ApOwotICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICBldzMyKFJDVEwsIDApOworICAgIGV3MzIoVENUTCwgRTEwMDBfVENUTF9QU1ApOworICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAKICAgICAvKiBUaGUgdGJpX2NvbXBhdGliaWxpdHlfb24gRmxhZyBtdXN0IGJlIGNsZWFyZWQgd2hlbiBSY3RsIGlzIGNsZWFyZWQuICovCiAgICAgaHctPnRiaV9jb21wYXRpYmlsaXR5X29uID0gZmFsc2U7CkBAIC01NzcsMTEgKzU4NiwxMSBAQAogICAgICAqLwogICAgIG1zbGVlcCgxMCk7CiAKLSAgICBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOworICAgIGN0cmwgPSBlcjMyKENUUkwpOwogCiAgICAgLyogTXVzdCByZXNldCB0aGUgUEhZIGJlZm9yZSByZXNldHRpbmcgdGhlIE1BQyAqLwogICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQxKSB8fCAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3KSkgewotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIChjdHJsIHwgRTEwMDBfQ1RSTF9QSFlfUlNUKSk7CisgICAgICAgIGV3MzIoQ1RSTCwgKGN0cmwgfCBFMTAwMF9DVFJMX1BIWV9SU1QpKTsKICAgICAgICAgbXNsZWVwKDUpOwogICAgIH0KIApAQCAtNTkwLDEyICs1OTksMTIgQEAKICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTczKSB7CiAgICAgICAgIHRpbWVvdXQgPSAxMDsKIAotICAgICAgICBleHRjbmZfY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFWFRDTkZfQ1RSTCk7CisgICAgICAgIGV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7CiAgICAgICAgIGV4dGNuZl9jdHJsIHw9IEUxMDAwX0VYVENORl9DVFJMX01ESU9fU1dfT1dORVJTSElQOwogCiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKLSAgICAgICAgICAgIGV4dGNuZl9jdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVYVENORl9DVFJMKTsKKyAgICAgICAgICAgIGV3MzIoRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKKyAgICAgICAgICAgIGV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7CiAKICAgICAgICAgICAgIGlmIChleHRjbmZfY3RybCAmIEUxMDAwX0VYVENORl9DVFJMX01ESU9fU1dfT1dORVJTSElQKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjEwLDkgKzYxOSw5IEBACiAgICAgLyogV29ya2Fyb3VuZCBmb3IgSUNIOCBiaXQgY29ycnVwdGlvbiBpc3N1ZSBpbiBGSUZPIG1lbW9yeSAqLwogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewogICAgICAgICAvKiBTZXQgVHggYW5kIFJ4IGJ1ZmZlciBhbGxvY2F0aW9uIHRvIDhrIGFwaWVjZS4gKi8KLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBQQkEsIEUxMDAwX1BCQV84Syk7CisgICAgICAgIGV3MzIoUEJBLCBFMTAwMF9QQkFfOEspOwogICAgICAgICAvKiBTZXQgUGFja2V0IEJ1ZmZlciBTaXplIHRvIDE2ay4gKi8KLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBQQlMsIEUxMDAwX1BCU18xNkspOworICAgICAgICBldzMyKFBCUywgRTEwMDBfUEJTXzE2Syk7CiAgICAgfQogCiAgICAgLyogSXNzdWUgYSBnbG9iYWwgcmVzZXQgdG8gdGhlIE1BQy4gIFRoaXMgd2lsbCByZXNldCB0aGUgY2hpcCdzCkBAIC02MzYsNyArNjQ1LDcgQEAKICAgICAgICAgY2FzZSBlMTAwMF84MjU0NV9yZXZfMzoKICAgICAgICAgY2FzZSBlMTAwMF84MjU0Nl9yZXZfMzoKICAgICAgICAgICAgIC8qIFJlc2V0IGlzIHBlcmZvcm1lZCBvbiBhIHNoYWRvdyBvZiB0aGUgY29udHJvbCByZWdpc3RlciAqLwotICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0RVUCwgKGN0cmwgfCBFMTAwMF9DVFJMX1JTVCkpOworICAgICAgICAgICAgZXczMihDVFJMX0RVUCwgKGN0cmwgfCBFMTAwMF9DVFJMX1JTVCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZTEwMDBfaWNoOGxhbjoKICAgICAgICAgICAgIGlmICghaHctPnBoeV9yZXNldF9kaXNhYmxlICYmCkBAIC02NDksMTEgKzY1OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBlMTAwMF9nZXRfc29mdHdhcmVfZmxhZyhodyk7Ci0gICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIChjdHJsIHwgRTEwMDBfQ1RSTF9SU1QpKTsKKyAgICAgICAgICAgIGV3MzIoQ1RSTCwgKGN0cmwgfCBFMTAwMF9DVFJMX1JTVCkpOwogICAgICAgICAgICAgbXNsZWVwKDUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIChjdHJsIHwgRTEwMDBfQ1RSTF9SU1QpKTsKKyAgICAgICAgICAgIGV3MzIoQ1RSTCwgKGN0cmwgfCBFMTAwMF9DVFJMX1JTVCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC02NjgsMTAgKzY3NywxMCBAQAogICAgICAgICBjYXNlIGUxMDAwXzgyNTQ0OgogICAgICAgICAgICAgLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi8KICAgICAgICAgICAgIHVkZWxheSgxMCk7Ci0gICAgICAgICAgICBjdHJsX2V4dCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMX0VYVCk7CisgICAgICAgICAgICBjdHJsX2V4dCA9IGVyMzIoQ1RSTF9FWFQpOwogICAgICAgICAgICAgY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfRUVfUlNUOwotICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgY3RybF9leHQpOwotICAgICAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgICAgICAgICAgZXczMihDVFJMX0VYVCwgY3RybF9leHQpOworICAgICAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICAgICAgICAgIC8qIFdhaXQgZm9yIEVFUFJPTSByZWxvYWQgKi8KICAgICAgICAgICAgIG1zbGVlcCgyKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjg1LDEwICs2OTQsMTAgQEAKICAgICAgICAgY2FzZSBlMTAwMF84MjU3MzoKICAgICAgICAgICAgIGlmICghZTEwMDBfaXNfb25ib2FyZF9udm1fZWVwcm9tKGh3KSkgewogICAgICAgICAgICAgICAgIHVkZWxheSgxMCk7Ci0gICAgICAgICAgICAgICAgY3RybF9leHQgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTF9FWFQpOworICAgICAgICAgICAgICAgIGN0cmxfZXh0ID0gZXIzMihDVFJMX0VYVCk7CiAgICAgICAgICAgICAgICAgY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfRUVfUlNUOwotICAgICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTF9FWFQsIGN0cmxfZXh0KTsKLSAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgICAgICAgICAgZXczMihDVFJMX0VYVCwgY3RybF9leHQpOworICAgICAgICAgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgZGVmYXVsdDoKQEAgLTcwMSwyNyArNzEwLDI3IEBACiAKICAgICAvKiBEaXNhYmxlIEhXIEFSUHMgb24gQVNGIGVuYWJsZWQgYWRhcHRlcnMgKi8KICAgICBpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQwICYmIGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0N19yZXZfMikgewotICAgICAgICBtYW5jID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1BTkMpOworICAgICAgICBtYW5jID0gZXIzMihNQU5DKTsKICAgICAgICAgbWFuYyAmPSB+KEUxMDAwX01BTkNfQVJQX0VOKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBNQU5DLCBtYW5jKTsKKyAgICAgICAgZXczMihNQU5DLCBtYW5jKTsKICAgICB9CiAKICAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MSkgfHwgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykpIHsKICAgICAgICAgZTEwMDBfcGh5X2luaXRfc2NyaXB0KGh3KTsKIAogICAgICAgICAvKiBDb25maWd1cmUgYWN0aXZpdHkgTEVEIGFmdGVyIFBIWSByZXNldCAqLwotICAgICAgICBsZWRfY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBMRURDVEwpOworICAgICAgICBsZWRfY3RybCA9IGVyMzIoTEVEQ1RMKTsKICAgICAgICAgbGVkX2N0cmwgJj0gSUdQX0FDVElWSVRZX0xFRF9NQVNLOwogICAgICAgICBsZWRfY3RybCB8PSAoSUdQX0FDVElWSVRZX0xFRF9FTkFCTEUgfCBJR1BfTEVEM19NT0RFKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBMRURDVEwsIGxlZF9jdHJsKTsKKyAgICAgICAgZXczMihMRURDVEwsIGxlZF9jdHJsKTsKICAgICB9CiAKICAgICAvKiBDbGVhciBpbnRlcnJ1cHQgbWFzayB0byBzdG9wIGJvYXJkIGZyb20gZ2VuZXJhdGluZyBpbnRlcnJ1cHRzICovCiAgICAgREVCVUdPVVQoIk1hc2tpbmcgb2ZmIGFsbCBpbnRlcnJ1cHRzXG4iKTsKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIElNQywgMHhmZmZmZmZmZik7CisgICAgZXczMihJTUMsIDB4ZmZmZmZmZmYpOwogCiAgICAgLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cy4gKi8KLSAgICBpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKKyAgICBpY3IgPSBlcjMyKElDUik7CiAKICAgICAvKiBJZiBNV0kgd2FzIHByZXZpb3VzbHkgZW5hYmxlZCwgcmVlbmFibGUgaXQuICovCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0Ml9yZXYyXzApIHsKQEAgLTczMCw5ICs3MzksOSBAQAogICAgIH0KIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewotICAgICAgICB1MzIga2FiID0gRTEwMDBfUkVBRF9SRUcoaHcsIEtBQkdUWEQpOworICAgICAgICB1MzIga2FiID0gZXIzMihLQUJHVFhEKTsKICAgICAgICAga2FiIHw9IEUxMDAwX0tBQkdUWERfQkdTUUxCSUFTOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEtBQkdUWEQsIGthYik7CisgICAgICAgIGV3MzIoS0FCR1RYRCwga2FiKTsKICAgICB9CiAKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKQEAgLTc0Nyw4ICs3NTYsNyBAQAogICogVGhpcyBmdW5jdGlvbiBjb250YWlucyBoYXJkd2FyZSBsaW1pdGF0aW9uIHdvcmthcm91bmRzIGZvciBQQ0ktRSBhZGFwdGVycwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCi1lMTAwMF9pbml0aWFsaXplX2hhcmR3YXJlX2JpdHMoc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyB2b2lkIGUxMDAwX2luaXRpYWxpemVfaGFyZHdhcmVfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIGlmICgoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTcxKSAmJiAoIWh3LT5pbml0aWFsaXplX2h3X2JpdHNfZGlzYWJsZSkpIHsKICAgICAgICAgLyogU2V0dGluZ3MgY29tbW9uIHRvIGFsbCBQQ0ktZXhwcmVzcyBzaWxpY29uICovCkBAIC03NTgsMjIgKzc2NiwyMiBAQAogICAgICAgICB1MzIgcmVnX3R4ZGN0bCwgcmVnX3R4ZGN0bDE7CiAKICAgICAgICAgLyogbGluayBhdXRvbmVnb3RpYXRpb24vc3luYyB3b3JrYXJvdW5kcyAqLwotICAgICAgICByZWdfdGFyYzAgPSBFMTAwMF9SRUFEX1JFRyhodywgVEFSQzApOworICAgICAgICByZWdfdGFyYzAgPSBlcjMyKFRBUkMwKTsKICAgICAgICAgcmVnX3RhcmMwICY9IH4oKDEgPDwgMzApfCgxIDw8IDI5KXwoMSA8PCAyOCl8KDEgPDwgMjcpKTsKIAogICAgICAgICAvKiBFbmFibGUgbm90LWRvbmUgVFggZGVzY3JpcHRvciBjb3VudGluZyAqLwotICAgICAgICByZWdfdHhkY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRYRENUTCk7CisgICAgICAgIHJlZ190eGRjdGwgPSBlcjMyKFRYRENUTCk7CiAgICAgICAgIHJlZ190eGRjdGwgfD0gRTEwMDBfVFhEQ1RMX0NPVU5UX0RFU0M7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVFhEQ1RMLCByZWdfdHhkY3RsKTsKLSAgICAgICAgcmVnX3R4ZGN0bDEgPSBFMTAwMF9SRUFEX1JFRyhodywgVFhEQ1RMMSk7CisgICAgICAgIGV3MzIoVFhEQ1RMLCByZWdfdHhkY3RsKTsKKyAgICAgICAgcmVnX3R4ZGN0bDEgPSBlcjMyKFRYRENUTDEpOwogICAgICAgICByZWdfdHhkY3RsMSB8PSBFMTAwMF9UWERDVExfQ09VTlRfREVTQzsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBUWERDVEwxLCByZWdfdHhkY3RsMSk7CisgICAgICAgIGV3MzIoVFhEQ1RMMSwgcmVnX3R4ZGN0bDEpOwogCiAgICAgICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAgICAgICAgICAgICBjYXNlIGUxMDAwXzgyNTcxOgogICAgICAgICAgICAgY2FzZSBlMTAwMF84MjU3MjoKICAgICAgICAgICAgICAgICAvKiBDbGVhciBQSFkgVFggY29tcGF0aWJsZSBtb2RlIGJpdHMgKi8KLSAgICAgICAgICAgICAgICByZWdfdGFyYzEgPSBFMTAwMF9SRUFEX1JFRyhodywgVEFSQzEpOworICAgICAgICAgICAgICAgIHJlZ190YXJjMSA9IGVyMzIoVEFSQzEpOwogICAgICAgICAgICAgICAgIHJlZ190YXJjMSAmPSB+KCgxIDw8IDMwKXwoMSA8PCAyOSkpOwogCiAgICAgICAgICAgICAgICAgLyogbGluayBhdXRvbmVnb3RpYXRpb24vc3luYyB3b3JrYXJvdW5kcyAqLwpAQCAtNzgzLDI1ICs3OTEsMjUgQEAKICAgICAgICAgICAgICAgICByZWdfdGFyYzEgfD0gKCgxIDw8IDI2KXwoMSA8PCAyNSl8KDEgPDwgMjQpKTsKIAogICAgICAgICAgICAgICAgIC8qIE11bHRpcGxlIHJlYWQgYml0IGlzIHJldmVyc2VkIHBvbGFyaXR5ICovCi0gICAgICAgICAgICAgICAgcmVnX3RjdGwgPSBFMTAwMF9SRUFEX1JFRyhodywgVENUTCk7CisgICAgICAgICAgICAgICAgcmVnX3RjdGwgPSBlcjMyKFRDVEwpOwogICAgICAgICAgICAgICAgIGlmIChyZWdfdGN0bCAmIEUxMDAwX1RDVExfTVVMUikKICAgICAgICAgICAgICAgICAgICAgcmVnX3RhcmMxICY9IH4oMSA8PCAyOCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZWdfdGFyYzEgfD0gKDEgPDwgMjgpOwogCi0gICAgICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBUQVJDMSwgcmVnX3RhcmMxKTsKKyAgICAgICAgICAgICAgICBldzMyKFRBUkMxLCByZWdfdGFyYzEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBlMTAwMF84MjU3MzoKLSAgICAgICAgICAgICAgICByZWdfY3RybF9leHQgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTF9FWFQpOworICAgICAgICAgICAgICAgIHJlZ19jdHJsX2V4dCA9IGVyMzIoQ1RSTF9FWFQpOwogICAgICAgICAgICAgICAgIHJlZ19jdHJsX2V4dCAmPSB+KDEgPDwgMjMpOwogICAgICAgICAgICAgICAgIHJlZ19jdHJsX2V4dCB8PSAoMSA8PCAyMik7CiAKICAgICAgICAgICAgICAgICAvKiBUWCBieXRlIGNvdW50IGZpeCAqLwotICAgICAgICAgICAgICAgIHJlZ19jdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOworICAgICAgICAgICAgICAgIHJlZ19jdHJsID0gZXIzMihDVFJMKTsKICAgICAgICAgICAgICAgICByZWdfY3RybCAmPSB+KDEgPDwgMjkpOwogCi0gICAgICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgcmVnX2N0cmxfZXh0KTsKLSAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIHJlZ19jdHJsKTsKKyAgICAgICAgICAgICAgICBldzMyKENUUkxfRVhULCByZWdfY3RybF9leHQpOworICAgICAgICAgICAgICAgIGV3MzIoQ1RSTCwgcmVnX2N0cmwpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKICAgICAgICAgICAgICAgICAvKiBpbXByb3ZlIHNtYWxsIHBhY2tldCBwZXJmb3JtYWNlIGZvciBmaWJlci9zZXJkZXMgKi8KQEAgLTgxMSwxNCArODE5LDE0IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLyogTXVsdGlwbGUgcmVhZCBiaXQgaXMgcmV2ZXJzZWQgcG9sYXJpdHkgKi8KLSAgICAgICAgICAgICAgICByZWdfdGN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBUQ1RMKTsKLSAgICAgICAgICAgICAgICByZWdfdGFyYzEgPSBFMTAwMF9SRUFEX1JFRyhodywgVEFSQzEpOworICAgICAgICAgICAgICAgIHJlZ190Y3RsID0gZXIzMihUQ1RMKTsKKyAgICAgICAgICAgICAgICByZWdfdGFyYzEgPSBlcjMyKFRBUkMxKTsKICAgICAgICAgICAgICAgICBpZiAocmVnX3RjdGwgJiBFMTAwMF9UQ1RMX01VTFIpCiAgICAgICAgICAgICAgICAgICAgIHJlZ190YXJjMSAmPSB+KDEgPDwgMjgpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmVnX3RhcmMxIHw9ICgxIDw8IDI4KTsKIAotICAgICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVEFSQzEsIHJlZ190YXJjMSk7CisgICAgICAgICAgICAgICAgZXczMihUQVJDMSwgcmVnX3RhcmMxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgZTEwMDBfaWNoOGxhbjoKICAgICAgICAgICAgICAgICAvKiBSZWR1Y2UgY29uY3VycmVudCBETUEgcmVxdWVzdHMgdG8gMyBmcm9tIDQgKi8KQEAgLTgyNywxNiArODM1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAoaHctPmRldmljZV9pZCAhPSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTSkpKQogICAgICAgICAgICAgICAgICAgICByZWdfdGFyYzAgfD0gKCgxIDw8IDI5KXwoMSA8PCAyOCkpOwogCi0gICAgICAgICAgICAgICAgcmVnX2N0cmxfZXh0ID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkxfRVhUKTsKKyAgICAgICAgICAgICAgICByZWdfY3RybF9leHQgPSBlcjMyKENUUkxfRVhUKTsKICAgICAgICAgICAgICAgICByZWdfY3RybF9leHQgfD0gKDEgPDwgMjIpOwotICAgICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTF9FWFQsIHJlZ19jdHJsX2V4dCk7CisgICAgICAgICAgICAgICAgZXczMihDVFJMX0VYVCwgcmVnX2N0cmxfZXh0KTsKIAogICAgICAgICAgICAgICAgIC8qIHdvcmthcm91bmQgVFggaGFuZyB3aXRoIFRTTz1vbiAqLwogICAgICAgICAgICAgICAgIHJlZ190YXJjMCB8PSAoKDEgPDwgMjcpfCgxIDw8IDI2KXwoMSA8PCAyNCl8KDEgPDwgMjMpKTsKIAogICAgICAgICAgICAgICAgIC8qIE11bHRpcGxlIHJlYWQgYml0IGlzIHJldmVyc2VkIHBvbGFyaXR5ICovCi0gICAgICAgICAgICAgICAgcmVnX3RjdGwgPSBFMTAwMF9SRUFEX1JFRyhodywgVENUTCk7Ci0gICAgICAgICAgICAgICAgcmVnX3RhcmMxID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRBUkMxKTsKKyAgICAgICAgICAgICAgICByZWdfdGN0bCA9IGVyMzIoVENUTCk7CisgICAgICAgICAgICAgICAgcmVnX3RhcmMxID0gZXIzMihUQVJDMSk7CiAgICAgICAgICAgICAgICAgaWYgKHJlZ190Y3RsICYgRTEwMDBfVENUTF9NVUxSKQogICAgICAgICAgICAgICAgICAgICByZWdfdGFyYzEgJj0gfigxIDw8IDI4KTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC04NDUsMTMgKzg1MywxMyBAQAogICAgICAgICAgICAgICAgIC8qIHdvcmthcm91bmQgVFggaGFuZyB3aXRoIFRTTz1vbiAqLwogICAgICAgICAgICAgICAgIHJlZ190YXJjMSB8PSAoKDEgPDwgMzApfCgxIDw8IDI2KXwoMSA8PCAyNCkpOwogCi0gICAgICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBUQVJDMSwgcmVnX3RhcmMxKTsKKyAgICAgICAgICAgICAgICBldzMyKFRBUkMxLCByZWdfdGFyYzEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVEFSQzAsIHJlZ190YXJjMCk7CisgICAgICAgIGV3MzIoVEFSQzAsIHJlZ190YXJjMCk7CiAgICAgfQogfQogCkBAIC04NjYsOCArODc0LDcgQEAKICAqIGNvbmZpZ3VyYXRpb24gYW5kIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gQ2xlYXJzIGFsbCBvbi1jaGlwIGNvdW50ZXJzLiBMZWF2ZXMKICAqIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cyBkaXNhYmxlZCBhbmQgdW5pbml0aWFsaXplZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfaW5pdF9odyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorczMyIGUxMDAwX2luaXRfaHcoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MzIgY3RybDsKICAgICB1MzIgaTsKQEAgLTg4Myw5ICs4OTAsOSBAQAogICAgICAgICAoKGh3LT5yZXZpc2lvbl9pZCA8IDMpIHx8CiAgICAgICAgICAoKGh3LT5kZXZpY2VfaWQgIT0gRTEwMDBfREVWX0lEX0lDSDhfSUdQX01fQU1UKSAmJgogICAgICAgICAgIChody0+ZGV2aWNlX2lkICE9IEUxMDAwX0RFVl9JRF9JQ0g4X0lHUF9NKSkpKSB7Ci0gICAgICAgICAgICByZWdfZGF0YSA9IEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpOworICAgICAgICAgICAgcmVnX2RhdGEgPSBlcjMyKFNUQVRVUyk7CiAgICAgICAgICAgICByZWdfZGF0YSAmPSB+MHg4MDAwMDAwMDsKLSAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgU1RBVFVTLCByZWdfZGF0YSk7CisgICAgICAgICAgICBldzMyKFNUQVRVUywgcmVnX2RhdGEpOwogICAgIH0KIAogICAgIC8qIEluaXRpYWxpemUgSWRlbnRpZmljYXRpb24gTEVEICovCkBAIC05MDYsNyArOTEzLDcgQEAKICAgICAvKiBWRVQgaGFyZGNvZGVkIHRvIHN0YW5kYXJkIHZhbHVlIGFuZCBWRlRBIHJlbW92ZWQgaW4gSUNIOCBMQU4gKi8KICAgICBpZiAoaHctPm1hY190eXBlICE9IGUxMDAwX2ljaDhsYW4pIHsKICAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTQ1X3Jldl8zKQotICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBWRVQsIDApOworICAgICAgICAgICAgZXczMihWRVQsIDApOwogICAgICAgICBlMTAwMF9jbGVhcl92ZnRhKGh3KTsKICAgICB9CiAKQEAgLTkxNCw4ICs5MjEsOCBAQAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDJfcmV2Ml8wKSB7CiAgICAgICAgIERFQlVHT1VUKCJEaXNhYmxpbmcgTVdJIG9uIDgyNTQyIHJldiAyLjBcbiIpOwogICAgICAgICBlMTAwMF9wY2lfY2xlYXJfbXdpKGh3KTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCBFMTAwMF9SQ1RMX1JTVCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgZXczMihSQ1RMLCBFMTAwMF9SQ1RMX1JTVCk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgICAgIG1zbGVlcCg1KTsKICAgICB9CiAKQEAgLTkyNiw4ICs5MzMsOCBAQAogCiAgICAgLyogRm9yIDgyNTQyIChyZXYgMi4wKSwgdGFrZSB0aGUgcmVjZWl2ZXIgb3V0IG9mIHJlc2V0IGFuZCBlbmFibGUgTVdJICovCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0Ml9yZXYyXzApIHsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCAwKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgICAgICBldzMyKFJDVEwsIDApOworICAgICAgICBFMTAwMF9XUklURV9GTFVTSCgpOwogICAgICAgICBtc2xlZXAoMSk7CiAgICAgICAgIGlmIChody0+cGNpX2NtZF93b3JkICYgUENJX0NPTU1BTkRfSU5WQUxJREFURSkKICAgICAgICAgICAgIGUxMDAwX3BjaV9zZXRfbXdpKGh3KTsKQEAgLTk0Miw3ICs5NDksNyBAQAogICAgICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIE1UQSwgaSwgMCk7CiAgICAgICAgIC8qIHVzZSB3cml0ZSBmbHVzaCB0byBwcmV2ZW50IE1lbW9yeSBXcml0ZSBCbG9jayAoTVdCKSBmcm9tCiAgICAgICAgICAqIG9jY3VyaW5nIHdoZW4gYWNjZXNzaW5nIG91ciByZWdpc3RlciBzcGFjZSAqLwotICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgfQogCiAgICAgLyogU2V0IHRoZSBQQ0kgcHJpb3JpdHkgYml0IGNvcnJlY3RseSBpbiB0aGUgQ1RSTCByZWdpc3Rlci4gIFRoaXMKQEAgLTk1MSw4ICs5NTgsOCBAQAogICAgICAqIDgyNTQyIGFuZCA4MjU0MyBzaWxpY29uLgogICAgICAqLwogICAgIGlmIChody0+ZG1hX2ZhaXJuZXNzICYmIGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0MykgewotICAgICAgICBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwgfCBFMTAwMF9DVFJMX1BSSU9SKTsKKyAgICAgICAgY3RybCA9IGVyMzIoQ1RSTCk7CisgICAgICAgIGV3MzIoQ1RSTCwgY3RybCB8IEUxMDAwX0NUUkxfUFJJT1IpOwogICAgIH0KIAogICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7CkBAIC05NzUsOSArOTgyLDkgQEAKIAogICAgIC8qIFNldCB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciB3cml0ZS1iYWNrIHBvbGljeSAqLwogICAgIGlmIChody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0NCkgewotICAgICAgICBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRYRENUTCk7CisgICAgICAgIGN0cmwgPSBlcjMyKFRYRENUTCk7CiAgICAgICAgIGN0cmwgPSAoY3RybCAmIH5FMTAwMF9UWERDVExfV1RIUkVTSCkgfCBFMTAwMF9UWERDVExfRlVMTF9UWF9ERVNDX1dCOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYRENUTCwgY3RybCk7CisgICAgICAgIGV3MzIoVFhEQ1RMLCBjdHJsKTsKICAgICB9CiAKICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTczKSB7CkBAIC05ODksMjEgKzk5NiwyMSBAQAogICAgICAgICBicmVhazsKICAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgogICAgICAgICAvKiBFbmFibGUgcmV0cmFuc21pdCBvbiBsYXRlIGNvbGxpc2lvbnMgKi8KLSAgICAgICAgcmVnX2RhdGEgPSBFMTAwMF9SRUFEX1JFRyhodywgVENUTCk7CisgICAgICAgIHJlZ19kYXRhID0gZXIzMihUQ1RMKTsKICAgICAgICAgcmVnX2RhdGEgfD0gRTEwMDBfVENUTF9SVExDOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRDVEwsIHJlZ19kYXRhKTsKKyAgICAgICAgZXczMihUQ1RMLCByZWdfZGF0YSk7CiAKICAgICAgICAgLyogQ29uZmlndXJlIEdpZ2FiaXQgQ2FycnkgRXh0ZW5kIFBhZGRpbmcgKi8KLSAgICAgICAgcmVnX2RhdGEgPSBFMTAwMF9SRUFEX1JFRyhodywgVENUTF9FWFQpOworICAgICAgICByZWdfZGF0YSA9IGVyMzIoVENUTF9FWFQpOwogICAgICAgICByZWdfZGF0YSAmPSB+RTEwMDBfVENUTF9FWFRfR0NFWF9NQVNLOwogICAgICAgICByZWdfZGF0YSB8PSBERUZBVUxUXzgwMDAzRVMyTEFOX1RDVExfRVhUX0dDRVg7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVENUTF9FWFQsIHJlZ19kYXRhKTsKKyAgICAgICAgZXczMihUQ1RMX0VYVCwgcmVnX2RhdGEpOwogCiAgICAgICAgIC8qIENvbmZpZ3VyZSBUcmFuc21pdCBJbnRlci1QYWNrZXQgR2FwICovCi0gICAgICAgIHJlZ19kYXRhID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRJUEcpOworICAgICAgICByZWdfZGF0YSA9IGVyMzIoVElQRyk7CiAgICAgICAgIHJlZ19kYXRhICY9IH5FMTAwMF9USVBHX0lQR1RfTUFTSzsKICAgICAgICAgcmVnX2RhdGEgfD0gREVGQVVMVF84MDAwM0VTMkxBTl9USVBHX0lQR1RfMTAwMDsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBUSVBHLCByZWdfZGF0YSk7CisgICAgICAgIGV3MzIoVElQRywgcmVnX2RhdGEpOwogCiAgICAgICAgIHJlZ19kYXRhID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoaHcsIEZGTFQsIDB4MDAwMSk7CiAgICAgICAgIHJlZ19kYXRhICY9IH4weDAwMTAwMDAwOwpAQCAtMTAxMiwxNyArMTAxOSwxNyBAQAogICAgIGNhc2UgZTEwMDBfODI1NzE6CiAgICAgY2FzZSBlMTAwMF84MjU3MjoKICAgICBjYXNlIGUxMDAwX2ljaDhsYW46Ci0gICAgICAgIGN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgVFhEQ1RMMSk7CisgICAgICAgIGN0cmwgPSBlcjMyKFRYRENUTDEpOwogICAgICAgICBjdHJsID0gKGN0cmwgJiB+RTEwMDBfVFhEQ1RMX1dUSFJFU0gpIHwgRTEwMDBfVFhEQ1RMX0ZVTExfVFhfREVTQ19XQjsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBUWERDVEwxLCBjdHJsKTsKKyAgICAgICAgZXczMihUWERDVEwxLCBjdHJsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAKICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTczKSB7Ci0gICAgICAgIHUzMiBnY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgR0NSKTsKKyAgICAgICAgdTMyIGdjciA9IGVyMzIoR0NSKTsKICAgICAgICAgZ2NyIHw9IEUxMDAwX0dDUl9MMV9BQ1RfV0lUSE9VVF9MMFNfUlg7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgR0NSLCBnY3IpOworICAgICAgICBldzMyKEdDUiwgZ2NyKTsKICAgICB9CiAKICAgICAvKiBDbGVhciBhbGwgb2YgdGhlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIChjbGVhciBvbiByZWFkKS4gIEl0IGlzCkBAIC0xMDM5LDExICsxMDQ2LDExIEBACiAKICAgICBpZiAoaHctPmRldmljZV9pZCA9PSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUiB8fAogICAgICAgICBody0+ZGV2aWNlX2lkID09IEUxMDAwX0RFVl9JRF84MjU0NkdCX1FVQURfQ09QUEVSX0tTUDMpIHsKLSAgICAgICAgY3RybF9leHQgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTF9FWFQpOworICAgICAgICBjdHJsX2V4dCA9IGVyMzIoQ1RSTF9FWFQpOwogICAgICAgICAvKiBSZWxheGVkIG9yZGVyaW5nIG11c3QgYmUgZGlzYWJsZWQgdG8gYXZvaWQgYSBwYXJpdHkKICAgICAgICAgICogZXJyb3IgY3Jhc2ggaW4gYSBQQ0kgc2xvdC4gKi8KICAgICAgICAgY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfUk9fRElTOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkxfRVhULCBjdHJsX2V4dCk7CisgICAgICAgIGV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0KTsKICAgICB9CiAKICAgICByZXR1cm4gcmV0X3ZhbDsKQEAgLTEwNTQsOCArMTA2MSw3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9hZGp1c3Rfc2VyZGVzX2FtcGxpdHVkZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9hZGp1c3Rfc2VyZGVzX2FtcGxpdHVkZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUxNiBlZXByb21fZGF0YTsKICAgICBzMzIgIHJldF92YWw7CkBAIC0xMTAwLDggKzExMDYsNyBAQAogICogZXN0YWJsaXNoZWQuIEFzc3VtZXMgdGhlIGhhcmR3YXJlIGhhcyBwcmV2aW91c2x5IGJlZW4gcmVzZXQgYW5kIHRoZQogICogdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyIGFyZSBub3QgZW5hYmxlZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfc2V0dXBfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorczMyIGUxMDAwX3NldHVwX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MzIgY3RybF9leHQ7CiAgICAgczMyIHJldF92YWw7CkBAIC0xMTc2LDcgKzExODEsNyBAQAogICAgICAgICB9CiAgICAgICAgIGN0cmxfZXh0ID0gKChlZXByb21fZGF0YSAmIEVFUFJPTV9XT1JEMEZfU1dQRElPX0VYVCkgPDwKICAgICAgICAgICAgICAgICAgICAgU1dEUElPX19FWFRfU0hJRlQpOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkxfRVhULCBjdHJsX2V4dCk7CisgICAgICAgIGV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0KTsKICAgICB9CiAKICAgICAvKiBDYWxsIHRoZSBuZWNlc3Nhcnkgc3Vicm91dGluZSB0byBjb25maWd1cmUgdGhlIGxpbmsuICovCkBAIC0xMTkzLDEyICsxMTk4LDEyIEBACiAKICAgICAvKiBGQ0FML0ggYW5kIEZDVCBhcmUgaGFyZGNvZGVkIHRvIHN0YW5kYXJkIHZhbHVlcyBpbiBlMTAwMF9pY2g4bGFuLiAqLwogICAgIGlmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikgewotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEZDVCwgRkxPV19DT05UUk9MX1RZUEUpOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEZDQUgsIEZMT1dfQ09OVFJPTF9BRERSRVNTX0hJR0gpOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEZDQUwsIEZMT1dfQ09OVFJPTF9BRERSRVNTX0xPVyk7CisgICAgICAgIGV3MzIoRkNULCBGTE9XX0NPTlRST0xfVFlQRSk7CisgICAgICAgIGV3MzIoRkNBSCwgRkxPV19DT05UUk9MX0FERFJFU1NfSElHSCk7CisgICAgICAgIGV3MzIoRkNBTCwgRkxPV19DT05UUk9MX0FERFJFU1NfTE9XKTsKICAgICB9CiAKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIEZDVFRWLCBody0+ZmNfcGF1c2VfdGltZSk7CisgICAgZXczMihGQ1RUViwgaHctPmZjX3BhdXNlX3RpbWUpOwogCiAgICAgLyogU2V0IHRoZSBmbG93IGNvbnRyb2wgcmVjZWl2ZSB0aHJlc2hvbGQgcmVnaXN0ZXJzLiAgTm9ybWFsbHksCiAgICAgICogdGhlc2UgcmVnaXN0ZXJzIHdpbGwgYmUgc2V0IHRvIGEgZGVmYXVsdCB0aHJlc2hvbGQgdGhhdCBtYXkgYmUKQEAgLTEyMDcsMTggKzEyMTIsMTggQEAKICAgICAgKiByZWdpc3RlcnMgd2lsbCBiZSBzZXQgdG8gMC4KICAgICAgKi8KICAgICBpZiAoIShody0+ZmMgJiBFMTAwMF9GQ19UWF9QQVVTRSkpIHsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBGQ1JUTCwgMCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRkNSVEgsIDApOworICAgICAgICBldzMyKEZDUlRMLCAwKTsKKyAgICAgICAgZXczMihGQ1JUSCwgMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogV2UgbmVlZCB0byBzZXQgdXAgdGhlIFJlY2VpdmUgVGhyZXNob2xkIGhpZ2ggYW5kIGxvdyB3YXRlciBtYXJrcwogICAgICAgICAgKiBhcyB3ZWxsIGFzIChvcHRpb25hbGx5KSBlbmFibGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIFhPTiBmcmFtZXMuCiAgICAgICAgICAqLwogICAgICAgICBpZiAoaHctPmZjX3NlbmRfeG9uKSB7Ci0gICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEZDUlRMLCAoaHctPmZjX2xvd193YXRlciB8IEUxMDAwX0ZDUlRMX1hPTkUpKTsKLSAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRkNSVEgsIGh3LT5mY19oaWdoX3dhdGVyKTsKKyAgICAgICAgICAgIGV3MzIoRkNSVEwsIChody0+ZmNfbG93X3dhdGVyIHwgRTEwMDBfRkNSVExfWE9ORSkpOworICAgICAgICAgICAgZXczMihGQ1JUSCwgaHctPmZjX2hpZ2hfd2F0ZXIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBGQ1JUTCwgaHctPmZjX2xvd193YXRlcik7Ci0gICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEZDUlRILCBody0+ZmNfaGlnaF93YXRlcik7CisgICAgICAgICAgICBldzMyKEZDUlRMLCBody0+ZmNfbG93X3dhdGVyKTsKKyAgICAgICAgICAgIGV3MzIoRkNSVEgsIGh3LT5mY19oaWdoX3dhdGVyKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmV0X3ZhbDsKQEAgLTEyMzMsOCArMTIzOCw3IEBACiAgKiBsaW5rLiBBc3N1bWVzIHRoZSBoYXJkd2FyZSBoYXMgYmVlbiBwcmV2aW91c2x5IHJlc2V0IGFuZCB0aGUgdHJhbnNtaXR0ZXIKICAqIGFuZCByZWNlaXZlciBhcmUgbm90IGVuYWJsZWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9zZXR1cF9maWJlcl9zZXJkZXNfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9zZXR1cF9maWJlcl9zZXJkZXNfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBjdHJsOwogICAgIHUzMiBzdGF0dXM7CkBAIC0xMjUxLDcgKzEyNTUsNyBAQAogICAgICAqIGxvb3BiYWNrIG1vZGUgaXMgZGlzYWJsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICAgICAqLwogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzEgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTcyKQotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFNDVEwsIEUxMDAwX0RJU0FCTEVfU0VSREVTX0xPT1BCQUNLKTsKKyAgICAgICAgZXczMihTQ1RMLCBFMTAwMF9ESVNBQkxFX1NFUkRFU19MT09QQkFDSyk7CiAKICAgICAvKiBPbiBhZGFwdGVycyB3aXRoIGEgTUFDIG5ld2VyIHRoYW4gODI1NDQsIFNXRFAgMSB3aWxsIGJlCiAgICAgICogc2V0IHdoZW4gdGhlIG9wdGljcyBkZXRlY3QgYSBzaWduYWwuIE9uIG9sZGVyIGFkYXB0ZXJzLCBpdCB3aWxsIGJlCkBAIC0xMjU5LDcgKzEyNjMsNyBAQAogICAgICAqIElmIHdlJ3JlIG9uIHNlcmRlcyBtZWRpYSwgYWRqdXN0IHRoZSBvdXRwdXQgYW1wbGl0dWRlIHRvIHZhbHVlCiAgICAgICogc2V0IGluIHRoZSBFRVBST00uCiAgICAgICovCi0gICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKyAgICBjdHJsID0gZXIzMihDVFJMKTsKICAgICBpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikKICAgICAgICAgc2lnbmFsID0gKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KSA/IEUxMDAwX0NUUkxfU1dEUElOMSA6IDA7CiAKQEAgLTEzMzAsOSArMTMzNCw5IEBACiAgICAgICovCiAgICAgREVCVUdPVVQoIkF1dG8tbmVnb3RpYXRpb24gZW5hYmxlZFxuIik7CiAKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYQ1csIHR4Y3cpOwotICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCk7Ci0gICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgIGV3MzIoVFhDVywgdHhjdyk7CisgICAgZXczMihDVFJMLCBjdHJsKTsKKyAgICBFMTAwMF9XUklURV9GTFVTSCgpOwogCiAgICAgaHctPnR4Y3cgPSB0eGN3OwogICAgIG1zbGVlcCgxKTsKQEAgLTEzNDQsMTEgKzEzNDgsMTEgQEAKICAgICAgKiBGb3IgaW50ZXJuYWwgc2VyZGVzLCB3ZSBqdXN0IGFzc3VtZSBhIHNpZ25hbCBpcyBwcmVzZW50LCB0aGVuIHBvbGwuCiAgICAgICovCiAgICAgaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzIHx8Ci0gICAgICAgKEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKSAmIEUxMDAwX0NUUkxfU1dEUElOMSkgPT0gc2lnbmFsKSB7CisgICAgICAgKGVyMzIoQ1RSTCkgJiBFMTAwMF9DVFJMX1NXRFBJTjEpID09IHNpZ25hbCkgewogICAgICAgICBERUJVR09VVCgiTG9va2luZyBmb3IgTGlua1xuIik7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoTElOS19VUF9USU1FT1VUIC8gMTApOyBpKyspIHsKICAgICAgICAgICAgIG1zbGVlcCgxMCk7Ci0gICAgICAgICAgICBzdGF0dXMgPSBFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IGVyMzIoU1RBVFVTKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChpID09IChMSU5LX1VQX1RJTUVPVVQgLyAxMCkpIHsKQEAgLTEzODAsOCArMTM4NCw3IEBACiAqCiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9jb3BwZXJfbGlua19wcmVjb25maWcoc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyBzMzIgZTEwMDBfY29wcGVyX2xpbmtfcHJlY29uZmlnKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIGN0cmw7CiAgICAgczMyIHJldF92YWw7CkBAIC0xMzg5LDcgKzEzOTIsNyBAQAogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9jb3BwZXJfbGlua19wcmVjb25maWciKTsKIAotICAgIGN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCk7CisgICAgY3RybCA9IGVyMzIoQ1RSTCk7CiAgICAgLyogV2l0aCA4MjU0Mywgd2UgbmVlZCB0byBmb3JjZSBzcGVlZCBhbmQgZHVwbGV4IG9uIHRoZSBNQUMgZXF1YWwgdG8gd2hhdAogICAgICAqIHRoZSBQSFkgc3BlZWQgYW5kIGR1cGxleCBjb25maWd1cmF0aW9uIGlzLiBJbiBhZGRpdGlvbiwgd2UgbmVlZCB0bwogICAgICAqIHBlcmZvcm0gYSBoYXJkd2FyZSByZXNldCBvbiB0aGUgUEhZIHRvIHRha2UgaXQgb3V0IG9mIHJlc2V0LgpAQCAtMTM5NywxMCArMTQwMCwxMCBAQAogICAgIGlmIChody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0MykgewogICAgICAgICBjdHJsIHw9IEUxMDAwX0NUUkxfU0xVOwogICAgICAgICBjdHJsICY9IH4oRTEwMDBfQ1RSTF9GUkNTUEQgfCBFMTAwMF9DVFJMX0ZSQ0RQWCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCk7CisgICAgICAgIGV3MzIoQ1RSTCwgY3RybCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY3RybCB8PSAoRTEwMDBfQ1RSTF9GUkNTUEQgfCBFMTAwMF9DVFJMX0ZSQ0RQWCB8IEUxMDAwX0NUUkxfU0xVKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKKyAgICAgICAgZXczMihDVFJMLCBjdHJsKTsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3BoeV9od19yZXNldChodyk7CiAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CkBAIC0xNDQwLDggKzE0NDMsNyBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfY29wcGVyX2xpbmtfaWdwX3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2NvcHBlcl9saW5rX2lncF9zZXR1cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBsZWRfY3RybDsKICAgICBzMzIgcmV0X3ZhbDsKQEAgLTE0NjIsMTAgKzE0NjQsMTAgQEAKICAgICBtc2xlZXAoMTUpOwogICAgIGlmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikgewogICAgIC8qIENvbmZpZ3VyZSBhY3Rpdml0eSBMRUQgYWZ0ZXIgUEhZIHJlc2V0ICovCi0gICAgbGVkX2N0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgTEVEQ1RMKTsKKyAgICBsZWRfY3RybCA9IGVyMzIoTEVEQ1RMKTsKICAgICBsZWRfY3RybCAmPSBJR1BfQUNUSVZJVFlfTEVEX01BU0s7CiAgICAgbGVkX2N0cmwgfD0gKElHUF9BQ1RJVklUWV9MRURfRU5BQkxFIHwgSUdQX0xFRDNfTU9ERSk7Ci0gICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBMRURDVEwsIGxlZF9jdHJsKTsKKyAgICBldzMyKExFRENUTCwgbGVkX2N0cmwpOwogICAgIH0KIAogICAgIC8qIFRoZSBOVk0gc2V0dGluZ3Mgd2lsbCBjb25maWd1cmUgTFBMVSBpbiBEMyBmb3IgSUdQMiBhbmQgSUdQMyBQSFlzICovCkBAIC0xNTg3LDggKzE1ODksNyBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfY29wcGVyX2xpbmtfZ2dwX3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2NvcHBlcl9saW5rX2dncF9zZXR1cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiByZXRfdmFsOwogICAgIHUxNiBwaHlfZGF0YTsKQEAgLTE2NzksOSArMTY4MCw5IEBACiAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKLSAgICAgICAgcmVnX2RhdGEgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTF9FWFQpOworICAgICAgICByZWdfZGF0YSA9IGVyMzIoQ1RSTF9FWFQpOwogICAgICAgICByZWdfZGF0YSAmPSB+KEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgcmVnX2RhdGEpOworICAgICAgICBldzMyKENUUkxfRVhULCByZWdfZGF0YSk7CiAKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgR0c4MjU2M19QSFlfUFdSX01HTVRfQ1RSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7CkBAIC0xNzM1LDggKzE3MzYsNyBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfY29wcGVyX2xpbmtfbWdwX3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2NvcHBlcl9saW5rX21ncF9zZXR1cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiByZXRfdmFsOwogICAgIHUxNiBwaHlfZGF0YTsKQEAgLTE4MzksOCArMTgzOSw3IEBACiAqCiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9jb3BwZXJfbGlua19hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2NvcHBlcl9saW5rX2F1dG9uZWcoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICB1MTYgcGh5X2RhdGE7CkBAIC0xOTEwLDggKzE5MDksNyBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfY29wcGVyX2xpbmtfcG9zdGNvbmZpZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9jb3BwZXJfbGlua19wb3N0Y29uZmlnKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgczMyIHJldF92YWw7CiAgICAgREVCVUdGVU5DKCJlMTAwMF9jb3BwZXJfbGlua19wb3N0Y29uZmlnIik7CkBAIC0xOTQ4LDggKzE5NDYsNyBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfc2V0dXBfY29wcGVyX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyBzMzIgZTEwMDBfc2V0dXBfY29wcGVyX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICB1MTYgaTsKQEAgLTIwNjIsOCArMjA1OSw3IEBACiAqCiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTBfMTAwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBkdXBsZXgpCitzdGF0aWMgczMyIGUxMDAwX2NvbmZpZ3VyZV9rbXJuX2Zvcl8xMF8xMDAoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IGR1cGxleCkKIHsKICAgICBzMzIgcmV0X3ZhbCA9IEUxMDAwX1NVQ0NFU1M7CiAgICAgdTMyIHRpcGc7CkBAIC0yMDc4LDEwICsyMDc0LDEwIEBACiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgLyogQ29uZmlndXJlIFRyYW5zbWl0IEludGVyLVBhY2tldCBHYXAgKi8KLSAgICB0aXBnID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRJUEcpOworICAgIHRpcGcgPSBlcjMyKFRJUEcpOwogICAgIHRpcGcgJj0gfkUxMDAwX1RJUEdfSVBHVF9NQVNLOwogICAgIHRpcGcgfD0gREVGQVVMVF84MDAwM0VTMkxBTl9USVBHX0lQR1RfMTBfMTAwOwotICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVElQRywgdGlwZyk7CisgICAgZXczMihUSVBHLCB0aXBnKTsKIAogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX0tNUk5fTU9ERV9DVFJMLCAmcmVnX2RhdGEpOwogCkBAIC0yMDk4LDggKzIwOTQsNyBAQAogICAgIHJldHVybiByZXRfdmFsOwogfQogCi1zdGF0aWMgczMyCi1lMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiByZXRfdmFsID0gRTEwMDBfU1VDQ0VTUzsKICAgICB1MTYgcmVnX2RhdGE7CkBAIC0yMTE0LDEwICsyMTA5LDEwIEBACiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgLyogQ29uZmlndXJlIFRyYW5zbWl0IEludGVyLVBhY2tldCBHYXAgKi8KLSAgICB0aXBnID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRJUEcpOworICAgIHRpcGcgPSBlcjMyKFRJUEcpOwogICAgIHRpcGcgJj0gfkUxMDAwX1RJUEdfSVBHVF9NQVNLOwogICAgIHRpcGcgfD0gREVGQVVMVF84MDAwM0VTMkxBTl9USVBHX0lQR1RfMTAwMDsKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRJUEcsIHRpcGcpOworICAgIGV3MzIoVElQRywgdGlwZyk7CiAKICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9LTVJOX01PREVfQ1RSTCwgJnJlZ19kYXRhKTsKIApAQCAtMjEzNSw4ICsyMTMwLDcgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfcGh5X3NldHVwX2F1dG9uZWcoc3RydWN0IGUxMDAwX2h3ICpodykKK3MzMiBlMTAwMF9waHlfc2V0dXBfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiByZXRfdmFsOwogICAgIHUxNiBtaWlfYXV0b25lZ19hZHZfcmVnOwpAQCAtMjI4NCw4ICsyMjc4LDcgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXgoc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyBzMzIgZTEwMDBfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBjdHJsOwogICAgIHMzMiByZXRfdmFsOwpAQCAtMjMwMiw3ICsyMjk1LDcgQEAKICAgICBERUJVR09VVDEoImh3LT5mYyA9ICVkXG4iLCBody0+ZmMpOwogCiAgICAgLyogUmVhZCB0aGUgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIuICovCi0gICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKyAgICBjdHJsID0gZXIzMihDVFJMKTsKIAogICAgIC8qIFNldCB0aGUgYml0cyB0byBGb3JjZSBTcGVlZCBhbmQgRHVwbGV4IGluIHRoZSBEZXZpY2UgQ3RybCBSZWcuICovCiAgICAgY3RybCB8PSAoRTEwMDBfQ1RSTF9GUkNTUEQgfCBFMTAwMF9DVFJMX0ZSQ0RQWCk7CkBAIC0yMzU3LDcgKzIzNTAsNyBAQAogICAgIGUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CiAKICAgICAvKiBXcml0ZSB0aGUgY29uZmlndXJlZCB2YWx1ZXMgYmFjayB0byB0aGUgRGV2aWNlIENvbnRyb2wgUmVnLiAqLwotICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCk7CisgICAgZXczMihDVFJMLCBjdHJsKTsKIAogICAgIGlmICgoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9tODgpIHx8CiAgICAgICAgIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpKSB7CkBAIC0yNTM1LDggKzI1MjgsNyBAQAogKiBMaW5rIHNob3VsZCBoYXZlIGJlZW4gZXN0YWJsaXNoZWQgcHJldmlvdXNseS4gUmVhZHMgdGhlIHNwZWVkIGFuZCBkdXBsZXgKICogaW5mb3JtYXRpb24gZnJvbSB0aGUgRGV2aWNlIFN0YXR1cyByZWdpc3Rlci4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQordm9pZCBlMTAwMF9jb25maWdfY29sbGlzaW9uX2Rpc3Qoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MzIgdGN0bCwgY29sbF9kaXN0OwogCkBAIC0yNTQ3LDEzICsyNTM5LDEzIEBACiAgICAgZWxzZQogICAgICAgICBjb2xsX2Rpc3QgPSBFMTAwMF9DT0xMSVNJT05fRElTVEFOQ0U7CiAKLSAgICB0Y3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRDVEwpOworICAgIHRjdGwgPSBlcjMyKFRDVEwpOwogCiAgICAgdGN0bCAmPSB+RTEwMDBfVENUTF9DT0xEOwogICAgIHRjdGwgfD0gY29sbF9kaXN0IDw8IEUxMDAwX0NPTERfU0hJRlQ7CiAKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRDVEwsIHRjdGwpOwotICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICBldzMyKFRDVEwsIHRjdGwpOworICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1NjUsOCArMjU1Nyw3IEBACiAqIFRoZSBjb250ZW50cyBvZiB0aGUgUEhZIHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbiBuZWVkIHRvCiAqIGJlIHBhc3NlZCBpbi4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX2NvbmZpZ19tYWNfdG9fcGh5KHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2NvbmZpZ19tYWNfdG9fcGh5KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIGN0cmw7CiAgICAgczMyIHJldF92YWw7CkBAIC0yNTgyLDcgKzI1NzMsNyBAQAogICAgIC8qIFJlYWQgdGhlIERldmljZSBDb250cm9sIFJlZ2lzdGVyIGFuZCBzZXQgdGhlIGJpdHMgdG8gRm9yY2UgU3BlZWQKICAgICAgKiBhbmQgRHVwbGV4LgogICAgICAqLwotICAgIGN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCk7CisgICAgY3RybCA9IGVyMzIoQ1RSTCk7CiAgICAgY3RybCB8PSAoRTEwMDBfQ1RSTF9GUkNTUEQgfCBFMTAwMF9DVFJMX0ZSQ0RQWCk7CiAgICAgY3RybCAmPSB+KEUxMDAwX0NUUkxfU1BEX1NFTCB8IEUxMDAwX0NUUkxfSUxPUyk7CiAKQEAgLTI2MDksNyArMjYwMCw3IEBACiAgICAgICAgIGN0cmwgfD0gRTEwMDBfQ1RSTF9TUERfMTAwOwogCiAgICAgLyogV3JpdGUgdGhlIGNvbmZpZ3VyZWQgdmFsdWVzIGJhY2sgdG8gdGhlIERldmljZSBDb250cm9sIFJlZy4gKi8KLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwpOworICAgIGV3MzIoQ1RSTCwgY3RybCk7CiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CiAKQEAgLTI2MjQsMTUgKzI2MTUsMTQgQEAKICAqIGJ5IHRoZSBQSFkgcmF0aGVyIHRoYW4gdGhlIE1BQy4gU29mdHdhcmUgbXVzdCBhbHNvIGNvbmZpZ3VyZSB0aGVzZQogICogYml0cyB3aGVuIGxpbmsgaXMgZm9yY2VkIG9uIGEgZmliZXIgY29ubmVjdGlvbi4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfZm9yY2VfbWFjX2ZjKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfZm9yY2VfbWFjX2ZjKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIGN0cmw7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2ZvcmNlX21hY19mYyIpOwogCiAgICAgLyogR2V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgdGhlIERldmljZSBDb250cm9sIFJlZ2lzdGVyICovCi0gICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKyAgICBjdHJsID0gZXIzMihDVFJMKTsKIAogICAgIC8qIEJlY2F1c2Ugd2UgZGlkbid0IGdldCBsaW5rIHZpYSB0aGUgaW50ZXJuYWwgYXV0by1uZWdvdGlhdGlvbgogICAgICAqIG1lY2hhbmlzbSAod2UgZWl0aGVyIGZvcmNlZCBsaW5rIG9yIHdlIGdvdCBsaW5rIHZpYSBQSFkKQEAgLTI2NzYsNyArMjY2Niw3IEBACiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0Ml9yZXYyXzApCiAgICAgICAgIGN0cmwgJj0gKH5FMTAwMF9DVFJMX1RGQ0UpOwogCi0gICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKKyAgICBldzMyKENUUkwsIGN0cmwpOwogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCkBAIC0yNjkxLDggKzI2ODEsNyBAQAogICogYmFzZWQgb24gdGhlIGZsb3cgY29udHJvbCBuZWdvdGlhdGVkIGJ5IHRoZSBQSFkuIEluIFRCSSBtb2RlLCB0aGUgVEZDRQogICogYW5kIFJGQ0UgYml0cyB3aWxsIGJlIGF1dG9tYXRpY2FseSBzZXQgdG8gdGhlIG5lZ290aWF0ZWQgZmxvdyBjb250cm9sIG1vZGUuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiByZXRfdmFsOwogICAgIHUxNiBtaWlfc3RhdHVzX3JlZzsKQEAgLTI4OTYsOCArMjg4NSw3IEBACiAgKgogICogQ2FsbGVkIGJ5IGFueSBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIGNoZWNrIHRoZSBsaW5rIHN0YXR1cyBvZiB0aGUgYWRhcHRlci4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfY2hlY2tfZm9yX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodykKK3MzMiBlMTAwMF9jaGVja19mb3JfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiByeGN3ID0gMDsKICAgICB1MzIgY3RybDsKQEAgLTI5MTAsOCArMjg5OCw4IEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NoZWNrX2Zvcl9saW5rIik7CiAKLSAgICBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwotICAgIHN0YXR1cyA9IEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpOworICAgIGN0cmwgPSBlcjMyKENUUkwpOworICAgIHN0YXR1cyA9IGVyMzIoU1RBVFVTKTsKIAogICAgIC8qIE9uIGFkYXB0ZXJzIHdpdGggYSBNQUMgbmV3ZXIgdGhhbiA4MjU0NCwgU1cgRGVmaW5lYWJsZSBwaW4gMSB3aWxsIGJlCiAgICAgICogc2V0IHdoZW4gdGhlIG9wdGljcyBkZXRlY3QgYSBzaWduYWwuIE9uIG9sZGVyIGFkYXB0ZXJzLCBpdCB3aWxsIGJlCkBAIC0yOTE5LDcgKzI5MDcsNyBAQAogICAgICAqLwogICAgIGlmICgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgfHwKICAgICAgICAgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSkgewotICAgICAgICByeGN3ID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJYQ1cpOworICAgICAgICByeGN3ID0gZXIzMihSWENXKTsKIAogICAgICAgICBpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgewogICAgICAgICAgICAgc2lnbmFsID0gKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KSA/IEUxMDAwX0NUUkxfU1dEUElOMSA6IDA7CkBAIC0yOTY1LDExICsyOTUzLDExIEBACiAgICAgICAgICAgICAgICAgKCFody0+YXV0b25lZykgJiYKICAgICAgICAgICAgICAgICAoaHctPmZvcmNlZF9zcGVlZF9kdXBsZXggPT0gZTEwMDBfMTBfZnVsbCB8fAogICAgICAgICAgICAgICAgICBody0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9PSBlMTAwMF8xMF9oYWxmKSkgewotICAgICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgSU1DLCAweGZmZmZmZmZmKTsKKyAgICAgICAgICAgICAgICBldzMyKElNQywgMHhmZmZmZmZmZik7CiAgICAgICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3BvbGFyaXR5X3JldmVyc2FsX3dvcmthcm91bmQoaHcpOwotICAgICAgICAgICAgICAgIGljciA9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1IpOwotICAgICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgSUNTLCAoaWNyICYgfkUxMDAwX0lDU19MU0MpKTsKLSAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIElNUywgSU1TX0VOQUJMRV9NQVNLKTsKKyAgICAgICAgICAgICAgICBpY3IgPSBlcjMyKElDUik7CisgICAgICAgICAgICAgICAgZXczMihJQ1MsIChpY3IgJiB+RTEwMDBfSUNTX0xTQykpOworICAgICAgICAgICAgICAgIGV3MzIoSU1TLCBJTVNfRU5BQkxFX01BU0spOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gZWxzZSB7CkBAIC0zMDM0LDkgKzMwMjIsOSBAQAogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGlmIChody0+dGJpX2NvbXBhdGliaWxpdHlfb24pIHsKICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgcHJldmlvdXNseSB3ZXJlIGluIHRoZSBtb2RlLCB0dXJuIGl0IG9mZi4gKi8KLSAgICAgICAgICAgICAgICAgICAgcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKKyAgICAgICAgICAgICAgICAgICAgcmN0bCA9IGVyMzIoUkNUTCk7CiAgICAgICAgICAgICAgICAgICAgIHJjdGwgJj0gfkUxMDAwX1JDVExfU0JQOwotICAgICAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwpOworICAgICAgICAgICAgICAgICAgICBldzMyKFJDVEwsIHJjdGwpOwogICAgICAgICAgICAgICAgICAgICBody0+dGJpX2NvbXBhdGliaWxpdHlfb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzA0Nyw5ICszMDM1LDkgQEAKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBpZiAoIWh3LT50YmlfY29tcGF0aWJpbGl0eV9vbikgewogICAgICAgICAgICAgICAgICAgICBody0+dGJpX2NvbXBhdGliaWxpdHlfb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJDVEwpOworICAgICAgICAgICAgICAgICAgICByY3RsID0gZXIzMihSQ1RMKTsKICAgICAgICAgICAgICAgICAgICAgcmN0bCB8PSBFMTAwMF9SQ1RMX1NCUDsKLSAgICAgICAgICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsKTsKKyAgICAgICAgICAgICAgICAgICAgZXczMihSQ1RMLCByY3RsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMwNzMsMTIgKzMwNjEsMTIgQEAKICAgICAgICAgREVCVUdPVVQoIk5PVCBSWGluZyAvQy8sIGRpc2FibGUgQXV0b05lZyBhbmQgZm9yY2UgbGluay5cbiIpOwogCiAgICAgICAgIC8qIERpc2FibGUgYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlciAqLwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYQ1csIChody0+dHhjdyAmIH5FMTAwMF9UWENXX0FORSkpOworICAgICAgICBldzMyKFRYQ1csIChody0+dHhjdyAmIH5FMTAwMF9UWENXX0FORSkpOwogCiAgICAgICAgIC8qIEZvcmNlIGxpbmstdXAgYW5kIGFsc28gZm9yY2UgZnVsbC1kdXBsZXguICovCi0gICAgICAgIGN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCk7CisgICAgICAgIGN0cmwgPSBlcjMyKENUUkwpOwogICAgICAgICBjdHJsIHw9IChFMTAwMF9DVFJMX1NMVSB8IEUxMDAwX0NUUkxfRkQpOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwpOworICAgICAgICBldzMyKENUUkwsIGN0cmwpOwogCiAgICAgICAgIC8qIENvbmZpZ3VyZSBGbG93IENvbnRyb2wgYWZ0ZXIgZm9yY2luZyBsaW5rIHVwLiAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXAoaHcpOwpAQCAtMzA5Niw4ICszMDg0LDggQEAKICAgICAgICAgICAgICAgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSkgJiYKICAgICAgICAgICAgICAgKGN0cmwgJiBFMTAwMF9DVFJMX1NMVSkgJiYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpKSB7CiAgICAgICAgIERFQlVHT1VUKCJSWGluZyAvQy8sIGVuYWJsZSBBdXRvTmVnIGFuZCBzdG9wIGZvcmNpbmcgbGluay5cbiIpOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYQ1csIGh3LT50eGN3KTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCAoY3RybCAmIH5FMTAwMF9DVFJMX1NMVSkpOworICAgICAgICBldzMyKFRYQ1csIGh3LT50eGN3KTsKKyAgICAgICAgZXczMihDVFJMLCAoY3RybCAmIH5FMTAwMF9DVFJMX1NMVSkpOwogCiAgICAgICAgIGh3LT5zZXJkZXNfbGlua19kb3duID0gZmFsc2U7CiAgICAgfQpAQCAtMzEwNSwxMCArMzA5MywxMCBAQAogICAgICAqIGJhc2VkIG9uIE1BQyBzeW5jaHJvbml6YXRpb24gZm9yIGludGVybmFsIHNlcmRlcyBtZWRpYSB0eXBlLgogICAgICAqLwogICAgIGVsc2UgaWYgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgJiYKLSAgICAgICAgICAgICAhKEUxMDAwX1RYQ1dfQU5FICYgRTEwMDBfUkVBRF9SRUcoaHcsIFRYQ1cpKSkgeworICAgICAgICAgICAgICEoRTEwMDBfVFhDV19BTkUgJiBlcjMyKFRYQ1cpKSkgewogICAgICAgICAvKiBTWU5DSCBiaXQgYW5kIElWIGJpdCBhcmUgc3RpY2t5LiAqLwogICAgICAgICB1ZGVsYXkoMTApOwotICAgICAgICBpZiAoRTEwMDBfUlhDV19TWU5DSCAmIEUxMDAwX1JFQURfUkVHKGh3LCBSWENXKSkgeworICAgICAgICBpZiAoRTEwMDBfUlhDV19TWU5DSCAmIGVyMzIoUlhDVykpIHsKICAgICAgICAgICAgIGlmICghKHJ4Y3cgJiBFMTAwMF9SWENXX0lWKSkgewogICAgICAgICAgICAgICAgIGh3LT5zZXJkZXNfbGlua19kb3duID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgREVCVUdPVVQoIlNFUkRFUzogTGluayBpcyB1cC5cbiIpOwpAQCAtMzExOSw4ICszMTA3LDggQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSAmJgotICAgICAgICAoRTEwMDBfVFhDV19BTkUgJiBFMTAwMF9SRUFEX1JFRyhodywgVFhDVykpKSB7Ci0gICAgICAgIGh3LT5zZXJkZXNfbGlua19kb3duID0gIShFMTAwMF9TVEFUVVNfTFUgJiBFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSk7CisgICAgICAgIChFMTAwMF9UWENXX0FORSAmIGVyMzIoVFhDVykpKSB7CisgICAgICAgIGh3LT5zZXJkZXNfbGlua19kb3duID0gIShFMTAwMF9TVEFUVVNfTFUgJiBlcjMyKFNUQVRVUykpOwogICAgIH0KICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KQEAgLTMxMzIsMTAgKzMxMjAsNyBAQAogICogc3BlZWQgLSBTcGVlZCBvZiB0aGUgY29ubmVjdGlvbgogICogZHVwbGV4IC0gRHVwbGV4IHNldHRpbmcgb2YgdGhlIGNvbm5lY3Rpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqc3BlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmR1cGxleCkKK3MzMiBlMTAwMF9nZXRfc3BlZWRfYW5kX2R1cGxleChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgKnNwZWVkLCB1MTYgKmR1cGxleCkKIHsKICAgICB1MzIgc3RhdHVzOwogICAgIHMzMiByZXRfdmFsOwpAQCAtMzE0NCw3ICszMTI5LDcgQEAKICAgICBERUJVR0ZVTkMoImUxMDAwX2dldF9zcGVlZF9hbmRfZHVwbGV4Iik7CiAKICAgICBpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSB7Ci0gICAgICAgIHN0YXR1cyA9IEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpOworICAgICAgICBzdGF0dXMgPSBlcjMyKFNUQVRVUyk7CiAgICAgICAgIGlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwMCkgewogICAgICAgICAgICAgKnNwZWVkID0gU1BFRURfMTAwMDsKICAgICAgICAgICAgIERFQlVHT1VUKCIxMDAwIE1icywgIik7CkBAIC0zMjE0LDggKzMxOTksNyBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfd2FpdF9hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX3dhaXRfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiByZXRfdmFsOwogICAgIHUxNiBpOwpAQCAtMzI0OSwxNSArMzIzMywxMyBAQAogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKiBjdHJsIC0gRGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIncyBjdXJyZW50IHZhbHVlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAotZTEwMDBfcmFpc2VfbWRpX2NsayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICB1MzIgKmN0cmwpCitzdGF0aWMgdm9pZCBlMTAwMF9yYWlzZV9tZGlfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqY3RybCkKIHsKICAgICAvKiBSYWlzZSB0aGUgY2xvY2sgaW5wdXQgdG8gdGhlIE1hbmFnZW1lbnQgRGF0YSBDbG9jayAoYnkgc2V0dGluZyB0aGUgTURDCiAgICAgICogYml0KSwgYW5kIHRoZW4gZGVsYXkgMTAgbWljcm9zZWNvbmRzLgogICAgICAqLwotICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgKCpjdHJsIHwgRTEwMDBfQ1RSTF9NREMpKTsKLSAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgZXczMihDVFJMLCAoKmN0cmwgfCBFMTAwMF9DVFJMX01EQykpOworICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgdWRlbGF5KDEwKTsKIH0KIApAQCAtMzI2NywxNSArMzI0OSwxMyBAQAogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKiBjdHJsIC0gRGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIncyBjdXJyZW50IHZhbHVlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAotZTEwMDBfbG93ZXJfbWRpX2NsayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICB1MzIgKmN0cmwpCitzdGF0aWMgdm9pZCBlMTAwMF9sb3dlcl9tZGlfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqY3RybCkKIHsKICAgICAvKiBMb3dlciB0aGUgY2xvY2sgaW5wdXQgdG8gdGhlIE1hbmFnZW1lbnQgRGF0YSBDbG9jayAoYnkgY2xlYXJpbmcgdGhlIE1EQwogICAgICAqIGJpdCksIGFuZCB0aGVuIGRlbGF5IDEwIG1pY3Jvc2Vjb25kcy4KICAgICAgKi8KLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsICgqY3RybCAmIH5FMTAwMF9DVFJMX01EQykpOwotICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICBldzMyKENUUkwsICgqY3RybCAmIH5FMTAwMF9DVFJMX01EQykpOworICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgdWRlbGF5KDEwKTsKIH0KIApAQCAtMzI4OCwxMCArMzI2OCw3IEBACiAqCiAqIEJpdHMgYXJlIHNoaWZ0ZWQgb3V0IGluIE1TQiB0byBMU0Igb3JkZXIuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAotZTEwMDBfc2hpZnRfb3V0X21kaV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNvdW50KQorc3RhdGljIHZvaWQgZTEwMDBfc2hpZnRfb3V0X21kaV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBkYXRhLCB1MTYgY291bnQpCiB7CiAgICAgdTMyIGN0cmw7CiAgICAgdTMyIG1hc2s7CkBAIC0zMzAzLDcgKzMyODAsNyBAQAogICAgIG1hc2sgPSAweDAxOwogICAgIG1hc2sgPDw9IChjb3VudCAtIDEpOwogCi0gICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKyAgICBjdHJsID0gZXIzMihDVFJMKTsKIAogICAgIC8qIFNldCBNRElPX0RJUiBhbmQgTURDX0RJUiBkaXJlY3Rpb24gYml0cyB0byBiZSB1c2VkIGFzIG91dHB1dCBwaW5zLiAqLwogICAgIGN0cmwgfD0gKEUxMDAwX0NUUkxfTURJT19ESVIgfCBFMTAwMF9DVFJMX01EQ19ESVIpOwpAQCAtMzMxOSw4ICszMjk2LDggQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY3RybCAmPSB+RTEwMDBfQ1RSTF9NRElPOwogCi0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgZXczMihDVFJMLCBjdHJsKTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKIAogICAgICAgICB1ZGVsYXkoMTApOwogCkBAIC0zMzM4LDggKzMzMTUsNyBAQAogKgogKiBCaXRzIGFyZSBzaGlmdGVkIGluIGluIE1TQiB0byBMU0Igb3JkZXIuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdTE2Ci1lMTAwMF9zaGlmdF9pbl9tZGlfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHUxNiBlMTAwMF9zaGlmdF9pbl9tZGlfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBjdHJsOwogICAgIHUxNiBkYXRhID0gMDsKQEAgLTMzNTIsMTQgKzMzMjgsMTQgQEAKICAgICAgKiBieSByYWlzaW5nIHRoZSBpbnB1dCB0byB0aGUgTWFuYWdlbWVudCBEYXRhIENsb2NrIChzZXR0aW5nIHRoZSBNREMgYml0KSwKICAgICAgKiBhbmQgdGhlbiByZWFkaW5nIHRoZSB2YWx1ZSBvZiB0aGUgTURJTyBiaXQuCiAgICAgICovCi0gICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKyAgICBjdHJsID0gZXIzMihDVFJMKTsKIAogICAgIC8qIENsZWFyIE1ESU9fRElSIChTV0RQSU8xKSB0byBpbmRpY2F0ZSB0aGlzIGJpdCBpcyB0byBiZSB1c2VkIGFzIGlucHV0LiAqLwogICAgIGN0cmwgJj0gfkUxMDAwX0NUUkxfTURJT19ESVI7CiAgICAgY3RybCAmPSB+RTEwMDBfQ1RSTF9NRElPOwogCi0gICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKLSAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgZXczMihDVFJMLCBjdHJsKTsKKyAgICBFMTAwMF9XUklURV9GTFVTSCgpOwogCiAgICAgLyogUmFpc2UgYW5kIExvd2VyIHRoZSBjbG9jayBiZWZvcmUgcmVhZGluZyBpbiB0aGUgZGF0YS4gVGhpcyBhY2NvdW50cyBmb3IKICAgICAgKiB0aGUgdHVybmFyb3VuZCBiaXRzLiBUaGUgZmlyc3QgY2xvY2sgb2NjdXJyZWQgd2hlbiB3ZSBjbG9ja2VkIG91dCB0aGUKQEAgLTMzNzEsNyArMzM0Nyw3IEBACiAgICAgZm9yIChkYXRhID0gMCwgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgICAgIGRhdGEgPSBkYXRhIDw8IDE7CiAgICAgICAgIGUxMDAwX3JhaXNlX21kaV9jbGsoaHcsICZjdHJsKTsKLSAgICAgICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKyAgICAgICAgY3RybCA9IGVyMzIoQ1RSTCk7CiAgICAgICAgIC8qIENoZWNrIHRvIHNlZSBpZiB3ZSBzaGlmdGVkIGluIGEgIjEiLiAqLwogICAgICAgICBpZiAoY3RybCAmIEUxMDAwX0NUUkxfTURJTykKICAgICAgICAgICAgIGRhdGEgfD0gMTsKQEAgLTMzODQsOCArMzM2MCw3IEBACiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBzMzIKLWUxMDAwX3N3Zndfc3luY19hY3F1aXJlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBtYXNrKQorc3RhdGljIHMzMiBlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWFzaykKIHsKICAgICB1MzIgc3dmd19zeW5jID0gMDsKICAgICB1MzIgc3dtYXNrID0gbWFzazsKQEAgLTM0MDQsNyArMzM3OSw3IEBACiAgICAgICAgICAgICBpZiAoZTEwMDBfZ2V0X2h3X2VlcHJvbV9zZW1hcGhvcmUoaHcpKQogICAgICAgICAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKIAotICAgICAgICAgICAgc3dmd19zeW5jID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNXX0ZXX1NZTkMpOworICAgICAgICAgICAgc3dmd19zeW5jID0gZXIzMihTV19GV19TWU5DKTsKICAgICAgICAgICAgIGlmICghKHN3Zndfc3luYyAmIChmd21hc2sgfCBzd21hc2spKSkgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzQyMiwxNCArMzM5NywxMyBAQAogICAgIH0KIAogICAgIHN3Zndfc3luYyB8PSBzd21hc2s7Ci0gICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBTV19GV19TWU5DLCBzd2Z3X3N5bmMpOworICAgIGV3MzIoU1dfRldfU1lOQywgc3dmd19zeW5jKTsKIAogICAgIGUxMDAwX3B1dF9od19lZXByb21fc2VtYXBob3JlKGh3KTsKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX3N3Zndfc3luY19yZWxlYXNlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBtYXNrKQorc3RhdGljIHZvaWQgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2Uoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1hc2spCiB7CiAgICAgdTMyIHN3Zndfc3luYzsKICAgICB1MzIgc3dtYXNrID0gbWFzazsKQEAgLTM0NTEsOSArMzQyNSw5IEBACiAgICAgd2hpbGUgKGUxMDAwX2dldF9od19lZXByb21fc2VtYXBob3JlKGh3KSAhPSBFMTAwMF9TVUNDRVNTKTsKICAgICAgICAgLyogZW1wdHkgKi8KIAotICAgIHN3Zndfc3luYyA9IEUxMDAwX1JFQURfUkVHKGh3LCBTV19GV19TWU5DKTsKKyAgICBzd2Z3X3N5bmMgPSBlcjMyKFNXX0ZXX1NZTkMpOwogICAgIHN3Zndfc3luYyAmPSB+c3dtYXNrOwotICAgIEUxMDAwX1dSSVRFX1JFRyhodywgU1dfRldfU1lOQywgc3dmd19zeW5jKTsKKyAgICBldzMyKFNXX0ZXX1NZTkMsIHN3Zndfc3luYyk7CiAKICAgICBlMTAwMF9wdXRfaHdfZWVwcm9tX3NlbWFwaG9yZShodyk7CiB9CkBAIC0zNDY0LDEwICszNDM4LDcgQEAKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICogcmVnX2FkZHIgLSBhZGRyZXNzIG9mIHRoZSBQSFkgcmVnaXN0ZXIgdG8gcmVhZAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotczMyCi1lMTAwMF9yZWFkX3BoeV9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICB1MzIgcmVnX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgdTE2ICpwaHlfZGF0YSkKK3MzMiBlMTAwMF9yZWFkX3BoeV9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZ19hZGRyLCB1MTYgKnBoeV9kYXRhKQogewogICAgIHUzMiByZXRfdmFsOwogICAgIHUxNiBzd2Z3OwpAQCAtMzQ3NSw3ICszNDQ2LDcgQEAKICAgICBERUJVR0ZVTkMoImUxMDAwX3JlYWRfcGh5X3JlZyIpOwogCiAgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pICYmCi0gICAgICAgIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpKSB7CisgICAgICAgIChlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSkgewogICAgICAgICBzd2Z3ID0gRTEwMDBfU1dGV19QSFkxX1NNOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN3ZncgPSBFMTAwMF9TV0ZXX1BIWTBfU007CkBAIC0zNTIzLDkgKzM0OTQsOCBAQAogICAgIHJldHVybiByZXRfdmFsOwogfQogCi1zdGF0aWMgczMyCi1lMTAwMF9yZWFkX3BoeV9yZWdfZXgoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZ19hZGRyLAotICAgICAgICAgICAgICAgICAgICAgIHUxNiAqcGh5X2RhdGEpCitzdGF0aWMgczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19leChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnX2FkZHIsCisJCQkJIHUxNiAqcGh5X2RhdGEpCiB7CiAgICAgdTMyIGk7CiAgICAgdTMyIG1kaWMgPSAwOwpAQCAtMzU0NywxMiArMzUxNywxMiBAQAogICAgICAgICAgICAgICAgIChwaHlfYWRkciA8PCBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAogICAgICAgICAgICAgICAgIChFMTAwMF9NRElDX09QX1JFQUQpKTsKIAotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIE1ESUMsIG1kaWMpOworICAgICAgICBldzMyKE1ESUMsIG1kaWMpOwogCiAgICAgICAgIC8qIFBvbGwgdGhlIHJlYWR5IGJpdCB0byBzZWUgaWYgdGhlIE1ESSByZWFkIGNvbXBsZXRlZCAqLwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewogICAgICAgICAgICAgdWRlbGF5KDUwKTsKLSAgICAgICAgICAgIG1kaWMgPSBFMTAwMF9SRUFEX1JFRyhodywgTURJQyk7CisgICAgICAgICAgICBtZGljID0gZXIzMihNRElDKTsKICAgICAgICAgICAgIGlmIChtZGljICYgRTEwMDBfTURJQ19SRUFEWSkgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCEobWRpYyAmIEUxMDAwX01ESUNfUkVBRFkpKSB7CkBAIC0zNTYzLDcgKzM1MzMsNyBAQAogICAgICAgICAgICAgREVCVUdPVVQoIk1ESSBFcnJvclxuIik7CiAgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9QSFk7CiAgICAgICAgIH0KLSAgICAgICAgKnBoeV9kYXRhID0gKHUxNikgbWRpYzsKKyAgICAgICAgKnBoeV9kYXRhID0gKHUxNiltZGljOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFdlIG11c3QgZmlyc3Qgc2VuZCBhIHByZWFtYmxlIHRocm91Z2ggdGhlIE1ESU8gcGluIHRvIHNpZ25hbCB0aGUKICAgICAgICAgICogYmVnaW5uaW5nIG9mIGFuIE1JSSBpbnN0cnVjdGlvbi4gIFRoaXMgaXMgZG9uZSBieSBzZW5kaW5nIDMyCkBAIC0zNjAzLDkgKzM1NzMsNyBAQAogKiByZWdfYWRkciAtIGFkZHJlc3Mgb2YgdGhlIFBIWSByZWdpc3RlciB0byB3cml0ZQogKiBkYXRhIC0gZGF0YSB0byB3cml0ZSB0byB0aGUgUEhZCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zMzIKLWUxMDAwX3dyaXRlX3BoeV9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZ19hZGRyLAotICAgICAgICAgICAgICAgICAgICB1MTYgcGh5X2RhdGEpCitzMzIgZTEwMDBfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnX2FkZHIsIHUxNiBwaHlfZGF0YSkKIHsKICAgICB1MzIgcmV0X3ZhbDsKICAgICB1MTYgc3dmdzsKQEAgLTM2MTMsNyArMzU4MSw3IEBACiAgICAgREVCVUdGVU5DKCJlMTAwMF93cml0ZV9waHlfcmVnIik7CiAKICAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikgJiYKLSAgICAgICAgKEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0ZVTkNfMSkpIHsKKyAgICAgICAgKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpKSB7CiAgICAgICAgIHN3ZncgPSBFMTAwMF9TV0ZXX1BIWTFfU007CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3dmdyA9IEUxMDAwX1NXRldfUEhZMF9TTTsKQEAgLTM2NjEsOSArMzYyOSw4IEBACiAgICAgcmV0dXJuIHJldF92YWw7CiB9CiAKLXN0YXRpYyBzMzIKLWUxMDAwX3dyaXRlX3BoeV9yZWdfZXgoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZ19hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICB1MTYgcGh5X2RhdGEpCitzdGF0aWMgczMyIGUxMDAwX3dyaXRlX3BoeV9yZWdfZXgoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZ19hZGRyLAorCQkJCSAgdTE2IHBoeV9kYXRhKQogewogICAgIHUzMiBpOwogICAgIHUzMiBtZGljID0gMDsKQEAgLTM2ODEsMTcgKzM2NDgsMTcgQEAKICAgICAgICAgICogZm9yIHRoZSBQSFkgcmVnaXN0ZXIgaW4gdGhlIE1ESSBDb250cm9sIHJlZ2lzdGVyLiAgVGhlIE1BQyB3aWxsIHRha2UKICAgICAgICAgICogY2FyZSBvZiBpbnRlcmZhY2luZyB3aXRoIHRoZSBQSFkgdG8gc2VuZCB0aGUgZGVzaXJlZCBkYXRhLgogICAgICAgICAgKi8KLSAgICAgICAgbWRpYyA9ICgoKHUzMikgcGh5X2RhdGEpIHwKKyAgICAgICAgbWRpYyA9ICgoKHUzMilwaHlfZGF0YSkgfAogICAgICAgICAgICAgICAgIChyZWdfYWRkciA8PCBFMTAwMF9NRElDX1JFR19TSElGVCkgfAogICAgICAgICAgICAgICAgIChwaHlfYWRkciA8PCBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAogICAgICAgICAgICAgICAgIChFMTAwMF9NRElDX09QX1dSSVRFKSk7CiAKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBNRElDLCBtZGljKTsKKyAgICAgICAgZXczMihNRElDLCBtZGljKTsKIAogICAgICAgICAvKiBQb2xsIHRoZSByZWFkeSBiaXQgdG8gc2VlIGlmIHRoZSBNREkgcmVhZCBjb21wbGV0ZWQgKi8KICAgICAgICAgZm9yIChpID0gMDsgaSA8IDY0MTsgaSsrKSB7CiAgICAgICAgICAgICB1ZGVsYXkoNSk7Ci0gICAgICAgICAgICBtZGljID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1ESUMpOworICAgICAgICAgICAgbWRpYyA9IGVyMzIoTURJQyk7CiAgICAgICAgICAgICBpZiAobWRpYyAmIEUxMDAwX01ESUNfUkVBRFkpIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmICghKG1kaWMgJiBFMTAwMF9NRElDX1JFQURZKSkgewpAQCAtMzcxNSw3ICszNjgyLDcgQEAKICAgICAgICAgbWRpYyA9ICgoUEhZX1RVUk5BUk9VTkQpIHwgKHJlZ19hZGRyIDw8IDIpIHwgKHBoeV9hZGRyIDw8IDcpIHwKICAgICAgICAgICAgICAgICAoUEhZX09QX1dSSVRFIDw8IDEyKSB8IChQSFlfU09GIDw8IDE0KSk7CiAgICAgICAgIG1kaWMgPDw9IDE2OwotICAgICAgICBtZGljIHw9ICh1MzIpIHBoeV9kYXRhOworICAgICAgICBtZGljIHw9ICh1MzIpcGh5X2RhdGE7CiAKICAgICAgICAgZTEwMDBfc2hpZnRfb3V0X21kaV9iaXRzKGh3LCBtZGljLCAzMik7CiAgICAgfQpAQCAtMzcyMywxNyArMzY5MCwxNCBAQAogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCi1zdGF0aWMgczMyCi1lMTAwMF9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgIHUzMiByZWdfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKQorc3RhdGljIHMzMiBlMTAwMF9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWdfYWRkciwgdTE2ICpkYXRhKQogewogICAgIHUzMiByZWdfdmFsOwogICAgIHUxNiBzd2Z3OwogICAgIERFQlVHRlVOQygiZTEwMDBfcmVhZF9rbXJuX3JlZyIpOwogCiAgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pICYmCi0gICAgICAgIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpKSB7CisgICAgICAgIChlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSkgewogICAgICAgICBzd2Z3ID0gRTEwMDBfU1dGV19QSFkxX1NNOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN3ZncgPSBFMTAwMF9TV0ZXX1BIWTBfU007CkBAIC0zNzQ1LDI4ICszNzA5LDI1IEBACiAgICAgcmVnX3ZhbCA9ICgocmVnX2FkZHIgPDwgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfU0hJRlQpICYKICAgICAgICAgICAgICAgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVQpIHwKICAgICAgICAgICAgICAgRTEwMDBfS1VNQ1RSTFNUQV9SRU47Ci0gICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBLVU1DVFJMU1RBLCByZWdfdmFsKTsKKyAgICBldzMyKEtVTUNUUkxTVEEsIHJlZ192YWwpOwogICAgIHVkZWxheSgyKTsKIAogICAgIC8qIFJlYWQgdGhlIGRhdGEgcmV0dXJuZWQgKi8KLSAgICByZWdfdmFsID0gRTEwMDBfUkVBRF9SRUcoaHcsIEtVTUNUUkxTVEEpOworICAgIHJlZ192YWwgPSBlcjMyKEtVTUNUUkxTVEEpOwogICAgICpkYXRhID0gKHUxNilyZWdfdmFsOwogCiAgICAgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2UoaHcsIHN3ZncpOwogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCi1zdGF0aWMgczMyCi1lMTAwMF93cml0ZV9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgdTMyIHJlZ19hZGRyLAotICAgICAgICAgICAgICAgICAgICAgdTE2IGRhdGEpCitzdGF0aWMgczMyIGUxMDAwX3dyaXRlX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWdfYWRkciwgdTE2IGRhdGEpCiB7CiAgICAgdTMyIHJlZ192YWw7CiAgICAgdTE2IHN3Znc7CiAgICAgREVCVUdGVU5DKCJlMTAwMF93cml0ZV9rbXJuX3JlZyIpOwogCiAgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pICYmCi0gICAgICAgIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpKSB7CisgICAgICAgIChlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSkgewogICAgICAgICBzd2Z3ID0gRTEwMDBfU1dGV19QSFkxX1NNOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN3ZncgPSBFMTAwMF9TV0ZXX1BIWTBfU007CkBAIC0zNzc2LDcgKzM3MzcsNyBAQAogCiAgICAgcmVnX3ZhbCA9ICgocmVnX2FkZHIgPDwgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfU0hJRlQpICYKICAgICAgICAgICAgICAgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVQpIHwgZGF0YTsKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIEtVTUNUUkxTVEEsIHJlZ192YWwpOworICAgIGV3MzIoS1VNQ1RSTFNUQSwgcmVnX3ZhbCk7CiAgICAgdWRlbGF5KDIpOwogCiAgICAgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2UoaHcsIHN3ZncpOwpAQCAtMzc4OCw4ICszNzQ5LDcgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfcGh5X2h3X3Jlc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfcGh5X2h3X3Jlc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIGN0cmwsIGN0cmxfZXh0OwogICAgIHUzMiBsZWRfY3RybDsKQEAgLTM4MDgsNyArMzc2OCw3IEBACiAKICAgICBpZiAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDMpIHsKICAgICAgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pICYmCi0gICAgICAgICAgICAoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSkgeworICAgICAgICAgICAgKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpKSB7CiAgICAgICAgICAgICBzd2Z3ID0gRTEwMDBfU1dGV19QSFkxX1NNOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3dmdyA9IEUxMDAwX1NXRldfUEhZMF9TTTsKQEAgLTM4MjMsMTcgKzM3ODMsMTcgQEAKICAgICAgICAgICogYW5kIGRlYXNzZXJ0LiAgRm9yIGUxMDAwXzgyNTcxIGhhcmR3YXJlIGFuZCBsYXRlciwgd2UgaW5zdGVhZCBkZWxheQogICAgICAgICAgKiBmb3IgNTB1cyBiZXR3ZWVuIGFuZCAxMG1zIGFmdGVyIHRoZSBkZWFzc2VydGlvbi4KICAgICAgICAgICovCi0gICAgICAgIGN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCB8IEUxMDAwX0NUUkxfUEhZX1JTVCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgY3RybCA9IGVyMzIoQ1RSTCk7CisgICAgICAgIGV3MzIoQ1RSTCwgY3RybCB8IEUxMDAwX0NUUkxfUEhZX1JTVCk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAKICAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxKQogICAgICAgICAgICAgbXNsZWVwKDEwKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdWRlbGF5KDEwMCk7CiAKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgICAgICBldzMyKENUUkwsIGN0cmwpOworICAgICAgICBFMTAwMF9XUklURV9GTFVTSCgpOwogCiAgICAgICAgIGlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpCiAgICAgICAgICAgICBtZGVsYXkoMTApOwpAQCAtMzg0MywyNCArMzgwMywyNCBAQAogICAgICAgICAvKiBSZWFkIHRoZSBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCBSZWdpc3RlciwgYXNzZXJ0IHRoZSBQSFlfUkVTRVRfRElSCiAgICAgICAgICAqIGJpdCB0byBwdXQgdGhlIFBIWSBpbnRvIHJlc2V0LiBUaGVuLCB0YWtlIGl0IG91dCBvZiByZXNldC4KICAgICAgICAgICovCi0gICAgICAgIGN0cmxfZXh0ID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkxfRVhUKTsKKyAgICAgICAgY3RybF9leHQgPSBlcjMyKENUUkxfRVhUKTsKICAgICAgICAgY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfU0RQNF9ESVI7CiAgICAgICAgIGN0cmxfZXh0ICY9IH5FMTAwMF9DVFJMX0VYVF9TRFA0X0RBVEE7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTF9FWFQsIGN0cmxfZXh0KTsKLSAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgICAgICBldzMyKENUUkxfRVhULCBjdHJsX2V4dCk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgICAgIG1zbGVlcCgxMCk7CiAgICAgICAgIGN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfRVhUX1NEUDRfREFUQTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgY3RybF9leHQpOwotICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgIGV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICB9CiAgICAgdWRlbGF5KDE1MCk7CiAKICAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MSkgfHwgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykpIHsKICAgICAgICAgLyogQ29uZmlndXJlIGFjdGl2aXR5IExFRCBhZnRlciBQSFkgcmVzZXQgKi8KLSAgICAgICAgbGVkX2N0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgTEVEQ1RMKTsKKyAgICAgICAgbGVkX2N0cmwgPSBlcjMyKExFRENUTCk7CiAgICAgICAgIGxlZF9jdHJsICY9IElHUF9BQ1RJVklUWV9MRURfTUFTSzsKICAgICAgICAgbGVkX2N0cmwgfD0gKElHUF9BQ1RJVklUWV9MRURfRU5BQkxFIHwgSUdQX0xFRDNfTU9ERSk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgTEVEQ1RMLCBsZWRfY3RybCk7CisgICAgICAgIGV3MzIoTEVEQ1RMLCBsZWRfY3RybCk7CiAgICAgfQogCiAgICAgLyogV2FpdCBmb3IgRlcgdG8gZmluaXNoIFBIWSBjb25maWd1cmF0aW9uLiAqLwpAQCAtMzg4Miw4ICszODQyLDcgQEAKICoKICogU2V0cyBiaXQgMTUgb2YgdGhlIE1JSSBDb250cm9sIHJlZ2lzdGVyCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zMzIKLWUxMDAwX3BoeV9yZXNldChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorczMyIGUxMDAwX3BoeV9yZXNldChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiByZXRfdmFsOwogICAgIHUxNiBwaHlfZGF0YTsKQEAgLTM5MzQsOCArMzg5Myw3IEBACiAqCiAqIGh3IC0gc3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1lMTAwMF9waHlfcG93ZXJkb3duX3dvcmthcm91bmQoc3RydWN0IGUxMDAwX2h3ICpodykKK3ZvaWQgZTEwMDBfcGh5X3Bvd2VyZG93bl93b3JrYXJvdW5kKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgczMyIHJlZzsKICAgICB1MTYgcGh5X2RhdGE7CkBAIC0zOTQ4LDggKzM5MDYsOCBAQAogCiAgICAgZG8gewogICAgICAgICAvKiBEaXNhYmxlIGxpbmsgKi8KLSAgICAgICAgcmVnID0gRTEwMDBfUkVBRF9SRUcoaHcsIFBIWV9DVFJMKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBQSFlfQ1RSTCwgcmVnIHwgRTEwMDBfUEhZX0NUUkxfR0JFX0RJU0FCTEUgfAorICAgICAgICByZWcgPSBlcjMyKFBIWV9DVFJMKTsKKyAgICAgICAgZXczMihQSFlfQ1RSTCwgcmVnIHwgRTEwMDBfUEhZX0NUUkxfR0JFX0RJU0FCTEUgfAogICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfUEhZX0NUUkxfTk9ORDBBX0dCRV9ESVNBQkxFKTsKIAogICAgICAgICAvKiBXcml0ZSBWUiBwb3dlci1kb3duIGVuYWJsZSAtIGJpdHMgOTo4IHNob3VsZCBiZSAxMGIgKi8KQEAgLTM5NjQsOCArMzkyMiw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvKiBJc3N1ZSBQSFkgcmVzZXQgYW5kIHJlcGVhdCBhdCBtb3N0IG9uZSBtb3JlIHRpbWUgKi8KLSAgICAgICAgcmVnID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIHJlZyB8IEUxMDAwX0NUUkxfUEhZX1JTVCk7CisgICAgICAgIHJlZyA9IGVyMzIoQ1RSTCk7CisgICAgICAgIGV3MzIoQ1RSTCwgcmVnIHwgRTEwMDBfQ1RSTF9QSFlfUlNUKTsKICAgICAgICAgcmV0cnkrKzsKICAgICB9IHdoaWxlIChyZXRyeSk7CiAKQEAgLTM5ODcsOCArMzk0NSw3IEBACiAqCiAqIGh3IC0gc3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9rdW1lcmFuX2xvY2tfbG9zc193b3JrYXJvdW5kKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2t1bWVyYW5fbG9ja19sb3NzX3dvcmthcm91bmQoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICBzMzIgcmVnOwpAQCAtNDAyNCw4ICszOTgxLDggQEAKICAgICAgICAgICAgIG1kZWxheSg1KTsKICAgICAgICAgfQogICAgICAgICAvKiBEaXNhYmxlIEdpZ0UgbGluayBuZWdvdGlhdGlvbiAqLwotICAgICAgICByZWcgPSBFMTAwMF9SRUFEX1JFRyhodywgUEhZX0NUUkwpOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFBIWV9DVFJMLCByZWcgfCBFMTAwMF9QSFlfQ1RSTF9HQkVfRElTQUJMRSB8CisgICAgICAgIHJlZyA9IGVyMzIoUEhZX0NUUkwpOworICAgICAgICBldzMyKFBIWV9DVFJMLCByZWcgfCBFMTAwMF9QSFlfQ1RSTF9HQkVfRElTQUJMRSB8CiAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9QSFlfQ1RSTF9OT05EMEFfR0JFX0RJU0FCTEUpOwogCiAgICAgICAgIC8qIHVuYWJsZSB0byBhY3F1aXJlIFBDUyBsb2NrICovCkBAIC00MDQwLDggKzM5OTcsNyBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfZGV0ZWN0X2dpZ19waHkoc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyBzMzIgZTEwMDBfZGV0ZWN0X2dpZ19waHkoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgcGh5X2luaXRfc3RhdHVzLCByZXRfdmFsOwogICAgIHUxNiBwaHlfaWRfaGlnaCwgcGh5X2lkX2xvdzsKQEAgLTQwNzYsMTQgKzQwMzIsMTQgQEAKICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKLSAgICBody0+cGh5X2lkID0gKHUzMikgKHBoeV9pZF9oaWdoIDw8IDE2KTsKKyAgICBody0+cGh5X2lkID0gKHUzMikocGh5X2lkX2hpZ2ggPDwgMTYpOwogICAgIHVkZWxheSgyMCk7CiAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0lEMiwgJnBoeV9pZF9sb3cpOwogICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAotICAgIGh3LT5waHlfaWQgfD0gKHUzMikgKHBoeV9pZF9sb3cgJiBQSFlfUkVWSVNJT05fTUFTSyk7Ci0gICAgaHctPnBoeV9yZXZpc2lvbiA9ICh1MzIpIHBoeV9pZF9sb3cgJiB+UEhZX1JFVklTSU9OX01BU0s7CisgICAgaHctPnBoeV9pZCB8PSAodTMyKShwaHlfaWRfbG93ICYgUEhZX1JFVklTSU9OX01BU0spOworICAgIGh3LT5waHlfcmV2aXNpb24gPSAodTMyKXBoeV9pZF9sb3cgJiB+UEhZX1JFVklTSU9OX01BU0s7CiAKICAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgIGNhc2UgZTEwMDBfODI1NDM6CkBAIC00MTM2LDggKzQwOTIsNyBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfcGh5X3Jlc2V0X2RzcChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9waHlfcmVzZXRfZHNwKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgczMyIHJldF92YWw7CiAgICAgREVCVUdGVU5DKCJlMTAwMF9waHlfcmVzZXRfZHNwIik7CkBAIC00MTYzLDkgKzQxMTgsOCBAQAogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKiBwaHlfaW5mbyAtIFBIWSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX3BoeV9pZ3BfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbykKK3N0YXRpYyBzMzIgZTEwMDBfcGh5X2lncF9nZXRfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAorCQkJCSAgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbykKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICB1MTYgcGh5X2RhdGEsIG1pbl9sZW5ndGgsIG1heF9sZW5ndGgsIGF2ZXJhZ2U7CkBAIC00MjQwLDkgKzQxOTQsOCBAQAogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKiBwaHlfaW5mbyAtIFBIWSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX3BoeV9pZmVfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbykKK3N0YXRpYyBzMzIgZTEwMDBfcGh5X2lmZV9nZXRfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAorCQkJCSAgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbykKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICB1MTYgcGh5X2RhdGE7CkBAIC00MjkwLDkgKzQyNDMsOCBAQAogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKiBwaHlfaW5mbyAtIFBIWSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX3BoeV9tODhfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbykKK3N0YXRpYyBzMzIgZTEwMDBfcGh5X204OF9nZXRfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAorCQkJCSAgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbykKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICB1MTYgcGh5X2RhdGE7CkBAIC00MzY5LDkgKzQzMjEsNyBAQAogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKiBwaHlfaW5mbyAtIFBIWSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfcGh5X2dldF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbykKK3MzMiBlMTAwMF9waHlfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbykKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICB1MTYgcGh5X2RhdGE7CkBAIC00NDE1LDggKzQzNjUsNyBAQAogICAgICAgICByZXR1cm4gZTEwMDBfcGh5X204OF9nZXRfaW5mbyhodywgcGh5X2luZm8pOwogfQogCi1zMzIKLWUxMDAwX3ZhbGlkYXRlX21kaV9zZXR0aW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfdmFsaWRhdGVfbWRpX3NldHRpbmcoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBERUJVR0ZVTkMoImUxMDAwX3ZhbGlkYXRlX21kaV9zZXR0aW5ncyIpOwogCkBAIC00NDM2LDExICs0Mzg1LDEwIEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfaW5pdF9lZXByb21fcGFyYW1zKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfaW5pdF9lZXByb21fcGFyYW1zKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgc3RydWN0IGUxMDAwX2VlcHJvbV9pbmZvICplZXByb20gPSAmaHctPmVlcHJvbTsKLSAgICB1MzIgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKyAgICB1MzIgZWVjZCA9IGVyMzIoRUVDRCk7CiAgICAgczMyIHJldF92YWwgPSBFMTAwMF9TVUNDRVNTOwogICAgIHUxNiBlZXByb21fc2l6ZTsKIApAQCAtNDU0Miw3ICs0NDkwLDcgQEAKICAgICAgICAgICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBBdXRvbm9tb3VzIEZMQVNIIHVwZGF0ZSBiaXQgaXMgY2xlYXJlZCBkdWUgdG8KICAgICAgICAgICAgICAqIEZsYXNoIHVwZGF0ZSBpc3N1ZSBvbiBwYXJ0cyB3aGljaCB1c2UgYSBGTEFTSCBmb3IgTlZNLiAqLwogICAgICAgICAgICAgZWVjZCAmPSB+RTEwMDBfRUVDRF9BVVBERU47Ci0gICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworICAgICAgICAgICAgZXczMihFRUNELCBlZWNkKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgpAQCAtNDYyNiwxNiArNDU3NCwxNCBAQAogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqIGVlY2QgLSBFRUNEJ3MgY3VycmVudCB2YWx1ZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWUxMDAwX3JhaXNlX2VlX2NsayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgIHUzMiAqZWVjZCkKK3N0YXRpYyB2b2lkIGUxMDAwX3JhaXNlX2VlX2NsayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKmVlY2QpCiB7CiAgICAgLyogUmFpc2UgdGhlIGNsb2NrIGlucHV0IHRvIHRoZSBFRVBST00gKGJ5IHNldHRpbmcgdGhlIFNLIGJpdCksIGFuZCB0aGVuCiAgICAgICogd2FpdCA8ZGVsYXk+IG1pY3Jvc2Vjb25kcy4KICAgICAgKi8KICAgICAqZWVjZCA9ICplZWNkIHwgRTEwMDBfRUVDRF9TSzsKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsICplZWNkKTsKLSAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgZXczMihFRUNELCAqZWVjZCk7CisgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICB1ZGVsYXkoaHctPmVlcHJvbS5kZWxheV91c2VjKTsKIH0KIApAQCAtNDY0NSwxNiArNDU5MSwxNCBAQAogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqIGVlY2QgLSBFRUNEJ3MgY3VycmVudCB2YWx1ZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWUxMDAwX2xvd2VyX2VlX2NsayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgIHUzMiAqZWVjZCkKK3N0YXRpYyB2b2lkIGUxMDAwX2xvd2VyX2VlX2NsayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKmVlY2QpCiB7CiAgICAgLyogTG93ZXIgdGhlIGNsb2NrIGlucHV0IHRvIHRoZSBFRVBST00gKGJ5IGNsZWFyaW5nIHRoZSBTSyBiaXQpLCBhbmQgdGhlbgogICAgICAqIHdhaXQgNTAgbWljcm9zZWNvbmRzLgogICAgICAqLwogICAgICplZWNkID0gKmVlY2QgJiB+RTEwMDBfRUVDRF9TSzsKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsICplZWNkKTsKLSAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgZXczMihFRUNELCAqZWVjZCk7CisgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICB1ZGVsYXkoaHctPmVlcHJvbS5kZWxheV91c2VjKTsKIH0KIApAQCAtNDY2NSwxMCArNDYwOSw3IEBACiAgKiBkYXRhIC0gZGF0YSB0byBzZW5kIHRvIHRoZSBFRVBST00KICAqIGNvdW50IC0gbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgb3V0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAotZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNvdW50KQorc3RhdGljIHZvaWQgZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IGRhdGEsIHUxNiBjb3VudCkKIHsKICAgICBzdHJ1Y3QgZTEwMDBfZWVwcm9tX2luZm8gKmVlcHJvbSA9ICZody0+ZWVwcm9tOwogICAgIHUzMiBlZWNkOwpAQCAtNDY3OSw3ICs0NjIwLDcgQEAKICAgICAgKiBJbiBvcmRlciB0byBkbyB0aGlzLCAiZGF0YSIgbXVzdCBiZSBicm9rZW4gZG93biBpbnRvIGJpdHMuCiAgICAgICovCiAgICAgbWFzayA9IDB4MDEgPDwgKGNvdW50IC0gMSk7Ci0gICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKyAgICBlZWNkID0gZXIzMihFRUNEKTsKICAgICBpZiAoZWVwcm9tLT50eXBlID09IGUxMDAwX2VlcHJvbV9taWNyb3dpcmUpIHsKICAgICAgICAgZWVjZCAmPSB+RTEwMDBfRUVDRF9ETzsKICAgICB9IGVsc2UgaWYgKGVlcHJvbS0+dHlwZSA9PSBlMTAwMF9lZXByb21fc3BpKSB7CkBAIC00Njk2LDggKzQ2MzcsOCBAQAogICAgICAgICBpZiAoZGF0YSAmIG1hc2spCiAgICAgICAgICAgICBlZWNkIHw9IEUxMDAwX0VFQ0RfREk7CiAKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgICAgICBldzMyKEVFQ0QsIGVlY2QpOworICAgICAgICBFMTAwMF9XUklURV9GTFVTSCgpOwogCiAgICAgICAgIHVkZWxheShlZXByb20tPmRlbGF5X3VzZWMpOwogCkBAIC00NzEwLDcgKzQ2NTEsNyBAQAogCiAgICAgLyogV2UgbGVhdmUgdGhlICJESSIgYml0IHNldCB0byAiMCIgd2hlbiB3ZSBsZWF2ZSB0aGlzIHJvdXRpbmUuICovCiAgICAgZWVjZCAmPSB+RTEwMDBfRUVDRF9ESTsKLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworICAgIGV3MzIoRUVDRCwgZWVjZCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ3MTgsOSArNDY1OSw3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB1MTYKLWUxMDAwX3NoaWZ0X2luX2VlX2JpdHMoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNvdW50KQorc3RhdGljIHUxNiBlMTAwMF9zaGlmdF9pbl9lZV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBjb3VudCkKIHsKICAgICB1MzIgZWVjZDsKICAgICB1MzIgaTsKQEAgLTQ3MzMsNyArNDY3Miw3IEBACiAgICAgICogYWx3YXlzIGJlIGNsZWFyLgogICAgICAqLwogCi0gICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKyAgICBlZWNkID0gZXIzMihFRUNEKTsKIAogICAgIGVlY2QgJj0gfihFMTAwMF9FRUNEX0RPIHwgRTEwMDBfRUVDRF9ESSk7CiAgICAgZGF0YSA9IDA7CkBAIC00NzQyLDcgKzQ2ODEsNyBAQAogICAgICAgICBkYXRhID0gZGF0YSA8PCAxOwogICAgICAgICBlMTAwMF9yYWlzZV9lZV9jbGsoaHcsICZlZWNkKTsKIAotICAgICAgICBlZWNkID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFQ0QpOworICAgICAgICBlZWNkID0gZXIzMihFRUNEKTsKIAogICAgICAgICBlZWNkICY9IH4oRTEwMDBfRUVDRF9ESSk7CiAgICAgICAgIGlmIChlZWNkICYgRTEwMDBfRUVDRF9ETykKQEAgLTQ3NjIsOCArNDcwMSw3IEBACiAgKiBMb3dlcnMgRUVQUk9NIGNsb2NrLiBDbGVhcnMgaW5wdXQgcGluLiBTZXRzIHRoZSBjaGlwIHNlbGVjdCBwaW4uIFRoaXMKICAqIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGlzc3VpbmcgYSBjb21tYW5kIHRvIHRoZSBFRVBST00uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9hY3F1aXJlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9hY3F1aXJlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHN0cnVjdCBlMTAwMF9lZXByb21faW5mbyAqZWVwcm9tID0gJmh3LT5lZXByb207CiAgICAgdTMyIGVlY2QsIGk9MDsKQEAgLTQ3NzIsMjMgKzQ3MTAsMjMgQEAKIAogICAgIGlmIChlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShodywgRTEwMDBfU1dGV19FRVBfU00pKQogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9TV0ZXX1NZTkM7Ci0gICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKyAgICBlZWNkID0gZXIzMihFRUNEKTsKIAogICAgIGlmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfODI1NzMpIHsKICAgICAgICAgLyogUmVxdWVzdCBFRVBST00gQWNjZXNzICovCiAgICAgICAgIGlmIChody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0NCkgewogICAgICAgICAgICAgZWVjZCB8PSBFMTAwMF9FRUNEX1JFUTsKLSAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7Ci0gICAgICAgICAgICBlZWNkID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFQ0QpOworICAgICAgICAgICAgZXczMihFRUNELCBlZWNkKTsKKyAgICAgICAgICAgIGVlY2QgPSBlcjMyKEVFQ0QpOwogICAgICAgICAgICAgd2hpbGUgKCghKGVlY2QgJiBFMTAwMF9FRUNEX0dOVCkpICYmCiAgICAgICAgICAgICAgICAgICAoaSA8IEUxMDAwX0VFUFJPTV9HUkFOVF9BVFRFTVBUUykpIHsKICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICAgdWRlbGF5KDUpOwotICAgICAgICAgICAgICAgIGVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CisgICAgICAgICAgICAgICAgZWVjZCA9IGVyMzIoRUVDRCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIShlZWNkICYgRTEwMDBfRUVDRF9HTlQpKSB7CiAgICAgICAgICAgICAgICAgZWVjZCAmPSB+RTEwMDBfRUVDRF9SRVE7Ci0gICAgICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKKyAgICAgICAgICAgICAgICBldzMyKEVFQ0QsIGVlY2QpOwogICAgICAgICAgICAgICAgIERFQlVHT1VUKCJDb3VsZCBub3QgYWNxdWlyZSBFRVBST00gZ3JhbnRcbiIpOwogICAgICAgICAgICAgICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBFMTAwMF9TV0ZXX0VFUF9TTSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOwpAQCAtNDgwMSwxNSArNDczOSwxNSBAQAogICAgIGlmIChlZXByb20tPnR5cGUgPT0gZTEwMDBfZWVwcm9tX21pY3Jvd2lyZSkgewogICAgICAgICAvKiBDbGVhciBTSyBhbmQgREkgKi8KICAgICAgICAgZWVjZCAmPSB+KEUxMDAwX0VFQ0RfREkgfCBFMTAwMF9FRUNEX1NLKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKKyAgICAgICAgZXczMihFRUNELCBlZWNkKTsKIAogICAgICAgICAvKiBTZXQgQ1MgKi8KICAgICAgICAgZWVjZCB8PSBFMTAwMF9FRUNEX0NTOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworICAgICAgICBldzMyKEVFQ0QsIGVlY2QpOwogICAgIH0gZWxzZSBpZiAoZWVwcm9tLT50eXBlID09IGUxMDAwX2VlcHJvbV9zcGkpIHsKICAgICAgICAgLyogQ2xlYXIgU0sgYW5kIENTICovCiAgICAgICAgIGVlY2QgJj0gfihFMTAwMF9FRUNEX0NTIHwgRTEwMDBfRUVDRF9TSyk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7CisgICAgICAgIGV3MzIoRUVDRCwgZWVjZCk7CiAgICAgICAgIHVkZWxheSgxKTsKICAgICB9CiAKQEAgLTQ4MjEsNDYgKzQ3NTksNDUgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWUxMDAwX3N0YW5kYnlfZWVwcm9tKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgdm9pZCBlMTAwMF9zdGFuZGJ5X2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHN0cnVjdCBlMTAwMF9lZXByb21faW5mbyAqZWVwcm9tID0gJmh3LT5lZXByb207CiAgICAgdTMyIGVlY2Q7CiAKLSAgICBlZWNkID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFQ0QpOworICAgIGVlY2QgPSBlcjMyKEVFQ0QpOwogCiAgICAgaWYgKGVlcHJvbS0+dHlwZSA9PSBlMTAwMF9lZXByb21fbWljcm93aXJlKSB7CiAgICAgICAgIGVlY2QgJj0gfihFMTAwMF9FRUNEX0NTIHwgRTEwMDBfRUVDRF9TSyk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgZXczMihFRUNELCBlZWNkKTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICAgICAgdWRlbGF5KGVlcHJvbS0+ZGVsYXlfdXNlYyk7CiAKICAgICAgICAgLyogQ2xvY2sgaGlnaCAqLwogICAgICAgICBlZWNkIHw9IEUxMDAwX0VFQ0RfU0s7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgZXczMihFRUNELCBlZWNkKTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICAgICAgdWRlbGF5KGVlcHJvbS0+ZGVsYXlfdXNlYyk7CiAKICAgICAgICAgLyogU2VsZWN0IEVFUFJPTSAqLwogICAgICAgICBlZWNkIHw9IEUxMDAwX0VFQ0RfQ1M7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgZXczMihFRUNELCBlZWNkKTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICAgICAgdWRlbGF5KGVlcHJvbS0+ZGVsYXlfdXNlYyk7CiAKICAgICAgICAgLyogQ2xvY2sgbG93ICovCiAgICAgICAgIGVlY2QgJj0gfkUxMDAwX0VFQ0RfU0s7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgZXczMihFRUNELCBlZWNkKTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICAgICAgdWRlbGF5KGVlcHJvbS0+ZGVsYXlfdXNlYyk7CiAgICAgfSBlbHNlIGlmIChlZXByb20tPnR5cGUgPT0gZTEwMDBfZWVwcm9tX3NwaSkgewogICAgICAgICAvKiBUb2dnbGUgQ1MgdG8gZmx1c2ggY29tbWFuZHMgKi8KICAgICAgICAgZWVjZCB8PSBFMTAwMF9FRUNEX0NTOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOwotICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgIGV3MzIoRUVDRCwgZWVjZCk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgICAgIHVkZWxheShlZXByb20tPmRlbGF5X3VzZWMpOwogICAgICAgICBlZWNkICY9IH5FMTAwMF9FRUNEX0NTOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOwotICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgIGV3MzIoRUVDRCwgZWVjZCk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgICAgIHVkZWxheShlZXByb20tPmRlbGF5X3VzZWMpOwogICAgIH0KIH0KQEAgLTQ4NzAsMjAgKzQ4MDcsMTkgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWUxMDAwX3JlbGVhc2VfZWVwcm9tKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgdm9pZCBlMTAwMF9yZWxlYXNlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBlZWNkOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9yZWxlYXNlX2VlcHJvbSIpOwogCi0gICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKyAgICBlZWNkID0gZXIzMihFRUNEKTsKIAogICAgIGlmIChody0+ZWVwcm9tLnR5cGUgPT0gZTEwMDBfZWVwcm9tX3NwaSkgewogICAgICAgICBlZWNkIHw9IEUxMDAwX0VFQ0RfQ1M7ICAvKiBQdWxsIENTIGhpZ2ggKi8KICAgICAgICAgZWVjZCAmPSB+RTEwMDBfRUVDRF9TSzsgLyogTG93ZXIgU0NLICovCiAKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKKyAgICAgICAgZXczMihFRUNELCBlZWNkKTsKIAogICAgICAgICB1ZGVsYXkoaHctPmVlcHJvbS5kZWxheV91c2VjKTsKICAgICB9IGVsc2UgaWYgKGh3LT5lZXByb20udHlwZSA9PSBlMTAwMF9lZXByb21fbWljcm93aXJlKSB7CkBAIC00ODkyLDI1ICs0ODI4LDI1IEBACiAgICAgICAgIC8qIENTIG9uIE1pY3Jvd2lyZSBpcyBhY3RpdmUtaGlnaCAqLwogICAgICAgICBlZWNkICY9IH4oRTEwMDBfRUVDRF9DUyB8IEUxMDAwX0VFQ0RfREkpOwogCi0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7CisgICAgICAgIGV3MzIoRUVDRCwgZWVjZCk7CiAKICAgICAgICAgLyogUmlzaW5nIGVkZ2Ugb2YgY2xvY2sgKi8KICAgICAgICAgZWVjZCB8PSBFMTAwMF9FRUNEX1NLOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOwotICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgIGV3MzIoRUVDRCwgZWVjZCk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgICAgIHVkZWxheShody0+ZWVwcm9tLmRlbGF5X3VzZWMpOwogCiAgICAgICAgIC8qIEZhbGxpbmcgZWRnZSBvZiBjbG9jayAqLwogICAgICAgICBlZWNkICY9IH5FMTAwMF9FRUNEX1NLOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOwotICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgIGV3MzIoRUVDRCwgZWVjZCk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgICAgIHVkZWxheShody0+ZWVwcm9tLmRlbGF5X3VzZWMpOwogICAgIH0KIAogICAgIC8qIFN0b3AgcmVxdWVzdGluZyBFRVBST00gYWNjZXNzICovCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KSB7CiAgICAgICAgIGVlY2QgJj0gfkUxMDAwX0VFQ0RfUkVROwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworICAgICAgICBldzMyKEVFQ0QsIGVlY2QpOwogICAgIH0KIAogICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBFMTAwMF9TV0ZXX0VFUF9TTSk7CkBAIC00OTIxLDggKzQ4NTcsNyBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9zcGlfZWVwcm9tX3JlYWR5KHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX3NwaV9lZXByb21fcmVhZHkoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MTYgcmV0cnlfY291bnQgPSAwOwogICAgIHU4IHNwaV9zdGF0X3JlZzsKQEAgLTQ5NjcsMTEgKzQ5MDIsNyBAQAogICogZGF0YSAtIHdvcmQgcmVhZCBmcm9tIHRoZSBFRVBST00KICAqIHdvcmRzIC0gbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfcmVhZF9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgIHUxNiBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICB1MTYgd29yZHMsCi0gICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpCitzMzIgZTEwMDBfcmVhZF9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRhdGEpCiB7CiAgICAgc3RydWN0IGUxMDAwX2VlcHJvbV9pbmZvICplZXByb20gPSAmaHctPmVlcHJvbTsKICAgICB1MzIgaSA9IDA7CkBAIC01MDY4LDExICs0OTk5LDggQEAKICAqIGRhdGEgLSB3b3JkIHJlYWQgZnJvbSB0aGUgRUVQUk9NCiAgKiB3b3JkcyAtIG51bWJlciBvZiB3b3JkcyB0byByZWFkCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9yZWFkX2VlcHJvbV9lZXJkKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICB1MTYgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgdTE2IHdvcmRzLAotICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKQorc3RhdGljIHMzMiBlMTAwMF9yZWFkX2VlcHJvbV9lZXJkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiB3b3JkcywKKwkJCQkgIHUxNiAqZGF0YSkKIHsKICAgICB1MzIgaSwgZWVyZCA9IDA7CiAgICAgczMyIGVycm9yID0gMDsKQEAgLTUwODEsMTMgKzUwMDksMTMgQEAKICAgICAgICAgZWVyZCA9ICgob2Zmc2V0K2kpIDw8IEUxMDAwX0VFUFJPTV9SV19BRERSX1NISUZUKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfRUVQUk9NX1JXX1JFR19TVEFSVDsKIAotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFUkQsIGVlcmQpOworICAgICAgICBldzMyKEVFUkQsIGVlcmQpOwogICAgICAgICBlcnJvciA9IGUxMDAwX3BvbGxfZWVyZF9lZXdyX2RvbmUoaHcsIEUxMDAwX0VFUFJPTV9QT0xMX1JFQUQpOwogCiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZGF0YVtpXSA9IChFMTAwMF9SRUFEX1JFRyhodywgRUVSRCkgPj4gRTEwMDBfRUVQUk9NX1JXX1JFR19EQVRBKTsKKyAgICAgICAgZGF0YVtpXSA9IChlcjMyKEVFUkQpID4+IEUxMDAwX0VFUFJPTV9SV19SRUdfREFUQSk7CiAKICAgICB9CiAKQEAgLTUxMDIsMTEgKzUwMzAsOCBAQAogICogZGF0YSAtIHdvcmQgcmVhZCBmcm9tIHRoZSBFRVBST00KICAqIHdvcmRzIC0gbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX3dyaXRlX2VlcHJvbV9lZXdyKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgdTE2IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICB1MTYgd29yZHMsCi0gICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKQorc3RhdGljIHMzMiBlMTAwMF93cml0ZV9lZXByb21fZWV3cihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCisJCQkJICAgdTE2ICpkYXRhKQogewogICAgIHUzMiAgICByZWdpc3Rlcl92YWx1ZSA9IDA7CiAgICAgdTMyICAgIGkgICAgICAgICAgICAgID0gMDsKQEAgLTUxMjUsNyArNTA1MCw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVXUiwgcmVnaXN0ZXJfdmFsdWUpOworICAgICAgICBldzMyKEVFV1IsIHJlZ2lzdGVyX3ZhbHVlKTsKIAogICAgICAgICBlcnJvciA9IGUxMDAwX3BvbGxfZWVyZF9lZXdyX2RvbmUoaHcsIEUxMDAwX0VFUFJPTV9QT0xMX1dSSVRFKTsKIApAQCAtNTE0Myw4ICs1MDY4LDcgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfcG9sbF9lZXJkX2Vld3JfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBpbnQgZWVyZCkKK3N0YXRpYyBzMzIgZTEwMDBfcG9sbF9lZXJkX2Vld3JfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBpbnQgZWVyZCkKIHsKICAgICB1MzIgYXR0ZW1wdHMgPSAxMDAwMDA7CiAgICAgdTMyIGksIHJlZyA9IDA7CkBAIC01MTUyLDkgKzUwNzYsOSBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IGF0dGVtcHRzOyBpKyspIHsKICAgICAgICAgaWYgKGVlcmQgPT0gRTEwMDBfRUVQUk9NX1BPTExfUkVBRCkKLSAgICAgICAgICAgIHJlZyA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRVJEKTsKKyAgICAgICAgICAgIHJlZyA9IGVyMzIoRUVSRCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlZyA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRVdSKTsKKyAgICAgICAgICAgIHJlZyA9IGVyMzIoRUVXUik7CiAKICAgICAgICAgaWYgKHJlZyAmIEUxMDAwX0VFUFJPTV9SV19SRUdfRE9ORSkgewogICAgICAgICAgICAgZG9uZSA9IEUxMDAwX1NVQ0NFU1M7CkBAIC01MTcxLDggKzUwOTUsNyBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBib29sCi1lMTAwMF9pc19vbmJvYXJkX252bV9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyBib29sIGUxMDAwX2lzX29uYm9hcmRfbnZtX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBlZWNkID0gMDsKIApAQCAtNTE4Miw3ICs1MTA1LDcgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykgewotICAgICAgICBlZWNkID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFQ0QpOworICAgICAgICBlZWNkID0gZXIzMihFRUNEKTsKIAogICAgICAgICAvKiBJc29sYXRlIGJpdHMgMTUgJiAxNiAqLwogICAgICAgICBlZWNkID0gKChlZWNkID4+IDE1KSAmIDB4MDMpOwpAQCAtNTIwNCw4ICs1MTI3LDcgQEAKICAqIElmIHRoZSB0aGUgc3VtIG9mIHRoZSA2NCAxNiBiaXQgd29yZHMgaXMgMHhCQUJBLCB0aGUgRUVQUk9NJ3MgY2hlY2tzdW0gaXMKICAqIHZhbGlkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotczMyCi1lMTAwMF92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3ICpodykKK3MzMiBlMTAwMF92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MTYgY2hlY2tzdW0gPSAwOwogICAgIHUxNiBpLCBlZXByb21fZGF0YTsKQEAgLTUyNTIsNyArNTE3NCw3IEBACiAgICAgICAgIGNoZWNrc3VtICs9IGVlcHJvbV9kYXRhOwogICAgIH0KIAotICAgIGlmIChjaGVja3N1bSA9PSAodTE2KSBFRVBST01fU1VNKQorICAgIGlmIChjaGVja3N1bSA9PSAodTE2KUVFUFJPTV9TVU0pCiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogICAgIGVsc2UgewogICAgICAgICBERUJVR09VVCgiRUVQUk9NIENoZWNrc3VtIEludmFsaWRcbiIpOwpAQCAtNTI2OCw4ICs1MTkwLDcgQEAKICAqIFN1bXMgdGhlIGZpcnN0IDYzIDE2IGJpdCB3b3JkcyBvZiB0aGUgRUVQUk9NLiBTdWJ0cmFjdHMgdGhlIHN1bSBmcm9tIDB4QkFCQS4KICAqIFdyaXRlcyB0aGUgZGlmZmVyZW5jZSB0byB3b3JkIG9mZnNldCA2MyBvZiB0aGUgRUVQUk9NLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotczMyCi1lMTAwMF91cGRhdGVfZWVwcm9tX2NoZWNrc3VtKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfdXBkYXRlX2VlcHJvbV9jaGVja3N1bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBjdHJsX2V4dDsKICAgICB1MTYgY2hlY2tzdW0gPSAwOwpAQCAtNTI4NCw3ICs1MjA1LDcgQEAKICAgICAgICAgfQogICAgICAgICBjaGVja3N1bSArPSBlZXByb21fZGF0YTsKICAgICB9Ci0gICAgY2hlY2tzdW0gPSAodTE2KSBFRVBST01fU1VNIC0gY2hlY2tzdW07CisgICAgY2hlY2tzdW0gPSAodTE2KUVFUFJPTV9TVU0gLSBjaGVja3N1bTsKICAgICBpZiAoZTEwMDBfd3JpdGVfZWVwcm9tKGh3LCBFRVBST01fQ0hFQ0tTVU1fUkVHLCAxLCAmY2hlY2tzdW0pIDwgMCkgewogICAgICAgICBERUJVR09VVCgiRUVQUk9NIFdyaXRlIEVycm9yXG4iKTsKICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOwpAQCAtNTI5NCw5ICs1MjE1LDkgQEAKICAgICAgICAgZTEwMDBfY29tbWl0X3NoYWRvd19yYW0oaHcpOwogICAgICAgICAvKiBSZWxvYWQgdGhlIEVFUFJPTSwgb3IgZWxzZSBtb2RpZmljYXRpb25zIHdpbGwgbm90IGFwcGVhcgogICAgICAgICAgKiB1bnRpbCBhZnRlciBuZXh0IGFkYXB0ZXIgcmVzZXQuICovCi0gICAgICAgIGN0cmxfZXh0ID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkxfRVhUKTsKKyAgICAgICAgY3RybF9leHQgPSBlcjMyKENUUkxfRVhUKTsKICAgICAgICAgY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfRUVfUlNUOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkxfRVhULCBjdHJsX2V4dCk7CisgICAgICAgIGV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0KTsKICAgICAgICAgbXNsZWVwKDEwKTsKICAgICB9CiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CkBAIC01MzEzLDExICs1MjM0LDcgQEAKICAqIElmIGUxMDAwX3VwZGF0ZV9lZXByb21fY2hlY2tzdW0gaXMgbm90IGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLCB0aGUKICAqIEVFUFJPTSB3aWxsIG1vc3QgbGlrZWx5IGNvbnRhaW4gYW4gaW52YWxpZCBjaGVja3N1bS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfd3JpdGVfZWVwcm9tKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgdTE2IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICB1MTYgd29yZHMsCi0gICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKQorczMyIGUxMDAwX3dyaXRlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSkKIHsKICAgICBzdHJ1Y3QgZTEwMDBfZWVwcm9tX2luZm8gKmVlcHJvbSA9ICZody0+ZWVwcm9tOwogICAgIHMzMiBzdGF0dXMgPSAwOwpAQCAtNTM3MCwxMSArNTI4Nyw4IEBACiAgKiBkYXRhIC0gcG9pbnRlciB0byBhcnJheSBvZiA4IGJpdCB3b3JkcyB0byBiZSB3cml0dGVuIHRvIHRoZSBFRVBST00KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF93cml0ZV9lZXByb21fc3BpKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgIHUxNiBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIHUxNiB3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKQorc3RhdGljIHMzMiBlMTAwMF93cml0ZV9lZXByb21fc3BpKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiB3b3JkcywKKwkJCQkgIHUxNiAqZGF0YSkKIHsKICAgICBzdHJ1Y3QgZTEwMDBfZWVwcm9tX2luZm8gKmVlcHJvbSA9ICZody0+ZWVwcm9tOwogICAgIHUxNiB3aWR4ID0gMDsKQEAgLTU0MzYsMTEgKzUzNTAsOCBAQAogICogZGF0YSAtIHBvaW50ZXIgdG8gYXJyYXkgb2YgMTYgYml0IHdvcmRzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX3dyaXRlX2VlcHJvbV9taWNyb3dpcmUoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpCitzdGF0aWMgczMyIGUxMDAwX3dyaXRlX2VlcHJvbV9taWNyb3dpcmUoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJdTE2IHdvcmRzLCB1MTYgKmRhdGEpCiB7CiAgICAgc3RydWN0IGUxMDAwX2VlcHJvbV9pbmZvICplZXByb20gPSAmaHctPmVlcHJvbTsKICAgICB1MzIgZWVjZDsKQEAgLTU0ODQsNyArNTM5NSw3IEBACiAgICAgICAgICAqIElmIERPIGRvZXMgbm90IGdvIGhpZ2ggaW4gMTAgbWlsbGlzZWNvbmRzLCB0aGVuIGVycm9yIG91dC4KICAgICAgICAgICovCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgewotICAgICAgICAgICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKyAgICAgICAgICAgIGVlY2QgPSBlcjMyKEVFQ0QpOwogICAgICAgICAgICAgaWYgKGVlY2QgJiBFMTAwMF9FRUNEX0RPKSBicmVhazsKICAgICAgICAgICAgIHVkZWxheSg1MCk7CiAgICAgICAgIH0KQEAgLTU1MjMsOCArNTQzNCw3IEBACiAgKiBkYXRhIC0gd29yZCByZWFkIGZyb20gdGhlIEVFUFJPTQogICogd29yZHMgLSBudW1iZXIgb2Ygd29yZHMgdG8gcmVhZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfY29tbWl0X3NoYWRvd19yYW0oc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyBzMzIgZTEwMDBfY29tbWl0X3NoYWRvd19yYW0oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MzIgYXR0ZW1wdHMgPSAxMDAwMDA7CiAgICAgdTMyIGVlY2QgPSAwOwpAQCAtNTUzOSw5ICs1NDQ5LDkgQEAKIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpIHsKICAgICAgICAgLyogVGhlIGZsb3AgcmVnaXN0ZXIgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBmbGFzaCB0eXBlIGlzIFNUTSAqLwotICAgICAgICBmbG9wID0gRTEwMDBfUkVBRF9SRUcoaHcsIEZMT1ApOworICAgICAgICBmbG9wID0gZXIzMihGTE9QKTsKICAgICAgICAgZm9yIChpPTA7IGkgPCBhdHRlbXB0czsgaSsrKSB7Ci0gICAgICAgICAgICBlZWNkID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFQ0QpOworICAgICAgICAgICAgZWVjZCA9IGVyMzIoRUVDRCk7CiAgICAgICAgICAgICBpZiAoKGVlY2QgJiBFMTAwMF9FRUNEX0ZMVVBEKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01NTU0LDE0ICs1NDY0LDE0IEBACiAKICAgICAgICAgLyogSWYgU1RNIG9wY29kZSBsb2NhdGVkIGluIGJpdHMgMTU6OCBvZiBmbG9wLCByZXNldCBmaXJtd2FyZSAqLwogICAgICAgICBpZiAoKGZsb3AgJiAweEZGMDApID09IEUxMDAwX1NUTV9PUENPREUpIHsKLSAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgSElDUiwgRTEwMDBfSElDUl9GV19SRVNFVCk7CisgICAgICAgICAgICBldzMyKEhJQ1IsIEUxMDAwX0hJQ1JfRldfUkVTRVQpOwogICAgICAgICB9CiAKICAgICAgICAgLyogUGVyZm9ybSB0aGUgZmxhc2ggdXBkYXRlICovCi0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCB8IEUxMDAwX0VFQ0RfRkxVUEQpOworICAgICAgICBldzMyKEVFQ0QsIGVlY2QgfCBFMTAwMF9FRUNEX0ZMVVBEKTsKIAogICAgICAgICBmb3IgKGk9MDsgaSA8IGF0dGVtcHRzOyBpKyspIHsKLSAgICAgICAgICAgIGVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CisgICAgICAgICAgICBlZWNkID0gZXIzMihFRUNEKTsKICAgICAgICAgICAgIGlmICgoZWVjZCAmIEUxMDAwX0VFQ0RfRkxVUEQpID09IDApIHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU1NzcsNyArNTQ4Nyw3IEBACiAgICAgICAgIC8qIFdlJ3JlIHdyaXRpbmcgdG8gdGhlIG9wcG9zaXRlIGJhbmsgc28gaWYgd2UncmUgb24gYmFuayAxLAogICAgICAgICAgKiB3cml0ZSB0byBiYW5rIDAgZXRjLiAgV2UgYWxzbyBuZWVkIHRvIGVyYXNlIHRoZSBzZWdtZW50IHRoYXQKICAgICAgICAgICogaXMgZ29pbmcgdG8gYmUgd3JpdHRlbiAqLwotICAgICAgICBpZiAoIShFMTAwMF9SRUFEX1JFRyhodywgRUVDRCkgJiBFMTAwMF9FRUNEX1NFQzFWQUwpKSB7CisgICAgICAgIGlmICghKGVyMzIoRUVDRCkgJiBFMTAwMF9FRUNEX1NFQzFWQUwpKSB7CiAgICAgICAgICAgICBuZXdfYmFua19vZmZzZXQgPSBody0+Zmxhc2hfYmFua19zaXplICogMjsKICAgICAgICAgICAgIG9sZF9iYW5rX29mZnNldCA9IDA7CiAgICAgICAgICAgICBlMTAwMF9lcmFzZV9pY2g4XzRrX3NlZ21lbnQoaHcsIDEpOwpAQCAtNTY4Nyw4ICs1NTk3LDcgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotczMyCi1lMTAwMF9yZWFkX21hY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqIGh3KQorczMyIGUxMDAwX3JlYWRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MTYgb2Zmc2V0OwogICAgIHUxNiBlZXByb21fZGF0YSwgaTsKQEAgLTU3MDEsOCArNTYxMCw4IEBACiAgICAgICAgICAgICBERUJVR09VVCgiRUVQUk9NIFJlYWQgRXJyb3JcbiIpOwogICAgICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOwogICAgICAgICB9Ci0gICAgICAgIGh3LT5wZXJtX21hY19hZGRyW2ldID0gKHU4KSAoZWVwcm9tX2RhdGEgJiAweDAwRkYpOwotICAgICAgICBody0+cGVybV9tYWNfYWRkcltpKzFdID0gKHU4KSAoZWVwcm9tX2RhdGEgPj4gOCk7CisgICAgICAgIGh3LT5wZXJtX21hY19hZGRyW2ldID0gKHU4KShlZXByb21fZGF0YSAmIDB4MDBGRik7CisgICAgICAgIGh3LT5wZXJtX21hY19hZGRyW2krMV0gPSAodTgpKGVlcHJvbV9kYXRhID4+IDgpOwogICAgIH0KIAogICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7CkBAIC01NzEyLDcgKzU2MjEsNyBAQAogICAgIGNhc2UgZTEwMDBfODI1NDZfcmV2XzM6CiAgICAgY2FzZSBlMTAwMF84MjU3MToKICAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgotICAgICAgICBpZiAoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKQorICAgICAgICBpZiAoZXIzMihTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0ZVTkNfMSkKICAgICAgICAgICAgIGh3LT5wZXJtX21hY19hZGRyWzVdIF49IDB4MDE7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU3MzEsOCArNTY0MCw3IEBACiAgKiBvZiB0aGUgcmVjZWl2ZSBhZGRyZXNzcyByZWdpc3RlcnMuIENsZWFycyB0aGUgbXVsdGljYXN0IHRhYmxlLiBBc3N1bWVzCiAgKiB0aGUgcmVjZWl2ZXIgaXMgaW4gcmVzZXQgd2hlbiB0aGUgcm91dGluZSBpcyBjYWxsZWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAotZTEwMDBfaW5pdF9yeF9hZGRycyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHZvaWQgZTEwMDBfaW5pdF9yeF9hZGRycyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBpOwogICAgIHUzMiByYXJfbnVtOwpAQCAtNTc1OCw5ICs1NjY2LDkgQEAKICAgICBERUJVR09VVCgiQ2xlYXJpbmcgUkFSWzEtMTVdXG4iKTsKICAgICBmb3IgKGkgPSAxOyBpIDwgcmFyX251bTsgaSsrKSB7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsIChpIDw8IDEpLCAwKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgICAgICBFMTAwMF9XUklURV9GTFVTSCgpOwogICAgICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCAoKGkgPDwgMSkgKyAxKSwgMCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICB9CiB9CiAKQEAgLTU3NzAsOSArNTY3OCw3IEBACiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICogbWNfYWRkciAtIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyB0byBoYXNoCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11MzIKLWUxMDAwX2hhc2hfbWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgIHU4ICptY19hZGRyKQordTMyIGUxMDAwX2hhc2hfbWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqbWNfYWRkcikKIHsKICAgICB1MzIgaGFzaF92YWx1ZSA9IDA7CiAKQEAgLTU3ODcsMzcgKzU2OTMsMzcgQEAKICAgICBjYXNlIDA6CiAgICAgICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewogICAgICAgICAgICAgLyogWzQ3OjM4XSBpLmUuIDB4MTU4IGZvciBhYm92ZSBleGFtcGxlIGFkZHJlc3MgKi8KLSAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gNikgfCAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IDIpKTsKKyAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gNikgfCAoKCh1MTYpbWNfYWRkcls1XSkgPDwgMikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogWzQ3OjM2XSBpLmUuIDB4NTYzIGZvciBhYm92ZSBleGFtcGxlIGFkZHJlc3MgKi8KLSAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gNCkgfCAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IDQpKTsKKyAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gNCkgfCAoKCh1MTYpbWNfYWRkcls1XSkgPDwgNCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMToKICAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKSB7CiAgICAgICAgICAgICAvKiBbNDY6MzddIGkuZS4gMHgyQjEgZm9yIGFib3ZlIGV4YW1wbGUgYWRkcmVzcyAqLwotICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiA1KSB8ICgoKHUxNikgbWNfYWRkcls1XSkgPDwgMykpOworICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiA1KSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCAzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBbNDY6MzVdIGkuZS4gMHhBQzYgZm9yIGFib3ZlIGV4YW1wbGUgYWRkcmVzcyAqLwotICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiAzKSB8ICgoKHUxNikgbWNfYWRkcls1XSkgPDwgNSkpOworICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiAzKSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCA1KSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgogICAgICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKICAgICAgICAgICAgIC8qWzQ1OjM2XSBpLmUuIDB4MTYzIGZvciBhYm92ZSBleGFtcGxlIGFkZHJlc3MgKi8KLSAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gNCkgfCAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IDQpKTsKKyAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gNCkgfCAoKCh1MTYpbWNfYWRkcls1XSkgPDwgNCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogWzQ1OjM0XSBpLmUuIDB4NUQ4IGZvciBhYm92ZSBleGFtcGxlIGFkZHJlc3MgKi8KLSAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gMikgfCAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IDYpKTsKKyAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gMikgfCAoKCh1MTYpbWNfYWRkcls1XSkgPDwgNikpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMzoKICAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKSB7CiAgICAgICAgICAgICAvKiBbNDM6MzRdIGkuZS4gMHgxOEQgZm9yIGFib3ZlIGV4YW1wbGUgYWRkcmVzcyAqLwotICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiAyKSB8ICgoKHUxNikgbWNfYWRkcls1XSkgPDwgNikpOworICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiAyKSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCA2KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBbNDM6MzJdIGkuZS4gMHg2MzQgZm9yIGFib3ZlIGV4YW1wbGUgYWRkcmVzcyAqLwotICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSkgfCAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IDgpKTsKKyAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0pIHwgKCgodTE2KW1jX2FkZHJbNV0pIDw8IDgpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC01ODM1LDkgKzU3NDEsNyBAQAogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqIGhhc2hfdmFsdWUgLSBNdWx0aWNhc3QgYWRkcmVzcyBoYXNoIHZhbHVlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1lMTAwMF9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgIHUzMiBoYXNoX3ZhbHVlKQordm9pZCBlMTAwMF9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKQogewogICAgIHUzMiBoYXNoX2JpdCwgaGFzaF9yZWc7CiAgICAgdTMyIG10YTsKQEAgLTU4NjgsMTIgKzU3NzIsMTIgQEAKICAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NCkgJiYgKChoYXNoX3JlZyAmIDB4MSkgPT0gMSkpIHsKICAgICAgICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHX0FSUkFZKGh3LCBNVEEsIChoYXNoX3JlZyAtIDEpKTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBNVEEsIGhhc2hfcmVnLCBtdGEpOwotICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgTVRBLCAoaGFzaF9yZWcgLSAxKSwgdGVtcCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICB9IGVsc2UgewogICAgICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIE1UQSwgaGFzaF9yZWcsIG10YSk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICB9CiB9CiAKQEAgLTU4ODQsMjAgKzU3ODgsMTYgQEAKICAqIGFkZHIgLSBBZGRyZXNzIHRvIHB1dCBpbnRvIHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcgogICogaW5kZXggLSBSZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXIgdG8gd3JpdGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWUxMDAwX3Jhcl9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgdTggKmFkZHIsCi0gICAgICAgICAgICAgIHUzMiBpbmRleCkKK3ZvaWQgZTEwMDBfcmFyX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqYWRkciwgdTMyIGluZGV4KQogewogICAgIHUzMiByYXJfbG93LCByYXJfaGlnaDsKIAogICAgIC8qIEhXIGV4cGVjdHMgdGhlc2UgaW4gbGl0dGxlIGVuZGlhbiBzbyB3ZSByZXZlcnNlIHRoZSBieXRlIG9yZGVyCiAgICAgICogZnJvbSBuZXR3b3JrIG9yZGVyIChiaWcgZW5kaWFuKSB0byBsaXR0bGUgZW5kaWFuCiAgICAgICovCi0gICAgcmFyX2xvdyA9ICgodTMyKSBhZGRyWzBdIHwKLSAgICAgICAgICAgICAgICgodTMyKSBhZGRyWzFdIDw8IDgpIHwKLSAgICAgICAgICAgICAgICgodTMyKSBhZGRyWzJdIDw8IDE2KSB8ICgodTMyKSBhZGRyWzNdIDw8IDI0KSk7Ci0gICAgcmFyX2hpZ2ggPSAoKHUzMikgYWRkcls0XSB8ICgodTMyKSBhZGRyWzVdIDw8IDgpKTsKKyAgICByYXJfbG93ID0gKCh1MzIpYWRkclswXSB8ICgodTMyKWFkZHJbMV0gPDwgOCkgfAorICAgICAgICAgICAgICAgKCh1MzIpYWRkclsyXSA8PCAxNikgfCAoKHUzMilhZGRyWzNdIDw8IDI0KSk7CisgICAgcmFyX2hpZ2ggPSAoKHUzMilhZGRyWzRdIHwgKCh1MzIpYWRkcls1XSA8PCA4KSk7CiAKICAgICAvKiBEaXNhYmxlIFJ4IGFuZCBmbHVzaCBhbGwgUnggZnJhbWVzIGJlZm9yZSBlbmFibGluZyBSU1MgdG8gYXZvaWQgUngKICAgICAgKiB1bml0IGhhbmcuCkBAIC01OTMwLDkgKzU4MzAsOSBAQAogICAgIH0KIAogICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsIChpbmRleCA8PCAxKSwgcmFyX2xvdyk7Ci0gICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBSQSwgKChpbmRleCA8PCAxKSArIDEpLCByYXJfaGlnaCk7Ci0gICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU5NDIsMTAgKzU4NDIsNyBAQAogICogb2Zmc2V0IC0gT2Zmc2V0IGluIFZMQU4gZmlsZXIgdGFibGUgdG8gd3JpdGUKICAqIHZhbHVlIC0gVmFsdWUgdG8gd3JpdGUgaW50byBWTEFOIGZpbHRlciB0YWJsZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotZTEwMDBfd3JpdGVfdmZ0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICB1MzIgb2Zmc2V0LAotICAgICAgICAgICAgICAgICB1MzIgdmFsdWUpCit2b2lkIGUxMDAwX3dyaXRlX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQogewogICAgIHUzMiB0ZW1wOwogCkBAIC01OTU1LDEyICs1ODUyLDEyIEBACiAgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDQpICYmICgob2Zmc2V0ICYgMHgxKSA9PSAxKSkgewogICAgICAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoaHcsIFZGVEEsIChvZmZzZXQgLSAxKSk7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgVkZUQSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBWRlRBLCAob2Zmc2V0IC0gMSksIHRlbXApOwotICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBWRlRBLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgICAgICBFMTAwMF9XUklURV9GTFVTSCgpOwogICAgIH0KIH0KIApAQCAtNTk2OSw4ICs1ODY2LDcgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWUxMDAwX2NsZWFyX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyB2b2lkIGUxMDAwX2NsZWFyX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MzIgb2Zmc2V0OwogICAgIHUzMiB2ZnRhX3ZhbHVlID0gMDsKQEAgLTU5OTksMTIgKzU4OTUsMTEgQEAKICAgICAgICAgICogbWFuYWdlYWJpbGl0eSB1bml0ICovCiAgICAgICAgIHZmdGFfdmFsdWUgPSAob2Zmc2V0ID09IHZmdGFfb2Zmc2V0KSA/IHZmdGFfYml0X2luX3JlZyA6IDA7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgVkZUQSwgb2Zmc2V0LCB2ZnRhX3ZhbHVlKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgICAgICBFMTAwMF9XUklURV9GTFVTSCgpOwogICAgIH0KIH0KIAotc3RhdGljIHMzMgotZTEwMDBfaWRfbGVkX2luaXQoc3RydWN0IGUxMDAwX2h3ICogaHcpCitzdGF0aWMgczMyIGUxMDAwX2lkX2xlZF9pbml0KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIGxlZGN0bDsKICAgICBjb25zdCB1MzIgbGVkY3RsX21hc2sgPSAweDAwMDAwMEZGOwpAQCAtNjAyMCw3ICs1OTE1LDcgQEAKICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAgICAgfQogCi0gICAgbGVkY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIExFRENUTCk7CisgICAgbGVkY3RsID0gZXIzMihMRURDVEwpOwogICAgIGh3LT5sZWRjdGxfZGVmYXVsdCA9IGxlZGN0bDsKICAgICBody0+bGVkY3RsX21vZGUxID0gaHctPmxlZGN0bF9kZWZhdWx0OwogICAgIGh3LT5sZWRjdGxfbW9kZTIgPSBody0+bGVkY3RsX2RlZmF1bHQ7CkBAIC02MDg2LDggKzU5ODEsNyBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zMzIKLWUxMDAwX3NldHVwX2xlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorczMyIGUxMDAwX3NldHVwX2xlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBsZWRjdGw7CiAgICAgczMyIHJldF92YWwgPSBFMTAwMF9TVUNDRVNTOwpAQCAtNjExOCw3ICs2MDEyLDcgQEAKICAgICAgICAgLyogRmFsbCBUaHJvdWdoICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHsKLSAgICAgICAgICAgIGxlZGN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBMRURDVEwpOworICAgICAgICAgICAgbGVkY3RsID0gZXIzMihMRURDVEwpOwogICAgICAgICAgICAgLyogU2F2ZSBjdXJyZW50IExFRENUTCBzZXR0aW5ncyAqLwogICAgICAgICAgICAgaHctPmxlZGN0bF9kZWZhdWx0ID0gbGVkY3RsOwogICAgICAgICAgICAgLyogVHVybiBvZmYgTEVEMCAqLwpAQCAtNjEyNyw5ICs2MDIxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0xFRENUTF9MRUQwX01PREVfTUFTSyk7CiAgICAgICAgICAgICBsZWRjdGwgfD0gKEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PRkYgPDwKICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfTEVEQ1RMX0xFRDBfTU9ERV9TSElGVCk7Ci0gICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIExFRENUTCwgbGVkY3RsKTsKKyAgICAgICAgICAgIGV3MzIoTEVEQ1RMLCBsZWRjdGwpOwogICAgICAgICB9IGVsc2UgaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQotICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBMRURDVEwsIGh3LT5sZWRjdGxfbW9kZTEpOworICAgICAgICAgICAgZXczMihMRURDVEwsIGh3LT5sZWRjdGxfbW9kZTEpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTYxNDUsOCArNjAzOSw3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfYmxpbmtfbGVkX3N0YXJ0KHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfYmxpbmtfbGVkX3N0YXJ0KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgczE2ICBpOwogICAgIHUzMiBsZWRjdGxfYmxpbmsgPSAwOwpAQCAtNjE3MCw3ICs2MDYzLDcgQEAKICAgICAgICAgICAgICAgICBsZWRjdGxfYmxpbmsgfD0gKEUxMDAwX0xFRENUTF9MRUQwX0JMSU5LIDw8IChpICogOCkpOwogICAgIH0KIAotICAgIEUxMDAwX1dSSVRFX1JFRyhodywgTEVEQ1RMLCBsZWRjdGxfYmxpbmspOworICAgIGV3MzIoTEVEQ1RMLCBsZWRjdGxfYmxpbmspOwogCiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CkBAIC02MTgwLDggKzYwNzMsNyBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zMzIKLWUxMDAwX2NsZWFudXBfbGVkKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfY2xlYW51cF9sZWQoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgcmV0X3ZhbCA9IEUxMDAwX1NVQ0NFU1M7CiAKQEAgLTYyMTAsNyArNjEwMiw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAvKiBSZXN0b3JlIExFRENUTCBzZXR0aW5ncyAqLwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIExFRENUTCwgaHctPmxlZGN0bF9kZWZhdWx0KTsKKyAgICAgICAgZXczMihMRURDVEwsIGh3LT5sZWRjdGxfZGVmYXVsdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjIyMiwxMCArNjExNCw5IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXMzMgotZTEwMDBfbGVkX29uKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfbGVkX29uKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdTMyIGN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCk7CisgICAgdTMyIGN0cmwgPSBlcjMyKENUUkwpOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9sZWRfb24iKTsKIApAQCAtNjI1NywxMyArNjE0OCwxMyBAQAogICAgICAgICAgICAgZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUZFX1BIWV9TUEVDSUFMX0NPTlRST0xfTEVELAogICAgICAgICAgICAgICAgICAoSUZFX1BTQ0xfUFJPQkVfTU9ERSB8IElGRV9QU0NMX1BST0JFX0xFRFNfT04pKTsKICAgICAgICAgfSBlbHNlIGlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewotICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBMRURDVEwsIGh3LT5sZWRjdGxfbW9kZTIpOworICAgICAgICAgICAgZXczMihMRURDVEwsIGh3LT5sZWRjdGxfbW9kZTIpOwogICAgICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKKyAgICBldzMyKENUUkwsIGN0cmwpOwogCiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CkBAIC02MjczLDEwICs2MTY0LDkgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotczMyCi1lMTAwMF9sZWRfb2ZmKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfbGVkX29mZihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHUzMiBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOworICAgIHUzMiBjdHJsID0gZXIzMihDVFJMKTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfbGVkX29mZiIpOwogCkBAIC02MzA4LDEzICs2MTk4LDEzIEBACiAgICAgICAgICAgICBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJRkVfUEhZX1NQRUNJQUxfQ09OVFJPTF9MRUQsCiAgICAgICAgICAgICAgICAgIChJRkVfUFNDTF9QUk9CRV9NT0RFIHwgSUZFX1BTQ0xfUFJPQkVfTEVEU19PRkYpKTsKICAgICAgICAgfSBlbHNlIGlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewotICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBMRURDVEwsIGh3LT5sZWRjdGxfbW9kZTEpOworICAgICAgICAgICAgZXczMihMRURDVEwsIGh3LT5sZWRjdGxfbW9kZTEpOwogICAgICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKKyAgICBldzMyKENUUkwsIGN0cmwpOwogCiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CkBAIC02MzI0LDk4ICs2MjE0LDk3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCi1lMTAwMF9jbGVhcl9od19jbnRycyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHZvaWQgZTEwMDBfY2xlYXJfaHdfY250cnMoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB2b2xhdGlsZSB1MzIgdGVtcDsKIAotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1JDRVJSUyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBTWU1FUlJTKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1QQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBTQ0MpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgRUNPTCk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBNQ0MpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgTEFURUNPTCk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDT0xDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIERDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNFQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSTEVDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFhPTlJYQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBYT05UWEMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgWE9GRlJYQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBYT0ZGVFhDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIEZDUlVDKTsKKyAgICB0ZW1wID0gZXIzMihDUkNFUlJTKTsKKyAgICB0ZW1wID0gZXIzMihTWU1FUlJTKTsKKyAgICB0ZW1wID0gZXIzMihNUEMpOworICAgIHRlbXAgPSBlcjMyKFNDQyk7CisgICAgdGVtcCA9IGVyMzIoRUNPTCk7CisgICAgdGVtcCA9IGVyMzIoTUNDKTsKKyAgICB0ZW1wID0gZXIzMihMQVRFQ09MKTsKKyAgICB0ZW1wID0gZXIzMihDT0xDKTsKKyAgICB0ZW1wID0gZXIzMihEQyk7CisgICAgdGVtcCA9IGVyMzIoU0VDKTsKKyAgICB0ZW1wID0gZXIzMihSTEVDKTsKKyAgICB0ZW1wID0gZXIzMihYT05SWEMpOworICAgIHRlbXAgPSBlcjMyKFhPTlRYQyk7CisgICAgdGVtcCA9IGVyMzIoWE9GRlJYQyk7CisgICAgdGVtcCA9IGVyMzIoWE9GRlRYQyk7CisgICAgdGVtcCA9IGVyMzIoRkNSVUMpOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKSB7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkM2NCk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkMxMjcpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgUFJDMjU1KTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFBSQzUxMSk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkMxMDIzKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFBSQzE1MjIpOworICAgIHRlbXAgPSBlcjMyKFBSQzY0KTsKKyAgICB0ZW1wID0gZXIzMihQUkMxMjcpOworICAgIHRlbXAgPSBlcjMyKFBSQzI1NSk7CisgICAgdGVtcCA9IGVyMzIoUFJDNTExKTsKKyAgICB0ZW1wID0gZXIzMihQUkMxMDIzKTsKKyAgICB0ZW1wID0gZXIzMihQUkMxNTIyKTsKICAgICB9CiAKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIEdQUkMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgQlBSQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBNUFJDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIEdQVEMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgR09SQ0wpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgR09SQ0gpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgR09UQ0wpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgR09UQ0gpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgUk5CQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSVUMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgUkZDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJPQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSSkMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgVE9STCk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBUT1JIKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRPVEwpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgVE9USCk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBUUFIpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgVFBUKTsKKyAgICB0ZW1wID0gZXIzMihHUFJDKTsKKyAgICB0ZW1wID0gZXIzMihCUFJDKTsKKyAgICB0ZW1wID0gZXIzMihNUFJDKTsKKyAgICB0ZW1wID0gZXIzMihHUFRDKTsKKyAgICB0ZW1wID0gZXIzMihHT1JDTCk7CisgICAgdGVtcCA9IGVyMzIoR09SQ0gpOworICAgIHRlbXAgPSBlcjMyKEdPVENMKTsKKyAgICB0ZW1wID0gZXIzMihHT1RDSCk7CisgICAgdGVtcCA9IGVyMzIoUk5CQyk7CisgICAgdGVtcCA9IGVyMzIoUlVDKTsKKyAgICB0ZW1wID0gZXIzMihSRkMpOworICAgIHRlbXAgPSBlcjMyKFJPQyk7CisgICAgdGVtcCA9IGVyMzIoUkpDKTsKKyAgICB0ZW1wID0gZXIzMihUT1JMKTsKKyAgICB0ZW1wID0gZXIzMihUT1JIKTsKKyAgICB0ZW1wID0gZXIzMihUT1RMKTsKKyAgICB0ZW1wID0gZXIzMihUT1RIKTsKKyAgICB0ZW1wID0gZXIzMihUUFIpOworICAgIHRlbXAgPSBlcjMyKFRQVCk7CiAKICAgICBpZiAoaHctPm1hY190eXBlICE9IGUxMDAwX2ljaDhsYW4pIHsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFBUQzY0KTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFBUQzEyNyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBQVEMyNTUpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgUFRDNTExKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFBUQzEwMjMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgUFRDMTUyMik7CisgICAgdGVtcCA9IGVyMzIoUFRDNjQpOworICAgIHRlbXAgPSBlcjMyKFBUQzEyNyk7CisgICAgdGVtcCA9IGVyMzIoUFRDMjU1KTsKKyAgICB0ZW1wID0gZXIzMihQVEM1MTEpOworICAgIHRlbXAgPSBlcjMyKFBUQzEwMjMpOworICAgIHRlbXAgPSBlcjMyKFBUQzE1MjIpOwogICAgIH0KIAotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgTVBUQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBCUFRDKTsKKyAgICB0ZW1wID0gZXIzMihNUFRDKTsKKyAgICB0ZW1wID0gZXIzMihCUFRDKTsKIAogICAgIGlmIChody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0MykgcmV0dXJuOwogCi0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBBTEdORVJSQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSWEVSUkMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgVE5DUlMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgQ0VYVEVSUik7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBUU0NUQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBUU0NURkMpOworICAgIHRlbXAgPSBlcjMyKEFMR05FUlJDKTsKKyAgICB0ZW1wID0gZXIzMihSWEVSUkMpOworICAgIHRlbXAgPSBlcjMyKFROQ1JTKTsKKyAgICB0ZW1wID0gZXIzMihDRVhURVJSKTsKKyAgICB0ZW1wID0gZXIzMihUU0NUQyk7CisgICAgdGVtcCA9IGVyMzIoVFNDVEZDKTsKIAogICAgIGlmIChody0+bWFjX3R5cGUgPD0gZTEwMDBfODI1NDQpIHJldHVybjsKIAotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgTUdUUFJDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1HVFBEQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBNR1RQVEMpOworICAgIHRlbXAgPSBlcjMyKE1HVFBSQyk7CisgICAgdGVtcCA9IGVyMzIoTUdUUERDKTsKKyAgICB0ZW1wID0gZXIzMihNR1RQVEMpOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0N19yZXZfMikgcmV0dXJuOwogCi0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBJQUMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWE9DKTsKKyAgICB0ZW1wID0gZXIzMihJQUMpOworICAgIHRlbXAgPSBlcjMyKElDUlhPQyk7CiAKICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHJldHVybjsKIAotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWFBUQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1JYQVRDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIElDVFhQVEMpOwotICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNUWEFUQyk7Ci0gICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1RYUUVDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIElDVFhRTVRDKTsKLSAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIElDUlhETVRDKTsKKyAgICB0ZW1wID0gZXIzMihJQ1JYUFRDKTsKKyAgICB0ZW1wID0gZXIzMihJQ1JYQVRDKTsKKyAgICB0ZW1wID0gZXIzMihJQ1RYUFRDKTsKKyAgICB0ZW1wID0gZXIzMihJQ1RYQVRDKTsKKyAgICB0ZW1wID0gZXIzMihJQ1RYUUVDKTsKKyAgICB0ZW1wID0gZXIzMihJQ1RYUU1UQyk7CisgICAgdGVtcCA9IGVyMzIoSUNSWERNVEMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02NDI4LDggKzYzMTcsNyBAQAogICogY3VycmVudF9pZnNfdmFsLCBpZnNfbWluX3ZhbCwgaWZzX21heF92YWwsIGlmc19zdGVwX3NpemUsIGFuZCBpZnNfcmF0aW8KICAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1lMTAwMF9yZXNldF9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQordm9pZCBlMTAwMF9yZXNldF9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIERFQlVHRlVOQygiZTEwMDBfcmVzZXRfYWRhcHRpdmUiKTsKIApAQCAtNjQ0Miw3ICs2MzMwLDcgQEAKICAgICAgICAgICAgIGh3LT5pZnNfcmF0aW8gPSBJRlNfUkFUSU87CiAgICAgICAgIH0KICAgICAgICAgaHctPmluX2lmc19tb2RlID0gZmFsc2U7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQUlULCAwKTsKKyAgICAgICAgZXczMihBSVQsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIERFQlVHT1VUKCJOb3QgaW4gQWRhcHRpdmUgSUZTIG1vZGUhXG4iKTsKICAgICB9CkBAIC02NDU2LDggKzYzNDQsNyBAQAogICogdHhfcGFja2V0cyAtIE51bWJlciBvZiB0cmFuc21pdHMgc2luY2UgbGFzdCBjYWxsYmFjawogICogdG90YWxfY29sbGlzaW9ucyAtIE51bWJlciBvZiBjb2xsaXNpb25zIHNpbmNlIGxhc3QgY2FsbGJhY2sKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWUxMDAwX3VwZGF0ZV9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQordm9pZCBlMTAwMF91cGRhdGVfYWRhcHRpdmUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBERUJVR0ZVTkMoImUxMDAwX3VwZGF0ZV9hZGFwdGl2ZSIpOwogCkBAIC02NDcwLDE0ICs2MzU3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBody0+Y3VycmVudF9pZnNfdmFsID0gaHctPmlmc19taW5fdmFsOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBody0+Y3VycmVudF9pZnNfdmFsICs9IGh3LT5pZnNfc3RlcF9zaXplOwotICAgICAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEFJVCwgaHctPmN1cnJlbnRfaWZzX3ZhbCk7CisgICAgICAgICAgICAgICAgICAgIGV3MzIoQUlULCBody0+Y3VycmVudF9pZnNfdmFsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaHctPmluX2lmc19tb2RlICYmIChody0+dHhfcGFja2V0X2RlbHRhIDw9IE1JTl9OVU1fWE1JVFMpKSB7CiAgICAgICAgICAgICAgICAgaHctPmN1cnJlbnRfaWZzX3ZhbCA9IDA7CiAgICAgICAgICAgICAgICAgaHctPmluX2lmc19tb2RlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBBSVQsIDApOworICAgICAgICAgICAgICAgIGV3MzIoQUlULCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC02NDkyLDExICs2Mzc5LDggQEAKICAqIGZyYW1lX2xlbiAtIFRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIGluIHF1ZXN0aW9uCiAgKiBtYWNfYWRkciAtIFRoZSBFdGhlcm5ldCBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBmcmFtZSBpbiBxdWVzdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotZTEwMDBfdGJpX2FkanVzdF9zdGF0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfaHdfc3RhdHMgKnN0YXRzLAotICAgICAgICAgICAgICAgICAgICAgICB1MzIgZnJhbWVfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICB1OCAqbWFjX2FkZHIpCit2b2lkIGUxMDAwX3RiaV9hZGp1c3Rfc3RhdHMoc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX2h3X3N0YXRzICpzdGF0cywKKwkJCSAgICB1MzIgZnJhbWVfbGVuLCB1OCAqbWFjX2FkZHIpCiB7CiAgICAgdTY0IGNhcnJ5X2JpdDsKIApAQCAtNjUyNyw3ICs2NDExLDcgQEAKICAgICAgKiBzaW5jZSB0aGUgdGVzdCBmb3IgYSBtdWx0aWNhc3QgZnJhbWUgd2lsbCB0ZXN0IHBvc2l0aXZlIG9uCiAgICAgICogYSBicm9hZGNhc3QgZnJhbWUuCiAgICAgICovCi0gICAgaWYgKChtYWNfYWRkclswXSA9PSAodTgpIDB4ZmYpICYmIChtYWNfYWRkclsxXSA9PSAodTgpIDB4ZmYpKQorICAgIGlmICgobWFjX2FkZHJbMF0gPT0gKHU4KTB4ZmYpICYmIChtYWNfYWRkclsxXSA9PSAodTgpMHhmZikpCiAgICAgICAgIC8qIEJyb2FkY2FzdCBwYWNrZXQgKi8KICAgICAgICAgc3RhdHMtPmJwcmMrKzsKICAgICBlbHNlIGlmICgqbWFjX2FkZHIgJiAweDAxKQpAQCAtNjU3MCw4ICs2NDU0LDcgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotZTEwMDBfZ2V0X2J1c19pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcpCit2b2lkIGUxMDAwX2dldF9idXNfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiByZXRfdmFsOwogICAgIHUxNiBwY2lfZXhfbGlua19zdGF0dXM7CkBAIC02NjA1LDcgKzY0ODgsNyBAQAogICAgICAgICBody0+YnVzX3dpZHRoID0gZTEwMDBfYnVzX3dpZHRoX3BjaWV4XzE7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN0YXR1cyA9IEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpOworICAgICAgICBzdGF0dXMgPSBlcjMyKFNUQVRVUyk7CiAgICAgICAgIGh3LT5idXNfdHlwZSA9IChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfUENJWF9NT0RFKSA/CiAgICAgICAgICAgICAgICAgICAgICAgIGUxMDAwX2J1c190eXBlX3BjaXggOiBlMTAwMF9idXNfdHlwZV9wY2k7CiAKQEAgLTY2NDUsMTAgKzY1MjgsNyBAQAogICogb2Zmc2V0IC0gb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiB2YWx1ZSAtIHZhbHVlIHRvIHdyaXRlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAotZTEwMDBfd3JpdGVfcmVnX2lvKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgdTMyIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICB1MzIgdmFsdWUpCitzdGF0aWMgdm9pZCBlMTAwMF93cml0ZV9yZWdfaW8oc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQogewogICAgIHVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IGh3LT5pb19iYXNlOwogICAgIHVuc2lnbmVkIGxvbmcgaW9fZGF0YSA9IGh3LT5pb19iYXNlICsgNDsKQEAgLTY2NzIsMTAgKzY1NTIsOCBAQAogICogcmVnaXN0ZXIgdG8gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcmFuZ2UuCiAgKiBGb3IgSUdQIHBoeSdzLCB0aGUgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgcmFuZ2UgYnkgdGhlIEFHQyByZWdpc3RlcnMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9nZXRfY2FibGVfbGVuZ3RoKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgIHUxNiAqbWluX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgdTE2ICptYXhfbGVuZ3RoKQorc3RhdGljIHMzMiBlMTAwMF9nZXRfY2FibGVfbGVuZ3RoKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiAqbWluX2xlbmd0aCwKKwkJCQkgIHUxNiAqbWF4X2xlbmd0aCkKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICB1MTYgYWdjX3ZhbHVlID0gMDsKQEAgLTY4NjMsOSArNjc0MSw4IEBACiAgKiByZXR1cm4gMC4gIElmIHRoZSBsaW5rIHNwZWVkIGlzIDEwMDAgTWJwcyB0aGUgcG9sYXJpdHkgc3RhdHVzIGlzIGluIHRoZQogICogSUdQMDFFMTAwMF9QSFlfUENTX0lOSVRfUkVHLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfY2hlY2tfcG9sYXJpdHkoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgIGUxMDAwX3Jldl9wb2xhcml0eSAqcG9sYXJpdHkpCitzdGF0aWMgczMyIGUxMDAwX2NoZWNrX3BvbGFyaXR5KHN0cnVjdCBlMTAwMF9odyAqaHcsCisJCQkJZTEwMDBfcmV2X3BvbGFyaXR5ICpwb2xhcml0eSkKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICB1MTYgcGh5X2RhdGE7CkBAIC02OTM5LDggKzY4MTYsNyBAQAogICogTGluayBIZWFsdGggcmVnaXN0ZXIuICBJbiBJR1AgdGhpcyBiaXQgaXMgbGF0Y2hlZCBoaWdoLCBzbyB0aGUgZHJpdmVyIG11c3QKICAqIHJlYWQgaXQgaW1tZWRpYXRlbHkgYWZ0ZXIgbGluayBpcyBlc3RhYmxpc2hlZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX2NoZWNrX2Rvd25zaGlmdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9jaGVja19kb3duc2hpZnQoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgcmV0X3ZhbDsKICAgICB1MTYgcGh5X2RhdGE7CkBAIC02OTg1LDkgKzY4NjEsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgczMyCi1lMTAwMF9jb25maWdfZHNwX2FmdGVyX2xpbmtfY2hhbmdlKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua191cCkKK3N0YXRpYyBzMzIgZTEwMDBfY29uZmlnX2RzcF9hZnRlcl9saW5rX2NoYW5nZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGxpbmtfdXApCiB7CiAgICAgczMyIHJldF92YWw7CiAgICAgdTE2IHBoeV9kYXRhLCBwaHlfc2F2ZWRfZGF0YSwgc3BlZWQsIGR1cGxleCwgaTsKQEAgLTcxNzMsOCArNzA0Nyw3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfc2V0X3BoeV9tb2RlKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX3NldF9waHlfbW9kZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiByZXRfdmFsOwogICAgIHUxNiBlZXByb21fZGF0YTsKQEAgLTcyMTgsOSArNzA5MSw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBzMzIKLWUxMDAwX3NldF9kM19scGx1X3N0YXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdGl2ZSkKK3N0YXRpYyBzMzIgZTEwMDBfc2V0X2QzX2xwbHVfc3RhdGUoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBhY3RpdmUpCiB7CiAgICAgdTMyIHBoeV9jdHJsID0gMDsKICAgICBzMzIgcmV0X3ZhbDsKQEAgLTcyNDIsNyArNzExMyw3IEBACiAgICAgICAgIC8qIE1BQyB3cml0ZXMgaW50byBQSFkgcmVnaXN0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIHRyYW5zaXRpb24KICAgICAgICAgICogYW5kIHN0YXJ0IGF1dG8tbmVnb3RpYXRpb24uIFNXIGRyaXZlciBjYW4gb3ZlcndyaXRlIHRoZSBzZXR0aW5ncwogICAgICAgICAgKiBpbiBDU1IgUEhZIHBvd2VyIGNvbnRyb2wgRTEwMDBfUEhZX0NUUkwgcmVnaXN0ZXIuICovCi0gICAgICAgIHBoeV9jdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFBIWV9DVFJMKTsKKyAgICAgICAgcGh5X2N0cmwgPSBlcjMyKFBIWV9DVFJMKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCAmcGh5X2RhdGEpOwogICAgICAgICBpZiAocmV0X3ZhbCkKQEAgLTcyNTksNyArNzEzMCw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKICAgICAgICAgICAgICAgICBwaHlfY3RybCAmPSB+RTEwMDBfUEhZX0NUUkxfTk9ORDBBX0xQTFU7Ci0gICAgICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBQSFlfQ1RSTCwgcGh5X2N0cmwpOworICAgICAgICAgICAgICAgIGV3MzIoUEhZX0NUUkwsIHBoeV9jdHJsKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcGh5X2RhdGEgJj0gfklHUDAyRTEwMDBfUE1fRDNfTFBMVTsKICAgICAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwKQEAgLTczMTAsNyArNzE4MSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKICAgICAgICAgICAgICAgICBwaHlfY3RybCB8PSBFMTAwMF9QSFlfQ1RSTF9OT05EMEFfTFBMVTsKLSAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFBIWV9DVFJMLCBwaHlfY3RybCk7CisgICAgICAgICAgICAgICAgZXczMihQSFlfQ1RSTCwgcGh5X2N0cmwpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwaHlfZGF0YSB8PSBJR1AwMkUxMDAwX1BNX0QzX0xQTFU7CiAgICAgICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCkBAIC03MzQ4LDkgKzcyMTksNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgczMyCi1lMTAwMF9zZXRfZDBfbHBsdV9zdGF0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3RpdmUpCitzdGF0aWMgczMyIGUxMDAwX3NldF9kMF9scGx1X3N0YXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgYWN0aXZlKQogewogICAgIHUzMiBwaHlfY3RybCA9IDA7CiAgICAgczMyIHJldF92YWw7CkBAIC03MzYxLDcgKzcyMzAsNyBAQAogICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewotICAgICAgICBwaHlfY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBQSFlfQ1RSTCk7CisgICAgICAgIHBoeV9jdHJsID0gZXIzMihQSFlfQ1RSTCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwgJnBoeV9kYXRhKTsKICAgICAgICAgaWYgKHJldF92YWwpCkBAIC03MzcxLDcgKzcyNDAsNyBAQAogICAgIGlmICghYWN0aXZlKSB7CiAgICAgICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewogICAgICAgICAgICAgcGh5X2N0cmwgJj0gfkUxMDAwX1BIWV9DVFJMX0QwQV9MUExVOwotICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBQSFlfQ1RSTCwgcGh5X2N0cmwpOworICAgICAgICAgICAgZXczMihQSFlfQ1RSTCwgcGh5X2N0cmwpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcGh5X2RhdGEgJj0gfklHUDAyRTEwMDBfUE1fRDBfTFBMVTsKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCBwaHlfZGF0YSk7CkBAIC03NDEyLDcgKzcyODEsNyBAQAogCiAgICAgICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewogICAgICAgICAgICAgcGh5X2N0cmwgfD0gRTEwMDBfUEhZX0NUUkxfRDBBX0xQTFU7Ci0gICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFBIWV9DVFJMLCBwaHlfY3RybCk7CisgICAgICAgICAgICBldzMyKFBIWV9DVFJMLCBwaHlfY3RybCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwaHlfZGF0YSB8PSBJR1AwMkUxMDAwX1BNX0QwX0xQTFU7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwgcGh5X2RhdGEpOwpAQCAtNzQzOSw4ICs3MzA4LDcgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfc2V0X3Zjb19zcGVlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9zZXRfdmNvX3NwZWVkKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgczMyICByZXRfdmFsOwogICAgIHUxNiBkZWZhdWx0X3BhZ2UgPSAwOwpAQCAtNzUwMyw4ICs3MzcxLDcgQEAKICAqCiAgKiByZXR1cm5zOiAtIEUxMDAwX1NVQ0NFU1MgLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9ob3N0X2lmX3JlYWRfY29va2llKHN0cnVjdCBlMTAwMF9odyAqIGh3LCB1OCAqYnVmZmVyKQorc3RhdGljIHMzMiBlMTAwMF9ob3N0X2lmX3JlYWRfY29va2llKHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICpidWZmZXIpCiB7CiAgICAgdTggaTsKICAgICB1MzIgb2Zmc2V0ID0gRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX09GRlNFVDsKQEAgLTc1MTQsNyArNzM4MSw3IEBACiAgICAgb2Zmc2V0ID0gKG9mZnNldCA+PiAyKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAqKCh1MzIgKikgYnVmZmVyICsgaSkgPQorICAgICAgICAqKCh1MzIgKilidWZmZXIgKyBpKSA9CiAgICAgICAgICAgICBFMTAwMF9SRUFEX1JFR19BUlJBWV9EV09SRChodywgSE9TVF9JRiwgb2Zmc2V0ICsgaSk7CiAgICAgfQogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwpAQCAtNzUzMCwyMSArNzM5NywyMCBAQAogICogICAgICAgICAgICB0aW1lb3V0CiAgKiAgICAgICAgICAtIEUxMDAwX1NVQ0NFU1MgZm9yIHN1Y2Nlc3MuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX21uZ19lbmFibGVfaG9zdF9pZihzdHJ1Y3QgZTEwMDBfaHcgKiBodykKK3N0YXRpYyBzMzIgZTEwMDBfbW5nX2VuYWJsZV9ob3N0X2lmKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIGhpY3I7CiAgICAgdTggaTsKIAogICAgIC8qIENoZWNrIHRoYXQgdGhlIGhvc3QgaW50ZXJmYWNlIGlzIGVuYWJsZWQuICovCi0gICAgaGljciA9IEUxMDAwX1JFQURfUkVHKGh3LCBISUNSKTsKKyAgICBoaWNyID0gZXIzMihISUNSKTsKICAgICBpZiAoKGhpY3IgJiBFMTAwMF9ISUNSX0VOKSA9PSAwKSB7CiAgICAgICAgIERFQlVHT1VUKCJFMTAwMF9IT1NUX0VOIGJpdCBkaXNhYmxlZC5cbiIpOwogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9IT1NUX0lOVEVSRkFDRV9DT01NQU5EOwogICAgIH0KICAgICAvKiBjaGVjayB0aGUgcHJldmlvdXMgY29tbWFuZCBpcyBjb21wbGV0ZWQgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgRTEwMDBfTU5HX0RIQ1BfQ09NTUFORF9USU1FT1VUOyBpKyspIHsKLSAgICAgICAgaGljciA9IEUxMDAwX1JFQURfUkVHKGh3LCBISUNSKTsKKyAgICAgICAgaGljciA9IGVyMzIoSElDUik7CiAgICAgICAgIGlmICghKGhpY3IgJiBFMTAwMF9ISUNSX0MpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1kZWxheSgxKTsKQEAgLTc1NjQsOSArNzQzMCw4IEBACiAgKgogICogcmV0dXJucyAgLSBFMTAwMF9TVUNDRVNTIGZvciBzdWNjZXNzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9tbmdfaG9zdF9pZl93cml0ZShzdHJ1Y3QgZTEwMDBfaHcgKiBodywgdTggKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBsZW5ndGgsIHUxNiBvZmZzZXQsIHU4ICpzdW0pCitzdGF0aWMgczMyIGUxMDAwX21uZ19ob3N0X2lmX3dyaXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICpidWZmZXIsIHUxNiBsZW5ndGgsCisJCQkJICAgdTE2IG9mZnNldCwgdTggKnN1bSkKIHsKICAgICB1OCAqdG1wOwogICAgIHU4ICpidWZwdHIgPSBidWZmZXI7CkBAIC03NjMyLDkgKzc0OTcsOCBAQAogICoKICAqIHJldHVybnMgIC0gRTEwMDBfU1VDQ0VTUyBmb3Igc3VjY2Vzcy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfbW5nX3dyaXRlX2NtZF9oZWFkZXIoc3RydWN0IGUxMDAwX2h3ICogaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfY29tbWFuZF9oZWFkZXIgKiBoZHIpCitzdGF0aWMgczMyIGUxMDAwX21uZ193cml0ZV9jbWRfaGVhZGVyKHN0cnVjdCBlMTAwMF9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGUxMDAwX2hvc3RfbW5nX2NvbW1hbmRfaGVhZGVyICpoZHIpCiB7CiAgICAgdTE2IGk7CiAgICAgdTggc3VtOwpAQCAtNzY0OCw3ICs3NTEyLDcgQEAKICAgICBzdW0gPSBoZHItPmNoZWNrc3VtOwogICAgIGhkci0+Y2hlY2tzdW0gPSAwOwogCi0gICAgYnVmZmVyID0gKHU4ICopIGhkcjsKKyAgICBidWZmZXIgPSAodTggKiloZHI7CiAgICAgaSA9IGxlbmd0aDsKICAgICB3aGlsZSAoaS0tKQogICAgICAgICBzdW0gKz0gYnVmZmVyW2ldOwpAQCAtNzY1OCw4ICs3NTIyLDggQEAKICAgICBsZW5ndGggPj49IDI7CiAgICAgLyogVGhlIGRldmljZSBkcml2ZXIgd3JpdGVzIHRoZSByZWxldmFudCBjb21tYW5kIGJsb2NrIGludG8gdGhlIHJhbSBhcmVhLiAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVlfRFdPUkQoaHcsIEhPU1RfSUYsIGksICooKHUzMiAqKSBoZHIgKyBpKSk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZX0RXT1JEKGh3LCBIT1NUX0lGLCBpLCAqKCh1MzIgKiloZHIgKyBpKSk7CisgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CkBAIC03NjcyLDE0ICs3NTM2LDEzIEBACiAgKgogICogcmV0dXJucyAgLSBFMTAwMF9TVUNDRVNTIGZvciBzdWNjZXNzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9tbmdfd3JpdGVfY29tbWl0KHN0cnVjdCBlMTAwMF9odyAqIGh3KQorc3RhdGljIHMzMiBlMTAwMF9tbmdfd3JpdGVfY29tbWl0KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIGhpY3I7CiAKLSAgICBoaWNyID0gRTEwMDBfUkVBRF9SRUcoaHcsIEhJQ1IpOworICAgIGhpY3IgPSBlcjMyKEhJQ1IpOwogICAgIC8qIFNldHRpbmcgdGhpcyBiaXQgdGVsbHMgdGhlIEFSQyB0aGF0IGEgbmV3IGNvbW1hbmQgaXMgcGVuZGluZy4gKi8KLSAgICBFMTAwMF9XUklURV9SRUcoaHcsIEhJQ1IsIGhpY3IgfCBFMTAwMF9ISUNSX0MpOworICAgIGV3MzIoSElDUiwgaGljciB8IEUxMDAwX0hJQ1JfQyk7CiAKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KQEAgLTc2OTAsMTIgKzc1NTMsMTEgQEAKICAqCiAgKiByZXR1cm5zICAtIHRydWUgd2hlbiB0aGUgbW9kZSBpcyBJQU1UIG9yIGZhbHNlLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1ib29sCi1lMTAwMF9jaGVja19tbmdfbW9kZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorYm9vbCBlMTAwMF9jaGVja19tbmdfbW9kZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBmd3NtOwogCi0gICAgZndzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBGV1NNKTsKKyAgICBmd3NtID0gZXIzMihGV1NNKTsKIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewogICAgICAgICBpZiAoKGZ3c20gJiBFMTAwMF9GV1NNX01PREVfTUFTSykgPT0KQEAgLTc3MTIsOSArNzU3NCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBkaGNwIGluZm8gLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zMzIKLWUxMDAwX21uZ193cml0ZV9kaGNwX2luZm8oc3RydWN0IGUxMDAwX2h3ICogaHcsIHU4ICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBsZW5ndGgpCitzMzIgZTEwMDBfbW5nX3dyaXRlX2RoY3BfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqYnVmZmVyLCB1MTYgbGVuZ3RoKQogewogICAgIHMzMiByZXRfdmFsOwogICAgIHN0cnVjdCBlMTAwMF9ob3N0X21uZ19jb21tYW5kX2hlYWRlciBoZHI7CkBAIC03NzQ0LDggKzc2MDQsNyBAQAogICoKICAqIHJldHVybnMgIC0gY2hlY2tzdW0gb2YgYnVmZmVyIGNvbnRlbnRzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdTgKLWUxMDAwX2NhbGN1bGF0ZV9tbmdfY2hlY2tzdW0oY2hhciAqYnVmZmVyLCB1MzIgbGVuZ3RoKQorc3RhdGljIHU4IGUxMDAwX2NhbGN1bGF0ZV9tbmdfY2hlY2tzdW0oY2hhciAqYnVmZmVyLCB1MzIgbGVuZ3RoKQogewogICAgIHU4IHN1bSA9IDA7CiAgICAgdTMyIGk7CkBAIC03NzU2LDcgKzc2MTUsNyBAQAogICAgIGZvciAoaT0wOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAgIHN1bSArPSBidWZmZXJbaV07CiAKLSAgICByZXR1cm4gKHU4KSAoMCAtIHN1bSk7CisgICAgcmV0dXJuICh1OCkoMCAtIHN1bSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzc2NCw4ICs3NjIzLDcgQEAKICAqCiAgKiByZXR1cm5zICAtIHRydWUgZm9yIHBhY2tldCBmaWx0ZXJpbmcgb3IgZmFsc2UuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWJvb2wKLWUxMDAwX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpCitib29sIGUxMDAwX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgLyogY2FsbGVkIGluIGluaXQgYXMgd2VsbCBhcyB3YXRjaGRvZyB0aW1lciBmdW5jdGlvbnMgKi8KIApAQCAtNzgwNiwyMSArNzY2NCwyMCBAQAogICogcmV0dXJuczogLSB0cnVlL2ZhbHNlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdTMyCi1lMTAwMF9lbmFibGVfbW5nX3Bhc3NfdGhydShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQordTMyIGUxMDAwX2VuYWJsZV9tbmdfcGFzc190aHJ1KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIG1hbmM7CiAgICAgdTMyIGZ3c20sIGZhY3RwczsKIAogICAgIGlmIChody0+YXNmX2Zpcm13YXJlX3ByZXNlbnQpIHsKLSAgICAgICAgbWFuYyA9IEUxMDAwX1JFQURfUkVHKGh3LCBNQU5DKTsKKyAgICAgICAgbWFuYyA9IGVyMzIoTUFOQyk7CiAKICAgICAgICAgaWYgKCEobWFuYyAmIEUxMDAwX01BTkNfUkNWX1RDT19FTikgfHwKICAgICAgICAgICAgICEobWFuYyAmIEUxMDAwX01BTkNfRU5fTUFDX0FERFJfRklMVEVSKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGUxMDAwX2FyY19zdWJzeXN0ZW1fdmFsaWQoaHcpKSB7Ci0gICAgICAgICAgICBmd3NtID0gRTEwMDBfUkVBRF9SRUcoaHcsIEZXU00pOwotICAgICAgICAgICAgZmFjdHBzID0gRTEwMDBfUkVBRF9SRUcoaHcsIEZBQ1RQUyk7CisgICAgICAgICAgICBmd3NtID0gZXIzMihGV1NNKTsKKyAgICAgICAgICAgIGZhY3RwcyA9IGVyMzIoRkFDVFBTKTsKIAogICAgICAgICAgICAgaWYgKCgoKGZ3c20gJiBFMTAwMF9GV1NNX01PREVfTUFTSykgPj4gRTEwMDBfRldTTV9NT0RFX1NISUZUKSA9PQogICAgICAgICAgICAgICAgICAgIGUxMDAwX21uZ19tb2RlX3B0KSAmJiAhKGZhY3RwcyAmIEUxMDAwX0ZBQ1RQU19NTkdDRykpCkBAIC03ODMyLDggKzc2ODksNyBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHMzMgotZTEwMDBfcG9sYXJpdHlfcmV2ZXJzYWxfd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9wb2xhcml0eV9yZXZlcnNhbF93b3JrYXJvdW5kKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgczMyIHJldF92YWw7CiAgICAgdTE2IG1paV9zdGF0dXNfcmVnOwpAQCAtNzkyNiw4ICs3NzgyLDcgQEAKICAqIHJldHVybnM6IC0gbm9uZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWUxMDAwX3NldF9wY2lfZXhwcmVzc19tYXN0ZXJfZGlzYWJsZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHZvaWQgZTEwMDBfc2V0X3BjaV9leHByZXNzX21hc3Rlcl9kaXNhYmxlKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdTMyIGN0cmw7CiAKQEAgLTc5MzYsOSArNzc5MSw5IEBACiAgICAgaWYgKGh3LT5idXNfdHlwZSAhPSBlMTAwMF9idXNfdHlwZV9wY2lfZXhwcmVzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKyAgICBjdHJsID0gZXIzMihDVFJMKTsKICAgICBjdHJsIHw9IEUxMDAwX0NUUkxfR0lPX01BU1RFUl9ESVNBQkxFOwotICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCk7CisgICAgZXczMihDVFJMLCBjdHJsKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc5NTIsOCArNzgwNyw3IEBACiAgKiAgICAgICAgICAgIEUxMDAwX1NVQ0NFU1MgbWFzdGVyIHJlcXVlc3RzIGRpc2FibGVkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zMzIKLWUxMDAwX2Rpc2FibGVfcGNpZXhfbWFzdGVyKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBfZGlzYWJsZV9wY2lleF9tYXN0ZXIoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgdGltZW91dCA9IE1BU1RFUl9ESVNBQkxFX1RJTUVPVVQ7ICAgLyogODBtcyAqLwogCkBAIC03OTY1LDcgKzc4MTksNyBAQAogICAgIGUxMDAwX3NldF9wY2lfZXhwcmVzc19tYXN0ZXJfZGlzYWJsZShodyk7CiAKICAgICB3aGlsZSAodGltZW91dCkgewotICAgICAgICBpZiAoIShFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19HSU9fTUFTVEVSX0VOQUJMRSkpCisgICAgICAgIGlmICghKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19HSU9fTUFTVEVSX0VOQUJMRSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdWRlbGF5KDEwMCk7CkBAIC03OTkwLDggKzc4NDQsNyBAQAogICogICAgICAgICAgICBFMTAwMF9TVUNDRVNTIGF0IGFueSBvdGhlciBjYXNlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9nZXRfYXV0b19yZF9kb25lKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2dldF9hdXRvX3JkX2RvbmUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgdGltZW91dCA9IEFVVE9fUkVBRF9ET05FX1RJTUVPVVQ7CiAKQEAgLTgwMDcsNyArNzg2MCw3IEBACiAgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKICAgICBjYXNlIGUxMDAwX2ljaDhsYW46CiAgICAgICAgIHdoaWxlICh0aW1lb3V0KSB7Ci0gICAgICAgICAgICBpZiAoRTEwMDBfUkVBRF9SRUcoaHcsIEVFQ0QpICYgRTEwMDBfRUVDRF9BVVRPX1JEKQorICAgICAgICAgICAgaWYgKGVyMzIoRUVDRCkgJiBFMTAwMF9FRUNEX0FVVE9fUkQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBlbHNlIG1zbGVlcCgxKTsKICAgICAgICAgICAgIHRpbWVvdXQtLTsKQEAgLTgwMzgsOCArNzg5MSw3IEBACiAgKiAgICAgICAgICAgIEUxMDAwX1NVQ0NFU1MgYXQgYW55IG90aGVyIGNhc2UuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX2dldF9waHlfY2ZnX2RvbmUoc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyBzMzIgZTEwMDBfZ2V0X3BoeV9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHMzMiB0aW1lb3V0ID0gUEhZX0NGR19USU1FT1VUOwogICAgIHUzMiBjZmdfbWFzayA9IEUxMDAwX0VFUFJPTV9DRkdfRE9ORTsKQEAgLTgwNTIsMTMgKzc5MDQsMTMgQEAKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKICAgICAgICAgLyogU2VwYXJhdGUgKl9DRkdfRE9ORV8qIGJpdCBmb3IgZWFjaCBwb3J0ICovCi0gICAgICAgIGlmIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCisgICAgICAgIGlmIChlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKQogICAgICAgICAgICAgY2ZnX21hc2sgPSBFMTAwMF9FRVBST01fQ0ZHX0RPTkVfUE9SVF8xOwogICAgICAgICAvKiBGYWxsIFRocm91Z2ggKi8KICAgICBjYXNlIGUxMDAwXzgyNTcxOgogICAgIGNhc2UgZTEwMDBfODI1NzI6CiAgICAgICAgIHdoaWxlICh0aW1lb3V0KSB7Ci0gICAgICAgICAgICBpZiAoRTEwMDBfUkVBRF9SRUcoaHcsIEVFTU5HQ1RMKSAmIGNmZ19tYXNrKQorICAgICAgICAgICAgaWYgKGVyMzIoRUVNTkdDVEwpICYgY2ZnX21hc2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbXNsZWVwKDEpOwpAQCAtODA4NSw4ICs3OTM3LDcgQEAKICAqICAgICAgICAgICAgRTEwMDBfU1VDQ0VTUyBhdCBhbnkgb3RoZXIgY2FzZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfZ2V0X2h3X2VlcHJvbV9zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyBzMzIgZTEwMDBfZ2V0X2h3X2VlcHJvbV9zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgdGltZW91dDsKICAgICB1MzIgc3dzbTsKQEAgLTgxMDUsMTEgKzc5NTYsMTEgQEAKICAgICAvKiBHZXQgdGhlIEZXIHNlbWFwaG9yZS4gKi8KICAgICB0aW1lb3V0ID0gaHctPmVlcHJvbS53b3JkX3NpemUgKyAxOwogICAgIHdoaWxlICh0aW1lb3V0KSB7Ci0gICAgICAgIHN3c20gPSBFMTAwMF9SRUFEX1JFRyhodywgU1dTTSk7CisgICAgICAgIHN3c20gPSBlcjMyKFNXU00pOwogICAgICAgICBzd3NtIHw9IEUxMDAwX1NXU01fU1dFU01CSTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBTV1NNLCBzd3NtKTsKKyAgICAgICAgZXczMihTV1NNLCBzd3NtKTsKICAgICAgICAgLyogaWYgd2UgbWFuYWdlZCB0byBzZXQgdGhlIGJpdCB3ZSBnb3QgdGhlIHNlbWFwaG9yZS4gKi8KLSAgICAgICAgc3dzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBTV1NNKTsKKyAgICAgICAgc3dzbSA9IGVyMzIoU1dTTSk7CiAgICAgICAgIGlmIChzd3NtICYgRTEwMDBfU1dTTV9TV0VTTUJJKQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTgxMzUsOCArNzk4Niw3IEBACiAgKiByZXR1cm5zOiAtIE5vbmUuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCi1lMTAwMF9wdXRfaHdfZWVwcm9tX3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHZvaWQgZTEwMDBfcHV0X2h3X2VlcHJvbV9zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MzIgc3dzbTsKIApAQCAtODE0NSwxMyArNzk5NSwxMyBAQAogICAgIGlmICghaHctPmVlcHJvbV9zZW1hcGhvcmVfcHJlc2VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3dzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBTV1NNKTsKKyAgICBzd3NtID0gZXIzMihTV1NNKTsKICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSB7CiAgICAgICAgIC8qIFJlbGVhc2UgYm90aCBzZW1hcGhvcmVzLiAqLwogICAgICAgICBzd3NtICY9IH4oRTEwMDBfU1dTTV9TTUJJIHwgRTEwMDBfU1dTTV9TV0VTTUJJKTsKICAgICB9IGVsc2UKICAgICAgICAgc3dzbSAmPSB+KEUxMDAwX1NXU01fU1dFU01CSSk7Ci0gICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBTV1NNLCBzd3NtKTsKKyAgICBldzMyKFNXU00sIHN3c20pOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04MTY0LDggKzgwMTQsNyBAQAogICogICAgICAgICAgICBFMTAwMF9TVUNDRVNTIGF0IGFueSBvdGhlciBjYXNlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9nZXRfc29mdHdhcmVfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2dldF9zb2Z0d2FyZV9zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzMzIgdGltZW91dCA9IGh3LT5lZXByb20ud29yZF9zaXplICsgMTsKICAgICB1MzIgc3dzbTsKQEAgLTgxNzcsNyArODAyNiw3IEBACiAgICAgfQogCiAgICAgd2hpbGUgKHRpbWVvdXQpIHsKLSAgICAgICAgc3dzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBTV1NNKTsKKyAgICAgICAgc3dzbSA9IGVyMzIoU1dTTSk7CiAgICAgICAgIC8qIElmIFNNQkkgYml0IGNsZWFyZWQsIGl0IGlzIG5vdyBzZXQgYW5kIHdlIGhvbGQgdGhlIHNlbWFwaG9yZSAqLwogICAgICAgICBpZiAoIShzd3NtICYgRTEwMDBfU1dTTV9TTUJJKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODIwMCw4ICs4MDQ5LDcgQEAKICAqIGh3OiBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgdm9pZCBlMTAwMF9yZWxlYXNlX3NvZnR3YXJlX3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBzd3NtOwogCkBAIC04MjExLDEwICs4MDU5LDEwIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzd3NtID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNXU00pOworICAgIHN3c20gPSBlcjMyKFNXU00pOwogICAgIC8qIFJlbGVhc2UgdGhlIFNXIHNlbWFwaG9yZXMuKi8KICAgICBzd3NtICY9IH5FMTAwMF9TV1NNX1NNQkk7Ci0gICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBTV1NNLCBzd3NtKTsKKyAgICBldzMyKFNXU00sIHN3c20pOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04MjI4LDI2ICs4MDc2LDI0IEBACiAgKiAgICAgICAgICAgIEUxMDAwX1NVQ0NFU1MKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zMzIKLWUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorczMyIGUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBtYW5jID0gMDsKICAgICB1MzIgZndzbSA9IDA7CiAKICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKLSAgICAgICAgZndzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBGV1NNKTsKKyAgICAgICAgZndzbSA9IGVyMzIoRldTTSk7CiAgICAgICAgIHJldHVybiAoZndzbSAmIEUxMDAwX0ZXU01fUlNQQ0lQSFkpID8gRTEwMDBfU1VDQ0VTUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEUxMDAwX0JMS19QSFlfUkVTRVQ7CiAgICAgfQogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ3X3Jldl8yKQotICAgICAgICBtYW5jID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1BTkMpOworICAgICAgICBtYW5jID0gZXIzMihNQU5DKTsKICAgICByZXR1cm4gKG1hbmMgJiBFMTAwMF9NQU5DX0JMS19QSFlfUlNUX09OX0lERSkgPwogICAgICAgICBFMTAwMF9CTEtfUEhZX1JFU0VUIDogRTEwMDBfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHU4Ci1lMTAwMF9hcmNfc3Vic3lzdGVtX3ZhbGlkKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgdTggZTEwMDBfYXJjX3N1YnN5c3RlbV92YWxpZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiBmd3NtOwogCkBAIC04MjYxLDcgKzgxMDcsNyBAQAogICAgIGNhc2UgZTEwMDBfODI1NzI6CiAgICAgY2FzZSBlMTAwMF84MjU3MzoKICAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgotICAgICAgICBmd3NtID0gRTEwMDBfUkVBRF9SRUcoaHcsIEZXU00pOworICAgICAgICBmd3NtID0gZXIzMihGV1NNKTsKICAgICAgICAgaWYgKChmd3NtICYgRTEwMDBfRldTTV9NT0RFX01BU0spICE9IDApCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgYnJlYWs7CkBAIC04MjgzLDggKzgxMjksNyBAQAogICogcmV0dXJuczogRTEwMDBfU1VDQ0VTUwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX3NldF9wY2lfZXhfbm9fc25vb3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG5vX3Nub29wKQorc3RhdGljIHMzMiBlMTAwMF9zZXRfcGNpX2V4X25vX3Nub29wKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBub19zbm9vcCkKIHsKICAgICB1MzIgZ2NyX3JlZyA9IDA7CiAKQEAgLTgyOTcsMTkgKzgxNDIsMTkgQEAKICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAKICAgICBpZiAobm9fc25vb3ApIHsKLSAgICAgICAgZ2NyX3JlZyA9IEUxMDAwX1JFQURfUkVHKGh3LCBHQ1IpOworICAgICAgICBnY3JfcmVnID0gZXIzMihHQ1IpOwogICAgICAgICBnY3JfcmVnICY9IH4oUENJX0VYX05PX1NOT09QX0FMTCk7CiAgICAgICAgIGdjcl9yZWcgfD0gbm9fc25vb3A7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgR0NSLCBnY3JfcmVnKTsKKyAgICAgICAgZXczMihHQ1IsIGdjcl9yZWcpOwogICAgIH0KICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKICAgICAgICAgdTMyIGN0cmxfZXh0OwogCi0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgR0NSLCBQQ0lfRVhfODI1NjZfU05PT1BfQUxMKTsKKyAgICAgICAgZXczMihHQ1IsIFBDSV9FWF84MjU2Nl9TTk9PUF9BTEwpOwogCi0gICAgICAgIGN0cmxfZXh0ID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkxfRVhUKTsKKyAgICAgICAgY3RybF9leHQgPSBlcjMyKENUUkxfRVhUKTsKICAgICAgICAgY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfUk9fRElTOwotICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkxfRVhULCBjdHJsX2V4dCk7CisgICAgICAgIGV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0KTsKICAgICB9CiAKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKQEAgLTgzMjQsOCArODE2OSw3IEBACiAgKiBodzogU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX2dldF9zb2Z0d2FyZV9mbGFnKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2dldF9zb2Z0d2FyZV9mbGFnKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgczMyIHRpbWVvdXQgPSBQSFlfQ0ZHX1RJTUVPVVQ7CiAgICAgdTMyIGV4dGNuZl9jdHJsOwpAQCAtODMzNCwxMSArODE3OCwxMSBAQAogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKSB7CiAgICAgICAgIHdoaWxlICh0aW1lb3V0KSB7Ci0gICAgICAgICAgICBleHRjbmZfY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFWFRDTkZfQ1RSTCk7CisgICAgICAgICAgICBleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOwogICAgICAgICAgICAgZXh0Y25mX2N0cmwgfD0gRTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHOwotICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOworICAgICAgICAgICAgZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOwogCi0gICAgICAgICAgICBleHRjbmZfY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFWFRDTkZfQ1RSTCk7CisgICAgICAgICAgICBleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOwogICAgICAgICAgICAgaWYgKGV4dGNuZl9jdHJsICYgRTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbWRlbGF5KDEpOwpAQCAtODM2MywxNyArODIwNywxNiBAQAogICogaHc6IFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAotZTEwMDBfcmVsZWFzZV9zb2Z0d2FyZV9mbGFnKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgdm9pZCBlMTAwMF9yZWxlYXNlX3NvZnR3YXJlX2ZsYWcoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1MzIgZXh0Y25mX2N0cmw7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfZmxhZyIpOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKSB7Ci0gICAgICAgIGV4dGNuZl9jdHJsPSBFMTAwMF9SRUFEX1JFRyhodywgRVhUQ05GX0NUUkwpOworICAgICAgICBleHRjbmZfY3RybD0gZXIzMihFWFRDTkZfQ1RSTCk7CiAgICAgICAgIGV4dGNuZl9jdHJsICY9IH5FMTAwMF9FWFRDTkZfQ1RSTF9TV0ZMQUc7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKKyAgICAgICAgZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOwogICAgIH0KIAogICAgIHJldHVybjsKQEAgLTgzODgsOSArODIzMSw4IEBACiAgKiBkYXRhIC0gd29yZCByZWFkIGZyb20gdGhlIEVFUFJPTQogICogd29yZHMgLSBudW1iZXIgb2Ygd29yZHMgdG8gcmVhZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfcmVhZF9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSkKK3N0YXRpYyBzMzIgZTEwMDBfcmVhZF9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCisJCQkJICB1MTYgKmRhdGEpCiB7CiAgICAgczMyICBlcnJvciA9IEUxMDAwX1NVQ0NFU1M7CiAgICAgdTMyIGZsYXNoX2JhbmsgPSAwOwpAQCAtODQwNSw3ICs4MjQ3LDcgQEAKICAgICAgKiB0byBiZSB1cGRhdGVkIHdpdGggZWFjaCByZWFkLgogICAgICAqLwogICAgIC8qIFZhbHVlIG9mIGJpdCAyMiBjb3JyZXNwb25kcyB0byB0aGUgZmxhc2ggYmFuayB3ZSdyZSBvbi4gKi8KLSAgICBmbGFzaF9iYW5rID0gKEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKSAmIEUxMDAwX0VFQ0RfU0VDMVZBTCkgPyAxIDogMDsKKyAgICBmbGFzaF9iYW5rID0gKGVyMzIoRUVDRCkgJiBFMTAwMF9FRUNEX1NFQzFWQUwpID8gMSA6IDA7CiAKICAgICAvKiBBZGp1c3Qgb2Zmc2V0IGFwcHJvcHJpYXRlbHkgaWYgd2UncmUgb24gYmFuayAxIC0gYWRqdXN0IGZvciB3b3JkIHNpemUgKi8KICAgICBiYW5rX29mZnNldCA9IGZsYXNoX2JhbmsgKiAoaHctPmZsYXNoX2Jhbmtfc2l6ZSAqIDIpOwpAQCAtODQ0NCw5ICs4Mjg2LDggQEAKICAqIHdvcmRzIC0gbnVtYmVyIG9mIHdvcmRzIHRvIHdyaXRlCiAgKiBkYXRhIC0gd29yZHMgdG8gd3JpdGUgdG8gdGhlIEVFUFJPTQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfd3JpdGVfZWVwcm9tX2ljaDgoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKQorc3RhdGljIHMzMiBlMTAwMF93cml0ZV9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCisJCQkJICAgdTE2ICpkYXRhKQogewogICAgIHUzMiBpID0gMDsKICAgICBzMzIgZXJyb3IgPSBFMTAwMF9TVUNDRVNTOwpAQCAtODQ5MSw4ICs4MzMyLDcgQEAKICAqCiAgKiBodyAtIFRoZSBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3R1cmUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfaWNoOF9jeWNsZV9pbml0KHN0cnVjdCBlMTAwMF9odyAqaHcpCitzdGF0aWMgczMyIGUxMDAwX2ljaDhfY3ljbGVfaW5pdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX3N0YXR1cyBoc2ZzdHM7CiAgICAgczMyIGVycm9yID0gRTEwMDBfRVJSX0VFUFJPTTsKQEAgLTg1NTgsOCArODM5OCw3IEBACiAgKgogICogaHcgLSBUaGUgcG9pbnRlciB0byB0aGUgaHcgc3RydWN0dXJlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX2ljaDhfZmxhc2hfY3ljbGUoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHRpbWVvdXQpCitzdGF0aWMgczMyIGUxMDAwX2ljaDhfZmxhc2hfY3ljbGUoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHRpbWVvdXQpCiB7CiAgICAgdW5pb24gaWNoOF9od3NfZmxhc2hfY3RybCBoc2ZsY3RsOwogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX3N0YXR1cyBoc2ZzdHM7CkBAIC04NTkzLDkgKzg0MzIsOCBAQAogICogc2l6ZSAtIFNpemUgb2YgZGF0YSB0byByZWFkLCAxPWJ5dGUgMj13b3JkCiAgKiBkYXRhIC0gUG9pbnRlciB0byB0aGUgd29yZCB0byBzdG9yZSB0aGUgdmFsdWUgcmVhZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX3JlYWRfaWNoOF9kYXRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgIHUzMiBzaXplLCB1MTYqIGRhdGEpCitzdGF0aWMgczMyIGUxMDAwX3JlYWRfaWNoOF9kYXRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTMyIHNpemUsCisJCQkJdTE2ICpkYXRhKQogewogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX3N0YXR1cyBoc2ZzdHM7CiAgICAgdW5pb24gaWNoOF9od3NfZmxhc2hfY3RybCBoc2ZsY3RsOwpAQCAtODY3Miw5ICs4NTEwLDggQEAKICAqIHNpemUgLSBTaXplIG9mIGRhdGEgdG8gcmVhZCwgMT1ieXRlIDI9d29yZAogICogZGF0YSAtIFRoZSBieXRlKHMpIHRvIHdyaXRlIHRvIHRoZSBOVk0uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF93cml0ZV9pY2g4X2RhdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LCB1MzIgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICB1MTYgZGF0YSkKK3N0YXRpYyBzMzIgZTEwMDBfd3JpdGVfaWNoOF9kYXRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTMyIHNpemUsCisJCQkJIHUxNiBkYXRhKQogewogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX3N0YXR1cyBoc2ZzdHM7CiAgICAgdW5pb24gaWNoOF9od3NfZmxhc2hfY3RybCBoc2ZsY3RsOwpAQCAtODc0Nyw4ICs4NTg0LDcgQEAKICAqIGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBieXRlIHRvIHJlYWQuCiAgKiBkYXRhIC0gUG9pbnRlciB0byBhIGJ5dGUgdG8gc3RvcmUgdGhlIHZhbHVlIHJlYWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9yZWFkX2ljaDhfYnl0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaW5kZXgsIHU4KiBkYXRhKQorc3RhdGljIHMzMiBlMTAwMF9yZWFkX2ljaDhfYnl0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaW5kZXgsIHU4ICpkYXRhKQogewogICAgIHMzMiBzdGF0dXMgPSBFMTAwMF9TVUNDRVNTOwogICAgIHUxNiB3b3JkID0gMDsKQEAgLTg3NzAsOCArODYwNiw3IEBACiAgKiBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYnl0ZSB0byB3cml0ZS4KICAqIGJ5dGUgLSBUaGUgYnl0ZSB0byB3cml0ZSB0byB0aGUgTlZNLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfdmVyaWZ5X3dyaXRlX2ljaDhfYnl0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaW5kZXgsIHU4IGJ5dGUpCitzdGF0aWMgczMyIGUxMDAwX3ZlcmlmeV93cml0ZV9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LCB1OCBieXRlKQogewogICAgIHMzMiBlcnJvciA9IEUxMDAwX1NVQ0NFU1M7CiAgICAgczMyIHByb2dyYW1fcmV0cmllcyA9IDA7CkBAIC04ODAzLDggKzg2MzgsNyBAQAogICogaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGJ5dGUgdG8gcmVhZC4KICAqIGRhdGEgLSBUaGUgYnl0ZSB0byB3cml0ZSB0byB0aGUgTlZNLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHMzMgotZTEwMDBfd3JpdGVfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTggZGF0YSkKK3N0YXRpYyBzMzIgZTEwMDBfd3JpdGVfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTggZGF0YSkKIHsKICAgICBzMzIgc3RhdHVzID0gRTEwMDBfU1VDQ0VTUzsKICAgICB1MTYgd29yZCA9ICh1MTYpZGF0YTsKQEAgLTg4MjEsOCArODY1NSw3IEBACiAgKiBpbmRleCAtIFRoZSBzdGFydGluZyBieXRlIGluZGV4IG9mIHRoZSB3b3JkIHRvIHJlYWQuCiAgKiBkYXRhIC0gUG9pbnRlciB0byBhIHdvcmQgdG8gc3RvcmUgdGhlIHZhbHVlIHJlYWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9yZWFkX2ljaDhfd29yZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaW5kZXgsIHUxNiAqZGF0YSkKK3N0YXRpYyBzMzIgZTEwMDBfcmVhZF9pY2g4X3dvcmQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LCB1MTYgKmRhdGEpCiB7CiAgICAgczMyIHN0YXR1cyA9IEUxMDAwX1NVQ0NFU1M7CiAgICAgc3RhdHVzID0gZTEwMDBfcmVhZF9pY2g4X2RhdGEoaHcsIGluZGV4LCAyLCBkYXRhKTsKQEAgLTg4NDAsOCArODY3Myw3IEBACiAgKiBhbW91bnQgb2YgTlZNIHVzZWQgaW4gZWFjaCBiYW5rIGlzIGEgKm1pbmltdW0qIG9mIDQgS0J5dGVzLCBidXQgaW4gZmFjdCB0aGUKICAqIGJhbmsgc2l6ZSBtYXkgYmUgNCwgOCBvciA2NCBLQnl0ZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzMzIKLWUxMDAwX2VyYXNlX2ljaDhfNGtfc2VnbWVudChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgYmFuaykKK3N0YXRpYyBzMzIgZTEwMDBfZXJhc2VfaWNoOF80a19zZWdtZW50KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBiYW5rKQogewogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX3N0YXR1cyBoc2ZzdHM7CiAgICAgdW5pb24gaWNoOF9od3NfZmxhc2hfY3RybCBoc2ZsY3RsOwpAQCAtODkzMCw5ICs4NzYyLDkgQEAKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBzMzIKLWUxMDAwX2luaXRfbGNkX2Zyb21fbnZtX2NvbmZpZ19yZWdpb24oc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGNuZl9iYXNlX2FkZHIsIHUzMiBjbmZfc2l6ZSkKK3N0YXRpYyBzMzIgZTEwMDBfaW5pdF9sY2RfZnJvbV9udm1fY29uZmlnX3JlZ2lvbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LAorCQkJCQkJIHUzMiBjbmZfYmFzZV9hZGRyLAorCQkJCQkJIHUzMiBjbmZfc2l6ZSkKIHsKICAgICB1MzIgcmV0X3ZhbCA9IEUxMDAwX1NVQ0NFU1M7CiAgICAgdTE2IHdvcmRfYWRkciwgcmVnX2RhdGEsIHJlZ19hZGRyOwpAQCAtODk3Miw4ICs4ODA0LDcgQEAKICAqCiAgKiBodzogU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgczMyCi1lMTAwMF9pbml0X2xjZF9mcm9tX252bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHMzMiBlMTAwMF9pbml0X2xjZF9mcm9tX252bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHUzMiByZWdfZGF0YSwgY25mX2Jhc2VfYWRkciwgY25mX3NpemUsIHJldF92YWwsIGxvb3A7CiAKQEAgLTg5ODEsMzIgKzg4MTIsMzIgQEAKICAgICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIAogICAgIC8qIENoZWNrIGlmIFNXIG5lZWRzIGNvbmZpZ3VyZSB0aGUgUEhZICovCi0gICAgcmVnX2RhdGEgPSBFMTAwMF9SRUFEX1JFRyhodywgRkVYVE5WTSk7CisgICAgcmVnX2RhdGEgPSBlcjMyKEZFWFROVk0pOwogICAgIGlmICghKHJlZ19kYXRhICYgRkVYVE5WTV9TV19DT05GSUcpKQogICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIAogICAgIC8qIFdhaXQgZm9yIGJhc2ljIGNvbmZpZ3VyYXRpb24gY29tcGxldGVzIGJlZm9yZSBwcm9jZWVkaW5nKi8KICAgICBsb29wID0gMDsKICAgICBkbyB7Ci0gICAgICAgIHJlZ19kYXRhID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTEFOX0lOSVRfRE9ORTsKKyAgICAgICAgcmVnX2RhdGEgPSBlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTEFOX0lOSVRfRE9ORTsKICAgICAgICAgdWRlbGF5KDEwMCk7CiAgICAgICAgIGxvb3ArKzsKICAgICB9IHdoaWxlICgoIXJlZ19kYXRhKSAmJiAobG9vcCA8IDUwKSk7CiAKICAgICAvKiBDbGVhciB0aGUgSW5pdCBEb25lIGJpdCBmb3IgdGhlIG5leHQgaW5pdCBldmVudCAqLwotICAgIHJlZ19kYXRhID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUyk7CisgICAgcmVnX2RhdGEgPSBlcjMyKFNUQVRVUyk7CiAgICAgcmVnX2RhdGEgJj0gfkUxMDAwX1NUQVRVU19MQU5fSU5JVF9ET05FOwotICAgIEUxMDAwX1dSSVRFX1JFRyhodywgU1RBVFVTLCByZWdfZGF0YSk7CisgICAgZXczMihTVEFUVVMsIHJlZ19kYXRhKTsKIAogICAgIC8qIE1ha2Ugc3VyZSBIVyBkb2VzIG5vdCBjb25maWd1cmUgTENEIGZyb20gUEhZIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb24KICAgICAgICBiZWZvcmUgU1cgY29uZmlndXJhdGlvbiAqLwotICAgIHJlZ19kYXRhID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVYVENORl9DVFJMKTsKKyAgICByZWdfZGF0YSA9IGVyMzIoRVhUQ05GX0NUUkwpOwogICAgIGlmICgocmVnX2RhdGEgJiBFMTAwMF9FWFRDTkZfQ1RSTF9MQ0RfV1JJVEVfRU5BQkxFKSA9PSAweDAwMDApIHsKLSAgICAgICAgcmVnX2RhdGEgPSBFMTAwMF9SRUFEX1JFRyhodywgRVhUQ05GX1NJWkUpOworICAgICAgICByZWdfZGF0YSA9IGVyMzIoRVhUQ05GX1NJWkUpOwogICAgICAgICBjbmZfc2l6ZSA9IHJlZ19kYXRhICYgRTEwMDBfRVhUQ05GX1NJWkVfRVhUX1BDSUVfTEVOR1RIOwogICAgICAgICBjbmZfc2l6ZSA+Pj0gMTY7CiAgICAgICAgIGlmIChjbmZfc2l6ZSkgewotICAgICAgICAgICAgcmVnX2RhdGEgPSBFMTAwMF9SRUFEX1JFRyhodywgRVhUQ05GX0NUUkwpOworICAgICAgICAgICAgcmVnX2RhdGEgPSBlcjMyKEVYVENORl9DVFJMKTsKICAgICAgICAgICAgIGNuZl9iYXNlX2FkZHIgPSByZWdfZGF0YSAmIEUxMDAwX0VYVENORl9DVFJMX0VYVF9DTkZfUE9JTlRFUjsKICAgICAgICAgICAgIC8qIGNuZl9iYXNlX2FkZHIgaXMgaW4gRFdPUkQgKi8KICAgICAgICAgICAgIGNuZl9iYXNlX2FkZHIgPj49IDE2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCmluZGV4IDU5NTc5YjEuLmFkNmRhN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKQEAgLTMxLDEyICszMSw3IEBACiAKIGNoYXIgZTEwMDBfZHJpdmVyX25hbWVbXSA9ICJlMTAwMCI7CiBzdGF0aWMgY2hhciBlMTAwMF9kcml2ZXJfc3RyaW5nW10gPSAiSW50ZWwoUikgUFJPLzEwMDAgTmV0d29yayBEcml2ZXIiOwotI2lmbmRlZiBDT05GSUdfRTEwMDBfTkFQSQotI2RlZmluZSBEUklWRVJOQVBJCi0jZWxzZQotI2RlZmluZSBEUklWRVJOQVBJICItTkFQSSIKLSNlbmRpZgotI2RlZmluZSBEUlZfVkVSU0lPTiAiNy4zLjIwLWsyIkRSSVZFUk5BUEkKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjcuMy4yMC1rMy1OQVBJIgogY29uc3QgY2hhciBlMTAwMF9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY29uc3QgY2hhciBlMTAwMF9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCkBAIC00NywxMiArNDIsNiBAQAogICogTWFjcm8gZXhwYW5kcyB0by4uLgogICogICB7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBkZXZpY2VfaWQpfQogICovCi0jaWZkZWYgQ09ORklHX0UxMDAwRV9FTkFCTEVECi0gICNkZWZpbmUgUENJRSh4KSAKLSNlbHNlCi0gICNkZWZpbmUgUENJRSh4KSB4LAotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlMTAwMF9wY2lfdGJsW10gPSB7CiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTAwMCksCiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTAwMSksCkBAIC03OSwxNCArNjgsNiBAQAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwMjYpLAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwMjcpLAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwMjgpLAotUENJRSgJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA0OSkpCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDRBKSkKLVBDSUUoCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwNEIpKQotUENJRSgJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA0QykpCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDREKSkKLVBDSUUoCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwNUUpKQotUENJRSgJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA1RikpCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDYwKSkKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDc1KSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDc2KSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDc3KSwKQEAgLTk1LDI4ICs3Niw5IEBACiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA3QSksCiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA3QiksCiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA3QyksCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDdEKSkKLVBDSUUoCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwN0UpKQotUENJRSgJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA3RikpCiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA4QSksCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDhCKSkKLVBDSUUoCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwOEMpKQotUENJRSgJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA5NikpCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDk4KSkKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDk5KSwKLVBDSUUoCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwOUEpKQotUENJRSgJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTBBNCkpCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMEE1KSkKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMEI1KSwKLVBDSUUoCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwQjkpKQotUENJRSgJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTBCQSkpCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMEJCKSkKLVBDSUUoCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwQkMpKQotUENJRSgJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTBDNCkpCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMEM1KSkKLVBDSUUoCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwRDUpKQotUENJRSgJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTBEOSkpCi1QQ0lFKAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMERBKSkKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCiAJezAsfQogfTsKQEAgLTE3MSw3ICsxMzMsNiBAQAogc3RhdGljIGlycXJldHVybl90IGUxMDAwX2ludHJfbXNpKGludCBpcnEsIHZvaWQgKmRhdGEpOwogc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fdHhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgICAgIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nKTsKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogc3RhdGljIGludCBlMTAwMF9jbGVhbihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwogc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLApAQCAtMTc5LDEyICsxNDAsNiBAQAogc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxX3BzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAogCQkJCSAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCiAJCQkJICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pOwotI2Vsc2UKLXN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZyk7Ci1zdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnFfcHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZyk7Ci0jZW5kaWYKIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAogCQkJCSAgIGludCBjbGVhbmVkX2NvdW50KTsKQEAgLTI2NSw4ICsyMjAsNyBAQAogICogbG9hZGVkLiBBbGwgaXQgZG9lcyBpcyByZWdpc3RlciB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtLgogICoqLwogCi1zdGF0aWMgaW50IF9faW5pdAotZTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGUxMDAwX2luaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IHJldDsKIAlwcmludGsoS0VSTl9JTkZPICIlcyAtIHZlcnNpb24gJXNcbiIsCkBAIC0yOTQsOCArMjQ4LDcgQEAKICAqIGZyb20gbWVtb3J5LgogICoqLwogCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWUxMDAwX2V4aXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZTEwMDBfZXhpdF9tb2R1bGUodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmUxMDAwX2RyaXZlcik7CiB9CkBAIC0zMDQsMTIgKzI1NywxMyBAQAogCiBzdGF0aWMgaW50IGUxMDAwX3JlcXVlc3RfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlpcnFfaGFuZGxlcl90IGhhbmRsZXIgPSBlMTAwMF9pbnRyOwogCWludCBpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKIAlpbnQgZXJyOwogCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTcxKSB7CisJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkgewogCQlhZGFwdGVyLT5oYXZlX21zaSA9ICFwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKIAkJaWYgKGFkYXB0ZXItPmhhdmVfbXNpKSB7CiAJCQloYW5kbGVyID0gZTEwMDBfaW50cl9tc2k7CkBAIC0zNDQsMTEgKzI5OCwxMiBAQAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiovCiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIGUxMDAwX2lycV9kaXNhYmxlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewotCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgfjApOwotCUUxMDAwX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWV3MzIoSU1DLCB+MCk7CisJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKIH0KIApAQCAtMzU3LDIyICszMTIsMjMgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgdm9pZAotZTEwMDBfaXJxX2VuYWJsZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIGUxMDAwX2lycV9lbmFibGUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1TLCBJTVNfRU5BQkxFX01BU0spOwotCUUxMDAwX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWV3MzIoSU1TLCBJTVNfRU5BQkxFX01BU0spOworCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1lMTAwMF91cGRhdGVfbW5nX3ZsYW4oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBlMTAwMF91cGRhdGVfbW5nX3ZsYW4oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXUxNiB2aWQgPSBhZGFwdGVyLT5ody5tbmdfY29va2llLnZsYW5faWQ7CisJdTE2IHZpZCA9IGh3LT5tbmdfY29va2llLnZsYW5faWQ7CiAJdTE2IG9sZF92aWQgPSBhZGFwdGVyLT5tbmdfdmxhbl9pZDsKIAlpZiAoYWRhcHRlci0+dmxncnApIHsKIAkJaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCkpIHsKLQkJCWlmIChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0YXR1cyAmCisJCQlpZiAoaHctPm1uZ19jb29raWUuc3RhdHVzICYKIAkJCQlFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU5fU1VQUE9SVCkgewogCQkJCWUxMDAwX3ZsYW5fcnhfYWRkX3ZpZChuZXRkZXYsIHZpZCk7CiAJCQkJYWRhcHRlci0+bW5nX3ZsYW5faWQgPSB2aWQ7CkBAIC0zOTksMjYgKzM1NSwyNCBAQAogICoKICAqKi8KIAotc3RhdGljIHZvaWQKLWUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIGUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgY3RybF9leHQ7CiAJdTMyIHN3c207CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCS8qIExldCBmaXJtd2FyZSB0YWtlbiBvdmVyIGNvbnRyb2wgb2YgaC93ICovCi0Jc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgeworCXN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3MzoKLQkJc3dzbSA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1dTTSk7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFNXU00sCi0JCQkJc3dzbSAmIH5FMTAwMF9TV1NNX0RSVl9MT0FEKTsKKwkJc3dzbSA9IGVyMzIoU1dTTSk7CisJCWV3MzIoU1dTTSwgc3dzbSAmIH5FMTAwMF9TV1NNX0RSVl9MT0FEKTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgyNTcyOgogCWNhc2UgZTEwMDBfODAwMDNlczJsYW46CiAJY2FzZSBlMTAwMF9pY2g4bGFuOgotCQljdHJsX2V4dCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTF9FWFQpOwotCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMX0VYVCwKLQkJCQljdHJsX2V4dCAmIH5FMTAwMF9DVFJMX0VYVF9EUlZfTE9BRCk7CisJCWN0cmxfZXh0ID0gZXIzMihDVFJMX0VYVCk7CisJCWV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0ICYgfkUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC00MzYsMzcgKzM5MCwzNiBAQAogICoKICAqKi8KIAotc3RhdGljIHZvaWQKLWUxMDAwX2dldF9od19jb250cm9sKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgZTEwMDBfZ2V0X2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTMyIGN0cmxfZXh0OwogCXUzMiBzd3NtOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAkvKiBMZXQgZmlybXdhcmUga25vdyB0aGUgZHJpdmVyIGhhcyB0YWtlbiBvdmVyICovCi0Jc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgeworCXN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3MzoKLQkJc3dzbSA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1dTTSk7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFNXU00sCi0JCQkJc3dzbSB8IEUxMDAwX1NXU01fRFJWX0xPQUQpOworCQlzd3NtID0gZXIzMihTV1NNKTsKKwkJZXczMihTV1NNLCBzd3NtIHwgRTEwMDBfU1dTTV9EUlZfTE9BRCk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzE6CiAJY2FzZSBlMTAwMF84MjU3MjoKIAljYXNlIGUxMDAwXzgwMDAzZXMybGFuOgogCWNhc2UgZTEwMDBfaWNoOGxhbjoKLQkJY3RybF9leHQgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIENUUkxfRVhUKTsKLQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgQ1RSTF9FWFQsCi0JCQkJY3RybF9leHQgfCBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRCk7CisJCWN0cmxfZXh0ID0gZXIzMihDVFJMX0VYVCk7CisJCWV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0IHwgRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9pbml0X21hbmFnZWFiaWxpdHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBlMTAwMF9pbml0X21hbmFnZWFiaWxpdHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwogCWlmIChhZGFwdGVyLT5lbl9tbmdfcHQpIHsKLQkJdTMyIG1hbmMgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIE1BTkMpOworCQl1MzIgbWFuYyA9IGVyMzIoTUFOQyk7CiAKIAkJLyogZGlzYWJsZSBoYXJkd2FyZSBpbnRlcmNlcHRpb24gb2YgQVJQICovCiAJCW1hbmMgJj0gfihFMTAwMF9NQU5DX0FSUF9FTik7CkBAIC00NzQsMzcgKzQyNywzOCBAQAogCQkvKiBlbmFibGUgcmVjZWl2aW5nIG1hbmFnZW1lbnQgcGFja2V0cyB0byB0aGUgaG9zdCAqLwogCQkvKiB0aGlzIHdpbGwgcHJvYmFibHkgZ2VuZXJhdGUgZGVzdGluYXRpb24gdW5yZWFjaGFibGUgbWVzc2FnZXMKIAkJICogZnJvbSB0aGUgaG9zdCBPUywgYnV0IHRoZSBwYWNrZXRzIHdpbGwgYmUgaGFuZGxlZCBvbiBTTUJVUyAqLwotCQlpZiAoYWRhcHRlci0+aHcuaGFzX21hbmMyaCkgewotCQkJdTMyIG1hbmMyaCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQzJIKTsKKwkJaWYgKGh3LT5oYXNfbWFuYzJoKSB7CisJCQl1MzIgbWFuYzJoID0gZXIzMihNQU5DMkgpOwogCiAJCQltYW5jIHw9IEUxMDAwX01BTkNfRU5fTU5HMkhPU1Q7CiAjZGVmaW5lIEUxMDAwX01ORzJIT1NUX1BPUlRfNjIzICgxIDw8IDUpCiAjZGVmaW5lIEUxMDAwX01ORzJIT1NUX1BPUlRfNjY0ICgxIDw8IDYpCiAJCQltYW5jMmggfD0gRTEwMDBfTU5HMkhPU1RfUE9SVF82MjM7CiAJCQltYW5jMmggfD0gRTEwMDBfTU5HMkhPU1RfUE9SVF82NjQ7Ci0JCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBNQU5DMkgsIG1hbmMyaCk7CisJCQlldzMyKE1BTkMySCwgbWFuYzJoKTsKIAkJfQogCi0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIE1BTkMsIG1hbmMpOworCQlldzMyKE1BTkMsIG1hbmMpOwogCX0KIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX3JlbGVhc2VfbWFuYWdlYWJpbGl0eShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIGUxMDAwX3JlbGVhc2VfbWFuYWdlYWJpbGl0eShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCiAJaWYgKGFkYXB0ZXItPmVuX21uZ19wdCkgewotCQl1MzIgbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7CisJCXUzMiBtYW5jID0gZXIzMihNQU5DKTsKIAogCQkvKiByZS1lbmFibGUgaGFyZHdhcmUgaW50ZXJjZXB0aW9uIG9mIEFSUCAqLwogCQltYW5jIHw9IEUxMDAwX01BTkNfQVJQX0VOOwogCi0JCWlmIChhZGFwdGVyLT5ody5oYXNfbWFuYzJoKQorCQlpZiAoaHctPmhhc19tYW5jMmgpCiAJCQltYW5jICY9IH5FMTAwMF9NQU5DX0VOX01ORzJIT1NUOwogCiAJCS8qIGRvbid0IGV4cGxpY2l0bHkgaGF2ZSB0byBtZXNzIHdpdGggTUFOQzJIIHNpbmNlCiAJCSAqIE1BTkMgaGFzIGFuIGVuYWJsZSBkaXNhYmxlIHRoYXQgZ2F0ZXMgTUFOQzJIICovCiAKLQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgTUFOQywgbWFuYyk7CisJCWV3MzIoTUFOQywgbWFuYyk7CiAJfQogfQogCkBAIC01MzksMTggKzQ5MywxOSBAQAogCiBpbnQgZTEwMDBfdXAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwogCS8qIGhhcmR3YXJlIGhhcyBiZWVuIHJlc2V0LCB3ZSBuZWVkIHRvIHJlbG9hZCBzb21lIHRoaW5ncyAqLwogCWUxMDAwX2NvbmZpZ3VyZShhZGFwdGVyKTsKIAogCWNsZWFyX2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CiAKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKLSNlbmRpZgorCiAJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAogCS8qIGZpcmUgYSBsaW5rIGNoYW5nZSBpbnRlcnJ1cHQgdG8gc3RhcnQgdGhlIHdhdGNoZG9nICovCi0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSUNTLCBFMTAwMF9JQ1NfTFNDKTsKKwlldzMyKElDUywgRTEwMDBfSUNTX0xTQyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2NiwzMCArNTIxLDMzIEBACiAKIHZvaWQgZTEwMDBfcG93ZXJfdXBfcGh5KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTE2IG1paV9yZWcgPSAwOwogCiAJLyogSnVzdCBjbGVhciB0aGUgcG93ZXIgZG93biBiaXQgdG8gd2FrZSB0aGUgcGh5IGJhY2sgdXAgKi8KLQlpZiAoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworCWlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQkvKiBhY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCwgdGhlIHBoeSB3aWxsIHJldGFpbiBpdHMKIAkJICogc2V0dGluZ3MgYWNyb3NzIGEgcG93ZXItZG93bi91cCBjeWNsZSAqLwotCQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgJm1paV9yZWcpOworCQllMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9DVFJMLCAmbWlpX3JlZyk7CiAJCW1paV9yZWcgJj0gfk1JSV9DUl9QT1dFUl9ET1dOOwotCQllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgUEhZX0NUUkwsIG1paV9yZWcpOworCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgbWlpX3JlZyk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBlMTAwMF9wb3dlcl9kb3duX3BoeShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCiAJLyogUG93ZXIgZG93biB0aGUgUEhZIHNvIG5vIGxpbmsgaXMgaW1wbGllZCB3aGVuIGludGVyZmFjZSBpcyBkb3duICoKIAkgKiBUaGUgUEhZIGNhbm5vdCBiZSBwb3dlcmVkIGRvd24gaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZSAqCiAJICogKGEpIFdvTCBpcyBlbmFibGVkCiAJICogKGIpIEFNVCBpcyBhY3RpdmUKIAkgKiAoYykgU29ML0lERVIgc2Vzc2lvbiBpcyBhY3RpdmUgKi8KLQlpZiAoIWFkYXB0ZXItPndvbCAmJiBhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJgotCSAgIGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwlpZiAoIWFkYXB0ZXItPndvbCAmJiBody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDAgJiYKKwkgICBody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQl1MTYgbWlpX3JlZyA9IDA7CiAKLQkJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgeworCQlzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogCQljYXNlIGUxMDAwXzgyNTQwOgogCQljYXNlIGUxMDAwXzgyNTQ1OgogCQljYXNlIGUxMDAwXzgyNTQ1X3Jldl8zOgpAQCAtNTk5LDggKzU1Nyw3IEBACiAJCWNhc2UgZTEwMDBfODI1NDFfcmV2XzI6CiAJCWNhc2UgZTEwMDBfODI1NDc6CiAJCWNhc2UgZTEwMDBfODI1NDdfcmV2XzI6Ci0JCQlpZiAoRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBNQU5DKSAmCi0JCQkgICAgRTEwMDBfTUFOQ19TTUJVU19FTikKKwkJCWlmIChlcjMyKE1BTkMpICYgRTEwMDBfTUFOQ19TTUJVU19FTikKIAkJCQlnb3RvIG91dDsKIAkJCWJyZWFrOwogCQljYXNlIGUxMDAwXzgyNTcxOgpAQCAtNjA4LDI0ICs1NjUsMjMgQEAKIAkJY2FzZSBlMTAwMF84MjU3MzoKIAkJY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKIAkJY2FzZSBlMTAwMF9pY2g4bGFuOgotCQkJaWYgKGUxMDAwX2NoZWNrX21uZ19tb2RlKCZhZGFwdGVyLT5odykgfHwKLQkJCSAgICBlMTAwMF9jaGVja19waHlfcmVzZXRfYmxvY2soJmFkYXB0ZXItPmh3KSkKKwkJCWlmIChlMTAwMF9jaGVja19tbmdfbW9kZShodykgfHwKKwkJCSAgICBlMTAwMF9jaGVja19waHlfcmVzZXRfYmxvY2soaHcpKQogCQkJCWdvdG8gb3V0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIG91dDsKIAkJfQotCQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgJm1paV9yZWcpOworCQllMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9DVFJMLCAmbWlpX3JlZyk7CiAJCW1paV9yZWcgfD0gTUlJX0NSX1BPV0VSX0RPV047Ci0JCWUxMDAwX3dyaXRlX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgbWlpX3JlZyk7CisJCWUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV9DVFJMLCBtaWlfcmVnKTsKIAkJbWRlbGF5KDEpOwogCX0KIG91dDoKIAlyZXR1cm47CiB9CiAKLXZvaWQKLWUxMDAwX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIGUxMDAwX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIApAQCAtNjMzLDkgKzU4OSw4IEBACiAJICogcmVzY2hlZHVsZSBvdXIgd2F0Y2hkb2cgdGltZXIgKi8KIAlzZXRfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKTsKIAotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKLSNlbmRpZgorCiAJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+dHhfZmlmb19zdGFsbF90aW1lcik7CkBAIC02NTMsOCArNjA4LDcgQEAKIAllMTAwMF9jbGVhbl9hbGxfcnhfcmluZ3MoYWRhcHRlcik7CiB9CiAKLXZvaWQKLWUxMDAwX3JlaW5pdF9sb2NrZWQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIGUxMDAwX3JlaW5pdF9sb2NrZWQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncykpCkBAIC02NjQsOSArNjE4LDkgQEAKIAljbGVhcl9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncyk7CiB9CiAKLXZvaWQKLWUxMDAwX3Jlc2V0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQordm9pZCBlMTAwMF9yZXNldChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBwYmEgPSAwLCB0eF9zcGFjZSwgbWluX3R4X3NwYWNlLCBtaW5fcnhfc3BhY2U7CiAJdTE2IGZjX2hpZ2hfd2F0ZXJfbWFyayA9IEUxMDAwX0ZDX0hJR0hfRElGRjsKIAlib29sIGxlZ2FjeV9wYmFfYWRqdXN0ID0gZmFsc2U7CkBAIC02NzUsNyArNjI5LDcgQEAKIAkgKiBUbyB0YWtlIGVmZmVjdCBDVFJMLlJTVCBpcyByZXF1aXJlZC4KIAkgKi8KIAotCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjX3R5cGUpIHsKKwlzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogCWNhc2UgZTEwMDBfODI1NDJfcmV2Ml8wOgogCWNhc2UgZTEwMDBfODI1NDJfcmV2Ml8xOgogCWNhc2UgZTEwMDBfODI1NDM6CkBAIC03MTYsMTYgKzY3MCwxNiBAQAogCQlpZiAoYWRhcHRlci0+bmV0ZGV2LT5tdHUgPiBFMTAwMF9SWEJVRkZFUl84MTkyKQogCQkJcGJhIC09IDg7IC8qIGFsbG9jYXRlIG1vcmUgRklGTyBmb3IgVHggKi8KIAotCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NDcpIHsKKwkJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykgewogCQkJYWRhcHRlci0+dHhfZmlmb19oZWFkID0gMDsKIAkJCWFkYXB0ZXItPnR4X2hlYWRfYWRkciA9IHBiYSA8PCBFMTAwMF9UWF9IRUFEX0FERFJfU0hJRlQ7CiAJCQlhZGFwdGVyLT50eF9maWZvX3NpemUgPQogCQkJCShFMTAwMF9QQkFfNDBLIC0gcGJhKSA8PCBFMTAwMF9QQkFfQllURVNfU0hJRlQ7CiAJCQlhdG9taWNfc2V0KCZhZGFwdGVyLT50eF9maWZvX3N0YWxsLCAwKTsKIAkJfQotCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWF4X2ZyYW1lX3NpemUgPiBNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUpIHsKKwl9IGVsc2UgaWYgKGh3LT5tYXhfZnJhbWVfc2l6ZSA+IE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgewogCQkvKiBhZGp1c3QgUEJBIGZvciBqdW1ibyBmcmFtZXMgKi8KLQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUEJBLCBwYmEpOworCQlldzMyKFBCQSwgcGJhKTsKIAogCQkvKiBUbyBtYWludGFpbiB3aXJlIHNwZWVkIHRyYW5zbWl0cywgdGhlIFR4IEZJRk8gc2hvdWxkIGJlCiAJCSAqIGxhcmdlIGVub3VnaCB0byBhY2NvbW9kYXRlIHR3byBmdWxsIHRyYW5zbWl0IHBhY2tldHMsCkBAIC03MzMsNyArNjg3LDcgQEAKIAkJICogdGhlIFJ4IEZJRk8gc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBhY2NvbW9kYXRlIGF0IGxlYXN0CiAJCSAqIG9uZSBmdWxsIHJlY2VpdmUgcGFja2V0IGFuZCBpcyBzaW1pbGFybHkgcm91bmRlZCB1cCBhbmQKIAkJICogZXhwcmVzc2VkIGluIEtCLiAqLwotCQlwYmEgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFBCQSk7CisJCXBiYSA9IGVyMzIoUEJBKTsKIAkJLyogdXBwZXIgMTYgYml0cyBoYXMgVHggcGFja2V0IGJ1ZmZlciBhbGxvY2F0aW9uIHNpemUgaW4gS0IgKi8KIAkJdHhfc3BhY2UgPSBwYmEgPj4gMTY7CiAJCS8qIGxvd2VyIDE2IGJpdHMgaGFzIFJ4IHBhY2tldCBidWZmZXIgYWxsb2NhdGlvbiBzaXplIGluIEtCICovCkBAIC03NTYsNyArNzEwLDcgQEAKIAkJCXBiYSA9IHBiYSAtIChtaW5fdHhfc3BhY2UgLSB0eF9zcGFjZSk7CiAKIAkJCS8qIFBDSS9QQ0l4IGhhcmR3YXJlIGhhcyBQQkEgYWxpZ25tZW50IGNvbnN0cmFpbnRzICovCi0JCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CisJCQlzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogCQkJY2FzZSBlMTAwMF84MjU0NSAuLi4gZTEwMDBfODI1NDZfcmV2XzM6CiAJCQkJcGJhICY9IH4oRTEwMDBfUEJBXzhLIC0gMSk7CiAJCQkJYnJlYWs7CkBAIC03NjcsNyArNzIxLDcgQEAKIAkJCS8qIGlmIHNob3J0IG9uIHJ4IHNwYWNlLCByeCB3aW5zIGFuZCBtdXN0IHRydW1wIHR4CiAJCQkgKiBhZGp1c3RtZW50IG9yIHVzZSBFYXJseSBSZWNlaXZlIGlmIGF2YWlsYWJsZSAqLwogCQkJaWYgKHBiYSA8IG1pbl9yeF9zcGFjZSkgewotCQkJCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjX3R5cGUpIHsKKwkJCQlzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogCQkJCWNhc2UgZTEwMDBfODI1NzM6CiAJCQkJCS8qIEVSVCBlbmFibGVkIGluIGUxMDAwX2NvbmZpZ3VyZV9yeCAqLwogCQkJCQlicmVhazsKQEAgLTc3OSw3ICs3MzMsNyBAQAogCQl9CiAJfQogCi0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUEJBLCBwYmEpOworCWV3MzIoUEJBLCBwYmEpOwogCiAJLyogZmxvdyBjb250cm9sIHNldHRpbmdzICovCiAJLyogU2V0IHRoZSBGQyBoaWdoIHdhdGVyIG1hcmsgdG8gOTAlIG9mIHRoZSBGSUZPIHNpemUuCkBAIC03OTIsNTQgKzc0Niw1NCBAQAogCWlmIChwYmEgPCBFMTAwMF9QQkFfMTZLKQogCQlmY19oaWdoX3dhdGVyX21hcmsgPSAocGJhICogMTAyNCkgLSAxNjAwOwogCi0JYWRhcHRlci0+aHcuZmNfaGlnaF93YXRlciA9IGZjX2hpZ2hfd2F0ZXJfbWFyazsKLQlhZGFwdGVyLT5ody5mY19sb3dfd2F0ZXIgPSBmY19oaWdoX3dhdGVyX21hcmsgLSA4OwotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikKLQkJYWRhcHRlci0+aHcuZmNfcGF1c2VfdGltZSA9IDB4RkZGRjsKKwlody0+ZmNfaGlnaF93YXRlciA9IGZjX2hpZ2hfd2F0ZXJfbWFyazsKKwlody0+ZmNfbG93X3dhdGVyID0gZmNfaGlnaF93YXRlcl9tYXJrIC0gODsKKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKQorCQlody0+ZmNfcGF1c2VfdGltZSA9IDB4RkZGRjsKIAllbHNlCi0JCWFkYXB0ZXItPmh3LmZjX3BhdXNlX3RpbWUgPSBFMTAwMF9GQ19QQVVTRV9USU1FOwotCWFkYXB0ZXItPmh3LmZjX3NlbmRfeG9uID0gMTsKLQlhZGFwdGVyLT5ody5mYyA9IGFkYXB0ZXItPmh3Lm9yaWdpbmFsX2ZjOworCQlody0+ZmNfcGF1c2VfdGltZSA9IEUxMDAwX0ZDX1BBVVNFX1RJTUU7CisJaHctPmZjX3NlbmRfeG9uID0gMTsKKwlody0+ZmMgPSBody0+b3JpZ2luYWxfZmM7CiAKIAkvKiBBbGxvdyB0aW1lIGZvciBwZW5kaW5nIG1hc3RlciByZXF1ZXN0cyB0byBydW4gKi8KLQllMTAwMF9yZXNldF9odygmYWRhcHRlci0+aHcpOwotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCkKLQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgV1VDLCAwKTsKKwllMTAwMF9yZXNldF9odyhodyk7CisJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCkKKwkJZXczMihXVUMsIDApOwogCi0JaWYgKGUxMDAwX2luaXRfaHcoJmFkYXB0ZXItPmh3KSkKKwlpZiAoZTEwMDBfaW5pdF9odyhodykpCiAJCURQUklOVEsoUFJPQkUsIEVSUiwgIkhhcmR3YXJlIEVycm9yXG4iKTsKIAllMTAwMF91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7CiAKIAkvKiBpZiAoYWRhcHRlci0+aHdmbGFncyAmIEhXRkxBR1NfUEhZX1BXUl9CSVQpIHsgKi8KLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDQgJiYKLQkgICAgYWRhcHRlci0+aHcubWFjX3R5cGUgPD0gZTEwMDBfODI1NDdfcmV2XzIgJiYKLQkgICAgYWRhcHRlci0+aHcuYXV0b25lZyA9PSAxICYmCi0JICAgIGFkYXB0ZXItPmh3LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7Ci0JCXUzMiBjdHJsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMKTsKKwlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQ0ICYmCisJICAgIGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0N19yZXZfMiAmJgorCSAgICBody0+YXV0b25lZyA9PSAxICYmCisJICAgIGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPT0gQURWRVJUSVNFXzEwMDBfRlVMTCkgeworCQl1MzIgY3RybCA9IGVyMzIoQ1RSTCk7CiAJCS8qIGNsZWFyIHBoeSBwb3dlciBtYW5hZ2VtZW50IGJpdCBpZiB3ZSBhcmUgaW4gZ2lnIG9ubHkgbW9kZSwKIAkJICogd2hpY2ggaWYgZW5hYmxlZCB3aWxsIGF0dGVtcHQgbmVnb3RpYXRpb24gdG8gMTAwTWIsIHdoaWNoCiAJCSAqIGNhbiBjYXVzZSBhIGxvc3Mgb2YgbGluayBhdCBwb3dlciBvZmYgb3IgZHJpdmVyIHVubG9hZCAqLwogCQljdHJsICY9IH5FMTAwMF9DVFJMX1NXRFBJTjM7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwsIGN0cmwpOworCQlldzMyKENUUkwsIGN0cmwpOwogCX0KIAogCS8qIEVuYWJsZSBoL3cgdG8gcmVjb2duaXplIGFuIDgwMi4xUSBWTEFOIEV0aGVybmV0IHBhY2tldCAqLwotCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFZFVCwgRVRIRVJORVRfSUVFRV9WTEFOX1RZUEUpOworCWV3MzIoVkVULCBFVEhFUk5FVF9JRUVFX1ZMQU5fVFlQRSk7CiAKLQllMTAwMF9yZXNldF9hZGFwdGl2ZSgmYWRhcHRlci0+aHcpOwotCWUxMDAwX3BoeV9nZXRfaW5mbygmYWRhcHRlci0+aHcsICZhZGFwdGVyLT5waHlfaW5mbyk7CisJZTEwMDBfcmVzZXRfYWRhcHRpdmUoaHcpOworCWUxMDAwX3BoeV9nZXRfaW5mbyhodywgJmFkYXB0ZXItPnBoeV9pbmZvKTsKIAogCWlmICghYWRhcHRlci0+c21hcnRfcG93ZXJfZG93biAmJgotCSAgICAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzEgfHwKLQkgICAgIGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgyNTcyKSkgeworCSAgICAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTcxIHx8CisJICAgICBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzIpKSB7CiAJCXUxNiBwaHlfZGF0YSA9IDA7CiAJCS8qIHNwZWVkIHVwIHRpbWUgdG8gbGluayBieSBkaXNhYmxpbmcgc21hcnQgcG93ZXIgZG93biwgaWdub3JlCiAJCSAqIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcKIAkJICogZGlmZmVyZW50IHdlIHdvdWxkIGRvIGlmIGl0IGZhaWxlZCAqLwotCQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQllMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCiAJCSAgICAgICAgICAgICAgICAgICAmcGh5X2RhdGEpOwogCQlwaHlfZGF0YSAmPSB+SUdQMDJFMTAwMF9QTV9TUEQ7Ci0JCWUxMDAwX3dyaXRlX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAogCQkgICAgICAgICAgICAgICAgICAgIHBoeV9kYXRhKTsKIAl9CiAKQEAgLTg5OCwxMyArODUyLDQ5IEBACiAJcHJpbnRrKEtFUk5fRVJSICJ0byBlbmFibGUgdGhpcyBuZXR3b3JrIGRldmljZS5cbiIpOwogCXByaW50ayhLRVJOX0VSUiAiUGxlYXNlIGluc3BlY3QgdGhlIEVFUFJPTSBkdW1wIGFuZCByZXBvcnQgdGhlIGlzc3VlICIKIAkgICAgICAgInRvIHlvdXIgaGFyZHdhcmUgdmVuZG9yXG4iKTsKLQlwcmludGsoS0VSTl9FUlIgIm9yIEludGVsIEN1c3RvbWVyIFN1cHBvcnQ6IGxpbnV4LW5pY3NAaW50ZWwuY29tXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIm9yIEludGVsIEN1c3RvbWVyIFN1cHBvcnQuXG4iKTsKIAlwcmludGsoS0VSTl9FUlIgIi8qKioqKioqKioqKioqKioqKioqKiovXG4iKTsKIAogCWtmcmVlKGRhdGEpOwogfQogCiAvKioKKyAqIGUxMDAwX2lzX25lZWRfaW9wb3J0IC0gZGV0ZXJtaW5lIGlmIGFuIGFkYXB0ZXIgbmVlZHMgaW9wb3J0IHJlc291cmNlcyBvciBub3QKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAorICoKKyAqIFJldHVybiB0cnVlIGlmIGFuIGFkYXB0ZXIgbmVlZHMgaW9wb3J0IHJlc291cmNlcworICoqLworc3RhdGljIGludCBlMTAwMF9pc19uZWVkX2lvcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQwRU06CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDBFTV9MT006CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDBFUDoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MEVQX0xPTToKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MEVQX0xQOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQxRUk6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDFFSV9NT0JJTEU6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDFFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MUVSX0xPTToKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MUdJOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQxR0lfTEY6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDFHSV9NT0JJTEU6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDRFSV9DT1BQRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDRFSV9GSUJFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NEdDX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NEdDX0xPTToKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NUVNX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NUVNX0ZJQkVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2RUJfQ09QUEVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2RUJfRklCRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZFQl9RVUFEX0NPUFBFUjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworLyoqCiAgKiBlMTAwMF9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCiAgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKICAqIEBlbnQ6IGVudHJ5IGluIGUxMDAwX3BjaV90YmwKQEAgLTkxNSwzNyArOTA1LDUxIEBACiAgKiBUaGUgT1MgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyaW5nIG9mIHRoZSBhZGFwdGVyIHByaXZhdGUgc3RydWN0dXJlLAogICogYW5kIGEgaGFyZHdhcmUgcmVzZXQgb2NjdXIuCiAgKiovCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1lMTAwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLSAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlMTAwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBlMTAwMF9odyAqaHc7CiAKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kID0gMDsKIAlzdGF0aWMgaW50IGdsb2JhbF9xdWFkX3BvcnRfYSA9IDA7IC8qIGdsb2JhbCBrc3AzIHBvcnQgYSBpbmRpY2F0aW9uICovCiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKIAl1MTYgZWVwcm9tX2RhdGEgPSAwOwogCXUxNiBlZXByb21fYXBtZV9tYXNrID0gRTEwMDBfRUVQUk9NX0FQTUU7CisJaW50IGJhcnMsIG5lZWRfaW9wb3J0OwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCi0JaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpCisJLyogZG8gbm90IGFsbG9jYXRlIGlvcG9ydCBiYXJzIHdoZW4gbm90IG5lZWRlZCAqLworCW5lZWRfaW9wb3J0ID0gZTEwMDBfaXNfbmVlZF9pb3BvcnQocGRldik7CisJaWYgKG5lZWRfaW9wb3J0KSB7CisJCWJhcnMgPSBwY2lfc2VsZWN0X2JhcnMocGRldiwgSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0lPKTsKKwkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJfSBlbHNlIHsKKwkJYmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSk7CisJCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCX0KKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCEoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpICYmCi0JICAgICEoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkpIHsKKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spICYmCisJICAgICFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSB7CiAJCXBjaV91c2luZ19kYWMgPSAxOwogCX0gZWxzZSB7Ci0JCWlmICgoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpICYmCi0JCSAgICAoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkpIHsKLQkJCUUxMDAwX0VSUigiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7Ci0JCQlnb3RvIGVycl9kbWE7CisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAoZXJyKSB7CisJCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQkJaWYgKGVycikgeworCQkJCUUxMDAwX0VSUigiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCAiCisJCQkJCSAgImFib3J0aW5nXG4iKTsKKwkJCQlnb3RvIGVycl9kbWE7CisJCQl9CiAJCX0KIAkJcGNpX3VzaW5nX2RhYyA9IDA7CiAJfQogCi0JaWYgKChlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGUxMDAwX2RyaXZlcl9uYW1lKSkpCisJZXJyID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBiYXJzLCBlMTAwMF9kcml2ZXJfbmFtZSk7CisJaWYgKGVycikKIAkJZ290byBlcnJfcGNpX3JlZzsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwpAQCAtOTYxLDIxICs5NjUsMjcgQEAKIAlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7CiAJYWRhcHRlci0+cGRldiA9IHBkZXY7Ci0JYWRhcHRlci0+aHcuYmFjayA9IGFkYXB0ZXI7CiAJYWRhcHRlci0+bXNnX2VuYWJsZSA9ICgxIDw8IGRlYnVnKSAtIDE7CisJYWRhcHRlci0+YmFycyA9IGJhcnM7CisJYWRhcHRlci0+bmVlZF9pb3BvcnQgPSBuZWVkX2lvcG9ydDsKKworCWh3ID0gJmFkYXB0ZXItPmh3OworCWh3LT5iYWNrID0gYWRhcHRlcjsKIAogCWVyciA9IC1FSU87Ci0JYWRhcHRlci0+aHcuaHdfYWRkciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIEJBUl8wKSwKLQkJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIEJBUl8wKSk7Ci0JaWYgKCFhZGFwdGVyLT5ody5od19hZGRyKQorCWh3LT5od19hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgQkFSXzApLAorCQkJICAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBCQVJfMCkpOworCWlmICghaHctPmh3X2FkZHIpCiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAKLQlmb3IgKGkgPSBCQVJfMTsgaSA8PSBCQVJfNTsgaSsrKSB7Ci0JCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpID09IDApCi0JCQljb250aW51ZTsKLQkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJCWFkYXB0ZXItPmh3LmlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7Ci0JCQlicmVhazsKKwlpZiAoYWRhcHRlci0+bmVlZF9pb3BvcnQpIHsKKwkJZm9yIChpID0gQkFSXzE7IGkgPD0gQkFSXzU7IGkrKykgeworCQkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJiBJT1JFU09VUkNFX0lPKSB7CisJCQkJaHctPmlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTk5MCw5ICsxMDAwLDcgQEAKIAllMTAwMF9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAluZXRkZXYtPnR4X3RpbWVvdXQgPSAmZTEwMDBfdHhfdGltZW91dDsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwgZTEwMDBfY2xlYW4sIDY0KTsKLSNlbmRpZgogCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGUxMDAwX3ZsYW5fcnhfcmVnaXN0ZXI7CiAJbmV0ZGV2LT52bGFuX3J4X2FkZF92aWQgPSBlMTAwMF92bGFuX3J4X2FkZF92aWQ7CiAJbmV0ZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gZTEwMDBfdmxhbl9yeF9raWxsX3ZpZDsKQEAgLTEwMDUsNDkgKzEwMTMsNTAgQEAKIAogCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLwogCi0JaWYgKChlcnIgPSBlMTAwMF9zd19pbml0KGFkYXB0ZXIpKSkKKwllcnIgPSBlMTAwMF9zd19pbml0KGFkYXB0ZXIpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX3N3X2luaXQ7CiAKIAllcnIgPSAtRUlPOwogCS8qIEZsYXNoIEJBUiBtYXBwaW5nIG11c3QgaGFwcGVuIGFmdGVyIGUxMDAwX3N3X2luaXQKIAkgKiBiZWNhdXNlIGl0IGRlcGVuZHMgb24gbWFjX3R5cGUgKi8KLQlpZiAoKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pICYmCisJaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgJiYKIAkgICAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDEpICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCWFkYXB0ZXItPmh3LmZsYXNoX2FkZHJlc3MgPQorCQlody0+Zmxhc2hfYWRkcmVzcyA9CiAJCQlpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSwKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpKTsKLQkJaWYgKCFhZGFwdGVyLT5ody5mbGFzaF9hZGRyZXNzKQorCQlpZiAoIWh3LT5mbGFzaF9hZGRyZXNzKQogCQkJZ290byBlcnJfZmxhc2htYXA7CiAJfQogCi0JaWYgKGUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jaygmYWRhcHRlci0+aHcpKQorCWlmIChlMTAwMF9jaGVja19waHlfcmVzZXRfYmxvY2soaHcpKQogCQlEUFJJTlRLKFBST0JFLCBJTkZPLCAiUEhZIHJlc2V0IGlzIGJsb2NrZWQgZHVlIHRvIFNPTC9JREVSIHNlc3Npb24uXG4iKTsKIAotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgeworCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpIHsKIAkJbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfAogCQkJCSAgIE5FVElGX0ZfSFdfQ1NVTSB8CiAJCQkJICAgTkVUSUZfRl9IV19WTEFOX1RYIHwKIAkJCQkgICBORVRJRl9GX0hXX1ZMQU5fUlggfAogCQkJCSAgIE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7Ci0JCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKQorCQlpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pCiAJCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0hXX1ZMQU5fRklMVEVSOwogCX0KIAotCWlmICgoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDQpICYmCi0JICAgKGFkYXB0ZXItPmh3Lm1hY190eXBlICE9IGUxMDAwXzgyNTQ3KSkKKwlpZiAoKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCkgJiYKKwkgICAoaHctPm1hY190eXBlICE9IGUxMDAwXzgyNTQ3KSkKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ3X3Jldl8yKQorCWlmIChody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0N19yZXZfMikKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CiAKLQlhZGFwdGVyLT5lbl9tbmdfcHQgPSBlMTAwMF9lbmFibGVfbW5nX3Bhc3NfdGhydSgmYWRhcHRlci0+aHcpOworCWFkYXB0ZXItPmVuX21uZ19wdCA9IGUxMDAwX2VuYWJsZV9tbmdfcGFzc190aHJ1KGh3KTsKIAogCS8qIGluaXRpYWxpemUgZWVwcm9tIHBhcmFtZXRlcnMgKi8KLQlpZiAoZTEwMDBfaW5pdF9lZXByb21fcGFyYW1zKCZhZGFwdGVyLT5odykpIHsKKwlpZiAoZTEwMDBfaW5pdF9lZXByb21fcGFyYW1zKGh3KSkgewogCQlFMTAwMF9FUlIoIkVFUFJPTSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9lZXByb207CiAJfQpAQCAtMTA1NSwxMCArMTA2NCwxMCBAQAogCS8qIGJlZm9yZSByZWFkaW5nIHRoZSBFRVBST00sIHJlc2V0IHRoZSBjb250cm9sbGVyIHRvCiAJICogcHV0IHRoZSBkZXZpY2UgaW4gYSBrbm93biBnb29kIHN0YXJ0aW5nIHN0YXRlICovCiAKLQllMTAwMF9yZXNldF9odygmYWRhcHRlci0+aHcpOworCWUxMDAwX3Jlc2V0X2h3KGh3KTsKIAogCS8qIG1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KLQlpZiAoZTEwMDBfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtKCZhZGFwdGVyLT5odykgPCAwKSB7CisJaWYgKGUxMDAwX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bShodykgPCAwKSB7CiAJCURQUklOVEsoUFJPQkUsIEVSUiwgIlRoZSBFRVBST00gQ2hlY2tzdW0gSXMgTm90IFZhbGlkXG4iKTsKIAkJZTEwMDBfZHVtcF9lZXByb20oYWRhcHRlcik7CiAJCS8qCkBAIC0xMDY5LDI0ICsxMDc4LDI0IEBACiAJCSAqIGludGVyZmFjZSBhZnRlciBtYW51YWxseSBzZXR0aW5nIGEgaHcgYWRkciB1c2luZwogCQkgKiBgaXAgc2V0IGFkZHJlc3NgCiAJCSAqLwotCQltZW1zZXQoYWRhcHRlci0+aHcubWFjX2FkZHIsIDAsIG5ldGRldi0+YWRkcl9sZW4pOworCQltZW1zZXQoaHctPm1hY19hZGRyLCAwLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAl9IGVsc2UgewogCQkvKiBjb3B5IHRoZSBNQUMgYWRkcmVzcyBvdXQgb2YgdGhlIEVFUFJPTSAqLwotCQlpZiAoZTEwMDBfcmVhZF9tYWNfYWRkcigmYWRhcHRlci0+aHcpKQorCQlpZiAoZTEwMDBfcmVhZF9tYWNfYWRkcihodykpCiAJCQlEUFJJTlRLKFBST0JFLCBFUlIsICJFRVBST00gUmVhZCBFcnJvclxuIik7CiAJfQogCS8qIGRvbid0IGJsb2NrIGluaXRhbGl6YXRpb24gaGVyZSBkdWUgdG8gYmFkIE1BQyBhZGRyZXNzICovCi0JbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPmh3Lm1hY19hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKLQltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIGFkYXB0ZXItPmh3Lm1hY19hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgaHctPm1hY19hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIGh3LT5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKQogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJJbnZhbGlkIE1BQyBBZGRyZXNzXG4iKTsKIAotCWUxMDAwX2dldF9idXNfaW5mbygmYWRhcHRlci0+aHcpOworCWUxMDAwX2dldF9idXNfaW5mbyhodyk7CiAKIAlpbml0X3RpbWVyKCZhZGFwdGVyLT50eF9maWZvX3N0YWxsX3RpbWVyKTsKIAlhZGFwdGVyLT50eF9maWZvX3N0YWxsX3RpbWVyLmZ1bmN0aW9uID0gJmUxMDAwXzgyNTQ3X3R4X2ZpZm9fc3RhbGw7Ci0JYWRhcHRlci0+dHhfZmlmb19zdGFsbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXI7CisJYWRhcHRlci0+dHhfZmlmb19zdGFsbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKIAogCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKIAlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9ICZlMTAwMF93YXRjaGRvZzsKQEAgLTEwOTQsNyArMTEwMyw3IEBACiAKIAlpbml0X3RpbWVyKCZhZGFwdGVyLT5waHlfaW5mb190aW1lcik7CiAJYWRhcHRlci0+cGh5X2luZm9fdGltZXIuZnVuY3Rpb24gPSAmZTEwMDBfdXBkYXRlX3BoeV9pbmZvOwotCWFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKKwlhZGFwdGVyLT5waHlfaW5mb190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKIAogCUlOSVRfV09SSygmYWRhcHRlci0+cmVzZXRfdGFzaywgZTEwMDBfcmVzZXRfdGFzayk7CiAKQEAgLTExMDUsMTggKzExMTQsMTggQEAKIAkgKiBlbmFibGUgdGhlIEFDUEkgTWFnaWMgUGFja2V0IGZpbHRlcgogCSAqLwogCi0Jc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgeworCXN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU0Ml9yZXYyXzA6CiAJY2FzZSBlMTAwMF84MjU0Ml9yZXYyXzE6CiAJY2FzZSBlMTAwMF84MjU0MzoKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU0NDoKLQkJZTEwMDBfcmVhZF9lZXByb20oJmFkYXB0ZXItPmh3LAorCQllMTAwMF9yZWFkX2VlcHJvbShodywKIAkJCUVFUFJPTV9JTklUX0NPTlRST0wyX1JFRywgMSwgJmVlcHJvbV9kYXRhKTsKIAkJZWVwcm9tX2FwbWVfbWFzayA9IEUxMDAwX0VFUFJPTV84MjU0NF9BUE07CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfaWNoOGxhbjoKLQkJZTEwMDBfcmVhZF9lZXByb20oJmFkYXB0ZXItPmh3LAorCQllMTAwMF9yZWFkX2VlcHJvbShodywKIAkJCUVFUFJPTV9JTklUX0NPTlRST0wxX1JFRywgMSwgJmVlcHJvbV9kYXRhKTsKIAkJZWVwcm9tX2FwbWVfbWFzayA9IEUxMDAwX0VFUFJPTV9JQ0g4X0FQTUU7CiAJCWJyZWFrOwpAQCAtMTEyNCwxNCArMTEzMywxNCBAQAogCWNhc2UgZTEwMDBfODI1NDZfcmV2XzM6CiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgwMDAzZXMybGFuOgotCQlpZiAoRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0ZVTkNfMSl7Ci0JCQllMTAwMF9yZWFkX2VlcHJvbSgmYWRhcHRlci0+aHcsCisJCWlmIChlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKXsKKwkJCWUxMDAwX3JlYWRfZWVwcm9tKGh3LAogCQkJCUVFUFJPTV9JTklUX0NPTlRST0wzX1BPUlRfQiwgMSwgJmVlcHJvbV9kYXRhKTsKIAkJCWJyZWFrOwogCQl9CiAJCS8qIEZhbGwgVGhyb3VnaCAqLwogCWRlZmF1bHQ6Ci0JCWUxMDAwX3JlYWRfZWVwcm9tKCZhZGFwdGVyLT5odywKKwkJZTEwMDBfcmVhZF9lZXByb20oaHcsCiAJCQlFRVBST01fSU5JVF9DT05UUk9MM19QT1JUX0EsIDEsICZlZXByb21fZGF0YSk7CiAJCWJyZWFrOwogCX0KQEAgLTExNTAsNyArMTE1OSw3IEBACiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUjoKIAkJLyogV2FrZSBldmVudHMgb25seSBzdXBwb3J0ZWQgb24gcG9ydCBBIGZvciBkdWFsIGZpYmVyCiAJCSAqIHJlZ2FyZGxlc3Mgb2YgZWVwcm9tIHNldHRpbmcgKi8KLQkJaWYgKEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCisJCWlmIChlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKQogCQkJYWRhcHRlci0+ZWVwcm9tX3dvbCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfUVVBRF9DT1BQRVJfS1NQMzoKQEAgLTExNzMsOCArMTE4Miw2IEBACiAJYWRhcHRlci0+d29sID0gYWRhcHRlci0+ZWVwcm9tX3dvbDsKIAogCS8qIHByaW50IGJ1cyB0eXBlL3NwZWVkL3dpZHRoIGluZm8gKi8KLQl7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlEUFJJTlRLKFBST0JFLCBJTkZPLCAiKFBDSSVzOiVzOiVzKSAiLAogCQkoKGh3LT5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2l4KSA/ICItWCIgOgogCQkgKGh3LT5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2lfZXhwcmVzcyA/ICIgRXhwcmVzcyI6IiIpKSwKQEAgLTExODcsMTEgKzExOTQsMTAgQEAKIAkJIChody0+YnVzX3dpZHRoID09IGUxMDAwX2J1c193aWR0aF9wY2lleF80KSA/ICJXaWR0aCB4NCIgOgogCQkgKGh3LT5idXNfd2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWV4XzEpID8gIldpZHRoIHgxIiA6CiAJCSAiMzItYml0IikpOwotCX0KIAogCXByaW50aygiJXNcbiIsIHByaW50X21hYyhtYWMsIG5ldGRldi0+ZGV2X2FkZHIpKTsKIAotCWlmIChhZGFwdGVyLT5ody5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2lfZXhwcmVzcykgeworCWlmIChody0+YnVzX3R5cGUgPT0gZTEwMDBfYnVzX3R5cGVfcGNpX2V4cHJlc3MpIHsKIAkJRFBSSU5USyhQUk9CRSwgV0FSTklORywgIlRoaXMgZGV2aWNlIChpZCAlMDR4OiUwNHgpIHdpbGwgbm8gIgogCQkJImxvbmdlciBiZSBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgaW4gdGhlIGZ1dHVyZS5cbiIsCiAJCQlwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSk7CkBAIC0xMjA2LDggKzEyMTIsOCBAQAogCSAqIERSVl9MT0FEIHVudGlsIHRoZSBpbnRlcmZhY2UgaXMgdXAuICBGb3IgYWxsIG90aGVyIGNhc2VzLAogCSAqIGxldCB0aGUgZi93IGtub3cgdGhhdCB0aGUgaC93IGlzIG5vdyB1bmRlciB0aGUgY29udHJvbAogCSAqIG9mIHRoZSBkcml2ZXIuICovCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlICE9IGUxMDAwXzgyNTczIHx8Ci0JICAgICFlMTAwMF9jaGVja19tbmdfbW9kZSgmYWRhcHRlci0+aHcpKQorCWlmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfODI1NzMgfHwKKwkgICAgIWUxMDAwX2NoZWNrX21uZ19tb2RlKGh3KSkKIAkJZTEwMDBfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CiAKIAkvKiB0ZWxsIHRoZSBzdGFjayB0byBsZWF2ZSB1cyBhbG9uZSB1bnRpbCBlMTAwMF9vcGVuKCkgaXMgY2FsbGVkICovCkBAIC0xMjE1LDcgKzEyMjEsOCBAQAogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAogCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOwotCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpKQorCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJRFBSSU5USyhQUk9CRSwgSU5GTywgIkludGVsKFIpIFBSTy8xMDAwIE5ldHdvcmsgQ29ubmVjdGlvblxuIik7CkBAIC0xMjI2LDI4ICsxMjMzLDI0IEBACiBlcnJfcmVnaXN0ZXI6CiAJZTEwMDBfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOwogZXJyX2VlcHJvbToKLQlpZiAoIWUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jaygmYWRhcHRlci0+aHcpKQotCQllMTAwMF9waHlfaHdfcmVzZXQoJmFkYXB0ZXItPmh3KTsKKwlpZiAoIWUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jayhodykpCisJCWUxMDAwX3BoeV9od19yZXNldChodyk7CiAKLQlpZiAoYWRhcHRlci0+aHcuZmxhc2hfYWRkcmVzcykKLQkJaW91bm1hcChhZGFwdGVyLT5ody5mbGFzaF9hZGRyZXNzKTsKKwlpZiAoaHctPmZsYXNoX2FkZHJlc3MpCisJCWlvdW5tYXAoaHctPmZsYXNoX2FkZHJlc3MpOwogZXJyX2ZsYXNobWFwOgotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKIAkJZGV2X3B1dCgmYWRhcHRlci0+cG9sbGluZ19uZXRkZXZbaV0pOwotI2VuZGlmCiAKIAlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKIAlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCWtmcmVlKGFkYXB0ZXItPnBvbGxpbmdfbmV0ZGV2KTsKLSNlbmRpZgogZXJyX3N3X2luaXQ6Ci0JaW91bm1hcChhZGFwdGVyLT5ody5od19hZGRyKTsKKwlpb3VubWFwKGh3LT5od19hZGRyKTsKIGVycl9pb3JlbWFwOgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiBlcnJfYWxsb2NfZXRoZXJkZXY6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGJhcnMpOwogZXJyX3BjaV9yZWc6CiBlcnJfZG1hOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKQEAgLTEyNjQsMTQgKzEyNjcsMTIgQEAKICAqIG1lbW9yeS4KICAqKi8KIAotc3RhdGljIHZvaWQgX19kZXZleGl0Ci1lMTAwMF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZTEwMDBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgaTsKLSNlbmRpZgogCiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+cmVzZXRfdGFzayk7CiAKQEAgLTEyODEsMjYgKzEyODIsMjIgQEAKIAkgKiB3b3VsZCBoYXZlIGFscmVhZHkgaGFwcGVuZWQgaW4gY2xvc2UgYW5kIGlzIHJlZHVuZGFudC4gKi8KIAllMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CiAKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCiAJCWRldl9wdXQoJmFkYXB0ZXItPnBvbGxpbmdfbmV0ZGV2W2ldKTsKLSNlbmRpZgogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAotCWlmICghZTEwMDBfY2hlY2tfcGh5X3Jlc2V0X2Jsb2NrKCZhZGFwdGVyLT5odykpCi0JCWUxMDAwX3BoeV9od19yZXNldCgmYWRhcHRlci0+aHcpOworCWlmICghZTEwMDBfY2hlY2tfcGh5X3Jlc2V0X2Jsb2NrKGh3KSkKKwkJZTEwMDBfcGh5X2h3X3Jlc2V0KGh3KTsKIAogCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOwogCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJa2ZyZWUoYWRhcHRlci0+cG9sbGluZ19uZXRkZXYpOwotI2VuZGlmCiAKLQlpb3VubWFwKGFkYXB0ZXItPmh3Lmh3X2FkZHIpOwotCWlmIChhZGFwdGVyLT5ody5mbGFzaF9hZGRyZXNzKQotCQlpb3VubWFwKGFkYXB0ZXItPmh3LmZsYXNoX2FkZHJlc3MpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJaW91bm1hcChody0+aHdfYWRkcik7CisJaWYgKGh3LT5mbGFzaF9hZGRyZXNzKQorCQlpb3VubWFwKGh3LT5mbGFzaF9hZGRyZXNzKTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGFkYXB0ZXItPmJhcnMpOwogCiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIApAQCAtMTMxNiwxNSArMTMxMywxMiBAQAogICogT1MgbmV0d29yayBkZXZpY2Ugc2V0dGluZ3MgKE1UVSBzaXplKS4KICAqKi8KIAotc3RhdGljIGludCBfX2RldmluaXQKLWUxMDAwX3N3X2luaXQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlMTAwMF9zd19pbml0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAlpbnQgaTsKLSNlbmRpZgogCiAJLyogUENJIGNvbmZpZyBzcGFjZSBpbmZvICovCiAKQEAgLTEzODIsMTQgKzEzNzYsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CiAJCWFkYXB0ZXItPnBvbGxpbmdfbmV0ZGV2W2ldLnByaXYgPSBhZGFwdGVyOwogCQlkZXZfaG9sZCgmYWRhcHRlci0+cG9sbGluZ19uZXRkZXZbaV0pOwogCQlzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgJmFkYXB0ZXItPnBvbGxpbmdfbmV0ZGV2W2ldLnN0YXRlKTsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwotI2VuZGlmCiAKIAkvKiBFeHBsaWNpdGx5IGRpc2FibGUgSVJRIHNpbmNlIHRoZSBOSUMgY2FuIGJlIGluIGFueSBzdGF0ZS4gKi8KIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKQEAgLTE0MTAsOCArMTQwMiw3IEBACiAgKiBpbnRlbmRlZCBmb3IgTXVsdGlxdWV1ZSwgYnV0IHNob3VsZCB3b3JrIGZpbmUgd2l0aCBhIHNpbmdsZSBxdWV1ZS4KICAqKi8KIAotc3RhdGljIGludCBfX2RldmluaXQKLWUxMDAwX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGUxMDAwX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlhZGFwdGVyLT50eF9yaW5nID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fdHhfcXVldWVzLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfcmluZyksIEdGUF9LRVJORUwpOwpAQCAtMTQyNSw3ICsxNDE2LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAlhZGFwdGVyLT5wb2xsaW5nX25ldGRldiA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7CkBAIC0xNDM0LDcgKzE0MjQsNiBAQAogCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotI2VuZGlmCiAKIAlyZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KQEAgLTE0NTIsMTAgKzE0NDEsMTAgQEAKICAqIGFuZCB0aGUgc3RhY2sgaXMgbm90aWZpZWQgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5LgogICoqLwogCi1zdGF0aWMgaW50Ci1lMTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgaW50IGUxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgZXJyOwogCiAJLyogZGlzYWxsb3cgb3BlbiBkdXJpbmcgdGVzdCAqLwpAQCAtMTQ3NSwxNSArMTQ2NCwxNSBAQAogCWUxMDAwX3Bvd2VyX3VwX3BoeShhZGFwdGVyKTsKIAogCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gRTEwMDBfTU5HX1ZMQU5fTk9ORTsKLQlpZiAoKGFkYXB0ZXItPmh3Lm1uZ19jb29raWUuc3RhdHVzICYKKwlpZiAoKGh3LT5tbmdfY29va2llLnN0YXR1cyAmCiAJCQkgIEUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFUVVNfVkxBTl9TVVBQT1JUKSkgewogCQllMTAwMF91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7CiAJfQogCiAJLyogSWYgQU1UIGlzIGVuYWJsZWQsIGxldCB0aGUgZmlybXdhcmUga25vdyB0aGF0IHRoZSBuZXR3b3JrCiAJICogaW50ZXJmYWNlIGlzIG5vdyBvcGVuICovCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgyNTczICYmCi0JICAgIGUxMDAwX2NoZWNrX21uZ19tb2RlKCZhZGFwdGVyLT5odykpCisJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MyAmJgorCSAgICBlMTAwMF9jaGVja19tbmdfbW9kZShodykpCiAJCWUxMDAwX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwogCiAJLyogYmVmb3JlIHdlIGFsbG9jYXRlIGFuIGludGVycnVwdCwgd2UgbXVzdCBiZSByZWFkeSB0byBoYW5kbGUgaXQuCkBAIC0xNDk5LDE0ICsxNDg4LDE0IEBACiAJLyogRnJvbSBoZXJlIG9uIHRoZSBjb2RlIGlzIHRoZSBzYW1lIGFzIGUxMDAwX3VwKCkgKi8KIAljbGVhcl9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpOwogCi0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0jZW5kaWYKIAogCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CiAKKwluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCiAJLyogZmlyZSBhIGxpbmsgc3RhdHVzIGNoYW5nZSBpbnRlcnJ1cHQgdG8gc3RhcnQgdGhlIHdhdGNoZG9nICovCi0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSUNTLCBFMTAwMF9JQ1NfTFNDKTsKKwlldzMyKElDUywgRTEwMDBfSUNTX0xTQyk7CiAKIAlyZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIApAQCAtMTUzNCwxMCArMTUyMywxMCBAQAogICogaGFyZHdhcmUsIGFuZCBhbGwgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcmVzb3VyY2VzIGFyZSBmcmVlZC4KICAqKi8KIAotc3RhdGljIGludAotZTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBpbnQgZTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCVdBUk5fT04odGVzdF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncykpOwogCWUxMDAwX2Rvd24oYWRhcHRlcik7CkBAIC0xNTQ5LDcgKzE1MzgsNyBAQAogCiAJLyoga2lsbCBtYW5hZ2VhYmlsaXR5IHZsYW4gSUQgaWYgc3VwcG9ydGVkLCBidXQgbm90IGlmIGEgdmxhbiB3aXRoCiAJICogdGhlIHNhbWUgSUQgaXMgcmVnaXN0ZXJlZCBvbiB0aGUgaG9zdCBPUyAobGV0IDgwMjFxIGtpbGwgaXQpICovCi0JaWYgKChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0YXR1cyAmCisJaWYgKChody0+bW5nX2Nvb2tpZS5zdGF0dXMgJgogCQkJICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU5fU1VQUE9SVCkgJiYKIAkgICAgICEoYWRhcHRlci0+dmxncnAgJiYKIAkgICAgICAgdmxhbl9ncm91cF9nZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCBhZGFwdGVyLT5tbmdfdmxhbl9pZCkpKSB7CkBAIC0xNTU4LDggKzE1NDcsOCBAQAogCiAJLyogSWYgQU1UIGlzIGVuYWJsZWQsIGxldCB0aGUgZmlybXdhcmUga25vdyB0aGF0IHRoZSBuZXR3b3JrCiAJICogaW50ZXJmYWNlIGlzIG5vdyBjbG9zZWQgKi8KLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzMgJiYKLQkgICAgZTEwMDBfY2hlY2tfbW5nX21vZGUoJmFkYXB0ZXItPmh3KSkKKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTczICYmCisJICAgIGUxMDAwX2NoZWNrX21uZ19tb2RlKGh3KSkKIAkJZTEwMDBfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOwogCiAJcmV0dXJuIDA7CkBAIC0xNTcxLDE3ICsxNTYwLDE3IEBACiAgKiBAc3RhcnQ6IGFkZHJlc3Mgb2YgYmVnaW5uaW5nIG9mIG1lbW9yeQogICogQGxlbjogbGVuZ3RoIG9mIG1lbW9yeQogICoqLwotc3RhdGljIGJvb2wKLWUxMDAwX2NoZWNrXzY0a19ib3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuKQorc3RhdGljIGJvb2wgZTEwMDBfY2hlY2tfNjRrX2JvdW5kKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB2b2lkICpzdGFydCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbGVuKQogewotCXVuc2lnbmVkIGxvbmcgYmVnaW4gPSAodW5zaWduZWQgbG9uZykgc3RhcnQ7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1bnNpZ25lZCBsb25nIGJlZ2luID0gKHVuc2lnbmVkIGxvbmcpc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSBiZWdpbiArIGxlbjsKIAogCS8qIEZpcnN0IHJldiA4MjU0NSBhbmQgODI1NDYgbmVlZCB0byBub3QgYWxsb3cgYW55IG1lbW9yeQogCSAqIHdyaXRlIGxvY2F0aW9uIHRvIGNyb3NzIDY0ayBib3VuZGFyeSBkdWUgdG8gZXJyYXRhIDIzICovCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgyNTQ1IHx8Ci0JICAgIGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgyNTQ2KSB7CisJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NSB8fAorCSAgICBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDYpIHsKIAkJcmV0dXJuICgoYmVnaW4gXiAoZW5kIC0gMSkpID4+IDE2KSAhPSAwID8gZmFsc2UgOiB0cnVlOwogCX0KIApAQCAtMTU5Niw5ICsxNTg1LDggQEAKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKICAqKi8KIAotc3RhdGljIGludAotZTEwMDBfc2V0dXBfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eGRyKQorc3RhdGljIGludCBlMTAwMF9zZXR1cF90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eGRyKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgc2l6ZTsKQEAgLTE2NzIsOCArMTY2MCw3IEBACiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCiAgKiovCiAKLWludAotZTEwMDBfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK2ludCBlMTAwMF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpLCBlcnIgPSAwOwogCkBAIC0xNjk5LDggKzE2ODYsNyBAQAogICogQ29uZmlndXJlIHRoZSBUeCB1bml0IG9mIHRoZSBNQUMgYWZ0ZXIgYSByZXNldC4KICAqKi8KIAotc3RhdGljIHZvaWQKLWUxMDAwX2NvbmZpZ3VyZV90eChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIGUxMDAwX2NvbmZpZ3VyZV90eChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1NjQgdGRiYTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpAQCAtMTcxNSwxOCArMTcwMSwxOCBAQAogCQl0ZGJhID0gYWRhcHRlci0+dHhfcmluZ1swXS5kbWE7CiAJCXRkbGVuID0gYWRhcHRlci0+dHhfcmluZ1swXS5jb3VudCAqCiAJCQlzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIFRETEVOLCB0ZGxlbik7Ci0JCUUxMDAwX1dSSVRFX1JFRyhodywgVERCQUgsICh0ZGJhID4+IDMyKSk7Ci0JCUUxMDAwX1dSSVRFX1JFRyhodywgVERCQUwsICh0ZGJhICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSk7Ci0JCUUxMDAwX1dSSVRFX1JFRyhodywgVERULCAwKTsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBUREgsIDApOworCQlldzMyKFRETEVOLCB0ZGxlbik7CisJCWV3MzIoVERCQUgsICh0ZGJhID4+IDMyKSk7CisJCWV3MzIoVERCQUwsICh0ZGJhICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSk7CisJCWV3MzIoVERULCAwKTsKKwkJZXczMihUREgsIDApOwogCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRkaCA9ICgoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSA/IEUxMDAwX1RESCA6IEUxMDAwXzgyNTQyX1RESCk7CiAJCWFkYXB0ZXItPnR4X3JpbmdbMF0udGR0ID0gKChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpID8gRTEwMDBfVERUIDogRTEwMDBfODI1NDJfVERUKTsKIAkJYnJlYWs7CiAJfQogCiAJLyogU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFR4IEludGVyIFBhY2tldCBHYXAgdGltZXIgKi8KLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPD0gZTEwMDBfODI1NDdfcmV2XzIgJiYKKwlpZiAoaHctPm1hY190eXBlIDw9IGUxMDAwXzgyNTQ3X3Jldl8yICYmCiAJICAgIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8CiAJICAgICBody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykpCiAJCXRpcGcgPSBERUZBVUxUXzgyNTQzX1RJUEdfSVBHVF9GSUJFUjsKQEAgLTE3NTEsMzQgKzE3MzcsMzQgQEAKIAl9CiAJdGlwZyB8PSBpcGdyMSA8PCBFMTAwMF9USVBHX0lQR1IxX1NISUZUOwogCXRpcGcgfD0gaXBncjIgPDwgRTEwMDBfVElQR19JUEdSMl9TSElGVDsKLQlFMTAwMF9XUklURV9SRUcoaHcsIFRJUEcsIHRpcGcpOworCWV3MzIoVElQRywgdGlwZyk7CiAKIAkvKiBTZXQgdGhlIFR4IEludGVycnVwdCBEZWxheSByZWdpc3RlciAqLwogCi0JRTEwMDBfV1JJVEVfUkVHKGh3LCBUSURWLCBhZGFwdGVyLT50eF9pbnRfZGVsYXkpOworCWV3MzIoVElEViwgYWRhcHRlci0+dHhfaW50X2RlbGF5KTsKIAlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQwKQotCQlFMTAwMF9XUklURV9SRUcoaHcsIFRBRFYsIGFkYXB0ZXItPnR4X2Fic19pbnRfZGVsYXkpOworCQlldzMyKFRBRFYsIGFkYXB0ZXItPnR4X2Fic19pbnRfZGVsYXkpOwogCiAJLyogUHJvZ3JhbSB0aGUgVHJhbnNtaXQgQ29udHJvbCBSZWdpc3RlciAqLwogCi0JdGN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBUQ1RMKTsKKwl0Y3RsID0gZXIzMihUQ1RMKTsKIAl0Y3RsICY9IH5FMTAwMF9UQ1RMX0NUOwogCXRjdGwgfD0gRTEwMDBfVENUTF9QU1AgfCBFMTAwMF9UQ1RMX1JUTEMgfAogCQkoRTEwMDBfQ09MTElTSU9OX1RIUkVTSE9MRCA8PCBFMTAwMF9DVF9TSElGVCk7CiAKIAlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTcxIHx8IGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MikgewotCQl0YXJjID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRBUkMwKTsKKwkJdGFyYyA9IGVyMzIoVEFSQzApOwogCQkvKiBzZXQgdGhlIHNwZWVkIG1vZGUgYml0LCB3ZSdsbCBjbGVhciBpdCBpZiB3ZSdyZSBub3QgYXQKIAkJICogZ2lnYWJpdCBsaW5rIGxhdGVyICovCiAJCXRhcmMgfD0gKDEgPDwgMjEpOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIFRBUkMwLCB0YXJjKTsKKwkJZXczMihUQVJDMCwgdGFyYyk7CiAJfSBlbHNlIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pIHsKLQkJdGFyYyA9IEUxMDAwX1JFQURfUkVHKGh3LCBUQVJDMCk7CisJCXRhcmMgPSBlcjMyKFRBUkMwKTsKIAkJdGFyYyB8PSAxOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIFRBUkMwLCB0YXJjKTsKLQkJdGFyYyA9IEUxMDAwX1JFQURfUkVHKGh3LCBUQVJDMSk7CisJCWV3MzIoVEFSQzAsIHRhcmMpOworCQl0YXJjID0gZXIzMihUQVJDMSk7CiAJCXRhcmMgfD0gMTsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBUQVJDMSwgdGFyYyk7CisJCWV3MzIoVEFSQzEsIHRhcmMpOwogCX0KIAogCWUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CkBAIC0xODAxLDcgKzE3ODcsNyBAQAogCSAgICBody0+YnVzX3R5cGUgPT0gZTEwMDBfYnVzX3R5cGVfcGNpeCkKIAkJYWRhcHRlci0+cGNpeF84MjU0NCA9IDE7CiAKLQlFMTAwMF9XUklURV9SRUcoaHcsIFRDVEwsIHRjdGwpOworCWV3MzIoVENUTCwgdGN0bCk7CiAKIH0KIApAQCAtMTgxMywxMCArMTc5OSwxMCBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKICAqKi8KIAotc3RhdGljIGludAotZTEwMDBfc2V0dXBfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeGRyKQorc3RhdGljIGludCBlMTAwMF9zZXR1cF9yeF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeGRyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWludCBzaXplLCBkZXNjX2xlbjsKIApAQCAtMTg0OSw3ICsxODM1LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlIDw9IGUxMDAwXzgyNTQ3X3Jldl8yKQorCWlmIChody0+bWFjX3R5cGUgPD0gZTEwMDBfODI1NDdfcmV2XzIpCiAJCWRlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBlMTAwMF9yeF9kZXNjKTsKIAllbHNlCiAJCWRlc2NfbGVuID0gc2l6ZW9mKHVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0KTsKQEAgLTE5MTgsOCArMTkwNCw3IEBACiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCiAgKiovCiAKLWludAotZTEwMDBfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK2ludCBlMTAwMF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpLCBlcnIgPSAwOwogCkBAIC0xOTQ0LDI0ICsxOTI5LDI0IEBACiAgKiovCiAjZGVmaW5lIFBBR0VfVVNFX0NPVU5UKFMpICgoKFMpID4+IFBBR0VfU0hJRlQpICsgXAogCQkJKCgoUykgJiAoUEFHRV9TSVpFIC0gMSkpID8gMSA6IDApKQotc3RhdGljIHZvaWQKLWUxMDAwX3NldHVwX3JjdGwoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBlMTAwMF9zZXR1cF9yY3RsKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJjdGwsIHJmY3RsOwogCXUzMiBwc3JjdGwgPSAwOwogI2lmbmRlZiBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQKIAl1MzIgcGFnZXMgPSAwOwogI2VuZGlmCiAKLQlyY3RsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMKTsKKwlyY3RsID0gZXIzMihSQ1RMKTsKIAogCXJjdGwgJj0gfigzIDw8IEUxMDAwX1JDVExfTU9fU0hJRlQpOwogCiAJcmN0bCB8PSBFMTAwMF9SQ1RMX0VOIHwgRTEwMDBfUkNUTF9CQU0gfAogCQlFMTAwMF9SQ1RMX0xCTV9OTyB8IEUxMDAwX1JDVExfUkRNVFNfSEFMRiB8Ci0JCShhZGFwdGVyLT5ody5tY19maWx0ZXJfdHlwZSA8PCBFMTAwMF9SQ1RMX01PX1NISUZUKTsKKwkJKGh3LT5tY19maWx0ZXJfdHlwZSA8PCBFMTAwMF9SQ1RMX01PX1NISUZUKTsKIAotCWlmIChhZGFwdGVyLT5ody50YmlfY29tcGF0aWJpbGl0eV9vbiA9PSAxKQorCWlmIChody0+dGJpX2NvbXBhdGliaWxpdHlfb24gPT0gMSkKIAkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NCUDsKIAllbHNlCiAJCXJjdGwgJj0gfkUxMDAwX1JDVExfU0JQOwpAQCAtMjAxNCw3ICsxOTk5LDcgQEAKIAkvKiBhbGxvY2F0aW9ucyB1c2luZyBhbGxvY19wYWdlIHRha2UgdG9vIGxvbmcgZm9yIHJlZ3VsYXIgTVRVCiAJICogc28gb25seSBlbmFibGUgcGFja2V0IHNwbGl0IGZvciBqdW1ibyBmcmFtZXMgKi8KIAlwYWdlcyA9IFBBR0VfVVNFX0NPVU5UKGFkYXB0ZXItPm5ldGRldi0+bXR1KTsKLQlpZiAoKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTcxKSAmJiAocGFnZXMgPD0gMykgJiYKKwlpZiAoKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkgJiYgKHBhZ2VzIDw9IDMpICYmCiAJICAgIFBBR0VfU0laRSA8PSAxNjM4NCAmJiAocmN0bCAmIEUxMDAwX1JDVExfTFBFKSkKIAkJYWRhcHRlci0+cnhfcHNfcGFnZXMgPSBwYWdlczsKIAllbHNlCkBAIC0yMDIyLDE0ICsyMDA3LDE0IEBACiAjZW5kaWYKIAlpZiAoYWRhcHRlci0+cnhfcHNfcGFnZXMpIHsKIAkJLyogQ29uZmlndXJlIGV4dHJhIHBhY2tldC1zcGxpdCByZWdpc3RlcnMgKi8KLQkJcmZjdGwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJGQ1RMKTsKKwkJcmZjdGwgPSBlcjMyKFJGQ1RMKTsKIAkJcmZjdGwgfD0gRTEwMDBfUkZDVExfRVhURU47CiAJCS8qIGRpc2FibGUgcGFja2V0IHNwbGl0IHN1cHBvcnQgZm9yIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsCiAJCSAqIGJlY2F1c2Ugc29tZSBtYWxmb3JtZWQgSVB2NiBoZWFkZXJzIGNhbiBoYW5nIHRoZSBSWCAqLwogCQlyZmN0bCB8PSAoRTEwMDBfUkZDVExfSVBWNl9FWF9ESVMgfAogCQkgICAgICAgICAgRTEwMDBfUkZDVExfTkVXX0lQVjZfRVhUX0RJUyk7CiAKLQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkZDVEwsIHJmY3RsKTsKKwkJZXczMihSRkNUTCwgcmZjdGwpOwogCiAJCXJjdGwgfD0gRTEwMDBfUkNUTF9EVFlQX1BTOwogCkBAIC0yMDQ5LDEwICsyMDM0LDEwIEBACiAJCQlicmVhazsKIAkJfQogCi0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFBTUkNUTCwgcHNyY3RsKTsKKwkJZXczMihQU1JDVEwsIHBzcmN0bCk7CiAJfQogCi0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7CisJZXczMihSQ1RMLCByY3RsKTsKIH0KIAogLyoqCkBAIC0yMDYyLDggKzIwNDcsNyBAQAogICogQ29uZmlndXJlIHRoZSBSeCB1bml0IG9mIHRoZSBNQUMgYWZ0ZXIgYSByZXNldC4KICAqKi8KIAotc3RhdGljIHZvaWQKLWUxMDAwX2NvbmZpZ3VyZV9yeChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIGUxMDAwX2NvbmZpZ3VyZV9yeChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1NjQgcmRiYTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpAQCAtMjA4MywzMCArMjA2NywyNyBAQAogCX0KIAogCS8qIGRpc2FibGUgcmVjZWl2ZXMgd2hpbGUgc2V0dGluZyB1cCB0aGUgZGVzY3JpcHRvcnMgKi8KLQlyY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJDVEwpOwotCUUxMDAwX1dSSVRFX1JFRyhodywgUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKKwlyY3RsID0gZXIzMihSQ1RMKTsKKwlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CiAKIAkvKiBzZXQgdGhlIFJlY2VpdmUgRGVsYXkgVGltZXIgUmVnaXN0ZXIgKi8KLQlFMTAwMF9XUklURV9SRUcoaHcsIFJEVFIsIGFkYXB0ZXItPnJ4X2ludF9kZWxheSk7CisJZXczMihSRFRSLCBhZGFwdGVyLT5yeF9pbnRfZGVsYXkpOwogCiAJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCkgewotCQlFMTAwMF9XUklURV9SRUcoaHcsIFJBRFYsIGFkYXB0ZXItPnJ4X2Fic19pbnRfZGVsYXkpOworCQlldzMyKFJBRFYsIGFkYXB0ZXItPnJ4X2Fic19pbnRfZGVsYXkpOwogCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgIT0gMCkKLQkJCUUxMDAwX1dSSVRFX1JFRyhodywgSVRSLAotCQkJCTEwMDAwMDAwMDAgLyAoYWRhcHRlci0+aXRyICogMjU2KSk7CisJCQlldzMyKElUUiwgMTAwMDAwMDAwMCAvIChhZGFwdGVyLT5pdHIgKiAyNTYpKTsKIAl9CiAKIAlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTcxKSB7Ci0JCWN0cmxfZXh0ID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkxfRVhUKTsKKwkJY3RybF9leHQgPSBlcjMyKENUUkxfRVhUKTsKIAkJLyogUmVzZXQgZGVsYXkgdGltZXJzIGFmdGVyIGV2ZXJ5IGludGVycnVwdCAqLwogCQljdHJsX2V4dCB8PSBFMTAwMF9DVFJMX0VYVF9JTlRfVElNRVJfQ0xSOwotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJCS8qIEF1dG8tTWFzayBpbnRlcnJ1cHRzIHVwb24gSUNSIGFjY2VzcyAqLwogCQljdHJsX2V4dCB8PSBFMTAwMF9DVFJMX0VYVF9JQU1FOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIElBTSwgMHhmZmZmZmZmZik7Ci0jZW5kaWYKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgY3RybF9leHQpOwotCQlFMTAwMF9XUklURV9GTFVTSChodyk7CisJCWV3MzIoSUFNLCAweGZmZmZmZmZmKTsKKwkJZXczMihDVFJMX0VYVCwgY3RybF9leHQpOworCQlFMTAwMF9XUklURV9GTFVTSCgpOwogCX0KIAogCS8qIFNldHVwIHRoZSBIVyBSeCBIZWFkIGFuZCBUYWlsIERlc2NyaXB0b3IgUG9pbnRlcnMgYW5kCkBAIC0yMTE1LDExICsyMDk2LDExIEBACiAJY2FzZSAxOgogCWRlZmF1bHQ6CiAJCXJkYmEgPSBhZGFwdGVyLT5yeF9yaW5nWzBdLmRtYTsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSRExFTiwgcmRsZW4pOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIFJEQkFILCAocmRiYSA+PiAzMikpOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIFJEQkFMLCAocmRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCkpOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIFJEVCwgMCk7Ci0JCUUxMDAwX1dSSVRFX1JFRyhodywgUkRILCAwKTsKKwkJZXczMihSRExFTiwgcmRsZW4pOworCQlldzMyKFJEQkFILCAocmRiYSA+PiAzMikpOworCQlldzMyKFJEQkFMLCAocmRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCkpOworCQlldzMyKFJEVCwgMCk7CisJCWV3MzIoUkRILCAwKTsKIAkJYWRhcHRlci0+cnhfcmluZ1swXS5yZGggPSAoKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgPyBFMTAwMF9SREggOiBFMTAwMF84MjU0Ml9SREgpOwogCQlhZGFwdGVyLT5yeF9yaW5nWzBdLnJkdCA9ICgoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSA/IEUxMDAwX1JEVCA6IEUxMDAwXzgyNTQyX1JEVCk7CiAJCWJyZWFrOwpAQCAtMjEyNyw3ICsyMTA4LDcgQEAKIAogCS8qIEVuYWJsZSA4MjU0MyBSZWNlaXZlIENoZWNrc3VtIE9mZmxvYWQgZm9yIFRDUCBhbmQgVURQICovCiAJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgewotCQlyeGNzdW0gPSBFMTAwMF9SRUFEX1JFRyhodywgUlhDU1VNKTsKKwkJcnhjc3VtID0gZXIzMihSWENTVU0pOwogCQlpZiAoYWRhcHRlci0+cnhfY3N1bSkgewogCQkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9UVU9GTDsKIApAQCAtMjE0MSwxNyArMjEyMiwxNyBAQAogCQkJcnhjc3VtICY9IH5FMTAwMF9SWENTVU1fVFVPRkw7CiAJCQkvKiBkb24ndCBuZWVkIHRvIGNsZWFyIElQUENTRSBhcyBpdCBkZWZhdWx0cyB0byAwICovCiAJCX0KLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSWENTVU0sIHJ4Y3N1bSk7CisJCWV3MzIoUlhDU1VNLCByeGNzdW0pOwogCX0KIAogCS8qIGVuYWJsZSBlYXJseSByZWNlaXZlcyBvbiA4MjU3Mywgb25seSB0YWtlcyBlZmZlY3QgaWYgdXNpbmcgPiAyMDQ4CiAJICogYnl0ZSB0b3RhbCBmcmFtZSBzaXplLiAgZm9yIGV4YW1wbGUgb25seSBmb3IganVtYm8gZnJhbWVzICovCiAjZGVmaW5lIEUxMDAwX0VSVF8yMDQ4IDB4MTAwCiAJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBFUlQsIEUxMDAwX0VSVF8yMDQ4KTsKKwkJZXczMihFUlQsIEUxMDAwX0VSVF8yMDQ4KTsKIAogCS8qIEVuYWJsZSBSZWNlaXZlcyAqLwotCUUxMDAwX1dSSVRFX1JFRyhodywgUkNUTCwgcmN0bCk7CisJZXczMihSQ1RMLCByY3RsKTsKIH0KIAogLyoqCkBAIC0yMTYyLDkgKzIxNDMsOCBAQAogICogRnJlZSBhbGwgdHJhbnNtaXQgc29mdHdhcmUgcmVzb3VyY2VzCiAgKiovCiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nKQorc3RhdGljIHZvaWQgZTEwMDBfZnJlZV90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIApAQCAtMjE4NSw4ICsyMTY1LDcgQEAKICAqIEZyZWUgYWxsIHRyYW5zbWl0IHNvZnR3YXJlIHJlc291cmNlcwogICoqLwogCi12b2lkCi1lMTAwMF9mcmVlX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIGUxMDAwX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaTsKIApAQCAtMjE5NCw5ICsyMTczLDggQEAKIAkJZTEwMDBfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCi1zdGF0aWMgdm9pZAotZTEwMDBfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbykKK3N0YXRpYyB2b2lkIGUxMDAwX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgICAgIHN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvKQogewogCWlmIChidWZmZXJfaW5mby0+ZG1hKSB7CiAJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCkBAIC0yMjE4LDEwICsyMTk2LDEwIEBACiAgKiBAdHhfcmluZzogcmluZyB0byBiZSBjbGVhbmVkCiAgKiovCiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9jbGVhbl90eF9yaW5nKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZykKK3N0YXRpYyB2b2lkIGUxMDAwX2NsZWFuX3R4X3Jpbmcoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0yMjQ0LDggKzIyMjIsOCBAQAogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOwogCXR4X3JpbmctPmxhc3RfdHhfdHNvID0gMDsKIAotCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGRoKTsKLQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRkdCk7CisJd3JpdGVsKDAsIGh3LT5od19hZGRyICsgdHhfcmluZy0+dGRoKTsKKwl3cml0ZWwoMCwgaHctPmh3X2FkZHIgKyB0eF9yaW5nLT50ZHQpOwogfQogCiAvKioKQEAgLTIyNTMsOCArMjIzMSw3IEBACiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KIAotc3RhdGljIHZvaWQKLWUxMDAwX2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIGUxMDAwX2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaTsKIApAQCAtMjI3MCw5ICsyMjQ3LDggQEAKICAqIEZyZWUgYWxsIHJlY2VpdmUgc29mdHdhcmUgcmVzb3VyY2VzCiAgKiovCiAKLXN0YXRpYyB2b2lkCi1lMTAwMF9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nKQorc3RhdGljIHZvaWQgZTEwMDBfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIApAQCAtMjI5Nyw4ICsyMjczLDcgQEAKICAqIEZyZWUgYWxsIHJlY2VpdmUgc29mdHdhcmUgcmVzb3VyY2VzCiAgKiovCiAKLXZvaWQKLWUxMDAwX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgZTEwMDBfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOwogCkBAIC0yMzEyLDEwICsyMjg3LDEwIEBACiAgKiBAcnhfcmluZzogcmluZyB0byBmcmVlIGJ1ZmZlcnMgZnJvbQogICoqLwogCi1zdGF0aWMgdm9pZAotZTEwMDBfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcpCitzdGF0aWMgdm9pZCBlMTAwMF9jbGVhbl9yeF9yaW5nKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJc3RydWN0IGUxMDAwX3BzX3BhZ2UgKnBzX3BhZ2U7CiAJc3RydWN0IGUxMDAwX3BzX3BhZ2VfZG1hICpwc19wYWdlX2RtYTsKQEAgLTIzNjIsOCArMjMzNyw4IEBACiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CiAJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOwogCi0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT5yZGgpOwotCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+cmR0KTsKKwl3cml0ZWwoMCwgaHctPmh3X2FkZHIgKyByeF9yaW5nLT5yZGgpOworCXdyaXRlbCgwLCBody0+aHdfYWRkciArIHJ4X3JpbmctPnJkdCk7CiB9CiAKIC8qKgpAQCAtMjM3MSw4ICsyMzQ2LDcgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgdm9pZAotZTEwMDBfY2xlYW5fYWxsX3J4X3JpbmdzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgZTEwMDBfY2xlYW5fYWxsX3J4X3JpbmdzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOwogCkBAIC0yMzgzLDM4ICsyMzU3LDM4IEBACiAvKiBUaGUgODI1NDIgMi4wIChyZXZpc2lvbiAyKSBuZWVkcyB0byBoYXZlIHRoZSByZWNlaXZlIHVuaXQgaW4gcmVzZXQKICAqIGFuZCBtZW1vcnkgd3JpdGUgYW5kIGludmFsaWRhdGUgZGlzYWJsZWQgZm9yIGNlcnRhaW4gb3BlcmF0aW9ucwogICovCi1zdGF0aWMgdm9pZAotZTEwMDBfZW50ZXJfODI1NDJfcnN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgZTEwMDBfZW50ZXJfODI1NDJfcnN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAl1MzIgcmN0bDsKIAotCWUxMDAwX3BjaV9jbGVhcl9td2koJmFkYXB0ZXItPmh3KTsKKwllMTAwMF9wY2lfY2xlYXJfbXdpKGh3KTsKIAotCXJjdGwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJDVEwpOworCXJjdGwgPSBlcjMyKFJDVEwpOwogCXJjdGwgfD0gRTEwMDBfUkNUTF9SU1Q7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7Ci0JRTEwMDBfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKKwlldzMyKFJDVEwsIHJjdGwpOworCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAJbWRlbGF5KDUpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMDBfY2xlYW5fYWxsX3J4X3JpbmdzKGFkYXB0ZXIpOwogfQogCi1zdGF0aWMgdm9pZAotZTEwMDBfbGVhdmVfODI1NDJfcnN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgZTEwMDBfbGVhdmVfODI1NDJfcnN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAl1MzIgcmN0bDsKIAotCXJjdGwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJDVEwpOworCXJjdGwgPSBlcjMyKFJDVEwpOwogCXJjdGwgJj0gfkUxMDAwX1JDVExfUlNUOwotCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJDVEwsIHJjdGwpOwotCUUxMDAwX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7CisJZXczMihSQ1RMLCByY3RsKTsKKwlFMTAwMF9XUklURV9GTFVTSCgpOwogCW1kZWxheSg1KTsKIAotCWlmIChhZGFwdGVyLT5ody5wY2lfY21kX3dvcmQgJiBQQ0lfQ09NTUFORF9JTlZBTElEQVRFKQotCQllMTAwMF9wY2lfc2V0X213aSgmYWRhcHRlci0+aHcpOworCWlmIChody0+cGNpX2NtZF93b3JkICYgUENJX0NPTU1BTkRfSU5WQUxJREFURSkKKwkJZTEwMDBfcGNpX3NldF9td2koaHcpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQkvKiBObyBuZWVkIHRvIGxvb3AsIGJlY2F1c2UgODI1NDIgc3VwcG9ydHMgb25seSAxIHF1ZXVlICovCkBAIC0yNDMyLDEwICsyNDA2LDEwIEBACiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICoqLwogCi1zdGF0aWMgaW50Ci1lMTAwMF9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCitzdGF0aWMgaW50IGUxMDAwX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQpAQCAtMjQ0MywxOSArMjQxNywxOSBAQAogCiAJLyogODI1NDIgMi4wIG5lZWRzIHRvIGJlIGluIHJlc2V0IHRvIHdyaXRlIHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcnMgKi8KIAotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU0Ml9yZXYyXzApCisJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0Ml9yZXYyXzApCiAJCWUxMDAwX2VudGVyXzgyNTQyX3JzdChhZGFwdGVyKTsKIAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKLQltZW1jcHkoYWRhcHRlci0+aHcubWFjX2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShody0+bWFjX2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCi0JZTEwMDBfcmFyX3NldCgmYWRhcHRlci0+aHcsIGFkYXB0ZXItPmh3Lm1hY19hZGRyLCAwKTsKKwllMTAwMF9yYXJfc2V0KGh3LCBody0+bWFjX2FkZHIsIDApOwogCiAJLyogV2l0aCA4MjU3MSBjb250cm9sbGVycywgTEFBIG1heSBiZSBvdmVyd3JpdHRlbiAod2l0aCB0aGUgZGVmYXVsdCkKIAkgKiBkdWUgdG8gY29udHJvbGxlciByZXNldCBmcm9tIHRoZSBvdGhlciBwb3J0LiAqLwotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MSkgeworCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzEpIHsKIAkJLyogYWN0aXZhdGUgdGhlIHdvcmsgYXJvdW5kICovCi0JCWFkYXB0ZXItPmh3LmxhYV9pc19wcmVzZW50ID0gMTsKKwkJaHctPmxhYV9pc19wcmVzZW50ID0gMTsKIAogCQkvKiBIb2xkIGEgY29weSBvZiB0aGUgTEFBIGluIFJBUlsxNF0gVGhpcyBpcyBkb25lIHNvIHRoYXQKIAkJICogYmV0d2VlbiB0aGUgdGltZSBSQVJbMF0gZ2V0cyBjbG9iYmVyZWQgIGFuZCB0aGUgdGltZSBpdApAQCAtMjQ2MywxMSArMjQzNywxMSBAQAogCQkgKiBvZiB0aGUgUkFScyBhbmQgbm8gaW5jb21pbmcgcGFja2V0cyBkaXJlY3RlZCB0byB0aGlzIHBvcnQKIAkJICogYXJlIGRyb3BwZWQuIEV2ZW50YXVsbHkgdGhlIExBQSB3aWxsIGJlIGluIFJBUlswXSBhbmQKIAkJICogUkFSWzE0XSAqLwotCQllMTAwMF9yYXJfc2V0KCZhZGFwdGVyLT5odywgYWRhcHRlci0+aHcubWFjX2FkZHIsCisJCWUxMDAwX3Jhcl9zZXQoaHcsIGh3LT5tYWNfYWRkciwKIAkJCQkJRTEwMDBfUkFSX0VOVFJJRVMgLSAxKTsKIAl9CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NDJfcmV2Ml8wKQorCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDJfcmV2Ml8wKQogCQllMTAwMF9sZWF2ZV84MjU0Ml9yc3QoYWRhcHRlcik7CiAKIAlyZXR1cm4gMDsKQEAgLTI0ODMsOCArMjQ1Nyw3IEBACiAgKiBwcm9taXNjdW91cyBtb2RlLCBhbmQgYWxsLW11bHRpIGJlaGF2aW9yLgogICoqLwogCi1zdGF0aWMgdm9pZAotZTEwMDBfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyB2b2lkIGUxMDAwX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0yNDk3LDIzICsyNDcwLDI4IEBACiAJCQkJRTEwMDBfTlVNX01UQV9SRUdJU1RFUlNfSUNIOExBTiA6CiAJCQkJRTEwMDBfTlVNX01UQV9SRUdJU1RFUlM7CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikKKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pCiAJCXJhcl9lbnRyaWVzID0gRTEwMDBfUkFSX0VOVFJJRVNfSUNIOExBTjsKIAogCS8qIHJlc2VydmUgUkFSWzE0XSBmb3IgTEFBIG92ZXItd3JpdGUgd29yay1hcm91bmQgKi8KLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzEpCisJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MSkKIAkJcmFyX2VudHJpZXMtLTsKIAogCS8qIENoZWNrIGZvciBQcm9taXNjdW91cyBhbmQgQWxsIE11bHRpY2FzdCBtb2RlcyAqLwogCi0JcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKKwlyY3RsID0gZXIzMihSQ1RMKTsKIAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJcmN0bCB8PSAoRTEwMDBfUkNUTF9VUEUgfCBFMTAwMF9SQ1RMX01QRSk7Ci0JfSBlbHNlIGlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCXJjdGwgfD0gRTEwMDBfUkNUTF9NUEU7CisJCXJjdGwgJj0gfkUxMDAwX1JDVExfVkZFOwogCX0gZWxzZSB7Ci0JCXJjdGwgJj0gfkUxMDAwX1JDVExfTVBFOworCQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX01QRTsKKwkJfSBlbHNlIHsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfTVBFOworCQl9CisJCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKQorCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKIAl9CiAKIAl1Y19wdHIgPSBOVUxMOwpAQCAtMjUyNCw3ICsyNTAyLDcgQEAKIAkJdWNfcHRyID0gbmV0ZGV2LT51Y19saXN0OwogCX0KIAotCUUxMDAwX1dSSVRFX1JFRyhodywgUkNUTCwgcmN0bCk7CisJZXczMihSQ1RMLCByY3RsKTsKIAogCS8qIDgyNTQyIDIuMCBuZWVkcyB0byBiZSBpbiByZXNldCB0byB3cml0ZSByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzICovCiAKQEAgLTI1NTAsOSArMjUyOCw5IEBACiAJCQltY19wdHIgPSBtY19wdHItPm5leHQ7CiAJCX0gZWxzZSB7CiAJCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCBpIDw8IDEsIDApOwotCQkJRTEwMDBfV1JJVEVfRkxVU0goaHcpOworCQkJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAkJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsIChpIDw8IDEpICsgMSwgMCk7Ci0JCQlFMTAwMF9XUklURV9GTFVTSChodyk7CisJCQlFMTAwMF9XUklURV9GTFVTSCgpOwogCQl9CiAJfQogCVdBUk5fT04odWNfcHRyICE9IE5VTEwpOwpAQCAtMjU2MSw3ICsyNTM5LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBtdGFfcmVnX2NvdW50OyBpKyspIHsKIAkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBNVEEsIGksIDApOwotCQlFMTAwMF9XUklURV9GTFVTSChodyk7CisJCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAJfQogCiAJLyogbG9hZCBhbnkgcmVtYWluaW5nIGFkZHJlc3NlcyBpbnRvIHRoZSBoYXNoIHRhYmxlICovCkBAIC0yNTc4LDExICsyNTU2LDExIEBACiAvKiBOZWVkIHRvIHdhaXQgYSBmZXcgc2Vjb25kcyBhZnRlciBsaW5rIHVwIHRvIGdldCBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZyb20KICAqIHRoZSBwaHkgKi8KIAotc3RhdGljIHZvaWQKLWUxMDAwX3VwZGF0ZV9waHlfaW5mbyh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBlMTAwMF91cGRhdGVfcGh5X2luZm8odW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBlMTAwMF9hZGFwdGVyICopIGRhdGE7Ci0JZTEwMDBfcGh5X2dldF9pbmZvKCZhZGFwdGVyLT5odywgJmFkYXB0ZXItPnBoeV9pbmZvKTsKKwlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKWRhdGE7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwllMTAwMF9waHlfZ2V0X2luZm8oaHcsICZhZGFwdGVyLT5waHlfaW5mbyk7CiB9CiAKIC8qKgpAQCAtMjU5MCwzMyArMjU2OCwyNSBAQAogICogQGRhdGE6IHBvaW50ZXIgdG8gYWRhcHRlciBjYXN0IGludG8gYW4gdW5zaWduZWQgbG9uZwogICoqLwogCi1zdGF0aWMgdm9pZAotZTEwMDBfODI1NDdfdHhfZmlmb19zdGFsbCh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBlMTAwMF84MjU0N190eF9maWZvX3N0YWxsKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKSBkYXRhOworCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBlMTAwMF9hZGFwdGVyICopZGF0YTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJdTMyIHRjdGw7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnR4X2ZpZm9fc3RhbGwpKSB7Ci0JCWlmICgoRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBURFQpID09Ci0JCSAgICBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRESCkpICYmCi0JCSAgIChFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRERlQpID09Ci0JCSAgICBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRERkgpKSAmJgotCQkgICAoRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBUREZUUykgPT0KLQkJICAgIEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgVERGSFMpKSkgewotCQkJdGN0bCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgVENUTCk7Ci0JCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBUQ1RMLAotCQkJCQl0Y3RsICYgfkUxMDAwX1RDVExfRU4pOwotCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVERGVCwKLQkJCQkJYWRhcHRlci0+dHhfaGVhZF9hZGRyKTsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFRERkgsCi0JCQkJCWFkYXB0ZXItPnR4X2hlYWRfYWRkcik7Ci0JCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBUREZUUywKLQkJCQkJYWRhcHRlci0+dHhfaGVhZF9hZGRyKTsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFRERkhTLAotCQkJCQlhZGFwdGVyLT50eF9oZWFkX2FkZHIpOwotCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVENUTCwgdGN0bCk7Ci0JCQlFMTAwMF9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOworCQlpZiAoKGVyMzIoVERUKSA9PSBlcjMyKFRESCkpICYmCisJCSAgIChlcjMyKFRERlQpID09IGVyMzIoVERGSCkpICYmCisJCSAgIChlcjMyKFRERlRTKSA9PSBlcjMyKFRERkhTKSkpIHsKKwkJCXRjdGwgPSBlcjMyKFRDVEwpOworCQkJZXczMihUQ1RMLCB0Y3RsICYgfkUxMDAwX1RDVExfRU4pOworCQkJZXczMihUREZULCBhZGFwdGVyLT50eF9oZWFkX2FkZHIpOworCQkJZXczMihUREZILCBhZGFwdGVyLT50eF9oZWFkX2FkZHIpOworCQkJZXczMihUREZUUywgYWRhcHRlci0+dHhfaGVhZF9hZGRyKTsKKwkJCWV3MzIoVERGSFMsIGFkYXB0ZXItPnR4X2hlYWRfYWRkcik7CisJCQlldzMyKFRDVEwsIHRjdGwpOworCQkJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAogCQkJYWRhcHRlci0+dHhfZmlmb19oZWFkID0gMDsKIAkJCWF0b21pY19zZXQoJmFkYXB0ZXItPnR4X2ZpZm9fc3RhbGwsIDApOwpAQCAtMjYzMSw0NSArMjYwMSw0NSBAQAogICogZTEwMDBfd2F0Y2hkb2cgLSBUaW1lciBDYWxsLWJhY2sKICAqIEBkYXRhOiBwb2ludGVyIHRvIGFkYXB0ZXIgY2FzdCBpbnRvIGFuIHVuc2lnbmVkIGxvbmcKICAqKi8KLXN0YXRpYyB2b2lkCi1lMTAwMF93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBlMTAwMF93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKikgZGF0YTsKKwlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKWRhdGE7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBlMTAwMF90eF9yaW5nICp0eGRyID0gYWRhcHRlci0+dHhfcmluZzsKIAl1MzIgbGluaywgdGN0bDsKIAlzMzIgcmV0X3ZhbDsKIAotCXJldF92YWwgPSBlMTAwMF9jaGVja19mb3JfbGluaygmYWRhcHRlci0+aHcpOworCXJldF92YWwgPSBlMTAwMF9jaGVja19mb3JfbGluayhodyk7CiAJaWYgKChyZXRfdmFsID09IEUxMDAwX0VSUl9QSFkpICYmCi0JICAgIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpICYmCi0JICAgIChFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIENUUkwpICYgRTEwMDBfUEhZX0NUUkxfR0JFX0RJU0FCTEUpKSB7CisJICAgIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncF8zKSAmJgorCSAgICAoZXIzMihDVFJMKSAmIEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFKSkgewogCQkvKiBTZWUgZTEwMDBfa3VtZXJhbl9sb2NrX2xvc3Nfd29ya2Fyb3VuZCgpICovCiAJCURQUklOVEsoTElOSywgSU5GTywKIAkJCSJHaWdhYml0IGhhcyBiZWVuIGRpc2FibGVkLCBkb3duZ3JhZGluZyBzcGVlZFxuIik7CiAJfQogCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgyNTczKSB7Ci0JCWUxMDAwX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKCZhZGFwdGVyLT5odyk7Ci0JCWlmIChhZGFwdGVyLT5tbmdfdmxhbl9pZCAhPSBhZGFwdGVyLT5ody5tbmdfY29va2llLnZsYW5faWQpCisJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykgeworCQllMTAwMF9lbmFibGVfdHhfcGt0X2ZpbHRlcmluZyhodyk7CisJCWlmIChhZGFwdGVyLT5tbmdfdmxhbl9pZCAhPSBody0+bW5nX2Nvb2tpZS52bGFuX2lkKQogCQkJZTEwMDBfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOwogCX0KIAotCWlmICgoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgJiYKLQkgICAhKEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgVFhDVykgJiBFMTAwMF9UWENXX0FORSkpCi0JCWxpbmsgPSAhYWRhcHRlci0+aHcuc2VyZGVzX2xpbmtfZG93bjsKKwlpZiAoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSAmJgorCSAgICEoZXIzMihUWENXKSAmIEUxMDAwX1RYQ1dfQU5FKSkKKwkJbGluayA9ICFody0+c2VyZGVzX2xpbmtfZG93bjsKIAllbHNlCi0JCWxpbmsgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFU7CisJCWxpbmsgPSBlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFU7CiAKIAlpZiAobGluaykgewogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewogCQkJdTMyIGN0cmw7CiAJCQlib29sIHR4YjJiID0gdHJ1ZTsKLQkJCWUxMDAwX2dldF9zcGVlZF9hbmRfZHVwbGV4KCZhZGFwdGVyLT5odywKKwkJCWUxMDAwX2dldF9zcGVlZF9hbmRfZHVwbGV4KGh3LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkYXB0ZXItPmxpbmtfc3BlZWQsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRhcHRlci0+bGlua19kdXBsZXgpOwogCi0JCQljdHJsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMKTsKKwkJCWN0cmwgPSBlcjMyKENUUkwpOwogCQkJRFBSSU5USyhMSU5LLCBJTkZPLCAiTklDIExpbmsgaXMgVXAgJWQgTWJwcyAlcywgIgogCQkJICAgICAgICAiRmxvdyBDb250cm9sOiAlc1xuIiwKIAkJCSAgICAgICAgYWRhcHRlci0+bGlua19zcGVlZCwKQEAgLTI2OTcsMTkgKzI2NjcsMTkgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MSB8fAotCQkJICAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MikgJiYKKwkJCWlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTcxIHx8CisJCQkgICAgIGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MikgJiYKIAkJCSAgICAhdHhiMmIpIHsKIAkJCQl1MzIgdGFyYzA7Ci0JCQkJdGFyYzAgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRBUkMwKTsKKwkJCQl0YXJjMCA9IGVyMzIoVEFSQzApOwogCQkJCXRhcmMwICY9IH4oMSA8PCAyMSk7Ci0JCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVEFSQzAsIHRhcmMwKTsKKwkJCQlldzMyKFRBUkMwLCB0YXJjMCk7CiAJCQl9CiAKIAkJCS8qIGRpc2FibGUgVFNPIGZvciBwY2llIGFuZCAxMC8xMDAgc3BlZWRzLCB0byBhdm9pZAogCQkJICogc29tZSBoYXJkd2FyZSBpc3N1ZXMgKi8KIAkJCWlmICghYWRhcHRlci0+dHNvX2ZvcmNlICYmCi0JCQkgICAgYWRhcHRlci0+aHcuYnVzX3R5cGUgPT0gZTEwMDBfYnVzX3R5cGVfcGNpX2V4cHJlc3MpeworCQkJICAgIGh3LT5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2lfZXhwcmVzcyl7CiAJCQkJc3dpdGNoIChhZGFwdGVyLT5saW5rX3NwZWVkKSB7CiAJCQkJY2FzZSBTUEVFRF8xMDoKIAkJCQljYXNlIFNQRUVEXzEwMDoKQEAgLTI3MzAsOSArMjcwMCw5IEBACiAKIAkJCS8qIGVuYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlLCBuZWVkIHRvIGRvIHRoaXMKIAkJCSAqIGFmdGVyIHNldHRpbmcgVEFSQzAgKi8KLQkJCXRjdGwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRDVEwpOworCQkJdGN0bCA9IGVyMzIoVENUTCk7CiAJCQl0Y3RsIHw9IEUxMDAwX1RDVExfRU47Ci0JCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBUQ1RMLCB0Y3RsKTsKKwkJCWV3MzIoVENUTCwgdGN0bCk7CiAKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKQEAgLTI3NDAsMTAgKzI3MTAsOSBAQAogCQkJYWRhcHRlci0+c21hcnRzcGVlZCA9IDA7CiAJCX0gZWxzZSB7CiAJCQkvKiBtYWtlIHN1cmUgdGhlIHJlY2VpdmUgdW5pdCBpcyBzdGFydGVkICovCi0JCQlpZiAoYWRhcHRlci0+aHcucnhfbmVlZHNfa2lja2luZykgewotCQkJCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JCQkJdTMyIHJjdGwgPSBFMTAwMF9SRUFEX1JFRyhodywgUkNUTCk7Ci0JCQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsIHwgRTEwMDBfUkNUTF9FTik7CisJCQlpZiAoaHctPnJ4X25lZWRzX2tpY2tpbmcpIHsKKwkJCQl1MzIgcmN0bCA9IGVyMzIoUkNUTCk7CisJCQkJZXczMihSQ1RMLCByY3RsIHwgRTEwMDBfUkNUTF9FTik7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewpAQCAtMjc2MCw3ICsyNzI5LDcgQEAKIAkJCSAqIGRpc2FibGUgcmVjZWl2ZXMgaW4gdGhlIElTUiBhbmQKIAkJCSAqIHJlc2V0IGRldmljZSBoZXJlIGluIHRoZSB3YXRjaGRvZwogCQkJICovCi0JCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pCisJCQlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKQogCQkJCS8qIHJlc2V0IGRldmljZSAqLwogCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwogCQl9CkBAIC0yNzcwLDkgKzI3MzksOSBAQAogCiAJZTEwMDBfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwogCi0JYWRhcHRlci0+aHcudHhfcGFja2V0X2RlbHRhID0gYWRhcHRlci0+c3RhdHMudHB0IC0gYWRhcHRlci0+dHB0X29sZDsKKwlody0+dHhfcGFja2V0X2RlbHRhID0gYWRhcHRlci0+c3RhdHMudHB0IC0gYWRhcHRlci0+dHB0X29sZDsKIAlhZGFwdGVyLT50cHRfb2xkID0gYWRhcHRlci0+c3RhdHMudHB0OwotCWFkYXB0ZXItPmh3LmNvbGxpc2lvbl9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLmNvbGMgLSBhZGFwdGVyLT5jb2xjX29sZDsKKwlody0+Y29sbGlzaW9uX2RlbHRhID0gYWRhcHRlci0+c3RhdHMuY29sYyAtIGFkYXB0ZXItPmNvbGNfb2xkOwogCWFkYXB0ZXItPmNvbGNfb2xkID0gYWRhcHRlci0+c3RhdHMuY29sYzsKIAogCWFkYXB0ZXItPmdvcmNsID0gYWRhcHRlci0+c3RhdHMuZ29yY2wgLSBhZGFwdGVyLT5nb3JjbF9vbGQ7CkBAIC0yNzgwLDcgKzI3NDksNyBAQAogCWFkYXB0ZXItPmdvdGNsID0gYWRhcHRlci0+c3RhdHMuZ290Y2wgLSBhZGFwdGVyLT5nb3RjbF9vbGQ7CiAJYWRhcHRlci0+Z290Y2xfb2xkID0gYWRhcHRlci0+c3RhdHMuZ290Y2w7CiAKLQllMTAwMF91cGRhdGVfYWRhcHRpdmUoJmFkYXB0ZXItPmh3KTsKKwllMTAwMF91cGRhdGVfYWRhcHRpdmUoaHcpOwogCiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJaWYgKEUxMDAwX0RFU0NfVU5VU0VEKHR4ZHIpICsgMSA8IHR4ZHItPmNvdW50KSB7CkBAIC0yNzk0LDE1ICsyNzYzLDE1IEBACiAJfQogCiAJLyogQ2F1c2Ugc29mdHdhcmUgaW50ZXJydXB0IHRvIGVuc3VyZSByeCByaW5nIGlzIGNsZWFuZWQgKi8KLQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJQ1MsIEUxMDAwX0lDU19SWERNVDApOworCWV3MzIoSUNTLCBFMTAwMF9JQ1NfUlhETVQwKTsKIAogCS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgZXZlcnkgd2F0Y2hkb2cgcGVyaW9kICovCiAJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSB0cnVlOwogCiAJLyogV2l0aCA4MjU3MSBjb250cm9sbGVycywgTEFBIG1heSBiZSBvdmVyd3JpdHRlbiBkdWUgdG8gY29udHJvbGxlcgogCSAqIHJlc2V0IGZyb20gdGhlIG90aGVyIHBvcnQuIFNldCB0aGUgYXBwcm9wcmlhdGUgTEFBIGluIFJBUlswXSAqLwotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MSAmJiBhZGFwdGVyLT5ody5sYWFfaXNfcHJlc2VudCkKLQkJZTEwMDBfcmFyX3NldCgmYWRhcHRlci0+aHcsIGFkYXB0ZXItPmh3Lm1hY19hZGRyLCAwKTsKKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTcxICYmIGh3LT5sYWFfaXNfcHJlc2VudCkKKwkJZTEwMDBfcmFyX3NldChodywgaHctPm1hY19hZGRyLCAwKTsKIAogCS8qIFJlc2V0IHRoZSB0aW1lciAqLwogCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOwpAQCAtMjgzMiw5ICsyODAxLDcgQEAKICAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyBkdXJpbmcgdGhpcyBtZWFzdXJlbWVudCBpbnRlcnZhbAogICoqLwogc3RhdGljIHVuc2lnbmVkIGludCBlMTAwMF91cGRhdGVfaXRyKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgaXRyX3NldHRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWNrZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZXMpCisJCQkJICAgICB1MTYgaXRyX3NldHRpbmcsIGludCBwYWNrZXRzLCBpbnQgYnl0ZXMpCiB7CiAJdW5zaWduZWQgaW50IHJldHZhbCA9IGl0cl9zZXR0aW5nOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0yOTM5LDcgKzI5MDYsNyBAQAogCQkgICAgICAgICAgICAgbWluKGFkYXB0ZXItPml0ciArIChuZXdfaXRyID4+IDIpLCBuZXdfaXRyKSA6CiAJCSAgICAgICAgICAgICBuZXdfaXRyOwogCQlhZGFwdGVyLT5pdHIgPSBuZXdfaXRyOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIElUUiwgMTAwMDAwMDAwMCAvIChuZXdfaXRyICogMjU2KSk7CisJCWV3MzIoSVRSLCAxMDAwMDAwMDAwIC8gKG5ld19pdHIgKiAyNTYpKTsKIAl9CiAKIAlyZXR1cm47CkBAIC0yOTUyLDkgKzI5MTksOCBAQAogI2RlZmluZSBFMTAwMF9UWF9GTEFHU19WTEFOX01BU0sJMHhmZmZmMDAwMAogI2RlZmluZSBFMTAwMF9UWF9GTEFHU19WTEFOX1NISUZUCTE2CiAKLXN0YXRpYyBpbnQKLWUxMDAwX3RzbyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcsCi0gICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgZTEwMDBfdHNvKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkgICAgIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBlMTAwMF9jb250ZXh0X2Rlc2MgKmNvbnRleHRfZGVzYzsKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKQEAgLTMwMjUsOSArMjk5MSw4IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbAotZTEwMDBfdHhfY3N1bShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcsCi0gICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgYm9vbCBlMTAwMF90eF9jc3VtKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJICBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgZTEwMDBfY29udGV4dF9kZXNjICpjb250ZXh0X2Rlc2M7CiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CkBAIC0zMDY0LDExICszMDI5LDEzIEBACiAjZGVmaW5lIEUxMDAwX01BWF9UWERfUFdSCTEyCiAjZGVmaW5lIEUxMDAwX01BWF9EQVRBX1BFUl9UWEQJKDE8PEUxMDAwX01BWF9UWERfUFdSKQogCi1zdGF0aWMgaW50Ci1lMTAwMF90eF9tYXAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nLAotICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBmaXJzdCwgdW5zaWduZWQgaW50IG1heF9wZXJfdHhkLAotICAgICAgICAgICAgIHVuc2lnbmVkIGludCBucl9mcmFncywgdW5zaWduZWQgaW50IG1zcykKK3N0YXRpYyBpbnQgZTEwMDBfdHhfbWFwKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZmlyc3QsCisJCQl1bnNpZ25lZCBpbnQgbWF4X3Blcl90eGQsIHVuc2lnbmVkIGludCBucl9mcmFncywKKwkJCXVuc2lnbmVkIGludCBtc3MpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IDAsIHNpemUsIGNvdW50ID0gMCwgaTsKQEAgLTMwOTksNyArMzA2Niw3IEBACiAJCSAqIFRoZSBmaXggaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZpcnN0IGRlc2NyaXB0b3Igb2YgYQogCQkgKiBwYWNrZXQgaXMgc21hbGxlciB0aGFuIDIwNDggLSAxNiAtIDE2IChvciAyMDE2KSBieXRlcwogCQkgKi8KLQkJaWYgKHVubGlrZWx5KChhZGFwdGVyLT5ody5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2l4KSAmJgorCQlpZiAodW5saWtlbHkoKGh3LT5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2l4KSAmJgogCQkgICAgICAgICAgICAgICAgKHNpemUgPiAyMDE1KSAmJiBjb3VudCA9PSAwKSkKIAkJICAgICAgICBzaXplID0gMjAxNTsKIApAQCAtMzE3MSwxMCArMzEzOCwxMSBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX3R4X3F1ZXVlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZywKLSAgICAgICAgICAgICAgIGludCB0eF9mbGFncywgaW50IGNvdW50KQorc3RhdGljIHZvaWQgZTEwMDBfdHhfcXVldWUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZywgaW50IHR4X2ZsYWdzLAorCQkJICAgaW50IGNvdW50KQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGUxMDAwX3R4X2Rlc2MgKnR4X2Rlc2MgPSBOVUxMOwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXUzMiB0eGRfdXBwZXIgPSAwLCB0eGRfbG93ZXIgPSBFMTAwMF9UWERfQ01EX0lGQ1M7CkBAIC0zMjIwLDcgKzMxODgsNyBAQAogCXdtYigpOwogCiAJdHhfcmluZy0+bmV4dF90b191c2UgPSBpOwotCXdyaXRlbChpLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGR0KTsKKwl3cml0ZWwoaSwgaHctPmh3X2FkZHIgKyB0eF9yaW5nLT50ZHQpOwogCS8qIHdlIG5lZWQgdGhpcyBpZiBtb3JlIHRoYW4gb25lIHByb2Nlc3NvciBjYW4gd3JpdGUgdG8gb3VyIHRhaWwKIAkgKiBhdCBhIHRpbWUsIGl0IHN5bmNyb25pemVzIElPIG9uIElBNjQvQWx0aXggc3lzdGVtcyAqLwogCW1taW93YigpOwpAQCAtMzIzOCw4ICszMjA2LDggQEAKICNkZWZpbmUgRTEwMDBfRklGT19IRFIJCQkweDEwCiAjZGVmaW5lIEUxMDAwXzgyNTQ3X1BBRF9MRU4JCTB4M0UwCiAKLXN0YXRpYyBpbnQKLWUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgZTEwMDBfODI1NDdfZmlmb193b3JrYXJvdW5kKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXUzMiBmaWZvX3NwYWNlID0gYWRhcHRlci0+dHhfZmlmb19zaXplIC0gYWRhcHRlci0+dHhfZmlmb19oZWFkOwogCXUzMiBza2JfZmlmb19sZW4gPSBza2ItPmxlbiArIEUxMDAwX0ZJRk9fSERSOwpAQCAtMzI2NSwxOSArMzIzMywxOSBAQAogfQogCiAjZGVmaW5lIE1JTklNVU1fREhDUF9QQUNLRVRfU0laRSAyODIKLXN0YXRpYyBpbnQKLWUxMDAwX3RyYW5zZmVyX2RoY3BfaW5mbyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgZTEwMDBfdHJhbnNmZXJfZGhjcF9pbmZvKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAgJmFkYXB0ZXItPmh3OwogCXUxNiBsZW5ndGgsIG9mZnNldDsKIAlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCWlmICghKCh2bGFuX3R4X3RhZ19nZXQoc2tiKSA9PSBhZGFwdGVyLT5ody5tbmdfY29va2llLnZsYW5faWQpICYmCi0JCQkoIGFkYXB0ZXItPmh3Lm1uZ19jb29raWUuc3RhdHVzICYKKwkJaWYgKCEoKHZsYW5fdHhfdGFnX2dldChza2IpID09IGh3LT5tbmdfY29va2llLnZsYW5faWQpICYmCisJCQkoIGh3LT5tbmdfY29va2llLnN0YXR1cyAmCiAJCQkgIEUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFUVVNfVkxBTl9TVVBQT1JUKSkgKQogCQkJcmV0dXJuIDA7CiAJfQogCWlmIChza2ItPmxlbiA+IE1JTklNVU1fREhDUF9QQUNLRVRfU0laRSkgewotCQlzdHJ1Y3QgZXRoaGRyICpldGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItPmRhdGE7CisJCXN0cnVjdCBldGhoZHIgKmV0aCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOwogCQlpZiAoKGh0b25zKEVUSF9QX0lQKSA9PSBldGgtPmhfcHJvdG8pKSB7CiAJCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwID0KIAkJCQkoc3RydWN0IGlwaGRyICopKCh1OCAqKXNrYi0+ZGF0YSsxNCk7CkBAIC0zMzMwLDEwICszMjk4LDEwIEBACiB9CiAKICNkZWZpbmUgVFhEX1VTRV9DT1VOVChTLCBYKSAoKChTKSA+PiAoWCkpICsgMSApCi1zdGF0aWMgaW50Ci1lMTAwMF94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgaW50IGUxMDAwX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZzsKIAl1bnNpZ25lZCBpbnQgZmlyc3QsIG1heF9wZXJfdHhkID0gRTEwMDBfTUFYX0RBVEFfUEVSX1RYRDsKIAl1bnNpZ25lZCBpbnQgbWF4X3R4ZF9wd3IgPSBFMTAwMF9NQVhfVFhEX1BXUjsKQEAgLTMzNTksNyArMzMyNyw3IEBACiAKIAkvKiA4MjU3MSBhbmQgbmV3ZXIgZG9lc24ndCBuZWVkIHRoZSB3b3JrYXJvdW5kIHRoYXQgbGltaXRlZCBkZXNjcmlwdG9yCiAJICogbGVuZ3RoIHRvIDRrQiAqLwotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkKKwlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTcxKQogCQltYXhfcGVyX3R4ZCA9IDgxOTI7CiAKIAltc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwpAQCAtMzM3OSw3ICszMzQ3LDcgQEAKIAkJKiBmcmFncyBpbnRvIHNrYi0+ZGF0YSAqLwogCQloZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKIAkJaWYgKHNrYi0+ZGF0YV9sZW4gJiYgaGRyX2xlbiA9PSBsZW4pIHsKLQkJCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjX3R5cGUpIHsKKwkJCXN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAJCQkJdW5zaWduZWQgaW50IHB1bGxfc2l6ZTsKIAkJCWNhc2UgZTEwMDBfODI1NDQ6CiAJCQkJLyogTWFrZSBzdXJlIHdlIGhhdmUgcm9vbSB0byBjaG9wIG9mZiA0IGJ5dGVzLApAQCAtMzQyOCw3ICszMzk2LDcgQEAKIAkvKiB3b3JrLWFyb3VuZCBmb3IgZXJyYXRhIDEwIGFuZCBpdCBhcHBsaWVzIHRvIGFsbCBjb250cm9sbGVycwogCSAqIGluIFBDSS1YIG1vZGUsIHNvIGFkZCBvbmUgbW9yZSBkZXNjcmlwdG9yIHRvIHRoZSBjb3VudAogCSAqLwotCWlmICh1bmxpa2VseSgoYWRhcHRlci0+aHcuYnVzX3R5cGUgPT0gZTEwMDBfYnVzX3R5cGVfcGNpeCkgJiYKKwlpZiAodW5saWtlbHkoKGh3LT5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2l4KSAmJgogCQkJKGxlbiA+IDIwMTUpKSkKIAkJY291bnQrKzsKIApAQCAtMzQ0MCw4ICszNDA4LDggQEAKIAkJY291bnQgKz0gbnJfZnJhZ3M7CiAKIAotCWlmIChhZGFwdGVyLT5ody50eF9wa3RfZmlsdGVyaW5nICYmCi0JICAgIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykpCisJaWYgKGh3LT50eF9wa3RfZmlsdGVyaW5nICYmCisJICAgIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpKQogCQllMTAwMF90cmFuc2Zlcl9kaGNwX2luZm8oYWRhcHRlciwgc2tiKTsKIAogCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKSkKQEAgLTM0NTUsNyArMzQyMyw3IEBACiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQlpZiAodW5saWtlbHkoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NDcpKSB7CisJaWYgKHVubGlrZWx5KGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykpIHsKIAkJaWYgKHVubGlrZWx5KGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChhZGFwdGVyLCBza2IpKSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT50eF9maWZvX3N0YWxsX3RpbWVyLCBqaWZmaWVzICsgMSk7CkBAIC0zNTA4LDggKzM0NzYsNyBAQAogICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgdm9pZAotZTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHZvaWQgZTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIApAQCAtMzUxOCw4ICszNDg1LDcgQEAKIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgZTEwMDBfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGUxMDAwX2FkYXB0ZXIsIHJlc2V0X3Rhc2spOwpAQCAtMzUzNSw4ICszNTAxLDcgQEAKICAqIFRoZSBzdGF0aXN0aWNzIGFyZSBhY3R1YWxseSB1cGRhdGVkIGZyb20gdGhlIHRpbWVyIGNhbGxiYWNrLgogICoqLwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotZTEwMDBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmUxMDAwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIApAQCAtMzU1MiwxMCArMzUxNywxMCBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKICAqKi8KIAotc3RhdGljIGludAotZTEwMDBfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKK3N0YXRpYyBpbnQgZTEwMDBfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgbWF4X2ZyYW1lID0gbmV3X210dSArIEVORVRfSEVBREVSX1NJWkUgKyBFVEhFUk5FVF9GQ1NfU0laRTsKIAl1MTYgZWVwcm9tX2RhdGEgPSAwOwogCkBAIC0zNTY2LDcgKzM1MzEsNyBAQAogCX0KIAogCS8qIEFkYXB0ZXItc3BlY2lmaWMgbWF4IGZyYW1lIHNpemUgbGltaXRzLiAqLwotCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjX3R5cGUpIHsKKwlzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogCWNhc2UgZTEwMDBfdW5kZWZpbmVkIC4uLiBlMTAwMF84MjU0Ml9yZXYyXzE6CiAJY2FzZSBlMTAwMF9pY2g4bGFuOgogCQlpZiAobWF4X2ZyYW1lID4gTUFYSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFKSB7CkBAIC0zNTc4LDkgKzM1NDMsOSBAQAogCQkvKiBKdW1ibyBGcmFtZXMgbm90IHN1cHBvcnRlZCBpZjoKIAkJICogLSB0aGlzIGlzIG5vdCBhbiA4MjU3M0wgZGV2aWNlCiAJCSAqIC0gQVNQTSBpcyBlbmFibGVkIGluIGFueSB3YXkgKDB4MUEgYml0cyAzOjIpICovCi0JCWUxMDAwX3JlYWRfZWVwcm9tKCZhZGFwdGVyLT5odywgRUVQUk9NX0lOSVRfM0dJT18zLCAxLAorCQllMTAwMF9yZWFkX2VlcHJvbShodywgRUVQUk9NX0lOSVRfM0dJT18zLCAxLAogCQkgICAgICAgICAgICAgICAgICAmZWVwcm9tX2RhdGEpOwotCQlpZiAoKGFkYXB0ZXItPmh3LmRldmljZV9pZCAhPSBFMTAwMF9ERVZfSURfODI1NzNMKSB8fAorCQlpZiAoKGh3LT5kZXZpY2VfaWQgIT0gRTEwMDBfREVWX0lEXzgyNTczTCkgfHwKIAkJICAgIChlZXByb21fZGF0YSAmIEVFUFJPTV9XT1JEMUFfQVNQTV9NQVNLKSkgewogCQkJaWYgKG1heF9mcmFtZSA+IE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgewogCQkJCURQUklOVEsoUFJPQkUsIEVSUiwKQEAgLTM2MjcsMTMgKzM1OTIsMTMgQEAKIAkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzE2Mzg0OwogCiAJLyogYWRqdXN0IGFsbG9jYXRpb24gaWYgTFBFIHByb3RlY3RzIHVzLCBhbmQgd2UgYXJlbid0IHVzaW5nIFNCUCAqLwotCWlmICghYWRhcHRlci0+aHcudGJpX2NvbXBhdGliaWxpdHlfb24gJiYKKwlpZiAoIWh3LT50YmlfY29tcGF0aWJpbGl0eV9vbiAmJgogCSAgICAoKG1heF9mcmFtZSA9PSBNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUpIHx8CiAJICAgICAobWF4X2ZyYW1lID09IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFKSkpCiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRTsKIAogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKLQlhZGFwdGVyLT5ody5tYXhfZnJhbWVfc2l6ZSA9IG1heF9mcmFtZTsKKwlody0+bWF4X2ZyYW1lX3NpemUgPSBtYXhfZnJhbWU7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQllMTAwMF9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwpAQCAtMzY0Niw4ICszNjExLDcgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi12b2lkCi1lMTAwMF91cGRhdGVfc3RhdHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIGUxMDAwX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKQEAgLTM2NzIsODkgKzM2MzYsODkgQEAKIAkgKiBiZSB3cml0dGVuIHdoaWxlIGhvbGRpbmcgYWRhcHRlci0+c3RhdHNfbG9jawogCSAqLwogCi0JYWRhcHRlci0+c3RhdHMuY3JjZXJycyArPSBFMTAwMF9SRUFEX1JFRyhodywgQ1JDRVJSUyk7Ci0JYWRhcHRlci0+c3RhdHMuZ3ByYyArPSBFMTAwMF9SRUFEX1JFRyhodywgR1BSQyk7Ci0JYWRhcHRlci0+c3RhdHMuZ29yY2wgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIEdPUkNMKTsKLQlhZGFwdGVyLT5zdGF0cy5nb3JjaCArPSBFMTAwMF9SRUFEX1JFRyhodywgR09SQ0gpOwotCWFkYXB0ZXItPnN0YXRzLmJwcmMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIEJQUkMpOwotCWFkYXB0ZXItPnN0YXRzLm1wcmMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIE1QUkMpOwotCWFkYXB0ZXItPnN0YXRzLnJvYyArPSBFMTAwMF9SRUFEX1JFRyhodywgUk9DKTsKKwlhZGFwdGVyLT5zdGF0cy5jcmNlcnJzICs9IGVyMzIoQ1JDRVJSUyk7CisJYWRhcHRlci0+c3RhdHMuZ3ByYyArPSBlcjMyKEdQUkMpOworCWFkYXB0ZXItPnN0YXRzLmdvcmNsICs9IGVyMzIoR09SQ0wpOworCWFkYXB0ZXItPnN0YXRzLmdvcmNoICs9IGVyMzIoR09SQ0gpOworCWFkYXB0ZXItPnN0YXRzLmJwcmMgKz0gZXIzMihCUFJDKTsKKwlhZGFwdGVyLT5zdGF0cy5tcHJjICs9IGVyMzIoTVBSQyk7CisJYWRhcHRlci0+c3RhdHMucm9jICs9IGVyMzIoUk9DKTsKIAotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKSB7Ci0JCWFkYXB0ZXItPnN0YXRzLnByYzY0ICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkM2NCk7Ci0JCWFkYXB0ZXItPnN0YXRzLnByYzEyNyArPSBFMTAwMF9SRUFEX1JFRyhodywgUFJDMTI3KTsKLQkJYWRhcHRlci0+c3RhdHMucHJjMjU1ICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkMyNTUpOwotCQlhZGFwdGVyLT5zdGF0cy5wcmM1MTEgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBSQzUxMSk7Ci0JCWFkYXB0ZXItPnN0YXRzLnByYzEwMjMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBSQzEwMjMpOwotCQlhZGFwdGVyLT5zdGF0cy5wcmMxNTIyICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkMxNTIyKTsKKwlpZiAoaHctPm1hY190eXBlICE9IGUxMDAwX2ljaDhsYW4pIHsKKwkJYWRhcHRlci0+c3RhdHMucHJjNjQgKz0gZXIzMihQUkM2NCk7CisJCWFkYXB0ZXItPnN0YXRzLnByYzEyNyArPSBlcjMyKFBSQzEyNyk7CisJCWFkYXB0ZXItPnN0YXRzLnByYzI1NSArPSBlcjMyKFBSQzI1NSk7CisJCWFkYXB0ZXItPnN0YXRzLnByYzUxMSArPSBlcjMyKFBSQzUxMSk7CisJCWFkYXB0ZXItPnN0YXRzLnByYzEwMjMgKz0gZXIzMihQUkMxMDIzKTsKKwkJYWRhcHRlci0+c3RhdHMucHJjMTUyMiArPSBlcjMyKFBSQzE1MjIpOwogCX0KIAotCWFkYXB0ZXItPnN0YXRzLnN5bWVycnMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFNZTUVSUlMpOwotCWFkYXB0ZXItPnN0YXRzLm1wYyArPSBFMTAwMF9SRUFEX1JFRyhodywgTVBDKTsKLQlhZGFwdGVyLT5zdGF0cy5zY2MgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFNDQyk7Ci0JYWRhcHRlci0+c3RhdHMuZWNvbCArPSBFMTAwMF9SRUFEX1JFRyhodywgRUNPTCk7Ci0JYWRhcHRlci0+c3RhdHMubWNjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBNQ0MpOwotCWFkYXB0ZXItPnN0YXRzLmxhdGVjb2wgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIExBVEVDT0wpOwotCWFkYXB0ZXItPnN0YXRzLmRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBEQyk7Ci0JYWRhcHRlci0+c3RhdHMuc2VjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBTRUMpOwotCWFkYXB0ZXItPnN0YXRzLnJsZWMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFJMRUMpOwotCWFkYXB0ZXItPnN0YXRzLnhvbnJ4YyArPSBFMTAwMF9SRUFEX1JFRyhodywgWE9OUlhDKTsKLQlhZGFwdGVyLT5zdGF0cy54b250eGMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFhPTlRYQyk7Ci0JYWRhcHRlci0+c3RhdHMueG9mZnJ4YyArPSBFMTAwMF9SRUFEX1JFRyhodywgWE9GRlJYQyk7Ci0JYWRhcHRlci0+c3RhdHMueG9mZnR4YyArPSBFMTAwMF9SRUFEX1JFRyhodywgWE9GRlRYQyk7Ci0JYWRhcHRlci0+c3RhdHMuZmNydWMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIEZDUlVDKTsKLQlhZGFwdGVyLT5zdGF0cy5ncHRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBHUFRDKTsKLQlhZGFwdGVyLT5zdGF0cy5nb3RjbCArPSBFMTAwMF9SRUFEX1JFRyhodywgR09UQ0wpOwotCWFkYXB0ZXItPnN0YXRzLmdvdGNoICs9IEUxMDAwX1JFQURfUkVHKGh3LCBHT1RDSCk7Ci0JYWRhcHRlci0+c3RhdHMucm5iYyArPSBFMTAwMF9SRUFEX1JFRyhodywgUk5CQyk7Ci0JYWRhcHRlci0+c3RhdHMucnVjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBSVUMpOwotCWFkYXB0ZXItPnN0YXRzLnJmYyArPSBFMTAwMF9SRUFEX1JFRyhodywgUkZDKTsKLQlhZGFwdGVyLT5zdGF0cy5yamMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFJKQyk7Ci0JYWRhcHRlci0+c3RhdHMudG9ybCArPSBFMTAwMF9SRUFEX1JFRyhodywgVE9STCk7Ci0JYWRhcHRlci0+c3RhdHMudG9yaCArPSBFMTAwMF9SRUFEX1JFRyhodywgVE9SSCk7Ci0JYWRhcHRlci0+c3RhdHMudG90bCArPSBFMTAwMF9SRUFEX1JFRyhodywgVE9UTCk7Ci0JYWRhcHRlci0+c3RhdHMudG90aCArPSBFMTAwMF9SRUFEX1JFRyhodywgVE9USCk7Ci0JYWRhcHRlci0+c3RhdHMudHByICs9IEUxMDAwX1JFQURfUkVHKGh3LCBUUFIpOworCWFkYXB0ZXItPnN0YXRzLnN5bWVycnMgKz0gZXIzMihTWU1FUlJTKTsKKwlhZGFwdGVyLT5zdGF0cy5tcGMgKz0gZXIzMihNUEMpOworCWFkYXB0ZXItPnN0YXRzLnNjYyArPSBlcjMyKFNDQyk7CisJYWRhcHRlci0+c3RhdHMuZWNvbCArPSBlcjMyKEVDT0wpOworCWFkYXB0ZXItPnN0YXRzLm1jYyArPSBlcjMyKE1DQyk7CisJYWRhcHRlci0+c3RhdHMubGF0ZWNvbCArPSBlcjMyKExBVEVDT0wpOworCWFkYXB0ZXItPnN0YXRzLmRjICs9IGVyMzIoREMpOworCWFkYXB0ZXItPnN0YXRzLnNlYyArPSBlcjMyKFNFQyk7CisJYWRhcHRlci0+c3RhdHMucmxlYyArPSBlcjMyKFJMRUMpOworCWFkYXB0ZXItPnN0YXRzLnhvbnJ4YyArPSBlcjMyKFhPTlJYQyk7CisJYWRhcHRlci0+c3RhdHMueG9udHhjICs9IGVyMzIoWE9OVFhDKTsKKwlhZGFwdGVyLT5zdGF0cy54b2ZmcnhjICs9IGVyMzIoWE9GRlJYQyk7CisJYWRhcHRlci0+c3RhdHMueG9mZnR4YyArPSBlcjMyKFhPRkZUWEMpOworCWFkYXB0ZXItPnN0YXRzLmZjcnVjICs9IGVyMzIoRkNSVUMpOworCWFkYXB0ZXItPnN0YXRzLmdwdGMgKz0gZXIzMihHUFRDKTsKKwlhZGFwdGVyLT5zdGF0cy5nb3RjbCArPSBlcjMyKEdPVENMKTsKKwlhZGFwdGVyLT5zdGF0cy5nb3RjaCArPSBlcjMyKEdPVENIKTsKKwlhZGFwdGVyLT5zdGF0cy5ybmJjICs9IGVyMzIoUk5CQyk7CisJYWRhcHRlci0+c3RhdHMucnVjICs9IGVyMzIoUlVDKTsKKwlhZGFwdGVyLT5zdGF0cy5yZmMgKz0gZXIzMihSRkMpOworCWFkYXB0ZXItPnN0YXRzLnJqYyArPSBlcjMyKFJKQyk7CisJYWRhcHRlci0+c3RhdHMudG9ybCArPSBlcjMyKFRPUkwpOworCWFkYXB0ZXItPnN0YXRzLnRvcmggKz0gZXIzMihUT1JIKTsKKwlhZGFwdGVyLT5zdGF0cy50b3RsICs9IGVyMzIoVE9UTCk7CisJYWRhcHRlci0+c3RhdHMudG90aCArPSBlcjMyKFRPVEgpOworCWFkYXB0ZXItPnN0YXRzLnRwciArPSBlcjMyKFRQUik7CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikgewotCQlhZGFwdGVyLT5zdGF0cy5wdGM2NCArPSBFMTAwMF9SRUFEX1JFRyhodywgUFRDNjQpOwotCQlhZGFwdGVyLT5zdGF0cy5wdGMxMjcgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBUQzEyNyk7Ci0JCWFkYXB0ZXItPnN0YXRzLnB0YzI1NSArPSBFMTAwMF9SRUFEX1JFRyhodywgUFRDMjU1KTsKLQkJYWRhcHRlci0+c3RhdHMucHRjNTExICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQVEM1MTEpOwotCQlhZGFwdGVyLT5zdGF0cy5wdGMxMDIzICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQVEMxMDIzKTsKLQkJYWRhcHRlci0+c3RhdHMucHRjMTUyMiArPSBFMTAwMF9SRUFEX1JFRyhodywgUFRDMTUyMik7CisJaWYgKGh3LT5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKSB7CisJCWFkYXB0ZXItPnN0YXRzLnB0YzY0ICs9IGVyMzIoUFRDNjQpOworCQlhZGFwdGVyLT5zdGF0cy5wdGMxMjcgKz0gZXIzMihQVEMxMjcpOworCQlhZGFwdGVyLT5zdGF0cy5wdGMyNTUgKz0gZXIzMihQVEMyNTUpOworCQlhZGFwdGVyLT5zdGF0cy5wdGM1MTEgKz0gZXIzMihQVEM1MTEpOworCQlhZGFwdGVyLT5zdGF0cy5wdGMxMDIzICs9IGVyMzIoUFRDMTAyMyk7CisJCWFkYXB0ZXItPnN0YXRzLnB0YzE1MjIgKz0gZXIzMihQVEMxNTIyKTsKIAl9CiAKLQlhZGFwdGVyLT5zdGF0cy5tcHRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBNUFRDKTsKLQlhZGFwdGVyLT5zdGF0cy5icHRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBCUFRDKTsKKwlhZGFwdGVyLT5zdGF0cy5tcHRjICs9IGVyMzIoTVBUQyk7CisJYWRhcHRlci0+c3RhdHMuYnB0YyArPSBlcjMyKEJQVEMpOwogCiAJLyogdXNlZCBmb3IgYWRhcHRpdmUgSUZTICovCiAKLQlody0+dHhfcGFja2V0X2RlbHRhID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRQVCk7CisJaHctPnR4X3BhY2tldF9kZWx0YSA9IGVyMzIoVFBUKTsKIAlhZGFwdGVyLT5zdGF0cy50cHQgKz0gaHctPnR4X3BhY2tldF9kZWx0YTsKLQlody0+Y29sbGlzaW9uX2RlbHRhID0gRTEwMDBfUkVBRF9SRUcoaHcsIENPTEMpOworCWh3LT5jb2xsaXNpb25fZGVsdGEgPSBlcjMyKENPTEMpOwogCWFkYXB0ZXItPnN0YXRzLmNvbGMgKz0gaHctPmNvbGxpc2lvbl9kZWx0YTsKIAogCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpIHsKLQkJYWRhcHRlci0+c3RhdHMuYWxnbmVycmMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIEFMR05FUlJDKTsKLQkJYWRhcHRlci0+c3RhdHMucnhlcnJjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBSWEVSUkMpOwotCQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSBFMTAwMF9SRUFEX1JFRyhodywgVE5DUlMpOwotCQlhZGFwdGVyLT5zdGF0cy5jZXh0ZXJyICs9IEUxMDAwX1JFQURfUkVHKGh3LCBDRVhURVJSKTsKLQkJYWRhcHRlci0+c3RhdHMudHNjdGMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFRTQ1RDKTsKLQkJYWRhcHRlci0+c3RhdHMudHNjdGZjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBUU0NURkMpOworCQlhZGFwdGVyLT5zdGF0cy5hbGduZXJyYyArPSBlcjMyKEFMR05FUlJDKTsKKwkJYWRhcHRlci0+c3RhdHMucnhlcnJjICs9IGVyMzIoUlhFUlJDKTsKKwkJYWRhcHRlci0+c3RhdHMudG5jcnMgKz0gZXIzMihUTkNSUyk7CisJCWFkYXB0ZXItPnN0YXRzLmNleHRlcnIgKz0gZXIzMihDRVhURVJSKTsKKwkJYWRhcHRlci0+c3RhdHMudHNjdGMgKz0gZXIzMihUU0NUQyk7CisJCWFkYXB0ZXItPnN0YXRzLnRzY3RmYyArPSBlcjMyKFRTQ1RGQyk7CiAJfQogCWlmIChody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0N19yZXZfMikgewotCQlhZGFwdGVyLT5zdGF0cy5pYWMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIElBQyk7Ci0JCWFkYXB0ZXItPnN0YXRzLmljcnhvYyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWE9DKTsKKwkJYWRhcHRlci0+c3RhdHMuaWFjICs9IGVyMzIoSUFDKTsKKwkJYWRhcHRlci0+c3RhdHMuaWNyeG9jICs9IGVyMzIoSUNSWE9DKTsKIAotCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikgewotCQkJYWRhcHRlci0+c3RhdHMuaWNyeHB0YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWFBUQyk7Ci0JCQlhZGFwdGVyLT5zdGF0cy5pY3J4YXRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1JYQVRDKTsKLQkJCWFkYXB0ZXItPnN0YXRzLmljdHhwdGMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIElDVFhQVEMpOwotCQkJYWRhcHRlci0+c3RhdHMuaWN0eGF0YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNUWEFUQyk7Ci0JCQlhZGFwdGVyLT5zdGF0cy5pY3R4cWVjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1RYUUVDKTsKLQkJCWFkYXB0ZXItPnN0YXRzLmljdHhxbXRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1RYUU1UQyk7Ci0JCQlhZGFwdGVyLT5zdGF0cy5pY3J4ZG10YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWERNVEMpOworCQlpZiAoaHctPm1hY190eXBlICE9IGUxMDAwX2ljaDhsYW4pIHsKKwkJCWFkYXB0ZXItPnN0YXRzLmljcnhwdGMgKz0gZXIzMihJQ1JYUFRDKTsKKwkJCWFkYXB0ZXItPnN0YXRzLmljcnhhdGMgKz0gZXIzMihJQ1JYQVRDKTsKKwkJCWFkYXB0ZXItPnN0YXRzLmljdHhwdGMgKz0gZXIzMihJQ1RYUFRDKTsKKwkJCWFkYXB0ZXItPnN0YXRzLmljdHhhdGMgKz0gZXIzMihJQ1RYQVRDKTsKKwkJCWFkYXB0ZXItPnN0YXRzLmljdHhxZWMgKz0gZXIzMihJQ1RYUUVDKTsKKwkJCWFkYXB0ZXItPnN0YXRzLmljdHhxbXRjICs9IGVyMzIoSUNUWFFNVEMpOworCQkJYWRhcHRlci0+c3RhdHMuaWNyeGRtdGMgKz0gZXIzMihJQ1JYRE1UQyk7CiAJCX0KIAl9CiAKQEAgLTM3ODIsNyArMzc0Niw3IEBACiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMuZWNvbDsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfd2luZG93X2Vycm9ycyA9IGFkYXB0ZXItPnN0YXRzLmxhdGVjb2w7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2NhcnJpZXJfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMudG5jcnM7Ci0JaWYgKGFkYXB0ZXItPmh3LmJhZF90eF9jYXJyX3N0YXRzX2ZkICYmCisJaWYgKGh3LT5iYWRfdHhfY2Fycl9zdGF0c19mZCAmJgogCSAgICBhZGFwdGVyLT5saW5rX2R1cGxleCA9PSBGVUxMX0RVUExFWCkgewogCQlhZGFwdGVyLT5uZXRfc3RhdHMudHhfY2Fycmllcl9lcnJvcnMgPSAwOwogCQlhZGFwdGVyLT5zdGF0cy50bmNycyA9IDA7CkBAIC0zODA1LDEwICszNzY5LDEwIEBACiAJfQogCiAJLyogTWFuYWdlbWVudCBTdGF0cyAqLwotCWlmIChhZGFwdGVyLT5ody5oYXNfc21idXMpIHsKLQkJYWRhcHRlci0+c3RhdHMubWdwdGMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIE1HVFBUQyk7Ci0JCWFkYXB0ZXItPnN0YXRzLm1ncHJjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBNR1RQUkMpOwotCQlhZGFwdGVyLT5zdGF0cy5tZ3BkYyArPSBFMTAwMF9SRUFEX1JFRyhodywgTUdUUERDKTsKKwlpZiAoaHctPmhhc19zbWJ1cykgeworCQlhZGFwdGVyLT5zdGF0cy5tZ3B0YyArPSBlcjMyKE1HVFBUQyk7CisJCWFkYXB0ZXItPnN0YXRzLm1ncHJjICs9IGVyMzIoTUdUUFJDKTsKKwkJYWRhcHRlci0+c3RhdHMubWdwZGMgKz0gZXIzMihNR1RQREMpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKQEAgLTM4MjAsMTYgKzM3ODQsMTIgQEAKICAqIEBkYXRhOiBwb2ludGVyIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgaXJxcmV0dXJuX3QKLWUxMDAwX2ludHJfbXNpKGludCBpcnEsIHZvaWQgKmRhdGEpCitzdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cl9tc2koaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLSNpZm5kZWYgQ09ORklHX0UxMDAwX05BUEkKLQlpbnQgaTsKLSNlbmRpZgotCXUzMiBpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKKwl1MzIgaWNyID0gZXIzMihJQ1IpOwogCiAJLyogaW4gTkFQSSBtb2RlIHJlYWQgSUNSIGRpc2FibGVzIGludGVycnVwdHMgdXNpbmcgSUFNICovCiAKQEAgLTM4MzksMTcgKzM3OTksMTYgQEAKIAkJICogbGluayBkb3duIGV2ZW50OyBkaXNhYmxlIHJlY2VpdmVzIGhlcmUgaW4gdGhlIElTUiBhbmQgcmVzZXQKIAkJICogYWRhcHRlciBpbiB3YXRjaGRvZyAqLwogCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpICYmCi0JCSAgICAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pKSB7CisJCSAgICAoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSkgewogCQkJLyogZGlzYWJsZSByZWNlaXZlcyAqLwotCQkJdTMyIHJjdGwgPSBFMTAwMF9SRUFEX1JFRyhodywgUkNUTCk7Ci0JCQlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisJCQl1MzIgcmN0bCA9IGVyMzIoUkNUTCk7CisJCQlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CiAJCX0KIAkJLyogZ3VhcmQgYWdhaW5zdCBpbnRlcnJ1cHQgd2hlbiB3ZSdyZSBnb2luZyBkb3duICovCiAJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOwogCX0KIAotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5ldGRldiwgJmFkYXB0ZXItPm5hcGkpKSkgewogCQlhZGFwdGVyLT50b3RhbF90eF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgPSAwOwpAQCAtMzg1OCwyMCArMzgxNyw2IEBACiAJCV9fbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSk7CiAJfSBlbHNlCiAJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7Ci0jZWxzZQotCWFkYXB0ZXItPnRvdGFsX3R4X2J5dGVzID0gMDsKLQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7Ci0JYWRhcHRlci0+dG90YWxfdHhfcGFja2V0cyA9IDA7Ci0JYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfTUFYX0lOVFI7IGkrKykKLQkJaWYgKHVubGlrZWx5KCFhZGFwdGVyLT5jbGVhbl9yeChhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nKSAmCi0JCSAgICFlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZykpKQotCQkJYnJlYWs7Ci0KLQlpZiAobGlrZWx5KGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykpCi0JCWUxMDAwX3NldF9pdHIoYWRhcHRlcik7Ci0jZW5kaWYKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTM4ODIsMjAgKzM4MjcsMTYgQEAKICAqIEBkYXRhOiBwb2ludGVyIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgaXJxcmV0dXJuX3QKLWUxMDAwX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRhdGE7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIHJjdGwsIGljciA9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1IpOwotI2lmbmRlZiBDT05GSUdfRTEwMDBfTkFQSQotCWludCBpOwotI2VuZGlmCisJdTMyIHJjdGwsIGljciA9IGVyMzIoSUNSKTsKKwogCWlmICh1bmxpa2VseSghaWNyKSkKIAkJcmV0dXJuIElSUV9OT05FOyAgLyogTm90IG91ciBpbnRlcnJ1cHQgKi8KIAotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJLyogSU1TIHdpbGwgbm90IGF1dG8tbWFzayBpZiBJTlRfQVNTRVJURUQgaXMgbm90IHNldCwgYW5kIGlmIGl0IGlzCiAJICogbm90IHNldCwgdGhlbiB0aGUgYWRhcHRlciBkaWRuJ3Qgc2VuZCBhbiBpbnRlcnJ1cHQgKi8KIAlpZiAodW5saWtlbHkoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTcxICYmCkBAIC0zOTA0LDcgKzM4NDUsNiBAQAogCiAJLyogSW50ZXJydXB0IEF1dG8tTWFzay4uLnVwb24gcmVhZGluZyBJQ1IsIGludGVycnVwdHMgYXJlIG1hc2tlZC4gIE5vCiAJICogbmVlZCBmb3IgdGhlIElNQyB3cml0ZSAqLwotI2VuZGlmCiAKIAlpZiAodW5saWtlbHkoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSkgewogCQlody0+Z2V0X2xpbmtfc3RhdHVzID0gMTsKQEAgLTM5MTQsMjEgKzM4NTQsMjAgQEAKIAkJICogcmVzZXQgYWRhcHRlciBpbiB3YXRjaGRvZwogCQkgKi8KIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgotCQkgICAgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSkgeworCQkgICAgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikpIHsKIAkJCS8qIGRpc2FibGUgcmVjZWl2ZXMgKi8KLQkJCXJjdGwgPSBFMTAwMF9SRUFEX1JFRyhodywgUkNUTCk7Ci0JCQlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisJCQlyY3RsID0gZXIzMihSQ1RMKTsKKwkJCWV3MzIoUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKIAkJfQogCQkvKiBndWFyZCBhZ2FpbnN0IGludGVycnVwdCB3aGVuIHdlJ3JlIGdvaW5nIGRvd24gKi8KIAkJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5mbGFncykpCiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAlpZiAodW5saWtlbHkoaHctPm1hY190eXBlIDwgZTEwMDBfODI1NzEpKSB7CiAJCS8qIGRpc2FibGUgaW50ZXJydXB0cywgd2l0aG91dCB0aGUgc3luY2hyb25pemVfaXJxIGJpdCAqLwotCQlFMTAwMF9XUklURV9SRUcoaHcsIElNQywgfjApOwotCQlFMTAwMF9XUklURV9GTFVTSChodyk7CisJCWV3MzIoSU1DLCB+MCk7CisJCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAJfQogCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuZXRkZXYsICZhZGFwdGVyLT5uYXBpKSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwpAQCAtMzk0MCw0OCArMzg3OSwxNSBAQAogCQkvKiB0aGlzIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbiEgaWYgaXQgZG9lcyBpdCBpcyBiYXNpY2FsbHkgYQogCQkgKiBidWcsIGJ1dCBub3QgYSBoYXJkIGVycm9yLCBzbyBlbmFibGUgaW50cyBhbmQgY29udGludWUgKi8KIAkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKLSNlbHNlCi0JLyogV3JpdGluZyBJTUMgYW5kIElNUyBpcyBuZWVkZWQgZm9yIDgyNTQ3LgotCSAqIER1ZSB0byBIdWIgTGluayBidXMgYmVpbmcgb2NjdXBpZWQsIGFuIGludGVycnVwdAotCSAqIGRlLWFzc2VydGlvbiBtZXNzYWdlIGlzIG5vdCBhYmxlIHRvIGJlIHNlbnQuCi0JICogV2hlbiBhbiBpbnRlcnJ1cHQgYXNzZXJ0aW9uIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGxhdGVyLAotCSAqIHR3byBtZXNzYWdlcyBhcmUgcmUtb3JkZXJlZCBhbmQgc2VudCBvdXQuCi0JICogVGhhdCBjYXVzZXMgQVBJQyB0byB0aGluayA4MjU0NyBpcyBpbiBkZS1hc3NlcnRpb24KLQkgKiBzdGF0ZSwgd2hpbGUgODI1NDcgaXMgaW4gYXNzZXJ0aW9uIHN0YXRlLCByZXN1bHRpbmcKLQkgKiBpbiBkZWFkIGxvY2suIFdyaXRpbmcgSU1DIGZvcmNlcyA4MjU0NyBpbnRvCi0JICogZGUtYXNzZXJ0aW9uIHN0YXRlLgotCSAqLwotCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKQotCQlFMTAwMF9XUklURV9SRUcoaHcsIElNQywgfjApOwogCi0JYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwotCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKLQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKLQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9NQVhfSU5UUjsgaSsrKQotCQlpZiAodW5saWtlbHkoIWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmcpICYKLQkJICAgIWUxMDAwX2NsZWFuX3R4X2lycShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKSkpCi0JCQlicmVhazsKLQotCWlmIChsaWtlbHkoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKSkKLQkJZTEwMDBfc2V0X2l0cihhZGFwdGVyKTsKLQotCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKQotCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOwotCi0jZW5kaWYKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogLyoqCiAgKiBlMTAwMF9jbGVhbiAtIE5BUEkgUnggcG9sbGluZyBjYWxsYmFjawogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiovCi0KLXN0YXRpYyBpbnQKLWUxMDAwX2NsZWFuKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3N0YXRpYyBpbnQgZTEwMDBfY2xlYW4oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBlMTAwMF9hZGFwdGVyLCBuYXBpKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcG9sbF9kZXYgPSBhZGFwdGVyLT5uZXRkZXY7CkBAIC00MDE3LDIzICszOTIzLDE5IEBACiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KIAotI2VuZGlmCiAvKioKICAqIGUxMDAwX2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlcwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiovCi0KLXN0YXRpYyBib29sCi1lMTAwMF9jbGVhbl90eF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcpCitzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl90eF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBlMTAwMF90eF9kZXNjICp0eF9kZXNjLCAqZW9wX2Rlc2M7CiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJdW5zaWduZWQgaW50IGksIGVvcDsKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCXVuc2lnbmVkIGludCBjb3VudCA9IDA7Ci0jZW5kaWYKIAlib29sIGNsZWFuZWQgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXM9MCwgdG90YWxfdHhfcGFja2V0cz0wOwogCkBAIC00MDY1LDExICszOTY3LDEwIEBACiAKIAkJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAkJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAjZGVmaW5lIEUxMDAwX1RYX1dFSUdIVCA2NAogCQkvKiB3ZWlnaHQgb2YgYSBzb3J0IGZvciB0eCwgdG8gYXZvaWQgZW5kbGVzcyB0cmFuc21pdCBjbGVhbnVwICovCi0JCWlmIChjb3VudCsrID09IEUxMDAwX1RYX1dFSUdIVCkgYnJlYWs7Ci0jZW5kaWYKKwkJaWYgKGNvdW50KysgPT0gRTEwMDBfVFhfV0VJR0hUKQorCQkJYnJlYWs7CiAJfQogCiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CkBAIC00MDk0LDggKzM5OTUsNyBAQAogCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS5kbWEgJiYKIAkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsKIAkJICAgICAgICAgICAgICAgKGFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yICogSFopKQotCQkgICAgJiYgIShFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFNUQVRVUykgJgotCQkgICAgICAgICBFMTAwMF9TVEFUVVNfVFhPRkYpKSB7CisJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIAogCQkJLyogZGV0ZWN0ZWQgVHggdW5pdCBoYW5nICovCiAJCQlEUFJJTlRLKERSViwgRVJSLCAiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nXG4iCkBAIC00MTExLDggKzQwMTEsOCBAQAogCQkJCQkiICBuZXh0X3RvX3dhdGNoLnN0YXR1cyA8JXg+XG4iLAogCQkJCSh1bnNpZ25lZCBsb25nKSgodHhfcmluZyAtIGFkYXB0ZXItPnR4X3JpbmcpIC8KIAkJCQkJc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9yaW5nKSksCi0JCQkJcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRkaCksCi0JCQkJcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRkdCksCisJCQkJcmVhZGwoaHctPmh3X2FkZHIgKyB0eF9yaW5nLT50ZGgpLAorCQkJCXJlYWRsKGh3LT5od19hZGRyICsgdHhfcmluZy0+dGR0KSwKIAkJCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSwKIAkJCQl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuLAogCQkJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCwKQEAgLTQxMzcsMTcgKzQwMzcsMTYgQEAKICAqIEBza19idWZmOiAgICAgc29ja2V0IGJ1ZmZlciB3aXRoIHJlY2VpdmVkIGRhdGEKICAqKi8KIAotc3RhdGljIHZvaWQKLWUxMDAwX3J4X2NoZWNrc3VtKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotCQkgIHUzMiBzdGF0dXNfZXJyLCB1MzIgY3N1bSwKLQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgZTEwMDBfcnhfY2hlY2tzdW0oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBzdGF0dXNfZXJyLAorCQkJICAgICAgdTMyIGNzdW0sIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MTYgc3RhdHVzID0gKHUxNilzdGF0dXNfZXJyOwogCXU4IGVycm9ycyA9ICh1OCkoc3RhdHVzX2VyciA+PiAyNCk7CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJLyogODI1NDMgb3IgbmV3ZXIgb25seSAqLwotCWlmICh1bmxpa2VseShhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTQzKSkgcmV0dXJuOworCWlmICh1bmxpa2VseShody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0MykpIHJldHVybjsKIAkvKiBJZ25vcmUgQ2hlY2tzdW0gYml0IGlzIHNldCAqLwogCWlmICh1bmxpa2VseShzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9JWFNNKSkgcmV0dXJuOwogCS8qIFRDUC9VRFAgY2hlY2tzdW0gZXJyb3IgYml0IGlzIHNldCAqLwpAQCAtNDE1Nyw3ICs0MDU2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAkvKiBUQ1AvVURQIENoZWNrc3VtIGhhcyBub3QgYmVlbiBjYWxjdWxhdGVkICovCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlIDw9IGUxMDAwXzgyNTQ3X3Jldl8yKSB7CisJaWYgKGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0N19yZXZfMikgewogCQlpZiAoIShzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9UQ1BDUykpCiAJCQlyZXR1cm47CiAJfSBlbHNlIHsKQEAgLTQxNjgsNyArNDA2Nyw3IEBACiAJaWYgKGxpa2VseShzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9UQ1BDUykpIHsKIAkJLyogVENQIGNoZWNrc3VtIGlzIGdvb2QgKi8KIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID4gZTEwMDBfODI1NDdfcmV2XzIpIHsKKwl9IGVsc2UgaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ3X3Jldl8yKSB7CiAJCS8qIElQIGZyYWdtZW50IHdpdGggVURQIHBheWxvYWQgKi8KIAkJLyogSGFyZHdhcmUgY29tcGxlbWVudHMgdGhlIHBheWxvYWQgY2hlY2tzdW0sIHNvIHdlIHVuZG8gaXQKIAkJICogYW5kIHRoZW4gcHV0IHRoZSB2YWx1ZSBpbiBob3N0IG9yZGVyIGZvciBmdXJ0aGVyIHN0YWNrIHVzZS4KQEAgLTQxODQsMTcgKzQwODMsMTEgQEAKICAqIGUxMDAwX2NsZWFuX3J4X2lycSAtIFNlbmQgcmVjZWl2ZWQgZGF0YSB1cCB0aGUgbmV0d29yayBzdGFjazsgbGVnYWN5CiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KLQotc3RhdGljIGJvb2wKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQotZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAotICAgICAgICAgICAgICAgICAgIGludCAqd29ya19kb25lLCBpbnQgd29ya190b19kbykKLSNlbHNlCi1lMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcpCi0jZW5kaWYKK3N0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKKwkJCSAgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlzdHJ1Y3QgZTEwMDBfcnhfZGVzYyAqcnhfZGVzYywgKm5leHRfcnhkOwpAQCAtNDIxNSwxMSArNDEwOCwxMCBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQl1OCBzdGF0dXM7CiAKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQogCQkJYnJlYWs7CiAJCSgqd29ya19kb25lKSsrOwotI2VuZGlmCisKIAkJc3RhdHVzID0gcnhfZGVzYy0+c3RhdHVzOwogCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOwogCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKQEAgLTQyNTIsMTEgKzQxNDQsMTAgQEAKIAogCQlpZiAodW5saWtlbHkocnhfZGVzYy0+ZXJyb3JzICYgRTEwMDBfUlhEX0VSUl9GUkFNRV9FUlJfTUFTSykpIHsKIAkJCWxhc3RfYnl0ZSA9ICooc2tiLT5kYXRhICsgbGVuZ3RoIC0gMSk7Ci0JCQlpZiAoVEJJX0FDQ0VQVCgmYWRhcHRlci0+aHcsIHN0YXR1cywKLQkJCSAgICAgICAgICAgICAgcnhfZGVzYy0+ZXJyb3JzLCBsZW5ndGgsIGxhc3RfYnl0ZSkpIHsKKwkJCWlmIChUQklfQUNDRVBUKGh3LCBzdGF0dXMsIHJ4X2Rlc2MtPmVycm9ycywgbGVuZ3RoLAorCQkJCSAgICAgICBsYXN0X2J5dGUpKSB7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKLQkJCQllMTAwMF90YmlfYWRqdXN0X3N0YXRzKCZhZGFwdGVyLT5odywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICZhZGFwdGVyLT5zdGF0cywKKwkJCQllMTAwMF90YmlfYWRqdXN0X3N0YXRzKGh3LCAmYWRhcHRlci0+c3RhdHMsCiAJCQkJICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIHNrYi0+ZGF0YSk7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c3RhdHNfbG9jaywKIAkJCQkgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKQEAgLTQzMDYsMjUgKzQxOTcsMTUgQEAKIAkJCQkgIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPmNzdW0pLCBza2IpOwogCiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7Ci0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKKwogCQlpZiAodW5saWtlbHkoYWRhcHRlci0+dmxncnAgJiYKIAkJCSAgICAoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfVlApKSkgewogCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxncnAsCi0JCQkJCQkgbGUxNl90b19jcHUocnhfZGVzYy0+c3BlY2lhbCkgJgotCQkJCQkJIEUxMDAwX1JYRF9TUENfVkxBTl9NQVNLKTsKKwkJCQkJCSBsZTE2X3RvX2NwdShyeF9kZXNjLT5zcGVjaWFsKSk7CiAJCX0gZWxzZSB7CiAJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCQl9Ci0jZWxzZSAvKiBDT05GSUdfRTEwMDBfTkFQSSAqLwotCQlpZiAodW5saWtlbHkoYWRhcHRlci0+dmxncnAgJiYKLQkJCSAgICAoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfVlApKSkgewotCQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgYWRhcHRlci0+dmxncnAsCi0JCQkJCWxlMTZfdG9fY3B1KHJ4X2Rlc2MtPnNwZWNpYWwpICYKLQkJCQkJRTEwMDBfUlhEX1NQQ19WTEFOX01BU0spOwotCQl9IGVsc2UgewotCQkJbmV0aWZfcngoc2tiKTsKLQkJfQotI2VuZGlmIC8qIENPTkZJR19FMTAwMF9OQVBJICovCisKIAkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAogbmV4dF9kZXNjOgpAQCAtNDM1OCwxNSArNDIzOSw5IEBACiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KIAotc3RhdGljIGJvb2wKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQotZTEwMDBfY2xlYW5fcnhfaXJxX3BzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqd29ya19kb25lLCBpbnQgd29ya190b19kbykKLSNlbHNlCi1lMTAwMF9jbGVhbl9yeF9pcnFfcHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcpCi0jZW5kaWYKK3N0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycV9wcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAorCQkJCSAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQogewogCXVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0ICpyeF9kZXNjLCAqbmV4dF9yeGQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKQEAgLTQzODksMTEgKzQyNjQsMTEgQEAKIAl3aGlsZSAoc3RhdGVyciAmIEUxMDAwX1JYRF9TVEFUX0REKSB7CiAJCXBzX3BhZ2UgPSAmcnhfcmluZy0+cHNfcGFnZVtpXTsKIAkJcHNfcGFnZV9kbWEgPSAmcnhfcmluZy0+cHNfcGFnZV9kbWFbaV07Ci0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKKwogCQlpZiAodW5saWtlbHkoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKSkKIAkJCWJyZWFrOwogCQkoKndvcmtfZG9uZSkrKzsKLSNlbmRpZgorCiAJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CiAKIAkJLyogaW4gdGhlIHBhY2tldCBzcGxpdCBjYXNlIHRoaXMgaXMgaGVhZGVyIG9ubHkgKi8KQEAgLTQ0NjYsNyArNDM0MSw4IEBACiAJCX0KIAogCQlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+cnhfcHNfcGFnZXM7IGorKykgewotCQkJaWYgKCEobGVuZ3RoPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGhbal0pKSkKKwkJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLmxlbmd0aFtqXSk7CisJCQlpZiAoIWxlbmd0aCkKIAkJCQlicmVhazsKIAkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIHBzX3BhZ2VfZG1hLT5wc19wYWdlX2RtYVtqXSwKIAkJCQkJUEFHRV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtNDQ5NCwyMyArNDM3MCwxNCBAQAogCQlpZiAobGlrZWx5KHJ4X2Rlc2MtPndiLnVwcGVyLmhlYWRlcl9zdGF0dXMgJgogCQkJICAgY3B1X3RvX2xlMTYoRTEwMDBfUlhEUFNfSERSU1RBVF9IRFJTUCkpKQogCQkJYWRhcHRlci0+cnhfaGRyX3NwbGl0Kys7Ci0jaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKKwogCQlpZiAodW5saWtlbHkoYWRhcHRlci0+dmxncnAgJiYgKHN0YXRlcnIgJiBFMTAwMF9SWERfU1RBVF9WUCkpKSB7CiAJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGdycCwKLQkJCQlsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi5taWRkbGUudmxhbikgJgotCQkJCUUxMDAwX1JYRF9TUENfVkxBTl9NQVNLKTsKKwkJCQlsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi5taWRkbGUudmxhbikpOwogCQl9IGVsc2UgewogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAkJfQotI2Vsc2UgLyogQ09ORklHX0UxMDAwX05BUEkgKi8KLQkJaWYgKHVubGlrZWx5KGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0ZXJyICYgRTEwMDBfUlhEX1NUQVRfVlApKSkgewotCQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgYWRhcHRlci0+dmxncnAsCi0JCQkJbGUxNl90b19jcHUocnhfZGVzYy0+d2IubWlkZGxlLnZsYW4pICYKLQkJCQlFMTAwMF9SWERfU1BDX1ZMQU5fTUFTSyk7Ci0JCX0gZWxzZSB7Ci0JCQluZXRpZl9yeChza2IpOwotCQl9Ci0jZW5kaWYgLyogQ09ORklHX0UxMDAwX05BUEkgKi8KKwogCQluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCiBuZXh0X2Rlc2M6CkBAIC00NTQ3LDExICs0NDE0LDExIEBACiAgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgdm9pZAotZTEwMDBfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCi0JCSAgICAgICBpbnQgY2xlYW5lZF9jb3VudCkKK3N0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCisJCQkJICAgaW50IGNsZWFuZWRfY291bnQpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlzdHJ1Y3QgZTEwMDBfcnhfZGVzYyAqcnhfZGVzYzsKQEAgLTQ2NDksNyArNDUxNiw3IEBACiAJCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCiAJCSAqIHN1Y2ggYXMgSUEtNjQpLiAqLwogCQl3bWIoKTsKLQkJd3JpdGVsKGksIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT5yZHQpOworCQl3cml0ZWwoaSwgaHctPmh3X2FkZHIgKyByeF9yaW5nLT5yZHQpOwogCX0KIH0KIApAQCAtNDY1OCwxMSArNDUyNSwxMSBAQAogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KIAotc3RhdGljIHZvaWQKLWUxMDAwX2FsbG9jX3J4X2J1ZmZlcnNfcHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAotCQkJICBpbnQgY2xlYW5lZF9jb3VudCkKK3N0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnNfcHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCisJCQkJICAgICAgaW50IGNsZWFuZWRfY291bnQpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAl1bmlvbiBlMTAwMF9yeF9kZXNjX3BhY2tldF9zcGxpdCAqcnhfZGVzYzsKQEAgLTQ3NDcsNyArNDYxNCw3IEBACiAJCSAqIGRlc2NyaXB0b3JzIGFyZSAzMiBieXRlcy4uLnNvIHdlIGluY3JlbWVudCB0YWlsCiAJCSAqIHR3aWNlIGFzIG11Y2guCiAJCSAqLwotCQl3cml0ZWwoaTw8MSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnJkdCk7CisJCXdyaXRlbChpPDwxLCBody0+aHdfYWRkciArIHJ4X3JpbmctPnJkdCk7CiAJfQogfQogCkBAIC00NzU2LDQ5ICs0NjIzLDQ5IEBACiAgKiBAYWRhcHRlcjoKICAqKi8KIAotc3RhdGljIHZvaWQKLWUxMDAwX3NtYXJ0c3BlZWQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBlMTAwMF9zbWFydHNwZWVkKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTE2IHBoeV9zdGF0dXM7CiAJdTE2IHBoeV9jdHJsOwogCi0JaWYgKChhZGFwdGVyLT5ody5waHlfdHlwZSAhPSBlMTAwMF9waHlfaWdwKSB8fCAhYWRhcHRlci0+aHcuYXV0b25lZyB8fAotCSAgICEoYWRhcHRlci0+aHcuYXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMDBfRlVMTCkpCisJaWYgKChody0+cGh5X3R5cGUgIT0gZTEwMDBfcGh5X2lncCkgfHwgIWh3LT5hdXRvbmVnIHx8CisJICAgIShody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMDBfRlVMTCkpCiAJCXJldHVybjsKIAogCWlmIChhZGFwdGVyLT5zbWFydHNwZWVkID09IDApIHsKIAkJLyogSWYgTWFzdGVyL1NsYXZlIGNvbmZpZyBmYXVsdCBpcyBhc3NlcnRlZCB0d2ljZSwKIAkJICogd2UgYXNzdW1lIGJhY2stdG8tYmFjayAqLwotCQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfMTAwMFRfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAoIShwaHlfc3RhdHVzICYgU1JfMTAwMFRfTVNfQ09ORklHX0ZBVUxUKSkgcmV0dXJuOwotCQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfMTAwMFRfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAoIShwaHlfc3RhdHVzICYgU1JfMTAwMFRfTVNfQ09ORklHX0ZBVUxUKSkgcmV0dXJuOwotCQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfMTAwMFRfQ1RSTCwgJnBoeV9jdHJsKTsKKwkJZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgJnBoeV9jdHJsKTsKIAkJaWYgKHBoeV9jdHJsICYgQ1JfMTAwMFRfTVNfRU5BQkxFKSB7CiAJCQlwaHlfY3RybCAmPSB+Q1JfMTAwMFRfTVNfRU5BQkxFOwotCQkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV8xMDAwVF9DVFJMLAorCQkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsCiAJCQkJCSAgICBwaHlfY3RybCk7CiAJCQlhZGFwdGVyLT5zbWFydHNwZWVkKys7Ci0JCQlpZiAoIWUxMDAwX3BoeV9zZXR1cF9hdXRvbmVnKCZhZGFwdGVyLT5odykgJiYKLQkJCSAgICFlMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwKKwkJCWlmICghZTEwMDBfcGh5X3NldHVwX2F1dG9uZWcoaHcpICYmCisJCQkgICAhZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfQ1RSTCwKIAkJCQkgICAJICAgICAgICZwaHlfY3RybCkpIHsKIAkJCQlwaHlfY3RybCB8PSAoTUlJX0NSX0FVVE9fTkVHX0VOIHwKIAkJCQkJICAgICBNSUlfQ1JfUkVTVEFSVF9BVVRPX05FRyk7Ci0JCQkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV9DVFJMLAorCQkJCWUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV9DVFJMLAogCQkJCQkJICAgIHBoeV9jdHJsKTsKIAkJCX0KIAkJfQogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChhZGFwdGVyLT5zbWFydHNwZWVkID09IEUxMDAwX1NNQVJUU1BFRURfRE9XTlNISUZUKSB7CiAJCS8qIElmIHN0aWxsIG5vIGxpbmssIHBlcmhhcHMgdXNpbmcgMi8zIHBhaXIgY2FibGUgKi8KLQkJZTEwMDBfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgUEhZXzEwMDBUX0NUUkwsICZwaHlfY3RybCk7CisJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsICZwaHlfY3RybCk7CiAJCXBoeV9jdHJsIHw9IENSXzEwMDBUX01TX0VOQUJMRTsKLQkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV8xMDAwVF9DVFJMLCBwaHlfY3RybCk7Ci0JCWlmICghZTEwMDBfcGh5X3NldHVwX2F1dG9uZWcoJmFkYXB0ZXItPmh3KSAmJgotCQkgICAhZTEwMDBfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgUEhZX0NUUkwsICZwaHlfY3RybCkpIHsKKwkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsIHBoeV9jdHJsKTsKKwkJaWYgKCFlMTAwMF9waHlfc2V0dXBfYXV0b25lZyhodykgJiYKKwkJICAgIWUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0NUUkwsICZwaHlfY3RybCkpIHsKIAkJCXBoeV9jdHJsIHw9IChNSUlfQ1JfQVVUT19ORUdfRU4gfAogCQkJCSAgICAgTUlJX0NSX1JFU1RBUlRfQVVUT19ORUcpOwotCQkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV9DVFJMLCBwaHlfY3RybCk7CisJCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgcGh5X2N0cmwpOwogCQl9CiAJfQogCS8qIFJlc3RhcnQgcHJvY2VzcyBhZnRlciBFMTAwMF9TTUFSVFNQRUVEX01BWCBpdGVyYXRpb25zICovCkBAIC00ODEzLDggKzQ2ODAsNyBAQAogICogQGNtZDoKICAqKi8KIAotc3RhdGljIGludAotZTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCitzdGF0aWMgaW50IGUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR01JSVBIWToKQEAgLTQ4MzMsMjggKzQ2OTksMjkgQEAKICAqIEBjbWQ6CiAgKiovCiAKLXN0YXRpYyBpbnQKLWUxMDAwX21paV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3N0YXRpYyBpbnQgZTEwMDBfbWlpX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLAorCQkJICAgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkoaWZyKTsKIAlpbnQgcmV0dmFsOwogCXUxNiBtaWlfcmVnOwogCXUxNiBzcGRkcGx4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoYWRhcHRlci0+aHcubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikKKwlpZiAoaHctPm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR01JSVBIWToKLQkJZGF0YS0+cGh5X2lkID0gYWRhcHRlci0+aHcucGh5X2FkZHI7CisJCWRhdGEtPnBoeV9pZCA9IGh3LT5waHlfYWRkcjsKIAkJYnJlYWs7CiAJY2FzZSBTSU9DR01JSVJFRzoKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKLQkJaWYgKGUxMDAwX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIGRhdGEtPnJlZ19udW0gJiAweDFGLAorCQlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBkYXRhLT5yZWdfbnVtICYgMHgxRiwKIAkJCQkgICAmZGF0YS0+dmFsX291dCkpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAtRUlPOwpAQCAtNDg2OCwyMCArNDczNSwyMCBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCW1paV9yZWcgPSBkYXRhLT52YWxfaW47CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7Ci0JCWlmIChlMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgZGF0YS0+cmVnX251bSwKKwkJaWYgKGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIGRhdGEtPnJlZ19udW0sCiAJCQkJCW1paV9yZWcpKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7Ci0JCWlmIChhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJCWlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQkJc3dpdGNoIChkYXRhLT5yZWdfbnVtKSB7CiAJCQljYXNlIFBIWV9DVFJMOgogCQkJCWlmIChtaWlfcmVnICYgTUlJX0NSX1BPV0VSX0RPV04pCiAJCQkJCWJyZWFrOwogCQkJCWlmIChtaWlfcmVnICYgTUlJX0NSX0FVVE9fTkVHX0VOKSB7Ci0JCQkJCWFkYXB0ZXItPmh3LmF1dG9uZWcgPSAxOwotCQkJCQlhZGFwdGVyLT5ody5hdXRvbmVnX2FkdmVydGlzZWQgPSAweDJGOworCQkJCQlody0+YXV0b25lZyA9IDE7CisJCQkJCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPSAweDJGOwogCQkJCX0gZWxzZSB7CiAJCQkJCWlmIChtaWlfcmVnICYgMHg0MCkKIAkJCQkJCXNwZGRwbHggPSBTUEVFRF8xMDAwOwpAQCAtNDkwNCw3ICs0NzcxLDcgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTDoKIAkJCWNhc2UgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkw6Ci0JCQkJaWYgKGUxMDAwX3BoeV9yZXNldCgmYWRhcHRlci0+aHcpKQorCQkJCWlmIChlMTAwMF9waHlfcmVzZXQoaHcpKQogCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTQ5MjcsOCArNDc5NCw3IEBACiAJcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CiAKLXZvaWQKLWUxMDAwX3BjaV9zZXRfbXdpKHN0cnVjdCBlMTAwMF9odyAqaHcpCit2b2lkIGUxMDAwX3BjaV9zZXRfbXdpKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKIAlpbnQgcmV0X3ZhbCA9IHBjaV9zZXRfbXdpKGFkYXB0ZXItPnBkZXYpOwpAQCAtNDkzNywzMCArNDgwMywyNiBAQAogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJFcnJvciBpbiBzZXR0aW5nIE1XSVxuIik7CiB9CiAKLXZvaWQKLWUxMDAwX3BjaV9jbGVhcl9td2koc3RydWN0IGUxMDAwX2h3ICpodykKK3ZvaWQgZTEwMDBfcGNpX2NsZWFyX213aShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CiAKIAlwY2lfY2xlYXJfbXdpKGFkYXB0ZXItPnBkZXYpOwogfQogCi1pbnQKLWUxMDAwX3BjaXhfZ2V0X21tcmJjKHN0cnVjdCBlMTAwMF9odyAqaHcpCitpbnQgZTEwMDBfcGNpeF9nZXRfbW1yYmMoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOwogCXJldHVybiBwY2l4X2dldF9tbXJiYyhhZGFwdGVyLT5wZGV2KTsKIH0KIAotdm9pZAotZTEwMDBfcGNpeF9zZXRfbW1yYmMoc3RydWN0IGUxMDAwX2h3ICpodywgaW50IG1tcmJjKQordm9pZCBlMTAwMF9wY2l4X3NldF9tbXJiYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBpbnQgbW1yYmMpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKIAlwY2l4X3NldF9tbXJiYyhhZGFwdGVyLT5wZGV2LCBtbXJiYyk7CiB9CiAKLXMzMgotZTEwMDBfcmVhZF9wY2llX2NhcF9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZywgdTE2ICp2YWx1ZSkKK3MzMiBlMTAwMF9yZWFkX3BjaWVfY2FwX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnLCB1MTYgKnZhbHVlKQogewogICAgIHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CiAgICAgdTE2IGNhcF9vZmZzZXQ7CkBAIC00OTc0LDE2ICs0ODM2LDE2IEBACiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CiAKLXZvaWQKLWUxMDAwX2lvX3dyaXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVuc2lnbmVkIGxvbmcgcG9ydCwgdTMyIHZhbHVlKQordm9pZCBlMTAwMF9pb193cml0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHBvcnQsIHUzMiB2YWx1ZSkKIHsKIAlvdXRsKHZhbHVlLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKK3N0YXRpYyB2b2lkIGUxMDAwX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBjdHJsLCByY3RsOwogCiAJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5mbGFncykpCkBAIC00OTkyLDI5ICs0ODU0LDI0IEBACiAKIAlpZiAoZ3JwKSB7CiAJCS8qIGVuYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KLQkJY3RybCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTCk7CisJCWN0cmwgPSBlcjMyKENUUkwpOwogCQljdHJsIHw9IEUxMDAwX0NUUkxfVk1FOwotCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMLCBjdHJsKTsKKwkJZXczMihDVFJMLCBjdHJsKTsKIAogCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikgewogCQkJLyogZW5hYmxlIFZMQU4gcmVjZWl2ZSBmaWx0ZXJpbmcgKi8KLQkJCXJjdGwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJDVEwpOwotCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKKwkJCXJjdGwgPSBlcjMyKFJDVEwpOwogCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9DRklFTjsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJDVEwsIHJjdGwpOworCQkJZXczMihSQ1RMLCByY3RsKTsKIAkJCWUxMDAwX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRpc2FibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCi0JCWN0cmwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIENUUkwpOworCQljdHJsID0gZXIzMihDVFJMKTsKIAkJY3RybCAmPSB+RTEwMDBfQ1RSTF9WTUU7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwsIGN0cmwpOworCQlldzMyKENUUkwsIGN0cmwpOwogCiAJCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKSB7Ci0JCQkvKiBkaXNhYmxlIFZMQU4gZmlsdGVyaW5nICovCi0JCQlyY3RsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMKTsKLQkJCXJjdGwgJj0gfkUxMDAwX1JDVExfVkZFOwotCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7CiAJCQlpZiAoYWRhcHRlci0+bW5nX3ZsYW5faWQgIT0KIAkJCSAgICAodTE2KUUxMDAwX01OR19WTEFOX05PTkUpIHsKIAkJCQllMTAwMF92bGFuX3J4X2tpbGxfdmlkKG5ldGRldiwKQEAgLTUwMjgsMjcgKzQ4ODUsMjcgQEAKIAkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQorc3RhdGljIHZvaWQgZTEwMDBfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHZmdGEsIGluZGV4OwogCi0JaWYgKChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0YXR1cyAmCisJaWYgKChody0+bW5nX2Nvb2tpZS5zdGF0dXMgJgogCSAgICAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOX1NVUFBPUlQpICYmCiAJICAgICh2aWQgPT0gYWRhcHRlci0+bW5nX3ZsYW5faWQpKQogCQlyZXR1cm47CiAJLyogYWRkIFZJRCB0byBmaWx0ZXIgdGFibGUgKi8KIAlpbmRleCA9ICh2aWQgPj4gNSkgJiAweDdGOwotCXZmdGEgPSBFMTAwMF9SRUFEX1JFR19BUlJBWSgmYWRhcHRlci0+aHcsIFZGVEEsIGluZGV4KTsKKwl2ZnRhID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoaHcsIFZGVEEsIGluZGV4KTsKIAl2ZnRhIHw9ICgxIDw8ICh2aWQgJiAweDFGKSk7Ci0JZTEwMDBfd3JpdGVfdmZ0YSgmYWRhcHRlci0+aHcsIGluZGV4LCB2ZnRhKTsKKwllMTAwMF93cml0ZV92ZnRhKGh3LCBpbmRleCwgdmZ0YSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1lMTAwMF92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCitzdGF0aWMgdm9pZCBlMTAwMF92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHZmdGEsIGluZGV4OwogCiAJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5mbGFncykpCkBAIC01MDU3LDcgKzQ5MTQsNyBAQAogCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQogCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCi0JaWYgKChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0YXR1cyAmCisJaWYgKChody0+bW5nX2Nvb2tpZS5zdGF0dXMgJgogCSAgICAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOX1NVUFBPUlQpICYmCiAJICAgICh2aWQgPT0gYWRhcHRlci0+bW5nX3ZsYW5faWQpKSB7CiAJCS8qIHJlbGVhc2UgY29udHJvbCB0byBmL3cgKi8KQEAgLTUwNjcsMTMgKzQ5MjQsMTIgQEAKIAogCS8qIHJlbW92ZSBWSUQgZnJvbSBmaWx0ZXIgdGFibGUgKi8KIAlpbmRleCA9ICh2aWQgPj4gNSkgJiAweDdGOwotCXZmdGEgPSBFMTAwMF9SRUFEX1JFR19BUlJBWSgmYWRhcHRlci0+aHcsIFZGVEEsIGluZGV4KTsKKwl2ZnRhID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoaHcsIFZGVEEsIGluZGV4KTsKIAl2ZnRhICY9IH4oMSA8PCAodmlkICYgMHgxRikpOwotCWUxMDAwX3dyaXRlX3ZmdGEoJmFkYXB0ZXItPmh3LCBpbmRleCwgdmZ0YSk7CisJZTEwMDBfd3JpdGVfdmZ0YShodywgaW5kZXgsIHZmdGEpOwogfQogCi1zdGF0aWMgdm9pZAotZTEwMDBfcmVzdG9yZV92bGFuKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgZTEwMDBfcmVzdG9yZV92bGFuKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCWUxMDAwX3ZsYW5fcnhfcmVnaXN0ZXIoYWRhcHRlci0+bmV0ZGV2LCBhZGFwdGVyLT52bGdycCk7CiAKQEAgLTUwODcsMTMgKzQ5NDMsMTQgQEAKIAl9CiB9CiAKLWludAotZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1MTYgc3BkZHBseCkKK2ludCBlMTAwMF9zZXRfc3BkX2RwbHgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBzcGRkcGx4KQogewotCWFkYXB0ZXItPmh3LmF1dG9uZWcgPSAwOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlody0+YXV0b25lZyA9IDA7CiAKIAkvKiBGaWJlciBOSUNzIG9ubHkgYWxsb3cgMTAwMCBnYnBzIEZ1bGwgZHVwbGV4ICovCi0JaWYgKChhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpICYmCisJaWYgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSAmJgogCQlzcGRkcGx4ICE9IChTUEVFRF8xMDAwICsgRFVQTEVYX0ZVTEwpKSB7CiAJCURQUklOVEsoUFJPQkUsIEVSUiwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MTAxLDIwICs0OTU4LDIwIEBACiAKIAlzd2l0Y2ggKHNwZGRwbHgpIHsKIAljYXNlIFNQRUVEXzEwICsgRFVQTEVYX0hBTEY6Ci0JCWFkYXB0ZXItPmh3LmZvcmNlZF9zcGVlZF9kdXBsZXggPSBlMTAwMF8xMF9oYWxmOworCQlody0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9IGUxMDAwXzEwX2hhbGY7CiAJCWJyZWFrOwogCWNhc2UgU1BFRURfMTAgKyBEVVBMRVhfRlVMTDoKLQkJYWRhcHRlci0+aHcuZm9yY2VkX3NwZWVkX2R1cGxleCA9IGUxMDAwXzEwX2Z1bGw7CisJCWh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID0gZTEwMDBfMTBfZnVsbDsKIAkJYnJlYWs7CiAJY2FzZSBTUEVFRF8xMDAgKyBEVVBMRVhfSEFMRjoKLQkJYWRhcHRlci0+aHcuZm9yY2VkX3NwZWVkX2R1cGxleCA9IGUxMDAwXzEwMF9oYWxmOworCQlody0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9IGUxMDAwXzEwMF9oYWxmOwogCQlicmVhazsKIAljYXNlIFNQRUVEXzEwMCArIERVUExFWF9GVUxMOgotCQlhZGFwdGVyLT5ody5mb3JjZWRfc3BlZWRfZHVwbGV4ID0gZTEwMDBfMTAwX2Z1bGw7CisJCWh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID0gZTEwMDBfMTAwX2Z1bGw7CiAJCWJyZWFrOwogCWNhc2UgU1BFRURfMTAwMCArIERVUExFWF9GVUxMOgotCQlhZGFwdGVyLT5ody5hdXRvbmVnID0gMTsKLQkJYWRhcHRlci0+aHcuYXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFXzEwMDBfRlVMTDsKKwkJaHctPmF1dG9uZWcgPSAxOworCQlody0+YXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFXzEwMDBfRlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBTUEVFRF8xMDAwICsgRFVQTEVYX0hBTEY6IC8qIG5vdCBzdXBwb3J0ZWQgKi8KIAlkZWZhdWx0OgpAQCAtNTEyNCwxMSArNDk4MSwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1lMTAwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGUxMDAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBjdHJsLCBjdHJsX2V4dCwgcmN0bCwgc3RhdHVzOwogCXUzMiB3dWZjID0gYWRhcHRlci0+d29sOwogI2lmZGVmIENPTkZJR19QTQpAQCAtNTE0OCw3ICs1MDA1LDcgQEAKIAkJcmV0dXJuIHJldHZhbDsKICNlbmRpZgogCi0Jc3RhdHVzID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpOworCXN0YXR1cyA9IGVyMzIoU1RBVFVTKTsKIAlpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0xVKQogCQl3dWZjICY9IH5FMTAwMF9XVUZDX0xOS0M7CiAKQEAgLTUxNTgsNDAgKzUwMTUsNDAgQEAKIAogCQkvKiB0dXJuIG9uIGFsbC1tdWx0aSBtb2RlIGlmIHdha2Ugb24gbXVsdGljYXN0IGlzIGVuYWJsZWQgKi8KIAkJaWYgKHd1ZmMgJiBFMTAwMF9XVUZDX01DKSB7Ci0JCQlyY3RsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMKTsKKwkJCXJjdGwgPSBlcjMyKFJDVEwpOwogCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX01QRTsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJDVEwsIHJjdGwpOworCQkJZXczMihSQ1RMLCByY3RsKTsKIAkJfQogCi0JCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCkgewotCQkJY3RybCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTCk7CisJCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDApIHsKKwkJCWN0cmwgPSBlcjMyKENUUkwpOwogCQkJLyogYWR2ZXJ0aXNlIHdha2UgZnJvbSBEM0NvbGQgKi8KIAkJCSNkZWZpbmUgRTEwMDBfQ1RSTF9BRFZEM1dVQyAweDAwMTAwMDAwCiAJCQkvKiBwaHkgcG93ZXIgbWFuYWdlbWVudCBlbmFibGUgKi8KIAkJCSNkZWZpbmUgRTEwMDBfQ1RSTF9FTl9QSFlfUFdSX01HTVQgMHgwMDIwMDAwMAogCQkJY3RybCB8PSBFMTAwMF9DVFJMX0FEVkQzV1VDIHwKIAkJCQlFMTAwMF9DVFJMX0VOX1BIWV9QV1JfTUdNVDsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwsIGN0cmwpOworCQkJZXczMihDVFJMLCBjdHJsKTsKIAkJfQogCi0JCWlmIChhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIgfHwKLQkJICAgYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgeworCQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAorCQkgICBody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgewogCQkJLyoga2VlcCB0aGUgbGFzZXIgcnVubmluZyBpbiBEMyAqLwotCQkJY3RybF9leHQgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIENUUkxfRVhUKTsKKwkJCWN0cmxfZXh0ID0gZXIzMihDVFJMX0VYVCk7CiAJCQljdHJsX2V4dCB8PSBFMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEE7Ci0JCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMX0VYVCwgY3RybF9leHQpOworCQkJZXczMihDVFJMX0VYVCwgY3RybF9leHQpOwogCQl9CiAKIAkJLyogQWxsb3cgdGltZSBmb3IgcGVuZGluZyBtYXN0ZXIgcmVxdWVzdHMgdG8gcnVuICovCi0JCWUxMDAwX2Rpc2FibGVfcGNpZXhfbWFzdGVyKCZhZGFwdGVyLT5odyk7CisJCWUxMDAwX2Rpc2FibGVfcGNpZXhfbWFzdGVyKGh3KTsKIAotCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBXVUMsIEUxMDAwX1dVQ19QTUVfRU4pOwotCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBXVUZDLCB3dWZjKTsKKwkJZXczMihXVUMsIEUxMDAwX1dVQ19QTUVfRU4pOworCQlldzMyKFdVRkMsIHd1ZmMpOwogCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAxKTsKIAkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDEpOwogCX0gZWxzZSB7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVQywgMCk7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVRkMsIDApOworCQlldzMyKFdVQywgMCk7CisJCWV3MzIoV1VGQywgMCk7CiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwogCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CiAJfQpAQCAtNTIwNCw4ICs1MDYxLDggQEAKIAkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDEpOwogCX0KIAotCWlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpCi0JCWUxMDAwX3BoeV9wb3dlcmRvd25fd29ya2Fyb3VuZCgmYWRhcHRlci0+aHcpOworCWlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncF8zKQorCQllMTAwMF9waHlfcG93ZXJkb3duX3dvcmthcm91bmQoaHcpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMDBfZnJlZV9pcnEoYWRhcHRlcik7CkBAIC01MjIyLDE2ICs1MDc5LDIxIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQKLWUxMDAwX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgZTEwMDBfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGVycjsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgeworCisJaWYgKGFkYXB0ZXItPm5lZWRfaW9wb3J0KQorCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwllbHNlCisJCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKKwlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZTEwMDA6IENhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTUyNDAsMTIgKzUxMDIsMTUgQEAKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICYmIChlcnIgPSBlMTAwMF9yZXF1ZXN0X2lycShhZGFwdGVyKSkpCi0JCXJldHVybiBlcnI7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQllcnIgPSBlMTAwMF9yZXF1ZXN0X2lycShhZGFwdGVyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQogCiAJZTEwMDBfcG93ZXJfdXBfcGh5KGFkYXB0ZXIpOwogCWUxMDAwX3Jlc2V0KGFkYXB0ZXIpOwotCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVUywgfjApOworCWV3MzIoV1VTLCB+MCk7CiAKIAllMTAwMF9pbml0X21hbmFnZWFiaWxpdHkoYWRhcHRlcik7CiAKQEAgLTUyNTgsOCArNTEyMyw4IEBACiAJICogRFJWX0xPQUQgdW50aWwgdGhlIGludGVyZmFjZSBpcyB1cC4gIEZvciBhbGwgb3RoZXIgY2FzZXMsCiAJICogbGV0IHRoZSBmL3cga25vdyB0aGF0IHRoZSBoL3cgaXMgbm93IHVuZGVyIHRoZSBjb250cm9sCiAJICogb2YgdGhlIGRyaXZlci4gKi8KLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgIT0gZTEwMDBfODI1NzMgfHwKLQkgICAgIWUxMDAwX2NoZWNrX21uZ19tb2RlKCZhZGFwdGVyLT5odykpCisJaWYgKGh3LT5tYWNfdHlwZSAhPSBlMTAwMF84MjU3MyB8fAorCSAgICAhZTEwMDBfY2hlY2tfbW5nX21vZGUoaHcpKQogCQllMTAwMF9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKIAogCXJldHVybiAwOwpAQCAtNTI3NywxNyArNTE0MiwxMiBAQAogICogd2l0aG91dCBoYXZpbmcgdG8gcmUtZW5hYmxlIGludGVycnVwdHMuIEl0J3Mgbm90IGNhbGxlZCB3aGlsZQogICogdGhlIGludGVycnVwdCByb3V0aW5lIGlzIGV4ZWN1dGluZy4KICAqLwotc3RhdGljIHZvaWQKLWUxMDAwX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyB2b2lkIGUxMDAwX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlkaXNhYmxlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOwogCWUxMDAwX2ludHIoYWRhcHRlci0+cGRldi0+aXJxLCBuZXRkZXYpOwotCWUxMDAwX2NsZWFuX3R4X2lycShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKTsKLSNpZm5kZWYgQ09ORklHX0UxMDAwX05BUEkKLQlhZGFwdGVyLT5jbGVhbl9yeChhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nKTsKLSNlbmRpZgogCWVuYWJsZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKIH0KICNlbmRpZgpAQCAtNTMwMCw3ICs1MTYwLDggQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKICAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgogICovCi1zdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBlMTAwMF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGUxMDAwX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkJcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2LT5wcml2OwpAQCAtNTMyNiw4ICs1MTg3LDE0IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBlcnI7CiAKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwlpZiAoYWRhcHRlci0+bmVlZF9pb3BvcnQpCisJCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWVsc2UKKwkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlMTAwMDogQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KQEAgLTUzMzcsNyArNTIwNCw3IEBACiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwogCiAJZTEwMDBfcmVzZXQoYWRhcHRlcik7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgV1VTLCB+MCk7CisJZXczMihXVVMsIH4wKTsKIAogCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiB9CkBAIC01MzU0LDYgKzUyMjEsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXYtPnByaXY7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCWUxMDAwX2luaXRfbWFuYWdlYWJpbGl0eShhZGFwdGVyKTsKIApAQCAtNTM3MCw4ICs1MjM4LDggQEAKIAkgKiBEUlZfTE9BRCB1bnRpbCB0aGUgaW50ZXJmYWNlIGlzIHVwLiAgRm9yIGFsbCBvdGhlciBjYXNlcywKIAkgKiBsZXQgdGhlIGYvdyBrbm93IHRoYXQgdGhlIGgvdyBpcyBub3cgdW5kZXIgdGhlIGNvbnRyb2wKIAkgKiBvZiB0aGUgZHJpdmVyLiAqLwotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF84MjU3MyB8fAotCSAgICAhZTEwMDBfY2hlY2tfbW5nX21vZGUoJmFkYXB0ZXItPmh3KSkKKwlpZiAoaHctPm1hY190eXBlICE9IGUxMDAwXzgyNTczIHx8CisJICAgICFlMTAwMF9jaGVja19tbmdfbW9kZShodykpCiAJCWUxMDAwX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwogCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaAppbmRleCAzNjU2MjZkLi5kOTI5ODUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKQEAgLTU1LDEzICs1NSwxMyBAQAogI2RlZmluZSBERUJVR09VVDcgREVCVUdPVVQzCiAKIAotI2RlZmluZSBFMTAwMF9XUklURV9SRUcoYSwgcmVnLCB2YWx1ZSkgKCBcCi0gICAgd3JpdGVsKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyBcCi0gICAgICAgICgoKGEpLT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgPyBFMTAwMF8jI3JlZyA6IEUxMDAwXzgyNTQyXyMjcmVnKSkpKQorI2RlZmluZSBlcjMyKHJlZykJCQkJCQkJXAorCShyZWFkbChody0+aHdfYWRkciArICgoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKQkJXAorCQkJICAgICAgID8gRTEwMDBfIyNyZWcgOiBFMTAwMF84MjU0Ml8jI3JlZykpKQogCi0jZGVmaW5lIEUxMDAwX1JFQURfUkVHKGEsIHJlZykgKCBcCi0gICAgcmVhZGwoKGEpLT5od19hZGRyICsgXAotICAgICAgICAoKChhKS0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpID8gRTEwMDBfIyNyZWcgOiBFMTAwMF84MjU0Ml8jI3JlZykpKQorI2RlZmluZSBldzMyKHJlZywgdmFsdWUpCQkJCQkJXAorCSh3cml0ZWwoKHZhbHVlKSwgKGh3LT5od19hZGRyICsgKChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpCVwKKwkJCQkJID8gRTEwMDBfIyNyZWcgOiBFMTAwMF84MjU0Ml8jI3JlZykpKSkKIAogI2RlZmluZSBFMTAwMF9XUklURV9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQsIHZhbHVlKSAoIFwKICAgICB3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIFwKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgKCgoYSktPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSA/IEUxMDAwXyMjcmVnIDogRTEwMDBfODI1NDJfIyNyZWcpICsgXAogICAgICAgICAob2Zmc2V0KSkpCiAKLSNkZWZpbmUgRTEwMDBfV1JJVEVfRkxVU0goYSkgRTEwMDBfUkVBRF9SRUcoYSwgU1RBVFVTKQorI2RlZmluZSBFMTAwMF9XUklURV9GTFVTSCgpIGVyMzIoU1RBVFVTKQogCiAjZGVmaW5lIEUxMDAwX1dSSVRFX0lDSF9GTEFTSF9SRUcoYSwgcmVnLCB2YWx1ZSkgKCBcCiAgICAgd3JpdGVsKCh2YWx1ZSksICgoYSktPmZsYXNoX2FkZHJlc3MgKyByZWcpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jCmluZGV4IGU2NTY1Y2UuLmI5ZjkwYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfcGFyYW0uYwpAQCAtMjEzLDEwICsyMTMsOSBAQAogCX0gYXJnOwogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQKLWUxMDAwX3ZhbGlkYXRlX29wdGlvbih1bnNpZ25lZCBpbnQgKnZhbHVlLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgZTEwMDBfb3B0aW9uICpvcHQsCi0JCSAgICAgIHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBfX2RldmluaXQgZTEwMDBfdmFsaWRhdGVfb3B0aW9uKHVuc2lnbmVkIGludCAqdmFsdWUsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBlMTAwMF9vcHRpb24gKm9wdCwKKwkJCQkJICAgc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaWYgKCp2YWx1ZSA9PSBPUFRJT05fVU5TRVQpIHsKIAkJKnZhbHVlID0gb3B0LT5kZWY7CkBAIC0yNzgsOCArMjc3LDcgQEAKICAqIGluIGEgdmFyaWFibGUgaW4gdGhlIGFkYXB0ZXIgc3RydWN0dXJlLgogICoqLwogCi12b2lkIF9fZGV2aW5pdAotZTEwMDBfY2hlY2tfb3B0aW9ucyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgX19kZXZpbml0IGUxMDAwX2NoZWNrX29wdGlvbnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGJkID0gYWRhcHRlci0+YmRfbnVtYmVyOwogCWlmIChiZCA+PSBFMTAwMF9NQVhfTklDKSB7CkBAIC01NTEsOCArNTQ5LDcgQEAKICAqIEhhbmRsZXMgc3BlZWQgYW5kIGR1cGxleCBvcHRpb25zIG9uIGZpYmVyIGFkYXB0ZXJzCiAgKiovCiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdAotZTEwMDBfY2hlY2tfZmliZXJfb3B0aW9ucyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBlMTAwMF9jaGVja19maWJlcl9vcHRpb25zKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBiZCA9IGFkYXB0ZXItPmJkX251bWJlcjsKIAlpZiAobnVtX1NwZWVkID4gYmQpIHsKQEAgLTU3OSw4ICs1NzYsNyBAQAogICogSGFuZGxlcyBzcGVlZCBhbmQgZHVwbGV4IG9wdGlvbnMgb24gY29wcGVyIGFkYXB0ZXJzCiAgKiovCiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdAotZTEwMDBfY2hlY2tfY29wcGVyX29wdGlvbnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZTEwMDBfY2hlY2tfY29wcGVyX29wdGlvbnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdW5zaWduZWQgaW50IHNwZWVkLCBkcGx4LCBhbjsKIAlpbnQgYmQgPSBhZGFwdGVyLT5iZF9udW1iZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IGQzYmM2ZjguLjRhNGY2MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC0yODMsNiArMjgzLDEwIEBACiAJdW5zaWduZWQgbG9uZyBsZWRfc3RhdHVzOwogCiAJdW5zaWduZWQgaW50IGZsYWdzOworCisJLyogZm9yIGlvcG9ydCBmcmVlICovCisJaW50IGJhcnM7CisJaW50IG5lZWRfaW9wb3J0OwogfTsKIAogc3RydWN0IGUxMDAwX2luZm8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDY0OGE4N2IuLjg2OTU0NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTk4LDggKzk4LDcgQEAKIAogCWlmIChhZGFwdGVyLT52bGdycCAmJiAoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfVlApKQogCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGdycCwKLQkJCQkJIGxlMTZfdG9fY3B1KHZsYW4pICYKLQkJCQkJIEUxMDAwX1JYRF9TUENfVkxBTl9NQVNLKTsKKwkJCQkJIGxlMTZfdG9fY3B1KHZsYW4pKTsKIAllbHNlCiAJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAKQEAgLTE3OTMsNyArMTc5Miw2IEBACiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0hXX1ZMQU5fRklMVEVSKSB7CiAJCQkvKiBlbmFibGUgVkxBTiByZWNlaXZlIGZpbHRlcmluZyAqLwogCQkJcmN0bCA9IGVyMzIoUkNUTCk7Ci0JCQlyY3RsIHw9IEUxMDAwX1JDVExfVkZFOwogCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9DRklFTjsKIAkJCWV3MzIoUkNUTCwgcmN0bCk7CiAJCQllMTAwMF91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7CkBAIC0xODA1LDEwICsxODAzLDYgQEAKIAkJZXczMihDVFJMLCBjdHJsKTsKIAogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19IV19WTEFOX0ZJTFRFUikgewotCQkJLyogZGlzYWJsZSBWTEFOIGZpbHRlcmluZyAqLwotCQkJcmN0bCA9IGVyMzIoUkNUTCk7Ci0JCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1ZGRTsKLQkJCWV3MzIoUkNUTCwgcmN0bCk7CiAJCQlpZiAoYWRhcHRlci0+bW5nX3ZsYW5faWQgIT0KIAkJCSAgICAodTE2KUUxMDAwX01OR19WTEFOX05PTkUpIHsKIAkJCQllMTAwMF92bGFuX3J4X2tpbGxfdmlkKG5ldGRldiwKQEAgLTIyMzEsMTEgKzIyMjUsMTYgQEAKIAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJcmN0bCB8PSAoRTEwMDBfUkNUTF9VUEUgfCBFMTAwMF9SQ1RMX01QRSk7Ci0JfSBlbHNlIGlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCXJjdGwgfD0gRTEwMDBfUkNUTF9NUEU7Ci0JCXJjdGwgJj0gfkUxMDAwX1JDVExfVVBFOworCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1ZGRTsKIAl9IGVsc2UgewotCQlyY3RsICY9IH4oRTEwMDBfUkNUTF9VUEUgfCBFMTAwMF9SQ1RMX01QRSk7CisJCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCQlyY3RsIHw9IEUxMDAwX1JDVExfTVBFOworCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9VUEU7CisJCX0gZWxzZSB7CisJCQlyY3RsICY9IH4oRTEwMDBfUkNUTF9VUEUgfCBFMTAwMF9SQ1RMX01QRSk7CisJCX0KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfSFdfVkxBTl9GSUxURVIpCisJCQlyY3RsIHw9IEUxMDAwX1JDVExfVkZFOwogCX0KIAogCWV3MzIoUkNUTCwgcmN0bCk7CkBAIC0yNTE0LDcgKzI1MTMsNyBAQAogCWV3MzIoUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKIAkvKiBmbHVzaCBhbmQgc2xlZXAgYmVsb3cgKi8KIAotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAogCS8qIGRpc2FibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSAqLwogCXRjdGwgPSBlcjMyKFRDVEwpOwpAQCAtMjY2NCw2ICsyNjYzLDggQEAKIAogCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CiAKKwluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CisKIAkvKiBmaXJlIGEgbGluayBzdGF0dXMgY2hhbmdlIGludGVycnVwdCB0byBzdGFydCB0aGUgd2F0Y2hkb2cgKi8KIAlldzMyKElDUywgRTEwMDBfSUNTX0xTQyk7CiAKQEAgLTMxMTksNyArMzEyMCw3IEBACiAJCQlldzMyKFRDVEwsIHRjdGwpOwogCiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAogCQkJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT5waHlfaW5mb190aW1lciwKQEAgLTMxMzEsNyArMzEzMiw3IEBACiAJCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IDA7CiAJCQluZGV2X2luZm8obmV0ZGV2LCAiTGluayBpcyBEb3duXG4iKTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAkJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJCW1vZF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIsCiAJCQkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CkBAIC00MDAzLDcgKzQwMDQsMTEgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJZTEwMDBlX2Rpc2FibGVfbDFhc3BtKHBkZXYpOwotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCisJaWYgKGFkYXB0ZXItPm5lZWRfaW9wb3J0KQorCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwllbHNlCisJCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXG4iKTsKQEAgLTQxMDQsOSArNDEwOSwxNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGVycjsKIAogCWUxMDAwZV9kaXNhYmxlX2wxYXNwbShwZGV2KTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwlpZiAoYWRhcHRlci0+bmVlZF9pb3BvcnQpCisJCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWVsc2UKKwkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOwogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKQEAgLTQxODUsNiArNDE5NSwyMSBAQAogfQogCiAvKioKKyAqIGUxMDAwZV9pc19uZWVkX2lvcG9ydCAtIGRldGVybWluZSBpZiBhbiBhZGFwdGVyIG5lZWRzIGlvcG9ydCByZXNvdXJjZXMgb3Igbm90CisgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYW4gYWRhcHRlcnMgbmVlZHMgaW9wb3J0IHJlc291cmNlcworICoqLworc3RhdGljIGludCBlMTAwMGVfaXNfbmVlZF9pb3BvcnQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKKwkvKiBDdXJyZW50bHkgdGhlcmUgYXJlIG5vIGFkYXB0ZXJzIHRoYXQgbmVlZCBpb3BvcnQgcmVzb3VyY2VzICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworLyoqCiAgKiBlMTAwMF9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCiAgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKICAqIEBlbnQ6IGVudHJ5IGluIGUxMDAwX3BjaV90YmwKQEAgLTQyMDksOSArNDIzNCwxOSBAQAogCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWM7CiAJdTE2IGVlcHJvbV9kYXRhID0gMDsKIAl1MTYgZWVwcm9tX2FwbWVfbWFzayA9IEUxMDAwX0VFUFJPTV9BUE1FOworCWludCBiYXJzLCBuZWVkX2lvcG9ydDsKIAogCWUxMDAwZV9kaXNhYmxlX2wxYXNwbShwZGV2KTsKLQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKworCS8qIGRvIG5vdCBhbGxvY2F0ZSBpb3BvcnQgYmFycyB3aGVuIG5vdCBuZWVkZWQgKi8KKwluZWVkX2lvcG9ydCA9IGUxMDAwZV9pc19uZWVkX2lvcG9ydChwZGV2KTsKKwlpZiAobmVlZF9pb3BvcnQpIHsKKwkJYmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfSU8pOworCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwl9IGVsc2UgeworCQliYXJzID0gcGNpX3NlbGVjdF9iYXJzKHBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKKwkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCX0KIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC00MjM0LDcgKzQyNjksNyBAQAogCQl9CiAJfQogCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBlMTAwMGVfZHJpdmVyX25hbWUpOworCWVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYmFycywgZTEwMDBlX2RyaXZlcl9uYW1lKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wY2lfcmVnOwogCkBAIC00MjU5LDYgKzQyOTQsOCBAQAogCWFkYXB0ZXItPmh3LmFkYXB0ZXIgPSBhZGFwdGVyOwogCWFkYXB0ZXItPmh3Lm1hYy50eXBlID0gZWktPm1hYzsKIAlhZGFwdGVyLT5tc2dfZW5hYmxlID0gKDEgPDwgTkVUSUZfTVNHX0RSViB8IE5FVElGX01TR19QUk9CRSkgLSAxOworCWFkYXB0ZXItPmJhcnMgPSBiYXJzOworCWFkYXB0ZXItPm5lZWRfaW9wb3J0ID0gbmVlZF9pb3BvcnQ7CiAKIAltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKQEAgLTQzNDQsNiArNDM4MSwxMSBAQAogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CiAKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCkBAIC00NDY0LDcgKzQ1MDYsNyBAQAogCiAJLyogdGVsbCB0aGUgc3RhY2sgdG8gbGVhdmUgdXMgYWxvbmUgdW50aWwgZTEwMDBfb3BlbigpIGlzIGNhbGxlZCAqLwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCiAJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CkBAIC00NDkzLDcgKzQ1MzUsNyBAQAogZXJyX2lvcmVtYXA6CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIGVycl9hbGxvY19ldGhlcmRldjoKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYmFycyk7CiBlcnJfcGNpX3JlZzoKIGVycl9kbWE6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDU0MSw3ICs0NTgzLDcgQEAKIAlpb3VubWFwKGFkYXB0ZXItPmh3Lmh3X2FkZHIpOwogCWlmIChhZGFwdGVyLT5ody5mbGFzaF9hZGRyZXNzKQogCQlpb3VubWFwKGFkYXB0ZXItPmh3LmZsYXNoX2FkZHJlc3MpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBhZGFwdGVyLT5iYXJzKTsKIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYWxueC5jIGIvZHJpdmVycy9uZXQvZmVhbG54LmMKaW5kZXggN2JiOWM3Mi4uM2MxMzY0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVhbG54LmMKKysrIGIvZHJpdmVycy9uZXQvZmVhbG54LmMKQEAgLTkwLDYgKzkwLDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CS8qIFByb2Nlc3NvciB0eXBlIGZvciBjYWNoZSBhbGlnbm1lbnQuICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gPQpAQCAtODYxLDQwICs4NjIsMjAgQEAKIAkgICBXYWl0IHRoZSBzcGVjaWZpZWQgNTAgUENJIGN5Y2xlcyBhZnRlciBhIHJlc2V0IGJ5IGluaXRpYWxpemluZwogCSAgIFR4IGFuZCBSeCBxdWV1ZXMgYW5kIHRoZSBhZGRyZXNzIGZpbHRlciBsaXN0LgogCSAgIEZJWE1FIChVZWltb3IpOiBvcHRpbWlzdGljIGZvciBhbHBoYSArIHBvc3RlZCB3cml0ZXMgPyAqLwotI2lmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19zcGFyY19fKQotLy8gODkvOS8xIG1vZGlmeSwKLS8vICAgbnAtPmJjcnZhbHVlPTB4MDQgfCAweDB4Mzg7ICAvKiBiaWctZW5kaWFuLCAyNTYgYnVyc3QgbGVuZ3RoICovCi0JbnAtPmJjcnZhbHVlID0gMHgwNCB8IDB4MTA7CS8qIGJpZy1lbmRpYW4sIHR4IDggYnVyc3QgbGVuZ3RoICovCi0JbnAtPmNydmFsdWUgPSAweGUwMDsJLyogcnggMTI4IGJ1cnN0IGxlbmd0aCAqLwotI2VsaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLS8vIDg5LzkvMSBtb2RpZnksCi0vLyAgIG5wLT5iY3J2YWx1ZT0weDM4OyAgICAgICAgICAgLyogbGl0dGxlLWVuZGlhbiwgMjU2IGJ1cnN0IGxlbmd0aCAqLworCiAJbnAtPmJjcnZhbHVlID0gMHgxMDsJLyogbGl0dGxlLWVuZGlhbiwgOCBidXJzdCBsZW5ndGggKi8KLQlucC0+Y3J2YWx1ZSA9IDB4ZTAwOwkvKiByeCAxMjggYnVyc3QgbGVuZ3RoICovCi0jZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotI2lmIGRlZmluZWQoTU9EVUxFKQotLy8gODkvOS8xIG1vZGlmeSwKLS8vICAgbnAtPmJjcnZhbHVlPTB4Mzg7ICAgICAgICAgICAvKiBsaXR0bGUtZW5kaWFuLCAyNTYgYnVyc3QgbGVuZ3RoICovCi0JbnAtPmJjcnZhbHVlID0gMHgxMDsJLyogbGl0dGxlLWVuZGlhbiwgOCBidXJzdCBsZW5ndGggKi8KLQlucC0+Y3J2YWx1ZSA9IDB4ZTAwOwkvKiByeCAxMjggYnVyc3QgbGVuZ3RoICovCi0jZWxzZQotCS8qIFdoZW4gbm90IGEgbW9kdWxlIHdlIGNhbiB3b3JrIGFyb3VuZCBicm9rZW4gJzQ4NiBQQ0kgYm9hcmRzLiAqLwotI2RlZmluZSB4ODYgYm9vdF9jcHVfZGF0YS54ODYKLS8vIDg5LzkvMSBtb2RpZnksCi0vLyAgIG5wLT5iY3J2YWx1ZT0oeDg2IDw9IDQgPyAweDEwIDogMHgzOCk7Ci0JbnAtPmJjcnZhbHVlID0gMHgxMDsKLQlucC0+Y3J2YWx1ZSA9ICh4ODYgPD0gNCA/IDB4YTAwIDogMHhlMDApOwotCWlmICh4ODYgPD0gNCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRoaXMgaXMgYSAzODYvNDg2IFBDSSBzeXN0ZW0sIHNldHRpbmcgYnVyc3QgIgotCQkgICAgICAgImxlbmd0aCB0byAleC5cbiIsIGRldi0+bmFtZSwgKHg4NiA8PSA0ID8gMHgxMCA6IDB4MzgpKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlucC0+YmNydmFsdWUgfD0gMHgwNDsJLyogYmlnLWVuZGlhbiAqLwogI2VuZGlmCi0jZWxzZQotLy8gODkvOS8xIG1vZGlmeSwKLS8vICAgbnAtPmJjcnZhbHVlPTB4Mzg7Ci0JbnAtPmJjcnZhbHVlID0gMHgxMDsKLQlucC0+Y3J2YWx1ZSA9IDB4ZTAwOwkvKiByeCAxMjggYnVyc3QgbGVuZ3RoICovCi0jd2FybmluZyBQcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIHVuZGVmaW5lZCEKKworI2lmIGRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKE1PRFVMRSkKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPD0gNCkKKwkJbnAtPmNydmFsdWUgPSAweGEwMDsKKwllbHNlCiAjZW5kaWYKKwkJbnAtPmNydmFsdWUgPSAweGUwMDsJLyogcnggMTI4IGJ1cnN0IGxlbmd0aCAqLworCisKIC8vIDg5LzEyLzI5IGFkZCwKIC8vIDkwLzEvMTYgbW9kaWZ5LAogLy8gICBucC0+aW1ydmFsdWU9RkJFfFRVTkZ8Q05UT1ZGfFJCVXxUSXxSSTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCmluZGV4IDMyOWVkZDkuLjRlNGY2ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwpAQCAtMTk3LDkgKzE5Nyw2IEBACiAJCWlmIChwcml2LT5saW5rID09IFBIWV9ET1dOKSB7CiAJCQluZXdfc3RhdGUgPSAxOwogCQkJcHJpdi0+bGluayA9IHBoeWRldi0+bGluazsKLQkJCW5ldGlmX3NjaGVkdWxlKGRldik7Ci0JCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCQl9CiAKIAl9IGVsc2UgaWYgKHByaXYtPmxpbmspIHsKQEAgLTIwNyw4ICsyMDQsNiBAQAogCQlwcml2LT5saW5rID0gUEhZX0RPV047CiAJCXByaXYtPnNwZWVkID0gMDsKIAkJcHJpdi0+ZHVwbGV4ID0gLTE7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAl9CiAKIAlpZiAobmV3X3N0YXRlICYmIG5ldGlmX21zZ19saW5rKHByaXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCAyMGQ0ZmU5Li40ZWQ4OWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtNDI2LDYgKzQyNiw3IEBACiAjZGVmaW5lIE5WX1BDSV9SRUdTWl9WRVIxICAgICAgCTB4MjcwCiAjZGVmaW5lIE5WX1BDSV9SRUdTWl9WRVIyICAgICAgCTB4MmQ0CiAjZGVmaW5lIE5WX1BDSV9SRUdTWl9WRVIzICAgICAgCTB4NjA0CisjZGVmaW5lIE5WX1BDSV9SRUdTWl9NQVggICAgICAgCTB4NjA0CiAKIC8qIHZhcmlvdXMgdGltZW91dCBkZWxheXM6IGFsbCBpbiB1c2VjICovCiAjZGVmaW5lIE5WX1RYUlhfUkVTRVRfREVMQVkJNApAQCAtNzg0LDYgKzc4NSw5IEBACiAKIAkvKiBmbG93IGNvbnRyb2wgKi8KIAl1MzIgcGF1c2VfZmxhZ3M7CisKKwkvKiBwb3dlciBzYXZlZCBzdGF0ZSAqLworCXUzMiBzYXZlZF9jb25maWdfc3BhY2VbTlZfUENJX1JFR1NaX01BWC80XTsKIH07CiAKIC8qCkBAIC0yODI3LDYgKzI4MzEsNyBAQAogCQkgKi8KIAkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKIAkJbmV0aWZfdHhfbG9ja19iaChkZXYpOworCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCS8qIHN0b3AgZW5naW5lcyAqLwogCQludl9zdG9wX3J4dHgoZGV2KTsKQEAgLTI4NTEsNiArMjg1Niw3IEBACiAJCS8qIHJlc3RhcnQgcnggZW5naW5lICovCiAJCW52X3N0YXJ0X3J4dHgoZGV2KTsKIAkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAl9CkBAIC0yODg3LDYgKzI4OTMsNyBAQAogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQluZXRpZl90eF9sb2NrX2JoKGRldik7CisJCW5ldGlmX2FkZHJfbG9jayhkZXYpOwogCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAKIAkJLyogc3RvcCByeCBlbmdpbmUgKi8KQEAgLTI4OTgsNiArMjkwNSw3IEBACiAJCS8qIHJlc3RhcnQgcnggZW5naW5lICovCiAJCW52X3N0YXJ0X3J4KGRldik7CiAJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCQluZXRpZl9hZGRyX3VubG9jayhkZXYpOwogCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAl9IGVsc2UgewogCQludl9jb3B5X21hY190b19odyhkZXYpOwpAQCAtMzk2Nyw2ICszOTc1LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiBNQUMgaW4gcmVjb3ZlcmFibGUgZXJyb3Igc3RhdGVcbiIpOwogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQluZXRpZl90eF9sb2NrX2JoKGRldik7CisJCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkJLyogc3RvcCBlbmdpbmVzICovCiAJCQludl9zdG9wX3J4dHgoZGV2KTsKQEAgLTM5OTEsNiArNDAwMCw3IEBACiAJCQkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLwogCQkJbnZfc3RhcnRfcnh0eChkZXYpOwogCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCW5ldGlmX2FkZHJfdW5sb2NrKGRldik7CiAJCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAkJfQogCX0KQEAgLTQxOTgsNiArNDIwOCw3IEBACiAKIAkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKIAkJbmV0aWZfdHhfbG9ja19iaChkZXYpOworCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJLyogd2l0aCBwbGFpbiBzcGlubG9jayBsb2NrZGVwIGNvbXBsYWlucyAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAkJLyogc3RvcCBlbmdpbmVzICovCkBAIC00MjExLDYgKzQyMjIsNyBAQAogCQkgKi8KIAkJbnZfc3RvcF9yeHR4KGRldik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCW5ldGlmX2FkZHJfdW5sb2NrKGRldik7CiAJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCX0KIApAQCAtNDM1NiwxMCArNDM2OCwxMiBAQAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQludl9kaXNhYmxlX2lycShkZXYpOwogCQkJbmV0aWZfdHhfbG9ja19iaChkZXYpOworCQkJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCS8qIHN0b3AgZW5naW5lcyAqLwogCQkJbnZfc3RvcF9yeHR4KGRldik7CiAJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQkJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAkJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93bi5cbiIsIGRldi0+bmFtZSk7CiAJCX0KQEAgLTQ0NjcsNiArNDQ4MSw3IEBACiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQludl9kaXNhYmxlX2lycShkZXYpOwogCQluZXRpZl90eF9sb2NrX2JoKGRldik7CisJCW5ldGlmX2FkZHJfbG9jayhkZXYpOwogCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJLyogc3RvcCBlbmdpbmVzICovCiAJCW52X3N0b3Bfcnh0eChkZXYpOwpAQCAtNDUxNSw2ICs0NTMwLDcgQEAKIAkJLyogcmVzdGFydCBlbmdpbmVzICovCiAJCW52X3N0YXJ0X3J4dHgoZGV2KTsKIAkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAl9CkBAIC00NTUyLDEwICs0NTY4LDEyIEBACiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQludl9kaXNhYmxlX2lycShkZXYpOwogCQluZXRpZl90eF9sb2NrX2JoKGRldik7CisJCW5ldGlmX2FkZHJfbG9jayhkZXYpOwogCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJLyogc3RvcCBlbmdpbmVzICovCiAJCW52X3N0b3Bfcnh0eChkZXYpOwogCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQluZXRpZl9hZGRyX3VubG9jayhkZXYpOwogCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAl9CiAKQEAgLTQ5NDIsNiArNDk2MCw3IEBACiAJCQluYXBpX2Rpc2FibGUoJm5wLT5uYXBpKTsKICNlbmRpZgogCQkJbmV0aWZfdHhfbG9ja19iaChkZXYpOworCQkJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQludl9kaXNhYmxlX2h3X2ludGVycnVwdHMoZGV2LCBucC0+aXJxbWFzayk7CiAJCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKQEAgLTQ5NTUsNiArNDk3NCw3IEBACiAJCQkvKiBkcmFpbiByeCBxdWV1ZSAqLwogCQkJbnZfZHJhaW5fcnh0eChkZXYpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CisJCQluZXRpZl9hZGRyX3VubG9jayhkZXYpOwogCQkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJCX0KIApAQCAtNTU2Niw2ICs1NTg2LDExIEBACiAJLyogc2V0IG1hYyBhZGRyZXNzICovCiAJbnZfY29weV9tYWNfdG9faHcoZGV2KTsKIAorCS8qIFdvcmthcm91bmQgY3VycmVudCBQQ0kgaW5pdCBnbGl0Y2g6ICB3YWtldXAgYml0cyBhcmVuJ3QKKwkgKiBiZWluZyBzZXQgZnJvbSBQQ0kgUE0gY2FwYWJpbGl0eS4KKwkgKi8KKwlkZXZpY2VfaW5pdF93YWtldXAoJnBjaV9kZXYtPmRldiwgMSk7CisKIAkvKiBkaXNhYmxlIFdPTCAqLwogCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdXYWtlVXBGbGFncyk7CiAJbnAtPndvbGVuYWJsZWQgPSAwOwpAQCAtNTgxNiw1MCArNTg0MSw2NiBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCWludCBpOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCWdvdG8gb3V0OwotCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkvLyBHcm9zcy4KKwkJbnZfY2xvc2UoZGV2KTsKKwl9CiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCi0JLy8gR3Jvc3MuCi0JbnZfY2xvc2UoZGV2KTsKKwkvKiBzYXZlIG5vbi1wY2kgY29uZmlndXJhdGlvbiBzcGFjZSAqLworCWZvciAoaSA9IDA7aSA8PSBucC0+cmVnaXN0ZXJfc2l6ZS9zaXplb2YodTMyKTsgaSsrKQorCQlucC0+c2F2ZWRfY29uZmlnX3NwYWNlW2ldID0gcmVhZGwoYmFzZSArIGkqc2l6ZW9mKHUzMikpOwogCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCBucC0+d29sZW5hYmxlZCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwotb3V0OgogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG52X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQlpbnQgcmMgPSAwOwotCXUzMiB0eHJlZzsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlnb3RvIG91dDsKLQotCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwlpbnQgaSwgcmMgPSAwOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCS8qIGFjayBhbnkgcGVuZGluZyB3YWtlIGV2ZW50cywgZGlzYWJsZSBQTUUgKi8KIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKIAotCS8qIHJlc3RvcmUgbWFjIGFkZHJlc3MgcmV2ZXJzZSBmbGFnICovCi0JdHhyZWcgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdFBvbGwpOwotCXR4cmVnIHw9IE5WUkVHX1RSQU5TTUlUUE9MTF9NQUNfQUREUl9SRVY7Ci0Jd3JpdGVsKHR4cmVnLCBiYXNlICsgTnZSZWdUcmFuc21pdFBvbGwpOworCS8qIHJlc3RvcmUgbm9uLXBjaSBjb25maWd1cmF0aW9uIHNwYWNlICovCisJZm9yIChpID0gMDtpIDw9IG5wLT5yZWdpc3Rlcl9zaXplL3NpemVvZih1MzIpOyBpKyspCisJCXdyaXRlbChucC0+c2F2ZWRfY29uZmlnX3NwYWNlW2ldLCBiYXNlK2kqc2l6ZW9mKHUzMikpOwogCi0JcmMgPSBudl9vcGVuKGRldik7Ci0JbnZfc2V0X211bHRpY2FzdChkZXYpOwotb3V0OgorCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXJjID0gbnZfb3BlbihkZXYpOworCQludl9zZXRfbXVsdGljYXN0KGRldik7CisJfQogCXJldHVybiByYzsKIH0KKworc3RhdGljIHZvaWQgbnZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJbnZfY2xvc2UoZGV2KTsKKworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIG5wLT53b2xlbmFibGVkKTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgbnAtPndvbGVuYWJsZWQpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7Cit9CiAjZWxzZQogI2RlZmluZSBudl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgbnZfc2h1dGRvd24gTlVMTAogI2RlZmluZSBudl9yZXN1bWUgTlVMTAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCkBAIC02MDMwLDYgKzYwNzEsNyBAQAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobnZfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IG52X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBudl9yZXN1bWUsCisJLnNodXRkb3duCT0gbnZfc2h1dGRvd24sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X25pYyh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvTWFrZWZpbGUKaW5kZXggMWZmYmUwNy4uZDRhMzA1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L01ha2VmaWxlCkBAIC04LDEyICs4LDcgQEAKIGZzX2VuZXQtJChDT05GSUdfRlNfRU5FVF9IQVNfRkVDKSArPSBtYWMtZmVjLm8KIGZzX2VuZXQtJChDT05GSUdfRlNfRU5FVF9IQVNfRkNDKSArPSBtYWMtZmNjLm8KIAotaWZlcSAoJChDT05GSUdfUFBDX0NQTV9ORVdfQklORElORykseSkKIG9iai0kKENPTkZJR19GU19FTkVUX01ESU9fRkVDKSArPSBtaWktZmVjLm8KIG9iai0kKENPTkZJR19GU19FTkVUX01ESU9fRkNDKSArPSBtaWktYml0YmFuZy5vCi1lbHNlCi1mc19lbmV0LSQoQ09ORklHX0ZTX0VORVRfTURJT19GRUMpICs9IG1paS1mZWMubwotZnNfZW5ldC0kKENPTkZJR19GU19FTkVUX01ESU9fRkNDKSArPSBtaWktYml0YmFuZy5vCi1lbmRpZgogCiBmc19lbmV0LW9ianMgOj0gZnNfZW5ldC1tYWluLm8gJChmc19lbmV0LW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwppbmRleCAzNTI1NzRhLi45YTUxZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTM2LDI1ICszNiwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2lmZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCi0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiZnNfZW5ldC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmbmRlZiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotICAgIERSVl9NT0RVTEVfTkFNRSAiLmM6diIgRFJWX01PRFVMRV9WRVJTSU9OICIgKCIgRFJWX01PRFVMRV9SRUxEQVRFICIpIiAiXG4iOwotI2VuZGlmCi0KIE1PRFVMRV9BVVRIT1IoIlBhbnRlbGlzIEFudG9uaW91IDxwYW50b0BpbnRyYWNvbS5ncj4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIEV0aGVybmV0IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtNzM3LDkgKzczMCw2IEBACiAJCWlmICghZmVwLT5vbGRsaW5rKSB7CiAJCQluZXdfc3RhdGUgPSAxOwogCQkJZmVwLT5vbGRsaW5rID0gMTsKLQkJCW5ldGlmX3NjaGVkdWxlKGRldik7Ci0JCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCQl9CiAKIAkJaWYgKG5ld19zdGF0ZSkKQEAgLTc0OSw4ICs3MzksNiBAQAogCQlmZXAtPm9sZGxpbmsgPSAwOwogCQlmZXAtPm9sZHNwZWVkID0gMDsKIAkJZmVwLT5vbGRkdXBsZXggPSAtMTsKLQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCX0KIAogCWlmIChuZXdfc3RhdGUgJiYgbmV0aWZfbXNnX2xpbmsoZmVwKSkKQEAgLTgyNSw2ICs4MTMsOCBAQAogCX0KIAlwaHlfc3RhcnQoZmVwLT5waHlkZXYpOwogCisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC05NTcsMTkwICs5NDcsNiBAQAogZXh0ZXJuIGludCBmc19taWlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGZzX21paV9kaXNjb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0jaWZuZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmZzX2luaXRfaW5zdGFuY2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyAqZnBpKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBOVUxMOwotCWludCBwcml2c2l6ZSwgaSwgciwgZXJyID0gMCwgcmVnaXN0ZXJlZCA9IDA7Ci0KLQlmcGktPmZzX25vID0gZnNfZ2V0X2lkKGZwaSk7Ci0JLyogZ3VhcmQgKi8KLQlpZiAoKHVuc2lnbmVkIGludClmcGktPmZzX25vID49IEZTX01BWF9JTkRFWCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQlwcml2c2l6ZSA9IHNpemVvZigqZmVwKSArIChzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiopICoKLQkJCSAgICAoZnBpLT5yeF9yaW5nICsgZnBpLT50eF9yaW5nKSk7Ci0KLQluZGV2ID0gYWxsb2NfZXRoZXJkZXYocHJpdnNpemUpOwotCWlmICghbmRldikgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQotCWZlcC0+ZGV2ID0gZGV2OwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG5kZXYpOwotCWZlcC0+ZnBpID0gZnBpOwotCWlmIChmcGktPmluaXRfaW9wb3J0cykKLQkJZnBpLT5pbml0X2lvcG9ydHMoKHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICopZnBpKTsKLQotI2lmZGVmIENPTkZJR19GU19FTkVUX0hBU19GRUMKLQlpZiAoZnNfZ2V0X2ZlY19pbmRleChmcGktPmZzX25vKSA+PSAwKQotCQlmZXAtPm9wcyA9ICZmc19mZWNfb3BzOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDCi0JaWYgKGZzX2dldF9zY2NfaW5kZXgoZnBpLT5mc19ubykgPj0wKQotCQlmZXAtPm9wcyA9ICZmc19zY2Nfb3BzOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDCi0JaWYgKGZzX2dldF9mY2NfaW5kZXgoZnBpLT5mc19ubykgPj0gMCkKLQkJZmVwLT5vcHMgPSAmZnNfZmNjX29wczsKLSNlbmRpZgotCi0JaWYgKGZlcC0+b3BzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9NT0RVTEVfTkFNRQotCQkgICAgICAgIjogJXMgTm8gbWF0Y2hpbmcgb3BzIGZvdW5kICglZCkuXG4iLAotCQkgICAgICAgbmRldi0+bmFtZSwgZnBpLT5mc19ubyk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXIgPSAoKmZlcC0+b3BzLT5zZXR1cF9kYXRhKShuZGV2KTsKLQlpZiAociAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTU9EVUxFX05BTUUKLQkJICAgICAgICI6ICVzIHNldHVwX2RhdGEgZmFpbGVkXG4iLAotCQkJbmRldi0+bmFtZSk7Ci0JCWVyciA9IHI7Ci0JCWdvdG8gZXJyOwotCX0KLQotCS8qIHBvaW50IHJ4X3NrYnVmZiwgdHhfc2tidWZmICovCi0JZmVwLT5yeF9za2J1ZmYgPSAoc3RydWN0IHNrX2J1ZmYgKiopJmZlcFsxXTsKLQlmZXAtPnR4X3NrYnVmZiA9IGZlcC0+cnhfc2tidWZmICsgZnBpLT5yeF9yaW5nOwotCi0JLyogaW5pdCBsb2NrcyAqLwotCXNwaW5fbG9ja19pbml0KCZmZXAtPmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZmZXAtPnR4X2xvY2spOwotCi0JLyoKLQkgKiBTZXQgdGhlIEV0aGVybmV0IGFkZHJlc3MuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJbmRldi0+ZGV2X2FkZHJbaV0gPSBmcGktPm1hY2FkZHJbaV07Ci0KLQlyID0gKCpmZXAtPm9wcy0+YWxsb2NhdGVfYmQpKG5kZXYpOwotCi0JaWYgKGZlcC0+cmluZ19iYXNlID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9NT0RVTEVfTkFNRQotCQkgICAgICAgIjogJXMgYnVmZmVyIGRlc2NyaXB0b3IgYWxsb2MgZmFpbGVkICglZCkuXG4iLCBuZGV2LT5uYW1lLCByKTsKLQkJZXJyID0gcjsKLQkJZ290byBlcnI7Ci0JfQotCi0JLyoKLQkgKiBTZXQgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGVzY3JpcHRvciBiYXNlLgotCSAqLwotCWZlcC0+cnhfYmRfYmFzZSA9IGZlcC0+cmluZ19iYXNlOwotCWZlcC0+dHhfYmRfYmFzZSA9IGZlcC0+cnhfYmRfYmFzZSArIGZwaS0+cnhfcmluZzsKLQotCS8qIGluaXRpYWxpemUgcmluZyBzaXplIHZhcmlhYmxlcyAqLwotCWZlcC0+dHhfcmluZyA9IGZwaS0+dHhfcmluZzsKLQlmZXAtPnJ4X3JpbmcgPSBmcGktPnJ4X3Jpbmc7Ci0KLQkvKgotCSAqIFRoZSBGRUMgRXRoZXJuZXQgc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KLQkgKi8KLQluZGV2LT5vcGVuID0gZnNfZW5ldF9vcGVuOwotCW5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGZzX2VuZXRfc3RhcnRfeG1pdDsKLQluZGV2LT50eF90aW1lb3V0ID0gZnNfdGltZW91dDsKLQluZGV2LT53YXRjaGRvZ190aW1lbyA9IDIgKiBIWjsKLQluZGV2LT5zdG9wID0gZnNfZW5ldF9jbG9zZTsKLQluZGV2LT5nZXRfc3RhdHMgPSBmc19lbmV0X2dldF9zdGF0czsKLQluZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBmc19zZXRfbXVsdGljYXN0X2xpc3Q7Ci0KLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCW5kZXYtPnBvbGxfY29udHJvbGxlciA9IGZzX2VuZXRfbmV0cG9sbDsKLSNlbmRpZgotCi0JbmV0aWZfbmFwaV9hZGQobmRldiwgJmZlcC0+bmFwaSwKLQkJICAgICAgIGZzX2VuZXRfcnhfbmFwaSwgZnBpLT5uYXBpX3dlaWdodCk7Ci0KLQluZGV2LT5ldGh0b29sX29wcyA9ICZmc19ldGh0b29sX29wczsKLQluZGV2LT5kb19pb2N0bCA9IGZzX2lvY3RsOwotCi0JaW5pdF90aW1lcigmZmVwLT5waHlfdGltZXJfbGlzdCk7Ci0KLQluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKLQotCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9NT0RVTEVfTkFNRQotCQkgICAgICAgIjogJXMgcmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZC5cbiIsIG5kZXYtPm5hbWUpOwotCQlnb3RvIGVycjsKLQl9Ci0JcmVnaXN0ZXJlZCA9IDE7Ci0KLQotCXJldHVybiBuZGV2OwotCi1lcnI6Ci0JaWYgKG5kZXYgIT0gTlVMTCkgewotCQlpZiAocmVnaXN0ZXJlZCkKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwotCi0JCWlmIChmZXAgJiYgZmVwLT5vcHMpIHsKLQkJCSgqZmVwLT5vcHMtPmZyZWVfYmQpKG5kZXYpOwotCQkJKCpmZXAtPm9wcy0+Y2xlYW51cF9kYXRhKShuZGV2KTsKLQkJfQotCi0JCWZyZWVfbmV0ZGV2KG5kZXYpOwotCX0KLQotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCi0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotc3RhdGljIGludCBmc19jbGVhbnVwX2luc3RhbmNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcDsKLQljb25zdCBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyAqZnBpOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQotCWlmIChuZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZmVwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JaWYgKGZlcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZwaSA9IGZlcC0+ZnBpOwotCi0JdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7Ci0KLQlkbWFfZnJlZV9jb2hlcmVudChmZXAtPmRldiwgKGZwaS0+dHhfcmluZyArIGZwaS0+cnhfcmluZykgKiBzaXplb2YoY2JkX3QpLAotCQkJICAodm9pZCBfX2ZvcmNlICopZmVwLT5yaW5nX2Jhc2UsIGZlcC0+cmluZ19tZW1fYWRkcik7Ci0KLQkvKiByZXNldCBpdCAqLwotCSgqZmVwLT5vcHMtPmNsZWFudXBfZGF0YSkobmRldik7Ci0KLQlkZXYgPSBmZXAtPmRldjsKLQlpZiAoZGV2ICE9IE5VTEwpIHsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Ci0JCWZlcC0+ZGV2ID0gTlVMTDsKLQl9Ci0KLQlmcmVlX25ldGRldihuZGV2KTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogaGFuZHkgcG9pbnRlciB0byB0aGUgaW1tYXAgKi8KQEAgLTExNjcsMTMgKzk3MywxMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORwogc3RhdGljIGludCBfX2RldmluaXQgZmluZF9waHkoc3RydWN0IGRldmljZV9ub2RlICpucCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGkpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpwaHlub2RlLCAqbWRpb25vZGU7Ci0Jc3RydWN0IHJlc291cmNlIHJlczsKLQlpbnQgcmV0ID0gMCwgbGVuOworCWludCByZXQgPSAwLCBsZW4sIGJ1c19pZDsKIAljb25zdCB1MzIgKmRhdGE7CiAKIAlkYXRhICA9IG9mX2dldF9wcm9wZXJ0eShucCwgImZpeGVkLWxpbmsiLCBOVUxMKTsKQEAgLTExOTAsMTkgKzk5NCwyOCBAQAogCWlmICghcGh5bm9kZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZGlvbm9kZSA9IG9mX2dldF9wYXJlbnQocGh5bm9kZSk7Ci0JaWYgKCFtZGlvbm9kZSkKLQkJZ290byBvdXRfcHV0X3BoeTsKLQotCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobWRpb25vZGUsIDAsICZyZXMpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3B1dF9tZGlvOwotCiAJZGF0YSA9IG9mX2dldF9wcm9wZXJ0eShwaHlub2RlLCAicmVnIiwgJmxlbik7Ci0JaWYgKCFkYXRhIHx8IGxlbiAhPSA0KQotCQlnb3RvIG91dF9wdXRfbWRpbzsKKwlpZiAoIWRhdGEgfHwgbGVuICE9IDQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfcHV0X3BoeTsKKwl9CiAKLQlzbnByaW50ZihmcGktPmJ1c19pZCwgMTYsICIleDolMDJ4IiwgcmVzLnN0YXJ0LCAqZGF0YSk7CisJbWRpb25vZGUgPSBvZl9nZXRfcGFyZW50KHBoeW5vZGUpOworCWlmICghbWRpb25vZGUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfcHV0X3BoeTsKKwl9CisKKwlidXNfaWQgPSBvZl9nZXRfZ3BpbyhtZGlvbm9kZSwgMCk7CisJaWYgKGJ1c19pZCA8IDApIHsKKwkJc3RydWN0IHJlc291cmNlIHJlczsKKwkJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShtZGlvbm9kZSwgMCwgJnJlcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9wdXRfbWRpbzsKKwkJYnVzX2lkID0gcmVzLnN0YXJ0OworCX0KKworCXNucHJpbnRmKGZwaS0+YnVzX2lkLCAxNiwgIiV4OiUwMngiLCBidXNfaWQsICpkYXRhKTsKIAogb3V0X3B1dF9tZGlvOgogCW9mX25vZGVfcHV0KG1kaW9ub2RlKTsKQEAgLTEzOTksMTIxICsxMjEyLDYgQEAKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnNfZW5ldF9kcml2ZXIpOwogCWNsZWFudXBfaW1tYXAoKTsKIH0KLSNlbHNlCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBmc19lbmV0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKLQotCS8qIG5vIGZpeHVwIC0gbm8gZGV2aWNlICovCi0JaWYgKGRldi0+cGxhdGZvcm1fZGF0YSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImZzX2VuZXQ6ICIKLQkJCQkicHJvYmUgY2FsbGVkIHdpdGggbm8gcGxhdGZvcm0gZGF0YTsgIgotCQkJCSJyZW1vdmUgdW51c2VkIGRldmljZXNcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQluZGV2ID0gZnNfaW5pdF9pbnN0YW5jZShkZXYsIGRldi0+cGxhdGZvcm1fZGF0YSk7Ci0JaWYgKElTX0VSUihuZGV2KSkKLQkJcmV0dXJuIFBUUl9FUlIobmRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZnNfZW5ldF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBmc19jbGVhbnVwX2luc3RhbmNlKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGZzX2VuZXRfZmVjX2RyaXZlciA9IHsKLQkubmFtZQkgIAk9ICJmc2wtY3BtLWZlYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCQk9IGZzX2VuZXRfcHJvYmUsCi0JLnJlbW92ZQkJPSBmc19lbmV0X3JlbW92ZSwKLSNpZmRlZiBDT05GSUdfUE0KLS8qCS5zdXNwZW5kCT0gZnNfZW5ldF9zdXNwZW5kLAlUT0RPICovCi0vKgkucmVzdW1lCQk9IGZzX2VuZXRfcmVzdW1lLAlUT0RPICovCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBmc19lbmV0X3NjY19kcml2ZXIgPSB7Ci0JLm5hbWUJICAJPSAiZnNsLWNwbS1zY2MiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZQkJPSBmc19lbmV0X3Byb2JlLAotCS5yZW1vdmUJCT0gZnNfZW5ldF9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCi0vKgkuc3VzcGVuZAk9IGZzX2VuZXRfc3VzcGVuZCwJVE9ETyAqLwotLyoJLnJlc3VtZQkJPSBmc19lbmV0X3Jlc3VtZSwJVE9ETyAqLwotI2VuZGlmCi19OwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZnNfZW5ldF9mY2NfZHJpdmVyID0gewotCS5uYW1lCSAgCT0gImZzbC1jcG0tZmNjIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUJCT0gZnNfZW5ldF9wcm9iZSwKLQkucmVtb3ZlCQk9IGZzX2VuZXRfcmVtb3ZlLAotI2lmZGVmIENPTkZJR19QTQotLyoJLnN1c3BlbmQJPSBmc19lbmV0X3N1c3BlbmQsCVRPRE8gKi8KLS8qCS5yZXN1bWUJCT0gZnNfZW5ldF9yZXN1bWUsCVRPRE8gKi8KLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBfX2luaXQgZnNfaW5pdCh2b2lkKQotewotCWludCByOwotCi0JcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzIiwgdmVyc2lvbik7Ci0KLQlyID0gc2V0dXBfaW1tYXAoKTsKLQlpZiAociAhPSAwKQotCQlyZXR1cm4gcjsKLQotI2lmZGVmIENPTkZJR19GU19FTkVUX0hBU19GQ0MKLQkvKiBsZXQncyBpbnNlcnQgbWlpIHN0dWZmICovCi0JciA9IGZzX2VuZXRfbWRpb19iYl9pbml0KCk7Ci0KLQlpZiAociAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTU9EVUxFX05BTUUKLQkJCSJCQiBQSFkgaW5pdCBmYWlsZWQuXG4iKTsKLQkJcmV0dXJuIHI7Ci0JfQotCXIgPSBkcml2ZXJfcmVnaXN0ZXIoJmZzX2VuZXRfZmNjX2RyaXZlcik7Ci0JaWYgKHIgIT0gMCkKLQkJZ290byBlcnI7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19GU19FTkVUX0hBU19GRUMKLQlyID0gIGZzX2VuZXRfbWRpb19mZWNfaW5pdCgpOwotCWlmIChyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9NT0RVTEVfTkFNRQotCQkJIkZFQyBQSFkgaW5pdCBmYWlsZWQuXG4iKTsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JciA9IGRyaXZlcl9yZWdpc3RlcigmZnNfZW5ldF9mZWNfZHJpdmVyKTsKLQlpZiAociAhPSAwKQotCQlnb3RvIGVycjsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0ZTX0VORVRfSEFTX1NDQwotCXIgPSBkcml2ZXJfcmVnaXN0ZXIoJmZzX2VuZXRfc2NjX2RyaXZlcik7Ci0JaWYgKHIgIT0gMCkKLQkJZ290byBlcnI7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotZXJyOgotCWNsZWFudXBfaW1tYXAoKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGZzX2NsZWFudXAodm9pZCkKLXsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZnNfZW5ldF9mZWNfZHJpdmVyKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZnNfZW5ldF9mY2NfZHJpdmVyKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZnNfZW5ldF9zY2NfZHJpdmVyKTsKLQljbGVhbnVwX2ltbWFwKCk7Ci19Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBmc19lbmV0X25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmgKaW5kZXggZTA1Mzg5Yy4uZGI0NmQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmgKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmgKQEAgLTEzOCwxMCArMTM4LDYgQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCi1pbnQgZnNfZW5ldF9tZGlvX2JiX2luaXQodm9pZCk7Ci1pbnQgZnNfZW5ldF9tZGlvX2ZlY19pbml0KHZvaWQpOwotI2VuZGlmCiAKIHZvaWQgZnNfaW5pdF9iZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIGZzX2NsZWFudXBfYmRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYwppbmRleCA4MjY4YjM1Li4wYTk3ZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaW1tYXBfY3BtMi5oPgogI2luY2x1ZGUgPGFzbS9tcGM4MjYwLmg+CkBAIC00MiwxMCArNDMsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaWZkZWYgQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcKLSNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgImZzX2VuZXQuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04Nyw3ICs4NCw2IEBACiAKIHN0YXRpYyBpbnQgZG9fcGRfc2V0dXAoc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwKQogewotI2lmZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCiAJc3RydWN0IG9mX2RldmljZSAqb2ZkZXYgPSB0b19vZl9kZXZpY2UoZmVwLT5kZXYpOwogCXN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGkgPSBmZXAtPmZwaTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKQEAgLTEyNSw0NCArMTIxLDYgQEAKIAlpb3VubWFwKGZlcC0+ZmNjLmZjY3ApOwogb3V0OgogCXJldHVybiByZXQ7Ci0jZWxzZQotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZmVwLT5kZXYpOwotCXN0cnVjdCByZXNvdXJjZSAqcjsKLQotCS8qIEZpbGwgb3V0IElSUSBmaWVsZCAqLwotCWZlcC0+aW50ZXJydXB0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoZmVwLT5pbnRlcnJ1cHQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEF0dGFjaCB0aGUgbWVtb3J5IGZvciB0aGUgRkNDIFBhcmFtZXRlciBSQU0gKi8KLQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImZjY19wcmFtIik7Ci0JZmVwLT5mY2MuZXAgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOwotCWlmIChmZXAtPmZjYy5lcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZmNjX3JlZ3MiKTsKLQlmZXAtPmZjYy5mY2NwID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKLQlpZiAoZmVwLT5mY2MuZmNjcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChmZXAtPmZwaS0+ZmNjX3JlZ3NfYykgewotCQlmZXAtPmZjYy5mY2NjcCA9ICh2b2lkIF9faW9tZW0gKilmZXAtPmZwaS0+ZmNjX3JlZ3NfYzsKLQl9IGVsc2UgewotCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwKLQkJCQkiZmNjX3JlZ3NfYyIpOwotCQlmZXAtPmZjYy5mY2NjcCA9IGlvcmVtYXAoci0+c3RhcnQsCi0JCQkJci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKLQl9Ci0KLQlpZiAoZmVwLT5mY2MuZmNjY3AgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmZXAtPmZjYy5tZW0gPSAodm9pZCBfX2lvbWVtICopZmVwLT5mcGktPm1lbV9vZmZzZXQ7Ci0JaWYgKGZlcC0+ZmNjLm1lbSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOwotI2VuZGlmCiB9CiAKICNkZWZpbmUgRkNDX05BUElfUlhfRVZFTlRfTVNLCShGQ0NfRU5FVF9SWEYgfCBGQ0NfRU5FVF9SWEIpCkBAIC0xNzMsMTcgKzEzMSw2IEBACiBzdGF0aWMgaW50IHNldHVwX2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotI2lmbmRlZiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORwotCXN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGkgPSBmZXAtPmZwaTsKLQotCWZwaS0+Y3BfY29tbWFuZCA9IChmcGktPmNwX3BhZ2UgPDwgMjYpIHwKLQkgICAgICAgICAgICAgICAgICAoZnBpLT5jcF9ibG9jayA8PCAyMSkgfAotCSAgICAgICAgICAgICAgICAgICgxMiA8PCA2KTsKLQotCWZlcC0+ZmNjLmlkeCA9IGZzX2dldF9mY2NfaW5kZXgoZnBpLT5mc19ubyk7Ci0JaWYgKCh1bnNpZ25lZCBpbnQpZmVwLT5mY2MuaWR4ID49IDMpCS8qIG1heCAzIEZDQ3MgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKIAogCWlmIChkb19wZF9zZXR1cChmZXApICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzA0LDkgKzI1MSw2IEBACiAJZmNjX2VuZXRfdCBfX2lvbWVtICplcCA9IGZlcC0+ZmNjLmVwOwogCWRtYV9hZGRyX3QgcnhfYmRfYmFzZV9waHlzLCB0eF9iZF9iYXNlX3BoeXM7CiAJdTE2IHBhZGRyaCwgcGFkZHJtLCBwYWRkcmw7Ci0jaWZuZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCi0JdTE2IG1lbV9hZGRyOwotI2VuZGlmCiAJY29uc3QgdW5zaWduZWQgY2hhciAqbWFjOwogCWludCBpOwogCkBAIC0zMzgsMTkgKzI4MiwxMCBAQAogCSAqIHRoaXMgYXJlYS4KIAkgKi8KIAotI2lmZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCiAJVzE2KGVwLCBmZW5fZ2VuZmNjLmZjY19yaXB0ciwgZnBpLT5kcHJhbV9vZmZzZXQpOwogCVcxNihlcCwgZmVuX2dlbmZjYy5mY2NfdGlwdHIsIGZwaS0+ZHByYW1fb2Zmc2V0ICsgMzIpOwogCiAJVzE2KGVwLCBmZW5fcGFkcHRyLCBmcGktPmRwcmFtX29mZnNldCArIDY0KTsKLSNlbHNlCi0JbWVtX2FkZHIgPSAodTMyKSBmZXAtPmZjYy5tZW07CS8qIGRlLWZpeHVwIGRwcmFtIG9mZnNldCAqLwotCi0JVzE2KGVwLCBmZW5fZ2VuZmNjLmZjY19yaXB0ciwgKG1lbV9hZGRyICYgMHhmZmZmKSk7Ci0JVzE2KGVwLCBmZW5fZ2VuZmNjLmZjY190aXB0ciwgKChtZW1fYWRkciArIDMyKSAmIDB4ZmZmZikpOwotCi0JVzE2KGVwLCBmZW5fcGFkcHRyLCBtZW1fYWRkciArIDY0KTsKLSNlbmRpZgogCiAJLyogZmlsbCB3aXRoIHNwZWNpYWwgc3ltYm9sLi4uICAqLwogCW1lbXNldF9pbyhmZXAtPmZjYy5tZW0gKyBmcGktPmRwcmFtX29mZnNldCArIDY0LCAweDg4LCAzMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jCmluZGV4IDhhMzExZDEuLjBhN2QxYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNDMsMTAgKzQ0LDYgQEAKICNpbmNsdWRlIDxhc20vY3BtMS5oPgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORwotI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiZnNfZW5ldC5oIgogI2luY2x1ZGUgImZlYy5oIgogCkBAIC05OSw3ICs5Niw2IEBACiAKIHN0YXRpYyBpbnQgZG9fcGRfc2V0dXAoc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwKQogewotI2lmZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCiAJc3RydWN0IG9mX2RldmljZSAqb2ZkZXYgPSB0b19vZl9kZXZpY2UoZmVwLT5kZXYpOwogCiAJZmVwLT5pbnRlcnJ1cHQgPSBvZl9pcnFfdG9fcmVzb3VyY2Uob2ZkZXYtPm5vZGUsIDAsIE5VTEwpOwpAQCAtMTExLDIzICsxMDcsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwotI2Vsc2UKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGZlcC0+ZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UJKnI7Ci0KLQkvKiBGaWxsIG91dCBJUlEgZmllbGQgKi8KLQlmZXAtPmludGVycnVwdCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsImludGVycnVwdCIpOwotCWlmIChmZXAtPmludGVycnVwdCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJyZWdzIik7Ci0JZmVwLT5mZWMuZmVjcCA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7Ci0KLQlpZihmZXAtPmZlYy5mZWNwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogI2RlZmluZSBGRUNfTkFQSV9SWF9FVkVOVF9NU0sJKEZFQ19FTkVUX1JYRiB8IEZFQ19FTkVUX1JYQikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKaW5kZXggZTM1NTdlYy4uMDI5YjNjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00MywxMCArNDQsNiBAQAogI2luY2x1ZGUgPGFzbS9jcG0xLmg+CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCi0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiZnNfZW5ldC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTk5LDcgKzk2LDYgQEAKIAogc3RhdGljIGludCBkb19wZF9zZXR1cChzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXApCiB7Ci0jaWZkZWYgQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcKIAlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiA9IHRvX29mX2RldmljZShmZXAtPmRldik7CiAKIAlmZXAtPmludGVycnVwdCA9IG9mX2lycV90b19yZXNvdXJjZShvZmRldi0+bm9kZSwgMCwgTlVMTCk7CkBAIC0xMTUsMjcgKzExMSw2IEBACiAJCWlvdW5tYXAoZmVwLT5zY2Muc2NjcCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLSNlbHNlCi0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShmZXAtPmRldik7Ci0Jc3RydWN0IHJlc291cmNlICpyOwotCi0JLyogRmlsbCBvdXQgSVJRIGZpZWxkICovCi0JZmVwLT5pbnRlcnJ1cHQgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiaW50ZXJydXB0Iik7Ci0JaWYgKGZlcC0+aW50ZXJydXB0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInJlZ3MiKTsKLQlmZXAtPnNjYy5zY2NwID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKLQotCWlmIChmZXAtPnNjYy5zY2NwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwcmFtIik7Ci0JZmVwLT5zY2MuZXAgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOwotCi0JaWYgKGZlcC0+c2NjLmVwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0OSwxNiArMTI0LDYgQEAKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0jaWZuZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCi0Jc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaSA9IGZlcC0+ZnBpOwotCi0JZmVwLT5zY2MuaWR4ID0gZnNfZ2V0X3NjY19pbmRleChmcGktPmZzX25vKTsKLQlpZiAoKHVuc2lnbmVkIGludClmZXAtPmZjYy5pZHggPj0gNCkgLyogbWF4IDQgU0NDcyAqLwotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZwaS0+Y3BfY29tbWFuZCA9IGZlcC0+ZmNjLmlkeCA8PCA2OwotI2VuZGlmCi0KIAlkb19wZF9zZXR1cChmZXApOwogCiAJZmVwLT5zY2MuaHRoaSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMKaW5kZXggMTYyMDAzMC4uYmU0YjcyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktYml0YmFuZy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYwpAQCAtMjIsMTAgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tZGlvLWJpdGJhbmcuaD4KLQotI2lmZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNlbmRpZgogCiAjaW5jbHVkZSAiZnNfZW5ldC5oIgogCkBAIC0xMTAsNyArMTA3LDYgQEAKIAkuZ2V0X21kaW9fZGF0YSA9IG1kaW9fcmVhZCwKIH07CiAKLSNpZmRlZiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORwogc3RhdGljIGludCBfX2RldmluaXQgZnNfbWlpX2JpdGJhbmdfaW5pdChzdHJ1Y3QgbWlpX2J1cyAqYnVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewpAQCAtMjcxLDEwNiArMjY3LDMgQEAKIAogbW9kdWxlX2luaXQoZnNfZW5ldF9tZGlvX2JiX2luaXQpOwogbW9kdWxlX2V4aXQoZnNfZW5ldF9tZGlvX2JiX2V4aXQpOwotI2Vsc2UKLXN0YXRpYyBpbnQgX19kZXZpbml0IGZzX21paV9iaXRiYW5nX2luaXQoc3RydWN0IGJiX2luZm8gKmJpdGJhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmc19taWlfYmJfcGxhdGZvcm1faW5mbyAqZm1waSkKLXsKLQliaXRiYW5nLT5kaXIgPSAodTMyIF9faW9tZW0gKilmbXBpLT5tZGlvX2Rpci5vZmZzZXQ7Ci0JYml0YmFuZy0+ZGF0ID0gKHUzMiBfX2lvbWVtICopZm1waS0+bWRpb19kYXQub2Zmc2V0OwotCWJpdGJhbmctPm1kaW9fbXNrID0gMVUgPDwgKDMxIC0gZm1waS0+bWRpb19kYXQuYml0KTsKLQliaXRiYW5nLT5tZGNfbXNrID0gMVUgPDwgKDMxIC0gZm1waS0+bWRjX2RhdC5iaXQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBmc19taWlfYmJfcGxhdGZvcm1faW5mbyAqcGRhdGE7Ci0Jc3RydWN0IG1paV9idXMgKm5ld19idXM7Ci0Jc3RydWN0IGJiX2luZm8gKmJpdGJhbmc7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoTlVMTCA9PSBkZXYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYml0YmFuZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiYl9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoTlVMTCA9PSBiaXRiYW5nKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWJpdGJhbmctPmN0cmwub3BzID0gJmJiX29wczsKLQotCW5ld19idXMgPSBhbGxvY19tZGlvX2JpdGJhbmcoJmJpdGJhbmctPmN0cmwpOwotCi0JaWYgKE5VTEwgPT0gbmV3X2J1cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQluZXdfYnVzLT5uYW1lID0gIkJCIE1JSSBCdXMiLAotCXNucHJpbnRmKG5ld19idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIHBkZXYtPmlkKTsKLQotCW5ld19idXMtPnBoeV9tYXNrID0gfjB4OTsKLQlwZGF0YSA9IChzdHJ1Y3QgZnNfbWlpX2JiX3BsYXRmb3JtX2luZm8gKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQotCWlmIChOVUxMID09IHBkYXRhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2ZhciBtZGlvICVkOiBNaXNzaW5nIHBsYXRmb3JtIGRhdGEhXG4iLCBwZGV2LT5pZCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qc2V0IHVwIHdvcmtzcGFjZSovCi0JZnNfbWlpX2JpdGJhbmdfaW5pdChiaXRiYW5nLCBwZGF0YSk7Ci0KLQluZXdfYnVzLT5wcml2ID0gYml0YmFuZzsKLQotCW5ld19idXMtPmlycSA9IHBkYXRhLT5pcnE7Ci0KLQluZXdfYnVzLT5kZXYgPSBkZXY7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgbmV3X2J1cyk7Ci0KLQllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOwotCi0JaWYgKDAgIT0gZXJyKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMgTURJTyBidXNcbiIsCi0JCQkJbmV3X2J1cy0+bmFtZSk7Ci0JCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWJ1c19yZWdpc3Rlcl9mYWlsOgotCWZyZWVfbWRpb19iaXRiYW5nKG5ld19idXMpOwotCWtmcmVlKGJpdGJhbmcpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBmc19lbmV0X21kaW9fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKLQotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCi0JZnJlZV9tZGlvX2JpdGJhbmcoYnVzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZnNfZW5ldF9iYl9tZGlvX2RyaXZlciA9IHsKLQkubmFtZSA9ICJmc2wtYmItbWRpbyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUgPSBmc19lbmV0X21kaW9fcHJvYmUsCi0JLnJlbW92ZSA9IGZzX2VuZXRfbWRpb19yZW1vdmUsCi19OwotCi1pbnQgZnNfZW5ldF9tZGlvX2JiX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZmc19lbmV0X2JiX21kaW9fZHJpdmVyKTsKLX0KLQotdm9pZCBmc19lbmV0X21kaW9fYmJfZXhpdCh2b2lkKQotewotCWRyaXZlcl91bnJlZ2lzdGVyKCZmc19lbmV0X2JiX21kaW9fZHJpdmVyKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwppbmRleCA4ZjZhNDNiLi42OTVmNzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwpAQCAtMzEsMTUgKzMxLDEyIEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaWZkZWYgQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcKLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJmc19lbmV0LmgiCiAjaW5jbHVkZSAiZmVjLmgiCiAKQEAgLTUxLDUyICs0OCw2IEBACiAKICNkZWZpbmUgRkVDX01JSV9MT09QUwkxMDAwMAogCi0jaWZuZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCi1zdGF0aWMgaW50IG1hdGNoX2hhc19waHkgKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCogZGF0YSkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKLQlzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyogZnBpOwotCWlmKHN0cmNtcChwZGV2LT5uYW1lLCAoY2hhciopZGF0YSkpCi0JewotCSAgICByZXR1cm4gMDsKLQl9Ci0KLQlmcGkgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpZigoZnBpKSYmKGZwaS0+aGFzX3BoeSkpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZzX21paV9mZWNfaW5pdChzdHJ1Y3QgZmVjX2luZm8qIGZlYywgc3RydWN0IGZzX21paV9mZWNfcGxhdGZvcm1faW5mbyAqZm1waSkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0JZmVjX3QgX19pb21lbSAqZmVjcDsKLQljaGFyKiBuYW1lID0gImZzbC1jcG0tZmVjIjsKLQotCS8qIHdlIG5lZWQgZmVjIGluIG9yZGVyIHRvIGJlIHVzZWZ1bCAqLwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZlY19wZGV2ID0KLQkJY29udGFpbmVyX29mKGJ1c19maW5kX2RldmljZSgmcGxhdGZvcm1fYnVzX3R5cGUsIE5VTEwsIG5hbWUsIG1hdGNoX2hhc19waHkpLAotCQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7Ci0KLQlpZihmZWNfcGRldiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiJVbmFibGUgdG8gZmluZCBQSFkgZm9yICVzIiwgbmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGZlY19wZGV2LCBJT1JFU09VUkNFX01FTSwgInJlZ3MiKTsKLQotCWZlYy0+ZmVjcCA9IGZlY3AgPSBpb3JlbWFwKHItPnN0YXJ0LHNpemVvZihmZWNfdCkpOwotCWZlYy0+bWlpX3NwZWVkID0gZm1waS0+bWlpX3NwZWVkOwotCi0Jc2V0Yml0czMyKCZmZWNwLT5mZWNfcl9jbnRybCwgRkVDX1JDTlRSTF9NSUlfTU9ERSk7CS8qIE1JSSBlbmFibGUgKi8KLQlzZXRiaXRzMzIoJmZlY3AtPmZlY19lY250cmwsIEZFQ19FQ05UUkxfUElOTVVYIHwgRkVDX0VDTlRSTF9FVEhFUl9FTik7Ci0Jb3V0X2JlMzIoJmZlY3AtPmZlY19pZXZlbnQsIEZFQ19FTkVUX01JSSk7Ci0Jb3V0X2JlMzIoJmZlY3AtPmZlY19taWlfc3BlZWQsIGZlYy0+bWlpX3NwZWVkKTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgZnNfZW5ldF9mZWNfbWlpX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cyAsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKIHsKIAlzdHJ1Y3QgZmVjX2luZm8qIGZlYyA9IGJ1cy0+cHJpdjsKQEAgLTE1MSw3ICsxMDIsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBhZGRfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJY29uc3QgdTMyICpkYXRhOwpAQCAtMjg2LDk1ICsyMzYsMyBAQAogCiBtb2R1bGVfaW5pdChmc19lbmV0X21kaW9fZmVjX2luaXQpOwogbW9kdWxlX2V4aXQoZnNfZW5ldF9tZGlvX2ZlY19leGl0KTsKLSNlbHNlCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBmc19lbmV0X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGZzX21paV9mZWNfcGxhdGZvcm1faW5mbyAqcGRhdGE7Ci0Jc3RydWN0IG1paV9idXMgKm5ld19idXM7Ci0Jc3RydWN0IGZlY19pbmZvICpmZWM7Ci0JaW50IGVyciA9IDA7Ci0JaWYgKE5VTEwgPT0gZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQluZXdfYnVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1paV9idXMpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChOVUxMID09IG5ld19idXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZmVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZlY19pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoTlVMTCA9PSBmZWMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbmV3X2J1cy0+bmFtZSA9ICJGRUMgTUlJIEJ1cyIsCi0JbmV3X2J1cy0+cmVhZCA9ICZmc19lbmV0X2ZlY19taWlfcmVhZCwKLQluZXdfYnVzLT53cml0ZSA9ICZmc19lbmV0X2ZlY19taWlfd3JpdGUsCi0JbmV3X2J1cy0+cmVzZXQgPSAmZnNfZW5ldF9mZWNfbWlpX3Jlc2V0LAotCXNucHJpbnRmKG5ld19idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIHBkZXYtPmlkKTsKLQotCXBkYXRhID0gKHN0cnVjdCBmc19taWlfZmVjX3BsYXRmb3JtX2luZm8gKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQotCWlmIChOVUxMID09IHBkYXRhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZnNfZW5ldCBGRUMgbWRpbyAlZDogTWlzc2luZyBwbGF0Zm9ybSBkYXRhIVxuIiwgcGRldi0+aWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKnNldCB1cCB3b3Jrc3BhY2UqLwotCi0JZnNfbWlpX2ZlY19pbml0KGZlYywgcGRhdGEpOwotCW5ld19idXMtPnByaXYgPSBmZWM7Ci0KLQluZXdfYnVzLT5pcnEgPSBwZGF0YS0+aXJxOwotCi0JbmV3X2J1cy0+ZGV2ID0gZGV2OwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG5ld19idXMpOwotCi0JZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKLQotCWlmICgwICE9IGVycikgewotCQlwcmludGsgKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGFzIE1ESU8gYnVzXG4iLAotCQkJCW5ld19idXMtPm5hbWUpOwotCQlnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsOwotCX0KLQotCXJldHVybiAwOwotCi1idXNfcmVnaXN0ZXJfZmFpbDoKLQlrZnJlZShuZXdfYnVzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIGludCBmc19lbmV0X2ZlY19tZGlvX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JbWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7Ci0KLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKLQlrZnJlZShidXMtPnByaXYpOwotCi0JYnVzLT5wcml2ID0gTlVMTDsKLQlrZnJlZShidXMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBmc19lbmV0X2ZlY19tZGlvX2RyaXZlciA9IHsKLQkubmFtZSA9ICJmc2wtY3BtLWZlYy1tZGlvIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZSA9IGZzX2VuZXRfZmVjX21kaW9fcHJvYmUsCi0JLnJlbW92ZSA9IGZzX2VuZXRfZmVjX21kaW9fcmVtb3ZlLAotfTsKLQotaW50IGZzX2VuZXRfbWRpb19mZWNfaW5pdCh2b2lkKQotewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmZzX2VuZXRfZmVjX21kaW9fZHJpdmVyKTsKLX0KLQotdm9pZCBmc19lbmV0X21kaW9fZmVjX2V4aXQodm9pZCkKLXsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZnNfZW5ldF9mZWNfbWRpb19kcml2ZXIpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggMjViZGQwOC4uYjgzOTRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtNDQsOCArNDQsNyBAQAogICogIGhhcHBlbiBpbW1lZGlhdGVseSwgYnV0IHdpbGwgd2FpdCB1bnRpbCBlaXRoZXIgYSBzZXQgbnVtYmVyCiAgKiAgb2YgZnJhbWVzIG9yIGFtb3VudCBvZiB0aW1lIGhhdmUgcGFzc2VkKS4gIEluIE5BUEksIHRoZQogICogIGludGVycnVwdCBoYW5kbGVyIHdpbGwgc2lnbmFsIHRoZXJlIGlzIHdvcmsgdG8gYmUgZG9uZSwgYW5kCi0gKiAgZXhpdC4gIFdpdGhvdXQgTkFQSSwgdGhlIHBhY2tldChzKSB3aWxsIGJlIGhhbmRsZWQKLSAqICBpbW1lZGlhdGVseS4gIEJvdGggbWV0aG9kcyB3aWxsIHN0YXJ0IGF0IHRoZSBsYXN0IGtub3duIGVtcHR5CisgKiAgZXhpdC4gVGhpcyBtZXRob2Qgd2lsbCBzdGFydCBhdCB0aGUgbGFzdCBrbm93biBlbXB0eQogICogIGRlc2NyaXB0b3IsIGFuZCBwcm9jZXNzIGV2ZXJ5IHN1YnNlcXVlbnQgZGVzY3JpcHRvciB1bnRpbCB0aGVyZQogICogIGFyZSBub25lIGxlZnQgd2l0aCBkYXRhIChOQVBJIHdpbGwgc3RvcCBhZnRlciBhIHNldCBudW1iZXIgb2YKICAqICBwYWNrZXRzIHRvIGdpdmUgdGltZSB0byBvdGhlciB0YXNrcywgYnV0IHdpbGwgZXZlbnR1YWxseQpAQCAtMTAxLDEyICsxMDAsNiBAQAogI3VuZGVmIEJSSUVGX0dGQVJfRVJST1JTCiAjdW5kZWYgVkVSQk9TRV9HRkFSX0VSUk9SUwogCi0jaWZkZWYgQ09ORklHX0dGQVJfTkFQSQotI2RlZmluZSBSRUNFSVZFKHgpIG5ldGlmX3JlY2VpdmVfc2tiKHgpCi0jZWxzZQotI2RlZmluZSBSRUNFSVZFKHgpIG5ldGlmX3J4KHgpCi0jZW5kaWYKLQogY29uc3QgY2hhciBnZmFyX2RyaXZlcl9uYW1lW10gPSAiR2lhbmZhciBFdGhlcm5ldCI7CiBjb25zdCBjaGFyIGdmYXJfZHJpdmVyX3ZlcnNpb25bXSA9ICIxLjMiOwogCkBAIC0xMzEsOSArMTI0LDcgQEAKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9zZXRfaGFzaF9mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYWRkcik7CiBzdGF0aWMgdm9pZCBnZmFyX2NvbmZpZ3VyZV9zZXJkZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0jaWZkZWYgQ09ORklHX0dGQVJfTkFQSQogc3RhdGljIGludCBnZmFyX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBnZmFyX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZW5kaWYKQEAgLTE0Myw2ICsxMzQsOSBAQAogc3RhdGljIHZvaWQgZ2Zhcl92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCSAgICAgICAgICAgICAgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKTsKIHZvaWQgZ2Zhcl9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHZvaWQgZ2Zhcl9oYWx0X25vZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbmRpZgogdm9pZCBnZmFyX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9jbGVhcl9leGFjdF9tYXRjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLCB1OCAqYWRkcik7CkBAIC0yMTYsNiArMjEwLDcgQEAKIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT50eGxvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5yeGxvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5iZmxvY2spOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIApAQCAtMjYwLDkgKzI1NSw3IEBACiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBnZmFyX3N0YXJ0X3htaXQ7CiAJZGV2LT50eF90aW1lb3V0ID0gZ2Zhcl90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2lmZGVmIENPTkZJR19HRkFSX05BUEkKIAluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5uYXBpLCBnZmFyX3BvbGwsIEdGQVJfREVWX1dFSUdIVCk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCWRldi0+cG9sbF9jb250cm9sbGVyID0gZ2Zhcl9uZXRwb2xsOwogI2VuZGlmCkBAIC0zNjMsMTEgKzM1Niw3IEBACiAKIAkvKiBFdmVuIG1vcmUgZGV2aWNlIGluZm8gaGVscHMgd2hlbiBkZXRlcm1pbmluZyB3aGljaCBrZXJuZWwgKi8KIAkvKiBwcm92aWRlZCB3aGljaCBzZXQgb2YgYmVuY2htYXJrcy4gKi8KLSNpZmRlZiBDT05GSUdfR0ZBUl9OQVBJCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJ1bm5pbmcgd2l0aCBOQVBJIGVuYWJsZWRcbiIsIGRldi0+bmFtZSk7Ci0jZWxzZQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIHdpdGggTkFQSSBkaXNhYmxlZFxuIiwgZGV2LT5uYW1lKTsKLSNlbmRpZgogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlZC8lZCBSWC9UWCBCRCByaW5nIHNpemVcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgcHJpdi0+cnhfcmluZ19zaXplLCBwcml2LT50eF9yaW5nX3NpemUpOwogCkBAIC0zOTMsNiArMzgyLDEwMyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGdmYXJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRlbXB2YWw7CisKKwlpbnQgbWFnaWNfcGFja2V0ID0gcHJpdi0+d29sX2VuICYmCisJCShwcml2LT5laW5mby0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQpOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CisJCXNwaW5fbG9jaygmcHJpdi0+cnhsb2NrKTsKKworCQlnZmFyX2hhbHRfbm9kaXNhYmxlKGRldik7CisKKwkJLyogRGlzYWJsZSBUeCwgYW5kIFJ4IGlmIHdha2Utb24tTEFOIGlzIGRpc2FibGVkLiAqLworCQl0ZW1wdmFsID0gZ2Zhcl9yZWFkKCZwcml2LT5yZWdzLT5tYWNjZmcxKTsKKworCQl0ZW1wdmFsICY9IH5NQUNDRkcxX1RYX0VOOworCisJCWlmICghbWFnaWNfcGFja2V0KQorCQkJdGVtcHZhbCAmPSB+TUFDQ0ZHMV9SWF9FTjsKKworCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5tYWNjZmcxLCB0ZW1wdmFsKTsKKworCQlzcGluX3VubG9jaygmcHJpdi0+cnhsb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfR0ZBUl9OQVBJCisJCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CisjZW5kaWYKKworCQlpZiAobWFnaWNfcGFja2V0KSB7CisJCQkvKiBFbmFibGUgaW50ZXJydXB0IG9uIE1hZ2ljIFBhY2tldCAqLworCQkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aW1hc2ssIElNQVNLX01BRyk7CisKKwkJCS8qIEVuYWJsZSBNYWdpYyBQYWNrZXQgbW9kZSAqLworCQkJdGVtcHZhbCA9IGdmYXJfcmVhZCgmcHJpdi0+cmVncy0+bWFjY2ZnMik7CisJCQl0ZW1wdmFsIHw9IE1BQ0NGRzJfTVBFTjsKKwkJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPm1hY2NmZzIsIHRlbXB2YWwpOworCQl9IGVsc2UgeworCQkJcGh5X3N0b3AocHJpdi0+cGh5ZGV2KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdmYXJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRlbXB2YWw7CisJaW50IG1hZ2ljX3BhY2tldCA9IHByaXYtPndvbF9lbiAmJgorCQkocHJpdi0+ZWluZm8tPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUKTsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFtYWdpY19wYWNrZXQgJiYgcHJpdi0+cGh5ZGV2KQorCQlwaHlfc3RhcnQocHJpdi0+cGh5ZGV2KTsKKworCS8qIERpc2FibGUgTWFnaWMgUGFja2V0IG1vZGUsIGluIGNhc2Ugc29tZXRoaW5nCisJICogZWxzZSB3b2tlIHVzIHVwLgorCSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmcHJpdi0+cnhsb2NrKTsKKworCXRlbXB2YWwgPSBnZmFyX3JlYWQoJnByaXYtPnJlZ3MtPm1hY2NmZzIpOworCXRlbXB2YWwgJj0gfk1BQ0NGRzJfTVBFTjsKKwlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5tYWNjZmcyLCB0ZW1wdmFsKTsKKworCWdmYXJfc3RhcnQoZGV2KTsKKworCXNwaW5fdW5sb2NrKCZwcml2LT5yeGxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCisjaWZkZWYgQ09ORklHX0dGQVJfTkFQSQorCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBnZmFyX3N1c3BlbmQgTlVMTAorI2RlZmluZSBnZmFyX3Jlc3VtZSBOVUxMCisjZW5kaWYKIAogLyogUmVhZHMgdGhlIGNvbnRyb2xsZXIncyByZWdpc3RlcnMgdG8gZGV0ZXJtaW5lIHdoYXQgaW50ZXJmYWNlCiAgKiBjb25uZWN0cyBpdCB0byB0aGUgUEhZLgpAQCAtNTQ5LDggKzYzNSw5IEBACiB9CiAKIAorI2lmZGVmIENPTkZJR19QTQogLyogSGFsdCB0aGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcXVldWVzICovCi12b2lkIGdmYXJfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgZ2Zhcl9oYWx0X25vZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBnZmFyIF9faW9tZW0gKnJlZ3MgPSBwcml2LT5yZWdzOwpAQCAtNTczLDYgKzY2MCwxNSBAQAogCQkJIChJRVZFTlRfR1JTQyB8IElFVkVOVF9HVFNDKSkpCiAJCQljcHVfcmVsYXgoKTsKIAl9Cit9CisjZW5kaWYKKworLyogSGFsdCB0aGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcXVldWVzICovCit2b2lkIGdmYXJfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBnZmFyIF9faW9tZW0gKnJlZ3MgPSBwcml2LT5yZWdzOworCXUzMiB0ZW1wdmFsOwogCiAJLyogRGlzYWJsZSBSeCBhbmQgVHggKi8KIAl0ZW1wdmFsID0gZ2Zhcl9yZWFkKCZyZWdzLT5tYWNjZmcxKTsKQEAgLTkyOCw3ICsxMDI0LDcgQEAKIHR4X2lycV9mYWlsOgogCWZyZWVfaXJxKHByaXYtPmludGVycnVwdEVycm9yLCBkZXYpOwogZXJyX2lycV9mYWlsOgotZXJyX3J4YWxsb2NfZmFpbDoJCitlcnJfcnhhbGxvY19mYWlsOgogcnhfc2tiX2ZhaWw6CiAJZnJlZV9za2JfcmVzb3VyY2VzKHByaXYpOwogdHhfc2tiX2ZhaWw6CkBAIC05NDUsMTQgKzEwNDEsMTAgQEAKIC8qIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4gKi8KIHN0YXRpYyBpbnQgZ2Zhcl9lbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSNpZmRlZiBDT05GSUdfR0ZBUl9OQVBJCiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0jZW5kaWYKIAlpbnQgZXJyOwogCi0jaWZkZWYgQ09ORklHX0dGQVJfTkFQSQogCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKLSNlbmRpZgogCiAJLyogSW5pdGlhbGl6ZSBhIGJ1bmNoIG9mIHJlZ2lzdGVycyAqLwogCWluaXRfcmVnaXN0ZXJzKGRldik7CkBAIC05NjIsMTcgKzEwNTQsMTMgQEAKIAllcnIgPSBpbml0X3BoeShkZXYpOwogCiAJaWYoZXJyKSB7Ci0jaWZkZWYgQ09ORklHX0dGQVJfTkFQSQogCQluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwotI2VuZGlmCiAJCXJldHVybiBlcnI7CiAJfQogCiAJZXJyID0gc3RhcnR1cF9nZmFyKGRldik7CiAJaWYgKGVycikgewotI2lmZGVmIENPTkZJR19HRkFSX05BUEkKIAkJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKLSNlbmRpZgogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMTEyOCw5ICsxMjE2LDcgQEAKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotI2lmZGVmIENPTkZJR19HRkFSX05BUEkKIAluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwotI2VuZGlmCiAKIAlzdG9wX2dmYXIoZGV2KTsKIApAQCAtMTI1OSw3ICsxMzQ1LDcgQEAKIAkJc3RhcnR1cF9nZmFyKGRldik7CiAJfQogCi0JbmV0aWZfc2NoZWR1bGUoZGV2KTsKKwluZXRpZl90eF9zY2hlZHVsZV9hbGwoZGV2KTsKIH0KIAogLyogSW50ZXJydXB0IEhhbmRsZXIgZm9yIFRyYW5zbWl0IGNvbXBsZXRlICovCkBAIC0xNDI3LDE0ICsxNTEzLDkgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSNpZmRlZiBDT05GSUdfR0ZBUl9OQVBJCiAJdTMyIHRlbXB2YWw7Ci0jZWxzZQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jZW5kaWYKIAogCS8qIHN1cHBvcnQgTkFQSSAqLwotI2lmZGVmIENPTkZJR19HRkFSX05BUEkKIAkvKiBDbGVhciBJRVZFTlQsIHNvIGludGVycnVwdHMgYXJlbid0IGNhbGxlZCBhZ2FpbgogCSAqIGJlY2F1c2Ugb2YgdGhlIHBhY2tldHMgdGhhdCBoYXZlIGFscmVhZHkgYXJyaXZlZCAqLwogCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmlldmVudCwgSUVWRU5UX1JUWF9NQVNLKTsKQEAgLTE0NTEsMzggKzE1MzIsMTAgQEAKIAkJCQlkZXYtPm5hbWUsIGdmYXJfcmVhZCgmcHJpdi0+cmVncy0+aWV2ZW50KSwKIAkJCQlnZmFyX3JlYWQoJnByaXYtPnJlZ3MtPmltYXNrKSk7CiAJfQotI2Vsc2UKLQkvKiBDbGVhciBJRVZFTlQsIHNvIHJ4IGludGVycnVwdCBpc24ndCBjYWxsZWQgYWdhaW4KLQkgKiBiZWNhdXNlIG9mIHRoaXMgaW50ZXJydXB0ICovCi0JZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aWV2ZW50LCBJRVZFTlRfUlhfTUFTSyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7Ci0JZ2Zhcl9jbGVhbl9yeF9yaW5nKGRldiwgcHJpdi0+cnhfcmluZ19zaXplKTsKLQotCS8qIElmIHdlIGFyZSBjb2FsZXNjaW5nIGludGVycnVwdHMsIHVwZGF0ZSB0aGUgdGltZXIgKi8KLQkvKiBPdGhlcndpc2UsIGNsZWFyIGl0ICovCi0JaWYgKGxpa2VseShwcml2LT5yeGNvYWxlc2NpbmcpKSB7Ci0JCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJ4aWMsIDApOwotCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5yeGljLAotCQkJICAgbWtfaWNfdmFsdWUocHJpdi0+cnhjb3VudCwgcHJpdi0+cnh0aW1lKSk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7Ci0jZW5kaWYKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZ2Zhcl9yeF92bGFuKHN0cnVjdCBza19idWZmICpza2IsCi0JCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycCwgdW5zaWduZWQgc2hvcnQgdmxjdGwpCi17Ci0jaWZkZWYgQ09ORklHX0dGQVJfTkFQSQotCXJldHVybiB2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCB2bGdycCwgdmxjdGwpOwotI2Vsc2UKLQlyZXR1cm4gdmxhbl9od2FjY2VsX3J4KHNrYiwgdmxncnAsIHZsY3RsKTsKLSNlbmRpZgotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2Zhcl9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnhmY2IgKmZjYikKIHsKIAkvKiBJZiB2YWxpZCBoZWFkZXJzIHdlcmUgZm91bmQsIGFuZCB2YWxpZCBzdW1zCkBAIC0xNTM5LDEwICsxNTkyLDExIEBACiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAKIAkJLyogU2VuZCB0aGUgcGFja2V0IHVwIHRoZSBzdGFjayAqLwotCQlpZiAodW5saWtlbHkocHJpdi0+dmxncnAgJiYgKGZjYi0+ZmxhZ3MgJiBSWEZDQl9WTE4pKSkKLQkJCXJldCA9IGdmYXJfcnhfdmxhbihza2IsIHByaXYtPnZsZ3JwLCBmY2ItPnZsY3RsKTsKLQkJZWxzZQotCQkJcmV0ID0gUkVDRUlWRShza2IpOworCQlpZiAodW5saWtlbHkocHJpdi0+dmxncnAgJiYgKGZjYi0+ZmxhZ3MgJiBSWEZDQl9WTE4pKSkgeworCQkJcmV0ID0gdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcHJpdi0+dmxncnAsCisJCQkJCQkgICAgICAgZmNiLT52bGN0bCk7CisJCX0gZWxzZQorCQkJcmV0ID0gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAogCQlpZiAoTkVUX1JYX0RST1AgPT0gcmV0KQogCQkJcHJpdi0+ZXh0cmFfc3RhdHMua2VybmVsX2Ryb3BwZWQrKzsKQEAgLTE2MjksNyArMTY4Myw2IEBACiAJcmV0dXJuIGhvd21hbnk7CiB9CiAKLSNpZmRlZiBDT05GSUdfR0ZBUl9OQVBJCiBzdGF0aWMgaW50IGdmYXJfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZ2Zhcl9wcml2YXRlLCBuYXBpKTsKQEAgLTE2NjQsNyArMTcxNyw2IEBACiAKIAlyZXR1cm4gaG93bWFueTsKIH0KLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIC8qCkBAIC0xNzg0LDcgKzE4MzYsNiBAQAogCQlpZiAoIXByaXYtPm9sZGxpbmspIHsKIAkJCW5ld19zdGF0ZSA9IDE7CiAJCQlwcml2LT5vbGRsaW5rID0gMTsKLQkJCW5ldGlmX3NjaGVkdWxlKGRldik7CiAJCX0KIAl9IGVsc2UgaWYgKHByaXYtPm9sZGxpbmspIHsKIAkJbmV3X3N0YXRlID0gMTsKQEAgLTE5NjksNyArMjAyMCwxMiBAQAogCXUzMiBldmVudHMgPSBnZmFyX3JlYWQoJnByaXYtPnJlZ3MtPmlldmVudCk7CiAKIAkvKiBDbGVhciBJRVZFTlQgKi8KLQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5pZXZlbnQsIElFVkVOVF9FUlJfTUFTSyk7CisJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aWV2ZW50LCBldmVudHMgJiBJRVZFTlRfRVJSX01BU0spOworCisJLyogTWFnaWMgUGFja2V0IGlzIG5vdCBhbiBlcnJvci4gKi8KKwlpZiAoKHByaXYtPmVpbmZvLT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX01BR0lDX1BBQ0tFVCkgJiYKKwkgICAgKGV2ZW50cyAmIElFVkVOVF9NQUcpKQorCQlldmVudHMgJj0gfklFVkVOVF9NQUc7CiAKIAkvKiBIbW0uLi4gKi8KIAlpZiAobmV0aWZfbXNnX3J4X2Vycihwcml2KSB8fCBuZXRpZl9tc2dfdHhfZXJyKHByaXYpKQpAQCAtMjAwMywxMSArMjA1OSw2IEBACiAKIAkJZ2Zhcl9yZWNlaXZlKGlycSwgZGV2X2lkKTsKIAotI2lmbmRlZiBDT05GSUdfR0ZBUl9OQVBJCi0JCS8qIENsZWFyIHRoZSBoYWx0IGJpdCBpbiBSU1RBVCAqLwotCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5yc3RhdCwgUlNUQVRfQ0xFQVJfUkhBTFQpOwotI2VuZGlmCi0KIAkJaWYgKG5ldGlmX21zZ19yeF9lcnIocHJpdikpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJ1c3kgZXJyb3IgKHJzdGF0OiAleClcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBnZmFyX3JlYWQoJnByaXYtPnJlZ3MtPnJzdGF0KSk7CkBAIC0yMDQyLDYgKzIwOTMsOCBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2Zhcl9kcml2ZXIgPSB7CiAJLnByb2JlID0gZ2Zhcl9wcm9iZSwKIAkucmVtb3ZlID0gZ2Zhcl9yZW1vdmUsCisJLnN1c3BlbmQgPSBnZmFyX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdmYXJfcmVzdW1lLAogCS5kcml2ZXIJPSB7CiAJCS5uYW1lID0gImZzbC1naWFuZmFyIiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggMjdmMzdjOC4uZDU5ZGY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtNzcsMTMgKzc3LDggQEAKIGV4dGVybiBjb25zdCBjaGFyIGdmYXJfZHJpdmVyX3ZlcnNpb25bXTsKIAogLyogVGhlc2UgbmVlZCB0byBiZSBwb3dlcnMgb2YgMiBmb3IgdGhpcyBkcml2ZXIgKi8KLSNpZmRlZiBDT05GSUdfR0ZBUl9OQVBJCiAjZGVmaW5lIERFRkFVTFRfVFhfUklOR19TSVpFCTI1NgogI2RlZmluZSBERUZBVUxUX1JYX1JJTkdfU0laRQkyNTYKLSNlbHNlCi0jZGVmaW5lIERFRkFVTFRfVFhfUklOR19TSVpFICAgIDY0Ci0jZGVmaW5lIERFRkFVTFRfUlhfUklOR19TSVpFICAgIDY0Ci0jZW5kaWYKIAogI2RlZmluZSBHRkFSX1JYX01BWF9SSU5HX1NJWkUgICAyNTYKICNkZWZpbmUgR0ZBUl9UWF9NQVhfUklOR19TSVpFICAgMjU2CkBAIC0xMjgsMTQgKzEyMyw4IEBACiAKICNkZWZpbmUgREVGQVVMVF9SWFRJTUUJMjEKIAotLyogTm9uIE5BUEkgQ2FzZSAqLwotI2lmbmRlZiBDT05GSUdfR0ZBUl9OQVBJCi0jZGVmaW5lIERFRkFVTFRfUlhfQ09BTEVTQ0UgMQotI2RlZmluZSBERUZBVUxUX1JYQ09VTlQJMTYKLSNlbHNlCiAjZGVmaW5lIERFRkFVTFRfUlhfQ09BTEVTQ0UgMAogI2RlZmluZSBERUZBVUxUX1JYQ09VTlQJMAotI2VuZGlmIC8qIENPTkZJR19HRkFSX05BUEkgKi8KIAogI2RlZmluZSBNSUlNQ0ZHX0lOSVRfVkFMVUUJMHgwMDAwMDAwNwogI2RlZmluZSBNSUlNQ0ZHX1JFU0VUICAgICAgICAgICAweDgwMDAwMDAwCkBAIC0xNjgsNiArMTU3LDcgQEAKICNkZWZpbmUgTUFDQ0ZHMl9HTUlJICAgICAgICAgICAgMHgwMDAwMDIwMAogI2RlZmluZSBNQUNDRkcyX0hVR0VGUkFNRQkweDAwMDAwMDIwCiAjZGVmaW5lIE1BQ0NGRzJfTEVOR1RIQ0hFQ0sJMHgwMDAwMDAxMAorI2RlZmluZSBNQUNDRkcyX01QRU4JCTB4MDAwMDAwMDgKIAogI2RlZmluZSBFQ05UUkxfSU5JVF9TRVRUSU5HUwkweDAwMDAxMDAwCiAjZGVmaW5lIEVDTlRSTF9UQklfTU9ERSAgICAgICAgIDB4MDAwMDAwMjAKQEAgLTI0MCw2ICsyMzAsNyBAQAogI2RlZmluZSBJRVZFTlRfQ1JMCQkweDAwMDIwMDAwCiAjZGVmaW5lIElFVkVOVF9YRlVOCQkweDAwMDEwMDAwCiAjZGVmaW5lIElFVkVOVF9SWEIwCQkweDAwMDA4MDAwCisjZGVmaW5lIElFVkVOVF9NQUcJCTB4MDAwMDA4MDAKICNkZWZpbmUgSUVWRU5UX0dSU0MJCTB4MDAwMDAxMDAKICNkZWZpbmUgSUVWRU5UX1JYRjAJCTB4MDAwMDAwODAKICNkZWZpbmUgSUVWRU5UX0ZJUgkJMHgwMDAwMDAwOApAQCAtMjUyLDcgKzI0Myw4IEBACiAjZGVmaW5lIElFVkVOVF9FUlJfTUFTSyAgICAgICAgIFwKIChJRVZFTlRfUlhDIHwgSUVWRU5UX0JTWSB8IElFVkVOVF9FQkVSUiB8IElFVkVOVF9NU1JPIHwgXAogIElFVkVOVF9CQUJUIHwgSUVWRU5UX1RYQyB8IElFVkVOVF9UWEUgfCBJRVZFTlRfTEMgXAotIHwgSUVWRU5UX0NSTCB8IElFVkVOVF9YRlVOIHwgSUVWRU5UX0RQRSB8IElFVkVOVF9QRVJSKQorIHwgSUVWRU5UX0NSTCB8IElFVkVOVF9YRlVOIHwgSUVWRU5UX0RQRSB8IElFVkVOVF9QRVJSIFwKKyB8IElFVkVOVF9NQUcpCiAKICNkZWZpbmUgSU1BU0tfSU5JVF9DTEVBUgkweDAwMDAwMDAwCiAjZGVmaW5lIElNQVNLX0JBQlIgICAgICAgICAgICAgIDB4ODAwMDAwMDAKQEAgLTI3MCw2ICsyNjIsNyBAQAogI2RlZmluZSBJTUFTS19DUkwJCTB4MDAwMjAwMDAKICNkZWZpbmUgSU1BU0tfWEZVTgkJMHgwMDAxMDAwMAogI2RlZmluZSBJTUFTS19SWEIwICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIElNQVNLX01BRwkJMHgwMDAwMDgwMAogI2RlZmluZSBJTUFTS19HVFNDICAgICAgICAgICAgICAweDAwMDAwMTAwCiAjZGVmaW5lIElNQVNLX1JYRkVOMAkJMHgwMDAwMDA4MAogI2RlZmluZSBJTUFTS19GSVIJCTB4MDAwMDAwMDgKQEAgLTczNywxMCArNzMwLDE0IEBACiAJdW5zaWduZWQgaW50IGZpZm9fc3RhcnZlOwogCXVuc2lnbmVkIGludCBmaWZvX3N0YXJ2ZV9vZmY7CiAKKwkvKiBCaXRmaWVsZCB1cGRhdGUgbG9jayAqLworCXNwaW5sb2NrX3QgYmZsb2NrOworCiAJdW5zaWduZWQgY2hhciB2bGFuX2VuYWJsZToxLAogCQlyeF9jc3VtX2VuYWJsZToxLAogCQlleHRlbmRlZF9oYXNoOjEsCi0JCWJkX3N0YXNoX2VuOjE7CisJCWJkX3N0YXNoX2VuOjEsCisJCXdvbF9lbjoxOyAvKiBXYWtlLW9uLUxBTiBlbmFibGVkICovCiAJdW5zaWduZWQgc2hvcnQgcGFkZGluZzsKIAogCXVuc2lnbmVkIGludCBpbnRlcnJ1cHRUcmFuc21pdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKaW5kZXggNjAwNzE0Ny4uZmI3ZDNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKQEAgLTQ3OSwxNCArNDc5LDEzIEBACiBzdGF0aWMgaW50IGdmYXJfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDMyX3QgZGF0YSkKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwogCiAJaWYgKCEocHJpdi0+ZWluZm8tPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAkJLyogSGFsdCBUWCBhbmQgUlgsIGFuZCBwcm9jZXNzIHRoZSBmcmFtZXMgd2hpY2gKIAkJICogaGF2ZSBhbHJlYWR5IGJlZW4gcmVjZWl2ZWQgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwpAQCAtNTAyLDcgKzUwMSw5IEBACiAJCXN0b3BfZ2ZhcihkZXYpOwogCX0KIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5iZmxvY2ssIGZsYWdzKTsKIAlwcml2LT5yeF9jc3VtX2VuYWJsZSA9IGRhdGE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+YmZsb2NrLCBmbGFncyk7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkKIAkJZXJyID0gc3RhcnR1cF9nZmFyKGRldik7CkBAIC01NjQsNiArNTY1LDM4IEBACiAJcHJpdi0+bXNnX2VuYWJsZSA9IGRhdGE7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB2b2lkIGdmYXJfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAocHJpdi0+ZWluZm8tPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUKSB7CisJCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9NQUdJQzsKKwkJd29sLT53b2xvcHRzID0gcHJpdi0+d29sX2VuID8gV0FLRV9NQUdJQyA6IDA7CisJfSBlbHNlIHsKKwkJd29sLT5zdXBwb3J0ZWQgPSB3b2wtPndvbG9wdHMgPSAwOworCX0KK30KKworc3RhdGljIGludCBnZmFyX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIShwcml2LT5laW5mby0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQpICYmCisJICAgIHdvbC0+d29sb3B0cyAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3b2wtPndvbG9wdHMgJiB+V0FLRV9NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+YmZsb2NrLCBmbGFncyk7CisJcHJpdi0+d29sX2VuID0gd29sLT53b2xvcHRzICYgV0FLRV9NQUdJQyA/IDEgOiAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJmbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGdmYXJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGdmYXJfZ3NldHRpbmdzLApAQCAtNTg1LDQgKzYxOCw4IEBACiAJLnNldF90eF9jc3VtID0gZ2Zhcl9zZXRfdHhfY3N1bSwKIAkuZ2V0X21zZ2xldmVsID0gZ2Zhcl9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCA9IGdmYXJfc2V0X21zZ2xldmVsLAorI2lmZGVmIENPTkZJR19QTQorCS5nZXRfd29sID0gZ2Zhcl9nZXRfd29sLAorCS5zZXRfd29sID0gZ2Zhcl9zZXRfd29sLAorI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCmluZGV4IGU1YzIzODAuLjMxOTk1MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYworKysgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKQEAgLTExNDAsMTEgKzExNDAsMTEgQEAKIAl9CiAJLyogRmlsbCBpbiB0aGUgUnggYnVmZmVycy4gIEhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmUgZ3JhY2VmdWxseS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoaG1wLT5yeF9idWZfc3opOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIGhtcC0+cnhfYnVmX3N6KTsKIAkJaG1wLT5yeF9za2J1ZmZbaV0gPSBza2I7CiAJCWlmIChza2IgPT0gTlVMTCkKIAkJCWJyZWFrOwotCQlza2ItPmRldiA9IGRldjsgICAgICAgICAvKiBNYXJrIGFzIGJlaW5nIHVzZWQgYnkgdGhpcyBkZXZpY2UuICovCisKIAkJc2tiX3Jlc2VydmUoc2tiLCAyKTsgLyogMTYgYnl0ZSBhbGlnbiB0aGUgSVAgaGVhZGVyLiAqLwogICAgICAgICAgICAgICAgIGhtcC0+cnhfcmluZ1tpXS5hZGRyID0gY3B1X3RvX2xlWFgocGNpX21hcF9zaW5nbGUoaG1wLT5wY2lfZGV2LAogCQkJc2tiLT5kYXRhLCBobXAtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKSk7CkBAIC0xMTc4LDE0ICsxMTc4LDYgQEAKIAlobXAtPmN1cl9yeCA9IGhtcC0+Y3VyX3R4ID0gMDsKIAlobXAtPmRpcnR5X3J4ID0gaG1wLT5kaXJ0eV90eCA9IDA7CiAKLSNpZiAwCi0JLyogVGhpcyBpcyB3cm9uZy4gIEknbSBub3Qgc3VyZSB3aGF0IHRoZSBvcmlnaW5hbCBwbGFuIHdhcywgYnV0IHRoaXMKLQkgKiBpcyB3cm9uZy4gIEFuIE1UVSBvZiAxIGdldHMgeW91IGEgYnVmZmVyIG9mIDE1MzYsIHdoaWxlIGFuIE1UVQotCSAqIG9mIDE1MDEgZ2V0cyBhIGJ1ZmZlciBvZiAxNTMzPyAtS0RVCi0JICovCi0JaG1wLT5yeF9idWZfc3ogPSAoZGV2LT5tdHUgPD0gMTUwMCA/IFBLVF9CVUZfU1ogOiBkZXYtPm10dSArIDMyKTsKLSNlbmRpZgotCS8qIE15IGF0dGVtcHQgYXQgYSByZWFzb25hYmxlIGNvcnJlY3Rpb24gKi8KIAkvKiArMjYgZ2V0cyB0aGUgbWF4aW11bSBldGhlcm5ldCBlbmNhcHN1bGF0aW9uLCArNyAmIH43IGJlY2F1c2UgdGhlCiAJICogY2FyZCBuZWVkcyByb29tIHRvIGRvIDggYnl0ZSBhbGlnbm1lbnQsICsyIHNvIHdlIGNhbiByZXNlcnZlCiAJICogdGhlIGZpcnN0IDIgYnl0ZXMsIGFuZCArMTYgZ2V0cyByb29tIGZvciB0aGUgc3RhdHVzIHdvcmQgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IDlkNTcyMTIuLjBmNTAxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwpAQCAtOTksOSArOTksNiBAQAogCXVuc2lnbmVkIGludAkJcnhfY291bnQ7CiAJdW5zaWduZWQgaW50CQlyeF9jb3VudF9jb29rZWQ7CiAKLQkvKiA2cGFjayBpbnRlcmZhY2Ugc3RhdGlzdGljcy4gKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQogCWludAkJCW10dTsJCS8qIE91ciBtdHUgKHRvIHNwb3QgY2hhbmdlcyEpICovCiAJaW50CQkJYnVmZnNpemU7ICAgICAgIC8qIE1heCBidWZmZXJzIHNpemVzICovCiAKQEAgLTIzNyw3ICsyMzQsNyBAQAogCXJldHVybjsKIAogb3V0X2Ryb3A6Ci0Jc3AtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwlzcC0+ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJbmV0aWZfc3RhcnRfcXVldWUoc3AtPmRldik7CiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcyAtIGRyb3BwZWQuXG4iLCBzcC0+ZGV2LT5uYW1lLCBtc2cpOwpAQCAtMjUyLDcgKzI0OSw3IEBACiAJc3Bpbl9sb2NrX2JoKCZzcC0+bG9jayk7CiAJLyogV2Ugd2VyZSBub3QgYnVzeSwgc28gd2UgYXJlIG5vdy4uLiA6LSkgKi8KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0Jc3AtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJc3BfZW5jYXBzKHNwLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAlzcGluX3VubG9ja19iaCgmc3AtPmxvY2spOwogCkBAIC0yOTgsMTggKzI5NSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzaXhwYWNrICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZzcC0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgc3Bfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCiB7CiAJc3RydWN0IHNvY2thZGRyX2F4MjUgKnNhID0gYWRkcjsKIAogCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKKwluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgJnNhLT5zYXgyNV9jYWxsLCBBWDI1X0FERFJfTEVOKTsKKwluZXRpZl9hZGRyX3VubG9jayhkZXYpOwogCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0zMzgsNyArMzMxLDYgQEAKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CiAJZGV2LT5zdG9wCQk9IHNwX2Nsb3NlOwogCi0JZGV2LT5nZXRfc3RhdHMJICAgICAgICA9IHNwX2dldF9zdGF0czsKIAlkZXYtPnNldF9tYWNfYWRkcmVzcyAgICA9IHNwX3NldF9tYWNfYWRkcmVzczsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IEFYMjVfTUFYX0hFQURFUl9MRU47CiAJZGV2LT5oZWFkZXJfb3BzIAk9ICZzcF9oZWFkZXJfb3BzOwpAQCAtMzcwLDcgKzM2Miw3IEBACiAKIAljb3VudCA9IHNwLT5yY291bnQgKyAxOwogCi0Jc3AtPnN0YXRzLnJ4X2J5dGVzICs9IGNvdW50OworCXNwLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNvdW50OwogCiAJaWYgKChza2IgPSBkZXZfYWxsb2Nfc2tiKGNvdW50KSkgPT0gTlVMTCkKIAkJZ290byBvdXRfbWVtOwpAQCAtMzgyLDEyICszNzQsMTIgQEAKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgc3AtPmRldik7CiAJbmV0aWZfcngoc2tiKTsKIAlzcC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQlzcC0+c3RhdHMucnhfcGFja2V0cysrOworCXNwLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXJldHVybjsKIAogb3V0X21lbToKLQlzcC0+c3RhdHMucnhfZHJvcHBlZCsrOworCXNwLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIH0KIAogCkBAIC00MzYsNyArNDI4LDcgQEAKIAlpZiAoc3AtPnhsZWZ0IDw9IDApICB7CiAJCS8qIE5vdyBzZXJpYWwgYnVmZmVyIGlzIGFsbW9zdCBmcmVlICYgd2UgY2FuIHN0YXJ0CiAJCSAqIHRyYW5zbWlzc2lvbiBvZiBhbm90aGVyIHBhY2tldCAqLwotCQlzcC0+c3RhdHMudHhfcGFja2V0cysrOworCQlzcC0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCWNsZWFyX2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmdHR5LT5mbGFncyk7CiAJCXNwLT50eF9lbmFibGUgPSAwOwogCQluZXRpZl93YWtlX3F1ZXVlKHNwLT5kZXYpOwpAQCAtNDg0LDcgKzQ3Niw3IEBACiAJCWNvdW50LS07CiAJCWlmIChmcCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNJWFBGX0VSUk9SLCAmc3AtPmZsYWdzKSkKLQkJCQlzcC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJc3AtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQljb250aW51ZTsKIAkJfQogCX0KQEAgLTc4Myw3ICs3NzUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjIHNwX2xkaXNjID0geworc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNwX2xkaXNjID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubWFnaWMJCT0gVFRZX0xESVNDX01BR0lDLAogCS5uYW1lCQk9ICI2cGFjayIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwppbmRleCA1ZjRiNGM2Li41OGY0YjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKQEAgLTEyMyw2ICsxMjMsMjAgQEAKICAqIG9mZiBpbnRvIGEgc2VwYXJhdGUgY2xhc3Mgc2luY2UgdGhleSBhbHdheXMgbmVzdC4KICAqLwogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBicHFfbmV0ZGV2X3htaXRfbG9ja19rZXk7CitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJwcV9uZXRkZXZfYWRkcl9sb2NrX2tleTsKKworc3RhdGljIHZvaWQgYnBxX3NldF9sb2NrZGVwX2NsYXNzX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSwKKwkJCQkgICAgICB2b2lkICpfdW51c2VkKQoreworCWxvY2tkZXBfc2V0X2NsYXNzKCZ0eHEtPl94bWl0X2xvY2ssICZicHFfbmV0ZGV2X3htaXRfbG9ja19rZXkpOworfQorCitzdGF0aWMgdm9pZCBicHFfc2V0X2xvY2tkZXBfY2xhc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlsb2NrZGVwX3NldF9jbGFzcygmZGV2LT5hZGRyX2xpc3RfbG9jaywgJmJwcV9uZXRkZXZfYWRkcl9sb2NrX2tleSk7CisJbmV0ZGV2X2Zvcl9lYWNoX3R4X3F1ZXVlKGRldiwgYnBxX3NldF9sb2NrZGVwX2NsYXNzX29uZSwgTlVMTCk7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC01MjMsNyArNTM3LDcgQEAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobmRldik7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKLQlsb2NrZGVwX3NldF9jbGFzcygmbmRldi0+X3htaXRfbG9jaywgJmJwcV9uZXRkZXZfeG1pdF9sb2NrX2tleSk7CisJYnBxX3NldF9sb2NrZGVwX2NsYXNzKG5kZXYpOwogCiAJLyogTGlzdCBwcm90ZWN0ZWQgYnkgUlROTCAqLwogCWxpc3RfYWRkX3JjdSgmYnBxLT5icHFfbGlzdCwgJmJwcV9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwppbmRleCBhZTk2MjlmLi5jMjU4YTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCkBAIC04OCw2ICs4OCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2NyY19jY2l0dCh1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBsZW4pCiB7CiAgCXVuc2lnbmVkIGludCBjcmMgPSBjcmNfY2NpdHQoMHhmZmZmLCBidWZmZXIsIGxlbikgXiAweGZmZmY7CisJYnVmZmVyICs9IGxlbjsKIAkqYnVmZmVyKysgPSBjcmM7CiAJKmJ1ZmZlcisrID0gY3JjID4+IDg7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwppbmRleCA2NTE2NjAzLi4zMjQ5ZGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKQEAgLTM1Niw3ICszNTYsOSBAQAogCXN0cnVjdCBzb2NrYWRkcl9heDI1ICpzYSA9IGFkZHI7CiAKIAluZXRpZl90eF9sb2NrX2JoKGRldik7CisJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZzYS0+c2F4MjVfY2FsbCwgQVgyNV9BRERSX0xFTik7CisJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAogCXJldHVybiAwOwpAQCAtOTY5LDcgKzk3MSw3IEBACiAJbWtpc3NfcHV0KGF4KTsKIH0KIAotc3RhdGljIHN0cnVjdCB0dHlfbGRpc2MgYXhfbGRpc2MgPSB7CitzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgYXhfbGRpc2MgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5tYWdpYwkJPSBUVFlfTERJU0NfTUFHSUMsCiAJLm5hbWUJCT0gIm1raXNzIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwLXBsdXMuYyBiL2RyaXZlcnMvbmV0L2hwLXBsdXMuYwppbmRleCBjMmM0ZjQ5Li44MjM5OTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocC1wbHVzLmMKKysrIGIvZHJpdmVycy9uZXQvaHAtcGx1cy5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAl9CiAKIAlvdXR3KFBlcmZfUGFnZSwgaW9hZGRyICsgSFBfUEFHSU5HKTsKLQlOUzgzOTBfaW5pdChkZXYsIDApOworCU5TODM5MHBfaW5pdChkZXYsIDApOwogCS8qIExlYXZlIHRoZSA4MzkwIGFuZCBIUCBjaGlwIHJlc2V0LiAqLwogCW91dHcoaW53KGlvYWRkciArIEhQUF9PUFRJT04pICYgfkVuYWJsZUlSUSwgaW9hZGRyICsgSFBQX09QVElPTik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwLmMgYi9kcml2ZXJzL25ldC9ocC5jCmluZGV4IGM2NDlhODAuLjBhOGM2NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwLmMKKysrIGIvZHJpdmVycy9uZXQvaHAuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAjaWZuZGVmIE1PRFVMRQogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgaHBfcHJvYmUoaW50IHVuaXQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2VpX25ldGRldigpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19laXBfbmV0ZGV2KCk7CiAJaW50IGVycjsKIAogCWlmICghZGV2KQpAQCAtMTc2LDcgKzE3Niw3IEBACiAJCQkJb3V0Yl9wKGlycW1hcFtpcnFdIHwgSFBfUlVOLCBpb2FkZHIgKyBIUF9DT05GSUdVUkUpOwogCQkJCW91dGJfcCggMHgwMCB8IEhQX1JVTiwgaW9hZGRyICsgSFBfQ09ORklHVVJFKTsKIAkJCQlpZiAoaXJxID09IHByb2JlX2lycV9vZmYoY29va2llKQkJIC8qIEl0J3MgYSBnb29kIElSUSBsaW5lISAqLwotCQkJCQkmJiByZXF1ZXN0X2lycSAoaXJxLCBlaV9pbnRlcnJ1cHQsIDAsIERSVl9OQU1FLCBkZXYpID09IDApIHsKKwkJCQkJJiYgcmVxdWVzdF9pcnEgKGlycSwgZWlwX2ludGVycnVwdCwgMCwgRFJWX05BTUUsIGRldikgPT0gMCkgewogCQkJCQlwcmludGsoIiBzZWxlY3RpbmcgSVJRICVkLlxuIiwgaXJxKTsKIAkJCQkJZGV2LT5pcnEgPSAqaXJxcDsKIAkJCQkJYnJlYWs7CkBAIC0xOTEsNyArMTkxLDcgQEAKIAl9IGVsc2UgewogCQlpZiAoZGV2LT5pcnEgPT0gMikKIAkJCWRldi0+aXJxID0gOTsKLQkJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZWlfaW50ZXJydXB0LCAwLCBEUlZfTkFNRSwgZGV2KSkpIHsKKwkJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZWlwX2ludGVycnVwdCwgMCwgRFJWX05BTUUsIGRldikpKSB7CiAJCQlwcmludGsgKCIgdW5hYmxlIHRvIGdldCBJUlEgJWQuXG4iLCBkZXYtPmlycSk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjAyLDcgKzIwMiw3IEBACiAJZGV2LT5vcGVuID0gJmhwX29wZW47CiAJZGV2LT5zdG9wID0gJmhwX2Nsb3NlOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaV9wb2xsOworCWRldi0+cG9sbF9jb250cm9sbGVyID0gZWlwX3BvbGw7CiAjZW5kaWYKIAogCWVpX3N0YXR1cy5uYW1lID0gbmFtZTsKQEAgLTIzMSwxNCArMjMxLDE0IEBACiBzdGF0aWMgaW50CiBocF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZWlfb3BlbihkZXYpOworCWVpcF9vcGVuKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKIGhwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZWlfY2xvc2UoZGV2KTsKKwllaXBfY2xvc2UoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzg5LDcgKzM4OSw3IEBACiBocF9pbml0X2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaXJxID0gZGV2LT5pcnE7Ci0JTlM4MzkwX2luaXQoZGV2LCAwKTsKKwlOUzgzOTBwX2luaXQoZGV2LCAwKTsKIAlvdXRiX3AoaXJxbWFwW2lycSYweDBmXSB8IEhQX1JVTiwKIAkJICAgZGV2LT5iYXNlX2FkZHIgLSBOSUNfT0ZGU0VUICsgSFBfQ09ORklHVVJFKTsKIAlyZXR1cm47CkBAIC00MjEsNyArNDIxLDcgQEAKIAkJCWlmICh0aGlzX2RldiAhPSAwKSBicmVhazsgLyogb25seSBhdXRvcHJvYmUgMXN0IG9uZSAqLwogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJocC5jOiBQcmVzZW50bHkgYXV0b3Byb2JpbmcgKG5vdCByZWNvbW1lbmRlZCkgZm9yIGEgc2luZ2xlIGNhcmQuXG4iKTsKIAkJfQotCQlkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKwkJZGV2ID0gYWxsb2NfZWlwX25ldGRldigpOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwogCQlkZXYtPmlycSA9IGlycVt0aGlzX2Rldl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocGxhbmNlLmMgYi9kcml2ZXJzL25ldC9ocGxhbmNlLmMKaW5kZXggYmU2ZTViYy4uMmU4MDI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHBsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2hwbGFuY2UuYwpAQCAtMjIwLDEyICsyMjAsMTIgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBfX2luaXQgaHBsYW5jZV9pbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaHBsYW5jZV9pbml0X21vZHVsZSh2b2lkKQogewogCXJldHVybiBkaW9fcmVnaXN0ZXJfZHJpdmVyKCZocGxhbmNlX2RyaXZlcik7CiB9CiAKLXZvaWQgX19leGl0IGhwbGFuY2VfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBocGxhbmNlX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAgICAgICAgIGRpb191bnJlZ2lzdGVyX2RyaXZlcigmaHBsYW5jZV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MWM0ODAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLWNvbmZpZyBJQk1fRU1BQwotCXRyaXN0YXRlICJQb3dlclBDIDR4eCBvbi1jaGlwIEV0aGVybmV0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiA0eHggJiYgIVBQQ19NRVJHRQotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBQb3dlclBDIDR4eCBFTUFDIGZhbWlseSBvZiBvbi1jaGlwCi0gICAgICAgICAgRXRoZXJuZXQgY29udHJvbGxlcnMuCi0KLWNvbmZpZyBJQk1fRU1BQ19SWEIKLQlpbnQgIk51bWJlciBvZiByZWNlaXZlIGJ1ZmZlcnMiCi0JZGVwZW5kcyBvbiBJQk1fRU1BQwotCWRlZmF1bHQgIjEyOCIKLQotY29uZmlnIElCTV9FTUFDX1RYQgotCWludCAiTnVtYmVyIG9mIHRyYW5zbWl0IGJ1ZmZlcnMiCi0JZGVwZW5kcyBvbiBJQk1fRU1BQwotCWRlZmF1bHQgIjY0IgotCi1jb25maWcgSUJNX0VNQUNfUE9MTF9XRUlHSFQKLQlpbnQgIk1BTCBOQVBJIHBvbGxpbmcgd2VpZ2h0IgotCWRlcGVuZHMgb24gSUJNX0VNQUMKLQlkZWZhdWx0ICIzMiIKLQotY29uZmlnIElCTV9FTUFDX1JYX0NPUFlfVEhSRVNIT0xECi0JaW50ICJSWCBza2IgY29weSB0aHJlc2hvbGQgKGJ5dGVzKSIKLQlkZXBlbmRzIG9uIElCTV9FTUFDCi0JZGVmYXVsdCAiMjU2IgotCi1jb25maWcgSUJNX0VNQUNfUlhfU0tCX0hFQURST09NCi0JaW50ICJBZGRpdGlvbmFsIFJYIHNrYiBoZWFkcm9vbSAoYnl0ZXMpIgotCWRlcGVuZHMgb24gSUJNX0VNQUMKLQlkZWZhdWx0ICIwIgotCWhlbHAKLQkgIEFkZGl0aW9uYWwgcmVjZWl2ZSBza2IgaGVhZHJvb20uIE5vdGUsIHRoYXQgZHJpdmVyCi0JICB3aWxsIGFsd2F5cyByZXNlcnZlIGF0IGxlYXN0IDIgYnl0ZXMgdG8gbWFrZSBJUCBoZWFkZXIKLQkgIGFsaWduZWQsIHNvIHVzdWFsbHkgdGhlcmUgaXMgbm8gbmVlZCB0byBhZGQgYW55IGFkZGl0aW9uYWwKLQkgIGhlYWRyb29tLgotCi0JICBJZiB1bnN1cmUsIHNldCB0byAwLgotCi1jb25maWcgSUJNX0VNQUNfUEhZX1JYX0NMS19GSVgKLQlib29sICJQSFkgUnggY2xvY2sgd29ya2Fyb3VuZCIKLQlkZXBlbmRzIG9uIElCTV9FTUFDICYmICg0MDVFUCB8fCA0NDBHWCB8fCA0NDBFUCB8fCA0NDBHUikKLQloZWxwCi0JICBFbmFibGUgdGhpcyBpZiBFTUFDIGF0dGFjaGVkIHRvIGEgUEhZIHdoaWNoIGRvZXNuJ3QgZ2VuZXJhdGUKLQkgIFJYIGNsb2NrIGlmIHRoZXJlIGlzIG5vIGxpbmssIGlmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSB3aWxsCi0JICBzZWUgIlRYIGRpc2FibGUgdGltZW91dCIgb3IgIlJYIGRpc2FibGUgdGltZW91dCIgaW4gdGhlIHN5c3RlbQotCSAgbG9nLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgSUJNX0VNQUNfREVCVUcKLQlib29sICJEZWJ1Z2dpbmciCi0JZGVwZW5kcyBvbiBJQk1fRU1BQwotCWRlZmF1bHQgbgotCi1jb25maWcgSUJNX0VNQUNfWk1JSQotCWJvb2wKLQlkZXBlbmRzIG9uIElCTV9FTUFDICYmIChOUDQwNUggfHwgTlA0MDVMIHx8IDQ0eCkKLQlkZWZhdWx0IHkKLQotY29uZmlnIElCTV9FTUFDX1JHTUlJCi0JYm9vbAotCWRlcGVuZHMgb24gSUJNX0VNQUMgJiYgNDQwR1gKLQlkZWZhdWx0IHkKLQotY29uZmlnIElCTV9FTUFDX1RBSAotCWJvb2wKLQlkZXBlbmRzIG9uIElCTV9FTUFDICYmIDQ0MEdYCi0JZGVmYXVsdCB5Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5OGRkZjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgUG93ZXJQQyA0eHggb24tY2hpcCBldGhlcm5ldCBkcml2ZXIKLSMKLQotb2JqLSQoQ09ORklHX0lCTV9FTUFDKSArPSBpYm1fZW1hYy5vCi0KLWlibV9lbWFjLW9ianMgOj0gaWJtX2VtYWNfbWFsLm8gaWJtX2VtYWNfY29yZS5vIGlibV9lbWFjX3BoeS5vIAotaWJtX2VtYWMtJChDT05GSUdfSUJNX0VNQUNfWk1JSSkgKz0gaWJtX2VtYWNfem1paS5vCi1pYm1fZW1hYy0kKENPTkZJR19JQk1fRU1BQ19SR01JSSkgKz0gaWJtX2VtYWNfcmdtaWkubwotaWJtX2VtYWMtJChDT05GSUdfSUJNX0VNQUNfVEFIKSArPSBpYm1fZW1hY190YWgubwotaWJtX2VtYWMtJChDT05GSUdfSUJNX0VNQUNfREVCVUcpICs9IGlibV9lbWFjX2RlYnVnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjLmggYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2VkMjJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjLmgKLSAqCi0gKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgUG93ZXJQQyA0eHggb24tY2hpcCBldGhlcm5ldCBjb250b2xsZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgWnVsdHlzIFRlY2hub2xvZ2llcy4KLSAqIEV1Z2VuZSBTdXJvdmVnaW4gPGV1Z2VuZS5zdXJvdmVnaW5AenVsdHlzLmNvbT4gb3IgPGVic0BlYnNob21lLm5ldD4KLSAqCi0gKiBCYXNlZCBvbiBvcmlnaW5hbCB3b3JrIGJ5Ci0gKiAgICAgIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKiAgICAgIEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotICogCUNvcHlyaWdodCAyMDAyLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX19JQk1fRU1BQ19IXwotI2RlZmluZSBfX0lCTV9FTUFDX0hfCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKiBUaGlzIGlzIGEgc2ltcGxlIGNoZWNrIHRvIHByZXZlbnQgdXNlIG9mIHRoaXMgZHJpdmVyIG9uIG5vbi10ZXN0ZWQgU29DcyAqLwotI2lmICFkZWZpbmVkKENPTkZJR180MDVHUCkgJiYgIWRlZmluZWQoQ09ORklHXzQwNUdQUikgJiYgIWRlZmluZWQoQ09ORklHXzQwNUVQKSAmJiBcCi0gICAgIWRlZmluZWQoQ09ORklHXzQ0MEdQKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwR1gpICYmICFkZWZpbmVkKENPTkZJR180NDBTUCkgJiYgXAotICAgICFkZWZpbmVkKENPTkZJR180NDBFUCkgJiYgIWRlZmluZWQoQ09ORklHX05QNDA1SCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MFNQRSkgJiYgXAotICAgICFkZWZpbmVkKENPTkZJR180NDBHUikKLSNlcnJvcgkiVW5rbm93biBTb0MuIFBsZWFzZSwgY2hlY2sgY2hpcCB1c2VyIG1hbnVhbCBhbmQgbWFrZSBzdXJlIEVNQUMgZGVmaW5lcyBhcmUgT0siCi0jZW5kaWYKLQotLyogRU1BQyByZWdpc3RlcnMgCQlXcml0ZSBBY2Nlc3MgcnVsZXMgKi8KLXN0cnVjdCBlbWFjX3JlZ3MgewotCXUzMiBtcjA7CQkvKiBzcGVjaWFsIAkqLwotCXUzMiBtcjE7CQkvKiBSZXNldCAJKi8KLQl1MzIgdG1yMDsJCS8qIHNwZWNpYWwgCSovCi0JdTMyIHRtcjE7CQkvKiBzcGVjaWFsIAkqLwotCXUzMiBybXI7CQkvKiBSZXNldCAJKi8KLQl1MzIgaXNyOwkJLyogQWx3YXlzIAkqLwotCXUzMiBpc2VyOwkJLyogUmVzZXQgCSovCi0JdTMyIGlhaHI7CQkvKiBSZXNldCwgUiwgVCAJKi8KLQl1MzIgaWFscjsJCS8qIFJlc2V0LCBSLCBUIAkqLwotCXUzMiB2dHBpZDsJCS8qIFJlc2V0LCBSLCBUIAkqLwotCXUzMiB2dGNpOwkJLyogUmVzZXQsIFIsIFQgCSovCi0JdTMyIHB0cjsJCS8qIFJlc2V0LCAgICBUIAkqLwotCXUzMiBpYWh0MTsJCS8qIFJlc2V0LCBSCSovCi0JdTMyIGlhaHQyOwkJLyogUmVzZXQsIFIJKi8KLQl1MzIgaWFodDM7CQkvKiBSZXNldCwgUgkqLwotCXUzMiBpYWh0NDsJCS8qIFJlc2V0LCBSCSovCi0JdTMyIGdhaHQxOwkJLyogUmVzZXQsIFIJKi8KLQl1MzIgZ2FodDI7CQkvKiBSZXNldCwgUgkqLwotCXUzMiBnYWh0MzsJCS8qIFJlc2V0LCBSCSovCi0JdTMyIGdhaHQ0OwkJLyogUmVzZXQsIFIJKi8KLQl1MzIgbHNhaDsKLQl1MzIgbHNhbDsKLQl1MzIgaXBndnI7CQkvKiBSZXNldCwgICAgVCAJKi8KLQl1MzIgc3RhY3I7CQkvKiBzcGVjaWFsIAkqLwotCXUzMiB0cnRyOwkJLyogc3BlY2lhbCAJKi8KLQl1MzIgcndtcjsJCS8qIFJlc2V0IAkqLwotCXUzMiBvY3R4OwotCXUzMiBvY3J4OwotCXUzMiBpcGNyOwotfTsKLQotI2lmICFkZWZpbmVkKENPTkZJR19JQk1fRU1BQzQpCi0jZGVmaW5lIEVNQUNfRVRIVE9PTF9SRUdTX1ZFUgkJMAotI2RlZmluZSBFTUFDX0VUSFRPT0xfUkVHU19TSVpFCQkoc2l6ZW9mKHN0cnVjdCBlbWFjX3JlZ3MpIC0gc2l6ZW9mKHUzMikpCi0jZWxzZQotI2RlZmluZSBFTUFDX0VUSFRPT0xfUkVHU19WRVIJCTEKLSNkZWZpbmUgRU1BQ19FVEhUT09MX1JFR1NfU0laRQkJc2l6ZW9mKHN0cnVjdCBlbWFjX3JlZ3MpCi0jZW5kaWYKLQotLyogRU1BQ3hfTVIwICovCi0jZGVmaW5lIEVNQUNfTVIwX1JYSQkJCTB4ODAwMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjBfVFhJCQkJMHg0MDAwMDAwMAotI2RlZmluZSBFTUFDX01SMF9TUlNUCQkJMHgyMDAwMDAwMAotI2RlZmluZSBFTUFDX01SMF9UWEUJCQkweDEwMDAwMDAwCi0jZGVmaW5lIEVNQUNfTVIwX1JYRQkJCTB4MDgwMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjBfV0tFCQkJMHgwNDAwMDAwMAotCi0vKiBFTUFDeF9NUjEgKi8KLSNkZWZpbmUgRU1BQ19NUjFfRkRFCQkJMHg4MDAwMDAwMAotI2RlZmluZSBFTUFDX01SMV9JTEUJCQkweDQwMDAwMDAwCi0jZGVmaW5lIEVNQUNfTVIxX1ZMRQkJCTB4MjAwMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfRUlGQwkJCTB4MTAwMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfQVBQCQkJMHgwODAwMDAwMAotI2RlZmluZSBFTUFDX01SMV9JU1QJCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgRU1BQ19NUjFfTUZfTUFTSwkJMHgwMGMwMDAwMAotI2RlZmluZSBFTUFDX01SMV9NRl8xMAkJCTB4MDAwMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfTUZfMTAwCQkJMHgwMDQwMDAwMAotI2lmICFkZWZpbmVkKENPTkZJR19JQk1fRU1BQzQpCi0jZGVmaW5lIEVNQUNfTVIxX01GXzEwMDAJCTB4MDAwMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfTUZfMTAwMEdQQ1MJCTB4MDAwMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfTUZfSVBQQShpZCkJCTB4MDAwMDAwMDAKLSNlbHNlCi0jZGVmaW5lIEVNQUNfTVIxX01GXzEwMDAJCTB4MDA4MDAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfTUZfMTAwMEdQQ1MJCTB4MDBjMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfTUZfSVBQQShpZCkJCSgoKGlkKSAmIDB4MWYpIDw8IDYpCi0jZW5kaWYKLQotI2RlZmluZSBFTUFDX1RYX0ZJRk9fU0laRQkJMjA0OAotCi0jaWYgIWRlZmluZWQoQ09ORklHX0lCTV9FTUFDNCkKLSNkZWZpbmUgRU1BQ19NUjFfUkZTXzRLCQkJMHgwMDMwMDAwMAotI2RlZmluZSBFTUFDX01SMV9SRlNfMTZLCQkweDAwMDAwMDAwCi0jZGVmaW5lIEVNQUNfUlhfRklGT19TSVpFKGdpZ2UpCQk0MDk2Ci0jZGVmaW5lIEVNQUNfTVIxX1RGU18ySwkJCTB4MDAwODAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfVFIwX01VTFQJCTB4MDAwMDgwMDAKLSNkZWZpbmUgRU1BQ19NUjFfSlBTTQkJCTB4MDAwMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfTVdTV18wMDEJCTB4MDAwMDAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfQkFTRShvcGIpCQkoRU1BQ19NUjFfVEZTXzJLIHwgRU1BQ19NUjFfVFIwX01VTFQpCi0jZWxzZQotI2RlZmluZSBFTUFDX01SMV9SRlNfNEsJCQkweDAwMTgwMDAwCi0jZGVmaW5lIEVNQUNfTVIxX1JGU18xNksJCTB4MDAyODAwMDAKLSNkZWZpbmUgRU1BQ19SWF9GSUZPX1NJWkUoZ2lnZSkJCSgoZ2lnZSkgPyAxNjM4NCA6IDQwOTYpCi0jZGVmaW5lIEVNQUNfTVIxX1RGU18ySwkJCTB4MDAwMjAwMDAKLSNkZWZpbmUgRU1BQ19NUjFfVFIJCQkweDAwMDA4MDAwCi0jZGVmaW5lIEVNQUNfTVIxX01XU1dfMDAxCQkweDAwMDAxMDAwCi0jZGVmaW5lIEVNQUNfTVIxX0pQU00JCQkweDAwMDAwODAwCi0jZGVmaW5lIEVNQUNfTVIxX09CQ0lfTUFTSwkJMHgwMDAwMDAzOAotI2RlZmluZSBFTUFDX01SMV9PQkNJXzUwCQkweDAwMDAwMDAwCi0jZGVmaW5lIEVNQUNfTVIxX09CQ0lfNjYJCTB4MDAwMDAwMDgKLSNkZWZpbmUgRU1BQ19NUjFfT0JDSV84MwkJMHgwMDAwMDAxMAotI2RlZmluZSBFTUFDX01SMV9PQkNJXzEwMAkJMHgwMDAwMDAxOAotI2RlZmluZSBFTUFDX01SMV9PQkNJXzEwMFAJCTB4MDAwMDAwMjAKLSNkZWZpbmUgRU1BQ19NUjFfT0JDSShmcmVxKQkJKChmcmVxKSA8PSA1MCAgPyBFTUFDX01SMV9PQkNJXzUwIDogXAotCQkJCQkgKGZyZXEpIDw9IDY2ICA/IEVNQUNfTVIxX09CQ0lfNjYgOiBcCi0JCQkJCSAoZnJlcSkgPD0gODMgID8gRU1BQ19NUjFfT0JDSV84MyA6IFwKLQkJCQkJIChmcmVxKSA8PSAxMDAgPyBFTUFDX01SMV9PQkNJXzEwMCA6IEVNQUNfTVIxX09CQ0lfMTAwUCkKLSNkZWZpbmUgRU1BQ19NUjFfQkFTRShvcGIpCQkoRU1BQ19NUjFfVEZTXzJLIHwgRU1BQ19NUjFfVFIgfCBcCi0JCQkJCSBFTUFDX01SMV9PQkNJKG9wYikpCi0jZW5kaWYKLQotLyogRU1BQ3hfVE1SMCAqLwotI2RlZmluZSBFTUFDX1RNUjBfR05QCQkJMHg4MDAwMDAwMAotI2lmICFkZWZpbmVkKENPTkZJR19JQk1fRU1BQzQpCi0jZGVmaW5lIEVNQUNfVE1SMF9ERUZBVUxUCQkweDAwMDAwMDAwCQotI2Vsc2UKLSNkZWZpbmUgRU1BQ19UTVIwX1RGQUVfMl8zMgkJMHgwMDAwMDAwMQotI2RlZmluZSBFTUFDX1RNUjBfVEZBRV80XzY0CQkweDAwMDAwMDAyCi0jZGVmaW5lIEVNQUNfVE1SMF9URkFFXzhfMTI4CQkweDAwMDAwMDAzCi0jZGVmaW5lIEVNQUNfVE1SMF9URkFFXzE2XzI1NgkJMHgwMDAwMDAwNAotI2RlZmluZSBFTUFDX1RNUjBfVEZBRV8zMl81MTIJCTB4MDAwMDAwMDUKLSNkZWZpbmUgRU1BQ19UTVIwX1RGQUVfNjRfMTAyNAkJMHgwMDAwMDAwNgotI2RlZmluZSBFTUFDX1RNUjBfVEZBRV8xMjhfMjA0OAkJMHgwMDAwMDAwNwotI2RlZmluZSBFTUFDX1RNUjBfREVGQVVMVAkJRU1BQ19UTVIwX1RGQUVfMl8zMgotI2VuZGlmCi0jZGVmaW5lIEVNQUNfVE1SMF9YTUlUCQkJKEVNQUNfVE1SMF9HTlAgfCBFTUFDX1RNUjBfREVGQVVMVCkKLQotLyogRU1BQ3hfVE1SMSAqLwotCi0vKiBJQk0gbWFudWFscyBhcmUgbm90IHZlcnkgY2xlYXIgaGVyZS4gCi0gKiBUaGlzIGlzIG15IGludGVycHJldGF0aW9uIG9mIGhvdyB0aGluZ3MgYXJlLiAtLWVicwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfNDB4KQotI2RlZmluZSBFTUFDX0ZJRk9fRU5UUllfU0laRQkJOAotI2RlZmluZSBFTUFDX01BTF9CVVJTVF9TSVpFCQkoMTYgKiA0KQotI2Vsc2UKLSNkZWZpbmUgRU1BQ19GSUZPX0VOVFJZX1NJWkUJCTE2Ci0jZGVmaW5lIEVNQUNfTUFMX0JVUlNUX1NJWkUJCSg2NCAqIDQpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19JQk1fRU1BQzQpCi0jZGVmaW5lIEVNQUNfVE1SMShsLGgpCQkJKCgobCkgPDwgMjcpIHwgKCgoaCkgJiAweGZmKSA8PCAxNikpCi0jZWxzZQotI2RlZmluZSBFTUFDX1RNUjEobCxoKQkJCSgoKGwpIDw8IDI3KSB8ICgoKGgpICYgMHgzZmYpIDw8IDE0KSkKLSNlbmRpZgotCi0vKiBFTUFDeF9STVIgKi8KLSNkZWZpbmUgRU1BQ19STVJfU1AJCQkweDgwMDAwMDAwCi0jZGVmaW5lIEVNQUNfUk1SX1NGQ1MJCQkweDQwMDAwMDAwCi0jZGVmaW5lIEVNQUNfUk1SX1JSUAkJCTB4MjAwMDAwMDAKLSNkZWZpbmUgRU1BQ19STVJfUkZQCQkJMHgxMDAwMDAwMAotI2RlZmluZSBFTUFDX1JNUl9ST1AJCQkweDA4MDAwMDAwCi0jZGVmaW5lIEVNQUNfUk1SX1JQSVIJCQkweDA0MDAwMDAwCi0jZGVmaW5lIEVNQUNfUk1SX1BQUAkJCTB4MDIwMDAwMDAKLSNkZWZpbmUgRU1BQ19STVJfUE1FCQkJMHgwMTAwMDAwMAotI2RlZmluZSBFTUFDX1JNUl9QTU1FCQkJMHgwMDgwMDAwMAotI2RlZmluZSBFTUFDX1JNUl9JQUUJCQkweDAwNDAwMDAwCi0jZGVmaW5lIEVNQUNfUk1SX01JQUUJCQkweDAwMjAwMDAwCi0jZGVmaW5lIEVNQUNfUk1SX0JBRQkJCTB4MDAxMDAwMDAKLSNkZWZpbmUgRU1BQ19STVJfTUFFCQkJMHgwMDA4MDAwMAotI2lmICFkZWZpbmVkKENPTkZJR19JQk1fRU1BQzQpCi0jZGVmaW5lIEVNQUNfUk1SX0JBU0UJCQkweDAwMDAwMDAwCi0jZWxzZQotI2RlZmluZSBFTUFDX1JNUl9SRkFGXzJfMzIJCTB4MDAwMDAwMDEKLSNkZWZpbmUgRU1BQ19STVJfUkZBRl80XzY0CQkweDAwMDAwMDAyCi0jZGVmaW5lIEVNQUNfUk1SX1JGQUZfOF8xMjgJCTB4MDAwMDAwMDMKLSNkZWZpbmUgRU1BQ19STVJfUkZBRl8xNl8yNTYJCTB4MDAwMDAwMDQKLSNkZWZpbmUgRU1BQ19STVJfUkZBRl8zMl81MTIJCTB4MDAwMDAwMDUKLSNkZWZpbmUgRU1BQ19STVJfUkZBRl82NF8xMDI0CQkweDAwMDAwMDA2Ci0jZGVmaW5lIEVNQUNfUk1SX1JGQUZfMTI4XzIwNDgJCTB4MDAwMDAwMDcKLSNkZWZpbmUgRU1BQ19STVJfQkFTRQkJCUVNQUNfUk1SX1JGQUZfMTI4XzIwNDgKLSNlbmRpZgotCi0vKiBFTUFDeF9JU1IgJiBFTUFDeF9JU0VSICovCi0jaWYgIWRlZmluZWQoQ09ORklHX0lCTV9FTUFDNCkKLSNkZWZpbmUgRU1BQ19JU1JfVFhQRQkJCTB4MDAwMDAwMDAKLSNkZWZpbmUgRU1BQ19JU1JfUlhQRQkJCTB4MDAwMDAwMDAKLSNkZWZpbmUgRU1BQ19JU1JfVFhVRQkJCTB4MDAwMDAwMDAKLSNkZWZpbmUgRU1BQ19JU1JfUlhPRQkJCTB4MDAwMDAwMDAKLSNlbHNlCi0jZGVmaW5lIEVNQUNfSVNSX1RYUEUJCQkweDIwMDAwMDAwCi0jZGVmaW5lIEVNQUNfSVNSX1JYUEUJCQkweDEwMDAwMDAwCi0jZGVmaW5lIEVNQUNfSVNSX1RYVUUJCQkweDA4MDAwMDAwCi0jZGVmaW5lIEVNQUNfSVNSX1JYT0UJCQkweDA0MDAwMDAwCi0jZW5kaWYKLSNkZWZpbmUgRU1BQ19JU1JfT1ZSCQkJMHgwMjAwMDAwMAotI2RlZmluZSBFTUFDX0lTUl9QUAkJCTB4MDEwMDAwMDAKLSNkZWZpbmUgRU1BQ19JU1JfQlAJCQkweDAwODAwMDAwCi0jZGVmaW5lIEVNQUNfSVNSX1JQCQkJMHgwMDQwMDAwMAotI2RlZmluZSBFTUFDX0lTUl9TRQkJCTB4MDAyMDAwMDAKLSNkZWZpbmUgRU1BQ19JU1JfQUxFCQkJMHgwMDEwMDAwMAotI2RlZmluZSBFTUFDX0lTUl9CRkNTCQkJMHgwMDA4MDAwMAotI2RlZmluZSBFTUFDX0lTUl9QVExFCQkJMHgwMDA0MDAwMAotI2RlZmluZSBFTUFDX0lTUl9PUkUJCQkweDAwMDIwMDAwCi0jZGVmaW5lIEVNQUNfSVNSX0lSRQkJCTB4MDAwMTAwMDAKLSNkZWZpbmUgRU1BQ19JU1JfU1FFCQkJMHgwMDAwMDA4MAotI2RlZmluZSBFTUFDX0lTUl9URQkJCTB4MDAwMDAwNDAKLSNkZWZpbmUgRU1BQ19JU1JfTU9TCQkJMHgwMDAwMDAwMgotI2RlZmluZSBFTUFDX0lTUl9NT0YJCQkweDAwMDAwMDAxCi0KLS8qIEVNQUN4X1NUQUNSICovCi0jZGVmaW5lIEVNQUNfU1RBQ1JfUEhZRF9NQVNLCQkweGZmZmYKLSNkZWZpbmUgRU1BQ19TVEFDUl9QSFlEX1NISUZUCQkxNgotI2RlZmluZSBFTUFDX1NUQUNSX09DCQkJMHgwMDAwODAwMAotI2RlZmluZSBFTUFDX1NUQUNSX1BIWUUJCQkweDAwMDA0MDAwCi0jZGVmaW5lIEVNQUNfU1RBQ1JfU1RBQ19NQVNLCQkweDAwMDAzMDAwCi0jZGVmaW5lIEVNQUNfU1RBQ1JfU1RBQ19SRUFECQkweDAwMDAxMDAwCi0jZGVmaW5lIEVNQUNfU1RBQ1JfU1RBQ19XUklURQkJMHgwMDAwMjAwMAotI2lmICFkZWZpbmVkKENPTkZJR19JQk1fRU1BQzQpCi0jZGVmaW5lIEVNQUNfU1RBQ1JfT1BCQ19NQVNLCQkweDAwMDAwQzAwCi0jZGVmaW5lIEVNQUNfU1RBQ1JfT1BCQ181MAkJMHgwMDAwMDAwMAotI2RlZmluZSBFTUFDX1NUQUNSX09QQkNfNjYJCTB4MDAwMDA0MDAKLSNkZWZpbmUgRU1BQ19TVEFDUl9PUEJDXzgzCQkweDAwMDAwODAwCi0jZGVmaW5lIEVNQUNfU1RBQ1JfT1BCQ18xMDAJCTB4MDAwMDBDMDAKLSNkZWZpbmUgRU1BQ19TVEFDUl9PUEJDKGZyZXEpCQkoKGZyZXEpIDw9IDUwID8gRU1BQ19TVEFDUl9PUEJDXzUwIDogXAotCQkJCQkgKGZyZXEpIDw9IDY2ID8gRU1BQ19TVEFDUl9PUEJDXzY2IDogXAotCQkJCQkgKGZyZXEpIDw9IDgzID8gRU1BQ19TVEFDUl9PUEJDXzgzIDogRU1BQ19TVEFDUl9PUEJDXzEwMCkKLSNkZWZpbmUgRU1BQ19TVEFDUl9CQVNFKG9wYikJCUVNQUNfU1RBQ1JfT1BCQyhvcGIpCi0jZWxzZQotI2RlZmluZSBFTUFDX1NUQUNSX0JBU0Uob3BiKQkJMHgwMDAwMDAwMAotI2VuZGlmCi0jZGVmaW5lIEVNQUNfU1RBQ1JfUENEQV9NQVNLCQkweDFmCi0jZGVmaW5lIEVNQUNfU1RBQ1JfUENEQV9TSElGVAkJNQotI2RlZmluZSBFTUFDX1NUQUNSX1BSQV9NQVNLCQkweDFmCi0KLS8qCi0gKiBGb3IgdGhlIDQ0MFNQZSwgQU1DQyBpbmV4cGxpY2FibHkgY2hhbmdlZCB0aGUgcG9sYXJpdHkgb2YKLSAqIHRoZSAib3BlcmF0aW9uIGNvbXBsZXRlIiBiaXQgaW4gdGhlIE1JSSBjb250cm9sIHJlZ2lzdGVyLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKQotc3RhdGljIGlubGluZSBpbnQgZW1hY19waHlfZG9uZSh1MzIgc3RhY3IpCi17Ci0JcmV0dXJuICEoc3RhY3IgJiBFTUFDX1NUQUNSX09DKTsKLX07Ci0jZGVmaW5lIEVNQUNfU1RBQ1JfU1RBUlQgCQlFTUFDX1NUQUNSX09DCi0KLSNlbHNlIC8qIENPTkZJR180NDBTUEUgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGVtYWNfcGh5X2RvbmUodTMyIHN0YWNyKQotewotCXJldHVybiBzdGFjciAmIEVNQUNfU1RBQ1JfT0M7Ci19OwotI2RlZmluZSBFTUFDX1NUQUNSX1NUQVJUIAkJMAotI2VuZGlmIC8qICFDT05GSUdfNDQwU1BFICovCi0KLS8qIEVNQUN4X1RSVFIgKi8KLSNpZiAhZGVmaW5lZChDT05GSUdfSUJNX0VNQUM0KQotI2RlZmluZSBFTUFDX1RSVFJfU0hJRlQJCQkyNwotI2Vsc2UKLSNkZWZpbmUgRU1BQ19UUlRSX1NISUZUCQkJMjQKLSNlbmRpZgotI2RlZmluZSBFTUFDX1RSVFIoc2l6ZSkJCQkoKCgoc2l6ZSkgPj4gNikgLSAxKSA8PCBFTUFDX1RSVFJfU0hJRlQpCi0KLS8qIEVNQUN4X1JXTVIgKi8KLSNpZiAhZGVmaW5lZChDT05GSUdfSUJNX0VNQUM0KQotI2RlZmluZSBFTUFDX1JXTVIobCxoKQkJCSgoKGwpIDw8IDIzKSB8ICggKChoKSAmIDB4MWZmKSA8PCA3KSkJCi0jZWxzZQotI2RlZmluZSBFTUFDX1JXTVIobCxoKQkJCSgoKGwpIDw8IDIyKSB8ICggKChoKSAmIDB4M2ZmKSA8PCA2KSkJCi0jZW5kaWYKLQotLyogRU1BQyBzcGVjaWZpYyBUWCBkZXNjcmlwdG9yIGNvbnRyb2wgZmllbGRzICh3cml0ZSBhY2Nlc3MpICovCi0jZGVmaW5lIEVNQUNfVFhfQ1RSTF9HRkNTCQkweDAyMDAKLSNkZWZpbmUgRU1BQ19UWF9DVFJMX0dQCQkJMHgwMTAwCi0jZGVmaW5lIEVNQUNfVFhfQ1RSTF9JU0EJCTB4MDA4MAotI2RlZmluZSBFTUFDX1RYX0NUUkxfUlNBCQkweDAwNDAKLSNkZWZpbmUgRU1BQ19UWF9DVFJMX0lWVAkJMHgwMDIwCi0jZGVmaW5lIEVNQUNfVFhfQ1RSTF9SVlQJCTB4MDAxMAotI2RlZmluZSBFTUFDX1RYX0NUUkxfVEFIX0NTVU0JCTB4MDAwZQotCi0vKiBFTUFDIHNwZWNpZmljIFRYIGRlc2NyaXB0b3Igc3RhdHVzIGZpZWxkcyAocmVhZCBhY2Nlc3MpICovCi0jZGVmaW5lIEVNQUNfVFhfU1RfQkZDUwkJCTB4MDIwMAotI2RlZmluZSBFTUFDX1RYX1NUX0xDUwkJCTB4MDA4MAotI2RlZmluZSBFTUFDX1RYX1NUX0VECQkJMHgwMDQwCi0jZGVmaW5lIEVNQUNfVFhfU1RfRUMJCQkweDAwMjAKLSNkZWZpbmUgRU1BQ19UWF9TVF9MQwkJCTB4MDAxMAotI2RlZmluZSBFTUFDX1RYX1NUX01DCQkJMHgwMDA4Ci0jZGVmaW5lIEVNQUNfVFhfU1RfU0MJCQkweDAwMDQKLSNkZWZpbmUgRU1BQ19UWF9TVF9VUgkJCTB4MDAwMgotI2RlZmluZSBFTUFDX1RYX1NUX1NRRQkJCTB4MDAwMQotI2lmICFkZWZpbmVkKENPTkZJR19JQk1fRU1BQ19UQUgpCi0jZGVmaW5lIEVNQUNfSVNfQkFEX1RYKHYpCQkoKHYpICYgKEVNQUNfVFhfU1RfTENTIHwgRU1BQ19UWF9TVF9FRCB8IFwKLQkJCQkJIEVNQUNfVFhfU1RfRUMgfCBFTUFDX1RYX1NUX0xDIHwgXAotCQkJCQkgRU1BQ19UWF9TVF9NQyB8IEVNQUNfVFhfU1RfVVIpKQotI2Vsc2UKLSNkZWZpbmUgRU1BQ19JU19CQURfVFgodikJCSgodikgJiAoRU1BQ19UWF9TVF9MQ1MgfCBFTUFDX1RYX1NUX0VEIHwgXAotCQkJCQkgRU1BQ19UWF9TVF9FQyB8IEVNQUNfVFhfU1RfTEMpKQotI2VuZGlmCQkJCQkgCi0KLS8qIEVNQUMgc3BlY2lmaWMgUlggZGVzY3JpcHRvciBzdGF0dXMgZmllbGRzIChyZWFkIGFjY2VzcykgKi8KLSNkZWZpbmUgRU1BQ19SWF9TVF9PRQkJCTB4MDIwMAotI2RlZmluZSBFTUFDX1JYX1NUX1BQCQkJMHgwMTAwCi0jZGVmaW5lIEVNQUNfUlhfU1RfQlAJCQkweDAwODAKLSNkZWZpbmUgRU1BQ19SWF9TVF9SUAkJCTB4MDA0MAotI2RlZmluZSBFTUFDX1JYX1NUX1NFCQkJMHgwMDIwCi0jZGVmaW5lIEVNQUNfUlhfU1RfQUUJCQkweDAwMTAKLSNkZWZpbmUgRU1BQ19SWF9TVF9CRkNTCQkJMHgwMDA4Ci0jZGVmaW5lIEVNQUNfUlhfU1RfUFRMCQkJMHgwMDA0Ci0jZGVmaW5lIEVNQUNfUlhfU1RfT1JFCQkJMHgwMDAyCi0jZGVmaW5lIEVNQUNfUlhfU1RfSVJFCQkJMHgwMDAxCi0jZGVmaW5lIEVNQUNfUlhfVEFIX0JBRF9DU1VNCQkweDAwMDMKLSNkZWZpbmUgRU1BQ19CQURfUlhfTUFTSwkJKEVNQUNfUlhfU1RfT0UgfCBFTUFDX1JYX1NUX0JQIHwgXAotCQkJCQkgRU1BQ19SWF9TVF9SUCB8IEVNQUNfUlhfU1RfU0UgfCBcCi0JCQkJCSBFTUFDX1JYX1NUX0FFIHwgRU1BQ19SWF9TVF9CRkNTIHwgXAotCQkJCQkgRU1BQ19SWF9TVF9QVEwgfCBFTUFDX1JYX1NUX09SRSB8IFwKLQkJCQkJIEVNQUNfUlhfU1RfSVJFICkKLSNlbmRpZiAvKiBfX0lCTV9FTUFDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNjY0ZjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI2MyArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jCi0gKgotICogRHJpdmVyIGZvciBQb3dlclBDIDR4eCBvbi1jaGlwIGV0aGVybmV0IGNvbnRyb2xsZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IFp1bHR5cyBUZWNobm9sb2dpZXMuCi0gKiBFdWdlbmUgU3Vyb3ZlZ2luIDxldWdlbmUuc3Vyb3ZlZ2luQHp1bHR5cy5jb20+IG9yIDxlYnNAZWJzaG9tZS5uZXQ+Ci0gKgotICogQmFzZWQgb24gb3JpZ2luYWwgd29yayBieQotICogCU1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKgkoYykgMjAwMyBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKiAgICAgIEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotICogCUpvaG5uaWUgUGV0ZXJzIDxqcGV0ZXJzQG12aXN0YS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9vY3AuaD4KLQotI2luY2x1ZGUgImlibV9lbWFjX2NvcmUuaCIKLSNpbmNsdWRlICJpYm1fZW1hY19kZWJ1Zy5oIgotCi0vKgotICogTGFjayBvZiBkbWFfdW5tYXBfPz8/PyBjYWxscyBpcyBpbnRlbnRpb25hbC4KLSAqCi0gKiBBUEktY29ycmVjdCB1c2FnZSByZXF1aXJlcyBhZGRpdGlvbmFsIHN1cHBvcnQgc3RhdGUgaW5mb3JtYXRpb24gdG8gYmUgCi0gKiBtYWludGFpbmVkIGZvciBldmVyeSBSWCBhbmQgVFggYnVmZmVyIGRlc2NyaXB0b3IgKEJEKS4gVW5mb3J0dW5hdGVseSwgZHVlIHRvCi0gKiBFTUFDIGRlc2lnbiAoZS5nLiBUWCBidWZmZXIgcGFzc2VkIGZyb20gbmV0d29yayBzdGFjayBjYW4gYmUgc3BsaXQgaW50bwotICogc2V2ZXJhbCBCRHMsIGRtYV9tYXBfc2luZ2xlL2RtYV9tYXBfcGFnZSBjYW4gYmUgdXNlZCB0byBtYXAgcGFydGljdWxhciBCRCksCi0gKiBtYWludGFpbmluZyBzdWNoIGluZm9ybWF0aW9uIHdpbGwgYWRkIGFkZGl0aW9uYWwgb3ZlcmhlYWQuCi0gKiBDdXJyZW50IERNQSBBUEkgaW1wbGVtZW50YXRpb24gZm9yIDR4eCBwcm9jZXNzb3JzIG9ubHkgZW5zdXJlcyBjYWNoZSBjb2hlcmVuY3kKLSAqIGFuZCBkbWFfdW5tYXBfPz8/PyByb3V0aW5lcyBhcmUgZW1wdHkgYW5kIGFyZSBsaWtlbHkgdG8gc3RheSB0aGlzIHdheS4KLSAqIEkgZGVjaWRlZCB0byBvbWl0IGRtYV91bm1hcF8/Pz8gY2FsbHMgYmVjYXVzZSBJIGRvbid0IHdhbnQgdG8gYWRkIGFkZGl0aW9uYWwKLSAqIGNvbXBsZXhpdHkganVzdCBmb3IgdGhlIHNha2Ugb2YgZm9sbG93aW5nIHNvbWUgYWJzdHJhY3QgQVBJLCB3aGVuIGl0IGRvZXNuJ3QKLSAqIGFkZCBhbnkgcmVhbCBiZW5lZml0IHRvIHRoZSBkcml2ZXIuIEkgdW5kZXJzdGFuZCB0aGF0IHRoaXMgZGVjaXNpb24gbWF5YmUgCi0gKiBjb250cm92ZXJzaWFsLCBidXQgSSByZWFsbHkgdHJpZWQgdG8gbWFrZSBjb2RlIEFQSS1jb3JyZWN0IGFuZCBlZmZpY2llbnQgCi0gKiBhdCB0aGUgc2FtZSB0aW1lIGFuZCBkaWRuJ3QgY29tZSB1cCB3aXRoIGNvZGUgSSBsaWtlZCA6KC4gICAgICAgICAgICAgICAgLS1lYnMKLSAqLwotCi0jZGVmaW5lIERSVl9OQU1FICAgICAgICAiZW1hYyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICIzLjU0IgotI2RlZmluZSBEUlZfREVTQyAgICAgICAgIlBQQyA0eHggT0NQIEVNQUMgZHJpdmVyIgotCi1NT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0MpOwotTU9EVUxFX0FVVEhPUgotICAgICgiRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKiBtaW5pbXVtIG51bWJlciBvZiBmcmVlIFRYIGRlc2NyaXB0b3JzIHJlcXVpcmVkIHRvIHdha2UgdXAgVFggcHJvY2VzcyAqLwotI2RlZmluZSBFTUFDX1RYX1dBS0VVUF9USFJFU0gJCShOVU1fVFhfQlVGRiAvIDQpCi0KLS8qIElmIHBhY2tldCBzaXplIGlzIGxlc3MgdGhhbiB0aGlzIG51bWJlciwgd2UgYWxsb2NhdGUgc21hbGwgc2tiIGFuZCBjb3B5IHBhY2tldCAKLSAqIGNvbnRlbnRzIGludG8gaXQgaW5zdGVhZCBvZiBqdXN0IHNlbmRpbmcgb3JpZ2luYWwgYmlnIHNrYiB1cAotICovCi0jZGVmaW5lIEVNQUNfUlhfQ09QWV9USFJFU0gJCUNPTkZJR19JQk1fRU1BQ19SWF9DT1BZX1RIUkVTSE9MRAotCi0vKiBTaW5jZSBtdWx0aXBsZSBFTUFDcyBzaGFyZSBNRElPIGxpbmVzIGluIHZhcmlvdXMgd2F5cywgd2UgbmVlZAotICogdG8gYXZvaWQgcmUtdXNpbmcgdGhlIHNhbWUgUEhZIElEIGluIGNhc2VzIHdoZXJlIHRoZSBhcmNoIGRpZG4ndAotICogc2V0dXAgcHJlY2lzZSBwaHlfbWFwIGVudHJpZXMKLSAqLwotc3RhdGljIHUzMiBidXN5X3BoeV9tYXA7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JQk1fRU1BQ19QSFlfUlhfQ0xLX0ZJWCkgJiYgXAotICAgIChkZWZpbmVkKENPTkZJR180MDVFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSkKLS8qIDQwNUVQIGhhcyAiRU1BQyB0byBQSFkgQ29udHJvbCBSZWdpc3RlciIgKENQQzBfRVBDVEwpIHdoaWNoIGNhbiBoZWxwIHVzCi0gKiB3aXRoIFBIWSBSWCBjbG9jayBwcm9ibGVtLgotICogNDQwRVAvNDQwR1IgaGFzIG1vcmUgc2FuZSBTRFIwX01GUiByZWdpc3RlciBpbXBsZW1lbnRhdGlvbiB0aGFuIDQ0MEdYLCB3aGljaAotICogYWxzbyBhbGxvd3MgY29udHJvbGxpbmcgZWFjaCBFTUFDIGNsb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBFTUFDX1JYX0NMS19UWChpbnQgaWR4KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfNDA1RVApCi0JbXRkY3IoMHhmMywgbWZkY3IoMHhmMykgfCAoMSA8PCBpZHgpKTsKLSNlbHNlIC8qIENPTkZJR180NDBFUCB8fCBDT05GSUdfNDQwR1IgKi8KLQlTRFJfV1JJVEUoRENSTl9TRFJfTUZSLCBTRFJfUkVBRChEQ1JOX1NEUl9NRlIpIHwgKDB4MDgwMDAwMDAgPj4gaWR4KSk7Ci0jZW5kaWYKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIEVNQUNfUlhfQ0xLX0RFRkFVTFQoaW50IGlkeCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotI2lmIGRlZmluZWQoQ09ORklHXzQwNUVQKQotCW10ZGNyKDB4ZjMsIG1mZGNyKDB4ZjMpICYgfigxIDw8IGlkeCkpOwotI2Vsc2UgLyogQ09ORklHXzQ0MEVQICovCi0JU0RSX1dSSVRFKERDUk5fU0RSX01GUiwgU0RSX1JFQUQoRENSTl9TRFJfTUZSKSAmIH4oMHgwODAwMDAwMCA+PiBpZHgpKTsKLSNlbmRpZgotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotI2Vsc2UKLSNkZWZpbmUgRU1BQ19SWF9DTEtfVFgoaWR4KQkJKCh2b2lkKTApCi0jZGVmaW5lIEVNQUNfUlhfQ0xLX0RFRkFVTFQoaWR4KQkoKHZvaWQpMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfSUJNX0VNQUNfUEhZX1JYX0NMS19GSVgpICYmIGRlZmluZWQoQ09ORklHXzQ0MEdYKQotLyogV2UgY2FuIHN3aXRjaCBFdGhlcm5ldCBjbG9jayB0byB0aGUgaW50ZXJuYWwgc291cmNlIHRocm91Z2ggU0RSMF9NRlJbRUNTXSwKLSAqIHVuZm9ydHVuYXRlbHkgdGhpcyBpcyBsZXNzIGZsZXhpYmxlIHRoYW4gNDQwRVAgY2FzZSwgYmVjYXVzZSBpdCdzIGEgZ2xvYmFsIAotICogc2V0dGluZyBmb3IgYWxsIEVNQUNzLCB0aGVyZWZvcmUgd2UgZG8gdGhpcyBjbG9jayB0cmljayBvbmx5IGR1cmluZyBwcm9iZS4KLSAqLwotI2RlZmluZSBFTUFDX0NMS19JTlRFUk5BTAkJU0RSX1dSSVRFKERDUk5fU0RSX01GUiwgXAotCQkJCQkgICAgU0RSX1JFQUQoRENSTl9TRFJfTUZSKSB8IDB4MDgwMDAwMDApCi0jZGVmaW5lIEVNQUNfQ0xLX0VYVEVSTkFMCQlTRFJfV1JJVEUoRENSTl9TRFJfTUZSLCBcCi0JCQkJCSAgICBTRFJfUkVBRChEQ1JOX1NEUl9NRlIpICYgfjB4MDgwMDAwMDApCi0jZWxzZQotI2RlZmluZSBFTUFDX0NMS19JTlRFUk5BTAkJKCh2b2lkKTApCi0jZGVmaW5lIEVNQUNfQ0xLX0VYVEVSTkFMCQkoKHZvaWQpMCkKLSNlbmRpZgotCi0vKiBJIGRvbid0IHdhbnQgdG8gbGl0dGVyIHN5c3RlbSBsb2cgd2l0aCB0aW1lb3V0IGVycm9ycyAKLSAqIHdoZW4gd2UgaGF2ZSBicmFpbi1kYW1hZ2VkIFBIWS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGVtYWNfcmVwb3J0X3RpbWVvdXRfZXJyb3Ioc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiwKLQkJCQkJICAgICBjb25zdCBjaGFyICplcnJvcikKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19JQk1fRU1BQ19QSFlfUlhfQ0xLX0ZJWCkKLQlEQkcoIiVkOiAlcyIgTkwsIGRldi0+ZGVmLT5pbmRleCwgZXJyb3IpOwotI2Vsc2UKLQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9FUlIgImVtYWMlZDogJXNcbiIsIGRldi0+ZGVmLT5pbmRleCwgZXJyb3IpOwotI2VuZGlmCi19Ci0KLS8qIFBIWSBwb2xsaW5nIGludGVydmFscyAqLwotI2RlZmluZSBQSFlfUE9MTF9MSU5LX09OCUhaCi0jZGVmaW5lIFBIWV9QT0xMX0xJTktfT0ZGCShIWiAvIDUpCi0KLS8qIEdyYWNlZnVsIHN0b3AgdGltZW91dHMgaW4gdXMuIAotICogV2Ugc2hvdWxkIGFsbG93IHVwIHRvIDEgZnJhbWUgdGltZSAoZnVsbC1kdXBsZXgsIGlnbm9yaW5nIGNvbGxpc2lvbnMpIAotICovCi0jZGVmaW5lIFNUT1BfVElNRU9VVF8xMAkJMTIzMAkKLSNkZWZpbmUgU1RPUF9USU1FT1VUXzEwMAkxMjQKLSNkZWZpbmUgU1RPUF9USU1FT1VUXzEwMDAJMTMKLSNkZWZpbmUgU1RPUF9USU1FT1VUXzEwMDBfSlVNQk8JNzMKLQotLyogUGxlYXNlLCBrZWVwIGluIHN5bmMgd2l0aCBzdHJ1Y3QgaWJtX2VtYWNfc3RhdHMvaWJtX2VtYWNfZXJyb3Jfc3RhdHMgKi8KLXN0YXRpYyBjb25zdCBjaGFyIGVtYWNfc3RhdHNfa2V5c1tFTUFDX0VUSFRPT0xfU1RBVFNfQ09VTlRdW0VUSF9HU1RSSU5HX0xFTl0gPSB7Ci0JInJ4X3BhY2tldHMiLCAicnhfYnl0ZXMiLCAidHhfcGFja2V0cyIsICJ0eF9ieXRlcyIsICJyeF9wYWNrZXRzX2NzdW0iLAotCSJ0eF9wYWNrZXRzX2NzdW0iLCAidHhfdW5kbyIsICJyeF9kcm9wcGVkX3N0YWNrIiwgInJ4X2Ryb3BwZWRfb29tIiwKLQkicnhfZHJvcHBlZF9lcnJvciIsICJyeF9kcm9wcGVkX3Jlc2l6ZSIsICJyeF9kcm9wcGVkX210dSIsCi0JInJ4X3N0b3BwZWQiLCAicnhfYmRfZXJyb3JzIiwgInJ4X2JkX292ZXJydW4iLCAicnhfYmRfYmFkX3BhY2tldCIsCi0JInJ4X2JkX3J1bnRfcGFja2V0IiwgInJ4X2JkX3Nob3J0X2V2ZW50IiwgInJ4X2JkX2FsaWdubWVudF9lcnJvciIsCi0JInJ4X2JkX2JhZF9mY3MiLCAicnhfYmRfcGFja2V0X3Rvb19sb25nIiwgInJ4X2JkX291dF9vZl9yYW5nZSIsCi0JInJ4X2JkX2luX3JhbmdlIiwgInJ4X3Bhcml0eSIsICJyeF9maWZvX292ZXJydW4iLCAicnhfb3ZlcnJ1biIsCi0JInJ4X2JhZF9wYWNrZXQiLCAicnhfcnVudF9wYWNrZXQiLCAicnhfc2hvcnRfZXZlbnQiLAotCSJyeF9hbGlnbm1lbnRfZXJyb3IiLCAicnhfYmFkX2ZjcyIsICJyeF9wYWNrZXRfdG9vX2xvbmciLAotCSJyeF9vdXRfb2ZfcmFuZ2UiLCAicnhfaW5fcmFuZ2UiLCAidHhfZHJvcHBlZCIsICJ0eF9iZF9lcnJvcnMiLAotCSJ0eF9iZF9iYWRfZmNzIiwgInR4X2JkX2NhcnJpZXJfbG9zcyIsICJ0eF9iZF9leGNlc3NpdmVfZGVmZXJyYWwiLAotCSJ0eF9iZF9leGNlc3NpdmVfY29sbGlzaW9ucyIsICJ0eF9iZF9sYXRlX2NvbGxpc2lvbiIsCi0JInR4X2JkX211bHRwbGVfY29sbGlzaW9ucyIsICJ0eF9iZF9zaW5nbGVfY29sbGlzaW9uIiwKLQkidHhfYmRfdW5kZXJydW4iLCAidHhfYmRfc3FlIiwgInR4X3Bhcml0eSIsICJ0eF91bmRlcnJ1biIsICJ0eF9zcWUiLAotCSJ0eF9lcnJvcnMiCi19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgZW1hY19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKLXN0YXRpYyB2b2lkIGVtYWNfY2xlYW5fdHhfcmluZyhzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KTsKLQotc3RhdGljIGlubGluZSBpbnQgZW1hY19waHlfc3VwcG9ydHNfZ2lnZShpbnQgcGh5X21vZGUpCi17Ci0JcmV0dXJuICBwaHlfbW9kZSA9PSBQSFlfTU9ERV9HTUlJIHx8Ci0JCXBoeV9tb2RlID09IFBIWV9NT0RFX1JHTUlJIHx8Ci0JCXBoeV9tb2RlID09IFBIWV9NT0RFX1RCSSB8fAotCQlwaHlfbW9kZSA9PSBQSFlfTU9ERV9SVEJJOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBlbWFjX3BoeV9ncGNzKGludCBwaHlfbW9kZSkKLXsKLQlyZXR1cm4gIHBoeV9tb2RlID09IFBIWV9NT0RFX1RCSSB8fAotCQlwaHlfbW9kZSA9PSBQSFlfTU9ERV9SVEJJOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW1hY190eF9lbmFibGUoc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldikKLXsKLQlzdHJ1Y3QgZW1hY19yZWdzIF9faW9tZW0gKnAgPSBkZXYtPmVtYWNwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHI7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlEQkcoIiVkOiB0eF9lbmFibGUiIE5MLCBkZXYtPmRlZi0+aW5kZXgpOwotCi0JciA9IGluX2JlMzIoJnAtPm1yMCk7Ci0JaWYgKCEociAmIEVNQUNfTVIwX1RYRSkpCi0JCW91dF9iZTMyKCZwLT5tcjAsIHIgfCBFTUFDX01SMF9UWEUpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgZW1hY190eF9kaXNhYmxlKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYpCi17Ci0Jc3RydWN0IGVtYWNfcmVncyBfX2lvbWVtICpwID0gZGV2LT5lbWFjcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiByOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JREJHKCIlZDogdHhfZGlzYWJsZSIgTkwsIGRldi0+ZGVmLT5pbmRleCk7Ci0KLQlyID0gaW5fYmUzMigmcC0+bXIwKTsKLQlpZiAociAmIEVNQUNfTVIwX1RYRSkgewotCQlpbnQgbiA9IGRldi0+c3RvcF90aW1lb3V0OwotCQlvdXRfYmUzMigmcC0+bXIwLCByICYgfkVNQUNfTVIwX1RYRSk7Ci0JCXdoaWxlICghKGluX2JlMzIoJnAtPm1yMCkgJiBFTUFDX01SMF9UWEkpICYmIG4pIHsKLQkJCXVkZWxheSgxKTsKLQkJCS0tbjsKLQkJfQkKLQkJaWYgKHVubGlrZWx5KCFuKSkKLQkJCWVtYWNfcmVwb3J0X3RpbWVvdXRfZXJyb3IoZGV2LCAiVFggZGlzYWJsZSB0aW1lb3V0Iik7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgZW1hY19yeF9lbmFibGUoc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldikKLXsKLQlzdHJ1Y3QgZW1hY19yZWdzIF9faW9tZW0gKnAgPSBkZXYtPmVtYWNwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHI7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKHVubGlrZWx5KGRldi0+Y29tbWFjLnJ4X3N0b3BwZWQpKQotCQlnb3RvIG91dDsKLQotCURCRygiJWQ6IHJ4X2VuYWJsZSIgTkwsIGRldi0+ZGVmLT5pbmRleCk7Ci0KLQlyID0gaW5fYmUzMigmcC0+bXIwKTsKLQlpZiAoIShyICYgRU1BQ19NUjBfUlhFKSkgewotCQlpZiAodW5saWtlbHkoIShyICYgRU1BQ19NUjBfUlhJKSkpIHsKLQkJCS8qIFdhaXQgaWYgcHJldmlvdXMgYXN5bmMgZGlzYWJsZSBpcyBzdGlsbCBpbiBwcm9ncmVzcyAqLwotCQkJaW50IG4gPSBkZXYtPnN0b3BfdGltZW91dDsKLQkJCXdoaWxlICghKHIgPSBpbl9iZTMyKCZwLT5tcjApICYgRU1BQ19NUjBfUlhJKSAmJiBuKSB7Ci0JCQkJdWRlbGF5KDEpOwotCQkJCS0tbjsKLQkJCX0JCi0JCQlpZiAodW5saWtlbHkoIW4pKQotCQkJCWVtYWNfcmVwb3J0X3RpbWVvdXRfZXJyb3IoZGV2LAotCQkJCQkJCSAgIlJYIGRpc2FibGUgdGltZW91dCIpOwotCQl9Ci0JCW91dF9iZTMyKCZwLT5tcjAsIHIgfCBFTUFDX01SMF9SWEUpOwotCX0KLSAgICAgIG91dDoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtYWNfcnhfZGlzYWJsZShzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQotewotCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgcjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCURCRygiJWQ6IHJ4X2Rpc2FibGUiIE5MLCBkZXYtPmRlZi0+aW5kZXgpOwotCi0JciA9IGluX2JlMzIoJnAtPm1yMCk7Ci0JaWYgKHIgJiBFTUFDX01SMF9SWEUpIHsKLQkJaW50IG4gPSBkZXYtPnN0b3BfdGltZW91dDsKLQkJb3V0X2JlMzIoJnAtPm1yMCwgciAmIH5FTUFDX01SMF9SWEUpOwotCQl3aGlsZSAoIShpbl9iZTMyKCZwLT5tcjApICYgRU1BQ19NUjBfUlhJKSAmJiBuKSB7Ci0JCQl1ZGVsYXkoMSk7Ci0JCQktLW47Ci0JCX0JCi0JCWlmICh1bmxpa2VseSghbikpCi0JCQllbWFjX3JlcG9ydF90aW1lb3V0X2Vycm9yKGRldiwgIlJYIGRpc2FibGUgdGltZW91dCIpOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbWFjX3J4X2Rpc2FibGVfYXN5bmMoc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldikKLXsKLQlzdHJ1Y3QgZW1hY19yZWdzIF9faW9tZW0gKnAgPSBkZXYtPmVtYWNwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHI7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlEQkcoIiVkOiByeF9kaXNhYmxlX2FzeW5jIiBOTCwgZGV2LT5kZWYtPmluZGV4KTsKLQotCXIgPSBpbl9iZTMyKCZwLT5tcjApOwotCWlmIChyICYgRU1BQ19NUjBfUlhFKQotCQlvdXRfYmUzMigmcC0+bXIwLCByICYgfkVNQUNfTVIwX1JYRSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGVtYWNfcmVzZXQoc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldikKLXsKLQlzdHJ1Y3QgZW1hY19yZWdzIF9faW9tZW0gKnAgPSBkZXYtPmVtYWNwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG4gPSAyMDsKLQotCURCRygiJWQ6IHJlc2V0IiBOTCwgZGV2LT5kZWYtPmluZGV4KTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWlmICghZGV2LT5yZXNldF9mYWlsZWQpIHsKLQkJLyogNDB4IGVycmF0dW0gc3VnZ2VzdHMgc3RvcHBpbmcgUlggY2hhbm5lbCBiZWZvcmUgcmVzZXQsCi0JCSAqIHdlIHN0b3AgVFggYXMgd2VsbAotCQkgKi8KLQkJZW1hY19yeF9kaXNhYmxlKGRldik7Ci0JCWVtYWNfdHhfZGlzYWJsZShkZXYpOwotCX0KLQotCW91dF9iZTMyKCZwLT5tcjAsIEVNQUNfTVIwX1NSU1QpOwotCXdoaWxlICgoaW5fYmUzMigmcC0+bXIwKSAmIEVNQUNfTVIwX1NSU1QpICYmIG4pCi0JCS0tbjsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlpZiAobikgewotCQlkZXYtPnJlc2V0X2ZhaWxlZCA9IDA7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCWVtYWNfcmVwb3J0X3RpbWVvdXRfZXJyb3IoZGV2LCAicmVzZXQgdGltZW91dCIpOwotCQlkZXYtPnJlc2V0X2ZhaWxlZCA9IDE7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZW1hY19oYXNoX21jKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYpCi17Ci0Jc3RydWN0IGVtYWNfcmVncyBfX2lvbWVtICpwID0gZGV2LT5lbWFjcDsKLQl1MTYgZ2FodFs0XSA9IHsgMCB9OwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwotCi0JREJHKCIlZDogaGFzaF9tYyAlZCIgTkwsIGRldi0+ZGVmLT5pbmRleCwgZGV2LT5uZGV2LT5tY19jb3VudCk7Ci0KLQlmb3IgKGRtaSA9IGRldi0+bmRldi0+bWNfbGlzdDsgZG1pOyBkbWkgPSBkbWktPm5leHQpIHsKLQkJaW50IGJpdDsKLQkJREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0JCURCRzIoIiVkOiBtYyAlcyIgTkwsCi0JCSAgICAgZGV2LT5kZWYtPmluZGV4LCBwcmludF9tYWMobWFjLCBkbWktPmRtaV9hZGRyKSk7Ci0KLQkJYml0ID0gNjMgLSAoZXRoZXJfY3JjKEVUSF9BTEVOLCBkbWktPmRtaV9hZGRyKSA+PiAyNik7Ci0JCWdhaHRbYml0ID4+IDRdIHw9IDB4ODAwMCA+PiAoYml0ICYgMHgwZik7Ci0JfQotCW91dF9iZTMyKCZwLT5nYWh0MSwgZ2FodFswXSk7Ci0Jb3V0X2JlMzIoJnAtPmdhaHQyLCBnYWh0WzFdKTsKLQlvdXRfYmUzMigmcC0+Z2FodDMsIGdhaHRbMl0pOwotCW91dF9iZTMyKCZwLT5nYWh0NCwgZ2FodFszXSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGVtYWNfaWZmMnJtcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQl1MzIgciA9IEVNQUNfUk1SX1NQIHwgRU1BQ19STVJfU0ZDUyB8IEVNQUNfUk1SX0lBRSB8IEVNQUNfUk1SX0JBRSB8Ci0JICAgIEVNQUNfUk1SX0JBU0U7Ci0KLQlpZiAobmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLQkJciB8PSBFTUFDX1JNUl9QTUU7Ci0JZWxzZSBpZiAobmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgbmRldi0+bWNfY291bnQgPiAzMikKLQkJciB8PSBFTUFDX1JNUl9QTU1FOwotCWVsc2UgaWYgKG5kZXYtPm1jX2NvdW50ID4gMCkKLQkJciB8PSBFTUFDX1JNUl9NQUU7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZW1hY19vcGJfbWh6KHZvaWQpCi17Ci0JcmV0dXJuIChvY3Bfc3lzX2luZm8ub3BiX2J1c19mcmVxICsgNTAwMDAwKSAvIDEwMDAwMDA7Ci19Ci0KLS8qIEJIcyBkaXNhYmxlZCAqLwotc3RhdGljIGludCBlbWFjX2NvbmZpZ3VyZShzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQotewotCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXYtPm5kZXY7Ci0JaW50IGdpZ2U7Ci0JdTMyIHI7Ci0KLQlEQkcoIiVkOiBjb25maWd1cmUiIE5MLCBkZXYtPmRlZi0+aW5kZXgpOwotCi0JaWYgKGVtYWNfcmVzZXQoZGV2KSA8IDApCi0JCXJldHVybiAtRVRJTUVET1VUOwotCi0JdGFoX3Jlc2V0KGRldi0+dGFoX2Rldik7Ci0KLQkvKiBNb2RlIHJlZ2lzdGVyICovCi0JciA9IEVNQUNfTVIxX0JBU0UoZW1hY19vcGJfbWh6KCkpIHwgRU1BQ19NUjFfVkxFIHwgRU1BQ19NUjFfSVNUOwotCWlmIChkZXYtPnBoeS5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCXIgfD0gRU1BQ19NUjFfRkRFIHwgRU1BQ19NUjFfTVdTV18wMDE7Ci0JZGV2LT5zdG9wX3RpbWVvdXQgPSBTVE9QX1RJTUVPVVRfMTA7Ci0Jc3dpdGNoIChkZXYtPnBoeS5zcGVlZCkgewotCWNhc2UgU1BFRURfMTAwMDoKLQkJaWYgKGVtYWNfcGh5X2dwY3MoZGV2LT5waHkubW9kZSkpIHsKLQkJCXIgfD0gRU1BQ19NUjFfTUZfMTAwMEdQQ1MgfAotCQkJICAgIEVNQUNfTVIxX01GX0lQUEEoZGV2LT5waHkuYWRkcmVzcyk7Ci0KLQkJCS8qIFB1dCBzb21lIGFyYml0cmFyeSBPVUksIE1hbnVmICYgUmV2IElEcyBzbyB3ZSBjYW4KLQkJCSAqIGlkZW50aWZ5IHRoaXMgR1BDUyBQSFkgbGF0ZXIuCi0JCQkgKi8KLQkJCW91dF9iZTMyKCZwLT5pcGNyLCAweGRlYWRiZWVmKTsKLQkJfSBlbHNlCi0JCQlyIHw9IEVNQUNfTVIxX01GXzEwMDA7Ci0JCXIgfD0gRU1BQ19NUjFfUkZTXzE2SzsKLQkJZ2lnZSA9IDE7Ci0KLQkJaWYgKGRldi0+bmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSB7Ci0JCQlyIHw9IEVNQUNfTVIxX0pQU007Ci0JCQlkZXYtPnN0b3BfdGltZW91dCA9IFNUT1BfVElNRU9VVF8xMDAwX0pVTUJPOwotCQl9IGVsc2UKLQkJCWRldi0+c3RvcF90aW1lb3V0ID0gU1RPUF9USU1FT1VUXzEwMDA7Ci0JCWJyZWFrOwotCWNhc2UgU1BFRURfMTAwOgotCQlyIHw9IEVNQUNfTVIxX01GXzEwMDsKLQkJZGV2LT5zdG9wX3RpbWVvdXQgPSBTVE9QX1RJTUVPVVRfMTAwOwotCQkvKiBGYWxsIHRocm91Z2ggKi8KLQlkZWZhdWx0OgotCQlyIHw9IEVNQUNfTVIxX1JGU180SzsKLQkJZ2lnZSA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChkZXYtPnJnbWlpX2RldikKLQkJcmdtaWlfc2V0X3NwZWVkKGRldi0+cmdtaWlfZGV2LCBkZXYtPnJnbWlpX2lucHV0LAotCQkJCWRldi0+cGh5LnNwZWVkKTsKLQllbHNlCi0JCXptaWlfc2V0X3NwZWVkKGRldi0+em1paV9kZXYsIGRldi0+em1paV9pbnB1dCwgZGV2LT5waHkuc3BlZWQpOwotCi0jaWYgIWRlZmluZWQoQ09ORklHXzQweCkKLQkvKiBvbiA0MHggZXJyYXR1bSBmb3JjZXMgdXMgdG8gTk9UIHVzZSBpbnRlZ3JhdGVkIGZsb3cgY29udHJvbCwgCi0JICogbGV0J3MgaG9wZSBpdCB3b3JrcyBvbiA0NHggOykKLQkgKi8KLQlpZiAoZGV2LT5waHkuZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCWlmIChkZXYtPnBoeS5wYXVzZSkKLQkJCXIgfD0gRU1BQ19NUjFfRUlGQyB8IEVNQUNfTVIxX0FQUDsKLQkJZWxzZSBpZiAoZGV2LT5waHkuYXN5bV9wYXVzZSkKLQkJCXIgfD0gRU1BQ19NUjFfQVBQOwotCX0KLSNlbmRpZgotCW91dF9iZTMyKCZwLT5tcjEsIHIpOwotCi0JLyogU2V0IGluZGl2aWR1YWwgTUFDIGFkZHJlc3MgKi8KLQlvdXRfYmUzMigmcC0+aWFociwgKG5kZXYtPmRldl9hZGRyWzBdIDw8IDgpIHwgbmRldi0+ZGV2X2FkZHJbMV0pOwotCW91dF9iZTMyKCZwLT5pYWxyLCAobmRldi0+ZGV2X2FkZHJbMl0gPDwgMjQpIHwKLQkJIChuZGV2LT5kZXZfYWRkclszXSA8PCAxNikgfCAobmRldi0+ZGV2X2FkZHJbNF0gPDwgOCkgfAotCQkgbmRldi0+ZGV2X2FkZHJbNV0pOwotCi0JLyogVkxBTiBUYWcgUHJvdG9jb2wgSUQgKi8KLQlvdXRfYmUzMigmcC0+dnRwaWQsIDB4ODEwMCk7Ci0KLQkvKiBSZWNlaXZlIG1vZGUgcmVnaXN0ZXIgKi8KLQlyID0gZW1hY19pZmYycm1yKG5kZXYpOwotCWlmIChyICYgRU1BQ19STVJfTUFFKQotCQllbWFjX2hhc2hfbWMoZGV2KTsKLQlvdXRfYmUzMigmcC0+cm1yLCByKTsKLQotCS8qIEZJRk9zIHRocmVzaG9sZHMgKi8KLQlyID0gRU1BQ19UTVIxKChFTUFDX01BTF9CVVJTVF9TSVpFIC8gRU1BQ19GSUZPX0VOVFJZX1NJWkUpICsgMSwKLQkJICAgICAgRU1BQ19UWF9GSUZPX1NJWkUgLyAyIC8gRU1BQ19GSUZPX0VOVFJZX1NJWkUpOwotCW91dF9iZTMyKCZwLT50bXIxLCByKTsKLQlvdXRfYmUzMigmcC0+dHJ0ciwgRU1BQ19UUlRSKEVNQUNfVFhfRklGT19TSVpFIC8gMikpOwotCi0JLyogUEFVU0UgZnJhbWUgaXMgc2VudCB3aGVuIFJYIEZJRk8gcmVhY2hlcyBpdHMgaGlnaC13YXRlciBtYXJrLAotCSAgIHRoZXJlIHNob3VsZCBiZSBzdGlsbCBlbm91Z2ggc3BhY2UgaW4gRklGTyB0byBhbGxvdyB0aGUgb3VyIGxpbmsKLQkgICBwYXJ0bmVyIHRpbWUgdG8gcHJvY2VzcyB0aGlzIGZyYW1lIGFuZCBhbHNvIHRpbWUgdG8gc2VuZCBQQVVTRSAKLQkgICBmcmFtZSBpdHNlbGYuCi0KLQkgICBIZXJlIGlzIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIGZvciB0aGUgUlggRklGTyAiaGVhZHJvb20iCi0JICAgKGZyb20gIlRoZSBTd2l0Y2ggQm9vayIpICgxMDBNYnBzLCB3aXRob3V0IHByZWFtYmxlLCBpbnRlci1mcmFtZSBnYXApOgotCi0JICAgMSkgT25lIG1heGltdW0tbGVuZ3RoIGZyYW1lIG9uIFRYICAgICAgICAgICAgICAgICAgICAxNTIyIGJ5dGVzCi0JICAgMikgT25lIFBBVVNFIGZyYW1lIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0IGJ5dGVzCi0JICAgMykgUEFVU0UgZnJhbWUgZGVjb2RlIHRpbWUgYWxsb3dhbmNlICAgICAgICAgICAgICAgICAgIDY0IGJ5dGVzCi0JICAgNCkgT25lIG1heGltdW0tbGVuZ3RoIGZyYW1lIG9uIFJYICAgICAgICAgICAgICAgICAgICAxNTIyIGJ5dGVzCi0JICAgNSkgUm91bmQtdHJpcCBwcm9wYWdhdGlvbiBkZWxheSBvZiB0aGUgbGluayAoMTAwTWIpICAgIDE1IGJ5dGVzCi0JICAgLS0tLS0tLS0tLSAgICAgICAKLQkgICAzMTg3IGJ5dGVzCi0KLQkgICBJIGNob3NlIHRvIHNldCBoaWdoLXdhdGVyIG1hcmsgdG8gUlhfRklGT19TSVpFIC8gNCAoMTAyNCBieXRlcykKLQkgICBsb3ctd2F0ZXIgbWFyayAgdG8gUlhfRklGT19TSVpFIC8gOCAoNTEyIGJ5dGVzKQotCSAqLwotCXIgPSBFTUFDX1JXTVIoRU1BQ19SWF9GSUZPX1NJWkUoZ2lnZSkgLyA4IC8gRU1BQ19GSUZPX0VOVFJZX1NJWkUsCi0JCSAgICAgIEVNQUNfUlhfRklGT19TSVpFKGdpZ2UpIC8gNCAvIEVNQUNfRklGT19FTlRSWV9TSVpFKTsKLQlvdXRfYmUzMigmcC0+cndtciwgcik7Ci0KLQkvKiBTZXQgUEFVU0UgdGltZXIgdG8gdGhlIG1heGltdW0gKi8KLQlvdXRfYmUzMigmcC0+cHRyLCAweGZmZmYpOwotCi0JLyogSVJRIHNvdXJjZXMgKi8KLQlvdXRfYmUzMigmcC0+aXNlciwgRU1BQ19JU1JfVFhQRSB8IEVNQUNfSVNSX1JYUEUgfCAvKiBFTUFDX0lTUl9UWFVFIHwKLQkJIEVNQUNfSVNSX1JYT0UgfCAqLyBFTUFDX0lTUl9PVlIgfCBFTUFDX0lTUl9CUCB8IEVNQUNfSVNSX1NFIHwKLQkJIEVNQUNfSVNSX0FMRSB8IEVNQUNfSVNSX0JGQ1MgfCBFTUFDX0lTUl9QVExFIHwgRU1BQ19JU1JfT1JFIHwKLQkJIEVNQUNfSVNSX0lSRSB8IEVNQUNfSVNSX1RFKTsKLQkJIAotCS8qIFdlIG5lZWQgdG8gdGFrZSBHUENTIFBIWSBvdXQgb2YgaXNvbGF0ZSBtb2RlIGFmdGVyIEVNQUMgcmVzZXQgKi8KLQlpZiAoZW1hY19waHlfZ3BjcyhkZXYtPnBoeS5tb2RlKSkgCi0JCW1paV9yZXNldF9waHkoJmRldi0+cGh5KTsKLQkJIAotCXJldHVybiAwOwotfQotCi0vKiBCSHMgZGlzYWJsZWQgKi8KLXN0YXRpYyB2b2lkIGVtYWNfcmVpbml0aWFsaXplKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYpCi17Ci0JREJHKCIlZDogcmVpbml0aWFsaXplIiBOTCwgZGV2LT5kZWYtPmluZGV4KTsKLQotCWlmICghZW1hY19jb25maWd1cmUoZGV2KSkgewotCQllbWFjX3R4X2VuYWJsZShkZXYpOwotCQllbWFjX3J4X2VuYWJsZShkZXYpOwotCX0KLX0KLQotLyogQkhzIGRpc2FibGVkICovCi1zdGF0aWMgdm9pZCBlbWFjX2Z1bGxfdHhfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IG5kZXYtPnByaXY7Ci0Jc3RydWN0IG9jcF9mdW5jX2VtYWNfZGF0YSAqZW1hY2RhdGEgPSBkZXYtPmRlZi0+YWRkaXRpb25zOwotCi0JREJHKCIlZDogZnVsbF90eF9yZXNldCIgTkwsIGRldi0+ZGVmLT5pbmRleCk7Ci0KLQllbWFjX3R4X2Rpc2FibGUoZGV2KTsKLQltYWxfZGlzYWJsZV90eF9jaGFubmVsKGRldi0+bWFsLCBlbWFjZGF0YS0+bWFsX3R4X2NoYW4pOwotCWVtYWNfY2xlYW5fdHhfcmluZyhkZXYpOwotCWRldi0+dHhfY250ID0gZGV2LT50eF9zbG90ID0gZGV2LT5hY2tfc2xvdCA9IDA7Ci0KLQllbWFjX2NvbmZpZ3VyZShkZXYpOwotCi0JbWFsX2VuYWJsZV90eF9jaGFubmVsKGRldi0+bWFsLCBlbWFjZGF0YS0+bWFsX3R4X2NoYW4pOwotCWVtYWNfdHhfZW5hYmxlKGRldik7Ci0JZW1hY19yeF9lbmFibGUoZGV2KTsKLQotCW5ldGlmX3dha2VfcXVldWUobmRldik7Ci19Ci0KLXN0YXRpYyBpbnQgX19lbWFjX21kaW9fcmVhZChzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2LCB1OCBpZCwgdTggcmVnKQotewotCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7Ci0JdTMyIHI7Ci0JaW50IG47Ci0KLQlEQkcyKCIlZDogbWRpb19yZWFkKCUwMngsJTAyeCkiIE5MLCBkZXYtPmRlZi0+aW5kZXgsIGlkLCByZWcpOwotCi0JLyogRW5hYmxlIHByb3BlciBNRElPIHBvcnQgKi8KLQl6bWlpX2VuYWJsZV9tZGlvKGRldi0+em1paV9kZXYsIGRldi0+em1paV9pbnB1dCk7Ci0KLQkvKiBXYWl0IGZvciBtYW5hZ2VtZW50IGludGVyZmFjZSB0byBiZWNvbWUgaWRsZSAqLwotCW4gPSAxMDsKLQl3aGlsZSAoIWVtYWNfcGh5X2RvbmUoaW5fYmUzMigmcC0+c3RhY3IpKSkgewotCQl1ZGVsYXkoMSk7Ci0JCWlmICghLS1uKQotCQkJZ290byB0bzsKLQl9Ci0KLQkvKiBJc3N1ZSByZWFkIGNvbW1hbmQgKi8KLQlvdXRfYmUzMigmcC0+c3RhY3IsCi0JCSBFTUFDX1NUQUNSX0JBU0UoZW1hY19vcGJfbWh6KCkpIHwgRU1BQ19TVEFDUl9TVEFDX1JFQUQgfAotCQkgKHJlZyAmIEVNQUNfU1RBQ1JfUFJBX01BU0spCi0JCSB8ICgoaWQgJiBFTUFDX1NUQUNSX1BDREFfTUFTSykgPDwgRU1BQ19TVEFDUl9QQ0RBX1NISUZUKQotCQkgfCBFTUFDX1NUQUNSX1NUQVJUKTsKLQotCS8qIFdhaXQgZm9yIHJlYWQgdG8gY29tcGxldGUgKi8KLQluID0gMTAwOwotCXdoaWxlICghZW1hY19waHlfZG9uZShyID0gaW5fYmUzMigmcC0+c3RhY3IpKSkgewotCQl1ZGVsYXkoMSk7Ci0JCWlmICghLS1uKQotCQkJZ290byB0bzsKLQl9Ci0KLQlpZiAodW5saWtlbHkociAmIEVNQUNfU1RBQ1JfUEhZRSkpIHsKLQkJREJHKCIlZDogbWRpb19yZWFkKCUwMngsICUwMngpIGZhaWxlZCIgTkwsIGRldi0+ZGVmLT5pbmRleCwKLQkJICAgIGlkLCByZWcpOwotCQlyZXR1cm4gLUVSRU1PVEVJTzsKLQl9Ci0KLQlyID0gKChyID4+IEVNQUNfU1RBQ1JfUEhZRF9TSElGVCkgJiBFTUFDX1NUQUNSX1BIWURfTUFTSyk7Ci0JREJHMigiJWQ6IG1kaW9fcmVhZCAtPiAlMDR4IiBOTCwgZGV2LT5kZWYtPmluZGV4LCByKTsKLQlyZXR1cm4gcjsKLSAgICAgIHRvOgotCURCRygiJWQ6IE1JSSBtYW5hZ2VtZW50IGludGVyZmFjZSB0aW1lb3V0IChyZWFkKSIgTkwsIGRldi0+ZGVmLT5pbmRleCk7Ci0JcmV0dXJuIC1FVElNRURPVVQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZW1hY19tZGlvX3dyaXRlKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYsIHU4IGlkLCB1OCByZWcsCi0JCQkgICAgICB1MTYgdmFsKQotewotCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7Ci0JaW50IG47Ci0KLQlEQkcyKCIlZDogbWRpb193cml0ZSglMDJ4LCUwMngsJTA0eCkiIE5MLCBkZXYtPmRlZi0+aW5kZXgsIGlkLCByZWcsCi0JICAgICB2YWwpOwotCi0JLyogRW5hYmxlIHByb3BlciBNRElPIHBvcnQgKi8KLQl6bWlpX2VuYWJsZV9tZGlvKGRldi0+em1paV9kZXYsIGRldi0+em1paV9pbnB1dCk7Ci0KLQkvKiBXYWl0IGZvciBtYW5hZ2VtZW50IGludGVyZmFjZSB0byBiZSBpZGxlICovCi0JbiA9IDEwOwotCXdoaWxlICghZW1hY19waHlfZG9uZShpbl9iZTMyKCZwLT5zdGFjcikpKSB7Ci0JCXVkZWxheSgxKTsKLQkJaWYgKCEtLW4pCi0JCQlnb3RvIHRvOwotCX0KLQotCS8qIElzc3VlIHdyaXRlIGNvbW1hbmQgKi8KLQlvdXRfYmUzMigmcC0+c3RhY3IsCi0JCSBFTUFDX1NUQUNSX0JBU0UoZW1hY19vcGJfbWh6KCkpIHwgRU1BQ19TVEFDUl9TVEFDX1dSSVRFIHwKLQkJIChyZWcgJiBFTUFDX1NUQUNSX1BSQV9NQVNLKSB8Ci0JCSAoKGlkICYgRU1BQ19TVEFDUl9QQ0RBX01BU0spIDw8IEVNQUNfU1RBQ1JfUENEQV9TSElGVCkgfAotCQkgKHZhbCA8PCBFTUFDX1NUQUNSX1BIWURfU0hJRlQpIHwgRU1BQ19TVEFDUl9TVEFSVCk7Ci0KLQkvKiBXYWl0IGZvciB3cml0ZSB0byBjb21wbGV0ZSAqLwotCW4gPSAxMDA7Ci0Jd2hpbGUgKCFlbWFjX3BoeV9kb25lKGluX2JlMzIoJnAtPnN0YWNyKSkpIHsKLQkJdWRlbGF5KDEpOwotCQlpZiAoIS0tbikKLQkJCWdvdG8gdG87Ci0JfQotCXJldHVybjsKLSAgICAgIHRvOgotCURCRygiJWQ6IE1JSSBtYW5hZ2VtZW50IGludGVyZmFjZSB0aW1lb3V0ICh3cml0ZSkiIE5MLCBkZXYtPmRlZi0+aW5kZXgpOwotfQotCi1zdGF0aWMgaW50IGVtYWNfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaWQsIGludCByZWcpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IG5kZXYtPnByaXY7Ci0JaW50IHJlczsKLQotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlyZXMgPSBfX2VtYWNfbWRpb19yZWFkKGRldi0+bWRpb19kZXYgPyBkZXYtPm1kaW9fZGV2IDogZGV2LCAodTgpIGlkLAotCQkJICAgICAgICh1OCkgcmVnKTsKLQlsb2NhbF9iaF9lbmFibGUoKTsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZCBlbWFjX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBpZCwgaW50IHJlZywgaW50IHZhbCkKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gbmRldi0+cHJpdjsKLQotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlfX2VtYWNfbWRpb193cml0ZShkZXYtPm1kaW9fZGV2ID8gZGV2LT5tZGlvX2RldiA6IGRldiwgKHU4KSBpZCwKLQkJCSAgKHU4KSByZWcsICh1MTYpIHZhbCk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7Ci19Ci0KLS8qIEJIcyBkaXNhYmxlZCAqLwotc3RhdGljIHZvaWQgZW1hY19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IG5kZXYtPnByaXY7Ci0Jc3RydWN0IGVtYWNfcmVncyBfX2lvbWVtICpwID0gZGV2LT5lbWFjcDsKLQl1MzIgcm1yID0gZW1hY19pZmYycm1yKG5kZXYpOwotCi0JREJHKCIlZDogbXVsdGljYXN0ICUwOHgiIE5MLCBkZXYtPmRlZi0+aW5kZXgsIHJtcik7Ci0JQlVHX09OKCFuZXRpZl9ydW5uaW5nKGRldi0+bmRldikpOwotCi0JLyogSSBkZWNpZGVkIHRvIHJlbGF4IHJlZ2lzdGVyIGFjY2VzcyBydWxlcyBoZXJlIHRvIGF2b2lkCi0JICogZnVsbCBFTUFDIHJlc2V0LgotCSAqCi0JICogVGhlcmUgaXMgYSByZWFsIHByb2JsZW0gd2l0aCBFTUFDNCBjb3JlIGlmIHdlIHVzZSBNV1NXXzAwMSBiaXQgCi0JICogaW4gTVIxIHJlZ2lzdGVyIGFuZCBkbyBhIGZ1bGwgRU1BQyByZXNldC4KLQkgKiBPbmUgVFggQkQgc3RhdHVzIHVwZGF0ZSBpcyBkZWxheWVkIGFuZCwgYWZ0ZXIgRU1BQyByZXNldCwgaXQgCi0JICogbmV2ZXIgaGFwcGVucywgcmVzdWx0aW5nIGluIFRYIGh1bmcgKGl0J2xsIGJlIHJlY292ZXJlZCBieSBUWCAKLQkgKiB0aW1lb3V0IGhhbmRsZXIgZXZlbnR1YWxseSwgYnV0IHRoaXMgaXMganVzdCBncm9zcykuCi0JICogU28gd2UgZWl0aGVyIGhhdmUgdG8gZG8gZnVsbCBUWCByZXNldCBvciB0cnkgdG8gY2hlYXQgaGVyZSA6KQotCSAqCi0JICogVGhlIG9ubHkgcmVxdWlyZWQgY2hhbmdlIGlzIHRvIFJYIG1vZGUgcmVnaXN0ZXIsIHNvIEkgKnRoaW5rKiBhbGwKLQkgKiB3ZSBuZWVkIGlzIGp1c3QgdG8gc3RvcCBSWCBjaGFubmVsLiBUaGlzIHNlZW1zIHRvIHdvcmsgb24gYWxsCi0JICogdGVzdGVkIFNvQ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lYnMKLQkgKi8KLQllbWFjX3J4X2Rpc2FibGUoZGV2KTsKLQlpZiAocm1yICYgRU1BQ19STVJfTUFFKQotCQllbWFjX2hhc2hfbWMoZGV2KTsKLQlvdXRfYmUzMigmcC0+cm1yLCBybXIpOwotCWVtYWNfcnhfZW5hYmxlKGRldik7Ci19Ci0KLS8qIEJIcyBkaXNhYmxlZCAqLwotc3RhdGljIGludCBlbWFjX3Jlc2l6ZV9yeF9yaW5nKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYsIGludCBuZXdfbXR1KQotewotCXN0cnVjdCBvY3BfZnVuY19lbWFjX2RhdGEgKmVtYWNkYXRhID0gZGV2LT5kZWYtPmFkZGl0aW9uczsKLQlpbnQgcnhfc3luY19zaXplID0gZW1hY19yeF9zeW5jX3NpemUobmV3X210dSk7Ci0JaW50IHJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jfc2l6ZShuZXdfbXR1KTsKLQlpbnQgaSwgcmV0ID0gMDsKLQotCWVtYWNfcnhfZGlzYWJsZShkZXYpOwotCW1hbF9kaXNhYmxlX3J4X2NoYW5uZWwoZGV2LT5tYWwsIGVtYWNkYXRhLT5tYWxfcnhfY2hhbik7Ci0KLQlpZiAoZGV2LT5yeF9zZ19za2IpIHsKLQkJKytkZXYtPmVzdGF0cy5yeF9kcm9wcGVkX3Jlc2l6ZTsKLQkJZGV2X2tmcmVlX3NrYihkZXYtPnJ4X3NnX3NrYik7Ci0JCWRldi0+cnhfc2dfc2tiID0gTlVMTDsKLQl9Ci0KLQkvKiBNYWtlIGEgZmlyc3QgcGFzcyBvdmVyIFJYIHJpbmcgYW5kIG1hcmsgQkRzIHJlYWR5LCBkcm9wcGluZyAKLQkgKiBub24tcHJvY2Vzc2VkIHBhY2tldHMgb24gdGhlIHdheS4gV2UgbmVlZCB0aGlzIGFzIGEgc2VwYXJhdGUgcGFzcwotCSAqIHRvIHNpbXBsaWZ5IGVycm9yIHJlY292ZXJ5IGluIHRoZSBjYXNlIG9mIGFsbG9jYXRpb24gZmFpbHVyZSBsYXRlci4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0JVRkY7ICsraSkgewotCQlpZiAoZGV2LT5yeF9kZXNjW2ldLmN0cmwgJiBNQUxfUlhfQ1RSTF9GSVJTVCkKLQkJCSsrZGV2LT5lc3RhdHMucnhfZHJvcHBlZF9yZXNpemU7Ci0KLQkJZGV2LT5yeF9kZXNjW2ldLmRhdGFfbGVuID0gMDsKLQkJZGV2LT5yeF9kZXNjW2ldLmN0cmwgPSBNQUxfUlhfQ1RSTF9FTVBUWSB8Ci0JCSAgICAoaSA9PSAoTlVNX1JYX0JVRkYgLSAxKSA/IE1BTF9SWF9DVFJMX1dSQVAgOiAwKTsKLQl9Ci0KLQkvKiBSZWFsbG9jYXRlIFJYIHJpbmcgb25seSBpZiBiaWdnZXIgc2tiIGJ1ZmZlcnMgYXJlIHJlcXVpcmVkICovCi0JaWYgKHJ4X3NrYl9zaXplIDw9IGRldi0+cnhfc2tiX3NpemUpCi0JCWdvdG8gc2tpcDsKLQotCS8qIFNlY29uZCBwYXNzLCBhbGxvY2F0ZSBuZXcgc2ticyAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQlVGRjsgKytpKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2Iocnhfc2tiX3NpemUsIEdGUF9BVE9NSUMpOwotCQlpZiAoIXNrYikgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb29tOwotCQl9Ci0KLQkJQlVHX09OKCFkZXYtPnJ4X3NrYltpXSk7Ci0JCWRldl9rZnJlZV9za2IoZGV2LT5yeF9za2JbaV0pOwotCi0JCXNrYl9yZXNlcnZlKHNrYiwgRU1BQ19SWF9TS0JfSEVBRFJPT00gKyAyKTsKLQkJZGV2LT5yeF9kZXNjW2ldLmRhdGFfcHRyID0KLQkJICAgIGRtYV9tYXBfc2luZ2xlKGRldi0+bGRldiwgc2tiLT5kYXRhIC0gMiwgcnhfc3luY19zaXplLAotCQkJCSAgIERNQV9GUk9NX0RFVklDRSkgKyAyOwotCQlkZXYtPnJ4X3NrYltpXSA9IHNrYjsKLQl9Ci0gICAgICBza2lwOgotCS8qIENoZWNrIGlmIHdlIG5lZWQgdG8gY2hhbmdlICJKdW1ibyIgYml0IGluIE1SMSAqLwotCWlmICgobmV3X210dSA+IEVUSF9EQVRBX0xFTikgXiAoZGV2LT5uZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pKSB7Ci0JCS8qIFRoaXMgaXMgdG8gcHJldmVudCBzdGFydGluZyBSWCBjaGFubmVsIGluIGVtYWNfcnhfZW5hYmxlKCkgKi8KLQkJZGV2LT5jb21tYWMucnhfc3RvcHBlZCA9IDE7Ci0KLQkJZGV2LT5uZGV2LT5tdHUgPSBuZXdfbXR1OwotCQllbWFjX2Z1bGxfdHhfcmVzZXQoZGV2LT5uZGV2KTsKLQl9Ci0KLQltYWxfc2V0X3JjYnMoZGV2LT5tYWwsIGVtYWNkYXRhLT5tYWxfcnhfY2hhbiwgZW1hY19yeF9zaXplKG5ld19tdHUpKTsKLSAgICAgIG9vbToKLQkvKiBSZXN0YXJ0IFJYICovCi0JZGV2LT5jb21tYWMucnhfc3RvcHBlZCA9IGRldi0+cnhfc2xvdCA9IDA7Ci0JbWFsX2VuYWJsZV9yeF9jaGFubmVsKGRldi0+bWFsLCBlbWFjZGF0YS0+bWFsX3J4X2NoYW4pOwotCWVtYWNfcnhfZW5hYmxlKGRldik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBQcm9jZXNzIGN0eCwgcnRubF9sb2NrIHNlbWFwaG9yZSAqLwotc3RhdGljIGludCBlbWFjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuZXdfbXR1KQotewotCXN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYgPSBuZGV2LT5wcml2OwotCWludCByZXQgPSAwOwotCi0JaWYgKG5ld19tdHUgPCBFTUFDX01JTl9NVFUgfHwgbmV3X210dSA+IEVNQUNfTUFYX01UVSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlEQkcoIiVkOiBjaGFuZ2VfbXR1KCVkKSIgTkwsIGRldi0+ZGVmLT5pbmRleCwgbmV3X210dSk7Ci0KLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKLQkJLyogQ2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdG8gcmVpbml0YWxpemUgUlggcmluZyAqLwotCQlpZiAoZW1hY19yeF9za2Jfc2l6ZShuZGV2LT5tdHUpICE9IGVtYWNfcnhfc2tiX3NpemUobmV3X210dSkpCi0JCQlyZXQgPSBlbWFjX3Jlc2l6ZV9yeF9yaW5nKGRldiwgbmV3X210dSk7Ci0JfQotCi0JaWYgKCFyZXQpIHsKLQkJbmRldi0+bXR1ID0gbmV3X210dTsKLQkJZGV2LT5yeF9za2Jfc2l6ZSA9IGVtYWNfcnhfc2tiX3NpemUobmV3X210dSk7Ci0JCWRldi0+cnhfc3luY19zaXplID0gZW1hY19yeF9zeW5jX3NpemUobmV3X210dSk7Ci0JfQkKLQlsb2NhbF9iaF9lbmFibGUoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtYWNfY2xlYW5fdHhfcmluZyhzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfQlVGRjsgKytpKSB7Ci0JCWlmIChkZXYtPnR4X3NrYltpXSkgewotCQkJZGV2X2tmcmVlX3NrYihkZXYtPnR4X3NrYltpXSk7Ci0JCQlkZXYtPnR4X3NrYltpXSA9IE5VTEw7Ci0JCQlpZiAoZGV2LT50eF9kZXNjW2ldLmN0cmwgJiBNQUxfVFhfQ1RSTF9SRUFEWSkKLQkJCQkrK2Rldi0+ZXN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCX0KLQkJZGV2LT50eF9kZXNjW2ldLmN0cmwgPSAwOwotCQlkZXYtPnR4X2Rlc2NbaV0uZGF0YV9wdHIgPSAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZW1hY19jbGVhbl9yeF9yaW5nKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9SWF9CVUZGOyArK2kpCi0JCWlmIChkZXYtPnJ4X3NrYltpXSkgewotCQkJZGV2LT5yeF9kZXNjW2ldLmN0cmwgPSAwOwotCQkJZGV2X2tmcmVlX3NrYihkZXYtPnJ4X3NrYltpXSk7Ci0JCQlkZXYtPnJ4X3NrYltpXSA9IE5VTEw7Ci0JCQlkZXYtPnJ4X2Rlc2NbaV0uZGF0YV9wdHIgPSAwOwotCQl9Ci0KLQlpZiAoZGV2LT5yeF9zZ19za2IpIHsKLQkJZGV2X2tmcmVlX3NrYihkZXYtPnJ4X3NnX3NrYik7Ci0JCWRldi0+cnhfc2dfc2tiID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGVtYWNfYWxsb2Nfcnhfc2tiKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYsIGludCBzbG90LAotCQkJCSAgICBnZnBfdCBmbGFncykKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKGRldi0+cnhfc2tiX3NpemUsIGZsYWdzKTsKLQlpZiAodW5saWtlbHkoIXNrYikpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGV2LT5yeF9za2Jbc2xvdF0gPSBza2I7Ci0JZGV2LT5yeF9kZXNjW3Nsb3RdLmRhdGFfbGVuID0gMDsKLQotCXNrYl9yZXNlcnZlKHNrYiwgRU1BQ19SWF9TS0JfSEVBRFJPT00gKyAyKTsKLQlkZXYtPnJ4X2Rlc2Nbc2xvdF0uZGF0YV9wdHIgPSAKLQkgICAgZG1hX21hcF9zaW5nbGUoZGV2LT5sZGV2LCBza2ItPmRhdGEgLSAyLCBkZXYtPnJ4X3N5bmNfc2l6ZSwgCi0JCQkgICBETUFfRlJPTV9ERVZJQ0UpICsgMjsKLQliYXJyaWVyKCk7Ci0JZGV2LT5yeF9kZXNjW3Nsb3RdLmN0cmwgPSBNQUxfUlhfQ1RSTF9FTVBUWSB8Ci0JICAgIChzbG90ID09IChOVU1fUlhfQlVGRiAtIDEpID8gTUFMX1JYX0NUUkxfV1JBUCA6IDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtYWNfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldikKLXsKLQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtPm5kZXYpKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBpcyB1cCwgJWQgJXMlc1xuIiwKLQkJICAgICAgIGRldi0+bmRldi0+bmFtZSwgZGV2LT5waHkuc3BlZWQsCi0JCSAgICAgICBkZXYtPnBoeS5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPyAiRkRYIiA6ICJIRFgiLAotCQkgICAgICAgZGV2LT5waHkucGF1c2UgPyAiLCBwYXVzZSBlbmFibGVkIiA6Ci0JCSAgICAgICBkZXYtPnBoeS5hc3ltX3BhdXNlID8gIiwgYXNzeW1ldHJpYyBwYXVzZSBlbmFibGVkIiA6ICIiKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGlzIGRvd25cbiIsIGRldi0+bmRldi0+bmFtZSk7Ci19Ci0KLS8qIFByb2Nlc3MgY3R4LCBydG5sX2xvY2sgc2VtYXBob3JlICovCi1zdGF0aWMgaW50IGVtYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gbmRldi0+cHJpdjsKLQlzdHJ1Y3Qgb2NwX2Z1bmNfZW1hY19kYXRhICplbWFjZGF0YSA9IGRldi0+ZGVmLT5hZGRpdGlvbnM7Ci0JaW50IGVyciwgaTsKLQotCURCRygiJWQ6IG9wZW4iIE5MLCBkZXYtPmRlZi0+aW5kZXgpOwotCi0JLyogU2V0dXAgZXJyb3IgSVJRIGhhbmRsZXIgKi8KLQllcnIgPSByZXF1ZXN0X2lycShkZXYtPmRlZi0+aXJxLCBlbWFjX2lycSwgMCwgIkVNQUMiLCBkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlcXVlc3QgSVJRICVkXG4iLAotCQkgICAgICAgbmRldi0+bmFtZSwgZGV2LT5kZWYtPmlycSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogQWxsb2NhdGUgUlggcmluZyAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQlVGRjsgKytpKQotCQlpZiAoZW1hY19hbGxvY19yeF9za2IoZGV2LCBpLCBHRlBfS0VSTkVMKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIFJYIHJpbmdcbiIsCi0JCQkgICAgICAgbmRldi0+bmFtZSk7Ci0JCQlnb3RvIG9vbTsKLQkJfQotCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCWRldi0+dHhfY250ID0gZGV2LT50eF9zbG90ID0gZGV2LT5hY2tfc2xvdCA9IGRldi0+cnhfc2xvdCA9Ci0JICAgIGRldi0+Y29tbWFjLnJ4X3N0b3BwZWQgPSAwOwotCWRldi0+cnhfc2dfc2tiID0gTlVMTDsKLQotCWlmIChkZXYtPnBoeS5hZGRyZXNzID49IDApIHsKLQkJaW50IGxpbmtfcG9sbF9pbnRlcnZhbDsKLQkJaWYgKGRldi0+cGh5LmRlZi0+b3BzLT5wb2xsX2xpbmsoJmRldi0+cGh5KSkgewotCQkJZGV2LT5waHkuZGVmLT5vcHMtPnJlYWRfbGluaygmZGV2LT5waHkpOwotCQkJRU1BQ19SWF9DTEtfREVGQVVMVChkZXYtPmRlZi0+aW5kZXgpOwotCQkJbmV0aWZfY2Fycmllcl9vbihkZXYtPm5kZXYpOwotCQkJbGlua19wb2xsX2ludGVydmFsID0gUEhZX1BPTExfTElOS19PTjsKLQkJfSBlbHNlIHsKLQkJCUVNQUNfUlhfQ0xLX1RYKGRldi0+ZGVmLT5pbmRleCk7Ci0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYtPm5kZXYpOwotCQkJbGlua19wb2xsX2ludGVydmFsID0gUEhZX1BPTExfTElOS19PRkY7Ci0JCX0KLQkJbW9kX3RpbWVyKCZkZXYtPmxpbmtfdGltZXIsIGppZmZpZXMgKyBsaW5rX3BvbGxfaW50ZXJ2YWwpOwotCQllbWFjX3ByaW50X2xpbmtfc3RhdHVzKGRldik7Ci0JfSBlbHNlCi0JCW5ldGlmX2NhcnJpZXJfb24oZGV2LT5uZGV2KTsKLQotCWVtYWNfY29uZmlndXJlKGRldik7Ci0JbWFsX3BvbGxfYWRkKGRldi0+bWFsLCAmZGV2LT5jb21tYWMpOwotCW1hbF9lbmFibGVfdHhfY2hhbm5lbChkZXYtPm1hbCwgZW1hY2RhdGEtPm1hbF90eF9jaGFuKTsKLQltYWxfc2V0X3JjYnMoZGV2LT5tYWwsIGVtYWNkYXRhLT5tYWxfcnhfY2hhbiwgZW1hY19yeF9zaXplKG5kZXYtPm10dSkpOwotCW1hbF9lbmFibGVfcnhfY2hhbm5lbChkZXYtPm1hbCwgZW1hY2RhdGEtPm1hbF9yeF9jaGFuKTsKLQllbWFjX3R4X2VuYWJsZShkZXYpOwotCWVtYWNfcnhfZW5hYmxlKGRldik7Ci0JbmV0aWZfc3RhcnRfcXVldWUobmRldik7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7Ci0KLQlyZXR1cm4gMDsKLSAgICAgIG9vbToKLQllbWFjX2NsZWFuX3J4X3JpbmcoZGV2KTsKLQlmcmVlX2lycShkZXYtPmRlZi0+aXJxLCBkZXYpOwotCXJldHVybiAtRU5PTUVNOwotfQotCi0vKiBCSHMgZGlzYWJsZWQgKi8KLXN0YXRpYyBpbnQgZW1hY19saW5rX2RpZmZlcnMoc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldikKLXsKLQl1MzIgciA9IGluX2JlMzIoJmRldi0+ZW1hY3AtPm1yMSk7Ci0KLQlpbnQgZHVwbGV4ID0gciAmIEVNQUNfTVIxX0ZERSA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7Ci0JaW50IHNwZWVkLCBwYXVzZSwgYXN5bV9wYXVzZTsKLQotCWlmIChyICYgRU1BQ19NUjFfTUZfMTAwMCkKLQkJc3BlZWQgPSBTUEVFRF8xMDAwOwotCWVsc2UgaWYgKHIgJiBFTUFDX01SMV9NRl8xMDApCi0JCXNwZWVkID0gU1BFRURfMTAwOwotCWVsc2UKLQkJc3BlZWQgPSBTUEVFRF8xMDsKLQotCXN3aXRjaCAociAmIChFTUFDX01SMV9FSUZDIHwgRU1BQ19NUjFfQVBQKSkgewotCWNhc2UgKEVNQUNfTVIxX0VJRkMgfCBFTUFDX01SMV9BUFApOgotCQlwYXVzZSA9IDE7Ci0JCWFzeW1fcGF1c2UgPSAwOwotCQlicmVhazsKLQljYXNlIEVNQUNfTVIxX0FQUDoKLQkJcGF1c2UgPSAwOwotCQlhc3ltX3BhdXNlID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcGF1c2UgPSBhc3ltX3BhdXNlID0gMDsKLQl9Ci0JcmV0dXJuIHNwZWVkICE9IGRldi0+cGh5LnNwZWVkIHx8IGR1cGxleCAhPSBkZXYtPnBoeS5kdXBsZXggfHwKLQkgICAgcGF1c2UgIT0gZGV2LT5waHkucGF1c2UgfHwgYXN5bV9wYXVzZSAhPSBkZXYtPnBoeS5hc3ltX3BhdXNlOwotfQotCi0vKiBCSHMgZGlzYWJsZWQgKi8KLXN0YXRpYyB2b2lkIGVtYWNfbGlua190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IChzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqKWRhdGE7Ci0JaW50IGxpbmtfcG9sbF9pbnRlcnZhbDsKLQotCURCRzIoIiVkOiBsaW5rIHRpbWVyIiBOTCwgZGV2LT5kZWYtPmluZGV4KTsKLQotCWlmIChkZXYtPnBoeS5kZWYtPm9wcy0+cG9sbF9saW5rKCZkZXYtPnBoeSkpIHsKLQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldi0+bmRldikpIHsKLQkJCUVNQUNfUlhfQ0xLX0RFRkFVTFQoZGV2LT5kZWYtPmluZGV4KTsKLQotCQkJLyogR2V0IG5ldyBsaW5rIHBhcmFtZXRlcnMgKi8KLQkJCWRldi0+cGh5LmRlZi0+b3BzLT5yZWFkX2xpbmsoJmRldi0+cGh5KTsKLQotCQkJaWYgKGRldi0+dGFoX2RldiB8fCBlbWFjX2xpbmtfZGlmZmVycyhkZXYpKQotCQkJCWVtYWNfZnVsbF90eF9yZXNldChkZXYtPm5kZXYpOwotCi0JCQluZXRpZl9jYXJyaWVyX29uKGRldi0+bmRldik7Ci0JCQllbWFjX3ByaW50X2xpbmtfc3RhdHVzKGRldik7Ci0JCX0KLQkJbGlua19wb2xsX2ludGVydmFsID0gUEhZX1BPTExfTElOS19PTjsKLQl9IGVsc2UgewotCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtPm5kZXYpKSB7Ci0JCQlFTUFDX1JYX0NMS19UWChkZXYtPmRlZi0+aW5kZXgpOwotI2lmIGRlZmluZWQoQ09ORklHX0lCTV9FTUFDX1BIWV9SWF9DTEtfRklYKQotCQkJZW1hY19yZWluaXRpYWxpemUoZGV2KTsKLSNlbmRpZgotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZGV2KTsKLQkJCWVtYWNfcHJpbnRfbGlua19zdGF0dXMoZGV2KTsKLQkJfQotCi0JCS8qIFJldHJ5IHJlc2V0IGlmIHRoZSBwcmV2aW91cyBhdHRlbXB0IGZhaWxlZC4KLQkJICogVGhpcyBpcyBuZWVkZWQgbW9zdGx5IGZvciBDT05GSUdfSUJNX0VNQUNfUEhZX1JYX0NMS19GSVgKLQkJICogY2FzZSwgYnV0IEkgbGVmdCBpdCBoZXJlIGJlY2F1c2UgaXQgc2hvdWxkbid0IHRyaWdnZXIgZm9yCi0JCSAqIHNhbmUgUEhZcyBhbnl3YXkuCi0JCSAqLwotCQlpZiAodW5saWtlbHkoZGV2LT5yZXNldF9mYWlsZWQpKQotCQkJZW1hY19yZWluaXRpYWxpemUoZGV2KTsKLQotCQlsaW5rX3BvbGxfaW50ZXJ2YWwgPSBQSFlfUE9MTF9MSU5LX09GRjsKLQl9Ci0JbW9kX3RpbWVyKCZkZXYtPmxpbmtfdGltZXIsIGppZmZpZXMgKyBsaW5rX3BvbGxfaW50ZXJ2YWwpOwotfQotCi0vKiBCSHMgZGlzYWJsZWQgKi8KLXN0YXRpYyB2b2lkIGVtYWNfZm9yY2VfbGlua191cGRhdGUoc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldikKLXsKLQluZXRpZl9jYXJyaWVyX29mZihkZXYtPm5kZXYpOwotCWlmICh0aW1lcl9wZW5kaW5nKCZkZXYtPmxpbmtfdGltZXIpKQotCQltb2RfdGltZXIoJmRldi0+bGlua190aW1lciwgamlmZmllcyArIFBIWV9QT0xMX0xJTktfT0ZGKTsKLX0KLQotLyogUHJvY2VzcyBjdHgsIHJ0bmxfbG9jayBzZW1hcGhvcmUgKi8KLXN0YXRpYyBpbnQgZW1hY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gbmRldi0+cHJpdjsKLQlzdHJ1Y3Qgb2NwX2Z1bmNfZW1hY19kYXRhICplbWFjZGF0YSA9IGRldi0+ZGVmLT5hZGRpdGlvbnM7Ci0KLQlEQkcoIiVkOiBjbG9zZSIgTkwsIGRldi0+ZGVmLT5pbmRleCk7Ci0KLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0KLQlpZiAoZGV2LT5waHkuYWRkcmVzcyA+PSAwKQotCQlkZWxfdGltZXJfc3luYygmZGV2LT5saW5rX3RpbWVyKTsKLQotCW5ldGlmX3N0b3BfcXVldWUobmRldik7Ci0JZW1hY19yeF9kaXNhYmxlKGRldik7Ci0JZW1hY190eF9kaXNhYmxlKGRldik7Ci0JbWFsX2Rpc2FibGVfcnhfY2hhbm5lbChkZXYtPm1hbCwgZW1hY2RhdGEtPm1hbF9yeF9jaGFuKTsKLQltYWxfZGlzYWJsZV90eF9jaGFubmVsKGRldi0+bWFsLCBlbWFjZGF0YS0+bWFsX3R4X2NoYW4pOwotCW1hbF9wb2xsX2RlbChkZXYtPm1hbCwgJmRldi0+Y29tbWFjKTsKLQlsb2NhbF9iaF9lbmFibGUoKTsKLQotCWVtYWNfY2xlYW5fdHhfcmluZyhkZXYpOwotCWVtYWNfY2xlYW5fcnhfcmluZyhkZXYpOwotCWZyZWVfaXJxKGRldi0+ZGVmLT5pcnEsIGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgZW1hY190eF9jc3VtKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19JQk1fRU1BQ19UQUgpCi0JaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJKytkZXYtPnN0YXRzLnR4X3BhY2tldHNfY3N1bTsKLQkJcmV0dXJuIEVNQUNfVFhfQ1RSTF9UQUhfQ1NVTTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZW1hY194bWl0X2ZpbmlzaChzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2LCBpbnQgbGVuKQotewotCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXYtPm5kZXY7Ci0KLQkvKiBTZW5kIHRoZSBwYWNrZXQgb3V0ICovCi0Jb3V0X2JlMzIoJnAtPnRtcjAsIEVNQUNfVE1SMF9YTUlUKTsKLQotCWlmICh1bmxpa2VseSgrK2Rldi0+dHhfY250ID09IE5VTV9UWF9CVUZGKSkgewotCQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwotCQlEQkcyKCIlZDogc3RvcHBlZCBUWCBxdWV1ZSIgTkwsIGRldi0+ZGVmLT5pbmRleCk7Ci0JfQotCi0JbmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCSsrZGV2LT5zdGF0cy50eF9wYWNrZXRzOwotCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEJIcyBkaXNhYmxlZCAqLwotc3RhdGljIGludCBlbWFjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IG5kZXYtPnByaXY7Ci0JdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwotCWludCBzbG90OwotCi0JdTE2IGN0cmwgPSBFTUFDX1RYX0NUUkxfR0ZDUyB8IEVNQUNfVFhfQ1RSTF9HUCB8IE1BTF9UWF9DVFJMX1JFQURZIHwKLQkgICAgTUFMX1RYX0NUUkxfTEFTVCB8IGVtYWNfdHhfY3N1bShkZXYsIHNrYik7Ci0KLQlzbG90ID0gZGV2LT50eF9zbG90Kys7Ci0JaWYgKGRldi0+dHhfc2xvdCA9PSBOVU1fVFhfQlVGRikgewotCQlkZXYtPnR4X3Nsb3QgPSAwOwotCQljdHJsIHw9IE1BTF9UWF9DVFJMX1dSQVA7Ci0JfQotCi0JREJHMigiJWQ6IHhtaXQoJXUpICVkIiBOTCwgZGV2LT5kZWYtPmluZGV4LCBsZW4sIHNsb3QpOwotCi0JZGV2LT50eF9za2Jbc2xvdF0gPSBza2I7Ci0JZGV2LT50eF9kZXNjW3Nsb3RdLmRhdGFfcHRyID0gZG1hX21hcF9zaW5nbGUoZGV2LT5sZGV2LCBza2ItPmRhdGEsIGxlbiwKLQkJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7Ci0JZGV2LT50eF9kZXNjW3Nsb3RdLmRhdGFfbGVuID0gKHUxNikgbGVuOwotCWJhcnJpZXIoKTsKLQlkZXYtPnR4X2Rlc2Nbc2xvdF0uY3RybCA9IGN0cmw7Ci0KLQlyZXR1cm4gZW1hY194bWl0X2ZpbmlzaChkZXYsIGxlbik7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JQk1fRU1BQ19UQUgpCi1zdGF0aWMgaW5saW5lIGludCBlbWFjX3htaXRfc3BsaXQoc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiwgaW50IHNsb3QsCi0JCQkJICB1MzIgcGQsIGludCBsZW4sIGludCBsYXN0LCB1MTYgYmFzZV9jdHJsKQotewotCXdoaWxlICgxKSB7Ci0JCXUxNiBjdHJsID0gYmFzZV9jdHJsOwotCQlpbnQgY2h1bmsgPSBtaW4obGVuLCBNQUxfTUFYX1RYX1NJWkUpOwotCQlsZW4gLT0gY2h1bms7Ci0KLQkJc2xvdCA9IChzbG90ICsgMSkgJSBOVU1fVFhfQlVGRjsKLQotCQlpZiAobGFzdCAmJiAhbGVuKQotCQkJY3RybCB8PSBNQUxfVFhfQ1RSTF9MQVNUOwotCQlpZiAoc2xvdCA9PSBOVU1fVFhfQlVGRiAtIDEpCi0JCQljdHJsIHw9IE1BTF9UWF9DVFJMX1dSQVA7Ci0KLQkJZGV2LT50eF9za2Jbc2xvdF0gPSBOVUxMOwotCQlkZXYtPnR4X2Rlc2Nbc2xvdF0uZGF0YV9wdHIgPSBwZDsKLQkJZGV2LT50eF9kZXNjW3Nsb3RdLmRhdGFfbGVuID0gKHUxNikgY2h1bms7Ci0JCWRldi0+dHhfZGVzY1tzbG90XS5jdHJsID0gY3RybDsKLQkJKytkZXYtPnR4X2NudDsKLQotCQlpZiAoIWxlbikKLQkJCWJyZWFrOwotCi0JCXBkICs9IGNodW5rOwotCX0KLQlyZXR1cm4gc2xvdDsKLX0KLQotLyogQkhzIGRpc2FibGVkIChTRyB2ZXJzaW9uIGZvciBUQUggZXF1aXBwZWQgRU1BQ3MpICovCi1zdGF0aWMgaW50IGVtYWNfc3RhcnRfeG1pdF9zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gbmRldi0+cHJpdjsKLQlpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwotCWludCBsZW4gPSBza2ItPmxlbiwgY2h1bms7Ci0JaW50IHNsb3QsIGk7Ci0JdTE2IGN0cmw7Ci0JdTMyIHBkOwotCi0JLyogVGhpcyBpcyBjb21tb24gImZhc3QiIHBhdGggKi8KLQlpZiAobGlrZWx5KCFucl9mcmFncyAmJiBsZW4gPD0gTUFMX01BWF9UWF9TSVpFKSkKLQkJcmV0dXJuIGVtYWNfc3RhcnRfeG1pdChza2IsIG5kZXYpOwotCi0JbGVuIC09IHNrYi0+ZGF0YV9sZW47Ci0KLQkvKiBOb3RlLCB0aGlzIGlzIG9ubHkgYW4gKmVzdGltYXRpb24qLCB3ZSBjYW4gc3RpbGwgcnVuIG91dCBvZiBlbXB0eQotCSAqIHNsb3RzIGJlY2F1c2Ugb2YgdGhlIGFkZGl0aW9uYWwgZnJhZ21lbnRhdGlvbiBpbnRvCi0JICogTUFMX01BWF9UWF9TSVpFLXNpemVkIGNodW5rcwotCSAqLwotCWlmICh1bmxpa2VseShkZXYtPnR4X2NudCArIG5yX2ZyYWdzICsgbWFsX3R4X2NodW5rcyhsZW4pID4gTlVNX1RYX0JVRkYpKQotCQlnb3RvIHN0b3BfcXVldWU7Ci0KLQljdHJsID0gRU1BQ19UWF9DVFJMX0dGQ1MgfCBFTUFDX1RYX0NUUkxfR1AgfCBNQUxfVFhfQ1RSTF9SRUFEWSB8Ci0JICAgIGVtYWNfdHhfY3N1bShkZXYsIHNrYik7Ci0Jc2xvdCA9IGRldi0+dHhfc2xvdDsKLQotCS8qIHNrYiBkYXRhICovCi0JZGV2LT50eF9za2Jbc2xvdF0gPSBOVUxMOwotCWNodW5rID0gbWluKGxlbiwgTUFMX01BWF9UWF9TSVpFKTsKLQlkZXYtPnR4X2Rlc2Nbc2xvdF0uZGF0YV9wdHIgPSBwZCA9Ci0JICAgIGRtYV9tYXBfc2luZ2xlKGRldi0+bGRldiwgc2tiLT5kYXRhLCBsZW4sIERNQV9UT19ERVZJQ0UpOwotCWRldi0+dHhfZGVzY1tzbG90XS5kYXRhX2xlbiA9ICh1MTYpIGNodW5rOwotCWxlbiAtPSBjaHVuazsKLQlpZiAodW5saWtlbHkobGVuKSkKLQkJc2xvdCA9IGVtYWNfeG1pdF9zcGxpdChkZXYsIHNsb3QsIHBkICsgY2h1bmssIGxlbiwgIW5yX2ZyYWdzLAotCQkJCSAgICAgICBjdHJsKTsKLQkvKiBza2IgZnJhZ21lbnRzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2ZyYWdzOyArK2kpIHsKLQkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwotCQlsZW4gPSBmcmFnLT5zaXplOwotCi0JCWlmICh1bmxpa2VseShkZXYtPnR4X2NudCArIG1hbF90eF9jaHVua3MobGVuKSA+PSBOVU1fVFhfQlVGRikpCi0JCQlnb3RvIHVuZG9fZnJhbWU7Ci0KLQkJcGQgPSBkbWFfbWFwX3BhZ2UoZGV2LT5sZGV2LCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwgbGVuLAotCQkJCSAgRE1BX1RPX0RFVklDRSk7Ci0KLQkJc2xvdCA9IGVtYWNfeG1pdF9zcGxpdChkZXYsIHNsb3QsIHBkLCBsZW4sIGkgPT0gbnJfZnJhZ3MgLSAxLAotCQkJCSAgICAgICBjdHJsKTsKLQl9Ci0KLQlEQkcyKCIlZDogeG1pdF9zZygldSkgJWQgLSAlZCIgTkwsIGRldi0+ZGVmLT5pbmRleCwgc2tiLT5sZW4sCi0JICAgICBkZXYtPnR4X3Nsb3QsIHNsb3QpOwotCi0JLyogQXR0YWNoIHNrYiB0byB0aGUgbGFzdCBzbG90IHNvIHdlIGRvbid0IHJlbGVhc2UgaXQgdG9vIGVhcmx5ICovCi0JZGV2LT50eF9za2Jbc2xvdF0gPSBza2I7Ci0KLQkvKiBTZW5kIHRoZSBwYWNrZXQgb3V0ICovCi0JaWYgKGRldi0+dHhfc2xvdCA9PSBOVU1fVFhfQlVGRiAtIDEpCi0JCWN0cmwgfD0gTUFMX1RYX0NUUkxfV1JBUDsKLQliYXJyaWVyKCk7Ci0JZGV2LT50eF9kZXNjW2Rldi0+dHhfc2xvdF0uY3RybCA9IGN0cmw7Ci0JZGV2LT50eF9zbG90ID0gKHNsb3QgKyAxKSAlIE5VTV9UWF9CVUZGOwotCi0JcmV0dXJuIGVtYWNfeG1pdF9maW5pc2goZGV2LCBza2ItPmxlbik7Ci0KLSAgICAgIHVuZG9fZnJhbWU6Ci0JLyogV2VsbCwgdG9vIGJhZC4gT3VyIHByZXZpb3VzIGVzdGltYXRpb24gd2FzIG92ZXJseSBvcHRpbWlzdGljLiAKLQkgKiBVbmRvIGV2ZXJ5dGhpbmcuCi0JICovCi0Jd2hpbGUgKHNsb3QgIT0gZGV2LT50eF9zbG90KSB7Ci0JCWRldi0+dHhfZGVzY1tzbG90XS5jdHJsID0gMDsKLQkJLS1kZXYtPnR4X2NudDsKLQkJaWYgKC0tc2xvdCA8IDApCi0JCQlzbG90ID0gTlVNX1RYX0JVRkYgLSAxOwotCX0KLQkrK2Rldi0+ZXN0YXRzLnR4X3VuZG87Ci0KLSAgICAgIHN0b3BfcXVldWU6Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKLQlEQkcyKCIlZDogc3RvcHBlZCBUWCBxdWV1ZSIgTkwsIGRldi0+ZGVmLT5pbmRleCk7Ci0JcmV0dXJuIDE7Ci19Ci0jZWxzZQotIyBkZWZpbmUgZW1hY19zdGFydF94bWl0X3NnCWVtYWNfc3RhcnRfeG1pdAotI2VuZGlmCS8qICFkZWZpbmVkKENPTkZJR19JQk1fRU1BQ19UQUgpICovCi0KLS8qIEJIcyBkaXNhYmxlZCAqLwotc3RhdGljIHZvaWQgZW1hY19wYXJzZV90eF9lcnJvcihzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2LCB1MTYgY3RybCkKLXsKLQlzdHJ1Y3QgaWJtX2VtYWNfZXJyb3Jfc3RhdHMgKnN0ID0gJmRldi0+ZXN0YXRzOwotCURCRygiJWQ6IEJEIFRYIGVycm9yICUwNHgiIE5MLCBkZXYtPmRlZi0+aW5kZXgsIGN0cmwpOwotCi0JKytzdC0+dHhfYmRfZXJyb3JzOwotCWlmIChjdHJsICYgRU1BQ19UWF9TVF9CRkNTKQotCQkrK3N0LT50eF9iZF9iYWRfZmNzOwotCWlmIChjdHJsICYgRU1BQ19UWF9TVF9MQ1MpCi0JCSsrc3QtPnR4X2JkX2NhcnJpZXJfbG9zczsKLQlpZiAoY3RybCAmIEVNQUNfVFhfU1RfRUQpCi0JCSsrc3QtPnR4X2JkX2V4Y2Vzc2l2ZV9kZWZlcnJhbDsKLQlpZiAoY3RybCAmIEVNQUNfVFhfU1RfRUMpCi0JCSsrc3QtPnR4X2JkX2V4Y2Vzc2l2ZV9jb2xsaXNpb25zOwotCWlmIChjdHJsICYgRU1BQ19UWF9TVF9MQykKLQkJKytzdC0+dHhfYmRfbGF0ZV9jb2xsaXNpb247Ci0JaWYgKGN0cmwgJiBFTUFDX1RYX1NUX01DKQotCQkrK3N0LT50eF9iZF9tdWx0cGxlX2NvbGxpc2lvbnM7Ci0JaWYgKGN0cmwgJiBFTUFDX1RYX1NUX1NDKQotCQkrK3N0LT50eF9iZF9zaW5nbGVfY29sbGlzaW9uOwotCWlmIChjdHJsICYgRU1BQ19UWF9TVF9VUikKLQkJKytzdC0+dHhfYmRfdW5kZXJydW47Ci0JaWYgKGN0cmwgJiBFTUFDX1RYX1NUX1NRRSkKLQkJKytzdC0+dHhfYmRfc3FlOwotfQotCi1zdGF0aWMgdm9pZCBlbWFjX3BvbGxfdHgodm9pZCAqcGFyYW0pCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IHBhcmFtOwotCURCRzIoIiVkOiBwb2xsX3R4LCAlZCAlZCIgTkwsIGRldi0+ZGVmLT5pbmRleCwgZGV2LT50eF9jbnQsCi0JICAgICBkZXYtPmFja19zbG90KTsKLQotCWlmIChkZXYtPnR4X2NudCkgewotCQl1MTYgY3RybDsKLQkJaW50IHNsb3QgPSBkZXYtPmFja19zbG90LCBuID0gMDsKLQkgICAgICBhZ2FpbjoKLQkJY3RybCA9IGRldi0+dHhfZGVzY1tzbG90XS5jdHJsOwotCQlpZiAoIShjdHJsICYgTUFMX1RYX0NUUkxfUkVBRFkpKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2LT50eF9za2Jbc2xvdF07Ci0JCQkrK247Ci0KLQkJCWlmIChza2IpIHsKLQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQkJZGV2LT50eF9za2Jbc2xvdF0gPSBOVUxMOwotCQkJfQotCQkJc2xvdCA9IChzbG90ICsgMSkgJSBOVU1fVFhfQlVGRjsKLQotCQkJaWYgKHVubGlrZWx5KEVNQUNfSVNfQkFEX1RYKGN0cmwpKSkKLQkJCQllbWFjX3BhcnNlX3R4X2Vycm9yKGRldiwgY3RybCk7Ci0KLQkJCWlmICgtLWRldi0+dHhfY250KQotCQkJCWdvdG8gYWdhaW47Ci0JCX0KLQkJaWYgKG4pIHsKLQkJCWRldi0+YWNrX3Nsb3QgPSBzbG90OwotCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2LT5uZGV2KSAmJgotCQkJICAgIGRldi0+dHhfY250IDwgRU1BQ19UWF9XQUtFVVBfVEhSRVNIKQotCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2LT5uZGV2KTsKLQotCQkJREJHMigiJWQ6IHR4ICVkIHBrdHMiIE5MLCBkZXYtPmRlZi0+aW5kZXgsIG4pOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW1hY19yZWN5Y2xlX3J4X3NrYihzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2LCBpbnQgc2xvdCwKLQkJCQkgICAgICAgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2LT5yeF9za2Jbc2xvdF07Ci0JREJHMigiJWQ6IHJlY3ljbGUgJWQgJWQiIE5MLCBkZXYtPmRlZi0+aW5kZXgsIHNsb3QsIGxlbik7Ci0KLQlpZiAobGVuKSAKLQkJZG1hX21hcF9zaW5nbGUoZGV2LT5sZGV2LCBza2ItPmRhdGEgLSAyLCAKLQkJCSAgICAgICBFTUFDX0RNQV9BTElHTihsZW4gKyAyKSwgRE1BX0ZST01fREVWSUNFKTsKLQotCWRldi0+cnhfZGVzY1tzbG90XS5kYXRhX2xlbiA9IDA7Ci0JYmFycmllcigpOwotCWRldi0+cnhfZGVzY1tzbG90XS5jdHJsID0gTUFMX1JYX0NUUkxfRU1QVFkgfAotCSAgICAoc2xvdCA9PSAoTlVNX1JYX0JVRkYgLSAxKSA/IE1BTF9SWF9DVFJMX1dSQVAgOiAwKTsKLX0KLQotc3RhdGljIHZvaWQgZW1hY19wYXJzZV9yeF9lcnJvcihzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2LCB1MTYgY3RybCkKLXsKLQlzdHJ1Y3QgaWJtX2VtYWNfZXJyb3Jfc3RhdHMgKnN0ID0gJmRldi0+ZXN0YXRzOwotCURCRygiJWQ6IEJEIFJYIGVycm9yICUwNHgiIE5MLCBkZXYtPmRlZi0+aW5kZXgsIGN0cmwpOwotCi0JKytzdC0+cnhfYmRfZXJyb3JzOwotCWlmIChjdHJsICYgRU1BQ19SWF9TVF9PRSkKLQkJKytzdC0+cnhfYmRfb3ZlcnJ1bjsKLQlpZiAoY3RybCAmIEVNQUNfUlhfU1RfQlApCi0JCSsrc3QtPnJ4X2JkX2JhZF9wYWNrZXQ7Ci0JaWYgKGN0cmwgJiBFTUFDX1JYX1NUX1JQKQotCQkrK3N0LT5yeF9iZF9ydW50X3BhY2tldDsKLQlpZiAoY3RybCAmIEVNQUNfUlhfU1RfU0UpCi0JCSsrc3QtPnJ4X2JkX3Nob3J0X2V2ZW50OwotCWlmIChjdHJsICYgRU1BQ19SWF9TVF9BRSkKLQkJKytzdC0+cnhfYmRfYWxpZ25tZW50X2Vycm9yOwotCWlmIChjdHJsICYgRU1BQ19SWF9TVF9CRkNTKQotCQkrK3N0LT5yeF9iZF9iYWRfZmNzOwotCWlmIChjdHJsICYgRU1BQ19SWF9TVF9QVEwpCi0JCSsrc3QtPnJ4X2JkX3BhY2tldF90b29fbG9uZzsKLQlpZiAoY3RybCAmIEVNQUNfUlhfU1RfT1JFKQotCQkrK3N0LT5yeF9iZF9vdXRfb2ZfcmFuZ2U7Ci0JaWYgKGN0cmwgJiBFTUFDX1JYX1NUX0lSRSkKLQkJKytzdC0+cnhfYmRfaW5fcmFuZ2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbWFjX3J4X2NzdW0oc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY3RybCkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19JQk1fRU1BQ19UQUgpCi0JaWYgKCFjdHJsICYmIGRldi0+dGFoX2RldikgewotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQkrK2Rldi0+c3RhdHMucnhfcGFja2V0c19jc3VtOwotCX0KLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIGludCBlbWFjX3J4X3NnX2FwcGVuZChzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2LCBpbnQgc2xvdCkKLXsKLQlpZiAobGlrZWx5KGRldi0+cnhfc2dfc2tiICE9IE5VTEwpKSB7Ci0JCWludCBsZW4gPSBkZXYtPnJ4X2Rlc2Nbc2xvdF0uZGF0YV9sZW47Ci0JCWludCB0b3RfbGVuID0gZGV2LT5yeF9zZ19za2ItPmxlbiArIGxlbjsKLQotCQlpZiAodW5saWtlbHkodG90X2xlbiArIDIgPiBkZXYtPnJ4X3NrYl9zaXplKSkgewotCQkJKytkZXYtPmVzdGF0cy5yeF9kcm9wcGVkX210dTsKLQkJCWRldl9rZnJlZV9za2IoZGV2LT5yeF9zZ19za2IpOwotCQkJZGV2LT5yeF9zZ19za2IgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJY2FjaGVhYmxlX21lbWNweShza2JfdGFpbF9wb2ludGVyKGRldi0+cnhfc2dfc2tiKSwKLQkJCQkJIGRldi0+cnhfc2tiW3Nsb3RdLT5kYXRhLCBsZW4pOwotCQkJc2tiX3B1dChkZXYtPnJ4X3NnX3NrYiwgbGVuKTsKLQkJCWVtYWNfcmVjeWNsZV9yeF9za2IoZGV2LCBzbG90LCBsZW4pOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JZW1hY19yZWN5Y2xlX3J4X3NrYihkZXYsIHNsb3QsIDApOwotCXJldHVybiAtMTsKLX0KLQotLyogQkhzIGRpc2FibGVkICovCi1zdGF0aWMgaW50IGVtYWNfcG9sbF9yeCh2b2lkICpwYXJhbSwgaW50IGJ1ZGdldCkKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gcGFyYW07Ci0JaW50IHNsb3QgPSBkZXYtPnJ4X3Nsb3QsIHJlY2VpdmVkID0gMDsKLQotCURCRzIoIiVkOiBwb2xsX3J4KCVkKSIgTkwsIGRldi0+ZGVmLT5pbmRleCwgYnVkZ2V0KTsKLQotICAgICAgYWdhaW46Ci0Jd2hpbGUgKGJ1ZGdldCA+IDApIHsKLQkJaW50IGxlbjsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJdTE2IGN0cmwgPSBkZXYtPnJ4X2Rlc2Nbc2xvdF0uY3RybDsKLQotCQlpZiAoY3RybCAmIE1BTF9SWF9DVFJMX0VNUFRZKQotCQkJYnJlYWs7Ci0KLQkJc2tiID0gZGV2LT5yeF9za2Jbc2xvdF07Ci0JCWJhcnJpZXIoKTsKLQkJbGVuID0gZGV2LT5yeF9kZXNjW3Nsb3RdLmRhdGFfbGVuOwotCi0JCWlmICh1bmxpa2VseSghTUFMX0lTX1NJTkdMRV9SWChjdHJsKSkpCi0JCQlnb3RvIHNnOwotCi0JCWN0cmwgJj0gRU1BQ19CQURfUlhfTUFTSzsKLQkJaWYgKHVubGlrZWx5KGN0cmwgJiYgY3RybCAhPSBFTUFDX1JYX1RBSF9CQURfQ1NVTSkpIHsKLQkJCWVtYWNfcGFyc2VfcnhfZXJyb3IoZGV2LCBjdHJsKTsKLQkJCSsrZGV2LT5lc3RhdHMucnhfZHJvcHBlZF9lcnJvcjsKLQkJCWVtYWNfcmVjeWNsZV9yeF9za2IoZGV2LCBzbG90LCAwKTsKLQkJCWxlbiA9IDA7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQotCQlpZiAobGVuICYmIGxlbiA8IEVNQUNfUlhfQ09QWV9USFJFU0gpIHsKLQkJCXN0cnVjdCBza19idWZmICpjb3B5X3NrYiA9Ci0JCQkgICAgYWxsb2Nfc2tiKGxlbiArIEVNQUNfUlhfU0tCX0hFQURST09NICsgMiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAodW5saWtlbHkoIWNvcHlfc2tiKSkKLQkJCQlnb3RvIG9vbTsKLQotCQkJc2tiX3Jlc2VydmUoY29weV9za2IsIEVNQUNfUlhfU0tCX0hFQURST09NICsgMik7Ci0JCQljYWNoZWFibGVfbWVtY3B5KGNvcHlfc2tiLT5kYXRhIC0gMiwgc2tiLT5kYXRhIC0gMiwKLQkJCQkJIGxlbiArIDIpOwotCQkJZW1hY19yZWN5Y2xlX3J4X3NrYihkZXYsIHNsb3QsIGxlbik7Ci0JCQlza2IgPSBjb3B5X3NrYjsKLQkJfSBlbHNlIGlmICh1bmxpa2VseShlbWFjX2FsbG9jX3J4X3NrYihkZXYsIHNsb3QsIEdGUF9BVE9NSUMpKSkKLQkJCWdvdG8gb29tOwotCi0JCXNrYl9wdXQoc2tiLCBsZW4pOwotCSAgICAgIHB1c2hfcGFja2V0OgotCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtPm5kZXYpOwotCQllbWFjX3J4X2NzdW0oZGV2LCBza2IsIGN0cmwpOwotCi0JCWlmICh1bmxpa2VseShuZXRpZl9yZWNlaXZlX3NrYihza2IpID09IE5FVF9SWF9EUk9QKSkKLQkJCSsrZGV2LT5lc3RhdHMucnhfZHJvcHBlZF9zdGFjazsKLQkgICAgICBuZXh0OgotCQkrK2Rldi0+c3RhdHMucnhfcGFja2V0czsKLQkgICAgICBza2lwOgotCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKLQkJc2xvdCA9IChzbG90ICsgMSkgJSBOVU1fUlhfQlVGRjsKLQkJLS1idWRnZXQ7Ci0JCSsrcmVjZWl2ZWQ7Ci0JCWNvbnRpbnVlOwotCSAgICAgIHNnOgotCQlpZiAoY3RybCAmIE1BTF9SWF9DVFJMX0ZJUlNUKSB7Ci0JCQlCVUdfT04oZGV2LT5yeF9zZ19za2IpOwotCQkJaWYgKHVubGlrZWx5KGVtYWNfYWxsb2Nfcnhfc2tiKGRldiwgc2xvdCwgR0ZQX0FUT01JQykpKSB7Ci0JCQkJREJHKCIlZDogcnggT09NICVkIiBOTCwgZGV2LT5kZWYtPmluZGV4LCBzbG90KTsKLQkJCQkrK2Rldi0+ZXN0YXRzLnJ4X2Ryb3BwZWRfb29tOwotCQkJCWVtYWNfcmVjeWNsZV9yeF9za2IoZGV2LCBzbG90LCAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZGV2LT5yeF9zZ19za2IgPSBza2I7Ci0JCQkJc2tiX3B1dChza2IsIGxlbik7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoIWVtYWNfcnhfc2dfYXBwZW5kKGRldiwgc2xvdCkgJiYKLQkJCSAgIChjdHJsICYgTUFMX1JYX0NUUkxfTEFTVCkpIHsKLQotCQkJc2tiID0gZGV2LT5yeF9zZ19za2I7Ci0JCQlkZXYtPnJ4X3NnX3NrYiA9IE5VTEw7Ci0KLQkJCWN0cmwgJj0gRU1BQ19CQURfUlhfTUFTSzsKLQkJCWlmICh1bmxpa2VseShjdHJsICYmIGN0cmwgIT0gRU1BQ19SWF9UQUhfQkFEX0NTVU0pKSB7Ci0JCQkJZW1hY19wYXJzZV9yeF9lcnJvcihkZXYsIGN0cmwpOwotCQkJCSsrZGV2LT5lc3RhdHMucnhfZHJvcHBlZF9lcnJvcjsKLQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQkJbGVuID0gMDsKLQkJCX0gZWxzZQotCQkJCWdvdG8gcHVzaF9wYWNrZXQ7Ci0JCX0KLQkJZ290byBza2lwOwotCSAgICAgIG9vbToKLQkJREJHKCIlZDogcnggT09NICVkIiBOTCwgZGV2LT5kZWYtPmluZGV4LCBzbG90KTsKLQkJLyogRHJvcCB0aGUgcGFja2V0IGFuZCByZWN5Y2xlIHNrYiAqLwotCQkrK2Rldi0+ZXN0YXRzLnJ4X2Ryb3BwZWRfb29tOwotCQllbWFjX3JlY3ljbGVfcnhfc2tiKGRldiwgc2xvdCwgMCk7Ci0JCWdvdG8gbmV4dDsKLQl9Ci0KLQlpZiAocmVjZWl2ZWQpIHsKLQkJREJHMigiJWQ6IHJ4ICVkIEJEcyIgTkwsIGRldi0+ZGVmLT5pbmRleCwgcmVjZWl2ZWQpOwotCQlkZXYtPnJ4X3Nsb3QgPSBzbG90OwotCX0KLQotCWlmICh1bmxpa2VseShidWRnZXQgJiYgZGV2LT5jb21tYWMucnhfc3RvcHBlZCkpIHsKLQkJc3RydWN0IG9jcF9mdW5jX2VtYWNfZGF0YSAqZW1hY2RhdGEgPSBkZXYtPmRlZi0+YWRkaXRpb25zOwotCi0JCWJhcnJpZXIoKTsKLQkJaWYgKCEoZGV2LT5yeF9kZXNjW3Nsb3RdLmN0cmwgJiBNQUxfUlhfQ1RSTF9FTVBUWSkpIHsKLQkJCURCRzIoIiVkOiByeCByZXN0YXJ0IiBOTCwgZGV2LT5kZWYtPmluZGV4KTsKLQkJCXJlY2VpdmVkID0gMDsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KLQotCQlpZiAoZGV2LT5yeF9zZ19za2IpIHsKLQkJCURCRzIoIiVkOiBkcm9wcGluZyBwYXJ0aWFsIHJ4IHBhY2tldCIgTkwsCi0JCQkgICAgIGRldi0+ZGVmLT5pbmRleCk7Ci0JCQkrK2Rldi0+ZXN0YXRzLnJ4X2Ryb3BwZWRfZXJyb3I7Ci0JCQlkZXZfa2ZyZWVfc2tiKGRldi0+cnhfc2dfc2tiKTsKLQkJCWRldi0+cnhfc2dfc2tiID0gTlVMTDsKLQkJfQotCi0JCWRldi0+Y29tbWFjLnJ4X3N0b3BwZWQgPSAwOwotCQltYWxfZW5hYmxlX3J4X2NoYW5uZWwoZGV2LT5tYWwsIGVtYWNkYXRhLT5tYWxfcnhfY2hhbik7Ci0JCWVtYWNfcnhfZW5hYmxlKGRldik7Ci0JCWRldi0+cnhfc2xvdCA9IDA7Ci0JfQotCXJldHVybiByZWNlaXZlZDsKLX0KLQotLyogQkhzIGRpc2FibGVkICovCi1zdGF0aWMgaW50IGVtYWNfcGVla19yeCh2b2lkICpwYXJhbSkKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gcGFyYW07Ci0JcmV0dXJuICEoZGV2LT5yeF9kZXNjW2Rldi0+cnhfc2xvdF0uY3RybCAmIE1BTF9SWF9DVFJMX0VNUFRZKTsKLX0KLQotLyogQkhzIGRpc2FibGVkICovCi1zdGF0aWMgaW50IGVtYWNfcGVla19yeF9zZyh2b2lkICpwYXJhbSkKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gcGFyYW07Ci0JaW50IHNsb3QgPSBkZXYtPnJ4X3Nsb3Q7Ci0Jd2hpbGUgKDEpIHsKLQkJdTE2IGN0cmwgPSBkZXYtPnJ4X2Rlc2Nbc2xvdF0uY3RybDsKLQkJaWYgKGN0cmwgJiBNQUxfUlhfQ1RSTF9FTVBUWSkKLQkJCXJldHVybiAwOwotCQllbHNlIGlmIChjdHJsICYgTUFMX1JYX0NUUkxfTEFTVCkKLQkJCXJldHVybiAxOwotCi0JCXNsb3QgPSAoc2xvdCArIDEpICUgTlVNX1JYX0JVRkY7Ci0KLQkJLyogSSdtIGp1c3QgYmVpbmcgcGFyYW5vaWQgaGVyZSA6KSAqLwotCQlpZiAodW5saWtlbHkoc2xvdCA9PSBkZXYtPnJ4X3Nsb3QpKQotCQkJcmV0dXJuIDA7Ci0JfQotfQotCi0vKiBIYXJkIElSUSAqLwotc3RhdGljIHZvaWQgZW1hY19yeGRlKHZvaWQgKnBhcmFtKQotewotCXN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYgPSBwYXJhbTsKLQkrK2Rldi0+ZXN0YXRzLnJ4X3N0b3BwZWQ7Ci0JZW1hY19yeF9kaXNhYmxlX2FzeW5jKGRldik7Ci19Ci0KLS8qIEhhcmQgSVJRICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgZW1hY19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQotewotCXN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYgPSBkZXZfaW5zdGFuY2U7Ci0Jc3RydWN0IGVtYWNfcmVncyBfX2lvbWVtICpwID0gZGV2LT5lbWFjcDsKLQlzdHJ1Y3QgaWJtX2VtYWNfZXJyb3Jfc3RhdHMgKnN0ID0gJmRldi0+ZXN0YXRzOwotCi0JdTMyIGlzciA9IGluX2JlMzIoJnAtPmlzcik7Ci0Jb3V0X2JlMzIoJnAtPmlzciwgaXNyKTsKLQotCURCRygiJWQ6IGlzciA9ICUwOHgiIE5MLCBkZXYtPmRlZi0+aW5kZXgsIGlzcik7Ci0KLQlpZiAoaXNyICYgRU1BQ19JU1JfVFhQRSkKLQkJKytzdC0+dHhfcGFyaXR5OwotCWlmIChpc3IgJiBFTUFDX0lTUl9SWFBFKQotCQkrK3N0LT5yeF9wYXJpdHk7Ci0JaWYgKGlzciAmIEVNQUNfSVNSX1RYVUUpCi0JCSsrc3QtPnR4X3VuZGVycnVuOwotCWlmIChpc3IgJiBFTUFDX0lTUl9SWE9FKQotCQkrK3N0LT5yeF9maWZvX292ZXJydW47Ci0JaWYgKGlzciAmIEVNQUNfSVNSX09WUikKLQkJKytzdC0+cnhfb3ZlcnJ1bjsKLQlpZiAoaXNyICYgRU1BQ19JU1JfQlApCi0JCSsrc3QtPnJ4X2JhZF9wYWNrZXQ7Ci0JaWYgKGlzciAmIEVNQUNfSVNSX1JQKQotCQkrK3N0LT5yeF9ydW50X3BhY2tldDsKLQlpZiAoaXNyICYgRU1BQ19JU1JfU0UpCi0JCSsrc3QtPnJ4X3Nob3J0X2V2ZW50OwotCWlmIChpc3IgJiBFTUFDX0lTUl9BTEUpCi0JCSsrc3QtPnJ4X2FsaWdubWVudF9lcnJvcjsKLQlpZiAoaXNyICYgRU1BQ19JU1JfQkZDUykKLQkJKytzdC0+cnhfYmFkX2ZjczsKLQlpZiAoaXNyICYgRU1BQ19JU1JfUFRMRSkKLQkJKytzdC0+cnhfcGFja2V0X3Rvb19sb25nOwotCWlmIChpc3IgJiBFTUFDX0lTUl9PUkUpCi0JCSsrc3QtPnJ4X291dF9vZl9yYW5nZTsKLQlpZiAoaXNyICYgRU1BQ19JU1JfSVJFKQotCQkrK3N0LT5yeF9pbl9yYW5nZTsKLQlpZiAoaXNyICYgRU1BQ19JU1JfU1FFKQotCQkrK3N0LT50eF9zcWU7Ci0JaWYgKGlzciAmIEVNQUNfSVNSX1RFKQotCQkrK3N0LT50eF9lcnJvcnM7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZW1hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gbmRldi0+cHJpdjsKLQlzdHJ1Y3QgaWJtX2VtYWNfc3RhdHMgKnN0ID0gJmRldi0+c3RhdHM7Ci0Jc3RydWN0IGlibV9lbWFjX2Vycm9yX3N0YXRzICplc3QgPSAmZGV2LT5lc3RhdHM7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5zdCA9ICZkZXYtPm5zdGF0czsKLQotCURCRzIoIiVkOiBzdGF0cyIgTkwsIGRldi0+ZGVmLT5pbmRleCk7Ci0KLQkvKiBDb21wdXRlICJsZWdhY3kiIHN0YXRpc3RpY3MgKi8KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCW5zdC0+cnhfcGFja2V0cyA9ICh1bnNpZ25lZCBsb25nKXN0LT5yeF9wYWNrZXRzOwotCW5zdC0+cnhfYnl0ZXMgPSAodW5zaWduZWQgbG9uZylzdC0+cnhfYnl0ZXM7Ci0JbnN0LT50eF9wYWNrZXRzID0gKHVuc2lnbmVkIGxvbmcpc3QtPnR4X3BhY2tldHM7Ci0JbnN0LT50eF9ieXRlcyA9ICh1bnNpZ25lZCBsb25nKXN0LT50eF9ieXRlczsKLQluc3QtPnJ4X2Ryb3BwZWQgPSAodW5zaWduZWQgbG9uZykoZXN0LT5yeF9kcm9wcGVkX29vbSArCi0JCQkJCSAgZXN0LT5yeF9kcm9wcGVkX2Vycm9yICsKLQkJCQkJICBlc3QtPnJ4X2Ryb3BwZWRfcmVzaXplICsKLQkJCQkJICBlc3QtPnJ4X2Ryb3BwZWRfbXR1KTsKLQluc3QtPnR4X2Ryb3BwZWQgPSAodW5zaWduZWQgbG9uZyllc3QtPnR4X2Ryb3BwZWQ7Ci0KLQluc3QtPnJ4X2Vycm9ycyA9ICh1bnNpZ25lZCBsb25nKWVzdC0+cnhfYmRfZXJyb3JzOwotCW5zdC0+cnhfZmlmb19lcnJvcnMgPSAodW5zaWduZWQgbG9uZykoZXN0LT5yeF9iZF9vdmVycnVuICsKLQkJCQkJICAgICAgZXN0LT5yeF9maWZvX292ZXJydW4gKwotCQkJCQkgICAgICBlc3QtPnJ4X292ZXJydW4pOwotCW5zdC0+cnhfZnJhbWVfZXJyb3JzID0gKHVuc2lnbmVkIGxvbmcpKGVzdC0+cnhfYmRfYWxpZ25tZW50X2Vycm9yICsKLQkJCQkJICAgICAgIGVzdC0+cnhfYWxpZ25tZW50X2Vycm9yKTsKLQluc3QtPnJ4X2NyY19lcnJvcnMgPSAodW5zaWduZWQgbG9uZykoZXN0LT5yeF9iZF9iYWRfZmNzICsKLQkJCQkJICAgICBlc3QtPnJ4X2JhZF9mY3MpOwotCW5zdC0+cnhfbGVuZ3RoX2Vycm9ycyA9ICh1bnNpZ25lZCBsb25nKShlc3QtPnJ4X2JkX3J1bnRfcGFja2V0ICsKLQkJCQkJCWVzdC0+cnhfYmRfc2hvcnRfZXZlbnQgKwotCQkJCQkJZXN0LT5yeF9iZF9wYWNrZXRfdG9vX2xvbmcgKwotCQkJCQkJZXN0LT5yeF9iZF9vdXRfb2ZfcmFuZ2UgKwotCQkJCQkJZXN0LT5yeF9iZF9pbl9yYW5nZSArCi0JCQkJCQllc3QtPnJ4X3J1bnRfcGFja2V0ICsKLQkJCQkJCWVzdC0+cnhfc2hvcnRfZXZlbnQgKwotCQkJCQkJZXN0LT5yeF9wYWNrZXRfdG9vX2xvbmcgKwotCQkJCQkJZXN0LT5yeF9vdXRfb2ZfcmFuZ2UgKwotCQkJCQkJZXN0LT5yeF9pbl9yYW5nZSk7Ci0KLQluc3QtPnR4X2Vycm9ycyA9ICh1bnNpZ25lZCBsb25nKShlc3QtPnR4X2JkX2Vycm9ycyArIGVzdC0+dHhfZXJyb3JzKTsKLQluc3QtPnR4X2ZpZm9fZXJyb3JzID0gKHVuc2lnbmVkIGxvbmcpKGVzdC0+dHhfYmRfdW5kZXJydW4gKwotCQkJCQkgICAgICBlc3QtPnR4X3VuZGVycnVuKTsKLQluc3QtPnR4X2NhcnJpZXJfZXJyb3JzID0gKHVuc2lnbmVkIGxvbmcpZXN0LT50eF9iZF9jYXJyaWVyX2xvc3M7Ci0JbnN0LT5jb2xsaXNpb25zID0gKHVuc2lnbmVkIGxvbmcpKGVzdC0+dHhfYmRfZXhjZXNzaXZlX2RlZmVycmFsICsKLQkJCQkJICBlc3QtPnR4X2JkX2V4Y2Vzc2l2ZV9jb2xsaXNpb25zICsKLQkJCQkJICBlc3QtPnR4X2JkX2xhdGVfY29sbGlzaW9uICsKLQkJCQkJICBlc3QtPnR4X2JkX211bHRwbGVfY29sbGlzaW9ucyk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCXJldHVybiBuc3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtYWNfcmVtb3ZlKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IG9jcF9nZXRfZHJ2ZGF0YShvY3BkZXYpOwotCi0JREJHKCIlZDogcmVtb3ZlIiBOTCwgZGV2LT5kZWYtPmluZGV4KTsKLQotCW9jcF9zZXRfZHJ2ZGF0YShvY3BkZXYsIE5VTEwpOwotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldi0+bmRldik7Ci0KLQl0YWhfZmluaShkZXYtPnRhaF9kZXYpOwotCXJnbWlpX2ZpbmkoZGV2LT5yZ21paV9kZXYsIGRldi0+cmdtaWlfaW5wdXQpOwotCXptaWlfZmluaShkZXYtPnptaWlfZGV2LCBkZXYtPnptaWlfaW5wdXQpOwotCi0JZW1hY19kYmdfcmVnaXN0ZXIoZGV2LT5kZWYtPmluZGV4LCBOVUxMKTsKLQotCW1hbF91bnJlZ2lzdGVyX2NvbW1hYyhkZXYtPm1hbCwgJmRldi0+Y29tbWFjKTsKLQlpb3VubWFwKGRldi0+ZW1hY3ApOwotCWtmcmVlKGRldi0+bmRldik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFsX2NvbW1hY19vcHMgZW1hY19jb21tYWNfb3BzID0gewotCS5wb2xsX3R4ID0gJmVtYWNfcG9sbF90eCwKLQkucG9sbF9yeCA9ICZlbWFjX3BvbGxfcngsCi0JLnBlZWtfcnggPSAmZW1hY19wZWVrX3J4LAotCS5yeGRlID0gJmVtYWNfcnhkZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFsX2NvbW1hY19vcHMgZW1hY19jb21tYWNfc2dfb3BzID0gewotCS5wb2xsX3R4ID0gJmVtYWNfcG9sbF90eCwKLQkucG9sbF9yeCA9ICZlbWFjX3BvbGxfcngsCi0JLnBlZWtfcnggPSAmZW1hY19wZWVrX3J4X3NnLAotCS5yeGRlID0gJmVtYWNfcnhkZSwKLX07Ci0KLS8qIEV0aHRvb2wgc3VwcG9ydCAqLwotc3RhdGljIGludCBlbWFjX2V0aHRvb2xfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgICAgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IG5kZXYtPnByaXY7Ci0KLQljbWQtPnN1cHBvcnRlZCA9IGRldi0+cGh5LmZlYXR1cmVzOwotCWNtZC0+cG9ydCA9IFBPUlRfTUlJOwotCWNtZC0+cGh5X2FkZHJlc3MgPSBkZXYtPnBoeS5hZGRyZXNzOwotCWNtZC0+dHJhbnNjZWl2ZXIgPQotCSAgICBkZXYtPnBoeS5hZGRyZXNzID49IDAgPyBYQ1ZSX0VYVEVSTkFMIDogWENWUl9JTlRFUk5BTDsKLQotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQljbWQtPmFkdmVydGlzaW5nID0gZGV2LT5waHkuYWR2ZXJ0aXNpbmc7Ci0JY21kLT5hdXRvbmVnID0gZGV2LT5waHkuYXV0b25lZzsKLQljbWQtPnNwZWVkID0gZGV2LT5waHkuc3BlZWQ7Ci0JY21kLT5kdXBsZXggPSBkZXYtPnBoeS5kdXBsZXg7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBlbWFjX2V0aHRvb2xfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgICAgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IG5kZXYtPnByaXY7Ci0JdTMyIGYgPSBkZXYtPnBoeS5mZWF0dXJlczsKLQotCURCRygiJWQ6IHNldF9zZXR0aW5ncyglZCwgJWQsICVkLCAweCUwOHgpIiBOTCwgZGV2LT5kZWYtPmluZGV4LAotCSAgICBjbWQtPmF1dG9uZWcsIGNtZC0+c3BlZWQsIGNtZC0+ZHVwbGV4LCBjbWQtPmFkdmVydGlzaW5nKTsKLQotCS8qIEJhc2ljIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoZGV2LT5waHkuYWRkcmVzcyA8IDApCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFICYmIGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYgY21kLT5hZHZlcnRpc2luZyA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYgY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpIHsKLQkJc3dpdGNoIChjbWQtPnNwZWVkKSB7Ci0JCWNhc2UgU1BFRURfMTA6Ci0JCQlpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYKLQkJCSAgICAmJiAhKGYgJiBTVVBQT1JURURfMTBiYXNlVF9IYWxmKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTAotCQkJICAgICYmICEoZiAmIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTAwOgotCQkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGCi0JCQkgICAgJiYgIShmICYgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMCi0JCQkgICAgJiYgIShmICYgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTAwMDoKLQkJCWlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRgotCQkJICAgICYmICEoZiAmIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZikpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwKLQkJCSAgICAmJiAhKGYgJiBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkJZGV2LT5waHkuZGVmLT5vcHMtPnNldHVwX2ZvcmNlZCgmZGV2LT5waHksIGNtZC0+c3BlZWQsCi0JCQkJCQljbWQtPmR1cGxleCk7Ci0KLQl9IGVsc2UgewotCQlpZiAoIShmICYgU1VQUE9SVEVEX0F1dG9uZWcpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQlkZXYtPnBoeS5kZWYtPm9wcy0+c2V0dXBfYW5lZygmZGV2LT5waHksCi0JCQkJCSAgICAgIChjbWQtPmFkdmVydGlzaW5nICYgZikgfAotCQkJCQkgICAgICAoZGV2LT5waHkuYWR2ZXJ0aXNpbmcgJgotCQkJCQkgICAgICAgKEFEVkVSVElTRURfUGF1c2UgfAotCQkJCQkJQURWRVJUSVNFRF9Bc3ltX1BhdXNlKSkpOwotCX0KLQllbWFjX2ZvcmNlX2xpbmtfdXBkYXRlKGRldik7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZW1hY19ldGh0b29sX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCi0JCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcnApCi17Ci0JcnAtPnJ4X21heF9wZW5kaW5nID0gcnAtPnJ4X3BlbmRpbmcgPSBOVU1fUlhfQlVGRjsKLQlycC0+dHhfbWF4X3BlbmRpbmcgPSBycC0+dHhfcGVuZGluZyA9IE5VTV9UWF9CVUZGOwotfQotCi1zdGF0aWMgdm9pZCBlbWFjX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCi0JCQkJCXN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBwKQotewotCXN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYgPSBuZGV2LT5wcml2OwotCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmICgoZGV2LT5waHkuZmVhdHVyZXMgJiBTVVBQT1JURURfQXV0b25lZykgJiYKLQkgICAgKGRldi0+cGh5LmFkdmVydGlzaW5nICYgKEFEVkVSVElTRURfUGF1c2UgfCBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpKSkKLQkJcHAtPmF1dG9uZWcgPSAxOwotCi0JaWYgKGRldi0+cGh5LmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgewotCQlpZiAoZGV2LT5waHkucGF1c2UpCi0JCQlwcC0+cnhfcGF1c2UgPSBwcC0+dHhfcGF1c2UgPSAxOwotCQllbHNlIGlmIChkZXYtPnBoeS5hc3ltX3BhdXNlKQotCQkJcHAtPnR4X3BhdXNlID0gMTsKLQl9Ci0JbG9jYWxfYmhfZW5hYmxlKCk7Ci19Ci0KLXN0YXRpYyB1MzIgZW1hY19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYgPSBuZGV2LT5wcml2OwotCXJldHVybiBkZXYtPnRhaF9kZXYgIT0gMDsKLX0KLQotc3RhdGljIGludCBlbWFjX2dldF9yZWdzX2xlbihzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQotewotCXJldHVybiBzaXplb2Yoc3RydWN0IGVtYWNfZXRodG9vbF9yZWdzX3N1YmhkcikgKyBFTUFDX0VUSFRPT0xfUkVHU19TSVpFOwotfQotCi1zdGF0aWMgaW50IGVtYWNfZXRodG9vbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IG5kZXYtPnByaXY7Ci0JcmV0dXJuIHNpemVvZihzdHJ1Y3QgZW1hY19ldGh0b29sX3JlZ3NfaGRyKSArCi0JICAgIGVtYWNfZ2V0X3JlZ3NfbGVuKGRldikgKyBtYWxfZ2V0X3JlZ3NfbGVuKGRldi0+bWFsKSArCi0JICAgIHptaWlfZ2V0X3JlZ3NfbGVuKGRldi0+em1paV9kZXYpICsKLQkgICAgcmdtaWlfZ2V0X3JlZ3NfbGVuKGRldi0+cmdtaWlfZGV2KSArCi0JICAgIHRhaF9nZXRfcmVnc19sZW4oZGV2LT50YWhfZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgKmVtYWNfZHVtcF9yZWdzKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYsIHZvaWQgKmJ1ZikKLXsKLQlzdHJ1Y3QgZW1hY19ldGh0b29sX3JlZ3Nfc3ViaGRyICpoZHIgPSBidWY7Ci0KLQloZHItPnZlcnNpb24gPSBFTUFDX0VUSFRPT0xfUkVHU19WRVI7Ci0JaGRyLT5pbmRleCA9IGRldi0+ZGVmLT5pbmRleDsKLQltZW1jcHlfZnJvbWlvKGhkciArIDEsIGRldi0+ZW1hY3AsIEVNQUNfRVRIVE9PTF9SRUdTX1NJWkUpOwotCXJldHVybiAoKHZvaWQgKikoaGRyICsgMSkgKyBFTUFDX0VUSFRPT0xfUkVHU19TSVpFKTsKLX0KLQotc3RhdGljIHZvaWQgZW1hY19ldGh0b29sX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqYnVmKQotewotCXN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYgPSBuZGV2LT5wcml2OwotCXN0cnVjdCBlbWFjX2V0aHRvb2xfcmVnc19oZHIgKmhkciA9IGJ1ZjsKLQotCWhkci0+Y29tcG9uZW50cyA9IDA7Ci0JYnVmID0gaGRyICsgMTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JYnVmID0gbWFsX2R1bXBfcmVncyhkZXYtPm1hbCwgYnVmKTsKLQlidWYgPSBlbWFjX2R1bXBfcmVncyhkZXYsIGJ1Zik7Ci0JaWYgKGRldi0+em1paV9kZXYpIHsKLQkJaGRyLT5jb21wb25lbnRzIHw9IEVNQUNfRVRIVE9PTF9SRUdTX1pNSUk7Ci0JCWJ1ZiA9IHptaWlfZHVtcF9yZWdzKGRldi0+em1paV9kZXYsIGJ1Zik7Ci0JfQotCWlmIChkZXYtPnJnbWlpX2RldikgewotCQloZHItPmNvbXBvbmVudHMgfD0gRU1BQ19FVEhUT09MX1JFR1NfUkdNSUk7Ci0JCWJ1ZiA9IHJnbWlpX2R1bXBfcmVncyhkZXYtPnJnbWlpX2RldiwgYnVmKTsKLQl9Ci0JaWYgKGRldi0+dGFoX2RldikgewotCQloZHItPmNvbXBvbmVudHMgfD0gRU1BQ19FVEhUT09MX1JFR1NfVEFIOwotCQlidWYgPSB0YWhfZHVtcF9yZWdzKGRldi0+dGFoX2RldiwgYnVmKTsKLQl9Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotfQotCi1zdGF0aWMgaW50IGVtYWNfZXRodG9vbF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYgPSBuZGV2LT5wcml2OwotCWludCByZXMgPSAwOwotCi0JREJHKCIlZDogbndheV9yZXNldCIgTkwsIGRldi0+ZGVmLT5pbmRleCk7Ci0KLQlpZiAoZGV2LT5waHkuYWRkcmVzcyA8IDApCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoIWRldi0+cGh5LmF1dG9uZWcpIHsKLQkJcmVzID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZGV2LT5waHkuZGVmLT5vcHMtPnNldHVwX2FuZWcoJmRldi0+cGh5LCBkZXYtPnBoeS5hZHZlcnRpc2luZyk7Ci0JZW1hY19mb3JjZV9saW5rX3VwZGF0ZShkZXYpOwotCi0gICAgICBvdXQ6Ci0JbG9jYWxfYmhfZW5hYmxlKCk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludCBlbWFjX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3NldCkKLXsKLQlzd2l0Y2ggKHNzZXQpIHsKLQljYXNlIEVUSF9TU19TVEFUUzoKLQkJcmV0dXJuIEVNQUNfRVRIVE9PTF9TVEFUU19DT1VOVDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBlbWFjX2V0aHRvb2xfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBzdHJpbmdzZXQsCi0JCQkJICAgICB1OCAqIGJ1ZikKLXsKLQlpZiAoc3RyaW5nc2V0ID09IEVUSF9TU19TVEFUUykKLQkJbWVtY3B5KGJ1ZiwgJmVtYWNfc3RhdHNfa2V5cywgc2l6ZW9mKGVtYWNfc3RhdHNfa2V5cykpOwotfQotCi1zdGF0aWMgdm9pZCBlbWFjX2V0aHRvb2xfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCi0JCQkJCSAgIHN0cnVjdCBldGh0b29sX3N0YXRzICplc3RhdHMsCi0JCQkJCSAgIHU2NCAqIHRtcF9zdGF0cykKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gbmRldi0+cHJpdjsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCW1lbWNweSh0bXBfc3RhdHMsICZkZXYtPnN0YXRzLCBzaXplb2YoZGV2LT5zdGF0cykpOwotCXRtcF9zdGF0cyArPSBzaXplb2YoZGV2LT5zdGF0cykgLyBzaXplb2YodTY0KTsKLQltZW1jcHkodG1wX3N0YXRzLCAmZGV2LT5lc3RhdHMsIHNpemVvZihkZXYtPmVzdGF0cykpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLX0KLQotc3RhdGljIHZvaWQgZW1hY19ldGh0b29sX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gbmRldi0+cHJpdjsKLQotCXN0cmNweShpbmZvLT5kcml2ZXIsICJpYm1fZW1hYyIpOwotCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTik7Ci0JaW5mby0+ZndfdmVyc2lvblswXSA9ICdcMCc7Ci0Jc3ByaW50ZihpbmZvLT5idXNfaW5mbywgIlBQQyA0eHggRU1BQyAlZCIsIGRldi0+ZGVmLT5pbmRleCk7Ci0JaW5mby0+cmVnZHVtcF9sZW4gPSBlbWFjX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuKG5kZXYpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVtYWNfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9zZXR0aW5ncyA9IGVtYWNfZXRodG9vbF9nZXRfc2V0dGluZ3MsCi0JLnNldF9zZXR0aW5ncyA9IGVtYWNfZXRodG9vbF9zZXRfc2V0dGluZ3MsCi0JLmdldF9kcnZpbmZvID0gZW1hY19ldGh0b29sX2dldF9kcnZpbmZvLAotCi0JLmdldF9yZWdzX2xlbiA9IGVtYWNfZXRodG9vbF9nZXRfcmVnc19sZW4sCi0JLmdldF9yZWdzID0gZW1hY19ldGh0b29sX2dldF9yZWdzLAotCi0JLm53YXlfcmVzZXQgPSBlbWFjX2V0aHRvb2xfbndheV9yZXNldCwKLQotCS5nZXRfcmluZ3BhcmFtID0gZW1hY19ldGh0b29sX2dldF9yaW5ncGFyYW0sCi0JLmdldF9wYXVzZXBhcmFtID0gZW1hY19ldGh0b29sX2dldF9wYXVzZXBhcmFtLAotCi0JLmdldF9yeF9jc3VtID0gZW1hY19ldGh0b29sX2dldF9yeF9jc3VtLAotCi0JLmdldF9zdHJpbmdzID0gZW1hY19ldGh0b29sX2dldF9zdHJpbmdzLAotCS5nZXRfc3NldF9jb3VudCA9IGVtYWNfZ2V0X3NzZXRfY291bnQsCi0JLmdldF9ldGh0b29sX3N0YXRzID0gZW1hY19ldGh0b29sX2dldF9ldGh0b29sX3N0YXRzLAotCi0JLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKLX07Ci0KLXN0YXRpYyBpbnQgZW1hY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gbmRldi0+cHJpdjsKLQl1aW50MTZfdCAqZGF0YSA9ICh1aW50MTZfdCAqKSAmIHJxLT5pZnJfaWZydTsKLQotCURCRygiJWQ6IGlvY3RsICUwOHgiIE5MLCBkZXYtPmRlZi0+aW5kZXgsIGNtZCk7Ci0KLQlpZiAoZGV2LT5waHkuYWRkcmVzcyA8IDApCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DR01JSVBIWToKLQljYXNlIFNJT0NERVZQUklWQVRFOgotCQlkYXRhWzBdID0gZGV2LT5waHkuYWRkcmVzczsKLQkJLyogRmFsbCB0aHJvdWdoICovCi0JY2FzZSBTSU9DR01JSVJFRzoKLQljYXNlIFNJT0NERVZQUklWQVRFICsgMToKLQkJZGF0YVszXSA9IGVtYWNfbWRpb19yZWFkKG5kZXYsIGRldi0+cGh5LmFkZHJlc3MsIGRhdGFbMV0pOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JY2FzZSBTSU9DREVWUFJJVkFURSArIDI6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCWVtYWNfbWRpb193cml0ZShuZGV2LCBkZXYtPnBoeS5hZGRyZXNzLCBkYXRhWzFdLCBkYXRhWzJdKTsKLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgZW1hY19wcm9iZShzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2KQotewotCXN0cnVjdCBvY3BfZnVuY19lbWFjX2RhdGEgKmVtYWNkYXRhID0gb2NwZGV2LT5kZWYtPmFkZGl0aW9uczsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKLQlzdHJ1Y3Qgb2NwX2RldmljZSAqbWFsZGV2OwotCXN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXY7Ci0JaW50IGVyciwgaTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCURCRygiJWQ6IHByb2JlIiBOTCwgb2NwZGV2LT5kZWYtPmluZGV4KTsKLQotCWlmICghZW1hY2RhdGEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJlbWFjJWQ6IE1pc3NpbmcgYWRkaXRpb25hbCBkYXRhIVxuIiwKLQkJICAgICAgIG9jcGRldi0+ZGVmLT5pbmRleCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qIEFsbG9jYXRlIG91ciBuZXRfZGV2aWNlIHN0cnVjdHVyZSAqLwotCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUpKTsKLQlpZiAoIW5kZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJlbWFjJWQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSBldGhlcm5ldCBkZXZpY2UhXG4iLAotCQkgICAgICAgb2NwZGV2LT5kZWYtPmluZGV4KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWRldiA9IG5kZXYtPnByaXY7Ci0JZGV2LT5uZGV2ID0gbmRldjsKLQlkZXYtPmxkZXYgPSAmb2NwZGV2LT5kZXY7Ci0JZGV2LT5kZWYgPSBvY3BkZXYtPmRlZjsKLQotCS8qIEZpbmQgTUFMIGRldmljZSB3ZSBhcmUgY29ubmVjdGVkIHRvICovCi0JbWFsZGV2ID0KLQkgICAgb2NwX2ZpbmRfZGV2aWNlKE9DUF9WRU5ET1JfSUJNLCBPQ1BfRlVOQ19NQUwsIGVtYWNkYXRhLT5tYWxfaWR4KTsKLQlpZiAoIW1hbGRldikgewotCQlwcmludGsoS0VSTl9FUlIgImVtYWMlZDogdW5rbm93biBtYWwlZCBkZXZpY2UhXG4iLAotCQkgICAgICAgZGV2LT5kZWYtPmluZGV4LCBlbWFjZGF0YS0+bWFsX2lkeCk7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQlkZXYtPm1hbCA9IG9jcF9nZXRfZHJ2ZGF0YShtYWxkZXYpOwotCWlmICghZGV2LT5tYWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJlbWFjJWQ6IG1hbCVkIGhhc24ndCBiZWVuIGluaXRpYWxpemVkIHlldCFcbiIsCi0JCSAgICAgICBkZXYtPmRlZi0+aW5kZXgsIGVtYWNkYXRhLT5tYWxfaWR4KTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogUmVnaXN0ZXIgd2l0aCBNQUwgKi8KLQlkZXYtPmNvbW1hYy5vcHMgPSAmZW1hY19jb21tYWNfb3BzOwotCWRldi0+Y29tbWFjLmRldiA9IGRldjsKLQlkZXYtPmNvbW1hYy50eF9jaGFuX21hc2sgPSBNQUxfQ0hBTl9NQVNLKGVtYWNkYXRhLT5tYWxfdHhfY2hhbik7Ci0JZGV2LT5jb21tYWMucnhfY2hhbl9tYXNrID0gTUFMX0NIQU5fTUFTSyhlbWFjZGF0YS0+bWFsX3J4X2NoYW4pOwotCWVyciA9IG1hbF9yZWdpc3Rlcl9jb21tYWMoZGV2LT5tYWwsICZkZXYtPmNvbW1hYyk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgImVtYWMlZDogZmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggbWFsJWQhXG4iLAotCQkgICAgICAgZGV2LT5kZWYtPmluZGV4LCBlbWFjZGF0YS0+bWFsX2lkeCk7Ci0JCWdvdG8gb3V0OwotCX0KLQlkZXYtPnJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jfc2l6ZShuZGV2LT5tdHUpOwotCWRldi0+cnhfc3luY19zaXplID0gZW1hY19yeF9zeW5jX3NpemUobmRldi0+bXR1KTsKLQotCS8qIEdldCBwb2ludGVycyB0byBCRCByaW5ncyAqLwotCWRldi0+dHhfZGVzYyA9Ci0JICAgIGRldi0+bWFsLT5iZF92aXJ0ICsgbWFsX3R4X2JkX29mZnNldChkZXYtPm1hbCwKLQkJCQkJCSBlbWFjZGF0YS0+bWFsX3R4X2NoYW4pOwotCWRldi0+cnhfZGVzYyA9Ci0JICAgIGRldi0+bWFsLT5iZF92aXJ0ICsgbWFsX3J4X2JkX29mZnNldChkZXYtPm1hbCwKLQkJCQkJCSBlbWFjZGF0YS0+bWFsX3J4X2NoYW4pOwotCi0JREJHKCIlZDogdHhfZGVzYyAlcCIgTkwsIG9jcGRldi0+ZGVmLT5pbmRleCwgZGV2LT50eF9kZXNjKTsKLQlEQkcoIiVkOiByeF9kZXNjICVwIiBOTCwgb2NwZGV2LT5kZWYtPmluZGV4LCBkZXYtPnJ4X2Rlc2MpOwotCi0JLyogQ2xlYW4gcmluZ3MgKi8KLQltZW1zZXQoZGV2LT50eF9kZXNjLCAwLCBOVU1fVFhfQlVGRiAqIHNpemVvZihzdHJ1Y3QgbWFsX2Rlc2NyaXB0b3IpKTsKLQltZW1zZXQoZGV2LT5yeF9kZXNjLCAwLCBOVU1fUlhfQlVGRiAqIHNpemVvZihzdHJ1Y3QgbWFsX2Rlc2NyaXB0b3IpKTsKLQotCS8qIElmIHdlIGRlcGVuZCBvbiBhbm90aGVyIEVNQUMgZm9yIE1ESU8sIGNoZWNrIHdoZXRoZXIgaXQgd2FzIHByb2JlZCBhbHJlYWR5ICovCi0JaWYgKGVtYWNkYXRhLT5tZGlvX2lkeCA+PSAwICYmIGVtYWNkYXRhLT5tZGlvX2lkeCAhPSBvY3BkZXYtPmRlZi0+aW5kZXgpIHsKLQkJc3RydWN0IG9jcF9kZXZpY2UgKm1kaW9kZXYgPQotCQkgICAgb2NwX2ZpbmRfZGV2aWNlKE9DUF9WRU5ET1JfSUJNLCBPQ1BfRlVOQ19FTUFDLAotCQkJCSAgICBlbWFjZGF0YS0+bWRpb19pZHgpOwotCQlpZiAoIW1kaW9kZXYpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZW1hYyVkOiB1bmtub3duIGVtYWMlZCBkZXZpY2UhXG4iLAotCQkJICAgICAgIGRldi0+ZGVmLT5pbmRleCwgZW1hY2RhdGEtPm1kaW9faWR4KTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIG91dDI7Ci0JCX0KLQkJZGV2LT5tZGlvX2RldiA9IG9jcF9nZXRfZHJ2ZGF0YShtZGlvZGV2KTsKLQkJaWYgKCFkZXYtPm1kaW9fZGV2KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiZW1hYyVkOiBlbWFjJWQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgeWV0IVxuIiwKLQkJCSAgICAgICBkZXYtPmRlZi0+aW5kZXgsIGVtYWNkYXRhLT5tZGlvX2lkeCk7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBvdXQyOwotCQl9Ci0JfQotCi0JLyogQXR0YWNoIHRvIFpNSUksIGlmIG5lZWRlZCAqLwotCWlmICgoZXJyID0gem1paV9hdHRhY2goZGV2KSkgIT0gMCkKLQkJZ290byBvdXQyOwotCi0JLyogQXR0YWNoIHRvIFJHTUlJLCBpZiBuZWVkZWQgKi8KLQlpZiAoKGVyciA9IHJnbWlpX2F0dGFjaChkZXYpKSAhPSAwKQotCQlnb3RvIG91dDM7Ci0KLQkvKiBBdHRhY2ggdG8gVEFILCBpZiBuZWVkZWQgKi8KLQlpZiAoKGVyciA9IHRhaF9hdHRhY2goZGV2KSkgIT0gMCkKLQkJZ290byBvdXQ0OwotCi0JLyogTWFwIEVNQUMgcmVncyAqLwotCWRldi0+ZW1hY3AgPSBpb3JlbWFwKGRldi0+ZGVmLT5wYWRkciwgc2l6ZW9mKHN0cnVjdCBlbWFjX3JlZ3MpKTsKLQlpZiAoIWRldi0+ZW1hY3ApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJlbWFjJWQ6IGNvdWxkIG5vdCBpb3JlbWFwIGRldmljZSByZWdpc3RlcnMhXG4iLAotCQkgICAgICAgZGV2LT5kZWYtPmluZGV4KTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQ1OwotCX0KLQotCS8qIEZpbGwgaW4gTUFDIGFkZHJlc3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjsgKytpKQotCQluZGV2LT5kZXZfYWRkcltpXSA9IGVtYWNkYXRhLT5tYWNfYWRkcltpXTsKLQotCS8qIFNldCBzb21lIGxpbmsgZGVmYXVsdHMgYmVmb3JlIHdlIGNhbiBmaW5kIG91dCByZWFsIHBhcmFtZXRlcnMgKi8KLQlkZXYtPnBoeS5zcGVlZCA9IFNQRUVEXzEwMDsKLQlkZXYtPnBoeS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQlkZXYtPnBoeS5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCWRldi0+cGh5LnBhdXNlID0gZGV2LT5waHkuYXN5bV9wYXVzZSA9IDA7Ci0JZGV2LT5zdG9wX3RpbWVvdXQgPSBTVE9QX1RJTUVPVVRfMTAwOwotCWluaXRfdGltZXIoJmRldi0+bGlua190aW1lcik7Ci0JZGV2LT5saW5rX3RpbWVyLmZ1bmN0aW9uID0gZW1hY19saW5rX3RpbWVyOwotCWRldi0+bGlua190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwotCi0JLyogRmluZCBQSFkgaWYgYW55ICovCi0JZGV2LT5waHkuZGV2ID0gbmRldjsKLQlkZXYtPnBoeS5tb2RlID0gZW1hY2RhdGEtPnBoeV9tb2RlOwotCWlmIChlbWFjZGF0YS0+cGh5X21hcCAhPSAweGZmZmZmZmZmKSB7Ci0JCXUzMiBwaHlfbWFwID0gZW1hY2RhdGEtPnBoeV9tYXAgfCBidXN5X3BoeV9tYXA7Ci0JCXUzMiBhZHY7Ci0KLQkJREJHKCIlZDogUEhZIG1hcHMgJTA4eCAlMDh4IiBOTCwgZGV2LT5kZWYtPmluZGV4LAotCQkgICAgZW1hY2RhdGEtPnBoeV9tYXAsIGJ1c3lfcGh5X21hcCk7Ci0KLQkJRU1BQ19SWF9DTEtfVFgoZGV2LT5kZWYtPmluZGV4KTsKLQotCQlkZXYtPnBoeS5tZGlvX3JlYWQgPSBlbWFjX21kaW9fcmVhZDsKLQkJZGV2LT5waHkubWRpb193cml0ZSA9IGVtYWNfbWRpb193cml0ZTsKLQotCQkvKiBDb25maWd1cmUgRU1BQyB3aXRoIGRlZmF1bHRzIHNvIHdlIGNhbiBhdCBsZWFzdCB1c2UgTURJTwotCQkgKiBUaGlzIGlzIG5lZWRlZCBtb3N0bHkgZm9yIDQ0MEdYCi0JCSAqLwotCQlpZiAoZW1hY19waHlfZ3BjcyhkZXYtPnBoeS5tb2RlKSkgewotCQkJLyogWFhYCi0JCQkgKiBNYWtlIEdQQ1MgUEhZIGFkZHJlc3MgZXF1YWwgdG8gRU1BQyBpbmRleC4KLQkJCSAqIFdlIHByb2JhYmx5IHNob3VsZCB0YWtlIGludG8gYWNjb3VudCBidXN5X3BoeV9tYXAKLQkJCSAqIGFuZC9vciBwaHlfbWFwIGhlcmUuCi0JCQkgKi8KLQkJCWRldi0+cGh5LmFkZHJlc3MgPSBkZXYtPmRlZi0+aW5kZXg7Ci0JCX0KLQkJCi0JCWVtYWNfY29uZmlndXJlKGRldik7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDB4MjA7IHBoeV9tYXAgPj49IDEsICsraSkKLQkJCWlmICghKHBoeV9tYXAgJiAxKSkgewotCQkJCWludCByOwotCQkJCWJ1c3lfcGh5X21hcCB8PSAxIDw8IGk7Ci0KLQkJCQkvKiBRdWljayBjaGVjayBpZiB0aGVyZSBpcyBhIFBIWSBhdCB0aGUgYWRkcmVzcyAqLwotCQkJCXIgPSBlbWFjX21kaW9fcmVhZChkZXYtPm5kZXYsIGksIE1JSV9CTUNSKTsKLQkJCQlpZiAociA9PSAweGZmZmYgfHwgciA8IDApCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmICghbWlpX3BoeV9wcm9iZSgmZGV2LT5waHksIGkpKQotCQkJCQlicmVhazsKLQkJCX0KLQkJaWYgKGkgPT0gMHgyMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZW1hYyVkOiBjYW4ndCBmaW5kIFBIWSFcbiIsCi0JCQkgICAgICAgZGV2LT5kZWYtPmluZGV4KTsKLQkJCWdvdG8gb3V0NjsKLQkJfQotCi0JCS8qIEluaXQgUEhZICovCi0JCWlmIChkZXYtPnBoeS5kZWYtPm9wcy0+aW5pdCkKLQkJCWRldi0+cGh5LmRlZi0+b3BzLT5pbml0KCZkZXYtPnBoeSk7Ci0JCQotCQkvKiBEaXNhYmxlIGFueSBQSFkgZmVhdHVyZXMgbm90IHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0gKi8KLQkJZGV2LT5waHkuZGVmLT5mZWF0dXJlcyAmPSB+ZW1hY2RhdGEtPnBoeV9mZWF0X2V4YzsKLQotCQkvKiBTZXR1cCBpbml0aWFsIGxpbmsgcGFyYW1ldGVycyAqLwotCQlpZiAoZGV2LT5waHkuZmVhdHVyZXMgJiBTVVBQT1JURURfQXV0b25lZykgewotCQkJYWR2ID0gZGV2LT5waHkuZmVhdHVyZXM7Ci0jaWYgIWRlZmluZWQoQ09ORklHXzQweCkKLQkJCWFkdiB8PSBBRFZFUlRJU0VEX1BhdXNlIHwgQURWRVJUSVNFRF9Bc3ltX1BhdXNlOwotI2VuZGlmCi0JCQkvKiBSZXN0YXJ0IGF1dG9uZWdvdGlhdGlvbiAqLwotCQkJZGV2LT5waHkuZGVmLT5vcHMtPnNldHVwX2FuZWcoJmRldi0+cGh5LCBhZHYpOwotCQl9IGVsc2UgewotCQkJdTMyIGYgPSBkZXYtPnBoeS5kZWYtPmZlYXR1cmVzOwotCQkJaW50IHNwZWVkID0gU1BFRURfMTAsIGZkID0gRFVQTEVYX0hBTEY7Ci0KLQkJCS8qIFNlbGVjdCBoaWdoZXN0IHN1cHBvcnRlZCBzcGVlZC9kdXBsZXggKi8KLQkJCWlmIChmICYgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKSB7Ci0JCQkJc3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJCWZkID0gRFVQTEVYX0ZVTEw7Ci0JCQl9IGVsc2UgaWYgKGYgJiBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYpCi0JCQkJc3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJZWxzZSBpZiAoZiAmIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsKSB7Ci0JCQkJc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQkJZmQgPSBEVVBMRVhfRlVMTDsKLQkJCX0gZWxzZSBpZiAoZiAmIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmKQotCQkJCXNwZWVkID0gU1BFRURfMTAwOwotCQkJZWxzZSBpZiAoZiAmIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpCi0JCQkJZmQgPSBEVVBMRVhfRlVMTDsKLQotCQkJLyogRm9yY2UgbGluayBwYXJhbWV0ZXJzICovCi0JCQlkZXYtPnBoeS5kZWYtPm9wcy0+c2V0dXBfZm9yY2VkKCZkZXYtPnBoeSwgc3BlZWQsIGZkKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWVtYWNfcmVzZXQoZGV2KTsKLQotCQkvKiBQSFktbGVzcyBjb25maWd1cmF0aW9uLgotCQkgKiBYWFggSSBwcm9iYWJseSBzaG91bGQgbW92ZSB0aGVzZSBzZXR0aW5ncyB0byBlbWFjZGF0YQotCQkgKi8KLQkJZGV2LT5waHkuYWRkcmVzcyA9IC0xOwotCQlkZXYtPnBoeS5mZWF0dXJlcyA9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX01JSTsKLQkJZGV2LT5waHkucGF1c2UgPSAxOwotCX0KLQotCS8qIEZpbGwgaW4gdGhlIGRyaXZlciBmdW5jdGlvbiB0YWJsZSAqLwotCW5kZXYtPm9wZW4gPSAmZW1hY19vcGVuOwotCWlmIChkZXYtPnRhaF9kZXYpIHsKLQkJbmRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVtYWNfc3RhcnRfeG1pdF9zZzsKLQkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKLQl9IGVsc2UKLQkJbmRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVtYWNfc3RhcnRfeG1pdDsKLQluZGV2LT50eF90aW1lb3V0ID0gJmVtYWNfZnVsbF90eF9yZXNldDsKLQluZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKLQluZGV2LT5zdG9wID0gJmVtYWNfY2xvc2U7Ci0JbmRldi0+Z2V0X3N0YXRzID0gJmVtYWNfc3RhdHM7Ci0JbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmVtYWNfc2V0X211bHRpY2FzdF9saXN0OwotCW5kZXYtPmRvX2lvY3RsID0gJmVtYWNfaW9jdGw7Ci0JaWYgKGVtYWNfcGh5X3N1cHBvcnRzX2dpZ2UoZW1hY2RhdGEtPnBoeV9tb2RlKSkgewotCQluZGV2LT5jaGFuZ2VfbXR1ID0gJmVtYWNfY2hhbmdlX210dTsKLQkJZGV2LT5jb21tYWMub3BzID0gJmVtYWNfY29tbWFjX3NnX29wczsKLQl9Ci0JU0VUX0VUSFRPT0xfT1BTKG5kZXYsICZlbWFjX2V0aHRvb2xfb3BzKTsKLQotCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmRldik7Ci0KLQllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgImVtYWMlZDogZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldCBkZXZpY2UgKCVkKSFcbiIsCi0JCSAgICAgICBkZXYtPmRlZi0+aW5kZXgsIGVycik7Ci0JCWdvdG8gb3V0NjsKLQl9Ci0KLQlvY3Bfc2V0X2RydmRhdGEob2NwZGV2LCBkZXYpOwotCi0JcHJpbnRrKCIlczogZW1hYyVkLCBNQUMgJXNcbiIsCi0JICAgICAgIG5kZXYtPm5hbWUsIGRldi0+ZGVmLT5pbmRleCwgcHJpbnRfbWFjKG1hYywgbmRldi0+ZGV2X2FkZHIpKTsKLQotCWlmIChkZXYtPnBoeS5hZGRyZXNzID49IDApCi0JCXByaW50aygiJXM6IGZvdW5kICVzIFBIWSAoMHglMDJ4KVxuIiwgbmRldi0+bmFtZSwKLQkJICAgICAgIGRldi0+cGh5LmRlZi0+bmFtZSwgZGV2LT5waHkuYWRkcmVzcyk7Ci0KLQllbWFjX2RiZ19yZWdpc3RlcihkZXYtPmRlZi0+aW5kZXgsIGRldik7Ci0KLQlyZXR1cm4gMDsKLSAgICAgIG91dDY6Ci0JaW91bm1hcChkZXYtPmVtYWNwKTsKLSAgICAgIG91dDU6Ci0JdGFoX2ZpbmkoZGV2LT50YWhfZGV2KTsKLSAgICAgIG91dDQ6Ci0JcmdtaWlfZmluaShkZXYtPnJnbWlpX2RldiwgZGV2LT5yZ21paV9pbnB1dCk7Ci0gICAgICBvdXQzOgotCXptaWlfZmluaShkZXYtPnptaWlfZGV2LCBkZXYtPnptaWlfaW5wdXQpOwotICAgICAgb3V0MjoKLQltYWxfdW5yZWdpc3Rlcl9jb21tYWMoZGV2LT5tYWwsICZkZXYtPmNvbW1hYyk7Ci0gICAgICBvdXQ6Ci0Ja2ZyZWUobmRldik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHN0cnVjdCBvY3BfZGV2aWNlX2lkIGVtYWNfaWRzW10gPSB7Ci0JeyAudmVuZG9yID0gT0NQX1ZFTkRPUl9JQk0sIC5mdW5jdGlvbiA9IE9DUF9GVU5DX0VNQUMgfSwKLQl7IC52ZW5kb3IgPSBPQ1BfVkVORE9SX0lOVkFMSUR9Ci19OwotCi1zdGF0aWMgc3RydWN0IG9jcF9kcml2ZXIgZW1hY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZW1hYyIsCi0JLmlkX3RhYmxlID0gZW1hY19pZHMsCi0JLnByb2JlID0gZW1hY19wcm9iZSwKLQkucmVtb3ZlID0gZW1hY19yZW1vdmUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBlbWFjX2luaXQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPIERSVl9ERVNDICIsIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKLQotCURCRygiOiBpbml0IiBOTCk7Ci0KLQlpZiAobWFsX2luaXQoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlFTUFDX0NMS19JTlRFUk5BTDsKLQlpZiAob2NwX3JlZ2lzdGVyX2RyaXZlcigmZW1hY19kcml2ZXIpKSB7Ci0JCUVNQUNfQ0xLX0VYVEVSTkFMOwotCQlvY3BfdW5yZWdpc3Rlcl9kcml2ZXIoJmVtYWNfZHJpdmVyKTsKLQkJbWFsX2V4aXQoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCUVNQUNfQ0xLX0VYVEVSTkFMOwotCi0JZW1hY19pbml0X2RlYnVnKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBlbWFjX2V4aXQodm9pZCkKLXsKLQlEQkcoIjogZXhpdCIgTkwpOwotCW9jcF91bnJlZ2lzdGVyX2RyaXZlcigmZW1hY19kcml2ZXIpOwotCW1hbF9leGl0KCk7Ci0JZW1hY19maW5pX2RlYnVnKCk7Ci19Ci0KLW1vZHVsZV9pbml0KGVtYWNfaW5pdCk7Ci1tb2R1bGVfZXhpdChlbWFjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5oIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWJiOTRhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2NvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5oCi0gKgotICogRHJpdmVyIGZvciBQb3dlclBDIDR4eCBvbi1jaGlwIGV0aGVybmV0IGNvbnRyb2xsZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IFp1bHR5cyBUZWNobm9sb2dpZXMuCi0gKiBFdWdlbmUgU3Vyb3ZlZ2luIDxldWdlbmUuc3Vyb3ZlZ2luQHp1bHR5cy5jb20+IG9yIDxlYnNAZWJzaG9tZS5uZXQ+Ci0gKgotICogQmFzZWQgb24gb3JpZ2luYWwgd29yayBieQotICogICAgICBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLSAqIAlKb2hubmllIFBldGVycyA8anBldGVyc0BtdmlzdGEuY29tPgotICogICAgICBDb3B5cmlnaHQgMjAwMCwgMjAwMSBNb250YVZpc3RhIFNvZnRhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaWZuZGVmIF9fSUJNX0VNQUNfQ09SRV9IXwotI2RlZmluZSBfX0lCTV9FTUFDX0NPUkVfSF8KLQotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL29jcC5oPgotCi0jaW5jbHVkZSAiaWJtX2VtYWMuaCIKLSNpbmNsdWRlICJpYm1fZW1hY19waHkuaCIKLSNpbmNsdWRlICJpYm1fZW1hY196bWlpLmgiCi0jaW5jbHVkZSAiaWJtX2VtYWNfcmdtaWkuaCIKLSNpbmNsdWRlICJpYm1fZW1hY19tYWwuaCIKLSNpbmNsdWRlICJpYm1fZW1hY190YWguaCIKLQotI2RlZmluZSBOVU1fVFhfQlVGRgkJCUNPTkZJR19JQk1fRU1BQ19UWEIKLSNkZWZpbmUgTlVNX1JYX0JVRkYJCQlDT05GSUdfSUJNX0VNQUNfUlhCCi0KLS8qIFNpbXBsZSBzYW5pdHkgY2hlY2sgKi8KLSNpZiBOVU1fVFhfQlVGRiA+IDI1NiB8fCBOVU1fUlhfQlVGRiA+IDI1NgotI2Vycm9yIEludmFsaWQgbnVtYmVyIG9mIGJ1ZmZlciBkZXNjcmlwdG9ycyAoZ3JlYXRlciB0aGFuIDI1NikKLSNlbmRpZgotCi0vLyBYWFgKLSNkZWZpbmUgRU1BQ19NSU5fTVRVCQkJNDYKLSNkZWZpbmUgRU1BQ19NQVhfTVRVCQkJOTAwMAotCi0vKiBNYXhpbXVtIEwyIGhlYWRlciBsZW5ndGggKFZMQU4gdGFnZ2VkLCBubyBGQ1MpICovCi0jZGVmaW5lIEVNQUNfTVRVX09WRVJIRUFECQkoNiAqIDIgKyAyICsgNCkKLQotLyogUlggQkQgc2l6ZSBmb3IgdGhlIGdpdmVuIE1UVSAqLwotc3RhdGljIGlubGluZSBpbnQgZW1hY19yeF9zaXplKGludCBtdHUpCi17Ci0JaWYgKG10dSA+IEVUSF9EQVRBX0xFTikKLQkJcmV0dXJuIE1BTF9NQVhfUlhfU0laRTsKLQllbHNlCi0JCXJldHVybiBtYWxfcnhfc2l6ZShFVEhfREFUQV9MRU4gKyBFTUFDX01UVV9PVkVSSEVBRCk7Ci19Ci0KLSNkZWZpbmUgRU1BQ19ETUFfQUxJR04oeCkJCUFMSUdOKCh4KSwgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKSkKLQotI2RlZmluZSBFTUFDX1JYX1NLQl9IRUFEUk9PTQkJXAotCUVNQUNfRE1BX0FMSUdOKENPTkZJR19JQk1fRU1BQ19SWF9TS0JfSEVBRFJPT00pCi0KLS8qIFNpemUgb2YgUlggc2tiIGZvciB0aGUgZ2l2ZW4gTVRVICovCi1zdGF0aWMgaW5saW5lIGludCBlbWFjX3J4X3NrYl9zaXplKGludCBtdHUpCi17Ci0JaW50IHNpemUgPSBtYXgobXR1ICsgRU1BQ19NVFVfT1ZFUkhFQUQsIGVtYWNfcnhfc2l6ZShtdHUpKTsKLQlyZXR1cm4gRU1BQ19ETUFfQUxJR04oc2l6ZSArIDIpICsgRU1BQ19SWF9TS0JfSEVBRFJPT007Ci19Ci0KLS8qIFJYIERNQSBzeW5jIHNpemUgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGVtYWNfcnhfc3luY19zaXplKGludCBtdHUpCi17Ci0JcmV0dXJuIEVNQUNfRE1BX0FMSUdOKGVtYWNfcnhfc2l6ZShtdHUpICsgMik7Ci19Ci0KLS8qIERyaXZlciBzdGF0aXN0Y3MgaXMgc3BsaXQgaW50byB0d28gcGFydHMgdG8gbWFrZSBpdCBtb3JlIGNhY2hlIGZyaWVuZGx5OgotICogICAtIG5vcm1hbCBzdGF0aXN0aWNzIChwYWNrZXQgY291bnQsIGV0YykKLSAqICAgLSBlcnJvciBzdGF0aXN0aWNzCi0gKgotICogV2hlbiBzdGF0aXN0aWNzIGlzIHJlcXVlc3RlZCBieSBldGh0b29sLCB0aGVzZSBwYXJ0cyBhcmUgY29uY2F0ZW5hdGVkLAotICogbm9ybWFsIG9uZSBnb2VzIGZpcnN0LgotICoKLSAqIFBsZWFzZSwga2VlcCB0aGVzZSBzdHJ1Y3R1cmVzIGluIHN5bmMgd2l0aCBlbWFjX3N0YXRzX2tleXMuCi0gKi8KLQotLyogTm9ybWFsIFRYL1JYIFN0YXRpc3RpY3MgKi8KLXN0cnVjdCBpYm1fZW1hY19zdGF0cyB7Ci0JdTY0IHJ4X3BhY2tldHM7Ci0JdTY0IHJ4X2J5dGVzOwotCXU2NCB0eF9wYWNrZXRzOwotCXU2NCB0eF9ieXRlczsKLQl1NjQgcnhfcGFja2V0c19jc3VtOwotCXU2NCB0eF9wYWNrZXRzX2NzdW07Ci19OwotCi0vKiBFcnJvciBzdGF0aXN0aWNzICovCi1zdHJ1Y3QgaWJtX2VtYWNfZXJyb3Jfc3RhdHMgewotCXU2NCB0eF91bmRvOwotCi0JLyogU29mdHdhcmUgUlggRXJyb3JzICovCi0JdTY0IHJ4X2Ryb3BwZWRfc3RhY2s7Ci0JdTY0IHJ4X2Ryb3BwZWRfb29tOwotCXU2NCByeF9kcm9wcGVkX2Vycm9yOwotCXU2NCByeF9kcm9wcGVkX3Jlc2l6ZTsKLQl1NjQgcnhfZHJvcHBlZF9tdHU7Ci0JdTY0IHJ4X3N0b3BwZWQ7Ci0JLyogQkQgcmVwb3J0ZWQgUlggZXJyb3JzICovCi0JdTY0IHJ4X2JkX2Vycm9yczsKLQl1NjQgcnhfYmRfb3ZlcnJ1bjsKLQl1NjQgcnhfYmRfYmFkX3BhY2tldDsKLQl1NjQgcnhfYmRfcnVudF9wYWNrZXQ7Ci0JdTY0IHJ4X2JkX3Nob3J0X2V2ZW50OwotCXU2NCByeF9iZF9hbGlnbm1lbnRfZXJyb3I7Ci0JdTY0IHJ4X2JkX2JhZF9mY3M7Ci0JdTY0IHJ4X2JkX3BhY2tldF90b29fbG9uZzsKLQl1NjQgcnhfYmRfb3V0X29mX3JhbmdlOwotCXU2NCByeF9iZF9pbl9yYW5nZTsKLQkvKiBFTUFDIElSUSByZXBvcnRlZCBSWCBlcnJvcnMgKi8KLQl1NjQgcnhfcGFyaXR5OwotCXU2NCByeF9maWZvX292ZXJydW47Ci0JdTY0IHJ4X292ZXJydW47Ci0JdTY0IHJ4X2JhZF9wYWNrZXQ7Ci0JdTY0IHJ4X3J1bnRfcGFja2V0OwotCXU2NCByeF9zaG9ydF9ldmVudDsKLQl1NjQgcnhfYWxpZ25tZW50X2Vycm9yOwotCXU2NCByeF9iYWRfZmNzOwotCXU2NCByeF9wYWNrZXRfdG9vX2xvbmc7Ci0JdTY0IHJ4X291dF9vZl9yYW5nZTsKLQl1NjQgcnhfaW5fcmFuZ2U7Ci0KLQkvKiBTb2Z0d2FyZSBUWCBFcnJvcnMgKi8KLQl1NjQgdHhfZHJvcHBlZDsKLQkvKiBCRCByZXBvcnRlZCBUWCBlcnJvcnMgKi8KLQl1NjQgdHhfYmRfZXJyb3JzOwotCXU2NCB0eF9iZF9iYWRfZmNzOwotCXU2NCB0eF9iZF9jYXJyaWVyX2xvc3M7Ci0JdTY0IHR4X2JkX2V4Y2Vzc2l2ZV9kZWZlcnJhbDsKLQl1NjQgdHhfYmRfZXhjZXNzaXZlX2NvbGxpc2lvbnM7Ci0JdTY0IHR4X2JkX2xhdGVfY29sbGlzaW9uOwotCXU2NCB0eF9iZF9tdWx0cGxlX2NvbGxpc2lvbnM7Ci0JdTY0IHR4X2JkX3NpbmdsZV9jb2xsaXNpb247Ci0JdTY0IHR4X2JkX3VuZGVycnVuOwotCXU2NCB0eF9iZF9zcWU7Ci0JLyogRU1BQyBJUlEgcmVwb3J0ZWQgVFggZXJyb3JzICovCi0JdTY0IHR4X3Bhcml0eTsKLQl1NjQgdHhfdW5kZXJydW47Ci0JdTY0IHR4X3NxZTsKLQl1NjQgdHhfZXJyb3JzOwotfTsKLQotI2RlZmluZSBFTUFDX0VUSFRPT0xfU1RBVFNfQ09VTlQJKChzaXplb2Yoc3RydWN0IGlibV9lbWFjX3N0YXRzKSArIFwKLQkJCQkJICBzaXplb2Yoc3RydWN0IGlibV9lbWFjX2Vycm9yX3N0YXRzKSkgXAotCQkJCQkgLyBzaXplb2YodTY0KSkKLQotc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgewotCXN0cnVjdCBuZXRfZGV2aWNlCQkqbmRldjsJCS8qIDAgKi8KLQlzdHJ1Y3QgZW1hY19yZWdzCQlfX2lvbWVtICplbWFjcDsKLQkKLQlzdHJ1Y3QgbWFsX2Rlc2NyaXB0b3IJCSp0eF9kZXNjOwotCWludAkJCQl0eF9jbnQ7Ci0JaW50CQkJCXR4X3Nsb3Q7Ci0JaW50CQkJCWFja19zbG90OwotCi0Jc3RydWN0IG1hbF9kZXNjcmlwdG9yCQkqcnhfZGVzYzsKLQlpbnQJCQkJcnhfc2xvdDsKLQlzdHJ1Y3Qgc2tfYnVmZgkJCSpyeF9zZ19za2I7CS8qIDEgKi8KLQlpbnQgCQkJCXJ4X3NrYl9zaXplOwotCWludAkJCQlyeF9zeW5jX3NpemU7Ci0KLQlzdHJ1Y3QgaWJtX2VtYWNfc3RhdHMgCQlzdGF0czsKLQlzdHJ1Y3Qgb2NwX2RldmljZQkJKnRhaF9kZXY7Ci0KLQlzdHJ1Y3QgaWJtX29jcF9tYWwJCSptYWw7Ci0Jc3RydWN0IG1hbF9jb21tYWMJCWNvbW1hYzsKLQotCXN0cnVjdCBza19idWZmCQkJKnR4X3NrYltOVU1fVFhfQlVGRl07Ci0Jc3RydWN0IHNrX2J1ZmYJCQkqcnhfc2tiW05VTV9SWF9CVUZGXTsKLQotCXN0cnVjdCBvY3BfZGV2aWNlCQkqem1paV9kZXY7Ci0JaW50CQkJCXptaWlfaW5wdXQ7Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUJCSptZGlvX2RldjsKLQlzdHJ1Y3Qgb2NwX2RldmljZQkJKnJnbWlpX2RldjsKLQlpbnQJCQkJcmdtaWlfaW5wdXQ7Ci0KLQlzdHJ1Y3Qgb2NwX2RlZgkJCSpkZWY7Ci0KLQlzdHJ1Y3QgbWlpX3BoeQkJCXBoeTsKLQlzdHJ1Y3QgdGltZXJfbGlzdAkJbGlua190aW1lcjsKLQlpbnQJCQkJcmVzZXRfZmFpbGVkOwotCi0JaW50CQkJCXN0b3BfdGltZW91dDsJLyogaW4gdXMgKi8KLQotCXN0cnVjdCBpYm1fZW1hY19lcnJvcl9zdGF0cwllc3RhdHM7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJCW5zdGF0czsKLQotCXN0cnVjdCBkZXZpY2UqCQkJbGRldjsKLX07Ci0KLS8qIEV0aHRvb2wgZ2V0X3JlZ3MgY29tcGxleCBkYXRhLgotICogV2Ugd2FudCB0byBnZXQgbm90IGp1c3QgRU1BQyByZWdpc3RlcnMsIGJ1dCBhbHNvIE1BTCwgWk1JSSwgUkdNSUksIFRBSCAKLSAqIHdoZW4gYXZhaWxhYmxlLgotICogCi0gKiBSZXR1cm5lZCBCTE9CIGNvbnNpc3RzIG9mIHRoZSBpYm1fZW1hY19ldGh0b29sX3JlZ3NfaGRyLCAKLSAqIE1BTCByZWdpc3RlcnMsIEVNQUMgcmVnaXN0ZXJzIGFuZCBvcHRpb25hbCBaTUlJLCBSR01JSSwgVEFIIHJlZ2lzdGVycy4KLSAqIEVhY2ggcmVnaXN0ZXIgY29tcG9uZW50IGlzIHByZWNlZGVkIHdpdGggZW1hY19ldGh0b29sX3JlZ3Nfc3ViaGRyLgotICogT3JkZXIgb2YgdGhlIG9wdGlvbmFsIGhlYWRlcnMgZm9sbG93cyB0aGVpciByZWxhdGl2ZSBiaXQgcG9zaXRpdGlvbnMgCi0gKiBpbiBlbWFjX2V0aHRvb2xfcmVnc19oZHIuY29tcG9uZW50cwotICovCi0jZGVmaW5lIEVNQUNfRVRIVE9PTF9SRUdTX1pNSUkJCTB4MDAwMDAwMDEKLSNkZWZpbmUgRU1BQ19FVEhUT09MX1JFR1NfUkdNSUkJCTB4MDAwMDAwMDIKLSNkZWZpbmUgRU1BQ19FVEhUT09MX1JFR1NfVEFICQkweDAwMDAwMDA0Ci0KLXN0cnVjdCBlbWFjX2V0aHRvb2xfcmVnc19oZHIgewotCXUzMiBjb21wb25lbnRzOwotfTsKLQotc3RydWN0IGVtYWNfZXRodG9vbF9yZWdzX3N1YmhkciB7Ci0JdTMyIHZlcnNpb247Ci0JdTMyIGluZGV4OwotfTsKLQotI2VuZGlmCQkJCS8qIF9fSUJNX0VNQUNfQ09SRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuYyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2RlYnVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNzA5MDYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuYwotICoKLSAqIERyaXZlciBmb3IgUG93ZXJQQyA0eHggb24tY2hpcCBldGhlcm5ldCBjb250cm9sbGVyLCBkZWJ1ZyBwcmludCByb3V0aW5lcy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgWnVsdHlzIFRlY2hub2xvZ2llcwotICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlICJpYm1fZW1hY19jb3JlLmgiCi0KLXN0YXRpYyB2b2lkIGVtYWNfZGVzY19kdW1wKGludCBpZHgsIHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpwKQotewotCWludCBpOwotCXByaW50aygiKiogRU1BQyVkIFRYIEJEcyAqKlxuIgotCSAgICAgICAiIHR4X2NudCA9ICVkIHR4X3Nsb3QgPSAlZCBhY2tfc2xvdCA9ICVkXG4iLAotCSAgICAgICBpZHgsIHAtPnR4X2NudCwgcC0+dHhfc2xvdCwgcC0+YWNrX3Nsb3QpOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfQlVGRiAvIDI7ICsraSkKLQkJcHJpbnRrCi0JCSAgICAoImJkWyUyZF0gMHglMDh4ICVjIDB4JTA0eCAlNHUgLSBiZFslMmRdIDB4JTA4eCAlYyAweCUwNHggJTR1XG4iLAotCQkgICAgIGksIHAtPnR4X2Rlc2NbaV0uZGF0YV9wdHIsIHAtPnR4X3NrYltpXSA/ICdWJyA6ICcgJywKLQkJICAgICBwLT50eF9kZXNjW2ldLmN0cmwsIHAtPnR4X2Rlc2NbaV0uZGF0YV9sZW4sCi0JCSAgICAgTlVNX1RYX0JVRkYgLyAyICsgaSwKLQkJICAgICBwLT50eF9kZXNjW05VTV9UWF9CVUZGIC8gMiArIGldLmRhdGFfcHRyLAotCQkgICAgIHAtPnR4X3NrYltOVU1fVFhfQlVGRiAvIDIgKyBpXSA/ICdWJyA6ICcgJywKLQkJICAgICBwLT50eF9kZXNjW05VTV9UWF9CVUZGIC8gMiArIGldLmN0cmwsCi0JCSAgICAgcC0+dHhfZGVzY1tOVU1fVFhfQlVGRiAvIDIgKyBpXS5kYXRhX2xlbik7Ci0KLQlwcmludGsoIioqIEVNQUMlZCBSWCBCRHMgKipcbiIKLQkgICAgICAgIiByeF9zbG90ID0gJWQgcnhfc3RvcHBlZCA9ICVkIHJ4X3NrYl9zaXplID0gJWQgcnhfc3luY19zaXplID0gJWRcbiIKLQkgICAgICAgIiByeF9zZ19za2IgPSAweCVwXG4iLAotCSAgICAgICBpZHgsIHAtPnJ4X3Nsb3QsIHAtPmNvbW1hYy5yeF9zdG9wcGVkLCBwLT5yeF9za2Jfc2l6ZSwKLQkgICAgICAgcC0+cnhfc3luY19zaXplLCBwLT5yeF9zZ19za2IpOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQlVGRiAvIDI7ICsraSkKLQkJcHJpbnRrCi0JCSAgICAoImJkWyUyZF0gMHglMDh4ICVjIDB4JTA0eCAlNHUgLSBiZFslMmRdIDB4JTA4eCAlYyAweCUwNHggJTR1XG4iLAotCQkgICAgIGksIHAtPnJ4X2Rlc2NbaV0uZGF0YV9wdHIsIHAtPnJ4X3NrYltpXSA/ICdWJyA6ICcgJywKLQkJICAgICBwLT5yeF9kZXNjW2ldLmN0cmwsIHAtPnJ4X2Rlc2NbaV0uZGF0YV9sZW4sCi0JCSAgICAgTlVNX1JYX0JVRkYgLyAyICsgaSwKLQkJICAgICBwLT5yeF9kZXNjW05VTV9SWF9CVUZGIC8gMiArIGldLmRhdGFfcHRyLAotCQkgICAgIHAtPnJ4X3NrYltOVU1fUlhfQlVGRiAvIDIgKyBpXSA/ICdWJyA6ICcgJywKLQkJICAgICBwLT5yeF9kZXNjW05VTV9SWF9CVUZGIC8gMiArIGldLmN0cmwsCi0JCSAgICAgcC0+cnhfZGVzY1tOVU1fUlhfQlVGRiAvIDIgKyBpXS5kYXRhX2xlbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtYWNfbWFjX2R1bXAoaW50IGlkeCwgc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldikKLXsKLQlzdHJ1Y3QgZW1hY19yZWdzIF9faW9tZW0gKnAgPSBkZXYtPmVtYWNwOwotCi0JcHJpbnRrKCIqKiBFTUFDJWQgcmVnaXN0ZXJzICoqXG4iCi0JICAgICAgICJNUjAgPSAweCUwOHggTVIxID0gMHglMDh4IFRNUjAgPSAweCUwOHggVE1SMSA9IDB4JTA4eFxuIgotCSAgICAgICAiUk1SID0gMHglMDh4IElTUiA9IDB4JTA4eCBJU0VSID0gMHglMDh4XG4iCi0JICAgICAgICJJQVIgPSAlMDR4JTA4eCBWVFBJRCA9IDB4JTA0eCBWVENJID0gMHglMDR4XG4iCi0JICAgICAgICJJQUhUOiAweCUwNHggMHglMDR4IDB4JTA0eCAweCUwNHggIgotCSAgICAgICAiR0FIVDogMHglMDR4IDB4JTA0eCAweCUwNHggMHglMDR4XG4iCi0JICAgICAgICJMU0EgPSAlMDR4JTA4eCBJUEdWUiA9IDB4JTA0eFxuIgotCSAgICAgICAiU1RBQ1IgPSAweCUwOHggVFJUUiA9IDB4JTA4eCBSV01SID0gMHglMDh4XG4iCi0JICAgICAgICJPQ1RYID0gMHglMDh4IE9DUlggPSAweCUwOHggSVBDUiA9IDB4JTA4eFxuIiwKLQkgICAgICAgaWR4LCBpbl9iZTMyKCZwLT5tcjApLCBpbl9iZTMyKCZwLT5tcjEpLAotCSAgICAgICBpbl9iZTMyKCZwLT50bXIwKSwgaW5fYmUzMigmcC0+dG1yMSksCi0JICAgICAgIGluX2JlMzIoJnAtPnJtciksIGluX2JlMzIoJnAtPmlzciksIGluX2JlMzIoJnAtPmlzZXIpLAotCSAgICAgICBpbl9iZTMyKCZwLT5pYWhyKSwgaW5fYmUzMigmcC0+aWFsciksIGluX2JlMzIoJnAtPnZ0cGlkKSwKLQkgICAgICAgaW5fYmUzMigmcC0+dnRjaSksCi0JICAgICAgIGluX2JlMzIoJnAtPmlhaHQxKSwgaW5fYmUzMigmcC0+aWFodDIpLCBpbl9iZTMyKCZwLT5pYWh0MyksCi0JICAgICAgIGluX2JlMzIoJnAtPmlhaHQ0KSwKLQkgICAgICAgaW5fYmUzMigmcC0+Z2FodDEpLCBpbl9iZTMyKCZwLT5nYWh0MiksIGluX2JlMzIoJnAtPmdhaHQzKSwKLQkgICAgICAgaW5fYmUzMigmcC0+Z2FodDQpLAotCSAgICAgICBpbl9iZTMyKCZwLT5sc2FoKSwgaW5fYmUzMigmcC0+bHNhbCksIGluX2JlMzIoJnAtPmlwZ3ZyKSwKLQkgICAgICAgaW5fYmUzMigmcC0+c3RhY3IpLCBpbl9iZTMyKCZwLT50cnRyKSwgaW5fYmUzMigmcC0+cndtciksCi0JICAgICAgIGluX2JlMzIoJnAtPm9jdHgpLCBpbl9iZTMyKCZwLT5vY3J4KSwgaW5fYmUzMigmcC0+aXBjcikKLQkgICAgKTsKLQotCWVtYWNfZGVzY19kdW1wKGlkeCwgZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgZW1hY19tYWxfZHVtcChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCkKLXsKLQlzdHJ1Y3Qgb2NwX2Z1bmNfbWFsX2RhdGEgKm1hbGRhdGEgPSBtYWwtPmRlZi0+YWRkaXRpb25zOwotCWludCBpOwotCi0JcHJpbnRrKCIqKiBNQUwlZCBSZWdpc3RlcnMgKipcbiIKLQkgICAgICAgIkNGRyA9IDB4JTA4eCBFU1IgPSAweCUwOHggSUVSID0gMHglMDh4XG4iCi0JICAgICAgICJUWHxDQVNSID0gMHglMDh4IENBUlIgPSAweCUwOHggRU9CSVNSID0gMHglMDh4IERFSVIgPSAweCUwOHhcbiIKLQkgICAgICAgIlJYfENBU1IgPSAweCUwOHggQ0FSUiA9IDB4JTA4eCBFT0JJU1IgPSAweCUwOHggREVJUiA9IDB4JTA4eFxuIiwKLQkgICAgICAgbWFsLT5kZWYtPmluZGV4LAotCSAgICAgICBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfQ0ZHKSwgZ2V0X21hbF9kY3JuKG1hbCwgTUFMX0VTUiksCi0JICAgICAgIGdldF9tYWxfZGNybihtYWwsIE1BTF9JRVIpLAotCSAgICAgICBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfVFhDQVNSKSwgZ2V0X21hbF9kY3JuKG1hbCwgTUFMX1RYQ0FSUiksCi0JICAgICAgIGdldF9tYWxfZGNybihtYWwsIE1BTF9UWEVPQklTUiksIGdldF9tYWxfZGNybihtYWwsIE1BTF9UWERFSVIpLAotCSAgICAgICBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfUlhDQVNSKSwgZ2V0X21hbF9kY3JuKG1hbCwgTUFMX1JYQ0FSUiksCi0JICAgICAgIGdldF9tYWxfZGNybihtYWwsIE1BTF9SWEVPQklTUiksIGdldF9tYWxfZGNybihtYWwsIE1BTF9SWERFSVIpCi0JICAgICk7Ci0KLQlwcmludGsoIlRYfCIpOwotCWZvciAoaSA9IDA7IGkgPCBtYWxkYXRhLT5udW1fdHhfY2hhbnM7ICsraSkgewotCQlpZiAoaSAmJiAhKGkgJSA0KSkKLQkJCXByaW50aygiXG4gICAiKTsKLQkJcHJpbnRrKCJDVFAlZCA9IDB4JTA4eCAiLCBpLCBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfVFhDVFBSKGkpKSk7Ci0JfQotCXByaW50aygiXG5SWHwiKTsKLQlmb3IgKGkgPSAwOyBpIDwgbWFsZGF0YS0+bnVtX3J4X2NoYW5zOyArK2kpIHsKLQkJaWYgKGkgJiYgIShpICUgNCkpCi0JCQlwcmludGsoIlxuICAgIik7Ci0JCXByaW50aygiQ1RQJWQgPSAweCUwOHggIiwgaSwgZ2V0X21hbF9kY3JuKG1hbCwgTUFMX1JYQ1RQUihpKSkpOwotCX0KLQlwcmludGsoIlxuICAgIik7Ci0JZm9yIChpID0gMDsgaSA8IG1hbGRhdGEtPm51bV9yeF9jaGFuczsgKytpKSB7Ci0JCXUzMiByID0gZ2V0X21hbF9kY3JuKG1hbCwgTUFMX1JDQlMoaSkpOwotCQlpZiAoaSAmJiAhKGkgJSAzKSkKLQkJCXByaW50aygiXG4gICAiKTsKLQkJcHJpbnRrKCJSQ0JTJWQgPSAweCUwOHggKCVkKSAiLCBpLCByLCByICogMTYpOwotCX0KLQlwcmludGsoIlxuIik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqX19lbWFjc1s0XTsKLXN0YXRpYyBzdHJ1Y3QgaWJtX29jcF9tYWwgKl9fbWFsc1sxXTsKLQotdm9pZCBlbWFjX2RiZ19yZWdpc3RlcihpbnQgaWR4LCBzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaWR4ID49IEFSUkFZX1NJWkUoX19lbWFjcykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImludmFsaWQgaW5kZXggJWQgd2hlbiByZWdpc3RlcmluZyBFTUFDIGZvciBkZWJ1Z2dpbmdcbiIsCi0JCSAgICAgICBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fZW1hY3NbaWR4XSA9IGRldjsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXZvaWQgbWFsX2RiZ19yZWdpc3RlcihpbnQgaWR4LCBzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGlkeCA+PSBBUlJBWV9TSVpFKF9fbWFscykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImludmFsaWQgaW5kZXggJWQgd2hlbiByZWdpc3RlcmluZyBNQUwgZm9yIGRlYnVnZ2luZ1xuIiwKLQkJICAgICAgIGlkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19tYWxzW2lkeF0gPSBtYWw7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi12b2lkIGVtYWNfZGJnX2R1bXBfYWxsKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKF9fbWFscyk7ICsraSkKLQkJaWYgKF9fbWFsc1tpXSkKLQkJCWVtYWNfbWFsX2R1bXAoX19tYWxzW2ldKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKF9fZW1hY3MpOyArK2kpCi0JCWlmIChfX2VtYWNzW2ldKQotCQkJZW1hY19tYWNfZHVtcChpLCBfX2VtYWNzW2ldKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQotc3RhdGljIHZvaWQgZW1hY19zeXNycV9oYW5kbGVyKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JZW1hY19kYmdfZHVtcF9hbGwoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3AgZW1hY19zeXNycV9vcCA9IHsKLQkuaGFuZGxlciA9IGVtYWNfc3lzcnFfaGFuZGxlciwKLQkuaGVscF9tc2cgPSAiZW1hQyIsCi0JLmFjdGlvbl9tc2cgPSAiU2hvdyBFTUFDKHMpIHN0YXR1cyIsCi19OwotCi1pbnQgX19pbml0IGVtYWNfaW5pdF9kZWJ1Zyh2b2lkKQotewotCXJldHVybiByZWdpc3Rlcl9zeXNycV9rZXkoJ2MnLCAmZW1hY19zeXNycV9vcCk7Ci19Ci0KLXZvaWQgX19leGl0IGVtYWNfZmluaV9kZWJ1Zyh2b2lkKQotewotCXVucmVnaXN0ZXJfc3lzcnFfa2V5KCdjJywgJmVtYWNfc3lzcnFfb3ApOwotfQotCi0jZWxzZQotaW50IF9faW5pdCBlbWFjX2luaXRfZGVidWcodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLXZvaWQgX19leGl0IGVtYWNfZmluaV9kZWJ1Zyh2b2lkKQotewotfQotI2VuZGlmCQkJCS8qIENPTkZJR19NQUdJQ19TWVNSUSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuaCBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjN2RjY2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19kZWJ1Zy5oCi0gKgotICogRHJpdmVyIGZvciBQb3dlclBDIDR4eCBvbi1jaGlwIGV0aGVybmV0IGNvbnRyb2xsZXIsIGRlYnVnIHByaW50IHJvdXRpbmVzLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBadWx0eXMgVGVjaG5vbG9naWVzCi0gKiBFdWdlbmUgU3Vyb3ZlZ2luIDxldWdlbmUuc3Vyb3ZlZ2luQHp1bHR5cy5jb20+IG9yIDxlYnNAZWJzaG9tZS5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX19JQk1fRU1BQ19ERUJVR19IXwotI2RlZmluZSBfX0lCTV9FTUFDX0RFQlVHX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSAiaWJtX2VtYWNfY29yZS5oIgotI2luY2x1ZGUgImlibV9lbWFjX21hbC5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfSUJNX0VNQUNfREVCVUcpCi12b2lkIGVtYWNfZGJnX3JlZ2lzdGVyKGludCBpZHgsIHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYpOwotdm9pZCBtYWxfZGJnX3JlZ2lzdGVyKGludCBpZHgsIHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsKTsKLWludCBlbWFjX2luaXRfZGVidWcodm9pZCkgX19pbml0Owotdm9pZCBlbWFjX2ZpbmlfZGVidWcodm9pZCkgX19leGl0Owotdm9pZCBlbWFjX2RiZ19kdW1wX2FsbCh2b2lkKTsKLSMgZGVmaW5lIERCR19MRVZFTAkJMQotI2Vsc2UKLSMgZGVmaW5lIGVtYWNfZGJnX3JlZ2lzdGVyKHgseSkgKCh2b2lkKTApCi0jIGRlZmluZSBtYWxfZGJnX3JlZ2lzdGVyKHgseSkJKCh2b2lkKTApCi0jIGRlZmluZSBlbWFjX2luaXRfZGVidWcoKQkoKHZvaWQpMCkKLSMgZGVmaW5lIGVtYWNfZmluaV9kZWJ1ZygpCSgodm9pZCkwKQotIyBkZWZpbmUgZW1hY19kYmdfZHVtcF9hbGwoKQkoKHZvaWQpMCkKLSMgZGVmaW5lIERCR19MRVZFTAkJMAotI2VuZGlmCi0KLSNpZiBEQkdfTEVWRUwgPiAwCi0jICBkZWZpbmUgREJHKGYseC4uLikJCXByaW50aygiZW1hYyIgZiwgIyN4KQotIyAgZGVmaW5lIE1BTF9EQkcoZix4Li4uKQlwcmludGsoIm1hbCIgZiwgIyN4KQotIyAgZGVmaW5lIFpNSUlfREJHKGYseC4uLikJcHJpbnRrKCJ6bWlpIiBmLCAjI3gpCi0jICBkZWZpbmUgUkdNSUlfREJHKGYseC4uLikJcHJpbnRrKCJyZ21paSIgZiwgIyN4KQotIyAgZGVmaW5lIE5MCQkJIlxuIgotI2Vsc2UKLSMgIGRlZmluZSBEQkcoZix4Li4uKQkJKCh2b2lkKTApCi0jICBkZWZpbmUgTUFMX0RCRyhmLHguLi4pCSgodm9pZCkwKQotIyAgZGVmaW5lIFpNSUlfREJHKGYseC4uLikJKCh2b2lkKTApCi0jICBkZWZpbmUgUkdNSUlfREJHKGYseC4uLikJKCh2b2lkKTApCi0jZW5kaWYKLSNpZiBEQkdfTEVWRUwgPiAxCi0jICBkZWZpbmUgREJHMihmLHguLi4pIAkJREJHKGYsICMjeCkKLSMgIGRlZmluZSBNQUxfREJHMihmLHguLi4pIAlNQUxfREJHKGYsICMjeCkKLSMgIGRlZmluZSBaTUlJX0RCRzIoZix4Li4uKSAJWk1JSV9EQkcoZiwgIyN4KQotIyAgZGVmaW5lIFJHTUlJX0RCRzIoZix4Li4uKSAJUkdNSUlfREJHKGYsICMjeCkKLSNlbHNlCi0jICBkZWZpbmUgREJHMihmLHguLi4pIAkJKCh2b2lkKTApCi0jICBkZWZpbmUgTUFMX0RCRzIoZix4Li4uKSAJKCh2b2lkKTApCi0jICBkZWZpbmUgWk1JSV9EQkcyKGYseC4uLikgCSgodm9pZCkwKQotIyAgZGVmaW5lIFJHTUlJX0RCRzIoZix4Li4uKSAJKCh2b2lkKTApCi0jZW5kaWYKLQotI2VuZGlmCQkJCS8qIF9fSUJNX0VNQUNfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5jIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfbWFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjZDg4MjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfbWFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzAgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5jCi0gKgotICogTWVtb3J5IEFjY2VzcyBMYXllciAoTUFMKSBzdXBwb3J0Ci0gKiAKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBadWx0eXMgVGVjaG5vbG9naWVzLgotICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgotICoKLSAqIEJhc2VkIG9uIG9yaWdpbmFsIHdvcmsgYnkKLSAqICAgICAgQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPiwKLSAqICAgICAgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiwKLSAqCi0gKiAgICAgIEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotICogICAgICBDb3B5cmlnaHQgMjAwMiBNb250YVZpc3RhIFNvZnRhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLQotI2luY2x1ZGUgPGFzbS9vY3AuaD4KLQotI2luY2x1ZGUgImlibV9lbWFjX2NvcmUuaCIKLSNpbmNsdWRlICJpYm1fZW1hY19tYWwuaCIKLSNpbmNsdWRlICJpYm1fZW1hY19kZWJ1Zy5oIgotCi1pbnQgX19pbml0IG1hbF9yZWdpc3Rlcl9jb21tYWMoc3RydWN0IGlibV9vY3BfbWFsICptYWwsCi0JCQkgICAgICAgc3RydWN0IG1hbF9jb21tYWMgKmNvbW1hYykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCU1BTF9EQkcoIiVkOiByZWcoJTA4eCwgJTA4eCkiIE5MLCBtYWwtPmRlZi0+aW5kZXgsCi0JCWNvbW1hYy0+dHhfY2hhbl9tYXNrLCBjb21tYWMtPnJ4X2NoYW5fbWFzayk7Ci0KLQkvKiBEb24ndCBsZXQgbXVsdGlwbGUgY29tbWFjcyBjbGFpbSB0aGUgc2FtZSBjaGFubmVsKHMpICovCi0JaWYgKChtYWwtPnR4X2NoYW5fbWFzayAmIGNvbW1hYy0+dHhfY2hhbl9tYXNrKSB8fAotCSAgICAobWFsLT5yeF9jaGFuX21hc2sgJiBjb21tYWMtPnJ4X2NoYW5fbWFzaykpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYWwlZDogQ09NTUFDIGNoYW5uZWxzIGNvbmZsaWN0IVxuIiwKLQkJICAgICAgIG1hbC0+ZGVmLT5pbmRleCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JbWFsLT50eF9jaGFuX21hc2sgfD0gY29tbWFjLT50eF9jaGFuX21hc2s7Ci0JbWFsLT5yeF9jaGFuX21hc2sgfD0gY29tbWFjLT5yeF9jaGFuX21hc2s7Ci0JbGlzdF9hZGQoJmNvbW1hYy0+bGlzdCwgJm1hbC0+bGlzdCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgbWFsX3VucmVnaXN0ZXJfY29tbWFjKHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsLCBzdHJ1Y3QgbWFsX2NvbW1hYyAqY29tbWFjKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JTUFMX0RCRygiJWQ6IHVucmVnKCUwOHgsICUwOHgpIiBOTCwgbWFsLT5kZWYtPmluZGV4LAotCQljb21tYWMtPnR4X2NoYW5fbWFzaywgY29tbWFjLT5yeF9jaGFuX21hc2spOwotCi0JbWFsLT50eF9jaGFuX21hc2sgJj0gfmNvbW1hYy0+dHhfY2hhbl9tYXNrOwotCW1hbC0+cnhfY2hhbl9tYXNrICY9IH5jb21tYWMtPnJ4X2NoYW5fbWFzazsKLQlsaXN0X2RlbF9pbml0KCZjb21tYWMtPmxpc3QpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1pbnQgbWFsX3NldF9yY2JzKHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsLCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXN0cnVjdCBvY3BfZnVuY19tYWxfZGF0YSAqbWFsZGF0YSA9IG1hbC0+ZGVmLT5hZGRpdGlvbnM7Ci0JQlVHX09OKGNoYW5uZWwgPCAwIHx8IGNoYW5uZWwgPj0gbWFsZGF0YS0+bnVtX3J4X2NoYW5zIHx8Ci0JICAgICAgIHNpemUgPiBNQUxfTUFYX1JYX1NJWkUpOwotCi0JTUFMX0RCRygiJWQ6IHNldF9yYmNzKCVkLCAlbHUpIiBOTCwgbWFsLT5kZWYtPmluZGV4LCBjaGFubmVsLCBzaXplKTsKLQotCWlmIChzaXplICYgMHhmKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJtYWwlZDogaW5jb3JyZWN0IFJYIHNpemUgJWx1IGZvciB0aGUgY2hhbm5lbCAlZFxuIiwKLQkJICAgICAgIG1hbC0+ZGVmLT5pbmRleCwgc2l6ZSwgY2hhbm5lbCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNldF9tYWxfZGNybihtYWwsIE1BTF9SQ0JTKGNoYW5uZWwpLCBzaXplID4+IDQpOwotCXJldHVybiAwOwotfQotCi1pbnQgbWFsX3R4X2JkX29mZnNldChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgaW50IGNoYW5uZWwpCi17Ci0Jc3RydWN0IG9jcF9mdW5jX21hbF9kYXRhICptYWxkYXRhID0gbWFsLT5kZWYtPmFkZGl0aW9uczsKLQlCVUdfT04oY2hhbm5lbCA8IDAgfHwgY2hhbm5lbCA+PSBtYWxkYXRhLT5udW1fdHhfY2hhbnMpOwotCXJldHVybiBjaGFubmVsICogTlVNX1RYX0JVRkY7Ci19Ci0KLWludCBtYWxfcnhfYmRfb2Zmc2V0KHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsLCBpbnQgY2hhbm5lbCkKLXsKLQlzdHJ1Y3Qgb2NwX2Z1bmNfbWFsX2RhdGEgKm1hbGRhdGEgPSBtYWwtPmRlZi0+YWRkaXRpb25zOwotCUJVR19PTihjaGFubmVsIDwgMCB8fCBjaGFubmVsID49IG1hbGRhdGEtPm51bV9yeF9jaGFucyk7Ci0JcmV0dXJuIG1hbGRhdGEtPm51bV90eF9jaGFucyAqIE5VTV9UWF9CVUZGICsgY2hhbm5lbCAqIE5VTV9SWF9CVUZGOwotfQotCi12b2lkIG1hbF9lbmFibGVfdHhfY2hhbm5lbChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgaW50IGNoYW5uZWwpCi17Ci0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCU1BTF9EQkcoIiVkOiBlbmFibGVfdHgoJWQpIiBOTCwgbWFsLT5kZWYtPmluZGV4LCBjaGFubmVsKTsKLQlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfVFhDQVNSLAotCQkgICAgIGdldF9tYWxfZGNybihtYWwsIE1BTF9UWENBU1IpIHwgTUFMX0NIQU5fTUFTSyhjaGFubmVsKSk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgbWFsX2Rpc2FibGVfdHhfY2hhbm5lbChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgaW50IGNoYW5uZWwpCi17Ci0Jc2V0X21hbF9kY3JuKG1hbCwgTUFMX1RYQ0FSUiwgTUFMX0NIQU5fTUFTSyhjaGFubmVsKSk7Ci0JTUFMX0RCRygiJWQ6IGRpc2FibGVfdHgoJWQpIiBOTCwgbWFsLT5kZWYtPmluZGV4LCBjaGFubmVsKTsKLX0KLQotdm9pZCBtYWxfZW5hYmxlX3J4X2NoYW5uZWwoc3RydWN0IGlibV9vY3BfbWFsICptYWwsIGludCBjaGFubmVsKQotewotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlNQUxfREJHKCIlZDogZW5hYmxlX3J4KCVkKSIgTkwsIG1hbC0+ZGVmLT5pbmRleCwgY2hhbm5lbCk7Ci0Jc2V0X21hbF9kY3JuKG1hbCwgTUFMX1JYQ0FTUiwKLQkJICAgICBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfUlhDQVNSKSB8IE1BTF9DSEFOX01BU0soY2hhbm5lbCkpOwotCWxvY2FsX2JoX2VuYWJsZSgpOwotfQotCi12b2lkIG1hbF9kaXNhYmxlX3J4X2NoYW5uZWwoc3RydWN0IGlibV9vY3BfbWFsICptYWwsIGludCBjaGFubmVsKQotewotCXNldF9tYWxfZGNybihtYWwsIE1BTF9SWENBUlIsIE1BTF9DSEFOX01BU0soY2hhbm5lbCkpOwotCU1BTF9EQkcoIiVkOiBkaXNhYmxlX3J4KCVkKSIgTkwsIG1hbC0+ZGVmLT5pbmRleCwgY2hhbm5lbCk7Ci19Ci0KLXZvaWQgbWFsX3BvbGxfYWRkKHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsLCBzdHJ1Y3QgbWFsX2NvbW1hYyAqY29tbWFjKQotewotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlNQUxfREJHKCIlZDogcG9sbF9hZGQoJXApIiBOTCwgbWFsLT5kZWYtPmluZGV4LCBjb21tYWMpOwotCWxpc3RfYWRkX3RhaWwoJmNvbW1hYy0+cG9sbF9saXN0LCAmbWFsLT5wb2xsX2xpc3QpOwotCWxvY2FsX2JoX2VuYWJsZSgpOwotfQotCi12b2lkIG1hbF9wb2xsX2RlbChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgc3RydWN0IG1hbF9jb21tYWMgKmNvbW1hYykKLXsKLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JTUFMX0RCRygiJWQ6IHBvbGxfZGVsKCVwKSIgTkwsIG1hbC0+ZGVmLT5pbmRleCwgY29tbWFjKTsKLQlsaXN0X2RlbCgmY29tbWFjLT5wb2xsX2xpc3QpOwotCWxvY2FsX2JoX2VuYWJsZSgpOwotfQotCi0vKiBzeW5jaHJvbml6ZWQgYnkgbWFsX3BvbGwoKSAqLwotc3RhdGljIGlubGluZSB2b2lkIG1hbF9lbmFibGVfZW9iX2lycShzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCkKLXsKLQlNQUxfREJHMigiJWQ6IGVuYWJsZV9pcnEiIE5MLCBtYWwtPmRlZi0+aW5kZXgpOwotCXNldF9tYWxfZGNybihtYWwsIE1BTF9DRkcsIGdldF9tYWxfZGNybihtYWwsIE1BTF9DRkcpIHwgTUFMX0NGR19FT1BJRSk7Ci19Ci0KLS8qIHN5bmNocm9uaXplZCBieSBfX0xJTktfU1RBVEVfUlhfU0NIRUQgYml0IGluIG5kZXYtPnN0YXRlICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFsX2Rpc2FibGVfZW9iX2lycShzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCkKLXsKLQlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfQ0ZHLCBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfQ0ZHKSAmIH5NQUxfQ0ZHX0VPUElFKTsKLQlNQUxfREJHMigiJWQ6IGRpc2FibGVfaXJxIiBOTCwgbWFsLT5kZWYtPmluZGV4KTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IG1hbF9zZXJyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCA9IGRldl9pbnN0YW5jZTsKLQl1MzIgZXNyID0gZ2V0X21hbF9kY3JuKG1hbCwgTUFMX0VTUik7Ci0KLQkvKiBDbGVhciB0aGUgZXJyb3Igc3RhdHVzIHJlZ2lzdGVyICovCi0Jc2V0X21hbF9kY3JuKG1hbCwgTUFMX0VTUiwgZXNyKTsKLQotCU1BTF9EQkcoIiVkOiBTRVJSICUwOHgiIE5MLCBtYWwtPmRlZi0+aW5kZXgsIGVzcik7Ci0KLQlpZiAoZXNyICYgTUFMX0VTUl9FVkIpIHsKLQkJaWYgKGVzciAmIE1BTF9FU1JfREUpIHsKLQkJCS8qIFdlIGlnbm9yZSBEZXNjcmlwdG9yIGVycm9yLAotCQkJICogVFhERSBvciBSWERFIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZCBhbnl3YXkuCi0JCQkgKi8KLQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJfQotCi0JCWlmIChlc3IgJiBNQUxfRVNSX1BFSU4pIHsKLQkJCS8qIFBMQiBlcnJvciwgaXQncyBwcm9iYWJseSBidWdneSBoYXJkd2FyZSBvcgotCQkJICogaW5jb3JyZWN0IHBoeXNpY2FsIGFkZHJlc3MgaW4gQkQgKGkuZS4gYnVnKQotCQkJICovCi0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAibWFsJWQ6IHN5c3RlbSBlcnJvciwgUExCIChFU1IgPSAweCUwOHgpXG4iLAotCQkJCSAgICAgICBtYWwtPmRlZi0+aW5kZXgsIGVzcik7Ci0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCX0KLQotCQkvKiBPUEIgZXJyb3IsIGl0J3MgcHJvYmFibHkgYnVnZ3kgaGFyZHdhcmUgb3IgaW5jb3JyZWN0IEVCQyBzZXR1cCAqLwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm1hbCVkOiBzeXN0ZW0gZXJyb3IsIE9QQiAoRVNSID0gMHglMDh4KVxuIiwKLQkJCSAgICAgICBtYWwtPmRlZi0+aW5kZXgsIGVzcik7Ci0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1hbF9zY2hlZHVsZV9wb2xsKHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsKQotewotCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZtYWwtPm5hcGkpKSkgewotCQlNQUxfREJHMigiJWQ6IHNjaGVkdWxlX3BvbGwiIE5MLCBtYWwtPmRlZi0+aW5kZXgpOwotCQltYWxfZGlzYWJsZV9lb2JfaXJxKG1hbCk7Ci0JCV9fbmFwaV9zY2hlZHVsZSgmbWFsLT5uYXBpKTsKLQl9IGVsc2UKLQkJTUFMX0RCRzIoIiVkOiBhbHJlYWR5IGluIHBvbGwiIE5MLCBtYWwtPmRlZi0+aW5kZXgpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWFsX3R4ZW9iKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCA9IGRldl9pbnN0YW5jZTsKLQl1MzIgciA9IGdldF9tYWxfZGNybihtYWwsIE1BTF9UWEVPQklTUik7Ci0JTUFMX0RCRzIoIiVkOiB0eGVvYiAlMDh4IiBOTCwgbWFsLT5kZWYtPmluZGV4LCByKTsKLQltYWxfc2NoZWR1bGVfcG9sbChtYWwpOwotCXNldF9tYWxfZGNybihtYWwsIE1BTF9UWEVPQklTUiwgcik7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWFsX3J4ZW9iKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCA9IGRldl9pbnN0YW5jZTsKLQl1MzIgciA9IGdldF9tYWxfZGNybihtYWwsIE1BTF9SWEVPQklTUik7Ci0JTUFMX0RCRzIoIiVkOiByeGVvYiAlMDh4IiBOTCwgbWFsLT5kZWYtPmluZGV4LCByKTsKLQltYWxfc2NoZWR1bGVfcG9sbChtYWwpOwotCXNldF9tYWxfZGNybihtYWwsIE1BTF9SWEVPQklTUiwgcik7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWFsX3R4ZGUoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQotewotCXN0cnVjdCBpYm1fb2NwX21hbCAqbWFsID0gZGV2X2luc3RhbmNlOwotCXUzMiBkZWlyID0gZ2V0X21hbF9kY3JuKG1hbCwgTUFMX1RYREVJUik7Ci0Jc2V0X21hbF9kY3JuKG1hbCwgTUFMX1RYREVJUiwgZGVpcik7Ci0KLQlNQUxfREJHKCIlZDogdHhkZSAlMDh4IiBOTCwgbWFsLT5kZWYtPmluZGV4LCBkZWlyKTsKLQotCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIm1hbCVkOiBUWCBkZXNjcmlwdG9yIGVycm9yIChUWERFSVIgPSAweCUwOHgpXG4iLAotCQkgICAgICAgbWFsLT5kZWYtPmluZGV4LCBkZWlyKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IG1hbF9yeGRlKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCA9IGRldl9pbnN0YW5jZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCXUzMiBkZWlyID0gZ2V0X21hbF9kY3JuKG1hbCwgTUFMX1JYREVJUik7Ci0KLQlNQUxfREJHKCIlZDogcnhkZSAlMDh4IiBOTCwgbWFsLT5kZWYtPmluZGV4LCBkZWlyKTsKLQotCWxpc3RfZm9yX2VhY2gobCwgJm1hbC0+bGlzdCkgewotCQlzdHJ1Y3QgbWFsX2NvbW1hYyAqbWMgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBtYWxfY29tbWFjLCBsaXN0KTsKLQkJaWYgKGRlaXIgJiBtYy0+cnhfY2hhbl9tYXNrKSB7Ci0JCQltYy0+cnhfc3RvcHBlZCA9IDE7Ci0JCQltYy0+b3BzLT5yeGRlKG1jLT5kZXYpOwotCQl9Ci0JfQotCi0JbWFsX3NjaGVkdWxlX3BvbGwobWFsKTsKLQlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfUlhERUlSLCBkZWlyKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCBtYWxfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCi17Ci0Jc3RydWN0IGlibV9vY3BfbWFsICptYWwgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGlibV9vY3BfbWFsLCBuYXBpKTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCWludCByZWNlaXZlZCA9IDA7Ci0KLQlNQUxfREJHMigiJWQ6IHBvbGwoJWQpICVkIC0+IiBOTCwgbWFsLT5kZWYtPmluZGV4LCAqYnVkZ2V0LAotCQkgcnhfd29ya19saW1pdCk7Ci0gICAgICBhZ2FpbjoKLQkvKiBQcm9jZXNzIFRYIHNrYnMgKi8KLQlsaXN0X2Zvcl9lYWNoKGwsICZtYWwtPnBvbGxfbGlzdCkgewotCQlzdHJ1Y3QgbWFsX2NvbW1hYyAqbWMgPQotCQkgICAgbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbWFsX2NvbW1hYywgcG9sbF9saXN0KTsKLQkJbWMtPm9wcy0+cG9sbF90eChtYy0+ZGV2KTsKLQl9Ci0KLQkvKiBQcm9jZXNzIFJYIHNrYnMuCi0JICogV2UgX21pZ2h0XyBuZWVkIHNvbWV0aGluZyBtb3JlIHNtYXJ0IGhlcmUgdG8gZW5mb3JjZSBwb2xsaW5nIGZhaXJuZXNzLgotCSAqLwotCWxpc3RfZm9yX2VhY2gobCwgJm1hbC0+cG9sbF9saXN0KSB7Ci0JCXN0cnVjdCBtYWxfY29tbWFjICptYyA9Ci0JCSAgICBsaXN0X2VudHJ5KGwsIHN0cnVjdCBtYWxfY29tbWFjLCBwb2xsX2xpc3QpOwotCQlpbnQgbiA9IG1jLT5vcHMtPnBvbGxfcngobWMtPmRldiwgYnVkZ2V0KTsKLQkJaWYgKG4pIHsKLQkJCXJlY2VpdmVkICs9IG47Ci0JCQlidWRnZXQgLT0gbjsKLQkJCWlmIChidWRnZXQgPD0gMCkKLQkJCQlnb3RvIG1vcmVfd29yazsJLy8gWFhYIFdoYXQgaWYgdGhpcyBpcyB0aGUgbGFzdCBvbmUgPwotCQl9Ci0JfQotCi0JLyogV2UgbmVlZCB0byBkaXNhYmxlIElSUXMgdG8gcHJvdGVjdCBmcm9tIFJYREUgSVJRIGhlcmUgKi8KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKLQltYWxfZW5hYmxlX2VvYl9pcnEobWFsKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQkvKiBDaGVjayBmb3IgInJvdHRpbmciIHBhY2tldChzKSAqLwotCWxpc3RfZm9yX2VhY2gobCwgJm1hbC0+cG9sbF9saXN0KSB7Ci0JCXN0cnVjdCBtYWxfY29tbWFjICptYyA9Ci0JCSAgICBsaXN0X2VudHJ5KGwsIHN0cnVjdCBtYWxfY29tbWFjLCBwb2xsX2xpc3QpOwotCQlpZiAodW5saWtlbHkobWMtPm9wcy0+cGVla19yeChtYy0+ZGV2KSB8fCBtYy0+cnhfc3RvcHBlZCkpIHsKLQkJCU1BTF9EQkcyKCIlZDogcm90dGluZyBwYWNrZXQiIE5MLCBtYWwtPmRlZi0+aW5kZXgpOwotCQkJaWYgKG5hcGlfcmVzY2hlZHVsZShuYXBpKSkKLQkJCQltYWxfZGlzYWJsZV9lb2JfaXJxKG1hbCk7Ci0JCQllbHNlCi0JCQkJTUFMX0RCRzIoIiVkOiBhbHJlYWR5IGluIHBvbGwgbGlzdCIgTkwsCi0JCQkJCSBtYWwtPmRlZi0+aW5kZXgpOwotCi0JCQlpZiAoYnVkZ2V0ID4gMCkKLQkJCQlnb3RvIGFnYWluOwotCQkJZWxzZQotCQkJCWdvdG8gbW9yZV93b3JrOwotCQl9Ci0JCW1jLT5vcHMtPnBvbGxfdHgobWMtPmRldik7Ci0JfQotCi0gICAgICBtb3JlX3dvcms6Ci0JTUFMX0RCRzIoIiVkOiBwb2xsKCkgJWQgPC0gJWQiIE5MLCBtYWwtPmRlZi0+aW5kZXgsIGJ1ZGdldCwgcmVjZWl2ZWQpOwotCXJldHVybiByZWNlaXZlZDsKLX0KLQotc3RhdGljIHZvaWQgbWFsX3Jlc2V0KHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsKQotewotCWludCBuID0gMTA7Ci0JTUFMX0RCRygiJWQ6IHJlc2V0IiBOTCwgbWFsLT5kZWYtPmluZGV4KTsKLQotCXNldF9tYWxfZGNybihtYWwsIE1BTF9DRkcsIE1BTF9DRkdfU1IpOwotCi0JLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKDEgc3lzdGVtIGNsb2NrKSAqLwotCXdoaWxlICgoZ2V0X21hbF9kY3JuKG1hbCwgTUFMX0NGRykgJiBNQUxfQ0ZHX1NSKSAmJiBuKQotCQktLW47Ci0KLQlpZiAodW5saWtlbHkoIW4pKQotCQlwcmludGsoS0VSTl9FUlIgIm1hbCVkOiByZXNldCB0aW1lb3V0XG4iLCBtYWwtPmRlZi0+aW5kZXgpOwotfQotCi1pbnQgbWFsX2dldF9yZWdzX2xlbihzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCkKLXsKLQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBlbWFjX2V0aHRvb2xfcmVnc19zdWJoZHIpICsKLQkgICAgc2l6ZW9mKHN0cnVjdCBpYm1fbWFsX3JlZ3MpOwotfQotCi12b2lkICptYWxfZHVtcF9yZWdzKHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsLCB2b2lkICpidWYpCi17Ci0Jc3RydWN0IGVtYWNfZXRodG9vbF9yZWdzX3N1YmhkciAqaGRyID0gYnVmOwotCXN0cnVjdCBpYm1fbWFsX3JlZ3MgKnJlZ3MgPSAoc3RydWN0IGlibV9tYWxfcmVncyAqKShoZHIgKyAxKTsKLQlzdHJ1Y3Qgb2NwX2Z1bmNfbWFsX2RhdGEgKm1hbGRhdGEgPSBtYWwtPmRlZi0+YWRkaXRpb25zOwotCWludCBpOwotCi0JaGRyLT52ZXJzaW9uID0gTUFMX1ZFUlNJT047Ci0JaGRyLT5pbmRleCA9IG1hbC0+ZGVmLT5pbmRleDsKLQotCXJlZ3MtPnR4X2NvdW50ID0gbWFsZGF0YS0+bnVtX3R4X2NoYW5zOwotCXJlZ3MtPnJ4X2NvdW50ID0gbWFsZGF0YS0+bnVtX3J4X2NoYW5zOwotCi0JcmVncy0+Y2ZnID0gZ2V0X21hbF9kY3JuKG1hbCwgTUFMX0NGRyk7Ci0JcmVncy0+ZXNyID0gZ2V0X21hbF9kY3JuKG1hbCwgTUFMX0VTUik7Ci0JcmVncy0+aWVyID0gZ2V0X21hbF9kY3JuKG1hbCwgTUFMX0lFUik7Ci0JcmVncy0+dHhfY2FzciA9IGdldF9tYWxfZGNybihtYWwsIE1BTF9UWENBU1IpOwotCXJlZ3MtPnR4X2NhcnIgPSBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfVFhDQVJSKTsKLQlyZWdzLT50eF9lb2Jpc3IgPSBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfVFhFT0JJU1IpOwotCXJlZ3MtPnR4X2RlaXIgPSBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfVFhERUlSKTsKLQlyZWdzLT5yeF9jYXNyID0gZ2V0X21hbF9kY3JuKG1hbCwgTUFMX1JYQ0FTUik7Ci0JcmVncy0+cnhfY2FyciA9IGdldF9tYWxfZGNybihtYWwsIE1BTF9SWENBUlIpOwotCXJlZ3MtPnJ4X2VvYmlzciA9IGdldF9tYWxfZGNybihtYWwsIE1BTF9SWEVPQklTUik7Ci0JcmVncy0+cnhfZGVpciA9IGdldF9tYWxfZGNybihtYWwsIE1BTF9SWERFSVIpOwotCi0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPnR4X2NvdW50OyArK2kpCi0JCXJlZ3MtPnR4X2N0cHJbaV0gPSBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfVFhDVFBSKGkpKTsKLQotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5yeF9jb3VudDsgKytpKSB7Ci0JCXJlZ3MtPnJ4X2N0cHJbaV0gPSBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfUlhDVFBSKGkpKTsKLQkJcmVncy0+cmNic1tpXSA9IGdldF9tYWxfZGNybihtYWwsIE1BTF9SQ0JTKGkpKTsKLQl9Ci0JcmV0dXJuIHJlZ3MgKyAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBtYWxfcHJvYmUoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldikKLXsKLQlzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbDsKLQlzdHJ1Y3Qgb2NwX2Z1bmNfbWFsX2RhdGEgKm1hbGRhdGE7Ci0JaW50IGVyciA9IDAsIGksIGJkX3NpemU7Ci0KLQlNQUxfREJHKCIlZDogcHJvYmUiIE5MLCBvY3BkZXYtPmRlZi0+aW5kZXgpOwotCi0JbWFsZGF0YSA9IG9jcGRldi0+ZGVmLT5hZGRpdGlvbnM7Ci0JaWYgKG1hbGRhdGEgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIm1hbCVkOiBtaXNzaW5nIGFkZGl0aW9uYWwgZGF0YSFcbiIsCi0JCSAgICAgICBvY3BkZXYtPmRlZi0+aW5kZXgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQltYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWJtX29jcF9tYWwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1hbCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJtYWwlZDogb3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIE1BTCBzdHJ1Y3R1cmUhXG4iLAotCQkgICAgICAgb2NwZGV2LT5kZWYtPmluZGV4KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogWFhYIFRoaXMgb25seSB3b3JrcyBmb3IgbmF0aXZlIGRjciBmb3Igbm93ICovCi0JbWFsLT5kY3Job3N0ID0gZGNyX21hcChOVUxMLCBtYWxkYXRhLT5kY3JfYmFzZSwgMCk7Ci0KLQltYWwtPmRlZiA9IG9jcGRldi0+ZGVmOwotCi0JSU5JVF9MSVNUX0hFQUQoJm1hbC0+cG9sbF9saXN0KTsKLQltYWwtPm5hcGkud2VpZ2h0ID0gQ09ORklHX0lCTV9FTUFDX1BPTExfV0VJR0hUOwotCW1hbC0+bmFwaS5wb2xsID0gbWFsX3BvbGw7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbWFsLT5saXN0KTsKLQotCS8qIExvYWQgcG93ZXItb24gcmVzZXQgZGVmYXVsdHMgKi8KLQltYWxfcmVzZXQobWFsKTsKLQotCS8qIFNldCB0aGUgTUFMIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KLQlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfQ0ZHLCBNQUxfQ0ZHX0RFRkFVTFQgfCBNQUxfQ0ZHX1BMQkIgfAotCQkgICAgIE1BTF9DRkdfT1BCQkwgfCBNQUxfQ0ZHX0xFQSk7Ci0KLQltYWxfZW5hYmxlX2VvYl9pcnEobWFsKTsKLQotCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBCRCByaW5ncyAqLwotCUJVR19PTihtYWxkYXRhLT5udW1fdHhfY2hhbnMgPD0gMCB8fCBtYWxkYXRhLT5udW1fdHhfY2hhbnMgPiAzMik7Ci0JQlVHX09OKG1hbGRhdGEtPm51bV9yeF9jaGFucyA8PSAwIHx8IG1hbGRhdGEtPm51bV9yeF9jaGFucyA+IDMyKTsKLQliZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBtYWxfZGVzY3JpcHRvcikgKgotCSAgICAoTlVNX1RYX0JVRkYgKiBtYWxkYXRhLT5udW1fdHhfY2hhbnMgKwotCSAgICAgTlVNX1JYX0JVRkYgKiBtYWxkYXRhLT5udW1fcnhfY2hhbnMpOwotCW1hbC0+YmRfdmlydCA9Ci0JICAgIGRtYV9hbGxvY19jb2hlcmVudCgmb2NwZGV2LT5kZXYsIGJkX3NpemUsICZtYWwtPmJkX2RtYSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIW1hbC0+YmRfdmlydCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJtYWwlZDogb3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIFJYL1RYIGRlc2NyaXB0b3JzIVxuIiwKLQkJICAgICAgIG1hbC0+ZGVmLT5pbmRleCk7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JbWVtc2V0KG1hbC0+YmRfdmlydCwgMCwgYmRfc2l6ZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWFsZGF0YS0+bnVtX3R4X2NoYW5zOyArK2kpCi0JCXNldF9tYWxfZGNybihtYWwsIE1BTF9UWENUUFIoaSksIG1hbC0+YmRfZG1hICsKLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtYWxfZGVzY3JpcHRvcikgKgotCQkJICAgICBtYWxfdHhfYmRfb2Zmc2V0KG1hbCwgaSkpOwotCi0JZm9yIChpID0gMDsgaSA8IG1hbGRhdGEtPm51bV9yeF9jaGFuczsgKytpKQotCQlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfUlhDVFBSKGkpLCBtYWwtPmJkX2RtYSArCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgbWFsX2Rlc2NyaXB0b3IpICoKLQkJCSAgICAgbWFsX3J4X2JkX29mZnNldChtYWwsIGkpKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKG1hbGRhdGEtPnNlcnJfaXJxLCBtYWxfc2VyciwgMCwgIk1BTCBTRVJSIiwgbWFsKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWwyOwotCWVyciA9IHJlcXVlc3RfaXJxKG1hbGRhdGEtPnR4ZGVfaXJxLCBtYWxfdHhkZSwgMCwgIk1BTCBUWCBERSIsIG1hbCk7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsMzsKLQllcnIgPSByZXF1ZXN0X2lycShtYWxkYXRhLT50eGVvYl9pcnEsIG1hbF90eGVvYiwgMCwgIk1BTCBUWCBFT0IiLCBtYWwpOwotCWlmIChlcnIpCi0JCWdvdG8gZmFpbDQ7Ci0JZXJyID0gcmVxdWVzdF9pcnEobWFsZGF0YS0+cnhkZV9pcnEsIG1hbF9yeGRlLCAwLCAiTUFMIFJYIERFIiwgbWFsKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWw1OwotCWVyciA9IHJlcXVlc3RfaXJxKG1hbGRhdGEtPnJ4ZW9iX2lycSwgbWFsX3J4ZW9iLCAwLCAiTUFMIFJYIEVPQiIsIG1hbCk7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsNjsKLQotCS8qIEVuYWJsZSBhbGwgTUFMIFNFUlIgaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfSUVSLCBNQUxfSUVSX0VWRU5UUyk7Ci0KLQkvKiBBZHZlcnRpc2UgdGhpcyBpbnN0YW5jZSB0byB0aGUgcmVzdCBvZiB0aGUgd29ybGQgKi8KLQlvY3Bfc2V0X2RydmRhdGEob2NwZGV2LCBtYWwpOwotCi0JbWFsX2RiZ19yZWdpc3RlcihtYWwtPmRlZi0+aW5kZXgsIG1hbCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJtYWwlZDogaW5pdGlhbGl6ZWQsICVkIFRYIGNoYW5uZWxzLCAlZCBSWCBjaGFubmVsc1xuIiwKLQkgICAgICAgbWFsLT5kZWYtPmluZGV4LCBtYWxkYXRhLT5udW1fdHhfY2hhbnMsIG1hbGRhdGEtPm51bV9yeF9jaGFucyk7Ci0JcmV0dXJuIDA7Ci0KLSAgICAgIGZhaWw2OgotCWZyZWVfaXJxKG1hbGRhdGEtPnJ4ZGVfaXJxLCBtYWwpOwotICAgICAgZmFpbDU6Ci0JZnJlZV9pcnEobWFsZGF0YS0+dHhlb2JfaXJxLCBtYWwpOwotICAgICAgZmFpbDQ6Ci0JZnJlZV9pcnEobWFsZGF0YS0+dHhkZV9pcnEsIG1hbCk7Ci0gICAgICBmYWlsMzoKLQlmcmVlX2lycShtYWxkYXRhLT5zZXJyX2lycSwgbWFsKTsKLSAgICAgIGZhaWwyOgotCWRtYV9mcmVlX2NvaGVyZW50KCZvY3BkZXYtPmRldiwgYmRfc2l6ZSwgbWFsLT5iZF92aXJ0LCBtYWwtPmJkX2RtYSk7Ci0gICAgICBmYWlsOgotCWtmcmVlKG1hbCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IG1hbF9yZW1vdmUoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldikKLXsKLQlzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCA9IG9jcF9nZXRfZHJ2ZGF0YShvY3BkZXYpOwotCXN0cnVjdCBvY3BfZnVuY19tYWxfZGF0YSAqbWFsZGF0YSA9IG1hbC0+ZGVmLT5hZGRpdGlvbnM7Ci0KLQlNQUxfREJHKCIlZDogcmVtb3ZlIiBOTCwgbWFsLT5kZWYtPmluZGV4KTsKLQotCS8qIFN5bmNocm9uaXplIHdpdGggc2NoZWR1bGVkIHBvbGxpbmcgKi8KLQluYXBpX2Rpc2FibGUoJm1hbC0+bmFwaSk7Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJm1hbC0+bGlzdCkpIHsKLQkJLyogVGhpcyBpcyAqdmVyeSogYmFkICovCi0JCXByaW50ayhLRVJOX0VNRVJHCi0JCSAgICAgICAibWFsJWQ6IGNvbW1hYyBsaXN0IGlzIG5vdCBlbXB0eSBvbiByZW1vdmUhXG4iLAotCQkgICAgICAgbWFsLT5kZWYtPmluZGV4KTsKLQl9Ci0KLQlvY3Bfc2V0X2RydmRhdGEob2NwZGV2LCBOVUxMKTsKLQotCWZyZWVfaXJxKG1hbGRhdGEtPnNlcnJfaXJxLCBtYWwpOwotCWZyZWVfaXJxKG1hbGRhdGEtPnR4ZGVfaXJxLCBtYWwpOwotCWZyZWVfaXJxKG1hbGRhdGEtPnR4ZW9iX2lycSwgbWFsKTsKLQlmcmVlX2lycShtYWxkYXRhLT5yeGRlX2lycSwgbWFsKTsKLQlmcmVlX2lycShtYWxkYXRhLT5yeGVvYl9pcnEsIG1hbCk7Ci0KLQltYWxfcmVzZXQobWFsKTsKLQotCW1hbF9kYmdfcmVnaXN0ZXIobWFsLT5kZWYtPmluZGV4LCBOVUxMKTsKLQotCWRtYV9mcmVlX2NvaGVyZW50KCZvY3BkZXYtPmRldiwKLQkJCSAgc2l6ZW9mKHN0cnVjdCBtYWxfZGVzY3JpcHRvcikgKgotCQkJICAoTlVNX1RYX0JVRkYgKiBtYWxkYXRhLT5udW1fdHhfY2hhbnMgKwotCQkJICAgTlVNX1JYX0JVRkYgKiBtYWxkYXRhLT5udW1fcnhfY2hhbnMpLCBtYWwtPmJkX3ZpcnQsCi0JCQkgIG1hbC0+YmRfZG1hKTsKLQotCWtmcmVlKG1hbCk7Ci19Ci0KLS8qIFN0cnVjdHVyZSBmb3IgYSBkZXZpY2UgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IG9jcF9kZXZpY2VfaWQgbWFsX2lkc1tdID0gewotCXsgLnZlbmRvciA9IE9DUF9WRU5ET1JfSUJNLCAuZnVuY3Rpb24gPSBPQ1BfRlVOQ19NQUwgfSwKLQl7IC52ZW5kb3IgPSBPQ1BfVkVORE9SX0lOVkFMSUR9Ci19OwotCi1zdGF0aWMgc3RydWN0IG9jcF9kcml2ZXIgbWFsX2RyaXZlciA9IHsKLQkubmFtZSA9ICJtYWwiLAotCS5pZF90YWJsZSA9IG1hbF9pZHMsCi0KLQkucHJvYmUgPSBtYWxfcHJvYmUsCi0JLnJlbW92ZSA9IG1hbF9yZW1vdmUsCi19OwotCi1pbnQgX19pbml0IG1hbF9pbml0KHZvaWQpCi17Ci0JTUFMX0RCRygiOiBpbml0IiBOTCk7Ci0JcmV0dXJuIG9jcF9yZWdpc3Rlcl9kcml2ZXIoJm1hbF9kcml2ZXIpOwotfQotCi12b2lkIF9fZXhpdCBtYWxfZXhpdCh2b2lkKQotewotCU1BTF9EQkcoIjogZXhpdCIgTkwpOwotCW9jcF91bnJlZ2lzdGVyX2RyaXZlcigmbWFsX2RyaXZlcik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19tYWwuaCBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGFkYmU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19tYWwuaAotICoKLSAqIE1lbW9yeSBBY2Nlc3MgTGF5ZXIgKE1BTCkgc3VwcG9ydAotICogCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgWnVsdHlzIFRlY2hub2xvZ2llcy4KLSAqIEV1Z2VuZSBTdXJvdmVnaW4gPGV1Z2VuZS5zdXJvdmVnaW5AenVsdHlzLmNvbT4gb3IgPGVic0BlYnNob21lLm5ldD4KLSAqCi0gKiBCYXNlZCBvbiBvcmlnaW5hbCB3b3JrIGJ5Ci0gKiAgICAgIEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotICogICAgICBDb3B5cmlnaHQgMjAwMiBNb250YVZpc3RhIFNvZnRhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaWZuZGVmIF9fSUJNX0VNQUNfTUFMX0hfCi0jZGVmaW5lIF9fSUJNX0VNQUNfTUFMX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Rjci5oPgotCi0vKgotICogVGhlc2UgTUFMICJ2ZXJzaW9ucyIgcHJvYmFibHkgYXJlbid0IHRoZSByZWFsIHZlcnNpb25zIElCTSB1c2VzIGZvciB0aGVzZSAKLSAqIE1BTCBjb3JlcywgSSBhc3NpZ25lZCB0aGVtIGp1c3QgdG8gbWFrZSAjaWZkZWZzIGluIHRoaXMgZmlsZSBuaWNlciBhbmQgCi0gKiByZWZsZWN0IHRoZSBmYWN0IHRoYXQgNDB4IGFuZCA0NHggaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgTUFMcy4gLS1lYnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHXzQwNUdQKSB8fCBkZWZpbmVkKENPTkZJR180MDVHUFIpIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBkZWZpbmVkKENPTkZJR19OUDQwNUgpCi0jZGVmaW5lIE1BTF9WRVJTSU9OCQkxCi0jZWxpZiBkZWZpbmVkKENPTkZJR180NDBHUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR180NDBTUEUpCi0jZGVmaW5lIE1BTF9WRVJTSU9OCQkyCi0jZWxzZQotI2Vycm9yICJVbmtub3duIFNvQywgcGxlYXNlIGNoZWNrIGNoaXAgbWFudWFsIGFuZCBjaG9vc2UgTUFMICd2ZXJzaW9uJyIKLSNlbmRpZgotCi0vKiBNQUx4IERDUiByZWdpc3RlcnMgKi8KLSNkZWZpbmUJTUFMX0NGRwkJCTB4MDAKLSNkZWZpbmUJICBNQUxfQ0ZHX1NSCQkweDgwMDAwMDAwCi0jZGVmaW5lICAgTUFMX0NGR19QTEJCCQkweDAwMDA0MDAwCi0jZGVmaW5lICAgTUFMX0NGR19PUEJCTAkJMHgwMDAwMDA4MAotI2RlZmluZSAgIE1BTF9DRkdfRU9QSUUJCTB4MDAwMDAwMDQKLSNkZWZpbmUgICBNQUxfQ0ZHX0xFQQkJMHgwMDAwMDAwMgotI2RlZmluZSAgIE1BTF9DRkdfU0QJCTB4MDAwMDAwMDEKLSNpZiBNQUxfVkVSU0lPTiA9PSAxCi0jZGVmaW5lICAgTUFMX0NGR19QTEJQX01BU0sJMHgwMGMwMDAwMAotI2RlZmluZSAgIE1BTF9DRkdfUExCUF8xMAkweDAwODAwMDAwCi0jZGVmaW5lICAgTUFMX0NGR19HQQkJMHgwMDIwMDAwMAotI2RlZmluZSAgIE1BTF9DRkdfT0EJCTB4MDAxMDAwMDAKLSNkZWZpbmUgICBNQUxfQ0ZHX1BMQkxFCQkweDAwMDgwMDAwCi0jZGVmaW5lICAgTUFMX0NGR19QTEJUX01BU0sJMHgwMDA3ODAwMAotI2RlZmluZSAgIE1BTF9DRkdfREVGQVVMVAkoTUFMX0NGR19QTEJQXzEwIHwgTUFMX0NGR19QTEJUX01BU0spCi0jZWxpZiBNQUxfVkVSU0lPTiA9PSAyCi0jZGVmaW5lICAgTUFMX0NGR19SUFBfTUFTSwkweDAwYzAwMDAwCi0jZGVmaW5lICAgTUFMX0NGR19SUFBfMTAJMHgwMDgwMDAwMAotI2RlZmluZSAgIE1BTF9DRkdfUk1CU19NQVNLCTB4MDAzMDAwMDAKLSNkZWZpbmUgICBNQUxfQ0ZHX1dQUF9NQVNLCTB4MDAwYzAwMDAKLSNkZWZpbmUgICBNQUxfQ0ZHX1dQUF8xMAkweDAwMDgwMDAwCi0jZGVmaW5lICAgTUFMX0NGR19XTUJTX01BU0sJMHgwMDAzMDAwMAotI2RlZmluZSAgIE1BTF9DRkdfUExCTEUJCTB4MDAwMDgwMDAKLSNkZWZpbmUgICBNQUxfQ0ZHX0RFRkFVTFQJKE1BTF9DRkdfUk1CU19NQVNLIHwgTUFMX0NGR19XTUJTX01BU0sgfCBcCi0JCQkJIE1BTF9DRkdfUlBQXzEwIHwgTUFMX0NGR19XUFBfMTApCi0jZWxzZQotI2Vycm9yICJVbmtub3duIE1BTCB2ZXJzaW9uIgotI2VuZGlmCi0KLSNkZWZpbmUgTUFMX0VTUgkJCTB4MDEKLSNkZWZpbmUgICBNQUxfRVNSX0VWQgkJMHg4MDAwMDAwMAotI2RlZmluZSAgIE1BTF9FU1JfQ0lEVAkJMHg0MDAwMDAwMAotI2RlZmluZSAgIE1BTF9FU1JfQ0lEX01BU0sJMHgzZTAwMDAwMAotI2RlZmluZSAgIE1BTF9FU1JfQ0lEX1NISUZUCTI1Ci0jZGVmaW5lICAgTUFMX0VTUl9ERQkJMHgwMDEwMDAwMAotI2RlZmluZSAgIE1BTF9FU1JfT1RFCQkweDAwMDQwMDAwCi0jZGVmaW5lICAgTUFMX0VTUl9PU0UJCTB4MDAwMjAwMDAKLSNkZWZpbmUgICBNQUxfRVNSX1BFSU4JCTB4MDAwMTAwMDAKLSNkZWZpbmUgICBNQUxfRVNSX0RFSQkJMHgwMDAwMDAxMAotI2RlZmluZSAgIE1BTF9FU1JfT1RFSQkJMHgwMDAwMDAwNAotI2RlZmluZSAgIE1BTF9FU1JfT1NFSQkJMHgwMDAwMDAwMgotI2RlZmluZSAgIE1BTF9FU1JfUEJFSQkJMHgwMDAwMDAwMQotI2lmIE1BTF9WRVJTSU9OID09IDEKLSNkZWZpbmUgICBNQUxfRVNSX09ORQkJMHgwMDA4MDAwMAotI2RlZmluZSAgIE1BTF9FU1JfT05FSQkJMHgwMDAwMDAwOAotI2VsaWYgTUFMX1ZFUlNJT04gPT0gMgotI2RlZmluZSAgIE1BTF9FU1JfUFRFCQkweDAwODAwMDAwCi0jZGVmaW5lICAgTUFMX0VTUl9QUkUJCTB4MDA0MDAwMDAKLSNkZWZpbmUgICBNQUxfRVNSX1BXRQkJMHgwMDIwMDAwMAotI2RlZmluZSAgIE1BTF9FU1JfUFRFSQkJMHgwMDAwMDA4MAotI2RlZmluZSAgIE1BTF9FU1JfUFJFSQkJMHgwMDAwMDA0MAotI2RlZmluZSAgIE1BTF9FU1JfUFdFSQkJMHgwMDAwMDAyMAotI2Vsc2UKLSNlcnJvciAiVW5rbm93biBNQUwgdmVyc2lvbiIKLSNlbmRpZgotCi0jZGVmaW5lIE1BTF9JRVIJCQkweDAyCi0jZGVmaW5lICAgTUFMX0lFUl9ERQkJMHgwMDAwMDAxMAotI2RlZmluZSAgIE1BTF9JRVJfT1RFCQkweDAwMDAwMDA0Ci0jZGVmaW5lICAgTUFMX0lFUl9PRQkJMHgwMDAwMDAwMgotI2RlZmluZSAgIE1BTF9JRVJfUEUJCTB4MDAwMDAwMDEKLSNpZiBNQUxfVkVSU0lPTiA9PSAxCi0jZGVmaW5lICAgTUFMX0lFUl9OV0UJCTB4MDAwMDAwMDgKLSNkZWZpbmUgICBNQUxfSUVSX1NPQ19FVkVOVFMJTUFMX0lFUl9OV0UKLSNlbGlmIE1BTF9WRVJTSU9OID09IDIKLSNkZWZpbmUgICBNQUxfSUVSX1BUCQkweDAwMDAwMDgwCi0jZGVmaW5lICAgTUFMX0lFUl9QUkUJCTB4MDAwMDAwNDAKLSNkZWZpbmUgICBNQUxfSUVSX1BXRQkJMHgwMDAwMDAyMAotI2RlZmluZSAgIE1BTF9JRVJfU09DX0VWRU5UUwkoTUFMX0lFUl9QVCB8IE1BTF9JRVJfUFJFIHwgTUFMX0lFUl9QV0UpCi0jZWxzZQotI2Vycm9yICJVbmtub3duIE1BTCB2ZXJzaW9uIgotI2VuZGlmCi0jZGVmaW5lICAgTUFMX0lFUl9FVkVOVFMJKE1BTF9JRVJfU09DX0VWRU5UUyB8IE1BTF9JRVJfT1RFIHwgXAotCQkJCSBNQUxfSUVSX09URSB8IE1BTF9JRVJfT0UgfCBNQUxfSUVSX1BFKQotCi0jZGVmaW5lIE1BTF9UWENBU1IJCTB4MDQKLSNkZWZpbmUgTUFMX1RYQ0FSUgkJMHgwNQotI2RlZmluZSBNQUxfVFhFT0JJU1IJCTB4MDYKLSNkZWZpbmUgTUFMX1RYREVJUgkJMHgwNwotI2RlZmluZSBNQUxfUlhDQVNSCQkweDEwCi0jZGVmaW5lIE1BTF9SWENBUlIJCTB4MTEKLSNkZWZpbmUgTUFMX1JYRU9CSVNSCQkweDEyCi0jZGVmaW5lIE1BTF9SWERFSVIJCTB4MTMKLSNkZWZpbmUgTUFMX1RYQ1RQUihuKQkJKChuKSArIDB4MjApCi0jZGVmaW5lIE1BTF9SWENUUFIobikJCSgobikgKyAweDQwKQotI2RlZmluZSBNQUxfUkNCUyhuKQkJKChuKSArIDB4NjApCi0KLS8qIEluIHJlYWxpdHkgTUFMIGNhbiBoYW5kbGUgVFggYnVmZmVycyB1cCB0byA0MDk1IGJ5dGVzIGxvbmcsIAotICogYnV0IHRoaXMgaXNuJ3QgYSBnb29kIHJvdW5kIG51bWJlciA6KSAJCSAtLWVicwotICovCi0jZGVmaW5lIE1BTF9NQVhfVFhfU0laRQkJNDA4MAotI2RlZmluZSBNQUxfTUFYX1JYX1NJWkUJCTQwODAKLQotc3RhdGljIGlubGluZSBpbnQgbWFsX3J4X3NpemUoaW50IGxlbikKLXsKLQlsZW4gPSAobGVuICsgMHhmKSAmIH4weGY7Ci0JcmV0dXJuIGxlbiA+IE1BTF9NQVhfUlhfU0laRSA/IE1BTF9NQVhfUlhfU0laRSA6IGxlbjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWFsX3R4X2NodW5rcyhpbnQgbGVuKQotewotCXJldHVybiAobGVuICsgTUFMX01BWF9UWF9TSVpFIC0gMSkgLyBNQUxfTUFYX1RYX1NJWkU7Ci19Ci0KLSNkZWZpbmUgTUFMX0NIQU5fTUFTSyhuKQkoMHg4MDAwMDAwMCA+PiAobikpCi0KLS8qIE1BTCBCdWZmZXIgRGVzY3JpcHRvciBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBtYWxfZGVzY3JpcHRvciB7Ci0JdTE2IGN0cmw7CQkvKiBNQUwgLyBDb21tYWMgc3RhdHVzIGNvbnRyb2wgYml0cyAqLwotCXUxNiBkYXRhX2xlbjsJCS8qIE1heCBsZW5ndGggaXMgNEstMSAoMTIgYml0cykgICAgICovCi0JdTMyIGRhdGFfcHRyOwkJLyogcG9pbnRlciB0byBhY3R1YWwgZGF0YSBidWZmZXIgICAgKi8KLX07Ci0KLS8qIHRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBNYWRNQUwgc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVycy4gKi8KLS8qIE1BRE1BTCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBzdGF0dXMvY29udHJvbCBiaXRzICAqLwotI2RlZmluZSBNQUxfUlhfQ1RSTF9FTVBUWQkweDgwMDAKLSNkZWZpbmUgTUFMX1JYX0NUUkxfV1JBUAkweDQwMDAKLSNkZWZpbmUgTUFMX1JYX0NUUkxfQ00JCTB4MjAwMAotI2RlZmluZSBNQUxfUlhfQ1RSTF9MQVNUCTB4MTAwMAotI2RlZmluZSBNQUxfUlhfQ1RSTF9GSVJTVAkweDA4MDAKLSNkZWZpbmUgTUFMX1JYX0NUUkxfSU5UUgkweDA0MDAKLSNkZWZpbmUgTUFMX1JYX0NUUkxfU0lOR0xFCShNQUxfUlhfQ1RSTF9MQVNUIHwgTUFMX1JYX0NUUkxfRklSU1QpCi0jZGVmaW5lIE1BTF9JU19TSU5HTEVfUlgoY3RybCkJKCgoY3RybCkgJiBNQUxfUlhfQ1RSTF9TSU5HTEUpID09IE1BTF9SWF9DVFJMX1NJTkdMRSkKLQotI2RlZmluZSBNQUxfVFhfQ1RSTF9SRUFEWQkweDgwMDAKLSNkZWZpbmUgTUFMX1RYX0NUUkxfV1JBUAkweDQwMDAKLSNkZWZpbmUgTUFMX1RYX0NUUkxfQ00JCTB4MjAwMAotI2RlZmluZSBNQUxfVFhfQ1RSTF9MQVNUCTB4MTAwMAotI2RlZmluZSBNQUxfVFhfQ1RSTF9JTlRSCTB4MDQwMAotCi1zdHJ1Y3QgbWFsX2NvbW1hY19vcHMgewotCXZvaWQJKCpwb2xsX3R4KSAodm9pZCAqZGV2KTsKLQlpbnQJKCpwb2xsX3J4KSAodm9pZCAqZGV2LCBpbnQgYnVkZ2V0KTsKLQlpbnQJKCpwZWVrX3J4KSAodm9pZCAqZGV2KTsKLQl2b2lkCSgqcnhkZSkgKHZvaWQgKmRldik7Ci19OwotCi1zdHJ1Y3QgbWFsX2NvbW1hYyB7Ci0Jc3RydWN0IG1hbF9jb21tYWNfb3BzCSpvcHM7Ci0Jdm9pZAkJCSpkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZAlwb2xsX2xpc3Q7Ci0JaW50CQkJcnhfc3RvcHBlZDsKLQotCXUzMgkJCXR4X2NoYW5fbWFzazsKLQl1MzIJCQlyeF9jaGFuX21hc2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotfTsKLQotc3RydWN0IGlibV9vY3BfbWFsIHsKLQlkY3JfaG9zdF90CQlkY3Job3N0OwotCi0Jc3RydWN0IGxpc3RfaGVhZAlwb2xsX2xpc3Q7Ci0Jc3RydWN0IG5hcGlfc3RydWN0CW5hcGk7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0JdTMyCQkJdHhfY2hhbl9tYXNrOwotCXUzMgkJCXJ4X2NoYW5fbWFzazsKLQotCWRtYV9hZGRyX3QJCWJkX2RtYTsKLQlzdHJ1Y3QgbWFsX2Rlc2NyaXB0b3IJKmJkX3ZpcnQ7Ci0KLQlzdHJ1Y3Qgb2NwX2RlZgkJKmRlZjsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9tYWxfZGNybihzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgaW50IHJlZykKLXsKLQlyZXR1cm4gZGNyX3JlYWQobWFsLT5kY3Job3N0LCByZWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X21hbF9kY3JuKHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsLCBpbnQgcmVnLCB1MzIgdmFsKQotewotCWRjcl93cml0ZShtYWwtPmRjcmhvc3QsIHJlZywgdmFsKTsKLX0KLQotLyogUmVnaXN0ZXIgTUFMIGRldmljZXMgKi8KLWludCBtYWxfaW5pdCh2b2lkKSBfX2luaXQ7Ci12b2lkIG1hbF9leGl0KHZvaWQpIF9fZXhpdDsKLQotaW50IG1hbF9yZWdpc3Rlcl9jb21tYWMoc3RydWN0IGlibV9vY3BfbWFsICptYWwsCi0JCQlzdHJ1Y3QgbWFsX2NvbW1hYyAqY29tbWFjKSBfX2luaXQ7Ci12b2lkIG1hbF91bnJlZ2lzdGVyX2NvbW1hYyhzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgc3RydWN0IG1hbF9jb21tYWMgKmNvbW1hYyk7Ci1pbnQgbWFsX3NldF9yY2JzKHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsLCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLQotLyogUmV0dXJucyBCRCByaW5nIG9mZnNldCBmb3IgYSBwYXJ0aWN1bGFyIGNoYW5uZWwKLSAgIChpbiAnc3RydWN0IG1hbF9kZXNjcmlwdG9yJyBlbGVtZW50cykKLSovCi1pbnQgbWFsX3R4X2JkX29mZnNldChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgaW50IGNoYW5uZWwpOwotaW50IG1hbF9yeF9iZF9vZmZzZXQoc3RydWN0IGlibV9vY3BfbWFsICptYWwsIGludCBjaGFubmVsKTsKLQotdm9pZCBtYWxfZW5hYmxlX3R4X2NoYW5uZWwoc3RydWN0IGlibV9vY3BfbWFsICptYWwsIGludCBjaGFubmVsKTsKLXZvaWQgbWFsX2Rpc2FibGVfdHhfY2hhbm5lbChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgaW50IGNoYW5uZWwpOwotdm9pZCBtYWxfZW5hYmxlX3J4X2NoYW5uZWwoc3RydWN0IGlibV9vY3BfbWFsICptYWwsIGludCBjaGFubmVsKTsKLXZvaWQgbWFsX2Rpc2FibGVfcnhfY2hhbm5lbChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgaW50IGNoYW5uZWwpOwotCi0vKiBBZGQvcmVtb3ZlIEVNQUMgdG8vZnJvbSBNQUwgcG9sbGluZyBsaXN0ICovCi12b2lkIG1hbF9wb2xsX2FkZChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgc3RydWN0IG1hbF9jb21tYWMgKmNvbW1hYyk7Ci12b2lkIG1hbF9wb2xsX2RlbChzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwgc3RydWN0IG1hbF9jb21tYWMgKmNvbW1hYyk7Ci0KLS8qIEV0aHRvb2wgTUFMIHJlZ2lzdGVycyAqLwotc3RydWN0IGlibV9tYWxfcmVncyB7Ci0JdTMyIHR4X2NvdW50OwotCXUzMiByeF9jb3VudDsKLQotCXUzMiBjZmc7Ci0JdTMyIGVzcjsKLQl1MzIgaWVyOwotCXUzMiB0eF9jYXNyOwotCXUzMiB0eF9jYXJyOwotCXUzMiB0eF9lb2Jpc3I7Ci0JdTMyIHR4X2RlaXI7Ci0JdTMyIHJ4X2Nhc3I7Ci0JdTMyIHJ4X2NhcnI7Ci0JdTMyIHJ4X2VvYmlzcjsKLQl1MzIgcnhfZGVpcjsKLQl1MzIgdHhfY3RwclszMl07Ci0JdTMyIHJ4X2N0cHJbMzJdOwotCXUzMiByY2JzWzMyXTsKLX07Ci0KLWludCBtYWxfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsKTsKLXZvaWQgKm1hbF9kdW1wX3JlZ3Moc3RydWN0IGlibV9vY3BfbWFsICptYWwsIHZvaWQgKmJ1Zik7Ci0KLSNlbmRpZgkJCQkvKiBfX0lCTV9FTUFDX01BTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcGh5LmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19waHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU3ODYyYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19waHkuYworKysgL2Rldi9udWxsCkBAIC0xLDM5OCArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcGh5LmMKLSAqCi0gKiBEcml2ZXIgZm9yIFBvd2VyUEMgNHh4IG9uLWNoaXAgZXRoZXJuZXQgY29udHJvbGxlciwgUEhZIHN1cHBvcnQuCi0gKiBCb3Jyb3dlZCBmcm9tIHN1bmdlbV9waHkuYywgdGhvdWdoIEkgb25seSBrZXB0IHRoZSBnZW5lcmljIE1JSQotICogZHJpdmVyIGZvciBub3cuCi0gKiAKLSAqIFRoaXMgZmlsZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggb3RoZXIgZHJpdmVycyBvciBldmVudHVhbGx5Ci0gKiBtZXJnZWQgYXMgdGhlICJsb3cgbGV2ZWwiIHBhcnQgb2YgbWlpbGliCi0gKiAKLSAqIChjKSAyMDAzLCBCZW5qYW1pbiBIZXJyZW5zY21pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZykKLSAqIChjKSAyMDA0LTIwMDUsIEV1Z2VuZSBTdXJvdmVnaW4gPGVic0BlYnNob21lLm5ldD4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSA8YXNtL29jcC5oPgotCi0jaW5jbHVkZSAiaWJtX2VtYWNfY29yZS5oIgotI2luY2x1ZGUgImlibV9lbWFjX3BoeS5oIgotCi1zdGF0aWMgaW5saW5lIGludCBwaHlfcmVhZChzdHJ1Y3QgbWlpX3BoeSAqcGh5LCBpbnQgcmVnKQotewotCXJldHVybiBwaHktPm1kaW9fcmVhZChwaHktPmRldiwgcGh5LT5hZGRyZXNzLCByZWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGh5X3dyaXRlKHN0cnVjdCBtaWlfcGh5ICpwaHksIGludCByZWcsIGludCB2YWwpCi17Ci0JcGh5LT5tZGlvX3dyaXRlKHBoeS0+ZGV2LCBwaHktPmFkZHJlc3MsIHJlZywgdmFsKTsKLX0KLQotLyoKLSAqIHBvbGxzIE1JSV9CTUNSIHVudGlsIEJNQ1JfUkVTRVQgYml0IGNsZWFycyBvciBvcGVyYXRpb24gdGltZXMgb3V0LgotICoKLSAqIHJldHVybnM6Ci0gKgk+PSAwID0+IHN1Y2Nlc3MsIHZhbHVlIGluIEJNQ1IgcmV0dXJuZWQgdG8gY2FsbGVyCi0gKgktRUJVU1kgPT4gZmFpbHVyZSwgUkVTRVQgYml0IG5ldmVyIGNsZWFyZWQKLSAqCW90aGVyd2lzZSA9PiBmYWlsdXJlLCBsb3dlciBsZXZlbCBQSFkgcmVhZCBmYWlsZWQKLSAqLwotc3RhdGljIGludCBtaWlfc3Bpbl9yZXNldF9jb21wbGV0ZShzdHJ1Y3QgbWlpX3BoeSAqcGh5KQotewotCWludCB2YWw7Ci0JaW50IGxpbWl0ID0gMTAwMDA7Ci0KLQl3aGlsZSAobGltaXQtLSkgewotCQl2YWwgPSBwaHlfcmVhZChwaHksIE1JSV9CTUNSKTsKLQkJaWYgKHZhbCA+PSAwICYmICEodmFsICYgQk1DUl9SRVNFVCkpCi0JCQlyZXR1cm4gdmFsOwkvKiBzdWNjZXNzICovCi0JCXVkZWxheSgxMCk7Ci0JfQotCWlmICh2YWwgJiBCTUNSX1JFU0VUKQotCQl2YWwgPSAtRUJVU1k7Ci0KLQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9FUlIgImVtYWMlZDogUEhZIHJlc2V0IHRpbWVvdXQgKCVkKVxuIiwgCi0JCSAgICAgICAoKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICopcGh5LT5kZXYtPnByaXYpLT5kZWYtPmluZGV4LAotCQkgICAgICAgdmFsKTsKLQlyZXR1cm4gdmFsOwkJICAgIAotfQotCi1pbnQgbWlpX3Jlc2V0X3BoeShzdHJ1Y3QgbWlpX3BoeSAqcGh5KQotewotCWludCB2YWw7Ci0KLQl2YWwgPSBwaHlfcmVhZChwaHksIE1JSV9CTUNSKTsKLQl2YWwgJj0gfkJNQ1JfSVNPTEFURTsKLQl2YWwgfD0gQk1DUl9SRVNFVDsKLQlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgdmFsKTsKLQotCXVkZWxheSgzMDApOwotCi0JdmFsID0gbWlpX3NwaW5fcmVzZXRfY29tcGxldGUocGh5KTsKLQlpZiAodmFsID49IDAgJiYgKHZhbCAmIEJNQ1JfSVNPTEFURSkpCi0JCXBoeV93cml0ZShwaHksIE1JSV9CTUNSLCB2YWwgJiB+Qk1DUl9JU09MQVRFKTsKLQotCXJldHVybiB2YWwgPCAwOwotfQotCi1zdGF0aWMgaW50IGdlbm1paV9zZXR1cF9hbmVnKHN0cnVjdCBtaWlfcGh5ICpwaHksIHUzMiBhZHZlcnRpc2UpCi17Ci0JaW50IGN0bCwgYWR2OwotCi0JcGh5LT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JcGh5LT5zcGVlZCA9IFNQRUVEXzEwOwotCXBoeS0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JcGh5LT5wYXVzZSA9IHBoeS0+YXN5bV9wYXVzZSA9IDA7Ci0JcGh5LT5hZHZlcnRpc2luZyA9IGFkdmVydGlzZTsKLQotCS8qIFNldHVwIHN0YW5kYXJkIGFkdmVydGlzZSAqLwotCWFkdiA9IHBoeV9yZWFkKHBoeSwgTUlJX0FEVkVSVElTRSk7Ci0JaWYgKGFkdiA8IDApCi0JCXJldHVybiBhZHY7Ci0JYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCB8IEFEVkVSVElTRV9QQVVTRV9DQVAgfAotCQkgQURWRVJUSVNFX1BBVVNFX0FTWU0pOwotCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikKLQkJYWR2IHw9IEFEVkVSVElTRV8xMEhBTEY7Ci0JaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKQotCQlhZHYgfD0gQURWRVJUSVNFXzEwRlVMTDsKLQlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmKQotCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7Ci0JaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKLQkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOwotCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEX1BhdXNlKQotCQlhZHYgfD0gQURWRVJUSVNFX1BBVVNFX0NBUDsKLQlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKQotCQlhZHYgfD0gQURWRVJUSVNFX1BBVVNFX0FTWU07Ci0JcGh5X3dyaXRlKHBoeSwgTUlJX0FEVkVSVElTRSwgYWR2KTsKLQotCWlmIChwaHktPmZlYXR1cmVzICYKLQkgICAgKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZikpIHsKLQkJYWR2ID0gcGh5X3JlYWQocGh5LCBNSUlfQ1RSTDEwMDApOwotCQlpZiAoYWR2IDwgMCkKLQkJCXJldHVybiBhZHY7Ci0JCWFkdiAmPSB+KEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRik7Ci0JCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKQotCQkJYWR2IHw9IEFEVkVSVElTRV8xMDAwRlVMTDsKLQkJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpCi0JCQlhZHYgfD0gQURWRVJUSVNFXzEwMDBIQUxGOwotCQlwaHlfd3JpdGUocGh5LCBNSUlfQ1RSTDEwMDAsIGFkdik7Ci0JfQotCi0JLyogU3RhcnQvUmVzdGFydCBhbmVnICovCi0JLyogb24gc29tZSBQSFlzIChlLmcuIE5hdGlvbmFsIERQODM4NDMpIGEgd3JpdGUgdG8gTUlJX0FEVkVSVElTRQotCSAqIGNhdXNlcyBCTUNSX1JFU0VUIHRvIGJlIHNldCBvbiB0aGUgbmV4dCByZWFkIG9mIE1JSV9CTUNSLCB3aGljaAotCSAqIGlmIG5vdCBjaGVja2VkIGZvciBjYXVzZXMgdGhlIFBIWSB0byBiZSByZXNldCBiZWxvdyAqLwotCWN0bCA9IG1paV9zcGluX3Jlc2V0X2NvbXBsZXRlKHBoeSk7Ci0JaWYgKGN0bCA8IDApCi0JCXJldHVybiBjdGw7Ci0KLQljdGwgfD0gQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUOwotCXBoeV93cml0ZShwaHksIE1JSV9CTUNSLCBjdGwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2VubWlpX3NldHVwX2ZvcmNlZChzdHJ1Y3QgbWlpX3BoeSAqcGh5LCBpbnQgc3BlZWQsIGludCBmZCkKLXsKLQlpbnQgY3RsOwotCi0JcGh5LT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCXBoeS0+c3BlZWQgPSBzcGVlZDsKLQlwaHktPmR1cGxleCA9IGZkOwotCXBoeS0+cGF1c2UgPSBwaHktPmFzeW1fcGF1c2UgPSAwOwotCi0JLyogRmlyc3QgcmVzZXQgdGhlIFBIWSAqLwotCW1paV9yZXNldF9waHkocGh5KTsKLQotCWN0bCA9IHBoeV9yZWFkKHBoeSwgTUlJX0JNQ1IpOwotCWlmIChjdGwgPCAwKQotCQlyZXR1cm4gY3RsOwotCWN0bCAmPSB+KEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwIHwgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfU1BFRUQxMDAwKTsKLQotCS8qIFNlbGVjdCBzcGVlZCAmIGR1cGxleCAqLwotCXN3aXRjaCAoc3BlZWQpIHsKLQljYXNlIFNQRUVEXzEwOgotCQlicmVhazsKLQljYXNlIFNQRUVEXzEwMDoKLQkJY3RsIHw9IEJNQ1JfU1BFRUQxMDA7Ci0JCWJyZWFrOwotCWNhc2UgU1BFRURfMTAwMDoKLQkJY3RsIHw9IEJNQ1JfU1BFRUQxMDAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKGZkID09IERVUExFWF9GVUxMKQotCQljdGwgfD0gQk1DUl9GVUxMRFBMWDsKLQlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgY3RsKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGdlbm1paV9wb2xsX2xpbmsoc3RydWN0IG1paV9waHkgKnBoeSkKLXsKLQlpbnQgc3RhdHVzOwotCi0JLyogQ2xlYXIgbGF0Y2hlZCB2YWx1ZSB3aXRoIGR1bW15IHJlYWQgKi8KLQlwaHlfcmVhZChwaHksIE1JSV9CTVNSKTsKLQlzdGF0dXMgPSBwaHlfcmVhZChwaHksIE1JSV9CTVNSKTsKLQlpZiAoc3RhdHVzIDwgMCB8fCAoc3RhdHVzICYgQk1TUl9MU1RBVFVTKSA9PSAwKQotCQlyZXR1cm4gMDsKLQlpZiAocGh5LT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmICEoc3RhdHVzICYgQk1TUl9BTkVHQ09NUExFVEUpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBnZW5taWlfcmVhZF9saW5rKHN0cnVjdCBtaWlfcGh5ICpwaHkpCi17Ci0JaWYgKHBoeS0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewotCQlpbnQgZ2xwYSA9IDA7Ci0JCWludCBscGEgPSBwaHlfcmVhZChwaHksIE1JSV9MUEEpICYgcGh5X3JlYWQocGh5LCBNSUlfQURWRVJUSVNFKTsKLQkJaWYgKGxwYSA8IDApCi0JCQlyZXR1cm4gbHBhOwotCi0JCWlmIChwaHktPmZlYXR1cmVzICYKLQkJICAgIChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYpKSB7Ci0JCQlpbnQgYWR2ID0gcGh5X3JlYWQocGh5LCBNSUlfQ1RSTDEwMDApOwotCQkJZ2xwYSA9IHBoeV9yZWFkKHBoeSwgTUlJX1NUQVQxMDAwKTsKLQotCQkJaWYgKGdscGEgPCAwIHx8IGFkdiA8IDApCi0JCQkJcmV0dXJuIGFkdjsKLQotCQkJZ2xwYSAmPSBhZHYgPDwgMjsKLQkJfQotCi0JCXBoeS0+c3BlZWQgPSBTUEVFRF8xMDsKLQkJcGh5LT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJcGh5LT5wYXVzZSA9IHBoeS0+YXN5bV9wYXVzZSA9IDA7Ci0KLQkJaWYgKGdscGEgJiAoTFBBXzEwMDBGVUxMIHwgTFBBXzEwMDBIQUxGKSkgewotCQkJcGh5LT5zcGVlZCA9IFNQRUVEXzEwMDA7Ci0JCQlpZiAoZ2xwYSAmIExQQV8xMDAwRlVMTCkKLQkJCQlwaHktPmR1cGxleCA9IERVUExFWF9GVUxMOwotCQl9IGVsc2UgaWYgKGxwYSAmIChMUEFfMTAwRlVMTCB8IExQQV8xMDBIQUxGKSkgewotCQkJcGh5LT5zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCWlmIChscGEgJiBMUEFfMTAwRlVMTCkKLQkJCQlwaHktPmR1cGxleCA9IERVUExFWF9GVUxMOwotCQl9IGVsc2UgaWYgKGxwYSAmIExQQV8xMEZVTEwpCi0JCQlwaHktPmR1cGxleCA9IERVUExFWF9GVUxMOwotCi0JCWlmIChwaHktPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgewotCQkJcGh5LT5wYXVzZSA9IGxwYSAmIExQQV9QQVVTRV9DQVAgPyAxIDogMDsKLQkJCXBoeS0+YXN5bV9wYXVzZSA9IGxwYSAmIExQQV9QQVVTRV9BU1lNID8gMSA6IDA7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgYm1jciA9IHBoeV9yZWFkKHBoeSwgTUlJX0JNQ1IpOwotCQlpZiAoYm1jciA8IDApCi0JCQlyZXR1cm4gYm1jcjsKLQotCQlpZiAoYm1jciAmIEJNQ1JfRlVMTERQTFgpCi0JCQlwaHktPmR1cGxleCA9IERVUExFWF9GVUxMOwotCQllbHNlCi0JCQlwaHktPmR1cGxleCA9IERVUExFWF9IQUxGOwotCQlpZiAoYm1jciAmIEJNQ1JfU1BFRUQxMDAwKQotCQkJcGh5LT5zcGVlZCA9IFNQRUVEXzEwMDA7Ci0JCWVsc2UgaWYgKGJtY3IgJiBCTUNSX1NQRUVEMTAwKQotCQkJcGh5LT5zcGVlZCA9IFNQRUVEXzEwMDsKLQkJZWxzZQotCQkJcGh5LT5zcGVlZCA9IFNQRUVEXzEwOwotCi0JCXBoeS0+cGF1c2UgPSBwaHktPmFzeW1fcGF1c2UgPSAwOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogR2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgbW9zdCAxMC8xMDAvMTAwMCBQSFlzICovCi1zdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIGdlbmVyaWNfcGh5X29wcyA9IHsKLQkuc2V0dXBfYW5lZwk9IGdlbm1paV9zZXR1cF9hbmVnLAotCS5zZXR1cF9mb3JjZWQJPSBnZW5taWlfc2V0dXBfZm9yY2VkLAotCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLAotCS5yZWFkX2xpbmsJPSBnZW5taWlfcmVhZF9saW5rCi19OwotCi1zdGF0aWMgc3RydWN0IG1paV9waHlfZGVmIGdlbm1paV9waHlfZGVmID0gewotCS5waHlfaWQJCT0gMHgwMDAwMDAwMCwKLQkucGh5X2lkX21hc2sJPSAweDAwMDAwMDAwLAotCS5uYW1lCQk9ICJHZW5lcmljIE1JSSIsCi0JLm9wcwkJPSAmZ2VuZXJpY19waHlfb3BzCi19OwotCi0vKiBDSVM4MjAxICovCi0jZGVmaW5lIE1JSV9DSVM4MjAxXzEwQlRDU1IJMHgxNgotI2RlZmluZSAgVEVOQlRDU1JfRUNIT19ESVNBQkxFCTB4MjAwMAotI2RlZmluZSBNSUlfQ0lTODIwMV9FUENSCTB4MTcKLSNkZWZpbmUgIEVQQ1JfTU9ERV9NQVNLCQkweDMwMDAKLSNkZWZpbmUgIEVQQ1JfR01JSV9NT0RFCQkweDAwMDAKLSNkZWZpbmUgIEVQQ1JfUkdNSUlfTU9ERQkweDEwMDAKLSNkZWZpbmUgIEVQQ1JfVEJJX01PREUJCTB4MjAwMAotI2RlZmluZSAgRVBDUl9SVEJJX01PREUJCTB4MzAwMAotI2RlZmluZSBNSUlfQ0lTODIwMV9BQ1NSCTB4MWMKLSNkZWZpbmUgIEFDU1JfUElOX1BSSU9fU0VMRUNUCTB4MDAwNAotCi1zdGF0aWMgaW50IGNpczgyMDFfaW5pdChzdHJ1Y3QgbWlpX3BoeSAqcGh5KQotewotCWludCBlcGNyOwotCi0JZXBjciA9IHBoeV9yZWFkKHBoeSwgTUlJX0NJUzgyMDFfRVBDUik7Ci0JaWYgKGVwY3IgPCAwKQotCQlyZXR1cm4gZXBjcjsKLQotCWVwY3IgJj0gfkVQQ1JfTU9ERV9NQVNLOwotCi0Jc3dpdGNoIChwaHktPm1vZGUpIHsKLQljYXNlIFBIWV9NT0RFX1RCSToKLQkJZXBjciB8PSBFUENSX1RCSV9NT0RFOwotCQlicmVhazsKLQljYXNlIFBIWV9NT0RFX1JUQkk6Ci0JCWVwY3IgfD0gRVBDUl9SVEJJX01PREU7Ci0JCWJyZWFrOwotCWNhc2UgUEhZX01PREVfR01JSToKLQkJZXBjciB8PSBFUENSX0dNSUlfTU9ERTsKLQkJYnJlYWs7Ci0JY2FzZSBQSFlfTU9ERV9SR01JSToKLQlkZWZhdWx0OgotCQllcGNyIHw9IEVQQ1JfUkdNSUlfTU9ERTsKLQl9Ci0KLQlwaHlfd3JpdGUocGh5LCBNSUlfQ0lTODIwMV9FUENSLCBlcGNyKTsKLQkKLQkvKiBNSUkgcmVncyBvdmVycmlkZSBzdHJhcCBwaW5zICovCi0JcGh5X3dyaXRlKHBoeSwgTUlJX0NJUzgyMDFfQUNTUiwgCi0JCSAgcGh5X3JlYWQocGh5LCBNSUlfQ0lTODIwMV9BQ1NSKSB8IEFDU1JfUElOX1BSSU9fU0VMRUNUKTsKLQotCS8qIERpc2FibGUgVFhfRU4gLT4gQ1JTIGVjaG8gbW9kZSwgb3RoZXJ3aXNlIDEwL0hEWCBkb2Vzbid0IHdvcmsgKi8KLQlwaHlfd3JpdGUocGh5LCBNSUlfQ0lTODIwMV8xMEJUQ1NSLAotCQkgIHBoeV9yZWFkKHBoeSwgTUlJX0NJUzgyMDFfMTBCVENTUikgfCBURU5CVENTUl9FQ0hPX0RJU0FCTEUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgY2lzODIwMV9waHlfb3BzID0gewotCS5pbml0CQk9IGNpczgyMDFfaW5pdCwKLQkuc2V0dXBfYW5lZwk9IGdlbm1paV9zZXR1cF9hbmVnLAotCS5zZXR1cF9mb3JjZWQJPSBnZW5taWlfc2V0dXBfZm9yY2VkLAotCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLAotCS5yZWFkX2xpbmsJPSBnZW5taWlfcmVhZF9saW5rCi19OwotCi1zdGF0aWMgc3RydWN0IG1paV9waHlfZGVmIGNpczgyMDFfcGh5X2RlZiA9IHsKLQkucGh5X2lkCQk9IDB4MDAwZmM0MTAsCi0JLnBoeV9pZF9tYXNrCT0gMHgwMDBmZmZmMCwKLQkubmFtZQkJPSAiQ0lTODIwMSBHaWdhYml0IEV0aGVybmV0IiwKLQkub3BzCQk9ICZjaXM4MjAxX3BoeV9vcHMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9kZWYgKm1paV9waHlfdGFibGVbXSA9IHsKLQkmY2lzODIwMV9waHlfZGVmLAotCSZnZW5taWlfcGh5X2RlZiwKLQlOVUxMCi19OwotCi1pbnQgbWlpX3BoeV9wcm9iZShzdHJ1Y3QgbWlpX3BoeSAqcGh5LCBpbnQgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgbWlpX3BoeV9kZWYgKmRlZjsKLQlpbnQgaTsKLQlpbnQgaWQ7Ci0KLQlwaHktPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JcGh5LT5hZHZlcnRpc2luZyA9IDA7Ci0JcGh5LT5hZGRyZXNzID0gYWRkcmVzczsKLQlwaHktPnNwZWVkID0gU1BFRURfMTA7Ci0JcGh5LT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQlwaHktPnBhdXNlID0gcGh5LT5hc3ltX3BhdXNlID0gMDsKLQotCS8qIFRha2UgUEhZIG91dCBvZiBpc29sYXRlIG1vZGUgYW5kIHJlc2V0IGl0LiAqLwotCWlmIChtaWlfcmVzZXRfcGh5KHBoeSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogUmVhZCBJRCBhbmQgZmluZCBtYXRjaGluZyBlbnRyeSAqLwotCWlkID0gKHBoeV9yZWFkKHBoeSwgTUlJX1BIWVNJRDEpIDw8IDE2KSB8IHBoeV9yZWFkKHBoeSwgTUlJX1BIWVNJRDIpOwotCWlmIChpZCA8IDApCi0JCXJldHVybiAtRU5PREVWOwotCWZvciAoaSA9IDA7IChkZWYgPSBtaWlfcGh5X3RhYmxlW2ldKSAhPSBOVUxMOyBpKyspCi0JCWlmICgoaWQgJiBkZWYtPnBoeV9pZF9tYXNrKSA9PSBkZWYtPnBoeV9pZCkKLQkJCWJyZWFrOwotCS8qIFNob3VsZCBuZXZlciBiZSBOVUxMICh3ZSBoYXZlIGEgZ2VuZXJpYyBlbnRyeSksIGJ1dC4uLiAqLwotCWlmICghZGVmKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXBoeS0+ZGVmID0gZGVmOwotCi0JLyogRGV0ZXJtaW5lIFBIWSBmZWF0dXJlcyBpZiBuZWVkZWQgKi8KLQlwaHktPmZlYXR1cmVzID0gZGVmLT5mZWF0dXJlczsKLQlpZiAoIXBoeS0+ZmVhdHVyZXMpIHsKLQkJdTE2IGJtc3IgPSBwaHlfcmVhZChwaHksIE1JSV9CTVNSKTsKLQkJaWYgKGJtc3IgJiBCTVNSX0FORUdDQVBBQkxFKQotCQkJcGh5LT5mZWF0dXJlcyB8PSBTVVBQT1JURURfQXV0b25lZzsKLQkJaWYgKGJtc3IgJiBCTVNSXzEwSEFMRikKLQkJCXBoeS0+ZmVhdHVyZXMgfD0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZjsKLQkJaWYgKGJtc3IgJiBCTVNSXzEwRlVMTCkKLQkJCXBoeS0+ZmVhdHVyZXMgfD0gU1VQUE9SVEVEXzEwYmFzZVRfRnVsbDsKLQkJaWYgKGJtc3IgJiBCTVNSXzEwMEhBTEYpCi0JCQlwaHktPmZlYXR1cmVzIHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmOwotCQlpZiAoYm1zciAmIEJNU1JfMTAwRlVMTCkKLQkJCXBoeS0+ZmVhdHVyZXMgfD0gU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGw7Ci0JCWlmIChibXNyICYgQk1TUl9FU1RBVEVOKSB7Ci0JCQl1MTYgZXNyID0gcGh5X3JlYWQocGh5LCBNSUlfRVNUQVRVUyk7Ci0JCQlpZiAoZXNyICYgRVNUQVRVU18xMDAwX1RGVUxMKQotCQkJCXBoeS0+ZmVhdHVyZXMgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOwotCQkJaWYgKGVzciAmIEVTVEFUVVNfMTAwMF9USEFMRikKLQkJCQlwaHktPmZlYXR1cmVzIHw9IFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZjsKLQkJfQotCQlwaHktPmZlYXR1cmVzIHw9IFNVUFBPUlRFRF9NSUk7Ci0JfQotCi0JLyogU2V0dXAgZGVmYXVsdCBhZHZlcnRpc2luZyAqLwotCXBoeS0+YWR2ZXJ0aXNpbmcgPSBwaHktPmZlYXR1cmVzOwotCi0JcmV0dXJuIDA7Ci19Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3BoeS5oIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcGh5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MGUwZmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcGh5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcGh5LmgKLSAqCi0gKiBEcml2ZXIgZm9yIFBvd2VyUEMgNHh4IG9uLWNoaXAgZXRoZXJuZXQgY29udHJvbGxlciwgUEhZIHN1cHBvcnQKLSAqCi0gKiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKiBGZWJydWFyeSAyMDAzCi0gKgotICogTWlub3IgYWRkaXRpb25zIGJ5IEV1Z2VuZSBTdXJvdmVnaW4gPGVic0BlYnNob21lLm5ldD4sIDIwMDQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgZmlsZSBiYXNpY2FsbHkgZHVwbGljYXRlcyBzdW5nZW1fcGh5LntjLGh9IHdpdGggZGlmZmVyZW50IFBIWXMKLSAqIHN1cHBvcnRlZC4gSSdtIGxvb2tpbmcgaW50byBtZXJnaW5nIHRoYXQgaW4gYSBzaW5nbGUgbWlpIGxheWVyIG1vcmUKLSAqIGZsZXhpYmxlIHRoYW4gbWlpLmMgCi0gKi8KLQotI2lmbmRlZiBfSUJNX09DUF9QSFlfSF8KLSNkZWZpbmUgX0lCTV9PQ1BfUEhZX0hfCi0KLXN0cnVjdCBtaWlfcGh5OwotCi0vKiBPcGVyYXRpb25zIHN1cHBvcnRlZCBieSBhbnkga2luZCBvZiBQSFkgKi8KLXN0cnVjdCBtaWlfcGh5X29wcyB7Ci0JaW50ICgqaW5pdCkgKHN0cnVjdCBtaWlfcGh5ICogcGh5KTsKLQlpbnQgKCpzdXNwZW5kKSAoc3RydWN0IG1paV9waHkgKiBwaHksIGludCB3b2xfb3B0aW9ucyk7Ci0JaW50ICgqc2V0dXBfYW5lZykgKHN0cnVjdCBtaWlfcGh5ICogcGh5LCB1MzIgYWR2ZXJ0aXNlKTsKLQlpbnQgKCpzZXR1cF9mb3JjZWQpIChzdHJ1Y3QgbWlpX3BoeSAqIHBoeSwgaW50IHNwZWVkLCBpbnQgZmQpOwotCWludCAoKnBvbGxfbGluaykgKHN0cnVjdCBtaWlfcGh5ICogcGh5KTsKLQlpbnQgKCpyZWFkX2xpbmspIChzdHJ1Y3QgbWlpX3BoeSAqIHBoeSk7Ci19OwotCi0vKiBTdHJ1Y3R1cmUgdXNlZCB0byBzdGF0aWNhbGx5IGRlZmluZSBhbiBtaWkvZ2lpIGJhc2VkIFBIWSAqLwotc3RydWN0IG1paV9waHlfZGVmIHsKLQl1MzIgcGh5X2lkOwkJLyogQ29uY2F0ZW5hdGVkIElEMSA8PCAxNiB8IElEMiAqLwotCXUzMiBwaHlfaWRfbWFzazsJLyogU2lnbmlmaWNhbnQgYml0cyAqLwotCXUzMiBmZWF0dXJlczsJCS8qIEV0aHRvb2wgU1VQUE9SVEVEXyogZGVmaW5lcyBvciAKLQkJCQkgICAwIGZvciBhdXRvZGV0ZWN0ICovCi0JaW50IG1hZ2ljX2FuZWc7CQkvKiBBdXRvbmVnIGRvZXMgYWxsIHNwZWVkIHRlc3QgZm9yIHVzICovCi0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBzdHJ1Y3QgbWlpX3BoeV9vcHMgKm9wczsKLX07Ci0KLS8qIEFuIGluc3RhbmNlIG9mIGEgUEhZLCBwYXJ0aWFsbHkgYm9ycm93ZWQgZnJvbSBtaWlfaWZfaW5mbyAqLwotc3RydWN0IG1paV9waHkgewotCXN0cnVjdCBtaWlfcGh5X2RlZiAqZGVmOwotCXUzMiBhZHZlcnRpc2luZzsJLyogRXRodG9vbCBBRFZFUlRJU0VEXyogZGVmaW5lcyAqLwotCXUzMiBmZWF0dXJlczsJCS8qIENvcGllZCBmcm9tIG1paV9waHlfZGVmLmZlYXR1cmVzIAotCQkJCSAgIG9yIGRldGVybWluZWQgYXV0b21hdGljYWx5ICovCi0JaW50IGFkZHJlc3M7CQkvKiBQSFkgYWRkcmVzcyAqLwotCWludCBtb2RlOwkJLyogUEhZIG1vZGUgKi8KLQotCS8qIDE6IGF1dG9uZWcgZW5hYmxlZCwgMDogZGlzYWJsZWQgKi8KLQlpbnQgYXV0b25lZzsKLQotCS8qIGZvcmNlZCBzcGVlZCAmIGR1cGxleCAobm8gYXV0b25lZykKLQkgKiBwYXJ0bmVyIHNwZWVkICYgZHVwbGV4ICYgcGF1c2UgKGF1dG9uZWcpCi0JICovCi0JaW50IHNwZWVkOwotCWludCBkdXBsZXg7Ci0JaW50IHBhdXNlOwotCWludCBhc3ltX3BhdXNlOwotCi0JLyogUHJvdmlkZWQgYnkgaG9zdCBjaGlwICovCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgKCptZGlvX3JlYWQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IGFkZHIsIGludCByZWcpOwotCXZvaWQgKCptZGlvX3dyaXRlKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBhZGRyLCBpbnQgcmVnLAotCQkJICAgIGludCB2YWwpOwotfTsKLQotLyogUGFzcyBpbiBhIHN0cnVjdCBtaWlfcGh5IHdpdGggZGV2LCBtZGlvX3JlYWQgYW5kIG1kaW9fd3JpdGUKLSAqIGZpbGxlZCwgdGhlIHJlbWFpbmluZyBmaWVsZHMgd2lsbCBiZSBmaWxsZWQgb24gcmV0dXJuCi0gKi8KLWludCBtaWlfcGh5X3Byb2JlKHN0cnVjdCBtaWlfcGh5ICpwaHksIGludCBhZGRyZXNzKTsKLWludCBtaWlfcmVzZXRfcGh5KHN0cnVjdCBtaWlfcGh5ICpwaHkpOwotCi0jZW5kaWYJCQkJLyogX0lCTV9PQ1BfUEhZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5jIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcmdtaWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRiYjVlNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5jCi0gKgotICogRHJpdmVyIGZvciBQb3dlclBDIDR4eCBvbi1jaGlwIGV0aGVybmV0IGNvbnRyb2xsZXIsIFJHTUlJIGJyaWRnZSBzdXBwb3J0LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBadWx0eXMgVGVjaG5vbG9naWVzLgotICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgotICoKLSAqIEJhc2VkIG9uIG9yaWdpbmFsIHdvcmsgYnkKLSAqIAlNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICogCUNvcHlyaWdodCAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqIAotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlICJpYm1fZW1hY19jb3JlLmgiCi0jaW5jbHVkZSAiaWJtX2VtYWNfZGVidWcuaCIKLQotLyogUkdNSUl4X0ZFUiAqLwotI2RlZmluZSBSR01JSV9GRVJfTUFTSyhpZHgpCSgweDcgPDwgKChpZHgpICogNCkpCi0jZGVmaW5lIFJHTUlJX0ZFUl9SVEJJKGlkeCkJKDB4NCA8PCAoKGlkeCkgKiA0KSkKLSNkZWZpbmUgUkdNSUlfRkVSX1JHTUlJKGlkeCkJKDB4NSA8PCAoKGlkeCkgKiA0KSkKLSNkZWZpbmUgUkdNSUlfRkVSX1RCSShpZHgpCSgweDYgPDwgKChpZHgpICogNCkpCi0jZGVmaW5lIFJHTUlJX0ZFUl9HTUlJKGlkeCkJKDB4NyA8PCAoKGlkeCkgKiA0KSkKLQotLyogUkdNSUl4X1NTUiAqLwotI2RlZmluZSBSR01JSV9TU1JfTUFTSyhpZHgpCSgweDcgPDwgKChpZHgpICogOCkpCi0jZGVmaW5lIFJHTUlJX1NTUl8xMDAoaWR4KQkoMHgyIDw8ICgoaWR4KSAqIDgpKQotI2RlZmluZSBSR01JSV9TU1JfMTAwMChpZHgpCSgweDQgPDwgKChpZHgpICogOCkpCi0KLS8qIFJHTUlJIGJyaWRnZSBzdXBwb3J0cyBvbmx5IEdNSUkvVEJJIGFuZCBSR01JSS9SVEJJIFBIWXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJnbWlpX3ZhbGlkX21vZGUoaW50IHBoeV9tb2RlKQotewotCXJldHVybiAgcGh5X21vZGUgPT0gUEhZX01PREVfR01JSSB8fAotCQlwaHlfbW9kZSA9PSBQSFlfTU9ERV9SR01JSSB8fAotCQlwaHlfbW9kZSA9PSBQSFlfTU9ERV9UQkkgfHwKLQkJcGh5X21vZGUgPT0gUEhZX01PREVfUlRCSTsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpyZ21paV9tb2RlX25hbWUoaW50IG1vZGUpCi17Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBQSFlfTU9ERV9SR01JSToKLQkJcmV0dXJuICJSR01JSSI7Ci0JY2FzZSBQSFlfTU9ERV9UQkk6Ci0JCXJldHVybiAiVEJJIjsKLQljYXNlIFBIWV9NT0RFX0dNSUk6Ci0JCXJldHVybiAiR01JSSI7Ci0JY2FzZSBQSFlfTU9ERV9SVEJJOgotCQlyZXR1cm4gIlJUQkkiOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB1MzIgcmdtaWlfbW9kZV9tYXNrKGludCBtb2RlLCBpbnQgaW5wdXQpCi17Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBQSFlfTU9ERV9SR01JSToKLQkJcmV0dXJuIFJHTUlJX0ZFUl9SR01JSShpbnB1dCk7Ci0JY2FzZSBQSFlfTU9ERV9UQkk6Ci0JCXJldHVybiBSR01JSV9GRVJfVEJJKGlucHV0KTsKLQljYXNlIFBIWV9NT0RFX0dNSUk6Ci0JCXJldHVybiBSR01JSV9GRVJfR01JSShpbnB1dCk7Ci0JY2FzZSBQSFlfTU9ERV9SVEJJOgotCQlyZXR1cm4gUkdNSUlfRkVSX1JUQkkoaW5wdXQpOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgcmdtaWlfaW5pdChzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2LCBpbnQgaW5wdXQsIGludCBtb2RlKQotewotCXN0cnVjdCBpYm1fb2NwX3JnbWlpICpkZXYgPSBvY3BfZ2V0X2RydmRhdGEob2NwZGV2KTsKLQlzdHJ1Y3QgcmdtaWlfcmVncyAqcDsKLQotCVJHTUlJX0RCRygiJWQ6IGluaXQoJWQsICVkKSIgTkwsIG9jcGRldi0+ZGVmLT5pbmRleCwgaW5wdXQsIG1vZGUpOwotCi0JaWYgKCFkZXYpIHsKLQkJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlibV9vY3BfcmdtaWkpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkZXYpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJyZ21paSVkOiBjb3VsZG4ndCBhbGxvY2F0ZSBkZXZpY2Ugc3RydWN0dXJlIVxuIiwKLQkJCSAgICAgICBvY3BkZXYtPmRlZi0+aW5kZXgpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQlwID0gKHN0cnVjdCByZ21paV9yZWdzICopaW9yZW1hcChvY3BkZXYtPmRlZi0+cGFkZHIsCi0JCQkJCQkgc2l6ZW9mKHN0cnVjdCByZ21paV9yZWdzKSk7Ci0JCWlmICghcCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgInJnbWlpJWQ6IGNvdWxkIG5vdCBpb3JlbWFwIGRldmljZSByZWdpc3RlcnMhXG4iLAotCQkJICAgICAgIG9jcGRldi0+ZGVmLT5pbmRleCk7Ci0JCQlrZnJlZShkZXYpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQlkZXYtPmJhc2UgPSBwOwotCQlvY3Bfc2V0X2RydmRhdGEob2NwZGV2LCBkZXYpOwotCi0JCS8qIERpc2FibGUgYWxsIGlucHV0cyBieSBkZWZhdWx0ICovCi0JCW91dF9iZTMyKCZwLT5mZXIsIDApOwotCX0gZWxzZQotCQlwID0gZGV2LT5iYXNlOwotCi0JLyogRW5hYmxlIHRoaXMgaW5wdXQgKi8KLQlvdXRfYmUzMigmcC0+ZmVyLCBpbl9iZTMyKCZwLT5mZXIpIHwgcmdtaWlfbW9kZV9tYXNrKG1vZGUsIGlucHV0KSk7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgInJnbWlpJWQ6IGlucHV0ICVkIGluICVzIG1vZGVcbiIsCi0JICAgICAgIG9jcGRldi0+ZGVmLT5pbmRleCwgaW5wdXQsIHJnbWlpX21vZGVfbmFtZShtb2RlKSk7Ci0KLQkrK2Rldi0+dXNlcnM7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2luaXQgcmdtaWlfYXR0YWNoKHZvaWQgKmVtYWMpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IGVtYWM7Ci0Jc3RydWN0IG9jcF9mdW5jX2VtYWNfZGF0YSAqZW1hY2RhdGEgPSBkZXYtPmRlZi0+YWRkaXRpb25zOwotCi0JLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBhdHRhY2ggdG8gYSBSR01JSSAqLwotCWlmIChlbWFjZGF0YS0+cmdtaWlfaWR4ID49IDAgJiYgcmdtaWlfdmFsaWRfbW9kZShlbWFjZGF0YS0+cGh5X21vZGUpKSB7Ci0JCWRldi0+cmdtaWlfaW5wdXQgPSBlbWFjZGF0YS0+cmdtaWlfbXV4OwotCQlkZXYtPnJnbWlpX2RldiA9Ci0JCSAgICBvY3BfZmluZF9kZXZpY2UoT0NQX1ZFTkRPUl9JQk0sIE9DUF9GVU5DX1JHTUlJLAotCQkJCSAgICBlbWFjZGF0YS0+cmdtaWlfaWR4KTsKLQkJaWYgKCFkZXYtPnJnbWlpX2RldikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJlbWFjJWQ6IHVua25vd24gcmdtaWklZCFcbiIsCi0JCQkgICAgICAgZGV2LT5kZWYtPmluZGV4LCBlbWFjZGF0YS0+cmdtaWlfaWR4KTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmIChyZ21paV9pbml0Ci0JCSAgICAoZGV2LT5yZ21paV9kZXYsIGRldi0+cmdtaWlfaW5wdXQsIGVtYWNkYXRhLT5waHlfbW9kZSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJlbWFjJWQ6IHJnbWlpJWQgaW5pdGlhbGl6YXRpb24gZmFpbGVkIVxuIiwKLQkJCSAgICAgICBkZXYtPmRlZi0+aW5kZXgsIGVtYWNkYXRhLT5yZ21paV9pZHgpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcmdtaWlfc2V0X3NwZWVkKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCwgaW50IHNwZWVkKQotewotCXN0cnVjdCBpYm1fb2NwX3JnbWlpICpkZXYgPSBvY3BfZ2V0X2RydmRhdGEob2NwZGV2KTsKLQl1MzIgc3NyID0gaW5fYmUzMigmZGV2LT5iYXNlLT5zc3IpICYgflJHTUlJX1NTUl9NQVNLKGlucHV0KTsKLQotCVJHTUlJX0RCRygiJWQ6IHNwZWVkKCVkLCAlZCkiIE5MLCBvY3BkZXYtPmRlZi0+aW5kZXgsIGlucHV0LCBzcGVlZCk7Ci0KLQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkKLQkJc3NyIHw9IFJHTUlJX1NTUl8xMDAwKGlucHV0KTsKLQllbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDApCi0JCXNzciB8PSBSR01JSV9TU1JfMTAwKGlucHV0KTsKLQotCW91dF9iZTMyKCZkZXYtPmJhc2UtPnNzciwgc3NyKTsKLX0KLQotdm9pZCBfX3JnbWlpX2Zpbmkoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgaW50IGlucHV0KQotewotCXN0cnVjdCBpYm1fb2NwX3JnbWlpICpkZXYgPSBvY3BfZ2V0X2RydmRhdGEob2NwZGV2KTsKLQlCVUdfT04oIWRldiB8fCBkZXYtPnVzZXJzID09IDApOwotCi0JUkdNSUlfREJHKCIlZDogZmluaSglZCkiIE5MLCBvY3BkZXYtPmRlZi0+aW5kZXgsIGlucHV0KTsKLQotCS8qIERpc2FibGUgdGhpcyBpbnB1dCAqLwotCW91dF9iZTMyKCZkZXYtPmJhc2UtPmZlciwKLQkJIGluX2JlMzIoJmRldi0+YmFzZS0+ZmVyKSAmIH5SR01JSV9GRVJfTUFTSyhpbnB1dCkpOwotCi0JaWYgKCEtLWRldi0+dXNlcnMpIHsKLQkJLyogRnJlZSBldmVyeXRoaW5nIGlmIHRoaXMgaXMgdGhlIGxhc3QgdXNlciAqLwotCQlvY3Bfc2V0X2RydmRhdGEob2NwZGV2LCBOVUxMKTsKLQkJaW91bm1hcCgodm9pZCAqKWRldi0+YmFzZSk7Ci0JCWtmcmVlKGRldik7Ci0JfQotfQotCi1pbnQgX19yZ21paV9nZXRfcmVnc19sZW4oc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldikKLXsKLQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBlbWFjX2V0aHRvb2xfcmVnc19zdWJoZHIpICsKLQkgICAgc2l6ZW9mKHN0cnVjdCByZ21paV9yZWdzKTsKLX0KLQotdm9pZCAqcmdtaWlfZHVtcF9yZWdzKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIHZvaWQgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWJtX29jcF9yZ21paSAqZGV2ID0gb2NwX2dldF9kcnZkYXRhKG9jcGRldik7Ci0Jc3RydWN0IGVtYWNfZXRodG9vbF9yZWdzX3N1YmhkciAqaGRyID0gYnVmOwotCXN0cnVjdCByZ21paV9yZWdzICpyZWdzID0gKHN0cnVjdCByZ21paV9yZWdzICopKGhkciArIDEpOwotCi0JaGRyLT52ZXJzaW9uID0gMDsKLQloZHItPmluZGV4ID0gb2NwZGV2LT5kZWYtPmluZGV4OwotCW1lbWNweV9mcm9taW8ocmVncywgZGV2LT5iYXNlLCBzaXplb2Yoc3RydWN0IHJnbWlpX3JlZ3MpKTsKLQlyZXR1cm4gcmVncyArIDE7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5oIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcmdtaWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcxZTQ1OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3JnbWlpLmgKLSAqCi0gKiBEcml2ZXIgZm9yIFBvd2VyUEMgNHh4IG9uLWNoaXAgZXRoZXJuZXQgY29udHJvbGxlciwgUkdNSUkgYnJpZGdlIHN1cHBvcnQuCi0gKgotICogQmFzZWQgb24gb2NwX3ptaWkuaC9pYm1fZW1hY196bWlpLmgKLSAqIEFybWluIEt1c3RlciBha3VzdGVyQG12aXN0YS5jb20KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBadWx0eXMgVGVjaG5vbG9naWVzLgotICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBfSUJNX0VNQUNfUkdNSUlfSF8KLSNkZWZpbmUgX0lCTV9FTUFDX1JHTUlJX0hfCi0KLQotLyogUkdNSUkgYnJpZGdlICovCi1zdHJ1Y3QgcmdtaWlfcmVncyB7Ci0JdTMyIGZlcjsJCS8qIEZ1bmN0aW9uIGVuYWJsZSByZWdpc3RlciAqLwotCXUzMiBzc3I7CQkvKiBTcGVlZCBzZWxlY3QgcmVnaXN0ZXIgKi8KLX07Ci0KLS8qIFJHTUlJIGRldmljZSAqLwotc3RydWN0IGlibV9vY3BfcmdtaWkgewotCXN0cnVjdCByZ21paV9yZWdzIF9faW9tZW0gKmJhc2U7Ci0JaW50IHVzZXJzOwkJLyogbnVtYmVyIG9mIEVNQUNzIHVzaW5nIHRoaXMgUkdNSUkgYnJpZGdlICovCi19OwotCi0jaWZkZWYgQ09ORklHX0lCTV9FTUFDX1JHTUlJCi1pbnQgcmdtaWlfYXR0YWNoKHZvaWQgKmVtYWMpIF9faW5pdDsKLQotdm9pZCBfX3JnbWlpX2Zpbmkoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgaW50IGlucHV0KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCByZ21paV9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCkKLXsKLQlpZiAob2NwZGV2KQotCQlfX3JnbWlpX2Zpbmkob2NwZGV2LCBpbnB1dCk7Ci19Ci0KLXZvaWQgcmdtaWlfc2V0X3NwZWVkKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCwgaW50IHNwZWVkKTsKLQotaW50IF9fcmdtaWlfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpOwotc3RhdGljIGlubGluZSBpbnQgcmdtaWlfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpCi17Ci0JcmV0dXJuIG9jcGRldiA/IF9fcmdtaWlfZ2V0X3JlZ3NfbGVuKG9jcGRldikgOiAwOwotfQotCi12b2lkICpyZ21paV9kdW1wX3JlZ3Moc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgdm9pZCAqYnVmKTsKLSNlbHNlCi0jIGRlZmluZSByZ21paV9hdHRhY2goeCkJMAotIyBkZWZpbmUgcmdtaWlfZmluaSh4LHkpCSgodm9pZCkwKQotIyBkZWZpbmUgcmdtaWlfc2V0X3NwZWVkKHgseSx6KQkoKHZvaWQpMCkKLSMgZGVmaW5lIHJnbWlpX2dldF9yZWdzX2xlbih4KQkwCi0jIGRlZmluZSByZ21paV9kdW1wX3JlZ3MoeCxidWYpCShidWYpCi0jZW5kaWYJCQkJLyogIUNPTkZJR19JQk1fRU1BQ19SR01JSSAqLwotCi0jZW5kaWYJCQkJLyogX0lCTV9FTUFDX1JHTUlJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguYyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3RhaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzJkNWJhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3RhaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguYwotICoKLSAqIERyaXZlciBmb3IgUG93ZXJQQyA0eHggb24tY2hpcCBldGhlcm5ldCBjb250cm9sbGVyLCBUQUggc3VwcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBFdWdlbmUgU3Vyb3ZlZ2luIDxlYnNAZWJzaG9tZS5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAiaWJtX2VtYWNfY29yZS5oIgotCi1zdGF0aWMgaW50IF9faW5pdCB0YWhfaW5pdChzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2KQotewotCXN0cnVjdCB0YWhfcmVncyAqcDsKLQotCWlmIChvY3BfZ2V0X2RydmRhdGEob2NwZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgInRhaCVkOiBhbHJlYWR5IGluIHVzZSFcbiIsIG9jcGRldi0+ZGVmLT5pbmRleCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyogSW5pdGlhbGl6ZSBUQUggYW5kIGVuYWJsZSBJUHY0IGNoZWNrc3VtIHZlcmlmaWNhdGlvbiwgbm8gVFNPIHlldCAqLwotCXAgPSAoc3RydWN0IHRhaF9yZWdzICopaW9yZW1hcChvY3BkZXYtPmRlZi0+cGFkZHIsIHNpemVvZigqcCkpOwotCWlmICghcCkgewotCQlwcmludGsoS0VSTl9FUlIgInRhaCVkOiBjb3VsZCBub3QgaW9yZW1hcCBkZXZpY2UgcmVnaXN0ZXJzIVxuIiwKLQkJICAgICAgIG9jcGRldi0+ZGVmLT5pbmRleCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlvY3Bfc2V0X2RydmRhdGEob2NwZGV2LCBwKTsKLQlfX3RhaF9yZXNldChvY3BkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2luaXQgdGFoX2F0dGFjaCh2b2lkICplbWFjKQotewotCXN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYgPSBlbWFjOwotCXN0cnVjdCBvY3BfZnVuY19lbWFjX2RhdGEgKmVtYWNkYXRhID0gZGV2LT5kZWYtPmFkZGl0aW9uczsKLQotCS8qIENoZWNrIGlmIHdlIG5lZWQgdG8gYXR0YWNoIHRvIGEgVEFIICovCi0JaWYgKGVtYWNkYXRhLT50YWhfaWR4ID49IDApIHsKLQkJZGV2LT50YWhfZGV2ID0gb2NwX2ZpbmRfZGV2aWNlKE9DUF9BTllfSUQsIE9DUF9GVU5DX1RBSCwKLQkJCQkJICAgICAgIGVtYWNkYXRhLT50YWhfaWR4KTsKLQkJaWYgKCFkZXYtPnRhaF9kZXYpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZW1hYyVkOiB1bmtub3duIHRhaCVkIVxuIiwKLQkJCSAgICAgICBkZXYtPmRlZi0+aW5kZXgsIGVtYWNkYXRhLT50YWhfaWR4KTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmICh0YWhfaW5pdChkZXYtPnRhaF9kZXYpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiZW1hYyVkOiB0YWglZCBpbml0aWFsaXphdGlvbiBmYWlsZWQhXG4iLAotCQkJICAgICAgIGRldi0+ZGVmLT5pbmRleCwgZW1hY2RhdGEtPnRhaF9pZHgpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX190YWhfZmluaShzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2KQotewotCXN0cnVjdCB0YWhfcmVncyAqcCA9IG9jcF9nZXRfZHJ2ZGF0YShvY3BkZXYpOwotCUJVR19PTighcCk7Ci0Jb2NwX3NldF9kcnZkYXRhKG9jcGRldiwgTlVMTCk7Ci0JaW91bm1hcCgodm9pZCAqKXApOwotfQotCi12b2lkIF9fdGFoX3Jlc2V0KHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpCi17Ci0Jc3RydWN0IHRhaF9yZWdzICpwID0gb2NwX2dldF9kcnZkYXRhKG9jcGRldik7Ci0JaW50IG47Ci0KLQkvKiBSZXNldCBUQUggKi8KLQlvdXRfYmUzMigmcC0+bXIsIFRBSF9NUl9TUik7Ci0JbiA9IDEwMDsKLQl3aGlsZSAoKGluX2JlMzIoJnAtPm1yKSAmIFRBSF9NUl9TUikgJiYgbikKLQkJLS1uOwotCi0JaWYgKHVubGlrZWx5KCFuKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJ0YWglZDogcmVzZXQgdGltZW91dFxuIiwgb2NwZGV2LT5kZWYtPmluZGV4KTsKLQotCS8qIDEwS0IgVEFIIFRYIEZJRk8gYWNjb21vZGF0ZXMgdGhlIG1heCBNVFUgb2YgOTAwMCAqLwotCW91dF9iZTMyKCZwLT5tciwKLQkJIFRBSF9NUl9DVlIgfCBUQUhfTVJfU1RfNzY4IHwgVEFIX01SX1RGU18xMEtCIHwgVEFIX01SX0RURlAgfAotCQkgVEFIX01SX0RJRyk7Ci19Ci0KLWludCBfX3RhaF9nZXRfcmVnc19sZW4oc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldikKLXsKLQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBlbWFjX2V0aHRvb2xfcmVnc19zdWJoZHIpICsKLQkgICAgc2l6ZW9mKHN0cnVjdCB0YWhfcmVncyk7Ci19Ci0KLXZvaWQgKnRhaF9kdW1wX3JlZ3Moc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgdm9pZCAqYnVmKQotewotCXN0cnVjdCB0YWhfcmVncyAqZGV2ID0gb2NwX2dldF9kcnZkYXRhKG9jcGRldik7Ci0Jc3RydWN0IGVtYWNfZXRodG9vbF9yZWdzX3N1YmhkciAqaGRyID0gYnVmOwotCXN0cnVjdCB0YWhfcmVncyAqcmVncyA9IChzdHJ1Y3QgdGFoX3JlZ3MgKikoaGRyICsgMSk7Ci0KLQloZHItPnZlcnNpb24gPSAwOwotCWhkci0+aW5kZXggPSBvY3BkZXYtPmRlZi0+aW5kZXg7Ci0JbWVtY3B5X2Zyb21pbyhyZWdzLCBkZXYsIHNpemVvZihzdHJ1Y3QgdGFoX3JlZ3MpKTsKLQlyZXR1cm4gcmVncyArIDE7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguaCBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3RhaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2Y2NDkxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3RhaC5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3RhaC5oCi0gKgotICogRHJpdmVyIGZvciBQb3dlclBDIDR4eCBvbi1jaGlwIGV0aGVybmV0IGNvbnRyb2xsZXIsIFRBSCBzdXBwb3J0LgotICoKLSAqIENvcHlyaWdodCAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1IEV1Z2VuZSBTdXJvdmVnaW4gPGVic0BlYnNob21lLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgX0lCTV9FTUFDX1RBSF9ICi0jZGVmaW5lIF9JQk1fRU1BQ19UQUhfSAotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9vY3AuaD4KLQotLyogVEFIICovCi1zdHJ1Y3QgdGFoX3JlZ3MgewotCXUzMiByZXZpZDsKLQl1MzIgcGFkWzNdOwotCXUzMiBtcjsKLQl1MzIgc3NyMDsKLQl1MzIgc3NyMTsKLQl1MzIgc3NyMjsKLQl1MzIgc3NyMzsKLQl1MzIgc3NyNDsKLQl1MzIgc3NyNTsKLQl1MzIgdHNyOwotfTsKLQotLyogVEFIIGVuZ2luZSAqLwotI2RlZmluZSBUQUhfTVJfQ1ZSCQkweDgwMDAwMDAwCi0jZGVmaW5lIFRBSF9NUl9TUgkJMHg0MDAwMDAwMAotI2RlZmluZSBUQUhfTVJfU1RfMjU2CQkweDAxMDAwMDAwCi0jZGVmaW5lIFRBSF9NUl9TVF81MTIJCTB4MDIwMDAwMDAKLSNkZWZpbmUgVEFIX01SX1NUXzc2OAkJMHgwMzAwMDAwMAotI2RlZmluZSBUQUhfTVJfU1RfMTAyNAkJMHgwNDAwMDAwMAotI2RlZmluZSBUQUhfTVJfU1RfMTI4MAkJMHgwNTAwMDAwMAotI2RlZmluZSBUQUhfTVJfU1RfMTUzNgkJMHgwNjAwMDAwMAotI2RlZmluZSBUQUhfTVJfVEZTXzE2S0IJCTB4MDAwMDAwMDAKLSNkZWZpbmUgVEFIX01SX1RGU18yS0IJCTB4MDAyMDAwMDAKLSNkZWZpbmUgVEFIX01SX1RGU180S0IJCTB4MDA0MDAwMDAKLSNkZWZpbmUgVEFIX01SX1RGU182S0IJCTB4MDA2MDAwMDAKLSNkZWZpbmUgVEFIX01SX1RGU184S0IJCTB4MDA4MDAwMDAKLSNkZWZpbmUgVEFIX01SX1RGU18xMEtCCQkweDAwYTAwMDAwCi0jZGVmaW5lIFRBSF9NUl9EVEZQCQkweDAwMTAwMDAwCi0jZGVmaW5lIFRBSF9NUl9ESUcJCTB4MDAwODAwMDAKLQotI2lmZGVmIENPTkZJR19JQk1fRU1BQ19UQUgKLWludCB0YWhfYXR0YWNoKHZvaWQgKmVtYWMpIF9faW5pdDsKLQotdm9pZCBfX3RhaF9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpOwotc3RhdGljIGlubGluZSB2b2lkIHRhaF9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpCi17Ci0JaWYgKG9jcGRldikKLQkJX190YWhfZmluaShvY3BkZXYpOwotfQotCi12b2lkIF9fdGFoX3Jlc2V0KHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpOwotc3RhdGljIGlubGluZSB2b2lkIHRhaF9yZXNldChzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2KQotewotCWlmIChvY3BkZXYpCi0JCV9fdGFoX3Jlc2V0KG9jcGRldik7Ci19Ci0KLWludCBfX3RhaF9nZXRfcmVnc19sZW4oc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldik7Ci1zdGF0aWMgaW5saW5lIGludCB0YWhfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpCi17Ci0JcmV0dXJuIG9jcGRldiA/IF9fdGFoX2dldF9yZWdzX2xlbihvY3BkZXYpIDogMDsKLX0KLQotdm9pZCAqdGFoX2R1bXBfcmVncyhzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2LCB2b2lkICpidWYpOwotI2Vsc2UKLSMgZGVmaW5lIHRhaF9hdHRhY2goeCkJCTAKLSMgZGVmaW5lIHRhaF9maW5pKHgpCQkoKHZvaWQpMCkKLSMgZGVmaW5lIHRhaF9yZXNldCh4KQkJKCh2b2lkKTApCi0jIGRlZmluZSB0YWhfZ2V0X3JlZ3NfbGVuKHgpCTAKLSMgZGVmaW5lIHRhaF9kdW1wX3JlZ3MoeCxidWYpCShidWYpCi0jZW5kaWYJCQkJLyogIUNPTkZJR19JQk1fRU1BQ19UQUggKi8KLQotI2VuZGlmCQkJCS8qIF9JQk1fRU1BQ19UQUhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5jIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzBmZGIwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3ptaWkuYworKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5jCi0gKgotICogRHJpdmVyIGZvciBQb3dlclBDIDR4eCBvbi1jaGlwIGV0aGVybmV0IGNvbnRyb2xsZXIsIFpNSUkgYnJpZGdlIHN1cHBvcnQuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IFp1bHR5cyBUZWNobm9sb2dpZXMuCi0gKiBFdWdlbmUgU3Vyb3ZlZ2luIDxldWdlbmUuc3Vyb3ZlZ2luQHp1bHR5cy5jb20+IG9yIDxlYnNAZWJzaG9tZS5uZXQ+Ci0gKgotICogQmFzZWQgb24gb3JpZ2luYWwgd29yayBieQotICogICAgICBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLSAqIAlDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnRhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAiaWJtX2VtYWNfY29yZS5oIgotI2luY2x1ZGUgImlibV9lbWFjX2RlYnVnLmgiCi0KLS8qIFpNSUl4X0ZFUiAqLwotI2RlZmluZSBaTUlJX0ZFUl9NREkoaWR4KQkoMHg4MDAwMDAwMCA+PiAoKGlkeCkgKiA0KSkKLSNkZWZpbmUgWk1JSV9GRVJfTURJX0FMTAkoWk1JSV9GRVJfTURJKDApIHwgWk1JSV9GRVJfTURJKDEpIHwgXAotCQkJCSBaTUlJX0ZFUl9NREkoMikgfCBaTUlJX0ZFUl9NREkoMykpCi0KLSNkZWZpbmUgWk1JSV9GRVJfU01JSShpZHgpCSgweDQwMDAwMDAwID4+ICgoaWR4KSAqIDQpKQotI2RlZmluZSBaTUlJX0ZFUl9STUlJKGlkeCkJKDB4MjAwMDAwMDAgPj4gKChpZHgpICogNCkpCi0jZGVmaW5lIFpNSUlfRkVSX01JSShpZHgpCSgweDEwMDAwMDAwID4+ICgoaWR4KSAqIDQpKQotCi0vKiBaTUlJeF9TU1IgKi8KLSNkZWZpbmUgWk1JSV9TU1JfU0NJKGlkeCkJKDB4NDAwMDAwMDAgPj4gKChpZHgpICogNCkpCi0jZGVmaW5lIFpNSUlfU1NSX0ZTUyhpZHgpCSgweDIwMDAwMDAwID4+ICgoaWR4KSAqIDQpKQotI2RlZmluZSBaTUlJX1NTUl9TUChpZHgpCSgweDEwMDAwMDAwID4+ICgoaWR4KSAqIDQpKQotCi0vKiBaTUlJIG9ubHkgc3VwcG9ydHMgTUlJLCBSTUlJIGFuZCBTTUlJIAotICogd2UgYWxzbyBzdXBwb3J0IGF1dG9kZXRlY3Rpb24gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKLSAqLwotc3RhdGljIGlubGluZSBpbnQgem1paV92YWxpZF9tb2RlKGludCBtb2RlKQotewotCXJldHVybiAgbW9kZSA9PSBQSFlfTU9ERV9NSUkgfHwKLQkJbW9kZSA9PSBQSFlfTU9ERV9STUlJIHx8Ci0JCW1vZGUgPT0gUEhZX01PREVfU01JSSB8fAotCQltb2RlID09IFBIWV9NT0RFX05BOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnptaWlfbW9kZV9uYW1lKGludCBtb2RlKQotewotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgUEhZX01PREVfTUlJOgotCQlyZXR1cm4gIk1JSSI7Ci0JY2FzZSBQSFlfTU9ERV9STUlJOgotCQlyZXR1cm4gIlJNSUkiOwotCWNhc2UgUEhZX01PREVfU01JSToKLQkJcmV0dXJuICJTTUlJIjsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHptaWlfbW9kZV9tYXNrKGludCBtb2RlLCBpbnQgaW5wdXQpCi17Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBQSFlfTU9ERV9NSUk6Ci0JCXJldHVybiBaTUlJX0ZFUl9NSUkoaW5wdXQpOwotCWNhc2UgUEhZX01PREVfUk1JSToKLQkJcmV0dXJuIFpNSUlfRkVSX1JNSUkoaW5wdXQpOwotCWNhc2UgUEhZX01PREVfU01JSToKLQkJcmV0dXJuIFpNSUlfRkVSX1NNSUkoaW5wdXQpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgem1paV9pbml0KHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCwgaW50ICptb2RlKQotewotCXN0cnVjdCBpYm1fb2NwX3ptaWkgKmRldiA9IG9jcF9nZXRfZHJ2ZGF0YShvY3BkZXYpOwotCXN0cnVjdCB6bWlpX3JlZ3MgX19pb21lbSAqcDsKLQotCVpNSUlfREJHKCIlZDogaW5pdCglZCwgJWQpIiBOTCwgb2NwZGV2LT5kZWYtPmluZGV4LCBpbnB1dCwgKm1vZGUpOwotCi0JaWYgKCFkZXYpIHsKLQkJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlibV9vY3Bfem1paSksIEdGUF9LRVJORUwpOwotCQlpZiAoIWRldikgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgInptaWklZDogY291bGRuJ3QgYWxsb2NhdGUgZGV2aWNlIHN0cnVjdHVyZSFcbiIsCi0JCQkgICAgICAgb2NwZGV2LT5kZWYtPmluZGV4KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWRldi0+bW9kZSA9IFBIWV9NT0RFX05BOwotCi0JCXAgPSBpb3JlbWFwKG9jcGRldi0+ZGVmLT5wYWRkciwgc2l6ZW9mKHN0cnVjdCB6bWlpX3JlZ3MpKTsKLQkJaWYgKCFwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiem1paSVkOiBjb3VsZCBub3QgaW9yZW1hcCBkZXZpY2UgcmVnaXN0ZXJzIVxuIiwKLQkJCSAgICAgICBvY3BkZXYtPmRlZi0+aW5kZXgpOwotCQkJa2ZyZWUoZGV2KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWRldi0+YmFzZSA9IHA7Ci0JCW9jcF9zZXRfZHJ2ZGF0YShvY3BkZXYsIGRldik7Ci0JCQotCQkvKiBXZSBtYXkgbmVlZCBGRVIgdmFsdWUgZm9yIGF1dG9kZXRlY3Rpb24gbGF0ZXIgKi8KLQkJZGV2LT5mZXJfc2F2ZSA9IGluX2JlMzIoJnAtPmZlcik7Ci0KLQkJLyogRGlzYWJsZSBhbGwgaW5wdXRzIGJ5IGRlZmF1bHQgKi8KLQkJb3V0X2JlMzIoJnAtPmZlciwgMCk7Ci0JfSBlbHNlCi0JCXAgPSBkZXYtPmJhc2U7Ci0KLQlpZiAoIXptaWlfdmFsaWRfbW9kZSgqbW9kZSkpIHsKLQkJLyogUHJvYmFibHkgYW4gRU1BQyBjb25uZWN0ZWQgdG8gUkdNSUksIAotCQkgKiBidXQgaXQgc3RpbGwgbWF5IG5lZWQgWk1JSSBmb3IgTURJTyAKLQkJICovCi0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEF1dG9kZXRlY3QgWk1JSSBtb2RlIGlmIG5vdCBzcGVjaWZpZWQuCi0JICogVGhpcyBpcyBvbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZCBkcml2ZXIuCi0JICogUGxlYXNlLCBhbHdheXMgc3BlY2lmeSBQSFkgbW9kZSBpbiB5b3VyIGJvYXJkIHBvcnQgdG8gYXZvaWQKLQkgKiBhbnkgc3VycHJpc2VzLgotCSAqLwotCWlmIChkZXYtPm1vZGUgPT0gUEhZX01PREVfTkEpIHsKLQkJaWYgKCptb2RlID09IFBIWV9NT0RFX05BKSB7Ci0JCQl1MzIgciA9IGRldi0+ZmVyX3NhdmU7Ci0KLQkJCVpNSUlfREJHKCIlZDogYXV0b2RldGVjdGluZyBtb2RlLCBGRVIgPSAweCUwOHgiIE5MLAotCQkJCSBvY3BkZXYtPmRlZi0+aW5kZXgsIHIpOwotCQkJCi0JCQlpZiAociAmIChaTUlJX0ZFUl9NSUkoMCkgfCBaTUlJX0ZFUl9NSUkoMSkpKQotCQkJCWRldi0+bW9kZSA9IFBIWV9NT0RFX01JSTsKLQkJCWVsc2UgaWYgKHIgJiAoWk1JSV9GRVJfUk1JSSgwKSB8IFpNSUlfRkVSX1JNSUkoMSkpKQotCQkJCWRldi0+bW9kZSA9IFBIWV9NT0RFX1JNSUk7Ci0JCQllbHNlCi0JCQkJZGV2LT5tb2RlID0gUEhZX01PREVfU01JSTsKLQkJfSBlbHNlCi0JCQlkZXYtPm1vZGUgPSAqbW9kZTsKLQotCQlwcmludGsoS0VSTl9OT1RJQ0UgInptaWklZDogYnJpZGdlIGluICVzIG1vZGVcbiIsCi0JCSAgICAgICBvY3BkZXYtPmRlZi0+aW5kZXgsIHptaWlfbW9kZV9uYW1lKGRldi0+bW9kZSkpOwotCX0gZWxzZSB7Ci0JCS8qIEFsbCBpbnB1dHMgbXVzdCB1c2UgdGhlIHNhbWUgbW9kZSAqLwotCQlpZiAoKm1vZGUgIT0gUEhZX01PREVfTkEgJiYgKm1vZGUgIT0gZGV2LT5tb2RlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiem1paSVkOiBpbnZhbGlkIG1vZGUgJWQgc3BlY2lmaWVkIGZvciBpbnB1dCAlZFxuIiwKLQkJCSAgICAgICBvY3BkZXYtPmRlZi0+aW5kZXgsICptb2RlLCBpbnB1dCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCS8qIFJlcG9ydCBiYWNrIGNvcnJlY3QgUEhZIG1vZGUsIAotCSAqIGl0IG1heSBiZSB1c2VkIGR1cmluZyBQSFkgaW5pdGlhbGl6YXRpb24uCi0JICovCi0JKm1vZGUgPSBkZXYtPm1vZGU7Ci0KLQkvKiBFbmFibGUgdGhpcyBpbnB1dCAqLwotCW91dF9iZTMyKCZwLT5mZXIsIGluX2JlMzIoJnAtPmZlcikgfCB6bWlpX21vZGVfbWFzayhkZXYtPm1vZGUsIGlucHV0KSk7Ci0gICAgICBvdXQ6Ci0JKytkZXYtPnVzZXJzOwotCXJldHVybiAwOwotfQotCi1pbnQgX19pbml0IHptaWlfYXR0YWNoKHZvaWQgKmVtYWMpCi17Ci0Jc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldiA9IGVtYWM7Ci0Jc3RydWN0IG9jcF9mdW5jX2VtYWNfZGF0YSAqZW1hY2RhdGEgPSBkZXYtPmRlZi0+YWRkaXRpb25zOwotCi0JaWYgKGVtYWNkYXRhLT56bWlpX2lkeCA+PSAwKSB7Ci0JCWRldi0+em1paV9pbnB1dCA9IGVtYWNkYXRhLT56bWlpX211eDsKLQkJZGV2LT56bWlpX2RldiA9Ci0JCSAgICBvY3BfZmluZF9kZXZpY2UoT0NQX1ZFTkRPUl9JQk0sIE9DUF9GVU5DX1pNSUksCi0JCQkJICAgIGVtYWNkYXRhLT56bWlpX2lkeCk7Ci0JCWlmICghZGV2LT56bWlpX2RldikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJlbWFjJWQ6IHVua25vd24gem1paSVkIVxuIiwKLQkJCSAgICAgICBkZXYtPmRlZi0+aW5kZXgsIGVtYWNkYXRhLT56bWlpX2lkeCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCQlpZiAoem1paV9pbml0Ci0JCSAgICAoZGV2LT56bWlpX2RldiwgZGV2LT56bWlpX2lucHV0LCAmZW1hY2RhdGEtPnBoeV9tb2RlKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImVtYWMlZDogem1paSVkIGluaXRpYWxpemF0aW9uIGZhaWxlZCFcbiIsCi0JCQkgICAgICAgZGV2LT5kZWYtPmluZGV4LCBlbWFjZGF0YS0+em1paV9pZHgpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX196bWlpX2VuYWJsZV9tZGlvKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCkKLXsKLQlzdHJ1Y3QgaWJtX29jcF96bWlpICpkZXYgPSBvY3BfZ2V0X2RydmRhdGEob2NwZGV2KTsKLQl1MzIgZmVyID0gaW5fYmUzMigmZGV2LT5iYXNlLT5mZXIpICYgflpNSUlfRkVSX01ESV9BTEw7Ci0KLQlaTUlJX0RCRzIoIiVkOiBtZGlvKCVkKSIgTkwsIG9jcGRldi0+ZGVmLT5pbmRleCwgaW5wdXQpOwotCi0Jb3V0X2JlMzIoJmRldi0+YmFzZS0+ZmVyLCBmZXIgfCBaTUlJX0ZFUl9NREkoaW5wdXQpKTsKLX0KLQotdm9pZCBfX3ptaWlfc2V0X3NwZWVkKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCwgaW50IHNwZWVkKQotewotCXN0cnVjdCBpYm1fb2NwX3ptaWkgKmRldiA9IG9jcF9nZXRfZHJ2ZGF0YShvY3BkZXYpOwotCXUzMiBzc3IgPSBpbl9iZTMyKCZkZXYtPmJhc2UtPnNzcik7Ci0KLQlaTUlJX0RCRygiJWQ6IHNwZWVkKCVkLCAlZCkiIE5MLCBvY3BkZXYtPmRlZi0+aW5kZXgsIGlucHV0LCBzcGVlZCk7Ci0KLQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwKQotCQlzc3IgfD0gWk1JSV9TU1JfU1AoaW5wdXQpOwotCWVsc2UKLQkJc3NyICY9IH5aTUlJX1NTUl9TUChpbnB1dCk7Ci0KLQlvdXRfYmUzMigmZGV2LT5iYXNlLT5zc3IsIHNzcik7Ci19Ci0KLXZvaWQgX196bWlpX2Zpbmkoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgaW50IGlucHV0KQotewotCXN0cnVjdCBpYm1fb2NwX3ptaWkgKmRldiA9IG9jcF9nZXRfZHJ2ZGF0YShvY3BkZXYpOwotCUJVR19PTighZGV2IHx8IGRldi0+dXNlcnMgPT0gMCk7Ci0KLQlaTUlJX0RCRygiJWQ6IGZpbmkoJWQpIiBOTCwgb2NwZGV2LT5kZWYtPmluZGV4LCBpbnB1dCk7Ci0KLQkvKiBEaXNhYmxlIHRoaXMgaW5wdXQgKi8KLQlvdXRfYmUzMigmZGV2LT5iYXNlLT5mZXIsCi0JCSBpbl9iZTMyKCZkZXYtPmJhc2UtPmZlcikgJiB+em1paV9tb2RlX21hc2soZGV2LT5tb2RlLCBpbnB1dCkpOwotCi0JaWYgKCEtLWRldi0+dXNlcnMpIHsKLQkJLyogRnJlZSBldmVyeXRoaW5nIGlmIHRoaXMgaXMgdGhlIGxhc3QgdXNlciAqLwotCQlvY3Bfc2V0X2RydmRhdGEob2NwZGV2LCBOVUxMKTsKLQkJaW91bm1hcChkZXYtPmJhc2UpOwotCQlrZnJlZShkZXYpOwotCX0KLX0KLQotaW50IF9fem1paV9nZXRfcmVnc19sZW4oc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldikKLXsKLQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBlbWFjX2V0aHRvb2xfcmVnc19zdWJoZHIpICsKLQkgICAgc2l6ZW9mKHN0cnVjdCB6bWlpX3JlZ3MpOwotfQotCi12b2lkICp6bWlpX2R1bXBfcmVncyhzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2LCB2b2lkICpidWYpCi17Ci0Jc3RydWN0IGlibV9vY3Bfem1paSAqZGV2ID0gb2NwX2dldF9kcnZkYXRhKG9jcGRldik7Ci0Jc3RydWN0IGVtYWNfZXRodG9vbF9yZWdzX3N1YmhkciAqaGRyID0gYnVmOwotCXN0cnVjdCB6bWlpX3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHptaWlfcmVncyAqKShoZHIgKyAxKTsKLQotCWhkci0+dmVyc2lvbiA9IDA7Ci0JaGRyLT5pbmRleCA9IG9jcGRldi0+ZGVmLT5pbmRleDsKLQltZW1jcHlfZnJvbWlvKHJlZ3MsIGRldi0+YmFzZSwgc2l6ZW9mKHN0cnVjdCB6bWlpX3JlZ3MpKTsKLQlyZXR1cm4gcmVncyArIDE7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmggYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZDZkOGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3ptaWkuaAotICoKLSAqIERyaXZlciBmb3IgUG93ZXJQQyA0eHggb24tY2hpcCBldGhlcm5ldCBjb250cm9sbGVyLCBaTUlJIGJyaWRnZSBzdXBwb3J0LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBadWx0eXMgVGVjaG5vbG9naWVzLgotICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgotICoKLSAqIEJhc2VkIG9uIG9yaWdpbmFsIHdvcmsgYnkKLSAqICAgICAgQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0gKiAJQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0YXJlIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2lmbmRlZiBfSUJNX0VNQUNfWk1JSV9IXwotI2RlZmluZSBfSUJNX0VNQUNfWk1JSV9IXwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9vY3AuaD4KLQotLyogWk1JSSBicmlkZ2UgcmVnaXN0ZXJzICovCi1zdHJ1Y3Qgem1paV9yZWdzIHsKLQl1MzIgZmVyOwkJLyogRnVuY3Rpb24gZW5hYmxlIHJlZyAqLwotCXUzMiBzc3I7CQkvKiBTcGVlZCBzZWxlY3QgcmVnICovCi0JdTMyIHNtaWlyczsJCS8qIFNNSUkgc3RhdHVzIHJlZyAqLwotfTsKLQotLyogWk1JSSBkZXZpY2UgKi8KLXN0cnVjdCBpYm1fb2NwX3ptaWkgewotCXN0cnVjdCB6bWlpX3JlZ3MgX19pb21lbSAqYmFzZTsKLQlpbnQgbW9kZTsJCS8qIHN1YnNldCBvZiBQSFlfTU9ERV9YWFhYICovCi0JaW50IHVzZXJzOwkJLyogbnVtYmVyIG9mIEVNQUNzIHVzaW5nIHRoaXMgWk1JSSBicmlkZ2UgKi8KLQl1MzIgZmVyX3NhdmU7CQkvKiBGRVIgdmFsdWUgbGVmdCBieSBmaXJtd2FyZSAqLwotfTsKLQotI2lmZGVmIENPTkZJR19JQk1fRU1BQ19aTUlJCi1pbnQgem1paV9hdHRhY2godm9pZCAqZW1hYykgX19pbml0OwotCi12b2lkIF9fem1paV9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgem1paV9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCkKLXsKLQlpZiAob2NwZGV2KQotCQlfX3ptaWlfZmluaShvY3BkZXYsIGlucHV0KTsKLX0KLQotdm9pZCBfX3ptaWlfZW5hYmxlX21kaW8oc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgaW50IGlucHV0KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCB6bWlpX2VuYWJsZV9tZGlvKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCkKLXsKLQlpZiAob2NwZGV2KQotCQlfX3ptaWlfZW5hYmxlX21kaW8ob2NwZGV2LCBpbnB1dCk7Ci19Ci0KLXZvaWQgX196bWlpX3NldF9zcGVlZChzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2LCBpbnQgaW5wdXQsIGludCBzcGVlZCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgem1paV9zZXRfc3BlZWQoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgaW50IGlucHV0LAotCQkJCSAgaW50IHNwZWVkKQotewotCWlmIChvY3BkZXYpCi0JCV9fem1paV9zZXRfc3BlZWQob2NwZGV2LCBpbnB1dCwgc3BlZWQpOwotfQotCi1pbnQgX196bWlpX2dldF9yZWdzX2xlbihzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2KTsKLXN0YXRpYyBpbmxpbmUgaW50IHptaWlfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpCi17Ci0JcmV0dXJuIG9jcGRldiA/IF9fem1paV9nZXRfcmVnc19sZW4ob2NwZGV2KSA6IDA7Ci19Ci0KLXZvaWQgKnptaWlfZHVtcF9yZWdzKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIHZvaWQgKmJ1Zik7Ci0KLSNlbHNlCi0jIGRlZmluZSB6bWlpX2F0dGFjaCh4KQkJMAotIyBkZWZpbmUgem1paV9maW5pKHgseSkJCSgodm9pZCkwKQotIyBkZWZpbmUgem1paV9lbmFibGVfbWRpbyh4LHkpCSgodm9pZCkwKQotIyBkZWZpbmUgem1paV9zZXRfc3BlZWQoeCx5LHopCSgodm9pZCkwKQotIyBkZWZpbmUgem1paV9nZXRfcmVnc19sZW4oeCkJMAotIyBkZWZpbmUgem1paV9kdW1wX3JlZ3MoeCxidWYpCShidWYpCi0jZW5kaWYJCQkJLyogIUNPTkZJR19JQk1fRU1BQ19aTUlJICovCi0KLSNlbmRpZgkJCQkvKiBfSUJNX0VNQUNfWk1JSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IDYxYWYwMmIuLjJlNzIwZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTI5NSw3ICsyOTUsOSBAQAogc3RhdGljIGlubGluZSB2b2lkIGVtYWNfbmV0aWZfc3RvcChzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KQogewogCW5ldGlmX3R4X2xvY2tfYmgoZGV2LT5uZGV2KTsKKwluZXRpZl9hZGRyX2xvY2soZGV2LT5uZGV2KTsKIAlkZXYtPm5vX21jYXN0ID0gMTsKKwluZXRpZl9hZGRyX3VubG9jayhkZXYtPm5kZXYpOwogCW5ldGlmX3R4X3VubG9ja19iaChkZXYtPm5kZXYpOwogCWRldi0+bmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KIAltYWxfcG9sbF9kaXNhYmxlKGRldi0+bWFsLCAmZGV2LT5jb21tYWMpOwpAQCAtMzA1LDkgKzMwNywxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIGVtYWNfbmV0aWZfc3RhcnQoc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldikKIHsKIAluZXRpZl90eF9sb2NrX2JoKGRldi0+bmRldik7CisJbmV0aWZfYWRkcl9sb2NrKGRldi0+bmRldik7CiAJZGV2LT5ub19tY2FzdCA9IDA7CiAJaWYgKGRldi0+bWNhc3RfcGVuZGluZyAmJiBuZXRpZl9ydW5uaW5nKGRldi0+bmRldikpCiAJCV9fZW1hY19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKKwluZXRpZl9hZGRyX3VubG9jayhkZXYtPm5kZXYpOwogCW5ldGlmX3R4X3VubG9ja19iaChkZXYtPm5kZXYpOwogCiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYtPm5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWZiLmMgYi9kcml2ZXJzL25ldC9pZmIuYwppbmRleCBhZjIzM2I1Li4wOTYwZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZmIuYworKysgYi9kcml2ZXJzL25ldC9pZmIuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogCiAjZGVmaW5lIFRYX1RJTUVPVVQgICgyKkhaKQogCkBAIC0yMjgsMTYgKzIyNyw2IEBACiBtb2R1bGVfcGFyYW0obnVtaWZicywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobnVtaWZicywgIk51bWJlciBvZiBpZmIgZGV2aWNlcyIpOwogCi0vKgotICogZGV2X2lmYi0+cXVldWVfbG9jayBpcyB1c3VhbGx5IHRha2VuIGFmdGVyIGRldi0+aW5ncmVzc19sb2NrLAotICogcmV2ZXJzZWx5IHRvIGUuZy4gcWRpc2NfbG9ja190cmVlKCkuIEl0IHNob3VsZCBiZSBzYWZlIHVudGlsCi0gKiBpZmIgZG9lc24ndCB0YWtlIGRldi0+cXVldWVfbG9jayB3aXRoIGRldl9pZmItPmluZ3Jlc3NfbG9jay4KLSAqIEJ1dCBsb2NrZGVwIHNob3VsZCBrbm93IHRoYXQgaWZiIGhhcyBkaWZmZXJlbnQgbG9ja3MgZnJvbSBkZXYuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaWZiX3F1ZXVlX2xvY2tfa2V5Owotc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpZmJfaW5ncmVzc19sb2NrX2tleTsKLQotCiBzdGF0aWMgaW50IF9faW5pdCBpZmJfaW5pdF9vbmUoaW50IGluZGV4KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXZfaWZiOwpAQCAtMjU4LDkgKzI0Nyw2IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyOwogCi0JbG9ja2RlcF9zZXRfY2xhc3MoJmRldl9pZmItPnF1ZXVlX2xvY2ssICZpZmJfcXVldWVfbG9ja19rZXkpOwotCWxvY2tkZXBfc2V0X2NsYXNzKCZkZXZfaWZiLT5pbmdyZXNzX2xvY2ssICZpZmJfaW5ncmVzc19sb2NrX2tleSk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwppbmRleCBjZGEzZWM4Li5lMDk4ZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KIAogI2luY2x1ZGUgImUxMDAwX21hYy5oIgogI2luY2x1ZGUgImUxMDAwXzgyNTc1LmgiCkBAIC00NSw3ICs0Niw2IEBACiBzdGF0aWMgczMyICBpZ2JfaW5pdF9od184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CiBzdGF0aWMgczMyICBpZ2JfcGh5X2h3X3Jlc2V0X3NnbWlpXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKIHN0YXRpYyBzMzIgIGlnYl9yZWFkX3BoeV9yZWdfc2dtaWlfODI1NzUoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2ICopOwotc3RhdGljIHZvaWQgaWdiX3Jhcl9zZXRfODI1NzUoc3RydWN0IGUxMDAwX2h3ICosIHU4ICosIHUzMik7CiBzdGF0aWMgczMyICBpZ2JfcmVzZXRfaHdfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwogc3RhdGljIHMzMiAgaWdiX3NldF9kMF9scGx1X3N0YXRlXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsKIHN0YXRpYyBzMzIgIGlnYl9zZXR1cF9jb3BwZXJfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CkBAIC04NCw2ICs4NCwxMiBAQAogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc1R0JfUVVBRF9DT1BQRVI6CiAJCW1hYy0+dHlwZSA9IGUxMDAwXzgyNTc1OwogCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3NjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVM6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CisJCW1hYy0+dHlwZSA9IGUxMDAwXzgyNTc2OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUUxMDAwX0VSUl9NQUNfSU5JVDsKIAkJYnJlYWs7CkBAIC0xMjgsNiArMTM0LDggQEAKIAltYWMtPm10YV9yZWdfY291bnQgPSAxMjg7CiAJLyogU2V0IHJhciBlbnRyeSBjb3VudCAqLwogCW1hYy0+cmFyX2VudHJ5X2NvdW50ID0gRTEwMDBfUkFSX0VOVFJJRVNfODI1NzU7CisJaWYgKG1hYy0+dHlwZSA9PSBlMTAwMF84MjU3NikKKwkJbWFjLT5yYXJfZW50cnlfY291bnQgPSBFMTAwMF9SQVJfRU5UUklFU184MjU3NjsKIAkvKiBTZXQgaWYgcGFydCBpbmNsdWRlcyBBU0YgZmlybXdhcmUgKi8KIAltYWMtPmFzZl9maXJtd2FyZV9wcmVzZW50ID0gdHJ1ZTsKIAkvKiBTZXQgaWYgbWFuYWdlYWJpbGl0eSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gKi8KQEAgLTE3MSw2ICsxNzksMTAgQEAKIAkgKiBmb3Igc2V0dGluZyB3b3JkX3NpemUuCiAJICovCiAJc2l6ZSArPSBOVk1fV09SRF9TSVpFX0JBU0VfU0hJRlQ7CisKKwkvKiBFRVBST00gYWNjZXNzIGFib3ZlIDE2ayBpcyB1bnN1cHBvcnRlZCAqLworCWlmIChzaXplID4gMTQpCisJCXNpemUgPSAxNDsKIAludm0tPndvcmRfc2l6ZSA9IDEgPDwgc2l6ZTsKIAogCS8qIHNldHVwIFBIWSBwYXJhbWV0ZXJzICovCkBAIC0yMjIsNyArMjM0LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfYWNxdWlyZV9waHlfODI1NzUgLSBBY3F1aXJlIHJpZ2h0cyB0byBhY2Nlc3MgUEhZCisgKiAgaWdiX2FjcXVpcmVfcGh5XzgyNTc1IC0gQWNxdWlyZSByaWdodHMgdG8gYWNjZXNzIFBIWQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIEFjcXVpcmUgYWNjZXNzIHJpZ2h0cyB0byB0aGUgY29ycmVjdCBQSFkuICBUaGlzIGlzIGEKQEAgLTIzOCw3ICsyNTAsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9yZWxlYXNlX3BoeV84MjU3NSAtIFJlbGVhc2UgcmlnaHRzIHRvIGFjY2VzcyBQSFkKKyAqICBpZ2JfcmVsZWFzZV9waHlfODI1NzUgLSBSZWxlYXNlIHJpZ2h0cyB0byBhY2Nlc3MgUEhZCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgQSB3cmFwcGVyIHRvIHJlbGVhc2UgYWNjZXNzIHJpZ2h0cyB0byB0aGUgY29ycmVjdCBQSFkuICBUaGlzIGlzIGEKQEAgLTI1Myw3ICsyNjUsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9yZWFkX3BoeV9yZWdfc2dtaWlfODI1NzUgLSBSZWFkIFBIWSByZWdpc3RlciB1c2luZyBzZ21paQorICogIGlnYl9yZWFkX3BoeV9yZWdfc2dtaWlfODI1NzUgLSBSZWFkIFBIWSByZWdpc3RlciB1c2luZyBzZ21paQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCkBAIC0yNjgsNyArMjgwLDcgQEAKIAl1MzIgaSwgaTJjY21kID0gMDsKIAogCWlmIChvZmZzZXQgPiBFMTAwMF9NQVhfU0dNSUlfUEhZX1JFR19BRERSKSB7Ci0JCWh3X2RiZyhodywgIlBIWSBBZGRyZXNzICV1IGlzIG91dCBvZiByYW5nZVxuIiwgb2Zmc2V0KTsKKwkJaHdfZGJnKCJQSFkgQWRkcmVzcyAldSBpcyBvdXQgb2YgcmFuZ2VcbiIsIG9mZnNldCk7CiAJCXJldHVybiAtRTEwMDBfRVJSX1BBUkFNOwogCX0KIApAQCAtMjkxLDExICszMDMsMTEgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoIShpMmNjbWQgJiBFMTAwMF9JMkNDTURfUkVBRFkpKSB7Ci0JCWh3X2RiZyhodywgIkkyQ0NNRCBSZWFkIGRpZCBub3QgY29tcGxldGVcbiIpOworCQlod19kYmcoIkkyQ0NNRCBSZWFkIGRpZCBub3QgY29tcGxldGVcbiIpOwogCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CiAJfQogCWlmIChpMmNjbWQgJiBFMTAwMF9JMkNDTURfRVJST1IpIHsKLQkJaHdfZGJnKGh3LCAiSTJDQ01EIEVycm9yIGJpdCBzZXRcbiIpOworCQlod19kYmcoIkkyQ0NNRCBFcnJvciBiaXQgc2V0XG4iKTsKIAkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogCX0KIApAQCAtMzA2LDcgKzMxOCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3dyaXRlX3BoeV9yZWdfc2dtaWlfODI1NzUgLSBXcml0ZSBQSFkgcmVnaXN0ZXIgdXNpbmcgc2dtaWkKKyAqICBpZ2Jfd3JpdGVfcGh5X3JlZ19zZ21paV84MjU3NSAtIFdyaXRlIFBIWSByZWdpc3RlciB1c2luZyBzZ21paQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CkBAIC0zMjIsNyArMzM0LDcgQEAKIAl1MTYgcGh5X2RhdGFfc3dhcHBlZDsKIAogCWlmIChvZmZzZXQgPiBFMTAwMF9NQVhfU0dNSUlfUEhZX1JFR19BRERSKSB7Ci0JCWh3X2RiZyhodywgIlBIWSBBZGRyZXNzICVkIGlzIG91dCBvZiByYW5nZVxuIiwgb2Zmc2V0KTsKKwkJaHdfZGJnKCJQSFkgQWRkcmVzcyAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsIG9mZnNldCk7CiAJCXJldHVybiAtRTEwMDBfRVJSX1BBUkFNOwogCX0KIApAQCAtMzQ5LDExICszNjEsMTEgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoIShpMmNjbWQgJiBFMTAwMF9JMkNDTURfUkVBRFkpKSB7Ci0JCWh3X2RiZyhodywgIkkyQ0NNRCBXcml0ZSBkaWQgbm90IGNvbXBsZXRlXG4iKTsKKwkJaHdfZGJnKCJJMkNDTUQgV3JpdGUgZGlkIG5vdCBjb21wbGV0ZVxuIik7CiAJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAl9CiAJaWYgKGkyY2NtZCAmIEUxMDAwX0kyQ0NNRF9FUlJPUikgewotCQlod19kYmcoaHcsICJJMkNDTUQgRXJyb3IgYml0IHNldFxuIik7CisJCWh3X2RiZygiSTJDQ01EIEVycm9yIGJpdCBzZXRcbiIpOwogCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CiAJfQogCkBAIC0zNjEsMTAgKzM3MywxMCBAQAogfQogCiAvKioKLSAqICBlMTAwMF9nZXRfcGh5X2lkXzgyNTc1IC0gUmV0cmVpdmUgUEhZIGFkZHIgYW5kIGlkCisgKiAgaWdiX2dldF9waHlfaWRfODI1NzUgLSBSZXRyaWV2ZSBQSFkgYWRkciBhbmQgaWQKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKLSAqICBSZXRyZWl2ZXMgdGhlIFBIWSBhZGRyZXNzIGFuZCBJRCBmb3IgYm90aCBQSFkncyB3aGljaCBkbyBhbmQgZG8gbm90IHVzZQorICogIFJldHJpZXZlcyB0aGUgUEhZIGFkZHJlc3MgYW5kIElEIGZvciBib3RoIFBIWSdzIHdoaWNoIGRvIGFuZCBkbyBub3QgdXNlCiAgKiAgc2dtaSBpbnRlcmZhY2UuCiAgKiovCiBzdGF0aWMgczMyIGlnYl9nZXRfcGh5X2lkXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCkBAIC0zOTMsOSArNDA1LDggQEAKIAlmb3IgKHBoeS0+YWRkciA9IDE7IHBoeS0+YWRkciA8IDg7IHBoeS0+YWRkcisrKSB7CiAJCXJldF92YWwgPSBpZ2JfcmVhZF9waHlfcmVnX3NnbWlpXzgyNTc1KGh3LCBQSFlfSUQxLCAmcGh5X2lkKTsKIAkJaWYgKHJldF92YWwgPT0gMCkgewotCQkJaHdfZGJnKGh3LCAiVmVuZG9yIElEIDB4JTA4WCByZWFkIGF0IGFkZHJlc3MgJXVcbiIsCi0JCQkJICBwaHlfaWQsCi0JCQkJICBwaHktPmFkZHIpOworCQkJaHdfZGJnKCJWZW5kb3IgSUQgMHglMDhYIHJlYWQgYXQgYWRkcmVzcyAldVxuIiwKKwkJCSAgICAgICBwaHlfaWQsIHBoeS0+YWRkcik7CiAJCQkvKgogCQkJICogQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBUaGUgTTg4IHBhcnQgaXMKIAkJCSAqIHRoZSBvbmx5IHN1cHBvcnRlZCBTR01JSSBQSFkgcHJvZHVjdC4KQEAgLTQwMyw4ICs0MTQsNyBAQAogCQkJaWYgKHBoeV9pZCA9PSBNODhfVkVORE9SKQogCQkJCWJyZWFrOwogCQl9IGVsc2UgewotCQkJaHdfZGJnKGh3LCAiUEhZIGFkZHJlc3MgJXUgd2FzIHVucmVhZGFibGVcbiIsCi0JCQkJICBwaHktPmFkZHIpOworCQkJaHdfZGJnKCJQSFkgYWRkcmVzcyAldSB3YXMgdW5yZWFkYWJsZVxuIiwgcGh5LT5hZGRyKTsKIAkJfQogCX0KIApAQCAtNDIyLDcgKzQzMiw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3BoeV9od19yZXNldF9zZ21paV84MjU3NSAtIFBlcmZvcm1zIGEgUEhZIHJlc2V0CisgKiAgaWdiX3BoeV9od19yZXNldF9zZ21paV84MjU3NSAtIFBlcmZvcm1zIGEgUEhZIHJlc2V0CiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgUmVzZXRzIHRoZSBQSFkgdXNpbmcgdGhlIHNlcmlhbCBnaWdhYml0IG1lZGlhIGluZGVwZW5kZW50IGludGVyZmFjZS4KQEAgLTQzNiw3ICs0NDYsNyBAQAogCSAqIGF2YWlsYWJsZSB0byB1cyBhdCB0aGlzIHRpbWUuCiAJICovCiAKLQlod19kYmcoaHcsICJTb2Z0IHJlc2V0dGluZyBTR01JSSBhdHRhY2hlZCBQSFkuLi5cbiIpOworCWh3X2RiZygiU29mdCByZXNldHRpbmcgU0dNSUkgYXR0YWNoZWQgUEhZLi4uXG4iKTsKIAogCS8qCiAJICogU0ZQIGRvY3VtZW50YXRpb24gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyB0byBjb25maWd1cmUgdGhlIFNQRiBtb2R1bGUKQEAgLTQ1Myw3ICs0NjMsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9zZXRfZDBfbHBsdV9zdGF0ZV84MjU3NSAtIFNldCBMb3cgUG93ZXIgTGlua3VwIEQwIHN0YXRlCisgKiAgaWdiX3NldF9kMF9scGx1X3N0YXRlXzgyNTc1IC0gU2V0IExvdyBQb3dlciBMaW5rdXAgRDAgc3RhdGUKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBhY3RpdmU6IHRydWUgdG8gZW5hYmxlIExQTFUsIGZhbHNlIHRvIGRpc2FibGUKICAqCkBAIC00NzEsMzQgKzQ4MSwyOSBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBkYXRhOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwKLQkJCQkJICAgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsICZkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlpZiAoYWN0aXZlKSB7CiAJCWRhdGEgfD0gSUdQMDJFMTAwMF9QTV9EMF9MUExVOwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJICAgICAgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwKLQkJCQkJICAgICAgZGF0YSk7CisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQkJCQkJIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCiAJCS8qIFdoZW4gTFBMVSBpcyBlbmFibGVkLCB3ZSBzaG91bGQgZGlzYWJsZSBTbWFydFNwZWVkICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCSAgICAgJmRhdGEpOworCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKKwkJCQkJCSZkYXRhKTsKIAkJZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCi0JCQkJCSAgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkgICAgICBkYXRhKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQkJCQkJIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWRhdGEgJj0gfklHUDAyRTEwMDBfUE1fRDBfTFBMVTsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCi0JCQkJCSAgICAgIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCi0JCQkJCSAgICAgIGRhdGEpOworCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwKKwkJCQkJCSBkYXRhKTsKIAkJLyoKIAkJICogTFBMVSBhbmQgU21hcnRTcGVlZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgTFBMVSBpcyB1c2VkCiAJCSAqIGR1cmluZyBEeCBzdGF0ZXMgd2hlcmUgdGhlIHBvd2VyIGNvbnNlcnZhdGlvbiBpcyBtb3N0CkBAIC01MDYsMjkgKzUxMSwyNSBAQAogCQkgKiBTbWFydFNwZWVkLCBzbyBwZXJmb3JtYW5jZSBpcyBtYWludGFpbmVkLgogCQkgKi8KIAkJaWYgKHBoeS0+c21hcnRfc3BlZWQgPT0gZTEwMDBfc21hcnRfc3BlZWRfb24pIHsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICAmZGF0YSk7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9waHlfcmVnKGh3LAorCQkJCQlJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgfD0gSUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKLQkJCQkJCSAgICAgZGF0YSk7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcGh5X3JlZyhodywKKwkJCQkJSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAocGh5LT5zbWFydF9zcGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vZmYpIHsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICAmZGF0YSk7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9waHlfcmVnKGh3LAorCQkJCQlJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgJj0gfklHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7Ci0JCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCQkgICAgIGRhdGEpOworCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQkJCUlHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLCBkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCQl9CkBAIC01MzksMTAgKzU0MCwxMCBAQAogfQogCiAvKioKLSAqICBlMTAwMF9hY3F1aXJlX252bV84MjU3NSAtIFJlcXVlc3QgZm9yIGFjY2VzcyB0byBFRVBST00KKyAqICBpZ2JfYWNxdWlyZV9udm1fODI1NzUgLSBSZXF1ZXN0IGZvciBhY2Nlc3MgdG8gRUVQUk9NCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCi0gKiAgQWNxdWlyZSB0aGUgbmVjZXNzYXJ5IHNlbWFwaG9yZXMgZm9yIGV4Y2x1c3NpdmUgYWNjZXNzIHRvIHRoZSBFRVBST00uCisgKiAgQWNxdWlyZSB0aGUgbmVjZXNzYXJ5IHNlbWFwaG9yZXMgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIEVFUFJPTS4KICAqICBTZXQgdGhlIEVFUFJPTSBhY2Nlc3MgcmVxdWVzdCBiaXQgYW5kIHdhaXQgZm9yIEVFUFJPTSBhY2Nlc3MgZ3JhbnQgYml0LgogICogIFJldHVybiBzdWNjZXNzZnVsIGlmIGFjY2VzcyBncmFudCBiaXQgc2V0LCBlbHNlIGNsZWFyIHRoZSByZXF1ZXN0IGZvcgogICogIEVFUFJPTSBhY2Nlc3MgYW5kIHJldHVybiAtRTEwMDBfRVJSX05WTSAoLTEpLgpAQCAtNTY1LDcgKzU2Niw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3JlbGVhc2VfbnZtXzgyNTc1IC0gUmVsZWFzZSBleGNsdXNpdmUgYWNjZXNzIHRvIEVFUFJPTQorICogIGlnYl9yZWxlYXNlX252bV84MjU3NSAtIFJlbGVhc2UgZXhjbHVzaXZlIGFjY2VzcyB0byBFRVBST00KICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBTdG9wIGFueSBjdXJyZW50IGNvbW1hbmRzIHRvIHRoZSBFRVBST00gYW5kIGNsZWFyIHRoZSBFRVBST00gcmVxdWVzdCBiaXQsCkBAIC01NzgsNyArNTc5LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfYWNxdWlyZV9zd2Z3X3N5bmNfODI1NzUgLSBBY3F1aXJlIFNXL0ZXIHNlbWFwaG9yZQorICogIGlnYl9hY3F1aXJlX3N3Zndfc3luY184MjU3NSAtIEFjcXVpcmUgU1cvRlcgc2VtYXBob3JlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWFzazogc3BlY2lmaWVzIHdoaWNoIHNlbWFwaG9yZSB0byBhY3F1aXJlCiAgKgpAQCAtNjEzLDcgKzYxNCw3IEBACiAJfQogCiAJaWYgKGkgPT0gdGltZW91dCkgewotCQlod19kYmcoaHcsICJDYW4ndCBhY2Nlc3MgcmVzb3VyY2UsIFNXX0ZXX1NZTkMgdGltZW91dC5cbiIpOworCQlod19kYmcoIkRyaXZlciBjYW4ndCBhY2Nlc3MgcmVzb3VyY2UsIFNXX0ZXX1NZTkMgdGltZW91dC5cbiIpOwogCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9TV0ZXX1NZTkM7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTYyOCw3ICs2MjksNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9yZWxlYXNlX3N3Zndfc3luY184MjU3NSAtIFJlbGVhc2UgU1cvRlcgc2VtYXBob3JlCisgKiAgaWdiX3JlbGVhc2Vfc3dmd19zeW5jXzgyNTc1IC0gUmVsZWFzZSBTVy9GVyBzZW1hcGhvcmUKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBtYXNrOiBzcGVjaWZpZXMgd2hpY2ggc2VtYXBob3JlIHRvIGFjcXVpcmUKICAqCkBAIC02NTAsNyArNjUxLDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfZ2V0X2NmZ19kb25lXzgyNTc1IC0gUmVhZCBjb25maWcgZG9uZSBiaXQKKyAqICBpZ2JfZ2V0X2NmZ19kb25lXzgyNTc1IC0gUmVhZCBjb25maWcgZG9uZSBiaXQKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBSZWFkIHRoZSBtYW5hZ2VtZW50IGNvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoZSBjb25maWcgZG9uZSBiaXQgZm9yCkBAIC02NzUsNyArNjc2LDcgQEAKIAkJdGltZW91dC0tOwogCX0KIAlpZiAoIXRpbWVvdXQpCi0JCWh3X2RiZyhodywgIk1ORyBjb25maWd1cmF0aW9uIGN5Y2xlIGhhcyBub3QgY29tcGxldGVkLlxuIik7CisJCWh3X2RiZygiTU5HIGNvbmZpZ3VyYXRpb24gY3ljbGUgaGFzIG5vdCBjb21wbGV0ZWQuXG4iKTsKIAogCS8qIElmIEVFUFJPTSBpcyBub3QgbWFya2VkIHByZXNlbnQsIGluaXQgdGhlIFBIWSBtYW51YWxseSAqLwogCWlmICgoKHJkMzIoRTEwMDBfRUVDRCkgJiBFMTAwMF9FRUNEX1BSRVMpID09IDApICYmCkBAIC02ODYsNyArNjg3LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfY2hlY2tfZm9yX2xpbmtfODI1NzUgLSBDaGVjayBmb3IgbGluaworICogIGlnYl9jaGVja19mb3JfbGlua184MjU3NSAtIENoZWNrIGZvciBsaW5rCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgSWYgc2dtaWkgaXMgZW5hYmxlZCwgdGhlbiB1c2UgdGhlIHBjcyByZWdpc3RlciB0byBkZXRlcm1pbmUgbGluaywgb3RoZXJ3aXNlCkBAIC03MDEsMjAgKzcwMiwxOSBAQAogCWlmICgoaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB8fAogCSAgICAoaWdiX3NnbWlpX2FjdGl2ZV84MjU3NShodykpKQogCQlyZXRfdmFsID0gaWdiX2dldF9wY3Nfc3BlZWRfYW5kX2R1cGxleF84MjU3NShodywgJnNwZWVkLAotCQkJCQkJCSAgICAgICAmZHVwbGV4KTsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1cGxleCk7CiAJZWxzZQogCQlyZXRfdmFsID0gaWdiX2NoZWNrX2Zvcl9jb3BwZXJfbGluayhodyk7CiAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KLQogLyoqCi0gKiAgZTEwMDBfZ2V0X3Bjc19zcGVlZF9hbmRfZHVwbGV4XzgyNTc1IC0gUmV0cmlldmUgY3VycmVudCBzcGVlZC9kdXBsZXgKKyAqICBpZ2JfZ2V0X3Bjc19zcGVlZF9hbmRfZHVwbGV4XzgyNTc1IC0gUmV0cmlldmUgY3VycmVudCBzcGVlZC9kdXBsZXgKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBzcGVlZDogc3RvcmVzIHRoZSBjdXJyZW50IHNwZWVkCiAgKiAgQGR1cGxleDogc3RvcmVzIHRoZSBjdXJyZW50IGR1cGxleAogICoKLSAqICBVc2luZyB0aGUgcGh5c2ljYWwgY29kaW5nIHN1Yi1sYXllciAoUENTKSwgcmV0cmVpdmUgdGhlIGN1cnJlbnQgc3BlZWQgYW5kCisgKiAgVXNpbmcgdGhlIHBoeXNpY2FsIGNvZGluZyBzdWItbGF5ZXIgKFBDUyksIHJldHJpZXZlIHRoZSBjdXJyZW50IHNwZWVkIGFuZAogICogIGR1cGxleCwgdGhlbiBzdG9yZSB0aGUgdmFsdWVzIGluIHRoZSBwb2ludGVycyBwcm92aWRlZC4KICAqKi8KIHN0YXRpYyBzMzIgaWdiX2dldF9wY3Nfc3BlZWRfYW5kX2R1cGxleF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgKnNwZWVkLApAQCAtNzY0LDI0ICs3NjQsMTM1IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3Jhcl9zZXRfODI1NzUgLSBTZXQgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyCisgKiAgaWdiX2luaXRfcnhfYWRkcnNfODI1NzUgLSBJbml0aWFsaXplIHJlY2VpdmUgYWRkcmVzcydzCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqICBAYWRkcjogcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBhZGRyZXNzCi0gKiAgQGluZGV4OiByZWNlaXZlIGFkZHJlc3MgYXJyYXkgcmVnaXN0ZXIKKyAqICBAcmFyX2NvdW50OiByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzCiAgKgotICogIFNldHMgdGhlIHJlY2VpdmUgYWRkcmVzcyBhcnJheSByZWdpc3RlciBhdCBpbmRleCB0byB0aGUgYWRkcmVzcyBwYXNzZWQKLSAqICBpbiBieSBhZGRyLgorICogIFNldHVwcyB0aGUgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycyBieSBzZXR0aW5nIHRoZSBiYXNlIHJlY2VpdmUgYWRkcmVzcworICogIHJlZ2lzdGVyIHRvIHRoZSBkZXZpY2VzIE1BQyBhZGRyZXNzIGFuZCBjbGVhcmluZyBhbGwgdGhlIG90aGVyIHJlY2VpdmUKKyAqICBhZGRyZXNzIHJlZ2lzdGVycyB0byAwLgogICoqLwotc3RhdGljIHZvaWQgaWdiX3Jhcl9zZXRfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodywgdTggKmFkZHIsIHUzMiBpbmRleCkKK3N0YXRpYyB2b2lkIGlnYl9pbml0X3J4X2FkZHJzXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiByYXJfY291bnQpCiB7Ci0JaWYgKGluZGV4IDwgRTEwMDBfUkFSX0VOVFJJRVNfODI1NzUpCi0JCWlnYl9yYXJfc2V0KGh3LCBhZGRyLCBpbmRleCk7CisJdTMyIGk7CisJdTggYWRkcls2XSA9IHswLDAsMCwwLDAsMH07CisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHRoYXQgb2YKKwkgKiBlMTAwMF9pbml0X3J4X2FkZHJzX2dlbmVyaWMuIEhvd2V2ZXIgaXQgYWxzbyB0YWtlcyBjYXJlCisJICogb2YgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0IG9mIHRoZQorCSAqIHNlY29uZCBzZXQgb2YgUkFScyBiZWdpbnMgZWxzZXdoZXJlLiBUaGlzIGlzIGltcGxpY2l0bHkgdGFrZW4gY2FyZSBieQorCSAqIGZ1bmN0aW9uIGUxMDAwX3Jhcl9zZXRfZ2VuZXJpYy4KKwkgKi8KKworCWh3X2RiZygiZTEwMDBfaW5pdF9yeF9hZGRyc184MjU3NSIpOworCisJLyogU2V0dXAgdGhlIHJlY2VpdmUgYWRkcmVzcyAqLworCWh3X2RiZygiUHJvZ3JhbW1pbmcgTUFDIEFkZHJlc3MgaW50byBSQVJbMF1cbiIpOworCWh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIGh3LT5tYWMuYWRkciwgMCk7CisKKwkvKiBaZXJvIG91dCB0aGUgb3RoZXIgKHJhcl9lbnRyeV9jb3VudCAtIDEpIHJlY2VpdmUgYWRkcmVzc2VzICovCisJaHdfZGJnKCJDbGVhcmluZyBSQVJbMS0ldV1cbiIsIHJhcl9jb3VudC0xKTsKKwlmb3IgKGkgPSAxOyBpIDwgcmFyX2NvdW50OyBpKyspCisJICAgIGh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIGFkZHIsIGkpOworfQorCisvKioKKyAqICBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3NSAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWNfYWRkcl9saXN0OiBhcnJheSBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KKyAqICBAbWNfYWRkcl9jb3VudDogbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQorICogIEByYXJfdXNlZF9jb3VudDogdGhlIGZpcnN0IFJBUiByZWdpc3RlciBmcmVlIHRvIHByb2dyYW0KKyAqICBAcmFyX2NvdW50OiB0b3RhbCBudW1iZXIgb2Ygc3VwcG9ydGVkIFJlY2VpdmUgQWRkcmVzcyBSZWdpc3RlcnMKKyAqCisgKiAgVXBkYXRlcyB0aGUgUmVjZWl2ZSBBZGRyZXNzIFJlZ2lzdGVycyBhbmQgTXVsdGljYXN0IFRhYmxlIEFycmF5LgorICogIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGEgcGFja2VkIG1jX2FkZHJfbGlzdCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICogIFRoZSBwYXJhbWV0ZXIgcmFyX2NvdW50IHdpbGwgdXN1YWxseSBiZSBody0+bWFjLnJhcl9lbnRyeV9jb3VudAorICogIHVubGVzcyB0aGVyZSBhcmUgd29ya2Fyb3VuZHMgdGhhdCBjaGFuZ2UgdGhpcy4KKyAqKi8KK3ZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCkKK3sKKwl1MzIgaGFzaF92YWx1ZTsKKwl1MzIgaTsKKwl1OCBhZGRyWzZdID0gezAsMCwwLDAsMCwwfTsKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgdGhhdCBvZiAKKwkgKiBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljLiBIb3dldmVyIGl0IGFsc28gdGFrZXMgY2FyZSAKKwkgKiBvZiB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSByZWdpc3RlciBvZmZzZXQgb2YgdGhlIAorCSAqIHNlY29uZCBzZXQgb2YgUkFScyBiZWdpbnMgZWxzZXdoZXJlLiBUaGlzIGlzIGltcGxpY2l0bHkgdGFrZW4gY2FyZSBieSAKKwkgKiBmdW5jdGlvbiBlMTAwMF9yYXJfc2V0X2dlbmVyaWMuCisJICovCisKKwkvKgorCSAqIExvYWQgdGhlIGZpcnN0IHNldCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gdGhlIGV4YWN0CisJICogZmlsdGVycyAoUkFSKS4gIElmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHRvIGZpbGwgdGhlIFJBUgorCSAqIGFycmF5LCBjbGVhciB0aGUgZmlsdGVycy4KKwkgKi8KKwlmb3IgKGkgPSByYXJfdXNlZF9jb3VudDsgaSA8IHJhcl9jb3VudDsgaSsrKSB7CisJCWlmIChtY19hZGRyX2NvdW50KSB7CisJCQlpZ2JfcmFyX3NldChodywgbWNfYWRkcl9saXN0LCBpKTsKKwkJCW1jX2FkZHJfY291bnQtLTsKKwkJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKKwkJfSBlbHNlIHsKKwkJCWlnYl9yYXJfc2V0KGh3LCBhZGRyLCBpKTsKKwkJfQorCX0KKworCS8qIENsZWFyIHRoZSBvbGQgc2V0dGluZ3MgZnJvbSB0aGUgTVRBICovCisJaHdfZGJnKCJDbGVhcmluZyBNVEFcbiIpOworCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm10YV9yZWdfY291bnQ7IGkrKykgeworCQlhcnJheV93cjMyKEUxMDAwX01UQSwgaSwgMCk7CisJCXdyZmwoKTsKKwl9CisKKwkvKiBMb2FkIGFueSByZW1haW5pbmcgbXVsdGljYXN0IGFkZHJlc3NlcyBpbnRvIHRoZSBoYXNoIHRhYmxlLiAqLworCWZvciAoOyBtY19hZGRyX2NvdW50ID4gMDsgbWNfYWRkcl9jb3VudC0tKSB7CisJCWhhc2hfdmFsdWUgPSBpZ2JfaGFzaF9tY19hZGRyKGh3LCBtY19hZGRyX2xpc3QpOworCQlod19kYmcoIkhhc2ggdmFsdWUgPSAweCUwM1hcbiIsIGhhc2hfdmFsdWUpOworCQlody0+bWFjLm9wcy5tdGFfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKKwkJbWNfYWRkcl9saXN0ICs9IEVUSF9BTEVOOworCX0KK30KKworLyoqCisgKiAgaWdiX3NodXRkb3duX2ZpYmVyX3NlcmRlc19saW5rXzgyNTc1IC0gUmVtb3ZlIGxpbmsgZHVyaW5nIHBvd2VyIGRvd24KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBJbiB0aGUgY2FzZSBvZiBmaWJlciBzZXJkZXMsIHNodXQgZG93biBvcHRpY3MgYW5kIFBDUyBvbiBkcml2ZXIgdW5sb2FkCisgKiAgd2hlbiBtYW5hZ2VtZW50IHBhc3MgdGhydSBpcyBub3QgZW5hYmxlZC4KKyAqKi8KK3ZvaWQgaWdiX3NodXRkb3duX2ZpYmVyX3NlcmRlc19saW5rXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdTMyIHJlZzsKKworCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzYgfHwKKwkgICAgKGh3LT5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyICYmCisJICAgICBody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpKQorCQlyZXR1cm47CisKKwkvKiBpZiB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgaXMgbm90IGVuYWJsZWQsIHRoZW4gcG93ZXIgZG93biAqLworCWlmICghaWdiX2VuYWJsZV9tbmdfcGFzc190aHJ1KGh3KSkgeworCQkvKiBEaXNhYmxlIFBDUyB0byB0dXJuIG9mZiBsaW5rICovCisJCXJlZyA9IHJkMzIoRTEwMDBfUENTX0NGRzApOworCQlyZWcgJj0gfkUxMDAwX1BDU19DRkdfUENTX0VOOworCQl3cjMyKEUxMDAwX1BDU19DRkcwLCByZWcpOworCisJCS8qIHNodXRkb3duIHRoZSBsYXNlciAqLworCQlyZWcgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKKwkJcmVnIHw9IEUxMDAwX0NUUkxfRVhUX1NEUDdfREFUQTsKKwkJd3IzMihFMTAwMF9DVFJMX0VYVCwgcmVnKTsKKworCQkvKiBmbHVzaCB0aGUgd3JpdGUgdG8gdmVyaWZ5IGNvbXBsZXRpb24gKi8KKwkJd3JmbCgpOworCQltc2xlZXAoMSk7CisJfQogCiAJcmV0dXJuOwogfQogCiAvKioKLSAqICBlMTAwMF9yZXNldF9od184MjU3NSAtIFJlc2V0IGhhcmR3YXJlCisgKiAgaWdiX3Jlc2V0X2h3XzgyNTc1IC0gUmVzZXQgaGFyZHdhcmUKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBUaGlzIHJlc2V0cyB0aGUgaGFyZHdhcmUgaW50byBhIGtub3duIHN0YXRlLiAgVGhpcyBpcyBhCkBAIC03OTgsOSArOTA5LDkgQEAKIAkgKi8KIAlyZXRfdmFsID0gaWdiX2Rpc2FibGVfcGNpZV9tYXN0ZXIoaHcpOwogCWlmIChyZXRfdmFsKQotCQlod19kYmcoaHcsICJQQ0ktRSBNYXN0ZXIgZGlzYWJsZSBwb2xsaW5nIGhhcyBmYWlsZWQuXG4iKTsKKwkJaHdfZGJnKCJQQ0ktRSBNYXN0ZXIgZGlzYWJsZSBwb2xsaW5nIGhhcyBmYWlsZWQuXG4iKTsKIAotCWh3X2RiZyhodywgIk1hc2tpbmcgb2ZmIGFsbCBpbnRlcnJ1cHRzXG4iKTsKKwlod19kYmcoIk1hc2tpbmcgb2ZmIGFsbCBpbnRlcnJ1cHRzXG4iKTsKIAl3cjMyKEUxMDAwX0lNQywgMHhmZmZmZmZmZik7CiAKIAl3cjMyKEUxMDAwX1JDVEwsIDApOwpAQCAtODExLDcgKzkyMiw3IEBACiAKIAljdHJsID0gcmQzMihFMTAwMF9DVFJMKTsKIAotCWh3X2RiZyhodywgIklzc3VpbmcgYSBnbG9iYWwgcmVzZXQgdG8gTUFDXG4iKTsKKwlod19kYmcoIklzc3VpbmcgYSBnbG9iYWwgcmVzZXQgdG8gTUFDXG4iKTsKIAl3cjMyKEUxMDAwX0NUUkwsIGN0cmwgfCBFMTAwMF9DVFJMX1JTVCk7CiAKIAlyZXRfdmFsID0gaWdiX2dldF9hdXRvX3JkX2RvbmUoaHcpOwpAQCAtODIxLDcgKzkzMiw3IEBACiAJCSAqIHJldHVybiB3aXRoIGFuIGVycm9yLiBUaGlzIGNhbiBoYXBwZW4gaW4gc2l0dWF0aW9ucwogCQkgKiB3aGVyZSB0aGVyZSBpcyBubyBlZXByb20gYW5kIHByZXZlbnRzIGdldHRpbmcgbGluay4KIAkJICovCi0JCWh3X2RiZyhodywgIkF1dG8gUmVhZCBEb25lIGRpZCBub3QgY29tcGxldGVcbiIpOworCQlod19kYmcoIkF1dG8gUmVhZCBEb25lIGRpZCBub3QgY29tcGxldGVcbiIpOwogCX0KIAogCS8qIElmIEVFUFJPTSBpcyBub3QgcHJlc2VudCwgcnVuIG1hbnVhbCBpbml0IHNjcmlwdHMgKi8KQEAgLTgzOCw3ICs5NDksNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9pbml0X2h3XzgyNTc1IC0gSW5pdGlhbGl6ZSBoYXJkd2FyZQorICogIGlnYl9pbml0X2h3XzgyNTc1IC0gSW5pdGlhbGl6ZSBoYXJkd2FyZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFRoaXMgaW5pdHMgdGhlIGhhcmR3YXJlIHJlYWR5aW5nIGl0IGZvciBvcGVyYXRpb24uCkBAIC04NTIsMTggKzk2MywxOCBAQAogCS8qIEluaXRpYWxpemUgaWRlbnRpZmljYXRpb24gTEVEICovCiAJcmV0X3ZhbCA9IGlnYl9pZF9sZWRfaW5pdChodyk7CiAJaWYgKHJldF92YWwpIHsKLQkJaHdfZGJnKGh3LCAiRXJyb3IgaW5pdGlhbGl6aW5nIGlkZW50aWZpY2F0aW9uIExFRFxuIik7CisJCWh3X2RiZygiRXJyb3IgaW5pdGlhbGl6aW5nIGlkZW50aWZpY2F0aW9uIExFRFxuIik7CiAJCS8qIFRoaXMgaXMgbm90IGZhdGFsIGFuZCB3ZSBzaG91bGQgbm90IHN0b3AgaW5pdCBkdWUgdG8gdGhpcyAqLwogCX0KIAogCS8qIERpc2FibGluZyBWTEFOIGZpbHRlcmluZyAqLwotCWh3X2RiZyhodywgIkluaXRpYWxpemluZyB0aGUgSUVFRSBWTEFOXG4iKTsKKwlod19kYmcoIkluaXRpYWxpemluZyB0aGUgSUVFRSBWTEFOXG4iKTsKIAlpZ2JfY2xlYXJfdmZ0YShodyk7CiAKIAkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBhZGRyZXNzICovCi0JaWdiX2luaXRfcnhfYWRkcnMoaHcsIHJhcl9jb3VudCk7CisJaWdiX2luaXRfcnhfYWRkcnNfODI1NzUoaHcsIHJhcl9jb3VudCk7CiAJLyogWmVybyBvdXQgdGhlIE11bHRpY2FzdCBIQVNIIHRhYmxlICovCi0JaHdfZGJnKGh3LCAiWmVyb2luZyB0aGUgTVRBXG4iKTsKKwlod19kYmcoIlplcm9pbmcgdGhlIE1UQVxuIik7CiAJZm9yIChpID0gMDsgaSA8IG1hYy0+bXRhX3JlZ19jb3VudDsgaSsrKQogCQlhcnJheV93cjMyKEUxMDAwX01UQSwgaSwgMCk7CiAKQEAgLTg4Miw3ICs5OTMsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9zZXR1cF9jb3BwZXJfbGlua184MjU3NSAtIENvbmZpZ3VyZSBjb3BwZXIgbGluayBzZXR0aW5ncworICogIGlnYl9zZXR1cF9jb3BwZXJfbGlua184MjU3NSAtIENvbmZpZ3VyZSBjb3BwZXIgbGluayBzZXR0aW5ncwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIENvbmZpZ3VyZXMgdGhlIGxpbmsgZm9yIGF1dG8tbmVnIG9yIGZvcmNlZCBzcGVlZCBhbmQgZHVwbGV4LiAgVGhlbiB3ZSBjaGVjawpAQCAtOTMzLDEwICsxMDQ0LDEwIEBACiAJCSAqIFBIWSB3aWxsIGJlIHNldCB0byAxMEgsIDEwRiwgMTAwSCBvciAxMDBGCiAJCSAqIGRlcGVuZGluZyBvbiB1c2VyIHNldHRpbmdzLgogCQkgKi8KLQkJaHdfZGJnKGh3LCAiRm9yY2luZyBTcGVlZCBhbmQgRHVwbGV4XG4iKTsKKwkJaHdfZGJnKCJGb3JjaW5nIFNwZWVkIGFuZCBEdXBsZXhcbiIpOwogCQlyZXRfdmFsID0gaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXgoaHcpOwogCQlpZiAocmV0X3ZhbCkgewotCQkJaHdfZGJnKGh3LCAiRXJyb3IgRm9yY2luZyBTcGVlZCBhbmQgRHVwbGV4XG4iKTsKKwkJCWh3X2RiZygiRXJyb3IgRm9yY2luZyBTcGVlZCBhbmQgRHVwbGV4XG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtOTQ5LDIwICsxMDYwLDE3IEBACiAJICogQ2hlY2sgbGluayBzdGF0dXMuIFdhaXQgdXAgdG8gMTAwIG1pY3Jvc2Vjb25kcyBmb3IgbGluayB0byBiZWNvbWUKIAkgKiB2YWxpZC4KIAkgKi8KLQlyZXRfdmFsID0gaWdiX3BoeV9oYXNfbGluayhodywKLQkJCQkJICAgICBDT1BQRVJfTElOS19VUF9MSU1JVCwKLQkJCQkJICAgICAxMCwKLQkJCQkJICAgICAmbGluayk7CisJcmV0X3ZhbCA9IGlnYl9waHlfaGFzX2xpbmsoaHcsIENPUFBFUl9MSU5LX1VQX0xJTUlULCAxMCwgJmxpbmspOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCWlmIChsaW5rKSB7Ci0JCWh3X2RiZyhodywgIlZhbGlkIGxpbmsgZXN0YWJsaXNoZWQhISFcbiIpOworCQlod19kYmcoIlZhbGlkIGxpbmsgZXN0YWJsaXNoZWQhISFcbiIpOwogCQkvKiBDb25maWcgdGhlIE1BQyBhbmQgUEhZIGFmdGVyIGxpbmsgaXMgdXAgKi8KIAkJaWdiX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CiAJCXJldF92YWwgPSBpZ2JfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXAoaHcpOwogCX0gZWxzZSB7Ci0JCWh3X2RiZyhodywgIlVuYWJsZSB0byBlc3RhYmxpc2ggbGluayEhIVxuIik7CisJCWh3X2RiZygiVW5hYmxlIHRvIGVzdGFibGlzaCBsaW5rISEhXG4iKTsKIAl9CiAKIG91dDoKQEAgLTk3MCw3ICsxMDc4LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzUgLSBTZXR1cCBsaW5rIGZvciBmaWJlci9zZXJkZXMKKyAqICBpZ2Jfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzUgLSBTZXR1cCBsaW5rIGZvciBmaWJlci9zZXJkZXMKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBDb25maWd1cmVzIHNwZWVkIGFuZCBkdXBsZXggZm9yIGZpYmVyIGFuZCBzZXJkZXMgbGlua3MuCkBAIC0xMDE4LDcgKzExMjYsNyBAQAogCQkgICAgICAgRTEwMDBfUENTX0xDVExfRkRWX0ZVTEwgfCAgICAgIC8qIFNlckRlcyBGdWxsIGR1cGxleCAqLwogCQkgICAgICAgRTEwMDBfUENTX0xDVExfQU5fRU5BQkxFIHwgICAgIC8qIEVuYWJsZSBBdXRvbmVnICovCiAJCSAgICAgICBFMTAwMF9QQ1NfTENUTF9BTl9SRVNUQVJUOyAgICAgLyogUmVzdGFydCBhdXRvbmVnICovCi0JCWh3X2RiZyhodywgIkNvbmZpZ3VyaW5nIEF1dG9uZWc7IFBDU19MQ1RMID0gMHglMDhYXG4iLCByZWcpOworCQlod19kYmcoIkNvbmZpZ3VyaW5nIEF1dG9uZWc7IFBDU19MQ1RMID0gMHglMDhYXG4iLCByZWcpOwogCX0gZWxzZSB7CiAJCS8qIFNldCBQQ1MgcmVnaXN0ZXIgZm9yIGZvcmNlZCBzcGVlZCAqLwogCQlyZWcgfD0gRTEwMDBfUENTX0xDVExfRkxWX0xJTktfVVAgfCAgIC8qIEZvcmNlIGxpbmsgdXAgKi8KQEAgLTEwMjYsNyArMTEzNCw3IEBACiAJCSAgICAgICBFMTAwMF9QQ1NfTENUTF9GRFZfRlVMTCB8ICAgICAgLyogU2VyRGVzIEZ1bGwgZHVwbGV4ICovCiAJCSAgICAgICBFMTAwMF9QQ1NfTENUTF9GU0QgfCAgICAgICAgICAgLyogRm9yY2UgU3BlZWQgKi8KIAkJICAgICAgIEUxMDAwX1BDU19MQ1RMX0ZPUkNFX0xJTks7ICAgICAvKiBGb3JjZSBMaW5rICovCi0JCWh3X2RiZyhodywgIkNvbmZpZ3VyaW5nIEZvcmNlZCBMaW5rOyBQQ1NfTENUTCA9IDB4JTA4WFxuIiwgcmVnKTsKKwkJaHdfZGJnKCJDb25maWd1cmluZyBGb3JjZWQgTGluazsgUENTX0xDVEwgPSAweCUwOFhcbiIsIHJlZyk7CiAJfQogCXdyMzIoRTEwMDBfUENTX0xDVEwsIHJlZyk7CiAKQEAgLTEwMzQsNyArMTE0Miw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX2NvbmZpZ3VyZV9wY3NfbGlua184MjU3NSAtIENvbmZpZ3VyZSBQQ1MgbGluaworICogIGlnYl9jb25maWd1cmVfcGNzX2xpbmtfODI1NzUgLSBDb25maWd1cmUgUENTIGxpbmsKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBDb25maWd1cmUgdGhlIHBoeXNpY2FsIGNvZGluZyBzdWItbGF5ZXIgKFBDUykgbGluay4gIFRoZSBQQ1MgbGluayBpcwpAQCAtMTA2Nyw3ICsxMTc1LDcgQEAKIAkJICovCiAJCXJlZyB8PSBFMTAwMF9QQ1NfTENUTF9BTl9SRVNUQVJUIHwgRTEwMDBfUENTX0xDVExfQU5fRU5BQkxFOwogCX0gZWxzZSB7Ci0JCS8qIFNldCBQQ1MgcmVnaXNldGVyIGZvciBmb3JjZWQgc3BlZWQgKi8KKwkJLyogU2V0IFBDUyByZWdpc3RlciBmb3IgZm9yY2VkIHNwZWVkICovCiAKIAkJLyogVHVybiBvZmYgYml0cyBmb3IgZnVsbCBkdXBsZXgsIHNwZWVkLCBhbmQgYXV0b25lZyAqLwogCQlyZWcgJj0gfihFMTAwMF9QQ1NfTENUTF9GU1ZfMTAwMCB8CkBAIC0xMDg4LDggKzExOTYsNyBAQAogCQkgICAgICAgRTEwMDBfUENTX0xDVExfRk9SQ0VfTElOSyB8CiAJCSAgICAgICBFMTAwMF9QQ1NfTENUTF9GTFZfTElOS19VUDsKIAotCQlod19kYmcoaHcsCi0JCSAgICAgICAiV3JvdGUgMHglMDhYIHRvIFBDU19MQ1RMIHRvIGNvbmZpZ3VyZSBmb3JjZWQgbGlua1xuIiwKKwkJaHdfZGJnKCJXcm90ZSAweCUwOFggdG8gUENTX0xDVEwgdG8gY29uZmlndXJlIGZvcmNlZCBsaW5rXG4iLAogCQkgICAgICAgcmVnKTsKIAl9CiAJd3IzMihFMTAwMF9QQ1NfTENUTCwgcmVnKTsKQEAgLTEwOTksNyArMTIwNiw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3NnbWlpX2FjdGl2ZV84MjU3NSAtIFJldHVybiBzZ21paSBzdGF0ZQorICogIGlnYl9zZ21paV9hY3RpdmVfODI1NzUgLSBSZXR1cm4gc2dtaWkgc3RhdGUKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICA4MjU3NSBzaWxpY29uIGhhcyBhIHNlcmlhbGl6ZWQgZ2lnYWJpdCBtZWRpYSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgKHNnbWlpKQpAQCAtMTEyNSw3ICsxMjMyLDcxIEBACiB9CiAKIC8qKgotICogIGUxMDAwX3Jlc2V0X2luaXRfc2NyaXB0XzgyNTc1IC0gSW5pdHMgSFcgZGVmYXVsdHMgYWZ0ZXIgcmVzZXQKKyAqICBpZ2JfdHJhbnNsYXRlX3JlZ2lzdGVyXzgyNTc2IC0gVHJhbnNsYXRlIHRoZSBwcm9wZXIgcmVnaXN0ZXIgb2Zmc2V0CisgKiAgQHJlZzogZTEwMDAgcmVnaXN0ZXIgdG8gYmUgcmVhZAorICoKKyAqICBSZWdpc3RlcnMgaW4gODI1NzYgYXJlIGxvY2F0ZWQgaW4gZGlmZmVyZW50IG9mZnNldHMgdGhhbiBvdGhlciBhZGFwdGVycworICogIGV2ZW4gdGhvdWdoIHRoZXkgZnVuY3Rpb24gaW4gdGhlIHNhbWUgbWFubmVyLiAgVGhpcyBmdW5jdGlvbiB0YWtlcyBpbgorICogIHRoZSBuYW1lIG9mIHRoZSByZWdpc3RlciB0byByZWFkIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IG9mZnNldCBmb3IKKyAqICA4MjU3NiBzaWxpY29uLgorICoqLwordTMyIGlnYl90cmFuc2xhdGVfcmVnaXN0ZXJfODI1NzYodTMyIHJlZykKK3sKKwkvKgorCSAqIFNvbWUgb2YgdGhlIEthd2VsYSByZWdpc3RlcnMgYXJlIGxvY2F0ZWQgYXQgZGlmZmVyZW50CisJICogb2Zmc2V0cyB0aGFuIHRoZXkgYXJlIGluIG9sZGVyIGFkYXB0ZXJzLgorCSAqIERlc3BpdGUgdGhlIGRpZmZlcmVuY2UgaW4gbG9jYXRpb24sIHRoZSByZWdpc3RlcnMKKwkgKiBmdW5jdGlvbiBpbiB0aGUgc2FtZSBtYW5uZXIuCisJICovCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEUxMDAwX1REQkFMKDApOgorCQlyZWcgPSAweDBFMDAwOworCQlicmVhazsKKwljYXNlIEUxMDAwX1REQkFIKDApOgorCQlyZWcgPSAweDBFMDA0OworCQlicmVhazsKKwljYXNlIEUxMDAwX1RETEVOKDApOgorCQlyZWcgPSAweDBFMDA4OworCQlicmVhazsKKwljYXNlIEUxMDAwX1RESCgwKToKKwkJcmVnID0gMHgwRTAxMDsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9URFQoMCk6CisJCXJlZyA9IDB4MEUwMTg7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfVFhEQ1RMKDApOgorCQlyZWcgPSAweDBFMDI4OworCQlicmVhazsKKwljYXNlIEUxMDAwX1JEQkFMKDApOgorCQlyZWcgPSAweDBDMDAwOworCQlicmVhazsKKwljYXNlIEUxMDAwX1JEQkFIKDApOgorCQlyZWcgPSAweDBDMDA0OworCQlicmVhazsKKwljYXNlIEUxMDAwX1JETEVOKDApOgorCQlyZWcgPSAweDBDMDA4OworCQlicmVhazsKKwljYXNlIEUxMDAwX1JESCgwKToKKwkJcmVnID0gMHgwQzAxMDsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9SRFQoMCk6CisJCXJlZyA9IDB4MEMwMTg7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfUlhEQ1RMKDApOgorCQlyZWcgPSAweDBDMDI4OworCQlicmVhazsKKwljYXNlIEUxMDAwX1NSUkNUTCgwKToKKwkJcmVnID0gMHgwQzAwQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlZzsKK30KKworLyoqCisgKiAgaWdiX3Jlc2V0X2luaXRfc2NyaXB0XzgyNTc1IC0gSW5pdHMgSFcgZGVmYXVsdHMgYWZ0ZXIgcmVzZXQKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBJbml0cyByZWNvbW1lbmRlZCBIVyBkZWZhdWx0cyBhZnRlciBhIHJlc2V0IHdoZW4gdGhlcmUgaXMgbm8gRUVQUk9NCkBAIC0xMTM0LDcgKzEzMDUsNyBAQAogc3RhdGljIHMzMiBpZ2JfcmVzZXRfaW5pdF9zY3JpcHRfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKIAlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc1KSB7Ci0JCWh3X2RiZyhodywgIlJ1bm5pbmcgcmVzZXQgaW5pdCBzY3JpcHQgZm9yIDgyNTc1XG4iKTsKKwkJaHdfZGJnKCJSdW5uaW5nIHJlc2V0IGluaXQgc2NyaXB0IGZvciA4MjU3NVxuIik7CiAJCS8qIFNlckRlcyBjb25maWd1cmF0aW9uIHZpYSBTRVJERVNDVFJMICovCiAJCWlnYl93cml0ZV84Yml0X2N0cmxfcmVnKGh3LCBFMTAwMF9TQ1RMLCAweDAwLCAweDBDKTsKIAkJaWdiX3dyaXRlXzhiaXRfY3RybF9yZWcoaHcsIEUxMDAwX1NDVEwsIDB4MDEsIDB4NzgpOwpAQCAtMTE2MSw3ICsxMzMyLDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfcmVhZF9tYWNfYWRkcl84MjU3NSAtIFJlYWQgZGV2aWNlIE1BQyBhZGRyZXNzCisgKiAgaWdiX3JlYWRfbWFjX2FkZHJfODI1NzUgLSBSZWFkIGRldmljZSBNQUMgYWRkcmVzcwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiovCiBzdGF0aWMgczMyIGlnYl9yZWFkX21hY19hZGRyXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCkBAIC0xMTc1LDcgKzEzNDYsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9jbGVhcl9od19jbnRyc184MjU3NSAtIENsZWFyIGRldmljZSBzcGVjaWZpYyBoYXJkd2FyZSBjb3VudGVycworICogIGlnYl9jbGVhcl9od19jbnRyc184MjU3NSAtIENsZWFyIGRldmljZSBzcGVjaWZpYyBoYXJkd2FyZSBjb3VudGVycwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIENsZWFycyB0aGUgaGFyZHdhcmUgY291bnRlcnMgYnkgcmVhZGluZyB0aGUgY291bnRlciByZWdpc3RlcnMuCkBAIC0xMjM4LDExICsxNDA5LDg0IEBACiAJCXRlbXAgPSByZDMyKEUxMDAwX1NDVlBDKTsKIH0KIAorLyoqCisgKiAgaWdiX3J4X2ZpZm9fZmx1c2hfODI1NzUgLSBDbGVhbiByeCBmaWZvIGFmdGVyIFJYIGVuYWJsZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIEFmdGVyIHJ4IGVuYWJsZSBpZiBtYW5hZ2FiaWxpdHkgaXMgZW5hYmxlZCB0aGVuIHRoZXJlIGlzIGxpa2VseSBzb21lCisgKiAgYmFkIGRhdGEgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWZvIGFuZCBwb3NzaWJseSBpbiB0aGUgRE1BIGZpZm8uICBUaGlzCisgKiAgZnVuY3Rpb24gY2xlYXJzIHRoZSBmaWZvcyBhbmQgZmx1c2hlcyBhbnkgcGFja2V0cyB0aGF0IGNhbWUgaW4gYXMgcnggd2FzCisgKiAgYmVpbmcgZW5hYmxlZC4KKyAqKi8KK3ZvaWQgaWdiX3J4X2ZpZm9fZmx1c2hfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgcmN0bCwgcmxwbWwsIHJ4ZGN0bFs0XSwgcmZjdGwsIHRlbXBfcmN0bCwgcnhfZW5hYmxlZDsKKwlpbnQgaSwgbXNfd2FpdDsKKworCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzUgfHwKKwkgICAgIShyZDMyKEUxMDAwX01BTkMpICYgRTEwMDBfTUFOQ19SQ1ZfVENPX0VOKSkKKwkJcmV0dXJuOworCisJLyogRGlzYWJsZSBhbGwgUlggcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyeGRjdGxbaV0gPSByZDMyKEUxMDAwX1JYRENUTChpKSk7CisJCXdyMzIoRTEwMDBfUlhEQ1RMKGkpLAorCQkgICAgIHJ4ZGN0bFtpXSAmIH5FMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTsKKwl9CisJLyogUG9sbCBhbGwgcXVldWVzIHRvIHZlcmlmeSB0aGV5IGhhdmUgc2h1dCBkb3duICovCisJZm9yIChtc193YWl0ID0gMDsgbXNfd2FpdCA8IDEwOyBtc193YWl0KyspIHsKKwkJbXNsZWVwKDEpOworCQlyeF9lbmFibGVkID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCXJ4X2VuYWJsZWQgfD0gcmQzMihFMTAwMF9SWERDVEwoaSkpOworCQlpZiAoIShyeF9lbmFibGVkICYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpCisJCQlicmVhazsKKwl9CisKKwlpZiAobXNfd2FpdCA9PSAxMCkKKwkJaHdfZGJnKCJRdWV1ZSBkaXNhYmxlIHRpbWVkIG91dCBhZnRlciAxMG1zXG4iKTsKKworCS8qIENsZWFyIFJMUE1MLCBSQ1RMLlNCUCwgUkZDVEwuTEVGLCBhbmQgc2V0IFJDVEwuTFBFIHNvIHRoYXQgYWxsCisJICogaW5jb21pbmcgcGFja2V0cyBhcmUgcmVqZWN0ZWQuICBTZXQgZW5hYmxlIGFuZCB3YWl0IDJtcyBzbyB0aGF0CisJICogYW55IHBhY2tldCB0aGF0IHdhcyBjb21pbmcgaW4gYXMgUkNUTC5FTiB3YXMgc2V0IGlzIGZsdXNoZWQKKwkgKi8KKwlyZmN0bCA9IHJkMzIoRTEwMDBfUkZDVEwpOworCXdyMzIoRTEwMDBfUkZDVEwsIHJmY3RsICYgfkUxMDAwX1JGQ1RMX0xFRik7CisKKwlybHBtbCA9IHJkMzIoRTEwMDBfUkxQTUwpOworCXdyMzIoRTEwMDBfUkxQTUwsIDApOworCisJcmN0bCA9IHJkMzIoRTEwMDBfUkNUTCk7CisJdGVtcF9yY3RsID0gcmN0bCAmIH4oRTEwMDBfUkNUTF9FTiB8IEUxMDAwX1JDVExfU0JQKTsKKwl0ZW1wX3JjdGwgfD0gRTEwMDBfUkNUTF9MUEU7CisKKwl3cjMyKEUxMDAwX1JDVEwsIHRlbXBfcmN0bCk7CisJd3IzMihFMTAwMF9SQ1RMLCB0ZW1wX3JjdGwgfCBFMTAwMF9SQ1RMX0VOKTsKKwl3cmZsKCk7CisJbXNsZWVwKDIpOworCisJLyogRW5hYmxlIFJYIHF1ZXVlcyB0aGF0IHdlcmUgcHJldmlvdXNseSBlbmFibGVkIGFuZCByZXN0b3JlIG91cgorCSAqIHByZXZpb3VzIHN0YXRlCisJICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJd3IzMihFMTAwMF9SWERDVEwoaSksIHJ4ZGN0bFtpXSk7CisJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKKwl3cmZsKCk7CisKKwl3cjMyKEUxMDAwX1JMUE1MLCBybHBtbCk7CisJd3IzMihFMTAwMF9SRkNUTCwgcmZjdGwpOworCisJLyogRmx1c2ggcmVjZWl2ZSBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHdvcmthcm91bmQgKi8KKwlyZDMyKEUxMDAwX1JPQyk7CisJcmQzMihFMTAwMF9STkJDKTsKKwlyZDMyKEUxMDAwX01QQyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZTEwMDBfbWFjX29wZXJhdGlvbnMgZTEwMDBfbWFjX29wc184MjU3NSA9IHsKIAkucmVzZXRfaHcgICAgICAgICAgICAgPSBpZ2JfcmVzZXRfaHdfODI1NzUsCiAJLmluaXRfaHcgICAgICAgICAgICAgID0gaWdiX2luaXRfaHdfODI1NzUsCiAJLmNoZWNrX2Zvcl9saW5rICAgICAgID0gaWdiX2NoZWNrX2Zvcl9saW5rXzgyNTc1LAotCS5yYXJfc2V0ICAgICAgICAgICAgICA9IGlnYl9yYXJfc2V0XzgyNTc1LAorCS5yYXJfc2V0ICAgICAgICAgICAgICA9IGlnYl9yYXJfc2V0LAogCS5yZWFkX21hY19hZGRyICAgICAgICA9IGlnYl9yZWFkX21hY19hZGRyXzgyNTc1LAogCS5nZXRfc3BlZWRfYW5kX2R1cGxleCA9IGlnYl9nZXRfc3BlZWRfYW5kX2R1cGxleF9jb3BwZXIsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaAppbmRleCA3NmVhODQ2Li4yZjg0OGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMjgsNyArMjgsMTMgQEAKICNpZm5kZWYgX0UxMDAwXzgyNTc1X0hfCiAjZGVmaW5lIF9FMTAwMF84MjU3NV9IXwogCit1MzIgaWdiX3RyYW5zbGF0ZV9yZWdpc3Rlcl84MjU3Nih1MzIgcmVnKTsKK3ZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoc3RydWN0IGUxMDAwX2h3KiwgdTgqLCB1MzIsIHUzMiwgdTMyKTsKK2V4dGVybiB2b2lkIGlnYl9zaHV0ZG93bl9maWJlcl9zZXJkZXNfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK2V4dGVybiB2b2lkIGlnYl9yeF9maWZvX2ZsdXNoXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpOworCiAjZGVmaW5lIEUxMDAwX1JBUl9FTlRSSUVTXzgyNTc1ICAgMTYKKyNkZWZpbmUgRTEwMDBfUkFSX0VOVFJJRVNfODI1NzYgICAyNAogCiAvKiBTUlJDVEwgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIEUxMDAwX1NSUkNUTF9CU0laRVBLVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEwIC8qIFNoaWZ0IF9yaWdodF8gKi8KQEAgLTU2LDcgKzYyLDcgQEAKICNkZWZpbmUgRTEwMDBfRUlNU19SWF9RVUVVRSBFMTAwMF9FSUNSX1JYX1FVRVVFCiAjZGVmaW5lIEUxMDAwX0VJTVNfVFhfUVVFVUUgRTEwMDBfRUlDUl9UWF9RVUVVRQogCi0vKiBJbW1lZGlhdGUgSW50ZXJydXB0IFJYIChBLksuQS4gTG93IExhdGVuY3kgSW50ZXJydXB0KSAqLworLyogSW1tZWRpYXRlIEludGVycnVwdCBSeCAoQS5LLkEuIExvdyBMYXRlbmN5IEludGVycnVwdCkgKi8KIAogLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gQWR2YW5jZWQgKi8KIHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjIHsKQEAgLTkzLDYgKzk5LDggQEAKIC8qIFJTUyBIYXNoIHJlc3VsdHMgKi8KIAogLyogUlNTIFBhY2tldCBUeXBlcyBhcyBpbmRpY2F0ZWQgaW4gdGhlIHJlY2VpdmUgZGVzY3JpcHRvciAqLworI2RlZmluZSBFMTAwMF9SWERBRFZfUEtUVFlQRV9JUFY0ICAgICAgICAweDAwMDAwMDEwIC8qIElQVjQgaGRyIHByZXNlbnQgKi8KKyNkZWZpbmUgRTEwMDBfUlhEQURWX1BLVFRZUEVfVENQICAgICAgICAgMHgwMDAwMDEwMCAvKiBUQ1AgaGRyIHByZXNlbnQgKi8KIAogLyogVHJhbnNtaXQgRGVzY3JpcHRvciAtIEFkdmFuY2VkICovCiB1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYyB7CkBAIC0xNDIsOSArMTUwLDI1IEBACiAjZGVmaW5lIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUgIDB4MDIwMDAwMDAgLyogRW5hYmxlIHNwZWNpZmljIFJ4IFF1ZXVlICovCiAKIC8qIERpcmVjdCBDYWNoZSBBY2Nlc3MgKERDQSkgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX0VOQUJMRSAgMHgwMDAwMDAwMCAvKiBEQ0EgRW5hYmxlICovCisjZGVmaW5lIEUxMDAwX0RDQV9DVFJMX0RDQV9ESVNBQkxFIDB4MDAwMDAwMDEgLyogRENBIERpc2FibGUgKi8KIAorI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTF9EQ0FfTU9ERV9DQjEgMHgwMCAvKiBEQ0EgTW9kZSBDQjEgKi8KKyNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IyIDB4MDIgLyogRENBIE1vZGUgQ0IyICovCiAKKyNkZWZpbmUgRTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9NQVNLIDB4MDAwMDAwMUYgLyogUnggQ1BVSUQgTWFzayAqLworI2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOICgxIDw8IDUpIC8qIERDQSBSeCBEZXNjIGVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMX0hFQURfRENBX0VOICgxIDw8IDYpIC8qIERDQSBSeCBEZXNjIGhlYWRlciBlbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfRENBX1JYQ1RSTF9EQVRBX0RDQV9FTiAoMSA8PCA3KSAvKiBEQ0EgUnggRGVzYyBwYXlsb2FkIGVuYWJsZSAqLwogCi0jZGVmaW5lIEUxMDAwX0RDQV9UWENUUkxfVFhfV0JfUk9fRU4gKDEgPDwgMTEpIC8qIFRYIERlc2Mgd3JpdGViYWNrIFJPIGJpdCAqLworI2RlZmluZSBFMTAwMF9EQ0FfVFhDVFJMX0NQVUlEX01BU0sgMHgwMDAwMDAxRiAvKiBUeCBDUFVJRCBNYXNrICovCisjZGVmaW5lIEUxMDAwX0RDQV9UWENUUkxfREVTQ19EQ0FfRU4gKDEgPDwgNSkgLyogRENBIFR4IERlc2MgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX0RDQV9UWENUUkxfVFhfV0JfUk9fRU4gKDEgPDwgMTEpIC8qIFR4IERlc2Mgd3JpdGViYWNrIFJPIGJpdCAqLworCisvKiBBZGRpdGlvbmFsIERDQSByZWxhdGVkIGRlZmluaXRpb25zLCBub3RlIGNoYW5nZSBpbiBwb3NpdGlvbiBvZiBDUFVJRCAqLworI2RlZmluZSBFMTAwMF9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1NzYgMHhGRjAwMDAwMCAvKiBUeCBDUFVJRCBNYXNrICovCisjZGVmaW5lIEUxMDAwX0RDQV9SWENUUkxfQ1BVSURfTUFTS184MjU3NiAweEZGMDAwMDAwIC8qIFJ4IENQVUlEIE1hc2sgKi8KKyNkZWZpbmUgRTEwMDBfRENBX1RYQ1RSTF9DUFVJRF9TSElGVCAyNCAvKiBUeCBDUFVJRCBub3cgaW4gdGhlIGxhc3QgYnl0ZSAqLworI2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUIDI0IC8qIFJ4IENQVUlEIG5vdyBpbiB0aGUgbGFzdCBieXRlICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKaW5kZXggOGRhOWZmZS4uYWZkYmEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC05MCwxMyArOTAsMTggQEAKICNkZWZpbmUgRTEwMDBfSTJDQ01EX0VSUk9SICAgICAgICAgICAgMHg4MDAwMDAwMAogI2RlZmluZSBFMTAwMF9NQVhfU0dNSUlfUEhZX1JFR19BRERSICAyNTUKICNkZWZpbmUgRTEwMDBfSTJDQ01EX1BIWV9USU1FT1VUICAgICAgMjAwCisjZGVmaW5lIEUxMDAwX0lWQVJfVkFMSUQgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgRTEwMDBfR1BJRV9OU0lDUiAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFMTAwMF9HUElFX01TSVhfTU9ERSAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEUxMDAwX0dQSUVfRUlBTUUgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRTEwMDBfR1BJRV9QQkEgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAogCi0vKiBSZWNlaXZlIERlY3JpcHRvciBiaXQgZGVmaW5pdGlvbnMgKi8KKy8qIFJlY2VpdmUgRGVzY3JpcHRvciBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfREQgICAgICAgMHgwMSAgICAvKiBEZXNjcmlwdG9yIERvbmUgKi8KICNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfRU9QICAgICAgMHgwMiAgICAvKiBFbmQgb2YgUGFja2V0ICovCiAjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX0lYU00gICAgIDB4MDQgICAgLyogSWdub3JlIGNoZWNrc3VtICovCiAjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1ZQICAgICAgIDB4MDggICAgLyogSUVFRSBWTEFOIFBhY2tldCAqLwotI2RlZmluZSBFMTAwMF9SWERfU1RBVF9VRFBDUyAgICAweDEwICAgIC8qIFVEUCB4c3VtIGNhY3VsYXRlZCAqLworI2RlZmluZSBFMTAwMF9SWERfU1RBVF9VRFBDUyAgICAweDEwICAgIC8qIFVEUCB4c3VtIGNhbGN1bGF0ZWQgKi8KICNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfVENQQ1MgICAgMHgyMCAgICAvKiBUQ1AgeHN1bSBjYWxjdWxhdGVkICovCiAjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX0RZTklOVCAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBJTlQgdmlhIERZTklOVCAqLwogI2RlZmluZSBFMTAwMF9SWERfRVJSX0NFICAgICAgICAweDAxICAgIC8qIENSQyBFcnJvciAqLwpAQCAtMjEzLDYgKzIxOCw3IEBACiAvKiBEZXZpY2UgQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0ZEICAgICAgIDB4MDAwMDAwMDEgIC8qIEZ1bGwgZHVwbGV4LjA9aGFsZjsgMT1mdWxsICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfR0lPX01BU1RFUl9ESVNBQkxFIDB4MDAwMDAwMDQgLypCbG9ja3MgbmV3IE1hc3RlciByZXF1ZXN0cyAqLworI2RlZmluZSBFMTAwMF9DVFJMX0xSU1QgICAgIDB4MDAwMDAwMDggIC8qIExpbmsgcmVzZXQuIDA9bm9ybWFsLDE9cmVzZXQgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9BU0RFICAgICAweDAwMDAwMDIwICAvKiBBdXRvLXNwZWVkIGRldGVjdCBlbmFibGUgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9TTFUgICAgICAweDAwMDAwMDQwICAvKiBTZXQgbGluayB1cCAoRm9yY2UgTGluaykgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9JTE9TICAgICAweDAwMDAwMDgwICAvKiBJbnZlcnQgTG9zcy1PZiBTaWduYWwgKi8KQEAgLTI0NCw2ICsyNTAsNyBAQAogICovCiAKICNkZWZpbmUgRTEwMDBfQ09OTlNXX0VOUkdTUkMgICAgICAgICAgICAgMHg0CisjZGVmaW5lIEUxMDAwX1BDU19DRkdfUENTX0VOICAgICAgICAgICAgIDgKICNkZWZpbmUgRTEwMDBfUENTX0xDVExfRkxWX0xJTktfVVAgICAgICAgMQogI2RlZmluZSBFMTAwMF9QQ1NfTENUTF9GU1ZfMTAwICAgICAgICAgICAyCiAjZGVmaW5lIEUxMDAwX1BDU19MQ1RMX0ZTVl8xMDAwICAgICAgICAgIDQKQEAgLTI1Myw2ICsyNjAsNyBAQAogI2RlZmluZSBFMTAwMF9QQ1NfTENUTF9BTl9FTkFCTEUgICAgICAgICAweDEwMDAwCiAjZGVmaW5lIEUxMDAwX1BDU19MQ1RMX0FOX1JFU1RBUlQgICAgICAgIDB4MjAwMDAKICNkZWZpbmUgRTEwMDBfUENTX0xDVExfQU5fVElNRU9VVCAgICAgICAgMHg0MDAwMAorI2RlZmluZSBFMTAwMF9FTkFCTEVfU0VSREVTX0xPT1BCQUNLICAgICAweDA0MTAKIAogI2RlZmluZSBFMTAwMF9QQ1NfTFNUU19MSU5LX09LICAgICAgICAgICAxCiAjZGVmaW5lIEUxMDAwX1BDU19MU1RTX1NQRUVEXzEwMCAgICAgICAgIDIKQEAgLTM0MCw2ICszNDgsNyBAQAogI2RlZmluZSBFMTAwMF9SWENTVU1fUENTRCAgICAgIDB4MDAwMDIwMDAgICAvKiBwYWNrZXQgY2hlY2tzdW0gZGlzYWJsZWQgKi8KIAogLyogSGVhZGVyIHNwbGl0IHJlY2VpdmUgKi8KKyNkZWZpbmUgRTEwMDBfUkZDVExfTEVGICAgICAgICAweDAwMDQwMDAwCiAKIC8qIENvbGxpc2lvbiByZWxhdGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLwogI2RlZmluZSBFMTAwMF9DT0xMSVNJT05fVEhSRVNIT0xEICAgICAgIDE1CkBAIC0zNTksNiArMzY4LDcgQEAKICNkZWZpbmUgRTEwMDBfUEJBXzE2SyAweDAwMTAgICAgLyogMTZLQiwgZGVmYXVsdCBUWCBhbGxvY2F0aW9uICovCiAjZGVmaW5lIEUxMDAwX1BCQV8yNEsgMHgwMDE4CiAjZGVmaW5lIEUxMDAwX1BCQV8zNEsgMHgwMDIyCisjZGVmaW5lIEUxMDAwX1BCQV82NEsgMHgwMDQwICAgIC8qIDY0S0IgKi8KIAogI2RlZmluZSBJRlNfTUFYICAgICAgIDgwCiAjZGVmaW5lIElGU19NSU4gICAgICAgNDAKQEAgLTM3OSw3ICszODksNyBAQAogI2RlZmluZSBFMTAwMF9JQ1JfUlhPICAgICAgICAgICAweDAwMDAwMDQwIC8qIHJ4IG92ZXJydW4gKi8KICNkZWZpbmUgRTEwMDBfSUNSX1JYVDAgICAgICAgICAgMHgwMDAwMDA4MCAvKiByeCB0aW1lciBpbnRyIChyaW5nIDApICovCiAjZGVmaW5lIEUxMDAwX0lDUl9NREFDICAgICAgICAgIDB4MDAwMDAyMDAgLyogTURJTyBhY2Nlc3MgY29tcGxldGUgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYQ0ZHICAgICAgICAgMHgwMDAwMDQwMCAvKiBSWCAvYy8gb3JkZXJlZCBzZXQgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1JYQ0ZHICAgICAgICAgMHgwMDAwMDQwMCAvKiBSeCAvYy8gb3JkZXJlZCBzZXQgKi8KICNkZWZpbmUgRTEwMDBfSUNSX0dQSV9FTjAgICAgICAgMHgwMDAwMDgwMCAvKiBHUCBJbnQgMCAqLwogI2RlZmluZSBFMTAwMF9JQ1JfR1BJX0VOMSAgICAgICAweDAwMDAxMDAwIC8qIEdQIEludCAxICovCiAjZGVmaW5lIEUxMDAwX0lDUl9HUElfRU4yICAgICAgIDB4MDAwMDIwMDAgLyogR1AgSW50IDIgKi8KQEAgLTQ0MywxMiArNDUzLDYgQEAKICNkZWZpbmUgRTEwMDBfSU1TX1JYU0VRICAgICBFMTAwMF9JQ1JfUlhTRVEgICAgIC8qIHJ4IHNlcXVlbmNlIGVycm9yICovCiAjZGVmaW5lIEUxMDAwX0lNU19SWERNVDAgICAgRTEwMDBfSUNSX1JYRE1UMCAgICAvKiByeCBkZXNjIG1pbi4gdGhyZXNob2xkICovCiAjZGVmaW5lIEUxMDAwX0lNU19SWFQwICAgICAgRTEwMDBfSUNSX1JYVDAgICAgICAvKiByeCB0aW1lciBpbnRyICovCi0vKiBxdWV1ZSAwIFJ4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KLS8qIHF1ZXVlIDAgVHggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLwotLyogaG9zdCBhcmIgcmVhZCBidWZmZXIgcGFyaXR5IGVycm9yICovCi0vKiBwYWNrZXQgYnVmZmVyIHBhcml0eSBlcnJvciAqLwotLyogcXVldWUgMSBSeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCi0vKiBxdWV1ZSAxIFR4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IE1hc2sgU2V0ICovCiAjZGVmaW5lIEUxMDAwX0VJTVNfVENQX1RJTUVSICAgIEUxMDAwX0VJQ1JfVENQX1RJTUVSIC8qIFRDUCBUaW1lciAqLwpAQCAtNDU3LDEyICs0NjEsNiBAQAogLyogSW50ZXJydXB0IENhdXNlIFNldCAqLwogI2RlZmluZSBFMTAwMF9JQ1NfTFNDICAgICAgIEUxMDAwX0lDUl9MU0MgICAgICAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIEUxMDAwX0lDU19SWERNVDAgICAgRTEwMDBfSUNSX1JYRE1UMCAgICAvKiByeCBkZXNjIG1pbi4gdGhyZXNob2xkICovCi0vKiBxdWV1ZSAwIFJ4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KLS8qIHF1ZXVlIDAgVHggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLwotLyogaG9zdCBhcmIgcmVhZCBidWZmZXIgcGFyaXR5IGVycm9yICovCi0vKiBwYWNrZXQgYnVmZmVyIHBhcml0eSBlcnJvciAqLwotLyogcXVldWUgMSBSeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCi0vKiBxdWV1ZSAxIFR4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFNldCAqLwogCkBAIC01MzksNiArNTM3LDcgQEAKIC8qIFBIWSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9DUl9GVUxMX0RVUExFWCAgICAgIDB4MDEwMCAgLyogRkRYID0xLCBoYWxmIGR1cGxleCA9MCAqLwogI2RlZmluZSBNSUlfQ1JfUkVTVEFSVF9BVVRPX05FRyAweDAyMDAgIC8qIFJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiAqLworI2RlZmluZSBNSUlfQ1JfUE9XRVJfRE9XTiAgICAgICAweDA4MDAgIC8qIFBvd2VyIGRvd24gKi8KICNkZWZpbmUgTUlJX0NSX0FVVE9fTkVHX0VOICAgICAgMHgxMDAwICAvKiBBdXRvIE5lZyBFbmFibGUgKi8KICNkZWZpbmUgTUlJX0NSX0xPT1BCQUNLICAgICAgICAgMHg0MDAwICAvKiAwID0gbm9ybWFsLCAxID0gbG9vcGJhY2sgKi8KICNkZWZpbmUgTUlJX0NSX1JFU0VUICAgICAgICAgICAgMHg4MDAwICAvKiAwID0gbm9ybWFsLCAxID0gUEhZIHJlc2V0ICovCkBAIC01NjcsNyArNTY2LDYgQEAKIC8qIDEwMDBCQVNFLVQgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBDUl8xMDAwVF9IRF9DQVBTICAgICAgICAgMHgwMTAwIC8qIEFkdmVydGlzZSAxMDAwVCBIRCBjYXBhYmlsaXR5ICovCiAjZGVmaW5lIENSXzEwMDBUX0ZEX0NBUFMgICAgICAgICAweDAyMDAgLyogQWR2ZXJ0aXNlIDEwMDBUIEZEIGNhcGFiaWxpdHkgICovCi0JCQkJCS8qIDA9RFRFIGRldmljZSAqLwogI2RlZmluZSBDUl8xMDAwVF9NU19WQUxVRSAgICAgICAgMHgwODAwIC8qIDE9Q29uZmlndXJlIFBIWSBhcyBNYXN0ZXIgKi8KIAkJCQkJLyogMD1Db25maWd1cmUgUEhZIGFzIFNsYXZlICovCiAjZGVmaW5lIENSXzEwMDBUX01TX0VOQUJMRSAgICAgICAweDEwMDAgLyogMT1NYXN0ZXIvU2xhdmUgbWFudWFsIGNvbmZpZyB2YWx1ZSAqLwpAQCAtNTgxLDcgKzU3OSw3IEBACiAvKiBQSFkgMTAwMCBNSUkgUmVnaXN0ZXIvQml0IERlZmluaXRpb25zICovCiAvKiBQSFkgUmVnaXN0ZXJzIGRlZmluZWQgYnkgSUVFRSAqLwogI2RlZmluZSBQSFlfQ09OVFJPTCAgICAgIDB4MDAgLyogQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfU1RBVFVTICAgICAgIDB4MDEgLyogU3RhdHVzIFJlZ2lzZXIgKi8KKyNkZWZpbmUgUEhZX1NUQVRVUyAgICAgICAweDAxIC8qIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBQSFlfSUQxICAgICAgICAgIDB4MDIgLyogUGh5IElkIFJlZyAod29yZCAxKSAqLwogI2RlZmluZSBQSFlfSUQyICAgICAgICAgIDB4MDMgLyogUGh5IElkIFJlZyAod29yZCAyKSAqLwogI2RlZmluZSBQSFlfQVVUT05FR19BRFYgIDB4MDQgLyogQXV0b25lZyBBZHZlcnRpc2VtZW50ICovCkBAIC03MDgsOCArNzA2LDggQEAKIC8qIEF1dG8gY3Jvc3NvdmVyIGVuYWJsZWQgYWxsIHNwZWVkcyAqLwogI2RlZmluZSBNODhFMTAwMF9QU0NSX0FVVE9fWF9NT0RFICAgICAgMHgwMDYwCiAvKgotICogMT1FbmFibGUgRXh0ZW5kZWQgMTBCQVNFLVQgZGlzdGFuY2UgKExvd2VyIDEwQkFTRS1UIFJYIFRocmVzaG9sZAotICogMD1Ob3JtYWwgMTBCQVNFLVQgUlggVGhyZXNob2xkCisgKiAxPUVuYWJsZSBFeHRlbmRlZCAxMEJBU0UtVCBkaXN0YW5jZSAoTG93ZXIgMTBCQVNFLVQgUnggVGhyZXNob2xkCisgKiAwPU5vcm1hbCAxMEJBU0UtVCBSeCBUaHJlc2hvbGQKICAqLwogLyogMT01LWJpdCBpbnRlcmZhY2UgaW4gMTAwQkFTRS1UWCwgMD1NSUkgaW50ZXJmYWNlIGluIDEwMEJBU0UtVFggKi8KICNkZWZpbmUgTTg4RTEwMDBfUFNDUl9BU1NFUlRfQ1JTX09OX1RYICAgICAweDA4MDAgLyogMT1Bc3NlcnQgQ1JTIG9uIFRyYW5zbWl0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCmluZGV4IDdiMmM3MGEuLjE5ZmE0ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCkBAIC0zOCw2ICszOCwxMCBAQAogCiBzdHJ1Y3QgZTEwMDBfaHc7CiAKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2ICAgICAgICAgICAgICAgICAgICAweDEwQzkKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSICAgICAgICAgICAgICAweDEwRTYKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUyAgICAgICAgICAgICAweDEwRTcKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSICAgICAgICAweDEwRTgKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1RUJfQ09QUEVSICAgICAgICAgICAweDEwQTcKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1RUJfRklCRVJfU0VSREVTICAgICAweDEwQTkKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1R0JfUVVBRF9DT1BQRVIgICAgICAweDEwRDYKQEAgLTUwLDYgKzU0LDcgQEAKIGVudW0gZTEwMDBfbWFjX3R5cGUgewogCWUxMDAwX3VuZGVmaW5lZCA9IDAsCiAJZTEwMDBfODI1NzUsCisJZTEwMDBfODI1NzYsCiAJZTEwMDBfbnVtX21hY3MgIC8qIExpc3QgaXMgMS1iYXNlZCwgc28gc3VidHJhY3QgMSBmb3IgdHJ1ZSBjb3VudC4gKi8KIH07CiAKQEAgLTQxMCwxNCArNDE1LDE3IEBACiAJczMyICAoKmNoZWNrX2Zvcl9saW5rKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKnJlc2V0X2h3KShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmluaXRfaHcpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlib29sICgqY2hlY2tfbW5nX21vZGUpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqc2V0dXBfcGh5c2ljYWxfaW50ZXJmYWNlKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJdm9pZCAoKnJhcl9zZXQpKHN0cnVjdCBlMTAwMF9odyAqLCB1OCAqLCB1MzIpOwogCXMzMiAgKCpyZWFkX21hY19hZGRyKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmdldF9zcGVlZF9hbmRfZHVwbGV4KShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2ICosIHUxNiAqKTsKKwl2b2lkICgqbXRhX3NldCkoc3RydWN0IGUxMDAwX2h3ICosIHUzMik7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfcGh5X29wZXJhdGlvbnMgewogCXMzMiAgKCphY3F1aXJlX3BoeSkoc3RydWN0IGUxMDAwX2h3ICopOworCXMzMiAgKCpjaGVja19yZXNldF9ibG9jaykoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpmb3JjZV9zcGVlZF9kdXBsZXgpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZ2V0X2NmZ19kb25lKShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAlzMzIgICgqZ2V0X2NhYmxlX2xlbmd0aCkoc3RydWN0IGUxMDAwX2h3ICopOwpAQCAtNTg2LDE0ICs1OTQsMTAgQEAKIAogI2lmZGVmIERFQlVHCiBleHRlcm4gY2hhciAqaWdiX2dldF9od19kZXZfbmFtZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLSNkZWZpbmUgaHdfZGJnKGh3LCBmb3JtYXQsIGFyZy4uLikgXAorI2RlZmluZSBod19kYmcoZm9ybWF0LCBhcmcuLi4pIFwKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LCBpZ2JfZ2V0X2h3X2Rldl9uYW1lKGh3KSwgIyNhcmcpCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCi1od19kYmcoc3RydWN0IGUxMDAwX2h3ICpodywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0JcmV0dXJuIDA7Ci19CisjZGVmaW5lIGh3X2RiZyhmb3JtYXQsIGFyZy4uLikKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwppbmRleCAzZTg0YTNmLi4yMDQwOGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCkBAIC0zNiwxMCArMzYsOSBAQAogCiBzdGF0aWMgczMyIGlnYl9zZXRfZGVmYXVsdF9mYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgaWdiX3NldF9mY193YXRlcm1hcmtzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIHUzMiBpZ2JfaGFzaF9tY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICptY19hZGRyKTsKIAogLyoqCi0gKiAgZTEwMDBfcmVtb3ZlX2RldmljZSAtIEZyZWUgZGV2aWNlIHNwZWNpZmljIHN0cnVjdHVyZQorICogIGlnYl9yZW1vdmVfZGV2aWNlIC0gRnJlZSBkZXZpY2Ugc3BlY2lmaWMgc3RydWN0dXJlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgSWYgYSBkZXZpY2Ugc3BlY2lmaWMgc3RydWN0dXJlIHdhcyBhbGxvY2F0ZWQsIHRoaXMgZnVuY3Rpb24gd2lsbApAQCAtNzMsNyArNzIsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9nZXRfYnVzX2luZm9fcGNpZSAtIEdldCBQQ0llIGJ1cyBpbmZvcm1hdGlvbgorICogIGlnYl9nZXRfYnVzX2luZm9fcGNpZSAtIEdldCBQQ0llIGJ1cyBpbmZvcm1hdGlvbgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIERldGVybWluZXMgYW5kIHN0b3JlcyB0aGUgc3lzdGVtIGJ1cyBpbmZvcm1hdGlvbiBmb3IgYSBwYXJ0aWN1bGFyCkBAIC0xMTMsNyArMTEyLDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfY2xlYXJfdmZ0YSAtIENsZWFyIFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgaWdiX2NsZWFyX3ZmdGEgLSBDbGVhciBWTEFOIGZpbHRlciB0YWJsZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIENsZWFycyB0aGUgcmVnaXN0ZXIgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIFZMQU4gZmlsdGVyIHRhYmxlIGJ5CkBAIC0xMzAsNyArMTI5LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfd3JpdGVfdmZ0YSAtIFdyaXRlIHZhbHVlIHRvIFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgaWdiX3dyaXRlX3ZmdGEgLSBXcml0ZSB2YWx1ZSB0byBWTEFOIGZpbHRlciB0YWJsZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IGluIFZMQU4gZmlsdGVyIHRhYmxlCiAgKiAgQHZhbHVlOiByZWdpc3RlciB2YWx1ZSB3cml0dGVuIHRvIFZMQU4gZmlsdGVyIHRhYmxlCkBAIC0xNDUsNyArMTQ0LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfaW5pdF9yeF9hZGRycyAtIEluaXRpYWxpemUgcmVjZWl2ZSBhZGRyZXNzJ3MKKyAqICBpZ2JfaW5pdF9yeF9hZGRycyAtIEluaXRpYWxpemUgcmVjZWl2ZSBhZGRyZXNzJ3MKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEByYXJfY291bnQ6IHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcnMKICAqCkBAIC0xNTgsMTIgKzE1NywxMiBAQAogCXUzMiBpOwogCiAJLyogU2V0dXAgdGhlIHJlY2VpdmUgYWRkcmVzcyAqLwotCWh3X2RiZyhodywgIlByb2dyYW1taW5nIE1BQyBBZGRyZXNzIGludG8gUkFSWzBdXG4iKTsKKwlod19kYmcoIlByb2dyYW1taW5nIE1BQyBBZGRyZXNzIGludG8gUkFSWzBdXG4iKTsKIAogCWh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIGh3LT5tYWMuYWRkciwgMCk7CiAKIAkvKiBaZXJvIG91dCB0aGUgb3RoZXIgKHJhcl9lbnRyeV9jb3VudCAtIDEpIHJlY2VpdmUgYWRkcmVzc2VzICovCi0JaHdfZGJnKGh3LCAiQ2xlYXJpbmcgUkFSWzEtJXVdXG4iLCByYXJfY291bnQtMSk7CisJaHdfZGJnKCJDbGVhcmluZyBSQVJbMS0ldV1cbiIsIHJhcl9jb3VudC0xKTsKIAlmb3IgKGkgPSAxOyBpIDwgcmFyX2NvdW50OyBpKyspIHsKIAkJYXJyYXlfd3IzMihFMTAwMF9SQSwgKGkgPDwgMSksIDApOwogCQl3cmZsKCk7CkBAIC0xNzMsNyArMTcyLDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfY2hlY2tfYWx0X21hY19hZGRyIC0gQ2hlY2sgZm9yIGFsdGVybmF0ZSBNQUMgYWRkcgorICogIGlnYl9jaGVja19hbHRfbWFjX2FkZHIgLSBDaGVjayBmb3IgYWx0ZXJuYXRlIE1BQyBhZGRyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgQ2hlY2tzIHRoZSBudm0gZm9yIGFuIGFsdGVybmF0ZSBNQUMgYWRkcmVzcy4gIEFuIGFsdGVybmF0ZSBNQUMgYWRkcmVzcwpAQCAtMTkzLDcgKzE5Miw3IEBACiAJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBOVk1fQUxUX01BQ19BRERSX1BUUiwgMSwKIAkJCQkgJm52bV9hbHRfbWFjX2FkZHJfb2Zmc2V0KTsKIAlpZiAocmV0X3ZhbCkgewotCQlod19kYmcoaHcsICJOVk0gUmVhZCBFcnJvclxuIik7CisJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIwOSw3ICsyMDgsNyBAQAogCQlvZmZzZXQgPSBudm1fYWx0X21hY19hZGRyX29mZnNldCArIChpID4+IDEpOwogCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIG9mZnNldCwgMSwgJm52bV9kYXRhKTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWh3X2RiZyhodywgIk5WTSBSZWFkIEVycm9yXG4iKTsKKwkJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMjMzLDcgKzIzMiw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3Jhcl9zZXQgLSBTZXQgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyCisgKiAgaWdiX3Jhcl9zZXQgLSBTZXQgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAYWRkcjogcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBhZGRyZXNzCiAgKiAgQGluZGV4OiByZWNlaXZlIGFkZHJlc3MgYXJyYXkgcmVnaXN0ZXIKQEAgLTI2Myw3ICsyNjIsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9tdGFfc2V0IC0gU2V0IG11bHRpY2FzdCBmaWx0ZXIgdGFibGUgYWRkcmVzcworICogIGlnYl9tdGFfc2V0IC0gU2V0IG11bHRpY2FzdCBmaWx0ZXIgdGFibGUgYWRkcmVzcwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQGhhc2hfdmFsdWU6IGRldGVybWluZXMgdGhlIE1UQSByZWdpc3RlciBhbmQgYml0IHRvIHNldAogICoKQEAgLTI5OCw3ICsyOTcsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0IC0gVXBkYXRlIE11bHRpY2FzdCBhZGRyZXNzZXMKKyAqICBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdCAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWNfYWRkcl9saXN0OiBhcnJheSBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KICAqICBAbWNfYWRkcl9jb3VudDogbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQpAQCAtMzM2LDcgKzMzNSw3IEBACiAJfQogCiAJLyogQ2xlYXIgdGhlIG9sZCBzZXR0aW5ncyBmcm9tIHRoZSBNVEEgKi8KLQlod19kYmcoaHcsICJDbGVhcmluZyBNVEFcbiIpOworCWh3X2RiZygiQ2xlYXJpbmcgTVRBXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgaHctPm1hYy5tdGFfcmVnX2NvdW50OyBpKyspIHsKIAkJYXJyYXlfd3IzMihFMTAwMF9NVEEsIGksIDApOwogCQl3cmZsKCk7CkBAIC0zNDUsMTQgKzM0NCwxNCBAQAogCS8qIExvYWQgYW55IHJlbWFpbmluZyBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gdGhlIGhhc2ggdGFibGUuICovCiAJZm9yICg7IG1jX2FkZHJfY291bnQgPiAwOyBtY19hZGRyX2NvdW50LS0pIHsKIAkJaGFzaF92YWx1ZSA9IGlnYl9oYXNoX21jX2FkZHIoaHcsIG1jX2FkZHJfbGlzdCk7Ci0JCWh3X2RiZyhodywgIkhhc2ggdmFsdWUgPSAweCUwM1hcbiIsIGhhc2hfdmFsdWUpOworCQlod19kYmcoIkhhc2ggdmFsdWUgPSAweCUwM1hcbiIsIGhhc2hfdmFsdWUpOwogCQlpZ2JfbXRhX3NldChodywgaGFzaF92YWx1ZSk7CiAJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKIAl9CiB9CiAKIC8qKgotICogIGUxMDAwX2hhc2hfbWNfYWRkciAtIEdlbmVyYXRlIGEgbXVsdGljYXN0IGhhc2ggdmFsdWUKKyAqICBpZ2JfaGFzaF9tY19hZGRyIC0gR2VuZXJhdGUgYSBtdWx0aWNhc3QgaGFzaCB2YWx1ZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG1jX2FkZHI6IHBvaW50ZXIgdG8gYSBtdWx0aWNhc3QgYWRkcmVzcwogICoKQEAgLTM2MCw3ICszNTksNyBAQAogICogIHRoZSBtdWx0aWNhc3QgZmlsdGVyIHRhYmxlIGFycmF5IGFkZHJlc3MgYW5kIG5ldyB0YWJsZSB2YWx1ZS4gIFNlZQogICogIGlnYl9tdGFfc2V0KCkKICAqKi8KLXN0YXRpYyB1MzIgaWdiX2hhc2hfbWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqbWNfYWRkcikKK3UzMiBpZ2JfaGFzaF9tY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICptY19hZGRyKQogewogCXUzMiBoYXNoX3ZhbHVlLCBoYXNoX21hc2s7CiAJdTggYml0X3NoaWZ0ID0gMDsKQEAgLTQyMyw3ICs0MjIsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9jbGVhcl9od19jbnRyc19iYXNlIC0gQ2xlYXIgYmFzZSBoYXJkd2FyZSBjb3VudGVycworICogIGlnYl9jbGVhcl9od19jbnRyc19iYXNlIC0gQ2xlYXIgYmFzZSBoYXJkd2FyZSBjb3VudGVycwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIENsZWFycyB0aGUgYmFzZSBoYXJkd2FyZSBjb3VudGVycyBieSByZWFkaW5nIHRoZSBjb3VudGVyIHJlZ2lzdGVycy4KQEAgLTQ3Miw3ICs0NzEsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9jaGVja19mb3JfY29wcGVyX2xpbmsgLSBDaGVjayBmb3IgbGluayAoQ29wcGVyKQorICogIGlnYl9jaGVja19mb3JfY29wcGVyX2xpbmsgLSBDaGVjayBmb3IgbGluayAoQ29wcGVyKQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIENoZWNrcyB0byBzZWUgb2YgdGhlIGxpbmsgc3RhdHVzIG9mIHRoZSBoYXJkd2FyZSBoYXMgY2hhbmdlZC4gIElmIGEKQEAgLTU0MCwxNCArNTM5LDE0IEBACiAJICovCiAJcmV0X3ZhbCA9IGlnYl9jb25maWdfZmNfYWZ0ZXJfbGlua191cChodyk7CiAJaWYgKHJldF92YWwpCi0JCWh3X2RiZyhodywgIkVycm9yIGNvbmZpZ3VyaW5nIGZsb3cgY29udHJvbFxuIik7CisJCWh3X2RiZygiRXJyb3IgY29uZmlndXJpbmcgZmxvdyBjb250cm9sXG4iKTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKLSAqICBlMTAwMF9zZXR1cF9saW5rIC0gU2V0dXAgZmxvdyBjb250cm9sIGFuZCBsaW5rIHNldHRpbmdzCisgKiAgaWdiX3NldHVwX2xpbmsgLSBTZXR1cCBmbG93IGNvbnRyb2wgYW5kIGxpbmsgc2V0dGluZ3MKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBEZXRlcm1pbmVzIHdoaWNoIGZsb3cgY29udHJvbCBzZXR0aW5ncyB0byB1c2UsIHRoZW4gY29uZmlndXJlcyBmbG93CkBAIC01NzgsNyArNTc3LDcgQEAKIAkgKi8KIAlody0+ZmMub3JpZ2luYWxfdHlwZSA9IGh3LT5mYy50eXBlOwogCi0JaHdfZGJnKGh3LCAiQWZ0ZXIgZml4LXVwcyBGbG93Q29udHJvbCBpcyBub3cgPSAleFxuIiwgaHctPmZjLnR5cGUpOworCWh3X2RiZygiQWZ0ZXIgZml4LXVwcyBGbG93Q29udHJvbCBpcyBub3cgPSAleFxuIiwgaHctPmZjLnR5cGUpOwogCiAJLyogQ2FsbCB0aGUgbmVjZXNzYXJ5IG1lZGlhX3R5cGUgc3Vicm91dGluZSB0byBjb25maWd1cmUgdGhlIGxpbmsuICovCiAJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLnNldHVwX3BoeXNpY2FsX2ludGVyZmFjZShodyk7CkBAIC01OTEsOCArNTkwLDcgQEAKIAkgKiBjb250cm9sIGlzIGRpc2FibGVkLCBiZWNhdXNlIGl0IGRvZXMgbm90IGh1cnQgYW55dGhpbmcgdG8KIAkgKiBpbml0aWFsaXplIHRoZXNlIHJlZ2lzdGVycy4KIAkgKi8KLQlod19kYmcoaHcsCi0JICAgICAgICJJbml0aWFsaXppbmcgdGhlIEZsb3cgQ29udHJvbCBhZGRyZXNzLCB0eXBlIGFuZCB0aW1lciByZWdzXG4iKTsKKwlod19kYmcoIkluaXRpYWxpemluZyB0aGUgRmxvdyBDb250cm9sIGFkZHJlc3MsIHR5cGUgYW5kIHRpbWVyIHJlZ3NcbiIpOwogCXdyMzIoRTEwMDBfRkNULCBGTE9XX0NPTlRST0xfVFlQRSk7CiAJd3IzMihFMTAwMF9GQ0FILCBGTE9XX0NPTlRST0xfQUREUkVTU19ISUdIKTsKIAl3cjMyKEUxMDAwX0ZDQUwsIEZMT1dfQ09OVFJPTF9BRERSRVNTX0xPVyk7CkBAIC02MDYsNyArNjA0LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfY29uZmlnX2NvbGxpc2lvbl9kaXN0IC0gQ29uZmlndXJlIGNvbGxpc2lvbiBkaXN0YW5jZQorICogIGlnYl9jb25maWdfY29sbGlzaW9uX2Rpc3QgLSBDb25maWd1cmUgY29sbGlzaW9uIGRpc3RhbmNlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgQ29uZmlndXJlcyB0aGUgY29sbGlzaW9uIGRpc3RhbmNlIHRvIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCBpcyB1c2VkCkBAIC02MjcsNyArNjI1LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfc2V0X2ZjX3dhdGVybWFya3MgLSBTZXQgZmxvdyBjb250cm9sIGhpZ2gvbG93IHdhdGVybWFya3MKKyAqICBpZ2Jfc2V0X2ZjX3dhdGVybWFya3MgLSBTZXQgZmxvdyBjb250cm9sIGhpZ2gvbG93IHdhdGVybWFya3MKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBTZXRzIHRoZSBmbG93IGNvbnRyb2wgaGlnaC9sb3cgdGhyZXNob2xkICh3YXRlcm1hcmspIHJlZ2lzdGVycy4gIElmCkBAIC02NjUsNyArNjYzLDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfc2V0X2RlZmF1bHRfZmMgLSBTZXQgZmxvdyBjb250cm9sIGRlZmF1bHQgdmFsdWVzCisgKiAgaWdiX3NldF9kZWZhdWx0X2ZjIC0gU2V0IGZsb3cgY29udHJvbCBkZWZhdWx0IHZhbHVlcwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFJlYWQgdGhlIEVFUFJPTSBmb3IgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBmbG93IGNvbnRyb2wgYW5kIHN0b3JlIHRoZQpAQCAtNjg5LDcgKzY4Nyw3IEBACiAJCQkJICAgICAgICZudm1fZGF0YSk7CiAKIAlpZiAocmV0X3ZhbCkgewotCQlod19kYmcoaHcsICJOVk0gUmVhZCBFcnJvclxuIik7CisJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTcwNiw3ICs3MDQsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9mb3JjZV9tYWNfZmMgLSBGb3JjZSB0aGUgTUFDJ3MgZmxvdyBjb250cm9sIHNldHRpbmdzCisgKiAgaWdiX2ZvcmNlX21hY19mYyAtIEZvcmNlIHRoZSBNQUMncyBmbG93IGNvbnRyb2wgc2V0dGluZ3MKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBGb3JjZSB0aGUgTUFDJ3MgZmxvdyBjb250cm9sIHNldHRpbmdzLiAgU2V0cyB0aGUgVEZDRSBhbmQgUkZDRSBiaXRzIGluIHRoZQpAQCAtNzQwLDcgKzczOCw3IEBACiAJICogICAgICAzOiAgQm90aCBSeCBhbmQgVFggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGlzIGVuYWJsZWQuCiAJICogIG90aGVyOiAgTm8gb3RoZXIgdmFsdWVzIHNob3VsZCBiZSBwb3NzaWJsZSBhdCB0aGlzIHBvaW50LgogCSAqLwotCWh3X2RiZyhodywgImh3LT5mYy50eXBlID0gJXVcbiIsIGh3LT5mYy50eXBlKTsKKwlod19kYmcoImh3LT5mYy50eXBlID0gJXVcbiIsIGh3LT5mYy50eXBlKTsKIAogCXN3aXRjaCAoaHctPmZjLnR5cGUpIHsKIAljYXNlIGUxMDAwX2ZjX25vbmU6CkBAIC03NTgsNyArNzU2LDcgQEAKIAkJY3RybCB8PSAoRTEwMDBfQ1RSTF9URkNFIHwgRTEwMDBfQ1RSTF9SRkNFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7CisJCWh3X2RiZygiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX0NPTkZJRzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzcwLDcgKzc2OCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX2NvbmZpZ19mY19hZnRlcl9saW5rX3VwIC0gQ29uZmlndXJlcyBmbG93IGNvbnRyb2wgYWZ0ZXIgbGluaworICogIGlnYl9jb25maWdfZmNfYWZ0ZXJfbGlua191cCAtIENvbmZpZ3VyZXMgZmxvdyBjb250cm9sIGFmdGVyIGxpbmsKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBDaGVja3MgdGhlIHN0YXR1cyBvZiBhdXRvLW5lZ290aWF0aW9uIGFmdGVyIGxpbmsgdXAgdG8gZW5zdXJlIHRoYXQgdGhlCkBAIC04MDEsNyArNzk5LDcgQEAKIAl9CiAKIAlpZiAocmV0X3ZhbCkgewotCQlod19kYmcoaHcsICJFcnJvciBmb3JjaW5nIGZsb3cgY29udHJvbCBzZXR0aW5nc1xuIik7CisJCWh3X2RiZygiRXJyb3IgZm9yY2luZyBmbG93IGNvbnRyb2wgc2V0dGluZ3NcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTgyNyw3ICs4MjUsNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJaWYgKCEobWlpX3N0YXR1c19yZWcgJiBNSUlfU1JfQVVUT05FR19DT01QTEVURSkpIHsKLQkJCWh3X2RiZyhodywgIkNvcHBlciBQSFkgYW5kIEF1dG8gTmVnICIKKwkJCWh3X2RiZygiQ29wcGVyIFBIWSBhbmQgQXV0byBOZWcgIgogCQkJCSAiaGFzIG5vdCBjb21wbGV0ZWQuXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC04OTMsMTEgKzg5MSwxMSBAQAogCQkJICovCiAJCQlpZiAoaHctPmZjLm9yaWdpbmFsX3R5cGUgPT0gZTEwMDBfZmNfZnVsbCkgewogCQkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZnVsbDsKLQkJCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBGVUxMLlxyXG4iKTsKKwkJCQlod19kYmcoIkZsb3cgQ29udHJvbCA9IEZVTEwuXHJcbiIpOwogCQkJfSBlbHNlIHsKIAkJCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX3J4X3BhdXNlOwotCQkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9ICIKLQkJCQkJICJSWCBQQVVTRSBmcmFtZXMgb25seS5cclxuIik7CisJCQkJaHdfZGJnKCJGbG93IENvbnRyb2wgPSAiCisJCQkJICAgICAgICJSWCBQQVVTRSBmcmFtZXMgb25seS5cclxuIik7CiAJCQl9CiAJCX0KIAkJLyoKQEAgLTkxMyw3ICs5MTEsNyBAQAogCQkJICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfUEFVU0UpICYmCiAJCQkgIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9BU01fRElSKSkgewogCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY190eF9wYXVzZTsKLQkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IFRYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKKwkJCWh3X2RiZygiRmxvdyBDb250cm9sID0gVFggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOwogCQl9CiAJCS8qCiAJCSAqIEZvciB0cmFuc21pdHRpbmcgUEFVU0UgZnJhbWVzIE9OTFkuCkBAIC05MjgsNyArOTI2LDcgQEAKIAkJCSAhKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSAmJgogCQkJIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9BU01fRElSKSkgewogCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKLQkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKKwkJCWh3X2RiZygiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOwogCQl9CiAJCS8qCiAJCSAqIFBlciB0aGUgSUVFRSBzcGVjLCBhdCB0aGlzIHBvaW50IGZsb3cgY29udHJvbCBzaG91bGQgYmUKQEAgLTk1NSwxMCArOTUzLDEwIEBACiAJCQkgIGh3LT5mYy5vcmlnaW5hbF90eXBlID09IGUxMDAwX2ZjX3R4X3BhdXNlKSB8fAogCQkJIGh3LT5mYy5zdHJpY3RfaWVlZSkgewogCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19ub25lOwotCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gTk9ORS5cclxuIik7CisJCQlod19kYmcoIkZsb3cgQ29udHJvbCA9IE5PTkUuXHJcbiIpOwogCQl9IGVsc2UgewogCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKLQkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKKwkJCWh3X2RiZygiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOwogCQl9CiAKIAkJLyoKQEAgLTk2OCw3ICs5NjYsNyBAQAogCQkgKi8KIAkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmdldF9zcGVlZF9hbmRfZHVwbGV4KGh3LCAmc3BlZWQsICZkdXBsZXgpOwogCQlpZiAocmV0X3ZhbCkgewotCQkJaHdfZGJnKGh3LCAiRXJyb3IgZ2V0dGluZyBsaW5rIHNwZWVkIGFuZCBkdXBsZXhcbiIpOworCQkJaHdfZGJnKCJFcnJvciBnZXR0aW5nIGxpbmsgc3BlZWQgYW5kIGR1cGxleFxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC05ODEsNyArOTc5LDcgQEAKIAkJICovCiAJCXJldF92YWwgPSBpZ2JfZm9yY2VfbWFjX2ZjKGh3KTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWh3X2RiZyhodywgIkVycm9yIGZvcmNpbmcgZmxvdyBjb250cm9sIHNldHRpbmdzXG4iKTsKKwkJCWh3X2RiZygiRXJyb3IgZm9yY2luZyBmbG93IGNvbnRyb2wgc2V0dGluZ3NcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC05OTEsNyArOTg5LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfY29wcGVyIC0gUmV0cmVpdmUgY3VycmVudCBzcGVlZC9kdXBsZXgKKyAqICBpZ2JfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfY29wcGVyIC0gUmV0cmVpdmUgY3VycmVudCBzcGVlZC9kdXBsZXgKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBzcGVlZDogc3RvcmVzIHRoZSBjdXJyZW50IHNwZWVkCiAgKiAgQGR1cGxleDogc3RvcmVzIHRoZSBjdXJyZW50IGR1cGxleApAQCAtMTAwNywyOCArMTAwNSwyOCBAQAogCXN0YXR1cyA9IHJkMzIoRTEwMDBfU1RBVFVTKTsKIAlpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX1NQRUVEXzEwMDApIHsKIAkJKnNwZWVkID0gU1BFRURfMTAwMDsKLQkJaHdfZGJnKGh3LCAiMTAwMCBNYnMsICIpOworCQlod19kYmcoIjEwMDAgTWJzLCAiKTsKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDApIHsKIAkJKnNwZWVkID0gU1BFRURfMTAwOwotCQlod19kYmcoaHcsICIxMDAgTWJzLCAiKTsKKwkJaHdfZGJnKCIxMDAgTWJzLCAiKTsKIAl9IGVsc2UgewogCQkqc3BlZWQgPSBTUEVFRF8xMDsKLQkJaHdfZGJnKGh3LCAiMTAgTWJzLCAiKTsKKwkJaHdfZGJnKCIxMCBNYnMsICIpOwogCX0KIAogCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfRkQpIHsKIAkJKmR1cGxleCA9IEZVTExfRFVQTEVYOwotCQlod19kYmcoaHcsICJGdWxsIER1cGxleFxuIik7CisJCWh3X2RiZygiRnVsbCBEdXBsZXhcbiIpOwogCX0gZWxzZSB7CiAJCSpkdXBsZXggPSBIQUxGX0RVUExFWDsKLQkJaHdfZGJnKGh3LCAiSGFsZiBEdXBsZXhcbiIpOworCQlod19kYmcoIkhhbGYgRHVwbGV4XG4iKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiAgZTEwMDBfZ2V0X2h3X3NlbWFwaG9yZSAtIEFjcXVpcmUgaGFyZHdhcmUgc2VtYXBob3JlCisgKiAgaWdiX2dldF9od19zZW1hcGhvcmUgLSBBY3F1aXJlIGhhcmR3YXJlIHNlbWFwaG9yZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIEFjcXVpcmUgdGhlIEhXIHNlbWFwaG9yZSB0byBhY2Nlc3MgdGhlIFBIWSBvciBOVk0KQEAgLTEwNTEsNyArMTA0OSw3IEBACiAJfQogCiAJaWYgKGkgPT0gdGltZW91dCkgewotCQlod19kYmcoaHcsICJEcml2ZXIgY2FuJ3QgYWNjZXNzIGRldmljZSAtIFNNQkkgYml0IGlzIHNldC5cbiIpOworCQlod19kYmcoIkRyaXZlciBjYW4ndCBhY2Nlc3MgZGV2aWNlIC0gU01CSSBiaXQgaXMgc2V0LlxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX05WTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTA3MSw3ICsxMDY5LDcgQEAKIAlpZiAoaSA9PSB0aW1lb3V0KSB7CiAJCS8qIFJlbGVhc2Ugc2VtYXBob3JlcyAqLwogCQlpZ2JfcHV0X2h3X3NlbWFwaG9yZShodyk7Ci0JCWh3X2RiZyhodywgIkRyaXZlciBjYW4ndCBhY2Nlc3MgdGhlIE5WTVxuIik7CisJCWh3X2RiZygiRHJpdmVyIGNhbid0IGFjY2VzcyB0aGUgTlZNXG4iKTsKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTlZNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMDgxLDcgKzEwNzksNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9wdXRfaHdfc2VtYXBob3JlIC0gUmVsZWFzZSBoYXJkd2FyZSBzZW1hcGhvcmUKKyAqICBpZ2JfcHV0X2h3X3NlbWFwaG9yZSAtIFJlbGVhc2UgaGFyZHdhcmUgc2VtYXBob3JlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgUmVsZWFzZSBoYXJkd2FyZSBzZW1hcGhvcmUgdXNlZCB0byBhY2Nlc3MgdGhlIFBIWSBvciBOVk0KQEAgLTEwOTgsNyArMTA5Niw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX2dldF9hdXRvX3JkX2RvbmUgLSBDaGVjayBmb3IgYXV0byByZWFkIGNvbXBsZXRpb24KKyAqICBpZ2JfZ2V0X2F1dG9fcmRfZG9uZSAtIENoZWNrIGZvciBhdXRvIHJlYWQgY29tcGxldGlvbgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIENoZWNrIEVFUFJPTSBmb3IgQXV0byBSZWFkIGRvbmUgYml0LgpAQCAtMTExNyw3ICsxMTE1LDcgQEAKIAl9CiAKIAlpZiAoaSA9PSBBVVRPX1JFQURfRE9ORV9USU1FT1VUKSB7Ci0JCWh3X2RiZyhodywgIkF1dG8gcmVhZCBieSBIVyBmcm9tIE5WTSBoYXMgbm90IGNvbXBsZXRlZC5cbiIpOworCQlod19kYmcoIkF1dG8gcmVhZCBieSBIVyBmcm9tIE5WTSBoYXMgbm90IGNvbXBsZXRlZC5cbiIpOwogCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9SRVNFVDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTEyNyw3ICsxMTI1LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfdmFsaWRfbGVkX2RlZmF1bHQgLSBWZXJpZnkgYSB2YWxpZCBkZWZhdWx0IExFRCBjb25maWcKKyAqICBpZ2JfdmFsaWRfbGVkX2RlZmF1bHQgLSBWZXJpZnkgYSB2YWxpZCBkZWZhdWx0IExFRCBjb25maWcKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBOVk0gKEVFUFJPTSkKICAqCkBAIC0xMTQwLDcgKzExMzgsNyBAQAogCiAJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBOVk1fSURfTEVEX1NFVFRJTkdTLCAxLCBkYXRhKTsKIAlpZiAocmV0X3ZhbCkgewotCQlod19kYmcoaHcsICJOVk0gUmVhZCBFcnJvclxuIik7CisJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTExNTIsNyArMTE1MCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX2lkX2xlZF9pbml0IC0KKyAqICBpZ2JfaWRfbGVkX2luaXQgLQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICoqLwpAQCAtMTIxNyw3ICsxMjE1LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfY2xlYW51cF9sZWQgLSBTZXQgTEVEIGNvbmZpZyB0byBkZWZhdWx0IG9wZXJhdGlvbgorICogIGlnYl9jbGVhbnVwX2xlZCAtIFNldCBMRUQgY29uZmlnIHRvIGRlZmF1bHQgb3BlcmF0aW9uCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgUmVtb3ZlIHRoZSBjdXJyZW50IExFRCBjb25maWd1cmF0aW9uIGFuZCBzZXQgdGhlIExFRCBjb25maWd1cmF0aW9uCkBAIC0xMjMwLDcgKzEyMjgsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9ibGlua19sZWQgLSBCbGluayBMRUQKKyAqICBpZ2JfYmxpbmtfbGVkIC0gQmxpbmsgTEVECiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgQmxpbmsgdGhlIGxlZCdzIHdoaWNoIGFyZSBzZXQgdG8gYmUgb24uCkBAIC0xMjYzLDcgKzEyNjEsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9sZWRfb2ZmIC0gVHVybiBMRUQgb2ZmCisgKiAgaWdiX2xlZF9vZmYgLSBUdXJuIExFRCBvZmYKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBUdXJuIExFRCBvZmYuCkBAIC0xMjkwLDcgKzEyODgsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9kaXNhYmxlX3BjaWVfbWFzdGVyIC0gRGlzYWJsZXMgUENJLWV4cHJlc3MgbWFzdGVyIGFjY2VzcworICogIGlnYl9kaXNhYmxlX3BjaWVfbWFzdGVyIC0gRGlzYWJsZXMgUENJLWV4cHJlc3MgbWFzdGVyIGFjY2VzcwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFJldHVybnMgMCAoMCkgaWYgc3VjY2Vzc2Z1bCwgZWxzZSByZXR1cm5zIC0xMApAQCAtMTMyMiw3ICsxMzIwLDcgQEAKIAl9CiAKIAlpZiAoIXRpbWVvdXQpIHsKLQkJaHdfZGJnKGh3LCAiTWFzdGVyIHJlcXVlc3RzIGFyZSBwZW5kaW5nLlxuIik7CisJCWh3X2RiZygiTWFzdGVyIHJlcXVlc3RzIGFyZSBwZW5kaW5nLlxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX01BU1RFUl9SRVFVRVNUU19QRU5ESU5HOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMzMyLDcgKzEzMzAsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9yZXNldF9hZGFwdGl2ZSAtIFJlc2V0IEFkYXB0aXZlIEludGVyZnJhbWUgU3BhY2luZworICogIGlnYl9yZXNldF9hZGFwdGl2ZSAtIFJlc2V0IEFkYXB0aXZlIEludGVyZnJhbWUgU3BhY2luZwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFJlc2V0IHRoZSBBZGFwdGl2ZSBJbnRlcmZyYW1lIFNwYWNpbmcgdGhyb3R0bGUgdG8gZGVmYXVsdCB2YWx1ZXMuCkBAIC0xMzQyLDcgKzEzNDAsNyBAQAogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CiAKIAlpZiAoIW1hYy0+YWRhcHRpdmVfaWZzKSB7Ci0JCWh3X2RiZyhodywgIk5vdCBpbiBBZGFwdGl2ZSBJRlMgbW9kZSFcbiIpOworCQlod19kYmcoIk5vdCBpbiBBZGFwdGl2ZSBJRlMgbW9kZSFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEzNjEsNyArMTM1OSw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3VwZGF0ZV9hZGFwdGl2ZSAtIFVwZGF0ZSBBZGFwdGl2ZSBJbnRlcmZyYW1lIFNwYWNpbmcKKyAqICBpZ2JfdXBkYXRlX2FkYXB0aXZlIC0gVXBkYXRlIEFkYXB0aXZlIEludGVyZnJhbWUgU3BhY2luZwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFVwZGF0ZSB0aGUgQWRhcHRpdmUgSW50ZXJmcmFtZSBTcGFjaW5nIFRocm90dGxlIHZhbHVlIGJhc2VkIG9uIHRoZQpAQCAtMTM3Miw3ICsxMzcwLDcgQEAKIAlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCiAJaWYgKCFtYWMtPmFkYXB0aXZlX2lmcykgewotCQlod19kYmcoaHcsICJOb3QgaW4gQWRhcHRpdmUgSUZTIG1vZGUhXG4iKTsKKwkJaHdfZGJnKCJOb3QgaW4gQWRhcHRpdmUgSUZTIG1vZGUhXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNDAyLDcgKzE0MDAsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF92YWxpZGF0ZV9tZGlfc2V0dGluZyAtIFZlcmlmeSBNREkvTURJeCBzZXR0aW5ncworICogIGlnYl92YWxpZGF0ZV9tZGlfc2V0dGluZyAtIFZlcmlmeSBNREkvTURJeCBzZXR0aW5ncwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFZlcmlmeSB0aGF0IHdoZW4gbm90IHVzaW5nIGF1dG8tbmVnb3RpdGF0aW9uIHRoYXQgTURJL01ESXggaXMgY29ycmVjdGx5CkBAIC0xNDEzLDcgKzE0MTEsNyBAQAogCXMzMiByZXRfdmFsID0gMDsKIAogCWlmICghaHctPm1hYy5hdXRvbmVnICYmIChody0+cGh5Lm1kaXggPT0gMCB8fCBody0+cGh5Lm1kaXggPT0gMykpIHsKLQkJaHdfZGJnKGh3LCAiSW52YWxpZCBNREkgc2V0dGluZyBkZXRlY3RlZFxuIik7CisJCWh3X2RiZygiSW52YWxpZCBNREkgc2V0dGluZyBkZXRlY3RlZFxuIik7CiAJCWh3LT5waHkubWRpeCA9IDE7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX0NPTkZJRzsKIAkJZ290byBvdXQ7CkBAIC0xNDI0LDcgKzE0MjIsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF93cml0ZV84Yml0X2N0cmxfcmVnIC0gV3JpdGUgYSA4Yml0IENUUkwgcmVnaXN0ZXIKKyAqICBpZ2Jfd3JpdGVfOGJpdF9jdHJsX3JlZyAtIFdyaXRlIGEgOGJpdCBDVFJMIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAcmVnOiAzMmJpdCByZWdpc3RlciBvZmZzZXQgc3VjaCBhcyBFMTAwMF9TQ1RMCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCkBAIC0xNDUyLDcgKzE0NTAsNyBAQAogCQkJYnJlYWs7CiAJfQogCWlmICghKHJlZ3ZhbHVlICYgRTEwMDBfR0VOX0NUTF9SRUFEWSkpIHsKLQkJaHdfZGJnKGh3LCAiUmVnICUwOHggZGlkIG5vdCBpbmRpY2F0ZSByZWFkeVxuIiwgcmVnKTsKKwkJaHdfZGJnKCJSZWcgJTA4eCBkaWQgbm90IGluZGljYXRlIHJlYWR5XG4iLCByZWcpOwogCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9QSFk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE0NjIsNyArMTQ2MCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX2VuYWJsZV9tbmdfcGFzc190aHJ1IC0gRW5hYmxlIHByb2Nlc3Npbmcgb2YgQVJQJ3MKKyAqICBpZ2JfZW5hYmxlX21uZ19wYXNzX3RocnUgLSBFbmFibGUgcHJvY2Vzc2luZyBvZiBBUlAncwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFZlcmlmaWVzIHRoZSBoYXJkd2FyZSBuZWVkcyB0byBhbGxvdyBBUlBzIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgaG9zdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaAppbmRleCAzMjZiNjU5Li5kYzJmOGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCkBAIC05NCw1ICs5NCw2IEBACiAjZGVmaW5lIEUxMDAwX0hJQ1JfQyAgICAgICAgICAgICAgIDB4MDIKIAogZXh0ZXJuIHZvaWQgZTEwMDBfaW5pdF9mdW5jdGlvbl9wb2ludGVyc184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK2V4dGVybiB1MzIgaWdiX2hhc2hfbWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqbWNfYWRkcik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX252bS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX252bS5jCmluZGV4IDI4OTcxMDYuLmE4NGU0ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJlMTAwMF9udm0uaCIKIAogLyoqCi0gKiAgZTEwMDBfcmFpc2VfZWVjX2NsayAtIFJhaXNlIEVFUFJPTSBjbG9jaworICogIGlnYl9yYWlzZV9lZWNfY2xrIC0gUmFpc2UgRUVQUk9NIGNsb2NrCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAZWVjZDogcG9pbnRlciB0byB0aGUgRUVQUk9NCiAgKgpAQCAtNDcsNyArNDcsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9sb3dlcl9lZWNfY2xrIC0gTG93ZXIgRUVQUk9NIGNsb2NrCisgKiAgaWdiX2xvd2VyX2VlY19jbGsgLSBMb3dlciBFRVBST00gY2xvY2sKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBlZWNkOiBwb2ludGVyIHRvIHRoZSBFRVBST00KICAqCkBAIC02Miw3ICs2Miw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3NoaWZ0X291dF9lZWNfYml0cyAtIFNoaWZ0IGRhdGEgYml0cyBvdXIgdG8gdGhlIEVFUFJPTQorICogIGlnYl9zaGlmdF9vdXRfZWVjX2JpdHMgLSBTaGlmdCBkYXRhIGJpdHMgb3VyIHRvIHRoZSBFRVBST00KICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBkYXRhOiBkYXRhIHRvIHNlbmQgdG8gdGhlIEVFUFJPTQogICogIEBjb3VudDogbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgb3V0CkBAIC0xMDUsNyArMTA1LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfc2hpZnRfaW5fZWVjX2JpdHMgLSBTaGlmdCBkYXRhIGJpdHMgaW4gZnJvbSB0aGUgRUVQUk9NCisgKiAgaWdiX3NoaWZ0X2luX2VlY19iaXRzIC0gU2hpZnQgZGF0YSBiaXRzIGluIGZyb20gdGhlIEVFUFJPTQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQGNvdW50OiBudW1iZXIgb2YgYml0cyB0byBzaGlmdCBpbgogICoKQEAgLTE0Myw3ICsxNDMsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9wb2xsX2VlcmRfZWV3cl9kb25lIC0gUG9sbCBmb3IgRUVQUk9NIHJlYWQvd3JpdGUgY29tcGxldGlvbgorICogIGlnYl9wb2xsX2VlcmRfZWV3cl9kb25lIC0gUG9sbCBmb3IgRUVQUk9NIHJlYWQvd3JpdGUgY29tcGxldGlvbgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQGVlX3JlZzogRUVQUk9NIGZsYWcgZm9yIHBvbGxpbmcKICAqCkBAIC0xNzQsNyArMTc0LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfYWNxdWlyZV9udm0gLSBHZW5lcmljIHJlcXVlc3QgZm9yIGFjY2VzcyB0byBFRVBST00KKyAqICBpZ2JfYWNxdWlyZV9udm0gLSBHZW5lcmljIHJlcXVlc3QgZm9yIGFjY2VzcyB0byBFRVBST00KICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBTZXQgdGhlIEVFUFJPTSBhY2Nlc3MgcmVxdWVzdCBiaXQgYW5kIHdhaXQgZm9yIEVFUFJPTSBhY2Nlc3MgZ3JhbnQgYml0LgpAQCAtMjAyLDcgKzIwMiw3IEBACiAJaWYgKCF0aW1lb3V0KSB7CiAJCWVlY2QgJj0gfkUxMDAwX0VFQ0RfUkVROwogCQl3cjMyKEUxMDAwX0VFQ0QsIGVlY2QpOwotCQlod19kYmcoaHcsICJDb3VsZCBub3QgYWNxdWlyZSBOVk0gZ3JhbnRcbiIpOworCQlod19kYmcoIkNvdWxkIG5vdCBhY3F1aXJlIE5WTSBncmFudFxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX05WTTsKIAl9CiAKQEAgLTIxMCw3ICsyMTAsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9zdGFuZGJ5X252bSAtIFJldHVybiBFRVBST00gdG8gc3RhbmRieSBzdGF0ZQorICogIGlnYl9zdGFuZGJ5X252bSAtIFJldHVybiBFRVBST00gdG8gc3RhbmRieSBzdGF0ZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFJldHVybiB0aGUgRUVQUk9NIHRvIGEgc3RhbmRieSBzdGF0ZS4KQEAgLTI3Myw3ICsyNzMsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9yZWxlYXNlX252bSAtIFJlbGVhc2UgZXhjbHVzaXZlIGFjY2VzcyB0byBFRVBST00KKyAqICBpZ2JfcmVsZWFzZV9udm0gLSBSZWxlYXNlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gRUVQUk9NCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgU3RvcCBhbnkgY3VycmVudCBjb21tYW5kcyB0byB0aGUgRUVQUk9NIGFuZCBjbGVhciB0aGUgRUVQUk9NIHJlcXVlc3QgYml0LgpAQCAtMjkwLDcgKzI5MCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3JlYWR5X252bV9lZXByb20gLSBQcmVwYXJlcyBFRVBST00gZm9yIHJlYWQvd3JpdGUKKyAqICBpZ2JfcmVhZHlfbnZtX2VlcHJvbSAtIFByZXBhcmVzIEVFUFJPTSBmb3IgcmVhZC93cml0ZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFNldHVwcyB0aGUgRUVQUk9NIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLgpAQCAtMzM3LDcgKzMzNyw3IEBACiAJCX0KIAogCQlpZiAoIXRpbWVvdXQpIHsKLQkJCWh3X2RiZyhodywgIlNQSSBOVk0gU3RhdHVzIGVycm9yXG4iKTsKKwkJCWh3X2RiZygiU1BJIE5WTSBTdGF0dXMgZXJyb3JcbiIpOwogCQkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTlZNOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTM0OCw3ICszNDgsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9yZWFkX252bV9lZXJkIC0gUmVhZHMgRUVQUk9NIHVzaW5nIEVFUkQgcmVnaXN0ZXIKKyAqICBpZ2JfcmVhZF9udm1fZWVyZCAtIFJlYWRzIEVFUFJPTSB1c2luZyBFRVJEIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAb2Zmc2V0OiBvZmZzZXQgb2Ygd29yZCBpbiB0aGUgRUVQUk9NIHRvIHJlYWQKICAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkcyB0byByZWFkCkBAIC0zNjgsNyArMzY4LDcgQEAKIAkgKi8KIAlpZiAoKG9mZnNldCA+PSBudm0tPndvcmRfc2l6ZSkgfHwgKHdvcmRzID4gKG52bS0+d29yZF9zaXplIC0gb2Zmc2V0KSkgfHwKIAkgICAgKHdvcmRzID09IDApKSB7Ci0JCWh3X2RiZyhodywgIm52bSBwYXJhbWV0ZXIocykgb3V0IG9mIGJvdW5kc1xuIik7CisJCWh3X2RiZygibnZtIHBhcmFtZXRlcihzKSBvdXQgb2YgYm91bmRzXG4iKTsKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTlZNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zOTEsNyArMzkxLDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfd3JpdGVfbnZtX3NwaSAtIFdyaXRlIHRvIEVFUFJPTSB1c2luZyBTUEkKKyAqICBpZ2Jfd3JpdGVfbnZtX3NwaSAtIFdyaXRlIHRvIEVFUFJPTSB1c2luZyBTUEkKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSB3cml0dGVuIHRvCiAgKiAgQHdvcmRzOiBudW1iZXIgb2Ygd29yZHMgdG8gd3JpdGUKQEAgLTQxNCw3ICs0MTQsNyBAQAogCSAqLwogCWlmICgob2Zmc2V0ID49IG52bS0+d29yZF9zaXplKSB8fCAod29yZHMgPiAobnZtLT53b3JkX3NpemUgLSBvZmZzZXQpKSB8fAogCSAgICAod29yZHMgPT0gMCkpIHsKLQkJaHdfZGJnKGh3LCAibnZtIHBhcmFtZXRlcihzKSBvdXQgb2YgYm91bmRzXG4iKTsKKwkJaHdfZGJnKCJudm0gcGFyYW1ldGVyKHMpIG91dCBvZiBib3VuZHNcbiIpOwogCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9OVk07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQ3NSw3ICs0NzUsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9yZWFkX3BhcnRfbnVtIC0gUmVhZCBkZXZpY2UgcGFydCBudW1iZXIKKyAqICBpZ2JfcmVhZF9wYXJ0X251bSAtIFJlYWQgZGV2aWNlIHBhcnQgbnVtYmVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAcGFydF9udW06IHBvaW50ZXIgdG8gZGV2aWNlIHBhcnQgbnVtYmVyCiAgKgpAQCAtNDg5LDE0ICs0ODksMTQgQEAKIAogCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX1BCQV9PRkZTRVRfMCwgMSwgJm52bV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkgewotCQlod19kYmcoaHcsICJOVk0gUmVhZCBFcnJvclxuIik7CisJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJKnBhcnRfbnVtID0gKHUzMikobnZtX2RhdGEgPDwgMTYpOwogCiAJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBOVk1fUEJBX09GRlNFVF8xLCAxLCAmbnZtX2RhdGEpOwogCWlmIChyZXRfdmFsKSB7Ci0JCWh3X2RiZyhodywgIk5WTSBSZWFkIEVycm9yXG4iKTsKKwkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAkqcGFydF9udW0gfD0gbnZtX2RhdGE7CkBAIC01MDYsNyArNTA2LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfcmVhZF9tYWNfYWRkciAtIFJlYWQgZGV2aWNlIE1BQyBhZGRyZXNzCisgKiAgaWdiX3JlYWRfbWFjX2FkZHIgLSBSZWFkIGRldmljZSBNQUMgYWRkcmVzcwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFJlYWRzIHRoZSBkZXZpY2UgTUFDIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NIGFuZCBzdG9yZXMgdGhlIHZhbHVlLgpAQCAtNTIyLDcgKzUyMiw3IEBACiAJCW9mZnNldCA9IGkgPj4gMTsKIAkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBvZmZzZXQsIDEsICZudm1fZGF0YSk7CiAJCWlmIChyZXRfdmFsKSB7Ci0JCQlod19kYmcoaHcsICJOVk0gUmVhZCBFcnJvclxuIik7CisJCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWh3LT5tYWMucGVybV9hZGRyW2ldID0gKHU4KShudm1fZGF0YSAmIDB4RkYpOwpAQCAtNTQxLDcgKzU0MSw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3ZhbGlkYXRlX252bV9jaGVja3N1bSAtIFZhbGlkYXRlIEVFUFJPTSBjaGVja3N1bQorICogIGlnYl92YWxpZGF0ZV9udm1fY2hlY2tzdW0gLSBWYWxpZGF0ZSBFRVBST00gY2hlY2tzdW0KICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBDYWxjdWxhdGVzIHRoZSBFRVBST00gY2hlY2tzdW0gYnkgcmVhZGluZy9hZGRpbmcgZWFjaCB3b3JkIG9mIHRoZSBFRVBST00KQEAgLTU1NiwxNCArNTU2LDE0IEBACiAJZm9yIChpID0gMDsgaSA8IChOVk1fQ0hFQ0tTVU1fUkVHICsgMSk7IGkrKykgewogCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGksIDEsICZudm1fZGF0YSk7CiAJCWlmIChyZXRfdmFsKSB7Ci0JCQlod19kYmcoaHcsICJOVk0gUmVhZCBFcnJvclxuIik7CisJCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWNoZWNrc3VtICs9IG52bV9kYXRhOwogCX0KIAogCWlmIChjaGVja3N1bSAhPSAodTE2KSBOVk1fU1VNKSB7Ci0JCWh3X2RiZyhodywgIk5WTSBDaGVja3N1bSBJbnZhbGlkXG4iKTsKKwkJaHdfZGJnKCJOVk0gQ2hlY2tzdW0gSW52YWxpZFxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX05WTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNTczLDcgKzU3Myw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3VwZGF0ZV9udm1fY2hlY2tzdW0gLSBVcGRhdGUgRUVQUk9NIGNoZWNrc3VtCisgKiAgaWdiX3VwZGF0ZV9udm1fY2hlY2tzdW0gLSBVcGRhdGUgRUVQUk9NIGNoZWNrc3VtCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgVXBkYXRlcyB0aGUgRUVQUk9NIGNoZWNrc3VtIGJ5IHJlYWRpbmcvYWRkaW5nIGVhY2ggd29yZCBvZiB0aGUgRUVQUk9NCkBAIC01ODksNyArNTg5LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTlZNX0NIRUNLU1VNX1JFRzsgaSsrKSB7CiAJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgaSwgMSwgJm52bV9kYXRhKTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWh3X2RiZyhodywgIk5WTSBSZWFkIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNoZWNrc3VtLlxuIik7CisJCQlod19kYmcoIk5WTSBSZWFkIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNoZWNrc3VtLlxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQljaGVja3N1bSArPSBudm1fZGF0YTsKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCWNoZWNrc3VtID0gKHUxNikgTlZNX1NVTSAtIGNoZWNrc3VtOwogCXJldF92YWwgPSBody0+bnZtLm9wcy53cml0ZV9udm0oaHcsIE5WTV9DSEVDS1NVTV9SRUcsIDEsICZjaGVja3N1bSk7CiAJaWYgKHJldF92YWwpCi0JCWh3X2RiZyhodywgIk5WTSBXcml0ZSBFcnJvciB3aGlsZSB1cGRhdGluZyBjaGVja3N1bS5cbiIpOworCQlod19kYmcoIk5WTSBXcml0ZSBFcnJvciB3aGlsZSB1cGRhdGluZyBjaGVja3N1bS5cbiIpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKaW5kZXggMDhhODZiMS4uMTdmZGRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYwpAQCAtNjEsNyArNjEsNyBAQAogCQkgc2l6ZW9mKGUxMDAwX2lncF8yX2NhYmxlX2xlbmd0aF90YWJsZVswXSkpCiAKIC8qKgotICogIGUxMDAwX2NoZWNrX3Jlc2V0X2Jsb2NrIC0gQ2hlY2sgaWYgUEhZIHJlc2V0IGlzIGJsb2NrZWQKKyAqICBpZ2JfY2hlY2tfcmVzZXRfYmxvY2sgLSBDaGVjayBpZiBQSFkgcmVzZXQgaXMgYmxvY2tlZAogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFJlYWQgdGhlIFBIWSBtYW5hZ2VtZW50IGNvbnRyb2wgcmVnaXN0ZXIgYW5kIGNoZWNrIHdoZXRoZXIgYSBQSFkgcmVzZXQKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfZ2V0X3BoeV9pZCAtIFJldHJpZXZlIHRoZSBQSFkgSUQgYW5kIHJldmlzaW9uCisgKiAgaWdiX2dldF9waHlfaWQgLSBSZXRyaWV2ZSB0aGUgUEhZIElEIGFuZCByZXZpc2lvbgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFJlYWRzIHRoZSBQSFkgcmVnaXN0ZXJzIGFuZCBzdG9yZXMgdGhlIFBIWSBJRCBhbmQgcG9zc2libHkgdGhlIFBIWQpAQCAtMTA5LDcgKzEwOSw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3BoeV9yZXNldF9kc3AgLSBSZXNldCBQSFkgRFNQCisgKiAgaWdiX3BoeV9yZXNldF9kc3AgLSBSZXNldCBQSFkgRFNQCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgUmVzZXQgdGhlIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3Nvci4KQEAgLTEyOSw3ICsxMjksNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9yZWFkX3BoeV9yZWdfbWRpYyAtIFJlYWQgTURJIGNvbnRyb2wgcmVnaXN0ZXIKKyAqICBpZ2JfcmVhZF9waHlfcmVnX21kaWMgLSBSZWFkIE1ESSBjb250cm9sIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVhZAogICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKQEAgLTE0NCw3ICsxNDQsNyBAQAogCXMzMiByZXRfdmFsID0gMDsKIAogCWlmIChvZmZzZXQgPiBNQVhfUEhZX1JFR19BRERSRVNTKSB7Ci0JCWh3X2RiZyhodywgIlBIWSBBZGRyZXNzICVkIGlzIG91dCBvZiByYW5nZVxuIiwgb2Zmc2V0KTsKKwkJaHdfZGJnKCJQSFkgQWRkcmVzcyAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsIG9mZnNldCk7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX1BBUkFNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNzIsMTIgKzE3MiwxMiBAQAogCQkJYnJlYWs7CiAJfQogCWlmICghKG1kaWMgJiBFMTAwMF9NRElDX1JFQURZKSkgewotCQlod19kYmcoaHcsICJNREkgUmVhZCBkaWQgbm90IGNvbXBsZXRlXG4iKTsKKwkJaHdfZGJnKCJNREkgUmVhZCBkaWQgbm90IGNvbXBsZXRlXG4iKTsKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEhZOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKG1kaWMgJiBFMTAwMF9NRElDX0VSUk9SKSB7Ci0JCWh3X2RiZyhodywgIk1ESSBFcnJvclxuIik7CisJCWh3X2RiZygiTURJIEVycm9yXG4iKTsKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEhZOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODgsNyArMTg4LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfd3JpdGVfcGh5X3JlZ19tZGljIC0gV3JpdGUgTURJIGNvbnRyb2wgcmVnaXN0ZXIKKyAqICBpZ2Jfd3JpdGVfcGh5X3JlZ19tZGljIC0gV3JpdGUgTURJIGNvbnRyb2wgcmVnaXN0ZXIKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bwogICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIHRvIHJlZ2lzdGVyIGF0IG9mZnNldApAQCAtMjAyLDcgKzIwMiw3IEBACiAJczMyIHJldF92YWwgPSAwOwogCiAJaWYgKG9mZnNldCA+IE1BWF9QSFlfUkVHX0FERFJFU1MpIHsKLQkJaHdfZGJnKGh3LCAiUEhZIEFkZHJlc3MgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLCBvZmZzZXQpOworCQlod19kYmcoIlBIWSBBZGRyZXNzICVkIGlzIG91dCBvZiByYW5nZVxuIiwgb2Zmc2V0KTsKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEFSQU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTIzMSwxMiArMjMxLDEyIEBACiAJCQlicmVhazsKIAl9CiAJaWYgKCEobWRpYyAmIEUxMDAwX01ESUNfUkVBRFkpKSB7Ci0JCWh3X2RiZyhodywgIk1ESSBXcml0ZSBkaWQgbm90IGNvbXBsZXRlXG4iKTsKKwkJaHdfZGJnKCJNREkgV3JpdGUgZGlkIG5vdCBjb21wbGV0ZVxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX1BIWTsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChtZGljICYgRTEwMDBfTURJQ19FUlJPUikgewotCQlod19kYmcoaHcsICJNREkgRXJyb3JcbiIpOworCQlod19kYmcoIk1ESSBFcnJvclxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX1BIWTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjQ2LDcgKzI0Niw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3JlYWRfcGh5X3JlZ19pZ3AgLSBSZWFkIGlncCBQSFkgcmVnaXN0ZXIKKyAqICBpZ2JfcmVhZF9waHlfcmVnX2lncCAtIFJlYWQgaWdwIFBIWSByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCkBAIC0yODQsNyArMjg0LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfd3JpdGVfcGh5X3JlZ19pZ3AgLSBXcml0ZSBpZ3AgUEhZIHJlZ2lzdGVyCisgKiAgaWdiX3dyaXRlX3BoeV9yZWdfaWdwIC0gV3JpdGUgaWdwIFBIWSByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CkBAIC0zMjEsNyArMzIxLDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfY29wcGVyX2xpbmtfc2V0dXBfbTg4IC0gU2V0dXAgbTg4IFBIWSdzIGZvciBjb3BwZXIgbGluaworICogIGlnYl9jb3BwZXJfbGlua19zZXR1cF9tODggLSBTZXR1cCBtODggUEhZJ3MgZm9yIGNvcHBlciBsaW5rCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgU2V0cyB1cCBNREkvTURJLVggYW5kIHBvbGFyaXR5IGZvciBtODggUEhZJ3MuICBJZiBuZWNlc3NhcnksIHRyYW5zbWl0IGNsb2NrCkBAIC00MjMsNyArNDIzLDcgQEAKIAkvKiBDb21taXQgdGhlIGNoYW5nZXMuICovCiAJcmV0X3ZhbCA9IGlnYl9waHlfc3dfcmVzZXQoaHcpOwogCWlmIChyZXRfdmFsKSB7Ci0JCWh3X2RiZyhodywgIkVycm9yIGNvbW1pdHRpbmcgdGhlIFBIWSBjaGFuZ2VzXG4iKTsKKwkJaHdfZGJnKCJFcnJvciBjb21taXR0aW5nIHRoZSBQSFkgY2hhbmdlc1xuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDMyLDcgKzQzMiw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX2NvcHBlcl9saW5rX3NldHVwX2lncCAtIFNldHVwIGlncCBQSFkncyBmb3IgY29wcGVyIGxpbmsKKyAqICBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfaWdwIC0gU2V0dXAgaWdwIFBIWSdzIGZvciBjb3BwZXIgbGluawogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFNldHMgdXAgTFBMVSwgTURJL01ESS1YLCBwb2xhcml0eSwgU21hcnRzcGVlZCBhbmQgTWFzdGVyL1NsYXZlIGNvbmZpZyBmb3IKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCiAJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlc2V0X3BoeShodyk7CiAJaWYgKHJldF92YWwpIHsKLQkJaHdfZGJnKGh3LCAiRXJyb3IgcmVzZXR0aW5nIHRoZSBQSFkuXG4iKTsKKwkJaHdfZGJnKCJFcnJvciByZXNldHRpbmcgdGhlIFBIWS5cbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCQlpZiAoaHctPnBoeS5vcHMuc2V0X2QzX2xwbHVfc3RhdGUpCiAJCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuc2V0X2QzX2xwbHVfc3RhdGUoaHcsIGZhbHNlKTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWh3X2RiZyhodywgIkVycm9yIERpc2FibGluZyBMUExVIEQzXG4iKTsKKwkJCWh3X2RiZygiRXJyb3IgRGlzYWJsaW5nIExQTFUgRDNcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC00NzUsNyArNDc1LDcgQEAKIAkvKiBkaXNhYmxlIGxwbHUgZDAgZHVyaW5nIGRyaXZlciBpbml0ICovCiAJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnNldF9kMF9scGx1X3N0YXRlKGh3LCBmYWxzZSk7CiAJaWYgKHJldF92YWwpIHsKLQkJaHdfZGJnKGh3LCAiRXJyb3IgRGlzYWJsaW5nIExQTFUgRDBcbiIpOworCQlod19kYmcoIkVycm9yIERpc2FibGluZyBMUExVIEQwXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCS8qIENvbmZpZ3VyZSBtZGktbWRpeCBzZXR0aW5ncyAqLwpAQCAtNTcwLDcgKzU3MCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX2NvcHBlcl9saW5rX2F1dG9uZWcgLSBTZXR1cC9FbmFibGUgYXV0b25lZyBmb3IgY29wcGVyIGxpbmsKKyAqICBpZ2JfY29wcGVyX2xpbmtfYXV0b25lZyAtIFNldHVwL0VuYWJsZSBhdXRvbmVnIGZvciBjb3BwZXIgbGluawogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFBlcmZvcm1zIGluaXRpYWwgYm91bmRzIGNoZWNraW5nIG9uIGF1dG9uZWcgYWR2ZXJ0aXNlbWVudCBwYXJhbWV0ZXIsIHRoZW4KQEAgLTU5NywxMyArNTk3LDEzIEBACiAJaWYgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkID09IDApCiAJCXBoeS0+YXV0b25lZ19hZHZlcnRpc2VkID0gcGh5LT5hdXRvbmVnX21hc2s7CiAKLQlod19kYmcoaHcsICJSZWNvbmZpZ3VyaW5nIGF1dG8tbmVnIGFkdmVydGlzZW1lbnQgcGFyYW1zXG4iKTsKKwlod19kYmcoIlJlY29uZmlndXJpbmcgYXV0by1uZWcgYWR2ZXJ0aXNlbWVudCBwYXJhbXNcbiIpOwogCXJldF92YWwgPSBpZ2JfcGh5X3NldHVwX2F1dG9uZWcoaHcpOwogCWlmIChyZXRfdmFsKSB7Ci0JCWh3X2RiZyhodywgIkVycm9yIFNldHRpbmcgdXAgQXV0by1OZWdvdGlhdGlvblxuIik7CisJCWh3X2RiZygiRXJyb3IgU2V0dGluZyB1cCBBdXRvLU5lZ290aWF0aW9uXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCWh3X2RiZyhodywgIlJlc3RhcnRpbmcgQXV0by1OZWdcbiIpOworCWh3X2RiZygiUmVzdGFydGluZyBBdXRvLU5lZ1xuIik7CiAKIAkvKgogCSAqIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiBieSBzZXR0aW5nIHRoZSBBdXRvIE5lZyBFbmFibGUgYml0IGFuZApAQCAtNjI1LDggKzYyNSw4IEBACiAJaWYgKHBoeS0+YXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CiAJCXJldF92YWwgPSBpZ2Jfd2FpdF9hdXRvbmVnKGh3KTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWh3X2RiZyhodywgIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yICIKLQkJCQkgImF1dG9uZWcgdG8gY29tcGxldGVcbiIpOworCQkJaHdfZGJnKCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciAiCisJCQkgICAgICAgImF1dG9uZWcgdG8gY29tcGxldGVcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC02MzgsNyArNjM4LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfcGh5X3NldHVwX2F1dG9uZWcgLSBDb25maWd1cmUgUEhZIGZvciBhdXRvLW5lZ290aWF0aW9uCisgKiAgaWdiX3BoeV9zZXR1cF9hdXRvbmVnIC0gQ29uZmlndXJlIFBIWSBmb3IgYXV0by1uZWdvdGlhdGlvbgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFJlYWRzIHRoZSBNSUkgYXV0by1uZWcgYWR2ZXJ0aXNlbWVudCByZWdpc3RlciBhbmQvb3IgdGhlIDEwMDBUIGNvbnRyb2wKQEAgLTY4OSwzOSArNjg5LDM5IEBACiAJCQkJIE5XQVlfQVJfMTBUX0hEX0NBUFMpOwogCW1paV8xMDAwdF9jdHJsX3JlZyAmPSB+KENSXzEwMDBUX0hEX0NBUFMgfCBDUl8xMDAwVF9GRF9DQVBTKTsKIAotCWh3X2RiZyhodywgImF1dG9uZWdfYWR2ZXJ0aXNlZCAleFxuIiwgcGh5LT5hdXRvbmVnX2FkdmVydGlzZWQpOworCWh3X2RiZygiYXV0b25lZ19hZHZlcnRpc2VkICV4XG4iLCBwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCk7CiAKIAkvKiBEbyB3ZSB3YW50IHRvIGFkdmVydGlzZSAxMCBNYiBIYWxmIER1cGxleD8gKi8KIAlpZiAocGh5LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTBfSEFMRikgewotCQlod19kYmcoaHcsICJBZHZlcnRpc2UgMTBtYiBIYWxmIGR1cGxleFxuIik7CisJCWh3X2RiZygiQWR2ZXJ0aXNlIDEwbWIgSGFsZiBkdXBsZXhcbiIpOwogCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IE5XQVlfQVJfMTBUX0hEX0NBUFM7CiAJfQogCiAJLyogRG8gd2Ugd2FudCB0byBhZHZlcnRpc2UgMTAgTWIgRnVsbCBEdXBsZXg/ICovCiAJaWYgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwX0ZVTEwpIHsKLQkJaHdfZGJnKGh3LCAiQWR2ZXJ0aXNlIDEwbWIgRnVsbCBkdXBsZXhcbiIpOworCQlod19kYmcoIkFkdmVydGlzZSAxMG1iIEZ1bGwgZHVwbGV4XG4iKTsKIAkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBOV0FZX0FSXzEwVF9GRF9DQVBTOwogCX0KIAogCS8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwMCBNYiBIYWxmIER1cGxleD8gKi8KIAlpZiAocGh5LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTAwX0hBTEYpIHsKLQkJaHdfZGJnKGh3LCAiQWR2ZXJ0aXNlIDEwMG1iIEhhbGYgZHVwbGV4XG4iKTsKKwkJaHdfZGJnKCJBZHZlcnRpc2UgMTAwbWIgSGFsZiBkdXBsZXhcbiIpOwogCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IE5XQVlfQVJfMTAwVFhfSERfQ0FQUzsKIAl9CiAKIAkvKiBEbyB3ZSB3YW50IHRvIGFkdmVydGlzZSAxMDAgTWIgRnVsbCBEdXBsZXg/ICovCiAJaWYgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMF9GVUxMKSB7Ci0JCWh3X2RiZyhodywgIkFkdmVydGlzZSAxMDBtYiBGdWxsIGR1cGxleFxuIik7CisJCWh3X2RiZygiQWR2ZXJ0aXNlIDEwMG1iIEZ1bGwgZHVwbGV4XG4iKTsKIAkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBOV0FZX0FSXzEwMFRYX0ZEX0NBUFM7CiAJfQogCiAJLyogV2UgZG8gbm90IGFsbG93IHRoZSBQaHkgdG8gYWR2ZXJ0aXNlIDEwMDAgTWIgSGFsZiBEdXBsZXggKi8KIAlpZiAocGh5LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTAwMF9IQUxGKQotCQlod19kYmcoaHcsICJBZHZlcnRpc2UgMTAwMG1iIEhhbGYgZHVwbGV4IHJlcXVlc3QgZGVuaWVkIVxuIik7CisJCWh3X2RiZygiQWR2ZXJ0aXNlIDEwMDBtYiBIYWxmIGR1cGxleCByZXF1ZXN0IGRlbmllZCFcbiIpOwogCiAJLyogRG8gd2Ugd2FudCB0byBhZHZlcnRpc2UgMTAwMCBNYiBGdWxsIER1cGxleD8gKi8KIAlpZiAocGh5LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7Ci0JCWh3X2RiZyhodywgIkFkdmVydGlzZSAxMDAwbWIgRnVsbCBkdXBsZXhcbiIpOworCQlod19kYmcoIkFkdmVydGlzZSAxMDAwbWIgRnVsbCBkdXBsZXhcbiIpOwogCQltaWlfMTAwMHRfY3RybF9yZWcgfD0gQ1JfMTAwMFRfRkRfQ0FQUzsKIAl9CiAKQEAgLTc4MCw3ICs3ODAsNyBAQAogCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IChOV0FZX0FSX0FTTV9ESVIgfCBOV0FZX0FSX1BBVVNFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7CisJCWh3X2RiZygiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX0NPTkZJRzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzkwLDcgKzc5MCw3IEBACiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCi0JaHdfZGJnKGh3LCAiQXV0by1OZWcgQWR2ZXJ0aXNpbmcgJXhcbiIsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOworCWh3X2RiZygiQXV0by1OZWcgQWR2ZXJ0aXNpbmcgJXhcbiIsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOwogCiAJaWYgKHBoeS0+YXV0b25lZ19tYXNrICYgQURWRVJUSVNFXzEwMDBfRlVMTCkgewogCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKQEAgLTgwNSw3ICs4MDUsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X2lncCAtIEZvcmNlIHNwZWVkL2R1cGxleCBmb3IgaWdwIFBIWQorICogIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X2lncCAtIEZvcmNlIHNwZWVkL2R1cGxleCBmb3IgaWdwIFBIWQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIENhbGxzIHRoZSBQSFkgc2V0dXAgZnVuY3Rpb24gdG8gZm9yY2Ugc3BlZWQgYW5kIGR1cGxleC4gIENsZWFycyB0aGUKQEAgLTg0NiwxMyArODQ2LDEyIEBACiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCi0JaHdfZGJnKGh3LCAiSUdQIFBTQ1I6ICVYXG4iLCBwaHlfZGF0YSk7CisJaHdfZGJnKCJJR1AgUFNDUjogJVhcbiIsIHBoeV9kYXRhKTsKIAogCXVkZWxheSgxKTsKIAogCWlmIChwaHktPmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgewotCQlod19kYmcoaHcsCi0JCSAgICAgICAiV2FpdGluZyBmb3IgZm9yY2VkIHNwZWVkL2R1cGxleCBsaW5rIG9uIElHUCBwaHkuXG4iKTsKKwkJaHdfZGJnKCJXYWl0aW5nIGZvciBmb3JjZWQgc3BlZWQvZHVwbGV4IGxpbmsgb24gSUdQIHBoeS5cbiIpOwogCiAJCXJldF92YWwgPSBpZ2JfcGh5X2hhc19saW5rKGh3LAogCQkJCQkJICAgICBQSFlfRk9SQ0VfTElNSVQsCkBAIC04NjIsNyArODYxLDcgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWlmICghbGluaykKLQkJCWh3X2RiZyhodywgIkxpbmsgdGFraW5nIGxvbmdlciB0aGFuIGV4cGVjdGVkLlxuIik7CisJCQlod19kYmcoIkxpbmsgdGFraW5nIGxvbmdlciB0aGFuIGV4cGVjdGVkLlxuIik7CiAKIAkJLyogVHJ5IG9uY2UgbW9yZSAqLwogCQlyZXRfdmFsID0gaWdiX3BoeV9oYXNfbGluayhodywKQEAgLTg3OCw3ICs4NzcsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X204OCAtIEZvcmNlIHNwZWVkL2R1cGxleCBmb3IgbTg4IFBIWQorICogIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X204OCAtIEZvcmNlIHNwZWVkL2R1cGxleCBmb3IgbTg4IFBIWQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIENhbGxzIHRoZSBQSFkgc2V0dXAgZnVuY3Rpb24gdG8gZm9yY2Ugc3BlZWQgYW5kIGR1cGxleC4gIENsZWFycyB0aGUKQEAgLTkwOSw3ICs5MDgsNyBAQAogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAotCWh3X2RiZyhodywgIk04OEUxMDAwIFBTQ1I6ICVYXG4iLCBwaHlfZGF0YSk7CisJaHdfZGJnKCJNODhFMTAwMCBQU0NSOiAlWFxuIiwgcGh5X2RhdGEpOwogCiAJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCkBAIC05MjcsOCArOTI2LDcgQEAKIAl1ZGVsYXkoMSk7CiAKIAlpZiAocGh5LT5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKLQkJaHdfZGJnKGh3LAotCQkgICAgICAgIldhaXRpbmcgZm9yIGZvcmNlZCBzcGVlZC9kdXBsZXggbGluayBvbiBNODggcGh5LlxuIik7CisJCWh3X2RiZygiV2FpdGluZyBmb3IgZm9yY2VkIHNwZWVkL2R1cGxleCBsaW5rIG9uIE04OCBwaHkuXG4iKTsKIAogCQlyZXRfdmFsID0gaWdiX3BoeV9oYXNfbGluayhodywKIAkJCQkJCSAgICAgUEhZX0ZPUkNFX0xJTUlULApAQCAtOTkzLDcgKzk5MSw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0dXAgLSBDb25maWd1cmUgZm9yY2VkIFBIWSBzcGVlZC9kdXBsZXgKKyAqICBpZ2JfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleF9zZXR1cCAtIENvbmZpZ3VyZSBmb3JjZWQgUEhZIHNwZWVkL2R1cGxleAogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQHBoeV9jdHJsOiBwb2ludGVyIHRvIGN1cnJlbnQgdmFsdWUgb2YgUEhZX0NPTlRST0wKICAqCkBAIC0xMDI4LDExICsxMDI2LDExIEBACiAJaWYgKG1hYy0+Zm9yY2VkX3NwZWVkX2R1cGxleCAmIEUxMDAwX0FMTF9IQUxGX0RVUExFWCkgewogCQljdHJsICY9IH5FMTAwMF9DVFJMX0ZEOwogCQkqcGh5X2N0cmwgJj0gfk1JSV9DUl9GVUxMX0RVUExFWDsKLQkJaHdfZGJnKGh3LCAiSGFsZiBEdXBsZXhcbiIpOworCQlod19kYmcoIkhhbGYgRHVwbGV4XG4iKTsKIAl9IGVsc2UgewogCQljdHJsIHw9IEUxMDAwX0NUUkxfRkQ7CiAJCSpwaHlfY3RybCB8PSBNSUlfQ1JfRlVMTF9EVVBMRVg7Ci0JCWh3X2RiZyhodywgIkZ1bGwgRHVwbGV4XG4iKTsKKwkJaHdfZGJnKCJGdWxsIER1cGxleFxuIik7CiAJfQogCiAJLyogRm9yY2luZyAxMG1iIG9yIDEwMG1iPyAqLwpAQCAtMTA0MCwxMiArMTAzOCwxMiBAQAogCQljdHJsIHw9IEUxMDAwX0NUUkxfU1BEXzEwMDsKIAkJKnBoeV9jdHJsIHw9IE1JSV9DUl9TUEVFRF8xMDA7CiAJCSpwaHlfY3RybCAmPSB+KE1JSV9DUl9TUEVFRF8xMDAwIHwgTUlJX0NSX1NQRUVEXzEwKTsKLQkJaHdfZGJnKGh3LCAiRm9yY2luZyAxMDBtYlxuIik7CisJCWh3X2RiZygiRm9yY2luZyAxMDBtYlxuIik7CiAJfSBlbHNlIHsKIAkJY3RybCAmPSB+KEUxMDAwX0NUUkxfU1BEXzEwMDAgfCBFMTAwMF9DVFJMX1NQRF8xMDApOwogCQkqcGh5X2N0cmwgfD0gTUlJX0NSX1NQRUVEXzEwOwogCQkqcGh5X2N0cmwgJj0gfihNSUlfQ1JfU1BFRURfMTAwMCB8IE1JSV9DUl9TUEVFRF8xMDApOwotCQlod19kYmcoaHcsICJGb3JjaW5nIDEwbWJcbiIpOworCQlod19kYmcoIkZvcmNpbmcgMTBtYlxuIik7CiAJfQogCiAJaWdiX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CkBAIC0xMDU0LDcgKzEwNTIsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9zZXRfZDNfbHBsdV9zdGF0ZSAtIFNldHMgbG93IHBvd2VyIGxpbmsgdXAgc3RhdGUgZm9yIEQzCisgKiAgaWdiX3NldF9kM19scGx1X3N0YXRlIC0gU2V0cyBsb3cgcG93ZXIgbGluayB1cCBzdGF0ZSBmb3IgRDMKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBhY3RpdmU6IGJvb2xlYW4gdXNlZCB0byBlbmFibGUvZGlzYWJsZSBscGx1CiAgKgpAQCAtMTE0Niw3ICsxMTQ0LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfY2hlY2tfZG93bnNoaWZ0IC0gQ2hlY2tzIHdoZXRoZXIgYSBkb3duc2hpZnQgaW4gc3BlZWQgb2NjdXJlZAorICogIGlnYl9jaGVja19kb3duc2hpZnQgLSBDaGVja3Mgd2hldGhlciBhIGRvd25zaGlmdCBpbiBzcGVlZCBvY2N1cmVkCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgU3VjY2VzcyByZXR1cm5zIDAsIEZhaWx1cmUgcmV0dXJucyAxCkBAIC0xMTg4LDcgKzExODYsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9jaGVja19wb2xhcml0eV9tODggLSBDaGVja3MgdGhlIHBvbGFyaXR5LgorICogIGlnYl9jaGVja19wb2xhcml0eV9tODggLSBDaGVja3MgdGhlIHBvbGFyaXR5LgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFN1Y2Nlc3MgcmV0dXJucyAwLCBGYWlsdXJlIHJldHVybnMgLUUxMDAwX0VSUl9QSFkgKC0yKQpAQCAtMTIxMiw3ICsxMjEwLDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfY2hlY2tfcG9sYXJpdHlfaWdwIC0gQ2hlY2tzIHRoZSBwb2xhcml0eS4KKyAqICBpZ2JfY2hlY2tfcG9sYXJpdHlfaWdwIC0gQ2hlY2tzIHRoZSBwb2xhcml0eS4KICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBTdWNjZXNzIHJldHVybnMgMCwgRmFpbHVyZSByZXR1cm5zIC1FMTAwMF9FUlJfUEhZICgtMikKQEAgLTEyNjAsNyArMTI1OCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3dhaXRfYXV0b25lZyAtIFdhaXQgZm9yIGF1dG8tbmVnIGNvbXBlbGV0aW9uCisgKiAgaWdiX3dhaXRfYXV0b25lZyAtIFdhaXQgZm9yIGF1dG8tbmVnIGNvbXBlbGV0aW9uCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgV2FpdHMgZm9yIGF1dG8tbmVnb3RpYXRpb24gdG8gY29tcGxldGUgb3IgZm9yIHRoZSBhdXRvLW5lZ290aWF0aW9uIHRpbWUKQEAgLTEyOTIsNyArMTI5MCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3BoeV9oYXNfbGluayAtIFBvbGxzIFBIWSBmb3IgbGluaworICogIGlnYl9waHlfaGFzX2xpbmsgLSBQb2xscyBQSFkgZm9yIGxpbmsKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBpdGVyYXRpb25zOiBudW1iZXIgb2YgdGltZXMgdG8gcG9sbCBmb3IgbGluawogICogIEB1c2VjX2ludGVydmFsOiBkZWxheSBiZXR3ZWVuIHBvbGxpbmcgYXR0ZW1wdHMKQEAgLTEzMzIsNyArMTMzMCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX2dldF9jYWJsZV9sZW5ndGhfbTg4IC0gRGV0ZXJtaW5lIGNhYmxlIGxlbmd0aCBmb3IgbTg4IFBIWQorICogIGlnYl9nZXRfY2FibGVfbGVuZ3RoX204OCAtIERldGVybWluZSBjYWJsZSBsZW5ndGggZm9yIG04OCBQSFkKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBSZWFkcyB0aGUgUEhZIHNwZWNpZmljIHN0YXR1cyByZWdpc3RlciB0byByZXRyaWV2ZSB0aGUgY2FibGUgbGVuZ3RoCkBAIC0xMzY5LDcgKzEzNjcsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9nZXRfY2FibGVfbGVuZ3RoX2lncF8yIC0gRGV0ZXJtaW5lIGNhYmxlIGxlbmd0aCBmb3IgaWdwMiBQSFkKKyAqICBpZ2JfZ2V0X2NhYmxlX2xlbmd0aF9pZ3BfMiAtIERldGVybWluZSBjYWJsZSBsZW5ndGggZm9yIGlncDIgUEhZCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgVGhlIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgKGFnYykgbm9ybWFsaXplcyB0aGUgYW1wbGl0dWRlIG9mIHRoZQpAQCAtMTQ0Miw3ICsxNDQwLDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfZ2V0X3BoeV9pbmZvX204OCAtIFJldHJpZXZlIFBIWSBpbmZvcm1hdGlvbgorICogIGlnYl9nZXRfcGh5X2luZm9fbTg4IC0gUmV0cmlldmUgUEhZIGluZm9ybWF0aW9uCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgVmFsaWQgZm9yIG9ubHkgY29wcGVyIGxpbmtzLiAgUmVhZCB0aGUgUEhZIHN0YXR1cyByZWdpc3RlciAoc3RpY2t5IHJlYWQpCkBAIC0xNDU5LDcgKzE0NTcsNyBAQAogCWJvb2wgbGluazsKIAogCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKLQkJaHdfZGJnKGh3LCAiUGh5IGluZm8gaXMgb25seSB2YWxpZCBmb3IgY29wcGVyIG1lZGlhXG4iKTsKKwkJaHdfZGJnKCJQaHkgaW5mbyBpcyBvbmx5IHZhbGlkIGZvciBjb3BwZXIgbWVkaWFcbiIpOwogCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9DT05GSUc7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE0NjksNyArMTQ2Nyw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCFsaW5rKSB7Ci0JCWh3X2RiZyhodywgIlBoeSBpbmZvIGlzIG9ubHkgdmFsaWQgaWYgbGluayBpcyB1cFxuIik7CisJCWh3X2RiZygiUGh5IGluZm8gaXMgb25seSB2YWxpZCBpZiBsaW5rIGlzIHVwXG4iKTsKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfQ09ORklHOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNTIzLDcgKzE1MjEsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9nZXRfcGh5X2luZm9faWdwIC0gUmV0cmlldmUgaWdwIFBIWSBpbmZvcm1hdGlvbgorICogIGlnYl9nZXRfcGh5X2luZm9faWdwIC0gUmV0cmlldmUgaWdwIFBIWSBpbmZvcm1hdGlvbgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFJlYWQgUEhZIHN0YXR1cyB0byBkZXRlcm1pbmUgaWYgbGluayBpcyB1cC4gIElmIGxpbmsgaXMgdXAsIHRoZW4KQEAgLTE1NDMsNyArMTU0MSw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCFsaW5rKSB7Ci0JCWh3X2RiZyhodywgIlBoeSBpbmZvIGlzIG9ubHkgdmFsaWQgaWYgbGluayBpcyB1cFxuIik7CisJCWh3X2RiZygiUGh5IGluZm8gaXMgb25seSB2YWxpZCBpZiBsaW5rIGlzIHVwXG4iKTsKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfQ09ORklHOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNTkwLDcgKzE1ODgsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9waHlfc3dfcmVzZXQgLSBQSFkgc29mdHdhcmUgcmVzZXQKKyAqICBpZ2JfcGh5X3N3X3Jlc2V0IC0gUEhZIHNvZnR3YXJlIHJlc2V0CiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgRG9lcyBhIHNvZnR3YXJlIHJlc2V0IG9mIHRoZSBQSFkgYnkgcmVhZGluZyB0aGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXIgYW5kCkBAIC0xNjE3LDcgKzE2MTUsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9waHlfaHdfcmVzZXQgLSBQSFkgaGFyZHdhcmUgcmVzZXQKKyAqICBpZ2JfcGh5X2h3X3Jlc2V0IC0gUEhZIGhhcmR3YXJlIHJlc2V0CiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgVmVyaWZ5IHRoZSByZXNldCBibG9jayBpcyBub3QgYmxvY2tpbmcgdXMgZnJvbSByZXNldHRpbmcuICBBY3F1aXJlCkBAIC0xNjYzLDcgKzE2NjEsNyBAQAogLyogSW50ZXJuYWwgZnVuY3Rpb24gcG9pbnRlcnMgKi8KIAogLyoqCi0gKiAgZTEwMDBfZ2V0X3BoeV9jZmdfZG9uZSAtIEdlbmVyaWMgUEhZIGNvbmZpZ3VyYXRpb24gZG9uZQorICogIGlnYl9nZXRfcGh5X2NmZ19kb25lIC0gR2VuZXJpYyBQSFkgY29uZmlndXJhdGlvbiBkb25lCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgUmV0dXJuIHN1Y2Nlc3MgaWYgc2lsaWNvbiBmYW1pbHkgZGlkIG5vdCBpbXBsZW1lbnQgYSBmYW1pbHkgc3BlY2lmaWMKQEAgLTE2NzgsNyArMTY3Niw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3JlbGVhc2VfcGh5IC0gR2VuZXJpYyByZWxlYXNlIFBIWQorICogIGlnYl9yZWxlYXNlX3BoeSAtIEdlbmVyaWMgcmVsZWFzZSBQSFkKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBSZXR1cm4gaWYgc2lsaWNvbiBmYW1pbHkgZG9lcyBub3QgcmVxdWlyZSBhIHNlbWFwaG9yZSB3aGVuIGFjY2Vzc2luZyB0aGUKQEAgLTE2OTEsNyArMTY4OSw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX2FjcXVpcmVfcGh5IC0gR2VuZXJpYyBhY3F1aXJlIFBIWQorICogIGlnYl9hY3F1aXJlX3BoeSAtIEdlbmVyaWMgYWNxdWlyZSBQSFkKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBSZXR1cm4gc3VjY2VzcyBpZiBzaWxpY29uIGZhbWlseSBkb2VzIG5vdCByZXF1aXJlIGEgc2VtYXBob3JlIHdoZW4KQEAgLTE3MDYsNyArMTcwNCw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXggLSBHZW5lcmljIGZvcmNlIFBIWSBzcGVlZC9kdXBsZXgKKyAqICBpZ2JfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleCAtIEdlbmVyaWMgZm9yY2UgUEhZIHNwZWVkL2R1cGxleAogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFdoZW4gdGhlIHNpbGljb24gZmFtaWx5IGhhcyBub3QgaW1wbGVtZW50ZWQgYSBmb3JjZWQgc3BlZWQvZHVwbGV4CkBAIC0xNzIxLDE0ICsxNzE5LDE0IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3BoeV9pbml0X3NjcmlwdF9pZ3AzIC0gSW5pdHMgdGhlIElHUDMgUEhZCisgKiAgaWdiX3BoeV9pbml0X3NjcmlwdF9pZ3AzIC0gSW5pdHMgdGhlIElHUDMgUEhZCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgSW5pdGlhbGl6ZXMgYSBJbnRlbCBHaWdhYml0IFBIWTMgd2hlbiBhbiBFRVBST00gaXMgbm90IHByZXNlbnQuCiAgKiovCiBzMzIgaWdiX3BoeV9pbml0X3NjcmlwdF9pZ3AzKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0JaHdfZGJnKGh3LCAiUnVubmluZyBJR1AgMyBQSFkgaW5pdCBzY3JpcHRcbiIpOworCWh3X2RiZygiUnVubmluZyBJR1AgMyBQSFkgaW5pdCBzY3JpcHRcbiIpOwogCiAJLyogUEhZIGluaXQgSUdQIDMgKi8KIAkvKiBFbmFibGUgcmlzZS9mYWxsLCAxMC1tb2RlIHdvcmsgaW4gY2xhc3MtQSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKaW5kZXggZmYxODdiNy4uYjk1MDkzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCkBAIC01Niw2ICs1Niw5IEBACiAjZGVmaW5lIEUxMDAwX0VJTUMgICAgIDB4MDE1MjggIC8qIEV4dC4gSW50ZXJydXB0IE1hc2sgQ2xlYXIgLSBXTyAqLwogI2RlZmluZSBFMTAwMF9FSUFDICAgICAweDAxNTJDICAvKiBFeHQuIEludGVycnVwdCBBdXRvIENsZWFyIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfRUlBTSAgICAgMHgwMTUzMCAgLyogRXh0LiBJbnRlcnJ1cHQgQWNrIEF1dG8gQ2xlYXIgTWFzayAtIFJXICovCisjZGVmaW5lIEUxMDAwX0dQSUUgICAgIDB4MDE1MTQgIC8qIEdlbmVyYWwgUHVycG9zZSBJbnRlcnJ1cHQgRW5hYmxlIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfSVZBUjAgICAgMHgwMTcwMCAgLyogSW50ZXJydXB0IFZlY3RvciBBbGxvY2F0aW9uIChhcnJheSkgLSBSVyAqLworI2RlZmluZSBFMTAwMF9JVkFSX01JU0MgMHgwMTc0MCAvKiBJVkFSIGZvciAib3RoZXIiIGNhdXNlcyAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1RDVEwgICAgIDB4MDA0MDAgIC8qIFRYIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9UQ1RMX0VYVCAweDAwNDA0ICAvKiBFeHRlbmRlZCBUWCBDb250cm9sIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfVElQRyAgICAgMHgwMDQxMCAgLyogVFggSW50ZXItcGFja2V0IGdhcCAtUlcgKi8KQEAgLTIxNyw2ICsyMjAsNyBAQAogI2RlZmluZSBFMTAwMF9SRkNUTCAgICAweDA1MDA4ICAvKiBSZWNlaXZlIEZpbHRlciBDb250cm9sKi8KICNkZWZpbmUgRTEwMDBfTVRBICAgICAgMHgwNTIwMCAgLyogTXVsdGljYXN0IFRhYmxlIEFycmF5IC0gUlcgQXJyYXkgKi8KICNkZWZpbmUgRTEwMDBfUkEgICAgICAgMHgwNTQwMCAgLyogUmVjZWl2ZSBBZGRyZXNzIC0gUlcgQXJyYXkgKi8KKyNkZWZpbmUgRTEwMDBfUkEyICAgICAgMHgwNTRFMCAgLyogMm5kIGhhbGYgb2YgcmVjZWl2ZSBhZGRyZXNzIGFycmF5IC0gUlcgQXJyYXkgKi8KICNkZWZpbmUgRTEwMDBfVkZUQSAgICAgMHgwNTYwMCAgLyogVkxBTiBGaWx0ZXIgVGFibGUgQXJyYXkgLSBSVyBBcnJheSAqLwogI2RlZmluZSBFMTAwMF9WTURfQ1RMICAweDA1ODFDICAvKiBWTURxIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9XVUMgICAgICAweDA1ODAwICAvKiBXYWtldXAgQ29udHJvbCAtIFJXICovCkBAIC0yMzUsNiArMjM5LDggQEAKICNkZWZpbmUgRTEwMDBfRkFDVFBTICAgIDB4MDVCMzAgLyogRnVuY3Rpb24gQWN0aXZlIGFuZCBQb3dlciBTdGF0ZSB0byBNTkcgKi8KICNkZWZpbmUgRTEwMDBfU1dTTSAgICAgIDB4MDVCNTAgLyogU1cgU2VtYXBob3JlICovCiAjZGVmaW5lIEUxMDAwX0ZXU00gICAgICAweDA1QjU0IC8qIEZXIFNlbWFwaG9yZSAqLworI2RlZmluZSBFMTAwMF9EQ0FfSUQgICAgMHgwNUI3MCAvKiBEQ0EgUmVxdWVzdGVyIElEIEluZm9ybWF0aW9uIC0gUk8gKi8KKyNkZWZpbmUgRTEwMDBfRENBX0NUUkwgIDB4MDVCNzQgLyogRENBIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9ISUNSICAgICAgMHgwOEYwMCAvKiBIb3N0IEludGVmYWNlIENvbnRyb2wgKi8KIAogLyogUlNTIHJlZ2lzdGVycyAqLwpAQCAtMjU2LDcgKzI2Miw4IEBACiAjZGVmaW5lIEUxMDAwX1JFVEEoX2kpICAoMHgwNUMwMCArICgoX2kpICogNCkpCiAjZGVmaW5lIEUxMDAwX1JTU1JLKF9pKSAoMHgwNUM4MCArICgoX2kpICogNCkpIC8qIFJTUyBSYW5kb20gS2V5IC0gUlcgQXJyYXkgKi8KIAotI2RlZmluZSBFMTAwMF9SRUdJU1RFUihhLCByZWcpIHJlZworI2RlZmluZSBFMTAwMF9SRUdJU1RFUihhLCByZWcpICgoKGEpLT5tYWMudHlwZSA8IGUxMDAwXzgyNTc2KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByZWcgOiBlMTAwMF90cmFuc2xhdGVfcmVnaXN0ZXJfODI1NzYocmVnKSkKIAogI2RlZmluZSB3cjMyKHJlZywgdmFsdWUpICh3cml0ZWwodmFsdWUsIGh3LT5od19hZGRyICsgcmVnKSkKICNkZWZpbmUgcmQzMihyZWcpIChyZWFkbChody0+aHdfYWRkciArIHJlZykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiLmggYi9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKaW5kZXggNmIyZTdkMy4uNGZmNmYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYi5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaApAQCAtMzYsMTIgKzM2LDIwIEBACiAKIHN0cnVjdCBpZ2JfYWRhcHRlcjsKIAorI2lmZGVmIENPTkZJR19JR0JfTFJPCisjaW5jbHVkZSA8bGludXgvaW5ldF9scm8uaD4KKyNkZWZpbmUgTUFYX0xST19BR0dSICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1BWF9MUk9fREVTQ1JJUFRPUlMgICAgICAgICAgICAgICAgOAorI2VuZGlmCisKIC8qIEludGVycnVwdCBkZWZpbmVzICovCiAjZGVmaW5lIElHQl9NQVhfVFhfQ0xFQU4gNzIKIAogI2RlZmluZSBJR0JfTUlOX0RZTl9JVFIgMzAwMAogI2RlZmluZSBJR0JfTUFYX0RZTl9JVFIgOTYwMDAKLSNkZWZpbmUgSUdCX1NUQVJUX0lUUiA2MDAwCisKKy8qICgoMTAwMDAwMDAwMG5zIC8gKDYwMDBpbnRzL3MgKiAxMDI0bnMpKSA8PCAyID0gNjQ4ICovCisjZGVmaW5lIElHQl9TVEFSVF9JVFIgNjQ4CiAKICNkZWZpbmUgSUdCX0RZTl9JVFJfUEFDS0VUX1RIUkVTSE9MRCAyCiAjZGVmaW5lIElHQl9EWU5fSVRSX0xFTkdUSF9MT1cgMjAwCkBAIC02Miw2ICs3MCw3IEBACiAKIC8qIFRyYW5zbWl0IGFuZCByZWNlaXZlIHF1ZXVlcyAqLwogI2RlZmluZSBJR0JfTUFYX1JYX1FVRVVFUyAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSUdCX01BWF9UWF9RVUVVRVMgICAgICAgICAgICAgICAgICA0CiAKIC8qIFJYIGRlc2NyaXB0b3IgY29udHJvbCB0aHJlc2hvbGRzLgogICogUFRIUkVTSCAtIE1BQyB3aWxsIGNvbnNpZGVyIHByZWZldGNoIGlmIGl0IGhhcyBmZXdlciB0aGFuIHRoaXMgbnVtYmVyIG9mCkBAIC0xMjQsNiArMTMzLDcgQEAKIAkJc3RydWN0IHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlOwogCQkJdTY0IHBhZ2VfZG1hOworCQkJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0OwogCQl9OwogCX07CiB9OwpAQCAtMTUwLDI0ICsxNjAsMjYgQEAKIAl1MTYgaXRyX3JlZ2lzdGVyOwogCXUxNiBjcHU7CiAKKwlpbnQgcXVldWVfaW5kZXg7CiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOwogCXVuc2lnbmVkIGludCB0b3RhbF9wYWNrZXRzOwogCiAJdW5pb24gewogCQkvKiBUWCAqLwogCQlzdHJ1Y3QgewotCQkJc3BpbmxvY2tfdCB0eF9jbGVhbl9sb2NrOwotCQkJc3BpbmxvY2tfdCB0eF9sb2NrOworCQkJc3RydWN0IGlnYl9xdWV1ZV9zdGF0cyB0eF9zdGF0czsKIAkJCWJvb2wgZGV0ZWN0X3R4X2h1bmc7CiAJCX07CiAJCS8qIFJYICovCiAJCXN0cnVjdCB7Ci0JCQkvKiBhcnJheXMgb2YgcGFnZSBpbmZvcm1hdGlvbiBmb3IgcGFja2V0IHNwbGl0ICovCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqcGVuZGluZ19za2I7Ci0JCQlpbnQgcGVuZGluZ19za2JfcGFnZTsKLQkJCWludCBub19pdHJfYWRqdXN0OwogCQkJc3RydWN0IGlnYl9xdWV1ZV9zdGF0cyByeF9zdGF0czsKIAkJCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCQkJaW50IHNldF9pdHI7CisJCQlzdHJ1Y3QgaWdiX3JpbmcgKmJ1ZGR5OworI2lmZGVmIENPTkZJR19JR0JfTFJPCisJCQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKKwkJCWJvb2wgbHJvX3VzZWQ7CisjZW5kaWYKIAkJfTsKIAl9OwogCkBAIC0yMTAsNyArMjIyLDYgQEAKIAl1MzIgaXRyX3NldHRpbmc7CiAJdTE2IHR4X2l0cjsKIAl1MTYgcnhfaXRyOwotCWludCBzZXRfaXRyOwogCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3Rhc2s7CkBAIC0yNjUsMTQgKzI3NiwzNCBAQAogCWludCBtc2dfZW5hYmxlOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CiAJdTMyIGVpbXNfZW5hYmxlX21hc2s7CisJdTMyIGVpbXNfb3RoZXI7CiAKIAkvKiB0byBub3QgbWVzcyB1cCBjYWNoZSBhbGlnbm1lbnQsIGFsd2F5cyBhZGQgdG8gdGhlIGJvdHRvbSAqLwogCXVuc2lnbmVkIGxvbmcgc3RhdGU7Ci0JdW5zaWduZWQgaW50IG1zaV9lbmFibGVkOwotCisJdW5zaWduZWQgaW50IGZsYWdzOwogCXUzMiBlZXByb21fd29sOworCisJLyogZm9yIGlvcG9ydCBmcmVlICovCisJaW50IGJhcnM7CisJaW50IG5lZWRfaW9wb3J0OworCisJc3RydWN0IGlnYl9yaW5nICptdWx0aV90eF90YWJsZVtJR0JfTUFYX1RYX1FVRVVFU107CisjaWZkZWYgQ09ORklHX0lHQl9MUk8KKwl1bnNpZ25lZCBpbnQgbHJvX21heF9hZ2dyOworCXVuc2lnbmVkIGludCBscm9fYWdncmVnYXRlZDsKKwl1bnNpZ25lZCBpbnQgbHJvX2ZsdXNoZWQ7CisJdW5zaWduZWQgaW50IGxyb19ub19kZXNjOworI2VuZGlmCiB9OwogCisjZGVmaW5lIElHQl9GTEFHX0hBU19NU0kgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIElHQl9GTEFHX01TSV9FTkFCTEUgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElHQl9GTEFHX0hBU19EQ0EgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElHQl9GTEFHX0RDQV9FTkFCTEVEICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElHQl9GTEFHX0lOX05FVFBPTEwgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElHQl9GTEFHX1FVQURfUE9SVF9BICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElHQl9GTEFHX05FRURfQ1RYX0lEWCAgICAgICgxIDw8IDcpCisKIGVudW0gZTEwMDBfc3RhdGVfdCB7CiAJX19JR0JfVEVTVElORywKIAlfX0lHQl9SRVNFVFRJTkcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCmluZGV4IDA0NDdmOWIuLjExYWVlMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCkBAIC05MywxMyArOTMsMTYgQEAKIAl7ICJ0eF9zbWJ1cyIsIElHQl9TVEFUKHN0YXRzLm1ncHRjKSB9LAogCXsgInJ4X3NtYnVzIiwgSUdCX1NUQVQoc3RhdHMubWdwcmMpIH0sCiAJeyAiZHJvcHBlZF9zbWJ1cyIsIElHQl9TVEFUKHN0YXRzLm1ncGRjKSB9LAorI2lmZGVmIENPTkZJR19JR0JfTFJPCisJeyAibHJvX2FnZ3JlZ2F0ZWQiLCBJR0JfU1RBVChscm9fYWdncmVnYXRlZCkgfSwKKwl7ICJscm9fZmx1c2hlZCIsIElHQl9TVEFUKGxyb19mbHVzaGVkKSB9LAorCXsgImxyb19ub19kZXNjIiwgSUdCX1NUQVQobHJvX25vX2Rlc2MpIH0sCisjZW5kaWYKIH07CiAKICNkZWZpbmUgSUdCX1FVRVVFX1NUQVRTX0xFTiBcCi0JKCgoKCgoc3RydWN0IGlnYl9hZGFwdGVyICopbmV0ZGV2LT5wcml2KS0+bnVtX3J4X3F1ZXVlcyA+IDEpID8gXAotCSAgKChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiluZXRkZXYtPnByaXYpLT5udW1fcnhfcXVldWVzIDogMCkgKyBcCi0JICgoKCgoc3RydWN0IGlnYl9hZGFwdGVyICopbmV0ZGV2LT5wcml2KS0+bnVtX3R4X3F1ZXVlcyA+IDEpID8gXAotCSAgKChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiluZXRkZXYtPnByaXYpLT5udW1fdHhfcXVldWVzIDogMCkpKSAqIFwKKwkoKCgoc3RydWN0IGlnYl9hZGFwdGVyICopbmV0ZGV2LT5wcml2KS0+bnVtX3J4X3F1ZXVlcyArIFwKKwkgKChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiluZXRkZXYtPnByaXYpLT5udW1fdHhfcXVldWVzKSAqIFwKIAkoc2l6ZW9mKHN0cnVjdCBpZ2JfcXVldWVfc3RhdHMpIC8gc2l6ZW9mKHU2NCkpKQogI2RlZmluZSBJR0JfR0xPQkFMX1NUQVRTX0xFTglcCiAJc2l6ZW9mKGlnYl9nc3RyaW5nc19zdGF0cykgLyBzaXplb2Yoc3RydWN0IGlnYl9zdGF0cykKQEAgLTgyOSw4ICs4MzIsOSBAQAogLyogZXRodG9vbCByZWdpc3RlciB0ZXN0IGRhdGEgKi8KIHN0cnVjdCBpZ2JfcmVnX3Rlc3QgewogCXUxNiByZWc7Ci0JdTggIGFycmF5X2xlbjsKLQl1OCAgdGVzdF90eXBlOworCXUxNiByZWdfb2Zmc2V0OworCXUxNiBhcnJheV9sZW47CisJdTE2IHRlc3RfdHlwZTsKIAl1MzIgbWFzazsKIAl1MzIgd3JpdGU7CiB9OwpAQCAtODUyLDM0ICs4NTYsNzIgQEAKICNkZWZpbmUgVEFCTEU2NF9URVNUX0xPCTUKICNkZWZpbmUgVEFCTEU2NF9URVNUX0hJCTYKIAotLyogZGVmYXVsdCByZWdpc3RlciB0ZXN0ICovCi1zdGF0aWMgc3RydWN0IGlnYl9yZWdfdGVzdCByZWdfdGVzdF84MjU3NVtdID0gewotCXsgRTEwMDBfRkNBTCwgMSwgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCi0JeyBFMTAwMF9GQ0FILCAxLCBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX0ZDVCwgMSwgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweEZGRkZGRkZGIH0sCi0JeyBFMTAwMF9WRVQsIDEsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAotCXsgRTEwMDBfUkRCQUwoMCksIDQsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkZGRiB9LAotCXsgRTEwMDBfUkRCQUgoMCksIDQsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAotCXsgRTEwMDBfUkRMRU4oMCksIDQsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkY4MCwgMHgwMDBGRkZGRiB9LAorLyogODI1NzYgcmVnIHRlc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgaWdiX3JlZ190ZXN0IHJlZ190ZXN0XzgyNTc2W10gPSB7CisJeyBFMTAwMF9GQ0FMLAkgICAweDEwMCwgMSwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfRkNBSCwJICAgMHgxMDAsIDEsICBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX0ZDVCwJICAgMHgxMDAsIDEsICBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1ZFVCwJICAgMHgxMDAsIDEsICBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JEQkFMKDApLCAgMHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfUkRCQUgoMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SRExFTigwKSwgIDB4MTAwLCA0LCBQQVRURVJOX1RFU1QsIDB4MDAwRkZGRjAsIDB4MDAwRkZGRkYgfSwKKwl7IEUxMDAwX1JEQkFMKDQpLCAgMHg0MCwgIDgsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfUkRCQUgoNCksICAweDQwLCAgOCwgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SRExFTig0KSwgIDB4NDAsICA4LCBQQVRURVJOX1RFU1QsIDB4MDAwRkZGRjAsIDB4MDAwRkZGRkYgfSwKIAkvKiBFbmFibGUgYWxsIGZvdXIgUlggcXVldWVzIGJlZm9yZSB0ZXN0aW5nLiAqLwotCXsgRTEwMDBfUlhEQ1RMKDApLCA0LCBXUklURV9OT19URVNULCAwLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFIH0sCisJeyBFMTAwMF9SWERDVEwoMCksIDB4MTAwLCAxLCAgV1JJVEVfTk9fVEVTVCwgMCwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSB9LAorCS8qIFJESCBpcyByZWFkLW9ubHkgZm9yIDgyNTc2LCBvbmx5IHRlc3QgUkRULiAqLworCXsgRTEwMDBfUkRUKDApLAkgICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHgwMDAwRkZGRiwgMHgwMDAwRkZGRiB9LAorCXsgRTEwMDBfUlhEQ1RMKDApLCAweDEwMCwgNCwgIFdSSVRFX05PX1RFU1QsIDAsIDAgfSwKKwl7IEUxMDAwX0ZDUlRILAkgICAweDEwMCwgMSwgIFBBVFRFUk5fVEVTVCwgMHgwMDAwRkZGMCwgMHgwMDAwRkZGMCB9LAorCXsgRTEwMDBfRkNUVFYsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCisJeyBFMTAwMF9USVBHLAkgICAweDEwMCwgMSwgIFBBVFRFUk5fVEVTVCwgMHgzRkZGRkZGRiwgMHgzRkZGRkZGRiB9LAorCXsgRTEwMDBfVERCQUwoMCksICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfVERCQUgoMCksICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfVERMRU4oMCksICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAorCXsgRTEwMDBfVERCQUwoNCksICAweDQwLCA4LCAgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9UREJBSCg0KSwgIDB4NDAsIDgsICBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1RETEVOKDQpLCAgMHg0MCwgOCwgIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAorCXsgRTEwMDBfUkNUTCwJICAgMHgxMDAsIDEsICBTRVRfUkVBRF9URVNULCAweEZGRkZGRkZGLCAweDAwMDAwMDAwIH0sCisJeyBFMTAwMF9SQ1RMLCAJICAgMHgxMDAsIDEsICBTRVRfUkVBRF9URVNULCAweDA0Q0ZCMEZFLCAweDAwM0ZGRkZCIH0sCisJeyBFMTAwMF9SQ1RMLCAJICAgMHgxMDAsIDEsICBTRVRfUkVBRF9URVNULCAweDA0Q0ZCMEZFLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9UQ1RMLAkgICAweDEwMCwgMSwgIFNFVF9SRUFEX1RFU1QsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAgfSwKKwl7IEUxMDAwX1JBLAkgICAwLCAxNiwgVEFCTEU2NF9URVNUX0xPLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SQSwJICAgMCwgMTYsIFRBQkxFNjRfVEVTVF9ISSwgMHg4M0ZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfUkEyLAkgICAwLCA4LCBUQUJMRTY0X1RFU1RfTE8sIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JBMiwJICAgMCwgOCwgVEFCTEU2NF9URVNUX0hJLCAweDgzRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9NVEEsCSAgIDAsIDEyOCxUQUJMRTMyX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IDAsIDAsIDAsIDAgfQorfTsKKworLyogODI1NzUgcmVnaXN0ZXIgdGVzdCAqLworc3RhdGljIHN0cnVjdCBpZ2JfcmVnX3Rlc3QgcmVnX3Rlc3RfODI1NzVbXSA9IHsKKwl7IEUxMDAwX0ZDQUwsICAgICAgMHgxMDAsIDEsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfRkNBSCwgICAgICAweDEwMCwgMSwgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9GQ1QsICAgICAgIDB4MTAwLCAxLCBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1ZFVCwgICAgICAgMHgxMDAsIDEsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfUkRCQUwoMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SREJBSCgwKSwgIDB4MTAwLCA0LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JETEVOKDApLCAgMHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkY4MCwgMHgwMDBGRkZGRiB9LAorCS8qIEVuYWJsZSBhbGwgZm91ciBSWCBxdWV1ZXMgYmVmb3JlIHRlc3RpbmcuICovCisJeyBFMTAwMF9SWERDVEwoMCksIDB4MTAwLCA0LCBXUklURV9OT19URVNULCAwLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFIH0sCiAJLyogUkRIIGlzIHJlYWQtb25seSBmb3IgODI1NzUsIG9ubHkgdGVzdCBSRFQuICovCi0JeyBFMTAwMF9SRFQoMCksIDQsIFBBVFRFUk5fVEVTVCwgMHgwMDAwRkZGRiwgMHgwMDAwRkZGRiB9LAotCXsgRTEwMDBfUlhEQ1RMKDApLCA0LCBXUklURV9OT19URVNULCAwLCAwIH0sCi0JeyBFMTAwMF9GQ1JUSCwgMSwgUEFUVEVSTl9URVNULCAweDAwMDBGRkYwLCAweDAwMDBGRkYwIH0sCi0JeyBFMTAwMF9GQ1RUViwgMSwgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCi0JeyBFMTAwMF9USVBHLCAxLCBQQVRURVJOX1RFU1QsIDB4M0ZGRkZGRkYsIDB4M0ZGRkZGRkYgfSwKLQl7IEUxMDAwX1REQkFMKDApLCA0LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1REQkFIKDApLCA0LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1RETEVOKDApLCA0LCBQQVRURVJOX1RFU1QsIDB4MDAwRkZGODAsIDB4MDAwRkZGRkYgfSwKLQl7IEUxMDAwX1JDVEwsIDEsIFNFVF9SRUFEX1RFU1QsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAgfSwKLQl7IEUxMDAwX1JDVEwsIDEsIFNFVF9SRUFEX1RFU1QsIDB4MDRDRkIzRkUsIDB4MDAzRkZGRkIgfSwKLQl7IEUxMDAwX1JDVEwsIDEsIFNFVF9SRUFEX1RFU1QsIDB4MDRDRkIzRkUsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1RDVEwsIDEsIFNFVF9SRUFEX1RFU1QsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAgfSwKLQl7IEUxMDAwX1RYQ1csIDEsIFBBVFRFUk5fVEVTVCwgMHhDMDAwRkZGRiwgMHgwMDAwRkZGRiB9LAotCXsgRTEwMDBfUkEsIDE2LCBUQUJMRTY0X1RFU1RfTE8sIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1JBLCAxNiwgVEFCTEU2NF9URVNUX0hJLCAweDgwMEZGRkZGLCAweEZGRkZGRkZGIH0sCi0JeyBFMTAwMF9NVEEsIDEyOCwgVEFCTEUzMl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SRFQoMCksICAgIDB4MTAwLCA0LCBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKKwl7IEUxMDAwX1JYRENUTCgwKSwgMHgxMDAsIDQsIFdSSVRFX05PX1RFU1QsIDAsIDAgfSwKKwl7IEUxMDAwX0ZDUlRILCAgICAgMHgxMDAsIDEsIFBBVFRFUk5fVEVTVCwgMHgwMDAwRkZGMCwgMHgwMDAwRkZGMCB9LAorCXsgRTEwMDBfRkNUVFYsICAgICAweDEwMCwgMSwgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCisJeyBFMTAwMF9USVBHLCAgICAgIDB4MTAwLCAxLCBQQVRURVJOX1RFU1QsIDB4M0ZGRkZGRkYsIDB4M0ZGRkZGRkYgfSwKKwl7IEUxMDAwX1REQkFMKDApLCAgMHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfVERCQUgoMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9URExFTigwKSwgIDB4MTAwLCA0LCBQQVRURVJOX1RFU1QsIDB4MDAwRkZGODAsIDB4MDAwRkZGRkYgfSwKKwl7IEUxMDAwX1JDVEwsICAgICAgMHgxMDAsIDEsIFNFVF9SRUFEX1RFU1QsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAgfSwKKwl7IEUxMDAwX1JDVEwsICAgICAgMHgxMDAsIDEsIFNFVF9SRUFEX1RFU1QsIDB4MDRDRkIzRkUsIDB4MDAzRkZGRkIgfSwKKwl7IEUxMDAwX1JDVEwsICAgICAgMHgxMDAsIDEsIFNFVF9SRUFEX1RFU1QsIDB4MDRDRkIzRkUsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1RDVEwsICAgICAgMHgxMDAsIDEsIFNFVF9SRUFEX1RFU1QsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAgfSwKKwl7IEUxMDAwX1RYQ1csICAgICAgMHgxMDAsIDEsIFBBVFRFUk5fVEVTVCwgMHhDMDAwRkZGRiwgMHgwMDAwRkZGRiB9LAorCXsgRTEwMDBfUkEsICAgICAgICAwLCAxNiwgVEFCTEU2NF9URVNUX0xPLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SQSwgICAgICAgIDAsIDE2LCBUQUJMRTY0X1RFU1RfSEksIDB4ODAwRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX01UQSwgICAgICAgMCwgMTI4LCBUQUJMRTMyX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKIAl7IDAsIDAsIDAsIDAgfQogfTsKIApAQCAtOTM5LDcgKzk4MSwxNSBAQAogCXUzMiBpLCB0b2dnbGU7CiAKIAl0b2dnbGUgPSAweDdGRkZGM0ZGOwotCXRlc3QgPSByZWdfdGVzdF84MjU3NTsKKworCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc2OgorCQl0ZXN0ID0gcmVnX3Rlc3RfODI1NzY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRlc3QgPSByZWdfdGVzdF84MjU3NTsKKwkJYnJlYWs7CisJfQogCiAJLyogQmVjYXVzZSB0aGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHN1Y2ggYSBzcGVjaWFsIGNhc2UsCiAJICogd2UgaGFuZGxlIGl0IHNlcGFyYXRlbHkgZnJvbSB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXIKQEAgLTk2NiwxOSArMTAxNiwxOSBAQAogCQlmb3IgKGkgPSAwOyBpIDwgdGVzdC0+YXJyYXlfbGVuOyBpKyspIHsKIAkJCXN3aXRjaCAodGVzdC0+dGVzdF90eXBlKSB7CiAJCQljYXNlIFBBVFRFUk5fVEVTVDoKLQkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogMHgxMDApLAorCQkJCVJFR19QQVRURVJOX1RFU1QodGVzdC0+cmVnICsgKGkgKiB0ZXN0LT5yZWdfb2Zmc2V0KSwKIAkJCQkJCXRlc3QtPm1hc2ssCiAJCQkJCQl0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNFVF9SRUFEX1RFU1Q6Ci0JCQkJUkVHX1NFVF9BTkRfQ0hFQ0sodGVzdC0+cmVnICsgKGkgKiAweDEwMCksCisJCQkJUkVHX1NFVF9BTkRfQ0hFQ0sodGVzdC0+cmVnICsgKGkgKiB0ZXN0LT5yZWdfb2Zmc2V0KSwKIAkJCQkJCXRlc3QtPm1hc2ssCiAJCQkJCQl0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFdSSVRFX05PX1RFU1Q6CiAJCQkJd3JpdGVsKHRlc3QtPndyaXRlLAogCQkJCSAgICAoYWRhcHRlci0+aHcuaHdfYWRkciArIHRlc3QtPnJlZykKLQkJCQkJKyAoaSAqIDB4MTAwKSk7CisJCQkJCSsgKGkgKiB0ZXN0LT5yZWdfb2Zmc2V0KSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRBQkxFMzJfVEVTVDoKIAkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogNCksCkBAIC0xMDUyLDcgKzExMDIsNyBAQAogCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpIHsKIAkJLyogTk9URTogd2UgZG9uJ3QgdGVzdCBNU0ktWCBpbnRlcnJ1cHRzIGhlcmUsIHlldCAqLwogCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPm1zaV9lbmFibGVkKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0hBU19NU0kpIHsKIAkJc2hhcmVkX2ludCA9IGZhbHNlOwogCQlpZiAocmVxdWVzdF9pcnEoaXJxLCAmaWdiX3Rlc3RfaW50ciwgMCwgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSB7CiAJCQkqZGF0YSA9IDE7CkBAIC0xMzk0LDEzICsxNDQ0LDM5IEBACiBzdGF0aWMgaW50IGlnYl9zZXR1cF9sb29wYmFja190ZXN0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiByY3RsOworCXUzMiByZWc7CiAKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIgfHwKIAkgICAgaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7Ci0JCXJjdGwgPSByZDMyKEUxMDAwX1JDVEwpOwotCQlyY3RsIHw9IEUxMDAwX1JDVExfTEJNX1RDVlI7Ci0JCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CisJCXJlZyA9IHJkMzIoRTEwMDBfUkNUTCk7CisJCXJlZyB8PSBFMTAwMF9SQ1RMX0xCTV9UQ1ZSOworCQl3cjMyKEUxMDAwX1JDVEwsIHJlZyk7CisKKwkJd3IzMihFMTAwMF9TQ1RMLCBFMTAwMF9FTkFCTEVfU0VSREVTX0xPT1BCQUNLKTsKKworCQlyZWcgPSByZDMyKEUxMDAwX0NUUkwpOworCQlyZWcgJj0gfihFMTAwMF9DVFJMX1JGQ0UgfAorCQkJIEUxMDAwX0NUUkxfVEZDRSB8CisJCQkgRTEwMDBfQ1RSTF9MUlNUKTsKKwkJcmVnIHw9IEUxMDAwX0NUUkxfU0xVIHwKKwkJICAgICAgIEUxMDAwX0NUUkxfRkQ7IAorCQl3cjMyKEUxMDAwX0NUUkwsIHJlZyk7CisKKwkJLyogVW5zZXQgc3dpdGNoIGNvbnRyb2wgdG8gc2VyZGVzIGVuZXJneSBkZXRlY3QgKi8KKwkJcmVnID0gcmQzMihFMTAwMF9DT05OU1cpOworCQlyZWcgJj0gfkUxMDAwX0NPTk5TV19FTlJHU1JDOworCQl3cjMyKEUxMDAwX0NPTk5TVywgcmVnKTsKKworCQkvKiBTZXQgUENTIHJlZ2lzdGVyIGZvciBmb3JjZWQgc3BlZWQgKi8KKwkJcmVnID0gcmQzMihFMTAwMF9QQ1NfTENUTCk7CisJCXJlZyAmPSB+RTEwMDBfUENTX0xDVExfQU5fRU5BQkxFOyAgICAgLyogRGlzYWJsZSBBdXRvbmVnKi8KKwkJcmVnIHw9IEUxMDAwX1BDU19MQ1RMX0ZMVl9MSU5LX1VQIHwgICAvKiBGb3JjZSBsaW5rIHVwICovCisJCSAgICAgICBFMTAwMF9QQ1NfTENUTF9GU1ZfMTAwMCB8ICAgICAgLyogRm9yY2UgMTAwMCAgICAqLworCQkgICAgICAgRTEwMDBfUENTX0xDVExfRkRWX0ZVTEwgfCAgICAgIC8qIFNlckRlcyBGdWxsIGR1cGxleCAqLworCQkgICAgICAgRTEwMDBfUENTX0xDVExfRlNEIHwgICAgICAgICAgIC8qIEZvcmNlIFNwZWVkICovCisJCSAgICAgICBFMTAwMF9QQ1NfTENUTF9GT1JDRV9MSU5LOyAgICAgLyogRm9yY2UgTGluayAqLworCQl3cjMyKEUxMDAwX1BDU19MQ1RMLCByZWcpOworCiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCXJldHVybiBpZ2Jfc2V0X3BoeV9sb29wYmFjayhhZGFwdGVyKTsKQEAgLTE2NjAsNiArMTczNiw4IEBACiAJCXdvbC0+c3VwcG9ydGVkID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NzVFQl9GSUJFUl9TRVJERVM6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfRklCRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfU0VSREVTOgogCQkvKiBXYWtlIGV2ZW50cyBub3Qgc3VwcG9ydGVkIG9uIHBvcnQgQiAqLwogCQlpZiAocmQzMihFMTAwMF9TVEFUVVMpICYgRTEwMDBfU1RBVFVTX0ZVTkNfMSkgewogCQkJd29sLT5zdXBwb3J0ZWQgPSAwOwpAQCAtMTY2OCw2ICsxNzQ2LDE1IEBACiAJCS8qIHJldHVybiBzdWNjZXNzIGZvciBub24gZXhjbHVkZWQgYWRhcHRlciBwb3J0cyAqLwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUjoKKwkJLyogcXVhZCBwb3J0IGFkYXB0ZXJzIG9ubHkgc3VwcG9ydCBXb0wgb24gcG9ydCBBICovCisJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfUVVBRF9QT1JUX0EpKSB7CisJCQl3b2wtPnN1cHBvcnRlZCA9IDA7CisJCQlicmVhazsKKwkJfQorCQkvKiByZXR1cm4gc3VjY2VzcyBmb3Igbm9uIGV4Y2x1ZGVkIGFkYXB0ZXIgcG9ydHMgKi8KKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogZHVhbCBwb3J0IGNhcmRzIG9ubHkgc3VwcG9ydCBXb0wgb24gcG9ydCBBIGZyb20gbm93IG9uCiAJCSAqIHVubGVzcyBpdCB3YXMgZW5hYmxlZCBpbiB0aGUgZWVwcm9tIGZvciBwb3J0IEIKQEAgLTE3NzQsNiArMTg2MSw4IEBACiAJCQkgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgaTsKIAogCWlmICgoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID4gSUdCX01BWF9JVFJfVVNFQ1MpIHx8CiAJICAgICgoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID4gMykgJiYKQEAgLTE3ODIsMTMgKzE4NzEsMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBjb252ZXJ0IHRvIHJhdGUgb2YgaXJxJ3MgcGVyIHNlY29uZCAqLwotCWlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPD0gMykKKwlpZiAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzICYmIGVjLT5yeF9jb2FsZXNjZV91c2VjcyA8PSAzKSB7CiAJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gZWMtPnJ4X2NvYWxlc2NlX3VzZWNzOwotCWVsc2UKLQkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAoMTAwMDAwMCAvIGVjLT5yeF9jb2FsZXNjZV91c2Vjcyk7CisJCWFkYXB0ZXItPml0ciA9IElHQl9TVEFSVF9JVFI7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBlYy0+cnhfY29hbGVzY2VfdXNlY3MgPDwgMjsKKwkJYWRhcHRlci0+aXRyID0gYWRhcHRlci0+aXRyX3NldHRpbmc7CisJfQogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKLQkJaWdiX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJd3IzMihhZGFwdGVyLT5yeF9yaW5nW2ldLml0cl9yZWdpc3RlciwgYWRhcHRlci0+aXRyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTgwMSw3ICsxODkzLDcgQEAKIAlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgPD0gMykKIAkJZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gYWRhcHRlci0+aXRyX3NldHRpbmc7CiAJZWxzZQotCQllYy0+cnhfY29hbGVzY2VfdXNlY3MgPSAxMDAwMDAwIC8gYWRhcHRlci0+aXRyX3NldHRpbmc7CisJCWVjLT5yeF9jb2FsZXNjZV91c2VjcyA9IGFkYXB0ZXItPml0cl9zZXR0aW5nID4+IDI7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4MzUsNiArMTkyNywxOCBAQAogCWludCBzdGF0X2NvdW50ID0gc2l6ZW9mKHN0cnVjdCBpZ2JfcXVldWVfc3RhdHMpIC8gc2l6ZW9mKHU2NCk7CiAJaW50IGo7CiAJaW50IGk7CisjaWZkZWYgQ09ORklHX0lHQl9MUk8KKwlpbnQgYWdncmVnYXRlZCA9IDAsIGZsdXNoZWQgPSAwLCBub19kZXNjID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJYWdncmVnYXRlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKKwkJZmx1c2hlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKKwkJbm9fZGVzYyArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKKwl9CisJYWRhcHRlci0+bHJvX2FnZ3JlZ2F0ZWQgPSBhZ2dyZWdhdGVkOworCWFkYXB0ZXItPmxyb19mbHVzaGVkID0gZmx1c2hlZDsKKwlhZGFwdGVyLT5scm9fbm9fZGVzYyA9IG5vX2Rlc2M7CisjZW5kaWYKIAogCWlnYl91cGRhdGVfc3RhdHMoYWRhcHRlcik7CiAJZm9yIChpID0gMDsgaSA8IElHQl9HTE9CQUxfU1RBVFNfTEVOOyBpKyspIHsKQEAgLTE4NDIsNiArMTk0NiwxMyBAQAogCQlkYXRhW2ldID0gKGlnYl9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PQogCQkJc2l6ZW9mKHU2NCkpID8gKih1NjQgKilwIDogKih1MzIgKilwOwogCX0KKwlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaisrKSB7CisJCWludCBrOworCQlxdWV1ZV9zdGF0ID0gKHU2NCAqKSZhZGFwdGVyLT50eF9yaW5nW2pdLnR4X3N0YXRzOworCQlmb3IgKGsgPSAwOyBrIDwgc3RhdF9jb3VudDsgaysrKQorCQkJZGF0YVtpICsga10gPSBxdWV1ZV9zdGF0W2tdOworCQlpICs9IGs7CisJfQogCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBqKyspIHsKIAkJaW50IGs7CiAJCXF1ZXVlX3N0YXQgPSAodTY0ICopJmFkYXB0ZXItPnJ4X3Jpbmdbal0ucnhfc3RhdHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IGU3OWEyNmEuLmI2MDJjNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCkBAIC00MSwyMiArNDEsMjcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+Ci0KKyNpZmRlZiBDT05GSUdfRENBCisjaW5jbHVkZSA8bGludXgvZGNhLmg+CisjZW5kaWYKICNpbmNsdWRlICJpZ2IuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjgtazIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjIuNDUtazIiCiBjaGFyIGlnYl9kcml2ZXJfbmFtZVtdID0gImlnYiI7CiBjaGFyIGlnYl9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY29uc3QgY2hhciBpZ2JfZHJpdmVyX3N0cmluZ1tdID0KIAkJCQkiSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBOZXR3b3JrIERyaXZlciI7Ci1zdGF0aWMgY29uc3QgY2hhciBpZ2JfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiI7Ci0KK3N0YXRpYyBjb25zdCBjaGFyIGlnYl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvICppZ2JfaW5mb190YmxbXSA9IHsKIAlbYm9hcmRfODI1NzVdID0gJmUxMDAwXzgyNTc1X2luZm8sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWdiX3BjaV90YmxbXSA9IHsKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzYpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUiksIGJvYXJkXzgyNTc1IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUyksIGJvYXJkXzgyNTc1IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzVFQl9DT1BQRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUyksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc1R0JfUVVBRF9DT1BQRVIpLCBib2FyZF84MjU3NSB9LApAQCAtNzEsOCArNzYsOCBAQAogc3RhdGljIGludCBpZ2Jfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CiBzdGF0aWMgdm9pZCBpZ2JfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKIHN0YXRpYyB2b2lkIGlnYl9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IGlnYl9hZGFwdGVyICopOwotc3RhdGljIHZvaWQgaWdiX2ZyZWVfdHhfcmVzb3VyY2VzKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBzdHJ1Y3QgaWdiX3JpbmcgKik7Ci1zdGF0aWMgdm9pZCBpZ2JfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IGlnYl9hZGFwdGVyICosIHN0cnVjdCBpZ2JfcmluZyAqKTsKK3N0YXRpYyB2b2lkIGlnYl9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX3JpbmcgKik7CitzdGF0aWMgdm9pZCBpZ2JfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IGlnYl9yaW5nICopOwogdm9pZCBpZ2JfdXBkYXRlX3N0YXRzKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKIHN0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOwogc3RhdGljIHZvaWQgX19kZXZleGl0IGlnYl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwpAQCAtODQsOCArODksOCBAQAogc3RhdGljIHZvaWQgaWdiX3NldHVwX3JjdGwoc3RydWN0IGlnYl9hZGFwdGVyICopOwogc3RhdGljIHZvaWQgaWdiX2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CiBzdGF0aWMgdm9pZCBpZ2JfY2xlYW5fYWxsX3J4X3JpbmdzKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKLXN0YXRpYyB2b2lkIGlnYl9jbGVhbl90eF9yaW5nKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBzdHJ1Y3QgaWdiX3JpbmcgKik7Ci1zdGF0aWMgdm9pZCBpZ2JfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgc3RydWN0IGlnYl9yaW5nICopOworc3RhdGljIHZvaWQgaWdiX2NsZWFuX3R4X3Jpbmcoc3RydWN0IGlnYl9yaW5nICopOworc3RhdGljIHZvaWQgaWdiX2NsZWFuX3J4X3Jpbmcoc3RydWN0IGlnYl9yaW5nICopOwogc3RhdGljIHZvaWQgaWdiX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIGlnYl91cGRhdGVfcGh5X2luZm8odW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBpZ2Jfd2F0Y2hkb2codW5zaWduZWQgbG9uZyk7CkBAIC0xMDIsMTIgKzEwNywxOCBAQAogc3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X3J4KGludCBpcnEsIHZvaWQgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaWdiX21zaXhfdHgoaW50IGlycSwgdm9pZCAqKTsKIHN0YXRpYyBpbnQgaWdiX2NsZWFuX3J4X3JpbmdfbXNpeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKLXN0YXRpYyBib29sIGlnYl9jbGVhbl90eF9pcnEoc3RydWN0IGlnYl9hZGFwdGVyICosIHN0cnVjdCBpZ2JfcmluZyAqKTsKLXN0YXRpYyBpbnQgaWdiX2NsZWFuKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwotc3RhdGljIGJvb2wgaWdiX2NsZWFuX3J4X2lycV9hZHYoc3RydWN0IGlnYl9hZGFwdGVyICosCi0JCQkJIHN0cnVjdCBpZ2JfcmluZyAqLCBpbnQgKiwgaW50KTsKLXN0YXRpYyB2b2lkIGlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwKLQkJCQkgICAgIHN0cnVjdCBpZ2JfcmluZyAqLCBpbnQpOworI2lmZGVmIENPTkZJR19EQ0EKK3N0YXRpYyB2b2lkIGlnYl91cGRhdGVfcnhfZGNhKHN0cnVjdCBpZ2JfcmluZyAqKTsKK3N0YXRpYyB2b2lkIGlnYl91cGRhdGVfdHhfZGNhKHN0cnVjdCBpZ2JfcmluZyAqKTsKK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9kY2Eoc3RydWN0IGlnYl9hZGFwdGVyICopOworI2VuZGlmIC8qIENPTkZJR19EQ0EgKi8KK3N0YXRpYyBib29sIGlnYl9jbGVhbl90eF9pcnEoc3RydWN0IGlnYl9yaW5nICopOworc3RhdGljIGludCBpZ2JfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKK3N0YXRpYyBib29sIGlnYl9jbGVhbl9yeF9pcnFfYWR2KHN0cnVjdCBpZ2JfcmluZyAqLCBpbnQgKiwgaW50KTsKK3N0YXRpYyB2b2lkIGlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihzdHJ1Y3QgaWdiX3JpbmcgKiwgaW50KTsKKyNpZmRlZiBDT05GSUdfSUdCX0xSTworc3RhdGljIGludCBpZ2JfZ2V0X3NrYl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKiwgdm9pZCAqKiwgdTY0ICosIHZvaWQgKik7CisjZW5kaWYKIHN0YXRpYyBpbnQgaWdiX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZnJlcSAqLCBpbnQgY21kKTsKIHN0YXRpYyB2b2lkIGlnYl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgaWdiX3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICopOwpAQCAtMTIxLDYgKzEzMiwxNCBAQAogc3RhdGljIGludCBpZ2JfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICopOwogI2VuZGlmCiBzdGF0aWMgdm9pZCBpZ2Jfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKik7CisjaWZkZWYgQ09ORklHX0RDQQorc3RhdGljIGludCBpZ2Jfbm90aWZ5X2RjYShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGNhX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsCT0gaWdiX25vdGlmeV9kY2EsCisJLm5leHQJCT0gTlVMTCwKKwkucHJpb3JpdHkJPSAwCit9OworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogLyogZm9yIG5ldGR1bXAgLyBuZXQgY29uc29sZSAqLwpAQCAtMTUzLDYgKzE3Miw4IEBACiAJLmVycl9oYW5kbGVyID0gJmlnYl9lcnJfaGFuZGxlcgogfTsKIAorc3RhdGljIGludCBnbG9iYWxfcXVhZF9wb3J0X2E7IC8qIGdsb2JhbCBxdWFkIHBvcnQgYSBpbmRpY2F0aW9uICovCisKIE1PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uLCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IE5ldHdvcmsgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xODQsNyArMjA1LDEyIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgaWdiX2NvcHlyaWdodCk7CiAKKwlnbG9iYWxfcXVhZF9wb3J0X2EgPSAwOworCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaWdiX2RyaXZlcik7CisjaWZkZWYgQ09ORklHX0RDQQorCWRjYV9yZWdpc3Rlcl9ub3RpZnkoJmRjYV9ub3RpZmllcik7CisjZW5kaWYKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTgsNiArMjI0LDkgQEAKICAqKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBpZ2JfZXhpdF9tb2R1bGUodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfRENBCisJZGNhX3VucmVnaXN0ZXJfbm90aWZ5KCZkY2Ffbm90aWZpZXIpOworI2VuZGlmCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpZ2JfZHJpdmVyKTsKIH0KIApAQCAtMjI2LDI1ICsyNTUsNDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJYWRhcHRlci0+cnhfcmluZy0+YnVkZHkgPSBhZGFwdGVyLT50eF9yaW5nOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmKGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlyaW5nLT5hZGFwdGVyID0gYWRhcHRlcjsKKwkJcmluZy0+cXVldWVfaW5kZXggPSBpOworCX0KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CiAJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tpXSk7CiAJCXJpbmctPmFkYXB0ZXIgPSBhZGFwdGVyOworCQlyaW5nLT5xdWV1ZV9pbmRleCA9IGk7CiAJCXJpbmctPml0cl9yZWdpc3RlciA9IEUxMDAwX0lUUjsKIAotCQlpZiAoIXJpbmctPm5hcGkucG9sbCkKLQkJCW5ldGlmX25hcGlfYWRkKGFkYXB0ZXItPm5ldGRldiwgJnJpbmctPm5hcGksIGlnYl9jbGVhbiwKLQkJCQkgICAgICAgYWRhcHRlci0+bmFwaS53ZWlnaHQgLwotCQkJCSAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwkJLyogc2V0IGEgZGVmYXVsdCBuYXBpIGhhbmRsZXIgZm9yIGVhY2ggcnhfcmluZyAqLworCQluZXRpZl9uYXBpX2FkZChhZGFwdGVyLT5uZXRkZXYsICZyaW5nLT5uYXBpLCBpZ2JfcG9sbCwgNjQpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaWdiX2ZyZWVfcXVldWVzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCW5ldGlmX25hcGlfZGVsKCZhZGFwdGVyLT5yeF9yaW5nW2ldLm5hcGkpOworCisJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7CisJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7Cit9CisKICNkZWZpbmUgSUdCX04wX1FVRVVFIC0xCiBzdGF0aWMgdm9pZCBpZ2JfYXNzaWduX3ZlY3RvcihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCByeF9xdWV1ZSwKIAkJCSAgICAgIGludCB0eF9xdWV1ZSwgaW50IG1zaXhfdmVjdG9yKQogewogCXUzMiBtc2l4Ym0gPSAwOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGl2YXIsIGluZGV4OworCisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc1OgogCQkvKiBUaGUgODI1NzUgYXNzaWducyB2ZWN0b3JzIHVzaW5nIGEgYml0bWFzaywgd2hpY2ggbWF0Y2hlcyB0aGUKIAkJICAgYml0bWFzayBmb3IgdGhlIEVJQ1IvRUlNUy9FSU1DIHJlZ2lzdGVycy4gIFRvIGFzc2lnbiBvbmUKIAkJICAgb3IgbW9yZSBxdWV1ZXMgdG8gYSB2ZWN0b3IsIHdlIHdyaXRlIHRoZSBhcHByb3ByaWF0ZSBiaXRzCkBAIC0yNTksNiArMzA5LDQ3IEBACiAJCQkJICBFMTAwMF9FSUNSX1RYX1FVRVVFMCA8PCB0eF9xdWV1ZTsKIAkJfQogCQlhcnJheV93cjMyKEUxMDAwX01TSVhCTSgwKSwgbXNpeF92ZWN0b3IsIG1zaXhibSk7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfODI1NzY6CisJCS8qIEthd2VsYSB1c2VzIGEgdGFibGUtYmFzZWQgbWV0aG9kIGZvciBhc3NpZ25pbmcgdmVjdG9ycy4KKwkJICAgRWFjaCBxdWV1ZSBoYXMgYSBzaW5nbGUgZW50cnkgaW4gdGhlIHRhYmxlIHRvIHdoaWNoIHdlIHdyaXRlCisJCSAgIGEgdmVjdG9yIG51bWJlciBhbG9uZyB3aXRoIGEgInZhbGlkIiBiaXQuICBTYWRseSwgdGhlIGxheW91dAorCQkgICBvZiB0aGUgdGFibGUgaXMgc29tZXdoYXQgY291bnRlcmludHVpdGl2ZS4gKi8KKwkJaWYgKHJ4X3F1ZXVlID4gSUdCX04wX1FVRVVFKSB7CisJCQlpbmRleCA9IChyeF9xdWV1ZSAmIDB4Nyk7CisJCQlpdmFyID0gYXJyYXlfcmQzMihFMTAwMF9JVkFSMCwgaW5kZXgpOworCQkJaWYgKHJ4X3F1ZXVlIDwgOCkgeworCQkJCS8qIHZlY3RvciBnb2VzIGludG8gbG93IGJ5dGUgb2YgcmVnaXN0ZXIgKi8KKwkJCQlpdmFyID0gaXZhciAmIDB4RkZGRkZGMDA7CisJCQkJaXZhciB8PSBtc2l4X3ZlY3RvciB8IEUxMDAwX0lWQVJfVkFMSUQ7CisJCQl9IGVsc2UgeworCQkJCS8qIHZlY3RvciBnb2VzIGludG8gdGhpcmQgYnl0ZSBvZiByZWdpc3RlciAqLworCQkJCWl2YXIgPSBpdmFyICYgMHhGRjAwRkZGRjsKKwkJCQlpdmFyIHw9IChtc2l4X3ZlY3RvciB8IEUxMDAwX0lWQVJfVkFMSUQpIDw8IDE2OworCQkJfQorCQkJYWRhcHRlci0+cnhfcmluZ1tyeF9xdWV1ZV0uZWltc192YWx1ZT0gMSA8PCBtc2l4X3ZlY3RvcjsKKwkJCWFycmF5X3dyMzIoRTEwMDBfSVZBUjAsIGluZGV4LCBpdmFyKTsKKwkJfQorCQlpZiAodHhfcXVldWUgPiBJR0JfTjBfUVVFVUUpIHsKKwkJCWluZGV4ID0gKHR4X3F1ZXVlICYgMHg3KTsKKwkJCWl2YXIgPSBhcnJheV9yZDMyKEUxMDAwX0lWQVIwLCBpbmRleCk7CisJCQlpZiAodHhfcXVldWUgPCA4KSB7CisJCQkJLyogdmVjdG9yIGdvZXMgaW50byBzZWNvbmQgYnl0ZSBvZiByZWdpc3RlciAqLworCQkJCWl2YXIgPSBpdmFyICYgMHhGRkZGMDBGRjsKKwkJCQlpdmFyIHw9IChtc2l4X3ZlY3RvciB8IEUxMDAwX0lWQVJfVkFMSUQpIDw8IDg7CisJCQl9IGVsc2UgeworCQkJCS8qIHZlY3RvciBnb2VzIGludG8gaGlnaCBieXRlIG9mIHJlZ2lzdGVyICovCisJCQkJaXZhciA9IGl2YXIgJiAweDAwRkZGRkZGOworCQkJCWl2YXIgfD0gKG1zaXhfdmVjdG9yIHwgRTEwMDBfSVZBUl9WQUxJRCkgPDwgMjQ7CisJCQl9CisJCQlhZGFwdGVyLT50eF9yaW5nW3R4X3F1ZXVlXS5laW1zX3ZhbHVlPSAxIDw8IG1zaXhfdmVjdG9yOworCQkJYXJyYXlfd3IzMihFMTAwMF9JVkFSMCwgaW5kZXgsIGl2YXIpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CiB9CiAKIC8qKgpAQCAtMjc0LDEzICszNjUsMTkgQEAKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCiAJYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayA9IDA7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikKKwkJLyogVHVybiBvbiBNU0ktWCBjYXBhYmlsaXR5IGZpcnN0LCBvciBvdXIgc2V0dGluZ3MKKwkJICogd29uJ3Qgc3RpY2suICBBbmQgaXQgd2lsbCB0YWtlIGRheXMgdG8gZGVidWcuICovCisJCXdyMzIoRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfAorCQkJCSAgIEUxMDAwX0dQSUVfUEJBIHwgRTEwMDBfR1BJRV9FSUFNRSB8IAorIAkJCQkgICBFMTAwMF9HUElFX05TSUNSKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKIAkJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbaV07CiAJCWlnYl9hc3NpZ25fdmVjdG9yKGFkYXB0ZXIsIElHQl9OMF9RVUVVRSwgaSwgdmVjdG9yKyspOwogCQlhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrIHw9IHR4X3JpbmctPmVpbXNfdmFsdWU7CiAJCWlmICh0eF9yaW5nLT5pdHJfdmFsKQotCQkJd3JpdGVsKDEwMDAwMDAwMDAgLyAodHhfcmluZy0+aXRyX3ZhbCAqIDI1NiksCisJCQl3cml0ZWwodHhfcmluZy0+aXRyX3ZhbCwKIAkJCSAgICAgICBody0+aHdfYWRkciArIHR4X3JpbmctPml0cl9yZWdpc3Rlcik7CiAJCWVsc2UKIAkJCXdyaXRlbCgxLCBody0+aHdfYWRkciArIHR4X3JpbmctPml0cl9yZWdpc3Rlcik7CkBAIC0yODgsMTAgKzM4NSwxMSBAQAogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewogCQlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKKwkJcnhfcmluZy0+YnVkZHkgPSBOVUxMOwogCQlpZ2JfYXNzaWduX3ZlY3RvcihhZGFwdGVyLCBpLCBJR0JfTjBfUVVFVUUsIHZlY3RvcisrKTsKIAkJYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayB8PSByeF9yaW5nLT5laW1zX3ZhbHVlOwogCQlpZiAocnhfcmluZy0+aXRyX3ZhbCkKLQkJCXdyaXRlbCgxMDAwMDAwMDAwIC8gKHJ4X3JpbmctPml0cl92YWwgKiAyNTYpLAorCQkJd3JpdGVsKHJ4X3JpbmctPml0cl92YWwsCiAJCQkgICAgICAgaHctPmh3X2FkZHIgKyByeF9yaW5nLT5pdHJfcmVnaXN0ZXIpOwogCQllbHNlCiAJCQl3cml0ZWwoMSwgaHctPmh3X2FkZHIgKyByeF9yaW5nLT5pdHJfcmVnaXN0ZXIpOwpAQCAtMjk5LDEyICszOTcsMTEgQEAKIAogCiAJLyogc2V0IHZlY3RvciBmb3Igb3RoZXIgY2F1c2VzLCBpLmUuIGxpbmsgY2hhbmdlcyAqLworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3NToKIAkJYXJyYXlfd3IzMihFMTAwMF9NU0lYQk0oMCksIHZlY3RvcisrLAogCQkJCSAgICAgIEUxMDAwX0VJTVNfT1RIRVIpOwogCi0JCS8qIGRpc2FibGUgSUFNIGZvciBJQ1IgaW50ZXJydXB0IGJpdHMgKi8KLQkJd3IzMihFMTAwMF9JQU0sIDApOwotCiAJCXRtcCA9IHJkMzIoRTEwMDBfQ1RSTF9FWFQpOwogCQkvKiBlbmFibGUgTVNJLVggUEJBIHN1cHBvcnQqLwogCQl0bXAgfD0gRTEwMDBfQ1RSTF9FWFRfUEJBX0NMUjsKQEAgLTMxNSw3ICs0MTIsMjEgQEAKIAogCQl3cjMyKEUxMDAwX0NUUkxfRVhULCB0bXApOwogCQlhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrIHw9IEUxMDAwX0VJTVNfT1RIRVI7CisJCWFkYXB0ZXItPmVpbXNfb3RoZXIgPSBFMTAwMF9FSU1TX09USEVSOwogCisJCWJyZWFrOworCisJY2FzZSBlMTAwMF84MjU3NjoKKwkJdG1wID0gKHZlY3RvcisrIHwgRTEwMDBfSVZBUl9WQUxJRCkgPDwgODsKKwkJd3IzMihFMTAwMF9JVkFSX01JU0MsIHRtcCk7CisKKwkJYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayA9ICgxIDw8ICh2ZWN0b3IpKSAtIDE7CisJCWFkYXB0ZXItPmVpbXNfb3RoZXIgPSAxIDw8ICh2ZWN0b3IgLSAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZG8gbm90aGluZywgc2luY2Ugbm90aGluZyBlbHNlIHN1cHBvcnRzIE1TSS1YICovCisJCWJyZWFrOworCX0gLyogc3dpdGNoIChody0+bWFjLnR5cGUpICovCiAJd3JmbCgpOwogfQogCkBAIC0zNDEsNyArNDUyLDcgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQlyaW5nLT5pdHJfcmVnaXN0ZXIgPSBFMTAwMF9FSVRSKDApICsgKHZlY3RvciA8PCAyKTsKLQkJcmluZy0+aXRyX3ZhbCA9IGFkYXB0ZXItPml0cjsKKwkJcmluZy0+aXRyX3ZhbCA9IDk3NjsgLyogfjQwMDAgaW50cy9zZWMgKi8KIAkJdmVjdG9yKys7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKQEAgLTM1Nyw2ICs0NjgsOSBAQAogCQkJZ290byBvdXQ7CiAJCXJpbmctPml0cl9yZWdpc3RlciA9IEUxMDAwX0VJVFIoMCkgKyAodmVjdG9yIDw8IDIpOwogCQlyaW5nLT5pdHJfdmFsID0gYWRhcHRlci0+aXRyOworCQkvKiBvdmVyd3JpdGUgdGhlIHBvbGwgcm91dGluZSBmb3IgTVNJWCwgd2UndmUgYWxyZWFkeSBkb25lCisJCSAqIG5ldGlmX25hcGlfYWRkICovCisJCXJpbmctPm5hcGkucG9sbCA9ICZpZ2JfY2xlYW5fcnhfcmluZ19tc2l4OwogCQl2ZWN0b3IrKzsKIAl9CiAKQEAgLTM2NSw5ICs0NzksNiBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JYWRhcHRlci0+bmFwaS5wb2xsID0gaWdiX2NsZWFuX3J4X3JpbmdfbXNpeDsKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLm5hcGkucG9sbCA9IGFkYXB0ZXItPm5hcGkucG9sbDsKIAlpZ2JfY29uZmlndXJlX21zaXgoYWRhcHRlcik7CiAJcmV0dXJuIDA7CiBvdXQ6CkBAIC0zODAsNyArNDkxLDcgQEAKIAkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKIAkJa2ZyZWUoYWRhcHRlci0+bXNpeF9lbnRyaWVzKTsKIAkJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPm1zaV9lbmFibGVkKQorCX0gZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19IQVNfTVNJKQogCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7CiAJcmV0dXJuOwogfQpAQCAtNDE3LDggKzUyOCwxMiBAQAogCS8qIElmIHdlIGNhbid0IGRvIE1TSS1YLCB0cnkgTVNJICovCiBtc2lfb25seToKIAlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKIAlpZiAoIXBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpKQotCQlhZGFwdGVyLT5tc2lfZW5hYmxlZCA9IDE7CisJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX0hBU19NU0k7CisKKwkvKiBOb3RpZnkgdGhlIHN0YWNrIG9mIHRoZSAocG9zc2libHkpIHJlZHVjZWQgVHggUXVldWUgY291bnQuICovCisJYWRhcHRlci0+bmV0ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBhZGFwdGVyLT5udW1fdHhfcXVldWVzOwogCXJldHVybjsKIH0KIApAQCAtNDM2LDI5ICs1NTEsMzggQEAKIAogCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpIHsKIAkJZXJyID0gaWdiX3JlcXVlc3RfbXNpeChhZGFwdGVyKTsKLQkJaWYgKCFlcnIpIHsKLQkJCS8qIGVuYWJsZSBJQU0sIGF1dG8tbWFzaywKLQkJCSAqIERPIE5PVCBVU0UgRUlBTSBvciBJQU0gaW4gbGVnYWN5IG1vZGUgKi8KLQkJCXdyMzIoRTEwMDBfSUFNLCBJTVNfRU5BQkxFX01BU0spOworCQlpZiAoIWVycikKIAkJCWdvdG8gcmVxdWVzdF9kb25lOwotCQl9CiAJCS8qIGZhbGwgYmFjayB0byBNU0kgKi8KIAkJaWdiX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwogCQlpZiAoIXBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpKQotCQkJYWRhcHRlci0+bXNpX2VuYWJsZWQgPSAxOworCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfSEFTX01TSTsKIAkJaWdiX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKIAkJaWdiX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKIAkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CiAJCWlnYl9hbGxvY19xdWV1ZXMoYWRhcHRlcik7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwkJY2FzZSBlMTAwMF84MjU3NToKKwkJCXdyMzIoRTEwMDBfTVNJWEJNKDApLAorCQkJICAgICAoRTEwMDBfRUlDUl9SWF9RVUVVRTAgfCBFMTAwMF9FSU1TX09USEVSKSk7CisJCQlicmVhazsKKwkJY2FzZSBlMTAwMF84MjU3NjoKKwkJCXdyMzIoRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQogCX0KLQlpZiAoYWRhcHRlci0+bXNpX2VuYWJsZWQpIHsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0hBU19NU0kpIHsKIAkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCAmaWdiX2ludHJfbXNpLCAwLAogCQkJCSAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpOwogCQlpZiAoIWVycikKIAkJCWdvdG8gcmVxdWVzdF9kb25lOwogCQkvKiBmYWxsIGJhY2sgdG8gbGVnYWN5IGludGVycnVwdHMgKi8KIAkJaWdiX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwotCQlhZGFwdGVyLT5tc2lfZW5hYmxlZCA9IDA7CisJCWFkYXB0ZXItPmZsYWdzICY9IH5JR0JfRkxBR19IQVNfTVNJOwogCX0KIAogCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgJmlnYl9pbnRyLCBJUlFGX1NIQVJFRCwKQEAgLTUwMiw5ICs2MjYsMTIgQEAKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCiAJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCQl3cjMyKEUxMDAwX0VJQU0sIDApOwogCQl3cjMyKEUxMDAwX0VJTUMsIH4wKTsKIAkJd3IzMihFMTAwMF9FSUFDLCAwKTsKIAl9CisKKwl3cjMyKEUxMDAwX0lBTSwgMCk7CiAJd3IzMihFMTAwMF9JTUMsIH4wKTsKIAl3cmZsKCk7CiAJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSk7CkBAIC01MTksMTMgKzY0NiwxNCBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7Ci0JCXdyMzIoRTEwMDBfRUlNUywKLQkJCQlhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKLQkJd3IzMihFMTAwMF9FSUFDLAotCQkJCWFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOworCQl3cjMyKEUxMDAwX0VJQUMsIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOworCQl3cjMyKEUxMDAwX0VJQU0sIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOworCQl3cjMyKEUxMDAwX0VJTVMsIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwogCQl3cjMyKEUxMDAwX0lNUywgRTEwMDBfSU1TX0xTQyk7Ci0JfSBlbHNlCi0Jd3IzMihFMTAwMF9JTVMsIElNU19FTkFCTEVfTUFTSyk7CisJfSBlbHNlIHsKKwkJd3IzMihFMTAwMF9JTVMsIElNU19FTkFCTEVfTUFTSyk7CisJCXdyMzIoRTEwMDBfSUFNLCBJTVNfRU5BQkxFX01BU0spOworCX0KIH0KIAogc3RhdGljIHZvaWQgaWdiX3VwZGF0ZV9tbmdfdmxhbihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02MzIsMTIgKzc2MCwxNSBAQAogCWlnYl9jb25maWd1cmVfdHgoYWRhcHRlcik7CiAJaWdiX3NldHVwX3JjdGwoYWRhcHRlcik7CiAJaWdiX2NvbmZpZ3VyZV9yeChhZGFwdGVyKTsKKworCWlnYl9yeF9maWZvX2ZsdXNoXzgyNTc1KCZhZGFwdGVyLT5odyk7CisKIAkvKiBjYWxsIElHQl9ERVNDX1VOVVNFRCB3aGljaCBhbHdheXMgbGVhdmVzCiAJICogYXQgbGVhc3QgMSBkZXNjcmlwdG9yIHVudXNlZCB0byBtYWtlIHN1cmUKIAkgKiBuZXh0X3RvX3VzZSAhPSBuZXh0X3RvX2NsZWFuICovCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewogCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKLQkJaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KGFkYXB0ZXIsIHJpbmcsIElHQl9ERVNDX1VOVVNFRChyaW5nKSk7CisJCWlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihyaW5nLCBJR0JfREVTQ19VTlVTRUQocmluZykpOwogCX0KIAogCkBAIC02NjAsMTMgKzc5MSwxMCBAQAogCiAJY2xlYXJfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAKLQluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0KLQlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQluYXBpX2VuYWJsZSgmYWRhcHRlci0+cnhfcmluZ1tpXS5uYXBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQluYXBpX2VuYWJsZSgmYWRhcHRlci0+cnhfcmluZ1tpXS5uYXBpKTsKKwlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQogCQlpZ2JfY29uZmlndXJlX21zaXgoYWRhcHRlcik7Ci0JfQogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gKi8KIAlyZDMyKEUxMDAwX0lDUik7CkBAIC02OTMsNyArODIxLDcgQEAKIAl3cjMyKEUxMDAwX1JDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CiAJLyogZmx1c2ggYW5kIHNsZWVwIGJlbG93ICovCiAKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAKIAkvKiBkaXNhYmxlIHRyYW5zbWl0cyBpbiB0aGUgaGFyZHdhcmUgKi8KIAl0Y3RsID0gcmQzMihFMTAwMF9UQ1RMKTsKQEAgLTcwMywxMSArODMxLDkgQEAKIAl3cmZsKCk7CiAJbXNsZWVwKDEwKTsKIAotCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5yeF9yaW5nW2ldLm5hcGkpOwogCi0JaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKLQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+cnhfcmluZ1tpXS5uYXBpKTsKIAlpZ2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwpAQCAtNzM3LDE2ICs4NjMsMjMgQEAKIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXN0cnVjdCBlMTAwMF9mY19pbmZvICpmYyA9ICZhZGFwdGVyLT5ody5mYzsKKwlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCXN0cnVjdCBlMTAwMF9mY19pbmZvICpmYyA9ICZody0+ZmM7CiAJdTMyIHBiYSA9IDAsIHR4X3NwYWNlLCBtaW5fdHhfc3BhY2UsIG1pbl9yeF9zcGFjZTsKIAl1MTYgaHdtOwogCiAJLyogUmVwYXJ0aXRpb24gUGJhIGZvciBncmVhdGVyIHRoYW4gOWsgbXR1CiAJICogVG8gdGFrZSBlZmZlY3QgQ1RSTC5SU1QgaXMgcmVxdWlyZWQuCiAJICovCisJaWYgKG1hYy0+dHlwZSAhPSBlMTAwMF84MjU3NikgewogCXBiYSA9IEUxMDAwX1BCQV8zNEs7CisJfQorCWVsc2UgeworCQlwYmEgPSBFMTAwMF9QQkFfNjRLOworCX0KIAotCWlmIChhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSA+IEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTikgeworCWlmICgoYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgPiBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4pICYmCisJICAgIChtYWMtPnR5cGUgPCBlMTAwMF84MjU3NikpIHsKIAkJLyogYWRqdXN0IFBCQSBmb3IganVtYm8gZnJhbWVzICovCiAJCXdyMzIoRTEwMDBfUEJBLCBwYmEpOwogCkBAIC03ODUsOCArOTE4LDggQEAKIAkJCWlmIChwYmEgPCBtaW5fcnhfc3BhY2UpCiAJCQkJcGJhID0gbWluX3J4X3NwYWNlOwogCQl9CisJCXdyMzIoRTEwMDBfUEJBLCBwYmEpOwogCX0KLQl3cjMyKEUxMDAwX1BCQSwgcGJhKTsKIAogCS8qIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLwogCS8qIFRoZSBoaWdoIHdhdGVyIG1hcmsgbXVzdCBiZSBsb3cgZW5vdWdoIHRvIGZpdCBvbmUgZnVsbCBmcmFtZQpAQCAtNzk1LDEwICs5MjgsMTUgQEAKIAkgKiAtIDkwJSBvZiB0aGUgUnggRklGTyBzaXplLCBvcgogCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIG9uZSBmdWxsIGZyYW1lICovCiAJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCSAgKChwYmEgPDwgMTApIC0gYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKTsKKwkJCSgocGJhIDw8IDEwKSAtIDIgKiBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSkpOwogCi0JZmMtPmhpZ2hfd2F0ZXIgPSBod20gJiAweEZGRjg7CS8qIDgtYnl0ZSBncmFudWxhcml0eSAqLwotCWZjLT5sb3dfd2F0ZXIgPSBmYy0+aGlnaF93YXRlciAtIDg7CisJaWYgKG1hYy0+dHlwZSA8IGUxMDAwXzgyNTc2KSB7CisJCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgMHhGRkY4OwkvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KKwkJZmMtPmxvd193YXRlciA9IGZjLT5oaWdoX3dhdGVyIC0gODsKKwl9IGVsc2UgeworCQlmYy0+aGlnaF93YXRlciA9IGh3bSAmIDB4RkZGMDsJLyogMTYtYnl0ZSBncmFudWxhcml0eSAqLworCQlmYy0+bG93X3dhdGVyID0gZmMtPmhpZ2hfd2F0ZXIgLSAxNjsKKwl9CiAJZmMtPnBhdXNlX3RpbWUgPSAweEZGRkY7CiAJZmMtPnNlbmRfeG9uID0gMTsKIAlmYy0+dHlwZSA9IGZjLT5vcmlnaW5hbF90eXBlOwpAQCAtODIxLDYgKzk1OSwyMSBAQAogfQogCiAvKioKKyAqIGlnYl9pc19uZWVkX2lvcG9ydCAtIGRldGVybWluZSBpZiBhbiBhZGFwdGVyIG5lZWRzIGlvcG9ydCByZXNvdXJjZXMgb3Igbm90CisgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYW4gYWRhcHRlciBuZWVkcyBpb3BvcnQgcmVzb3VyY2VzCisgKiovCitzdGF0aWMgaW50IGlnYl9pc19uZWVkX2lvcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCS8qIEN1cnJlbnRseSB0aGVyZSBhcmUgbm8gYWRhcHRlcnMgdGhhdCBuZWVkIGlvcG9ydCByZXNvdXJjZXMgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCisvKioKICAqIGlnYl9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCiAgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKICAqIEBlbnQ6IGVudHJ5IGluIGlnYl9wY2lfdGJsCkBAIC04MzksMTMgKzk5MiwyMSBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHc7CiAJY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gKmVpID0gaWdiX2luZm9fdGJsW2VudC0+ZHJpdmVyX2RhdGFdOwogCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47Ci0Jc3RhdGljIGludCBjYXJkc19mb3VuZDsKIAlpbnQgaSwgZXJyLCBwY2lfdXNpbmdfZGFjOwogCXUxNiBlZXByb21fZGF0YSA9IDA7CiAJdTE2IGVlcHJvbV9hcG1lX21hc2sgPSBJR0JfRUVQUk9NX0FQTUU7CiAJdTMyIHBhcnRfbnVtOworCWludCBiYXJzLCBuZWVkX2lvcG9ydDsKIAotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCS8qIGRvIG5vdCBhbGxvY2F0ZSBpb3BvcnQgYmFycyB3aGVuIG5vdCBuZWVkZWQgKi8KKwluZWVkX2lvcG9ydCA9IGlnYl9pc19uZWVkX2lvcG9ydChwZGV2KTsKKwlpZiAobmVlZF9pb3BvcnQpIHsKKwkJYmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfSU8pOworCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwl9IGVsc2UgeworCQliYXJzID0gcGNpX3NlbGVjdF9iYXJzKHBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKKwkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCX0KIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC04NjcsNyArMTAyOCw3IEBACiAJCX0KIAl9CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGlnYl9kcml2ZXJfbmFtZSk7CisJZXJyID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBiYXJzLCBpZ2JfZHJpdmVyX25hbWUpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3BjaV9yZWc7CiAKQEAgLTg3NSw3ICsxMDM2LDcgQEAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCWVyciA9IC1FTk9NRU07Ci0JbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBpZ2JfYWRhcHRlcikpOworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaWdiX2FkYXB0ZXIpLCBJR0JfTUFYX1RYX1FVRVVFUyk7CiAJaWYgKCFuZXRkZXYpCiAJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OwogCkBAIC04ODgsNiArMTA0OSw4IEBACiAJaHcgPSAmYWRhcHRlci0+aHc7CiAJaHctPmJhY2sgPSBhZGFwdGVyOwogCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFOworCWFkYXB0ZXItPmJhcnMgPSBiYXJzOworCWFkYXB0ZXItPm5lZWRfaW9wb3J0ID0gbmVlZF9pb3BvcnQ7CiAKIAltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKQEAgLTkwNyw3ICsxMDcwLDYgQEAKIAlpZ2Jfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LT50eF90aW1lb3V0ID0gJmlnYl90eF90aW1lb3V0OwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7Ci0JbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwgaWdiX2NsZWFuLCA2NCk7CiAJbmV0ZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gaWdiX3ZsYW5fcnhfcmVnaXN0ZXI7CiAJbmV0ZGV2LT52bGFuX3J4X2FkZF92aWQgPSBpZ2Jfdmxhbl9yeF9hZGRfdmlkOwogCW5ldGRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGlnYl92bGFuX3J4X2tpbGxfdmlkOwpAQCAtOTIxLDggKzEwODMsNiBAQAogCW5ldGRldi0+bWVtX3N0YXJ0ID0gbW1pb19zdGFydDsKIAluZXRkZXYtPm1lbV9lbmQgPSBtbWlvX3N0YXJ0ICsgbW1pb19sZW47CiAKLQlhZGFwdGVyLT5iZF9udW1iZXIgPSBjYXJkc19mb3VuZDsKLQogCS8qIFBDSSBjb25maWcgc3BhY2UgaW5mbyAqLwogCWh3LT52ZW5kb3JfaWQgPSBwZGV2LT52ZW5kb3I7CiAJaHctPmRldmljZV9pZCA9IHBkZXYtPmRldmljZTsKQEAgLTk0Nyw2ICsxMTA3LDE3IEBACiAKIAlpZ2JfZ2V0X2J1c19pbmZvX3BjaWUoaHcpOwogCisJLyogc2V0IGZsYWdzICovCisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc2OgorCWNhc2UgZTEwMDBfODI1NzU6CisJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX0hBU19EQ0E7CisJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX05FRURfQ1RYX0lEWDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCiAJaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUgPSBmYWxzZTsKIAlody0+bWFjLmFkYXB0aXZlX2lmcyA9IHRydWU7CiAKQEAgLTk2OCw4ICsxMTM5LDE3IEBACiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOwogCiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCisjaWZkZWYgQ09ORklHX0lHQl9MUk8KKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworI2VuZGlmCisKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCkBAIC0xMDUzLDExICsxMjMzLDIzIEBACiAJCWFkYXB0ZXItPmVlcHJvbV93b2wgPSAwOwogCQlicmVhazsKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUzoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVM6CiAJCS8qIFdha2UgZXZlbnRzIG9ubHkgc3VwcG9ydGVkIG9uIHBvcnQgQSBmb3IgZHVhbCBmaWJlcgogCQkgKiByZWdhcmRsZXNzIG9mIGVlcHJvbSBzZXR0aW5nICovCiAJCWlmIChyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKQogCQkJYWRhcHRlci0+ZWVwcm9tX3dvbCA9IDA7CiAJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSOgorCQkvKiBpZiBxdWFkIHBvcnQgYWRhcHRlciwgZGlzYWJsZSBXb0wgb24gYWxsIGJ1dCBwb3J0IEEgKi8KKwkJaWYgKGdsb2JhbF9xdWFkX3BvcnRfYSAhPSAwKQorCQkJYWRhcHRlci0+ZWVwcm9tX3dvbCA9IDA7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX1FVQURfUE9SVF9BOworCQkvKiBSZXNldCBmb3IgbXVsdGlwbGUgcXVhZCBwb3J0IGFkYXB0ZXJzICovCisJCWlmICgrK2dsb2JhbF9xdWFkX3BvcnRfYSA9PSA0KQorCQkJZ2xvYmFsX3F1YWRfcG9ydF9hID0gMDsKKwkJYnJlYWs7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSB0aGUgd29sIHNldHRpbmdzIGJhc2VkIG9uIHRoZSBlZXByb20gc2V0dGluZ3MgKi8KQEAgLTEwNzIsMTMgKzEyNjQsMjUgQEAKIAogCS8qIHRlbGwgdGhlIHN0YWNrIHRvIGxlYXZlIHVzIGFsb25lIHVudGlsIGlnYl9vcGVuKCkgaXMgY2FsbGVkICovCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAKIAlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZWdpc3RlcjsKIAorI2lmZGVmIENPTkZJR19EQ0EKKwlpZiAoKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfSEFTX0RDQSkgJiYKKwkgICAgKGRjYV9hZGRfcmVxdWVzdGVyKCZwZGV2LT5kZXYpID09IDApKSB7CisJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX0RDQV9FTkFCTEVEOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRENBIGVuYWJsZWRcbiIpOworCQkvKiBBbHdheXMgdXNlIENCMiBtb2RlLCBkaWZmZXJlbmNlIGlzIG1hc2tlZAorCQkgKiBpbiB0aGUgQ0IgZHJpdmVyLiAqLworCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCAyKTsKKwkJaWdiX3NldHVwX2RjYShhZGFwdGVyKTsKKwl9CisjZW5kaWYKKwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IE5ldHdvcmsgQ29ubmVjdGlvblxuIik7CiAJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLwogCWRldl9pbmZvKCZwZGV2LT5kZXYsCkBAIC0xMDk5LDEwICsxMzAzLDkgQEAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LAogCQkiVXNpbmcgJXMgaW50ZXJydXB0cy4gJWQgcnggcXVldWUocyksICVkIHR4IHF1ZXVlKHMpXG4iLAogCQlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPyAiTVNJLVgiIDoKLQkJYWRhcHRlci0+bXNpX2VuYWJsZWQgPyAiTVNJIiA6ICJsZWdhY3kiLAorCQkoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19IQVNfTVNJKSA/ICJNU0kiIDogImxlZ2FjeSIsCiAJCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOwogCi0JY2FyZHNfZm91bmQrKzsKIAlyZXR1cm4gMDsKIAogZXJyX3JlZ2lzdGVyOgpAQCAtMTExNSwxNSArMTMxOCwxNCBAQAogCQlpb3VubWFwKGh3LT5mbGFzaF9hZGRyZXNzKTsKIAogCWlnYl9yZW1vdmVfZGV2aWNlKGh3KTsKLQlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKLQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKKwlpZ2JfZnJlZV9xdWV1ZXMoYWRhcHRlcik7CiBlcnJfc3dfaW5pdDoKIGVycl9od19pbml0OgogCWlvdW5tYXAoaHctPmh3X2FkZHIpOwogZXJyX2lvcmVtYXA6CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIGVycl9hbGxvY19ldGhlcmRldjoKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYmFycyk7CiBlcnJfcGNpX3JlZzoKIGVycl9kbWE6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtMTE0Myw2ICsxMzQ1LDkgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisjaWZkZWYgQ09ORklHX0RDQQorCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisjZW5kaWYKIAogCS8qIGZsdXNoX3NjaGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbwogCSAqIGV4cGxpY2l0bHkgZGlzYWJsZSB3YXRjaGRvZyB0YXNrcyBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkICAqLwpAQCAtMTE1Miw2ICsxMzU3LDE1IEBACiAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCisjaWZkZWYgQ09ORklHX0RDQQorCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEQ0EgZGlzYWJsZWRcbiIpOworCQlkY2FfcmVtb3ZlX3JlcXVlc3RlcigmcGRldi0+ZGV2KTsKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklHQl9GTEFHX0RDQV9FTkFCTEVEOworCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCAxKTsKKwl9CisjZW5kaWYKKwogCS8qIFJlbGVhc2UgY29udHJvbCBvZiBoL3cgdG8gZi93LiAgSWYgZi93IGlzIEFNVCBlbmFibGVkLCB0aGlzCiAJICogd291bGQgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGluIGNsb3NlIGFuZCBpcyByZWR1bmRhbnQuICovCiAJaWdiX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKQEAgLTExNjQsMTMgKzEzNzgsMTIgQEAKIAlpZ2JfcmVtb3ZlX2RldmljZSgmYWRhcHRlci0+aHcpOwogCWlnYl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKIAotCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOwotCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOworCWlnYl9mcmVlX3F1ZXVlcyhhZGFwdGVyKTsKIAogCWlvdW5tYXAoYWRhcHRlci0+aHcuaHdfYWRkcik7CiAJaWYgKGFkYXB0ZXItPmh3LmZsYXNoX2FkZHJlc3MpCiAJCWlvdW5tYXAoYWRhcHRlci0+aHcuZmxhc2hfYWRkcmVzcyk7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGFkYXB0ZXItPmJhcnMpOwogCiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIApAQCAtMTIwMCw5ICsxNDEzLDExIEBACiAKIAkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcy4gKi8KIAkvKiBIYXZpbmcgbW9yZSBxdWV1ZXMgdGhhbiBDUFVzIGRvZXNuJ3QgbWFrZSBzZW5zZS4gKi8KLQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKLQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gbWluKElHQl9NQVhfUlhfUVVFVUVTLCBudW1fb25saW5lX2NwdXMoKSk7CisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IG1pbigodTMyKUlHQl9NQVhfUlhfUVVFVUVTLCAodTMyKW51bV9vbmxpbmVfY3B1cygpKTsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbWluKElHQl9NQVhfVFhfUVVFVUVTLCBudW1fb25saW5lX2NwdXMoKSk7CiAKKwkvKiBUaGlzIGNhbGwgbWF5IGRlY3JlYXNlIHRoZSBudW1iZXIgb2YgcXVldWVzIGRlcGVuZGluZyBvbgorCSAqIGludGVycnVwdCBtb2RlLiAqLwogCWlnYl9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CiAKIAlpZiAoaWdiX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKSkgewpAQCAtMTI3MCwxNSArMTQ4NSwxNiBAQAogCS8qIEZyb20gaGVyZSBvbiB0aGUgY29kZSBpcyB0aGUgc2FtZSBhcyBpZ2JfdXAoKSAqLwogCWNsZWFyX2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwogCi0JbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOwotCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpCi0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQluYXBpX2VuYWJsZSgmYWRhcHRlci0+cnhfcmluZ1tpXS5uYXBpKTsKLQotCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5yeF9yaW5nW2ldLm5hcGkpOwogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gKi8KIAlyZDMyKEUxMDAwX0lDUik7CisKKwlpZ2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKKworCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKKwogCS8qIEZpcmUgYSBsaW5rIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0IHRvIHN0YXJ0IHRoZSB3YXRjaGRvZy4gKi8KIAl3cjMyKEUxMDAwX0lDUywgRTEwMDBfSUNTX0xTQyk7CiAKQEAgLTEzNjQsOCArMTU4MCw2IEBACiAJdHhfcmluZy0+YWRhcHRlciA9IGFkYXB0ZXI7CiAJdHhfcmluZy0+bmV4dF90b191c2UgPSAwOwogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOwotCXNwaW5fbG9ja19pbml0KCZ0eF9yaW5nLT50eF9jbGVhbl9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmdHhfcmluZy0+dHhfbG9jayk7CiAJcmV0dXJuIDA7CiAKIGVycjoKQEAgLTEzODUsNiArMTU5OSw3IEBACiBzdGF0aWMgaW50IGlnYl9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaSwgZXJyID0gMDsKKwlpbnQgcl9pZHg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CiAJCWVyciA9IGlnYl9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwpAQCAtMTM5MiwxMiArMTYwNywxNSBAQAogCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCSJBbGxvY2F0aW9uIGZvciBUeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOwogCQkJZm9yIChpLS07IGkgPj0gMDsgaS0tKQotCQkJCWlnYl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAotCQkJCQkJCSZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJCQlpZ2JfZnJlZV90eF9yZXNvdXJjZXMoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgSUdCX01BWF9UWF9RVUVVRVM7IGkrKykgeworCQlyX2lkeCA9IGkgJSBhZGFwdGVyLT5udW1fdHhfcXVldWVzOworCQlhZGFwdGVyLT5tdWx0aV90eF90YWJsZVtpXSA9ICZhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKKwl9CQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE0ODQsNiArMTcwMiwxNCBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgc2l6ZSwgZGVzY19sZW47CiAKKyNpZmRlZiBDT05GSUdfSUdCX0xSTworCXNpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9scm9fZGVzYykgKiBNQVhfTFJPX0RFU0NSSVBUT1JTOworCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IHZtYWxsb2Moc2l6ZSk7CisJaWYgKCFyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpCisJCWdvdG8gZXJyOworCW1lbXNldChyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIsIDAsIHNpemUpOworI2VuZGlmCisKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpZ2JfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OwogCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZiAoIXJ4X3JpbmctPmJ1ZmZlcl9pbmZvKQpAQCAtMTUwNCwxNSArMTczMCwxNiBAQAogCiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CiAJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOwotCXJ4X3JpbmctPnBlbmRpbmdfc2tiID0gTlVMTDsKIAogCXJ4X3JpbmctPmFkYXB0ZXIgPSBhZGFwdGVyOwotCS8qIEZJWE1FOiBkbyB3ZSB3YW50IHRvIHNldHVwIHJpbmctPm5hcGktPnBvbGwgaGVyZT8gKi8KLQlyeF9yaW5nLT5uYXBpLnBvbGwgPSBhZGFwdGVyLT5uYXBpLnBvbGw7CiAKIAlyZXR1cm4gMDsKIAogZXJyOgorI2lmZGVmIENPTkZJR19JR0JfTFJPCisJdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKKwlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOworI2VuZGlmCiAJdmZyZWUocnhfcmluZy0+YnVmZmVyX2luZm8pOwogCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKIAkJInRoZSByZWNlaXZlIGRlc2NyaXB0b3IgcmluZ1xuIik7CkBAIC0xNTM2LDggKzE3NjMsNyBAQAogCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCSJBbGxvY2F0aW9uIGZvciBSeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOwogCQkJZm9yIChpLS07IGkgPj0gMDsgaS0tKQotCQkJCWlnYl9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLAotCQkJCQkJCSZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJCQlpZ2JfZnJlZV9yeF9yZXNvdXJjZXMoJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xNTY0LDEwICsxNzkwLDEyIEBACiAJCUUxMDAwX1JDVExfTEJNX05PIHwgRTEwMDBfUkNUTF9SRE1UU19IQUxGIHwKIAkJKGFkYXB0ZXItPmh3Lm1hYy5tY19maWx0ZXJfdHlwZSA8PCBFMTAwMF9SQ1RMX01PX1NISUZUKTsKIAotCS8qIGRpc2FibGUgdGhlIHN0cmlwcGluZyBvZiBDUkMgYmVjYXVzZSBpdCBicmVha3MKLQkgKiBCTUMgZmlybXdhcmUgY29ubmVjdGVkIG92ZXIgU01CVVMKLQlyY3RsIHw9IEUxMDAwX1JDVExfU0VDUkM7CisJLyoKKwkgKiBlbmFibGUgc3RyaXBwaW5nIG9mIENSQy4gSXQncyB1bmxpa2VseSB0aGlzIHdpbGwgYnJlYWsgQk1DCisJICogcmVkaXJlY3Rpb24gYXMgaXQgZGlkIHdpdGggZTEwMDAuIE5ld2VyIGZlYXR1cmVzIHJlcXVpcmUKKwkgKiB0aGF0IHRoZSBIVyBzdHJpcHMgdGhlIENSQy4KIAkqLworCXJjdGwgfD0gRTEwMDBfUkNUTF9TRUNSQzsKIAogCXJjdGwgJj0gfkUxMDAwX1JDVExfU0JQOwogCkBAIC0xNTk3LDE1ICsxODI1LDYgQEAKIAkJCXJjdGwgfD0gRTEwMDBfUkNUTF9TWl8yMDQ4OwogCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9CU0VYOwogCQkJYnJlYWs7Ci0JCWNhc2UgSUdCX1JYQlVGRkVSXzQwOTY6Ci0JCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfNDA5NjsKLQkJCWJyZWFrOwotCQljYXNlIElHQl9SWEJVRkZFUl84MTkyOgotCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NaXzgxOTI7Ci0JCQlicmVhazsKLQkJY2FzZSBJR0JfUlhCVUZGRVJfMTYzODQ6Ci0JCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMTYzODQ7Ci0JCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCXJjdGwgJj0gfkUxMDAwX1JDVExfQlNFWDsKQEAgLTE2MjMsMTAgKzE4NDIsOCBAQAogCSAqIHNvIG9ubHkgZW5hYmxlIHBhY2tldCBzcGxpdCBmb3IganVtYm8gZnJhbWVzICovCiAJaWYgKHJjdGwgJiBFMTAwMF9SQ1RMX0xQRSkgewogCQlhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSA9IElHQl9SWEJVRkZFUl8xMjg7Ci0JCXNycmN0bCA9IGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplIDw8CisJCXNycmN0bCB8PSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSA8PAogCQkJIEUxMDAwX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQ7Ci0JCS8qIGJ1ZmZlciBzaXplIGlzIEFMV0FZUyBvbmUgcGFnZSAqLwotCQlzcnJjdGwgfD0gUEFHRV9TSVpFID4+IEUxMDAwX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKIAkJc3JyY3RsIHw9IEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9IRFJfU1BMSVRfQUxXQVlTOwogCX0gZWxzZSB7CiAJCWFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplID0gMDsKQEAgLTE2NjAsOCArMTg3Nyw3IEBACiAJbWRlbGF5KDEwKTsKIAogCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA+IDMpCi0JCXdyMzIoRTEwMDBfSVRSLAotCQkJCTEwMDAwMDAwMDAgLyAoYWRhcHRlci0+aXRyICogMjU2KSk7CisJCXdyMzIoRTEwMDBfSVRSLCBhZGFwdGVyLT5pdHIpOwogCiAJLyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmQKIAkgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmcgKi8KQEAgLTE2ODYsNiArMTkwMiwxNiBAQAogCQlyeGRjdGwgfD0gSUdCX1JYX0hUSFJFU0ggPDwgODsKIAkJcnhkY3RsIHw9IElHQl9SWF9XVEhSRVNIIDw8IDE2OwogCQl3cjMyKEUxMDAwX1JYRENUTChpKSwgcnhkY3RsKTsKKyNpZmRlZiBDT05GSUdfSUdCX0xSTworCQkvKiBJbnRpdGlhbCBMUk8gU2V0dGluZ3MgKi8KKwkJcmluZy0+bHJvX21nci5tYXhfYWdnciA9IE1BWF9MUk9fQUdHUjsKKwkJcmluZy0+bHJvX21nci5tYXhfZGVzYyA9IE1BWF9MUk9fREVTQ1JJUFRPUlM7CisJCXJpbmctPmxyb19tZ3IuZ2V0X3NrYl9oZWFkZXIgPSBpZ2JfZ2V0X3NrYl9oZHI7CisJCXJpbmctPmxyb19tZ3IuZmVhdHVyZXMgPSBMUk9fRl9OQVBJIHwgTFJPX0ZfRVhUUkFDVF9WTEFOX0lEOworCQlyaW5nLT5scm9fbWdyLmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwkJcmluZy0+bHJvX21nci5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJcmluZy0+bHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworI2VuZGlmCiAJfQogCiAJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPiAxKSB7CkBAIC0xNjk5LDcgKzE5MjUsMTAgQEAKIAogCQlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kb21bMF0sIDQwKTsKIAotCQlzaGlmdCA9IDY7CisJCWlmIChody0+bWFjLnR5cGUgPj0gZTEwMDBfODI1NzYpCisJCQlzaGlmdCA9IDA7CisJCWVsc2UKKwkJCXNoaWZ0ID0gNjsKIAkJZm9yIChqID0gMDsgaiA8ICgzMiAqIDQpOyBqKyspIHsKIAkJCXJldGEuYnl0ZXNbaiAmIDNdID0KIAkJCQkoaiAlIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpIDw8IHNoaWZ0OwpAQCAtMTc2NSwxMiArMTk5NCwxMSBAQAogICoKICAqIEZyZWUgYWxsIHRyYW5zbWl0IHNvZnR3YXJlIHJlc291cmNlcwogICoqLwotc3RhdGljIHZvaWQgaWdiX2ZyZWVfdHhfcmVzb3VyY2VzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgIHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZykKK3N0YXRpYyB2b2lkIGlnYl9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHhfcmluZy0+YWRhcHRlci0+cGRldjsKIAotCWlnYl9jbGVhbl90eF9yaW5nKGFkYXB0ZXIsIHR4X3JpbmcpOworCWlnYl9jbGVhbl90eF9yaW5nKHR4X3JpbmcpOwogCiAJdmZyZWUodHhfcmluZy0+YnVmZmVyX2luZm8pOwogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvID0gTlVMTDsKQEAgLTE3OTEsNyArMjAxOSw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpZ2JfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZ2JfZnJlZV90eF9yZXNvdXJjZXMoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiBzdGF0aWMgdm9pZCBpZ2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLApAQCAtMTgxNyw5ICsyMDQ1LDkgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHR4X3Jpbmc6IHJpbmcgdG8gYmUgY2xlYW5lZAogICoqLwotc3RhdGljIHZvaWQgaWdiX2NsZWFuX3R4X3Jpbmcoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQorc3RhdGljIHZvaWQgaWdiX2NsZWFuX3R4X3Jpbmcoc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQogeworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHR4X3JpbmctPmFkYXB0ZXI7CiAJc3RydWN0IGlnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTE4NTYsNyArMjA4NCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpZ2JfY2xlYW5fdHhfcmluZyhhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWlnYl9jbGVhbl90eF9yaW5nKCZhZGFwdGVyLT50eF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC0xODY2LDE2ICsyMDk0LDIwIEBACiAgKgogICogRnJlZSBhbGwgcmVjZWl2ZSBzb2Z0d2FyZSByZXNvdXJjZXMKICAqKi8KLXN0YXRpYyB2b2lkIGlnYl9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICBzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcpCitzdGF0aWMgdm9pZCBpZ2JfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHJ4X3JpbmctPmFkYXB0ZXItPnBkZXY7CiAKLQlpZ2JfY2xlYW5fcnhfcmluZyhhZGFwdGVyLCByeF9yaW5nKTsKKwlpZ2JfY2xlYW5fcnhfcmluZyhyeF9yaW5nKTsKIAogCXZmcmVlKHJ4X3JpbmctPmJ1ZmZlcl9pbmZvKTsKIAlyeF9yaW5nLT5idWZmZXJfaW5mbyA9IE5VTEw7CiAKKyNpZmRlZiBDT05GSUdfSUdCX0xSTworCXZmcmVlKHJ4X3JpbmctPmxyb19tZ3IubHJvX2Fycik7CisJcnhfcmluZy0+bHJvX21nci5scm9fYXJyID0gTlVMTDsKKyNlbmRpZiAKKwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgcnhfcmluZy0+c2l6ZSwgcnhfcmluZy0+ZGVzYywgcnhfcmluZy0+ZG1hKTsKIAogCXJ4X3JpbmctPmRlc2MgPSBOVUxMOwpAQCAtMTg5Miw3ICsyMTI0LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWlnYl9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlnYl9mcmVlX3J4X3Jlc291cmNlcygmYWRhcHRlci0+cnhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMTkwMCw5ICsyMTMyLDkgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHJ4X3Jpbmc6IHJpbmcgdG8gZnJlZSBidWZmZXJzIGZyb20KICAqKi8KLXN0YXRpYyB2b2lkIGlnYl9jbGVhbl9yeF9yaW5nKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgIHN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZykKK3N0YXRpYyB2b2lkIGlnYl9jbGVhbl9yeF9yaW5nKHN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZykKIHsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOwogCXN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5zaWduZWQgbG9uZyBzaXplOwpAQCAtMTkzMCwyMCArMjE2MiwxNyBAQAogCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJCX0KIAkJaWYgKGJ1ZmZlcl9pbmZvLT5wYWdlKSB7Ci0JCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBidWZmZXJfaW5mby0+cGFnZV9kbWEsCi0JCQkJICAgICAgIFBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWlmIChidWZmZXJfaW5mby0+cGFnZV9kbWEpCisJCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPnBhZ2VfZG1hLAorCQkJCQkgICAgICAgUEFHRV9TSVpFIC8gMiwKKwkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlwdXRfcGFnZShidWZmZXJfaW5mby0+cGFnZSk7CiAJCQlidWZmZXJfaW5mby0+cGFnZSA9IE5VTEw7CiAJCQlidWZmZXJfaW5mby0+cGFnZV9kbWEgPSAwOworCQkJYnVmZmVyX2luZm8tPnBhZ2Vfb2Zmc2V0ID0gMDsKIAkJfQogCX0KIAotCS8qIHRoZXJlIGFsc28gbWF5IGJlIHNvbWUgY2FjaGVkIGRhdGEgZnJvbSBhIGNoYWluZWQgcmVjZWl2ZSAqLwotCWlmIChyeF9yaW5nLT5wZW5kaW5nX3NrYikgewotCQlkZXZfa2ZyZWVfc2tiKHJ4X3JpbmctPnBlbmRpbmdfc2tiKTsKLQkJcnhfcmluZy0+cGVuZGluZ19za2IgPSBOVUxMOwotCX0KLQogCXNpemUgPSBzaXplb2Yoc3RydWN0IGlnYl9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CiAJbWVtc2V0KHJ4X3JpbmctPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKIApAQCAtMTk2Niw3ICsyMTk1LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWlnYl9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJaWdiX2NsZWFuX3J4X3JpbmcoJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTIwMTUsMTkgKzIyNDQsMjIgQEAKIAogCXJjdGwgPSByZDMyKEUxMDAwX1JDVEwpOwogCi0JaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCXJjdGwgfD0gKEUxMDAwX1JDVExfVVBFIHwgRTEwMDBfUkNUTF9NUEUpOwotCWVsc2UgaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKLQkJcmN0bCB8PSBFMTAwMF9SQ1RMX01QRTsKLQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9VUEU7Ci0JfSBlbHNlCi0JCXJjdGwgJj0gfihFMTAwMF9SQ1RMX1VQRSB8IEUxMDAwX1JDVExfTVBFKTsKLQorCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1ZGRTsKKwl9IGVsc2UgeworCQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX01QRTsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfVVBFOworCQl9IGVsc2UKKwkJCXJjdGwgJj0gfihFMTAwMF9SQ1RMX1VQRSB8IEUxMDAwX1JDVExfTVBFKTsKKwkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKKwl9CiAJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKIAogCWlmICghbmV0ZGV2LT5tY19jb3VudCkgewogCQkvKiBub3RoaW5nIHRvIHByb2dyYW0sIHNvIGNsZWFyIG1jIGxpc3QgKi8KLQkJaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIE5VTEwsIDAsIDEsCisJCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KGh3LCBOVUxMLCAwLCAxLAogCQkJCQkgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKIAkJcmV0dXJuOwogCX0KQEAgLTIwNDUsNyArMjI3Nyw4IEBACiAJCW1lbWNweShtdGFfbGlzdCArIChpKkVUSF9BTEVOKSwgbWNfcHRyLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCQltY19wdHIgPSBtY19wdHItPm5leHQ7CiAJfQotCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBtdGFfbGlzdCwgaSwgMSwgbWFjLT5yYXJfZW50cnlfY291bnQpOworCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KGh3LCBtdGFfbGlzdCwgaSwgMSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWMtPnJhcl9lbnRyeV9jb3VudCk7CiAJa2ZyZWUobXRhX2xpc3QpOwogfQogCkBAIC0yMTM1LDcgKzIzNjgsNyBAQAogCQkJfQogCiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAogCQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJCW1vZF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIsCkBAIC0yMTQ3LDcgKzIzODAsNyBAQAogCQkJYWRhcHRlci0+bGlua19kdXBsZXggPSAwOwogCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwogCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJCW1vZF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIsCiAJCQkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CkBAIC0yMjAwLDM4ICsyNDMzLDYwIEBACiB9OwogCiAKLXN0YXRpYyB2b2lkIGlnYl9sb3dlcl9yeF9laXRyKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgIHN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZykKKy8qKgorICogaWdiX3VwZGF0ZV9yaW5nX2l0ciAtIHVwZGF0ZSB0aGUgZHluYW1pYyBJVFIgdmFsdWUgYmFzZWQgb24gcGFja2V0IHNpemUKKyAqCisgKiAgICAgIFN0b3JlcyBhIG5ldyBJVFIgdmFsdWUgYmFzZWQgb24gc3RyaWN0bHkgb24gcGFja2V0IHNpemUuICBUaGlzCisgKiAgICAgIGFsZ29yaXRobSBpcyBsZXNzIHNvcGhpc3RpY2F0ZWQgdGhhbiB0aGF0IHVzZWQgaW4gaWdiX3VwZGF0ZV9pdHIsCisgKiAgICAgIGR1ZSB0byB0aGUgZGlmZmljdWx0eSBvZiBzeW5jaHJvbml6aW5nIHN0YXRpc3RpY3MgYWNyb3NzIG11bHRpcGxlCisgKiAgICAgIHJlY2VpdmUgcmluZ3MuICBUaGUgZGl2aXNvcnMgYW5kIHRocmVzaG9sZHMgdXNlZCBieSB0aGlzIGZ1Y3Rpb24KKyAqICAgICAgd2VyZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZW9yZXRpY2FsIG1heGltdW0gd2lyZSBzcGVlZCBhbmQgdGVzdGluZworICogICAgICBkYXRhLCBpbiBvcmRlciB0byBtaW5pbWl6ZSByZXNwb25zZSB0aW1lIHdoaWxlIGluY3JlYXNpbmcgYnVsaworICogICAgICB0aHJvdWdocHV0LgorICogICAgICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIG1vZHVsZQorICogICAgICBwYXJhbWV0ZXIgKHNlZSBpZ2JfcGFyYW0uYykKKyAqICAgICAgTk9URTogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiBvcGVyYXRpbmcgaW4gYSBtdWx0aXF1ZXVlCisgKiAgICAgICAgICAgICByZWNlaXZlIGVudmlyb25tZW50LgorICogQHJ4X3Jpbmc6IHBvaW50ZXIgdG8gcmluZworICoqLworc3RhdGljIHZvaWQgaWdiX3VwZGF0ZV9yaW5nX2l0cihzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcpCiB7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQlpbnQgbmV3X3ZhbDsKKwlpbnQgbmV3X3ZhbCA9IHJ4X3JpbmctPml0cl92YWw7CisJaW50IGF2Z193aXJlX3NpemUgPSAwOworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHJ4X3JpbmctPmFkYXB0ZXI7CiAKLQluZXdfdmFsID0gcnhfcmluZy0+aXRyX3ZhbCAvIDI7Ci0JaWYgKG5ld192YWwgPCBJR0JfTUlOX0RZTl9JVFIpCi0JCW5ld192YWwgPSBJR0JfTUlOX0RZTl9JVFI7CisJaWYgKCFyeF9yaW5nLT50b3RhbF9wYWNrZXRzKQorCQlnb3RvIGNsZWFyX2NvdW50czsgLyogbm8gcGFja2V0cywgc28gZG9uJ3QgZG8gYW55dGhpbmcgKi8KIAorCS8qIEZvciBub24tZ2lnYWJpdCBzcGVlZHMsIGp1c3QgZml4IHRoZSBpbnRlcnJ1cHQgcmF0ZSBhdCA0MDAwCisJICogaW50cy9zZWMgLSBJVFIgdGltZXIgdmFsdWUgb2YgMTIwIHRpY2tzLgorCSAqLworCWlmIChhZGFwdGVyLT5saW5rX3NwZWVkICE9IFNQRUVEXzEwMDApIHsKKwkJbmV3X3ZhbCA9IDEyMDsKKwkJZ290byBzZXRfaXRyX3ZhbDsKKwl9CisJYXZnX3dpcmVfc2l6ZSA9IHJ4X3JpbmctPnRvdGFsX2J5dGVzIC8gcnhfcmluZy0+dG90YWxfcGFja2V0czsKKworCS8qIEFkZCAyNCBieXRlcyB0byBzaXplIHRvIGFjY291bnQgZm9yIENSQywgcHJlYW1ibGUsIGFuZCBnYXAgKi8KKwlhdmdfd2lyZV9zaXplICs9IDI0OworCisJLyogRG9uJ3Qgc3RhcnZlIGp1bWJvIGZyYW1lcyAqLworCWF2Z193aXJlX3NpemUgPSBtaW4oYXZnX3dpcmVfc2l6ZSwgMzAwMCk7CisKKwkvKiBHaXZlIGEgbGl0dGxlIGJvb3N0IHRvIG1pZC1zaXplIGZyYW1lcyAqLworCWlmICgoYXZnX3dpcmVfc2l6ZSA+IDMwMCkgJiYgKGF2Z193aXJlX3NpemUgPCAxMjAwKSkKKwkJbmV3X3ZhbCA9IGF2Z193aXJlX3NpemUgLyAzOworCWVsc2UKKwkJbmV3X3ZhbCA9IGF2Z193aXJlX3NpemUgLyAyOworCitzZXRfaXRyX3ZhbDoKIAlpZiAobmV3X3ZhbCAhPSByeF9yaW5nLT5pdHJfdmFsKSB7CiAJCXJ4X3JpbmctPml0cl92YWwgPSBuZXdfdmFsOwotCQl3cjMyKHJ4X3JpbmctPml0cl9yZWdpc3RlciwKLQkJCQkxMDAwMDAwMDAwIC8gKG5ld192YWwgKiAyNTYpKTsKKwkJcnhfcmluZy0+c2V0X2l0ciA9IDE7CiAJfQotfQotCi1zdGF0aWMgdm9pZCBpZ2JfcmFpc2VfcnhfZWl0cihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgICBzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcpCi17Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQlpbnQgbmV3X3ZhbDsKLQotCW5ld192YWwgPSByeF9yaW5nLT5pdHJfdmFsICogMjsKLQlpZiAobmV3X3ZhbCA+IElHQl9NQVhfRFlOX0lUUikKLQkJbmV3X3ZhbCA9IElHQl9NQVhfRFlOX0lUUjsKLQotCWlmIChuZXdfdmFsICE9IHJ4X3JpbmctPml0cl92YWwpIHsKLQkJcnhfcmluZy0+aXRyX3ZhbCA9IG5ld192YWw7Ci0JCXdyMzIocnhfcmluZy0+aXRyX3JlZ2lzdGVyLAotCQkJCTEwMDAwMDAwMDAgLyAobmV3X3ZhbCAqIDI1NikpOwotCX0KK2NsZWFyX2NvdW50czoKKwlyeF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CisJcnhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CiB9CiAKIC8qKgpAQCAtMjI5OCw4ICsyNTUzLDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBpZ2Jfc2V0X2l0cihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBpdHJfcmVnaXN0ZXIsCi0JCQlpbnQgcnhfb25seSkKK3N0YXRpYyB2b2lkIGlnYl9zZXRfaXRyKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MTYgY3VycmVudF9pdHI7CiAJdTMyIG5ld19pdHIgPSBhZGFwdGVyLT5pdHI7CkBAIC0yMzE1LDI2ICsyNTY5LDIzIEBACiAJCQkJICAgIGFkYXB0ZXItPnJ4X2l0ciwKIAkJCQkgICAgYWRhcHRlci0+cnhfcmluZy0+dG90YWxfcGFja2V0cywKIAkJCQkgICAgYWRhcHRlci0+cnhfcmluZy0+dG90YWxfYnl0ZXMpOwotCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIChpdHIgMykgZWxpbWluYXRlcyB0aGUgbG93ZXN0X2xhdGVuY3kgc2V0dGluZyAqLwotCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA9PSAzICYmIGFkYXB0ZXItPnJ4X2l0ciA9PSBsb3dlc3RfbGF0ZW5jeSkKLQkJYWRhcHRlci0+cnhfaXRyID0gbG93X2xhdGVuY3k7CiAKLQlpZiAoIXJ4X29ubHkpIHsKKwlpZiAoYWRhcHRlci0+cnhfcmluZy0+YnVkZHkpIHsKIAkJYWRhcHRlci0+dHhfaXRyID0gaWdiX3VwZGF0ZV9pdHIoYWRhcHRlciwKIAkJCQkJICAgIGFkYXB0ZXItPnR4X2l0ciwKIAkJCQkJICAgIGFkYXB0ZXItPnR4X3JpbmctPnRvdGFsX3BhY2tldHMsCiAJCQkJCSAgICBhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9ieXRlcyk7Ci0JCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIChpdHIgMykgZWxpbWluYXRlcyB0aGUKLQkJICogbG93ZXN0X2xhdGVuY3kgc2V0dGluZyAqLwotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgPT0gMyAmJgotCQkgICAgYWRhcHRlci0+dHhfaXRyID09IGxvd2VzdF9sYXRlbmN5KQotCQkJYWRhcHRlci0+dHhfaXRyID0gbG93X2xhdGVuY3k7CiAKIAkJY3VycmVudF9pdHIgPSBtYXgoYWRhcHRlci0+cnhfaXRyLCBhZGFwdGVyLT50eF9pdHIpOwogCX0gZWxzZSB7CiAJCWN1cnJlbnRfaXRyID0gYWRhcHRlci0+cnhfaXRyOwogCX0KIAorCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIChpdHIgMykgZWxpbWluYXRlcyB0aGUgbG93ZXN0X2xhdGVuY3kgc2V0dGluZyAqLworCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA9PSAzICYmCisJICAgIGN1cnJlbnRfaXRyID09IGxvd2VzdF9sYXRlbmN5KQorCQljdXJyZW50X2l0ciA9IGxvd19sYXRlbmN5OworCiAJc3dpdGNoIChjdXJyZW50X2l0cikgewogCS8qIGNvdW50cyBhbmQgcGFja2V0cyBpbiB1cGRhdGVfaXRyIGFyZSBkZXBlbmRlbnQgb24gdGhlc2UgbnVtYmVycyAqLwogCWNhc2UgbG93ZXN0X2xhdGVuY3k6CkBAIC0yMzUxLDYgKzI2MDIsMTMgQEAKIAl9CiAKIHNldF9pdHJfbm93OgorCWFkYXB0ZXItPnJ4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKKwlhZGFwdGVyLT5yeF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKKwlpZiAoYWRhcHRlci0+cnhfcmluZy0+YnVkZHkpIHsKKwkJYWRhcHRlci0+cnhfcmluZy0+YnVkZHktPnRvdGFsX2J5dGVzID0gMDsKKwkJYWRhcHRlci0+cnhfcmluZy0+YnVkZHktPnRvdGFsX3BhY2tldHMgPSAwOworCX0KKwogCWlmIChuZXdfaXRyICE9IGFkYXB0ZXItPml0cikgewogCQkvKiB0aGlzIGF0dGVtcHRzIHRvIGJpYXMgdGhlIGludGVycnVwdCByYXRlIHRvd2FyZHMgQnVsawogCQkgKiBieSBhZGRpbmcgaW50ZXJtZWRpYXRlIHN0ZXBzIHdoZW4gaW50ZXJydXB0IHJhdGUgaXMKQEAgLTIzNjUsNyArMjYyMyw4IEBACiAJCSAqIGVuZHMgdXAgYmVpbmcgY29ycmVjdC4KIAkJICovCiAJCWFkYXB0ZXItPml0ciA9IG5ld19pdHI7Ci0JCWFkYXB0ZXItPnNldF9pdHIgPSAxOworCQlhZGFwdGVyLT5yeF9yaW5nLT5pdHJfdmFsID0gMTAwMDAwMDAwMCAvIChuZXdfaXRyICogMjU2KTsKKwkJYWRhcHRlci0+cnhfcmluZy0+c2V0X2l0ciA9IDE7CiAJfQogCiAJcmV0dXJuOwpAQCAtMjQ0MSw5ICsyNzAwLDkgQEAKIAltc3NfbDRsZW5faWR4ID0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPDwgRTEwMDBfQURWVFhEX01TU19TSElGVCk7CiAJbXNzX2w0bGVuX2lkeCB8PSAobDRsZW4gPDwgRTEwMDBfQURWVFhEX0w0TEVOX1NISUZUKTsKIAotCS8qIENvbnRleHQgaW5kZXggbXVzdCBiZSB1bmlxdWUgcGVyIHJpbmcuICBMdWNraWx5LCBzbyBpcyB0aGUgaW50ZXJydXB0Ci0JICogbWFzayB2YWx1ZS4gKi8KLQltc3NfbDRsZW5faWR4IHw9IHR4X3JpbmctPmVpbXNfdmFsdWUgPj4gNDsKKwkvKiBDb250ZXh0IGluZGV4IG11c3QgYmUgdW5pcXVlIHBlciByaW5nLiAqLworCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX05FRURfQ1RYX0lEWCkKKwkJbXNzX2w0bGVuX2lkeCB8PSB0eF9yaW5nLT5xdWV1ZV9pbmRleCA8PCA0OwogCiAJY29udGV4dF9kZXNjLT5tc3NfbDRsZW5faWR4ID0gY3B1X3RvX2xlMzIobXNzX2w0bGVuX2lkeCk7CiAJY29udGV4dF9kZXNjLT5zZXFudW1fc2VlZCA9IDA7CkBAIC0yNTA3LDggKzI3NjYsOSBAQAogCiAJCWNvbnRleHRfZGVzYy0+dHlwZV90dWNtZF9tbGhsID0gY3B1X3RvX2xlMzIodHVfY21kKTsKIAkJY29udGV4dF9kZXNjLT5zZXFudW1fc2VlZCA9IDA7Ci0JCWNvbnRleHRfZGVzYy0+bXNzX2w0bGVuX2lkeCA9Ci0JCQkJCSAgY3B1X3RvX2xlMzIodHhfcmluZy0+ZWltc192YWx1ZSA+PiA0KTsKKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfTkVFRF9DVFhfSURYKQorCQkJY29udGV4dF9kZXNjLT5tc3NfbDRsZW5faWR4ID0KKwkJCQljcHVfdG9fbGUzMih0eF9yaW5nLT5xdWV1ZV9pbmRleCA8PCA0KTsKIAogCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwpAQCAtMjYwOSw5ICsyODY5LDEwIEBACiAJCW9saW5mb19zdGF0dXMgfD0gRTEwMDBfVFhEX1BPUFRTX1RYU00gPDwgODsKIAl9CiAKLQlpZiAodHhfZmxhZ3MgJiAoSUdCX1RYX0ZMQUdTX0NTVU0gfCBJR0JfVFhfRkxBR1NfVFNPIHwKLQkJCUlHQl9UWF9GTEFHU19WTEFOKSkKLQkJb2xpbmZvX3N0YXR1cyB8PSB0eF9yaW5nLT5laW1zX3ZhbHVlID4+IDQ7CisJaWYgKChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX05FRURfQ1RYX0lEWCkgJiYKKwkgICAgKHR4X2ZsYWdzICYgKElHQl9UWF9GTEFHU19DU1VNIHwgSUdCX1RYX0ZMQUdTX1RTTyB8CisJCQkgSUdCX1RYX0ZMQUdTX1ZMQU4pKSkKKwkJb2xpbmZvX3N0YXR1cyB8PSB0eF9yaW5nLT5xdWV1ZV9pbmRleCA8PCA0OwogCiAJb2xpbmZvX3N0YXR1cyB8PSAoKHBheWxlbiAtIGhkcl9sZW4pIDw8IEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpOwogCkBAIC0yNjQ3LDcgKzI5MDgsOCBAQAogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKKwogCS8qIEhlcmJlcnQncyBvcmlnaW5hbCBwYXRjaCBoYWQ6CiAJICogIHNtcF9tYl9fYWZ0ZXJfbmV0aWZfc3RvcF9xdWV1ZSgpOwogCSAqIGJ1dCBzaW5jZSB0aGF0IGRvZXNuJ3QgZXhpc3QgeWV0LCBqdXN0IG9wZW4gY29kZSBpdC4gKi8KQEAgLTI2NTksNyArMjkyMSw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBBIHJlcHJpZXZlISAqLwotCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisJbmV0aWZfd2FrZV9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKIAkrK2FkYXB0ZXItPnJlc3RhcnRfcXVldWU7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjgxLDcgKzI5NDMsNiBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgaW50IHR4X2ZsYWdzID0gMDsKIAl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCXU4IGhkcl9sZW4gPSAwOwogCWludCB0c28gPSAwOwogCkBAIC0yNjk3LDEwICsyOTU4LDYgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZ0eF9yaW5nLT50eF9sb2NrLCBpcnFfZmxhZ3MpKQotCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0KIAkvKiBuZWVkOiAxIGRlc2NyaXB0b3IgcGVyIHBhZ2UsCiAJICogICAgICAgKyAyIGRlc2MgZ2FwIHRvIGtlZXAgdGFpbCBmcm9tIHRvdWNoaW5nIGhlYWQsCiAJICogICAgICAgKyAxIGRlc2MgZm9yIHNrYi0+ZGF0YSwKQEAgLTI3MDgsMjEgKzI5NjUsMjMgQEAKIAkgKiBvdGhlcndpc2UgdHJ5IG5leHQgdGltZSAqLwogCWlmIChpZ2JfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyA0KSkgewogCQkvKiB0aGlzIGlzIGEgaGFyZCBlcnJvciAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eF9yaW5nLT50eF9sb2NrLCBpcnFfZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQorCXNrYl9vcnBoYW4oc2tiKTsKIAogCWlmIChhZGFwdGVyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKIAkJdHhfZmxhZ3MgfD0gSUdCX1RYX0ZMQUdTX1ZMQU47CiAJCXR4X2ZsYWdzIHw9ICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCBJR0JfVFhfRkxBR1NfVkxBTl9TSElGVCk7CiAJfQogCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfSVBWNDsKKwogCXRzbyA9IHNrYl9pc19nc28oc2tiKSA/IGlnYl90c29fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MsCiAJCQkJCSAgICAgICZoZHJfbGVuKSA6IDA7CiAKIAlpZiAodHNvIDwgMCkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eF9yaW5nLT50eF9sb2NrLCBpcnFfZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIApAQCAtMjczMiw5ICsyOTkxLDYgQEAKIAkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQogCQkJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19DU1VNOwogCi0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQotCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfSVBWNDsKLQogCWlnYl90eF9xdWV1ZV9hZHYoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsCiAJCQkgaWdiX3R4X21hcF9hZHYoYWRhcHRlciwgdHhfcmluZywgc2tiKSwKIAkJCSBza2ItPmxlbiwgaGRyX2xlbik7CkBAIC0yNzQ0LDE0ICszMDAwLDE3IEBACiAJLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLwogCWlnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgTUFYX1NLQl9GUkFHUyArIDQpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9jaywgaXJxX2ZsYWdzKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGlnYl94bWl0X2ZyYW1lX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbMF07CisJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nOworCisJaW50IHJfaWR4ID0gMDsKKwlyX2lkeCA9IHNrYi0+cXVldWVfbWFwcGluZyAmIChJR0JfTUFYX1RYX1FVRVVFUyAtIDEpOworCXR4X3JpbmcgPSBhZGFwdGVyLT5tdWx0aV90eF90YWJsZVtyX2lkeF07CiAKIAkvKiBUaGlzIGdvZXMgYmFjayB0byB0aGUgcXVlc3Rpb24gb2YgaG93IHRvIGxvZ2ljYWxseSBtYXAgYSB0eCBxdWV1ZQogCSAqIHRvIGEgZmxvdy4gIFJpZ2h0IG5vdywgcGVyZm9ybWFuY2UgaXMgaW1wYWN0ZWQgc2xpZ2h0bHkgbmVnYXRpdmVseQpAQCAtMjg0Niw3ICszMTA1LDExIEBACiAJZWxzZSBpZiAobWF4X2ZyYW1lIDw9IElHQl9SWEJVRkZFUl8yMDQ4KQogCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gSUdCX1JYQlVGRkVSXzIwNDg7CiAJZWxzZQotCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gSUdCX1JYQlVGRkVSXzQwOTY7CisjaWYgKFBBR0VfU0laRSAvIDIpID4gSUdCX1JYQlVGRkVSXzE2Mzg0CisJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBJR0JfUlhCVUZGRVJfMTYzODQ7CisjZWxzZQorCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gUEFHRV9TSVpFIC8gMjsKKyNlbmRpZgogCS8qIGFkanVzdCBhbGxvY2F0aW9uIGlmIExQRSBwcm90ZWN0cyB1cywgYW5kIHdlIGFyZW4ndCB1c2luZyBTQlAgKi8KIAlpZiAoKG1heF9mcmFtZSA9PSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4pIHx8CiAJICAgICAobWF4X2ZyYW1lID09IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFKSkKQEAgLTMwMTAsMjYgKzMyNzMsMTkgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIGVpY3I7Ci0JLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gdGhlICJvdGhlciIgYml0LCBhdm9pZCByZS1lbnRyeSAqLwotCXdyMzIoRTEwMDBfRUlNQywgRTEwMDBfRUlNU19PVEhFUik7CisJdTMyIGljciA9IHJkMzIoRTEwMDBfSUNSKTsKIAotCWVpY3IgPSByZDMyKEUxMDAwX0VJQ1IpOwotCi0JaWYgKGVpY3IgJiBFMTAwMF9FSU1TX09USEVSKSB7Ci0JCXUzMiBpY3IgPSByZDMyKEUxMDAwX0lDUik7Ci0JCS8qIHJlYWRpbmcgSUNSIGNhdXNlcyBiaXQgMzEgb2YgRUlDUiB0byBiZSBjbGVhcmVkICovCi0JCWlmICghKGljciAmIEUxMDAwX0lDUl9MU0MpKQotCQkJZ290byBub19saW5rX2ludGVycnVwdDsKLQkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwotCQkvKiBndWFyZCBhZ2FpbnN0IGludGVycnVwdCB3aGVuIHdlJ3JlIGdvaW5nIGRvd24gKi8KLQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOwotCX0KLQorCS8qIHJlYWRpbmcgSUNSIGNhdXNlcyBiaXQgMzEgb2YgRUlDUiB0byBiZSBjbGVhcmVkICovCisJaWYgKCEoaWNyICYgRTEwMDBfSUNSX0xTQykpCisJCWdvdG8gbm9fbGlua19pbnRlcnJ1cHQ7CisJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOworCS8qIGd1YXJkIGFnYWluc3QgaW50ZXJydXB0IHdoZW4gd2UncmUgZ29pbmcgZG93biAqLworCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOworCQogbm9fbGlua19pbnRlcnJ1cHQ6CiAJd3IzMihFMTAwMF9JTVMsIEUxMDAwX0lNU19MU0MpOwotCXdyMzIoRTEwMDBfRUlNUywgRTEwMDBfRUlNU19PVEhFUik7CisJd3IzMihFMTAwMF9FSU1TLCBhZGFwdGVyLT5laW1zX290aGVyKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTMwNDAsNDQgKzMyOTYsMTg2IEBACiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gdHhfcmluZy0+YWRhcHRlcjsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCi0JaWYgKCF0eF9yaW5nLT5pdHJfdmFsKQotCQl3cjMyKEUxMDAwX0VJTUMsIHR4X3JpbmctPmVpbXNfdmFsdWUpOwotCisjaWZkZWYgQ09ORklHX0RDQQorCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQorCQlpZ2JfdXBkYXRlX3R4X2RjYSh0eF9yaW5nKTsKKyNlbmRpZgogCXR4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKIAl0eF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKLQlpZiAoIWlnYl9jbGVhbl90eF9pcnEoYWRhcHRlciwgdHhfcmluZykpCisKKwkvKiBhdXRvIG1hc2sgd2lsbCBhdXRvbWF0aWNhbGx5IHJlZW5hYmxlIHRoZSBpbnRlcnJ1cHQgd2hlbiB3ZSB3cml0ZQorCSAqIEVJQ1MgKi8KKwlpZiAoIWlnYl9jbGVhbl90eF9pcnEodHhfcmluZykpCiAJCS8qIFJpbmcgd2FzIG5vdCBjb21wbGV0ZWx5IGNsZWFuZWQsIHNvIGZpcmUgYW5vdGhlciBpbnRlcnJ1cHQgKi8KIAkJd3IzMihFMTAwMF9FSUNTLCB0eF9yaW5nLT5laW1zX3ZhbHVlKTsKLQotCWlmICghdHhfcmluZy0+aXRyX3ZhbCkKKwllbHNlCiAJCXdyMzIoRTEwMDBfRUlNUywgdHhfcmluZy0+ZWltc192YWx1ZSk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyB2b2lkIGlnYl93cml0ZV9pdHIoc3RydWN0IGlnYl9yaW5nICpyaW5nKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmcmluZy0+YWRhcHRlci0+aHc7CisJaWYgKChyaW5nLT5hZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpICYmIHJpbmctPnNldF9pdHIpIHsKKwkJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwkJY2FzZSBlMTAwMF84MjU3NjoKKwkJCXdyMzIocmluZy0+aXRyX3JlZ2lzdGVyLAorCQkJICAgICByaW5nLT5pdHJfdmFsIHwKKwkJCSAgICAgMHg4MDAwMDAwMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdyMzIocmluZy0+aXRyX3JlZ2lzdGVyLAorCQkJICAgICByaW5nLT5pdHJfdmFsIHwKKwkJCSAgICAgKHJpbmctPml0cl92YWwgPDwgMTYpKTsKKwkJCWJyZWFrOworCQl9CisJCXJpbmctPnNldF9pdHIgPSAwOworCX0KK30KKwogc3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X3J4KGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nID0gZGF0YTsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOwotCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlpZiAoIXJ4X3JpbmctPml0cl92YWwpCi0JCXdyMzIoRTEwMDBfRUlNQywgcnhfcmluZy0+ZWltc192YWx1ZSk7CisJLyogV3JpdGUgdGhlIElUUiB2YWx1ZSBjYWxjdWxhdGVkIGF0IHRoZSBlbmQgb2YgdGhlCisJICogcHJldmlvdXMgaW50ZXJydXB0LgorCSAqLwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoYWRhcHRlci0+bmV0ZGV2LCAmcnhfcmluZy0+bmFwaSkpIHsKLQkJcnhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOwotCQlyeF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKLQkJcnhfcmluZy0+bm9faXRyX2FkanVzdCA9IDA7CisJaWdiX3dyaXRlX2l0cihyeF9yaW5nKTsKKworCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGFkYXB0ZXItPm5ldGRldiwgJnJ4X3JpbmctPm5hcGkpKQogCQlfX25ldGlmX3J4X3NjaGVkdWxlKGFkYXB0ZXItPm5ldGRldiwgJnJ4X3JpbmctPm5hcGkpOwotCX0gZWxzZSB7Ci0JCWlmICghcnhfcmluZy0+bm9faXRyX2FkanVzdCkgewotCQkJaWdiX2xvd2VyX3J4X2VpdHIoYWRhcHRlciwgcnhfcmluZyk7Ci0JCQlyeF9yaW5nLT5ub19pdHJfYWRqdXN0ID0gMTsKLQkJfQotCX0KIAotCXJldHVybiBJUlFfSEFORExFRDsKKyNpZmRlZiBDT05GSUdfRENBCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCisJCWlnYl91cGRhdGVfcnhfZGNhKHJ4X3JpbmcpOworI2VuZGlmCisJCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorI2lmZGVmIENPTkZJR19EQ0EKK3N0YXRpYyB2b2lkIGlnYl91cGRhdGVfcnhfZGNhKHN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZykKK3sKKwl1MzIgZGNhX3J4Y3RybDsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKKwlpbnQgcSA9IHJ4X3JpbmcgLSBhZGFwdGVyLT5yeF9yaW5nOworCisJaWYgKHJ4X3JpbmctPmNwdSAhPSBjcHUpIHsKKwkJZGNhX3J4Y3RybCA9IHJkMzIoRTEwMDBfRENBX1JYQ1RSTChxKSk7CisJCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzYpIHsKKwkJCWRjYV9yeGN0cmwgJj0gfkUxMDAwX0RDQV9SWENUUkxfQ1BVSURfTUFTS184MjU3NjsKKwkJCWRjYV9yeGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KSA8PAorCQkJICAgICAgICAgICAgICBFMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUOworCQl9IGVsc2UgeworCQkJZGNhX3J4Y3RybCAmPSB+RTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9NQVNLOworCQkJZGNhX3J4Y3RybCB8PSBkY2FfZ2V0X3RhZyhjcHUpOworCQl9CisJCWRjYV9yeGN0cmwgfD0gRTEwMDBfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTjsKKwkJZGNhX3J4Y3RybCB8PSBFMTAwMF9EQ0FfUlhDVFJMX0hFQURfRENBX0VOOworCQlkY2FfcnhjdHJsIHw9IEUxMDAwX0RDQV9SWENUUkxfREFUQV9EQ0FfRU47CisJCXdyMzIoRTEwMDBfRENBX1JYQ1RSTChxKSwgZGNhX3J4Y3RybCk7CisJCXJ4X3JpbmctPmNwdSA9IGNwdTsKKwl9CisJcHV0X2NwdSgpOworfQorCitzdGF0aWMgdm9pZCBpZ2JfdXBkYXRlX3R4X2RjYShzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcpCit7CisJdTMyIGRjYV90eGN0cmw7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gdHhfcmluZy0+YWRhcHRlcjsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBjcHUgPSBnZXRfY3B1KCk7CisJaW50IHEgPSB0eF9yaW5nIC0gYWRhcHRlci0+dHhfcmluZzsKKworCWlmICh0eF9yaW5nLT5jcHUgIT0gY3B1KSB7CisJCWRjYV90eGN0cmwgPSByZDMyKEUxMDAwX0RDQV9UWENUUkwocSkpOworCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CisJCQlkY2FfdHhjdHJsICY9IH5FMTAwMF9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1NzY7CisJCQlkY2FfdHhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSkgPDwKKwkJCSAgICAgICAgICAgICAgRTEwMDBfRENBX1RYQ1RSTF9DUFVJRF9TSElGVDsKKwkJfSBlbHNlIHsKKwkJCWRjYV90eGN0cmwgJj0gfkUxMDAwX0RDQV9UWENUUkxfQ1BVSURfTUFTSzsKKwkJCWRjYV90eGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJfQorCQlkY2FfdHhjdHJsIHw9IEUxMDAwX0RDQV9UWENUUkxfREVTQ19EQ0FfRU47CisJCXdyMzIoRTEwMDBfRENBX1RYQ1RSTChxKSwgZGNhX3R4Y3RybCk7CisJCXR4X3JpbmctPmNwdSA9IGNwdTsKKwl9CisJcHV0X2NwdSgpOworfQorCitzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfZGNhKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0uY3B1ID0gLTE7CisJCWlnYl91cGRhdGVfdHhfZGNhKCZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNwdSA9IC0xOworCQlpZ2JfdXBkYXRlX3J4X2RjYSgmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faWdiX25vdGlmeV9kY2Eoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdW5zaWduZWQgbG9uZyBldmVudCA9ICoodW5zaWduZWQgbG9uZyAqKWRhdGE7CisKKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0hBU19EQ0EpKQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIERDQV9QUk9WSURFUl9BREQ6CisJCS8qIGlmIGFscmVhZHkgZW5hYmxlZCwgZG9uJ3QgZG8gaXQgYWdhaW4gKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCisJCQlicmVhazsKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfRENBX0VOQUJMRUQ7CisJCS8qIEFsd2F5cyB1c2UgQ0IyIG1vZGUsIGRpZmZlcmVuY2UgaXMgbWFza2VkCisJCSAqIGluIHRoZSBDQiBkcml2ZXIuICovCisJCXdyMzIoRTEwMDBfRENBX0NUUkwsIDIpOworCQlpZiAoZGNhX2FkZF9yZXF1ZXN0ZXIoZGV2KSA9PSAwKSB7CisJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRENBIGVuYWJsZWRcbiIpOworCQkJaWdiX3NldHVwX2RjYShhZGFwdGVyKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZhbGwgVGhyb3VnaCBzaW5jZSBEQ0EgaXMgZGlzYWJsZWQuICovCisJY2FzZSBEQ0FfUFJPVklERVJfUkVNT1ZFOgorCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkgeworCQkJLyogd2l0aG91dCB0aGlzIGEgY2xhc3NfZGV2aWNlIGlzIGxlZnQKKyAJCQkgKiBoYW5naW5nIGFyb3VuZCBpbiB0aGUgc3lzZnMgbW9kZWwgKi8KKwkJCWRjYV9yZW1vdmVfcmVxdWVzdGVyKGRldik7CisJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRENBIGRpc2FibGVkXG4iKTsKKwkJCWFkYXB0ZXItPmZsYWdzICY9IH5JR0JfRkxBR19EQ0FfRU5BQkxFRDsKKwkJCXdyMzIoRTEwMDBfRENBX0NUUkwsIDEpOworCQl9CisJCWJyZWFrOworCX0KK291dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZ2Jfbm90aWZ5X2RjYShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwKQoreworCWludCByZXRfdmFsOworCisJcmV0X3ZhbCA9IGRyaXZlcl9mb3JfZWFjaF9kZXZpY2UoJmlnYl9kcml2ZXIuZHJpdmVyLCBOVUxMLCAmZXZlbnQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pZ2Jfbm90aWZ5X2RjYSk7CisKKwlyZXR1cm4gcmV0X3ZhbCA/IE5PVElGWV9CQUQgOiBOT1RJRllfRE9ORTsKK30KKyNlbmRpZiAvKiBDT05GSUdfRENBICovCiAKIC8qKgogICogaWdiX2ludHJfbXNpIC0gSW50ZXJydXB0IEhhbmRsZXIKQEAgLTMwODgsMzQgKzM0ODYsMTkgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9ICZhZGFwdGVyLT5uYXBpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJLyogcmVhZCBJQ1IgZGlzYWJsZXMgaW50ZXJydXB0cyB1c2luZyBJQU0gKi8KIAl1MzIgaWNyID0gcmQzMihFMTAwMF9JQ1IpOwogCi0JLyogV3JpdGUgdGhlIElUUiB2YWx1ZSBjYWxjdWxhdGVkIGF0IHRoZSBlbmQgb2YgdGhlCi0JICogcHJldmlvdXMgaW50ZXJydXB0LgotCSAqLwotCWlmIChhZGFwdGVyLT5zZXRfaXRyKSB7Ci0JCXdyMzIoRTEwMDBfSVRSLAotCQkJMTAwMDAwMDAwMCAvIChhZGFwdGVyLT5pdHIgKiAyNTYpKTsKLQkJYWRhcHRlci0+c2V0X2l0ciA9IDA7Ci0JfQorCWlnYl93cml0ZV9pdHIoYWRhcHRlci0+cnhfcmluZyk7CiAKLQkvKiByZWFkIElDUiBkaXNhYmxlcyBpbnRlcnJ1cHRzIHVzaW5nIElBTSAqLwogCWlmIChpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwogCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAobmV0ZGV2LCBuYXBpKSkgewotCQlhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7Ci0JCWFkYXB0ZXItPnR4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOwotCQlhZGFwdGVyLT5yeF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7Ci0JCWFkYXB0ZXItPnJ4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5ldGRldiwgbmFwaSk7Ci0JfQorCW5ldGlmX3J4X3NjaGVkdWxlKG5ldGRldiwgJmFkYXB0ZXItPnJ4X3JpbmdbMF0ubmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0zMTI5LDcgKzM1MTIsNiBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOwogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gJmFkYXB0ZXItPm5hcGk7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAkvKiBJbnRlcnJ1cHQgQXV0by1NYXNrLi4udXBvbiByZWFkaW5nIElDUiwgaW50ZXJydXB0cyBhcmUgbWFza2VkLiAgTm8KIAkgKiBuZWVkIGZvciB0aGUgSU1DIHdyaXRlICovCkBAIC0zMTM4LDE0ICszNTIwLDcgQEAKIAlpZiAoIWljcikKIAkJcmV0dXJuIElSUV9OT05FOyAgLyogTm90IG91ciBpbnRlcnJ1cHQgKi8KIAotCS8qIFdyaXRlIHRoZSBJVFIgdmFsdWUgY2FsY3VsYXRlZCBhdCB0aGUgZW5kIG9mIHRoZQotCSAqIHByZXZpb3VzIGludGVycnVwdC4KLQkgKi8KLQlpZiAoYWRhcHRlci0+c2V0X2l0cikgewotCQl3cjMyKEUxMDAwX0lUUiwKLQkJCTEwMDAwMDAwMDAgLyAoYWRhcHRlci0+aXRyICogMjU2KSk7Ci0JCWFkYXB0ZXItPnNldF9pdHIgPSAwOwotCX0KKwlpZ2Jfd3JpdGVfaXRyKGFkYXB0ZXItPnJ4X3JpbmcpOwogCiAJLyogSU1TIHdpbGwgbm90IGF1dG8tbWFzayBpZiBJTlRfQVNTRVJURUQgaXMgbm90IHNldCwgYW5kIGlmIGl0IGlzCiAJICogbm90IHNldCwgdGhlbiB0aGUgYWRhcHRlciBkaWRuJ3Qgc2VuZCBhbiBpbnRlcnJ1cHQgKi8KQEAgLTMxNjEsNTcgKzM1MzYsNDEgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuZXRkZXYsIG5hcGkpKSB7Ci0JCWFkYXB0ZXItPnR4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKLQkJYWRhcHRlci0+cnhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOwotCQlhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKLQkJYWRhcHRlci0+cnhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2LCBuYXBpKTsKLQl9CisJbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2LCAmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoqCi0gKiBpZ2JfY2xlYW4gLSBOQVBJIFJ4IHBvbGxpbmcgY2FsbGJhY2sKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogaWdiX3BvbGwgLSBOQVBJIFJ4IHBvbGxpbmcgY2FsbGJhY2sKKyAqIEBuYXBpOiBuYXBpIHBvbGxpbmcgc3RydWN0dXJlCisgKiBAYnVkZ2V0OiBjb3VudCBvZiBob3cgbWFueSBwYWNrZXRzIHdlIHNob3VsZCBoYW5kbGUKICAqKi8KLXN0YXRpYyBpbnQgaWdiX2NsZWFuKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3N0YXRpYyBpbnQgaWdiX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewotCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaWdiX2FkYXB0ZXIsCi0JCQkJCQkgICBuYXBpKTsKKwlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGlnYl9yaW5nLCBuYXBpKTsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JaW50IHR4X2NsZWFuX2NvbXBsZXRlID0gMSwgd29ya19kb25lID0gMDsKLQlpbnQgaTsKKwlpbnQgdHhfY2xlYW5fY29tcGxldGUsIHdvcmtfZG9uZSA9IDA7CiAKLQkvKiBNdXN0IE5PVCB1c2UgbmV0ZGV2X3ByaXYgbWFjcm8gaGVyZS4gKi8KLQlhZGFwdGVyID0gbmV0ZGV2LT5wcml2OworCS8qIHRoaXMgcG9sbCByb3V0aW5lIG9ubHkgc3VwcG9ydHMgb25lIHR4IGFuZCBvbmUgcnggcXVldWUgKi8KKyNpZmRlZiBDT05GSUdfRENBCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCisJCWlnYl91cGRhdGVfdHhfZGNhKCZhZGFwdGVyLT50eF9yaW5nWzBdKTsKKyNlbmRpZgorCXR4X2NsZWFuX2NvbXBsZXRlID0gaWdiX2NsZWFuX3R4X2lycSgmYWRhcHRlci0+dHhfcmluZ1swXSk7CiAKLQkvKiBLZWVwIGxpbmsgc3RhdGUgaW5mb3JtYXRpb24gd2l0aCBvcmlnaW5hbCBuZXRkZXYgKi8KLQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkKLQkJZ290byBxdWl0X3BvbGxpbmc7Ci0KLQkvKiBpZ2JfY2xlYW4gaXMgY2FsbGVkIHBlci1jcHUuICBUaGlzIGxvY2sgcHJvdGVjdHMgdHhfcmluZ1tpXSBmcm9tCi0JICogYmVpbmcgY2xlYW5lZCBieSBtdWx0aXBsZSBjcHVzIHNpbXVsdGFuZW91c2x5LiAgQSBmYWlsdXJlIG9idGFpbmluZwotCSAqIHRoZSBsb2NrIG1lYW5zIHR4X3JpbmdbaV0gaXMgY3VycmVudGx5IGJlaW5nIGNsZWFuZWQgYW55d2F5LiAqLwotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJaWYgKHNwaW5fdHJ5bG9jaygmYWRhcHRlci0+dHhfcmluZ1tpXS50eF9jbGVhbl9sb2NrKSkgewotCQkJdHhfY2xlYW5fY29tcGxldGUgJj0gaWdiX2NsZWFuX3R4X2lycShhZGFwdGVyLAotCQkJCQkJCSZhZGFwdGVyLT50eF9yaW5nW2ldKTsKLQkJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9yaW5nW2ldLnR4X2NsZWFuX2xvY2spOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJaWdiX2NsZWFuX3J4X2lycV9hZHYoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0sICZ3b3JrX2RvbmUsCi0JCQkJICAgICBhZGFwdGVyLT5yeF9yaW5nW2ldLm5hcGkud2VpZ2h0KTsKKyNpZmRlZiBDT05GSUdfRENBCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCisJCWlnYl91cGRhdGVfcnhfZGNhKCZhZGFwdGVyLT5yeF9yaW5nWzBdKTsKKyNlbmRpZgorCWlnYl9jbGVhbl9yeF9pcnFfYWR2KCZhZGFwdGVyLT5yeF9yaW5nWzBdLCAmd29ya19kb25lLCBidWRnZXQpOwogCiAJLyogSWYgbm8gVHggYW5kIG5vdCBlbm91Z2ggUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAoKHR4X2NsZWFuX2NvbXBsZXRlICYmICh3b3JrX2RvbmUgPCBidWRnZXQpKSB8fAogCSAgICAhbmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci1xdWl0X3BvbGxpbmc6CiAJCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpCi0JCQlpZ2Jfc2V0X2l0cihhZGFwdGVyLCBFMTAwMF9JVFIsIGZhbHNlKTsKKwkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOwogCQluZXRpZl9yeF9jb21wbGV0ZShuZXRkZXYsIG5hcGkpOwogCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQlpZ2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKQEAgLTMyMzMsNyArMzU5MiwxMSBAQAogCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKQogCQlnb3RvIHF1aXRfcG9sbGluZzsKIAotCWlnYl9jbGVhbl9yeF9pcnFfYWR2KGFkYXB0ZXIsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisjaWZkZWYgQ09ORklHX0RDQQorCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQorCQlpZ2JfdXBkYXRlX3J4X2RjYShyeF9yaW5nKTsKKyNlbmRpZgorCWlnYl9jbGVhbl9yeF9pcnFfYWR2KHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKIAogCS8qIElmIG5vdCBlbm91Z2ggUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KQEAgLTMyNDEsMTYgKzM2MDQsMTYgQEAKIHF1aXRfcG9sbGluZzoKIAkJbmV0aWZfcnhfY29tcGxldGUobmV0ZGV2LCBuYXBpKTsKIAotCQl3cjMyKEUxMDAwX0VJTVMsIHJ4X3JpbmctPmVpbXNfdmFsdWUpOwotCQlpZiAoKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykgJiYgIXJ4X3JpbmctPm5vX2l0cl9hZGp1c3QgJiYKLQkJICAgIChyeF9yaW5nLT50b3RhbF9wYWNrZXRzID4gSUdCX0RZTl9JVFJfUEFDS0VUX1RIUkVTSE9MRCkpIHsKLQkJCWludCBtZWFuX3NpemUgPSByeF9yaW5nLT50b3RhbF9ieXRlcyAvCi0JCQkJCXJ4X3JpbmctPnRvdGFsX3BhY2tldHM7Ci0JCQlpZiAobWVhbl9zaXplIDwgSUdCX0RZTl9JVFJfTEVOR1RIX0xPVykKLQkJCQlpZ2JfcmFpc2VfcnhfZWl0cihhZGFwdGVyLCByeF9yaW5nKTsKLQkJCWVsc2UgaWYgKG1lYW5fc2l6ZSA+IElHQl9EWU5fSVRSX0xFTkdUSF9ISUdIKQotCQkJCWlnYl9sb3dlcl9yeF9laXRyKGFkYXB0ZXIsIHJ4X3JpbmcpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKSB7CisJCQlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9PSAxKQorCQkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOworCQkJZWxzZQorCQkJCWlnYl91cGRhdGVfcmluZ19pdHIocnhfcmluZyk7CiAJCX0KKworCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQl3cjMyKEUxMDAwX0VJTVMsIHJ4X3JpbmctPmVpbXNfdmFsdWUpOworCiAJCXJldHVybiAwOwogCX0KIApAQCAtMzI2OCwxMSArMzYzMSwxMSBAQAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiByZXR1cm5zIHRydWUgaWYgcmluZyBpcyBjb21wbGV0ZWx5IGNsZWFuZWQKICAqKi8KLXN0YXRpYyBib29sIGlnYl9jbGVhbl90eF9pcnEoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQorc3RhdGljIGJvb2wgaWdiX2NsZWFuX3R4X2lycShzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSB0eF9yaW5nLT5hZGFwdGVyOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgZTEwMDBfdHhfZGVzYyAqdHhfZGVzYzsKIAlzdHJ1Y3QgaWdiX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTMzMzQsOSArMzY5Nyw5IEBACiAJCSAqIHNlZXMgdGhlIG5ldyBuZXh0X3RvX2NsZWFuLgogCQkgKi8KIAkJc21wX21iKCk7Ci0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgJiYKKwkJaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KSAmJgogCQkgICAgISh0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSkgewotCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCQkJbmV0aWZfd2FrZV9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKIAkJCSsrYWRhcHRlci0+cmVzdGFydF9xdWV1ZTsKIAkJfQogCX0KQEAgLTMzNTUsNyArMzcxOCw3IEBACiAJCQkvKiBkZXRlY3RlZCBUeCB1bml0IGhhbmcgKi8KIAkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCQkiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nXG4iCi0JCQkJIiAgVHggUXVldWUgICAgICAgICAgICAgPCVsdT5cbiIKKwkJCQkiICBUeCBRdWV1ZSAgICAgICAgICAgICA8JWQ+XG4iCiAJCQkJIiAgVERIICAgICAgICAgICAgICAgICAgPCV4PlxuIgogCQkJCSIgIFREVCAgICAgICAgICAgICAgICAgIDwleD5cbiIKIAkJCQkiICBuZXh0X3RvX3VzZSAgICAgICAgICA8JXg+XG4iCkBAIC0zMzY1LDggKzM3MjgsNyBAQAogCQkJCSIgIHRpbWVfc3RhbXAgICAgICAgICAgIDwlbHg+XG4iCiAJCQkJIiAgamlmZmllcyAgICAgICAgICAgICAgPCVseD5cbiIKIAkJCQkiICBkZXNjLnN0YXR1cyAgICAgICAgICA8JXg+XG4iLAotCQkJCSh1bnNpZ25lZCBsb25nKSgodHhfcmluZyAtIGFkYXB0ZXItPnR4X3JpbmcpIC8KLQkJCQkJc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZykpLAorCQkJCXR4X3JpbmctPnF1ZXVlX2luZGV4LAogCQkJCXJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT5oZWFkKSwKIAkJCQlyZWFkbChhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGFpbCksCiAJCQkJdHhfcmluZy0+bmV4dF90b191c2UsCkBAIC0zMzc1LDMzICszNzM3LDg3IEBACiAJCQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCwKIAkJCQlqaWZmaWVzLAogCQkJCXR4X2Rlc2MtPnVwcGVyLmZpZWxkcy5zdGF0dXMpOwotCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQkJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKIAkJfQogCX0KIAl0eF9yaW5nLT50b3RhbF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAl0eF9yaW5nLT50b3RhbF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7CisJdHhfcmluZy0+dHhfc3RhdHMuYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CisJdHhfcmluZy0+dHhfc3RhdHMucGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOwogCXJldHVybiByZXR2YWw7CiB9CiAKKyNpZmRlZiBDT05GSUdfSUdCX0xSTworIC8qKgorICogaWdiX2dldF9za2JfaGRyIC0gaGVscGVyIGZ1bmN0aW9uIGZvciBMUk8gaGVhZGVyIHByb2Nlc3NpbmcKKyAqIEBza2I6IHBvaW50ZXIgdG8gc2tfYnVmZiB0byBiZSBhZGRlZCB0byBMUk8gcGFja2V0CisgKiBAaXBoZHI6IHBvaW50ZXIgdG8gaXAgaGVhZGVyIHN0cnVjdHVyZQorICogQHRjcGg6IHBvaW50ZXIgdG8gdGNwIGhlYWRlciBzdHJ1Y3R1cmUKKyAqIEBoZHJfZmxhZ3M6IHBvaW50ZXIgdG8gaGVhZGVyIGZsYWdzCisgKiBAcHJpdjogcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGZvciB0aGUgY3VycmVudCBza19idWZmCisgKiovCitzdGF0aWMgaW50IGlnYl9nZXRfc2tiX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICoqaXBoZHIsIHZvaWQgKip0Y3BoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCit7CisJdW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MgPSBwcml2OworCXUxNiBwa3RfdHlwZSA9IHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLnBrdF9pbmZvICYKKwkgICAgICAgICAgICAgICAoRTEwMDBfUlhEQURWX1BLVFRZUEVfSVBWNCB8IEUxMDAwX1JYREFEVl9QS1RUWVBFX1RDUCk7CisKKwkvKiBWZXJpZnkgdGhhdCB0aGlzIGlzIGEgdmFsaWQgSVB2NCBUQ1AgcGFja2V0ICovCisJaWYgKHBrdF90eXBlICE9IChFMTAwMF9SWERBRFZfUEtUVFlQRV9JUFY0IHwKKwkgICAgICAgICAgICAgICAgICBFMTAwMF9SWERBRFZfUEtUVFlQRV9UQ1ApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBTZXQgbmV0d29yayBoZWFkZXJzICovCisJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgaXBfaGRybGVuKHNrYikpOworCSppcGhkciA9IGlwX2hkcihza2IpOworCSp0Y3BoID0gdGNwX2hkcihza2IpOworCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7CisKKwlyZXR1cm4gMDsKKworfQorI2VuZGlmIC8qIENPTkZJR19JR0JfTFJPICovCiAKIC8qKgogICogaWdiX3JlY2VpdmVfc2tiIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSByeCBpbmRpY2F0aW9ucwotICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAcmluZzogcG9pbnRlciB0byByZWNlaXZlIHJpbmcgcmVjZXZpbmcgdGhpcyBwYWNrZXQgCiAgKiBAc3RhdHVzOiBkZXNjcmlwdG9yIHN0YXR1cyBmaWVsZCBhcyB3cml0dGVuIGJ5IGhhcmR3YXJlCiAgKiBAdmxhbjogZGVzY3JpcHRvciB2bGFuIGZpZWxkIGFzIHdyaXR0ZW4gYnkgaGFyZHdhcmUgKG5vIGxlL2JlIGNvbnZlcnNpb24pCiAgKiBAc2tiOiBwb2ludGVyIHRvIHNrX2J1ZmYgdG8gYmUgaW5kaWNhdGVkIHRvIHN0YWNrCiAgKiovCi1zdGF0aWMgdm9pZCBpZ2JfcmVjZWl2ZV9za2Ioc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1OCBzdGF0dXMsIF9fbGUxNiB2bGFuLAotCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBpZ2JfcmVjZWl2ZV9za2Ioc3RydWN0IGlnYl9yaW5nICpyaW5nLCB1OCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MgKiByeF9kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9WUCkpCi0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLAotCQkJCQkgbGUxNl90b19jcHUodmxhbikgJgotCQkJCQkgRTEwMDBfUlhEX1NQQ19WTEFOX01BU0spOwotCWVsc2UKLQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiBhZGFwdGVyID0gcmluZy0+YWRhcHRlcjsKKwlib29sIHZsYW5fZXh0cmFjdGVkID0gKGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9WUCkpOworCisjaWZkZWYgQ09ORklHX0lHQl9MUk8KKwlpZiAoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPICYmCisJICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJCWlmICh2bGFuX2V4dHJhY3RlZCkKKwkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2IoJnJpbmctPmxyb19tZ3IsIHNrYiwKKwkJCSAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT52bGdycCwKKwkJCSAgICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKSwKKwkJCSAgICAgICAgICAgICAgICAgICByeF9kZXNjKTsKKwkJZWxzZQorCQkJbHJvX3JlY2VpdmVfc2tiKCZyaW5nLT5scm9fbWdyLHNrYiwgcnhfZGVzYyk7CisJCXJpbmctPmxyb191c2VkID0gMTsKKwl9IGVsc2UgeworI2VuZGlmCisJCWlmICh2bGFuX2V4dHJhY3RlZCkKKwkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLAorCQkJICAgICAgICAgICAgICAgICAgbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbikpOworCQllbHNlCisKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisjaWZkZWYgQ09ORklHX0lHQl9MUk8KKwl9CisjZW5kaWYKIH0KIAogCkBAIC0zNDI3LDE2ICszODQzLDE2IEBACiAJYWRhcHRlci0+aHdfY3N1bV9nb29kKys7CiB9CiAKLXN0YXRpYyBib29sIGlnYl9jbGVhbl9yeF9pcnFfYWR2KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgICBzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcsCi0JCQkJICAgICAgaW50ICp3b3JrX2RvbmUsIGludCBidWRnZXQpCitzdGF0aWMgYm9vbCBpZ2JfY2xlYW5fcnhfaXJxX2FkdihzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcsCisJCQkJIGludCAqd29ya19kb25lLCBpbnQgYnVkZ2V0KQogeworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHJ4X3JpbmctPmFkYXB0ZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MgLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGlnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvICwgKm5leHRfYnVmZmVyOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGksIGo7CisJdW5zaWduZWQgaW50IGk7CiAJdTMyIGxlbmd0aCwgaGxlbiwgc3RhdGVycjsKIAlib29sIGNsZWFuZWQgPSBmYWxzZTsKIAlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CkBAIC0zNDY2LDY0ICszODgyLDQ4IEBACiAJCWNsZWFuZWQgPSB0cnVlOwogCQljbGVhbmVkX2NvdW50Kys7CiAKLQkJaWYgKHJ4X3JpbmctPnBlbmRpbmdfc2tiICE9IE5VTEwpIHsKLQkJCXNrYiA9IHJ4X3JpbmctPnBlbmRpbmdfc2tiOwotCQkJcnhfcmluZy0+cGVuZGluZ19za2IgPSBOVUxMOwotCQkJaiA9IHJ4X3JpbmctPnBlbmRpbmdfc2tiX3BhZ2U7Ci0JCX0gZWxzZSB7Ci0JCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOwotCQkJcHJlZmV0Y2goc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsKLQkJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwotCQkJaWYgKGhsZW4pIHsKLQkJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJCQkgYWRhcHRlci0+cnhfcHNfaGRyX3NpemUgKwotCQkJCQkJICAgTkVUX0lQX0FMSUdOLAotCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQkJc2tiX3B1dChza2IsIGhsZW4pOwotCQkJfSBlbHNlIHsKLQkJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJCQkgYWRhcHRlci0+cnhfYnVmZmVyX2xlbiArCi0JCQkJCQkgICBORVRfSVBfQUxJR04sCi0JCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKLQkJCQlnb3RvIHNlbmRfdXA7Ci0JCQl9Ci0JCQlqID0gMDsKKwkJc2tiID0gYnVmZmVyX2luZm8tPnNrYjsKKwkJcHJlZmV0Y2goc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCWlmICghYWRhcHRlci0+cnhfcHNfaGRyX3NpemUpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgYnVmZmVyX2luZm8tPmRtYSwKKwkJCQkJIGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gKworCQkJCQkgICBORVRfSVBfQUxJR04sCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CisJCQlnb3RvIHNlbmRfdXA7CiAJCX0KIAotCQl3aGlsZSAobGVuZ3RoKSB7CisJCWlmICghc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykgeworCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAorCQkJCQkgYWRhcHRlci0+cnhfcHNfaGRyX3NpemUgKworCQkJCQkgICBORVRfSVBfQUxJR04sCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJc2tiX3B1dChza2IsIGhsZW4pOworCQl9CisKKwkJaWYgKGxlbmd0aCkgewogCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPnBhZ2VfZG1hLAotCQkJCVBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkgICAgICAgUEFHRV9TSVpFIC8gMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWJ1ZmZlcl9pbmZvLT5wYWdlX2RtYSA9IDA7Ci0JCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCBqLCBidWZmZXJfaW5mby0+cGFnZSwKLQkJCQkJCTAsIGxlbmd0aCk7Ci0JCQlidWZmZXJfaW5mby0+cGFnZSA9IE5VTEw7CisKKwkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKywKKwkJCQkJCWJ1ZmZlcl9pbmZvLT5wYWdlLAorCQkJCQkJYnVmZmVyX2luZm8tPnBhZ2Vfb2Zmc2V0LAorCQkJCQkJbGVuZ3RoKTsKKworCQkJaWYgKChhZGFwdGVyLT5yeF9idWZmZXJfbGVuID4gKFBBR0VfU0laRSAvIDIpKSB8fAorCQkJICAgIChwYWdlX2NvdW50KGJ1ZmZlcl9pbmZvLT5wYWdlKSAhPSAxKSkKKwkJCQlidWZmZXJfaW5mby0+cGFnZSA9IE5VTEw7CisJCQllbHNlCisJCQkJZ2V0X3BhZ2UoYnVmZmVyX2luZm8tPnBhZ2UpOwogCiAJCQlza2ItPmxlbiArPSBsZW5ndGg7CiAJCQlza2ItPmRhdGFfbGVuICs9IGxlbmd0aDsKKwogCQkJc2tiLT50cnVlc2l6ZSArPSBsZW5ndGg7Ci0JCQlyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IgPSAwOwotCQkJaWYgKHN0YXRlcnIgJiBFMTAwMF9SWERfU1RBVF9FT1ApCi0JCQkJYnJlYWs7Ci0KLQkJCWorKzsKLQkJCWNsZWFuZWRfY291bnQrKzsKLQkJCWkrKzsKLQkJCWlmIChpID09IHJ4X3JpbmctPmNvdW50KQotCQkJCWkgPSAwOwotCi0JCQlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKLQkJCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7Ci0JCQlzdGF0ZXJyID0gbGUzMl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIuc3RhdHVzX2Vycm9yKTsKLQkJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLmxlbmd0aCk7Ci0JCQlpZiAoIShzdGF0ZXJyICYgRTEwMDBfUlhEX1NUQVRfREQpKSB7Ci0JCQkJcnhfcmluZy0+cGVuZGluZ19za2IgPSBza2I7Ci0JCQkJcnhfcmluZy0+cGVuZGluZ19za2JfcGFnZSA9IGo7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9CiAJCX0KIHNlbmRfdXA6Ci0JCXBza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gNCk7CiAJCWkrKzsKIAkJaWYgKGkgPT0gcnhfcmluZy0+Y291bnQpCiAJCQlpID0gMDsKQEAgLTM1MzEsMTEgKzM5MzEsMTYgQEAKIAkJcHJlZmV0Y2gobmV4dF9yeGQpOwogCQluZXh0X2J1ZmZlciA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAorCQlpZiAoIShzdGF0ZXJyICYgRTEwMDBfUlhEX1NUQVRfRU9QKSkgeworCQkJYnVmZmVyX2luZm8tPnNrYiA9IHhjaGcoJm5leHRfYnVmZmVyLT5za2IsIHNrYik7CisJCQlidWZmZXJfaW5mby0+ZG1hID0geGNoZygmbmV4dF9idWZmZXItPmRtYSwgMCk7CisJCQlnb3RvIG5leHRfZGVzYzsKKwkJfQorCiAJCWlmIChzdGF0ZXJyICYgRTEwMDBfUlhERVhUX0VSUl9GUkFNRV9FUlJfTUFTSykgewogCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJCWdvdG8gbmV4dF9kZXNjOwogCQl9Ci0JCXJ4X3JpbmctPm5vX2l0cl9hZGp1c3QgfD0gKHN0YXRlcnIgJiBFMTAwMF9SWERfU1RBVF9EWU5JTlQpOwogCiAJCXRvdGFsX2J5dGVzICs9IHNrYi0+bGVuOwogCQl0b3RhbF9wYWNrZXRzKys7CkBAIC0zNTQ0LDcgKzM5NDksNyBAQAogCiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKLQkJaWdiX3JlY2VpdmVfc2tiKGFkYXB0ZXIsIHN0YXRlcnIsIHJ4X2Rlc2MtPndiLnVwcGVyLnZsYW4sIHNrYik7CisJCWlnYl9yZWNlaXZlX3NrYihyeF9yaW5nLCBzdGF0ZXJyLCByeF9kZXNjLCBza2IpOwogCiAJCW5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAKQEAgLTM1NTMsOCArMzk1OCw3IEBACiAKIAkJLyogcmV0dXJuIHNvbWUgYnVmZmVycyB0byBoYXJkd2FyZSwgb25lIGF0IGEgdGltZSBpcyB0b28gc2xvdyAqLwogCQlpZiAoY2xlYW5lZF9jb3VudCA+PSBJR0JfUlhfQlVGRkVSX1dSSVRFKSB7Ci0JCQlpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYoYWRhcHRlciwgcnhfcmluZywKLQkJCQkJCSBjbGVhbmVkX2NvdW50KTsKKwkJCWlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihyeF9yaW5nLCBjbGVhbmVkX2NvdW50KTsKIAkJCWNsZWFuZWRfY291bnQgPSAwOwogCQl9CiAKQEAgLTM1NjQsMTIgKzM5NjgsMTkgQEAKIAogCQlzdGF0ZXJyID0gbGUzMl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIuc3RhdHVzX2Vycm9yKTsKIAl9Ci1vdXQ6CisKIAlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKIAljbGVhbmVkX2NvdW50ID0gSUdCX0RFU0NfVU5VU0VEKHJ4X3JpbmcpOwogCisjaWZkZWYgQ09ORklHX0lHQl9MUk8KKwlpZiAocnhfcmluZy0+bHJvX3VzZWQpIHsKKwkJbHJvX2ZsdXNoX2FsbCgmcnhfcmluZy0+bHJvX21ncik7CisJCXJ4X3JpbmctPmxyb191c2VkID0gMDsKKwl9CisjZW5kaWYKKwogCWlmIChjbGVhbmVkX2NvdW50KQotCQlpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYoYWRhcHRlciwgcnhfcmluZywgY2xlYW5lZF9jb3VudCk7CisJCWlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihyeF9yaW5nLCBjbGVhbmVkX2NvdW50KTsKIAogCXJ4X3JpbmctPnRvdGFsX3BhY2tldHMgKz0gdG90YWxfcGFja2V0czsKIAlyeF9yaW5nLT50b3RhbF9ieXRlcyArPSB0b3RhbF9ieXRlczsKQEAgLTM1ODUsMTAgKzM5OTYsMTAgQEAKICAqIGlnYl9hbGxvY19yeF9idWZmZXJzX2FkdiAtIFJlcGxhY2UgdXNlZCByZWNlaXZlIGJ1ZmZlcnM7IHBhY2tldCBzcGxpdAogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KLXN0YXRpYyB2b2lkIGlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgICBzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcsCitzdGF0aWMgdm9pZCBpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYoc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nLAogCQkJCSAgICAgaW50IGNsZWFuZWRfY291bnQpCiB7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gcnhfcmluZy0+YWRhcHRlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAl1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYyAqcnhfZGVzYzsKQEAgLTM2MDIsMTYgKzQwMTMsMjIgQEAKIAl3aGlsZSAoY2xlYW5lZF9jb3VudC0tKSB7CiAJCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAKLQkJaWYgKGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplICYmICFidWZmZXJfaW5mby0+cGFnZSkgewotCQkJYnVmZmVyX2luZm8tPnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9BVE9NSUMpOworCQlpZiAoYWRhcHRlci0+cnhfcHNfaGRyX3NpemUgJiYgIWJ1ZmZlcl9pbmZvLT5wYWdlX2RtYSkgewogCQkJaWYgKCFidWZmZXJfaW5mby0+cGFnZSkgewotCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7Ci0JCQkJZ290byBub19idWZmZXJzOworCQkJCWJ1ZmZlcl9pbmZvLT5wYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKKwkJCQlpZiAoIWJ1ZmZlcl9pbmZvLT5wYWdlKSB7CisJCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CisJCQkJCWdvdG8gbm9fYnVmZmVyczsKKwkJCQl9CisJCQkJYnVmZmVyX2luZm8tPnBhZ2Vfb2Zmc2V0ID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJYnVmZmVyX2luZm8tPnBhZ2Vfb2Zmc2V0IF49IFBBR0VfU0laRSAvIDI7CiAJCQl9CiAJCQlidWZmZXJfaW5mby0+cGFnZV9kbWEgPQogCQkJCXBjaV9tYXBfcGFnZShwZGV2LAogCQkJCQkgICAgIGJ1ZmZlcl9pbmZvLT5wYWdlLAotCQkJCQkgICAgIDAsIFBBR0VfU0laRSwKKwkJCQkJICAgICBidWZmZXJfaW5mby0+cGFnZV9vZmZzZXQsCisJCQkJCSAgICAgUEFHRV9TSVpFIC8gMiwKIAkJCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9CiAKQEAgLTM3NDYsNyArNDE2Myw2IEBACiAKIAkJLyogZW5hYmxlIFZMQU4gcmVjZWl2ZSBmaWx0ZXJpbmcgKi8KIAkJcmN0bCA9IHJkMzIoRTEwMDBfUkNUTCk7Ci0JCXJjdGwgfD0gRTEwMDBfUkNUTF9WRkU7CiAJCXJjdGwgJj0gfkUxMDAwX1JDVExfQ0ZJRU47CiAJCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CiAJCWlnYl91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7CkBAIC0zNzU4LDEwICs0MTc0LDYgQEAKIAkJY3RybCAmPSB+RTEwMDBfQ1RSTF9WTUU7CiAJCXdyMzIoRTEwMDBfQ1RSTCwgY3RybCk7CiAKLQkJLyogZGlzYWJsZSBWTEFOIGZpbHRlcmluZyAqLwotCQlyY3RsID0gcmQzMihFMTAwMF9SQ1RMKTsKLQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9WRkU7Ci0JCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CiAJCWlmIChhZGFwdGVyLT5tbmdfdmxhbl9pZCAhPSAodTE2KUlHQl9NTkdfVkxBTl9OT05FKSB7CiAJCQlpZ2Jfdmxhbl9yeF9raWxsX3ZpZChuZXRkZXYsIGFkYXB0ZXItPm1uZ192bGFuX2lkKTsKIAkJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gSUdCX01OR19WTEFOX05PTkU7CkBAIC0zODc4LDcgKzQyOTAsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBjdHJsLCBjdHJsX2V4dCwgcmN0bCwgc3RhdHVzOworCXUzMiBjdHJsLCByY3RsLCBzdGF0dXM7CiAJdTMyIHd1ZmMgPSBhZGFwdGVyLT53b2w7CiAjaWZkZWYgQ09ORklHX1BNCiAJaW50IHJldHZhbCA9IDA7CkBAIC0zODg2LDExICs0Mjk4LDEyIEBACiAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCVdBUk5fT04odGVzdF9iaXQoX19JR0JfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKTsKLQkJaWdiX2Rvd24oYWRhcHRlcik7Ci0JCWlnYl9mcmVlX2lycShhZGFwdGVyKTsKLQl9CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJaWdiX2Nsb3NlKG5ldGRldik7CisKKwlpZ2JfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisKKwlpZ2JfZnJlZV9xdWV1ZXMoYWRhcHRlcik7CiAKICNpZmRlZiBDT05GSUdfUE0KIAlyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKQEAgLTM5MjEsMzMgKzQzMzQsMjQgQEAKIAkJY3RybCB8PSBFMTAwMF9DVFJMX0FEVkQzV1VDOwogCQl3cjMyKEUxMDAwX0NUUkwsIGN0cmwpOwogCi0JCWlmIChhZGFwdGVyLT5ody5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8Ci0JCSAgIGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09Ci0JCQkJCWUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7Ci0JCQkvKiBrZWVwIHRoZSBsYXNlciBydW5uaW5nIGluIEQzICovCi0JCQljdHJsX2V4dCA9IHJkMzIoRTEwMDBfQ1RSTF9FWFQpOwotCQkJY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfU0RQN19EQVRBOwotCQkJd3IzMihFMTAwMF9DVFJMX0VYVCwgY3RybF9leHQpOwotCQl9Ci0KIAkJLyogQWxsb3cgdGltZSBmb3IgcGVuZGluZyBtYXN0ZXIgcmVxdWVzdHMgdG8gcnVuICovCiAJCWlnYl9kaXNhYmxlX3BjaWVfbWFzdGVyKCZhZGFwdGVyLT5odyk7CiAKIAkJd3IzMihFMTAwMF9XVUMsIEUxMDAwX1dVQ19QTUVfRU4pOwogCQl3cjMyKEUxMDAwX1dVRkMsIHd1ZmMpOwotCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAxKTsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDEpOwogCX0gZWxzZSB7CiAJCXdyMzIoRTEwMDBfV1VDLCAwKTsKIAkJd3IzMihFMTAwMF9XVUZDLCAwKTsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAl9CiAKLQkvKiBtYWtlIHN1cmUgYWRhcHRlciBpc24ndCBhc2xlZXAgaWYgbWFuYWdlYWJpbGl0eSBpcyBlbmFibGVkICovCi0JaWYgKGFkYXB0ZXItPmVuX21uZ19wdCkgeworCS8qIG1ha2Ugc3VyZSBhZGFwdGVyIGlzbid0IGFzbGVlcCBpZiBtYW5hZ2VhYmlsaXR5L3dvbCBpcyBlbmFibGVkICovCisJaWYgKHd1ZmMgfHwgYWRhcHRlci0+ZW5fbW5nX3B0KSB7CiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOwogCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJfSBlbHNlIHsKKwkJaWdiX3NodXRkb3duX2ZpYmVyX3NlcmRlc19saW5rXzgyNTc1KGh3KTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAl9CiAKIAkvKiBSZWxlYXNlIGNvbnRyb2wgb2YgaC93IHRvIGYvdy4gIElmIGYvdyBpcyBBTVQgZW5hYmxlZCwgdGhpcwpAQCAtMzk3MSw3ICs0Mzc1LDExIEBACiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisKKwlpZiAoYWRhcHRlci0+bmVlZF9pb3BvcnQpCisJCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWVsc2UKKwkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJImlnYjogQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuIik7CkBAIC0zOTgyLDEwICs0MzkwLDExIEBACiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQllcnIgPSBpZ2JfcmVxdWVzdF9pcnEoYWRhcHRlcik7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOworCWlnYl9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisKKwlpZiAoaWdiX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBxdWV1ZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBlMTAwMF9wb3dlcl91cF9waHkoYWRhcHRlcik7ICovCkBAIC0zOTkzLDEwICs0NDAyLDExIEBACiAJaWdiX3Jlc2V0KGFkYXB0ZXIpOwogCXdyMzIoRTEwMDBfV1VTLCB+MCk7CiAKLQlpZ2JfaW5pdF9tYW5hZ2VhYmlsaXR5KGFkYXB0ZXIpOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKLQkJaWdiX3VwKGFkYXB0ZXIpOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJZXJyID0gaWdiX29wZW4obmV0ZGV2KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQogCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCkBAIC00MDI2LDE0ICs0NDM2LDE3IEBACiAJaW50IHdvcmtfZG9uZSA9IDA7CiAKIAlpZ2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfSU5fTkVUUE9MTDsKKwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWlnYl9jbGVhbl90eF9pcnEoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZ2JfY2xlYW5fdHhfaXJxKCZhZGFwdGVyLT50eF9yaW5nW2ldKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWlnYl9jbGVhbl9yeF9pcnFfYWR2KGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nW2ldLAorCQlpZ2JfY2xlYW5fcnhfaXJxX2FkdigmYWRhcHRlci0+cnhfcmluZ1tpXSwKIAkJCQkgICAgICZ3b3JrX2RvbmUsCiAJCQkJICAgICBhZGFwdGVyLT5yeF9yaW5nW2ldLm5hcGkud2VpZ2h0KTsKIAorCWFkYXB0ZXItPmZsYWdzICY9IH5JR0JfRkxBR19JTl9ORVRQT0xMOwogCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogfQogI2VuZGlmIC8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCkBAIC00MDc0LDggKzQ0ODcsMTMgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgZXJyOwogCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJaWYgKGFkYXB0ZXItPm5lZWRfaW9wb3J0KQorCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwllbHNlCisJCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKKwlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcGcuYyBiL2RyaXZlcnMvbmV0L2lwZy5jCmluZGV4IDJjMDNmNGUuLjczNzNkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lwZy5jCisrKyBiL2RyaXZlcnMvbmV0L2lwZy5jCkBAIC00Miw3ICs0Miw2IEBACiAjZGVmaW5lIGlwZ19yMTYocmVnKQkJaW9yZWFkMTYoaW9hZGRyICsgKHJlZykpCiAjZGVmaW5lIGlwZ19yOChyZWcpCQlpb3JlYWQ4KGlvYWRkciArIChyZWcpKQogCi0jZGVmaW5lIEpVTUJPX0ZSQU1FXzRrX09OTFkKIGVudW0gewogCW5ldGRldl9pb19zaXplID0gMTI4CiB9OwpAQCAtNTUsNiArNTQsMTQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyoKKyAqIERlZmF1bHRzCisgKi8KKyNkZWZpbmUgSVBHX01BWF9SWEZSQU1FX1NJWkUJMHgwNjAwCisjZGVmaW5lIElQR19SWEZSQUdfU0laRQkJMHgwNjAwCisjZGVmaW5lIElQR19SWFNVUFBPUlRfU0laRQkweDA2MDAKKyNkZWZpbmUgSVBHX0lTX0pVTUJPCQlmYWxzZQorCisvKgogICogVmFyaWFibGUgcmVjb3JkIC0tIGluZGV4IGJ5IGxlYWRpbmcgcmV2aXNpb24vbGVuZ3RoCiAgKiBSZXZpc2lvbi9MZW5ndGgoPU4qNCksIEFkZHJlc3MxLCBEYXRhMSwgQWRkcmVzczIsIERhdGEyLC4uLixBZGRyZXNzTixEYXRhTgogICovCkBAIC02MzEsNiArNjM4LDcgQEAKIAogc3RhdGljIGludCBpcGdfaW9fY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gaXBnX2lvYWRkcihkZXYpOwogCXUzMiBvcmlnbWFjY3RybDsKIAl1MzIgcmVzdG9yZW1hY2N0cmw7CkBAIC02NzAsNyArNjc4LDcgQEAKIAkvKiBTZXQgUkVDRUlWRU1PREUgcmVnaXN0ZXIuICovCiAJaXBnX25pY19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKIAotCWlwZ193MTYoSVBHX01BWF9SWEZSQU1FX1NJWkUsIE1BWF9GUkFNRV9TSVpFKTsKKwlpcGdfdzE2KHNwLT5tYXhfcnhmcmFtZV9zaXplLCBNQVhfRlJBTUVfU0laRSk7CiAKIAlpcGdfdzgoSVBHX1JYRE1BUE9MTFBFUklPRF9WQUxVRSwgICBSWF9ETUFfUE9MTF9QRVJJT0QpOwogCWlwZ193OChJUEdfUlhETUFVUkdFTlRUSFJFU0hfVkFMVUUsIFJYX0RNQV9VUkdFTlRfVEhSRVNIKTsKQEAgLTczMCw3ICs3MzgsNyBAQAogCiAJSVBHX0RFQlVHX01TRygiX2dldF9yeGJ1ZmZcbiIpOwogCi0Jc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIElQR19SWFNVUFBPUlRfU0laRSArIE5FVF9JUF9BTElHTik7CisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHNwLT5yeHN1cHBvcnRfc2l6ZSArIE5FVF9JUF9BTElHTik7CiAJaWYgKCFza2IpIHsKIAkJc3AtPnJ4X2J1ZmZbZW50cnldID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03NTEsNyArNzU5LDcgQEAKIAkJc3AtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKSk7CiAKIAkvKiBTZXQgdGhlIFJGRCBmcmFnbWVudCBsZW5ndGguICovCi0JcnhmcmFnc2l6ZSA9IElQR19SWEZSQUdfU0laRTsKKwlyeGZyYWdzaXplID0gc3AtPnJ4ZnJhZ19zaXplOwogCXJ4ZmQtPmZyYWdfaW5mbyB8PSBjcHVfdG9fbGU2NCgocnhmcmFnc2l6ZSA8PCA0OCkgJiBJUEdfUkZJX0ZSQUdMRU4pOwogCiAJcmV0dXJuIDA7CkBAIC0xMDc2LDggKzEwODQsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgSlVNQk9fRlJBTUUKLQogLyogdXNlIGp1bWJvaW5kZXggYW5kIGp1bWJvc2l6ZSB0byBjb250cm9sIGp1bWJvIGZyYW1lIHN0YXR1cwogICogaW5pdGlhbCBzdGF0dXMgaXMganVtYm9pbmRleD0tMSBhbmQganVtYm9zaXplPTAKICAqIDEuIGp1bWJvaW5kZXggPSAtMSBhbmQganVtYm9zaXplPTAgOiBwcmV2aW91cyBqdW1ibyBmcmFtZSBoYXMgYmVlbiBkb25lLgpAQCAtMTA5Nyw3ICsxMTAzLDcgQEAKIAlGUkFNRV9XSVRIX1NUQVJUX1dJVEhfRU5EID0gMTEKIH07CiAKLWlubGluZSB2b2lkIGlwZ19uaWNfcnhfZnJlZV9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGlwZ19uaWNfcnhfZnJlZV9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGVudHJ5ID0gc3AtPnJ4X2N1cnJlbnQgJSBJUEdfUkZETElTVF9MRU5HVEg7CkBAIC0xMTEzLDcgKzExMTksNyBAQAogCX0KIH0KIAotaW5saW5lIGludCBpcGdfbmljX3J4X2NoZWNrX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXBnX25pY19yeF9jaGVja19mcmFtZV90eXBlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcGdfcnggKnJ4ZmQgPSBzcC0+cnhkICsgKHNwLT5yeF9jdXJyZW50ICUgSVBHX1JGRExJU1RfTEVOR1RIKTsKQEAgLTExMjYsNyArMTEzMiw3IEBACiAJcmV0dXJuIHR5cGU7CiB9CiAKLWlubGluZSBpbnQgaXBnX25pY19yeF9jaGVja19lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBpcGdfbmljX3J4X2NoZWNrX2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBlbnRyeSA9IHNwLT5yeF9jdXJyZW50ICUgSVBHX1JGRExJU1RfTEVOR1RIOwpAQCAtMTIwOSw4ICsxMjE1LDggQEAKIAogCS8qIGFjY2VwdCB0aGlzIGZyYW1lIGFuZCBzZW5kIHRvIHVwcGVyIGxheWVyICovCiAJZnJhbWVsZW4gPSBsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEZSQU1FTEVOOwotCWlmIChmcmFtZWxlbiA+IElQR19SWEZSQUdfU0laRSkKLQkJZnJhbWVsZW4gPSBJUEdfUlhGUkFHX1NJWkU7CisJaWYgKGZyYW1lbGVuID4gc3AtPnJ4ZnJhZ19zaXplKQorCQlmcmFtZWxlbiA9IHNwLT5yeGZyYWdfc2l6ZTsKIAogCXNrYl9wdXQoc2tiLCBmcmFtZWxlbik7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKQEAgLTEyNDMsMTAgKzEyNDksMTAgQEAKIAlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGxlNjRfdG9fY3B1KHJ4ZmQtPmZyYWdfaW5mbyAmIH5JUEdfUkZJX0ZSQUdMRU4pLAogCQkJIHNwLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKLQlza2JfcHV0KHNrYiwgSVBHX1JYRlJBR19TSVpFKTsKKwlza2JfcHV0KHNrYiwgc3AtPnJ4ZnJhZ19zaXplKTsKIAogCWp1bWJvLT5mb3VuZF9zdGFydCA9IDE7Ci0JanVtYm8tPmN1cnJlbnRfc2l6ZSA9IElQR19SWEZSQUdfU0laRTsKKwlqdW1iby0+Y3VycmVudF9zaXplID0gc3AtPnJ4ZnJhZ19zaXplOwogCWp1bWJvLT5za2IgPSBza2I7CiAKIAlzcC0+cnhfYnVmZltlbnRyeV0gPSBOVUxMOwpAQCAtMTI3MiwxMSArMTI3OCw3IEBACiAJCQlmcmFtZWxlbiA9IGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX1JYRlJBTUVMRU47CiAKIAkJCWVuZGZyYW1lbGVuID0gZnJhbWVsZW4gLSBqdW1iby0+Y3VycmVudF9zaXplOwotCQkJLyoKLQkJCWlmIChmcmFtZWxlbiA+IElQR19SWEZSQUdfU0laRSkKLQkJCQlmcmFtZWxlbj1JUEdfUlhGUkFHX1NJWkU7Ci0JCQkgKi8KLQkJCWlmIChmcmFtZWxlbiA+IElQR19SWFNVUFBPUlRfU0laRSkKKwkJCWlmIChmcmFtZWxlbiA+IHNwLT5yeHN1cHBvcnRfc2l6ZSkKIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShqdW1iby0+c2tiKTsKIAkJCWVsc2UgewogCQkJCW1lbWNweShza2JfcHV0KGp1bWJvLT5za2IsIGVuZGZyYW1lbGVuKSwKQEAgLTEzMTYsMTEgKzEzMTgsMTEgQEAKIAogCQlpZiAoc2tiKSB7CiAJCQlpZiAoanVtYm8tPmZvdW5kX3N0YXJ0KSB7Ci0JCQkJanVtYm8tPmN1cnJlbnRfc2l6ZSArPSBJUEdfUlhGUkFHX1NJWkU7Ci0JCQkJaWYgKGp1bWJvLT5jdXJyZW50X3NpemUgPD0gSVBHX1JYU1VQUE9SVF9TSVpFKSB7CisJCQkJanVtYm8tPmN1cnJlbnRfc2l6ZSArPSBzcC0+cnhmcmFnX3NpemU7CisJCQkJaWYgKGp1bWJvLT5jdXJyZW50X3NpemUgPD0gc3AtPnJ4c3VwcG9ydF9zaXplKSB7CiAJCQkJCW1lbWNweShza2JfcHV0KGp1bWJvLT5za2IsCi0JCQkJCQkgICAgICAgSVBHX1JYRlJBR19TSVpFKSwKLQkJCQkJICAgICAgIHNrYi0+ZGF0YSwgSVBHX1JYRlJBR19TSVpFKTsKKwkJCQkJCSAgICAgICBzcC0+cnhmcmFnX3NpemUpLAorCQkJCQkgICAgICAgc2tiLT5kYXRhLCBzcC0+cnhmcmFnX3NpemUpOwogCQkJCX0KIAkJCX0KIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CkBAIC0xMzM0LDcgKzEzMzYsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBpcGdfbmljX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlwZ19uaWNfcnhfanVtYm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGN1cnIgPSBzcC0+cnhfY3VycmVudDsKQEAgLTEzODIsNyArMTM4NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbHNlCiBzdGF0aWMgaW50IGlwZ19uaWNfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBUcmFuc2ZlciByZWNlaXZlZCBFdGhlcm5ldCBmcmFtZXMgdG8gaGlnaGVyIG5ldHdvcmsgbGF5ZXJzLiAqLwpAQCAtMTQxMywxMSArMTQxNCwxMSBAQAogCQkvKiBDaGVjayBmb3IganVtYm8gZnJhbWUgYXJyaXZhbCB3aXRoIHRvbyBzbWFsbAogCQkgKiBSWEZSQUdfU0laRS4KIAkJICovCi0JCWlmIChmcmFtZWxlbiA+IElQR19SWEZSQUdfU0laRSkgeworCQlpZiAoZnJhbWVsZW4gPiBzcC0+cnhmcmFnX3NpemUpIHsKIAkJCUlQR19ERUJVR19NU0cKIAkJCSAgICAoIlJGUyBGcmFtZUxlbiA+IGFsbG9jYXRlZCBmcmFnbWVudCBzaXplLlxuIik7CiAKLQkJCWZyYW1lbGVuID0gSVBHX1JYRlJBR19TSVpFOworCQkJZnJhbWVsZW4gPSBzcC0+cnhmcmFnX3NpemU7CiAJCX0KIAogCQlpZiAoKElQR19EUk9QX09OX1JYX0VUSF9FUlJPUlMgJiYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJgpAQCAtMTU1Niw3ICsxNTU3LDYgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGlwZ19yZXNldF9hZnRlcl9ob3N0X2Vycm9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTE1OTIsOSArMTU5Miw5IEBACiAKIAlJUEdfREVCVUdfTVNHKCJfaW50ZXJydXB0X2hhbmRsZXJcbiIpOwogCi0jaWZkZWYgSlVNQk9fRlJBTUUKLQlpcGdfbmljX3J4cmVzdG9yZShkZXYpOwotI2VuZGlmCisJaWYgKHNwLT5pc19qdW1ibykKKwkJaXBnX25pY19yeHJlc3RvcmUoZGV2KTsKKwogCXNwaW5fbG9jaygmc3AtPmxvY2spOwogCiAJLyogR2V0IGludGVycnVwdCBzb3VyY2UgaW5mb3JtYXRpb24sIGFuZCBhY2tub3dsZWRnZQpAQCAtMTY1MCw3ICsxNjUwLDEwIEBACiAJCQlzcC0+UkZETGlzdENoZWNrZWRDb3VudCsrOwogI2VuZGlmCiAKLQkJaXBnX25pY19yeChkZXYpOworCQlpZiAoc3AtPmlzX2p1bWJvKQorCQkJaXBnX25pY19yeF9qdW1ibyhkZXYpOworCQllbHNlCisJCQlpcGdfbmljX3J4KGRldik7CiAJfQogCiAJLyogSWYgVHhETUFDb21wbGV0ZSBpbnRlcnJ1cHQsIGZyZWUgdXNlZCBURkRzLiAqLwpAQCAtMTc0OSw3ICsxNzUyLDcgQEAKIAogCUlQR19ERUJVR19NU0coIl9uaWNfb3BlblxuIik7CiAKLQlzcC0+cnhfYnVmX3N6ID0gSVBHX1JYU1VQUE9SVF9TSVpFOworCXNwLT5yeF9idWZfc3ogPSBzcC0+cnhzdXBwb3J0X3NpemU7CiAKIAkvKiBDaGVjayBmb3IgaW50ZXJydXB0IGxpbmUgY29uZmxpY3RzLCBhbmQgcmVxdWVzdCBpbnRlcnJ1cHQKIAkgKiBsaW5lIGZvciBJUEcuCkBAIC0xODA0LDEzICsxODA3LDEwIEBACiAJaWYgKGlwZ19jb25maWdfYXV0b25lZyhkZXYpIDwgMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEF1dG8tbmVnb3RpYXRpb24gZXJyb3IuXG4iLCBkZXYtPm5hbWUpOwogCi0jaWZkZWYgSlVNQk9fRlJBTUUKIAkvKiBpbml0aWFsaXplIEpVTUJPIEZyYW1lIGNvbnRyb2wgdmFyaWFibGUgKi8KIAlzcC0+anVtYm8uZm91bmRfc3RhcnQgPSAwOwogCXNwLT5qdW1iby5jdXJyZW50X3NpemUgPSAwOwogCXNwLT5qdW1iby5za2IgPSBOVUxMOwotCWRldi0+bXR1ID0gSVBHX1RYRlJBR19TSVpFOwotI2VuZGlmCiAKIAkvKiBFbmFibGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgb3BlcmF0aW9uIG9mIHRoZSBJUEcuICovCiAJaXBnX3czMigoaXBnX3IzMihNQUNfQ1RSTCkgfCBJUEdfTUNfUlhfRU5BQkxFIHwgSVBHX01DX1RYX0VOQUJMRSkgJgpAQCAtMjExOSw2ICsyMTE5LDkgQEAKIAogc3RhdGljIGludCBpcGdfbmljX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CisJc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnI7CisKIAkvKiBGdW5jdGlvbiB0byBhY2NvbW9kYXRlIGNoYW5nZXMgdG8gTWF4aW11bSBUcmFuc2ZlciBVbml0CiAJICogKG9yIE1UVSkgb2YgSVBHIE5JQy4gQ2Fubm90IHVzZSBkZWZhdWx0IGZ1bmN0aW9uIHNpbmNlCiAJICogdGhlIGRlZmF1bHQgd2lsbCBub3QgYWxsb3cgZm9yIE1UVSA+IDE1MDAgYnl0ZXMuCkBAIC0yMTI2LDE2ICsyMTI5LDMzIEBACiAKIAlJUEdfREVCVUdfTVNHKCJfbmljX2NoYW5nZV9tdHVcbiIpOwogCi0JLyogQ2hlY2sgdGhhdCB0aGUgbmV3IE1UVSB2YWx1ZSBpcyBiZXR3ZWVuIDY4ICgxNCBieXRlIGhlYWRlciwgNDYKLQkgKiBieXRlIHBheWxvYWQsIDQgYnl0ZSBGQ1MpIGFuZCBJUEdfTUFYX1JYRlJBTUVfU0laRSwgd2hpY2gKLQkgKiBjb3JyZXNwb25kcyB0byB0aGUgTUFYRlJBTUVTSVpFIHJlZ2lzdGVyIGluIHRoZSBJUEcuCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBuZXcgTVRVIHZhbHVlIGlzIGJldHdlZW4gNjggKDE0IGJ5dGUgaGVhZGVyLCA0NiBieXRlCisJICogcGF5bG9hZCwgNCBieXRlIEZDUykgYW5kIDEwIEtCLCB3aGljaCBpcyB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgTVRVLgogCSAqLwotCWlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IElQR19NQVhfUlhGUkFNRV9TSVpFKSkKKwlpZiAobmV3X210dSA8IDY4IHx8IG5ld19tdHUgPiAxMDI0MCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwllcnIgPSBpcGdfbmljX3N0b3AoZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJZGV2LT5tdHUgPSBuZXdfbXR1OwogCi0JcmV0dXJuIDA7CisJc3AtPm1heF9yeGZyYW1lX3NpemUgPSBuZXdfbXR1OworCisJc3AtPnJ4ZnJhZ19zaXplID0gbmV3X210dTsKKwlpZiAoc3AtPnJ4ZnJhZ19zaXplID4gNDA4OCkKKwkJc3AtPnJ4ZnJhZ19zaXplID0gNDA4ODsKKworCXNwLT5yeHN1cHBvcnRfc2l6ZSA9IHNwLT5tYXhfcnhmcmFtZV9zaXplOworCisJaWYgKG5ld19tdHUgPiAweDA2MDApCisJCXNwLT5pc19qdW1ibyA9IHRydWU7CisJZWxzZQorCQlzcC0+aXNfanVtYm8gPSBmYWxzZTsKKworCXJldHVybiBpcGdfbmljX29wZW4oZGV2KTsKIH0KIAogc3RhdGljIGludCBpcGdfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQpAQCAtMjI0MCw2ICsyMjYwLDExIEBACiAJc3Bpbl9sb2NrX2luaXQoJnNwLT5sb2NrKTsKIAltdXRleF9pbml0KCZzcC0+bWlpX211dGV4KTsKIAorCXNwLT5pc19qdW1ibyA9IElQR19JU19KVU1CTzsKKwlzcC0+cnhmcmFnX3NpemUgPSBJUEdfUlhGUkFHX1NJWkU7CisJc3AtPnJ4c3VwcG9ydF9zaXplID0gSVBHX1JYU1VQUE9SVF9TSVpFOworCXNwLT5tYXhfcnhmcmFtZV9zaXplID0gSVBHX01BWF9SWEZSQU1FX1NJWkU7CisKIAkvKiBEZWNsYXJlIElQRyBOSUMgZnVuY3Rpb25zIGZvciBFdGhlcm5ldCBkZXZpY2UgbWV0aG9kcy4KIAkgKi8KIAlkZXYtPm9wZW4gPSAmaXBnX25pY19vcGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXBnLmggYi9kcml2ZXJzL25ldC9pcGcuaAppbmRleCBjZGE1Mzg4Li5lMGU3MThhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXBnLmgKKysrIGIvZHJpdmVycy9uZXQvaXBnLmgKQEAgLTUzNiw4MyArNTM2LDYgQEAKICAqLwogI2RlZmluZQkJSVBHX0ZSQU1FU0JFVFdFRU5UWERNQUNPTVBMRVRFUyAweDEKIAotI2lmZGVmIEpVTUJPX0ZSQU1FCi0KLSMgaWZkZWYgSlVNQk9fRlJBTUVfU0laRV8ySwotIyBkZWZpbmUgSlVNQk9fRlJBTUVfU0laRSAyMDQ4Ci0jIGRlZmluZSBfX0lQR19SWEZSQUdfU0laRSAyMDQ4Ci0jIGVsc2UKLSMgIGlmZGVmIEpVTUJPX0ZSQU1FX1NJWkVfM0sKLSMgIGRlZmluZSBKVU1CT19GUkFNRV9TSVpFIDMwNzIKLSMgIGRlZmluZSBfX0lQR19SWEZSQUdfU0laRSAzMDcyCi0jICBlbHNlCi0jICAgaWZkZWYgSlVNQk9fRlJBTUVfU0laRV80SwotIyAgIGRlZmluZSBKVU1CT19GUkFNRV9TSVpFIDQwOTYKLSMgICBkZWZpbmUgX19JUEdfUlhGUkFHX1NJWkUgNDA4OAotIyAgIGVsc2UKLSMgICAgaWZkZWYgSlVNQk9fRlJBTUVfU0laRV81SwotIyAgICBkZWZpbmUgSlVNQk9fRlJBTUVfU0laRSA1MTIwCi0jICAgIGRlZmluZSBfX0lQR19SWEZSQUdfU0laRSA0MDg4Ci0jICAgIGVsc2UKLSMgICAgIGlmZGVmIEpVTUJPX0ZSQU1FX1NJWkVfNksKLSMgICAgIGRlZmluZSBKVU1CT19GUkFNRV9TSVpFIDYxNDQKLSMgICAgIGRlZmluZSBfX0lQR19SWEZSQUdfU0laRSA0MDg4Ci0jICAgICBlbHNlCi0jICAgICAgaWZkZWYgSlVNQk9fRlJBTUVfU0laRV83SwotIyAgICAgIGRlZmluZSBKVU1CT19GUkFNRV9TSVpFIDcxNjgKLSMgICAgICBkZWZpbmUgX19JUEdfUlhGUkFHX1NJWkUgNDA4OAotIyAgICAgIGVsc2UKLSMgICAgICAgaWZkZWYgSlVNQk9fRlJBTUVfU0laRV84SwotIyAgICAgICBkZWZpbmUgSlVNQk9fRlJBTUVfU0laRSA4MTkyCi0jICAgICAgIGRlZmluZSBfX0lQR19SWEZSQUdfU0laRSA0MDg4Ci0jICAgICAgIGVsc2UKLSMgICAgICAgIGlmZGVmIEpVTUJPX0ZSQU1FX1NJWkVfOUsKLSMgICAgICAgIGRlZmluZSBKVU1CT19GUkFNRV9TSVpFIDkyMTYKLSMgICAgICAgIGRlZmluZSBfX0lQR19SWEZSQUdfU0laRSA0MDg4Ci0jICAgICAgICBlbHNlCi0jICAgICAgICAgaWZkZWYgSlVNQk9fRlJBTUVfU0laRV8xMEsKLSMgICAgICAgICBkZWZpbmUgSlVNQk9fRlJBTUVfU0laRSAxMDI0MAotIyAgICAgICAgIGRlZmluZSBfX0lQR19SWEZSQUdfU0laRSA0MDg4Ci0jICAgICAgICAgZWxzZQotIyAgICAgICAgIGRlZmluZSBKVU1CT19GUkFNRV9TSVpFIDQwOTYKLSMgICAgICAgICBlbmRpZgotIyAgICAgICAgZW5kaWYKLSMgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZgotCi0vKiBTaXplIG9mIGFsbG9jYXRlZCByZWNlaXZlZCBidWZmZXJzLiBOb21pbmFsbHkgMHgwNjAwLgotICogRGVmaW5lIGxhcmdlciBpZiBleHBlY3RpbmcganVtYm8gZnJhbWVzLgotICovCi0jaWZkZWYgSlVNQk9fRlJBTUUKLS8qIElQR19UWEZSQUdfU0laRSBtdXN0IDw9IDB4MmIwMCwgb3IgVFggd2lsbCBjcmFzaCAqLwotI2RlZmluZQkJSVBHX1RYRlJBR19TSVpFCQlKVU1CT19GUkFNRV9TSVpFCi0jZW5kaWYKLQotLyogU2l6ZSBvZiBhbGxvY2F0ZWQgcmVjZWl2ZWQgYnVmZmVycy4gTm9taW5hbGx5IDB4MDYwMC4KLSAqIERlZmluZSBsYXJnZXIgaWYgZXhwZWN0aW5nIGp1bWJvIGZyYW1lcy4KLSAqLwotI2lmZGVmIEpVTUJPX0ZSQU1FCi0vKiA0MDg4ID0gNDA5NiAtIDggKi8KLSNkZWZpbmUJCUlQR19SWEZSQUdfU0laRQkJX19JUEdfUlhGUkFHX1NJWkUKLSNkZWZpbmUgICAgIElQR19SWFNVUFBPUlRfU0laRSAgIElQR19NQVhfUlhGUkFNRV9TSVpFCi0jZWxzZQotI2RlZmluZQkJSVBHX1JYRlJBR19TSVpFCQkweDA2MDAKLSNkZWZpbmUgICAgIElQR19SWFNVUFBPUlRfU0laRSAgIElQR19SWEZSQUdfU0laRQotI2VuZGlmCi0KLS8qIElQR19NQVhfUlhGUkFNRV9TSVpFIDw9IElQR19SWEZSQUdfU0laRSAqLwotI2lmZGVmIEpVTUJPX0ZSQU1FCi0jZGVmaW5lCQlJUEdfTUFYX1JYRlJBTUVfU0laRQkJSlVNQk9fRlJBTUVfU0laRQotI2Vsc2UKLSNkZWZpbmUJCUlQR19NQVhfUlhGUkFNRV9TSVpFCQkweDA2MDAKLSNlbmRpZgotCiAjZGVmaW5lCQlJUEdfUkZETElTVF9MRU5HVEgJCTB4MTAwCiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIFJGRHMgdG8gcHJvY2VzcyBwZXIgaW50ZXJydXB0LgpAQCAtNzg2LDkgKzcwOSwxMSBAQAogCXVuc2lnbmVkIGludCB0eF9kaXJ0eTsKIAl1bnNpZ25lZCBpbnQgcnhfY3VycmVudDsKIAl1bnNpZ25lZCBpbnQgcnhfZGlydHk7Ci0jaWZkZWYgSlVNQk9fRlJBTUUKKwlib29sIGlzX2p1bWJvOwogCXN0cnVjdCBpcGdfanVtYm8ganVtYm87Ci0jZW5kaWYKKwl1bnNpZ25lZCBsb25nIHJ4ZnJhZ19zaXplOworCXVuc2lnbmVkIGxvbmcgcnhzdXBwb3J0X3NpemU7CisJdW5zaWduZWQgbG9uZyBtYXhfcnhmcmFtZV9zaXplOwogCXVuc2lnbmVkIGludCByeF9idWZfc3o7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuaCBiL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuaAppbmRleCAwNzg3NjU3Li5lZDM1ZDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5oCkBAIC0yMTksOCArMjE5LDYgQEAKIAlpbnQgaW5kZXg7ICAgICAgICAgICAgICAgICAvKiBJbnN0YW5jZSBpbmRleCAqLwogCQogCXVuc2lnbmVkIGNoYXIgZmlmb19vcHRpX2J1ZjsKLQotICAgICAgICBzdHJ1Y3QgcG1fZGV2ICpkZXY7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX2JhbmsoaW50IGlvYmFzZSwgaW50IGJhbmspCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2F1MTAwMF9pcmNjLmggYi9kcml2ZXJzL25ldC9pcmRhL2F1MTAwMF9pcmNjLmgKaW5kZXggN2EzMWQ0NjUuLmI0NzYzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYXUxMDAwX2lyY2MuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL2F1MTAwMF9pcmNjLmgKQEAgLTEyMiw2ICsxMjIsNSBAQAogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCiAJc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgICAgLyogRm9yIHNlcmlhbGl6aW5nIG9wZXJhdGlvbnMgKi8KLSAgICAgICAgc3RydWN0IHBtX2RldiAqZGV2OwogfTsKICNlbmRpZiAvKiBBVTEwMDBfSVJDQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKaW5kZXggMTI1N2UxYS4uMzRhZDE4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYwpAQCAtNDksMTAgKzQ5LDYgQEAKIC8qIExvb2sgYXQgdG9zaG9ib2UuaCAoY3VycmVudGx5IGluIGluY2x1ZGUvbmV0L2lyZGEpIGZvciBkZXRhaWxzIG9mICovCiAvKiBXaGVyZSB0byBnZXQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgY2hpcCAgICAgICAgICovCiAKLQotc3RhdGljIGNoYXIgKnJjc2lkID0KLSAgIiRJZDogZG9uYXVib2UuYyBWMi4xOCB2ZW4gamFuIDEwIDAzOjE0OjE2IDIwMDMkIjsKLQogLyogU2VlIGJlbG93IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsb2dpYyBpbiB0aGlzIGRyaXZlciAqLwogCiAvKiBVc2VyIHNlcnZpY2FibGUgcGFydHMgKi8KQEAgLTE2NzcsNyArMTY3Myw3IEBACiAKICAgcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsc2VsZik7CiAKLSAgcHJpbnRrIChLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogVXNpbmcgbXVsdGlwbGUgdGFza3MsIHZlcnNpb24gJXNcbiIsIHJjc2lkKTsKKyAgcHJpbnRrIChLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogVXNpbmcgbXVsdGlwbGUgdGFza3NcbiIpOwogCiAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYwppbmRleCBlNmY0MGI3Li45ZTMzMTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHktc2lyLmMKQEAgLTUzMyw3ICs1MzMsNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjIGlyZGFfbGRpc2MgPSB7CitzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgaXJkYV9sZGlzYyA9IHsKIAkubWFnaWMJCT0gVFRZX0xESVNDX01BR0lDLAogIAkubmFtZQkJPSAiaXJkYSIsCiAJLmZsYWdzCQk9IDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCmluZGV4IGNmZTAxOTQuLjc4ZGM4ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCkBAIC0xLDUgKzEsNCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogJElkOiBzbXNjLWlyY2MyLmMsdiAxLjE5LjIuNSAyMDAyLzEwLzI3IDExOjM0OjI2IGRpcCBFeHAgJAogICoKICAqIERlc2NyaXB0aW9uOiAgIERyaXZlciBmb3IgdGhlIFNNQyBJbmZyYXJlZCBDb21tdW5pY2F0aW9ucyBDb250cm9sbGVyCiAgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuaCBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5oCmluZGV4IDBjMzYyODYuLjMxN2I3ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5oCkBAIC0xLDUgKzEsNCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogJElkOiBzbXNjLWlyY2MyLmgsdiAxLjEyLjIuMSAyMDAyLzEwLzI3IDEwOjUyOjM3IGRpcCBFeHAgJAogICoKICAqIERlc2NyaXB0aW9uOiAgIERlZmluaXRpb25zIGZvciB0aGUgU01DIElyQ0MgY2hpcHNldAogICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5oIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5oCmluZGV4IDlkMDEyZjAuLjQwM2MzZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmgKQEAgLTExOCw3ICsxMTgsNiBAQAogCWludCBpbmRleDsJCS8qIEluc3RhbmNlIGluZGV4ICovCiAKIAlzdHJ1Y3QgZXZlbnRmbGFnIEV2ZW50RmxhZzsKLQlzdHJ1Y3QgcG1fZGV2ICpkZXY7CiAJdW5zaWduZWQgaW50IGNoaXBfaWQ7CS8qIHRvIHJlbWVtYmVyIGNoaXAgaWQgKi8KIAl1bnNpZ25lZCBpbnQgUmV0cnlDb3VudDsKIAl1bnNpZ25lZCBpbnQgUnhEYXRhUmVhZHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXhnYi9NYWtlZmlsZQppbmRleCA4MzhhNTA4Li4wYjIwYzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwogIyBJbnRlbCBQUk8vMTBHYkUgTGludXggZHJpdmVyCi0jIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgogIwogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiLmggYi9kcml2ZXJzL25ldC9peGdiL2l4Z2IuaAppbmRleCAxNmY5Yzc1Ni4uODA0Njk4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMEdiRSBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTg5LDE4ICs4OSwxNiBAQAogCiAKIC8qIFRYL1JYIGRlc2NyaXB0b3IgZGVmaW5lcyAqLwotI2RlZmluZSBERUZBVUxUX1RYRAkgMjU2Ci0jZGVmaW5lIE1BWF9UWEQgICAJNDA5NgotI2RlZmluZSBNSU5fVFhECSAgNjQKKyNkZWZpbmUgREVGQVVMVF9UWEQgICAgICAyNTYKKyNkZWZpbmUgTUFYX1RYRCAgICAgICAgIDQwOTYKKyNkZWZpbmUgTUlOX1RYRCAgICAgICAgICAgNjQKIAogLyogaGFyZHdhcmUgY2Fubm90IHJlbGlhYmx5IHN1cHBvcnQgbW9yZSB0aGFuIDUxMiBkZXNjcmlwdG9ycyBvd25lZCBieQotICogaGFyZHdhcmUgZGVzY3Jpb3B0b3IgY2FjaGUgb3RoZXJ3aXNlIGFuIHVucmVsaWFibGUgcmluZyB1bmRlciBoZWF2eSAKLSAqIHJlY2lldmUgbG9hZCBtYXkgcmVzdWx0ICovCi0vKiAjZGVmaW5lIERFRkFVTFRfUlhECSAgIDEwMjQgKi8KLS8qICNkZWZpbmUgTUFYX1JYRAkgICA0MDk2ICovCi0jZGVmaW5lIERFRkFVTFRfUlhECTUxMgotI2RlZmluZSBNQVhfUlhECTUxMgotI2RlZmluZSBNSU5fUlhECSA2NAorICogaGFyZHdhcmUgZGVzY3JpcHRvciBjYWNoZSBvdGhlcndpc2UgYW4gdW5yZWxpYWJsZSByaW5nIHVuZGVyIGhlYXZ5CisgKiByZWNlaXZlIGxvYWQgbWF5IHJlc3VsdCAqLworI2RlZmluZSBERUZBVUxUX1JYRCAgICAgIDUxMgorI2RlZmluZSBNQVhfUlhEICAgICAgICAgIDUxMgorI2RlZmluZSBNSU5fUlhEICAgICAgICAgICA2NAogCiAvKiBTdXBwb3J0ZWQgUnggQnVmZmVyIFNpemVzICovCiAjZGVmaW5lIElYR0JfUlhCVUZGRVJfMjA0OCAgMjA0OApAQCAtMTU3LDcgKzE1NSw2IEBACiAJdTMyIHBhcnRfbnVtOwogCXUxNiBsaW5rX3NwZWVkOwogCXUxNiBsaW5rX2R1cGxleDsKLQlzcGlubG9ja190IHR4X2xvY2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKIAogCXN0cnVjdCB0aW1lcl9saXN0IGJsaW5rX3RpbWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYwppbmRleCAyZjdlZDUyLi44OWZmYTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgUFJPLzEwR2JFIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMTA4LDcgKzEwOCw3IEBACiAJCSAqLwogCQllZWNkX3JlZyAmPSB+SVhHQl9FRUNEX0RJOwogCi0JCWlmKGRhdGEgJiBtYXNrKQorCQlpZiAoZGF0YSAmIG1hc2spCiAJCQllZWNkX3JlZyB8PSBJWEdCX0VFQ0RfREk7CiAKIAkJSVhHQl9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2RfcmVnKTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAJCW1hc2sgPSBtYXNrID4+IDE7CiAKLQl9IHdoaWxlKG1hc2spOworCX0gd2hpbGUgKG1hc2spOwogCiAJLyogV2UgbGVhdmUgdGhlICJESSIgYml0IHNldCB0byAiMCIgd2hlbiB3ZSBsZWF2ZSB0aGlzIHJvdXRpbmUuICovCiAJZWVjZF9yZWcgJj0gfklYR0JfRUVDRF9ESTsKQEAgLTE1MiwxNCArMTUyLDE0IEBACiAJZWVjZF9yZWcgJj0gfihJWEdCX0VFQ0RfRE8gfCBJWEdCX0VFQ0RfREkpOwogCWRhdGEgPSAwOwogCi0JZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCWRhdGEgPSBkYXRhIDw8IDE7CiAJCWl4Z2JfcmFpc2VfY2xvY2soaHcsICZlZWNkX3JlZyk7CiAKIAkJZWVjZF9yZWcgPSBJWEdCX1JFQURfUkVHKGh3LCBFRUNEKTsKIAogCQllZWNkX3JlZyAmPSB+KElYR0JfRUVDRF9ESSk7Ci0JCWlmKGVlY2RfcmVnICYgSVhHQl9FRUNEX0RPKQorCQlpZiAoZWVjZF9yZWcgJiBJWEdCX0VFQ0RfRE8pCiAJCQlkYXRhIHw9IDE7CiAKIAkJaXhnYl9sb3dlcl9jbG9jayhodywgJmVlY2RfcmVnKTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogCiAJZWVjZF9yZWcgPSBJWEdCX1JFQURfUkVHKGh3LCBFRUNEKTsKIAotCS8qICBEZXNlbGN0IEVFUFJPTSAgKi8KKwkvKiAgRGVzZWxlY3QgRUVQUk9NICAqLwogCWVlY2RfcmVnICY9IH4oSVhHQl9FRUNEX0NTIHwgSVhHQl9FRUNEX1NLKTsKIAlJWEdCX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZF9yZWcpOwogCXVkZWxheSg1MCk7CkBAIC0yOTMsMTQgKzI5MywxNCBAQAogCSAqLwogCWl4Z2Jfc3RhbmRieV9lZXByb20oaHcpOwogCi0JLyogTm93IHJlYWQgRE8gcmVwZWF0ZWRseSB1bnRpbCBpcyBoaWdoIChlcXVhbCB0byAnMScpLiAgVGhlIEVFRVBST00gd2lsbAorCS8qIE5vdyByZWFkIERPIHJlcGVhdGVkbHkgdW50aWwgaXMgaGlnaCAoZXF1YWwgdG8gJzEnKS4gIFRoZSBFRVBST00gd2lsbAogCSAqIHNpZ25hbCB0aGF0IHRoZSBjb21tYW5kIGhhcyBiZWVuIGNvbXBsZXRlZCBieSByYWlzaW5nIHRoZSBETyBzaWduYWwuCiAJICogSWYgRE8gZG9lcyBub3QgZ28gaGlnaCBpbiAxMCBtaWxsaXNlY29uZHMsIHRoZW4gZXJyb3Igb3V0LgogCSAqLwotCWZvcihpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7CiAJCWVlY2RfcmVnID0gSVhHQl9SRUFEX1JFRyhodywgRUVDRCk7CiAKLQkJaWYoZWVjZF9yZWcgJiBJWEdCX0VFQ0RfRE8pCisJCWlmIChlZWNkX3JlZyAmIElYR0JfRUVDRF9ETykKIAkJCXJldHVybiAodHJ1ZSk7CiAKIAkJdWRlbGF5KDUwKTsKQEAgLTMyOCwxMCArMzI4LDEwIEBACiAJdTE2IGNoZWNrc3VtID0gMDsKIAl1MTYgaTsKIAotCWZvcihpID0gMDsgaSA8IChFRVBST01fQ0hFQ0tTVU1fUkVHICsgMSk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgKEVFUFJPTV9DSEVDS1NVTV9SRUcgKyAxKTsgaSsrKQogCQljaGVja3N1bSArPSBpeGdiX3JlYWRfZWVwcm9tKGh3LCBpKTsKIAotCWlmKGNoZWNrc3VtID09ICh1MTYpIEVFUFJPTV9TVU0pCisJaWYgKGNoZWNrc3VtID09ICh1MTYpIEVFUFJPTV9TVU0pCiAJCXJldHVybiAodHJ1ZSk7CiAJZWxzZQogCQlyZXR1cm4gKGZhbHNlKTsKQEAgLTM1MSw3ICszNTEsNyBAQAogCXUxNiBjaGVja3N1bSA9IDA7CiAJdTE2IGk7CiAKLQlmb3IoaSA9IDA7IGkgPCBFRVBST01fQ0hFQ0tTVU1fUkVHOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9DSEVDS1NVTV9SRUc7IGkrKykKIAkJY2hlY2tzdW0gKz0gaXhnYl9yZWFkX2VlcHJvbShodywgaSk7CiAKIAljaGVja3N1bSA9ICh1MTYpIEVFUFJPTV9TVU0gLSBjaGVja3N1bTsKQEAgLTM2NSw3ICszNjUsNyBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKiByZWcgLSBvZmZzZXQgd2l0aGluIHRoZSBFRVBST00gdG8gYmUgd3JpdHRlbiB0bwotICogZGF0YSAtIDE2IGJpdCB3b3JkIHRvIGJlIHdyaXRlbiB0byB0aGUgRUVQUk9NCisgKiBkYXRhIC0gMTYgYml0IHdvcmQgdG8gYmUgd3JpdHRlbiB0byB0aGUgRUVQUk9NCiAgKgogICogSWYgaXhnYl91cGRhdGVfZWVwcm9tX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgdGhlCiAgKiBFRVBST00gd2lsbCBtb3N0IGxpa2VseSBjb250YWluIGFuIGludmFsaWQgY2hlY2tzdW0uCkBAIC00NzIsNyArNDcyLDcgQEAKIAllZV9tYXAgPSAoc3RydWN0IGl4Z2JfZWVfbWFwX3R5cGUgKilody0+ZWVwcm9tOwogCiAJREVCVUdPVVQoIml4Z2JfZWU6IFJlYWRpbmcgZWVwcm9tIGRhdGFcbiIpOwotCWZvcihpID0gMDsgaSA8IElYR0JfRUVQUk9NX1NJWkUgOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSVhHQl9FRVBST01fU0laRSA7IGkrKykgewogCQl1MTYgZWVfZGF0YTsKIAkJZWVfZGF0YSA9IGl4Z2JfcmVhZF9lZXByb20oaHcsIGkpOwogCQljaGVja3N1bSArPSBlZV9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmggYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuaAppbmRleCA0YjdiZDBkLi43ZWExMjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgUFJPLzEwR2JFIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzQsMTEgKzM0LDExIEBACiAjZGVmaW5lIElYR0JfRVRIX0xFTkdUSF9PRl9BRERSRVNTICAgNgogCiAvKiBFRVBST00gQ29tbWFuZHMgKi8KLSNkZWZpbmUgRUVQUk9NX1JFQURfT1BDT0RFICAweDYJLyogRUVSUE9NIHJlYWQgb3Bjb2RlICovCi0jZGVmaW5lIEVFUFJPTV9XUklURV9PUENPREUgMHg1CS8qIEVFUlBPTSB3cml0ZSBvcGNvZGUgKi8KLSNkZWZpbmUgRUVQUk9NX0VSQVNFX09QQ09ERSAweDcJLyogRUVSUE9NIGVyYXNlIG9wY29kZSAqLwotI2RlZmluZSBFRVBST01fRVdFTl9PUENPREUgIDB4MTMJLyogRUVSUE9NIGVyYXNlL3dyaXRlIGVuYWJsZSAqLwotI2RlZmluZSBFRVBST01fRVdEU19PUENPREUgIDB4MTAJLyogRUVSUE9NIGVyYXN0L3dyaXRlIGRpc2FibGUgKi8KKyNkZWZpbmUgRUVQUk9NX1JFQURfT1BDT0RFICAweDYJLyogRUVQUk9NIHJlYWQgb3Bjb2RlICovCisjZGVmaW5lIEVFUFJPTV9XUklURV9PUENPREUgMHg1CS8qIEVFUFJPTSB3cml0ZSBvcGNvZGUgKi8KKyNkZWZpbmUgRUVQUk9NX0VSQVNFX09QQ09ERSAweDcJLyogRUVQUk9NIGVyYXNlIG9wY29kZSAqLworI2RlZmluZSBFRVBST01fRVdFTl9PUENPREUgIDB4MTMJLyogRUVQUk9NIGVyYXNlL3dyaXRlIGVuYWJsZSAqLworI2RlZmluZSBFRVBST01fRVdEU19PUENPREUgIDB4MTAJLyogRUVQUk9NIGVyYXNlL3dyaXRlIGRpc2FibGUgKi8KIAogLyogRUVQUk9NIE1BUCAoV29yZCBPZmZzZXRzKSAqLwogI2RlZmluZSBFRVBST01fSUFfMV8yX1JFRyAgICAgICAgMHgwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYwppbmRleCA4NDY0ZDhhLi4yODhlZTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMEdiRSBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTk1LDcgKzk1LDcgQEAKIAllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAKLQlpZihuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpIHsKKwlpZiAobmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CiAJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCX0gZWxzZSB7CkBAIC0xMjIsMTEgKzEyMiwxMSBAQAogewogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JaWYoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSB8fAorCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFIHx8CiAJICAgZWNtZC0+c3BlZWQgKyBlY21kLT5kdXBsZXggIT0gU1BFRURfMTAwMDAgKyBEVVBMRVhfRlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JCi0JaWYobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CisKKwlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCWl4Z2JfZG93bihhZGFwdGVyLCB0cnVlKTsKIAkJaXhnYl9yZXNldChhZGFwdGVyKTsKIAkJaXhnYl91cChhZGFwdGVyKTsKQEAgLTE0MywxNCArMTQzLDE0IEBACiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCQorCiAJcGF1c2UtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JCQotCWlmKGh3LT5mYy50eXBlID09IGl4Z2JfZmNfcnhfcGF1c2UpCisKKwlpZiAoaHctPmZjLnR5cGUgPT0gaXhnYl9mY19yeF9wYXVzZSkKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKLQllbHNlIGlmKGh3LT5mYy50eXBlID09IGl4Z2JfZmNfdHhfcGF1c2UpCisJZWxzZSBpZiAoaHctPmZjLnR5cGUgPT0gaXhnYl9mY190eF9wYXVzZSkKIAkJcGF1c2UtPnR4X3BhdXNlID0gMTsKLQllbHNlIGlmKGh3LT5mYy50eXBlID09IGl4Z2JfZmNfZnVsbCkgeworCWVsc2UgaWYgKGh3LT5mYy50eXBlID09IGl4Z2JfZmNfZnVsbCkgewogCQlwYXVzZS0+cnhfcGF1c2UgPSAxOwogCQlwYXVzZS0+dHhfcGF1c2UgPSAxOwogCX0KQEAgLTE2MiwyNiArMTYyLDI2IEBACiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCQotCWlmKHBhdXNlLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQorCisJaWYgKHBhdXNlLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpCisJaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpCiAJCWh3LT5mYy50eXBlID0gaXhnYl9mY19mdWxsOwotCWVsc2UgaWYocGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCisJZWxzZSBpZiAocGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCiAJCWh3LT5mYy50eXBlID0gaXhnYl9mY19yeF9wYXVzZTsKLQllbHNlIGlmKCFwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKQorCWVsc2UgaWYgKCFwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKQogCQlody0+ZmMudHlwZSA9IGl4Z2JfZmNfdHhfcGF1c2U7Ci0JZWxzZSBpZighcGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCisJZWxzZSBpZiAoIXBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQogCQlody0+ZmMudHlwZSA9IGl4Z2JfZmNfbm9uZTsKIAotCWlmKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgeworCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKIAkJaXhnYl9kb3duKGFkYXB0ZXIsIHRydWUpOwogCQlpeGdiX3VwKGFkYXB0ZXIpOwogCQlpeGdiX3NldF9zcGVlZF9kdXBsZXgobmV0ZGV2KTsKIAl9IGVsc2UKIAkJaXhnYl9yZXNldChhZGFwdGVyKTsKLQkJCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAwLDcgKzIwMCw3IEBACiAKIAlhZGFwdGVyLT5yeF9jc3VtID0gZGF0YTsKIAotCWlmKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJaXhnYl9kb3duKGFkYXB0ZXIsIHRydWUpOwogCQlpeGdiX3VwKGFkYXB0ZXIpOwogCQlpeGdiX3NldF9zcGVlZF9kdXBsZXgobmV0ZGV2KTsKQEAgLTIwOCw3ICsyMDgsNyBAQAogCQlpeGdiX3Jlc2V0KGFkYXB0ZXIpOwogCXJldHVybiAwOwogfQotCQorCiBzdGF0aWMgdTMyCiBpeGdiX2dldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CkBAIC0yMjksMTIgKzIyOSwxMiBAQAogc3RhdGljIGludAogaXhnYl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewotCWlmKGRhdGEpCisJaWYgKGRhdGEpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJZWxzZQogCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKIAlyZXR1cm4gMDsKLX0gCit9CiAKIHN0YXRpYyB1MzIKIGl4Z2JfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0yNTEsNyArMjUxLDcgQEAKIH0KICNkZWZpbmUgSVhHQl9HRVRfU1RBVChfQV8sIF9SXykgX0FfLT5zdGF0cy5fUl8KIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIGl4Z2JfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAjZGVmaW5lIElYR0JfUkVHX0RVTVBfTEVOICAxMzYqc2l6ZW9mKHUzMikKQEAgLTMwMSw3ICszMDEsNyBAQAogCSpyZWcrKyA9IElYR0JfUkVBRF9SRUcoaHcsIFJYQ1NVTSk7CS8qICAyMCAqLwogCiAJLyogdGhlcmUgYXJlIDE2IFJBUiBlbnRyaWVzIGluIGhhcmR3YXJlLCB3ZSBvbmx5IHVzZSAzICovCi0JZm9yKGkgPSAwOyBpIDwgSVhHQl9BTExfUkFSX0VOVFJJRVM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBJWEdCX0FMTF9SQVJfRU5UUklFUzsgaSsrKSB7CiAJCSpyZWcrKyA9IElYR0JfUkVBRF9SRUdfQVJSQVkoaHcsIFJBTCwgKGkgPDwgMSkpOyAvKjIxLC4uLiw1MSAqLwogCQkqcmVnKysgPSBJWEdCX1JFQURfUkVHX0FSUkFZKGh3LCBSQUgsIChpIDw8IDEpKTsgLyoyMiwuLi4sNTIgKi8KIAl9CkBAIC00MTUsNyArNDE1LDcgQEAKIAlpbnQgaSwgbWF4X2xlbiwgZmlyc3Rfd29yZCwgbGFzdF93b3JkOwogCWludCByZXRfdmFsID0gMDsKIAotCWlmKGVlcHJvbS0+bGVuID09IDApIHsKKwlpZiAoZWVwcm9tLT5sZW4gPT0gMCkgewogCQlyZXRfdmFsID0gLUVJTlZBTDsKIAkJZ290byBnZWVwcm9tX2Vycm9yOwogCX0KQEAgLTQyNCwxMiArNDI0LDEyIEBACiAKIAltYXhfbGVuID0gaXhnYl9nZXRfZWVwcm9tX2xlbihuZXRkZXYpOwogCi0JaWYoZWVwcm9tLT5vZmZzZXQgPiBlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKSB7CisJaWYgKGVlcHJvbS0+b2Zmc2V0ID4gZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbikgewogCQlyZXRfdmFsID0gLUVJTlZBTDsKIAkJZ290byBnZWVwcm9tX2Vycm9yOwogCX0KIAotCWlmKChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKSA+IG1heF9sZW4pCisJaWYgKChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKSA+IG1heF9sZW4pCiAJCWVlcHJvbS0+bGVuID0gKG1heF9sZW4gLSBlZXByb20tPm9mZnNldCk7CiAKIAlmaXJzdF93b3JkID0gZWVwcm9tLT5vZmZzZXQgPj4gMTsKQEAgLTQzNywxNiArNDM3LDE0IEBACiAKIAllZXByb21fYnVmZiA9IGttYWxsb2Moc2l6ZW9mKF9fbGUxNikgKgogCQkJKGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYoIWVlcHJvbV9idWZmKQorCWlmICghZWVwcm9tX2J1ZmYpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogbm90ZSB0aGUgZWVwcm9tIHdhcyBnb29kIGJlY2F1c2UgdGhlIGRyaXZlciBsb2FkZWQgKi8KLQlmb3IoaSA9IDA7IGkgPD0gKGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDw9IChsYXN0X3dvcmQgLSBmaXJzdF93b3JkKTsgaSsrKQogCQllZXByb21fYnVmZltpXSA9IGl4Z2JfZ2V0X2VlcHJvbV93b3JkKGh3LCAoZmlyc3Rfd29yZCArIGkpKTsKLQl9CiAKLQltZW1jcHkoYnl0ZXMsICh1OCAqKWVlcHJvbV9idWZmICsgKGVlcHJvbS0+b2Zmc2V0ICYgMSksCi0JCQllZXByb20tPmxlbik7CisJbWVtY3B5KGJ5dGVzLCAodTggKillZXByb21fYnVmZiArIChlZXByb20tPm9mZnNldCAmIDEpLCBlZXByb20tPmxlbik7CiAJa2ZyZWUoZWVwcm9tX2J1ZmYpOwogCiBnZWVwcm9tX2Vycm9yOgpAQCAtNDY0LDQ3ICs0NjIsNDcgQEAKIAlpbnQgbWF4X2xlbiwgZmlyc3Rfd29yZCwgbGFzdF93b3JkOwogCXUxNiBpOwogCi0JaWYoZWVwcm9tLT5sZW4gPT0gMCkKKwlpZiAoZWVwcm9tLT5sZW4gPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZihlZXByb20tPm1hZ2ljICE9IChody0+dmVuZG9yX2lkIHwgKGh3LT5kZXZpY2VfaWQgPDwgMTYpKSkKKwlpZiAoZWVwcm9tLT5tYWdpYyAhPSAoaHctPnZlbmRvcl9pZCB8IChody0+ZGV2aWNlX2lkIDw8IDE2KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJbWF4X2xlbiA9IGl4Z2JfZ2V0X2VlcHJvbV9sZW4obmV0ZGV2KTsKIAotCWlmKGVlcHJvbS0+b2Zmc2V0ID4gZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbikKKwlpZiAoZWVwcm9tLT5vZmZzZXQgPiBlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmKChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKSA+IG1heF9sZW4pCisJaWYgKChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKSA+IG1heF9sZW4pCiAJCWVlcHJvbS0+bGVuID0gKG1heF9sZW4gLSBlZXByb20tPm9mZnNldCk7CiAKIAlmaXJzdF93b3JkID0gZWVwcm9tLT5vZmZzZXQgPj4gMTsKIAlsYXN0X3dvcmQgPSAoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbiAtIDEpID4+IDE7CiAJZWVwcm9tX2J1ZmYgPSBrbWFsbG9jKG1heF9sZW4sIEdGUF9LRVJORUwpOwotCWlmKCFlZXByb21fYnVmZikKKwlpZiAoIWVlcHJvbV9idWZmKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXB0ciA9ICh2b2lkICopZWVwcm9tX2J1ZmY7CiAKLQlpZihlZXByb20tPm9mZnNldCAmIDEpIHsKKwlpZiAoZWVwcm9tLT5vZmZzZXQgJiAxKSB7CiAJCS8qIG5lZWQgcmVhZC9tb2RpZnkvd3JpdGUgb2YgZmlyc3QgY2hhbmdlZCBFRVBST00gd29yZCAqLwogCQkvKiBvbmx5IHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgd29yZCBpcyBiZWluZyBtb2RpZmllZCAqLwogCQllZXByb21fYnVmZlswXSA9IGl4Z2JfcmVhZF9lZXByb20oaHcsIGZpcnN0X3dvcmQpOwogCQlwdHIrKzsKIAl9Ci0JaWYoKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4pICYgMSkgeworCWlmICgoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbikgJiAxKSB7CiAJCS8qIG5lZWQgcmVhZC9tb2RpZnkvd3JpdGUgb2YgbGFzdCBjaGFuZ2VkIEVFUFJPTSB3b3JkICovCiAJCS8qIG9ubHkgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHdvcmQgaXMgYmVpbmcgbW9kaWZpZWQgKi8KLQkJZWVwcm9tX2J1ZmZbbGFzdF93b3JkIC0gZmlyc3Rfd29yZF0gCisJCWVlcHJvbV9idWZmW2xhc3Rfd29yZCAtIGZpcnN0X3dvcmRdCiAJCQk9IGl4Z2JfcmVhZF9lZXByb20oaHcsIGxhc3Rfd29yZCk7CiAJfQogCiAJbWVtY3B5KHB0ciwgYnl0ZXMsIGVlcHJvbS0+bGVuKTsKLQlmb3IoaSA9IDA7IGkgPD0gKGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQpOyBpKyspCisJZm9yIChpID0gMDsgaSA8PSAobGFzdF93b3JkIC0gZmlyc3Rfd29yZCk7IGkrKykKIAkJaXhnYl93cml0ZV9lZXByb20oaHcsIGZpcnN0X3dvcmQgKyBpLCBlZXByb21fYnVmZltpXSk7CiAKIAkvKiBVcGRhdGUgdGhlIGNoZWNrc3VtIG92ZXIgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIEVFUFJPTSBpZiBuZWVkZWQgKi8KLQlpZihmaXJzdF93b3JkIDw9IEVFUFJPTV9DSEVDS1NVTV9SRUcpCisJaWYgKGZpcnN0X3dvcmQgPD0gRUVQUk9NX0NIRUNLU1VNX1JFRykKIAkJaXhnYl91cGRhdGVfZWVwcm9tX2NoZWNrc3VtKGh3KTsKIAogCWtmcmVlKGVlcHJvbV9idWZmKTsKQEAgLTUzNCw3ICs1MzIsNyBAQAogCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyAqdHhkciA9ICZhZGFwdGVyLT50eF9yaW5nOwogCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyAqcnhkciA9ICZhZGFwdGVyLT5yeF9yaW5nOwogCi0JcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUlhEOyAKKwlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IE1BWF9SWEQ7CiAJcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBNQVhfVFhEOwogCXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOwogCXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKQEAgLTU0NCw3ICs1NDIsNyBAQAogCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOwogfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogaXhnYl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKIHsKQEAgLTU1NywxMCArNTU1LDEwIEBACiAJdHhfb2xkID0gYWRhcHRlci0+dHhfcmluZzsKIAlyeF9vbGQgPSBhZGFwdGVyLT5yeF9yaW5nOwogCi0JaWYoKHJpbmctPnJ4X21pbmlfcGVuZGluZykgfHwgKHJpbmctPnJ4X2p1bWJvX3BlbmRpbmcpKSAKKwlpZiAoKHJpbmctPnJ4X21pbmlfcGVuZGluZykgfHwgKHJpbmctPnJ4X2p1bWJvX3BlbmRpbmcpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKKwlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQogCQlpeGdiX2Rvd24oYWRhcHRlciwgdHJ1ZSk7CiAKIAlyeGRyLT5jb3VudCA9IG1heChyaW5nLT5yeF9wZW5kaW5nLCh1MzIpTUlOX1JYRCk7CkBAIC01NzEsMTEgKzU2OSwxMSBAQAogCXR4ZHItPmNvdW50ID0gbWluKHR4ZHItPmNvdW50LCh1MzIpTUFYX1RYRCk7CiAJdHhkci0+Y291bnQgPSBBTElHTih0eGRyLT5jb3VudCwgSVhHQl9SRVFfVFhfREVTQ1JJUFRPUl9NVUxUSVBMRSk7CiAKLQlpZihuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCS8qIFRyeSB0byBnZXQgbmV3IHJlc291cmNlcyBiZWZvcmUgZGVsZXRpbmcgb2xkICovCi0JCWlmKChlcnIgPSBpeGdiX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyKSkpCisJCWlmICgoZXJyID0gaXhnYl9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlcikpKQogCQkJZ290byBlcnJfc2V0dXBfcng7Ci0JCWlmKChlcnIgPSBpeGdiX3NldHVwX3R4X3Jlc291cmNlcyhhZGFwdGVyKSkpCisJCWlmICgoZXJyID0gaXhnYl9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlcikpKQogCQkJZ290byBlcnJfc2V0dXBfdHg7CiAKIAkJLyogc2F2ZSB0aGUgbmV3LCByZXN0b3JlIHRoZSBvbGQgaW4gb3JkZXIgdG8gZnJlZSBpdCwKQEAgLTU4OSw3ICs1ODcsNyBAQAogCQlpeGdiX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCQlhZGFwdGVyLT5yeF9yaW5nID0gcnhfbmV3OwogCQlhZGFwdGVyLT50eF9yaW5nID0gdHhfbmV3OwotCQlpZigoZXJyID0gaXhnYl91cChhZGFwdGVyKSkpCisJCWlmICgoZXJyID0gaXhnYl91cChhZGFwdGVyKSkpCiAJCQlyZXR1cm4gZXJyOwogCQlpeGdiX3NldF9zcGVlZF9kdXBsZXgobmV0ZGV2KTsKIAl9CkBAIC02MTUsNyArNjEzLDcgQEAKIHsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKilkYXRhOwogCi0JaWYodGVzdF9hbmRfY2hhbmdlX2JpdChJWEdCX0xFRF9PTiwgJmFkYXB0ZXItPmxlZF9zdGF0dXMpKQorCWlmICh0ZXN0X2FuZF9jaGFuZ2VfYml0KElYR0JfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cykpCiAJCWl4Z2JfbGVkX29mZigmYWRhcHRlci0+aHcpOwogCWVsc2UKIAkJaXhnYl9sZWRfb24oJmFkYXB0ZXItPmh3KTsKQEAgLTYzMSw3ICs2MjksNyBAQAogCWlmICghZGF0YSkKIAkJZGF0YSA9IElOVF9NQVg7CiAKLQlpZighYWRhcHRlci0+YmxpbmtfdGltZXIuZnVuY3Rpb24pIHsKKwlpZiAoIWFkYXB0ZXItPmJsaW5rX3RpbWVyLmZ1bmN0aW9uKSB7CiAJCWluaXRfdGltZXIoJmFkYXB0ZXItPmJsaW5rX3RpbWVyKTsKIAkJYWRhcHRlci0+YmxpbmtfdGltZXIuZnVuY3Rpb24gPSBpeGdiX2xlZF9ibGlua19jYWxsYmFjazsKIAkJYWRhcHRlci0+YmxpbmtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7CkBAIC02NDcsNyArNjQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIGl4Z2JfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCiB7CiAJc3dpdGNoIChzc2V0KSB7CkBAIC02NTgsMzAgKzY1NiwzMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgCi1peGdiX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIAorc3RhdGljIHZvaWQKK2l4Z2JfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGk7CiAKIAlpeGdiX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKLQlmb3IoaSA9IDA7IGkgPCBJWEdCX1NUQVRTX0xFTjsgaSsrKSB7Ci0JCWNoYXIgKnAgPSAoY2hhciAqKWFkYXB0ZXIraXhnYl9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDsJCi0JCWRhdGFbaV0gPSAoaXhnYl9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PSAKKwlmb3IgKGkgPSAwOyBpIDwgSVhHQl9TVEFUU19MRU47IGkrKykgeworCQljaGFyICpwID0gKGNoYXIgKilhZGFwdGVyK2l4Z2JfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9vZmZzZXQ7CisJCWRhdGFbaV0gPSAoaXhnYl9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PQogCQkJc2l6ZW9mKHU2NCkpID8gKih1NjQgKilwIDogKih1MzIgKilwOwogCX0KIH0KIAotc3RhdGljIHZvaWQgCitzdGF0aWMgdm9pZAogaXhnYl9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKIHsKIAlpbnQgaTsKIAogCXN3aXRjaChzdHJpbmdzZXQpIHsKIAljYXNlIEVUSF9TU19TVEFUUzoKLQkJZm9yKGk9MDsgaSA8IElYR0JfU1RBVFNfTEVOOyBpKyspIHsKLQkJCW1lbWNweShkYXRhICsgaSAqIEVUSF9HU1RSSU5HX0xFTiwgCisJCWZvciAoaSA9IDA7IGkgPCBJWEdCX1NUQVRTX0xFTjsgaSsrKSB7CisJCQltZW1jcHkoZGF0YSArIGkgKiBFVEhfR1NUUklOR19MRU4sCiAJCQlpeGdiX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfc3RyaW5nLAogCQkJRVRIX0dTVFJJTkdfTEVOKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYwppbmRleCAwNGQyMDAzLi4xMWRjZGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgUFJPLzEwR2JFIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMTI1LDcgKzEyNSw3IEBACiAJLyogSWYgd2UgYXJlIHN0b3BwZWQgb3IgcmVzZXR0aW5nIGV4aXQgZ3JhY2VmdWxseSBhbmQgd2FpdCB0byBiZQogCSAqIHN0YXJ0ZWQgYWdhaW4gYmVmb3JlIGFjY2Vzc2luZyB0aGUgaGFyZHdhcmUuCiAJICovCi0JaWYoaHctPmFkYXB0ZXJfc3RvcHBlZCkgeworCWlmIChody0+YWRhcHRlcl9zdG9wcGVkKSB7CiAJCURFQlVHT1VUKCJFeGl0aW5nIGJlY2F1c2UgdGhlIGFkYXB0ZXIgaXMgYWxyZWFkeSBzdG9wcGVkISEhXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTM0Nyw3ICszNDcsNyBAQAogCiAJLyogWmVybyBvdXQgdGhlIE11bHRpY2FzdCBIQVNIIHRhYmxlICovCiAJREVCVUdPVVQoIlplcm9pbmcgdGhlIE1UQVxuIik7Ci0JZm9yKGkgPSAwOyBpIDwgSVhHQl9NQ19UQkxfU0laRTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBJWEdCX01DX1RCTF9TSVpFOyBpKyspCiAJCUlYR0JfV1JJVEVfUkVHX0FSUkFZKGh3LCBNVEEsIGksIDApOwogCiAJLyogWmVybyBvdXQgdGhlIFZMQU4gRmlsdGVyIFRhYmxlIEFycmF5ICovCkBAIC0zNzEsNyArMzcxLDcgQEAKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgogICogUGxhY2VzIHRoZSBNQUMgYWRkcmVzcyBpbiByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXIgMCBhbmQgY2xlYXJzIHRoZSByZXN0Ci0gKiBvZiB0aGUgcmVjZWl2ZSBhZGRyZXNzcyByZWdpc3RlcnMuIENsZWFycyB0aGUgbXVsdGljYXN0IHRhYmxlLiBBc3N1bWVzCisgKiBvZiB0aGUgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycy4gQ2xlYXJzIHRoZSBtdWx0aWNhc3QgdGFibGUuIEFzc3VtZXMKICAqIHRoZSByZWNlaXZlciBpcyBpbiByZXNldCB3aGVuIHRoZSByb3V0aW5lIGlzIGNhbGxlZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCkBAIC00MTMsNyArNDEzLDcgQEAKIAogCS8qIFplcm8gb3V0IHRoZSBvdGhlciAxNSByZWNlaXZlIGFkZHJlc3Nlcy4gKi8KIAlERUJVR09VVCgiQ2xlYXJpbmcgUkFSWzEtMTVdXG4iKTsKLQlmb3IoaSA9IDE7IGkgPCBJWEdCX1JBUl9FTlRSSUVTOyBpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgSVhHQl9SQVJfRU5UUklFUzsgaSsrKSB7CiAJCS8qIFdyaXRlIGhpZ2ggcmVnIGZpcnN0IHRvIGRpc2FibGUgdGhlIEFWIGJpdCBmaXJzdCAqLwogCQlJWEdCX1dSSVRFX1JFR19BUlJBWShodywgUkEsICgoaSA8PCAxKSArIDEpLCAwKTsKIAkJSVhHQl9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCAoaSA8PCAxKSwgMCk7CkBAIC00NTIsMTkgKzQ1MiwxOCBAQAogCiAJLyogQ2xlYXIgUkFSWzEtMTVdICovCiAJREVCVUdPVVQoIiBDbGVhcmluZyBSQVJbMS0xNV1cbiIpOwotCWZvcihpID0gcmFyX3VzZWRfY291bnQ7IGkgPCBJWEdCX1JBUl9FTlRSSUVTOyBpKyspIHsKKwlmb3IgKGkgPSByYXJfdXNlZF9jb3VudDsgaSA8IElYR0JfUkFSX0VOVFJJRVM7IGkrKykgewogCQlJWEdCX1dSSVRFX1JFR19BUlJBWShodywgUkEsIChpIDw8IDEpLCAwKTsKIAkJSVhHQl9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCAoKGkgPDwgMSkgKyAxKSwgMCk7CiAJfQogCiAJLyogQ2xlYXIgdGhlIE1UQSAqLwogCURFQlVHT1VUKCIgQ2xlYXJpbmcgTVRBXG4iKTsKLQlmb3IoaSA9IDA7IGkgPCBJWEdCX01DX1RCTF9TSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSVhHQl9NQ19UQkxfU0laRTsgaSsrKQogCQlJWEdCX1dSSVRFX1JFR19BUlJBWShodywgTVRBLCBpLCAwKTsKLQl9CiAKIAkvKiBBZGQgdGhlIG5ldyBhZGRyZXNzZXMgKi8KLQlmb3IoaSA9IDA7IGkgPCBtY19hZGRyX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWNfYWRkcl9jb3VudDsgaSsrKSB7CiAJCURFQlVHT1VUKCIgQWRkaW5nIHRoZSBtdWx0aWNhc3QgYWRkcmVzc2VzOlxuIik7CiAJCURFQlVHT1VUNygiIE1DIEFkZHIgIyVkID0lLjJYICUuMlggJS4yWCAlLjJYICUuMlggJS4yWFxuIiwgaSwKIAkJCSAgbWNfYWRkcl9saXN0W2kgKiAoSVhHQl9FVEhfTEVOR1RIX09GX0FERFJFU1MgKyBwYWQpXSwKQEAgLTQ4Miw3ICs0ODEsNyBAQAogCQkvKiBQbGFjZSB0aGlzIG11bHRpY2FzdCBhZGRyZXNzIGluIHRoZSBSQVIgaWYgdGhlcmUgaXMgcm9vbSwgKgogCQkgKiBlbHNlIHB1dCBpdCBpbiB0aGUgTVRBCiAJCSAqLwotCQlpZihyYXJfdXNlZF9jb3VudCA8IElYR0JfUkFSX0VOVFJJRVMpIHsKKwkJaWYgKHJhcl91c2VkX2NvdW50IDwgSVhHQl9SQVJfRU5UUklFUykgewogCQkJaXhnYl9yYXJfc2V0KGh3LAogCQkJCSAgICAgbWNfYWRkcl9saXN0ICsKIAkJCQkgICAgIChpICogKElYR0JfRVRIX0xFTkdUSF9PRl9BRERSRVNTICsgcGFkKSksCkBAIC02NDksNyArNjQ4LDcgQEAKIHsKIAl1MzIgb2Zmc2V0OwogCi0JZm9yKG9mZnNldCA9IDA7IG9mZnNldCA8IElYR0JfVkxBTl9GSUxURVJfVEJMX1NJWkU7IG9mZnNldCsrKQorCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgSVhHQl9WTEFOX0ZJTFRFUl9UQkxfU0laRTsgb2Zmc2V0KyspCiAJCUlYR0JfV1JJVEVfUkVHX0FSUkFZKGh3LCBWRlRBLCBvZmZzZXQsIDApOwogCXJldHVybjsKIH0KQEAgLTcxOSw5ICs3MTgsOCBAQAogCS8qIFdyaXRlIHRoZSBuZXcgc2V0dGluZ3MgKi8KIAlJWEdCX1dSSVRFX1JFRyhodywgQ1RSTDAsIGN0cmxfcmVnKTsKIAotCWlmIChwYXBfcmVnICE9IDApIHsKKwlpZiAocGFwX3JlZyAhPSAwKQogCQlJWEdCX1dSSVRFX1JFRyhodywgUEFQLCBwYXBfcmVnKTsKLQl9CiAKIAkvKiBTZXQgdGhlIGZsb3cgY29udHJvbCByZWNlaXZlIHRocmVzaG9sZCByZWdpc3RlcnMuICBOb3JtYWxseSwKIAkgKiB0aGVzZSByZWdpc3RlcnMgd2lsbCBiZSBzZXQgdG8gYSBkZWZhdWx0IHRocmVzaG9sZCB0aGF0IG1heSBiZQpAQCAtNzI5LDE0ICs3MjcsMTQgQEAKIAkgKiBhYmlsaXR5IHRvIHRyYW5zbWl0IHBhdXNlIGZyYW1lcyBpbiBub3QgZW5hYmxlZCwgdGhlbiB0aGVzZQogCSAqIHJlZ2lzdGVycyB3aWxsIGJlIHNldCB0byAwLgogCSAqLwotCWlmKCEoaHctPmZjLnR5cGUgJiBpeGdiX2ZjX3R4X3BhdXNlKSkgeworCWlmICghKGh3LT5mYy50eXBlICYgaXhnYl9mY190eF9wYXVzZSkpIHsKIAkJSVhHQl9XUklURV9SRUcoaHcsIEZDUlRMLCAwKTsKIAkJSVhHQl9XUklURV9SRUcoaHcsIEZDUlRILCAwKTsKIAl9IGVsc2UgewogCSAgIC8qIFdlIG5lZWQgdG8gc2V0IHVwIHRoZSBSZWNlaXZlIFRocmVzaG9sZCBoaWdoIGFuZCBsb3cgd2F0ZXIKIAkgICAgKiBtYXJrcyBhcyB3ZWxsIGFzIChvcHRpb25hbGx5KSBlbmFibGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIFhPTgogCSAgICAqIGZyYW1lcy4gKi8KLQkJaWYoaHctPmZjLnNlbmRfeG9uKSB7CisJCWlmIChody0+ZmMuc2VuZF94b24pIHsKIAkJCUlYR0JfV1JJVEVfUkVHKGh3LCBGQ1JUTCwKIAkJCQkoaHctPmZjLmxvd193YXRlciB8IElYR0JfRkNSVExfWE9ORSkpOwogCQl9IGVsc2UgewpAQCAtNzkxLDcgKzc4OSw3IEBACiAgICAgKiogZnJvbSB0aGUgQ1BVIFdyaXRlIHRvIHRoZSBSZWFkeSBiaXQgYXNzZXJ0aW9uLgogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JZm9yKGkgPSAwOyBpIDwgMTA7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKIAl7CiAJCXVkZWxheSgxMCk7CiAKQEAgLTgxOCw3ICs4MTYsNyBAQAogICAgICoqIGZyb20gdGhlIENQVSBXcml0ZSB0byB0aGUgUmVhZHkgYml0IGFzc2VydGlvbi4KICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCWZvcihpID0gMDsgaSA8IDEwOyBpKyspCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJewogCQl1ZGVsYXkoMTApOwogCkBAIC04ODcsNyArODg1LDcgQEAKIAkqKiBmcm9tIHRoZSBDUFUgV3JpdGUgdG8gdGhlIFJlYWR5IGJpdCBhc3NlcnRpb24uCiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQlmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQogCXsKIAkJdWRlbGF5KDEwKTsKIApAQCAtOTE0LDcgKzkxMiw3IEBACiAJKiogZnJvbSB0aGUgQ1BVIFdyaXRlIHRvIHRoZSBSZWFkeSBiaXQgYXNzZXJ0aW9uLgogCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JZm9yKGkgPSAwOyBpIDwgMTA7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKIAl7CiAJCXVkZWxheSgxMCk7CiAKQEAgLTk2NSw3ICs5NjMsNyBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDaGVjayBmb3IgYSBiYWQgbGluayBjb25kaXRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkLgorICogQ2hlY2sgZm9yIGEgYmFkIGxpbmsgY29uZGl0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJyZWQuCiAgKiBUaGUgaW5kaWNhdGlvbiBpcyB0aGF0IHRoZSBSRkMgLyBMRkMgcmVnaXN0ZXJzIG1heSBiZSBpbmNyZW1lbnRpbmcKICAqIGNvbnRpbnVhbGx5LiAgQSBmdWxsIGFkYXB0ZXIgcmVzZXQgaXMgcmVxdWlyZWQgdG8gcmVjb3Zlci4KICAqCkBAIC0xMDA3LDcgKzEwMDUsNyBAQAogCURFQlVHRlVOQygiaXhnYl9jbGVhcl9od19jbnRycyIpOwogCiAJLyogaWYgd2UgYXJlIHN0b3BwZWQgb3IgcmVzZXR0aW5nIGV4aXQgZ3JhY2VmdWxseSAqLwotCWlmKGh3LT5hZGFwdGVyX3N0b3BwZWQpIHsKKwlpZiAoaHctPmFkYXB0ZXJfc3RvcHBlZCkgewogCQlERUJVR09VVCgiRXhpdGluZyBiZWNhdXNlIHRoZSBhZGFwdGVyIGlzIHN0b3BwZWQhISFcbiIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmggYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuaAppbmRleCAzOWNmYTQ3Li44MzFmZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuaAorKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgUFJPLzEwR2JFIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2lkcy5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2lkcy5oCmluZGV4IDE4MGQyMGUuLjJhNTg4NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9pZHMuaAorKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaWRzLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMEdiRSBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM4LDExICszOCwxMSBAQAogI2RlZmluZSBTVU5fVkVORE9SX0lEICAgICAgICAgICAgICAgMHgxMDhFCiAjZGVmaW5lIFNVTl9TVUJWRU5ET1JfSUQgICAgICAgICAgICAweDEwOEUKIAotI2RlZmluZSBJWEdCX0RFVklDRV9JRF84MjU5N0VYICAgICAgMHgxMDQ4ICAgCi0jZGVmaW5lIElYR0JfREVWSUNFX0lEXzgyNTk3RVhfU1IgICAweDFBNDggICAKKyNkZWZpbmUgSVhHQl9ERVZJQ0VfSURfODI1OTdFWCAgICAgIDB4MTA0OAorI2RlZmluZSBJWEdCX0RFVklDRV9JRF84MjU5N0VYX1NSICAgMHgxQTQ4CiAjZGVmaW5lIElYR0JfREVWSUNFX0lEXzgyNTk3RVhfTFIgICAweDFCNDgKLSNkZWZpbmUgSVhHQl9TVUJERVZJQ0VfSURfQTExRiAgICAgIDB4QTExRiAgIAotI2RlZmluZSBJWEdCX1NVQkRFVklDRV9JRF9BMDFGICAgICAgMHhBMDFGICAgCisjZGVmaW5lIElYR0JfU1VCREVWSUNFX0lEX0ExMUYgICAgICAweEExMUYKKyNkZWZpbmUgSVhHQl9TVUJERVZJQ0VfSURfQTAxRiAgICAgIDB4QTAxRgogCiAjZGVmaW5lIElYR0JfREVWSUNFX0lEXzgyNTk3RVhfQ1g0ICAgMHgxMDlFCiAjZGVmaW5lIElYR0JfU1VCREVWSUNFX0lEX0EwMEMgIDB4QTAwQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggY2I4ZGFkZC4uYWE3NTM4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgUFJPLzEwR2JFIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzEsMTQgKzMxLDE2IEBACiBjaGFyIGl4Z2JfZHJpdmVyX25hbWVbXSA9ICJpeGdiIjsKIHN0YXRpYyBjaGFyIGl4Z2JfZHJpdmVyX3N0cmluZ1tdID0gIkludGVsKFIpIFBSTy8xMEdiRSBOZXR3b3JrIERyaXZlciI7CiAKLSNpZm5kZWYgQ09ORklHX0lYR0JfTkFQSQotI2RlZmluZSBEUklWRVJOQVBJCi0jZWxzZQogI2RlZmluZSBEUklWRVJOQVBJICItTkFQSSIKLSNlbmRpZgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4xMjYtazQiRFJJVkVSTkFQSQorI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjEzNS1rMiIgRFJJVkVSTkFQSQogY29uc3QgY2hhciBpeGdiX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKLXN0YXRpYyBjb25zdCBjaGFyIGl4Z2JfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIjsKK3N0YXRpYyBjb25zdCBjaGFyIGl4Z2JfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggSW50ZWwgQ29ycG9yYXRpb24uIjsKKworI2RlZmluZSBJWEdCX0NCX0xFTkdUSCAyNTYKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29weWJyZWFrIF9fcmVhZF9tb3N0bHkgPSBJWEdCX0NCX0xFTkdUSDsKK21vZHVsZV9wYXJhbShjb3B5YnJlYWssIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjb3B5YnJlYWssCisJIk1heGltdW0gc2l6ZSBvZiBwYWNrZXQgdGhhdCBpcyBjb3BpZWQgdG8gYSBuZXcgYnVmZmVyIG9uIHJlY2VpdmUiKTsKIAogLyogaXhnYl9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQogICoKQEAgLTU1LDcgKzU3LDcgQEAKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe0lOVEVMX1ZFTkRPUl9JRCwgSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9TUiwKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0Je0lOVEVMX1ZFTkRPUl9JRCwgSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9MUiwgIAorCXtJTlRFTF9WRU5ET1JfSUQsIElYR0JfREVWSUNFX0lEXzgyNTk3RVhfTFIsCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwpAQCAtNjUsMTYgKzY3LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpeGdiX3BjaV90YmwpOwogCiAvKiBMb2NhbCBGdW5jdGlvbiBQcm90b3R5cGVzICovCi0KLWludCBpeGdiX3VwKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBpeGdiX2Rvd24oc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBraWxsX3dhdGNoZG9nKTsKLXZvaWQgaXhnYl9yZXNldChzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKLWludCBpeGdiX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKLWludCBpeGdiX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgaXhnYl9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgaXhnYl9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgaXhnYl91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcik7Ci0KIHN0YXRpYyBpbnQgaXhnYl9pbml0X21vZHVsZSh2b2lkKTsKIHN0YXRpYyB2b2lkIGl4Z2JfZXhpdF9tb2R1bGUodm9pZCk7CiBzdGF0aWMgaW50IGl4Z2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwpAQCAtOTYsMTggKzg4LDE1IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaXhnYl9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpOwogc3RhdGljIGJvb2wgaXhnYl9jbGVhbl90eF9pcnEoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcik7CiAKLSNpZmRlZiBDT05GSUdfSVhHQl9OQVBJCi1zdGF0aWMgaW50IGl4Z2JfY2xlYW4oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKLXN0YXRpYyBib29sIGl4Z2JfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pOwotI2Vsc2UKLXN0YXRpYyBib29sIGl4Z2JfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwotI2VuZGlmCi1zdGF0aWMgdm9pZCBpeGdiX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IGl4Z2JfY2xlYW4oc3RydWN0IG5hcGlfc3RydWN0ICosIGludCk7CitzdGF0aWMgYm9vbCBpeGdiX2NsZWFuX3J4X2lycShzdHJ1Y3QgaXhnYl9hZGFwdGVyICosIGludCAqLCBpbnQpOworc3RhdGljIHZvaWQgaXhnYl9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKiwgaW50KTsKKwogc3RhdGljIHZvaWQgaXhnYl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaXhnYl90eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwogc3RhdGljIHZvaWQgaXhnYl92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKTsKIHN0YXRpYyB2b2lkIGl4Z2Jfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpOwogc3RhdGljIHZvaWQgaXhnYl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpOwogc3RhdGljIHZvaWQgaXhnYl9yZXN0b3JlX3ZsYW4oc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcik7CkBAIC0xMTgsNyArMTA3LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpeGdiX2lvX2Vycm9yX2RldGVjdGVkIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkgICAgICAgICAgICAgICAgICAgICBlbnVtIHBjaV9jaGFubmVsX3N0YXRlIHN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZSk7CiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpeGdiX2lvX3Nsb3RfcmVzZXQgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHN0YXRpYyB2b2lkIGl4Z2JfaW9fcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAKQEAgLTE0NiwxNCArMTM1LDYgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMD1ub25lLC4uLiwxNj1hbGwpIik7CiAKLS8qIHNvbWUgZGVmaW5lcyBmb3IgY29udHJvbGxpbmcgZGVzY3JpcHRvciBmZXRjaGVzIGluIGgvdyAqLwotI2RlZmluZSBSWERDVExfV1RIUkVTSF9ERUZBVUxUIDE1ICAvKiBjaGlwIHdyaXRlcyBiYWNrIGF0IHRoaXMgbWFueSBvciBSWFQwICovCi0jZGVmaW5lIFJYRENUTF9QVEhSRVNIX0RFRkFVTFQgMCAgIC8qIGNoaXAgY29uc2lkZXJzIHByZWZlY2ggYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyAqLwotI2RlZmluZSBSWERDVExfSFRIUkVTSF9ERUZBVUxUIDAgICAvKiBjaGlwIHdpbGwgb25seSBwcmVmZXRjaCBpZiB0YWlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlzIHB1c2hlZCB0aGlzIG1hbnkgZGVzY3JpcHRvcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZnJvbSBoZWFkICovCi0KIC8qKgogICogaXhnYl9pbml0X21vZHVsZSAtIERyaXZlciBSZWdpc3RyYXRpb24gUm91dGluZQogICoKQEAgLTIzNiw3ICsyMTcsNyBAQAogCWl4Z2JfY29uZmlndXJlX3R4KGFkYXB0ZXIpOwogCWl4Z2Jfc2V0dXBfcmN0bChhZGFwdGVyKTsKIAlpeGdiX2NvbmZpZ3VyZV9yeChhZGFwdGVyKTsKLQlpeGdiX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlcik7CisJaXhnYl9hbGxvY19yeF9idWZmZXJzKGFkYXB0ZXIsIElYR0JfREVTQ19VTlVTRUQoJmFkYXB0ZXItPnJ4X3JpbmcpKTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgZ2V0IHRoZSBoYXJkd2FyZSBpbnRvIGEga25vd24gc3RhdGUgKi8KIAlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgMHhmZmZmZmZmZik7CkBAIC0yNjEsNyArMjQyLDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZigoaHctPm1heF9mcmFtZV9zaXplICE9IG1heF9mcmFtZSkgfHwKKwlpZiAoKGh3LT5tYXhfZnJhbWVfc2l6ZSAhPSBtYXhfZnJhbWUpIHx8CiAJCShody0+bWF4X2ZyYW1lX3NpemUgIT0KIAkJKElYR0JfUkVBRF9SRUcoaHcsIE1GUykgPj4gSVhHQl9NRlNfU0hJRlQpKSkgewogCkBAIC0yNjksMTEgKzI1MCwxMSBAQAogCiAJCUlYR0JfV1JJVEVfUkVHKGh3LCBNRlMsIGh3LT5tYXhfZnJhbWVfc2l6ZSA8PCBJWEdCX01GU19TSElGVCk7CiAKLQkJaWYoaHctPm1heF9mcmFtZV9zaXplID4KKwkJaWYgKGh3LT5tYXhfZnJhbWVfc2l6ZSA+CiAJCSAgIElYR0JfTUFYX0VORVRfRlJBTUVfU0laRV9XSVRIT1VUX0ZDUyArIEVORVRfRkNTX0xFTkdUSCkgewogCQkJdTMyIGN0cmwwID0gSVhHQl9SRUFEX1JFRyhodywgQ1RSTDApOwogCi0JCQlpZighKGN0cmwwICYgSVhHQl9DVFJMMF9KRkUpKSB7CisJCQlpZiAoIShjdHJsMCAmIElYR0JfQ1RSTDBfSkZFKSkgewogCQkJCWN0cmwwIHw9IElYR0JfQ1RSTDBfSkZFOwogCQkJCUlYR0JfV1JJVEVfUkVHKGh3LCBDVFJMMCwgY3RybDApOwogCQkJfQpAQCAtMjgyLDkgKzI2Myw3IEBACiAKIAljbGVhcl9iaXQoX19JWEdCX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CiAKLSNpZmRlZiBDT05GSUdfSVhHQl9OQVBJCiAJbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOwotI2VuZGlmCiAJaXhnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCiAJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CkBAIC0zMDAsOSArMjc5LDcgQEAKIAkvKiBwcmV2ZW50IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmcm9tIHJlc3RhcnRpbmcgd2F0Y2hkb2cgKi8KIAlzZXRfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpOwogCi0jaWZkZWYgQ09ORklHX0lYR0JfTkFQSQogCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0jZW5kaWYKIAkvKiB3YWl0aW5nIGZvciBOQVBJIHRvIGNvbXBsZXRlIGNhbiByZS1lbmFibGUgaW50ZXJydXB0cyAqLwogCWl4Z2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAJZnJlZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCBuZXRkZXYpOwpAQCAtMzEwLDcgKzI4Nyw3IEBACiAJaWYgKGFkYXB0ZXItPmhhdmVfbXNpKQogCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7CiAKLQlpZihraWxsX3dhdGNoZG9nKQorCWlmIChraWxsX3dhdGNoZG9nKQogCQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwogCiAJYWRhcHRlci0+bGlua19zcGVlZCA9IDA7CkBAIC0zNTcsMjcgKzMzNCwyNSBAQAogICoqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotaXhnYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK2l4Z2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcjsKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kID0gMDsKLQl1bnNpZ25lZCBsb25nIG1taW9fc3RhcnQ7Ci0JaW50IG1taW9fbGVuOwogCWludCBwY2lfdXNpbmdfZGFjOwogCWludCBpOwogCWludCBlcnI7CiAKLQlpZigoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKQorCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZighKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSAmJgotCSAgICEoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkpIHsKKwlpZiAoIShlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkgJiYKKwkgICAgIShlcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSkgewogCQlwY2lfdXNpbmdfZGFjID0gMTsKIAl9IGVsc2UgewotCQlpZigoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHx8Ci0JCSAgIChlcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSkgeworCQlpZiAoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB8fAorCQkgICAgKGVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAiaXhnYjogTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9kbWFfbWFzazsKQEAgLTM4NSwxMyArMzYwLDE0IEBACiAJCXBjaV91c2luZ19kYWMgPSAwOwogCX0KIAotCWlmKChlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGl4Z2JfZHJpdmVyX25hbWUpKSkKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGl4Z2JfZHJpdmVyX25hbWUpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlcXVlc3RfcmVnaW9uczsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBpeGdiX2FkYXB0ZXIpKTsKLQlpZighbmV0ZGV2KSB7CisJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2NfZXRoZXJkZXY7CiAJfQpAQCAtNDA1LDE5ICszODEsMTcgQEAKIAlhZGFwdGVyLT5ody5iYWNrID0gYWRhcHRlcjsKIAlhZGFwdGVyLT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIERFRkFVTFRfREVCVUdfTEVWRUxfU0hJRlQpOwogCi0JbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBCQVJfMCk7Ci0JbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIEJBUl8wKTsKLQotCWFkYXB0ZXItPmh3Lmh3X2FkZHIgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKLQlpZighYWRhcHRlci0+aHcuaHdfYWRkcikgeworCWFkYXB0ZXItPmh3Lmh3X2FkZHIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBCQVJfMCksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBCQVJfMCkpOworCWlmICghYWRhcHRlci0+aHcuaHdfYWRkcikgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAotCWZvcihpID0gQkFSXzE7IGkgPD0gQkFSXzU7IGkrKykgewotCQlpZihwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpID09IDApCisJZm9yIChpID0gQkFSXzE7IGkgPD0gQkFSXzU7IGkrKykgeworCQlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSA9PSAwKQogCQkJY29udGludWU7Ci0JCWlmKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIElPUkVTT1VSQ0VfSU8pIHsKIAkJCWFkYXB0ZXItPmh3LmlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CiAJCQlicmVhazsKIAkJfQpAQCAtNDMzLDkgKzQwNyw3IEBACiAJaXhnYl9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAluZXRkZXYtPnR4X3RpbWVvdXQgPSAmaXhnYl90eF90aW1lb3V0OwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7Ci0jaWZkZWYgQ09ORklHX0lYR0JfTkFQSQogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksIGl4Z2JfY2xlYW4sIDY0KTsKLSNlbmRpZgogCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGl4Z2Jfdmxhbl9yeF9yZWdpc3RlcjsKIAluZXRkZXYtPnZsYW5fcnhfYWRkX3ZpZCA9IGl4Z2Jfdmxhbl9yeF9hZGRfdmlkOwogCW5ldGRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGl4Z2Jfdmxhbl9yeF9raWxsX3ZpZDsKQEAgLTQ0NCw5ICs0MTYsNiBAQAogI2VuZGlmCiAKIAlzdHJuY3B5KG5ldGRldi0+bmFtZSwgcGNpX25hbWUocGRldiksIHNpemVvZihuZXRkZXYtPm5hbWUpIC0gMSk7Ci0JbmV0ZGV2LT5tZW1fc3RhcnQgPSBtbWlvX3N0YXJ0OwotCW5ldGRldi0+bWVtX2VuZCA9IG1taW9fc3RhcnQgKyBtbWlvX2xlbjsKLQluZXRkZXYtPmJhc2VfYWRkciA9IGFkYXB0ZXItPmh3LmlvX2Jhc2U7CiAKIAlhZGFwdGVyLT5iZF9udW1iZXIgPSBjYXJkc19mb3VuZDsKIAlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKQEAgLTQ1NCw3ICs0MjMsOCBAQAogCiAJLyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovCiAKLQlpZigoZXJyID0gaXhnYl9zd19pbml0KGFkYXB0ZXIpKSkKKwllcnIgPSBpeGdiX3N3X2luaXQoYWRhcHRlcik7CisJaWYgKGVycikKIAkJZ290byBlcnJfc3dfaW5pdDsKIAogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKQEAgLTQ2MywxNiArNDMzLDEzIEBACiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fUlggfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotI2lmZGVmIE5FVElGX0ZfTExUWAotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwotI2VuZGlmCiAKLQlpZihwY2lfdXNpbmdfZGFjKQorCWlmIChwY2lfdXNpbmdfZGFjKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAogCS8qIG1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KIAotCWlmKCFpeGdiX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bSgmYWRhcHRlci0+aHcpKSB7CisJaWYgKCFpeGdiX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bSgmYWRhcHRlci0+aHcpKSB7CiAJCURQUklOVEsoUFJPQkUsIEVSUiwgIlRoZSBFRVBST00gQ2hlY2tzdW0gSXMgTm90IFZhbGlkXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfZWVwcm9tOwpAQCAtNDgxLDcgKzQ0OCw3IEBACiAJaXhnYl9nZXRfZWVfbWFjX2FkZHIoJmFkYXB0ZXItPmh3LCBuZXRkZXYtPmRldl9hZGRyKTsKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCi0JaWYoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7CisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+cGVybV9hZGRyKSkgewogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJJbnZhbGlkIE1BQyBBZGRyZXNzXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfZWVwcm9tOwpAQCAtNDk2LDcgKzQ2Myw4IEBACiAJSU5JVF9XT1JLKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2ssIGl4Z2JfdHhfdGltZW91dF90YXNrKTsKIAogCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOwotCWlmKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSkpCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJaWYgKGVycikKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAKIAkvKiB3ZSdyZSBnb2luZyB0byByZXNldCwgc28gYXNzdW1lIHdlIGhhdmUgbm8gbGluayBmb3Igbm93ICovCkBAIC01NDMsNiArNTExLDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKIAlpb3VubWFwKGFkYXB0ZXItPmh3Lmh3X2FkZHIpOwpAQCAtNTc1LDEzICs1NDUsMTMgQEAKIAlody0+c3Vic3lzdGVtX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKIAogCWh3LT5tYXhfZnJhbWVfc2l6ZSA9IG5ldGRldi0+bXR1ICsgRU5FVF9IRUFERVJfU0laRSArIEVORVRfRkNTX0xFTkdUSDsKLQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gaHctPm1heF9mcmFtZV9zaXplOworCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBody0+bWF4X2ZyYW1lX3NpemUgKyA4OyAvKiArIDggZm9yIGVycmF0YSAqLwogCi0JaWYoKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWCkKKwlpZiAoKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWCkKIAkgICB8fCAoaHctPmRldmljZV9pZCA9PSBJWEdCX0RFVklDRV9JRF84MjU5N0VYX0NYNCkKIAkgICB8fCAoaHctPmRldmljZV9pZCA9PSBJWEdCX0RFVklDRV9JRF84MjU5N0VYX0xSKQogCSAgIHx8IChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfU1IpKQotCQkJaHctPm1hY190eXBlID0gaXhnYl84MjU5NzsKKwkJaHctPm1hY190eXBlID0gaXhnYl84MjU5NzsKIAllbHNlIHsKIAkJLyogc2hvdWxkIG5ldmVyIGhhdmUgbG9hZGVkIG9uIHRoaXMgZGV2aWNlICovCiAJCURQUklOVEsoUFJPQkUsIEVSUiwgInVuc3VwcG9ydGVkIGRldmljZSBpZFxuIik7CkBAIC01OTAsOCArNTYwLDYgQEAKIAkvKiBlbmFibGUgZmxvdyBjb250cm9sIHRvIGJlIHByb2dyYW1tZWQgKi8KIAlody0+ZmMuc2VuZF94b24gPSAxOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X2xvY2spOwotCiAJc2V0X2JpdChfX0lYR0JfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYxNiwxNiArNTg0LDE4IEBACiAJaW50IGVycjsKIAogCS8qIGFsbG9jYXRlIHRyYW5zbWl0IGRlc2NyaXB0b3JzICovCi0KLQlpZigoZXJyID0gaXhnYl9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlcikpKQorCWVyciA9IGl4Z2Jfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX3NldHVwX3R4OwogCiAJLyogYWxsb2NhdGUgcmVjZWl2ZSBkZXNjcmlwdG9ycyAqLwogCi0JaWYoKGVyciA9IGl4Z2Jfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpKSkKKwllcnIgPSBpeGdiX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKQogCQlnb3RvIGVycl9zZXR1cF9yeDsKIAotCWlmKChlcnIgPSBpeGdiX3VwKGFkYXB0ZXIpKSkKKwllcnIgPSBpeGdiX3VwKGFkYXB0ZXIpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX3VwOwogCiAJcmV0dXJuIDA7CkBAIC02ODEsNyArNjUxLDcgQEAKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JfYnVmZmVyKSAqIHR4ZHItPmNvdW50OwogCXR4ZHItPmJ1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKLQlpZighdHhkci0+YnVmZmVyX2luZm8pIHsKKwlpZiAoIXR4ZHItPmJ1ZmZlcl9pbmZvKSB7CiAJCURQUklOVEsoUFJPQkUsIEVSUiwKIAkJICJVbmFibGUgdG8gYWxsb2NhdGUgdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjk0LDcgKzY2NCw3IEBACiAJdHhkci0+c2l6ZSA9IEFMSUdOKHR4ZHItPnNpemUsIDQwOTYpOwogCiAJdHhkci0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4ZHItPnNpemUsICZ0eGRyLT5kbWEpOwotCWlmKCF0eGRyLT5kZXNjKSB7CisJaWYgKCF0eGRyLT5kZXNjKSB7CiAJCXZmcmVlKHR4ZHItPmJ1ZmZlcl9pbmZvKTsKIAkJRFBSSU5USyhQUk9CRSwgRVJSLAogCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9yIG1lbW9yeVxuIik7CkBAIC03MjMsOCArNjkzLDggQEAKIAl1MzIgdGN0bDsKIAlzdHJ1Y3QgaXhnYl9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQkvKiBTZXR1cCB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBUeCBEZXNjcmlwdG9yIFJpbmcgCi0JICogdHhfcmluZy5kbWEgY2FuIGJlIGVpdGhlciBhIDMyIG9yIDY0IGJpdCB2YWx1ZSAKKwkvKiBTZXR1cCB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBUeCBEZXNjcmlwdG9yIFJpbmcKKwkgKiB0eF9yaW5nLmRtYSBjYW4gYmUgZWl0aGVyIGEgMzIgb3IgNjQgYml0IHZhbHVlCiAJICovCiAKIAlJWEdCX1dSSVRFX1JFRyhodywgVERCQUwsICh0ZGJhICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSk7CkBAIC03NTAsOCArNzIwLDggQEAKIAogCS8qIFNldHVwIFRyYW5zbWl0IERlc2NyaXB0b3IgU2V0dGluZ3MgZm9yIHRoaXMgYWRhcHRlciAqLwogCWFkYXB0ZXItPnR4X2NtZF90eXBlID0KLQkJSVhHQl9UWF9ERVNDX1RZUEUgCi0JCXwgKGFkYXB0ZXItPnR4X2ludF9kZWxheV9lbmFibGUgPyBJWEdCX1RYX0RFU0NfQ01EX0lERSA6IDApOworCQlJWEdCX1RYX0RFU0NfVFlQRSB8CisJCShhZGFwdGVyLT50eF9pbnRfZGVsYXlfZW5hYmxlID8gSVhHQl9UWF9ERVNDX0NNRF9JREUgOiAwKTsKIH0KIAogLyoqCkBAIC03NzAsNyArNzQwLDcgQEAKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JfYnVmZmVyKSAqIHJ4ZHItPmNvdW50OwogCXJ4ZHItPmJ1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKLQlpZighcnhkci0+YnVmZmVyX2luZm8pIHsKKwlpZiAoIXJ4ZHItPmJ1ZmZlcl9pbmZvKSB7CiAJCURQUklOVEsoUFJPQkUsIEVSUiwKIAkJICJVbmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmdcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc4NCw3ICs3NTQsNyBAQAogCiAJcnhkci0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHJ4ZHItPnNpemUsICZyeGRyLT5kbWEpOwogCi0JaWYoIXJ4ZHItPmRlc2MpIHsKKwlpZiAoIXJ4ZHItPmRlc2MpIHsKIAkJdmZyZWUocnhkci0+YnVmZmVyX2luZm8pOwogCQlEUFJJTlRLKFBST0JFLCBFUlIsCiAJCSAiVW5hYmxlIHRvIGFsbG9jYXRlIHJlY2VpdmUgZGVzY3JpcHRvcnNcbiIpOwpAQCAtODEzLDggKzc4Myw4IEBACiAJcmN0bCAmPSB+KDMgPDwgSVhHQl9SQ1RMX01PX1NISUZUKTsKIAogCXJjdGwgfD0KLQkJSVhHQl9SQ1RMX0JBTSB8IElYR0JfUkNUTF9SRE1UU18xXzIgfCAKLQkJSVhHQl9SQ1RMX1JYRU4gfCBJWEdCX1JDVExfQ0ZGIHwgCisJCUlYR0JfUkNUTF9CQU0gfCBJWEdCX1JDVExfUkRNVFNfMV8yIHwKKwkJSVhHQl9SQ1RMX1JYRU4gfCBJWEdCX1JDVExfQ0ZGIHwKIAkJKGFkYXB0ZXItPmh3Lm1jX2ZpbHRlcl90eXBlIDw8IElYR0JfUkNUTF9NT19TSElGVCk7CiAKIAlyY3RsIHw9IElYR0JfUkNUTF9TRUNSQzsKQEAgLTg0Niw3ICs4MTYsNiBAQAogCXN0cnVjdCBpeGdiX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcmN0bDsKIAl1MzIgcnhjc3VtOwotCXUzMiByeGRjdGw7CiAKIAkvKiBtYWtlIHN1cmUgcmVjZWl2ZXMgYXJlIGRpc2FibGVkIHdoaWxlIHNldHRpbmcgdXAgdGhlIGRlc2NyaXB0b3JzICovCiAKQEAgLTg2OCwxOCArODM3LDEyIEBACiAJSVhHQl9XUklURV9SRUcoaHcsIFJESCwgMCk7CiAJSVhHQl9XUklURV9SRUcoaHcsIFJEVCwgMCk7CiAKLQkvKiBzZXQgdXAgcHJlLWZldGNoaW5nIG9mIHJlY2VpdmUgYnVmZmVycyBzbyB3ZSBnZXQgc29tZSBiZWZvcmUgd2UKLQkgKiBydW4gb3V0IChkZWZhdWx0IGhhcmR3YXJlIGJlaGF2aW9yIGlzIHRvIHJ1biBvdXQgYmVmb3JlIGZldGNoaW5nCi0JICogbW9yZSkuICBUaGlzIHNldHMgdXAgdG8gZmV0Y2ggaWYgSFRIUkVTSCByeCBkZXNjcmlwdG9ycyBhcmUgYXZhaWwKLQkgKiBhbmQgdGhlIGRlc2NyaXB0b3JzIGluIGh3IGNhY2hlIGFyZSBiZWxvdyBQVEhSRVNILiAgVGhpcyBhdm9pZHMKLQkgKiB0aGUgaGFyZHdhcmUgYmVoYXZpb3Igb2YgZmV0Y2hpbmcgPD01MTIgZGVzY3JpcHRvcnMgaW4gYSBzaW5nbGUKLQkgKiBidXJzdCB0aGF0IHByZS1lbXB0cyBhbGwgb3RoZXIgYWN0aXZpdHksIHVzdWFsbHkgY2F1c2luZyBmaWZvCi0JICogb3ZlcmZsb3dzLiAqLwotCS8qIHVzZSBXVEhSRVNIIHRvIGJ1cnN0IHdyaXRlIDE2IGRlc2NyaXB0b3JzIG9yIGJ1cnN0IHdoZW4gUlhUMCAqLwotCXJ4ZGN0bCA9IFJYRENUTF9XVEhSRVNIX0RFRkFVTFQgPDwgSVhHQl9SWERDVExfV1RIUkVTSF9TSElGVCB8Ci0JICAgICAgICAgUlhEQ1RMX0hUSFJFU0hfREVGQVVMVCA8PCBJWEdCX1JYRENUTF9IVEhSRVNIX1NISUZUIHwKLQkgICAgICAgICBSWERDVExfUFRIUkVTSF9ERUZBVUxUIDw8IElYR0JfUlhEQ1RMX1BUSFJFU0hfU0hJRlQ7Ci0JSVhHQl9XUklURV9SRUcoaHcsIFJYRENUTCwgcnhkY3RsKTsKKwkvKiBkdWUgdG8gdGhlIGhhcmR3YXJlIGVycmF0YSB3aXRoIFJYRENUTCwgd2UgYXJlIHVuYWJsZSB0byB1c2UgYW55IG9mCisJICogdGhlIHBlcmZvcm1hbmNlIGVuaGFuY2luZyBmZWF0dXJlcyBvZiBpdCB3aXRob3V0IGNhdXNpbmcgb3RoZXIKKwkgKiBzdWJ0bGUgYnVncywgc29tZSBvZiB0aGUgYnVncyBjb3VsZCBpbmNsdWRlIHJlY2VpdmUgbGVuZ3RoCisJICogY29ycnVwdGlvbiBhdCBoaWdoIGRhdGEgcmF0ZXMgKFdUSFJFU0ggPiAwKSBhbmQvb3IgcmVjZWl2ZQorCSAqIGRlc2NyaXB0b3IgcmluZyBpcnJlZ3VsYXJpdGVzIChwYXJ0aWN1bGFybHkgaW4gaGFyZHdhcmUgY2FjaGUpICovCisJSVhHQl9XUklURV9SRUcoaHcsIFJYRENUTCwgMCk7CiAKIAkvKiBFbmFibGUgUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkIGZvciBUQ1AgYW5kIFVEUCAqLwogCWlmIChhZGFwdGVyLT5yeF9jc3VtKSB7CkBAIC05MTgsNyArODgxLDcgQEAKIAogc3RhdGljIHZvaWQKIGl4Z2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKQEAgLTkyNiw4ICs4ODksMTAgQEAKIAkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPmRtYSwgYnVmZmVyX2luZm8tPmxlbmd0aCwKIAkJICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CiAKKwkvKiBva2F5IHRvIGNhbGwga2ZyZWVfc2tiIGhlcmUgaW5zdGVhZCBvZiBrZnJlZV9za2JfYW55IGJlY2F1c2UKKwkgKiB0aGlzIGlzIG5ldmVyIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCAqLwogCWlmIChidWZmZXJfaW5mby0+c2tiKQotCQlkZXZfa2ZyZWVfc2tiX2FueShidWZmZXJfaW5mby0+c2tiKTsKKwkJZGV2X2tmcmVlX3NrYihidWZmZXJfaW5mby0+c2tiKTsKIAogCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwpAQCAtOTUyLDcgKzkxNyw3IEBACiAKIAkvKiBGcmVlIGFsbCB0aGUgVHggcmluZyBza19idWZmcyAqLwogCi0JZm9yKGkgPSAwOyBpIDwgdHhfcmluZy0+Y291bnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCB0eF9yaW5nLT5jb3VudDsgaSsrKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlpeGdiX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsIGJ1ZmZlcl9pbmZvKTsKIAl9CkBAIC0xMDEwLDkgKzk3NSw5IEBACiAKIAkvKiBGcmVlIGFsbCB0aGUgUnggcmluZyBza19idWZmcyAqLwogCi0JZm9yKGkgPSAwOyBpIDwgcnhfcmluZy0+Y291bnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5jb3VudDsgaSsrKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwotCQlpZihidWZmZXJfaW5mby0+c2tiKSB7CisJCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CiAKIAkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwKIAkJCQkJIGJ1ZmZlcl9pbmZvLT5kbWEsCkBAIC0xMDUzLDcgKzEwMTgsNyBAQAogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CiAKLQlpZighaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKQEAgLTEwODYsMTYgKzEwNTEsMjAgQEAKIAogCXJjdGwgPSBJWEdCX1JFQURfUkVHKGh3LCBSQ1RMKTsKIAotCWlmKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJcmN0bCB8PSAoSVhHQl9SQ1RMX1VQRSB8IElYR0JfUkNUTF9NUEUpOwotCX0gZWxzZSBpZihuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCXJjdGwgfD0gSVhHQl9SQ1RMX01QRTsKLQkJcmN0bCAmPSB+SVhHQl9SQ1RMX1VQRTsKKwkJcmN0bCAmPSB+SVhHQl9SQ1RMX1ZGRTsKIAl9IGVsc2UgewotCQlyY3RsICY9IH4oSVhHQl9SQ1RMX1VQRSB8IElYR0JfUkNUTF9NUEUpOworCQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQkJcmN0bCB8PSBJWEdCX1JDVExfTVBFOworCQkJcmN0bCAmPSB+SVhHQl9SQ1RMX1VQRTsKKwkJfSBlbHNlIHsKKwkJCXJjdGwgJj0gfihJWEdCX1JDVExfVVBFIHwgSVhHQl9SQ1RMX01QRSk7CisJCX0KKwkJcmN0bCB8PSBJWEdCX1JDVExfVkZFOwogCX0KIAotCWlmKG5ldGRldi0+bWNfY291bnQgPiBJWEdCX01BWF9OVU1fTVVMVElDQVNUX0FERFJFU1NFUykgeworCWlmIChuZXRkZXYtPm1jX2NvdW50ID4gSVhHQl9NQVhfTlVNX01VTFRJQ0FTVF9BRERSRVNTRVMpIHsKIAkJcmN0bCB8PSBJWEdCX1JDVExfTVBFOwogCQlJWEdCX1dSSVRFX1JFRyhodywgUkNUTCwgcmN0bCk7CiAJfSBlbHNlIHsKQEAgLTExMDQsMTAgKzEwNzMsMTEgQEAKIAogCQlJWEdCX1dSSVRFX1JFRyhodywgUkNUTCwgcmN0bCk7CiAKLQkJZm9yKGkgPSAwLCBtY19wdHIgPSBuZXRkZXYtPm1jX2xpc3Q7IG1jX3B0cjsKLQkJCWkrKywgbWNfcHRyID0gbWNfcHRyLT5uZXh0KQorCQlmb3IgKGkgPSAwLCBtY19wdHIgPSBuZXRkZXYtPm1jX2xpc3Q7CisJCSAgICAgbWNfcHRyOworCQkgICAgIGkrKywgbWNfcHRyID0gbWNfcHRyLT5uZXh0KQogCQkJbWVtY3B5KCZtdGFbaSAqIElYR0JfRVRIX0xFTkdUSF9PRl9BRERSRVNTXSwKLQkJCQkgICBtY19wdHItPmRtaV9hZGRyLCBJWEdCX0VUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisJCQkgICAgICAgbWNfcHRyLT5kbWlfYWRkciwgSVhHQl9FVEhfTEVOR1RIX09GX0FERFJFU1MpOwogCiAJCWl4Z2JfbWNfYWRkcl9saXN0X3VwZGF0ZShodywgbXRhLCBuZXRkZXYtPm1jX2NvdW50LCAwKTsKIAl9CkBAIC0xMTMyLDggKzExMDIsOCBAQAogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJfQogCi0JaWYoYWRhcHRlci0+aHcubGlua191cCkgewotCQlpZighbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJaWYgKGFkYXB0ZXItPmh3LmxpbmtfdXApIHsKKwkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJCURQUklOVEsoTElOSywgSU5GTywKIAkJCSAgICAgICAgIk5JQyBMaW5rIGlzIFVwIDEwMDAwIE1icHMgRnVsbCBEdXBsZXhcbiIpOwogCQkJYWRhcHRlci0+bGlua19zcGVlZCA9IDEwMDAwOwpAQCAtMTE0Miw3ICsxMTEyLDcgQEAKIAkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKIAkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gMDsKIAkJCURQUklOVEsoTElOSywgSU5GTywgIk5JQyBMaW5rIGlzIERvd25cbiIpOwpAQCAtMTE1NCw4ICsxMTI0LDggQEAKIAogCWl4Z2JfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwogCi0JaWYoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQlpZihJWEdCX0RFU0NfVU5VU0VEKHR4ZHIpICsgMSA8IHR4ZHItPmNvdW50KSB7CisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKKwkJaWYgKElYR0JfREVTQ19VTlVTRUQodHhkcikgKyAxIDwgdHhkci0+Y291bnQpIHsKIAkJCS8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAogCQkJICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmcKIAkJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgpAQCAtMTIyNyw3ICsxMTk3LDcgQEAKIAkJY29udGV4dF9kZXNjLT5oZHJfbGVuID0gaGRyX2xlbjsKIAkJY29udGV4dF9kZXNjLT5zdGF0dXMgPSAwOwogCQljb250ZXh0X2Rlc2MtPmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKAotCQkJCQkJICBJWEdCX0NPTlRFWFRfREVTQ19UWVBFIAorCQkJCQkJICBJWEdCX0NPTlRFWFRfREVTQ19UWVBFCiAJCQkJCQl8IElYR0JfQ09OVEVYVF9ERVNDX0NNRF9UU0UKIAkJCQkJCXwgSVhHQl9DT05URVhUX0RFU0NfQ01EX0lQCiAJCQkJCQl8IElYR0JfQ09OVEVYVF9ERVNDX0NNRF9UQ1AKQEAgLTEyMzUsNyArMTIwNSw3IEBACiAJCQkJCQl8IChza2ItPmxlbiAtIChoZHJfbGVuKSkpOwogCiAKLQkJaWYoKytpID09IGFkYXB0ZXItPnR4X3JpbmcuY291bnQpIGkgPSAwOworCQlpZiAoKytpID09IGFkYXB0ZXItPnR4X3JpbmcuY291bnQpIGkgPSAwOwogCQlhZGFwdGVyLT50eF9yaW5nLm5leHRfdG9fdXNlID0gaTsKIAogCQlyZXR1cm4gMTsKQEAgLTEyNTEsNyArMTIyMSw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAJdTggY3NzLCBjc287CiAKLQlpZihsaWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHsKKwlpZiAobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSB7CiAJCXN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJCWNzcyA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CiAJCWNzbyA9IGNzcyArIHNrYi0+Y3N1bV9vZmZzZXQ7CkBAIC0xMjczLDcgKzEyNDMsNyBAQAogCQkJY3B1X3RvX2xlMzIoSVhHQl9DT05URVhUX0RFU0NfVFlQRQogCQkJCSAgICB8IElYR0JfVFhfREVTQ19DTURfSURFKTsKIAotCQlpZigrK2kgPT0gYWRhcHRlci0+dHhfcmluZy5jb3VudCkgaSA9IDA7CisJCWlmICgrK2kgPT0gYWRhcHRlci0+dHhfcmluZy5jb3VudCkgaSA9IDA7CiAJCWFkYXB0ZXItPnR4X3JpbmcubmV4dF90b191c2UgPSBpOwogCiAJCXJldHVybiB0cnVlOwpAQCAtMTMwMiw3ICsxMjcyLDcgQEAKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAotCXdoaWxlKGxlbikgeworCXdoaWxlIChsZW4pIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXNpemUgPSBtaW4obGVuLCBJWEdCX01BWF9EQVRBX1BFUl9UWEQpOwogCQkvKiBXb3JrYXJvdW5kIGZvciBwcmVtYXR1cmUgZGVzYyB3cml0ZS1iYWNrcwpAQCAtMTMxMiwyOCArMTI4MiwyOCBAQAogCiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwogCQlXQVJOX09OKGJ1ZmZlcl9pbmZvLT5kbWEgIT0gMCk7CisJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJYnVmZmVyX2luZm8tPmRtYSA9CiAJCQlwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAogCQkJCXNrYi0+ZGF0YSArIG9mZnNldCwKIAkJCQlzaXplLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gMDsKIAogCQlsZW4gLT0gc2l6ZTsKIAkJb2Zmc2V0ICs9IHNpemU7CiAJCWNvdW50Kys7Ci0JCWlmKCsraSA9PSB0eF9yaW5nLT5jb3VudCkgaSA9IDA7CisJCWlmICgrK2kgPT0gdHhfcmluZy0+Y291bnQpIGkgPSAwOwogCX0KIAotCWZvcihmID0gMDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKKwlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewogCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOwogCiAJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKIAkJbGVuID0gZnJhZy0+c2l6ZTsKIAkJb2Zmc2V0ID0gMDsKIAotCQl3aGlsZShsZW4pIHsKKwkJd2hpbGUgKGxlbikgewogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQlzaXplID0gbWluKGxlbiwgSVhHQl9NQVhfREFUQV9QRVJfVFhEKTsKIApAQCAtMTM0NCwxOSArMTMxNCwxOSBAQAogCQkJCXNpemUgLT0gNDsKIAogCQkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CisJCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCQlidWZmZXJfaW5mby0+ZG1hID0KIAkJCQlwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKIAkJCQkJZnJhZy0+cGFnZSwKIAkJCQkJZnJhZy0+cGFnZV9vZmZzZXQgKyBvZmZzZXQsCiAJCQkJCXNpemUsCiAJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSAwOwogCiAJCQlsZW4gLT0gc2l6ZTsKIAkJCW9mZnNldCArPSBzaXplOwogCQkJY291bnQrKzsKLQkJCWlmKCsraSA9PSB0eF9yaW5nLT5jb3VudCkgaSA9IDA7CisJCQlpZiAoKytpID09IHR4X3JpbmctPmNvdW50KSBpID0gMDsKIAkJfQogCX0KIAlpID0gKGkgPT0gMCkgPyB0eF9yaW5nLT5jb3VudCAtIDEgOiBpIC0gMTsKQEAgLTEzNzcsMjEgKzEzNDcsMjAgQEAKIAl1OCBwb3B0cyA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlpZih0eF9mbGFncyAmIElYR0JfVFhfRkxBR1NfVFNPKSB7CisJaWYgKHR4X2ZsYWdzICYgSVhHQl9UWF9GTEFHU19UU08pIHsKIAkJY21kX3R5cGVfbGVuIHw9IElYR0JfVFhfREVTQ19DTURfVFNFOwogCQlwb3B0cyB8PSAoSVhHQl9UWF9ERVNDX1BPUFRTX0lYU00gfCBJWEdCX1RYX0RFU0NfUE9QVFNfVFhTTSk7CiAJfQogCi0JaWYodHhfZmxhZ3MgJiBJWEdCX1RYX0ZMQUdTX0NTVU0pCisJaWYgKHR4X2ZsYWdzICYgSVhHQl9UWF9GTEFHU19DU1VNKQogCQlwb3B0cyB8PSBJWEdCX1RYX0RFU0NfUE9QVFNfVFhTTTsKIAotCWlmKHR4X2ZsYWdzICYgSVhHQl9UWF9GTEFHU19WTEFOKSB7CisJaWYgKHR4X2ZsYWdzICYgSVhHQl9UWF9GTEFHU19WTEFOKQogCQljbWRfdHlwZV9sZW4gfD0gSVhHQl9UWF9ERVNDX0NNRF9WTEU7Ci0JfQogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwogCi0Jd2hpbGUoY291bnQtLSkgeworCXdoaWxlIChjb3VudC0tKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQl0eF9kZXNjID0gSVhHQl9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKIAkJdHhfZGVzYy0+YnVmZl9hZGRyID0gY3B1X3RvX2xlNjQoYnVmZmVyX2luZm8tPmRtYSk7CkBAIC0xNDAxLDExICsxMzcwLDExIEBACiAJCXR4X2Rlc2MtPnBvcHRzID0gcG9wdHM7CiAJCXR4X2Rlc2MtPnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX2lkKTsKIAotCQlpZigrK2kgPT0gdHhfcmluZy0+Y291bnQpIGkgPSAwOworCQlpZiAoKytpID09IHR4X3JpbmctPmNvdW50KSBpID0gMDsKIAl9CiAKLQl0eF9kZXNjLT5jbWRfdHlwZV9sZW4gfD0gY3B1X3RvX2xlMzIoSVhHQl9UWF9ERVNDX0NNRF9FT1AgCi0JCQkJfCBJWEdCX1RYX0RFU0NfQ01EX1JTICk7CisJdHhfZGVzYy0+Y21kX3R5cGVfbGVuIHw9CisJCWNwdV90b19sZTMyKElYR0JfVFhfREVTQ19DTURfRU9QIHwgSVhHQl9UWF9ERVNDX0NNRF9SUyk7CiAKIAkvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdwogCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5CkBAIC0xNDYxLDcgKzE0MzAsNiBAQAogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXVuc2lnbmVkIGludCBmaXJzdDsKIAl1bnNpZ25lZCBpbnQgdHhfZmxhZ3MgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHZsYW5faWQgPSAwOwogCWludCB0c287CiAKQEAgLTE0NzAsNTEgKzE0MzgsMzEgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKLQlpZihza2ItPmxlbiA8PSAwKSB7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJaWYgKHNrYi0+bGVuIDw9IDApIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKLSNpZmRlZiBORVRJRl9GX0xMVFgKLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncykpIHsKLQkJLyogQ29sbGlzaW9uIC0gdGVsbCB1cHBlciBsYXllciB0byByZXF1ZXVlICovCi0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0JfQotI2Vsc2UKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOwotI2VuZGlmCi0KIAlpZiAodW5saWtlbHkoaXhnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgJmFkYXB0ZXItPnR4X3JpbmcsCi0gICAgICAgICAgICAgICAgICAgICBERVNDX05FRURFRCkpKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgREVTQ19ORUVERUQpKSkKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KIAotI2lmbmRlZiBORVRJRl9GX0xMVFgKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncyk7Ci0jZW5kaWYKLQotCWlmKGFkYXB0ZXItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChhZGFwdGVyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKIAkJdHhfZmxhZ3MgfD0gSVhHQl9UWF9GTEFHU19WTEFOOwogCQl2bGFuX2lkID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CiAJfQogCiAJZmlyc3QgPSBhZGFwdGVyLT50eF9yaW5nLm5leHRfdG9fdXNlOwotCQorCiAJdHNvID0gaXhnYl90c28oYWRhcHRlciwgc2tiKTsKIAlpZiAodHNvIDwgMCkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotI2lmZGVmIE5FVElGX0ZfTExUWAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncyk7Ci0jZW5kaWYKKwkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmIChsaWtlbHkodHNvKSkKIAkJdHhfZmxhZ3MgfD0gSVhHQl9UWF9GTEFHU19UU087Ci0JZWxzZSBpZihpeGdiX3R4X2NzdW0oYWRhcHRlciwgc2tiKSkKKwllbHNlIGlmIChpeGdiX3R4X2NzdW0oYWRhcHRlciwgc2tiKSkKIAkJdHhfZmxhZ3MgfD0gSVhHQl9UWF9GTEFHU19DU1VNOwogCiAJaXhnYl90eF9xdWV1ZShhZGFwdGVyLCBpeGdiX3R4X21hcChhZGFwdGVyLCBza2IsIGZpcnN0KSwgdmxhbl9pZCwKQEAgLTE1MjIsMTMgKzE0NzAsOSBAQAogCiAJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLSNpZmRlZiBORVRJRl9GX0xMVFgKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCiAJaXhnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgJmFkYXB0ZXItPnR4X3JpbmcsIERFU0NfTkVFREVEKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X2xvY2ssIGZsYWdzKTsKLQotI2VuZGlmCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMTU4OCwyMSArMTUzMiwyNSBAQAogCWludCBtYXhfZnJhbWUgPSBuZXdfbXR1ICsgRU5FVF9IRUFERVJfU0laRSArIEVORVRfRkNTX0xFTkdUSDsKIAlpbnQgb2xkX21heF9mcmFtZSA9IG5ldGRldi0+bXR1ICsgRU5FVF9IRUFERVJfU0laRSArIEVORVRfRkNTX0xFTkdUSDsKIAotCi0JaWYoKG1heF9mcmFtZSA8IElYR0JfTUlOX0VORVRfRlJBTUVfU0laRV9XSVRIT1VUX0ZDUyArIEVORVRfRkNTX0xFTkdUSCkKLQkgICB8fCAobWF4X2ZyYW1lID4gSVhHQl9NQVhfSlVNQk9fRlJBTUVfU0laRSArIEVORVRfRkNTX0xFTkdUSCkpIHsKKwkvKiBNVFUgPCA2OCBpcyBhbiBlcnJvciBmb3IgSVB2NCB0cmFmZmljLCBqdXN0IGRvbid0IGFsbG93IGl0ICovCisJaWYgKChuZXdfbXR1IDwgNjgpIHx8CisJICAgIChtYXhfZnJhbWUgPiBJWEdCX01BWF9KVU1CT19GUkFNRV9TSVpFICsgRU5FVF9GQ1NfTEVOR1RIKSkgewogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJJbnZhbGlkIE1UVSBzZXR0aW5nICVkXG4iLCBuZXdfbXR1KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IG1heF9mcmFtZTsKKwlpZiAob2xkX21heF9mcmFtZSA9PSBtYXhfZnJhbWUpCisJCXJldHVybiAwOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJaXhnYl9kb3duKGFkYXB0ZXIsIHRydWUpOworCisJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IG1heF9mcmFtZSArIDg7IC8qICsgOCBmb3IgZXJyYXRhICovCiAKIAluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAKLQlpZiAoKG9sZF9tYXhfZnJhbWUgIT0gbWF4X2ZyYW1lKSAmJiBuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJaXhnYl9kb3duKGFkYXB0ZXIsIHRydWUpOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWl4Z2JfdXAoYWRhcHRlcik7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjIyLDIxICsxNTcwLDIxIEBACiAJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUocGRldikpCiAJCXJldHVybjsKIAotCWlmKChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAorCWlmICgobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKIAkgICAobmV0ZGV2LT5tY19jb3VudCA+IElYR0JfTUFYX05VTV9NVUxUSUNBU1RfQUREUkVTU0VTKSkgewogCQl1NjQgbXVsdGkgPSBJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTVBSQ0wpOwogCQl1MzIgYmNhc3RfbCA9IElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBCUFJDTCk7CiAJCXUzMiBiY2FzdF9oID0gSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIEJQUkNIKTsKLQkJdTY0IGJjYXN0ID0gKCh1NjQpYmNhc3RfaCA8PCAzMikgfCBiY2FzdF9sOyAKKwkJdTY0IGJjYXN0ID0gKCh1NjQpYmNhc3RfaCA8PCAzMikgfCBiY2FzdF9sOwogCiAJCW11bHRpIHw9ICgodTY0KUlYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBNUFJDSCkgPDwgMzIpOwogCQkvKiBmaXggdXAgbXVsdGljYXN0IHN0YXRzIGJ5IHJlbW92aW5nIGJyb2FkY2FzdHMgKi8KLQkJaWYobXVsdGkgPj0gYmNhc3QpCisJCWlmIChtdWx0aSA+PSBiY2FzdCkKIAkJCW11bHRpIC09IGJjYXN0OwotCQkKKwogCQlhZGFwdGVyLT5zdGF0cy5tcHJjbCArPSAobXVsdGkgJiAweEZGRkZGRkZGKTsKIAkJYWRhcHRlci0+c3RhdHMubXByY2ggKz0gKG11bHRpID4+IDMyKTsKLQkJYWRhcHRlci0+c3RhdHMuYnByY2wgKz0gYmNhc3RfbDsgCisJCWFkYXB0ZXItPnN0YXRzLmJwcmNsICs9IGJjYXN0X2w7CiAJCWFkYXB0ZXItPnN0YXRzLmJwcmNoICs9IGJjYXN0X2g7CiAJfSBlbHNlIHsKIAkJYWRhcHRlci0+c3RhdHMubXByY2wgKz0gSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIE1QUkNMKTsKQEAgLTE3NTEsNDEgKzE2OTksMjYgQEAKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYl9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGljciA9IElYR0JfUkVBRF9SRUcoaHcsIElDUik7Ci0jaWZuZGVmIENPTkZJR19JWEdCX05BUEkKLQl1bnNpZ25lZCBpbnQgaTsKLSNlbmRpZgogCi0JaWYodW5saWtlbHkoIWljcikpCisJaWYgKHVubGlrZWx5KCFpY3IpKQogCQlyZXR1cm4gSVJRX05PTkU7ICAvKiBOb3Qgb3VyIGludGVycnVwdCAqLwogCiAJaWYgKHVubGlrZWx5KGljciAmIChJWEdCX0lOVF9SWFNFUSB8IElYR0JfSU5UX0xTQykpKQogCQlpZiAoIXRlc3RfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CiAKLSNpZmRlZiBDT05GSUdfSVhHQl9OQVBJCiAJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSkpIHsKIAotCQkvKiBEaXNhYmxlIGludGVycnVwdHMgYW5kIHJlZ2lzdGVyIGZvciBwb2xsLiBUaGUgZmx1c2ggCisJCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgcmVnaXN0ZXIgZm9yIHBvbGwuIFRoZSBmbHVzaAogCQkgIG9mIHRoZSBwb3N0ZWQgd3JpdGUgaXMgaW50ZW50aW9uYWxseSBsZWZ0IG91dC4KIAkJKi8KIAogCQlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgfjApOwogCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5ldGRldiwgJmFkYXB0ZXItPm5hcGkpOwogCX0KLSNlbHNlCi0JLyogeWVzLCB0aGF0IGlzIGFjdHVhbGx5IGEgJiBhbmQgaXQgaXMgbWVhbnQgdG8gbWFrZSBzdXJlIHRoYXQKLQkgKiBldmVyeSBwYXNzIHRocm91Z2ggdGhpcyBmb3IgbG9vcCBjaGVja3MgYm90aCByZWNlaXZlIGFuZAotCSAqIHRyYW5zbWl0IHF1ZXVlcyBmb3IgY29tcGxldGVkIGRlc2NyaXB0b3JzLCBpbnRlbmRlZCB0bwotCSAqIGF2b2lkIHN0YXJ2YXRpb24gaXNzdWVzIGFuZCBhc3Npc3QgdHgvcnggZmFpcm5lc3MuICovCi0JZm9yKGkgPSAwOyBpIDwgSVhHQl9NQVhfSU5UUjsgaSsrKQotCQlpZighaXhnYl9jbGVhbl9yeF9pcnEoYWRhcHRlcikgJgotCQkgICAhaXhnYl9jbGVhbl90eF9pcnEoYWRhcHRlcikpCi0JCQlicmVhazsKLSNlbmRpZiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVhHQl9OQVBJCiAvKioKICAqIGl4Z2JfY2xlYW4gLSBOQVBJIFJ4IHBvbGxpbmcgY2FsbGJhY2sKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQpAQCAtMTgwNCwxMiArMTczNywxMiBAQAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJbmV0aWZfcnhfY29tcGxldGUobmV0ZGV2LCBuYXBpKTsKLQkJaXhnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQlpZiAoIXRlc3RfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQkJaXhnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CiB9Ci0jZW5kaWYKIAogLyoqCiAgKiBpeGdiX2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlcwpAQCAtMTgzMCwxNSArMTc2MywxNSBAQAogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBJWEdCX1RYX0RFU0MoKnR4X3JpbmcsIGVvcCk7CiAKLQl3aGlsZShlb3BfZGVzYy0+c3RhdHVzICYgSVhHQl9UWF9ERVNDX1NUQVRVU19ERCkgeworCXdoaWxlIChlb3BfZGVzYy0+c3RhdHVzICYgSVhHQl9UWF9ERVNDX1NUQVRVU19ERCkgewogCiAJCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgKSB7CiAJCQl0eF9kZXNjID0gSVhHQl9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCi0JCQlpZiAodHhfZGVzYy0+cG9wdHMKLQkJCSAgICAmIChJWEdCX1RYX0RFU0NfUE9QVFNfVFhTTSB8Ci0JCQkgICAgICAgSVhHQl9UWF9ERVNDX1BPUFRTX0lYU00pKQorCQkJaWYgKHR4X2Rlc2MtPnBvcHRzICYKKwkJCSAgIChJWEdCX1RYX0RFU0NfUE9QVFNfVFhTTSB8CisJCQkgICAgSVhHQl9UWF9ERVNDX1BPUFRTX0lYU00pKQogCQkJCWFkYXB0ZXItPmh3X2NzdW1fdHhfZ29vZCsrOwogCiAJCQlpeGdiX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsIGJ1ZmZlcl9pbmZvKTsKQEAgLTE4NDYsNyArMTc3OSw3IEBACiAJCQkqKHUzMiAqKSYodHhfZGVzYy0+c3RhdHVzKSA9IDA7CiAKIAkJCWNsZWFuZWQgPSAoaSA9PSBlb3ApOwotCQkJaWYoKytpID09IHR4X3JpbmctPmNvdW50KSBpID0gMDsKKwkJCWlmICgrK2kgPT0gdHhfcmluZy0+Y291bnQpIGkgPSAwOwogCQl9CiAKIAkJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKQEAgLTE4NTUsMTUgKzE3ODgsMjAgQEAKIAogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwogCi0JaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkpIHsKLQkJc3Bpbl9sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJiBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKLQkJICAgIChJWEdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID49IERFU0NfTkVFREVEKSkKKwlpZiAodW5saWtlbHkoY2xlYW5lZCAmJiBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKKwkJICAgICBJWEdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID49IERFU0NfTkVFREVEKSkgeworCQkvKiBNYWtlIHN1cmUgdGhhdCBhbnlib2R5IHN0b3BwaW5nIHRoZSBxdWV1ZSBhZnRlciB0aGlzCisJCSAqIHNlZXMgdGhlIG5ldyBuZXh0X3RvX2NsZWFuLiAqLworCQlzbXBfbWIoKTsKKworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICYmCisJCSAgICAhKHRlc3RfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKSkgewogCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfbG9jayk7CisJCQkrK2FkYXB0ZXItPnJlc3RhcnRfcXVldWU7CisJCX0KIAl9CiAKLQlpZihhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZykgeworCWlmIChhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZykgewogCQkvKiBkZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKQEAgLTE5MDYsMTMgKzE4NDQsMTMgQEAKIAogc3RhdGljIHZvaWQKIGl4Z2JfcnhfY2hlY2tzdW0oc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwKLQkJIHN0cnVjdCBpeGdiX3J4X2Rlc2MgKnJ4X2Rlc2MsCi0JCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYl9yeF9kZXNjICpyeF9kZXNjLAorICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qIElnbm9yZSBDaGVja3N1bSBiaXQgaXMgc2V0IE9SCiAJICogVENQIENoZWNrc3VtIGhhcyBub3QgYmVlbiBjYWxjdWxhdGVkCiAJICovCi0JaWYoKHJ4X2Rlc2MtPnN0YXR1cyAmIElYR0JfUlhfREVTQ19TVEFUVVNfSVhTTSkgfHwKKwlpZiAoKHJ4X2Rlc2MtPnN0YXR1cyAmIElYR0JfUlhfREVTQ19TVEFUVVNfSVhTTSkgfHwKIAkgICAoIShyeF9kZXNjLT5zdGF0dXMgJiBJWEdCX1JYX0RFU0NfU1RBVFVTX1RDUENTKSkpIHsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQlyZXR1cm47CkBAIC0xOTIwLDcgKzE4NTgsNyBAQAogCiAJLyogQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoZSBoYXJkd2FyZSBkaWQgdGhlIFRDUCBjaGVja3N1bSAqLwogCS8qIG5vdyBsb29rIGF0IHRoZSBUQ1AgY2hlY2tzdW0gZXJyb3IgYml0ICovCi0JaWYocnhfZGVzYy0+ZXJyb3JzICYgSVhHQl9SWF9ERVNDX0VSUk9SU19UQ1BFKSB7CisJaWYgKHJ4X2Rlc2MtPmVycm9ycyAmIElYR0JfUlhfREVTQ19FUlJPUlNfVENQRSkgewogCQkvKiBsZXQgdGhlIHN0YWNrIHZlcmlmeSBjaGVja3N1bSBlcnJvcnMgKi8KIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQlhZGFwdGVyLT5od19jc3VtX3J4X2Vycm9yKys7CkBAIC0xOTM3LDExICsxODc1LDcgQEAKICAqKi8KIAogc3RhdGljIGJvb2wKLSNpZmRlZiBDT05GSUdfSVhHQl9OQVBJCiBpeGdiX2NsZWFuX3J4X2lycShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLCBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCi0jZWxzZQotaXhnYl9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcikKLSNlbmRpZgogewogCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyAqcnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CkBAIC0xOTUwLDUwICsxODg0LDUwIEBACiAJc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbywgKm5leHRfYnVmZmVyLCAqbmV4dDJfYnVmZmVyOwogCXUzMiBsZW5ndGg7CiAJdW5zaWduZWQgaW50IGksIGo7CisJaW50IGNsZWFuZWRfY291bnQgPSAwOwogCWJvb2wgY2xlYW5lZCA9IGZhbHNlOwogCiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJcnhfZGVzYyA9IElYR0JfUlhfREVTQygqcnhfcmluZywgaSk7CiAJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CiAKLQl3aGlsZShyeF9kZXNjLT5zdGF0dXMgJiBJWEdCX1JYX0RFU0NfU1RBVFVTX0REKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IsICpuZXh0X3NrYjsKKwl3aGlsZSAocnhfZGVzYy0+c3RhdHVzICYgSVhHQl9SWF9ERVNDX1NUQVRVU19ERCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQl1OCBzdGF0dXM7CiAKLSNpZmRlZiBDT05GSUdfSVhHQl9OQVBJCi0JCWlmKCp3b3JrX2RvbmUgPj0gd29ya190b19kbykKKwkJaWYgKCp3b3JrX2RvbmUgPj0gd29ya190b19kbykKIAkJCWJyZWFrOwogCiAJCSgqd29ya19kb25lKSsrOwotI2VuZGlmCiAJCXN0YXR1cyA9IHJ4X2Rlc2MtPnN0YXR1czsKIAkJc2tiID0gYnVmZmVyX2luZm8tPnNrYjsKIAkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAKLQkJcHJlZmV0Y2goc2tiLT5kYXRhKTsKKwkJcHJlZmV0Y2goc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsKIAotCQlpZigrK2kgPT0gcnhfcmluZy0+Y291bnQpIGkgPSAwOworCQlpZiAoKytpID09IHJ4X3JpbmctPmNvdW50KSBpID0gMDsKIAkJbmV4dF9yeGQgPSBJWEdCX1JYX0RFU0MoKnJ4X3JpbmcsIGkpOwogCQlwcmVmZXRjaChuZXh0X3J4ZCk7CiAKLQkJaWYoKGogPSBpICsgMSkgPT0gcnhfcmluZy0+Y291bnQpIGogPSAwOworCQlpZiAoKGogPSBpICsgMSkgPT0gcnhfcmluZy0+Y291bnQpIGogPSAwOwogCQluZXh0Ml9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9bal07CiAJCXByZWZldGNoKG5leHQyX2J1ZmZlcik7CiAKIAkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07Ci0JCW5leHRfc2tiID0gbmV4dF9idWZmZXItPnNrYjsKLQkJcHJlZmV0Y2gobmV4dF9za2IpOwogCiAJCWNsZWFuZWQgPSB0cnVlOworCQljbGVhbmVkX2NvdW50Kys7CiAKIAkJcGNpX3VubWFwX3NpbmdsZShwZGV2LAogCQkJCSBidWZmZXJfaW5mby0+ZG1hLAogCQkJCSBidWZmZXJfaW5mby0+bGVuZ3RoLAogCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlidWZmZXJfaW5mby0+ZG1hID0gMDsKIAogCQlsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9kZXNjLT5sZW5ndGgpOworCQlyeF9kZXNjLT5sZW5ndGggPSAwOwogCi0JCWlmKHVubGlrZWx5KCEoc3RhdHVzICYgSVhHQl9SWF9ERVNDX1NUQVRVU19FT1ApKSkgeworCQlpZiAodW5saWtlbHkoIShzdGF0dXMgJiBJWEdCX1JYX0RFU0NfU1RBVFVTX0VPUCkpKSB7CiAKIAkJCS8qIEFsbCByZWNlaXZlcyBtdXN0IGZpdCBpbnRvIGEgc2luZ2xlIGJ1ZmZlciAqLwogCkBAIC0yMDA0LDExICsxOTM4LDkgQEAKIAkJCWdvdG8gcnhkZXNjX2RvbmU7CiAJCX0KIAotCQlpZiAodW5saWtlbHkocnhfZGVzYy0+ZXJyb3JzCi0JCQkgICAgICYgKElYR0JfUlhfREVTQ19FUlJPUlNfQ0UgfCBJWEdCX1JYX0RFU0NfRVJST1JTX1NFCi0JCQkJfCBJWEdCX1JYX0RFU0NfRVJST1JTX1AgfAotCQkJCUlYR0JfUlhfREVTQ19FUlJPUlNfUlhFKSkpIHsKLQorCQlpZiAodW5saWtlbHkocnhfZGVzYy0+ZXJyb3JzICYKKwkJICAgIChJWEdCX1JYX0RFU0NfRVJST1JTX0NFIHwgSVhHQl9SWF9ERVNDX0VSUk9SU19TRSB8CisJCSAgICAgSVhHQl9SWF9ERVNDX0VSUk9SU19QIHwgSVhHQl9SWF9ERVNDX0VSUk9SU19SWEUpKSkgewogCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJCWdvdG8gcnhkZXNjX2RvbmU7CiAJCX0KQEAgLTIwMTYsOCArMTk0OCw3IEBACiAJCS8qIGNvZGUgYWRkZWQgZm9yIGNvcHlicmVhaywgdGhpcyBzaG91bGQgaW1wcm92ZQogCQkgKiBwZXJmb3JtYW5jZSBmb3Igc21hbGwgcGFja2V0cyB3aXRoIGxhcmdlIGFtb3VudHMKIAkJICogb2YgcmVhc3NlbWJseSBiZWluZyBkb25lIGluIHRoZSBzdGFjayAqLwotI2RlZmluZSBJWEdCX0NCX0xFTkdUSCAyNTYKLQkJaWYgKGxlbmd0aCA8IElYR0JfQ0JfTEVOR1RIKSB7CisJCWlmIChsZW5ndGggPCBjb3B5YnJlYWspIHsKIAkJCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0KIAkJCSAgICBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKIAkJCWlmIChuZXdfc2tiKSB7CkBAIC0yMDQyLDI5ICsxOTczLDI0IEBACiAJCWl4Z2JfcnhfY2hlY2tzdW0oYWRhcHRlciwgcnhfZGVzYywgc2tiKTsKIAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwotI2lmZGVmIENPTkZJR19JWEdCX05BUEkKLQkJaWYoYWRhcHRlci0+dmxncnAgJiYgKHN0YXR1cyAmIElYR0JfUlhfREVTQ19TVEFUVVNfVlApKSB7CisJCWlmIChhZGFwdGVyLT52bGdycCAmJiAoc3RhdHVzICYgSVhHQl9SWF9ERVNDX1NUQVRVU19WUCkpIHsKIAkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLAotCQkJCWxlMTZfdG9fY3B1KHJ4X2Rlc2MtPnNwZWNpYWwpICYKLQkJCQkJSVhHQl9SWF9ERVNDX1NQRUNJQUxfVkxBTl9NQVNLKTsKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPnNwZWNpYWwpKTsKIAkJfSBlbHNlIHsKIAkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAJCX0KLSNlbHNlIC8qIENPTkZJR19JWEdCX05BUEkgKi8KLQkJaWYoYWRhcHRlci0+dmxncnAgJiYgKHN0YXR1cyAmIElYR0JfUlhfREVTQ19TVEFUVVNfVlApKSB7Ci0JCQl2bGFuX2h3YWNjZWxfcngoc2tiLCBhZGFwdGVyLT52bGdycCwKLQkJCQlsZTE2X3RvX2NwdShyeF9kZXNjLT5zcGVjaWFsKSAmCi0JCQkJCUlYR0JfUlhfREVTQ19TUEVDSUFMX1ZMQU5fTUFTSyk7Ci0JCX0gZWxzZSB7Ci0JCQluZXRpZl9yeChza2IpOwotCQl9Ci0jZW5kaWYgLyogQ09ORklHX0lYR0JfTkFQSSAqLwogCQluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCiByeGRlc2NfZG9uZToKIAkJLyogY2xlYW4gdXAgZGVzY3JpcHRvciwgbWlnaHQgYmUgd3JpdHRlbiBvdmVyIGJ5IGh3ICovCiAJCXJ4X2Rlc2MtPnN0YXR1cyA9IDA7CiAKKwkJLyogcmV0dXJuIHNvbWUgYnVmZmVycyB0byBoYXJkd2FyZSwgb25lIGF0IGEgdGltZSBpcyB0b28gc2xvdyAqLworCQlpZiAodW5saWtlbHkoY2xlYW5lZF9jb3VudCA+PSBJWEdCX1JYX0JVRkZFUl9XUklURSkpIHsKKwkJCWl4Z2JfYWxsb2NfcnhfYnVmZmVycyhhZGFwdGVyLCBjbGVhbmVkX2NvdW50KTsKKwkJCWNsZWFuZWRfY291bnQgPSAwOworCQl9CisKIAkJLyogdXNlIHByZWZldGNoZWQgdmFsdWVzICovCiAJCXJ4X2Rlc2MgPSBuZXh0X3J4ZDsKIAkJYnVmZmVyX2luZm8gPSBuZXh0X2J1ZmZlcjsKQEAgLTIwNzIsNyArMTk5OCw5IEBACiAKIAlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKIAotCWl4Z2JfYWxsb2NfcnhfYnVmZmVycyhhZGFwdGVyKTsKKwljbGVhbmVkX2NvdW50ID0gSVhHQl9ERVNDX1VOVVNFRChyeF9yaW5nKTsKKwlpZiAoY2xlYW5lZF9jb3VudCkKKwkJaXhnYl9hbGxvY19yeF9idWZmZXJzKGFkYXB0ZXIsIGNsZWFuZWRfY291bnQpOwogCiAJcmV0dXJuIGNsZWFuZWQ7CiB9CkBAIC0yMDgzLDcgKzIwMTEsNyBAQAogICoqLwogCiBzdGF0aWMgdm9pZAotaXhnYl9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpCitpeGdiX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwgaW50IGNsZWFuZWRfY291bnQpCiB7CiAJc3RydWN0IGl4Z2JfZGVzY19yaW5nICpyeF9yaW5nID0gJmFkYXB0ZXItPnJ4X3Jpbmc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKQEAgLTIxMDAsNyArMjAyOCw3IEBACiAKIAogCS8qIGxlYXZlIHRocmVlIGRlc2NyaXB0b3JzIHVudXNlZCAqLwotCXdoaWxlKC0tY2xlYW5jb3VudCA+IDIpIHsKKwl3aGlsZSAoLS1jbGVhbmNvdW50ID4gMiAmJiBjbGVhbmVkX2NvdW50LS0pIHsKIAkJLyogcmVjeWNsZSEgaXRzIGdvb2QgZm9yIHlvdSAqLwogCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOwogCQlpZiAoc2tiKSB7CkBAIC0yMTMzLDEyICsyMDYxLDEyIEBACiAJCXJ4X2Rlc2MgPSBJWEdCX1JYX0RFU0MoKnJ4X3JpbmcsIGkpOwogCQlyeF9kZXNjLT5idWZmX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby0+ZG1hKTsKIAkJLyogZ3VhcmFudGVlIEREIGJpdCBub3Qgc2V0IG5vdyBiZWZvcmUgaC93IGdldHMgZGVzY3JpcHRvcgotCQkgKiB0aGlzIGlzIHRoZSByZXN0IG9mIHRoZSB3b3JrYXJvdW5kIGZvciBoL3cgZG91YmxlIAorCQkgKiB0aGlzIGlzIHRoZSByZXN0IG9mIHRoZSB3b3JrYXJvdW5kIGZvciBoL3cgZG91YmxlCiAJCSAqIHdyaXRlYmFjay4gKi8KIAkJcnhfZGVzYy0+c3RhdHVzID0gMDsKIAogCi0JCWlmKCsraSA9PSByeF9yaW5nLT5jb3VudCkgaSA9IDA7CisJCWlmICgrK2kgPT0gcnhfcmluZy0+Y291bnQpIGkgPSAwOwogCQlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAl9CiAKQEAgLTIxNTgsNyArMjA4Niw3IEBACiAKIC8qKgogICogaXhnYl92bGFuX3J4X3JlZ2lzdGVyIC0gZW5hYmxlcyBvciBkaXNhYmxlcyB2bGFuIHRhZ2dpbmcvc3RyaXBwaW5nLgotICogCisgKgogICogQHBhcmFtIG5ldGRldiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAcGFyYW0gZ3JwIGluZGljYXRlcyB0byBlbmFibGUgb3IgZGlzYWJsZSB0YWdnaW5nL3N0cmlwcGluZwogICoqLwpAQCAtMjE3MSw3ICsyMDk5LDcgQEAKIAlpeGdiX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCWFkYXB0ZXItPnZsZ3JwID0gZ3JwOwogCi0JaWYoZ3JwKSB7CisJaWYgKGdycCkgewogCQkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCiAJCWN0cmwgPSBJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTDApOwogCQljdHJsIHw9IElYR0JfQ1RSTDBfVk1FOwpAQCAtMjE4MCw3ICsyMTA4LDYgQEAKIAkJLyogZW5hYmxlIFZMQU4gcmVjZWl2ZSBmaWx0ZXJpbmcgKi8KIAogCQlyY3RsID0gSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJDVEwpOwotCQlyY3RsIHw9IElYR0JfUkNUTF9WRkU7CiAJCXJjdGwgJj0gfklYR0JfUkNUTF9DRklFTjsKIAkJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMLCByY3RsKTsKIAl9IGVsc2UgewpAQCAtMjE4OSwxMiArMjExNiw2IEBACiAJCWN0cmwgPSBJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTDApOwogCQljdHJsICY9IH5JWEdCX0NUUkwwX1ZNRTsKIAkJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMMCwgY3RybCk7Ci0KLQkJLyogZGlzYWJsZSBWTEFOIGZpbHRlcmluZyAqLwotCi0JCXJjdGwgPSBJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkNUTCk7Ci0JCXJjdGwgJj0gfklYR0JfUkNUTF9WRkU7Ci0JCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7CiAJfQogCiAJLyogZG9uJ3QgZW5hYmxlIGludGVycnVwdHMgdW5sZXNzIHdlIGFyZSBVUCAqLwpAQCAtMjI0MywxMCArMjE2NCwxMCBAQAogewogCWl4Z2Jfdmxhbl9yeF9yZWdpc3RlcihhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXItPnZsZ3JwKTsKIAotCWlmKGFkYXB0ZXItPnZsZ3JwKSB7CisJaWYgKGFkYXB0ZXItPnZsZ3JwKSB7CiAJCXUxNiB2aWQ7Ci0JCWZvcih2aWQgPSAwOyB2aWQgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgdmlkKyspIHsKLQkJCWlmKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCkpCisJCWZvciAodmlkID0gMDsgdmlkIDwgVkxBTl9HUk9VUF9BUlJBWV9MRU47IHZpZCsrKSB7CisJCQlpZiAoIXZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkKSkKIAkJCQljb250aW51ZTsKIAkJCWl4Z2Jfdmxhbl9yeF9hZGRfdmlkKGFkYXB0ZXItPm5ldGRldiwgdmlkKTsKIAkJfQpAQCAtMjI3OCwxMyArMjE5OSwxMyBAQAogICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gd2hlbmV2ZXIKICAqIGEgUENJIGJ1cyBlcnJvciBpcyBkZXRlY3RlZC4KICAqLwotc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaXhnYl9pb19lcnJvcl9kZXRlY3RlZCAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkgICAgICAgICAgICAgZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZSkKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGl4Z2JfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcGNpX2NoYW5uZWxfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWlmKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlpeGdiX2Rvd24oYWRhcHRlciwgdHJ1ZSk7CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0yMjk3LDE3ICsyMjE4LDE3IEBACiAgKiBpeGdiX2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuCiAgKiBAcGRldiAgICBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugd2l0aCBlcnJvcgogICoKLSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIHRoZSBQQ0kgYnVzcyBoYXMgYmVlbiByZXNldC4KKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIHRoZSBQQ0kgYnVzIGhhcyBiZWVuIHJlc2V0LgogICogQmFzaWNhbGx5LCB0aGlzIHRyaWVzIHRvIHJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLgogICogVGhpcyBpcyBhIHNob3J0ZW5lZCB2ZXJzaW9uIG9mIHRoZSBkZXZpY2UgcHJvYmUvZGlzY292ZXJ5IGNvZGUsCiAgKiBpdCByZXNlbWJsZXMgdGhlIGZpcnN0LWhhbGYgb2YgdGhlIGl4Z2JfcHJvYmUoKSByb3V0aW5lLgogICovCi1zdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpeGdiX2lvX3Nsb3RfcmVzZXQgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaXhnYl9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZihwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQpAQCAtMjMyMywxNCArMjI0NCwxNCBAQAogCWl4Z2JfcmVzZXQoYWRhcHRlcik7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCi0JaWYoIWl4Z2JfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtKCZhZGFwdGVyLT5odykpIHsKKwlpZiAoIWl4Z2JfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtKCZhZGFwdGVyLT5odykpIHsKIAkJRFBSSU5USyhQUk9CRSwgRVJSLCAiQWZ0ZXIgcmVzZXQsIHRoZSBFRVBST00gY2hlY2tzdW0gaXMgbm90IHZhbGlkLlxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KIAlpeGdiX2dldF9lZV9tYWNfYWRkcigmYWRhcHRlci0+aHcsIG5ldGRldi0+ZGV2X2FkZHIpOwogCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKLQlpZighaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtPnBlcm1fYWRkcikpIHsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7CiAJCURQUklOVEsoUFJPQkUsIEVSUiwgIkFmdGVyIHJlc2V0LCBpbnZhbGlkIE1BQyBhZGRyZXNzLlxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KQEAgLTIzNDYsMTUgKzIyNjcsMTUgQEAKICAqIG5vcm1hbCBvcGVyYXRpb24uIEltcGxlbWVudGF0aW9uIHJlc2VtYmxlcyB0aGUgc2Vjb25kLWhhbGYKICAqIG9mIHRoZSBpeGdiX3Byb2JlKCkgcm91dGluZS4KICAqLwotc3RhdGljIHZvaWQgaXhnYl9pb19yZXN1bWUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHZvaWQgaXhnYl9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0JaWYobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCWlmKGl4Z2JfdXAoYWRhcHRlcikpIHsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWlmIChpeGdiX3VwKGFkYXB0ZXIpKSB7CiAJCQlwcmludGsgKCJpeGdiOiBjYW4ndCBicmluZyBkZXZpY2UgYmFjayB1cCBhZnRlciByZXNldFxuIik7CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX29zZGVwLmgKaW5kZXggNGJlMWIyNy4uZDkyZTcyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX29zZGVwLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX29zZGVwLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMEdiRSBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjdW5kZWYgQVNTRVJUCi0jZGVmaW5lIEFTU0VSVCh4KQlpZighKHgpKSBCVUcoKQorI2RlZmluZSBBU1NFUlQoeCkJaWYgKCEoeCkpIEJVRygpCiAjZGVmaW5lIE1TR09VVChTLCBBLCBCKQlwcmludGsoS0VSTl9ERUJVRyBTICJcbiIsIEEsIEIpCiAKICNpZmRlZiBEQkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9wYXJhbS5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX3BhcmFtLmMKaW5kZXggODY1ZDE0ZC4uYWYzNWUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX3BhcmFtLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMEdiRSBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTEzNiw3ICsxMzYsNyBAQAogLyogRmxvdyBjb250cm9sIHJlcXVlc3QgdGltZW91dCAoaG93IGxvbmcgdG8gcGF1c2UgdGhlIGxpbmsgcGFydG5lcidzIHR4KQogICogKFBBUCAxNTowKQogICoKLSAqIFZhbGlkIFJhbmdlOiAxIC0gNjU1MzUgCisgKiBWYWxpZCBSYW5nZTogMSAtIDY1NTM1CiAgKgogICogRGVmYXVsdCBWYWx1ZTogIDY1NTM1ICgweGZmZmYpICh3ZSdsbCBzZW5kIGFuIHhvbiBpZiB3ZSByZWNvdmVyKQogICovCkBAIC0yMDAsNyArMjAwLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBpeGdiX3ZhbGlkYXRlX29wdGlvbih1bnNpZ25lZCBpbnQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXhnYl9vcHRpb24gKm9wdCkKIHsKLQlpZigqdmFsdWUgPT0gT1BUSU9OX1VOU0VUKSB7CisJaWYgKCp2YWx1ZSA9PSBPUFRJT05fVU5TRVQpIHsKIAkJKnZhbHVlID0gb3B0LT5kZWY7CiAJCXJldHVybiAwOwogCX0KQEAgLTIxNyw3ICsyMTcsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgcmFuZ2Vfb3B0aW9uOgotCQlpZigqdmFsdWUgPj0gb3B0LT5hcmcuci5taW4gJiYgKnZhbHVlIDw9IG9wdC0+YXJnLnIubWF4KSB7CisJCWlmICgqdmFsdWUgPj0gb3B0LT5hcmcuci5taW4gJiYgKnZhbHVlIDw9IG9wdC0+YXJnLnIubWF4KSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlcyBzZXQgdG8gJWlcbiIsIG9wdC0+bmFtZSwgKnZhbHVlKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0yMjYsMTAgKzIyNiwxMCBAQAogCQlpbnQgaTsKIAkJc3RydWN0IGl4Z2Jfb3B0X2xpc3QgKmVudDsKIAotCQlmb3IoaSA9IDA7IGkgPCBvcHQtPmFyZy5sLm5yOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG9wdC0+YXJnLmwubnI7IGkrKykgewogCQkJZW50ID0gJm9wdC0+YXJnLmwucFtpXTsKLQkJCWlmKCp2YWx1ZSA9PSBlbnQtPmkpIHsKLQkJCQlpZihlbnQtPnN0clswXSAhPSAnXDAnKQorCQkJaWYgKCp2YWx1ZSA9PSBlbnQtPmkpIHsKKwkJCQlpZiAoZW50LT5zdHJbMF0gIT0gJ1wwJykKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIGVudC0+c3RyKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KQEAgLTI2MCw3ICsyNjAsNyBAQAogaXhnYl9jaGVja19vcHRpb25zKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGJkID0gYWRhcHRlci0+YmRfbnVtYmVyOwotCWlmKGJkID49IElYR0JfTUFYX05JQykgeworCWlmIChiZCA+PSBJWEdCX01BWF9OSUMpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFCiAJCQkgICAiV2FybmluZzogbm8gY29uZmlndXJhdGlvbiBmb3IgYm9hcmQgIyVpXG4iLCBiZCk7CiAJCXByaW50ayhLRVJOX05PVElDRSAiVXNpbmcgZGVmYXVsdHMgZm9yIGFsbCB2YWx1ZXNcbiIpOwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCX07CiAJCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nOwogCi0JCWlmKG51bV9UeERlc2NyaXB0b3JzID4gYmQpIHsKKwkJaWYgKG51bV9UeERlc2NyaXB0b3JzID4gYmQpIHsKIAkJCXR4X3JpbmctPmNvdW50ID0gVHhEZXNjcmlwdG9yc1tiZF07CiAJCQlpeGdiX3ZhbGlkYXRlX29wdGlvbigmdHhfcmluZy0+Y291bnQsICZvcHQpOwogCQl9IGVsc2UgewpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCX07CiAJCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyAqcnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nOwogCi0JCWlmKG51bV9SeERlc2NyaXB0b3JzID4gYmQpIHsKKwkJaWYgKG51bV9SeERlc2NyaXB0b3JzID4gYmQpIHsKIAkJCXJ4X3JpbmctPmNvdW50ID0gUnhEZXNjcmlwdG9yc1tiZF07CiAJCQlpeGdiX3ZhbGlkYXRlX29wdGlvbigmcnhfcmluZy0+Y291bnQsICZvcHQpOwogCQl9IGVsc2UgewpAQCAtMzEyLDcgKzMxMiw3IEBACiAJCQkuZGVmICA9IE9QVElPTl9FTkFCTEVECiAJCX07CiAKLQkJaWYobnVtX1hzdW1SWCA+IGJkKSB7CisJCWlmIChudW1fWHN1bVJYID4gYmQpIHsKIAkJCXVuc2lnbmVkIGludCByeF9jc3VtID0gWHN1bVJYW2JkXTsKIAkJCWl4Z2JfdmFsaWRhdGVfb3B0aW9uKCZyeF9jc3VtLCAmb3B0KTsKIAkJCWFkYXB0ZXItPnJ4X2NzdW0gPSByeF9jc3VtOwpAQCAtMzM4LDcgKzMzOCw3IEBACiAJCQkJCSAucCA9IGZjX2xpc3QgfX0KIAkJfTsKIAotCQlpZihudW1fRmxvd0NvbnRyb2wgPiBiZCkgeworCQlpZiAobnVtX0Zsb3dDb250cm9sID4gYmQpIHsKIAkJCXVuc2lnbmVkIGludCBmYyA9IEZsb3dDb250cm9sW2JkXTsKIAkJCWl4Z2JfdmFsaWRhdGVfb3B0aW9uKCZmYywgJm9wdCk7CiAJCQlhZGFwdGVyLT5ody5mYy50eXBlID0gZmM7CkBAIC0zNTYsMTQgKzM1NiwxNCBAQAogCQkJCQkgLm1heCA9IE1BWF9GQ1JUSH19CiAJCX07CiAKLQkJaWYobnVtX1J4RkNIaWdoVGhyZXNoID4gYmQpIHsKKwkJaWYgKG51bV9SeEZDSGlnaFRocmVzaCA+IGJkKSB7CiAJCQlhZGFwdGVyLT5ody5mYy5oaWdoX3dhdGVyID0gUnhGQ0hpZ2hUaHJlc2hbYmRdOwogCQkJaXhnYl92YWxpZGF0ZV9vcHRpb24oJmFkYXB0ZXItPmh3LmZjLmhpZ2hfd2F0ZXIsICZvcHQpOwogCQl9IGVsc2UgewogCQkJYWRhcHRlci0+aHcuZmMuaGlnaF93YXRlciA9IG9wdC5kZWY7CiAJCX0KIAkJaWYgKCEoYWRhcHRlci0+aHcuZmMudHlwZSAmIGl4Z2JfZmNfdHhfcGF1c2UpICkKLQkJCXByaW50ayAoS0VSTl9JTkZPCisJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkJIklnbm9yaW5nIFJ4RkNIaWdoVGhyZXNoIHdoZW4gbm8gUnhGQ1xuIik7CiAJfQogCXsgLyogUmVjZWl2ZSBGbG93IENvbnRyb2wgTG93IFRocmVzaG9sZCAqLwpAQCAtMzc2LDE0ICszNzYsMTQgQEAKIAkJCQkJIC5tYXggPSBNQVhfRkNSVEx9fQogCQl9OwogCi0JCWlmKG51bV9SeEZDTG93VGhyZXNoID4gYmQpIHsKKwkJaWYgKG51bV9SeEZDTG93VGhyZXNoID4gYmQpIHsKIAkJCWFkYXB0ZXItPmh3LmZjLmxvd193YXRlciA9IFJ4RkNMb3dUaHJlc2hbYmRdOwogCQkJaXhnYl92YWxpZGF0ZV9vcHRpb24oJmFkYXB0ZXItPmh3LmZjLmxvd193YXRlciwgJm9wdCk7CiAJCX0gZWxzZSB7CiAJCQlhZGFwdGVyLT5ody5mYy5sb3dfd2F0ZXIgPSBvcHQuZGVmOwogCQl9CiAJCWlmICghKGFkYXB0ZXItPmh3LmZjLnR5cGUgJiBpeGdiX2ZjX3R4X3BhdXNlKSApCi0JCQlwcmludGsgKEtFUk5fSU5GTworCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJCSJJZ25vcmluZyBSeEZDTG93VGhyZXNoIHdoZW4gbm8gUnhGQ1xuIik7CiAJfQogCXsgLyogRmxvdyBDb250cm9sIFBhdXNlIFRpbWUgUmVxdWVzdCovCkBAIC0zOTYsNyArMzk2LDcgQEAKIAkJCQkJLm1heCA9IE1BWF9GQ1BBVVNFfX0KIAkJfTsKIAotCQlpZihudW1fRkNSZXFUaW1lb3V0ID4gYmQpIHsKKwkJaWYgKG51bV9GQ1JlcVRpbWVvdXQgPiBiZCkgewogCQkJdW5zaWduZWQgaW50IHBhdXNlX3RpbWUgPSBGQ1JlcVRpbWVvdXRbYmRdOwogCQkJaXhnYl92YWxpZGF0ZV9vcHRpb24oJnBhdXNlX3RpbWUsICZvcHQpOwogCQkJYWRhcHRlci0+aHcuZmMucGF1c2VfdGltZSA9IHBhdXNlX3RpbWU7CkBAIC00MDQsNyArNDA0LDcgQEAKIAkJCWFkYXB0ZXItPmh3LmZjLnBhdXNlX3RpbWUgPSBvcHQuZGVmOwogCQl9CiAJCWlmICghKGFkYXB0ZXItPmh3LmZjLnR5cGUgJiBpeGdiX2ZjX3R4X3BhdXNlKSApCi0JCQlwcmludGsgKEtFUk5fSU5GTworCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJCSJJZ25vcmluZyBGQ1JlcVRpbWVvdXQgd2hlbiBubyBSeEZDXG4iKTsKIAl9CiAJLyogaGlnaCBsb3cgYW5kIHNwYWNpbmcgY2hlY2sgZm9yIHJ4IGZsb3cgY29udHJvbCB0aHJlc2hvbGRzICovCkBAIC00MTIsNyArNDEyLDcgQEAKIAkJLyogaGlnaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBsb3cgKi8KIAkJaWYgKGFkYXB0ZXItPmh3LmZjLmhpZ2hfd2F0ZXIgPCAoYWRhcHRlci0+aHcuZmMubG93X3dhdGVyICsgOCkpIHsKIAkJCS8qIHNldCBkZWZhdWx0cyAqLwotCQkJcHJpbnRrIChLRVJOX0lORk8gCisJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkJIlJ4RkNIaWdoVGhyZXNoIG11c3QgYmUgPj0gKFJ4RkNMb3dUaHJlc2ggKyA4KSwgIgogCQkJCSJVc2luZyBEZWZhdWx0c1xuIik7CiAJCQlhZGFwdGVyLT5ody5mYy5oaWdoX3dhdGVyID0gREVGQVVMVF9GQ1JUSDsKQEAgLTQyOSw3ICs0MjksNyBAQAogCQkJCQkgLm1heCA9IE1BWF9SRFRSfX0KIAkJfTsKIAotCQlpZihudW1fUnhJbnREZWxheSA+IGJkKSB7CisJCWlmIChudW1fUnhJbnREZWxheSA+IGJkKSB7CiAJCQlhZGFwdGVyLT5yeF9pbnRfZGVsYXkgPSBSeEludERlbGF5W2JkXTsKIAkJCWl4Z2JfdmFsaWRhdGVfb3B0aW9uKCZhZGFwdGVyLT5yeF9pbnRfZGVsYXksICZvcHQpOwogCQl9IGVsc2UgewpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJCQkJCSAubWF4ID0gTUFYX1RJRFZ9fQogCQl9OwogCi0JCWlmKG51bV9UeEludERlbGF5ID4gYmQpIHsKKwkJaWYgKG51bV9UeEludERlbGF5ID4gYmQpIHsKIAkJCWFkYXB0ZXItPnR4X2ludF9kZWxheSA9IFR4SW50RGVsYXlbYmRdOwogCQkJaXhnYl92YWxpZGF0ZV9vcHRpb24oJmFkYXB0ZXItPnR4X2ludF9kZWxheSwgJm9wdCk7CiAJCX0gZWxzZSB7CkBAIC00NjIsNyArNDYyLDcgQEAKIAkJCS5kZWYgID0gT1BUSU9OX0VOQUJMRUQKIAkJfTsKIAotCQlpZihudW1fSW50RGVsYXlFbmFibGUgPiBiZCkgeworCQlpZiAobnVtX0ludERlbGF5RW5hYmxlID4gYmQpIHsKIAkJCXVuc2lnbmVkIGludCBpZGUgPSBJbnREZWxheUVuYWJsZVtiZF07CiAJCQlpeGdiX3ZhbGlkYXRlX29wdGlvbigmaWRlLCAmb3B0KTsKIAkJCWFkYXB0ZXItPnR4X2ludF9kZWxheV9lbmFibGUgPSBpZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAppbmRleCBkOTgxMTM0Li45NTY5MTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CiAKICNpbmNsdWRlICJpeGdiZV90eXBlLmgiCiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCkBAIC0xMDAsNiArMTAxLDkgQEAKICNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVkxBTl9NQVNLCTB4ZmZmZjAwMDAKICNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVAkxNgogCisjZGVmaW5lIElYR0JFX01BWF9MUk9fREVTQ1JJUFRPUlMgICAgICAgOAorI2RlZmluZSBJWEdCRV9NQVhfTFJPX0FHR1JFR0FURSAgICAgICAgIDMyCisKIC8qIHdyYXBwZXIgYXJvdW5kIGEgcG9pbnRlciB0byBhIHNvY2tldCBidWZmZXIsCiAgKiBzbyBhIERNQSBoYW5kbGUgY2FuIGJlIHN0b3JlZCBhbG9uZyB3aXRoIHRoZSBidWZmZXIgKi8KIHN0cnVjdCBpeGdiZV90eF9idWZmZXIgewpAQCAtMTUwLDYgKzE1NCw4IEBACiAJLyogY3B1IGZvciB0eCBxdWV1ZSAqLwogCWludCBjcHU7CiAjZW5kaWYKKwlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKKwlib29sIGxyb191c2VkOwogCXN0cnVjdCBpeGdiZV9xdWV1ZV9zdGF0cyBzdGF0czsKIAl1OCB2X2lkeDsgLyogbWFwcyBkaXJlY3RseSB0byB0aGUgaW5kZXggZm9yIHRoaXMgcmluZyBpbiB0aGUgaGFyZHdhcmUKIAkJICAgKiB2ZWN0b3IgYXJyYXksIGNhbiBhbHNvIGJlIHVzZWQgZm9yIGZpbmRpbmcgdGhlIGJpdCBpbiBFSUNSCkBAIC0yODcsNiArMjkzLDkgQEAKIAogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJdTY0IHR4X2J1c3k7CisJdTY0IGxyb19hZ2dyZWdhdGVkOworCXU2NCBscm9fZmx1c2hlZDsKKwl1NjQgbHJvX25vX2Rlc2M7CiB9OwogCiBlbnVtIGl4YmdlX3N0YXRlX3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IDRlNDYzNzcuLjNlZmU1ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKQEAgLTkwLDYgKzkwLDggQEAKIAl7InJ4X2hlYWRlcl9zcGxpdCIsIElYR0JFX1NUQVQocnhfaGRyX3NwbGl0KX0sCiAJeyJhbGxvY19yeF9wYWdlX2ZhaWxlZCIsIElYR0JFX1NUQVQoYWxsb2NfcnhfcGFnZV9mYWlsZWQpfSwKIAl7ImFsbG9jX3J4X2J1ZmZfZmFpbGVkIiwgSVhHQkVfU1RBVChhbGxvY19yeF9idWZmX2ZhaWxlZCl9LAorCXsibHJvX2FnZ3JlZ2F0ZWQiLCBJWEdCRV9TVEFUKGxyb19hZ2dyZWdhdGVkKX0sCisJeyJscm9fZmx1c2hlZCIsIElYR0JFX1NUQVQobHJvX2ZsdXNoZWQpfSwKIH07CiAKICNkZWZpbmUgSVhHQkVfUVVFVUVfU1RBVFNfTEVOIFwKQEAgLTI1MCwyMiArMjUyLDEwIEBACiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JCWludCBpOwotI2VuZGlmCi0JCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCi0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5ldGRldiwgaSk7Ci0jZW5kaWYKKwkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwogCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzY7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQkJbmV0aWZfc3RhcnRfc3VicXVldWUobmV0ZGV2LCBpKTsKLSNlbmRpZgotCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzg3LDYgKzc3Nyw3IEBACiAJaW50IHN0YXRfY291bnQgPSBzaXplb2Yoc3RydWN0IGl4Z2JlX3F1ZXVlX3N0YXRzKSAvIHNpemVvZih1NjQpOwogCWludCBqLCBrOwogCWludCBpOworCXU2NCBhZ2dyZWdhdGVkID0gMCwgZmx1c2hlZCA9IDAsIG5vX2Rlc2MgPSAwOwogCiAJaXhnYmVfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwogCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9HTE9CQUxfU1RBVFNfTEVOOyBpKyspIHsKQEAgLTgwMSwxMSArNzkyLDE3IEBACiAJCWkgKz0gazsKIAl9CiAJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGorKykgeworCQlhZ2dyZWdhdGVkICs9IGFkYXB0ZXItPnJ4X3Jpbmdbal0ubHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOworCQlmbHVzaGVkICs9IGFkYXB0ZXItPnJ4X3Jpbmdbal0ubHJvX21nci5zdGF0cy5mbHVzaGVkOworCQlub19kZXNjICs9IGFkYXB0ZXItPnJ4X3Jpbmdbal0ubHJvX21nci5zdGF0cy5ub19kZXNjOwogCQlxdWV1ZV9zdGF0ID0gKHU2NCAqKSZhZGFwdGVyLT5yeF9yaW5nW2pdLnN0YXRzOwogCQlmb3IgKGsgPSAwOyBrIDwgc3RhdF9jb3VudDsgaysrKQogCQkJZGF0YVtpICsga10gPSBxdWV1ZV9zdGF0W2tdOwogCQlpICs9IGs7CiAJfQorCWFkYXB0ZXItPmxyb19hZ2dyZWdhdGVkID0gYWdncmVnYXRlZDsKKwlhZGFwdGVyLT5scm9fZmx1c2hlZCA9IGZsdXNoZWQ7CisJYWRhcHRlci0+bHJvX25vX2Rlc2MgPSBub19kZXNjOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LApAQCAtOTczLDYgKzk3MCw4IEBACiAJLmdldF9ldGh0b29sX3N0YXRzICAgICAgPSBpeGdiZV9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X2NvYWxlc2NlICAgICAgICAgICA9IGl4Z2JlX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlICAgICAgICAgICA9IGl4Z2JlX3NldF9jb2FsZXNjZSwKKwkuZ2V0X2ZsYWdzICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9zZXRfZmxhZ3MsCiB9OwogCiB2b2lkIGl4Z2JlX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDhmMDQ2MDkuLmU1ZjNkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTcwLDggKzcwLDYgQEAKIAkgYm9hcmRfODI1OTggfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEFGX1NJTkdMRV9QT1JUKSwKIAkgYm9hcmRfODI1OTggfSwKLQl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEFUX0RVQUxfUE9SVCksCi0JIGJvYXJkXzgyNTk4IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThFQl9DWDQpLAogCSBib2FyZF84MjU5OCB9LAogCkBAIC0yNjYsMjggKzI2NCwxNiBAQAogCQkgKiBzZWVzIHRoZSBuZXcgbmV4dF90b19jbGVhbi4KIAkJICovCiAJCXNtcF9tYigpOwotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKIAkJaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KSAmJgogCQkgICAgIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgewogCQkJbmV0aWZfd2FrZV9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKIAkJCWFkYXB0ZXItPnJlc3RhcnRfcXVldWUrKzsKIAkJfQotI2Vsc2UKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJgotCQkgICAgIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgewotCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwotCQkJYWRhcHRlci0+cmVzdGFydF9xdWV1ZSsrOwotCQl9Ci0jZW5kaWYKIAl9CiAKIAlpZiAoYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcpCiAJCWlmIChpeGdiZV9jaGVja190eF9oYW5nKGFkYXB0ZXIsIHR4X3JpbmcsIGVvcCwgZW9wX2Rlc2MpKQotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKIAkJCW5ldGlmX3N0b3Bfc3VicXVldWUobmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7Ci0jZWxzZQotCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotI2VuZGlmCiAKIAlpZiAodG90YWxfdHhfcGFja2V0cyA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KQogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLCB0eF9yaW5nLT5laW1zX3ZhbHVlKTsKQEAgLTM4OSwyNCArMzc1LDM5IEBACiAgKiBpeGdiZV9yZWNlaXZlX3NrYiAtIFNlbmQgYSBjb21wbGV0ZWQgcGFja2V0IHVwIHRoZSBzdGFjawogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiBAc2tiOiBwYWNrZXQgdG8gc2VuZCB1cAotICogQGlzX3ZsYW46IHBhY2tldCBoYXMgYSBWTEFOIHRhZwotICogQHRhZzogVkxBTiB0YWcgZnJvbSBkZXNjcmlwdG9yCisgKiBAc3RhdHVzOiBoYXJkd2FyZSBpbmRpY2F0aW9uIG9mIHN0YXR1cyBvZiByZWNlaXZlCisgKiBAcnhfcmluZzogcnggZGVzY3JpcHRvciByaW5nIChmb3IgYSBzcGVjaWZpYyBxdWV1ZSkgdG8gc2V0dXAKKyAqIEByeF9kZXNjOiByeCBkZXNjcmlwdG9yCiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9yZWNlaXZlX3NrYihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgaXNfdmxhbiwKLQkJCSAgICAgIHUxNiB0YWcpCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzdGF0dXMsCisJCQkgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjKQogewotCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9ORVRQT0xMKSkgewotCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgaXNfdmxhbikKLQkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLCB0YWcpOwotCQllbHNlCi0JCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCX0gZWxzZSB7CisJYm9vbCBpc192bGFuID0gKHN0YXR1cyAmIElYR0JFX1JYRF9TVEFUX1ZQKTsKKwl1MTYgdGFnID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbik7CiAKKwlpZiAoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPICYmCisJICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CiAJCWlmIChhZGFwdGVyLT52bGdycCAmJiBpc192bGFuKQotCQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgYWRhcHRlci0+dmxncnAsIHRhZyk7CisJCQlscm9fdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKCZyaW5nLT5scm9fbWdyLCBza2IsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnZsZ3JwLCB0YWcsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X2Rlc2MpOwogCQllbHNlCi0JCQluZXRpZl9yeChza2IpOworCQkJbHJvX3JlY2VpdmVfc2tiKCZyaW5nLT5scm9fbWdyLCBza2IsIHJ4X2Rlc2MpOworCQlyaW5nLT5scm9fdXNlZCA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX05FVFBPTEwpKSB7CisJCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgaXNfdmxhbikKKwkJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGdycCwgdGFnKTsKKwkJCWVsc2UKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQl9IGVsc2UgeworCQkJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIGlzX3ZsYW4pCisJCQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgYWRhcHRlci0+dmxncnAsIHRhZyk7CisJCQllbHNlCisJCQkJbmV0aWZfcngoc2tiKTsKKwkJfQogCX0KIH0KIApAQCAtNTQ2LDggKzU0Nyw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgdXBwZXJfbGVuLCBsZW4sIHN0YXRlcnI7Ci0JdTE2IGhkcl9pbmZvLCB2bGFuX3RhZzsKLQlib29sIGlzX3ZsYW4sIGNsZWFuZWQgPSBmYWxzZTsKKwl1MTYgaGRyX2luZm87CisJYm9vbCBjbGVhbmVkID0gZmFsc2U7CiAJaW50IGNsZWFuZWRfY291bnQgPSAwOwogCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlcyA9IDAsIHRvdGFsX3J4X3BhY2tldHMgPSAwOwogCkBAIC01NTYsOCArNTU3LDYgQEAKIAlyeF9kZXNjID0gSVhHQkVfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwogCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IpOwogCXJ4X2J1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOwotCWlzX3ZsYW4gPSAoc3RhdGVyciAmIElYR0JFX1JYRF9TVEFUX1ZQKTsKLQl2bGFuX3RhZyA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnZsYW4pOwogCiAJd2hpbGUgKHN0YXRlcnIgJiBJWEdCRV9SWERfU1RBVF9ERCkgewogCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQpAQCAtNjM1LDcgKzYzNCw3IEBACiAJCXRvdGFsX3J4X3BhY2tldHMrKzsKIAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwotCQlpeGdiZV9yZWNlaXZlX3NrYihhZGFwdGVyLCBza2IsIGlzX3ZsYW4sIHZsYW5fdGFnKTsKKwkJaXhnYmVfcmVjZWl2ZV9za2IoYWRhcHRlciwgc2tiLCBzdGF0ZXJyLCByeF9yaW5nLCByeF9kZXNjKTsKIAkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAogbmV4dF9kZXNjOgpAQCAtNjUyLDggKzY1MSwxMSBAQAogCQlyeF9idWZmZXJfaW5mbyA9IG5leHRfYnVmZmVyOwogCiAJCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IpOwotCQlpc192bGFuID0gKHN0YXRlcnIgJiBJWEdCRV9SWERfU1RBVF9WUCk7Ci0JCXZsYW5fdGFnID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbik7CisJfQorCisJaWYgKHJ4X3JpbmctPmxyb191c2VkKSB7CisJCWxyb19mbHVzaF9hbGwoJnJ4X3JpbmctPmxyb19tZ3IpOworCQlyeF9yaW5nLT5scm9fdXNlZCA9IGZhbHNlOwogCX0KIAogCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwpAQCAtMTM4Miw2ICsxMzg0LDMzIEBACiAKICNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFSERSU0laRV9TSElGVAkJCTIKIC8qKgorICogaXhnYmVfZ2V0X3NrYl9oZHIgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIExSTyBoZWFkZXIgcHJvY2Vzc2luZworICogQHNrYjogcG9pbnRlciB0byBza19idWZmIHRvIGJlIGFkZGVkIHRvIExSTyBwYWNrZXQKKyAqIEBpcGhkcjogcG9pbnRlciB0byB0Y3AgaGVhZGVyIHN0cnVjdHVyZQorICogQHRjcGg6IHBvaW50ZXIgdG8gdGNwIGhlYWRlciBzdHJ1Y3R1cmUKKyAqIEBoZHJfZmxhZ3M6IHBvaW50ZXIgdG8gaGVhZGVyIGZsYWdzCisgKiBAcHJpdjogcHJpdmF0ZSBkYXRhCisgKiovCitzdGF0aWMgaW50IGl4Z2JlX2dldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcGhkciwgdm9pZCAqKnRjcGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQoreworCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjID0gcHJpdjsKKworCS8qIFZlcmlmeSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBJUHY0IFRDUCBwYWNrZXQgKi8KKwlpZiAoIShyeF9kZXNjLT53Yi5sb3dlci5sb19kd29yZC5wa3RfaW5mbyAmCisJICAgIChJWEdCRV9SWERBRFZfUEtUVFlQRV9JUFY0IHwgSVhHQkVfUlhEQURWX1BLVFRZUEVfVENQKSkpCisJCXJldHVybiAtMTsKKworCS8qIFNldCBuZXR3b3JrIGhlYWRlcnMgKi8KKwlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBpcF9oZHJsZW4oc2tiKSk7CisJKmlwaGRyID0gaXBfaGRyKHNrYik7CisJKnRjcGggPSB0Y3BfaGRyKHNrYik7CisJKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBpeGdiZV9jb25maWd1cmVfcnggLSBDb25maWd1cmUgODI1NHggUmVjZWl2ZSBVbml0IGFmdGVyIFJlc2V0CiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCkBAIC0xNDcwLDYgKzE0OTksMTcgQEAKIAkJYWRhcHRlci0+cnhfcmluZ1tpXS50YWlsID0gSVhHQkVfUkRUKGkpOwogCX0KIAorCS8qIEludGl0aWFsIExSTyBTZXR0aW5ncyAqLworCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5tYXhfYWdnciA9IElYR0JFX01BWF9MUk9fQUdHUkVHQVRFOworCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5tYXhfZGVzYyA9IElYR0JFX01BWF9MUk9fREVTQ1JJUFRPUlM7CisJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmdldF9za2JfaGVhZGVyID0gaXhnYmVfZ2V0X3NrYl9oZHI7CisJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmZlYXR1cmVzID0gTFJPX0ZfRVhUUkFDVF9WTEFOX0lEOworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9ORVRQT0xMKSkKKwkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmZlYXR1cmVzIHw9IExST19GX05BUEk7CisJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7CiAJCS8qIEZpbGwgb3V0IHJlZGlyZWN0aW9uIHRhYmxlICovCiAJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMTI4OyBpKyssIGorKykgewpAQCAtMTUzMiw3ICsxNTcyLDcgQEAKIAlpZiAoZ3JwKSB7CiAJCS8qIGVuYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KIAkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCk7Ci0JCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUUgfCBJWEdCRV9WTE5DVFJMX1ZGRTsKKwkJY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRTsKIAkJY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCwgY3RybCk7CiAJfQpAQCAtMTYwMywxMSArMTY0MywxNSBAQAogCiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlmY3RybCB8PSAoSVhHQkVfRkNUUkxfVVBFIHwgSVhHQkVfRkNUUkxfTVBFKTsKLQl9IGVsc2UgaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKLQkJZmN0cmwgfD0gSVhHQkVfRkNUUkxfTVBFOwotCQlmY3RybCAmPSB+SVhHQkVfRkNUUkxfVVBFOworCQlmY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9WRkU7CiAJfSBlbHNlIHsKLQkJZmN0cmwgJj0gfihJWEdCRV9GQ1RSTF9VUEUgfCBJWEdCRV9GQ1RSTF9NUEUpOworCQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQkJZmN0cmwgfD0gSVhHQkVfRkNUUkxfTVBFOworCQkJZmN0cmwgJj0gfklYR0JFX0ZDVFJMX1VQRTsKKwkJfSBlbHNlIHsKKwkJCWZjdHJsICY9IH4oSVhHQkVfRkNUUkxfVVBFIHwgSVhHQkVfRkNUUkxfTVBFKTsKKwkJfQorCQlmY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZGRTsKIAl9CiAKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFJMLCBmY3RybCk7CkBAIC0xOTY3LDcgKzIwMTEsNyBAQAogCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CiAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAogCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKIAkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CkBAIC0yMTM4LDExICsyMTgyLDcgQEAKIAkJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCk6CiAJCQlyc3NfbSA9IDB4RjsKIAkJCW5ycSA9IHJzc19pOwotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKIAkJCW50cSA9IHJzc19pOwotI2Vsc2UKLQkJCW50cSA9IDE7Ci0jZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIDA6CiAJCWRlZmF1bHQ6CkBAIC0yMzE2LDEwICsyMzU2LDggQEAKIAl9CiAKIG91dDoKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCiAJLyogTm90aWZ5IHRoZSBzdGFjayBvZiB0aGUgKHBvc3NpYmx5KSByZWR1Y2VkIFR4IFF1ZXVlIGNvdW50LiAqLwotCWFkYXB0ZXItPm5ldGRldi0+ZWdyZXNzX3N1YnF1ZXVlX2NvdW50ID0gYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKLSNlbmRpZgorCWFkYXB0ZXItPm5ldGRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0yNDkwLDEyICsyNTI4LDE4IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWludCBzaXplOwogCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0X2xyb19kZXNjKSAqIElYR0JFX01BWF9MUk9fREVTQ1JJUFRPUlM7CisJcnhkci0+bHJvX21nci5scm9fYXJyID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIXJ4ZHItPmxyb19tZ3IubHJvX2FycikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHJ4ZHItPmxyb19tZ3IubHJvX2FyciwgMCwgc2l6ZSk7CisKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpeGdiZV9yeF9idWZmZXIpICogcnhkci0+Y291bnQ7CiAJcnhkci0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghcnhkci0+cnhfYnVmZmVyX2luZm8pIHsKIAkJRFBSSU5USyhQUk9CRSwgRVJSLAogCQkJInZtYWxsb2MgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHRoZSByeCBkZXNjIHJpbmdcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBhbGxvY19mYWlsZWQ7CiAJfQogCW1lbXNldChyeGRyLT5yeF9idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKQEAgLTI1MDksMTMgKzI1NTMsMTggQEAKIAkJRFBSSU5USyhQUk9CRSwgRVJSLAogCQkJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgdGhlIHJ4IGRlc2MgcmluZ1xuIik7CiAJCXZmcmVlKHJ4ZHItPnJ4X2J1ZmZlcl9pbmZvKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gYWxsb2NfZmFpbGVkOwogCX0KIAogCXJ4ZHItPm5leHRfdG9fY2xlYW4gPSAwOwogCXJ4ZHItPm5leHRfdG9fdXNlID0gMDsKIAogCXJldHVybiAwOworCithbGxvY19mYWlsZWQ6CisJdmZyZWUocnhkci0+bHJvX21nci5scm9fYXJyKTsKKwlyeGRyLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOworCXJldHVybiAtRU5PTUVNOwogfQogCiAvKioKQEAgLTI1NjYsNiArMjYxNSw5IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCisJdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKKwlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOworCiAJaXhnYmVfY2xlYW5fcnhfcmluZyhhZGFwdGVyLCByeF9yaW5nKTsKIAogCXZmcmVlKHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKTsKQEAgLTI3MTEsNiArMjc2Myw4IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfdXA7CiAKKwluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CisKIAlyZXR1cm4gMDsKIAogZXJyX3VwOgpAQCAtMjg0Miw5ICsyODk2LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCWJvb2wgbGlua191cDsKIAl1MzIgbGlua19zcGVlZCA9IDA7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCWludCBpOwotI2VuZGlmCiAKIAlhZGFwdGVyLT5ody5tYWMub3BzLmNoZWNrX2xpbmsoJmFkYXB0ZXItPmh3LCAmKGxpbmtfc3BlZWQpLCAmbGlua191cCk7CiAKQEAgLTI4NjUsMTEgKzI5MTYsNyBAQAogCQkJCSAoRkxPV19UWCA/ICJUWCIgOiAiTm9uZSIpKSkpOwogCiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJCQluZXRpZl93YWtlX3N1YnF1ZXVlKG5ldGRldiwgaSk7Ci0jZW5kaWYKKwkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCQl9IGVsc2UgewogCQkJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwogCQkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSB0cnVlOwpAQCAtMjg3OCw3ICsyOTI1LDcgQEAKIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewogCQkJRFBSSU5USyhMSU5LLCBJTkZPLCAiTklDIExpbmsgaXMgRG93blxuIik7CiAJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJCX0KIAl9CiAKQEAgLTMxOTYsMTEgKzMyNDMsNyBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKIAluZXRpZl9zdG9wX3N1YnF1ZXVlKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOwotI2Vsc2UKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0jZW5kaWYKIAkvKiBIZXJiZXJ0J3Mgb3JpZ2luYWwgcGF0Y2ggaGFkOgogCSAqICBzbXBfbWJfX2FmdGVyX25ldGlmX3N0b3BfcXVldWUoKTsKIAkgKiBidXQgc2luY2UgdGhhdCBkb2Vzbid0IGV4aXN0IHlldCwganVzdCBvcGVuIGNvZGUgaXQuICovCkBAIC0zMjEyLDExICszMjU1LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIEEgcmVwcmlldmUhIC0gdXNlIHN0YXJ0X3F1ZXVlIGJlY2F1c2UgaXQgZG9lc24ndCBjYWxsIHNjaGVkdWxlICovCi0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQogCW5ldGlmX3dha2Vfc3VicXVldWUobmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7Ci0jZWxzZQotCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKLSNlbmRpZgogCSsrYWRhcHRlci0+cmVzdGFydF9xdWV1ZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNDQsOSArMzI4Myw3IEBACiAJdW5zaWduZWQgaW50IGY7CiAJdW5zaWduZWQgaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCiAJcl9pZHggPSAoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAtIDEpICYgc2tiLT5xdWV1ZV9tYXBwaW5nOwotI2VuZGlmCiAJdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKIAogCkBAIC0zNDM0LDExICszNDcxLDcgQEAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKIAluZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IGl4Z2JlX2FkYXB0ZXIpLCBNQVhfVFhfUVVFVUVTKTsKLSNlbHNlCi0JbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBpeGdiZV9hZGFwdGVyKSk7Ci0jZW5kaWYKIAlpZiAoIW5ldGRldikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvY19ldGhlcmRldjsKQEAgLTM1MTgsMTYgKzM1NTEsMTggQEAKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9SWCB8CiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOwogCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9NVUxUSV9RVUVVRTsKLSNlbmRpZgotCiAJLyogbWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLwogCWlmIChpeGdiZV92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oaHcsIE5VTEwpIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJUaGUgRUVQUk9NIENoZWNrc3VtIElzIE5vdCBWYWxpZFxuIik7CkBAIC0zNTkzLDExICszNjI4LDcgQEAKIAlpeGdiZV9zdGFydF9odyhodyk7CiAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZXRkZXYsIGkpOwotI2VuZGlmCisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAKIAlpeGdiZV9uYXBpX2FkZF9hbGwoYWRhcHRlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCmluZGV4IDQ4NGNiMmIuLjcxMTFjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwpAQCAtMTA4LDE0ICsxMDgsMTQgQEAKIAkJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKG5kc1tkZXNjLT5jaGFubmVsXSkpKQogCQkJZ290byBlcnI7CiAKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihkZXNjLT5wa3RfbGVuZ3RoICsgMik7CisJCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBkZXNjLT5wa3RfbGVuZ3RoICsgMik7CiAJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CiAJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwogCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBidWYsIGRlc2MtPnBrdF9sZW5ndGgpOwogCQkJc2tiX3B1dChza2IsIGRlc2MtPnBrdF9sZW5ndGgpOwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRzW2Rlc2MtPmNoYW5uZWxdKTsKIAotCQkJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGliODM5MC5jIGIvZHJpdmVycy9uZXQvbGliODM5MC5jCmluZGV4IDBjNTQ0N2QuLjAwZDU5YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xpYjgzOTAuYworKysgYi9kcml2ZXJzL25ldC9saWI4MzkwLmMKQEAgLTE1MCwxOSArMTUwLDE5IEBACiAgKgljYXJkIG1lYW5zIHRoYXQgYXBwcm9hY2ggY2F1c2VkIGhvcnJpYmxlIHByb2JsZW1zIGxpa2UgbG9zaW5nIHNlcmlhbCBkYXRhCiAgKglhdCAzODQwMCBiYXVkIG9uIHNvbWUgY2hpcHMuIFJlbWVtYmVyIG1hbnkgODM5MCBuaWNzIG9uIFBDSSB3ZXJlIElTQQogICoJY2hpcHMgd2l0aCBGUEdBIGZyb250IGVuZHMuCi0gKgkKKyAqCiAgKglPayB0aGUgbG9naWMgYmVoaW5kIHRoZSA4MzkwIGlzIHZlcnkgc2ltcGxlOgotICoJCisgKgogICoJVGhpbmdzIHRvIGtub3cKICAqCQktIElSUSBkZWxpdmVyeSBpcyBhc3luY2hyb25vdXMgdG8gdGhlIFBDSSBidXMKICAqCQktIEJsb2NraW5nIHRoZSBsb2NhbCBDUFUgSVJRIHZpYSBzcGluIGxvY2tzIHdhcyB0b28gc2xvdwogICoJCS0gVGhlIGNoaXAgaGFzIHJlZ2lzdGVyIHdpbmRvd3MgbmVlZGluZyBsb2NraW5nIHdvcmsKLSAqCQorICoKICAqCVNvIHRoZSBwYXRoIHdhcyBvbmNlIChJIHNheSBvbmNlIGFzIHBlb3BsZSBhcHBlYXIgdG8gaGF2ZSBjaGFuZ2VkIGl0CiAgKglpbiB0aGUgbWVhbiB0aW1lIGFuZCBpdCBub3cgbG9va3MgcmF0aGVyIGJvZ3VzIGlmIHRoZSBjaGFuZ2VzIHRvIHVzZQogICoJZGlzYWJsZV9pcnFfbm9zeW5jX2lycXNhdmUgYXJlIGRpc2FibGluZyB0aGUgbG9jYWwgSVJRKQotICoJCi0gKgkKKyAqCisgKgogICoJCVRha2UgdGhlIHBhZ2UgbG9jawogICoJCU1hc2sgdGhlIElSUSBvbiBjaGlwCiAgKgkJRGlzYWJsZSB0aGUgSVJRIChidXQgbm90IG1hc2sgbG9jYWxseS0gc29tZW9uZSBzZWVtcyB0byBoYXZlCkBAIC0xNzAsMjIgKzE3MCwyMiBAQAogICoJCQlbVGhpcyBtdXN0IGJlIF9ub3N5bmMgYXMgdGhlIHBhZ2UgbG9jayBtYXkgb3RoZXJ3aXNlCiAgKgkJCQlkZWFkbG9jayB1c10KICAqCQlEcm9wIHRoZSBwYWdlIGxvY2sgYW5kIHR1cm4gSVJRcyBiYWNrIG9uCi0gKgkJCisgKgogICoJCUF0IHRoaXMgcG9pbnQgYW4gZXhpc3RpbmcgSVJRIG1heSBzdGlsbCBiZSBydW5uaW5nIGJ1dCB3ZSBjYW4ndAogICoJCWdldCBhIG5ldyBvbmUKLSAqCQorICoKICAqCQlUYWtlIHRoZSBsb2NrIChzbyB3ZSBrbm93IHRoZSBJUlEgaGFzIHRlcm1pbmF0ZWQpIGJ1dCBkb24ndCBtYXNrCiAgKgl0aGUgSVJRcyBvbiB0aGUgcHJvY2Vzc29yCiAgKgkJU2V0IGlycWxvY2sgW2ZvciBkZWJ1Z10KLSAqCQorICoKICAqCQlUcmFuc21pdCAoc2xvdyBhcyAqKioqKQotICoJCisgKgogICoJCXJlLWVuYWJsZSB0aGUgSVJRCi0gKgkKLSAqCQorICoKKyAqCiAgKglXZSBoYXZlIHRvIHVzZSBkaXNhYmxlX2lycSBiZWNhdXNlIG90aGVyd2lzZSB5b3Ugd2lsbCBnZXQgZGVsYXllZAogICoJaW50ZXJydXB0cyBvbiB0aGUgQVBJQyBidXMgZGVhZGxvY2tpbmcgdGhlIHRyYW5zbWl0IHBhdGguCi0gKgkKKyAqCiAgKglRdWl0ZSBoYWlyeSBidXQgdGhlIGNoaXAgc2ltcGx5IHdhc24ndCBkZXNpZ25lZCBmb3IgU01QIGFuZCB5b3UgY2FuJ3QKICAqCWV2ZW4gQUNLIGFuIGludGVycnVwdCB3aXRob3V0IHJpc2tpbmcgY29ycnVwdGluZyBvdGhlciBwYXJhbGxlbAogICoJYWN0aXZpdGllcyBvbiB0aGUgY2hpcC4iIFtsa21sLCAyNSBKdWwgMjAwN10KQEAgLTI2NSw3ICsyNjUsNyBAQAogCWludCB0eHNyLCBpc3IsIHRpY2tzc29mYXIgPSBqaWZmaWVzIC0gZGV2LT50cmFuc19zdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZWlfbG9jYWwtPnN0YXQudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7CiAJdHhzciA9IGVpX2luYihlODM5MF9iYXNlK0VOMF9UU1IpOwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJCWRldi0+bmFtZSwgKHR4c3IgJiBFTlRTUl9BQlQpID8gImV4Y2VzcyBjb2xsaXNpb25zLiIgOgogCQkoaXNyKSA/ICJsb3N0IGludGVycnVwdD8iIDogImNhYmxlIHByb2JsZW0/IiwgdHhzciwgaXNyLCB0aWNrc3NvZmFyKTsKIAotCWlmICghaXNyICYmICFlaV9sb2NhbC0+c3RhdC50eF9wYWNrZXRzKQorCWlmICghaXNyICYmICFkZXYtPnN0YXRzLnR4X3BhY2tldHMpCiAJewogCQkvKiBUaGUgODM5MCBwcm9iYWJseSBoYXNuJ3QgZ290dGVuIG9uIHRoZSBjYWJsZSB5ZXQuICovCiAJCWVpX2xvY2FsLT5pbnRlcmZhY2VfbnVtIF49IDE7ICAgLyogVHJ5IGEgZGlmZmVyZW50IHhjdnIuICAqLwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJCWVpX291dGJfcChFTklTUl9BTEwsIGU4MzkwX2Jhc2UgKyBFTjBfSU1SKTsKIAkJc3Bpbl91bmxvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOwogCQllbmFibGVfaXJxX2xvY2tkZXBfaXJxcmVzdG9yZShkZXYtPmlycSwgJmZsYWdzKTsKLQkJZWlfbG9jYWwtPnN0YXQudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCXJldHVybiAxOwogCX0KIApAQCAtNDE3LDcgKzQxNyw3IEBACiAJZW5hYmxlX2lycV9sb2NrZGVwX2lycXJlc3RvcmUoZGV2LT5pcnEsICZmbGFncyk7CiAKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwotCWVpX2xvY2FsLT5zdGF0LnR4X2J5dGVzICs9IHNlbmRfbGVuZ3RoOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2VuZF9sZW5ndGg7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5Myw5ICs0OTMsOSBAQAogCiAJCWlmIChpbnRlcnJ1cHRzICYgRU5JU1JfQ09VTlRFUlMpCiAJCXsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2ZyYW1lX2Vycm9ycyArPSBlaV9pbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIwKTsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2NyY19lcnJvcnMgICArPSBlaV9pbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIxKTsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X21pc3NlZF9lcnJvcnMrPSBlaV9pbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIyKTsKKwkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGVpX2luYl9wKGU4MzkwX2Jhc2UgKyBFTjBfQ09VTlRFUjApOworCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzICAgKz0gZWlfaW5iX3AoZTgzOTBfYmFzZSArIEVOMF9DT1VOVEVSMSk7CisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrPSBlaV9pbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIyKTsKIAkJCWVpX291dGJfcChFTklTUl9DT1VOVEVSUywgZTgzOTBfYmFzZSArIEVOMF9JU1IpOyAvKiBBY2sgaW50ci4gKi8KIAkJfQogCkBAIC01NTMsNyArNTUzLDggQEAKIHN0YXRpYyB2b2lkIGVpX3R4X2VycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwkvKiBlaV9sb2NhbCBpcyB1c2VkIG9uIHNvbWUgcGxhdGZvcm1zIHZpYSB0aGUgRUlfU0hJRlQgbWFjcm8gKi8KKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCBfX21heWJlX3VudXNlZCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgY2hhciB0eHNyID0gZWlfaW5iX3AoZTgzOTBfYmFzZStFTjBfVFNSKTsKIAl1bnNpZ25lZCBjaGFyIHR4X3dhc19hYm9ydGVkID0gdHhzciAmIChFTlRTUl9BQlQrRU5UU1JfRlUpOwogCkBAIC01NzgsMTAgKzU3OSwxMCBAQAogCQllaV90eF9pbnRyKGRldik7CiAJZWxzZQogCXsKLQkJZWlfbG9jYWwtPnN0YXQudHhfZXJyb3JzKys7Ci0JCWlmICh0eHNyICYgRU5UU1JfQ1JTKSBlaV9sb2NhbC0+c3RhdC50eF9jYXJyaWVyX2Vycm9ycysrOwotCQlpZiAodHhzciAmIEVOVFNSX0NESCkgZWlfbG9jYWwtPnN0YXQudHhfaGVhcnRiZWF0X2Vycm9ycysrOwotCQlpZiAodHhzciAmIEVOVFNSX09XQykgZWlfbG9jYWwtPnN0YXQudHhfd2luZG93X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlpZiAodHhzciAmIEVOVFNSX0NSUykgZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlpZiAodHhzciAmIEVOVFNSX0NESCkgZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCWlmICh0eHNyICYgRU5UU1JfT1dDKSBkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAl9CiB9CiAKQEAgLTY0NSwyNSArNjQ2LDI1IEBACiAKIAkvKiBNaW5pbWl6ZSBUeCBsYXRlbmN5OiB1cGRhdGUgdGhlIHN0YXRpc3RpY3MgYWZ0ZXIgd2UgcmVzdGFydCBUWGluZy4gKi8KIAlpZiAoc3RhdHVzICYgRU5UU1JfQ09MKQotCQllaV9sb2NhbC0+c3RhdC5jb2xsaXNpb25zKys7CisJCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOwogCWlmIChzdGF0dXMgJiBFTlRTUl9QVFgpCi0JCWVpX2xvY2FsLT5zdGF0LnR4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZWxzZQogCXsKLQkJZWlfbG9jYWwtPnN0YXQudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWlmIChzdGF0dXMgJiBFTlRTUl9BQlQpCiAJCXsKLQkJCWVpX2xvY2FsLT5zdGF0LnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQllaV9sb2NhbC0+c3RhdC5jb2xsaXNpb25zICs9IDE2OworCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IDE2OwogCQl9CiAJCWlmIChzdGF0dXMgJiBFTlRTUl9DUlMpCi0JCQllaV9sb2NhbC0+c3RhdC50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgRU5UU1JfRlUpCi0JCQllaV9sb2NhbC0+c3RhdC50eF9maWZvX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgRU5UU1JfQ0RIKQotCQkJZWlfbG9jYWwtPnN0YXQudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7CiAJCWlmIChzdGF0dXMgJiBFTlRTUl9PV0MpCi0JCQllaV9sb2NhbC0+c3RhdC50eF93aW5kb3dfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAl9CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQpAQCAtNzMwLDcgKzczMSw3IEBACiAJCQkmJiByeF9mcmFtZS5uZXh0ICE9IG5leHRfZnJhbWUgKyAxIC0gbnVtX3J4X3BhZ2VzKSB7CiAJCQllaV9sb2NhbC0+Y3VycmVudF9wYWdlID0gcnhpbmdfcGFnZTsKIAkJCWVpX291dGIoZWlfbG9jYWwtPmN1cnJlbnRfcGFnZS0xLCBlODM5MF9iYXNlK0VOMF9CT1VOREFSWSk7Ci0JCQllaV9sb2NhbC0+c3RhdC5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC03NDAsOCArNzQxLDggQEAKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJvZ3VzIHBhY2tldCBzaXplOiAlZCwgc3RhdHVzPSUjMnggbnhwZz0lIzJ4LlxuIiwKIAkJCQkJICAgZGV2LT5uYW1lLCByeF9mcmFtZS5jb3VudCwgcnhfZnJhbWUuc3RhdHVzLAogCQkJCQkgICByeF9mcmFtZS5uZXh0KTsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2Vycm9ycysrOwotCQkJZWlfbG9jYWwtPnN0YXQucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQl9CiAJCSBlbHNlIGlmICgocGt0X3N0YXQgJiAweDBGKSA9PSBFTlJTUl9SWE9LKQogCQl7CkBAIC03NTMsNyArNzU0LDcgQEAKIAkJCQlpZiAoZWlfZGVidWcgPiAxKQogCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvdWxkbid0IGFsbG9jYXRlIGEgc2tfYnVmZiBvZiBzaXplICVkLlxuIiwKIAkJCQkJCSAgIGRldi0+bmFtZSwgcGt0X2xlbik7Ci0JCQkJZWlfbG9jYWwtPnN0YXQucnhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCWJyZWFrOwogCQkJfQogCQkJZWxzZQpAQCAtNzY0LDEwICs3NjUsMTAgQEAKIAkJCQlza2ItPnByb3RvY29sPWV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwogCQkJCW5ldGlmX3J4KHNrYik7CiAJCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJCQllaV9sb2NhbC0+c3RhdC5yeF9wYWNrZXRzKys7Ci0JCQkJZWlfbG9jYWwtPnN0YXQucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCQkJaWYgKHBrdF9zdGF0ICYgRU5SU1JfUEhZKQotCQkJCQllaV9sb2NhbC0+c3RhdC5tdWx0aWNhc3QrKzsKKwkJCQkJZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAkJCX0KIAkJfQogCQllbHNlCkBAIC03NzYsMTAgKzc3NywxMCBAQAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYm9ndXMgcGFja2V0OiBzdGF0dXM9JSMyeCBueHBnPSUjMnggc2l6ZT0lZFxuIiwKIAkJCQkJICAgZGV2LT5uYW1lLCByeF9mcmFtZS5zdGF0dXMsIHJ4X2ZyYW1lLm5leHQsCiAJCQkJCSAgIHJ4X2ZyYW1lLmNvdW50KTsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCS8qIE5COiBUaGUgTklDIGNvdW50cyBDUkMsIGZyYW1lIGFuZCBtaXNzZWQgZXJyb3JzLiAqLwogCQkJaWYgKHBrdF9zdGF0ICYgRU5SU1JfRk8pCi0JCQkJZWlfbG9jYWwtPnN0YXQucnhfZmlmb19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCX0KIAkJbmV4dF9mcmFtZSA9IHJ4X2ZyYW1lLm5leHQ7CiAKQEAgLTgxNiw3ICs4MTcsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogCXVuc2lnbmVkIGNoYXIgd2FzX3R4aW5nLCBtdXN0X3Jlc2VuZCA9IDA7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCS8qIGVpX2xvY2FsIGlzIHVzZWQgb24gc29tZSBwbGF0Zm9ybXMgdmlhIHRoZSBFSV9TSElGVCBtYWNybyAqLworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsIF9fbWF5YmVfdW51c2VkID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qCiAJICogUmVjb3JkIHdoZXRoZXIgYSBUeCB3YXMgaW4gcHJvZ3Jlc3MgYW5kIHRoZW4gaXNzdWUgdGhlCkBAIC04MjcsNyArODI5LDcgQEAKIAogCWlmIChlaV9kZWJ1ZyA+IDEpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZXIgb3ZlcnJ1bi5cbiIsIGRldi0+bmFtZSk7Ci0JZWlfbG9jYWwtPnN0YXQucnhfb3Zlcl9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAKIAkvKgogCSAqIFdhaXQgYSBmdWxsIFR4IHRpbWUgKDEuMm1zKSArIHNvbWUgZ3VhcmQgdGltZSwgTlMgc2F5cyAxLjZtcyB0b3RhbC4KQEAgLTg4OSwxNiArODkxLDE2IEBACiAKIAkvKiBJZiB0aGUgY2FyZCBpcyBzdG9wcGVkLCBqdXN0IHJldHVybiB0aGUgcHJlc2VudCBzdGF0cy4gKi8KIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuICZlaV9sb2NhbC0+c3RhdDsKKwkJcmV0dXJuICZkZXYtPnN0YXRzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssZmxhZ3MpOwogCS8qIFJlYWQgdGhlIGNvdW50ZXIgcmVnaXN0ZXJzLCBhc3N1bWluZyB3ZSBhcmUgaW4gcGFnZSAwLiAqLwotCWVpX2xvY2FsLT5zdGF0LnJ4X2ZyYW1lX2Vycm9ycyArPSBlaV9pbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjApOwotCWVpX2xvY2FsLT5zdGF0LnJ4X2NyY19lcnJvcnMgICArPSBlaV9pbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjEpOwotCWVpX2xvY2FsLT5zdGF0LnJ4X21pc3NlZF9lcnJvcnMrPSBlaV9pbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjIpOworCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGVpX2luYl9wKGlvYWRkciArIEVOMF9DT1VOVEVSMCk7CisJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzICAgKz0gZWlfaW5iX3AoaW9hZGRyICsgRU4wX0NPVU5URVIxKTsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrPSBlaV9pbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAmZWlfbG9jYWwtPnN0YXQ7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKaW5kZXggNDFiNzc0Yi4uNDlmNmJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYworKysgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCiAJLyogaXQncyBPSyB0byB1c2UgcGVyX2NwdV9wdHIoKSBiZWNhdXNlIEJIcyBhcmUgb2ZmICovCi0JcGNwdV9sc3RhdHMgPSBuZXRkZXZfcHJpdihkZXYpOworCXBjcHVfbHN0YXRzID0gZGV2LT5tbF9wcml2OwogCWxiX3N0YXRzID0gcGVyX2NwdV9wdHIocGNwdV9sc3RhdHMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJbGJfc3RhdHMtPmJ5dGVzICs9IHNrYi0+bGVuOwogCWxiX3N0YXRzLT5wYWNrZXRzKys7CkBAIC0xNzEsNyArMTcxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHBhY2tldHMgPSAwOwogCWludCBpOwogCi0JcGNwdV9sc3RhdHMgPSBuZXRkZXZfcHJpdihkZXYpOworCXBjcHVfbHN0YXRzID0gZGV2LT5tbF9wcml2OwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWNvbnN0IHN0cnVjdCBwY3B1X2xzdGF0cyAqbGJfc3RhdHM7CiAKQEAgLTIwNywxMyArMjA3LDEzIEBACiAJaWYgKCFsc3RhdHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2LT5wcml2ID0gbHN0YXRzOworCWRldi0+bWxfcHJpdiA9IGxzdGF0czsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbG9vcGJhY2tfZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNwdV9sc3RhdHMgKmxzdGF0cyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjcHVfbHN0YXRzICpsc3RhdHMgPSBkZXYtPm1sX3ByaXY7CiAKIAlmcmVlX3BlcmNwdShsc3RhdHMpOwogCWZyZWVfbmV0ZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWM4MzkwLmMgYi9kcml2ZXJzL25ldC9tYWM4MzkwLmMKaW5kZXggOWU3MDA3NC4uOThlM2ViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjODM5MC5jCisrKyBiL2RyaXZlcnMvbmV0L21hYzgzOTAuYwpAQCAtMTE3LDggKzExNyw2IEBACiAJQUNDRVNTXzE2LAogfTsKIAotZXh0ZXJuIGVudW0gbWFjODM5MF90eXBlIG1hYzgzOTBfaWRlbnQoc3RydWN0IG51YnVzX2RldiAqIGRldik7Ci1leHRlcm4gaW50IG1hYzgzOTBfbWVtc2l6ZSh1bnNpZ25lZCBsb25nIG1lbWJhc2UpOwogZXh0ZXJuIGludCBtYWM4MzkwX21lbXRlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpOwogc3RhdGljIGludCBtYWM4MzkwX2luaXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIHN0cnVjdCBudWJ1c19kZXYgKiBuZGV2LAogCQkJICAgZW51bSBtYWM4MzkwX3R5cGUgdHlwZSk7CkBAIC0xNjMsNyArMTYxLDcgQEAKIHN0YXRpYyB2b2lkIHdvcmRfbWVtY3B5X3RvY2FyZCh2b2lkICp0cCwgY29uc3Qgdm9pZCAqZnAsIGludCBjb3VudCk7CiBzdGF0aWMgdm9pZCB3b3JkX21lbWNweV9mcm9tY2FyZCh2b2lkICp0cCwgY29uc3Qgdm9pZCAqZnAsIGludCBjb3VudCk7CiAKLWVudW0gbWFjODM5MF90eXBlIF9faW5pdCBtYWM4MzkwX2lkZW50KHN0cnVjdCBudWJ1c19kZXYgKiBkZXYpCitzdGF0aWMgZW51bSBtYWM4MzkwX3R5cGUgX19pbml0IG1hYzgzOTBfaWRlbnQoc3RydWN0IG51YnVzX2RldiAqZGV2KQogewogCXN3aXRjaCAoZGV2LT5kcl9zdykgewogCQljYXNlIE5VQlVTX0RSU1dfM0NPTToKQEAgLTIzNCw3ICsyMzIsNyBAQAogCXJldHVybiBNQUM4MzkwX05PTkU7CiB9CiAKLWVudW0gbWFjODM5MF9hY2Nlc3MgX19pbml0IG1hYzgzOTBfdGVzdGlvKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWVtYmFzZSkKK3N0YXRpYyBlbnVtIG1hYzgzOTBfYWNjZXNzIF9faW5pdCBtYWM4MzkwX3Rlc3Rpbyh2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG1lbWJhc2UpCiB7CiAJdW5zaWduZWQgbG9uZyBvdXRkYXRhID0gMHhBNUEwQjVCMDsKIAl1bnNpZ25lZCBsb25nIGluZGF0YSA9ICAweDAwMDAwMDAwOwpAQCAtMjUyLDcgKzI1MCw3IEBACiAJcmV0dXJuIEFDQ0VTU19VTktOT1dOOwogfQogCi1pbnQgX19pbml0IG1hYzgzOTBfbWVtc2l6ZSh1bnNpZ25lZCBsb25nIG1lbWJhc2UpCitzdGF0aWMgaW50IF9faW5pdCBtYWM4MzkwX21lbXNpemUodW5zaWduZWQgbG9uZyBtZW1iYXNlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIGo7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNiLmMgYi9kcml2ZXJzL25ldC9tYWNiLmMKaW5kZXggMGE1NzQ1YS4uZGFiYTgyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjYi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY2IuYwpAQCAtODAsOCArODAsMTIgQEAKIAlhZGRyWzRdID0gdG9wICYgMHhmZjsKIAlhZGRyWzVdID0gKHRvcCA+PiA4KSAmIDB4ZmY7CiAKLQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkgewogCQltZW1jcHkoYnAtPmRldi0+ZGV2X2FkZHIsIGFkZHIsIHNpemVvZihhZGRyKSk7CisJfSBlbHNlIHsKKwkJZGV2X2luZm8oJmJwLT5wZGV2LT5kZXYsICJpbnZhbGlkIGh3IGFkZHJlc3MsIHVzaW5nIHJhbmRvbVxuIik7CisJCXJhbmRvbV9ldGhlcl9hZGRyKGJwLT5kZXYtPmRldl9hZGRyKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgbWFjYl9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSkKQEAgLTE2MCw5ICsxNjQsNyBAQAogCX0KIAogCWlmIChwaHlkZXYtPmxpbmsgIT0gYnAtPmxpbmspIHsKLQkJaWYgKHBoeWRldi0+bGluaykKLQkJCW5ldGlmX3NjaGVkdWxlKGRldik7Ci0JCWVsc2UgeworCQlpZiAoIXBoeWRldi0+bGluaykgewogCQkJYnAtPnNwZWVkID0gMDsKIAkJCWJwLT5kdXBsZXggPSAtMTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKaW5kZXggYjI2NzE2MS4uZTY0YzIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCkBAIC04Myw5ICs4Myw2IEBACiAKIHN0YXRpYyBpbnQgc29uaWNfdmVyc2lvbl9wcmludGVkOwogCi1leHRlcm4gaW50IG1hY19vbmJvYXJkX3NvbmljX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotZXh0ZXJuIGludCBtYWNfbnVidXNfc29uaWNfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci0KIC8qIEZvciBvbmJvYXJkIFNPTklDICovCiAjZGVmaW5lIE9OQk9BUkRfU09OSUNfUkVHSVNURVJTCTB4NTBGMEEwMDAKICNkZWZpbmUgT05CT0FSRF9TT05JQ19QUk9NX0JBU0UJMHg1MGYwODAwMApAQCAtMTcwLDcgKzE2Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IF9faW5pdCBtYWNzb25pY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCitzdGF0aWMgaW50IF9faW5pdCBtYWNzb25pY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNvbmljX2xvY2FsKiBscCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTIxOCw3ICsyMTUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgX19pbml0IG1hY19vbmJvYXJkX3NvbmljX2V0aGVybmV0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKK3N0YXRpYyBpbnQgX19pbml0IG1hY19vbmJvYXJkX3NvbmljX2V0aGVybmV0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljb25zdCBpbnQgcHJvbV9hZGRyID0gT05CT0FSRF9TT05JQ19QUk9NX0JBU0U7CkBAIC0yODQsNyArMjgxLDcgQEAKIAl9IGVsc2UgcmV0dXJuIDA7CiB9CiAKLWludCBfX2luaXQgbWFjX29uYm9hcmRfc29uaWNfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKK3N0YXRpYyBpbnQgX19pbml0IG1hY19vbmJvYXJkX3NvbmljX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJLyogQndhaGFoYWhhICovCiAJc3RhdGljIGludCBvbmNlX2lzX21vcmVfdGhhbl9lbm91Z2g7CkBAIC00MDUsOSArNDAyLDkgQEAKIAlyZXR1cm4gbWFjc29uaWNfaW5pdChkZXYpOwogfQogCi1pbnQgX19pbml0IG1hY19udWJ1c19zb25pY19ldGhlcm5ldF9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHByb21fYWRkciwKLQkJCQkJIGludCBpZCkKK3N0YXRpYyBpbnQgX19pbml0IG1hY19udWJ1c19zb25pY19ldGhlcm5ldF9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQl1bnNpZ25lZCBsb25nIHByb21fYWRkciwKKwkJCQkJCWludCBpZCkKIHsKIAlpbnQgaTsKIAlmb3IoaSA9IDA7IGkgPCA2OyBpKyspCkBAIC00MjAsNyArNDE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBtYWNzb25pY19pZGVudChzdHJ1Y3QgbnVidXNfZGV2KiBuZGV2KQorc3RhdGljIGludCBfX2luaXQgbWFjc29uaWNfaWRlbnQoc3RydWN0IG51YnVzX2RldiAqbmRldikKIHsKIAlpZiAobmRldi0+ZHJfaHcgPT0gTlVCVVNfRFJIV19BU0FOVEVfTEMgJiYKIAkgICAgbmRldi0+ZHJfc3cgPT0gTlVCVVNfRFJTV19TT05JQ19MQykKQEAgLTQ0NSw3ICs0NDIsNyBAQAogCXJldHVybiAtMTsKIH0KIAotaW50IF9faW5pdCBtYWNfbnVidXNfc29uaWNfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKK3N0YXRpYyBpbnQgX19pbml0IG1hY19udWJ1c19zb25pY19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0YXRpYyBpbnQgc2xvdHM7CiAJc3RydWN0IG51YnVzX2RldiogbmRldiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKaW5kZXggODYwZDc1ZC4uNDIzOTQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwpAQCAtMTg5LDEyICsxODksMjAgQEAKIAogCWVyciA9IGRldl91bmljYXN0X2FkZChsb3dlcmRldiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQotCQlkZXZfc2V0X2FsbG11bHRpKGxvd2VyZGV2LCAxKTsKKwkJZ290byBvdXQ7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJZXJyID0gZGV2X3NldF9hbGxtdWx0aShsb3dlcmRldiwgMSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBkZWxfdW5pY2FzdDsKKwl9CiAKIAlobGlzdF9hZGRfaGVhZF9yY3UoJnZsYW4tPmhsaXN0LCAmcG9ydC0+dmxhbl9oYXNoW2Rldi0+ZGV2X2FkZHJbNV1dKTsKIAlyZXR1cm4gMDsKKworZGVsX3VuaWNhc3Q6CisJZGV2X3VuaWNhc3RfZGVsZXRlKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBtYWN2bGFuX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI2OCw2ICsyNzYsNyBAQAogICogc2VwYXJhdGUgY2xhc3Mgc2luY2UgdGhleSBhbHdheXMgbmVzdC4KICAqLwogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBtYWN2bGFuX25ldGRldl94bWl0X2xvY2tfa2V5Oworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBtYWN2bGFuX25ldGRldl9hZGRyX2xvY2tfa2V5OwogCiAjZGVmaW5lIE1BQ1ZMQU5fRkVBVFVSRVMgXAogCShORVRJRl9GX1NHIHwgTkVUSUZfRl9BTExfQ1NVTSB8IE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfRlJBR0xJU1QgfCBcCkBAIC0yNzcsNiArMjg2LDIxIEBACiAjZGVmaW5lIE1BQ1ZMQU5fU1RBVEVfTUFTSyBcCiAJKCgxPDxfX0xJTktfU1RBVEVfTk9DQVJSSUVSKSB8ICgxPDxfX0xJTktfU1RBVEVfRE9STUFOVCkpCiAKK3N0YXRpYyB2b2lkIG1hY3ZsYW5fc2V0X2xvY2tkZXBfY2xhc3Nfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLAorCQkJCQkgIHZvaWQgKl91bnVzZWQpCit7CisJbG9ja2RlcF9zZXRfY2xhc3MoJnR4cS0+X3htaXRfbG9jaywKKwkJCSAgJm1hY3ZsYW5fbmV0ZGV2X3htaXRfbG9ja19rZXkpOworfQorCitzdGF0aWMgdm9pZCBtYWN2bGFuX3NldF9sb2NrZGVwX2NsYXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbG9ja2RlcF9zZXRfY2xhc3MoJmRldi0+YWRkcl9saXN0X2xvY2ssCisJCQkgICZtYWN2bGFuX25ldGRldl9hZGRyX2xvY2tfa2V5KTsKKwluZXRkZXZfZm9yX2VhY2hfdHhfcXVldWUoZGV2LCBtYWN2bGFuX3NldF9sb2NrZGVwX2NsYXNzX29uZSwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbnQgbWFjdmxhbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTI4Nyw3ICszMTEsOCBAQAogCWRldi0+ZmVhdHVyZXMgCQk9IGxvd2VyZGV2LT5mZWF0dXJlcyAmIE1BQ1ZMQU5fRkVBVFVSRVM7CiAJZGV2LT5pZmxpbmsJCT0gbG93ZXJkZXYtPmlmaW5kZXg7CiAKLQlsb2NrZGVwX3NldF9jbGFzcygmZGV2LT5feG1pdF9sb2NrLCAmbWFjdmxhbl9uZXRkZXZfeG1pdF9sb2NrX2tleSk7CisJbWFjdmxhbl9zZXRfbG9ja2RlcF9jbGFzcyhkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21ldGguYyBiL2RyaXZlcnMvbmV0L21ldGguYwppbmRleCAwYjMyNjQ4Li40Y2IzNjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbWV0aC5jCkBAIC0yODcsNyArMjg3LDcgQEAKIAogCS8qIEluaXRpYWwgbW9kZTogMTAgfCBIYWxmLWR1cGxleCB8IEFjY2VwdCBub3JtYWwgcGFja2V0cyAqLwogCXByaXYtPm1hY19jdHJsID0gTUVUSF9BQ0NFUFRfTUNBU1QgfCBNRVRIX0RFRkFVTFRfSVBHOwotCWlmIChkZXYtPmZsYWdzIHwgSUZGX1BST01JU0MpCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJcHJpdi0+bWFjX2N0cmwgfD0gTUVUSF9QUk9NSVNDOwogCW1hY2UtPmV0aC5tYWNfY3RybCA9IHByaXYtPm1hY19jdHJsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCBiNzkxNWNkLi44YTk3YTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTM0LDQwNiArMzQsMTQ1IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgotCiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KLQogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgogCi0jZGVmaW5lIE1WNjQzWFhfQ0hFQ0tTVU1fT0ZGTE9BRF9UWAotI2RlZmluZSBNVjY0M1hYX05BUEkKLSNkZWZpbmUgTVY2NDNYWF9UWF9GQVNUX1JFRklMTAotI3VuZGVmCU1WNjQzWFhfQ09BTAorc3RhdGljIGNoYXIgbXY2NDN4eF9ldGhfZHJpdmVyX25hbWVbXSA9ICJtdjY0M3h4X2V0aCI7CitzdGF0aWMgY2hhciBtdjY0M3h4X2V0aF9kcml2ZXJfdmVyc2lvbltdID0gIjEuMSI7CiAKLSNkZWZpbmUgTVY2NDNYWF9UWF9DT0FMIDEwMAotI2lmZGVmIE1WNjQzWFhfQ09BTAotI2RlZmluZSBNVjY0M1hYX1JYX0NPQUwgMTAwCi0jZW5kaWYKKyNkZWZpbmUgTVY2NDNYWF9FVEhfQ0hFQ0tTVU1fT0ZGTE9BRF9UWAorI2RlZmluZSBNVjY0M1hYX0VUSF9OQVBJCisjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX0ZBU1RfUkVGSUxMCiAKLSNpZmRlZiBNVjY0M1hYX0NIRUNLU1VNX09GRkxPQURfVFgKKyNpZmRlZiBNVjY0M1hYX0VUSF9DSEVDS1NVTV9PRkZMT0FEX1RYCiAjZGVmaW5lIE1BWF9ERVNDU19QRVJfU0tCCShNQVhfU0tCX0ZSQUdTICsgMSkKICNlbHNlCiAjZGVmaW5lIE1BWF9ERVNDU19QRVJfU0tCCTEKICNlbmRpZgogCi0jZGVmaW5lIEVUSF9WTEFOX0hMRU4JCTQKLSNkZWZpbmUgRVRIX0ZDU19MRU4JCTQKLSNkZWZpbmUgRVRIX0hXX0lQX0FMSUdOCQkyCQkvKiBodyBhbGlnbnMgSVAgaGVhZGVyICovCi0jZGVmaW5lIEVUSF9XUkFQUEVSX0xFTgkJKEVUSF9IV19JUF9BTElHTiArIEVUSF9ITEVOICsgXAotCQkJCQlFVEhfVkxBTl9ITEVOICsgRVRIX0ZDU19MRU4pCi0jZGVmaW5lIEVUSF9SWF9TS0JfU0laRQkJKGRldi0+bXR1ICsgRVRIX1dSQVBQRVJfTEVOICsgXAotCQkJCQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpKQotCiAvKgogICogUmVnaXN0ZXJzIHNoYXJlZCBiZXR3ZWVuIGFsbCBwb3J0cy4KICAqLwotI2RlZmluZSBQSFlfQUREUl9SRUcJCQkJMHgwMDAwCi0jZGVmaW5lIFNNSV9SRUcJCQkJCTB4MDAwNAotI2RlZmluZSBXSU5ET1dfQkFTRShpKQkJCQkoMHgwMjAwICsgKChpKSA8PCAzKSkKLSNkZWZpbmUgV0lORE9XX1NJWkUoaSkJCQkJKDB4MDIwNCArICgoaSkgPDwgMykpCi0jZGVmaW5lIFdJTkRPV19SRU1BUF9ISUdIKGkpCQkJKDB4MDI4MCArICgoaSkgPDwgMikpCi0jZGVmaW5lIFdJTkRPV19CQVJfRU5BQkxFCQkJMHgwMjkwCi0jZGVmaW5lIFdJTkRPV19QUk9URUNUKGkpCQkJKDB4MDI5NCArICgoaSkgPDwgNCkpCisjZGVmaW5lIFBIWV9BRERSCQkJMHgwMDAwCisjZGVmaW5lIFNNSV9SRUcJCQkJMHgwMDA0CisjZGVmaW5lIFdJTkRPV19CQVNFKHcpCQkJKDB4MDIwMCArICgodykgPDwgMykpCisjZGVmaW5lIFdJTkRPV19TSVpFKHcpCQkJKDB4MDIwNCArICgodykgPDwgMykpCisjZGVmaW5lIFdJTkRPV19SRU1BUF9ISUdIKHcpCQkoMHgwMjgwICsgKCh3KSA8PCAyKSkKKyNkZWZpbmUgV0lORE9XX0JBUl9FTkFCTEUJCTB4MDI5MAorI2RlZmluZSBXSU5ET1dfUFJPVEVDVCh3KQkJKDB4MDI5NCArICgodykgPDwgNCkpCiAKIC8qCiAgKiBQZXItcG9ydCByZWdpc3RlcnMuCiAgKi8KLSNkZWZpbmUgUE9SVF9DT05GSUdfUkVHKHApCQkJCSgweDA0MDAgKyAoKHApIDw8IDEwKSkKLSNkZWZpbmUgUE9SVF9DT05GSUdfRVhURU5EX1JFRyhwKQkJCSgweDA0MDQgKyAoKHApIDw8IDEwKSkKLSNkZWZpbmUgTUFDX0FERFJfTE9XKHApCQkJCQkoMHgwNDE0ICsgKChwKSA8PCAxMCkpCi0jZGVmaW5lIE1BQ19BRERSX0hJR0gocCkJCQkJKDB4MDQxOCArICgocCkgPDwgMTApKQotI2RlZmluZSBTRE1BX0NPTkZJR19SRUcocCkJCQkJKDB4MDQxYyArICgocCkgPDwgMTApKQotI2RlZmluZSBQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwKQkJCSgweDA0M2MgKyAoKHApIDw8IDEwKSkKLSNkZWZpbmUgUE9SVF9TVEFUVVNfUkVHKHApCQkJCSgweDA0NDQgKyAoKHApIDw8IDEwKSkKLSNkZWZpbmUgVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcocCkJCQkoMHgwNDQ4ICsgKChwKSA8PCAxMCkpCi0jZGVmaW5lIE1BWElNVU1fVFJBTlNNSVRfVU5JVChwKQkJCSgweDA0NTggKyAoKHApIDw8IDEwKSkKLSNkZWZpbmUgSU5URVJSVVBUX0NBVVNFX1JFRyhwKQkJCQkoMHgwNDYwICsgKChwKSA8PCAxMCkpCi0jZGVmaW5lIElOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHApCQkJKDB4MDQ2NCArICgocCkgPDwgMTApKQotI2RlZmluZSBJTlRFUlJVUFRfTUFTS19SRUcocCkJCQkJKDB4MDQ2OCArICgocCkgPDwgMTApKQotI2RlZmluZSBJTlRFUlJVUFRfRVhURU5EX01BU0tfUkVHKHApCQkJKDB4MDQ2YyArICgocCkgPDwgMTApKQotI2RlZmluZSBUWF9GSUZPX1VSR0VOVF9USFJFU0hPTERfUkVHKHApCQkJKDB4MDQ3NCArICgocCkgPDwgMTApKQotI2RlZmluZSBSWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzAocCkJCQkoMHgwNjBjICsgKChwKSA8PCAxMCkpCi0jZGVmaW5lIFJFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcocCkJCQkoMHgwNjgwICsgKChwKSA8PCAxMCkpCi0jZGVmaW5lIFRYX0NVUlJFTlRfUVVFVUVfREVTQ19QVFJfMChwKQkJCSgweDA2YzAgKyAoKHApIDw8IDEwKSkKLSNkZWZpbmUgTUlCX0NPVU5URVJTX0JBU0UocCkJCQkJKDB4MTAwMCArICgocCkgPDwgNykpCi0jZGVmaW5lIERBX0ZJTFRFUl9TUEVDSUFMX01VTFRJQ0FTVF9UQUJMRV9CQVNFKHApCSgweDE0MDAgKyAoKHApIDw8IDEwKSkKLSNkZWZpbmUgREFfRklMVEVSX09USEVSX01VTFRJQ0FTVF9UQUJMRV9CQVNFKHApCQkoMHgxNTAwICsgKChwKSA8PCAxMCkpCi0jZGVmaW5lIERBX0ZJTFRFUl9VTklDQVNUX1RBQkxFX0JBU0UocCkJCQkoMHgxNjAwICsgKChwKSA8PCAxMCkpCisjZGVmaW5lIFBPUlRfQ09ORklHKHApCQkJKDB4MDQwMCArICgocCkgPDwgMTApKQorI2RlZmluZSAgVU5JQ0FTVF9QUk9NSVNDVU9VU19NT0RFCTB4MDAwMDAwMDEKKyNkZWZpbmUgUE9SVF9DT05GSUdfRVhUKHApCQkoMHgwNDA0ICsgKChwKSA8PCAxMCkpCisjZGVmaW5lIE1BQ19BRERSX0xPVyhwKQkJCSgweDA0MTQgKyAoKHApIDw8IDEwKSkKKyNkZWZpbmUgTUFDX0FERFJfSElHSChwKQkJKDB4MDQxOCArICgocCkgPDwgMTApKQorI2RlZmluZSBTRE1BX0NPTkZJRyhwKQkJCSgweDA0MWMgKyAoKHApIDw8IDEwKSkKKyNkZWZpbmUgUE9SVF9TRVJJQUxfQ09OVFJPTChwKQkJKDB4MDQzYyArICgocCkgPDwgMTApKQorI2RlZmluZSBQT1JUX1NUQVRVUyhwKQkJCSgweDA0NDQgKyAoKHApIDw8IDEwKSkKKyNkZWZpbmUgIFRYX0ZJRk9fRU1QVFkJCQkweDAwMDAwNDAwCisjZGVmaW5lIFRYUV9DT01NQU5EKHApCQkJKDB4MDQ0OCArICgocCkgPDwgMTApKQorI2RlZmluZSBUWFFfRklYX1BSSU9fQ09ORihwKQkJKDB4MDQ0YyArICgocCkgPDwgMTApKQorI2RlZmluZSBUWF9CV19SQVRFKHApCQkJKDB4MDQ1MCArICgocCkgPDwgMTApKQorI2RlZmluZSBUWF9CV19NVFUocCkJCQkoMHgwNDU4ICsgKChwKSA8PCAxMCkpCisjZGVmaW5lIFRYX0JXX0JVUlNUKHApCQkJKDB4MDQ1YyArICgocCkgPDwgMTApKQorI2RlZmluZSBJTlRfQ0FVU0UocCkJCQkoMHgwNDYwICsgKChwKSA8PCAxMCkpCisjZGVmaW5lICBJTlRfVFhfRU5ECQkJMHgwN2Y4MDAwMAorI2RlZmluZSAgSU5UX1JYCQkJCTB4MDAwN2ZiZmMKKyNkZWZpbmUgIElOVF9FWFQJCQkweDAwMDAwMDAyCisjZGVmaW5lIElOVF9DQVVTRV9FWFQocCkJCSgweDA0NjQgKyAoKHApIDw8IDEwKSkKKyNkZWZpbmUgIElOVF9FWFRfTElOSwkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgIElOVF9FWFRfUEhZCQkJMHgwMDAxMDAwMAorI2RlZmluZSAgSU5UX0VYVF9UWF9FUlJPUl8wCQkweDAwMDAwMTAwCisjZGVmaW5lICBJTlRfRVhUX1RYXzAJCQkweDAwMDAwMDAxCisjZGVmaW5lICBJTlRfRVhUX1RYCQkJMHgwMDAwZmZmZgorI2RlZmluZSBJTlRfTUFTSyhwKQkJCSgweDA0NjggKyAoKHApIDw8IDEwKSkKKyNkZWZpbmUgSU5UX01BU0tfRVhUKHApCQkJKDB4MDQ2YyArICgocCkgPDwgMTApKQorI2RlZmluZSBUWF9GSUZPX1VSR0VOVF9USFJFU0hPTEQocCkJKDB4MDQ3NCArICgocCkgPDwgMTApKQorI2RlZmluZSBUWFFfRklYX1BSSU9fQ09ORl9NT1ZFRChwKQkoMHgwNGRjICsgKChwKSA8PCAxMCkpCisjZGVmaW5lIFRYX0JXX1JBVEVfTU9WRUQocCkJCSgweDA0ZTAgKyAoKHApIDw8IDEwKSkKKyNkZWZpbmUgVFhfQldfTVRVX01PVkVEKHApCQkoMHgwNGU4ICsgKChwKSA8PCAxMCkpCisjZGVmaW5lIFRYX0JXX0JVUlNUX01PVkVEKHApCQkoMHgwNGVjICsgKChwKSA8PCAxMCkpCisjZGVmaW5lIFJYUV9DVVJSRU5UX0RFU0NfUFRSKHAsIHEpCSgweDA2MGMgKyAoKHApIDw8IDEwKSArICgocSkgPDwgNCkpCisjZGVmaW5lIFJYUV9DT01NQU5EKHApCQkJKDB4MDY4MCArICgocCkgPDwgMTApKQorI2RlZmluZSBUWFFfQ1VSUkVOVF9ERVNDX1BUUihwLCBxKQkoMHgwNmMwICsgKChwKSA8PCAxMCkgKyAoKHEpIDw8IDIpKQorI2RlZmluZSBUWFFfQldfVE9LRU5TKHAsIHEpCQkoMHgwNzAwICsgKChwKSA8PCAxMCkgKyAoKHEpIDw8IDQpKQorI2RlZmluZSBUWFFfQldfQ09ORihwLCBxKQkJKDB4MDcwNCArICgocCkgPDwgMTApICsgKChxKSA8PCA0KSkKKyNkZWZpbmUgVFhRX0JXX1dSUl9DT05GKHAsIHEpCQkoMHgwNzA4ICsgKChwKSA8PCAxMCkgKyAoKHEpIDw8IDQpKQorI2RlZmluZSBNSUJfQ09VTlRFUlMocCkJCQkoMHgxMDAwICsgKChwKSA8PCA3KSkKKyNkZWZpbmUgU1BFQ0lBTF9NQ0FTVF9UQUJMRShwKQkJKDB4MTQwMCArICgocCkgPDwgMTApKQorI2RlZmluZSBPVEhFUl9NQ0FTVF9UQUJMRShwKQkJKDB4MTUwMCArICgocCkgPDwgMTApKQorI2RlZmluZSBVTklDQVNUX1RBQkxFKHApCQkoMHgxNjAwICsgKChwKSA8PCAxMCkpCiAKLS8qIFRoZXNlIG1hY3JvcyBkZXNjcmliZSBFdGhlcm5ldCBQb3J0IGNvbmZpZ3VyYXRpb24gcmVnIChQeF9jUikgYml0cyAqLwotI2RlZmluZSBVTklDQVNUX05PUk1BTF9NT0RFCQkoMCA8PCAwKQotI2RlZmluZSBVTklDQVNUX1BST01JU0NVT1VTX01PREUJKDEgPDwgMCkKLSNkZWZpbmUgREVGQVVMVF9SWF9RVUVVRShxdWV1ZSkJCSgocXVldWUpIDw8IDEpCi0jZGVmaW5lIERFRkFVTFRfUlhfQVJQX1FVRVVFKHF1ZXVlKQkoKHF1ZXVlKSA8PCA0KQotI2RlZmluZSBSRUNFSVZFX0JDX0lGX05PVF9JUF9PUl9BUlAJKDAgPDwgNykKLSNkZWZpbmUgUkVKRUNUX0JDX0lGX05PVF9JUF9PUl9BUlAJKDEgPDwgNykKLSNkZWZpbmUgUkVDRUlWRV9CQ19JRl9JUAkJKDAgPDwgOCkKLSNkZWZpbmUgUkVKRUNUX0JDX0lGX0lQCQkJKDEgPDwgOCkKLSNkZWZpbmUgUkVDRUlWRV9CQ19JRl9BUlAJCSgwIDw8IDkpCi0jZGVmaW5lIFJFSkVDVF9CQ19JRl9BUlAJCSgxIDw8IDkpCi0jZGVmaW5lIFRYX0FNX05PX1VQREFURV9FUlJPUl9TVU1NQVJZCSgxIDw8IDEyKQotI2RlZmluZSBDQVBUVVJFX1RDUF9GUkFNRVNfRElTCQkoMCA8PCAxNCkKLSNkZWZpbmUgQ0FQVFVSRV9UQ1BfRlJBTUVTX0VOCQkoMSA8PCAxNCkKLSNkZWZpbmUgQ0FQVFVSRV9VRFBfRlJBTUVTX0RJUwkJKDAgPDwgMTUpCi0jZGVmaW5lIENBUFRVUkVfVURQX0ZSQU1FU19FTgkJKDEgPDwgMTUpCi0jZGVmaW5lIERFRkFVTFRfUlhfVENQX1FVRVVFKHF1ZXVlKQkoKHF1ZXVlKSA8PCAxNikKLSNkZWZpbmUgREVGQVVMVF9SWF9VRFBfUVVFVUUocXVldWUpCSgocXVldWUpIDw8IDE5KQotI2RlZmluZSBERUZBVUxUX1JYX0JQRFVfUVVFVUUocXVldWUpCSgocXVldWUpIDw8IDIyKQogCi0jZGVmaW5lIFBPUlRfQ09ORklHX0RFRkFVTFRfVkFMVUUJCQlcCi0JCVVOSUNBU1RfTk9STUFMX01PREUJCXwJXAotCQlERUZBVUxUX1JYX1FVRVVFKDApCQl8CVwKLQkJREVGQVVMVF9SWF9BUlBfUVVFVUUoMCkJCXwJXAotCQlSRUNFSVZFX0JDX0lGX05PVF9JUF9PUl9BUlAJfAlcCi0JCVJFQ0VJVkVfQkNfSUZfSVAJCXwJXAotCQlSRUNFSVZFX0JDX0lGX0FSUAkJfAlcCi0JCUNBUFRVUkVfVENQX0ZSQU1FU19ESVMJCXwJXAotCQlDQVBUVVJFX1VEUF9GUkFNRVNfRElTCQl8CVwKLQkJREVGQVVMVF9SWF9UQ1BfUVVFVUUoMCkJCXwJXAotCQlERUZBVUxUX1JYX1VEUF9RVUVVRSgwKQkJfAlcCi0JCURFRkFVTFRfUlhfQlBEVV9RVUVVRSgwKQotCi0vKiBUaGVzZSBtYWNyb3MgZGVzY3JpYmUgRXRoZXJuZXQgUG9ydCBjb25maWd1cmF0aW9uIGV4dGVuZCByZWcgKFB4X2NYUikgYml0cyovCi0jZGVmaW5lIENMQVNTSUZZX0VOCQkJCSgxIDw8IDApCi0jZGVmaW5lIFNQQU5fQlBEVV9QQUNLRVRTX0FTX05PUk1BTAkJKDAgPDwgMSkKLSNkZWZpbmUgU1BBTl9CUERVX1BBQ0tFVFNfVE9fUlhfUVVFVUVfNwkJKDEgPDwgMSkKLSNkZWZpbmUgUEFSVElUSU9OX0RJU0FCTEUJCQkoMCA8PCAyKQotI2RlZmluZSBQQVJUSVRJT05fRU5BQkxFCQkJKDEgPDwgMikKLQotI2RlZmluZSBQT1JUX0NPTkZJR19FWFRFTkRfREVGQVVMVF9WQUxVRQkJXAotCQlTUEFOX0JQRFVfUEFDS0VUU19BU19OT1JNQUwJfAlcCi0JCVBBUlRJVElPTl9ESVNBQkxFCi0KLS8qIFRoZXNlIG1hY3JvcyBkZXNjcmliZSBFdGhlcm5ldCBQb3J0IFNkbWEgY29uZmlndXJhdGlvbiByZWcgKFNEQ1IpIGJpdHMgKi8KLSNkZWZpbmUgUklGQgkJCQkoMSA8PCAwKQotI2RlZmluZSBSWF9CVVJTVF9TSVpFXzFfNjRCSVQJCSgwIDw8IDEpCi0jZGVmaW5lIFJYX0JVUlNUX1NJWkVfMl82NEJJVAkJKDEgPDwgMSkKKy8qCisgKiBTRE1BIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCisgKi8KICNkZWZpbmUgUlhfQlVSU1RfU0laRV80XzY0QklUCQkoMiA8PCAxKQotI2RlZmluZSBSWF9CVVJTVF9TSVpFXzhfNjRCSVQJCSgzIDw8IDEpCi0jZGVmaW5lIFJYX0JVUlNUX1NJWkVfMTZfNjRCSVQJCSg0IDw8IDEpCiAjZGVmaW5lIEJMTV9SWF9OT19TV0FQCQkJKDEgPDwgNCkKLSNkZWZpbmUgQkxNX1JYX0JZVEVfU1dBUAkJKDAgPDwgNCkKICNkZWZpbmUgQkxNX1RYX05PX1NXQVAJCQkoMSA8PCA1KQotI2RlZmluZSBCTE1fVFhfQllURV9TV0FQCQkoMCA8PCA1KQotI2RlZmluZSBERVNDUklQVE9SU19CWVRFX1NXQVAJCSgxIDw8IDYpCi0jZGVmaW5lIERFU0NSSVBUT1JTX05PX1NXQVAJCSgwIDw8IDYpCi0jZGVmaW5lIElQR19JTlRfUlgodmFsdWUpCQkoKCh2YWx1ZSkgJiAweDNmZmYpIDw8IDgpCi0jZGVmaW5lIFRYX0JVUlNUX1NJWkVfMV82NEJJVAkJKDAgPDwgMjIpCi0jZGVmaW5lIFRYX0JVUlNUX1NJWkVfMl82NEJJVAkJKDEgPDwgMjIpCiAjZGVmaW5lIFRYX0JVUlNUX1NJWkVfNF82NEJJVAkJKDIgPDwgMjIpCi0jZGVmaW5lIFRYX0JVUlNUX1NJWkVfOF82NEJJVAkJKDMgPDwgMjIpCi0jZGVmaW5lIFRYX0JVUlNUX1NJWkVfMTZfNjRCSVQJCSg0IDw8IDIyKQogCiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAjZGVmaW5lIFBPUlRfU0RNQV9DT05GSUdfREVGQVVMVF9WQUxVRQkJXAogCQlSWF9CVVJTVF9TSVpFXzRfNjRCSVQJfAlcCi0JCUlQR19JTlRfUlgoMCkJCXwJXAogCQlUWF9CVVJTVF9TSVpFXzRfNjRCSVQKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogI2RlZmluZSBQT1JUX1NETUFfQ09ORklHX0RFRkFVTFRfVkFMVUUJCVwKIAkJUlhfQlVSU1RfU0laRV80XzY0QklUCXwJXAogCQlCTE1fUlhfTk9fU1dBUAkJfAlcCiAJCUJMTV9UWF9OT19TV0FQCQl8CVwKLQkJSVBHX0lOVF9SWCgwKQkJfAlcCiAJCVRYX0JVUlNUX1NJWkVfNF82NEJJVAogI2Vsc2UKICNlcnJvciBPbmUgb2YgX19CSUdfRU5ESUFOIG9yIF9fTElUVExFX0VORElBTiBtdXN0IGJlIGRlZmluZWQKICNlbmRpZgogCi0vKiBUaGVzZSBtYWNyb3MgZGVzY3JpYmUgRXRoZXJuZXQgUG9ydCBzZXJpYWwgY29udHJvbCByZWcgKFBTQ1IpIGJpdHMgKi8KLSNkZWZpbmUgU0VSSUFMX1BPUlRfRElTQUJMRQkJCSgwIDw8IDApCi0jZGVmaW5lIFNFUklBTF9QT1JUX0VOQUJMRQkJCSgxIDw8IDApCi0jZGVmaW5lIERPX05PVF9GT1JDRV9MSU5LX1BBU1MJCQkoMCA8PCAxKQotI2RlZmluZSBGT1JDRV9MSU5LX1BBU1MJCQkJKDEgPDwgMSkKLSNkZWZpbmUgRU5BQkxFX0FVVE9fTkVHX0ZPUl9EVVBMWAkJKDAgPDwgMikKLSNkZWZpbmUgRElTQUJMRV9BVVRPX05FR19GT1JfRFVQTFgJCSgxIDw8IDIpCi0jZGVmaW5lIEVOQUJMRV9BVVRPX05FR19GT1JfRkxPV19DVFJMCQkoMCA8PCAzKQotI2RlZmluZSBESVNBQkxFX0FVVE9fTkVHX0ZPUl9GTE9XX0NUUkwJCSgxIDw8IDMpCi0jZGVmaW5lIEFEVl9OT19GTE9XX0NUUkwJCQkoMCA8PCA0KQotI2RlZmluZSBBRFZfU1lNTUVUUklDX0ZMT1dfQ1RSTAkJCSgxIDw8IDQpCi0jZGVmaW5lIEZPUkNFX0ZDX01PREVfTk9fUEFVU0VfRElTX1RYCQkoMCA8PCA1KQotI2RlZmluZSBGT1JDRV9GQ19NT0RFX1RYX1BBVVNFX0RJUwkJKDEgPDwgNSkKLSNkZWZpbmUgRk9SQ0VfQlBfTU9ERV9OT19KQU0JCQkoMCA8PCA3KQotI2RlZmluZSBGT1JDRV9CUF9NT0RFX0pBTV9UWAkJCSgxIDw8IDcpCi0jZGVmaW5lIEZPUkNFX0JQX01PREVfSkFNX1RYX09OX1JYX0VSUgkJKDIgPDwgNykKLSNkZWZpbmUgU0VSSUFMX1BPUlRfQ09OVFJPTF9SRVNFUlZFRAkJKDEgPDwgOSkKLSNkZWZpbmUgRk9SQ0VfTElOS19GQUlMCQkJCSgwIDw8IDEwKQotI2RlZmluZSBET19OT1RfRk9SQ0VfTElOS19GQUlMCQkJKDEgPDwgMTApCi0jZGVmaW5lIFJFVFJBTlNNSVRfMTZfQVRURU1QVFMJCQkoMCA8PCAxMSkKLSNkZWZpbmUgUkVUUkFOU01JVF9GT1JFVkVSCQkJKDEgPDwgMTEpCi0jZGVmaW5lIEVOQUJMRV9BVVRPX05FR19TUEVFRF9HTUlJCQkoMCA8PCAxMykKLSNkZWZpbmUgRElTQUJMRV9BVVRPX05FR19TUEVFRF9HTUlJCQkoMSA8PCAxMykKLSNkZWZpbmUgRFRFX0FEVl8wCQkJCSgwIDw8IDE0KQotI2RlZmluZSBEVEVfQURWXzEJCQkJKDEgPDwgMTQpCi0jZGVmaW5lIERJU0FCTEVfQVVUT19ORUdfQllQQVNTCQkJKDAgPDwgMTUpCi0jZGVmaW5lIEVOQUJMRV9BVVRPX05FR19CWVBBU1MJCQkoMSA8PCAxNSkKLSNkZWZpbmUgQVVUT19ORUdfTk9fQ0hBTkdFCQkJKDAgPDwgMTYpCi0jZGVmaW5lIFJFU1RBUlRfQVVUT19ORUcJCQkoMSA8PCAxNikKLSNkZWZpbmUgTUFYX1JYX1BBQ0tFVF8xNTE4QllURQkJCSgwIDw8IDE3KQorCisvKgorICogUG9ydCBzZXJpYWwgY29udHJvbCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBTRVRfTUlJX1NQRUVEX1RPXzEwMAkJCSgxIDw8IDI0KQorI2RlZmluZSBTRVRfR01JSV9TUEVFRF9UT18xMDAwCQkJKDEgPDwgMjMpCisjZGVmaW5lIFNFVF9GVUxMX0RVUExFWF9NT0RFCQkJKDEgPDwgMjEpCiAjZGVmaW5lIE1BWF9SWF9QQUNLRVRfMTUyMkJZVEUJCQkoMSA8PCAxNykKLSNkZWZpbmUgTUFYX1JYX1BBQ0tFVF8xNTUyQllURQkJCSgyIDw8IDE3KQotI2RlZmluZSBNQVhfUlhfUEFDS0VUXzkwMjJCWVRFCQkJKDMgPDwgMTcpCi0jZGVmaW5lIE1BWF9SWF9QQUNLRVRfOTE5MkJZVEUJCQkoNCA8PCAxNykKICNkZWZpbmUgTUFYX1JYX1BBQ0tFVF85NzAwQllURQkJCSg1IDw8IDE3KQogI2RlZmluZSBNQVhfUlhfUEFDS0VUX01BU0sJCQkoNyA8PCAxNykKLSNkZWZpbmUgQ0xSX0VYVF9MT09QQkFDSwkJCSgwIDw8IDIwKQotI2RlZmluZSBTRVRfRVhUX0xPT1BCQUNLCQkJKDEgPDwgMjApCi0jZGVmaW5lIFNFVF9IQUxGX0RVUExFWF9NT0RFCQkJKDAgPDwgMjEpCi0jZGVmaW5lIFNFVF9GVUxMX0RVUExFWF9NT0RFCQkJKDEgPDwgMjEpCi0jZGVmaW5lIERJU0FCTEVfRkxPV19DVFJMX1RYX1JYX0lOX0ZVTExfRFVQTEVYCSgwIDw8IDIyKQotI2RlZmluZSBFTkFCTEVfRkxPV19DVFJMX1RYX1JYX0lOX0ZVTExfRFVQTEVYCSgxIDw8IDIyKQotI2RlZmluZSBTRVRfR01JSV9TUEVFRF9UT18xMF8xMDAJCSgwIDw8IDIzKQotI2RlZmluZSBTRVRfR01JSV9TUEVFRF9UT18xMDAwCQkJKDEgPDwgMjMpCi0jZGVmaW5lIFNFVF9NSUlfU1BFRURfVE9fMTAJCQkoMCA8PCAyNCkKLSNkZWZpbmUgU0VUX01JSV9TUEVFRF9UT18xMDAJCQkoMSA8PCAyNCkKKyNkZWZpbmUgRElTQUJMRV9BVVRPX05FR19TUEVFRF9HTUlJCQkoMSA8PCAxMykKKyNkZWZpbmUgRE9fTk9UX0ZPUkNFX0xJTktfRkFJTAkJCSgxIDw8IDEwKQorI2RlZmluZSBTRVJJQUxfUE9SVF9DT05UUk9MX1JFU0VSVkVECQkoMSA8PCA5KQorI2RlZmluZSBESVNBQkxFX0FVVE9fTkVHX0ZPUl9GTE9XX0NUUkwJCSgxIDw8IDMpCisjZGVmaW5lIERJU0FCTEVfQVVUT19ORUdfRk9SX0RVUExFWAkJKDEgPDwgMikKKyNkZWZpbmUgRk9SQ0VfTElOS19QQVNTCQkJCSgxIDw8IDEpCisjZGVmaW5lIFNFUklBTF9QT1JUX0VOQUJMRQkJCSgxIDw8IDApCiAKLSNkZWZpbmUgUE9SVF9TRVJJQUxfQ09OVFJPTF9ERUZBVUxUX1ZBTFVFCQlcCi0JCURPX05PVF9GT1JDRV9MSU5LX1BBU1MJCXwJXAotCQlFTkFCTEVfQVVUT19ORUdfRk9SX0RVUExYCXwJXAotCQlESVNBQkxFX0FVVE9fTkVHX0ZPUl9GTE9XX0NUUkwJfAlcCi0JCUFEVl9TWU1NRVRSSUNfRkxPV19DVFJMCQl8CVwKLQkJRk9SQ0VfRkNfTU9ERV9OT19QQVVTRV9ESVNfVFgJfAlcCi0JCUZPUkNFX0JQX01PREVfTk9fSkFNCQl8CVwKLQkJKDEgPDwgOSkgLyogcmVzZXJ2ZWQgKi8JCXwJXAotCQlET19OT1RfRk9SQ0VfTElOS19GQUlMCQl8CVwKLQkJUkVUUkFOU01JVF8xNl9BVFRFTVBUUwkJfAlcCi0JCUVOQUJMRV9BVVRPX05FR19TUEVFRF9HTUlJCXwJXAotCQlEVEVfQURWXzAJCQl8CVwKLQkJRElTQUJMRV9BVVRPX05FR19CWVBBU1MJCXwJXAotCQlBVVRPX05FR19OT19DSEFOR0UJCXwJXAotCQlNQVhfUlhfUEFDS0VUXzk3MDBCWVRFCQl8CVwKLQkJQ0xSX0VYVF9MT09QQkFDSwkJfAlcCi0JCVNFVF9GVUxMX0RVUExFWF9NT0RFCQl8CVwKLQkJRU5BQkxFX0ZMT1dfQ1RSTF9UWF9SWF9JTl9GVUxMX0RVUExFWAorI2RlZmluZSBERUZBVUxUX1JYX1FVRVVFX1NJWkUJCTQwMAorI2RlZmluZSBERUZBVUxUX1RYX1FVRVVFX1NJWkUJCTgwMAogCi0vKiBUaGVzZSBtYWNyb3MgZGVzY3JpYmUgRXRoZXJuZXQgU2VyaWFsIFN0YXR1cyByZWcgKFBTUikgYml0cyAqLwotI2RlZmluZSBQT1JUX1NUQVRVU19NT0RFXzEwX0JJVAkJKDEgPDwgMCkKLSNkZWZpbmUgUE9SVF9TVEFUVVNfTElOS19VUAkJKDEgPDwgMSkKLSNkZWZpbmUgUE9SVF9TVEFUVVNfRlVMTF9EVVBMRVgJCSgxIDw8IDIpCi0jZGVmaW5lIFBPUlRfU1RBVFVTX0ZMT1dfQ09OVFJPTAkoMSA8PCAzKQotI2RlZmluZSBQT1JUX1NUQVRVU19HTUlJXzEwMDAJCSgxIDw8IDQpCi0jZGVmaW5lIFBPUlRfU1RBVFVTX01JSV8xMDAJCSgxIDw8IDUpCi0vKiBQU1IgYml0IDYgaXMgdW5kb2N1bWVudGVkICovCi0jZGVmaW5lIFBPUlRfU1RBVFVTX1RYX0lOX1BST0dSRVNTCSgxIDw8IDcpCi0jZGVmaW5lIFBPUlRfU1RBVFVTX0FVVE9ORUdfQllQQVNTRUQJKDEgPDwgOCkKLSNkZWZpbmUgUE9SVF9TVEFUVVNfUEFSVElUSU9OCQkoMSA8PCA5KQotI2RlZmluZSBQT1JUX1NUQVRVU19UWF9GSUZPX0VNUFRZCSgxIDw8IDEwKQotLyogUFNSIGJpdHMgMTEtMzEgYXJlIHJlc2VydmVkICovCiAKLSNkZWZpbmUgUE9SVF9ERUZBVUxUX1RSQU5TTUlUX1FVRVVFX1NJWkUJODAwCi0jZGVmaW5lIFBPUlRfREVGQVVMVF9SRUNFSVZFX1FVRVVFX1NJWkUJCTQwMAotCi0jZGVmaW5lIERFU0NfU0laRQkJCQk2NAotCi0jZGVmaW5lIEVUSF9SWF9RVUVVRVNfRU5BQkxFRAkoMSA8PCAwKQkvKiB1c2Ugb25seSBRMCBmb3IgcmVjZWl2ZSAqLwotI2RlZmluZSBFVEhfVFhfUVVFVUVTX0VOQUJMRUQJKDEgPDwgMCkJLyogdXNlIG9ubHkgUTAgZm9yIHRyYW5zbWl0ICovCi0KLSNkZWZpbmUgRVRIX0lOVF9DQVVTRV9SWF9ET05FCShFVEhfUlhfUVVFVUVTX0VOQUJMRUQgPDwgMikKLSNkZWZpbmUgRVRIX0lOVF9DQVVTRV9SWF9FUlJPUgkoRVRIX1JYX1FVRVVFU19FTkFCTEVEIDw8IDkpCi0jZGVmaW5lIEVUSF9JTlRfQ0FVU0VfUlgJKEVUSF9JTlRfQ0FVU0VfUlhfRE9ORSB8IEVUSF9JTlRfQ0FVU0VfUlhfRVJST1IpCi0jZGVmaW5lIEVUSF9JTlRfQ0FVU0VfRVhUCTB4MDAwMDAwMDIKLSNkZWZpbmUgRVRIX0lOVF9VTk1BU0tfQUxMCShFVEhfSU5UX0NBVVNFX1JYIHwgRVRIX0lOVF9DQVVTRV9FWFQpCi0KLSNkZWZpbmUgRVRIX0lOVF9DQVVTRV9UWF9ET05FCShFVEhfVFhfUVVFVUVTX0VOQUJMRUQgPDwgMCkKLSNkZWZpbmUgRVRIX0lOVF9DQVVTRV9UWF9FUlJPUgkoRVRIX1RYX1FVRVVFU19FTkFCTEVEIDw8IDgpCi0jZGVmaW5lIEVUSF9JTlRfQ0FVU0VfVFgJKEVUSF9JTlRfQ0FVU0VfVFhfRE9ORSB8IEVUSF9JTlRfQ0FVU0VfVFhfRVJST1IpCi0jZGVmaW5lIEVUSF9JTlRfQ0FVU0VfUEhZCTB4MDAwMTAwMDAKLSNkZWZpbmUgRVRIX0lOVF9DQVVTRV9TVEFURQkweDAwMTAwMDAwCi0jZGVmaW5lIEVUSF9JTlRfVU5NQVNLX0FMTF9FWFQJKEVUSF9JTlRfQ0FVU0VfVFggfCBFVEhfSU5UX0NBVVNFX1BIWSB8IFwKLQkJCQkJRVRIX0lOVF9DQVVTRV9TVEFURSkKLQotI2RlZmluZSBFVEhfSU5UX01BU0tfQUxMCTB4MDAwMDAwMDAKLSNkZWZpbmUgRVRIX0lOVF9NQVNLX0FMTF9FWFQJMHgwMDAwMDAwMAotCi0jZGVmaW5lIFBIWV9XQUlUX0lURVJBVElPTlMJMTAwMAkvKiAxMDAwIGl0ZXJhdGlvbnMgKiAxMHVTID0gMTBtUyBtYXggKi8KLSNkZWZpbmUgUEhZX1dBSVRfTUlDUk9fU0VDT05EUwkxMAotCi0vKiBCdWZmZXIgb2Zmc2V0IGZyb20gYnVmZmVyIHBvaW50ZXIgKi8KLSNkZWZpbmUgUlhfQlVGX09GRlNFVAkJCQkweDIKLQotLyogR2lnYWJpdCBFdGhlcm5ldCBVbml0IEdsb2JhbCBSZWdpc3RlcnMgKi8KLQotLyogTUlCIENvdW50ZXJzIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCi0jZGVmaW5lIEVUSF9NSUJfR09PRF9PQ1RFVFNfUkVDRUlWRURfTE9XCTB4MAotI2RlZmluZSBFVEhfTUlCX0dPT0RfT0NURVRTX1JFQ0VJVkVEX0hJR0gJMHg0Ci0jZGVmaW5lIEVUSF9NSUJfQkFEX09DVEVUU19SRUNFSVZFRAkJMHg4Ci0jZGVmaW5lIEVUSF9NSUJfSU5URVJOQUxfTUFDX1RSQU5TTUlUX0VSUgkweGMKLSNkZWZpbmUgRVRIX01JQl9HT09EX0ZSQU1FU19SRUNFSVZFRAkJMHgxMAotI2RlZmluZSBFVEhfTUlCX0JBRF9GUkFNRVNfUkVDRUlWRUQJCTB4MTQKLSNkZWZpbmUgRVRIX01JQl9CUk9BRENBU1RfRlJBTUVTX1JFQ0VJVkVECTB4MTgKLSNkZWZpbmUgRVRIX01JQl9NVUxUSUNBU1RfRlJBTUVTX1JFQ0VJVkVECTB4MWMKLSNkZWZpbmUgRVRIX01JQl9GUkFNRVNfNjRfT0NURVRTCQkweDIwCi0jZGVmaW5lIEVUSF9NSUJfRlJBTUVTXzY1X1RPXzEyN19PQ1RFVFMJCTB4MjQKLSNkZWZpbmUgRVRIX01JQl9GUkFNRVNfMTI4X1RPXzI1NV9PQ1RFVFMJMHgyOAotI2RlZmluZSBFVEhfTUlCX0ZSQU1FU18yNTZfVE9fNTExX09DVEVUUwkweDJjCi0jZGVmaW5lIEVUSF9NSUJfRlJBTUVTXzUxMl9UT18xMDIzX09DVEVUUwkweDMwCi0jZGVmaW5lIEVUSF9NSUJfRlJBTUVTXzEwMjRfVE9fTUFYX09DVEVUUwkweDM0Ci0jZGVmaW5lIEVUSF9NSUJfR09PRF9PQ1RFVFNfU0VOVF9MT1cJCTB4MzgKLSNkZWZpbmUgRVRIX01JQl9HT09EX09DVEVUU19TRU5UX0hJR0gJCTB4M2MKLSNkZWZpbmUgRVRIX01JQl9HT09EX0ZSQU1FU19TRU5UCQkweDQwCi0jZGVmaW5lIEVUSF9NSUJfRVhDRVNTSVZFX0NPTExJU0lPTgkJMHg0NAotI2RlZmluZSBFVEhfTUlCX01VTFRJQ0FTVF9GUkFNRVNfU0VOVAkJMHg0OAotI2RlZmluZSBFVEhfTUlCX0JST0FEQ0FTVF9GUkFNRVNfU0VOVAkJMHg0YwotI2RlZmluZSBFVEhfTUlCX1VOUkVDX01BQ19DT05UUk9MX1JFQ0VJVkVECTB4NTAKLSNkZWZpbmUgRVRIX01JQl9GQ19TRU5UCQkJCTB4NTQKLSNkZWZpbmUgRVRIX01JQl9HT09EX0ZDX1JFQ0VJVkVECQkweDU4Ci0jZGVmaW5lIEVUSF9NSUJfQkFEX0ZDX1JFQ0VJVkVECQkJMHg1YwotI2RlZmluZSBFVEhfTUlCX1VOREVSU0laRV9SRUNFSVZFRAkJMHg2MAotI2RlZmluZSBFVEhfTUlCX0ZSQUdNRU5UU19SRUNFSVZFRAkJMHg2NAotI2RlZmluZSBFVEhfTUlCX09WRVJTSVpFX1JFQ0VJVkVECQkweDY4Ci0jZGVmaW5lIEVUSF9NSUJfSkFCQkVSX1JFQ0VJVkVECQkJMHg2YwotI2RlZmluZSBFVEhfTUlCX01BQ19SRUNFSVZFX0VSUk9SCQkweDcwCi0jZGVmaW5lIEVUSF9NSUJfQkFEX0NSQ19FVkVOVAkJCTB4NzQKLSNkZWZpbmUgRVRIX01JQl9DT0xMSVNJT04JCQkweDc4Ci0jZGVmaW5lIEVUSF9NSUJfTEFURV9DT0xMSVNJT04JCQkweDdjCi0KLS8qIFBvcnQgc2VyaWFsIHN0YXR1cyByZWcgKFBTUikgKi8KLSNkZWZpbmUgRVRIX0lOVEVSRkFDRV9QQ00JCQkweDAwMDAwMDAxCi0jZGVmaW5lIEVUSF9MSU5LX0lTX1VQCQkJCTB4MDAwMDAwMDIKLSNkZWZpbmUgRVRIX1BPUlRfQVRfRlVMTF9EVVBMRVgJCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEVUSF9SWF9GTE9XX0NUUkxfRU5BQkxFRAkJMHgwMDAwMDAwOAotI2RlZmluZSBFVEhfR01JSV9TUEVFRF8xMDAwCQkJMHgwMDAwMDAxMAotI2RlZmluZSBFVEhfTUlJX1NQRUVEXzEwMAkJCTB4MDAwMDAwMjAKLSNkZWZpbmUgRVRIX1RYX0lOX1BST0dSRVNTCQkJMHgwMDAwMDA4MAotI2RlZmluZSBFVEhfQllQQVNTX0FDVElWRQkJCTB4MDAwMDAxMDAKLSNkZWZpbmUgRVRIX1BPUlRfQVRfUEFSVElUSU9OX1NUQVRFCQkweDAwMDAwMjAwCi0jZGVmaW5lIEVUSF9QT1JUX1RYX0ZJRk9fRU1QVFkJCQkweDAwMDAwNDAwCi0KLS8qIFNNSSByZWcgKi8KLSNkZWZpbmUgRVRIX1NNSV9CVVNZCQkweDEwMDAwMDAwCS8qIDAgLSBXcml0ZSwgMSAtIFJlYWQJKi8KLSNkZWZpbmUgRVRIX1NNSV9SRUFEX1ZBTElECTB4MDgwMDAwMDAJLyogMCAtIFdyaXRlLCAxIC0gUmVhZAkqLwotI2RlZmluZSBFVEhfU01JX09QQ09ERV9XUklURQkwCQkvKiBDb21wbGV0aW9uIG9mIFJlYWQJKi8KLSNkZWZpbmUgRVRIX1NNSV9PUENPREVfUkVBRAkweDA0MDAwMDAwCS8qIE9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyAqLwotCi0vKiBJbnRlcnJ1cHQgQ2F1c2UgUmVnaXN0ZXIgQml0IERlZmluaXRpb25zICovCi0KLS8qIFNETUEgY29tbWFuZCBzdGF0dXMgZmllbGRzIG1hY3JvcyAqLwotCi0vKiBUeCAmIFJ4IGRlc2NyaXB0b3JzIHN0YXR1cyAqLwotI2RlZmluZSBFVEhfRVJST1JfU1VNTUFSWQkJCTB4MDAwMDAwMDEKLQotLyogVHggJiBSeCBkZXNjcmlwdG9ycyBjb21tYW5kICovCi0jZGVmaW5lIEVUSF9CVUZGRVJfT1dORURfQllfRE1BCQkJMHg4MDAwMDAwMAotCi0vKiBUeCBkZXNjcmlwdG9ycyBzdGF0dXMgKi8KLSNkZWZpbmUgRVRIX0xDX0VSUk9SCQkJCTAKLSNkZWZpbmUgRVRIX1VSX0VSUk9SCQkJCTB4MDAwMDAwMDIKLSNkZWZpbmUgRVRIX1JMX0VSUk9SCQkJCTB4MDAwMDAwMDQKLSNkZWZpbmUgRVRIX0xMQ19TTkFQX0ZPUk1BVAkJCTB4MDAwMDAyMDAKLQotLyogUnggZGVzY3JpcHRvcnMgc3RhdHVzICovCi0jZGVmaW5lIEVUSF9PVkVSUlVOX0VSUk9SCQkJMHgwMDAwMDAwMgotI2RlZmluZSBFVEhfTUFYX0ZSQU1FX0xFTkdUSF9FUlJPUgkJMHgwMDAwMDAwNAotI2RlZmluZSBFVEhfUkVTT1VSQ0VfRVJST1IJCQkweDAwMDAwMDA2Ci0jZGVmaW5lIEVUSF9WTEFOX1RBR0dFRAkJCQkweDAwMDgwMDAwCi0jZGVmaW5lIEVUSF9CUERVX0ZSQU1FCQkJCTB4MDAxMDAwMDAKLSNkZWZpbmUgRVRIX1VEUF9GUkFNRV9PVkVSX0lQX1ZfNAkJMHgwMDIwMDAwMAotI2RlZmluZSBFVEhfT1RIRVJfRlJBTUVfVFlQRQkJCTB4MDA0MDAwMDAKLSNkZWZpbmUgRVRIX0xBWUVSXzJfSVNfRVRIX1ZfMgkJCTB4MDA4MDAwMDAKLSNkZWZpbmUgRVRIX0ZSQU1FX1RZUEVfSVBfVl80CQkJMHgwMTAwMDAwMAotI2RlZmluZSBFVEhfRlJBTUVfSEVBREVSX09LCQkJMHgwMjAwMDAwMAotI2RlZmluZSBFVEhfUlhfTEFTVF9ERVNDCQkJMHgwNDAwMDAwMAotI2RlZmluZSBFVEhfUlhfRklSU1RfREVTQwkJCTB4MDgwMDAwMDAKLSNkZWZpbmUgRVRIX1VOS05PV05fREVTVElOQVRJT05fQUREUgkJMHgxMDAwMDAwMAotI2RlZmluZSBFVEhfUlhfRU5BQkxFX0lOVEVSUlVQVAkJCTB4MjAwMDAwMDAKLSNkZWZpbmUgRVRIX0xBWUVSXzRfQ0hFQ0tTVU1fT0sJCQkweDQwMDAwMDAwCi0KLS8qIFJ4IGRlc2NyaXB0b3JzIGJ5dGUgY291bnQgKi8KLSNkZWZpbmUgRVRIX0ZSQU1FX0ZSQUdNRU5URUQJCQkweDAwMDAwMDA0Ci0KLS8qIFR4IGRlc2NyaXB0b3JzIGNvbW1hbmQgKi8KLSNkZWZpbmUgRVRIX0xBWUVSXzRfQ0hFQ0tTVU1fRklSU1RfREVTQwkJMHgwMDAwMDQwMAotI2RlZmluZSBFVEhfRlJBTUVfU0VUX1RPX1ZMQU4JCQkweDAwMDA4MDAwCi0jZGVmaW5lIEVUSF9VRFBfRlJBTUUJCQkJMHgwMDAxMDAwMAotI2RlZmluZSBFVEhfR0VOX1RDUF9VRFBfQ0hFQ0tTVU0JCTB4MDAwMjAwMDAKLSNkZWZpbmUgRVRIX0dFTl9JUF9WXzRfQ0hFQ0tTVU0JCQkweDAwMDQwMDAwCi0jZGVmaW5lIEVUSF9aRVJPX1BBRERJTkcJCQkweDAwMDgwMDAwCi0jZGVmaW5lIEVUSF9UWF9MQVNUX0RFU0MJCQkweDAwMTAwMDAwCi0jZGVmaW5lIEVUSF9UWF9GSVJTVF9ERVNDCQkJMHgwMDIwMDAwMAotI2RlZmluZSBFVEhfR0VOX0NSQwkJCQkweDAwNDAwMDAwCi0jZGVmaW5lIEVUSF9UWF9FTkFCTEVfSU5URVJSVVBUCQkJMHgwMDgwMDAwMAotI2RlZmluZSBFVEhfQVVUT19NT0RFCQkJCTB4NDAwMDAwMDAKLQotI2RlZmluZSBFVEhfVFhfSUhMX1NISUZUCQkJMTEKLQotLyogdHlwZWRlZnMgKi8KLQotdHlwZWRlZiBlbnVtIF9ldGhfZnVuY19yZXRfc3RhdHVzIHsKLQlFVEhfT0ssCQkJLyogUmV0dXJuZWQgYXMgZXhwZWN0ZWQuCQkqLwotCUVUSF9FUlJPUiwJCS8qIEZ1bmRhbWVudGFsIGVycm9yLgkJCSovCi0JRVRIX1JFVFJZLAkJLyogQ291bGQgbm90IHByb2Nlc3MgcmVxdWVzdC4gVHJ5IGxhdGVyLiovCi0JRVRIX0VORF9PRl9KT0IsCQkvKiBSaW5nIGhhcyBub3RoaW5nIHRvIHByb2Nlc3MuCQkqLwotCUVUSF9RVUVVRV9GVUxMLAkJLyogUmluZyByZXNvdXJjZSBlcnJvci4JCQkqLwotCUVUSF9RVUVVRV9MQVNUX1JFU09VUkNFCS8qIFJpbmcgcmVzb3VyY2VzIGFib3V0IHRvIGV4aGF1c3QuCSovCi19IEVUSF9GVU5DX1JFVF9TVEFUVVM7Ci0KLS8qIFRoZXNlIGFyZSBmb3IgYmlnLWVuZGlhbiBtYWNoaW5lcy4gIExpdHRsZSBlbmRpYW4gbmVlZHMgZGlmZmVyZW50Ci0gKiBkZWZpbml0aW9ucy4KKy8qCisgKiBSWC9UWCBkZXNjcmlwdG9ycy4KICAqLwogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotc3RydWN0IGV0aF9yeF9kZXNjIHsKK3N0cnVjdCByeF9kZXNjIHsKIAl1MTYgYnl0ZV9jbnQ7CQkvKiBEZXNjcmlwdG9yIGJ1ZmZlciBieXRlIGNvdW50CQkqLwogCXUxNiBidWZfc2l6ZTsJCS8qIEJ1ZmZlciBzaXplCQkJCSovCiAJdTMyIGNtZF9zdHM7CQkvKiBEZXNjcmlwdG9yIGNvbW1hbmQgc3RhdHVzCQkqLwpAQCAtNDQxLDcgKzE4MCw3IEBACiAJdTMyIGJ1Zl9wdHI7CQkvKiBEZXNjcmlwdG9yIGJ1ZmZlciBwb2ludGVyCQkqLwogfTsKIAotc3RydWN0IGV0aF90eF9kZXNjIHsKK3N0cnVjdCB0eF9kZXNjIHsKIAl1MTYgYnl0ZV9jbnQ7CQkvKiBidWZmZXIgYnl0ZSBjb3VudAkJCSovCiAJdTE2IGw0aV9jaGs7CQkvKiBDUFUgcHJvdmlkZWQgVENQIGNoZWNrc3VtCQkqLwogCXUzMiBjbWRfc3RzOwkJLyogQ29tbWFuZC9zdGF0dXMgZmllbGQJCQkqLwpAQCAtNDQ5LDcgKzE4OCw3IEBACiAJdTMyIGJ1Zl9wdHI7CQkvKiBwb2ludGVyIHRvIGJ1ZmZlciBmb3IgdGhpcyBkZXNjcmlwdG9yKi8KIH07CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLXN0cnVjdCBldGhfcnhfZGVzYyB7CitzdHJ1Y3QgcnhfZGVzYyB7CiAJdTMyIGNtZF9zdHM7CQkvKiBEZXNjcmlwdG9yIGNvbW1hbmQgc3RhdHVzCQkqLwogCXUxNiBidWZfc2l6ZTsJCS8qIEJ1ZmZlciBzaXplCQkJCSovCiAJdTE2IGJ5dGVfY250OwkJLyogRGVzY3JpcHRvciBidWZmZXIgYnl0ZSBjb3VudAkJKi8KQEAgLTQ1Nyw3ICsxOTYsNyBAQAogCXUzMiBuZXh0X2Rlc2NfcHRyOwkvKiBOZXh0IGRlc2NyaXB0b3IgcG9pbnRlcgkJKi8KIH07CiAKLXN0cnVjdCBldGhfdHhfZGVzYyB7CitzdHJ1Y3QgdHhfZGVzYyB7CiAJdTMyIGNtZF9zdHM7CQkvKiBDb21tYW5kL3N0YXR1cyBmaWVsZAkJCSovCiAJdTE2IGw0aV9jaGs7CQkvKiBDUFUgcHJvdmlkZWQgVENQIGNoZWNrc3VtCQkqLwogCXUxNiBieXRlX2NudDsJCS8qIGJ1ZmZlciBieXRlIGNvdW50CQkJKi8KQEAgLTQ2OCwxOCArMjA3LDU5IEBACiAjZXJyb3IgT25lIG9mIF9fQklHX0VORElBTiBvciBfX0xJVFRMRV9FTkRJQU4gbXVzdCBiZSBkZWZpbmVkCiAjZW5kaWYKIAotLyogVW5pZmllZCBzdHJ1Y3QgZm9yIFJ4IGFuZCBUeCBvcGVyYXRpb25zLiBUaGUgdXNlciBpcyBub3QgcmVxdWlyZWQgdG8JKi8KLS8qIGJlIGZhbWlsaWVyIHdpdGggbmVpdGhlciBUeCBub3IgUnggZGVzY3JpcHRvcnMuCQkJKi8KLXN0cnVjdCBwa3RfaW5mbyB7Ci0JdW5zaWduZWQgc2hvcnQgYnl0ZV9jbnQ7CS8qIERlc2NyaXB0b3IgYnVmZmVyIGJ5dGUgY291bnQJKi8KLQl1bnNpZ25lZCBzaG9ydCBsNGlfY2hrOwkJLyogVHggQ1BVIHByb3ZpZGVkIFRDUCBDaGVja3N1bQkqLwotCXVuc2lnbmVkIGludCBjbWRfc3RzOwkJLyogRGVzY3JpcHRvciBjb21tYW5kIHN0YXR1cwkqLwotCWRtYV9hZGRyX3QgYnVmX3B0cjsJCS8qIERlc2NyaXB0b3IgYnVmZmVyIHBvaW50ZXIJKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqcmV0dXJuX2luZm87CS8qIFVzZXIgcmVzb3VyY2UgcmV0dXJuIGluZm9ybWF0aW9uICovCisvKiBSWCAmIFRYIGRlc2NyaXB0b3IgY29tbWFuZCAqLworI2RlZmluZSBCVUZGRVJfT1dORURfQllfRE1BCQkweDgwMDAwMDAwCisKKy8qIFJYICYgVFggZGVzY3JpcHRvciBzdGF0dXMgKi8KKyNkZWZpbmUgRVJST1JfU1VNTUFSWQkJCTB4MDAwMDAwMDEKKworLyogUlggZGVzY3JpcHRvciBzdGF0dXMgKi8KKyNkZWZpbmUgTEFZRVJfNF9DSEVDS1NVTV9PSwkJMHg0MDAwMDAwMAorI2RlZmluZSBSWF9FTkFCTEVfSU5URVJSVVBUCQkweDIwMDAwMDAwCisjZGVmaW5lIFJYX0ZJUlNUX0RFU0MJCQkweDA4MDAwMDAwCisjZGVmaW5lIFJYX0xBU1RfREVTQwkJCTB4MDQwMDAwMDAKKworLyogVFggZGVzY3JpcHRvciBjb21tYW5kICovCisjZGVmaW5lIFRYX0VOQUJMRV9JTlRFUlJVUFQJCTB4MDA4MDAwMDAKKyNkZWZpbmUgR0VOX0NSQwkJCQkweDAwNDAwMDAwCisjZGVmaW5lIFRYX0ZJUlNUX0RFU0MJCQkweDAwMjAwMDAwCisjZGVmaW5lIFRYX0xBU1RfREVTQwkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgWkVST19QQURESU5HCQkJMHgwMDA4MDAwMAorI2RlZmluZSBHRU5fSVBfVjRfQ0hFQ0tTVU0JCTB4MDAwNDAwMDAKKyNkZWZpbmUgR0VOX1RDUF9VRFBfQ0hFQ0tTVU0JCTB4MDAwMjAwMDAKKyNkZWZpbmUgVURQX0ZSQU1FCQkJMHgwMDAxMDAwMAorCisjZGVmaW5lIFRYX0lITF9TSElGVAkJCTExCisKKworLyogZ2xvYmFsICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgbXY2NDN4eF9ldGhfc2hhcmVkX3ByaXZhdGUgeworCS8qCisJICogRXRoZXJuZXQgY29udHJvbGxlciBiYXNlIGFkZHJlc3MuCisJICovCisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJLyoKKwkgKiBQcm90ZWN0cyBhY2Nlc3MgdG8gU01JX1JFRywgd2hpY2ggaXMgc2hhcmVkIGJldHdlZW4gcG9ydHMuCisJICovCisJc3BpbmxvY2tfdCBwaHlfbG9jazsKKworCS8qCisJICogUGVyLXBvcnQgTUJVUyB3aW5kb3cgYWNjZXNzIHJlZ2lzdGVyIHZhbHVlLgorCSAqLworCXUzMiB3aW5fcHJvdGVjdDsKKworCS8qCisJICogSGFyZHdhcmUtc3BlY2lmaWMgcGFyYW1ldGVycy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdF9jbGs7CisJaW50IGV4dGVuZGVkX3J4X2NvYWxfbGltaXQ7CisJaW50IHR4X2J3X2NvbnRyb2xfbW92ZWQ7CiB9OwogCi0vKiBFdGhlcm5ldCBwb3J0IHNwZWNpZmljIGluZm9ybWF0aW9uICovCi1zdHJ1Y3QgbXY2NDN4eF9taWJfY291bnRlcnMgeworCisvKiBwZXItcG9ydCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBtaWJfY291bnRlcnMgewogCXU2NCBnb29kX29jdGV0c19yZWNlaXZlZDsKIAl1MzIgYmFkX29jdGV0c19yZWNlaXZlZDsKIAl1MzIgaW50ZXJuYWxfbWFjX3RyYW5zbWl0X2VycjsKQEAgLTUxMiw0NjEgKzI5MiwyODIgQEAKIAl1MzIgbGF0ZV9jb2xsaXNpb247CiB9OwogCi1zdHJ1Y3QgbXY2NDN4eF9zaGFyZWRfcHJpdmF0ZSB7Ci0Jdm9pZCBfX2lvbWVtICpldGhfYmFzZTsKK3N0cnVjdCByeF9xdWV1ZSB7CisJaW50IGluZGV4OwogCi0JLyogdXNlZCB0byBwcm90ZWN0IFNNSV9SRUcsIHdoaWNoIGlzIHNoYXJlZCBhY3Jvc3MgcG9ydHMgKi8KLQlzcGlubG9ja190IHBoeV9sb2NrOworCWludCByeF9yaW5nX3NpemU7CiAKLQl1MzIgd2luX3Byb3RlY3Q7CisJaW50IHJ4X2Rlc2NfY291bnQ7CisJaW50IHJ4X2N1cnJfZGVzYzsKKwlpbnQgcnhfdXNlZF9kZXNjOwogCi0JdW5zaWduZWQgaW50IHRfY2xrOwotfTsKLQotc3RydWN0IG12NjQzeHhfcHJpdmF0ZSB7Ci0Jc3RydWN0IG12NjQzeHhfc2hhcmVkX3ByaXZhdGUgKnNoYXJlZDsKLQlpbnQgcG9ydF9udW07CQkJLyogVXNlciBFdGhlcm5ldCBwb3J0IG51bWJlcgkqLwotCi0Jc3RydWN0IG12NjQzeHhfc2hhcmVkX3ByaXZhdGUgKnNoYXJlZF9zbWk7Ci0KLQl1MzIgcnhfc3JhbV9hZGRyOwkJLyogQmFzZSBhZGRyZXNzIG9mIHJ4IHNyYW0gYXJlYSAqLwotCXUzMiByeF9zcmFtX3NpemU7CQkvKiBTaXplIG9mIHJ4IHNyYW0gYXJlYQkJKi8KLQl1MzIgdHhfc3JhbV9hZGRyOwkJLyogQmFzZSBhZGRyZXNzIG9mIHR4IHNyYW0gYXJlYSAqLwotCXUzMiB0eF9zcmFtX3NpemU7CQkvKiBTaXplIG9mIHR4IHNyYW0gYXJlYQkJKi8KLQotCWludCByeF9yZXNvdXJjZV9lcnI7CQkvKiBSeCByaW5nIHJlc291cmNlIGVycm9yIGZsYWcgKi8KLQotCS8qIFR4L1J4IHJpbmdzIG1hbmFnbWVudCBpbmRleGVzIGZpZWxkcy4gRm9yIGRyaXZlciB1c2UgKi8KLQotCS8qIE5leHQgYXZhaWxhYmxlIGFuZCBmaXJzdCByZXR1cm5pbmcgUnggcmVzb3VyY2UgKi8KLQlpbnQgcnhfY3Vycl9kZXNjX3EsIHJ4X3VzZWRfZGVzY19xOwotCi0JLyogTmV4dCBhdmFpbGFibGUgYW5kIGZpcnN0IHJldHVybmluZyBUeCByZXNvdXJjZSAqLwotCWludCB0eF9jdXJyX2Rlc2NfcSwgdHhfdXNlZF9kZXNjX3E7Ci0KLSNpZmRlZiBNVjY0M1hYX1RYX0ZBU1RfUkVGSUxMCi0JdTMyIHR4X2NsZWFuX3RocmVzaG9sZDsKLSNlbmRpZgotCi0Jc3RydWN0IGV0aF9yeF9kZXNjICpwX3J4X2Rlc2NfYXJlYTsKKwlzdHJ1Y3QgcnhfZGVzYyAqcnhfZGVzY19hcmVhOwogCWRtYV9hZGRyX3QgcnhfZGVzY19kbWE7CiAJaW50IHJ4X2Rlc2NfYXJlYV9zaXplOwogCXN0cnVjdCBza19idWZmICoqcnhfc2tiOwogCi0Jc3RydWN0IGV0aF90eF9kZXNjICpwX3R4X2Rlc2NfYXJlYTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCByeF9vb207Cit9OworCitzdHJ1Y3QgdHhfcXVldWUgeworCWludCBpbmRleDsKKworCWludCB0eF9yaW5nX3NpemU7CisKKwlpbnQgdHhfZGVzY19jb3VudDsKKwlpbnQgdHhfY3Vycl9kZXNjOworCWludCB0eF91c2VkX2Rlc2M7CisKKwlzdHJ1Y3QgdHhfZGVzYyAqdHhfZGVzY19hcmVhOwogCWRtYV9hZGRyX3QgdHhfZGVzY19kbWE7CiAJaW50IHR4X2Rlc2NfYXJlYV9zaXplOwogCXN0cnVjdCBza19idWZmICoqdHhfc2tiOwotCi0Jc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKLQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IG12NjQzeHhfbWliX2NvdW50ZXJzIG1pYl9jb3VudGVyczsKLQlzcGlubG9ja190IGxvY2s7Ci0JLyogU2l6ZSBvZiBUeCBSaW5nIHBlciBxdWV1ZSAqLwotCWludCB0eF9yaW5nX3NpemU7Ci0JLyogTnVtYmVyIG9mIHR4IGRlc2NyaXB0b3JzIGluIHVzZSAqLwotCWludCB0eF9kZXNjX2NvdW50OwotCS8qIFNpemUgb2YgUnggUmluZyBwZXIgcXVldWUgKi8KLQlpbnQgcnhfcmluZ19zaXplOwotCS8qIE51bWJlciBvZiByeCBkZXNjcmlwdG9ycyBpbiB1c2UgKi8KLQlpbnQgcnhfZGVzY19jb3VudDsKLQotCS8qCi0JICogVXNlZCBpbiBjYXNlIFJYIFJpbmcgaXMgZW1wdHksIHdoaWNoIGNhbiBiZSBjYXVzZWQgd2hlbgotCSAqIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHJlc291cmNlcyAoc2tiJ3MpCi0JICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZW91dDsKLQotCXUzMiByeF9pbnRfY29hbDsKLQl1MzIgdHhfaW50X2NvYWw7Ci0Jc3RydWN0IG1paV9pZl9pbmZvIG1paTsKIH07CiAKLS8qIFN0YXRpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X2luaXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOwotc3RhdGljIHZvaWQgZXRoX3BvcnRfcmVzZXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOwotc3RhdGljIHZvaWQgZXRoX3BvcnRfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSB7CisJc3RydWN0IG12NjQzeHhfZXRoX3NoYXJlZF9wcml2YXRlICpzaGFyZWQ7CisJaW50IHBvcnRfbnVtOwogCi1zdGF0aWMgdm9pZCBldGhlcm5ldF9waHlfcmVzZXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3dyaXRlX3NtaV9yZWcoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJICAgdW5zaWduZWQgaW50IHBoeV9yZWcsIHVuc2lnbmVkIGludCB2YWx1ZSk7CisJc3RydWN0IG12NjQzeHhfZXRoX3NoYXJlZF9wcml2YXRlICpzaGFyZWRfc21pOworCWludCBwaHlfYWRkcjsKIAotc3RhdGljIHZvaWQgZXRoX3BvcnRfcmVhZF9zbWlfcmVnKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCSAgdW5zaWduZWQgaW50IHBoeV9yZWcsIHVuc2lnbmVkIGludCAqdmFsdWUpOworCXNwaW5sb2NrX3QgbG9jazsKIAotc3RhdGljIHZvaWQgZXRoX2NsZWFyX21pYl9jb3VudGVycyhzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCk7Ci0KLXN0YXRpYyBFVEhfRlVOQ19SRVRfU1RBVFVTIGV0aF9wb3J0X3JlY2VpdmUoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJCSAgICBzdHJ1Y3QgcGt0X2luZm8gKnBfcGt0X2luZm8pOwotc3RhdGljIEVUSF9GVU5DX1JFVF9TVEFUVVMgZXRoX3J4X3JldHVybl9idWZmKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCQkgICAgICBzdHJ1Y3QgcGt0X2luZm8gKnBfcGt0X2luZm8pOwotCi1zdGF0aWMgdm9pZCBldGhfcG9ydF91Y19hZGRyX2dldChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKLQkJCQkgdW5zaWduZWQgY2hhciAqcF9hZGRyKTsKLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3VjX2FkZHJfc2V0KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCSB1bnNpZ25lZCBjaGFyICpwX2FkZHIpOwotc3RhdGljIHZvaWQgZXRoX3BvcnRfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfcG9ydF9lbmFibGVfdHgoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJCQl1bnNpZ25lZCBpbnQgcXVldWVzKTsKLXN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3J4KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCQkJdW5zaWduZWQgaW50IHF1ZXVlcyk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV90eChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV9yeChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCk7Ci1zdGF0aWMgaW50IG12NjQzeHhfZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBldGhfcG9ydF9pbml0X21hY190YWJsZXMoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOwotI2lmZGVmIE1WNjQzWFhfTkFQSQotc3RhdGljIGludCBtdjY0M3h4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKLSNlbmRpZgotc3RhdGljIGludCBldGhlcm5ldF9waHlfZ2V0KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKTsKLXN0YXRpYyB2b2lkIGV0aGVybmV0X3BoeV9zZXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsIGludCBwaHlfYWRkcik7Ci1zdGF0aWMgaW50IGV0aGVybmV0X3BoeV9kZXRlY3Qoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOwotc3RhdGljIGludCBtdjY0M3h4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOwotc3RhdGljIHZvaWQgbXY2NDN4eF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbCk7Ci1zdGF0aWMgaW50IG12NjQzeHhfZXRoX2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbXY2NDN4eF9ldGh0b29sX29wczsKLQotc3RhdGljIGNoYXIgbXY2NDN4eF9kcml2ZXJfbmFtZVtdID0gIm12NjQzeHhfZXRoIjsKLXN0YXRpYyBjaGFyIG12NjQzeHhfZHJpdmVyX3ZlcnNpb25bXSA9ICIxLjAiOwotCi1zdGF0aWMgaW5saW5lIHUzMiByZGwoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsIGludCBvZmZzZXQpCi17Ci0JcmV0dXJuIHJlYWRsKG1wLT5zaGFyZWQtPmV0aF9iYXNlICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdybChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwgaW50IG9mZnNldCwgdTMyIGRhdGEpCi17Ci0Jd3JpdGVsKGRhdGEsIG1wLT5zaGFyZWQtPmV0aF9iYXNlICsgb2Zmc2V0KTsKLX0KLQotLyoKLSAqIENoYW5nZXMgTVRVIChtYXhpbXVtIHRyYW5zZmVyIHVuaXQpIG9mIHRoZSBnaWdhYml0IGV0aGVucmV0IHBvcnQKLSAqCi0gKiBJbnB1dCA6CXBvaW50ZXIgdG8gZXRoZXJuZXQgaW50ZXJmYWNlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQotICoJCW5ldyBtdHUgc2l6ZQotICogT3V0cHV0IDoJMCB1cG9uIHN1Y2Nlc3MsIC1FSU5WQUwgdXBvbiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKLXsKLQlpZiAoKG5ld19tdHUgPiA5NTAwKSB8fCAobmV3X210dSA8IDY0KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZXYtPm10dSA9IG5ld19tdHU7Ci0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAwOworCXN0cnVjdCBtaWJfY291bnRlcnMgbWliX2NvdW50ZXJzOworCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF90aW1lb3V0X3Rhc2s7CisJc3RydWN0IG1paV9pZl9pbmZvIG1paTsKIAogCS8qCi0JICogU3RvcCBhbmQgdGhlbiByZS1vcGVuIHRoZSBpbnRlcmZhY2UuIFRoaXMgd2lsbCBhbGxvY2F0ZSBSWAotCSAqIHNrYnMgb2YgdGhlIG5ldyBNVFUuCi0JICogVGhlcmUgaXMgYSBwb3NzaWJsZSBkYW5nZXIgdGhhdCB0aGUgb3BlbiB3aWxsIG5vdCBzdWNjZWVkLAotCSAqIGR1ZSB0byBtZW1vcnkgYmVpbmcgZnVsbCwgd2hpY2ggbWlnaHQgZmFpbCB0aGUgb3BlbiBmdW5jdGlvbi4KKwkgKiBSWCBzdGF0ZS4KIAkgKi8KLQltdjY0M3h4X2V0aF9zdG9wKGRldik7Ci0JaWYgKG12NjQzeHhfZXRoX29wZW4oZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYXRhbCBlcnJvciBvbiBvcGVuaW5nIGRldmljZVxuIiwKLQkJCWRldi0+bmFtZSk7Ci0JfQorCWludCBkZWZhdWx0X3J4X3Jpbmdfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHJ4X2Rlc2Nfc3JhbV9hZGRyOworCWludCByeF9kZXNjX3NyYW1fc2l6ZTsKKwl1OCByeHFfbWFzazsKKwlpbnQgcnhxX3ByaW1hcnk7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJc3RydWN0IHJ4X3F1ZXVlIHJ4cVs4XTsKIAotCXJldHVybiAwOworCS8qCisJICogVFggc3RhdGUuCisJICovCisJaW50IGRlZmF1bHRfdHhfcmluZ19zaXplOworCXVuc2lnbmVkIGxvbmcgdHhfZGVzY19zcmFtX2FkZHI7CisJaW50IHR4X2Rlc2Nfc3JhbV9zaXplOworCXU4IHR4cV9tYXNrOworCWludCB0eHFfcHJpbWFyeTsKKwlzdHJ1Y3QgdHhfcXVldWUgdHhxWzhdOworI2lmZGVmIE1WNjQzWFhfRVRIX1RYX0ZBU1RfUkVGSUxMCisJaW50IHR4X2NsZWFuX3RocmVzaG9sZDsKKyNlbmRpZgorfTsKKworCisvKiBwb3J0IHJlZ2lzdGVyIGFjY2Vzc29ycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHJkbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIGludCBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsKG1wLT5zaGFyZWQtPmJhc2UgKyBvZmZzZXQpOwogfQogCi0vKgotICogbXY2NDN4eF9ldGhfcnhfcmVmaWxsX2Rlc2NzCi0gKgotICogRmlsbHMgLyByZWZpbGxzIFJYIHF1ZXVlIG9uIGEgY2VydGFpbiBnaWdhYml0IGV0aGVybmV0IHBvcnQKLSAqCi0gKiBJbnB1dCA6CXBvaW50ZXIgdG8gZXRoZXJuZXQgaW50ZXJmYWNlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQotICogT3V0cHV0IDoJTi9BCi0gKi8KLXN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3J4X3JlZmlsbF9kZXNjcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHdybChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIGludCBvZmZzZXQsIHUzMiBkYXRhKQogewotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGt0X2luZm8gcGt0X2luZm87Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgdW5hbGlnbmVkOworCXdyaXRlbChkYXRhLCBtcC0+c2hhcmVkLT5iYXNlICsgb2Zmc2V0KTsKK30KIAotCXdoaWxlIChtcC0+cnhfZGVzY19jb3VudCA8IG1wLT5yeF9yaW5nX3NpemUpIHsKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihFVEhfUlhfU0tCX1NJWkUgKyBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpKTsKLQkJaWYgKCFza2IpCisKKy8qIHJ4cS90eHEgaGVscGVyIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICpyeHFfdG9fbXAoc3RydWN0IHJ4X3F1ZXVlICpyeHEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihyeHEsIHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlLCByeHFbcnhxLT5pbmRleF0pOworfQorCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKnR4cV90b19tcChzdHJ1Y3QgdHhfcXVldWUgKnR4cSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHR4cSwgc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUsIHR4cVt0eHEtPmluZGV4XSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ4cV9lbmFibGUoc3RydWN0IHJ4X3F1ZXVlICpyeHEpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gcnhxX3RvX21wKHJ4cSk7CisJd3JsKG1wLCBSWFFfQ09NTUFORChtcC0+cG9ydF9udW0pLCAxIDw8IHJ4cS0+aW5kZXgpOworfQorCitzdGF0aWMgdm9pZCByeHFfZGlzYWJsZShzdHJ1Y3QgcnhfcXVldWUgKnJ4cSkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSByeHFfdG9fbXAocnhxKTsKKwl1OCBtYXNrID0gMSA8PCByeHEtPmluZGV4OworCisJd3JsKG1wLCBSWFFfQ09NTUFORChtcC0+cG9ydF9udW0pLCBtYXNrIDw8IDgpOworCXdoaWxlIChyZGwobXAsIFJYUV9DT01NQU5EKG1wLT5wb3J0X251bSkpICYgbWFzaykKKwkJdWRlbGF5KDEwKTsKK30KKworc3RhdGljIHZvaWQgdHhxX2VuYWJsZShzdHJ1Y3QgdHhfcXVldWUgKnR4cSkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSB0eHFfdG9fbXAodHhxKTsKKwl3cmwobXAsIFRYUV9DT01NQU5EKG1wLT5wb3J0X251bSksIDEgPDwgdHhxLT5pbmRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHR4cV9kaXNhYmxlKHN0cnVjdCB0eF9xdWV1ZSAqdHhxKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IHR4cV90b19tcCh0eHEpOworCXU4IG1hc2sgPSAxIDw8IHR4cS0+aW5kZXg7CisKKwl3cmwobXAsIFRYUV9DT01NQU5EKG1wLT5wb3J0X251bSksIG1hc2sgPDwgOCk7CisJd2hpbGUgKHJkbChtcCwgVFhRX0NPTU1BTkQobXAtPnBvcnRfbnVtKSkgJiBtYXNrKQorCQl1ZGVsYXkoMTApOworfQorCitzdGF0aWMgdm9pZCBfX3R4cV9tYXliZV93YWtlKHN0cnVjdCB0eF9xdWV1ZSAqdHhxKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IHR4cV90b19tcCh0eHEpOworCisJLyoKKwkgKiBuZXRpZl97c3RvcCx3YWtlfV9xdWV1ZSgpIGZsb3cgY29udHJvbCBvbmx5IGFwcGxpZXMgdG8KKwkgKiB0aGUgcHJpbWFyeSBxdWV1ZS4KKwkgKi8KKwlCVUdfT04odHhxLT5pbmRleCAhPSBtcC0+dHhxX3ByaW1hcnkpOworCisJaWYgKHR4cS0+dHhfcmluZ19zaXplIC0gdHhxLT50eF9kZXNjX2NvdW50ID49IE1BWF9ERVNDU19QRVJfU0tCKQorCQluZXRpZl93YWtlX3F1ZXVlKG1wLT5kZXYpOworfQorCisKKy8qIHJ4ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgdHhxX3JlY2xhaW0oc3RydWN0IHR4X3F1ZXVlICp0eHEsIGludCBmb3JjZSk7CisKK3N0YXRpYyB2b2lkIHJ4cV9yZWZpbGwoc3RydWN0IHJ4X3F1ZXVlICpyeHEpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gcnhxX3RvX21wKHJ4cSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+bG9jaywgZmxhZ3MpOworCisJd2hpbGUgKHJ4cS0+cnhfZGVzY19jb3VudCA8IHJ4cS0+cnhfcmluZ19zaXplKSB7CisJCWludCBza2Jfc2l6ZTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJaW50IHVuYWxpZ25lZDsKKwkJaW50IHJ4OworCisJCS8qCisJCSAqIFJlc2VydmUgMisxNCBieXRlcyBmb3IgYW4gZXRoZXJuZXQgaGVhZGVyICh0aGUKKwkJICogaGFyZHdhcmUgYXV0b21hdGljYWxseSBwcmVwZW5kcyAyIGJ5dGVzIG9mIGR1bW15CisJCSAqIGRhdGEgdG8gZWFjaCByZWNlaXZlZCBwYWNrZXQpLCA0IGJ5dGVzIGZvciBhIFZMQU4KKwkJICogaGVhZGVyLCBhbmQgNCBieXRlcyBmb3IgdGhlIHRyYWlsaW5nIEZDUyAtLSAyNAorCQkgKiBieXRlcyB0b3RhbC4KKwkJICovCisJCXNrYl9zaXplID0gbXAtPmRldi0+bXR1ICsgMjQ7CisKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihza2Jfc2l6ZSArIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgLSAxKTsKKwkJaWYgKHNrYiA9PSBOVUxMKQogCQkJYnJlYWs7Ci0JCW1wLT5yeF9kZXNjX2NvdW50Kys7CisKIAkJdW5hbGlnbmVkID0gKHUzMilza2ItPmRhdGEgJiAoZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKSAtIDEpOwogCQlpZiAodW5hbGlnbmVkKQogCQkJc2tiX3Jlc2VydmUoc2tiLCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpIC0gdW5hbGlnbmVkKTsKLQkJcGt0X2luZm8uY21kX3N0cyA9IEVUSF9SWF9FTkFCTEVfSU5URVJSVVBUOwotCQlwa3RfaW5mby5ieXRlX2NudCA9IEVUSF9SWF9TS0JfU0laRTsKLQkJcGt0X2luZm8uYnVmX3B0ciA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHNrYi0+ZGF0YSwKLQkJCQkJRVRIX1JYX1NLQl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlwa3RfaW5mby5yZXR1cm5faW5mbyA9IHNrYjsKLQkJaWYgKGV0aF9yeF9yZXR1cm5fYnVmZihtcCwgJnBrdF9pbmZvKSAhPSBFVEhfT0spIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSIlczogRXJyb3IgYWxsb2NhdGluZyBSWCBSaW5nXG4iLCBkZXYtPm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2tiX3Jlc2VydmUoc2tiLCBFVEhfSFdfSVBfQUxJR04pOworCisJCXJ4cS0+cnhfZGVzY19jb3VudCsrOworCQlyeCA9IHJ4cS0+cnhfdXNlZF9kZXNjOworCQlyeHEtPnJ4X3VzZWRfZGVzYyA9IChyeCArIDEpICUgcnhxLT5yeF9yaW5nX3NpemU7CisKKwkJcnhxLT5yeF9kZXNjX2FyZWFbcnhdLmJ1Zl9wdHIgPSBkbWFfbWFwX3NpbmdsZShOVUxMLCBza2ItPmRhdGEsCisJCQkJCQlza2Jfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKKwkJcnhxLT5yeF9kZXNjX2FyZWFbcnhdLmJ1Zl9zaXplID0gc2tiX3NpemU7CisJCXJ4cS0+cnhfc2tiW3J4XSA9IHNrYjsKKwkJd21iKCk7CisJCXJ4cS0+cnhfZGVzY19hcmVhW3J4XS5jbWRfc3RzID0gQlVGRkVSX09XTkVEX0JZX0RNQSB8CisJCQkJCQlSWF9FTkFCTEVfSU5URVJSVVBUOworCQl3bWIoKTsKKworCQkvKgorCQkgKiBUaGUgaGFyZHdhcmUgYXV0b21hdGljYWxseSBwcmVwZW5kcyAyIGJ5dGVzIG9mCisJCSAqIGR1bW15IGRhdGEgdG8gZWFjaCByZWNlaXZlZCBwYWNrZXQsIHNvIHRoYXQgdGhlCisJCSAqIElQIGhlYWRlciBlbmRzIHVwIDE2LWJ5dGUgYWxpZ25lZC4KKwkJICovCisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJfQotCS8qCi0JICogSWYgUlggcmluZyBpcyBlbXB0eSBvZiBTS0IsIHNldCBhIHRpbWVyIHRvIHRyeSBhbGxvY2F0aW5nCi0JICogYWdhaW4gYXQgYSBsYXRlciB0aW1lLgotCSAqLwotCWlmIChtcC0+cnhfZGVzY19jb3VudCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSeCByaW5nIGlzIGVtcHR5XG4iLCBkZXYtPm5hbWUpOwotCQltcC0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIChIWiAvIDEwKTsJLyogMTAwIG1TZWMgKi8KLQkJYWRkX3RpbWVyKCZtcC0+dGltZW91dCk7CisKKwlpZiAocnhxLT5yeF9kZXNjX2NvdW50ICE9IHJ4cS0+cnhfcmluZ19zaXplKSB7CisJCXJ4cS0+cnhfb29tLmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaIC8gMTApOworCQlhZGRfdGltZXIoJnJ4cS0+cnhfb29tKTsKIAl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+bG9jaywgZmxhZ3MpOwogfQogCi0vKgotICogbXY2NDN4eF9ldGhfcnhfcmVmaWxsX2Rlc2NzX3RpbWVyX3dyYXBwZXIKLSAqCi0gKiBUaW1lciByb3V0aW5lIHRvIHdha2UgdXAgUlggcXVldWUgZmlsbGluZyB0YXNrLiBUaGlzIGZ1bmN0aW9uIGlzCi0gKiB1c2VkIG9ubHkgaW4gY2FzZSB0aGUgUlggcXVldWUgaXMgZW1wdHksIGFuZCBhbGwgYWxsb2Nfc2tiIGhhcwotICogZmFpbGVkIChkdWUgdG8gb3V0IG9mIG1lbW9yeSBldmVudCkuCi0gKgotICogSW5wdXQgOglwb2ludGVyIHRvIGV0aGVybmV0IGludGVyZmFjZSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKLSAqIE91dHB1dCA6CU4vQQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbXY2NDN4eF9ldGhfcnhfcmVmaWxsX2Rlc2NzX3RpbWVyX3dyYXBwZXIodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHJ4cV9yZWZpbGxfdGltZXJfd3JhcHBlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JbXY2NDN4eF9ldGhfcnhfcmVmaWxsX2Rlc2NzKChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpOworCXJ4cV9yZWZpbGwoKHN0cnVjdCByeF9xdWV1ZSAqKWRhdGEpOwogfQogCi0vKgotICogbXY2NDN4eF9ldGhfdXBkYXRlX21hY19hZGRyZXNzCi0gKgotICogVXBkYXRlIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgcG9ydCBpbiB0aGUgYWRkcmVzcyB0YWJsZQotICoKLSAqIElucHV0IDoJcG9pbnRlciB0byBldGhlcm5ldCBpbnRlcmZhY2UgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCi0gKiBPdXRwdXQgOglOL0EKLSAqLwotc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfdXBkYXRlX21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ4cV9wcm9jZXNzKHN0cnVjdCByeF9xdWV1ZSAqcnhxLCBpbnQgYnVkZ2V0KQogewotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSByeHFfdG9fbXAocnhxKTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbXAtPmRldi0+c3RhdHM7CisJaW50IHJ4OwogCi0JZXRoX3BvcnRfaW5pdF9tYWNfdGFibGVzKG1wKTsKLQlldGhfcG9ydF91Y19hZGRyX3NldChtcCwgZGV2LT5kZXZfYWRkcik7Ci19CisJcnggPSAwOworCXdoaWxlIChyeCA8IGJ1ZGdldCkgeworCQlzdHJ1Y3QgcnhfZGVzYyAqcnhfZGVzYzsKKwkJdW5zaWduZWQgaW50IGNtZF9zdHM7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLS8qCi0gKiBtdjY0M3h4X2V0aF9zZXRfcnhfbW9kZQotICoKLSAqIENoYW5nZSBmcm9tIHByb21pc2N1b3MgdG8gcmVndWxhciByeCBtb2RlCi0gKgotICogSW5wdXQgOglwb2ludGVyIHRvIGV0aGVybmV0IGludGVyZmFjZSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKLSAqIE91dHB1dCA6CU4vQQotICovCi1zdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgY29uZmlnX3JlZzsKLQotCWNvbmZpZ19yZWcgPSByZGwobXAsIFBPUlRfQ09ORklHX1JFRyhtcC0+cG9ydF9udW0pKTsKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQotCQljb25maWdfcmVnIHw9ICh1MzIpIFVOSUNBU1RfUFJPTUlTQ1VPVVNfTU9ERTsKLQllbHNlCi0JCWNvbmZpZ19yZWcgJj0gfih1MzIpIFVOSUNBU1RfUFJPTUlTQ1VPVVNfTU9ERTsKLQl3cmwobXAsIFBPUlRfQ09ORklHX1JFRyhtcC0+cG9ydF9udW0pLCBjb25maWdfcmVnKTsKLQotCWV0aF9wb3J0X3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOwotfQotCi0vKgotICogbXY2NDN4eF9ldGhfc2V0X21hY19hZGRyZXNzCi0gKgotICogQ2hhbmdlIHRoZSBpbnRlcmZhY2UncyBtYWMgYWRkcmVzcy4KLSAqIE5vIHNwZWNpYWwgaGFyZHdhcmUgdGhpbmcgc2hvdWxkIGJlIGRvbmUgYmVjYXVzZSBpbnRlcmZhY2UgaXMgYWx3YXlzCi0gKiBwdXQgaW4gcHJvbWlzY3VvdXMgbW9kZS4KLSAqCi0gKiBJbnB1dCA6CXBvaW50ZXIgdG8gZXRoZXJuZXQgaW50ZXJmYWNlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBhbmQKLSAqCQlhIHBvaW50ZXIgdG8gdGhlIGRlc2lnbmF0ZWQgZW50cnkgdG8gYmUgYWRkZWQgdG8gdGhlIGNhY2hlLgotICogT3V0cHV0IDoJemVybyB1cG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHVwb24gZmFpbHVyZQotICovCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJLyogKzIgaXMgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIEhXIGFkZHIgdHlwZSAqLwotCQlkZXYtPmRldl9hZGRyW2ldID0gKCh1bnNpZ25lZCBjaGFyICopYWRkcilbaSArIDJdOwotCW12NjQzeHhfZXRoX3VwZGF0ZV9tYWNfYWRkcmVzcyhkZXYpOwotCXJldHVybiAwOwotfQotCi0vKgotICogbXY2NDN4eF9ldGhfdHhfdGltZW91dAotICoKLSAqIENhbGxlZCB1cG9uIGEgdGltZW91dCBvbiB0cmFuc21pdHRpbmcgYSBwYWNrZXQKLSAqCi0gKiBJbnB1dCA6CXBvaW50ZXIgdG8gZXRoZXJuZXQgaW50ZXJmYWNlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZS4KLSAqIE91dHB1dCA6CU4vQQotICovCi1zdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRYIHRpbWVvdXQgICIsIGRldi0+bmFtZSk7Ci0KLQkvKiBEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNjaGVkdWxlX3dvcmsoJm1wLT50eF90aW1lb3V0X3Rhc2spOwotfQotCi0vKgotICogbXY2NDN4eF9ldGhfdHhfdGltZW91dF90YXNrCi0gKgotICogQWN0dWFsIHJvdXRpbmUgdG8gcmVzZXQgdGhlIGFkYXB0ZXIgd2hlbiBhIHRpbWVvdXQgb24gVHggaGFzIG9jY3VycmVkCi0gKi8KLXN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVnbHkpCi17Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBjb250YWluZXJfb2YodWdseSwgc3RydWN0IG12NjQzeHhfcHJpdmF0ZSwKLQkJCQkJCSAgdHhfdGltZW91dF90YXNrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbXAtPmRldjsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm47Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQlldGhfcG9ydF9yZXNldChtcCk7Ci0JZXRoX3BvcnRfc3RhcnQoZGV2KTsKLQotCWlmIChtcC0+dHhfcmluZ19zaXplIC0gbXAtPnR4X2Rlc2NfY291bnQgPj0gTUFYX0RFU0NTX1BFUl9TS0IpCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLX0KLQotLyoqCi0gKiBtdjY0M3h4X2V0aF9mcmVlX3R4X2Rlc2NzIC0gRnJlZSB0aGUgdHggZGVzYyBkYXRhIGZvciBjb21wbGV0ZWQgZGVzY3JpcHRvcnMKLSAqCi0gKiBJZiBmb3JjZSBpcyBub24temVybywgZnJlZXMgdW5jb21wbGV0ZWQgZGVzY3JpcHRvcnMgYXMgd2VsbAotICovCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX2ZyZWVfdHhfZGVzY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlKQotewotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZXRoX3R4X2Rlc2MgKmRlc2M7Ci0JdTMyIGNtZF9zdHM7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB0eF9pbmRleDsKLQlkbWFfYWRkcl90IGFkZHI7Ci0JaW50IGNvdW50OwotCWludCByZWxlYXNlZCA9IDA7Ci0KLQl3aGlsZSAobXAtPnR4X2Rlc2NfY291bnQgPiAwKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+bG9jaywgZmxhZ3MpOwogCi0JCS8qIHR4X2Rlc2NfY291bnQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxvY2sgKi8KLQkJaWYgKG1wLT50eF9kZXNjX2NvdW50IDw9IDApIHsKKwkJcnhfZGVzYyA9ICZyeHEtPnJ4X2Rlc2NfYXJlYVtyeHEtPnJ4X2N1cnJfZGVzY107CisKKwkJY21kX3N0cyA9IHJ4X2Rlc2MtPmNtZF9zdHM7CisJCWlmIChjbWRfc3RzICYgQlVGRkVSX09XTkVEX0JZX0RNQSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiByZWxlYXNlZDsKKwkJCWJyZWFrOwogCQl9CisJCXJtYigpOwogCi0JCXR4X2luZGV4ID0gbXAtPnR4X3VzZWRfZGVzY19xOwotCQlkZXNjID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9pbmRleF07Ci0JCWNtZF9zdHMgPSBkZXNjLT5jbWRfc3RzOworCQlza2IgPSByeHEtPnJ4X3NrYltyeHEtPnJ4X2N1cnJfZGVzY107CisJCXJ4cS0+cnhfc2tiW3J4cS0+cnhfY3Vycl9kZXNjXSA9IE5VTEw7CiAKLQkJaWYgKCFmb3JjZSAmJiAoY21kX3N0cyAmIEVUSF9CVUZGRVJfT1dORURfQllfRE1BKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiByZWxlYXNlZDsKLQkJfQotCi0JCW1wLT50eF91c2VkX2Rlc2NfcSA9ICh0eF9pbmRleCArIDEpICUgbXAtPnR4X3Jpbmdfc2l6ZTsKLQkJbXAtPnR4X2Rlc2NfY291bnQtLTsKLQotCQlhZGRyID0gZGVzYy0+YnVmX3B0cjsKLQkJY291bnQgPSBkZXNjLT5ieXRlX2NudDsKLQkJc2tiID0gbXAtPnR4X3NrYlt0eF9pbmRleF07Ci0JCWlmIChza2IpCi0JCQltcC0+dHhfc2tiW3R4X2luZGV4XSA9IE5VTEw7Ci0KLQkJaWYgKGNtZF9zdHMgJiBFVEhfRVJST1JfU1VNTUFSWSkgewotCQkJcHJpbnRrKCIlczogRXJyb3IgaW4gVFhcbiIsIGRldi0+bmFtZSk7Ci0JCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQl9CisJCXJ4cS0+cnhfY3Vycl9kZXNjID0gKHJ4cS0+cnhfY3Vycl9kZXNjICsgMSkgJSByeHEtPnJ4X3Jpbmdfc2l6ZTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+bG9jaywgZmxhZ3MpOwogCi0JCWlmIChjbWRfc3RzICYgRVRIX1RYX0ZJUlNUX0RFU0MpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGFkZHIsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKLQkJZWxzZQotCQkJZG1hX3VubWFwX3BhZ2UoTlVMTCwgYWRkciwgY291bnQsIERNQV9UT19ERVZJQ0UpOwotCi0JCWlmIChza2IpCi0JCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCi0JCXJlbGVhc2VkID0gMTsKLQl9Ci0KLQlyZXR1cm4gcmVsZWFzZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2ZyZWVfY29tcGxldGVkX3R4X2Rlc2NzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKG12NjQzeHhfZXRoX2ZyZWVfdHhfZGVzY3MoZGV2LCAwKSAmJgotCSAgICBtcC0+dHhfcmluZ19zaXplIC0gbXAtPnR4X2Rlc2NfY291bnQgPj0gTUFYX0RFU0NTX1BFUl9TS0IpCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfZnJlZV9hbGxfdHhfZGVzY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQltdjY0M3h4X2V0aF9mcmVlX3R4X2Rlc2NzKGRldiwgMSk7Ci19Ci0KLS8qCi0gKiBtdjY0M3h4X2V0aF9yZWNlaXZlCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBmb3J3YXJkIHBhY2tldHMgdGhhdCBhcmUgcmVjZWl2ZWQgZnJvbSB0aGUgcG9ydCdzCi0gKiBxdWV1ZXMgdG93YXJkIGtlcm5lbCBjb3JlIG9yIEZhc3RSb3V0ZSB0aGVtIHRvIGFub3RoZXIgaW50ZXJmYWNlLgotICoKLSAqIElucHV0IDoJZGV2IC0gYSBwb2ludGVyIHRvIHRoZSByZXF1aXJlZCBpbnRlcmZhY2UKLSAqCQltYXggLSBtYXhpbXVtIG51bWJlciB0byByZWNlaXZlICgwIG1lYW5zIHVubGltdGVkKQotICoKLSAqIE91dHB1dCA6CW51bWJlciBvZiBzZXJ2ZWQgcGFja2V0cwotICovCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3JlY2VpdmVfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJ1ZGdldCkKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7Ci0JdW5zaWduZWQgaW50IHJlY2VpdmVkX3BhY2tldHMgPSAwOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHBrdF9pbmZvIHBrdF9pbmZvOwotCi0Jd2hpbGUgKGJ1ZGdldC0tID4gMCAmJiBldGhfcG9ydF9yZWNlaXZlKG1wLCAmcGt0X2luZm8pID09IEVUSF9PSykgewotCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHBrdF9pbmZvLmJ1Zl9wdHIsIEVUSF9SWF9TS0JfU0laRSwKLQkJCQkJCQlETUFfRlJPTV9ERVZJQ0UpOwotCQltcC0+cnhfZGVzY19jb3VudC0tOwotCQlyZWNlaXZlZF9wYWNrZXRzKys7CisJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgcnhfZGVzYy0+YnVmX3B0ciArIDIsCisJCQkJIG1wLT5kZXYtPm10dSArIDI0LCBETUFfRlJPTV9ERVZJQ0UpOworCQlyeHEtPnJ4X2Rlc2NfY291bnQtLTsKKwkJcngrKzsKIAogCQkvKgogCQkgKiBVcGRhdGUgc3RhdGlzdGljcy4KLQkJICogTm90ZSBieXRlIGNvdW50IGluY2x1ZGVzIDQgYnl0ZSBDUkMgY291bnQKKwkJICoKKwkJICogTm90ZSB0aGF0IHRoZSBkZXNjcmlwdG9yIGJ5dGUgY291bnQgaW5jbHVkZXMgMiBkdW1teQorCQkgKiBieXRlcyBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGJ5IHRoZSBoYXJkd2FyZSBhdCB0aGUKKwkJICogc3RhcnQgb2YgdGhlIHBhY2tldCAod2hpY2ggd2UgZG9uJ3QgY291bnQpLCBhbmQgYSA0CisJCSAqIGJ5dGUgQ1JDIGF0IHRoZSBlbmQgb2YgdGhlIHBhY2tldCAod2hpY2ggd2UgZG8gY291bnQpLgogCQkgKi8KIAkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQkJc3RhdHMtPnJ4X2J5dGVzICs9IHBrdF9pbmZvLmJ5dGVfY250OwotCQlza2IgPSBwa3RfaW5mby5yZXR1cm5faW5mbzsKKwkJc3RhdHMtPnJ4X2J5dGVzICs9IHJ4X2Rlc2MtPmJ5dGVfY250IC0gMjsKKwogCQkvKgotCQkgKiBJbiBjYXNlIHJlY2VpdmVkIGEgcGFja2V0IHdpdGhvdXQgZmlyc3QgLyBsYXN0IGJpdHMgb24gT1IKLQkJICogdGhlIGVycm9yIHN1bW1hcnkgYml0IGlzIG9uLCB0aGUgcGFja2V0cyBuZWVkcyB0byBiZSBkcm9wZWVkLgorCQkgKiBJbiBjYXNlIHdlIHJlY2VpdmVkIGEgcGFja2V0IHdpdGhvdXQgZmlyc3QgLyBsYXN0IGJpdHMKKwkJICogb24sIG9yIHRoZSBlcnJvciBzdW1tYXJ5IGJpdCBpcyBzZXQsIHRoZSBwYWNrZXQgbmVlZHMKKwkJICogdG8gYmUgZHJvcHBlZC4KIAkJICovCi0JCWlmICgoKHBrdF9pbmZvLmNtZF9zdHMKLQkJCQkmIChFVEhfUlhfRklSU1RfREVTQyB8IEVUSF9SWF9MQVNUX0RFU0MpKSAhPQotCQkJCQkoRVRIX1JYX0ZJUlNUX0RFU0MgfCBFVEhfUlhfTEFTVF9ERVNDKSkKLQkJCQl8fCAocGt0X2luZm8uY21kX3N0cyAmIEVUSF9FUlJPUl9TVU1NQVJZKSkgeworCQlpZiAoKChjbWRfc3RzICYgKFJYX0ZJUlNUX0RFU0MgfCBSWF9MQVNUX0RFU0MpKSAhPQorCQkJCQkoUlhfRklSU1RfREVTQyB8IFJYX0xBU1RfREVTQykpCisJCQkJfHwgKGNtZF9zdHMgJiBFUlJPUl9TVU1NQVJZKSkgewogCQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKLQkJCWlmICgocGt0X2luZm8uY21kX3N0cyAmIChFVEhfUlhfRklSU1RfREVTQyB8Ci0JCQkJCQkJRVRIX1JYX0xBU1RfREVTQykpICE9Ci0JCQkJKEVUSF9SWF9GSVJTVF9ERVNDIHwgRVRIX1JYX0xBU1RfREVTQykpIHsKKworCQkJaWYgKChjbWRfc3RzICYgKFJYX0ZJUlNUX0RFU0MgfCBSWF9MQVNUX0RFU0MpKSAhPQorCQkJCShSWF9GSVJTVF9ERVNDIHwgUlhfTEFTVF9ERVNDKSkgewogCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkJIiVzOiBSZWNlaXZlZCBwYWNrZXQgc3ByZWFkICIKLQkJCQkJCSJvbiBtdWx0aXBsZSBkZXNjcmlwdG9yc1xuIiwKLQkJCQkJCWRldi0+bmFtZSk7CisJCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZtcC0+ZGV2LT5kZXYsCisJCQkJCQkgICAicmVjZWl2ZWQgcGFja2V0IHNwYW5uaW5nICIKKwkJCQkJCSAgICJtdWx0aXBsZSBkZXNjcmlwdG9yc1xuIik7CiAJCQl9Ci0JCQlpZiAocGt0X2luZm8uY21kX3N0cyAmIEVUSF9FUlJPUl9TVU1NQVJZKQorCisJCQlpZiAoY21kX3N0cyAmIEVSUk9SX1NVTU1BUlkpCiAJCQkJc3RhdHMtPnJ4X2Vycm9ycysrOwogCiAJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwpAQCAtOTc1LDY2OCArNTc2LDEyMCBAQAogCQkJICogVGhlIC00IGlzIGZvciB0aGUgQ1JDIGluIHRoZSB0cmFpbGVyIG9mIHRoZQogCQkJICogcmVjZWl2ZWQgcGFja2V0CiAJCQkgKi8KLQkJCXNrYl9wdXQoc2tiLCBwa3RfaW5mby5ieXRlX2NudCAtIDQpOworCQkJc2tiX3B1dChza2IsIHJ4X2Rlc2MtPmJ5dGVfY250IC0gMiAtIDQpOwogCi0JCQlpZiAocGt0X2luZm8uY21kX3N0cyAmIEVUSF9MQVlFUl80X0NIRUNLU1VNX09LKSB7CisJCQlpZiAoY21kX3N0cyAmIExBWUVSXzRfQ0hFQ0tTVU1fT0spIHsKIAkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCXNrYi0+Y3N1bSA9IGh0b25zKAotCQkJCQkocGt0X2luZm8uY21kX3N0cyAmIDB4MDAwN2ZmZjgpID4+IDMpOworCQkJCQkoY21kX3N0cyAmIDB4MDAwN2ZmZjgpID4+IDMpOwogCQkJfQotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLSNpZmRlZiBNVjY0M1hYX05BUEkKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG1wLT5kZXYpOworI2lmZGVmIE1WNjQzWFhfRVRIX05BUEkKIAkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAjZWxzZQogCQkJbmV0aWZfcngoc2tiKTsKICNlbmRpZgogCQl9Ci0JCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JfQotCW12NjQzeHhfZXRoX3J4X3JlZmlsbF9kZXNjcyhkZXYpOwkvKiBGaWxsIFJYIHJpbmcgd2l0aCBza2IncyAqLwogCi0JcmV0dXJuIHJlY2VpdmVkX3BhY2tldHM7CisJCW1wLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCX0KKworCXJ4cV9yZWZpbGwocnhxKTsKKworCXJldHVybiByeDsKIH0KIAotLyogU2V0IHRoZSBtdjY0M3h4IHBvcnQgY29uZmlndXJhdGlvbiByZWdpc3RlciBmb3IgdGhlIHNwZWVkL2R1cGxleCBtb2RlLiAqLwotc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfdXBkYXRlX3BzY3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQorI2lmZGVmIE1WNjQzWFhfRVRIX05BUEkKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKLQl1MzIgb19wc2NyLCBuX3BzY3I7Ci0JdW5zaWduZWQgaW50IHF1ZXVlczsKLQotCW9fcHNjciA9IHJkbChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pKTsKLQluX3BzY3IgPSBvX3BzY3I7Ci0KLQkvKiBjbGVhciBzcGVlZCwgZHVwbGV4IGFuZCByeCBidWZmZXIgc2l6ZSBmaWVsZHMgKi8KLQluX3BzY3IgJj0gfihTRVRfTUlJX1NQRUVEX1RPXzEwMCAgfAotCQkgICBTRVRfR01JSV9TUEVFRF9UT18xMDAwIHwKLQkJICAgU0VUX0ZVTExfRFVQTEVYX01PREUgICB8Ci0JCSAgIE1BWF9SWF9QQUNLRVRfTUFTSyk7Ci0KLQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQluX3BzY3IgfD0gU0VUX0ZVTExfRFVQTEVYX01PREU7Ci0KLQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkKLQkJbl9wc2NyIHw9IFNFVF9HTUlJX1NQRUVEX1RPXzEwMDAgfAotCQkJICBNQVhfUlhfUEFDS0VUXzk3MDBCWVRFOwotCWVsc2UgewotCQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQotCQkJbl9wc2NyIHw9IFNFVF9NSUlfU1BFRURfVE9fMTAwOwotCQluX3BzY3IgfD0gTUFYX1JYX1BBQ0tFVF8xNTIyQllURTsKLQl9Ci0KLQlpZiAobl9wc2NyICE9IG9fcHNjcikgewotCQlpZiAoKG9fcHNjciAmIFNFUklBTF9QT1JUX0VOQUJMRSkgPT0gMCkKLQkJCXdybChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLCBuX3BzY3IpOwotCQllbHNlIHsKLQkJCXF1ZXVlcyA9IG12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV90eChtcCk7Ci0KLQkJCW9fcHNjciAmPSB+U0VSSUFMX1BPUlRfRU5BQkxFOwotCQkJd3JsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksIG9fcHNjcik7Ci0JCQl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgbl9wc2NyKTsKLQkJCXdybChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLCBuX3BzY3IpOwotCQkJaWYgKHF1ZXVlcykKLQkJCQltdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV90eChtcCwgcXVldWVzKTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIG12NjQzeHhfZXRoX2ludF9oYW5kbGVyCi0gKgotICogTWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIGdpZ2JpdCBldGhlcm5ldCBwb3J0cwotICoKLSAqIElucHV0IDoJaXJxCS0gaXJxIG51bWJlciAobm90IHVzZWQpCi0gKgkJZGV2X2lkCS0gYSBwb2ludGVyIHRvIHRoZSByZXF1aXJlZCBpbnRlcmZhY2UncyBkYXRhIHN0cnVjdHVyZQotICoJCXJlZ3MJLSBub3QgdXNlZAotICogT3V0cHV0IDoJTi9BCi0gKi8KLQotc3RhdGljIGlycXJldHVybl90IG12NjQzeHhfZXRoX2ludF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgZXRoX2ludF9jYXVzZSwgZXRoX2ludF9jYXVzZV9leHQgPSAwOwotCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKLQotCS8qIFJlYWQgaW50ZXJydXB0IGNhdXNlIHJlZ2lzdGVycyAqLwotCWV0aF9pbnRfY2F1c2UgPSByZGwobXAsIElOVEVSUlVQVF9DQVVTRV9SRUcocG9ydF9udW0pKSAmCi0JCQkJCQlFVEhfSU5UX1VOTUFTS19BTEw7Ci0JaWYgKGV0aF9pbnRfY2F1c2UgJiBFVEhfSU5UX0NBVVNFX0VYVCkgewotCQlldGhfaW50X2NhdXNlX2V4dCA9IHJkbChtcCwKLQkJCUlOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHBvcnRfbnVtKSkgJgotCQkJCQkJRVRIX0lOVF9VTk1BU0tfQUxMX0VYVDsKLQkJd3JsKG1wLCBJTlRFUlJVUFRfQ0FVU0VfRVhURU5EX1JFRyhwb3J0X251bSksCi0JCQkJCQkJfmV0aF9pbnRfY2F1c2VfZXh0KTsKLQl9Ci0KLQkvKiBQSFkgc3RhdHVzIGNoYW5nZWQgKi8KLQlpZiAoZXRoX2ludF9jYXVzZV9leHQgJiAoRVRIX0lOVF9DQVVTRV9QSFkgfCBFVEhfSU5UX0NBVVNFX1NUQVRFKSkgewotCQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOwotCi0JCWlmIChtaWlfbGlua19vaygmbXAtPm1paSkpIHsKLQkJCW1paV9ldGh0b29sX2dzZXQoJm1wLT5taWksICZjbWQpOwotCQkJbXY2NDN4eF9ldGhfdXBkYXRlX3BzY3IoZGV2LCAmY21kKTsKLQkJCW12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3R4KG1wLCBFVEhfVFhfUVVFVUVTX0VOQUJMRUQpOwotCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCQkJaWYgKG1wLT50eF9yaW5nX3NpemUgLSBtcC0+dHhfZGVzY19jb3VudCA+PQotCQkJCQkJCU1BWF9ERVNDU19QRVJfU0tCKQotCQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQl9Ci0JfQotCi0jaWZkZWYgTVY2NDNYWF9OQVBJCi0JaWYgKGV0aF9pbnRfY2F1c2UgJiBFVEhfSU5UX0NBVVNFX1JYKSB7Ci0JCS8qIHNjaGVkdWxlIHRoZSBOQVBJIHBvbGwgcm91dGluZSB0byBtYWludGFpbiBwb3J0ICovCi0JCXdybChtcCwgSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgRVRIX0lOVF9NQVNLX0FMTCk7Ci0KLQkJLyogd2FpdCBmb3IgcHJldmlvdXMgd3JpdGUgdG8gY29tcGxldGUgKi8KLQkJcmRsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pKTsKLQotCQluZXRpZl9yeF9zY2hlZHVsZShkZXYsICZtcC0+bmFwaSk7Ci0JfQotI2Vsc2UKLQlpZiAoZXRoX2ludF9jYXVzZSAmIEVUSF9JTlRfQ0FVU0VfUlgpCi0JCW12NjQzeHhfZXRoX3JlY2VpdmVfcXVldWUoZGV2LCBJTlRfTUFYKTsKLSNlbmRpZgotCWlmIChldGhfaW50X2NhdXNlX2V4dCAmIEVUSF9JTlRfQ0FVU0VfVFgpCi0JCW12NjQzeHhfZXRoX2ZyZWVfY29tcGxldGVkX3R4X2Rlc2NzKGRldik7Ci0KLQkvKgotCSAqIElmIG5vIHJlYWwgaW50ZXJydXB0IG9jY3VyZWQsIGV4aXQuCi0JICogVGhpcyBjYW4gaGFwcGVuIHdoZW4gdXNpbmcgZ2lnRSBpbnRlcnJ1cHQgY29hbGVzY2luZyBtZWNoYW5pc20uCi0JICovCi0JaWYgKChldGhfaW50X2NhdXNlID09IDB4MCkgJiYgKGV0aF9pbnRfY2F1c2VfZXh0ID09IDB4MCkpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotI2lmZGVmIE1WNjQzWFhfQ09BTAotCi0vKgotICogZXRoX3BvcnRfc2V0X3J4X2NvYWwgLSBTZXRzIGNvYWxlc2NpbmcgaW50ZXJydXB0IG1lY2hhbmlzbSBvbiBSWCBwYXRoCi0gKgotICogREVTQ1JJUFRJT046Ci0gKglUaGlzIHJvdXRpbmUgc2V0cyB0aGUgUlggY29hbGVzY2luZyBpbnRlcnJ1cHQgbWVjaGFuaXNtIHBhcmFtZXRlci4KLSAqCVRoaXMgcGFyYW1ldGVyIGlzIGEgdGltZW91dCBjb3VudGVyLCB0aGF0IGNvdW50cyBpbiA2NCB0X2NsawotICoJY2h1bmtzIDsgdGhhdCB3aGVuIHRpbWVvdXQgZXZlbnQgb2NjdXJzIGEgbWFza2FibGUgaW50ZXJydXB0Ci0gKglvY2N1cnMuCi0gKglUaGUgcGFyYW1ldGVyIGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIHRDbGsgb2YgdGhlIE1WLTY0M3h4IGNoaXAKLSAqCSwgYW5kIHRoZSByZXF1aXJlZCBkZWxheSBvZiB0aGUgaW50ZXJydXB0IGluIHVzZWMuCi0gKgotICogSU5QVVQ6Ci0gKglzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcAlFdGhlcm5ldCBwb3J0Ci0gKgl1bnNpZ25lZCBpbnQgZGVsYXkJCURlbGF5IGluIHVzZWMKLSAqCi0gKiBPVVRQVVQ6Ci0gKglJbnRlcnJ1cHQgY29hbGVzY2luZyBtZWNoYW5pc20gdmFsdWUgaXMgc2V0IGluIE1WLTY0M3h4IGNoaXAuCi0gKgotICogUkVUVVJOOgotICoJVGhlIGludGVycnVwdCBjb2FsZXNjaW5nIHZhbHVlIHNldCBpbiB0aGUgZ2lnRSBwb3J0LgotICoKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBldGhfcG9ydF9zZXRfcnhfY29hbChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKLQkJCQkJdW5zaWduZWQgaW50IGRlbGF5KQotewotCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKLQl1bnNpZ25lZCBpbnQgY29hbCA9ICgobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwMDAwKSAqIGRlbGF5KSAvIDY0OwotCi0JLyogU2V0IFJYIENvYWxlc2NpbmcgbWVjaGFuaXNtICovCi0Jd3JsKG1wLCBTRE1BX0NPTkZJR19SRUcocG9ydF9udW0pLAotCQkoKGNvYWwgJiAweDNmZmYpIDw8IDgpIHwKLQkJKHJkbChtcCwgU0RNQV9DT05GSUdfUkVHKHBvcnRfbnVtKSkKLQkJCSYgMHhmZmMwMDBmZikpOwotCi0JcmV0dXJuIGNvYWw7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIGV0aF9wb3J0X3NldF90eF9jb2FsIC0gU2V0cyBjb2FsZXNjaW5nIGludGVycnVwdCBtZWNoYW5pc20gb24gVFggcGF0aAotICoKLSAqIERFU0NSSVBUSU9OOgotICoJVGhpcyByb3V0aW5lIHNldHMgdGhlIFRYIGNvYWxlc2NpbmcgaW50ZXJydXB0IG1lY2hhbmlzbSBwYXJhbWV0ZXIuCi0gKglUaGlzIHBhcmFtZXRlciBpcyBhIHRpbWVvdXQgY291bnRlciwgdGhhdCBjb3VudHMgaW4gNjQgdF9jbGsKLSAqCWNodW5rcyA7IHRoYXQgd2hlbiB0aW1lb3V0IGV2ZW50IG9jY3VycyBhIG1hc2thYmxlIGludGVycnVwdAotICoJb2NjdXJzLgotICoJVGhlIHBhcmFtZXRlciBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSB0X2NMSyBmcmVxdWVuY3kgb2YgdGhlCi0gKglNVi02NDN4eCBjaGlwIGFuZCB0aGUgcmVxdWlyZWQgZGVsYXkgaW4gdGhlIGludGVycnVwdCBpbiB1U2VjCi0gKgotICogSU5QVVQ6Ci0gKglzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcAlFdGhlcm5ldCBwb3J0Ci0gKgl1bnNpZ25lZCBpbnQgZGVsYXkJCURlbGF5IGluIHVTZWNvbmRzCi0gKgotICogT1VUUFVUOgotICoJSW50ZXJydXB0IGNvYWxlc2NpbmcgbWVjaGFuaXNtIHZhbHVlIGlzIHNldCBpbiBNVi02NDN4eCBjaGlwLgotICoKLSAqIFJFVFVSTjoKLSAqCVRoZSBpbnRlcnJ1cHQgY29hbGVzY2luZyB2YWx1ZSBzZXQgaW4gdGhlIGdpZ0UgcG9ydC4KLSAqCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZXRoX3BvcnRfc2V0X3R4X2NvYWwoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJCXVuc2lnbmVkIGludCBkZWxheSkKLXsKLQl1bnNpZ25lZCBpbnQgY29hbCA9ICgobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwMDAwKSAqIGRlbGF5KSAvIDY0OwotCi0JLyogU2V0IFRYIENvYWxlc2NpbmcgbWVjaGFuaXNtICovCi0Jd3JsKG1wLCBUWF9GSUZPX1VSR0VOVF9USFJFU0hPTERfUkVHKG1wLT5wb3J0X251bSksIGNvYWwgPDwgNCk7Ci0KLQlyZXR1cm4gY29hbDsKLX0KLQotLyoKLSAqIGV0aGVyX2luaXRfcnhfZGVzY19yaW5nIC0gQ3VydmUgYSBSeCBjaGFpbiBkZXNjIGxpc3QgYW5kIGJ1ZmZlciBpbiBtZW1vcnkuCi0gKgotICogREVTQ1JJUFRJT046Ci0gKglUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgUnggY2hhaW5lZCBsaXN0IG9mIGRlc2NyaXB0b3JzIGFuZCBwYWNrZXQKLSAqCWJ1ZmZlcnMgaW4gYSBmb3JtIG9mIGEgcmluZy4gVGhlIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgcG9ydAotICoJaW5pdGlhbGl6YXRpb24gcm91dGluZSBhbmQgYmVmb3JlIHBvcnQgc3RhcnQgcm91dGluZS4KLSAqCVRoZSBFdGhlcm5ldCBTRE1BIGVuZ2luZSB1c2VzIENQVSBidXMgYWRkcmVzc2VzIHRvIGFjY2VzcyB0aGUgdmFyaW91cwotICoJZGV2aWNlcyBpbiB0aGUgc3lzdGVtIChpLmUuIERSQU0pLiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGV0aGVybmV0Ci0gKglzdHJ1Y3QgJ3ZpcnR1YWwgdG8gcGh5c2ljYWwnIHJvdXRpbmUgKHNldCBieSB0aGUgdXNlcikgdG8gc2V0IHRoZSByaW5nCi0gKgl3aXRoIHBoeXNpY2FsIGFkZHJlc3Nlcy4KLSAqCi0gKiBJTlBVVDoKLSAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IFBvcnQgQ29udHJvbCBzcnR1Y3QuCi0gKgotICogT1VUUFVUOgotICoJVGhlIHJvdXRpbmUgdXBkYXRlcyB0aGUgRXRoZXJuZXQgcG9ydCBjb250cm9sIHN0cnVjdCB3aXRoIGluZm9ybWF0aW9uCi0gKglyZWdhcmRpbmcgdGhlIFJ4IGRlc2NyaXB0b3JzIGFuZCBidWZmZXJzLgotICoKLSAqIFJFVFVSTjoKLSAqCU5vbmUuCi0gKi8KLXN0YXRpYyB2b2lkIGV0aGVyX2luaXRfcnhfZGVzY19yaW5nKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKQotewotCXZvbGF0aWxlIHN0cnVjdCBldGhfcnhfZGVzYyAqcF9yeF9kZXNjOwotCWludCByeF9kZXNjX251bSA9IG1wLT5yeF9yaW5nX3NpemU7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wOworCWludCByeDsKIAlpbnQgaTsKIAotCS8qIGluaXRpYWxpemUgdGhlIG5leHRfZGVzY19wdHIgbGlua3MgaW4gdGhlIFJ4IGRlc2NyaXB0b3JzIHJpbmcgKi8KLQlwX3J4X2Rlc2MgPSAoc3RydWN0IGV0aF9yeF9kZXNjICopbXAtPnBfcnhfZGVzY19hcmVhOwotCWZvciAoaSA9IDA7IGkgPCByeF9kZXNjX251bTsgaSsrKSB7Ci0JCXBfcnhfZGVzY1tpXS5uZXh0X2Rlc2NfcHRyID0gbXAtPnJ4X2Rlc2NfZG1hICsKLQkJCSgoaSArIDEpICUgcnhfZGVzY19udW0pICogc2l6ZW9mKHN0cnVjdCBldGhfcnhfZGVzYyk7Ci0JfQorCW1wID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlLCBuYXBpKTsKIAotCS8qIFNhdmUgUnggZGVzYyBwb2ludGVyIHRvIGRyaXZlciBzdHJ1Y3QuICovCi0JbXAtPnJ4X2N1cnJfZGVzY19xID0gMDsKLQltcC0+cnhfdXNlZF9kZXNjX3EgPSAwOwotCi0JbXAtPnJ4X2Rlc2NfYXJlYV9zaXplID0gcnhfZGVzY19udW0gKiBzaXplb2Yoc3RydWN0IGV0aF9yeF9kZXNjKTsKLX0KLQotLyoKLSAqIGV0aGVyX2luaXRfdHhfZGVzY19yaW5nIC0gQ3VydmUgYSBUeCBjaGFpbiBkZXNjIGxpc3QgYW5kIGJ1ZmZlciBpbiBtZW1vcnkuCi0gKgotICogREVTQ1JJUFRJT046Ci0gKglUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgVHggY2hhaW5lZCBsaXN0IG9mIGRlc2NyaXB0b3JzIGFuZCBwYWNrZXQKLSAqCWJ1ZmZlcnMgaW4gYSBmb3JtIG9mIGEgcmluZy4gVGhlIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgcG9ydAotICoJaW5pdGlhbGl6YXRpb24gcm91dGluZSBhbmQgYmVmb3JlIHBvcnQgc3RhcnQgcm91dGluZS4KLSAqCVRoZSBFdGhlcm5ldCBTRE1BIGVuZ2luZSB1c2VzIENQVSBidXMgYWRkcmVzc2VzIHRvIGFjY2VzcyB0aGUgdmFyaW91cwotICoJZGV2aWNlcyBpbiB0aGUgc3lzdGVtIChpLmUuIERSQU0pLiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGV0aGVybmV0Ci0gKglzdHJ1Y3QgJ3ZpcnR1YWwgdG8gcGh5c2ljYWwnIHJvdXRpbmUgKHNldCBieSB0aGUgdXNlcikgdG8gc2V0IHRoZSByaW5nCi0gKgl3aXRoIHBoeXNpY2FsIGFkZHJlc3Nlcy4KLSAqCi0gKiBJTlBVVDoKLSAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IFBvcnQgQ29udHJvbCBzcnR1Y3QuCi0gKgotICogT1VUUFVUOgotICoJVGhlIHJvdXRpbmUgdXBkYXRlcyB0aGUgRXRoZXJuZXQgcG9ydCBjb250cm9sIHN0cnVjdCB3aXRoIGluZm9ybWF0aW9uCi0gKglyZWdhcmRpbmcgdGhlIFR4IGRlc2NyaXB0b3JzIGFuZCBidWZmZXJzLgotICoKLSAqIFJFVFVSTjoKLSAqCU5vbmUuCi0gKi8KLXN0YXRpYyB2b2lkIGV0aGVyX2luaXRfdHhfZGVzY19yaW5nKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKQotewotCWludCB0eF9kZXNjX251bSA9IG1wLT50eF9yaW5nX3NpemU7Ci0Jc3RydWN0IGV0aF90eF9kZXNjICpwX3R4X2Rlc2M7Ci0JaW50IGk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBuZXh0X2Rlc2NfcHRyIGxpbmtzIGluIHRoZSBUeCBkZXNjcmlwdG9ycyByaW5nICovCi0JcF90eF9kZXNjID0gKHN0cnVjdCBldGhfdHhfZGVzYyAqKW1wLT5wX3R4X2Rlc2NfYXJlYTsKLQlmb3IgKGkgPSAwOyBpIDwgdHhfZGVzY19udW07IGkrKykgewotCQlwX3R4X2Rlc2NbaV0ubmV4dF9kZXNjX3B0ciA9IG1wLT50eF9kZXNjX2RtYSArCi0JCQkoKGkgKyAxKSAlIHR4X2Rlc2NfbnVtKSAqIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2Rlc2MpOwotCX0KLQotCW1wLT50eF9jdXJyX2Rlc2NfcSA9IDA7Ci0JbXAtPnR4X3VzZWRfZGVzY19xID0gMDsKLQotCW1wLT50eF9kZXNjX2FyZWFfc2l6ZSA9IHR4X2Rlc2NfbnVtICogc2l6ZW9mKHN0cnVjdCBldGhfdHhfZGVzYyk7Ci19Ci0KLXN0YXRpYyBpbnQgbXY2NDN4eF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCi17Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnI7Ci0KLQlzcGluX2xvY2tfaXJxKCZtcC0+bG9jayk7Ci0JZXJyID0gbWlpX2V0aHRvb2xfc3NldCgmbXAtPm1paSwgY21kKTsKLQlzcGluX3VubG9ja19pcnEoJm1wLT5sb2NrKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgbXY2NDN4eF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCi17Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnI7Ci0KLQlzcGluX2xvY2tfaXJxKCZtcC0+bG9jayk7Ci0JZXJyID0gbWlpX2V0aHRvb2xfZ3NldCgmbXAtPm1paSwgY21kKTsKLQlzcGluX3VubG9ja19pcnEoJm1wLT5sb2NrKTsKLQotCS8qIFRoZSBQSFkgbWF5IHN1cHBvcnQgMTAwMGJhc2VUX0hhbGYsIGJ1dCB0aGUgbXY2NDN4eCBkb2VzIG5vdCAqLwotCWNtZC0+c3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTAwMGJhc2VUX0hhbGY7Ci0JY21kLT5hZHZlcnRpc2luZyAmPSB+QURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZjsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBtdjY0M3h4X2V0aF9vcGVuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBvcGVubmluZyB0aGUgbmV0d29yayBkZXZpY2UuIFRoZSBmdW5jdGlvbgotICogc2hvdWxkIGluaXRpYWxpemUgYWxsIHRoZSBoYXJkd2FyZSwgaW5pdGlhbGl6ZSBjeWNsaWMgUngvVHgKLSAqIGRlc2NyaXB0b3JzIGNoYWluIGFuZCBidWZmZXJzIGFuZCBhbGxvY2F0ZSBhbiBJUlEgdG8gdGhlIG5ldHdvcmsKLSAqIGRldmljZS4KLSAqCi0gKiBJbnB1dCA6CWEgcG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogT3V0cHV0IDoJemVybyBvZiBzdWNjZXNzICwgbm9uemVybyBpZiBmYWlscy4KLSAqLwotCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwotCXVuc2lnbmVkIGludCBzaXplOwotCWludCBlcnI7Ci0KLQkvKiBDbGVhciBhbnkgcGVuZGluZyBldGhlcm5ldCBwb3J0IGludGVycnVwdHMgKi8KLQl3cmwobXAsIElOVEVSUlVQVF9DQVVTRV9SRUcocG9ydF9udW0pLCAwKTsKLQl3cmwobXAsIElOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHBvcnRfbnVtKSwgMCk7Ci0JLyogd2FpdCBmb3IgcHJldmlvdXMgd3JpdGUgdG8gY29tcGxldGUgKi8KLQlyZGwobXAsIElOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHBvcnRfbnVtKSk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgbXY2NDN4eF9ldGhfaW50X2hhbmRsZXIsCi0JCQlJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwgZGV2LT5uYW1lLCBkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuIG5vdCBhc3NpZ24gSVJRXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlldGhfcG9ydF9pbml0KG1wKTsKLQotCW1lbXNldCgmbXAtPnRpbWVvdXQsIDAsIHNpemVvZihzdHJ1Y3QgdGltZXJfbGlzdCkpOwotCW1wLT50aW1lb3V0LmZ1bmN0aW9uID0gbXY2NDN4eF9ldGhfcnhfcmVmaWxsX2Rlc2NzX3RpbWVyX3dyYXBwZXI7Ci0JbXAtPnRpbWVvdXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKLQotCS8qIEFsbG9jYXRlIFJYIGFuZCBUWCBza2IgcmluZ3MgKi8KLQltcC0+cnhfc2tiID0ga21hbGxvYyhzaXplb2YoKm1wLT5yeF9za2IpICogbXAtPnJ4X3Jpbmdfc2l6ZSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtcC0+cnhfc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBSeCBza2IgcmluZ1xuIiwgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV9pcnE7Ci0JfQotCW1wLT50eF9za2IgPSBrbWFsbG9jKHNpemVvZigqbXAtPnR4X3NrYikgKiBtcC0+dHhfcmluZ19zaXplLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIW1wLT50eF9za2IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIFR4IHNrYiByaW5nXG4iLCBkZXYtPm5hbWUpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3J4X3NrYjsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBUWCByaW5nICovCi0JbXAtPnR4X2Rlc2NfY291bnQgPSAwOwotCXNpemUgPSBtcC0+dHhfcmluZ19zaXplICogc2l6ZW9mKHN0cnVjdCBldGhfdHhfZGVzYyk7Ci0JbXAtPnR4X2Rlc2NfYXJlYV9zaXplID0gc2l6ZTsKLQotCWlmIChtcC0+dHhfc3JhbV9zaXplKSB7Ci0JCW1wLT5wX3R4X2Rlc2NfYXJlYSA9IGlvcmVtYXAobXAtPnR4X3NyYW1fYWRkciwKLQkJCQkJCQltcC0+dHhfc3JhbV9zaXplKTsKLQkJbXAtPnR4X2Rlc2NfZG1hID0gbXAtPnR4X3NyYW1fYWRkcjsKLQl9IGVsc2UKLQkJbXAtPnBfdHhfZGVzY19hcmVhID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIHNpemUsCi0JCQkJCQkJJm1wLT50eF9kZXNjX2RtYSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQotCWlmICghbXAtPnBfdHhfZGVzY19hcmVhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBUeCBSaW5nIChzaXplICVkIGJ5dGVzKVxuIiwKLQkJCQkJCQlkZXYtPm5hbWUsIHNpemUpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3R4X3NrYjsKLQl9Ci0JQlVHX09OKCh1MzIpIG1wLT5wX3R4X2Rlc2NfYXJlYSAmIDB4Zik7CS8qIGNoZWNrIDE2LWJ5dGUgYWxpZ25tZW50ICovCi0JbWVtc2V0KCh2b2lkICopbXAtPnBfdHhfZGVzY19hcmVhLCAwLCBtcC0+dHhfZGVzY19hcmVhX3NpemUpOwotCi0JZXRoZXJfaW5pdF90eF9kZXNjX3JpbmcobXApOwotCi0JLyogQWxsb2NhdGUgUlggcmluZyAqLwotCW1wLT5yeF9kZXNjX2NvdW50ID0gMDsKLQlzaXplID0gbXAtPnJ4X3Jpbmdfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgZXRoX3J4X2Rlc2MpOwotCW1wLT5yeF9kZXNjX2FyZWFfc2l6ZSA9IHNpemU7Ci0KLQlpZiAobXAtPnJ4X3NyYW1fc2l6ZSkgewotCQltcC0+cF9yeF9kZXNjX2FyZWEgPSBpb3JlbWFwKG1wLT5yeF9zcmFtX2FkZHIsCi0JCQkJCQkJbXAtPnJ4X3NyYW1fc2l6ZSk7Ci0JCW1wLT5yeF9kZXNjX2RtYSA9IG1wLT5yeF9zcmFtX2FkZHI7Ci0JfSBlbHNlCi0JCW1wLT5wX3J4X2Rlc2NfYXJlYSA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBzaXplLAotCQkJCQkJCSZtcC0+cnhfZGVzY19kbWEsCi0JCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIW1wLT5wX3J4X2Rlc2NfYXJlYSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgUnggcmluZyAoc2l6ZSAlZCBieXRlcylcbiIsCi0JCQkJCQkJZGV2LT5uYW1lLCBzaXplKTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRnJlZWluZyBwcmV2aW91c2x5IGFsbG9jYXRlZCBUWCBxdWV1ZXMuLi4iLAotCQkJCQkJCWRldi0+bmFtZSk7Ci0JCWlmIChtcC0+cnhfc3JhbV9zaXplKQotCQkJaW91bm1hcChtcC0+cF90eF9kZXNjX2FyZWEpOwotCQllbHNlCi0JCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBtcC0+dHhfZGVzY19hcmVhX3NpemUsCi0JCQkJCW1wLT5wX3R4X2Rlc2NfYXJlYSwgbXAtPnR4X2Rlc2NfZG1hKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV90eF9za2I7Ci0JfQotCW1lbXNldCgodm9pZCAqKW1wLT5wX3J4X2Rlc2NfYXJlYSwgMCwgc2l6ZSk7Ci0KLQlldGhlcl9pbml0X3J4X2Rlc2NfcmluZyhtcCk7Ci0KLQltdjY0M3h4X2V0aF9yeF9yZWZpbGxfZGVzY3MoZGV2KTsJLyogRmlsbCBSWCByaW5nIHdpdGggc2tiJ3MgKi8KLQotI2lmZGVmIE1WNjQzWFhfTkFQSQotCW5hcGlfZW5hYmxlKCZtcC0+bmFwaSk7Ci0jZW5kaWYKLQotCWV0aF9wb3J0X3N0YXJ0KGRldik7Ci0KLQkvKiBJbnRlcnJ1cHQgQ29hbGVzY2luZyAqLwotCi0jaWZkZWYgTVY2NDNYWF9DT0FMCi0JbXAtPnJ4X2ludF9jb2FsID0KLQkJZXRoX3BvcnRfc2V0X3J4X2NvYWwobXAsIE1WNjQzWFhfUlhfQ09BTCk7Ci0jZW5kaWYKLQotCW1wLT50eF9pbnRfY29hbCA9Ci0JCWV0aF9wb3J0X3NldF90eF9jb2FsKG1wLCBNVjY0M1hYX1RYX0NPQUwpOwotCi0JLyogVW5tYXNrIHBoeSBhbmQgbGluayBzdGF0dXMgY2hhbmdlcyBpbnRlcnJ1cHRzICovCi0Jd3JsKG1wLCBJTlRFUlJVUFRfRVhURU5EX01BU0tfUkVHKHBvcnRfbnVtKSwgRVRIX0lOVF9VTk1BU0tfQUxMX0VYVCk7Ci0KLQkvKiBVbm1hc2sgUlggYnVmZmVyIGFuZCBUWCBlbmQgaW50ZXJydXB0ICovCi0Jd3JsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pLCBFVEhfSU5UX1VOTUFTS19BTEwpOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9mcmVlX3R4X3NrYjoKLQlrZnJlZShtcC0+dHhfc2tiKTsKLW91dF9mcmVlX3J4X3NrYjoKLQlrZnJlZShtcC0+cnhfc2tiKTsKLW91dF9mcmVlX2lycToKLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2ZyZWVfdHhfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkvKiBTdG9wIFR4IFF1ZXVlcyAqLwotCW12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV90eChtcCk7Ci0KLQkvKiBGcmVlIG91dHN0YW5kaW5nIHNrYidzIG9uIFRYIHJpbmcgKi8KLQltdjY0M3h4X2V0aF9mcmVlX2FsbF90eF9kZXNjcyhkZXYpOwotCi0JQlVHX09OKG1wLT50eF91c2VkX2Rlc2NfcSAhPSBtcC0+dHhfY3Vycl9kZXNjX3EpOwotCi0JLyogRnJlZSBUWCByaW5nICovCi0JaWYgKG1wLT50eF9zcmFtX3NpemUpCi0JCWlvdW5tYXAobXAtPnBfdHhfZGVzY19hcmVhKTsKLQllbHNlCi0JCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIG1wLT50eF9kZXNjX2FyZWFfc2l6ZSwKLQkJCQltcC0+cF90eF9kZXNjX2FyZWEsIG1wLT50eF9kZXNjX2RtYSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2ZyZWVfcnhfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGN1cnI7Ci0KLQkvKiBTdG9wIFJYIFF1ZXVlcyAqLwotCW12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV9yeChtcCk7Ci0KLQkvKiBGcmVlIHByZWFsbG9jYXRlZCBza2IncyBvbiBSWCByaW5ncyAqLwotCWZvciAoY3VyciA9IDA7IG1wLT5yeF9kZXNjX2NvdW50ICYmIGN1cnIgPCBtcC0+cnhfcmluZ19zaXplOyBjdXJyKyspIHsKLQkJaWYgKG1wLT5yeF9za2JbY3Vycl0pIHsKLQkJCWRldl9rZnJlZV9za2IobXAtPnJ4X3NrYltjdXJyXSk7Ci0JCQltcC0+cnhfZGVzY19jb3VudC0tOwotCQl9Ci0JfQotCi0JaWYgKG1wLT5yeF9kZXNjX2NvdW50KQotCQlwcmludGsoS0VSTl9FUlIKLQkJCSIlczogRXJyb3IgaW4gZnJlZWluZyBSeCBSaW5nLiAlZCBza2IncyBzdGlsbCIKLQkJCSIgc3R1Y2sgaW4gUlggUmluZyAtIGlnbm9yaW5nIHRoZW1cbiIsIGRldi0+bmFtZSwKLQkJCW1wLT5yeF9kZXNjX2NvdW50KTsKLQkvKiBGcmVlIFJYIHJpbmcgKi8KLQlpZiAobXAtPnJ4X3NyYW1fc2l6ZSkKLQkJaW91bm1hcChtcC0+cF9yeF9kZXNjX2FyZWEpOwotCWVsc2UKLQkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgbXAtPnJ4X2Rlc2NfYXJlYV9zaXplLAotCQkJCW1wLT5wX3J4X2Rlc2NfYXJlYSwgbXAtPnJ4X2Rlc2NfZG1hKTsKLX0KLQotLyoKLSAqIG12NjQzeHhfZXRoX3N0b3AKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBjbG9zaW5nIHRoZSBuZXR3b3JrIGRldmljZS4KLSAqIEl0IHVwZGF0ZXMgdGhlIGhhcmR3YXJlLAotICogcmVsZWFzZSBhbGwgbWVtb3J5IHRoYXQgaG9sZHMgYnVmZmVycyBhbmQgZGVzY3JpcHRvcnMgYW5kIHJlbGVhc2UgdGhlIElSUS4KLSAqIElucHV0IDoJYSBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCi0gKiBPdXRwdXQgOgl6ZXJvIGlmIHN1Y2Nlc3MgLCBub256ZXJvIGlmIGZhaWxzCi0gKi8KLQotc3RhdGljIGludCBtdjY0M3h4X2V0aF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKLQotCS8qIE1hc2sgYWxsIGludGVycnVwdHMgb24gZXRoZXJuZXQgcG9ydCAqLwotCXdybChtcCwgSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgRVRIX0lOVF9NQVNLX0FMTCk7Ci0JLyogd2FpdCBmb3IgcHJldmlvdXMgd3JpdGUgdG8gY29tcGxldGUgKi8KLQlyZGwobXAsIElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSkpOwotCi0jaWZkZWYgTVY2NDNYWF9OQVBJCi0JbmFwaV9kaXNhYmxlKCZtcC0+bmFwaSk7Ci0jZW5kaWYKLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCWV0aF9wb3J0X3Jlc2V0KG1wKTsKLQotCW12NjQzeHhfZXRoX2ZyZWVfdHhfcmluZ3MoZGV2KTsKLQltdjY0M3h4X2V0aF9mcmVlX3J4X3JpbmdzKGRldik7Ci0KLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgTVY2NDNYWF9OQVBJCi0vKgotICogbXY2NDN4eF9wb2xsCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNhc2Ugb2YgTkFQSQotICovCi1zdGF0aWMgaW50IG12NjQzeHhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCi17Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IG12NjQzeHhfcHJpdmF0ZSwgbmFwaSk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1wLT5kZXY7Ci0JdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwotCWludCB3b3JrX2RvbmU7Ci0KLSNpZmRlZiBNVjY0M1hYX1RYX0ZBU1RfUkVGSUxMCisjaWZkZWYgTVY2NDNYWF9FVEhfVFhfRkFTVF9SRUZJTEwKIAlpZiAoKyttcC0+dHhfY2xlYW5fdGhyZXNob2xkID4gNSkgewotCQltdjY0M3h4X2V0aF9mcmVlX2NvbXBsZXRlZF90eF9kZXNjcyhkZXYpOwogCQltcC0+dHhfY2xlYW5fdGhyZXNob2xkID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWlmIChtcC0+dHhxX21hc2sgJiAoMSA8PCBpKSkKKwkJCQl0eHFfcmVjbGFpbShtcC0+dHhxICsgaSwgMCk7CiAJfQogI2VuZGlmCiAKLQl3b3JrX2RvbmUgPSAwOwotCWlmICgocmRsKG1wLCBSWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzAocG9ydF9udW0pKSkKLQkgICAgIT0gKHUzMikgbXAtPnJ4X3VzZWRfZGVzY19xKQotCQl3b3JrX2RvbmUgPSBtdjY0M3h4X2V0aF9yZWNlaXZlX3F1ZXVlKGRldiwgYnVkZ2V0KTsKKwlyeCA9IDA7CisJZm9yIChpID0gNzsgcnggPCBidWRnZXQgJiYgaSA+PSAwOyBpLS0pCisJCWlmIChtcC0+cnhxX21hc2sgJiAoMSA8PCBpKSkKKwkJCXJ4ICs9IHJ4cV9wcm9jZXNzKG1wLT5yeHEgKyBpLCBidWRnZXQgLSByeCk7CiAKLQlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKGRldiwgbmFwaSk7Ci0JCXdybChtcCwgSU5URVJSVVBUX0NBVVNFX1JFRyhwb3J0X251bSksIDApOwotCQl3cmwobXAsIElOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHBvcnRfbnVtKSwgMCk7Ci0JCXdybChtcCwgSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgRVRIX0lOVF9VTk1BU0tfQUxMKTsKKwlpZiAocnggPCBidWRnZXQpIHsKKwkJbmV0aWZfcnhfY29tcGxldGUobXAtPmRldiwgbmFwaSk7CisJCXdybChtcCwgSU5UX0NBVVNFKG1wLT5wb3J0X251bSksIDApOworCQl3cmwobXAsIElOVF9DQVVTRV9FWFQobXAtPnBvcnRfbnVtKSwgMCk7CisJCXdybChtcCwgSU5UX01BU0sobXAtPnBvcnRfbnVtKSwgSU5UX1RYX0VORCB8IElOVF9SWCB8IElOVF9FWFQpOwogCX0KIAotCXJldHVybiB3b3JrX2RvbmU7CisJcmV0dXJuIHJ4OwogfQogI2VuZGlmCiAKLS8qKgotICogaGFzX3RpbnlfdW5hbGlnbmVkX2ZyYWdzIC0gY2hlY2sgaWYgc2tiIGhhcyBhbnkgc21hbGwsIHVuYWxpZ25lZCBmcmFnbWVudHMKLSAqCi0gKiBIYXJkd2FyZSBjYW4ndCBoYW5kbGUgdW5hbGlnbmVkIGZyYWdtZW50cyBzbWFsbGVyIHRoYW4gOSBieXRlcy4KLSAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGRldGVjdHMgdGhhdCBjYXNlLgotICovCiAKKy8qIHR4ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaGFzX3RpbnlfdW5hbGlnbmVkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JdW5zaWduZWQgaW50IGZyYWc7Ci0Jc2tiX2ZyYWdfdCAqZnJhZ3A7CisJaW50IGZyYWc7CiAKIAlmb3IgKGZyYWcgPSAwOyBmcmFnIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgZnJhZysrKSB7Ci0JCWZyYWdwID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZnJhZ107Ci0JCWlmIChmcmFncC0+c2l6ZSA8PSA4ICYmIGZyYWdwLT5wYWdlX29mZnNldCAmIDB4NykKKwkJc2tiX2ZyYWdfdCAqZnJhZ3AgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmcmFnXTsKKwkJaWYgKGZyYWdwLT5zaXplIDw9IDggJiYgZnJhZ3AtPnBhZ2Vfb2Zmc2V0ICYgNykKIAkJCXJldHVybiAxOwogCX0KKwogCXJldHVybiAwOwogfQogCi0vKioKLSAqIGV0aF9hbGxvY190eF9kZXNjX2luZGV4IC0gcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBhdmFpbGFibGUgdHggZGVzYwotICovCi1zdGF0aWMgaW50IGV0aF9hbGxvY190eF9kZXNjX2luZGV4KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKQorc3RhdGljIGludCB0eHFfYWxsb2NfZGVzY19pbmRleChzdHJ1Y3QgdHhfcXVldWUgKnR4cSkKIHsKIAlpbnQgdHhfZGVzY19jdXJyOwogCi0JQlVHX09OKG1wLT50eF9kZXNjX2NvdW50ID49IG1wLT50eF9yaW5nX3NpemUpOworCUJVR19PTih0eHEtPnR4X2Rlc2NfY291bnQgPj0gdHhxLT50eF9yaW5nX3NpemUpOwogCi0JdHhfZGVzY19jdXJyID0gbXAtPnR4X2N1cnJfZGVzY19xOwotCW1wLT50eF9jdXJyX2Rlc2NfcSA9ICh0eF9kZXNjX2N1cnIgKyAxKSAlIG1wLT50eF9yaW5nX3NpemU7CisJdHhfZGVzY19jdXJyID0gdHhxLT50eF9jdXJyX2Rlc2M7CisJdHhxLT50eF9jdXJyX2Rlc2MgPSAodHhfZGVzY19jdXJyICsgMSkgJSB0eHEtPnR4X3Jpbmdfc2l6ZTsKIAotCUJVR19PTihtcC0+dHhfY3Vycl9kZXNjX3EgPT0gbXAtPnR4X3VzZWRfZGVzY19xKTsKKwlCVUdfT04odHhxLT50eF9jdXJyX2Rlc2MgPT0gdHhxLT50eF91c2VkX2Rlc2MpOwogCiAJcmV0dXJuIHR4X2Rlc2NfY3VycjsKIH0KIAotLyoqCi0gKiBldGhfdHhfZmlsbF9mcmFnX2Rlc2NzIC0gZmlsbCB0eCBodyBkZXNjcmlwdG9ycyBmb3IgYW4gc2tiJ3MgZnJhZ21lbnRzLgotICoKLSAqIEVuc3VyZSB0aGUgZGF0YSBmb3IgZWFjaCBmcmFnbWVudCB0byBiZSB0cmFuc21pdHRlZCBpcyBtYXBwZWQgcHJvcGVybHksCi0gKiB0aGVuIGZpbGwgaW4gZGVzY3JpcHRvcnMgaW4gdGhlIHR4IGh3IHF1ZXVlLgotICovCi1zdGF0aWMgdm9pZCBldGhfdHhfZmlsbF9mcmFnX2Rlc2NzKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCB0eHFfc3VibWl0X2ZyYWdfc2tiKHN0cnVjdCB0eF9xdWV1ZSAqdHhxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCWludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJaW50IGZyYWc7Ci0JaW50IHR4X2luZGV4OwotCXN0cnVjdCBldGhfdHhfZGVzYyAqZGVzYzsKIAotCWZvciAoZnJhZyA9IDA7IGZyYWcgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBmcmFnKyspIHsKLQkJc2tiX2ZyYWdfdCAqdGhpc19mcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZnJhZ107CisJZm9yIChmcmFnID0gMDsgZnJhZyA8IG5yX2ZyYWdzOyBmcmFnKyspIHsKKwkJc2tiX2ZyYWdfdCAqdGhpc19mcmFnOworCQlpbnQgdHhfaW5kZXg7CisJCXN0cnVjdCB0eF9kZXNjICpkZXNjOwogCi0JCXR4X2luZGV4ID0gZXRoX2FsbG9jX3R4X2Rlc2NfaW5kZXgobXApOwotCQlkZXNjID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9pbmRleF07CisJCXRoaXNfZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZyYWddOworCQl0eF9pbmRleCA9IHR4cV9hbGxvY19kZXNjX2luZGV4KHR4cSk7CisJCWRlc2MgPSAmdHhxLT50eF9kZXNjX2FyZWFbdHhfaW5kZXhdOwogCi0JCWRlc2MtPmNtZF9zdHMgPSBFVEhfQlVGRkVSX09XTkVEX0JZX0RNQTsKLQkJLyogTGFzdCBGcmFnIGVuYWJsZXMgaW50ZXJydXB0IGFuZCBmcmVlcyB0aGUgc2tiICovCi0JCWlmIChmcmFnID09IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gMSkpIHsKLQkJCWRlc2MtPmNtZF9zdHMgfD0gRVRIX1pFUk9fUEFERElORyB8Ci0JCQkJCSBFVEhfVFhfTEFTVF9ERVNDIHwKLQkJCQkJIEVUSF9UWF9FTkFCTEVfSU5URVJSVVBUOwotCQkJbXAtPnR4X3NrYlt0eF9pbmRleF0gPSBza2I7Ci0JCX0gZWxzZQotCQkJbXAtPnR4X3NrYlt0eF9pbmRleF0gPSBOVUxMOworCQkvKgorCQkgKiBUaGUgbGFzdCBmcmFnbWVudCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdAorCQkgKiB3aGljaCB3aWxsIGZyZWUgdGhlIHNrYiBvbiBUWCBjb21wbGV0aW9uLgorCQkgKi8KKwkJaWYgKGZyYWcgPT0gbnJfZnJhZ3MgLSAxKSB7CisJCQlkZXNjLT5jbWRfc3RzID0gQlVGRkVSX09XTkVEX0JZX0RNQSB8CisJCQkJCVpFUk9fUEFERElORyB8IFRYX0xBU1RfREVTQyB8CisJCQkJCVRYX0VOQUJMRV9JTlRFUlJVUFQ7CisJCQl0eHEtPnR4X3NrYlt0eF9pbmRleF0gPSBza2I7CisJCX0gZWxzZSB7CisJCQlkZXNjLT5jbWRfc3RzID0gQlVGRkVSX09XTkVEX0JZX0RNQTsKKwkJCXR4cS0+dHhfc2tiW3R4X2luZGV4XSA9IE5VTEw7CisJCX0KIAotCQlkZXNjID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9pbmRleF07CiAJCWRlc2MtPmw0aV9jaGsgPSAwOwogCQlkZXNjLT5ieXRlX2NudCA9IHRoaXNfZnJhZy0+c2l6ZTsKIAkJZGVzYy0+YnVmX3B0ciA9IGRtYV9tYXBfcGFnZShOVUxMLCB0aGlzX2ZyYWctPnBhZ2UsCkBAIC0xNjUxLDM3ICs3MDQsMjggQEAKIAlyZXR1cm4gKF9fZm9yY2UgX19iZTE2KXN1bTsKIH0KIAotLyoqCi0gKiBldGhfdHhfc3VibWl0X2Rlc2NzX2Zvcl9za2IgLSBzdWJtaXQgZGF0YSBmcm9tIGFuIHNrYiB0byB0aGUgdHggaHcKLSAqCi0gKiBFbnN1cmUgdGhlIGRhdGEgZm9yIGFuIHNrYiB0byBiZSB0cmFuc21pdHRlZCBpcyBtYXBwZWQgcHJvcGVybHksCi0gKiB0aGVuIGZpbGwgaW4gZGVzY3JpcHRvcnMgaW4gdGhlIHR4IGh3IHF1ZXVlIGFuZCBzdGFydCB0aGUgaGFyZHdhcmUuCi0gKi8KLXN0YXRpYyB2b2lkIGV0aF90eF9zdWJtaXRfZGVzY3NfZm9yX3NrYihzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHR4cV9zdWJtaXRfc2tiKHN0cnVjdCB0eF9xdWV1ZSAqdHhxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCWludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJaW50IHR4X2luZGV4OwotCXN0cnVjdCBldGhfdHhfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgdHhfZGVzYyAqZGVzYzsKIAl1MzIgY21kX3N0czsKIAlpbnQgbGVuZ3RoOwotCWludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAKLQljbWRfc3RzID0gRVRIX1RYX0ZJUlNUX0RFU0MgfCBFVEhfR0VOX0NSQyB8IEVUSF9CVUZGRVJfT1dORURfQllfRE1BOworCWNtZF9zdHMgPSBUWF9GSVJTVF9ERVNDIHwgR0VOX0NSQyB8IEJVRkZFUl9PV05FRF9CWV9ETUE7CiAKLQl0eF9pbmRleCA9IGV0aF9hbGxvY190eF9kZXNjX2luZGV4KG1wKTsKLQlkZXNjID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9pbmRleF07CisJdHhfaW5kZXggPSB0eHFfYWxsb2NfZGVzY19pbmRleCh0eHEpOworCWRlc2MgPSAmdHhxLT50eF9kZXNjX2FyZWFbdHhfaW5kZXhdOwogCiAJaWYgKG5yX2ZyYWdzKSB7Ci0JCWV0aF90eF9maWxsX2ZyYWdfZGVzY3MobXAsIHNrYik7CisJCXR4cV9zdWJtaXRfZnJhZ19za2IodHhxLCBza2IpOwogCiAJCWxlbmd0aCA9IHNrYl9oZWFkbGVuKHNrYik7Ci0JCW1wLT50eF9za2JbdHhfaW5kZXhdID0gTlVMTDsKKwkJdHhxLT50eF9za2JbdHhfaW5kZXhdID0gTlVMTDsKIAl9IGVsc2UgewotCQljbWRfc3RzIHw9IEVUSF9aRVJPX1BBRERJTkcgfAotCQkJICAgRVRIX1RYX0xBU1RfREVTQyB8Ci0JCQkgICBFVEhfVFhfRU5BQkxFX0lOVEVSUlVQVDsKKwkJY21kX3N0cyB8PSBaRVJPX1BBRERJTkcgfCBUWF9MQVNUX0RFU0MgfCBUWF9FTkFCTEVfSU5URVJSVVBUOwogCQlsZW5ndGggPSBza2ItPmxlbjsKLQkJbXAtPnR4X3NrYlt0eF9pbmRleF0gPSBza2I7CisJCXR4cS0+dHhfc2tiW3R4X2luZGV4XSA9IHNrYjsKIAl9CiAKIAlkZXNjLT5ieXRlX2NudCA9IGxlbmd0aDsKQEAgLTE2OTAsMTMgKzczNCwxMyBAQAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCUJVR19PTihza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSk7CiAKLQkJY21kX3N0cyB8PSBFVEhfR0VOX1RDUF9VRFBfQ0hFQ0tTVU0gfAotCQkJICAgRVRIX0dFTl9JUF9WXzRfQ0hFQ0tTVU0gIHwKLQkJCSAgIGlwX2hkcihza2IpLT5paGwgPDwgRVRIX1RYX0lITF9TSElGVDsKKwkJY21kX3N0cyB8PSBHRU5fVENQX1VEUF9DSEVDS1NVTSB8CisJCQkgICBHRU5fSVBfVjRfQ0hFQ0tTVU0gICB8CisJCQkgICBpcF9oZHIoc2tiKS0+aWhsIDw8IFRYX0lITF9TSElGVDsKIAogCQlzd2l0Y2ggKGlwX2hkcihza2IpLT5wcm90b2NvbCkgewogCQljYXNlIElQUFJPVE9fVURQOgotCQkJY21kX3N0cyB8PSBFVEhfVURQX0ZSQU1FOworCQkJY21kX3N0cyB8PSBVRFBfRlJBTUU7CiAJCQlkZXNjLT5sNGlfY2hrID0gbnRvaHMoc3VtMTZfYXNfYmUodWRwX2hkcihza2IpLT5jaGVjaykpOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBQUk9UT19UQ1A6CkBAIC0xNzA3LDcgKzc1MSw3IEBACiAJCX0KIAl9IGVsc2UgewogCQkvKiBFcnJhdGEgQlRTICM1MCwgSUhMIG11c3QgYmUgNSBpZiBubyBIVyBjaGVja3N1bSAqLwotCQljbWRfc3RzIHw9IDUgPDwgRVRIX1RYX0lITF9TSElGVDsKKwkJY21kX3N0cyB8PSA1IDw8IFRYX0lITF9TSElGVDsKIAkJZGVzYy0+bDRpX2NoayA9IDA7CiAJfQogCkBAIC0xNzE3LDMwMSArNzYxLDEzODQgQEAKIAogCS8qIGVuc3VyZSBhbGwgZGVzY3JpcHRvcnMgYXJlIHdyaXR0ZW4gYmVmb3JlIHBva2luZyBoYXJkd2FyZSAqLwogCXdtYigpOwotCW12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3R4KG1wLCBFVEhfVFhfUVVFVUVTX0VOQUJMRUQpOworCXR4cV9lbmFibGUodHhxKTsKIAotCW1wLT50eF9kZXNjX2NvdW50ICs9IG5yX2ZyYWdzICsgMTsKKwl0eHEtPnR4X2Rlc2NfY291bnQgKz0gbnJfZnJhZ3MgKyAxOwogfQogCi0vKioKLSAqIG12NjQzeHhfZXRoX3N0YXJ0X3htaXQgLSBxdWV1ZSBhbiBza2IgdG8gdGhlIGhhcmR3YXJlIGZvciB0cmFuc21pc3Npb24KLSAqCi0gKi8KLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBtdjY0M3h4X2V0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CisJc3RydWN0IHR4X3F1ZXVlICp0eHE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUJVR19PTihuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpOwotCiAJaWYgKGhhc190aW55X3VuYWxpZ25lZF9mcmFncyhza2IpICYmIF9fc2tiX2xpbmVhcml6ZShza2IpKSB7CiAJCXN0YXRzLT50eF9kcm9wcGVkKys7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGxpbmVhcml6ZSB0aW55ICIKLQkJCQkidW5hbGlnbmVkIGZyYWdtZW50XG4iLCBkZXYtPm5hbWUpOworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJCSAgICJmYWlsZWQgdG8gbGluZWFyaXplIHNrYiB3aXRoIHRpbnkgIgorCQkJICAgInVuYWxpZ25lZCBmcmFnbWVudFxuIik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXAtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChtcC0+dHhfcmluZ19zaXplIC0gbXAtPnR4X2Rlc2NfY291bnQgPCBNQVhfREVTQ1NfUEVSX1NLQikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0cmFuc21pdCB3aXRoIHF1ZXVlIGZ1bGxcbiIsIGRldi0+bmFtZSk7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl0eHEgPSBtcC0+dHhxICsgbXAtPnR4cV9wcmltYXJ5OworCisJaWYgKHR4cS0+dHhfcmluZ19zaXplIC0gdHhxLT50eF9kZXNjX2NvdW50IDwgTUFYX0RFU0NTX1BFUl9TS0IpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQlpZiAodHhxLT5pbmRleCA9PSBtcC0+dHhxX3ByaW1hcnkgJiYgbmV0X3JhdGVsaW1pdCgpKQorCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmRldi0+ZGV2LAorCQkJCSAgICJwcmltYXJ5IHR4IHF1ZXVlIGZ1bGw/IVxuIik7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAotCWV0aF90eF9zdWJtaXRfZGVzY3NfZm9yX3NrYihtcCwgc2tiKTsKKwl0eHFfc3VibWl0X3NrYih0eHEsIHNrYik7CiAJc3RhdHMtPnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCXN0YXRzLT50eF9wYWNrZXRzKys7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlpZiAobXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50IDwgTUFYX0RFU0NTX1BFUl9TS0IpCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlpZiAodHhxLT5pbmRleCA9PSBtcC0+dHhxX3ByaW1hcnkpIHsKKwkJaW50IGVudHJpZXNfbGVmdDsKKworCQllbnRyaWVzX2xlZnQgPSB0eHEtPnR4X3Jpbmdfc2l6ZSAtIHR4cS0+dHhfZGVzY19jb3VudDsKKwkJaWYgKGVudHJpZXNfbGVmdCA8IE1BWF9ERVNDU19QRVJfU0tCKQorCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLXN0YXRpYyB2b2lkIG12NjQzeHhfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgcG9ydF9udW0gPSBtcC0+cG9ydF9udW07CiAKLQl3cmwobXAsIElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSksIEVUSF9JTlRfTUFTS19BTEwpOwotCS8qIHdhaXQgZm9yIHByZXZpb3VzIHdyaXRlIHRvIGNvbXBsZXRlICovCi0JcmRsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pKTsKLQotCW12NjQzeHhfZXRoX2ludF9oYW5kbGVyKG5ldGRldi0+aXJxLCBuZXRkZXYpOwotCi0Jd3JsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pLCBFVEhfSU5UX1VOTUFTS19BTEwpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIG12NjQzeHhfaW5pdF9ldGh0b29sX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHJlc3MsCi0JCQkJICAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsCi0JCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOwotCi0JY21kLT5wb3J0ID0gUE9SVF9NSUk7Ci0JY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7Ci0JY21kLT5waHlfYWRkcmVzcyA9IHBoeV9hZGRyZXNzOwotCi0JaWYgKHNwZWVkID09IDApIHsKLQkJY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCS8qIG1paSBsaWIgY2hlY2tzLCBidXQgZG9lc24ndCB1c2Ugc3BlZWQgb24gQVVUT05FR19FTkFCTEUgKi8KLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKLQkJY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmICB8Ci0JCQkJICAgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgIHwKLQkJCQkgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAotCQkJCSAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKLQkJaWYgKG1wLT5taWkuc3VwcG9ydHNfZ21paSkKLQkJCWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKLQl9IGVsc2UgewotCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JCWNtZC0+c3BlZWQgPSBzcGVlZDsKLQkJY21kLT5kdXBsZXggPSBkdXBsZXg7Ci0JfQotfQotCi0vKi8KLSAqIG12NjQzeHhfZXRoX3Byb2JlCi0gKgotICogRmlyc3QgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIHJlZ2lzdGVyaW5nIHRoZSBuZXR3b3JrIGRldmljZS4KLSAqIEl0J3MgcHVycG9zZSBpcyB0byBpbml0aWFsaXplIHRoZSBkZXZpY2UgYXMgYW4gZXRoZXJuZXQgZGV2aWNlLAotICogZmlsbCB0aGUgZXRoZXJuZXQgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIHBvaW50ZXJzICogdG8gZnVuY3Rpb25zLAotICogYW5kIHNldCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZQotICoKLSAqIElucHV0IDoJc3RydWN0IGRldmljZSAqCi0gKiBPdXRwdXQgOgktRU5PTUVNIGlmIGZhaWxlZCAsIDAgaWYgc3VjY2VzcworLyogdHggcmF0ZSBjb250cm9sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU2V0IHRvdGFsIG1heGltdW0gVFggcmF0ZSAoc2hhcmVkIGJ5IGFsbCBUWCBxdWV1ZXMgZm9yIHRoaXMgcG9ydCkKKyAqIHRvICdyYXRlJyBiaXRzIHBlciBzZWNvbmQsIHdpdGggYSBtYXhpbXVtIGJ1cnN0IG9mICdidXJzdCcgYnl0ZXMuCiAgKi8KLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyB2b2lkIHR4X3NldF9yYXRlKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgaW50IHJhdGUsIGludCBidXJzdCkKIHsKLQlzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqcGQ7Ci0JaW50IHBvcnRfbnVtOwotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JdTggKnA7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOwotCWludCBkdXBsZXggPSBEVVBMRVhfSEFMRjsKLQlpbnQgc3BlZWQgPSAwOwkJCS8qIGRlZmF1bHQgdG8gYXV0by1uZWdvdGlhdGlvbiAqLwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCWludCB0b2tlbl9yYXRlOworCWludCBtdHU7CisJaW50IGJ1Y2tldF9zaXplOwogCi0JcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpZiAocGQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIk5vIG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGFcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwl0b2tlbl9yYXRlID0gKChyYXRlIC8gMTAwMCkgKiA2NCkgLyAobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwKTsKKwlpZiAodG9rZW5fcmF0ZSA+IDEwMjMpCisJCXRva2VuX3JhdGUgPSAxMDIzOworCisJbXR1ID0gKG1wLT5kZXYtPm10dSArIDI1NSkgPj4gODsKKwlpZiAobXR1ID4gNjMpCisJCW10dSA9IDYzOworCisJYnVja2V0X3NpemUgPSAoYnVyc3QgKyAyNTUpID4+IDg7CisJaWYgKGJ1Y2tldF9zaXplID4gNjU1MzUpCisJCWJ1Y2tldF9zaXplID0gNjU1MzU7CisKKwlpZiAobXAtPnNoYXJlZC0+dHhfYndfY29udHJvbF9tb3ZlZCkgeworCQl3cmwobXAsIFRYX0JXX1JBVEVfTU9WRUQobXAtPnBvcnRfbnVtKSwgdG9rZW5fcmF0ZSk7CisJCXdybChtcCwgVFhfQldfTVRVX01PVkVEKG1wLT5wb3J0X251bSksIG10dSk7CisJCXdybChtcCwgVFhfQldfQlVSU1RfTU9WRUQobXAtPnBvcnRfbnVtKSwgYnVja2V0X3NpemUpOworCX0gZWxzZSB7CisJCXdybChtcCwgVFhfQldfUkFURShtcC0+cG9ydF9udW0pLCB0b2tlbl9yYXRlKTsKKwkJd3JsKG1wLCBUWF9CV19NVFUobXAtPnBvcnRfbnVtKSwgbXR1KTsKKwkJd3JsKG1wLCBUWF9CV19CVVJTVChtcC0+cG9ydF9udW0pLCBidWNrZXRfc2l6ZSk7CiAJfQorfQogCi0JaWYgKHBkLT5zaGFyZWQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIk5vIG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEtPnNoYXJlZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KK3N0YXRpYyB2b2lkIHR4cV9zZXRfcmF0ZShzdHJ1Y3QgdHhfcXVldWUgKnR4cSwgaW50IHJhdGUsIGludCBidXJzdCkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSB0eHFfdG9fbXAodHhxKTsKKwlpbnQgdG9rZW5fcmF0ZTsKKwlpbnQgYnVja2V0X3NpemU7CiAKLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSkpOwotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKKwl0b2tlbl9yYXRlID0gKChyYXRlIC8gMTAwMCkgKiA2NCkgLyAobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwKTsKKwlpZiAodG9rZW5fcmF0ZSA+IDEwMjMpCisJCXRva2VuX3JhdGUgPSAxMDIzOwogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlidWNrZXRfc2l6ZSA9IChidXJzdCArIDI1NSkgPj4gODsKKwlpZiAoYnVja2V0X3NpemUgPiA2NTUzNSkKKwkJYnVja2V0X3NpemUgPSA2NTUzNTsKIAotCW1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQltcC0+ZGV2ID0gZGV2OwotI2lmZGVmIE1WNjQzWFhfTkFQSQotCW5ldGlmX25hcGlfYWRkKGRldiwgJm1wLT5uYXBpLCBtdjY0M3h4X3BvbGwsIDY0KTsKLSNlbmRpZgorCXdybChtcCwgVFhRX0JXX1RPS0VOUyhtcC0+cG9ydF9udW0sIHR4cS0+aW5kZXgpLCB0b2tlbl9yYXRlIDw8IDE0KTsKKwl3cmwobXAsIFRYUV9CV19DT05GKG1wLT5wb3J0X251bSwgdHhxLT5pbmRleCksCisJCQkoYnVja2V0X3NpemUgPDwgMTApIHwgdG9rZW5fcmF0ZSk7Cit9CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwotCUJVR19PTighcmVzKTsKLQlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CitzdGF0aWMgdm9pZCB0eHFfc2V0X2ZpeGVkX3ByaW9fbW9kZShzdHJ1Y3QgdHhfcXVldWUgKnR4cSkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSB0eHFfdG9fbXAodHhxKTsKKwlpbnQgb2ZmOworCXUzMiB2YWw7CiAKLQlkZXYtPm9wZW4gPSBtdjY0M3h4X2V0aF9vcGVuOwotCWRldi0+c3RvcCA9IG12NjQzeHhfZXRoX3N0b3A7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtdjY0M3h4X2V0aF9zdGFydF94bWl0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gbXY2NDN4eF9ldGhfc2V0X21hY19hZGRyZXNzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbXY2NDN4eF9ldGhfc2V0X3J4X21vZGU7Ci0KLQkvKiBObyBuZWVkIHRvIFR4IFRpbWVvdXQgKi8KLQlkZXYtPnR4X3RpbWVvdXQgPSBtdjY0M3h4X2V0aF90eF90aW1lb3V0OwotCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IG12NjQzeHhfbmV0cG9sbDsKLSNlbmRpZgotCi0JZGV2LT53YXRjaGRvZ190aW1lbyA9IDIgKiBIWjsKLQlkZXYtPmJhc2VfYWRkciA9IDA7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gbXY2NDN4eF9ldGhfY2hhbmdlX210dTsKLQlkZXYtPmRvX2lvY3RsID0gbXY2NDN4eF9ldGhfZG9faW9jdGw7Ci0JU0VUX0VUSFRPT0xfT1BTKGRldiwgJm12NjQzeHhfZXRodG9vbF9vcHMpOwotCi0jaWZkZWYgTVY2NDNYWF9DSEVDS1NVTV9PRkZMT0FEX1RYCi0jaWZkZWYgTUFYX1NLQl9GUkFHUwogCS8qCi0JICogWmVybyBjb3B5IGNhbiBvbmx5IHdvcmsgaWYgd2UgdXNlIERpc2NvdmVyeSBJSSBtZW1vcnkuIEVsc2UsIHdlIHdpbGwKLQkgKiBoYXZlIHRvIG1hcCB0aGUgYnVmZmVycyB0byBJU0EgbWVtb3J5IHdoaWNoIGlzIG9ubHkgMTYgTUIKKwkgKiBUdXJuIG9uIGZpeGVkIHByaW9yaXR5IG1vZGUuCiAJICovCi0JZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU07Ci0jZW5kaWYKLSNlbmRpZgorCWlmIChtcC0+c2hhcmVkLT50eF9id19jb250cm9sX21vdmVkKQorCQlvZmYgPSBUWFFfRklYX1BSSU9fQ09ORl9NT1ZFRChtcC0+cG9ydF9udW0pOworCWVsc2UKKwkJb2ZmID0gVFhRX0ZJWF9QUklPX0NPTkYobXAtPnBvcnRfbnVtKTsKIAotCS8qIENvbmZpZ3VyZSB0aGUgdGltZW91dCB0YXNrICovCi0JSU5JVF9XT1JLKCZtcC0+dHhfdGltZW91dF90YXNrLCBtdjY0M3h4X2V0aF90eF90aW1lb3V0X3Rhc2spOworCXZhbCA9IHJkbChtcCwgb2ZmKTsKKwl2YWwgfD0gMSA8PCB0eHEtPmluZGV4OworCXdybChtcCwgb2ZmLCB2YWwpOworfQogCi0Jc3Bpbl9sb2NrX2luaXQoJm1wLT5sb2NrKTsKK3N0YXRpYyB2b2lkIHR4cV9zZXRfd3JyKHN0cnVjdCB0eF9xdWV1ZSAqdHhxLCBpbnQgd2VpZ2h0KQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IHR4cV90b19tcCh0eHEpOworCWludCBvZmY7CisJdTMyIHZhbDsKIAotCW1wLT5zaGFyZWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZC0+c2hhcmVkKTsKLQlwb3J0X251bSA9IG1wLT5wb3J0X251bSA9IHBkLT5wb3J0X251bWJlcjsKKwkvKgorCSAqIFR1cm4gb2ZmIGZpeGVkIHByaW9yaXR5IG1vZGUuCisJICovCisJaWYgKG1wLT5zaGFyZWQtPnR4X2J3X2NvbnRyb2xfbW92ZWQpCisJCW9mZiA9IFRYUV9GSVhfUFJJT19DT05GX01PVkVEKG1wLT5wb3J0X251bSk7CisJZWxzZQorCQlvZmYgPSBUWFFfRklYX1BSSU9fQ09ORihtcC0+cG9ydF9udW0pOwogCi0JaWYgKG1wLT5zaGFyZWQtPndpbl9wcm90ZWN0KQotCQl3cmwobXAsIFdJTkRPV19QUk9URUNUKHBvcnRfbnVtKSwgbXAtPnNoYXJlZC0+d2luX3Byb3RlY3QpOworCXZhbCA9IHJkbChtcCwgb2ZmKTsKKwl2YWwgJj0gfigxIDw8IHR4cS0+aW5kZXgpOworCXdybChtcCwgb2ZmLCB2YWwpOwogCi0JbXAtPnNoYXJlZF9zbWkgPSBtcC0+c2hhcmVkOwotCWlmIChwZC0+c2hhcmVkX3NtaSAhPSBOVUxMKQotCQltcC0+c2hhcmVkX3NtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkLT5zaGFyZWRfc21pKTsKKwkvKgorCSAqIENvbmZpZ3VyZSBXUlIgd2VpZ2h0IGZvciB0aGlzIHF1ZXVlLgorCSAqLworCW9mZiA9IFRYUV9CV19XUlJfQ09ORihtcC0+cG9ydF9udW0sIHR4cS0+aW5kZXgpOwogCi0JLyogc2V0IGRlZmF1bHQgY29uZmlnIHZhbHVlcyAqLwotCWV0aF9wb3J0X3VjX2FkZHJfZ2V0KG1wLCBkZXYtPmRldl9hZGRyKTsKLQltcC0+cnhfcmluZ19zaXplID0gUE9SVF9ERUZBVUxUX1JFQ0VJVkVfUVVFVUVfU0laRTsKLQltcC0+dHhfcmluZ19zaXplID0gUE9SVF9ERUZBVUxUX1RSQU5TTUlUX1FVRVVFX1NJWkU7CisJdmFsID0gcmRsKG1wLCBvZmYpOworCXZhbCA9ICh2YWwgJiB+MHhmZikgfCAod2VpZ2h0ICYgMHhmZik7CisJd3JsKG1wLCBvZmYsIHZhbCk7Cit9CiAKLQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihwZC0+bWFjX2FkZHIpKQotCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgcGQtPm1hY19hZGRyLCA2KTsKIAotCWlmIChwZC0+cGh5X2FkZHIgfHwgcGQtPmZvcmNlX3BoeV9hZGRyKQotCQlldGhlcm5ldF9waHlfc2V0KG1wLCBwZC0+cGh5X2FkZHIpOworLyogbWlpIG1hbmFnZW1lbnQgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNNSV9CVVNZCQkweDEwMDAwMDAwCisjZGVmaW5lIFNNSV9SRUFEX1ZBTElECQkweDA4MDAwMDAwCisjZGVmaW5lIFNNSV9PUENPREVfUkVBRAkJMHgwNDAwMDAwMAorI2RlZmluZSBTTUlfT1BDT0RFX1dSSVRFCTB4MDAwMDAwMDAKIAotCWlmIChwZC0+cnhfcXVldWVfc2l6ZSkKLQkJbXAtPnJ4X3Jpbmdfc2l6ZSA9IHBkLT5yeF9xdWV1ZV9zaXplOworc3RhdGljIHZvaWQgc21pX3JlZ19yZWFkKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgdW5zaWduZWQgaW50IGFkZHIsCisJCQkgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnNtaV9yZWcgPSBtcC0+c2hhcmVkX3NtaS0+YmFzZSArIFNNSV9SRUc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKIAotCWlmIChwZC0+dHhfcXVldWVfc2l6ZSkKLQkJbXAtPnR4X3Jpbmdfc2l6ZSA9IHBkLT50eF9xdWV1ZV9zaXplOworCS8qIHRoZSBTTUkgcmVnaXN0ZXIgaXMgYSBzaGFyZWQgcmVzb3VyY2UgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXAtPnNoYXJlZF9zbWktPnBoeV9sb2NrLCBmbGFncyk7CiAKLQlpZiAocGQtPnR4X3NyYW1fc2l6ZSkgewotCQltcC0+dHhfc3JhbV9zaXplID0gcGQtPnR4X3NyYW1fc2l6ZTsKLQkJbXAtPnR4X3NyYW1fYWRkciA9IHBkLT50eF9zcmFtX2FkZHI7CisJLyogd2FpdCBmb3IgdGhlIFNNSSByZWdpc3RlciB0byBiZWNvbWUgYXZhaWxhYmxlICovCisJZm9yIChpID0gMDsgcmVhZGwoc21pX3JlZykgJiBTTUlfQlVTWTsgaSsrKSB7CisJCWlmIChpID09IDEwMDApIHsKKwkJCXByaW50aygiJXM6IFBIWSBidXN5IHRpbWVvdXRcbiIsIG1wLT5kZXYtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJdWRlbGF5KDEwKTsKIAl9CiAKLQlpZiAocGQtPnJ4X3NyYW1fc2l6ZSkgewotCQltcC0+cnhfc3JhbV9zaXplID0gcGQtPnJ4X3NyYW1fc2l6ZTsKLQkJbXAtPnJ4X3NyYW1fYWRkciA9IHBkLT5yeF9zcmFtX2FkZHI7CisJd3JpdGVsKFNNSV9PUENPREVfUkVBRCB8IChyZWcgPDwgMjEpIHwgKGFkZHIgPDwgMTYpLCBzbWlfcmVnKTsKKworCS8qIG5vdyB3YWl0IGZvciB0aGUgZGF0YSB0byBiZSB2YWxpZCAqLworCWZvciAoaSA9IDA7ICEocmVhZGwoc21pX3JlZykgJiBTTUlfUkVBRF9WQUxJRCk7IGkrKykgeworCQlpZiAoaSA9PSAxMDAwKSB7CisJCQlwcmludGsoIiVzOiBQSFkgcmVhZCB0aW1lb3V0XG4iLCBtcC0+ZGV2LT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXVkZWxheSgxMCk7CiAJfQogCi0JZHVwbGV4ID0gcGQtPmR1cGxleDsKLQlzcGVlZCA9IHBkLT5zcGVlZDsKLQotCS8qIEhvb2sgdXAgTUlJIHN1cHBvcnQgZm9yIGV0aHRvb2wgKi8KLQltcC0+bWlpLmRldiA9IGRldjsKLQltcC0+bWlpLm1kaW9fcmVhZCA9IG12NjQzeHhfbWRpb19yZWFkOwotCW1wLT5taWkubWRpb193cml0ZSA9IG12NjQzeHhfbWRpb193cml0ZTsKLQltcC0+bWlpLnBoeV9pZCA9IGV0aGVybmV0X3BoeV9nZXQobXApOwotCW1wLT5taWkucGh5X2lkX21hc2sgPSAweDNmOwotCW1wLT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQotCWVyciA9IGV0aGVybmV0X3BoeV9kZXRlY3QobXApOwotCWlmIChlcnIpIHsKLQkJcHJfZGVidWcoIiVzOiBObyBQSFkgZGV0ZWN0ZWQgYXQgYWRkciAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsIGV0aGVybmV0X3BoeV9nZXQobXApKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXRoZXJuZXRfcGh5X3Jlc2V0KG1wKTsKLQltcC0+bWlpLnN1cHBvcnRzX2dtaWkgPSBtaWlfY2hlY2tfZ21paV9zdXBwb3J0KCZtcC0+bWlpKTsKLQltdjY0M3h4X2luaXRfZXRodG9vbF9jbWQoZGV2LCBtcC0+bWlpLnBoeV9pZCwgc3BlZWQsIGR1cGxleCwgJmNtZCk7Ci0JbXY2NDN4eF9ldGhfdXBkYXRlX3BzY3IoZGV2LCAmY21kKTsKLQltdjY0M3h4X3NldF9zZXR0aW5ncyhkZXYsICZjbWQpOwotCi0JU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKLQllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCXAgPSBkZXYtPmRldl9hZGRyOwotCXByaW50ayhLRVJOX05PVElDRQotCQkiJXM6IHBvcnQgJWQgd2l0aCBNQUMgYWRkcmVzcyAlc1xuIiwKLQkJZGV2LT5uYW1lLCBwb3J0X251bSwgcHJpbnRfbWFjKG1hYywgcCkpOwotCi0JaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBTY2F0dGVyIEdhdGhlciBFbmFibGVkXG4iLCBkZXYtPm5hbWUpOwotCi0JaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pCi0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFRYIFRDUC9JUCBDaGVja3N1bW1pbmcgU3VwcG9ydGVkXG4iLAotCQkJCQkJCQlkZXYtPm5hbWUpOwotCi0jaWZkZWYgTVY2NDNYWF9DSEVDS1NVTV9PRkZMT0FEX1RYCi0JcHJpbnRrKEtFUk5fTk9USUNFICIlczogUlggVENQL1VEUCBDaGVja3N1bSBPZmZsb2FkIE9OIFxuIiwgZGV2LT5uYW1lKTsKLSNlbmRpZgotCi0jaWZkZWYgTVY2NDNYWF9DT0FMCi0JcHJpbnRrKEtFUk5fTk9USUNFICIlczogVFggYW5kIFJYIEludGVycnVwdCBDb2FsZXNjaW5nIE9OIFxuIiwKLQkJCQkJCQkJZGV2LT5uYW1lKTsKLSNlbmRpZgotCi0jaWZkZWYgTVY2NDNYWF9OQVBJCi0JcHJpbnRrKEtFUk5fTk9USUNFICIlczogUlggTkFQSSBFbmFibGVkIFxuIiwgZGV2LT5uYW1lKTsKLSNlbmRpZgotCi0JaWYgKG1wLT50eF9zcmFtX3NpemUgPiAwKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBVc2luZyBTUkFNXG4iLCBkZXYtPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci0KKwkqdmFsdWUgPSByZWFkbChzbWlfcmVnKSAmIDB4ZmZmZjsKIG91dDoKLQlmcmVlX25ldGRldihkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5zaGFyZWRfc21pLT5waHlfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzbWlfcmVnX3dyaXRlKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwKKwkJCSAgdW5zaWduZWQgaW50IGFkZHIsCisJCQkgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnNtaV9yZWcgPSBtcC0+c2hhcmVkX3NtaS0+YmFzZSArIFNNSV9SRUc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCS8qIHRoZSBTTUkgcmVnaXN0ZXIgaXMgYSBzaGFyZWQgcmVzb3VyY2UgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXAtPnNoYXJlZF9zbWktPnBoeV9sb2NrLCBmbGFncyk7CisKKwkvKiB3YWl0IGZvciB0aGUgU01JIHJlZ2lzdGVyIHRvIGJlY29tZSBhdmFpbGFibGUgKi8KKwlmb3IgKGkgPSAwOyByZWFkbChzbWlfcmVnKSAmIFNNSV9CVVNZOyBpKyspIHsKKwkJaWYgKGkgPT0gMTAwMCkgeworCQkJcHJpbnRrKCIlczogUEhZIGJ1c3kgdGltZW91dFxuIiwgbXAtPmRldi0+bmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0KKworCXdyaXRlbChTTUlfT1BDT0RFX1dSSVRFIHwgKHJlZyA8PCAyMSkgfAorCQkoYWRkciA8PCAxNikgfCAodmFsdWUgJiAweGZmZmYpLCBzbWlfcmVnKTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+c2hhcmVkX3NtaS0+cGh5X2xvY2ssIGZsYWdzKTsKK30KKworCisvKiBtaWIgY291bnRlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdTMyIG1pYl9yZWFkKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gcmRsKG1wLCBNSUJfQ09VTlRFUlMobXAtPnBvcnRfbnVtKSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG1pYl9jb3VudGVyc19jbGVhcihzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMHg4MDsgaSArPSA0KQorCQltaWJfcmVhZChtcCwgaSk7Cit9CisKK3N0YXRpYyB2b2lkIG1pYl9jb3VudGVyc191cGRhdGUoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQoreworCXN0cnVjdCBtaWJfY291bnRlcnMgKnAgPSAmbXAtPm1pYl9jb3VudGVyczsKKworCXAtPmdvb2Rfb2N0ZXRzX3JlY2VpdmVkICs9IG1pYl9yZWFkKG1wLCAweDAwKTsKKwlwLT5nb29kX29jdGV0c19yZWNlaXZlZCArPSAodTY0KW1pYl9yZWFkKG1wLCAweDA0KSA8PCAzMjsKKwlwLT5iYWRfb2N0ZXRzX3JlY2VpdmVkICs9IG1pYl9yZWFkKG1wLCAweDA4KTsKKwlwLT5pbnRlcm5hbF9tYWNfdHJhbnNtaXRfZXJyICs9IG1pYl9yZWFkKG1wLCAweDBjKTsKKwlwLT5nb29kX2ZyYW1lc19yZWNlaXZlZCArPSBtaWJfcmVhZChtcCwgMHgxMCk7CisJcC0+YmFkX2ZyYW1lc19yZWNlaXZlZCArPSBtaWJfcmVhZChtcCwgMHgxNCk7CisJcC0+YnJvYWRjYXN0X2ZyYW1lc19yZWNlaXZlZCArPSBtaWJfcmVhZChtcCwgMHgxOCk7CisJcC0+bXVsdGljYXN0X2ZyYW1lc19yZWNlaXZlZCArPSBtaWJfcmVhZChtcCwgMHgxYyk7CisJcC0+ZnJhbWVzXzY0X29jdGV0cyArPSBtaWJfcmVhZChtcCwgMHgyMCk7CisJcC0+ZnJhbWVzXzY1X3RvXzEyN19vY3RldHMgKz0gbWliX3JlYWQobXAsIDB4MjQpOworCXAtPmZyYW1lc18xMjhfdG9fMjU1X29jdGV0cyArPSBtaWJfcmVhZChtcCwgMHgyOCk7CisJcC0+ZnJhbWVzXzI1Nl90b181MTFfb2N0ZXRzICs9IG1pYl9yZWFkKG1wLCAweDJjKTsKKwlwLT5mcmFtZXNfNTEyX3RvXzEwMjNfb2N0ZXRzICs9IG1pYl9yZWFkKG1wLCAweDMwKTsKKwlwLT5mcmFtZXNfMTAyNF90b19tYXhfb2N0ZXRzICs9IG1pYl9yZWFkKG1wLCAweDM0KTsKKwlwLT5nb29kX29jdGV0c19zZW50ICs9IG1pYl9yZWFkKG1wLCAweDM4KTsKKwlwLT5nb29kX29jdGV0c19zZW50ICs9ICh1NjQpbWliX3JlYWQobXAsIDB4M2MpIDw8IDMyOworCXAtPmdvb2RfZnJhbWVzX3NlbnQgKz0gbWliX3JlYWQobXAsIDB4NDApOworCXAtPmV4Y2Vzc2l2ZV9jb2xsaXNpb24gKz0gbWliX3JlYWQobXAsIDB4NDQpOworCXAtPm11bHRpY2FzdF9mcmFtZXNfc2VudCArPSBtaWJfcmVhZChtcCwgMHg0OCk7CisJcC0+YnJvYWRjYXN0X2ZyYW1lc19zZW50ICs9IG1pYl9yZWFkKG1wLCAweDRjKTsKKwlwLT51bnJlY19tYWNfY29udHJvbF9yZWNlaXZlZCArPSBtaWJfcmVhZChtcCwgMHg1MCk7CisJcC0+ZmNfc2VudCArPSBtaWJfcmVhZChtcCwgMHg1NCk7CisJcC0+Z29vZF9mY19yZWNlaXZlZCArPSBtaWJfcmVhZChtcCwgMHg1OCk7CisJcC0+YmFkX2ZjX3JlY2VpdmVkICs9IG1pYl9yZWFkKG1wLCAweDVjKTsKKwlwLT51bmRlcnNpemVfcmVjZWl2ZWQgKz0gbWliX3JlYWQobXAsIDB4NjApOworCXAtPmZyYWdtZW50c19yZWNlaXZlZCArPSBtaWJfcmVhZChtcCwgMHg2NCk7CisJcC0+b3ZlcnNpemVfcmVjZWl2ZWQgKz0gbWliX3JlYWQobXAsIDB4NjgpOworCXAtPmphYmJlcl9yZWNlaXZlZCArPSBtaWJfcmVhZChtcCwgMHg2Yyk7CisJcC0+bWFjX3JlY2VpdmVfZXJyb3IgKz0gbWliX3JlYWQobXAsIDB4NzApOworCXAtPmJhZF9jcmNfZXZlbnQgKz0gbWliX3JlYWQobXAsIDB4NzQpOworCXAtPmNvbGxpc2lvbiArPSBtaWJfcmVhZChtcCwgMHg3OCk7CisJcC0+bGF0ZV9jb2xsaXNpb24gKz0gbWliX3JlYWQobXAsIDB4N2MpOworfQorCisKKy8qIGV0aHRvb2wgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IG12NjQzeHhfZXRoX3N0YXRzIHsKKwljaGFyIHN0YXRfc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CisJaW50IHNpemVvZl9zdGF0OworCWludCBuZXRkZXZfb2ZmOworCWludCBtcF9vZmY7Cit9OworCisjZGVmaW5lIFNTVEFUKG0pCQkJCQkJXAorCXsgI20sIEZJRUxEX1NJWkVPRihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cywgbSksCQlcCisJICBvZmZzZXRvZihzdHJ1Y3QgbmV0X2RldmljZSwgc3RhdHMubSksIC0xIH0KKworI2RlZmluZSBNSUJTVEFUKG0pCQkJCQkJXAorCXsgI20sIEZJRUxEX1NJWkVPRihzdHJ1Y3QgbWliX2NvdW50ZXJzLCBtKSwJCVwKKwkgIC0xLCBvZmZzZXRvZihzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSwgbWliX2NvdW50ZXJzLm0pIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdjY0M3h4X2V0aF9zdGF0cyBtdjY0M3h4X2V0aF9zdGF0c1tdID0geworCVNTVEFUKHJ4X3BhY2tldHMpLAorCVNTVEFUKHR4X3BhY2tldHMpLAorCVNTVEFUKHJ4X2J5dGVzKSwKKwlTU1RBVCh0eF9ieXRlcyksCisJU1NUQVQocnhfZXJyb3JzKSwKKwlTU1RBVCh0eF9lcnJvcnMpLAorCVNTVEFUKHJ4X2Ryb3BwZWQpLAorCVNTVEFUKHR4X2Ryb3BwZWQpLAorCU1JQlNUQVQoZ29vZF9vY3RldHNfcmVjZWl2ZWQpLAorCU1JQlNUQVQoYmFkX29jdGV0c19yZWNlaXZlZCksCisJTUlCU1RBVChpbnRlcm5hbF9tYWNfdHJhbnNtaXRfZXJyKSwKKwlNSUJTVEFUKGdvb2RfZnJhbWVzX3JlY2VpdmVkKSwKKwlNSUJTVEFUKGJhZF9mcmFtZXNfcmVjZWl2ZWQpLAorCU1JQlNUQVQoYnJvYWRjYXN0X2ZyYW1lc19yZWNlaXZlZCksCisJTUlCU1RBVChtdWx0aWNhc3RfZnJhbWVzX3JlY2VpdmVkKSwKKwlNSUJTVEFUKGZyYW1lc182NF9vY3RldHMpLAorCU1JQlNUQVQoZnJhbWVzXzY1X3RvXzEyN19vY3RldHMpLAorCU1JQlNUQVQoZnJhbWVzXzEyOF90b18yNTVfb2N0ZXRzKSwKKwlNSUJTVEFUKGZyYW1lc18yNTZfdG9fNTExX29jdGV0cyksCisJTUlCU1RBVChmcmFtZXNfNTEyX3RvXzEwMjNfb2N0ZXRzKSwKKwlNSUJTVEFUKGZyYW1lc18xMDI0X3RvX21heF9vY3RldHMpLAorCU1JQlNUQVQoZ29vZF9vY3RldHNfc2VudCksCisJTUlCU1RBVChnb29kX2ZyYW1lc19zZW50KSwKKwlNSUJTVEFUKGV4Y2Vzc2l2ZV9jb2xsaXNpb24pLAorCU1JQlNUQVQobXVsdGljYXN0X2ZyYW1lc19zZW50KSwKKwlNSUJTVEFUKGJyb2FkY2FzdF9mcmFtZXNfc2VudCksCisJTUlCU1RBVCh1bnJlY19tYWNfY29udHJvbF9yZWNlaXZlZCksCisJTUlCU1RBVChmY19zZW50KSwKKwlNSUJTVEFUKGdvb2RfZmNfcmVjZWl2ZWQpLAorCU1JQlNUQVQoYmFkX2ZjX3JlY2VpdmVkKSwKKwlNSUJTVEFUKHVuZGVyc2l6ZV9yZWNlaXZlZCksCisJTUlCU1RBVChmcmFnbWVudHNfcmVjZWl2ZWQpLAorCU1JQlNUQVQob3ZlcnNpemVfcmVjZWl2ZWQpLAorCU1JQlNUQVQoamFiYmVyX3JlY2VpdmVkKSwKKwlNSUJTVEFUKG1hY19yZWNlaXZlX2Vycm9yKSwKKwlNSUJTVEFUKGJhZF9jcmNfZXZlbnQpLAorCU1JQlNUQVQoY29sbGlzaW9uKSwKKwlNSUJTVEFUKGxhdGVfY29sbGlzaW9uKSwKK307CisKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCXNwaW5fbG9ja19pcnEoJm1wLT5sb2NrKTsKKwllcnIgPSBtaWlfZXRodG9vbF9nc2V0KCZtcC0+bWlpLCBjbWQpOworCXNwaW5fdW5sb2NrX2lycSgmbXAtPmxvY2spOworCisJLyoKKwkgKiBUaGUgTUFDIGRvZXMgbm90IHN1cHBvcnQgMTAwMGJhc2VUX0hhbGYuCisJICovCisJY21kLT5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZjsKKwljbWQtPmFkdmVydGlzaW5nICY9IH5BRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtdjY0M3h4X2V0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzX3BoeWxlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEX01JSTsKKwljbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9NSUk7CisJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwljbWQtPnBvcnQgPSBQT1JUX01JSTsKKwljbWQtPnBoeV9hZGRyZXNzID0gMDsKKwljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJY21kLT5tYXh0eHBrdCA9IDE7CisJY21kLT5tYXhyeHBrdCA9IDE7CiAKLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KLQlmcmVlX25ldGRldihkZXYpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9jb25mX21idXNfd2luZG93cyhzdHJ1Y3QgbXY2NDN4eF9zaGFyZWRfcHJpdmF0ZSAqbXNwLAotCQkJCQkgIHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW0pCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBtc3AtPmV0aF9iYXNlOworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCS8qCisJICogVGhlIE1BQyBkb2VzIG5vdCBzdXBwb3J0IDEwMDBiYXNlVF9IYWxmLgorCSAqLworCWNtZC0+YWR2ZXJ0aXNpbmcgJj0gfkFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGY7CisKKwlzcGluX2xvY2tfaXJxKCZtcC0+bG9jayk7CisJZXJyID0gbWlpX2V0aHRvb2xfc3NldCgmbXAtPm1paSwgY21kKTsKKwlzcGluX3VubG9ja19pcnEoJm1wLT5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2V0X3NldHRpbmdzX3BoeWxlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RybmNweShkcnZpbmZvLT5kcml2ZXIsICBtdjY0M3h4X2V0aF9kcml2ZXJfbmFtZSwgMzIpOworCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgbXY2NDN4eF9ldGhfZHJpdmVyX3ZlcnNpb24sIDMyKTsKKwlzdHJuY3B5KGRydmluZm8tPmZ3X3ZlcnNpb24sICJOL0EiLCAzMik7CisJc3RybmNweShkcnZpbmZvLT5idXNfaW5mbywgInBsYXRmb3JtIiwgMzIpOworCWRydmluZm8tPm5fc3RhdHMgPSBBUlJBWV9TSVpFKG12NjQzeHhfZXRoX3N0YXRzKTsKK30KKworc3RhdGljIGludCBtdjY0M3h4X2V0aF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZtcC0+bWlpKTsKK30KKworc3RhdGljIGludCBtdjY0M3h4X2V0aF9ud2F5X3Jlc2V0X3BoeWxlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHUzMiBtdjY0M3h4X2V0aF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gbWlpX2xpbmtfb2soJm1wLT5taWkpOworfQorCitzdGF0aWMgdTMyIG12NjQzeHhfZXRoX2dldF9saW5rX3BoeWxlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgdWludDMyX3Qgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKQoreworCWludCBpOworCisJaWYgKHN0cmluZ3NldCA9PSBFVEhfU1NfU1RBVFMpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXY2NDN4eF9ldGhfc3RhdHMpOyBpKyspIHsKKwkJCW1lbWNweShkYXRhICsgaSAqIEVUSF9HU1RSSU5HX0xFTiwKKwkJCQltdjY0M3h4X2V0aF9zdGF0c1tpXS5zdGF0X3N0cmluZywKKwkJCQlFVEhfR1NUUklOR19MRU4pOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywKKwkJCQkJICB1aW50NjRfdCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBkZXYtPnByaXY7CisJaW50IGk7CisKKwltaWJfY291bnRlcnNfdXBkYXRlKG1wKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG12NjQzeHhfZXRoX3N0YXRzKTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBtdjY0M3h4X2V0aF9zdGF0cyAqc3RhdDsKKwkJdm9pZCAqcDsKKworCQlzdGF0ID0gbXY2NDN4eF9ldGhfc3RhdHMgKyBpOworCisJCWlmIChzdGF0LT5uZXRkZXZfb2ZmID49IDApCisJCQlwID0gKCh2b2lkICopbXAtPmRldikgKyBzdGF0LT5uZXRkZXZfb2ZmOworCQllbHNlCisJCQlwID0gKCh2b2lkICopbXApICsgc3RhdC0+bXBfb2ZmOworCisJCWRhdGFbaV0gPSAoc3RhdC0+c2l6ZW9mX3N0YXQgPT0gOCkgPworCQkJCSoodWludDY0X3QgKilwIDogKih1aW50MzJfdCAqKXA7CisJfQorfQorCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KQoreworCWlmIChzc2V0ID09IEVUSF9TU19TVEFUUykKKwkJcmV0dXJuIEFSUkFZX1NJWkUobXY2NDN4eF9ldGhfc3RhdHMpOworCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG12NjQzeHhfZXRoX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MJCT0gbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gbXY2NDN4eF9ldGhfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbwkJPSBtdjY0M3h4X2V0aF9nZXRfZHJ2aW5mbywKKwkubndheV9yZXNldAkJPSBtdjY0M3h4X2V0aF9ud2F5X3Jlc2V0LAorCS5nZXRfbGluawkJPSBtdjY0M3h4X2V0aF9nZXRfbGluaywKKwkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3N0cmluZ3MJCT0gbXY2NDN4eF9ldGhfZ2V0X3N0cmluZ3MsCisJLmdldF9ldGh0b29sX3N0YXRzCT0gbXY2NDN4eF9ldGhfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9zc2V0X2NvdW50CQk9IG12NjQzeHhfZXRoX2dldF9zc2V0X2NvdW50LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtdjY0M3h4X2V0aF9ldGh0b29sX29wc19waHlsZXNzID0geworCS5nZXRfc2V0dGluZ3MJCT0gbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzX3BoeWxlc3MsCisJLnNldF9zZXR0aW5ncwkJPSBtdjY0M3h4X2V0aF9zZXRfc2V0dGluZ3NfcGh5bGVzcywKKwkuZ2V0X2RydmluZm8JCT0gbXY2NDN4eF9ldGhfZ2V0X2RydmluZm8sCisJLm53YXlfcmVzZXQJCT0gbXY2NDN4eF9ldGhfbndheV9yZXNldF9waHlsZXNzLAorCS5nZXRfbGluawkJPSBtdjY0M3h4X2V0aF9nZXRfbGlua19waHlsZXNzLAorCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfc3RyaW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc3RyaW5ncywKKwkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBtdjY0M3h4X2V0aF9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3NzZXRfY291bnQJCT0gbXY2NDN4eF9ldGhfZ2V0X3NzZXRfY291bnQsCit9OworCisKKy8qIGFkZHJlc3MgaGFuZGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgdWNfYWRkcl9nZXQoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCXVuc2lnbmVkIGludCBtYWNfaDsKKwl1bnNpZ25lZCBpbnQgbWFjX2w7CisKKwltYWNfaCA9IHJkbChtcCwgTUFDX0FERFJfSElHSChtcC0+cG9ydF9udW0pKTsKKwltYWNfbCA9IHJkbChtcCwgTUFDX0FERFJfTE9XKG1wLT5wb3J0X251bSkpOworCisJYWRkclswXSA9IChtYWNfaCA+PiAyNCkgJiAweGZmOworCWFkZHJbMV0gPSAobWFjX2ggPj4gMTYpICYgMHhmZjsKKwlhZGRyWzJdID0gKG1hY19oID4+IDgpICYgMHhmZjsKKwlhZGRyWzNdID0gbWFjX2ggJiAweGZmOworCWFkZHJbNF0gPSAobWFjX2wgPj4gOCkgJiAweGZmOworCWFkZHJbNV0gPSBtYWNfbCAmIDB4ZmY7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfbWFjX3RhYmxlcyhzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMHgxMDA7IGkgKz0gNCkgeworCQl3cmwobXAsIFNQRUNJQUxfTUNBU1RfVEFCTEUobXAtPnBvcnRfbnVtKSArIGksIDApOworCQl3cmwobXAsIE9USEVSX01DQVNUX1RBQkxFKG1wLT5wb3J0X251bSkgKyBpLCAwKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMHgxMDsgaSArPSA0KQorCQl3cmwobXAsIFVOSUNBU1RfVEFCTEUobXAtPnBvcnRfbnVtKSArIGksIDApOworfQorCitzdGF0aWMgdm9pZCBzZXRfZmlsdGVyX3RhYmxlX2VudHJ5KHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwKKwkJCQkgICBpbnQgdGFibGUsIHVuc2lnbmVkIGNoYXIgZW50cnkpCit7CisJdW5zaWduZWQgaW50IHRhYmxlX3JlZzsKKworCS8qIFNldCAiYWNjZXB0cyBmcmFtZSBiaXQiIGF0IHNwZWNpZmllZCB0YWJsZSBlbnRyeSAqLworCXRhYmxlX3JlZyA9IHJkbChtcCwgdGFibGUgKyAoZW50cnkgJiAweGZjKSk7CisJdGFibGVfcmVnIHw9IDB4MDEgPDwgKDggKiAoZW50cnkgJiAzKSk7CisJd3JsKG1wLCB0YWJsZSArIChlbnRyeSAmIDB4ZmMpLCB0YWJsZV9yZWcpOworfQorCitzdGF0aWMgdm9pZCB1Y19hZGRyX3NldChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIHVuc2lnbmVkIGNoYXIgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IG1hY19oOworCXVuc2lnbmVkIGludCBtYWNfbDsKKwlpbnQgdGFibGU7CisKKwltYWNfbCA9IChhZGRyWzRdIDw8IDgpIHwgYWRkcls1XTsKKwltYWNfaCA9IChhZGRyWzBdIDw8IDI0KSB8IChhZGRyWzFdIDw8IDE2KSB8IChhZGRyWzJdIDw8IDgpIHwgYWRkclszXTsKKworCXdybChtcCwgTUFDX0FERFJfTE9XKG1wLT5wb3J0X251bSksIG1hY19sKTsKKwl3cmwobXAsIE1BQ19BRERSX0hJR0gobXAtPnBvcnRfbnVtKSwgbWFjX2gpOworCisJdGFibGUgPSBVTklDQVNUX1RBQkxFKG1wLT5wb3J0X251bSk7CisJc2V0X2ZpbHRlcl90YWJsZV9lbnRyeShtcCwgdGFibGUsIGFkZHJbNV0gJiAweDBmKTsKK30KKworc3RhdGljIGludCBtdjY0M3h4X2V0aF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogKzIgaXMgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIEhXIGFkZHIgdHlwZSAqLworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyICsgMiwgNik7CisKKwlpbml0X21hY190YWJsZXMobXApOworCXVjX2FkZHJfc2V0KG1wLCBkZXYtPmRldl9hZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZHJfY3JjKHVuc2lnbmVkIGNoYXIgKmFkZHIpCit7CisJaW50IGNyYyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWludCBqOworCisJCWNyYyA9IChjcmMgXiBhZGRyW2ldKSA8PCA4OworCQlmb3IgKGogPSA3OyBqID49IDA7IGotLSkgeworCQkJaWYgKGNyYyAmICgweDEwMCA8PCBqKSkKKwkJCQljcmMgXj0gMHgxMDcgPDwgajsKKwkJfQorCX0KKworCXJldHVybiBjcmM7Cit9CisKK3N0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgcG9ydF9jb25maWc7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKmFkZHI7CisJaW50IGk7CisKKwlwb3J0X2NvbmZpZyA9IHJkbChtcCwgUE9SVF9DT05GSUcobXAtPnBvcnRfbnVtKSk7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJcG9ydF9jb25maWcgfD0gVU5JQ0FTVF9QUk9NSVNDVU9VU19NT0RFOworCWVsc2UKKwkJcG9ydF9jb25maWcgJj0gflVOSUNBU1RfUFJPTUlTQ1VPVVNfTU9ERTsKKwl3cmwobXAsIFBPUlRfQ09ORklHKG1wLT5wb3J0X251bSksIHBvcnRfY29uZmlnKTsKKworCWlmIChkZXYtPmZsYWdzICYgKElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJKSkgeworCQlpbnQgcG9ydF9udW0gPSBtcC0+cG9ydF9udW07CisJCXUzMiBhY2NlcHQgPSAweDAxMDEwMTAxOworCisJCWZvciAoaSA9IDA7IGkgPCAweDEwMDsgaSArPSA0KSB7CisJCQl3cmwobXAsIFNQRUNJQUxfTUNBU1RfVEFCTEUocG9ydF9udW0pICsgaSwgYWNjZXB0KTsKKwkJCXdybChtcCwgT1RIRVJfTUNBU1RfVEFCTEUocG9ydF9udW0pICsgaSwgYWNjZXB0KTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IDB4MTAwOyBpICs9IDQpIHsKKwkJd3JsKG1wLCBTUEVDSUFMX01DQVNUX1RBQkxFKG1wLT5wb3J0X251bSkgKyBpLCAwKTsKKwkJd3JsKG1wLCBPVEhFUl9NQ0FTVF9UQUJMRShtcC0+cG9ydF9udW0pICsgaSwgMCk7CisJfQorCisJZm9yIChhZGRyID0gZGV2LT5tY19saXN0OyBhZGRyICE9IE5VTEw7IGFkZHIgPSBhZGRyLT5uZXh0KSB7CisJCXU4ICphID0gYWRkci0+ZGFfYWRkcjsKKwkJaW50IHRhYmxlOworCisJCWlmIChhZGRyLT5kYV9hZGRybGVuICE9IDYpCisJCQljb250aW51ZTsKKworCQlpZiAobWVtY21wKGEsICJceDAxXHgwMFx4NWVceDAwXHgwMCIsIDUpID09IDApIHsKKwkJCXRhYmxlID0gU1BFQ0lBTF9NQ0FTVF9UQUJMRShtcC0+cG9ydF9udW0pOworCQkJc2V0X2ZpbHRlcl90YWJsZV9lbnRyeShtcCwgdGFibGUsIGFbNV0pOworCQl9IGVsc2UgeworCQkJaW50IGNyYyA9IGFkZHJfY3JjKGEpOworCisJCQl0YWJsZSA9IE9USEVSX01DQVNUX1RBQkxFKG1wLT5wb3J0X251bSk7CisJCQlzZXRfZmlsdGVyX3RhYmxlX2VudHJ5KG1wLCB0YWJsZSwgY3JjKTsKKwkJfQorCX0KK30KKworCisvKiByeC90eCBxdWV1ZSBpbml0aWFsaXNhdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcnhxX2luaXQoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IHJ4X3F1ZXVlICpyeHEgPSBtcC0+cnhxICsgaW5kZXg7CisJc3RydWN0IHJ4X2Rlc2MgKnJ4X2Rlc2M7CisJaW50IHNpemU7CisJaW50IGk7CisKKwlyeHEtPmluZGV4ID0gaW5kZXg7CisKKwlyeHEtPnJ4X3Jpbmdfc2l6ZSA9IG1wLT5kZWZhdWx0X3J4X3Jpbmdfc2l6ZTsKKworCXJ4cS0+cnhfZGVzY19jb3VudCA9IDA7CisJcnhxLT5yeF9jdXJyX2Rlc2MgPSAwOworCXJ4cS0+cnhfdXNlZF9kZXNjID0gMDsKKworCXNpemUgPSByeHEtPnJ4X3Jpbmdfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgcnhfZGVzYyk7CisKKwlpZiAoaW5kZXggPT0gbXAtPnJ4cV9wcmltYXJ5ICYmIHNpemUgPD0gbXAtPnJ4X2Rlc2Nfc3JhbV9zaXplKSB7CisJCXJ4cS0+cnhfZGVzY19hcmVhID0gaW9yZW1hcChtcC0+cnhfZGVzY19zcmFtX2FkZHIsCisJCQkJCQltcC0+cnhfZGVzY19zcmFtX3NpemUpOworCQlyeHEtPnJ4X2Rlc2NfZG1hID0gbXAtPnJ4X2Rlc2Nfc3JhbV9hZGRyOworCX0gZWxzZSB7CisJCXJ4cS0+cnhfZGVzY19hcmVhID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIHNpemUsCisJCQkJCQkJJnJ4cS0+cnhfZGVzY19kbWEsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJfQorCisJaWYgKHJ4cS0+cnhfZGVzY19hcmVhID09IE5VTEwpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJm1wLT5kZXYtPmRldiwKKwkJCSAgICJjYW4ndCBhbGxvY2F0ZSByeCByaW5nICglZCBieXRlcylcbiIsIHNpemUpOworCQlnb3RvIG91dDsKKwl9CisJbWVtc2V0KHJ4cS0+cnhfZGVzY19hcmVhLCAwLCBzaXplKTsKKworCXJ4cS0+cnhfZGVzY19hcmVhX3NpemUgPSBzaXplOworCXJ4cS0+cnhfc2tiID0ga21hbGxvYyhyeHEtPnJ4X3Jpbmdfc2l6ZSAqIHNpemVvZigqcnhxLT5yeF9za2IpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAocnhxLT5yeF9za2IgPT0gTlVMTCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmbXAtPmRldi0+ZGV2LAorCQkJICAgImNhbid0IGFsbG9jYXRlIHJ4IHNrYiByaW5nXG4iKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyeF9kZXNjID0gKHN0cnVjdCByeF9kZXNjICopcnhxLT5yeF9kZXNjX2FyZWE7CisJZm9yIChpID0gMDsgaSA8IHJ4cS0+cnhfcmluZ19zaXplOyBpKyspIHsKKwkJaW50IG5leHRpID0gKGkgKyAxKSAlIHJ4cS0+cnhfcmluZ19zaXplOworCQlyeF9kZXNjW2ldLm5leHRfZGVzY19wdHIgPSByeHEtPnJ4X2Rlc2NfZG1hICsKKwkJCQkJbmV4dGkgKiBzaXplb2Yoc3RydWN0IHJ4X2Rlc2MpOworCX0KKworCWluaXRfdGltZXIoJnJ4cS0+cnhfb29tKTsKKwlyeHEtPnJ4X29vbS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcnhxOworCXJ4cS0+cnhfb29tLmZ1bmN0aW9uID0gcnhxX3JlZmlsbF90aW1lcl93cmFwcGVyOworCisJcmV0dXJuIDA7CisKKworb3V0X2ZyZWU6CisJaWYgKGluZGV4ID09IG1wLT5yeHFfcHJpbWFyeSAmJiBzaXplIDw9IG1wLT5yeF9kZXNjX3NyYW1fc2l6ZSkKKwkJaW91bm1hcChyeHEtPnJ4X2Rlc2NfYXJlYSk7CisJZWxzZQorCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBzaXplLAorCQkJCSAgcnhxLT5yeF9kZXNjX2FyZWEsCisJCQkJICByeHEtPnJ4X2Rlc2NfZG1hKTsKKworb3V0OgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCByeHFfZGVpbml0KHN0cnVjdCByeF9xdWV1ZSAqcnhxKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IHJ4cV90b19tcChyeHEpOworCWludCBpOworCisJcnhxX2Rpc2FibGUocnhxKTsKKworCWRlbF90aW1lcl9zeW5jKCZyeHEtPnJ4X29vbSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnhxLT5yeF9yaW5nX3NpemU7IGkrKykgeworCQlpZiAocnhxLT5yeF9za2JbaV0pIHsKKwkJCWRldl9rZnJlZV9za2IocnhxLT5yeF9za2JbaV0pOworCQkJcnhxLT5yeF9kZXNjX2NvdW50LS07CisJCX0KKwl9CisKKwlpZiAocnhxLT5yeF9kZXNjX2NvdW50KSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZtcC0+ZGV2LT5kZXYsCisJCQkgICAiZXJyb3IgZnJlZWluZyByeCByaW5nIC0tICVkIHNrYnMgc3R1Y2tcbiIsCisJCQkgICByeHEtPnJ4X2Rlc2NfY291bnQpOworCX0KKworCWlmIChyeHEtPmluZGV4ID09IG1wLT5yeHFfcHJpbWFyeSAmJgorCSAgICByeHEtPnJ4X2Rlc2NfYXJlYV9zaXplIDw9IG1wLT5yeF9kZXNjX3NyYW1fc2l6ZSkKKwkJaW91bm1hcChyeHEtPnJ4X2Rlc2NfYXJlYSk7CisJZWxzZQorCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCByeHEtPnJ4X2Rlc2NfYXJlYV9zaXplLAorCQkJCSAgcnhxLT5yeF9kZXNjX2FyZWEsIHJ4cS0+cnhfZGVzY19kbWEpOworCisJa2ZyZWUocnhxLT5yeF9za2IpOworfQorCitzdGF0aWMgaW50IHR4cV9pbml0KHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgaW50IGluZGV4KQoreworCXN0cnVjdCB0eF9xdWV1ZSAqdHhxID0gbXAtPnR4cSArIGluZGV4OworCXN0cnVjdCB0eF9kZXNjICp0eF9kZXNjOworCWludCBzaXplOworCWludCBpOworCisJdHhxLT5pbmRleCA9IGluZGV4OworCisJdHhxLT50eF9yaW5nX3NpemUgPSBtcC0+ZGVmYXVsdF90eF9yaW5nX3NpemU7CisKKwl0eHEtPnR4X2Rlc2NfY291bnQgPSAwOworCXR4cS0+dHhfY3Vycl9kZXNjID0gMDsKKwl0eHEtPnR4X3VzZWRfZGVzYyA9IDA7CisKKwlzaXplID0gdHhxLT50eF9yaW5nX3NpemUgKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOworCisJaWYgKGluZGV4ID09IG1wLT50eHFfcHJpbWFyeSAmJiBzaXplIDw9IG1wLT50eF9kZXNjX3NyYW1fc2l6ZSkgeworCQl0eHEtPnR4X2Rlc2NfYXJlYSA9IGlvcmVtYXAobXAtPnR4X2Rlc2Nfc3JhbV9hZGRyLAorCQkJCQkJbXAtPnR4X2Rlc2Nfc3JhbV9zaXplKTsKKwkJdHhxLT50eF9kZXNjX2RtYSA9IG1wLT50eF9kZXNjX3NyYW1fYWRkcjsKKwl9IGVsc2UgeworCQl0eHEtPnR4X2Rlc2NfYXJlYSA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBzaXplLAorCQkJCQkJCSZ0eHEtPnR4X2Rlc2NfZG1hLAorCQkJCQkJCUdGUF9LRVJORUwpOworCX0KKworCWlmICh0eHEtPnR4X2Rlc2NfYXJlYSA9PSBOVUxMKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZtcC0+ZGV2LT5kZXYsCisJCQkgICAiY2FuJ3QgYWxsb2NhdGUgdHggcmluZyAoJWQgYnl0ZXMpXG4iLCBzaXplKTsKKwkJZ290byBvdXQ7CisJfQorCW1lbXNldCh0eHEtPnR4X2Rlc2NfYXJlYSwgMCwgc2l6ZSk7CisKKwl0eHEtPnR4X2Rlc2NfYXJlYV9zaXplID0gc2l6ZTsKKwl0eHEtPnR4X3NrYiA9IGttYWxsb2ModHhxLT50eF9yaW5nX3NpemUgKiBzaXplb2YoKnR4cS0+dHhfc2tiKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKHR4cS0+dHhfc2tiID09IE5VTEwpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJm1wLT5kZXYtPmRldiwKKwkJCSAgICJjYW4ndCBhbGxvY2F0ZSB0eCBza2IgcmluZ1xuIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJdHhfZGVzYyA9IChzdHJ1Y3QgdHhfZGVzYyAqKXR4cS0+dHhfZGVzY19hcmVhOworCWZvciAoaSA9IDA7IGkgPCB0eHEtPnR4X3Jpbmdfc2l6ZTsgaSsrKSB7CisJCWludCBuZXh0aSA9IChpICsgMSkgJSB0eHEtPnR4X3Jpbmdfc2l6ZTsKKwkJdHhfZGVzY1tpXS5uZXh0X2Rlc2NfcHRyID0gdHhxLT50eF9kZXNjX2RtYSArCisJCQkJCW5leHRpICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKTsKKwl9CisKKwlyZXR1cm4gMDsKKworCitvdXRfZnJlZToKKwlpZiAoaW5kZXggPT0gbXAtPnR4cV9wcmltYXJ5ICYmIHNpemUgPD0gbXAtPnR4X2Rlc2Nfc3JhbV9zaXplKQorCQlpb3VubWFwKHR4cS0+dHhfZGVzY19hcmVhKTsKKwllbHNlCisJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIHNpemUsCisJCQkJICB0eHEtPnR4X2Rlc2NfYXJlYSwKKwkJCQkgIHR4cS0+dHhfZGVzY19kbWEpOworCitvdXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIHR4cV9yZWNsYWltKHN0cnVjdCB0eF9xdWV1ZSAqdHhxLCBpbnQgZm9yY2UpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gdHhxX3RvX21wKHR4cSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+bG9jaywgZmxhZ3MpOworCXdoaWxlICh0eHEtPnR4X2Rlc2NfY291bnQgPiAwKSB7CisJCWludCB0eF9pbmRleDsKKwkJc3RydWN0IHR4X2Rlc2MgKmRlc2M7CisJCXUzMiBjbWRfc3RzOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlkbWFfYWRkcl90IGFkZHI7CisJCWludCBjb3VudDsKKworCQl0eF9pbmRleCA9IHR4cS0+dHhfdXNlZF9kZXNjOworCQlkZXNjID0gJnR4cS0+dHhfZGVzY19hcmVhW3R4X2luZGV4XTsKKwkJY21kX3N0cyA9IGRlc2MtPmNtZF9zdHM7CisKKwkJaWYgKCFmb3JjZSAmJiAoY21kX3N0cyAmIEJVRkZFUl9PV05FRF9CWV9ETUEpKQorCQkJYnJlYWs7CisKKwkJdHhxLT50eF91c2VkX2Rlc2MgPSAodHhfaW5kZXggKyAxKSAlIHR4cS0+dHhfcmluZ19zaXplOworCQl0eHEtPnR4X2Rlc2NfY291bnQtLTsKKworCQlhZGRyID0gZGVzYy0+YnVmX3B0cjsKKwkJY291bnQgPSBkZXNjLT5ieXRlX2NudDsKKwkJc2tiID0gdHhxLT50eF9za2JbdHhfaW5kZXhdOworCQl0eHEtPnR4X3NrYlt0eF9pbmRleF0gPSBOVUxMOworCisJCWlmIChjbWRfc3RzICYgRVJST1JfU1VNTUFSWSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZtcC0+ZGV2LT5kZXYsICJ0eCBlcnJvclxuIik7CisJCQltcC0+ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJfQorCisJCS8qCisJCSAqIERyb3AgbXAtPmxvY2sgd2hpbGUgd2UgZnJlZSB0aGUgc2tiLgorCQkgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoY21kX3N0cyAmIFRYX0ZJUlNUX0RFU0MpCisJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGFkZHIsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKKwkJZWxzZQorCQkJZG1hX3VubWFwX3BhZ2UoTlVMTCwgYWRkciwgY291bnQsIERNQV9UT19ERVZJQ0UpOworCisJCWlmIChza2IpCisJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+bG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB0eHFfZGVpbml0KHN0cnVjdCB0eF9xdWV1ZSAqdHhxKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IHR4cV90b19tcCh0eHEpOworCisJdHhxX2Rpc2FibGUodHhxKTsKKwl0eHFfcmVjbGFpbSh0eHEsIDEpOworCisJQlVHX09OKHR4cS0+dHhfdXNlZF9kZXNjICE9IHR4cS0+dHhfY3Vycl9kZXNjKTsKKworCWlmICh0eHEtPmluZGV4ID09IG1wLT50eHFfcHJpbWFyeSAmJgorCSAgICB0eHEtPnR4X2Rlc2NfYXJlYV9zaXplIDw9IG1wLT50eF9kZXNjX3NyYW1fc2l6ZSkKKwkJaW91bm1hcCh0eHEtPnR4X2Rlc2NfYXJlYSk7CisJZWxzZQorCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCB0eHEtPnR4X2Rlc2NfYXJlYV9zaXplLAorCQkJCSAgdHhxLT50eF9kZXNjX2FyZWEsIHR4cS0+dHhfZGVzY19kbWEpOworCisJa2ZyZWUodHhxLT50eF9za2IpOworfQorCisKKy8qIG5ldGRldiBvcHMgYW5kIHJlbGF0ZWQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgdXBkYXRlX3BzY3Ioc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpCit7CisJdTMyIHBzY3JfbzsKKwl1MzIgcHNjcl9uOworCisJcHNjcl9vID0gcmRsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MKG1wLT5wb3J0X251bSkpOworCisJLyogY2xlYXIgc3BlZWQsIGR1cGxleCBhbmQgcnggYnVmZmVyIHNpemUgZmllbGRzICovCisJcHNjcl9uID0gcHNjcl9vICYgfihTRVRfTUlJX1NQRUVEX1RPXzEwMCAgIHwKKwkJCSAgICBTRVRfR01JSV9TUEVFRF9UT18xMDAwIHwKKwkJCSAgICBTRVRfRlVMTF9EVVBMRVhfTU9ERSAgIHwKKwkJCSAgICBNQVhfUlhfUEFDS0VUX01BU0spOworCisJaWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHsKKwkJcHNjcl9uIHw9IFNFVF9HTUlJX1NQRUVEX1RPXzEwMDAgfCBNQVhfUlhfUEFDS0VUXzk3MDBCWVRFOworCX0gZWxzZSB7CisJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDApCisJCQlwc2NyX24gfD0gU0VUX01JSV9TUEVFRF9UT18xMDA7CisJCXBzY3JfbiB8PSBNQVhfUlhfUEFDS0VUXzE1MjJCWVRFOworCX0KKworCWlmIChkdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCXBzY3JfbiB8PSBTRVRfRlVMTF9EVVBMRVhfTU9ERTsKKworCWlmIChwc2NyX24gIT0gcHNjcl9vKSB7CisJCWlmICgocHNjcl9vICYgU0VSSUFMX1BPUlRfRU5BQkxFKSA9PSAwKQorCQkJd3JsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MKG1wLT5wb3J0X251bSksIHBzY3Jfbik7CisJCWVsc2UgeworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQkJaWYgKG1wLT50eHFfbWFzayAmICgxIDw8IGkpKQorCQkJCQl0eHFfZGlzYWJsZShtcC0+dHhxICsgaSk7CisKKwkJCXBzY3JfbyAmPSB+U0VSSUFMX1BPUlRfRU5BQkxFOworCQkJd3JsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MKG1wLT5wb3J0X251bSksIHBzY3Jfbyk7CisJCQl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0wobXAtPnBvcnRfbnVtKSwgcHNjcl9uKTsKKwkJCXdybChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTChtcC0+cG9ydF9udW0pLCBwc2NyX24pOworCisJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCWlmIChtcC0+dHhxX21hc2sgJiAoMSA8PCBpKSkKKwkJCQkJdHhxX2VuYWJsZShtcC0+dHhxICsgaSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdjY0M3h4X2V0aF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgaW50X2NhdXNlOworCXUzMiBpbnRfY2F1c2VfZXh0OworCXUzMiB0eHFfYWN0aXZlOworCisJaW50X2NhdXNlID0gcmRsKG1wLCBJTlRfQ0FVU0UobXAtPnBvcnRfbnVtKSkgJgorCQkJKElOVF9UWF9FTkQgfCBJTlRfUlggfCBJTlRfRVhUKTsKKwlpZiAoaW50X2NhdXNlID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCWludF9jYXVzZV9leHQgPSAwOworCWlmIChpbnRfY2F1c2UgJiBJTlRfRVhUKSB7CisJCWludF9jYXVzZV9leHQgPSByZGwobXAsIElOVF9DQVVTRV9FWFQobXAtPnBvcnRfbnVtKSkKKwkJCQkmIChJTlRfRVhUX0xJTksgfCBJTlRfRVhUX1BIWSB8IElOVF9FWFRfVFgpOworCQl3cmwobXAsIElOVF9DQVVTRV9FWFQobXAtPnBvcnRfbnVtKSwgfmludF9jYXVzZV9leHQpOworCX0KKworCWlmIChpbnRfY2F1c2VfZXh0ICYgKElOVF9FWFRfUEhZIHwgSU5UX0VYVF9MSU5LKSkgeworCQlpZiAobXAtPnBoeV9hZGRyID09IC0xIHx8IG1paV9saW5rX29rKCZtcC0+bWlpKSkgeworCQkJaW50IGk7CisKKwkJCWlmIChtcC0+cGh5X2FkZHIgIT0gLTEpIHsKKwkJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOworCisJCQkJbWlpX2V0aHRvb2xfZ3NldCgmbXAtPm1paSwgJmNtZCk7CisJCQkJdXBkYXRlX3BzY3IobXAsIGNtZC5zcGVlZCwgY21kLmR1cGxleCk7CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQkJaWYgKG1wLT50eHFfbWFzayAmICgxIDw8IGkpKQorCQkJCQl0eHFfZW5hYmxlKG1wLT50eHEgKyBpKTsKKworCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJCQkJX190eHFfbWF5YmVfd2FrZShtcC0+dHhxICsgbXAtPnR4cV9wcmltYXJ5KTsKKwkJCX0KKwkJfSBlbHNlIGlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCX0KKwl9CisKKwkvKgorCSAqIFJ4QnVmZmVyIG9yIFJ4RXJyb3Igc2V0IGZvciBhbnkgb2YgdGhlIDggcXVldWVzPworCSAqLworI2lmZGVmIE1WNjQzWFhfRVRIX05BUEkKKwlpZiAoaW50X2NhdXNlICYgSU5UX1JYKSB7CisJCXdybChtcCwgSU5UX01BU0sobXAtPnBvcnRfbnVtKSwgMHgwMDAwMDAwMCk7CisJCXJkbChtcCwgSU5UX01BU0sobXAtPnBvcnRfbnVtKSk7CisKKwkJbmV0aWZfcnhfc2NoZWR1bGUoZGV2LCAmbXAtPm5hcGkpOworCX0KKyNlbHNlCisJaWYgKGludF9jYXVzZSAmIElOVF9SWCkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkKKwkJCWlmIChtcC0+cnhxX21hc2sgJiAoMSA8PCBpKSkKKwkJCQlyeHFfcHJvY2VzcyhtcC0+cnhxICsgaSwgSU5UX01BWCk7CisJfQorI2VuZGlmCisKKwl0eHFfYWN0aXZlID0gcmRsKG1wLCBUWFFfQ09NTUFORChtcC0+cG9ydF9udW0pKTsKKworCS8qCisJICogVHhCdWZmZXIgb3IgVHhFcnJvciBzZXQgZm9yIGFueSBvZiB0aGUgOCBxdWV1ZXM/CisJICovCisJaWYgKGludF9jYXVzZV9leHQgJiBJTlRfRVhUX1RYKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlpZiAobXAtPnR4cV9tYXNrICYgKDEgPDwgaSkpCisJCQkJdHhxX3JlY2xhaW0obXAtPnR4cSArIGksIDApOworCX0KKworCS8qCisJICogQW55IFR4RW5kIGludGVycnVwdHM/CisJICovCisJaWYgKGludF9jYXVzZSAmIElOVF9UWF9FTkQpIHsKKwkJaW50IGk7CisKKwkJd3JsKG1wLCBJTlRfQ0FVU0UobXAtPnBvcnRfbnVtKSwgfihpbnRfY2F1c2UgJiBJTlRfVFhfRU5EKSk7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJCXN0cnVjdCB0eF9xdWV1ZSAqdHhxID0gbXAtPnR4cSArIGk7CisJCQlpZiAodHhxLT50eF9kZXNjX2NvdW50ICYmICEoKHR4cV9hY3RpdmUgPj4gaSkgJiAxKSkKKwkJCQl0eHFfZW5hYmxlKHR4cSk7CisJCX0KKwl9CisKKwkvKgorCSAqIEVub3VnaCBzcGFjZSBhZ2FpbiBpbiB0aGUgcHJpbWFyeSBUWCBxdWV1ZSBmb3IgYSBmdWxsIHBhY2tldD8KKwkgKi8KKwlpZiAoaW50X2NhdXNlX2V4dCAmIElOVF9FWFRfVFgpIHsKKwkJc3RydWN0IHR4X3F1ZXVlICp0eHEgPSBtcC0+dHhxICsgbXAtPnR4cV9wcmltYXJ5OworCQlfX3R4cV9tYXliZV93YWtlKHR4cSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBwaHlfcmVzZXQoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQoreworCXVuc2lnbmVkIGludCBkYXRhOworCisJc21pX3JlZ19yZWFkKG1wLCBtcC0+cGh5X2FkZHIsIDAsICZkYXRhKTsKKwlkYXRhIHw9IDB4ODAwMDsKKwlzbWlfcmVnX3dyaXRlKG1wLCBtcC0+cGh5X2FkZHIsIDAsIGRhdGEpOworCisJZG8geworCQl1ZGVsYXkoMSk7CisJCXNtaV9yZWdfcmVhZChtcCwgbXAtPnBoeV9hZGRyLCAwLCAmZGF0YSk7CisJfSB3aGlsZSAoZGF0YSAmIDB4ODAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHBvcnRfc3RhcnQoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQoreworCXUzMiBwc2NyOworCWludCBpOworCisJLyoKKwkgKiBDb25maWd1cmUgYmFzaWMgbGluayBwYXJhbWV0ZXJzLgorCSAqLworCXBzY3IgPSByZGwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0wobXAtPnBvcnRfbnVtKSk7CisJcHNjciAmPSB+KFNFUklBTF9QT1JUX0VOQUJMRSB8IEZPUkNFX0xJTktfUEFTUyk7CisJd3JsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MKG1wLT5wb3J0X251bSksIHBzY3IpOworCXBzY3IgfD0gRElTQUJMRV9BVVRPX05FR19GT1JfRkxPV19DVFJMIHwKKwkJRElTQUJMRV9BVVRPX05FR19TUEVFRF9HTUlJICAgIHwKKwkJRElTQUJMRV9BVVRPX05FR19GT1JfRFVQTEVYICAgIHwKKwkJRE9fTk9UX0ZPUkNFX0xJTktfRkFJTAkgICAgICAgfAorCQlTRVJJQUxfUE9SVF9DT05UUk9MX1JFU0VSVkVEOworCXdybChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTChtcC0+cG9ydF9udW0pLCBwc2NyKTsKKwlwc2NyIHw9IFNFUklBTF9QT1JUX0VOQUJMRTsKKwl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0wobXAtPnBvcnRfbnVtKSwgcHNjcik7CisKKwl3cmwobXAsIFNETUFfQ09ORklHKG1wLT5wb3J0X251bSksIFBPUlRfU0RNQV9DT05GSUdfREVGQVVMVF9WQUxVRSk7CisKKwkvKgorCSAqIFBlcmZvcm0gUEhZIHJlc2V0LCBpZiB0aGVyZSBpcyBhIFBIWS4KKwkgKi8KKwlpZiAobXAtPnBoeV9hZGRyICE9IC0xKSB7CisJCXN0cnVjdCBldGh0b29sX2NtZCBjbWQ7CisKKwkJbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzKG1wLT5kZXYsICZjbWQpOworCQlwaHlfcmVzZXQobXApOworCQltdjY0M3h4X2V0aF9zZXRfc2V0dGluZ3MobXAtPmRldiwgJmNtZCk7CisJfQorCisJLyoKKwkgKiBDb25maWd1cmUgVFggcGF0aCBhbmQgcXVldWVzLgorCSAqLworCXR4X3NldF9yYXRlKG1wLCAxMDAwMDAwMDAwLCAxNjc3NzIxNik7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlzdHJ1Y3QgdHhfcXVldWUgKnR4cSA9IG1wLT50eHEgKyBpOworCQlpbnQgb2ZmID0gVFhRX0NVUlJFTlRfREVTQ19QVFIobXAtPnBvcnRfbnVtLCBpKTsKKwkJdTMyIGFkZHI7CisKKwkJaWYgKChtcC0+dHhxX21hc2sgJiAoMSA8PCBpKSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWFkZHIgPSAodTMyKXR4cS0+dHhfZGVzY19kbWE7CisJCWFkZHIgKz0gdHhxLT50eF9jdXJyX2Rlc2MgKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOworCQl3cmwobXAsIG9mZiwgYWRkcik7CisKKwkJdHhxX3NldF9yYXRlKHR4cSwgMTAwMDAwMDAwMCwgMTY3NzcyMTYpOworCQl0eHFfc2V0X2ZpeGVkX3ByaW9fbW9kZSh0eHEpOworCX0KKworCS8qCisJICogQWRkIGNvbmZpZ3VyZWQgdW5pY2FzdCBhZGRyZXNzIHRvIGFkZHJlc3MgZmlsdGVyIHRhYmxlLgorCSAqLworCXVjX2FkZHJfc2V0KG1wLCBtcC0+ZGV2LT5kZXZfYWRkcik7CisKKwkvKgorCSAqIFJlY2VpdmUgYWxsIHVubWF0Y2hlZCB1bmljYXN0LCBUQ1AsIFVEUCwgQlBEVSBhbmQgYnJvYWRjYXN0CisJICogZnJhbWVzIHRvIFJYIHF1ZXVlICMwLgorCSAqLworCXdybChtcCwgUE9SVF9DT05GSUcobXAtPnBvcnRfbnVtKSwgMHgwMDAwMDAwMCk7CisKKwkvKgorCSAqIFRyZWF0IEJQRFVzIGFzIG5vcm1hbCBtdWx0aWNhc3RzLCBhbmQgZGlzYWJsZSBwYXJ0aXRpb24gbW9kZS4KKwkgKi8KKwl3cmwobXAsIFBPUlRfQ09ORklHX0VYVChtcC0+cG9ydF9udW0pLCAweDAwMDAwMDAwKTsKKworCS8qCisJICogRW5hYmxlIHRoZSByZWNlaXZlIHF1ZXVlcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXN0cnVjdCByeF9xdWV1ZSAqcnhxID0gbXAtPnJ4cSArIGk7CisJCWludCBvZmYgPSBSWFFfQ1VSUkVOVF9ERVNDX1BUUihtcC0+cG9ydF9udW0sIGkpOworCQl1MzIgYWRkcjsKKworCQlpZiAoKG1wLT5yeHFfbWFzayAmICgxIDw8IGkpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJYWRkciA9ICh1MzIpcnhxLT5yeF9kZXNjX2RtYTsKKwkJYWRkciArPSByeHEtPnJ4X2N1cnJfZGVzYyAqIHNpemVvZihzdHJ1Y3QgcnhfZGVzYyk7CisJCXdybChtcCwgb2ZmLCBhZGRyKTsKKworCQlyeHFfZW5hYmxlKHJ4cSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfcnhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIHVuc2lnbmVkIGludCBkZWxheSkKK3sKKwl1bnNpZ25lZCBpbnQgY29hbCA9ICgobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwMDAwKSAqIGRlbGF5KSAvIDY0OworCXUzMiB2YWw7CisKKwl2YWwgPSByZGwobXAsIFNETUFfQ09ORklHKG1wLT5wb3J0X251bSkpOworCWlmIChtcC0+c2hhcmVkLT5leHRlbmRlZF9yeF9jb2FsX2xpbWl0KSB7CisJCWlmIChjb2FsID4gMHhmZmZmKQorCQkJY29hbCA9IDB4ZmZmZjsKKwkJdmFsICY9IH4weDAyM2ZmZjgwOworCQl2YWwgfD0gKGNvYWwgJiAweDgwMDApIDw8IDEwOworCQl2YWwgfD0gKGNvYWwgJiAweDdmZmYpIDw8IDc7CisJfSBlbHNlIHsKKwkJaWYgKGNvYWwgPiAweDNmZmYpCisJCQljb2FsID0gMHgzZmZmOworCQl2YWwgJj0gfjB4MDAzZmZmMDA7CisJCXZhbCB8PSAoY29hbCAmIDB4M2ZmZikgPDwgODsKKwl9CisJd3JsKG1wLCBTRE1BX0NPTkZJRyhtcC0+cG9ydF9udW0pLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBzZXRfdHhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIHVuc2lnbmVkIGludCBkZWxheSkKK3sKKwl1bnNpZ25lZCBpbnQgY29hbCA9ICgobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwMDAwKSAqIGRlbGF5KSAvIDY0OworCisJaWYgKGNvYWwgPiAweDNmZmYpCisJCWNvYWwgPSAweDNmZmY7CisJd3JsKG1wLCBUWF9GSUZPX1VSR0VOVF9USFJFU0hPTEQobXAtPnBvcnRfbnVtKSwgKGNvYWwgJiAweDNmZmYpIDw8IDQpOworfQorCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnI7CisJaW50IGk7CisKKwl3cmwobXAsIElOVF9DQVVTRShtcC0+cG9ydF9udW0pLCAwKTsKKwl3cmwobXAsIElOVF9DQVVTRV9FWFQobXAtPnBvcnRfbnVtKSwgMCk7CisJcmRsKG1wLCBJTlRfQ0FVU0VfRVhUKG1wLT5wb3J0X251bSkpOworCisJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG12NjQzeHhfZXRoX2lycSwKKwkJCSAgSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sCisJCQkgIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZkZXYtPmRldiwgImNhbid0IGFzc2lnbiBpcnFcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlpbml0X21hY190YWJsZXMobXApOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoKG1wLT5yeHFfbWFzayAmICgxIDw8IGkpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJZXJyID0gcnhxX2luaXQobXAsIGkpOworCQlpZiAoZXJyKSB7CisJCQl3aGlsZSAoLS1pID49IDApCisJCQkJaWYgKG1wLT5yeHFfbWFzayAmICgxIDw8IGkpKQorCQkJCQlyeHFfZGVpbml0KG1wLT5yeHEgKyBpKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcnhxX3JlZmlsbChtcC0+cnhxICsgaSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoKG1wLT50eHFfbWFzayAmICgxIDw8IGkpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJZXJyID0gdHhxX2luaXQobXAsIGkpOworCQlpZiAoZXJyKSB7CisJCQl3aGlsZSAoLS1pID49IDApCisJCQkJaWYgKG1wLT50eHFfbWFzayAmICgxIDw8IGkpKQorCQkJCQl0eHFfZGVpbml0KG1wLT50eHEgKyBpKTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwl9CisKKyNpZmRlZiBNVjY0M1hYX0VUSF9OQVBJCisJbmFwaV9lbmFibGUoJm1wLT5uYXBpKTsKKyNlbmRpZgorCisJcG9ydF9zdGFydChtcCk7CisKKwlzZXRfcnhfY29hbChtcCwgMCk7CisJc2V0X3R4X2NvYWwobXAsIDApOworCisJd3JsKG1wLCBJTlRfTUFTS19FWFQobXAtPnBvcnRfbnVtKSwKKwkgICAgSU5UX0VYVF9MSU5LIHwgSU5UX0VYVF9QSFkgfCBJTlRfRVhUX1RYKTsKKworCXdybChtcCwgSU5UX01BU0sobXAtPnBvcnRfbnVtKSwgSU5UX1RYX0VORCB8IElOVF9SWCB8IElOVF9FWFQpOworCisJcmV0dXJuIDA7CisKKworb3V0X2ZyZWU6CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaWYgKG1wLT5yeHFfbWFzayAmICgxIDw8IGkpKQorCQkJcnhxX2RlaW5pdChtcC0+cnhxICsgaSk7CitvdXQ6CisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwb3J0X3Jlc2V0KHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKG1wLT5yeHFfbWFzayAmICgxIDw8IGkpKQorCQkJcnhxX2Rpc2FibGUobXAtPnJ4cSArIGkpOworCQlpZiAobXAtPnR4cV9tYXNrICYgKDEgPDwgaSkpCisJCQl0eHFfZGlzYWJsZShtcC0+dHhxICsgaSk7CisJfQorCXdoaWxlICghKHJkbChtcCwgUE9SVF9TVEFUVVMobXAtPnBvcnRfbnVtKSkgJiBUWF9GSUZPX0VNUFRZKSkKKwkJdWRlbGF5KDEwKTsKKworCS8qIFJlc2V0IHRoZSBFbmFibGUgYml0IGluIHRoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJZGF0YSA9IHJkbChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTChtcC0+cG9ydF9udW0pKTsKKwlkYXRhICY9IH4oU0VSSUFMX1BPUlRfRU5BQkxFCQl8CisJCSAgRE9fTk9UX0ZPUkNFX0xJTktfRkFJTAl8CisJCSAgRk9SQ0VfTElOS19QQVNTKTsKKwl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0wobXAtPnBvcnRfbnVtKSwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisKKwl3cmwobXAsIElOVF9NQVNLKG1wLT5wb3J0X251bSksIDB4MDAwMDAwMDApOworCXJkbChtcCwgSU5UX01BU0sobXAtPnBvcnRfbnVtKSk7CisKKyNpZmRlZiBNVjY0M1hYX0VUSF9OQVBJCisJbmFwaV9kaXNhYmxlKCZtcC0+bmFwaSk7CisjZW5kaWYKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJcG9ydF9yZXNldChtcCk7CisJbWliX2NvdW50ZXJzX3VwZGF0ZShtcCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmIChtcC0+cnhxX21hc2sgJiAoMSA8PCBpKSkKKwkJCXJ4cV9kZWluaXQobXAtPnJ4cSArIGkpOworCQlpZiAobXAtPnR4cV9tYXNrICYgKDEgPDwgaSkpCisJCQl0eHFfZGVpbml0KG1wLT50eHEgKyBpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdjY0M3h4X2V0aF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG1wLT5waHlfYWRkciAhPSAtMSkKKwkJcmV0dXJuIGdlbmVyaWNfbWlpX2lvY3RsKCZtcC0+bWlpLCBpZl9taWkoaWZyKSwgY21kLCBOVUxMKTsKKworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBtdjY0M3h4X2V0aF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobmV3X210dSA8IDY0IHx8IG5ld19tdHUgPiA5NTAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldi0+bXR1ID0gbmV3X210dTsKKwl0eF9zZXRfcmF0ZShtcCwgMTAwMDAwMDAwMCwgMTY3NzcyMTYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBTdG9wIGFuZCB0aGVuIHJlLW9wZW4gdGhlIGludGVyZmFjZS4gVGhpcyB3aWxsIGFsbG9jYXRlIFJYCisJICogc2ticyBvZiB0aGUgbmV3IE1UVS4KKwkgKiBUaGVyZSBpcyBhIHBvc3NpYmxlIGRhbmdlciB0aGF0IHRoZSBvcGVuIHdpbGwgbm90IHN1Y2NlZWQsCisJICogZHVlIHRvIG1lbW9yeSBiZWluZyBmdWxsLgorCSAqLworCW12NjQzeHhfZXRoX3N0b3AoZGV2KTsKKwlpZiAobXY2NDN4eF9ldGhfb3BlbihkZXYpKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZkZXYtPmRldiwKKwkJCSAgICJmYXRhbCBlcnJvciBvbiByZS1vcGVuaW5nIGRldmljZSBhZnRlciAiCisJCQkgICAiTVRVIGNoYW5nZVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHR4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVnbHkpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wOworCisJbXAgPSBjb250YWluZXJfb2YodWdseSwgc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUsIHR4X3RpbWVvdXRfdGFzayk7CisJaWYgKG5ldGlmX3J1bm5pbmcobXAtPmRldikpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShtcC0+ZGV2KTsKKworCQlwb3J0X3Jlc2V0KG1wKTsKKwkJcG9ydF9zdGFydChtcCk7CisKKwkJX190eHFfbWF5YmVfd2FrZShtcC0+dHhxICsgbXAtPnR4cV9wcmltYXJ5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZkZXYtPmRldiwgInR4IHRpbWVvdXRcbiIpOworCisJc2NoZWR1bGVfd29yaygmbXAtPnR4X3RpbWVvdXRfdGFzayk7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwl3cmwobXAsIElOVF9NQVNLKG1wLT5wb3J0X251bSksIDB4MDAwMDAwMDApOworCXJkbChtcCwgSU5UX01BU0sobXAtPnBvcnRfbnVtKSk7CisKKwltdjY0M3h4X2V0aF9pcnEoZGV2LT5pcnEsIGRldik7CisKKwl3cmwobXAsIElOVF9NQVNLKG1wLT5wb3J0X251bSksIElOVF9UWF9FTkQgfCBJTlRfUlggfCBJTlRfRVhUKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWRkciwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB2YWw7CisKKwlzbWlfcmVnX3JlYWQobXAsIGFkZHIsIHJlZywgJnZhbCk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhZGRyLCBpbnQgcmVnLCBpbnQgdmFsKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisJc21pX3JlZ193cml0ZShtcCwgYWRkciwgcmVnLCB2YWwpOworfQorCisKKy8qIHBsYXRmb3JtIGdsdWUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK212NjQzeHhfZXRoX2NvbmZfbWJ1c193aW5kb3dzKHN0cnVjdCBtdjY0M3h4X2V0aF9zaGFyZWRfcHJpdmF0ZSAqbXNwLAorCQkJICAgICAgc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBtc3AtPmJhc2U7CiAJdTMyIHdpbl9lbmFibGU7CiAJdTMyIHdpbl9wcm90ZWN0OwogCWludCBpOwpAQCAtMjA0MiwxNSArMjE2OSwzOSBAQAogCW1zcC0+d2luX3Byb3RlY3QgPSB3aW5fcHJvdGVjdDsKIH0KIAorc3RhdGljIHZvaWQgaW5mZXJfaHdfcGFyYW1zKHN0cnVjdCBtdjY0M3h4X2V0aF9zaGFyZWRfcHJpdmF0ZSAqbXNwKQoreworCS8qCisJICogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgMTQtYml0IGNvYWwgbGltaXQgZmllbGQgaW4gYml0cworCSAqIFsyMTo4XSwgb3IgYSAxNi1iaXQgY29hbCBsaW1pdCBpbiBiaXRzIFsyNSwyMTo3XSBvZiB0aGUKKwkgKiBTRE1BIGNvbmZpZyByZWdpc3Rlci4KKwkgKi8KKwl3cml0ZWwoMHgwMjAwMDAwMCwgbXNwLT5iYXNlICsgU0RNQV9DT05GSUcoMCkpOworCWlmIChyZWFkbChtc3AtPmJhc2UgKyBTRE1BX0NPTkZJRygwKSkgJiAweDAyMDAwMDAwKQorCQltc3AtPmV4dGVuZGVkX3J4X2NvYWxfbGltaXQgPSAxOworCWVsc2UKKwkJbXNwLT5leHRlbmRlZF9yeF9jb2FsX2xpbWl0ID0gMDsKKworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgVFggcmF0ZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgaW4gdGhlCisJICogb2xkIG9yIHRoZSBuZXcgcGxhY2UuCisJICovCisJd3JpdGVsKDEsIG1zcC0+YmFzZSArIFRYX0JXX01UVV9NT1ZFRCgwKSk7CisJaWYgKHJlYWRsKG1zcC0+YmFzZSArIFRYX0JXX01UVV9NT1ZFRCgwKSkgJiAxKQorCQltc3AtPnR4X2J3X2NvbnRyb2xfbW92ZWQgPSAxOworCWVsc2UKKwkJbXNwLT50eF9id19jb250cm9sX21vdmVkID0gMDsKK30KKwogc3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdGF0aWMgaW50IG12NjQzeHhfdmVyc2lvbl9wcmludGVkID0gMDsKKwlzdGF0aWMgaW50IG12NjQzeHhfZXRoX3ZlcnNpb25fcHJpbnRlZCA9IDA7CiAJc3RydWN0IG12NjQzeHhfZXRoX3NoYXJlZF9wbGF0Zm9ybV9kYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBtdjY0M3h4X3NoYXJlZF9wcml2YXRlICptc3A7CisJc3RydWN0IG12NjQzeHhfZXRoX3NoYXJlZF9wcml2YXRlICptc3A7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAotCWlmICghbXY2NDN4eF92ZXJzaW9uX3ByaW50ZWQrKykKKwlpZiAoIW12NjQzeHhfZXRoX3ZlcnNpb25fcHJpbnRlZCsrKQogCQlwcmludGsoS0VSTl9OT1RJQ0UgIk1WLTY0M3h4IDEwLzEwMC8xMDAwIEV0aGVybmV0IERyaXZlclxuIik7CiAKIAlyZXQgPSAtRUlOVkFMOwpAQCAtMjA2NCwxNCArMjIxNSwxMSBAQAogCQlnb3RvIG91dDsKIAltZW1zZXQobXNwLCAwLCBzaXplb2YoKm1zcCkpOwogCi0JbXNwLT5ldGhfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7Ci0JaWYgKG1zcC0+ZXRoX2Jhc2UgPT0gTlVMTCkKKwltc3AtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmIChtc3AtPmJhc2UgPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZTsKIAogCXNwaW5fbG9ja19pbml0KCZtc3AtPnBoeV9sb2NrKTsKLQltc3AtPnRfY2xrID0gKHBkICE9IE5VTEwgJiYgcGQtPnRfY2xrICE9IDApID8gcGQtPnRfY2xrIDogMTMzMDAwMDAwOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbXNwKTsKIAogCS8qCiAJICogKFJlLSlwcm9ncmFtIE1CVVMgcmVtYXBwaW5nIHdpbmRvd3MgaWYgd2UgYXJlIGFza2VkIHRvLgpAQCAtMjA3OSw2ICsyMjI3LDE0IEBACiAJaWYgKHBkICE9IE5VTEwgJiYgcGQtPmRyYW0gIT0gTlVMTCkKIAkJbXY2NDN4eF9ldGhfY29uZl9tYnVzX3dpbmRvd3MobXNwLCBwZC0+ZHJhbSk7CiAKKwkvKgorCSAqIERldGVjdCBoYXJkd2FyZSBwYXJhbWV0ZXJzLgorCSAqLworCW1zcC0+dF9jbGsgPSAocGQgIT0gTlVMTCAmJiBwZC0+dF9jbGsgIT0gMCkgPyBwZC0+dF9jbGsgOiAxMzMwMDAwMDA7CisJaW5mZXJfaHdfcGFyYW1zKG1zcCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtc3ApOworCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlOgpAQCAtMjA4OSw1NiArMjI0NSwzMTAgQEAKIAogc3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG12NjQzeHhfc2hhcmVkX3ByaXZhdGUgKm1zcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtdjY0M3h4X2V0aF9zaGFyZWRfcHJpdmF0ZSAqbXNwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlpb3VubWFwKG1zcC0+ZXRoX2Jhc2UpOworCWlvdW5tYXAobXNwLT5iYXNlKTsKIAlrZnJlZShtc3ApOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG12NjQzeHhfZXRoX3NoYXJlZF9wcm9iZSwKKwkucmVtb3ZlCQk9IG12NjQzeHhfZXRoX3NoYXJlZF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBNVjY0M1hYX0VUSF9TSEFSRURfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHBoeV9hZGRyX3NldChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIGludCBwaHlfYWRkcikKK3sKKwlpbnQgYWRkcl9zaGlmdCA9IDUgKiBtcC0+cG9ydF9udW07CisJdTMyIGRhdGE7CisKKwlkYXRhID0gcmRsKG1wLCBQSFlfQUREUik7CisJZGF0YSAmPSB+KDB4MWYgPDwgYWRkcl9zaGlmdCk7CisJZGF0YSB8PSAocGh5X2FkZHIgJiAweDFmKSA8PCBhZGRyX3NoaWZ0OworCXdybChtcCwgUEhZX0FERFIsIGRhdGEpOworfQorCitzdGF0aWMgaW50IHBoeV9hZGRyX2dldChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXApCit7CisJdW5zaWduZWQgaW50IGRhdGE7CisKKwlkYXRhID0gcmRsKG1wLCBQSFlfQUREUik7CisKKwlyZXR1cm4gKGRhdGEgPj4gKDUgKiBtcC0+cG9ydF9udW0pKSAmIDB4MWY7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wYXJhbXMoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLAorCQkgICAgICAgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKnBkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBtcC0+ZGV2OworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocGQtPm1hY19hZGRyKSkKKwkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHBkLT5tYWNfYWRkciwgNik7CisJZWxzZQorCQl1Y19hZGRyX2dldChtcCwgZGV2LT5kZXZfYWRkcik7CisKKwlpZiAocGQtPnBoeV9hZGRyID09IC0xKSB7CisJCW1wLT5zaGFyZWRfc21pID0gTlVMTDsKKwkJbXAtPnBoeV9hZGRyID0gLTE7CisJfSBlbHNlIHsKKwkJbXAtPnNoYXJlZF9zbWkgPSBtcC0+c2hhcmVkOworCQlpZiAocGQtPnNoYXJlZF9zbWkgIT0gTlVMTCkKKwkJCW1wLT5zaGFyZWRfc21pID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGQtPnNoYXJlZF9zbWkpOworCisJCWlmIChwZC0+Zm9yY2VfcGh5X2FkZHIgfHwgcGQtPnBoeV9hZGRyKSB7CisJCQltcC0+cGh5X2FkZHIgPSBwZC0+cGh5X2FkZHIgJiAweDNmOworCQkJcGh5X2FkZHJfc2V0KG1wLCBtcC0+cGh5X2FkZHIpOworCQl9IGVsc2UgeworCQkJbXAtPnBoeV9hZGRyID0gcGh5X2FkZHJfZ2V0KG1wKTsKKwkJfQorCX0KKworCW1wLT5kZWZhdWx0X3J4X3Jpbmdfc2l6ZSA9IERFRkFVTFRfUlhfUVVFVUVfU0laRTsKKwlpZiAocGQtPnJ4X3F1ZXVlX3NpemUpCisJCW1wLT5kZWZhdWx0X3J4X3Jpbmdfc2l6ZSA9IHBkLT5yeF9xdWV1ZV9zaXplOworCW1wLT5yeF9kZXNjX3NyYW1fYWRkciA9IHBkLT5yeF9zcmFtX2FkZHI7CisJbXAtPnJ4X2Rlc2Nfc3JhbV9zaXplID0gcGQtPnJ4X3NyYW1fc2l6ZTsKKworCWlmIChwZC0+cnhfcXVldWVfbWFzaykKKwkJbXAtPnJ4cV9tYXNrID0gcGQtPnJ4X3F1ZXVlX21hc2s7CisJZWxzZQorCQltcC0+cnhxX21hc2sgPSAweDAxOworCW1wLT5yeHFfcHJpbWFyeSA9IGZscyhtcC0+cnhxX21hc2spIC0gMTsKKworCW1wLT5kZWZhdWx0X3R4X3Jpbmdfc2l6ZSA9IERFRkFVTFRfVFhfUVVFVUVfU0laRTsKKwlpZiAocGQtPnR4X3F1ZXVlX3NpemUpCisJCW1wLT5kZWZhdWx0X3R4X3Jpbmdfc2l6ZSA9IHBkLT50eF9xdWV1ZV9zaXplOworCW1wLT50eF9kZXNjX3NyYW1fYWRkciA9IHBkLT50eF9zcmFtX2FkZHI7CisJbXAtPnR4X2Rlc2Nfc3JhbV9zaXplID0gcGQtPnR4X3NyYW1fc2l6ZTsKKworCWlmIChwZC0+dHhfcXVldWVfbWFzaykKKwkJbXAtPnR4cV9tYXNrID0gcGQtPnR4X3F1ZXVlX21hc2s7CisJZWxzZQorCQltcC0+dHhxX21hc2sgPSAweDAxOworCW1wLT50eHFfcHJpbWFyeSA9IGZscyhtcC0+dHhxX21hc2spIC0gMTsKK30KKworc3RhdGljIGludCBwaHlfZGV0ZWN0KHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKwl1bnNpZ25lZCBpbnQgZGF0YTI7CisKKwlzbWlfcmVnX3JlYWQobXAsIG1wLT5waHlfYWRkciwgMCwgJmRhdGEpOworCXNtaV9yZWdfd3JpdGUobXAsIG1wLT5waHlfYWRkciwgMCwgZGF0YSBeIDB4MTAwMCk7CisKKwlzbWlfcmVnX3JlYWQobXAsIG1wLT5waHlfYWRkciwgMCwgJmRhdGEyKTsKKwlpZiAoKChkYXRhIF4gZGF0YTIpICYgMHgxMDAwKSA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNtaV9yZWdfd3JpdGUobXAsIG1wLT5waHlfYWRkciwgMCwgZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaHlfaW5pdChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsCisJCSAgICBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqcGQpCit7CisJc3RydWN0IGV0aHRvb2xfY21kIGNtZDsKKwlpbnQgZXJyOworCisJZXJyID0gcGh5X2RldGVjdChtcCk7CisJaWYgKGVycikgeworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJm1wLT5kZXYtPmRldiwKKwkJCSAgICJubyBQSFkgZGV0ZWN0ZWQgYXQgYWRkciAlZFxuIiwgbXAtPnBoeV9hZGRyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJcGh5X3Jlc2V0KG1wKTsKKworCW1wLT5taWkucGh5X2lkID0gbXAtPnBoeV9hZGRyOworCW1wLT5taWkucGh5X2lkX21hc2sgPSAweDNmOworCW1wLT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKKwltcC0+bWlpLmRldiA9IG1wLT5kZXY7CisJbXAtPm1paS5tZGlvX3JlYWQgPSBtdjY0M3h4X2V0aF9tZGlvX3JlYWQ7CisJbXAtPm1paS5tZGlvX3dyaXRlID0gbXY2NDN4eF9ldGhfbWRpb193cml0ZTsKKworCW1wLT5taWkuc3VwcG9ydHNfZ21paSA9IG1paV9jaGVja19nbWlpX3N1cHBvcnQoJm1wLT5taWkpOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKworCWNtZC5wb3J0ID0gUE9SVF9NSUk7CisJY21kLnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwljbWQucGh5X2FkZHJlc3MgPSBtcC0+cGh5X2FkZHI7CisJaWYgKHBkLT5zcGVlZCA9PSAwKSB7CisJCWNtZC5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CisJCWNtZC5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJY21kLmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgIHwKKwkJCQkgIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsICB8CisJCQkJICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCSAgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsOworCQlpZiAobXAtPm1paS5zdXBwb3J0c19nbWlpKQorCQkJY21kLmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisJfSBlbHNlIHsKKwkJY21kLmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJCWNtZC5zcGVlZCA9IHBkLT5zcGVlZDsKKwkJY21kLmR1cGxleCA9IHBkLT5kdXBsZXg7CisJfQorCisJdXBkYXRlX3BzY3IobXAsIGNtZC5zcGVlZCwgY21kLmR1cGxleCk7CisJbXY2NDN4eF9ldGhfc2V0X3NldHRpbmdzKG1wLT5kZXYsICZjbWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqcGQ7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJaW50IGVycjsKKworCXBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkID09IE5VTEwpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKKwkJCSAgICJubyBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBkLT5zaGFyZWQgPT0gTlVMTCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkJICAgIm5vIG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEtPnNoYXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSkpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtcCk7CisKKwltcC0+c2hhcmVkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGQtPnNoYXJlZCk7CisJbXAtPnBvcnRfbnVtID0gcGQtPnBvcnRfbnVtYmVyOworCisJbXAtPmRldiA9IGRldjsKKyNpZmRlZiBNVjY0M1hYX0VUSF9OQVBJCisJbmV0aWZfbmFwaV9hZGQoZGV2LCAmbXAtPm5hcGksIG12NjQzeHhfZXRoX3BvbGwsIDY0KTsKKyNlbmRpZgorCisJc2V0X3BhcmFtcyhtcCwgcGQpOworCisJc3Bpbl9sb2NrX2luaXQoJm1wLT5sb2NrKTsKKworCW1pYl9jb3VudGVyc19jbGVhcihtcCk7CisJSU5JVF9XT1JLKCZtcC0+dHhfdGltZW91dF90YXNrLCB0eF90aW1lb3V0X3Rhc2spOworCisJaWYgKG1wLT5waHlfYWRkciAhPSAtMSkgeworCQllcnIgPSBwaHlfaW5pdChtcCwgcGQpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm12NjQzeHhfZXRoX2V0aHRvb2xfb3BzKTsKKwl9IGVsc2UgeworCQlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbXY2NDN4eF9ldGhfZXRodG9vbF9vcHNfcGh5bGVzcyk7CisJfQorCisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCUJVR19PTighcmVzKTsKKwlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CisKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG12NjQzeHhfZXRoX3htaXQ7CisJZGV2LT5vcGVuID0gbXY2NDN4eF9ldGhfb3BlbjsKKwlkZXYtPnN0b3AgPSBtdjY0M3h4X2V0aF9zdG9wOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbXY2NDN4eF9ldGhfc2V0X3J4X21vZGU7CisJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBtdjY0M3h4X2V0aF9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5kb19pb2N0bCA9IG12NjQzeHhfZXRoX2lvY3RsOworCWRldi0+Y2hhbmdlX210dSA9IG12NjQzeHhfZXRoX2NoYW5nZV9tdHU7CisJZGV2LT50eF90aW1lb3V0ID0gbXY2NDN4eF9ldGhfdHhfdGltZW91dDsKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCWRldi0+cG9sbF9jb250cm9sbGVyID0gbXY2NDN4eF9ldGhfbmV0cG9sbDsKKyNlbmRpZgorCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAyICogSFo7CisJZGV2LT5iYXNlX2FkZHIgPSAwOworCisjaWZkZWYgTVY2NDNYWF9FVEhfQ0hFQ0tTVU1fT0ZGTE9BRF9UWAorCS8qCisJICogWmVybyBjb3B5IGNhbiBvbmx5IHdvcmsgaWYgd2UgdXNlIERpc2NvdmVyeSBJSSBtZW1vcnkuIEVsc2UsIHdlIHdpbGwKKwkgKiBoYXZlIHRvIG1hcCB0aGUgYnVmZmVycyB0byBJU0EgbWVtb3J5IHdoaWNoIGlzIG9ubHkgMTYgTUIKKwkgKi8KKwlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKKyNlbmRpZgorCisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKKworCWlmIChtcC0+c2hhcmVkLT53aW5fcHJvdGVjdCkKKwkJd3JsKG1wLCBXSU5ET1dfUFJPVEVDVChtcC0+cG9ydF9udW0pLCBtcC0+c2hhcmVkLT53aW5fcHJvdGVjdCk7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZkZXYtPmRldiwgInBvcnQgJWQgd2l0aCBNQUMgYWRkcmVzcyAlc1xuIiwKKwkJICAgbXAtPnBvcnRfbnVtLCBwcmludF9tYWMobWFjLCBkZXYtPmRldl9hZGRyKSk7CisKKwlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0cpCisJCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZkZXYtPmRldiwgInNjYXR0ZXIvZ2F0aGVyIGVuYWJsZWRcbiIpOworCisJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pCisJCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZkZXYtPmRldiwgInR4IGNoZWNrc3VtIG9mZmxvYWRcbiIpOworCisjaWZkZWYgTVY2NDNYWF9FVEhfTkFQSQorCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZkZXYtPmRldiwgIm5hcGkgZW5hYmxlZFxuIik7CisjZW5kaWYKKworCWlmIChtcC0+dHhfZGVzY19zcmFtX3NpemUgPiAwKQorCQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmZGV2LT5kZXYsICJjb25maWd1cmVkIHdpdGggc3JhbVxuIik7CisKKwlyZXR1cm4gMDsKKworb3V0OgorCWZyZWVfbmV0ZGV2KGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJdW5yZWdpc3Rlcl9uZXRkZXYobXAtPmRldik7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmcmVlX25ldGRldihtcC0+ZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBpbnQgcG9ydF9udW0gPSBtcC0+cG9ydF9udW07CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzIG9uIGV0aGVybmV0IHBvcnQgKi8KLQl3cmwobXAsIElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSksIDApOwotCXJkbChtcCwgSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSk7CisJd3JsKG1wLCBJTlRfTUFTSyhtcC0+cG9ydF9udW0pLCAwKTsKKwlyZGwobXAsIElOVF9NQVNLKG1wLT5wb3J0X251bSkpOwogCi0JZXRoX3BvcnRfcmVzZXQobXApOworCWlmIChuZXRpZl9ydW5uaW5nKG1wLT5kZXYpKQorCQlwb3J0X3Jlc2V0KG1wKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXY2NDN4eF9ldGhfZHJpdmVyID0gewotCS5wcm9iZSA9IG12NjQzeHhfZXRoX3Byb2JlLAotCS5yZW1vdmUgPSBtdjY0M3h4X2V0aF9yZW1vdmUsCi0JLnNodXRkb3duID0gbXY2NDN4eF9ldGhfc2h1dGRvd24sCisJLnByb2JlCQk9IG12NjQzeHhfZXRoX3Byb2JlLAorCS5yZW1vdmUJCT0gbXY2NDN4eF9ldGhfcmVtb3ZlLAorCS5zaHV0ZG93bgk9IG12NjQzeHhfZXRoX3NodXRkb3duLAogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gTVY2NDNYWF9FVEhfTkFNRSwKKwkJLm5hbWUJPSBNVjY0M1hYX0VUSF9OQU1FLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlciA9IHsKLQkucHJvYmUgPSBtdjY0M3h4X2V0aF9zaGFyZWRfcHJvYmUsCi0JLnJlbW92ZSA9IG12NjQzeHhfZXRoX3NoYXJlZF9yZW1vdmUsCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSBNVjY0M1hYX0VUSF9TSEFSRURfTkFNRSwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLX07Ci0KLS8qCi0gKiBtdjY0M3h4X2luaXRfbW9kdWxlCi0gKgotICogUmVnaXN0ZXJzIHRoZSBuZXR3b3JrIGRyaXZlcnMgaW50byB0aGUgTGludXgga2VybmVsCi0gKgotICogSW5wdXQgOglOL0EKLSAqCi0gKiBPdXRwdXQgOglOL0EKLSAqLwotc3RhdGljIGludCBfX2luaXQgbXY2NDN4eF9pbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXY2NDN4eF9ldGhfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgcmM7CiAKQEAgLTIxNDgsMTIxOCArMjU1OCwyMSBAQAogCQlpZiAocmMpCiAJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CiAJfQorCiAJcmV0dXJuIHJjOwogfQorbW9kdWxlX2luaXQobXY2NDN4eF9ldGhfaW5pdF9tb2R1bGUpOwogCi0vKgotICogbXY2NDN4eF9jbGVhbnVwX21vZHVsZQotICoKLSAqIFJlZ2lzdGVycyB0aGUgbmV0d29yayBkcml2ZXJzIGludG8gdGhlIExpbnV4IGtlcm5lbAotICoKLSAqIElucHV0IDoJTi9BCi0gKgotICogT3V0cHV0IDoJTi9BCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBtdjY0M3h4X2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbXY2NDN4eF9ldGhfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfZHJpdmVyKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CiB9Cittb2R1bGVfZXhpdChtdjY0M3h4X2V0aF9jbGVhbnVwX21vZHVsZSk7CiAKLW1vZHVsZV9pbml0KG12NjQzeHhfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQobXY2NDN4eF9jbGVhbnVwX21vZHVsZSk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoCSJSYWJlZWggS2hvdXJ5LCBBc3NhZiBIb2ZmbWFuLCBNYXR0aGV3IERoYXJtLCBNYW5pc2ggTGFjaHdhbmkiCi0JCSIgYW5kIERhbGUgRmFybnN3b3J0aCIpOworTU9EVUxFX0FVVEhPUigiUmFiZWVoIEtob3VyeSwgQXNzYWYgSG9mZm1hbiwgTWF0dGhldyBEaGFybSwgIgorCSAgICAgICJNYW5pc2ggTGFjaHdhbmksIERhbGUgRmFybnN3b3J0aCBhbmQgTGVubmVydCBCdXl0ZW5oZWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRXRoZXJuZXQgZHJpdmVyIGZvciBNYXJ2ZWxsIE1WNjQzWFgiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06IiBNVjY0M1hYX0VUSF9OQU1FKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06IiBNVjY0M1hYX0VUSF9TSEFSRURfTkFNRSk7Ci0KLS8qCi0gKiBUaGUgc2Vjb25kIHBhcnQgaXMgdGhlIGxvdyBsZXZlbCBkcml2ZXIgb2YgdGhlIGdpZ0UgZXRoZXJuZXQgcG9ydHMuCi0gKi8KLQotLyoKLSAqIE1hcnZlbGwncyBHaWdhYml0IEV0aGVybmV0IGNvbnRyb2xsZXIgbG93IGxldmVsIGRyaXZlcgotICoKLSAqIERFU0NSSVBUSU9OOgotICoJVGhpcyBmaWxlIGludHJvZHVjZSBsb3cgbGV2ZWwgQVBJIHRvIE1hcnZlbGwncyBHaWdhYml0IEV0aGVybmV0Ci0gKgkJY29udHJvbGxlci4gVGhpcyBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIgZHJpdmVyIEFQSSBjb250cm9scwotICoJCTEpIE9wZXJhdGlvbnMgKGkuZS4gcG9ydCBpbml0LCBzdGFydCwgcmVzZXQgZXRjJykuCi0gKgkJMikgRGF0YSBmbG93IChpLmUuIHBvcnQgc2VuZCwgcmVjZWl2ZSBldGMnKS4KLSAqCQlFYWNoIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydCBpcyBjb250cm9sbGVkIHZpYQotICoJCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUuCi0gKgkJVGhpcyBzdHJ1Y3QgaW5jbHVkZXMgdXNlciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFzIHdlbGwgYXMKLSAqCQlkcml2ZXIgaW50ZXJuYWwgZGF0YSBuZWVkZWQgZm9yIGl0cyBvcGVyYXRpb25zLgotICoKLSAqCQlTdXBwb3J0ZWQgRmVhdHVyZXM6Ci0gKgkJLSBUaGlzIGxvdyBsZXZlbCBkcml2ZXIgaXMgT1MgaW5kZXBlbmRlbnQuIEFsbG9jYXRpbmcgbWVtb3J5IGZvcgotICoJCSAgdGhlIGRlc2NyaXB0b3IgcmluZ3MgYW5kIGJ1ZmZlcnMgYXJlIG5vdCB3aXRoaW4gdGhlIHNjb3BlIG9mCi0gKgkJICB0aGlzIGRyaXZlci4KLSAqCQktIFRoZSB1c2VyIGlzIGZyZWUgZnJvbSBSeC9UeCBxdWV1ZSBtYW5hZ2luZy4KLSAqCQktIFRoaXMgbG93IGxldmVsIGRyaXZlciBpbnRyb2R1Y2UgZnVuY3Rpb25hbGl0eSBBUEkgdGhhdCBlbmFibGUKLSAqCQkgIHRoZSB0byBvcGVyYXRlIE1hcnZlbGwncyBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIgaW4gYQotICoJCSAgY29udmVuaWVudCB3YXkuCi0gKgkJLSBTaW1wbGUgR2lnYWJpdCBFdGhlcm5ldCBwb3J0IG9wZXJhdGlvbiBBUEkuCi0gKgkJLSBTaW1wbGUgR2lnYWJpdCBFdGhlcm5ldCBwb3J0IGRhdGEgZmxvdyBBUEkuCi0gKgkJLSBEYXRhIGZsb3cgYW5kIG9wZXJhdGlvbiBBUEkgc3VwcG9ydCBwZXIgcXVldWUgZnVuY3Rpb25hbGl0eS4KLSAqCQktIFN1cHBvcnQgY2FjaGVkIGRlc2NyaXB0b3JzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCi0gKgkJLSBFbmFibGUgYWNjZXNzIHRvIGFsbCBmb3VyIERSQU0gYmFua3MgYW5kIGludGVybmFsIFNSQU0gbWVtb3J5Ci0gKgkJICBzcGFjZXMuCi0gKgkJLSBQSFkgYWNjZXNzIGFuZCBjb250cm9sIEFQSS4KLSAqCQktIFBvcnQgY29udHJvbCByZWdpc3RlciBjb25maWd1cmF0aW9uIEFQSS4KLSAqCQktIEZ1bGwgY29udHJvbCBvdmVyIFVuaWNhc3QgYW5kIE11bHRpY2FzdCBNQUMgY29uZmlndXJhdGlvbnMuCi0gKgotICoJCU9wZXJhdGlvbiBmbG93OgotICoKLSAqCQlJbml0aWFsaXphdGlvbiBwaGFzZQotICoJCVRoaXMgcGhhc2UgY29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSB0aGUKLSAqCQltdjY0M3h4X3ByaXZhdGUgc3RydWN0LgotICoJCVVzZXIgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHBvcnQgY29uZmlndXJhdGlvbiBoYXMgdG8gYmUgc2V0Ci0gKgkJcHJpb3IgdG8gY2FsbGluZyB0aGUgcG9ydCBpbml0aWFsaXphdGlvbiByb3V0aW5lLgotICoKLSAqCQlJbiB0aGlzIHBoYXNlIGFueSBwb3J0IFR4L1J4IGFjdGl2aXR5IGlzIGhhbHRlZCwgTUlCIGNvdW50ZXJzCi0gKgkJYXJlIGNsZWFyZWQsIFBIWSBhZGRyZXNzIGlzIHNldCBhY2NvcmRpbmcgdG8gdXNlciBwYXJhbWV0ZXIgYW5kCi0gKgkJYWNjZXNzIHRvIERSQU0gYW5kIGludGVybmFsIFNSQU0gbWVtb3J5IHNwYWNlcy4KLSAqCi0gKgkJRHJpdmVyIHJpbmcgaW5pdGlhbGl6YXRpb24KLSAqCQlBbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlIGRlc2NyaXB0b3IgcmluZ3MgYW5kIGJ1ZmZlcnMgaXMgbm90Ci0gKgkJd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIGRyaXZlci4gVGh1cywgdGhlIHVzZXIgaXMgcmVxdWlyZWQgdG8KLSAqCQlhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBkZXNjcmlwdG9ycyByaW5nIGFuZCBidWZmZXJzLiBUaG9zZQotICoJCW1lbW9yeSBwYXJhbWV0ZXJzIGFyZSB1c2VkIGJ5IHRoZSBSeCBhbmQgVHggcmluZyBpbml0aWFsaXphdGlvbgotICoJCXJvdXRpbmVzIGluIG9yZGVyIHRvIGN1cnZlIHRoZSBkZXNjcmlwdG9yIGxpbmtlZCBsaXN0IGluIGEgZm9ybQotICoJCW9mIGEgcmluZy4KLSAqCQlOb3RlOiBQYXkgc3BlY2lhbCBhdHRlbnRpb24gdG8gYWxpZ25tZW50IGlzc3VlcyB3aGVuIHVzaW5nCi0gKgkJY2FjaGVkIGRlc2NyaXB0b3JzL2J1ZmZlcnMuIEluIHRoaXMgcGhhc2UgdGhlIGRyaXZlciBzdG9yZQotICoJCWluZm9ybWF0aW9uIGluIHRoZSBtdjY0M3h4X3ByaXZhdGUgc3RydWN0IHJlZ2FyZGluZyBlYWNoIHF1ZXVlCi0gKgkJcmluZy4KLSAqCi0gKgkJRHJpdmVyIHN0YXJ0Ci0gKgkJVGhpcyBwaGFzZSBwcmVwYXJlcyB0aGUgRXRoZXJuZXQgcG9ydCBmb3IgUnggYW5kIFR4IGFjdGl2aXR5LgotICoJCUl0IHVzZXMgdGhlIGluZm9ybWF0aW9uIHN0b3JlZCBpbiB0aGUgbXY2NDN4eF9wcml2YXRlIHN0cnVjdCB0bwotICoJCWluaXRpYWxpemUgdGhlIHZhcmlvdXMgcG9ydCByZWdpc3RlcnMuCi0gKgotICoJCURhdGEgZmxvdzoKLSAqCQlBbGwgcGFja2V0IHJlZmVyZW5jZXMgdG8vZnJvbSB0aGUgZHJpdmVyIGFyZSBkb25lIHVzaW5nCi0gKgkJc3RydWN0IHBrdF9pbmZvLgotICoJCVRoaXMgc3RydWN0IGlzIGEgdW5pZmllZCBzdHJ1Y3QgdXNlZCB3aXRoIFJ4IGFuZCBUeCBvcGVyYXRpb25zLgotICoJCVRoaXMgd2F5IHRoZSB1c2VyIGlzIG5vdCByZXF1aXJlZCB0byBiZSBmYW1pbGlhciB3aXRoIG5laXRoZXIKLSAqCQlUeCBub3IgUnggZGVzY3JpcHRvcnMgc3RydWN0dXJlcy4KLSAqCQlUaGUgZHJpdmVyJ3MgZGVzY3JpcHRvcnMgcmluZ3MgYXJlIG1hbmFnZW1lbnQgYnkgaW5kZXhlcy4KLSAqCQlUaG9zZSBpbmRleGVzIGNvbnRyb2xzIHRoZSByaW5nIHJlc291cmNlcyBhbmQgdXNlZCB0byBpbmRpY2F0ZQotICoJCWEgU1cgcmVzb3VyY2UgZXJyb3I6Ci0gKgkJJ2N1cnJlbnQnCi0gKgkJVGhpcyBpbmRleCBwb2ludHMgdG8gdGhlIGN1cnJlbnQgYXZhaWxhYmxlIHJlc291cmNlIGZvciB1c2UuIEZvcgotICoJCWV4YW1wbGUgaW4gUnggcHJvY2VzcyB0aGlzIGluZGV4IHdpbGwgcG9pbnQgdG8gdGhlIGRlc2NyaXB0b3IKLSAqCQl0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB1c2VyIHVwb24gY2FsbGluZyB0aGUgcmVjZWl2ZQotICoJCXJvdXRpbmUuICBJbiBUeCBwcm9jZXNzLCB0aGlzIGluZGV4IHdpbGwgcG9pbnQgdG8gdGhlIGRlc2NyaXB0b3IKLSAqCQl0aGF0IHdpbGwgYmUgYXNzaWduZWQgd2l0aCB0aGUgdXNlciBwYWNrZXQgaW5mbyBhbmQgdHJhbnNtaXR0ZWQuCi0gKgkJJ3VzZWQnCi0gKgkJVGhpcyBpbmRleCBwb2ludHMgdG8gdGhlIGRlc2NyaXB0b3IgdGhhdCBuZWVkIHRvIHJlc3RvcmUgaXRzCi0gKgkJcmVzb3VyY2VzLiBGb3IgZXhhbXBsZSBpbiBSeCBwcm9jZXNzLCB1c2luZyB0aGUgUnggYnVmZmVyIHJldHVybgotICoJCUFQSSB3aWxsIGF0dGFjaCB0aGUgYnVmZmVyIHJldHVybmVkIGluIHBhY2tldCBpbmZvIHRvIHRoZQotICoJCWRlc2NyaXB0b3IgcG9pbnRlZCBieSAndXNlZCcuIEluIFR4IHByb2Nlc3MsIHVzaW5nIHRoZSBUeAotICoJCWRlc2NyaXB0b3IgcmV0dXJuIHdpbGwgbWVyZWx5IHJldHVybiB0aGUgdXNlciBwYWNrZXQgaW5mbyB3aXRoCi0gKgkJdGhlIGNvbW1hbmQgc3RhdHVzIG9mIHRoZSB0cmFuc21pdHRlZCBidWZmZXIgcG9pbnRlZCBieSB0aGUKLSAqCQkndXNlZCcgaW5kZXguIE5ldmVydGhlbGVzcywgaXQgaXMgZXNzZW50aWFsIHRvIHVzZSB0aGlzIHJvdXRpbmUKLSAqCQl0byB1cGRhdGUgdGhlICd1c2VkJyBpbmRleC4KLSAqCQknZmlyc3QnCi0gKgkJVGhpcyBpbmRleCBzdXBwb3J0cyBUeCBTY2F0dGVyLUdhdGhlci4gSXQgcG9pbnRzIHRvIHRoZSBmaXJzdAotICoJCWRlc2NyaXB0b3Igb2YgYSBwYWNrZXQgYXNzZW1ibGVkIG9mIG11bHRpcGxlIGJ1ZmZlcnMuIEZvcgotICoJCWV4YW1wbGUgd2hlbiBpbiBtaWRkbGUgb2YgU3VjaCBwYWNrZXQgd2UgaGF2ZSBhIFR4IHJlc291cmNlCi0gKgkJZXJyb3IgdGhlICdjdXJyJyBpbmRleCBnZXQgdGhlIHZhbHVlIG9mICdmaXJzdCcgdG8gaW5kaWNhdGUKLSAqCQl0aGF0IHRoZSByaW5nIHJldHVybmVkIHRvIGl0cyBzdGF0ZSBiZWZvcmUgdHJ5aW5nIHRvIHRyYW5zbWl0Ci0gKgkJdGhpcyBwYWNrZXQuCi0gKgotICoJCVJlY2VpdmUgb3BlcmF0aW9uOgotICoJCVRoZSBldGhfcG9ydF9yZWNlaXZlIEFQSSBzZXQgdGhlIHBhY2tldCBpbmZvcm1hdGlvbiBzdHJ1Y3QsCi0gKgkJcGFzc2VkIGJ5IHRoZSBjYWxsZXIsIHdpdGggcmVjZWl2ZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUKLSAqCQknY3VycmVudCcgU0RNQSBkZXNjcmlwdG9yLgotICoJCUl0IGlzIHRoZSB1c2VyIHJlc3BvbnNpYmlsaXR5IHRvIHJldHVybiB0aGlzIHJlc291cmNlIGJhY2sKLSAqCQl0byB0aGUgUnggZGVzY3JpcHRvciByaW5nIHRvIGVuYWJsZSB0aGUgcmV1c2Ugb2YgdGhpcyBzb3VyY2UuCi0gKgkJUmV0dXJuIFJ4IHJlc291cmNlIGlzIGRvbmUgdXNpbmcgdGhlIGV0aF9yeF9yZXR1cm5fYnVmZiBBUEkuCi0gKgotICoJUHJpb3IgdG8gY2FsbGluZyB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBldGhfcG9ydF9pbml0KCkgdGhlIHVzZXIKLSAqCW11c3Qgc2V0IHRoZSBmb2xsb3dpbmcgZmllbGRzIHVuZGVyIG12NjQzeHhfcHJpdmF0ZSBzdHJ1Y3Q6Ci0gKglwb3J0X251bQkJVXNlciBFdGhlcm5ldCBwb3J0IG51bWJlci4KLSAqCXBvcnRfY29uZmlnCQlVc2VyIHBvcnQgY29uZmlndXJhdGlvbiB2YWx1ZS4KLSAqCXBvcnRfY29uZmlnX2V4dGVuZAlVc2VyIHBvcnQgY29uZmlnIGV4dGVuZCB2YWx1ZS4KLSAqCXBvcnRfc2RtYV9jb25maWcJVXNlciBwb3J0IFNETUEgY29uZmlnIHZhbHVlLgotICoJcG9ydF9zZXJpYWxfY29udHJvbAlVc2VyIHBvcnQgc2VyaWFsIGNvbnRyb2wgdmFsdWUuCi0gKgotICoJCVRoaXMgZHJpdmVyIGRhdGEgZmxvdyBpcyBkb25lIHVzaW5nIHRoZSBzdHJ1Y3QgcGt0X2luZm8gd2hpY2gKLSAqCQlpcyBhIHVuaWZpZWQgc3RydWN0IGZvciBSeCBhbmQgVHggb3BlcmF0aW9uczoKLSAqCi0gKgkJYnl0ZV9jbnQJVHgvUnggZGVzY3JpcHRvciBidWZmZXIgYnl0ZSBjb3VudC4KLSAqCQlsNGlfY2hrCQlDUFUgcHJvdmlkZWQgVENQIENoZWNrc3VtLiBGb3IgVHggb3BlcmF0aW9uCi0gKgkJCQlvbmx5LgotICoJCWNtZF9zdHMJCVR4L1J4IGRlc2NyaXB0b3IgY29tbWFuZCBzdGF0dXMuCi0gKgkJYnVmX3B0cgkJVHgvUnggZGVzY3JpcHRvciBidWZmZXIgcG9pbnRlci4KLSAqCQlyZXR1cm5faW5mbwlUeC9SeCB1c2VyIHJlc291cmNlIHJldHVybiBpbmZvcm1hdGlvbi4KLSAqLwotCi0vKiBFdGhlcm5ldCBQb3J0IHJvdXRpbmVzICovCi1zdGF0aWMgdm9pZCBldGhfcG9ydF9zZXRfZmlsdGVyX3RhYmxlX2VudHJ5KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCQkgICAgaW50IHRhYmxlLCB1bnNpZ25lZCBjaGFyIGVudHJ5KTsKLQotLyoKLSAqIGV0aF9wb3J0X2luaXQgLSBJbml0aWFsaXplIHRoZSBFdGhlcm5ldCBwb3J0IGRyaXZlcgotICoKLSAqIERFU0NSSVBUSU9OOgotICoJVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgZXRoZXJuZXQgcG9ydCB0byBzdGFydCBpdHMgYWN0aXZpdHk6Ci0gKgkxKSBDb21wbGV0ZXMgdGhlIGV0aGVybmV0IHBvcnQgZHJpdmVyIHN0cnVjdCBpbml0aWFsaXphdGlvbiB0b3dhcmQgcG9ydAotICoJCXN0YXJ0IHJvdXRpbmUuCi0gKgkyKSBSZXNldHMgdGhlIGRldmljZSB0byBhIHF1aWVzY2VudCBzdGF0ZSBpbiBjYXNlIG9mIHdhcm0gcmVib290LgotICoJMykgRW5hYmxlIFNETUEgYWNjZXNzIHRvIGFsbCBmb3VyIERSQU0gYmFua3MgYXMgd2VsbCBhcyBpbnRlcm5hbCBTUkFNLgotICoJNCkgQ2xlYW4gTUFDIHRhYmxlcy4gVGhlIHJlc2V0IHN0YXR1cyBvZiB0aG9zZSB0YWJsZXMgaXMgdW5rbm93bi4KLSAqCTUpIFNldCBQSFkgYWRkcmVzcy4KLSAqCU5vdGU6IENhbGwgdGhpcyByb3V0aW5lIHByaW9yIHRvIGV0aF9wb3J0X3N0YXJ0IHJvdXRpbmUgYW5kIGFmdGVyCi0gKglzZXR0aW5nIHVzZXIgdmFsdWVzIGluIHRoZSB1c2VyIGZpZWxkcyBvZiBFdGhlcm5ldCBwb3J0IGNvbnRyb2wKLSAqCXN0cnVjdC4KLSAqCi0gKiBJTlBVVDoKLSAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IHBvcnQgY29udHJvbCBzdHJ1Y3QKLSAqCi0gKiBPVVRQVVQ6Ci0gKglTZWUgZGVzY3JpcHRpb24uCi0gKgotICogUkVUVVJOOgotICoJTm9uZS4KLSAqLwotc3RhdGljIHZvaWQgZXRoX3BvcnRfaW5pdChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCkKLXsKLQltcC0+cnhfcmVzb3VyY2VfZXJyID0gMDsKLQotCWV0aF9wb3J0X3Jlc2V0KG1wKTsKLQotCWV0aF9wb3J0X2luaXRfbWFjX3RhYmxlcyhtcCk7Ci19Ci0KLS8qCi0gKiBldGhfcG9ydF9zdGFydCAtIFN0YXJ0IHRoZSBFdGhlcm5ldCBwb3J0IGFjdGl2aXR5LgotICoKLSAqIERFU0NSSVBUSU9OOgotICoJVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBFdGhlcm5ldCBwb3J0IGZvciBSeCBhbmQgVHggYWN0aXZpdHk6Ci0gKgkgMS4gSW5pdGlhbGl6ZSBUeCBhbmQgUnggQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgZm9yIGVhY2ggcXVldWUgdGhhdAotICoJICAgIGhhcyBiZWVuIGluaXRpYWxpemVkIGEgZGVzY3JpcHRvcidzIHJpbmcgKHVzaW5nCi0gKgkgICAgZXRoZXJfaW5pdF90eF9kZXNjX3JpbmcgZm9yIFR4IGFuZCBldGhlcl9pbml0X3J4X2Rlc2NfcmluZyBmb3IgUngpCi0gKgkgMi4gSW5pdGlhbGl6ZSBhbmQgZW5hYmxlIHRoZSBFdGhlcm5ldCBjb25maWd1cmF0aW9uIHBvcnQgYnkgd3JpdGluZyB0bwotICoJICAgIHRoZSBwb3J0J3MgY29uZmlndXJhdGlvbiBhbmQgY29tbWFuZCByZWdpc3RlcnMuCi0gKgkgMy4gSW5pdGlhbGl6ZSBhbmQgZW5hYmxlIHRoZSBTRE1BIGJ5IHdyaXRpbmcgdG8gdGhlIFNETUEncwotICoJICAgIGNvbmZpZ3VyYXRpb24gYW5kIGNvbW1hbmQgcmVnaXN0ZXJzLiAgQWZ0ZXIgY29tcGxldGluZyB0aGVzZSBzdGVwcywKLSAqCSAgICB0aGUgZXRoZXJuZXQgcG9ydCBTRE1BIGNhbiBzdGFydHMgdG8gcGVyZm9ybSBSeCBhbmQgVHggYWN0aXZpdGllcy4KLSAqCi0gKglOb3RlOiBFYWNoIFJ4IGFuZCBUeCBxdWV1ZSBkZXNjcmlwdG9yJ3MgbGlzdCBtdXN0IGJlIGluaXRpYWxpemVkIHByaW9yCi0gKgl0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gKHVzZSBldGhlcl9pbml0X3R4X2Rlc2NfcmluZyBmb3IgVHggcXVldWVzCi0gKglhbmQgZXRoZXJfaW5pdF9yeF9kZXNjX3JpbmcgZm9yIFJ4IHF1ZXVlcykuCi0gKgotICogSU5QVVQ6Ci0gKglkZXYgLSBhIHBvaW50ZXIgdG8gdGhlIHJlcXVpcmVkIGludGVyZmFjZQotICoKLSAqIE9VVFBVVDoKLSAqCUV0aGVybmV0IHBvcnQgaXMgcmVhZHkgdG8gcmVjZWl2ZSBhbmQgdHJhbnNtaXQuCi0gKgotICogUkVUVVJOOgotICoJTm9uZS4KLSAqLwotc3RhdGljIHZvaWQgZXRoX3BvcnRfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwotCWludCB0eF9jdXJyX2Rlc2MsIHJ4X2N1cnJfZGVzYzsKLQl1MzIgcHNjcjsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgZXRodG9vbF9jbWQ7Ci0KLQkvKiBBc3NpZ25tZW50IG9mIFR4IENUUlAgb2YgZ2l2ZW4gcXVldWUgKi8KLQl0eF9jdXJyX2Rlc2MgPSBtcC0+dHhfY3Vycl9kZXNjX3E7Ci0Jd3JsKG1wLCBUWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzAocG9ydF9udW0pLAotCQkodTMyKSgoc3RydWN0IGV0aF90eF9kZXNjICopbXAtPnR4X2Rlc2NfZG1hICsgdHhfY3Vycl9kZXNjKSk7Ci0KLQkvKiBBc3NpZ25tZW50IG9mIFJ4IENSRFAgb2YgZ2l2ZW4gcXVldWUgKi8KLQlyeF9jdXJyX2Rlc2MgPSBtcC0+cnhfY3Vycl9kZXNjX3E7Ci0Jd3JsKG1wLCBSWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzAocG9ydF9udW0pLAotCQkodTMyKSgoc3RydWN0IGV0aF9yeF9kZXNjICopbXAtPnJ4X2Rlc2NfZG1hICsgcnhfY3Vycl9kZXNjKSk7Ci0KLQkvKiBBZGQgdGhlIGFzc2lnbmVkIEV0aGVybmV0IGFkZHJlc3MgdG8gdGhlIHBvcnQncyBhZGRyZXNzIHRhYmxlICovCi0JZXRoX3BvcnRfdWNfYWRkcl9zZXQobXAsIGRldi0+ZGV2X2FkZHIpOwotCi0JLyogQXNzaWduIHBvcnQgY29uZmlndXJhdGlvbiBhbmQgY29tbWFuZC4gKi8KLQl3cmwobXAsIFBPUlRfQ09ORklHX1JFRyhwb3J0X251bSksCi0JCQkgIFBPUlRfQ09ORklHX0RFRkFVTFRfVkFMVUUpOwotCi0Jd3JsKG1wLCBQT1JUX0NPTkZJR19FWFRFTkRfUkVHKHBvcnRfbnVtKSwKLQkJCSAgUE9SVF9DT05GSUdfRVhURU5EX0RFRkFVTFRfVkFMVUUpOwotCi0JcHNjciA9IHJkbChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pKTsKLQotCXBzY3IgJj0gfihTRVJJQUxfUE9SVF9FTkFCTEUgfCBGT1JDRV9MSU5LX1BBU1MpOwotCXdybChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLCBwc2NyKTsKLQotCXBzY3IgfD0gRElTQUJMRV9BVVRPX05FR19GT1JfRkxPV19DVFJMIHwKLQkJRElTQUJMRV9BVVRPX05FR19TUEVFRF9HTUlJICAgIHwKLQkJRElTQUJMRV9BVVRPX05FR19GT1JfRFVQTFggICAgIHwKLQkJRE9fTk9UX0ZPUkNFX0xJTktfRkFJTAkgICB8Ci0JCVNFUklBTF9QT1JUX0NPTlRST0xfUkVTRVJWRUQ7Ci0KLQl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgcHNjcik7Ci0KLQlwc2NyIHw9IFNFUklBTF9QT1JUX0VOQUJMRTsKLQl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgcHNjcik7Ci0KLQkvKiBBc3NpZ24gcG9ydCBTRE1BIGNvbmZpZ3VyYXRpb24gKi8KLQl3cmwobXAsIFNETUFfQ09ORklHX1JFRyhwb3J0X251bSksCi0JCQkgIFBPUlRfU0RNQV9DT05GSUdfREVGQVVMVF9WQUxVRSk7Ci0KLQkvKiBFbmFibGUgcG9ydCBSeC4gKi8KLQltdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV9yeChtcCwgRVRIX1JYX1FVRVVFU19FTkFCTEVEKTsKLQotCS8qIERpc2FibGUgcG9ydCBiYW5kd2lkdGggbGltaXRzIGJ5IGNsZWFyaW5nIE1UVSByZWdpc3RlciAqLwotCXdybChtcCwgTUFYSU1VTV9UUkFOU01JVF9VTklUKHBvcnRfbnVtKSwgMCk7Ci0KLQkvKiBzYXZlIHBoeSBzZXR0aW5ncyBhY3Jvc3MgcmVzZXQgKi8KLQltdjY0M3h4X2dldF9zZXR0aW5ncyhkZXYsICZldGh0b29sX2NtZCk7Ci0JZXRoZXJuZXRfcGh5X3Jlc2V0KG1wKTsKLQltdjY0M3h4X3NldF9zZXR0aW5ncyhkZXYsICZldGh0b29sX2NtZCk7Ci19Ci0KLS8qCi0gKiBldGhfcG9ydF91Y19hZGRyX3NldCAtIFdyaXRlIGEgTUFDIGFkZHJlc3MgaW50byB0aGUgcG9ydCdzIGh3IHJlZ2lzdGVycwotICovCi1zdGF0aWMgdm9pZCBldGhfcG9ydF91Y19hZGRyX3NldChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKLQkJCQkgdW5zaWduZWQgY2hhciAqcF9hZGRyKQotewotCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKLQl1bnNpZ25lZCBpbnQgbWFjX2g7Ci0JdW5zaWduZWQgaW50IG1hY19sOwotCWludCB0YWJsZTsKLQotCW1hY19sID0gKHBfYWRkcls0XSA8PCA4KSB8IChwX2FkZHJbNV0pOwotCW1hY19oID0gKHBfYWRkclswXSA8PCAyNCkgfCAocF9hZGRyWzFdIDw8IDE2KSB8IChwX2FkZHJbMl0gPDwgOCkgfAotCQkJCQkJCShwX2FkZHJbM10gPDwgMCk7Ci0KLQl3cmwobXAsIE1BQ19BRERSX0xPVyhwb3J0X251bSksIG1hY19sKTsKLQl3cmwobXAsIE1BQ19BRERSX0hJR0gocG9ydF9udW0pLCBtYWNfaCk7Ci0KLQkvKiBBY2NlcHQgZnJhbWVzIHdpdGggdGhpcyBhZGRyZXNzICovCi0JdGFibGUgPSBEQV9GSUxURVJfVU5JQ0FTVF9UQUJMRV9CQVNFKHBvcnRfbnVtKTsKLQlldGhfcG9ydF9zZXRfZmlsdGVyX3RhYmxlX2VudHJ5KG1wLCB0YWJsZSwgcF9hZGRyWzVdICYgMHgwZik7Ci19Ci0KLS8qCi0gKiBldGhfcG9ydF91Y19hZGRyX2dldCAtIFJlYWQgdGhlIE1BQyBhZGRyZXNzIGZyb20gdGhlIHBvcnQncyBodyByZWdpc3RlcnMKLSAqLwotc3RhdGljIHZvaWQgZXRoX3BvcnRfdWNfYWRkcl9nZXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJIHVuc2lnbmVkIGNoYXIgKnBfYWRkcikKLXsKLQl1bnNpZ25lZCBpbnQgcG9ydF9udW0gPSBtcC0+cG9ydF9udW07Ci0JdW5zaWduZWQgaW50IG1hY19oOwotCXVuc2lnbmVkIGludCBtYWNfbDsKLQotCW1hY19oID0gcmRsKG1wLCBNQUNfQUREUl9ISUdIKHBvcnRfbnVtKSk7Ci0JbWFjX2wgPSByZGwobXAsIE1BQ19BRERSX0xPVyhwb3J0X251bSkpOwotCi0JcF9hZGRyWzBdID0gKG1hY19oID4+IDI0KSAmIDB4ZmY7Ci0JcF9hZGRyWzFdID0gKG1hY19oID4+IDE2KSAmIDB4ZmY7Ci0JcF9hZGRyWzJdID0gKG1hY19oID4+IDgpICYgMHhmZjsKLQlwX2FkZHJbM10gPSBtYWNfaCAmIDB4ZmY7Ci0JcF9hZGRyWzRdID0gKG1hY19sID4+IDgpICYgMHhmZjsKLQlwX2FkZHJbNV0gPSBtYWNfbCAmIDB4ZmY7Ci19Ci0KLS8qCi0gKiBUaGUgZW50cmllcyBpbiBlYWNoIHRhYmxlIGFyZSBpbmRleGVkIGJ5IGEgaGFzaCBvZiBhIHBhY2tldCdzIE1BQwotICogYWRkcmVzcy4gIE9uZSBiaXQgaW4gZWFjaCBlbnRyeSBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhY2tldCBpcwotICogYWNjZXB0ZWQuICBUaGVyZSBhcmUgNCBlbnRyaWVzIChlYWNoIDggYml0cyB3aWRlKSBpbiBlYWNoIHJlZ2lzdGVyCi0gKiBvZiB0aGUgdGFibGUuICBUaGUgYml0cyBpbiBlYWNoIGVudHJ5IGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6Ci0gKgkwCUFjY2VwdD0xLCBEcm9wPTAKLSAqCTMtMQlRdWV1ZQkJCShFVEhfUTA9MCkKLSAqCTctNAlSZXNlcnZlZCA9IDA7Ci0gKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3NldF9maWx0ZXJfdGFibGVfZW50cnkoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJCSAgICBpbnQgdGFibGUsIHVuc2lnbmVkIGNoYXIgZW50cnkpCi17Ci0JdW5zaWduZWQgaW50IHRhYmxlX3JlZzsKLQl1bnNpZ25lZCBpbnQgdGJsX29mZnNldDsKLQl1bnNpZ25lZCBpbnQgcmVnX29mZnNldDsKLQotCXRibF9vZmZzZXQgPSAoZW50cnkgLyA0KSAqIDQ7CS8qIFJlZ2lzdGVyIG9mZnNldCBvZiBEQSB0YWJsZSBlbnRyeSAqLwotCXJlZ19vZmZzZXQgPSBlbnRyeSAlIDQ7CQkvKiBFbnRyeSBvZmZzZXQgd2l0aGluIHRoZSByZWdpc3RlciAqLwotCi0JLyogU2V0ICJhY2NlcHRzIGZyYW1lIGJpdCIgYXQgc3BlY2lmaWVkIHRhYmxlIGVudHJ5ICovCi0JdGFibGVfcmVnID0gcmRsKG1wLCB0YWJsZSArIHRibF9vZmZzZXQpOwotCXRhYmxlX3JlZyB8PSAweDAxIDw8ICg4ICogcmVnX29mZnNldCk7Ci0Jd3JsKG1wLCB0YWJsZSArIHRibF9vZmZzZXQsIHRhYmxlX3JlZyk7Ci19Ci0KLS8qCi0gKiBldGhfcG9ydF9tY19hZGRyIC0gTXVsdGljYXN0IGFkZHJlc3Mgc2V0dGluZ3MuCi0gKgotICogVGhlIE1WIGRldmljZSBzdXBwb3J0cyBtdWx0aWNhc3QgdXNpbmcgdHdvIHRhYmxlczoKLSAqIDEpIFNwZWNpYWwgTXVsdGljYXN0IFRhYmxlIGZvciBNQUMgYWRkcmVzc2VzIG9mIHRoZSBmb3JtCi0gKiAgICAweDAxLTAwLTVFLTAwLTAwLVhYICh3aGVyZSBYWCBpcyBiZXR3ZWVuIDB4MDAgYW5kIDB4X0ZGKS4KLSAqICAgIFRoZSBNQUMgREFbNzowXSBiaXRzIGFyZSB1c2VkIGFzIGEgcG9pbnRlciB0byB0aGUgU3BlY2lhbCBNdWx0aWNhc3QKLSAqICAgIFRhYmxlIGVudHJpZXMgaW4gdGhlIERBLUZpbHRlciB0YWJsZS4KLSAqIDIpIE90aGVyIE11bHRpY2FzdCBUYWJsZSBmb3IgbXVsdGljYXN0IG9mIGFub3RoZXIgdHlwZS4gQSBDUkMtOGJpdAotICogICAgaXMgdXNlZCBhcyBhbiBpbmRleCB0byB0aGUgT3RoZXIgTXVsdGljYXN0IFRhYmxlIGVudHJpZXMgaW4gdGhlCi0gKiAgICBEQS1GaWx0ZXIgdGFibGUuICBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIENSQy04Yml0IHZhbHVlLgotICogSW4gZWl0aGVyIGNhc2UsIGV0aF9wb3J0X3NldF9maWx0ZXJfdGFibGVfZW50cnkoKSBpcyB0aGVuIGNhbGxlZAotICogdG8gc2V0IHRvIHNldCB0aGUgYWN0dWFsIHRhYmxlIGVudHJ5LgotICovCi1zdGF0aWMgdm9pZCBldGhfcG9ydF9tY19hZGRyKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLCB1bnNpZ25lZCBjaGFyICpwX2FkZHIpCi17Ci0JdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwotCXVuc2lnbmVkIGludCBtYWNfaDsKLQl1bnNpZ25lZCBpbnQgbWFjX2w7Ci0JdW5zaWduZWQgY2hhciBjcmNfcmVzdWx0ID0gMDsKLQlpbnQgdGFibGU7Ci0JaW50IG1hY19hcnJheVs0OF07Ci0JaW50IGNyY1s4XTsKLQlpbnQgaTsKLQotCWlmICgocF9hZGRyWzBdID09IDB4MDEpICYmIChwX2FkZHJbMV0gPT0gMHgwMCkgJiYKLQkgICAgKHBfYWRkclsyXSA9PSAweDVFKSAmJiAocF9hZGRyWzNdID09IDB4MDApICYmIChwX2FkZHJbNF0gPT0gMHgwMCkpIHsKLQkJdGFibGUgPSBEQV9GSUxURVJfU1BFQ0lBTF9NVUxUSUNBU1RfVEFCTEVfQkFTRShwb3J0X251bSk7Ci0JCWV0aF9wb3J0X3NldF9maWx0ZXJfdGFibGVfZW50cnkobXAsIHRhYmxlLCBwX2FkZHJbNV0pOwotCQlyZXR1cm47Ci0JfQotCi0JLyogQ2FsY3VsYXRlIENSQy04IG91dCBvZiB0aGUgZ2l2ZW4gYWRkcmVzcyAqLwotCW1hY19oID0gKHBfYWRkclswXSA8PCA4KSB8IChwX2FkZHJbMV0pOwotCW1hY19sID0gKHBfYWRkclsyXSA8PCAyNCkgfCAocF9hZGRyWzNdIDw8IDE2KSB8Ci0JCQkocF9hZGRyWzRdIDw8IDgpIHwgKHBfYWRkcls1XSA8PCAwKTsKLQotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQltYWNfYXJyYXlbaV0gPSAobWFjX2wgPj4gaSkgJiAweDE7Ci0JZm9yIChpID0gMzI7IGkgPCA0ODsgaSsrKQotCQltYWNfYXJyYXlbaV0gPSAobWFjX2ggPj4gKGkgLSAzMikpICYgMHgxOwotCi0JY3JjWzBdID0gbWFjX2FycmF5WzQ1XSBeIG1hY19hcnJheVs0M10gXiBtYWNfYXJyYXlbNDBdIF4gbWFjX2FycmF5WzM5XSBeCi0JCSBtYWNfYXJyYXlbMzVdIF4gbWFjX2FycmF5WzM0XSBeIG1hY19hcnJheVszMV0gXiBtYWNfYXJyYXlbMzBdIF4KLQkJIG1hY19hcnJheVsyOF0gXiBtYWNfYXJyYXlbMjNdIF4gbWFjX2FycmF5WzIxXSBeIG1hY19hcnJheVsxOV0gXgotCQkgbWFjX2FycmF5WzE4XSBeIG1hY19hcnJheVsxNl0gXiBtYWNfYXJyYXlbMTRdIF4gbWFjX2FycmF5WzEyXSBeCi0JCSBtYWNfYXJyYXlbOF0gIF4gbWFjX2FycmF5WzddICBeIG1hY19hcnJheVs2XSAgXiBtYWNfYXJyYXlbMF07Ci0KLQljcmNbMV0gPSBtYWNfYXJyYXlbNDZdIF4gbWFjX2FycmF5WzQ1XSBeIG1hY19hcnJheVs0NF0gXiBtYWNfYXJyYXlbNDNdIF4KLQkJIG1hY19hcnJheVs0MV0gXiBtYWNfYXJyYXlbMzldIF4gbWFjX2FycmF5WzM2XSBeIG1hY19hcnJheVszNF0gXgotCQkgbWFjX2FycmF5WzMyXSBeIG1hY19hcnJheVszMF0gXiBtYWNfYXJyYXlbMjldIF4gbWFjX2FycmF5WzI4XSBeCi0JCSBtYWNfYXJyYXlbMjRdIF4gbWFjX2FycmF5WzIzXSBeIG1hY19hcnJheVsyMl0gXiBtYWNfYXJyYXlbMjFdIF4KLQkJIG1hY19hcnJheVsyMF0gXiBtYWNfYXJyYXlbMThdIF4gbWFjX2FycmF5WzE3XSBeIG1hY19hcnJheVsxNl0gXgotCQkgbWFjX2FycmF5WzE1XSBeIG1hY19hcnJheVsxNF0gXiBtYWNfYXJyYXlbMTNdIF4gbWFjX2FycmF5WzEyXSBeCi0JCSBtYWNfYXJyYXlbOV0gIF4gbWFjX2FycmF5WzZdICBeIG1hY19hcnJheVsxXSAgXiBtYWNfYXJyYXlbMF07Ci0KLQljcmNbMl0gPSBtYWNfYXJyYXlbNDddIF4gbWFjX2FycmF5WzQ2XSBeIG1hY19hcnJheVs0NF0gXiBtYWNfYXJyYXlbNDNdIF4KLQkJIG1hY19hcnJheVs0Ml0gXiBtYWNfYXJyYXlbMzldIF4gbWFjX2FycmF5WzM3XSBeIG1hY19hcnJheVszNF0gXgotCQkgbWFjX2FycmF5WzMzXSBeIG1hY19hcnJheVsyOV0gXiBtYWNfYXJyYXlbMjhdIF4gbWFjX2FycmF5WzI1XSBeCi0JCSBtYWNfYXJyYXlbMjRdIF4gbWFjX2FycmF5WzIyXSBeIG1hY19hcnJheVsxN10gXiBtYWNfYXJyYXlbMTVdIF4KLQkJIG1hY19hcnJheVsxM10gXiBtYWNfYXJyYXlbMTJdIF4gbWFjX2FycmF5WzEwXSBeIG1hY19hcnJheVs4XSAgXgotCQkgbWFjX2FycmF5WzZdICBeIG1hY19hcnJheVsyXSAgXiBtYWNfYXJyYXlbMV0gIF4gbWFjX2FycmF5WzBdOwotCi0JY3JjWzNdID0gbWFjX2FycmF5WzQ3XSBeIG1hY19hcnJheVs0NV0gXiBtYWNfYXJyYXlbNDRdIF4gbWFjX2FycmF5WzQzXSBeCi0JCSBtYWNfYXJyYXlbNDBdIF4gbWFjX2FycmF5WzM4XSBeIG1hY19hcnJheVszNV0gXiBtYWNfYXJyYXlbMzRdIF4KLQkJIG1hY19hcnJheVszMF0gXiBtYWNfYXJyYXlbMjldIF4gbWFjX2FycmF5WzI2XSBeIG1hY19hcnJheVsyNV0gXgotCQkgbWFjX2FycmF5WzIzXSBeIG1hY19hcnJheVsxOF0gXiBtYWNfYXJyYXlbMTZdIF4gbWFjX2FycmF5WzE0XSBeCi0JCSBtYWNfYXJyYXlbMTNdIF4gbWFjX2FycmF5WzExXSBeIG1hY19hcnJheVs5XSAgXiBtYWNfYXJyYXlbN10gIF4KLQkJIG1hY19hcnJheVszXSAgXiBtYWNfYXJyYXlbMl0gIF4gbWFjX2FycmF5WzFdOwotCi0JY3JjWzRdID0gbWFjX2FycmF5WzQ2XSBeIG1hY19hcnJheVs0NV0gXiBtYWNfYXJyYXlbNDRdIF4gbWFjX2FycmF5WzQxXSBeCi0JCSBtYWNfYXJyYXlbMzldIF4gbWFjX2FycmF5WzM2XSBeIG1hY19hcnJheVszNV0gXiBtYWNfYXJyYXlbMzFdIF4KLQkJIG1hY19hcnJheVszMF0gXiBtYWNfYXJyYXlbMjddIF4gbWFjX2FycmF5WzI2XSBeIG1hY19hcnJheVsyNF0gXgotCQkgbWFjX2FycmF5WzE5XSBeIG1hY19hcnJheVsxN10gXiBtYWNfYXJyYXlbMTVdIF4gbWFjX2FycmF5WzE0XSBeCi0JCSBtYWNfYXJyYXlbMTJdIF4gbWFjX2FycmF5WzEwXSBeIG1hY19hcnJheVs4XSAgXiBtYWNfYXJyYXlbNF0gIF4KLQkJIG1hY19hcnJheVszXSAgXiBtYWNfYXJyYXlbMl07Ci0KLQljcmNbNV0gPSBtYWNfYXJyYXlbNDddIF4gbWFjX2FycmF5WzQ2XSBeIG1hY19hcnJheVs0NV0gXiBtYWNfYXJyYXlbNDJdIF4KLQkJIG1hY19hcnJheVs0MF0gXiBtYWNfYXJyYXlbMzddIF4gbWFjX2FycmF5WzM2XSBeIG1hY19hcnJheVszMl0gXgotCQkgbWFjX2FycmF5WzMxXSBeIG1hY19hcnJheVsyOF0gXiBtYWNfYXJyYXlbMjddIF4gbWFjX2FycmF5WzI1XSBeCi0JCSBtYWNfYXJyYXlbMjBdIF4gbWFjX2FycmF5WzE4XSBeIG1hY19hcnJheVsxNl0gXiBtYWNfYXJyYXlbMTVdIF4KLQkJIG1hY19hcnJheVsxM10gXiBtYWNfYXJyYXlbMTFdIF4gbWFjX2FycmF5WzldICBeIG1hY19hcnJheVs1XSAgXgotCQkgbWFjX2FycmF5WzRdICBeIG1hY19hcnJheVszXTsKLQotCWNyY1s2XSA9IG1hY19hcnJheVs0N10gXiBtYWNfYXJyYXlbNDZdIF4gbWFjX2FycmF5WzQzXSBeIG1hY19hcnJheVs0MV0gXgotCQkgbWFjX2FycmF5WzM4XSBeIG1hY19hcnJheVszN10gXiBtYWNfYXJyYXlbMzNdIF4gbWFjX2FycmF5WzMyXSBeCi0JCSBtYWNfYXJyYXlbMjldIF4gbWFjX2FycmF5WzI4XSBeIG1hY19hcnJheVsyNl0gXiBtYWNfYXJyYXlbMjFdIF4KLQkJIG1hY19hcnJheVsxOV0gXiBtYWNfYXJyYXlbMTddIF4gbWFjX2FycmF5WzE2XSBeIG1hY19hcnJheVsxNF0gXgotCQkgbWFjX2FycmF5WzEyXSBeIG1hY19hcnJheVsxMF0gXiBtYWNfYXJyYXlbNl0gIF4gbWFjX2FycmF5WzVdICBeCi0JCSBtYWNfYXJyYXlbNF07Ci0KLQljcmNbN10gPSBtYWNfYXJyYXlbNDddIF4gbWFjX2FycmF5WzQ0XSBeIG1hY19hcnJheVs0Ml0gXiBtYWNfYXJyYXlbMzldIF4KLQkJIG1hY19hcnJheVszOF0gXiBtYWNfYXJyYXlbMzRdIF4gbWFjX2FycmF5WzMzXSBeIG1hY19hcnJheVszMF0gXgotCQkgbWFjX2FycmF5WzI5XSBeIG1hY19hcnJheVsyN10gXiBtYWNfYXJyYXlbMjJdIF4gbWFjX2FycmF5WzIwXSBeCi0JCSBtYWNfYXJyYXlbMThdIF4gbWFjX2FycmF5WzE3XSBeIG1hY19hcnJheVsxNV0gXiBtYWNfYXJyYXlbMTNdIF4KLQkJIG1hY19hcnJheVsxMV0gXiBtYWNfYXJyYXlbN10gIF4gbWFjX2FycmF5WzZdICBeIG1hY19hcnJheVs1XTsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWNyY19yZXN1bHQgPSBjcmNfcmVzdWx0IHwgKGNyY1tpXSA8PCBpKTsKLQotCXRhYmxlID0gREFfRklMVEVSX09USEVSX01VTFRJQ0FTVF9UQUJMRV9CQVNFKHBvcnRfbnVtKTsKLQlldGhfcG9ydF9zZXRfZmlsdGVyX3RhYmxlX2VudHJ5KG1wLCB0YWJsZSwgY3JjX3Jlc3VsdCk7Ci19Ci0KLS8qCi0gKiBTZXQgdGhlIGVudGlyZSBtdWx0aWNhc3QgbGlzdCBiYXNlZCBvbiBkZXYtPm1jX2xpc3QuCi0gKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCi0Jc3RydWN0IGRldl9tY19saXN0CSptY19saXN0OwotCWludAkJCWk7Ci0JaW50CQkJdGFibGVfaW5kZXg7Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZQkqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGludAkJZXRoX3BvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwotCi0JLyogSWYgdGhlIGRldmljZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlIG9yIGluIGFsbCBtdWx0aWNhc3QgbW9kZSwKLQkgKiB3ZSB3aWxsIGZ1bGx5IHBvcHVsYXRlIGJvdGggbXVsdGljYXN0IHRhYmxlcyB3aXRoIGFjY2VwdC4KLQkgKiBUaGlzIGlzIGd1YXJhbnRlZWQgdG8geWllbGQgYSBtYXRjaCBvbiBhbGwgbXVsdGljYXN0IGFkZHJlc3Nlcy4uLgotCSAqLwotCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKLQkJZm9yICh0YWJsZV9pbmRleCA9IDA7IHRhYmxlX2luZGV4IDw9IDB4RkM7IHRhYmxlX2luZGV4ICs9IDQpIHsKLQkJCS8qIFNldCBhbGwgZW50cmllcyBpbiBEQSBmaWx0ZXIgc3BlY2lhbCBtdWx0aWNhc3QKLQkJCSAqIHRhYmxlIChFeF9kRlNNVCkKLQkJCSAqIFNldCBmb3IgRVRIX1EwIGZvciBub3cKLQkJCSAqIEJpdHMKLQkJCSAqIDAJICBBY2NlcHQ9MSwgRHJvcD0wCi0JCQkgKiAzLTEgIFF1ZXVlCSBFVEhfUTA9MAotCQkJICogNy00ICBSZXNlcnZlZCA9IDA7Ci0JCQkgKi8KLQkJCXdybChtcCwgREFfRklMVEVSX1NQRUNJQUxfTVVMVElDQVNUX1RBQkxFX0JBU0UoZXRoX3BvcnRfbnVtKSArIHRhYmxlX2luZGV4LCAweDAxMDEwMTAxKTsKLQotCQkJLyogU2V0IGFsbCBlbnRyaWVzIGluIERBIGZpbHRlciBvdGhlciBtdWx0aWNhc3QKLQkJCSAqIHRhYmxlIChFeF9kRk9NVCkKLQkJCSAqIFNldCBmb3IgRVRIX1EwIGZvciBub3cKLQkJCSAqIEJpdHMKLQkJCSAqIDAJICBBY2NlcHQ9MSwgRHJvcD0wCi0JCQkgKiAzLTEgIFF1ZXVlCSBFVEhfUTA9MAotCQkJICogNy00ICBSZXNlcnZlZCA9IDA7Ci0JCQkgKi8KLQkJCXdybChtcCwgREFfRklMVEVSX09USEVSX01VTFRJQ0FTVF9UQUJMRV9CQVNFKGV0aF9wb3J0X251bSkgKyB0YWJsZV9pbmRleCwgMHgwMTAxMDEwMSk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCS8qIFdlIHdpbGwgY2xlYXIgb3V0IG11bHRpY2FzdCB0YWJsZXMgZXZlcnkgdGltZSB3ZSBnZXQgdGhlIGxpc3QuCi0JICogVGhlbiBhZGQgdGhlIGVudGlyZSBuZXcgbGlzdC4uLgotCSAqLwotCWZvciAodGFibGVfaW5kZXggPSAwOyB0YWJsZV9pbmRleCA8PSAweEZDOyB0YWJsZV9pbmRleCArPSA0KSB7Ci0JCS8qIENsZWFyIERBIGZpbHRlciBzcGVjaWFsIG11bHRpY2FzdCB0YWJsZSAoRXhfZEZTTVQpICovCi0JCXdybChtcCwgREFfRklMVEVSX1NQRUNJQUxfTVVMVElDQVNUX1RBQkxFX0JBU0UKLQkJCQkoZXRoX3BvcnRfbnVtKSArIHRhYmxlX2luZGV4LCAwKTsKLQotCQkvKiBDbGVhciBEQSBmaWx0ZXIgb3RoZXIgbXVsdGljYXN0IHRhYmxlIChFeF9kRk9NVCkgKi8KLQkJd3JsKG1wLCBEQV9GSUxURVJfT1RIRVJfTVVMVElDQVNUX1RBQkxFX0JBU0UKLQkJCQkoZXRoX3BvcnRfbnVtKSArIHRhYmxlX2luZGV4LCAwKTsKLQl9Ci0KLQkvKiBHZXQgcG9pbnRlciB0byBuZXRfZGV2aWNlIG11bHRpY2FzdCBsaXN0IGFuZCBhZGQgZWFjaCBvbmUuLi4gKi8KLQlmb3IgKGkgPSAwLCBtY19saXN0ID0gZGV2LT5tY19saXN0OwotCQkJKGkgPCAyNTYpICYmIChtY19saXN0ICE9IE5VTEwpICYmIChpIDwgZGV2LT5tY19jb3VudCk7Ci0JCQlpKyssIG1jX2xpc3QgPSBtY19saXN0LT5uZXh0KQotCQlpZiAobWNfbGlzdC0+ZG1pX2FkZHJsZW4gPT0gNikKLQkJCWV0aF9wb3J0X21jX2FkZHIobXAsIG1jX2xpc3QtPmRtaV9hZGRyKTsKLX0KLQotLyoKLSAqIGV0aF9wb3J0X2luaXRfbWFjX3RhYmxlcyAtIENsZWFyIGFsbCBlbnRyYW5jZSBpbiB0aGUgVUMsIFNNQyBhbmQgT01DIHRhYmxlcwotICoKLSAqIERFU0NSSVBUSU9OOgotICoJR28gdGhyb3VnaCBhbGwgdGhlIERBIGZpbHRlciB0YWJsZXMgKFVuaWNhc3QsIFNwZWNpYWwgTXVsdGljYXN0ICYKLSAqCU90aGVyIE11bHRpY2FzdCkgYW5kIHNldCBlYWNoIGVudHJ5IHRvIDAuCi0gKgotICogSU5QVVQ6Ci0gKglzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcAlFdGhlcm5ldCBQb3J0LgotICoKLSAqIE9VVFBVVDoKLSAqCU11bHRpY2FzdCBhbmQgVW5pY2FzdCBwYWNrZXRzIGFyZSByZWplY3RlZC4KLSAqCi0gKiBSRVRVUk46Ci0gKglOb25lLgotICovCi1zdGF0aWMgdm9pZCBldGhfcG9ydF9pbml0X21hY190YWJsZXMoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCi17Ci0JdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwotCWludCB0YWJsZV9pbmRleDsKLQotCS8qIENsZWFyIERBIGZpbHRlciB1bmljYXN0IHRhYmxlIChFeF9kRlVUKSAqLwotCWZvciAodGFibGVfaW5kZXggPSAwOyB0YWJsZV9pbmRleCA8PSAweEM7IHRhYmxlX2luZGV4ICs9IDQpCi0JCXdybChtcCwgREFfRklMVEVSX1VOSUNBU1RfVEFCTEVfQkFTRShwb3J0X251bSkgKwotCQkJCQl0YWJsZV9pbmRleCwgMCk7Ci0KLQlmb3IgKHRhYmxlX2luZGV4ID0gMDsgdGFibGVfaW5kZXggPD0gMHhGQzsgdGFibGVfaW5kZXggKz0gNCkgewotCQkvKiBDbGVhciBEQSBmaWx0ZXIgc3BlY2lhbCBtdWx0aWNhc3QgdGFibGUgKEV4X2RGU01UKSAqLwotCQl3cmwobXAsIERBX0ZJTFRFUl9TUEVDSUFMX01VTFRJQ0FTVF9UQUJMRV9CQVNFKHBvcnRfbnVtKSArCi0JCQkJCXRhYmxlX2luZGV4LCAwKTsKLQkJLyogQ2xlYXIgREEgZmlsdGVyIG90aGVyIG11bHRpY2FzdCB0YWJsZSAoRXhfZEZPTVQpICovCi0JCXdybChtcCwgREFfRklMVEVSX09USEVSX01VTFRJQ0FTVF9UQUJMRV9CQVNFKHBvcnRfbnVtKSArCi0JCQkJCXRhYmxlX2luZGV4LCAwKTsKLQl9Ci19Ci0KLS8qCi0gKiBldGhfY2xlYXJfbWliX2NvdW50ZXJzIC0gQ2xlYXIgYWxsIE1JQiBjb3VudGVycwotICoKLSAqIERFU0NSSVBUSU9OOgotICoJVGhpcyBmdW5jdGlvbiBjbGVhcnMgYWxsIE1JQiBjb3VudGVycyBvZiBhIHNwZWNpZmljIGV0aGVybmV0IHBvcnQuCi0gKglBIHJlYWQgZnJvbSB0aGUgTUlCIGNvdW50ZXIgd2lsbCByZXNldCB0aGUgY291bnRlci4KLSAqCi0gKiBJTlBVVDoKLSAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IFBvcnQuCi0gKgotICogT1VUUFVUOgotICoJQWZ0ZXIgcmVhZGluZyBhbGwgTUlCIGNvdW50ZXJzLCB0aGUgY291bnRlcnMgcmVzZXRzLgotICoKLSAqIFJFVFVSTjoKLSAqCU1JQiBjb3VudGVyIHZhbHVlLgotICoKLSAqLwotc3RhdGljIHZvaWQgZXRoX2NsZWFyX21pYl9jb3VudGVycyhzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCkKLXsKLQl1bnNpZ25lZCBpbnQgcG9ydF9udW0gPSBtcC0+cG9ydF9udW07Ci0JaW50IGk7Ci0KLQkvKiBQZXJmb3JtIGR1bW15IHJlYWRzIGZyb20gTUlCIGNvdW50ZXJzICovCi0JZm9yIChpID0gRVRIX01JQl9HT09EX09DVEVUU19SRUNFSVZFRF9MT1c7IGkgPCBFVEhfTUlCX0xBVEVfQ09MTElTSU9OOwotCQkJCQkJCQkJaSArPSA0KQotCQlyZGwobXAsIE1JQl9DT1VOVEVSU19CQVNFKHBvcnRfbnVtKSArIGkpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiByZWFkX21pYihzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwgaW50IG9mZnNldCkKLXsKLQlyZXR1cm4gcmRsKG1wLCBNSUJfQ09VTlRFUlNfQkFTRShtcC0+cG9ydF9udW0pICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgZXRoX3VwZGF0ZV9taWJfY291bnRlcnMoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCi17Ci0Jc3RydWN0IG12NjQzeHhfbWliX2NvdW50ZXJzICpwID0gJm1wLT5taWJfY291bnRlcnM7Ci0JaW50IG9mZnNldDsKLQotCXAtPmdvb2Rfb2N0ZXRzX3JlY2VpdmVkICs9Ci0JCXJlYWRfbWliKG1wLCBFVEhfTUlCX0dPT0RfT0NURVRTX1JFQ0VJVkVEX0xPVyk7Ci0JcC0+Z29vZF9vY3RldHNfcmVjZWl2ZWQgKz0KLQkJKHU2NClyZWFkX21pYihtcCwgRVRIX01JQl9HT09EX09DVEVUU19SRUNFSVZFRF9ISUdIKSA8PCAzMjsKLQotCWZvciAob2Zmc2V0ID0gRVRIX01JQl9CQURfT0NURVRTX1JFQ0VJVkVEOwotCQkJb2Zmc2V0IDw9IEVUSF9NSUJfRlJBTUVTXzEwMjRfVE9fTUFYX09DVEVUUzsKLQkJCW9mZnNldCArPSA0KQotCQkqKHUzMiAqKSgoY2hhciAqKXAgKyBvZmZzZXQpICs9IHJlYWRfbWliKG1wLCBvZmZzZXQpOwotCi0JcC0+Z29vZF9vY3RldHNfc2VudCArPSByZWFkX21pYihtcCwgRVRIX01JQl9HT09EX09DVEVUU19TRU5UX0xPVyk7Ci0JcC0+Z29vZF9vY3RldHNfc2VudCArPQotCQkodTY0KXJlYWRfbWliKG1wLCBFVEhfTUlCX0dPT0RfT0NURVRTX1NFTlRfSElHSCkgPDwgMzI7Ci0KLQlmb3IgKG9mZnNldCA9IEVUSF9NSUJfR09PRF9GUkFNRVNfU0VOVDsKLQkJCW9mZnNldCA8PSBFVEhfTUlCX0xBVEVfQ09MTElTSU9OOwotCQkJb2Zmc2V0ICs9IDQpCi0JCSoodTMyICopKChjaGFyICopcCArIG9mZnNldCkgKz0gcmVhZF9taWIobXAsIG9mZnNldCk7Ci19Ci0KLS8qCi0gKiBldGhlcm5ldF9waHlfZGV0ZWN0IC0gRGV0ZWN0IHdoZXRoZXIgYSBwaHkgaXMgcHJlc2VudAotICoKLSAqIERFU0NSSVBUSU9OOgotICoJVGhpcyBmdW5jdGlvbiB0ZXN0cyB3aGV0aGVyIHRoZXJlIGlzIGEgUEhZIHByZXNlbnQgb24KLSAqCXRoZSBzcGVjaWZpZWQgcG9ydC4KLSAqCi0gKiBJTlBVVDoKLSAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IFBvcnQuCi0gKgotICogT1VUUFVUOgotICoJTm9uZQotICoKLSAqIFJFVFVSTjoKLSAqCTAgb24gc3VjY2VzcwotICoJLUVOT0RFViBvbiBmYWlsdXJlCi0gKgotICovCi1zdGF0aWMgaW50IGV0aGVybmV0X3BoeV9kZXRlY3Qoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCi17Ci0JdW5zaWduZWQgaW50IHBoeV9yZWdfZGF0YTA7Ci0JaW50IGF1dG9fbmVnOwotCi0JZXRoX3BvcnRfcmVhZF9zbWlfcmVnKG1wLCAwLCAmcGh5X3JlZ19kYXRhMCk7Ci0JYXV0b19uZWcgPSBwaHlfcmVnX2RhdGEwICYgMHgxMDAwOwotCXBoeV9yZWdfZGF0YTAgXj0gMHgxMDAwOwkvKiBpbnZlcnQgYXV0b19uZWcgKi8KLQlldGhfcG9ydF93cml0ZV9zbWlfcmVnKG1wLCAwLCBwaHlfcmVnX2RhdGEwKTsKLQotCWV0aF9wb3J0X3JlYWRfc21pX3JlZyhtcCwgMCwgJnBoeV9yZWdfZGF0YTApOwotCWlmICgocGh5X3JlZ19kYXRhMCAmIDB4MTAwMCkgPT0gYXV0b19uZWcpCi0JCXJldHVybiAtRU5PREVWOwkJCQkvKiBjaGFuZ2UgZGlkbid0IHRha2UgKi8KLQotCXBoeV9yZWdfZGF0YTAgXj0gMHgxMDAwOwotCWV0aF9wb3J0X3dyaXRlX3NtaV9yZWcobXAsIDAsIHBoeV9yZWdfZGF0YTApOwotCXJldHVybiAwOwotfQotCi0vKgotICogZXRoZXJuZXRfcGh5X2dldCAtIEdldCB0aGUgZXRoZXJuZXQgcG9ydCBQSFkgYWRkcmVzcy4KLSAqCi0gKiBERVNDUklQVElPTjoKLSAqCVRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBnaXZlbiBldGhlcm5ldCBwb3J0IFBIWSBhZGRyZXNzLgotICoKLSAqIElOUFVUOgotICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAJRXRoZXJuZXQgUG9ydC4KLSAqCi0gKiBPVVRQVVQ6Ci0gKglOb25lLgotICoKLSAqIFJFVFVSTjoKLSAqCVBIWSBhZGRyZXNzLgotICoKLSAqLwotc3RhdGljIGludCBldGhlcm5ldF9waHlfZ2V0KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKQotewotCXVuc2lnbmVkIGludCByZWdfZGF0YTsKLQotCXJlZ19kYXRhID0gcmRsKG1wLCBQSFlfQUREUl9SRUcpOwotCi0JcmV0dXJuICgocmVnX2RhdGEgPj4gKDUgKiBtcC0+cG9ydF9udW0pKSAmIDB4MWYpOwotfQotCi0vKgotICogZXRoZXJuZXRfcGh5X3NldCAtIFNldCB0aGUgZXRoZXJuZXQgcG9ydCBQSFkgYWRkcmVzcy4KLSAqCi0gKiBERVNDUklQVElPTjoKLSAqCVRoaXMgcm91dGluZSBzZXRzIHRoZSBnaXZlbiBldGhlcm5ldCBwb3J0IFBIWSBhZGRyZXNzLgotICoKLSAqIElOUFVUOgotICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAJRXRoZXJuZXQgUG9ydC4KLSAqCWludAkJcGh5X2FkZHIJUEhZIGFkZHJlc3MuCi0gKgotICogT1VUUFVUOgotICoJTm9uZS4KLSAqCi0gKiBSRVRVUk46Ci0gKglOb25lLgotICoKLSAqLwotc3RhdGljIHZvaWQgZXRoZXJuZXRfcGh5X3NldChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwgaW50IHBoeV9hZGRyKQotewotCXUzMiByZWdfZGF0YTsKLQlpbnQgYWRkcl9zaGlmdCA9IDUgKiBtcC0+cG9ydF9udW07Ci0KLQlyZWdfZGF0YSA9IHJkbChtcCwgUEhZX0FERFJfUkVHKTsKLQlyZWdfZGF0YSAmPSB+KDB4MWYgPDwgYWRkcl9zaGlmdCk7Ci0JcmVnX2RhdGEgfD0gKHBoeV9hZGRyICYgMHgxZikgPDwgYWRkcl9zaGlmdDsKLQl3cmwobXAsIFBIWV9BRERSX1JFRywgcmVnX2RhdGEpOwotfQotCi0vKgotICogZXRoZXJuZXRfcGh5X3Jlc2V0IC0gUmVzZXQgRXRoZXJuZXQgcG9ydCBQSFkuCi0gKgotICogREVTQ1JJUFRJT046Ci0gKglUaGlzIHJvdXRpbmUgdXRpbGl6ZXMgdGhlIFNNSSBpbnRlcmZhY2UgdG8gcmVzZXQgdGhlIGV0aGVybmV0IHBvcnQgUEhZLgotICoKLSAqIElOUFVUOgotICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAJRXRoZXJuZXQgUG9ydC4KLSAqCi0gKiBPVVRQVVQ6Ci0gKglUaGUgUEhZIGlzIHJlc2V0LgotICoKLSAqIFJFVFVSTjoKLSAqCU5vbmUuCi0gKgotICovCi1zdGF0aWMgdm9pZCBldGhlcm5ldF9waHlfcmVzZXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCi17Ci0JdW5zaWduZWQgaW50IHBoeV9yZWdfZGF0YTsKLQotCS8qIFJlc2V0IHRoZSBQSFkgKi8KLQlldGhfcG9ydF9yZWFkX3NtaV9yZWcobXAsIDAsICZwaHlfcmVnX2RhdGEpOwotCXBoeV9yZWdfZGF0YSB8PSAweDgwMDA7CS8qIFNldCBiaXQgMTUgdG8gcmVzZXQgdGhlIFBIWSAqLwotCWV0aF9wb3J0X3dyaXRlX3NtaV9yZWcobXAsIDAsIHBoeV9yZWdfZGF0YSk7Ci0KLQkvKiB3YWl0IGZvciBQSFkgdG8gY29tZSBvdXQgb2YgcmVzZXQgKi8KLQlkbyB7Ci0JCXVkZWxheSgxKTsKLQkJZXRoX3BvcnRfcmVhZF9zbWlfcmVnKG1wLCAwLCAmcGh5X3JlZ19kYXRhKTsKLQl9IHdoaWxlIChwaHlfcmVnX2RhdGEgJiAweDgwMDApOwotfQotCi1zdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV90eChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKLQkJCQkJdW5zaWduZWQgaW50IHF1ZXVlcykKLXsKLQl3cmwobXAsIFRSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKG1wLT5wb3J0X251bSksIHF1ZXVlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3J4KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCQl1bnNpZ25lZCBpbnQgcXVldWVzKQotewotCXdybChtcCwgUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRyhtcC0+cG9ydF9udW0pLCBxdWV1ZXMpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IG12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV90eChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCkKLXsKLQl1bnNpZ25lZCBpbnQgcG9ydF9udW0gPSBtcC0+cG9ydF9udW07Ci0JdTMyIHF1ZXVlczsKLQotCS8qIFN0b3AgVHggcG9ydCBhY3Rpdml0eS4gQ2hlY2sgcG9ydCBUeCBhY3Rpdml0eS4gKi8KLQlxdWV1ZXMgPSByZGwobXAsIFRSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSkgJiAweEZGOwotCWlmIChxdWV1ZXMpIHsKLQkJLyogSXNzdWUgc3RvcCBjb21tYW5kIGZvciBhY3RpdmUgcXVldWVzIG9ubHkgKi8KLQkJd3JsKG1wLCBUUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSksIChxdWV1ZXMgPDwgOCkpOwotCi0JCS8qIFdhaXQgZm9yIGFsbCBUeCBhY3Rpdml0eSB0byB0ZXJtaW5hdGUuICovCi0JCS8qIENoZWNrIHBvcnQgY2F1c2UgcmVnaXN0ZXIgdGhhdCBhbGwgVHggcXVldWVzIGFyZSBzdG9wcGVkICovCi0JCXdoaWxlIChyZGwobXAsIFRSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSkgJiAweEZGKQotCQkJdWRlbGF5KFBIWV9XQUlUX01JQ1JPX1NFQ09ORFMpOwotCi0JCS8qIFdhaXQgZm9yIFR4IEZJRk8gdG8gZW1wdHkgKi8KLQkJd2hpbGUgKHJkbChtcCwgUE9SVF9TVEFUVVNfUkVHKHBvcnRfbnVtKSkgJgotCQkJCQkJCUVUSF9QT1JUX1RYX0ZJRk9fRU1QVFkpCi0JCQl1ZGVsYXkoUEhZX1dBSVRfTUlDUk9fU0VDT05EUyk7Ci0JfQotCi0JcmV0dXJuIHF1ZXVlczsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBtdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfcngoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCi17Ci0JdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwotCXUzMiBxdWV1ZXM7Ci0KLQkvKiBTdG9wIFJ4IHBvcnQgYWN0aXZpdHkuIENoZWNrIHBvcnQgUnggYWN0aXZpdHkuICovCi0JcXVldWVzID0gcmRsKG1wLCBSRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSkgJiAweEZGOwotCWlmIChxdWV1ZXMpIHsKLQkJLyogSXNzdWUgc3RvcCBjb21tYW5kIGZvciBhY3RpdmUgcXVldWVzIG9ubHkgKi8KLQkJd3JsKG1wLCBSRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSwgKHF1ZXVlcyA8PCA4KSk7Ci0KLQkJLyogV2FpdCBmb3IgYWxsIFJ4IGFjdGl2aXR5IHRvIHRlcm1pbmF0ZS4gKi8KLQkJLyogQ2hlY2sgcG9ydCBjYXVzZSByZWdpc3RlciB0aGF0IGFsbCBSeCBxdWV1ZXMgYXJlIHN0b3BwZWQgKi8KLQkJd2hpbGUgKHJkbChtcCwgUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSkpICYgMHhGRikKLQkJCXVkZWxheShQSFlfV0FJVF9NSUNST19TRUNPTkRTKTsKLQl9Ci0KLQlyZXR1cm4gcXVldWVzOwotfQotCi0vKgotICogZXRoX3BvcnRfcmVzZXQgLSBSZXNldCBFdGhlcm5ldCBwb3J0Ci0gKgotICogREVTQ1JJUFRJT046Ci0gKiAJVGhpcyByb3V0aW5lIHJlc2V0cyB0aGUgY2hpcCBieSBhYm9ydGluZyBhbnkgU0RNQSBlbmdpbmUgYWN0aXZpdHkgYW5kCi0gKgljbGVhcmluZyB0aGUgTUlCIGNvdW50ZXJzLiBUaGUgUmVjZWl2ZXIgYW5kIHRoZSBUcmFuc21pdCB1bml0IGFyZSBpbgotICoJaWRsZSBzdGF0ZSBhZnRlciB0aGlzIGNvbW1hbmQgaXMgcGVyZm9ybWVkIGFuZCB0aGUgcG9ydCBpcyBkaXNhYmxlZC4KLSAqCi0gKiBJTlBVVDoKLSAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IFBvcnQuCi0gKgotICogT1VUUFVUOgotICoJQ2hhbm5lbCBhY3Rpdml0eSBpcyBoYWx0ZWQuCi0gKgotICogUkVUVVJOOgotICoJTm9uZS4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3Jlc2V0KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKQotewotCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKLQl1bnNpZ25lZCBpbnQgcmVnX2RhdGE7Ci0KLQltdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfdHgobXApOwotCW12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV9yeChtcCk7Ci0KLQkvKiBDbGVhciBhbGwgTUlCIGNvdW50ZXJzICovCi0JZXRoX2NsZWFyX21pYl9jb3VudGVycyhtcCk7Ci0KLQkvKiBSZXNldCB0aGUgRW5hYmxlIGJpdCBpbiB0aGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotCXJlZ19kYXRhID0gcmRsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSkpOwotCXJlZ19kYXRhICY9IH4oU0VSSUFMX1BPUlRfRU5BQkxFCQl8Ci0JCQlET19OT1RfRk9SQ0VfTElOS19GQUlMCXwKLQkJCUZPUkNFX0xJTktfUEFTUyk7Ci0Jd3JsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksIHJlZ19kYXRhKTsKLX0KLQotCi0vKgotICogZXRoX3BvcnRfcmVhZF9zbWlfcmVnIC0gUmVhZCBQSFkgcmVnaXN0ZXJzCi0gKgotICogREVTQ1JJUFRJT046Ci0gKglUaGlzIHJvdXRpbmUgdXRpbGl6ZSB0aGUgU01JIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBQSFkgaW4KLSAqCW9yZGVyIHRvIHBlcmZvcm0gUEhZIHJlZ2lzdGVyIHJlYWQuCi0gKgotICogSU5QVVQ6Ci0gKglzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcAlFdGhlcm5ldCBQb3J0LgotICoJdW5zaWduZWQgaW50CXBoeV9yZWcJCVBIWSByZWdpc3RlciBhZGRyZXNzIG9mZnNldC4KLSAqCXVuc2lnbmVkIGludAkqdmFsdWUJCVJlZ2lzdGVyIHZhbHVlIGJ1ZmZlci4KLSAqCi0gKiBPVVRQVVQ6Ci0gKglXcml0ZSB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpZWQgUEhZIHJlZ2lzdGVyIGludG8gZ2l2ZW4gYnVmZmVyLgotICoKLSAqIFJFVFVSTjoKLSAqCWZhbHNlIGlmIHRoZSBQSFkgaXMgYnVzeSBvciByZWFkIGRhdGEgaXMgbm90IGluIHZhbGlkIHN0YXRlLgotICoJdHJ1ZSBvdGhlcndpc2UuCi0gKgotICovCi1zdGF0aWMgdm9pZCBldGhfcG9ydF9yZWFkX3NtaV9yZWcoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJdW5zaWduZWQgaW50IHBoeV9yZWcsIHVuc2lnbmVkIGludCAqdmFsdWUpCi17Ci0Jdm9pZCBfX2lvbWVtICpzbWlfcmVnID0gbXAtPnNoYXJlZF9zbWktPmV0aF9iYXNlICsgU01JX1JFRzsKLQlpbnQgcGh5X2FkZHIgPSBldGhlcm5ldF9waHlfZ2V0KG1wKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCi0JLyogdGhlIFNNSSByZWdpc3RlciBpcyBhIHNoYXJlZCByZXNvdXJjZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+c2hhcmVkX3NtaS0+cGh5X2xvY2ssIGZsYWdzKTsKLQotCS8qIHdhaXQgZm9yIHRoZSBTTUkgcmVnaXN0ZXIgdG8gYmVjb21lIGF2YWlsYWJsZSAqLwotCWZvciAoaSA9IDA7IHJlYWRsKHNtaV9yZWcpICYgRVRIX1NNSV9CVVNZOyBpKyspIHsKLQkJaWYgKGkgPT0gUEhZX1dBSVRfSVRFUkFUSU9OUykgewotCQkJcHJpbnRrKCIlczogUEhZIGJ1c3kgdGltZW91dFxuIiwgbXAtPmRldi0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQl1ZGVsYXkoUEhZX1dBSVRfTUlDUk9fU0VDT05EUyk7Ci0JfQotCi0Jd3JpdGVsKChwaHlfYWRkciA8PCAxNikgfCAocGh5X3JlZyA8PCAyMSkgfCBFVEhfU01JX09QQ09ERV9SRUFELAotCQlzbWlfcmVnKTsKLQotCS8qIG5vdyB3YWl0IGZvciB0aGUgZGF0YSB0byBiZSB2YWxpZCAqLwotCWZvciAoaSA9IDA7ICEocmVhZGwoc21pX3JlZykgJiBFVEhfU01JX1JFQURfVkFMSUQpOyBpKyspIHsKLQkJaWYgKGkgPT0gUEhZX1dBSVRfSVRFUkFUSU9OUykgewotCQkJcHJpbnRrKCIlczogUEhZIHJlYWQgdGltZW91dFxuIiwgbXAtPmRldi0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQl1ZGVsYXkoUEhZX1dBSVRfTUlDUk9fU0VDT05EUyk7Ci0JfQotCi0JKnZhbHVlID0gcmVhZGwoc21pX3JlZykgJiAweGZmZmY7Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPnNoYXJlZF9zbWktPnBoeV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBldGhfcG9ydF93cml0ZV9zbWlfcmVnIC0gV3JpdGUgdG8gUEhZIHJlZ2lzdGVycwotICoKLSAqIERFU0NSSVBUSU9OOgotICoJVGhpcyByb3V0aW5lIHV0aWxpemUgdGhlIFNNSSBpbnRlcmZhY2UgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgUEhZIGluCi0gKglvcmRlciB0byBwZXJmb3JtIHdyaXRlcyB0byBQSFkgcmVnaXN0ZXJzLgotICoKLSAqIElOUFVUOgotICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAJRXRoZXJuZXQgUG9ydC4KLSAqCXVuc2lnbmVkIGludAlwaHlfcmVnCQlQSFkgcmVnaXN0ZXIgYWRkcmVzcyBvZmZzZXQuCi0gKgl1bnNpZ25lZCBpbnQJdmFsdWUJCVJlZ2lzdGVyIHZhbHVlLgotICoKLSAqIE9VVFBVVDoKLSAqCVdyaXRlIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIFBIWSByZWdpc3Rlci4KLSAqCi0gKiBSRVRVUk46Ci0gKglmYWxzZSBpZiB0aGUgUEhZIGlzIGJ1c3kuCi0gKgl0cnVlIG90aGVyd2lzZS4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3dyaXRlX3NtaV9yZWcoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJICAgdW5zaWduZWQgaW50IHBoeV9yZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl2b2lkIF9faW9tZW0gKnNtaV9yZWcgPSBtcC0+c2hhcmVkX3NtaS0+ZXRoX2Jhc2UgKyBTTUlfUkVHOwotCWludCBwaHlfYWRkciA9IGV0aGVybmV0X3BoeV9nZXQobXApOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0KLQkvKiB0aGUgU01JIHJlZ2lzdGVyIGlzIGEgc2hhcmVkIHJlc291cmNlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1wLT5zaGFyZWRfc21pLT5waHlfbG9jaywgZmxhZ3MpOwotCi0JLyogd2FpdCBmb3IgdGhlIFNNSSByZWdpc3RlciB0byBiZWNvbWUgYXZhaWxhYmxlICovCi0JZm9yIChpID0gMDsgcmVhZGwoc21pX3JlZykgJiBFVEhfU01JX0JVU1k7IGkrKykgewotCQlpZiAoaSA9PSBQSFlfV0FJVF9JVEVSQVRJT05TKSB7Ci0JCQlwcmludGsoIiVzOiBQSFkgYnVzeSB0aW1lb3V0XG4iLCBtcC0+ZGV2LT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXVkZWxheShQSFlfV0FJVF9NSUNST19TRUNPTkRTKTsKLQl9Ci0KLQl3cml0ZWwoKHBoeV9hZGRyIDw8IDE2KSB8IChwaHlfcmVnIDw8IDIxKSB8Ci0JCUVUSF9TTUlfT1BDT0RFX1dSSVRFIHwgKHZhbHVlICYgMHhmZmZmKSwgc21pX3JlZyk7Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPnNoYXJlZF9zbWktPnBoeV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBXcmFwcGVycyBmb3IgTUlJIHN1cHBvcnQgbGlicmFyeS4KLSAqLwotc3RhdGljIGludCBtdjY0M3h4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCi17Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB2YWw7Ci0KLQlldGhfcG9ydF9yZWFkX3NtaV9yZWcobXAsIGxvY2F0aW9uLCAmdmFsKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdm9pZCBtdjY0M3h4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsKQotewotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlldGhfcG9ydF93cml0ZV9zbWlfcmVnKG1wLCBsb2NhdGlvbiwgdmFsKTsKLX0KLQotLyoKLSAqIGV0aF9wb3J0X3JlY2VpdmUgLSBHZXQgcmVjZWl2ZWQgaW5mb3JtYXRpb24gZnJvbSBSeCByaW5nLgotICoKLSAqIERFU0NSSVBUSU9OOgotICogCVRoaXMgcm91dGluZSByZXR1cm5zIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSBjYWxsZXIuIFRoZXJlIGlzIG5vCi0gKglkYXRhIGNvcHlpbmcgZHVyaW5nIHJvdXRpbmUgb3BlcmF0aW9uLiBBbGwgaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQKLSAqCXVzaW5nIHBvaW50ZXIgdG8gcGFja2V0IGluZm9ybWF0aW9uIHN0cnVjdCBwYXNzZWQgZnJvbSB0aGUgY2FsbGVyLgotICoJSWYgdGhlIHJvdXRpbmUgZXhoYXVzdHMgUnggcmluZyByZXNvdXJjZXMgdGhlbiB0aGUgcmVzb3VyY2UgZXJyb3IgZmxhZwotICoJaXMgc2V0LgotICoKLSAqIElOUFVUOgotICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZQkqbXAJCUV0aGVybmV0IFBvcnQgQ29udHJvbCBzcnR1Y3QuCi0gKglzdHJ1Y3QgcGt0X2luZm8JCSpwX3BrdF9pbmZvCVVzZXIgcGFja2V0IGJ1ZmZlci4KLSAqCi0gKiBPVVRQVVQ6Ci0gKglSeCByaW5nIGN1cnJlbnQgYW5kIHVzZWQgaW5kZXhlcyBhcmUgdXBkYXRlZC4KLSAqCi0gKiBSRVRVUk46Ci0gKglFVEhfRVJST1IgaW4gY2FzZSB0aGUgcm91dGluZSBjYW4gbm90IGFjY2VzcyBSeCBkZXNjIHJpbmcuCi0gKglFVEhfUVVFVUVfRlVMTCBpZiBSeCByaW5nIHJlc291cmNlcyBhcmUgZXhoYXVzdGVkLgotICoJRVRIX0VORF9PRl9KT0IgaWYgdGhlcmUgaXMgbm8gcmVjZWl2ZWQgZGF0YS4KLSAqCUVUSF9PSyBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBFVEhfRlVOQ19SRVRfU1RBVFVTIGV0aF9wb3J0X3JlY2VpdmUoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJCQlzdHJ1Y3QgcGt0X2luZm8gKnBfcGt0X2luZm8pCi17Ci0JaW50IHJ4X25leHRfY3Vycl9kZXNjLCByeF9jdXJyX2Rlc2MsIHJ4X3VzZWRfZGVzYzsKLQl2b2xhdGlsZSBzdHJ1Y3QgZXRoX3J4X2Rlc2MgKnBfcnhfZGVzYzsKLQl1bnNpZ25lZCBpbnQgY29tbWFuZF9zdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIERvIG5vdCBwcm9jZXNzIFJ4IHJpbmcgaW4gY2FzZSBvZiBSeCByaW5nIHJlc291cmNlIGVycm9yICovCi0JaWYgKG1wLT5yeF9yZXNvdXJjZV9lcnIpCi0JCXJldHVybiBFVEhfUVVFVUVfRlVMTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+bG9jaywgZmxhZ3MpOwotCi0JLyogR2V0IHRoZSBSeCBEZXNjIHJpbmcgJ2N1cnIgYW5kICd1c2VkJyBpbmRleGVzICovCi0JcnhfY3Vycl9kZXNjID0gbXAtPnJ4X2N1cnJfZGVzY19xOwotCXJ4X3VzZWRfZGVzYyA9IG1wLT5yeF91c2VkX2Rlc2NfcTsKLQotCXBfcnhfZGVzYyA9ICZtcC0+cF9yeF9kZXNjX2FyZWFbcnhfY3Vycl9kZXNjXTsKLQotCS8qIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBzYXZlIHJlYWRpbmdzIGZyb20gbWVtb3J5ICovCi0JY29tbWFuZF9zdGF0dXMgPSBwX3J4X2Rlc2MtPmNtZF9zdHM7Ci0Jcm1iKCk7Ci0KLQkvKiBOb3RoaW5nIHRvIHJlY2VpdmUuLi4gKi8KLQlpZiAoY29tbWFuZF9zdGF0dXMgJiAoRVRIX0JVRkZFUl9PV05FRF9CWV9ETUEpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBFVEhfRU5EX09GX0pPQjsKLQl9Ci0KLQlwX3BrdF9pbmZvLT5ieXRlX2NudCA9IChwX3J4X2Rlc2MtPmJ5dGVfY250KSAtIFJYX0JVRl9PRkZTRVQ7Ci0JcF9wa3RfaW5mby0+Y21kX3N0cyA9IGNvbW1hbmRfc3RhdHVzOwotCXBfcGt0X2luZm8tPmJ1Zl9wdHIgPSAocF9yeF9kZXNjLT5idWZfcHRyKSArIFJYX0JVRl9PRkZTRVQ7Ci0JcF9wa3RfaW5mby0+cmV0dXJuX2luZm8gPSBtcC0+cnhfc2tiW3J4X2N1cnJfZGVzY107Ci0JcF9wa3RfaW5mby0+bDRpX2NoayA9IHBfcnhfZGVzYy0+YnVmX3NpemU7Ci0KLQkvKgotCSAqIENsZWFuIHRoZSByZXR1cm4gaW5mbyBmaWVsZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQotCSAqIHBhY2tldCBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgdXBwZXIgbGF5ZXJzCi0JICovCi0JbXAtPnJ4X3NrYltyeF9jdXJyX2Rlc2NdID0gTlVMTDsKLQotCS8qIFVwZGF0ZSBjdXJyZW50IGluZGV4IGluIGRhdGEgc3RydWN0dXJlICovCi0JcnhfbmV4dF9jdXJyX2Rlc2MgPSAocnhfY3Vycl9kZXNjICsgMSkgJSBtcC0+cnhfcmluZ19zaXplOwotCW1wLT5yeF9jdXJyX2Rlc2NfcSA9IHJ4X25leHRfY3Vycl9kZXNjOwotCi0JLyogUnggZGVzY3JpcHRvcnMgZXhoYXVzdGVkLiBTZXQgdGhlIFJ4IHJpbmcgcmVzb3VyY2UgZXJyb3IgZmxhZyAqLwotCWlmIChyeF9uZXh0X2N1cnJfZGVzYyA9PSByeF91c2VkX2Rlc2MpCi0JCW1wLT5yeF9yZXNvdXJjZV9lcnIgPSAxOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBFVEhfT0s7Ci19Ci0KLS8qCi0gKiBldGhfcnhfcmV0dXJuX2J1ZmYgLSBSZXR1cm5zIGEgUnggYnVmZmVyIGJhY2sgdG8gdGhlIFJ4IHJpbmcuCi0gKgotICogREVTQ1JJUFRJT046Ci0gKglUaGlzIHJvdXRpbmUgcmV0dXJucyBhIFJ4IGJ1ZmZlciBiYWNrIHRvIHRoZSBSeCByaW5nLiBJdCByZXRyaWV2ZXMgdGhlCi0gKgluZXh0ICd1c2VkJyBkZXNjcmlwdG9yIGFuZCBhdHRhY2hlZCB0aGUgcmV0dXJuZWQgYnVmZmVyIHRvIGl0LgotICoJSW4gY2FzZSB0aGUgUnggcmluZyB3YXMgaW4gInJlc291cmNlIGVycm9yIiBjb25kaXRpb24sIHdoZXJlIHRoZXJlIGFyZQotICoJbm8gYXZhaWxhYmxlIFJ4IHJlc291cmNlcywgdGhlIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcmVzb3VyY2UgZXJyb3IgZmxhZy4KLSAqCi0gKiBJTlBVVDoKLSAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUJKm1wCQlFdGhlcm5ldCBQb3J0IENvbnRyb2wgc3J0dWN0LgotICoJc3RydWN0IHBrdF9pbmZvCQkqcF9wa3RfaW5mbwlJbmZvcm1hdGlvbiBvbiByZXR1cm5lZCBidWZmZXIuCi0gKgotICogT1VUUFVUOgotICoJTmV3IGF2YWlsYWJsZSBSeCByZXNvdXJjZSBpbiBSeCBkZXNjcmlwdG9yIHJpbmcuCi0gKgotICogUkVUVVJOOgotICoJRVRIX0VSUk9SIGluIGNhc2UgdGhlIHJvdXRpbmUgY2FuIG5vdCBhY2Nlc3MgUnggZGVzYyByaW5nLgotICoJRVRIX09LIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIEVUSF9GVU5DX1JFVF9TVEFUVVMgZXRoX3J4X3JldHVybl9idWZmKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCQkJc3RydWN0IHBrdF9pbmZvICpwX3BrdF9pbmZvKQotewotCWludCB1c2VkX3J4X2Rlc2M7CS8qIFdoZXJlIHRvIHJldHVybiBSeCByZXNvdXJjZSAqLwotCXZvbGF0aWxlIHN0cnVjdCBldGhfcnhfZGVzYyAqcF91c2VkX3J4X2Rlc2M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+bG9jaywgZmxhZ3MpOwotCi0JLyogR2V0ICd1c2VkJyBSeCBkZXNjcmlwdG9yICovCi0JdXNlZF9yeF9kZXNjID0gbXAtPnJ4X3VzZWRfZGVzY19xOwotCXBfdXNlZF9yeF9kZXNjID0gJm1wLT5wX3J4X2Rlc2NfYXJlYVt1c2VkX3J4X2Rlc2NdOwotCi0JcF91c2VkX3J4X2Rlc2MtPmJ1Zl9wdHIgPSBwX3BrdF9pbmZvLT5idWZfcHRyOwotCXBfdXNlZF9yeF9kZXNjLT5idWZfc2l6ZSA9IHBfcGt0X2luZm8tPmJ5dGVfY250OwotCW1wLT5yeF9za2JbdXNlZF9yeF9kZXNjXSA9IHBfcGt0X2luZm8tPnJldHVybl9pbmZvOwotCi0JLyogRmx1c2ggdGhlIHdyaXRlIHBpcGUgKi8KLQotCS8qIFJldHVybiB0aGUgZGVzY3JpcHRvciB0byBETUEgb3duZXJzaGlwICovCi0Jd21iKCk7Ci0JcF91c2VkX3J4X2Rlc2MtPmNtZF9zdHMgPQotCQkJRVRIX0JVRkZFUl9PV05FRF9CWV9ETUEgfCBFVEhfUlhfRU5BQkxFX0lOVEVSUlVQVDsKLQl3bWIoKTsKLQotCS8qIE1vdmUgdGhlIHVzZWQgZGVzY3JpcHRvciBwb2ludGVyIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IgKi8KLQltcC0+cnhfdXNlZF9kZXNjX3EgPSAodXNlZF9yeF9kZXNjICsgMSkgJSBtcC0+cnhfcmluZ19zaXplOwotCi0JLyogQW55IFJ4IHJldHVybiBjYW5jZWxzIHRoZSBSeCByZXNvdXJjZSBlcnJvciBzdGF0dXMgKi8KLQltcC0+cnhfcmVzb3VyY2VfZXJyID0gMDsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gRVRIX09LOwotfQotCi0vKioqKioqKioqKioqKiBCZWdpbiBldGh0b29sIHN1cHBvcnQgKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IG12NjQzeHhfc3RhdHMgewotCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLQlpbnQgc2l6ZW9mX3N0YXQ7Ci0JaW50IHN0YXRfb2Zmc2V0OwotfTsKLQotI2RlZmluZSBNVjY0M1hYX1NUQVQobSkgRklFTERfU0laRU9GKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUsIG0pLCBcCi0JCQkJCW9mZnNldG9mKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUsIG0pCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXY2NDN4eF9zdGF0cyBtdjY0M3h4X2dzdHJpbmdzX3N0YXRzW10gPSB7Ci0JeyAicnhfcGFja2V0cyIsIE1WNjQzWFhfU1RBVChzdGF0cy5yeF9wYWNrZXRzKSB9LAotCXsgInR4X3BhY2tldHMiLCBNVjY0M1hYX1NUQVQoc3RhdHMudHhfcGFja2V0cykgfSwKLQl7ICJyeF9ieXRlcyIsIE1WNjQzWFhfU1RBVChzdGF0cy5yeF9ieXRlcykgfSwKLQl7ICJ0eF9ieXRlcyIsIE1WNjQzWFhfU1RBVChzdGF0cy50eF9ieXRlcykgfSwKLQl7ICJyeF9lcnJvcnMiLCBNVjY0M1hYX1NUQVQoc3RhdHMucnhfZXJyb3JzKSB9LAotCXsgInR4X2Vycm9ycyIsIE1WNjQzWFhfU1RBVChzdGF0cy50eF9lcnJvcnMpIH0sCi0JeyAicnhfZHJvcHBlZCIsIE1WNjQzWFhfU1RBVChzdGF0cy5yeF9kcm9wcGVkKSB9LAotCXsgInR4X2Ryb3BwZWQiLCBNVjY0M1hYX1NUQVQoc3RhdHMudHhfZHJvcHBlZCkgfSwKLQl7ICJnb29kX29jdGV0c19yZWNlaXZlZCIsIE1WNjQzWFhfU1RBVChtaWJfY291bnRlcnMuZ29vZF9vY3RldHNfcmVjZWl2ZWQpIH0sCi0JeyAiYmFkX29jdGV0c19yZWNlaXZlZCIsIE1WNjQzWFhfU1RBVChtaWJfY291bnRlcnMuYmFkX29jdGV0c19yZWNlaXZlZCkgfSwKLQl7ICJpbnRlcm5hbF9tYWNfdHJhbnNtaXRfZXJyIiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5pbnRlcm5hbF9tYWNfdHJhbnNtaXRfZXJyKSB9LAotCXsgImdvb2RfZnJhbWVzX3JlY2VpdmVkIiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5nb29kX2ZyYW1lc19yZWNlaXZlZCkgfSwKLQl7ICJiYWRfZnJhbWVzX3JlY2VpdmVkIiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5iYWRfZnJhbWVzX3JlY2VpdmVkKSB9LAotCXsgImJyb2FkY2FzdF9mcmFtZXNfcmVjZWl2ZWQiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmJyb2FkY2FzdF9mcmFtZXNfcmVjZWl2ZWQpIH0sCi0JeyAibXVsdGljYXN0X2ZyYW1lc19yZWNlaXZlZCIsIE1WNjQzWFhfU1RBVChtaWJfY291bnRlcnMubXVsdGljYXN0X2ZyYW1lc19yZWNlaXZlZCkgfSwKLQl7ICJmcmFtZXNfNjRfb2N0ZXRzIiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5mcmFtZXNfNjRfb2N0ZXRzKSB9LAotCXsgImZyYW1lc182NV90b18xMjdfb2N0ZXRzIiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5mcmFtZXNfNjVfdG9fMTI3X29jdGV0cykgfSwKLQl7ICJmcmFtZXNfMTI4X3RvXzI1NV9vY3RldHMiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmZyYW1lc18xMjhfdG9fMjU1X29jdGV0cykgfSwKLQl7ICJmcmFtZXNfMjU2X3RvXzUxMV9vY3RldHMiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmZyYW1lc18yNTZfdG9fNTExX29jdGV0cykgfSwKLQl7ICJmcmFtZXNfNTEyX3RvXzEwMjNfb2N0ZXRzIiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5mcmFtZXNfNTEyX3RvXzEwMjNfb2N0ZXRzKSB9LAotCXsgImZyYW1lc18xMDI0X3RvX21heF9vY3RldHMiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmZyYW1lc18xMDI0X3RvX21heF9vY3RldHMpIH0sCi0JeyAiZ29vZF9vY3RldHNfc2VudCIsIE1WNjQzWFhfU1RBVChtaWJfY291bnRlcnMuZ29vZF9vY3RldHNfc2VudCkgfSwKLQl7ICJnb29kX2ZyYW1lc19zZW50IiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5nb29kX2ZyYW1lc19zZW50KSB9LAotCXsgImV4Y2Vzc2l2ZV9jb2xsaXNpb24iLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmV4Y2Vzc2l2ZV9jb2xsaXNpb24pIH0sCi0JeyAibXVsdGljYXN0X2ZyYW1lc19zZW50IiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5tdWx0aWNhc3RfZnJhbWVzX3NlbnQpIH0sCi0JeyAiYnJvYWRjYXN0X2ZyYW1lc19zZW50IiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5icm9hZGNhc3RfZnJhbWVzX3NlbnQpIH0sCi0JeyAidW5yZWNfbWFjX2NvbnRyb2xfcmVjZWl2ZWQiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLnVucmVjX21hY19jb250cm9sX3JlY2VpdmVkKSB9LAotCXsgImZjX3NlbnQiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmZjX3NlbnQpIH0sCi0JeyAiZ29vZF9mY19yZWNlaXZlZCIsIE1WNjQzWFhfU1RBVChtaWJfY291bnRlcnMuZ29vZF9mY19yZWNlaXZlZCkgfSwKLQl7ICJiYWRfZmNfcmVjZWl2ZWQiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmJhZF9mY19yZWNlaXZlZCkgfSwKLQl7ICJ1bmRlcnNpemVfcmVjZWl2ZWQiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLnVuZGVyc2l6ZV9yZWNlaXZlZCkgfSwKLQl7ICJmcmFnbWVudHNfcmVjZWl2ZWQiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmZyYWdtZW50c19yZWNlaXZlZCkgfSwKLQl7ICJvdmVyc2l6ZV9yZWNlaXZlZCIsIE1WNjQzWFhfU1RBVChtaWJfY291bnRlcnMub3ZlcnNpemVfcmVjZWl2ZWQpIH0sCi0JeyAiamFiYmVyX3JlY2VpdmVkIiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5qYWJiZXJfcmVjZWl2ZWQpIH0sCi0JeyAibWFjX3JlY2VpdmVfZXJyb3IiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLm1hY19yZWNlaXZlX2Vycm9yKSB9LAotCXsgImJhZF9jcmNfZXZlbnQiLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmJhZF9jcmNfZXZlbnQpIH0sCi0JeyAiY29sbGlzaW9uIiwgTVY2NDNYWF9TVEFUKG1pYl9jb3VudGVycy5jb2xsaXNpb24pIH0sCi0JeyAibGF0ZV9jb2xsaXNpb24iLCBNVjY0M1hYX1NUQVQobWliX2NvdW50ZXJzLmxhdGVfY29sbGlzaW9uKSB9LAotfTsKLQotI2RlZmluZSBNVjY0M1hYX1NUQVRTX0xFTglBUlJBWV9TSVpFKG12NjQzeHhfZ3N0cmluZ3Nfc3RhdHMpCi0KLXN0YXRpYyB2b2lkIG12NjQzeHhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQotewotCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCAgbXY2NDN4eF9kcml2ZXJfbmFtZSwgMzIpOwotCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgbXY2NDN4eF9kcml2ZXJfdmVyc2lvbiwgMzIpOwotCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIk4vQSIsIDMyKTsKLQlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCAibXY2NDN4eCIsIDMyKTsKLQlkcnZpbmZvLT5uX3N0YXRzID0gTVY2NDNYWF9TVEFUU19MRU47Ci19Ci0KLXN0YXRpYyBpbnQgbXY2NDN4eF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgc3NldCkKLXsKLQlzd2l0Y2ggKHNzZXQpIHsKLQljYXNlIEVUSF9TU19TVEFUUzoKLQkJcmV0dXJuIE1WNjQzWFhfU1RBVFNfTEVOOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG12NjQzeHhfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCQlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHVpbnQ2NF90ICpkYXRhKQotewotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2LT5wcml2OwotCWludCBpOwotCi0JZXRoX3VwZGF0ZV9taWJfY291bnRlcnMobXApOwotCi0JZm9yIChpID0gMDsgaSA8IE1WNjQzWFhfU1RBVFNfTEVOOyBpKyspIHsKLQkJY2hhciAqcCA9IChjaGFyICopbXArbXY2NDN4eF9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDsKLQkJZGF0YVtpXSA9IChtdjY0M3h4X2dzdHJpbmdzX3N0YXRzW2ldLnNpemVvZl9zdGF0ID09Ci0JCQlzaXplb2YodWludDY0X3QpKSA/ICoodWludDY0X3QgKilwIDogKih1aW50MzJfdCAqKXA7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBtdjY0M3h4X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQzMl90IHN0cmluZ3NldCwKLQkJCQl1aW50OF90ICpkYXRhKQotewotCWludCBpOwotCi0Jc3dpdGNoKHN0cmluZ3NldCkgewotCWNhc2UgRVRIX1NTX1NUQVRTOgotCQlmb3IgKGk9MDsgaSA8IE1WNjQzWFhfU1RBVFNfTEVOOyBpKyspIHsKLQkJCW1lbWNweShkYXRhICsgaSAqIEVUSF9HU1RSSU5HX0xFTiwKLQkJCQkJbXY2NDN4eF9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X3N0cmluZywKLQkJCQkJRVRIX0dTVFJJTkdfTEVOKTsKLQkJfQotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB1MzIgbXY2NDN4eF9ldGhfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gbWlpX2xpbmtfb2soJm1wLT5taWkpOwotfQotCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX253YXlfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZtcC0+bWlpKTsKLX0KLQotc3RhdGljIGludCBtdjY0M3h4X2V0aF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJm1wLT5taWksIGlmX21paShpZnIpLCBjbWQsIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG12NjQzeHhfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9zZXR0aW5ncyAgICAgICAgICAgPSBtdjY0M3h4X2dldF9zZXR0aW5ncywKLQkuc2V0X3NldHRpbmdzICAgICAgICAgICA9IG12NjQzeHhfc2V0X3NldHRpbmdzLAotCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgID0gbXY2NDN4eF9nZXRfZHJ2aW5mbywKLQkuZ2V0X2xpbmsgICAgICAgICAgICAgICA9IG12NjQzeHhfZXRoX2dldF9saW5rLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfc3NldF9jb3VudAkJPSBtdjY0M3h4X2dldF9zc2V0X2NvdW50LAotCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gbXY2NDN4eF9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IG12NjQzeHhfZ2V0X3N0cmluZ3MsCi0JLm53YXlfcmVzZXQJCT0gbXY2NDN4eF9ldGhfbndheV9yZXN0YXJ0LAotfTsKLQotLyoqKioqKioqKioqKiogRW5kIGV0aHRvb2wgc3VwcG9ydCAqKioqKioqKioqKioqKioqKioqKioqKioqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIE1WNjQzWFhfRVRIX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggODIzYmI2ZC4uM2FiMGU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldF9scm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kY2EuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgpAQCAtMTI0LDcgKzEyNSw2IEBACiAKIHN0cnVjdCBteXJpMTBnZV9yeF9idWYgewogCXN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9yZWN2IF9faW9tZW0gKmxhbmFpOwkvKiBsYW5haSBwdHIgZm9yIHJlY3YgcmluZyAqLwotCXU4IF9faW9tZW0gKndjX2ZpZm87CS8qIHcvYyByeCBkbWEgYWRkciBmaWZvIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfcmVjdiAqc2hhZG93OwkvKiBob3N0IHNoYWRvdyBvZiByZWN2IHJpbmcgKi8KIAlzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmZmVyX3N0YXRlICppbmZvOwogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMTM5LDcgKzEzOSw2IEBACiAKIHN0cnVjdCBteXJpMTBnZV90eF9idWYgewogCXN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kIF9faW9tZW0gKmxhbmFpOwkvKiBsYW5haSBwdHIgZm9yIHNlbmRxICovCi0JdTggX19pb21lbSAqd2NfZmlmbzsJLyogdy9jIHNlbmQgZmlmbyBhZGRyZXNzICovCiAJc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQgKnJlcV9saXN0OwkvKiBob3N0IHNoYWRvdyBvZiBzZW5kcSAqLwogCWNoYXIgKnJlcV9ieXRlczsKIAlzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmZmVyX3N0YXRlICppbmZvOwpAQCAtMTg1LDExICsxODQsMTggQEAKIAlkbWFfYWRkcl90IGZ3X3N0YXRzX2J1czsKIAlpbnQgd2F0Y2hkb2dfdHhfZG9uZTsKIAlpbnQgd2F0Y2hkb2dfdHhfcmVxOworI2lmZGVmIENPTkZJR19EQ0EKKwlpbnQgY2FjaGVkX2RjYV90YWc7CisJaW50IGNwdTsKKwlfX2JlMzIgX19pb21lbSAqZGNhX3RhZzsKKyNlbmRpZgorCWNoYXIgaXJxX2Rlc2NbMzJdOwogfTsKIAogc3RydWN0IG15cmkxMGdlX3ByaXYgewotCXN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSBzczsKKwlzdHJ1Y3QgbXlyaTEwZ2Vfc2xpY2Vfc3RhdGUgKnNzOwogCWludCB0eF9ib3VuZGFyeTsJLyogYm91bmRhcnkgdHJhbnNtaXRzIGNhbm5vdCBjcm9zcyAqLworCWludCBudW1fc2xpY2VzOwogCWludCBydW5uaW5nOwkJLyogcnVubmluZz8gICAgICAgICAgICAgKi8KIAlpbnQgY3N1bV9mbGFnOwkJLyogcnhfY3N1bXM/ICAgICAgICAgICAgKi8KIAlpbnQgc21hbGxfYnl0ZXM7CkBAIC0yMDgsNiArMjE0LDExIEBACiAJZG1hX2FkZHJfdCBjbWRfYnVzOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCWludCBtc2lfZW5hYmxlZDsKKwlpbnQgbXNpeF9lbmFibGVkOworCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X3ZlY3RvcnM7CisjaWZkZWYgQ09ORklHX0RDQQorCWludCBkY2FfZW5hYmxlZDsKKyNlbmRpZgogCXUzMiBsaW5rX3N0YXRlOwogCXVuc2lnbmVkIGludCByZG1hX3RhZ3NfYXZhaWxhYmxlOwogCWludCBpbnRyX2NvYWxfZGVsYXk7CkBAIC0yNDQsNiArMjU1LDggQEAKIAogc3RhdGljIGNoYXIgKm15cmkxMGdlX2Z3X3VuYWxpZ25lZCA9ICJteXJpMTBnZV9ldGhwX3o4ZS5kYXQiOwogc3RhdGljIGNoYXIgKm15cmkxMGdlX2Z3X2FsaWduZWQgPSAibXlyaTEwZ2VfZXRoX3o4ZS5kYXQiOworc3RhdGljIGNoYXIgKm15cmkxMGdlX2Z3X3Jzc191bmFsaWduZWQgPSAibXlyaTEwZ2VfcnNzX2V0aHBfejhlLmRhdCI7CitzdGF0aWMgY2hhciAqbXlyaTEwZ2VfZndfcnNzX2FsaWduZWQgPSAibXlyaTEwZ2VfcnNzX2V0aF96OGUuZGF0IjsKIAogc3RhdGljIGNoYXIgKm15cmkxMGdlX2Z3X25hbWUgPSBOVUxMOwogbW9kdWxlX3BhcmFtKG15cmkxMGdlX2Z3X25hbWUsIGNoYXJwLCBTX0lSVUdPIHwgU19JV1VTUik7CkBAIC0zMTcsOSArMzMwLDE3IEBACiAKIHN0YXRpYyBpbnQgbXlyaTEwZ2VfcmVzZXRfcmVjb3ZlciA9IDE7CiAKLXN0YXRpYyBpbnQgbXlyaTEwZ2Vfd2NmaWZvID0gMDsKLW1vZHVsZV9wYXJhbShteXJpMTBnZV93Y2ZpZm8sIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX3djZmlmbywgIkVuYWJsZSBXQyBGaWZvIHdoZW4gV0MgaXMgZW5hYmxlZCIpOworc3RhdGljIGludCBteXJpMTBnZV9tYXhfc2xpY2VzID0gMTsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9tYXhfc2xpY2VzLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9tYXhfc2xpY2VzLCAiTWF4IHR4L3J4IHF1ZXVlcyIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX3Jzc19oYXNoID0gTVhHRUZXX1JTU19IQVNIX1RZUEVfU1JDX1BPUlQ7Cittb2R1bGVfcGFyYW0obXlyaTEwZ2VfcnNzX2hhc2gsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX3Jzc19oYXNoLCAiVHlwZSBvZiBSU1MgaGFzaGluZyB0byBkbyIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX2RjYSA9IDE7Cittb2R1bGVfcGFyYW0obXlyaTEwZ2VfZGNhLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9kY2EsICJFbmFibGUgRENBIGlmIHBvc3NpYmxlIik7CiAKICNkZWZpbmUgTVlSSTEwR0VfRldfT0ZGU0VUIDEwMjQqMTAyNAogI2RlZmluZSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoWCkgXApAQCAtNjY0LDcgKzY4NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXlyaTEwZ2VfbG9hZF9maXJtd2FyZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQorc3RhdGljIGludCBteXJpMTBnZV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AsIGludCBhZG9wdCkKIHsKIAljaGFyIF9faW9tZW0gKnN1Ym1pdDsKIAlfX2JlMzIgYnVmWzE2XSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oOCkpKTsKQEAgLTY3NCw2ICs2OTUsOCBAQAogCXNpemUgPSAwOwogCXN0YXR1cyA9IG15cmkxMGdlX2xvYWRfaG90cGx1Z19maXJtd2FyZShtZ3AsICZzaXplKTsKIAlpZiAoc3RhdHVzKSB7CisJCWlmICghYWRvcHQpCisJCQlyZXR1cm4gc3RhdHVzOwogCQlkZXZfd2FybigmbWdwLT5wZGV2LT5kZXYsICJob3RwbHVnIGZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iKTsKIAogCQkvKiBEbyBub3QgYXR0ZW1wdCB0byBhZG9wdCBmaXJtd2FyZSBpZiB0aGVyZQpAQCAtODY2LDggKzg4OSwxMiBAQAogc3RhdGljIGludCBteXJpMTBnZV9yZXNldChzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQogewogCXN0cnVjdCBteXJpMTBnZV9jbWQgY21kOwotCWludCBzdGF0dXM7CisJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKKwlpbnQgaSwgc3RhdHVzOwogCXNpemVfdCBieXRlczsKKyNpZmRlZiBDT05GSUdfRENBCisJdW5zaWduZWQgbG9uZyBkY2FfdGFnX29mZjsKKyNlbmRpZgogCiAJLyogdHJ5IHRvIHNlbmQgYSByZXNldCBjb21tYW5kIHRvIHRoZSBjYXJkIHRvIHNlZSBpZiBpdAogCSAqIGlzIGFsaXZlICovCkBAIC04NzksMjAgKzkwNiw3NCBAQAogCX0KIAogCSh2b2lkKW15cmkxMGdlX2RtYV90ZXN0KG1ncCwgTVhHRUZXX0RNQV9URVNUKTsKKwkvKgorCSAqIFVzZSBub24tbmRpcyBtY3Bfc2xvdCAoZWcsIDQgYnl0ZXMgdG90YWwsCisJICogbm8gdG9lcGxpdHogaGFzaCB2YWx1ZSByZXR1cm5lZC4gIE9sZGVyIGZpcm13YXJlIHdpbGwKKwkgKiBub3QgdW5kZXJzdGFuZCB0aGlzIGNvbW1hbmQsIGJ1dCB3aWxsIHVzZSB0aGUgY29ycmVjdAorCSAqIHNpemVkIG1jcF9zbG90LCBzbyB3ZSBpZ25vcmUgZXJyb3IgcmV0dXJucworCSAqLworCWNtZC5kYXRhMCA9IE1YR0VGV19SU1NfTUNQX1NMT1RfVFlQRV9NSU47CisJKHZvaWQpbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9SU1NfTUNQX1NMT1RfVFlQRSwgJmNtZCwgMCk7CiAKIAkvKiBOb3cgZXhjaGFuZ2UgaW5mb3JtYXRpb24gYWJvdXQgaW50ZXJydXB0cyAgKi8KIAotCWJ5dGVzID0gbWdwLT5tYXhfaW50cl9zbG90cyAqIHNpemVvZigqbWdwLT5zcy5yeF9kb25lLmVudHJ5KTsKLQltZW1zZXQobWdwLT5zcy5yeF9kb25lLmVudHJ5LCAwLCBieXRlcyk7CisJYnl0ZXMgPSBtZ3AtPm1heF9pbnRyX3Nsb3RzICogc2l6ZW9mKCptZ3AtPnNzWzBdLnJ4X2RvbmUuZW50cnkpOwogCWNtZC5kYXRhMCA9ICh1MzIpIGJ5dGVzOwogCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9TRVRfSU5UUlFfU0laRSwgJmNtZCwgMCk7Ci0JY21kLmRhdGEwID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIobWdwLT5zcy5yeF9kb25lLmJ1cyk7Ci0JY21kLmRhdGExID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKG1ncC0+c3MucnhfZG9uZS5idXMpOwotCXN0YXR1cyB8PSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX0lOVFJRX0RNQSwgJmNtZCwgMCk7CisKKwkvKgorCSAqIEV2ZW4gdGhvdWdoIHdlIGFscmVhZHkga25vdyBob3cgbWFueSBzbGljZXMgYXJlIHN1cHBvcnRlZAorCSAqIHZpYSBteXJpMTBnZV9wcm9iZV9zbGljZXMoKSBNWEdFRldfQ01EX0dFVF9NQVhfUlNTX1FVRVVFUworCSAqIGhhcyBtYWdpYyBzaWRlIGVmZmVjdHMsIGFuZCBtdXN0IGJlIGNhbGxlZCBhZnRlciBhIHJlc2V0LgorCSAqIEl0IG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIGNhbGxpbmcgYW55IFJTUyByZWxhdGVkIGNtZHMsCisJICogaW5jbHVkaW5nIGFzc2lnbmluZyBhbiBpbnRlcnJ1cHQgcXVldWUgZm9yIGFueXRoaW5nIGJ1dAorCSAqIHNsaWNlIDAuICBJdCBtdXN0IGFsc28gYmUgY2FsbGVkICphZnRlcioKKwkgKiBNWEdFRldfQ01EX1NFVF9JTlRSUV9TSVpFLCBzaW5jZSB0aGUgaW50cnEgc2l6ZSBpcyB1c2VkIGJ5CisJICogdGhlIGZpcm13YXJlIHRvIGNvbXB1dGUgb2Zmc2V0cy4KKwkgKi8KKworCWlmIChtZ3AtPm51bV9zbGljZXMgPiAxKSB7CisKKwkJLyogYXNrIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzbGljZXMgaXQgc3VwcG9ydHMgKi8KKwkJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9NQVhfUlNTX1FVRVVFUywKKwkJCQkJICAgJmNtZCwgMCk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJZGV2X2VycigmbWdwLT5wZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBnZXQgbnVtYmVyIG9mIHNsaWNlc1xuIik7CisJCX0KKworCQkvKgorCQkgKiBNWEdFRldfQ01EX0VOQUJMRV9SU1NfUVVFVUVTIG11c3QgYmUgY2FsbGVkIHByaW9yCisJCSAqIHRvIHNldHRpbmcgdXAgdGhlIGludGVycnVwdCBxdWV1ZSBETUEKKwkJICovCisKKwkJY21kLmRhdGEwID0gbWdwLT5udW1fc2xpY2VzOworCQljbWQuZGF0YTEgPSAxOwkvKiB1c2UgTVNJLVggKi8KKwkJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0VOQUJMRV9SU1NfUVVFVUVTLAorCQkJCQkgICAmY21kLCAwKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwKKwkJCQkiZmFpbGVkIHRvIHNldCBudW1iZXIgb2Ygc2xpY2VzXG4iKTsKKworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKKwkJc3MgPSAmbWdwLT5zc1tpXTsKKwkJY21kLmRhdGEwID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIoc3MtPnJ4X2RvbmUuYnVzKTsKKwkJY21kLmRhdGExID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKHNzLT5yeF9kb25lLmJ1cyk7CisJCWNtZC5kYXRhMiA9IGk7CisJCXN0YXR1cyB8PSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX0lOVFJRX0RNQSwKKwkJCQkJICAgICZjbWQsIDApOworCX07CiAKIAlzdGF0dXMgfD0KIAkgICAgbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9JUlFfQUNLX09GRlNFVCwgJmNtZCwgMCk7Ci0JbWdwLT5zcy5pcnFfY2xhaW0gPSAoX19pb21lbSBfX2JlMzIgKikgKG1ncC0+c3JhbSArIGNtZC5kYXRhMCk7CisJZm9yIChpID0gMDsgaSA8IG1ncC0+bnVtX3NsaWNlczsgaSsrKSB7CisJCXNzID0gJm1ncC0+c3NbaV07CisJCXNzLT5pcnFfY2xhaW0gPQorCQkgICAgKF9faW9tZW0gX19iZTMyICopIChtZ3AtPnNyYW0gKyBjbWQuZGF0YTAgKyA4ICogaSk7CisJfQogCXN0YXR1cyB8PSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfR0VUX0lSUV9ERUFTU0VSVF9PRkZTRVQsCiAJCQkJICAgICZjbWQsIDApOwogCW1ncC0+aXJxX2RlYXNzZXJ0ID0gKF9faW9tZW0gX19iZTMyICopIChtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOwpAQCAtOTA2LDI0ICs5ODcsMTE2IEBACiAJfQogCXB1dF9iZTMyKGh0b25sKG1ncC0+aW50cl9jb2FsX2RlbGF5KSwgbWdwLT5pbnRyX2NvYWxfZGVsYXlfcHRyKTsKIAotCW1lbXNldChtZ3AtPnNzLnJ4X2RvbmUuZW50cnksIDAsIGJ5dGVzKTsKKyNpZmRlZiBDT05GSUdfRENBCisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9EQ0FfT0ZGU0VULCAmY21kLCAwKTsKKwlkY2FfdGFnX29mZiA9IGNtZC5kYXRhMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKKwkJc3MgPSAmbWdwLT5zc1tpXTsKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlzcy0+ZGNhX3RhZyA9IChfX2lvbWVtIF9fYmUzMiAqKQorCQkJICAgIChtZ3AtPnNyYW0gKyBkY2FfdGFnX29mZiArIDQgKiBpKTsKKwkJfSBlbHNlIHsKKwkJCXNzLT5kY2FfdGFnID0gTlVMTDsKKwkJfQorCX0KKyNlbmRpZgkJCQkvKiBDT05GSUdfRENBICovCiAKIAkvKiByZXNldCBtY3AvZHJpdmVyIHNoYXJlZCBzdGF0ZSBiYWNrIHRvIDAgKi8KLQltZ3AtPnNzLnR4LnJlcSA9IDA7Ci0JbWdwLT5zcy50eC5kb25lID0gMDsKLQltZ3AtPnNzLnR4LnBrdF9zdGFydCA9IDA7Ci0JbWdwLT5zcy50eC5wa3RfZG9uZSA9IDA7Ci0JbWdwLT5zcy5yeF9iaWcuY250ID0gMDsKLQltZ3AtPnNzLnJ4X3NtYWxsLmNudCA9IDA7Ci0JbWdwLT5zcy5yeF9kb25lLmlkeCA9IDA7Ci0JbWdwLT5zcy5yeF9kb25lLmNudCA9IDA7CisKIAltZ3AtPmxpbmtfY2hhbmdlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1ncC0+bnVtX3NsaWNlczsgaSsrKSB7CisJCXNzID0gJm1ncC0+c3NbaV07CisKKwkJbWVtc2V0KHNzLT5yeF9kb25lLmVudHJ5LCAwLCBieXRlcyk7CisJCXNzLT50eC5yZXEgPSAwOworCQlzcy0+dHguZG9uZSA9IDA7CisJCXNzLT50eC5wa3Rfc3RhcnQgPSAwOworCQlzcy0+dHgucGt0X2RvbmUgPSAwOworCQlzcy0+cnhfYmlnLmNudCA9IDA7CisJCXNzLT5yeF9zbWFsbC5jbnQgPSAwOworCQlzcy0+cnhfZG9uZS5pZHggPSAwOworCQlzcy0+cnhfZG9uZS5jbnQgPSAwOworCQlzcy0+dHgud2FrZV9xdWV1ZSA9IDA7CisJCXNzLT50eC5zdG9wX3F1ZXVlID0gMDsKKwl9CisKIAlzdGF0dXMgPSBteXJpMTBnZV91cGRhdGVfbWFjX2FkZHJlc3MobWdwLCBtZ3AtPmRldi0+ZGV2X2FkZHIpOwogCW15cmkxMGdlX2NoYW5nZV9wYXVzZShtZ3AsIG1ncC0+cGF1c2UpOwogCW15cmkxMGdlX3NldF9tdWx0aWNhc3RfbGlzdChtZ3AtPmRldik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAorI2lmZGVmIENPTkZJR19EQ0EKK3N0YXRpYyB2b2lkCitteXJpMTBnZV93cml0ZV9kY2Eoc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzcywgaW50IGNwdSwgaW50IHRhZykKK3sKKwlzcy0+Y3B1ID0gY3B1OworCXNzLT5jYWNoZWRfZGNhX3RhZyA9IHRhZzsKKwlwdXRfYmUzMihodG9ubCh0YWcpLCBzcy0+ZGNhX3RhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBteXJpMTBnZV91cGRhdGVfZGNhKHN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSAqc3MpCit7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKKwlpbnQgdGFnOworCisJaWYgKGNwdSAhPSBzcy0+Y3B1KSB7CisJCXRhZyA9IGRjYV9nZXRfdGFnKGNwdSk7CisJCWlmIChzcy0+Y2FjaGVkX2RjYV90YWcgIT0gdGFnKQorCQkJbXlyaTEwZ2Vfd3JpdGVfZGNhKHNzLCBjcHUsIHRhZyk7CisJfQorCXB1dF9jcHUoKTsKK30KKworc3RhdGljIHZvaWQgbXlyaTEwZ2Vfc2V0dXBfZGNhKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJaW50IGVyciwgaTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1ncC0+cGRldjsKKworCWlmIChtZ3AtPnNzWzBdLmRjYV90YWcgPT0gTlVMTCB8fCBtZ3AtPmRjYV9lbmFibGVkKQorCQlyZXR1cm47CisJaWYgKCFteXJpMTBnZV9kY2EpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZGNhIGRpc2FibGVkIGJ5IGFkbWluaXN0cmF0b3JcbiIpOworCQlyZXR1cm47CisJfQorCWVyciA9IGRjYV9hZGRfcmVxdWVzdGVyKCZwZGV2LT5kZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJImRjYV9hZGRfcmVxdWVzdGVyKCkgZmFpbGVkLCBlcnI9JWRcbiIsIGVycik7CisJCXJldHVybjsKKwl9CisJbWdwLT5kY2FfZW5hYmxlZCA9IDE7CisJZm9yIChpID0gMDsgaSA8IG1ncC0+bnVtX3NsaWNlczsgaSsrKQorCQlteXJpMTBnZV93cml0ZV9kY2EoJm1ncC0+c3NbaV0sIC0xLCAwKTsKK30KKworc3RhdGljIHZvaWQgbXlyaTEwZ2VfdGVhcmRvd25fZGNhKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtZ3AtPnBkZXY7CisJaW50IGVycjsKKworCWlmICghbWdwLT5kY2FfZW5hYmxlZCkKKwkJcmV0dXJuOworCW1ncC0+ZGNhX2VuYWJsZWQgPSAwOworCWVyciA9IGRjYV9yZW1vdmVfcmVxdWVzdGVyKCZwZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX25vdGlmeV9kY2FfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOworCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CisKKwltZ3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlldmVudCA9ICoodW5zaWduZWQgbG9uZyAqKWRhdGE7CisKKwlpZiAoZXZlbnQgPT0gRENBX1BST1ZJREVSX0FERCkKKwkJbXlyaTEwZ2Vfc2V0dXBfZGNhKG1ncCk7CisJZWxzZSBpZiAoZXZlbnQgPT0gRENBX1BST1ZJREVSX1JFTU9WRSkKKwkJbXlyaTEwZ2VfdGVhcmRvd25fZGNhKG1ncCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJCQkJLyogQ09ORklHX0RDQSAqLworCiBzdGF0aWMgaW5saW5lIHZvaWQKIG15cmkxMGdlX3N1Ym1pdF84cngoc3RydWN0IG1jcF9rcmVxX2V0aGVyX3JlY3YgX19pb21lbSAqIGRzdCwKIAkJICAgIHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9yZWN2ICpzcmMpCkBAIC0xMDM5LDE0ICsxMjEyLDggQEAKIAogCQkvKiBjb3B5IDggZGVzY3JpcHRvcnMgdG8gdGhlIGZpcm13YXJlIGF0IGEgdGltZSAqLwogCQlpZiAoKGlkeCAmIDcpID09IDcpIHsKLQkJCWlmIChyeC0+d2NfZmlmbyA9PSBOVUxMKQotCQkJCW15cmkxMGdlX3N1Ym1pdF84cngoJnJ4LT5sYW5haVtpZHggLSA3XSwKLQkJCQkJCSAgICAmcngtPnNoYWRvd1tpZHggLSA3XSk7Ci0JCQllbHNlIHsKLQkJCQltYigpOwotCQkJCW15cmkxMGdlX3Bpb19jb3B5KHJ4LT53Y19maWZvLAotCQkJCQkJICAmcngtPnNoYWRvd1tpZHggLSA3XSwgNjQpOwotCQkJfQorCQkJbXlyaTEwZ2Vfc3VibWl0XzhyeCgmcngtPmxhbmFpW2lkeCAtIDddLAorCQkJCQkgICAgJnJ4LT5zaGFkb3dbaWR4IC0gN10pOwogCQl9CiAJfQogfQpAQCAtMTEwMiw5ICsxMjY5LDEwIEBACiAJCXJ4X2ZyYWdzWzBdLnNpemUgLT0gTVhHRUZXX1BBRDsKIAkJbGVuIC09IE1YR0VGV19QQUQ7CiAJCWxyb19yZWNlaXZlX2ZyYWdzKCZzcy0+cnhfZG9uZS5scm9fbWdyLCByeF9mcmFncywKLQkJCQkgIGxlbiwgbGVuLAogCQkJCSAgLyogb3BhcXVlLCB3aWxsIGNvbWUgYmFjayBpbiBnZXRfZnJhZ19oZWFkZXIgKi8KKwkJCQkgIGxlbiwgbGVuLAogCQkJCSAgKHZvaWQgKikoX19mb3JjZSB1bnNpZ25lZCBsb25nKWNzdW0sIGNzdW0pOworCiAJCXJldHVybiAxOwogCX0KIApAQCAtMTI0Myw3ICsxNDExLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG15cmkxMGdlX2NoZWNrX3N0YXRibG9jayhzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQogewotCXN0cnVjdCBtY3BfaXJxX2RhdGEgKnN0YXRzID0gbWdwLT5zcy5md19zdGF0czsKKwlzdHJ1Y3QgbWNwX2lycV9kYXRhICpzdGF0cyA9IG1ncC0+c3NbMF0uZndfc3RhdHM7CiAKIAlpZiAodW5saWtlbHkoc3RhdHMtPnN0YXRzX3VwZGF0ZWQpKSB7CiAJCXVuc2lnbmVkIGxpbmtfdXAgPSBudG9obChzdGF0cy0+bGlua191cCk7CkBAIC0xMjkwLDYgKzE0NTgsMTEgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc3MtPm1ncC0+ZGV2OwogCWludCB3b3JrX2RvbmU7CiAKKyNpZmRlZiBDT05GSUdfRENBCisJaWYgKHNzLT5tZ3AtPmRjYV9lbmFibGVkKQorCQlteXJpMTBnZV91cGRhdGVfZGNhKHNzKTsKKyNlbmRpZgorCiAJLyogcHJvY2VzcyBhcyBtYW55IHJ4IGV2ZW50cyBhcyBOQVBJIHdpbGwgYWxsb3cgKi8KIAl3b3JrX2RvbmUgPSBteXJpMTBnZV9jbGVhbl9yeF9kb25lKHNzLCBidWRnZXQpOwogCkBAIC0xMzA5LDYgKzE0ODIsMTMgQEAKIAl1MzIgc2VuZF9kb25lX2NvdW50OwogCWludCBpOwogCisJLyogYW4gaW50ZXJydXB0IG9uIGEgbm9uLXplcm8gc2xpY2UgaXMgaW1wbGljaXRseSB2YWxpZAorCSAqIHNpbmNlIE1TSS1YIGlycXMgYXJlIG5vdCBzaGFyZWQgKi8KKwlpZiAoc3MgIT0gbWdwLT5zcykgeworCQluZXRpZl9yeF9zY2hlZHVsZShzcy0+ZGV2LCAmc3MtPm5hcGkpOworCQlyZXR1cm4gKElSUV9IQU5ETEVEKTsKKwl9CisKIAkvKiBtYWtlIHN1cmUgaXQgaXMgb3VyIElSUSwgYW5kIHRoYXQgdGhlIERNQSBoYXMgZmluaXNoZWQgKi8KIAlpZiAodW5saWtlbHkoIXN0YXRzLT52YWxpZCkpCiAJCXJldHVybiAoSVJRX05PTkUpOwpAQCAtMTMxOCw3ICsxNDk4LDcgQEAKIAlpZiAoc3RhdHMtPnZhbGlkICYgMSkKIAkJbmV0aWZfcnhfc2NoZWR1bGUoc3MtPmRldiwgJnNzLT5uYXBpKTsKIAotCWlmICghbWdwLT5tc2lfZW5hYmxlZCkgeworCWlmICghbWdwLT5tc2lfZW5hYmxlZCAmJiAhbWdwLT5tc2l4X2VuYWJsZWQpIHsKIAkJcHV0X2JlMzIoMCwgbWdwLT5pcnFfZGVhc3NlcnQpOwogCQlpZiAoIW15cmkxMGdlX2RlYXNzZXJ0X3dhaXQpCiAJCQlzdGF0cy0+dmFsaWQgPSAwOwpAQCAtMTQ1MywxMCArMTYzMywxMCBAQAogewogCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IG1ncC0+c3Mucnhfc21hbGwubWFzayArIDE7Ci0JcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBtZ3AtPnNzLnJ4X2JpZy5tYXNrICsgMTsKKwlyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gbWdwLT5zc1swXS5yeF9zbWFsbC5tYXNrICsgMTsKKwlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IG1ncC0+c3NbMF0ucnhfYmlnLm1hc2sgKyAxOwogCXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKLQlyaW5nLT50eF9tYXhfcGVuZGluZyA9IG1ncC0+c3Mucnhfc21hbGwubWFzayArIDE7CisJcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBtZ3AtPnNzWzBdLnJ4X3NtYWxsLm1hc2sgKyAxOwogCXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IHJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmc7CiAJcmluZy0+cnhfcGVuZGluZyA9IHJpbmctPnJ4X21heF9wZW5kaW5nOwogCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSByaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZzsKQEAgLTE1MDQsOSArMTY4NCwxMiBAQAogCSJ0eF9hYm9ydGVkX2Vycm9ycyIsICJ0eF9jYXJyaWVyX2Vycm9ycyIsICJ0eF9maWZvX2Vycm9ycyIsCiAJInR4X2hlYXJ0YmVhdF9lcnJvcnMiLCAidHhfd2luZG93X2Vycm9ycyIsCiAJLyogZGV2aWNlLXNwZWNpZmljIHN0YXRzICovCi0JInR4X2JvdW5kYXJ5IiwgIldDIiwgImlycSIsICJNU0kiLAorCSJ0eF9ib3VuZGFyeSIsICJXQyIsICJpcnEiLCAiTVNJIiwgIk1TSVgiLAogCSJyZWFkX2RtYV9id19NQnMiLCAid3JpdGVfZG1hX2J3X01CcyIsICJyZWFkX3dyaXRlX2RtYV9id19NQnMiLAogCSJzZXJpYWxfbnVtYmVyIiwgIndhdGNoZG9nX3Jlc2V0cyIsCisjaWZkZWYgQ09ORklHX0RDQQorCSJkY2FfY2FwYWJsZSIsICJkY2FfZW5hYmxlZCIsCisjZW5kaWYKIAkibGlua19jaGFuZ2VzIiwgImxpbmtfdXAiLCAiZHJvcHBlZF9saW5rX292ZXJmbG93IiwKIAkiZHJvcHBlZF9saW5rX2Vycm9yX29yX2ZpbHRlcmVkIiwKIAkiZHJvcHBlZF9wYXVzZSIsICJkcm9wcGVkX2JhZF9waHkiLCAiZHJvcHBlZF9iYWRfY3JjMzIiLApAQCAtMTUzMSwyMyArMTcxNCwzMSBAQAogc3RhdGljIHZvaWQKIG15cmkxMGdlX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICogZGF0YSkKIHsKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaTsKKwogCXN3aXRjaCAoc3RyaW5nc2V0KSB7CiAJY2FzZSBFVEhfU1NfU1RBVFM6CiAJCW1lbWNweShkYXRhLCAqbXlyaTEwZ2VfZ3N0cmluZ3NfbWFpbl9zdGF0cywKIAkJICAgICAgIHNpemVvZihteXJpMTBnZV9nc3RyaW5nc19tYWluX3N0YXRzKSk7CiAJCWRhdGEgKz0gc2l6ZW9mKG15cmkxMGdlX2dzdHJpbmdzX21haW5fc3RhdHMpOwotCQltZW1jcHkoZGF0YSwgKm15cmkxMGdlX2dzdHJpbmdzX3NsaWNlX3N0YXRzLAotCQkgICAgICAgc2l6ZW9mKG15cmkxMGdlX2dzdHJpbmdzX3NsaWNlX3N0YXRzKSk7Ci0JCWRhdGEgKz0gc2l6ZW9mKG15cmkxMGdlX2dzdHJpbmdzX3NsaWNlX3N0YXRzKTsKKwkJZm9yIChpID0gMDsgaSA8IG1ncC0+bnVtX3NsaWNlczsgaSsrKSB7CisJCQltZW1jcHkoZGF0YSwgKm15cmkxMGdlX2dzdHJpbmdzX3NsaWNlX3N0YXRzLAorCQkJICAgICAgIHNpemVvZihteXJpMTBnZV9nc3RyaW5nc19zbGljZV9zdGF0cykpOworCQkJZGF0YSArPSBzaXplb2YobXlyaTEwZ2VfZ3N0cmluZ3Nfc2xpY2Vfc3RhdHMpOworCQl9CiAJCWJyZWFrOwogCX0KIH0KIAogc3RhdGljIGludCBteXJpMTBnZV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgc3NldCkKIHsKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwogCXN3aXRjaCAoc3NldCkgewogCWNhc2UgRVRIX1NTX1NUQVRTOgotCQlyZXR1cm4gTVlSSTEwR0VfTUFJTl9TVEFUU19MRU4gKyBNWVJJMTBHRV9TTElDRV9TVEFUU19MRU47CisJCXJldHVybiBNWVJJMTBHRV9NQUlOX1NUQVRTX0xFTiArCisJCSAgICBtZ3AtPm51bV9zbGljZXMgKiBNWVJJMTBHRV9TTElDRV9TVEFUU19MRU47CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KQEAgLTE1NTksNiArMTc1MCw3IEBACiB7CiAJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKKwlpbnQgc2xpY2U7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTVlSSTEwR0VfTkVUX1NUQVRTX0xFTjsgaSsrKQpAQCAtMTU2OCwxNSArMTc2MCwyMCBAQAogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT53Y19lbmFibGVkOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5wZGV2LT5pcnE7CiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPm1zaV9lbmFibGVkOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5tc2l4X2VuYWJsZWQ7CiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnJlYWRfZG1hOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT53cml0ZV9kbWE7CiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnJlYWRfd3JpdGVfZG1hOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5zZXJpYWxfbnVtYmVyOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT53YXRjaGRvZ19yZXNldHM7CisjaWZkZWYgQ09ORklHX0RDQQorCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpKG1ncC0+c3NbMF0uZGNhX3RhZyAhPSBOVUxMKTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KShtZ3AtPmRjYV9lbmFibGVkKTsKKyNlbmRpZgogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5saW5rX2NoYW5nZXM7CiAKIAkvKiBmaXJtd2FyZSBzdGF0cyBhcmUgdXNlZnVsIG9ubHkgaW4gdGhlIGZpcnN0IHNsaWNlICovCi0Jc3MgPSAmbWdwLT5zczsKKwlzcyA9ICZtZ3AtPnNzWzBdOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwoc3MtPmZ3X3N0YXRzLT5saW5rX3VwKTsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKHNzLT5md19zdGF0cy0+ZHJvcHBlZF9saW5rX292ZXJmbG93KTsKIAlkYXRhW2krK10gPQpAQCAtMTU5MiwyNCArMTc4OSwyNyBAQAogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwoc3MtPmZ3X3N0YXRzLT5kcm9wcGVkX25vX3NtYWxsX2J1ZmZlcik7CiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCludG9obChzcy0+Zndfc3RhdHMtPmRyb3BwZWRfbm9fYmlnX2J1ZmZlcik7CiAKLQlkYXRhW2krK10gPSAwOwotCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpc3MtPnR4LnBrdF9zdGFydDsKLQlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KXNzLT50eC5wa3RfZG9uZTsKLQlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KXNzLT50eC5yZXE7Ci0JZGF0YVtpKytdID0gKHVuc2lnbmVkIGludClzcy0+dHguZG9uZTsKLQlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KXNzLT5yeF9zbWFsbC5jbnQ7Ci0JZGF0YVtpKytdID0gKHVuc2lnbmVkIGludClzcy0+cnhfYmlnLmNudDsKLQlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KXNzLT50eC53YWtlX3F1ZXVlOwotCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpc3MtPnR4LnN0b3BfcXVldWU7Ci0JZGF0YVtpKytdID0gKHVuc2lnbmVkIGludClzcy0+dHgubGluZWFyaXplZDsKLQlkYXRhW2krK10gPSBzcy0+cnhfZG9uZS5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQ7Ci0JZGF0YVtpKytdID0gc3MtPnJ4X2RvbmUubHJvX21nci5zdGF0cy5mbHVzaGVkOwotCWlmIChzcy0+cnhfZG9uZS5scm9fbWdyLnN0YXRzLmZsdXNoZWQpCi0JCWRhdGFbaSsrXSA9IHNzLT5yeF9kb25lLmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZCAvCi0JCSAgICBzcy0+cnhfZG9uZS5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7Ci0JZWxzZQotCQlkYXRhW2krK10gPSAwOwotCWRhdGFbaSsrXSA9IHNzLT5yeF9kb25lLmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKKwlmb3IgKHNsaWNlID0gMDsgc2xpY2UgPCBtZ3AtPm51bV9zbGljZXM7IHNsaWNlKyspIHsKKwkJc3MgPSAmbWdwLT5zc1tzbGljZV07CisJCWRhdGFbaSsrXSA9IHNsaWNlOworCQlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KXNzLT50eC5wa3Rfc3RhcnQ7CisJCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpc3MtPnR4LnBrdF9kb25lOworCQlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KXNzLT50eC5yZXE7CisJCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpc3MtPnR4LmRvbmU7CisJCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpc3MtPnJ4X3NtYWxsLmNudDsKKwkJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludClzcy0+cnhfYmlnLmNudDsKKwkJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludClzcy0+dHgud2FrZV9xdWV1ZTsKKwkJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludClzcy0+dHguc3RvcF9xdWV1ZTsKKwkJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludClzcy0+dHgubGluZWFyaXplZDsKKwkJZGF0YVtpKytdID0gc3MtPnJ4X2RvbmUubHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOworCQlkYXRhW2krK10gPSBzcy0+cnhfZG9uZS5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7CisJCWlmIChzcy0+cnhfZG9uZS5scm9fbWdyLnN0YXRzLmZsdXNoZWQpCisJCQlkYXRhW2krK10gPSBzcy0+cnhfZG9uZS5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQgLworCQkJICAgIHNzLT5yeF9kb25lLmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKKwkJZWxzZQorCQkJZGF0YVtpKytdID0gMDsKKwkJZGF0YVtpKytdID0gc3MtPnJ4X2RvbmUubHJvX21nci5zdGF0cy5ub19kZXNjOworCX0KIH0KIAogc3RhdGljIHZvaWQgbXlyaTEwZ2Vfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiB2YWx1ZSkKQEAgLTE2NTIsMTIgKzE4NTIsMTUgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbWdwLT5kZXY7CiAJaW50IHR4X3Jpbmdfc2l6ZSwgcnhfcmluZ19zaXplOwogCWludCB0eF9yaW5nX2VudHJpZXMsIHJ4X3JpbmdfZW50cmllczsKLQlpbnQgaSwgc3RhdHVzOworCWludCBpLCBzbGljZSwgc3RhdHVzOwogCXNpemVfdCBieXRlczsKIAogCS8qIGdldCByaW5nIHNpemVzICovCisJc2xpY2UgPSBzcyAtIG1ncC0+c3M7CisJY21kLmRhdGEwID0gc2xpY2U7CiAJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9TRU5EX1JJTkdfU0laRSwgJmNtZCwgMCk7CiAJdHhfcmluZ19zaXplID0gY21kLmRhdGEwOworCWNtZC5kYXRhMCA9IHNsaWNlOwogCXN0YXR1cyB8PSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfR0VUX1JYX1JJTkdfU0laRSwgJmNtZCwgMCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlyZXR1cm4gc3RhdHVzOwpAQCAtMTcyMiwxNSArMTkyNSwxNyBAQAogCQkJCW1ncC0+c21hbGxfYnl0ZXMgKyBNWEdFRldfUEFELCAwKTsKIAogCWlmIChzcy0+cnhfc21hbGwuZmlsbF9jbnQgPCBzcy0+cnhfc21hbGwubWFzayArIDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IGFsbG9jZWQgb25seSAlZCBzbWFsbCBidWZzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzcy0+cnhfc21hbGwuZmlsbF9jbnQpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJteXJpMTBnZTogJXM6c2xpY2UtJWQ6IGFsbG9jZWQgb25seSAlZCBzbWFsbCBidWZzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBzbGljZSwgc3MtPnJ4X3NtYWxsLmZpbGxfY250KTsKIAkJZ290byBhYm9ydF93aXRoX3J4X3NtYWxsX3Jpbmc7CiAJfQogCiAJbXlyaTEwZ2VfYWxsb2NfcnhfcGFnZXMobWdwLCAmc3MtPnJ4X2JpZywgbWdwLT5iaWdfYnl0ZXMsIDApOwogCWlmIChzcy0+cnhfYmlnLmZpbGxfY250IDwgc3MtPnJ4X2JpZy5tYXNrICsgMSkgewotCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogYWxsb2NlZCBvbmx5ICVkIGJpZyBidWZzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzcy0+cnhfYmlnLmZpbGxfY250KTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibXlyaTEwZ2U6ICVzOnNsaWNlLSVkOiBhbGxvY2VkIG9ubHkgJWQgYmlnIGJ1ZnNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHNsaWNlLCBzcy0+cnhfYmlnLmZpbGxfY250KTsKIAkJZ290byBhYm9ydF93aXRoX3J4X2JpZ19yaW5nOwogCX0KIApAQCAtMTc4Miw2ICsxOTg3LDEwIEBACiAJc3RydWN0IG15cmkxMGdlX3R4X2J1ZiAqdHg7CiAJaW50IGksIGxlbiwgaWR4OwogCisJLyogSWYgbm90IGFsbG9jYXRlZCwgc2tpcCBpdCAqLworCWlmIChzcy0+dHgucmVxX2xpc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCiAJZm9yIChpID0gc3MtPnJ4X2JpZy5jbnQ7IGkgPCBzcy0+cnhfYmlnLmZpbGxfY250OyBpKyspIHsKIAkJaWR4ID0gaSAmIHNzLT5yeF9iaWcubWFzazsKIAkJaWYgKGkgPT0gc3MtPnJ4X2JpZy5maWxsX2NudCAtIDEpCkBAIC0xODQ0LDI1ICsyMDUzLDY3IEBACiBzdGF0aWMgaW50IG15cmkxMGdlX3JlcXVlc3RfaXJxKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtZ3AtPnBkZXY7CisJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbWdwLT5kZXY7CisJaW50IGk7CiAJaW50IHN0YXR1czsKIAorCW1ncC0+bXNpX2VuYWJsZWQgPSAwOworCW1ncC0+bXNpeF9lbmFibGVkID0gMDsKKwlzdGF0dXMgPSAwOwogCWlmIChteXJpMTBnZV9tc2kpIHsKLQkJc3RhdHVzID0gcGNpX2VuYWJsZV9tc2kocGRldik7Ci0JCWlmIChzdGF0dXMgIT0gMCkKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkiRXJyb3IgJWQgc2V0dGluZyB1cCBNU0k7IGZhbGxpbmcgYmFjayB0byB4UElDXG4iLAotCQkJCXN0YXR1cyk7Ci0JCWVsc2UKLQkJCW1ncC0+bXNpX2VuYWJsZWQgPSAxOwotCX0gZWxzZSB7Ci0JCW1ncC0+bXNpX2VuYWJsZWQgPSAwOworCQlpZiAobWdwLT5udW1fc2xpY2VzID4gMSkgeworCQkJc3RhdHVzID0KKwkJCSAgICBwY2lfZW5hYmxlX21zaXgocGRldiwgbWdwLT5tc2l4X3ZlY3RvcnMsCisJCQkJCSAgICBtZ3AtPm51bV9zbGljZXMpOworCQkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQkJbWdwLT5tc2l4X2VuYWJsZWQgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJFcnJvciAlZCBzZXR0aW5nIHVwIE1TSS1YXG4iLCBzdGF0dXMpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCX0KKwkJaWYgKG1ncC0+bXNpeF9lbmFibGVkID09IDApIHsKKwkJCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpKHBkZXYpOworCQkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCQkiRXJyb3IgJWQgc2V0dGluZyB1cCBNU0k7IGZhbGxpbmcgYmFjayB0byB4UElDXG4iLAorCQkJCQlzdGF0dXMpOworCQkJfSBlbHNlIHsKKwkJCQltZ3AtPm1zaV9lbmFibGVkID0gMTsKKwkJCX0KKwkJfQogCX0KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG15cmkxMGdlX2ludHIsIElSUUZfU0hBUkVELAotCQkJICAgICBtZ3AtPmRldi0+bmFtZSwgbWdwKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIElSUVxuIik7Ci0JCWlmIChtZ3AtPm1zaV9lbmFibGVkKQotCQkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworCWlmIChtZ3AtPm1zaXhfZW5hYmxlZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKKwkJCXNzID0gJm1ncC0+c3NbaV07CisJCQlzbnByaW50Zihzcy0+aXJxX2Rlc2MsIHNpemVvZihzcy0+aXJxX2Rlc2MpLAorCQkJCSAiJXM6c2xpY2UtJWQiLCBuZXRkZXYtPm5hbWUsIGkpOworCQkJc3RhdHVzID0gcmVxdWVzdF9pcnEobWdwLT5tc2l4X3ZlY3RvcnNbaV0udmVjdG9yLAorCQkJCQkgICAgIG15cmkxMGdlX2ludHIsIDAsIHNzLT5pcnFfZGVzYywKKwkJCQkJICAgICBzcyk7CisJCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJzbGljZSAlZCBmYWlsZWQgdG8gYWxsb2NhdGUgSVJRXG4iLCBpKTsKKwkJCQlpLS07CisJCQkJd2hpbGUgKGkgPj0gMCkgeworCQkJCQlmcmVlX2lycShtZ3AtPm1zaXhfdmVjdG9yc1tpXS52ZWN0b3IsCisJCQkJCQkgJm1ncC0+c3NbaV0pOworCQkJCQlpLS07CisJCQkJfQorCQkJCXBjaV9kaXNhYmxlX21zaXgocGRldik7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgbXlyaTEwZ2VfaW50ciwgSVJRRl9TSEFSRUQsCisJCQkJICAgICBtZ3AtPmRldi0+bmFtZSwgJm1ncC0+c3NbMF0pOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOworCQkJaWYgKG1ncC0+bXNpX2VuYWJsZWQpCisJCQkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworCQl9CiAJfQogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xODcwLDEwICsyMTIxLDE4IEBACiBzdGF0aWMgdm9pZCBteXJpMTBnZV9mcmVlX2lycShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWdwLT5wZGV2OworCWludCBpOwogCi0JZnJlZV9pcnEocGRldi0+aXJxLCBtZ3ApOworCWlmIChtZ3AtPm1zaXhfZW5hYmxlZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspCisJCQlmcmVlX2lycShtZ3AtPm1zaXhfdmVjdG9yc1tpXS52ZWN0b3IsICZtZ3AtPnNzW2ldKTsKKwl9IGVsc2UgeworCQlmcmVlX2lycShwZGV2LT5pcnEsICZtZ3AtPnNzWzBdKTsKKwl9CiAJaWYgKG1ncC0+bXNpX2VuYWJsZWQpCiAJCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwlpZiAobWdwLT5tc2l4X2VuYWJsZWQpCisJCXBjaV9kaXNhYmxlX21zaXgocGRldik7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE5MzUsMTIgKzIxOTQsNzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBteXJpMTBnZV9nZXRfdHhyeChzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCBpbnQgc2xpY2UpCit7CisJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKKwlpbnQgc3RhdHVzOworCisJc3MgPSAmbWdwLT5zc1tzbGljZV07CisJY21kLmRhdGEwID0gMDsJCS8qIHNpbmdsZSBzbGljZSBmb3Igbm93ICovCisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9TRU5EX09GRlNFVCwgJmNtZCwgMCk7CisJc3MtPnR4LmxhbmFpID0gKHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kIF9faW9tZW0gKikKKwkgICAgKG1ncC0+c3JhbSArIGNtZC5kYXRhMCk7CisKKwljbWQuZGF0YTAgPSBzbGljZTsKKwlzdGF0dXMgfD0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9TTUFMTF9SWF9PRkZTRVQsCisJCQkJICAgICZjbWQsIDApOworCXNzLT5yeF9zbWFsbC5sYW5haSA9IChzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfcmVjdiBfX2lvbWVtICopCisJICAgIChtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOworCisJY21kLmRhdGEwID0gc2xpY2U7CisJc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfQklHX1JYX09GRlNFVCwgJmNtZCwgMCk7CisJc3MtPnJ4X2JpZy5sYW5haSA9IChzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfcmVjdiBfX2lvbWVtICopCisJICAgIChtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOworCisJcmV0dXJuIHN0YXR1czsKKworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX3NldF9zdGF0cyhzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCBpbnQgc2xpY2UpCit7CisJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKKwlpbnQgc3RhdHVzOworCisJc3MgPSAmbWdwLT5zc1tzbGljZV07CisJY21kLmRhdGEwID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIoc3MtPmZ3X3N0YXRzX2J1cyk7CisJY21kLmRhdGExID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKHNzLT5md19zdGF0c19idXMpOworCWNtZC5kYXRhMiA9IHNpemVvZihzdHJ1Y3QgbWNwX2lycV9kYXRhKTsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX1NUQVRTX0RNQV9WMiwgJmNtZCwgMCk7CisJaWYgKHN0YXR1cyA9PSAtRU5PU1lTKSB7CisJCWRtYV9hZGRyX3QgYnVzID0gc3MtPmZ3X3N0YXRzX2J1czsKKwkJaWYgKHNsaWNlICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnVzICs9IG9mZnNldG9mKHN0cnVjdCBtY3BfaXJxX2RhdGEsIHNlbmRfZG9uZV9jb3VudCk7CisJCWNtZC5kYXRhMCA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKGJ1cyk7CisJCWNtZC5kYXRhMSA9IE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihidXMpOworCQlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsCisJCQkJCSAgIE1YR0VGV19DTURfU0VUX1NUQVRTX0RNQV9PQlNPTEVURSwKKwkJCQkJICAgJmNtZCwgMCk7CisJCS8qIEZpcm13YXJlIGNhbm5vdCBzdXBwb3J0IG11bHRpY2FzdCB3aXRob3V0IFNUQVRTX0RNQV9WMiAqLworCQltZ3AtPmZ3X211bHRpY2FzdF9zdXBwb3J0ID0gMDsKKwl9IGVsc2UgeworCQltZ3AtPmZ3X211bHRpY2FzdF9zdXBwb3J0ID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbXlyaTEwZ2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSAqc3M7CiAJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJaW50IGksIHN0YXR1cywgYmlnX3BvdzIsIHNsaWNlOworCXU4ICppdGFibGU7CiAJc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyOwotCWludCBzdGF0dXMsIGJpZ19wb3cyOwogCiAJaWYgKG1ncC0+cnVubmluZyAhPSBNWVJJMTBHRV9FVEhfU1RPUFBFRCkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTE5NTIsNiArMjI2OSw0OCBAQAogCQlnb3RvIGFib3J0X3dpdGhfbm90aGluZzsKIAl9CiAKKwlpZiAobWdwLT5udW1fc2xpY2VzID4gMSkgeworCQljbWQuZGF0YTAgPSBtZ3AtPm51bV9zbGljZXM7CisJCWNtZC5kYXRhMSA9IDE7CS8qIHVzZSBNU0ktWCAqLworCQlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfRU5BQkxFX1JTU19RVUVVRVMsCisJCQkJCSAgICZjbWQsIDApOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJteXJpMTBnZTogJXM6IGZhaWxlZCB0byBzZXQgbnVtYmVyIG9mIHNsaWNlc1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CisJCX0KKwkJLyogc2V0dXAgdGhlIGluZGlyZWN0aW9uIHRhYmxlICovCisJCWNtZC5kYXRhMCA9IG1ncC0+bnVtX3NsaWNlczsKKwkJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9SU1NfVEFCTEVfU0laRSwKKwkJCQkJICAgJmNtZCwgMCk7CisKKwkJc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwKKwkJCQkJICAgIE1YR0VGV19DTURfR0VUX1JTU19UQUJMRV9PRkZTRVQsCisJCQkJCSAgICAmY21kLCAwKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBmYWlsZWQgdG8gc2V0dXAgcnNzIHRhYmxlc1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQl9CisKKwkJLyoganVzdCBlbmFibGUgYW4gaWRlbnRpdHkgbWFwcGluZyAqLworCQlpdGFibGUgPSBtZ3AtPnNyYW0gKyBjbWQuZGF0YTA7CisJCWZvciAoaSA9IDA7IGkgPCBtZ3AtPm51bV9zbGljZXM7IGkrKykKKwkJCV9fcmF3X3dyaXRlYihpLCAmaXRhYmxlW2ldKTsKKworCQljbWQuZGF0YTAgPSAxOworCQljbWQuZGF0YTEgPSBteXJpMTBnZV9yc3NfaGFzaDsKKwkJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9SU1NfRU5BQkxFLAorCQkJCQkgICAmY21kLCAwKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBmYWlsZWQgdG8gZW5hYmxlIHNsaWNlc1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CisJCX0KKwl9CisKIAlzdGF0dXMgPSBteXJpMTBnZV9yZXF1ZXN0X2lycShtZ3ApOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CkBAIC0xOTc1LDQxICsyMzM0LDYgQEAKIAlpZiAobXlyaTEwZ2Vfc21hbGxfYnl0ZXMgPiAwKQogCQltZ3AtPnNtYWxsX2J5dGVzID0gbXlyaTEwZ2Vfc21hbGxfYnl0ZXM7CiAKLQkvKiBnZXQgdGhlIGxhbmFpIHBvaW50ZXJzIHRvIHRoZSBzZW5kIGFuZCByZWNlaXZlIHJpbmdzICovCi0KLQlzdGF0dXMgfD0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9TRU5EX09GRlNFVCwgJmNtZCwgMCk7Ci0JbWdwLT5zcy50eC5sYW5haSA9Ci0JICAgIChzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCBfX2lvbWVtICopKG1ncC0+c3JhbSArIGNtZC5kYXRhMCk7Ci0KLQlzdGF0dXMgfD0KLQkgICAgbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9TTUFMTF9SWF9PRkZTRVQsICZjbWQsIDApOwotCW1ncC0+c3Mucnhfc21hbGwubGFuYWkgPQotCSAgICAoc3RydWN0IG1jcF9rcmVxX2V0aGVyX3JlY3YgX19pb21lbSAqKShtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOwotCi0Jc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfQklHX1JYX09GRlNFVCwgJmNtZCwgMCk7Ci0JbWdwLT5zcy5yeF9iaWcubGFuYWkgPQotCSAgICAoc3RydWN0IG1jcF9rcmVxX2V0aGVyX3JlY3YgX19pb21lbSAqKShtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOwotCi0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIGdldCByaW5nIHNpemVzIG9yIGxvY2F0aW9uc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCW1ncC0+cnVubmluZyA9IE1ZUkkxMEdFX0VUSF9TVE9QUEVEOwotCQlnb3RvIGFib3J0X3dpdGhfaXJxOwotCX0KLQotCWlmIChteXJpMTBnZV93Y2ZpZm8gJiYgbWdwLT53Y19lbmFibGVkKSB7Ci0JCW1ncC0+c3MudHgud2NfZmlmbyA9ICh1OCBfX2lvbWVtICopIG1ncC0+c3JhbSArIE1YR0VGV19FVEhfU0VORF80OwotCQltZ3AtPnNzLnJ4X3NtYWxsLndjX2ZpZm8gPQotCQkgICAgKHU4IF9faW9tZW0gKikgbWdwLT5zcmFtICsgTVhHRUZXX0VUSF9SRUNWX1NNQUxMOwotCQltZ3AtPnNzLnJ4X2JpZy53Y19maWZvID0KLQkJICAgICh1OCBfX2lvbWVtICopIG1ncC0+c3JhbSArIE1YR0VGV19FVEhfUkVDVl9CSUc7Ci0JfSBlbHNlIHsKLQkJbWdwLT5zcy50eC53Y19maWZvID0gTlVMTDsKLQkJbWdwLT5zcy5yeF9zbWFsbC53Y19maWZvID0gTlVMTDsKLQkJbWdwLT5zcy5yeF9iaWcud2NfZmlmbyA9IE5VTEw7Ci0JfQotCiAJLyogRmlybXdhcmUgbmVlZHMgdGhlIGJpZyBidWZmIHNpemUgYXMgYSBwb3dlciBvZiAyLiAgTGllIGFuZAogCSAqIHRlbGwgaGltIHRoZSBidWZmZXIgaXMgbGFyZ2VyLCBiZWNhdXNlIHdlIG9ubHkgdXNlIDEKIAkgKiBidWZmZXIvcGt0LCBhbmQgdGhlIG10dSB3aWxsIHByZXZlbnQgb3ZlcnJ1bnMuCkBAIC0yMDI0LDkgKzIzNDgsNDQgQEAKIAkJbWdwLT5iaWdfYnl0ZXMgPSBiaWdfcG93MjsKIAl9CiAKLQlzdGF0dXMgPSBteXJpMTBnZV9hbGxvY2F0ZV9yaW5ncygmbWdwLT5zcyk7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlnb3RvIGFib3J0X3dpdGhfaXJxOworCS8qIHNldHVwIHRoZSBwZXItc2xpY2UgZGF0YSBzdHJ1Y3R1cmVzICovCisJZm9yIChzbGljZSA9IDA7IHNsaWNlIDwgbWdwLT5udW1fc2xpY2VzOyBzbGljZSsrKSB7CisJCXNzID0gJm1ncC0+c3Nbc2xpY2VdOworCisJCXN0YXR1cyA9IG15cmkxMGdlX2dldF90eHJ4KG1ncCwgc2xpY2UpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJteXJpMTBnZTogJXM6IGZhaWxlZCB0byBnZXQgcmluZyBzaXplcyBvciBsb2NhdGlvbnNcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWdvdG8gYWJvcnRfd2l0aF9yaW5nczsKKwkJfQorCQlzdGF0dXMgPSBteXJpMTBnZV9hbGxvY2F0ZV9yaW5ncyhzcyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gYWJvcnRfd2l0aF9yaW5nczsKKwkJaWYgKHNsaWNlID09IDApCisJCQlzdGF0dXMgPSBteXJpMTBnZV9zZXRfc3RhdHMobWdwLCBzbGljZSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJteXJpMTBnZTogJXM6IENvdWxkbid0IHNldCBzdGF0cyBETUFcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWdvdG8gYWJvcnRfd2l0aF9yaW5nczsKKwkJfQorCisJCWxyb19tZ3IgPSAmc3MtPnJ4X2RvbmUubHJvX21ncjsKKwkJbHJvX21nci0+ZGV2ID0gZGV2OworCQlscm9fbWdyLT5mZWF0dXJlcyA9IExST19GX05BUEk7CisJCWxyb19tZ3ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOworCQlscm9fbWdyLT5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQlscm9fbWdyLT5tYXhfZGVzYyA9IE1ZUkkxMEdFX01BWF9MUk9fREVTQ1JJUFRPUlM7CisJCWxyb19tZ3ItPmxyb19hcnIgPSBzcy0+cnhfZG9uZS5scm9fZGVzYzsKKwkJbHJvX21nci0+Z2V0X2ZyYWdfaGVhZGVyID0gbXlyaTEwZ2VfZ2V0X2ZyYWdfaGVhZGVyOworCQlscm9fbWdyLT5tYXhfYWdnciA9IG15cmkxMGdlX2xyb19tYXhfcGt0czsKKwkJaWYgKGxyb19tZ3ItPm1heF9hZ2dyID4gTUFYX1NLQl9GUkFHUykKKwkJCWxyb19tZ3ItPm1heF9hZ2dyID0gTUFYX1NLQl9GUkFHUzsKKworCQkvKiBtdXN0IGhhcHBlbiBwcmlvciB0byBhbnkgaXJxICovCisJCW5hcGlfZW5hYmxlKCYoc3MpLT5uYXBpKTsKKwl9CiAKIAkvKiBub3cgZ2l2ZSBmaXJtd2FyZSBidWZmZXJzIHNpemVzLCBhbmQgTVRVICovCiAJY21kLmRhdGEwID0gZGV2LT5tdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTjsKQEAgLTIwNDMsMjUgKzI0MDIsMTUgQEAKIAkJZ290byBhYm9ydF93aXRoX3JpbmdzOwogCX0KIAotCWNtZC5kYXRhMCA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKG1ncC0+c3MuZndfc3RhdHNfYnVzKTsKLQljbWQuZGF0YTEgPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIobWdwLT5zcy5md19zdGF0c19idXMpOwotCWNtZC5kYXRhMiA9IHNpemVvZihzdHJ1Y3QgbWNwX2lycV9kYXRhKTsKLQlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX1NUQVRTX0RNQV9WMiwgJmNtZCwgMCk7Ci0JaWYgKHN0YXR1cyA9PSAtRU5PU1lTKSB7Ci0JCWRtYV9hZGRyX3QgYnVzID0gbWdwLT5zcy5md19zdGF0c19idXM7Ci0JCWJ1cyArPSBvZmZzZXRvZihzdHJ1Y3QgbWNwX2lycV9kYXRhLCBzZW5kX2RvbmVfY291bnQpOwotCQljbWQuZGF0YTAgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihidXMpOwotCQljbWQuZGF0YTEgPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoYnVzKTsKLQkJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLAotCQkJCQkgICBNWEdFRldfQ01EX1NFVF9TVEFUU19ETUFfT0JTT0xFVEUsCi0JCQkJCSAgICZjbWQsIDApOwotCQkvKiBGaXJtd2FyZSBjYW5ub3Qgc3VwcG9ydCBtdWx0aWNhc3Qgd2l0aG91dCBTVEFUU19ETUFfVjIgKi8KLQkJbWdwLT5md19tdWx0aWNhc3Rfc3VwcG9ydCA9IDA7Ci0JfSBlbHNlIHsKLQkJbWdwLT5md19tdWx0aWNhc3Rfc3VwcG9ydCA9IDE7Ci0JfQotCWlmIChzdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IENvdWxkbid0IHNldCBzdGF0cyBETUFcbiIsCisJLyoKKwkgKiBTZXQgTGludXggc3R5bGUgVFNPIG1vZGU7IHRoaXMgaXMgbmVlZGVkIG9ubHkgb24gbmV3ZXIKKwkgKiAgZmlybXdhcmUgdmVyc2lvbnMuICBPbGRlciB2ZXJzaW9ucyBkZWZhdWx0IHRvIExpbnV4CisJICogIHN0eWxlIFRTTworCSAqLworCWNtZC5kYXRhMCA9IDA7CisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9UU09fTU9ERSwgJmNtZCwgMCk7CisJaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gLUVOT1NZUykgeworCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogQ291bGRuJ3Qgc2V0IFRTTyBtb2RlXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJZ290byBhYm9ydF93aXRoX3JpbmdzOwogCX0KQEAgLTIwNjksMjEgKzI0MTgsNiBAQAogCW1ncC0+bGlua19zdGF0ZSA9IH4wVTsKIAltZ3AtPnJkbWFfdGFnc19hdmFpbGFibGUgPSAxNTsKIAotCWxyb19tZ3IgPSAmbWdwLT5zcy5yeF9kb25lLmxyb19tZ3I7Ci0JbHJvX21nci0+ZGV2ID0gZGV2OwotCWxyb19tZ3ItPmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKLQlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKLQlscm9fbWdyLT5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWxyb19tZ3ItPm1heF9kZXNjID0gTVlSSTEwR0VfTUFYX0xST19ERVNDUklQVE9SUzsKLQlscm9fbWdyLT5scm9fYXJyID0gbWdwLT5zcy5yeF9kb25lLmxyb19kZXNjOwotCWxyb19tZ3ItPmdldF9mcmFnX2hlYWRlciA9IG15cmkxMGdlX2dldF9mcmFnX2hlYWRlcjsKLQlscm9fbWdyLT5tYXhfYWdnciA9IG15cmkxMGdlX2xyb19tYXhfcGt0czsKLQlscm9fbWdyLT5mcmFnX2FsaWduX3BhZCA9IDI7Ci0JaWYgKGxyb19tZ3ItPm1heF9hZ2dyID4gTUFYX1NLQl9GUkFHUykKLQkJbHJvX21nci0+bWF4X2FnZ3IgPSBNQVhfU0tCX0ZSQUdTOwotCi0JbmFwaV9lbmFibGUoJm1ncC0+c3MubmFwaSk7CS8qIG11c3QgaGFwcGVuIHByaW9yIHRvIGFueSBpcnEgKi8KLQogCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9FVEhFUk5FVF9VUCwgJmNtZCwgMCk7CiAJaWYgKHN0YXR1cykgewogCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogQ291bGRuJ3QgYnJpbmcgdXAgbGlua1xuIiwKQEAgLTIwOTEsOCArMjQyNSw2IEBACiAJCWdvdG8gYWJvcnRfd2l0aF9yaW5nczsKIAl9CiAKLQltZ3AtPnNzLnR4Lndha2VfcXVldWUgPSAwOwotCW1ncC0+c3MudHguc3RvcF9xdWV1ZSA9IDA7CiAJbWdwLT5ydW5uaW5nID0gTVlSSTEwR0VfRVRIX1JVTk5JTkc7CiAJbWdwLT53YXRjaGRvZ190aW1lci5leHBpcmVzID0gamlmZmllcyArIG15cmkxMGdlX3dhdGNoZG9nX3RpbWVvdXQgKiBIWjsKIAlhZGRfdGltZXIoJm1ncC0+d2F0Y2hkb2dfdGltZXIpOwpAQCAtMjEwMCw5ICsyNDMyLDkgQEAKIAlyZXR1cm4gMDsKIAogYWJvcnRfd2l0aF9yaW5nczoKLQlteXJpMTBnZV9mcmVlX3JpbmdzKCZtZ3AtPnNzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspCisJCW15cmkxMGdlX2ZyZWVfcmluZ3MoJm1ncC0+c3NbaV0pOwogCi1hYm9ydF93aXRoX2lycToKIAlteXJpMTBnZV9mcmVlX2lycShtZ3ApOwogCiBhYm9ydF93aXRoX25vdGhpbmc6CkBAIC0yMTE1LDE2ICsyNDQ3LDE5IEBACiAJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CiAJaW50IHN0YXR1cywgb2xkX2Rvd25fY250OworCWludCBpOwogCiAJaWYgKG1ncC0+cnVubmluZyAhPSBNWVJJMTBHRV9FVEhfUlVOTklORykKIAkJcmV0dXJuIDA7CiAKLQlpZiAobWdwLT5zcy50eC5yZXFfYnl0ZXMgPT0gTlVMTCkKKwlpZiAobWdwLT5zc1swXS50eC5yZXFfYnl0ZXMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlkZWxfdGltZXJfc3luYygmbWdwLT53YXRjaGRvZ190aW1lcik7CiAJbWdwLT5ydW5uaW5nID0gTVlSSTEwR0VfRVRIX1NUT1BQSU5HOwotCW5hcGlfZGlzYWJsZSgmbWdwLT5zcy5uYXBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKKwkJbmFwaV9kaXNhYmxlKCZtZ3AtPnNzW2ldLm5hcGkpOworCX0KIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlvbGRfZG93bl9jbnQgPSBtZ3AtPmRvd25fY250OwpAQCAtMjE0MCw3ICsyNDc1LDggQEAKIAogCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKIAlteXJpMTBnZV9mcmVlX2lycShtZ3ApOwotCW15cmkxMGdlX2ZyZWVfcmluZ3MoJm1ncC0+c3MpOworCWZvciAoaSA9IDA7IGkgPCBtZ3AtPm51bV9zbGljZXM7IGkrKykKKwkJbXlyaTEwZ2VfZnJlZV9yaW5ncygmbWdwLT5zc1tpXSk7CiAKIAltZ3AtPnJ1bm5pbmcgPSBNWVJJMTBHRV9FVEhfU1RPUFBFRDsKIAlyZXR1cm4gMDsKQEAgLTIyMTMsMjcgKzI1NDksNiBAQAogCW1iKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotbXlyaTEwZ2Vfc3VibWl0X3JlcV93YyhzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmICp0eCwKLQkJICAgICAgIHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kICpzcmMsIGludCBjbnQpCi17Ci0JdHgtPnJlcSArPSBjbnQ7Ci0JbWIoKTsKLQl3aGlsZSAoY250ID49IDQpIHsKLQkJbXlyaTEwZ2VfcGlvX2NvcHkodHgtPndjX2ZpZm8sIHNyYywgNjQpOwotCQltYigpOwotCQlzcmMgKz0gNDsKLQkJY250IC09IDQ7Ci0JfQotCWlmIChjbnQgPiAwKSB7Ci0JCS8qIHBhZCBpdCB0byA2NCBieXRlcy4gIFRoZSBzcmMgaXMgNjQgYnl0ZXMgYmlnZ2VyIHRoYW4gaXQKLQkJICogbmVlZHMgdG8gYmUgc28gdGhhdCB3ZSBkb24ndCBvdmVycnVuIGl0ICovCi0JCW15cmkxMGdlX3Bpb19jb3B5KHR4LT53Y19maWZvICsgTVhHRUZXX0VUSF9TRU5EX09GRlNFVChjbnQpLAotCQkJCSAgc3JjLCA2NCk7Ci0JCW1iKCk7Ci0JfQotfQotCiAvKgogICogVHJhbnNtaXQgYSBwYWNrZXQuICBXZSBuZWVkIHRvIHNwbGl0IHRoZSBwYWNrZXQgc28gdGhhdCBhIHNpbmdsZQogICogc2VnbWVudCBkb2VzIG5vdCBjcm9zcyBteXJpMTBnZS0+dHhfYm91bmRhcnksIHNvIHRoaXMgbWFrZXMgc2VnbWVudApAQCAtMjI2MSw3ICsyNTc2LDcgQEAKIAl1OCBmbGFncywgb2RkX2ZsYWc7CiAKIAkvKiBhbHdheXMgdHJhbnNtaXQgdGhyb3VnaCBzbG90IDAgKi8KLQlzcyA9ICZtZ3AtPnNzOworCXNzID0gbWdwLT5zczsKIAl0eCA9ICZzcy0+dHg7CiBhZ2FpbjoKIAlyZXEgPSB0eC0+cmVxX2xpc3Q7CkBAIC0yNDcwLDEwICsyNzg1LDcgQEAKIAkJCQkJIE1YR0VGV19GTEFHU19GSVJTVCkpKTsKIAlpZHggPSAoKGNvdW50IC0gMSkgKyB0eC0+cmVxKSAmIHR4LT5tYXNrOwogCXR4LT5pbmZvW2lkeF0ubGFzdCA9IDE7Ci0JaWYgKHR4LT53Y19maWZvID09IE5VTEwpCi0JCW15cmkxMGdlX3N1Ym1pdF9yZXEodHgsIHR4LT5yZXFfbGlzdCwgY291bnQpOwotCWVsc2UKLQkJbXlyaTEwZ2Vfc3VibWl0X3JlcV93Yyh0eCwgdHgtPnJlcV9saXN0LCBjb3VudCk7CisJbXlyaTEwZ2Vfc3VibWl0X3JlcSh0eCwgdHgtPnJlcV9saXN0LCBjb3VudCk7CiAJdHgtPnBrdF9zdGFydCsrOwogCWlmICgoYXZhaWwgLSBjb3VudCkgPCBNWEdFRldfTUFYX1NFTkRfREVTQykgewogCQl0eC0+c3RvcF9xdWV1ZSsrOwpAQCAtMjU2Niw3ICsyODc4LDIxIEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm15cmkxMGdlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmbWdwLT5zdGF0czsKKwlzdHJ1Y3QgbXlyaTEwZ2Vfc2xpY2VfbmV0c3RhdHMgKnNsaWNlX3N0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZtZ3AtPnN0YXRzOworCWludCBpOworCisJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CisJZm9yIChpID0gMDsgaSA8IG1ncC0+bnVtX3NsaWNlczsgaSsrKSB7CisJCXNsaWNlX3N0YXRzID0gJm1ncC0+c3NbaV0uc3RhdHM7CisJCXN0YXRzLT5yeF9wYWNrZXRzICs9IHNsaWNlX3N0YXRzLT5yeF9wYWNrZXRzOworCQlzdGF0cy0+dHhfcGFja2V0cyArPSBzbGljZV9zdGF0cy0+dHhfcGFja2V0czsKKwkJc3RhdHMtPnJ4X2J5dGVzICs9IHNsaWNlX3N0YXRzLT5yeF9ieXRlczsKKwkJc3RhdHMtPnR4X2J5dGVzICs9IHNsaWNlX3N0YXRzLT50eF9ieXRlczsKKwkJc3RhdHMtPnJ4X2Ryb3BwZWQgKz0gc2xpY2Vfc3RhdHMtPnJ4X2Ryb3BwZWQ7CisJCXN0YXRzLT50eF9kcm9wcGVkICs9IHNsaWNlX3N0YXRzLT50eF9kcm9wcGVkOworCX0KKwlyZXR1cm4gc3RhdHM7CiB9CiAKIHN0YXRpYyB2b2lkIG15cmkxMGdlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjc3NywxMCArMzEwMywxMCBAQAogICoKICAqIElmIHRoZSBkcml2ZXIgY2FuIG5laXRoZXIgZW5hYmxlIEVDUkMgbm9yIHZlcmlmeSB0aGF0IGl0IGhhcwogICogYWxyZWFkeSBiZWVuIGVuYWJsZWQsIHRoZW4gaXQgbXVzdCB1c2UgYSBmaXJtd2FyZSBpbWFnZSB3aGljaCB3b3JrcwotICogYXJvdW5kIHVuYWxpZ25lZCBjb21wbGV0aW9uIHBhY2tldHMgKG15cmkxMGdlX2V0aHBfejhlLmRhdCksIGFuZCBpdAorICogYXJvdW5kIHVuYWxpZ25lZCBjb21wbGV0aW9uIHBhY2tldHMgKG15cmkxMGdlX3Jzc19ldGhwX3o4ZS5kYXQpLCBhbmQgaXQKICAqIHNob3VsZCBhbHNvIGVuc3VyZSB0aGF0IGl0IG5ldmVyIGdpdmVzIHRoZSBkZXZpY2UgYSBSZWFkLURNQSB3aGljaCBpcwogICogbGFyZ2VyIHRoYW4gMktCIGJ5IHNldHRpbmcgdGhlIHR4X2JvdW5kYXJ5IHRvIDJLQi4gIElmIEVDUkMgaXMKLSAqIGVuYWJsZWQsIHRoZW4gdGhlIGRyaXZlciBzaG91bGQgdXNlIHRoZSBhbGlnbmVkIChteXJpMTBnZV9ldGhfejhlLmRhdCkKKyAqIGVuYWJsZWQsIHRoZW4gdGhlIGRyaXZlciBzaG91bGQgdXNlIHRoZSBhbGlnbmVkIChteXJpMTBnZV9yc3NfZXRoX3o4ZS5kYXQpCiAgKiBmaXJtd2FyZSBpbWFnZSwgYW5kIHNldCB0eF9ib3VuZGFyeSB0byA0S0IuCiAgKi8KIApAQCAtMjgwOSw3ICszMTM1LDcgQEAKIAkgKiBjb21wbGV0aW9ucykgaW4gb3JkZXIgdG8gc2VlIGlmIGl0IHdvcmtzIG9uIHRoaXMgaG9zdC4KIAkgKi8KIAltZ3AtPmZ3X25hbWUgPSBteXJpMTBnZV9md19hbGlnbmVkOwotCXN0YXR1cyA9IG15cmkxMGdlX2xvYWRfZmlybXdhcmUobWdwKTsKKwlzdGF0dXMgPSBteXJpMTBnZV9sb2FkX2Zpcm13YXJlKG1ncCwgMSk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCWdvdG8gYWJvcnQ7CiAJfQpAQCAtMjk5MCw2ICszMzE2LDcgQEAKIAlzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmICp0eDsKIAl1MzIgcmVib290OwogCWludCBzdGF0dXM7CisJaW50IGk7CiAJdTE2IGNtZCwgdmVuZG9yOwogCiAJbWdwLT53YXRjaGRvZ19yZXNldHMrKzsKQEAgLTMwMzcsMjAgKzMzNjQsMjYgQEAKIAogCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogZGV2aWNlIHRpbWVvdXQsIHJlc2V0dGluZ1xuIiwKIAkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKLQkJdHggPSAmbWdwLT5zcy50eDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibXlyaTEwZ2U6ICVzOiAlZCAlZCAlZCAlZCAlZFxuIiwKLQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lLCB0eC0+cmVxLCB0eC0+ZG9uZSwKLQkJICAgICAgIHR4LT5wa3Rfc3RhcnQsIHR4LT5wa3RfZG9uZSwKLQkJICAgICAgIChpbnQpbnRvaGwobWdwLT5zcy5md19zdGF0cy0+c2VuZF9kb25lX2NvdW50KSk7Ci0JCW1zbGVlcCgyMDAwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibXlyaTEwZ2U6ICVzOiAlZCAlZCAlZCAlZCAlZFxuIiwKLQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lLCB0eC0+cmVxLCB0eC0+ZG9uZSwKLQkJICAgICAgIHR4LT5wa3Rfc3RhcnQsIHR4LT5wa3RfZG9uZSwKLQkJICAgICAgIChpbnQpbnRvaGwobWdwLT5zcy5md19zdGF0cy0+c2VuZF9kb25lX2NvdW50KSk7CisJCWZvciAoaSA9IDA7IGkgPCBtZ3AtPm51bV9zbGljZXM7IGkrKykgeworCQkJdHggPSAmbWdwLT5zc1tpXS50eDsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiAoJWQpOiAlZCAlZCAlZCAlZCAlZFxuIiwKKwkJCSAgICAgICBtZ3AtPmRldi0+bmFtZSwgaSwgdHgtPnJlcSwgdHgtPmRvbmUsCisJCQkgICAgICAgdHgtPnBrdF9zdGFydCwgdHgtPnBrdF9kb25lLAorCQkJICAgICAgIChpbnQpbnRvaGwobWdwLT5zc1tpXS5md19zdGF0cy0+CisJCQkJCSAgc2VuZF9kb25lX2NvdW50KSk7CisJCQltc2xlZXAoMjAwMCk7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIm15cmkxMGdlOiAlczogKCVkKTogJWQgJWQgJWQgJWQgJWRcbiIsCisJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUsIGksIHR4LT5yZXEsIHR4LT5kb25lLAorCQkJICAgICAgIHR4LT5wa3Rfc3RhcnQsIHR4LT5wa3RfZG9uZSwKKwkJCSAgICAgICAoaW50KW50b2hsKG1ncC0+c3NbaV0uZndfc3RhdHMtPgorCQkJCQkgIHNlbmRfZG9uZV9jb3VudCkpOworCQl9CiAJfQogCXJ0bmxfbG9jaygpOwogCW15cmkxMGdlX2Nsb3NlKG1ncC0+ZGV2KTsKLQlzdGF0dXMgPSBteXJpMTBnZV9sb2FkX2Zpcm13YXJlKG1ncCk7CisJc3RhdHVzID0gbXlyaTEwZ2VfbG9hZF9maXJtd2FyZShtZ3AsIDEpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IGZhaWxlZCB0byBsb2FkIGZpcm13YXJlXG4iLAogCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOwpAQCAtMzA3MCw0NyArMzQwMywyNDEgQEAKIHsKIAlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOwogCXN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSAqc3M7CisJaW50IGksIHJlc2V0X25lZWRlZDsKIAl1MzIgcnhfcGF1c2VfY250OwogCiAJbWdwID0gKHN0cnVjdCBteXJpMTBnZV9wcml2ICopYXJnOwogCi0JcnhfcGF1c2VfY250ID0gbnRvaGwobWdwLT5zcy5md19zdGF0cy0+ZHJvcHBlZF9wYXVzZSk7CisJcnhfcGF1c2VfY250ID0gbnRvaGwobWdwLT5zc1swXS5md19zdGF0cy0+ZHJvcHBlZF9wYXVzZSk7CisJZm9yIChpID0gMCwgcmVzZXRfbmVlZGVkID0gMDsKKwkgICAgIGkgPCBtZ3AtPm51bV9zbGljZXMgJiYgcmVzZXRfbmVlZGVkID09IDA7ICsraSkgewogCi0Jc3MgPSAmbWdwLT5zczsKLQlpZiAoc3MtPnJ4X3NtYWxsLndhdGNoZG9nX25lZWRlZCkgewotCQlteXJpMTBnZV9hbGxvY19yeF9wYWdlcyhtZ3AsICZzcy0+cnhfc21hbGwsCi0JCQkJCW1ncC0+c21hbGxfYnl0ZXMgKyBNWEdFRldfUEFELCAxKTsKLQkJaWYgKHNzLT5yeF9zbWFsbC5maWxsX2NudCAtIHNzLT5yeF9zbWFsbC5jbnQgPj0KLQkJICAgIG15cmkxMGdlX2ZpbGxfdGhyZXNoKQotCQkJc3MtPnJ4X3NtYWxsLndhdGNoZG9nX25lZWRlZCA9IDA7Ci0JfQotCWlmIChzcy0+cnhfYmlnLndhdGNoZG9nX25lZWRlZCkgewotCQlteXJpMTBnZV9hbGxvY19yeF9wYWdlcyhtZ3AsICZzcy0+cnhfYmlnLCBtZ3AtPmJpZ19ieXRlcywgMSk7Ci0JCWlmIChzcy0+cnhfYmlnLmZpbGxfY250IC0gc3MtPnJ4X2JpZy5jbnQgPj0KLQkJICAgIG15cmkxMGdlX2ZpbGxfdGhyZXNoKQotCQkJc3MtPnJ4X2JpZy53YXRjaGRvZ19uZWVkZWQgPSAwOwotCX0KKwkJc3MgPSAmbWdwLT5zc1tpXTsKKwkJaWYgKHNzLT5yeF9zbWFsbC53YXRjaGRvZ19uZWVkZWQpIHsKKwkJCW15cmkxMGdlX2FsbG9jX3J4X3BhZ2VzKG1ncCwgJnNzLT5yeF9zbWFsbCwKKwkJCQkJCW1ncC0+c21hbGxfYnl0ZXMgKyBNWEdFRldfUEFELAorCQkJCQkJMSk7CisJCQlpZiAoc3MtPnJ4X3NtYWxsLmZpbGxfY250IC0gc3MtPnJ4X3NtYWxsLmNudCA+PQorCQkJICAgIG15cmkxMGdlX2ZpbGxfdGhyZXNoKQorCQkJCXNzLT5yeF9zbWFsbC53YXRjaGRvZ19uZWVkZWQgPSAwOworCQl9CisJCWlmIChzcy0+cnhfYmlnLndhdGNoZG9nX25lZWRlZCkgeworCQkJbXlyaTEwZ2VfYWxsb2NfcnhfcGFnZXMobWdwLCAmc3MtPnJ4X2JpZywKKwkJCQkJCW1ncC0+YmlnX2J5dGVzLCAxKTsKKwkJCWlmIChzcy0+cnhfYmlnLmZpbGxfY250IC0gc3MtPnJ4X2JpZy5jbnQgPj0KKwkJCSAgICBteXJpMTBnZV9maWxsX3RocmVzaCkKKwkJCQlzcy0+cnhfYmlnLndhdGNoZG9nX25lZWRlZCA9IDA7CisJCX0KIAotCWlmIChzcy0+dHgucmVxICE9IHNzLT50eC5kb25lICYmCi0JICAgIHNzLT50eC5kb25lID09IHNzLT53YXRjaGRvZ190eF9kb25lICYmCi0JICAgIHNzLT53YXRjaGRvZ190eF9yZXEgIT0gc3MtPndhdGNoZG9nX3R4X2RvbmUpIHsKLQkJLyogbmljIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgc3R1Y2suLiAqLwotCQlpZiAocnhfcGF1c2VfY250ICE9IG1ncC0+d2F0Y2hkb2dfcGF1c2UpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXlyaTEwZ2UgJXM6IgotCQkJCSAgICAgICAiVFggcGF1c2VkLCBjaGVjayBsaW5rIHBhcnRuZXJcbiIsCi0JCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKLQkJfSBlbHNlIHsKLQkJCXNjaGVkdWxlX3dvcmsoJm1ncC0+d2F0Y2hkb2dfd29yayk7Ci0JCQlyZXR1cm47CisJCWlmIChzcy0+dHgucmVxICE9IHNzLT50eC5kb25lICYmCisJCSAgICBzcy0+dHguZG9uZSA9PSBzcy0+d2F0Y2hkb2dfdHhfZG9uZSAmJgorCQkgICAgc3MtPndhdGNoZG9nX3R4X3JlcSAhPSBzcy0+d2F0Y2hkb2dfdHhfZG9uZSkgeworCQkJLyogbmljIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgc3R1Y2suLiAqLworCQkJaWYgKHJ4X3BhdXNlX2NudCAhPSBtZ3AtPndhdGNoZG9nX3BhdXNlKSB7CisJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXlyaTEwZ2UgJXM6IgorCQkJCQkgICAgICAgIlRYIHBhdXNlZCwgY2hlY2sgbGluayBwYXJ0bmVyXG4iLAorCQkJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQlyZXNldF9uZWVkZWQgPSAxOworCQkJfQorCQl9CisJCXNzLT53YXRjaGRvZ190eF9kb25lID0gc3MtPnR4LmRvbmU7CisJCXNzLT53YXRjaGRvZ190eF9yZXEgPSBzcy0+dHgucmVxOworCX0KKwltZ3AtPndhdGNoZG9nX3BhdXNlID0gcnhfcGF1c2VfY250OworCisJaWYgKHJlc2V0X25lZWRlZCkgeworCQlzY2hlZHVsZV93b3JrKCZtZ3AtPndhdGNoZG9nX3dvcmspOworCX0gZWxzZSB7CisJCS8qIHJlYXJtIHRpbWVyICovCisJCW1vZF90aW1lcigmbWdwLT53YXRjaGRvZ190aW1lciwKKwkJCSAgamlmZmllcyArIG15cmkxMGdlX3dhdGNoZG9nX3RpbWVvdXQgKiBIWik7CisJfQorfQorCitzdGF0aWMgdm9pZCBteXJpMTBnZV9mcmVlX3NsaWNlcyhzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQoreworCXN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSAqc3M7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtZ3AtPnBkZXY7CisJc2l6ZV90IGJ5dGVzOworCWludCBpOworCisJaWYgKG1ncC0+c3MgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IG1ncC0+bnVtX3NsaWNlczsgaSsrKSB7CisJCXNzID0gJm1ncC0+c3NbaV07CisJCWlmIChzcy0+cnhfZG9uZS5lbnRyeSAhPSBOVUxMKSB7CisJCQlieXRlcyA9IG1ncC0+bWF4X2ludHJfc2xvdHMgKgorCQkJICAgIHNpemVvZigqc3MtPnJ4X2RvbmUuZW50cnkpOworCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgYnl0ZXMsCisJCQkJCSAgc3MtPnJ4X2RvbmUuZW50cnksIHNzLT5yeF9kb25lLmJ1cyk7CisJCQlzcy0+cnhfZG9uZS5lbnRyeSA9IE5VTEw7CisJCX0KKwkJaWYgKHNzLT5md19zdGF0cyAhPSBOVUxMKSB7CisJCQlieXRlcyA9IHNpemVvZigqc3MtPmZ3X3N0YXRzKTsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGJ5dGVzLAorCQkJCQkgIHNzLT5md19zdGF0cywgc3MtPmZ3X3N0YXRzX2J1cyk7CisJCQlzcy0+Zndfc3RhdHMgPSBOVUxMOwogCQl9CiAJfQotCS8qIHJlYXJtIHRpbWVyICovCi0JbW9kX3RpbWVyKCZtZ3AtPndhdGNoZG9nX3RpbWVyLAotCQkgIGppZmZpZXMgKyBteXJpMTBnZV93YXRjaGRvZ190aW1lb3V0ICogSFopOwotCXNzLT53YXRjaGRvZ190eF9kb25lID0gc3MtPnR4LmRvbmU7Ci0Jc3MtPndhdGNoZG9nX3R4X3JlcSA9IHNzLT50eC5yZXE7Ci0JbWdwLT53YXRjaGRvZ19wYXVzZSA9IHJ4X3BhdXNlX2NudDsKKwlrZnJlZShtZ3AtPnNzKTsKKwltZ3AtPnNzID0gTlVMTDsKK30KKworc3RhdGljIGludCBteXJpMTBnZV9hbGxvY19zbGljZXMoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2Vfc2xpY2Vfc3RhdGUgKnNzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWdwLT5wZGV2OworCXNpemVfdCBieXRlczsKKwlpbnQgaTsKKworCWJ5dGVzID0gc2l6ZW9mKCptZ3AtPnNzKSAqIG1ncC0+bnVtX3NsaWNlczsKKwltZ3AtPnNzID0ga3phbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CisJaWYgKG1ncC0+c3MgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKKwkJc3MgPSAmbWdwLT5zc1tpXTsKKwkJYnl0ZXMgPSBtZ3AtPm1heF9pbnRyX3Nsb3RzICogc2l6ZW9mKCpzcy0+cnhfZG9uZS5lbnRyeSk7CisJCXNzLT5yeF9kb25lLmVudHJ5ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIGJ5dGVzLAorCQkJCQkJICAgICAgICZzcy0+cnhfZG9uZS5idXMsCisJCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmIChzcy0+cnhfZG9uZS5lbnRyeSA9PSBOVUxMKQorCQkJZ290byBhYm9ydDsKKwkJbWVtc2V0KHNzLT5yeF9kb25lLmVudHJ5LCAwLCBieXRlcyk7CisJCWJ5dGVzID0gc2l6ZW9mKCpzcy0+Zndfc3RhdHMpOworCQlzcy0+Zndfc3RhdHMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgYnl0ZXMsCisJCQkJCQkgICZzcy0+Zndfc3RhdHNfYnVzLAorCQkJCQkJICBHRlBfS0VSTkVMKTsKKwkJaWYgKHNzLT5md19zdGF0cyA9PSBOVUxMKQorCQkJZ290byBhYm9ydDsKKwkJc3MtPm1ncCA9IG1ncDsKKwkJc3MtPmRldiA9IG1ncC0+ZGV2OworCQluZXRpZl9uYXBpX2FkZChzcy0+ZGV2LCAmc3MtPm5hcGksIG15cmkxMGdlX3BvbGwsCisJCQkgICAgICAgbXlyaTEwZ2VfbmFwaV93ZWlnaHQpOworCX0KKwlyZXR1cm4gMDsKK2Fib3J0OgorCW15cmkxMGdlX2ZyZWVfc2xpY2VzKG1ncCk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBzbGljZXMgc3VwcG9ydGVkLgorICogVGhlIG51bWJlciBzbGljZXMgaXMgdGhlIG1pbnVtdW0gb2YgdGhlIG51bWJlciBvZiBDUFVTLAorICogdGhlIG51bWJlciBvZiBNU0ktWCBpcnFzIHN1cHBvcnRlZCwgdGhlIG51bWJlciBvZiBzbGljZXMKKyAqIHN1cHBvcnRlZCBieSB0aGUgZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQgbXlyaTEwZ2VfcHJvYmVfc2xpY2VzKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtZ3AtPnBkZXY7CisJY2hhciAqb2xkX2Z3OworCWludCBpLCBzdGF0dXMsIG5jcHVzLCBtc2l4X2NhcDsKKworCW1ncC0+bnVtX3NsaWNlcyA9IDE7CisJbXNpeF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJWCk7CisJbmNwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKKworCWlmIChteXJpMTBnZV9tYXhfc2xpY2VzID09IDEgfHwgbXNpeF9jYXAgPT0gMCB8fAorCSAgICAobXlyaTEwZ2VfbWF4X3NsaWNlcyA9PSAtMSAmJiBuY3B1cyA8IDIpKQorCQlyZXR1cm47CisKKwkvKiB0cnkgdG8gbG9hZCB0aGUgc2xpY2UgYXdhcmUgcnNzIGZpcm13YXJlICovCisJb2xkX2Z3ID0gbWdwLT5md19uYW1lOworCWlmIChvbGRfZncgPT0gbXlyaTEwZ2VfZndfYWxpZ25lZCkKKwkJbWdwLT5md19uYW1lID0gbXlyaTEwZ2VfZndfcnNzX2FsaWduZWQ7CisJZWxzZQorCQltZ3AtPmZ3X25hbWUgPSBteXJpMTBnZV9md19yc3NfdW5hbGlnbmVkOworCXN0YXR1cyA9IG15cmkxMGdlX2xvYWRfZmlybXdhcmUobWdwLCAwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlJzcyBmaXJtd2FyZSBub3QgZm91bmRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogaGl0IHRoZSBib2FyZCB3aXRoIGEgcmVzZXQgdG8gZW5zdXJlIGl0IGlzIGFsaXZlICovCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfUkVTRVQsICZjbWQsIDApOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwgImZhaWxlZCByZXNldFxuIik7CisJCWdvdG8gYWJvcnRfd2l0aF9mdzsKKwkJcmV0dXJuOworCX0KKworCW1ncC0+bWF4X2ludHJfc2xvdHMgPSBjbWQuZGF0YTAgLyBzaXplb2Yoc3RydWN0IG1jcF9zbG90KTsKKworCS8qIHRlbGwgaXQgdGhlIHNpemUgb2YgdGhlIGludGVycnVwdCBxdWV1ZXMgKi8KKwljbWQuZGF0YTAgPSBtZ3AtPm1heF9pbnRyX3Nsb3RzICogc2l6ZW9mKHN0cnVjdCBtY3Bfc2xvdCk7CisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9JTlRSUV9TSVpFLCAmY21kLCAwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmbWdwLT5wZGV2LT5kZXYsICJmYWlsZWQgTVhHRUZXX0NNRF9TRVRfSU5UUlFfU0laRVxuIik7CisJCWdvdG8gYWJvcnRfd2l0aF9mdzsKKwl9CisKKwkvKiBhc2sgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNsaWNlcyBpdCBzdXBwb3J0cyAqLworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfTUFYX1JTU19RVUVVRVMsICZjbWQsIDApOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBhYm9ydF93aXRoX2Z3OworCWVsc2UKKwkJbWdwLT5udW1fc2xpY2VzID0gY21kLmRhdGEwOworCisJLyogT25seSBhbGxvdyBtdWx0aXBsZSBzbGljZXMgaWYgTVNJLVggaXMgdXNhYmxlICovCisJaWYgKCFteXJpMTBnZV9tc2kpIHsKKwkJZ290byBhYm9ydF93aXRoX2Z3OworCX0KKworCS8qIGlmIHRoZSBhZG1pbiBkaWQgbm90IHNwZWNpZnkgYSBsaW1pdCB0byBob3cgbWFueQorCSAqIHNsaWNlcyB3ZSBzaG91bGQgdXNlLCBjYXAgaXQgYXV0b21hdGljYWxseSB0byB0aGUKKwkgKiBudW1iZXIgb2YgQ1BVcyBjdXJyZW50bHkgb25saW5lICovCisJaWYgKG15cmkxMGdlX21heF9zbGljZXMgPT0gLTEpCisJCW15cmkxMGdlX21heF9zbGljZXMgPSBuY3B1czsKKworCWlmIChtZ3AtPm51bV9zbGljZXMgPiBteXJpMTBnZV9tYXhfc2xpY2VzKQorCQltZ3AtPm51bV9zbGljZXMgPSBteXJpMTBnZV9tYXhfc2xpY2VzOworCisJLyogTm93IHRyeSB0byBhbGxvY2F0ZSBhcyBtYW55IE1TSS1YIHZlY3RvcnMgYXMgd2UgaGF2ZQorCSAqIHNsaWNlcy4gV2UgZ2l2ZSB1cCBvbiBNU0ktWCBpZiB3ZSBjYW4gb25seSBnZXQgYSBzaW5nbGUKKwkgKiB2ZWN0b3IuICovCisKKwltZ3AtPm1zaXhfdmVjdG9ycyA9IGt6YWxsb2MobWdwLT5udW1fc2xpY2VzICoKKwkJCQkgICAgc2l6ZW9mKCptZ3AtPm1zaXhfdmVjdG9ycyksIEdGUF9LRVJORUwpOworCWlmIChtZ3AtPm1zaXhfdmVjdG9ycyA9PSBOVUxMKQorCQlnb3RvIGRpc2FibGVfbXNpeDsKKwlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKKwkJbWdwLT5tc2l4X3ZlY3RvcnNbaV0uZW50cnkgPSBpOworCX0KKworCXdoaWxlIChtZ3AtPm51bV9zbGljZXMgPiAxKSB7CisJCS8qIG1ha2Ugc3VyZSBpdCBpcyBhIHBvd2VyIG9mIHR3byAqLworCQl3aGlsZSAoIWlzX3Bvd2VyX29mXzIobWdwLT5udW1fc2xpY2VzKSkKKwkJCW1ncC0+bnVtX3NsaWNlcy0tOworCQlpZiAobWdwLT5udW1fc2xpY2VzID09IDEpCisJCQlnb3RvIGRpc2FibGVfbXNpeDsKKwkJc3RhdHVzID0gcGNpX2VuYWJsZV9tc2l4KHBkZXYsIG1ncC0+bXNpeF92ZWN0b3JzLAorCQkJCQkgbWdwLT5udW1fc2xpY2VzKTsKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChzdGF0dXMgPiAwKQorCQkJbWdwLT5udW1fc2xpY2VzID0gc3RhdHVzOworCQllbHNlCisJCQlnb3RvIGRpc2FibGVfbXNpeDsKKwl9CisKK2Rpc2FibGVfbXNpeDoKKwlpZiAobWdwLT5tc2l4X3ZlY3RvcnMgIT0gTlVMTCkgeworCQlrZnJlZShtZ3AtPm1zaXhfdmVjdG9ycyk7CisJCW1ncC0+bXNpeF92ZWN0b3JzID0gTlVMTDsKKwl9CisKK2Fib3J0X3dpdGhfZnc6CisJbWdwLT5udW1fc2xpY2VzID0gMTsKKwltZ3AtPmZ3X25hbWUgPSBvbGRfZnc7CisJbXlyaTEwZ2VfbG9hZF9maXJtd2FyZShtZ3AsIDApOwogfQogCiBzdGF0aWMgaW50IG15cmkxMGdlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtMzExOCw3ICszNjQ1LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3A7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLQlzaXplX3QgYnl0ZXM7CiAJaW50IGk7CiAJaW50IHN0YXR1cyA9IC1FTlhJTzsKIAlpbnQgZGFjX2VuYWJsZWQ7CkBAIC0zMTMzLDcgKzM2NTksNiBAQAogCiAJbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAltZ3AtPmRldiA9IG5ldGRldjsKLQluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZtZ3AtPnNzLm5hcGksIG15cmkxMGdlX3BvbGwsIG15cmkxMGdlX25hcGlfd2VpZ2h0KTsKIAltZ3AtPnBkZXYgPSBwZGV2OwogCW1ncC0+Y3N1bV9mbGFnID0gTVhHRUZXX0ZMQUdTX0NLU1VNOwogCW1ncC0+cGF1c2UgPSBteXJpMTBnZV9mbG93X2NvbnRyb2w7CkBAIC0zMTc5LDExICszNzA0LDYgQEAKIAlpZiAobWdwLT5jbWQgPT0gTlVMTCkKIAkJZ290byBhYm9ydF93aXRoX25ldGRldjsKIAotCW1ncC0+c3MuZndfc3RhdHMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKCptZ3AtPnNzLmZ3X3N0YXRzKSwKLQkJCQkJICAgJm1ncC0+c3MuZndfc3RhdHNfYnVzLCBHRlBfS0VSTkVMKTsKLQlpZiAobWdwLT5zcy5md19zdGF0cyA9PSBOVUxMKQotCQlnb3RvIGFib3J0X3dpdGhfY21kOwotCiAJbWdwLT5ib2FyZF9zcGFuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAltZ3AtPmlvbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJbWdwLT5tdHJyID0gLTE7CkBAIC0zMjAwLDE0ICszNzIwLDE0IEBACiAJaWYgKG1ncC0+c3JhbV9zaXplID4gbWdwLT5ib2FyZF9zcGFuKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImJvYXJkIHNwYW4gJWxkIGJ5dGVzIHRvbyBzbWFsbFxuIiwKIAkJCW1ncC0+Ym9hcmRfc3Bhbik7Ci0JCWdvdG8gYWJvcnRfd2l0aF93YzsKKwkJZ290byBhYm9ydF93aXRoX210cnI7CiAJfQotCW1ncC0+c3JhbSA9IGlvcmVtYXAobWdwLT5pb21lbV9iYXNlLCBtZ3AtPmJvYXJkX3NwYW4pOworCW1ncC0+c3JhbSA9IGlvcmVtYXBfd2MobWdwLT5pb21lbV9iYXNlLCBtZ3AtPmJvYXJkX3NwYW4pOwogCWlmIChtZ3AtPnNyYW0gPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZCBmb3IgJWxkIGJ5dGVzIGF0IDB4JWx4XG4iLAogCQkJbWdwLT5ib2FyZF9zcGFuLCBtZ3AtPmlvbWVtX2Jhc2UpOwogCQlzdGF0dXMgPSAtRU5YSU87Ci0JCWdvdG8gYWJvcnRfd2l0aF93YzsKKwkJZ290byBhYm9ydF93aXRoX210cnI7CiAJfQogCW1lbWNweV9mcm9taW8obWdwLT5lZXByb21fc3RyaW5ncywKIAkJICAgICAgbWdwLT5zcmFtICsgbWdwLT5zcmFtX3NpemUgLSBNWVJJMTBHRV9FRVBST01fU1RSSU5HU19TSVpFLApAQCAtMzIyMCwyOCArMzc0MCwyOCBAQAogCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQluZXRkZXYtPmRldl9hZGRyW2ldID0gbWdwLT5tYWNfYWRkcltpXTsKIAotCS8qIGFsbG9jYXRlIHJ4IGRvbmUgcmluZyAqLwotCWJ5dGVzID0gbWdwLT5tYXhfaW50cl9zbG90cyAqIHNpemVvZigqbWdwLT5zcy5yeF9kb25lLmVudHJ5KTsKLQltZ3AtPnNzLnJ4X2RvbmUuZW50cnkgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgYnl0ZXMsCi0JCQkJCQkmbWdwLT5zcy5yeF9kb25lLmJ1cywgR0ZQX0tFUk5FTCk7Ci0JaWYgKG1ncC0+c3MucnhfZG9uZS5lbnRyeSA9PSBOVUxMKQotCQlnb3RvIGFib3J0X3dpdGhfaW9yZW1hcDsKLQltZW1zZXQobWdwLT5zcy5yeF9kb25lLmVudHJ5LCAwLCBieXRlcyk7Ci0KIAlteXJpMTBnZV9zZWxlY3RfZmlybXdhcmUobWdwKTsKIAotCXN0YXR1cyA9IG15cmkxMGdlX2xvYWRfZmlybXdhcmUobWdwKTsKKwlzdGF0dXMgPSBteXJpMTBnZV9sb2FkX2Zpcm13YXJlKG1ncCwgMSk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBsb2FkIGZpcm13YXJlXG4iKTsKLQkJZ290byBhYm9ydF93aXRoX3J4X2RvbmU7CisJCWdvdG8gYWJvcnRfd2l0aF9pb3JlbWFwOworCX0KKwlteXJpMTBnZV9wcm9iZV9zbGljZXMobWdwKTsKKwlzdGF0dXMgPSBteXJpMTBnZV9hbGxvY19zbGljZXMobWdwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIHNsaWNlIHN0YXRlXG4iKTsKKwkJZ290byBhYm9ydF93aXRoX2Zpcm13YXJlOwogCX0KIAogCXN0YXR1cyA9IG15cmkxMGdlX3Jlc2V0KG1ncCk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCByZXNldFxuIik7Ci0JCWdvdG8gYWJvcnRfd2l0aF9maXJtd2FyZTsKKwkJZ290byBhYm9ydF93aXRoX3NsaWNlczsKIAl9Ci0KKyNpZmRlZiBDT05GSUdfRENBCisJbXlyaTEwZ2Vfc2V0dXBfZGNhKG1ncCk7CisjZW5kaWYKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgbWdwKTsKIAlpZiAoKG15cmkxMGdlX2luaXRpYWxfbXR1ICsgRVRIX0hMRU4pID4gTVlSSTEwR0VfTUFYX0VUSEVSX01UVSkKIAkJbXlyaTEwZ2VfaW5pdGlhbF9tdHUgPSBNWVJJMTBHRV9NQVhfRVRIRVJfTVRVIC0gRVRIX0hMRU47CkBAIC0zMjg0LDM2ICszODA0LDM1IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lzdGVyX25ldGRldiBmYWlsZWQ6ICVkXG4iLCBzdGF0dXMpOwogCQlnb3RvIGFib3J0X3dpdGhfc3RhdGU7CiAJfQotCWRldl9pbmZvKGRldiwgIiVzIElSUSAlZCwgdHggYm5kcnkgJWQsIGZ3ICVzLCBXQyAlc1xuIiwKLQkJIChtZ3AtPm1zaV9lbmFibGVkID8gIk1TSSIgOiAieFBJQyIpLAotCQkgbmV0ZGV2LT5pcnEsIG1ncC0+dHhfYm91bmRhcnksIG1ncC0+ZndfbmFtZSwKLQkJIChtZ3AtPndjX2VuYWJsZWQgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKSk7CisJaWYgKG1ncC0+bXNpeF9lbmFibGVkKQorCQlkZXZfaW5mbyhkZXYsICIlZCBNU0ktWCBJUlFzLCB0eCBibmRyeSAlZCwgZncgJXMsIFdDICVzXG4iLAorCQkJIG1ncC0+bnVtX3NsaWNlcywgbWdwLT50eF9ib3VuZGFyeSwgbWdwLT5md19uYW1lLAorCQkJIChtZ3AtPndjX2VuYWJsZWQgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKSk7CisJZWxzZQorCQlkZXZfaW5mbyhkZXYsICIlcyBJUlEgJWQsIHR4IGJuZHJ5ICVkLCBmdyAlcywgV0MgJXNcbiIsCisJCQkgbWdwLT5tc2lfZW5hYmxlZCA/ICJNU0kiIDogInhQSUMiLAorCQkJIG5ldGRldi0+aXJxLCBtZ3AtPnR4X2JvdW5kYXJ5LCBtZ3AtPmZ3X25hbWUsCisJCQkgKG1ncC0+d2NfZW5hYmxlZCA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpKTsKIAogCXJldHVybiAwOwogCiBhYm9ydF93aXRoX3N0YXRlOgogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCithYm9ydF93aXRoX3NsaWNlczoKKwlteXJpMTBnZV9mcmVlX3NsaWNlcyhtZ3ApOworCiBhYm9ydF93aXRoX2Zpcm13YXJlOgogCW15cmkxMGdlX2R1bW15X3JkbWEobWdwLCAwKTsKIAotYWJvcnRfd2l0aF9yeF9kb25lOgotCWJ5dGVzID0gbWdwLT5tYXhfaW50cl9zbG90cyAqIHNpemVvZigqbWdwLT5zcy5yeF9kb25lLmVudHJ5KTsKLQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBieXRlcywKLQkJCSAgbWdwLT5zcy5yeF9kb25lLmVudHJ5LCBtZ3AtPnNzLnJ4X2RvbmUuYnVzKTsKLQogYWJvcnRfd2l0aF9pb3JlbWFwOgogCWlvdW5tYXAobWdwLT5zcmFtKTsKIAotYWJvcnRfd2l0aF93YzoKK2Fib3J0X3dpdGhfbXRycjoKICNpZmRlZiBDT05GSUdfTVRSUgogCWlmIChtZ3AtPm10cnIgPj0gMCkKIAkJbXRycl9kZWwobWdwLT5tdHJyLCBtZ3AtPmlvbWVtX2Jhc2UsIG1ncC0+Ym9hcmRfc3Bhbik7CiAjZW5kaWYKLQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKm1ncC0+c3MuZndfc3RhdHMpLAotCQkJICBtZ3AtPnNzLmZ3X3N0YXRzLCBtZ3AtPnNzLmZ3X3N0YXRzX2J1cyk7Ci0KLWFib3J0X3dpdGhfY21kOgogCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqbWdwLT5jbWQpLAogCQkJICBtZ3AtPmNtZCwgbWdwLT5jbWRfYnVzKTsKIApAQCAtMzMzNCw3ICszODUzLDYgQEAKIHsKIAlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7Ci0Jc2l6ZV90IGJ5dGVzOwogCiAJbWdwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWlmIChtZ3AgPT0gTlVMTCkKQEAgLTMzNDQsMjQgKzM4NjIsMjMgQEAKIAluZXRkZXYgPSBtZ3AtPmRldjsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCisjaWZkZWYgQ09ORklHX0RDQQorCW15cmkxMGdlX3RlYXJkb3duX2RjYShtZ3ApOworI2VuZGlmCiAJbXlyaTEwZ2VfZHVtbXlfcmRtYShtZ3AsIDApOwogCiAJLyogYXZvaWQgYSBtZW1vcnkgbGVhayAqLwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCi0JYnl0ZXMgPSBtZ3AtPm1heF9pbnRyX3Nsb3RzICogc2l6ZW9mKCptZ3AtPnNzLnJ4X2RvbmUuZW50cnkpOwotCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGJ5dGVzLAotCQkJICBtZ3AtPnNzLnJ4X2RvbmUuZW50cnksIG1ncC0+c3MucnhfZG9uZS5idXMpOwotCiAJaW91bm1hcChtZ3AtPnNyYW0pOwogCiAjaWZkZWYgQ09ORklHX01UUlIKIAlpZiAobWdwLT5tdHJyID49IDApCiAJCW10cnJfZGVsKG1ncC0+bXRyciwgbWdwLT5pb21lbV9iYXNlLCBtZ3AtPmJvYXJkX3NwYW4pOwogI2VuZGlmCi0JZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKCptZ3AtPnNzLmZ3X3N0YXRzKSwKLQkJCSAgbWdwLT5zcy5md19zdGF0cywgbWdwLT5zcy5md19zdGF0c19idXMpOwotCisJbXlyaTEwZ2VfZnJlZV9zbGljZXMobWdwKTsKKwlpZiAobWdwLT5tc2l4X3ZlY3RvcnMgIT0gTlVMTCkKKwkJa2ZyZWUobWdwLT5tc2l4X3ZlY3RvcnMpOwogCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqbWdwLT5jbWQpLAogCQkJICBtZ3AtPmNtZCwgbWdwLT5jbWRfYnVzKTsKIApAQCAtMzM5MCwxMCArMzkwNyw0MiBAQAogI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX0RDQQorc3RhdGljIGludAorbXlyaTEwZ2Vfbm90aWZ5X2RjYShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwKQoreworCWludCBlcnIgPSBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKCZteXJpMTBnZV9kcml2ZXIuZHJpdmVyLAorCQkJCQkgTlVMTCwgJmV2ZW50LAorCQkJCQkgbXlyaTEwZ2Vfbm90aWZ5X2RjYV9kZXZpY2UpOworCisJaWYgKGVycikKKwkJcmV0dXJuIE5PVElGWV9CQUQ7CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG15cmkxMGdlX2RjYV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG15cmkxMGdlX25vdGlmeV9kY2EsCisJLm5leHQgPSBOVUxMLAorCS5wcmlvcml0eSA9IDAsCit9OworI2VuZGlmCQkJCS8qIENPTkZJR19EQ0EgKi8KKwogc3RhdGljIF9faW5pdCBpbnQgbXlyaTEwZ2VfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICIlczogVmVyc2lvbiAlc1xuIiwgbXlyaTEwZ2VfZHJpdmVyLm5hbWUsCiAJICAgICAgIE1ZUkkxMEdFX1ZFUlNJT05fU1RSKTsKKworCWlmIChteXJpMTBnZV9yc3NfaGFzaCA+IE1YR0VGV19SU1NfSEFTSF9UWVBFX1NSQ19QT1JUIHx8CisJICAgIG15cmkxMGdlX3Jzc19oYXNoIDwgTVhHRUZXX1JTU19IQVNIX1RZUEVfSVBWNCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczogSWxsZWdhbCByc3NoIGhhc2ggdHlwZSAlZCwgZGVmYXVsdGluZyB0byBzb3VyY2UgcG9ydFxuIiwKKwkJICAgICAgIG15cmkxMGdlX2RyaXZlci5uYW1lLCBteXJpMTBnZV9yc3NfaGFzaCk7CisJCW15cmkxMGdlX3Jzc19oYXNoID0gTVhHRUZXX1JTU19IQVNIX1RZUEVfU1JDX1BPUlQ7CisJfQorI2lmZGVmIENPTkZJR19EQ0EKKwlkY2FfcmVnaXN0ZXJfbm90aWZ5KCZteXJpMTBnZV9kY2Ffbm90aWZpZXIpOworI2VuZGlmCisKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbXlyaTEwZ2VfZHJpdmVyKTsKIH0KIApAQCAtMzQwMSw2ICszOTUwLDkgQEAKIAogc3RhdGljIF9fZXhpdCB2b2lkIG15cmkxMGdlX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0RDQQorCWRjYV91bnJlZ2lzdGVyX25vdGlmeSgmbXlyaTEwZ2VfZGNhX25vdGlmaWVyKTsKKyNlbmRpZgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXlyaTEwZ2VfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCmluZGV4IDQ2MTE5YmIuLmIyMzhlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYworKysgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKQEAgLTY2NCw3ICs2NjQsNyBAQAogTkFUU0VNSV9BVFRSKGRzcGNmZ193b3JrYXJvdW5kKTsKIAogc3RhdGljIHNzaXplX3QgbmF0c2VtaV9zaG93X2RzcGNmZ193b3JrYXJvdW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgIAkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgCisJCQkJICAJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKQEAgLTY4Nyw3ICs2ODcsNyBAQAogICAgICAgICAgICAgICAgICB8fCAhc3RybmNtcCgiMCIsIGJ1ZiwgY291bnQgLSAxKSkKIAkJbmV3X3NldHRpbmcgPSAwOwogCWVsc2UKLSAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OyAKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lLmMgYi9kcml2ZXJzL25ldC9uZS5jCmluZGV4IDg3NGQyOTEuLjJmZWM2MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lLmMKKysrIGIvZHJpdmVycy9uZXQvbmUuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAjaWZuZGVmIE1PRFVMRQogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgbmVfcHJvYmUoaW50IHVuaXQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2VpX25ldGRldigpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19laXBfbmV0ZGV2KCk7CiAJaW50IGVycjsKIAogCWlmICghZGV2KQpAQCAtMzU1LDcgKzM1NSw3IEBACiAJfQogCiAJLyogUmVhZCB0aGUgMTYgYnl0ZXMgb2Ygc3RhdGlvbiBhZGRyZXNzIFBST00uCi0JICAgV2UgbXVzdCBmaXJzdCBpbml0aWFsaXplIHJlZ2lzdGVycywgc2ltaWxhciB0byBOUzgzOTBfaW5pdChlaWZkZXYsIDApLgorCSAgIFdlIG11c3QgZmlyc3QgaW5pdGlhbGl6ZSByZWdpc3RlcnMsIHNpbWlsYXIgdG8gTlM4MzkwcF9pbml0KGVpZmRldiwgMCkuCiAJICAgV2UgY2FuJ3QgcmVsaWFibHkgcmVhZCB0aGUgU0FQUk9NIGFkZHJlc3Mgd2l0aG91dCB0aGlzLgogCSAgIChJIGxlYXJuZWQgdGhlIGhhcmQgd2F5ISkuICovCiAJewpAQCAtNDkwLDcgKzQ5MCw3IEBACiAKIAkvKiBTbmFyZiB0aGUgaW50ZXJydXB0IG5vdy4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gd2FpdGluZyBzaW5jZSB3ZSBjYW5ub3QKIAkgICBzaGFyZSBhbmQgdGhlIGJvYXJkIHdpbGwgdXN1YWxseSBiZSBlbmFibGVkLiAqLwotCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBlaV9pbnRlcnJ1cHQsIDAsIG5hbWUsIGRldik7CisJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpcF9pbnRlcnJ1cHQsIDAsIG5hbWUsIGRldik7CiAJaWYgKHJldCkgewogCQlwcmludGsgKCIgdW5hYmxlIHRvIGdldCBJUlEgJWQgKGVycm5vPSVkKS5cbiIsIGRldi0+aXJxLCByZXQpOwogCQlnb3RvIGVycl9vdXQ7CkBAIC01MzQsNyArNTM0LDcgQEAKIAlkZXYtPm9wZW4gPSAmbmVfb3BlbjsKIAlkZXYtPnN0b3AgPSAmbmVfY2xvc2U7CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGVpX3BvbGw7CisJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaXBfcG9sbDsKICNlbmRpZgogCU5TODM5MF9pbml0KGRldiwgMCk7CiAKQEAgLTU1NCw3ICs1NTQsNyBAQAogCiBzdGF0aWMgaW50IG5lX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQllaV9vcGVuKGRldik7CisJZWlwX29wZW4oZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTYyLDcgKzU2Miw3IEBACiB7CiAJaWYgKGVpX2RlYnVnID4gMSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZC5cbiIsIGRldi0+bmFtZSk7Ci0JZWlfY2xvc2UoZGV2KTsKKwllaXBfY2xvc2UoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODE0LDcgKzgxNCw3IEBACiAJaWYgKCFyZXMgfHwgaXJxIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKwlkZXYgPSBhbGxvY19laXBfbmV0ZGV2KCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCWRldi0+aXJxID0gaXJxOwpAQCAtOTEyLDcgKzkxMiw3IEBACiAJaW50IHBsYXRfZm91bmQgPSAhbmVfaW5pdCgpOwogCiAJZm9yICh0aGlzX2RldiA9IDA7IHRoaXNfZGV2IDwgTUFYX05FX0NBUkRTOyB0aGlzX2RldisrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2VpcF9uZXRkZXYoKTsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKIAkJZGV2LT5pcnEgPSBpcnFbdGhpc19kZXZdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUyLmMgYi9kcml2ZXJzL25ldC9uZTIuYwppbmRleCBmNGNkOGM3Li4zMzJkZjc1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUyLmMKKysrIGIvZHJpdmVycy9uZXQvbmUyLmMKQEAgLTI4MCw3ICsyODAsNyBAQAogI2lmbmRlZiBNT0RVTEUKIHN0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IG5lMl9wcm9iZShpbnQgdW5pdCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2VpcF9uZXRkZXYoKTsKIAlpbnQgZXJyOwogCiAJaWYgKCFkZXYpCkBAIC00MDQsNyArNDA0LDcgQEAKIAogCS8qIFJlYWQgdGhlIDE2IGJ5dGVzIG9mIHN0YXRpb24gYWRkcmVzcyBQUk9NLgogCSAgIFdlIG11c3QgZmlyc3QgaW5pdGlhbGl6ZSByZWdpc3RlcnMsIHNpbWlsYXIgdG8KLQkgICBOUzgzOTBfaW5pdChlaWZkZXYsIDApLgorCSAgIE5TODM5MHBfaW5pdChlaWZkZXYsIDApLgogCSAgIFdlIGNhbid0IHJlbGlhYmx5IHJlYWQgdGhlIFNBUFJPTSBhZGRyZXNzIHdpdGhvdXQgdGhpcy4KIAkgICAoSSBsZWFybmVkIHRoZSBoYXJkIHdheSEpLiAqLwogCXsKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCiAJLyogU25hcmYgdGhlIGludGVycnVwdCBub3cuICBUaGVyZSdzIG5vIHBvaW50IGluIHdhaXRpbmcgc2luY2Ugd2UgY2Fubm90CiAJICAgc2hhcmUgYW5kIHRoZSBib2FyZCB3aWxsIHVzdWFsbHkgYmUgZW5hYmxlZC4gKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZWlfaW50ZXJydXB0LCAwLCBEUlZfTkFNRSwgZGV2KTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZWlwX2ludGVycnVwdCwgMCwgRFJWX05BTUUsIGRldik7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsgKCIgdW5hYmxlIHRvIGdldCBJUlEgJWQgKGlycXZhbD0lZCkuXG4iLAogCQkJCWRldi0+aXJxLCByZXR2YWwpOwpAQCAtNDk3LDkgKzQ5Nyw5IEBACiAJZGV2LT5vcGVuID0gJm5lX29wZW47CiAJZGV2LT5zdG9wID0gJm5lX2Nsb3NlOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaV9wb2xsOworCWRldi0+cG9sbF9jb250cm9sbGVyID0gZWlwX3BvbGw7CiAjZW5kaWYKLQlOUzgzOTBfaW5pdChkZXYsIDApOworCU5TODM5MHBfaW5pdChkZXYsIDApOwogCiAJcmV0dmFsID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJldHZhbCkKQEAgLTUxNSw3ICs1MTUsNyBAQAogCiBzdGF0aWMgaW50IG5lX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQllaV9vcGVuKGRldik7CisJZWlwX29wZW4oZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTIzLDcgKzUyMyw3IEBACiB7CiAJaWYgKGVpX2RlYnVnID4gMSkKIAkJcHJpbnRrKCIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQuXG4iLCBkZXYtPm5hbWUpOwotCWVpX2Nsb3NlKGRldik7CisJZWlwX2Nsb3NlKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc0OCw3ICs3NDgsNyBAQAogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkbWFfc3RhcnQgKyAyKkhaLzEwMCkpIHsJCS8qIDIwbXMgKi8KIAkJCXByaW50aygiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgVHggUkRDLlxuIiwgZGV2LT5uYW1lKTsKIAkJCW5lX3Jlc2V0XzgzOTAoZGV2KTsKLQkJCU5TODM5MF9pbml0KGRldiwxKTsKKwkJCU5TODM5MHBfaW5pdChkZXYsIDEpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNzgxLDcgKzc4MSw3IEBACiAJaW50IHRoaXNfZGV2LCBmb3VuZCA9IDA7CiAKIAlmb3IgKHRoaXNfZGV2ID0gMDsgdGhpc19kZXYgPCBNQVhfTkVfQ0FSRFM7IHRoaXNfZGV2KyspIHsKLQkJZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJCWRldiA9IGFsbG9jX2VpcF9uZXRkZXYoKTsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKIAkJZGV2LT5pcnEgPSBpcnFbdGhpc19kZXZdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDM4N2ExMzMuLmUxMzk2NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTU4NSw5ICs1ODUsOCBAQAogICogR3JvdXAgb3BlcmF0aW9ucyBhbmQgdHlwZSBmb3IgbmV0Y29uc29sZV9zdWJzeXMuCiAgKi8KIAotc3RhdGljIGludCBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAotCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgIHN0cnVjdCBjb25maWdfaXRlbSAqKm5ld19pdGVtKQorc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKKwkJCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7CkBAIC01OTksNyArNTk4LDcgQEAKIAludCA9IGt6YWxsb2Moc2l6ZW9mKCpudCksIEdGUF9LRVJORUwpOwogCWlmICghbnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJuZXRjb25zb2xlOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAogCW50LT5ucC5uYW1lID0gIm5ldGNvbnNvbGUiOwpAQCAtNjE2LDggKzYxNSw3IEBACiAJbGlzdF9hZGQoJm50LT5saXN0LCAmdGFyZ2V0X2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTsKIAotCSpuZXdfaXRlbSA9ICZudC0+aXRlbTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gJm50LT5pdGVtOwogfQogCiBzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCmluZGV4IGEwN2NkYzYuLjhlN2M0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKQEAgLTMyLDQgKzMyLDQgQEAKIG9iai0kKENPTkZJR19ORVRYRU5fTklDKSA6PSBuZXR4ZW5fbmljLm8KIAogbmV0eGVuX25pYy15IDo9IG5ldHhlbl9uaWNfaHcubyBuZXR4ZW5fbmljX21haW4ubyBuZXR4ZW5fbmljX2luaXQubyBcCi0JbmV0eGVuX25pY19pc3IubyBuZXR4ZW5fbmljX2V0aHRvb2wubyBuZXR4ZW5fbmljX25pdS5vCisJbmV0eGVuX25pY19ldGh0b29sLm8gbmV0eGVuX25pY19uaXUubyBuZXR4ZW5fbmljX2N0eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCBkYTRjNGZiLi44ZTczNjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTU0LDYgKzU0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTYzLDEwICs2NCwxMiBAQAogCiAjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgogCi0jZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX01BSk9SIDMKLSNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfTUlOT1IgNAotI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OIDE4Ci0jZGVmaW5lIE5FVFhFTl9OSUNfTElOVVhfVkVSU0lPTklEICAiMy40LjE4IgorI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA0CisjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDAKKyNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiAwCisjZGVmaW5lIE5FVFhFTl9OSUNfTElOVVhfVkVSU0lPTklEICAiNC4wLjAiCisKKyNkZWZpbmUgTkVUWEVOX1ZFUlNJT05fQ09ERShhLCBiLCBjKQkoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQogCiAjZGVmaW5lIE5FVFhFTl9OVU1fRkxBU0hfU0VDVE9SUyAoNjQpCiAjZGVmaW5lIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRSAoNjQgKiAxMDI0KQpAQCAtODQsNyArODcsNyBAQAogI2RlZmluZSBUWF9SSU5HU0laRQlcCiAJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIpICogYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpCiAjZGVmaW5lIFJDVl9CVUZGU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQpCisJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpCiAjZGVmaW5lIGZpbmRfZGlmZl9hbW9uZyhhLGIscmFuZ2UpICgoYSk8KGIpPygoYiktKGEpKTooKGIpKyhyYW5nZSktKGEpKSkKIAogI2RlZmluZSBORVRYRU5fTkVUREVWX1NUQVRVUwkJMHgxCkBAIC0xMTEsNiArMTE0LDEzIEBACiAKICNkZWZpbmUgTlhfUDJfQzAJCTB4MjQKICNkZWZpbmUgTlhfUDJfQzEJCTB4MjUKKyNkZWZpbmUgTlhfUDNfQTAJCTB4MzAKKyNkZWZpbmUgTlhfUDNfQTIJCTB4MzAKKyNkZWZpbmUgTlhfUDNfQjAJCTB4NDAKKyNkZWZpbmUgTlhfUDNfQjEJCTB4NDEKKworI2RlZmluZSBOWF9JU19SRVZJU0lPTl9QMihSRVZJU0lPTikgICAgIChSRVZJU0lPTiA8PSBOWF9QMl9DMSkKKyNkZWZpbmUgTlhfSVNfUkVWSVNJT05fUDMoUkVWSVNJT04pICAgICAoUkVWSVNJT04gPj0gTlhfUDNfQTApCiAKICNkZWZpbmUgRklSU1RfUEFHRV9HUk9VUF9TVEFSVAkwCiAjZGVmaW5lIEZJUlNUX1BBR0VfR1JPVVBfRU5ECTB4MTAwMDAwCkBAIC0xMjUsNiArMTM1LDE2IEBACiAjZGVmaW5lIFNFQ09ORF9QQUdFX0dST1VQX1NJWkUgU0VDT05EX1BBR0VfR1JPVVBfRU5EIC0gU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQKICNkZWZpbmUgVEhJUkRfUEFHRV9HUk9VUF9TSVpFICBUSElSRF9QQUdFX0dST1VQX0VORCAtIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQKIAorI2RlZmluZSBQMl9NQVhfTVRVICAgICAgICAgICAgICAgICAgICAgKDgwMDApCisjZGVmaW5lIFAzX01BWF9NVFUgICAgICAgICAgICAgICAgICAgICAoOTYwMCkKKyNkZWZpbmUgTlhfRVRIRVJNVFUgICAgICAgICAgICAgICAgICAgIDE1MDAKKyNkZWZpbmUgTlhfTUFYX0VUSEVSSERSICAgICAgICAgICAgICAgIDMyIC8qIFRoaXMgY29udGFpbnMgc29tZSBwYWRkaW5nICovCisKKyNkZWZpbmUgTlhfUlhfTk9STUFMX0JVRl9NQVhfTEVOICAgICAgIChOWF9NQVhfRVRIRVJIRFIgKyBOWF9FVEhFUk1UVSkKKyNkZWZpbmUgTlhfUDJfUlhfSlVNQk9fQlVGX01BWF9MRU4gICAgIChOWF9NQVhfRVRIRVJIRFIgKyBQMl9NQVhfTVRVKQorI2RlZmluZSBOWF9QM19SWF9KVU1CT19CVUZfTUFYX0xFTiAgICAgKE5YX01BWF9FVEhFUkhEUiArIFAzX01BWF9NVFUpCisjZGVmaW5lIE5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTgkyMDQ4CisKICNkZWZpbmUgTUFYX1JYX0JVRkZFUl9MRU5HVEgJCTE3NjAKICNkZWZpbmUgTUFYX1JYX0pVTUJPX0JVRkZFUl9MRU5HVEggCTgwNjIKICNkZWZpbmUgTUFYX1JYX0xST19CVUZGRVJfTEVOR1RICSgoNDgqMTAyNCktNTEyKQpAQCAtMTMyLDcgKzE1Miw2IEBACiAjZGVmaW5lIFJYX0pVTUJPX0RNQV9NQVBfTEVOCVwKIAkoTUFYX1JYX0pVTUJPX0JVRkZFUl9MRU5HVEggLSAyKQogI2RlZmluZSBSWF9MUk9fRE1BX01BUF9MRU4JCShNQVhfUlhfTFJPX0JVRkZFUl9MRU5HVEggLSAyKQotI2RlZmluZSBORVRYRU5fUk9NX1JPVU5EVVAJCTB4ODAwMDAwMDBVTEwKIAogLyoKICAqIE1heGltdW0gbnVtYmVyIG9mIHJpbmcgY29udGV4dHMKQEAgLTE0MCwxNiArMTU5LDE2IEBACiAjZGVmaW5lIE1BWF9SSU5HX0NUWCAxCiAKIC8qIE9wY29kZXMgdG8gYmUgdXNlZCB3aXRoIHRoZSBjb21tYW5kcyAqLwotZW51bSB7Ci0JVFhfRVRIRVJfUEtUID0gMHgwMSwKLS8qIFRoZSBmb2xsb3dpbmcgb3Bjb2RlcyBhcmUgZm9yIElQIGNoZWNrc3VtCSovCi0JVFhfVENQX1BLVCwKLQlUWF9VRFBfUEtULAotCVRYX0lQX1BLVCwKLQlUWF9UQ1BfTFNPLAotCVRYX0lQU0VDLAotCVRYX0lQU0VDX0NNRAotfTsKKyNkZWZpbmUgVFhfRVRIRVJfUEtUCTB4MDEKKyNkZWZpbmUgVFhfVENQX1BLVAkweDAyCisjZGVmaW5lIFRYX1VEUF9QS1QJMHgwMworI2RlZmluZSBUWF9JUF9QS1QJMHgwNAorI2RlZmluZSBUWF9UQ1BfTFNPCTB4MDUKKyNkZWZpbmUgVFhfVENQX0xTTzYJMHgwNgorI2RlZmluZSBUWF9JUFNFQwkweDA3CisjZGVmaW5lIFRYX0lQU0VDX0NNRAkweDBhCisjZGVmaW5lIFRYX1RDUFY2X1BLVAkweDBiCisjZGVmaW5lIFRYX1VEUFY2X1BLVAkweDBjCiAKIC8qIFRoZSBmb2xsb3dpbmcgb3Bjb2RlcyBhcmUgZm9yIGludGVybmFsIGNvbnN1bXB0aW9uLiAqLwogI2RlZmluZSBORVRYRU5fQ09OVFJPTF9PUAkweDEwCkBAIC0xOTEsNiArMjEwLDcgQEAKICNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SUwkJMTYzODQKICNkZWZpbmUgTUFYX0NNRF9ERVNDUklQVE9SU19IT1NUCShNQVhfQ01EX0RFU0NSSVBUT1JTIC8gNCkKICNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SU18xRwkJKE1BWF9SQ1ZfREVTQ1JJUFRPUlMgLyA0KQorI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRwkJODE5MgogI2RlZmluZSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTCTEwMjQKICNkZWZpbmUgTUFYX0xST19SQ1ZfREVTQ1JJUFRPUlMJCTY0CiAjZGVmaW5lIE1BWF9SQ1ZTVEFUVVNfREVTQ1JJUFRPUlMJTUFYX1JDVl9ERVNDUklQVE9SUwpAQCAtMjE5LDggKzIzOSw2IEBACiAjZGVmaW5lIE1QT1JUX01VTFRJX0ZVTkNUSU9OX01PREUgMHgyMjIyCiAKICNpbmNsdWRlICJuZXR4ZW5fbmljX3BoYW5fcmVnLmgiCi1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5ldHhlbl9kbWFfbWFzazsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGxhc3Rfc2NoZWR1bGVfdGltZTsKIAogLyoKICAqIE5ldFhlbiBob3N0LXBlZyBzaWduYWwgbWVzc2FnZSBzdHJ1Y3R1cmUKQEAgLTI4OSw3ICszMDcsNyBAQAogI2RlZmluZSBuZXR4ZW5fc2V0X2NtZF9kZXNjX3BvcnQoY21kX2Rlc2MsIHZhcikJXAogCSgoY21kX2Rlc2MpLT5wb3J0X2N0eGlkIHw9ICgodmFyKSAmIDB4MEYpKQogI2RlZmluZSBuZXR4ZW5fc2V0X2NtZF9kZXNjX2N0eGlkKGNtZF9kZXNjLCB2YXIpCVwKLQkoKGNtZF9kZXNjKS0+cG9ydF9jdHhpZCB8PSAoKHZhcikgJiAweEYwKSkKKwkoKGNtZF9kZXNjKS0+cG9ydF9jdHhpZCB8PSAoKHZhcikgPDwgNCAmIDB4RjApKQogCiAjZGVmaW5lIG5ldHhlbl9zZXRfY21kX2Rlc2NfZmxhZ3MoY21kX2Rlc2MsIHZhbCkJXAogCShjbWRfZGVzYyktPmZsYWdzX29wY29kZSA9ICgoY21kX2Rlc2MpLT5mbGFnc19vcGNvZGUgJiBcCkBAIC0zNzcsOCArMzk1LDggQEAKIH07CiAKIC8qIG9wY29kZSBmaWVsZCBpbiBzdGF0dXNfZGVzYyAqLwotI2RlZmluZSBSQ1ZfTklDX1BLVAkoMHhBKQotI2RlZmluZSBTVEFUVVNfTklDX1BLVAkoKFJDVl9OSUNfUEtUKSA8PCAxMikKKyNkZWZpbmUgTkVUWEVOX05JQ19SWFBLVF9ERVNDICAweDA0CisjZGVmaW5lIE5FVFhFTl9PTERfUlhQS1RfREVTQyAgMHgzZgogCiAvKiBmb3Igc3RhdHVzIGZpZWxkIGluIHN0YXR1c19kZXNjICovCiAjZGVmaW5lIFNUQVRVU19ORUVEX0NLU1VNCSgxKQpAQCAtNDEwLDYgKzQyOCw4IEBACiAJKCgoc3RzX2RhdGEpID4+IDI4KSAmIDB4RkZGRikKICNkZWZpbmUgbmV0eGVuX2dldF9zdHNfcHJvdChzdHNfZGF0YSkJXAogCSgoKHN0c19kYXRhKSA+PiA0NCkgJiAweDBGKQorI2RlZmluZSBuZXR4ZW5fZ2V0X3N0c19wa3Rfb2Zmc2V0KHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDQ4KSAmIDB4MUYpCiAjZGVmaW5lIG5ldHhlbl9nZXRfc3RzX29wY29kZShzdHNfZGF0YSkJXAogCSgoKHN0c19kYXRhKSA+PiA1OCkgJiAweDAzRikKIApAQCAtNDI0LDE3ICs0NDQsMzAgQEAKIAogc3RydWN0IHN0YXR1c19kZXNjIHsKIAkvKiBCaXQgcGF0dGVybjogMC0zIHBvcnQsIDQtNyBzdGF0dXMsIDgtMTEgdHlwZSwgMTItMjcgdG90YWxfbGVuZ3RoCi0JICAgMjgtNDMgcmVmZXJlbmNlX2hhbmRsZSwgNDQtNDcgcHJvdG9jb2wsIDQ4LTUyIHVudXNlZAorCSAgIDI4LTQzIHJlZmVyZW5jZV9oYW5kbGUsIDQ0LTQ3IHByb3RvY29sLCA0OC01MiBwa3Rfb2Zmc2V0CiAJICAgNTMtNTUgZGVzY19jbnQsIDU2LTU3IG93bmVyLCA1OC02MyBvcGNvZGUKIAkgKi8KIAlfX2xlNjQgc3RhdHVzX2Rlc2NfZGF0YTsKLQlfX2xlMzIgaGFzaF92YWx1ZTsKLQl1OCBoYXNoX3R5cGU7Ci0JdTggbXNnX3R5cGU7Ci0JdTggdW51c2VkOwotCS8qIEJpdCBwYXR0ZXJuOiAwLTYgbHJvX2NvdW50IGluZGljYXRlcyBmcmFnIHNlcXVlbmNlLAotCSAgIDcgbGFzdF9mcmFnIGluZGljYXRlcyBsYXN0IGZyYWcgKi8KLQl1OCBscm87CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19sZTMyIGhhc2hfdmFsdWU7CisJCQl1OCBoYXNoX3R5cGU7CisJCQl1OCBtc2dfdHlwZTsKKwkJCXU4IHVudXNlZDsKKwkJCXVuaW9uIHsKKwkJCQkvKiBCaXQgcGF0dGVybjogMC02IGxyb19jb3VudCBpbmRpY2F0ZXMgZnJhZworCQkJCSAqIHNlcXVlbmNlLCA3IGxhc3RfZnJhZyBpbmRpY2F0ZXMgbGFzdCBmcmFnCisJCQkJICovCisJCQkJdTggbHJvOworCisJCQkJLyogY2hhaW5lZCBidWZmZXJzICovCisJCQkJdTggbnJfZnJhZ3M7CisJCQl9OworCQl9OworCQlzdHJ1Y3QgeworCQkJX19sZTE2IGZyYWdfaGFuZGxlc1s0XTsKKwkJfTsKKwl9OwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTsKIAogZW51bSB7CkBAIC00NjQsNyArNDk3LDIwIEBACiAKIAlORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaID0gMHgwMDBkLAogCU5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0hNRVogPSAweDAwMGUsCi0JTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfQ1g0ID0gMHgwMDBmCisJTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfQ1g0ID0gMHgwMDBmLAorCisJTkVUWEVOX0JSRFRZUEVfUDNfUkVGX1FHID0gMHgwMDIxLAorCU5FVFhFTl9CUkRUWVBFX1AzX0hNRVogPSAweDAwMjIsCisJTkVUWEVOX0JSRFRZUEVfUDNfMTBHX0NYNF9MUCA9IDB4MDAyMywKKwlORVRYRU5fQlJEVFlQRV9QM180X0dCID0gMHgwMDI0LAorCU5FVFhFTl9CUkRUWVBFX1AzX0lNRVogPSAweDAwMjUsCisJTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9QTFVTID0gMHgwMDI2LAorCU5FVFhFTl9CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVCA9IDB4MDAyNywKKwlORVRYRU5fQlJEVFlQRV9QM19YR19MT00gPSAweDAwMjgsCisJTkVUWEVOX0JSRFRZUEVfUDNfNF9HQl9NTSA9IDB4MDAyOSwKKwlORVRYRU5fQlJEVFlQRV9QM18xMEdfQ1g0ID0gMHgwMDMxLAorCU5FVFhFTl9CUkRUWVBFX1AzXzEwR19YRlAgPSAweDAwMzIKKwogfSBuZXR4ZW5fYnJkdHlwZV90OwogCiB0eXBlZGVmIGVudW0gewpAQCAtNzQ3LDYgKzc5Myw3IEBACiAKIC8qIEluIHJ4X2J1ZmZlciwgd2UgZG8gbm90IG5lZWQgbXVsdGlwbGUgZnJhZ21lbnRzIGFzIGlzIGEgc2luZ2xlIGJ1ZmZlciAqLwogc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXU2NCBkbWE7CiAJdTE2IHJlZl9oYW5kbGU7CkBAIC03NjUsNyArODEyLDYgQEAKICAqIGNvbnRhaW5zIGludGVycnVwdCBpbmZvIGFzIHdlbGwgc2hhcmVkIGhhcmR3YXJlIGluZm8uCiAgKi8KIHN0cnVjdCBuZXR4ZW5faGFyZHdhcmVfY29udGV4dCB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTA7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTE7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTI7CkBAIC03NzMsMTUgKzgxOSwyMCBAQAogCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9ncm91cF9zdGFydDsKIAl2b2lkIF9faW9tZW0gKmRiX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBkYl9sZW47CisJdW5zaWduZWQgbG9uZyBwY2lfbGVuMDsKKworCXU4IGN1dF90aHJvdWdoOworCWludCBxZHJfc25fd2luZG93OworCWludCBkZHJfbW5fd2luZG93OworCXVuc2lnbmVkIGxvbmcgbW5fd2luX2NyYjsKKwl1bnNpZ25lZCBsb25nIG1zX3dpbl9jcmI7CiAKIAl1OCByZXZpc2lvbl9pZDsKIAl1MTYgYm9hcmRfdHlwZTsKIAlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gYm9hcmRjZmc7Ci0JdTMyIHhnX2xpbmt1cDsKLQl1MzIgcWdfbGlua3N1cDsKKwl1MzIgbGlua3VwOwogCS8qIEFkZHJlc3Mgb2YgY21kIHJpbmcgaW4gUGhhbnRvbSAqLwogCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqY21kX2Rlc2NfaGVhZDsKLQlzdHJ1Y3QgcGNpX2RldiAqY21kX2Rlc2NfcGRldjsKIAlkbWFfYWRkcl90IGNtZF9kZXNjX3BoeXNfYWRkcjsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJaW50IHBjaV9mdW5jOwpAQCAtODEzLDE3ICs4NjQsMTcgQEAKICAqIFJjdiBEZXNjcmlwdG9yIENvbnRleHQuIE9uZSBzdWNoIHBlciBSY3YgRGVzY3JpcHRvci4gVGhlcmUgbWF5CiAgKiBiZSBvbmUgUmN2IERlc2NyaXB0b3IgZm9yIG5vcm1hbCBwYWNrZXRzLCBvbmUgZm9yIGp1bWJvIGFuZCBtYXkgYmUgb3RoZXJzLgogICovCi1zdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2N0eCB7CitzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyB7CiAJdTMyIGZsYWdzOwogCXUzMiBwcm9kdWNlcjsKLQl1MzIgcmN2X3BlbmRpbmc7CS8qIE51bSBvZiBidWZzIHBvc3RlZCBpbiBwaGFudG9tICovCiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBoeXNfcGRldjsKKwl1MzIgY3JiX3Jjdl9wcm9kdWNlcjsJLyogcmVnIG9mZnNldCAqLwogCXN0cnVjdCByY3ZfZGVzYyAqZGVzY19oZWFkOwkvKiBhZGRyZXNzIG9mIHJ4IHJpbmcgaW4gUGhhbnRvbSAqLwogCXUzMiBtYXhfcnhfZGVzY19jb3VudDsKIAl1MzIgZG1hX3NpemU7CiAJdTMyIHNrYl9zaXplOwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpyeF9idWZfYXJyOwkvKiByeCBidWZmZXJzIGZvciByZWNlaXZlICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKIAlpbnQgYmVnaW5fYWxsb2M7CiB9OwogCkBAIC04MzQsMTcgKzg4NSwzMTkgQEAKICAqIHByZXNlbnQgZWxzZXdoZXJlLgogICovCiBzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCB7Ci0Jc3RydWN0IG5ldHhlbl9yY3ZfZGVzY19jdHggcmN2X2Rlc2NbTlVNX1JDVl9ERVNDX1JJTkdTXTsKLQl1MzIgc3RhdHVzX3J4X3Byb2R1Y2VyOworCXUzMiBzdGF0ZTsKKwl1MTYgY29udGV4dF9pZDsKKwl1MTYgdmlydF9wb3J0OworCisJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgcmRzX3JpbmdzW05VTV9SQ1ZfREVTQ19SSU5HU107CiAJdTMyIHN0YXR1c19yeF9jb25zdW1lcjsKKwl1MzIgY3JiX3N0c19jb25zdW1lcjsJLyogcmVnIG9mZnNldCAqLwogCWRtYV9hZGRyX3QgcmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcjsKLQlzdHJ1Y3QgcGNpX2RldiAqcmN2X3N0YXR1c19kZXNjX3BkZXY7CiAJc3RydWN0IHN0YXR1c19kZXNjICpyY3Zfc3RhdHVzX2Rlc2NfaGVhZDsKIH07CiAKLSNkZWZpbmUgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCAweDAyCi0jZGVmaW5lIE5FVFhFTl9ETUFfTUFTSwkweGZmZmZmZmZlCi0jZGVmaW5lIE5FVFhFTl9EQl9NQVBTSVpFX0JZVEVTICAgIDB4MTAwMAorLyogTmV3IEhXIGNvbnRleHQgY3JlYXRpb24gKi8KKworI2RlZmluZSBOWF9PU19DUkJfUkVUUllfQ09VTlQJNDAwMAorI2RlZmluZSBOWF9DRFJQX1NJR05BVFVSRV9NQUtFKHBjaWZuLCB2ZXJzaW9uKSBcCisJKCgocGNpZm4pICYgMHhmZikgfCAoKCh2ZXJzaW9uKSAmIDB4ZmYpIDw8IDgpIHwgKDB4Y2FmZSA8PCAxNikpCisKKyNkZWZpbmUgTlhfQ0RSUF9DTEVBUgkJMHgwMDAwMDAwMAorI2RlZmluZSBOWF9DRFJQX0NNRF9CSVQJCTB4ODAwMDAwMDAKKworLyoKKyAqIEFsbCByZXNwb25zZXMgbXVzdCBoYXZlIHRoZSBOWF9DRFJQX0NNRF9CSVQgY2xlYXJlZAorICogaW4gdGhlIGNyYiBOWF9DRFJQX0NSQl9PRkZTRVQuCisgKi8KKyNkZWZpbmUgTlhfQ0RSUF9GT1JNX1JTUChyc3ApCShyc3ApCisjZGVmaW5lIE5YX0NEUlBfSVNfUlNQKHJzcCkJKCgocnNwKSAmIE5YX0NEUlBfQ01EX0JJVCkgPT0gMCkKKworI2RlZmluZSBOWF9DRFJQX1JTUF9PSwkJMHgwMDAwMDAwMQorI2RlZmluZSBOWF9DRFJQX1JTUF9GQUlMCTB4MDAwMDAwMDIKKyNkZWZpbmUgTlhfQ0RSUF9SU1BfVElNRU9VVAkweDAwMDAwMDAzCisKKy8qCisgKiBBbGwgY29tbWFuZHMgbXVzdCBoYXZlIHRoZSBOWF9DRFJQX0NNRF9CSVQgc2V0IGluCisgKiB0aGUgY3JiIE5YX0NEUlBfQ1JCX09GRlNFVC4KKyAqLworI2RlZmluZSBOWF9DRFJQX0ZPUk1fQ01EKGNtZCkJKE5YX0NEUlBfQ01EX0JJVCB8IChjbWQpKQorI2RlZmluZSBOWF9DRFJQX0lTX0NNRChjbWQpCSgoKGNtZCkgJiBOWF9DRFJQX0NNRF9CSVQpICE9IDApCisKKyNkZWZpbmUgTlhfQ0RSUF9DTURfU1VCTUlUX0NBUEFCSUxJVElFUyAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBOWF9DRFJQX0NNRF9SRUFEX01BWF9SRFNfUEVSX0NUWCAgICAweDAwMDAwMDAyCisjZGVmaW5lIE5YX0NEUlBfQ01EX1JFQURfTUFYX1NEU19QRVJfQ1RYICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgTlhfQ0RSUF9DTURfUkVBRF9NQVhfUlVMRVNfUEVSX0NUWCAgMHgwMDAwMDAwNAorI2RlZmluZSBOWF9DRFJQX0NNRF9SRUFEX01BWF9SWF9DVFggICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIE5YX0NEUlBfQ01EX1JFQURfTUFYX1RYX0NUWCAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgTlhfQ0RSUF9DTURfQ1JFQVRFX1JYX0NUWCAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBOWF9DRFJQX0NNRF9ERVNUUk9ZX1JYX0NUWCAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE5YX0NEUlBfQ01EX0NSRUFURV9UWF9DVFggICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgTlhfQ0RSUF9DTURfREVTVFJPWV9UWF9DVFggICAgICAgICAgMHgwMDAwMDAwYQorI2RlZmluZSBOWF9DRFJQX0NNRF9TRVRVUF9TVEFUSVNUSUNTICAgICAgICAweDAwMDAwMDBlCisjZGVmaW5lIE5YX0NEUlBfQ01EX0dFVF9TVEFUSVNUSUNTICAgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgTlhfQ0RSUF9DTURfREVMRVRFX1NUQVRJU1RJQ1MgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBOWF9DRFJQX0NNRF9TRVRfTVRVICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIE5YX0NEUlBfQ01EX01BWCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKworI2RlZmluZSBOWF9SQ09ERV9TVUNDRVNTCQkwCisjZGVmaW5lIE5YX1JDT0RFX05PX0hPU1RfTUVNCQkxCisjZGVmaW5lIE5YX1JDT0RFX05PX0hPU1RfUkVTT1VSQ0UJMgorI2RlZmluZSBOWF9SQ09ERV9OT19DQVJEX0NSQgkJMworI2RlZmluZSBOWF9SQ09ERV9OT19DQVJEX01FTQkJNAorI2RlZmluZSBOWF9SQ09ERV9OT19DQVJEX1JFU09VUkNFCTUKKyNkZWZpbmUgTlhfUkNPREVfSU5WQUxJRF9BUkdTCQk2CisjZGVmaW5lIE5YX1JDT0RFX0lOVkFMSURfQUNUSU9OCQk3CisjZGVmaW5lIE5YX1JDT0RFX0lOVkFMSURfU1RBVEUJCTgKKyNkZWZpbmUgTlhfUkNPREVfTk9UX1NVUFBPUlRFRAkJOQorI2RlZmluZSBOWF9SQ09ERV9OT1RfUEVSTUlUVEVECQkxMAorI2RlZmluZSBOWF9SQ09ERV9OT1RfUkVBRFkJCTExCisjZGVmaW5lIE5YX1JDT0RFX0RPRVNfTk9UX0VYSVNUCQkxMgorI2RlZmluZSBOWF9SQ09ERV9BTFJFQURZX0VYSVNUUwkJMTMKKyNkZWZpbmUgTlhfUkNPREVfQkFEX1NJR05BVFVSRQkJMTQKKyNkZWZpbmUgTlhfUkNPREVfQ01EX05PVF9JTVBMCQkxNQorI2RlZmluZSBOWF9SQ09ERV9DTURfSU5WQUxJRAkJMTYKKyNkZWZpbmUgTlhfUkNPREVfVElNRU9VVAkJMTcKKyNkZWZpbmUgTlhfUkNPREVfQ01EX0ZBSUxFRAkJMTgKKyNkZWZpbmUgTlhfUkNPREVfTUFYX0VYQ0VFREVECQkxOQorI2RlZmluZSBOWF9SQ09ERV9NQVgJCQkyMAorCisjZGVmaW5lIE5YX0RFU1RST1lfQ1RYX1JFU0VUCQkwCisjZGVmaW5lIE5YX0RFU1RST1lfQ1RYX0QzX1JFU0VUCQkxCisjZGVmaW5lIE5YX0RFU1RST1lfQ1RYX01BWAkJMgorCisvKgorICogQ2FwYWJpbGl0aWVzCisgKi8KKyNkZWZpbmUgTlhfQ0FQX0JJVChjbGFzcywgYml0KQkJKDEgPDwgYml0KQorI2RlZmluZSBOWF9DQVAwX0xFR0FDWV9DT05URVhUCQlOWF9DQVBfQklUKDAsIDApCisjZGVmaW5lIE5YX0NBUDBfTVVMVElfQ09OVEVYVAkJTlhfQ0FQX0JJVCgwLCAxKQorI2RlZmluZSBOWF9DQVAwX0xFR0FDWV9NTgkJTlhfQ0FQX0JJVCgwLCAyKQorI2RlZmluZSBOWF9DQVAwX0xFR0FDWV9NUwkJTlhfQ0FQX0JJVCgwLCAzKQorI2RlZmluZSBOWF9DQVAwX0NVVF9USFJPVUdICQlOWF9DQVBfQklUKDAsIDQpCisjZGVmaW5lIE5YX0NBUDBfTFJPCQkJTlhfQ0FQX0JJVCgwLCA1KQorI2RlZmluZSBOWF9DQVAwX0xTTwkJCU5YX0NBUF9CSVQoMCwgNikKKyNkZWZpbmUgTlhfQ0FQMF9KVU1CT19DT05USUdVT1VTCU5YX0NBUF9CSVQoMCwgNykKKyNkZWZpbmUgTlhfQ0FQMF9MUk9fQ09OVElHVU9VUwkJTlhfQ0FQX0JJVCgwLCA4KQorCisvKgorICogQ29udGV4dCBzdGF0ZQorICovCisjZGVmaW5lIE5YX0hPU1RfQ1RYX1NUQVRFX0ZSRUVECQkwCisjZGVmaW5lIE5YX0hPU1RfQ1RYX1NUQVRFX0FMTE9DQVRFRAkxCisjZGVmaW5lIE5YX0hPU1RfQ1RYX1NUQVRFX0FDVElWRQkyCisjZGVmaW5lIE5YX0hPU1RfQ1RYX1NUQVRFX0RJU0FCTEVECTMKKyNkZWZpbmUgTlhfSE9TVF9DVFhfU1RBVEVfUVVJRVNDRUQJNAorI2RlZmluZSBOWF9IT1NUX0NUWF9TVEFURV9NQVgJCTUKKworLyoKKyAqIFJ4IGNvbnRleHQKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdTY0IGhvc3RfcGh5c19hZGRyOwkvKiBSaW5nIGJhc2UgYWRkciAqLworCXUzMiByaW5nX3NpemU7CQkvKiBSaW5nIGVudHJpZXMgKi8KKwl1MTYgbXNpX2luZGV4OworCXUxNiByc3ZkOwkJLyogUGFkZGluZyAqLworfSBueF9ob3N0cnFfc2RzX3JpbmdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU2NCBob3N0X3BoeXNfYWRkcjsJLyogUmluZyBiYXNlIGFkZHIgKi8KKwl1NjQgYnVmZl9zaXplOwkJLyogUGFja2V0IGJ1ZmZlciBzaXplICovCisJdTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLworCXUzMiByaW5nX2tpbmQ7CQkvKiBDbGFzcyBvZiByaW5nICovCit9IG54X2hvc3RycV9yZHNfcmluZ190OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTY0IGhvc3RfcnNwX2RtYV9hZGRyOwkvKiBSZXNwb25zZSBkbWEnZCBoZXJlICovCisJdTMyIGNhcGFiaWxpdGllc1s0XTsJLyogRmxhZyBiaXQgdmVjdG9yICovCisJdTMyIGhvc3RfaW50X2NyYl9tb2RlOwkvKiBJbnRlcnJ1cHQgY3JiIHVzYWdlICovCisJdTMyIGhvc3RfcmRzX2NyYl9tb2RlOwkvKiBSRFMgY3JiIHVzYWdlICovCisJLyogVGhlc2UgcmluZyBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBkYXRhWzBdIGJlbG93ICovCisJdTMyIHJkc19yaW5nX29mZnNldDsJLyogT2Zmc2V0IHRvIFJEUyBjb25maWcgKi8KKwl1MzIgc2RzX3Jpbmdfb2Zmc2V0OwkvKiBPZmZzZXQgdG8gU0RTIGNvbmZpZyAqLworCXUxNiBudW1fcmRzX3JpbmdzOwkvKiBDb3VudCBvZiBSRFMgcmluZ3MgKi8KKwl1MTYgbnVtX3Nkc19yaW5nczsJLyogQ291bnQgb2YgU0RTIHJpbmdzICovCisJdTE2IHJzdmQxOwkJLyogUGFkZGluZyAqLworCXUxNiByc3ZkMjsJCS8qIFBhZGRpbmcgKi8KKwl1OCAgcmVzZXJ2ZWRbMTI4XTsgCS8qIHJlc2VydmUgc3BhY2UgZm9yIGZ1dHVyZSBleHBhbnNpb24qLworCS8qIE1VU1QgQkUgNjQtYml0IGFsaWduZWQuCisJICAgVGhlIGZvbGxvd2luZyBpcyBwYWNrZWQ6CisJICAgLSBOIGhvc3RycV9yZHNfcmluZ3MKKwkgICAtIE4gaG9zdHJxX3Nkc19yaW5ncyAqLworCWNoYXIgZGF0YVswXTsKK30gbnhfaG9zdHJxX3J4X2N0eF90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIGhvc3RfcHJvZHVjZXJfY3JiOwkvKiBDcmIgdG8gdXNlICovCisJdTMyIHJzdmQxOwkJLyogUGFkZGluZyAqLworfSBueF9jYXJkcnNwX3Jkc19yaW5nX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgaG9zdF9jb25zdW1lcl9jcmI7CS8qIENyYiB0byB1c2UgKi8KKwl1MzIgaW50ZXJydXB0X2NyYjsJLyogQ3JiIHRvIHVzZSAqLworfSBueF9jYXJkcnNwX3Nkc19yaW5nX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwkvKiBUaGVzZSByaW5nIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvIGRhdGFbMF0gYmVsb3cgKi8KKwl1MzIgcmRzX3Jpbmdfb2Zmc2V0OwkvKiBPZmZzZXQgdG8gUkRTIGNvbmZpZyAqLworCXUzMiBzZHNfcmluZ19vZmZzZXQ7CS8qIE9mZnNldCB0byBTRFMgY29uZmlnICovCisJdTMyIGhvc3RfY3R4X3N0YXRlOwkvKiBTdGFydGluZyBTdGF0ZSAqLworCXUzMiBudW1fZm5fcGVyX3BvcnQ7CS8qIEhvdyBtYW55IFBDSSBmbiBzaGFyZSB0aGUgcG9ydCAqLworCXUxNiBudW1fcmRzX3JpbmdzOwkvKiBDb3VudCBvZiBSRFMgcmluZ3MgKi8KKwl1MTYgbnVtX3Nkc19yaW5nczsJLyogQ291bnQgb2YgU0RTIHJpbmdzICovCisJdTE2IGNvbnRleHRfaWQ7CQkvKiBIYW5kbGUgZm9yIGNvbnRleHQgKi8KKwl1OCAgcGh5c19wb3J0OwkJLyogUGh5c2ljYWwgaWQgb2YgcG9ydCAqLworCXU4ICB2aXJ0X3BvcnQ7CQkvKiBWaXJ0dWFsL0xvZ2ljYWwgaWQgb2YgcG9ydCAqLworCXU4ICByZXNlcnZlZFsxMjhdOwkvKiBzYXZlIHNwYWNlIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJLyogIE1VU1QgQkUgNjQtYml0IGFsaWduZWQuCisJICAgVGhlIGZvbGxvd2luZyBpcyBwYWNrZWQ6CisJICAgLSBOIGNhcmRyc3BfcmRzX3JpbmdzCisJICAgLSBOIGNhcmRyc19zZHNfcmluZ3MgKi8KKwljaGFyIGRhdGFbMF07Cit9IG54X2NhcmRyc3BfcnhfY3R4X3Q7CisKKyNkZWZpbmUgU0laRU9GX0hPU1RSUV9SWChIT1NUUlFfUlgsIHJkc19yaW5ncywgc2RzX3JpbmdzKQlcCisJKHNpemVvZihIT1NUUlFfUlgpICsgCQkJCQlcCisJKHJkc19yaW5ncykqKHNpemVvZihueF9ob3N0cnFfcmRzX3JpbmdfdCkpICsJCVwKKwkoc2RzX3JpbmdzKSooc2l6ZW9mKG54X2hvc3RycV9zZHNfcmluZ190KSkpCisKKyNkZWZpbmUgU0laRU9GX0NBUkRSU1BfUlgoQ0FSRFJTUF9SWCwgcmRzX3JpbmdzLCBzZHNfcmluZ3MpIAlcCisJKHNpemVvZihDQVJEUlNQX1JYKSArIAkJCQkJXAorCShyZHNfcmluZ3MpKihzaXplb2YobnhfY2FyZHJzcF9yZHNfcmluZ190KSkgKyAJCVwKKwkoc2RzX3JpbmdzKSooc2l6ZW9mKG54X2NhcmRyc3Bfc2RzX3JpbmdfdCkpKQorCisvKgorICogVHggY29udGV4dAorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1NjQgaG9zdF9waHlzX2FkZHI7CS8qIFJpbmcgYmFzZSBhZGRyICovCisJdTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLworCXUzMiByc3ZkOwkJLyogUGFkZGluZyAqLworfSBueF9ob3N0cnFfY2RzX3JpbmdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU2NCBob3N0X3JzcF9kbWFfYWRkcjsJLyogUmVzcG9uc2UgZG1hJ2QgaGVyZSAqLworCXU2NCBjbWRfY29uc19kbWFfYWRkcjsJLyogICovCisJdTY0IGR1bW15X2RtYV9hZGRyOwkvKiAgKi8KKwl1MzIgY2FwYWJpbGl0aWVzWzRdOwkvKiBGbGFnIGJpdCB2ZWN0b3IgKi8KKwl1MzIgaG9zdF9pbnRfY3JiX21vZGU7CS8qIEludGVycnVwdCBjcmIgdXNhZ2UgKi8KKwl1MzIgcnN2ZDE7CQkvKiBQYWRkaW5nICovCisJdTE2IHJzdmQyOwkJLyogUGFkZGluZyAqLworCXUxNiBpbnRlcnJ1cHRfY3RsOworCXUxNiBtc2lfaW5kZXg7CisJdTE2IHJzdmQzOwkJLyogUGFkZGluZyAqLworCW54X2hvc3RycV9jZHNfcmluZ190IGNkc19yaW5nOwkvKiBEZXNjIG9mIGNkcyByaW5nICovCisJdTggIHJlc2VydmVkWzEyOF07CS8qIGZ1dHVyZSBleHBhbnNpb24gKi8KK30gbnhfaG9zdHJxX3R4X2N0eF90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIGhvc3RfcHJvZHVjZXJfY3JiOwkvKiBDcmIgdG8gdXNlICovCisJdTMyIGludGVycnVwdF9jcmI7CS8qIENyYiB0byB1c2UgKi8KK30gbnhfY2FyZHJzcF9jZHNfcmluZ190OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIGhvc3RfY3R4X3N0YXRlOwkvKiBTdGFydGluZyBzdGF0ZSAqLworCXUxNiBjb250ZXh0X2lkOwkJLyogSGFuZGxlIGZvciBjb250ZXh0ICovCisJdTggIHBoeXNfcG9ydDsJCS8qIFBoeXNpY2FsIGlkIG9mIHBvcnQgKi8KKwl1OCAgdmlydF9wb3J0OwkJLyogVmlydHVhbC9Mb2dpY2FsIGlkIG9mIHBvcnQgKi8KKwlueF9jYXJkcnNwX2Nkc19yaW5nX3QgY2RzX3Jpbmc7CS8qIENhcmQgY2RzIHNldHRpbmdzICovCisJdTggIHJlc2VydmVkWzEyOF07CS8qIGZ1dHVyZSBleHBhbnNpb24gKi8KK30gbnhfY2FyZHJzcF90eF9jdHhfdDsKKworI2RlZmluZSBTSVpFT0ZfSE9TVFJRX1RYKEhPU1RSUV9UWCkJKHNpemVvZihIT1NUUlFfVFgpKQorI2RlZmluZSBTSVpFT0ZfQ0FSRFJTUF9UWChDQVJEUlNQX1RYKQkoc2l6ZW9mKENBUkRSU1BfVFgpKQorCisvKiBDUkIgKi8KKworI2RlZmluZSBOWF9IT1NUX1JEU19DUkJfTU9ERV9VTklRVUUJMAorI2RlZmluZSBOWF9IT1NUX1JEU19DUkJfTU9ERV9TSEFSRUQJMQorI2RlZmluZSBOWF9IT1NUX1JEU19DUkJfTU9ERV9DVVNUT00JMgorI2RlZmluZSBOWF9IT1NUX1JEU19DUkJfTU9ERV9NQVgJMworCisjZGVmaW5lIE5YX0hPU1RfSU5UX0NSQl9NT0RFX1VOSVFVRQkwCisjZGVmaW5lIE5YX0hPU1RfSU5UX0NSQl9NT0RFX1NIQVJFRAkxCisjZGVmaW5lIE5YX0hPU1RfSU5UX0NSQl9NT0RFX05PUlgJMgorI2RlZmluZSBOWF9IT1NUX0lOVF9DUkJfTU9ERV9OT1RYCTMKKyNkZWZpbmUgTlhfSE9TVF9JTlRfQ1JCX01PREVfTk9SWFRYCTQKKworCisvKiBNQUMgKi8KKworI2RlZmluZSBNQ19DT1VOVF9QMgkxNgorI2RlZmluZSBNQ19DT1VOVF9QMwkzOAorCisjZGVmaW5lIE5FVFhFTl9NQUNfTk9PUAkwCisjZGVmaW5lIE5FVFhFTl9NQUNfQURECTEKKyNkZWZpbmUgTkVUWEVOX01BQ19ERUwJMgorCit0eXBlZGVmIHN0cnVjdCBueF9tYWNfbGlzdF9zIHsKKwlzdHJ1Y3QgbnhfbWFjX2xpc3RfcyAqbmV4dDsKKwl1aW50OF90IG1hY19hZGRyW01BWF9BRERSX0xFTl07Cit9IG54X21hY19saXN0X3Q7CisKKy8qCisgKiBJbnRlcnJ1cHQgY29hbGVzY2luZyBkZWZhdWx0cy4gVGhlIGRlZmF1bHRzIGFyZSBmb3IgMTUwMCBNVFUuIEl0IGlzCisgKiBhZGp1c3RlZCBiYXNlZCBvbiBjb25maWd1cmVkIE1UVS4KKyAqLworI2RlZmluZSBORVRYRU5fREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVMJMworI2RlZmluZSBORVRYRU5fREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1BBQ0tFVFMJMjU2CisjZGVmaW5lIE5FVFhFTl9ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfVFhfUEFDS0VUUwk2NAorI2RlZmluZSBORVRYRU5fREVGQVVMVF9JTlRSX0NPQUxFU0NFX1RYX1RJTUVfVVMJNAorCisjZGVmaW5lIE5FVFhFTl9OSUNfSU5UUl9ERUZBVUxUCQkJMHgwNAorCit0eXBlZGVmIHVuaW9uIHsKKwlzdHJ1Y3QgeworCQl1aW50MTZfdAlyeF9wYWNrZXRzOworCQl1aW50MTZfdAlyeF90aW1lX3VzOworCQl1aW50MTZfdAl0eF9wYWNrZXRzOworCQl1aW50MTZfdAl0eF90aW1lX3VzOworCX0gZGF0YTsKKwl1aW50NjRfdAkJd29yZDsKK30gbnhfbmljX2ludHJfY29hbGVzY2VfZGF0YV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDE2X3QJCQlzdGF0c190aW1lX3VzOworCXVpbnQxNl90CQkJcmF0ZV9zYW1wbGVfdGltZTsKKwl1aW50MTZfdAkJCWZsYWdzOworCXVpbnQxNl90CQkJcnN2ZF8xOworCXVpbnQzMl90CQkJbG93X3RocmVzaG9sZDsKKwl1aW50MzJfdAkJCWhpZ2hfdGhyZXNob2xkOworCW54X25pY19pbnRyX2NvYWxlc2NlX2RhdGFfdAlub3JtYWw7CisJbnhfbmljX2ludHJfY29hbGVzY2VfZGF0YV90CWxvdzsKKwlueF9uaWNfaW50cl9jb2FsZXNjZV9kYXRhX3QJaGlnaDsKKwlueF9uaWNfaW50cl9jb2FsZXNjZV9kYXRhX3QJaXJxOworfSBueF9uaWNfaW50cl9jb2FsZXNjZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTY0IHFoZHI7CisJdTY0IHJlcV9oZHI7CisJdTY0IHdvcmRzWzZdOworfSBueF9uaWNfcmVxX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OCBvcDsKKwl1OCB0YWc7CisJdTggbWFjX2FkZHJbNl07Cit9IG54X21hY19yZXFfdDsKKworI2RlZmluZSBNQVhfUEVORElOR19ERVNDX0JMT0NLX1NJWkUJNjQKKworI2RlZmluZSBORVRYRU5fTklDX01TSV9FTkFCTEVECQkweDAyCisjZGVmaW5lIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVECQkweDA0CisjZGVmaW5lIE5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpIFwKKwkoKGFkYXB0ZXIpLT5mbGFncyAmIChORVRYRU5fTklDX01TSV9FTkFCTEVEIHwgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpKQorCisjZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUgk4CisjZGVmaW5lIE5FVFhFTl9NU0lYX1RCTF9TUEFDRQkJODE5MgorI2RlZmluZSBORVRYRU5fUENJX1JFR19NU0lYX1RCTAkJMHg0NAorCisjZGVmaW5lIE5FVFhFTl9EQl9NQVBTSVpFX0JZVEVTICAgIAkweDEwMDAKKworI2RlZmluZSBORVRYRU5fTkVUREVWX1dFSUdIVCAxMjAKKyNkZWZpbmUgTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMgNzc3CisjZGVmaW5lIE5FVFhFTl9OSUNfUEVHX1RVTkUgMAogCiBzdHJ1Y3QgbmV0eGVuX2R1bW15X2RtYSB7CiAJdm9pZCAqYWRkcjsKQEAgLTg1NCw0NiArMTIwNyw2NSBAQAogc3RydWN0IG5ldHhlbl9hZGFwdGVyIHsKIAlzdHJ1Y3QgbmV0eGVuX2hhcmR3YXJlX2NvbnRleHQgYWh3OwogCi0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICptYXN0ZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlpbnQgcGNpX3VzaW5nX2RhYzsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7Ci0JdW5zaWduZWQgY2hhciBtYWNfYWRkcltFVEhfQUxFTl07CiAJaW50IG10dTsKIAlpbnQgcG9ydG51bTsKIAl1OCBwaHlzaWNhbF9wb3J0OworCXUxNiB0eF9jb250ZXh0X2lkOworCisJdWludDhfdAkJbWNfZW5hYmxlZDsKKwl1aW50OF90CQltYXhfbWNfY291bnQ7CisJbnhfbWFjX2xpc3RfdAkqbWFjX2xpc3Q7CisKKwlzdHJ1Y3QgbmV0eGVuX2xlZ2FjeV9pbnRyX3NldCBsZWdhY3lfaW50cjsKKwl1MzIJY3JiX2ludHJfbWFzazsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCB3YXRjaGRvZ190YXNrOwogCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAgdHhfdGltZW91dF90YXNrOwogCiAJdTMyIGN1cnJfd2luZG93OworCXUzMiBjcmJfd2luOworCXJ3bG9ja190IGFkYXB0ZXJfbG9jazsKKworCXVpbnQ2NF90IGRtYV9tYXNrOwogCiAJdTMyIGNtZF9wcm9kdWNlcjsKIAlfX2xlMzIgKmNtZF9jb25zdW1lcjsKIAl1MzIgbGFzdF9jbWRfY29uc3VtZXI7CisJdTMyIGNyYl9hZGRyX2NtZF9wcm9kdWNlcjsKKwl1MzIgY3JiX2FkZHJfY21kX2NvbnN1bWVyOwogCiAJdTMyIG1heF90eF9kZXNjX2NvdW50OwogCXUzMiBtYXhfcnhfZGVzY19jb3VudDsKIAl1MzIgbWF4X2p1bWJvX3J4X2Rlc2NfY291bnQ7CiAJdTMyIG1heF9scm9fcnhfZGVzY19jb3VudDsKIAorCWludCBtYXhfcmRzX3JpbmdzOworCiAJdTMyIGZsYWdzOwogCXUzMiBpcnE7CiAJaW50IGRyaXZlcl9taXNtYXRjaDsKIAl1MzIgdGVtcDsKIAorCXUzMiBmd19tYWpvcjsKKworCXU4IG1zaXhfc3VwcG9ydGVkOworCXU4IG1heF9wb3NzaWJsZV9yc3NfcmluZ3M7CisJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW01TSVhfRU5UUklFU19QRVJfQURBUFRFUl07CisKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXJfc3RhdHMgc3RhdHM7CiAKLQl1MTYgcG9ydG5vOwogCXUxNiBsaW5rX3NwZWVkOwogCXUxNiBsaW5rX2R1cGxleDsKIAl1MTYgc3RhdGU7CiAJdTE2IGxpbmtfYXV0b25lZzsKIAlpbnQgcnhfY3N1bTsKIAlpbnQgc3RhdHVzOwotCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKIAogCXN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqY21kX2J1Zl9hcnI7CS8qIENvbW1hbmQgYnVmZmVycyBmb3IgeG1pdCAqLwogCkBAIC05MDUsMjUgKzEyNzcsMzMgQEAKIAogCWludCBpc191cDsKIAlzdHJ1Y3QgbmV0eGVuX2R1bW15X2RtYSBkdW1teV9kbWE7CisJbnhfbmljX2ludHJfY29hbGVzY2VfdCBjb2FsOwogCiAJLyogQ29udGV4dCBpbnRlcmZhY2Ugc2hhcmVkIGJldHdlZW4gY2FyZCBhbmQgaG9zdCAqLwogCXN0cnVjdCBuZXR4ZW5fcmluZ19jdHggKmN0eF9kZXNjOwotCXN0cnVjdCBwY2lfZGV2ICpjdHhfZGVzY19wZGV2OwogCWRtYV9hZGRyX3QgY3R4X2Rlc2NfcGh5c19hZGRyOwogCWludCBpbnRyX3NjaGVtZTsKIAlpbnQgbXNpX21vZGU7CiAJaW50ICgqZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopOwogCWludCAoKmRpc2FibGVfcGh5X2ludGVycnVwdHMpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKik7Ci0Jdm9pZCAoKmhhbmRsZV9waHlfaW50cikgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqKTsKIAlpbnQgKCptYWNhZGRyX3NldCkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBuZXR4ZW5fZXRoZXJuZXRfbWFjYWRkcl90KTsKIAlpbnQgKCpzZXRfbXR1KSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIGludCk7CiAJaW50ICgqc2V0X3Byb21pc2MpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgbmV0eGVuX25pdV9wcm9tX21vZGVfdCk7Ci0JaW50ICgqdW5zZXRfcHJvbWlzYykgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBuZXR4ZW5fbml1X3Byb21fbW9kZV90KTsKIAlpbnQgKCpwaHlfcmVhZCkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBsb25nIHJlZywgdTMyICopOwogCWludCAoKnBoeV93cml0ZSkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBsb25nIHJlZywgdTMyIHZhbCk7CiAJaW50ICgqaW5pdF9wb3J0KSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIGludCk7Ci0Jdm9pZCAoKmluaXRfbml1KSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopOwogCWludCAoKnN0b3BfcG9ydCkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqKTsKKworCWludCAoKmh3X3JlYWRfd3gpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1bG9uZywgdm9pZCAqLCBpbnQpOworCWludCAoKmh3X3dyaXRlX3d4KShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdWxvbmcsIHZvaWQgKiwgaW50KTsKKwlpbnQgKCpwY2lfbWVtX3JlYWQpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1NjQsIHZvaWQgKiwgaW50KTsKKwlpbnQgKCpwY2lfbWVtX3dyaXRlKShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdTY0LCB2b2lkICosIGludCk7CisJaW50ICgqcGNpX3dyaXRlX2ltbWVkaWF0ZSkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHU2NCwgdTMyKTsKKwl1MzIgKCpwY2lfcmVhZF9pbW1lZGlhdGUpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1NjQpOworCXZvaWQgKCpwY2lfd3JpdGVfbm9ybWFsaXplKShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdTY0LCB1MzIpOworCXUzMiAoKnBjaV9yZWFkX25vcm1hbGl6ZSkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHU2NCk7CisJdW5zaWduZWQgbG9uZyAoKnBjaV9zZXRfd2luZG93KShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwKKwkJCXVuc2lnbmVkIGxvbmcgbG9uZyk7CiB9OwkJCQkvKiBuZXR4ZW5fYWRhcHRlciBzdHJ1Y3R1cmUgKi8KIAogLyoKQEAgLTk4OCw4ICsxMzY4LDYgQEAKIGludCBuZXR4ZW5fbml1X2diZV9lbmFibGVfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIGludCBuZXR4ZW5fbml1X3hnYmVfZGlzYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9uaXVfZ2JlX2Rpc2FibGVfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgbmV0eGVuX25pY194Z2JlX2hhbmRsZV9waHlfaW50cihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBuZXR4ZW5fbmljX2diZV9oYW5kbGVfcGh5X2ludHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIGludCBuZXR4ZW5fbml1X2diZV9waHlfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGxvbmcgcmVnLAogCQkJICAgIF9fdTMyICogcmVhZHZhbCk7CiBpbnQgbmV0eGVuX25pdV9nYmVfcGh5X3dyaXRlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKQEAgLTk5OCwyNyArMTM3Niw2MSBAQAogLyogRnVuY3Rpb25zIGF2YWlsYWJsZSBmcm9tIG5ldHhlbl9uaWNfaHcuYyAqLwogaW50IG5ldHhlbl9uaWNfc2V0X210dV94Z2Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgbmV3X210dSk7CiBpbnQgbmV0eGVuX25pY19zZXRfbXR1X2diKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IG5ld19tdHUpOwotdm9pZCBuZXR4ZW5fbmljX2luaXRfbml1X2diKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIG5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgd25kdyk7CiB2b2lkIG5ldHhlbl9uaWNfcmVnX3dyaXRlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwgdTMyIHZhbCk7CiBpbnQgbmV0eGVuX25pY19yZWdfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYpOwogdm9pZCBuZXR4ZW5fbmljX3dyaXRlX3cwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgdmFsdWUpOwotdm9pZCBuZXR4ZW5fbmljX3JlYWRfdzAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgaW5kZXgsIHUzMiAqIHZhbHVlKTsKK3ZvaWQgbmV0eGVuX25pY19yZWFkX3cwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgKnZhbHVlKTsKK3ZvaWQgbmV0eGVuX25pY193cml0ZV93MShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpbmRleCwgdTMyIHZhbHVlKTsKK3ZvaWQgbmV0eGVuX25pY19yZWFkX3cxKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgKnZhbHVlKTsKIAogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKLWludCBuZXR4ZW5fbmljX2h3X3JlYWRfd3goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLCB2b2lkICpkYXRhLAotCQkJICBpbnQgbGVuKTsKLWludCBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwgdm9pZCAqZGF0YSwKLQkJCSAgIGludCBsZW4pOworCitpbnQgbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pOworaW50IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXVsb25nIG9mZiwgdm9pZCAqZGF0YSwgaW50IGxlbik7CitpbnQgbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKTsKK2ludCBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKTsKK2ludCBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHUzMiBkYXRhKTsKK3UzMiBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZik7Cit2b2lkIG5ldHhlbl9uaWNfcGNpX3dyaXRlX25vcm1hbGl6ZV8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdTY0IG9mZiwgdTMyIGRhdGEpOwordTMyIG5ldHhlbl9uaWNfcGNpX3JlYWRfbm9ybWFsaXplXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmKTsKK3Vuc2lnbmVkIGxvbmcgbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpOwordm9pZCBuZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1MzIgd25kdyk7CisKK2ludCBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pOworaW50IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pOworaW50IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpOworaW50IG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKTsKIHZvaWQgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgdW5zaWduZWQgbG9uZyBvZmYsIGludCBkYXRhKTsKK2ludCBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1NjQgb2ZmLCB1MzIgZGF0YSk7Cit1MzIgbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmKTsKK3ZvaWQgbmV0eGVuX25pY19wY2lfd3JpdGVfbm9ybWFsaXplXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdTY0IG9mZiwgdTMyIGRhdGEpOwordTMyIG5ldHhlbl9uaWNfcGNpX3JlYWRfbm9ybWFsaXplXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZik7Cit1bnNpZ25lZCBsb25nIG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcik7CiAKIC8qIEZ1bmN0aW9ucyBmcm9tIG5ldHhlbl9uaWNfaW5pdC5jICovCiB2b2lkIG5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb2ZmbG9hZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9waGFudG9tX2luaXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcGVndHVuZV92YWwpOworaW50IG5ldHhlbl9yZWNlaXZlX3BlZ19yZWFkeShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgbmV0eGVuX3Bpbml0X2Zyb21fcm9tKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHZlcmJvc2UpOworCiBpbnQgbmV0eGVuX3JvbV9mYXN0X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50ICp2YWxwKTsKIGludCBuZXR4ZW5fcm9tX2Zhc3RfcmVhZF93b3JkcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLAogCQkJCXU4ICpieXRlcywgc2l6ZV90IHNpemUpOwpAQCAtMTAzMiwzMyArMTQ0NCw0MyBAQAogCiBpbnQgbmV0eGVuX3JvbV9zZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyKTsKIAotLyogRnVuY3Rpb25zIGZyb20gbmV0eGVuX25pY19pc3IuYyAqLwotdm9pZCBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX3N3KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkICpuZXR4ZW5fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzeiwgZG1hX2FkZHJfdCAqIHB0ciwKLQkJICAgc3RydWN0IHBjaV9kZXYgKip1c2VkX2Rldik7CitpbnQgbmV0eGVuX2FsbG9jX3N3X3Jlc291cmNlcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBuZXR4ZW5fZnJlZV9zd19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKKworaW50IG5ldHhlbl9hbGxvY19od19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQgbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBuZXR4ZW5fcmVsZWFzZV90eF9idWZmZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CisKIHZvaWQgbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vcHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIGludCBuZXR4ZW5faW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBuZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX3Rzb19jaGVjayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCSAgICAgIHN0cnVjdCBjbWRfZGVzY190eXBlMCAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgbmV0eGVuX25pY19od19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX25pY19jbGVhcl9zdGF0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBuZXR4ZW5fd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGN0eCwKIAkJCSAgICB1MzIgcmluZ2lkKTsKIGludCBuZXR4ZW5fcHJvY2Vzc19jbWRfcmluZyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdTMyIG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGN0eCwgaW50IG1heCk7Ci12b2lkIG5ldHhlbl9uaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwordm9pZCBuZXR4ZW5fcDJfbmljX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3ZvaWQgbmV0eGVuX3AzX25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgbmV0eGVuX2NvbmZpZ19pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CisKK3UzMiBueF9md19jbWRfc2V0X210dShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtdHUpOwogaW50IG5ldHhlbl9uaWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSk7CisKIGludCBuZXR4ZW5fbmljX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCk7CiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0eGVuX25pY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAKK3ZvaWQgbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdWludDMyX3QgY3JiX3Byb2R1Y2VyKTsKIAogLyoKICAqIE5ldFhlbiBCb2FyZCBpbmZvcm1hdGlvbgogICovCiAKLSNkZWZpbmUgTkVUWEVOX01BWF9TSE9SVF9OQU1FIDE2CisjZGVmaW5lIE5FVFhFTl9NQVhfU0hPUlRfTkFNRSAzMgogc3RydWN0IG5ldHhlbl9icmRpbmZvIHsKIAluZXR4ZW5fYnJkdHlwZV90IGJyZHR5cGU7CS8qIHR5cGUgb2YgYm9hcmQgKi8KIAlsb25nIHBvcnRzOwkJLyogbWF4IG5vIG9mIHBoeXNpY2FsIHBvcnRzICovCkBAIC0xMDcyLDYgKzE0OTQsMTcgQEAKIAl7TkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEcsIDEsICJYR2IgWEZQIn0sCiAJe05FVFhFTl9CUkRUWVBFX1AyX1NCMzVfNEcsIDQsICJRdWFkIEdiIn0sCiAJe05FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMkcsIDIsICJEdWFsIEdiIn0sCisJe05FVFhFTl9CUkRUWVBFX1AzX1JFRl9RRywgIDQsICJSZWZlcmVuY2UgUXVhZCBHaWcgIn0sCisJe05FVFhFTl9CUkRUWVBFX1AzX0hNRVosICAgIDIsICJEdWFsIFhHYiBITUVaIn0sCisJe05FVFhFTl9CUkRUWVBFX1AzXzEwR19DWDRfTFAsICAgMiwgIkR1YWwgWEdiIENYNCBMUCJ9LAorCXtORVRYRU5fQlJEVFlQRV9QM180X0dCLCAgICA0LCAiUXVhZCBHaWcgTFAifSwKKwl7TkVUWEVOX0JSRFRZUEVfUDNfSU1FWiwgICAgMiwgIkR1YWwgWEdiIElNRVoifSwKKwl7TkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9QTFVTLCAyLCAiRHVhbCBYR2IgU0ZQKyBMUCJ9LAorCXtORVRYRU5fQlJEVFlQRV9QM18xMDAwMF9CQVNFX1QsIDEsICJYR0IgMTBHIEJhc2VUIExQIn0sCisJe05FVFhFTl9CUkRUWVBFX1AzX1hHX0xPTSwgIDIsICJEdWFsIFhHYiBMT00ifSwKKwl7TkVUWEVOX0JSRFRZUEVfUDNfNF9HQl9NTSwgNCwgIlF1YWQgR0IgLSBNYXJjaCBNYWRuZXNzIn0sCisJe05FVFhFTl9CUkRUWVBFX1AzXzEwR19DWDQsIDIsICJSZWZlcmVuY2UgRHVhbCBDWDQgT3B0aW9uIn0sCisJe05FVFhFTl9CUkRUWVBFX1AzXzEwR19YRlAsIDEsICJSZWZlcmVuY2UgU2luZ2xlIFhGUCBPcHRpb24ifQogfTsKIAogI2RlZmluZSBOVU1fU1VQUE9SVEVEX0JPQVJEUyBBUlJBWV9TSVpFKG5ldHhlbl9ib2FyZHMpCkBAIC0xMDk3LDcgKzE1MzAsNyBAQAogCXUzMiBjdHJsOwogCiAJLyogY2hlY2sgaWYgYWxyZWFkeSBpbmFjdGl2ZSAqLwotCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwKKwlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAogCSAgICBORVRYRU5fQ0FNX1JBTShORVRYRU5fQ0FNX1JBTV9ETUFfV0FUQ0hET0dfQ1RSTCksICZjdHJsLCA0KSkKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVhZCBkbWEgd2F0Y2hkb2cgc3RhdHVzXG4iKTsKIApAQCAtMTExNyw3ICsxNTUwLDcgQEAKIHsKIAl1MzIgY3RybDsKIAotCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwKKwlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAogCSAgICBORVRYRU5fQ0FNX1JBTShORVRYRU5fQ0FNX1JBTV9ETUFfV0FUQ0hET0dfQ1RSTCksICZjdHJsLCA0KSkKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVhZCBkbWEgd2F0Y2hkb2cgc3RhdHVzXG4iKTsKIApAQCAtMTEyOSw3ICsxNTYyLDcgQEAKIHsKIAl1MzIgY3RybDsKIAotCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwKKwlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAogCQlORVRYRU5fQ0FNX1JBTShORVRYRU5fQ0FNX1JBTV9ETUFfV0FUQ0hET0dfQ1RSTCksICZjdHJsLCA0KSkKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVhZCBkbWEgd2F0Y2hkb2cgc3RhdHVzXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGJhYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKQEAgLTAsMCArMSw3MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA4IE5ldFhlbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiAgICBpbmZvQG5ldHhlbi5jb20KKyAqIE5ldFhlbiwKKyAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKKyAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAorICoKKyAqLworCisjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgorI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKKyNpbmNsdWRlICJuZXR4ZW5fbmljX3BoYW5fcmVnLmgiCisKKyNkZWZpbmUgTlhIQUxfVkVSU0lPTgkxCisKK3N0YXRpYyBpbnQKK25ldHhlbl9hcGlfbG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGRvbmUgPSAwLCB0aW1lb3V0ID0gMDsKKworCWZvciAoOzspIHsKKwkJLyogQWNxdWlyZSBQQ0lFIEhXIHNlbWFwaG9yZTUgKi8KKwkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsCisJCQlORVRYRU5fUENJRV9SRUcoUENJRV9TRU01X0xPQ0spLCAmZG9uZSk7CisKKwkJaWYgKGRvbmUgPT0gMSkKKwkJCWJyZWFrOworCisJCWlmICgrK3RpbWVvdXQgPj0gTlhfT1NfQ1JCX1JFVFJZX0NPVU5UKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBsb2NrIHRpbWVvdXQuXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQltc2xlZXAoMSk7CisJfQorCisjaWYgMAorCW5ldHhlbl9uaWNfd3JpdGVfdzEoYWRhcHRlciwKKwkJTkVUWEVOX0FQSV9MT0NLX0lELCBOWF9PU19BUElfTE9DS19EUklWRVIpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9hcGlfdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsOworCisJLyogUmVsZWFzZSBQQ0lFIEhXIHNlbWFwaG9yZTUgKi8KKwluZXR4ZW5fbmljX3JlYWRfdzAoYWRhcHRlciwKKwkJTkVUWEVOX1BDSUVfUkVHKFBDSUVfU0VNNV9VTkxPQ0spLCAmdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMgorbmV0eGVuX3BvbGxfcnNwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgcmF3X3JzcCwgcnNwID0gTlhfQ0RSUF9SU1BfT0s7CisJaW50CXRpbWVvdXQgPSAwOworCisJZG8geworCQkvKiBnaXZlIGF0bGVhc3QgMW1zIGZvciBmaXJtd2FyZSB0byByZXNwb25kICovCisJCW1zbGVlcCgxKTsKKworCQlpZiAoKyt0aW1lb3V0ID4gTlhfT1NfQ1JCX1JFVFJZX0NPVU5UKQorCQkJcmV0dXJuIE5YX0NEUlBfUlNQX1RJTUVPVVQ7CisKKwkJbmV0eGVuX25pY19yZWFkX3cxKGFkYXB0ZXIsIE5YX0NEUlBfQ1JCX09GRlNFVCwKKwkJCQkmcmF3X3JzcCk7CisKKwkJcnNwID0gbGUzMl90b19jcHUocmF3X3JzcCk7CisJfSB3aGlsZSAoIU5YX0NEUlBfSVNfUlNQKHJzcCkpOworCisJcmV0dXJuIHJzcDsKK30KKworc3RhdGljIHUzMgorbmV0eGVuX2lzc3VlX2NtZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJdTMyIHBjaV9mbiwgdTMyIHZlcnNpb24sIHUzMiBhcmcxLCB1MzIgYXJnMiwgdTMyIGFyZzMsIHUzMiBjbWQpCit7CisJdTMyIHJzcDsKKwl1MzIgc2lnbmF0dXJlID0gMDsKKwl1MzIgcmNvZGUgPSBOWF9SQ09ERV9TVUNDRVNTOworCisJc2lnbmF0dXJlID0gTlhfQ0RSUF9TSUdOQVRVUkVfTUFLRShwY2lfZm4sIHZlcnNpb24pOworCisJLyogQWNxdWlyZSBzZW1hcGhvcmUgYmVmb3JlIGFjY2Vzc2luZyBDUkIgKi8KKwlpZiAobmV0eGVuX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gTlhfUkNPREVfVElNRU9VVDsKKworCW5ldHhlbl9uaWNfd3JpdGVfdzEoYWRhcHRlciwgTlhfU0lHTl9DUkJfT0ZGU0VULAorCQkJY3B1X3RvX2xlMzIoc2lnbmF0dXJlKSk7CisKKwluZXR4ZW5fbmljX3dyaXRlX3cxKGFkYXB0ZXIsIE5YX0FSRzFfQ1JCX09GRlNFVCwKKwkJCWNwdV90b19sZTMyKGFyZzEpKTsKKworCW5ldHhlbl9uaWNfd3JpdGVfdzEoYWRhcHRlciwgTlhfQVJHMl9DUkJfT0ZGU0VULAorCQkJY3B1X3RvX2xlMzIoYXJnMikpOworCisJbmV0eGVuX25pY193cml0ZV93MShhZGFwdGVyLCBOWF9BUkczX0NSQl9PRkZTRVQsCisJCQljcHVfdG9fbGUzMihhcmczKSk7CisKKwluZXR4ZW5fbmljX3dyaXRlX3cxKGFkYXB0ZXIsIE5YX0NEUlBfQ1JCX09GRlNFVCwKKwkJCWNwdV90b19sZTMyKE5YX0NEUlBfRk9STV9DTUQoY21kKSkpOworCisJcnNwID0gbmV0eGVuX3BvbGxfcnNwKGFkYXB0ZXIpOworCisJaWYgKHJzcCA9PSBOWF9DRFJQX1JTUF9USU1FT1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhcmQgcmVzcG9uc2UgdGltZW91dC5cbiIsCisJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisKKwkJcmNvZGUgPSBOWF9SQ09ERV9USU1FT1VUOworCX0gZWxzZSBpZiAocnNwID09IE5YX0NEUlBfUlNQX0ZBSUwpIHsKKwkJbmV0eGVuX25pY19yZWFkX3cxKGFkYXB0ZXIsIE5YX0FSRzFfQ1JCX09GRlNFVCwgJnJjb2RlKTsKKwkJcmNvZGUgPSBsZTMyX3RvX2NwdShyY29kZSk7CisKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIGNhcmQgcmVzcG9uc2UgY29kZToweCV4XG4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIHJjb2RlKTsKKwl9CisKKwkvKiBSZWxlYXNlIHNlbWFwaG9yZSAqLworCW5ldHhlbl9hcGlfdW5sb2NrKGFkYXB0ZXIpOworCisJcmV0dXJuIHJjb2RlOworfQorCit1MzIKK254X2Z3X2NtZF9zZXRfbXR1KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIG10dSkKK3sKKwl1MzIgcmNvZGUgPSBOWF9SQ09ERV9TVUNDRVNTOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFswXTsKKworCWlmIChyZWN2X2N0eC0+c3RhdGUgPT0gTlhfSE9TVF9DVFhfU1RBVEVfQUNUSVZFKQorCQlyY29kZSA9IG5ldHhlbl9pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQkJTlhIQUxfVkVSU0lPTiwKKwkJCQlyZWN2X2N0eC0+Y29udGV4dF9pZCwKKwkJCQltdHUsCisJCQkJMCwKKwkJCQlOWF9DRFJQX0NNRF9TRVRfTVRVKTsKKworCXJldHVybiByY29kZTsKK30KKworc3RhdGljIGludAorbnhfZndfY21kX2NyZWF0ZV9yeF9jdHgoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXZvaWQgKmFkZHI7CisJbnhfaG9zdHJxX3J4X2N0eF90ICpwcnE7CisJbnhfY2FyZHJzcF9yeF9jdHhfdCAqcHJzcDsKKwlueF9ob3N0cnFfcmRzX3JpbmdfdCAqcHJxX3JkczsKKwlueF9ob3N0cnFfc2RzX3JpbmdfdCAqcHJxX3NkczsKKwlueF9jYXJkcnNwX3Jkc19yaW5nX3QgKnByc3BfcmRzOworCW54X2NhcmRyc3Bfc2RzX3JpbmdfdCAqcHJzcF9zZHM7CisJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCisJZG1hX2FkZHJfdCBob3N0cnFfcGh5c19hZGRyLCBjYXJkcnNwX3BoeXNfYWRkcjsKKwl1NjQgcGh5c19hZGRyOworCisJaW50IGksIG5yZHNfcmluZ3MsIG5zZHNfcmluZ3M7CisJc2l6ZV90IHJxX3NpemUsIHJzcF9zaXplOworCXUzMiBjYXAsIHJlZzsKKworCWludCBlcnI7CisKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbMF07CisKKwkvKiBvbmx5IG9uZSBzZHMgcmluZyBmb3Igbm93ICovCisJbnJkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7CisJbnNkc19yaW5ncyA9IDE7CisKKwlycV9zaXplID0KKwkJU0laRU9GX0hPU1RSUV9SWChueF9ob3N0cnFfcnhfY3R4X3QsIG5yZHNfcmluZ3MsIG5zZHNfcmluZ3MpOworCXJzcF9zaXplID0KKwkJU0laRU9GX0NBUkRSU1BfUlgobnhfY2FyZHJzcF9yeF9jdHhfdCwgbnJkc19yaW5ncywgbnNkc19yaW5ncyk7CisKKwlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQlycV9zaXplLCAmaG9zdHJxX3BoeXNfYWRkcik7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcHJxID0gKG54X2hvc3RycV9yeF9jdHhfdCAqKWFkZHI7CisKKwlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCXJzcF9zaXplLCAmY2FyZHJzcF9waHlzX2FkZHIpOworCWlmIChhZGRyID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9ycTsKKwl9CisJcHJzcCA9IChueF9jYXJkcnNwX3J4X2N0eF90ICopYWRkcjsKKworCXBycS0+aG9zdF9yc3BfZG1hX2FkZHIgPSBjcHVfdG9fbGU2NChjYXJkcnNwX3BoeXNfYWRkcik7CisKKwljYXAgPSAoTlhfQ0FQMF9MRUdBQ1lfQ09OVEVYVCB8IE5YX0NBUDBfTEVHQUNZX01OKTsKKwljYXAgfD0gKE5YX0NBUDBfSlVNQk9fQ09OVElHVU9VUyB8IE5YX0NBUDBfTFJPX0NPTlRJR1VPVVMpOworCisJcHJxLT5jYXBhYmlsaXRpZXNbMF0gPSBjcHVfdG9fbGUzMihjYXApOworCXBycS0+aG9zdF9pbnRfY3JiX21vZGUgPQorCQljcHVfdG9fbGUzMihOWF9IT1NUX0lOVF9DUkJfTU9ERV9TSEFSRUQpOworCXBycS0+aG9zdF9yZHNfY3JiX21vZGUgPQorCQljcHVfdG9fbGUzMihOWF9IT1NUX1JEU19DUkJfTU9ERV9VTklRVUUpOworCisJcHJxLT5udW1fcmRzX3JpbmdzID0gY3B1X3RvX2xlMTYobnJkc19yaW5ncyk7CisJcHJxLT5udW1fc2RzX3JpbmdzID0gY3B1X3RvX2xlMTYobnNkc19yaW5ncyk7CisJcHJxLT5yZHNfcmluZ19vZmZzZXQgPSAwOworCXBycS0+c2RzX3Jpbmdfb2Zmc2V0ID0gcHJxLT5yZHNfcmluZ19vZmZzZXQgKworCQkoc2l6ZW9mKG54X2hvc3RycV9yZHNfcmluZ190KSAqIG5yZHNfcmluZ3MpOworCisJcHJxX3JkcyA9IChueF9ob3N0cnFfcmRzX3JpbmdfdCAqKShwcnEtPmRhdGEgKyBwcnEtPnJkc19yaW5nX29mZnNldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJkc19yaW5nczsgaSsrKSB7CisKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tpXTsKKworCQlwcnFfcmRzW2ldLmhvc3RfcGh5c19hZGRyID0gY3B1X3RvX2xlNjQocmRzX3JpbmctPnBoeXNfYWRkcik7CisJCXBycV9yZHNbaV0ucmluZ19zaXplID0gY3B1X3RvX2xlMzIocmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJcHJxX3Jkc1tpXS5yaW5nX2tpbmQgPSBjcHVfdG9fbGUzMihpKTsKKwkJcHJxX3Jkc1tpXS5idWZmX3NpemUgPSBjcHVfdG9fbGU2NChyZHNfcmluZy0+ZG1hX3NpemUpOworCX0KKworCXBycV9zZHMgPSAobnhfaG9zdHJxX3Nkc19yaW5nX3QgKikocHJxLT5kYXRhICsgcHJxLT5zZHNfcmluZ19vZmZzZXQpOworCisJcHJxX3Nkc1swXS5ob3N0X3BoeXNfYWRkciA9CisJCWNwdV90b19sZTY0KHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKKwlwcnFfc2RzWzBdLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KTsKKwkvKiBvbmx5IG9uZSBtc2l4IHZlY3RvciBmb3Igbm93ICovCisJcHJxX3Nkc1swXS5tc2lfaW5kZXggPSBjcHVfdG9fbGUzMigwKTsKKworCS8qIG5vdyBieXRlc3dhcCBvZmZzZXRzICovCisJcHJxLT5yZHNfcmluZ19vZmZzZXQgPSBjcHVfdG9fbGUzMihwcnEtPnJkc19yaW5nX29mZnNldCk7CisJcHJxLT5zZHNfcmluZ19vZmZzZXQgPSBjcHVfdG9fbGUzMihwcnEtPnNkc19yaW5nX29mZnNldCk7CisKKwlwaHlzX2FkZHIgPSBob3N0cnFfcGh5c19hZGRyOworCWVyciA9IG5ldHhlbl9pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCU5YSEFMX1ZFUlNJT04sCisJCQkodTMyKShwaHlzX2FkZHIgPj4gMzIpLAorCQkJKHUzMikocGh5c19hZGRyICYgMHhmZmZmZmZmZiksCisJCQlycV9zaXplLAorCQkJTlhfQ0RSUF9DTURfQ1JFQVRFX1JYX0NUWCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiRmFpbGVkIHRvIGNyZWF0ZSByeCBjdHggaW4gZmlybXdhcmUlZFxuIiwgZXJyKTsKKwkJZ290byBvdXRfZnJlZV9yc3A7CisJfQorCisKKwlwcnNwX3JkcyA9ICgobnhfY2FyZHJzcF9yZHNfcmluZ190ICopCisJCQkgJnByc3AtPmRhdGFbcHJzcC0+cmRzX3Jpbmdfb2Zmc2V0XSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGUzMl90b19jcHUocHJzcC0+bnVtX3Jkc19yaW5ncyk7IGkrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW2ldOworCisJCXJlZyA9IGxlMzJfdG9fY3B1KHByc3BfcmRzW2ldLmhvc3RfcHJvZHVjZXJfY3JiKTsKKwkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CisJfQorCisJcHJzcF9zZHMgPSAoKG54X2NhcmRyc3Bfc2RzX3JpbmdfdCAqKQorCQkJJnByc3AtPmRhdGFbcHJzcC0+c2RzX3Jpbmdfb2Zmc2V0XSk7CisJcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbMF0uaG9zdF9jb25zdW1lcl9jcmIpOworCXJlY3ZfY3R4LT5jcmJfc3RzX2NvbnN1bWVyID0gTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApOworCisJcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbMF0uaW50ZXJydXB0X2NyYik7CisJYWRhcHRlci0+Y3JiX2ludHJfbWFzayA9IE5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKTsKKworCXJlY3ZfY3R4LT5zdGF0ZSA9IGxlMzJfdG9fY3B1KHByc3AtPmhvc3RfY3R4X3N0YXRlKTsKKwlyZWN2X2N0eC0+Y29udGV4dF9pZCA9IGxlMTZfdG9fY3B1KHByc3AtPmNvbnRleHRfaWQpOworCXJlY3ZfY3R4LT52aXJ0X3BvcnQgPSBsZTE2X3RvX2NwdShwcnNwLT52aXJ0X3BvcnQpOworCitvdXRfZnJlZV9yc3A6CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCByc3Bfc2l6ZSwgcHJzcCwgY2FyZHJzcF9waHlzX2FkZHIpOworb3V0X2ZyZWVfcnE6CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBycV9zaXplLCBwcnEsIGhvc3RycV9waHlzX2FkZHIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCitueF9md19jbWRfZGVzdHJveV9yeF9jdHgoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFswXTsKKworCWlmIChuZXR4ZW5faXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlOWEhBTF9WRVJTSU9OLAorCQkJcmVjdl9jdHgtPmNvbnRleHRfaWQsCisJCQlOWF9ERVNUUk9ZX0NUWF9SRVNFVCwKKwkJCTAsCisJCQlOWF9DRFJQX0NNRF9ERVNUUk9ZX1JYX0NUWCkpIHsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiJXM6IEZhaWxlZCB0byBkZXN0cm95IHJ4IGN0eCBpbiBmaXJtd2FyZVxuIiwKKwkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCX0KK30KKworc3RhdGljIGludAorbnhfZndfY21kX2NyZWF0ZV90eF9jdHgoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCW54X2hvc3RycV90eF9jdHhfdAkqcHJxOworCW54X2hvc3RycV9jZHNfcmluZ190CSpwcnFfY2RzOworCW54X2NhcmRyc3BfdHhfY3R4X3QJKnByc3A7CisJdm9pZAkqcnFfYWRkciwgKnJzcF9hZGRyOworCXNpemVfdAlycV9zaXplLCByc3Bfc2l6ZTsKKwl1MzIJdGVtcDsKKwlpbnQJZXJyID0gMDsKKwl1NjQJb2Zmc2V0LCBwaHlzX2FkZHI7CisJZG1hX2FkZHJfdAlycV9waHlzX2FkZHIsIHJzcF9waHlzX2FkZHI7CisKKwlycV9zaXplID0gU0laRU9GX0hPU1RSUV9UWChueF9ob3N0cnFfdHhfY3R4X3QpOworCXJxX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQlycV9zaXplLCAmcnFfcGh5c19hZGRyKTsKKwlpZiAoIXJxX2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnNwX3NpemUgPSBTSVpFT0ZfQ0FSRFJTUF9UWChueF9jYXJkcnNwX3R4X2N0eF90KTsKKwlyc3BfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCXJzcF9zaXplLCAmcnNwX3BoeXNfYWRkcik7CisJaWYgKCFyc3BfYWRkcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX3JxOworCX0KKworCW1lbXNldChycV9hZGRyLCAwLCBycV9zaXplKTsKKwlwcnEgPSAobnhfaG9zdHJxX3R4X2N0eF90ICopcnFfYWRkcjsKKworCW1lbXNldChyc3BfYWRkciwgMCwgcnNwX3NpemUpOworCXByc3AgPSAobnhfY2FyZHJzcF90eF9jdHhfdCAqKXJzcF9hZGRyOworCisJcHJxLT5ob3N0X3JzcF9kbWFfYWRkciA9IGNwdV90b19sZTY0KHJzcF9waHlzX2FkZHIpOworCisJdGVtcCA9IChOWF9DQVAwX0xFR0FDWV9DT05URVhUIHwgTlhfQ0FQMF9MRUdBQ1lfTU4gfCBOWF9DQVAwX0xTTyk7CisJcHJxLT5jYXBhYmlsaXRpZXNbMF0gPSBjcHVfdG9fbGUzMih0ZW1wKTsKKworCXBycS0+aG9zdF9pbnRfY3JiX21vZGUgPQorCQljcHVfdG9fbGUzMihOWF9IT1NUX0lOVF9DUkJfTU9ERV9TSEFSRUQpOworCisJcHJxLT5pbnRlcnJ1cHRfY3RsID0gMDsKKwlwcnEtPm1zaV9pbmRleCA9IDA7CisKKwlwcnEtPmR1bW15X2RtYV9hZGRyID0gY3B1X3RvX2xlNjQoYWRhcHRlci0+ZHVtbXlfZG1hLnBoeXNfYWRkcik7CisKKwlvZmZzZXQgPSBhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIrc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpOworCXBycS0+Y21kX2NvbnNfZG1hX2FkZHIgPSBjcHVfdG9fbGU2NChvZmZzZXQpOworCisJcHJxX2NkcyA9ICZwcnEtPmNkc19yaW5nOworCisJcHJxX2Nkcy0+aG9zdF9waHlzX2FkZHIgPQorCQljcHVfdG9fbGU2NChhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKKworCXBycV9jZHMtPnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKworCXBoeXNfYWRkciA9IHJxX3BoeXNfYWRkcjsKKwllcnIgPSBuZXR4ZW5faXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlOWEhBTF9WRVJTSU9OLAorCQkJKHUzMikocGh5c19hZGRyID4+IDMyKSwKKwkJCSgodTMyKXBoeXNfYWRkciAmIDB4ZmZmZmZmZmYpLAorCQkJcnFfc2l6ZSwKKwkJCU5YX0NEUlBfQ01EX0NSRUFURV9UWF9DVFgpOworCisJaWYgKGVyciA9PSBOWF9SQ09ERV9TVUNDRVNTKSB7CisJCXRlbXAgPSBsZTMyX3RvX2NwdShwcnNwLT5jZHNfcmluZy5ob3N0X3Byb2R1Y2VyX2NyYik7CisJCWFkYXB0ZXItPmNyYl9hZGRyX2NtZF9wcm9kdWNlciA9CisJCQlORVRYRU5fTklDX1JFRyh0ZW1wIC0gMHgyMDApOworI2lmIDAKKwkJYWRhcHRlci0+dHhfc3RhdGUgPQorCQkJbGUzMl90b19jcHUocHJzcC0+aG9zdF9jdHhfc3RhdGUpOworI2VuZGlmCisJCWFkYXB0ZXItPnR4X2NvbnRleHRfaWQgPQorCQkJbGUxNl90b19jcHUocHJzcC0+Y29udGV4dF9pZCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkZhaWxlZCB0byBjcmVhdGUgdHggY3R4IGluIGZpcm13YXJlJWRcbiIsIGVycik7CisJCWVyciA9IC1FSU87CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCByc3Bfc2l6ZSwgcnNwX2FkZHIsIHJzcF9waHlzX2FkZHIpOworCitvdXRfZnJlZV9ycToKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJxX3NpemUsIHJxX2FkZHIsIHJxX3BoeXNfYWRkcik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorbnhfZndfY21kX2Rlc3Ryb3lfdHhfY3R4KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAobmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJTlhIQUxfVkVSU0lPTiwKKwkJCWFkYXB0ZXItPnR4X2NvbnRleHRfaWQsCisJCQlOWF9ERVNUUk9ZX0NUWF9SRVNFVCwKKwkJCTAsCisJCQlOWF9DRFJQX0NNRF9ERVNUUk9ZX1RYX0NUWCkpIHsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiJXM6IEZhaWxlZCB0byBkZXN0cm95IHR4IGN0eCBpbiBmaXJtd2FyZVxuIiwKKwkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCX0KK30KKworc3RhdGljIHU2NCBjdHhfYWRkcl9zaWdfcmVnc1tdWzNdID0geworCXtORVRYRU5fTklDX1JFRygweDE4OCksIE5FVFhFTl9OSUNfUkVHKDB4MThjKSwgTkVUWEVOX05JQ19SRUcoMHgxYzApfSwKKwl7TkVUWEVOX05JQ19SRUcoMHgxOTApLCBORVRYRU5fTklDX1JFRygweDE5NCksIE5FVFhFTl9OSUNfUkVHKDB4MWM0KX0sCisJe05FVFhFTl9OSUNfUkVHKDB4MTk4KSwgTkVUWEVOX05JQ19SRUcoMHgxOWMpLCBORVRYRU5fTklDX1JFRygweDFjOCl9LAorCXtORVRYRU5fTklDX1JFRygweDFhMCksIE5FVFhFTl9OSUNfUkVHKDB4MWE0KSwgTkVUWEVOX05JQ19SRUcoMHgxY2MpfQorfTsKKworI2RlZmluZSBDUkJfQ1RYX0FERFJfUkVHX0xPKEZVTkNfSUQpCShjdHhfYWRkcl9zaWdfcmVnc1tGVU5DX0lEXVswXSkKKyNkZWZpbmUgQ1JCX0NUWF9BRERSX1JFR19ISShGVU5DX0lEKQkoY3R4X2FkZHJfc2lnX3JlZ3NbRlVOQ19JRF1bMl0pCisjZGVmaW5lIENSQl9DVFhfU0lHTkFUVVJFX1JFRyhGVU5DX0lEKQkoY3R4X2FkZHJfc2lnX3JlZ3NbRlVOQ19JRF1bMV0pCisKKyNkZWZpbmUgbG93ZXIzMih4KQkoKHUzMikoKHgpICYgMHhmZmZmZmZmZikpCisjZGVmaW5lIHVwcGVyMzIoeCkJKCh1MzIpKCgodTY0KSh4KSA+PiAzMikgJiAweGZmZmZmZmZmKSkKKworc3RhdGljIHN0cnVjdCBuZXR4ZW5fcmVjdl9jcmIgcmVjdl9jcmJfcmVnaXN0ZXJzW10gPSB7CisJLyogSW5zdGFuY2UgMCAqLworCXsKKwkJLyogY3JiX3Jjdl9wcm9kdWNlcjogKi8KKwkJeworCQkJTkVUWEVOX05JQ19SRUcoMHgxMDApLAorCQkJLyogSnVtYm8gZnJhbWVzICovCisJCQlORVRYRU5fTklDX1JFRygweDExMCksCisJCQkvKiBMUk8gKi8KKwkJCU5FVFhFTl9OSUNfUkVHKDB4MTIwKQorCQl9LAorCQkvKiBjcmJfc3RzX2NvbnN1bWVyOiAqLworCQlORVRYRU5fTklDX1JFRygweDEzOCksCisJfSwKKwkvKiBJbnN0YW5jZSAxICovCisJeworCQkvKiBjcmJfcmN2X3Byb2R1Y2VyOiAqLworCQl7CisJCQlORVRYRU5fTklDX1JFRygweDE0NCksCisJCQkvKiBKdW1ibyBmcmFtZXMgKi8KKwkJCU5FVFhFTl9OSUNfUkVHKDB4MTU0KSwKKwkJCS8qIExSTyAqLworCQkJTkVUWEVOX05JQ19SRUcoMHgxNjQpCisJCX0sCisJCS8qIGNyYl9zdHNfY29uc3VtZXI6ICovCisJCU5FVFhFTl9OSUNfUkVHKDB4MTdjKSwKKwl9LAorCS8qIEluc3RhbmNlIDIgKi8KKwl7CisJCS8qIGNyYl9yY3ZfcHJvZHVjZXI6ICovCisJCXsKKwkJCU5FVFhFTl9OSUNfUkVHKDB4MWQ4KSwKKwkJCS8qIEp1bWJvIGZyYW1lcyAqLworCQkJTkVUWEVOX05JQ19SRUcoMHgxZjgpLAorCQkJLyogTFJPICovCisJCQlORVRYRU5fTklDX1JFRygweDIwOCkKKwkJfSwKKwkJLyogY3JiX3N0c19jb25zdW1lcjogKi8KKwkJTkVUWEVOX05JQ19SRUcoMHgyMjApLAorCX0sCisJLyogSW5zdGFuY2UgMyAqLworCXsKKwkJLyogY3JiX3Jjdl9wcm9kdWNlcjogKi8KKwkJeworCQkJTkVUWEVOX05JQ19SRUcoMHgyMmMpLAorCQkJLyogSnVtYm8gZnJhbWVzICovCisJCQlORVRYRU5fTklDX1JFRygweDIzYyksCisJCQkvKiBMUk8gKi8KKwkJCU5FVFhFTl9OSUNfUkVHKDB4MjRjKQorCQl9LAorCQkvKiBjcmJfc3RzX2NvbnN1bWVyOiAqLworCQlORVRYRU5fTklDX1JFRygweDI2NCksCisJfSwKK307CisKK3N0YXRpYyBpbnQKK25ldHhlbl9pbml0X29sZF9jdHgoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKKwlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJaW50IGN0eCwgcmluZzsKKwlpbnQgZnVuY19pZCA9IGFkYXB0ZXItPnBvcnRudW07CisKKwlhZGFwdGVyLT5jdHhfZGVzYy0+Y21kX3JpbmdfYWRkciA9CisJCWNwdV90b19sZTY0KGFkYXB0ZXItPmFody5jbWRfZGVzY19waHlzX2FkZHIpOworCWFkYXB0ZXItPmN0eF9kZXNjLT5jbWRfcmluZ19zaXplID0KKwkJY3B1X3RvX2xlMzIoYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOworCisJZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKKwkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKKworCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCisJCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19hZGRyID0KKwkJCQljcHVfdG9fbGU2NChyZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX3NpemUgPQorCQkJCWNwdV90b19sZTMyKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCk7CisJCX0KKwkJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX2FkZHIgPQorCQkJY3B1X3RvX2xlNjQocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOworCQlhZGFwdGVyLT5jdHhfZGVzYy0+c3RzX3Jpbmdfc2l6ZSA9CisJCQljcHVfdG9fbGUzMihhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCk7CisJfQorCisJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfQ1RYX0FERFJfUkVHX0xPKGZ1bmNfaWQpLAorCQkJbG93ZXIzMihhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIpKTsKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9DVFhfQUREUl9SRUdfSEkoZnVuY19pZCksCisJCQl1cHBlcjMyKGFkYXB0ZXItPmN0eF9kZXNjX3BoeXNfYWRkcikpOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX0NUWF9TSUdOQVRVUkVfUkVHKGZ1bmNfaWQpLAorCQkJTkVUWEVOX0NUWF9TSUdOQVRVUkUgfCBmdW5jX2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQzMl90IHN3X2ludF9tYXNrWzRdID0geworCUNSQl9TV19JTlRfTUFTS18wLCBDUkJfU1dfSU5UX01BU0tfMSwKKwlDUkJfU1dfSU5UX01BU0tfMiwgQ1JCX1NXX0lOVF9NQVNLXzMKK307CisKK2ludCBuZXR4ZW5fYWxsb2NfaHdfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0eGVuX2hhcmR3YXJlX2NvbnRleHQgKmh3ID0gJmFkYXB0ZXItPmFodzsKKwl1MzIgc3RhdGUgPSAwOworCXZvaWQgKmFkZHI7CisJaW50IGVyciA9IDA7CisJaW50IGN0eCwgcmluZzsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CisJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCisJZXJyID0gbmV0eGVuX3JlY2VpdmVfcGVnX3JlYWR5KGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSY3YgUGVnIGluaXRpYWxpemF0aW9uIG5vdCBjb21wbGV0ZToleC5cbiIsCisJCQkJc3RhdGUpOworCQlyZXR1cm4gZXJyOworCX0KKworCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpICsgc2l6ZW9mKHVpbnQzMl90KSwKKwkJCSZhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIpOworCisJaWYgKGFkZHIgPT0gTlVMTCkgeworCQlEUFJJTlRLKEVSUiwgImZhaWxlZCB0byBhbGxvY2F0ZSBodyBjb250ZXh0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChhZGRyLCAwLCBzaXplb2Yoc3RydWN0IG5ldHhlbl9yaW5nX2N0eCkpOworCWFkYXB0ZXItPmN0eF9kZXNjID0gKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHggKilhZGRyOworCWFkYXB0ZXItPmN0eF9kZXNjLT5jdHhfaWQgPSBjcHVfdG9fbGUzMihhZGFwdGVyLT5wb3J0bnVtKTsKKwlhZGFwdGVyLT5jdHhfZGVzYy0+Y21kX2NvbnN1bWVyX29mZnNldCA9CisJCWNwdV90b19sZTY0KGFkYXB0ZXItPmN0eF9kZXNjX3BoeXNfYWRkciArCisJCQlzaXplb2Yoc3RydWN0IG5ldHhlbl9yaW5nX2N0eCkpOworCWFkYXB0ZXItPmNtZF9jb25zdW1lciA9CisJCShfX2xlMzIgKikoKChjaGFyICopYWRkcikgKyBzaXplb2Yoc3RydWN0IG5ldHhlbl9yaW5nX2N0eCkpOworCisJLyogY21kIGRlc2MgcmluZyAqLworCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgKgorCQkJYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQsCisJCQkmaHctPmNtZF9kZXNjX3BoeXNfYWRkcik7CisKKwlpZiAoYWRkciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGRlc2MgcmluZ1xuIiwKKwkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaHctPmNtZF9kZXNjX2hlYWQgPSAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopYWRkcjsKKworCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7CisJCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eF07CisKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQkJLyogcnggZGVzYyByaW5nICovCisJCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQkJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCVJDVl9ERVNDX1JJTkdTSVpFLAorCQkJCQkmcmRzX3JpbmctPnBoeXNfYWRkcik7CisJCQlpZiAoYWRkciA9PSBOVUxMKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgdG8gYWxsb2NhdGUgcnggIgorCQkJCQkiZGVzYyByaW5nWyVkXVxuIiwKKwkJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgcmluZyk7CisJCQkJZXJyID0gLUVOT01FTTsKKwkJCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJCX0KKwkJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSAoc3RydWN0IHJjdl9kZXNjICopYWRkcjsKKworCQkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKKwkJCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9CisJCQkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1thZGFwdGVyLT5wb3J0bnVtXS4KKwkJCQkJY3JiX3Jjdl9wcm9kdWNlcltyaW5nXTsKKwkJfQorCisJCS8qIHN0YXR1cyBkZXNjIHJpbmcgKi8KKwkJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJU1RBVFVTX0RFU0NfUklOR1NJWkUsCisJCQkJJnJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKKwkJaWYgKGFkZHIgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgdG8gYWxsb2NhdGUgc3RzIGRlc2MgcmluZ1xuIiwKKwkJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKwkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkID0gKHN0cnVjdCBzdGF0dXNfZGVzYyAqKWFkZHI7CisKKwkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKKwkJCXJlY3ZfY3R4LT5jcmJfc3RzX2NvbnN1bWVyID0KKwkJCQlyZWN2X2NyYl9yZWdpc3RlcnNbYWRhcHRlci0+cG9ydG51bV0uCisJCQkJY3JiX3N0c19jb25zdW1lcjsKKwl9CisKKwlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPj0gNCkgeworCQlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IElOVFJfU0NIRU1FX1BFUlBPUlQ7CisJCWFkYXB0ZXItPm1zaV9tb2RlID0gTVNJX01PREVfTVVMVElGVU5DOworCisJCWVyciA9IG54X2Z3X2NtZF9jcmVhdGVfcnhfY3R4KGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCWVyciA9IG54X2Z3X2NtZF9jcmVhdGVfdHhfY3R4KGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJfSBlbHNlIHsKKworCQlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJCUNSQl9OSUNfQ0FQQUJJTElUSUVTX0ZXKTsKKwkJYWRhcHRlci0+bXNpX21vZGUgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKKwkJCQlDUkJfTklDX01TSV9NT0RFX0ZXKTsKKwkJYWRhcHRlci0+Y3JiX2ludHJfbWFzayA9IHN3X2ludF9tYXNrW2FkYXB0ZXItPnBvcnRudW1dOworCisJCWVyciA9IG5ldHhlbl9pbml0X29sZF9jdHgoYWRhcHRlcik7CisJCWlmIChlcnIpIHsKKwkJCW5ldHhlbl9mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CisJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCWludCBjdHgsIHJpbmc7CisKKwlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPj0gNCkgeworCQlueF9md19jbWRfZGVzdHJveV90eF9jdHgoYWRhcHRlcik7CisJCW54X2Z3X2NtZF9kZXN0cm95X3J4X2N0eChhZGFwdGVyKTsKKwl9CisKKwlpZiAoYWRhcHRlci0+Y3R4X2Rlc2MgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpICsKKwkJCQlzaXplb2YodWludDMyX3QpLAorCQkJCWFkYXB0ZXItPmN0eF9kZXNjLAorCQkJCWFkYXB0ZXItPmN0eF9kZXNjX3BoeXNfYWRkcik7CisJCWFkYXB0ZXItPmN0eF9kZXNjID0gTlVMTDsKKwl9CisKKwlpZiAoYWRhcHRlci0+YWh3LmNtZF9kZXNjX2hlYWQgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgKgorCQkJCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50LAorCQkJCWFkYXB0ZXItPmFody5jbWRfZGVzY19oZWFkLAorCQkJCWFkYXB0ZXItPmFody5jbWRfZGVzY19waHlzX2FkZHIpOworCQlhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCA9IE5VTEw7CisJfQorCisJZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKKwkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKworCQkJaWYgKHJkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgeworCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCVJDVl9ERVNDX1JJTkdTSVpFLAorCQkJCQkJcmRzX3JpbmctPmRlc2NfaGVhZCwKKwkJCQkJCXJkc19yaW5nLT5waHlzX2FkZHIpOworCQkJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSBOVUxMOworCQkJfQorCQl9CisKKwkJaWYgKHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZCAhPSBOVUxMKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFLAorCQkJCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQsCisJCQkJCXJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKKwkJCXJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZCA9IE5VTEw7CisJCX0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwppbmRleCA3MjM0ODdiLi40OGVlMDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCkBAIC05MywxNyArOTMsMjEgQEAKIG5ldHhlbl9uaWNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGZ3X21ham9yID0gMDsKIAl1MzIgZndfbWlub3IgPSAwOwogCXUzMiBmd19idWlsZCA9IDA7CiAKIAlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgMzIpOwogCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQsIDMyKTsKLQlmd19tYWpvciA9IHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsCi0JCQkJCSAgICAgIE5FVFhFTl9GV19WRVJTSU9OX01BSk9SKSk7Ci0JZndfbWlub3IgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAotCQkJCQkgICAgICBORVRYRU5fRldfVkVSU0lPTl9NSU5PUikpOwotCWZ3X2J1aWxkID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgTkVUWEVOX0ZXX1ZFUlNJT05fU1VCKSk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwlmd19tYWpvciA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJCQlORVRYRU5fRldfVkVSU0lPTl9NQUpPUik7CisJZndfbWlub3IgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKKwkJCQkJTkVUWEVOX0ZXX1ZFUlNJT05fTUlOT1IpOworCWZ3X2J1aWxkID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJCU5FVFhFTl9GV19WRVJTSU9OX1NVQik7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwogCXNwcmludGYoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIiVkLiVkLiVkIiwgZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CiAKIAlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wZGV2KSwgMzIpOwpAQCAtMTU5LDkgKzE2MywxNiBAQAogCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzNV80RzoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMkc6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM19SRUZfUUc6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM180X0dCOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfNF9HQl9NTToKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVDoKKwogCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0F1dG9uZWc7CiAJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNDoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19DWDQ6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfQ1g0X0xQOgogCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX1RQOwogCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX1RQOwogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKQEAgLTE3MSwxMiArMTgyLDE3IEBACiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSE1FWjoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVo6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM19JTUVaOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfWEdfTE9NOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfSE1FWjoKIAkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9NSUk7CiAJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfTUlJOwogCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKIAkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAkJYnJlYWs7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwRzoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19TRlBfUExVUzoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19YRlA6CiAJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfRklCUkU7CiAJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfRklCUkU7CiAJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwpAQCAtMzQ5LDE5ICszNjUsMTggQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCV9fdTMyIG1vZGUsICpyZWdzX2J1ZmYgPSBwOwotCXZvaWQgX19pb21lbSAqYWRkcjsKIAlpbnQgaSwgd2luZG93OwogCiAJbWVtc2V0KHAsIDAsIE5FVFhFTl9OSUNfUkVHU19MRU4pOwogCXJlZ3MtPnZlcnNpb24gPSAoMSA8PCAyNCkgfCAoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkIDw8IDE2KSB8CiAJICAgIChhZGFwdGVyLT5wZGV2KS0+ZGV2aWNlOwogCS8qIHdoaWNoIG1vZGUgKi8KLQlORVRYRU5fTklDX0xPQ0tFRF9SRUFEX1JFRyhORVRYRU5fTklVX01PREUsICZyZWdzX2J1ZmZbMF0pOworCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9NT0RFLCAmcmVnc19idWZmWzBdLCA0KTsKIAltb2RlID0gcmVnc19idWZmWzBdOwogCiAJLyogQ29tbW9uIHJlZ2lzdGVycyB0byBhbGwgdGhlIG1vZGVzICovCi0JTkVUWEVOX05JQ19MT0NLRURfUkVBRF9SRUcoTkVUWEVOX05JVV9TVFJBUF9WQUxVRV9TQVZFX0hJR0hFUiwKLQkJCQkgICAmcmVnc19idWZmWzJdKTsKKwlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQlORVRYRU5fTklVX1NUUkFQX1ZBTFVFX1NBVkVfSElHSEVSLCAmcmVnc19idWZmWzJdLCA0KTsKIAkvKiBHQi9YR0IgTW9kZSAqLwogCW1vZGUgPSAobW9kZSAvIDIpIC0gMTsKIAl3aW5kb3cgPSAwOwpAQCAtMzcyLDkgKzM4Nyw5IEBACiAJCQkJd2luZG93ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydCAqCiAJCQkJCU5FVFhFTl9OSUNfUE9SVF9XSU5ET1c7CiAKLQkJCU5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKG5pdV9yZWdpc3RlcnNbbW9kZV0uCi0JCQkJCQkgICByZWdbaSAtIDNdICsgd2luZG93LAotCQkJCQkJICAgJnJlZ3NfYnVmZltpXSk7CisJCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJbml1X3JlZ2lzdGVyc1ttb2RlXS5yZWdbaSAtIDNdICsgd2luZG93LAorCQkJCSZyZWdzX2J1ZmZbaV0sIDQpOwogCQl9CiAKIAl9CkBAIC0zOTgsNyArNDEzLDcgQEAKIAkJCXJldHVybiAhdmFsOwogCQl9CiAJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKLQkJdmFsID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX1hHX1NUQVRFKSk7CisJCXZhbCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfWEdfU1RBVEUpOwogCQlyZXR1cm4gKHZhbCA9PSBYR19MSU5LX1VQKSA/IDAgOiAxOwogCX0KIAlyZXR1cm4gLUVJTzsKQEAgLTQyNyw2ICs0NDIsNyBAQAogCXJldHVybiAwOwogfQogCisjaWYgMAogc3RhdGljIGludAogbmV0eGVuX25pY19zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAogCQkJdTggKiBieXRlcykKQEAgLTQ0Nyw3ICs0NjMsNiBAQAogCQl9CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmbGFzaCB1bmxvY2tlZC4gXG4iLAogCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCWxhc3Rfc2NoZWR1bGVfdGltZSA9IGppZmZpZXM7CiAJCXJldCA9IG5ldHhlbl9mbGFzaF9lcmFzZV9zZWNvbmRhcnkoYWRhcHRlcik7CiAJCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmxhc2ggZXJhc2UgZmFpbGVkLlxuIiwKQEAgLTQ5Nyw2ICs1MTIsNyBAQAogCiAJcmV0dXJuIG5ldHhlbl9yb21fZmFzdF93cml0ZV93b3JkcyhhZGFwdGVyLCBvZmZzZXQsIGJ5dGVzLCBlZXByb20tPmxlbik7CiB9CisjZW5kaWYgLyogMCAqLwogCiBzdGF0aWMgdm9pZAogbmV0eGVuX25pY19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKQEAgLTUwOCw5ICs1MjQsOSBAQAogCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfUkNWX0NUWDsgKytpKSB7CiAJCXJpbmctPnJ4X3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHhbaV0uCi0JCSAgICByY3ZfZGVzY1tSQ1ZfREVTQ19OT1JNQUxfQ1RYSURdLm1heF9yeF9kZXNjX2NvdW50OworCQkgICAgcmRzX3JpbmdzW1JDVl9ERVNDX05PUk1BTF9DVFhJRF0ubWF4X3J4X2Rlc2NfY291bnQ7CiAJCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHhbaV0uCi0JCSAgICByY3ZfZGVzY1tSQ1ZfREVTQ19KVU1CT19DVFhJRF0ubWF4X3J4X2Rlc2NfY291bnQ7CisJCSAgICByZHNfcmluZ3NbUkNWX0RFU0NfSlVNQk9fQ1RYSURdLm1heF9yeF9kZXNjX2NvdW50OwogCX0KIAlyaW5nLT50eF9wZW5kaW5nID0gYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQ7CiAKQEAgLTY1NSw3ICs2NzEsNyBAQAogCWRhdGFfd3JpdHRlbiA9ICh1MzIpMHhhNWE1YTVhNTsKIAogCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIENSQl9TQ1JBVENIUEFEX1RFU1QsIGRhdGFfd3JpdHRlbik7Ci0JZGF0YV9yZWFkID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX1NDUkFUQ0hQQURfVEVTVCkpOworCWRhdGFfcmVhZCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfU0NSQVRDSFBBRF9URVNUKTsKIAlpZiAoZGF0YV93cml0dGVuICE9IGRhdGFfcmVhZCkKIAkJcmV0dXJuIDE7CiAKQEAgLTczNiw2ICs3NTIsMTE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1MzIgbmV0eGVuX25pY19nZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm4gKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpKSAhPSAwOworCisJcmV0dXJuIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pICE9IDA7Cit9CisKK3N0YXRpYyBpbnQgbmV0eGVuX25pY19zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCWlmIChkYXRhKSB7CisJCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKKwkJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwl9IGVsc2UKKwkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IHRoZSBjb2FsZXNjaW5nIHBhcmFtZXRlcnMuIEN1cnJlbnRseSBvbmx5IG5vcm1hbCBpcyBzdXBwb3J0ZWQuCisgKiBJZiByeF9jb2FsZXNjZV91c2VjcyA9PSAwIG9yIHJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID09IDAgdGhlbiBzZXQgdGhlCisgKiBmaXJtd2FyZSBjb2FsZXNjaW5nIHRvIGRlZmF1bHQuCisgKi8KK3N0YXRpYyBpbnQgbmV0eGVuX3NldF9pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZXRoY29hbCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCFOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSogUmV0dXJuIEVycm9yIGlmIHVuc3VwcG9ydGVkIHZhbHVlcyBvcgorCSogdW5zdXBwb3J0ZWQgcGFyYW1ldGVycyBhcmUgc2V0LgorCSovCisJaWYgKGV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzID4gMHhmZmZmIHx8CisJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gMHhmZmZmIHx8CisJCWV0aGNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzID4gMHhmZmZmIHx8CisJCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gMHhmZmZmIHx8CisJCWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSB8fAorCQlldGhjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEgfHwKKwkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3NfaXJxIHx8CisJCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSB8fAorCQlldGhjb2FsLT5zdGF0c19ibG9ja19jb2FsZXNjZV91c2VjcyB8fAorCQlldGhjb2FsLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgfHwKKwkJZXRoY29hbC0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlIHx8CisJCWV0aGNvYWwtPnBrdF9yYXRlX2xvdyB8fAorCQlldGhjb2FsLT5yeF9jb2FsZXNjZV91c2Vjc19sb3cgfHwKKwkJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93IHx8CisJCWV0aGNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzX2xvdyB8fAorCQlldGhjb2FsLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgfHwKKwkJZXRoY29hbC0+cGt0X3JhdGVfaGlnaCB8fAorCQlldGhjb2FsLT5yeF9jb2FsZXNjZV91c2Vjc19oaWdoIHx8CisJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2ggfHwKKwkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3NfaGlnaCB8fAorCQlldGhjb2FsLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgfHwKKwkJIWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzKSB7CisJCWFkYXB0ZXItPmNvYWwuZmxhZ3MgPSBORVRYRU5fTklDX0lOVFJfREVGQVVMVDsKKwkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzID0KKwkJCU5FVFhFTl9ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfVElNRV9VUzsKKwkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF9wYWNrZXRzID0KKwkJCU5FVFhFTl9ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfUEFDS0VUUzsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5jb2FsLmZsYWdzID0gMDsKKwkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzID0KKwkJZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7CisJCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0cyA9CisJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCX0KKwlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3RpbWVfdXMgPSBldGhjb2FsLT50eF9jb2FsZXNjZV91c2VjczsKKwlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3BhY2tldHMgPQorCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCisJbmV0eGVuX2NvbmZpZ19pbnRyX2NvYWxlc2NlKGFkYXB0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmV0eGVuX2dldF9pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZXRoY29hbCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCFOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlldGhjb2FsLT5yeF9jb2FsZXNjZV91c2VjcyA9IGFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfdGltZV91czsKKwlldGhjb2FsLT50eF9jb2FsZXNjZV91c2VjcyA9IGFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfdGltZV91czsKKwlldGhjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9CisJCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0czsKKwlldGhjb2FsLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9CisJCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfcGFja2V0czsKKworCXJldHVybiAwOworfQorCiBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0eGVuX25pY19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gbmV0eGVuX25pY19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IG5ldHhlbl9uaWNfc2V0X3NldHRpbmdzLApAQCAtNzQ1LDE3ICs4NzIsMjIgQEAKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiA9IG5ldHhlbl9uaWNfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20gPSBuZXR4ZW5fbmljX2dldF9lZXByb20sCisjaWYgMAogCS5zZXRfZWVwcm9tID0gbmV0eGVuX25pY19zZXRfZWVwcm9tLAorI2VuZGlmCiAJLmdldF9yaW5ncGFyYW0gPSBuZXR4ZW5fbmljX2dldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtID0gbmV0eGVuX25pY19nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBuZXR4ZW5fbmljX3NldF9wYXVzZXBhcmFtLAogCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCiAJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5zZXRfdHNvID0gZXRodG9vbF9vcF9zZXRfdHNvLAorCS5nZXRfdHNvID0gbmV0eGVuX25pY19nZXRfdHNvLAorCS5zZXRfdHNvID0gbmV0eGVuX25pY19zZXRfdHNvLAogCS5zZWxmX3Rlc3QgPSBuZXR4ZW5fbmljX2RpYWdfdGVzdCwKIAkuZ2V0X3N0cmluZ3MgPSBuZXR4ZW5fbmljX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG5ldHhlbl9uaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50ID0gbmV0eGVuX2dldF9zc2V0X2NvdW50LAogCS5nZXRfcnhfY3N1bSA9IG5ldHhlbl9uaWNfZ2V0X3J4X2NzdW0sCiAJLnNldF9yeF9jc3VtID0gbmV0eGVuX25pY19zZXRfcnhfY3N1bSwKKwkuZ2V0X2NvYWxlc2NlID0gbmV0eGVuX2dldF9pbnRyX2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UgPSBuZXR4ZW5fc2V0X2ludHJfY29hbGVzY2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAppbmRleCAyNGQwMjdlLi4zY2UxM2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaApAQCAtMTI2LDcgKzEyNiw4IEBACiAJTkVUWEVOX0hXX1BFR1IwX0NSQl9BR1RfQURSLAogCU5FVFhFTl9IV19QRUdSMV9DUkJfQUdUX0FEUiwKIAlORVRYRU5fSFdfUEVHUjJfQ1JCX0FHVF9BRFIsCi0JTkVUWEVOX0hXX1BFR1IzX0NSQl9BR1RfQURSCisJTkVUWEVOX0hXX1BFR1IzX0NSQl9BR1RfQURSLAorCU5FVFhFTl9IV19QRUdONF9DUkJfQUdUX0FEUgogfTsKIAogLyogIEh1YiA1ICovCkBAIC0zMTYsNiArMzE3LDggQEAKIAkoKE5FVFhFTl9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BFR04yX0NSQl9BR1RfQURSKQogI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjMJXAogCSgoTkVUWEVOX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUEVHTjNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdONAlcCisJKChORVRYRU5fSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19QRUdONF9DUkJfQUdUX0FEUikKICNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05DCVwKIAkoKE5FVFhFTl9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BFR05DX0NSQl9BR1RfQURSKQogI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHUjAJXApAQCAtNDM1LDYgKzQzOCw3IEBACiAjZGVmaW5lIE5FVFhFTl9DUkJfUk9NVVNCCVwKIAlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUk9NVVNCKQogI2RlZmluZSBORVRYRU5fQ1JCX0kyUQkJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX0kyUSkKKyNkZWZpbmUgTkVUWEVOX0NSQl9TTUIJCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9TTUIpCiAjZGVmaW5lIE5FVFhFTl9DUkJfTUFYCQlORVRYRU5fUENJX0NSQl9XSU5ET1coNjQpCiAKICNkZWZpbmUgTkVUWEVOX0NSQl9QQ0lYX0hPU1QJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1BIKQpAQCAtNDQ2LDYgKzQ1MCw3IEBACiAjZGVmaW5lIE5FVFhFTl9DUkJfUEVHX05FVF9ECU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9QR05EKQogI2RlZmluZSBORVRYRU5fQ1JCX1BFR19ORVRfSQlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdOSSkKICNkZWZpbmUgTkVUWEVOX0NSQl9ERFJfTkVUCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9NTikKKyNkZWZpbmUgTkVUWEVOX0NSQl9RRFJfTkVUCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9TTikKIAogI2RlZmluZSBORVRYRU5fQ1JCX1BDSVhfTUQJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1BTKQogI2RlZmluZSBORVRYRU5fQ1JCX1BDSUUJCU5FVFhFTl9DUkJfUENJWF9NRApAQCAtNDYxLDExICs0NjYsMjAgQEAKICNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GMiAgICAgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0YyKSkKICNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YzICAgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjMpKQogI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0YzICAgICAoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjMpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjQgICAoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVU19GNCkpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0tfRjQgICAgIChORVRYRU5fUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTS19GNCkpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GNSAgIChORVRYRU5fUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTX0Y1KSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GNSAgICAgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0Y1KSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y2ICAgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjYpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0Y2ICAgICAoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjYpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjcgICAoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVU19GNykpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0tfRjcgICAgIChORVRYRU5fUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTS19GNykpCiAKICNkZWZpbmUgTkVUWEVOX1BDSV9NQVBTSVpFCTEyOAogI2RlZmluZSBORVRYRU5fUENJX0REUl9ORVQJKDB4MDAwMDAwMDBVTCkKICNkZWZpbmUgTkVUWEVOX1BDSV9RRFJfTkVUCSgweDA0MDAwMDAwVUwpCiAjZGVmaW5lIE5FVFhFTl9QQ0lfRElSRUNUX0NSQgkoMHgwNDQwMDAwMFVMKQorI2RlZmluZSBORVRYRU5fUENJX0NBTVFNCSgweDA0ODAwMDAwVUwpCiAjZGVmaW5lIE5FVFhFTl9QQ0lfQ0FNUU1fTUFYCSgweDA0ZmZmZmZmVUwpCiAjZGVmaW5lIE5FVFhFTl9QQ0lfT0NNMAkJKDB4MDUwMDAwMDBVTCkKICNkZWZpbmUgTkVUWEVOX1BDSV9PQ00wX01BWAkoMHgwNTBmZmZmZlVMKQpAQCAtNDc0LDYgKzQ4OCwxMyBAQAogI2RlZmluZSBORVRYRU5fUENJX0NSQlNQQUNFCSgweDA2MDAwMDAwVUwpCiAjZGVmaW5lIE5FVFhFTl9QQ0lfMTI4TUJfU0laRQkoMHgwODAwMDAwMFVMKQogI2RlZmluZSBORVRYRU5fUENJXzMyTUJfU0laRQkoMHgwMjAwMDAwMFVMKQorI2RlZmluZSBORVRYRU5fUENJXzJNQl9TSVpFCSgweDAwMjAwMDAwVUwpCisKKyNkZWZpbmUgTkVUWEVOX1BDSV9NTl8yTQkoMCkKKyNkZWZpbmUgTkVUWEVOX1BDSV9NU18yTQkoMHg4MDAwMCkKKyNkZWZpbmUgTkVUWEVOX1BDSV9PQ00wXzJNCSgweDAwMGMwMDAwVUwpCisjZGVmaW5lIE5FVFhFTl9QQ0lfQ0FNUU1fMk1fQkFTRQkoMHgwMDBmZjgwMFVMKQorI2RlZmluZSBORVRYRU5fUENJX0NBTVFNXzJNX0VORAkJKDB4MDQ4MDA4MDBVTCkKIAogI2RlZmluZSBORVRYRU5fQ1JCX0NBTQlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfQ0FNKQogCkBAIC00ODQsNyArNTA1LDE0IEBACiAjZGVmaW5lIE5FVFhFTl9BRERSX09DTTEJKDB4MDAwMDAwMDIwMDQwMDAwMFVMTCkKICNkZWZpbmUgTkVUWEVOX0FERFJfT0NNMV9NQVgJKDB4MDAwMDAwMDIwMDRmZmZmZlVMTCkKICNkZWZpbmUgTkVUWEVOX0FERFJfUURSX05FVAkoMHgwMDAwMDAwMzAwMDAwMDAwVUxMKQotI2RlZmluZSBORVRYRU5fQUREUl9RRFJfTkVUX01BWCAoMHgwMDAwMDAwMzAwM2ZmZmZmVUxMKQorI2RlZmluZSBORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMiAoMHgwMDAwMDAwMzAwM2ZmZmZmVUxMKQorI2RlZmluZSBORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMyAoMHgwMDAwMDAwMzAzZmZmZmZmVUxMKQorCisvKgorICogICBSZWdpc3RlciBvZmZzZXRzIGZvciBNTgorICovCisjZGVmaW5lCU5FVFhFTl9NSVVfQ09OVFJPTAkoMHgwMDApCisjZGVmaW5lCU5FVFhFTl9NSVVfTU5fQ09OVFJPTAkoTkVUWEVOX0NSQl9ERFJfTkVUK05FVFhFTl9NSVVfQ09OVFJPTCkKIAogCS8qIDIwMG1zIGRlbGF5IGluIGVhY2ggbG9vcCAqLwogI2RlZmluZQlORVRYRU5fTklVX1BIWV9XQUlUTEVOCQkyMDAwMDAKQEAgLTU1MCw2ICs1NzgsOSBAQAogI2RlZmluZSBORVRYRU5fTVVMVElDQVNUX0FERFJfSElfMgkoTkVUWEVOX0NSQl9OSVUgKyAweDEwMTgpCiAjZGVmaW5lIE5FVFhFTl9NVUxUSUNBU1RfQUREUl9ISV8zCShORVRYRU5fQ1JCX05JVSArIDB4MTAxYykKIAorI2RlZmluZSBORVRYRU5fVU5JQ0FTVF9BRERSX0JBU0UJKE5FVFhFTl9DUkJfTklVICsgMHgxMDgwKQorI2RlZmluZQlORVRYRU5fTVVMVElDQVNUX0FERFJfQkFTRQkoTkVUWEVOX0NSQl9OSVUgKyAweDExMDApCisKICNkZWZpbmUJTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoSSkJCVwKIAkoTkVUWEVOX0NSQl9OSVUgKyAweDMwMDAwICsgKEkpKjB4MTAwMDApCiAjZGVmaW5lCU5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18xKEkpCQlcCkBAIC02MzAsMTYgKzY2MSw3NiBAQAogI2RlZmluZSBORVRYRU5fTklVX1hHMV9DT05UUk9MX0NIQVJfQ05UCQkoTkVUWEVOX0NSQl9OSVUgKyAweDgwMDU0KQogI2RlZmluZSBORVRYRU5fTklVX1hHMV9QQVVTRV9GUkFNRV9DTlQJCShORVRYRU5fQ1JCX05JVSArIDB4ODAwNTgpCiAKKy8qIFAzIDgwMi4zYXAgKi8KKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NQUNfQ09ORklHXzAoSSkgICAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAwMCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NQUNfQ09ORklHXzEoSSkgICAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAwNCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NQUNfSVBHX0lGRyhJKSAgICAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAwOCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9IQUxGX0RVUExFWF9DVFJMKEkpICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAwYysoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NQVhfRlJBTUVfU0laRShJKSAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAxMCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9URVNUX1JFRyhJKSAgICAgICAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAxYysoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NSUlfTUdNVF9DT05GSUcoSSkgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAyMCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NSUlfTUdNVF9DT01NQU5EKEkpICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAyNCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NSUlfTUdNVF9BRERSKEkpICAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAyOCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NSUlfTUdNVF9DVFJMKEkpICAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAyYysoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NSUlfTUdNVF9TVEFUVVMoSSkgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAzMCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9NSUlfTUdNVF9JTkRJQ0FURShJKSAoTkVUWEVOX0NSQl9OSVUrMHhhMDAzNCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9JTlRFUkZBQ0VfQ1RSTChJKSAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAzOCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9JTlRFUkZBQ0VfU1RBVFVTKEkpICAoTkVUWEVOX0NSQl9OSVUrMHhhMDAzYysoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9TVEFUSU9OX0FERFJfMChJKSAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDA0MCsoSSkqMHgxMDAwMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9BUF9TVEFUSU9OX0FERFJfMShJKSAgICAoTkVUWEVOX0NSQl9OSVUrMHhhMDA0NCsoSSkqMHgxMDAwMCkKKworLyoKKyAqICAgUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgTU4KKyAqLworI2RlZmluZQlNSVVfQ09OVFJPTAkgICAgICAgKDB4MDAwKQorI2RlZmluZSBNSVVfVEVTVF9BR1RfQ1RSTCAgICAgICgweDA5MCkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX0FERFJfTE8gICAoMHgwOTQpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9BRERSX0hJICAgKDB4MDk4KQorI2RlZmluZSBNSVVfVEVTVF9BR1RfV1JEQVRBX0xPICgweDBhMCkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1dSREFUQV9ISSAoMHgwYTQpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9XUkRBVEEoaSkgKDB4MGEwKyg0KihpKSkpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9SRERBVEFfTE8gKDB4MGE4KQorI2RlZmluZSBNSVVfVEVTVF9BR1RfUkREQVRBX0hJICgweDBhYykKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1JEREFUQShpKSAoMHgwYTgrKDQqKGkpKSkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX0FERFJfTUFTSyAweGZmZmZmZmY4CisjZGVmaW5lIE1JVV9URVNUX0FHVF9VUFBFUl9BRERSKG9mZikgKDApCisKKy8qIE1JVV9URVNUX0FHVF9DVFJMIGZsYWdzLiB3b3JrIGZvciBTSVUgYXMgd2VsbCAqLworI2RlZmluZSBNSVVfVEFfQ1RMX1NUQVJUICAgICAgICAxCisjZGVmaW5lIE1JVV9UQV9DVExfRU5BQkxFICAgICAgIDIKKyNkZWZpbmUgTUlVX1RBX0NUTF9XUklURSAgICAgICAgNAorI2RlZmluZSBNSVVfVEFfQ1RMX0JVU1kgICAgICAgICA4CisKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX0NUUkwgICAgICAoMHgwNjApCisjZGVmaW5lIFNJVV9URVNUX0FHVF9BRERSX0xPICAgKDB4MDY0KQorI2RlZmluZSBTSVVfVEVTVF9BR1RfQUREUl9ISSAgICgweDA3OCkKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX1dSREFUQV9MTyAoMHgwNjgpCisjZGVmaW5lIFNJVV9URVNUX0FHVF9XUkRBVEFfSEkgKDB4MDZjKQorI2RlZmluZSBTSVVfVEVTVF9BR1RfV1JEQVRBKGkpICgweDA2OCsoNCooaSkpKQorI2RlZmluZSBTSVVfVEVTVF9BR1RfUkREQVRBX0xPICgweDA3MCkKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX1JEREFUQV9ISSAoMHgwNzQpCisjZGVmaW5lIFNJVV9URVNUX0FHVF9SRERBVEEoaSkgKDB4MDcwKyg0KihpKSkpCisKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX0FERFJfTUFTSyAweDNmZmZmOAorI2RlZmluZSBTSVVfVEVTVF9BR1RfVVBQRVJfQUREUihvZmYpICgob2ZmKT4+MjIpCisKIC8qIFhHIExpbmsgc3RhdHVzICovCiAjZGVmaW5lIFhHX0xJTktfVVAJMHgxMAogI2RlZmluZSBYR19MSU5LX0RPV04JMHgyMAogCisjZGVmaW5lIFhHX0xJTktfVVBfUDMJMHgwMQorI2RlZmluZSBYR19MSU5LX0RPV05fUDMJMHgwMgorI2RlZmluZSBYR19MSU5LX1NUQVRFX1AzX01BU0sgMHhmCisjZGVmaW5lIFhHX0xJTktfU1RBVEVfUDMocGNpZm4sdmFsKSBcCisJKCgodmFsKSA+PiAoKHBjaWZuKSAqIDQpKSAmIFhHX0xJTktfU1RBVEVfUDNfTUFTSykKKwogI2RlZmluZSBORVRYRU5fQ0FNX1JBTV9CQVNFCShORVRYRU5fQ1JCX0NBTSArIDB4MDIwMDApCiAjZGVmaW5lIE5FVFhFTl9DQU1fUkFNKHJlZykJKE5FVFhFTl9DQU1fUkFNX0JBU0UgKyAocmVnKSkKICNkZWZpbmUgTkVUWEVOX0ZXX1ZFUlNJT05fTUFKT1IgKE5FVFhFTl9DQU1fUkFNKDB4MTUwKSkKICNkZWZpbmUgTkVUWEVOX0ZXX1ZFUlNJT05fTUlOT1IgKE5FVFhFTl9DQU1fUkFNKDB4MTU0KSkKICNkZWZpbmUgTkVUWEVOX0ZXX1ZFUlNJT05fU1VCCShORVRYRU5fQ0FNX1JBTSgweDE1OCkpCiAjZGVmaW5lIE5FVFhFTl9ST01fTE9DS19JRAkoTkVUWEVOX0NBTV9SQU0oMHgxMDApKQorI2RlZmluZSBORVRYRU5fQ1JCX1dJTl9MT0NLX0lECShORVRYRU5fQ0FNX1JBTSgweDEyNCkpCiAKICNkZWZpbmUgTkVUWEVOX1BIWV9MT0NLX0lECShORVRYRU5fQ0FNX1JBTSgweDEyMCkpCiAKQEAgLTY1NCwzMCArNzQ1LDcxIEBACiAjZGVmaW5lIFBDSVhfSU5UX1ZFQ1RPUgkJKDB4MTAxMDApCiAjZGVmaW5lIFBDSVhfSU5UX01BU0sJCSgweDEwMTA0KQogCi0jZGVmaW5lIFBDSVhfTU5fV0lORE9XX0YwCSgweDEwMjAwKQotI2RlZmluZSBQQ0lYX01OX1dJTkRPVyhfZikJKFBDSVhfTU5fV0lORE9XX0YwICsgKDB4MjAgKiAoX2YpKSkKLSNkZWZpbmUgUENJWF9NU19XSU5ET1cJCSgweDEwMjA0KQotI2RlZmluZSBQQ0lYX1NOX1dJTkRPV19GMAkoMHgxMDIwOCkKLSNkZWZpbmUgUENJWF9TTl9XSU5ET1coX2YpCShQQ0lYX1NOX1dJTkRPV19GMCArICgweDIwICogKF9mKSkpCiAjZGVmaW5lIFBDSVhfQ1JCX1dJTkRPVwkJKDB4MTAyMTApCiAjZGVmaW5lIFBDSVhfQ1JCX1dJTkRPV19GMAkoMHgxMDIxMCkKICNkZWZpbmUgUENJWF9DUkJfV0lORE9XX0YxCSgweDEwMjMwKQogI2RlZmluZSBQQ0lYX0NSQl9XSU5ET1dfRjIJKDB4MTAyNTApCiAjZGVmaW5lIFBDSVhfQ1JCX1dJTkRPV19GMwkoMHgxMDI3MCkKKyNkZWZpbmUgUENJWF9DUkJfV0lORE9XX0Y0CSgweDEwMmFjKQorI2RlZmluZSBQQ0lYX0NSQl9XSU5ET1dfRjUJKDB4MTAyYmMpCisjZGVmaW5lIFBDSVhfQ1JCX1dJTkRPV19GNgkoMHgxMDJjYykKKyNkZWZpbmUgUENJWF9DUkJfV0lORE9XX0Y3CSgweDEwMmRjKQorI2RlZmluZSBQQ0lFX0NSQl9XSU5ET1dfUkVHKGZ1bmMpCSgoKGZ1bmMpIDwgNCkgPyBcCisJCShQQ0lYX0NSQl9XSU5ET1dfRjAgKyAoMHgyMCAqIChmdW5jKSkpIDpcCisJCShQQ0lYX0NSQl9XSU5ET1dfRjQgKyAoMHgxMCAqICgoZnVuYyktNCkpKSkKKworI2RlZmluZSBQQ0lYX01OX1dJTkRPVwkJKDB4MTAyMDApCisjZGVmaW5lIFBDSVhfTU5fV0lORE9XX0YwCSgweDEwMjAwKQorI2RlZmluZSBQQ0lYX01OX1dJTkRPV19GMQkoMHgxMDIyMCkKKyNkZWZpbmUgUENJWF9NTl9XSU5ET1dfRjIJKDB4MTAyNDApCisjZGVmaW5lIFBDSVhfTU5fV0lORE9XX0YzCSgweDEwMjYwKQorI2RlZmluZSBQQ0lYX01OX1dJTkRPV19GNAkoMHgxMDJhMCkKKyNkZWZpbmUgUENJWF9NTl9XSU5ET1dfRjUJKDB4MTAyYjApCisjZGVmaW5lIFBDSVhfTU5fV0lORE9XX0Y2CSgweDEwMmMwKQorI2RlZmluZSBQQ0lYX01OX1dJTkRPV19GNwkoMHgxMDJkMCkKKyNkZWZpbmUgUENJRV9NTl9XSU5ET1dfUkVHKGZ1bmMpCSgoKGZ1bmMpIDwgNCkgPyBcCisJCShQQ0lYX01OX1dJTkRPV19GMCArICgweDIwICogKGZ1bmMpKSkgOlwKKwkJKFBDSVhfTU5fV0lORE9XX0Y0ICsgKDB4MTAgKiAoKGZ1bmMpLTQpKSkpCisKKyNkZWZpbmUgUENJWF9TTl9XSU5ET1cJCSgweDEwMjA4KQorI2RlZmluZSBQQ0lYX1NOX1dJTkRPV19GMAkoMHgxMDIwOCkKKyNkZWZpbmUgUENJWF9TTl9XSU5ET1dfRjEJKDB4MTAyMjgpCisjZGVmaW5lIFBDSVhfU05fV0lORE9XX0YyCSgweDEwMjQ4KQorI2RlZmluZSBQQ0lYX1NOX1dJTkRPV19GMwkoMHgxMDI2OCkKKyNkZWZpbmUgUENJWF9TTl9XSU5ET1dfRjQJKDB4MTAyYTgpCisjZGVmaW5lIFBDSVhfU05fV0lORE9XX0Y1CSgweDEwMmI4KQorI2RlZmluZSBQQ0lYX1NOX1dJTkRPV19GNgkoMHgxMDJjOCkKKyNkZWZpbmUgUENJWF9TTl9XSU5ET1dfRjcJKDB4MTAyZDgpCisjZGVmaW5lIFBDSUVfU05fV0lORE9XX1JFRyhmdW5jKQkoKChmdW5jKSA8IDQpID8gXAorCQkoUENJWF9TTl9XSU5ET1dfRjAgKyAoMHgyMCAqIChmdW5jKSkpIDpcCisJCShQQ0lYX1NOX1dJTkRPV19GNCArICgweDEwICogKChmdW5jKS00KSkpKQogCiAjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVUwkoMHgxMDExOCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0YxCSgweDEwMTYwKQorI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjIJKDB4MTAxNjQpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GMwkoMHgxMDE2OCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0Y0CSgweDEwMzYwKQorI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjUJKDB4MTAzNjQpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GNgkoMHgxMDM2OCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0Y3CSgweDEwMzZjKQorCiAjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0sJKDB4MTAxMjgpCi0jZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GMSAoMHgxMDE2MCkKLSNkZWZpbmUgUENJWF9UQVJHRVRfTUFTS19GMSAgICgweDEwMTcwKQotI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjIgKDB4MTAxNjQpCi0jZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjIgICAoMHgxMDE3NCkKLSNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0YzICgweDEwMTY4KQotI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0YzICAgKDB4MTAxNzgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjEJKDB4MTAxNzApCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjIJKDB4MTAxNzQpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjMJKDB4MTAxNzgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjQJKDB4MTAzNzApCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjUJKDB4MTAzNzQpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjYJKDB4MTAzNzgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjcJKDB4MTAzN2MpCiAKICNkZWZpbmUgUENJWF9NU0lfRjAJCSgweDEzMDAwKQogI2RlZmluZSBQQ0lYX01TSV9GMQkJKDB4MTMwMDQpCiAjZGVmaW5lIFBDSVhfTVNJX0YyCQkoMHgxMzAwOCkKICNkZWZpbmUgUENJWF9NU0lfRjMJCSgweDEzMDBjKQorI2RlZmluZSBQQ0lYX01TSV9GNAkJKDB4MTMwMTApCisjZGVmaW5lIFBDSVhfTVNJX0Y1CQkoMHgxMzAxNCkKKyNkZWZpbmUgUENJWF9NU0lfRjYJCSgweDEzMDE4KQorI2RlZmluZSBQQ0lYX01TSV9GNwkJKDB4MTMwMWMpCiAjZGVmaW5lIFBDSVhfTVNJX0YoaSkJCSgweDEzMDAwKygoaSkqNCkpCiAKICNkZWZpbmUgUENJWF9QU19NRU1fU1BBQ0UJKDB4OTAwMDApCkBAIC02OTUsMTEgKzgyNywxMDIgQEAKICNkZWZpbmUgUENJRV9TRU0yX1VOTE9DSwkoMHgxYzAxNCkJLyogRmxhc2ggdW5sb2NrICovCiAjZGVmaW5lIFBDSUVfU0VNM19MT0NLCSAgCSgweDFjMDE4KQkvKiBQaHkgbG9jayAgICAgKi8KICNkZWZpbmUgUENJRV9TRU0zX1VOTE9DSwkoMHgxYzAxYykJLyogUGh5IHVubG9jayAgICovCisjZGVmaW5lIFBDSUVfU0VNNV9MT0NLCQkoMHgxYzAyOCkJLyogQVBJIGxvY2sgICAgICovCisjZGVmaW5lIFBDSUVfU0VNNV9VTkxPQ0sJKDB4MWMwMmMpCS8qIEFQSSB1bmxvY2sgICAqLworI2RlZmluZSBQQ0lFX1NFTTZfTE9DSwkJKDB4MWMwMzApCS8qIHN3IGxvY2sgICAgICAqLworI2RlZmluZSBQQ0lFX1NFTTZfVU5MT0NLCSgweDFjMDM0KQkvKiBzdyB1bmxvY2sgICAgKi8KKyNkZWZpbmUgUENJRV9TRU03X0xPQ0sJCSgweDFjMDM4KQkvKiBjcmIgd2luIGxvY2sgKi8KKyNkZWZpbmUgUENJRV9TRU03X1VOTE9DSwkoMHgxYzAzYykJLyogY3Jid2luIHVubG9jayovCiAKKyNkZWZpbmUgUENJRV9TRVRVUF9GVU5DVElPTgkoMHgxMjA0MCkKKyNkZWZpbmUgUENJRV9TRVRVUF9GVU5DVElPTjIJKDB4MTIwNDgpCiAjZGVmaW5lIFBDSUVfVEdUX1NQTElUX0NISUNLRU4JKDB4MTIwODApCisjZGVmaW5lIFBDSUVfQ0hJQ0tFTjMJCSgweDEyMGM4KQogCiAjZGVmaW5lIFBDSUVfTUFYX01BU1RFUl9TUExJVAkoMHgxNDA0OCkKIAorI2RlZmluZSBORVRYRU5fUE9SVF9NT0RFX05PTkUJCTAKKyNkZWZpbmUgTkVUWEVOX1BPUlRfTU9ERV9YRwkJMQorI2RlZmluZSBORVRYRU5fUE9SVF9NT0RFX0dCCQkyCisjZGVmaW5lIE5FVFhFTl9QT1JUX01PREVfODAyXzNfQVAJMworI2RlZmluZSBORVRYRU5fUE9SVF9NT0RFX0FVVE9fTkVHCTQKKyNkZWZpbmUgTkVUWEVOX1BPUlRfTU9ERV9BVVRPX05FR18xRwk1CisjZGVmaW5lIE5FVFhFTl9QT1JUX01PREVfQVVUT19ORUdfWEcJNgorI2RlZmluZSBORVRYRU5fUE9SVF9NT0RFX0FERFIJCShORVRYRU5fQ0FNX1JBTSgweDI0KSkKKyNkZWZpbmUgTkVUWEVOX1dPTF9QT1JUX01PREUJCShORVRYRU5fQ0FNX1JBTSgweDE5OCkpCisKICNkZWZpbmUgTkVUWEVOX0NBTV9SQU1fRE1BX1dBVENIRE9HX0NUUkwJCSgweDE0KQogCisjZGVmaW5lCUlTUl9NU0lfSU5UX1RSSUdHRVIoRlVOQykgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX01TSV9GKEZVTkMpKSkKKworLyoKKyAqIFBDSSBJbnRlcnJ1cHQgVmVjdG9yIFZhbHVlcy4KKyAqLworI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YwCTB4MDA4MAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YxCTB4MDEwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YyCTB4MDIwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YzCTB4MDQwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y0CTB4MDgwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y1CTB4MTAwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y2CTB4MjAwMAorI2RlZmluZQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y3CTB4NDAwMAorCitzdHJ1Y3QgbmV0eGVuX2xlZ2FjeV9pbnRyX3NldCB7CisJdWludDMyX3QJaW50X3ZlY19iaXQ7CisJdWludDMyX3QJdGd0X3N0YXR1c19yZWc7CisJdWludDMyX3QJdGd0X21hc2tfcmVnOworCXVpbnQzMl90CXBjaV9pbnRfcmVnOworfTsKKworI2RlZmluZQlOWF9MRUdBQ1lfSU5UUl9DT05GSUcJCQkJCQlcCit7CQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0CT0JUENJWF9JTlRfVkVDVE9SX0JJVF9GMCwJCVwKKwkJLnRndF9zdGF0dXNfcmVnCT0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTLAkJXAorCQkudGd0X21hc2tfcmVnCT0JSVNSX0lOVF9UQVJHRVRfTUFTSywJCVwKKwkJLnBjaV9pbnRfcmVnCT0JSVNSX01TSV9JTlRfVFJJR0dFUigwKSB9LAlcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQJPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YxLAkJXAorCQkudGd0X3N0YXR1c19yZWcJPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjEsCVwKKwkJLnRndF9tYXNrX3JlZwk9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjEsCQlcCisJCS5wY2lfaW50X3JlZwk9CUlTUl9NU0lfSU5UX1RSSUdHRVIoMSkgfSwJXAorCQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0CT0JUENJWF9JTlRfVkVDVE9SX0JJVF9GMiwJCVwKKwkJLnRndF9zdGF0dXNfcmVnCT0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YyLAlcCisJCS50Z3RfbWFza19yZWcJPQlJU1JfSU5UX1RBUkdFVF9NQVNLX0YyLAkJXAorCQkucGNpX2ludF9yZWcJPQlJU1JfTVNJX0lOVF9UUklHR0VSKDIpIH0sCVwKKwkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdAk9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjMsCQlcCisJCS50Z3Rfc3RhdHVzX3JlZwk9CUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GMywJXAorCQkudGd0X21hc2tfcmVnCT0JSVNSX0lOVF9UQVJHRVRfTUFTS19GMywJCVwKKwkJLnBjaV9pbnRfcmVnCT0JSVNSX01TSV9JTlRfVFJJR0dFUigzKSB9LAlcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQJPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y0LAkJXAorCQkudGd0X3N0YXR1c19yZWcJPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjQsCVwKKwkJLnRndF9tYXNrX3JlZwk9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjQsCQlcCisJCS5wY2lfaW50X3JlZwk9CUlTUl9NU0lfSU5UX1RSSUdHRVIoNCkgfSwJXAorCQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0CT0JUENJWF9JTlRfVkVDVE9SX0JJVF9GNSwJCVwKKwkJLnRndF9zdGF0dXNfcmVnCT0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y1LAlcCisJCS50Z3RfbWFza19yZWcJPQlJU1JfSU5UX1RBUkdFVF9NQVNLX0Y1LAkJXAorCQkucGNpX2ludF9yZWcJPQlJU1JfTVNJX0lOVF9UUklHR0VSKDUpIH0sCVwKKwkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdAk9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjYsCQlcCisJCS50Z3Rfc3RhdHVzX3JlZwk9CUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GNiwJXAorCQkudGd0X21hc2tfcmVnCT0JSVNSX0lOVF9UQVJHRVRfTUFTS19GNiwJCVwKKwkJLnBjaV9pbnRfcmVnCT0JSVNSX01TSV9JTlRfVFJJR0dFUig2KSB9LAlcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQJPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y3LAkJXAorCQkudGd0X3N0YXR1c19yZWcJPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjcsCVwKKwkJLnRndF9tYXNrX3JlZwk9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjcsCQlcCisJCS5wY2lfaW50X3JlZwk9CUlTUl9NU0lfSU5UX1RSSUdHRVIoNykgfSwJXAorfQorCiAjZW5kaWYJCQkJLyogX19ORVRYRU5fTklDX0hEUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKaW5kZXggYzQzZDA2Yi4uOTZhM2JjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCkBAIC0zOCwyNDIgKzM4LDI2MiBAQAogCiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAKLXN0cnVjdCBuZXR4ZW5fcmVjdl9jcmIgcmVjdl9jcmJfcmVnaXN0ZXJzW10gPSB7Ci0JLyoKLQkgKiBJbnN0YW5jZSAwLgotCSAqLwotCXsKLQkgLyogcmN2X2Rlc2NfY3JiOiAqLwotCSB7Ci0JICB7Ci0JICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxMDApLAotCSAgIC8qIGNyYl9yY3ZfY29uc3VtZXJfb2Zmc2V0OiAqLwotCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTA0KSwKLQkgICAvKiBjcmJfZ2xvYWJscmN2X3Jpbmc6ICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxMDgpLAotCSAgIC8qIGNyYl9yY3ZfcmluZ19zaXplICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxMGMpLAorI2RlZmluZSBNQVNLKG4pICgoMVVMTDw8KG4pKS0xKQorI2RlZmluZSBNTl9XSU4oYWRkcikgKCgoYWRkciAmIDB4MWZjMDAwMCkgPj4gMSkgfCAoKGFkZHIgPj4gMjUpICYgMHgzZmYpKQorI2RlZmluZSBPQ01fV0lOKGFkZHIpICgoKGFkZHIgJiAweDFmZjAwMDApID4+IDEpIHwgKChhZGRyID4+IDI1KSAmIDB4M2ZmKSkKKyNkZWZpbmUgTVNfV0lOKGFkZHIpIChhZGRyICYgMHgwZmZjMDAwMCkKIAotCSAgIH0sCi0JICAvKiBKdW1ibyBmcmFtZXMgKi8KLQkgIHsKLQkgICAvKiBjcmJfcmN2X3Byb2R1Y2VyX29mZnNldDogKi8KLQkgICBORVRYRU5fTklDX1JFRygweDExMCksCi0JICAgLyogY3JiX3Jjdl9jb25zdW1lcl9vZmZzZXQ6ICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxMTQpLAotCSAgIC8qIGNyYl9nbG9hYmxyY3ZfcmluZzogKi8KLQkgICBORVRYRU5fTklDX1JFRygweDExOCksCi0JICAgLyogY3JiX3Jjdl9yaW5nX3NpemUgKi8KLQkgICBORVRYRU5fTklDX1JFRygweDExYyksCi0JICAgfSwKLQkgIC8qIExSTyAqLwotCSAgewotCSAgIC8qIGNyYl9yY3ZfcHJvZHVjZXJfb2Zmc2V0OiAqLwotCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTIwKSwKLQkgICAvKiBjcmJfcmN2X2NvbnN1bWVyX29mZnNldDogKi8KLQkgICBORVRYRU5fTklDX1JFRygweDEyNCksCi0JICAgLyogY3JiX2dsb2FibHJjdl9yaW5nOiAqLwotCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTI4KSwKLQkgICAvKiBjcmJfcmN2X3Jpbmdfc2l6ZSAqLwotCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTJjKSwKLQkgICB9Ci0JICB9LAotCSAvKiBjcmJfcmN2c3RhdHVzX3Jpbmc6ICovCi0JIE5FVFhFTl9OSUNfUkVHKDB4MTMwKSwKLQkgLyogY3JiX3Jjdl9zdGF0dXNfcHJvZHVjZXI6ICovCi0JIE5FVFhFTl9OSUNfUkVHKDB4MTM0KSwKLQkgLyogY3JiX3Jjdl9zdGF0dXNfY29uc3VtZXI6ICovCi0JIE5FVFhFTl9OSUNfUkVHKDB4MTM4KSwKLQkgLyogY3JiX3JjdnBlZ19zdGF0ZTogKi8KLQkgTkVUWEVOX05JQ19SRUcoMHgxM2MpLAotCSAvKiBjcmJfc3RhdHVzX3Jpbmdfc2l6ZSAqLwotCSBORVRYRU5fTklDX1JFRygweDE0MCksCisjZGVmaW5lIEdFVF9NRU1fT0ZGU18yTShhZGRyKSAoYWRkciAmIE1BU0soMTgpKQogCi0JIH0sCi0JLyoKLQkgKiBJbnN0YW5jZSAxLAotCSAqLwotCXsKLQkgLyogcmN2X2Rlc2NfY3JiOiAqLwotCSB7Ci0JICB7Ci0JICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxNDQpLAotCSAgIC8qIGNyYl9yY3ZfY29uc3VtZXJfb2Zmc2V0OiAqLwotCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTQ4KSwKLQkgICAvKiBjcmJfZ2xvYmFscmN2X3Jpbmc6ICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxNGMpLAotCSAgIC8qIGNyYl9yY3ZfcmluZ19zaXplICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxNTApLAorI2RlZmluZSBDUkJfQkxLKG9mZikJKChvZmYgPj4gMjApICYgMHgzZikKKyNkZWZpbmUgQ1JCX1NVQkJMSyhvZmYpCSgob2ZmID4+IDE2KSAmIDB4ZikKKyNkZWZpbmUgQ1JCX1dJTkRPV18yTQkoMHgxMzAwNjApCisjZGVmaW5lIENSQl9ISShvZmYpCSgoY3JiX2h1Yl9hZ3RbQ1JCX0JMSyhvZmYpXSA8PCAyMCkgfCAoKG9mZikgJiAweGYwMDAwKSkKKyNkZWZpbmUgQ1JCX0lORElSRUNUXzJNCSgweDFlMDAwMFVMKQogCi0JICAgfSwKLQkgIC8qIEp1bWJvIGZyYW1lcyAqLwotCSAgewotCSAgIC8qIGNyYl9yY3ZfcHJvZHVjZXJfb2Zmc2V0OiAqLwotCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTU0KSwKLQkgICAvKiBjcmJfcmN2X2NvbnN1bWVyX29mZnNldDogKi8KLQkgICBORVRYRU5fTklDX1JFRygweDE1OCksCi0JICAgLyogY3JiX2dsb2JhbHJjdl9yaW5nOiAqLwotCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTVjKSwKLQkgICAvKiBjcmJfcmN2X3Jpbmdfc2l6ZSAqLwotCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTYwKSwKLQkgICB9LAotCSAgLyogTFJPICovCi0JICB7Ci0JICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxNjQpLAotCSAgIC8qIGNyYl9yY3ZfY29uc3VtZXJfb2Zmc2V0OiAqLwotCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTY4KSwKLQkgICAvKiBjcmJfZ2xvYmFscmN2X3Jpbmc6ICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxNmMpLAotCSAgIC8qIGNyYl9yY3ZfcmluZ19zaXplICovCi0JICAgTkVUWEVOX05JQ19SRUcoMHgxNzApLAotCSAgIH0KLQotCSAgfSwKLQkgLyogY3JiX3JjdnN0YXR1c19yaW5nOiAqLwotCSBORVRYRU5fTklDX1JFRygweDE3NCksCi0JIC8qIGNyYl9yY3Zfc3RhdHVzX3Byb2R1Y2VyOiAqLwotCSBORVRYRU5fTklDX1JFRygweDE3OCksCi0JIC8qIGNyYl9yY3Zfc3RhdHVzX2NvbnN1bWVyOiAqLwotCSBORVRYRU5fTklDX1JFRygweDE3YyksCi0JIC8qIGNyYl9yY3ZwZWdfc3RhdGU6ICovCi0JIE5FVFhFTl9OSUNfUkVHKDB4MTgwKSwKLQkgLyogY3JiX3N0YXR1c19yaW5nX3NpemUgKi8KLQkgTkVUWEVOX05JQ19SRUcoMHgxODQpLAotCSB9LAotCS8qCi0JICogSW5zdGFuY2UgMiwKLQkgKi8KLQl7Ci0JICB7Ci0JICAgIHsKLQkgICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MWQ4KSwKLQkgICAgLyogY3JiX3Jjdl9jb25zdW1lcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MWRjKSwKLQkgICAgLyogY3JiX2dsb2FibHJjdl9yaW5nOiAqLwotCSAgICBORVRYRU5fTklDX1JFRygweDFmMCksCi0JICAgIC8qIGNyYl9yY3ZfcmluZ19zaXplICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MWY0KSwKLQkgICAgfSwKLQkgICAgLyogSnVtYm8gZnJhbWVzICovCi0JICAgIHsKLQkgICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MWY4KSwKLQkgICAgLyogY3JiX3Jjdl9jb25zdW1lcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MWZjKSwKLQkgICAgLyogY3JiX2dsb2FibHJjdl9yaW5nOiAqLwotCSAgICBORVRYRU5fTklDX1JFRygweDIwMCksCi0JICAgIC8qIGNyYl9yY3ZfcmluZ19zaXplICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjA0KSwKLQkgICAgfSwKLQkgICAgLyogTFJPICovCi0JICAgIHsKLQkgICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjA4KSwKLQkgICAgLyogY3JiX3Jjdl9jb25zdW1lcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjBjKSwKLQkgICAgLyogY3JiX2dsb2FibHJjdl9yaW5nOiAqLwotCSAgICBORVRYRU5fTklDX1JFRygweDIxMCksCi0JICAgIC8qIGNyYl9yY3ZfcmluZ19zaXplICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjE0KSwKLQkgICAgfQotCSAgfSwKLQkgIC8qIGNyYl9yY3ZzdGF0dXNfcmluZzogKi8KLQkgIE5FVFhFTl9OSUNfUkVHKDB4MjE4KSwKLQkgIC8qIGNyYl9yY3Zfc3RhdHVzX3Byb2R1Y2VyOiAqLwotCSAgTkVUWEVOX05JQ19SRUcoMHgyMWMpLAotCSAgLyogY3JiX3Jjdl9zdGF0dXNfY29uc3VtZXI6ICovCi0JICBORVRYRU5fTklDX1JFRygweDIyMCksCi0JICAvKiBjcmJfcmN2cGVnX3N0YXRlOiAqLwotCSAgTkVUWEVOX05JQ19SRUcoMHgyMjQpLAotCSAgLyogY3JiX3N0YXR1c19yaW5nX3NpemUgKi8KLQkgIE5FVFhFTl9OSUNfUkVHKDB4MjI4KSwKLQl9LAotCS8qCi0JICogSW5zdGFuY2UgMywKLQkgKi8KLQl7Ci0JICB7Ci0JICAgIHsKLQkgICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjJjKSwKLQkgICAgLyogY3JiX3Jjdl9jb25zdW1lcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjMwKSwKLQkgICAgLyogY3JiX2dsb2FibHJjdl9yaW5nOiAqLwotCSAgICBORVRYRU5fTklDX1JFRygweDIzNCksCi0JICAgIC8qIGNyYl9yY3ZfcmluZ19zaXplICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjM4KSwKLQkgICAgfSwKLQkgICAgLyogSnVtYm8gZnJhbWVzICovCi0JICAgIHsKLQkgICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjNjKSwKLQkgICAgLyogY3JiX3Jjdl9jb25zdW1lcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjQwKSwKLQkgICAgLyogY3JiX2dsb2FibHJjdl9yaW5nOiAqLwotCSAgICBORVRYRU5fTklDX1JFRygweDI0NCksCi0JICAgIC8qIGNyYl9yY3ZfcmluZ19zaXplICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjQ4KSwKLQkgICAgfSwKLQkgICAgLyogTFJPICovCi0JICAgIHsKLQkgICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjRjKSwKLQkgICAgLyogY3JiX3Jjdl9jb25zdW1lcl9vZmZzZXQ6ICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjUwKSwKLQkgICAgLyogY3JiX2dsb2FibHJjdl9yaW5nOiAqLwotCSAgICBORVRYRU5fTklDX1JFRygweDI1NCksCi0JICAgIC8qIGNyYl9yY3ZfcmluZ19zaXplICovCi0JICAgIE5FVFhFTl9OSUNfUkVHKDB4MjU4KSwKLQkgICAgfQotCSAgfSwKLQkgIC8qIGNyYl9yY3ZzdGF0dXNfcmluZzogKi8KLQkgIE5FVFhFTl9OSUNfUkVHKDB4MjVjKSwKLQkgIC8qIGNyYl9yY3Zfc3RhdHVzX3Byb2R1Y2VyOiAqLwotCSAgTkVUWEVOX05JQ19SRUcoMHgyNjApLAotCSAgLyogY3JiX3Jjdl9zdGF0dXNfY29uc3VtZXI6ICovCi0JICBORVRYRU5fTklDX1JFRygweDI2NCksCi0JICAvKiBjcmJfcmN2cGVnX3N0YXRlOiAqLwotCSAgTkVUWEVOX05JQ19SRUcoMHgyNjgpLAotCSAgLyogY3JiX3N0YXR1c19yaW5nX3NpemUgKi8KLQkgIE5FVFhFTl9OSUNfUkVHKDB4MjZjKSwKLQl9LAorI2RlZmluZSBDUkJfV0lOX0xPQ0tfVElNRU9VVCAxMDAwMDAwMDAKK3N0YXRpYyBjcmJfMTI4TV8yTV9ibG9ja19tYXBfdCBjcmJfMTI4TV8yTV9tYXBbNjRdID0geworICAgIHt7ezAsIDAsICAgICAgICAgMCwgICAgICAgICAwfSB9IH0sCQkvKiAwOiBQQ0kgKi8KKyAgICB7e3sxLCAweDAxMDAwMDAsIDB4MDEwMjAwMCwgMHgxMjAwMDB9LAkvKiAxOiBQQ0lFICovCisJICB7MSwgMHgwMTEwMDAwLCAweDAxMjAwMDAsIDB4MTMwMDAwfSwKKwkgIHsxLCAweDAxMjAwMDAsIDB4MDEyMjAwMCwgMHgxMjQwMDB9LAorCSAgezEsIDB4MDEzMDAwMCwgMHgwMTMyMDAwLCAweDEyNjAwMH0sCisJICB7MSwgMHgwMTQwMDAwLCAweDAxNDIwMDAsIDB4MTI4MDAwfSwKKwkgIHsxLCAweDAxNTAwMDAsIDB4MDE1MjAwMCwgMHgxMmEwMDB9LAorCSAgezEsIDB4MDE2MDAwMCwgMHgwMTcwMDAwLCAweDExMDAwMH0sCisJICB7MSwgMHgwMTcwMDAwLCAweDAxNzIwMDAsIDB4MTJlMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHsxLCAweDAxZTAwMDAsIDB4MDFlMDgwMCwgMHgxMjIwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0gfSB9LAorCXt7ezEsIDB4MDIwMDAwMCwgMHgwMjEwMDAwLCAweDE4MDAwMH0gfSB9LC8qIDI6IE1OICovCisgICAge3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJICAgIC8qIDM6ICovCisgICAge3t7MSwgMHgwNDAwMDAwLCAweDA0MDEwMDAsIDB4MTY5MDAwfSB9IH0sLyogNDogUDJOUjEgKi8KKyAgICB7e3sxLCAweDA1MDAwMDAsIDB4MDUxMDAwMCwgMHgxNDAwMDB9IH0gfSwvKiA1OiBTUkUgICAqLworICAgIHt7ezEsIDB4MDYwMDAwMCwgMHgwNjEwMDAwLCAweDFjMDAwMH0gfSB9LC8qIDY6IE5JVSAgICovCisgICAge3t7MSwgMHgwNzAwMDAwLCAweDA3MDQwMDAsIDB4MWI4MDAwfSB9IH0sLyogNzogUU0gICAgKi8KKyAgICB7e3sxLCAweDA4MDAwMDAsIDB4MDgwMjAwMCwgMHgxNzAwMDB9LCAgLyogODogU1FNMCAgKi8KKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MSwgMHgwOGYwMDAwLCAweDA4ZjIwMDAsIDB4MTcyMDAwfSB9IH0sCisgICAge3t7MSwgMHgwOTAwMDAwLCAweDA5MDIwMDAsIDB4MTc0MDAwfSwJLyogOTogU1FNMSovCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezEsIDB4MDlmMDAwMCwgMHgwOWYyMDAwLCAweDE3NjAwMH0gfSB9LAorICAgIHt7ezAsIDB4MGEwMDAwMCwgMHgwYTAyMDAwLCAweDE3ODAwMH0sCS8qIDEwOiBTUU0yKi8KKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MSwgMHgwYWYwMDAwLCAweDBhZjIwMDAsIDB4MTdhMDAwfSB9IH0sCisgICAge3t7MCwgMHgwYjAwMDAwLCAweDBiMDIwMDAsIDB4MTdjMDAwfSwJLyogMTE6IFNRTTMqLworICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHsxLCAweDBiZjAwMDAsIDB4MGJmMjAwMCwgMHgxN2UwMDB9IH0gfSwKKwl7e3sxLCAweDBjMDAwMDAsIDB4MGMwNDAwMCwgMHgxZDQwMDB9IH0gfSwvKiAxMjogSTJRICovCisJe3t7MSwgMHgwZDAwMDAwLCAweDBkMDQwMDAsIDB4MWE0MDAwfSB9IH0sLyogMTM6IFRNUiAqLworCXt7ezEsIDB4MGUwMDAwMCwgMHgwZTA0MDAwLCAweDFhMDAwMH0gfSB9LC8qIDE0OiBST01VU0IgKi8KKwl7e3sxLCAweDBmMDAwMDAsIDB4MGYwMTAwMCwgMHgxNjQwMDB9IH0gfSwvKiAxNTogUEVHNCAqLworCXt7ezAsIDB4MTAwMDAwMCwgMHgxMDA0MDAwLCAweDFhODAwMH0gfSB9LC8qIDE2OiBYRE1BICovCisJe3t7MSwgMHgxMTAwMDAwLCAweDExMDEwMDAsIDB4MTYwMDAwfSB9IH0sLyogMTc6IFBFRzAgKi8KKwl7e3sxLCAweDEyMDAwMDAsIDB4MTIwMTAwMCwgMHgxNjEwMDB9IH0gfSwvKiAxODogUEVHMSAqLworCXt7ezEsIDB4MTMwMDAwMCwgMHgxMzAxMDAwLCAweDE2MjAwMH0gfSB9LC8qIDE5OiBQRUcyICovCisJe3t7MSwgMHgxNDAwMDAwLCAweDE0MDEwMDAsIDB4MTYzMDAwfSB9IH0sLyogMjA6IFBFRzMgKi8KKwl7e3sxLCAweDE1MDAwMDAsIDB4MTUwMTAwMCwgMHgxNjUwMDB9IH0gfSwvKiAyMTogUDJORCAqLworCXt7ezEsIDB4MTYwMDAwMCwgMHgxNjAxMDAwLCAweDE2NjAwMH0gfSB9LC8qIDIyOiBQMk5JICovCisJe3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJLyogMjM6ICovCisJe3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJLyogMjQ6ICovCisJe3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJLyogMjU6ICovCisJe3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJLyogMjY6ICovCisJe3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJLyogMjc6ICovCisJe3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJLyogMjg6ICovCisJe3t7MSwgMHgxZDAwMDAwLCAweDFkMTAwMDAsIDB4MTkwMDAwfSB9IH0sLyogMjk6IE1TICovCisgICAge3t7MSwgMHgxZTAwMDAwLCAweDFlMDEwMDAsIDB4MTZhMDAwfSB9IH0sLyogMzA6IFAyTlIyICovCisgICAge3t7MSwgMHgxZjAwMDAwLCAweDFmMTAwMDAsIDB4MTUwMDAwfSB9IH0sLyogMzE6IEVQRyAqLworCXt7ezB9IH0gfSwJCQkJLyogMzI6IFBDSSAqLworCXt7ezEsIDB4MjEwMDAwMCwgMHgyMTAyMDAwLCAweDEyMDAwMH0sCS8qIDMzOiBQQ0lFICovCisJICB7MSwgMHgyMTEwMDAwLCAweDIxMjAwMDAsIDB4MTMwMDAwfSwKKwkgIHsxLCAweDIxMjAwMDAsIDB4MjEyMjAwMCwgMHgxMjQwMDB9LAorCSAgezEsIDB4MjEzMDAwMCwgMHgyMTMyMDAwLCAweDEyNjAwMH0sCisJICB7MSwgMHgyMTQwMDAwLCAweDIxNDIwMDAsIDB4MTI4MDAwfSwKKwkgIHsxLCAweDIxNTAwMDAsIDB4MjE1MjAwMCwgMHgxMmEwMDB9LAorCSAgezEsIDB4MjE2MDAwMCwgMHgyMTcwMDAwLCAweDExMDAwMH0sCisJICB7MSwgMHgyMTcwMDAwLCAweDIxNzIwMDAsIDB4MTJlMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0gfSB9LAorCXt7ezEsIDB4MjIwMDAwMCwgMHgyMjA0MDAwLCAweDFiMDAwMH0gfSB9LC8qIDM0OiBDQU0gKi8KKwl7e3swfSB9IH0sCQkJCS8qIDM1OiAqLworCXt7ezB9IH0gfSwJCQkJLyogMzY6ICovCisJe3t7MH0gfSB9LAkJCQkvKiAzNzogKi8KKwl7e3swfSB9IH0sCQkJCS8qIDM4OiAqLworCXt7ezB9IH0gfSwJCQkJLyogMzk6ICovCisJe3t7MSwgMHgyODAwMDAwLCAweDI4MDQwMDAsIDB4MWE0MDAwfSB9IH0sLyogNDA6IFRNUiAqLworCXt7ezEsIDB4MjkwMDAwMCwgMHgyOTAxMDAwLCAweDE2YjAwMH0gfSB9LC8qIDQxOiBQMk5SMyAqLworCXt7ezEsIDB4MmEwMDAwMCwgMHgyYTAwNDAwLCAweDFhYzQwMH0gfSB9LC8qIDQyOiBSUE1YMSAqLworCXt7ezEsIDB4MmIwMDAwMCwgMHgyYjAwNDAwLCAweDFhYzgwMH0gfSB9LC8qIDQzOiBSUE1YMiAqLworCXt7ezEsIDB4MmMwMDAwMCwgMHgyYzAwNDAwLCAweDFhY2MwMH0gfSB9LC8qIDQ0OiBSUE1YMyAqLworCXt7ezEsIDB4MmQwMDAwMCwgMHgyZDAwNDAwLCAweDFhZDAwMH0gfSB9LC8qIDQ1OiBSUE1YNCAqLworCXt7ezEsIDB4MmUwMDAwMCwgMHgyZTAwNDAwLCAweDFhZDQwMH0gfSB9LC8qIDQ2OiBSUE1YNSAqLworCXt7ezEsIDB4MmYwMDAwMCwgMHgyZjAwNDAwLCAweDFhZDgwMH0gfSB9LC8qIDQ3OiBSUE1YNiAqLworCXt7ezEsIDB4MzAwMDAwMCwgMHgzMDAwNDAwLCAweDFhZGMwMH0gfSB9LC8qIDQ4OiBSUE1YNyAqLworCXt7ezAsIDB4MzEwMDAwMCwgMHgzMTA0MDAwLCAweDFhODAwMH0gfSB9LC8qIDQ5OiBYRE1BICovCisJe3t7MSwgMHgzMjAwMDAwLCAweDMyMDQwMDAsIDB4MWQ0MDAwfSB9IH0sLyogNTA6IEkyUSAqLworCXt7ezEsIDB4MzMwMDAwMCwgMHgzMzA0MDAwLCAweDFhMDAwMH0gfSB9LC8qIDUxOiBST01VU0IgKi8KKwl7e3swfSB9IH0sCQkJCS8qIDUyOiAqLworCXt7ezEsIDB4MzUwMDAwMCwgMHgzNTAwNDAwLCAweDFhYzAwMH0gfSB9LC8qIDUzOiBSUE1YMCAqLworCXt7ezEsIDB4MzYwMDAwMCwgMHgzNjAwNDAwLCAweDFhZTAwMH0gfSB9LC8qIDU0OiBSUE1YOCAqLworCXt7ezEsIDB4MzcwMDAwMCwgMHgzNzAwNDAwLCAweDFhZTQwMH0gfSB9LC8qIDU1OiBSUE1YOSAqLworCXt7ezEsIDB4MzgwMDAwMCwgMHgzODA0MDAwLCAweDFkMDAwMH0gfSB9LC8qIDU2OiBPQ00wICovCisJe3t7MSwgMHgzOTAwMDAwLCAweDM5MDQwMDAsIDB4MWI0MDAwfSB9IH0sLyogNTc6IENSWVBUTyAqLworCXt7ezEsIDB4M2EwMDAwMCwgMHgzYTA0MDAwLCAweDFkODAwMH0gfSB9LC8qIDU4OiBTTUIgKi8KKwl7e3swfSB9IH0sCQkJCS8qIDU5OiBJMkMwICovCisJe3t7MH0gfSB9LAkJCQkvKiA2MDogSTJDMSAqLworCXt7ezEsIDB4M2QwMDAwMCwgMHgzZDA0MDAwLCAweDFkODAwMH0gfSB9LC8qIDYxOiBMUEMgKi8KKwl7e3sxLCAweDNlMDAwMDAsIDB4M2UwMTAwMCwgMHgxNjcwMDB9IH0gfSwvKiA2MjogUDJOQyAqLworCXt7ezEsIDB4M2YwMDAwMCwgMHgzZjAxMDAwLCAweDE2ODAwMH0gfSB9CS8qIDYzOiBQMk5SMCAqLwogfTsKIAotc3RhdGljIHU2NCBjdHhfYWRkcl9zaWdfcmVnc1tdWzNdID0gewotCXtORVRYRU5fTklDX1JFRygweDE4OCksIE5FVFhFTl9OSUNfUkVHKDB4MThjKSwgTkVUWEVOX05JQ19SRUcoMHgxYzApfSwKLQl7TkVUWEVOX05JQ19SRUcoMHgxOTApLCBORVRYRU5fTklDX1JFRygweDE5NCksIE5FVFhFTl9OSUNfUkVHKDB4MWM0KX0sCi0Je05FVFhFTl9OSUNfUkVHKDB4MTk4KSwgTkVUWEVOX05JQ19SRUcoMHgxOWMpLCBORVRYRU5fTklDX1JFRygweDFjOCl9LAotCXtORVRYRU5fTklDX1JFRygweDFhMCksIE5FVFhFTl9OSUNfUkVHKDB4MWE0KSwgTkVUWEVOX05JQ19SRUcoMHgxY2MpfQorLyoKKyAqIHRvcCAxMiBiaXRzIG9mIGNyYiBpbnRlcm5hbCBhZGRyZXNzIChodWIsIGFnZW50KQorICovCitzdGF0aWMgdW5zaWduZWQgY3JiX2h1Yl9hZ3RbNjRdID0KK3sKKwkwLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUFMsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9NTiwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX01TLAorCTAsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9TUkUsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9OSVUsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9RTU4sCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4wLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfU1FOMSwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjIsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4zLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfSTJRLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfVElNUiwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1JPTVVTQiwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjQsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9YRE1BLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdOMCwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjEsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04yLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdOMywKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHTkQsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05JLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdTMCwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzEsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1MyLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdTMywKKwkwLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdTSSwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1NOLAorCTAsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9FRywKKwkwLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUFMsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9DQU0sCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfVElNUiwKKwkwLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDEsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMiwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgzLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDQsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YNSwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg2LAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDcsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9YRE1BLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfSTJRLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUk9NVVNCLAorCTAsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMCwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg4LAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDksCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9PQ00wLAorCTAsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9TTUIsCisJTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9JMkMwLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfSTJDMSwKKwkwLAorCU5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdOQywKKwkwLAogfTsKLSNkZWZpbmUgQ1JCX0NUWF9BRERSX1JFR19MTyhGVU5DX0lEKQkJKGN0eF9hZGRyX3NpZ19yZWdzW0ZVTkNfSURdWzBdKQotI2RlZmluZSBDUkJfQ1RYX0FERFJfUkVHX0hJKEZVTkNfSUQpCQkoY3R4X2FkZHJfc2lnX3JlZ3NbRlVOQ19JRF1bMl0pCi0jZGVmaW5lIENSQl9DVFhfU0lHTkFUVVJFX1JFRyhGVU5DX0lEKQkJKGN0eF9hZGRyX3NpZ19yZWdzW0ZVTkNfSURdWzFdKQotCiAKIC8qICBQQ0kgV2luZG93aW5nIGZvciBERFIgcmVnaW9ucy4gICovCiAKICNkZWZpbmUgQUREUl9JTl9SQU5HRShhZGRyLCBsb3csIGhpZ2gpCVwKIAkoKChhZGRyKSA8PSAoaGlnaCkpICYmICgoYWRkcikgPj0gKGxvdykpKQogCi0jZGVmaW5lIE5FVFhFTl9GTEFTSF9CQVNFCShORVRYRU5fQk9PVExEX1NUQVJUKQotI2RlZmluZSBORVRYRU5fUEhBTlRPTV9NRU1fQkFTRQkoTkVUWEVOX0ZMQVNIX0JBU0UpCiAjZGVmaW5lIE5FVFhFTl9NQVhfTVRVCQk4MDAwICsgTkVUWEVOX0VORVRfSEVBREVSX1NJWkUgKyBORVRYRU5fRVRIX0ZDU19TSVpFCiAjZGVmaW5lIE5FVFhFTl9NSU5fTVRVCQk2NAogI2RlZmluZSBORVRYRU5fRVRIX0ZDU19TSVpFICAgICA0CiAjZGVmaW5lIE5FVFhFTl9FTkVUX0hFQURFUl9TSVpFIDE0Ci0jZGVmaW5lIE5FVFhFTl9XSU5ET1dfT05FIAkweDIwMDAwMDAJLypDUkIgV2luZG93OiBiaXQgMjUgb2YgQ1JCIGFkZHJlc3MgKi8KKyNkZWZpbmUgTkVUWEVOX1dJTkRPV19PTkUgCTB4MjAwMDAwMCAvKkNSQiBXaW5kb3c6IGJpdCAyNSBvZiBDUkIgYWRkcmVzcyAqLwogI2RlZmluZSBORVRYRU5fRklSTVdBUkVfTEVOIAkoKDE2ICogMTAyNCkgLyA0KQogI2RlZmluZSBORVRYRU5fTklVX0hEUlNJWkUJKDB4MSA8PCA2KQogI2RlZmluZSBORVRYRU5fTklVX1RMUlNJWkUJKDB4MSA8PCA1KQogCi0jZGVmaW5lIGxvd2VyMzIoeCkJCSgodTMyKSgoeCkgJiAweGZmZmZmZmZmKSkKLSNkZWZpbmUgdXBwZXIzMih4KQkJCVwKLQkoKHUzMikoKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpID4+IDMyKSAmIDB4ZmZmZmZmZmYpKQotCiAjZGVmaW5lIE5FVFhFTl9OSUNfWkVST19QQVVTRV9BRERSICAgICAwVUxMCiAjZGVmaW5lIE5FVFhFTl9OSUNfVU5JVF9QQVVTRV9BRERSICAgICAweDIwMFVMTAogI2RlZmluZSBORVRYRU5fTklDX0VQR19QQVVTRV9BRERSMSAgICAgMHgyMjAwMDEwMDAwYzI4MDAxVUxMCkBAIC0yODEsMTAgKzMwMSw2IEBACiAKICNkZWZpbmUgTkVUWEVOX05JQ19XSU5ET1dfTUFSR0lOIDB4MTAwMDAwCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3coc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpOwotdm9pZCBuZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKLQogaW50IG5ldHhlbl9uaWNfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0yOTYsNDcgKzMxMiwzNTYgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAotCURQUklOVEsoSU5GTywgInZhbGlkIGV0aGVyIGFkZHJcbiIpOwogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAotCWlmIChhZGFwdGVyLT5tYWNhZGRyX3NldCkKLQkJYWRhcHRlci0+bWFjYWRkcl9zZXQoYWRhcHRlciwgYWRkci0+c2FfZGF0YSk7CisJLyogRm9yIFAzLCBNQUMgYWRkciBpcyBub3Qgc2V0IGluIE5JVSAqLworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlpZiAoYWRhcHRlci0+bWFjYWRkcl9zZXQpCisJCQlhZGFwdGVyLT5tYWNhZGRyX3NldChhZGFwdGVyLCBhZGRyLT5zYV9kYXRhKTsKIAogCXJldHVybiAwOwogfQogCi0vKgotICogbmV0eGVuX25pY19zZXRfbXVsdGkgLSBNdWx0aWNhc3QKLSAqLwotdm9pZCBuZXR4ZW5fbmljX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorI2RlZmluZSBORVRYRU5fVU5JQ0FTVF9BRERSKHBvcnQsIGluZGV4KSBcCisJKE5FVFhFTl9VTklDQVNUX0FERFJfQkFTRSsocG9ydCozMikrKGluZGV4KjgpKQorI2RlZmluZSBORVRYRU5fTUNBU1RfQUREUihwb3J0LCBpbmRleCkgXAorCShORVRYRU5fTVVMVElDQVNUX0FERFJfQkFTRSsocG9ydCoweDgwKSsoaW5kZXgqOCkpCisjZGVmaW5lIE1BQ19ISShhZGRyKSBcCisJKChhZGRyWzJdIDw8IDE2KSB8IChhZGRyWzFdIDw8IDgpIHwgKGFkZHJbMF0pKQorI2RlZmluZSBNQUNfTE8oYWRkcikgXAorCSgoYWRkcls1XSA8PCAxNikgfCAoYWRkcls0XSA8PCA4KSB8IChhZGRyWzNdKSkKKworc3RhdGljIGludAorbmV0eGVuX25pY19lbmFibGVfbWNhc3RfZmlsdGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIJdmFsID0gMDsKKwl1MTYgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisJdTggKmFkZHIgPSBhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyOworCisJaWYgKGFkYXB0ZXItPm1jX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTUFDX0FERFJfQ05UTF9SRUcsICZ2YWwsIDQpOworCXZhbCB8PSAoMVVMIDw8ICgyOCtwb3J0KSk7CisJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX01BQ19BRERSX0NOVExfUkVHLCAmdmFsLCA0KTsKKworCS8qIGFkZCBicm9hZGNhc3QgYWRkciB0byBmaWx0ZXIgKi8KKwl2YWwgPSAweGZmZmZmZjsKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX1VOSUNBU1RfQUREUihwb3J0LCAwKSwgdmFsKTsKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCU5FVFhFTl9VTklDQVNUX0FERFIocG9ydCwgMCkrNCwgdmFsKTsKKworCS8qIGFkZCBzdGF0aW9uIGFkZHIgdG8gZmlsdGVyICovCisJdmFsID0gTUFDX0hJKGFkZHIpOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fVU5JQ0FTVF9BRERSKHBvcnQsIDEpLCB2YWwpOworCXZhbCA9IE1BQ19MTyhhZGRyKTsKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCU5FVFhFTl9VTklDQVNUX0FERFIocG9ydCwgMSkrNCwgdmFsKTsKKworCWFkYXB0ZXItPm1jX2VuYWJsZWQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX2Rpc2FibGVfbWNhc3RfZmlsdGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIJdmFsID0gMDsKKwl1MTYgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisJdTggKmFkZHIgPSBhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyOworCisJaWYgKCFhZGFwdGVyLT5tY19lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX01BQ19BRERSX0NOVExfUkVHLCAmdmFsLCA0KTsKKwl2YWwgJj0gfigxVUwgPDwgKDI4K3BvcnQpKTsKKwlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTUFDX0FERFJfQ05UTF9SRUcsICZ2YWwsIDQpOworCisJdmFsID0gTUFDX0hJKGFkZHIpOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fVU5JQ0FTVF9BRERSKHBvcnQsIDApLCB2YWwpOworCXZhbCA9IE1BQ19MTyhhZGRyKTsKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCU5FVFhFTl9VTklDQVNUX0FERFIocG9ydCwgMCkrNCwgdmFsKTsKKworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fVU5JQ0FTVF9BRERSKHBvcnQsIDEpLCAwKTsKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX1VOSUNBU1RfQUREUihwb3J0LCAxKSs0LCAwKTsKKworCWFkYXB0ZXItPm1jX2VuYWJsZWQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3NldF9tY2FzdF9hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJaW50IGluZGV4LCB1OCAqYWRkcikKK3sKKwl1MzIgaGkgPSAwLCBsbyA9IDA7CisJdTE2IHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OworCisJbG8gPSBNQUNfTE8oYWRkcik7CisJaGkgPSBNQUNfSEkoYWRkcik7CisKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCU5FVFhFTl9NQ0FTVF9BRERSKHBvcnQsIGluZGV4KSwgaGkpOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJTkVUWEVOX01DQVNUX0FERFIocG9ydCwgaW5kZXgpKzQsIGxvKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG5ldHhlbl9wMl9uaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKKwl1OCBudWxsX2FkZHJbNl07CisJaW50IGluZGV4ID0gMDsKIAotCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKKwltZW1zZXQobnVsbF9hZGRyLCAwLCA2KTsKKwogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJaWYgKGFkYXB0ZXItPnNldF9wcm9taXNjKQotCQkJYWRhcHRlci0+c2V0X3Byb21pc2MoYWRhcHRlciwKLQkJCQkJICAgICBORVRYRU5fTklVX1BST01JU0NfTU9ERSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGFkYXB0ZXItPnVuc2V0X3Byb21pc2MpCi0JCQlhZGFwdGVyLT51bnNldF9wcm9taXNjKGFkYXB0ZXIsCi0JCQkJCSAgICAgICBORVRYRU5fTklVX05PTl9QUk9NSVNDX01PREUpOworCisJCWFkYXB0ZXItPnNldF9wcm9taXNjKGFkYXB0ZXIsCisJCQkJTkVUWEVOX05JVV9QUk9NSVNDX01PREUpOworCisJCS8qIEZ1bGwgcHJvbWlzY3VvdXMgbW9kZSAqLworCQluZXR4ZW5fbmljX2Rpc2FibGVfbWNhc3RfZmlsdGVyKGFkYXB0ZXIpOworCisJCXJldHVybjsKIAl9CisKKwlpZiAobmV0ZGV2LT5tY19jb3VudCA9PSAwKSB7CisJCWFkYXB0ZXItPnNldF9wcm9taXNjKGFkYXB0ZXIsCisJCQkJTkVUWEVOX05JVV9OT05fUFJPTUlTQ19NT0RFKTsKKwkJbmV0eGVuX25pY19kaXNhYmxlX21jYXN0X2ZpbHRlcihhZGFwdGVyKTsKKwkJcmV0dXJuOworCX0KKworCWFkYXB0ZXItPnNldF9wcm9taXNjKGFkYXB0ZXIsIE5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERSk7CisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKKwkJCW5ldGRldi0+bWNfY291bnQgPiBhZGFwdGVyLT5tYXhfbWNfY291bnQpIHsKKwkJbmV0eGVuX25pY19kaXNhYmxlX21jYXN0X2ZpbHRlcihhZGFwdGVyKTsKKwkJcmV0dXJuOworCX0KKworCW5ldHhlbl9uaWNfZW5hYmxlX21jYXN0X2ZpbHRlcihhZGFwdGVyKTsKKworCWZvciAobWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OyBtY19wdHI7IG1jX3B0ciA9IG1jX3B0ci0+bmV4dCwgaW5kZXgrKykKKwkJbmV0eGVuX25pY19zZXRfbWNhc3RfYWRkcihhZGFwdGVyLCBpbmRleCwgbWNfcHRyLT5kbWlfYWRkcik7CisKKwlpZiAoaW5kZXggIT0gbmV0ZGV2LT5tY19jb3VudCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzIG11bHRpY2FzdCBhZGRyZXNzIGNvdW50IG1pc21hdGNoXG4iLAorCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lKTsKKworCS8qIENsZWFyIG91dCByZW1haW5pbmcgYWRkcmVzc2VzICovCisJZm9yICg7IGluZGV4IDwgYWRhcHRlci0+bWF4X21jX2NvdW50OyBpbmRleCsrKQorCQluZXR4ZW5fbmljX3NldF9tY2FzdF9hZGRyKGFkYXB0ZXIsIGluZGV4LCBudWxsX2FkZHIpOworfQorCitzdGF0aWMgaW50IG54X3AzX25pY19hZGRfbWFjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdTggKmFkZHIsIG54X21hY19saXN0X3QgKiphZGRfbGlzdCwgbnhfbWFjX2xpc3RfdCAqKmRlbF9saXN0KQoreworCW54X21hY19saXN0X3QgKmN1ciwgKnByZXY7CisKKwkvKiBpZiBpbiBkZWxfbGlzdCwgbW92ZSBpdCB0byBhZGFwdGVyLT5tYWNfbGlzdCAqLworCWZvciAoY3VyID0gKmRlbF9saXN0LCBwcmV2ID0gTlVMTDsgY3VyOykgeworCQlpZiAobWVtY21wKGFkZHIsIGN1ci0+bWFjX2FkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQlpZiAocHJldiA9PSBOVUxMKQorCQkJCSpkZWxfbGlzdCA9IGN1ci0+bmV4dDsKKwkJCWVsc2UKKwkJCQlwcmV2LT5uZXh0ID0gY3VyLT5uZXh0OworCQkJY3VyLT5uZXh0ID0gYWRhcHRlci0+bWFjX2xpc3Q7CisJCQlhZGFwdGVyLT5tYWNfbGlzdCA9IGN1cjsKKwkJCXJldHVybiAwOworCQl9CisJCXByZXYgPSBjdXI7CisJCWN1ciA9IGN1ci0+bmV4dDsKKwl9CisKKwkvKiBtYWtlIHN1cmUgdG8gYWRkIGVhY2ggbWFjIGFkZHJlc3Mgb25seSBvbmNlICovCisJZm9yIChjdXIgPSBhZGFwdGVyLT5tYWNfbGlzdDsgY3VyOyBjdXIgPSBjdXItPm5leHQpIHsKKwkJaWYgKG1lbWNtcChhZGRyLCBjdXItPm1hY19hZGRyLCBFVEhfQUxFTikgPT0gMCkKKwkJCXJldHVybiAwOworCX0KKwkvKiBub3QgaW4gZGVsX2xpc3QsIGNyZWF0ZSBuZXcgZW50cnkgYW5kIGFkZCB0byBhZGRfbGlzdCAqLworCWN1ciA9IGttYWxsb2Moc2l6ZW9mKCpjdXIpLCBpbl9hdG9taWMoKT8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOworCWlmIChjdXIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5LiBNQUMgZmlsdGVyaW5nIG1heSIKKwkJCQkibm90IHdvcmsgcHJvcGVybHkgZnJvbSBub3cuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwltZW1jcHkoY3VyLT5tYWNfYWRkciwgYWRkciwgRVRIX0FMRU4pOworCWN1ci0+bmV4dCA9ICphZGRfbGlzdDsKKwkqYWRkX2xpc3QgPSBjdXI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9zZW5kX2NtZF9kZXNjcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqY21kX2Rlc2NfYXJyLCBpbnQgbnJfZWxlbWVudHMpCit7CisJdWludDMyX3QgaSwgcHJvZHVjZXI7CisJc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICpwYnVmOworCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqY21kX2Rlc2M7CisKKwlpZiAobnJfZWxlbWVudHMgPiBNQVhfUEVORElOR19ERVNDX0JMT0NLX1NJWkUgfHwgbnJfZWxlbWVudHMgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVG9vIG1hbnkgY29tbWFuZCBkZXNjcmlwdG9ycyBpbiBhICIKKwkJCSAgICAgICJyZXF1ZXN0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWkgPSAwOworCisJcHJvZHVjZXIgPSBhZGFwdGVyLT5jbWRfcHJvZHVjZXI7CisJZG8geworCQljbWRfZGVzYyA9ICZjbWRfZGVzY19hcnJbaV07CisKKwkJcGJ1ZiA9ICZhZGFwdGVyLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07CisJCXBidWYtPm1zcyA9IDA7CisJCXBidWYtPnRvdGFsX2xlbmd0aCA9IDA7CisJCXBidWYtPnNrYiA9IE5VTEw7CisJCXBidWYtPmNtZCA9IDA7CisJCXBidWYtPmZyYWdfY291bnQgPSAwOworCQlwYnVmLT5wb3J0ID0gMDsKKworCQkvKiBhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZFtwcm9kdWNlcl0gPSAqY21kX2Rlc2M7ICovCisJCW1lbWNweSgmYWRhcHRlci0+YWh3LmNtZF9kZXNjX2hlYWRbcHJvZHVjZXJdLAorCQkJJmNtZF9kZXNjX2FycltpXSwgc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkpOworCisJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsCisJCQkJYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOworCQlpKys7CisKKwl9IHdoaWxlIChpICE9IG5yX2VsZW1lbnRzKTsKKworCWFkYXB0ZXItPmNtZF9wcm9kdWNlciA9IHByb2R1Y2VyOworCisJLyogd3JpdGUgcHJvZHVjZXIgaW5kZXggdG8gc3RhcnQgdGhlIHhtaXQgKi8KKworCW5ldHhlbl9uaWNfdXBkYXRlX2NtZF9wcm9kdWNlcihhZGFwdGVyLCBhZGFwdGVyLT5jbWRfcHJvZHVjZXIpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTklDX1JFUVVFU1QJCTB4MTQKKyNkZWZpbmUgTkVUWEVOX01BQ19FVkVOVAkweDEKKworc3RhdGljIGludCBueF9wM19zcmVfbWFjYWRkcl9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJdTggKmFkZHIsIHVuc2lnbmVkIG9wKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKilkZXYtPnByaXY7CisJbnhfbmljX3JlcV90IHJlcTsKKwlueF9tYWNfcmVxX3QgbWFjX3JlcTsKKwlpbnQgcnY7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKG54X25pY19yZXFfdCkpOworCXJlcS5xaGRyIHw9IChOSUNfUkVRVUVTVCA8PCAyMyk7CisJcmVxLnJlcV9oZHIgfD0gTkVUWEVOX01BQ19FVkVOVDsKKwlyZXEucmVxX2hkciB8PSAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwltYWNfcmVxLm9wID0gb3A7CisJbWVtY3B5KCZtYWNfcmVxLm1hY19hZGRyLCBhZGRyLCA2KTsKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NCgqKHU2NCAqKSZtYWNfcmVxKTsKKworCXJ2ID0gbmV0eGVuX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKKwlpZiAocnYgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SLiBDb3VsZCBub3Qgc2VuZCBtYWMgdXBkYXRlXG4iKTsKKwkJcmV0dXJuIHJ2OworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIG5ldHhlbl9wM19uaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlueF9tYWNfbGlzdF90ICpjdXIsICpuZXh0LCAqZGVsX2xpc3QsICphZGRfbGlzdCA9IE5VTEw7CisJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7CisJdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKworCWFkYXB0ZXItPnNldF9wcm9taXNjKGFkYXB0ZXIsIE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKTsKKworCS8qCisJICogUHJvZ3JhbW1pbmcgbWFjIGFkZHJlc3NlcyB3aWxsIGF1dG9tYXRpY2x5IGVuYWJsaW5nIEwyIGZpbHRlcmluZy4KKwkgKiBIVyB3aWxsIHJlcGxhY2UgdGltZXN0YW1wIHdpdGggTDIgY29uaWQgd2hlbiBMMiBmaWx0ZXJpbmcgaXMKKwkgKiBlbmFibGVkLiBUaGlzIGNhdXNlcyBwcm9ibGVtIGZvciBMU0EuIERvIG5vdCBlbmFibGluZyBMMiBmaWx0ZXJpbmcKKwkgKiB1bnRpbCB0aGF0IHByb2JsZW0gaXMgZml4ZWQuCisJICovCisJaWYgKChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8CisJCQkobmV0ZGV2LT5tY19jb3VudCA+IGFkYXB0ZXItPm1heF9tY19jb3VudCkpCisJCXJldHVybjsKKworCWRlbF9saXN0ID0gYWRhcHRlci0+bWFjX2xpc3Q7CisJYWRhcHRlci0+bWFjX2xpc3QgPSBOVUxMOworCisJbnhfcDNfbmljX2FkZF9tYWMoYWRhcHRlciwgbmV0ZGV2LT5kZXZfYWRkciwgJmFkZF9saXN0LCAmZGVsX2xpc3QpOworCWlmIChuZXRkZXYtPm1jX2NvdW50ID4gMCkgeworCQlueF9wM19uaWNfYWRkX21hYyhhZGFwdGVyLCBiY2FzdF9hZGRyLCAmYWRkX2xpc3QsICZkZWxfbGlzdCk7CisJCWZvciAobWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OyBtY19wdHI7CisJCSAgICAgbWNfcHRyID0gbWNfcHRyLT5uZXh0KSB7CisJCQlueF9wM19uaWNfYWRkX21hYyhhZGFwdGVyLCBtY19wdHItPmRtaV9hZGRyLAorCQkJCQkgICZhZGRfbGlzdCwgJmRlbF9saXN0KTsKKwkJfQorCX0KKwlmb3IgKGN1ciA9IGRlbF9saXN0OyBjdXI7KSB7CisJCW54X3AzX3NyZV9tYWNhZGRyX2NoYW5nZShuZXRkZXYsIGN1ci0+bWFjX2FkZHIsIE5FVFhFTl9NQUNfREVMKTsKKwkJbmV4dCA9IGN1ci0+bmV4dDsKKwkJa2ZyZWUoY3VyKTsKKwkJY3VyID0gbmV4dDsKKwl9CisJZm9yIChjdXIgPSBhZGRfbGlzdDsgY3VyOykgeworCQlueF9wM19zcmVfbWFjYWRkcl9jaGFuZ2UobmV0ZGV2LCBjdXItPm1hY19hZGRyLCBORVRYRU5fTUFDX0FERCk7CisJCW5leHQgPSBjdXItPm5leHQ7CisJCWN1ci0+bmV4dCA9IGFkYXB0ZXItPm1hY19saXN0OworCQlhZGFwdGVyLT5tYWNfbGlzdCA9IGN1cjsKKwkJY3VyID0gbmV4dDsKKwl9Cit9CisKKyNkZWZpbmUJTkVUWEVOX0NPTkZJR19JTlRSX0NPQUxFU0NFCTMKKworLyoKKyAqIFNlbmQgdGhlIGludGVycnVwdCBjb2FsZXNjaW5nIHBhcmFtZXRlciBzZXQgYnkgZXRodG9vbCB0byB0aGUgY2FyZC4KKyAqLworaW50IG5ldHhlbl9jb25maWdfaW50cl9jb2FsZXNjZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbnhfbmljX3JlcV90IHJlcTsKKwlpbnQgcnY7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKG54X25pY19yZXFfdCkpOworCisJcmVxLnFoZHIgfD0gKE5JQ19SRVFVRVNUIDw8IDIzKTsKKwlyZXEucmVxX2hkciB8PSBORVRYRU5fQ09ORklHX0lOVFJfQ09BTEVTQ0U7CisJcmVxLnJlcV9oZHIgfD0gKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7CisKKwltZW1jcHkoJnJlcS53b3Jkc1swXSwgJmFkYXB0ZXItPmNvYWwsIHNpemVvZihhZGFwdGVyLT5jb2FsKSk7CisKKwlydiA9IG5ldHhlbl9zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUi4gQ291bGQgbm90IHNlbmQgIgorCQkJImludGVycnVwdCBjb2FsZXNjaW5nIHBhcmFtZXRlcnNcbiIpOworCX0KKworCXJldHVybiBydjsKIH0KIAogLyoKICAqIG5ldHhlbl9uaWNfY2hhbmdlX210dSAtIENoYW5nZSB0aGUgTWF4aW11bSBUcmFuc2ZlciBVbml0CiAgKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKICAqLworCisjZGVmaW5lIE1UVV9GVURHRV9GQUNUT1IJMTAwCisKIGludCBuZXR4ZW5fbmljX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG10dSkKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCBlZmZfbXR1ID0gbXR1ICsgTkVUWEVOX0VORVRfSEVBREVSX1NJWkUgKyBORVRYRU5fRVRIX0ZDU19TSVpFOworCWludCBtYXhfbXR1OwogCi0JaWYgKChlZmZfbXR1ID4gTkVUWEVOX01BWF9NVFUpIHx8IChlZmZfbXR1IDwgTkVUWEVOX01JTl9NVFUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzICVkIGlzIG5vdCBzdXBwb3J0ZWQuXG4iLAotCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lLCBtdHUpOworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQltYXhfbXR1ID0gUDNfTUFYX01UVTsKKwllbHNlCisJCW1heF9tdHUgPSBQMl9NQVhfTVRVOworCisJaWYgKG10dSA+IG1heF9tdHUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbXR1ID4gJWQgYnl0ZXMgdW5zdXBwb3J0ZWRcbiIsCisJCQkJbmV0ZGV2LT5uYW1lLCBtYXhfbXR1KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNDQsMjIwICs2NjksMTUgQEAKIAkJYWRhcHRlci0+c2V0X210dShhZGFwdGVyLCBtdHUpOwogCW5ldGRldi0+bXR1ID0gbXR1OwogCisJbXR1ICs9IE1UVV9GVURHRV9GQUNUT1I7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCW54X2Z3X2NtZF9zZXRfbXR1KGFkYXB0ZXIsIG10dSk7CisJZWxzZSBpZiAoYWRhcHRlci0+c2V0X210dSkKKwkJYWRhcHRlci0+c2V0X210dShhZGFwdGVyLCBtdHUpOworCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBjaGVjayBpZiB0aGUgZmlybXdhcmUgaGFzIGJlZW4gZG93bmxvYWRlZCBhbmQgcmVhZHkgdG8gcnVuICBhbmQKLSAqIHNldHVwIHRoZSBhZGRyZXNzIGZvciB0aGUgZGVzY3JpcHRvcnMgaW4gdGhlIGFkYXB0ZXIKLSAqLwotaW50IG5ldHhlbl9uaWNfaHdfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgbmV0eGVuX2hhcmR3YXJlX2NvbnRleHQgKmh3ID0gJmFkYXB0ZXItPmFodzsKLQl1MzIgc3RhdGUgPSAwOwotCXZvaWQgKmFkZHI7Ci0JaW50IGxvb3BzID0gMCwgZXJyID0gMDsKLQlpbnQgY3R4LCByaW5nOwotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKLQlzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2N0eCAqcmN2X2Rlc2M7Ci0JaW50IGZ1bmNfaWQgPSBhZGFwdGVyLT5wb3J0bnVtOwotCi0JRFBSSU5USyhJTkZPLCAiY3JiX2Jhc2U6ICVseCAleCIsIE5FVFhFTl9QQ0lfQ1JCU1BBQ0UsCi0JCVBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsIE5FVFhFTl9QQ0lfQ1JCU1BBQ0UpKTsKLQlEUFJJTlRLKElORk8sICJjYW0gYmFzZTogJWx4ICV4IiwgTkVUWEVOX0NSQl9DQU0sCi0JCXBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0NBTSkpOwotCURQUklOVEsoSU5GTywgImNhbSBSQU06ICVseCAleCIsIE5FVFhFTl9DQU1fUkFNX0JBU0UsCi0JCXBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ0FNX1JBTV9CQVNFKSk7Ci0KLQotCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCURQUklOVEsoSU5GTywgIkNvbW1hbmQgUGVnIHJlYWR5Li53YWl0aW5nIGZvciByY3YgcGVnXG4iKTsKLQkJbG9vcHMgPSAwOwotCQlzdGF0ZSA9IDA7Ci0JCS8qIFdpbmRvdyAxIGNhbGwgKi8KLQkJc3RhdGUgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAotCQkJCQkJICAgcmVjdl9jcmJfcmVnaXN0ZXJzW2N0eF0uCi0JCQkJCQkgICBjcmJfcmN2cGVnX3N0YXRlKSk7Ci0JCXdoaWxlIChzdGF0ZSAhPSBQSEFOX1BFR19SQ1ZfSU5JVElBTElaRUQgJiYgbG9vcHMgPCAyMCkgewotCQkJbXNsZWVwKDEpOwotCQkJLyogV2luZG93IDEgY2FsbCAqLwotCQkJc3RhdGUgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAotCQkJCQkJCSAgIHJlY3ZfY3JiX3JlZ2lzdGVycwotCQkJCQkJCSAgIFtjdHhdLgotCQkJCQkJCSAgIGNyYl9yY3ZwZWdfc3RhdGUpKTsKLQkJCWxvb3BzKys7Ci0JCX0KLQkJaWYgKGxvb3BzID49IDIwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlJjdiBQZWcgaW5pdGlhbGl6YXRpb24gbm90IGNvbXBsZXRlOiIKLQkJCSAgICAgICAiJXguXG4iLCBzdGF0ZSk7Ci0JCQllcnIgPSAtRUlPOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IHJlYWRsKAotCQlORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfTklDX0NBUEFCSUxJVElFU19GVykpOwotCWFkYXB0ZXItPm1zaV9tb2RlID0gcmVhZGwoCi0JCU5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9OSUNfTVNJX01PREVfRlcpKTsKLQotCWFkZHIgPSBuZXR4ZW5fYWxsb2MoYWRhcHRlci0+YWh3LnBkZXYsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpICsKLQkJCSAgICBzaXplb2YodWludDMyX3QpLAotCQkJICAgIChkbWFfYWRkcl90ICopICYgYWRhcHRlci0+Y3R4X2Rlc2NfcGh5c19hZGRyLAotCQkJICAgICZhZGFwdGVyLT5jdHhfZGVzY19wZGV2KTsKLQotCWlmIChhZGRyID09IE5VTEwpIHsKLQkJRFBSSU5USyhFUlIsICJiYWQgcmV0dXJuIGZyb20gcGNpX2FsbG9jX2NvbnNpc3RlbnRcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlyZXR1cm4gZXJyOwotCX0KLQltZW1zZXQoYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpKTsKLQlhZGFwdGVyLT5jdHhfZGVzYyA9IChzdHJ1Y3QgbmV0eGVuX3JpbmdfY3R4ICopYWRkcjsKLQlhZGFwdGVyLT5jdHhfZGVzYy0+Y3R4X2lkID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+cG9ydG51bSk7Ci0JYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9jb25zdW1lcl9vZmZzZXQgPQotCSAgICBjcHVfdG9fbGU2NChhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIgKwotCQkJc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpKTsKLQlhZGFwdGVyLT5jbWRfY29uc3VtZXIgPSAoX19sZTMyICopICgoKGNoYXIgKilhZGRyKSArCi0JCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgbmV0eGVuX3JpbmdfY3R4KSk7Ci0KLQlhZGRyID0gbmV0eGVuX2FsbG9jKGFkYXB0ZXItPmFody5wZGV2LAotCQkJICAgIHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApICoKLQkJCSAgICBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCwKLQkJCSAgICAoZG1hX2FkZHJfdCAqKSAmIGh3LT5jbWRfZGVzY19waHlzX2FkZHIsCi0JCQkgICAgJmFkYXB0ZXItPmFody5jbWRfZGVzY19wZGV2KTsKLQotCWlmIChhZGRyID09IE5VTEwpIHsKLQkJRFBSSU5USyhFUlIsICJiYWQgcmV0dXJuIGZyb20gcGNpX2FsbG9jX2NvbnNpc3RlbnRcbiIpOwotCQluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWFkYXB0ZXItPmN0eF9kZXNjLT5jbWRfcmluZ19hZGRyID0KLQkJY3B1X3RvX2xlNjQoaHctPmNtZF9kZXNjX3BoeXNfYWRkcik7Ci0JYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9yaW5nX3NpemUgPQotCQljcHVfdG9fbGUzMihhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCk7Ci0KLQlody0+Y21kX2Rlc2NfaGVhZCA9IChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKilhZGRyOwotCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKLQotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgTlVNX1JDVl9ERVNDX1JJTkdTOyByaW5nKyspIHsKLQkJCXJjdl9kZXNjID0gJnJlY3ZfY3R4LT5yY3ZfZGVzY1tyaW5nXTsKLQkJCWFkZHIgPSBuZXR4ZW5fYWxsb2MoYWRhcHRlci0+YWh3LnBkZXYsCi0JCQkJCSAgICBSQ1ZfREVTQ19SSU5HU0laRSwKLQkJCQkJICAgICZyY3ZfZGVzYy0+cGh5c19hZGRyLAotCQkJCQkgICAgJnJjdl9kZXNjLT5waHlzX3BkZXYpOwotCQkJaWYgKGFkZHIgPT0gTlVMTCkgewotCQkJCURQUklOVEsoRVJSLCAiYmFkIHJldHVybiBmcm9tICIKLQkJCQkJInBjaV9hbGxvY19jb25zaXN0ZW50XG4iKTsKLQkJCQluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlyZXR1cm4gZXJyOwotCQkJfQotCQkJcmN2X2Rlc2MtPmRlc2NfaGVhZCA9IChzdHJ1Y3QgcmN2X2Rlc2MgKilhZGRyOwotCQkJYWRhcHRlci0+Y3R4X2Rlc2MtPnJjdl9jdHhbcmluZ10ucmN2X3JpbmdfYWRkciA9Ci0JCQkgICAgY3B1X3RvX2xlNjQocmN2X2Rlc2MtPnBoeXNfYWRkcik7Ci0JCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19zaXplID0KLQkJCSAgICBjcHVfdG9fbGUzMihyY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQpOwotCQl9Ci0KLQkJYWRkciA9IG5ldHhlbl9hbGxvYyhhZGFwdGVyLT5haHcucGRldiwgU1RBVFVTX0RFU0NfUklOR1NJWkUsCi0JCQkJICAgICZyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkciwKLQkJCQkgICAgJnJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGRldik7Ci0JCWlmIChhZGRyID09IE5VTEwpIHsKLQkJCURQUklOVEsoRVJSLCAiYmFkIHJldHVybiBmcm9tIgotCQkJCSIgcGNpX2FsbG9jX2NvbnNpc3RlbnRcbiIpOwotCQkJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkID0gKHN0cnVjdCBzdGF0dXNfZGVzYyAqKWFkZHI7Ci0JCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19hZGRyID0KLQkJICAgIGNwdV90b19sZTY0KHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKLQkJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX3NpemUgPQotCQkgICAgY3B1X3RvX2xlMzIoYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOwotCi0JfQotCS8qIFdpbmRvdyA9IDEgKi8KLQotCXdyaXRlbChsb3dlcjMyKGFkYXB0ZXItPmN0eF9kZXNjX3BoeXNfYWRkciksCi0JICAgICAgIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9DVFhfQUREUl9SRUdfTE8oZnVuY19pZCkpKTsKLQl3cml0ZWwodXBwZXIzMihhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIpLAotCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfQ1RYX0FERFJfUkVHX0hJKGZ1bmNfaWQpKSk7Ci0Jd3JpdGVsKE5FVFhFTl9DVFhfU0lHTkFUVVJFIHwgZnVuY19pZCwKLQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX0NUWF9TSUdOQVRVUkVfUkVHKGZ1bmNfaWQpKSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBuZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKLQlzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2N0eCAqcmN2X2Rlc2M7Ci0JaW50IGN0eCwgcmluZzsKLQotCWlmIChhZGFwdGVyLT5jdHhfZGVzYyAhPSBOVUxMKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+Y3R4X2Rlc2NfcGRldiwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpICsKLQkJCQkgICAgc2l6ZW9mKHVpbnQzMl90KSwKLQkJCQkgICAgYWRhcHRlci0+Y3R4X2Rlc2MsCi0JCQkJICAgIGFkYXB0ZXItPmN0eF9kZXNjX3BoeXNfYWRkcik7Ci0JCWFkYXB0ZXItPmN0eF9kZXNjID0gTlVMTDsKLQl9Ci0KLQlpZiAoYWRhcHRlci0+YWh3LmNtZF9kZXNjX2hlYWQgIT0gTlVMTCkgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPmFody5jbWRfZGVzY19wZGV2LAotCQkJCSAgICBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqCi0JCQkJICAgIGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50LAotCQkJCSAgICBhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCwKLQkJCQkgICAgYWRhcHRlci0+YWh3LmNtZF9kZXNjX3BoeXNfYWRkcik7Ci0JCWFkYXB0ZXItPmFody5jbWRfZGVzY19oZWFkID0gTlVMTDsKLQl9Ci0KLQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhdOwotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgTlVNX1JDVl9ERVNDX1JJTkdTOyByaW5nKyspIHsKLQkJCXJjdl9kZXNjID0gJnJlY3ZfY3R4LT5yY3ZfZGVzY1tyaW5nXTsKLQotCQkJaWYgKHJjdl9kZXNjLT5kZXNjX2hlYWQgIT0gTlVMTCkgewotCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocmN2X2Rlc2MtPnBoeXNfcGRldiwKLQkJCQkJCSAgICBSQ1ZfREVTQ19SSU5HU0laRSwKLQkJCQkJCSAgICByY3ZfZGVzYy0+ZGVzY19oZWFkLAotCQkJCQkJICAgIHJjdl9kZXNjLT5waHlzX2FkZHIpOwotCQkJCXJjdl9kZXNjLT5kZXNjX2hlYWQgPSBOVUxMOwotCQkJfQotCQl9Ci0KLQkJaWYgKHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZCAhPSBOVUxMKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGRldiwKLQkJCQkJICAgIFNUQVRVU19ERVNDX1JJTkdTSVpFLAotCQkJCQkgICAgcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkLAotCQkJCQkgICAgcmVjdl9jdHgtPgotCQkJCQkgICAgcmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcik7Ci0JCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQgPSBOVUxMOwotCQl9Ci0JfQotfQotCi12b2lkIG5ldHhlbl90c29fY2hlY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICBzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaWYgKGRlc2MtPm1zcykgewotCQlkZXNjLT50b3RhbF9oZHJfbGVuZ3RoID0gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArCi0JCQkJCSAgaXBfaGRybGVuKHNrYikgKyB0Y3BfaGRybGVuKHNrYikpOwotCQluZXR4ZW5fc2V0X2NtZF9kZXNjX29wY29kZShkZXNjLCBUWF9UQ1BfTFNPKTsKLQl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewotCQkJbmV0eGVuX3NldF9jbWRfZGVzY19vcGNvZGUoZGVzYywgVFhfVENQX1BLVCk7Ci0JCX0gZWxzZSBpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVURQKSB7Ci0JCQluZXR4ZW5fc2V0X2NtZF9kZXNjX29wY29kZShkZXNjLCBUWF9VRFBfUEtUKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlkZXNjLT50Y3BfaGRyX29mZnNldCA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7Ci0JZGVzYy0+aXBfaGRyX29mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpOwotfQotCiBpbnQgbmV0eGVuX2lzX2ZsYXNoX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJY29uc3QgaW50IGxvY3NbXSA9IHsgMCwgMHg0LCAweDEwMCwgMHg0MDAwLCAweDQxMjggfTsKQEAgLTYzMiw0MSArNzUyLDQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgQ1JCX1dJTl9MT0NLX1RJTUVPVVQgMTAwMDAwMDAwCisKK3N0YXRpYyBpbnQgY3JiX3dpbl9sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZG9uZSA9IDAsIHRpbWVvdXQgPSAwOworCisJd2hpbGUgKCFkb25lKSB7CisJCS8qIGFjcXVpcmUgc2VtYXBob3JlMyBmcm9tIFBDSSBIVyBibG9jayAqLworCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJTkVUWEVOX1BDSUVfUkVHKFBDSUVfU0VNN19MT0NLKSwgJmRvbmUsIDQpOworCQlpZiAoZG9uZSA9PSAxKQorCQkJYnJlYWs7CisJCWlmICh0aW1lb3V0ID49IENSQl9XSU5fTE9DS19USU1FT1VUKQorCQkJcmV0dXJuIC0xOworCQl0aW1lb3V0Kys7CisJCXVkZWxheSgxKTsKKwl9CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQlORVRYRU5fQ1JCX1dJTl9MT0NLX0lELCBhZGFwdGVyLT5wb3J0bnVtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3JiX3dpbl91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCB2YWw7CisKKwlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQlORVRYRU5fUENJRV9SRUcoUENJRV9TRU03X1VOTE9DSyksICZ2YWwsIDQpOworfQorCiAvKgogICogQ2hhbmdlcyB0aGUgQ1JCIHdpbmRvdyB0byB0aGUgc3BlY2lmaWVkIHdpbmRvdy4KICAqLwotdm9pZCBuZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHduZHcpCit2b2lkCituZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgd25kdykKIHsKIAl2b2lkIF9faW9tZW0gKm9mZnNldDsKIAl1MzIgdG1wOwogCWludCBjb3VudCA9IDA7CisJdWludDhfdCBmdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOwogCiAJaWYgKGFkYXB0ZXItPmN1cnJfd2luZG93ID09IHduZHcpCiAJCXJldHVybjsKLQlzd2l0Y2goYWRhcHRlci0+YWh3LnBjaV9mdW5jKSB7Ci0JCWNhc2UgMDoKLQkJCW9mZnNldCA9IFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsCi0JCQkJCU5FVFhFTl9QQ0lYX1BIX1JFRyhQQ0lYX0NSQl9XSU5ET1cpKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlvZmZzZXQgPSBQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLAotCQkJCQlORVRYRU5fUENJWF9QSF9SRUcoUENJWF9DUkJfV0lORE9XX0YxKSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJb2Zmc2V0ID0gUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwKLQkJCQkJTkVUWEVOX1BDSVhfUEhfUkVHKFBDSVhfQ1JCX1dJTkRPV19GMikpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCW9mZnNldCA9IFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsCi0JCQkJCU5FVFhFTl9QQ0lYX1BIX1JFRyhQQ0lYX0NSQl9XSU5ET1dfRjMpKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2hhbmdpbmcgdGhlIHdpbmRvdyBmb3IgUENJIGZ1bmN0aW9uICIKLQkJCQkJIiVkXG4iLAlhZGFwdGVyLT5haHcucGNpX2Z1bmMpOwotCQkJb2Zmc2V0ID0gUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwKLQkJCQkJTkVUWEVOX1BDSVhfUEhfUkVHKFBDSVhfQ1JCX1dJTkRPVykpOwotCQkJYnJlYWs7Ci0JfQogCS8qCiAJICogTW92ZSB0aGUgQ1JCIHdpbmRvdy4KIAkgKiBXZSBuZWVkIHRvIHdyaXRlIHRvIHRoZSAiZGlyZWN0IGFjY2VzcyIgcmVnaW9uIG9mIFBDSQpAQCAtNjc1LDYgKzgwMyw4IEBACiAJICogcmVnaXN0ZXIgYWRkcmVzcyBpcyByZWNlaXZlZCBieSBQQ0kuIFRoZSBkaXJlY3QgcmVnaW9uIGJ5cGFzc2VzCiAJICogdGhlIENSQiBidXMuCiAJICovCisJb2Zmc2V0ID0gUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwKKwkJCU5FVFhFTl9QQ0lYX1BIX1JFRyhQQ0lFX0NSQl9XSU5ET1dfUkVHKGZ1bmMpKSk7CiAKIAlpZiAod25kdyAmIDB4MSkKIAkJd25kdyA9IE5FVFhFTl9XSU5ET1dfT05FOwpAQCAtNjg1LDcgKzgxNSw3IEBACiAJd2hpbGUgKCh0bXAgPSByZWFkbChvZmZzZXQpKSAhPSB3bmR3KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyBXQVJOSU5HOiBDUkIgd2luZG93IHZhbHVlIG5vdCAiCiAJCSAgICAgICAicmVnaXN0ZXJlZCBwcm9wZXJseTogMHglMDh4LlxuIiwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIF9fRlVOQ1RJT05fXywgdG1wKTsKKwkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIF9fZnVuY19fLCB0bXApOwogCQltZGVsYXkoMSk7CiAJCWlmIChjb3VudCA+PSAxMCkKIAkJCWJyZWFrOwpAQCAtNjk4LDUxICs4MjgsMTE5IEBACiAJCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMDsKIH0KIAorLyoKKyAqIFJldHVybiAtMSBpZiBvZmYgaXMgbm90IHZhbGlkLAorICoJIDEgaWYgd2luZG93IGFjY2VzcyBpcyBuZWVkZWQuICdvZmYnIGlzIHNldCB0byBvZmZzZXQgZnJvbQorICoJICAgQ1JCIHNwYWNlIGluIDEyOE0gcGNpIG1hcAorICoJIDAgaWYgbm8gd2luZG93IGFjY2VzcyBpcyBuZWVkZWQuICdvZmYnIGlzIHNldCB0byAyTSBhZGRyCisgKiBJbjogJ29mZicgaXMgb2Zmc2V0IGZyb20gYmFzZSBpbiAxMjhNIHBjaSBtYXAKKyAqLworc3RhdGljIGludAorbmV0eGVuX25pY19wY2lfZ2V0X2NyYl9hZGRyXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdWxvbmcgKm9mZiwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGVuZCA9ICpvZmYgKyBsZW47CisJY3JiXzEyOE1fMk1fc3ViX2Jsb2NrX21hcF90ICptOworCisKKwlpZiAoKm9mZiA+PSBORVRYRU5fQ1JCX01BWCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCpvZmYgPj0gTkVUWEVOX1BDSV9DQU1RTSAmJiAoZW5kIDw9IE5FVFhFTl9QQ0lfQ0FNUU1fMk1fRU5EKSkgeworCQkqb2ZmID0gKCpvZmYgLSBORVRYRU5fUENJX0NBTVFNKSArIE5FVFhFTl9QQ0lfQ0FNUU1fMk1fQkFTRSArCisJCQkodWxvbmcpYWRhcHRlci0+YWh3LnBjaV9iYXNlMDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCpvZmYgPCBORVRYRU5fUENJX0NSQlNQQUNFKQorCQlyZXR1cm4gLTE7CisKKwkqb2ZmIC09IE5FVFhFTl9QQ0lfQ1JCU1BBQ0U7CisJZW5kID0gKm9mZiArIGxlbjsKKworCS8qCisJICogVHJ5IGRpcmVjdCBtYXAKKwkgKi8KKwltID0gJmNyYl8xMjhNXzJNX21hcFtDUkJfQkxLKCpvZmYpXS5zdWJfYmxvY2tbQ1JCX1NVQkJMSygqb2ZmKV07CisKKwlpZiAobS0+dmFsaWQgJiYgKG0tPnN0YXJ0XzEyOE0gPD0gKm9mZikgJiYgKG0tPmVuZF8xMjhNID49IGVuZCkpIHsKKwkJKm9mZiA9ICpvZmYgKyBtLT5zdGFydF8yTSAtIG0tPnN0YXJ0XzEyOE0gKworCQkJKHVsb25nKWFkYXB0ZXItPmFody5wY2lfYmFzZTA7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTm90IGluIGRpcmVjdCBtYXAsIHVzZSBjcmIgd2luZG93CisJICovCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJbjogJ29mZicgaXMgb2Zmc2V0IGZyb20gQ1JCIHNwYWNlIGluIDEyOE0gcGNpIG1hcAorICogT3V0OiAnb2ZmJyBpcyAyTSBwY2kgbWFwIGFkZHIKKyAqIHNpZGUgZWZmZWN0OiBsb2NrIGNyYiB3aW5kb3cKKyAqLworc3RhdGljIHZvaWQKK25ldHhlbl9uaWNfcGNpX3NldF9jcmJ3aW5kb3dfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1bG9uZyAqb2ZmKQoreworCXUzMiB3aW5fcmVhZDsKKworCWFkYXB0ZXItPmNyYl93aW4gPSBDUkJfSEkoKm9mZik7CisJd3JpdGVsKGFkYXB0ZXItPmNyYl93aW4sICh2b2lkICopKENSQl9XSU5ET1dfMk0gKworCQlhZGFwdGVyLT5haHcucGNpX2Jhc2UwKSk7CisJLyoKKwkgKiBSZWFkIGJhY2sgdmFsdWUgdG8gbWFrZSBzdXJlIHdyaXRlIGhhcyBnb25lIHRocm91Z2ggYmVmb3JlIHRyeWluZworCSAqIHRvIHVzZSBpdC4KKwkgKi8KKwl3aW5fcmVhZCA9IHJlYWRsKCh2b2lkICopKENSQl9XSU5ET1dfMk0gKyBhZGFwdGVyLT5haHcucGNpX2Jhc2UwKSk7CisJaWYgKHdpbl9yZWFkICE9IGFkYXB0ZXItPmNyYl93aW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogV3JpdHRlbiBjcmJ3aW4gKDB4JXgpICE9ICIKKwkJCQkiUmVhZCBjcmJ3aW4gKDB4JXgpLCBvZmY9MHglbHhcbiIsCisJCQkJX19mdW5jX18sIGFkYXB0ZXItPmNyYl93aW4sIHdpbl9yZWFkLCAqb2ZmKTsKKwl9CisJKm9mZiA9ICgqb2ZmICYgTUFTSygxNikpICsgQ1JCX0lORElSRUNUXzJNICsKKwkJKHVsb25nKWFkYXB0ZXItPmFody5wY2lfYmFzZTA7Cit9CisKIGludCBuZXR4ZW5fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGk7CiAJdTMyIGRhdGEsIHNpemUgPSAwOwotCXUzMiBmbGFzaGFkZHIgPSBORVRYRU5fRkxBU0hfQkFTRSwgbWVtYWRkciA9IE5FVFhFTl9QSEFOVE9NX01FTV9CQVNFOwotCXU2NCBvZmY7Ci0Jdm9pZCBfX2lvbWVtICphZGRyOworCXUzMiBmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJULCBtZW1hZGRyID0gTkVUWEVOX0JPT1RMRF9TVEFSVDsKIAotCXNpemUgPSBORVRYRU5fRklSTVdBUkVfTEVOOwotCXdyaXRlbCgxLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX0dMQl9DQVNfUlNUKSk7CisJc2l6ZSA9IChORVRYRU5fSU1BR0VfU1RBUlQgLSBORVRYRU5fQk9PVExEX1NUQVJUKS80OworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKKwkJCQlORVRYRU5fUk9NVVNCX0dMQl9DQVNfUlNULCAxKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJaW50IHJldHJpZXMgPSAxMDsKIAkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGZsYXNoYWRkciwgKGludCAqKSZkYXRhKSAhPSAwKQogCQkJcmV0dXJuIC1FSU87CiAKLQkJb2ZmID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvdyhhZGFwdGVyLCBtZW1hZGRyKTsKLQkJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpOwotCQl3cml0ZWwoZGF0YSwgYWRkcik7Ci0JCWRvIHsKLQkJCWlmIChyZWFkbChhZGRyKSA9PSBkYXRhKQotCQkJCWJyZWFrOwotCQkJbXNsZWVwKDEwMCk7Ci0JCQl3cml0ZWwoZGF0YSwgYWRkcik7Ci0JCX0gd2hpbGUgKC0tcmV0cmllcyk7Ci0JCWlmICghcmV0cmllcykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmlybXdhcmUgbG9hZCBhYm9ydGVkLCB3cml0ZSBmYWlsZWQgYXQgMHgleFxuIiwKLQkJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbWVtYWRkcik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQorCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsIG1lbWFkZHIsICZkYXRhLCA0KTsKIAkJZmxhc2hhZGRyICs9IDQ7CiAJCW1lbWFkZHIgKz0gNDsKKwkJY29uZF9yZXNjaGVkKCk7CiAJfQotCXVkZWxheSgxMDApOwotCS8qIG1ha2Ugc3VyZSBDYXNwZXIgaXMgcG93ZXJlZCBvbiAqLwotCXdyaXRlbCgweDNmZmYsCi0JICAgICAgIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfR0xCX0NISVBfQ0xLX0NUUkwpKTsKLQl3cml0ZWwoMCwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9HTEJfQ0FTX1JTVCkpOworCW1zbGVlcCgxKTsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJTkVUWEVOX1JPTVVTQl9HTEJfU1dfUkVTRVQsIDB4ODAwMDFkKTsKKwllbHNlIHsKKwkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJCU5FVFhFTl9ST01VU0JfR0xCX0NISVBfQ0xLX0NUUkwsIDB4M2ZmZik7CisJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKKwkJCQlORVRYRU5fUk9NVVNCX0dMQl9DQVNfUlNULCAwKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogaW50Ci1uZXR4ZW5fbmljX2h3X3dyaXRlX3d4KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwgdm9pZCAqZGF0YSwKLQkJICAgICAgIGludCBsZW4pCituZXR4ZW5fbmljX2h3X3dyaXRlX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCkBAIC03NTAsNyArOTQ4LDcgQEAKIAkJYWRkciA9IE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIG9mZik7CiAJfSBlbHNlIHsJCS8qIFdpbmRvdyAwICovCiAJCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKLQkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAwKTsKKwkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCX0KIAogCURQUklOVEsoSU5GTywgIndyaXRpbmcgdG8gYmFzZSAlbHggb2Zmc2V0ICVsbHggYWRkciAlcCIKQEAgLTc1OCw3ICs5NTYsNyBAQAogCQlwY2lfYmFzZShhZGFwdGVyLCBvZmYpLCBvZmYsIGFkZHIsCiAJCSoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSwgbGVuKTsKIAlpZiAoIWFkZHIpIHsKLQkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAxKTsKKwkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTc4NSwxNCArOTgzLDE0IEBACiAJCWJyZWFrOwogCX0KIAlpZiAoIUFERFJfSU5fV0lORE9XMShvZmYpKQotCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOworCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogaW50Ci1uZXR4ZW5fbmljX2h3X3JlYWRfd3goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLCB2b2lkICpkYXRhLAotCQkgICAgICBpbnQgbGVuKQorbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCkBAIC04MDAsMTMgKzk5OCwxMyBAQAogCQlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKIAl9IGVsc2UgewkJLyogV2luZG93IDAgKi8KIAkJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpOwotCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDApOworCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7CiAJfQogCiAJRFBSSU5USyhJTkZPLCAicmVhZGluZyBmcm9tIGJhc2UgJWx4IG9mZnNldCAlbGx4IGFkZHIgJXBcbiIsCiAJCXBjaV9iYXNlKGFkYXB0ZXIsIG9mZiksIG9mZiwgYWRkcik7CiAJaWYgKCFhZGRyKSB7Ci0JCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMSk7CisJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKIAkJcmV0dXJuIDE7CiAJfQogCXN3aXRjaCAobGVuKSB7CkBAIC04MzAsODEgKzEwMjgsMTk1IEBACiAJRFBSSU5USyhJTkZPLCAicmVhZCAlbHhcbiIsICoodW5zaWduZWQgbG9uZyAqKWRhdGEpOwogCiAJaWYgKCFBRERSX0lOX1dJTkRPVzEob2ZmKSkKLQkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAxKTsKKwkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAorbmV0eGVuX25pY19od193cml0ZV93eF8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXVsb25nIG9mZiwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpbnQgcnY7CisKKwlydiA9IG5ldHhlbl9uaWNfcGNpX2dldF9jcmJfYWRkcl8yTShhZGFwdGVyLCAmb2ZmLCBsZW4pOworCisJaWYgKHJ2ID09IC0xKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgb2Zmc2V0OiAweCUwMTZseFxuIiwKKwkJCQlfX2Z1bmNfXywgb2ZmKTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHJ2ID09IDEpIHsKKwkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwkJY3JiX3dpbl9sb2NrKGFkYXB0ZXIpOworCQluZXR4ZW5fbmljX3BjaV9zZXRfY3Jid2luZG93XzJNKGFkYXB0ZXIsICZvZmYpOworCX0KKworCURQUklOVEsoMSwgSU5GTywgIndyaXRlIGRhdGEgJWx4IHRvIG9mZnNldCAlbGx4LCBsZW49JWRcbiIsCisJCQkqKHVuc2lnbmVkIGxvbmcgKilkYXRhLCBvZmYsIGxlbik7CisKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMToKKwkJd3JpdGViKCoodWludDhfdCAqKWRhdGEsICh2b2lkICopb2ZmKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3cml0ZXcoKih1aW50MTZfdCAqKWRhdGEsICh2b2lkICopb2ZmKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl3cml0ZWwoKih1aW50MzJfdCAqKWRhdGEsICh2b2lkICopb2ZmKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQl3cml0ZXEoKih1aW50NjRfdCAqKWRhdGEsICh2b2lkICopb2ZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5USygxLCBJTkZPLAorCQkJIndyaXRpbmcgZGF0YSAlbHggdG8gb2Zmc2V0ICVsbHgsIG51bSB3b3Jkcz0lZFxuIiwKKwkJCSoodW5zaWduZWQgbG9uZyAqKWRhdGEsIG9mZiwgKGxlbj4+MykpOworCQlicmVhazsKKwl9CisJaWYgKHJ2ID09IDEpIHsKKwkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50CituZXR4ZW5fbmljX2h3X3JlYWRfd3hfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaW50IHJ2OworCisJcnYgPSBuZXR4ZW5fbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgJm9mZiwgbGVuKTsKKworCWlmIChydiA9PSAtMSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIG9mZnNldDogMHglMDE2bHhcbiIsCisJCQkJX19mdW5jX18sIG9mZik7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChydiA9PSAxKSB7CisJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CisJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKKwkJbmV0eGVuX25pY19wY2lfc2V0X2NyYndpbmRvd18yTShhZGFwdGVyLCAmb2ZmKTsKKwl9CisKKwlEUFJJTlRLKDEsIElORk8sICJyZWFkIGZyb20gb2Zmc2V0ICVseCwgbGVuPSVkXG4iLCBvZmYsIGxlbik7CisKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMToKKwkJKih1aW50OF90ICopZGF0YSA9IHJlYWRiKCh2b2lkICopb2ZmKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqKHVpbnQxNl90ICopZGF0YSA9IHJlYWR3KCh2b2lkICopb2ZmKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQkqKHVpbnQzMl90ICopZGF0YSA9IHJlYWRsKCh2b2lkICopb2ZmKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQkqKHVpbnQ2NF90ICopZGF0YSA9IHJlYWRxKCh2b2lkICopb2ZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbHhcbiIsICoodW5zaWduZWQgbG9uZyAqKWRhdGEpOworCisJaWYgKHJ2ID09IDEpIHsKKwkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCBuZXR4ZW5fbmljX3JlZ193cml0ZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYsIHUzMiB2YWwpCi17CQkJCS8qIE9ubHkgZm9yIHdpbmRvdyAxICovCi0Jdm9pZCBfX2lvbWVtICphZGRyOwotCi0JYWRkciA9IE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIG9mZik7Ci0JRFBSSU5USyhJTkZPLCAid3JpdGluZyB0byBiYXNlICVseCBvZmZzZXQgJWxseCBhZGRyICVwIGRhdGEgJXhcbiIsCi0JCXBjaV9iYXNlKGFkYXB0ZXIsIG9mZiksIG9mZiwgYWRkciwgdmFsKTsKLQl3cml0ZWwodmFsLCBhZGRyKTsKLQoreworCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIG9mZiwgJnZhbCwgNCk7CiB9CiAKIGludCBuZXR4ZW5fbmljX3JlZ19yZWFkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZikKLXsJCQkJLyogT25seSBmb3Igd2luZG93IDEgKi8KLQl2b2lkIF9faW9tZW0gKmFkZHI7Cit7CiAJaW50IHZhbDsKLQotCWFkZHIgPSBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmYpOwotCURQUklOVEsoSU5GTywgInJlYWRpbmcgZnJvbSBiYXNlICVseCBvZmZzZXQgJWxseCBhZGRyICVwXG4iLAotCQlwY2lfYmFzZShhZGFwdGVyLCBvZmYpLCBvZmYsIGFkZHIpOwotCXZhbCA9IHJlYWRsKGFkZHIpOwotCXdyaXRlbCh2YWwsIGFkZHIpOwotCisJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBvZmYsICZ2YWwsIDQpOwogCXJldHVybiB2YWw7CiB9CiAKIC8qIENoYW5nZSB0aGUgd2luZG93IHRvIDAsIHdyaXRlIGFuZCBjaGFuZ2UgYmFjayB0byB3aW5kb3cgMS4gKi8KIHZvaWQgbmV0eGVuX25pY193cml0ZV93MChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpbmRleCwgdTMyIHZhbHVlKQogewotCXZvaWQgX19pb21lbSAqYWRkcjsKLQotCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMCk7Ci0JYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBpbmRleCk7Ci0Jd3JpdGVsKHZhbHVlLCBhZGRyKTsKLQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOworCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIGluZGV4LCAmdmFsdWUsIDQpOwogfQogCiAvKiBDaGFuZ2UgdGhlIHdpbmRvdyB0byAwLCByZWFkIGFuZCBjaGFuZ2UgYmFjayB0byB3aW5kb3cgMS4gKi8KLXZvaWQgbmV0eGVuX25pY19yZWFkX3cwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgKiB2YWx1ZSkKK3ZvaWQgbmV0eGVuX25pY19yZWFkX3cwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgKnZhbHVlKQogewotCXZvaWQgX19pb21lbSAqYWRkcjsKKwlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIGluZGV4LCB2YWx1ZSwgNCk7Cit9CiAKLQlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIGluZGV4KTsKK3ZvaWQgbmV0eGVuX25pY193cml0ZV93MShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpbmRleCwgdTMyIHZhbHVlKQoreworCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIGluZGV4LCAmdmFsdWUsIDQpOworfQogCi0JbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAwKTsKLQkqdmFsdWUgPSByZWFkbChhZGRyKTsKLQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOwordm9pZCBuZXR4ZW5fbmljX3JlYWRfdzEoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgaW5kZXgsIHUzMiAqdmFsdWUpCit7CisJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBpbmRleCwgdmFsdWUsIDQpOworfQorCisvKgorICogY2hlY2sgbWVtb3J5IGFjY2VzcyBib3VuZGFyeS4KKyAqIHVzZWQgYnkgdGVzdCBhZ2VudC4gc3VwcG9ydCBkZHIgYWNjZXNzIG9ubHkgZm9yIG5vdworICovCitzdGF0aWMgdW5zaWduZWQgbG9uZworbmV0eGVuX25pY19wY2lfbWVtX2JvdW5kX2NoZWNrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdW5zaWduZWQgbG9uZyBsb25nIGFkZHIsIGludCBzaXplKQoreworCWlmICghQUREUl9JTl9SQU5HRShhZGRyLAorCQkJTkVUWEVOX0FERFJfRERSX05FVCwgTkVUWEVOX0FERFJfRERSX05FVF9NQVgpIHx8CisJCSFBRERSX0lOX1JBTkdFKGFkZHIrc2l6ZS0xLAorCQkJTkVUWEVOX0FERFJfRERSX05FVCwgTkVUWEVOX0FERFJfRERSX05FVF9NQVgpIHx8CisJCSgoc2l6ZSAhPSAxKSAmJiAoc2l6ZSAhPSAyKSAmJiAoc2l6ZSAhPSA0KSAmJiAoc2l6ZSAhPSA4KSkpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgbmV0eGVuX3BjaV9zZXRfd2luZG93X3dhcm5pbmdfY291bnQ7CiAKLXN0YXRpYyAgdW5zaWduZWQgbG9uZyBuZXR4ZW5fbmljX3BjaV9zZXRfd2luZG93KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKQordW5zaWduZWQgbG9uZworbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpCiB7Ci0Jc3RhdGljIGludCBkZHJfbW5fd2luZG93ID0gLTE7Ci0Jc3RhdGljIGludCBxZHJfc25fd2luZG93ID0gLTE7CisJdm9pZCBfX2lvbWVtICpvZmZzZXQ7CiAJaW50IHdpbmRvdzsKKwl1bnNpZ25lZCBsb25nIGxvbmcJcWRyX21heDsKKwl1aW50OF90IGZ1bmMgPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlxZHJfbWF4ID0gTkVUWEVOX0FERFJfUURSX05FVF9NQVhfUDI7CisJfSBlbHNlIHsKKwkJcWRyX21heCA9IE5FVFhFTl9BRERSX1FEUl9ORVRfTUFYX1AzOworCX0KIAogCWlmIChBRERSX0lOX1JBTkdFKGFkZHIsIE5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSkgewogCQkvKiBERFIgbmV0d29yayBzaWRlICovCiAJCWFkZHIgLT0gTkVUWEVOX0FERFJfRERSX05FVDsKIAkJd2luZG93ID0gKGFkZHIgPj4gMjUpICYgMHgzZmY7Ci0JCWlmIChkZHJfbW5fd2luZG93ICE9IHdpbmRvdykgewotCQkJZGRyX21uX3dpbmRvdyA9IHdpbmRvdzsKLQkJCXdyaXRlbCh3aW5kb3csIFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsCi0JCQkJCQkJICAgICAgIE5FVFhFTl9QQ0lYX1BIX1JFRwotCQkJCQkJCSAgICAgICAoUENJWF9NTl9XSU5ET1coYWRhcHRlci0+YWh3LnBjaV9mdW5jKSkpKTsKKwkJaWYgKGFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ICE9IHdpbmRvdykgeworCQkJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSB3aW5kb3c7CisJCQlvZmZzZXQgPSBQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLAorCQkJCU5FVFhFTl9QQ0lYX1BIX1JFRyhQQ0lFX01OX1dJTkRPV19SRUcoZnVuYykpKTsKKwkJCXdyaXRlbCh3aW5kb3csIG9mZnNldCk7CiAJCQkvKiBNVVNUIG1ha2Ugc3VyZSB3aW5kb3cgaXMgc2V0IGJlZm9yZSB3ZSBmb3JnZSBvbi4uLiAqLwotCQkJcmVhZGwoUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwKLQkJCQkJCSAgICAgIE5FVFhFTl9QQ0lYX1BIX1JFRwotCQkJCQkJICAgICAgKFBDSVhfTU5fV0lORE9XKGFkYXB0ZXItPmFody5wY2lfZnVuYykpKSk7CisJCQlyZWFkbChvZmZzZXQpOwogCQl9CiAJCWFkZHIgLT0gKHdpbmRvdyAqIE5FVFhFTl9XSU5ET1dfT05FKTsKIAkJYWRkciArPSBORVRYRU5fUENJX0REUl9ORVQ7CkBAIC05MTQsMjIgKzEyMjYsMTcgQEAKIAl9IGVsc2UgaWYgKEFERFJfSU5fUkFOR0UoYWRkciwgTkVUWEVOX0FERFJfT0NNMSwgTkVUWEVOX0FERFJfT0NNMV9NQVgpKSB7CiAJCWFkZHIgLT0gTkVUWEVOX0FERFJfT0NNMTsKIAkJYWRkciArPSBORVRYRU5fUENJX09DTTE7Ci0JfSBlbHNlCi0JICAgIGlmIChBRERSX0lOX1JBTkdFCi0JCShhZGRyLCBORVRYRU5fQUREUl9RRFJfTkVULCBORVRYRU5fQUREUl9RRFJfTkVUX01BWCkpIHsKKwl9IGVsc2UgaWYgKEFERFJfSU5fUkFOR0UoYWRkciwgTkVUWEVOX0FERFJfUURSX05FVCwgcWRyX21heCkpIHsKIAkJLyogUURSIG5ldHdvcmsgc2lkZSAqLwogCQlhZGRyIC09IE5FVFhFTl9BRERSX1FEUl9ORVQ7CiAJCXdpbmRvdyA9IChhZGRyID4+IDIyKSAmIDB4M2Y7Ci0JCWlmIChxZHJfc25fd2luZG93ICE9IHdpbmRvdykgewotCQkJcWRyX3NuX3dpbmRvdyA9IHdpbmRvdzsKLQkJCXdyaXRlbCgod2luZG93IDw8IDIyKSwKLQkJCSAgICAgICBQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLAotCQkJCQkJICAgICAgIE5FVFhFTl9QQ0lYX1BIX1JFRwotCQkJCQkJICAgICAgIChQQ0lYX1NOX1dJTkRPVyhhZGFwdGVyLT5haHcucGNpX2Z1bmMpKSkpOworCQlpZiAoYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgIT0gd2luZG93KSB7CisJCQlhZGFwdGVyLT5haHcucWRyX3NuX3dpbmRvdyA9IHdpbmRvdzsKKwkJCW9mZnNldCA9IFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsCisJCQkJTkVUWEVOX1BDSVhfUEhfUkVHKFBDSUVfU05fV0lORE9XX1JFRyhmdW5jKSkpOworCQkJd3JpdGVsKCh3aW5kb3cgPDwgMjIpLCBvZmZzZXQpOwogCQkJLyogTVVTVCBtYWtlIHN1cmUgd2luZG93IGlzIHNldCBiZWZvcmUgd2UgZm9yZ2Ugb24uLi4gKi8KLQkJCXJlYWRsKFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsCi0JCQkJCQkgICAgICBORVRYRU5fUENJWF9QSF9SRUcKLQkJCQkJCSAgICAgIChQQ0lYX1NOX1dJTkRPVyhhZGFwdGVyLT5haHcucGNpX2Z1bmMpKSkpOworCQkJcmVhZGwob2Zmc2V0KTsKIAkJfQogCQlhZGRyIC09ICh3aW5kb3cgKiAweDQwMDAwMCk7CiAJCWFkZHIgKz0gTkVUWEVOX1BDSV9RRFJfTkVUOwpAQCAtOTQzLDExICsxMjUwLDcxMSBAQAogCQkJcHJpbnRrKCIlczogV2FybmluZzpuZXR4ZW5fbmljX3BjaV9zZXRfd2luZG93KCkiCiAJCQkgICAgICAgIiBVbmtub3duIGFkZHJlc3MgcmFuZ2UhXG4iLAogCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCisJCWFkZHIgPSAtMVVMOwogCX0KIAlyZXR1cm4gYWRkcjsKIH0KIAorLyoKKyAqIE5vdGUgOiBvbmx5IDMyLWJpdCB3cml0ZXMhCisgKi8KK2ludCBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHUzMiBkYXRhKQoreworCXdyaXRlbChkYXRhLCAodm9pZCBfX2lvbWVtICopKFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsIG9mZikpKTsKKwlyZXR1cm4gMDsKK30KKwordTMyIG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmKQoreworCXJldHVybiByZWFkbCgodm9pZCBfX2lvbWVtICopKHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpKSk7Cit9CisKK3ZvaWQgbmV0eGVuX25pY19wY2lfd3JpdGVfbm9ybWFsaXplXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1NjQgb2ZmLCB1MzIgZGF0YSkKK3sKKwl3cml0ZWwoZGF0YSwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKSk7Cit9CisKK3UzMiBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZikKK3sKKwlyZXR1cm4gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcKK25ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcikKK3sKKwlpbnQgd2luZG93OworCXUzMiB3aW5fcmVhZDsKKworCWlmIChBRERSX0lOX1JBTkdFKGFkZHIsIE5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSkgeworCQkvKiBERFIgbmV0d29yayBzaWRlICovCisJCXdpbmRvdyA9IE1OX1dJTihhZGRyKTsKKwkJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSB3aW5kb3c7CisJCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCQkJYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIgfCBORVRYRU5fUENJX0NSQlNQQUNFLAorCQkJCSZ3aW5kb3csIDQpOworCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIgfCBORVRYRU5fUENJX0NSQlNQQUNFLAorCQkJCSZ3aW5fcmVhZCwgNCk7CisJCWlmICgod2luX3JlYWQgPDwgMTcpICE9IHdpbmRvdykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiV3JpdHRlbiBNTndpbiAoMHgleCkgIT0gIgorCQkJCSJSZWFkIE1Od2luICgweCV4KVxuIiwgd2luZG93LCB3aW5fcmVhZCk7CisJCX0KKwkJYWRkciA9IEdFVF9NRU1fT0ZGU18yTShhZGRyKSArIE5FVFhFTl9QQ0lfRERSX05FVDsKKwl9IGVsc2UgaWYgKEFERFJfSU5fUkFOR0UoYWRkciwKKwkJCQlORVRYRU5fQUREUl9PQ00wLCBORVRYRU5fQUREUl9PQ00wX01BWCkpIHsKKwkJaWYgKChhZGRyICYgMHgwMGZmODAwKSA9PSAweGZmODAwKSB7CisJCQlwcmludGsoIiVzOiBRTSBhY2Nlc3Mgbm90IGhhbmRsZWQuXG4iLCBfX2Z1bmNfXyk7CisJCQlhZGRyID0gLTFVTDsKKwkJfQorCisJCXdpbmRvdyA9IE9DTV9XSU4oYWRkcik7CisJCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gd2luZG93OworCQlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAorCQkJCWFkYXB0ZXItPmFody5tbl93aW5fY3JiIHwgTkVUWEVOX1BDSV9DUkJTUEFDRSwKKwkJCQkmd2luZG93LCA0KTsKKwkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQkJCWFkYXB0ZXItPmFody5tbl93aW5fY3JiIHwgTkVUWEVOX1BDSV9DUkJTUEFDRSwKKwkJCQkmd2luX3JlYWQsIDQpOworCQlpZiAoKHdpbl9yZWFkID4+IDcpICE9IHdpbmRvdykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdyaXR0ZW4gT0NNd2luICgweCV4KSAhPSAiCisJCQkJCSJSZWFkIE9DTXdpbiAoMHgleClcbiIsCisJCQkJCV9fZnVuY19fLCB3aW5kb3csIHdpbl9yZWFkKTsKKwkJfQorCQlhZGRyID0gR0VUX01FTV9PRkZTXzJNKGFkZHIpICsgTkVUWEVOX1BDSV9PQ00wXzJNOworCisJfSBlbHNlIGlmIChBRERSX0lOX1JBTkdFKGFkZHIsCisJCQlORVRYRU5fQUREUl9RRFJfTkVULCBORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMykpIHsKKwkJLyogUURSIG5ldHdvcmsgc2lkZSAqLworCQl3aW5kb3cgPSBNU19XSU4oYWRkcik7CisJCWFkYXB0ZXItPmFody5xZHJfc25fd2luZG93ID0gd2luZG93OworCQlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAorCQkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiIHwgTkVUWEVOX1BDSV9DUkJTUEFDRSwKKwkJCQkmd2luZG93LCA0KTsKKwkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiIHwgTkVUWEVOX1BDSV9DUkJTUEFDRSwKKwkJCQkmd2luX3JlYWQsIDQpOworCQlpZiAod2luX3JlYWQgIT0gd2luZG93KSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogV3JpdHRlbiBNU3dpbiAoMHgleCkgIT0gIgorCQkJCQkiUmVhZCBNU3dpbiAoMHgleClcbiIsCisJCQkJCV9fZnVuY19fLCB3aW5kb3csIHdpbl9yZWFkKTsKKwkJfQorCQlhZGRyID0gR0VUX01FTV9PRkZTXzJNKGFkZHIpICsgTkVUWEVOX1BDSV9RRFJfTkVUOworCisJfSBlbHNlIHsKKwkJLyoKKwkJICogcGVnIGdkYiBmcmVxdWVudGx5IGFjY2Vzc2VzIG1lbW9yeSB0aGF0IGRvZXNuJ3QgZXhpc3QsCisJCSAqIHRoaXMgbGltaXRzIHRoZSBjaGl0IGNoYXQgc28gZGVidWdnaW5nIGlzbid0IHNsb3dlZCBkb3duLgorCQkgKi8KKwkJaWYgKChuZXR4ZW5fcGNpX3NldF93aW5kb3dfd2FybmluZ19jb3VudCsrIDwgOCkKKwkJCXx8IChuZXR4ZW5fcGNpX3NldF93aW5kb3dfd2FybmluZ19jb3VudCU2NCA9PSAwKSkgeworCQkJcHJpbnRrKCIlczogV2FybmluZzolcyBVbmtub3duIGFkZHJlc3MgcmFuZ2UhXG4iLAorCQkJCQlfX2Z1bmNfXywgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Cit9CisJCWFkZHIgPSAtMVVMOworCX0KKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIGludCBuZXR4ZW5fbmljX3BjaV9pc19zYW1lX3dpbmRvdyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpCit7CisJaW50IHdpbmRvdzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcWRyX21heDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlxZHJfbWF4ID0gTkVUWEVOX0FERFJfUURSX05FVF9NQVhfUDI7CisJZWxzZQorCQlxZHJfbWF4ID0gTkVUWEVOX0FERFJfUURSX05FVF9NQVhfUDM7CisKKwlpZiAoQUREUl9JTl9SQU5HRShhZGRyLAorCQkJTkVUWEVOX0FERFJfRERSX05FVCwgTkVUWEVOX0FERFJfRERSX05FVF9NQVgpKSB7CisJCS8qIEREUiBuZXR3b3JrIHNpZGUgKi8KKwkJQlVHKCk7CS8qIE1OIGFjY2VzcyBjYW4gbm90IGNvbWUgaGVyZSAqLworCX0gZWxzZSBpZiAoQUREUl9JTl9SQU5HRShhZGRyLAorCQkJTkVUWEVOX0FERFJfT0NNMCwgTkVUWEVOX0FERFJfT0NNMF9NQVgpKSB7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoQUREUl9JTl9SQU5HRShhZGRyLAorCQkJCU5FVFhFTl9BRERSX09DTTEsIE5FVFhFTl9BRERSX09DTTFfTUFYKSkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKEFERFJfSU5fUkFOR0UoYWRkciwgTkVUWEVOX0FERFJfUURSX05FVCwgcWRyX21heCkpIHsKKwkJLyogUURSIG5ldHdvcmsgc2lkZSAqLworCQl3aW5kb3cgPSAoKGFkZHIgLSBORVRYRU5fQUREUl9RRFJfTkVUKSA+PiAyMikgJiAweDNmOworCQlpZiAoYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPT0gd2luZG93KQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfZGlyZWN0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqYWRkcjsKKwlpbnQgcmV0ID0gMDsKKwl1NjQgc3RhcnQ7CisJdWludDhfdCAqbWVtX3B0ciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKKwl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogSWYgYXR0ZW1wdGluZyB0byBhY2Nlc3MgdW5rbm93biBhZGRyZXNzIG9yIHN0cmFkZGxlIGh3IHdpbmRvd3MsCisJICogZG8gbm90IGFjY2Vzcy4KKwkgKi8KKwlzdGFydCA9IGFkYXB0ZXItPnBjaV9zZXRfd2luZG93KGFkYXB0ZXIsIG9mZik7CisJaWYgKChzdGFydCA9PSAtMVVMKSB8fAorCQkobmV0eGVuX25pY19wY2lfaXNfc2FtZV93aW5kb3coYWRhcHRlciwgb2ZmK3NpemUtMSkgPT0gMCkpIHsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgIiVzIG91dCBvZiBib3VuZCBwY2kgbWVtb3J5IGFjY2Vzcy4gIgorCQkJIm9mZnNldCBpcyAweCVsbHhcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG9mZik7CisJCXJldHVybiAtMTsKKwl9CisKKwlhZGRyID0gKHZvaWQgKikocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KSk7CisJaWYgKCFhZGRyKSB7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMCk7CisJCW1lbV9wYWdlID0gc3RhcnQgJiBQQUdFX01BU0s7CisJCS8qIE1hcCB0d28gcGFnZXMgd2hlbmV2ZXIgdXNlciB0cmllcyB0byBhY2Nlc3MgYWRkcmVzc2VzIGluIHR3bworCQljb25zZWN1dGl2ZSBwYWdlcy4KKwkJKi8KKwkJaWYgKG1lbV9wYWdlICE9ICgoc3RhcnQgKyBzaXplIC0gMSkgJiBQQUdFX01BU0spKQorCQkJbWVtX3B0ciA9IGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFICogMik7CisJCWVsc2UKKwkJCW1lbV9wdHIgPSBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSk7CisJCWlmIChtZW1fcHRyID09IDBVTCkgeworCQkJKih1aW50OF90ICAqKWRhdGEgPSAwOworCQkJcmV0dXJuIC0xOworCQl9CisJCWFkZHIgPSBtZW1fcHRyOworCQlhZGRyICs9IHN0YXJ0ICYgKFBBR0VfU0laRSAtIDEpOworCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCX0KKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJKih1aW50OF90ICAqKWRhdGEgPSByZWFkYihhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqKHVpbnQxNl90ICopZGF0YSA9IHJlYWR3KGFkZHIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCSoodWludDMyX3QgKilkYXRhID0gcmVhZGwoYWRkcik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJKih1aW50NjRfdCAqKWRhdGEgPSByZWFkcShhZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLTE7CisJCWJyZWFrOworCX0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CisJRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEpOworCisJaWYgKG1lbV9wdHIpCisJCWlvdW5tYXAobWVtX3B0cik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlX2RpcmVjdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYsCisJCXZvaWQgKmRhdGEsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqYWRkcjsKKwlpbnQgcmV0ID0gMDsKKwl1NjQgc3RhcnQ7CisJdWludDhfdCAqbWVtX3B0ciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKKwl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogSWYgYXR0ZW1wdGluZyB0byBhY2Nlc3MgdW5rbm93biBhZGRyZXNzIG9yIHN0cmFkZGxlIGh3IHdpbmRvd3MsCisJICogZG8gbm90IGFjY2Vzcy4KKwkgKi8KKwlzdGFydCA9IGFkYXB0ZXItPnBjaV9zZXRfd2luZG93KGFkYXB0ZXIsIG9mZik7CisJaWYgKChzdGFydCA9PSAtMVVMKSB8fAorCQkobmV0eGVuX25pY19wY2lfaXNfc2FtZV93aW5kb3coYWRhcHRlciwgb2ZmK3NpemUtMSkgPT0gMCkpIHsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgIiVzIG91dCBvZiBib3VuZCBwY2kgbWVtb3J5IGFjY2Vzcy4gIgorCQkJIm9mZnNldCBpcyAweCVsbHhcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG9mZik7CisJCXJldHVybiAtMTsKKwl9CisKKwlhZGRyID0gKHZvaWQgKikocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KSk7CisJaWYgKCFhZGRyKSB7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMCk7CisJCW1lbV9wYWdlID0gc3RhcnQgJiBQQUdFX01BU0s7CisJCS8qIE1hcCB0d28gcGFnZXMgd2hlbmV2ZXIgdXNlciB0cmllcyB0byBhY2Nlc3MgYWRkcmVzc2VzIGluIHR3bworCQkgKiBjb25zZWN1dGl2ZSBwYWdlcy4KKwkJICovCisJCWlmIChtZW1fcGFnZSAhPSAoKHN0YXJ0ICsgc2l6ZSAtIDEpICYgUEFHRV9NQVNLKSkKKwkJCW1lbV9wdHIgPSBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSoyKTsKKwkJZWxzZQorCQkJbWVtX3B0ciA9IGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFKTsKKwkJaWYgKG1lbV9wdHIgPT0gMFVMKQorCQkJcmV0dXJuIC0xOworCQlhZGRyID0gbWVtX3B0cjsKKwkJYWRkciArPSBzdGFydCAmIChQQUdFX1NJWkUgLSAxKTsKKwkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXdyaXRlYigqKHVpbnQ4X3QgKilkYXRhLCBhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3cml0ZXcoKih1aW50MTZfdCAqKWRhdGEsIGFkZHIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXdyaXRlbCgqKHVpbnQzMl90ICopZGF0YSwgYWRkcik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJd3JpdGVxKCoodWludDY0X3QgKilkYXRhLCBhZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLTE7CisJCWJyZWFrOworCX0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CisJRFBSSU5USygxLCBJTkZPLCAid3JpdGluZyBkYXRhICVsbHggdG8gb2Zmc2V0ICVsbHhcbiIsCisJCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEsIHN0YXJ0KTsKKwlpZiAobWVtX3B0cikKKwkJaW91bm1hcChtZW1fcHRyKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BWF9DVExfQ0hFQ0sgICAxMDAwCisKK2ludAorbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3MsIG1lbV9jcmI7CisJaW50CSAgICAgaSwgaiwgcmV0ID0gMCwgbG9vcCwgc3pbMl0sIG9mZjA7CisJdWludDMyX3QgICAgICB0ZW1wOworCXVpbnQ2NF90ICAgICAgb2ZmOCwgdG1wdywgd29yZFsyXSA9IHswLCAwfTsKKworCS8qCisJICogSWYgbm90IE1OLCBnbyBjaGVjayBmb3IgTVMgb3IgaW52YWxpZC4KKwkgKi8KKwlpZiAobmV0eGVuX25pY19wY2lfbWVtX2JvdW5kX2NoZWNrKGFkYXB0ZXIsIG9mZiwgc2l6ZSkgPT0gMCkKKwkJcmV0dXJuIG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV9kaXJlY3QoYWRhcHRlciwKKwkJCQlvZmYsIGRhdGEsIHNpemUpOworCisJb2ZmOCA9IG9mZiAmIDB4ZmZmZmZmZjg7CisJb2ZmMCA9IG9mZiAmIDB4NzsKKwlzelswXSA9IChzaXplIDwgKDggLSBvZmYwKSkgPyBzaXplIDogKDggLSBvZmYwKTsKKwlzelsxXSA9IHNpemUgLSBzelswXTsKKwlsb29wID0gKChvZmYwICsgc2l6ZSAtIDEpID4+IDMpICsgMTsKKwltZW1fY3JiID0gKHVuc2lnbmVkIGxvbmcpcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CisKKwlpZiAoKHNpemUgIT0gOCkgfHwgKG9mZjAgIT0gMCkpICB7CisJCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKKwkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3JlYWQoYWRhcHRlciwKKwkJCQlvZmY4ICsgKGkgPDwgMyksICZ3b3JkW2ldLCA4KSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXRtcHcgPSAqKCh1aW50OF90ICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdG1wdyA9ICooKHVpbnQxNl90ICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdG1wdyA9ICooKHVpbnQzMl90ICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgODoKKwlkZWZhdWx0OgorCQl0bXB3ID0gKigodWludDY0X3QgKilkYXRhKTsKKwkJYnJlYWs7CisJfQorCXdvcmRbMF0gJj0gfigofih+MFVMTCA8PCAoc3pbMF0gKiA4KSkpIDw8IChvZmYwICogOCkpOworCXdvcmRbMF0gfD0gdG1wdyA8PCAob2ZmMCAqIDgpOworCisJaWYgKGxvb3AgPT0gMikgeworCQl3b3JkWzFdICY9IH4ofjBVTEwgPDwgKHN6WzFdICogOCkpOworCQl3b3JkWzFdIHw9IHRtcHcgPj4gKHN6WzBdICogOCk7CisJfQorCisJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKSB7CisJCXdyaXRlbCgodWludDMyX3QpKG9mZjggKyAoaSA8PCAzKSksCisJCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPKSk7CisJCXdyaXRlbCgwLAorCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOworCQl3cml0ZWwod29yZFtpXSAmIDB4ZmZmZmZmZmYsCisJCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfTE8pKTsKKwkJd3JpdGVsKCh3b3JkW2ldID4+IDMyKSAmIDB4ZmZmZmZmZmYsCisJCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfSEkpKTsKKwkJd3JpdGVsKE1JVV9UQV9DVExfRU5BQkxFfE1JVV9UQV9DVExfV1JJVEUsCisJCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCXdyaXRlbChNSVVfVEFfQ1RMX1NUQVJUfE1JVV9UQV9DVExfRU5BQkxFfE1JVV9UQV9DVExfV1JJVEUsCisJCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisKKwkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgeworCQkJdGVtcCA9IHJlYWRsKAorCQkJICAgICAodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQlpZiAoKHRlbXAgJiBNSVVfVEFfQ1RMX0JVU1kpID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7CisJCQlwcmludGsoIiVzOiAlcyBGYWlsIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIsCisJCQkJCV9fZnVuY19fLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK2ludAorbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgICBmbGFncywgbWVtX2NyYjsKKwlpbnQJICAgICBpLCBqID0gMCwgaywgc3RhcnQsIGVuZCwgbG9vcCwgc3pbMl0sIG9mZjBbMl07CisJdWludDMyX3QgICAgICB0ZW1wOworCXVpbnQ2NF90ICAgICAgb2ZmOCwgdmFsLCB3b3JkWzJdID0gezAsIDB9OworCisKKwkvKgorCSAqIElmIG5vdCBNTiwgZ28gY2hlY2sgZm9yIE1TIG9yIGludmFsaWQuCisJICovCisJaWYgKG5ldHhlbl9uaWNfcGNpX21lbV9ib3VuZF9jaGVjayhhZGFwdGVyLCBvZmYsIHNpemUpID09IDApCisJCXJldHVybiBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF9kaXJlY3QoYWRhcHRlciwgb2ZmLCBkYXRhLCBzaXplKTsKKworCW9mZjggPSBvZmYgJiAweGZmZmZmZmY4OworCW9mZjBbMF0gPSBvZmYgJiAweDc7CisJb2ZmMFsxXSA9IDA7CisJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMFswXSkpID8gc2l6ZSA6ICg4IC0gb2ZmMFswXSk7CisJc3pbMV0gPSBzaXplIC0gc3pbMF07CisJbG9vcCA9ICgob2ZmMFswXSArIHNpemUgLSAxKSA+PiAzKSArIDE7CisJbWVtX2NyYiA9ICh1bnNpZ25lZCBsb25nKXBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKSB7CisJCXdyaXRlbCgodWludDMyX3QpKG9mZjggKyAoaSA8PCAzKSksCisJCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPKSk7CisJCXdyaXRlbCgwLAorCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOworCQl3cml0ZWwoTUlVX1RBX0NUTF9FTkFCTEUsCisJCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCXdyaXRlbChNSVVfVEFfQ1RMX1NUQVJUfE1JVV9UQV9DVExfRU5BQkxFLAorCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCisJCWZvciAoaiA9IDA7IGogPCBNQVhfQ1RMX0NIRUNLOyBqKyspIHsKKwkJCXRlbXAgPSByZWFkbCgKKwkJCSAgICAgICh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCWlmICgodGVtcCAmIE1JVV9UQV9DVExfQlVTWSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIEZhaWwgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iLAorCQkJCQlfX2Z1bmNfXywgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQlicmVhazsKKwkJfQorCisJCXN0YXJ0ID0gb2ZmMFtpXSA+PiAyOworCQllbmQgICA9IChvZmYwW2ldICsgc3pbaV0gLSAxKSA+PiAyOworCQlmb3IgKGsgPSBzdGFydDsgayA8PSBlbmQ7IGsrKykgeworCQkJd29yZFtpXSB8PSAoKHVpbnQ2NF90KSByZWFkbCgKKwkJCQkgICAgKHZvaWQgKikobWVtX2NyYiArCisJCQkJICAgIE1JVV9URVNUX0FHVF9SRERBVEEoaykpKSA8PCAoMzIqaykpOworCQl9CisJfQorCisJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKworCWlmIChqID49IE1BWF9DVExfQ0hFQ0spCisJCXJldHVybiAtMTsKKworCWlmIChzelswXSA9PSA4KSB7CisJCXZhbCA9IHdvcmRbMF07CisJfSBlbHNlIHsKKwkJdmFsID0gKCh3b3JkWzBdID4+IChvZmYwWzBdICogOCkpICYgKH4ofjBVTEwgPDwgKHN6WzBdICogOCkpKSkgfAorCQkJKCh3b3JkWzFdICYgKH4ofjBVTEwgPDwgKHN6WzFdICogOCkpKSkgPDwgKHN6WzBdICogOCkpOworCX0KKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJKih1aW50OF90ICAqKWRhdGEgPSB2YWw7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKih1aW50MTZfdCAqKWRhdGEgPSB2YWw7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJKih1aW50MzJfdCAqKWRhdGEgPSB2YWw7CisJCWJyZWFrOworCWNhc2UgODoKKwkJKih1aW50NjRfdCAqKWRhdGEgPSB2YWw7CisJCWJyZWFrOworCX0KKwlEUFJJTlRLKDEsIElORk8sICJyZWFkICVsbHhcbiIsICoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK2ludAorbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IGksIGosIHJldCA9IDAsIGxvb3AsIHN6WzJdLCBvZmYwOworCXVpbnQzMl90IHRlbXA7CisJdWludDY0X3Qgb2ZmOCwgbWVtX2NyYiwgdG1wdywgd29yZFsyXSA9IHswLCAwfTsKKworCS8qCisJICogSWYgbm90IE1OLCBnbyBjaGVjayBmb3IgTVMgb3IgaW52YWxpZC4KKwkgKi8KKwlpZiAob2ZmID49IE5FVFhFTl9BRERSX1FEUl9ORVQgJiYgb2ZmIDw9IE5FVFhFTl9BRERSX1FEUl9ORVRfTUFYX1AzKQorCQltZW1fY3JiID0gTkVUWEVOX0NSQl9RRFJfTkVUOworCWVsc2UgeworCQltZW1fY3JiID0gTkVUWEVOX0NSQl9ERFJfTkVUOworCQlpZiAobmV0eGVuX25pY19wY2lfbWVtX2JvdW5kX2NoZWNrKGFkYXB0ZXIsIG9mZiwgc2l6ZSkgPT0gMCkKKwkJCXJldHVybiBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfZGlyZWN0KGFkYXB0ZXIsCisJCQkJCW9mZiwgZGF0YSwgc2l6ZSk7CisJfQorCisJb2ZmOCA9IG9mZiAmIDB4ZmZmZmZmZjg7CisJb2ZmMCA9IG9mZiAmIDB4NzsKKwlzelswXSA9IChzaXplIDwgKDggLSBvZmYwKSkgPyBzaXplIDogKDggLSBvZmYwKTsKKwlzelsxXSA9IHNpemUgLSBzelswXTsKKwlsb29wID0gKChvZmYwICsgc2l6ZSAtIDEpID4+IDMpICsgMTsKKworCWlmICgoc2l6ZSAhPSA4KSB8fCAob2ZmMCAhPSAwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKSB7CisJCQlpZiAoYWRhcHRlci0+cGNpX21lbV9yZWFkKGFkYXB0ZXIsIG9mZjggKyAoaSA8PCAzKSwKKwkJCQkJCSZ3b3JkW2ldLCA4KSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXRtcHcgPSAqKCh1aW50OF90ICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdG1wdyA9ICooKHVpbnQxNl90ICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdG1wdyA9ICooKHVpbnQzMl90ICopZGF0YSk7CisJCWJyZWFrOworCWNhc2UgODoKKwlkZWZhdWx0OgorCQl0bXB3ID0gKigodWludDY0X3QgKilkYXRhKTsKKwlicmVhazsKKwl9CisKKwl3b3JkWzBdICY9IH4oKH4ofjBVTEwgPDwgKHN6WzBdICogOCkpKSA8PCAob2ZmMCAqIDgpKTsKKwl3b3JkWzBdIHw9IHRtcHcgPDwgKG9mZjAgKiA4KTsKKworCWlmIChsb29wID09IDIpIHsKKwkJd29yZFsxXSAmPSB+KH4wVUxMIDw8IChzelsxXSAqIDgpKTsKKwkJd29yZFsxXSB8PSB0bXB3ID4+IChzelswXSAqIDgpOworCX0KKworCS8qCisJICogZG9uJ3QgbG9jayBoZXJlIC0gd3JpdGVfd3ggZ2V0cyB0aGUgbG9jayBpZiBlYWNoIHRpbWUKKwkgKiB3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCSAqIG5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKKwkgKi8KKworCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKKwkJdGVtcCA9IG9mZjggKyAoaSA8PCAzKTsKKwkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQltZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPLCAmdGVtcCwgNCk7CisJCXRlbXAgPSAwOworCQlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAorCQkJCW1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfSEksICZ0ZW1wLCA0KTsKKwkJdGVtcCA9IHdvcmRbaV0gJiAweGZmZmZmZmZmOworCQlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAorCQkJCW1lbV9jcmIrTUlVX1RFU1RfQUdUX1dSREFUQV9MTywgJnRlbXAsIDQpOworCQl0ZW1wID0gKHdvcmRbaV0gPj4gMzIpICYgMHhmZmZmZmZmZjsKKwkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQltZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfSEksICZ0ZW1wLCA0KTsKKwkJdGVtcCA9IE1JVV9UQV9DVExfRU5BQkxFIHwgTUlVX1RBX0NUTF9XUklURTsKKwkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQltZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMLCAmdGVtcCwgNCk7CisJCXRlbXAgPSBNSVVfVEFfQ1RMX1NUQVJUIHwgTUlVX1RBX0NUTF9FTkFCTEUgfCBNSVVfVEFfQ1RMX1dSSVRFOworCQlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAorCQkJCW1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwsICZ0ZW1wLCA0KTsKKworCQlmb3IgKGogPSAwOyBqIDwgTUFYX0NUTF9DSEVDSzsgaisrKSB7CisJCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJCW1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQ1RSTCwgJnRlbXAsIDQpOworCQkJaWYgKCh0ZW1wICYgTUlVX1RBX0NUTF9CVVNZKSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbCB0byB3cml0ZSB0aHJvdWdoIGFnZW50XG4iLAorCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIG5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKKwkgKiB3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CisJICovCisJcmV0dXJuIHJldDsKK30KKworaW50CituZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQoreworCWludCBpLCBqID0gMCwgaywgc3RhcnQsIGVuZCwgbG9vcCwgc3pbMl0sIG9mZjBbMl07CisJdWludDMyX3QgICAgICB0ZW1wOworCXVpbnQ2NF90ICAgICAgb2ZmOCwgdmFsLCBtZW1fY3JiLCB3b3JkWzJdID0gezAsIDB9OworCisJLyoKKwkgKiBJZiBub3QgTU4sIGdvIGNoZWNrIGZvciBNUyBvciBpbnZhbGlkLgorCSAqLworCisJaWYgKG9mZiA+PSBORVRYRU5fQUREUl9RRFJfTkVUICYmIG9mZiA8PSBORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMykKKwkJbWVtX2NyYiA9IE5FVFhFTl9DUkJfUURSX05FVDsKKwllbHNlIHsKKwkJbWVtX2NyYiA9IE5FVFhFTl9DUkJfRERSX05FVDsKKwkJaWYgKG5ldHhlbl9uaWNfcGNpX21lbV9ib3VuZF9jaGVjayhhZGFwdGVyLCBvZmYsIHNpemUpID09IDApCisJCQlyZXR1cm4gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfZGlyZWN0KGFkYXB0ZXIsCisJCQkJCW9mZiwgZGF0YSwgc2l6ZSk7CisJfQorCisJb2ZmOCA9IG9mZiAmIDB4ZmZmZmZmZjg7CisJb2ZmMFswXSA9IG9mZiAmIDB4NzsKKwlvZmYwWzFdID0gMDsKKwlzelswXSA9IChzaXplIDwgKDggLSBvZmYwWzBdKSkgPyBzaXplIDogKDggLSBvZmYwWzBdKTsKKwlzelsxXSA9IHNpemUgLSBzelswXTsKKwlsb29wID0gKChvZmYwWzBdICsgc2l6ZSAtIDEpID4+IDMpICsgMTsKKworCS8qCisJICogZG9uJ3QgbG9jayBoZXJlIC0gd3JpdGVfd3ggZ2V0cyB0aGUgbG9jayBpZiBlYWNoIHRpbWUKKwkgKiB3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCSAqIG5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKKwkgKi8KKworCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKKwkJdGVtcCA9IG9mZjggKyAoaSA8PCAzKTsKKwkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQltZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfTE8sICZ0ZW1wLCA0KTsKKwkJdGVtcCA9IDA7CisJCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCQkJbWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0hJLCAmdGVtcCwgNCk7CisJCXRlbXAgPSBNSVVfVEFfQ1RMX0VOQUJMRTsKKwkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQltZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwsICZ0ZW1wLCA0KTsKKwkJdGVtcCA9IE1JVV9UQV9DVExfU1RBUlQgfCBNSVVfVEFfQ1RMX0VOQUJMRTsKKwkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQltZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwsICZ0ZW1wLCA0KTsKKworCQlmb3IgKGogPSAwOyBqIDwgTUFYX0NUTF9DSEVDSzsgaisrKSB7CisJCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJCW1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQ1RSTCwgJnRlbXAsIDQpOworCQkJaWYgKCh0ZW1wICYgTUlVX1RBX0NUTF9CVVNZKSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIsCisJCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJYnJlYWs7CisJCX0KKworCQlzdGFydCA9IG9mZjBbaV0gPj4gMjsKKwkJZW5kICAgPSAob2ZmMFtpXSArIHN6W2ldIC0gMSkgPj4gMjsKKwkJZm9yIChrID0gc3RhcnQ7IGsgPD0gZW5kOyBrKyspIHsKKwkJCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKKwkJCQltZW1fY3JiICsgTUlVX1RFU1RfQUdUX1JEREFUQShrKSwgJnRlbXAsIDQpOworCQkJd29yZFtpXSB8PSAoKHVpbnQ2NF90KXRlbXAgPDwgKDMyICogaykpOworCQl9CisJfQorCisJLyoKKwkgKiBuZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CisJICogd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCSAqLworCisJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykKKwkJcmV0dXJuIC0xOworCisJaWYgKHN6WzBdID09IDgpIHsKKwkJdmFsID0gd29yZFswXTsKKwl9IGVsc2UgeworCQl2YWwgPSAoKHdvcmRbMF0gPj4gKG9mZjBbMF0gKiA4KSkgJiAofih+MFVMTCA8PCAoc3pbMF0gKiA4KSkpKSB8CisJCSgod29yZFsxXSAmICh+KH4wVUxMIDw8IChzelsxXSAqIDgpKSkpIDw8IChzelswXSAqIDgpKTsKKwl9CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCSoodWludDhfdCAgKilkYXRhID0gdmFsOworCQlicmVhazsKKwljYXNlIDI6CisJCSoodWludDE2X3QgKilkYXRhID0gdmFsOworCQlicmVhazsKKwljYXNlIDQ6CisJCSoodWludDMyX3QgKilkYXRhID0gdmFsOworCQlicmVhazsKKwljYXNlIDg6CisJCSoodWludDY0X3QgKilkYXRhID0gdmFsOworCQlicmVhazsKKwl9CisJRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEpOworCXJldHVybiAwOworfQorCisvKgorICogTm90ZSA6IG9ubHkgMzItYml0IHdyaXRlcyEKKyAqLworaW50IG5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHUzMiBkYXRhKQoreworCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIG9mZiwgJmRhdGEsIDQpOworCisJcmV0dXJuIDA7Cit9CisKK3UzMiBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYpCit7CisJdTMyIHRlbXA7CisJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBvZmYsICZ0ZW1wLCA0KTsKKwlyZXR1cm4gdGVtcDsKK30KKwordm9pZCBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl1NjQgb2ZmLCB1MzIgZGF0YSkKK3sKKwlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBvZmYsICZkYXRhLCA0KTsKK30KKwordTMyIG5ldHhlbl9uaWNfcGNpX3JlYWRfbm9ybWFsaXplXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZikKK3sKKwl1MzIgdGVtcDsKKwlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIG9mZiwgJnRlbXAsIDQpOworCXJldHVybiB0ZW1wOworfQorCiAjaWYgMAogaW50CiBuZXR4ZW5fbmljX2VyYXNlX3B4ZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0xMDAzLDEyICsyMDEwLDI1IEBACiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSE1FWjoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNDoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX0hNRVo6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM19YR19MT006CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfQ1g0OgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX0NYNF9MUDoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX0lNRVo6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfU0ZQX1BMVVM6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfWEZQOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTAwMDBfQkFTRV9UOgorCiAJCWFkYXB0ZXItPmFody5ib2FyZF90eXBlID0gTkVUWEVOX05JQ19YR0JFOwogCQlicmVhazsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AxX0JEOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDFfU0I6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMV9TTUFYOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDFfU09DSzoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX1JFRl9RRzoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0I6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NOgorCiAJCWFkYXB0ZXItPmFody5ib2FyZF90eXBlID0gTkVUWEVOX05JQ19HQkU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMDQyLDI1ICsyMDYyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbmV0eGVuX25pY19pbml0X25pdV9nYihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JbmV0eGVuX25pdV9nYmVfaW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQpOwotfQotCiB2b2lkCi1uZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBsb25nIG9mZiwKLQkJCSAgICBpbnQgZGF0YSkKK25ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXVuc2lnbmVkIGxvbmcgb2ZmLCBpbnQgZGF0YSkKIHsKLQl2b2lkIF9faW9tZW0gKmFkZHI7Ci0KLQlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpIHsKLQkJd3JpdGVsKGRhdGEsIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIG9mZikpOwotCX0gZWxzZSB7Ci0JCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMCk7Ci0JCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKLQkJd3JpdGVsKGRhdGEsIGFkZHIpOwotCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOwotCX0KKwlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBvZmYsICZkYXRhLCA0KTsKIH0KIAogdm9pZCBuZXR4ZW5fbmljX3NldF9saW5rX3BhcmFtZXRlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQpAQCAtMTE0NywxMiArMjE1MywxMSBAQAogCQlhZGRyICs9IHNpemVvZih1MzIpOwogCX0KIAotCWZ3X21ham9yID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKLQkJCQkJICAgICAgTkVUWEVOX0ZXX1ZFUlNJT05fTUFKT1IpKTsKLQlmd19taW5vciA9IHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsCi0JCQkJCSAgICAgIE5FVFhFTl9GV19WRVJTSU9OX01JTk9SKSk7Ci0JZndfYnVpbGQgPQotCSAgICByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9TVUIpKTsKKwlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9GV19WRVJTSU9OX01BSk9SLCAmZndfbWFqb3IsIDQpOworCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX0ZXX1ZFUlNJT05fTUlOT1IsICZmd19taW5vciwgNCk7CisJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9TVUIsICZmd19idWlsZCwgNCk7CisKKwlhZGFwdGVyLT5md19tYWpvciA9IGZ3X21ham9yOwogCiAJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkgewogCQlnZXRfYnJkX25hbWVfYnlfdHlwZShib2FyZF9pbmZvLT5ib2FyZF90eXBlLCBicmRfbmFtZSk7CkBAIC0xMTYzLDI4ICsyMTY4LDEzIEBACiAJCQkJZndfbWlub3IsIGZ3X2J1aWxkKTsKIAl9CiAKLQlpZiAoZndfbWFqb3IgIT0gX05FVFhFTl9OSUNfTElOVVhfTUFKT1IpIHsKKwlpZiAoTkVUWEVOX1ZFUlNJT05fQ09ERShmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKSA8CisJCQlORVRYRU5fVkVSU0lPTl9DT0RFKDMsIDQsIDIxNikpIHsKIAkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKLQl9Ci0JaWYgKGZ3X21pbm9yICE9IF9ORVRYRU5fTklDX0xJTlVYX01JTk9SICYmCi0JCQlmd19taW5vciAhPSAoX05FVFhFTl9OSUNfTElOVVhfTUlOT1IgKyAxKSkgewotCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOwotCX0KLQlpZiAoYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRyaXZlciBhbmQgZmlybXdhcmUgdmVyc2lvbiBtaXNtYXRjaFxuIiwKLQkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkIHVuc3VwcG9ydGVkXG4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCisJCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CiAJCXJldHVybjsKIAl9Ci0KLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7Ci0JY2FzZSBORVRYRU5fTklDX0dCRToKLQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBHYkUgcG9ydCBpbml0aWFsaXplZFxuIiwKLQkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwotCQlicmVhazsKLQljYXNlIE5FVFhFTl9OSUNfWEdCRToKLQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBYR2JFIHBvcnQgaW5pdGlhbGl6ZWRcbiIsCi0JCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQkJYnJlYWs7Ci0JfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaAppbmRleCBhM2VhMWRkLi5iOGUwMDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKQEAgLTgyLDE5ICs4Miw5IEBACiAKICNkZWZpbmUgTkVUWEVOX1BDSV9NQVBTSVpFX0JZVEVTICAoTkVUWEVOX1BDSV9NQVBTSVpFIDw8IDIwKQogCi0jZGVmaW5lIE5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKFgsIFkpCVwKLQlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIFgpOwlcCi0JKih1MzIgKilZID0gcmVhZGwoKHZvaWQgX19pb21lbSopIGFkZHIpOwotCiBzdHJ1Y3QgbmV0eGVuX3BvcnQ7CiB2b2lkIG5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBuZXR4ZW5fbmljX2ZsYXNoX3ByaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgbmV0eGVuX25pY19od193cml0ZV93eChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYsCi0JCQkgICB2b2lkICpkYXRhLCBpbnQgbGVuKTsKLXZvaWQgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgdW5zaWduZWQgbG9uZyBvZmYsIGludCBkYXRhKTsKLWludCBuZXR4ZW5fbmljX2h3X3JlYWRfd3goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLAotCQkJICB2b2lkICpkYXRhLCBpbnQgbGVuKTsKIAogdHlwZWRlZiB1OCBuZXR4ZW5fZXRoZXJuZXRfbWFjYWRkcl90WzZdOwogCkBAIC00MzIsNyArNDIyLDggQEAKIC8qIFByb21pc2NvdXMgbW9kZSBvcHRpb25zIChHYkUgbW9kZSBvbmx5KSAqLwogdHlwZWRlZiBlbnVtIHsKIAlORVRYRU5fTklVX1BST01JU0NfTU9ERSA9IDAsCi0JTkVUWEVOX05JVV9OT05fUFJPTUlTQ19NT0RFCisJTkVUWEVOX05JVV9OT05fUFJPTUlTQ19NT0RFLAorCU5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERQogfSBuZXR4ZW5fbml1X3Byb21fbW9kZV90OwogCiAvKgpAQCAtNDc4LDQyICs0NjksNiBAQAogI2RlZmluZSBuZXR4ZW5feGdfc29mdF9yZXNldChjb25maWdfd29yZCkJXAogCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDQpCiAKLS8qCi0gKiBNQUMgQ29udHJvbCBSZWdpc3RlcgotICoKLSAqIEJpdCAwLTEgICA6IGlkX3Bvb2wwCi0gKiBCaXQgMiAgICAgOiBlbmFibGVfeHRuZDAKLSAqIEJpdCA0LTUgICA6IGlkX3Bvb2wxCi0gKiBCaXQgNiAgICAgOiBlbmFibGVfeHRuZDEKLSAqIEJpdCA4LTkgICA6IGlkX3Bvb2wyCi0gKiBCaXQgMTAgICAgOiBlbmFibGVfeHRuZDIKLSAqIEJpdCAxMi0xMyA6IGlkX3Bvb2wzCi0gKiBCaXQgMTQgICAgOiBlbmFibGVfeHRuZDMKLSAqIEJpdCAyNC0yNSA6IG1vZGVfc2VsZWN0Ci0gKiBCaXQgMjgtMzEgOiBlbmFibGVfcG9vbAotICovCi0KLSNkZWZpbmUgbmV0eGVuX25pY19tY3Jfc2V0X2lkX3Bvb2wwKGNvbmZpZywgdmFsKQlcCi0JCSgoY29uZmlnKSB8PSAoKHZhbCkgJjB4MDMpKQotI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfZW5hYmxlX3h0bmQwKGNvbmZpZykJXAotCQkoKGNvbmZpZykgfD0gMSA8PCAzKQotI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDEoY29uZmlnLCB2YWwpCVwKLQkJKChjb25maWcpIHw9ICgoKHZhbCkgJiAweDAzKSA8PCA0KSkKLSNkZWZpbmUgbmV0eGVuX25pY19tY3Jfc2V0X2VuYWJsZV94dG5kMShjb25maWcpCVwKLQkJKChjb25maWcpIHw9IDEgPDwgNikKLSNkZWZpbmUgbmV0eGVuX25pY19tY3Jfc2V0X2lkX3Bvb2wyKGNvbmZpZywgdmFsKQlcCi0JCSgoY29uZmlnKSB8PSAoKCh2YWwpICYgMHgwMykgPDwgOCkpCi0jZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDIoY29uZmlnKQlcCi0JCSgoY29uZmlnKSB8PSAxIDw8IDEwKQotI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDMoY29uZmlnLCB2YWwpCVwKLQkJKChjb25maWcpIHw9ICgoKHZhbCkgJiAweDAzKSA8PCAxMikpCi0jZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDMoY29uZmlnKQlcCi0JCSgoY29uZmlnKSB8PSAxIDw8IDE0KQotI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfbW9kZV9zZWxlY3QoY29uZmlnLCB2YWwpCVwKLQkJKChjb25maWcpIHw9ICgoKHZhbCkgJiAweDAzKSA8PCAyNCkpCi0jZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfcG9vbChjb25maWcsIHZhbCkJXAotCQkoKGNvbmZpZykgfD0gKCgodmFsKSAmIDB4MGYpIDw8IDI4KSkKLQogLyogU2V0IHByb21pc2N1b3VzIG1vZGUgZm9yIGEgR2JFIGludGVyZmFjZSAqLwogaW50IG5ldHhlbl9uaXVfc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQkJCSAgICBuZXR4ZW5fbml1X3Byb21fbW9kZV90IG1vZGUpOwpAQCAtNTM4LDQgKzQ5MywxNSBAQAogCiBpbnQgbmV0eGVuX25pdV9kaXNhYmxlX3hnX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHZhbGlkOworCXVuc2lnbmVkIHN0YXJ0XzEyOE07CisJdW5zaWduZWQgZW5kXzEyOE07CisJdW5zaWduZWQgc3RhcnRfMk07Cit9IGNyYl8xMjhNXzJNX3N1Yl9ibG9ja19tYXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWNyYl8xMjhNXzJNX3N1Yl9ibG9ja19tYXBfdCBzdWJfYmxvY2tbMTZdOworfSBjcmJfMTI4TV8yTV9ibG9ja19tYXBfdDsKKwogI2VuZGlmCQkJCS8qIF9fTkVUWEVOX05JQ19IV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IDcwZDFiMjIuLjAxYWIzMWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCkBAIC00Miw4ICs0Miw2IEBACiAJdTMyIGRhdGE7CiB9OwogCi11bnNpZ25lZCBsb25nIGxhc3Rfc2NoZWR1bGVfdGltZTsKLQogI2RlZmluZSBORVRYRU5fTUFYX0NSQl9YRk9STSA2MAogc3RhdGljIHVuc2lnbmVkIGludCBjcmJfYWRkcl94Zm9ybVtORVRYRU5fTUFYX0NSQl9YRk9STV07CiAjZGVmaW5lIE5FVFhFTl9BRERSX0VSUk9SICgweGZmZmZmZmZmKQpAQCAtMTE3LDYgKzExNSw4IEBACiAJY3JiX2FkZHJfdHJhbnNmb3JtKEMyQzEpOwogCWNyYl9hZGRyX3RyYW5zZm9ybShDMkMwKTsKIAljcmJfYWRkcl90cmFuc2Zvcm0oU01CKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oT0NNMCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKEkyQzApOwogfQogCiBpbnQgbmV0eGVuX2luaXRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQpAQCAtMTI0LDE1ICsxMjQsMTUgQEAKIAl1MzIgc3RhdGUgPSAwLCBsb29wcyA9IDAsIGVyciA9IDA7CiAKIAkvKiBXaW5kb3cgMSBjYWxsICovCi0Jc3RhdGUgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFKSk7CisJc3RhdGUgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSk7CiAKIAlpZiAoc3RhdGUgPT0gUEhBTl9JTklUSUFMSVpFX0FDSykKIAkJcmV0dXJuIDA7CiAKIAl3aGlsZSAoc3RhdGUgIT0gUEhBTl9JTklUSUFMSVpFX0NPTVBMRVRFICYmIGxvb3BzIDwgMjAwMCkgewotCQl1ZGVsYXkoMTAwKTsKKwkJbXNsZWVwKDEpOwogCQkvKiBXaW5kb3cgMSBjYWxsICovCi0JCXN0YXRlID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSkpOworCQlzdGF0ZSA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFKTsKIAogCQlsb29wcysrOwogCX0KQEAgLTE0Myw2NCArMTQzLDE5MyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAkvKiBXaW5kb3cgMSBjYWxsICovCi0Jd3JpdGVsKElOVFJfU0NIRU1FX1BFUlBPUlQsCi0JICAgICAgIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9OSUNfQ0FQQUJJTElUSUVTX0hPU1QpKTsKLQl3cml0ZWwoTVNJX01PREVfTVVMVElGVU5DLAotCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfTklDX01TSV9NT0RFX0hPU1QpKTsKLQl3cml0ZWwoTVBPUlRfTVVMVElfRlVOQ1RJT05fTU9ERSwKLQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX01QT1JUX01PREUpKTsKLQl3cml0ZWwoUEhBTl9JTklUSUFMSVpFX0FDSywKLQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSkpOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKKwkJCUNSQl9OSUNfQ0FQQUJJTElUSUVTX0hPU1QsIElOVFJfU0NIRU1FX1BFUlBPUlQpOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKKwkJCUNSQl9OSUNfTVNJX01PREVfSE9TVCwgTVNJX01PREVfTVVMVElGVU5DKTsKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQlDUkJfTVBPUlRfTU9ERSwgTVBPUlRfTVVMVElfRlVOQ1RJT05fTU9ERSk7CisJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJQ1JCX0NNRFBFR19TVEFURSwgUEhBTl9JTklUSUFMSVpFX0FDSyk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi0jZGVmaW5lIE5FVFhFTl9BRERSX0xJTUlUIDB4ZmZmZmZmZmZVTEwKLQotdm9pZCAqbmV0eGVuX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc3osIGRtYV9hZGRyX3QgKiBwdHIsCi0JCSAgIHN0cnVjdCBwY2lfZGV2ICoqdXNlZF9kZXYpCit2b2lkIG5ldHhlbl9yZWxlYXNlX3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXZvaWQgKmFkZHI7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OworCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqcnhfYnVmOworCWludCBpLCBjdHhpZCwgcmluZzsKIAotCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBzeiwgcHRyKTsKLQlpZiAoKHVuc2lnbmVkIGxvbmcgbG9uZykoKnB0cikgPCBORVRYRU5fQUREUl9MSU1JVCkgewotCQkqdXNlZF9kZXYgPSBwZGV2OwotCQlyZXR1cm4gYWRkcjsKKwlmb3IgKGN0eGlkID0gMDsgY3R4aWQgPCBNQVhfUkNWX0NUWDsgKytjdHhpZCkgeworCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhpZF07CisJCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCQlmb3IgKGkgPSAwOyBpIDwgcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50OyArK2kpIHsKKwkJCQlyeF9idWYgPSAmKHJkc19yaW5nLT5yeF9idWZfYXJyW2ldKTsKKwkJCQlpZiAocnhfYnVmLT5zdGF0ZSA9PSBORVRYRU5fQlVGRkVSX0ZSRUUpCisJCQkJCWNvbnRpbnVlOworCQkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKKwkJCQkJCXJ4X2J1Zi0+ZG1hLAorCQkJCQkJcmRzX3JpbmctPmRtYV9zaXplLAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlpZiAocnhfYnVmLT5za2IgIT0gTlVMTCkKKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkocnhfYnVmLT5za2IpOworCQkJfQorCQl9CiAJfQotCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc3osIGFkZHIsICpwdHIpOwotCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChOVUxMLCBzeiwgcHRyKTsKLQkqdXNlZF9kZXYgPSBOVUxMOwotCXJldHVybiBhZGRyOwogfQogCi12b2lkIG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfc3coc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQordm9pZCBuZXR4ZW5fcmVsZWFzZV90eF9idWZmZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgY3R4aWQsIHJpbmc7Ci0JdTMyIGk7Ci0JdTMyIG51bV9yeF9idWZzID0gMDsKLQlzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2N0eCAqcmN2X2Rlc2M7CisJc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICpjbWRfYnVmOworCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgKmJ1ZmZyYWc7CisJaW50IGksIGo7CiAKLQlEUFJJTlRLKElORk8sICJpbml0aWFsaXppbmcgc29tZSBxdWV1ZXM6ICVwXG4iLCBhZGFwdGVyKTsKLQlmb3IgKGN0eGlkID0gMDsgY3R4aWQgPCBNQVhfUkNWX0NUWDsgKytjdHhpZCkgewotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgTlVNX1JDVl9ERVNDX1JJTkdTOyByaW5nKyspIHsKLQkJCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpyeF9idWY7Ci0JCQlyY3ZfZGVzYyA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhpZF0ucmN2X2Rlc2NbcmluZ107Ci0JCQlyY3ZfZGVzYy0+YmVnaW5fYWxsb2MgPSAwOwotCQkJcnhfYnVmID0gcmN2X2Rlc2MtPnJ4X2J1Zl9hcnI7Ci0JCQludW1fcnhfYnVmcyA9IHJjdl9kZXNjLT5tYXhfcnhfZGVzY19jb3VudDsKKwljbWRfYnVmID0gYWRhcHRlci0+Y21kX2J1Zl9hcnI7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OyBpKyspIHsKKwkJYnVmZnJhZyA9IGNtZF9idWYtPmZyYWdfYXJyYXk7CisJCWlmIChidWZmcmFnLT5kbWEpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgYnVmZnJhZy0+ZG1hLAorCQkJCQkgYnVmZnJhZy0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJ1ZmZyYWctPmRtYSA9IDBVTEw7CisJCX0KKwkJZm9yIChqID0gMDsgaiA8IGNtZF9idWYtPmZyYWdfY291bnQ7IGorKykgeworCQkJYnVmZnJhZysrOworCQkJaWYgKGJ1ZmZyYWctPmRtYSkgeworCQkJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIGJ1ZmZyYWctPmRtYSwKKwkJCQkJICAgICAgIGJ1ZmZyYWctPmxlbmd0aCwKKwkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCWJ1ZmZyYWctPmRtYSA9IDBVTEw7CisJCQl9CisJCX0KKwkJLyogRnJlZSB0aGUgc2tiIHdlIHJlY2VpdmVkIGluIG5ldHhlbl9uaWNfeG1pdF9mcmFtZSAqLworCQlpZiAoY21kX2J1Zi0+c2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShjbWRfYnVmLT5za2IpOworCQkJY21kX2J1Zi0+c2tiID0gTlVMTDsKKwkJfQorCQljbWRfYnVmKys7CisJfQorfQorCit2b2lkIG5ldHhlbl9mcmVlX3N3X3Jlc291cmNlcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OworCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlpbnQgY3R4LCByaW5nOworCisJZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgY3R4KyspIHsKKwkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKwkJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FycikgeworCQkJCXZmcmVlKHJkc19yaW5nLT5yeF9idWZfYXJyKTsKKwkJCQlyZHNfcmluZy0+cnhfYnVmX2FyciA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisJaWYgKGFkYXB0ZXItPmNtZF9idWZfYXJyKQorCQl2ZnJlZShhZGFwdGVyLT5jbWRfYnVmX2Fycik7CisJcmV0dXJuOworfQorCitpbnQgbmV0eGVuX2FsbG9jX3N3X3Jlc291cmNlcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OworCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqcnhfYnVmOworCWludCBjdHgsIHJpbmcsIGksIG51bV9yeF9idWZzOworCisJc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICpjbWRfYnVmX2FycjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJY21kX2J1Zl9hcnIgPSAoc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICopdm1hbGxvYyhUWF9SSU5HU0laRSk7CisJaWYgKGNtZF9idWZfYXJyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGNtZCBidWZmZXIgcmluZ1xuIiwKKwkJICAgICAgIG5ldGRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoY21kX2J1Zl9hcnIsIDAsIFRYX1JJTkdTSVpFKTsKKwlhZGFwdGVyLT5jbWRfYnVmX2FyciA9IGNtZF9idWZfYXJyOworCisJZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgY3R4KyspIHsKKwkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKwkJCXN3aXRjaCAoUkNWX0RFU0NfVFlQRShyaW5nKSkgeworCQkJY2FzZSBSQ1ZfREVTQ19OT1JNQUw6CisJCQkJcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50ID0KKwkJCQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQ7CisJCQkJcmRzX3JpbmctPmZsYWdzID0gUkNWX0RFU0NfTk9STUFMOworCQkJCWlmIChhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpIHsKKwkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KKwkJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKKwkJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KKwkJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKKwkJCQl9IGVsc2UgeworCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9ETUFfTUFQX0xFTjsKKwkJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KKwkJCQkJCU1BWF9SWF9CVUZGRVJfTEVOR1RIOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBSQ1ZfREVTQ19KVU1CTzoKKwkJCQlyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQgPQorCQkJCQlhZGFwdGVyLT5tYXhfanVtYm9fcnhfZGVzY19jb3VudDsKKwkJCQlyZHNfcmluZy0+ZmxhZ3MgPSBSQ1ZfREVTQ19KVU1CTzsKKwkJCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KKwkJCQkJCU5YX1AzX1JYX0pVTUJPX0JVRl9NQVhfTEVOOworCQkJCWVsc2UKKwkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KKwkJCQkJCU5YX1AyX1JYX0pVTUJPX0JVRl9NQVhfTEVOOworCQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CisJCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSArIE5FVF9JUF9BTElHTjsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSQ1ZfUklOR19MUk86CisJCQkJcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50ID0KKwkJCQkJYWRhcHRlci0+bWF4X2xyb19yeF9kZXNjX2NvdW50OworCQkJCXJkc19yaW5nLT5mbGFncyA9IFJDVl9ERVNDX0xSTzsKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9MUk9fRE1BX01BUF9MRU47CisJCQkJcmRzX3JpbmctPnNrYl9zaXplID0gTUFYX1JYX0xST19CVUZGRVJfTEVOR1RIOworCQkJCWJyZWFrOworCisJCQl9CisJCQlyZHNfcmluZy0+cnhfYnVmX2FyciA9IChzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqKQorCQkJCXZtYWxsb2MoUkNWX0JVRkZTSVpFKTsKKwkJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FyciA9PSBOVUxMKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlICIKKwkJCQkJInJ4IGJ1ZmZlciByaW5nICVkXG4iLAorCQkJCQluZXRkZXYtPm5hbWUsIHJpbmcpOworCQkJCS8qIGZyZWUgd2hhdGV2ZXIgd2FzIGFscmVhZHkgYWxsb2NhdGVkICovCisJCQkJZ290byBlcnJfb3V0OworCQkJfQorCQkJbWVtc2V0KHJkc19yaW5nLT5yeF9idWZfYXJyLCAwLCBSQ1ZfQlVGRlNJWkUpOworCQkJSU5JVF9MSVNUX0hFQUQoJnJkc19yaW5nLT5mcmVlX2xpc3QpOworCQkJcmRzX3JpbmctPmJlZ2luX2FsbG9jID0gMDsKIAkJCS8qCiAJCQkgKiBOb3cgZ28gdGhyb3VnaCBhbGwgb2YgdGhlbSwgc2V0IHJlZmVyZW5jZSBoYW5kbGVzCiAJCQkgKiBhbmQgcHV0IHRoZW0gaW4gdGhlIHF1ZXVlcy4KIAkJCSAqLworCQkJbnVtX3J4X2J1ZnMgPSByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQ7CisJCQlyeF9idWYgPSByZHNfcmluZy0+cnhfYnVmX2FycjsKIAkJCWZvciAoaSA9IDA7IGkgPCBudW1fcnhfYnVmczsgaSsrKSB7CisJCQkJbGlzdF9hZGRfdGFpbCgmcnhfYnVmLT5saXN0LAorCQkJCQkJJnJkc19yaW5nLT5mcmVlX2xpc3QpOwogCQkJCXJ4X2J1Zi0+cmVmX2hhbmRsZSA9IGk7CiAJCQkJcnhfYnVmLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfRlJFRTsKLQkJCQlEUFJJTlRLKElORk8sICJSeCBidWY6Y3R4JWQgaSglZCkgcnhfYnVmOiIKLQkJCQkJIiVwXG4iLCBjdHhpZCwgaSwgcnhfYnVmKTsKIAkJCQlyeF9idWYrKzsKIAkJCX0KIAkJfQogCX0KKworCXJldHVybiAwOworCitlcnJfb3V0OgorCW5ldHhlbl9mcmVlX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogdm9pZCBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29wcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yMTEsMTQgKzM0MCwxMiBAQAogCQkgICAgbmV0eGVuX25pdV9nYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzOwogCQlhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzID0KIAkJICAgIG5ldHhlbl9uaXVfZ2JlX2Rpc2FibGVfcGh5X2ludGVycnVwdHM7Ci0JCWFkYXB0ZXItPmhhbmRsZV9waHlfaW50ciA9IG5ldHhlbl9uaWNfZ2JlX2hhbmRsZV9waHlfaW50cjsKIAkJYWRhcHRlci0+bWFjYWRkcl9zZXQgPSBuZXR4ZW5fbml1X21hY2FkZHJfc2V0OwogCQlhZGFwdGVyLT5zZXRfbXR1ID0gbmV0eGVuX25pY19zZXRfbXR1X2diOwogCQlhZGFwdGVyLT5zZXRfcHJvbWlzYyA9IG5ldHhlbl9uaXVfc2V0X3Byb21pc2N1b3VzX21vZGU7Ci0JCWFkYXB0ZXItPnVuc2V0X3Byb21pc2MgPSBuZXR4ZW5fbml1X3NldF9wcm9taXNjdW91c19tb2RlOwogCQlhZGFwdGVyLT5waHlfcmVhZCA9IG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkOwogCQlhZGFwdGVyLT5waHlfd3JpdGUgPSBuZXR4ZW5fbml1X2diZV9waHlfd3JpdGU7Ci0JCWFkYXB0ZXItPmluaXRfbml1ID0gbmV0eGVuX25pY19pbml0X25pdV9nYjsKKwkJYWRhcHRlci0+aW5pdF9wb3J0ID0gbmV0eGVuX25pdV9nYmVfaW5pdF9wb3J0OwogCQlhZGFwdGVyLT5zdG9wX3BvcnQgPSBuZXR4ZW5fbml1X2Rpc2FibGVfZ2JlX3BvcnQ7CiAJCWJyZWFrOwogCkBAIC0yMjcsMTIgKzM1NCwxMCBAQAogCQkgICAgbmV0eGVuX25pdV94Z2JlX2VuYWJsZV9waHlfaW50ZXJydXB0czsKIAkJYWRhcHRlci0+ZGlzYWJsZV9waHlfaW50ZXJydXB0cyA9CiAJCSAgICBuZXR4ZW5fbml1X3hnYmVfZGlzYWJsZV9waHlfaW50ZXJydXB0czsKLQkJYWRhcHRlci0+aGFuZGxlX3BoeV9pbnRyID0gbmV0eGVuX25pY194Z2JlX2hhbmRsZV9waHlfaW50cjsKIAkJYWRhcHRlci0+bWFjYWRkcl9zZXQgPSBuZXR4ZW5fbml1X3hnX21hY2FkZHJfc2V0OwogCQlhZGFwdGVyLT5zZXRfbXR1ID0gbmV0eGVuX25pY19zZXRfbXR1X3hnYjsKIAkJYWRhcHRlci0+aW5pdF9wb3J0ID0gbmV0eGVuX25pdV94Z19pbml0X3BvcnQ7CiAJCWFkYXB0ZXItPnNldF9wcm9taXNjID0gbmV0eGVuX25pdV94Z19zZXRfcHJvbWlzY3VvdXNfbW9kZTsKLQkJYWRhcHRlci0+dW5zZXRfcHJvbWlzYyA9IG5ldHhlbl9uaXVfeGdfc2V0X3Byb21pc2N1b3VzX21vZGU7CiAJCWFkYXB0ZXItPnN0b3BfcG9ydCA9IG5ldHhlbl9uaXVfZGlzYWJsZV94Z19wb3J0OwogCQlicmVhazsKIApAQCAtMjcwLDcgKzM5NSw5IEBACiAKIHN0YXRpYyBsb25nIHJvbV9tYXhfdGltZW91dCA9IDEwMDsKIHN0YXRpYyBsb25nIHJvbV9sb2NrX3RpbWVvdXQgPSAxMDAwMDsKKyNpZiAwCiBzdGF0aWMgbG9uZyByb21fd3JpdGVfdGltZW91dCA9IDcwMDsKKyNlbmRpZgogCiBzdGF0aWMgaW50IHJvbV9sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTMxOSw2ICs0NDYsNyBAQAogCXJldHVybiAwOwogfQogCisjaWYgMAogc3RhdGljIGludCBuZXR4ZW5fcm9tX3dyZW4oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCS8qIFNldCB3cml0ZSBlbmFibGUgbGF0Y2ggaW4gUk9NIHN0YXR1cyByZWdpc3RlciAqLwpAQCAtMzQ4LDYgKzQ3Niw3IEBACiAJfQogCXJldHVybiBuZXR4ZW5fcmRjcmJyZWcoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fUkRBVEEpOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIG5ldHhlbl9yb21fdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTM1OCw2ICs0ODcsNyBAQAogCiB9CiAKKyNpZiAwCiBzdGF0aWMgaW50IG5ldHhlbl9yb21fd2lwX3BvbGwoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCWxvbmcgdGltZW91dCA9IDA7CkBAIC0zOTMsNiArNTIzLDcgQEAKIAogCXJldHVybiBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgZG9fcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICAgaW50IGFkZHIsIGludCAqdmFscCkKQEAgLTQ3NSw3ICs2MDYsNiBAQAogCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOwogCXJldHVybiByZXQ7CiB9Ci0jZW5kaWYgIC8qICAwICAqLwogCiBzdGF0aWMgaW50IGRvX3JvbV9mYXN0X3dyaXRlX3dvcmRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgICBpbnQgYWRkciwgdTggKmJ5dGVzLCBzaXplX3Qgc2l6ZSkKQEAgLTc0MCwyOCArODcwLDI1IEBACiAKIAlyZXR1cm4gcmV0OwogfQorI2VuZGlmICAvKiAgMCAgKi8KIAogI2RlZmluZSBORVRYRU5fQk9BUkRUWVBFCQkweDQwMDgKICNkZWZpbmUgTkVUWEVOX0JPQVJETlVNIAkJMHg0MDBjCiAjZGVmaW5lIE5FVFhFTl9DSElQTlVNCQkJMHg0MDEwCi0jZGVmaW5lIE5FVFhFTl9ST01CVVNfUkVTRVQJCTB4RkZGRkZGRkYKLSNkZWZpbmUgTkVUWEVOX1JPTV9GSVJTVF9CQVJSSUVSCTB4ODAwMDAwMDAwVUxMCi0jZGVmaW5lIE5FVFhFTl9ST01fRk9VTkRfSU5JVAkJMHg0MDAKIAogaW50IG5ldHhlbl9waW5pdF9mcm9tX3JvbShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCB2ZXJib3NlKQogewogCWludCBhZGRyLCB2YWw7Ci0JaW50IG4sIGk7Ci0JaW50IGluaXRfZGVsYXkgPSAwOworCWludCBpLCBpbml0X2RlbGF5ID0gMDsKIAlzdHJ1Y3QgY3JiX2FkZHJfcGFpciAqYnVmOworCXVuc2lnbmVkIG9mZnNldCwgbjsKIAl1MzIgb2ZmOwogCiAJLyogcmVzZXRhbGwgKi8KIAluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9HTEJfU1dfUkVTRVQsCi0JCQkJICAgIE5FVFhFTl9ST01CVVNfUkVTRVQpOworCQkJCSAgICAweGZmZmZmZmZmKTsKIAogCWlmICh2ZXJib3NlKSB7Ci0JCWludCB2YWw7CiAJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBORVRYRU5fQk9BUkRUWVBFLCAmdmFsKSA9PSAwKQogCQkJcHJpbnRrKCJQMiBST00gYm9hcmQgdHlwZTogMHglMDh4XG4iLCB2YWwpOwogCQllbHNlCkBAIC03NzYsMTE3ICs5MDMsMTQxIEBACiAJCQlwcmludGsoIkNvdWxkIG5vdCByZWFkIGNoaXAgbnVtYmVyXG4iKTsKIAl9CiAKLQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgMCwgJm4pID09IDAKLQkgICAgJiYgKG4gJiBORVRYRU5fUk9NX0ZJUlNUX0JBUlJJRVIpKSB7Ci0JCW4gJj0gfk5FVFhFTl9ST01fUk9VTkRVUDsKLQkJaWYgKG4gPCBORVRYRU5fUk9NX0ZPVU5EX0lOSVQpIHsKLQkJCWlmICh2ZXJib3NlKQotCQkJCXByaW50aygiJXM6ICVkIENSQiBpbml0IHZhbHVlcyBmb3VuZCIKLQkJCQkgICAgICAgIiBpbiBST00uXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50aygiJXM6bj0weCV4IEVycm9yISBOZXRYZW4gY2FyZCBmbGFzaCBub3QiCi0JCQkgICAgICAgIiBpbml0aWFsaXplZC5cbiIsIF9fRlVOQ1RJT05fXywgbik7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIDAsICZuKSAhPSAwIHx8CisJCQkobiAhPSAweGNhZmVjYWZlVUwpIHx8CisJCQluZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCA0LCAmbikgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRVJST1IgUmVhZGluZyBjcmJfaW5pdCBhcmVhOiAiCisJCQkJCSJuOiAlMDh4XG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWJ1ZiA9IGtjYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBjcmJfYWRkcl9wYWlyKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChidWYgPT0gTlVMTCkgewotCQkJcHJpbnRrKCIlczogbmV0eGVuX3Bpbml0X2Zyb21fcm9tOiBVbmFibGUgdG8gY2FsbG9jICIKLQkJCSAgICAgICAibWVtb3J5LlxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJb2Zmc2V0ID0gbiAmIDB4ZmZmZlU7CisJCW4gPSAobiA+PiAxNikgJiAweGZmZmZVOworCX0gZWxzZSB7CisJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCAwLCAmbikgIT0gMCB8fAorCQkJIShuICYgMHg4MDAwMDAwMCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVSUk9SIFJlYWRpbmcgY3JiX2luaXQgYXJlYTogIgorCQkJCQkibjogJTA4eFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbik7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgOCAqIGkgKyA0LCAmdmFsKSAhPSAwCi0JCQkgICAgfHwgbmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgOCAqIGkgKyA4LAotCQkJCQkJICAgICZhZGRyKSAhPSAwKQotCQkJCXJldHVybiAtRUlPOworCQlvZmZzZXQgPSAxOworCQluICY9IH4weDgwMDAwMDAwOworCX0KIAotCQkJYnVmW2ldLmFkZHIgPSBhZGRyOwotCQkJYnVmW2ldLmRhdGEgPSB2YWw7CisJaWYgKG4gPCAxMDI0KSB7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlZCBDUkIgaW5pdCB2YWx1ZXMgZm91bmQiCisJCQkgICAgICAgIiBpbiBST00uXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOm49MHgleCBFcnJvciEgTmV0WGVuIGNhcmQgZmxhc2ggbm90IgorCQkgICAgICAgIiBpbml0aWFsaXplZC5cbiIsIF9fZnVuY19fLCBuKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCi0JCQlpZiAodmVyYm9zZSkKLQkJCQlwcmludGsoIiVzOiBQQ0k6ICAgICAweCUwOHggPT0gMHglMDh4XG4iLAotCQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCAodW5zaWduZWQgaW50KQotCQkJCSAgICAgICBuZXR4ZW5fZGVjb2RlX2NyYl9hZGRyKGFkZHIpLCB2YWwpOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwlidWYgPSBrY2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgY3JiX2FkZHJfcGFpciksIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlwcmludGsoIiVzOiBuZXR4ZW5fcGluaXRfZnJvbV9yb206IFVuYWJsZSB0byBjYWxsb2MgbWVtb3J5LlxuIiwKKwkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIDgqaSArIDQqb2Zmc2V0LCAmdmFsKSAhPSAwIHx8CisJCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIDgqaSArIDQqb2Zmc2V0ICsgNCwgJmFkZHIpICE9IDApCisJCQlyZXR1cm4gLUVJTzsKIAotCQkJb2ZmID0gbmV0eGVuX2RlY29kZV9jcmJfYWRkcihidWZbaV0uYWRkcik7Ci0JCQlpZiAob2ZmID09IE5FVFhFTl9BRERSX0VSUk9SKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIkNSQiBpbml0IHZhbHVlIG91dCBvZiByYW5nZSAleFxuIiwKKwkJYnVmW2ldLmFkZHIgPSBhZGRyOworCQlidWZbaV0uZGF0YSA9IHZhbDsKKworCQlpZiAodmVyYm9zZSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUENJOiAgICAgMHglMDh4ID09IDB4JTA4eFxuIiwKKwkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQkJCSh1MzIpbmV0eGVuX2RlY29kZV9jcmJfYWRkcihhZGRyKSwgdmFsKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCisJCW9mZiA9IG5ldHhlbl9kZWNvZGVfY3JiX2FkZHIoYnVmW2ldLmFkZHIpOworCQlpZiAob2ZmID09IE5FVFhFTl9BRERSX0VSUk9SKSB7CisJCQlwcmludGsoS0VSTl9FUlIiQ1JCIGluaXQgdmFsdWUgb3V0IG9mIHJhbmdlICV4XG4iLAogCQkJCQlidWZbaV0uYWRkcik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlvZmYgKz0gTkVUWEVOX1BDSV9DUkJTUEFDRTsKLQkJCS8qIHNraXBwaW5nIGNvbGQgcmVib290IE1BR0lDICovCi0JCQlpZiAob2ZmID09IE5FVFhFTl9DQU1fUkFNKDB4MWZjKSkKLQkJCQljb250aW51ZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCW9mZiArPSBORVRYRU5fUENJX0NSQlNQQUNFOworCQkvKiBza2lwcGluZyBjb2xkIHJlYm9vdCBNQUdJQyAqLworCQlpZiAob2ZmID09IE5FVFhFTl9DQU1fUkFNKDB4MWZjKSkKKwkJCWNvbnRpbnVlOwogCi0JCQkvKiBBZnRlciB3cml0aW5nIHRoaXMgcmVnaXN0ZXIsIEhXIG5lZWRzIHRpbWUgZm9yIENSQiAqLwotCQkJLyogdG8gcXVpZXQgZG93biAoZWxzZSBjcmJfd2luZG93IHJldHVybnMgMHhmZmZmZmZmZikgKi8KLQkJCWlmIChvZmYgPT0gTkVUWEVOX1JPTVVTQl9HTEJfU1dfUkVTRVQpIHsKLQkJCQlpbml0X2RlbGF5ID0gMTsKKwkJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJCS8qIGRvIG5vdCByZXNldCBQQ0kgKi8KKwkJCWlmIChvZmYgPT0gKFJPTVVTQl9HTEIgKyAweGJjKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvZmYgPT0gKE5FVFhFTl9DUkJfUEVHX05FVF8xICsgMHgxOCkpCisJCQkJYnVmW2ldLmRhdGEgPSAweDEwMjA7CisJCQkvKiBza2lwIHRoZSBmdW5jdGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KKwkJCWlmIChvZmYgPT0gTkVUWEVOX1BDSUVfUkVHKFBDSUVfU0VUVVBfRlVOQ1RJT04pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG9mZiA9PSBORVRYRU5fUENJRV9SRUcoUENJRV9TRVRVUF9GVU5DVElPTjIpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKChvZmYgJiAweDBmZjAwMDAwKSA9PSBORVRYRU5fQ1JCX1NNQikKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChvZmYgPT0gTkVUWEVOX0FERFJfRVJST1IpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycjogVW5rbm93biBhZGRyOiAweCUwOHhcbiIsCisJCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGJ1ZltpXS5hZGRyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQWZ0ZXIgd3JpdGluZyB0aGlzIHJlZ2lzdGVyLCBIVyBuZWVkcyB0aW1lIGZvciBDUkIgKi8KKwkJLyogdG8gcXVpZXQgZG93biAoZWxzZSBjcmJfd2luZG93IHJldHVybnMgMHhmZmZmZmZmZikgKi8KKwkJaWYgKG9mZiA9PSBORVRYRU5fUk9NVVNCX0dMQl9TV19SRVNFVCkgeworCQkJaW5pdF9kZWxheSA9IDE7CisJCQlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewogCQkJCS8qIGhvbGQgeGRtYSBpbiByZXNldCBhbHNvICovCiAJCQkJYnVmW2ldLmRhdGEgPSBORVRYRU5fTklDX1hETUFfUkVTRVQ7CiAJCQl9Ci0KLQkJCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgewotCQkJCXdyaXRlbChidWZbaV0uZGF0YSwKLQkJCQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKSk7Ci0JCQl9IGVsc2UgewotCQkJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMCk7Ci0JCQkJd3JpdGVsKGJ1ZltpXS5kYXRhLAotCQkJCSAgICAgICBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKSk7Ci0KLQkJCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOwotCQkJfQotCQkJaWYgKGluaXRfZGVsYXkgPT0gMSkgewotCQkJCW1zbGVlcCgxMDAwKTsKLQkJCQlpbml0X2RlbGF5ID0gMDsKLQkJCX0KLQkJCW1zbGVlcCgxKTsKIAkJfQotCQlrZnJlZShidWYpOwogCi0JCS8qIGRpc2FibGVfcGVnX2NhY2hlX2FsbCAqLworCQlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBvZmYsICZidWZbaV0uZGF0YSwgNCk7CiAKLQkJLyogdW5yZXNldF9uZXRfY2FjaGUgKi8KLQkJbmV0eGVuX25pY19od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfR0xCX1NXX1JFU0VULCAmdmFsLAotCQkJCSAgICAgIDQpOwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9HTEJfU1dfUkVTRVQsCi0JCQkJCSAgICAodmFsICYgMHhmZmZmZmYwZikpOwotCQkvKiBwMmRuIHJlcGx5Q291bnQgKi8KLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCi0JCQkJCSAgICBORVRYRU5fQ1JCX1BFR19ORVRfRCArIDB4ZWMsIDB4MWUpOwotCQkvKiBkaXNhYmxlX3BlZ19jYWNoZSAwICovCi0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAotCQkJCQkgICAgTkVUWEVOX0NSQl9QRUdfTkVUX0QgKyAweDRjLCA4KTsKLQkJLyogZGlzYWJsZV9wZWdfY2FjaGUgMSAqLwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKLQkJCQkJICAgIE5FVFhFTl9DUkJfUEVHX05FVF9JICsgMHg0YywgOCk7Ci0KLQkJLyogcGVnX2Nscl9hbGwgKi8KLQotCQkvKiBwZWdfY2xyIDAgKi8KLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8wICsgMHg4LAotCQkJCQkgICAgMCk7Ci0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMCArIDB4YywKLQkJCQkJICAgIDApOwotCQkvKiBwZWdfY2xyIDEgKi8KLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8xICsgMHg4LAotCQkJCQkgICAgMCk7Ci0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMSArIDB4YywKLQkJCQkJICAgIDApOwotCQkvKiBwZWdfY2xyIDIgKi8KLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8yICsgMHg4LAotCQkJCQkgICAgMCk7Ci0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMiArIDB4YywKLQkJCQkJICAgIDApOwotCQkvKiBwZWdfY2xyIDMgKi8KLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8zICsgMHg4LAotCQkJCQkgICAgMCk7Ci0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMyArIDB4YywKLQkJCQkJICAgIDApOworCQlpZiAoaW5pdF9kZWxheSA9PSAxKSB7CisJCQltc2xlZXAoMTAwMCk7CisJCQlpbml0X2RlbGF5ID0gMDsKKwkJfQorCQltc2xlZXAoMSk7CiAJfQorCWtmcmVlKGJ1Zik7CisKKwkvKiBkaXNhYmxlX3BlZ19jYWNoZV9hbGwgKi8KKworCS8qIHVucmVzZXRfbmV0X2NhY2hlICovCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQkJCU5FVFhFTl9ST01VU0JfR0xCX1NXX1JFU0VULCAmdmFsLCA0KTsKKwkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQkJTkVUWEVOX1JPTVVTQl9HTEJfU1dfUkVTRVQsICh2YWwgJiAweGZmZmZmZjBmKSk7CisJfQorCisJLyogcDJkbiByZXBseUNvdW50ICovCisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF9EICsgMHhlYywgMHgxZSk7CisJLyogZGlzYWJsZV9wZWdfY2FjaGUgMCAqLworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfRCArIDB4NGMsIDgpOworCS8qIGRpc2FibGVfcGVnX2NhY2hlIDEgKi8KKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUX0kgKyAweDRjLCA4KTsKKworCS8qIHBlZ19jbHJfYWxsICovCisKKwkvKiBwZWdfY2xyIDAgKi8KKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzAgKyAweDgsIDApOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMCArIDB4YywgMCk7CisJLyogcGVnX2NsciAxICovCisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8xICsgMHg4LCAwKTsKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzEgKyAweGMsIDApOworCS8qIHBlZ19jbHIgMiAqLworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMiArIDB4OCwgMCk7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8yICsgMHhjLCAwKTsKKwkvKiBwZWdfY2xyIDMgKi8KKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzMgKyAweDgsIDApOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMyArIDB4YywgMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg5NywxMiArMTA0OCwxMiBAQAogCXVpbnQzMl90IGxvOwogCiAJYWRhcHRlci0+ZHVtbXlfZG1hLmFkZHIgPQotCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5haHcucGRldiwKKwkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCQkgTkVUWEVOX0hPU1RfRFVNTVlfRE1BX1NJWkUsCiAJCQkJICZhZGFwdGVyLT5kdW1teV9kbWEucGh5c19hZGRyKTsKIAlpZiAoYWRhcHRlci0+ZHVtbXlfZG1hLmFkZHIgPT0gTlVMTCkgewogCQlwcmludGsoIiVzOiBFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIGR1bW15IERNQSBtZW1vcnlcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTkxMCw4ICsxMDYxLDEzIEBACiAJaGkgPSAoYWRkciA+PiAzMikgJiAweGZmZmZmZmZmOwogCWxvID0gYWRkciAmIDB4ZmZmZmZmZmY7CiAKLQl3cml0ZWwoaGksIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9IT1NUX0RVTU1ZX0JVRl9BRERSX0hJKSk7Ci0Jd3JpdGVsKGxvLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfSE9TVF9EVU1NWV9CVUZfQUREUl9MTykpOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX0hPU1RfRFVNTVlfQlVGX0FERFJfSEksIGhpKTsKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9IT1NUX0RVTU1ZX0JVRl9BRERSX0xPLCBsbyk7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQl1aW50MzJfdCB0ZW1wID0gMDsKKwkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgQ1JCX0hPU1RfRFVNTVlfQlVGLCAmdGVtcCwgNCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzEsNyArMTA4Nyw3IEBACiAJCX0gd2hpbGUgKC0taSk7CiAKIAkJaWYgKGkpIHsKLQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+YWh3LnBkZXYsCisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCiAJCQkJICAgIE5FVFhFTl9IT1NUX0RVTU1ZX0RNQV9TSVpFLAogCQkJCSAgICBhZGFwdGVyLT5kdW1teV9kbWEuYWRkciwKIAkJCQkgICAgYWRhcHRlci0+ZHVtbXlfZG1hLnBoeXNfYWRkcik7CkBAIC05NDYsMjIgKzExMDIsMjQgQEAKIGludCBuZXR4ZW5fcGhhbnRvbV9pbml0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBlZ3R1bmVfdmFsKQogewogCXUzMiB2YWwgPSAwOwotCWludCByZXRyaWVzID0gMzA7CisJaW50IHJldHJpZXMgPSA2MDsKIAogCWlmICghcGVndHVuZV92YWwpIHsKIAkJZG8gewotCQkJdmFsID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUKLQkJCQkgIChhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFKSk7Ci0JCQlwZWd0dW5lX3ZhbCA9IHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFCi0JCQkJICAoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9HTEJfUEVHVFVORV9ET05FKSk7CisJCQl2YWwgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKKwkJCQkJQ1JCX0NNRFBFR19TVEFURSk7CiAKIAkJCWlmICh2YWwgPT0gUEhBTl9JTklUSUFMSVpFX0NPTVBMRVRFIHx8CiAJCQkJdmFsID09IFBIQU5fSU5JVElBTElaRV9BQ0spCiAJCQkJcmV0dXJuIDA7CiAKLQkJCW1zbGVlcCgxMDAwKTsKKwkJCW1zbGVlcCg1MDApOworCiAJCX0gd2hpbGUgKC0tcmV0cmllcyk7CisKIAkJaWYgKCFyZXRyaWVzKSB7CisJCQlwZWd0dW5lX3ZhbCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJCQlORVRYRU5fUk9NVVNCX0dMQl9QRUdUVU5FX0RPTkUpOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibmV0eGVuX3BoYW50b21faW5pdDogaW5pdCBmYWlsZWQsICIKIAkJCQkJInBlZ3R1bmVfdmFsPSV4XG4iLCBwZWd0dW5lX3ZhbCk7CiAJCQlyZXR1cm4gLTE7CkBAIC05NzEsNTggKzExMjksNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZXR4ZW5fbmljX2NoZWNrX3RlbXAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoraW50IG5ldHhlbl9yZWNlaXZlX3BlZ19yZWFkeShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1aW50MzJfdCB0ZW1wLCB0ZW1wX3N0YXRlLCB0ZW1wX3ZhbDsKLQlpbnQgcnYgPSAwOworCXUzMiB2YWwgPSAwOworCWludCByZXRyaWVzID0gMjAwMDsKIAotCXRlbXAgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfVEVNUF9TVEFURSkpOworCWRvIHsKKwkJdmFsID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9SQ1ZQRUdfU1RBVEUpOwogCi0JdGVtcF9zdGF0ZSA9IG54X2dldF90ZW1wX3N0YXRlKHRlbXApOwotCXRlbXBfdmFsID0gbnhfZ2V0X3RlbXBfdmFsKHRlbXApOworCQlpZiAodmFsID09IFBIQU5fUEVHX1JDVl9JTklUSUFMSVpFRCkKKwkJCXJldHVybiAwOwogCi0JaWYgKHRlbXBfc3RhdGUgPT0gTlhfVEVNUF9QQU5JQykgewotCQlwcmludGsoS0VSTl9BTEVSVAotCQkgICAgICAgIiVzOiBEZXZpY2UgdGVtcGVyYXR1cmUgJWQgZGVncmVlcyBDIGV4Y2VlZHMiCi0JCSAgICAgICAiIG1heGltdW0gYWxsb3dlZC4gSGFyZHdhcmUgaGFzIGJlZW4gc2h1dCBkb3duLlxuIiwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIHRlbXBfdmFsKTsKKwkJbXNsZWVwKDEwKTsKIAotCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JCXJ2ID0gMTsKLQl9IGVsc2UgaWYgKHRlbXBfc3RhdGUgPT0gTlhfVEVNUF9XQVJOKSB7Ci0JCWlmIChhZGFwdGVyLT50ZW1wID09IE5YX1RFTVBfTk9STUFMKSB7Ci0JCQlwcmludGsoS0VSTl9BTEVSVAotCQkJICAgICAgICIlczogRGV2aWNlIHRlbXBlcmF0dXJlICVkIGRlZ3JlZXMgQyAiCi0JCQkgICAgICAgImV4Y2VlZHMgb3BlcmF0aW5nIHJhbmdlLiIKLQkJCSAgICAgICAiIEltbWVkaWF0ZSBhY3Rpb24gbmVlZGVkLlxuIiwKLQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCB0ZW1wX3ZhbCk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoYWRhcHRlci0+dGVtcCA9PSBOWF9URU1QX1dBUk4pIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAiJXM6IERldmljZSB0ZW1wZXJhdHVyZSBpcyBub3cgJWQgZGVncmVlcyBDIgotCQkJICAgICAgICIgaW4gbm9ybWFsIHJhbmdlLlxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCSAgICAgICB0ZW1wX3ZhbCk7Ci0JCX0KKwl9IHdoaWxlICgtLXJldHJpZXMpOworCisJaWYgKCFyZXRyaWVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUmVjZWl2ZSBQZWcgaW5pdGlhbGl6YXRpb24gbm90ICIKKwkJCSAgICAgICJjb21wbGV0ZSwgc3RhdGU6IDB4JXguXG4iLCB2YWwpOworCQlyZXR1cm4gLUVJTzsKIAl9Ci0JYWRhcHRlci0+dGVtcCA9IHRlbXBfc3RhdGU7Ci0JcmV0dXJuIHJ2OworCisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHN0cnVjdCBza19idWZmICpuZXR4ZW5fcHJvY2Vzc19yeGJ1ZihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZywgdTE2IGluZGV4LCB1MTYgY2tzdW0pCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXR4ZW5fYWRhcHRlciwgd2F0Y2hkb2dfdGFzayk7CisJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JaWYgKChhZGFwdGVyLT5wb3J0bnVtICA9PSAwKSAmJiBuZXR4ZW5fbmljX2NoZWNrX3RlbXAoYWRhcHRlcikpCi0JCXJldHVybjsKKwlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOwogCi0JaWYgKGFkYXB0ZXItPmhhbmRsZV9waHlfaW50cikKLQkJYWRhcHRlci0+aGFuZGxlX3BoeV9pbnRyKGFkYXB0ZXIpOworCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgYnVmZmVyLT5kbWEsIHJkc19yaW5nLT5kbWFfc2l6ZSwKKwkJCVBDSV9ETUFfRlJPTURFVklDRSk7CiAKLQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMiAqIEhaKTsKKwlza2IgPSBidWZmZXItPnNrYjsKKwlpZiAoIXNrYikKKwkJZ290byBub19za2I7CisKKwlpZiAobGlrZWx5KGFkYXB0ZXItPnJ4X2NzdW0gJiYgY2tzdW0gPT0gU1RBVFVTX0NLU1VNX09LKSkgeworCQlhZGFwdGVyLT5zdGF0cy5jc3VtbWVkKys7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJfSBlbHNlCisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCXNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJYnVmZmVyLT5za2IgPSBOVUxMOworCitub19za2I6CisJYnVmZmVyLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfRlJFRTsKKwlidWZmZXItPmxyb19jdXJyZW50X2ZyYWdzID0gMDsKKwlidWZmZXItPmxyb19leHBlY3RlZF9mcmFncyA9IDA7CisJbGlzdF9hZGRfdGFpbCgmYnVmZmVyLT5saXN0LCAmcmRzX3JpbmctPmZyZWVfbGlzdCk7CisJcmV0dXJuIHNrYjsKIH0KIAogLyoKQEAgLTEwMzEsOSArMTE5Miw4IEBACiAgKiBpbnZva2UgdGhlIHJvdXRpbmUgdG8gc2VuZCBtb3JlIHJ4IGJ1ZmZlcnMgdG8gdGhlIFBoYW50b20uLi4KICAqLwogc3RhdGljIHZvaWQgbmV0eGVuX3Byb2Nlc3NfcmN2KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGN0eGlkLAotCQkJICAgICAgIHN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYykKKwkJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjLCBzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmZyYWdfZGVzYykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAl1NjQgc3RzX2RhdGEgPSBsZTY0X3RvX2NwdShkZXNjLT5zdGF0dXNfZGVzY19kYXRhKTsKIAlpbnQgaW5kZXggPSBuZXR4ZW5fZ2V0X3N0c19yZWZoYW5kbGUoc3RzX2RhdGEpOwpAQCAtMTA0Miw4ICsxMjAyLDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUzMiBsZW5ndGggPSBuZXR4ZW5fZ2V0X3N0c190b3RhbGxlbmd0aChzdHNfZGF0YSk7CiAJdTMyIGRlc2NfY3R4OwotCXN0cnVjdCBuZXR4ZW5fcmN2X2Rlc2NfY3R4ICpyY3ZfZGVzYzsKLQlpbnQgcmV0OworCXUxNiBwa3Rfb2Zmc2V0ID0gMCwgY2tzdW07CisJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOwogCiAJZGVzY19jdHggPSBuZXR4ZW5fZ2V0X3N0c190eXBlKHN0c19kYXRhKTsKIAlpZiAodW5saWtlbHkoZGVzY19jdHggPj0gTlVNX1JDVl9ERVNDX1JJTkdTKSkgewpAQCAtMTA1MiwxMyArMTIxMiwxMyBAQAogCQlyZXR1cm47CiAJfQogCi0JcmN2X2Rlc2MgPSAmcmVjdl9jdHgtPnJjdl9kZXNjW2Rlc2NfY3R4XTsKLQlpZiAodW5saWtlbHkoaW5kZXggPiByY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQpKSB7CisJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tkZXNjX2N0eF07CisJaWYgKHVubGlrZWx5KGluZGV4ID4gcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KSkgewogCQlEUFJJTlRLKEVSUiwgIkdvdCBhIGJ1ZmZlciBpbmRleDoleCBNYXggaXMgJXhcbiIsCi0JCQlpbmRleCwgcmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJCWluZGV4LCByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOwogCQlyZXR1cm47CiAJfQotCWJ1ZmZlciA9ICZyY3ZfZGVzYy0+cnhfYnVmX2FycltpbmRleF07CisJYnVmZmVyID0gJnJkc19yaW5nLT5yeF9idWZfYXJyW2luZGV4XTsKIAlpZiAoZGVzY19jdHggPT0gUkNWX0RFU0NfTFJPX0NUWElEKSB7CiAJCWJ1ZmZlci0+bHJvX2N1cnJlbnRfZnJhZ3MrKzsKIAkJaWYgKG5ldHhlbl9nZXRfc3RzX2Rlc2NfbHJvX2xhc3RfZnJhZyhkZXNjKSkgewpAQCAtMTA3OSw0MyArMTIzOSw1MiBAQAogCQl9CiAJfQogCi0JcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXItPmRtYSwgcmN2X2Rlc2MtPmRtYV9zaXplLAotCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJY2tzdW0gPSBuZXR4ZW5fZ2V0X3N0c19zdGF0dXMoc3RzX2RhdGEpOwogCi0Jc2tiID0gKHN0cnVjdCBza19idWZmICopYnVmZmVyLT5za2I7CisJc2tiID0gbmV0eGVuX3Byb2Nlc3NfcnhidWYoYWRhcHRlciwgcmRzX3JpbmcsIGluZGV4LCBja3N1bSk7CisJaWYgKCFza2IpCisJCXJldHVybjsKIAotCWlmIChsaWtlbHkoYWRhcHRlci0+cnhfY3N1bSAmJgotCQkJbmV0eGVuX2dldF9zdHNfc3RhdHVzKHN0c19kYXRhKSA9PSBTVEFUVVNfQ0tTVU1fT0spKSB7Ci0JCWFkYXB0ZXItPnN0YXRzLmNzdW1tZWQrKzsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQl9IGVsc2UKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCi0Jc2tiLT5kZXYgPSBuZXRkZXY7CiAJaWYgKGRlc2NfY3R4ID09IFJDVl9ERVNDX0xST19DVFhJRCkgewogCQkvKiBUcnVlIGxlbmd0aCB3YXMgb25seSBhdmFpbGFibGUgb24gdGhlIGxhc3QgcGt0ICovCiAJCXNrYl9wdXQoc2tiLCBidWZmZXItPmxyb19sZW5ndGgpOwogCX0gZWxzZSB7Ci0JCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCQlpZiAobGVuZ3RoID4gcmRzX3JpbmctPnNrYl9zaXplKQorCQkJc2tiX3B1dChza2IsIHJkc19yaW5nLT5za2Jfc2l6ZSk7CisJCWVsc2UKKwkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCisJCXBrdF9vZmZzZXQgPSBuZXR4ZW5fZ2V0X3N0c19wa3Rfb2Zmc2V0KHN0c19kYXRhKTsKKwkJaWYgKHBrdF9vZmZzZXQpCisJCQlza2JfcHVsbChza2IsIHBrdF9vZmZzZXQpOwogCX0KIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKLQlyZXQgPSBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCW5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0KLQlyY3ZfZGVzYy0+cmN2X3BlbmRpbmctLTsKLQogCS8qCi0JICogV2UganVzdCBjb25zdW1lZCBvbmUgYnVmZmVyIHNvIHBvc3QgYSBidWZmZXIuCisJICogcnggYnVmZmVyIGNoYWluaW5nIGlzIGRpc2FibGVkLCB3YWxrIGFuZCBmcmVlCisJICogYW55IHNwdXJpb3VzIHJ4IGJ1ZmZlciBjaGFpbi4KIAkgKi8KLQlidWZmZXItPnNrYiA9IE5VTEw7Ci0JYnVmZmVyLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfRlJFRTsKLQlidWZmZXItPmxyb19jdXJyZW50X2ZyYWdzID0gMDsKLQlidWZmZXItPmxyb19leHBlY3RlZF9mcmFncyA9IDA7CisJaWYgKGZyYWdfZGVzYykgeworCQl1MTYgaSwgbnJfZnJhZ3MgPSBkZXNjLT5ucl9mcmFnczsKIAotCWFkYXB0ZXItPnN0YXRzLm5vX3JjdisrOwotCWFkYXB0ZXItPnN0YXRzLnJ4Ynl0ZXMgKz0gbGVuZ3RoOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfZnJhZ3M7IGkrKykgeworCQkJaW5kZXggPSBmcmFnX2Rlc2MtPmZyYWdfaGFuZGxlc1tpXTsKKwkJCXNrYiA9IG5ldHhlbl9wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsCisJCQkJCXJkc19yaW5nLCBpbmRleCwgY2tzdW0pOworCQkJaWYgKHNrYikKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQl9CisJCWFkYXB0ZXItPnN0YXRzLnJ4ZHJvcHBlZCsrOworCX0gZWxzZSB7CisKKwkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCQlhZGFwdGVyLT5zdGF0cy5ub19yY3YrKzsKKwkJYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7CisJfQogfQogCiAvKiBQcm9jZXNzIFJlY2VpdmUgc3RhdHVzIHJpbmcgKi8KQEAgLTExMjMsMTAgKzEyOTIsMTEgQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXSk7CiAJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjX2hlYWQgPSByZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQ7Ci0Jc3RydWN0IHN0YXR1c19kZXNjICpkZXNjOwkvKiB1c2VkIHRvIHJlYWQgc3RhdHVzIGRlc2MgaGVyZSAqLworCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYywgKmZyYWdfZGVzYzsKIAl1MzIgY29uc3VtZXIgPSByZWN2X2N0eC0+c3RhdHVzX3J4X2NvbnN1bWVyOwotCXUzMiBwcm9kdWNlciA9IDA7CiAJaW50IGNvdW50ID0gMCwgcmluZzsKKwl1NjQgc3RzX2RhdGE7CisJdTE2IG9wY29kZTsKIAogCXdoaWxlIChjb3VudCA8IG1heCkgewogCQlkZXNjID0gJmRlc2NfaGVhZFtjb25zdW1lcl07CkBAIC0xMTM1LDI0ICsxMzA1LDM4IEBACiAJCQkJbmV0eGVuX2dldF9zdHNfb3duZXIoZGVzYykpOwogCQkJYnJlYWs7CiAJCX0KLQkJbmV0eGVuX3Byb2Nlc3NfcmN2KGFkYXB0ZXIsIGN0eGlkLCBkZXNjKTsKKworCQlzdHNfZGF0YSA9IGxlNjRfdG9fY3B1KGRlc2MtPnN0YXR1c19kZXNjX2RhdGEpOworCQlvcGNvZGUgPSBuZXR4ZW5fZ2V0X3N0c19vcGNvZGUoc3RzX2RhdGEpOworCQlmcmFnX2Rlc2MgPSBOVUxMOworCQlpZiAob3Bjb2RlID09IE5FVFhFTl9OSUNfUlhQS1RfREVTQykgeworCQkJaWYgKGRlc2MtPm5yX2ZyYWdzKSB7CisJCQkJY29uc3VtZXIgPSBnZXRfbmV4dF9pbmRleChjb25zdW1lciwKKwkJCQkJCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJCQlmcmFnX2Rlc2MgPSAmZGVzY19oZWFkW2NvbnN1bWVyXTsKKwkJCQluZXR4ZW5fc2V0X3N0c19vd25lcihmcmFnX2Rlc2MsCisJCQkJCQlTVEFUVVNfT1dORVJfUEhBTlRPTSk7CisJCQl9CisJCX0KKworCQluZXR4ZW5fcHJvY2Vzc19yY3YoYWRhcHRlciwgY3R4aWQsIGRlc2MsIGZyYWdfZGVzYyk7CisKIAkJbmV0eGVuX3NldF9zdHNfb3duZXIoZGVzYywgU1RBVFVTX09XTkVSX1BIQU5UT00pOwotCQljb25zdW1lciA9IChjb25zdW1lciArIDEpICYgKGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50IC0gMSk7CisKKwkJY29uc3VtZXIgPSBnZXRfbmV4dF9pbmRleChjb25zdW1lciwKKwkJCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCk7CiAJCWNvdW50Kys7CiAJfQotCWZvciAocmluZyA9IDA7IHJpbmcgPCBOVU1fUkNWX0RFU0NfUklOR1M7IHJpbmcrKykKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKQogCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoYWRhcHRlciwgY3R4aWQsIHJpbmcpOwogCiAJLyogdXBkYXRlIHRoZSBjb25zdW1lciBpbmRleCBpbiBwaGFudG9tICovCiAJaWYgKGNvdW50KSB7CiAJCXJlY3ZfY3R4LT5zdGF0dXNfcnhfY29uc3VtZXIgPSBjb25zdW1lcjsKLQkJcmVjdl9jdHgtPnN0YXR1c19yeF9wcm9kdWNlciA9IHByb2R1Y2VyOwogCiAJCS8qIFdpbmRvdyA9IDEgKi8KLQkJd3JpdGVsKGNvbnN1bWVyLAotCQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKLQkJCQkgICAgcmVjdl9jcmJfcmVnaXN0ZXJzW2FkYXB0ZXItPnBvcnRudW1dLgotCQkJCQkgICAgY3JiX3Jjdl9zdGF0dXNfY29uc3VtZXIpKTsKKwkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJCXJlY3ZfY3R4LT5jcmJfc3RzX2NvbnN1bWVyLCBjb25zdW1lcik7CiAJfQogCiAJcmV0dXJuIGNvdW50OwpAQCAtMTIzMSwxMCArMTQxNSwxMCBAQAogICovCiB2b2lkIG5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgY3R4LCB1MzIgcmluZ2lkKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+YWh3LnBkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJihhZGFwdGVyLT5yZWN2X2N0eFtjdHhdKTsKLQlzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2N0eCAqcmN2X2Rlc2MgPSBOVUxMOworCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9IE5VTEw7CiAJdWludCBwcm9kdWNlcjsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7CkBAIC0xMjQyLDQxICsxNDI2LDM2IEBACiAJaW50IGluZGV4ID0gMDsKIAluZXR4ZW5fY3R4X21zZyBtc2cgPSAwOwogCWRtYV9hZGRyX3QgZG1hOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKLQlyY3ZfZGVzYyA9ICZyZWN2X2N0eC0+cmN2X2Rlc2NbcmluZ2lkXTsKKwlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmdpZF07CiAKLQlwcm9kdWNlciA9IHJjdl9kZXNjLT5wcm9kdWNlcjsKLQlpbmRleCA9IHJjdl9kZXNjLT5iZWdpbl9hbGxvYzsKLQlidWZmZXIgPSAmcmN2X2Rlc2MtPnJ4X2J1Zl9hcnJbaW5kZXhdOworCXByb2R1Y2VyID0gcmRzX3JpbmctPnByb2R1Y2VyOworCWluZGV4ID0gcmRzX3JpbmctPmJlZ2luX2FsbG9jOworCWhlYWQgPSAmcmRzX3JpbmctPmZyZWVfbGlzdDsKKwogCS8qIFdlIGNhbiBzdGFydCB3cml0aW5nIHJ4IGRlc2NyaXB0b3JzIGludG8gdGhlIHBoYW50b20gbWVtb3J5LiAqLwotCXdoaWxlIChidWZmZXItPnN0YXRlID09IE5FVFhFTl9CVUZGRVJfRlJFRSkgewotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHJjdl9kZXNjLT5za2Jfc2l6ZSk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihyZHNfcmluZy0+c2tiX3NpemUpOwogCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCS8qCi0JCQkgKiBUT0RPCi0JCQkgKiBXZSBuZWVkIHRvIHNjaGVkdWxlIHRoZSBwb3N0aW5nIG9mIGJ1ZmZlcnMgdG8gdGhlIHBlZ3MuCi0JCQkgKi8KLQkJCXJjdl9kZXNjLT5iZWdpbl9hbGxvYyA9IGluZGV4OwotCQkJRFBSSU5USyhFUlIsICJuZXR4ZW5fcG9zdF9yeF9idWZmZXJzOiAiCi0JCQkJIiBhbGxvY2F0ZWQgb25seSAlZCBidWZmZXJzXG4iLCBjb3VudCk7CisJCQlyZHNfcmluZy0+YmVnaW5fYWxsb2MgPSBpbmRleDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJY291bnQrKzsJLyogbm93IHRoZXJlIHNob3VsZCBiZSBubyBmYWlsdXJlICovCi0JCXBkZXNjID0gJnJjdl9kZXNjLT5kZXNjX2hlYWRbcHJvZHVjZXJdOworCQlidWZmZXIgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyLCBsaXN0KTsKKwkJbGlzdF9kZWwoJmJ1ZmZlci0+bGlzdCk7CiAKLSNpZiBkZWZpbmVkKFhHQl9ERUJVRykKLQkJKih1bnNpZ25lZCBsb25nICopKHNrYi0+aGVhZCkgPSAweGMwZGViYWJlOwotCQlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7Ci0JCQlwcmludGsoIkFsbG9jYXRlZCBTS0IgQCVwIGlzIG5vbmxpbmVhclxuIik7Ci0JCX0KLSNlbmRpZgotCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQljb3VudCsrOwkvKiBub3cgdGhlcmUgc2hvdWxkIGJlIG5vIGZhaWx1cmUgKi8KKwkJcGRlc2MgPSAmcmRzX3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisKKwkJaWYgKCFhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCisJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwogCQkvKiBUaGlzIHdpbGwgYmUgc2V0dXAgd2hlbiB3ZSByZWNlaXZlIHRoZQogCQkgKiBidWZmZXIgYWZ0ZXIgaXQgaGFzIGJlZW4gZmlsbGVkICBGU0wgIFRCRCBUQkQKIAkJICogc2tiLT5kZXYgPSBuZXRkZXY7CiAJCSAqLwotCQlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIHJjdl9kZXNjLT5kbWFfc2l6ZSwKKwkJZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCByZHNfcmluZy0+ZG1hX3NpemUsCiAJCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlwZGVzYy0+YWRkcl9idWZmZXIgPSBjcHVfdG9fbGU2NChkbWEpOwogCQlidWZmZXItPnNrYiA9IHNrYjsKQEAgLTEyODQsMTEyICsxNDYzLDEwMSBAQAogCQlidWZmZXItPmRtYSA9IGRtYTsKIAkJLyogbWFrZSBhIHJjdiBkZXNjcmlwdG9yICAqLwogCQlwZGVzYy0+cmVmZXJlbmNlX2hhbmRsZSA9IGNwdV90b19sZTE2KGJ1ZmZlci0+cmVmX2hhbmRsZSk7Ci0JCXBkZXNjLT5idWZmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIocmN2X2Rlc2MtPmRtYV9zaXplKTsKKwkJcGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBjcHVfdG9fbGUzMihyZHNfcmluZy0+ZG1hX3NpemUpOwogCQlEUFJJTlRLKElORk8sICJkb25lIHdyaXRpbmcgZGVzY3JpcHRlclxuIik7CiAJCXByb2R1Y2VyID0KLQkJICAgIGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQpOwotCQlpbmRleCA9IGdldF9uZXh0X2luZGV4KGluZGV4LCByY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQpOwotCQlidWZmZXIgPSAmcmN2X2Rlc2MtPnJ4X2J1Zl9hcnJbaW5kZXhdOworCQkgICAgZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCk7CisJCWluZGV4ID0gZ2V0X25leHRfaW5kZXgoaW5kZXgsIHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCk7CiAJfQogCS8qIGlmIHdlIGRpZCBhbGxvY2F0ZSBidWZmZXJzLCB0aGVuIHdyaXRlIHRoZSBjb3VudCB0byBQaGFudG9tICovCiAJaWYgKGNvdW50KSB7Ci0JCXJjdl9kZXNjLT5iZWdpbl9hbGxvYyA9IGluZGV4OwotCQlyY3ZfZGVzYy0+cmN2X3BlbmRpbmcgKz0gY291bnQ7Ci0JCXJjdl9kZXNjLT5wcm9kdWNlciA9IHByb2R1Y2VyOworCQlyZHNfcmluZy0+YmVnaW5fYWxsb2MgPSBpbmRleDsKKwkJcmRzX3JpbmctPnByb2R1Y2VyID0gcHJvZHVjZXI7CiAJCQkvKiBXaW5kb3cgPSAxICovCi0JCQl3cml0ZWwoKHByb2R1Y2VyIC0gMSkgJgotCQkJICAgICAgIChyY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQgLSAxKSwKLQkJCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAotCQkJCQkJICAgIHJlY3ZfY3JiX3JlZ2lzdGVyc1sKLQkJCQkJCSAgICBhZGFwdGVyLT5wb3J0bnVtXS4KLQkJCQkJCSAgICByY3ZfZGVzY19jcmJbcmluZ2lkXS4KLQkJCQkJCSAgICBjcmJfcmN2X3Byb2R1Y2VyX29mZnNldCkpOworCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIsCisJCQkJKHByb2R1Y2VyLTEpICYgKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudC0xKSk7CisKKwkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgewogCQkJLyoKIAkJCSAqIFdyaXRlIGEgZG9vcmJlbGwgbXNnIHRvIHRlbGwgcGhhbm1vbiBvZiBjaGFuZ2UgaW4KIAkJCSAqIHJlY2VpdmUgcmluZyBwcm9kdWNlcgorCQkJICogT25seSBmb3IgZmlybXdhcmUgdmVyc2lvbiA8IDQuMC4wCiAJCQkgKi8KIAkJCW5ldHhlbl9zZXRfbXNnX3BlZ19pZChtc2csIE5FVFhFTl9SQ1ZfUEVHX0RCX0lEKTsKIAkJCW5ldHhlbl9zZXRfbXNnX3ByaXZpZChtc2cpOwogCQkJbmV0eGVuX3NldF9tc2dfY291bnQobXNnLAogCQkJCQkgICAgICgocHJvZHVjZXIgLQotCQkJCQkgICAgICAgMSkgJiAocmN2X2Rlc2MtPgorCQkJCQkgICAgICAgMSkgJiAocmRzX3JpbmctPgogCQkJCQkJICAgICBtYXhfcnhfZGVzY19jb3VudCAtIDEpKSk7CiAJCQluZXR4ZW5fc2V0X21zZ19jdHhpZChtc2csIGFkYXB0ZXItPnBvcnRudW0pOwogCQkJbmV0eGVuX3NldF9tc2dfb3Bjb2RlKG1zZywgTkVUWEVOX1JDVl9QUk9EVUNFUihyaW5naWQpKTsKIAkJCXdyaXRlbChtc2csCiAJCQkgICAgICAgREJfTk9STUFMSVpFKGFkYXB0ZXIsCiAJCQkJCSAgICBORVRYRU5fUkNWX1BST0RVQ0VSX09GRlNFVCkpOworCQl9CiAJfQogfQogCiBzdGF0aWMgdm9pZCBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQkJCQl1aW50MzJfdCBjdHgsIHVpbnQzMl90IHJpbmdpZCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPmFody5wZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICYoYWRhcHRlci0+cmVjdl9jdHhbY3R4XSk7Ci0Jc3RydWN0IG5ldHhlbl9yY3ZfZGVzY19jdHggKnJjdl9kZXNjID0gTlVMTDsKKwlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcgPSBOVUxMOwogCXUzMiBwcm9kdWNlcjsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7CiAJaW50IGNvdW50ID0gMDsKIAlpbnQgaW5kZXggPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKLQlyY3ZfZGVzYyA9ICZyZWN2X2N0eC0+cmN2X2Rlc2NbcmluZ2lkXTsKKwlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmdpZF07CiAKLQlwcm9kdWNlciA9IHJjdl9kZXNjLT5wcm9kdWNlcjsKLQlpbmRleCA9IHJjdl9kZXNjLT5iZWdpbl9hbGxvYzsKLQlidWZmZXIgPSAmcmN2X2Rlc2MtPnJ4X2J1Zl9hcnJbaW5kZXhdOworCXByb2R1Y2VyID0gcmRzX3JpbmctPnByb2R1Y2VyOworCWluZGV4ID0gcmRzX3JpbmctPmJlZ2luX2FsbG9jOworCWhlYWQgPSAmcmRzX3JpbmctPmZyZWVfbGlzdDsKIAkvKiBXZSBjYW4gc3RhcnQgd3JpdGluZyByeCBkZXNjcmlwdG9ycyBpbnRvIHRoZSBwaGFudG9tIG1lbW9yeS4gKi8KLQl3aGlsZSAoYnVmZmVyLT5zdGF0ZSA9PSBORVRYRU5fQlVGRkVSX0ZSRUUpIHsKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihyY3ZfZGVzYy0+c2tiX3NpemUpOworCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgeworCisJCXNrYiA9IGRldl9hbGxvY19za2IocmRzX3JpbmctPnNrYl9zaXplKTsKIAkJaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0JCQkvKgotCQkJICogV2UgbmVlZCB0byBzY2hlZHVsZSB0aGUgcG9zdGluZyBvZiBidWZmZXJzIHRvIHRoZSBwZWdzLgotCQkJICovCi0JCQlyY3ZfZGVzYy0+YmVnaW5fYWxsb2MgPSBpbmRleDsKLQkJCURQUklOVEsoRVJSLCAibmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiOiAiCi0JCQkJIiBhbGxvY2F0ZWQgb25seSAlZCBidWZmZXJzXG4iLCBjb3VudCk7CisJCQlyZHNfcmluZy0+YmVnaW5fYWxsb2MgPSBpbmRleDsKIAkJCWJyZWFrOwogCQl9CisKKwkJYnVmZmVyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciwgbGlzdCk7CisJCWxpc3RfZGVsKCZidWZmZXItPmxpc3QpOworCiAJCWNvdW50Kys7CS8qIG5vdyB0aGVyZSBzaG91bGQgYmUgbm8gZmFpbHVyZSAqLwotCQlwZGVzYyA9ICZyY3ZfZGVzYy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKLQkJLyoKLQkJICogVGhpcyB3aWxsIGJlIHNldHVwIHdoZW4gd2UgcmVjZWl2ZSB0aGUKLQkJICogYnVmZmVyIGFmdGVyIGl0IGhhcyBiZWVuIGZpbGxlZAotCQkgKiBza2ItPmRldiA9IG5ldGRldjsKLQkJICovCisJCXBkZXNjID0gJnJkc19yaW5nLT5kZXNjX2hlYWRbcHJvZHVjZXJdOworCQlpZiAoIWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCkKKwkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJCWJ1ZmZlci0+c2tiID0gc2tiOwogCQlidWZmZXItPnN0YXRlID0gTkVUWEVOX0JVRkZFUl9CVVNZOwogCQlidWZmZXItPmRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKLQkJCQkJICAgICByY3ZfZGVzYy0+ZG1hX3NpemUsCisJCQkJCSAgICAgcmRzX3JpbmctPmRtYV9zaXplLAogCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJLyogbWFrZSBhIHJjdiBkZXNjcmlwdG9yICAqLwogCQlwZGVzYy0+cmVmZXJlbmNlX2hhbmRsZSA9IGNwdV90b19sZTE2KGJ1ZmZlci0+cmVmX2hhbmRsZSk7Ci0JCXBkZXNjLT5idWZmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIocmN2X2Rlc2MtPmRtYV9zaXplKTsKKwkJcGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBjcHVfdG9fbGUzMihyZHNfcmluZy0+ZG1hX3NpemUpOwogCQlwZGVzYy0+YWRkcl9idWZmZXIgPSBjcHVfdG9fbGU2NChidWZmZXItPmRtYSk7Ci0JCURQUklOVEsoSU5GTywgImRvbmUgd3JpdGluZyBkZXNjcmlwdGVyXG4iKTsKIAkJcHJvZHVjZXIgPQotCQkgICAgZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHJjdl9kZXNjLT5tYXhfcnhfZGVzY19jb3VudCk7Ci0JCWluZGV4ID0gZ2V0X25leHRfaW5kZXgoaW5kZXgsIHJjdl9kZXNjLT5tYXhfcnhfZGVzY19jb3VudCk7Ci0JCWJ1ZmZlciA9ICZyY3ZfZGVzYy0+cnhfYnVmX2FycltpbmRleF07CisJCSAgICBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJaW5kZXggPSBnZXRfbmV4dF9pbmRleChpbmRleCwgcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJYnVmZmVyID0gJnJkc19yaW5nLT5yeF9idWZfYXJyW2luZGV4XTsKIAl9CiAKIAkvKiBpZiB3ZSBkaWQgYWxsb2NhdGUgYnVmZmVycywgdGhlbiB3cml0ZSB0aGUgY291bnQgdG8gUGhhbnRvbSAqLwogCWlmIChjb3VudCkgewotCQlyY3ZfZGVzYy0+YmVnaW5fYWxsb2MgPSBpbmRleDsKLQkJcmN2X2Rlc2MtPnJjdl9wZW5kaW5nICs9IGNvdW50OwotCQlyY3ZfZGVzYy0+cHJvZHVjZXIgPSBwcm9kdWNlcjsKKwkJcmRzX3JpbmctPmJlZ2luX2FsbG9jID0gaW5kZXg7CisJCXJkc19yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwogCQkJLyogV2luZG93ID0gMSAqLwotCQkJd3JpdGVsKChwcm9kdWNlciAtIDEpICYKLQkJCSAgICAgICAocmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50IC0gMSksCi0JCQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKLQkJCQkJCSAgICByZWN2X2NyYl9yZWdpc3RlcnNbCi0JCQkJCQkgICAgYWRhcHRlci0+cG9ydG51bV0uCi0JCQkJCQkgICAgcmN2X2Rlc2NfY3JiW3JpbmdpZF0uCi0JCQkJCQkgICAgY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQpKTsKKwkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIsCisJCQkJKHByb2R1Y2VyLTEpICYgKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudC0xKSk7CiAJCQl3bWIoKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pc3IuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2lzci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmNlYzQxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2lzci5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSAibmV0eGVuX25pYy5oIgotI2luY2x1ZGUgIm5ldHhlbl9uaWNfaHcuaCIKLSNpbmNsdWRlICJuZXR4ZW5fbmljX3BoYW5fcmVnLmgiCi0KLS8qCi0gKiBuZXR4ZW5fbmljX2dldF9zdGF0cyAtIEdldCBTeXN0ZW0gTmV0d29yayBTdGF0aXN0aWNzCi0gKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR4ZW5fbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmFkYXB0ZXItPm5ldF9zdGF0czsKLQotCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOwotCi0JLyogdG90YWwgcGFja2V0cyByZWNlaXZlZCAgICovCi0Jc3RhdHMtPnJ4X3BhY2tldHMgPSBhZGFwdGVyLT5zdGF0cy5ub19yY3Y7Ci0JLyogdG90YWwgcGFja2V0cyB0cmFuc21pdHRlZCAgICAqLwotCXN0YXRzLT50eF9wYWNrZXRzID0gYWRhcHRlci0+c3RhdHMueG1pdGVkZnJhbWVzICsKLQkJYWRhcHRlci0+c3RhdHMueG1pdGZpbmlzaGVkOwotCS8qIHRvdGFsIGJ5dGVzIHJlY2VpdmVkICAgICAqLwotCXN0YXRzLT5yeF9ieXRlcyA9IGFkYXB0ZXItPnN0YXRzLnJ4Ynl0ZXM7Ci0JLyogdG90YWwgYnl0ZXMgdHJhbnNtaXR0ZWQgICovCi0Jc3RhdHMtPnR4X2J5dGVzID0gYWRhcHRlci0+c3RhdHMudHhieXRlczsKLQkvKiBiYWQgcGFja2V0cyByZWNlaXZlZCAgICAgKi8KLQlzdGF0cy0+cnhfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMucmN2ZGJhZHNrYjsKLQkvKiBwYWNrZXQgdHJhbnNtaXQgcHJvYmxlbXMgKi8KLQlzdGF0cy0+dHhfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMubm9jbWRkZXNjcmlwdG9yOwotCS8qIG5vIHNwYWNlIGluIGxpbnV4IGJ1ZmZlcnMgICAgKi8KLQlzdGF0cy0+cnhfZHJvcHBlZCA9IGFkYXB0ZXItPnN0YXRzLnJ4ZHJvcHBlZDsKLQkvKiBubyBzcGFjZSBhdmFpbGFibGUgaW4gbGludXggICovCi0Jc3RhdHMtPnR4X2Ryb3BwZWQgPSBhZGFwdGVyLT5zdGF0cy50eGRyb3BwZWQ7Ci0KLQlyZXR1cm4gc3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkIG5ldHhlbl9pbmRpY2F0ZV9saW5rX3N0YXR1cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCXUzMiBsaW5rKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0KLQlpZiAobGluaykKLQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwotCWVsc2UKLQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLX0KLQotI2lmIDAKLXZvaWQgbmV0eGVuX2hhbmRsZV9wb3J0X2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBlbmFibGUpCi17Ci0JX191MzIgaW50X3NyYzsKLQotCS8qICBUaGlzIHNob3VsZCBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZSAqLwotCWlmIChhZGFwdGVyLT5waHlfcmVhZCkKLQkJYWRhcHRlci0+cGh5X3JlYWQoYWRhcHRlciwKLQkJCQkgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9JTlRfU1RBVFVTLAotCQkJCSAgJmludF9zcmMpOwotCWlmIChpbnRfc3JjID09IDApIHsKLQkJRFBSSU5USyhJTkZPLCAiTm8gcGh5IGludGVycnVwdHMgZm9yIHBvcnQgIyVkXG4iLCBwb3J0bm8pOwotCQlyZXR1cm47Ci0JfQotCWlmIChhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKQotCQlhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOwotCi0JaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9qYWJiZXIoaW50X3NyYykpCi0JCURQUklOVEsoSU5GTywgIkphYmJlciBpbnRlcnJ1cHQgXG4iKTsKLQotCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfcG9sYXJpdHlfY2hhbmdlZChpbnRfc3JjKSkKLQkJRFBSSU5USyhJTkZPLCAiUE9MQVJJVFkgQ0hBTkdFRCBpbnQgXG4iKTsKLQotCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZW5lcmd5X2RldGVjdChpbnRfc3JjKSkKLQkJRFBSSU5USyhJTkZPLCAiRU5FUkdZIERFVEVDVCBJTlQgXG4iKTsKLQotCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZG93bnNoaWZ0KGludF9zcmMpKQotCQlEUFJJTlRLKElORk8sICJET1dOU0hJRlQgSU5UIFxuIik7Ci0JLyogd3JpdGUgaXQgZG93biBsYXRlci4uICovCi0JaWYgKChuZXR4ZW5fZ2V0X3BoeV9pbnRfc3BlZWRfY2hhbmdlZChpbnRfc3JjKSkKLQkgICAgfHwgKG5ldHhlbl9nZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGludF9zcmMpKSkgewotCQlfX3UzMiBzdGF0dXM7Ci0KLQkJRFBSSU5USyhJTkZPLCAiU1BFRUQgQ0hBTkdFRCBPUiBMSU5LIFNUQVRVUyBDSEFOR0VEIFxuIik7Ci0KLQkJaWYgKGFkYXB0ZXItPnBoeV9yZWFkCi0JCSAgICAmJiBhZGFwdGVyLT5waHlfcmVhZChhZGFwdGVyLAotCQkJCQkgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX1BIWV9TVEFUVVMsCi0JCQkJCSAmc3RhdHVzKSA9PSAwKSB7Ci0JCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2xpbmtfc3RhdHVzX2NoYW5nZWQoaW50X3NyYykpIHsKLQkJCQlpZiAobmV0eGVuX2dldF9waHlfbGluayhzdGF0dXMpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBMaW5rIFVQXG4iLAotCQkJCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCQkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0KLQkJCQl9IGVsc2UgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgTGluayBET1dOXG4iLAotCQkJCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCQkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JCQkJfQotCQkJCW5ldHhlbl9pbmRpY2F0ZV9saW5rX3N0YXR1cyhhZGFwdGVyLAotCQkJCQkJCSAgICBuZXR4ZW5fZ2V0X3BoeV9saW5rCi0JCQkJCQkJICAgIChzdGF0dXMpKTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoYWRhcHRlci0+ZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKQotCQlhZGFwdGVyLT5lbmFibGVfcGh5X2ludGVycnVwdHMoYWRhcHRlcik7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCi1zdGF0aWMgdm9pZCBuZXR4ZW5fbmljX2lzcl9vdGhlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IHBvcnRubyA9IGFkYXB0ZXItPnBvcnRudW07Ci0JdTMyIHZhbCwgbGlua3VwLCBxZ19saW5rc3VwOwotCi0JLyogdmVyaWZ5IHRoZSBvZmZzZXQgKi8KLQl2YWwgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfWEdfU1RBVEUpKTsKLQl2YWwgPSB2YWwgPj4gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKLQlpZiAodmFsID09IGFkYXB0ZXItPmFody5xZ19saW5rc3VwKQotCQlyZXR1cm47Ci0KLQlxZ19saW5rc3VwID0gYWRhcHRlci0+YWh3LnFnX2xpbmtzdXA7Ci0JYWRhcHRlci0+YWh3LnFnX2xpbmtzdXAgPSB2YWw7Ci0JRFBSSU5USyhJTkZPLCAibGluayB1cGRhdGUgMHglMDh4XG4iLCB2YWwpOwotCi0JbGlua3VwID0gdmFsICYgMTsKLQotCWlmIChsaW5rdXAgIT0gKHFnX2xpbmtzdXAgJiAxKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgUE9SVCAlZCBsaW5rICVzXG4iLAotCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgcG9ydG5vLAotCQkgICAgICAgKChsaW5rdXAgPT0gMCkgPyAiZG93biIgOiAidXAiKSk7Ci0JCW5ldHhlbl9pbmRpY2F0ZV9saW5rX3N0YXR1cyhhZGFwdGVyLCBsaW5rdXApOwotCQlpZiAobGlua3VwKQotCQkJbmV0eGVuX25pY19zZXRfbGlua19wYXJhbWV0ZXJzKGFkYXB0ZXIpOwotCi0JfQotfQotCi12b2lkIG5ldHhlbl9uaWNfZ2JlX2hhbmRsZV9waHlfaW50cihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JbmV0eGVuX25pY19pc3Jfb3RoZXIoYWRhcHRlcik7Ci19Ci0KLSNpZiAwCi1pbnQgbmV0eGVuX25pY19saW5rX29rKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7Ci0JY2FzZSBORVRYRU5fTklDX0dCRToKLQkJcmV0dXJuICgoYWRhcHRlci0+YWh3LnFnX2xpbmtzdXApICYgMSk7Ci0KLQljYXNlIE5FVFhFTl9OSUNfWEdCRToKLQkJcmV0dXJuICgoYWRhcHRlci0+YWh3LnhnX2xpbmt1cCkgJiAxKTsKLQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiIlczogRnVuY3Rpb246ICVzLCBVbmtub3duIGJvYXJkIHR5cGVcbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBfX0ZVTkNUSU9OX18pOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KLXZvaWQgbmV0eGVuX25pY194Z2JlX2hhbmRsZV9waHlfaW50cihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1MzIgdmFsOwotCi0JLyogV0lORE9XID0gMSAqLwotCXZhbCA9IHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9YR19TVEFURSkpOwotCXZhbCA+Pj0gKGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQgKiA4KTsKLQl2YWwgJj0gMHhmZjsKLQotCWlmIChhZGFwdGVyLT5haHcueGdfbGlua3VwID09IDEgJiYgdmFsICE9IFhHX0xJTktfVVApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIE5JQyBMaW5rIGlzIGRvd25cbiIsCi0JCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUpOwotCQlhZGFwdGVyLT5haHcueGdfbGlua3VwID0gMDsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQkJfQotCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnhnX2xpbmt1cCA9PSAwICYmIHZhbCA9PSBYR19MSU5LX1VQKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBOSUMgTGluayBpcyB1cFxuIiwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7Ci0JCWFkYXB0ZXItPmFody54Z19saW5rdXAgPSAxOwotCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggNjNjZDY3Yi4uOTFkMjA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtNDksMTMgKzQ5LDE4IEBACiBzdGF0aWMgY2hhciBuZXR4ZW5fbmljX2RyaXZlcl9zdHJpbmdbXSA9ICJOZXRYZW4gTmV0d29yayBEcml2ZXIgdmVyc2lvbiAiCiAgICAgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQ7CiAKLSNkZWZpbmUgTkVUWEVOX05FVERFVl9XRUlHSFQgMTIwCi0jZGVmaW5lIE5FVFhFTl9BREFQVEVSX1VQX01BR0lDIDc3NwotI2RlZmluZSBORVRYRU5fTklDX1BFR19UVU5FIDAKK3N0YXRpYyBpbnQgcG9ydF9tb2RlID0gTkVUWEVOX1BPUlRfTU9ERV9BVVRPX05FRzsKKworLyogRGVmYXVsdCB0byByZXN0cmljdGVkIDFHIGF1dG8tbmVnIG1vZGUgKi8KK3N0YXRpYyBpbnQgd29sX3BvcnRfbW9kZSA9IDU7CisKK3N0YXRpYyBpbnQgdXNlX21zaSA9IDE7CisKK3N0YXRpYyBpbnQgdXNlX21zaV94ID0gMTsKIAogLyogTG9jYWwgZnVuY3Rpb25zIHRvIE5ldFhlbiBOSUMgZHJpdmVyICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuZXR4ZW5fbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOworCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBuZXR4ZW5fbmljX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyBpbnQgbmV0eGVuX25pY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKQEAgLTgzLDYgKzg4LDcgQEAKIAlFTlRSWSgweDAwMDUpLAogCUVOVFJZKDB4MDAyNCksCiAJRU5UUlkoMHgwMDI1KSwKKwlFTlRSWSgweDAxMDApLAogCXswLH0KIH07CiAKQEAgLTEwOCw5NSArMTE0LDYxIEBACiAKIHN0YXRpYyB2b2lkIG5ldHhlbl93YXRjaGRvZyh1bnNpZ25lZCBsb25nKTsKIAotc3RhdGljIHZvaWQgbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJICAgdWludDMyX3QgY3JiX3Byb2R1Y2VyKQorc3RhdGljIHVpbnQzMl90IGNyYl9jbWRfcHJvZHVjZXJbNF0gPSB7CisJQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVQsIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzEsCisJQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVRfMiwgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVRfMworfTsKKwordm9pZAorbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdWludDMyX3QgY3JiX3Byb2R1Y2VyKQogewotCXN3aXRjaCAoYWRhcHRlci0+cG9ydG51bSkgewotCQljYXNlIDA6Ci0JCQl3cml0ZWwoY3JiX3Byb2R1Y2VyLCBORVRYRU5fQ1JCX05PUk1BTElaRQotCQkJCQkoYWRhcHRlciwgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVQpKTsKLQkJCXJldHVybjsKLQkJY2FzZSAxOgotCQkJd3JpdGVsKGNyYl9wcm9kdWNlciwgTkVUWEVOX0NSQl9OT1JNQUxJWkUKLQkJCQkJKGFkYXB0ZXIsIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzEpKTsKLQkJCXJldHVybjsKLQkJY2FzZSAyOgotCQkJd3JpdGVsKGNyYl9wcm9kdWNlciwgTkVUWEVOX0NSQl9OT1JNQUxJWkUKLQkJCQkJKGFkYXB0ZXIsIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzIpKTsKLQkJCXJldHVybjsKLQkJY2FzZSAzOgotCQkJd3JpdGVsKGNyYl9wcm9kdWNlciwgTkVUWEVOX0NSQl9OT1JNQUxJWkUKLQkJCQkJKGFkYXB0ZXIsIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzMpKTsKLQkJCXJldHVybjsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldlIHRyaWVkIHRvIHVwZGF0ZSAiCi0JCQkJCSJDUkJfQ01EX1BST0RVQ0VSX09GRlNFVCBmb3IgaW52YWxpZCAiCi0JCQkJCSJQQ0kgZnVuY3Rpb24gaWQgJWRcbiIsCi0JCQkJCWFkYXB0ZXItPnBvcnRudW0pOwotCQkJcmV0dXJuOwotCX0KKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfcHJvZHVjZXIsIGNyYl9wcm9kdWNlcik7CiB9CiAKLXN0YXRpYyB2b2lkIG5ldHhlbl9uaWNfdXBkYXRlX2NtZF9jb25zdW1lcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCSAgIHUzMiBjcmJfY29uc3VtZXIpCitzdGF0aWMgdWludDMyX3QgY3JiX2NtZF9jb25zdW1lcls0XSA9IHsKKwlDUkJfQ01EX0NPTlNVTUVSX09GRlNFVCwgQ1JCX0NNRF9DT05TVU1FUl9PRkZTRVRfMSwKKwlDUkJfQ01EX0NPTlNVTUVSX09GRlNFVF8yLCBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVF8zCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK25ldHhlbl9uaWNfdXBkYXRlX2NtZF9jb25zdW1lcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXUzMiBjcmJfY29uc3VtZXIpCiB7Ci0Jc3dpdGNoIChhZGFwdGVyLT5wb3J0bnVtKSB7Ci0JCWNhc2UgMDoKLQkJCXdyaXRlbChjcmJfY29uc3VtZXIsIE5FVFhFTl9DUkJfTk9STUFMSVpFCi0JCQkJKGFkYXB0ZXIsIENSQl9DTURfQ09OU1VNRVJfT0ZGU0VUKSk7Ci0JCQlyZXR1cm47Ci0JCWNhc2UgMToKLQkJCXdyaXRlbChjcmJfY29uc3VtZXIsIE5FVFhFTl9DUkJfTk9STUFMSVpFCi0JCQkJKGFkYXB0ZXIsIENSQl9DTURfQ09OU1VNRVJfT0ZGU0VUXzEpKTsKLQkJCXJldHVybjsKLQkJY2FzZSAyOgotCQkJd3JpdGVsKGNyYl9jb25zdW1lciwgTkVUWEVOX0NSQl9OT1JNQUxJWkUKLQkJCQkoYWRhcHRlciwgQ1JCX0NNRF9DT05TVU1FUl9PRkZTRVRfMikpOwotCQkJcmV0dXJuOwotCQljYXNlIDM6Ci0JCQl3cml0ZWwoY3JiX2NvbnN1bWVyLCBORVRYRU5fQ1JCX05PUk1BTElaRQotCQkJCShhZGFwdGVyLCBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVF8zKSk7Ci0JCQlyZXR1cm47Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJXZSB0cmllZCB0byB1cGRhdGUgIgotCQkJCQkiQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVQgZm9yIGludmFsaWQgIgotCQkJCQkiUENJIGZ1bmN0aW9uIGlkICVkXG4iLAotCQkJCQlhZGFwdGVyLT5wb3J0bnVtKTsKLQkJCXJldHVybjsKLQl9CisJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX2NvbnN1bWVyLCBjcmJfY29uc3VtZXIpOwogfQogCi0jZGVmaW5lCUFEQVBURVJfTElTVF9TSVpFIDEyCi0KLXN0YXRpYyB1aW50MzJfdCBtc2lfdGd0X3N0YXR1c1s0XSA9IHsKK3N0YXRpYyB1aW50MzJfdCBtc2lfdGd0X3N0YXR1c1s4XSA9IHsKIAlJU1JfSU5UX1RBUkdFVF9TVEFUVVMsIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GMSwKLQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjIsIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GMworCUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GMiwgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YzLAorCUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GNCwgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y1LAorCUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GNiwgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y3CiB9OwogCi1zdGF0aWMgdWludDMyX3Qgc3dfaW50X21hc2tbNF0gPSB7Ci0JQ1JCX1NXX0lOVF9NQVNLXzAsIENSQl9TV19JTlRfTUFTS18xLAotCUNSQl9TV19JTlRfTUFTS18yLCBDUkJfU1dfSU5UX01BU0tfMwotfTsKK3N0YXRpYyBzdHJ1Y3QgbmV0eGVuX2xlZ2FjeV9pbnRyX3NldCBsZWdhY3lfaW50cltdID0gTlhfTEVHQUNZX0lOVFJfQ09ORklHOwogCiBzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX2Rpc2FibGVfaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgbWFzayA9IDB4N2ZmOwogCWludCByZXRyaWVzID0gMzI7Ci0JaW50IHBvcnQgPSBhZGFwdGVyLT5wb3J0bnVtOwogCWludCBwY2lfZm4gPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CiAKIAlpZiAoYWRhcHRlci0+bXNpX21vZGUgIT0gTVNJX01PREVfTVVMVElGVU5DKQotCQl3cml0ZWwoMHgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBzd19pbnRfbWFza1twb3J0XSkpOworCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJYWRhcHRlci0+Y3JiX2ludHJfbWFzaywgMCk7CiAKIAlpZiAoYWRhcHRlci0+aW50cl9zY2hlbWUgIT0gLTEgJiYKIAkgICAgYWRhcHRlci0+aW50cl9zY2hlbWUgIT0gSU5UUl9TQ0hFTUVfUEVSUE9SVCkKLQkJd3JpdGVsKG1hc2ssUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwgSVNSX0lOVF9NQVNLKSk7CisJCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwgSVNSX0lOVF9NQVNLLCBtYXNrKTsKIAotCWlmICghKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkpIHsKKwlpZiAoIU5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpKSB7CiAJCWRvIHsKLQkJCXdyaXRlbCgweGZmZmZmZmZmLAotCQkJICAgICAgIFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsIElTUl9JTlRfVEFSR0VUX1NUQVRVUykpOwotCQkJbWFzayA9IHJlYWRsKHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBJU1JfSU5UX1ZFQ1RPUikpOworCQkJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZShhZGFwdGVyLAorCQkJCQlJU1JfSU5UX1RBUkdFVF9TVEFUVVMsIDB4ZmZmZmZmZmYpOworCQkJbWFzayA9IGFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZShhZGFwdGVyLAorCQkJCQlJU1JfSU5UX1ZFQ1RPUik7CiAJCQlpZiAoIShtYXNrICYgMHg4MCkpCiAJCQkJYnJlYWs7CiAJCQl1ZGVsYXkoMTApOwpAQCAtMjA4LDggKzE4MCw4IEBACiAJCX0KIAl9IGVsc2UgewogCQlpZiAoYWRhcHRlci0+bXNpX21vZGUgPT0gTVNJX01PREVfTVVMVElGVU5DKSB7Ci0JCQl3cml0ZWwoMHhmZmZmZmZmZiwgUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwKLQkJCQkJCW1zaV90Z3Rfc3RhdHVzW3BjaV9mbl0pKTsKKwkJCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKKwkJCQkJbXNpX3RndF9zdGF0dXNbcGNpX2ZuXSwgMHhmZmZmZmZmZik7CiAJCX0KIAl9CiB9CkBAIC0yMTcsNyArMTg5LDYgQEAKIHN0YXRpYyB2b2lkIG5ldHhlbl9uaWNfZW5hYmxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTMyIG1hc2s7Ci0JaW50IHBvcnQgPSBhZGFwdGVyLT5wb3J0bnVtOwogCiAJRFBSSU5USygxLCBJTkZPLCAiRW50ZXJlZCBJU1IgRW5hYmxlIFxuIik7CiAKQEAgLTIzNSwyNCArMjA2LDI5OSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQl3cml0ZWwobWFzaywgUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwgSVNSX0lOVF9NQVNLKSk7CisJCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwgSVNSX0lOVF9NQVNLLCBtYXNrKTsKIAl9CiAKLQl3cml0ZWwoMHgxLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBzd19pbnRfbWFza1twb3J0XSkpOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgYWRhcHRlci0+Y3JiX2ludHJfbWFzaywgMHgxKTsKIAotCWlmICghKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkpIHsKKwlpZiAoIU5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpKSB7CiAJCW1hc2sgPSAweGJmZjsKIAkJaWYgKGFkYXB0ZXItPmludHJfc2NoZW1lICE9IC0xICYmCiAJCQlhZGFwdGVyLT5pbnRyX3NjaGVtZSAhPSBJTlRSX1NDSEVNRV9QRVJQT1JUKSB7Ci0JCQl3cml0ZWwoMFgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfSU5UX1ZFQ1RPUikpOworCQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJCQlDUkJfSU5UX1ZFQ1RPUiwgMCk7CiAJCX0KLQkJd3JpdGVsKG1hc2ssCi0JCSAgICAgICBQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLCBJU1JfSU5UX1RBUkdFVF9NQVNLKSk7CisJCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKKwkJCQlJU1JfSU5UX1RBUkdFVF9NQVNLLCBtYXNrKTsKIAl9CiAKIAlEUFJJTlRLKDEsIElORk8sICJEb25lIHdpdGggZW5hYmxlIEludFxuIik7CiB9CiAKK3N0YXRpYyBpbnQgbnhfc2V0X2RtYV9tYXNrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdWludDhfdCByZXZpc2lvbl9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IGVycjsKKwl1aW50NjRfdCBtYXNrOworCisjaWZkZWYgQ09ORklHX0lBNjQKKwlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOworI2Vsc2UKKwlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApIHsKKwkJLyogc2hvdWxkIGdvIHRvIERNQV82NEJJVF9NQVNLICovCisJCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7CisJCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKKwl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AzX0EyKSB7CisJCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7CisJCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKKwl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AyX0MxKSB7CisJCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM1QklUX01BU0s7CisJCW1hc2sgPSBETUFfMzVCSVRfTUFTSzsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOworCQltYXNrID0gRE1BXzMyQklUX01BU0s7CisJCWdvdG8gc2V0XzMyX2JpdF9tYXNrOworCX0KKworCS8qCisJICogQ29uc2lzdGVudCBETUEgbWFzayBpcyBzZXQgdG8gMzIgYml0IGJlY2F1c2UgaXQgY2Fubm90IGJlIHNldCB0bworCSAqIDM1IGJpdHMuIEZvciBQMyBhbHNvIGxlYXZlIGl0IGF0IDMyIGJpdHMgZm9yIG5vdy4gT25seSB0aGUgcmluZ3MKKwkgKiBjb21lIG9mZiB0aGlzIHBvb2wuCisJICovCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzaykgPT0gMCAmJgorCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spID09IDApIHsKKwkJYWRhcHRlci0+cGNpX3VzaW5nX2RhYyA9IDE7CisJCXJldHVybiAwOworCX0KKyNlbmRpZiAvKiBDT05GSUdfSUE2NCAqLworCitzZXRfMzJfYml0X21hc2s6CisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKCFlcnIpCisJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKGVycikgeworCQlEUFJJTlRLKEVSUiwgIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmc6JWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJYWRhcHRlci0+cGNpX3VzaW5nX2RhYyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5ldHhlbl9jaGVja19vcHRpb25zKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKSB7CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM19ITUVaOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfWEdfTE9NOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX0NYNDoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19DWDRfTFA6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM19JTUVaOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9QTFVTOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1hGUDoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVDoKKwkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKKwkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwkJYnJlYWs7CisKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfQ1g0OgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0hNRVo6CisJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gMDsKKwkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwkJYnJlYWs7CisKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX1JFRl9RRzoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0I6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzNV80RzoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMkc6CisJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gMDsKKwkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gMDsKKwkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gYm9hcmQgdHlwZSgweCV4KVxuIiwKKwkJCQlhZGFwdGVyLT5haHcuYm9hcmRjZmcuYm9hcmRfdHlwZSk7CisJCWJyZWFrOworCX0KKworCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50ID0gTUFYX0NNRF9ERVNDUklQVE9SU19IT1NUOworCWFkYXB0ZXItPm1heF9qdW1ib19yeF9kZXNjX2NvdW50ID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUzsKKwlhZGFwdGVyLT5tYXhfbHJvX3J4X2Rlc2NfY291bnQgPSBNQVhfTFJPX1JDVl9ERVNDUklQVE9SUzsKKworCWFkYXB0ZXItPm1heF9wb3NzaWJsZV9yc3NfcmluZ3MgPSAxOworCXJldHVybjsKK30KKworc3RhdGljIGludAorbmV0eGVuX2NoZWNrX2h3X2luaXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZmlyc3RfYm9vdCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChmaXJzdF9ib290ID09IDB4NTU1NTU1NTUpIHsKKwkJLyogVGhpcyBpcyB0aGUgZmlyc3QgYm9vdCBhZnRlciBwb3dlciB1cCAqLworCisJCS8qIFBDSSBidXMgbWFzdGVyIHdvcmthcm91bmQgKi8KKwkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQkJTkVUWEVOX1BDSUVfUkVHKDB4NCksICZmaXJzdF9ib290LCA0KTsKKwkJaWYgKCEoZmlyc3RfYm9vdCAmIDB4NCkpIHsKKwkJCWZpcnN0X2Jvb3QgfD0gMHg0OworCQkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQlORVRYRU5fUENJRV9SRUcoMHg0KSwgJmZpcnN0X2Jvb3QsIDQpOworCQkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQkJCU5FVFhFTl9QQ0lFX1JFRygweDQpLCAmZmlyc3RfYm9vdCwgNCk7CisJCX0KKworCQkvKiBUaGlzIGlzIHRoZSBmaXJzdCBib290IGFmdGVyIHBvd2VyIHVwICovCisJCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKKwkJCU5FVFhFTl9ST01VU0JfR0xCX1NXX1JFU0VULCAmZmlyc3RfYm9vdCwgNCk7CisJCWlmIChmaXJzdF9ib290ICE9IDB4ODAwMDBmKSB7CisJCQkvKiBjbGVhciB0aGUgcmVnaXN0ZXIgZm9yIGZ1dHVyZSB1bmxvYWRzL2xvYWRzICovCisJCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJCU5FVFhFTl9DQU1fUkFNKDB4MWZjKSwgMCk7CisJCQlyZXQgPSAtMTsKKwkJfQorCisJCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCQkvKiBTdGFydCBQMiBib290IGxvYWRlciAqLworCQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJCU5FVFhFTl9DQU1fUkFNKDB4MWZjKSwgTkVUWEVOX0JESU5GT19NQUdJQyk7CisJCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJCU5FVFhFTl9ST01VU0JfR0xCX1BFR1RVTkVfRE9ORSwgMSk7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbmV0eGVuX3NldF9wb3J0X21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB2YWwsIGRhdGE7CisKKwl2YWwgPSBhZGFwdGVyLT5haHcuYm9hcmRjZmcuYm9hcmRfdHlwZTsKKwlpZiAoKHZhbCA9PSBORVRYRU5fQlJEVFlQRV9QM19ITUVaKSB8fAorCQkodmFsID09IE5FVFhFTl9CUkRUWVBFX1AzX1hHX0xPTSkpIHsKKwkJaWYgKHBvcnRfbW9kZSA9PSBORVRYRU5fUE9SVF9NT0RFXzgwMl8zX0FQKSB7CisJCQlkYXRhID0gTkVUWEVOX1BPUlRfTU9ERV84MDJfM19BUDsKKwkJCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCQkJTkVUWEVOX1BPUlRfTU9ERV9BRERSLCAmZGF0YSwgNCk7CisJCX0gZWxzZSBpZiAocG9ydF9tb2RlID09IE5FVFhFTl9QT1JUX01PREVfWEcpIHsKKwkJCWRhdGEgPSBORVRYRU5fUE9SVF9NT0RFX1hHOworCQkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQlORVRYRU5fUE9SVF9NT0RFX0FERFIsICZkYXRhLCA0KTsKKwkJfSBlbHNlIGlmIChwb3J0X21vZGUgPT0gTkVUWEVOX1BPUlRfTU9ERV9BVVRPX05FR18xRykgeworCQkJZGF0YSA9IE5FVFhFTl9QT1JUX01PREVfQVVUT19ORUdfMUc7CisJCQlhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAorCQkJCU5FVFhFTl9QT1JUX01PREVfQUREUiwgJmRhdGEsIDQpOworCQl9IGVsc2UgaWYgKHBvcnRfbW9kZSA9PSBORVRYRU5fUE9SVF9NT0RFX0FVVE9fTkVHX1hHKSB7CisJCQlkYXRhID0gTkVUWEVOX1BPUlRfTU9ERV9BVVRPX05FR19YRzsKKwkJCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCQkJTkVUWEVOX1BPUlRfTU9ERV9BRERSLCAmZGF0YSwgNCk7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gTkVUWEVOX1BPUlRfTU9ERV9BVVRPX05FRzsKKwkJCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCQkJTkVUWEVOX1BPUlRfTU9ERV9BRERSLCAmZGF0YSwgNCk7CisJCX0KKworCQlpZiAoKHdvbF9wb3J0X21vZGUgIT0gTkVUWEVOX1BPUlRfTU9ERV84MDJfM19BUCkgJiYKKwkJCSh3b2xfcG9ydF9tb2RlICE9IE5FVFhFTl9QT1JUX01PREVfWEcpICYmCisJCQkod29sX3BvcnRfbW9kZSAhPSBORVRYRU5fUE9SVF9NT0RFX0FVVE9fTkVHXzFHKSAmJgorCQkJKHdvbF9wb3J0X21vZGUgIT0gTkVUWEVOX1BPUlRfTU9ERV9BVVRPX05FR19YRykpIHsKKwkJCXdvbF9wb3J0X21vZGUgPSBORVRYRU5fUE9SVF9NT0RFX0FVVE9fTkVHOworCQl9CisJCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9XT0xfUE9SVF9NT0RFLAorCQkJJndvbF9wb3J0X21vZGUsIDQpOworCX0KK30KKworI2RlZmluZSBQQ0lfQ0FQX0lEX0dFTiAgMHgxMAorCitzdGF0aWMgdm9pZCBuZXR4ZW5fcGNpZV9zdHJhcF9pbml0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgcGRldmZ1bmNzYXZlOworCXUzMiBjOGM5dmFsdWUgPSAwOworCXUzMiBjaGlja2VuID0gMDsKKwl1MzIgY29udHJvbCA9IDA7CisJaW50IGksIHBvczsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCXBkZXYgPSBwY2lfZ2V0X2RldmljZSgweDExNjYsIDB4MDE0MCwgTlVMTCk7CisJaWYgKHBkZXYpIHsKKwkJcGNpX2Rldl9wdXQocGRldik7CisJCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKKwkJCU5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1RHVF9TUExJVF9DSElDS0VOKSwgJmNoaWNrZW4sIDQpOworCQljaGlja2VuIHw9IDB4NDAwMDsKKwkJYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCU5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1RHVF9TUExJVF9DSElDS0VOKSwgJmNoaWNrZW4sIDQpOworCX0KKworCXBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQlORVRYRU5fUENJRV9SRUcoUENJRV9DSElDS0VOMyksICZjaGlja2VuLCA0KTsKKwkvKiBjbGVhciBjaGlja2VuMy4yNToyNCAqLworCWNoaWNrZW4gJj0gMHhGQ0ZGRkZGRjsKKwkvKgorCSAqIGlmIGdlbjEgYW5kIEIwLCBzZXQgRjEwMjAgLSBpZiBnZW4gMiwgZG8gbm90aGluZworCSAqIGlmIGdlbjIgc2V0IHRvIEYxMDAwCisJICovCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0dFTik7CisJaWYgKHBvcyA9PSAweEMwKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyAweDEwLCAmY29udHJvbCk7CisJCWlmICgoY29udHJvbCAmIDB4MDAwRjAwMDApICE9IDB4MDAwMjAwMDApIHsKKwkJCS8qICBzZXQgY2hpY2tlbjMuMjQgaWYgZ2VuMSAqLworCQkJY2hpY2tlbiB8PSAweDAxMDAwMDAwOworCQl9CisJCXByaW50ayhLRVJOX0lORk8gIiVzIEdlbjIgc3RyYXBwaW5nIGRldGVjdGVkXG4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQljOGM5dmFsdWUgPSAweEYxMDAwOworCX0gZWxzZSB7CisJCS8qIHNldCBjaGlja2VuMy4yNCBpZiBnZW4xICovCisJCWNoaWNrZW4gfD0gMHgwMTAwMDAwMDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgR2VuMSBzdHJhcHBpbmcgZGV0ZWN0ZWRcbiIsCisJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCWlmIChhZGFwdGVyLT5haHcucmV2aXNpb25faWQgPT0gTlhfUDNfQjApCisJCQljOGM5dmFsdWUgPSAweEYxMDIwOworCQllbHNlCisJCQljOGM5dmFsdWUgPSAwOworCisJfQorCWFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCU5FVFhFTl9QQ0lFX1JFRyhQQ0lFX0NISUNLRU4zKSwgJmNoaWNrZW4sIDQpOworCisJaWYgKCFjOGM5dmFsdWUpCisJCXJldHVybjsKKworCXBkZXZmdW5jc2F2ZSA9IHBkZXYtPmRldmZuOworCWlmIChwZGV2ZnVuY3NhdmUgJiAweDA3KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyA4LCAmY29udHJvbCk7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyA4LCAmY29udHJvbCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgcG9zICsgOCwgYzhjOXZhbHVlKTsKKwkJcGRldi0+ZGV2Zm4rKzsKKwl9CisJcGRldi0+ZGV2Zm4gPSBwZGV2ZnVuY3NhdmU7Cit9CisKK3N0YXRpYyB2b2lkIG5ldHhlbl9zZXRfbXNpeF9iaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBlbmFibGUpCit7CisJdTMyIGNvbnRyb2w7CisJaW50IHBvczsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0lYKTsKKwlpZiAocG9zKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MsICZjb250cm9sKTsKKwkJaWYgKGVuYWJsZSkKKwkJCWNvbnRyb2wgfD0gUENJX01TSVhfRkxBR1NfRU5BQkxFOworCQllbHNlCisJCQljb250cm9sID0gMDsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBwb3MsIGNvbnRyb2wpOworCX0KK30KKworc3RhdGljIHZvaWQgbmV0eGVuX2luaXRfbXNpeF9lbnRyaWVzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVI7IGkrKykKKwkJYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ldLmVudHJ5ID0gaTsKK30KKwogLyoKICAqIG5ldHhlbl9uaWNfcHJvYmUoKQogICoKQEAgLTI3OCwyOCArNTI0LDI4IEBACiAKIAogCXU4IF9faW9tZW0gKmRiX3B0ciA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBtZW1fYmFzZSwgbWVtX2xlbiwgZGJfYmFzZSwgZGJfbGVuOwotCWludCBwY2lfdXNpbmdfZGFjLCBpID0gMCwgZXJyOwotCWludCByaW5nOwotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IE5VTEw7Ci0Jc3RydWN0IG5ldHhlbl9yY3ZfZGVzY19jdHggKnJjdl9kZXNjID0gTlVMTDsKLQlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIG1lbV9iYXNlLCBtZW1fbGVuLCBkYl9iYXNlLCBkYl9sZW4sIHBjaV9sZW4wID0gMDsKKwlpbnQgaSA9IDAsIGVycjsKKwlpbnQgZmlyc3RfZHJpdmVyLCBmaXJzdF9ib290OwogCV9fbGU2NCBtYWNfYWRkcltGTEFTSF9OVU1fUE9SVFMgKyAxXTsKLQlpbnQgdmFsaWRfbWFjID0gMDsKIAl1MzIgdmFsOwogCWludCBwY2lfZnVuY19pZCA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlzdHJ1Y3QgbmV0eGVuX2xlZ2FjeV9pbnRyX3NldCAqbGVnYWN5X2ludHJwOworCXVpbnQ4X3QgcmV2aXNpb25faWQ7CiAKIAlpZiAocGNpX2Z1bmNfaWQgPT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9zdHJpbmcpOworCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nKTsKIAogCWlmIChwZGV2LT5jbGFzcyAhPSAweDAyMDAwMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiTmV0WGVuIGZ1bmN0aW9uICVkLCBjbGFzcyAleCB3aWxsIG5vdCAiCiAJCQkJImJlIGVuYWJsZWQuXG4iLHBjaV9mdW5jX2lkLCBwZGV2LT5jbGFzcyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKQogCQlyZXR1cm4gZXJyOworCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CkBAIC0zMDksMTggKzU1NSw2IEBACiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlpZiAocGRldi0+cmV2aXNpb24gPT0gTlhfUDJfQzEgJiYKLQkgICAgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzM1QklUX01BU0spID09IDApICYmCi0JICAgIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzM1QklUX01BU0spID09IDApKSB7Ci0JCXBjaV91c2luZ19kYWMgPSAxOwotCX0gZWxzZSB7Ci0JCWlmICgoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHx8Ci0JCSAgICAoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7Ci0KLQkJcGNpX3VzaW5nX2RhYyA9IDA7Ci0JfQotCiAKIAluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG5ldHhlbl9hZGFwdGVyKSk7CiAJaWYoIW5ldGRldikgewpAQCAtMzMzLDEzICs1NjcsMzUgQEAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOwogCiAJYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKLQotCWFkYXB0ZXItPmFody5wZGV2ID0gcGRldjsKKwlhZGFwdGVyLT5uZXRkZXYgID0gbmV0ZGV2OworCWFkYXB0ZXItPnBkZXYgICAgPSBwZGV2OwogCWFkYXB0ZXItPmFody5wY2lfZnVuYyAgPSBwY2lfZnVuY19pZDsKIAorCXJldmlzaW9uX2lkID0gcGRldi0+cmV2aXNpb247CisJYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID0gcmV2aXNpb25faWQ7CisKKwllcnIgPSBueF9zZXRfZG1hX21hc2soYWRhcHRlciwgcmV2aXNpb25faWQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKKworCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOworCWFkYXB0ZXItPmFody5xZHJfc25fd2luZG93ID0gLTE7CisJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSAtMTsKKwogCS8qIHJlbWFwIHBoeXMgYWRkcmVzcyAqLwogCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiAwIGlzIGZvciBCQVIgMCAqLwogCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCXBjaV9sZW4wID0gMDsKKworCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNOworCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TTsKKwlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNOworCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TTsKKwlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMTI4TTsKKwlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TTsKKwlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8xMjhNOworCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TTsKIAogCS8qIDEyOCBNZWcgb2YgbWVtb3J5ICovCiAJaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8xMjhNQl9TSVpFKSB7CkBAIC0zNTYsMjcgKzYxMiw0OCBAQAogCQkJU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQsIFRISVJEX1BBR0VfR1JPVVBfU0laRSk7CiAJCWZpcnN0X3BhZ2VfZ3JvdXBfc3RhcnQgPSAwOwogCQlmaXJzdF9wYWdlX2dyb3VwX2VuZCAgID0gMDsKKwl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8yTUJfU0laRSkgeworCQlhZGFwdGVyLT5od193cml0ZV93eCA9IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMk07CisJCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMk07CisJCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzJNOworCQlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlID0KKwkJCW5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8yTTsKKwkJYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplID0gbmV0eGVuX25pY19wY2lfcmVhZF9ub3JtYWxpemVfMk07CisJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPQorCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfbm9ybWFsaXplXzJNOworCQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMk07CisJCWFkYXB0ZXItPnBjaV9tZW1fcmVhZCA9IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzJNOworCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlID0gbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzJNOworCisJCW1lbV9wdHIwID0gaW9yZW1hcChtZW1fYmFzZSwgbWVtX2xlbik7CisJCXBjaV9sZW4wID0gbWVtX2xlbjsKKwkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IDA7CisJCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSAwOworCisJCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gMDsKKwkJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAwOworCisJCWFkYXB0ZXItPmFody5tbl93aW5fY3JiID0gMHgxMDAwMDAgKyBQQ0lYX01OX1dJTkRPVyArCisJCQkocGNpX2Z1bmNfaWQgKiAweDIwKTsKKwkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfU05fV0lORE9XOworCQlpZiAocGNpX2Z1bmNfaWQgPCA0KQorCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0gKHBjaV9mdW5jX2lkICogMHgyMCk7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiICs9CisJCQkJCTB4QTAgKyAoKHBjaV9mdW5jX2lkIC0gNCkgKiAweDEwKTsKIAl9IGVsc2UgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCi0JaWYgKCghbWVtX3B0cjAgJiYgbWVtX2xlbiA9PSBORVRYRU5fUENJXzEyOE1CX1NJWkUpIHx8Ci0JCQkhbWVtX3B0cjEgfHwgIW1lbV9wdHIyKSB7Ci0JCURQUklOVEsoRVJSLAotCQkJIkNhbm5vdCByZW1hcCBhZGFwdGVyIG1lbW9yeSBhYm9ydGluZy46IgotCQkJIjAgLT4gJXAsIDEgLT4gJXAsIDIgLT4gJXBcbiIsCi0JCQltZW1fcHRyMCwgbWVtX3B0cjEsIG1lbV9wdHIyKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJWRNQiBtZW1vcnkgbWFwXG4iLCAoaW50KShtZW1fbGVuPj4yMCkpOwogCi0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9pb3VubWFwOwotCX0KIAlkYl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOwkvKiBkb29yYmVsbCBpcyBvbiBiYXIgNCAqLwogCWRiX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNCk7CiAKIAlpZiAoZGJfbGVuID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZG9vcmJlbGwgaXMgZGlzYWJsZWRcbiIsCi0JCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJfQpAQCAtMzg2LDEzICs2NjMsMTQgQEAKIAlkYl9wdHIgPSBpb3JlbWFwKGRiX2Jhc2UsIE5FVFhFTl9EQl9NQVBTSVpFX0JZVEVTKTsKIAlpZiAoIWRiX3B0cikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgZG9vcmJlbGwgbWFwLiIsCi0JCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJfQogCURQUklOVEsoSU5GTywgImRvb3JiZWxsIGlvcmVtYXBlZCBhdCAlcFxuIiwgZGJfcHRyKTsKIAogCWFkYXB0ZXItPmFody5wY2lfYmFzZTAgPSBtZW1fcHRyMDsKKwlhZGFwdGVyLT5haHcucGNpX2xlbjAgPSBwY2lfbGVuMDsKIAlhZGFwdGVyLT5haHcuZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IGZpcnN0X3BhZ2VfZ3JvdXBfc3RhcnQ7CiAJYWRhcHRlci0+YWh3LmZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSBmaXJzdF9wYWdlX2dyb3VwX2VuZDsKIAlhZGFwdGVyLT5haHcucGNpX2Jhc2UxID0gbWVtX3B0cjE7CkBAIC00MDAsMTEgKzY3OCwxOCBAQAogCWFkYXB0ZXItPmFody5kYl9iYXNlID0gZGJfcHRyOwogCWFkYXB0ZXItPmFody5kYl9sZW4gPSBkYl9sZW47CiAKLQlhZGFwdGVyLT5uZXRkZXYgID0gbmV0ZGV2OwotCWFkYXB0ZXItPnBkZXYgICAgPSBwZGV2OwotCiAJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwKLQkJICAgICAgIG5ldHhlbl9uaWNfcG9sbCwgTkVUWEVOX05FVERFVl9XRUlHSFQpOworCQkJbmV0eGVuX25pY19wb2xsLCBORVRYRU5fTkVUREVWX1dFSUdIVCk7CisKKwlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApCisJCWxlZ2FjeV9pbnRycCA9ICZsZWdhY3lfaW50cltwY2lfZnVuY19pZF07CisJZWxzZQorCQlsZWdhY3lfaW50cnAgPSAmbGVnYWN5X2ludHJbMF07CisKKwlhZGFwdGVyLT5sZWdhY3lfaW50ci5pbnRfdmVjX2JpdCA9IGxlZ2FjeV9pbnRycC0+aW50X3ZlY19iaXQ7CisJYWRhcHRlci0+bGVnYWN5X2ludHIudGd0X3N0YXR1c19yZWcgPSBsZWdhY3lfaW50cnAtPnRndF9zdGF0dXNfcmVnOworCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZyA9IGxlZ2FjeV9pbnRycC0+dGd0X21hc2tfcmVnOworCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnBjaV9pbnRfcmVnID0gbGVnYWN5X2ludHJwLT5wY2lfaW50X3JlZzsKIAogCS8qIHRoaXMgd2lsbCBiZSByZWFkIGZyb20gRlcgbGF0ZXIgKi8KIAlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IC0xOwpAQCAtNDE0LDEyICs2OTksMjMgQEAKIAlhZGFwdGVyLT5wb3J0bnVtID0gcGNpX2Z1bmNfaWQ7CiAJYWRhcHRlci0+c3RhdHVzICAgJj0gfk5FVFhFTl9ORVRERVZfU1RBVFVTOwogCWFkYXB0ZXItPnJ4X2NzdW0gPSAxOworCWFkYXB0ZXItPm1jX2VuYWJsZWQgPSAwOworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhyZXZpc2lvbl9pZCkpIHsKKwkJYWRhcHRlci0+bWF4X21jX2NvdW50ID0gMzg7CisJCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAyOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPm1heF9tY19jb3VudCA9IDE2OworCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMzsKKwl9CiAKIAluZXRkZXYtPm9wZW4JCSAgID0gbmV0eGVuX25pY19vcGVuOwogCW5ldGRldi0+c3RvcAkJICAgPSBuZXR4ZW5fbmljX2Nsb3NlOwogCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gbmV0eGVuX25pY194bWl0X2ZyYW1lOwogCW5ldGRldi0+Z2V0X3N0YXRzCSAgID0gbmV0eGVuX25pY19nZXRfc3RhdHM7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXR4ZW5fbmljX3NldF9tdWx0aTsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKQorCQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG5ldHhlbl9wM19uaWNfc2V0X211bHRpOworCWVsc2UKKwkJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXR4ZW5fcDJfbmljX3NldF9tdWx0aTsKIAluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyAgICA9IG5ldHhlbl9uaWNfc2V0X21hYzsKIAluZXRkZXYtPmNoYW5nZV9tdHUJICAgPSBuZXR4ZW5fbmljX2NoYW5nZV9tdHU7CiAJbmV0ZGV2LT50eF90aW1lb3V0CSAgID0gbmV0eGVuX3R4X3RpbWVvdXQ7CkBAIC00MzUsMTggKzczMSwxNCBAQAogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgeworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwl9CiAKLQlpZiAocGNpX3VzaW5nX2RhYykKKwlpZiAoYWRhcHRlci0+cGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQlpZiAocGNpX2VuYWJsZV9tc2kocGRldikpCi0JCWFkYXB0ZXItPmZsYWdzICY9IH5ORVRYRU5fTklDX01TSV9FTkFCTEVEOwotCWVsc2UKLQkJYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05JQ19NU0lfRU5BQkxFRDsKLQotCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOwotCUlOSVRfV09SSygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrLCBuZXR4ZW5fdHhfdGltZW91dF90YXNrKTsKLQogCS8qCiAJICogU2V0IHRoZSBDUkIgd2luZG93IHRvIGludmFsaWQuIElmIGFueSByZWdpc3RlciBpbiB3aW5kb3cgMCBpcwogCSAqIGFjY2Vzc2VkIGl0IHNob3VsZCBzZXQgdGhlIHdpbmRvdyB0byAwIGFuZCB0aGVuIHJlc2V0IGl0IHRvIDEuCkBAIC00NTUsODcgKzc0NywxMyBAQAogCiAJaWYgKG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oYWRhcHRlcikgIT0gMCkgewogCQlwcmludGsoIiVzOiBFcnJvciBnZXR0aW5nIGJvYXJkIGNvbmZpZyBpbmZvLlxuIiwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CiAKLQkvKgotCSAqICBBZGFwdGVyIGluIG91ciBjYXNlIGlzIHF1YWQgcG9ydCBzbyBpbml0aWFsaXplIGl0IGJlZm9yZQotCSAqICBpbml0aWFsaXppbmcgdGhlIHBvcnRzCi0JICovCi0KIAluZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29wcyhhZGFwdGVyKTsKIAotCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50ID0gTUFYX0NNRF9ERVNDUklQVE9SU19IT1NUOwotCWlmICgoYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDJfU0IzNV80RykgfHwKLQkJCShhZGFwdGVyLT5haHcuYm9hcmRjZmcuYm9hcmRfdHlwZSA9PQotCQkJIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMkcpKQotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JZWxzZQotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlM7Ci0JYWRhcHRlci0+bWF4X2p1bWJvX3J4X2Rlc2NfY291bnQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTOwotCWFkYXB0ZXItPm1heF9scm9fcnhfZGVzY19jb3VudCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOwotCi0JY21kX2J1Zl9hcnIgPSAoc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICopdm1hbGxvYyhUWF9SSU5HU0laRSk7Ci0JaWYgKGNtZF9idWZfYXJyID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBjbWRfYnVmX2FyciBtZW1vcnk6JWRcbiIsCi0JCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCAoaW50KVRYX1JJTkdTSVpFKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfYWRhcHRlcjsKLQl9Ci0JbWVtc2V0KGNtZF9idWZfYXJyLCAwLCBUWF9SSU5HU0laRSk7Ci0JYWRhcHRlci0+Y21kX2J1Zl9hcnIgPSBjbWRfYnVmX2FycjsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfUkNWX0NUWDsgKytpKSB7Ci0JCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2ldOwotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgTlVNX1JDVl9ERVNDX1JJTkdTOyByaW5nKyspIHsKLQkJCXJjdl9kZXNjID0gJnJlY3ZfY3R4LT5yY3ZfZGVzY1tyaW5nXTsKLQkJCXN3aXRjaCAoUkNWX0RFU0NfVFlQRShyaW5nKSkgewotCQkJY2FzZSBSQ1ZfREVTQ19OT1JNQUw6Ci0JCQkJcmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50ID0KLQkJCQkgICAgYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQ7Ci0JCQkJcmN2X2Rlc2MtPmZsYWdzID0gUkNWX0RFU0NfTk9STUFMOwotCQkJCXJjdl9kZXNjLT5kbWFfc2l6ZSA9IFJYX0RNQV9NQVBfTEVOOwotCQkJCXJjdl9kZXNjLT5za2Jfc2l6ZSA9IE1BWF9SWF9CVUZGRVJfTEVOR1RIOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIFJDVl9ERVNDX0pVTUJPOgotCQkJCXJjdl9kZXNjLT5tYXhfcnhfZGVzY19jb3VudCA9Ci0JCQkJICAgIGFkYXB0ZXItPm1heF9qdW1ib19yeF9kZXNjX2NvdW50OwotCQkJCXJjdl9kZXNjLT5mbGFncyA9IFJDVl9ERVNDX0pVTUJPOwotCQkJCXJjdl9kZXNjLT5kbWFfc2l6ZSA9IFJYX0pVTUJPX0RNQV9NQVBfTEVOOwotCQkJCXJjdl9kZXNjLT5za2Jfc2l6ZSA9IE1BWF9SWF9KVU1CT19CVUZGRVJfTEVOR1RIOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIFJDVl9SSU5HX0xSTzoKLQkJCQlyY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQgPQotCQkJCSAgICBhZGFwdGVyLT5tYXhfbHJvX3J4X2Rlc2NfY291bnQ7Ci0JCQkJcmN2X2Rlc2MtPmZsYWdzID0gUkNWX0RFU0NfTFJPOwotCQkJCXJjdl9kZXNjLT5kbWFfc2l6ZSA9IFJYX0xST19ETUFfTUFQX0xFTjsKLQkJCQlyY3ZfZGVzYy0+c2tiX3NpemUgPSBNQVhfUlhfTFJPX0JVRkZFUl9MRU5HVEg7Ci0JCQkJYnJlYWs7Ci0KLQkJCX0KLQkJCXJjdl9kZXNjLT5yeF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICopCi0JCQkgICAgdm1hbGxvYyhSQ1ZfQlVGRlNJWkUpOwotCi0JCQlpZiAocmN2X2Rlc2MtPnJ4X2J1Zl9hcnIgPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCQkJICAgICAgICJyY3ZfZGVzYy0+cnhfYnVmX2FyciBtZW1vcnk6JWRcbiIsCi0JCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCQkJICAgICAgIChpbnQpUkNWX0JVRkZTSVpFKTsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyX291dF9mcmVlX3J4X2J1ZmZlcjsKLQkJCX0KLQkJCW1lbXNldChyY3ZfZGVzYy0+cnhfYnVmX2FyciwgMCwgUkNWX0JVRkZTSVpFKTsKLQkJfQotCi0JfQotCi0JbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9zdyhhZGFwdGVyKTsJLyogaW5pdGlhbGl6ZSB0aGUgYnVmZmVycyBpbiBhZGFwdGVyICovCi0KIAkvKiBNZXp6IGNhcmRzIGhhdmUgUENJIGZ1bmN0aW9uIDAsMiwzIGVuYWJsZWQgKi8KIAlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKSB7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaOgpAQCAtNTQ3LDI5ICs3NjUsMTU1IEBACiAJCWJyZWFrOwogCX0KIAorCS8qCisJICogVGhpcyBjYWxsIHdpbGwgc2V0dXAgdmFyaW91cyBtYXggcngvdHggY291bnRzLgorCSAqIEl0IG11c3QgYmUgZG9uZSBiZWZvcmUgYW55IGJ1ZmZlci9yaW5nIGFsbG9jYXRpb25zLgorCSAqLworCW5ldHhlbl9jaGVja19vcHRpb25zKGFkYXB0ZXIpOworCisJZmlyc3RfZHJpdmVyID0gMDsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKSB7CisJCWlmIChhZGFwdGVyLT5haHcucGNpX2Z1bmMgPT0gMCkKKwkJCWZpcnN0X2RyaXZlciA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkKKwkJCWZpcnN0X2RyaXZlciA9IDE7CisJfQorCWFkYXB0ZXItPmNyYl9hZGRyX2NtZF9wcm9kdWNlciA9IGNyYl9jbWRfcHJvZHVjZXJbYWRhcHRlci0+cG9ydG51bV07CisJYWRhcHRlci0+Y3JiX2FkZHJfY21kX2NvbnN1bWVyID0gY3JiX2NtZF9jb25zdW1lclthZGFwdGVyLT5wb3J0bnVtXTsKKwluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgMCk7CisJbmV0eGVuX25pY191cGRhdGVfY21kX2NvbnN1bWVyKGFkYXB0ZXIsIDApOworCisJaWYgKGZpcnN0X2RyaXZlcikgeworCQlmaXJzdF9ib290ID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJTkVUWEVOX0NBTV9SQU0oMHgxZmMpKTsKKworCQllcnIgPSBuZXR4ZW5fY2hlY2tfaHdfaW5pdChhZGFwdGVyLCBmaXJzdF9ib290KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gaW5pdCBIVyBpbml0IHNlcXVlbmNlXG4iLAorCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCWdvdG8gZXJyX291dF9pb3VubWFwOworCQl9CisKKwkJaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkKKwkJCW5ldHhlbl9zZXRfcG9ydF9tb2RlKGFkYXB0ZXIpOworCisJCWlmIChmaXJzdF9ib290ICE9IDB4NTU1NTU1NTUpIHsKKwkJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKKwkJCQkJCUNSQl9DTURQRUdfU1RBVEUsIDApOworCQkJbmV0eGVuX3Bpbml0X2Zyb21fcm9tKGFkYXB0ZXIsIDApOworCQkJbXNsZWVwKDEpOworCQkJbmV0eGVuX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7CisJCX0KKworCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKQorCQkJbmV0eGVuX3BjaWVfc3RyYXBfaW5pdChhZGFwdGVyKTsKKworCQlpZiAoTlhfSVNfUkVWSVNJT05fUDIocmV2aXNpb25faWQpKSB7CisKKwkJCS8qIEluaXRpYWxpemUgbXVsdGljYXN0IGFkZHIgcG9vbCBvd25lcnMgKi8KKwkJCXZhbCA9IDB4NzY1NDsKKwkJCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpCisJCQkJdmFsIHw9IDB4MGYwMDAwMDA7CisJCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCQkJTkVUWEVOX01BQ19BRERSX0NOVExfUkVHLCB2YWwpOworCisJCX0KKworCQlpZiAoKGZpcnN0X2Jvb3QgPT0gMHg1NTU1NTU1NSkgJiYKKwkJCShOWF9JU19SRVZJU0lPTl9QMihyZXZpc2lvbl9pZCkpKSB7CisJCQkvKiBVbmxvY2sgdGhlIEhXLCBwcm9tcHRpbmcgdGhlIGJvb3Qgc2VxdWVuY2UgKi8KKwkJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKKwkJCQkJTkVUWEVOX1JPTVVTQl9HTEJfUEVHVFVORV9ET05FLCAxKTsKKwkJfQorCisJCWVyciA9IG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9pb3VubWFwOworCisJCS8qCisJCSAqIFRlbGwgdGhlIGhhcmR3YXJlIG91ciB2ZXJzaW9uIG51bWJlci4KKwkJICovCisJCWkgPSAoX05FVFhFTl9OSUNfTElOVVhfTUFKT1IgPDwgMTYpCisJCQl8ICgoX05FVFhFTl9OSUNfTElOVVhfTUlOT1IgPDwgOCkpCisJCQl8IChfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OKTsKKwkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfRFJJVkVSX1ZFUlNJT04sIGkpOworCisJCS8qIEhhbmRzaGFrZSB3aXRoIHRoZSBjYXJkIGJlZm9yZSB3ZSByZWdpc3RlciB0aGUgZGV2aWNlcy4gKi8KKwkJbmV0eGVuX3BoYW50b21faW5pdChhZGFwdGVyLCBORVRYRU5fTklDX1BFR19UVU5FKTsKKworCX0JLyogZmlyc3RfZHJpdmVyICovCisKKwluZXR4ZW5fbmljX2ZsYXNoX3ByaW50KGFkYXB0ZXIpOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgeworCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJTkVUWEVOX01JVV9NTl9DT05UUk9MLCAmdmFsLCA0KTsKKwkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID0gKHZhbCAmIDB4NCkgPyAxIDogMDsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgImZpcm13YXJlIHJ1bm5pbmcgaW4gJXMgbW9kZVxuIiwKKwkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID8gImN1dCB0aHJvdWdoIiA6ICJsZWdhY3kiKTsKKwl9CisKKwkvKgorCSAqIFNlZSBpZiB0aGUgZmlybXdhcmUgZ2F2ZSB1cyBhIHZpcnR1YWwtcGh5c2ljYWwgcG9ydCBtYXBwaW5nLgorCSAqLworCWFkYXB0ZXItPnBoeXNpY2FsX3BvcnQgPSBhZGFwdGVyLT5wb3J0bnVtOworCWkgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX1YyUChhZGFwdGVyLT5wb3J0bnVtKSk7CisJaWYgKGkgIT0gMHg1NTU1NTU1NSkKKwkJYWRhcHRlci0+cGh5c2ljYWxfcG9ydCA9IGk7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+KE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQgfCBORVRYRU5fTklDX01TSVhfRU5BQkxFRCk7CisKKwluZXR4ZW5fc2V0X21zaXhfYml0KHBkZXYsIDApOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgeworCQlpZiAoKG1lbV9sZW4gIT0gTkVUWEVOX1BDSV8xMjhNQl9TSVpFKSAmJgorCQkJbWVtX2xlbiAhPSBORVRYRU5fUENJXzJNQl9TSVpFKQorCQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOworCX0KKworCWlmIChhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCkgeworCisJCW5ldHhlbl9pbml0X21zaXhfZW50cmllcyhhZGFwdGVyKTsKKworCQlpZiAocGNpX2VuYWJsZV9tc2l4KHBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywKKwkJCQkJTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSKSkKKwkJCWdvdG8gcmVxdWVzdF9tc2k7CisKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQ7CisJCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMSk7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kteCBpbnRlcnJ1cHRzXG4iKTsKKworCX0gZWxzZSB7CityZXF1ZXN0X21zaToKKwkJaWYgKHVzZV9tc2kgJiYgIXBjaV9lbmFibGVfbXNpKHBkZXYpKSB7CisJCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSV9FTkFCTEVEOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaSBpbnRlcnJ1cHRzXG4iKTsKKwkJfSBlbHNlCisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbGVnYWN5IGludGVycnVwdHNcbiIpOworCX0KKworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQluZXRkZXYtPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3I7CisJZWxzZQorCQluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKKworCWVyciA9IG5ldHhlbl9yZWNlaXZlX3BlZ19yZWFkeShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9tc2k7CisKIAlpbml0X3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7Ci0JYWRhcHRlci0+YWh3LnhnX2xpbmt1cCA9IDA7CisJYWRhcHRlci0+YWh3Lmxpbmt1cCA9IDA7CiAJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSAmbmV0eGVuX3dhdGNoZG9nOwogCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyOwogCUlOSVRfV09SSygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzaywgbmV0eGVuX3dhdGNoZG9nX3Rhc2spOwotCWFkYXB0ZXItPmFody5wZGV2ID0gcGRldjsKLQlhZGFwdGVyLT5haHcucmV2aXNpb25faWQgPSBwZGV2LT5yZXZpc2lvbjsKLQotCS8qIG1ha2Ugc3VyZSBXaW5kb3cgPT0gMSAqLwotCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMSk7Ci0KLQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgMCk7Ci0JbmV0eGVuX25pY191cGRhdGVfY21kX2NvbnN1bWVyKGFkYXB0ZXIsIDApOwotCXdyaXRlbCgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfSE9TVF9DTURfQUREUl9MTykpOworCUlOSVRfV09SSygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrLCBuZXR4ZW5fdHhfdGltZW91dF90YXNrKTsKIAogCWlmIChuZXR4ZW5faXNfZmxhc2hfc3VwcG9ydGVkKGFkYXB0ZXIpID09IDAgJiYKLQkgICAgbmV0eGVuX2dldF9mbGFzaF9tYWNfYWRkcihhZGFwdGVyLCBtYWNfYWRkcikgPT0gMCkKLQkJdmFsaWRfbWFjID0gMTsKLQllbHNlCi0JCXZhbGlkX21hYyA9IDA7CisJCQluZXR4ZW5fZ2V0X2ZsYXNoX21hY19hZGRyKGFkYXB0ZXIsIG1hY19hZGRyKSA9PSAwKSB7CisJCXVuc2lnbmVkIGNoYXIgKnA7CiAKLQlpZiAodmFsaWRfbWFjKSB7Ci0JCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSZtYWNfYWRkclthZGFwdGVyLT5wb3J0bnVtXTsKKwkJcCA9ICh1bnNpZ25lZCBjaGFyICopJm1hY19hZGRyW2FkYXB0ZXItPnBvcnRudW1dOwogCQluZXRkZXYtPmRldl9hZGRyWzBdID0gKihwICsgNSk7CiAJCW5ldGRldi0+ZGV2X2FkZHJbMV0gPSAqKHAgKyA0KTsKIAkJbmV0ZGV2LT5kZXZfYWRkclsyXSA9ICoocCArIDMpOwpAQCAtNTgxLDgxICs5MjUsMTMgQEAKIAkJCW5ldGRldi0+YWRkcl9sZW4pOwogCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCYWQgTUFDIGFkZHJlc3MgJXMuXG4iLAotCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCQkgICAgICAgcHJpbnRfbWFjKG1hYywgbmV0ZGV2LT5kZXZfYWRkcikpOworCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQkJCQlwcmludF9tYWMobWFjLCBuZXRkZXYtPmRldl9hZGRyKSk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoYWRhcHRlci0+bWFjYWRkcl9zZXQpCi0JCQkJYWRhcHRlci0+bWFjYWRkcl9zZXQoYWRhcHRlciwKLQkJCQkJCQluZXRkZXYtPmRldl9hZGRyKTsKKwkJCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIG5ldGRldi0+ZGV2X2FkZHIpOwogCQl9CiAJfQogCi0JaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkgewotCQllcnIgPSBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9yeF9idWZmZXI7Ci0JCXZhbCA9IHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsCi0JCQkJCU5FVFhFTl9DQU1fUkFNKDB4MWZjKSkpOwotCQlpZiAodmFsID09IDB4NTU1NTU1NTUpIHsKLQkJICAgIC8qIFRoaXMgaXMgdGhlIGZpcnN0IGJvb3QgYWZ0ZXIgcG93ZXIgdXAgKi8KLQkJICAgIG5ldHhlbl9uaWNfcmVhZF93MChhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoMHg0KSwgJnZhbCk7Ci0JCQlpZiAoISh2YWwgJiAweDQpKSB7Ci0JCQkJdmFsIHw9IDB4NDsKLQkJCQluZXR4ZW5fbmljX3dyaXRlX3cwKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRygweDQpLCB2YWwpOwotCQkJCW5ldHhlbl9uaWNfcmVhZF93MChhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoMHg0KSwgJnZhbCk7Ci0JCQkJaWYgKCEodmFsICYgMHg0KSkKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCBNU0kgYml0IGluIFBDSS1lIHJlZ1xuIiwKLQkJCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJCX0KLQkJICAgIHZhbCA9IHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsCi0JCQkJCU5FVFhFTl9ST01VU0JfR0xCX1NXX1JFU0VUKSk7Ci0JCSAgICBwcmludGsoS0VSTl9JTkZPIk5ldFhlbjogcmVhZCAweCUwOHggZm9yIHJlc2V0IHJlZy5cbiIsdmFsKTsKLQkJICAgIGlmICh2YWwgIT0gMHg4MDAwMGYpIHsKLQkJCS8qIGNsZWFyIHRoZSByZWdpc3RlciBmb3IgZnV0dXJlIHVubG9hZHMvbG9hZHMgKi8KLQkJCQl3cml0ZWwoMCwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKLQkJCQkJCQlORVRYRU5fQ0FNX1JBTSgweDFmYykpKTsKLQkJCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SIGluIE5ldFhlbiBIVyBpbml0IHNlcXVlbmNlLlxuIik7Ci0JCQkJZXJyID0gLUVOT0RFVjsKLQkJCQlnb3RvIGVycl9vdXRfZnJlZV9kZXY7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7Ci0JCQl3cml0ZWwoMCwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKLQkJCQkJCUNSQl9DTURQRUdfU1RBVEUpKTsKLQkJCW5ldHhlbl9waW5pdF9mcm9tX3JvbShhZGFwdGVyLCAwKTsKLQkJCW1zbGVlcCgxKTsKLQkJCW5ldHhlbl9sb2FkX2Zpcm13YXJlKGFkYXB0ZXIpOwotCQkJbmV0eGVuX3BoYW50b21faW5pdChhZGFwdGVyLCBORVRYRU5fTklDX1BFR19UVU5FKTsKLQkJfQotCi0JCS8qIGNsZWFyIHRoZSByZWdpc3RlciBmb3IgZnV0dXJlIHVubG9hZHMvbG9hZHMgKi8KLQkJd3JpdGVsKDAsIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIE5FVFhFTl9DQU1fUkFNKDB4MWZjKSkpOwotCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiY21kcGVnIHN0YXRlOiAweCUweFxuIiwKLQkJCXJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUpKSk7Ci0KLQkJLyoKLQkJICogVGVsbCB0aGUgaGFyZHdhcmUgb3VyIHZlcnNpb24gbnVtYmVyLgotCQkgKi8KLQkJaSA9IChfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA8PCAxNikKLQkJCXwgKChfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiA8PCA4KSkKLQkJCXwgKF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04pOwotCQl3cml0ZWwoaSwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX0RSSVZFUl9WRVJTSU9OKSk7Ci0KLQkJLyogVW5sb2NrIHRoZSBIVywgcHJvbXB0aW5nIHRoZSBib290IHNlcXVlbmNlICovCi0JCXdyaXRlbCgxLAotCQkJTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKLQkJCQlORVRYRU5fUk9NVVNCX0dMQl9QRUdUVU5FX0RPTkUpKTsKLQkJLyogSGFuZHNoYWtlIHdpdGggdGhlIGNhcmQgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZSBkZXZpY2VzLiAqLwotCQluZXR4ZW5fcGhhbnRvbV9pbml0KGFkYXB0ZXIsIE5FVFhFTl9OSUNfUEVHX1RVTkUpOwotCX0KLQotCS8qCi0JICogU2VlIGlmIHRoZSBmaXJtd2FyZSBnYXZlIHVzIGEgdmlydHVhbC1waHlzaWNhbCBwb3J0IG1hcHBpbmcuCi0JICovCi0JYWRhcHRlci0+cGh5c2ljYWxfcG9ydCA9IGFkYXB0ZXItPnBvcnRudW07Ci0JaSA9IHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9WMlAoYWRhcHRlci0+cG9ydG51bSkpKTsKLQlpZiAoaSAhPSAweDU1NTU1NTU1KQotCQlhZGFwdGVyLT5waHlzaWNhbF9wb3J0ID0gaTsKLQogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCkBAIC02NjQsNDEgKzk0MCwzNyBAQAogCQkJICAgICAgICIgYWJvcnRpbmdcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCiAJCQkgICAgICAgYWRhcHRlci0+cG9ydG51bSk7CiAJCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9mcmVlX2RldjsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfbXNpOwogCX0KIAotCW5ldHhlbl9uaWNfZmxhc2hfcHJpbnQoYWRhcHRlcik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOwogCisJc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgeworCWNhc2UgTkVUWEVOX05JQ19HQkU6CisJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICIlczogR2JFIHBvcnQgaW5pdGlhbGl6ZWRcbiIsCisJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBORVRYRU5fTklDX1hHQkU6CisJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICIlczogWEdiRSBwb3J0IGluaXRpYWxpemVkXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWJyZWFrOworCX0KKwogCXJldHVybiAwOwogCi1lcnJfb3V0X2ZyZWVfZGV2OgotCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCi0JCW5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKLQotZXJyX291dF9mcmVlX3J4X2J1ZmZlcjoKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1JDVl9DVFg7ICsraSkgewotCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtpXTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgcmluZysrKSB7Ci0JCQlyY3ZfZGVzYyA9ICZyZWN2X2N0eC0+cmN2X2Rlc2NbcmluZ107Ci0JCQlpZiAocmN2X2Rlc2MtPnJ4X2J1Zl9hcnIgIT0gTlVMTCkgewotCQkJCXZmcmVlKHJjdl9kZXNjLT5yeF9idWZfYXJyKTsKLQkJCQlyY3ZfZGVzYy0+cnhfYnVmX2FyciA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQl9Ci0JdmZyZWUoY21kX2J1Zl9hcnIpOwotCi1lcnJfb3V0X2ZyZWVfYWRhcHRlcjoKK2Vycl9vdXRfZGlzYWJsZV9tc2k6CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCisJCXBjaV9kaXNhYmxlX21zaXgocGRldik7CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkKIAkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwogCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlmIChmaXJzdF9kcml2ZXIpCisJCW5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKIAorZXJyX291dF9pb3VubWFwOgogCWlmIChkYl9wdHIpCiAJCWlvdW5tYXAoZGJfcHRyKTsKIAotZXJyX291dF9pb3VubWFwOgogCWlmIChtZW1fcHRyMCkKIAkJaW91bm1hcChtZW1fcHRyMCk7CiAJaWYgKG1lbV9wdHIxKQpAQCAtNzEzLDYgKzk4NSw3IEBACiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAogZXJyX291dF9kaXNhYmxlX3BkZXY6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzIxLDExICs5OTQsNiBAQAogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwotCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwotCXN0cnVjdCBuZXR4ZW5fcmN2X2Rlc2NfY3R4ICpyY3ZfZGVzYzsKLQlpbnQgaSwgY3R4aWQsIHJpbmc7Ci0Jc3RhdGljIGludCBpbml0X2Zpcm13YXJlX2RvbmUgPSAwOwogCiAJYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpZiAoYWRhcHRlciA9PSBOVUxMKQpAQCAtNzM2LDM2ICsxMDA0LDE4IEBACiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAogCWlmIChhZGFwdGVyLT5pc191cCA9PSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykgewotCQlpbml0X2Zpcm13YXJlX2RvbmUrKzsKIAkJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCQluZXR4ZW5fZnJlZV9zd19yZXNvdXJjZXMoYWRhcHRlcik7CiAJfQogCi0JZm9yIChjdHhpZCA9IDA7IGN0eGlkIDwgTUFYX1JDVl9DVFg7ICsrY3R4aWQpIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4aWRdOwotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgTlVNX1JDVl9ERVNDX1JJTkdTOyByaW5nKyspIHsKLQkJCXJjdl9kZXNjID0gJnJlY3ZfY3R4LT5yY3ZfZGVzY1tyaW5nXTsKLQkJCWZvciAoaSA9IDA7IGkgPCByY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQ7ICsraSkgewotCQkJCWJ1ZmZlciA9ICYocmN2X2Rlc2MtPnJ4X2J1Zl9hcnJbaV0pOwotCQkJCWlmIChidWZmZXItPnN0YXRlID09IE5FVFhFTl9CVUZGRVJfRlJFRSkKLQkJCQkJY29udGludWU7Ci0JCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXItPmRtYSwKLQkJCQkJCSByY3ZfZGVzYy0+ZG1hX3NpemUsCi0JCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCQlpZiAoYnVmZmVyLT5za2IgIT0gTlVMTCkKLQkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyLT5za2IpOwotCQkJfQotCQkJdmZyZWUocmN2X2Rlc2MtPnJ4X2J1Zl9hcnIpOwotCQl9Ci0JfQotCi0JdmZyZWUoYWRhcHRlci0+Y21kX2J1Zl9hcnIpOwotCiAJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkKIAkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwogCiAJaWYgKGFkYXB0ZXItPmlycSkKIAkJZnJlZV9pcnEoYWRhcHRlci0+aXJxLCBhZGFwdGVyKTsKIAorCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQlwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOwogCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCiAJCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKIApAQCAtODAzLDUxICsxMDUzLDY5IEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCi0JCS8qIHNldHVwIGFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGUgUGhhbnRvbS4uLiAqLwotCQkvKiB0aGlzIGluY2x1ZGUgdGhlIGRlc2NyaXB0b3JzIGZvciByY3YsIHR4LCBhbmQgc3RhdHVzICovCi0JCW5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoYWRhcHRlcik7Ci0JCWVyciA9IG5ldHhlbl9uaWNfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCQllcnIgPSBuZXR4ZW5fYWxsb2Nfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluIHNldHRpbmcgaHcgcmVzb3VyY2VzOiVkXG4iLAotCQkJICAgICAgIGVycik7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIHN3IHJlc291cmNlc1xuIiwKKwkJCQkJbmV0ZGV2LT5uYW1lKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KKworCQluZXR4ZW5fbmljX2NsZWFyX3N0YXRzKGFkYXB0ZXIpOworCisJCWVyciA9IG5ldHhlbl9hbGxvY19od19yZXNvdXJjZXMoYWRhcHRlcik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGluIHNldHRpbmcgaHcgcmVzb3VyY2VzXG4iLAorCQkJCQluZXRkZXYtPm5hbWUpOworCQkJZ290byBlcnJfb3V0X2ZyZWVfc3c7CisJCX0KKworCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KSB7CisJCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfcHJvZHVjZXIgPQorCQkJCWNyYl9jbWRfcHJvZHVjZXJbYWRhcHRlci0+cG9ydG51bV07CisJCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfY29uc3VtZXIgPQorCQkJCWNyYl9jbWRfY29uc3VtZXJbYWRhcHRlci0+cG9ydG51bV07CisJCX0KKworCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgMCk7CisJCW5ldHhlbl9uaWNfdXBkYXRlX2NtZF9jb25zdW1lcihhZGFwdGVyLCAwKTsKKwogCQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQkJZm9yIChyaW5nID0gMDsgcmluZyA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgcmluZysrKQorCQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykKIAkJCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzKGFkYXB0ZXIsIGN0eCwgcmluZyk7CiAJCX0KLQkJYWRhcHRlci0+aXJxID0gYWRhcHRlci0+YWh3LnBkZXYtPmlycTsKLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkKKwkJaWYgKE5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpKQogCQkJaGFuZGxlciA9IG5ldHhlbl9tc2lfaW50cjsKIAkJZWxzZSB7CiAJCQlmbGFncyB8PSBJUlFGX1NIQVJFRDsKIAkJCWhhbmRsZXIgPSBuZXR4ZW5faW50cjsKIAkJfQorCQlhZGFwdGVyLT5pcnEgPSBuZXRkZXYtPmlycTsKIAkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aXJxLCBoYW5kbGVyLAogCQkJCSAgZmxhZ3MsIG5ldGRldi0+bmFtZSwgYWRhcHRlcik7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAicmVxdWVzdF9pcnEgZmFpbGVkIHdpdGg6ICVkXG4iLCBlcnIpOwotCQkJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gZXJyX291dF9mcmVlX2h3OwogCQl9CiAKIAkJYWRhcHRlci0+aXNfdXAgPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQzsKIAl9CisKIAkvKiBEb25lIGhlcmUgYWdhaW4gc28gdGhhdCBldmVuIGlmIHBoYW50b20gc3cgb3Zlcndyb3RlIGl0LAogCSAqIHdlIHNldCBpdCAqLwotCWlmIChhZGFwdGVyLT5pbml0X3BvcnQKLQkgICAgJiYgYWRhcHRlci0+aW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRudW0pICE9IDApIHsKKwllcnIgPSBhZGFwdGVyLT5pbml0X3BvcnQoYWRhcHRlciwgYWRhcHRlci0+cGh5c2ljYWxfcG9ydCk7CisJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwb3J0ICVkXG4iLAogCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPnBvcnRudW0pOwotCQlyZXR1cm4gLUVJTzsKKwkJZ290byBlcnJfb3V0X2ZyZWVfaXJxOwogCX0KLQlpZiAoYWRhcHRlci0+bWFjYWRkcl9zZXQpCi0JCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIG5ldGRldi0+ZGV2X2FkZHIpOworCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIG5ldGRldi0+ZGV2X2FkZHIpOwogCiAJbmV0eGVuX25pY19zZXRfbGlua19wYXJhbWV0ZXJzKGFkYXB0ZXIpOwogCi0JbmV0eGVuX25pY19zZXRfbXVsdGkobmV0ZGV2KTsKLQlpZiAoYWRhcHRlci0+c2V0X210dSkKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdChuZXRkZXYpOworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlueF9md19jbWRfc2V0X210dShhZGFwdGVyLCBuZXRkZXYtPm10dSk7CisJZWxzZQogCQlhZGFwdGVyLT5zZXRfbXR1KGFkYXB0ZXIsIG5ldGRldi0+bXR1KTsKIAogCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOwpAQCAtODU4LDYgKzExMjYsMTQgQEAKIAluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEoYWRhcHRlci0+aXJxLCBhZGFwdGVyKTsKK2Vycl9vdXRfZnJlZV9odzoKKwluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7CitlcnJfb3V0X2ZyZWVfc3c6CisJbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC04NjYsOSArMTE0Miw2IEBACiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCBpLCBqOwotCXN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqY21kX2J1ZmY7Ci0Jc3RydWN0IG5ldHhlbl9za2JfZnJhZyAqYnVmZnJhZzsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwpAQCAtODc5LDMwICsxMTUyLDggQEAKIAogCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoYWRhcHRlcik7CiAKLQljbWRfYnVmZiA9IGFkYXB0ZXItPmNtZF9idWZfYXJyOwotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudDsgaSsrKSB7Ci0JCWJ1ZmZyYWcgPSBjbWRfYnVmZi0+ZnJhZ19hcnJheTsKLQkJaWYgKGJ1ZmZyYWctPmRtYSkgewotCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCBidWZmcmFnLT5kbWEsCi0JCQkJCSBidWZmcmFnLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJYnVmZnJhZy0+ZG1hID0gMFVMTDsKLQkJfQotCQlmb3IgKGogPSAwOyBqIDwgY21kX2J1ZmYtPmZyYWdfY291bnQ7IGorKykgewotCQkJYnVmZnJhZysrOwotCQkJaWYgKGJ1ZmZyYWctPmRtYSkgewotCQkJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIGJ1ZmZyYWctPmRtYSwKLQkJCQkJICAgICAgIGJ1ZmZyYWctPmxlbmd0aCwKLQkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJCWJ1ZmZyYWctPmRtYSA9IDBVTEw7Ci0JCQl9Ci0JCX0KLQkJLyogRnJlZSB0aGUgc2tiIHdlIHJlY2VpdmVkIGluIG5ldHhlbl9uaWNfeG1pdF9mcmFtZSAqLwotCQlpZiAoY21kX2J1ZmYtPnNrYikgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkoY21kX2J1ZmYtPnNrYik7Ci0JCQljbWRfYnVmZi0+c2tiID0gTlVMTDsKLQkJfQotCQljbWRfYnVmZisrOwotCX0KKwluZXR4ZW5fcmVsZWFzZV90eF9idWZmZXJzKGFkYXB0ZXIpOworCiAJaWYgKGFkYXB0ZXItPmlzX3VwID09IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKSB7CiAJCUZMVVNIX1NDSEVEVUxFRF9XT1JLKCk7CiAJCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CkBAIC05MTEsNiArMTE2MiwzMSBAQAogCXJldHVybiAwOwogfQogCit2b2lkIG5ldHhlbl90c29fY2hlY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkgICAgICBzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKGRlc2MtPm1zcykgeworCQlkZXNjLT50b3RhbF9oZHJfbGVuZ3RoID0gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArCisJCQkJCSAgaXBfaGRybGVuKHNrYikgKyB0Y3BfaGRybGVuKHNrYikpOworCisJCWlmICgoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgJiYKKwkJCQkoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpCisJCQluZXR4ZW5fc2V0X2NtZF9kZXNjX29wY29kZShkZXNjLCBUWF9UQ1BfTFNPNik7CisJCWVsc2UKKwkJCW5ldHhlbl9zZXRfY21kX2Rlc2Nfb3Bjb2RlKGRlc2MsIFRYX1RDUF9MU08pOworCisJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCQluZXR4ZW5fc2V0X2NtZF9kZXNjX29wY29kZShkZXNjLCBUWF9UQ1BfUEtUKTsKKwkJZWxzZSBpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVURQKQorCQkJbmV0eGVuX3NldF9jbWRfZGVzY19vcGNvZGUoZGVzYywgVFhfVURQX1BLVCk7CisJCWVsc2UKKwkJCXJldHVybjsKKwl9CisJZGVzYy0+dGNwX2hkcl9vZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCWRlc2MtPmlwX2hkcl9vZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKK30KKwogc3RhdGljIGludCBuZXR4ZW5fbmljX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtOTMyLDcgKzEyMDgsNyBAQAogCiAJLyogVGhlcmUgNCBmcmFnbWVudHMgcGVyIGRlc2NyaXB0b3IgKi8KIAlub19vZl9kZXNjID0gKGZyYWdfY291bnQgKyAzKSA+PiAyOwotCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pIHsKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNikpIHsKIAkJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPiAwKSB7CiAKIAkJCW5vX29mX2Rlc2MrKzsKQEAgLTk1OSw3ICsxMjM1LDggQEAKIAltZW1zZXQoaHdkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CiAJLyogVGFrZSBza2ItPmRhdGEgaXRzZWxmICovCiAJcGJ1ZiA9ICZhZGFwdGVyLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07Ci0JaWYgKChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pICYmIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPiAwKSB7CisJaWYgKChuZXRkZXYtPmZlYXR1cmVzICYgKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KSkgJiYKKwkJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPiAwKSB7CiAJCXBidWYtPm1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CiAJCWh3ZGVzYy0+bXNzID0gY3B1X3RvX2xlMTYoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7CiAJfSBlbHNlIHsKQEAgLTEwODYsNiArMTM2Myw4OSBAQAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKK3N0YXRpYyBpbnQgbmV0eGVuX25pY19jaGVja190ZW1wKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXVpbnQzMl90IHRlbXAsIHRlbXBfc3RhdGUsIHRlbXBfdmFsOworCWludCBydiA9IDA7CisKKwl0ZW1wID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9URU1QX1NUQVRFKTsKKworCXRlbXBfc3RhdGUgPSBueF9nZXRfdGVtcF9zdGF0ZSh0ZW1wKTsKKwl0ZW1wX3ZhbCA9IG54X2dldF90ZW1wX3ZhbCh0ZW1wKTsKKworCWlmICh0ZW1wX3N0YXRlID09IE5YX1RFTVBfUEFOSUMpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQKKwkJICAgICAgICIlczogRGV2aWNlIHRlbXBlcmF0dXJlICVkIGRlZ3JlZXMgQyBleGNlZWRzIgorCQkgICAgICAgIiBtYXhpbXVtIGFsbG93ZWQuIEhhcmR3YXJlIGhhcyBiZWVuIHNodXQgZG93bi5cbiIsCisJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCB0ZW1wX3ZhbCk7CisKKwkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQlydiA9IDE7CisJfSBlbHNlIGlmICh0ZW1wX3N0YXRlID09IE5YX1RFTVBfV0FSTikgeworCQlpZiAoYWRhcHRlci0+dGVtcCA9PSBOWF9URU1QX05PUk1BTCkgeworCQkJcHJpbnRrKEtFUk5fQUxFUlQKKwkJCSAgICAgICAiJXM6IERldmljZSB0ZW1wZXJhdHVyZSAlZCBkZWdyZWVzIEMgIgorCQkJICAgICAgICJleGNlZWRzIG9wZXJhdGluZyByYW5nZS4iCisJCQkgICAgICAgIiBJbW1lZGlhdGUgYWN0aW9uIG5lZWRlZC5cbiIsCisJCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgdGVtcF92YWwpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFkYXB0ZXItPnRlbXAgPT0gTlhfVEVNUF9XQVJOKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIiVzOiBEZXZpY2UgdGVtcGVyYXR1cmUgaXMgbm93ICVkIGRlZ3JlZXMgQyIKKwkJCSAgICAgICAiIGluIG5vcm1hbCByYW5nZS5cbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCisJCQkgICAgICAgdGVtcF92YWwpOworCQl9CisJfQorCWFkYXB0ZXItPnRlbXAgPSB0ZW1wX3N0YXRlOworCXJldHVybiBydjsKK30KKworc3RhdGljIHZvaWQgbmV0eGVuX25pY19oYW5kbGVfcGh5X2ludHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJdTMyIHZhbCwgcG9ydCwgbGlua3VwOworCisJcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisKKwlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwkJdmFsID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9YR19TVEFURSk7CisJCWxpbmt1cCA9ICh2YWwgPj4gcG9ydCkgJiAxOworCX0gZWxzZSB7CisJCWlmIChhZGFwdGVyLT5md19tYWpvciA8IDQpIHsKKwkJCXZhbCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJCQlDUkJfWEdfU1RBVEUpOworCQkJdmFsID0gKHZhbCA+PiBwb3J0KjgpICYgMHhmZjsKKwkJCWxpbmt1cCA9ICh2YWwgPT0gWEdfTElOS19VUCk7CisJCX0gZWxzZSB7CisJCQl2YWwgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKKwkJCQlDUkJfWEdfU1RBVEVfUDMpOworCQkJdmFsID0gWEdfTElOS19TVEFURV9QMyhhZGFwdGVyLT5haHcucGNpX2Z1bmMsIHZhbCk7CisJCQlsaW5rdXAgPSAodmFsID09IFhHX0xJTktfVVBfUDMpOworCQl9CisJfQorCisJaWYgKGFkYXB0ZXItPmFody5saW5rdXAgJiYgIWxpbmt1cCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgTklDIExpbmsgaXMgZG93blxuIiwKKwkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7CisJCWFkYXB0ZXItPmFody5saW5rdXAgPSAwOworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQl9CisJfSBlbHNlIGlmICghYWRhcHRlci0+YWh3Lmxpbmt1cCAmJiBsaW5rdXApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIE5JQyBMaW5rIGlzIHVwXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lKTsKKwkJYWRhcHRlci0+YWh3Lmxpbmt1cCA9IDE7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgbmV0eGVuX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgdikKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopdjsKQEAgLTEwOTMsNiArMTQ1MywxOSBAQAogCVNDSEVEVUxFX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogfQogCit2b2lkIG5ldHhlbl93YXRjaGRvZ190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldHhlbl9hZGFwdGVyLCB3YXRjaGRvZ190YXNrKTsKKworCWlmICgoYWRhcHRlci0+cG9ydG51bSAgPT0gMCkgJiYgbmV0eGVuX25pY19jaGVja190ZW1wKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKwluZXR4ZW5fbmljX2hhbmRsZV9waHlfaW50cihhZGFwdGVyKTsKKworCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAyICogSFopOworfQorCiBzdGF0aWMgdm9pZCBuZXR4ZW5fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKikKQEAgLTExMTgsNiArMTQ5MSwzOCBAQAogCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKIH0KIAorLyoKKyAqIG5ldHhlbl9uaWNfZ2V0X3N0YXRzIC0gR2V0IFN5c3RlbSBOZXR3b3JrIFN0YXRpc3RpY3MKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldHhlbl9uaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmYWRhcHRlci0+bmV0X3N0YXRzOworCisJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CisKKwkvKiB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkICAgKi8KKwlzdGF0cy0+cnhfcGFja2V0cyA9IGFkYXB0ZXItPnN0YXRzLm5vX3JjdjsKKwkvKiB0b3RhbCBwYWNrZXRzIHRyYW5zbWl0dGVkICAgICovCisJc3RhdHMtPnR4X3BhY2tldHMgPSBhZGFwdGVyLT5zdGF0cy54bWl0ZWRmcmFtZXMgKworCQlhZGFwdGVyLT5zdGF0cy54bWl0ZmluaXNoZWQ7CisJLyogdG90YWwgYnl0ZXMgcmVjZWl2ZWQgICAgICovCisJc3RhdHMtPnJ4X2J5dGVzID0gYWRhcHRlci0+c3RhdHMucnhieXRlczsKKwkvKiB0b3RhbCBieXRlcyB0cmFuc21pdHRlZCAgKi8KKwlzdGF0cy0+dHhfYnl0ZXMgPSBhZGFwdGVyLT5zdGF0cy50eGJ5dGVzOworCS8qIGJhZCBwYWNrZXRzIHJlY2VpdmVkICAgICAqLworCXN0YXRzLT5yeF9lcnJvcnMgPSBhZGFwdGVyLT5zdGF0cy5yY3ZkYmFkc2tiOworCS8qIHBhY2tldCB0cmFuc21pdCBwcm9ibGVtcyAqLworCXN0YXRzLT50eF9lcnJvcnMgPSBhZGFwdGVyLT5zdGF0cy5ub2NtZGRlc2NyaXB0b3I7CisJLyogbm8gc3BhY2UgaW4gbGludXggYnVmZmVycyAgICAqLworCXN0YXRzLT5yeF9kcm9wcGVkID0gYWRhcHRlci0+c3RhdHMucnhkcm9wcGVkOworCS8qIG5vIHNwYWNlIGF2YWlsYWJsZSBpbiBsaW51eCAgKi8KKwlzdGF0cy0+dHhfZHJvcHBlZCA9IGFkYXB0ZXItPnN0YXRzLnR4ZHJvcHBlZDsKKworCXJldHVybiBzdGF0czsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBuZXR4ZW5faGFuZGxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC0xMTI1LDIwICsxNTMwLDIwIEBACiAJbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiB9CiAKLWlycXJldHVybl90IG5ldHhlbl9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCitzdGF0aWMgaXJxcmV0dXJuX3QgbmV0eGVuX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYXRhOwogCXUzMiBvdXJfaW50ID0gMDsKIAotCW91cl9pbnQgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfSU5UX1ZFQ1RPUikpOworCW91cl9pbnQgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX0lOVF9WRUNUT1IpOwogCS8qIG5vdCBvdXIgaW50ZXJydXB0ICovCiAJaWYgKChvdXJfaW50ICYgKDB4ODAgPDwgYWRhcHRlci0+cG9ydG51bSkpID09IDApCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWlmIChhZGFwdGVyLT5pbnRyX3NjaGVtZSA9PSBJTlRSX1NDSEVNRV9QRVJQT1JUKSB7CiAJCS8qIGNsYWltIGludGVycnVwdCAqLwotCQl3cml0ZWwob3VyX2ludCAmIH4oKHUzMikoMHg4MCA8PCBhZGFwdGVyLT5wb3J0bnVtKSksCi0JCQlORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfSU5UX1ZFQ1RPUikpOworCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9JTlRfVkVDVE9SLAorCQkJCW91cl9pbnQgJiB+KCh1MzIpKDB4ODAgPDwgYWRhcHRlci0+cG9ydG51bSkpKTsKIAl9CiAKIAluZXR4ZW5faGFuZGxlX2ludChhZGFwdGVyKTsKQEAgLTExNDYsNyArMTU1MSw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pcnFyZXR1cm5fdCBuZXR4ZW5fbXNpX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpcnFyZXR1cm5fdCBuZXR4ZW5fbXNpX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYXRhOwogCkBAIC0xMjIwLDEwICsxNjI1LDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG5ldHhlbl9leGl0X21vZHVsZSh2b2lkKQogewotCS8qCi0JICogV2FpdCBmb3Igc29tZSB0aW1lIHRvIGFsbG93IHRoZSBkbWEgdG8gZHJhaW4sIGlmIGFueS4KLQkgKi8KLQltc2xlZXAoMTAwKTsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5ldHhlbl9kcml2ZXIpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKG5ldHhlbl93b3JrcSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19uaXUuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCmluZGV4IGEzYmM3Y2MuLjRjYjhmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCkBAIC00Niw5ICs0Niw4IEBACiAJaW50IGRvbmUgPSAwLCB0aW1lb3V0ID0gMDsKIAogCXdoaWxlICghZG9uZSkgewotCQlkb25lID0KLQkJICAgIHJlYWRsKHBjaV9iYXNlX29mZnNldAotCQkJICAoYWRhcHRlciwgTkVUWEVOX1BDSUVfUkVHKFBDSUVfU0VNM19MT0NLKSkpOworCQlkb25lID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLAorCQkJCU5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTNfTE9DSykpOwogCQlpZiAoZG9uZSA9PSAxKQogCQkJYnJlYWs7CiAJCWlmICh0aW1lb3V0ID49IHBoeV9sb2NrX3RpbWVvdXQpIHsKQEAgLTYzLDE0ICs2MiwxNCBAQAogCQl9CiAJfQogCi0Jd3JpdGVsKFBIWV9MT0NLX0RSSVZFUiwKLQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgTkVUWEVOX1BIWV9MT0NLX0lEKSk7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQlORVRYRU5fUEhZX0xPQ0tfSUQsIFBIWV9MT0NLX0RSSVZFUik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGh5X3VubG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JcmVhZGwocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTNfVU5MT0NLKSkpOworCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZShhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU0zX1VOTE9DSykpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDksNyArMTA4LDcgQEAKIAkgKiBzbyBpdCBjYW5ub3QgYmUgaW4gcmVzZXQKIAkgKi8KIAotCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoMCksCisJaWYgKGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoMCksCiAJCQkJICAmbWFjX2NmZzAsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobmV0eGVuX2diX2dldF9zb2Z0X3Jlc2V0KG1hY19jZmcwKSkgewpAQCAtMTE5LDcgKzExOCw3IEBACiAJCW5ldHhlbl9nYl9yeF9yZXNldF9wYih0ZW1wKTsKIAkJbmV0eGVuX2diX3R4X3Jlc2V0X21hYyh0ZW1wKTsKIAkJbmV0eGVuX2diX3J4X3Jlc2V0X21hYyh0ZW1wKTsKLQkJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwKKwkJaWYgKGFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCiAJCQkJCSAgIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApLAogCQkJCQkgICAmdGVtcCwgNCkpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTEyOSwyMiArMTI4LDIyIEBACiAJYWRkcmVzcyA9IDA7CiAJbmV0eGVuX2diX21paV9tZ210X3JlZ19hZGRyKGFkZHJlc3MsIHJlZyk7CiAJbmV0eGVuX2diX21paV9tZ210X3BoeV9hZGRyKGFkZHJlc3MsIHBoeSk7Ci0JaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSKDApLAorCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFIoMCksCiAJCQkJICAgJmFkZHJlc3MsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAljb21tYW5kID0gMDsJCS8qIHR1cm4gb2ZmIGFueSBwcmlvciBhY3Rpdml0eSAqLwotCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09NTUFORCgwKSwKKwlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT01NQU5EKDApLAogCQkJCSAgICZjb21tYW5kLCA0KSkKIAkJcmV0dXJuIC1FSU87CiAJLyogc2VuZCByZWFkIGNvbW1hbmQgKi8KIAluZXR4ZW5fZ2JfbWlpX21nbXRfc2V0X3JlYWRfY3ljbGUoY29tbWFuZCk7Ci0JaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT01NQU5EKDApLAorCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0NPTU1BTkQoMCksCiAJCQkJICAgJmNvbW1hbmQsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAogCXN0YXR1cyA9IDA7CiAJZG8gewotCQlpZiAobmV0eGVuX25pY19od19yZWFkX3d4KGFkYXB0ZXIsCisJCWlmIChhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCiAJCQkJCSAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9JTkRJQ0FURSgwKSwKIAkJCQkJICAmc3RhdHVzLCA0KSkKIAkJCXJldHVybiAtRUlPOwpAQCAtMTU0LDcgKzE1Myw3IEBACiAJCSAmJiAodGltZW91dCsrIDwgTkVUWEVOX05JVV9QSFlfV0FJVE1BWCkpOwogCiAJaWYgKHRpbWVvdXQgPCBORVRYRU5fTklVX1BIWV9XQUlUTUFYKSB7Ci0JCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwKKwkJaWYgKGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKIAkJCQkJICBORVRYRU5fTklVX0dCX01JSV9NR01UX1NUQVRVUygwKSwKIAkJCQkJICByZWFkdmFsLCA0KSkKIAkJCXJldHVybiAtRUlPOwpAQCAtMTYzLDcgKzE2Miw3IEBACiAJCXJlc3VsdCA9IC0xOwogCiAJaWYgKHJlc3RvcmUpCi0JCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAogCQkJCQkgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMCgwKSwKIAkJCQkJICAgJm1hY19jZmcwLCA0KSkKIAkJCXJldHVybiAtRUlPOwpAQCAtMjAxLDcgKzIwMCw3IEBACiAJICogY2Fubm90IGJlIGluIHJlc2V0CiAJICovCiAKLQlpZiAobmV0eGVuX25pY19od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApLAorCWlmIChhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApLAogCQkJCSAgJm1hY19jZmcwLCA0KSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKG5ldHhlbl9nYl9nZXRfc29mdF9yZXNldChtYWNfY2ZnMCkpIHsKQEAgLTIxMiw3ICsyMTEsNyBAQAogCQluZXR4ZW5fZ2JfdHhfcmVzZXRfbWFjKHRlbXApOwogCQluZXR4ZW5fZ2JfcnhfcmVzZXRfbWFjKHRlbXApOwogCi0JCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAogCQkJCQkgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMCgwKSwKIAkJCQkJICAgJnRlbXAsIDQpKQogCQkJcmV0dXJuIC1FSU87CkBAIC0yMjAsMjQgKzIxOSwyNCBAQAogCX0KIAogCWNvbW1hbmQgPSAwOwkJLyogdHVybiBvZmYgYW55IHByaW9yIGFjdGl2aXR5ICovCi0JaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT01NQU5EKDApLAorCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0NPTU1BTkQoMCksCiAJCQkJICAgJmNvbW1hbmQsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAogCWFkZHJlc3MgPSAwOwogCW5ldHhlbl9nYl9taWlfbWdtdF9yZWdfYWRkcihhZGRyZXNzLCByZWcpOwogCW5ldHhlbl9nYl9taWlfbWdtdF9waHlfYWRkcihhZGRyZXNzLCBwaHkpOwotCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUigwKSwKKwlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSKDApLAogCQkJCSAgICZhZGRyZXNzLCA0KSkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0NUUkwoMCksCisJaWYgKGFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ1RSTCgwKSwKIAkJCQkgICAmdmFsLCA0KSkKIAkJcmV0dXJuIC1FSU87CiAKIAlzdGF0dXMgPSAwOwogCWRvIHsKLQkJaWYgKG5ldHhlbl9uaWNfaHdfcmVhZF93eChhZGFwdGVyLAorCQlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAogCQkJCQkgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfSU5ESUNBVEUoMCksCiAJCQkJCSAgJnN0YXR1cywgNCkpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTI1Miw3ICsyNTEsNyBAQAogCiAJLyogcmVzdG9yZSB0aGUgc3RhdGUgb2YgcG9ydCAwIE1BQyBpbiBjYXNlIHdlIHRhbXBlcmVkIHdpdGggaXQgKi8KIAlpZiAocmVzdG9yZSkKLQkJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwKKwkJaWYgKGFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCiAJCQkJCSAgIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApLAogCQkJCQkgICAmbWFjX2NmZzAsIDQpKQogCQkJcmV0dXJuIC1FSU87CkBAIC00MDEsMTQgKzQwMCwxNiBAQAogewogCWludCByZXN1bHQgPSAwOwogCV9fdTMyIHN0YXR1czsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm4gMDsKKwogCWlmIChhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKQogCQlhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOwogCW1kZWxheSgyKTsKIAotCWlmICgwID09Ci0JICAgIG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkKGFkYXB0ZXIsCi0JCQkJICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLAotCQkJCSAgICAmc3RhdHVzKSkgeworCWlmICgwID09IG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkKGFkYXB0ZXIsCisJCQlORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywgJnN0YXR1cykpIHsKIAkJaWYgKG5ldHhlbl9nZXRfcGh5X2xpbmsoc3RhdHVzKSkgewogCQkJaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMikgewogCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9nbWlpX21vZGUoYWRhcHRlciwgcG9ydCwgMSk7CkBAIC00NTYsMTIgKzQ1NywxMiBAQAogCiBpbnQgbmV0eGVuX25pdV94Z19pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCkKIHsKLQl1MzIgcG9ydG51bSA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0KLQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKLQkJTkVUWEVOX05JVV9YR0VfQ09ORklHXzErKDB4MTAwMDAqcG9ydG51bSksIDB4MTQ0Nyk7Ci0JbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCi0JCU5FVFhFTl9OSVVfWEdFX0NPTkZJR18wKygweDEwMDAwKnBvcnRudW0pLCAweDUpOworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJTkVUWEVOX05JVV9YR0VfQ09ORklHXzErKDB4MTAwMDAqcG9ydCksIDB4MTQ0Nyk7CisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJTkVUWEVOX05JVV9YR0VfQ09ORklHXzArKDB4MTAwMDAqcG9ydCksIDB4NSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC01ODEsMTAgKzU4MiwxMCBAQAogCWlmICgocGh5IDwgMCkgfHwgKHBoeSA+IDMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMChwaHkpLAorCWlmIChhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfU1RBVElPTl9BRERSXzAocGh5KSwKIAkJCQkgICZzdGF0aW9uaGlnaCwgNCkpCiAJCXJldHVybiAtRUlPOwotCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMShwaHkpLAorCWlmIChhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfU1RBVElPTl9BRERSXzEocGh5KSwKIAkJCQkgICZzdGF0aW9ubG93LCA0KSkKIAkJcmV0dXJuIC1FSU87CiAJKChfX2xlMzIgKil2YWwpWzFdID0gY3B1X3RvX2xlMzIoc3RhdGlvbmhpZ2gpOwpAQCAtNjEzLDE0ICs2MTQsMTQgQEAKIAkJdGVtcFswXSA9IHRlbXBbMV0gPSAwOwogCQltZW1jcHkodGVtcCArIDIsIGFkZHIsIDIpOwogCQl2YWwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXRlbXApOwotCQlpZiAobmV0eGVuX25pY19od193cml0ZV93eAotCQkgICAgKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfU1RBVElPTl9BRERSXzEocGh5KSwgJnZhbCwgNCkpCisJCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAorCQkJCU5FVFhFTl9OSVVfR0JfU1RBVElPTl9BRERSXzEocGh5KSwgJnZhbCwgNCkpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQltZW1jcHkodGVtcCwgKCh1OCAqKSBhZGRyKSArIDIsIHNpemVvZihfX2xlMzIpKTsKIAkJdmFsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKil0ZW1wKTsKLQkJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3gKLQkJICAgIChhZGFwdGVyLCBORVRYRU5fTklVX0dCX1NUQVRJT05fQUREUl8wKHBoeSksICZ2YWwsIDQpKQorCQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQlORVRYRU5fTklVX0dCX1NUQVRJT05fQUREUl8wKHBoeSksICZ2YWwsIDQpKQogCQkJcmV0dXJuIC0yOwogCiAJCW5ldHhlbl9uaXVfbWFjYWRkcl9nZXQoYWRhcHRlciwKQEAgLTY1NCw3ICs2NTUsNyBAQAogCiAJbWFjX2NmZzAgPSAwOwogCW5ldHhlbl9nYl9zb2Z0X3Jlc2V0KG1hY19jZmcwKTsKLQlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKKwlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCiAJCQkJICAgJm1hY19jZmcwLCA0KSkKIAkJcmV0dXJuIC1FSU87CiAJbWFjX2NmZzAgPSAwOwpAQCAtNjY2LDcgKzY2Nyw3IEBACiAJbmV0eGVuX2diX3R4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7CiAJbmV0eGVuX2diX3J4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7CiAKLQlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKKwlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCiAJCQkJICAgJm1hY19jZmcwLCA0KSkKIAkJcmV0dXJuIC1FSU87CiAJbWFjX2NmZzEgPSAwOwpAQCAtNjc5LDcgKzY4MCw3IEBACiAKIAlpZiAobW9kZSA9PSBORVRYRU5fTklVXzEwXzEwMF9NQikgewogCQluZXR4ZW5fZ2Jfc2V0X2ludGZtb2RlKG1hY19jZmcxLCAxKTsKLQkJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwKKwkJaWYgKGFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCiAJCQkJCSAgIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18xKHBvcnQpLAogCQkJCQkgICAmbWFjX2NmZzEsIDQpKQogCQkJcmV0dXJuIC1FSU87CkBAIC02OTIsNyArNjkzLDcgQEAKIAogCX0gZWxzZSBpZiAobW9kZSA9PSBORVRYRU5fTklVXzEwMDBfTUIpIHsKIAkJbmV0eGVuX2diX3NldF9pbnRmbW9kZShtYWNfY2ZnMSwgMik7Ci0JCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAogCQkJCQkgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMShwb3J0KSwKIAkJCQkJICAgJm1hY19jZmcxLCA0KSkKIAkJCXJldHVybiAtRUlPOwpAQCAtNzA0LDcgKzcwNSw3IEBACiAJfQogCW1paV9jZmcgPSAwOwogCW5ldHhlbl9nYl9zZXRfbWlpX21nbXRfY2xvY2tzZWxlY3QobWlpX2NmZywgNyk7Ci0JaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT05GSUcocG9ydCksCisJaWYgKGFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09ORklHKHBvcnQpLAogCQkJCSAgICZtaWlfY2ZnLCA0KSkKIAkJcmV0dXJuIC1FSU87CiAJbWFjX2NmZzAgPSAwOwpAQCAtNzEzLDcgKzcxNCw3IEBACiAJbmV0eGVuX2diX3Vuc2V0X3J4X2Zsb3djdGwobWFjX2NmZzApOwogCW5ldHhlbl9nYl91bnNldF90eF9mbG93Y3RsKG1hY19jZmcwKTsKIAotCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLAorCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKIAkJCQkgICAmbWFjX2NmZzAsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKQEAgLTczMCw3ICs3MzEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAltYWNfY2ZnMCA9IDA7CiAJbmV0eGVuX2diX3NvZnRfcmVzZXQobWFjX2NmZzApOwotCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLAorCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKIAkJCQkgICAmbWFjX2NmZzAsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKQEAgLTc0Niw3ICs3NDcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1hY19jZmcgPSAwOwotCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsCisJaWYgKGFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsCiAJCU5FVFhFTl9OSVVfWEdFX0NPTkZJR18wICsgKDB4MTAwMDAgKiBwb3J0KSwgJm1hY19jZmcsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKQEAgLTc2Myw3ICs3NjQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHNhdmUgcHJldmlvdXMgY29udGVudHMgKi8KLQlpZiAobmV0eGVuX25pY19od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfRFJPUF9XUk9OR0FERFIsCisJaWYgKGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9EUk9QX1dST05HQUREUiwKIAkJCQkgICZyZWcsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobW9kZSA9PSBORVRYRU5fTklVX1BST01JU0NfTU9ERSkgewpAQCAtODAxLDcgKzgwMiw3IEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KLQlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX0RST1BfV1JPTkdBRERSLAorCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX0RST1BfV1JPTkdBRERSLAogCQkJCSAgICZyZWcsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKQEAgLTgyNiwxMyArODI3LDEzIEBACiAJY2FzZSAwOgogCSAgICBtZW1jcHkodGVtcCArIDIsIGFkZHIsIDIpOwogCSAgICB2YWwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXRlbXApOwotCSAgICBpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF8xLAorCSAgICBpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfMSwKIAkJCQkmdmFsLCA0KSkKIAkJcmV0dXJuIC1FSU87CiAKIAkgICAgbWVtY3B5KCZ0ZW1wLCAoKHU4ICopIGFkZHIpICsgMiwgc2l6ZW9mKF9fbGUzMikpOwogCSAgICB2YWwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXRlbXApOwotCSAgICBpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF9ISSwKKwkgICAgaWYgKGFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX1NUQVRJT05fQUREUl8wX0hJLAogCQkJCSZ2YWwsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAkgICAgYnJlYWs7CkBAIC04NDAsMTMgKzg0MSwxMyBAQAogCWNhc2UgMToKIAkgICAgbWVtY3B5KHRlbXAgKyAyLCBhZGRyLCAyKTsKIAkgICAgdmFsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKil0ZW1wKTsKLQkgICAgaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YRzFfU1RBVElPTl9BRERSXzBfMSwKKwkgICAgaWYgKGFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEcxX1NUQVRJT05fQUREUl8wXzEsCiAJCQkJJnZhbCwgNCkpCiAJCXJldHVybiAtRUlPOwogCiAJICAgIG1lbWNweSgmdGVtcCwgKCh1OCAqKSBhZGRyKSArIDIsIHNpemVvZihfX2xlMzIpKTsKIAkgICAgdmFsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKil0ZW1wKTsKLQkgICAgaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YRzFfU1RBVElPTl9BRERSXzBfSEksCisJICAgIGlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHMV9TVEFUSU9OX0FERFJfMF9ISSwKIAkJCQkmdmFsLCA0KSkKIAkJcmV0dXJuIC1FSU87CiAJICAgIGJyZWFrOwpAQCAtODc3LDEwICs4NzgsMTAgQEAKIAlpZiAocGh5ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG5ldHhlbl9uaWNfaHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF9ISSwKKwlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF9ISSwKIAkJCQkgICZzdGF0aW9uaGlnaCwgNCkpCiAJCXJldHVybiAtRUlPOwotCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfMSwKKwlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF8xLAogCQkJCSAgJnN0YXRpb25sb3csIDQpKQogCQlyZXR1cm4gLUVJTzsKIAkoKF9fbGUzMiAqKXZhbClbMV0gPSBjcHVfdG9fbGUzMihzdGF0aW9uaGlnaCk7CkBAIC05MDEsNyArOTAyLDcgQEAKIAlpZiAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwKKwlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAogCQlORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCksICZyZWcsIDQpKQogCQkJcmV0dXJuIC1FSU87CiAJaWYgKG1vZGUgPT0gTkVUWEVOX05JVV9QUk9NSVNDX01PREUpCkBAIC05MDksNiArOTEwLDExIEBACiAJZWxzZQogCQlyZWcgPSAocmVnICYgfjB4MjAwMFVMKTsKIAorCWlmIChtb2RlID09IE5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERSkKKwkJcmVnID0gKHJlZyB8IDB4MTAwMFVMKTsKKwllbHNlCisJCXJlZyA9IChyZWcgJiB+MHgxMDAwVUwpOworCiAJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCiAJCU5FVFhFTl9OSVVfWEdFX0NPTkZJR18xICsgKDB4MTAwMDAgKiBwb3J0KSwgcmVnKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKaW5kZXggYTU2NmI1MC4uM2JmYTUxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCkBAIC00Miw4ICs0MiwxMSBAQAogI2RlZmluZSBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVCAgICAgTkVUWEVOX05JQ19SRUcoMHgwYykKICNkZWZpbmUgQ1JCX1BBVVNFX0FERFJfTE8gICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MTApCS8qIEMwIEVQRyBCVUcgICovCiAjZGVmaW5lIENSQl9QQVVTRV9BRERSX0hJICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDE0KQotI2RlZmluZSBDUkJfSE9TVF9DTURfQUREUl9ISSAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgxOCkJLyogaG9zdCBhZGQ6Y21kIHJpbmcgKi8KLSNkZWZpbmUgQ1JCX0hPU1RfQ01EX0FERFJfTE8gICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MWMpCisjZGVmaW5lIE5YX0NEUlBfQ1JCX09GRlNFVCAgICAgICAgICBORVRYRU5fTklDX1JFRygweDE4KQorI2RlZmluZSBOWF9BUkcxX0NSQl9PRkZTRVQgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgxYykKKyNkZWZpbmUgTlhfQVJHMl9DUkJfT0ZGU0VUICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MjApCisjZGVmaW5lIE5YX0FSRzNfQ1JCX09GRlNFVCAgICAgICAgICBORVRYRU5fTklDX1JFRygweDI0KQorI2RlZmluZSBOWF9TSUdOX0NSQl9PRkZTRVQgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgyOCkKICNkZWZpbmUgQ1JCX0NNRF9JTlRSX0xPT1AgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MjApCS8qIDQgcmVncyBmb3IgcGVyZiAqLwogI2RlZmluZSBDUkJfQ01EX0RNQV9MT09QICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgyNCkKICNkZWZpbmUgQ1JCX1JDVl9JTlRSX0xPT1AgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MjgpCkBAIC03Myw4ICs3Niw4IEBACiAjZGVmaW5lIENSQl9SWF9MUk9fTUlEX1RJTUVSICAgICAgICBORVRYRU5fTklDX1JFRygweDg4KQogI2RlZmluZSBDUkJfRE1BX01BWF9SQ1ZfQlVGUyAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg4YykKICNkZWZpbmUgQ1JCX01BWF9ETUFfRU5UUklFUyAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4OTApCi0jZGVmaW5lIENSQl9YR19TVEFURSAgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDk0KQkvKiBYRyBMaW5rIHN0YXR1cyAqLwotI2RlZmluZSBDUkJfQUdFTlRfR08gICAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg5OCkJLyogTklDIHBrdCBnZW4gYWdlbnQgKi8KKyNkZWZpbmUgQ1JCX1hHX1NUQVRFICAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4OTQpIC8qIFhHIExpbmsgc3RhdHVzICovCisjZGVmaW5lIENSQl9YR19TVEFURV9QMyAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDk4KSAvKiBYRyBQRiBMaW5rIHN0YXR1cyAqLwogI2RlZmluZSBDUkJfQUdFTlRfVFhfU0laRSAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg5YykKICNkZWZpbmUgQ1JCX0FHRU5UX1RYX1RZUEUgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YTApCiAjZGVmaW5lIENSQl9BR0VOVF9UWF9BRERSICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGE0KQpAQCAtOTcsNyArMTAwLDkgQEAKICNkZWZpbmUgQ1JCX0hPU1RfQlVGRkVSX0NPTlMgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZjApCiAjZGVmaW5lIENSQl9KVU1CT19CVUZGRVJfUFJPRCAgICAgICBORVRYRU5fTklDX1JFRygweGY0KQogI2RlZmluZSBDUkJfSlVNQk9fQlVGRkVSX0NPTlMgICAgICAgTkVUWEVOX05JQ19SRUcoMHhmOCkKKyNkZWZpbmUgQ1JCX0hPU1RfRFVNTVlfQlVGICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZmMpCiAKKyNkZWZpbmUgQ1JCX1JDVlBFR19TVEFURSAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MTNjKQogI2RlZmluZSBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVF8xICAgTkVUWEVOX05JQ19SRUcoMHgxYWMpCiAjZGVmaW5lIENSQl9DTURfQ09OU1VNRVJfT0ZGU0VUXzEgICBORVRYRU5fTklDX1JFRygweDFiMCkKICNkZWZpbmUgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVRfMiAgIE5FVFhFTl9OSUNfUkVHKDB4MWI4KQpAQCAtMTQ3LDI5ICsxNTIsMTUgQEAKICNkZWZpbmUgbnhfZ2V0X3RlbXBfc3RhdGUoeCkJCSgoeCkgJiAweGZmZmYpCiAjZGVmaW5lIG54X2VuY29kZV90ZW1wKHZhbCwgc3RhdGUpCSgoKHZhbCkgPDwgMTYpIHwgKHN0YXRlKSkKIAotLyogQ1JCIHJlZ2lzdGVycyBwZXIgUmN2IERlc2NyaXB0b3IgcmluZyAqLwotc3RydWN0IG5ldHhlbl9yY3ZfZGVzY19jcmIgewotCXUzMiBjcmJfcmN2X3Byb2R1Y2VyX29mZnNldCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg1MTIpKSk7Ci0JdTMyIGNyYl9yY3ZfY29uc3VtZXJfb2Zmc2V0OwotCXUzMiBjcmJfZ2xvYmFscmN2X3Jpbmc7Ci0JdTMyIGNyYl9yY3ZfcmluZ19zaXplOwotfTsKLQogLyoKICAqIENSQiByZWdpc3RlcnMgdXNlZCBieSB0aGUgcmVjZWl2ZSBwZWcgbG9naWMuCiAgKi8KIAogc3RydWN0IG5ldHhlbl9yZWN2X2NyYiB7Ci0Jc3RydWN0IG5ldHhlbl9yY3ZfZGVzY19jcmIgcmN2X2Rlc2NfY3JiW05VTV9SQ1ZfREVTQ19SSU5HU107Ci0JdTMyIGNyYl9yY3ZzdGF0dXNfcmluZzsKLQl1MzIgY3JiX3Jjdl9zdGF0dXNfcHJvZHVjZXI7Ci0JdTMyIGNyYl9yY3Zfc3RhdHVzX2NvbnN1bWVyOwotCXUzMiBjcmJfcmN2cGVnX3N0YXRlOwotCXUzMiBjcmJfc3RhdHVzX3Jpbmdfc2l6ZTsKKwl1MzIgY3JiX3Jjdl9wcm9kdWNlcltOVU1fUkNWX0RFU0NfUklOR1NdOworCXUzMiBjcmJfc3RzX2NvbnN1bWVyOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBuZXR4ZW5fcmVjdl9jcmIgcmVjdl9jcmJfcmVnaXN0ZXJzW107Ci0KIC8qCiAgKiBUZW1wZXJhdHVyZSBjb250cm9sLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuYyBiL2RyaXZlcnMvbmV0L25pdS5jCmluZGV4IDkxOGY4MDIuLjhlZTdkN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25pdS5jCkBAIC0zMjM2LDEwICszMjM2LDE0IEBACiAKIHN0YXRpYyB2b2lkIG5pdV90eF93b3JrKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCkKIHsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJdTE2IHBrdF9jbnQsIHRtcDsKLQlpbnQgY29uczsKKwlpbnQgY29ucywgaW5kZXg7CiAJdTY0IGNzOwogCisJaW5kZXggPSAocnAgLSBucC0+dHhfcmluZ3MpOworCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobnAtPmRldiwgaW5kZXgpOworCiAJY3MgPSBycC0+dHhfY3M7CiAJaWYgKHVubGlrZWx5KCEoY3MgJiAoVFhfQ1NfTUsgfCBUWF9DU19NTUspKSkpCiAJCWdvdG8gb3V0OwpAQCAtMzI2MiwxMyArMzI2NiwxMyBAQAogCXNtcF9tYigpOwogCiBvdXQ6Ci0JaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQobnAtPmRldikgJiYKKwlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpICYmCiAJCSAgICAgKG5pdV90eF9hdmFpbChycCkgPiBOSVVfVFhfV0FLRVVQX1RIUkVTSChycCkpKSkgewotCQluZXRpZl90eF9sb2NrKG5wLT5kZXYpOwotCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChucC0+ZGV2KSAmJgorCQlfX25ldGlmX3R4X2xvY2sodHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpICYmCiAJCSAgICAobml1X3R4X2F2YWlsKHJwKSA+IE5JVV9UWF9XQUtFVVBfVEhSRVNIKHJwKSkpCi0JCQluZXRpZl93YWtlX3F1ZXVlKG5wLT5kZXYpOwotCQluZXRpZl90eF91bmxvY2sobnAtPmRldik7CisJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CisJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CiAJfQogfQogCkBAIC00MDYxLDYgKzQwNjUsOCBAQAogCW5wLT5udW1fcnhfcmluZ3MgPSBwYXJlbnQtPnJ4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKIAlucC0+bnVtX3R4X3JpbmdzID0gcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbcG9ydF07CiAKKwlucC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBucC0+bnVtX3R4X3JpbmdzOworCiAJbnAtPnJ4X3JpbmdzID0ga3phbGxvYyhucC0+bnVtX3J4X3JpbmdzICogc2l6ZW9mKHN0cnVjdCByeF9yaW5nX2luZm8pLAogCQkJICAgICAgIEdGUF9LRVJORUwpOwogCWVyciA9IC1FTk9NRU07CkBAIC01Njg2LDcgKzU2OTIsNyBAQAogCQlnb3RvIG91dF9mcmVlX2lycTsKIAl9CiAKLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKIAogCWlmIChucC0+bGlua19jb25maWcubG9vcGJhY2tfbW9kZSAhPSBMT09QQkFDS19ESVNBQkxFRCkKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwpAQCAtNTcxMCw3ICs1NzE2LDcgQEAKIAljYW5jZWxfd29ya19zeW5jKCZucC0+cmVzZXRfdGFzayk7CiAKIAluaXVfZGlzYWJsZV9uYXBpKG5wKTsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CiAKIAlkZWxfdGltZXJfc3luYygmbnAtPnRpbWVyKTsKIApAQCAtNTk3MSw3ICs1OTc3LDcgQEAKIAkgKiBzbyBsb25nIGFzIGFsbCBjYWxsZXJzIGFyZSBhc3N1cmVkIHRvIGhhdmUgZnJlZSB0eCBzbG90cwogCSAqIChzdWNoIGFzIGFmdGVyIG5pdV9pbml0X2h3KS4KIAkgKi8KLQluZXRpZl93YWtlX3F1ZXVlKG5wLT5kZXYpOworCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhucC0+ZGV2KTsKIAogCW5pdV9lbmFibGVfbmFwaShucCk7CiAKQEAgLTYwOTcsMTUgKzYxMDMsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHR4X3JpbmdfaW5mbyAqdHhfcmluZ19zZWxlY3Qoc3RydWN0IG5pdSAqbnAsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JcmV0dXJuICZucC0+dHhfcmluZ3NbMF07Ci19Ci0KIHN0YXRpYyBpbnQgbml1X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBhbGlnbiwgaGVhZHJvb207CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJwOwogCXN0cnVjdCB0eF9wa3RfaGRyICp0cDsKIAl1bnNpZ25lZCBpbnQgbGVuLCBuZmc7CkBAIC02MTEzLDEwICs2MTE1LDEyIEBACiAJaW50IHByb2QsIGksIHRsZW47CiAJdTY0IG1hcHBpbmcsIG1yazsKIAotCXJwID0gdHhfcmluZ19zZWxlY3QobnAsIHNrYik7CisJaSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCXJwID0gJm5wLT50eF9yaW5nc1tpXTsKKwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CiAKIAlpZiAobml1X3R4X2F2YWlsKHJwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwogCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IEJVRyEgVHggcmluZyBmdWxsIHdoZW4gIgogCQkJInF1ZXVlIGF3YWtlIVxuIiwgZGV2LT5uYW1lKTsKIAkJcnAtPnR4X2Vycm9ycysrOwpAQCAtNjIxNSw5ICs2MjE5LDkgQEAKIAludzY0KFRYX1JJTkdfS0lDSyhycC0+dHhfY2hhbm5lbCksIHJwLT53cmFwX2JpdCB8IChwcm9kIDw8IDMpKTsKIAogCWlmICh1bmxpa2VseShuaXVfdHhfYXZhaWwocnApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwogCQlpZiAobml1X3R4X2F2YWlsKHJwKSA+IE5JVV9UWF9XQUtFVVBfVEhSRVNIKHJwKSkKLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKIAl9CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKQEAgLTYyNzUsNyArNjI3OSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAKIAlpZiAoIWVycikgewotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7CiAJCWlmIChucC0+bGlua19jb25maWcubG9vcGJhY2tfbW9kZSAhPSBMT09QQkFDS19ESVNBQkxFRCkKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIApAQCAtNjM4NSw2ICs2Mzg5LDE2MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5pdV9ldGhmbG93X3RvX2NsYXNzKGludCBmbG93X3R5cGUsIHU2NCAqY2xhc3MpCit7CisJc3dpdGNoIChmbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCQkqY2xhc3MgPSBDTEFTU19DT0RFX1RDUF9JUFY0OworCQlicmVhazsKKwljYXNlIFVEUF9WNF9GTE9XOgorCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY0OworCQlicmVhazsKKwljYXNlIEFIX0VTUF9WNF9GTE9XOgorCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0OworCQlicmVhazsKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwkJKmNsYXNzID0gQ0xBU1NfQ09ERV9TQ1RQX0lQVjQ7CisJCWJyZWFrOworCWNhc2UgVENQX1Y2X0ZMT1c6CisJCSpjbGFzcyA9IENMQVNTX0NPREVfVENQX0lQVjY7CisJCWJyZWFrOworCWNhc2UgVURQX1Y2X0ZMT1c6CisJCSpjbGFzcyA9IENMQVNTX0NPREVfVURQX0lQVjY7CisJCWJyZWFrOworCWNhc2UgQUhfRVNQX1Y2X0ZMT1c6CisJCSpjbGFzcyA9IENMQVNTX0NPREVfQUhfRVNQX0lQVjY7CisJCWJyZWFrOworCWNhc2UgU0NUUF9WNl9GTE9XOgorCQkqY2xhc3MgPSBDTEFTU19DT0RFX1NDVFBfSVBWNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdTY0IG5pdV9mbG93a2V5X3RvX2V0aGZsb3codTY0IGZsb3dfa2V5KQoreworCXU2NCBldGhmbG93ID0gMDsKKworCWlmIChmbG93X2tleSAmIEZMT1dfS0VZX1BPUlQpCisJCWV0aGZsb3cgfD0gUlhIX0RFVl9QT1JUOworCWlmIChmbG93X2tleSAmIEZMT1dfS0VZX0wyREEpCisJCWV0aGZsb3cgfD0gUlhIX0wyREE7CisJaWYgKGZsb3dfa2V5ICYgRkxPV19LRVlfVkxBTikKKwkJZXRoZmxvdyB8PSBSWEhfVkxBTjsKKwlpZiAoZmxvd19rZXkgJiBGTE9XX0tFWV9JUFNBKQorCQlldGhmbG93IHw9IFJYSF9JUF9TUkM7CisJaWYgKGZsb3dfa2V5ICYgRkxPV19LRVlfSVBEQSkKKwkJZXRoZmxvdyB8PSBSWEhfSVBfRFNUOworCWlmIChmbG93X2tleSAmIEZMT1dfS0VZX1BST1RPKQorCQlldGhmbG93IHw9IFJYSF9MM19QUk9UTzsKKwlpZiAoZmxvd19rZXkgJiAoRkxPV19LRVlfTDRfQllURTEyIDw8IEZMT1dfS0VZX0w0XzBfU0hJRlQpKQorCQlldGhmbG93IHw9IFJYSF9MNF9CXzBfMTsKKwlpZiAoZmxvd19rZXkgJiAoRkxPV19LRVlfTDRfQllURTEyIDw8IEZMT1dfS0VZX0w0XzFfU0hJRlQpKQorCQlldGhmbG93IHw9IFJYSF9MNF9CXzJfMzsKKworCXJldHVybiBldGhmbG93OworCit9CisKK3N0YXRpYyBpbnQgbml1X2V0aGZsb3dfdG9fZmxvd2tleSh1NjQgZXRoZmxvdywgdTY0ICpmbG93X2tleSkKK3sKKwl1NjQga2V5ID0gMDsKKworCWlmIChldGhmbG93ICYgUlhIX0RFVl9QT1JUKQorCQlrZXkgfD0gRkxPV19LRVlfUE9SVDsKKwlpZiAoZXRoZmxvdyAmIFJYSF9MMkRBKQorCQlrZXkgfD0gRkxPV19LRVlfTDJEQTsKKwlpZiAoZXRoZmxvdyAmIFJYSF9WTEFOKQorCQlrZXkgfD0gRkxPV19LRVlfVkxBTjsKKwlpZiAoZXRoZmxvdyAmIFJYSF9JUF9TUkMpCisJCWtleSB8PSBGTE9XX0tFWV9JUFNBOworCWlmIChldGhmbG93ICYgUlhIX0lQX0RTVCkKKwkJa2V5IHw9IEZMT1dfS0VZX0lQREE7CisJaWYgKGV0aGZsb3cgJiBSWEhfTDNfUFJPVE8pCisJCWtleSB8PSBGTE9XX0tFWV9QUk9UTzsKKwlpZiAoZXRoZmxvdyAmIFJYSF9MNF9CXzBfMSkKKwkJa2V5IHw9IChGTE9XX0tFWV9MNF9CWVRFMTIgPDwgRkxPV19LRVlfTDRfMF9TSElGVCk7CisJaWYgKGV0aGZsb3cgJiBSWEhfTDRfQl8yXzMpCisJCWtleSB8PSAoRkxPV19LRVlfTDRfQllURTEyIDw8IEZMT1dfS0VZX0w0XzFfU0hJRlQpOworCisJKmZsb3dfa2V5ID0ga2V5OworCisJcmV0dXJuIDE7CisKK30KKworc3RhdGljIGludCBuaXVfZ2V0X2hhc2hfb3B0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKQoreworCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1NjQgY2xhc3M7CisKKwljbWQtPmRhdGEgPSAwOworCisJaWYgKCFuaXVfZXRoZmxvd190b19jbGFzcyhjbWQtPmZsb3dfdHlwZSwgJmNsYXNzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobnAtPnBhcmVudC0+dGNhbV9rZXlbY2xhc3MgLSBDTEFTU19DT0RFX1VTRVJfUFJPRzFdICYKKwkgICAgVENBTV9LRVlfRElTQykKKwkJY21kLT5kYXRhID0gUlhIX0RJU0NBUkQ7CisJZWxzZQorCisJCWNtZC0+ZGF0YSA9IG5pdV9mbG93a2V5X3RvX2V0aGZsb3cobnAtPnBhcmVudC0+Zmxvd19rZXlbY2xhc3MgLQorCQkJCQkJICAgICAgQ0xBU1NfQ09ERV9VU0VSX1BST0cxXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbml1X3NldF9oYXNoX29wdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCkKK3sKKwlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTY0IGNsYXNzOworCXU2NCBmbG93X2tleSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghbml1X2V0aGZsb3dfdG9fY2xhc3MoY21kLT5mbG93X3R5cGUsICZjbGFzcykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNsYXNzIDwgQ0xBU1NfQ09ERV9VU0VSX1BST0cxIHx8CisJICAgIGNsYXNzID4gQ0xBU1NfQ09ERV9TQ1RQX0lQVjYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNtZC0+ZGF0YSAmIFJYSF9ESVNDQVJEKSB7CisJCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCQlmbG93X2tleSA9IG5wLT5wYXJlbnQtPnRjYW1fa2V5W2NsYXNzIC0KKwkJCQkJICAgICAgIENMQVNTX0NPREVfVVNFUl9QUk9HMV07CisJCWZsb3dfa2V5IHw9IFRDQU1fS0VZX0RJU0M7CisJCW53NjQoVENBTV9LRVkoY2xhc3MgLSBDTEFTU19DT0RFX1VTRVJfUFJPRzEpLCBmbG93X2tleSk7CisJCW5wLT5wYXJlbnQtPnRjYW1fa2V5W2NsYXNzIC0gQ0xBU1NfQ09ERV9VU0VSX1BST0cxXSA9IGZsb3dfa2V5OworCQluaXVfdW5sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKiBEaXNjYXJkIHdhcyBzZXQgYmVmb3JlLCBidXQgaXMgbm90IHNldCBub3cgKi8KKwkJaWYgKG5wLT5wYXJlbnQtPnRjYW1fa2V5W2NsYXNzIC0gQ0xBU1NfQ09ERV9VU0VSX1BST0cxXSAmCisJCSAgICBUQ0FNX0tFWV9ESVNDKSB7CisJCQluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKwkJCWZsb3dfa2V5ID0gbnAtPnBhcmVudC0+dGNhbV9rZXlbY2xhc3MgLQorCQkJCQkgICAgICAgQ0xBU1NfQ09ERV9VU0VSX1BST0cxXTsKKwkJCWZsb3dfa2V5ICY9IH5UQ0FNX0tFWV9ESVNDOworCQkJbnc2NChUQ0FNX0tFWShjbGFzcyAtIENMQVNTX0NPREVfVVNFUl9QUk9HMSksCisJCQkgICAgIGZsb3dfa2V5KTsKKwkJCW5wLT5wYXJlbnQtPnRjYW1fa2V5W2NsYXNzIC0gQ0xBU1NfQ09ERV9VU0VSX1BST0cxXSA9CisJCQkJZmxvd19rZXk7CisJCQluaXVfdW5sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCQl9CisJfQorCisJaWYgKCFuaXVfZXRoZmxvd190b19mbG93a2V5KGNtZC0+ZGF0YSwgJmZsb3dfa2V5KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKwludzY0KEZMT1dfS0VZKGNsYXNzIC0gQ0xBU1NfQ09ERV9VU0VSX1BST0cxKSwgZmxvd19rZXkpOworCW5wLT5wYXJlbnQtPmZsb3dfa2V5W2NsYXNzIC0gQ0xBU1NfQ09ERV9VU0VSX1BST0cxXSA9IGZsb3dfa2V5OworCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJY29uc3QgY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKIH0gbml1X3htYWNfc3RhdF9rZXlzW10gPSB7CkBAIC02NjE1LDYgKzY3NzUsOCBAQAogCS5nZXRfc3RhdHNfY291bnQJPSBuaXVfZ2V0X3N0YXRzX2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IG5pdV9nZXRfZXRodG9vbF9zdGF0cywKIAkucGh5c19pZAkJPSBuaXVfcGh5c19pZCwKKwkuZ2V0X3J4aGFzaAkJPSBuaXVfZ2V0X2hhc2hfb3B0cywKKwkuc2V0X3J4aGFzaAkJPSBuaXVfc2V0X2hhc2hfb3B0cywKIH07CiAKIHN0YXRpYyBpbnQgbml1X2xkZ19hc3NpZ25fbGRuKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50LApAQCAtODM3NCw5ICs4NTM2LDEwIEBACiAJc3RydWN0IG9mX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBuaXVfb3BzICpvcHMsCiAJdTggcG9ydCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuaXUpKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBuaXUgKm5wOwogCisJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBuaXUpLCBOSVVfTlVNX1RYQ0hBTik7CiAJaWYgKCFkZXYpIHsKIAkJZGV2X2VycihnZW5fZGV2LCBQRlggIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuaCBiL2RyaXZlcnMvbmV0L25pdS5oCmluZGV4IDEyZmQ1NzAuLmM2ZmE4ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5oCisrKyBiL2RyaXZlcnMvbmV0L25pdS5oCkBAIC0yODEsNyArMjgxLDcgQEAKICNkZWZpbmUgWE1BQ19BRERSMQkJCTB4MDAwYThVTAogI2RlZmluZSAgWE1BQ19BRERSMV9BRERSMQkJMHgwMDAwMDAwMDAwMDBmZmZmVUxMCiAKLSNkZWZpbmUgWE1BQ19BRERSMgkJCTB4MDAwYjBVTCAKKyNkZWZpbmUgWE1BQ19BRERSMgkJCTB4MDAwYjBVTAogI2RlZmluZSAgWE1BQ19BRERSMl9BRERSMgkJMHgwMDAwMDAwMDAwMDBmZmZmVUxMCiAKICNkZWZpbmUgWE1BQ19BRERSX0NNUEVOCQkJMHgwMDIwOFVMCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uczgzODIwLmMgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKaW5kZXggYjQyYzA1Zi4uZmY0NDk2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jCisrKyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwpAQCAtNTg1LDE2ICs1ODUsMTMgQEAKIAlmb3IgKGk9MDsgaTxOUl9SWF9ERVNDOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJbG9uZyByZXM7CisKIAkJLyogZXh0cmEgMTYgYnl0ZXMgZm9yIGFsaWdubWVudCAqLwotCQlza2IgPSBfX2Rldl9hbGxvY19za2IoUkVBTF9SWF9CVUZfU0laRSsxNiwgZ2ZwKTsKKwkJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG5kZXYsIFJFQUxfUlhfQlVGX1NJWkUrMTYsIGdmcCk7CiAJCWlmICh1bmxpa2VseSghc2tiKSkKIAkJCWJyZWFrOwogCi0JCXJlcyA9IChsb25nKXNrYi0+ZGF0YSAmIDB4ZjsKLQkJcmVzID0gMHgxMCAtIHJlczsKLQkJcmVzICY9IDB4ZjsKLQkJc2tiX3Jlc2VydmUoc2tiLCByZXMpOwotCisJCXNrYl9yZXNlcnZlKHNrYiwgc2tiLT5kYXRhIC0gUFRSX0FMSUdOKHNrYi0+ZGF0YSwgMTYpKTsKIAkJaWYgKGdmcCAhPSBHRlBfQVRPTUlDKQogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cnhfaW5mby5sb2NrLCBmbGFncyk7CiAJCXJlcyA9IG5zODM4MjBfYWRkX3J4X3NrYihkZXYsIHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYyBiL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCmluZGV4IGZmZmM0OWIuLjUzNDUxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCkBAIC0xNzM5LDcgKzE3MzksNiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnRwLT5sb2NrLCBmbGFncyk7CiAKLQlzeW5jaHJvbml6ZV9pcnEgKGRldi0+aXJxKTsKIAlmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7CiAKIAluZXRkcnZfdHhfY2xlYXIgKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDNiNzhhMzguLjcxMTJmZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC0yMDgsNyArMjA4LDYgQEAKIHN0cnVjdCBlbDNfcHJpdmF0ZSB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWRldl9ub2RlX3Qgbm9kZTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAl1MTYgYWR2ZXJ0aXNpbmcsIHBhcnRuZXI7CQkvKiBOV2F5IG1lZGlhIGFkdmVydGlzZW1lbnQgKi8KIAl1bnNpZ25lZCBjaGFyIHBoeXM7CQkJLyogTUlJIGRldmljZSBhZGRyZXNzICovCiAJdW5zaWduZWQgaW50IGF1dG9zZWxlY3Q6MSwgZGVmYXVsdF9tZWRpYTozOwkvKiBSZWFkIGZyb20gdGhlIEVFUFJPTS9XbjNfQ29uZmlnLiAqLwpAQCAtNzQxLDEyICs3NDAsMTEgQEAKIAogc3RhdGljIHZvaWQgZWwzX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJCiAJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVHJhbnNtaXQgdGltZWQgb3V0IVxuIiwgZGV2LT5uYW1lKTsKIAlkdW1wX3N0YXR1cyhkZXYpOwotCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCS8qIElzc3VlIFRYX1JFU0VUIGFuZCBUWF9TVEFSVCBjb21tYW5kcy4gKi8KIAl0YzU3NF93YWl0X2Zvcl9jb21wbGV0aW9uKGRldiwgVHhSZXNldCk7CkBAIC03NTYsNyArNzU0LDYgQEAKIAogc3RhdGljIHZvaWQgcG9wX3R4X3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlpbnQgaTsKICAgICAKQEAgLTc3Miw3ICs3NjksNyBAQAogCQkJREVCVUcoMSwgIiVzOiB0cmFuc21pdCBlcnJvcjogc3RhdHVzIDB4JTAyeFxuIiwKIAkJCQkgIGRldi0+bmFtZSwgdHhfc3RhdHVzKTsKIAkJCW91dHcoVHhFbmFibGUsIGlvYWRkciArIEVMM19DTUQpOwotCQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCX0KIAkJb3V0YigweDAwLCBpb2FkZHIgKyBUeFN0YXR1cyk7IC8qIFBvcCB0aGUgc3RhdHVzIHN0YWNrLiAqLwogCX0KQEAgLTk4Nyw3ICs5ODQsNyBAQAogCQl1cGRhdGVfc3RhdHMoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPndpbmRvd19sb2NrLCBmbGFncyk7CiAJfQotCXJldHVybiAmbHAtPnN0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogLyogIFVwZGF0ZSBzdGF0aXN0aWNzLgpAQCAtOTk2LDcgKzk5Myw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAl1OCByeCwgdHgsIHVwOwogCkBAIC0xMDA4LDE1ICsxMDA0LDE1IEBACiAJLyogVW5saWtlIHRoZSAzYzUwOSB3ZSBuZWVkIG5vdCB0dXJuIG9mZiBzdGF0cyB1cGRhdGVzIHdoaWxlIHJlYWRpbmcuICovCiAJLyogU3dpdGNoIHRvIHRoZSBzdGF0cyB3aW5kb3csIGFuZCByZWFkIGV2ZXJ5dGhpbmcuICovCiAJRUwzV0lORE9XKDYpOwotCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyAJCSs9IGluYihpb2FkZHIgKyAwKTsKLQlscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycwkJKz0gaW5iKGlvYWRkciArIDEpOworCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgCQkrPSBpbmIoaW9hZGRyICsgMCk7CisJZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzCQkrPSBpbmIoaW9hZGRyICsgMSk7CiAJLyogTXVsdGlwbGUgY29sbGlzaW9ucy4gKi8JICAgCWluYihpb2FkZHIgKyAyKTsKLQlscC0+c3RhdHMuY29sbGlzaW9ucwkJCSs9IGluYihpb2FkZHIgKyAzKTsKLQlscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycwkJKz0gaW5iKGlvYWRkciArIDQpOwotCWxwLT5zdGF0cy5yeF9maWZvX2Vycm9ycwkJKz0gaW5iKGlvYWRkciArIDUpOwotCWxwLT5zdGF0cy50eF9wYWNrZXRzCQkJKz0gaW5iKGlvYWRkciArIDYpOworCWRldi0+c3RhdHMuY29sbGlzaW9ucwkJCSs9IGluYihpb2FkZHIgKyAzKTsKKwlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMJCSs9IGluYihpb2FkZHIgKyA0KTsKKwlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzCQkrPSBpbmIoaW9hZGRyICsgNSk7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzCQkJKz0gaW5iKGlvYWRkciArIDYpOwogCXVwCQkgCQkJID0gaW5iKGlvYWRkciArIDkpOwotCWxwLT5zdGF0cy50eF9wYWNrZXRzCQkJKz0gKHVwJjB4MzApIDw8IDQ7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzCQkJKz0gKHVwJjB4MzApIDw8IDQ7CiAJLyogUnggcGFja2V0cyAgICovCQkJICAgaW5iKGlvYWRkciArIDcpOwogCS8qIFR4IGRlZmVycmFscyAqLwkJCSAgIGluYihpb2FkZHIgKyA4KTsKIAlyeAkJIAkJCSA9IGludyhpb2FkZHIgKyAxMCk7CkBAIC0xMDI2LDE0ICsxMDIyLDEzIEBACiAJLyogQmFkU1NEICovCQkJCSAgIGluYihpb2FkZHIgKyAxMik7CiAJdXAJCQkJCSA9IGluYihpb2FkZHIgKyAxMyk7CiAKLQlscC0+c3RhdHMudHhfYnl0ZXMgCQkJKz0gdHggKyAoKHVwICYgMHhmMCkgPDwgMTIpOworCWRldi0+c3RhdHMudHhfYnl0ZXMgCQkJKz0gdHggKyAoKHVwICYgMHhmMCkgPDwgMTIpOwogCiAJRUwzV0lORE9XKDEpOwogfQogCiBzdGF0aWMgaW50IGVsM19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgd29ya2xpbWl0KQogewotCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlzaG9ydCByeF9zdGF0dXM7CiAJCkBAIC0xMDQzLDE0ICsxMDM4LDE0IEBACiAJCSAgICgtLXdvcmtsaW1pdCA+PSAwKSkgewogCQlpZiAocnhfc3RhdHVzICYgMHg0MDAwKSB7IC8qIEVycm9yLCB1cGRhdGUgc3RhdHMuICovCiAJCQlzaG9ydCBlcnJvciA9IHJ4X3N0YXR1cyAmIDB4MzgwMDsKLQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQlzd2l0Y2ggKGVycm9yKSB7Ci0JCQljYXNlIDB4MDAwMDoJbHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7IGJyZWFrOwotCQkJY2FzZSAweDA4MDA6CWxwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7IGJyZWFrOwotCQkJY2FzZSAweDEwMDA6CWxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsgYnJlYWs7Ci0JCQljYXNlIDB4MTgwMDoJbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsgYnJlYWs7Ci0JCQljYXNlIDB4MjAwMDoJbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOyBicmVhazsKLQkJCWNhc2UgMHgyODAwOglscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOyBicmVhazsKKwkJCWNhc2UgMHgwMDAwOglkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7IGJyZWFrOworCQkJY2FzZSAweDA4MDA6CWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOyBicmVhazsKKwkJCWNhc2UgMHgxMDAwOglkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOyBicmVhazsKKwkJCWNhc2UgMHgxODAwOglkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsgYnJlYWs7CisJCQljYXNlIDB4MjAwMDoJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsgYnJlYWs7CisJCQljYXNlIDB4MjgwMDoJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7IGJyZWFrOwogCQkJfQogCQl9IGVsc2UgewogCQkJc2hvcnQgcGt0X2xlbiA9IHJ4X3N0YXR1cyAmIDB4N2ZmOwpAQCAtMTA2NywxMiArMTA2MiwxMiBAQAogCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQkJbmV0aWZfcngoc2tiKTsKIAkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQkJCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQkJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisJCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCQkJfSBlbHNlIHsKIAkJCQlERUJVRygxLCAiJXM6IGNvdWxkbid0IGFsbG9jYXRlIGEgc2tfYnVmZiBvZiIKIAkJCQkJICAiIHNpemUgJWQuXG4iLCBkZXYtPm5hbWUsIHBrdF9sZW4pOwotCQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQl9CiAJCX0KIAkJdGM1NzRfd2FpdF9mb3JfY29tcGxldGlvbihkZXYsIFJ4RGlzY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDFiMWFiYjEuLjU0OWE2NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCkBAIC0xMDcsNyArMTA3LDYgQEAKIHN0cnVjdCBlbDNfcHJpdmF0ZSB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3QgCQlub2RlOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgIC8qIEZvciB0cmFuc2NlaXZlciBtb25pdG9yaW5nICovCiAgICAgc3RydWN0IHRpbWVyX2xpc3QJbWVkaWE7CiAgICAgdTE2CQkJbWVkaWFfc3RhdHVzOwpAQCAtNTY2LDEyICs1NjUsMTEgQEAKIAogc3RhdGljIHZvaWQgZWwzX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgCiAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCFcbiIsIGRldi0+bmFtZSk7CiAgICAgZHVtcF9zdGF0dXMoZGV2KTsKLSAgICBscC0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKICAgICAvKiBJc3N1ZSBUWF9SRVNFVCBhbmQgVFhfU1RBUlQgY29tbWFuZHMuICovCiAgICAgdGM1ODlfd2FpdF9mb3JfY29tcGxldGlvbihkZXYsIFR4UmVzZXQpOwpAQCAtNTgxLDcgKzU3OSw2IEBACiAKIHN0YXRpYyB2b2lkIHBvcF90eF9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IGk7CiAgICAgCkBAIC01OTYsNyArNTkzLDcgQEAKIAkgICAgREVCVUcoMSwgIiVzOiB0cmFuc21pdCBlcnJvcjogc3RhdHVzIDB4JTAyeFxuIiwKIAkJICBkZXYtPm5hbWUsIHR4X3N0YXR1cyk7CiAJICAgIG91dHcoVHhFbmFibGUsIGlvYWRkciArIEVMM19DTUQpOwotCSAgICBscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCX0KIAlvdXRiKDB4MDAsIGlvYWRkciArIFRYX1NUQVRVUyk7IC8qIFBvcCB0aGUgc3RhdHVzIHN0YWNrLiAqLwogICAgIH0KQEAgLTYxNCw3ICs2MTEsNyBAQAogCiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgICAgCiAKLSAgICBwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKyAgICBkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAgICAgLyogUHV0IG91dCB0aGUgZG91Ymxld29yZCBoZWFkZXIuLi4gKi8KICAgICBvdXR3KHNrYi0+bGVuLCBpb2FkZHIgKyBUWF9GSUZPKTsKQEAgLTc2NCw3ICs3NjEsNyBAQAogCW91dHcoU3RhdHNEaXNhYmxlLCBpb2FkZHIgKyBFTDNfQ01EKTsKIAllcnJzID0gaW5iKGlvYWRkciArIDApOwogCW91dHcoU3RhdHNFbmFibGUsIGlvYWRkciArIEVMM19DTUQpOwotCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBlcnJzOworCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gZXJyczsKIAlpZiAoZXJycyB8fCAobHAtPm1lZGlhX3N0YXR1cyAmIDB4MDAxMCkpIG1lZGlhIHw9IDB4MDAxMDsKICAgICB9CiAKQEAgLTgxNCw3ICs4MTEsNyBAQAogCXVwZGF0ZV9zdGF0cyhkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAgICAgfQotICAgIHJldHVybiAmbHAtPnN0YXRzOworICAgIHJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogLyoKQEAgLTgyNyw3ICs4MjQsNiBAQAogKi8KIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAogICAgIERFQlVHKDIsICIlczogdXBkYXRpbmcgdGhlIHN0YXRpc3RpY3MuXG4iLCBkZXYtPm5hbWUpOwpAQCAtODM1LDEzICs4MzEsMTMgQEAKICAgICBvdXR3KFN0YXRzRGlzYWJsZSwgaW9hZGRyICsgRUwzX0NNRCk7CiAgICAgLyogU3dpdGNoIHRvIHRoZSBzdGF0cyB3aW5kb3csIGFuZCByZWFkIGV2ZXJ5dGhpbmcuICovCiAgICAgRUwzV0lORE9XKDYpOwotICAgIGxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyAJKz0gaW5iKGlvYWRkciArIDApOwotICAgIGxwLT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzCSs9IGluYihpb2FkZHIgKyAxKTsKKyAgICBkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzIAkrPSBpbmIoaW9hZGRyICsgMCk7CisgICAgZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzCSs9IGluYihpb2FkZHIgKyAxKTsKICAgICAvKiBNdWx0aXBsZSBjb2xsaXNpb25zLiAqLwkgICAJaW5iKGlvYWRkciArIDIpOwotICAgIGxwLT5zdGF0cy5jb2xsaXNpb25zCQkrPSBpbmIoaW9hZGRyICsgMyk7Ci0gICAgbHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMJCSs9IGluYihpb2FkZHIgKyA0KTsKLSAgICBscC0+c3RhdHMucnhfZmlmb19lcnJvcnMJCSs9IGluYihpb2FkZHIgKyA1KTsKLSAgICBscC0+c3RhdHMudHhfcGFja2V0cwkJKz0gaW5iKGlvYWRkciArIDYpOworICAgIGRldi0+c3RhdHMuY29sbGlzaW9ucwkJKz0gaW5iKGlvYWRkciArIDMpOworICAgIGRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycwkJKz0gaW5iKGlvYWRkciArIDQpOworICAgIGRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMJCSs9IGluYihpb2FkZHIgKyA1KTsKKyAgICBkZXYtPnN0YXRzLnR4X3BhY2tldHMJCSs9IGluYihpb2FkZHIgKyA2KTsKICAgICAvKiBSeCBwYWNrZXRzICAgKi8JCQlpbmIoaW9hZGRyICsgNyk7CiAgICAgLyogVHggZGVmZXJyYWxzICovCQkJaW5iKGlvYWRkciArIDgpOwogICAgIC8qIFJ4IG9jdGV0cyAqLwkJCWludyhpb2FkZHIgKyAxMCk7CkBAIC04NTQsNyArODUwLDYgQEAKIAogc3RhdGljIGludCBlbDNfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IHdvcmtsaW1pdCA9IDMyOwogICAgIHNob3J0IHJ4X3N0YXR1czsKQEAgLTg2NSwxNCArODYwLDE0IEBACiAJICAgKC0td29ya2xpbWl0ID49IDApKSB7CiAJaWYgKHJ4X3N0YXR1cyAmIDB4NDAwMCkgeyAvKiBFcnJvciwgdXBkYXRlIHN0YXRzLiAqLwogCSAgICBzaG9ydCBlcnJvciA9IHJ4X3N0YXR1cyAmIDB4MzgwMDsKLQkgICAgbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCSAgICBzd2l0Y2ggKGVycm9yKSB7Ci0JICAgIGNhc2UgMHgwMDAwOglscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsgYnJlYWs7Ci0JICAgIGNhc2UgMHgwODAwOglscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOyBicmVhazsKLQkgICAgY2FzZSAweDEwMDA6CWxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsgYnJlYWs7Ci0JICAgIGNhc2UgMHgxODAwOglscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOyBicmVhazsKLQkgICAgY2FzZSAweDIwMDA6CWxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsgYnJlYWs7Ci0JICAgIGNhc2UgMHgyODAwOglscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOyBicmVhazsKKwkgICAgY2FzZSAweDAwMDA6CWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsgYnJlYWs7CisJICAgIGNhc2UgMHgwODAwOglkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsgYnJlYWs7CisJICAgIGNhc2UgMHgxMDAwOglkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOyBicmVhazsKKwkgICAgY2FzZSAweDE4MDA6CWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOyBicmVhazsKKwkgICAgY2FzZSAweDIwMDA6CWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7IGJyZWFrOworCSAgICBjYXNlIDB4MjgwMDoJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7IGJyZWFrOwogCSAgICB9CiAJfSBlbHNlIHsKIAkgICAgc2hvcnQgcGt0X2xlbiA9IHJ4X3N0YXR1cyAmIDB4N2ZmOwpAQCAtODg5LDEyICs4ODQsMTIgQEAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJbmV0aWZfcngoc2tiKTsKIAkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJICAgIH0gZWxzZSB7CiAJCURFQlVHKDEsICIlczogY291bGRuJ3QgYWxsb2NhdGUgYSBza19idWZmIG9mIgogCQkgICAgICAiIHNpemUgJWQuXG4iLCBkZXYtPm5hbWUsIHBrdF9sZW4pOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkgICAgfQogCX0KIAkvKiBQb3AgdGhlIHRvcCBvZiB0aGUgUnggRklGTyAqLwpAQCAtOTI5LDcgKzkyNCw3IEBACiAgICAgREVCVUcoMSwgIiVzOiBzaHV0dGluZyBkb3duIGV0aGVyY2FyZC5cbiIsIGRldi0+bmFtZSk7CiAKICAgICBpZiAocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7Ci0JLyogVHVybiBvZmYgc3RhdGlzdGljcyBBU0FQLiAgV2UgdXBkYXRlIGxwLT5zdGF0cyBiZWxvdy4gKi8KKwkvKiBUdXJuIG9mZiBzdGF0aXN0aWNzIEFTQVAuICBXZSB1cGRhdGUgZGV2LT5zdGF0cyBiZWxvdy4gKi8KIAlvdXR3KFN0YXRzRGlzYWJsZSwgaW9hZGRyICsgRUwzX0NNRCk7CiAJCiAJLyogRGlzYWJsZSB0aGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCA3MGQwMTJlLi4zZjY4MmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtMTAyMyw3ICsxMDIzLDcgQEAKIAlpbnQgdHhzciwgaXNyLCB0aWNrc3NvZmFyID0gamlmZmllcyAtIGRldi0+dHJhbnNfc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWVpX2xvY2FsLT5zdGF0LnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwogCXR4c3IgPSBpbmIoZTgzOTBfYmFzZStFTjBfVFNSKTsKQEAgLTEwMzQsNyArMTAzNCw3IEBACiAJCWRldi0+bmFtZSwgKHR4c3IgJiBFTlRTUl9BQlQpID8gImV4Y2VzcyBjb2xsaXNpb25zLiIgOgogCQkoaXNyKSA/ICJsb3N0IGludGVycnVwdD8iIDogImNhYmxlIHByb2JsZW0/IiwgdHhzciwgaXNyLCB0aWNrc3NvZmFyKTsKIAotCWlmICghaXNyICYmICFlaV9sb2NhbC0+c3RhdC50eF9wYWNrZXRzKSAKKwlpZiAoIWlzciAmJiAhZGV2LT5zdGF0cy50eF9wYWNrZXRzKSAKIAl7CiAJCS8qIFRoZSA4MzkwIHByb2JhYmx5IGhhc24ndCBnb3R0ZW4gb24gdGhlIGNhYmxlIHlldC4gKi8KIAkJZWlfbG9jYWwtPmludGVyZmFjZV9udW0gXj0gMTsgICAvKiBUcnkgYSBkaWZmZXJlbnQgeGN2ci4gICovCkBAIC0xMTI0LDcgKzExMjQsNyBAQAogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCW91dGJfcChFTklTUl9BTEwsIGU4MzkwX2Jhc2UgKyBFTjBfSU1SKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwotCQllaV9sb2NhbC0+c3RhdC50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xMTcyLDcgKzExNzIsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAogCWRldl9rZnJlZV9za2IgKHNrYik7Ci0JZWlfbG9jYWwtPnN0YXQudHhfYnl0ZXMgKz0gc2VuZF9sZW5ndGg7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBzZW5kX2xlbmd0aDsKICAgICAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNjQsOSArMTI2NCw5IEBACiAKIAkJaWYgKGludGVycnVwdHMgJiBFTklTUl9DT1VOVEVSUykgCiAJCXsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2ZyYW1lX2Vycm9ycyArPSBpbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIwKTsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2NyY19lcnJvcnMgICArPSBpbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIxKTsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X21pc3NlZF9lcnJvcnMrPSBpbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIyKTsKKwkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGluYl9wKGU4MzkwX2Jhc2UgKyBFTjBfQ09VTlRFUjApOworCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzICAgKz0gaW5iX3AoZTgzOTBfYmFzZSArIEVOMF9DT1VOVEVSMSk7CisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrPSBpbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIyKTsKIAkJfQogCX0KICAgICAKQEAgLTEzMTEsNyArMTMxMSw2IEBACiBzdGF0aWMgdm9pZCBlaV90eF9lcnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgY2hhciB0eHNyID0gaW5iX3AoZTgzOTBfYmFzZStFTjBfVFNSKTsKIAl1bnNpZ25lZCBjaGFyIHR4X3dhc19hYm9ydGVkID0gdHhzciAmIChFTlRTUl9BQlQrRU5UU1JfRlUpOwogCkBAIC0xMzM0LDEwICsxMzMzLDEwIEBACiAJCWVpX3R4X2ludHIoZGV2KTsKIAllbHNlIAogCXsKLQkJZWlfbG9jYWwtPnN0YXQudHhfZXJyb3JzKys7Ci0JCWlmICh0eHNyICYgRU5UU1JfQ1JTKSBlaV9sb2NhbC0+c3RhdC50eF9jYXJyaWVyX2Vycm9ycysrOwotCQlpZiAodHhzciAmIEVOVFNSX0NESCkgZWlfbG9jYWwtPnN0YXQudHhfaGVhcnRiZWF0X2Vycm9ycysrOwotCQlpZiAodHhzciAmIEVOVFNSX09XQykgZWlfbG9jYWwtPnN0YXQudHhfd2luZG93X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlpZiAodHhzciAmIEVOVFNSX0NSUykgZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlpZiAodHhzciAmIEVOVFNSX0NESCkgZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCWlmICh0eHNyICYgRU5UU1JfT1dDKSBkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAl9CiB9CiAKQEAgLTEzOTksMjUgKzEzOTgsMjUgQEAKIAogCS8qIE1pbmltaXplIFR4IGxhdGVuY3k6IHVwZGF0ZSB0aGUgc3RhdGlzdGljcyBhZnRlciB3ZSByZXN0YXJ0IFRYaW5nLiAqLwogCWlmIChzdGF0dXMgJiBFTlRTUl9DT0wpCi0JCWVpX2xvY2FsLT5zdGF0LmNvbGxpc2lvbnMrKzsKKwkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7CiAJaWYgKHN0YXR1cyAmIEVOVFNSX1BUWCkKLQkJZWlfbG9jYWwtPnN0YXQudHhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAllbHNlIAogCXsKLQkJZWlfbG9jYWwtPnN0YXQudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWlmIChzdGF0dXMgJiBFTlRTUl9BQlQpIAogCQl7Ci0JCQllaV9sb2NhbC0+c3RhdC50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkJZWlfbG9jYWwtPnN0YXQuY29sbGlzaW9ucyArPSAxNjsKKwkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAxNjsKIAkJfQogCQlpZiAoc3RhdHVzICYgRU5UU1JfQ1JTKSAKLQkJCWVpX2xvY2FsLT5zdGF0LnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCWlmIChzdGF0dXMgJiBFTlRTUl9GVSkgCi0JCQllaV9sb2NhbC0+c3RhdC50eF9maWZvX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgRU5UU1JfQ0RIKQotCQkJZWlfbG9jYWwtPnN0YXQudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7CiAJCWlmIChzdGF0dXMgJiBFTlRTUl9PV0MpCi0JCQllaV9sb2NhbC0+c3RhdC50eF93aW5kb3dfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAl9CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQpAQCAtMTQ3OCw4ICsxNDc3LDggQEAKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJvZ3VzIHBhY2tldCBzaXplOiAlZCwgc3RhdHVzPSUjMnggbnhwZz0lIzJ4LlxuIiwKIAkJCQkJICAgZGV2LT5uYW1lLCByeF9mcmFtZS5jb3VudCwgcnhfZnJhbWUuc3RhdHVzLAogCQkJCQkgICByeF9mcmFtZS5uZXh0KTsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2Vycm9ycysrOwotCQkJZWlfbG9jYWwtPnN0YXQucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQl9CiAJCSBlbHNlIGlmICgocGt0X3N0YXQgJiAweDBGKSA9PSBFTlJTUl9SWE9LKSAKIAkJewpAQCAtMTQ5MSw3ICsxNDkwLDcgQEAKIAkJCQlpZiAoZWlfZGVidWcgPiAxKQogCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvdWxkbid0IGFsbG9jYXRlIGEgc2tfYnVmZiBvZiBzaXplICVkLlxuIiwKIAkJCQkJCSAgIGRldi0+bmFtZSwgcGt0X2xlbik7Ci0JCQkJZWlfbG9jYWwtPnN0YXQucnhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCWJyZWFrOwogCQkJfQogCQkJZWxzZQpAQCAtMTUwMiwxMCArMTUwMSwxMCBAQAogCQkJCXNrYi0+cHJvdG9jb2w9ZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7CiAJCQkJbmV0aWZfcngoc2tiKTsKIAkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQkJCWVpX2xvY2FsLT5zdGF0LnJ4X3BhY2tldHMrKzsKLQkJCQllaV9sb2NhbC0+c3RhdC5yeF9ieXRlcyArPSBwa3RfbGVuOworCQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAkJCQlpZiAocGt0X3N0YXQgJiBFTlJTUl9QSFkpCi0JCQkJCWVpX2xvY2FsLT5zdGF0Lm11bHRpY2FzdCsrOworCQkJCQlkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCQkJfQogCQl9IAogCQllbHNlIApAQCAtMTUxNCwxMCArMTUxMywxMCBAQAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYm9ndXMgcGFja2V0OiBzdGF0dXM9JSMyeCBueHBnPSUjMnggc2l6ZT0lZFxuIiwKIAkJCQkJICAgZGV2LT5uYW1lLCByeF9mcmFtZS5zdGF0dXMsIHJ4X2ZyYW1lLm5leHQsCiAJCQkJCSAgIHJ4X2ZyYW1lLmNvdW50KTsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCS8qIE5COiBUaGUgTklDIGNvdW50cyBDUkMsIGZyYW1lIGFuZCBtaXNzZWQgZXJyb3JzLiAqLwogCQkJaWYgKHBrdF9zdGF0ICYgRU5SU1JfRk8pCi0JCQkJZWlfbG9jYWwtPnN0YXQucnhfZmlmb19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCX0KIAkJbmV4dF9mcmFtZSA9IHJ4X2ZyYW1lLm5leHQ7CiAJCQpAQCAtMTU1Miw3ICsxNTUxLDYgQEAKIAlheG5ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKIAlsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKIAl1bnNpZ25lZCBjaGFyIHdhc190eGluZywgbXVzdF9yZXNlbmQgPSAwOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKICAgICAKIAkvKgogCSAqIFJlY29yZCB3aGV0aGVyIGEgVHggd2FzIGluIHByb2dyZXNzIGFuZCB0aGVuIGlzc3VlIHRoZQpAQCAtMTU2Myw3ICsxNTYxLDcgQEAKICAgICAKIAlpZiAoZWlfZGVidWcgPiAxKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmVyIG92ZXJydW4uXG4iLCBkZXYtPm5hbWUpOwotCWVpX2xvY2FsLT5zdGF0LnJ4X292ZXJfZXJyb3JzKys7CisJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogICAgIAogCS8qIAogCSAqIFdhaXQgYSBmdWxsIFR4IHRpbWUgKDEuMm1zKSArIHNvbWUgZ3VhcmQgdGltZSwgTlMgc2F5cyAxLjZtcyB0b3RhbC4KQEAgLTE2MjQsMTYgKzE2MjIsMTYgQEAKICAgICAKIAkvKiBJZiB0aGUgY2FyZCBpcyBzdG9wcGVkLCBqdXN0IHJldHVybiB0aGUgcHJlc2VudCBzdGF0cy4gKi8KIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuICZlaV9sb2NhbC0+c3RhdDsKKwkJcmV0dXJuICZkZXYtPnN0YXRzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssZmxhZ3MpOwogCS8qIFJlYWQgdGhlIGNvdW50ZXIgcmVnaXN0ZXJzLCBhc3N1bWluZyB3ZSBhcmUgaW4gcGFnZSAwLiAqLwotCWVpX2xvY2FsLT5zdGF0LnJ4X2ZyYW1lX2Vycm9ycyArPSBpbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjApOwotCWVpX2xvY2FsLT5zdGF0LnJ4X2NyY19lcnJvcnMgICArPSBpbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjEpOwotCWVpX2xvY2FsLT5zdGF0LnJ4X21pc3NlZF9lcnJvcnMrPSBpbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjIpOworCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGluYl9wKGlvYWRkciArIEVOMF9DT1VOVEVSMCk7CisJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzICAgKz0gaW5iX3AoaW9hZGRyICsgRU4wX0NPVU5URVIxKTsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrPSBpbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKICAgICAKLQlyZXR1cm4gJmVpX2xvY2FsLT5zdGF0OworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCAxYzg5Yjk3Li5jYThjMGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0xOTczLDcgKzE5NzMsNyBAQAogICAgICAgZXJyX2ZyZWVfcmluZzoKIAlwY25ldDMyX2ZyZWVfcmluZyhkZXYpOwogICAgICAgZXJyX2ZyZWVfY29uc2lzdGVudDoKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wY2lfZGV2LCBzaXplb2YoKmxwLT5pbml0X2Jsb2NrKSwgCisJcGNpX2ZyZWVfY29uc2lzdGVudChscC0+cGNpX2Rldiwgc2l6ZW9mKCpscC0+aW5pdF9ibG9jayksCiAJCQkgICAgbHAtPmluaXRfYmxvY2ssIGxwLT5pbml0X2RtYV9hZGRyKTsKICAgICAgIGVycl9mcmVlX25ldGRldjoKIAlmcmVlX25ldGRldihkZXYpOwpAQCAtMjk1Myw3ICsyOTUzLDcgQEAKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJcGNuZXQzMl9mcmVlX3JpbmcoZGV2KTsKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIFBDTkVUMzJfVE9UQUxfU0laRSk7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIHNpemVvZigqbHAtPmluaXRfYmxvY2spLCAKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChscC0+cGNpX2Rldiwgc2l6ZW9mKCpscC0+aW5pdF9ibG9jayksCiAJCQkJICAgIGxwLT5pbml0X2Jsb2NrLCBscC0+aW5pdF9kbWFfYWRkcik7CiAJCWZyZWVfbmV0ZGV2KGRldik7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKQEAgLTMwMzYsNyArMzAzNiw3IEBACiAJCXVucmVnaXN0ZXJfbmV0ZGV2KHBjbmV0MzJfZGV2KTsKIAkJcGNuZXQzMl9mcmVlX3JpbmcocGNuZXQzMl9kZXYpOwogCQlyZWxlYXNlX3JlZ2lvbihwY25ldDMyX2Rldi0+YmFzZV9hZGRyLCBQQ05FVDMyX1RPVEFMX1NJWkUpOwotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wY2lfZGV2LCBzaXplb2YoKmxwLT5pbml0X2Jsb2NrKSwgCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIHNpemVvZigqbHAtPmluaXRfYmxvY2spLAogCQkJCSAgICBscC0+aW5pdF9ibG9jaywgbHAtPmluaXRfZG1hX2FkZHIpOwogCQlmcmVlX25ldGRldihwY25ldDMyX2Rldik7CiAJCXBjbmV0MzJfZGV2ID0gbmV4dF9kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IDZlYjJkMzEuLmQ1NTkzMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC01Myw3ICs1Myw4IEBACiBjb25maWcgQlJPQURDT01fUEhZCiAJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIEJyb2FkY29tIFBIWXMiCiAJLS0taGVscC0tLQotCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSBCQ001NDExLCBCQ001NDIxIGFuZCBCQ001NDYxIFBIWXMuCisJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIEJDTTU0MTEsIEJDTTU0MjEsIEJDTTU0NjEsIEJDTTU0NjQsIEJDTTU0ODEKKwkgIGFuZCBCQ001NDgyIFBIWXMuCiAKIGNvbmZpZyBJQ1BMVVNfUEhZCiAJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIElDUGx1cyBQSFlzIgpAQCAtODMsNCArODQsMTAgQEAKIAogCSAgSWYgaW4gZG91YnQsIHNheSBOLgogCitjb25maWcgTURJT19PRl9HUElPCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEdQSU8gbGliLWJhc2VkIGJpdGJhbmdlZCBNRElPIGJ1c2VzIgorCWRlcGVuZHMgb24gTURJT19CSVRCQU5HICYmIE9GX0dQSU8KKwktLS1oZWxwLS0tCisJICBTdXBwb3J0cyBHUElPIGxpYi1iYXNlZCBNRElPIGJ1c3Nlcy4KKwogZW5kaWYgIyBQSFlMSUIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQppbmRleCA1OTk3ZDZlLi5lZWUzMjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCkBAIC0xNSwzICsxNSw0IEBACiBvYmotJChDT05GSUdfUkVBTFRFS19QSFkpCSs9IHJlYWx0ZWsubwogb2JqLSQoQ09ORklHX0ZJWEVEX1BIWSkJCSs9IGZpeGVkLm8KIG9iai0kKENPTkZJR19NRElPX0JJVEJBTkcpCSs9IG1kaW8tYml0YmFuZy5vCitvYmotJChDT05GSUdfTURJT19PRl9HUElPKQkrPSBtZGlvLW9mZ3Bpby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYyBiL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCmluZGV4IDYwYzVjZmUuLjRiNGRjOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCkBAIC0yNCw2ICsyNCwxMiBAQAogI2RlZmluZSBNSUlfQkNNNTRYWF9FU1IJCTB4MTEJLyogQkNNNTR4eCBleHRlbmRlZCBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJX0JDTTU0WFhfRVNSX0lTCTB4MTAwMAkvKiBJbnRlcnJ1cHQgc3RhdHVzICovCiAKKyNkZWZpbmUgTUlJX0JDTTU0WFhfRVhQX0RBVEEJMHgxNQkvKiBFeHBhbnNpb24gcmVnaXN0ZXIgZGF0YSAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9FWFBfU0VMCTB4MTcJLyogRXhwYW5zaW9uIHJlZ2lzdGVyIHNlbGVjdCAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9FWFBfU0VMX1NTRAkweDBlMDAJLyogU2Vjb25kYXJ5IFNlckRlcyBzZWxlY3QgKi8KKyNkZWZpbmUgTUlJX0JDTTU0WFhfRVhQX1NFTF9FUgkweDBmMDAJLyogRXhwYW5zaW9uIHJlZ2lzdGVyIHNlbGVjdCAqLworCisjZGVmaW5lIE1JSV9CQ001NFhYX0FVWF9DVEwJMHgxOAkvKiBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlciAqLwogI2RlZmluZSBNSUlfQkNNNTRYWF9JU1IJCTB4MWEJLyogQkNNNTR4eCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9CQ001NFhYX0lNUgkJMHgxYgkvKiBCQ001NHh4IGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9CQ001NFhYX0lOVF9DUkNFUlIJMHgwMDAxCS8qIENSQyBlcnJvciAqLwpAQCAtNDIsMTAgKzQ4LDEyMCBAQAogI2RlZmluZSBNSUlfQkNNNTRYWF9JTlRfTURJWAkweDIwMDAJLyogTURJWCBzdGF0dXMgY2hhbmdlICovCiAjZGVmaW5lIE1JSV9CQ001NFhYX0lOVF9QU0VSUgkweDQwMDAJLyogUGFpciBzd2FwIGVycm9yICovCiAKKyNkZWZpbmUgTUlJX0JDTTU0WFhfU0hECQkweDFjCS8qIDB4MWMgc2hhZG93IHJlZ2lzdGVycyAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9TSERfV1JJVEUJMHg4MDAwCisjZGVmaW5lIE1JSV9CQ001NFhYX1NIRF9WQUwoeCkJKCh4ICYgMHgxZikgPDwgMTApCisjZGVmaW5lIE1JSV9CQ001NFhYX1NIRF9EQVRBKHgpCSgoeCAmIDB4M2ZmKSA8PCAwKQorCisvKgorICogQnJvYWRjb20gTEVEIHNvdXJjZSBlbmNvZGluZ3MuICBUaGVzZSBhcmUgdXNlZCBpbiBCQ001NDYxLCBCQ001NDgxLAorICogQkNNNTQ4MiwgYW5kIHBvc3NpYmx5IHNvbWUgb3RoZXJzLgorICovCisjZGVmaW5lIEJDTV9MRURfU1JDX0xJTktTUEQxCTB4MAorI2RlZmluZSBCQ01fTEVEX1NSQ19MSU5LU1BEMgkweDEKKyNkZWZpbmUgQkNNX0xFRF9TUkNfWE1JVExFRAkweDIKKyNkZWZpbmUgQkNNX0xFRF9TUkNfQUNUSVZJVFlMRUQJMHgzCisjZGVmaW5lIEJDTV9MRURfU1JDX0ZEWExFRAkweDQKKyNkZWZpbmUgQkNNX0xFRF9TUkNfU0xBVkUJMHg1CisjZGVmaW5lIEJDTV9MRURfU1JDX0lOVFIJMHg2CisjZGVmaW5lIEJDTV9MRURfU1JDX1FVQUxJVFkJMHg3CisjZGVmaW5lIEJDTV9MRURfU1JDX1JDVkxFRAkweDgKKyNkZWZpbmUgQkNNX0xFRF9TUkNfTVVMVElDT0xPUjEJMHhhCisjZGVmaW5lIEJDTV9MRURfU1JDX09QRU5TSE9SVAkweGIKKyNkZWZpbmUgQkNNX0xFRF9TUkNfT0ZGCQkweGUJLyogVGllZCBoaWdoICovCisjZGVmaW5lIEJDTV9MRURfU1JDX09OCQkweGYJLyogVGllZCBsb3cgKi8KKworLyoKKyAqIEJDTTU0ODI6IFNoYWRvdyByZWdpc3RlcnMKKyAqIFNoYWRvdyB2YWx1ZXMgZ28gaW50byBiaXRzIFsxNDoxMF0gb2YgcmVnaXN0ZXIgMHgxYyB0byBzZWxlY3QgYSBzaGFkb3cKKyAqIHJlZ2lzdGVyIHRvIGFjY2Vzcy4KKyAqLworI2RlZmluZSBCQ001NDgyX1NIRF9MRURTMQkweDBkCS8qIDAxMTAxOiBMRUQgU2VsZWN0b3IgMSAqLworCQkJCQkvKiBMRUQzIC8gfkxJTktTUERbMl0gc2VsZWN0b3IgKi8KKyNkZWZpbmUgQkNNNTQ4Ml9TSERfTEVEUzFfTEVEMyhzcmMpCSgoc3JjICYgMHhmKSA8PCA0KQorCQkJCQkvKiBMRUQxIC8gfkxJTktTUERbMV0gc2VsZWN0b3IgKi8KKyNkZWZpbmUgQkNNNTQ4Ml9TSERfTEVEUzFfTEVEMShzcmMpCSgoc3JjICYgMHhmKSA8PCAwKQorI2RlZmluZSBCQ001NDgyX1NIRF9TU0QJCTB4MTQJLyogMTAxMDA6IFNlY29uZGFyeSBTZXJEZXMgY29udHJvbCAqLworI2RlZmluZSBCQ001NDgyX1NIRF9TU0RfTEVETQkweDAwMDgJLyogU1NEIExFRCBNb2RlIGVuYWJsZSAqLworI2RlZmluZSBCQ001NDgyX1NIRF9TU0RfRU4JMHgwMDAxCS8qIFNTRCBlbmFibGUgKi8KKyNkZWZpbmUgQkNNNTQ4Ml9TSERfTU9ERQkweDFmCS8qIDExMTExOiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkNNNTQ4Ml9TSERfTU9ERV8xMDAwQlgJMHgwMDAxCS8qIEVuYWJsZSAxMDAwQkFTRS1YIHJlZ2lzdGVycyAqLworCisvKgorICogQkNNNTQ4MjogU2Vjb25kYXJ5IFNlckRlcyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBCQ001NDgyX1NTRF8xMDAwQlhfQ1RMCQkweDAwCS8qIDEwMDBCQVNFLVggQ29udHJvbCAqLworI2RlZmluZSBCQ001NDgyX1NTRF8xMDAwQlhfQ1RMX1BXUkRPV04JMHgwODAwCS8qIFBvd2VyLWRvd24gU1NEICovCisjZGVmaW5lIEJDTTU0ODJfU1NEX1NHTUlJX1NMQVZFCQkweDE1CS8qIFNHTUlJIFNsYXZlIFJlZ2lzdGVyICovCisjZGVmaW5lIEJDTTU0ODJfU1NEX1NHTUlJX1NMQVZFX0VOCTB4MDAwMgkvKiBTbGF2ZSBtb2RlIGVuYWJsZSAqLworI2RlZmluZSBCQ001NDgyX1NTRF9TR01JSV9TTEFWRV9BRAkweDAwMDEJLyogU2xhdmUgYXV0by1kZXRlY3Rpb24gKi8KKworLyoKKyAqIERldmljZSBmbGFncyBmb3IgUEhZcyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIGZvciBkaWZmZXJlbnQgb3BlcmF0aW5nCisgKiBtb2Rlcy4KKyAqLworI2RlZmluZSBQSFlfQkNNX0ZMQUdTX1ZBTElECQkweDgwMDAwMDAwCisjZGVmaW5lIFBIWV9CQ01fRkxBR1NfSU5URl9YQVVJCQkweDAwMDAwMDIwCisjZGVmaW5lIFBIWV9CQ01fRkxBR1NfSU5URl9TR01JSQkweDAwMDAwMDEwCisjZGVmaW5lIFBIWV9CQ01fRkxBR1NfTU9ERV8xMDAwQlgJMHgwMDAwMDAwMgorI2RlZmluZSBQSFlfQkNNX0ZMQUdTX01PREVfQ09QUEVSCTB4MDAwMDAwMDEKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9hZGNvbSBQSFkgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYWNpZWogVy4gUm96eWNraSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisvKgorICogSW5kaXJlY3QgcmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgdGhlIDEwMDBCQVNFLVQvMTAwQkFTRS1UWC8xMEJBU0UtVAorICogMHgxYyBzaGFkb3cgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgaW50IGJjbTU0eHhfc2hhZG93X3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHNoYWRvdykKK3sKKwlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQkNNNTRYWF9TSEQsIE1JSV9CQ001NFhYX1NIRF9WQUwoc2hhZG93KSk7CisJcmV0dXJuIE1JSV9CQ001NFhYX1NIRF9EQVRBKHBoeV9yZWFkKHBoeWRldiwgTUlJX0JDTTU0WFhfU0hEKSk7Cit9CisKK3N0YXRpYyBpbnQgYmNtNTR4eF9zaGFkb3dfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHNoYWRvdywgdTE2IHZhbCkKK3sKKwlyZXR1cm4gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JDTTU0WFhfU0hELAorCQkJIE1JSV9CQ001NFhYX1NIRF9XUklURSB8CisJCQkgTUlJX0JDTTU0WFhfU0hEX1ZBTChzaGFkb3cpIHwKKwkJCSBNSUlfQkNNNTRYWF9TSERfREFUQSh2YWwpKTsKK30KKworLyoKKyAqIEluZGlyZWN0IHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgZm9yIHRoZSBFeHBhbnNpb24gUmVnaXN0ZXJzCisgKiBhbmQgU2Vjb25kYXJ5IFNlckRlcyByZWdpc3RlcnMgKHdoZW4gc2VjX3NlcmRlcz0xKS4KKyAqLworc3RhdGljIGludCBiY201NHh4X2V4cF9yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCisJCQkgICAgaW50IHNlY19zZXJkZXMsIHU4IHJlZ251bSkKK3sKKwlpbnQgdmFsOworCisJcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JDTTU0WFhfRVhQX1NFTCwKKwkJICAoc2VjX3NlcmRlcyA/IE1JSV9CQ001NFhYX0VYUF9TRUxfU1NEIDoKKwkJCQlNSUlfQkNNNTRYWF9FWFBfU0VMX0VSKSB8CisJCSAgcmVnbnVtKTsKKwl2YWwgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CQ001NFhYX0VYUF9EQVRBKTsKKwlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQkNNNTRYWF9FWFBfU0VMLCByZWdudW0pOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBiY201NHh4X2V4cF93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAorCQkJICAgICBpbnQgc2VjX3NlcmRlcywgdTggcmVnbnVtLCB1MTYgdmFsKQoreworCWludCByZXQ7CisKKwlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQkNNNTRYWF9FWFBfU0VMLAorCQkgIChzZWNfc2VyZGVzID8gTUlJX0JDTTU0WFhfRVhQX1NFTF9TU0QgOgorCQkJCU1JSV9CQ001NFhYX0VYUF9TRUxfRVIpIHwKKwkJICByZWdudW0pOworCXJldCA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CQ001NFhYX0VYUF9EQVRBLCB2YWwpOworCXBoeV93cml0ZShwaHlkZXYsIE1JSV9CQ001NFhYX0VYUF9TRUwsIHJlZ251bSk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGJjbTU0eHhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlpbnQgcmVnLCBlcnI7CkBAIC03MCw2ICsxODYsODcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBiY201NDgyX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IGVyciwgcmVnOworCisJZXJyID0gYmNtNTR4eF9jb25maWdfaW5pdChwaHlkZXYpOworCisJaWYgKHBoeWRldi0+ZGV2X2ZsYWdzICYgUEhZX0JDTV9GTEFHU19NT0RFXzEwMDBCWCkgeworCQkvKgorCQkgKiBFbmFibGUgc2Vjb25kYXJ5IFNlckRlcyBhbmQgaXRzIHVzZSBhcyBhbiBMRUQgc291cmNlCisJCSAqLworCQlyZWcgPSBiY201NHh4X3NoYWRvd19yZWFkKHBoeWRldiwgQkNNNTQ4Ml9TSERfU1NEKTsKKwkJYmNtNTR4eF9zaGFkb3dfd3JpdGUocGh5ZGV2LCBCQ001NDgyX1NIRF9TU0QsCisJCQkJICAgICByZWcgfAorCQkJCSAgICAgQkNNNTQ4Ml9TSERfU1NEX0xFRE0gfAorCQkJCSAgICAgQkNNNTQ4Ml9TSERfU1NEX0VOKTsKKworCQkvKgorCQkgKiBFbmFibGUgU0dNSUkgc2xhdmUgbW9kZSBhbmQgYXV0by1kZXRlY3Rpb24KKwkJICovCisJCXJlZyA9IGJjbTU0eHhfZXhwX3JlYWQocGh5ZGV2LCAxLCBCQ001NDgyX1NTRF9TR01JSV9TTEFWRSk7CisJCWJjbTU0eHhfZXhwX3dyaXRlKHBoeWRldiwgMSwgQkNNNTQ4Ml9TU0RfU0dNSUlfU0xBVkUsCisJCQkJICByZWcgfAorCQkJCSAgQkNNNTQ4Ml9TU0RfU0dNSUlfU0xBVkVfRU4gfAorCQkJCSAgQkNNNTQ4Ml9TU0RfU0dNSUlfU0xBVkVfQUQpOworCisJCS8qCisJCSAqIERpc2FibGUgc2Vjb25kYXJ5IFNlckRlcyBwb3dlcmRvd24KKwkJICovCisJCXJlZyA9IGJjbTU0eHhfZXhwX3JlYWQocGh5ZGV2LCAxLCBCQ001NDgyX1NTRF8xMDAwQlhfQ1RMKTsKKwkJYmNtNTR4eF9leHBfd3JpdGUocGh5ZGV2LCAxLCBCQ001NDgyX1NTRF8xMDAwQlhfQ1RMLAorCQkJCSAgcmVnICYgfkJDTTU0ODJfU1NEXzEwMDBCWF9DVExfUFdSRE9XTik7CisKKwkJLyoKKwkJICogU2VsZWN0IDEwMDBCQVNFLVggcmVnaXN0ZXIgc2V0IChwcmltYXJ5IFNlckRlcykKKwkJICovCisJCXJlZyA9IGJjbTU0eHhfc2hhZG93X3JlYWQocGh5ZGV2LCBCQ001NDgyX1NIRF9NT0RFKTsKKwkJYmNtNTR4eF9zaGFkb3dfd3JpdGUocGh5ZGV2LCBCQ001NDgyX1NIRF9NT0RFLAorCQkJCSAgICAgcmVnIHwgQkNNNTQ4Ml9TSERfTU9ERV8xMDAwQlgpOworCisJCS8qCisJCSAqIExFRDE9QUNUSVZJVFlMRUQsIExFRDM9TElOS1NQRFsyXQorCQkgKiAoVXNlIExFRDEgYXMgc2Vjb25kYXJ5IFNlckRlcyBBQ1RJVklUWSBMRUQpCisJCSAqLworCQliY201NHh4X3NoYWRvd193cml0ZShwaHlkZXYsIEJDTTU0ODJfU0hEX0xFRFMxLAorCQkJQkNNNTQ4Ml9TSERfTEVEUzFfTEVEMShCQ01fTEVEX1NSQ19BQ1RJVklUWUxFRCkgfAorCQkJQkNNNTQ4Ml9TSERfTEVEUzFfTEVEMyhCQ01fTEVEX1NSQ19MSU5LU1BEMikpOworCisJCS8qCisJCSAqIEF1dG8tbmVnb3RpYXRpb24gZG9lc24ndCBzZWVtIHRvIHdvcmsgcXVpdGUgcmlnaHQKKwkJICogaW4gdGhpcyBtb2RlLCBzbyB3ZSBkaXNhYmxlIGl0IGFuZCBmb3JjZSBpdCB0byB0aGUKKwkJICogcmlnaHQgc3BlZWQvZHVwbGV4IHNldHRpbmcuICBPbmx5ICdsaW5rIHN0YXR1cycKKwkJICogaXMgaW1wb3J0YW50LgorCQkgKi8KKwkJcGh5ZGV2LT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCQlwaHlkZXYtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJcGh5ZGV2LT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJjbTU0ODJfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZ2VucGh5X3JlYWRfc3RhdHVzKHBoeWRldik7CisKKwlpZiAocGh5ZGV2LT5kZXZfZmxhZ3MgJiBQSFlfQkNNX0ZMQUdTX01PREVfMTAwMEJYKSB7CisJCS8qCisJCSAqIE9ubHkgbGluayBzdGF0dXMgbWF0dGVycyBmb3IgMTAwMEJhc2UtWCBtb2RlLCBzbyBmb3JjZQorCQkgKiAxMDAwIE1iaXQvcyBmdWxsLWR1cGxleCBzdGF0dXMKKwkJICovCisJCWlmIChwaHlkZXYtPmxpbmspIHsKKwkJCXBoeWRldi0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQkJcGh5ZGV2LT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgYmNtNTR4eF9hY2tfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJaW50IHJlZzsKQEAgLTIxMCw5ICs0MDcsOSBAQAogCS5uYW1lCQk9ICJCcm9hZGNvbSBCQ001NDgyIiwKIAkuZmVhdHVyZXMJPSBQSFlfR0JJVF9GRUFUVVJFUywKIAkuZmxhZ3MJCT0gUEhZX0hBU19NQUdJQ0FORUcgfCBQSFlfSEFTX0lOVEVSUlVQVCwKLQkuY29uZmlnX2luaXQJPSBiY201NHh4X2NvbmZpZ19pbml0LAorCS5jb25maWdfaW5pdAk9IGJjbTU0ODJfY29uZmlnX2luaXQsCiAJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAotCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkucmVhZF9zdGF0dXMJPSBiY201NDgyX3JlYWRfc3RhdHVzLAogCS5hY2tfaW50ZXJydXB0CT0gYmNtNTR4eF9hY2tfaW50ZXJydXB0LAogCS5jb25maWdfaW50cgk9IGJjbTU0eHhfY29uZmlnX2ludHIsCiAJLmRyaXZlciAJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jIGIvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYwppbmRleCAzMmE4NTAzLi40YWE1NDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKQEAgLTE1OCwxMSArMTU4LDEwIEBACiB7CiAJaW50IGVycjsKIAlpbnQgdGVtcDsKLQlpbnQgbW9kZTsKIAogCS8qIEVuYWJsZSBGaWJlci9Db3BwZXIgYXV0byBzZWxlY3Rpb24gKi8KIAl0ZW1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTTExMTFfUEhZX0VYVF9TUik7Ci0JdGVtcCB8PSBNSUlfTTExMTFfSFdDRkdfRklCRVJfQ09QUEVSX0FVVE87CisJdGVtcCAmPSB+TUlJX00xMTExX0hXQ0ZHX0ZJQkVSX0NPUFBFUl9BVVRPOwogCXBoeV93cml0ZShwaHlkZXYsIE1JSV9NMTExMV9QSFlfRVhUX1NSLCB0ZW1wKTsKIAogCXRlbXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKQEAgLTE5OCw5ICsxOTcsNyBAQAogCiAJCXRlbXAgJj0gfihNSUlfTTExMTFfSFdDRkdfTU9ERV9NQVNLKTsKIAotCQltb2RlID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTTExMTFfUEhZX0VYVF9DUik7Ci0KLQkJaWYgKG1vZGUgJiBNSUlfTTExMTFfSFdDRkdfRklCRVJfQ09QUEVSX1JFUykKKwkJaWYgKHRlbXAgJiBNSUlfTTExMTFfSFdDRkdfRklCRVJfQ09QUEVSX1JFUykKIAkJCXRlbXAgfD0gTUlJX00xMTExX0hXQ0ZHX01PREVfRklCRVJfUkdNSUk7CiAJCWVsc2UKIAkJCXRlbXAgfD0gTUlJX00xMTExX0hXQ0ZHX01PREVfQ09QUEVSX1JHTUlJOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jCmluZGV4IDI3NDdiMWYuLmMwMWI3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWJpdGJhbmcuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpby1iaXRiYW5nLmMKQEAgLTE3Nyw2ICsxNzcsNyBAQAogCiAJcmV0dXJuIGJ1czsKIH0KK0VYUE9SVF9TWU1CT0woYWxsb2NfbWRpb19iaXRiYW5nKTsKIAogdm9pZCBmcmVlX21kaW9fYml0YmFuZyhzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogewpAQCAtMTg1LDUgKzE4Niw2IEBACiAJbW9kdWxlX3B1dChjdHJsLT5vcHMtPm93bmVyKTsKIAlrZnJlZShidXMpOwogfQorRVhQT1JUX1NZTUJPTChmcmVlX21kaW9fYml0YmFuZyk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLW9mZ3Bpby5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tb2ZncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkZmMwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLW9mZ3Bpby5jCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogT3BlbkZpcm13YXJlIEdQSU8gYmFzZWQgTURJTyBiaXRiYW5nIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQ1NFIFNlbWFwaG9yZSBCZWxnaXVtLgorICogIGJ5IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnRwQGNzZS1zZW1hcGhvcmUuY29tPgorICoKKyAqIEJhc2VkIG9uIGVhcmxpZXIgd29yayBieQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBJbnRyYWNvbSBTLkEuCisgKiAgYnkgUGFudGVsaXMgQW50b25pb3UgPHBhbnRvQGludHJhY29tLmdyPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIFZpdGFseSBCb3JkdWcgPHZib3JkdWdAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21kaW8tYml0YmFuZy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCitzdHJ1Y3QgbWRpb19ncGlvX2luZm8geworCXN0cnVjdCBtZGlvYmJfY3RybCBjdHJsOworCWludCBtZGMsIG1kaW87Cit9OworCitzdGF0aWMgdm9pZCBtZGlvX2RpcihzdHJ1Y3QgbWRpb2JiX2N0cmwgKmN0cmwsIGludCBkaXIpCit7CisJc3RydWN0IG1kaW9fZ3Bpb19pbmZvICpiaXRiYW5nID0KKwkJY29udGFpbmVyX29mKGN0cmwsIHN0cnVjdCBtZGlvX2dwaW9faW5mbywgY3RybCk7CisKKwlpZiAoZGlyKQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoYml0YmFuZy0+bWRpbywgMSk7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChiaXRiYW5nLT5tZGlvKTsKK30KKworc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG1kaW9iYl9jdHJsICpjdHJsKQoreworCXN0cnVjdCBtZGlvX2dwaW9faW5mbyAqYml0YmFuZyA9CisJCWNvbnRhaW5lcl9vZihjdHJsLCBzdHJ1Y3QgbWRpb19ncGlvX2luZm8sIGN0cmwpOworCisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKGJpdGJhbmctPm1kaW8pOworfQorCitzdGF0aWMgdm9pZCBtZGlvKHN0cnVjdCBtZGlvYmJfY3RybCAqY3RybCwgaW50IHdoYXQpCit7CisJc3RydWN0IG1kaW9fZ3Bpb19pbmZvICpiaXRiYW5nID0KKwkJY29udGFpbmVyX29mKGN0cmwsIHN0cnVjdCBtZGlvX2dwaW9faW5mbywgY3RybCk7CisKKwlncGlvX3NldF92YWx1ZShiaXRiYW5nLT5tZGlvLCB3aGF0KTsKK30KKworc3RhdGljIHZvaWQgbWRjKHN0cnVjdCBtZGlvYmJfY3RybCAqY3RybCwgaW50IHdoYXQpCit7CisJc3RydWN0IG1kaW9fZ3Bpb19pbmZvICpiaXRiYW5nID0KKwkJY29udGFpbmVyX29mKGN0cmwsIHN0cnVjdCBtZGlvX2dwaW9faW5mbywgY3RybCk7CisKKwlncGlvX3NldF92YWx1ZShiaXRiYW5nLT5tZGMsIHdoYXQpOworfQorCitzdGF0aWMgc3RydWN0IG1kaW9iYl9vcHMgbWRpb19ncGlvX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuc2V0X21kYyA9IG1kYywKKwkuc2V0X21kaW9fZGlyID0gbWRpb19kaXIsCisJLnNldF9tZGlvX2RhdGEgPSBtZGlvLAorCS5nZXRfbWRpb19kYXRhID0gbWRpb19yZWFkLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbWRpb19vZmdwaW9fYml0YmFuZ19pbml0KHN0cnVjdCBtaWlfYnVzICpidXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IG1kaW9fZ3Bpb19pbmZvICpiaXRiYW5nID0gYnVzLT5wcml2OworCisJYml0YmFuZy0+bWRjID0gb2ZfZ2V0X2dwaW8obnAsIDApOworCWJpdGJhbmctPm1kaW8gPSBvZl9nZXRfZ3BpbyhucCwgMSk7CisKKwlpZiAoYml0YmFuZy0+bWRjIDwgMCB8fCBiaXRiYW5nLT5tZGlvIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzbnByaW50ZihidXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIGJpdGJhbmctPm1kYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhZGRfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJY29uc3QgdTMyICpkYXRhOworCWludCBsZW4sIGlkLCBpcnE7CisKKwlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJmxlbik7CisJaWYgKCFkYXRhIHx8IGxlbiAhPSA0KQorCQlyZXR1cm47CisKKwlpZCA9ICpkYXRhOworCWJ1cy0+cGh5X21hc2sgJj0gfigxIDw8IGlkKTsKKworCWlycSA9IG9mX2lycV90b19yZXNvdXJjZShucCwgMCwgTlVMTCk7CisJaWYgKGlycSAhPSBOT19JUlEpCisJCWJ1cy0+aXJxW2lkXSA9IGlycTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWRpb19vZmdwaW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CisJc3RydWN0IG1paV9idXMgKm5ld19idXM7CisJc3RydWN0IG1kaW9fZ3Bpb19pbmZvICpiaXRiYW5nOworCWludCByZXQgPSAtRU5PTUVNOworCWludCBpOworCisJYml0YmFuZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZGlvX2dwaW9faW5mbyksIEdGUF9LRVJORUwpOworCWlmICghYml0YmFuZykKKwkJZ290byBvdXQ7CisKKwliaXRiYW5nLT5jdHJsLm9wcyA9ICZtZGlvX2dwaW9fb3BzOworCisJbmV3X2J1cyA9IGFsbG9jX21kaW9fYml0YmFuZygmYml0YmFuZy0+Y3RybCk7CisJaWYgKCFuZXdfYnVzKQorCQlnb3RvIG91dF9mcmVlX3ByaXY7CisKKwluZXdfYnVzLT5uYW1lID0gIkdQSU8gQml0YmFuZ2VkIE1JSSIsCisKKwlyZXQgPSBtZGlvX29mZ3Bpb19iaXRiYW5nX2luaXQobmV3X2J1cywgb2ZkZXYtPm5vZGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfYnVzOworCisJbmV3X2J1cy0+cGh5X21hc2sgPSB+MDsKKwluZXdfYnVzLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpICogUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19idXMtPmlycSkKKwkJZ290byBvdXRfZnJlZV9idXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCisJCW5ld19idXMtPmlycVtpXSA9IC0xOworCisJd2hpbGUgKChucCA9IG9mX2dldF9uZXh0X2NoaWxkKG9mZGV2LT5ub2RlLCBucCkpKQorCQlpZiAoIXN0cmNtcChucC0+dHlwZSwgImV0aGVybmV0LXBoeSIpKQorCQkJYWRkX3BoeShuZXdfYnVzLCBucCk7CisKKwluZXdfYnVzLT5kZXYgPSAmb2ZkZXYtPmRldjsKKwlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIG5ld19idXMpOworCisJcmV0ID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlX2lycXM7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfaXJxczoKKwlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIE5VTEwpOworCWtmcmVlKG5ld19idXMtPmlycSk7CitvdXRfZnJlZV9idXM6CisJa2ZyZWUobmV3X2J1cyk7CitvdXRfZnJlZV9wcml2OgorCWZyZWVfbWRpb19iaXRiYW5nKG5ld19idXMpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWRpb19vZmdwaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOworCXN0cnVjdCBtZGlvX2dwaW9faW5mbyAqYml0YmFuZyA9IGJ1cy0+cHJpdjsKKworCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOworCWZyZWVfbWRpb19iaXRiYW5nKGJ1cyk7CisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBOVUxMKTsKKwlrZnJlZShidXMtPmlycSk7CisJa2ZyZWUoYml0YmFuZyk7CisJa2ZyZWUoYnVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtZGlvX29mZ3Bpb19tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAidmlydHVhbCxtZGlvLWdwaW8iLAorCX0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtZGlvX29mZ3Bpb19kcml2ZXIgPSB7CisJLm5hbWUgPSAibWRpby1ncGlvIiwKKwkubWF0Y2hfdGFibGUgPSBtZGlvX29mZ3Bpb19tYXRjaCwKKwkucHJvYmUgPSBtZGlvX29mZ3Bpb19wcm9iZSwKKwkucmVtb3ZlID0gbWRpb19vZmdwaW9fcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBtZGlvX29mZ3Bpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbWRpb19vZmdwaW9fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgbWRpb19vZmdwaW9fZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtZGlvX29mZ3Bpb19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtZGlvX29mZ3Bpb19pbml0KTsKK21vZHVsZV9leGl0KG1kaW9fb2ZncGlvX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwppbmRleCBmMWE1MmRlLi40NTFiZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwpAQCAtMzc4LDcgKzM3OCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB0dHlfbGRpc2MgcHBwX2xkaXNjID0geworc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHBwcF9sZGlzYyA9IHsKIAkub3duZXIgID0gVEhJU19NT0RVTEUsCiAJLm1hZ2ljCT0gVFRZX0xESVNDX01BR0lDLAogCS5uYW1lCT0gInBwcCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwppbmRleCA4MzYyNWZkLi43MzliM2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBwcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBwcHBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHBwcF9maWxlICpwZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcHBwICpwcHA7CkBAIC01NDcsOCArNTQ3LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBQX0ZJTFRFUiAqLwogCi1zdGF0aWMgaW50IHBwcF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHBwcF9maWxlICpwZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcHBwICpwcHA7CkBAIC01NzYsMjQgKzU3NSwyOSBAQAogCQkgKiB0aGlzIGZkIGFuZCByZW9wZW5pbmcgL2Rldi9wcHAuCiAJCSAqLwogCQllcnIgPSAtRUlOVkFMOworCQlsb2NrX2tlcm5lbCgpOwogCQlpZiAocGYtPmtpbmQgPT0gSU5URVJGQUNFKSB7CiAJCQlwcHAgPSBQRl9UT19QUFAocGYpOwogCQkJaWYgKGZpbGUgPT0gcHBwLT5vd25lcikKIAkJCQlwcHBfc2h1dGRvd25faW50ZXJmYWNlKHBwcCk7CiAJCX0KIAkJaWYgKGF0b21pY19yZWFkKCZmaWxlLT5mX2NvdW50KSA8PSAyKSB7Ci0JCQlwcHBfcmVsZWFzZShpbm9kZSwgZmlsZSk7CisJCQlwcHBfcmVsZWFzZShOVUxMLCBmaWxlKTsKIAkJCWVyciA9IDA7CiAJCX0gZWxzZQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlBQUElPQ0RFVEFDSCBmaWxlLT5mX2NvdW50PSVkXG4iLAogCQkJICAgICAgIGF0b21pY19yZWFkKCZmaWxlLT5mX2NvdW50KSk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiAocGYtPmtpbmQgPT0gQ0hBTk5FTCkgewotCQlzdHJ1Y3QgY2hhbm5lbCAqcGNoID0gUEZfVE9fQ0hBTk5FTChwZik7CisJCXN0cnVjdCBjaGFubmVsICpwY2g7CiAJCXN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbjsKIAorCQlsb2NrX2tlcm5lbCgpOworCQlwY2ggPSBQRl9UT19DSEFOTkVMKHBmKTsKKwogCQlzd2l0Y2ggKGNtZCkgewogCQljYXNlIFBQUElPQ0NPTk5FQ1Q6CiAJCQlpZiAoZ2V0X3VzZXIodW5pdCwgcCkpCkBAIC02MTMsNiArNjE3LDcgQEAKIAkJCQllcnIgPSBjaGFuLT5vcHMtPmlvY3RsKGNoYW4sIGNtZCwgYXJnKTsKIAkJCXVwX3JlYWQoJnBjaC0+Y2hhbl9zZW0pOwogCQl9CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTYyMiw2ICs2MjcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlsb2NrX2tlcm5lbCgpOwogCXBwcCA9IFBGX1RPX1BQUChwZik7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFBQUElPQ1NNUlU6CkBAIC03NjksNyArNzc1LDcgQEAKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PVFRZOwogCX0KLQorCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03ODEsNiArNzg3LDcgQEAKIAlzdHJ1Y3QgY2hhbm5lbCAqY2hhbjsKIAlpbnQgX191c2VyICpwID0gKGludCBfX3VzZXIgKilhcmc7CiAKKwlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBQUFBJT0NORVdVTklUOgogCQkvKiBDcmVhdGUgYSBuZXcgcHBwIHVuaXQgKi8KQEAgLTgyOSw2ICs4MzYsNyBAQAogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9UVFk7CiAJfQorCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04MzcsNyArODQ1LDcgQEAKIAkucmVhZAkJPSBwcHBfcmVhZCwKIAkud3JpdGUJCT0gcHBwX3dyaXRlLAogCS5wb2xsCQk9IHBwcF9wb2xsLAotCS5pb2N0bAkJPSBwcHBfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsCT0gcHBwX2lvY3RsLAogCS5vcGVuCQk9IHBwcF9vcGVuLAogCS5yZWxlYXNlCT0gcHBwX3JlbGVhc2UKIH07CkBAIC04NTgsNyArODY2LDggQEAKIAkJCWVyciA9IFBUUl9FUlIocHBwX2NsYXNzKTsKIAkJCWdvdG8gb3V0X2NocmRldjsKIAkJfQotCQlkZXZpY2VfY3JlYXRlKHBwcF9jbGFzcywgTlVMTCwgTUtERVYoUFBQX01BSk9SLCAwKSwgInBwcCIpOworCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEocHBwX2NsYXNzLCBOVUxMLCBNS0RFVihQUFBfTUFKT1IsIDApLAorCQkJCSAgICAgIE5VTEwsICJwcHAiKTsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCmluZGV4IGI4ZjAzNjkuLjgwMWQ4ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYwpAQCAtNDE4LDcgKzQxOCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB0dHlfbGRpc2MgcHBwX3N5bmNfbGRpc2MgPSB7CitzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7CiAJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJLm1hZ2ljCT0gVFRZX0xESVNDX01BR0lDLAogCS5uYW1lCT0gInBwcHN5bmMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCmluZGV4IGUzNjVlZmIuLjJlYjU0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYworKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKQEAgLTExMCw3ICsxMTAsNyBAQAogdm9pZCBnZWxpY19jYXJkX3VwKHN0cnVjdCBnZWxpY19jYXJkICpjYXJkKQogewogCXByX2RlYnVnKCIlczogY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JZG93bigmY2FyZC0+dXBkb3duX2xvY2spOworCW11dGV4X2xvY2soJmNhcmQtPnVwZG93bl9sb2NrKTsKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJmNhcmQtPnVzZXJzKSA9PSAxKSB7CiAJCXByX2RlYnVnKCIlczogcmVhbCBkb1xuIiwgX19mdW5jX18pOwogCQkvKiBlbmFibGUgaXJxICovCkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCQluYXBpX2VuYWJsZSgmY2FyZC0+bmFwaSk7CiAJfQotCXVwKCZjYXJkLT51cGRvd25fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT51cGRvd25fbG9jayk7CiAJcHJfZGVidWcoIiVzOiBkb25lXG4iLCBfX2Z1bmNfXyk7CiB9CiAKQEAgLTEyOCw3ICsxMjgsNyBAQAogewogCXU2NCBtYXNrOwogCXByX2RlYnVnKCIlczogY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JZG93bigmY2FyZC0+dXBkb3duX2xvY2spOworCW11dGV4X2xvY2soJmNhcmQtPnVwZG93bl9sb2NrKTsKIAlpZiAoYXRvbWljX2RlY19pZl9wb3NpdGl2ZSgmY2FyZC0+dXNlcnMpID09IDApIHsKIAkJcHJfZGVidWcoIiVzOiByZWFsIGRvXG4iLCBfX2Z1bmNfXyk7CiAJCW5hcGlfZGlzYWJsZSgmY2FyZC0+bmFwaSk7CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJLyogc3RvcCB0eCAqLwogCQlnZWxpY19jYXJkX2Rpc2FibGVfdHhkbWFjKGNhcmQpOwogCX0KLQl1cCgmY2FyZC0+dXBkb3duX2xvY2spOworCW11dGV4X3VubG9jaygmY2FyZC0+dXBkb3duX2xvY2spOwogCXByX2RlYnVnKCIlczogZG9uZVxuIiwgX19mdW5jX18pOwogfQogCkBAIC0xNTM0LDcgKzE1MzQsNyBAQAogCUlOSVRfV09SSygmY2FyZC0+dHhfdGltZW91dF90YXNrLCBnZWxpY19uZXRfdHhfdGltZW91dF90YXNrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT53YWl0cSk7CiAJYXRvbWljX3NldCgmY2FyZC0+dHhfdGltZW91dF90YXNrX2NvdW50ZXIsIDApOwotCWluaXRfTVVURVgoJmNhcmQtPnVwZG93bl9sb2NrKTsKKwltdXRleF9pbml0KCZjYXJkLT51cGRvd25fbG9jayk7CiAJYXRvbWljX3NldCgmY2FyZC0+dXNlcnMsIDApOwogCiAJcmV0dXJuIGNhcmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmggYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmgKaW5kZXggNTIwZjE0My4uOGI0MTM4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5oCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuaApAQCAtMjk4LDcgKzI5OCw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CiAKIAkvKiBvbmx5IGZpcnN0IHVzZXIgc2hvdWxkIHVwIHRoZSBjYXJkICovCi0Jc3RydWN0IHNlbWFwaG9yZSB1cGRvd25fbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkb3duX2xvY2s7CiAJYXRvbWljX3QgdXNlcnM7CiAKIAl1NjQgZXRoZXJfcG9ydF9zdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCmluZGV4IDFkYWUxZjIuLjZiMmRlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCkBAIC00NSw3ICs0NSw4IEBACiAjaW5jbHVkZSAicHMzX2dlbGljX3dpcmVsZXNzLmgiCiAKIAotc3RhdGljIGludCBnZWxpY193bF9zdGFydF9zY2FuKHN0cnVjdCBnZWxpY193bF9pbmZvICp3bCwgaW50IGFsd2F5c19zY2FuKTsKK3N0YXRpYyBpbnQgZ2VsaWNfd2xfc3RhcnRfc2NhbihzdHJ1Y3QgZ2VsaWNfd2xfaW5mbyAqd2wsIGludCBhbHdheXNfc2NhbiwKKwkJCSAgICAgICB1OCAqZXNzaWQsIHNpemVfdCBlc3NpZF9sZW4pOwogc3RhdGljIGludCBnZWxpY193bF90cnlfYXNzb2NpYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogCiAvKgpAQCAtMTA1LDYgKzEwNiw3IEBACiAJW0dFTElDX0VVUlVTX0NNRF9HRVRfV0VQX0NGR10gICAgPSB7IC5wb3N0X2FyZyA9IDF9LAogCVtHRUxJQ19FVVJVU19DTURfR0VUX1dQQV9DRkddICAgID0geyAucG9zdF9hcmcgPSAxfSwKIAlbR0VMSUNfRVVSVVNfQ01EX0dFVF9SU1NJX0NGR10gICA9IHsgLnBvc3RfYXJnID0gMX0sCisJW0dFTElDX0VVUlVTX0NNRF9TVEFSVF9TQ0FOXSAgICAgPSB7IC5wcmVfYXJnID0gMX0sCiAJW0dFTElDX0VVUlVTX0NNRF9HRVRfU0NBTl0gICAgICAgPSB7IC5wb3N0X2FyZyA9IDF9LAogfTsKIApAQCAtMTYzLDcgKzE2NSw5IEBACiAJY2FyZCA9IHBvcnRfdG9fY2FyZCh3bF9wb3J0KHdsKSk7CiAKIAlpZiAoY21kX2luZm9bY21kLT5jbWRdLnByZV9hcmcpIHsKLQkJYXJnMSA9IHBzM19tbV9waHlzX3RvX2xwYXIoX19wYShjbWQtPmJ1ZmZlcikpOworCQlhcmcxID0gKGNtZC0+YnVmZmVyKSA/CisJCQlwczNfbW1fcGh5c190b19scGFyKF9fcGEoY21kLT5idWZmZXIpKSA6CisJCQkwOwogCQlhcmcyID0gY21kLT5idWZfc2l6ZTsKIAl9IGVsc2UgewogCQlhcmcxID0gMDsKQEAgLTI0MCwxMiArMjQ0LDEyIEBACiAJdTMyIHJldDsKIAogCXByX2RlYnVnKCIlczogPC1cbiIsIF9fZnVuY19fKTsKLQlkb3duKCZ3bC0+YXNzb2Nfc3RhdF9sb2NrKTsKKwltdXRleF9sb2NrKCZ3bC0+YXNzb2Nfc3RhdF9sb2NrKTsKIAlpZiAod2wtPmFzc29jX3N0YXQgPT0gR0VMSUNfV0xfQVNTT0NfU1RBVF9BU1NPQ0lBVEVEKQogCQlyZXQgPSAxOwogCWVsc2UKIAkJcmV0ID0gMDsKLQl1cCgmd2wtPmFzc29jX3N0YXRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+YXNzb2Nfc3RhdF9sb2NrKTsKIAlwcl9kZWJ1ZygiJXM6IC0+XG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM1MCw3ICszNTQsOCBAQAogCiAJLyogZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCiAJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwKLQkJSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKKwkJSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUCB8CisJCUlXX0VOQ19DQVBBXzRXQVlfSEFORFNIQUtFOwogCWlmICh3cGEyX2NhcGFibGUoKSkKIAkJcmFuZ2UtPmVuY19jYXBhIHw9IElXX0VOQ19DQVBBX1dQQTI7CiAJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OwkvKiA0MGJpdCBXRVAgKi8KQEAgLTM1OSw2ICszNjQsOSBAQAogCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAzOwogCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gR0VMSUNfV0VQX0tFWVM7CiAKKwkvKiBzY2FuIGNhcGFiaWxpdHkgKi8KKwlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX0VTU0lEOworCiAJcHJfZGVidWcoIiVzOiAtPlxuIiwgX19mdW5jX18pOwogCXJldHVybiAwOwogCkBAIC0zNzAsOCArMzc4LDE4IEBACiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgZ2VsaWNfd2xfaW5mbyAqd2wgPSBwb3J0X3dsKG5ldGRldl9wcml2KG5ldGRldikpOworCXN0cnVjdCBpd19zY2FuX3JlcSAqcmVxOworCXU4ICplc3NpZCA9IE5VTEw7CisJc2l6ZV90IGVzc2lkX2xlbiA9IDA7CiAKLQlyZXR1cm4gZ2VsaWNfd2xfc3RhcnRfc2Nhbih3bCwgMSk7CisJaWYgKHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpICYmCisJICAgIHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKKwkJcmVxID0gKHN0cnVjdCBpd19zY2FuX3JlcSopZXh0cmE7CisJCWVzc2lkID0gcmVxLT5lc3NpZDsKKwkJZXNzaWRfbGVuID0gcmVxLT5lc3NpZF9sZW47CisJCXByX2RlYnVnKCIlczogRVNTSUQgc2NhbiA9JXNcbiIsIF9fZnVuY19fLCBlc3NpZCk7CisJfQorCXJldHVybiBnZWxpY193bF9zdGFydF9zY2FuKHdsLCAxLCBlc3NpZCwgZXNzaWRfbGVuKTsKIH0KIAogI2RlZmluZSBPVUlfTEVOIDMKQEAgLTU1Myw2ICs1NzEsNyBAQAogICogaW5kZXBlbmRlbnQgZm9ybWF0CiAgKi8KIHN0YXRpYyBjaGFyICpnZWxpY193bF90cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICAgIGNoYXIgKmV2LAogCQkJCSAgICAgY2hhciAqc3RvcCwKIAkJCQkgICAgIHN0cnVjdCBnZWxpY193bF9zY2FuX2luZm8gKm5ldHdvcmspCkBAIC01NzAsMjYgKzU4OSwyNiBAQAogCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CiAJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgJnNjYW4tPmJzc2lkWzJdLCBFVEhfQUxFTik7Ci0JZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChldiwgc3RvcCwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCWV2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgZXYsIHN0b3AsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKIAogCS8qIEVTU0lEICovCiAJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKIAlpd2UudS5kYXRhLmZsYWdzID0gMTsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cm5sZW4oc2Nhbi0+ZXNzaWQsIDMyKTsKLQlldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGV2LCBzdG9wLCAmaXdlLCBzY2FuLT5lc3NpZCk7CisJZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBldiwgc3RvcCwgJml3ZSwgc2Nhbi0+ZXNzaWQpOwogCiAJLyogRlJFUVVFTkNZICovCiAJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwogCWl3ZS51LmZyZXEubSA9IGJlMTZfdG9fY3B1KHNjYW4tPmNoYW5uZWwpOwogCWl3ZS51LmZyZXEuZSA9IDA7IC8qIHRhYmxlIHZhbHVlIGluIE1IeiAqLwogCWl3ZS51LmZyZXEuaSA9IDA7Ci0JZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChldiwgc3RvcCwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCWV2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgZXYsIHN0b3AsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKIAogCS8qIFJBVEVTICovCiAJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwogCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKIAkvKiB0byBzdHVmZiBtdWx0aXBsZSB2YWx1ZXMgaW4gb25lIGV2ZW50ICovCi0JdG1wID0gZXYgKyBJV19FVl9MQ1BfTEVOOworCXRtcCA9IGV2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOwogCS8qIHB1dCB0aGVtIGluIGFzY2VuZGFudCBvcmRlciAob2xkZXIgaXMgZmlyc3QpICovCiAJaSA9IDA7CiAJaiA9IDA7CkBAIC02MDIsMTYgKzYyMSwxNiBAQAogCQllbHNlCiAJCSAgICByYXRlID0gc2Nhbi0+cmF0ZVtpKytdICYgMHg3ZjsKIAkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9IHJhdGUgKiA1MDAwMDA7IC8qIDUwMGticHMgdW5pdCAqLwotCQl0bXAgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShldiwgdG1wLCBzdG9wLCAmaXdlLAorCQl0bXAgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBldiwgdG1wLCBzdG9wLCAmaXdlLAogCQkJCQkgICBJV19FVl9QQVJBTV9MRU4pOwogCX0KIAl3aGlsZSAoaiA8IG5ldHdvcmstPnJhdGVfZXh0X2xlbikgewogCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKHNjYW4tPmV4dF9yYXRlW2orK10gJiAweDdmKSAqIDUwMDAwMDsKLQkJdG1wID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoZXYsIHRtcCwgc3RvcCwgJml3ZSwKKwkJdG1wID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgZXYsIHRtcCwgc3RvcCwgJml3ZSwKIAkJCQkJICAgSVdfRVZfUEFSQU1fTEVOKTsKIAl9CiAJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IHJhdGUgKi8KLQlpZiAoSVdfRVZfTENQX0xFTiA8ICh0bXAgLSBldikpCisJaWYgKGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSA8ICh0bXAgLSBldikpCiAJCWV2ID0gdG1wOwogCiAJLyogRU5DT0RFICovCkBAIC02MjEsNyArNjQwLDcgQEAKIAllbHNlCiAJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CiAJaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWV2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoZXYsIHN0b3AsICZpd2UsIHNjYW4tPmVzc2lkKTsKKwlldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGV2LCBzdG9wLCAmaXdlLCBzY2FuLT5lc3NpZCk7CiAKIAkvKiBNT0RFICovCiAJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwpAQCAtNjMxLDcgKzY1MCw3IEBACiAJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CiAJCWVsc2UKIAkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQlldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGV2LCBzdG9wLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJCWV2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgZXYsIHN0b3AsICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKIAl9CiAKIAkvKiBRVUFMICovCkBAIC02NDEsNyArNjYwLDcgQEAKIAlpd2UudS5xdWFsLmxldmVsID0gYmUxNl90b19jcHUoc2Nhbi0+cnNzaSk7CiAJaXdlLnUucXVhbC5xdWFsID0gYmUxNl90b19jcHUoc2Nhbi0+cnNzaSk7CiAJaXdlLnUucXVhbC5ub2lzZSA9IDA7Ci0JZXYgID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoZXYsIHN0b3AsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKwlldiAgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBldiwgc3RvcCwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwogCiAJLyogUlNOICovCiAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKQEAgLTY1MSw3ICs2NzAsNyBAQAogCQlpZiAobGVuKSB7CiAJCQlpd2UuY21kID0gSVdFVkdFTklFOwogCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBsZW47Ci0JCQlldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGV2LCBzdG9wLCAmaXdlLCBidWYpOworCQkJZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBldiwgc3RvcCwgJml3ZSwgYnVmKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIHRoaXMgc2NhbiBpbmZvIGhhcyBJRSBkYXRhICovCkBAIC02NjYsNyArNjg1LDcgQEAKIAkJCW1lbWNweShidWYsIGllX2luZm8ud3BhLmRhdGEsIGllX2luZm8ud3BhLmxlbik7CiAJCQlpd2UuY21kID0gSVdFVkdFTklFOwogCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZV9pbmZvLndwYS5sZW47Ci0JCQlldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGV2LCBzdG9wLCAmaXdlLCBidWYpOworCQkJZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBldiwgc3RvcCwgJml3ZSwgYnVmKTsKIAkJfQogCiAJCWlmIChpZV9pbmZvLnJzbi5sZW4gJiYgKGllX2luZm8ucnNuLmxlbiA8PSBzaXplb2YoYnVmKSkpIHsKQEAgLTY3NCw3ICs2OTMsNyBAQAogCQkJbWVtY3B5KGJ1ZiwgaWVfaW5mby5yc24uZGF0YSwgaWVfaW5mby5yc24ubGVuKTsKIAkJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CiAJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllX2luZm8ucnNuLmxlbjsKLQkJCWV2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoZXYsIHN0b3AsICZpd2UsIGJ1Zik7CisJCQlldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGV2LCBzdG9wLCAmaXdlLCBidWYpOwogCQl9CiAJfQogCkBAIC02OTUsNyArNzE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRoaXNfdGltZSA9IGppZmZpZXM7CiAKIAlwcl9kZWJ1ZygiJXM6IDwtXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmd2wtPnNjYW5fbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmd2wtPnNjYW5fbG9jaykpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJc3dpdGNoICh3bC0+c2Nhbl9zdGF0KSB7CkBAIC03MTksNyArNzM4LDggQEAKIAkJaWYgKHdsLT5zY2FuX2FnZSA9PSAwIHx8CiAJCSAgICB0aW1lX2FmdGVyKHNjYW5faW5mby0+bGFzdF9zY2FubmVkICsgd2wtPnNjYW5fYWdlLAogCQkJICAgICAgIHRoaXNfdGltZSkpCi0JCQlldiA9IGdlbGljX3dsX3RyYW5zbGF0ZV9zY2FuKG5ldGRldiwgZXYsIHN0b3AsCisJCQlldiA9IGdlbGljX3dsX3RyYW5zbGF0ZV9zY2FuKG5ldGRldiwgaW5mbywKKwkJCQkJCSAgICAgZXYsIHN0b3AsCiAJCQkJCQkgICAgIHNjYW5faW5mbyk7CiAJCWVsc2UKIAkJCXByX2RlYnVnKCIlczplbnRyeSB0b28gb2xkXG4iLCBfX2Z1bmNfXyk7CkBAIC03MzMsNyArNzUzLDcgQEAKIAl3cnF1LT5kYXRhLmxlbmd0aCA9IGV2IC0gZXh0cmE7CiAJd3JxdS0+ZGF0YS5mbGFncyA9IDA7CiBvdXQ6Ci0JdXAoJndsLT5zY2FuX2xvY2spOworCW11dGV4X3VubG9jaygmd2wtPnNjYW5fbG9jayk7CiAJcHJfZGVidWcoIiVzOiAtPiAlZCAlZFxuIiwgX19mdW5jX18sIHJldCwgd3JxdS0+ZGF0YS5sZW5ndGgpOwogCXJldHVybiByZXQ7CiB9CkBAIC05NzksNyArOTk5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWc7CiAKIAlwcl9kZWJ1ZygiJXM6IDwtIFxuIiwgX19mdW5jX18pOwotCWRvd24oJndsLT5hc3NvY19zdGF0X2xvY2spOworCW11dGV4X2xvY2soJndsLT5hc3NvY19zdGF0X2xvY2spOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+bG9jaywgaXJxZmxhZyk7CiAJaWYgKHRlc3RfYml0KEdFTElDX1dMX1NUQVRfRVNTSURfU0VULCAmd2wtPnN0YXQpIHx8CiAJICAgIHdsLT5hc3NvY19zdGF0ID09IEdFTElDX1dMX0FTU09DX1NUQVRfQVNTT0NJQVRFRCkgewpAQCAtOTg5LDcgKzEwMDksNyBAQAogCX0gZWxzZQogCQlkYXRhLT5lc3NpZC5mbGFncyA9IDA7CiAKLQl1cCgmd2wtPmFzc29jX3N0YXRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+YXNzb2Nfc3RhdF9sb2NrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+bG9jaywgaXJxZmxhZyk7CiAJcHJfZGVidWcoIiVzOiAtPiBsZW49JWQgXG4iLCBfX2Z1bmNfXywgZGF0YS0+ZXNzaWQubGVuZ3RoKTsKIApAQCAtMTE3MCw3ICsxMTkwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWc7CiAKIAlwcl9kZWJ1ZygiJXM6IDwtXG4iLCBfX2Z1bmNfXyk7Ci0JZG93bigmd2wtPmFzc29jX3N0YXRfbG9jayk7CisJbXV0ZXhfbG9jaygmd2wtPmFzc29jX3N0YXRfbG9jayk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5sb2NrLCBpcnFmbGFnKTsKIAlpZiAod2wtPmFzc29jX3N0YXQgPT0gR0VMSUNfV0xfQVNTT0NfU1RBVF9BU1NPQ0lBVEVEKSB7CiAJCWRhdGEtPmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwpAQCAtMTE4MCw3ICsxMjAwLDcgQEAKIAkJbWVtc2V0KGRhdGEtPmFwX2FkZHIuc2FfZGF0YSwgMCwgRVRIX0FMRU4pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmxvY2ssIGlycWZsYWcpOwotCXVwKCZ3bC0+YXNzb2Nfc3RhdF9sb2NrKTsKKwltdXRleF91bmxvY2soJndsLT5hc3NvY19zdGF0X2xvY2spOwogCXByX2RlYnVnKCIlczogLT5cbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNTYsNDIgKzEyNzYsMTkgQEAKIAkJc2V0X2JpdChrZXlfaW5kZXgsICZ3bC0+a2V5X2VuYWJsZWQpOwogCQkvKiByZW1lbWJlciB3ZXAgaW5mbyBjaGFuZ2VkICovCiAJCXNldF9iaXQoR0VMSUNfV0xfU1RBVF9DT05GSUdVUkVELCAmd2wtPnN0YXQpOwotCX0gZWxzZSBpZiAoKGFsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHx8IChhbGcgPT0gSVdfRU5DT0RFX0FMR19DQ01QKSkgewotCQlwcl9kZWJ1ZygiJXM6IFRLSVAvQ0NNUCByZXF1ZXN0ZWQgYWxnPSVkXG4iLCBfX2Z1bmNfXywgYWxnKTsKLQkJLyogY2hlY2sga2V5IGxlbmd0aCAqLwotCQlpZiAoSVdfRU5DT0RJTkdfVE9LRU5fTUFYIDwgZXh0LT5rZXlfbGVuKSB7Ci0JCQlwcl9pbmZvKCIlczoga2V5IGlzIHRvbyBsb25nICVkXG4iLCBfX2Z1bmNfXywKLQkJCQlleHQtPmtleV9sZW4pOworCX0gZWxzZSBpZiAoYWxnID09IElXX0VOQ09ERV9BTEdfUE1LKSB7CisJCWlmIChleHQtPmtleV9sZW4gIT0gV1BBX1BTS19MRU4pIHsKKwkJCXByX2VycigiJXM6IFBTSyBsZW5ndGggd3JvbmcgJWRcbiIsIF9fZnVuY19fLAorCQkJICAgICAgIGV4dC0+a2V5X2xlbik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBkb25lOwogCQl9Ci0JCWlmIChhbGcgPT0gSVdfRU5DT0RFX0FMR19DQ01QKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IEFFUyBzZWxlY3RlZFxuIiwgX19mdW5jX18pOwotCQkJd2wtPmdyb3VwX2NpcGhlcl9tZXRob2QgPSBHRUxJQ19XTF9DSVBIRVJfQUVTOwotCQkJd2wtPnBhaXJ3aXNlX2NpcGhlcl9tZXRob2QgPSBHRUxJQ19XTF9DSVBIRVJfQUVTOwotCQkJd2wtPndwYV9sZXZlbCA9IEdFTElDX1dMX1dQQV9MRVZFTF9XUEEyOwotCQl9IGVsc2UgewotCQkJcHJfZGVidWcoIiVzOiBUS0lQIHNlbGVjdGVkLCBXUEEgZm9yY2VkXG4iLCBfX2Z1bmNfXyk7Ci0JCQl3bC0+Z3JvdXBfY2lwaGVyX21ldGhvZCA9IEdFTElDX1dMX0NJUEhFUl9US0lQOwotCQkJd2wtPnBhaXJ3aXNlX2NpcGhlcl9tZXRob2QgPSBHRUxJQ19XTF9DSVBIRVJfVEtJUDsKLQkJCS8qIEZJWE1FOiBob3cgZG8gd2UgZG8gaWYgV1BBMiArIFRLSVA/ICovCi0JCQl3bC0+d3BhX2xldmVsID0gR0VMSUNfV0xfV1BBX0xFVkVMX1dQQTsKLQkJfQotCQlpZiAoZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKLQkJCUJVRygpOwotCQl3bC0+YXV0aF9tZXRob2QgPSBHRUxJQ19FVVJVU19BVVRIX09QRU47Ci0JCS8qIFdlIHNob3VsZCB1c2Ugc2FtZSBrZXkgZm9yIGJvdGggYW5kIHVuaWNhc3QgKi8KLQkJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpCi0JCQlwcl9kZWJ1ZygiJXM6IGdyb3VwIGtleSBcbiIsIF9fZnVuY19fKTsKLQkJZWxzZQotCQkJcHJfZGVidWcoIiVzOiB1bmljYXN0IGtleSBcbiIsIF9fZnVuY19fKTsKLQkJLyogT0ssIHVwZGF0ZSB0aGUga2V5ICovCi0JCXdsLT5rZXlfbGVuW2tleV9pbmRleF0gPSBleHQtPmtleV9sZW47Ci0JCW1lbXNldCh3bC0+a2V5W2tleV9pbmRleF0sIDAsIElXX0VOQ09ESU5HX1RPS0VOX01BWCk7Ci0JCW1lbWNweSh3bC0+a2V5W2tleV9pbmRleF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwotCQlzZXRfYml0KGtleV9pbmRleCwgJndsLT5rZXlfZW5hYmxlZCk7Ci0JCS8qIHJlbWVtYmVyIGluZm8gY2hhbmdlZCAqLwotCQlzZXRfYml0KEdFTElDX1dMX1NUQVRfQ09ORklHVVJFRCwgJndsLT5zdGF0KTsKKwkJbWVtc2V0KHdsLT5wc2ssIDAsIHNpemVvZih3bC0+cHNrKSk7CisJCW1lbWNweSh3bC0+cHNrLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKKwkJd2wtPnBza19sZW4gPSBleHQtPmtleV9sZW47CisJCXdsLT5wc2tfdHlwZSA9IEdFTElDX0VVUlVTX1dQQV9QU0tfQklOOworCQkvKiByZW1lbWJlciBQU0sgY29uZmlndXJlZCAqLworCQlzZXRfYml0KEdFTElDX1dMX1NUQVRfV1BBX1BTS19TRVQsICZ3bC0+c3RhdCk7CiAJfQogZG9uZToKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+bG9jaywgaXJxZmxhZyk7CkBAIC0xMzk3LDYgKzEzOTQsNyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0dFTElDX1dJUkVMRVNTX09MRF9QU0tfSU5URVJGQUNFCiAvKiBTSU9DSVdGSVJTVFBSSVYgKi8KIHN0YXRpYyBpbnQgaGV4MmJpbih1OCAqc3RyLCB1OCAqYmluLCB1bnNpZ25lZCBpbnQgbGVuKQogewpAQCAtMTUwMSw2ICsxNDk5LDcgQEAKIAlwcl9kZWJ1ZygiJXM6LT4gJWRcbiIsIF9fZnVuY19fLCBkYXRhLT5kYXRhLmxlbmd0aCk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogLyogU0lPQ0dJV05JQ0tOICovCiBzdGF0aWMgaW50IGdlbGljX3dsX2dldF9uaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LApAQCAtMTUyNCwxNSArMTUyMywyMCBAQAogCXN0cnVjdCBnZWxpY19ldXJ1c19jbWQgKmNtZDsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaXM7CiAJc3RydWN0IGdlbGljX2V1cnVzX3Jzc2lfaW5mbyAqcnNzaTsKKwl2b2lkICpidWY7CiAKIAlwcl9kZWJ1ZygiJXM6IDwtXG4iLCBfX2Z1bmNfXyk7CiAKKwlidWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisKIAlpcyA9ICZ3bC0+aXdzdGF0OwogCW1lbXNldChpcywgMCwgc2l6ZW9mKCppcykpOwogCWNtZCA9IGdlbGljX2V1cnVzX3N5bmNfY21kKHdsLCBHRUxJQ19FVVJVU19DTURfR0VUX1JTU0lfQ0ZHLAotCQkJCSAgIHdsLT5idWYsIHNpemVvZigqcnNzaSkpOworCQkJCSAgIGJ1Ziwgc2l6ZW9mKCpyc3NpKSk7CiAJaWYgKGNtZCAmJiAhY21kLT5zdGF0dXMgJiYgIWNtZC0+Y21kX3N0YXR1cykgewotCQlyc3NpID0gd2wtPmJ1ZjsKKwkJcnNzaSA9IGJ1ZjsKIAkJaXMtPnF1YWwubGV2ZWwgPSBiZTE2X3RvX2NwdShyc3NpLT5yc3NpKTsKIAkJaXMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfTEVWRUxfVVBEQVRFRCB8CiAJCQlJV19RVUFMX1FVQUxfSU5WQUxJRCB8IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKQEAgLTE1NDEsNiArMTU0NSw3IEBACiAJCWlzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9JTlZBTElEOwogCiAJa2ZyZWUoY21kKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKIAlwcl9kZWJ1ZygiJXM6IC0+XG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIGlzOwogfQpAQCAtMTU0OCwxMyArMTU1MywxNiBAQAogLyoKICAqICBzY2FubmluZyBoZWxwZXJzCiAgKi8KLXN0YXRpYyBpbnQgZ2VsaWNfd2xfc3RhcnRfc2NhbihzdHJ1Y3QgZ2VsaWNfd2xfaW5mbyAqd2wsIGludCBhbHdheXNfc2NhbikKK3N0YXRpYyBpbnQgZ2VsaWNfd2xfc3RhcnRfc2NhbihzdHJ1Y3QgZ2VsaWNfd2xfaW5mbyAqd2wsIGludCBhbHdheXNfc2NhbiwKKwkJCSAgICAgICB1OCAqZXNzaWQsIHNpemVfdCBlc3NpZF9sZW4pCiB7CiAJc3RydWN0IGdlbGljX2V1cnVzX2NtZCAqY21kOwogCWludCByZXQgPSAwOworCXZvaWQgKmJ1ZiA9IE5VTEw7CisJc2l6ZV90IGxlbjsKIAogCXByX2RlYnVnKCIlczogPC0gYWx3YXlzPSVkXG4iLCBfX2Z1bmNfXywgYWx3YXlzX3NjYW4pOwotCWlmIChkb3duX2ludGVycnVwdGlibGUoJndsLT5zY2FuX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJndsLT5zY2FuX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJLyoKQEAgLTE1NzQsMTIgKzE1ODIsMjcgQEAKIAkJY29tcGxldGUoJndsLT5zY2FuX2RvbmUpOwogCQlnb3RvIG91dDsKIAl9CisKKwkvKiBFU1NJRCBzY2FuID8gKi8KKwlpZiAoZXNzaWRfbGVuICYmIGVzc2lkKSB7CisJCWJ1ZiA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWxlbiA9IElXX0VTU0lEX01BWF9TSVpFOyAvKiBoeXBlcnZpc29yIGFsd2F5cyByZXF1aXJlcyAzMiAqLworCQltZW1zZXQoYnVmLCAwLCBsZW4pOworCQltZW1jcHkoYnVmLCBlc3NpZCwgZXNzaWRfbGVuKTsKKwkJcHJfZGVidWcoIiVzOiBlc3NpZCBzY2FuPSclcydcbiIsIF9fZnVuY19fLCAoY2hhciAqKWJ1Zik7CisJfSBlbHNlCisJCWxlbiA9IDA7CisKIAkvKgogCSAqIGlzc3VlIHN0YXJ0IHNjYW4gcmVxdWVzdAogCSAqLwogCXdsLT5zY2FuX3N0YXQgPSBHRUxJQ19XTF9TQ0FOX1NUQVRfU0NBTk5JTkc7CiAJY21kID0gZ2VsaWNfZXVydXNfc3luY19jbWQod2wsIEdFTElDX0VVUlVTX0NNRF9TVEFSVF9TQ0FOLAotCQkJCSAgIE5VTEwsIDApOworCQkJCSAgIGJ1ZiwgbGVuKTsKIAlpZiAoIWNtZCB8fCBjbWQtPnN0YXR1cyB8fCBjbWQtPmNtZF9zdGF0dXMpIHsKIAkJd2wtPnNjYW5fc3RhdCA9IEdFTElDX1dMX1NDQU5fU1RBVF9JTklUOwogCQljb21wbGV0ZSgmd2wtPnNjYW5fZG9uZSk7CkBAIC0xNTg4LDcgKzE2MTEsOCBAQAogCX0KIAlrZnJlZShjbWQpOwogb3V0OgotCXVwKCZ3bC0+c2Nhbl9sb2NrKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKKwltdXRleF91bmxvY2soJndsLT5zY2FuX2xvY2spOwogCXByX2RlYnVnKCIlczogLT5cbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTYwNywxMCArMTYzMSwxNyBAQAogCXVuaW9uIGl3cmVxX2RhdGEgZGF0YTsKIAl1bnNpZ25lZCBsb25nIHRoaXNfdGltZSA9IGppZmZpZXM7CiAJdW5zaWduZWQgaW50IGRhdGFfbGVuLCBpLCBmb3VuZCwgcjsKKwl2b2lkICpidWY7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlwcl9kZWJ1ZygiJXM6c3RhcnRcbiIsIF9fZnVuY19fKTsKLQlkb3duKCZ3bC0+c2Nhbl9sb2NrKTsKKwltdXRleF9sb2NrKCZ3bC0+c2Nhbl9sb2NrKTsKKworCWJ1ZiA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXByX2luZm8oIiVzOiBzY2FuIGJ1ZmZlciBhbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKHdsLT5zY2FuX3N0YXQgIT0gR0VMSUNfV0xfU0NBTl9TVEFUX1NDQU5OSU5HKSB7CiAJCS8qCkBAIC0xNjIyLDcgKzE2NTMsNyBAQAogCX0KIAogCWNtZCA9IGdlbGljX2V1cnVzX3N5bmNfY21kKHdsLCBHRUxJQ19FVVJVU19DTURfR0VUX1NDQU4sCi0JCQkJICAgd2wtPmJ1ZiwgUEFHRV9TSVpFKTsKKwkJCQkgICBidWYsIFBBR0VfU0laRSk7CiAJaWYgKCFjbWQgfHwgY21kLT5zdGF0dXMgfHwgY21kLT5jbWRfc3RhdHVzKSB7CiAJCXdsLT5zY2FuX3N0YXQgPSBHRUxJQ19XTF9TQ0FOX1NUQVRfSU5JVDsKIAkJcHJfaW5mbygiJXM6Y21kIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMTY0OSw3ICsxNjgwLDcgQEAKIAl9CiAKIAkvKiBwdXQgdGhlbSBpbiB0aGUgbmV3dG9ya19saXN0ICovCi0JZm9yIChpID0gMCwgc2Nhbl9pbmZvX3NpemUgPSAwLCBzY2FuX2luZm8gPSB3bC0+YnVmOworCWZvciAoaSA9IDAsIHNjYW5faW5mb19zaXplID0gMCwgc2Nhbl9pbmZvID0gYnVmOwogCSAgICAgc2Nhbl9pbmZvX3NpemUgPCBkYXRhX2xlbjsKIAkgICAgIGkrKywgc2Nhbl9pbmZvX3NpemUgKz0gYmUxNl90b19jcHUoc2Nhbl9pbmZvLT5zaXplKSwKIAkgICAgIHNjYW5faW5mbyA9ICh2b2lkICopc2Nhbl9pbmZvICsgYmUxNl90b19jcHUoc2Nhbl9pbmZvLT5zaXplKSkgewpAQCAtMTcyNiw4ICsxNzU3LDkgQEAKIAl3aXJlbGVzc19zZW5kX2V2ZW50KHBvcnRfdG9fbmV0ZGV2KHdsX3BvcnQod2wpKSwgU0lPQ0dJV1NDQU4sICZkYXRhLAogCQkJICAgIE5VTEwpOwogb3V0OgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpOwogCWNvbXBsZXRlKCZ3bC0+c2Nhbl9kb25lKTsKLQl1cCgmd2wtPnNjYW5fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+c2Nhbl9sb2NrKTsKIAlwcl9kZWJ1ZygiJXM6ZW5kXG4iLCBfX2Z1bmNfXyk7CiB9CiAKQEAgLTE4NDgsNyArMTg4MCwxMCBAQAogCiAJcHJfZGVidWcoIiVzOiA8LVxuIiwgX19mdW5jX18pOwogCS8qIHdlIGNhbiBhc3N1bWUgbm8gb25lIHNob3VsZCB1c2VzIHRoZSBidWZmZXIgKi8KLQl3ZXAgPSB3bC0+YnVmOworCXdlcCA9IChzdHJ1Y3QgZ2VsaWNfZXVydXNfd2VwX2NmZyAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXdlcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAltZW1zZXQod2VwLCAwLCBzaXplb2YoKndlcCkpOwogCiAJaWYgKHdsLT5ncm91cF9jaXBoZXJfbWV0aG9kID09IEdFTElDX1dMX0NJUEhFUl9XRVApIHsKQEAgLTE4OTgsNiArMTkzMyw3IEBACiAKIAlrZnJlZShjbWQpOwogb3V0OgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl3ZXApOwogCXByX2RlYnVnKCIlczogLT5cbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTk0MSw3ICsxOTc3LDEwIEBACiAKIAlwcl9kZWJ1ZygiJXM6IDwtXG4iLCBfX2Z1bmNfXyk7CiAJLyogd2UgY2FuIGFzc3VtZSBubyBvbmUgc2hvdWxkIHVzZXMgdGhlIGJ1ZmZlciAqLwotCXdwYSA9IHdsLT5idWY7CisJd3BhID0gKHN0cnVjdCBnZWxpY19ldXJ1c193cGFfY2ZnICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghd3BhKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCW1lbXNldCh3cGEsIDAsIHNpemVvZigqd3BhKSk7CiAKIAlpZiAoIXRlc3RfYml0KEdFTElDX1dMX1NUQVRfV1BBX1BTS19TRVQsICZ3bC0+c3RhdCkpCkBAIC0yMDAwLDYgKzIwMzksNyBAQAogCWVsc2UgaWYgKGNtZC0+c3RhdHVzIHx8IGNtZC0+Y21kX3N0YXR1cykKIAkJcmV0ID0gLUVOWElPOwogCWtmcmVlKGNtZCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXdwYSk7CiAJcHJfZGVidWcoIiVzOiAtLT4gJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMDE4LDcgKzIwNTgsMTAgQEAKIAlwcl9kZWJ1ZygiJXM6IDwtXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBkbyBjb21tb24gY29uZmlnICovCi0JY29tbW9uID0gd2wtPmJ1ZjsKKwljb21tb24gPSAoc3RydWN0IGdlbGljX2V1cnVzX2NvbW1vbl9jZmcgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFjb21tb24pCisJCXJldHVybiAtRU5PTUVNOworCiAJbWVtc2V0KGNvbW1vbiwgMCwgc2l6ZW9mKCpjb21tb24pKTsKIAljb21tb24tPmJzc190eXBlID0gY3B1X3RvX2JlMTYoR0VMSUNfRVVSVVNfQlNTX0lORlJBKTsKIAljb21tb24tPm9wX21vZGUgPSBjcHVfdG9fYmUxNihHRUxJQ19FVVJVU19PUE1PREVfMTFCRyk7CkBAIC0yMTA0LDYgKzIxNDcsNyBAQAogCQlwcl9pbmZvKCIlczogY29ubmVjdGVkXG4iLCBfX2Z1bmNfXyk7CiAJfQogb3V0OgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljb21tb24pOwogCXByX2RlYnVnKCIlczogLT5cbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjE1MSw3ICsyMTk1LDcgQEAKIAkgKiBBcyBpdCB3YWl0cyB3aXRoIHRpbWVvdXQsIGp1c3QgbGVhdmUgYXNzb2NfZG9uZQogCSAqIHVuY29tcGxldGVkLCB0aGVuIGl0IHRlcm1pbmF0ZXMgd2l0aCB0aW1lb3V0CiAJICovCi0JaWYgKGRvd25fdHJ5bG9jaygmd2wtPmFzc29jX3N0YXRfbG9jaykpIHsKKwlpZiAoIW11dGV4X3RyeWxvY2soJndsLT5hc3NvY19zdGF0X2xvY2spKSB7CiAJCXByX2RlYnVnKCIlczogYWxyZWFkeSBsb2NrZWRcbiIsIF9fZnVuY19fKTsKIAkJbG9jayA9IDA7CiAJfSBlbHNlIHsKQEAgLTIxNzAsNyArMjIxNCw3IEBACiAJbmV0aWZfY2Fycmllcl9vZmYocG9ydF90b19uZXRkZXYod2xfcG9ydCh3bCkpKTsKIAogCWlmIChsb2NrKQotCQl1cCgmd2wtPmFzc29jX3N0YXRfbG9jayk7CisJCW11dGV4X3VubG9jaygmd2wtPmFzc29jX3N0YXRfbG9jayk7CiB9CiAvKgogICogZXZlbnQgd29ya2VyCkBAIC0yMjU1LDE1ICsyMjk5LDMwIEBACiAKIAlzdHJ1Y3QgZ2VsaWNfd2xfc2Nhbl9pbmZvICpiZXN0X2JzczsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZzsKKwl1OCAqZXNzaWQ7CisJc2l6ZV90IGVzc2lkX2xlbjsKIAogCXdsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBnZWxpY193bF9pbmZvLCBhc3NvY193b3JrLndvcmspOwogCi0JZG93bigmd2wtPmFzc29jX3N0YXRfbG9jayk7CisJbXV0ZXhfbG9jaygmd2wtPmFzc29jX3N0YXRfbG9jayk7CiAKIAlpZiAod2wtPmFzc29jX3N0YXQgIT0gR0VMSUNfV0xfQVNTT0NfU1RBVF9ESVNDT05OKQogCQlnb3RvIG91dDsKIAotCXJldCA9IGdlbGljX3dsX3N0YXJ0X3NjYW4od2wsIDApOworCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+bG9jaywgaXJxZmxhZyk7CisJaWYgKHRlc3RfYml0KEdFTElDX1dMX1NUQVRfRVNTSURfU0VULCAmd2wtPnN0YXQpKSB7CisJCXByX2RlYnVnKCIlczogYXNzb2MgRVNTSUQgY29uZmlndXJlZCAlc1xuIiwgX19mdW5jX18sCisJCQkgd2wtPmVzc2lkKTsKKwkJZXNzaWQgPSB3bC0+ZXNzaWQ7CisJCWVzc2lkX2xlbiA9IHdsLT5lc3NpZF9sZW47CisJfSBlbHNlIHsKKwkJZXNzaWQgPSBOVUxMOworCQllc3NpZF9sZW4gPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+bG9jaywgaXJxZmxhZyk7CisKKwlyZXQgPSBnZWxpY193bF9zdGFydF9zY2FuKHdsLCAwLCBlc3NpZCwgZXNzaWRfbGVuKTsKIAlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykgewogCQlwcl9kZWJ1ZygiJXM6IHNjYW4gc3RhcnQgZmFpbGVkIGFzc29jaWF0aW9uXG4iLCBfX2Z1bmNfXyk7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd2wtPmFzc29jX3dvcmssIEhaLzEwKTsgLypGSVhNRSovCkBAIC0yMjgyLDcgKzIzNDEsNyBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJndsLT5zY2FuX2RvbmUpOwogCiAJcHJfZGVidWcoIiVzOiBzY2FuIGRvbmVcbiIsIF9fZnVuY19fKTsKLQlkb3duKCZ3bC0+c2Nhbl9sb2NrKTsKKwltdXRleF9sb2NrKCZ3bC0+c2Nhbl9sb2NrKTsKIAlpZiAod2wtPnNjYW5fc3RhdCAhPSBHRUxJQ19XTF9TQ0FOX1NUQVRfR09UX0xJU1QpIHsKIAkJZ2VsaWNfd2xfc2VuZF9pd2FwX2V2ZW50KHdsLCBOVUxMKTsKIAkJcHJfaW5mbygiJXM6IG5vIHNjYW4gbGlzdC4gYXNzb2NpYXRpb24gZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CkBAIC0yMzAyLDkgKzIzNjEsOSBAQAogCWlmIChyZXQpCiAJCXByX2luZm8oIiVzOiBhc3NvY2lhdGlvbiBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogc2Nhbl9sb2NrX291dDoKLQl1cCgmd2wtPnNjYW5fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+c2Nhbl9sb2NrKTsKIG91dDoKLQl1cCgmd2wtPmFzc29jX3N0YXRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+YXNzb2Nfc3RhdF9sb2NrKTsKIH0KIC8qCiAgKiBJbnRlcnJ1cHQgaGFuZGxlcgpAQCAtMjM1MSw2ICsyNDEwLDcgQEAKIAlJV19JT0NUTChTSU9DR0lXTklDS04pCQk9IGdlbGljX3dsX2dldF9uaWNrLAogfTsKIAorI2lmZGVmIENPTkZJR19HRUxJQ19XSVJFTEVTU19PTERfUFNLX0lOVEVSRkFDRQogc3RhdGljIHN0cnVjdCBpd19wcml2X2FyZ3MgZ2VsaWNfd2xfcHJpdmF0ZV9hcmdzW10gPQogewogCXsKQEAgLTIzNzIsMTUgKzI0MzIsMTggQEAKIAlnZWxpY193bF9wcml2X3NldF9wc2ssCiAJZ2VsaWNfd2xfcHJpdl9nZXRfcHNrLAogfTsKKyNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGdlbGljX3dsX3dleHRfaGFuZGxlcl9kZWYgPSB7CiAJLm51bV9zdGFuZGFyZAkJPSBBUlJBWV9TSVpFKGdlbGljX3dsX3dleHRfaGFuZGxlciksCiAJLnN0YW5kYXJkCQk9IGdlbGljX3dsX3dleHRfaGFuZGxlciwKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzCT0gZ2VsaWNfd2xfZ2V0X3dpcmVsZXNzX3N0YXRzLAorI2lmZGVmIENPTkZJR19HRUxJQ19XSVJFTEVTU19PTERfUFNLX0lOVEVSRkFDRQogCS5udW1fcHJpdmF0ZQkJPSBBUlJBWV9TSVpFKGdlbGljX3dsX3ByaXZhdGVfaGFuZGxlciksCiAJLm51bV9wcml2YXRlX2FyZ3MJPSBBUlJBWV9TSVpFKGdlbGljX3dsX3ByaXZhdGVfYXJncyksCiAJLnByaXZhdGUJCT0gZ2VsaWNfd2xfcHJpdmF0ZV9oYW5kbGVyLAogCS5wcml2YXRlX2FyZ3MJCT0gZ2VsaWNfd2xfcHJpdmF0ZV9hcmdzLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdlbGljX3dsX2FsbG9jKHN0cnVjdCBnZWxpY19jYXJkICpjYXJkKQpAQCAtMjQzMSw4ICsyNDk0LDggQEAKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZ3bC0+ZXZlbnRfd29yaywgZ2VsaWNfd2xfZXZlbnRfd29ya2VyKTsKIAlJTklUX0RFTEFZRURfV09SSygmd2wtPmFzc29jX3dvcmssIGdlbGljX3dsX2Fzc29jX3dvcmtlcik7Ci0JaW5pdF9NVVRFWCgmd2wtPnNjYW5fbG9jayk7Ci0JaW5pdF9NVVRFWCgmd2wtPmFzc29jX3N0YXRfbG9jayk7CisJbXV0ZXhfaW5pdCgmd2wtPnNjYW5fbG9jayk7CisJbXV0ZXhfaW5pdCgmd2wtPmFzc29jX3N0YXRfbG9jayk7CiAKIAlpbml0X2NvbXBsZXRpb24oJndsLT5zY2FuX2RvbmUpOwogCS8qIGZvciB0aGUgY2FzZSB0aGF0IG5vIHNjYW4gcmVxdWVzdCBpcyBpc3N1ZWQgYW5kIHN0b3AoKSBpcyBjYWxsZWQgKi8KQEAgLTI0NDYsMTYgKzI1MDksOSBAQAogCUJVSUxEX0JVR19PTihQQUdFX1NJWkUgPAogCQkgICAgIHNpemVvZihzdHJ1Y3QgZ2VsaWNfZXVydXNfc2Nhbl9pbmZvKSAqCiAJCSAgICAgR0VMSUNfRVVSVVNfTUFYX1NDQU4pOwotCXdsLT5idWYgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIXdsLT5idWYpIHsKLQkJcHJfaW5mbygiJXM6YnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZmFpbF9nZXRwYWdlOwotCX0KIAlwcl9kZWJ1ZygiJXM6ZW5kXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIG5ldGRldjsKIAotZmFpbF9nZXRwYWdlOgotCWRlc3Ryb3lfd29ya3F1ZXVlKHdsLT5ldmVudF9xdWV1ZSk7CiBmYWlsX2V2ZW50X3dvcmtxdWV1ZToKIAlkZXN0cm95X3dvcmtxdWV1ZSh3bC0+ZXVydXNfY21kX3F1ZXVlKTsKIGZhaWxfY21kX3dvcmtxdWV1ZToKQEAgLTI0NzQsOCArMjUzMCw2IEBACiAKIAlwcl9kZWJ1ZygiJXM6IDwtXG4iLCBfX2Z1bmNfXyk7CiAKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpd2wtPmJ1Zik7Ci0KIAlwcl9kZWJ1ZygiJXM6IGRlc3Ryb3kgcXVldWVzXG4iLCBfX2Z1bmNfXyk7CiAJZGVzdHJveV93b3JrcXVldWUod2wtPmV1cnVzX2NtZF9xdWV1ZSk7CiAJZGVzdHJveV93b3JrcXVldWUod2wtPmV2ZW50X3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5oIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmgKaW5kZXggMTAzNjk3MS4uNTMzOWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmgKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogI2RlZmluZSBHRUxJQ19XRVBfS0VZUyA0CiBzdHJ1Y3QgZ2VsaWNfd2xfaW5mbyB7CiAJLyogYnNzIGxpc3QgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNjYW5fbG9jazsKKwlzdHJ1Y3QgbXV0ZXggc2Nhbl9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19mcmVlX2xpc3Q7CiAJc3RydWN0IGdlbGljX3dsX3NjYW5faW5mbyAqbmV0d29ya3M7CkBAIC0yNjYsNyArMjY2LDcgQEAKIAllbnVtIGdlbGljX3dsX3dwYV9sZXZlbCB3cGFfbGV2ZWw7IC8qIHdwYS93cGEyICovCiAKIAkvKiBhc3NvY2lhdGlvbiBoYW5kbGluZyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgYXNzb2Nfc3RhdF9sb2NrOworCXN0cnVjdCBtdXRleCBhc3NvY19zdGF0X2xvY2s7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBhc3NvY193b3JrOwogCWVudW0gZ2VsaWNfd2xfYXNzb2Nfc3RhdGUgYXNzb2Nfc3RhdDsKIAlzdHJ1Y3QgY29tcGxldGlvbiBhc3NvY19kb25lOwpAQCAtMjg4LDkgKzI4OCw2IEBACiAJdTggYWN0aXZlX2Jzc2lkW0VUSF9BTEVOXTsgLyogYXNzb2NpYXRlZCBic3NpZCAqLwogCXVuc2lnbmVkIGludCBlc3NpZF9sZW47CiAKLQkvKiBidWZmZXIgZm9yIGh5cGVydmlzb3IgSU8gKi8KLQl2b2lkICpidWY7Ci0KIAlzdHJ1Y3QgaXdfcHVibGljX2RhdGEgd2lyZWxlc3NfZGF0YTsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyBpd3N0YXQ7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCmluZGV4IGJjY2VlNjguLmU3ZDQ4YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYworKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTE0MzcsOSArMTQzNyw5IEBACiAJcmVnICY9IH5QSFlfR0lHX0FMTF9QQVJBTVM7CiAKIAlpZihwb3J0Q29uZmlndXJhdGlvbiAmIFBPUlRfQ09ORklHXzEwMDBNQl9TUEVFRCkgewotCQlpZihwb3J0Q29uZmlndXJhdGlvbiAmIFBPUlRfQ09ORklHX0ZVTExfRFVQTEVYX0VOQUJMRUQpIAorCQlpZihwb3J0Q29uZmlndXJhdGlvbiAmIFBPUlRfQ09ORklHX0ZVTExfRFVQTEVYX0VOQUJMRUQpCiAJCQlyZWcgfD0gUEhZX0dJR19BRFZfMTAwMEY7Ci0JCWVsc2UgCisJCWVsc2UKIAkJCXJlZyB8PSBQSFlfR0lHX0FEVl8xMDAwSDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I2MDQwLmMgYi9kcml2ZXJzL25ldC9yNjA0MC5jCmluZGV4IDUwNGE0OGYuLjY1MzFmZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I2MDQwLmMKKysrIGIvZHJpdmVycy9uZXQvcjYwNDAuYwpAQCAtNTAsOCArNTAsOCBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicjYwNDAiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjE2IgotI2RlZmluZSBEUlZfUkVMREFURQkiMTBOb3YyMDA3IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4xOCIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjEzSnVsMjAwOCIKIAogLyogUEhZIENISVAgQWRkcmVzcyAqLwogI2RlZmluZSBQSFkxX0FERFIJMQkvKiBGb3IgTUFDMSAqLwpAQCAtOTEsNiArOTEsMTQgQEAKICNkZWZpbmUgTUlTUgkJMHgzQwkvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlFUgkJMHg0MAkvKiBJTlQgZW5hYmxlIHJlZ2lzdGVyICovCiAjZGVmaW5lICBNU0tfSU5UCTB4MDAwMAkvKiBNYXNrIG9mZiBpbnRlcnJ1cHRzICovCisjZGVmaW5lICBSWF9GSU5JU0gJMHgwMDAxICAvKiBSWCBmaW5pc2hlZCAqLworI2RlZmluZSAgUlhfTk9fREVTQwkweDAwMDIgIC8qIE5vIFJYIGRlc2NyaXB0b3IgYXZhaWxhYmxlICovCisjZGVmaW5lICBSWF9GSUZPX0ZVTEwJMHgwMDA0ICAvKiBSWCBGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgIFJYX0VBUkxZCTB4MDAwOCAgLyogUlggZWFybHkgKi8KKyNkZWZpbmUgIFRYX0ZJTklTSAkweDAwMTAgIC8qIFRYIGZpbmlzaGVkICovCisjZGVmaW5lICBUWF9FQVJMWQkweDAwODAgIC8qIFRYIGVhcmx5ICovCisjZGVmaW5lICBFVkVOVF9PVlJGTAkweDAxMDAgIC8qIEV2ZW50IGNvdW50ZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgIExJTktfQ0hBTkdFRAkweDAyMDAgIC8qIFBIWSBsaW5rIGNoYW5nZWQgKi8KICNkZWZpbmUgTUVfQ0lTUgkJMHg0NAkvKiBFdmVudCBjb3VudGVyIElOVCBzdGF0dXMgKi8KICNkZWZpbmUgTUVfQ0lFUgkJMHg0OAkvKiBFdmVudCBjb3VudGVyIElOVCBlbmFibGUgICovCiAjZGVmaW5lIE1SX0NOVAkJMHg1MAkvKiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgcGFja2V0IGNvdW50ZXIgKi8KQEAgLTEzMCw2ICsxMzgsMjEgQEAKICNkZWZpbmUgTUJDUl9ERUZBVUxUCTB4MDEyQQkvKiBNQUMgQnVzIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgTUNBU1RfTUFYCTQJLyogTWF4IG51bWJlciBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIGZpbHRlciAqLwogCisvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLworI2RlZmluZSBEU0NfT1dORVJfTUFDCTB4ODAwMAkvKiBNQUMgaXMgdGhlIG93bmVyIG9mIHRoaXMgZGVzY3JpcHRvciAqLworI2RlZmluZSBEU0NfUlhfT0sJMHg0MDAwCS8qIFJYIHdhcyBzdWNjZXNzZnVsICovCisjZGVmaW5lIERTQ19SWF9FUlIJMHgwODAwCS8qIFJYIFBIWSBlcnJvciAqLworI2RlZmluZSBEU0NfUlhfRVJSX0RSSQkweDA0MDAJLyogUlggZHJpYmJsZSBwYWNrZXQgKi8KKyNkZWZpbmUgRFNDX1JYX0VSUl9CVUYJMHgwMjAwCS8qIFJYIGxlbmd0aCBleGNlZWRzIGJ1ZmZlciBzaXplICovCisjZGVmaW5lIERTQ19SWF9FUlJfTE9ORwkweDAxMDAJLyogUlggbGVuZ3RoID4gbWF4aW11bSBwYWNrZXQgbGVuZ3RoICovCisjZGVmaW5lIERTQ19SWF9FUlJfUlVOVAkweDAwODAJLyogUlggcGFja2V0IGxlbmd0aCA8IDY0IGJ5dGUgKi8KKyNkZWZpbmUgRFNDX1JYX0VSUl9DUkMJMHgwMDQwCS8qIFJYIENSQyBlcnJvciAqLworI2RlZmluZSBEU0NfUlhfQkNBU1QJMHgwMDIwCS8qIFJYIGJyb2FkY2FzdCAobm8gZXJyb3IpICovCisjZGVmaW5lIERTQ19SWF9NQ0FTVAkweDAwMTAJLyogUlggbXVsdGljYXN0IChubyBlcnJvcikgKi8KKyNkZWZpbmUgRFNDX1JYX01DSF9ISVQJMHgwMDA4CS8qIFJYIG11bHRpY2FzdCBoaXQgaW4gaGFzaCB0YWJsZSAobm8gZXJyb3IpICovCisjZGVmaW5lIERTQ19SWF9NSURIX0hJVAkweDAwMDQJLyogUlggTUlEIHRhYmxlIGhpdCAobm8gZXJyb3IpICovCisjZGVmaW5lIERTQ19SWF9JRFhfTUlEX01BU0sgMwkvKiBSWCBtYXNrIGZvciB0aGUgaW5kZXggb2YgbWF0Y2hlZCBNSUR4ICovCisKIC8qIFBIWSBzZXR0aW5ncyAqLwogI2RlZmluZSBJQ1BMVVNfUEhZX0lECTB4MDI0MwogCkBAIC0xMzksMTAgKzE2MiwxMCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSREMgUjYwNDAgTkFQSSBQQ0kgRmFzdEV0aGVybmV0IGRyaXZlciIpOwogCi0jZGVmaW5lIFJYX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgVFhfSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAotI2RlZmluZSBSWF9OT19ERVNDX0lOVCAgICAgICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgICAgICAoUlhfSU5UIHwgVFhfSU5UKQorLyogUlggYW5kIFRYIGludGVycnVwdHMgdGhhdCB3ZSBoYW5kbGUgKi8KKyNkZWZpbmUgUlhfSU5UUwkJCShSWF9GSUZPX0ZVTEwgfCBSWF9OT19ERVNDIHwgUlhfRklOSVNIKQorI2RlZmluZSBUWF9JTlRTCQkJKFRYX0ZJTklTSCkKKyNkZWZpbmUgSU5UX01BU0sJCShSWF9JTlRTIHwgVFhfSU5UUykKIAogc3RydWN0IHI2MDQwX2Rlc2NyaXB0b3IgewogCXUxNglzdGF0dXMsIGxlbjsJCS8qIDAtMyAqLwpAQCAtMTY3LDcgKzE5MCw3IEBACiAJc3RydWN0IHI2MDQwX2Rlc2NyaXB0b3IgKnR4X3Jpbmc7CiAJZG1hX2FkZHJfdCByeF9yaW5nX2RtYTsKIAlkbWFfYWRkcl90IHR4X3JpbmdfZG1hOwotCXUxNgl0eF9mcmVlX2Rlc2MsIHJ4X2ZyZWVfZGVzYywgcGh5X2FkZHIsIHBoeV9tb2RlOworCXUxNgl0eF9mcmVlX2Rlc2MsIHBoeV9hZGRyLCBwaHlfbW9kZTsKIAl1MTYJbWNyMCwgbWNyMTsKIAl1MTYJc3dpdGNoX3NpZzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTgzLDcgKzIwNiw3IEBACiBzdGF0aWMgaW50IHBoeV90YWJsZVtdID0geyBQSFkxX0FERFIsIFBIWTJfQUREUiB9OwogCiAvKiBSZWFkIGEgd29yZCBkYXRhIGZyb20gUEhZIENoaXAgKi8KLXN0YXRpYyBpbnQgcGh5X3JlYWQodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCBwaHlfYWRkciwgaW50IHJlZykKK3N0YXRpYyBpbnQgcjYwNDBfcGh5X3JlYWQodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCBwaHlfYWRkciwgaW50IHJlZykKIHsKIAlpbnQgbGltaXQgPSAyMDQ4OwogCXUxNiBjbWQ7CkBAIC0yMDAsNyArMjIzLDcgQEAKIH0KIAogLyogV3JpdGUgYSB3b3JkIGRhdGEgZnJvbSBQSFkgQ2hpcCAqLwotc3RhdGljIHZvaWQgcGh5X3dyaXRlKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcGh5X2FkZHIsIGludCByZWcsIHUxNiB2YWwpCitzdGF0aWMgdm9pZCByNjA0MF9waHlfd3JpdGUodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCBwaHlfYWRkciwgaW50IHJlZywgdTE2IHZhbCkKIHsKIAlpbnQgbGltaXQgPSAyMDQ4OwogCXUxNiBjbWQ7CkBAIC0yMTYsMjAgKzIzOSwyMCBAQAogCX0KIH0KIAotc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1paV9pZCwgaW50IHJlZykKK3N0YXRpYyBpbnQgcjYwNDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtaWlfaWQsIGludCByZWcpCiB7CiAJc3RydWN0IHI2MDQwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGxwLT5iYXNlOwogCi0JcmV0dXJuIChwaHlfcmVhZChpb2FkZHIsIGxwLT5waHlfYWRkciwgcmVnKSk7CisJcmV0dXJuIChyNjA0MF9waHlfcmVhZChpb2FkZHIsIGxwLT5waHlfYWRkciwgcmVnKSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1paV9pZCwgaW50IHJlZywgaW50IHZhbCkKK3N0YXRpYyB2b2lkIHI2MDQwX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1paV9pZCwgaW50IHJlZywgaW50IHZhbCkKIHsKIAlzdHJ1Y3QgcjYwNDBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CiAKLQlwaHlfd3JpdGUoaW9hZGRyLCBscC0+cGh5X2FkZHIsIHJlZywgdmFsKTsKKwlyNjA0MF9waHlfd3JpdGUoaW9hZGRyLCBscC0+cGh5X2FkZHIsIHJlZywgdmFsKTsKIH0KIAogc3RhdGljIHZvaWQgcjYwNDBfZnJlZV90eGJ1ZnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI4Myw1OCArMzA2LDEwMSBAQAogCWRlc2MtPnZuZGVzY3AgPSBkZXNjX3Jpbmc7CiB9CiAKLS8qIEFsbG9jYXRlIHNrYiBidWZmZXIgZm9yIHJ4IGRlc2NyaXB0b3IgKi8KLXN0YXRpYyB2b2lkIHJ4X2J1Zl9hbGxvYyhzdHJ1Y3QgcjYwNDBfcHJpdmF0ZSAqbHAsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHI2MDQwX2Rlc2NyaXB0b3IgKmRlc2NwdHI7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKLQotCWRlc2NwdHIgPSBscC0+cnhfaW5zZXJ0X3B0cjsKLQl3aGlsZSAobHAtPnJ4X2ZyZWVfZGVzYyA8IFJYX0RDTlQpIHsKLQkJZGVzY3B0ci0+c2tiX3B0ciA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBNQVhfQlVGX1NJWkUpOwotCi0JCWlmICghZGVzY3B0ci0+c2tiX3B0cikKLQkJCWJyZWFrOwotCQlkZXNjcHRyLT5idWYgPSBjcHVfdG9fbGUzMihwY2lfbWFwX3NpbmdsZShscC0+cGRldiwKLQkJCWRlc2NwdHItPnNrYl9wdHItPmRhdGEsCi0JCQlNQVhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSkpOwotCQlkZXNjcHRyLT5zdGF0dXMgPSAweDgwMDA7Ci0JCWRlc2NwdHIgPSBkZXNjcHRyLT52bmRlc2NwOwotCQlscC0+cnhfZnJlZV9kZXNjKys7Ci0JCS8qIFRyaWdnZXIgUlggRE1BICovCi0JCWlvd3JpdGUxNihscC0+bWNyMCB8IDB4MDAwMiwgaW9hZGRyKTsKLQl9Ci0JbHAtPnJ4X2luc2VydF9wdHIgPSBkZXNjcHRyOwotfQotCi1zdGF0aWMgdm9pZCByNjA0MF9hbGxvY190eGJ1ZnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHI2MDQwX2luaXRfdHhidWZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHI2MDQwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGxwLT5iYXNlOwogCiAJbHAtPnR4X2ZyZWVfZGVzYyA9IFRYX0RDTlQ7CiAKIAlscC0+dHhfcmVtb3ZlX3B0ciA9IGxwLT50eF9pbnNlcnRfcHRyID0gbHAtPnR4X3Jpbmc7CiAJcjYwNDBfaW5pdF9yaW5nX2Rlc2MobHAtPnR4X3JpbmcsIGxwLT50eF9yaW5nX2RtYSwgVFhfRENOVCk7Ci0KLQlpb3dyaXRlMTYobHAtPnR4X3JpbmdfZG1hLCBpb2FkZHIgKyBNVERfU0EwKTsKLQlpb3dyaXRlMTYobHAtPnR4X3JpbmdfZG1hID4+IDE2LCBpb2FkZHIgKyBNVERfU0ExKTsKIH0KIAotc3RhdGljIHZvaWQgcjYwNDBfYWxsb2NfcnhidWZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHI2MDQwX2FsbG9jX3J4YnVmcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByNjA0MF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKLQotCWxwLT5yeF9mcmVlX2Rlc2MgPSAwOworCXN0cnVjdCByNjA0MF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJjOwogCiAJbHAtPnJ4X3JlbW92ZV9wdHIgPSBscC0+cnhfaW5zZXJ0X3B0ciA9IGxwLT5yeF9yaW5nOwogCXI2MDQwX2luaXRfcmluZ19kZXNjKGxwLT5yeF9yaW5nLCBscC0+cnhfcmluZ19kbWEsIFJYX0RDTlQpOwogCi0JcnhfYnVmX2FsbG9jKGxwLCBkZXYpOworCS8qIEFsbG9jYXRlIHNrYnMgZm9yIHRoZSByeCBkZXNjcmlwdG9ycyAqLworCWRlc2MgPSBscC0+cnhfcmluZzsKKwlkbyB7CisJCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBNQVhfQlVGX1NJWkUpOworCQlpZiAoIXNrYikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIHNrYiBmb3IgcnhcbiIsIGRldi0+bmFtZSk7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9leGl0OworCQl9CisJCWRlc2MtPnNrYl9wdHIgPSBza2I7CisJCWRlc2MtPmJ1ZiA9IGNwdV90b19sZTMyKHBjaV9tYXBfc2luZ2xlKGxwLT5wZGV2LAorCQkJCQkJZGVzYy0+c2tiX3B0ci0+ZGF0YSwKKwkJCQkJCU1BWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKSk7CisJCWRlc2MtPnN0YXR1cyA9IERTQ19PV05FUl9NQUM7CisJCWRlc2MgPSBkZXNjLT52bmRlc2NwOworCX0gd2hpbGUgKGRlc2MgIT0gbHAtPnJ4X3JpbmcpOwogCisJcmV0dXJuIDA7CisKK2Vycl9leGl0OgorCS8qIERlYWxsb2NhdGUgYWxsIHByZXZpb3VzbHkgYWxsb2NhdGVkIHNrYnMgKi8KKwlyNjA0MF9mcmVlX3J4YnVmcyhkZXYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgcjYwNDBfaW5pdF9tYWNfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCByNjA0MF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKwlpbnQgbGltaXQgPSAyMDQ4OworCXUxNiBjbWQ7CisKKwkvKiBNYXNrIE9mZiBJbnRlcnJ1cHQgKi8KKwlpb3dyaXRlMTYoTVNLX0lOVCwgaW9hZGRyICsgTUlFUik7CisKKwkvKiBSZXNldCBSREMgTUFDICovCisJaW93cml0ZTE2KE1BQ19SU1QsIGlvYWRkciArIE1DUjEpOworCXdoaWxlIChsaW1pdC0tKSB7CisJCWNtZCA9IGlvcmVhZDE2KGlvYWRkciArIE1DUjEpOworCQlpZiAoY21kICYgMHgxKQorCQkJYnJlYWs7CisJfQorCS8qIFJlc2V0IGludGVybmFsIHN0YXRlIG1hY2hpbmUgKi8KKwlpb3dyaXRlMTYoMiwgaW9hZGRyICsgTUFDX1NNKTsKKwlpb3dyaXRlMTYoMCwgaW9hZGRyICsgTUFDX1NNKTsKKwl1ZGVsYXkoNTAwMCk7CisKKwkvKiBNQUMgQnVzIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwlpb3dyaXRlMTYoTUJDUl9ERUZBVUxULCBpb2FkZHIgKyBNQkNSKTsKKworCS8qIEJ1ZmZlciBTaXplIFJlZ2lzdGVyICovCisJaW93cml0ZTE2KE1BWF9CVUZfU0laRSwgaW9hZGRyICsgTVJfQlNSKTsKKworCS8qIFdyaXRlIFRYIHJpbmcgc3RhcnQgYWRkcmVzcyAqLworCWlvd3JpdGUxNihscC0+dHhfcmluZ19kbWEsIGlvYWRkciArIE1URF9TQTApOworCWlvd3JpdGUxNihscC0+dHhfcmluZ19kbWEgPj4gMTYsIGlvYWRkciArIE1URF9TQTEpOworCisJLyogV3JpdGUgUlggcmluZyBzdGFydCBhZGRyZXNzICovCiAJaW93cml0ZTE2KGxwLT5yeF9yaW5nX2RtYSwgaW9hZGRyICsgTVJEX1NBMCk7CiAJaW93cml0ZTE2KGxwLT5yeF9yaW5nX2RtYSA+PiAxNiwgaW9hZGRyICsgTVJEX1NBMSk7CisKKwkvKiBTZXQgaW50ZXJydXB0IHdhaXRpbmcgdGltZSBhbmQgcGFja2V0IG51bWJlcnMgKi8KKwlpb3dyaXRlMTYoMCwgaW9hZGRyICsgTVRfSUNSKTsKKwlpb3dyaXRlMTYoMCwgaW9hZGRyICsgTVJfSUNSKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJaW93cml0ZTE2KElOVF9NQVNLLCBpb2FkZHIgKyBNSUVSKTsKKworCS8qIEVuYWJsZSBUWCBhbmQgUlggKi8KKwlpb3dyaXRlMTYobHAtPm1jcjAgfCAweDAwMDIsIGlvYWRkcik7CisKKwkvKiBMZXQgVFggcG9sbCB0aGUgZGVzY3JpcHRvcnMKKwkgKiB3ZSBtYXkgZ290IGNhbGxlZCBieSByNjA0MF90eF90aW1lb3V0IHdoaWNoIGhhcyBsZWZ0CisJICogc29tZSB1bnNlbnQgdHggYnVmZmVycyAqLworCWlvd3JpdGUxNigweDAxLCBpb2FkZHIgKyBNVFBSKTsKIH0KIAogc3RhdGljIHZvaWQgcjYwNDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzQyLDI3ICs0MDgsMTYgQEAKIAlzdHJ1Y3QgcjYwNDBfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwcml2LT5iYXNlOwogCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU0LjR4LCBQSFkgc3RhdHVzICIKLQkJIiU0LjR4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXQsIGludCBlbmFibGUgJTQuNHggIgorCQkic3RhdHVzICU0LjR4LCBQSFkgc3RhdHVzICU0LjR4XG4iLAogCQlkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIE1JRVIpLAotCQltZGlvX3JlYWQoZGV2LCBwcml2LT5taWlfaWYucGh5X2lkLCBNSUlfQk1TUikpOwotCi0JZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwotCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7Ci0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQkvKiBDbGVhciBhbGwgZGVzY3JpcHRvcnMgKi8KLQlyNjA0MF9mcmVlX3R4YnVmcyhkZXYpOwotCXI2MDQwX2ZyZWVfcnhidWZzKGRldik7Ci0JcjYwNDBfYWxsb2NfdHhidWZzKGRldik7Ci0JcjYwNDBfYWxsb2NfcnhidWZzKGRldik7Ci0KLQkvKiBSZXNldCBNQUMgKi8KLQlpb3dyaXRlMTYoTUFDX1JTVCwgaW9hZGRyICsgTUNSMSk7Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCQlpb3JlYWQxNihpb2FkZHIgKyBNSVNSKSwKKwkJcjYwNDBfbWRpb19yZWFkKGRldiwgcHJpdi0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNU1IpKTsKIAogCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCisJLyogUmVzZXQgTUFDIGFuZCByZS1pbml0IGFsbCByZWdpc3RlcnMgKi8KKwlyNjA0MF9pbml0X21hY19yZWdzKGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcjYwNDBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00MjQsNiArNDc5LDcgQEAKIAlkZWxfdGltZXJfc3luYygmbHAtPnRpbWVyKTsKIAogCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwluYXBpX2Rpc2FibGUoJmxwLT5uYXBpKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcjYwNDBfZG93bihkZXYpOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwpAQCAtNDMyLDIzICs0ODgsMjMgQEAKIH0KIAogLyogU3RhdHVzIG9mIFBIWSBDSElQICovCi1zdGF0aWMgaW50IHBoeV9tb2RlX2NoayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCByNjA0MF9waHlfbW9kZV9jaGsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcjYwNDBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CiAJaW50IHBoeV9kYXQ7CiAKIAkvKiBQSFkgTGluayBTdGF0dXMgQ2hlY2sgKi8KLQlwaHlfZGF0ID0gcGh5X3JlYWQoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDEpOworCXBoeV9kYXQgPSByNjA0MF9waHlfcmVhZChpb2FkZHIsIGxwLT5waHlfYWRkciwgMSk7CiAJaWYgKCEocGh5X2RhdCAmIDB4NCkpCiAJCXBoeV9kYXQgPSAweDgwMDA7CS8qIExpbmsgRmFpbGVkLCBmdWxsIGR1cGxleCAqLwogCiAJLyogUEhZIENoaXAgQXV0by1OZWdvdGlhdGlvbiBTdGF0dXMgKi8KLQlwaHlfZGF0ID0gcGh5X3JlYWQoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDEpOworCXBoeV9kYXQgPSByNjA0MF9waHlfcmVhZChpb2FkZHIsIGxwLT5waHlfYWRkciwgMSk7CiAJaWYgKHBoeV9kYXQgJiAweDAwMjApIHsKIAkJLyogQXV0byBOZWdvdGlhdGlvbiBNb2RlICovCi0JCXBoeV9kYXQgPSBwaHlfcmVhZChpb2FkZHIsIGxwLT5waHlfYWRkciwgNSk7Ci0JCXBoeV9kYXQgJj0gcGh5X3JlYWQoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDQpOworCQlwaHlfZGF0ID0gcjYwNDBfcGh5X3JlYWQoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDUpOworCQlwaHlfZGF0ICY9IHI2MDQwX3BoeV9yZWFkKGlvYWRkciwgbHAtPnBoeV9hZGRyLCA0KTsKIAkJaWYgKHBoeV9kYXQgJiAweDE0MCkKIAkJCS8qIEZvcmNlIGZ1bGwgZHVwbGV4ICovCiAJCQlwaHlfZGF0ID0gMHg4MDAwOwpAQCAtNDU2LDcgKzUxMiw3IEBACiAJCQlwaHlfZGF0ID0gMDsKIAl9IGVsc2UgewogCQkvKiBGb3JjZSBNb2RlICovCi0JCXBoeV9kYXQgPSBwaHlfcmVhZChpb2FkZHIsIGxwLT5waHlfYWRkciwgMCk7CisJCXBoeV9kYXQgPSByNjA0MF9waHlfcmVhZChpb2FkZHIsIGxwLT5waHlfYWRkciwgMCk7CiAJCWlmIChwaHlfZGF0ICYgMHgxMDApCiAJCQlwaHlfZGF0ID0gMHg4MDAwOwogCQllbHNlCkBAIC00NjgsMTIgKzUyNCwxMiBAQAogCiBzdGF0aWMgdm9pZCByNjA0MF9zZXRfY2FycmllcihzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSkKIHsKLQlpZiAocGh5X21vZGVfY2hrKG1paS0+ZGV2KSkgeworCWlmIChyNjA0MF9waHlfbW9kZV9jaGsobWlpLT5kZXYpKSB7CiAJCS8qIGF1dG9uZWcgaXMgb2ZmOiBMaW5rIGlzIGFsd2F5cyBhc3N1bWVkIHRvIGJlIHVwICovCiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhtaWktPmRldikpCiAJCQluZXRpZl9jYXJyaWVyX29uKG1paS0+ZGV2KTsKIAl9IGVsc2UKLQkJcGh5X21vZGVfY2hrKG1paS0+ZGV2KTsKKwkJcjYwNDBfcGh5X21vZGVfY2hrKG1paS0+ZGV2KTsKIH0KIAogc3RhdGljIGludCByNjA0MF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQpAQCAtNDk0LDczICs1NTAsNzIgQEAKIHN0YXRpYyBpbnQgcjYwNDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxpbWl0KQogewogCXN0cnVjdCByNjA0MF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgY291bnQ7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwcml2LT5iYXNlOworCXN0cnVjdCByNjA0MF9kZXNjcmlwdG9yICpkZXNjcHRyID0gcHJpdi0+cnhfcmVtb3ZlX3B0cjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3B0ciwgKm5ld19za2I7CisJaW50IGNvdW50ID0gMDsKIAl1MTYgZXJyOwogCi0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbGltaXQ7ICsrY291bnQpIHsKLQkJc3RydWN0IHI2MDQwX2Rlc2NyaXB0b3IgKmRlc2NwdHIgPSBwcml2LT5yeF9yZW1vdmVfcHRyOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3B0cjsKLQotCQkvKiBEaXNhYmxlIFJYIGludGVycnVwdCAqLwotCQlpb3dyaXRlMTYoaW9yZWFkMTYoaW9hZGRyICsgTUlFUikgJiAoflJYX0lOVCksIGlvYWRkciArIE1JRVIpOwotCQlkZXNjcHRyID0gcHJpdi0+cnhfcmVtb3ZlX3B0cjsKLQotCQkvKiBDaGVjayBmb3IgZXJyb3JzICovCi0JCWVyciA9IGlvcmVhZDE2KGlvYWRkciArIE1MU1IpOwotCQlpZiAoZXJyICYgMHgwNDAwKQotCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJLyogUlggRklGTyBvdmVyLXJ1biAqLwotCQlpZiAoZXJyICYgMHg4MDAwKQotCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwotCQkvKiBSWCBkZXNjcmlwdG9yIHVuYXZhaWxhYmxlICovCi0JCWlmIChlcnIgJiAweDAwODApCi0JCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwotCQkvKiBSZWNlaXZlZCBwYWNrZXQgd2l0aCBsZW5ndGggb3ZlciBidWZmZXIgbGVuZ2h0ICovCi0JCWlmIChlcnIgJiAweDAwMjApCi0JCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7Ci0JCS8qIFJlY2VpdmVkIHBhY2tldCB3aXRoIHRvbyBsb25nIG9yIHNob3J0ICovCi0JCWlmIChlcnIgJiAoMHgwMDEwIHwgMHgwMDA4KSkKLQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkvKiBSZWNlaXZlZCBwYWNrZXQgd2l0aCBDUkMgZXJyb3JzICovCi0JCWlmIChlcnIgJiAweDAwMDQpIHsKLQkJCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQkJfQotCi0JCXdoaWxlIChwcml2LT5yeF9mcmVlX2Rlc2MpIHsKLQkJCS8qIE5vIFJYIHBhY2tldCAqLwotCQkJaWYgKGRlc2NwdHItPnN0YXR1cyAmIDB4ODAwMCkKLQkJCQlicmVhazsKLQkJCXNrYl9wdHIgPSBkZXNjcHRyLT5za2JfcHRyOwotCQkJaWYgKCFza2JfcHRyKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb25zaXN0ZW50IFJYIgotCQkJCQkiZGVzY3JpcHRvciBjaGFpblxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCQlicmVhazsKKwkvKiBMaW1pdCBub3QgcmVhY2hlZCBhbmQgdGhlIGRlc2NyaXB0b3IgYmVsb25ncyB0byB0aGUgQ1BVICovCisJd2hpbGUgKGNvdW50IDwgbGltaXQgJiYgIShkZXNjcHRyLT5zdGF0dXMgJiBEU0NfT1dORVJfTUFDKSkgeworCQkvKiBSZWFkIHRoZSBkZXNjcmlwdG9yIHN0YXR1cyAqLworCQllcnIgPSBkZXNjcHRyLT5zdGF0dXM7CisJCS8qIEdsb2JhbCBlcnJvciBzdGF0dXMgc2V0ICovCisJCWlmIChlcnIgJiBEU0NfUlhfRVJSKSB7CisJCQkvKiBSWCBkcmliYmxlICovCisJCQlpZiAoZXJyICYgRFNDX1JYX0VSUl9EUkkpCisJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCS8qIEJ1ZmZlciBsZW5naHQgZXhjZWVkZWQgKi8KKwkJCWlmIChlcnIgJiBEU0NfUlhfRVJSX0JVRikKKwkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCS8qIFBhY2tldCB0b28gbG9uZyAqLworCQkJaWYgKGVyciAmIERTQ19SWF9FUlJfTE9ORykKKwkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCS8qIFBhY2tldCA8IDY0IGJ5dGVzICovCisJCQlpZiAoZXJyICYgRFNDX1JYX0VSUl9SVU5UKQorCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJLyogQ1JDIGVycm9yICovCisJCQlpZiAoZXJyICYgRFNDX1JYX0VSUl9DUkMpIHsKKwkJCQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAkJCX0KLQkJCWRlc2NwdHItPnNrYl9wdHIgPSBOVUxMOwotCQkJc2tiX3B0ci0+ZGV2ID0gcHJpdi0+ZGV2OwotCQkJLyogRG8gbm90IGNvdW50IHRoZSBDUkMgKi8KLQkJCXNrYl9wdXQoc2tiX3B0ciwgZGVzY3B0ci0+bGVuIC0gNCk7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGxlMzJfdG9fY3B1KGRlc2NwdHItPmJ1ZiksCi0JCQkJTUFYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJc2tiX3B0ci0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2JfcHRyLCBwcml2LT5kZXYpOwotCQkJLyogU2VuZCB0byB1cHBlciBsYXllciAqLwotCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiX3B0cik7Ci0JCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGRlc2NwdHItPmxlbjsKLQkJCS8qIFRvIG5leHQgZGVzY3JpcHRvciAqLwotCQkJZGVzY3B0ciA9IGRlc2NwdHItPnZuZGVzY3A7Ci0JCQlwcml2LT5yeF9mcmVlX2Rlc2MtLTsKKwkJCWdvdG8gbmV4dF9kZXNjcjsKIAkJfQotCQlwcml2LT5yeF9yZW1vdmVfcHRyID0gZGVzY3B0cjsKKwkJCisJCS8qIFBhY2tldCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgKi8KKwkJbmV3X3NrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBNQVhfQlVGX1NJWkUpOworCQlpZiAoIW5ld19za2IpIHsKKwkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJZ290byBuZXh0X2Rlc2NyOworCQl9CisJCXNrYl9wdHIgPSBkZXNjcHRyLT5za2JfcHRyOworCQlza2JfcHRyLT5kZXYgPSBwcml2LT5kZXY7CisJCQorCQkvKiBEbyBub3QgY291bnQgdGhlIENSQyAqLworCQlza2JfcHV0KHNrYl9wdHIsIGRlc2NwdHItPmxlbiAtIDQpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGxlMzJfdG9fY3B1KGRlc2NwdHItPmJ1ZiksCisJCQkJCU1BWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJc2tiX3B0ci0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2JfcHRyLCBwcml2LT5kZXYpOworCQkKKwkJLyogU2VuZCB0byB1cHBlciBsYXllciAqLworCQluZXRpZl9yZWNlaXZlX3NrYihza2JfcHRyKTsKKwkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gZGVzY3B0ci0+bGVuIC0gNDsKKworCQkvKiBwdXQgbmV3IHNrYiBpbnRvIGRlc2NyaXB0b3IgKi8KKwkJZGVzY3B0ci0+c2tiX3B0ciA9IG5ld19za2I7CisJCWRlc2NwdHItPmJ1ZiA9IGNwdV90b19sZTMyKHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsCisJCQkJCQlkZXNjcHRyLT5za2JfcHRyLT5kYXRhLAorCQkJCQlNQVhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSkpOworCituZXh0X2Rlc2NyOgorCQkvKiBwdXQgdGhlIGRlc2NyaXB0b3IgYmFjayB0byB0aGUgTUFDICovCisJCWRlc2NwdHItPnN0YXR1cyA9IERTQ19PV05FUl9NQUM7CisJCWRlc2NwdHIgPSBkZXNjcHRyLT52bmRlc2NwOworCQljb3VudCsrOwogCX0KLQkvKiBBbGxvY2F0ZSBuZXcgUlggYnVmZmVyICovCi0JaWYgKHByaXYtPnJ4X2ZyZWVfZGVzYyA8IFJYX0RDTlQpCi0JCXJ4X2J1Zl9hbGxvYyhwcml2LCBwcml2LT5kZXYpOworCXByaXYtPnJ4X3JlbW92ZV9wdHIgPSBkZXNjcHRyOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNTg0LDcgKzYzOSw3IEBACiAJCWlmIChlcnIgJiAoMHgyMDAwIHwgMHg0MDAwKSkKIAkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAotCQlpZiAoZGVzY3B0ci0+c3RhdHVzICYgMHg4MDAwKQorCQlpZiAoZGVzY3B0ci0+c3RhdHVzICYgRFNDX09XTkVSX01BQykKIAkJCWJyZWFrOyAvKiBOb3QgY29tcGxldGUgKi8KIAkJc2tiX3B0ciA9IGRlc2NwdHItPnNrYl9wdHI7CiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgbGUzMl90b19jcHUoZGVzY3B0ci0+YnVmKSwKQEAgLTYxNiw3ICs2NzEsNyBAQAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJbmV0aWZfcnhfY29tcGxldGUoZGV2LCBuYXBpKTsKIAkJLyogRW5hYmxlIFJYIGludGVycnVwdCAqLwotCQlpb3dyaXRlMTYoaW9yZWFkMTYoaW9hZGRyICsgTUlFUikgfCBSWF9JTlQsIGlvYWRkciArIE1JRVIpOworCQlpb3dyaXRlMTYoaW9yZWFkMTYoaW9hZGRyICsgTUlFUikgfCBSWF9JTlRTLCBpb2FkZHIgKyBNSUVSKTsKIAl9CiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KQEAgLTYzOCwxMyArNjkzLDIyIEBACiAJCXJldHVybiBJUlFfTk9ORTsKIAogCS8qIFJYIGludGVycnVwdCByZXF1ZXN0ICovCi0JaWYgKHN0YXR1cyAmIDB4MDEpIHsKKwlpZiAoc3RhdHVzICYgUlhfSU5UUykgeworCQlpZiAoc3RhdHVzICYgUlhfTk9fREVTQykgeworCQkJLyogUlggZGVzY3JpcHRvciB1bmF2YWlsYWJsZSAqLworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJfQorCQlpZiAoc3RhdHVzICYgUlhfRklGT19GVUxMKQorCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCisJCS8qIE1hc2sgb2ZmIFJYIGludGVycnVwdCAqLworCQlpb3dyaXRlMTYoaW9yZWFkMTYoaW9hZGRyICsgTUlFUikgJiB+UlhfSU5UUywgaW9hZGRyICsgTUlFUik7CiAJCW5ldGlmX3J4X3NjaGVkdWxlKGRldiwgJmxwLT5uYXBpKTsKLQkJaW93cml0ZTE2KFRYX0lOVCwgaW9hZGRyICsgTUlFUik7CiAJfQogCiAJLyogVFggaW50ZXJydXB0IHJlcXVlc3QgKi8KLQlpZiAoc3RhdHVzICYgMHgxMCkKKwlpZiAoc3RhdHVzICYgVFhfSU5UUykKIAkJcjYwNDBfdHgoZGV2KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTY2MCw1MiArNzI0LDQ4IEBACiAjZW5kaWYKIAogLyogSW5pdCBSREMgTUFDICovCi1zdGF0aWMgdm9pZCByNjA0MF91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCByNjA0MF91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByNjA0MF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKwlpbnQgcmV0OwogCiAJLyogSW5pdGlhbGlzZSBhbmQgYWxsb2MgUlgvVFggYnVmZmVycyAqLwotCXI2MDQwX2FsbG9jX3R4YnVmcyhkZXYpOwotCXI2MDQwX2FsbG9jX3J4YnVmcyhkZXYpOworCXI2MDQwX2luaXRfdHhidWZzKGRldik7CisJcmV0ID0gcjYwNDBfYWxsb2NfcnhidWZzKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCS8qIEJ1ZmZlciBTaXplIFJlZ2lzdGVyICovCi0JaW93cml0ZTE2KE1BWF9CVUZfU0laRSwgaW9hZGRyICsgTVJfQlNSKTsKIAkvKiBSZWFkIHRoZSBQSFkgSUQgKi8KLQlscC0+c3dpdGNoX3NpZyA9IHBoeV9yZWFkKGlvYWRkciwgMCwgMik7CisJbHAtPnN3aXRjaF9zaWcgPSByNjA0MF9waHlfcmVhZChpb2FkZHIsIDAsIDIpOwogCiAJaWYgKGxwLT5zd2l0Y2hfc2lnICA9PSBJQ1BMVVNfUEhZX0lEKSB7Ci0JCXBoeV93cml0ZShpb2FkZHIsIDI5LCAzMSwgMHgxNzVDKTsgLyogRW5hYmxlIHJlZ2lzdGVycyAqLworCQlyNjA0MF9waHlfd3JpdGUoaW9hZGRyLCAyOSwgMzEsIDB4MTc1Qyk7IC8qIEVuYWJsZSByZWdpc3RlcnMgKi8KIAkJbHAtPnBoeV9tb2RlID0gMHg4MDAwOwogCX0gZWxzZSB7CiAJCS8qIFBIWSBNb2RlIENoZWNrICovCi0JCXBoeV93cml0ZShpb2FkZHIsIGxwLT5waHlfYWRkciwgNCwgUEhZX0NBUCk7Ci0JCXBoeV93cml0ZShpb2FkZHIsIGxwLT5waHlfYWRkciwgMCwgUEhZX01PREUpOworCQlyNjA0MF9waHlfd3JpdGUoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDQsIFBIWV9DQVApOworCQlyNjA0MF9waHlfd3JpdGUoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDAsIFBIWV9NT0RFKTsKIAogCQlpZiAoUEhZX01PREUgPT0gMHgzMTAwKQotCQkJbHAtPnBoeV9tb2RlID0gcGh5X21vZGVfY2hrKGRldik7CisJCQlscC0+cGh5X21vZGUgPSByNjA0MF9waHlfbW9kZV9jaGsoZGV2KTsKIAkJZWxzZQogCQkJbHAtPnBoeV9tb2RlID0gKFBIWV9NT0RFICYgMHgwMTAwKSA/IDB4ODAwMDoweDA7CiAJfQotCS8qIE1BQyBCdXMgQ29udHJvbCBSZWdpc3RlciAqLwotCWlvd3JpdGUxNihNQkNSX0RFRkFVTFQsIGlvYWRkciArIE1CQ1IpOwogCi0JLyogTUFDIFRYL1JYIEVuYWJsZSAqLworCS8qIFNldCBkdXBsZXggbW9kZSAqLwogCWxwLT5tY3IwIHw9IGxwLT5waHlfbW9kZTsKLQlpb3dyaXRlMTYobHAtPm1jcjAsIGlvYWRkcik7Ci0KLQkvKiBzZXQgaW50ZXJydXB0IHdhaXRpbmcgdGltZSBhbmQgcGFja2V0IG51bWJlcnMgKi8KLQlpb3dyaXRlMTYoMHgwRjA2LCBpb2FkZHIgKyBNVF9JQ1IpOwotCWlvd3JpdGUxNigweDBGMDYsIGlvYWRkciArIE1SX0lDUik7CiAKIAkvKiBpbXByb3ZlIHBlcmZvcm1hbmNlIChieSBSREMgZ3V5cykgKi8KLQlwaHlfd3JpdGUoaW9hZGRyLCAzMCwgMTcsIChwaHlfcmVhZChpb2FkZHIsIDMwLCAxNykgfCAweDQwMDApKTsKLQlwaHlfd3JpdGUoaW9hZGRyLCAzMCwgMTcsIH4oKH5waHlfcmVhZChpb2FkZHIsIDMwLCAxNykpIHwgMHgyMDAwKSk7Ci0JcGh5X3dyaXRlKGlvYWRkciwgMCwgMTksIDB4MDAwMCk7Ci0JcGh5X3dyaXRlKGlvYWRkciwgMCwgMzAsIDB4MDFGMCk7CisJcjYwNDBfcGh5X3dyaXRlKGlvYWRkciwgMzAsIDE3LCAocjYwNDBfcGh5X3JlYWQoaW9hZGRyLCAzMCwgMTcpIHwgMHg0MDAwKSk7CisJcjYwNDBfcGh5X3dyaXRlKGlvYWRkciwgMzAsIDE3LCB+KCh+cjYwNDBfcGh5X3JlYWQoaW9hZGRyLCAzMCwgMTcpKSB8IDB4MjAwMCkpOworCXI2MDQwX3BoeV93cml0ZShpb2FkZHIsIDAsIDE5LCAweDAwMDApOworCXI2MDQwX3BoeV93cml0ZShpb2FkZHIsIDAsIDMwLCAweDAxRjApOwogCi0JLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLQlpb3dyaXRlMTYoSU5UX01BU0ssIGlvYWRkciArIE1JRVIpOworCS8qIEluaXRpYWxpemUgYWxsIE1BQyByZWdpc3RlcnMgKi8KKwlyNjA0MF9pbml0X21hY19yZWdzKGRldik7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTcyMSw3ICs3ODEsNyBAQAogCiAJLyogUG9sbGluZyBQSFkgQ2hpcCBTdGF0dXMgKi8KIAlpZiAoUEhZX01PREUgPT0gMHgzMTAwKQotCQlwaHlfbW9kZSA9IHBoeV9tb2RlX2NoayhkZXYpOworCQlwaHlfbW9kZSA9IHI2MDQwX3BoeV9tb2RlX2NoayhkZXYpOwogCWVsc2UKIAkJcGh5X21vZGUgPSAoUEhZX01PREUgJiAweDAxMDApID8gMHg4MDAwOjB4MDsKIApAQCAtNzg0LDcgKzg0NCwxNCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyNjA0MF91cChkZXYpOworCXJldCA9IHI2MDQwX3VwKGRldik7CisJaWYgKHJldCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wZGV2LCBUWF9ERVNDX1NJWkUsIGxwLT50eF9yaW5nLAorCQkJCQkJCWxwLT50eF9yaW5nX2RtYSk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBkZXYsIFJYX0RFU0NfU0laRSwgbHAtPnJ4X3JpbmcsCisJCQkJCQkJbHAtPnJ4X3JpbmdfZG1hKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAluYXBpX2VuYWJsZSgmbHAtPm5hcGkpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CkBAIC04MzAsNyArODk3LDcgQEAKIAlkZXNjcHRyLT5za2JfcHRyID0gc2tiOwogCWRlc2NwdHItPmJ1ZiA9IGNwdV90b19sZTMyKHBjaV9tYXBfc2luZ2xlKGxwLT5wZGV2LAogCQlza2ItPmRhdGEsIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKSk7Ci0JZGVzY3B0ci0+c3RhdHVzID0gMHg4MDAwOworCWRlc2NwdHItPnN0YXR1cyA9IERTQ19PV05FUl9NQUM7CiAJLyogVHJpZ2dlciB0aGUgTUFDIHRvIGNoZWNrIHRoZSBUWCBkZXNjcmlwdG9yICovCiAJaW93cml0ZTE2KDB4MDEsIGlvYWRkciArIE1UUFIpOwogCWxwLT50eF9pbnNlcnRfcHRyID0gZGVzY3B0ci0+dm5kZXNjcDsKQEAgLTk4NywyNCArMTA1NCwyNyBAQAogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfb3V0OwogCiAJLyogdGhpcyBzaG91bGQgYWx3YXlzIGJlIHN1cHBvcnRlZCAqLwotCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIzMi1iaXQgUENJIERNQSBhZGRyZXNzZXMiCiAJCQkJIm5vdCBzdXBwb3J0ZWQgYnkgdGhlIGNhcmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0OwogCX0KLQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjMyLWJpdCBQQ0kgRE1BIGFkZHJlc3NlcyIKIAkJCQkibm90IHN1cHBvcnRlZCBieSB0aGUgY2FyZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCiAJLyogSU8gU2l6ZSBjaGVjayAqLwogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApIDwgaW9fc2l6ZSkgewotCQlwcmludGsoS0VSTl9FUlIgIkluc3VmZmljaWVudCBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7Ci0JCXJldHVybiAtRUlPOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIkluc3VmZmljaWVudCBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlwaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiBJTyBtYXAgYmFzZSBhZGRyZXNzICovCkBAIC0xMDEyLDI0ICsxMDgyLDI2IEBACiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHI2MDQwX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBldGhlcmRldlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIkZhaWxlZCB0byBhbGxvY2F0ZSBldGhlcmRldlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKIAl9CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAlscCA9IG5ldGRldl9wcml2KGRldik7Ci0JbHAtPnBkZXYgPSBwZGV2OwogCi0JaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX05BTUUpKSB7CisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CisKKwlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBGYWlsZWQgdG8gcmVxdWVzdCBQQ0kgcmVnaW9uc1xuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX291dF9kaXNhYmxlOworCQlnb3RvIGVycl9vdXRfZnJlZV9kZXY7CiAJfQogCiAJaW9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIGJhciwgaW9fc2l6ZSk7CiAJaWYgKCFpb2FkZHIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpb3JlbWFwIGZhaWxlZCBmb3IgZGV2aWNlICVzXG4iLAogCQkJcGNpX25hbWUocGRldikpOwotCQlyZXR1cm4gLUVJTzsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KIAogCS8qIEluaXQgc3lzdGVtICYgZGV2aWNlICovCkBAIC0xMDQ5LDYgKzExMjEsNyBAQAogCiAJLyogTGluayBuZXcgZGV2aWNlIGludG8gcjYwNDBfcm9vdF9kZXYgKi8KIAlscC0+cGRldiA9IHBkZXY7CisJbHAtPmRldiA9IGRldjsKIAogCS8qIEluaXQgUkRDIHByaXZhdGUgZGF0YSAqLwogCWxwLT5tY3IwID0gMHgxMDAyOwpAQCAtMTA3MCw4ICsxMTQzLDggQEAKICNlbmRpZgogCW5ldGlmX25hcGlfYWRkKGRldiwgJmxwLT5uYXBpLCByNjA0MF9wb2xsLCA2NCk7CiAJbHAtPm1paV9pZi5kZXYgPSBkZXY7Ci0JbHAtPm1paV9pZi5tZGlvX3JlYWQgPSBtZGlvX3JlYWQ7Ci0JbHAtPm1paV9pZi5tZGlvX3dyaXRlID0gbWRpb193cml0ZTsKKwlscC0+bWlpX2lmLm1kaW9fcmVhZCA9IHI2MDQwX21kaW9fcmVhZDsKKwlscC0+bWlpX2lmLm1kaW9fd3JpdGUgPSByNjA0MF9tZGlvX3dyaXRlOwogCWxwLT5taWlfaWYucGh5X2lkID0gbHAtPnBoeV9hZGRyOwogCWxwLT5taWlfaWYucGh5X2lkX21hc2sgPSAweDFmOwogCWxwLT5taWlfaWYucmVnX251bV9tYXNrID0gMHgxZjsKQEAgLTEwODAsMTcgKzExNTMsMTcgQEAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0IGRldmljZVxuIik7Ci0JCWdvdG8gZXJyX291dF9yZXM7CisJCWdvdG8gZXJyX291dF91bm1hcDsKIAl9CiAJcmV0dXJuIDA7CiAKLWVycl9vdXRfcmVzOgorZXJyX291dF91bm1hcDoKKwlwY2lfaW91bm1hcChwZGV2LCBpb2FkZHIpOworZXJyX291dF9mcmVlX3JlczoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotZXJyX291dF9kaXNhYmxlOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CitlcnJfb3V0X2ZyZWVfZGV2OgogCWZyZWVfbmV0ZGV2KGRldik7Ci0KK2Vycl9vdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNjU3MjQyNS4uYTNlMzg5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0yOCwxMyArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2lmZGVmIENPTkZJR19SODE2OV9OQVBJCi0jZGVmaW5lIE5BUElfU1VGRklYCSItTkFQSSIKLSNlbHNlCi0jZGVmaW5lIE5BUElfU1VGRklYCSIiCi0jZW5kaWYKLQotI2RlZmluZSBSVEw4MTY5X1ZFUlNJT04gIjIuMkxLIiBOQVBJX1NVRkZJWAorI2RlZmluZSBSVEw4MTY5X1ZFUlNJT04gIjIuM0xLLU5BUEkiCiAjZGVmaW5lIE1PRFVMRU5BTUUgInI4MTY5IgogI2RlZmluZSBQRlggTU9EVUxFTkFNRSAiOiAiCiAKQEAgLTU3LDE2ICs1MSw2IEBACiAjZGVmaW5lIFRYX0JVRkZTX0FWQUlMKHRwKSBcCiAJKHRwLT5kaXJ0eV90eCArIE5VTV9UWF9ERVNDIC0gdHAtPmN1cl90eCAtIDEpCiAKLSNpZmRlZiBDT05GSUdfUjgxNjlfTkFQSQotI2RlZmluZSBydGw4MTY5X3J4X3NrYgkJCW5ldGlmX3JlY2VpdmVfc2tiCi0jZGVmaW5lIHJ0bDgxNjlfcnhfaHdhY2NlbF9za2IJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYgotI2RlZmluZSBydGw4MTY5X3J4X3F1b3RhKGNvdW50LCBxdW90YSkJbWluKGNvdW50LCBxdW90YSkKLSNlbHNlCi0jZGVmaW5lIHJ0bDgxNjlfcnhfc2tiCQkJbmV0aWZfcngKLSNkZWZpbmUgcnRsODE2OV9yeF9od2FjY2VsX3NrYgkJdmxhbl9od2FjY2VsX3J4Ci0jZGVmaW5lIHJ0bDgxNjlfcnhfcXVvdGEoY291bnQsIHF1b3RhKQljb3VudAotI2VuZGlmCi0KIC8qIE1heGltdW0gZXZlbnRzIChSeCBwYWNrZXRzLCBldGMuKSB0byBoYW5kbGUgYXQgZWFjaCBpbnRlcnJ1cHQuICovCiBzdGF0aWMgY29uc3QgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDIwOwogCkBAIC0zOTQsOSArMzc4LDcgQEAKIAl2b2lkIF9faW9tZW0gKm1taW9fYWRkcjsJLyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CS8qIEluZGV4IG9mIFBDSSBkZXZpY2UgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotI2lmZGVmIENPTkZJR19SODE2OV9OQVBJCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7Ci0jZW5kaWYKIAlzcGlubG9ja190IGxvY2s7CQkvKiBzcGluIGxvY2sgZmxhZyAqLwogCXUzMiBtc2dfZW5hYmxlOwogCWludCBjaGlwc2V0OwpAQCAtNDU4LDEwICs0NDAsNyBAQAogc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOwogc3RhdGljIHZvaWQgcnRsODE2OV9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7Ci0KLSNpZmRlZiBDT05GSUdfUjgxNjlfTkFQSQogc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKLSNlbmRpZgogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ0bDgxNjlfcnhfY29uZmlnID0KIAkoUlhfRklGT19USFJFU0ggPDwgUnhDZmdGSUZPU2hpZnQpIHwgKFJYX0RNQV9CVVJTVCA8PCBSeENmZ0RNQVNoaWZ0KTsKQEAgLTg0MywxMCArODIyLDExIEBACiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLT5vcHRzMik7CisJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwID0gdHAtPnZsZ3JwOwogCWludCByZXQ7CiAKLQlpZiAodHAtPnZsZ3JwICYmIChvcHRzMiAmIFJ4VmxhblRhZykpIHsKLQkJcnRsODE2OV9yeF9od2FjY2VsX3NrYihza2IsIHRwLT52bGdycCwgc3dhYjE2KG9wdHMyICYgMHhmZmZmKSk7CisJaWYgKHZsZ3JwICYmIChvcHRzMiAmIFJ4VmxhblRhZykpIHsKKwkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgdmxncnAsIHN3YWIxNihvcHRzMiAmIDB4ZmZmZikpOwogCQlyZXQgPSAwOwogCX0gZWxzZQogCQlyZXQgPSAtMTsKQEAgLTE0MzgsOCArMTQxOCwxMCBAQAogCiAJcnRsX2h3X3BoeV9jb25maWcoZGV2KTsKIAotCWRwcmludGsoIlNldCBNQUMgUmVnIEMrQ1IgT2Zmc2V0IDB4ODJoID0gMHgwMWhcbiIpOwotCVJUTF9XOCgweDgyLCAweDAxKTsKKwlpZiAodHAtPm1hY192ZXJzaW9uIDw9IFJUTF9HSUdBX01BQ19WRVJfMDYpIHsKKwkJZHByaW50aygiU2V0IE1BQyBSZWcgQytDUiBPZmZzZXQgMHg4MmggPSAweDAxaFxuIik7CisJCVJUTF9XOCgweDgyLCAweDAxKTsKKwl9CiAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUodHAtPnBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweDQwKTsKIApAQCAtMTc2NCw5ICsxNzQ2LDcgQEAKIAlkZXYtPmNoYW5nZV9tdHUgPSBydGw4MTY5X2NoYW5nZV9tdHU7CiAJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBydGxfc2V0X21hY19hZGRyZXNzOwogCi0jaWZkZWYgQ09ORklHX1I4MTY5X05BUEkKIAluZXRpZl9uYXBpX2FkZChkZXYsICZ0cC0+bmFwaSwgcnRsODE2OV9wb2xsLCBSODE2OV9OQVBJX1dFSUdIVCk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19SODE2OV9WTEFOCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CkBAIC0xODg3LDkgKzE4NjcsNyBAQAogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGVycl9yZWxlYXNlX3JpbmdfMjsKIAotI2lmZGVmIENPTkZJR19SODE2OV9OQVBJCiAJbmFwaV9lbmFibGUoJnRwLT5uYXBpKTsKLSNlbmRpZgogCiAJcnRsX2h3X3N0YXJ0KGRldik7CiAKQEAgLTIxOTcsOSArMjE3NSw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCi0jaWZkZWYgQ09ORklHX1I4MTY5X05BUEkKIAluYXBpX2VuYWJsZSgmdHAtPm5hcGkpOwotI2VuZGlmCiAKIAlydGxfaHdfc3RhcnQoZGV2KTsKIApAQCAtMjM5MSwxNyArMjM2NywxMyBAQAogCXN5bmNocm9uaXplX2lycShkZXYtPmlycSk7CiAKIAkvKiBXYWl0IGZvciBhbnkgcGVuZGluZyBOQVBJIHRhc2sgdG8gY29tcGxldGUgKi8KLSNpZmRlZiBDT05GSUdfUjgxNjlfTkFQSQogCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGkpOwotI2VuZGlmCiAKIAlydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soaW9hZGRyKTsKIAotI2lmZGVmIENPTkZJR19SODE2OV9OQVBJCiAJdHAtPmludHJfbWFzayA9IDB4ZmZmZjsKIAlSVExfVzE2KEludHJNYXNrLCB0cC0+aW50cl9ldmVudCk7CiAJbmFwaV9lbmFibGUoJnRwLT5uYXBpKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X3JlaW5pdF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTI3NjcsNyArMjczOSw3IEBACiAKIAljdXJfcnggPSB0cC0+Y3VyX3J4OwogCXJ4X2xlZnQgPSBOVU1fUlhfREVTQyArIHRwLT5kaXJ0eV9yeCAtIGN1cl9yeDsKLQlyeF9sZWZ0ID0gcnRsODE2OV9yeF9xdW90YShyeF9sZWZ0LCBidWRnZXQpOworCXJ4X2xlZnQgPSBtaW4ocnhfbGVmdCwgYnVkZ2V0KTsKIAogCWZvciAoOyByeF9sZWZ0ID4gMDsgcnhfbGVmdC0tLCBjdXJfcngrKykgewogCQl1bnNpZ25lZCBpbnQgZW50cnkgPSBjdXJfcnggJSBOVU1fUlhfREVTQzsKQEAgLTI4MjksNyArMjgwMSw3IEBACiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCiAJCQlpZiAocnRsODE2OV9yeF92bGFuX3NrYih0cCwgZGVzYywgc2tiKSA8IDApCi0JCQkJcnRsODE2OV9yeF9za2Ioc2tiKTsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiAJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3Rfc2l6ZTsKQEAgLTI4NjksODcgKzI4NDEsNjEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2luc3RhbmNlOwogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgYm9ndXNjbnQgPSBtYXhfaW50ZXJydXB0X3dvcms7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwotCWludCBzdGF0dXM7CiAJaW50IGhhbmRsZWQgPSAwOworCWludCBzdGF0dXM7CiAKLQlkbyB7Ci0JCXN0YXR1cyA9IFJUTF9SMTYoSW50clN0YXR1cyk7CisJc3RhdHVzID0gUlRMX1IxNihJbnRyU3RhdHVzKTsKIAotCQkvKiBob3RwbHVnL21ham9yIGVycm9yL25vIG1vcmUgd29yay9zaGFyZWQgaXJxICovCi0JCWlmICgoc3RhdHVzID09IDB4RkZGRikgfHwgIXN0YXR1cykKLQkJCWJyZWFrOworCS8qIGhvdHBsdWcvbWFqb3IgZXJyb3Ivbm8gbW9yZSB3b3JrL3NoYXJlZCBpcnEgKi8KKwlpZiAoKHN0YXR1cyA9PSAweGZmZmYpIHx8ICFzdGF0dXMpCisJCWdvdG8gb3V0OwogCi0JCWhhbmRsZWQgPSAxOworCWhhbmRsZWQgPSAxOwogCi0JCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhkZXYpKSkgewotCQkJcnRsODE2OV9hc2ljX2Rvd24oaW9hZGRyKTsKLQkJCWdvdG8gb3V0OwotCQl9CisJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKGRldikpKSB7CisJCXJ0bDgxNjlfYXNpY19kb3duKGlvYWRkcik7CisJCWdvdG8gb3V0OworCX0KIAotCQlzdGF0dXMgJj0gdHAtPmludHJfbWFzazsKLQkJUlRMX1cxNihJbnRyU3RhdHVzLAotCQkJKHN0YXR1cyAmIFJ4RklGT092ZXIpID8gKHN0YXR1cyB8IFJ4T3ZlcmZsb3cpIDogc3RhdHVzKTsKKwlzdGF0dXMgJj0gdHAtPmludHJfbWFzazsKKwlSVExfVzE2KEludHJTdGF0dXMsCisJCShzdGF0dXMgJiBSeEZJRk9PdmVyKSA/IChzdGF0dXMgfCBSeE92ZXJmbG93KSA6IHN0YXR1cyk7CiAKLQkJaWYgKCEoc3RhdHVzICYgdHAtPmludHJfZXZlbnQpKQotCQkJYnJlYWs7CisJaWYgKCEoc3RhdHVzICYgdHAtPmludHJfZXZlbnQpKQorCQlnb3RvIG91dDsKIAotICAgICAgICAgICAgICAgIC8qIFdvcmsgYXJvdW5kIGZvciByeCBmaWZvIG92ZXJmbG93ICovCi0gICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KHN0YXR1cyAmIFJ4RklGT092ZXIpICYmCi0JCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTEpKSB7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCQlydGw4MTY5X3R4X3RpbWVvdXQoZGV2KTsKLQkJCWJyZWFrOwotCQl9CisJLyogV29yayBhcm91bmQgZm9yIHJ4IGZpZm8gb3ZlcmZsb3cgKi8KKwlpZiAodW5saWtlbHkoc3RhdHVzICYgUnhGSUZPT3ZlcikgJiYKKwkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzExKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJ0bDgxNjlfdHhfdGltZW91dChkZXYpOworCQlnb3RvIG91dDsKKwl9CiAKLQkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFNZU0VycikpIHsKLQkJCXJ0bDgxNjlfcGNpZXJyX2ludGVycnVwdChkZXYpOwotCQkJYnJlYWs7Ci0JCX0KKwlpZiAodW5saWtlbHkoc3RhdHVzICYgU1lTRXJyKSkgeworCQlydGw4MTY5X3BjaWVycl9pbnRlcnJ1cHQoZGV2KTsKKwkJZ290byBvdXQ7CisJfQogCi0JCWlmIChzdGF0dXMgJiBMaW5rQ2hnKQotCQkJcnRsODE2OV9jaGVja19saW5rX3N0YXR1cyhkZXYsIHRwLCBpb2FkZHIpOworCWlmIChzdGF0dXMgJiBMaW5rQ2hnKQorCQlydGw4MTY5X2NoZWNrX2xpbmtfc3RhdHVzKGRldiwgdHAsIGlvYWRkcik7CiAKLSNpZmRlZiBDT05GSUdfUjgxNjlfTkFQSQotCQlpZiAoc3RhdHVzICYgdHAtPm5hcGlfZXZlbnQpIHsKLQkJCVJUTF9XMTYoSW50ck1hc2ssIHRwLT5pbnRyX2V2ZW50ICYgfnRwLT5uYXBpX2V2ZW50KTsKLQkJCXRwLT5pbnRyX21hc2sgPSB+dHAtPm5hcGlfZXZlbnQ7CisJaWYgKHN0YXR1cyAmIHRwLT5uYXBpX2V2ZW50KSB7CisJCVJUTF9XMTYoSW50ck1hc2ssIHRwLT5pbnRyX2V2ZW50ICYgfnRwLT5uYXBpX2V2ZW50KTsKKwkJdHAtPmludHJfbWFzayA9IH50cC0+bmFwaV9ldmVudDsKIAogCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2LCAmdHAtPm5hcGkpKSkKIAkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2LCAmdHAtPm5hcGkpOwotCQkJZWxzZSBpZiAobmV0aWZfbXNnX2ludHIodHApKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVycnVwdCAlMDR4IGluIHBvbGxcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKLQkJCX0KKwkJZWxzZSBpZiAobmV0aWZfbXNnX2ludHIodHApKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ZXJydXB0ICUwNHggaW4gcG9sbFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CiAJCX0KLQkJYnJlYWs7Ci0jZWxzZQotCQkvKiBSeCBpbnRlcnJ1cHQgKi8KLQkJaWYgKHN0YXR1cyAmIChSeE9LIHwgUnhPdmVyZmxvdyB8IFJ4RklGT092ZXIpKQotCQkJcnRsODE2OV9yeF9pbnRlcnJ1cHQoZGV2LCB0cCwgaW9hZGRyLCB+KHUzMikwKTsKLQotCQkvKiBUeCBpbnRlcnJ1cHQgKi8KLQkJaWYgKHN0YXR1cyAmIChUeE9LIHwgVHhFcnIpKQotCQkJcnRsODE2OV90eF9pbnRlcnJ1cHQoZGV2LCB0cCwgaW9hZGRyKTsKLSNlbmRpZgotCi0JCWJvZ3VzY250LS07Ci0JfSB3aGlsZSAoYm9ndXNjbnQgPiAwKTsKLQotCWlmIChib2d1c2NudCA8PSAwKSB7Ci0JCWlmIChuZXRpZl9tc2dfaW50cih0cCkgJiYgbmV0X3JhdGVsaW1pdCgpICkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogVG9vIG11Y2ggd29yayBhdCBpbnRlcnJ1cHQhXG4iLCBkZXYtPm5hbWUpOwotCQl9Ci0JCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHQgc291cmNlcy4gKi8KLQkJUlRMX1cxNihJbnRyU3RhdHVzLCAweGZmZmYpOwogCX0KIG91dDoKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAotI2lmZGVmIENPTkZJR19SODE2OV9OQVBJCiBzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgbmFwaSk7CkBAIC0yOTc1LDcgKzI5MjEsNiBAQAogCiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTI5ODcsOSArMjkzMiw3IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLSNpZmRlZiBDT05GSUdfUjgxNjlfTkFQSQogCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGkpOwotI2VuZGlmCiAKIGNvcmVfZG93bjoKIAlzcGluX2xvY2tfaXJxKCZ0cC0+bG9jayk7CkBAIC0zMDkxLDE1ICszMDM0LDExIEBACiAJdG1wID0gcnRsODE2OV9yeF9jb25maWcgfCByeF9tb2RlIHwKIAkgICAgICAoUlRMX1IzMihSeENvbmZpZykgJiBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5SeENvbmZpZ01hc2spOwogCi0JaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xMSkgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzEyKSB8fAotCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTMpIHx8Ci0JICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xNCkgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzE1KSB8fAotCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTYpIHx8Ci0JICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xNykpIHsKLQkJbWNfZmlsdGVyWzBdID0gMHhmZmZmZmZmZjsKLQkJbWNfZmlsdGVyWzFdID0gMHhmZmZmZmZmZjsKKwlpZiAodHAtPm1hY192ZXJzaW9uID4gUlRMX0dJR0FfTUFDX1ZFUl8wNikgeworCQl1MzIgZGF0YSA9IG1jX2ZpbHRlclswXTsKKworCQltY19maWx0ZXJbMF0gPSBzd2FiMzIobWNfZmlsdGVyWzFdKTsKKwkJbWNfZmlsdGVyWzFdID0gc3dhYjMyKGRhdGEpOwogCX0KIAogCVJUTF9XMzIoTUFSMCArIDAsIG1jX2ZpbHRlclswXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggYWU3YjY5Ny4uOWRhZTQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtODYsNyArODYsNyBAQAogI2luY2x1ZGUgInMyaW8uaCIKICNpbmNsdWRlICJzMmlvLXJlZ3MuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjI2LjI0IgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjI2LjI1IgogCiAvKiBTMmlvIERyaXZlciBuYW1lICYgdmVyc2lvbi4gKi8KIHN0YXRpYyBjaGFyIHMyaW9fZHJpdmVyX25hbWVbXSA9ICJOZXRlcmlvbiI7CkBAIC01NDUsOTEgKzU0NSw2MyBAQAogLyogbmV0cXVldWUgbWFuaXB1bGF0aW9uIGhlbHBlciBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzMmlvX3N0b3BfYWxsX3R4X3F1ZXVlKHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7Ci0JaW50IGk7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCWlmIChzcC0+Y29uZmlnLm11bHRpcSkgewotCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKQotCQkJbmV0aWZfc3RvcF9zdWJxdWV1ZShzcC0+ZGV2LCBpKTsKLQl9IGVsc2UKLSNlbmRpZgotCXsKKwlpZiAoIXNwLT5jb25maWcubXVsdGlxKSB7CisJCWludCBpOworCiAJCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtOyBpKyspCiAJCQlzcC0+bWFjX2NvbnRyb2wuZmlmb3NbaV0ucXVldWVfc3RhdGUgPSBGSUZPX1FVRVVFX1NUT1A7Ci0JCW5ldGlmX3N0b3BfcXVldWUoc3AtPmRldik7CiAJfQorCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzcC0+ZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHMyaW9fc3RvcF90eF9xdWV1ZShzdHJ1Y3QgczJpb19uaWMgKnNwLCBpbnQgZmlmb19ubykKIHsKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCi0JaWYgKHNwLT5jb25maWcubXVsdGlxKQotCQluZXRpZl9zdG9wX3N1YnF1ZXVlKHNwLT5kZXYsIGZpZm9fbm8pOwotCWVsc2UKLSNlbmRpZgotCXsKKwlpZiAoIXNwLT5jb25maWcubXVsdGlxKQogCQlzcC0+bWFjX2NvbnRyb2wuZmlmb3NbZmlmb19ub10ucXVldWVfc3RhdGUgPQogCQkJRklGT19RVUVVRV9TVE9QOwotCQluZXRpZl9zdG9wX3F1ZXVlKHNwLT5kZXYpOwotCX0KKworCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzcC0+ZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHMyaW9fc3RhcnRfYWxsX3R4X3F1ZXVlKHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7Ci0JaW50IGk7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCWlmIChzcC0+Y29uZmlnLm11bHRpcSkgewotCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKQotCQkJbmV0aWZfc3RhcnRfc3VicXVldWUoc3AtPmRldiwgaSk7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7CisJaWYgKCFzcC0+Y29uZmlnLm11bHRpcSkgeworCQlpbnQgaTsKKwogCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKQogCQkJc3AtPm1hY19jb250cm9sLmZpZm9zW2ldLnF1ZXVlX3N0YXRlID0gRklGT19RVUVVRV9TVEFSVDsKLQkJbmV0aWZfc3RhcnRfcXVldWUoc3AtPmRldik7CiAJfQorCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoc3AtPmRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzMmlvX3N0YXJ0X3R4X3F1ZXVlKHN0cnVjdCBzMmlvX25pYyAqc3AsIGludCBmaWZvX25vKQogewotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKLQlpZiAoc3AtPmNvbmZpZy5tdWx0aXEpCi0JCW5ldGlmX3N0YXJ0X3N1YnF1ZXVlKHNwLT5kZXYsIGZpZm9fbm8pOwotCWVsc2UKLSNlbmRpZgotCXsKKwlpZiAoIXNwLT5jb25maWcubXVsdGlxKQogCQlzcC0+bWFjX2NvbnRyb2wuZmlmb3NbZmlmb19ub10ucXVldWVfc3RhdGUgPQogCQkJRklGT19RVUVVRV9TVEFSVDsKLQkJbmV0aWZfc3RhcnRfcXVldWUoc3AtPmRldik7Ci0JfQorCisJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhzcC0+ZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHMyaW9fd2FrZV9hbGxfdHhfcXVldWUoc3RydWN0IHMyaW9fbmljICpzcCkKIHsKLQlpbnQgaTsKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCi0JaWYgKHNwLT5jb25maWcubXVsdGlxKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtOyBpKyspCi0JCQluZXRpZl93YWtlX3N1YnF1ZXVlKHNwLT5kZXYsIGkpOwotCX0gZWxzZQotI2VuZGlmCi0JeworCWlmICghc3AtPmNvbmZpZy5tdWx0aXEpIHsKKwkJaW50IGk7CisKIAkJZm9yIChpID0gMDsgaSA8IHNwLT5jb25maWcudHhfZmlmb19udW07IGkrKykKIAkJCXNwLT5tYWNfY29udHJvbC5maWZvc1tpXS5xdWV1ZV9zdGF0ZSA9IEZJRk9fUVVFVUVfU1RBUlQ7Ci0JCW5ldGlmX3dha2VfcXVldWUoc3AtPmRldik7CiAJfQorCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhzcC0+ZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHMyaW9fd2FrZV90eF9xdWV1ZSgKIAlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvLCBpbnQgY250LCB1OCBtdWx0aXEpCiB7CiAKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCiAJaWYgKG11bHRpcSkgewogCQlpZiAoY250ICYmIF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChmaWZvLT5kZXYsIGZpZm8tPmZpZm9fbm8pKQogCQkJbmV0aWZfd2FrZV9zdWJxdWV1ZShmaWZvLT5kZXYsIGZpZm8tPmZpZm9fbm8pOwotCX0gZWxzZQotI2VuZGlmCi0JaWYgKGNudCAmJiAoZmlmby0+cXVldWVfc3RhdGUgPT0gRklGT19RVUVVRV9TVE9QKSkgeworCX0gZWxzZSBpZiAoY250ICYmIChmaWZvLT5xdWV1ZV9zdGF0ZSA9PSBGSUZPX1FVRVVFX1NUT1ApKSB7CiAJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGZpZm8tPmRldikpIHsKIAkJCWZpZm8tPnF1ZXVlX3N0YXRlID0gRklGT19RVUVVRV9TVEFSVDsKIAkJCW5ldGlmX3dha2VfcXVldWUoZmlmby0+ZGV2KTsKQEAgLTE5MDksOCArMTg4MSw2IEBACiAKIHN0YXRpYyBpbnQgczJpb19saW5rX2ZhdWx0X2luZGljYXRpb24oc3RydWN0IHMyaW9fbmljICpuaWMpCiB7Ci0JaWYgKG5pYy0+Y29uZmlnLmludHJfdHlwZSAhPSBJTlRBKQotCQlyZXR1cm4gTUFDX1JNQUNfRVJSX1RJTUVSOwogCWlmIChuaWMtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpCiAJCXJldHVybiBMSU5LX1VQX0RPV05fSU5URVJSVVBUOwogCWVsc2UKQEAgLTE5NDMsNyArMTkxMyw5IEBACiB7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gbmljLT5iYXIwOwogCXJlZ2lzdGVyIHU2NCBnZW5faW50X21hc2sgPSAwOworCXU2NCBpbnRlcnJ1cHRpYmxlOwogCisJd3JpdGVxKERJU0FCTEVfQUxMX0lOVFJTLCAmYmFyMC0+Z2VuZXJhbF9pbnRfbWFzayk7CiAJaWYgKG1hc2sgJiBUWF9ETUFfSU5UUikgewogCiAJCWdlbl9pbnRfbWFzayB8PSBUWERNQV9JTlRfTTsKQEAgLTIwMzMsMTAgKzIwMDUsMTIgQEAKIAkJZ2VuX2ludF9tYXNrIHw9IFJYTUFDX0lOVF9NOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoTUFDX0lOVF9TVEFUVVNfUk1BQ19JTlQsIGZsYWcsCiAJCQkJJmJhcjAtPm1hY19pbnRfbWFzayk7Ci0JCWRvX3MyaW9fd3JpdGVfYml0cyhSTUFDX1JYX0JVRkZfT1ZSTiB8IFJNQUNfUlhfU01fRVJSIHwKKwkJaW50ZXJydXB0aWJsZSA9IFJNQUNfUlhfQlVGRl9PVlJOIHwgUk1BQ19SWF9TTV9FUlIgfAogCQkJCVJNQUNfVU5VU0VEX0lOVCB8IFJNQUNfU0lOR0xFX0VDQ19FUlIgfAotCQkJCVJNQUNfRE9VQkxFX0VDQ19FUlIgfAotCQkJCVJNQUNfTElOS19TVEFURV9DSEFOR0VfSU5ULAorCQkJCVJNQUNfRE9VQkxFX0VDQ19FUlI7CisJCWlmIChzMmlvX2xpbmtfZmF1bHRfaW5kaWNhdGlvbihuaWMpID09IE1BQ19STUFDX0VSUl9USU1FUikKKwkJCWludGVycnVwdGlibGUgfD0gUk1BQ19MSU5LX1NUQVRFX0NIQU5HRV9JTlQ7CisJCWRvX3MyaW9fd3JpdGVfYml0cyhpbnRlcnJ1cHRpYmxlLAogCQkJCWZsYWcsICZiYXIwLT5tYWNfcm1hY19lcnJfbWFzayk7CiAJfQogCkBAIC0yNTE5LDYgKzI0OTMsOSBAQAogLyoqCiAgKiAgZmlsbF9yeF9idWZmZXJzIC0gQWxsb2NhdGVzIHRoZSBSeCBzaWRlIHNrYnMKICAqICBAcmluZ19pbmZvOiBwZXIgcmluZyBzdHJ1Y3R1cmUKKyAqICBAZnJvbV9jYXJkX3VwOiBJZiB0aGlzIGlzIHRydWUsIHdlIHdpbGwgbWFwIHRoZSBidWZmZXIgdG8gZ2V0CisgKiAgICAgdGhlIGRtYSBhZGRyZXNzIGZvciBidWYwIGFuZCBidWYxIHRvIGdpdmUgaXQgdG8gdGhlIGNhcmQuCisgKiAgICAgRWxzZSB3ZSB3aWxsIHN5bmMgdGhlIGFscmVhZHkgbWFwcGVkIGJ1ZmZlciB0byBnaXZlIGl0IHRvIHRoZSBjYXJkLgogICogIERlc2NyaXB0aW9uOgogICogIFRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgUnggc2lkZSBza2JzIGFuZCBwdXRzIHRoZSBwaHlzaWNhbAogICogIGFkZHJlc3Mgb2YgdGhlc2UgYnVmZmVycyBpbnRvIHRoZSBSeEQgYnVmZmVyIHBvaW50ZXJzLCBzbyB0aGF0IHRoZSBOSUMKQEAgLTI1MzYsNyArMjUxMyw3IEBACiAgKiAgU1VDQ0VTUyBvbiBzdWNjZXNzIG9yIGFuIGFwcHJvcHJpYXRlIC12ZSB2YWx1ZSBvbiBmYWlsdXJlLgogICovCiAKLXN0YXRpYyBpbnQgZmlsbF9yeF9idWZmZXJzKHN0cnVjdCByaW5nX2luZm8gKnJpbmcpCitzdGF0aWMgaW50IGZpbGxfcnhfYnVmZmVycyhzdHJ1Y3QgcmluZ19pbmZvICpyaW5nLCBpbnQgZnJvbV9jYXJkX3VwKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IFJ4RF90ICpyeGRwOwpAQCAtMjU2Niw3ICsyNTQzLDcgQEAKIAkJaWYgKGJsb2NrX25vKQogCQkJcnhkX2luZGV4ICs9IChibG9ja19ubyAqIHJpbmctPnJ4ZF9jb3VudCk7CiAKLQkJaWYgKChibG9ja19ubyA9PSBibG9ja19ubzEpICYmIAorCQlpZiAoKGJsb2NrX25vID09IGJsb2NrX25vMSkgJiYKIAkJCShvZmYgPT0gcmluZy0+cnhfY3Vycl9nZXRfaW5mby5vZmZzZXQpICYmCiAJCQkocnhkcC0+SG9zdF9Db250cm9sKSkgewogCQkJREJHX1BSSU5UKElOVFJfREJHLCAiJXM6IEdldCBhbmQgUHV0IiwKQEAgLTI2MTIsNyArMjU4OSw3IEBACiAJCQkJZmlyc3RfcnhkcC0+Q29udHJvbF8xIHw9IFJYRF9PV05fWEVOQTsKIAkJCX0KIAkJCXN0YXRzLT5tZW1fYWxsb2NfZmFpbF9jbnQrKzsKLQkJCQkKKwogCQkJcmV0dXJuIC1FTk9NRU0gOwogCQl9CiAJCXN0YXRzLT5tZW1fYWxsb2NhdGVkICs9IHNrYi0+dHJ1ZXNpemU7CkBAIC0yNjU1LDE3ICsyNjMyLDE2IEBACiAJCQlza2ItPmRhdGEgPSAodm9pZCAqKSAodW5zaWduZWQgbG9uZyl0bXA7CiAJCQlza2JfcmVzZXRfdGFpbF9wb2ludGVyKHNrYik7CiAKLQkJCS8qIEFLOiBjaGVjayBpcyB3cm9uZy4gMCBjYW4gYmUgdmFsaWQgZG1hIGFkZHJlc3MgKi8KLQkJCWlmICghKHJ4ZHAzLT5CdWZmZXIwX3B0cikpCisJCQlpZiAoZnJvbV9jYXJkX3VwKSB7CiAJCQkJcnhkcDMtPkJ1ZmZlcjBfcHRyID0KIAkJCQkgICBwY2lfbWFwX3NpbmdsZShyaW5nLT5wZGV2LCBiYS0+YmFfMCwKIAkJCQkJQlVGMF9MRU4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQllbHNlCisJCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihyeGRwMy0+QnVmZmVyMF9wdHIpKQorCQkJCQlnb3RvIHBjaV9tYXBfZmFpbGVkOworCQkJfSBlbHNlCiAJCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHJpbmctPnBkZXYsCiAJCQkJKGRtYV9hZGRyX3QpIHJ4ZHAzLT5CdWZmZXIwX3B0ciwKIAkJCQkgICAgQlVGMF9MRU4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHJ4ZHAzLT5CdWZmZXIwX3B0cikpCi0JCQkJZ290byBwY2lfbWFwX2ZhaWxlZDsKIAogCQkJcnhkcC0+Q29udHJvbF8yID0gU0VUX0JVRkZFUjBfU0laRV8zKEJVRjBfTEVOKTsKIAkJCWlmIChyaW5nLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgewpAQCAtMjY4MiwyMSArMjY1OCwyMiBAQAogCQkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocnhkcDMtPkJ1ZmZlcjJfcHRyKSkKIAkJCQkJZ290byBwY2lfbWFwX2ZhaWxlZDsKIAotCQkJCS8qIEFLOiBjaGVjayBpcyB3cm9uZyAqLwotCQkJCWlmICghcnhkcDMtPkJ1ZmZlcjFfcHRyKQorCQkJCWlmIChmcm9tX2NhcmRfdXApIHsKIAkJCQkJcnhkcDMtPkJ1ZmZlcjFfcHRyID0KIAkJCQkJCXBjaV9tYXBfc2luZ2xlKHJpbmctPnBkZXYsCiAJCQkJCQliYS0+YmFfMSwgQlVGMV9MRU4sCiAJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCi0JCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihyeGRwMy0+QnVmZmVyMV9wdHIpKSB7Ci0JCQkJCXBjaV91bm1hcF9zaW5nbGUKLQkJCQkJCShyaW5nLT5wZGV2LAotCQkJCQkJKGRtYV9hZGRyX3QpKHVuc2lnbmVkIGxvbmcpCi0JCQkJCQlza2ItPmRhdGEsCi0JCQkJCQlyaW5nLT5tdHUgKyA0LAotCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCQkJZ290byBwY2lfbWFwX2ZhaWxlZDsKKwkJCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcgorCQkJCQkJKHJ4ZHAzLT5CdWZmZXIxX3B0cikpIHsKKwkJCQkJCXBjaV91bm1hcF9zaW5nbGUKKwkJCQkJCQkocmluZy0+cGRldiwKKwkJCQkJCSAgICAoZG1hX2FkZHJfdCkodW5zaWduZWQgbG9uZykKKwkJCQkJCQlza2ItPmRhdGEsCisJCQkJCQkJcmluZy0+bXR1ICsgNCwKKwkJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkJZ290byBwY2lfbWFwX2ZhaWxlZDsKKwkJCQkJfQogCQkJCX0KIAkJCQlyeGRwLT5Db250cm9sXzIgfD0gU0VUX0JVRkZFUjFfU0laRV8zKDEpOwogCQkJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMl9TSVpFXzMKQEAgLTI4MzEsNyArMjgwOCw3IEBACiAKIHN0YXRpYyBpbnQgczJpb19jaGtfcnhfYnVmZmVycyhzdHJ1Y3QgcmluZ19pbmZvICpyaW5nKQogewotCWlmIChmaWxsX3J4X2J1ZmZlcnMocmluZykgPT0gLUVOT01FTSkgeworCWlmIChmaWxsX3J4X2J1ZmZlcnMocmluZywgMCkgPT0gLUVOT01FTSkgewogCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczpPdXQgb2YgbWVtb3J5IiwgcmluZy0+ZGV2LT5uYW1lKTsKIAkJREJHX1BSSU5UKElORk9fREJHLCAiIGluIFJ4IEludHIhIVxuIik7CiAJfQpAQCAtMjk2Miw3ICsyOTM5LDcgQEAKIAkJcnhfaW50cl9oYW5kbGVyKCZtYWNfY29udHJvbC0+cmluZ3NbaV0sIDApOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlpZiAoZmlsbF9yeF9idWZmZXJzKCZtYWNfY29udHJvbC0+cmluZ3NbaV0pID09IC1FTk9NRU0pIHsKKwkJaWYgKGZpbGxfcnhfYnVmZmVycygmbWFjX2NvbnRyb2wtPnJpbmdzW2ldLCAwKSA9PSAtRU5PTUVNKSB7CiAJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczpPdXQgb2YgbWVtb3J5IiwgZGV2LT5uYW1lKTsKIAkJCURCR19QUklOVChJTkZPX0RCRywgIiBpbiBSeCBOZXRwb2xsISFcbiIpOwogCQkJYnJlYWs7CkBAIC00MTg5LDE1ICs0MTY2LDEyIEBACiAJCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCiAJaWYgKHNwLT5jb25maWcubXVsdGlxKSB7CiAJCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoZGV2LCBmaWZvLT5maWZvX25vKSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCQl9Ci0JfSBlbHNlCi0jZW5kaWYKLQlpZiAodW5saWtlbHkoZmlmby0+cXVldWVfc3RhdGUgPT0gRklGT19RVUVVRV9TVE9QKSkgeworCX0gZWxzZSBpZiAodW5saWtlbHkoZmlmby0+cXVldWVfc3RhdGUgPT0gRklGT19RVUVVRV9TVE9QKSkgewogCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CkBAIC00Mzk0LDE4ICs0MzY4LDI0IEBACiAJCS8qIE5vdGhpbmcgbXVjaCBjYW4gYmUgZG9uZS4gR2V0IG91dCAqLwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQl3cml0ZXEoUzJJT19NSU5VU19PTkUsICZiYXIwLT5nZW5lcmFsX2ludF9tYXNrKTsKKwlpZiAocmVhc29uICYgKEdFTl9JTlRSX1RYUElDIHwgR0VOX0lOVFJfVFhUUkFGRklDKSkgeworCQl3cml0ZXEoUzJJT19NSU5VU19PTkUsICZiYXIwLT5nZW5lcmFsX2ludF9tYXNrKTsKIAotCWlmIChyZWFzb24gJiBHRU5fSU5UUl9UWFRSQUZGSUMpCi0JCXdyaXRlcShTMklPX01JTlVTX09ORSwgJmJhcjAtPnR4X3RyYWZmaWNfaW50KTsKKwkJaWYgKHJlYXNvbiAmIEdFTl9JTlRSX1RYUElDKQorCQkJczJpb190eHBpY19pbnRyX2hhbmRsZShzcCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKQotCQl0eF9pbnRyX2hhbmRsZXIoJmZpZm9zW2ldKTsKKwkJaWYgKHJlYXNvbiAmIEdFTl9JTlRSX1RYVFJBRkZJQykKKwkJCXdyaXRlcShTMklPX01JTlVTX09ORSwgJmJhcjAtPnR4X3RyYWZmaWNfaW50KTsKIAotCXdyaXRlcShzcC0+Z2VuZXJhbF9pbnRfbWFzaywgJmJhcjAtPmdlbmVyYWxfaW50X21hc2spOwotCXJlYWRsKCZiYXIwLT5nZW5lcmFsX2ludF9zdGF0dXMpOworCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKQorCQkJdHhfaW50cl9oYW5kbGVyKCZmaWZvc1tpXSk7CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCXdyaXRlcShzcC0+Z2VuZXJhbF9pbnRfbWFzaywgJmJhcjAtPmdlbmVyYWxfaW50X21hc2spOworCQlyZWFkbCgmYmFyMC0+Z2VuZXJhbF9pbnRfc3RhdHVzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwkvKiBUaGUgaW50ZXJydXB0IHdhcyBub3QgcmFpc2VkIGJ5IHVzICovCisJcmV0dXJuIElSUV9OT05FOwogfQogCiBzdGF0aWMgdm9pZCBzMmlvX3R4cGljX2ludHJfaGFuZGxlKHN0cnVjdCBzMmlvX25pYyAqc3ApCkBAIC02OTg4LDcgKzY5NjgsNyBAQAogCQkJCQkJICAgICAgICZza2IsKHU2NCAqKSZ0ZW1wMF82NCwKIAkJCQkJCSAgICAgICAodTY0ICopJnRlbXAxXzY0LAogCQkJCQkJICAgICAgICh1NjQgKikmdGVtcDJfNjQsCi0JCQkJCQkJc2l6ZSkgPT0gRU5PTUVNKSB7CisJCQkJCQkJc2l6ZSkgPT0gLUVOT01FTSkgewogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAKQEAgLTcxMzMsNiArNzExMyw5IEBACiAKIAlzMmlvX3JlbV9pc3Ioc3ApOwogCisJLyogc3RvcCB0aGUgdHggcXVldWUsIGluZGljYXRlIGxpbmsgZG93biAqLworCXMyaW9fbGluayhzcCwgTElOS19ET1dOKTsKKwogCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgUXVpZXNjZW50IGFuZCB0aGVuIFJlc2V0IHRoZSBOSUMgKi8KIAl3aGlsZShkb19pbykgewogCQkvKiBBcyBwZXIgdGhlIEhXIHJlcXVpcmVtZW50IHdlIG5lZWQgdG8gcmVwbGVuaXNoIHRoZQpAQCAtNzIwNCw3ICs3MTg3LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKIAkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLm10dSA9IGRldi0+bXR1OwotCQlyZXQgPSBmaWxsX3J4X2J1ZmZlcnMoJm1hY19jb250cm9sLT5yaW5nc1tpXSk7CisJCXJldCA9IGZpbGxfcnhfYnVmZmVycygmbWFjX2NvbnRyb2wtPnJpbmdzW2ldLCAxKTsKIAkJaWYgKHJldCkgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogT3V0IG9mIG1lbW9yeSBpbiBPcGVuXG4iLAogCQkJCSAgZGV2LT5uYW1lKTsKQEAgLTcyNjUsMTcgKzcyNDgsMTkgQEAKIAogCVMySU9fVElNRVJfQ09ORihzcC0+YWxhcm1fdGltZXIsIHMyaW9fYWxhcm1faGFuZGxlLCBzcCwgKEhaLzIpKTsKIAorCXNldF9iaXQoX19TMklPX1NUQVRFX0NBUkRfVVAsICZzcC0+c3RhdGUpOworCiAJLyogIEVuYWJsZSBzZWxlY3QgaW50ZXJydXB0cyAqLwogCWVuX2Rpc19lcnJfYWxhcm1zKHNwLCBFTkFfQUxMX0lOVFJTLCBFTkFCTEVfSU5UUlMpOwotCWlmIChzcC0+Y29uZmlnLmludHJfdHlwZSAhPSBJTlRBKQotCQllbl9kaXNfYWJsZV9uaWNfaW50cnMoc3AsIFRYX1RSQUZGSUNfSU5UUiwgRU5BQkxFX0lOVFJTKTsKLQllbHNlIHsKKwlpZiAoc3AtPmNvbmZpZy5pbnRyX3R5cGUgIT0gSU5UQSkgeworCQlpbnRlcnJ1cHRpYmxlID0gVFhfVFJBRkZJQ19JTlRSIHwgVFhfUElDX0lOVFI7CisJCWVuX2Rpc19hYmxlX25pY19pbnRycyhzcCwgaW50ZXJydXB0aWJsZSwgRU5BQkxFX0lOVFJTKTsKKwl9IGVsc2UgewogCQlpbnRlcnJ1cHRpYmxlID0gVFhfVFJBRkZJQ19JTlRSIHwgUlhfVFJBRkZJQ19JTlRSOwogCQlpbnRlcnJ1cHRpYmxlIHw9IFRYX1BJQ19JTlRSOwogCQllbl9kaXNfYWJsZV9uaWNfaW50cnMoc3AsIGludGVycnVwdGlibGUsIEVOQUJMRV9JTlRSUyk7CiAJfQogCi0Jc2V0X2JpdChfX1MySU9fU1RBVEVfQ0FSRF9VUCwgJnNwLT5zdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2MzMsMTIgKzc2MTgsNiBAQAogCQlEQkdfUFJJTlQoRVJSX0RCRywgInR4IGZpZm9zXG4iKTsKIAl9CiAKLSNpZm5kZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCWlmIChtdWx0aXEpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBNdWx0aXF1ZXVlIHN1cHBvcnQgbm90IGVuYWJsZWRcbiIpOwotCQltdWx0aXEgPSAwOwotCX0KLSNlbmRpZgogCWlmIChtdWx0aXEpCiAJCSpkZXZfbXVsdGlxID0gbXVsdGlxOwogCkBAIC03NzgzLDEyICs3NzYyLDEwIEBACiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKIAlpZiAoZGV2X211bHRpcSkKIAkJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBzMmlvX25pYyksIHR4X2ZpZm9fbnVtKTsKIAllbHNlCi0jZW5kaWYKLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHMyaW9fbmljKSk7CisJCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgczJpb19uaWMpKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICJEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC03OTc5LDEwICs3OTU2LDYgQEAKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1VGTzsKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CiAJfQotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKLQlpZiAoY29uZmlnLT5tdWx0aXEpCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9NVUxUSV9RVUVVRTsKLSNlbmRpZgogCWRldi0+dHhfdGltZW91dCA9ICZzMmlvX3R4X3dhdGNoZG9nOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBXQVRDSF9ET0dfVElNRU9VVDsKIAlJTklUX1dPUksoJnNwLT5yc3RfdGltZXJfdGFzaywgczJpb19yZXN0YXJ0X25pYyk7CkBAIC04NzA4LDUgKzg2ODEsNSBAQAogCX0KIAogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKLQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmggYi9kcml2ZXJzL25ldC9zMmlvLmgKaW5kZXggMTgyN2I2Ni4uNjcyMmEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5oCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uaApAQCAtNzQ4LDcgKzc0OCw3IEBACiAKIAkvKiBpbnRlcmZhY2UgTVRVIHZhbHVlICovCiAgICAgICAgIHVuc2lnbmVkIG10dTsKLSAgICAKKwogCS8qIEJ1ZmZlciBBZGRyZXNzIHN0b3JlLiAqLwogCXN0cnVjdCBidWZmQWRkICoqYmE7CiAKQEAgLTExMDcsNiArMTEwNyw3IEBACiBzdGF0aWMgdm9pZCBmcmVlX3NoYXJlZF9tZW0oc3RydWN0IHMyaW9fbmljICpzcCk7CiBzdGF0aWMgaW50IGluaXRfbmljKHN0cnVjdCBzMmlvX25pYyAqbmljKTsKIHN0YXRpYyBpbnQgcnhfaW50cl9oYW5kbGVyKHN0cnVjdCByaW5nX2luZm8gKnJpbmdfZGF0YSwgaW50IGJ1ZGdldCk7CitzdGF0aWMgdm9pZCBzMmlvX3R4cGljX2ludHJfaGFuZGxlKHN0cnVjdCBzMmlvX25pYyAqc3ApOwogc3RhdGljIHZvaWQgdHhfaW50cl9oYW5kbGVyKHN0cnVjdCBmaWZvX2luZm8gKmZpZm9fZGF0YSk7CiBzdGF0aWMgdm9pZCBzMmlvX2hhbmRsZV9lcnJvcnModm9pZCAqIGRldl9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NhYTk3MzAuYyBiL2RyaXZlcnMvbmV0L3NhYTk3MzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY1MTk5ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zYWE5NzMwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDUgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoJQXV0aG9yczogQ2Fyc3RlbiBMYW5nZ2FhcmQgPGNhcnN0ZW5sQG1pcHMuY29tPgotICoJCSBNYWNpZWogVy4gUm96eWNraSA8bWFjcm9AbWlwcy5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIFNBQTk3MzAgZXRoZXJuZXQgZHJpdmVyLgotICoKLSAqIENoYW5nZXM6Ci0gKiBBbmdlbG8gRGVsbCdBZXJhIDxidWZmZXJAYW50aWZvcmsub3JnPiA6CUNvbnZlcnNpb24gdG8gdGhlIG5ldyBQQ0kgQVBJCi0gKgkJCQkJCShwY2lfZHJpdmVyKS4KLSAqCQkJCQkJQ29udmVyc2lvbiB0byBzcGlubG9ja3MuCi0gKgkJCQkJCUVycm9yIGhhbmRsaW5nIGZpeGVzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+Ci0KLSNpbmNsdWRlICJzYWE5NzMwLmgiCi0KLSNpZmRlZiBMQU5fU0FBOTczMF9ERUJVRwotaW50IGxhbl9zYWE5NzMwX2RlYnVnID0gTEFOX1NBQTk3MzBfREVCVUc7Ci0jZWxzZQotaW50IGxhbl9zYWE5NzMwX2RlYnVnOwotI2VuZGlmCi0KLSNkZWZpbmUgRFJWX01PRFVMRV9OQU1FICJzYWE5NzMwIgotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2FhOTczMF9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX1BISUxJUFMsIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE5NzMwLAotCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCi0JeyAwLCB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2FhOTczMF9wY2lfdGJsKTsKLQotLyogTm9uLXplcm8gb25seSBpZiB0aGUgY3VycmVudCBjYXJkIGlzIGEgUENJIHdpdGggQklPUy1zZXQgSVJRLiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBwY2lfaXJxX2xpbmU7Ci0KLXN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX2VuYWJsZV9sYW5faW50KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKLXsKLQl3cml0ZWwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpIHwgRVZNX0xBTl9JTlQsCi0JICAgICAgICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKTsKLQl3cml0ZWwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSB8IEVWTV9MQU5fSU5ULAotCSAgICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdFN0YXR1czEpOwotCXdyaXRlbChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpIHwgRVZNX0xBTl9JTlQgfAotCSAgICAgICBFVk1fTUFTVEVSX0VOLCAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpOwotfQotCi1zdGF0aWMgdm9pZCBldm1fc2FhOTczMF9kaXNhYmxlX2xhbl9pbnQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQotewotCXdyaXRlbChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgJiB+RVZNX0xBTl9JTlQsCi0JICAgICAgICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKTsKLQl3cml0ZWwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKSAmIH5FVk1fTEFOX0lOVCwKLQkgICAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKTsKLX0KLQotc3RhdGljIHZvaWQgZXZtX3NhYTk3MzBfY2xlYXJfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCi17Ci0Jd3JpdGVsKEVWTV9MQU5fSU5ULCAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdFN0YXR1czEpOwotfQotCi1zdGF0aWMgdm9pZCBldm1fc2FhOTczMF9ibG9ja19sYW5faW50KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKLXsKLQl3cml0ZWwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpICYgfkVWTV9MQU5fSU5ULAotCSAgICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX3VuYmxvY2tfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCi17Ci0Jd3JpdGVsKHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSB8IEVWTV9MQU5fSU5ULAotCSAgICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fdXNlZCBzaG93X3NhYTk3MzBfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGksIGo7Ci0KLQlwcmludGsoIlR4bUJ1ZmZlckEgPSAlcFxuIiwgbHAtPlR4bUJ1ZmZlclswXVswXSk7Ci0JcHJpbnRrKCJUeG1CdWZmZXJCID0gJXBcbiIsIGxwLT5UeG1CdWZmZXJbMV1bMF0pOwotCXByaW50aygiUmN2QnVmZmVyQSA9ICVwXG4iLCBscC0+UmN2QnVmZmVyWzBdWzBdKTsKLQlwcmludGsoIlJjdkJ1ZmZlckIgPSAlcFxuIiwgbHAtPlJjdkJ1ZmZlclsxXVswXSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQlVGRkVSUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBMQU5fU0FBOTczMF9UWE1fUV9TSVpFOyBqKyspIHsKLQkJCXByaW50aygiVHhtQnVmZmVyWyVkXVslZF0gPSAleFxuIiwgaSwgaiwKLQkJCSAgICAgICBsZTMyX3RvX2NwdSgqKHVuc2lnbmVkIGludCAqKQotCQkJCQkgICBscC0+VHhtQnVmZmVyW2ldW2pdKSk7Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8IExBTl9TQUE5NzMwX0JVRkZFUlM7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgTEFOX1NBQTk3MzBfUkNWX1FfU0laRTsgaisrKSB7Ci0JCQlwcmludGsoIlJjdkJ1ZmZlclslZF1bJWRdID0gJXhcbiIsIGksIGosCi0JCQkgICAgICAgbGUzMl90b19jcHUoKih1bnNpZ25lZCBpbnQgKikKLQkJCQkJICAgbHAtPlJjdkJ1ZmZlcltpXVtqXSkpOwotCQl9Ci0JfQotCXByaW50aygibHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSA9ICV4XG4iLAotCSAgICAgICByZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkpOwotCXByaW50aygibHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdFN0YXR1czEgPSAleFxuIiwKLQkgICAgICAgcmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSk7Ci0JcHJpbnRrKCJscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSA9ICV4XG4iLAotCSAgICAgICByZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpKTsKLQlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UgPSAleFxuIiwKLQkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpKTsKLQlwcmludGsoImxwLT5OZXh0VHhtQnVmZmVySW5kZXggPSAleFxuIiwgbHAtPk5leHRUeG1CdWZmZXJJbmRleCk7Ci0JcHJpbnRrKCJscC0+TmV4dFR4bVBhY2tldEluZGV4ID0gJXhcbiIsIGxwLT5OZXh0VHhtUGFja2V0SW5kZXgpOwotCXByaW50aygibHAtPlBlbmRpbmdUeG1CdWZmZXJJbmRleCA9ICV4XG4iLAotCSAgICAgICBscC0+UGVuZGluZ1R4bUJ1ZmZlckluZGV4KTsKLQlwcmludGsoImxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXggPSAleFxuIiwKLQkgICAgICAgbHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleCk7Ci0JcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsID0gJXhcbiIsCi0JICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKSk7Ci0JcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzID0gJXhcbiIsCi0JICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSk7Ci0JcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsID0gJXhcbiIsCi0JICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKSk7Ci0JcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwgPSAleFxuIiwKLQkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCkpOwotCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4U3RhdHVzID0gJXhcbiIsCi0JICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhTdGF0dXMpKTsKLQlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCA9ICV4XG4iLAotCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKSk7Ci0JcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhTdGF0dXMgPSAleFxuIiwKLQkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeFN0YXR1cykpOwotCi0JZm9yIChpID0gMDsgaSA8IExBTl9TQUE5NzMwX0NBTV9EV09SRFM7IGkrKykgewotCQl3cml0ZWwoaSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1BZGRyZXNzKTsKLQkJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtRGF0YSA9ICV4XG4iLAotCQkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhKSk7Ci0JfQotCi0JcHJpbnRrKCJkZXYtPnN0YXRzLnR4X3BhY2tldHMgPSAlbHhcbiIsIGRldi0+c3RhdHMudHhfcGFja2V0cyk7Ci0JcHJpbnRrKCJkZXYtPnN0YXRzLnR4X2Vycm9ycyA9ICVseFxuIiwgZGV2LT5zdGF0cy50eF9lcnJvcnMpOwotCXByaW50aygiZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9ICVseFxuIiwKLQkgICAgICAgZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyk7Ci0JcHJpbnRrKCJkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMgPSAlbHhcbiIsCi0JICAgICAgIGRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycyk7Ci0JcHJpbnRrKCJkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzID0gJWx4XG4iLAotCSAgICAgICBkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKTsKLQlwcmludGsoImRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMgPSAlbHhcbiIsCi0JICAgICAgIGRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMpOwotCXByaW50aygiZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzID0gJWx4XG4iLAotCSAgICAgICBkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMpOwotCXByaW50aygiZGV2LT5zdGF0cy5jb2xsaXNpb25zID0gJWx4XG4iLCBkZXYtPnN0YXRzLmNvbGxpc2lvbnMpOwotCi0JcHJpbnRrKCJkZXYtPnN0YXRzLnJ4X3BhY2tldHMgPSAlbHhcbiIsIGRldi0+c3RhdHMucnhfcGFja2V0cyk7Ci0JcHJpbnRrKCJkZXYtPnN0YXRzLnJ4X2Vycm9ycyA9ICVseFxuIiwgZGV2LT5zdGF0cy5yeF9lcnJvcnMpOwotCXByaW50aygiZGV2LT5zdGF0cy5yeF9kcm9wcGVkID0gJWx4XG4iLCBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQpOwotCXByaW50aygiZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzID0gJWx4XG4iLCBkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMpOwotCXByaW50aygiZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSAlbHhcbiIsCi0JICAgICAgIGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKTsKLQlwcmludGsoImRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMgPSAlbHhcbiIsCi0JICAgICAgIGRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMpOwotCXByaW50aygiZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gJWx4XG4iLAotCSAgICAgICBkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMpOwotCi0JcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdQQ0lNYXN0ZXJBZGRyID0gJXhcbiIsCi0JICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdQQ0lNYXN0ZXJBZGRyKSk7Ci0JcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeFN0YXRlTWFjaGluZSA9ICV4XG4iLAotCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuVHhTdGF0ZU1hY2hpbmUpKTsKLQlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblJ4U3RhdGVNYWNoaW5lID0gJXhcbiIsCi0JICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeFN0YXRlTWFjaGluZSkpOwotCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuVHhGaWZvUG9pbnRlcnMgPSAleFxuIiwKLQkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4Rmlmb1BvaW50ZXJzKSk7Ci0JcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeEZpZm9Qb2ludGVycyA9ICV4XG4iLAotCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhGaWZvUG9pbnRlcnMpKTsKLQlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhbkN0bFN0YXRlTWFjaGluZSA9ICV4XG4iLAotCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuQ3RsU3RhdGVNYWNoaW5lKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxhbl9zYWE5NzMwX2J1ZmZlcl9pbml0KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKLXsKLQlpbnQgaSwgajsKLQotCS8qIEluaXQgUlggYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9CVUZGRVJTOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IExBTl9TQUE5NzMwX1JDVl9RX1NJWkU7IGorKykgewotCQkJKih1bnNpZ25lZCBpbnQgKikgbHAtPlJjdkJ1ZmZlcltpXVtqXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoUlhTRl9SRUFEWSA8PAotCQkJCQlSWF9TVEFUX0NUTF9PV05FUl9TSEYpOwotCQl9Ci0JfQotCi0JLyogSW5pdCBUWCBidWZmZXJzICovCi0JZm9yIChpID0gMDsgaSA8IExBTl9TQUE5NzMwX0JVRkZFUlM7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgTEFOX1NBQTk3MzBfVFhNX1FfU0laRTsgaisrKSB7Ci0JCQkqKHVuc2lnbmVkIGludCAqKSBscC0+VHhtQnVmZmVyW2ldW2pdID0KLQkJCSAgICBjcHVfdG9fbGUzMihUWFNGX0VNUFRZIDw8Ci0JCQkJCVRYX1NUQVRfQ1RMX09XTkVSX1NIRik7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGxhbl9zYWE5NzMwX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgIHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKLXsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIGxwLT5idWZmZXJfc2l6ZSwgbHAtPmJ1ZmZlcl9zdGFydCwKLQkJCSAgICBscC0+ZG1hX2FkZHIpOwotfQotCi1zdGF0aWMgaW50IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKLXsKLQl2b2lkICpQYTsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgcnhvZmZzZXQsIHR4b2Zmc2V0OwotCWludCByZXQ7Ci0KLQkvKiBJbml0aWFsaXplIGJ1ZmZlciBzcGFjZSAqLwotCWxwLT5EbWFSY3ZQYWNrZXRzID0gTEFOX1NBQTk3MzBfUkNWX1FfU0laRTsKLQlscC0+RG1hVHhtUGFja2V0cyA9IExBTl9TQUE5NzMwX1RYTV9RX1NJWkU7Ci0KLQkvKiBJbml0aWFsaXplIFJ4IEJ1ZmZlciBJbmRleCAqLwotCWxwLT5OZXh0UmN2UGFja2V0SW5kZXggPSAwOwotCWxwLT5OZXh0UmN2QnVmZmVySW5kZXggPSAwOwotCi0JLyogU2V0IGN1cnJlbnQgYnVmZmVyIGluZGV4ICYgbmV4dCBhdmFpbGFibGUgcGFja2V0IGluZGV4ICovCi0JbHAtPk5leHRUeG1QYWNrZXRJbmRleCA9IDA7Ci0JbHAtPk5leHRUeG1CdWZmZXJJbmRleCA9IDA7Ci0JbHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleCA9IDA7Ci0JbHAtPlBlbmRpbmdUeG1CdWZmZXJJbmRleCA9IDA7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIGFsbCBSWCBhbmQgVFggcGFja2V0cyBpbiBvbmUgY2h1bmsuCi0JICogVGhlIFJ4IGFuZCBUeCBwYWNrZXRzIG11c3QgYmUgUEFDS0VUX1NJWkUgYWxpZ25lZC4KLQkgKi8KLQlscC0+YnVmZmVyX3NpemUgPSAoKExBTl9TQUE5NzMwX1JDVl9RX1NJWkUgKyBMQU5fU0FBOTczMF9UWE1fUV9TSVpFKSAqCi0JCQkgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRSAqIExBTl9TQUE5NzMwX0JVRkZFUlMpICsKLQkJCSAgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkU7Ci0JbHAtPmJ1ZmZlcl9zdGFydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIGxwLT5idWZmZXJfc2l6ZSwKLQkJCQkJCSZscC0+ZG1hX2FkZHIpOwotCWlmICghbHAtPmJ1ZmZlcl9zdGFydCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlQYSA9ICh2b2lkICopQUxJR04oKHVuc2lnbmVkIGxvbmcpbHAtPmJ1ZmZlcl9zdGFydCwKLQkJCSAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFKTsKLQotCXJ4b2Zmc2V0ID0gUGEgLSBscC0+YnVmZmVyX3N0YXJ0OwotCi0JLyogSW5pdCBSWCBidWZmZXJzICovCi0JZm9yIChpID0gMDsgaSA8IExBTl9TQUE5NzMwX0JVRkZFUlM7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgTEFOX1NBQTk3MzBfUkNWX1FfU0laRTsgaisrKSB7Ci0JCQkqKHVuc2lnbmVkIGludCAqKSBQYSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoUlhTRl9SRUFEWSA8PAotCQkJCQlSWF9TVEFUX0NUTF9PV05FUl9TSEYpOwotCQkJbHAtPlJjdkJ1ZmZlcltpXVtqXSA9IFBhOwotCQkJUGEgKz0gTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkU7Ci0JCX0KLQl9Ci0KLQl0eG9mZnNldCA9IFBhIC0gbHAtPmJ1ZmZlcl9zdGFydDsKLQotCS8qIEluaXQgVFggYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9CVUZGRVJTOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IExBTl9TQUE5NzMwX1RYTV9RX1NJWkU7IGorKykgewotCQkJKih1bnNpZ25lZCBpbnQgKikgUGEgPQotCQkJICAgIGNwdV90b19sZTMyKFRYU0ZfRU1QVFkgPDwKLQkJCQkJVFhfU1RBVF9DVExfT1dORVJfU0hGKTsKLQkJCWxwLT5UeG1CdWZmZXJbaV1bal0gPSBQYTsKLQkJCVBhICs9IExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTZXQgcnggYnVmZmVyIEEgYW5kIHJ4IGJ1ZmZlciBCIHRvIHBvaW50IHRvIHRoZSBmaXJzdCB0d28gYnVmZmVyCi0JICogc3BhY2VzLgotCSAqLwotCXdyaXRlbChscC0+ZG1hX2FkZHIgKyByeG9mZnNldCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEJ1ZmZBKTsKLQl3cml0ZWwobHAtPmRtYV9hZGRyICsgcnhvZmZzZXQgKwotCSAgICAgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRSAqIExBTl9TQUE5NzMwX1JDVl9RX1NJWkUsCi0JICAgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhCdWZmQik7Ci0KLQkvKgotCSAqIFNldCB0eG1fYnVmX2EgYW5kIHR4bV9idWZfYiB0byBwb2ludCB0byB0aGUgZmlyc3QgdHdvIGJ1ZmZlcgotCSAqIHNwYWNlCi0JICovCi0Jd3JpdGVsKGxwLT5kbWFfYWRkciArIHR4b2Zmc2V0LAotCSAgICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4QnVmZkEpOwotCXdyaXRlbChscC0+ZG1hX2FkZHIgKyB0eG9mZnNldCArCi0JICAgICAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFICogTEFOX1NBQTk3MzBfVFhNX1FfU0laRSwKLQkgICAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEJ1ZmZCKTsKLQotCS8qIFNldCBwYWNrZXQgbnVtYmVyICovCi0Jd3JpdGVsKChscC0+RG1hUmN2UGFja2V0cyA8PCBQS19DT1VOVF9SWF9BX1NIRikgfAotCSAgICAgICAobHAtPkRtYVJjdlBhY2tldHMgPDwgUEtfQ09VTlRfUlhfQl9TSEYpIHwKLQkgICAgICAgKGxwLT5EbWFUeG1QYWNrZXRzIDw8IFBLX0NPVU5UX1RYX0FfU0hGKSB8Ci0JICAgICAgIChscC0+RG1hVHhtUGFja2V0cyA8PCBQS19DT1VOVF9UWF9CX1NIRiksCi0JICAgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UGFja2V0Q291bnQpOwotCi0JcmV0dXJuIDA7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGxhbl9zYWE5NzMwX2NhbV9sb2FkKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBjaGFyICpOZXR3b3JrQWRkcmVzczsKLQotCU5ldHdvcmtBZGRyZXNzID0gKHVuc2lnbmVkIGNoYXIgKikgJmxwLT5QaHlzaWNhbEFkZHJlc3NbMF1bMF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQ0FNX0RXT1JEUzsgaSsrKSB7Ci0JCS8qIEZpcnN0IHNldCBhZGRyZXNzIHRvIHdoZXJlIGRhdGEgaXMgd3JpdHRlbiAqLwotCQl3cml0ZWwoaSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1BZGRyZXNzKTsKLQkJd3JpdGVsKChOZXR3b3JrQWRkcmVzc1swXSA8PCAyNCkgfCAoTmV0d29ya0FkZHJlc3NbMV0gPDwgMTYpIHwKLQkJICAgICAgIChOZXR3b3JrQWRkcmVzc1syXSA8PCA4KSB8IE5ldHdvcmtBZGRyZXNzWzNdLAotCQkgICAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhKTsKLQkJTmV0d29ya0FkZHJlc3MgKz0gNDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY2FtX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGludCBpOwotCi0JLyogQ29weSBNQUMtYWRkcmVzcyBpbnRvIGFsbCBlbnRyaWVzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9DQU1fRU5UUklFUzsgaSsrKSB7Ci0JCW1lbWNweSgodW5zaWduZWQgY2hhciAqKSBscC0+UGh5c2ljYWxBZGRyZXNzW2ldLAotCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikgZGV2LT5kZXZfYWRkciwgNik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfbWlpX2luaXQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQotewotCWludCBpLCBsOwotCi0JLyogQ2hlY2sgbGluayBzdGF0dXMsIHNwaW4gaGVyZSB0aWxsIHN0YXRpb24gaXMgbm90IGJ1c3kuICovCi0JaSA9IDA7Ci0Jd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYgTURfQ0FfQlVTWSkgewotCQlpKys7Ci0JCWlmIChpID4gMTAwKSB7Ci0JCQlwcmludGsoIkVycm9yOiBsYW5fc2FhOTczMF9taWlfaW5pdDogdGltZW91dFxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJbWRlbGF5KDEpOwkvKiB3YWl0IDEgbXMuICovCi0JfQotCi0JLyogTm93IHNldCB0aGUgY29udHJvbCBhbmQgYWRkcmVzcyByZWdpc3Rlci4gKi8KLQl3cml0ZWwoTURfQ0FfQlVTWSB8IFBIWV9TVEFUVVMgfCBQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGLAotCSAgICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKLQotCS8qIGNoZWNrIGxpbmsgc3RhdHVzLCBzcGluIGhlcmUgdGlsbCBzdGF0aW9uIGlzIG5vdCBidXN5ICovCi0JaSA9IDA7Ci0Jd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYgTURfQ0FfQlVTWSkgewotCQlpKys7Ci0JCWlmIChpID4gMTAwKSB7Ci0JCQlwcmludGsoIkVycm9yOiBsYW5fc2FhOTczMF9taWlfaW5pdDogdGltZW91dFxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJbWRlbGF5KDEpOwkvKiB3YWl0IDEgbXMuICovCi0JfQotCi0JLyogV2FpdCBmb3IgMSBtcy4gKi8KLQltZGVsYXkoMSk7Ci0KLQkvKiBDaGVjayB0aGUgbGluayBzdGF0dXMuICovCi0JaWYgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCi0JICAgIFBIWV9TVEFUVVNfTElOS19VUCkgewotCQkvKiBMaW5rIGlzIHVwLiAqLwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQkvKiBMaW5rIGlzIGRvd24sIHJlc2V0IHRoZSBQSFkgZmlyc3QuICovCi0KLQkJLyogc2V0IFBIWSBhZGRyZXNzID0gJ0NPTlRST0wnICovCi0JCXdyaXRlbChQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfCBQSFlfQ09OVFJPTCwKLQkJICAgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpOwotCi0JCS8qIFdhaXQgZm9yIDEgbXMuICovCi0JCW1kZWxheSgxKTsKLQotCQkvKiBzZXQgJ0NPTlRST0wnID0gZm9yY2UgcmVzZXQgYW5kIHJlbmVnb3RpYXRlICovCi0JCXdyaXRlbChQSFlfQ09OVFJPTF9SRVNFVCB8IFBIWV9DT05UUk9MX0FVVE9fTkVHIHwKLQkJICAgICAgIFBIWV9DT05UUk9MX1JFU1RBUlRfQVVUT19ORUcsCi0JCSAgICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210RGF0YSk7Ci0KLQkJLyogV2FpdCBmb3IgNTAgbXMuICovCi0JCW1kZWxheSg1MCk7Ci0KLQkJLyogc2V0ICdCVVNZJyB0byBzdGFydCBvcGVyYXRpb24gKi8KLQkJd3JpdGVsKE1EX0NBX0JVU1kgfCBQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfAotCQkgICAgICAgUEhZX0NPTlRST0wsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpOwotCi0JCS8qIGF3YWl0IGNvbXBsZXRpb24gKi8KLQkJaSA9IDA7Ci0JCXdoaWxlIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKSAmCi0JCSAgICAgICBNRF9DQV9CVVNZKSB7Ci0JCQlpKys7Ci0JCQlpZiAoaSA+IDEwMCkgewotCQkJCXByaW50awotCQkJCSAgICAoIkVycm9yOiBsYW5fc2FhOTczMF9taWlfaW5pdDogdGltZW91dFxuIik7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQkJbWRlbGF5KDEpOwkvKiB3YWl0IDEgbXMuICovCi0JCX0KLQotCQkvKiBXYWl0IGZvciAxIG1zLiAqLwotCQltZGVsYXkoMSk7Ci0KLQkJZm9yIChsID0gMDsgbCA8IDI7IGwrKykgewotCQkJLyogc2V0IFBIWSBhZGRyZXNzID0gJ1NUQVRVUycgKi8KLQkJCXdyaXRlbChNRF9DQV9CVVNZIHwgUEhZX0FERFJFU1MgPDwgTURfQ0FfUEhZX1NIRiB8Ci0JCQkgICAgICAgUEhZX1NUQVRVUywKLQkJCSAgICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKLQotCQkJLyogYXdhaXQgY29tcGxldGlvbiAqLwotCQkJaSA9IDA7Ci0JCQl3aGlsZSAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgotCQkJICAgICAgIE1EX0NBX0JVU1kpIHsKLQkJCQlpKys7Ci0JCQkJaWYgKGkgPiAxMDApIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoIkVycm9yOiBsYW5fc2FhOTczMF9taWlfaW5pdDogdGltZW91dFxuIik7Ci0JCQkJCXJldHVybiAtMTsKLQkJCQl9Ci0JCQkJbWRlbGF5KDEpOwkvKiB3YWl0IDEgbXMuICovCi0JCQl9Ci0KLQkJCS8qIHdhaXQgZm9yIDMgc2VjLiAqLwotCQkJbWRlbGF5KDMwMDApOwotCi0JCQkvKiBjaGVjayB0aGUgbGluayBzdGF0dXMgKi8KLQkJCWlmIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210RGF0YSkgJgotCQkJICAgIFBIWV9TVEFUVVNfTElOS19VUCkgewotCQkJCS8qIGxpbmsgaXMgdXAgKi8KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxhbl9zYWE5NzMwX2NvbnRyb2xfaW5pdChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCi17Ci0JLyogSW5pdGlhbGl6ZSBETUEgY29udHJvbCByZWdpc3Rlci4gKi8KLQl3cml0ZWwoKExBTk1CX0FOWSA8PCBETUFfQ1RMX01BWF9YRkVSX1NIRikgfAotCSAgICAgICAoTEFORU5EX0xJVFRMRSA8PCBETUFfQ1RMX0VORElBTl9TSEYpIHwKLQkgICAgICAgKExBTl9TQUE5NzMwX1JDVl9RX0lOVF9USFJFU0hPTEQgPDwgRE1BX0NUTF9SWF9JTlRfQ09VTlRfU0hGKQotCSAgICAgICB8IERNQV9DVExfUlhfSU5UX1RPX0VOIHwgRE1BX0NUTF9SWF9JTlRfRU4gfAotCSAgICAgICBETUFfQ1RMX01BQ19SWF9JTlRfRU4gfCBETUFfQ1RMX01BQ19UWF9JTlRfRU4sCi0JICAgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKTsKLQotCS8qIEluaXRpYWwgTUFDIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0Jd3JpdGVsKChNQUNDTV9NSUkgPDwgTUFDX0NPTlRST0xfQ09OTl9TSEYpIHwgTUFDX0NPTlRST0xfRlVMTF9EVVAsCi0JICAgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TWFjQ3RsKTsKLQotCS8qIEluaXRpYWxpemUgQ0FNIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0Jd3JpdGVsKENBTV9DT05UUk9MX0NPTVBfRU4gfCBDQU1fQ09OVFJPTF9CUk9BRF9BQ0MsCi0JICAgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBDQU0gZW5hYmxlIHJlZ2lzdGVyLCBvbmx5IHR1cm4gb24gZmlyc3QgZW50cnksIHNob3VsZAotCSAqIGNvbnRhaW4gb3duIGFkZHIuCi0JICovCi0Jd3JpdGVsKDB4MDAwMSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1FbmFibGUpOwotCi0JLyogSW5pdGlhbGl6ZSBUeCBjb250cm9sIHJlZ2lzdGVyICovCi0Jd3JpdGVsKFRYX0NUTF9FTl9DT01QLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKTsKLQotCS8qIEluaXRpYWxpemUgUmN2IGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQl3cml0ZWwoUlhfQ1RMX1NUUklQX0NSQywgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCk7Ci0KLQkvKiBSZXNldCBETUEgZW5naW5lICovCi0Jd3JpdGVsKERNQV9URVNUX1NXX1JFU0VULCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVRlc3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfc3RvcChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCi17Ci0JaW50IGk7Ci0KLQkvKiBTdG9wIERNQSBmaXJzdCAqLwotCXdyaXRlbChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCkgJgotCSAgICAgICB+KERNQV9DVExfRU5fVFhfRE1BIHwgRE1BX0NUTF9FTl9SWF9ETUEpLAotCSAgICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCk7Ci0KLQkvKiBTZXQgdGhlIFNXIFJlc2V0IGJpdHMgaW4gRE1BIGFuZCBNQUMgY29udHJvbCByZWdpc3RlcnMgKi8KLQl3cml0ZWwoRE1BX1RFU1RfU1dfUkVTRVQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hVGVzdCk7Ci0Jd3JpdGVsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TWFjQ3RsKSB8IE1BQ19DT05UUk9MX1JFU0VULAotCSAgICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCk7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIE1BQyByZXNldCB0byBoYXZlIGZpbmlzaGVkLiBUaGUgcmVzZXQgYml0IGlzIGF1dG8gY2xlYXJlZAotCSAqIHdoZW4gdGhlIHJlc2V0IGlzIGRvbmUuCi0JICovCi0JaSA9IDA7Ci0Jd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TWFjQ3RsKSAmIE1BQ19DT05UUk9MX1JFU0VUKSB7Ci0JCWkrKzsKLQkJaWYgKGkgPiAxMDApIHsKLQkJCXByaW50awotCQkJICAgICgiRXJyb3I6IGxhbl9zYTk3MzBfc3RvcDogTUFDIHJlc2V0IHRpbWVvdXRcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCW1kZWxheSgxKTsJLyogd2FpdCAxIG1zLiAqLwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxhbl9zYWE5NzMwX2RtYV9pbml0KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKLXsKLQkvKiBTdG9wIGxhbiBjb250cm9sbGVyLiAqLwotCWxhbl9zYWE5NzMwX3N0b3AobHApOwotCi0Jd3JpdGVsKExBTl9TQUE5NzMwX0RFRkFVTFRfVElNRV9PVVRfQ05ULAotCSAgICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlRpbWVvdXQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfc3RhcnQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQotewotCWxhbl9zYWE5NzMwX2J1ZmZlcl9pbml0KGxwKTsKLQotCS8qIEluaXRpYWxpemUgUnggQnVmZmVyIEluZGV4ICovCi0JbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7Ci0JbHAtPk5leHRSY3ZCdWZmZXJJbmRleCA9IDA7Ci0KLQkvKiBTZXQgY3VycmVudCBidWZmZXIgaW5kZXggJiBuZXh0IGF2YWlsYWJsZSBwYWNrZXQgaW5kZXggKi8KLQlscC0+TmV4dFR4bVBhY2tldEluZGV4ID0gMDsKLQlscC0+TmV4dFR4bUJ1ZmZlckluZGV4ID0gMDsKLQlscC0+UGVuZGluZ1R4bVBhY2tldEluZGV4ID0gMDsKLQlscC0+UGVuZGluZ1R4bUJ1ZmZlckluZGV4ID0gMDsKLQotCXdyaXRlbChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCkgfCBETUFfQ1RMX0VOX1RYX0RNQSB8Ci0JICAgICAgIERNQV9DVExfRU5fUlhfRE1BLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCk7Ci0KLQkvKiBGb3IgVHgsIHR1cm4gb24gTUFDIHRoZW4gRE1BICovCi0Jd3JpdGVsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpIHwgVFhfQ1RMX1RYX0VOLAotCSAgICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKTsKLQotCS8qIEZvciBSeCwgdHVybiBvbiBETUEgdGhlbiBNQUMgKi8KLQl3cml0ZWwocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCkgfCBSWF9DVExfUlhfRU4sCi0JICAgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpOwotCi0JLyogU2V0IE9rMlVzZSB0byBsZXQgaGFyZHdhcmUgb3duIHRoZSBidWZmZXJzLgkqLwotCXdyaXRlbChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYW5fc2FhOTczMF9yZXN0YXJ0KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKLXsKLQlsYW5fc2FhOTczMF9zdG9wKGxwKTsKLQlsYW5fc2FhOTczMF9zdGFydChscCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYW5fc2FhOTczMF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50ICpwUGFja2V0OwotCXVuc2lnbmVkIGludCB0eF9zdGF0dXM7Ci0KLQlpZiAobGFuX3NhYTk3MzBfZGVidWcgPiA1KQotCQlwcmludGsoImxhbl9zYWE5NzMwX3R4IGludGVycnVwdFxuIik7Ci0KLQkvKiBDbGVhciBpbnRlcnJ1cHQuICovCi0Jd3JpdGVsKERNQV9TVEFUVVNfTUFDX1RYX0lOVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpOwotCi0Jd2hpbGUgKDEpIHsKLQkJcFBhY2tldCA9IGxwLT5UeG1CdWZmZXJbbHAtPlBlbmRpbmdUeG1CdWZmZXJJbmRleF0KLQkJCQkgICAgICAgW2xwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXhdOwotCi0JCS8qIEdldCBzdGF0dXMgb2YgZmlyc3QgcGFja2V0IHRyYW5zbWl0dGVkLiAqLwotCQl0eF9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqcFBhY2tldCk7Ci0KLQkJLyogQ2hlY2sgb3duZXJzaGlwLiAqLwotCQlpZiAoKHR4X3N0YXR1cyAmIFRYX1NUQVRfQ1RMX09XTkVSX01TSykgIT0KLQkJICAgIChUWFNGX0hXRE9ORSA8PCBUWF9TVEFUX0NUTF9PV05FUl9TSEYpKSBicmVhazsKLQotCQkvKiBDaGVjayBmb3IgZXJyb3IuICovCi0JCWlmICh0eF9zdGF0dXMgJiBUWF9TVEFUX0NUTF9FUlJPUl9NU0spIHsKLQkJCWlmIChsYW5fc2FhOTczMF9kZWJ1ZyA+IDEpCi0JCQkJcHJpbnRrKCJsYW5fc2FhOTczMF90eDogdHggZXJyb3IgPSAleFxuIiwKLQkJCQkgICAgICAgdHhfc3RhdHVzKTsKLQotCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJCWlmICh0eF9zdGF0dXMgJgotCQkJICAgIChUWF9TVEFUVVNfRVhfQ09MTCA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQlpZiAodHhfc3RhdHVzICYKLQkJCSAgICAoVFhfU1RBVFVTX0xBVEVfQ09MTCA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKLQkJCWlmICh0eF9zdGF0dXMgJgotCQkJICAgIChUWF9TVEFUVVNfTF9DQVJSIDw8IFRYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJCWlmICh0eF9zdGF0dXMgJgotCQkJICAgIChUWF9TVEFUVVNfVU5ERVIgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwotCQkJaWYgKHR4X3N0YXR1cyAmCi0JCQkgICAgKFRYX1NUQVRVU19TUV9FUlIgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7Ci0KLQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPQotCQkJCXR4X3N0YXR1cyAmIFRYX1NUQVRVU19UWF9DT0xMX01TSzsKLQkJfQotCi0JCS8qIEZyZWUgYnVmZmVyLiAqLwotCQkqcFBhY2tldCA9Ci0JCSAgICBjcHVfdG9fbGUzMihUWFNGX0VNUFRZIDw8IFRYX1NUQVRfQ1RMX09XTkVSX1NIRik7Ci0KLQkJLyogVXBkYXRlIHBlbmRpbmcgaW5kZXggcG9pbnRlci4gKi8KLQkJbHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleCsrOwotCQlpZiAobHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleCA+PSBMQU5fU0FBOTczMF9UWE1fUV9TSVpFKSB7Ci0JCQlscC0+UGVuZGluZ1R4bVBhY2tldEluZGV4ID0gMDsKLQkJCWxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggXj0gMTsKLQkJfQotCX0KLQotCS8qIFRoZSB0eCBidWZmZXIgaXMgbm8gbG9uZ2VyIGZ1bGwuICovCi0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBsZW4gPSAwOwotCXN0cnVjdCBza19idWZmICpza2IgPSAwOwotCXVuc2lnbmVkIGludCByeF9zdGF0dXM7Ci0JaW50IEJ1ZmZlckluZGV4OwotCWludCBQYWNrZXRJbmRleDsKLQl1bnNpZ25lZCBpbnQgKnBQYWNrZXQ7Ci0JdW5zaWduZWQgY2hhciAqcERhdGE7Ci0KLQlpZiAobGFuX3NhYTk3MzBfZGVidWcgPiA1KQotCQlwcmludGsoImxhbl9zYWE5NzMwX3J4IGludGVycnVwdFxuIik7Ci0KLQkvKiBDbGVhciByZWNlaXZlIGludGVycnVwdHMuICovCi0Jd3JpdGVsKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKLQkgICAgICAgRE1BX1NUQVRVU19SWF9UT19JTlQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKTsKLQotCS8qIEFkZHJlc3MgbmV4dCBwYWNrZXQgKi8KLQlCdWZmZXJJbmRleCA9IGxwLT5OZXh0UmN2QnVmZmVySW5kZXg7Ci0JUGFja2V0SW5kZXggPSBscC0+TmV4dFJjdlBhY2tldEluZGV4OwotCXBQYWNrZXQgPSBscC0+UmN2QnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07Ci0Jcnhfc3RhdHVzID0gbGUzMl90b19jcHUoKnBQYWNrZXQpOwotCi0JLyogUHJvY2VzcyBlYWNoIHBhY2tldC4gKi8KLQl3aGlsZSAoKHJ4X3N0YXR1cyAmIFJYX1NUQVRfQ1RMX09XTkVSX01TSykgPT0KLQkgICAgICAgKFJYU0ZfSFdET05FIDw8IFJYX1NUQVRfQ1RMX09XTkVSX1NIRikpIHsKLQkJLyogQ2hlY2sgdGhlIHJ4IHN0YXR1cy4gKi8KLQkJaWYgKHJ4X3N0YXR1cyAmIChSWF9TVEFUVVNfR09PRCA8PCBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkgewotCQkJLyogUmVjZWl2ZWQgcGFja2V0IGlzIGdvb2QuICovCi0JCQlsZW4gPSAocnhfc3RhdHVzICYgUlhfU1RBVF9DVExfTEVOR1RIX01TSykgPj4KLQkJCSAgICBSWF9TVEFUX0NUTF9MRU5HVEhfU0hGOwotCi0JCQlwRGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIHBQYWNrZXQ7Ci0JCQlwRGF0YSArPSA0OwotCQkJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyAyKTsKLQkJCWlmIChza2IgPT0gMCkgewotCQkJCXByaW50awotCQkJCSAgICAoIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZGVmZXJyaW5nIHBhY2tldC5cbiIsCi0JCQkJICAgICBkZXYtPm5hbWUpOwotCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJfSBlbHNlIHsKLQkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKLQkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIGFsaWduICovCi0JCQkJc2tiX3B1dChza2IsIGxlbik7CS8qIG1ha2Ugcm9vbSAqLwotCQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwKLQkJCQkJCSAodW5zaWduZWQgY2hhciAqKSBwRGF0YSwKLQkJCQkJCSBsZW4pOwotCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCQkJbmV0aWZfcngoc2tiKTsKLQkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogV2UgZ290IGFuIGVycm9yIHBhY2tldC4gKi8KLQkJCWlmIChsYW5fc2FhOTczMF9kZWJ1ZyA+IDIpCi0JCQkJcHJpbnRrCi0JCQkJICAgICgibGFuX3NhYTk3MzBfcng6IFdlIGdvdCBhbiBlcnJvciBwYWNrZXQgPSAleFxuIiwKLQkJCQkgICAgIHJ4X3N0YXR1cyk7Ci0KLQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQlpZiAocnhfc3RhdHVzICYKLQkJCSAgICAoUlhfU1RBVFVTX0NSQ19FUlIgPDwgUlhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQlpZiAocnhfc3RhdHVzICYKLQkJCSAgICAoUlhfU1RBVFVTX0FMSUdOX0VSUiA8PCBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwotCQkJaWYgKHJ4X3N0YXR1cyAmCi0JCQkgICAgKFJYX1NUQVRVU19PVkVSRkxPVyA8PCBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7Ci0JCQlpZiAocnhfc3RhdHVzICYKLQkJCSAgICAoUlhfU1RBVFVTX0xPTkdfRVJSIDw8IFJYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQl9Ci0KLQkJLyogSW5kaWNhdGUgd2UgaGF2ZSBwcm9jZXNzZWQgdGhlIGJ1ZmZlci4gKi8KLQkJKnBQYWNrZXQgPSBjcHVfdG9fbGUzMihSWFNGX1JFQURZIDw8IFJYX1NUQVRfQ1RMX09XTkVSX1NIRik7Ci0KLQkJLyogTWFrZSBzdXJlIEEgb3IgQiBpcyBhdmFpbGFibGUgdG8gaGFyZHdhcmUgYXMgYXBwcm9wcmlhdGUuICovCi0JCXdyaXRlbChCdWZmZXJJbmRleCA/IE9LMlVTRV9SWF9CIDogT0syVVNFX1JYX0EsCi0JCSAgICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7Ci0KLQkJLyogR28gdG8gbmV4dCBwYWNrZXQgaW4gc2VxdWVuY2UuICovCi0JCWxwLT5OZXh0UmN2UGFja2V0SW5kZXgrKzsKLQkJaWYgKGxwLT5OZXh0UmN2UGFja2V0SW5kZXggPj0gTEFOX1NBQTk3MzBfUkNWX1FfU0laRSkgewotCQkJbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7Ci0JCQlscC0+TmV4dFJjdkJ1ZmZlckluZGV4IF49IDE7Ci0JCX0KLQotCQkvKiBBZGRyZXNzIG5leHQgcGFja2V0ICovCi0JCUJ1ZmZlckluZGV4ID0gbHAtPk5leHRSY3ZCdWZmZXJJbmRleDsKLQkJUGFja2V0SW5kZXggPSBscC0+TmV4dFJjdlBhY2tldEluZGV4OwotCQlwUGFja2V0ID0gbHAtPlJjdkJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdOwotCQlyeF9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqcFBhY2tldCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBsYW5fc2FhOTczMF9pbnRlcnJ1cHQoY29uc3QgaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChsYW5fc2FhOTczMF9kZWJ1ZyA+IDUpCi0JCXByaW50aygibGFuX3NhYTk3MzBfaW50ZXJydXB0XG4iKTsKLQotCS8qIERpc2FibGUgdGhlIEVWTSBMQU4gaW50ZXJydXB0LiAqLwotCWV2bV9zYWE5NzMwX2Jsb2NrX2xhbl9pbnQobHApOwotCi0JLyogQ2xlYXIgdGhlIEVWTSBMQU4gaW50ZXJydXB0LiAqLwotCWV2bV9zYWE5NzMwX2NsZWFyX2xhbl9pbnQobHApOwotCi0JLyogU2VydmljZSBwZW5kaW5nIHRyYW5zbWl0IGludGVycnVwdHMuICovCi0JaWYgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSAmIERNQV9TVEFUVVNfTUFDX1RYX0lOVCkKLQkJbGFuX3NhYTk3MzBfdHgoZGV2KTsKLQotCS8qIFNlcnZpY2UgcGVuZGluZyByZWNlaXZlIGludGVycnVwdHMuICovCi0JaWYgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSAmCi0JICAgIChETUFfU1RBVFVTX01BQ19SWF9JTlQgfCBETUFfU1RBVFVTX1JYX0lOVCB8Ci0JICAgICBETUFfU1RBVFVTX1JYX1RPX0lOVCkpIGxhbl9zYWE5NzMwX3J4KGRldik7Ci0KLQkvKiBFbmFibGUgdGhlIEVWTSBMQU4gaW50ZXJydXB0LiAqLwotCWV2bV9zYWE5NzMwX3VuYmxvY2tfbGFuX2ludChscCk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkvKiBBc3NvY2lhdGUgSVJRIHdpdGggbGFuX3NhYTk3MzBfaW50ZXJydXB0ICovCi0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmbGFuX3NhYTk3MzBfaW50ZXJydXB0LCAwLCAiU0FBOTczMCBFdGgiLAotCQkJZGV2KSkgewotCQlwcmludGsoImxhbl9zYWE5NzMwX29wZW46IENhbid0IGdldCBpcnEgJWRcbiIsIGRldi0+aXJxKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JLyogRW5hYmxlIHRoZSBMYW4gaW50ZXJydXB0IGluIHRoZSBldmVudCBtYW5hZ2VyLiAqLwotCWV2bV9zYWE5NzMwX2VuYWJsZV9sYW5faW50KGxwKTsKLQotCS8qIFN0YXJ0IHRoZSBMQU4gY29udHJvbGxlciAqLwotCWlmIChsYW5fc2FhOTczMF9zdGFydChscCkpCi0JCXJldHVybiAtMTsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYW5fc2FhOTczMF93cml0ZShzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAsCi0JCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBza2JsZW4pCi17Ci0JdW5zaWduZWQgY2hhciAqcGJEYXRhID0gc2tiLT5kYXRhOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2JsZW47Ci0JdW5zaWduZWQgY2hhciAqcGJQYWNrZXREYXRhOwotCXVuc2lnbmVkIGludCB0eF9zdGF0dXM7Ci0JaW50IEJ1ZmZlckluZGV4OwotCWludCBQYWNrZXRJbmRleDsKLQotCWlmIChsYW5fc2FhOTczMF9kZWJ1ZyA+IDUpCi0JCXByaW50aygibGFuX3NhYTk3MzBfd3JpdGU6IHNrYj0lcFxuIiwgc2tiKTsKLQotCUJ1ZmZlckluZGV4ID0gbHAtPk5leHRUeG1CdWZmZXJJbmRleDsKLQlQYWNrZXRJbmRleCA9IGxwLT5OZXh0VHhtUGFja2V0SW5kZXg7Ci0KLQl0eF9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqKHVuc2lnbmVkIGludCAqKWxwLT5UeG1CdWZmZXJbQnVmZmVySW5kZXhdCi0JCQkJCQkJICAgICAgW1BhY2tldEluZGV4XSk7Ci0JaWYgKCh0eF9zdGF0dXMgJiBUWF9TVEFUX0NUTF9PV05FUl9NU0spICE9Ci0JICAgIChUWFNGX0VNUFRZIDw8IFRYX1NUQVRfQ1RMX09XTkVSX1NIRikpIHsKLQkJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNCkKLQkJCXByaW50awotCQkJICAgICgibGFuX3NhYTk3MzBfd3JpdGU6IFR4IGJ1ZmZlciBub3QgYXZhaWxhYmxlOiB0eF9zdGF0dXMgPSAleFxuIiwKLQkJCSAgICAgdHhfc3RhdHVzKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWxwLT5OZXh0VHhtUGFja2V0SW5kZXgrKzsKLQlpZiAobHAtPk5leHRUeG1QYWNrZXRJbmRleCA+PSBMQU5fU0FBOTczMF9UWE1fUV9TSVpFKSB7Ci0JCWxwLT5OZXh0VHhtUGFja2V0SW5kZXggPSAwOwotCQlscC0+TmV4dFR4bUJ1ZmZlckluZGV4IF49IDE7Ci0JfQotCi0JcGJQYWNrZXREYXRhID0gbHAtPlR4bUJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdOwotCXBiUGFja2V0RGF0YSArPSA0OwotCi0JLyogY29weSB0aGUgYml0cyAqLwotCW1lbWNweShwYlBhY2tldERhdGEsIHBiRGF0YSwgbGVuKTsKLQotCS8qIFNldCB0cmFuc21pdCBzdGF0dXMgZm9yIGhhcmR3YXJlICovCi0JKih1bnNpZ25lZCBpbnQgKilscC0+VHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF0gPQotCQljcHVfdG9fbGUzMigoVFhTRl9SRUFEWSA8PCBUWF9TVEFUX0NUTF9PV05FUl9TSEYpIHwKLQkJCSAgICAoVFhfU1RBVF9DVExfSU5UX0FGVEVSX1RYIDw8Ci0JCQkgICAgIFRYX1NUQVRfQ1RMX0ZSQU1FX1NIRikgfAotCQkJICAgIChsZW4gPDwgVFhfU1RBVF9DVExfTEVOR1RIX1NIRikpOwotCi0JLyogTWFrZSBzdXJlIEEgb3IgQiBpcyBhdmFpbGFibGUgdG8gaGFyZHdhcmUgYXMgYXBwcm9wcmlhdGUuICovCi0Jd3JpdGVsKEJ1ZmZlckluZGV4ID8gT0syVVNFX1RYX0IgOiBPSzJVU0VfVFhfQSwKLQkgICAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGxhbl9zYWE5NzMwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogVHJhbnNtaXR0ZXIgdGltZW91dCwgc2VyaW91cyBwcm9ibGVtcyAqLwotCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JcHJpbnRrKCIlczogdHJhbnNtaXQgdGltZWQgb3V0LCByZXNldFxuIiwgZGV2LT5uYW1lKTsKLQkvKnNob3dfc2FhOTczMF9yZWdzKGRldik7ICovCi0JbGFuX3NhYTk3MzBfcmVzdGFydChscCk7Ci0KLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci19Ci0KLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHNrYmxlbjsKLQlpbnQgbGVuOwotCi0JaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCJTZW5kIHBhY2tldDogc2tiPSVwXG4iLCBza2IpOwotCi0Jc2tibGVuID0gc2tiLT5sZW47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQotCWxlbiA9IChza2JsZW4gPD0gRVRIX1pMRU4pID8gRVRIX1pMRU4gOiBza2JsZW47Ci0KLQlpZiAobGFuX3NhYTk3MzBfd3JpdGUobHAsIHNrYiwgc2tibGVuKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCQlwcmludGsoIkVycm9yIHdoZW4gd3JpdGluZyBwYWNrZXQgdG8gY29udHJvbGxlcjogc2tiPSVwXG4iLCBza2IpOwotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKLQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gMSkKLQkJcHJpbnRrKCJsYW5fc2FhOTczMF9jbG9zZTpcbiIpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JLyogRGlzYWJsZSB0aGUgTGFuIGludGVycnVwdCBpbiB0aGUgZXZlbnQgbWFuYWdlci4gKi8KLQlldm1fc2FhOTczMF9kaXNhYmxlX2xhbl9pbnQobHApOwotCi0JLyogU3RvcCB0aGUgY29udHJvbGxlciAqLwotCWlmIChsYW5fc2FhOTczMF9zdG9wKGxwKSkKLQkJcmV0dXJuIC0xOwotCi0JZnJlZV9pcnEoZGV2LT5pcnEsICh2b2lkICopIGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbGFuX3NhYTk3MzBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkvKiBTdG9wIHRoZSBjb250cm9sbGVyICovCi0JbGFuX3NhYTk3MzBfc3RvcChscCk7Ci0KLQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCS8qIGFjY2VwdCBhbGwgcGFja2V0cyAqLwotCQl3cml0ZWwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX1NUQVRJT05fQUNDIHwKLQkJICAgICAgIENBTV9DT05UUk9MX0dST1VQX0FDQyB8IENBTV9DT05UUk9MX0JST0FEX0FDQywKLQkJICAgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKTsKLQl9IGVsc2UgewotCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50KSB7Ci0JCQkvKiBhY2NlcHQgYWxsIG11bHRpY2FzdCBwYWNrZXRzICovCi0JCQkvKgotCQkJICogV2lsbCBoYW5kbGUgdGhlIG11bHRpY2FzdCBzdHVmZiBsYXRlci4gLWNhcnN0ZW5sCi0JCQkgKi8KLQkJCXdyaXRlbChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfR1JPVVBfQUNDIHwKLQkJCSAgICAgICBDQU1fQ09OVFJPTF9CUk9BRF9BQ0MsCi0JCQkgICAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1DdGwpOwotCQl9Ci0JfQotCi0JbGFuX3NhYTk3MzBfcmVzdGFydChscCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IHNhYTk3MzBfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoZGV2KSB7Ci0JCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JCWxhbl9zYWE5NzMwX2ZyZWVfYnVmZmVycyhwZGV2LCBscCk7Ci0JCWlvdW5tYXAobHAtPmxhbl9zYWE5NzMwX3JlZ3MpOwotCQlpb3VubWFwKGxwLT5ldm1fc2FhOTczMF9yZWdzKTsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQl1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IGlycSkKLXsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGNoYXIgZXRoZXJuZXRfYWRkcls2XTsKLQlpbnQgcmV0OwotCi0JaWYgKGdldF9ldGhlcm5ldF9hZGRyKGV0aGVybmV0X2FkZHIpKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW1lbWNweShkZXYtPmRldl9hZGRyLCBldGhlcm5ldF9hZGRyLCA2KTsKLQlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKLQlkZXYtPmlycSA9IGlycTsKLQotCWxwLT5wY2lfZGV2ID0gcGRldjsKLQotCS8qIFNldCBTQUE5NzMwIExBTiBiYXNlIGFkZHJlc3MuICovCi0JbHAtPmxhbl9zYWE5NzMwX3JlZ3MgPSBpb3JlbWFwKGlvYWRkciArIFNBQTk3MzBfTEFOX1JFR1NfQUREUiwKLQkJCQkgICAgICAgU0FBOTczMF9MQU5fUkVHU19TSVpFKTsKLQlpZiAoIWxwLT5sYW5fc2FhOTczMF9yZWdzKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFNldCBTQUE5NzMwIEVWTSBiYXNlIGFkZHJlc3MuICovCi0JbHAtPmV2bV9zYWE5NzMwX3JlZ3MgPSBpb3JlbWFwKGlvYWRkciArIFNBQTk3MzBfRVZNX1JFR1NfQUREUiwKLQkJCQkgICAgICAgU0FBOTczMF9FVk1fUkVHU19TSVpFKTsKLQlpZiAoIWxwLT5ldm1fc2FhOTczMF9yZWdzKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2lvdW5tYXBfbGFuOwotCX0KLQotCS8qIEFsbG9jYXRlIExBTiBSWC9UWCBmcmFtZSBidWZmZXIgc3BhY2UuICovCi0JaWYgKChyZXQgPSBsYW5fc2FhOTczMF9hbGxvY2F0ZV9idWZmZXJzKHBkZXYsIGxwKSkpCi0JCWdvdG8gb3V0X2lvdW5tYXA7Ci0KLQkvKiBTdG9wIExBTiBjb250cm9sbGVyLiAqLwotCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfc3RvcChscCkpKQotCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7Ci0KLQkvKiBJbml0aWFsaXplIENBTSByZWdpc3RlcnMuICovCi0JaWYgKChyZXQgPSBsYW5fc2FhOTczMF9jYW1faW5pdChkZXYpKSkKLQkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OwotCi0JLyogSW5pdGlhbGl6ZSBNSUkgcmVnaXN0ZXJzLiAqLwotCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfbWlpX2luaXQobHApKSkKLQkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OwotCi0JLyogSW5pdGlhbGl6ZSBjb250cm9sIHJlZ2lzdGVycy4gKi8KLQlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NvbnRyb2xfaW5pdChscCkpKQotCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7Ci0KLQkvKiBMb2FkIENBTSByZWdpc3RlcnMuICovCi0JaWYgKChyZXQgPSBsYW5fc2FhOTczMF9jYW1fbG9hZChscCkpKQotCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7Ci0KLQkvKiBJbml0aWFsaXplIERNQSBjb250ZXh0IHJlZ2lzdGVycy4gKi8KLQlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2RtYV9pbml0KGxwKSkpCi0JCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKLQotCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7Ci0KLQlkZXYtPm9wZW4gPSBsYW5fc2FhOTczMF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbGFuX3NhYTk3MzBfc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSBsYW5fc2FhOTczMF9jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxhbl9zYWE5NzMwX3NldF9tdWx0aWNhc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gbGFuX3NhYTk3MzBfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gKEhaID4+IDEpOwotCWRldi0+ZG1hID0gMDsKLQotCXJldCA9IHJlZ2lzdGVyX25ldGRldiAoZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2ZyZWVfY29uc2lzdGVudDoKLQlsYW5fc2FhOTczMF9mcmVlX2J1ZmZlcnMocGRldiwgbHApOwotb3V0X2lvdW5tYXA6Ci0JaW91bm1hcChscC0+ZXZtX3NhYTk3MzBfcmVncyk7Ci1vdXRfaW91bm1hcF9sYW46Ci0JaW91bm1hcChscC0+bGFuX3NhYTk3MzBfcmVncyk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzYWE5NzMwX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgcGNpX2lvYWRkcjsKLQlpbnQgZXJyOwotCi0JaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gMSkKLQkJcHJpbnRrKCJzYWE5NzMwLmM6IFBDSSBiaW9zIGlzIHByZXNlbnQsIGNoZWNraW5nIGZvciBkZXZpY2VzLi4uXG4iKTsKLQotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UsIGFib3J0aW5nLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX01PRFVMRV9OQU1FKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZy5cbiIpOwotCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7Ci0JfQotCi0JcGNpX2lycV9saW5lID0gcGRldi0+aXJxOwotCS8qIExBTiBiYXNlIGFkZHJlc3MgaW4gbG9jYXRlZCBhdCBCQVIgMS4gKi8KLQotCXBjaV9pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7Ci0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQlwcmludGsoIkZvdW5kIFNBQTk3MzAgKFBDSSkgYXQgJWx4LCBpcnEgJWQuXG4iLAotCSAgICAgICBwY2lfaW9hZGRyLCBwY2lfaXJxX2xpbmUpOwotCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlKSk7Ci0JaWYgKCFkZXYpCi0JCWdvdG8gb3V0X2Rpc2FibGVfcGRldjsKLQotCWVyciA9IGxhbl9zYWE5NzMwX2luaXQoZGV2LCBwZGV2LCBwY2lfaW9hZGRyLCBwY2lfaXJxX2xpbmUpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKCJMQU4gaW5pdCBmYWlsZWQiKTsKLQkJZ290byBvdXRfZnJlZV9uZXRkZXY7Ci0JfQotCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKLQlyZXR1cm4gMDsKLQotb3V0X2ZyZWVfbmV0ZGV2OgotCWZyZWVfbmV0ZGV2KGRldik7Ci1vdXRfZGlzYWJsZV9wZGV2OgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLW91dDoKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2FhOTczMF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRFJWX01PRFVMRV9OQU1FLAotCS5pZF90YWJsZQk9IHNhYTk3MzBfcGNpX3RibCwKLQkucHJvYmUJCT0gc2FhOTczMF9pbml0X29uZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNhYTk3MzBfcmVtb3ZlX29uZSksCi19OwotCi0KLXN0YXRpYyBpbnQgX19pbml0IHNhYTk3MzBfaW5pdCh2b2lkKQotewotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzYWE5NzMwX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzYWE5NzMwX2NsZWFudXAodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhYTk3MzBfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoc2FhOTczMF9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTk3MzBfY2xlYW51cCk7Ci0KLU1PRFVMRV9BVVRIT1IoIlJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE5NzMwIGV0aGVybmV0IGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2FhOTczMC5oIGIvZHJpdmVycy9uZXQvc2FhOTczMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTBhMTIwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NhYTk3MzAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA1ICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCUF1dGhvcnM6IENhcnN0ZW4gTGFuZ2dhYXJkIDxjYXJzdGVubEBtaXBzLmNvbT4KLSAqCQkgTWFjaWVqIFcuIFJvenlja2kgPG1hY3JvQG1pcHMuY29tPgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqIFNBQTk3MzAgZXRoZXJuZXQgZHJpdmVyIGRlc2NyaXB0aW9uLgotICoKLSAqLwotI2lmbmRlZiBfU0FBOTczMF9ICi0jZGVmaW5lIF9TQUE5NzMwX0gKLQotCi0vKiBOdW1iZXIgb2YgNi1ieXRlIGVudHJpZXMgaW4gdGhlIENBTS4gKi8KLSNkZWZpbmUgTEFOX1NBQTk3MzBfQ0FNX0VOVFJJRVMgICAgICAgICAgICAgIDEwCi0jZGVmaW5lCUxBTl9TQUE5NzMwX0NBTV9EV09SRFMgICAgICAgICAgICAgICAoKExBTl9TQUE5NzMwX0NBTV9FTlRSSUVTKjYpLzQpCi0KLS8qIFRYIGFuZCBSWCBwYWNrZXQgc2l6ZTogZml4ZWQgdG8gMjA0OCBieXRlcywgYWNjb3JkaW5nIHRvIEhXIHJlcXVpcmVtZW50cy4gKi8KLSNkZWZpbmUgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDIwNDgKLQotLyoKLSAqIE51bWJlciBvZiBUWCBidWZmZXJzID0gbnVtYmVyIG9mIFJYIGJ1ZmZlcnMgPSAyLCB3aGljaCBpcyBmaXhlZCBhY2NvcmRpbmcKLSAqIHRvIEhXIHJlcXVpcmVtZW50cy4KLSAqLwotI2RlZmluZSBMQU5fU0FBOTczMF9CVUZGRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotCi0vKiBOdW1iZXIgb2YgUlggcGFja2V0cyBwZXIgUlggYnVmZmVyLiAqLwotI2RlZmluZSBMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgMTUKLQotLyogTnVtYmVyIG9mIFRYIHBhY2tldHMgcGVyIFRYIGJ1ZmZlci4gKi8KLSNkZWZpbmUgTEFOX1NBQTk3MzBfVFhNX1FfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0KLS8qCi0gKiBXZSBnZXQgYW4gaW50ZXJydXB0IGZvciBlYWNoIExBTl9TQUE5NzMwX0RFRkFVTFRfUkNWX1FfSU5UX1RIUkVTSE9MRAotICogcGFja2V0cyByZWNlaXZlZC4KLSAqIElmIGhvd2V2ZXIgd2UgcmVjZWl2ZSBsZXNzIHRoYW4gIExBTl9TQUE5NzMwX0RFRkFVTFRfUkNWX1FfSU5UX1RIUkVTSE9MRAotICogcGFja2V0cywgdGhlIGhhcmR3YXJlIGNhbiB0aW1lb3V0IGFmdGVyIGEgY2VydGFpbiB0aW1lIGFuZCBzdGlsbCB0ZWxsCi0gKiB1cyBwYWNrZXRzIGhhdmUgYXJyaXZlZC4KLSAqIFRoZSB0aW1lb3V0IHZhbHVlIGluIHVuaXQgb2YgMzIgUENJIGNsb2NrcyAoMzNNaHopLgotICogVGhlIHZhbHVlIDIwMCBhcHByb3hpbWF0ZXMgMC4wMDAyIHNlY29uZHMuCi0gKi8KLSNkZWZpbmUgTEFOX1NBQTk3MzBfUkNWX1FfSU5UX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTEFOX1NBQTk3MzBfREVGQVVMVF9USU1FX09VVF9DTlQgICAgICAgICAgICAgIDEwCi0KLSNkZWZpbmUgUlhTRl9ORElTICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJYU0ZfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBSWFNGX0hXRE9ORSAgICAgICAgICAgICAgICAgICAgIDMKLQotI2RlZmluZSBUWFNGX0VNUFRZICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVFhTRl9SRUFEWSAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFRYU0ZfSFdET05FICAgICAgICAgICAgICAgICAgICAgMwotCi0jZGVmaW5lIExBTkVORF9MSVRUTEUgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBMQU5FTkRfQklHXzIxNDMgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTEFORU5EX0JJR180MzIxICAgICAgICAgICAgICAgICAyCi0KLSNkZWZpbmUgTEFOTUJfQU5ZICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExBTk1CXzggICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBMQU5NQl8zMiAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTEFOTUJfNjQgICAgICAgICAgICAgICAgICAgICAgICAzCi0KLSNkZWZpbmUgTUFDQ01fQVVUT01BVElDICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ0NNXzEwTUIgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBNQUNDTV9NSUkgICAgICAgICAgICAgICAgICAgICAgIDIKLQotLyoKLSAqIFBIWSBkZWZpbml0aW9ucyBmb3IgQmFzaWMgcmVnaXN0ZXJzIG9mIFFTNjYxMiAodXNlZCBvbiBNSVBTIEFUTEFTIGJvYXJkKQotICovCi0jZGVmaW5lIFBIWV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHgwCi0jZGVmaW5lIFBIWV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgxCi0jZGVmaW5lIFBIWV9TVEFUVVNfTElOS19VUCAgICAgICAgICAgICAgMHg0Ci0jZGVmaW5lIFBIWV9DT05UUk9MX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwCi0jZGVmaW5lIFBIWV9DT05UUk9MX0FVVE9fTkVHICAgICAgICAgICAgMHgxMDAwCi0jZGVmaW5lIFBIWV9DT05UUk9MX1JFU1RBUlRfQVVUT19ORUcgICAgMHgwMjAwCi0jZGVmaW5lIFBIWV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwCi0KLS8qIFBLX0NPVU5UIHJlZ2lzdGVyLiAqLwotI2RlZmluZSBQS19DT1VOVF9UWF9BX1NIRiAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBLX0NPVU5UX1RYX0FfTVNLICAgICAgICAgICAgICAgKDB4ZmYgPDwgUEtfQ09VTlRfVFhfQV9TSEYpCi0jZGVmaW5lIFBLX0NPVU5UX1RYX0JfU0hGICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEtfQ09VTlRfVFhfQl9NU0sgICAgICAgICAgICAgICAoMHhmZiA8PCBQS19DT1VOVF9UWF9CX1NIRikKLSNkZWZpbmUgUEtfQ09VTlRfUlhfQV9TSEYgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBLX0NPVU5UX1JYX0FfTVNLICAgICAgICAgICAgICAgKDB4ZmYgPDwgUEtfQ09VTlRfUlhfQV9TSEYpCi0jZGVmaW5lIFBLX0NPVU5UX1JYX0JfU0hGICAgICAgICAgICAgICAgMAotI2RlZmluZSBQS19DT1VOVF9SWF9CX01TSyAgICAgICAgICAgICAgICgweGZmIDw8IFBLX0NPVU5UX1JYX0JfU0hGKQotCi0vKiBPSzJVU0UgcmVnaXN0ZXIuICovCi0jZGVmaW5lIE9LMlVTRV9UWF9BICAgICAgICAgICAgICAgICAgICAgMHg4Ci0jZGVmaW5lIE9LMlVTRV9UWF9CICAgICAgICAgICAgICAgICAgICAgMHg0Ci0jZGVmaW5lIE9LMlVTRV9SWF9BICAgICAgICAgICAgICAgICAgICAgMHgyCi0jZGVmaW5lIE9LMlVTRV9SWF9CICAgICAgICAgICAgICAgICAgICAgMHgxCi0KLS8qIExBTiBETUEgQ09OVFJPTCByZWdpc3Rlci4gKi8KLSNkZWZpbmUgRE1BX0NUTF9CTEtfSU5UICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIERNQV9DVExfTUFYX1hGRVJfU0hGICAgICAgICAgICAgMTgKLSNkZWZpbmUgRE1BX0NUTF9NQVhfWEZFUl9NU0sgICAgICAgICAgICAoMHgzIDw8IExBTl9ETUFfQ1RMX01BWF9YRkVSX1NIRikKLSNkZWZpbmUgRE1BX0NUTF9FTkRJQU5fU0hGICAgICAgICAgICAgICAxNgotI2RlZmluZSBETUFfQ1RMX0VORElBTl9NU0sgICAgICAgICAgICAgICgweDMgPDwgTEFOX0RNQV9DVExfRU5ESUFOX1NIRikKLSNkZWZpbmUgRE1BX0NUTF9SWF9JTlRfQ09VTlRfU0hGICAgICAgICA4Ci0jZGVmaW5lIERNQV9DVExfUlhfSU5UX0NPVU5UX01TSyAgICAgICAgKDB4ZmYgPDwgTEFOX0RNQV9DVExfUlhfSU5UX0NPVU5UX1NIRikKLSNkZWZpbmUgRE1BX0NUTF9FTl9UWF9ETUEgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIERNQV9DVExfRU5fUlhfRE1BICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBETUFfQ1RMX1JYX0lOVF9CVUZGVUxfRU4gICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgRE1BX0NUTF9SWF9JTlRfVE9fRU4gICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIERNQV9DVExfUlhfSU5UX0VOICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBETUFfQ1RMX1RYX0lOVF9FTiAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgRE1BX0NUTF9NQUNfVFhfSU5UX0VOICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIERNQV9DVExfTUFDX1JYX0lOVF9FTiAgICAgICAgICAgMHgwMDAwMDAwMQotCi0vKiBETUEgU1RBVFVTIHJlZ2lzdGVyLiAqLwotI2RlZmluZSBETUFfU1RBVFVTX0JBRF9BRERSX1NIRiAgICAgICAgIDE2Ci0jZGVmaW5lIERNQV9TVEFUVVNfQkFEX0FERFJfTVNLICAgICAgICAgKDB4ZiA8PCBETUFfU1RBVFVTX0JBRF9BRERSX1NIRikKLSNkZWZpbmUgRE1BX1NUQVRVU19SWF9QS1RTX1JFQ0VJVkVEX1NIRiA4Ci0jZGVmaW5lIERNQV9TVEFUVVNfUlhfUEtUU19SRUNFSVZFRF9NU0sgKDB4ZmYgPDwgRE1BX1NUQVRVU19SWF9QS1RTX1JFQ0VJVkVEX1NIRikKLSNkZWZpbmUgRE1BX1NUQVRVU19UWF9FTl9TWU5DICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIERNQV9TVEFUVVNfUlhfQlVGX0FfRlVMICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBETUFfU1RBVFVTX1JYX0JVRl9CX0ZVTCAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgRE1BX1NUQVRVU19SWF9UT19JTlQgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIERNQV9TVEFUVVNfUlhfSU5UICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBETUFfU1RBVFVTX1RYX0lOVCAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgRE1BX1NUQVRVU19NQUNfVFhfSU5UICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIERNQV9TVEFUVVNfTUFDX1JYX0lOVCAgICAgICAgICAgMHgwMDAwMDAwMQotCi0vKiBETUEgVEVTVC9QQU5JQyBTV0lUSEVTIHJlZ2lzdGVyLiAqLwotI2RlZmluZSBETUFfVEVTVF9MT09QQkFDSyAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgRE1BX1RFU1RfU1dfUkVTRVQgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0KLS8qIE1BQyBDT05UUk9MIHJlZ2lzdGVyLiAqLwotI2RlZmluZSBNQUNfQ09OVFJPTF9FTl9NSVNTX1JPTEwgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgTUFDX0NPTlRST0xfTUlTU19ST0xMICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIE1BQ19DT05UUk9MX0xPT1AxMCAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBNQUNfQ09OVFJPTF9DT05OX1NIRiAgICAgICAgICAgIDUKLSNkZWZpbmUgTUFDX0NPTlRST0xfQ09OTl9NU0sgICAgICAgICAgICAoMHgzIDw8IE1BQ19DT05UUk9MX0NPTk5fU0hGKQotI2RlZmluZSBNQUNfQ09OVFJPTF9NQUNfTE9PUCAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTUFDX0NPTlRST0xfRlVMTF9EVVAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIE1BQ19DT05UUk9MX1JFU0VUICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfQ09OVFJPTF9IQUxUX0lNTSAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUFDX0NPTlRST0xfSEFMVF9SRVEgICAgICAgICAgICAweDAwMDAwMDAxCi0KLS8qIENBTSBDT05UUk9MIHJlZ2lzdGVyLiAqLwotI2RlZmluZSBDQU1fQ09OVFJPTF9DT01QX0VOICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgQ0FNX0NPTlRST0xfTkVHX0NBTSAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIENBTV9DT05UUk9MX0JST0FEX0FDQyAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBDQU1fQ09OVFJPTF9HUk9VUF9BQ0MgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ0FNX0NPTlRST0xfU1RBVElPTl9BQ0MgICAgICAgICAweDAwMDAwMDAxCi0KLS8qIFRSQU5TTUlUIENPTlRST0wgcmVnaXN0ZXIuICovCi0jZGVmaW5lIFRYX0NUTF9FTl9DT01QICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBUWF9DVExfRU5fVFhfUEFSICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgVFhfQ1RMX0VOX0xBVEVfQ09MTCAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFRYX0NUTF9FTl9FWF9DT0xMICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBUWF9DVExfRU5fTF9DQVJSICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgVFhfQ1RMX0VOX0VYX0RFRkVSICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFRYX0NUTF9FTl9VTkRFUiAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBUWF9DVExfTUlJMTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgVFhfQ1RMX1NEX1BBVVNFICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFRYX0NUTF9OT19FWF9ERUYwICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBUWF9DVExfRl9CQUNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgVFhfQ1RMX05PX0NSQyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFRYX0NUTF9OT19QQUQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBUWF9DVExfVFhfSEFMVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgVFhfQ1RMX1RYX0VOICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0KLS8qIFRSQU5TTUlUIFNUQVRVUyByZWdpc3Rlci4gKi8KLSNkZWZpbmUgVFhfU1RBVFVTX1NRX0VSUiAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFRYX1NUQVRVU19UWF9IQUxURUQgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBUWF9TVEFUVVNfQ09NUCAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgVFhfU1RBVFVTX1RYX1BBUiAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFRYX1NUQVRVU19MQVRFX0NPTEwgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBUWF9TVEFUVVNfVFgxMF9TVEFUICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgVFhfU1RBVFVTX0xfQ0FSUiAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFRYX1NUQVRVU19FWF9ERUZFUiAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBUWF9TVEFUVVNfVU5ERVIgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgVFhfU1RBVFVTX0lOX1RYICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFRYX1NUQVRVU19QQVVTRUQgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBUWF9TVEFUVVNfVFhfREVGRVJSRUQgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgVFhfU1RBVFVTX0VYX0NPTEwgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFRYX1NUQVRVU19UWF9DT0xMX1NIRiAgICAgICAgICAgMAotI2RlZmluZSBUWF9TVEFUVVNfVFhfQ09MTF9NU0sgICAgICAgICAgICgweGYgPDwgVFhfU1RBVFVTX1RYX0NPTExfU0hGKQotCi0vKiBSRUNFSVZFIENPTlRST0wgcmVnaXN0ZXIuICovCi0jZGVmaW5lIFJYX0NUTF9FTl9HT09EICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBSWF9DVExfRU5fUlhfUEFSICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUlhfQ1RMX0VOX0xPTkdfRVJSICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFJYX0NUTF9FTl9PVkVSICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBSWF9DVExfRU5fQ1JDX0VSUiAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUlhfQ1RMX0VOX0FMSUdOICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFJYX0NUTF9JR05PUkVfQ1JDICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBSWF9DVExfUEFTU19DVEwgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUlhfQ1RMX1NUUklQX0NSQyAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFJYX0NUTF9TSE9SVF9FTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBSWF9DVExfTE9OR19FTiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUlhfQ1RMX1JYX0hBTFQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFJYX0NUTF9SWF9FTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotCi0vKiBSRUNFSVZFIFNUQVRVUyByZWdpc3Rlci4gKi8KLSNkZWZpbmUgUlhfU1RBVFVTX1JYX0hBTFRFRCAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFJYX1NUQVRVU19HT09EICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBSWF9TVEFUVVNfUlhfUEFSICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUlhfU1RBVFVTX0xPTkdfRVJSICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFJYX1NUQVRVU19PVkVSRkxPVyAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBSWF9TVEFUVVNfQ1JDX0VSUiAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUlhfU1RBVFVTX0FMSUdOX0VSUiAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFJYX1NUQVRVU19SWDEwX1NUQVQgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBSWF9TVEFUVVNfSU5UX1JYICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUlhfU1RBVFVTX0NUTF9SRUNEICAgICAgICAgICAgICAweDAwMDAwMDIwCi0KLS8qIE1EX0NBIHJlZ2lzdGVyLiAqLwotI2RlZmluZSBNRF9DQV9QUkVfU1VQICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgTURfQ0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIE1EX0NBX1dSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBNRF9DQV9QSFlfU0hGICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgTURfQ0FfUEhZX01TSyAgICAgICAgICAgICAgICAgICAoMHgxZiA8PCBNRF9DQV9QSFlfU0hGKQotI2RlZmluZSBNRF9DQV9BRERSX1NIRiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTURfQ0FfQUREUl9NU0sgICAgICAgICAgICAgICAgICAoMHgxZiA8PCBNRF9DQV9BRERSX1NIRikKLQotLyogVHggU3RhdHVzL0NvbnRyb2wuICovCi0jZGVmaW5lIFRYX1NUQVRfQ1RMX09XTkVSX1NIRiAgICAgICAgICAgMzAKLSNkZWZpbmUgVFhfU1RBVF9DVExfT1dORVJfTVNLICAgICAgICAgICAoMHgzIDw8IFRYX1NUQVRfQ1RMX09XTkVSX1NIRikKLSNkZWZpbmUgVFhfU1RBVF9DVExfRlJBTUVfU0hGICAgICAgICAgICAyNwotI2RlZmluZSBUWF9TVEFUX0NUTF9GUkFNRV9NU0sgICAgICAgICAgICgweDcgPDwgVFhfU1RBVF9DVExfRlJBTUVfU0hGKQotI2RlZmluZSBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGICAgICAgICAgIDExCi0jZGVmaW5lIFRYX1NUQVRfQ1RMX1NUQVRVU19NU0sgICAgICAgICAgKDB4MWZmZmYgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikKLSNkZWZpbmUgVFhfU1RBVF9DVExfTEVOR1RIX1NIRiAgICAgICAgICAwCi0jZGVmaW5lIFRYX1NUQVRfQ1RMX0xFTkdUSF9NU0sgICAgICAgICAgKDB4N2ZmIDw8IFRYX1NUQVRfQ1RMX0xFTkdUSF9TSEYpCi0KLSNkZWZpbmUgVFhfU1RBVF9DVExfRVJST1JfTVNLICAgICAgICAgICAoKFRYX1NUQVRVU19TUV9FUlIgICAgICB8ICAgICBcCi0JCQkJCSAgVFhfU1RBVFVTX1RYX0hBTFRFRCAgIHwgICAgIFwKLQkJCQkJICBUWF9TVEFUVVNfVFhfUEFSICAgICAgfCAgICAgXAotCQkJCQkgIFRYX1NUQVRVU19MQVRFX0NPTEwgICB8ICAgICBcCi0JCQkJCSAgVFhfU1RBVFVTX0xfQ0FSUiAgICAgIHwgICAgIFwKLQkJCQkJICBUWF9TVEFUVVNfRVhfREVGRVIgICAgfCAgICAgXAotCQkJCQkgIFRYX1NUQVRVU19VTkRFUiAgICAgICB8ICAgICBcCi0JCQkJCSAgVFhfU1RBVFVTX1BBVVNFRCAgICAgIHwgICAgIFwKLQkJCQkJICBUWF9TVEFUVVNfVFhfREVGRVJSRUQgfCAgICAgXAotCQkJCQkgIFRYX1NUQVRVU19FWF9DT0xMICAgICB8ICAgICBcCi0JCQkJCSAgVFhfU1RBVFVTX1RYX0NPTExfTVNLKSAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKQotI2RlZmluZSBUWF9TVEFUX0NUTF9JTlRfQUZURVJfVFggICAgICAgIDB4NAotCi0vKiBSeCBTdGF0dXMvQ29udHJvbC4gKi8KLSNkZWZpbmUgUlhfU1RBVF9DVExfT1dORVJfU0hGICAgICAgICAgICAzMAotI2RlZmluZSBSWF9TVEFUX0NUTF9PV05FUl9NU0sgICAgICAgICAgICgweDMgPDwgUlhfU1RBVF9DVExfT1dORVJfU0hGKQotI2RlZmluZSBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGICAgICAgICAgIDExCi0jZGVmaW5lIFJYX1NUQVRfQ1RMX1NUQVRVU19NU0sgICAgICAgICAgKDB4ZmZmZiA8PCBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKQotI2RlZmluZSBSWF9TVEFUX0NUTF9MRU5HVEhfU0hGICAgICAgICAgIDAKLSNkZWZpbmUgUlhfU1RBVF9DVExfTEVOR1RIX01TSyAgICAgICAgICAoMHg3ZmYgPDwgUlhfU1RBVF9DVExfTEVOR1RIX1NIRikKLQotCi0KLS8qIFRoZSBTQUE5NzMwIChMQU4pIGNvbnRyb2xsZXIgcmVnaXN0ZXIgbWFwLCBhcyBzZWVuIHZpYSB0aGUgUENJLWJ1cy4gKi8KLSNkZWZpbmUgU0FBOTczMF9MQU5fUkVHU19BRERSICAgMHgyMDQwMAotI2RlZmluZSBTQUE5NzMwX0xBTl9SRUdTX1NJWkUgICAweDAwNDAwCi0KLXN0cnVjdCBsYW5fc2FhOTczMF9yZWdtYXAgewotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBUeEJ1ZmZBOwkJCS8qIDB4MjA0MDAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVHhCdWZmQjsJCQkvKiAweDIwNDA0ICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IFJ4QnVmZkE7CQkJLyogMHgyMDQwOCAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBSeEJ1ZmZCOwkJCS8qIDB4MjA0MGMgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUGFja2V0Q291bnQ7CQkvKiAweDIwNDEwICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IE9rMlVzZTsJCQkvKiAweDIwNDE0ICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IExhbkRtYUN0bDsJCS8qIDB4MjA0MTggKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVGltZW91dDsJCQkvKiAweDIwNDFjICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IERtYVN0YXR1czsJCS8qIDB4MjA0MjAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgRG1hVGVzdDsJCQkvKiAweDIwNDI0ICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBmaWxsZXIyMDQyOFsweDIwNDMwIC0gMHgyMDQyOF07Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IFBhdXNlQ291bnQ7CQkvKiAweDIwNDMwICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IFJlbW90ZVBhdXNlQ291bnQ7CQkvKiAweDIwNDM0ICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBmaWxsZXIyMDQzOFsweDIwNDQwIC0gMHgyMDQzOF07Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IE1hY0N0bDsJCQkvKiAweDIwNDQwICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IENhbUN0bDsJCQkvKiAweDIwNDQ0ICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IFR4Q3RsOwkJCS8qIDB4MjA0NDggKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVHhTdGF0dXM7CQkJLyogMHgyMDQ0YyAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBSeEN0bDsJCQkvKiAweDIwNDUwICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IFJ4U3RhdHVzOwkJCS8qIDB4MjA0NTQgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU3RhdGlvbk1nbXREYXRhOwkJLyogMHgyMDQ1OCAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBTdGF0aW9uTWdtdEN0bDsJCS8qIDB4MjA0NWMgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQ2FtQWRkcmVzczsJCS8qIDB4MjA0NjAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQ2FtRGF0YTsJCQkvKiAweDIwNDY0ICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IENhbUVuYWJsZTsJCS8qIDB4MjA0NjggKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGZpbGxlcjIwNDZjWzB4MjA1MDAgLSAweDIwNDZjXTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgRGVidWdQQ0lNYXN0ZXJBZGRyOwkvKiAweDIwNTAwICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IERlYnVnTGFuVHhTdGF0ZU1hY2hpbmU7CS8qIDB4MjA1MDQgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgRGVidWdMYW5SeFN0YXRlTWFjaGluZTsJLyogMHgyMDUwOCAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBEZWJ1Z0xhblR4Rmlmb1BvaW50ZXJzOwkvKiAweDIwNTBjICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IERlYnVnTGFuUnhGaWZvUG9pbnRlcnM7CS8qIDB4MjA1MTAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgRGVidWdMYW5DdGxTdGF0ZU1hY2hpbmU7CS8qIDB4MjA1MTQgKi8KLX07Ci10eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBsYW5fc2FhOTczMF9yZWdtYXAgdF9sYW5fc2FhOTczMF9yZWdtYXA7Ci0KLQotLyogRVZNIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVycy4gKi8KLSNkZWZpbmUgRVZNX0xBTl9JTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEVWTV9NQVNURVJfRU4gICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotCi0vKiBUaGUgU0FBOTczMCAoRVZNKSBjb250cm9sbGVyIHJlZ2lzdGVyIG1hcCwgYXMgc2VlbiB2aWEgdGhlIFBDSS1idXMuICovCi0jZGVmaW5lIFNBQTk3MzBfRVZNX1JFR1NfQUREUiAgIDB4MDIwMDAKLSNkZWZpbmUgU0FBOTczMF9FVk1fUkVHU19TSVpFICAgMHgwMDQwMAotCi1zdHJ1Y3QgZXZtX3NhYTk3MzBfcmVnbWFwIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgSW50ZXJydXB0U3RhdHVzMTsJCS8qIDB4MjAwMCAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBJbnRlcnJ1cHRFbmFibGUxOwkJLyogMHgyMDA0ICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IEludGVycnVwdE1vbml0b3IxOwkvKiAweDIwMDggKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQ291bnRlcjsJCQkvKiAweDIwMGMgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQ291bnRlclRocmVzaG9sZDsJCS8qIDB4MjAxMCAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBDb3VudGVyQ29udHJvbDsJCS8qIDB4MjAxNCAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBHcGlvQ29udHJvbDE7CQkvKiAweDIwMTggKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgSW50ZXJydXB0U3RhdHVzMjsJCS8qIDB4MjAxYyAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBJbnRlcnJ1cHRFbmFibGUyOwkJLyogMHgyMDIwICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IEludGVycnVwdE1vbml0b3IyOwkvKiAweDIwMjQgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgR3Bpb0NvbnRyb2wyOwkJLyogMHgyMDI4ICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IEludGVycnVwdEJsb2NrMTsJCS8qIDB4MjAyYyAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBJbnRlcnJ1cHRCbG9jazI7CQkvKiAweDIwMzAgKi8KLX07Ci10eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBldm1fc2FhOTczMF9yZWdtYXAgdF9ldm1fc2FhOTczMF9yZWdtYXA7Ci0KLQotc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgewotCS8qCi0JICogUngvVHggcGFja2V0IGJ1ZmZlcnMuCi0JICogVGhlIFJ4IGFuZCBUeCBwYWNrZXRzIG11c3QgYmUgUEFDS0VUX1NJWkUgYWxpZ25lZC4KLQkgKi8KLQl2b2lkCQkqYnVmZmVyX3N0YXJ0OwotCXVuc2lnbmVkIGludAlidWZmZXJfc2l6ZTsKLQotCS8qCi0JICogRE1BIGFkZHJlc3Mgb2YgYmVnaW5uaW5nIG9mIHRoaXMgb2JqZWN0LCByZXR1cm5lZAotCSAqIGJ5IHBjaV9hbGxvY19jb25zaXN0ZW50KCkuCi0JICovCi0JZG1hX2FkZHJfdAlkbWFfYWRkcjsKLQotCS8qIFBvaW50ZXIgdG8gdGhlIGFzc29jaWF0ZWQgcGNpIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgcGNpX2RldgkqcGNpX2RldjsKLQotCS8qIFBvaW50ZXIgZm9yIHRoZSBTQUE5NzMwIExBTiBjb250cm9sbGVyIHJlZ2lzdGVyIHNldC4gKi8KLQl0X2xhbl9zYWE5NzMwX3JlZ21hcCAqbGFuX3NhYTk3MzBfcmVnczsKLQotCS8qIFBvaW50ZXIgdG8gdGhlIFNBQTk3MzAgRVZNIHJlZ2lzdGVyLiAqLwotCXRfZXZtX3NhYTk3MzBfcmVnbWFwICpldm1fc2FhOTczMF9yZWdzOwotCi0JLyogUmN2IGJ1ZmZlciBJbmRleC4gKi8KLQl1bnNpZ25lZCBjaGFyIE5leHRSY3ZQYWNrZXRJbmRleDsKLQkvKiBOZXh0IGJ1ZmZlciBpbmRleC4gKi8KLQl1bnNpZ25lZCBjaGFyIE5leHRSY3ZCdWZmZXJJbmRleDsKLQotCS8qIEluZGV4IG9mIG5leHQgcGFja2V0IHRvIHVzZSBpbiB0aGF0IGJ1ZmZlci4gKi8KLQl1bnNpZ25lZCBjaGFyIE5leHRUeG1QYWNrZXRJbmRleDsKLQkvKiBOZXh0IGJ1ZmZlciBpbmRleC4gKi8KLQl1bnNpZ25lZCBjaGFyIE5leHRUeG1CdWZmZXJJbmRleDsKLQotCS8qIEluZGV4IG9mIGZpcnN0IHBlbmRpbmcgcGFja2V0IHJlYWR5IHRvIHNlbmQuICovCi0JdW5zaWduZWQgY2hhciBQZW5kaW5nVHhtUGFja2V0SW5kZXg7Ci0JLyogUGVuZGluZyBidWZmZXIgaW5kZXguICovCi0JdW5zaWduZWQgY2hhciBQZW5kaW5nVHhtQnVmZmVySW5kZXg7Ci0KLQl1bnNpZ25lZCBjaGFyIERtYVJjdlBhY2tldHM7Ci0JdW5zaWduZWQgY2hhciBEbWFUeG1QYWNrZXRzOwotCi0Jdm9pZAkgICAgICAqVHhtQnVmZmVyW0xBTl9TQUE5NzMwX0JVRkZFUlNdW0xBTl9TQUE5NzMwX1RYTV9RX1NJWkVdOwotCXZvaWQJICAgICAgKlJjdkJ1ZmZlcltMQU5fU0FBOTczMF9CVUZGRVJTXVtMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFXTsKLQl1bnNpZ25lZCBpbnQgVHhCdWZmZXJGcmVlW0xBTl9TQUE5NzMwX0JVRkZFUlNdOwotCi0JdW5zaWduZWQgY2hhciBQaHlzaWNhbEFkZHJlc3NbTEFOX1NBQTk3MzBfQ0FNX0VOVFJJRVNdWzZdOwotCi0Jc3BpbmxvY2tfdCBsb2NrOwotfTsKLQotI2VuZGlmIC8qIF9TQUE5NzMwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwppbmRleCAzM2JiMThmLi5mZTQxZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCkBAIC0xMDY0LDcgKzEwNjQsNyBAQAogCSgoTV9NQUNfSU5UX0VPUF9DT1VOVCB8IE1fTUFDX0lOVF9FT1BfVElNRVIpIDw8IFNfTUFDX1JYX0NIMCksCiAJc2MtPnNibV9pbXIpOwogI2Vsc2UKLQlfX3Jhd193cml0ZXEoKE1fTUFDX0lOVF9DSEFOTkVMIDw8IFNfTUFDX1RYX0NIMCkgfCAKKwlfX3Jhd193cml0ZXEoKE1fTUFDX0lOVF9DSEFOTkVMIDw8IFNfTUFDX1RYX0NIMCkgfAogCShNX01BQ19JTlRfQ0hBTk5FTCA8PCBTX01BQ19SWF9DSDApLCBzYy0+c2JtX2ltcik7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcKaW5kZXggZGJhZDk1Yy4uM2JlMTNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcKQEAgLTQsNiArNCw4IEBACiAJc2VsZWN0IE1JSQogCXNlbGVjdCBJTkVUX0xSTwogCXNlbGVjdCBDUkMzMgorCXNlbGVjdCBJMkMKKwlzZWxlY3QgSTJDX0FMR09CSVQKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyAxMC1naWdhYml0IEV0aGVybmV0IGNhcmRzIGJhc2VkIG9uCiAJICB0aGUgU29sYXJmbGFyZSBDb21tdW5pY2F0aW9ucyBTb2xhcnN0b3JtIFNGQzQwMDAgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3NmYy9NYWtlZmlsZQppbmRleCAxZDJkYWVlLi5jOGY1NzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvc2ZjL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogc2ZjLXkJCQkrPSBlZngubyBmYWxjb24ubyB0eC5vIHJ4Lm8gZmFsY29uX3htYWMubyBcCi0JCQkgICBpMmMtZGlyZWN0Lm8gc2VsZnRlc3QubyBldGh0b29sLm8geGZwX3BoeS5vIFwKKwkJCSAgIHNlbGZ0ZXN0Lm8gZXRodG9vbC5vIHhmcF9waHkubyBcCiAJCQkgICBtZGlvXzEwZy5vIHRlbnhwcmVzcy5vIGJvYXJkcy5vIHNmZTQwMDEubwogCiBvYmotJChDT05GSUdfU0ZDKQkrPSBzZmMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5jIGIvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5jCmluZGV4IDdmYzAzMjguLmQzZDNkZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYworKysgYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCVtFRlhfQk9BUkRfSU5WQUxJRF0gPQogCXtOVUxMLAkgICAgTlVMTCwgICAgICAgICAgICAgICAgICBkdW1teV9pbml0fSwKIAlbRUZYX0JPQVJEX1NGRTQwMDFdID0KLQl7IlNGRTQwMDEiLCAiMTBHQkFTRS1UIGFkYXB0ZXIiLCAgIHNmZTQwMDFfcG93ZXJvbn0sCisJeyJTRkU0MDAxIiwgIjEwR0JBU0UtVCBhZGFwdGVyIiwgICBzZmU0MDAxX2luaXR9LAogCVtFRlhfQk9BUkRfU0ZFNDAwMl0gPQogCXsiU0ZFNDAwMiIsICJYRlAgYWRhcHRlciIsICAgICAgICAgc2ZlNDAwMl9pbml0fSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmggYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmgKaW5kZXggNjk1NzY0ZC4uZTVlODQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuaApAQCAtMjAsOCArMjAsNyBAQAogfTsKIAogZXh0ZXJuIGludCBlZnhfc2V0X2JvYXJkX2luZm8oc3RydWN0IGVmeF9uaWMgKmVmeCwgdTE2IHJldmlzaW9uX2luZm8pOwotZXh0ZXJuIGludCBzZmU0MDAxX3Bvd2Vyb24oc3RydWN0IGVmeF9uaWMgKmVmeCk7Ci1leHRlcm4gdm9pZCBzZmU0MDAxX3Bvd2Vyb2ZmKHN0cnVjdCBlZnhfbmljICplZngpOworZXh0ZXJuIGludCBzZmU0MDAxX2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAvKiBBcmUgd2UgcHV0dGluZyB0aGUgUEhZIGludG8gZmxhc2ggY29uZmlnIG1vZGUgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgc2ZlNDAwMV9waHlfZmxhc2hfY2ZnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKaW5kZXggNDQ5NzYwNi4uNDVjNzJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KICNpbmNsdWRlICJuZXRfZHJpdmVyLmgiCiAjaW5jbHVkZSAiZ21paS5oIgogI2luY2x1ZGUgImV0aHRvb2wuaCIKQEAgLTY5Niw4ICs2OTcsOCBAQAogCiAJLyogU2VyaWFsaXNlIGFnYWluc3QgZWZ4X3NldF9tdWx0aWNhc3RfbGlzdCgpICovCiAJaWYgKGVmeF9kZXZfcmVnaXN0ZXJlZChlZngpKSB7Ci0JCW5ldGlmX3R4X2xvY2tfYmgoZWZ4LT5uZXRfZGV2KTsKLQkJbmV0aWZfdHhfdW5sb2NrX2JoKGVmeC0+bmV0X2Rldik7CisJCW5ldGlmX2FkZHJfbG9ja19iaChlZngtPm5ldF9kZXYpOworCQluZXRpZl9hZGRyX3VubG9ja19iaChlZngtPm5ldF9kZXYpOwogCX0KIH0KIApAQCAtODMyLDcgKzgzMywyMyBAQAogCWlmIChlZngtPmludGVycnVwdF9tb2RlID09IEVGWF9JTlRfTU9ERV9NU0lYKSB7CiAJCUJVR19PTighcGNpX2ZpbmRfY2FwYWJpbGl0eShlZngtPnBjaV9kZXYsIFBDSV9DQVBfSURfTVNJWCkpOwogCi0JCWVmeC0+cnNzX3F1ZXVlcyA9IHJzc19jcHVzID8gcnNzX2NwdXMgOiBudW1fb25saW5lX2NwdXMoKTsKKwkJaWYgKHJzc19jcHVzID09IDApIHsKKwkJCWNwdW1hc2tfdCBjb3JlX21hc2s7CisJCQlpbnQgY3B1OworCisJCQljcHVzX2NsZWFyKGNvcmVfbWFzayk7CisJCQllZngtPnJzc19xdWV1ZXMgPSAwOworCQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJCQlpZiAoIWNwdV9pc3NldChjcHUsIGNvcmVfbWFzaykpIHsKKwkJCQkJKytlZngtPnJzc19xdWV1ZXM7CisJCQkJCWNwdXNfb3IoY29yZV9tYXNrLCBjb3JlX21hc2ssCisJCQkJCQl0b3BvbG9neV9jb3JlX3NpYmxpbmdzKGNwdSkpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWVmeC0+cnNzX3F1ZXVlcyA9IHJzc19jcHVzOworCQl9CisKIAkJZWZ4LT5yc3NfcXVldWVzID0gbWluKGVmeC0+cnNzX3F1ZXVlcywgbWF4X2NoYW5uZWwgKyAxKTsKIAkJZWZ4LT5yc3NfcXVldWVzID0gbWluKGVmeC0+cnNzX3F1ZXVlcywgRUZYX01BWF9DSEFOTkVMUyk7CiAKQEAgLTE3NjIsNyArMTc3OSw3IEBACiAKIAllZngtPnJlc2V0X3BlbmRpbmcgPSBtZXRob2Q7CiAKLQlxdWV1ZV93b3JrKGVmeC0+d29ya3F1ZXVlLCAmZWZ4LT5yZXNldF93b3JrKTsKKwlxdWV1ZV93b3JrKGVmeC0+cmVzZXRfd29ya3F1ZXVlLCAmZWZ4LT5yZXNldF93b3JrKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xODE1LDYgKzE4MzIsNyBAQAogCS5pbml0ICAgID0gZWZ4X25pY19kdW1teV9vcF9pbnQsCiAJLmluaXRfbGVkcyA9IGVmeF9wb3J0X2R1bW15X29wX2ludCwKIAkuc2V0X2ZhdWx0X2xlZCA9IGVmeF9wb3J0X2R1bW15X29wX2JsaW5rLAorCS5maW5pCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTkwNiwxNCArMTkyNCwyOCBAQAogCQlnb3RvIGZhaWwxOwogCX0KIAorCWVmeC0+cmVzZXRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInNmY19yZXNldCIpOworCWlmICghZWZ4LT5yZXNldF93b3JrcXVldWUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwyOworCX0KKwogCXJldHVybiAwOwogCisgZmFpbDI6CisJZGVzdHJveV93b3JrcXVldWUoZWZ4LT53b3JrcXVldWUpOworCWVmeC0+d29ya3F1ZXVlID0gTlVMTDsKKwogIGZhaWwxOgogCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgZWZ4X2Zpbmlfc3RydWN0KHN0cnVjdCBlZnhfbmljICplZngpCiB7CisJaWYgKGVmeC0+cmVzZXRfd29ya3F1ZXVlKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGVmeC0+cmVzZXRfd29ya3F1ZXVlKTsKKwkJZWZ4LT5yZXNldF93b3JrcXVldWUgPSBOVUxMOworCX0KIAlpZiAoZWZ4LT53b3JrcXVldWUpIHsKIAkJZGVzdHJveV93b3JrcXVldWUoZWZ4LT53b3JrcXVldWUpOwogCQllZngtPndvcmtxdWV1ZSA9IE5VTEw7CkBAIC0xOTQxLDYgKzE5NzMsNyBAQAogCWVmeF9maW5pX3BvcnQoZWZ4KTsKIAogCS8qIFNodXRkb3duIHRoZSBib2FyZCwgdGhlbiB0aGUgTklDIGFuZCBib2FyZCBzdGF0ZSAqLworCWVmeC0+Ym9hcmRfaW5mby5maW5pKGVmeCk7CiAJZmFsY29uX2ZpbmlfaW50ZXJydXB0KGVmeCk7CiAKIAllZnhfZmluaV9uYXBpKGVmeCk7CkBAIC0xOTc1LDcgKzIwMDgsNyBAQAogCSAqIHNjaGVkdWxlZCBmcm9tIHRoaXMgcG9pbnQgYmVjYXVzZSBlZnhfc3RvcF9hbGwoKSBoYXMgYmVlbgogCSAqIGNhbGxlZCwgd2UgYXJlIG5vIGxvbmdlciByZWdpc3RlcmVkIHdpdGggZHJpdmVybGluaywgYW5kCiAJICogdGhlIG5ldF9kZXZpY2UncyBoYXZlIGJlZW4gcmVtb3ZlZC4gKi8KLQlmbHVzaF93b3JrcXVldWUoZWZ4LT53b3JrcXVldWUpOworCWZsdXNoX3dvcmtxdWV1ZShlZngtPnJlc2V0X3dvcmtxdWV1ZSk7CiAKIAllZnhfcGNpX3JlbW92ZV9tYWluKGVmeCk7CiAKQEAgLTIwOTYsNyArMjEyOSw3IEBACiAJCSAqIHNjaGVkdWxlZCBzaW5jZSBlZnhfc3RvcF9hbGwoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCB3ZQogCQkgKiBoYXZlIG5vdCBhbmQgbmV2ZXIgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgd2l0aCBlaXRoZXIKIAkJICogdGhlIHJ0bmV0bGluayBvciBkcml2ZXJsaW5rIGxheWVycy4gKi8KLQkJY2FuY2VsX3dvcmtfc3luYygmZWZ4LT5yZXNldF93b3JrKTsKKwkJZmx1c2hfd29ya3F1ZXVlKGVmeC0+cmVzZXRfd29ya3F1ZXVlKTsKIAogCQkvKiBSZXRyeSBpZiBhIHJlY292ZXJhYmx5IHJlc2V0IGV2ZW50IGhhcyBiZWVuIHNjaGVkdWxlZCAqLwogCQlpZiAoKGVmeC0+cmVzZXRfcGVuZGluZyAhPSBSRVNFVF9UWVBFX0lOVklTSUJMRSkgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYwppbmRleCA3OTBkYjg5Li45MTM4ZWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCkBAIC0xMyw2ICsxMyw4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KICNpbmNsdWRlICJuZXRfZHJpdmVyLmgiCiAjaW5jbHVkZSAiYml0ZmllbGQuaCIKICNpbmNsdWRlICJlZnguaCIKQEAgLTM2LDEwICszOCwxMiBAQAogICogc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAtIEZhbGNvbiBOSUMgc3RhdGUKICAqIEBuZXh0X2J1ZmZlcl90YWJsZTogRmlyc3QgYXZhaWxhYmxlIGJ1ZmZlciB0YWJsZSBpZAogICogQHBjaV9kZXYyOiBUaGUgc2Vjb25kYXJ5IFBDSSBkZXZpY2UgaWYgcHJlc2VudAorICogQGkyY19kYXRhOiBPcGVyYXRpb25zIGFuZCBzdGF0ZSBmb3IgSTJDIGJpdC1iYXNoaW5nIGFsZ29yaXRobQogICovCiBzdHJ1Y3QgZmFsY29uX25pY19kYXRhIHsKIAl1bnNpZ25lZCBuZXh0X2J1ZmZlcl90YWJsZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjI7CisJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGkyY19kYXRhOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNzUsMzkgKzE3OSw1MiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi1zdGF0aWMgdm9pZCBmYWxjb25fc2V0c2Rhc2NsKHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjKQorc3RhdGljIHZvaWQgZmFsY29uX3NldHNkYSh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCiB7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IChzdHJ1Y3QgZWZ4X25pYyAqKWRhdGE7CiAJZWZ4X293b3JkX3QgcmVnOwogCi0JZmFsY29uX3JlYWQoaTJjLT5lZngsICZyZWcsIEdQSU9fQ1RMX1JFR19LRVIpOwotCUVGWF9TRVRfT1dPUkRfRklFTEQocmVnLCBHUElPMF9PRU4sIChpMmMtPnNjbCA/IDAgOiAxKSk7Ci0JRUZYX1NFVF9PV09SRF9GSUVMRChyZWcsIEdQSU8zX09FTiwgKGkyYy0+c2RhID8gMCA6IDEpKTsKLQlmYWxjb25fd3JpdGUoaTJjLT5lZngsICZyZWcsIEdQSU9fQ1RMX1JFR19LRVIpOworCWZhbGNvbl9yZWFkKGVmeCwgJnJlZywgR1BJT19DVExfUkVHX0tFUik7CisJRUZYX1NFVF9PV09SRF9GSUVMRChyZWcsIEdQSU8zX09FTiwgIXN0YXRlKTsKKwlmYWxjb25fd3JpdGUoZWZ4LCAmcmVnLCBHUElPX0NUTF9SRUdfS0VSKTsKIH0KIAotc3RhdGljIGludCBmYWxjb25fZ2V0c2RhKHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjKQorc3RhdGljIHZvaWQgZmFsY29uX3NldHNjbCh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCiB7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IChzdHJ1Y3QgZWZ4X25pYyAqKWRhdGE7CiAJZWZ4X293b3JkX3QgcmVnOwogCi0JZmFsY29uX3JlYWQoaTJjLT5lZngsICZyZWcsIEdQSU9fQ1RMX1JFR19LRVIpOworCWZhbGNvbl9yZWFkKGVmeCwgJnJlZywgR1BJT19DVExfUkVHX0tFUik7CisJRUZYX1NFVF9PV09SRF9GSUVMRChyZWcsIEdQSU8wX09FTiwgIXN0YXRlKTsKKwlmYWxjb25fd3JpdGUoZWZ4LCAmcmVnLCBHUElPX0NUTF9SRUdfS0VSKTsKK30KKworc3RhdGljIGludCBmYWxjb25fZ2V0c2RhKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IChzdHJ1Y3QgZWZ4X25pYyAqKWRhdGE7CisJZWZ4X293b3JkX3QgcmVnOworCisJZmFsY29uX3JlYWQoZWZ4LCAmcmVnLCBHUElPX0NUTF9SRUdfS0VSKTsKIAlyZXR1cm4gRUZYX09XT1JEX0ZJRUxEKHJlZywgR1BJTzNfSU4pOwogfQogCi1zdGF0aWMgaW50IGZhbGNvbl9nZXRzY2woc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMpCitzdGF0aWMgaW50IGZhbGNvbl9nZXRzY2wodm9pZCAqZGF0YSkKIHsKKwlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gKHN0cnVjdCBlZnhfbmljICopZGF0YTsKIAllZnhfb3dvcmRfdCByZWc7CiAKLQlmYWxjb25fcmVhZChpMmMtPmVmeCwgJnJlZywgR1BJT19DVExfUkVHX0tFUik7Ci0JcmV0dXJuIEVGWF9EV09SRF9GSUVMRChyZWcsIEdQSU8wX0lOKTsKKwlmYWxjb25fcmVhZChlZngsICZyZWcsIEdQSU9fQ1RMX1JFR19LRVIpOworCXJldHVybiBFRlhfT1dPUkRfRklFTEQocmVnLCBHUElPMF9JTik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZWZ4X2kyY19iaXRfb3BlcmF0aW9ucyBmYWxjb25faTJjX2JpdF9vcGVyYXRpb25zID0gewotCS5zZXRzZGEJCT0gZmFsY29uX3NldHNkYXNjbCwKLQkuc2V0c2NsCQk9IGZhbGNvbl9zZXRzZGFzY2wsCitzdGF0aWMgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGZhbGNvbl9pMmNfYml0X29wZXJhdGlvbnMgPSB7CisJLnNldHNkYQkJPSBmYWxjb25fc2V0c2RhLAorCS5zZXRzY2wJCT0gZmFsY29uX3NldHNjbCwKIAkuZ2V0c2RhCQk9IGZhbGNvbl9nZXRzZGEsCiAJLmdldHNjbAkJPSBmYWxjb25fZ2V0c2NsLAotCS51ZGVsYXkJCT0gMTAwLAotCS5tZGVsYXkJCT0gMTAsCisJLnVkZWxheQkJPSA1LAorCS8qIFdhaXQgdXAgdG8gNTAgbXMgZm9yIHNsYXZlIHRvIGxldCB1cyBwdWxsIFNDTCBoaWdoICovCisJLnRpbWVvdXQJPSBESVZfUk9VTkRfVVAoSFosIDIwKSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjQwNSwxMiArMjQyMiw2IEBACiAJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGE7CiAJaW50IHJjOwogCi0JLyogSW5pdGlhbGlzZSBJMkMgaW50ZXJmYWNlIHN0YXRlICovCi0JZWZ4LT5pMmMuZWZ4ID0gZWZ4OwotCWVmeC0+aTJjLm9wID0gJmZhbGNvbl9pMmNfYml0X29wZXJhdGlvbnM7Ci0JZWZ4LT5pMmMuc2RhID0gMTsKLQllZngtPmkyYy5zY2wgPSAxOwotCiAJLyogQWxsb2NhdGUgc3RvcmFnZSBmb3IgaGFyZHdhcmUgc3BlY2lmaWMgZGF0YSAqLwogCW5pY19kYXRhID0ga3phbGxvYyhzaXplb2YoKm5pY19kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJZWZ4LT5uaWNfZGF0YSA9IG5pY19kYXRhOwpAQCAtMjQ2MSw2ICsyNDcyLDE3IEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWw1OwogCisJLyogSW5pdGlhbGlzZSBJMkMgYWRhcHRlciAqLworIAllZngtPmkyY19hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJbmljX2RhdGEtPmkyY19kYXRhID0gZmFsY29uX2kyY19iaXRfb3BlcmF0aW9uczsKKwluaWNfZGF0YS0+aTJjX2RhdGEuZGF0YSA9IGVmeDsKKyAJZWZ4LT5pMmNfYWRhcC5hbGdvX2RhdGEgPSAmbmljX2RhdGEtPmkyY19kYXRhOworCWVmeC0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZlZngtPnBjaV9kZXYtPmRldjsKKwlzdHJsY3B5KGVmeC0+aTJjX2FkYXAubmFtZSwgIlNGQzQwMDAgR1BJTyIsIHNpemVvZihlZngtPmkyY19hZGFwLm5hbWUpKTsKKwlyYyA9IGkyY19iaXRfYWRkX2J1cygmZWZ4LT5pMmNfYWRhcCk7CisJaWYgKHJjKQorCQlnb3RvIGZhaWw1OworCiAJcmV0dXJuIDA7CiAKICBmYWlsNToKQEAgLTI2MzUsNiArMjY1NywxMCBAQAogdm9pZCBmYWxjb25fcmVtb3ZlX25pYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCXN0cnVjdCBmYWxjb25fbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKKwlpbnQgcmM7CisKKwlyYyA9IGkyY19kZWxfYWRhcHRlcigmZWZ4LT5pMmNfYWRhcCk7CisJQlVHX09OKHJjKTsKIAogCWZhbGNvbl9mcmVlX2J1ZmZlcihlZngsICZlZngtPmlycV9zdGF0dXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvaTJjLWRpcmVjdC5jIGIvZHJpdmVycy9uZXQvc2ZjL2kyYy1kaXJlY3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZjNjJkMGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2kyYy1kaXJlY3QuYworKysgL2Rldi9udWxsCkBAIC0xLDM4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRHJpdmVyIGZvciBTb2xhcmZsYXJlIFNvbGFyc3Rvcm0gbmV0d29yayBjb250cm9sbGVycyBhbmQgYm9hcmRzCi0gKiBDb3B5cmlnaHQgMjAwNSBGZW4gU3lzdGVtcyBMdGQuCi0gKiBDb3B5cmlnaHQgMjAwNi0yMDA4IFNvbGFyZmxhcmUgQ29tbXVuaWNhdGlvbnMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKLSAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKLSNpbmNsdWRlICJpMmMtZGlyZWN0LmgiCi0KLS8qCi0gKiBJMkMgZGF0YSAoU0RBKSBhbmQgY2xvY2sgKFNDTCkgbGluZSByZWFkL3dyaXRlcyB3aXRoIGFwcHJvcHJpYXRlCi0gKiBkZWxheXMuCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHNkYShzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYywgaW50IHN0YXRlKQotewotCXVkZWxheShpMmMtPm9wLT51ZGVsYXkpOwotCWkyYy0+c2RhID0gc3RhdGU7Ci0JaTJjLT5vcC0+c2V0c2RhKGkyYyk7Ci0JdWRlbGF5KGkyYy0+b3AtPnVkZWxheSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRzY2woc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMsIGludCBzdGF0ZSkKLXsKLQl1ZGVsYXkoaTJjLT5vcC0+dWRlbGF5KTsKLQlpMmMtPnNjbCA9IHN0YXRlOwotCWkyYy0+b3AtPnNldHNjbChpMmMpOwotCXVkZWxheShpMmMtPm9wLT51ZGVsYXkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBnZXRzZGEoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMpCi17Ci0JaW50IHNkYTsKLQotCXVkZWxheShpMmMtPm9wLT51ZGVsYXkpOwotCXNkYSA9IGkyYy0+b3AtPmdldHNkYShpMmMpOwotCXVkZWxheShpMmMtPm9wLT51ZGVsYXkpOwotCXJldHVybiBzZGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdldHNjbChzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYykKLXsKLQlpbnQgc2NsOwotCi0JdWRlbGF5KGkyYy0+b3AtPnVkZWxheSk7Ci0Jc2NsID0gaTJjLT5vcC0+Z2V0c2NsKGkyYyk7Ci0JdWRlbGF5KGkyYy0+b3AtPnVkZWxheSk7Ci0JcmV0dXJuIHNjbDsKLX0KLQotLyoKLSAqIEkyQyBsb3ctbGV2ZWwgcHJvdG9jb2wgb3BlcmF0aW9ucwotICoKLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaTJjX3JlbGVhc2Uoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMpCi17Ci0JRUZYX1dBUk5fT05fUEFSQU5PSUQoIWkyYy0+c2NsKTsKLQlFRlhfV0FSTl9PTl9QQVJBTk9JRCghaTJjLT5zZGEpOwotCS8qIERldmljZXMgbWF5IHRpbWUgb3V0IGlmIG9wZXJhdGlvbnMgZG8gbm90IGVuZCAqLwotCXNldHNjbChpMmMsIDEpOwotCXNldHNkYShpMmMsIDEpOwotCUVGWF9CVUdfT05fUEFSQU5PSUQoZ2V0c2RhKGkyYykgIT0gMSk7Ci0JRUZYX0JVR19PTl9QQVJBTk9JRChnZXRzY2woaTJjKSAhPSAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGkyY19zdGFydChzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYykKLXsKLQkvKiBXZSBtYXkgYmUgcmVzdGFydGluZyBpbW1lZGlhdGVseSBhZnRlciBhIHtzZW5kLHJlY3Z9X2JpdCwKLQkgKiBzbyBTQ0wgd2lsbCBub3QgbmVjZXNzYXJpbHkgYWxyZWFkeSBiZSBoaWdoLgotCSAqLwotCUVGWF9XQVJOX09OX1BBUkFOT0lEKCFpMmMtPnNkYSk7Ci0Jc2V0c2NsKGkyYywgMSk7Ci0Jc2V0c2RhKGkyYywgMCk7Ci0Jc2V0c2NsKGkyYywgMCk7Ci0Jc2V0c2RhKGkyYywgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpMmNfc2VuZF9iaXQoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMsIGludCBiaXQpCi17Ci0JRUZYX1dBUk5fT05fUEFSQU5PSUQoaTJjLT5zY2wgIT0gMCk7Ci0Jc2V0c2RhKGkyYywgYml0KTsKLQlzZXRzY2woaTJjLCAxKTsKLQlzZXRzY2woaTJjLCAwKTsKLQlzZXRzZGEoaTJjLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaTJjX3JlY3ZfYml0KHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjKQotewotCWludCBiaXQ7Ci0KLQlFRlhfV0FSTl9PTl9QQVJBTk9JRChpMmMtPnNjbCAhPSAwKTsKLQlFRlhfV0FSTl9PTl9QQVJBTk9JRCghaTJjLT5zZGEpOwotCXNldHNjbChpMmMsIDEpOwotCWJpdCA9IGdldHNkYShpMmMpOwotCXNldHNjbChpMmMsIDApOwotCXJldHVybiBiaXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpMmNfc3RvcChzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYykKLXsKLQlFRlhfV0FSTl9PTl9QQVJBTk9JRChpMmMtPnNjbCAhPSAwKTsKLQlzZXRzZGEoaTJjLCAwKTsKLQlzZXRzY2woaTJjLCAxKTsKLQlzZXRzZGEoaTJjLCAxKTsKLX0KLQotLyoKLSAqIEkyQyBtaWQtbGV2ZWwgcHJvdG9jb2wgb3BlcmF0aW9ucwotICoKLSAqLwotCi0vKiBTZW5kcyBhIGJ5dGUgdmlhIHRoZSBJMkMgYnVzIGFuZCBjaGVja3MgZm9yIGFuIGFja25vd2xlZGdlbWVudCBmcm9tCi0gKiB0aGUgc2xhdmUgZGV2aWNlLgotICovCi1zdGF0aWMgaW50IGkyY19zZW5kX2J5dGUoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMsIHU4IGJ5dGUpCi17Ci0JaW50IGk7Ci0KLQkvKiBTZW5kIGJ5dGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWkyY19zZW5kX2JpdChpMmMsICEhKGJ5dGUgJiAweDgwKSk7Ci0JCWJ5dGUgPDw9IDE7Ci0JfQotCi0JLyogQ2hlY2sgZm9yIGFja25vd2xlZGdlbWVudCBmcm9tIHNsYXZlICovCi0JcmV0dXJuIChpMmNfcmVjdl9iaXQoaTJjKSA9PSAwID8gMCA6IC1FSU8pOwotfQotCi0vKiBSZWNlaXZlcyBhIGJ5dGUgdmlhIHRoZSBJMkMgYnVzIGFuZCBzZW5kcyBBQ0svTkFDSyB0byB0aGUgc2xhdmUgZGV2aWNlLiAqLwotc3RhdGljIHU4IGkyY19yZWN2X2J5dGUoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMsIGludCBhY2spCi17Ci0JdTggdmFsdWUgPSAwOwotCWludCBpOwotCi0JLyogUmVjZWl2ZSBieXRlICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJdmFsdWUgPSAodmFsdWUgPDwgMSkgfCBpMmNfcmVjdl9iaXQoaTJjKTsKLQotCS8qIFNlbmQgQUNLL05BQ0sgKi8KLQlpMmNfc2VuZF9iaXQoaTJjLCAoYWNrID8gMCA6IDEpKTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQotLyogQ2FsY3VsYXRlIGNvbW1hbmQgYnl0ZSBmb3IgYSByZWFkIG9wZXJhdGlvbiAqLwotc3RhdGljIGlubGluZSB1OCBpMmNfcmVhZF9jbWQodTggZGV2aWNlX2lkKQotewotCXJldHVybiAoKGRldmljZV9pZCA8PCAxKSB8IDEpOwotfQotCi0vKiBDYWxjdWxhdGUgY29tbWFuZCBieXRlIGZvciBhIHdyaXRlIG9wZXJhdGlvbiAqLwotc3RhdGljIGlubGluZSB1OCBpMmNfd3JpdGVfY21kKHU4IGRldmljZV9pZCkKLXsKLQlyZXR1cm4gKChkZXZpY2VfaWQgPDwgMSkgfCAwKTsKLX0KLQotaW50IGVmeF9pMmNfY2hlY2tfcHJlc2VuY2Uoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMsIHU4IGRldmljZV9pZCkKLXsKLQlpbnQgcmM7Ci0KLQkvKiBJZiBzb21lb25lIGlzIGRyaXZpbmcgdGhlIGJ1cyBsb3cgd2UganVzdCBnaXZlIHVwLiAqLwotCWlmIChnZXRzZGEoaTJjKSA9PSAwIHx8IGdldHNjbChpMmMpID09IDApIHsKLQkJRUZYX0VSUihpMmMtPmVmeCwgIiVzIHNvbWVvbmUgaXMgaG9sZGluZyB0aGUgSTJDIGJ1cyBsb3cuIgotCQkJIiBHaXZpbmcgdXAuXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCS8qIFByZXRlbmQgdG8gaW5pdGlhdGUgYSBkZXZpY2Ugd3JpdGUgKi8KLQlpMmNfc3RhcnQoaTJjKTsKLQlyYyA9IGkyY19zZW5kX2J5dGUoaTJjLCBpMmNfd3JpdGVfY21kKGRldmljZV9pZCkpOwotCWlmIChyYykKLQkJZ290byBvdXQ7Ci0KLSBvdXQ6Ci0JaTJjX3N0b3AoaTJjKTsKLQlpMmNfcmVsZWFzZShpMmMpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKiBUaGlzIHBlcmZvcm1zIGEgZmFzdCByZWFkIG9mIG9uZSBvciBtb3JlIGNvbnNlY3V0aXZlIGJ5dGVzIGZyb20gYW4KLSAqIEkyQyBkZXZpY2UuICBOb3QgYWxsIGRldmljZXMgc3VwcG9ydCBjb25zZWN1dGl2ZSByZWFkcyBvZiBtb3JlIHRoYW4KLSAqIG9uZSBieXRlOyBmb3IgdGhlc2UgZGV2aWNlcyB1c2UgZWZ4X2kyY19yZWFkKCkgaW5zdGVhZC4KLSAqLwotaW50IGVmeF9pMmNfZmFzdF9yZWFkKHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjLAotCQkgICAgICB1OCBkZXZpY2VfaWQsIHU4IG9mZnNldCwgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IGk7Ci0JaW50IHJjOwotCi0JRUZYX1dBUk5fT05fUEFSQU5PSUQoZ2V0c2RhKGkyYykgIT0gMSk7Ci0JRUZYX1dBUk5fT05fUEFSQU5PSUQoZ2V0c2NsKGkyYykgIT0gMSk7Ci0JRUZYX1dBUk5fT05fUEFSQU5PSUQoZGF0YSA9PSBOVUxMKTsKLQlFRlhfV0FSTl9PTl9QQVJBTk9JRChsZW4gPCAxKTsKLQotCS8qIFNlbGVjdCBkZXZpY2UgYW5kIHN0YXJ0aW5nIG9mZnNldCAqLwotCWkyY19zdGFydChpMmMpOwotCXJjID0gaTJjX3NlbmRfYnl0ZShpMmMsIGkyY193cml0ZV9jbWQoZGV2aWNlX2lkKSk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dDsKLQlyYyA9IGkyY19zZW5kX2J5dGUoaTJjLCBvZmZzZXQpOwotCWlmIChyYykKLQkJZ290byBvdXQ7Ci0KLQkvKiBSZWFkIGRhdGEgZnJvbSBkZXZpY2UgKi8KLQlpMmNfc3RhcnQoaTJjKTsKLQlyYyA9IGkyY19zZW5kX2J5dGUoaTJjLCBpMmNfcmVhZF9jbWQoZGV2aWNlX2lkKSk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dDsKLQlmb3IgKGkgPSAwOyBpIDwgKGxlbiAtIDEpOyBpKyspCi0JCS8qIFJlYWQgYW5kIGFja25vd2xlZGdlIGFsbCBidXQgdGhlIGxhc3QgYnl0ZSAqLwotCQlkYXRhW2ldID0gaTJjX3JlY3ZfYnl0ZShpMmMsIDEpOwotCS8qIFJlYWQgbGFzdCBieXRlIHdpdGggbm8gYWNrbm93bGVkZ2VtZW50ICovCi0JZGF0YVtpXSA9IGkyY19yZWN2X2J5dGUoaTJjLCAwKTsKLQotIG91dDoKLQlpMmNfc3RvcChpMmMpOwotCWkyY19yZWxlYXNlKGkyYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qIFRoaXMgcGVyZm9ybXMgYSBmYXN0IHdyaXRlIG9mIG9uZSBvciBtb3JlIGNvbnNlY3V0aXZlIGJ5dGVzIHRvIGFuCi0gKiBJMkMgZGV2aWNlLiAgTm90IGFsbCBkZXZpY2VzIHN1cHBvcnQgY29uc2VjdXRpdmUgd3JpdGVzIG9mIG1vcmUKLSAqIHRoYW4gb25lIGJ5dGU7IGZvciB0aGVzZSBkZXZpY2VzIHVzZSBlZnhfaTJjX3dyaXRlKCkgaW5zdGVhZC4KLSAqLwotaW50IGVmeF9pMmNfZmFzdF93cml0ZShzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYywKLQkJICAgICAgIHU4IGRldmljZV9pZCwgdTggb2Zmc2V0LAotCQkgICAgICAgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IGk7Ci0JaW50IHJjOwotCi0JRUZYX1dBUk5fT05fUEFSQU5PSUQoZ2V0c2RhKGkyYykgIT0gMSk7Ci0JRUZYX1dBUk5fT05fUEFSQU5PSUQoZ2V0c2NsKGkyYykgIT0gMSk7Ci0JRUZYX1dBUk5fT05fUEFSQU5PSUQobGVuIDwgMSk7Ci0KLQkvKiBTZWxlY3QgZGV2aWNlIGFuZCBzdGFydGluZyBvZmZzZXQgKi8KLQlpMmNfc3RhcnQoaTJjKTsKLQlyYyA9IGkyY19zZW5kX2J5dGUoaTJjLCBpMmNfd3JpdGVfY21kKGRldmljZV9pZCkpOwotCWlmIChyYykKLQkJZ290byBvdXQ7Ci0JcmMgPSBpMmNfc2VuZF9ieXRlKGkyYywgb2Zmc2V0KTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0OwotCi0JLyogV3JpdGUgZGF0YSB0byBkZXZpY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJcmMgPSBpMmNfc2VuZF9ieXRlKGkyYywgZGF0YVtpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0OwotCX0KLQotIG91dDoKLQlpMmNfc3RvcChpMmMpOwotCWkyY19yZWxlYXNlKGkyYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qIEkyQyBieXRlLWJ5LWJ5dGUgcmVhZCAqLwotaW50IGVmeF9pMmNfcmVhZChzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYywKLQkJIHU4IGRldmljZV9pZCwgdTggb2Zmc2V0LCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKLXsKLQlpbnQgcmM7Ci0KLQkvKiBpMmNfZmFzdF9yZWFkIHdpdGggbGVuZ3RoIDEgaXMgYSBzaW5nbGUgYnl0ZSByZWFkICovCi0JZm9yICg7IGxlbiA+IDA7IG9mZnNldCsrLCBkYXRhKyssIGxlbi0tKSB7Ci0JCXJjID0gZWZ4X2kyY19mYXN0X3JlYWQoaTJjLCBkZXZpY2VfaWQsIG9mZnNldCwgZGF0YSwgMSk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogSTJDIGJ5dGUtYnktYnl0ZSB3cml0ZSAqLwotaW50IGVmeF9pMmNfd3JpdGUoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMsCi0JCSAgdTggZGV2aWNlX2lkLCB1OCBvZmZzZXQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWludCByYzsKLQotCS8qIGkyY19mYXN0X3dyaXRlIHdpdGggbGVuZ3RoIDEgaXMgYSBzaW5nbGUgYnl0ZSB3cml0ZSAqLwotCWZvciAoOyBsZW4gPiAwOyBvZmZzZXQrKywgZGF0YSsrLCBsZW4tLSkgewotCQlyYyA9IGVmeF9pMmNfZmFzdF93cml0ZShpMmMsIGRldmljZV9pZCwgb2Zmc2V0LCBkYXRhLCAxKTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCQltZGVsYXkoaTJjLT5vcC0+bWRlbGF5KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBUaGlzIGlzIGp1c3QgYSBzbGlnaHRseSBuZWF0ZXIgd3JhcHBlciByb3VuZCBlZnhfaTJjX2Zhc3Rfd3JpdGUKLSAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSB0YXJnZXQgZG9lc24ndCB0YWtlIGFuIG9mZnNldAotICovCi1pbnQgZWZ4X2kyY19zZW5kX2J5dGVzKHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjLAotCQkgICAgICAgdTggZGV2aWNlX2lkLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKLXsKLQlyZXR1cm4gZWZ4X2kyY19mYXN0X3dyaXRlKGkyYywgZGV2aWNlX2lkLCBkYXRhWzBdLCBkYXRhICsgMSwgbGVuIC0gMSk7Ci19Ci0KLS8qIEkyQyByZWNlaXZpbmcgb2YgYnl0ZXMgLSBkb2VzIG5vdCBzZW5kIGFuIG9mZnNldCBieXRlICovCi1pbnQgZWZ4X2kyY19yZWN2X2J5dGVzKHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjLCB1OCBkZXZpY2VfaWQsCi0JCSAgICAgICB1OCAqYnl0ZXMsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IGk7Ci0JaW50IHJjOwotCi0JRUZYX1dBUk5fT05fUEFSQU5PSUQoZ2V0c2RhKGkyYykgIT0gMSk7Ci0JRUZYX1dBUk5fT05fUEFSQU5PSUQoZ2V0c2NsKGkyYykgIT0gMSk7Ci0JRUZYX1dBUk5fT05fUEFSQU5PSUQobGVuIDwgMSk7Ci0KLQkvKiBTZWxlY3QgZGV2aWNlICovCi0JaTJjX3N0YXJ0KGkyYyk7Ci0KLQkvKiBSZWFkIGRhdGEgZnJvbSBkZXZpY2UgKi8KLQlyYyA9IGkyY19zZW5kX2J5dGUoaTJjLCBpMmNfcmVhZF9jbWQoZGV2aWNlX2lkKSk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dDsKLQotCWZvciAoaSA9IDA7IGkgPCAobGVuIC0gMSk7IGkrKykKLQkJLyogUmVhZCBhbmQgYWNrbm93bGVkZ2UgYWxsIGJ1dCB0aGUgbGFzdCBieXRlICovCi0JCWJ5dGVzW2ldID0gaTJjX3JlY3ZfYnl0ZShpMmMsIDEpOwotCS8qIFJlYWQgbGFzdCBieXRlIHdpdGggbm8gYWNrbm93bGVkZ2VtZW50ICovCi0JYnl0ZXNbaV0gPSBpMmNfcmVjdl9ieXRlKGkyYywgMCk7Ci0KLSBvdXQ6Ci0JaTJjX3N0b3AoaTJjKTsKLQlpMmNfcmVsZWFzZShpMmMpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKiBTTUJ1cyBhbmQgc29tZSBJMkMgZGV2aWNlcyB3aWxsIHRpbWUgb3V0IGlmIHRoZSBJMkMgY2xvY2sgaXMKLSAqIGhlbGQgbG93IGZvciB0b28gbG9uZy4gVGhpcyBpcyBtb3N0IGxpa2VseSB0byBoYXBwZW4gaW4gdmlydHVhbGlzZWQKLSAqIHN5c3RlbXMgKHdoZW4gdGhlIGVudGlyZSBkb21haW4gaXMgZGVzY2hlZHVsZWQpIGJ1dCBjb3VsZCBpbgotICogcHJpbmNpcGxlIGhhcHBlbiBkdWUgdG8gcHJlZW1wdGlvbiBvbiBhbnkgYnVzeSBzeXN0ZW0gKGFuZCBnaXZlbiB0aGUKLSAqIHBvdGVudGlhbCBsZW5ndGggb2YgYW4gSTJDIG9wZXJhdGlvbiB0dXJuaW5nIHByZWVtcHRpb24gb2ZmIGlzIG5vdAotICogYSBzZW5zaWJsZSBvcHRpb24pLiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkZWFsIHdpdGggdGhlIGZhaWx1cmUgYnkKLSAqIHJldHJ5aW5nIHVwIHRvIGEgZml4ZWQgbnVtYmVyIG9mIHRpbWVzLgotICAqLwotCi0jZGVmaW5lIEkyQ19NQVhfUkVUUklFUwkoMTApCi0KLS8qIFRoZSB0aW1lb3V0IHByb2JsZW0gd2lsbCByZXN1bHQgaW4gLUVJTy4gSWYgdGhlIHdyYXBwZWQgZnVuY3Rpb24KLSAqIHJldHVybnMgYW55IG90aGVyIGVycm9yLCBwYXNzIHRoaXMgdXAgYW5kIGRvIG5vdCByZXRyeS4gKi8KLSNkZWZpbmUgUkVUUllfV1JBUFBFUihfZikgXAotCWludCByZXRyaWVzID0gSTJDX01BWF9SRVRSSUVTOyBcCi0JaW50IHJjOyBcCi0Jd2hpbGUgKHJldHJpZXMpIHsgXAotCQlyYyA9IF9mOyBcCi0JCWlmIChyYyAhPSAtRUlPKSBcCi0JCQlyZXR1cm4gcmM7IFwKLQkJcmV0cmllcy0tOyBcCi0JfSBcCi0JcmV0dXJuIHJjOyBcCi0KLWludCBlZnhfaTJjX2NoZWNrX3ByZXNlbmNlX3JldHJ5KHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjLCB1OCBkZXZpY2VfaWQpCi17Ci0JUkVUUllfV1JBUFBFUihlZnhfaTJjX2NoZWNrX3ByZXNlbmNlKGkyYywgZGV2aWNlX2lkKSkKLX0KLQotaW50IGVmeF9pMmNfcmVhZF9yZXRyeShzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYywKLQkJIHU4IGRldmljZV9pZCwgdTggb2Zmc2V0LCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKLXsKLQlSRVRSWV9XUkFQUEVSKGVmeF9pMmNfcmVhZChpMmMsIGRldmljZV9pZCwgb2Zmc2V0LCBkYXRhLCBsZW4pKQotfQotCi1pbnQgZWZ4X2kyY193cml0ZV9yZXRyeShzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYywKLQkJICB1OCBkZXZpY2VfaWQsIHU4IG9mZnNldCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JUkVUUllfV1JBUFBFUihlZnhfaTJjX3dyaXRlKGkyYywgZGV2aWNlX2lkLCBvZmZzZXQsIGRhdGEsIGxlbikpCi19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvaTJjLWRpcmVjdC5oIGIvZHJpdmVycy9uZXQvc2ZjL2kyYy1kaXJlY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkxZTU2MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zZmMvaTJjLWRpcmVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERyaXZlciBmb3IgU29sYXJmbGFyZSBTb2xhcnN0b3JtIG5ldHdvcmsgY29udHJvbGxlcnMgYW5kIGJvYXJkcwotICogQ29weXJpZ2h0IDIwMDUgRmVuIFN5c3RlbXMgTHRkLgotICogQ29weXJpZ2h0IDIwMDYgU29sYXJmbGFyZSBDb21tdW5pY2F0aW9ucyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAotICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCi0gKi8KLQotI2lmbmRlZiBFRlhfSTJDX0RJUkVDVF9ICi0jZGVmaW5lIEVGWF9JMkNfRElSRUNUX0gKLQotI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKLQotLyoKLSAqIERpcmVjdCBjb250cm9sIG9mIGFuIEkyQyBidXMKLSAqLwotCi1zdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2U7Ci0KLS8qKgotICogc3RydWN0IGVmeF9pMmNfYml0X29wZXJhdGlvbnMgLSBJMkMgYnVzIGRpcmVjdCBjb250cm9sIG1ldGhvZHMKLSAqCi0gKiBJMkMgYnVzIGRpcmVjdCBjb250cm9sIG1ldGhvZHMuCi0gKgotICogQHNldHNkYTogU2V0IHN0YXRlIG9mIFNEQSBsaW5lCi0gKiBAc2V0c2NsOiBTZXQgc3RhdGUgb2YgU0NMIGxpbmUKLSAqIEBnZXRzZGE6IEdldCBzdGF0ZSBvZiBTREEgbGluZQotICogQGdldHNjbDogR2V0IHN0YXRlIG9mIFNDTCBsaW5lCi0gKiBAdWRlbGF5OiBEZWxheSBiZXR3ZWVuIGVhY2ggYml0IG9wZXJhdGlvbgotICogQG1kZWxheTogRGVsYXkgYmV0d2VlbiBlYWNoIGJ5dGUgd3JpdGUKLSAqLwotc3RydWN0IGVmeF9pMmNfYml0X29wZXJhdGlvbnMgewotCXZvaWQgKCpzZXRzZGEpIChzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYyk7Ci0Jdm9pZCAoKnNldHNjbCkgKHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjKTsKLQlpbnQgKCpnZXRzZGEpIChzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYyk7Ci0JaW50ICgqZ2V0c2NsKSAoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMpOwotCXVuc2lnbmVkIGludCB1ZGVsYXk7Ci0JdW5zaWduZWQgaW50IG1kZWxheTsKLX07Ci0KLS8qKgotICogc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlIC0gYW4gSTJDIGludGVyZmFjZQotICoKLSAqIEFuIEkyQyBpbnRlcmZhY2UuCi0gKgotICogQGVmeDogQXR0YWNoZWQgRWZ4IE5JQwotICogQG9wOiBJMkMgYnVzIGNvbnRyb2wgbWV0aG9kcwotICogQHNkYTogQ3VycmVudCBvdXRwdXQgc3RhdGUgb2YgU0RBIGxpbmUKLSAqIEBzY2w6IEN1cnJlbnQgb3V0cHV0IHN0YXRlIG9mIFNDTCBsaW5lCi0gKi8KLXN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSB7Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeDsKLQlzdHJ1Y3QgZWZ4X2kyY19iaXRfb3BlcmF0aW9ucyAqb3A7Ci0JdW5zaWduZWQgaW50IHNkYToxOwotCXVuc2lnbmVkIGludCBzY2w6MTsKLX07Ci0KLWV4dGVybiBpbnQgZWZ4X2kyY19jaGVja19wcmVzZW5jZShzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYywgdTggZGV2aWNlX2lkKTsKLWV4dGVybiBpbnQgZWZ4X2kyY19mYXN0X3JlYWQoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMsCi0JCQkgICAgIHU4IGRldmljZV9pZCwgdTggb2Zmc2V0LAotCQkJICAgICB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Ci1leHRlcm4gaW50IGVmeF9pMmNfZmFzdF93cml0ZShzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYywKLQkJCSAgICAgIHU4IGRldmljZV9pZCwgdTggb2Zmc2V0LAotCQkJICAgICAgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIGludCBlZnhfaTJjX3JlYWQoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMsCi0JCQl1OCBkZXZpY2VfaWQsIHU4IG9mZnNldCwgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIGludCBlZnhfaTJjX3dyaXRlKHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjLAotCQkJIHU4IGRldmljZV9pZCwgdTggb2Zmc2V0LAotCQkJIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKLQotZXh0ZXJuIGludCBlZnhfaTJjX3NlbmRfYnl0ZXMoc3RydWN0IGVmeF9pMmNfaW50ZXJmYWNlICppMmMsIHU4IGRldmljZV9pZCwKLQkJCSAgICAgIGNvbnN0IHU4ICpieXRlcywgdW5zaWduZWQgaW50IGxlbik7Ci0KLWV4dGVybiBpbnQgZWZ4X2kyY19yZWN2X2J5dGVzKHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjLCB1OCBkZXZpY2VfaWQsCi0JCQkgICAgICB1OCAqYnl0ZXMsIHVuc2lnbmVkIGludCBsZW4pOwotCi0KLS8qIFZlcnNpb25zIG9mIHRoZSBBUEkgdGhhdCByZXRyeSBvbiBmYWlsdXJlLiAqLwotZXh0ZXJuIGludCBlZnhfaTJjX2NoZWNrX3ByZXNlbmNlX3JldHJ5KHN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjLAotCQkJCQl1OCBkZXZpY2VfaWQpOwotCi1leHRlcm4gaW50IGVmeF9pMmNfcmVhZF9yZXRyeShzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYywKLQkJCXU4IGRldmljZV9pZCwgdTggb2Zmc2V0LCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Ci0KLWV4dGVybiBpbnQgZWZ4X2kyY193cml0ZV9yZXRyeShzdHJ1Y3QgZWZ4X2kyY19pbnRlcmZhY2UgKmkyYywKLQkJCSB1OCBkZXZpY2VfaWQsIHU4IG9mZnNldCwKLQkJCSBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Ci0KLSNlbmRpZiAvKiBFRlhfSTJDX0RJUkVDVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAppbmRleCA1ZTIwZTc1Li4yMTljNzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKQEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCiAjaW5jbHVkZSAiZW51bS5oIgogI2luY2x1ZGUgImJpdGZpZWxkLmgiCi0jaW5jbHVkZSAiaTJjLWRpcmVjdC5oIgogCiAjZGVmaW5lIEVGWF9NQVhfTFJPX0RFU0NSSVBUT1JTIDgKICNkZWZpbmUgRUZYX01BWF9MUk9fQUdHUiBNQVhfU0tCX0ZSQUdTCkBAIC00MTgsNyArNDE4LDEwIEBACiAgKiBAaW5pdF9sZWRzOiBTZXRzIHVwIGJvYXJkIExFRHMKICAqIEBzZXRfZmF1bHRfbGVkOiBUdXJucyB0aGUgZmF1bHQgTEVEIG9uIG9yIG9mZgogICogQGJsaW5rOiBTdGFydHMvc3RvcHMgYmxpbmtpbmcKKyAqIEBmaW5pOiBDbGVhbnVwIGZ1bmN0aW9uCiAgKiBAYmxpbmtlcjogdXNlZCB0byBibGluayBMRURzIGluIHNvZnR3YXJlCisgKiBAaHdtb25fY2xpZW50OiBJMkMgY2xpZW50IGZvciBoYXJkd2FyZSBtb25pdG9yCisgKiBAaW9leHBfY2xpZW50OiBJMkMgY2xpZW50IGZvciBwb3dlci9wb3J0IGNvbnRyb2wKICAqLwogc3RydWN0IGVmeF9ib2FyZCB7CiAJaW50IHR5cGU7CkBAIC00MzEsNyArNDM0LDkgQEAKIAlpbnQgKCppbml0X2xlZHMpKHN0cnVjdCBlZnhfbmljICplZngpOwogCXZvaWQgKCpzZXRfZmF1bHRfbGVkKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IHN0YXRlKTsKIAl2b2lkICgqYmxpbmspIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgc3RhcnQpOworCXZvaWQgKCpmaW5pKSAoc3RydWN0IGVmeF9uaWMgKm5pYyk7CiAJc3RydWN0IGVmeF9ibGlua2VyIGJsaW5rZXI7CisJc3RydWN0IGkyY19jbGllbnQgKmh3bW9uX2NsaWVudCwgKmlvZXhwX2NsaWVudDsKIH07CiAKICNkZWZpbmUgU1RSSU5HX1RBQkxFX0xPT0tVUCh2YWwsIG1lbWJlcikJXApAQCAtNjExLDE0ICs2MTYsMTYgQEAKICAqIEBwY2lfZGV2OiBUaGUgUENJIGRldmljZQogICogQHR5cGU6IENvbnRyb2xsZXIgdHlwZSBhdHRyaWJ1dGVzCiAgKiBAbGVnYWN5X2lycTogSVJRIG51bWJlcgotICogQHdvcmtxdWV1ZTogV29ya3F1ZXVlIGZvciByZXNldHMsIHBvcnQgcmVjb25maWd1cmVzIGFuZCB0aGUgSFcgbW9uaXRvcgorICogQHdvcmtxdWV1ZTogV29ya3F1ZXVlIGZvciBwb3J0IHJlY29uZmlndXJlcyBhbmQgdGhlIEhXIG1vbml0b3IuCisgKglXb3JrIGl0ZW1zIGRvIG5vdCBob2xkIGFuZCBtdXN0IG5vdCBhY3F1aXJlIFJUTkwuCisgKiBAcmVzZXRfd29ya3F1ZXVlOiBXb3JrcXVldWUgZm9yIHJlc2V0cy4gIFdvcmsgaXRlbSB3aWxsIGFjcXVpcmUgUlROTC4KICAqIEByZXNldF93b3JrOiBTY2hlZHVsZWQgcmVzZXQgd29ya2l0ZW0KICAqIEBtb25pdG9yX3dvcms6IEhhcmR3YXJlIG1vbml0b3Igd29ya2l0ZW0KICAqIEBtZW1iYXNlX3BoeXM6IE1lbW9yeSBCQVIgdmFsdWUgYXMgcGh5c2ljYWwgYWRkcmVzcwogICogQG1lbWJhc2U6IE1lbW9yeSBCQVIgdmFsdWUKICAqIEBiaXVfbG9jazogQklVIChidXMgaW50ZXJmYWNlIHVuaXQpIGxvY2sKICAqIEBpbnRlcnJ1cHRfbW9kZTogSW50ZXJydXB0IG1vZGUKLSAqIEBpMmM6IEkyQyBpbnRlcmZhY2UKKyAqIEBpMmNfYWRhcDogSTJDIGFkYXB0ZXIKICAqIEBib2FyZF9pbmZvOiBCb2FyZC1sZXZlbCBpbmZvcm1hdGlvbgogICogQHN0YXRlOiBEZXZpY2Ugc3RhdGUgZmxhZy4gU2VyaWFsaXNlZCBieSB0aGUgcnRubF9sb2NrLgogICogQHJlc2V0X3BlbmRpbmc6IFBlbmRpbmcgcmVzZXQgbWV0aG9kIChub3JtYWxseSBSRVNFVF9UWVBFX05PTkUpCkBAIC02NzksNiArNjg2LDcgQEAKIAljb25zdCBzdHJ1Y3QgZWZ4X25pY190eXBlICp0eXBlOwogCWludCBsZWdhY3lfaXJxOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dvcmtxdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1vbml0b3Jfd29yazsKIAlyZXNvdXJjZV9zaXplX3QgbWVtYmFzZV9waHlzOwpAQCAtNjg2LDcgKzY5NCw3IEBACiAJc3BpbmxvY2tfdCBiaXVfbG9jazsKIAllbnVtIGVmeF9pbnRfbW9kZSBpbnRlcnJ1cHRfbW9kZTsKIAotCXN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSBpMmM7CisJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOwogCXN0cnVjdCBlZnhfYm9hcmQgYm9hcmRfaW5mbzsKIAogCWVudW0gbmljX3N0YXRlIHN0YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYyBiL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKaW5kZXggNjZhMGQxNC4uYjI3ODQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCkBAIC0xMDYsMjggKzEwNiwyNyBAQAogCiBzdGF0aWMgY29uc3QgdTggeGdwaHlfbWF4X3RlbXBlcmF0dXJlID0gOTA7CiAKLXZvaWQgc2ZlNDAwMV9wb3dlcm9mZihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQorc3RhdGljIHZvaWQgc2ZlNDAwMV9wb3dlcm9mZihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCXN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjID0gJmVmeC0+aTJjOworCXN0cnVjdCBpMmNfY2xpZW50ICppb2V4cF9jbGllbnQgPSBlZngtPmJvYXJkX2luZm8uaW9leHBfY2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpod21vbl9jbGllbnQgPSBlZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50OwogCi0JdTggY2ZnLCBvdXQsIGluOwotCi0JRUZYX0lORk8oZWZ4LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qIFR1cm4gb2ZmIGFsbCBwb3dlciByYWlscyAqLwotCW91dCA9IDB4ZmY7Ci0JZWZ4X2kyY193cml0ZShpMmMsIFBDQTk1MzksIFAwX09VVCwgJm91dCwgMSk7Ci0KLQkvKiBEaXNhYmxlIHBvcnQgMSBvdXRwdXRzIG9uIElPIGV4cGFuZGVyICovCi0JY2ZnID0gMHhmZjsKLQllZnhfaTJjX3dyaXRlKGkyYywgUENBOTUzOSwgUDFfQ09ORklHLCAmY2ZnLCAxKTsKLQotCS8qIERpc2FibGUgcG9ydCAwIG91dHB1dHMgb24gSU8gZXhwYW5kZXIgKi8KLQljZmcgPSAweGZmOwotCWVmeF9pMmNfd3JpdGUoaTJjLCBQQ0E5NTM5LCBQMF9DT05GSUcsICZjZmcsIDEpOworCS8qIFR1cm4gb2ZmIGFsbCBwb3dlciByYWlscyBhbmQgZGlzYWJsZSBvdXRwdXRzICovCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShpb2V4cF9jbGllbnQsIFAwX09VVCwgMHhmZik7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShpb2V4cF9jbGllbnQsIFAxX0NPTkZJRywgMHhmZik7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShpb2V4cF9jbGllbnQsIFAwX0NPTkZJRywgMHhmZik7CiAKIAkvKiBDbGVhciBhbnkgb3Zlci10ZW1wZXJhdHVyZSBhbGVydCAqLwotCWVmeF9pMmNfcmVhZChpMmMsIE1BWDY2NDcsIFJTTCwgJmluLCAxKTsKKwlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoaHdtb25fY2xpZW50LCBSU0wpOworfQorCitzdGF0aWMgdm9pZCBzZmU0MDAxX2Zpbmkoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwlFRlhfSU5GTyhlZngsICIlc1xuIiwgX19mdW5jX18pOworCisJc2ZlNDAwMV9wb3dlcm9mZihlZngpOworIAlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoZWZ4LT5ib2FyZF9pbmZvLmlvZXhwX2NsaWVudCk7CisgCWkyY191bnJlZ2lzdGVyX2RldmljZShlZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50KTsKIH0KIAogLyogVGhlIFAwX0VOXzNWM1ggbGluZSBvbiBTRkU0MDAxIGJvYXJkcyAoZnJvbSBBMiBvbndhcmQpIGlzIGNvbm5lY3RlZApAQCAtMTQzLDE0ICsxNDIsMjYgQEAKICAqIGJlIHR1cm5lZCBvbiBiZWZvcmUgdGhlIFBIWSBjYW4gYmUgdXNlZC4KICAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCwgcnRubCBsb2NrIGhlbGQKICAqLwotaW50IHNmZTQwMDFfcG93ZXJvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoraW50IHNmZTQwMDFfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCXN0cnVjdCBlZnhfaTJjX2ludGVyZmFjZSAqaTJjID0gJmVmeC0+aTJjOworCXN0cnVjdCBpMmNfY2xpZW50ICpod21vbl9jbGllbnQsICppb2V4cF9jbGllbnQ7CiAJdW5zaWduZWQgaW50IGNvdW50OwogCWludCByYzsKLQl1OCBvdXQsIGluLCBjZmc7CisJdTggb3V0OwogCWVmeF9kd29yZF90IHJlZzsKIAorCWh3bW9uX2NsaWVudCA9IGkyY19uZXdfZHVtbXkoJmVmeC0+aTJjX2FkYXAsIE1BWDY2NDcpOworCWlmICghaHdtb25fY2xpZW50KQorCQlyZXR1cm4gLUVJTzsKKwllZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50ID0gaHdtb25fY2xpZW50OworCisJaW9leHBfY2xpZW50ID0gaTJjX25ld19kdW1teSgmZWZ4LT5pMmNfYWRhcCwgUENBOTUzOSk7CisJaWYgKCFpb2V4cF9jbGllbnQpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGZhaWxfaHdtb247CisJfQorCWVmeC0+Ym9hcmRfaW5mby5pb2V4cF9jbGllbnQgPSBpb2V4cF9jbGllbnQ7CisKIAkvKiAxMFhwcmVzcyBoYXMgZml4ZWQtZnVuY3Rpb24gTEVEIHBpbnMsIHNvIHRoZXJlIGlzIG5vIGJvYXJkLXNwZWNpZmljCiAJICogYmxpbmsgY29kZS4gKi8KIAllZngtPmJvYXJkX2luZm8uYmxpbmsgPSB0ZW54cHJlc3NfcGh5X2JsaW5rOwpAQCAtMTY2LDQ0ICsxNzcsNDUgQEAKIAlmYWxjb25feG1hY193cml0ZWwoZWZ4LCAmcmVnLCBYWF9QV1JfUlNUX1JFR19NQUMpOwogCXVkZWxheSgxMCk7CiAKKwllZngtPmJvYXJkX2luZm8uZmluaSA9IHNmZTQwMDFfZmluaTsKKwogCS8qIFNldCBEU1Agb3Zlci10ZW1wZXJhdHVyZSBhbGVydCB0aHJlc2hvbGQgKi8KIAlFRlhfSU5GTyhlZngsICJEU1AgY3V0LW91dCBhdCAlZENcbiIsIHhncGh5X21heF90ZW1wZXJhdHVyZSk7Ci0JcmMgPSBlZnhfaTJjX3dyaXRlKGkyYywgTUFYNjY0NywgV0xITywKLQkJCSAgICZ4Z3BoeV9tYXhfdGVtcGVyYXR1cmUsIDEpOworCXJjID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShod21vbl9jbGllbnQsIFdMSE8sCisJCQkJICAgICAgIHhncGh5X21heF90ZW1wZXJhdHVyZSk7CiAJaWYgKHJjKQotCQlnb3RvIGZhaWwxOworCQlnb3RvIGZhaWxfaW9leHA7CiAKIAkvKiBSZWFkIGl0IGJhY2sgYW5kIHZlcmlmeSAqLwotCXJjID0gZWZ4X2kyY19yZWFkKGkyYywgTUFYNjY0NywgUkxITiwgJmluLCAxKTsKLQlpZiAocmMpCi0JCWdvdG8gZmFpbDE7Ci0JaWYgKGluICE9IHhncGh5X21heF90ZW1wZXJhdHVyZSkgeworCXJjID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGh3bW9uX2NsaWVudCwgUkxITik7CisJaWYgKHJjIDwgMCkKKwkJZ290byBmYWlsX2lvZXhwOworCWlmIChyYyAhPSB4Z3BoeV9tYXhfdGVtcGVyYXR1cmUpIHsKIAkJcmMgPSAtRUZBVUxUOwotCQlnb3RvIGZhaWwxOworCQlnb3RvIGZhaWxfaW9leHA7CiAJfQogCiAJLyogQ2xlYXIgYW55IHByZXZpb3VzIG92ZXItdGVtcGVyYXR1cmUgYWxlcnQgKi8KLQlyYyA9IGVmeF9pMmNfcmVhZChpMmMsIE1BWDY2NDcsIFJTTCwgJmluLCAxKTsKLQlpZiAocmMpCi0JCWdvdG8gZmFpbDE7CisJcmMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoaHdtb25fY2xpZW50LCBSU0wpOworCWlmIChyYyA8IDApCisJCWdvdG8gZmFpbF9pb2V4cDsKIAogCS8qIEVuYWJsZSBwb3J0IDAgYW5kIHBvcnQgMSBvdXRwdXRzIG9uIElPIGV4cGFuZGVyICovCi0JY2ZnID0gMHgwMDsKLQlyYyA9IGVmeF9pMmNfd3JpdGUoaTJjLCBQQ0E5NTM5LCBQMF9DT05GSUcsICZjZmcsIDEpOworCXJjID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShpb2V4cF9jbGllbnQsIFAwX0NPTkZJRywgMHgwMCk7CiAJaWYgKHJjKQotCQlnb3RvIGZhaWwxOwotCWNmZyA9IDB4ZmYgJiB+KDEgPDwgUDFfU1BBUkVfTEJOKTsKLQlyYyA9IGVmeF9pMmNfd3JpdGUoaTJjLCBQQ0E5NTM5LCBQMV9DT05GSUcsICZjZmcsIDEpOworCQlnb3RvIGZhaWxfaW9leHA7CisJcmMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGlvZXhwX2NsaWVudCwgUDFfQ09ORklHLAorCQkJCSAgICAgICAweGZmICYgfigxIDw8IFAxX1NQQVJFX0xCTikpOwogCWlmIChyYykKLQkJZ290byBmYWlsMjsKKwkJZ290byBmYWlsX29uOwogCiAJLyogVHVybiBhbGwgcG93ZXIgb2ZmIHRoZW4gd2FpdCAxIHNlYy4gVGhpcyBlbnN1cmVzIFBIWSBpcyByZXNldCAqLwogCW91dCA9IDB4ZmYgJiB+KCgwIDw8IFAwX0VOXzFWMl9MQk4pIHwgKDAgPDwgUDBfRU5fMlY1X0xCTikgfAogCQkgICAgICAgKDAgPDwgUDBfRU5fM1YzWF9MQk4pIHwgKDAgPDwgUDBfRU5fNVZfTEJOKSB8CiAJCSAgICAgICAoMCA8PCBQMF9FTl8xVjBYX0xCTikpOwotCXJjID0gZWZ4X2kyY193cml0ZShpMmMsIFBDQTk1MzksIFAwX09VVCwgJm91dCwgMSk7CisJcmMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGlvZXhwX2NsaWVudCwgUDBfT1VULCBvdXQpOwogCWlmIChyYykKLQkJZ290byBmYWlsMzsKKwkJZ290byBmYWlsX29uOwogCiAJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoSFopOwogCWNvdW50ID0gMDsKQEAgLTIxNSwyNiArMjI3LDI2IEBACiAJCWlmIChzZmU0MDAxX3BoeV9mbGFzaF9jZmcpCiAJCQlvdXQgfD0gMSA8PCBQMF9FTl8zVjNYX0xCTjsKIAotCQlyYyA9IGVmeF9pMmNfd3JpdGUoaTJjLCBQQ0E5NTM5LCBQMF9PVVQsICZvdXQsIDEpOworCQlyYyA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoaW9leHBfY2xpZW50LCBQMF9PVVQsIG91dCk7CiAJCWlmIChyYykKLQkJCWdvdG8gZmFpbDM7CisJCQlnb3RvIGZhaWxfb247CiAJCW1zbGVlcCgxMCk7CiAKIAkJLyogVHVybiBvbiAxViBwb3dlciByYWlsICovCiAJCW91dCAmPSB+KDEgPDwgUDBfRU5fMVYwWF9MQk4pOwotCQlyYyA9IGVmeF9pMmNfd3JpdGUoaTJjLCBQQ0E5NTM5LCBQMF9PVVQsICZvdXQsIDEpOworCQlyYyA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoaW9leHBfY2xpZW50LCBQMF9PVVQsIG91dCk7CiAJCWlmIChyYykKLQkJCWdvdG8gZmFpbDM7CisJCQlnb3RvIGZhaWxfb247CiAKIAkJRUZYX0lORk8oZWZ4LCAid2FpdGluZyBmb3IgcG93ZXIgKGF0dGVtcHQgJWQpLi4uXG4iLCBjb3VudCk7CiAKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoSFopOwogCiAJCS8qIENoZWNrIERTUCBpcyBwb3dlcmVkICovCi0JCXJjID0gZWZ4X2kyY19yZWFkKGkyYywgUENBOTUzOSwgUDFfSU4sICZpbiwgMSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZmFpbDM7Ci0JCWlmIChpbiAmICgxIDw8IFAxX0FGRV9QV0RfTEJOKSkKKwkJcmMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoaW9leHBfY2xpZW50LCBQMV9JTik7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIGZhaWxfb247CisJCWlmIChyYyAmICgxIDw8IFAxX0FGRV9QV0RfTEJOKSkKIAkJCWdvdG8gZG9uZTsKIAogCQkvKiBEU1AgZG9lc24ndCBsb29rIHBvd2VyZWQgaW4gZmxhc2ggY29uZmlnIG1vZGUgKi8KQEAgLTI0NCwyMyArMjU2LDE3IEBACiAKIAlFRlhfSU5GTyhlZngsICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgcG93ZXJcbiIpOwogCXJjID0gLUVUSU1FRE9VVDsKLQlnb3RvIGZhaWwzOworCWdvdG8gZmFpbF9vbjsKIAogZG9uZToKIAlFRlhfSU5GTyhlZngsICJQSFkgaXMgcG93ZXJlZCBvblxuIik7CiAJcmV0dXJuIDA7CiAKLWZhaWwzOgotCS8qIFR1cm4gb2ZmIGFsbCBwb3dlciByYWlscyAqLwotCW91dCA9IDB4ZmY7Ci0JZWZ4X2kyY193cml0ZShpMmMsIFBDQTk1MzksIFAwX09VVCwgJm91dCwgMSk7Ci0JLyogRGlzYWJsZSBwb3J0IDEgb3V0cHV0cyBvbiBJTyBleHBhbmRlciAqLwotCW91dCA9IDB4ZmY7Ci0JZWZ4X2kyY193cml0ZShpMmMsIFBDQTk1MzksIFAxX0NPTkZJRywgJm91dCwgMSk7Ci1mYWlsMjoKLQkvKiBEaXNhYmxlIHBvcnQgMCBvdXRwdXRzIG9uIElPIGV4cGFuZGVyICovCi0Jb3V0ID0gMHhmZjsKLQllZnhfaTJjX3dyaXRlKGkyYywgUENBOTUzOSwgUDBfQ09ORklHLCAmb3V0LCAxKTsKLWZhaWwxOgorZmFpbF9vbjoKKwlzZmU0MDAxX3Bvd2Vyb2ZmKGVmeCk7CitmYWlsX2lvZXhwOgorIAlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoaW9leHBfY2xpZW50KTsKK2ZhaWxfaHdtb246CisgCWkyY191bnJlZ2lzdGVyX2RldmljZShod21vbl9jbGllbnQpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5YmExMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCkBAIC0wLDAgKzEsMTE2OSBAQAorLyoKKyAqICBTdXBlckggRXRoZXJuZXQgZGV2aWNlIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNyBOb2J1aGlybyBJd2FtYXRzdQorICogIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgKiAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZGlvLWJpdGJhbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlICJzaF9ldGguaCIKKworLyoKKyAqIFByb2dyYW0gdGhlIGhhcmR3YXJlIE1BQyBhZGRyZXNzIGZyb20gZGV2LT5kZXZfYWRkci4KKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXUzMiBpb2FkZHIgPSBuZGV2LT5iYXNlX2FkZHI7CisKKwljdHJsX291dGwoKG5kZXYtPmRldl9hZGRyWzBdIDw8IDI0KSB8IChuZGV2LT5kZXZfYWRkclsxXSA8PCAxNikgfAorCQkgIChuZGV2LT5kZXZfYWRkclsyXSA8PCA4KSB8IChuZGV2LT5kZXZfYWRkclszXSksCisJCSAgaW9hZGRyICsgTUFIUik7CisJY3RybF9vdXRsKChuZGV2LT5kZXZfYWRkcls0XSA8PCA4KSB8IChuZGV2LT5kZXZfYWRkcls1XSksCisJCSAgaW9hZGRyICsgTUFMUik7Cit9CisKKy8qCisgKiBHZXQgTUFDIGFkZHJlc3MgZnJvbSBTdXBlckggTUFDIGFkZHJlc3MgcmVnaXN0ZXIKKyAqCisgKiBTdXBlckgncyBFdGhlcm5ldCBkZXZpY2UgZG9lc24ndCBoYXZlICdST00nIHRvIE1BQyBhZGRyZXNzLgorICogVGhpcyBkcml2ZXIgZ2V0IE1BQyBhZGRyZXNzIHRoYXQgdXNlIGJ5IGJvb3Rsb2FkZXIoVS1ib290IG9yIHNoLWlwbCtnKS4KKyAqIFdoZW4geW91IHdhbnQgdXNlIHRoaXMgZGV2aWNlLCB5b3UgbXVzdCBzZXQgTUFDIGFkZHJlc3MgaW4gYm9vdGxvYWRlci4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJdTMyIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKKworCW5kZXYtPmRldl9hZGRyWzBdID0gKGN0cmxfaW5sKGlvYWRkciArIE1BSFIpID4+IDI0KTsKKwluZGV2LT5kZXZfYWRkclsxXSA9IChjdHJsX2lubChpb2FkZHIgKyBNQUhSKSA+PiAxNikgJiAweEZGOworCW5kZXYtPmRldl9hZGRyWzJdID0gKGN0cmxfaW5sKGlvYWRkciArIE1BSFIpID4+IDgpICYgMHhGRjsKKwluZGV2LT5kZXZfYWRkclszXSA9IChjdHJsX2lubChpb2FkZHIgKyBNQUhSKSAmIDB4RkYpOworCW5kZXYtPmRldl9hZGRyWzRdID0gKGN0cmxfaW5sKGlvYWRkciArIE1BTFIpID4+IDgpICYgMHhGRjsKKwluZGV2LT5kZXZfYWRkcls1XSA9IChjdHJsX2lubChpb2FkZHIgKyBNQUxSKSAmIDB4RkYpOworfQorCitzdHJ1Y3QgYmJfaW5mbyB7CisJc3RydWN0IG1kaW9iYl9jdHJsIGN0cmw7CisJdTMyIGFkZHI7CisJdTMyIG1tZF9tc2s7LyogTU1EICovCisJdTMyIG1kb19tc2s7CisJdTMyIG1kaV9tc2s7CisJdTMyIG1kY19tc2s7Cit9OworCisvKiBQSFkgYml0IHNldCAqLworc3RhdGljIHZvaWQgYmJfc2V0KHUzMiBhZGRyLCB1MzIgbXNrKQoreworCWN0cmxfb3V0bChjdHJsX2lubChhZGRyKSB8IG1zaywgYWRkcik7Cit9CisKKy8qIFBIWSBiaXQgY2xlYXIgKi8KK3N0YXRpYyB2b2lkIGJiX2Nscih1MzIgYWRkciwgdTMyIG1zaykKK3sKKwljdHJsX291dGwoKGN0cmxfaW5sKGFkZHIpICYgfm1zayksIGFkZHIpOworfQorCisvKiBQSFkgYml0IHJlYWQgKi8KK3N0YXRpYyBpbnQgYmJfcmVhZCh1MzIgYWRkciwgdTMyIG1zaykKK3sKKwlyZXR1cm4gKGN0cmxfaW5sKGFkZHIpICYgbXNrKSAhPSAwOworfQorCisvKiBEYXRhIEkvTyBwaW4gY29udHJvbCAqLworc3RhdGljIHZvaWQgc2hfbW1kX2N0cmwoc3RydWN0IG1kaW9iYl9jdHJsICpjdHJsLCBpbnQgYml0KQoreworCXN0cnVjdCBiYl9pbmZvICpiaXRiYW5nID0gY29udGFpbmVyX29mKGN0cmwsIHN0cnVjdCBiYl9pbmZvLCBjdHJsKTsKKwlpZiAoYml0KQorCQliYl9zZXQoYml0YmFuZy0+YWRkciwgYml0YmFuZy0+bW1kX21zayk7CisJZWxzZQorCQliYl9jbHIoYml0YmFuZy0+YWRkciwgYml0YmFuZy0+bW1kX21zayk7Cit9CisKKy8qIFNldCBiaXQgZGF0YSovCitzdGF0aWMgdm9pZCBzaF9zZXRfbWRpbyhzdHJ1Y3QgbWRpb2JiX2N0cmwgKmN0cmwsIGludCBiaXQpCit7CisJc3RydWN0IGJiX2luZm8gKmJpdGJhbmcgPSBjb250YWluZXJfb2YoY3RybCwgc3RydWN0IGJiX2luZm8sIGN0cmwpOworCisJaWYgKGJpdCkKKwkJYmJfc2V0KGJpdGJhbmctPmFkZHIsIGJpdGJhbmctPm1kb19tc2spOworCWVsc2UKKwkJYmJfY2xyKGJpdGJhbmctPmFkZHIsIGJpdGJhbmctPm1kb19tc2spOworfQorCisvKiBHZXQgYml0IGRhdGEqLworc3RhdGljIGludCBzaF9nZXRfbWRpbyhzdHJ1Y3QgbWRpb2JiX2N0cmwgKmN0cmwpCit7CisJc3RydWN0IGJiX2luZm8gKmJpdGJhbmcgPSBjb250YWluZXJfb2YoY3RybCwgc3RydWN0IGJiX2luZm8sIGN0cmwpOworCXJldHVybiBiYl9yZWFkKGJpdGJhbmctPmFkZHIsIGJpdGJhbmctPm1kaV9tc2spOworfQorCisvKiBNREMgcGluIGNvbnRyb2wgKi8KK3N0YXRpYyB2b2lkIHNoX21kY19jdHJsKHN0cnVjdCBtZGlvYmJfY3RybCAqY3RybCwgaW50IGJpdCkKK3sKKwlzdHJ1Y3QgYmJfaW5mbyAqYml0YmFuZyA9IGNvbnRhaW5lcl9vZihjdHJsLCBzdHJ1Y3QgYmJfaW5mbywgY3RybCk7CisKKwlpZiAoYml0KQorCQliYl9zZXQoYml0YmFuZy0+YWRkciwgYml0YmFuZy0+bWRjX21zayk7CisJZWxzZQorCQliYl9jbHIoYml0YmFuZy0+YWRkciwgYml0YmFuZy0+bWRjX21zayk7Cit9CisKKy8qIG1kaW8gYnVzIGNvbnRyb2wgc3RydWN0ICovCitzdGF0aWMgc3RydWN0IG1kaW9iYl9vcHMgYmJfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5zZXRfbWRjID0gc2hfbWRjX2N0cmwsCisJLnNldF9tZGlvX2RpciA9IHNoX21tZF9jdHJsLAorCS5zZXRfbWRpb19kYXRhID0gc2hfc2V0X21kaW8sCisJLmdldF9tZGlvX2RhdGEgPSBzaF9nZXRfbWRpbywKK307CisKK3N0YXRpYyB2b2lkIHNoX2V0aF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCisJY3RybF9vdXRsKGN0cmxfaW5sKGlvYWRkciArIEVETVIpIHwgRURNUl9TUlNULCBpb2FkZHIgKyBFRE1SKTsKKwltZGVsYXkoMyk7CisJY3RybF9vdXRsKGN0cmxfaW5sKGlvYWRkciArIEVETVIpICYgfkVETVJfU1JTVCwgaW9hZGRyICsgRURNUik7Cit9CisKKy8qIGZyZWUgc2tiIGFuZCBkZXNjcmlwdG9yIGJ1ZmZlciAqLworc3RhdGljIHZvaWQgc2hfZXRoX3JpbmdfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBpOworCisJLyogRnJlZSBSeCBza2IgcmluZ2J1ZmZlciAqLworCWlmIChtZHAtPnJ4X3NrYnVmZikgeworCQlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKKwkJCWlmIChtZHAtPnJ4X3NrYnVmZltpXSkKKwkJCQlkZXZfa2ZyZWVfc2tiKG1kcC0+cnhfc2tidWZmW2ldKTsKKwkJfQorCX0KKwlrZnJlZShtZHAtPnJ4X3NrYnVmZik7CisKKwkvKiBGcmVlIFR4IHNrYiByaW5nYnVmZmVyICovCisJaWYgKG1kcC0+dHhfc2tidWZmKSB7CisJCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgeworCQkJaWYgKG1kcC0+dHhfc2tidWZmW2ldKQorCQkJCWRldl9rZnJlZV9za2IobWRwLT50eF9za2J1ZmZbaV0pOworCQl9CisJfQorCWtmcmVlKG1kcC0+dHhfc2tidWZmKTsKK30KKworLyogZm9ybWF0IHNrYiBhbmQgZGVzY3JpcHRvciBidWZmZXIgKi8KK3N0YXRpYyB2b2lkIHNoX2V0aF9yaW5nX2Zvcm1hdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNoX2V0aF9yeGRlc2MgKnJ4ZGVzYyA9IE5VTEw7CisJc3RydWN0IHNoX2V0aF90eGRlc2MgKnR4ZGVzYyA9IE5VTEw7CisJaW50IHJ4X3JpbmdzaXplID0gc2l6ZW9mKCpyeGRlc2MpICogUlhfUklOR19TSVpFOworCWludCB0eF9yaW5nc2l6ZSA9IHNpemVvZigqdHhkZXNjKSAqIFRYX1JJTkdfU0laRTsKKworCW1kcC0+Y3VyX3J4ID0gbWRwLT5jdXJfdHggPSAwOworCW1kcC0+ZGlydHlfcnggPSBtZHAtPmRpcnR5X3R4ID0gMDsKKworCW1lbXNldChtZHAtPnJ4X3JpbmcsIDAsIHJ4X3JpbmdzaXplKTsKKworCS8qIGJ1aWxkIFJ4IHJpbmcgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7CisJCS8qIHNrYiAqLworCQltZHAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7CisJCXNrYiA9IGRldl9hbGxvY19za2IobWRwLT5yeF9idWZfc3opOworCQltZHAtPnJ4X3NrYnVmZltpXSA9IHNrYjsKKwkJaWYgKHNrYiA9PSBOVUxMKQorCQkJYnJlYWs7CisJCXNrYi0+ZGV2ID0gbmRldjsJLyogTWFyayBhcyBiZWluZyB1c2VkIGJ5IHRoaXMgZGV2aWNlLiAqLworCQlza2JfcmVzZXJ2ZShza2IsIFJYX09GRlNFVCk7CisKKwkJLyogUlggZGVzY3JpcHRvciAqLworCQlyeGRlc2MgPSAmbWRwLT5yeF9yaW5nW2ldOworCQlyeGRlc2MtPmFkZHIgPSAodTMyKXNrYi0+ZGF0YSAmIH4weDNVTDsKKwkJcnhkZXNjLT5zdGF0dXMgPSBjcHVfdG9fbGUzMihSRF9SQUNUIHwgUkRfUkZQKTsKKworCQkvKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIDE2IGJ5dGUgYm91bmRhcnkuICovCisJCXJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IChtZHAtPnJ4X2J1Zl9zeiArIDE2KSAmIH4weDBGOworCX0KKworCW1kcC0+ZGlydHlfcnggPSAodTMyKSAoaSAtIFJYX1JJTkdfU0laRSk7CisKKwkvKiBNYXJrIHRoZSBsYXN0IGVudHJ5IGFzIHdyYXBwaW5nIHRoZSByaW5nLiAqLworCXJ4ZGVzYy0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFJDX1JERUwpOworCisJbWVtc2V0KG1kcC0+dHhfcmluZywgMCwgdHhfcmluZ3NpemUpOworCisJLyogYnVpbGQgVHggcmluZyBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKKwkJbWRwLT50eF9za2J1ZmZbaV0gPSBOVUxMOworCQl0eGRlc2MgPSAmbWRwLT50eF9yaW5nW2ldOworCQl0eGRlc2MtPnN0YXR1cyA9IGNwdV90b19sZTMyKFREX1RGUCk7CisJCXR4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IDA7CisJfQorCisJdHhkZXNjLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfVERMRSk7Cit9CisKKy8qIEdldCBza2IgYW5kIGRlc2NyaXB0b3IgYnVmZmVyICovCitzdGF0aWMgaW50IHNoX2V0aF9yaW5nX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgcnhfcmluZ3NpemUsIHR4X3JpbmdzaXplLCByZXQgPSAwOworCisJLyoKKwkgKiArMjYgZ2V0cyB0aGUgbWF4aW11bSBldGhlcm5ldCBlbmNhcHN1bGF0aW9uLCArNyAmIH43IGJlY2F1c2UgdGhlCisJICogY2FyZCBuZWVkcyByb29tIHRvIGRvIDggYnl0ZSBhbGlnbm1lbnQsICsyIHNvIHdlIGNhbiByZXNlcnZlCisJICogdGhlIGZpcnN0IDIgYnl0ZXMsIGFuZCArMTYgZ2V0cyByb29tIGZvciB0aGUgc3RhdHVzIHdvcmQgZnJvbSB0aGUKKwkgKiBjYXJkLgorCSAqLworCW1kcC0+cnhfYnVmX3N6ID0gKG5kZXYtPm10dSA8PSAxNDkyID8gUEtUX0JVRl9TWiA6CisJCQkgICgoKG5kZXYtPm10dSArIDI2ICsgNykgJiB+NykgKyAyICsgMTYpKTsKKworCS8qIEFsbG9jYXRlIFJYIGFuZCBUWCBza2IgcmluZ3MgKi8KKwltZHAtPnJ4X3NrYnVmZiA9IGttYWxsb2Moc2l6ZW9mKCptZHAtPnJ4X3NrYnVmZikgKiBSWF9SSU5HX1NJWkUsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtZHAtPnJ4X3NrYnVmZikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgUnggc2tiXG4iLCBuZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltZHAtPnR4X3NrYnVmZiA9IGttYWxsb2Moc2l6ZW9mKCptZHAtPnR4X3NrYnVmZikgKiBUWF9SSU5HX1NJWkUsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtZHAtPnR4X3NrYnVmZikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgVHggc2tiXG4iLCBuZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBza2JfcmluZ19mcmVlOworCX0KKworCS8qIEFsbG9jYXRlIGFsbCBSeCBkZXNjcmlwdG9ycy4gKi8KKwlyeF9yaW5nc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hfZXRoX3J4ZGVzYykgKiBSWF9SSU5HX1NJWkU7CisJbWRwLT5yeF9yaW5nID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIHJ4X3JpbmdzaXplLCAmbWRwLT5yeF9kZXNjX2RtYSwKKwkJCUdGUF9LRVJORUwpOworCisJaWYgKCFtZHAtPnJ4X3JpbmcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIFJ4IFJpbmcgKHNpemUgJWQgYnl0ZXMpXG4iLAorCQkJbmRldi0+bmFtZSwgcnhfcmluZ3NpemUpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRlc2NfcmluZ19mcmVlOworCX0KKworCW1kcC0+ZGlydHlfcnggPSAwOworCisJLyogQWxsb2NhdGUgYWxsIFR4IGRlc2NyaXB0b3JzLiAqLworCXR4X3JpbmdzaXplID0gc2l6ZW9mKHN0cnVjdCBzaF9ldGhfdHhkZXNjKSAqIFRYX1JJTkdfU0laRTsKKwltZHAtPnR4X3JpbmcgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgdHhfcmluZ3NpemUsICZtZHAtPnR4X2Rlc2NfZG1hLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtZHAtPnR4X3JpbmcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIFR4IFJpbmcgKHNpemUgJWQgYnl0ZXMpXG4iLAorCQkJbmRldi0+bmFtZSwgdHhfcmluZ3NpemUpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRlc2NfcmluZ19mcmVlOworCX0KKwlyZXR1cm4gcmV0OworCitkZXNjX3JpbmdfZnJlZToKKwkvKiBmcmVlIERNQSBidWZmZXIgKi8KKwlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCByeF9yaW5nc2l6ZSwgbWRwLT5yeF9yaW5nLCBtZHAtPnJ4X2Rlc2NfZG1hKTsKKworc2tiX3JpbmdfZnJlZToKKwkvKiBGcmVlIFJ4IGFuZCBUeCBza2IgcmluZyBidWZmZXIgKi8KKwlzaF9ldGhfcmluZ19mcmVlKG5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaF9ldGhfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCXVfaW50MzJfdCByeF9pbnRfdmFyLCB0eF9pbnRfdmFyOworCXUzMiB2YWw7CisKKwkvKiBTb2Z0IFJlc2V0ICovCisJc2hfZXRoX3Jlc2V0KG5kZXYpOworCisJY3RybF9vdXRsKFJQQURJUl9QQURTMSwgaW9hZGRyICsgUlBBRElSKTsJLyogU0g3NzEyLURNQS1SWC1QQUQyICovCisKKwkvKiBhbGwgc2hfZXRoIGludCBtYXNrICovCisJY3RybF9vdXRsKDAsIGlvYWRkciArIEVFU0lQUik7CisKKwkvKiBGSUZPIHNpemUgc2V0ICovCisJY3RybF9vdXRsKDAsIGlvYWRkciArIEVETVIpOwkvKiBFbmRpYW4gY2hhbmdlICovCisKKwljdHJsX291dGwoKEZJRk9fU0laRV9UIHwgRklGT19TSVpFX1IpLCBpb2FkZHIgKyBGRFIpOworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBURlRSKTsKKworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBSTUNSKTsKKworCXJ4X2ludF92YXIgPSBtZHAtPnJ4X2ludF92YXIgPSBERVNDX0lfUklOVDggfCBERVNDX0lfUklOVDU7CisJdHhfaW50X3ZhciA9IG1kcC0+dHhfaW50X3ZhciA9IERFU0NfSV9USU5UMjsKKwljdHJsX291dGwocnhfaW50X3ZhciB8IHR4X2ludF92YXIsIGlvYWRkciArIFRSU0NFUik7CisKKwljdHJsX291dGwoKEZJRk9fRl9EX1JGRiB8IEZJRk9fRl9EX1JGRCksIGlvYWRkciArIEZDRlRSKTsKKwljdHJsX291dGwoMCwgaW9hZGRyICsgVFJJTUQpOworCisJLyogRGVzY3JpcHRvciBmb3JtYXQgKi8KKwlzaF9ldGhfcmluZ19mb3JtYXQobmRldik7CisKKwljdHJsX291dGwoKHUzMiltZHAtPnJ4X3JpbmcsIGlvYWRkciArIFJETEFSKTsKKwljdHJsX291dGwoKHUzMiltZHAtPnR4X3JpbmcsIGlvYWRkciArIFRETEFSKTsKKworCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFRVNSKSwgaW9hZGRyICsgRUVTUik7CisJY3RybF9vdXRsKChETUFDX01fUkZSTUVSIHwgRE1BQ19NX0VDSSB8IDB4MDAzZmZmZmYpLCBpb2FkZHIgKyBFRVNJUFIpOworCisJLyogUEFVU0UgUHJvaGliaXRpb24gKi8KKwl2YWwgPSAoY3RybF9pbmwoaW9hZGRyICsgRUNNUikgJiBFQ01SX0RNKSB8CisJCUVDTVJfWlBGIHwgKG1kcC0+ZHVwbGV4ID8gRUNNUl9ETSA6IDApIHwgRUNNUl9URSB8IEVDTVJfUkU7CisKKwljdHJsX291dGwodmFsLCBpb2FkZHIgKyBFQ01SKTsKKwljdHJsX291dGwoRUNTUl9CUkNSWCB8IEVDU1JfUFNSVE8gfCBFQ1NSX0xDSE5HIHwgRUNTUl9JQ0QgfAorCQkgIEVDU0lQUl9NUERJUCwgaW9hZGRyICsgRUNTUik7CisJY3RybF9vdXRsKEVDU0lQUl9CUkNSWElQIHwgRUNTSVBSX1BTUlRPSVAgfCBFQ1NJUFJfTENITkdJUCB8CisJCSAgRUNTSVBSX0lDRElQIHwgRUNTSVBSX01QRElQLCBpb2FkZHIgKyBFQ1NJUFIpOworCisJLyogU2V0IE1BQyBhZGRyZXNzICovCisJdXBkYXRlX21hY19hZGRyZXNzKG5kZXYpOworCisJLyogbWFzayByZXNldCAqLworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkKKwljdHJsX291dGwoQVBSX0FQLCBpb2FkZHIgKyBBUFIpOworCWN0cmxfb3V0bChNUFJfTVAsIGlvYWRkciArIE1QUik7CisJY3RybF9vdXRsKFRQQVVTRVJfVU5MSU1JVEVELCBpb2FkZHIgKyBUUEFVU0VSKTsKKwljdHJsX291dGwoQkNGUl9VTkxJTUlURUQsIGlvYWRkciArIEJDRlIpOworI2VuZGlmCisJLyogU2V0dGluZyB0aGUgUnggbW9kZSB3aWxsIHN0YXJ0IHRoZSBSeCBwcm9jZXNzLiAqLworCWN0cmxfb3V0bChFRFJSUl9SLCBpb2FkZHIgKyBFRFJSUik7CisKKwluZXRpZl9zdGFydF9xdWV1ZShuZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGZyZWUgVHggc2tiIGZ1bmN0aW9uICovCitzdGF0aWMgaW50IHNoX2V0aF90eGZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3Qgc2hfZXRoX3R4ZGVzYyAqdHhkZXNjOworCWludCBmcmVlTnVtID0gMDsKKwlpbnQgZW50cnkgPSAwOworCisJZm9yICg7IG1kcC0+Y3VyX3R4IC0gbWRwLT5kaXJ0eV90eCA+IDA7IG1kcC0+ZGlydHlfdHgrKykgeworCQllbnRyeSA9IG1kcC0+ZGlydHlfdHggJSBUWF9SSU5HX1NJWkU7CisJCXR4ZGVzYyA9ICZtZHAtPnR4X3JpbmdbZW50cnldOworCQlpZiAodHhkZXNjLT5zdGF0dXMgJiBjcHVfdG9fbGUzMihURF9UQUNUKSkKKwkJCWJyZWFrOworCQkvKiBGcmVlIHRoZSBvcmlnaW5hbCBza2IuICovCisJCWlmIChtZHAtPnR4X3NrYnVmZltlbnRyeV0pIHsKKwkJCWRldl9rZnJlZV9za2JfaXJxKG1kcC0+dHhfc2tidWZmW2VudHJ5XSk7CisJCQltZHAtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCQkJZnJlZU51bSsrOworCQl9CisJCXR4ZGVzYy0+c3RhdHVzID0gY3B1X3RvX2xlMzIoVERfVEZQKTsKKwkJaWYgKGVudHJ5ID49IFRYX1JJTkdfU0laRSAtIDEpCisJCQl0eGRlc2MtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9URExFKTsKKworCQltZHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJbWRwLT5zdGF0cy50eF9ieXRlcyArPSB0eGRlc2MtPmJ1ZmZlcl9sZW5ndGg7CisJfQorCXJldHVybiBmcmVlTnVtOworfQorCisvKiBQYWNrZXQgcmVjZWl2ZSBmdW5jdGlvbiAqLworc3RhdGljIGludCBzaF9ldGhfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3Qgc2hfZXRoX3J4ZGVzYyAqcnhkZXNjOworCisJaW50IGVudHJ5ID0gbWRwLT5jdXJfcnggJSBSWF9SSU5HX1NJWkU7CisJaW50IGJvZ3VzY250ID0gKG1kcC0+ZGlydHlfcnggKyBSWF9SSU5HX1NJWkUpIC0gbWRwLT5jdXJfcng7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgcGt0X2xlbiA9IDA7CisJdTMyIGRlc2Nfc3RhdHVzOworCisJcnhkZXNjID0gJm1kcC0+cnhfcmluZ1tlbnRyeV07CisJd2hpbGUgKCEocnhkZXNjLT5zdGF0dXMgJiBjcHVfdG9fbGUzMihSRF9SQUNUKSkpIHsKKwkJZGVzY19zdGF0dXMgPSBsZTMyX3RvX2NwdShyeGRlc2MtPnN0YXR1cyk7CisJCXBrdF9sZW4gPSByeGRlc2MtPmZyYW1lX2xlbmd0aDsKKworCQlpZiAoLS1ib2d1c2NudCA8IDApCisJCQlicmVhazsKKworCQlpZiAoIShkZXNjX3N0YXR1cyAmIFJERkVORCkpCisJCQltZHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKworCQlpZiAoZGVzY19zdGF0dXMgJiAoUkRfUkZTMSB8IFJEX1JGUzIgfCBSRF9SRlMzIHwgUkRfUkZTNCB8CisJCQkJICAgUkRfUkZTNSB8IFJEX1JGUzYgfCBSRF9SRlMxMCkpIHsKKwkJCW1kcC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlpZiAoZGVzY19zdGF0dXMgJiBSRF9SRlMxKQorCQkJCW1kcC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJaWYgKGRlc2Nfc3RhdHVzICYgUkRfUkZTMikKKwkJCQltZHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJaWYgKGRlc2Nfc3RhdHVzICYgUkRfUkZTMykKKwkJCQltZHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCWlmIChkZXNjX3N0YXR1cyAmIFJEX1JGUzQpCisJCQkJbWRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQlpZiAoZGVzY19zdGF0dXMgJiBSRF9SRlM2KQorCQkJCW1kcC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkJaWYgKGRlc2Nfc3RhdHVzICYgUkRfUkZTMTApCisJCQkJbWRwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQl9IGVsc2UgeworCQkJc3dhcHMoKGNoYXIgKikocnhkZXNjLT5hZGRyICYgfjB4MyksIHBrdF9sZW4gKyAyKTsKKwkJCXNrYiA9IG1kcC0+cnhfc2tidWZmW2VudHJ5XTsKKwkJCW1kcC0+cnhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CisJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKKwkJCW5ldGlmX3J4KHNrYik7CisJCQluZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJCW1kcC0+c3RhdHMucnhfcGFja2V0cysrOworCQkJbWRwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQl9CisJCXJ4ZGVzYy0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFJEX1JBQ1QpOworCQllbnRyeSA9ICgrK21kcC0+Y3VyX3J4KSAlIFJYX1JJTkdfU0laRTsKKwl9CisKKwkvKiBSZWZpbGwgdGhlIFJ4IHJpbmcgYnVmZmVycy4gKi8KKwlmb3IgKDsgbWRwLT5jdXJfcnggLSBtZHAtPmRpcnR5X3J4ID4gMDsgbWRwLT5kaXJ0eV9yeCsrKSB7CisJCWVudHJ5ID0gbWRwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRTsKKwkJcnhkZXNjID0gJm1kcC0+cnhfcmluZ1tlbnRyeV07CisJCWlmIChtZHAtPnJ4X3NrYnVmZltlbnRyeV0gPT0gTlVMTCkgeworCQkJc2tiID0gZGV2X2FsbG9jX3NrYihtZHAtPnJ4X2J1Zl9zeik7CisJCQltZHAtPnJ4X3NrYnVmZltlbnRyeV0gPSBza2I7CisJCQlpZiAoc2tiID09IE5VTEwpCisJCQkJYnJlYWs7CS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQuICovCisJCQlza2ItPmRldiA9IG5kZXY7CisJCQlza2JfcmVzZXJ2ZShza2IsIFJYX09GRlNFVCk7CisJCQlyeGRlc2MtPmFkZHIgPSAodTMyKXNrYi0+ZGF0YSAmIH4weDNVTDsKKwkJfQorCQkvKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIDE2IGJ5dGUgYm91bmRhcnkuICovCisJCXJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IChtZHAtPnJ4X2J1Zl9zeiArIDE2KSAmIH4weDBGOworCQlpZiAoZW50cnkgPj0gUlhfUklOR19TSVpFIC0gMSkKKwkJCXJ4ZGVzYy0+c3RhdHVzIHw9CisJCQljcHVfdG9fbGUzMihSRF9SQUNUIHwgUkRfUkZQIHwgUkNfUkRFTCk7CisJCWVsc2UKKwkJCXJ4ZGVzYy0+c3RhdHVzIHw9CisJCQljcHVfdG9fbGUzMihSRF9SQUNUIHwgUkRfUkZQKTsKKwl9CisKKwkvKiBSZXN0YXJ0IFJ4IGVuZ2luZSBpZiBzdG9wcGVkLiAqLworCS8qIElmIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgc3RhdHVzLCBkb24ndC4gLUtEVSAqLworCWN0cmxfb3V0bChFRFJSUl9SLCBuZGV2LT5iYXNlX2FkZHIgKyBFRFJSUik7CisKKwlyZXR1cm4gMDsKK30KKworLyogZXJyb3IgY29udHJvbCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgc2hfZXRoX2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaW50cl9zdGF0dXMpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCXUzMiBmZWxpY19zdGF0OworCisJaWYgKGludHJfc3RhdHVzICYgRUVTUl9FQ0kpIHsKKwkJZmVsaWNfc3RhdCA9IGN0cmxfaW5sKGlvYWRkciArIEVDU1IpOworCQljdHJsX291dGwoZmVsaWNfc3RhdCwgaW9hZGRyICsgRUNTUik7CS8qIGNsZWFyIGludCAqLworCQlpZiAoZmVsaWNfc3RhdCAmIEVDU1JfSUNEKQorCQkJbWRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlpZiAoZmVsaWNfc3RhdCAmIEVDU1JfTENITkcpIHsKKwkJCS8qIExpbmsgQ2hhbmdlZCAqLworCQkJdTMyIGxpbmtfc3RhdCA9IChjdHJsX2lubChpb2FkZHIgKyBQU1IpKTsKKwkJCWlmICghKGxpbmtfc3RhdCAmIFBIWV9TVF9MSU5LKSkgeworCQkJCS8qIExpbmsgRG93biA6IGRpc2FibGUgdHggYW5kIHJ4ICovCisJCQkJY3RybF9vdXRsKGN0cmxfaW5sKGlvYWRkciArIEVDTVIpICYKKwkJCQkJICB+KEVDTVJfUkUgfCBFQ01SX1RFKSwgaW9hZGRyICsgRUNNUik7CisJCQl9IGVsc2UgeworCQkJCS8qIExpbmsgVXAgKi8KKwkJCQljdHJsX291dGwoY3RybF9pbmwoaW9hZGRyICsgRUVTSVBSKSAmCisJCQkJCSAgfkRNQUNfTV9FQ0ksIGlvYWRkciArIEVFU0lQUik7CisJCQkJLypjbGVhciBpbnQgKi8KKwkJCQljdHJsX291dGwoY3RybF9pbmwoaW9hZGRyICsgRUNTUiksCisJCQkJCSAgaW9hZGRyICsgRUNTUik7CisJCQkJY3RybF9vdXRsKGN0cmxfaW5sKGlvYWRkciArIEVFU0lQUikgfAorCQkJCQkgIERNQUNfTV9FQ0ksIGlvYWRkciArIEVFU0lQUik7CisJCQkJLyogZW5hYmxlIHR4IGFuZCByeCAqLworCQkJCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSB8CisJCQkJCSAgKEVDTVJfUkUgfCBFQ01SX1RFKSwgaW9hZGRyICsgRUNNUik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoaW50cl9zdGF0dXMgJiBFRVNSX1RXQikgeworCQkvKiBXcml0ZSBidWNrIGVuZC4gdW51c2VkIHdyaXRlIGJhY2sgaW50ZXJydXB0ICovCisJCWlmIChpbnRyX3N0YXR1cyAmIEVFU1JfVEFCVCkJLyogVHJhbnNtaXQgQWJvcnQgaW50ICovCisJCQltZHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJfQorCisJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SQUJUKSB7CisJCS8qIFJlY2VpdmUgQWJvcnQgaW50ICovCisJCWlmIChpbnRyX3N0YXR1cyAmIEVFU1JfUkZSTUVSKSB7CisJCQkvKiBSZWNlaXZlIEZyYW1lIE92ZXJmbG93IGludCAqLworCQkJbWRwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCXByaW50ayhLRVJOX0VSUiAiUmVjZWl2ZSBGcmFtZSBPdmVyZmxvd1xuIik7CisJCX0KKwl9CisKKwlpZiAoaW50cl9zdGF0dXMgJiBFRVNSX0FERSkgeworCQlpZiAoaW50cl9zdGF0dXMgJiBFRVNSX1RERSkgeworCQkJaWYgKGludHJfc3RhdHVzICYgRUVTUl9URkUpCisJCQkJbWRwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQl9CisJfQorCisJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SREUpIHsKKwkJLyogUmVjZWl2ZSBEZXNjcmlwdG9yIEVtcHR5IGludCAqLworCQltZHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisKKwkJaWYgKGN0cmxfaW5sKGlvYWRkciArIEVEUlJSKSBeIEVEUlJSX1IpCisJCQljdHJsX291dGwoRURSUlJfUiwgaW9hZGRyICsgRURSUlIpOworCQlwcmludGsoS0VSTl9FUlIgIlJlY2VpdmUgRGVzY3JpcHRvciBFbXB0eVxuIik7CisJfQorCWlmIChpbnRyX3N0YXR1cyAmIEVFU1JfUkZFKSB7CisJCS8qIFJlY2VpdmUgRklGTyBPdmVyZmxvdyBpbnQgKi8KKwkJbWRwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQlwcmludGsoS0VSTl9FUlIgIlJlY2VpdmUgRklGTyBPdmVyZmxvd1xuIik7CisJfQorCWlmIChpbnRyX3N0YXR1cyAmCisJICAgIChFRVNSX1RXQiB8IEVFU1JfVEFCVCB8IEVFU1JfQURFIHwgRUVTUl9UREUgfCBFRVNSX1RGRSkpIHsKKwkJLyogVHggZXJyb3IgKi8KKwkJdTMyIGVkdHJyID0gY3RybF9pbmwobmRldi0+YmFzZV9hZGRyICsgRURUUlIpOworCQkvKiBkbWVzZyAqLworCQlwcmludGsoS0VSTl9FUlIgIiVzOlRYIGVycm9yLiBzdGF0dXM9JTguOHggY3VyX3R4PSU4Ljh4ICIsCisJCQkJbmRldi0+bmFtZSwgaW50cl9zdGF0dXMsIG1kcC0+Y3VyX3R4KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJkaXJ0eV90eD0lOC44eCBzdGF0ZT0lOC44eCBFRFRSUj0lOC44eC5cbiIsCisJCQkJbWRwLT5kaXJ0eV90eCwgKHUzMikgbmRldi0+c3RhdGUsIGVkdHJyKTsKKwkJLyogZGlydHkgYnVmZmVyIGZyZWUgKi8KKwkJc2hfZXRoX3R4ZnJlZShuZGV2KTsKKworCQkvKiBTSDc3MTIgQlVHICovCisJCWlmIChlZHRyciBeIEVEVFJSX1RSTlMpIHsKKwkJCS8qIHR4IGRtYSBzdGFydCAqLworCQkJY3RybF9vdXRsKEVEVFJSX1RSTlMsIG5kZXYtPmJhc2VfYWRkciArIEVEVFJSKTsKKwkJfQorCQkvKiB3YWtldXAgKi8KKwkJbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKm5ldGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5ldGRldjsKKwlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOworCXUzMiBpb2FkZHIsIGJvZ3VzY250ID0gUlhfUklOR19TSVpFOworCXUzMiBpbnRyX3N0YXR1cyA9IDA7CisKKwlpb2FkZHIgPSBuZGV2LT5iYXNlX2FkZHI7CisJc3Bpbl9sb2NrKCZtZHAtPmxvY2spOworCisJaW50cl9zdGF0dXMgPSBjdHJsX2lubChpb2FkZHIgKyBFRVNSKTsKKwkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KKwljdHJsX291dGwoaW50cl9zdGF0dXMsIGlvYWRkciArIEVFU1IpOworCisJaWYgKGludHJfc3RhdHVzICYgKEVFU1JfRlJDIHwgRUVTUl9SSU5UOCB8CisJCQkgICBFRVNSX1JJTlQ1IHwgRUVTUl9SSU5UNCB8IEVFU1JfUklOVDMgfCBFRVNSX1JJTlQyIHwKKwkJCSAgIEVFU1JfUklOVDEpKQorCQlzaF9ldGhfcngobmRldik7CisJaWYgKGludHJfc3RhdHVzICYgKEVFU1JfRlRDIHwKKwkJCSAgIEVFU1JfVElOVDQgfCBFRVNSX1RJTlQzIHwgRUVTUl9USU5UMiB8IEVFU1JfVElOVDEpKSB7CisKKwkJc2hfZXRoX3R4ZnJlZShuZGV2KTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKKwl9CisKKwlpZiAoaW50cl9zdGF0dXMgJiBFRVNSX0VSUl9DSEVDSykKKwkJc2hfZXRoX2Vycm9yKG5kZXYsIGludHJfc3RhdHVzKTsKKworCWlmICgtLWJvZ3VzY250IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiJXM6IFRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCBzdGF0dXM9MHglNC40eC5cbiIsCisJCSAgICAgICBuZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CisJfQorCisJc3Bpbl91bmxvY2soJm1kcC0+bG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2V0aF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOworCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwltb2RfdGltZXIoJm1kcC0+dGltZXIsIGppZmZpZXMgKyAoMTAgKiBIWikpOworfQorCisvKiBQSFkgc3RhdGUgY29udHJvbCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgc2hfZXRoX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IG1kcC0+cGh5ZGV2OworCXUzMiBpb2FkZHIgPSBuZGV2LT5iYXNlX2FkZHI7CisJaW50IG5ld19zdGF0ZSA9IDA7CisKKwlpZiAocGh5ZGV2LT5saW5rICE9IFBIWV9ET1dOKSB7CisJCWlmIChwaHlkZXYtPmR1cGxleCAhPSBtZHAtPmR1cGxleCkgeworCQkJbmV3X3N0YXRlID0gMTsKKwkJCW1kcC0+ZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CisJCX0KKworCQlpZiAocGh5ZGV2LT5zcGVlZCAhPSBtZHAtPnNwZWVkKSB7CisJCQluZXdfc3RhdGUgPSAxOworCQkJbWRwLT5zcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisJCX0KKwkJaWYgKG1kcC0+bGluayA9PSBQSFlfRE9XTikgeworCQkJY3RybF9vdXRsKChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSAmIH5FQ01SX1RYRikKKwkJCQkJfCBFQ01SX0RNLCBpb2FkZHIgKyBFQ01SKTsKKwkJCW5ld19zdGF0ZSA9IDE7CisJCQltZHAtPmxpbmsgPSBwaHlkZXYtPmxpbms7CisJCX0KKwl9IGVsc2UgaWYgKG1kcC0+bGluaykgeworCQluZXdfc3RhdGUgPSAxOworCQltZHAtPmxpbmsgPSBQSFlfRE9XTjsKKwkJbWRwLT5zcGVlZCA9IDA7CisJCW1kcC0+ZHVwbGV4ID0gLTE7CisJfQorCisJaWYgKG5ld19zdGF0ZSkKKwkJcGh5X3ByaW50X3N0YXR1cyhwaHlkZXYpOworfQorCisvKiBQSFkgaW5pdCBmdW5jdGlvbiAqLworc3RhdGljIGludCBzaF9ldGhfcGh5X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwljaGFyIHBoeV9pZFtCVVNfSURfU0laRV07CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7CisKKwlzbnByaW50ZihwaHlfaWQsIEJVU19JRF9TSVpFLCBQSFlfSURfRk1ULAorCQltZHAtPm1paV9idXMtPmlkICwgbWRwLT5waHlfaWQpOworCisJbWRwLT5saW5rID0gUEhZX0RPV047CisJbWRwLT5zcGVlZCA9IDA7CisJbWRwLT5kdXBsZXggPSAtMTsKKworCS8qIFRyeSBjb25uZWN0IHRvIFBIWSAqLworCXBoeWRldiA9IHBoeV9jb25uZWN0KG5kZXYsIHBoeV9pZCwgJnNoX2V0aF9hZGp1c3RfbGluaywKKwkJCQkwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwlpZiAoSVNfRVJSKHBoeWRldikpIHsKKwkJZGV2X2VycigmbmRldi0+ZGV2LCAicGh5X2Nvbm5lY3QgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5ZGV2KTsKKwl9CisJZGV2X2luZm8oJm5kZXYtPmRldiwgImF0dGFjaGVkIHBoeSAlaSB0byBkcml2ZXIgJXNcbiIsCisJcGh5ZGV2LT5hZGRyLCBwaHlkZXYtPmRydi0+bmFtZSk7CisKKwltZHAtPnBoeWRldiA9IHBoeWRldjsKKworCXJldHVybiAwOworfQorCisvKiBQSFkgY29udHJvbCBzdGFydCBmdW5jdGlvbiAqLworc3RhdGljIGludCBzaF9ldGhfcGh5X3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisJaW50IHJldDsKKworCXJldCA9IHNoX2V0aF9waHlfaW5pdChuZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogcmVzZXQgcGh5IC0gdGhpcyBhbHNvIHdha2VzIGl0IGZyb20gUERPV04gKi8KKwlwaHlfd3JpdGUobWRwLT5waHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKKwlwaHlfc3RhcnQobWRwLT5waHlkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG5ldHdvcmsgZGV2aWNlIG9wZW4gZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgc2hfZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCXJldCA9IHJlcXVlc3RfaXJxKG5kZXYtPmlycSwgJnNoX2V0aF9pbnRlcnJ1cHQsIDAsIG5kZXYtPm5hbWUsIG5kZXYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4gbm90IGFzc2lnbiBJUlEgbnVtYmVyIHRvICVzXG4iLCBDQVJETkFNRSk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRGVzY3JpcHRvciBzZXQgKi8KKwlyZXQgPSBzaF9ldGhfcmluZ19pbml0KG5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCisJLyogZGV2aWNlIGluaXQgKi8KKwlyZXQgPSBzaF9ldGhfZGV2X2luaXQobmRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZV9pcnE7CisKKwkvKiBQSFkgY29udHJvbCBzdGFydCovCisJcmV0ID0gc2hfZXRoX3BoeV9zdGFydChuZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlX2lycTsKKworCS8qIFNldCB0aGUgdGltZXIgdG8gY2hlY2sgZm9yIGxpbmsgYmVhdC4gKi8KKwlpbml0X3RpbWVyKCZtZHAtPnRpbWVyKTsKKwltZHAtPnRpbWVyLmV4cGlyZXMgPSAoamlmZmllcyArICgyNCAqIEhaKSkgLyAxMDsvKiAyLjQgc2VjLiAqLworCXNldHVwX3RpbWVyKCZtZHAtPnRpbWVyLCBzaF9ldGhfdGltZXIsIG5kZXYpOworCisJcmV0dXJuIHJldDsKKworb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKG5kZXYtPmlycSwgbmRldik7CisJcmV0dXJuIHJldDsKK30KKworLyogVGltZW91dCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgc2hfZXRoX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzaF9ldGhfcnhkZXNjICpyeGRlc2M7CisJaW50IGk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCisJLyogd29ybmluZyBtZXNzYWdlIG91dC4gKi8KKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTguOHgsIgorCSAgICAgICAiIHJlc2V0dGluZy4uLlxuIiwgbmRldi0+bmFtZSwgKGludCljdHJsX2lubChpb2FkZHIgKyBFRVNSKSk7CisKKwkvKiB0eF9lcnJvcnMgY291bnQgdXAgKi8KKwltZHAtPnN0YXRzLnR4X2Vycm9ycysrOworCisJLyogdGltZXIgb2ZmICovCisJZGVsX3RpbWVyX3N5bmMoJm1kcC0+dGltZXIpOworCisJLyogRnJlZSBhbGwgdGhlIHNrYnVmZnMgaW4gdGhlIFJ4IHF1ZXVlLiAqLworCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgeworCQlyeGRlc2MgPSAmbWRwLT5yeF9yaW5nW2ldOworCQlyeGRlc2MtPnN0YXR1cyA9IDA7CisJCXJ4ZGVzYy0+YWRkciA9IDB4QkFERjAwRDA7CisJCWlmIChtZHAtPnJ4X3NrYnVmZltpXSkKKwkJCWRldl9rZnJlZV9za2IobWRwLT5yeF9za2J1ZmZbaV0pOworCQltZHAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7CisJfQorCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgeworCQlpZiAobWRwLT50eF9za2J1ZmZbaV0pCisJCQlkZXZfa2ZyZWVfc2tiKG1kcC0+dHhfc2tidWZmW2ldKTsKKwkJbWRwLT50eF9za2J1ZmZbaV0gPSBOVUxMOworCX0KKworCS8qIGRldmljZSBpbml0ICovCisJc2hfZXRoX2Rldl9pbml0KG5kZXYpOworCisJLyogdGltZXIgb24gKi8KKwltZHAtPnRpbWVyLmV4cGlyZXMgPSAoamlmZmllcyArICgyNCAqIEhaKSkgLyAxMDsvKiAyLjQgc2VjLiAqLworCWFkZF90aW1lcigmbWRwLT50aW1lcik7Cit9CisKKy8qIFBhY2tldCB0cmFuc21pdCBmdW5jdGlvbiAqLworc3RhdGljIGludCBzaF9ldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBzaF9ldGhfdHhkZXNjICp0eGRlc2M7CisJdTMyIGVudHJ5OworCWludCBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZHAtPmxvY2ssIGZsYWdzKTsKKwlpZiAoKG1kcC0+Y3VyX3R4IC0gbWRwLT5kaXJ0eV90eCkgPj0gKFRYX1JJTkdfU0laRSAtIDQpKSB7CisJCWlmICghc2hfZXRoX3R4ZnJlZShuZGV2KSkgeworCQkJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcC0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRwLT5sb2NrLCBmbGFncyk7CisKKwllbnRyeSA9IG1kcC0+Y3VyX3R4ICUgVFhfUklOR19TSVpFOworCW1kcC0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKKwl0eGRlc2MgPSAmbWRwLT50eF9yaW5nW2VudHJ5XTsKKwl0eGRlc2MtPmFkZHIgPSAodTMyKShza2ItPmRhdGEpOworCS8qIHNvZnQgc3dhcC4gKi8KKwlzd2FwcygoY2hhciAqKSh0eGRlc2MtPmFkZHIgJiB+MHgzKSwgc2tiLT5sZW4gKyAyKTsKKwkvKiB3cml0ZSBiYWNrICovCisJX19mbHVzaF9wdXJnZV9yZWdpb24oc2tiLT5kYXRhLCBza2ItPmxlbik7CisJaWYgKHNrYi0+bGVuIDwgRVRIRVJTTUFMTCkKKwkJdHhkZXNjLT5idWZmZXJfbGVuZ3RoID0gRVRIRVJTTUFMTDsKKwllbHNlCisJCXR4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IHNrYi0+bGVuOworCisJaWYgKGVudHJ5ID49IFRYX1JJTkdfU0laRSAtIDEpCisJCXR4ZGVzYy0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX1RBQ1QgfCBURF9URExFKTsKKwllbHNlCisJCXR4ZGVzYy0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX1RBQ1QpOworCisJbWRwLT5jdXJfdHgrKzsKKworCWN0cmxfb3V0bChFRFRSUl9UUk5TLCBuZGV2LT5iYXNlX2FkZHIgKyBFRFRSUik7CisJbmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGRldmljZSBjbG9zZSBmdW5jdGlvbiAqLworc3RhdGljIGludCBzaF9ldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCWludCByaW5nc2l6ZTsKKworCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqLworCWN0cmxfb3V0bCgweDAwMDAsIGlvYWRkciArIEVFU0lQUik7CisKKwkvKiBTdG9wIHRoZSBjaGlwJ3MgVHggYW5kIFJ4IHByb2Nlc3Nlcy4gKi8KKwljdHJsX291dGwoMCwgaW9hZGRyICsgRURUUlIpOworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBFRFJSUik7CisKKwkvKiBQSFkgRGlzY29ubmVjdCAqLworCWlmIChtZHAtPnBoeWRldikgeworCQlwaHlfc3RvcChtZHAtPnBoeWRldik7CisJCXBoeV9kaXNjb25uZWN0KG1kcC0+cGh5ZGV2KTsKKwl9CisKKwlmcmVlX2lycShuZGV2LT5pcnEsIG5kZXYpOworCisJZGVsX3RpbWVyX3N5bmMoJm1kcC0+dGltZXIpOworCisJLyogRnJlZSBhbGwgdGhlIHNrYnVmZnMgaW4gdGhlIFJ4IHF1ZXVlLiAqLworCXNoX2V0aF9yaW5nX2ZyZWUobmRldik7CisKKwkvKiBmcmVlIERNQSBidWZmZXIgKi8KKwlyaW5nc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hfZXRoX3J4ZGVzYykgKiBSWF9SSU5HX1NJWkU7CisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgcmluZ3NpemUsIG1kcC0+cnhfcmluZywgbWRwLT5yeF9kZXNjX2RtYSk7CisKKwkvKiBmcmVlIERNQSBidWZmZXIgKi8KKwlyaW5nc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hfZXRoX3R4ZGVzYykgKiBUWF9SSU5HX1NJWkU7CisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgcmluZ3NpemUsIG1kcC0+dHhfcmluZywgbWRwLT50eF9kZXNjX2RtYSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzaF9ldGhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisJdTMyIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKKworCW1kcC0+c3RhdHMudHhfZHJvcHBlZCArPSBjdHJsX2lubChpb2FkZHIgKyBUUk9DUik7CisJY3RybF9vdXRsKDAsIGlvYWRkciArIFRST0NSKTsJLyogKHdyaXRlIGNsZWFyKSAqLworCW1kcC0+c3RhdHMuY29sbGlzaW9ucyArPSBjdHJsX2lubChpb2FkZHIgKyBDRENSKTsKKwljdHJsX291dGwoMCwgaW9hZGRyICsgQ0RDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KKwltZHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IGN0cmxfaW5sKGlvYWRkciArIExDQ1IpOworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBMQ0NSKTsJLyogKHdyaXRlIGNsZWFyKSAqLworCW1kcC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gY3RybF9pbmwoaW9hZGRyICsgQ05EQ1IpOworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBDTkRDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KKworCXJldHVybiAmbWRwLT5zdGF0czsKK30KKworLyogaW9jdGwgdG8gZGV2aWNlIGZ1bmNpb3RuKi8KK3N0YXRpYyBpbnQgc2hfZXRoX2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLAorCQkJCWludCBjbWQpCit7CisJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gbWRwLT5waHlkZXY7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFwaHlkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBoeV9taWlfaW9jdGwocGh5ZGV2LCBpZl9taWkocnEpLCBjbWQpOworfQorCisKKy8qIE11bHRpY2FzdCByZWNlcHRpb24gZGlyZWN0aW9ucyBzZXQgKi8KK3N0YXRpYyB2b2lkIHNoX2V0aF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJdTMyIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKKworCWlmIChuZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KKwkJY3RybF9vdXRsKChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSAmIH5FQ01SX01DVCkgfCBFQ01SX1BSTSwKKwkJCSAgaW9hZGRyICsgRUNNUik7CisJfSBlbHNlIHsKKwkJLyogTm9ybWFsLCB1bmljYXN0L2Jyb2FkY2FzdC1vbmx5IG1vZGUuICovCisJCWN0cmxfb3V0bCgoY3RybF9pbmwoaW9hZGRyICsgRUNNUikgJiB+RUNNUl9QUk0pIHwgRUNNUl9NQ1QsCisJCQkgIGlvYWRkciArIEVDTVIpOworCX0KK30KKworLyogU3VwZXJIJ3MgVFNVIHJlZ2lzdGVyIGluaXQgZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIHNoX2V0aF90c3VfaW5pdCh1MzIgaW9hZGRyKQoreworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfRldFTjApOwkvKiBEaXNhYmxlIGZvcndhcmQoMC0+MSkgKi8KKwljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX0ZXRU4xKTsJLyogRGlzYWJsZSBmb3J3YXJkKDEtPjApICovCisJY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9GQ00pOwkvKiBmb3J3YXJkIGZpZm8gM2stM2sgKi8KKwljdHJsX291dGwoMHhjLCBpb2FkZHIgKyBUU1VfQlNZU0wwKTsKKwljdHJsX291dGwoMHhjLCBpb2FkZHIgKyBUU1VfQlNZU0wxKTsKKwljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX1BSSVNMMCk7CisJY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9QUklTTDEpOworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfRldTTDApOworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfRldTTDEpOworCWN0cmxfb3V0bChUU1VfRldTTENfUE9TVEVOVSB8IFRTVV9GV1NMQ19QT1NURU5MLCBpb2FkZHIgKyBUU1VfRldTTEMpOworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfUVRBR00wKTsJLyogRGlzYWJsZSBRVEFHKDAtPjEpICovCisJY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9RVEFHTTEpOwkvKiBEaXNhYmxlIFFUQUcoMS0+MCkgKi8KKwljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX0ZXU1IpOwkvKiBhbGwgaW50ZXJydXB0IHN0YXR1cyBjbGVhciAqLworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfRldJTk1LKTsJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0ICovCisJY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9URU4pOwkvKiBEaXNhYmxlIGFsbCBDQU0gZW50cnkgKi8KKwljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX1BPU1QxKTsJLyogRGlzYWJsZSBDQU0gZW50cnkgWyAwLSA3XSAqLworCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfUE9TVDIpOwkvKiBEaXNhYmxlIENBTSBlbnRyeSBbIDgtMTVdICovCisJY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9QT1NUMyk7CS8qIERpc2FibGUgQ0FNIGVudHJ5IFsxNi0yM10gKi8KKwljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX1BPU1Q0KTsJLyogRGlzYWJsZSBDQU0gZW50cnkgWzI0LTMxXSAqLworfQorCisvKiBNRElPIGJ1cyByZWxlYXNlIGZ1bmN0aW9uICovCitzdGF0aWMgaW50IHNoX21kaW9fcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKCZuZGV2LT5kZXYpOworCisJLyogdW5yZWdpc3RlciBtZGlvIGJ1cyAqLworCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOworCisJLyogcmVtb3ZlIG1kaW8gYnVzIGluZm8gZnJvbSBuZXRfZGV2aWNlICovCisJZGV2X3NldF9kcnZkYXRhKCZuZGV2LT5kZXYsIE5VTEwpOworCisJLyogZnJlZSBiaXRiYW5nIGluZm8gKi8KKwlmcmVlX21kaW9fYml0YmFuZyhidXMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE1ESU8gYnVzIGluaXQgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgc2hfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaWQpCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3QgYmJfaW5mbyAqYml0YmFuZzsKKwlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOworCisJLyogY3JlYXRlIGJpdCBjb250cm9sIHN0cnVjdCBmb3IgUEhZICovCisJYml0YmFuZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiaXRiYW5nKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIGJpdGJhbmcgaW5pdCAqLworCWJpdGJhbmctPmFkZHIgPSBuZGV2LT5iYXNlX2FkZHIgKyBQSVI7CisJYml0YmFuZy0+bWRpX21zayA9IDB4MDg7CisJYml0YmFuZy0+bWRvX21zayA9IDB4MDQ7CisJYml0YmFuZy0+bW1kX21zayA9IDB4MDI7LyogTU1EICovCisJYml0YmFuZy0+bWRjX21zayA9IDB4MDE7CisJYml0YmFuZy0+Y3RybC5vcHMgPSAmYmJfb3BzOworCisJLyogTUlJIGNvbnRvcmxsZXIgc2V0dGluZyAqLworCW1kcC0+bWlpX2J1cyA9IGFsbG9jX21kaW9fYml0YmFuZygmYml0YmFuZy0+Y3RybCk7CisJaWYgKCFtZHAtPm1paV9idXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9iaXRiYW5nOworCX0KKworCS8qIEhvb2sgdXAgTUlJIHN1cHBvcnQgZm9yIGV0aHRvb2wgKi8KKwltZHAtPm1paV9idXMtPm5hbWUgPSAic2hfbWlpIjsKKwltZHAtPm1paV9idXMtPmRldiA9ICZuZGV2LT5kZXY7CisJbWRwLT5taWlfYnVzLT5pZFswXSA9IGlkOworCisJLyogUEhZIElSUSAqLworCW1kcC0+bWlpX2J1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSpQSFlfTUFYX0FERFIsIEdGUF9LRVJORUwpOworCWlmICghbWRwLT5taWlfYnVzLT5pcnEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9idXM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKQorCQltZHAtPm1paV9idXMtPmlycVtpXSA9IFBIWV9QT0xMOworCisJLyogcmVnaXN0IG1kaW8gYnVzICovCisJcmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZHAtPm1paV9idXMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCisJZGV2X3NldF9kcnZkYXRhKCZuZGV2LT5kZXYsIG1kcC0+bWlpX2J1cyk7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfaXJxOgorCWtmcmVlKG1kcC0+bWlpX2J1cy0+aXJxKTsKKworb3V0X2ZyZWVfYnVzOgorCWtmcmVlKG1kcC0+bWlpX2J1cyk7CisKK291dF9mcmVlX2JpdGJhbmc6CisJa2ZyZWUoYml0YmFuZyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNoX2V0aF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0LCBpLCBkZXZubyA9IDA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMOworCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwOworCisJLyogZ2V0IGJhc2UgYWRkciAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUpKTsKKwlpZiAoIW5kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFsbG9jYXRlIGRldmljZS5cbiIsIENBUkROQU1FKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVGhlIHNoIEV0aGVyLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCisJbmRldi0+YmFzZV9hZGRyID0gcmVzLT5zdGFydDsKKwlkZXZubyA9IHBkZXYtPmlkOworCWlmIChkZXZubyA8IDApCisJCWRldm5vID0gMDsKKworCW5kZXYtPmRtYSA9IC0xOworCW5kZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKG5kZXYtPmlycSA8IDApIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfcmVsZWFzZTsKKwl9CisKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKKworCS8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIGV0aGVybmV0IHZhbHVlcy4gKi8KKwlldGhlcl9zZXR1cChuZGV2KTsKKworCW1kcCA9IG5ldGRldl9wcml2KG5kZXYpOworCXNwaW5fbG9ja19pbml0KCZtZHAtPmxvY2spOworCisJLyogZ2V0IFBIWSBJRCAqLworCW1kcC0+cGh5X2lkID0gKGludClwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCS8qIHNldCBmdW5jdGlvbiAqLworCW5kZXYtPm9wZW4gPSBzaF9ldGhfb3BlbjsKKwluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzaF9ldGhfc3RhcnRfeG1pdDsKKwluZGV2LT5zdG9wID0gc2hfZXRoX2Nsb3NlOworCW5kZXYtPmdldF9zdGF0cyA9IHNoX2V0aF9nZXRfc3RhdHM7CisJbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2hfZXRoX3NldF9tdWx0aWNhc3RfbGlzdDsKKwluZGV2LT5kb19pb2N0bCA9IHNoX2V0aF9kb19pb2N0bDsKKwluZGV2LT50eF90aW1lb3V0ID0gc2hfZXRoX3R4X3RpbWVvdXQ7CisJbmRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOworCisJbWRwLT5wb3N0X3J4ID0gUE9TVF9SWCA+PiAoZGV2bm8gPDwgMSk7CisJbWRwLT5wb3N0X2Z3ID0gUE9TVF9GVyA+PiAoZGV2bm8gPDwgMSk7CisKKwkvKiByZWFkIGFuZCBzZXQgTUFDIGFkZHJlc3MgKi8KKwlyZWFkX21hY19hZGRyZXNzKG5kZXYpOworCisJLyogRmlyc3QgZGV2aWNlIG9ubHkgaW5pdCAqLworCWlmICghZGV2bm8pIHsKKwkJLyogcmVzZXQgZGV2aWNlICovCisJCWN0cmxfb3V0bChBUlNUUl9BUlNUUiwgbmRldi0+YmFzZV9hZGRyICsgQVJTVFIpOworCQltZGVsYXkoMSk7CisKKwkJLyogVFNVIGluaXQgKEluaXQgb25seSkqLworCQlzaF9ldGhfdHN1X2luaXQoU0hfVFNVX0FERFIpOworCX0KKworCS8qIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdGVyICovCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwkvKiBtZGlvIGJ1cyBpbml0ICovCisJcmV0ID0gc2hfbWRpb19pbml0KG5kZXYsIHBkZXYtPmlkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlZ2lzdGVyOworCisJLyogcHJpdG50IGRldmljZSBpbmZvbWF0aW9uICovCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGF0IDB4JXgsICIsCisJICAgICAgIG5kZXYtPm5hbWUsIENBUkROQU1FLCAodTMyKSBuZGV2LT5iYXNlX2FkZHIpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJTIuMng6IiwgbmRldi0+ZGV2X2FkZHJbaV0pOworCXByaW50ayhLRVJOX0lORk8gIiUyLjJ4LCBJUlEgJWQuXG4iLCBuZGV2LT5kZXZfYWRkcltpXSwgbmRldi0+aXJxKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOworCisJcmV0dXJuIHJldDsKKworb3V0X3VucmVnaXN0ZXI6CisJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CisKK291dF9yZWxlYXNlOgorCS8qIG5ldF9kZXYgZnJlZSAqLworCWlmIChuZGV2KQorCQlmcmVlX25ldGRldihuZGV2KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2hfZXRoX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc2hfbWRpb19yZWxlYXNlKG5kZXYpOworCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlmcmVlX25ldGRldihuZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF9ldGhfZHJpdmVyID0geworCS5wcm9iZSA9IHNoX2V0aF9kcnZfcHJvYmUsCisJLnJlbW92ZSA9IHNoX2V0aF9kcnZfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gQ0FSRE5BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX2V0aF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2hfZXRoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzaF9ldGhfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzaF9ldGhfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2hfZXRoX2luaXQpOworbW9kdWxlX2V4aXQoc2hfZXRoX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJOb2J1aGlybyBJd2FtYXRzdSwgWW9zaGloaXJvIFNoaW1vZGEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmVuZXNhcyBTdXBlckggRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaF9ldGguaCBiL2RyaXZlcnMvbmV0L3NoX2V0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMWUxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zaF9ldGguaApAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqICBTdXBlckggRXRoZXJuZXQgZGV2aWNlIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBOb2J1aGlybyBJd2FtYXRzdQorICogIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgKiAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqLworCisjaWZuZGVmIF9fU0hfRVRIX0hfXworI2RlZmluZSBfX1NIX0VUSF9IX18KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNkZWZpbmUgQ0FSRE5BTUUJInNoLWV0aCIKKyNkZWZpbmUgVFhfVElNRU9VVAkoNSpIWikKKworI2RlZmluZSBUWF9SSU5HX1NJWkUJMTI4CS8qIFR4IHJpbmcgc2l6ZSAqLworI2RlZmluZSBSWF9SSU5HX1NJWkUJMTI4CS8qIFJ4IHJpbmcgc2l6ZSAqLworI2RlZmluZSBSWF9PRkZTRVQJCTIJLyogc2tiIG9mZnNldCAqLworI2RlZmluZSBFVEhFUlNNQUxMCQk2MAorI2RlZmluZSBQS1RfQlVGX1NaCQkxNTM4CisKKy8qIENoaXAgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFNIX1RTVV9BRERSIDB4QTcwMDA4MDQKKworLyogQ2hpcCBSZWdpc3RlcnMgKi8KKy8qIEUtRE1BQyAqLworI2RlZmluZSBFRE1SCTB4MDAwMAorI2RlZmluZSBFRFRSUgkweDAwMDQKKyNkZWZpbmUgRURSUlIJMHgwMDA4CisjZGVmaW5lIFRETEFSCTB4MDAwQworI2RlZmluZSBSRExBUgkweDAwMTAKKyNkZWZpbmUgRUVTUgkweDAwMTQKKyNkZWZpbmUgRUVTSVBSCTB4MDAxOAorI2RlZmluZSBUUlNDRVIJMHgwMDFDCisjZGVmaW5lIFJNRkNSCTB4MDAyMAorI2RlZmluZSBURlRSCTB4MDAyNAorI2RlZmluZSBGRFIJCTB4MDAyOAorI2RlZmluZSBSTUNSCTB4MDAyQworI2RlZmluZSBFRE9DUgkweDAwMzAKKyNkZWZpbmUgRkNGVFIJMHgwMDM0CisjZGVmaW5lIFJQQURJUgkweDAwMzgKKyNkZWZpbmUgVFJJTUQJMHgwMDNDCisjZGVmaW5lIFJCV0FSCTB4MDA0MAorI2RlZmluZSBSREZBUgkweDAwNDQKKyNkZWZpbmUgVEJSQVIJMHgwMDRDCisjZGVmaW5lIFRERkFSCTB4MDA1MAorLyogRXRoZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUNNUgkweDAxNjAKKyNkZWZpbmUgRUNTUgkweDAxNjQKKyNkZWZpbmUgRUNTSVBSCTB4MDE2OAorI2RlZmluZSBQSVIJCTB4MDE2QworI2RlZmluZSBNQUhSCTB4MDE3MAorI2RlZmluZSBNQUxSCTB4MDE3NAorI2RlZmluZSBSRkxSCTB4MDE3OAorI2RlZmluZSBQU1IJCTB4MDE3QworI2RlZmluZSBUUk9DUgkweDAxODAKKyNkZWZpbmUgQ0RDUgkweDAxODQKKyNkZWZpbmUgTENDUgkweDAxODgKKyNkZWZpbmUgQ05EQ1IJMHgwMThDCisjZGVmaW5lIENFRkNSCTB4MDE5NAorI2RlZmluZSBGUkVDUgkweDAxOTgKKyNkZWZpbmUgVFNGUkNSCTB4MDE5QworI2RlZmluZSBUTEZSQ1IJMHgwMUEwCisjZGVmaW5lIFJGQ1IJMHgwMUE0CisjZGVmaW5lIE1BRkNSCTB4MDFBOAorI2RlZmluZSBJUEdSCTB4MDFCNAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkKKyNkZWZpbmUgQVBSCQkweDAxQjgKKyNkZWZpbmUgTVBSIAkweDAxQkMKKyNkZWZpbmUgVFBBVVNFUiAweDFDNAorI2RlZmluZSBCQ0ZSCTB4MUNDCisjZW5kaWYgLyogQ09ORklHX0NQVV9TSDc3MTAgKi8KKworI2RlZmluZSBBUlNUUgkweDA4MDAKKworLyogVFNVICovCisjZGVmaW5lIFRTVV9DVFJTVAkweDAwNAorI2RlZmluZSBUU1VfRldFTjAJMHgwMTAKKyNkZWZpbmUgVFNVX0ZXRU4xCTB4MDE0CisjZGVmaW5lIFRTVV9GQ00JCTB4MDE4CisjZGVmaW5lIFRTVV9CU1lTTDAJMHgwMjAKKyNkZWZpbmUgVFNVX0JTWVNMMQkweDAyNAorI2RlZmluZSBUU1VfUFJJU0wwCTB4MDI4CisjZGVmaW5lIFRTVV9QUklTTDEJMHgwMkMKKyNkZWZpbmUgVFNVX0ZXU0wwCTB4MDMwCisjZGVmaW5lIFRTVV9GV1NMMQkweDAzNAorI2RlZmluZSBUU1VfRldTTEMJMHgwMzgKKyNkZWZpbmUgVFNVX1FUQUdNMAkweDA0MAorI2RlZmluZSBUU1VfUVRBR00xCTB4MDQ0CisjZGVmaW5lIFRTVV9BRFFUMCAJMHgwNDgKKyNkZWZpbmUgVFNVX0FEUVQxCTB4MDRDCisjZGVmaW5lIFRTVV9GV1NSCTB4MDUwCisjZGVmaW5lIFRTVV9GV0lOTUsJMHgwNTQKKyNkZWZpbmUgVFNVX0FEU0JTWQkweDA2MAorI2RlZmluZSBUU1VfVEVOCQkweDA2NAorI2RlZmluZSBUU1VfUE9TVDEJMHgwNzAKKyNkZWZpbmUgVFNVX1BPU1QyCTB4MDc0CisjZGVmaW5lIFRTVV9QT1NUMwkweDA3OAorI2RlZmluZSBUU1VfUE9TVDQJMHgwN0MKKyNkZWZpbmUgVFhOTENSMAkJMHgwODAKKyNkZWZpbmUgVFhBTENSMAkJMHgwODQKKyNkZWZpbmUgUlhOTENSMAkJMHgwODgKKyNkZWZpbmUgUlhBTENSMAkJMHgwOEMKKyNkZWZpbmUgRldOTENSMAkJMHgwOTAKKyNkZWZpbmUgRldBTENSMAkJMHgwOTQKKyNkZWZpbmUgVFhOTENSMQkJMHgwQTAKKyNkZWZpbmUgVFhBTENSMQkJMHgwQTQKKyNkZWZpbmUgUlhOTENSMQkJMHgwQTgKKyNkZWZpbmUgUlhBTENSMQkJMHgwQUMKKyNkZWZpbmUgRldOTENSMQkJMHgwQjAKKyNkZWZpbmUgRldBTENSMQkJMHgwQjQKKworI2RlZmluZSBUU1VfQURSSDAJMHgwMTAwCisjZGVmaW5lIFRTVV9BRFJMMAkweDAxMDQKKyNkZWZpbmUgVFNVX0FEUkwzMQkweDAxRkMKKworLyogUmVnaXN0ZXIncyBiaXRzICovCisKKy8qIEVETVIgKi8KK2VudW0gRE1BQ19NX0JJVCB7CisJRURNUl9ETDEgPSAweDIwLCBFRE1SX0RMMCA9IDB4MTAsIEVETVJfU1JTVCA9IDB4MDEsCit9OworCisvKiBFRFRSUiAqLworZW51bSBETUFDX1RfQklUIHsKKwlFRFRSUl9UUk5TID0gMHgwMSwKK307CisKKy8qIEVEUlJSKi8KK2VudW0gRURSUlJfUl9CSVQgeworCUVEUlJSX1IgPSAweDAxLAorfTsKKworLyogVFBBVVNFUiAqLworZW51bSBUUEFVU0VSX0JJVCB7CisJVFBBVVNFUl9UUEFVU0UgPSAweDAwMDBmZmZmLAorCVRQQVVTRVJfVU5MSU1JVEVEID0gMCwKK307CisKKy8qIEJDRlIgKi8KK2VudW0gQkNGUl9CSVQgeworCUJDRlJfUlBBVVNFID0gMHgwMDAwZmZmZiwKKwlCQ0ZSX1VOTElNSVRFRCA9IDAsCit9OworCisvKiBQSVIgKi8KK2VudW0gUElSX0JJVCB7CisJUElSX01ESSA9IDB4MDgsIFBJUl9NRE8gPSAweDA0LCBQSVJfTU1EID0gMHgwMiwgUElSX01EQyA9IDB4MDEsCit9OworCisvKiBQU1IgKi8KK2VudW0gUEhZX1NUQVRVU19CSVQgeyBQSFlfU1RfTElOSyA9IDB4MDEsIH07CisKKy8qIEVFU1IgKi8KK2VudW0gRUVTUl9CSVQgeworCUVFU1JfVFdCID0gMHg0MDAwMDAwMCwgRUVTUl9UQUJUID0gMHgwNDAwMDAwMCwKKwlFRVNSX1JBQlQgPSAweDAyMDAwMDAwLCBFRVNSX1JGUk1FUiA9IDB4MDEwMDAwMDAsCisJRUVTUl9BREUgPSAweDAwODAwMDAwLCBFRVNSX0VDSSA9IDB4MDA0MDAwMDAsCisJRUVTUl9GVEMgPSAweDAwMjAwMDAwLCBFRVNSX1RERSA9IDB4MDAxMDAwMDAsCisJRUVTUl9URkUgPSAweDAwMDgwMDAwLCBFRVNSX0ZSQyA9IDB4MDAwNDAwMDAsCisJRUVTUl9SREUgPSAweDAwMDIwMDAwLCBFRVNSX1JGRSA9IDB4MDAwMTAwMDAsCisJRUVTUl9USU5UNCA9IDB4MDAwMDA4MDAsIEVFU1JfVElOVDMgPSAweDAwMDAwNDAwLAorCUVFU1JfVElOVDIgPSAweDAwMDAwMjAwLCBFRVNSX1RJTlQxID0gMHgwMDAwMDEwMCwKKwlFRVNSX1JJTlQ4ID0gMHgwMDAwMDA4MCwgRUVTUl9SSU5UNSA9IDB4MDAwMDAwMTAsCisJRUVTUl9SSU5UNCA9IDB4MDAwMDAwMDgsIEVFU1JfUklOVDMgPSAweDAwMDAwMDA0LAorCUVFU1JfUklOVDIgPSAweDAwMDAwMDAyLCBFRVNSX1JJTlQxID0gMHgwMDAwMDAwMSwKK307CisKKyNkZWZpbmUgRUVTUl9FUlJfQ0hFQ0sJKEVFU1JfVFdCIHwgRUVTUl9UQUJUIHwgRUVTUl9SQUJUIHwgRUVTUl9SREUgXAorCQl8IEVFU1JfUkZSTUVSIHwgRUVTUl9BREUgfCBFRVNSX1RGRSB8IEVFU1JfVERFIHwgRUVTUl9FQ0kpCisKKy8qIEVFU0lQUiAqLworZW51bSBETUFDX0lNX0JJVCB7CisJRE1BQ19NX1RXQiA9IDB4NDAwMDAwMDAsIERNQUNfTV9UQUJUID0gMHgwNDAwMDAwMCwKKwlETUFDX01fUkFCVCA9IDB4MDIwMDAwMDAsCisJRE1BQ19NX1JGUk1FUiA9IDB4MDEwMDAwMDAsIERNQUNfTV9BREYgPSAweDAwODAwMDAwLAorCURNQUNfTV9FQ0kgPSAweDAwNDAwMDAwLCBETUFDX01fRlRDID0gMHgwMDIwMDAwMCwKKwlETUFDX01fVERFID0gMHgwMDEwMDAwMCwgRE1BQ19NX1RGRSA9IDB4MDAwODAwMDAsCisJRE1BQ19NX0ZSQyA9IDB4MDAwNDAwMDAsIERNQUNfTV9SREUgPSAweDAwMDIwMDAwLAorCURNQUNfTV9SRkUgPSAweDAwMDEwMDAwLCBETUFDX01fVElOVDQgPSAweDAwMDAwODAwLAorCURNQUNfTV9USU5UMyA9IDB4MDAwMDA0MDAsIERNQUNfTV9USU5UMiA9IDB4MDAwMDAyMDAsCisJRE1BQ19NX1RJTlQxID0gMHgwMDAwMDEwMCwgRE1BQ19NX1JJTlQ4ID0gMHgwMDAwMDA4MCwKKwlETUFDX01fUklOVDUgPSAweDAwMDAwMDEwLCBETUFDX01fUklOVDQgPSAweDAwMDAwMDA4LAorCURNQUNfTV9SSU5UMyA9IDB4MDAwMDAwMDQsIERNQUNfTV9SSU5UMiA9IDB4MDAwMDAwMDIsCisJRE1BQ19NX1JJTlQxID0gMHgwMDAwMDAwMSwKK307CisKKy8qIFJlY2VpdmUgZGVzY3JpcHRvciBiaXQgKi8KK2VudW0gUkRfU1RTX0JJVCB7CisJUkRfUkFDVCA9IDB4ODAwMDAwMDAsIFJDX1JERUwgPSAweDQwMDAwMDAwLAorCVJDX1JGUDEgPSAweDIwMDAwMDAwLCBSQ19SRlAwID0gMHgxMDAwMDAwMCwKKwlSRF9SRkUgPSAweDA4MDAwMDAwLCBSRF9SRlMxMCA9IDB4MDAwMDAyMDAsCisJUkRfUkZTOSA9IDB4MDAwMDAxMDAsIFJEX1JGUzggPSAweDAwMDAwMDgwLAorCVJEX1JGUzcgPSAweDAwMDAwMDQwLCBSRF9SRlM2ID0gMHgwMDAwMDAyMCwKKwlSRF9SRlM1ID0gMHgwMDAwMDAxMCwgUkRfUkZTNCA9IDB4MDAwMDAwMDgsCisJUkRfUkZTMyA9IDB4MDAwMDAwMDQsIFJEX1JGUzIgPSAweDAwMDAwMDAyLAorCVJEX1JGUzEgPSAweDAwMDAwMDAxLAorfTsKKyNkZWZpbmUgUkRGMVNUCVJDX1JGUDEKKyNkZWZpbmUgUkRGRU5ECVJDX1JGUDAKKyNkZWZpbmUgUkRfUkZQCShSQ19SRlAxfFJDX1JGUDApCisKKy8qIEZDRlRSICovCitlbnVtIEZDRlRSX0JJVCB7CisJRkNGVFJfUkZGMiA9IDB4MDAwNDAwMDAsIEZDRlRSX1JGRjEgPSAweDAwMDIwMDAwLAorCUZDRlRSX1JGRjAgPSAweDAwMDEwMDAwLCBGQ0ZUUl9SRkQyID0gMHgwMDAwMDAwNCwKKwlGQ0ZUUl9SRkQxID0gMHgwMDAwMDAwMiwgRkNGVFJfUkZEMCA9IDB4MDAwMDAwMDEsCit9OworI2RlZmluZSBGSUZPX0ZfRF9SRkYJKEZDRlRSX1JGRjJ8RkNGVFJfUkZGMXxGQ0ZUUl9SRkYwKQorI2RlZmluZSBGSUZPX0ZfRF9SRkQJKEZDRlRSX1JGRDJ8RkNGVFJfUkZEMXxGQ0ZUUl9SRkQwKQorCisvKiBUcmFuc2ZlciBkZXNjcmlwdG9yIGJpdCAqLworZW51bSBURF9TVFNfQklUIHsKKwlURF9UQUNUID0gMHg4MDAwMDAwMCwgVERfVERMRSA9IDB4NDAwMDAwMDAsIFREX1RGUDEgPSAweDIwMDAwMDAwLAorCVREX1RGUDAgPSAweDEwMDAwMDAwLAorfTsKKyNkZWZpbmUgVERGMVNUCVREX1RGUDEKKyNkZWZpbmUgVERGRU5ECVREX1RGUDAKKyNkZWZpbmUgVERfVEZQCShURF9URlAxfFREX1RGUDApCisKKy8qIFJNQ1IgKi8KK2VudW0gUkVDVl9SU1RfQklUIHsgUk1DUl9SU1QgPSAweDAxLCB9OworLyogRUNNUiAqLworZW51bSBGRUxJQ19NT0RFX0JJVCB7CisJRUNNUl9aUEYgPSAweDAwMDgwMDAwLCBFQ01SX1BGUiA9IDB4MDAwNDAwMDAsIEVDTVJfUlhGID0gMHgwMDAyMDAwMCwKKwlFQ01SX1RYRiA9IDB4MDAwMTAwMDAsIEVDTVJfTUNUID0gMHgwMDAwMjAwMCwgRUNNUl9QUkNFRiA9IDB4MDAwMDEwMDAsCisJRUNNUl9QTURFID0gMHgwMDAwMDIwMCwgRUNNUl9SRSA9IDB4MDAwMDAwNDAsIEVDTVJfVEUgPSAweDAwMDAwMDIwLAorCUVDTVJfSUxCID0gMHgwMDAwMDAwOCwgRUNNUl9FTEIgPSAweDAwMDAwMDA0LCBFQ01SX0RNID0gMHgwMDAwMDAwMiwKKwlFQ01SX1BSTSA9IDB4MDAwMDAwMDEsCit9OworCisvKiBFQ1NSICovCitlbnVtIEVDU1JfU1RBVFVTX0JJVCB7CisJRUNTUl9CUkNSWCA9IDB4MjAsIEVDU1JfUFNSVE8gPSAweDEwLCBFQ1NSX0xDSE5HID0gMHgwNCwKKwlFQ1NSX01QRCA9IDB4MDIsIEVDU1JfSUNEID0gMHgwMSwKK307CisKKy8qIEVDU0lQUiAqLworZW51bSBFQ1NJUFJfU1RBVFVTX01BU0tfQklUIHsKKwlFQ1NJUFJfQlJDUlhJUCA9IDB4MjAsIEVDU0lQUl9QU1JUT0lQID0gMHgxMCwgRUNTSVBSX0xDSE5HSVAgPSAweDA0LAorCUVDU0lQUl9NUERJUCA9IDB4MDIsIEVDU0lQUl9JQ0RJUCA9IDB4MDEsCit9OworCisvKiBBUFIgKi8KK2VudW0gQVBSX0JJVCB7CisJQVBSX0FQID0gMHgwMDAwMDAwMSwKK307CisKKy8qIE1QUiAqLworZW51bSBNUFJfQklUIHsKKwlNUFJfTVAgPSAweDAwMDAwMDAxLAorfTsKKworLyogVFJTQ0VSICovCitlbnVtIERFU0NfSV9CSVQgeworCURFU0NfSV9USU5UNCA9IDB4MDgwMCwgREVTQ19JX1RJTlQzID0gMHgwNDAwLCBERVNDX0lfVElOVDIgPSAweDAyMDAsCisJREVTQ19JX1RJTlQxID0gMHgwMTAwLCBERVNDX0lfUklOVDggPSAweDAwODAsIERFU0NfSV9SSU5UNSA9IDB4MDAxMCwKKwlERVNDX0lfUklOVDQgPSAweDAwMDgsIERFU0NfSV9SSU5UMyA9IDB4MDAwNCwgREVTQ19JX1JJTlQyID0gMHgwMDAyLAorCURFU0NfSV9SSU5UMSA9IDB4MDAwMSwKK307CisKKy8qIFJQQURJUiAqLworZW51bSBSUEFESVJfQklUIHsKKwlSUEFESVJfUEFEUzEgPSAweDIwMDAwLCBSUEFESVJfUEFEUzAgPSAweDEwMDAwLAorCVJQQURJUl9QQURSID0gMHgwMDAzZiwKK307CisKKy8qIEZEUiAqLworZW51bSBGSUZPX1NJWkVfQklUIHsKKwlGSUZPX1NJWkVfVCA9IDB4MDAwMDA3MDAsIEZJRk9fU0laRV9SID0gMHgwMDAwMDAwNywKK307CitlbnVtIHBoeV9vZmZzZXRzIHsKKwlQSFlfQ1RSTCA9IDAsIFBIWV9TVEFUID0gMSwgUEhZX0lEVDEgPSAyLCBQSFlfSURUMiA9IDMsCisJUEhZX0FOQSA9IDQsIFBIWV9BTkwgPSA1LCBQSFlfQU5FID0gNiwKKwlQSFlfMTYgPSAxNiwKK307CisKKy8qIFBIWV9DVFJMICovCitlbnVtIFBIWV9DVFJMX0JJVCB7CisJUEhZX0NfUkVTRVQgPSAweDgwMDAsIFBIWV9DX0xPT1BCSyA9IDB4NDAwMCwgUEhZX0NfU1BFRURTTCA9IDB4MjAwMCwKKwlQSFlfQ19BTkVHRU4gPSAweDEwMDAsIFBIWV9DX1BXUkROID0gMHgwODAwLCBQSFlfQ19JU08gPSAweDA0MDAsCisJUEhZX0NfUkFORUcgPSAweDAyMDAsIFBIWV9DX0RVUExFWCA9IDB4MDEwMCwgUEhZX0NfQ09MVCA9IDB4MDA4MCwKK307CisjZGVmaW5lIERNOTE2MV9QSFlfQ19BTkVHRU4gMAkvKiBhdXRvIG5lZ28gc3BlY2lhbCAqLworCisvKiBQSFlfU1RBVCAqLworZW51bSBQSFlfU1RBVF9CSVQgeworCVBIWV9TXzEwMFQ0ID0gMHg4MDAwLCBQSFlfU18xMDBYX0YgPSAweDQwMDAsIFBIWV9TXzEwMFhfSCA9IDB4MjAwMCwKKwlQSFlfU18xMFRfRiA9IDB4MTAwMCwgUEhZX1NfMTBUX0ggPSAweDA4MDAsIFBIWV9TX0FORUdDID0gMHgwMDIwLAorCVBIWV9TX1JGQVVMVCA9IDB4MDAxMCwgUEhZX1NfQU5FR0EgPSAweDAwMDgsIFBIWV9TX0xJTksgPSAweDAwMDQsCisJUEhZX1NfSkFCID0gMHgwMDAyLCBQSFlfU19FWFREID0gMHgwMDAxLAorfTsKKworLyogUEhZX0FOQSAqLworZW51bSBQSFlfQU5BX0JJVCB7CisJUEhZX0FfTlAgPSAweDgwMDAsIFBIWV9BX0FDSyA9IDB4NDAwMCwgUEhZX0FfUkYgPSAweDIwMDAsCisJUEhZX0FfRkNTID0gMHgwNDAwLCBQSFlfQV9UNCA9IDB4MDIwMCwgUEhZX0FfRkRYID0gMHgwMTAwLAorCVBIWV9BX0hEWCA9IDB4MDA4MCwgUEhZX0FfMTBGRFggPSAweDAwNDAsIFBIWV9BXzEwSERYID0gMHgwMDIwLAorCVBIWV9BX1NFTCA9IDB4MDAxZiwKK307CisvKiBQSFlfQU5MICovCitlbnVtIFBIWV9BTkxfQklUIHsKKwlQSFlfTF9OUCA9IDB4ODAwMCwgUEhZX0xfQUNLID0gMHg0MDAwLCBQSFlfTF9SRiA9IDB4MjAwMCwKKwlQSFlfTF9GQ1MgPSAweDA0MDAsIFBIWV9MX1Q0ID0gMHgwMjAwLCBQSFlfTF9GRFggPSAweDAxMDAsCisJUEhZX0xfSERYID0gMHgwMDgwLCBQSFlfTF8xMEZEWCA9IDB4MDA0MCwgUEhZX0xfMTBIRFggPSAweDAwMjAsCisJUEhZX0xfU0VMID0gMHgwMDFmLAorfTsKKworLyogUEhZX0FORSAqLworZW51bSBQSFlfQU5FX0JJVCB7CisJUEhZX0VfUERGID0gMHgwMDEwLCBQSFlfRV9MUE5QQSA9IDB4MDAwOCwgUEhZX0VfTlBBID0gMHgwMDA0LAorCVBIWV9FX1BSWCA9IDB4MDAwMiwgUEhZX0VfTFBBTkVHQSA9IDB4MDAwMSwKK307CisKKy8qIERNOTE2MSAqLworZW51bSBQSFlfMTZfQklUIHsKKwlQSFlfMTZfQlA0QjQ1ID0gMHg4MDAwLCBQSFlfMTZfQlBTQ1IgPSAweDQwMDAsIFBIWV8xNl9CUEFMSUdOID0gMHgyMDAwLAorCVBIWV8xNl9CUF9BRFBPSyA9IDB4MTAwMCwgUEhZXzE2X1JlcGVhdG1vZGUgPSAweDA4MDAsCisJUEhZXzE2X1RYc2VsZWN0ID0gMHgwNDAwLAorCVBIWV8xNl9Sc3ZkID0gMHgwMjAwLCBQSFlfMTZfUk1JSUVuYWJsZSA9IDB4MDEwMCwKKwlQSFlfMTZfRm9yY2UxMDBMTksgPSAweDAwODAsCisJUEhZXzE2X0FQRExFRF9DVEwgPSAweDAwNDAsIFBIWV8xNl9DT0xMRURfQ1RMID0gMHgwMDIwLAorCVBIWV8xNl9SUERDVFJfRU4gPSAweDAwMTAsCisJUEhZXzE2X1Jlc2V0U3RNY2ggPSAweDAwMDgsIFBIWV8xNl9QcmVhbVN1cHIgPSAweDAwMDQsCisJUEhZXzE2X1NsZWVwbW9kZSA9IDB4MDAwMiwKKwlQSFlfMTZfUmVtb3RlTG9vcE91dCA9IDB4MDAwMSwKK307CisKKyNkZWZpbmUgUE9TVF9SWAkJMHgwOAorI2RlZmluZSBQT1NUX0ZXCQkweDA0CisjZGVmaW5lIFBPU1QwX1JYCShQT1NUX1JYKQorI2RlZmluZSBQT1NUMF9GVwkoUE9TVF9GVykKKyNkZWZpbmUgUE9TVDFfUlgJKFBPU1RfUlggPj4gMikKKyNkZWZpbmUgUE9TVDFfRlcJKFBPU1RfRlcgPj4gMikKKyNkZWZpbmUgUE9TVF9BTEwJKFBPU1QwX1JYIHwgUE9TVDBfRlcgfCBQT1NUMV9SWCB8IFBPU1QxX0ZXKQorCisvKiBBUlNUUiAqLworZW51bSBBUlNUUl9CSVQgeyBBUlNUUl9BUlNUUiA9IDB4MDAwMDAwMDEsIH07CisKKy8qIFRTVV9GV0VOMCAqLworZW51bSBUU1VfRldFTjBfQklUIHsKKwlUU1VfRldFTjBfMCA9IDB4MDAwMDAwMDEsCit9OworCisvKiBUU1VfQURTQlNZICovCitlbnVtIFRTVV9BRFNCU1lfQklUIHsKKwlUU1VfQURTQlNZXzAgPSAweDAwMDAwMDAxLAorfTsKKworLyogVFNVX1RFTiAqLworZW51bSBUU1VfVEVOX0JJVCB7CisJVFNVX1RFTl8wID0gMHg4MDAwMDAwMCwKK307CisKKy8qIFRTVV9GV1NMMCAqLworZW51bSBUU1VfRldTTDBfQklUIHsKKwlUU1VfRldTTDBfRlc1MCA9IDB4MTAwMCwgVFNVX0ZXU0wwX0ZXNDAgPSAweDA4MDAsCisJVFNVX0ZXU0wwX0ZXMzAgPSAweDA0MDAsIFRTVV9GV1NMMF9GVzIwID0gMHgwMjAwLAorCVRTVV9GV1NMMF9GVzEwID0gMHgwMTAwLCBUU1VfRldTTDBfUk1TQTAgPSAweDAwMTAsCit9OworCisvKiBUU1VfRldTTEMgKi8KK2VudW0gVFNVX0ZXU0xDX0JJVCB7CisJVFNVX0ZXU0xDX1BPU1RFTlUgPSAweDIwMDAsIFRTVV9GV1NMQ19QT1NURU5MID0gMHgxMDAwLAorCVRTVV9GV1NMQ19DQU1TRUwwMyA9IDB4MDA4MCwgVFNVX0ZXU0xDX0NBTVNFTDAyID0gMHgwMDQwLAorCVRTVV9GV1NMQ19DQU1TRUwwMSA9IDB4MDAyMCwgVFNVX0ZXU0xDX0NBTVNFTDAwID0gMHgwMDEwLAorCVRTVV9GV1NMQ19DQU1TRUwxMyA9IDB4MDAwOCwgVFNVX0ZXU0xDX0NBTVNFTDEyID0gMHgwMDA0LAorCVRTVV9GV1NMQ19DQU1TRUwxMSA9IDB4MDAwMiwgVFNVX0ZXU0xDX0NBTVNFTDEwID0gMHgwMDAxLAorfTsKKworLyoKKyAqIFRoZSBzaCBldGhlciBUeCBidWZmZXIgZGVzY3JpcHRvcnMuCisgKiBUaGlzIHN0cnVjdHVyZSBzaG91bGQgYmUgMjAgYnl0ZXMuCisgKi8KK3N0cnVjdCBzaF9ldGhfdHhkZXNjIHsKKwl1MzIgc3RhdHVzOwkJLyogVEQwICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pCisJdTE2IHBhZDA7CQkvKiBURDEgKi8KKwl1MTYgYnVmZmVyX2xlbmd0aDsJLyogVEQxICovCisjZWxzZQorCXUxNiBidWZmZXJfbGVuZ3RoOwkvKiBURDEgKi8KKwl1MTYgcGFkMDsJCS8qIFREMSAqLworI2VuZGlmCisJdTMyIGFkZHI7CQkvKiBURDIgKi8KKwl1MzIgcGFkMTsJCS8qIHBhZGRpbmcgZGF0YSAqLworfTsKKworLyoKKyAqIFRoZSBzaCBldGhlciBSeCBidWZmZXIgZGVzY3JpcHRvcnMuCisgKiBUaGlzIHN0cnVjdHVyZSBzaG91bGQgYmUgMjAgYnl0ZXMuCisgKi8KK3N0cnVjdCBzaF9ldGhfcnhkZXNjIHsKKwl1MzIgc3RhdHVzOwkJLyogUkQwICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pCisJdTE2IGZyYW1lX2xlbmd0aDsJLyogUkQxICovCisJdTE2IGJ1ZmZlcl9sZW5ndGg7CS8qIFJEMSAqLworI2Vsc2UKKwl1MTYgYnVmZmVyX2xlbmd0aDsJLyogUkQxICovCisJdTE2IGZyYW1lX2xlbmd0aDsJLyogUkQxICovCisjZW5kaWYKKwl1MzIgYWRkcjsJCS8qIFJEMiAqLworCXUzMiBwYWQwOwkJLyogcGFkZGluZyBkYXRhICovCit9OworCitzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgeworCWRtYV9hZGRyX3QgcnhfZGVzY19kbWE7CisJZG1hX2FkZHJfdCB0eF9kZXNjX2RtYTsKKwlzdHJ1Y3Qgc2hfZXRoX3J4ZGVzYyAqcnhfcmluZzsKKwlzdHJ1Y3Qgc2hfZXRoX3R4ZGVzYyAqdHhfcmluZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYnVmZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnR4X3NrYnVmZjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzcGlubG9ja190IGxvY2s7CisJdTMyIGN1cl9yeCwgZGlydHlfcng7CS8qIFByb2R1Y2VyL2NvbnN1bWVyIHJpbmcgaW5kaWNlcyAqLworCXUzMiBjdXJfdHgsIGRpcnR5X3R4OworCXUzMiByeF9idWZfc3o7CQkvKiBCYXNlZCBvbiBNVFUrc2xhY2suICovCisJLyogTUlJIHRyYW5zY2VpdmVyIHNlY3Rpb24uICovCisJdTMyIHBoeV9pZDsJCQkJCS8qIFBIWSBJRCAqLworCXN0cnVjdCBtaWlfYnVzICptaWlfYnVzOwkvKiBNRElPIGJ1cyBjb250cm9sICovCisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsJLyogUEhZIGRldmljZSBjb250cm9sICovCisJZW51bSBwaHlfc3RhdGUgbGluazsKKwlpbnQgbXNnX2VuYWJsZTsKKwlpbnQgc3BlZWQ7CisJaW50IGR1cGxleDsKKwl1MzIgcnhfaW50X3ZhciwgdHhfaW50X3ZhcjsJLyogaW50ZXJydXB0IGNvbnRyb2wgdmFyaWFibGVzICovCisJY2hhciBwb3N0X3J4OwkJLyogUE9TVCByZWNlaXZlICovCisJY2hhciBwb3N0X2Z3OwkJLyogUE9TVCBmb3J3YXJkICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgdHN1X3N0YXRzOwkvKiBUU1UgZm9yd2FyZCBzdGF0dXMgKi8KK307CisKK3N0YXRpYyB2b2lkIHN3YXBzKGNoYXIgKnNyYywgaW50IGxlbikKK3sKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCXUzMiAqcCA9ICh1MzIgKilzcmM7CisJdTMyICptYXhwOworCW1heHAgPSBwICsgKChsZW4gKyBzaXplb2YodTMyKSAtIDEpIC8gc2l6ZW9mKHUzMikpOworCisJZm9yICg7IHAgPCBtYXhwOyBwKyspCisJCSpwID0gc3dhYjMyKCpwKTsKKyNlbmRpZgorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczE5MC5jIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKaW5kZXggYWJjNjNiMC4uM2ZlMDE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzMTkwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKQEAgLTE2NTYsNyArMTY1Niw3IEBACiAJU0lTX1BDSV9DT01NSVQoKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgc2lzMTkwX2dldF9tYWNfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaXMxOTBfZ2V0X21hY19hZGRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IGVjOTVlNDkzLi5mYTNhNDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMTc2Niw3ICsxNzY2LDcgQEAKIAkJCQlza2IgPSBzaXNfcHJpdi0+cnhfc2tidWZmW2VudHJ5XTsKIAkJCQluZXRfZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJZ290byByZWZpbGxfcnhfcmluZzsKLQkJCX0JCisJCQl9CiAKIAkJCS8qIFRoaXMgc2l0dWF0aW9uIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBkdWUgdG8KIAkJCSAgIHNvbWUgdW5rbm93IGJ1Z3MsIGl0IGlzIHBvc3NpYmxlIHRoYXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCBjOGE1ZWYyLi43MTFlNGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSAic2t5Mi5oIgogCiAjZGVmaW5lIERSVl9OQU1FCQkic2t5MiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjIxIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMjIiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICIgIgogCiAvKgpAQCAtOTgsNyArOTgsNyBAQAogbW9kdWxlX3BhcmFtKGRpc2FibGVfbXNpLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX21zaSwgIkRpc2FibGUgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHQgKE1TSSkiKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNreTJfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShza3kyX2lkX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCAweDkwMDApIH0sIC8qIFNLLTlTeHggKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCAweDlFMDApIH0sIC8qIFNLLTlFeHggKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0YjAwKSB9LAkvKiBER0UtNTYwVCAqLwpAQCAtMTM3LDYgKzEzNyw3IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzZDKSB9LCAvKiA4OEU4MDcyICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzZEKSB9LCAvKiA4OEU4MDU1ICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzcwKSB9LCAvKiA4OEU4MDc1ICovCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzgwKSB9LCAvKiA4OEU4MDU3ICovCiAJeyAwIH0KIH07CiAKQEAgLTE0NywxNyArMTQ4LDYgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCByeHFhZGRyW10gPSB7IFFfUjEsIFFfUjIgfTsKIHN0YXRpYyBjb25zdCB1MzIgcG9ydGlycV9tc2tbXSA9IHsgWTJfSVNfUE9SVF8xLCBZMl9JU19QT1JUXzIgfTsKIAotLyogVGhpcyBkcml2ZXIgc3VwcG9ydHMgeXVrb24yIGNoaXBzZXQgb25seSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnl1a29uMl9uYW1lW10gPSB7Ci0JIlhMIiwJCS8qIDB4YjMgKi8KLQkiRUMgVWx0cmEiLCAJLyogMHhiNCAqLwotCSJFeHRyZW1lIiwJLyogMHhiNSAqLwotCSJFQyIsCQkvKiAweGI2ICovCi0JIkZFIiwJCS8qIDB4YjcgKi8KLQkiRkUrIiwJCS8qIDB4YjggKi8KLQkiU3VwcmVtZSIsCS8qIDB4YjkgKi8KLX07Ci0KIHN0YXRpYyB2b2lkIHNreTJfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogQWNjZXNzIHRvIFBIWSB2aWEgc2VyaWFsIGludGVyY29ubmVjdCAqLwpAQCAtMjg1LDYgKzI3NSw4NiBAQAogCQkJICAgICBQQ19WQVVYX09OIHwgUENfVkNDX09GRikpOwogfQogCitzdGF0aWMgdm9pZCBza3kyX3Bvd2VyX3N0YXRlKHN0cnVjdCBza3kyX2h3ICpodywgcGNpX3Bvd2VyX3Qgc3RhdGUpCit7CisJdTE2IHBvd2VyX2NvbnRyb2wgPSBza3kyX3BjaV9yZWFkMTYoaHcsIGh3LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCk7CisJaW50IHBleCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoaHctPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwl1MzIgcmVnOworCisJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQQ0lfRDA6CisJCWJyZWFrOworCisJY2FzZSBQQ0lfRDE6CisJCXBvd2VyX2NvbnRyb2wgfD0gMTsKKwkJYnJlYWs7CisKKwljYXNlIFBDSV9EMjoKKwkJcG93ZXJfY29udHJvbCB8PSAyOworCQlicmVhazsKKworCWNhc2UgUENJX0QzaG90OgorCWNhc2UgUENJX0QzY29sZDoKKwkJcG93ZXJfY29udHJvbCB8PSAzOworCQlpZiAoaHctPmZsYWdzICYgU0tZMl9IV19BRFZfUE9XRVJfQ1RMKSB7CisJCQkvKiBhZGRpdGlvbmFsIHBvd2VyIHNhdmluZyBtZWFzdXJlbWVudHMgKi8KKwkJCXJlZyA9IHNreTJfcGNpX3JlYWQzMihodywgUENJX0RFVl9SRUc0KTsKKworCQkJLyogc2V0IGdhdGluZyBjb3JlIGNsb2NrIGZvciBMVFNTTSBpbiBMMSBzdGF0ZSAqLworCQkJcmVnIHw9IFBfUEVYX0xUU1NNX1NUQVQoUF9QRVhfTFRTU01fTDFfU1RBVCkgfAorCQkJCS8qIGF1dG8gY2xvY2sgZ2F0ZWQgc2NoZW1lIGNvbnRyb2xsZWQgYnkgQ0xLUkVRICovCisJCQkJUF9BU1BNX0ExX01PREVfU0VMRUNUIHwKKwkJCQkvKiBlbmFibGUgR2F0ZSBSb290IENvcmUgQ2xvY2sgKi8KKwkJCQlQX0NMS19HQVRFX1JPT1RfQ09SX0VOQTsKKworCQkJaWYgKHBleCAmJiAoaHctPmZsYWdzICYgU0tZMl9IV19DTEtfUE9XRVIpKSB7CisJCQkJLyogZW5hYmxlIENsb2NrIFBvd2VyIE1hbmFnZW1lbnQgKENMS1JFUSkgKi8KKwkJCQl1MTYgY3RybCA9IHNreTJfcGNpX3JlYWQxNihodywgcGV4ICsgUENJX0VYUF9ERVZDVEwpOworCisJCQkJY3RybCB8PSBQQ0lfRVhQX0RFVkNUTF9BVVhfUE1FOworCQkJCXNreTJfcGNpX3dyaXRlMTYoaHcsIHBleCArIFBDSV9FWFBfREVWQ1RMLCBjdHJsKTsKKwkJCX0gZWxzZQorCQkJCS8qIGZvcmNlIENMS1JFUSBFbmFibGUgaW4gT3VyNCAoQTFiIG9ubHkpICovCisJCQkJcmVnIHw9IFBfQVNQTV9GT1JDRV9DTEtSRVFfRU5BOworCisJCQkvKiBzZXQgTWFzayBSZWdpc3RlciBmb3IgUmVsZWFzZS9HYXRlIENsb2NrICovCisJCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzUsCisJCQkJCSBQX1JFTF9QQ0lFX0VYSVRfTDFfU1QgfCBQX0dBVF9QQ0lFX0VOVEVSX0wxX1NUIHwKKwkJCQkJIFBfUkVMX1BDSUVfUlhfRVhfSURMRSB8IFBfR0FUX1BDSUVfUlhfRUxfSURMRSB8CisJCQkJCSBQX1JFTF9HUEhZX0xJTktfVVAgfCBQX0dBVF9HUEhZX0xJTktfRE9XTik7CisJCX0gZWxzZQorCQkJc2t5Ml93cml0ZTgoaHcsIEIyOF9ZMl9BU0ZfU1RBVF9DTUQsIFkyX0FTRl9DTEtfSEFMVCk7CisKKwkJLyogcHV0IENQVSBpbnRvIHJlc2V0IHN0YXRlICovCisJCXNreTJfd3JpdGU4KGh3LCAgQjI4X1kyX0FTRl9TVEFUX0NNRCwgSENVX0NDU1JfQVNGX1JFU0VUKTsKKwkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fU1VQUiAmJiBody0+Y2hpcF9yZXYgPT0gQ0hJUF9SRVZfWVVfU1VfQTApCisJCQkvKiBwdXQgQ1BVIGludG8gaGFsdCBzdGF0ZSAqLworCQkJc2t5Ml93cml0ZTgoaHcsIEIyOF9ZMl9BU0ZfU1RBVF9DTUQsIEhDVV9DQ1NSX0FTRl9IQUxURUQpOworCisJCWlmIChwZXggJiYgIShody0+ZmxhZ3MgJiBTS1kyX0hXX1JBTV9CVUZGRVIpKSB7CisJCQlyZWcgPSBza3kyX3BjaV9yZWFkMzIoaHcsIFBDSV9ERVZfUkVHMSk7CisJCQkvKiBmb3JjZSB0byBQQ0llIEwxICovCisJCQlyZWcgfD0gUENJX0ZPUkNFX1BFWF9MMTsKKwkJCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBDSV9ERVZfUkVHMSwgcmVnKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl93YXJuKCZody0+cGRldi0+ZGV2LCBQRlggIkludmFsaWQgcG93ZXIgc3RhdGUgKCVkKSAiLAorCQkgICAgICAgc3RhdGUpOworCQlyZXR1cm47CisJfQorCisJcG93ZXJfY29udHJvbCB8PSBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFOworCS8qIEZpbmFsbHksIHNldCB0aGUgbmV3IHBvd2VyIHN0YXRlLiAqLworCXNreTJfcGNpX3dyaXRlMzIoaHcsIGh3LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgcG93ZXJfY29udHJvbCk7CisKKwlza3kyX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09GRik7CisJc2t5Ml9wY2lfcmVhZDMyKGh3LCBCMF9DVFNUKTsKK30KKwogc3RhdGljIHZvaWQgc2t5Ml9nbWFjX3Jlc2V0KHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKIHsKIAl1MTYgcmVnOwpAQCAtNTc5LDggKzY0OSw3IEBACiAJCWxlZG92ZXIgfD0gUEhZX01fTEVEX01PX1JYKE1PX0xFRF9PRkYpOwogCX0KIAotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UgJiYKLQkgICAgaHctPmNoaXBfcmV2ID09IENISVBfUkVWX1lVX0VDX1VfQTEpIHsKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VIHx8IGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fVUxfMikgewogCQkvKiBhcHBseSBmaXhlcyBpbiBQSFkgQUZFICovCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMjU1KTsKIApAQCAtNTg4LDkgKzY1NywxMSBAQAogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDB4MTgsIDB4YWE5OSk7CiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMHgxNywgMHgyMDExKTsKIAotCQkvKiBmaXggZm9yIElFRUUgQS9CIFN5bW1ldHJ5IGZhaWx1cmUgaW4gMTAwMEJBU0UtVCAqLwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDB4MTgsIDB4YTIwNCk7Ci0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgMHgxNywgMHgyMDAyKTsKKwkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkgeworCQkJLyogZml4IGZvciBJRUVFIEEvQiBTeW1tZXRyeSBmYWlsdXJlIGluIDEwMDBCQVNFLVQgKi8KKwkJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMHgxOCwgMHhhMjA0KTsKKwkJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMHgxNywgMHgyMDAyKTsKKwkJfQogCiAJCS8qIHNldCBwYWdlIHJlZ2lzdGVyIHRvIDAgKi8KIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCAwKTsKQEAgLTU5OSw3ICs2NzAsOCBAQAogCQkvKiBhcHBseSB3b3JrYXJvdW5kIGZvciBpbnRlZ3JhdGVkIHJlc2lzdG9ycyBjYWxpYnJhdGlvbiAqLwogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BBR0VfQUREUiwgMTcpOwogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BBR0VfREFUQSwgMHgzZjYwKTsKLQl9IGVsc2UgaWYgKGh3LT5jaGlwX2lkICE9IENISVBfSURfWVVLT05fRVgpIHsKKwl9IGVsc2UgaWYgKGh3LT5jaGlwX2lkICE9IENISVBfSURfWVVLT05fRVggJiYKKwkJICAgaHctPmNoaXBfaWQgPCBDSElQX0lEX1lVS09OX1NVUFIpIHsKIAkJLyogbm8gZWZmZWN0IG9uIFl1a29uLVhMICovCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfTEVEX0NUUkwsIGxlZGN0cmwpOwogCkBAIC02MjAsMjggKzY5Miw3MSBAQAogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0lOVF9NQVNLLCBQSFlfTV9ERUZfTVNLKTsKIH0KIAotc3RhdGljIHZvaWQgc2t5Ml9waHlfcG93ZXIoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0LCBpbnQgb25vZmYpCitzdGF0aWMgY29uc3QgdTMyIHBoeV9wb3dlcltdID0geyBQQ0lfWTJfUEhZMV9QT1dELCBQQ0lfWTJfUEhZMl9QT1dEIH07CitzdGF0aWMgY29uc3QgdTMyIGNvbWFfbW9kZVtdID0geyBQQ0lfWTJfUEhZMV9DT01BLCBQQ0lfWTJfUEhZMl9DT01BIH07CisKK3N0YXRpYyB2b2lkIHNreTJfcGh5X3Bvd2VyX3VwKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKIHsKIAl1MzIgcmVnMTsKLQlzdGF0aWMgY29uc3QgdTMyIHBoeV9wb3dlcltdID0geyBQQ0lfWTJfUEhZMV9QT1dELCBQQ0lfWTJfUEhZMl9QT1dEIH07Ci0Jc3RhdGljIGNvbnN0IHUzMiBjb21hX21vZGVbXSA9IHsgUENJX1kyX1BIWTFfQ09NQSwgUENJX1kyX1BIWTJfQ09NQSB9OwogCiAJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7CiAJcmVnMSA9IHNreTJfcGNpX3JlYWQzMihodywgUENJX0RFVl9SRUcxKTsKLQkvKiBUdXJuIG9uL29mZiBwaHkgcG93ZXIgc2F2aW5nICovCi0JaWYgKG9ub2ZmKQotCQlyZWcxICY9IH5waHlfcG93ZXJbcG9ydF07Ci0JZWxzZQotCQlyZWcxIHw9IHBoeV9wb3dlcltwb3J0XTsKKwlyZWcxICY9IH5waHlfcG93ZXJbcG9ydF07CiAKLQlpZiAob25vZmYgJiYgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCAmJiBody0+Y2hpcF9yZXYgPiAxKQorCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMICYmIGh3LT5jaGlwX3JldiA+IDEpCiAJCXJlZzEgfD0gY29tYV9tb2RlW3BvcnRdOwogCiAJc2t5Ml9wY2lfd3JpdGUzMihodywgUENJX0RFVl9SRUcxLCByZWcxKTsKIAlza3kyX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09GRik7CiAJc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzEpOworfQogCi0JdWRlbGF5KDEwMCk7CitzdGF0aWMgdm9pZCBza3kyX3BoeV9wb3dlcl9kb3duKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKK3sKKwl1MzIgcmVnMTsKKwl1MTYgY3RybDsKKworCS8qIHJlbGVhc2UgR1BIWSBDb250cm9sIHJlc2V0ICovCisJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBHUEhZX0NUUkwpLCBHUENfUlNUX0NMUik7CisKKwkvKiByZWxlYXNlIEdNQUMgcmVzZXQgKi8KKwlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdNQUNfQ1RSTCksIEdNQ19SU1RfQ0xSKTsKKworCWlmIChody0+ZmxhZ3MgJiBTS1kyX0hXX05FV0VSX1BIWSkgeworCQkvKiBzZWxlY3QgcGFnZSAyIHRvIGFjY2VzcyBNQUMgY29udHJvbCByZWdpc3RlciAqLworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIDIpOworCisJCWN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwpOworCQkvKiBhbGxvdyBHTUlJIFBvd2VyIERvd24gKi8KKwkJY3RybCAmPSB+UEhZX01fTUFDX0dNSUZfUFVQOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLCBjdHJsKTsKKworCQkvKiBzZXQgcGFnZSByZWdpc3RlciBiYWNrIHRvIDAgKi8KKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCAwKTsKKwl9CisKKwkvKiBzZXR1cCBHZW5lcmFsIFB1cnBvc2UgQ29udHJvbCBSZWdpc3RlciAqLworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLAorCQkgICAgR01fR1BDUl9GTF9QQVNTIHwgR01fR1BDUl9TUEVFRF8xMDAgfCBHTV9HUENSX0FVX0FMTF9ESVMpOworCisJaWYgKGh3LT5jaGlwX2lkICE9IENISVBfSURfWVVLT05fRUMpIHsKKwkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkgeworCQkJY3RybCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCk7CisKKwkJCS8qIGVuYWJsZSBQb3dlciBEb3duICovCisJCQljdHJsIHw9IFBIWV9NX1BDX1BPV19EX0VOQTsKKwkJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIGN0cmwpOworCQl9CisKKwkJLyogc2V0IElFRUUgY29tcGF0aWJsZSBQb3dlciBEb3duIE1vZGUgKGRldi4gIzQuOTkpICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfQ1RSTCwgUEhZX0NUX1BET1dOKTsKKwl9CisKKwlza3kyX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09OKTsKKwlyZWcxID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzEpOworCXJlZzEgfD0gcGh5X3Bvd2VyW3BvcnRdOwkJLyogc2V0IFBIWSB0byBQb3dlckRvd24vQ09NQSBNb2RlICovCisJc2t5Ml9wY2lfd3JpdGUzMihodywgUENJX0RFVl9SRUcxLCByZWcxKTsKKwlza3kyX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09GRik7CiB9CiAKIC8qIEZvcmNlIGEgcmVuZWdvdGlhdGlvbiAqLwpAQCAtNjc2LDggKzc5MSwxMSBAQAogCiAJc2t5Mi0+YWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmfEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpOwogCXNreTItPmZsb3dfbW9kZSA9IEZDX05PTkU7Ci0Jc2t5Ml9waHlfcG93ZXIoaHcsIHBvcnQsIDEpOwotCXNreTJfcGh5X3JlaW5pdChza3kyKTsKKworCXNwaW5fbG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOworCXNreTJfcGh5X3Bvd2VyX3VwKGh3LCBwb3J0KTsKKwlza3kyX3BoeV9pbml0KGh3LCBwb3J0KTsKKwlzcGluX3VubG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwogCiAJc2t5Mi0+Zmxvd19tb2RlID0gc2F2ZV9tb2RlOwogCXNreTItPmFkdmVydGlzaW5nID0gY3RybDsKQEAgLTc4Miw2ICs5MDAsNyBAQAogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19JUlFfTVNLKSwgR01BQ19ERUZfTVNLKTsKIAogCXNwaW5fbG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOworCXNreTJfcGh5X3Bvd2VyX3VwKGh3LCBwb3J0KTsKIAlza3kyX3BoeV9pbml0KGh3LCBwb3J0KTsKIAlzcGluX3VubG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwogCkBAIC0xMzg2LDggKzE1MDUsNiBAQAogCWlmICghc2t5Mi0+cnhfcmluZykKIAkJZ290byBlcnJfb3V0OwogCi0Jc2t5Ml9waHlfcG93ZXIoaHcsIHBvcnQsIDEpOwotCiAJc2t5Ml9tYWNfaW5pdChodywgcG9ydCk7CiAKIAkvKiBSZWdpc3RlciBpcyBudW1iZXIgb2YgNEsgYmxvY2tzIG9uIGludGVybmFsIFJBTSBidWZmZXIuICovCkBAIC0xNzY4LDcgKzE4ODUsNyBAQAogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgUlhfR01GX0NUUkxfVCksIEdNRl9SU1RfU0VUKTsKIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX1NFVCk7CiAKLQlza3kyX3BoeV9wb3dlcihodywgcG9ydCwgMCk7CisJc2t5Ml9waHlfcG93ZXJfZG93bihodywgcG9ydCk7CiAKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCkBAIC0yNjk0LDYgKzI4MTEsNyBAQAogCWNhc2UgQ0hJUF9JRF9ZVUtPTl9FQ19VOgogCWNhc2UgQ0hJUF9JRF9ZVUtPTl9FWDoKIAljYXNlIENISVBfSURfWVVLT05fU1VQUjoKKwljYXNlIENISVBfSURfWVVLT05fVUxfMjoKIAkJcmV0dXJuIDEyNTsKIAogCWNhc2UgQ0hJUF9JRF9ZVUtPTl9GRToKQEAgLTI3NDIsNiArMjg2MCwxMCBAQAogCQlody0+ZmxhZ3MgPSBTS1kyX0hXX0dJR0FCSVQKIAkJCXwgU0tZMl9IV19ORVdFUl9QSFkKIAkJCXwgU0tZMl9IV19BRFZfUE9XRVJfQ1RMOworCisJCS8qIGNoZWNrIGZvciBSZXYuIEExIGRldiA0MjAwICovCisJCWlmIChza3kyX3JlYWQxNihodywgUV9BRERSKFFfWEExLCBRX1dNKSkgPT0gMCkKKwkJCWh3LT5mbGFncyB8PSBTS1kyX0hXX0NMS19QT1dFUjsKIAkJYnJlYWs7CiAKIAljYXNlIENISVBfSURfWVVLT05fRVg6CkBAIC0yNzgyLDYgKzI5MDQsMTEgQEAKIAkJCXwgU0tZMl9IV19BRFZfUE9XRVJfQ1RMOwogCQlicmVhazsKIAorCWNhc2UgQ0hJUF9JRF9ZVUtPTl9VTF8yOgorCQlody0+ZmxhZ3MgPSBTS1kyX0hXX0dJR0FCSVQKKwkJCXwgU0tZMl9IV19BRFZfUE9XRVJfQ1RMOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJmh3LT5wZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBjaGlwIHR5cGUgMHgleFxuIiwKIAkJCWh3LT5jaGlwX2lkKTsKQEAgLTI3OTIsNiArMjkxOSwxMSBAQAogCWlmIChody0+cG1kX3R5cGUgPT0gJ0wnIHx8IGh3LT5wbWRfdHlwZSA9PSAnUycgfHwgaHctPnBtZF90eXBlID09ICdQJykKIAkJaHctPmZsYWdzIHw9IFNLWTJfSFdfRklCUkVfUEhZOwogCisJaHctPnBtX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoaHctPnBkZXYsIFBDSV9DQVBfSURfUE0pOworCWlmIChody0+cG1fY2FwID09IDApIHsKKwkJZGV2X2VycigmaHctPnBkZXYtPmRldiwgImNhbm5vdCBmaW5kIFBvd2VyTWFuYWdlbWVudCBjYXBhYmlsaXR5XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCiAJaHctPnBvcnRzID0gMTsKIAl0OCA9IHNreTJfcmVhZDgoaHcsIEIyX1kyX0hXX1JFUyk7CkBAIC0zMzc5LDcgKzM1MTEsNyBAQAogCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgcGcpOwogCX0gZWxzZQotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9PVkVSLCAKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfT1ZFUiwKIAkJCQkgICAgIFBIWV9NX0xFRF9NT19EVVAobW9kZSkgfAogCQkJCSAgICAgUEhZX01fTEVEX01PXzEwKG1vZGUpIHwKIAkJCQkgICAgIFBIWV9NX0xFRF9NT18xMDAobW9kZSkgfApAQCAtNDEzMiwxMiArNDI2NCwzNCBAQAogCXJldHVybiB2YWx1ZSAmIFBDSV9QTV9DVFJMX1BNRV9FTkFCTEU7CiB9CiAKKy8qIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHl1a29uMiBjaGlwc2V0IG9ubHkgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpza3kyX25hbWUodTggY2hpcGlkLCBjaGFyICpidWYsIGludCBzeikKK3sKKwljb25zdCBjaGFyICpuYW1lW10gPSB7CisJCSJYTCIsCQkvKiAweGIzICovCisJCSJFQyBVbHRyYSIsIAkvKiAweGI0ICovCisJCSJFeHRyZW1lIiwJLyogMHhiNSAqLworCQkiRUMiLAkJLyogMHhiNiAqLworCQkiRkUiLAkJLyogMHhiNyAqLworCQkiRkUrIiwJCS8qIDB4YjggKi8KKwkJIlN1cHJlbWUiLAkvKiAweGI5ICovCisJCSJVTCAyIiwJCS8qIDB4YmEgKi8KKwl9OworCisJaWYgKGNoaXBpZCA+PSBDSElQX0lEX1lVS09OX1hMICYmIGNoaXBpZCA8IENISVBfSURfWVVLT05fVUxfMikKKwkJc3RybmNweShidWYsIG5hbWVbY2hpcGlkIC0gQ0hJUF9JRF9ZVUtPTl9YTF0sIHN6KTsKKwllbHNlCisJCXNucHJpbnRmKGJ1Ziwgc3osICIoY2hpcCAlI3gpIiwgY2hpcGlkKTsKKwlyZXR1cm4gYnVmOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBza3kyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHc7CiAJaW50IGVyciwgdXNpbmdfZGFjID0gMCwgd29sX2RlZmF1bHQ7CisJY2hhciBidWYxWzE2XTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKQEAgLTQyMDgsMTAgKzQzNjIsMTAgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ2JXMgYWRkciAweCVsbHggaXJxICVkIFl1a29uLSVzICgweCV4KSByZXYgJWRcbiIsCi0JICAgICAgIERSVl9WRVJTSU9OLCAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKLQkgICAgICAgcGRldi0+aXJxLCB5dWtvbjJfbmFtZVtody0+Y2hpcF9pZCAtIENISVBfSURfWVVLT05fWExdLAotCSAgICAgICBody0+Y2hpcF9pZCwgaHctPmNoaXBfcmV2KTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAidiVzIGFkZHIgMHglbGx4IGlycSAlZCBZdWtvbi0yICVzIHJldiAlZFxuIiwKKwkJIERSVl9WRVJTSU9OLCAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKKwkJIHBkZXYtPmlycSwgc2t5Ml9uYW1lKGh3LT5jaGlwX2lkLCBidWYxLCBzaXplb2YoYnVmMSkpLAorCQkgaHctPmNoaXBfcmV2KTsKIAogCXNreTJfcmVzZXQoaHcpOwogCkBAIC00MzYzLDcgKzQ1MTcsNyBAQAogCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCB3b2wpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXNreTJfcG93ZXJfc3RhdGUoaHcsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDM3Niw5ICs0NTMwLDcgQEAKIAlpZiAoIWh3KQogCQlyZXR1cm4gMDsKIAotCWVyciA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwlza3kyX3Bvd2VyX3N0YXRlKGh3LCBQQ0lfRDApOwogCiAJZXJyID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJaWYgKGVycikKQEAgLTQ0NDgsOCArNDYwMCw3IEBACiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIHdvbCk7CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwotCisJc2t5Ml9wb3dlcl9zdGF0ZShodywgUENJX0QzaG90KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNreTJfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5oIGIvZHJpdmVycy9uZXQvc2t5Mi5oCmluZGV4IGMwYTVlZWEuLjRkOWM0YTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmgKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5oCkBAIC0yOCw2ICsyOCwxMSBAQAogCVBDSV9ZMl9QSFkyX1BPV0QgPSAxPDwyNywgLyogU2V0IFBIWSAyIHRvIFBvd2VyIERvd24gKFlVS09OLTIpICovCiAJUENJX1kyX1BIWTFfUE9XRCA9IDE8PDI2LCAvKiBTZXQgUEhZIDEgdG8gUG93ZXIgRG93biAoWVVLT04tMikgKi8KIAlQQ0lfWTJfUE1FX0xFR0FDWT0gMTw8MTUsIC8qIFBDSSBFeHByZXNzIGxlZ2FjeSBwb3dlciBtYW5hZ2VtZW50IG1vZGUgKi8KKworCVBDSV9QSFlfTE5LX1RJTV9NU0s9IDNMPDw4LC8qIEJpdCAgOS4uIDg6CUdQSFkgTGluayBUcmlnZ2VyIFRpbWVyICovCisJUENJX0VOQV9MMV9FVkVOVCA9IDE8PDcsIC8qIEVuYWJsZSBQRVggTDEgRXZlbnQgKi8KKwlQQ0lfRU5BX0dQSFlfTE5LID0gMTw8NiwgLyogRW5hYmxlIFBFWCBMMSBvbiBHUEhZIExpbmsgZG93biAqLworCVBDSV9GT1JDRV9QRVhfTDEgPSAxPDw1LCAvKiBGb3JjZSB0byBQRVggTDEgKi8KIH07CiAKIGVudW0gcGNpX2Rldl9yZWdfMiB7CkBAIC00NSw3ICs1MCwxMSBAQAogCiAvKglQQ0lfT1VSX1JFR180CQkzMiBiaXQJT3VyIFJlZ2lzdGVyIDQgKFl1a29uLUVDVSBvbmx5KSAqLwogZW51bSBwY2lfZGV2X3JlZ180IHsKLQkJCQkJLyogKExpbmsgVHJhaW5pbmcgJiBTdGF0dXMgU3RhdGUgTWFjaGluZSkgKi8KKwkJCQkvKiAoTGluayBUcmFpbmluZyAmIFN0YXR1cyBTdGF0ZSBNYWNoaW5lKSAqLworCVBfUEVYX0xUU1NNX1NUQVRfTVNLCT0gMHg3Zkw8PDI1LAkvKiBCaXQgMzEuLjI1OglQRVggTFRTU00gTWFzayAqLworI2RlZmluZSBQX1BFWF9MVFNTTV9TVEFUKHgpCSgoeCA8PCAyNSkgJiBQX1BFWF9MVFNTTV9TVEFUX01TSykKKwlQX1BFWF9MVFNTTV9MMV9TVEFUCT0gMHgzNCwKKwlQX1BFWF9MVFNTTV9ERVRfU1RBVAk9IDB4MDEsCiAJUF9USU1FUl9WQUxVRV9NU0sJPSAweGZmTDw8MTYsCS8qIEJpdCAyMy4uMTY6CVRpbWVyIFZhbHVlIE1hc2sgKi8KIAkJCQkJLyogKEFjdGl2ZSBTdGF0ZSBQb3dlciBNYW5hZ2VtZW50KSAqLwogCVBfRk9SQ0VfQVNQTV9SRVFVRVNUCT0gMTw8MTUsIC8qIEZvcmNlIEFTUE0gUmVxdWVzdCAoQTEgb25seSkgKi8KQEAgLTQzMiw2ICs0NDEsNyBAQAogIAlDSElQX0lEX1lVS09OX0ZFICAgPSAweGI3LCAvKiBZVUtPTi0yIEZFICovCiAgCUNISVBfSURfWVVLT05fRkVfUCA9IDB4YjgsIC8qIFlVS09OLTIgRkUrICovCiAJQ0hJUF9JRF9ZVUtPTl9TVVBSID0gMHhiOSwgLyogWVVLT04tMiBTdXByZW1lICovCisJQ0hJUF9JRF9ZVUtPTl9VTF8yID0gMHhiYSwgLyogWVVLT04tMiBVbHRyYSAyICovCiB9OwogZW51bSB5dWtvbl9lY19yZXYgewogCUNISVBfUkVWX1lVX0VDX0ExICAgID0gMCwgIC8qIENoaXAgUmV2LiBmb3IgWXVrb24tRUMgQTEvQTAgKi8KQEAgLTQ1NCw2ICs0NjQsOSBAQAogCUNISVBfUkVWX1lVX0VYX0EwICAgID0gMSwKIAlDSElQX1JFVl9ZVV9FWF9CMCAgICA9IDIsCiB9OworZW51bSB5dWtvbl9zdXByX3JldiB7CisJQ0hJUF9SRVZfWVVfU1VfQTAgICAgPSAwLAorfTsKIAogCiAvKglCMl9ZMl9DTEtfR0FURQkgOCBiaXQJQ2xvY2sgR2F0aW5nIChZdWtvbi0yIG9ubHkpICovCkBAIC0xMTQzLDYgKzExNTYsMTIgQEAKIAlQSFlfTV9QQ19FTkFfQVVUTwk9IDMsIC8qIDExID0gRW5hYmxlIEF1dG9tYXRpYyBDcm9zc292ZXIgKi8KIH07CiAKKy8qIGZvciBZdWtvbi1FQyBVbHRyYSBHaWdhYml0IEV0aGVybmV0IFBIWSAoODhFMTE0OSBvbmx5KSAqLworZW51bSB7CisJUEhZX01fUENfQ09QX1RYX0RJUwk9IDE8PDMsIC8qIENvcHBlciBUcmFuc21pdHRlciBEaXNhYmxlICovCisJUEhZX01fUENfUE9XX0RfRU5BCT0gMTw8MiwJLyogUG93ZXIgRG93biBFbmFibGUgKi8KK307CisKIC8qIGZvciAxMC8xMDAgRmFzdCBFdGhlcm5ldCBQSFkgKDg4RTMwODIgb25seSkgKi8KIGVudW0gewogCVBIWV9NX1BDX0VOQV9EVEVfRFQJPSAxPDwxNSwgLyogRW5hYmxlIERhdGEgVGVybWluYWwgRXF1LiAoRFRFKSBEZXRlY3QgKi8KQEAgLTE0MTEsNiArMTQzMCw3IEBACiAvKioqKiogIFBIWV9NQVJWX1BIWV9DVFJMIChwYWdlIDIpCQkxNiBiaXQgci93CU1BQyBTcGVjaWZpYyBDdHJsICoqKioqLwogZW51bSB7CiAJUEhZX01fTUFDX01EX01TSwk9IDc8PDcsIC8qIEJpdCAgOS4uIDc6IE1vZGUgU2VsZWN0IE1hc2sgKi8KKwlQSFlfTV9NQUNfR01JRl9QVVAJPSAxPDwzLAkvKiBHTUlJIFBvd2VyIFVwICg4OEUxMTQ5IG9ubHkpICovCiAJUEhZX01fTUFDX01EX0FVVE8JPSAzLC8qIEF1dG8gQ29wcGVyLzEwMDBCYXNlLVggKi8KIAlQSFlfTV9NQUNfTURfQ09QUEVSCT0gNSwvKiBDb3BwZXIgb25seSAqLwogCVBIWV9NX01BQ19NRF8xMDAwQlgJPSA3LC8qIDEwMDBCYXNlLVggb25seSAqLwpAQCAtMjA1Miw3ICsyMDcyLDkgQEAKICNkZWZpbmUgU0tZMl9IV19ORVdfTEUJCTB4MDAwMDAwMjAJLyogbmV3IExTT3YyIGZvcm1hdCAqLwogI2RlZmluZSBTS1kyX0hXX0FVVE9fVFhfU1VNCTB4MDAwMDAwNDAJLyogbmV3IElQIGRlY29kZSBmb3IgVHggKi8KICNkZWZpbmUgU0tZMl9IV19BRFZfUE9XRVJfQ1RMCTB4MDAwMDAwODAJLyogYWRkaXRpb25hbCBQSFkgcG93ZXIgcmVncyAqLworI2RlZmluZSBTS1kyX0hXX0NMS19QT1dFUgkweDAwMDAwMTAwCS8qIGNsb2NrIHBvd2VyIG1hbmFnZW1lbnQgKi8KIAorCWludAkJICAgICBwbV9jYXA7CiAJdTgJICAgICAJICAgICBjaGlwX2lkOwogCXU4CQkgICAgIGNoaXBfcmV2OwogCXU4CQkgICAgIHBtZF90eXBlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC5jCmluZGV4IDg0YWY2OGYuLjFkNTg5OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NsaXAuYworKysgYi9kcml2ZXJzL25ldC9zbGlwLmMKQEAgLTEzMDEsNyArMTMwMSw3IEBACiAjZW5kaWYKIC8qIFZTViBjaGFuZ2VzIGVuZCAqLwogCi1zdGF0aWMgc3RydWN0IHR0eV9sZGlzYwlzbF9sZGlzYyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBzbF9sZGlzYyA9IHsKIAkub3duZXIgCQk9IFRISVNfTU9EVUxFLAogCS5tYWdpYyAJCT0gVFRZX0xESVNDX01BR0lDLAogCS5uYW1lIAkJPSAic2xpcCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKaW5kZXggZTJlZTkxYS4uYzU4NzE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpAQCAtMTA2LDU1ICsxMDYsNiBAQAogICovCiAjZGVmaW5lIFBPV0VSX0RPV04JCSAxCiAKLQotLyogc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGRyaXZlci4uICovCi1zdHJ1Y3Qgc21jOTExeF9sb2NhbCB7Ci0JLyoKLQkgKiBJZiBJIGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUgRE1BIGlzIGZpbmlzaGVkIGFuZCByZWFkeSB0byByZWxvYWQgYQotCSAqIHBhY2tldCwgSSB3aWxsIHN0b3JlIHRoZSBza2J1ZmYgaGVyZS4gVGhlbiwgdGhlIERNQSB3aWxsIHNlbmQgaXQKLQkgKiBvdXQgYW5kIGZyZWUgaXQuCi0JICovCi0Jc3RydWN0IHNrX2J1ZmYgKnBlbmRpbmdfdHhfc2tiOwotCi0JLyogdmVyc2lvbi9yZXZpc2lvbiBvZiB0aGUgU01DOTExeCBjaGlwICovCi0JdTE2IHZlcnNpb247Ci0JdTE2IHJldmlzaW9uOwotCi0JLyogRklGTyBzaXplcyAqLwotCWludCB0eF9maWZvX2tiOwotCWludCB0eF9maWZvX3NpemU7Ci0JaW50IHJ4X2ZpZm9fc2l6ZTsKLQlpbnQgYWZjX2NmZzsKLQotCS8qIENvbnRhaW5zIHRoZSBjdXJyZW50IGFjdGl2ZSByZWNlaXZlL3BoeSBtb2RlICovCi0JaW50IGN0bF9yZmR1cGx4OwotCWludCBjdGxfcnNwZWVkOwotCi0JdTMyIG1zZ19lbmFibGU7Ci0JdTMyIHBoeV90eXBlOwotCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWk7Ci0KLQkvKiB3b3JrIHF1ZXVlICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHBoeV9jb25maWd1cmU7Ci0KLQlpbnQgdHhfdGhyb3R0bGU7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCi0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQotI2lmZGVmIFNNQ19VU0VfRE1BCi0JLyogRE1BIG5lZWRzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjaGlwICovCi0JdV9sb25nIHBoeXNhZGRyOwotCWludCByeGRtYTsKLQlpbnQgdHhkbWE7Ci0JaW50IHJ4ZG1hX2FjdGl2ZTsKLQlpbnQgdHhkbWFfYWN0aXZlOwotCXN0cnVjdCBza19idWZmICpjdXJyZW50X3J4X3NrYjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF90eF9za2I7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotI2VuZGlmCi19OwotCiAjaWYgU01DX0RFQlVHID4gMAogI2RlZmluZSBEQkcobiwgYXJncy4uLikJCQkJIFwKIAlkbyB7CQkJCQkgXApAQCAtMjAyLDI0ICsxNTMsMjQgQEAKIAogCiAvKiB0aGlzIGVuYWJsZXMgYW4gaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLwotI2RlZmluZSBTTUNfRU5BQkxFX0lOVCh4KSBkbyB7CQkJCVwKKyNkZWZpbmUgU01DX0VOQUJMRV9JTlQobHAsIHgpIGRvIHsJCQlcCiAJdW5zaWduZWQgaW50ICBfX21hc2s7CQkJCVwKIAl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCVwKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIF9fZmxhZ3MpOwkJXAotCV9fbWFzayA9IFNNQ19HRVRfSU5UX0VOKCk7CQkJXAorCV9fbWFzayA9IFNNQ19HRVRfSU5UX0VOKChscCkpOwkJCVwKIAlfX21hc2sgfD0gKHgpOwkJCQkJXAotCVNNQ19TRVRfSU5UX0VOKF9fbWFzayk7CQkJCVwKKwlTTUNfU0VUX0lOVF9FTigobHApLCBfX21hc2spOwkJCVwKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgX19mbGFncyk7CVwKIH0gd2hpbGUgKDApCiAKIC8qIHRoaXMgZGlzYWJsZXMgYW4gaW50ZXJydXB0IGZyb20gdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCi0jZGVmaW5lIFNNQ19ESVNBQkxFX0lOVCh4KSBkbyB7CQkJCVwKKyNkZWZpbmUgU01DX0RJU0FCTEVfSU5UKGxwLCB4KSBkbyB7CQkJXAogCXVuc2lnbmVkIGludCAgX19tYXNrOwkJCQlcCiAJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOwkJCQlcCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBfX2ZsYWdzKTsJCVwKLQlfX21hc2sgPSBTTUNfR0VUX0lOVF9FTigpOwkJCVwKKwlfX21hc2sgPSBTTUNfR0VUX0lOVF9FTigobHApKTsJCQlcCiAJX19tYXNrICY9IH4oeCk7CQkJCQlcCi0JU01DX1NFVF9JTlRfRU4oX19tYXNrKTsJCQkJXAorCVNNQ19TRVRfSU5UX0VOKChscCksIF9fbWFzayk7CQkJXAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBfX2ZsYWdzKTsJXAogfSB3aGlsZSAoMCkKIApAQCAtMjI4LDcgKzE3OSw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNtYzkxMXhfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IHJlZywgdGltZW91dD0wLCByZXNldHM9MTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjM2LDEzICsxODYsMTMgQEAKIAlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKgkgVGFrZSBvdXQgb2YgUE0gc2V0dGluZyBmaXJzdCAqLwotCWlmICgoU01DX0dFVF9QTVRfQ1RSTCgpICYgUE1UX0NUUkxfUkVBRFlfKSA9PSAwKSB7CisJaWYgKChTTUNfR0VUX1BNVF9DVFJMKGxwKSAmIFBNVF9DVFJMX1JFQURZXykgPT0gMCkgewogCQkvKiBXcml0ZSB0byB0aGUgYnl0ZXRlc3Qgd2lsbCB0YWtlIG91dCBvZiBwb3dlcmRvd24gKi8KLQkJU01DX1NFVF9CWVRFX1RFU1QoMCk7CisJCVNNQ19TRVRfQllURV9URVNUKGxwLCAwKTsKIAkJdGltZW91dD0xMDsKIAkJZG8gewogCQkJdWRlbGF5KDEwKTsKLQkJCXJlZyA9IFNNQ19HRVRfUE1UX0NUUkwoKSAmIFBNVF9DVFJMX1JFQURZXzsKKwkJCXJlZyA9IFNNQ19HRVRfUE1UX0NUUkwobHApICYgUE1UX0NUUkxfUkVBRFlfOwogCQl9IHdoaWxlICgtLXRpbWVvdXQgJiYgIXJlZyk7CiAJCWlmICh0aW1lb3V0ID09IDApIHsKIAkJCVBSSU5USygiJXM6IHNtYzkxMXhfcmVzZXQgdGltZW91dCB3YWl0aW5nIGZvciBQTSByZXN0b3JlXG4iLCBkZXYtPm5hbWUpOwpAQCAtMjUyLDE1ICsyMDIsMTUgQEAKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlTTUNfU0VUX0lOVF9FTigwKTsKKwlTTUNfU0VUX0lOVF9FTihscCwgMCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCXdoaWxlIChyZXNldHMtLSkgewotCQlTTUNfU0VUX0hXX0NGRyhIV19DRkdfU1JTVF8pOworCQlTTUNfU0VUX0hXX0NGRyhscCwgSFdfQ0ZHX1NSU1RfKTsKIAkJdGltZW91dD0xMDsKIAkJZG8gewogCQkJdWRlbGF5KDEwKTsKLQkJCXJlZyA9IFNNQ19HRVRfSFdfQ0ZHKCk7CisJCQlyZWcgPSBTTUNfR0VUX0hXX0NGRyhscCk7CiAJCQkvKiBJZiBjaGlwIGluZGljYXRlcyByZXNldCB0aW1lb3V0IHRoZW4gdHJ5IGFnYWluICovCiAJCQlpZiAocmVnICYgSFdfQ0ZHX1NSU1RfVE9fKSB7CiAJCQkJUFJJTlRLKCIlczogY2hpcCByZXNldCB0aW1lb3V0LCByZXRyeWluZy4uLlxuIiwgZGV2LT5uYW1lKTsKQEAgLTI3Niw3ICsyMjYsNyBAQAogCiAJLyogbWFrZSBzdXJlIEVFUFJPTSBoYXMgZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgc2V0dGluZyBHUElPX0NGRyAqLwogCXRpbWVvdXQ9MTAwMDsKLQl3aGlsZSAoIHRpbWVvdXQtLSAmJiAoU01DX0dFVF9FMlBfQ01EKCkgJiBFMlBfQ01EX0VQQ19CVVNZXykpIHsKKwl3aGlsZSAoIHRpbWVvdXQtLSAmJiAoU01DX0dFVF9FMlBfQ01EKGxwKSAmIEUyUF9DTURfRVBDX0JVU1lfKSkgewogCQl1ZGVsYXkoMTApOwogCX0KIAlpZiAodGltZW91dCA9PSAwKXsKQEAgLTI4NSwyNCArMjM1LDI0IEBACiAJfQogCiAJLyogSW5pdGlhbGl6ZSBpbnRlcnJ1cHRzICovCi0JU01DX1NFVF9JTlRfRU4oMCk7Ci0JU01DX0FDS19JTlQoLTEpOworCVNNQ19TRVRfSU5UX0VOKGxwLCAwKTsKKwlTTUNfQUNLX0lOVChscCwgLTEpOwogCiAJLyogUmVzZXQgdGhlIEZJRk8gbGV2ZWwgYW5kIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLwotCVNNQ19TRVRfSFdfQ0ZHKChscC0+dHhfZmlmb19rYiAmIDB4RikgPDwgMTYpOworCVNNQ19TRVRfSFdfQ0ZHKGxwLCAobHAtPnR4X2ZpZm9fa2IgJiAweEYpIDw8IDE2KTsKIC8vVE9ETzogRmlndXJlIG91dCB3aGF0IGFwcHJvcHJpYXRlIHBhdXNlIHRpbWUgaXMKLQlTTUNfU0VUX0ZMT1coRkxPV19GQ1BUXyB8IEZMT1dfRkNFTl8pOwotCVNNQ19TRVRfQUZDX0NGRyhscC0+YWZjX2NmZyk7CisJU01DX1NFVF9GTE9XKGxwLCBGTE9XX0ZDUFRfIHwgRkxPV19GQ0VOXyk7CisJU01DX1NFVF9BRkNfQ0ZHKGxwLCBscC0+YWZjX2NmZyk7CiAKIAogCS8qIFNldCB0byBMRUQgb3V0cHV0cyAqLwotCVNNQ19TRVRfR1BJT19DRkcoMHg3MDA3MDAwMCk7CisJU01DX1NFVF9HUElPX0NGRyhscCwgMHg3MDA3MDAwMCk7CiAKIAkvKgogCSAqIERlYXNzZXJ0IElSUSBmb3IgMSoxMHVzIGZvciBlZGdlIHR5cGUgaW50ZXJydXB0cwogCSAqIGFuZCBkcml2ZSBJUlEgcGluIHB1c2gtcHVsbAogCSAqLwotCVNNQ19TRVRfSVJRX0NGRyggKDEgPDwgMjQpIHwgSU5UX0NGR19JUlFfRU5fIHwgSU5UX0NGR19JUlFfVFlQRV8gKTsKKwlTTUNfU0VUX0lSUV9DRkcobHAsICgxIDw8IDI0KSB8IElOVF9DRkdfSVJRX0VOXyB8IElOVF9DRkdfSVJRX1RZUEVfKTsKIAogCS8qIGNsZWFyIGFueXRoaW5nIHNhdmVkICovCiAJaWYgKGxwLT5wZW5kaW5nX3R4X3NrYiAhPSBOVUxMKSB7CkBAIC0zMTgsNDYgKzI2OCw0NSBAQAogICovCiBzdGF0aWMgdm9pZCBzbWM5MTF4X2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBtYXNrLCBjZmcsIGNyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CiAKLQlTTUNfU0VUX01BQ19BRERSKGRldi0+ZGV2X2FkZHIpOworCVNNQ19TRVRfTUFDX0FERFIobHAsIGRldi0+ZGV2X2FkZHIpOwogCiAJLyogRW5hYmxlIFRYICovCi0JY2ZnID0gU01DX0dFVF9IV19DRkcoKTsKKwljZmcgPSBTTUNfR0VUX0hXX0NGRyhscCk7CiAJY2ZnICY9IEhXX0NGR19UWF9GSUZfU1pfIHwgMHhGRkY7CiAJY2ZnIHw9IEhXX0NGR19TRl87Ci0JU01DX1NFVF9IV19DRkcoY2ZnKTsKLQlTTUNfU0VUX0ZJRk9fVERBKDB4RkYpOworCVNNQ19TRVRfSFdfQ0ZHKGxwLCBjZmcpOworCVNNQ19TRVRfRklGT19UREEobHAsIDB4RkYpOwogCS8qIFVwZGF0ZSBUWCBzdGF0cyBvbiBldmVyeSA2NCBwYWNrZXRzIHJlY2VpdmVkIG9yIGV2ZXJ5IDEgc2VjICovCi0JU01DX1NFVF9GSUZPX1RTTCg2NCk7Ci0JU01DX1NFVF9HUFRfQ0ZHKEdQVF9DRkdfVElNRVJfRU5fIHwgMTAwMDApOworCVNNQ19TRVRfRklGT19UU0wobHAsIDY0KTsKKwlTTUNfU0VUX0dQVF9DRkcobHAsIEdQVF9DRkdfVElNRVJfRU5fIHwgMTAwMDApOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JU01DX0dFVF9NQUNfQ1IoY3IpOworCVNNQ19HRVRfTUFDX0NSKGxwLCBjcik7CiAJY3IgfD0gTUFDX0NSX1RYRU5fIHwgTUFDX0NSX0hCRElTXzsKLQlTTUNfU0VUX01BQ19DUihjcik7Ci0JU01DX1NFVF9UWF9DRkcoVFhfQ0ZHX1RYX09OXyk7CisJU01DX1NFVF9NQUNfQ1IobHAsIGNyKTsKKwlTTUNfU0VUX1RYX0NGRyhscCwgVFhfQ0ZHX1RYX09OXyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIEFkZCAyIGJ5dGUgcGFkZGluZyB0byBzdGFydCBvZiBwYWNrZXRzICovCi0JU01DX1NFVF9SWF9DRkcoKDI8PDgpICYgUlhfQ0ZHX1JYRE9GRl8pOworCVNNQ19TRVRfUlhfQ0ZHKGxwLCAoMjw8OCkgJiBSWF9DRkdfUlhET0ZGXyk7CiAKIAkvKiBUdXJuIG9uIHJlY2VpdmVyIGFuZCBlbmFibGUgUlggKi8KIAlpZiAoY3IgJiBNQUNfQ1JfUlhFTl8pCiAJCURCRyhTTUNfREVCVUdfUlgsICIlczogUmVjZWl2ZXIgYWxyZWFkeSBlbmFibGVkXG4iLCBkZXYtPm5hbWUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JU01DX1NFVF9NQUNfQ1IoIGNyIHwgTUFDX0NSX1JYRU5fICk7CisJU01DX1NFVF9NQUNfQ1IobHAsIGNyIHwgTUFDX0NSX1JYRU5fKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCiAJLyogSW50ZXJydXB0IG9uIGV2ZXJ5IHJlY2VpdmVkIHBhY2tldCAqLwotCVNNQ19TRVRfRklGT19SU0EoMHgwMSk7Ci0JU01DX1NFVF9GSUZPX1JTTCgweDAwKTsKKwlTTUNfU0VUX0ZJRk9fUlNBKGxwLCAweDAxKTsKKwlTTUNfU0VUX0ZJRk9fUlNMKGxwLCAweDAwKTsKIAogCS8qIG5vdywgZW5hYmxlIGludGVycnVwdHMgKi8KIAltYXNrID0gSU5UX0VOX1RERkFfRU5fIHwgSU5UX0VOX1RTRkxfRU5fIHwgSU5UX0VOX1JTRkxfRU5fIHwKQEAgLTM2OCw3ICszMTcsNyBAQAogCWVsc2UgewogCQltYXNrfD1JTlRfRU5fUkRGT19FTl87CiAJfQotCVNNQ19FTkFCTEVfSU5UKG1hc2spOworCVNNQ19FTkFCTEVfSU5UKGxwLCBtYXNrKTsKIH0KIAogLyoKQEAgLTM3Niw3ICszMjUsNiBAQAogICovCiBzdGF0aWMgdm9pZCBzbWM5MTF4X3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGNyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zODQsMzUgKzMzMiwzNSBAQAogCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIENBUkROQU1FLCBfX0ZVTkNUSU9OX18pOwogCiAJLyogRGlzYWJsZSBJUlEncyAqLwotCVNNQ19TRVRfSU5UX0VOKDApOworCVNNQ19TRVRfSU5UX0VOKGxwLCAwKTsKIAogCS8qIFR1cm4gb2YgUnggYW5kIFRYICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JU01DX0dFVF9NQUNfQ1IoY3IpOworCVNNQ19HRVRfTUFDX0NSKGxwLCBjcik7CiAJY3IgJj0gfihNQUNfQ1JfVFhFTl8gfCBNQUNfQ1JfUlhFTl8gfCBNQUNfQ1JfSEJESVNfKTsKLQlTTUNfU0VUX01BQ19DUihjcik7Ci0JU01DX1NFVF9UWF9DRkcoVFhfQ0ZHX1NUT1BfVFhfKTsKKwlTTUNfU0VUX01BQ19DUihscCwgY3IpOworCVNNQ19TRVRfVFhfQ0ZHKGxwLCBUWF9DRkdfU1RPUF9UWF8pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbWM5MTF4X2Ryb3BfcGt0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBmaWZvX2NvdW50LCB0aW1lb3V0LCByZWc7CiAKIAlEQkcoU01DX0RFQlVHX0ZVTkMgfCBTTUNfREVCVUdfUlgsICIlczogLS0+ICVzXG4iLCBDQVJETkFNRSwgX19GVU5DVElPTl9fKTsKLQlmaWZvX2NvdW50ID0gU01DX0dFVF9SWF9GSUZPX0lORigpICYgMHhGRkZGOworCWZpZm9fY291bnQgPSBTTUNfR0VUX1JYX0ZJRk9fSU5GKGxwKSAmIDB4RkZGRjsKIAlpZiAoZmlmb19jb3VudCA8PSA0KSB7CiAJCS8qIE1hbnVhbGx5IGR1bXAgdGhlIHBhY2tldCBkYXRhICovCiAJCXdoaWxlIChmaWZvX2NvdW50LS0pCi0JCQlTTUNfR0VUX1JYX0ZJRk8oKTsKKwkJCVNNQ19HRVRfUlhfRklGTyhscCk7CiAJfSBlbHNlCSB7CiAJCS8qIEZhc3QgZm9yd2FyZCB0aHJvdWdoIHRoZSBiYWQgcGFja2V0ICovCi0JCVNNQ19TRVRfUlhfRFBfQ1RSTChSWF9EUF9DVFJMX0ZGV0RfQlVTWV8pOworCQlTTUNfU0VUX1JYX0RQX0NUUkwobHAsIFJYX0RQX0NUUkxfRkZXRF9CVVNZXyk7CiAJCXRpbWVvdXQ9NTA7CiAJCWRvIHsKIAkJCXVkZWxheSgxMCk7Ci0JCQlyZWcgPSBTTUNfR0VUX1JYX0RQX0NUUkwoKSAmIFJYX0RQX0NUUkxfRkZXRF9CVVNZXzsKKwkJCXJlZyA9IFNNQ19HRVRfUlhfRFBfQ1RSTChscCkgJiBSWF9EUF9DVFJMX0ZGV0RfQlVTWV87CiAJCX0gd2hpbGUgKC0tdGltZW91dCAmJiByZWcpOwogCQlpZiAodGltZW91dCA9PSAwKSB7CiAJCQlQUklOVEsoIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIFJYIGZhc3QgZm9yd2FyZFxuIiwgZGV2LT5uYW1lKTsKQEAgLTQyOCwxNCArMzc2LDE0IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAkgc21jOTExeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IHBrdF9sZW4sIHN0YXR1czsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAKIAlEQkcoU01DX0RFQlVHX0ZVTkMgfCBTTUNfREVCVUdfUlgsICIlczogLS0+ICVzXG4iLAogCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7Ci0Jc3RhdHVzID0gU01DX0dFVF9SWF9TVFNfRklGTygpOworCXN0YXR1cyA9IFNNQ19HRVRfUlhfU1RTX0ZJRk8obHApOwogCURCRyhTTUNfREVCVUdfUlgsICIlczogUnggcGt0IGxlbiAlZCBzdGF0dXMgMHglMDh4IFxuIiwKIAkJZGV2LT5uYW1lLCAoc3RhdHVzICYgMHgzZmZmMDAwMCkgPj4gMTYsIHN0YXR1cyAmIDB4YzAwMGZmZmYpOwogCXBrdF9sZW4gPSAoc3RhdHVzICYgUlhfU1RTX1BLVF9MRU5fKSA+PiAxNjsKQEAgLTQ3MiwyNCArNDIwLDIzIEBACiAJCXNrYl9wdXQoc2tiLHBrdF9sZW4tNCk7CiAjaWZkZWYgU01DX1VTRV9ETUEKIAkJewotCQlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCQl1bnNpZ25lZCBpbnQgZmlmbzsKIAkJLyogTG93ZXIgdGhlIEZJRk8gdGhyZXNob2xkIGlmIHBvc3NpYmxlICovCi0JCWZpZm8gPSBTTUNfR0VUX0ZJRk9fSU5UKCk7CisJCWZpZm8gPSBTTUNfR0VUX0ZJRk9fSU5UKGxwKTsKIAkJaWYgKGZpZm8gJiAweEZGKSBmaWZvLS07CiAJCURCRyhTTUNfREVCVUdfUlgsICIlczogU2V0dGluZyBSWCBzdGF0IEZJRk8gdGhyZXNob2xkIHRvICVkXG4iLAogCQkJZGV2LT5uYW1lLCBmaWZvICYgMHhmZik7Ci0JCVNNQ19TRVRfRklGT19JTlQoZmlmbyk7CisJCVNNQ19TRVRfRklGT19JTlQobHAsIGZpZm8pOwogCQkvKiBTZXR1cCBSWCBETUEgKi8KLQkJU01DX1NFVF9SWF9DRkcoUlhfQ0ZHX1JYX0VORF9BTEdOMTZfIHwgKCgyPDw4KSAmIFJYX0NGR19SWERPRkZfKSk7CisJCVNNQ19TRVRfUlhfQ0ZHKGxwLCBSWF9DRkdfUlhfRU5EX0FMR04xNl8gfCAoKDI8PDgpICYgUlhfQ0ZHX1JYRE9GRl8pKTsKIAkJbHAtPnJ4ZG1hX2FjdGl2ZSA9IDE7CiAJCWxwLT5jdXJyZW50X3J4X3NrYiA9IHNrYjsKLQkJU01DX1BVTExfREFUQShkYXRhLCAocGt0X2xlbisyKzE1KSAmIH4xNSk7CisJCVNNQ19QVUxMX0RBVEEobHAsIGRhdGEsIChwa3RfbGVuKzIrMTUpICYgfjE1KTsKIAkJLyogUGFja2V0IHByb2Nlc3NpbmcgZGVmZXJyZWQgdG8gRE1BIFJYIGludGVycnVwdCAqLwogCQl9CiAjZWxzZQotCQlTTUNfU0VUX1JYX0NGRyhSWF9DRkdfUlhfRU5EX0FMR040XyB8ICgoMjw8OCkgJiBSWF9DRkdfUlhET0ZGXykpOwotCQlTTUNfUFVMTF9EQVRBKGRhdGEsIHBrdF9sZW4rMiszKTsKKwkJU01DX1NFVF9SWF9DRkcobHAsIFJYX0NGR19SWF9FTkRfQUxHTjRfIHwgKCgyPDw4KSAmIFJYX0NGR19SWERPRkZfKSk7CisJCVNNQ19QVUxMX0RBVEEobHAsIGRhdGEsIHBrdF9sZW4rMiszKTsKIAogCQlEQkcoU01DX0RFQlVHX1BLVFMsICIlczogUmVjZWl2ZWQgcGFja2V0XG4iLCBkZXYtPm5hbWUpOwogCQlQUklOVF9QS1QoZGF0YSwgKChwa3RfbGVuIC0gNCkgPD0gNjQpID8gcGt0X2xlbiAtIDQgOiA2NCk7CkBAIC01MDgsNyArNDU1LDYgQEAKIHN0YXRpYyB2b2lkIHNtYzkxMXhfaGFyZHdhcmVfc2VuZF9wa3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgY21kQSwgY21kQiwgbGVuOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKQEAgLTU0MSw4ICs0ODcsOCBAQAogCiAJREJHKFNNQ19ERUJVR19UWCwgIiVzOiBUWCBQS1QgTEVOR1RIIDB4JTA0eCAoJWQpIEJVRiAweCVwIENNREEgMHglMDh4IENNREIgMHglMDh4XG4iLAogCQkgZGV2LT5uYW1lLCBsZW4sIGxlbiwgYnVmLCBjbWRBLCBjbWRCKTsKLQlTTUNfU0VUX1RYX0ZJRk8oY21kQSk7Ci0JU01DX1NFVF9UWF9GSUZPKGNtZEIpOworCVNNQ19TRVRfVFhfRklGTyhscCwgY21kQSk7CisJU01DX1NFVF9UWF9GSUZPKGxwLCBjbWRCKTsKIAogCURCRyhTTUNfREVCVUdfUEtUUywgIiVzOiBUcmFuc21pdHRlZCBwYWNrZXRcbiIsIGRldi0+bmFtZSk7CiAJUFJJTlRfUEtUKGJ1ZiwgbGVuIDw9IDY0ID8gbGVuIDogNjQpOwpAQCAtNTUwLDEwICs0OTYsMTAgQEAKIAkvKiBTZW5kIHBrdCB2aWEgUElPIG9yIERNQSAqLwogI2lmZGVmIFNNQ19VU0VfRE1BCiAJbHAtPmN1cnJlbnRfdHhfc2tiID0gc2tiOwotCVNNQ19QVVNIX0RBVEEoYnVmLCBsZW4pOworCVNNQ19QVVNIX0RBVEEobHAsIGJ1ZiwgbGVuKTsKIAkvKiBETUEgY29tcGxldGUgSVJRIHdpbGwgZnJlZSBidWZmZXIgYW5kIHNldCBqaWZmaWVzICovCiAjZWxzZQotCVNNQ19QVVNIX0RBVEEoYnVmLCBsZW4pOworCVNNQ19QVVNIX0RBVEEobHAsIGJ1ZiwgbGVuKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAjZW5kaWYKQEAgLTU2Miw3ICs1MDgsNyBAQAogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JU01DX0VOQUJMRV9JTlQoSU5UX0VOX1RERkFfRU5fIHwgSU5UX0VOX1RTRkxfRU5fKTsKKwlTTUNfRU5BQkxFX0lOVChscCwgSU5UX0VOX1RERkFfRU5fIHwgSU5UX0VOX1RTRkxfRU5fKTsKIH0KIAogLyoKQEAgLTU3NCw3ICs1MjAsNiBAQAogc3RhdGljIGludCBzbWM5MTF4X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAl1bnNpZ25lZCBpbnQgZnJlZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC01ODMsNyArNTI4LDcgQEAKIAogCUJVR19PTihscC0+cGVuZGluZ190eF9za2IgIT0gTlVMTCk7CiAKLQlmcmVlID0gU01DX0dFVF9UWF9GSUZPX0lORigpICYgVFhfRklGT19JTkZfVERGUkVFXzsKKwlmcmVlID0gU01DX0dFVF9UWF9GSUZPX0lORihscCkgJiBUWF9GSUZPX0lORl9UREZSRUVfOwogCURCRyhTTUNfREVCVUdfVFgsICIlczogVFggZnJlZSBzcGFjZSAlZFxuIiwgZGV2LT5uYW1lLCBmcmVlKTsKIAogCS8qIFR1cm4gb2ZmIHRoZSBmbG93IHdoZW4gcnVubmluZyBvdXQgb2Ygc3BhY2UgaW4gRklGTyAqLwpAQCAtNTkyLDcgKzUzNyw3IEBACiAJCQlkZXYtPm5hbWUsIGZyZWUpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJLyogUmVlbmFibGUgd2hlbiBhdCBsZWFzdCAxIHBhY2tldCBvZiBzaXplIE1UVSBwcmVzZW50ICovCi0JCVNNQ19TRVRfRklGT19UREEoKFNNQzkxMVhfVFhfRklGT19MT1dfVEhSRVNIT0xEKS82NCk7CisJCVNNQ19TRVRfRklGT19UREEobHAsIChTTUM5MTFYX1RYX0ZJRk9fTE9XX1RIUkVTSE9MRCkvNjQpOwogCQlscC0+dHhfdGhyb3R0bGUgPSAxOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CkBAIC02NDcsNyArNTkyLDYgQEAKICAqLwogc3RhdGljIHZvaWQgc21jOTExeF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgdHhfc3RhdHVzOwogCkBAIC02NTUsMTEgKzU5OSwxMSBAQAogCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBDb2xsZWN0IHRoZSBUWCBzdGF0dXMgKi8KLQl3aGlsZSAoKChTTUNfR0VUX1RYX0ZJRk9fSU5GKCkgJiBUWF9GSUZPX0lORl9UU1VTRURfKSA+PiAxNikgIT0gMCkgeworCXdoaWxlICgoKFNNQ19HRVRfVFhfRklGT19JTkYobHApICYgVFhfRklGT19JTkZfVFNVU0VEXykgPj4gMTYpICE9IDApIHsKIAkJREJHKFNNQ19ERUJVR19UWCwgIiVzOiBUeCBzdGF0IEZJRk8gdXNlZCAweCUwNHhcbiIsCiAJCQlkZXYtPm5hbWUsCi0JCQkoU01DX0dFVF9UWF9GSUZPX0lORigpICYgVFhfRklGT19JTkZfVFNVU0VEXykgPj4gMTYpOwotCQl0eF9zdGF0dXMgPSBTTUNfR0VUX1RYX1NUU19GSUZPKCk7CisJCQkoU01DX0dFVF9UWF9GSUZPX0lORihscCkgJiBUWF9GSUZPX0lORl9UU1VTRURfKSA+PiAxNik7CisJCXR4X3N0YXR1cyA9IFNNQ19HRVRfVFhfU1RTX0ZJRk8obHApOwogCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJZGV2LT5zdGF0cy50eF9ieXRlcys9dHhfc3RhdHVzPj4xNjsKIAkJREJHKFNNQ19ERUJVR19UWCwgIiVzOiBUeCBGSUZPIHRhZyAweCUwNHggc3RhdHVzIDB4JTA0eFxuIiwKQEAgLTY5NywxMCArNjQxLDEwIEBACiAKIHN0YXRpYyBpbnQgc21jOTExeF9waHlfcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZykKIHsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IHBoeWRhdGE7CiAKLQlTTUNfR0VUX01JSShwaHlyZWcsIHBoeWFkZHIsIHBoeWRhdGEpOworCVNNQ19HRVRfTUlJKGxwLCBwaHlyZWcsIHBoeWFkZHIsIHBoeWRhdGEpOwogCiAJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IHBoeWFkZHI9MHgleCwgcGh5cmVnPTB4JTAyeCwgcGh5ZGF0YT0weCUwNHhcbiIsCiAJCV9fRlVOQ1RJT05fXywgcGh5YWRkciwgcGh5cmVnLCBwaHlkYXRhKTsKQEAgLTcxNCwxMiArNjU4LDEyIEBACiBzdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV93cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZywKIAkJCWludCBwaHlkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBwaHlhZGRyPTB4JXgsIHBoeXJlZz0weCV4LCBwaHlkYXRhPTB4JXhcbiIsCiAJCV9fRlVOQ1RJT05fXywgcGh5YWRkciwgcGh5cmVnLCBwaHlkYXRhKTsKIAotCVNNQ19TRVRfTUlJKHBoeXJlZywgcGh5YWRkciwgcGh5ZGF0YSk7CisJU01DX1NFVF9NSUkobHAsIHBoeXJlZywgcGh5YWRkciwgcGh5ZGF0YSk7CiB9CiAKIC8qCkBAIC03MjgsNyArNjcyLDYgQEAKICAqLwogc3RhdGljIHZvaWQgc21jOTExeF9waHlfZGV0ZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBwaHlhZGRyOwogCXVuc2lnbmVkIGludCBjZmcsIGlkMSwgaWQyOwpAQCAtNzQ0LDMwICs2ODcsMzAgQEAKIAlzd2l0Y2gobHAtPnZlcnNpb24pIHsKIAkJY2FzZSAweDExNToKIAkJY2FzZSAweDExNzoKLQkJCWNmZyA9IFNNQ19HRVRfSFdfQ0ZHKCk7CisJCQljZmcgPSBTTUNfR0VUX0hXX0NGRyhscCk7CiAJCQlpZiAoY2ZnICYgSFdfQ0ZHX0VYVF9QSFlfREVUXykgewogCQkJCWNmZyAmPSB+SFdfQ0ZHX1BIWV9DTEtfU0VMXzsKIAkJCQljZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0NMS19ESVNfOwotCQkJCVNNQ19TRVRfSFdfQ0ZHKGNmZyk7CisJCQkJU01DX1NFVF9IV19DRkcobHAsIGNmZyk7CiAJCQkJdWRlbGF5KDEwKTsgLyogV2FpdCBmb3IgY2xvY2tzIHRvIHN0b3AgKi8KIAogCQkJCWNmZyB8PSBIV19DRkdfRVhUX1BIWV9FTl87Ci0JCQkJU01DX1NFVF9IV19DRkcoY2ZnKTsKKwkJCQlTTUNfU0VUX0hXX0NGRyhscCwgY2ZnKTsKIAkJCQl1ZGVsYXkoMTApOyAvKiBXYWl0IGZvciBjbG9ja3MgdG8gc3RvcCAqLwogCiAJCQkJY2ZnICY9IH5IV19DRkdfUEhZX0NMS19TRUxfOwogCQkJCWNmZyB8PSBIV19DRkdfUEhZX0NMS19TRUxfRVhUX1BIWV87Ci0JCQkJU01DX1NFVF9IV19DRkcoY2ZnKTsKKwkJCQlTTUNfU0VUX0hXX0NGRyhscCwgY2ZnKTsKIAkJCQl1ZGVsYXkoMTApOyAvKiBXYWl0IGZvciBjbG9ja3MgdG8gc3RvcCAqLwogCiAJCQkJY2ZnIHw9IEhXX0NGR19TTUlfU0VMXzsKLQkJCQlTTUNfU0VUX0hXX0NGRyhjZmcpOworCQkJCVNNQ19TRVRfSFdfQ0ZHKGxwLCBjZmcpOwogCiAJCQkJZm9yIChwaHlhZGRyID0gMTsgcGh5YWRkciA8IDMyOyArK3BoeWFkZHIpIHsKIAogCQkJCQkvKiBSZWFkIHRoZSBQSFkgaWRlbnRpZmllcnMgKi8KLQkJCQkJU01DX0dFVF9QSFlfSUQxKHBoeWFkZHIgJiAzMSwgaWQxKTsKLQkJCQkJU01DX0dFVF9QSFlfSUQyKHBoeWFkZHIgJiAzMSwgaWQyKTsKKwkJCQkJU01DX0dFVF9QSFlfSUQxKGxwLCBwaHlhZGRyICYgMzEsIGlkMSk7CisJCQkJCVNNQ19HRVRfUEhZX0lEMihscCwgcGh5YWRkciAmIDMxLCBpZDIpOwogCiAJCQkJCS8qIE1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIGlkZW50aWZpZXIgKi8KIAkJCQkJaWYgKGlkMSAhPSAweDAwMDAgJiYgaWQxICE9IDB4ZmZmZiAmJgpAQCAtNzgyLDggKzcyNSw4IEBACiAJCQl9CiAJCWRlZmF1bHQ6CiAJCQkvKiBJbnRlcm5hbCBtZWRpYSBvbmx5ICovCi0JCQlTTUNfR0VUX1BIWV9JRDEoMSwgaWQxKTsKLQkJCVNNQ19HRVRfUEhZX0lEMigxLCBpZDIpOworCQkJU01DX0dFVF9QSFlfSUQxKGxwLCAxLCBpZDEpOworCQkJU01DX0dFVF9QSFlfSUQyKGxwLCAxLCBpZDIpOwogCQkJLyogU2F2ZSB0aGUgUEhZJ3MgYWRkcmVzcyAqLwogCQkJbHAtPm1paS5waHlfaWQgPSAxOwogCQkJbHAtPnBoeV90eXBlID0gaWQxIDw8IDE2IHwgaWQyOwpAQCAtODAwLDE2ICs3NDMsMTUgQEAKIHN0YXRpYyBpbnQgc21jOTExeF9waHlfZml4ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJaW50IHBoeWFkZHIgPSBscC0+bWlpLnBoeV9pZDsKIAlpbnQgYm1jcjsKIAogCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKIAogCS8qIEVudGVyIExpbmsgRGlzYWJsZSBzdGF0ZSAqLwotCVNNQ19HRVRfUEhZX0JNQ1IocGh5YWRkciwgYm1jcik7CisJU01DX0dFVF9QSFlfQk1DUihscCwgcGh5YWRkciwgYm1jcik7CiAJYm1jciB8PSBCTUNSX1BET1dOOwotCVNNQ19TRVRfUEhZX0JNQ1IocGh5YWRkciwgYm1jcik7CisJU01DX1NFVF9QSFlfQk1DUihscCwgcGh5YWRkciwgYm1jcik7CiAKIAkvKgogCSAqIFNldCBvdXIgZml4ZWQgY2FwYWJpbGl0aWVzCkBAIC04MjMsMTEgKzc2NSwxMSBAQAogCQlibWNyIHw9IEJNQ1JfU1BFRUQxMDA7CiAKIAkvKiBXcml0ZSBvdXIgY2FwYWJpbGl0aWVzIHRvIHRoZSBwaHkgY29udHJvbCByZWdpc3RlciAqLwotCVNNQ19TRVRfUEhZX0JNQ1IocGh5YWRkciwgYm1jcik7CisJU01DX1NFVF9QSFlfQk1DUihscCwgcGh5YWRkciwgYm1jcik7CiAKIAkvKiBSZS1Db25maWd1cmUgdGhlIFJlY2VpdmUvUGh5IENvbnRyb2wgcmVnaXN0ZXIgKi8KIAlibWNyICY9IH5CTUNSX1BET1dOOwotCVNNQ19TRVRfUEhZX0JNQ1IocGh5YWRkciwgYm1jcik7CisJU01DX1NFVF9QSFlfQk1DUihscCwgcGh5YWRkciwgYm1jcik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTg0Nyw3ICs3ODksNiBAQAogc3RhdGljIGludCBzbWM5MTF4X3BoeV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5KQogewogCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlpbnQgdGltZW91dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCByZWc7CkBAIC04NTUsMTUgKzc5NiwxNSBAQAogCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXMoKVxuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JcmVnID0gU01DX0dFVF9QTVRfQ1RSTCgpOworCXJlZyA9IFNNQ19HRVRfUE1UX0NUUkwobHApOwogCXJlZyAmPSB+MHhmZmZmZjAzMDsKIAlyZWcgfD0gUE1UX0NUUkxfUEhZX1JTVF87Ci0JU01DX1NFVF9QTVRfQ1RSTChyZWcpOworCVNNQ19TRVRfUE1UX0NUUkwobHAsIHJlZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKHRpbWVvdXQgPSAyOyB0aW1lb3V0OyB0aW1lb3V0LS0pIHsKIAkJbXNsZWVwKDUwKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JCXJlZyA9IFNNQ19HRVRfUE1UX0NUUkwoKTsKKwkJcmVnID0gU01DX0dFVF9QTVRfQ1RSTChscCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJCWlmICghKHJlZyAmIFBNVF9DVFJMX1BIWV9SU1RfKSkgewogCQkJLyogZXh0cmEgZGVsYXkgcmVxdWlyZWQgYmVjYXVzZSB0aGUgcGh5IG1heQpAQCAtODg4LDEzICs4MjksMTMgQEAKICAqLwogc3RhdGljIHZvaWQgc21jOTExeF9waHlfcG93ZXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHkpCiB7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBibWNyOwogCiAJLyogRW50ZXIgTGluayBEaXNhYmxlIHN0YXRlICovCi0JU01DX0dFVF9QSFlfQk1DUihwaHksIGJtY3IpOworCVNNQ19HRVRfUEhZX0JNQ1IobHAsIHBoeSwgYm1jcik7CiAJYm1jciB8PSBCTUNSX1BET1dOOwotCVNNQ19TRVRfUEhZX0JNQ1IocGh5LCBibWNyKTsKKwlTTUNfU0VUX1BIWV9CTUNSKGxwLCBwaHksIGJtY3IpOwogfQogCiAvKgpAQCAtOTA4LDcgKzg0OSw2IEBACiBzdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV9jaGVja19tZWRpYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5pdCkKIHsKIAlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJaW50IHBoeWFkZHIgPSBscC0+bWlpLnBoeV9pZDsKIAl1bnNpZ25lZCBpbnQgYm1jciwgY3I7CiAKQEAgLTkxNiw4ICs4NTYsOCBAQAogCiAJaWYgKG1paV9jaGVja19tZWRpYSgmbHAtPm1paSwgbmV0aWZfbXNnX2xpbmsobHApLCBpbml0KSkgewogCQkvKiBkdXBsZXggc3RhdGUgaGFzIGNoYW5nZWQgKi8KLQkJU01DX0dFVF9QSFlfQk1DUihwaHlhZGRyLCBibWNyKTsKLQkJU01DX0dFVF9NQUNfQ1IoY3IpOworCQlTTUNfR0VUX1BIWV9CTUNSKGxwLCBwaHlhZGRyLCBibWNyKTsKKwkJU01DX0dFVF9NQUNfQ1IobHAsIGNyKTsKIAkJaWYgKGxwLT5taWkuZnVsbF9kdXBsZXgpIHsKIAkJCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBDb25maWd1cmluZyBmb3IgZnVsbC1kdXBsZXggbW9kZVxuIiwgZGV2LT5uYW1lKTsKIAkJCWJtY3IgfD0gQk1DUl9GVUxMRFBMWDsKQEAgLTkyNyw4ICs4NjcsOCBAQAogCQkJYm1jciAmPSB+Qk1DUl9GVUxMRFBMWDsKIAkJCWNyICY9IH5NQUNfQ1JfUkNWT1dOXzsKIAkJfQotCQlTTUNfU0VUX1BIWV9CTUNSKHBoeWFkZHIsIGJtY3IpOwotCQlTTUNfU0VUX01BQ19DUihjcik7CisJCVNNQ19TRVRfUEhZX0JNQ1IobHAsIHBoeWFkZHIsIGJtY3IpOworCQlTTUNfU0VUX01BQ19DUihscCwgY3IpOwogCX0KIH0KIApAQCAtOTQ2LDcgKzg4Niw2IEBACiAJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzbWM5MTF4X2xvY2FsLAogCQkJCQkJcGh5X2NvbmZpZ3VyZSk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxwLT5uZXRkZXY7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlpbnQgcGh5YWRkciA9IGxwLT5taWkucGh5X2lkOwogCWludCBteV9waHlfY2FwczsgLyogTXkgUEhZIGNhcGFiaWxpdGllcyAqLwogCWludCBteV9hZF9jYXBzOyAvKiBNeSBBZHZlcnRpc2VkIGNhcGFiaWxpdGllcyAqLwpAQCAtOTcxLDcgKzkxMCw3IEBACiAJICogRW5hYmxlIFBIWSBJbnRlcnJ1cHRzIChmb3IgcmVnaXN0ZXIgMTgpCiAJICogSW50ZXJydXB0cyBsaXN0ZWQgaGVyZSBhcmUgZW5hYmxlZAogCSAqLwotCVNNQ19TRVRfUEhZX0lOVF9NQVNLKHBoeWFkZHIsIFBIWV9JTlRfTUFTS19FTkVSR1lfT05fIHwKKwlTTUNfU0VUX1BIWV9JTlRfTUFTSyhscCwgcGh5YWRkciwgUEhZX0lOVF9NQVNLX0VORVJHWV9PTl8gfAogCQkgUEhZX0lOVF9NQVNLX0FORUdfQ09NUF8gfCBQSFlfSU5UX01BU0tfUkVNT1RFX0ZBVUxUXyB8CiAJCSBQSFlfSU5UX01BU0tfTElOS19ET1dOXyk7CiAKQEAgLTk4Miw3ICs5MjEsNyBAQAogCX0KIAogCS8qIENvcHkgb3VyIGNhcGFiaWxpdGllcyBmcm9tIE1JSV9CTVNSIHRvIE1JSV9BRFZFUlRJU0UgKi8KLQlTTUNfR0VUX1BIWV9CTVNSKHBoeWFkZHIsIG15X3BoeV9jYXBzKTsKKwlTTUNfR0VUX1BIWV9CTVNSKGxwLCBwaHlhZGRyLCBteV9waHlfY2Fwcyk7CiAJaWYgKCEobXlfcGh5X2NhcHMgJiBCTVNSX0FORUdDQVBBQkxFKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJBdXRvIG5lZ290aWF0aW9uIE5PVCBzdXBwb3J0ZWRcbiIpOwogCQlzbWM5MTF4X3BoeV9maXhlZChkZXYpOwpAQCAtMTAxMSw3ICs5NTAsNyBAQAogCQlteV9hZF9jYXBzICY9IH4oQURWRVJUSVNFXzEwMEZVTEx8QURWRVJUSVNFXzEwRlVMTCk7CiAKIAkvKiBVcGRhdGUgb3VyIEF1dG8tTmVnIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKi8KLQlTTUNfU0VUX1BIWV9NSUlfQURWKHBoeWFkZHIsIG15X2FkX2NhcHMpOworCVNNQ19TRVRfUEhZX01JSV9BRFYobHAsIHBoeWFkZHIsIG15X2FkX2NhcHMpOwogCWxwLT5taWkuYWR2ZXJ0aXNpbmcgPSBteV9hZF9jYXBzOwogCiAJLyoKQEAgLTEwMjAsMTMgKzk1OSwxMyBAQAogCSAqIHRoZSBsaW5rIGRvZXMgbm90IGNvbWUgdXAuCiAJICovCiAJdWRlbGF5KDEwKTsKLQlTTUNfR0VUX1BIWV9NSUlfQURWKHBoeWFkZHIsIHN0YXR1cyk7CisJU01DX0dFVF9QSFlfTUlJX0FEVihscCwgcGh5YWRkciwgc3RhdHVzKTsKIAogCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBwaHkgY2Fwcz0weCUwNHhcbiIsIGRldi0+bmFtZSwgbXlfcGh5X2NhcHMpOwogCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBwaHkgYWR2ZXJ0aXNlZCBjYXBzPTB4JTA0eFxuIiwgZGV2LT5uYW1lLCBteV9hZF9jYXBzKTsKIAogCS8qIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiBwcm9jZXNzIGluIG9yZGVyIHRvIGFkdmVydGlzZSBteSBjYXBzICovCi0JU01DX1NFVF9QSFlfQk1DUihwaHlhZGRyLCBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOworCVNNQ19TRVRfUEhZX0JNQ1IobHAsIHBoeWFkZHIsIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CiAKIAlzbWM5MTF4X3BoeV9jaGVja19tZWRpYShkZXYsIDEpOwogCkBAIC0xMDQzLDcgKzk4Miw2IEBACiBzdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJaW50IHBoeWFkZHIgPSBscC0+bWlpLnBoeV9pZDsKIAlpbnQgc3RhdHVzOwogCkBAIC0xMDU0LDExICs5OTIsMTEgQEAKIAogCXNtYzkxMXhfcGh5X2NoZWNrX21lZGlhKGRldiwgMCk7CiAJLyogcmVhZCB0byBjbGVhciBzdGF0dXMgYml0cyAqLwotCVNNQ19HRVRfUEhZX0lOVF9TUkMocGh5YWRkcixzdGF0dXMpOworCVNNQ19HRVRfUEhZX0lOVF9TUkMobHAsIHBoeWFkZHIsc3RhdHVzKTsKIAlEQkcoU01DX0RFQlVHX01JU0MsICIlczogUEhZIGludGVycnVwdCBzdGF0dXMgMHglMDR4XG4iLAogCQlkZXYtPm5hbWUsIHN0YXR1cyAmIDB4ZmZmZik7CiAJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IEFGQ19DRkcgMHglMDh4XG4iLAotCQlkZXYtPm5hbWUsIFNNQ19HRVRfQUZDX0NGRygpKTsKKwkJZGV2LT5uYW1lLCBTTUNfR0VUX0FGQ19DRkcobHApKTsKIH0KIAogLyotLS0gRU5EIFBIWSBDT05UUk9MIEFORCBDT05GSUdVUkFUSU9OLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMDcwLDcgKzEwMDgsNiBAQAogc3RhdGljIGlycXJldHVybl90IHNtYzkxMXhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzLCBtYXNrLCB0aW1lb3V0OwogCXVuc2lnbmVkIGludCByeF9vdmVycnVuPTAsIGNyLCBwa3RzOwpAQCAtMTA4MSwyMSArMTAxOCwyMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCiAJLyogU3B1cmlvdXMgaW50ZXJydXB0IGNoZWNrICovCi0JaWYgKChTTUNfR0VUX0lSUV9DRkcoKSAmIChJTlRfQ0ZHX0lSUV9JTlRfIHwgSU5UX0NGR19JUlFfRU5fKSkgIT0KKwlpZiAoKFNNQ19HRVRfSVJRX0NGRyhscCkgJiAoSU5UX0NGR19JUlFfSU5UXyB8IElOVF9DRkdfSVJRX0VOXykpICE9CiAJCShJTlRfQ0ZHX0lSUV9JTlRfIHwgSU5UX0NGR19JUlFfRU5fKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCi0JbWFzayA9IFNNQ19HRVRfSU5UX0VOKCk7Ci0JU01DX1NFVF9JTlRfRU4oMCk7CisJbWFzayA9IFNNQ19HRVRfSU5UX0VOKGxwKTsKKwlTTUNfU0VUX0lOVF9FTihscCwgMCk7CiAKIAkvKiBzZXQgYSB0aW1lb3V0IHZhbHVlLCBzbyBJIGRvbid0IHN0YXkgaGVyZSBmb3JldmVyICovCiAJdGltZW91dCA9IDg7CiAKIAogCWRvIHsKLQkJc3RhdHVzID0gU01DX0dFVF9JTlQoKTsKKwkJc3RhdHVzID0gU01DX0dFVF9JTlQobHApOwogCiAJCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBJTlQgMHglMDh4IE1BU0sgMHglMDh4IE9VVFNJREUgTUFTSyAweCUwOHhcbiIsCiAJCQlkZXYtPm5hbWUsIHN0YXR1cywgbWFzaywgc3RhdHVzICYgfm1hc2spOwpAQCAtMTEwNiw1MyArMTA0Myw1MyBAQAogCiAJCS8qIEhhbmRsZSBTVyBpbnRlcnJ1cHQgY29uZGl0aW9uICovCiAJCWlmIChzdGF0dXMgJiBJTlRfU1RTX1NXX0lOVF8pIHsKLQkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfU1dfSU5UXyk7CisJCQlTTUNfQUNLX0lOVChscCwgSU5UX1NUU19TV19JTlRfKTsKIAkJCW1hc2sgJj0gfklOVF9FTl9TV19JTlRfRU5fOwogCQl9CiAJCS8qIEhhbmRsZSB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMgKi8KIAkJaWYgKHN0YXR1cyAmIElOVF9TVFNfUlhFXykgewotCQkJU01DX0FDS19JTlQoSU5UX1NUU19SWEVfKTsKKwkJCVNNQ19BQ0tfSU5UKGxwLCBJTlRfU1RTX1JYRV8pOwogCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJfQogCQlpZiAoc3RhdHVzICYgSU5UX1NUU19SWERGSF9JTlRfKSB7Ci0JCQlTTUNfQUNLX0lOVChJTlRfU1RTX1JYREZIX0lOVF8pOwotCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKz1TTUNfR0VUX1JYX0RST1AoKTsKKwkJCVNNQ19BQ0tfSU5UKGxwLCBJTlRfU1RTX1JYREZIX0lOVF8pOworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKz1TTUNfR0VUX1JYX0RST1AobHApOwogCQkgfQogCQkvKiBVbmRvY3VtZW50ZWQgaW50ZXJydXB0LXdoYXQgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGhlcmU/ICovCiAJCWlmIChzdGF0dXMgJiBJTlRfU1RTX1JYREZfSU5UXykgewotCQkJU01DX0FDS19JTlQoSU5UX1NUU19SWERGX0lOVF8pOworCQkJU01DX0FDS19JTlQobHAsIElOVF9TVFNfUlhERl9JTlRfKTsKIAkJfQogCiAJCS8qIFJ4IERhdGEgRklGTyBleGNlZWRzIHNldCBsZXZlbCAqLwogCQlpZiAoc3RhdHVzICYgSU5UX1NUU19SREZMXykgewogCQkJaWYgKElTX1JFVl9BKGxwLT5yZXZpc2lvbikpIHsKIAkJCQlyeF9vdmVycnVuPTE7Ci0JCQkJU01DX0dFVF9NQUNfQ1IoY3IpOworCQkJCVNNQ19HRVRfTUFDX0NSKGxwLCBjcik7CiAJCQkJY3IgJj0gfk1BQ19DUl9SWEVOXzsKLQkJCQlTTUNfU0VUX01BQ19DUihjcik7CisJCQkJU01DX1NFVF9NQUNfQ1IobHAsIGNyKTsKIAkJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJYIG92ZXJydW5cbiIsIGRldi0+bmFtZSk7CiAJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQl9Ci0JCQlTTUNfQUNLX0lOVChJTlRfU1RTX1JERkxfKTsKKwkJCVNNQ19BQ0tfSU5UKGxwLCBJTlRfU1RTX1JERkxfKTsKIAkJfQogCQlpZiAoc3RhdHVzICYgSU5UX1NUU19SREZPXykgewogCQkJaWYgKCFJU19SRVZfQShscC0+cmV2aXNpb24pKSB7Ci0JCQkJU01DX0dFVF9NQUNfQ1IoY3IpOworCQkJCVNNQ19HRVRfTUFDX0NSKGxwLCBjcik7CiAJCQkJY3IgJj0gfk1BQ19DUl9SWEVOXzsKLQkJCQlTTUNfU0VUX01BQ19DUihjcik7CisJCQkJU01DX1NFVF9NQUNfQ1IobHAsIGNyKTsKIAkJCQlyeF9vdmVycnVuPTE7CiAJCQkJREJHKFNNQ19ERUJVR19SWCwgIiVzOiBSWCBvdmVycnVuXG4iLCBkZXYtPm5hbWUpOwogCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQkJfQotCQkJU01DX0FDS19JTlQoSU5UX1NUU19SREZPXyk7CisJCQlTTUNfQUNLX0lOVChscCwgSU5UX1NUU19SREZPXyk7CiAJCX0KIAkJLyogSGFuZGxlIHJlY2VpdmUgY29uZGl0aW9uICovCiAJCWlmICgoc3RhdHVzICYgSU5UX1NUU19SU0ZMXykgfHwgcnhfb3ZlcnJ1bikgewogCQkJdW5zaWduZWQgaW50IGZpZm87CiAJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJYIGlycVxuIiwgZGV2LT5uYW1lKTsKLQkJCWZpZm8gPSBTTUNfR0VUX1JYX0ZJRk9fSU5GKCk7CisJCQlmaWZvID0gU01DX0dFVF9SWF9GSUZPX0lORihscCk7CiAJCQlwa3RzID0gKGZpZm8gJiBSWF9GSUZPX0lORl9SWFNVU0VEXykgPj4gMTY7CiAJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJ4IEZJRk8gcGt0cyAlZCwgYnl0ZXMgJWRcbiIsCiAJCQkJZGV2LT5uYW1lLCBwa3RzLCBmaWZvICYgMHhGRkZGICk7CkBAIC0xMTYzLDYxICsxMTAwLDYxIEBACiAJCQkJCURCRyhTTUNfREVCVUdfUlggfCBTTUNfREVCVUdfRE1BLAogCQkJCQkJIiVzOiBSWCBETUEgYWN0aXZlXG4iLCBkZXYtPm5hbWUpOwogCQkJCQkvKiBUaGUgRE1BIGlzIGFscmVhZHkgcnVubmluZyBzbyB1cCB0aGUgSVJRIHRocmVzaG9sZCAqLwotCQkJCQlmaWZvID0gU01DX0dFVF9GSUZPX0lOVCgpICYgfjB4RkY7CisJCQkJCWZpZm8gPSBTTUNfR0VUX0ZJRk9fSU5UKGxwKSAmIH4weEZGOwogCQkJCQlmaWZvIHw9IHBrdHMgJiAweEZGOwogCQkJCQlEQkcoU01DX0RFQlVHX1JYLAogCQkJCQkJIiVzOiBTZXR0aW5nIFJYIHN0YXQgRklGTyB0aHJlc2hvbGQgdG8gJWRcbiIsCiAJCQkJCQlkZXYtPm5hbWUsIGZpZm8gJiAweGZmKTsKLQkJCQkJU01DX1NFVF9GSUZPX0lOVChmaWZvKTsKKwkJCQkJU01DX1NFVF9GSUZPX0lOVChscCwgZmlmbyk7CiAJCQkJfSBlbHNlCiAjZW5kaWYKIAkJCQlzbWM5MTF4X3JjdihkZXYpOwogCQkJfQotCQkJU01DX0FDS19JTlQoSU5UX1NUU19SU0ZMXyk7CisJCQlTTUNfQUNLX0lOVChscCwgSU5UX1NUU19SU0ZMXyk7CiAJCX0KIAkJLyogSGFuZGxlIHRyYW5zbWl0IEZJRk8gYXZhaWxhYmxlICovCiAJCWlmIChzdGF0dXMgJiBJTlRfU1RTX1RERkFfKSB7CiAJCQlEQkcoU01DX0RFQlVHX1RYLCAiJXM6IFRYIGRhdGEgRklGTyBzcGFjZSBhdmFpbGFibGUgaXJxXG4iLCBkZXYtPm5hbWUpOwotCQkJU01DX1NFVF9GSUZPX1REQSgweEZGKTsKKwkJCVNNQ19TRVRfRklGT19UREEobHAsIDB4RkYpOwogCQkJbHAtPnR4X3Rocm90dGxlID0gMDsKICNpZmRlZiBTTUNfVVNFX0RNQQogCQkJaWYgKCFscC0+dHhkbWFfYWN0aXZlKQogI2VuZGlmCiAJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJU01DX0FDS19JTlQoSU5UX1NUU19UREZBXyk7CisJCQlTTUNfQUNLX0lOVChscCwgSU5UX1NUU19UREZBXyk7CiAJCX0KIAkJLyogSGFuZGxlIHRyYW5zbWl0IGRvbmUgY29uZGl0aW9uICovCiAjaWYgMQogCQlpZiAoc3RhdHVzICYgKElOVF9TVFNfVFNGTF8gfCBJTlRfU1RTX0dQVF9JTlRfKSkgewogCQkJREJHKFNNQ19ERUJVR19UWCB8IFNNQ19ERUJVR19NSVNDLAogCQkJCSIlczogVHggc3RhdCBGSUZPIGxpbWl0ICglZCkgL0dQVCBpcnFcbiIsCi0JCQkJZGV2LT5uYW1lLCAoU01DX0dFVF9GSUZPX0lOVCgpICYgMHgwMGZmMDAwMCkgPj4gMTYpOworCQkJCWRldi0+bmFtZSwgKFNNQ19HRVRfRklGT19JTlQobHApICYgMHgwMGZmMDAwMCkgPj4gMTYpOwogCQkJc21jOTExeF90eChkZXYpOwotCQkJU01DX1NFVF9HUFRfQ0ZHKEdQVF9DRkdfVElNRVJfRU5fIHwgMTAwMDApOwotCQkJU01DX0FDS19JTlQoSU5UX1NUU19UU0ZMXyk7Ci0JCQlTTUNfQUNLX0lOVChJTlRfU1RTX1RTRkxfIHwgSU5UX1NUU19HUFRfSU5UXyk7CisJCQlTTUNfU0VUX0dQVF9DRkcobHAsIEdQVF9DRkdfVElNRVJfRU5fIHwgMTAwMDApOworCQkJU01DX0FDS19JTlQobHAsIElOVF9TVFNfVFNGTF8pOworCQkJU01DX0FDS19JTlQobHAsIElOVF9TVFNfVFNGTF8gfCBJTlRfU1RTX0dQVF9JTlRfKTsKIAkJfQogI2Vsc2UKIAkJaWYgKHN0YXR1cyAmIElOVF9TVFNfVFNGTF8pIHsKIAkJCURCRyhTTUNfREVCVUdfVFgsICIlczogVFggc3RhdHVzIEZJRk8gbGltaXQgKCVkKSBpcnEgXG4iLCBkZXYtPm5hbWUsICk7CiAJCQlzbWM5MTF4X3R4KGRldik7Ci0JCQlTTUNfQUNLX0lOVChJTlRfU1RTX1RTRkxfKTsKKwkJCVNNQ19BQ0tfSU5UKGxwLCBJTlRfU1RTX1RTRkxfKTsKIAkJfQogCiAJCWlmIChzdGF0dXMgJiBJTlRfU1RTX0dQVF9JTlRfKSB7CiAJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IElSUV9DRkcgMHglMDh4IEZJRk9fSU5UIDB4JTA4eCBSWF9DRkcgMHglMDh4XG4iLAogCQkJCWRldi0+bmFtZSwKLQkJCQlTTUNfR0VUX0lSUV9DRkcoKSwKLQkJCQlTTUNfR0VUX0ZJRk9fSU5UKCksCi0JCQkJU01DX0dFVF9SWF9DRkcoKSk7CisJCQkJU01DX0dFVF9JUlFfQ0ZHKGxwKSwKKwkJCQlTTUNfR0VUX0ZJRk9fSU5UKGxwKSwKKwkJCQlTTUNfR0VUX1JYX0NGRyhscCkpOwogCQkJREJHKFNNQ19ERUJVR19SWCwgIiVzOiBSeCBTdGF0IEZJRk8gVXNlZCAweCUwMnggIgogCQkJCSJEYXRhIEZJRk8gVXNlZCAweCUwNHggU3RhdCBGSUZPIDB4JTA4eFxuIiwKIAkJCQlkZXYtPm5hbWUsCi0JCQkJKFNNQ19HRVRfUlhfRklGT19JTkYoKSAmIDB4MDBmZjAwMDApID4+IDE2LAotCQkJCVNNQ19HRVRfUlhfRklGT19JTkYoKSAmIDB4ZmZmZiwKLQkJCQlTTUNfR0VUX1JYX1NUU19GSUZPX1BFRUsoKSk7Ci0JCQlTTUNfU0VUX0dQVF9DRkcoR1BUX0NGR19USU1FUl9FTl8gfCAxMDAwMCk7Ci0JCQlTTUNfQUNLX0lOVChJTlRfU1RTX0dQVF9JTlRfKTsKKwkJCQkoU01DX0dFVF9SWF9GSUZPX0lORihscCkgJiAweDAwZmYwMDAwKSA+PiAxNiwKKwkJCQlTTUNfR0VUX1JYX0ZJRk9fSU5GKGxwKSAmIDB4ZmZmZiwKKwkJCQlTTUNfR0VUX1JYX1NUU19GSUZPX1BFRUsobHApKTsKKwkJCVNNQ19TRVRfR1BUX0NGRyhscCwgR1BUX0NGR19USU1FUl9FTl8gfCAxMDAwMCk7CisJCQlTTUNfQUNLX0lOVChscCwgSU5UX1NUU19HUFRfSU5UXyk7CiAJCX0KICNlbmRpZgogCkBAIC0xMjI1LDEyICsxMTYyLDEyIEBACiAJCWlmIChzdGF0dXMgJiBJTlRfU1RTX1BIWV9JTlRfKSB7CiAJCQlEQkcoU01DX0RFQlVHX01JU0MsICIlczogUEhZIGlycVxuIiwgZGV2LT5uYW1lKTsKIAkJCXNtYzkxMXhfcGh5X2ludGVycnVwdChkZXYpOwotCQkJU01DX0FDS19JTlQoSU5UX1NUU19QSFlfSU5UXyk7CisJCQlTTUNfQUNLX0lOVChscCwgSU5UX1NUU19QSFlfSU5UXyk7CiAJCX0KIAl9IHdoaWxlICgtLXRpbWVvdXQpOwogCiAJLyogcmVzdG9yZSBtYXNrIHN0YXRlICovCi0JU01DX1NFVF9JTlRfRU4obWFzayk7CisJU01DX1NFVF9JTlRfRU4obHAsIG1hc2spOwogCiAJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IEludGVycnVwdCBkb25lICglZCBsb29wcylcbiIsCiAJCWRldi0+bmFtZSwgOC10aW1lb3V0KTsKQEAgLTEzMzIsMjIgKzEyNjksMjEgQEAKIHN0YXRpYyB2b2lkIHNtYzkxMXhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlpbnQgc3RhdHVzLCBtYXNrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlzdGF0dXMgPSBTTUNfR0VUX0lOVCgpOwotCW1hc2sgPSBTTUNfR0VUX0lOVF9FTigpOworCXN0YXR1cyA9IFNNQ19HRVRfSU5UKGxwKTsKKwltYXNrID0gU01DX0dFVF9JTlRfRU4obHApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IElOVCAweCUwMnggTUFTSyAweCUwMnggXG4iLAogCQlkZXYtPm5hbWUsIHN0YXR1cywgbWFzayk7CiAKIAkvKiBEdW1wIHRoZSBjdXJyZW50IFRYIEZJRk8gY29udGVudHMgYW5kIHJlc3RhcnQgKi8KLQltYXNrID0gU01DX0dFVF9UWF9DRkcoKTsKLQlTTUNfU0VUX1RYX0NGRyhtYXNrIHwgVFhfQ0ZHX1RYU19EVU1QXyB8IFRYX0NGR19UWERfRFVNUF8pOworCW1hc2sgPSBTTUNfR0VUX1RYX0NGRyhscCk7CisJU01DX1NFVF9UWF9DRkcobHAsIG1hc2sgfCBUWF9DRkdfVFhTX0RVTVBfIHwgVFhfQ0ZHX1RYRF9EVU1QXyk7CiAJLyoKIAkgKiBSZWNvbmZpZ3VyaW5nIHRoZSBQSFkgZG9lc24ndCBzZWVtIGxpa2UgYSBiYWQgaWRlYSBoZXJlLCBidXQKIAkgKiBzbWM5MTF4X3BoeV9jb25maWd1cmUoKSBjYWxscyBtc2xlZXAoKSB3aGljaCBjYWxscyBzY2hlZHVsZV90aW1lb3V0KCkKQEAgLTEzNzAsNyArMTMwNiw2IEBACiBzdGF0aWMgdm9pZCBzbWM5MTF4X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbXVsdGljYXN0X3RhYmxlWzJdOwogCXVuc2lnbmVkIGludCBtY3IsIHVwZGF0ZV9tdWx0aWNhc3QgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMzc4LDcgKzEzMTMsNyBAQAogCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCVNNQ19HRVRfTUFDX0NSKG1jcik7CisJU01DX0dFVF9NQUNfQ1IobHAsIG1jcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKQEAgLTE0NTUsMTMgKzEzOTAsMTMgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlTTUNfU0VUX01BQ19DUihtY3IpOworCVNNQ19TRVRfTUFDX0NSKGxwLCBtY3IpOwogCWlmICh1cGRhdGVfbXVsdGljYXN0KSB7CiAJCURCRyhTTUNfREVCVUdfTUlTQywKIAkJCSIlczogdXBkYXRlIG1jYXN0IGhhc2ggdGFibGUgMHglMDh4IDB4JTA4eFxuIiwKIAkJCWRldi0+bmFtZSwgbXVsdGljYXN0X3RhYmxlWzBdLCBtdWx0aWNhc3RfdGFibGVbMV0pOwotCQlTTUNfU0VUX0hBU0hMKG11bHRpY2FzdF90YWJsZVswXSk7Ci0JCVNNQ19TRVRfSEFTSEgobXVsdGljYXN0X3RhYmxlWzFdKTsKKwkJU01DX1NFVF9IQVNITChscCwgbXVsdGljYXN0X3RhYmxlWzBdKTsKKwkJU01DX1NFVF9IQVNISChscCwgbXVsdGljYXN0X3RhYmxlWzFdKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE1NDUsNyArMTQ4MCw2IEBACiBzbWM5MTF4X2V0aHRvb2xfZ2V0c2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCWludCByZXQsIHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNTczLDcgKzE1MDcsNyBAQAogCQllbHNlCiAJCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAkJY21kLT5wb3J0ID0gMDsKLQkJU01DX0dFVF9QSFlfU1BFQ0lBTChscC0+bWlpLnBoeV9pZCwgc3RhdHVzKTsKKwkJU01DX0dFVF9QSFlfU1BFQ0lBTChscCwgbHAtPm1paS5waHlfaWQsIHN0YXR1cyk7CiAJCWNtZC0+ZHVwbGV4ID0KIAkJCShzdGF0dXMgJiAoUEhZX1NQRUNJQUxfU1BEXzEwRlVMTF8gfCBQSFlfU1BFQ0lBTF9TUERfMTAwRlVMTF8pKSA/CiAJCQkJRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKQEAgLTE2NTQsNyArMTU4OCw2IEBACiBzdGF0aWMgdm9pZCBzbWM5MTF4X2V0aHRvb2xfZ2V0cmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJCQkJCSBzdHJ1Y3QgZXRodG9vbF9yZWdzKiByZWdzLCB2b2lkICpidWYpCiB7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHJlZyxpLGo9MDsKQEAgLTE2NjIsMTcgKzE1OTUsMTcgQEAKIAogCXJlZ3MtPnZlcnNpb24gPSBscC0+dmVyc2lvbjsKIAlmb3IoaT1JRF9SRVY7aTw9RTJQX0NNRDtpKz00KSB7Ci0JCWRhdGFbaisrXSA9IFNNQ19pbmwoaW9hZGRyLGkpOworCQlkYXRhW2orK10gPSBTTUNfaW5sKGxwLCBpKTsKIAl9CiAJZm9yKGk9TUFDX0NSO2k8PVdVQ1NSO2krKykgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQkJU01DX0dFVF9NQUNfQ1NSKGksIHJlZyk7CisJCVNNQ19HRVRfTUFDX0NTUihscCwgaSwgcmVnKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJZGF0YVtqKytdID0gcmVnOwogCX0KIAlmb3IoaT0wO2k8PTMxO2krKykgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQkJU01DX0dFVF9NSUkoaSwgbHAtPm1paS5waHlfaWQsIHJlZyk7CisJCVNNQ19HRVRfTUlJKGxwLCBpLCBscC0+bWlpLnBoeV9pZCwgcmVnKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJZGF0YVtqKytdID0gcmVnICYgMHhGRkZGOwogCX0KQEAgLTE2ODAsMTEgKzE2MTMsMTEgQEAKIAogc3RhdGljIGludCBzbWM5MTF4X2V0aHRvb2xfd2FpdF9lZXByb21fcmVhZHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAJaW50IGUycF9jbWQ7CiAKLQllMnBfY21kID0gU01DX0dFVF9FMlBfQ01EKCk7CisJZTJwX2NtZCA9IFNNQ19HRVRfRTJQX0NNRChscCk7CiAJZm9yKHRpbWVvdXQ9MTA7KGUycF9jbWQgJiBFMlBfQ01EX0VQQ19CVVNZXykgJiYgdGltZW91dDsgdGltZW91dC0tKSB7CiAJCWlmIChlMnBfY21kICYgRTJQX0NNRF9FUENfVElNRU9VVF8pIHsKIAkJCVBSSU5USygiJXM6ICVzIHRpbWVvdXQgd2FpdGluZyBmb3IgRUVQUk9NIHRvIHJlc3BvbmRcbiIsCkBAIC0xNjkyLDcgKzE2MjUsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJbWRlbGF5KDEpOwotCQllMnBfY21kID0gU01DX0dFVF9FMlBfQ01EKCk7CisJCWUycF9jbWQgPSBTTUNfR0VUX0UyUF9DTUQobHApOwogCX0KIAlpZiAodGltZW91dCA9PSAwKSB7CiAJCVBSSU5USygiJXM6ICVzIHRpbWVvdXQgd2FpdGluZyBmb3IgRUVQUk9NIENNRCBub3QgYnVzeVxuIiwKQEAgLTE3MDUsMTIgKzE2MzgsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNtYzkxMXhfZXRodG9vbF93cml0ZV9lZXByb21fY21kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkJCQkJCQkJaW50IGNtZCwgaW50IGFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXQ7CiAKIAlpZiAoKHJldCA9IHNtYzkxMXhfZXRodG9vbF93YWl0X2VlcHJvbV9yZWFkeShkZXYpKSE9MCkKIAkJcmV0dXJuIHJldDsKLQlTTUNfU0VUX0UyUF9DTUQoRTJQX0NNRF9FUENfQlVTWV8gfAorCVNNQ19TRVRfRTJQX0NNRChscCwgRTJQX0NNRF9FUENfQlVTWV8gfAogCQkoKGNtZCkgJiAoMHg3PDwyOCkpIHwKIAkJKChhZGRyKSAmIDB4RkYpKTsKIAlyZXR1cm4gMDsKQEAgLTE3MTksMjQgKzE2NTIsMjQgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNtYzkxMXhfZXRodG9vbF9yZWFkX2VlcHJvbV9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkJCQkJCQkJdTggKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXQ7CiAKIAlpZiAoKHJldCA9IHNtYzkxMXhfZXRodG9vbF93YWl0X2VlcHJvbV9yZWFkeShkZXYpKSE9MCkKIAkJcmV0dXJuIHJldDsKLQkqZGF0YSA9IFNNQ19HRVRfRTJQX0RBVEEoKTsKKwkqZGF0YSA9IFNNQ19HRVRfRTJQX0RBVEEobHApOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzbWM5MTF4X2V0aHRvb2xfd3JpdGVfZWVwcm9tX2J5dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCQkJCQkJCQkgdTggZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKIAogCWlmICgocmV0ID0gc21jOTExeF9ldGh0b29sX3dhaXRfZWVwcm9tX3JlYWR5KGRldikpIT0wKQogCQlyZXR1cm4gcmV0OwotCVNNQ19TRVRfRTJQX0RBVEEoZGF0YSk7CisJU01DX1NFVF9FMlBfREFUQShscCwgZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MDMsOCArMTczNiw5IEBACiAgKiBUaGlzIHJvdXRpbmUgaGFzIGEgc2ltcGxlIHB1cnBvc2UgLS0gbWFrZSB0aGUgU01DIGNoaXAgZ2VuZXJhdGUgYW4KICAqIGludGVycnVwdCwgc28gYW4gYXV0by1kZXRlY3Qgcm91dGluZSBjYW4gZGV0ZWN0IGl0LCBhbmQgZmluZCB0aGUgSVJRLAogICovCi1zdGF0aWMgaW50IF9faW5pdCBzbWM5MTF4X2ZpbmRpcnEodW5zaWduZWQgbG9uZyBpb2FkZHIpCitzdGF0aWMgaW50IF9faW5pdCBzbWM5MTF4X2ZpbmRpcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCB0aW1lb3V0ID0gMjA7CiAJdW5zaWduZWQgbG9uZyBjb29raWU7CiAKQEAgLTE4MTYsNyArMTc1MCw3IEBACiAJICogRm9yY2UgYSBTVyBpbnRlcnJ1cHQKIAkgKi8KIAotCVNNQ19TRVRfSU5UX0VOKElOVF9FTl9TV19JTlRfRU5fKTsKKwlTTUNfU0VUX0lOVF9FTihscCwgSU5UX0VOX1NXX0lOVF9FTl8pOwogCiAJLyoKIAkgKiBXYWl0IHVudGlsIHBvc2l0aXZlIHRoYXQgdGhlIGludGVycnVwdCBoYXMgYmVlbiBnZW5lcmF0ZWQKQEAgLTE4MjQsNyArMTc1OCw3IEBACiAJZG8gewogCQlpbnQgaW50X3N0YXR1czsKIAkJdWRlbGF5KDEwKTsKLQkJaW50X3N0YXR1cyA9IFNNQ19HRVRfSU5UX0VOKCk7CisJCWludF9zdGF0dXMgPSBTTUNfR0VUX0lOVF9FTihscCk7CiAJCWlmIChpbnRfc3RhdHVzICYgSU5UX0VOX1NXX0lOVF9FTl8pCiAJCQkgYnJlYWs7CQkvKiBnb3QgdGhlIGludGVycnVwdCAqLwogCX0gd2hpbGUgKC0tdGltZW91dCk7CkBAIC0xODM3LDcgKzE3NzEsNyBAQAogCSAqLwogCiAJLyogYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMgYWdhaW4gKi8KLQlTTUNfU0VUX0lOVF9FTigwKTsKKwlTTUNfU0VUX0lOVF9FTihscCwgMCk7CiAKIAkvKiBhbmQgcmV0dXJuIHdoYXQgSSBmb3VuZCAqLwogCXJldHVybiBwcm9iZV9pcnFfb2ZmKGNvb2tpZSk7CkBAIC0xODY2LDE3ICsxODAwLDE4IEBACiAgKiBvICBhY3R1YWxseSBHUkFCIHRoZSBpcnEuCiAgKiBvICBHUkFCIHRoZSByZWdpb24KICAqLwotc3RhdGljIGludCBfX2luaXQgc21jOTExeF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3N0YXRpYyBpbnQgX19pbml0IHNtYzkxMXhfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpLCByZXR2YWw7CiAJdW5zaWduZWQgaW50IHZhbCwgY2hpcF9pZCwgcmV2aXNpb247CiAJY29uc3QgY2hhciAqdmVyc2lvbl9zdHJpbmc7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKIAlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBGaXJzdCwgc2VlIGlmIHRoZSBlbmRpYW4gd29yZCBpcyByZWNvZ25pemVkICovCi0JdmFsID0gU01DX0dFVF9CWVRFX1RFU1QoKTsKKwl2YWwgPSBTTUNfR0VUX0JZVEVfVEVTVChscCk7CiAJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IGVuZGlhbiBwcm9iZSByZXR1cm5lZCAweCUwNHhcbiIsIENBUkROQU1FLCB2YWwpOwogCWlmICh2YWwgIT0gMHg4NzY1NDMyMSkgewogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgY2hpcCBlbmRpYW4gMHgwOCV4XG4iLHZhbCk7CkBAIC0xODg5LDcgKzE4MjQsNyBAQAogCSAqIHJlY29nbml6ZS4JVGhlc2UgbWlnaHQgbmVlZCB0byBiZSBhZGRlZCB0byBsYXRlciwKIAkgKiBhcyBmdXR1cmUgcmV2aXNpb25zIGNvdWxkIGJlIGFkZGVkLgogCSAqLwotCWNoaXBfaWQgPSBTTUNfR0VUX1BOKCk7CisJY2hpcF9pZCA9IFNNQ19HRVRfUE4obHApOwogCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBpZCBwcm9iZSByZXR1cm5lZCAweCUwNHhcbiIsIENBUkROQU1FLCBjaGlwX2lkKTsKIAlmb3IoaT0wO2NoaXBfaWRzW2ldLmlkICE9IDA7IGkrKykgewogCQlpZiAoY2hpcF9pZHNbaV0uaWQgPT0gY2hpcF9pZCkgYnJlYWs7CkBAIC0xOTAxLDcgKzE4MzYsNyBAQAogCX0KIAl2ZXJzaW9uX3N0cmluZyA9IGNoaXBfaWRzW2ldLm5hbWU7CiAKLQlyZXZpc2lvbiA9IFNNQ19HRVRfUkVWKCk7CisJcmV2aXNpb24gPSBTTUNfR0VUX1JFVihscCk7CiAJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IHJldmlzaW9uID0gMHglMDR4XG4iLCBDQVJETkFNRSwgcmV2aXNpb24pOwogCiAJLyogQXQgdGhpcyBwb2ludCBJJ2xsIGFzc3VtZSB0aGF0IHRoZSBjaGlwIGlzIGFuIFNNQzkxMXguICovCkBAIC0xOTE1LDcgKzE4NTAsNiBAQAogCX0KIAogCS8qIGZpbGwgaW4gc29tZSBvZiB0aGUgZmllbGRzICovCi0JZGV2LT5iYXNlX2FkZHIgPSBpb2FkZHI7CiAJbHAtPnZlcnNpb24gPSBjaGlwX2lkc1tpXS5pZDsKIAlscC0+cmV2aXNpb24gPSByZXZpc2lvbjsKIAlscC0+dHhfZmlmb19rYiA9IHR4X2ZpZm9fa2I7CkBAIC0xOTc0LDcgKzE5MDgsNyBAQAogCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCi0JU01DX0dFVF9NQUNfQUREUihkZXYtPmRldl9hZGRyKTsKKwlTTUNfR0VUX01BQ19BRERSKGxwLCBkZXYtPmRldl9hZGRyKTsKIAogCS8qIG5vdywgcmVzZXQgdGhlIGNoaXAsIGFuZCBwdXQgaXQgaW50byBhIGtub3duIHN0YXRlICovCiAJc21jOTExeF9yZXNldChkZXYpOwpAQCAtMTk5MSw3ICsxOTI1LDcgQEAKIAogCQl0cmlhbHMgPSAzOwogCQl3aGlsZSAodHJpYWxzLS0pIHsKLQkJCWRldi0+aXJxID0gc21jOTExeF9maW5kaXJxKGlvYWRkcik7CisJCQlkZXYtPmlycSA9IHNtYzkxMXhfZmluZGlycShkZXYpOwogCQkJaWYgKGRldi0+aXJxKQogCQkJCWJyZWFrOwogCQkJLyoga2ljayB0aGUgY2FyZCBhbmQgdHJ5IGFnYWluICovCkBAIC0yMDM5LDkgKzE5NzMsMTUgQEAKIAlscC0+Y3RsX3JmZHVwbHggPSAxOwogCWxwLT5jdGxfcnNwZWVkID0gMTAwOwogCisjaWZkZWYgU01DX0RZTkFNSUNfQlVTX0NPTkZJRworCWlycV9mbGFncyA9IGxwLT5jZmcuaXJxX2ZsYWdzOworI2Vsc2UKKwlpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IFNNQ19JUlFfU0VOU0U7CisjZW5kaWYKKwogCS8qIEdyYWIgdGhlIElSUSAqLwogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmc21jOTExeF9pbnRlcnJ1cHQsCi0JCQlJUlFGX1NIQVJFRCB8IFNNQ19JUlFfU0VOU0UsIGRldi0+bmFtZSwgZGV2KTsKKwkJCSAgICAgaXJxX2ZsYWdzLCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfb3V0OwogCkBAIC0yMTExLDYgKzIwNTEsNyBAQAogICovCiBzdGF0aWMgaW50IHNtYzkxMXhfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHA7CkBAIC0yMTQ0LDYgKzIwODUsMTMgQEAKIAluZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJbHAtPm5ldGRldiA9IG5kZXY7CisjaWZkZWYgU01DX0RZTkFNSUNfQlVTX0NPTkZJRworCWlmICghcGQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byByZWxlYXNlX2JvdGg7CisJfQorCW1lbWNweSgmbHAtPmNmZywgcGQsIHNpemVvZihscC0+Y2ZnKSk7CisjZW5kaWYKIAogCWFkZHIgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIFNNQzkxMVhfSU9fRVhURU5UKTsKIAlpZiAoIWFkZHIpIHsKQEAgLTIxNTIsNyArMjEwMCw5IEBACiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmRldik7Ci0JcmV0ID0gc21jOTExeF9wcm9iZShuZGV2LCAodW5zaWduZWQgbG9uZylhZGRyKTsKKwlscC0+YmFzZSA9IGFkZHI7CisJbmRldi0+YmFzZV9hZGRyID0gcmVzLT5zdGFydDsKKwlyZXQgPSBzbWM5MTF4X3Byb2JlKG5kZXYpOwogCWlmIChyZXQgIT0gMCkgewogCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAkJaW91bm1hcChhZGRyKTsKQEAgLTIxNzYsNiArMjEyNiw3IEBACiBzdGF0aWMgaW50IHNtYzkxMXhfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlEQkcoU01DX0RFQlVHX0ZVTkMsICItLT4gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0yMTg3LDcgKzIxMzgsNiBAQAogCiAjaWZkZWYgU01DX1VTRV9ETUEKIAl7Ci0JCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwogCQlpZiAobHAtPnJ4ZG1hICE9IC0xKSB7CiAJCQlTTUNfRE1BX0ZSRUUoZGV2LCBscC0+cnhkbWEpOwogCQl9CkBAIC0yMTk2LDcgKzIxNDYsNyBAQAogCQl9CiAJfQogI2VuZGlmCi0JaW91bm1hcCgodm9pZCAqKW5kZXYtPmJhc2VfYWRkcik7CisJaW91bm1hcChscC0+YmFzZSk7CiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgU01DOTExWF9JT19FWFRFTlQpOwogCkBAIC0yMjA3LDcgKzIxNTcsNyBAQAogc3RhdGljIGludCBzbWM5MTF4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCURCRyhTTUNfREVCVUdfRlVOQywgIi0tPiAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAlpZiAobmRldikgewpAQCAtMjIxNiw3ICsyMTY2LDcgQEAKIAkJCXNtYzkxMXhfc2h1dGRvd24obmRldik7CiAjaWYgUE9XRVJfRE9XTgogCQkJLyogU2V0IEQyIC0gRW5lcmd5IGRldGVjdCBvbmx5IHNldHRpbmcgKi8KLQkJCVNNQ19TRVRfUE1UX0NUUkwoMjw8MTIpOworCQkJU01DX1NFVF9QTVRfQ1RSTChscCwgMjw8MTIpOwogI2VuZGlmCiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKaW5kZXggN2RlZmE2My4uNzZjMTdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaApAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBfU01DOTExWF9IXwogI2RlZmluZSBfU01DOTExWF9IXwogCisjaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgogLyoKICAqIFVzZSB0aGUgRE1BIGZlYXR1cmUgb24gUFhBIGNoaXBzCiAgKi8KQEAgLTM4LDQyICszOSwxNjAgQEAKICAgI2RlZmluZSBTTUNfVVNFXzMyQklUCQkxCiAgICNkZWZpbmUgU01DX0lSUV9TRU5TRQkJSVJRRl9UUklHR0VSX0ZBTExJTkcKICNlbGlmIGRlZmluZWQoQ09ORklHX1NIX01BR0lDX1BBTkVMX1IyKQotICAjZGVmaW5lIFNNQ19VU0VfU0hfRE1BCTAKICAgI2RlZmluZSBTTUNfVVNFXzE2QklUCQkwCiAgICNkZWZpbmUgU01DX1VTRV8zMkJJVAkJMQogICAjZGVmaW5lIFNNQ19JUlFfU0VOU0UJCUlSUUZfVFJJR0dFUl9MT1cKKyNlbHNlCisvKgorICogRGVmYXVsdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBTTUNfRFlOQU1JQ19CVVNfQ09ORklHCiAjZW5kaWYKIAorLyogc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGRyaXZlci4uICovCitzdHJ1Y3Qgc21jOTExeF9sb2NhbCB7CisJLyoKKwkgKiBJZiBJIGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUgRE1BIGlzIGZpbmlzaGVkIGFuZCByZWFkeSB0byByZWxvYWQgYQorCSAqIHBhY2tldCwgSSB3aWxsIHN0b3JlIHRoZSBza2J1ZmYgaGVyZS4gVGhlbiwgdGhlIERNQSB3aWxsIHNlbmQgaXQKKwkgKiBvdXQgYW5kIGZyZWUgaXQuCisJICovCisJc3RydWN0IHNrX2J1ZmYgKnBlbmRpbmdfdHhfc2tiOworCisJLyogdmVyc2lvbi9yZXZpc2lvbiBvZiB0aGUgU01DOTExeCBjaGlwICovCisJdTE2IHZlcnNpb247CisJdTE2IHJldmlzaW9uOworCisJLyogRklGTyBzaXplcyAqLworCWludCB0eF9maWZvX2tiOworCWludCB0eF9maWZvX3NpemU7CisJaW50IHJ4X2ZpZm9fc2l6ZTsKKwlpbnQgYWZjX2NmZzsKKworCS8qIENvbnRhaW5zIHRoZSBjdXJyZW50IGFjdGl2ZSByZWNlaXZlL3BoeSBtb2RlICovCisJaW50IGN0bF9yZmR1cGx4OworCWludCBjdGxfcnNwZWVkOworCisJdTMyIG1zZ19lbmFibGU7CisJdTMyIHBoeV90eXBlOworCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWk7CisKKwkvKiB3b3JrIHF1ZXVlICovCisJc3RydWN0IHdvcmtfc3RydWN0IHBoeV9jb25maWd1cmU7CisKKwlpbnQgdHhfdGhyb3R0bGU7CisJc3BpbmxvY2tfdCBsb2NrOworCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKworI2lmZGVmIFNNQ19VU0VfRE1BCisJLyogRE1BIG5lZWRzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjaGlwICovCisJdV9sb25nIHBoeXNhZGRyOworCWludCByeGRtYTsKKwlpbnQgdHhkbWE7CisJaW50IHJ4ZG1hX2FjdGl2ZTsKKwlpbnQgdHhkbWFfYWN0aXZlOworCXN0cnVjdCBza19idWZmICpjdXJyZW50X3J4X3NrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF90eF9za2I7CisJc3RydWN0IGRldmljZSAqZGV2OworI2VuZGlmCisJdm9pZCBfX2lvbWVtICpiYXNlOworI2lmZGVmIFNNQ19EWU5BTUlDX0JVU19DT05GSUcKKwlzdHJ1Y3Qgc21jOTExeF9wbGF0ZGF0YSBjZmc7CisjZW5kaWYKK307CiAKIC8qCiAgKiBEZWZpbmUgdGhlIGJ1cyB3aWR0aCBzcGVjaWZpYyBJTyBtYWNyb3MKICAqLwogCisjaWZkZWYgU01DX0RZTkFNSUNfQlVTX0NPTkZJRworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgU01DX2lubChzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAsIGludCByZWcpCit7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZSArIHJlZzsKKworCWlmIChscC0+Y2ZnLmZsYWdzICYgU01DOTExWF9VU0VfMzJCSVQpCisJCXJldHVybiByZWFkbChpb2FkZHIpOworCisJaWYgKGxwLT5jZmcuZmxhZ3MgJiBTTUM5MTFYX1VTRV8xNkJJVCkKKwkJcmV0dXJuIHJlYWR3KGlvYWRkcikgfCAocmVhZHcoaW9hZGRyICsgMikgPDwgMTYpOworCisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBTTUNfb3V0bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCwKKwkJCSAgICBpbnQgcmVnKQoreworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2UgKyByZWc7CisKKwlpZiAobHAtPmNmZy5mbGFncyAmIFNNQzkxMVhfVVNFXzMyQklUKSB7CisJCXdyaXRlbCh2YWx1ZSwgaW9hZGRyKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChscC0+Y2ZnLmZsYWdzICYgU01DOTExWF9VU0VfMTZCSVQpIHsKKwkJd3JpdGV3KHZhbHVlICYgMHhmZmZmLCBpb2FkZHIpOworCQl3cml0ZXcodmFsdWUgPj4gMTYsIGlvYWRkciArIDIpOworCQlyZXR1cm47CisJfQorCisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBTTUNfaW5zbChzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAsIGludCByZWcsCisJCQkgICAgICB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZSArIHJlZzsKKworCWlmIChscC0+Y2ZnLmZsYWdzICYgU01DOTExWF9VU0VfMzJCSVQpIHsKKwkJcmVhZHNsKGlvYWRkciwgYWRkciwgY291bnQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxwLT5jZmcuZmxhZ3MgJiBTTUM5MTFYX1VTRV8xNkJJVCkgeworCQlyZWFkc3coaW9hZGRyLCBhZGRyLCBjb3VudCAqIDIpOworCQlyZXR1cm47CisJfQorCisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBTTUNfb3V0c2woc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwLCBpbnQgcmVnLAorCQkJICAgICB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZSArIHJlZzsKKworCWlmIChscC0+Y2ZnLmZsYWdzICYgU01DOTExWF9VU0VfMzJCSVQpIHsKKwkJd3JpdGVzbChpb2FkZHIsIGFkZHIsIGNvdW50KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChscC0+Y2ZnLmZsYWdzICYgU01DOTExWF9VU0VfMTZCSVQpIHsKKwkJd3JpdGVzdyhpb2FkZHIsIGFkZHIsIGNvdW50ICogMik7CisJCXJldHVybjsKKwl9CisKKwlCVUcoKTsKK30KKyNlbHNlCiAjaWYJU01DX1VTRV8xNkJJVAotI2RlZmluZSBTTUNfaW5iKGEsIHIpCQkJIHJlYWRiKChhKSArIChyKSkKLSNkZWZpbmUgU01DX2ludyhhLCByKQkJCSByZWFkdygoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19pbmwoYSwgcikJCQkgKChTTUNfaW53KGEsIHIpICYgMHhGRkZGKSsoU01DX2ludyhhKzIsIHIpPDwxNikpCi0jZGVmaW5lIFNNQ19vdXRiKHYsIGEsIHIpCQkgd3JpdGViKHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dHcodiwgYSwgcikJCSB3cml0ZXcodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0bCh2LCBhLCByKSAJCQkgXAorI2RlZmluZSBTTUNfaW5sKGxwLCByKQkJICgocmVhZHcoKGxwKS0+YmFzZSArIChyKSkgJiAweEZGRkYpICsgKHJlYWR3KChscCktPmJhc2UgKyAocikgKyAyKSA8PCAxNikpCisjZGVmaW5lIFNNQ19vdXRsKHYsIGxwLCByKSAJCQkgXAogCWRvewkJCQkJIFwKLQkJIHdyaXRlbCh2ICYgMHhGRkZGLCAoYSkgKyAocikpOwkgXAotCQkgd3JpdGVsKHYgPj4gMTYsIChhKSArIChyKSArIDIpOyBcCisJCSB3cml0ZXcodiAmIDB4RkZGRiwgKGxwKS0+YmFzZSArIChyKSk7CSBcCisJCSB3cml0ZXcodiA+PiAxNiwgKGxwKS0+YmFzZSArIChyKSArIDIpOyBcCiAJIH0gd2hpbGUgKDApCi0jZGVmaW5lIFNNQ19pbnNsKGEsIHIsIHAsIGwpCSByZWFkc3coKHNob3J0KikoKGEpICsgKHIpKSwgcCwgbCoyKQotI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkJIHdyaXRlc3coKHNob3J0KikoKGEpICsgKHIpKSwgcCwgbCoyKQorI2RlZmluZSBTTUNfaW5zbChscCwgciwgcCwgbCkJIHJlYWRzdygoc2hvcnQqKSgobHApLT5iYXNlICsgKHIpKSwgcCwgbCoyKQorI2RlZmluZSBTTUNfb3V0c2wobHAsIHIsIHAsIGwpCSB3cml0ZXN3KChzaG9ydCopKChscCktPmJhc2UgKyAocikpLCBwLCBsKjIpCiAKICNlbGlmCVNNQ19VU0VfMzJCSVQKLSNkZWZpbmUgU01DX2luYihhLCByKQkJIHJlYWRiKChhKSArIChyKSkKLSNkZWZpbmUgU01DX2ludyhhLCByKQkJIHJlYWR3KChhKSArIChyKSkKLSNkZWZpbmUgU01DX2lubChhLCByKQkJIHJlYWRsKChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dGIodiwgYSwgcikJIHdyaXRlYih2LCAoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19vdXRsKHYsIGEsIHIpCSB3cml0ZWwodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfaW5zbChhLCByLCBwLCBsKQkgcmVhZHNsKChpbnQqKSgoYSkgKyAocikpLCBwLCBsKQotI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkJIHdyaXRlc2woKGludCopKChhKSArIChyKSksIHAsIGwpCisjZGVmaW5lIFNNQ19pbmwobHAsIHIpCQkgcmVhZGwoKGxwKS0+YmFzZSArIChyKSkKKyNkZWZpbmUgU01DX291dGwodiwgbHAsIHIpCSB3cml0ZWwodiwgKGxwKS0+YmFzZSArIChyKSkKKyNkZWZpbmUgU01DX2luc2wobHAsIHIsIHAsIGwpCSByZWFkc2woKGludCopKChscCktPmJhc2UgKyAocikpLCBwLCBsKQorI2RlZmluZSBTTUNfb3V0c2wobHAsIHIsIHAsIGwpCSB3cml0ZXNsKChpbnQqKSgobHApLT5iYXNlICsgKHIpKSwgcCwgbCkKIAogI2VuZGlmIC8qIFNNQ19VU0VfMTZCSVQgKi8KLQorI2VuZGlmIC8qIFNNQ19EWU5BTUlDX0JVU19DT05GSUcgKi8KIAogCiAjaWZkZWYgU01DX1VTRV9QWEFfRE1BCkBAIC0xMTAsMjIgKzIyOSwyMiBAQAogCiAjaWZkZWYgU01DX2luc2wKICN1bmRlZiBTTUNfaW5zbAotI2RlZmluZSBTTUNfaW5zbChhLCByLCBwLCBsKSBcCi0Jc21jX3B4YV9kbWFfaW5zbChscC0+ZGV2LCBhLCBscC0+cGh5c2FkZHIsIHIsIGxwLT5yeGRtYSwgcCwgbCkKKyNkZWZpbmUgU01DX2luc2wobHAsIHIsIHAsIGwpIFwKKwlzbWNfcHhhX2RtYV9pbnNsKGxwLCBscC0+cGh5c2FkZHIsIHIsIGxwLT5yeGRtYSwgcCwgbCkKIAogc3RhdGljIGlubGluZSB2b2lkCi1zbWNfcHhhX2RtYV9pbnNsKHN0cnVjdCBkZXZpY2UgKmRldiwgdV9sb25nIGlvYWRkciwgdV9sb25nIHBoeXNhZGRyLAorc21jX3B4YV9kbWFfaW5zbChzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAsIHVfbG9uZyBwaHlzYWRkciwKIAkJaW50IHJlZywgaW50IGRtYSwgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJLyogNjQgYml0IGFsaWdubWVudCBpcyByZXF1aXJlZCBmb3IgbWVtb3J5IHRvIG1lbW9yeSBETUEgKi8KIAlpZiAoKGxvbmcpYnVmICYgNCkgewotCQkqKCh1MzIgKilidWYpID0gU01DX2lubChpb2FkZHIsIHJlZyk7CisJCSooKHUzMiAqKWJ1ZikgPSBTTUNfaW5sKGxwLCByZWcpOwogCQlidWYgKz0gNDsKIAkJbGVuLS07CiAJfQogCiAJbGVuICo9IDQ7Ci0JcnhfZG1hYnVmID0gZG1hX21hcF9zaW5nbGUoZGV2LCBidWYsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlyeF9kbWFidWYgPSBkbWFfbWFwX3NpbmdsZShscC0+ZGV2LCBidWYsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIAlyeF9kbWFsZW4gPSBsZW47CiAJRENTUihkbWEpID0gRENTUl9OT0RFU0M7CiAJRFRBRFIoZG1hKSA9IHJ4X2RtYWJ1ZjsKQEAgLTEzNiw1MiArMjU1LDI0IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIFNNQ19pbnN3Ci0jdW5kZWYgU01DX2luc3cKLSNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkgXAotCXNtY19weGFfZG1hX2luc3cobHAtPmRldiwgYSwgbHAtPnBoeXNhZGRyLCByLCBscC0+cnhkbWEsIHAsIGwpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotc21jX3B4YV9kbWFfaW5zdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVfbG9uZyBpb2FkZHIsIHVfbG9uZyBwaHlzYWRkciwKLQkJaW50IHJlZywgaW50IGRtYSwgdV9jaGFyICpidWYsIGludCBsZW4pCi17Ci0JLyogNjQgYml0IGFsaWdubWVudCBpcyByZXF1aXJlZCBmb3IgbWVtb3J5IHRvIG1lbW9yeSBETUEgKi8KLQl3aGlsZSAoKGxvbmcpYnVmICYgNikgewotCQkqKCh1MTYgKilidWYpID0gU01DX2ludyhpb2FkZHIsIHJlZyk7Ci0JCWJ1ZiArPSAyOwotCQlsZW4tLTsKLQl9Ci0KLQlsZW4gKj0gMjsKLQlyeF9kbWFidWYgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGJ1ZiwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwotCXJ4X2RtYWxlbiA9IGxlbjsKLQlEQ1NSKGRtYSkgPSBEQ1NSX05PREVTQzsKLQlEVEFEUihkbWEpID0gcnhfZG1hYnVmOwotCURTQURSKGRtYSkgPSBwaHlzYWRkciArIHJlZzsKLQlEQ01EKGRtYSkgPSAoRENNRF9JTkNUUkdBRERSIHwgRENNRF9CVVJTVDMyIHwKLQkJRENNRF9XSURUSDIgfCBEQ01EX0VORElSUUVOIHwgKERDTURfTEVOR1RIICYgcnhfZG1hbGVuKSk7Ci0JRENTUihkbWEpID0gRENTUl9OT0RFU0MgfCBEQ1NSX1JVTjsKLX0KLSNlbmRpZgotCiAjaWZkZWYgU01DX291dHNsCiAjdW5kZWYgU01DX291dHNsCi0jZGVmaW5lIFNNQ19vdXRzbChhLCByLCBwLCBsKSBcCi0JIHNtY19weGFfZG1hX291dHNsKGxwLT5kZXYsIGEsIGxwLT5waHlzYWRkciwgciwgbHAtPnR4ZG1hLCBwLCBsKQorI2RlZmluZSBTTUNfb3V0c2wobHAsIHIsIHAsIGwpIFwKKwkgc21jX3B4YV9kbWFfb3V0c2wobHAsIGxwLT5waHlzYWRkciwgciwgbHAtPnR4ZG1hLCBwLCBsKQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNtY19weGFfZG1hX291dHNsKHN0cnVjdCBkZXZpY2UgKmRldiwgdV9sb25nIGlvYWRkciwgdV9sb25nIHBoeXNhZGRyLAorc21jX3B4YV9kbWFfb3V0c2woc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwLCB1X2xvbmcgcGh5c2FkZHIsCiAJCWludCByZWcsIGludCBkbWEsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCS8qIDY0IGJpdCBhbGlnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSB0byBtZW1vcnkgRE1BICovCiAJaWYgKChsb25nKWJ1ZiAmIDQpIHsKLQkJU01DX291dGwoKigodTMyICopYnVmKSwgaW9hZGRyLCByZWcpOworCQlTTUNfb3V0bCgqKCh1MzIgKilidWYpLCBscCwgcmVnKTsKIAkJYnVmICs9IDQ7CiAJCWxlbi0tOwogCX0KIAogCWxlbiAqPSA0OwotCXR4X2RtYWJ1ZiA9IGRtYV9tYXBfc2luZ2xlKGRldiwgYnVmLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCXR4X2RtYWJ1ZiA9IGRtYV9tYXBfc2luZ2xlKGxwLT5kZXYsIGJ1ZiwgbGVuLCBETUFfVE9fREVWSUNFKTsKIAl0eF9kbWFsZW4gPSBsZW47CiAJRENTUihkbWEpID0gRENTUl9OT0RFU0M7CiAJRFNBRFIoZG1hKSA9IHR4X2RtYWJ1ZjsKQEAgLTE5MSwzNSArMjgyLDYgQEAKIAlEQ1NSKGRtYSkgPSBEQ1NSX05PREVTQyB8IERDU1JfUlVOOwogfQogI2VuZGlmCi0KLSNpZmRlZiBTTUNfb3V0c3cKLSN1bmRlZiBTTUNfb3V0c3cKLSNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpIFwKLQlzbWNfcHhhX2RtYV9vdXRzdyhscC0+ZGV2LCBhLCBscC0+cGh5c2FkZHIsIHIsIGxwLT50eGRtYSwgcCwgbCkKLQotc3RhdGljIGlubGluZSB2b2lkCi1zbWNfcHhhX2RtYV9vdXRzdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVfbG9uZyBpb2FkZHIsIHVfbG9uZyBwaHlzYWRkciwKLQkJICBpbnQgcmVnLCBpbnQgZG1hLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQkvKiA2NCBiaXQgYWxpZ25tZW50IGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgdG8gbWVtb3J5IERNQSAqLwotCXdoaWxlICgobG9uZylidWYgJiA2KSB7Ci0JCVNNQ19vdXR3KCooKHUxNiAqKWJ1ZiksIGlvYWRkciwgcmVnKTsKLQkJYnVmICs9IDI7Ci0JCWxlbi0tOwotCX0KLQotCWxlbiAqPSAyOwotCXR4X2RtYWJ1ZiA9IGRtYV9tYXBfc2luZ2xlKGRldiwgYnVmLCBsZW4sIERNQV9UT19ERVZJQ0UpOwotCXR4X2RtYWxlbiA9IGxlbjsKLQlEQ1NSKGRtYSkgPSBEQ1NSX05PREVTQzsKLQlEU0FEUihkbWEpID0gdHhfZG1hYnVmOwotCURUQURSKGRtYSkgPSBwaHlzYWRkciArIHJlZzsKLQlEQ01EKGRtYSkgPSAoRENNRF9JTkNTUkNBRERSIHwgRENNRF9CVVJTVDMyIHwKLQkJRENNRF9XSURUSDIgfCBEQ01EX0VORElSUUVOIHwgKERDTURfTEVOR1RIICYgdHhfZG1hbGVuKSk7Ci0JRENTUihkbWEpID0gRENTUl9OT0RFU0MgfCBEQ1NSX1JVTjsKLX0KLSNlbmRpZgotCiAjZW5kaWYJIC8qIFNNQ19VU0VfUFhBX0RNQSAqLwogCiAKQEAgLTYyOSwyMTMgKzY5MSwyMTMgQEAKICAqIGNhcGFiaWxpdGllcy4gIFBsZWFzZSB1c2UgdGhvc2UgYW5kIG5vdCB0aGUgaW4vb3V0IHByaW1pdGl2ZXMuCiAgKi8KIC8qIEZJRk8gcmVhZC93cml0ZSBtYWNyb3MgKi8KLSNkZWZpbmUgU01DX1BVU0hfREFUQShwLCBsKQlTTUNfb3V0c2woIGlvYWRkciwgVFhfREFUQV9GSUZPLCBwLCAobCkgPj4gMiApCi0jZGVmaW5lIFNNQ19QVUxMX0RBVEEocCwgbCkJU01DX2luc2wgKCBpb2FkZHIsIFJYX0RBVEFfRklGTywgcCwgKGwpID4+IDIgKQotI2RlZmluZSBTTUNfU0VUX1RYX0ZJRk8oeCkgCVNNQ19vdXRsKCB4LCBpb2FkZHIsIFRYX0RBVEFfRklGTyApCi0jZGVmaW5lIFNNQ19HRVRfUlhfRklGTygpCVNNQ19pbmwoIGlvYWRkciwgUlhfREFUQV9GSUZPICkKKyNkZWZpbmUgU01DX1BVU0hfREFUQShscCwgcCwgbCkJU01DX291dHNsKCBscCwgVFhfREFUQV9GSUZPLCBwLCAobCkgPj4gMiApCisjZGVmaW5lIFNNQ19QVUxMX0RBVEEobHAsIHAsIGwpCVNNQ19pbnNsICggbHAsIFJYX0RBVEFfRklGTywgcCwgKGwpID4+IDIgKQorI2RlZmluZSBTTUNfU0VUX1RYX0ZJRk8obHAsIHgpIAlTTUNfb3V0bCggeCwgbHAsIFRYX0RBVEFfRklGTyApCisjZGVmaW5lIFNNQ19HRVRfUlhfRklGTyhscCkJU01DX2lubCggbHAsIFJYX0RBVEFfRklGTyApCiAKIAogLyogSS9PIG1hcHBlZCByZWdpc3RlciByZWFkL3dyaXRlIG1hY3JvcyAqLwotI2RlZmluZSBTTUNfR0VUX1RYX1NUU19GSUZPKCkJCVNNQ19pbmwoIGlvYWRkciwgVFhfU1RBVFVTX0ZJRk8gKQotI2RlZmluZSBTTUNfR0VUX1JYX1NUU19GSUZPKCkJCVNNQ19pbmwoIGlvYWRkciwgUlhfU1RBVFVTX0ZJRk8gKQotI2RlZmluZSBTTUNfR0VUX1JYX1NUU19GSUZPX1BFRUsoKQlTTUNfaW5sKCBpb2FkZHIsIFJYX1NUQVRVU19GSUZPX1BFRUsgKQotI2RlZmluZSBTTUNfR0VUX1BOKCkJCQkoU01DX2lubCggaW9hZGRyLCBJRF9SRVYgKSA+PiAxNikKLSNkZWZpbmUgU01DX0dFVF9SRVYoKQkJCShTTUNfaW5sKCBpb2FkZHIsIElEX1JFViApICYgMHhGRkZGKQotI2RlZmluZSBTTUNfR0VUX0lSUV9DRkcoKQkJU01DX2lubCggaW9hZGRyLCBJTlRfQ0ZHICkKLSNkZWZpbmUgU01DX1NFVF9JUlFfQ0ZHKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBJTlRfQ0ZHICkKLSNkZWZpbmUgU01DX0dFVF9JTlQoKQkJCVNNQ19pbmwoIGlvYWRkciwgSU5UX1NUUyApCi0jZGVmaW5lIFNNQ19BQ0tfSU5UKHgpCQkJU01DX291dGwoIHgsIGlvYWRkciwgSU5UX1NUUyApCi0jZGVmaW5lIFNNQ19HRVRfSU5UX0VOKCkJCVNNQ19pbmwoIGlvYWRkciwgSU5UX0VOICkKLSNkZWZpbmUgU01DX1NFVF9JTlRfRU4oeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIElOVF9FTiApCi0jZGVmaW5lIFNNQ19HRVRfQllURV9URVNUKCkJCVNNQ19pbmwoIGlvYWRkciwgQllURV9URVNUICkKLSNkZWZpbmUgU01DX1NFVF9CWVRFX1RFU1QoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEJZVEVfVEVTVCApCi0jZGVmaW5lIFNNQ19HRVRfRklGT19JTlQoKQkJU01DX2lubCggaW9hZGRyLCBGSUZPX0lOVCApCi0jZGVmaW5lIFNNQ19TRVRfRklGT19JTlQoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEZJRk9fSU5UICkKLSNkZWZpbmUgU01DX1NFVF9GSUZPX1REQSh4KQkJCQkJXAorI2RlZmluZSBTTUNfR0VUX1RYX1NUU19GSUZPKGxwKQkJU01DX2lubCggbHAsIFRYX1NUQVRVU19GSUZPICkKKyNkZWZpbmUgU01DX0dFVF9SWF9TVFNfRklGTyhscCkJCVNNQ19pbmwoIGxwLCBSWF9TVEFUVVNfRklGTyApCisjZGVmaW5lIFNNQ19HRVRfUlhfU1RTX0ZJRk9fUEVFSyhscCkJU01DX2lubCggbHAsIFJYX1NUQVRVU19GSUZPX1BFRUsgKQorI2RlZmluZSBTTUNfR0VUX1BOKGxwKQkJCShTTUNfaW5sKCBscCwgSURfUkVWICkgPj4gMTYpCisjZGVmaW5lIFNNQ19HRVRfUkVWKGxwKQkJCShTTUNfaW5sKCBscCwgSURfUkVWICkgJiAweEZGRkYpCisjZGVmaW5lIFNNQ19HRVRfSVJRX0NGRyhscCkJCVNNQ19pbmwoIGxwLCBJTlRfQ0ZHICkKKyNkZWZpbmUgU01DX1NFVF9JUlFfQ0ZHKGxwLCB4KQkJU01DX291dGwoIHgsIGxwLCBJTlRfQ0ZHICkKKyNkZWZpbmUgU01DX0dFVF9JTlQobHApCQkJU01DX2lubCggbHAsIElOVF9TVFMgKQorI2RlZmluZSBTTUNfQUNLX0lOVChscCwgeCkJCQlTTUNfb3V0bCggeCwgbHAsIElOVF9TVFMgKQorI2RlZmluZSBTTUNfR0VUX0lOVF9FTihscCkJCVNNQ19pbmwoIGxwLCBJTlRfRU4gKQorI2RlZmluZSBTTUNfU0VUX0lOVF9FTihscCwgeCkJCVNNQ19vdXRsKCB4LCBscCwgSU5UX0VOICkKKyNkZWZpbmUgU01DX0dFVF9CWVRFX1RFU1QobHApCQlTTUNfaW5sKCBscCwgQllURV9URVNUICkKKyNkZWZpbmUgU01DX1NFVF9CWVRFX1RFU1QobHAsIHgpCQlTTUNfb3V0bCggeCwgbHAsIEJZVEVfVEVTVCApCisjZGVmaW5lIFNNQ19HRVRfRklGT19JTlQobHApCQlTTUNfaW5sKCBscCwgRklGT19JTlQgKQorI2RlZmluZSBTTUNfU0VUX0ZJRk9fSU5UKGxwLCB4KQkJU01DX291dGwoIHgsIGxwLCBGSUZPX0lOVCApCisjZGVmaW5lIFNNQ19TRVRfRklGT19UREEobHAsIHgpCQkJCQlcCiAJZG8gewkJCQkJCQlcCiAJCXVuc2lnbmVkIGxvbmcgX19mbGFnczsJCQkJXAogCQlpbnQgX19tYXNrOwkJCQkJXAogCQlsb2NhbF9pcnFfc2F2ZShfX2ZsYWdzKTsJCQlcCi0JCV9fbWFzayA9IFNNQ19HRVRfRklGT19JTlQoKSAmIH4oMHhGRjw8MjQpOwlcCi0JCVNNQ19TRVRfRklGT19JTlQoIF9fbWFzayB8ICh4KTw8MjQgKTsJCVwKKwkJX19tYXNrID0gU01DX0dFVF9GSUZPX0lOVCgobHApKSAmIH4oMHhGRjw8MjQpOwlcCisJCVNNQ19TRVRfRklGT19JTlQoIChscCksIF9fbWFzayB8ICh4KTw8MjQgKTsJXAogCQlsb2NhbF9pcnFfcmVzdG9yZShfX2ZsYWdzKTsJCQlcCiAJfSB3aGlsZSAoMCkKLSNkZWZpbmUgU01DX1NFVF9GSUZPX1RTTCh4KQkJCQkJXAorI2RlZmluZSBTTUNfU0VUX0ZJRk9fVFNMKGxwLCB4KQkJCQkJXAogCWRvIHsJCQkJCQkJXAogCQl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCVwKIAkJaW50IF9fbWFzazsJCQkJCVwKIAkJbG9jYWxfaXJxX3NhdmUoX19mbGFncyk7CQkJXAotCQlfX21hc2sgPSBTTUNfR0VUX0ZJRk9fSU5UKCkgJiB+KDB4RkY8PDE2KTsJXAotCQlTTUNfU0VUX0ZJRk9fSU5UKCBfX21hc2sgfCAoKCh4KSAmIDB4RkYpPDwxNikpOwlcCisJCV9fbWFzayA9IFNNQ19HRVRfRklGT19JTlQoKGxwKSkgJiB+KDB4RkY8PDE2KTsJXAorCQlTTUNfU0VUX0ZJRk9fSU5UKCAobHApLCBfX21hc2sgfCAoKCh4KSAmIDB4RkYpPDwxNikpOwlcCiAJCWxvY2FsX2lycV9yZXN0b3JlKF9fZmxhZ3MpOwkJCVwKIAl9IHdoaWxlICgwKQotI2RlZmluZSBTTUNfU0VUX0ZJRk9fUlNBKHgpCQkJCQlcCisjZGVmaW5lIFNNQ19TRVRfRklGT19SU0EobHAsIHgpCQkJCQlcCiAJZG8gewkJCQkJCQlcCiAJCXVuc2lnbmVkIGxvbmcgX19mbGFnczsJCQkJXAogCQlpbnQgX19tYXNrOwkJCQkJXAogCQlsb2NhbF9pcnFfc2F2ZShfX2ZsYWdzKTsJCQlcCi0JCV9fbWFzayA9IFNNQ19HRVRfRklGT19JTlQoKSAmIH4oMHhGRjw8OCk7CVwKLQkJU01DX1NFVF9GSUZPX0lOVCggX19tYXNrIHwgKCgoeCkgJiAweEZGKTw8OCkpOwlcCisJCV9fbWFzayA9IFNNQ19HRVRfRklGT19JTlQoKGxwKSkgJiB+KDB4RkY8PDgpOwlcCisJCVNNQ19TRVRfRklGT19JTlQoIChscCksIF9fbWFzayB8ICgoKHgpICYgMHhGRik8PDgpKTsJXAogCQlsb2NhbF9pcnFfcmVzdG9yZShfX2ZsYWdzKTsJCQlcCiAJfSB3aGlsZSAoMCkKLSNkZWZpbmUgU01DX1NFVF9GSUZPX1JTTCh4KQkJCQkJXAorI2RlZmluZSBTTUNfU0VUX0ZJRk9fUlNMKGxwLCB4KQkJCQkJXAogCWRvIHsJCQkJCQkJXAogCQl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCVwKIAkJaW50IF9fbWFzazsJCQkJCVwKIAkJbG9jYWxfaXJxX3NhdmUoX19mbGFncyk7CQkJXAotCQlfX21hc2sgPSBTTUNfR0VUX0ZJRk9fSU5UKCkgJiB+MHhGRjsJCVwKLQkJU01DX1NFVF9GSUZPX0lOVCggX19tYXNrIHwgKCh4KSAmIDB4RkYpKTsJXAorCQlfX21hc2sgPSBTTUNfR0VUX0ZJRk9fSU5UKChscCkpICYgfjB4RkY7CVwKKwkJU01DX1NFVF9GSUZPX0lOVCggKGxwKSxfX21hc2sgfCAoKHgpICYgMHhGRikpOwlcCiAJCWxvY2FsX2lycV9yZXN0b3JlKF9fZmxhZ3MpOwkJCVwKIAl9IHdoaWxlICgwKQotI2RlZmluZSBTTUNfR0VUX1JYX0NGRygpCQlTTUNfaW5sKCBpb2FkZHIsIFJYX0NGRyApCi0jZGVmaW5lIFNNQ19TRVRfUlhfQ0ZHKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBSWF9DRkcgKQotI2RlZmluZSBTTUNfR0VUX1RYX0NGRygpCQlTTUNfaW5sKCBpb2FkZHIsIFRYX0NGRyApCi0jZGVmaW5lIFNNQ19TRVRfVFhfQ0ZHKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBUWF9DRkcgKQotI2RlZmluZSBTTUNfR0VUX0hXX0NGRygpCQlTTUNfaW5sKCBpb2FkZHIsIEhXX0NGRyApCi0jZGVmaW5lIFNNQ19TRVRfSFdfQ0ZHKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBIV19DRkcgKQotI2RlZmluZSBTTUNfR0VUX1JYX0RQX0NUUkwoKQkJU01DX2lubCggaW9hZGRyLCBSWF9EUF9DVFJMICkKLSNkZWZpbmUgU01DX1NFVF9SWF9EUF9DVFJMKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBSWF9EUF9DVFJMICkKLSNkZWZpbmUgU01DX0dFVF9QTVRfQ1RSTCgpCQlTTUNfaW5sKCBpb2FkZHIsIFBNVF9DVFJMICkKLSNkZWZpbmUgU01DX1NFVF9QTVRfQ1RSTCh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgUE1UX0NUUkwgKQotI2RlZmluZSBTTUNfR0VUX0dQSU9fQ0ZHKCkJCVNNQ19pbmwoIGlvYWRkciwgR1BJT19DRkcgKQotI2RlZmluZSBTTUNfU0VUX0dQSU9fQ0ZHKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBHUElPX0NGRyApCi0jZGVmaW5lIFNNQ19HRVRfUlhfRklGT19JTkYoKQkJU01DX2lubCggaW9hZGRyLCBSWF9GSUZPX0lORiApCi0jZGVmaW5lIFNNQ19TRVRfUlhfRklGT19JTkYoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIFJYX0ZJRk9fSU5GICkKLSNkZWZpbmUgU01DX0dFVF9UWF9GSUZPX0lORigpCQlTTUNfaW5sKCBpb2FkZHIsIFRYX0ZJRk9fSU5GICkKLSNkZWZpbmUgU01DX1NFVF9UWF9GSUZPX0lORih4KQkJU01DX291dGwoIHgsIGlvYWRkciwgVFhfRklGT19JTkYgKQotI2RlZmluZSBTTUNfR0VUX0dQVF9DRkcoKQkJU01DX2lubCggaW9hZGRyLCBHUFRfQ0ZHICkKLSNkZWZpbmUgU01DX1NFVF9HUFRfQ0ZHKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBHUFRfQ0ZHICkKLSNkZWZpbmUgU01DX0dFVF9SWF9EUk9QKCkJCVNNQ19pbmwoIGlvYWRkciwgUlhfRFJPUCApCi0jZGVmaW5lIFNNQ19TRVRfUlhfRFJPUCh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgUlhfRFJPUCApCi0jZGVmaW5lIFNNQ19HRVRfTUFDX0NNRCgpCQlTTUNfaW5sKCBpb2FkZHIsIE1BQ19DU1JfQ01EICkKLSNkZWZpbmUgU01DX1NFVF9NQUNfQ01EKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBNQUNfQ1NSX0NNRCApCi0jZGVmaW5lIFNNQ19HRVRfTUFDX0RBVEEoKQkJU01DX2lubCggaW9hZGRyLCBNQUNfQ1NSX0RBVEEgKQotI2RlZmluZSBTTUNfU0VUX01BQ19EQVRBKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBNQUNfQ1NSX0RBVEEgKQotI2RlZmluZSBTTUNfR0VUX0FGQ19DRkcoKQkJU01DX2lubCggaW9hZGRyLCBBRkNfQ0ZHICkKLSNkZWZpbmUgU01DX1NFVF9BRkNfQ0ZHKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBBRkNfQ0ZHICkKLSNkZWZpbmUgU01DX0dFVF9FMlBfQ01EKCkJCVNNQ19pbmwoIGlvYWRkciwgRTJQX0NNRCApCi0jZGVmaW5lIFNNQ19TRVRfRTJQX0NNRCh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgRTJQX0NNRCApCi0jZGVmaW5lIFNNQ19HRVRfRTJQX0RBVEEoKQkJU01DX2lubCggaW9hZGRyLCBFMlBfREFUQSApCi0jZGVmaW5lIFNNQ19TRVRfRTJQX0RBVEEoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEUyUF9EQVRBICkKKyNkZWZpbmUgU01DX0dFVF9SWF9DRkcobHApCQlTTUNfaW5sKCBscCwgUlhfQ0ZHICkKKyNkZWZpbmUgU01DX1NFVF9SWF9DRkcobHAsIHgpCQlTTUNfb3V0bCggeCwgbHAsIFJYX0NGRyApCisjZGVmaW5lIFNNQ19HRVRfVFhfQ0ZHKGxwKQkJU01DX2lubCggbHAsIFRYX0NGRyApCisjZGVmaW5lIFNNQ19TRVRfVFhfQ0ZHKGxwLCB4KQkJU01DX291dGwoIHgsIGxwLCBUWF9DRkcgKQorI2RlZmluZSBTTUNfR0VUX0hXX0NGRyhscCkJCVNNQ19pbmwoIGxwLCBIV19DRkcgKQorI2RlZmluZSBTTUNfU0VUX0hXX0NGRyhscCwgeCkJCVNNQ19vdXRsKCB4LCBscCwgSFdfQ0ZHICkKKyNkZWZpbmUgU01DX0dFVF9SWF9EUF9DVFJMKGxwKQkJU01DX2lubCggbHAsIFJYX0RQX0NUUkwgKQorI2RlZmluZSBTTUNfU0VUX1JYX0RQX0NUUkwobHAsIHgpCQlTTUNfb3V0bCggeCwgbHAsIFJYX0RQX0NUUkwgKQorI2RlZmluZSBTTUNfR0VUX1BNVF9DVFJMKGxwKQkJU01DX2lubCggbHAsIFBNVF9DVFJMICkKKyNkZWZpbmUgU01DX1NFVF9QTVRfQ1RSTChscCwgeCkJCVNNQ19vdXRsKCB4LCBscCwgUE1UX0NUUkwgKQorI2RlZmluZSBTTUNfR0VUX0dQSU9fQ0ZHKGxwKQkJU01DX2lubCggbHAsIEdQSU9fQ0ZHICkKKyNkZWZpbmUgU01DX1NFVF9HUElPX0NGRyhscCwgeCkJCVNNQ19vdXRsKCB4LCBscCwgR1BJT19DRkcgKQorI2RlZmluZSBTTUNfR0VUX1JYX0ZJRk9fSU5GKGxwKQkJU01DX2lubCggbHAsIFJYX0ZJRk9fSU5GICkKKyNkZWZpbmUgU01DX1NFVF9SWF9GSUZPX0lORihscCwgeCkJCVNNQ19vdXRsKCB4LCBscCwgUlhfRklGT19JTkYgKQorI2RlZmluZSBTTUNfR0VUX1RYX0ZJRk9fSU5GKGxwKQkJU01DX2lubCggbHAsIFRYX0ZJRk9fSU5GICkKKyNkZWZpbmUgU01DX1NFVF9UWF9GSUZPX0lORihscCwgeCkJCVNNQ19vdXRsKCB4LCBscCwgVFhfRklGT19JTkYgKQorI2RlZmluZSBTTUNfR0VUX0dQVF9DRkcobHApCQlTTUNfaW5sKCBscCwgR1BUX0NGRyApCisjZGVmaW5lIFNNQ19TRVRfR1BUX0NGRyhscCwgeCkJCVNNQ19vdXRsKCB4LCBscCwgR1BUX0NGRyApCisjZGVmaW5lIFNNQ19HRVRfUlhfRFJPUChscCkJCVNNQ19pbmwoIGxwLCBSWF9EUk9QICkKKyNkZWZpbmUgU01DX1NFVF9SWF9EUk9QKGxwLCB4KQkJU01DX291dGwoIHgsIGxwLCBSWF9EUk9QICkKKyNkZWZpbmUgU01DX0dFVF9NQUNfQ01EKGxwKQkJU01DX2lubCggbHAsIE1BQ19DU1JfQ01EICkKKyNkZWZpbmUgU01DX1NFVF9NQUNfQ01EKGxwLCB4KQkJU01DX291dGwoIHgsIGxwLCBNQUNfQ1NSX0NNRCApCisjZGVmaW5lIFNNQ19HRVRfTUFDX0RBVEEobHApCQlTTUNfaW5sKCBscCwgTUFDX0NTUl9EQVRBICkKKyNkZWZpbmUgU01DX1NFVF9NQUNfREFUQShscCwgeCkJCVNNQ19vdXRsKCB4LCBscCwgTUFDX0NTUl9EQVRBICkKKyNkZWZpbmUgU01DX0dFVF9BRkNfQ0ZHKGxwKQkJU01DX2lubCggbHAsIEFGQ19DRkcgKQorI2RlZmluZSBTTUNfU0VUX0FGQ19DRkcobHAsIHgpCQlTTUNfb3V0bCggeCwgbHAsIEFGQ19DRkcgKQorI2RlZmluZSBTTUNfR0VUX0UyUF9DTUQobHApCQlTTUNfaW5sKCBscCwgRTJQX0NNRCApCisjZGVmaW5lIFNNQ19TRVRfRTJQX0NNRChscCwgeCkJCVNNQ19vdXRsKCB4LCBscCwgRTJQX0NNRCApCisjZGVmaW5lIFNNQ19HRVRfRTJQX0RBVEEobHApCQlTTUNfaW5sKCBscCwgRTJQX0RBVEEgKQorI2RlZmluZSBTTUNfU0VUX0UyUF9EQVRBKGxwLCB4KQkJU01DX291dGwoIHgsIGxwLCBFMlBfREFUQSApCiAKIC8qIE1BQyByZWdpc3RlciByZWFkL3dyaXRlIG1hY3JvcyAqLwotI2RlZmluZSBTTUNfR0VUX01BQ19DU1IoYSx2KQkJCQkJCVwKKyNkZWZpbmUgU01DX0dFVF9NQUNfQ1NSKGxwLGEsdikJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQl3aGlsZSAoU01DX0dFVF9NQUNfQ01EKCkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCi0JCVNNQ19TRVRfTUFDX0NNRChNQUNfQ1NSX0NNRF9DU1JfQlVTWV8gfAkJCVwKKwkJd2hpbGUgKFNNQ19HRVRfTUFDX0NNRCgobHApKSAmIE1BQ19DU1JfQ01EX0NTUl9CVVNZXyk7CVwKKwkJU01DX1NFVF9NQUNfQ01EKChscCksTUFDX0NTUl9DTURfQ1NSX0JVU1lfIHwJCVwKIAkJCU1BQ19DU1JfQ01EX1JfTk9UX1dfIHwgKGEpICk7CQkJXAotCQl3aGlsZSAoU01DX0dFVF9NQUNfQ01EKCkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCi0JCXYgPSBTTUNfR0VUX01BQ19EQVRBKCk7CQkJCQlcCisJCXdoaWxlIChTTUNfR0VUX01BQ19DTUQoKGxwKSkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCisJCXYgPSBTTUNfR0VUX01BQ19EQVRBKChscCkpOwkJCSAgICAgICAJXAogCX0gd2hpbGUgKDApCi0jZGVmaW5lIFNNQ19TRVRfTUFDX0NTUihhLHYpCQkJCQkJXAorI2RlZmluZSBTTUNfU0VUX01BQ19DU1IobHAsYSx2KQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCXdoaWxlIChTTUNfR0VUX01BQ19DTUQoKSAmIE1BQ19DU1JfQ01EX0NTUl9CVVNZXyk7CVwKLQkJU01DX1NFVF9NQUNfREFUQSh2KTsJCQkJCVwKLQkJU01DX1NFVF9NQUNfQ01EKE1BQ19DU1JfQ01EX0NTUl9CVVNZXyB8IChhKSApOwkJXAotCQl3aGlsZSAoU01DX0dFVF9NQUNfQ01EKCkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCisJCXdoaWxlIChTTUNfR0VUX01BQ19DTUQoKGxwKSkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCisJCVNNQ19TRVRfTUFDX0RBVEEoKGxwKSwgdik7CQkJCVwKKwkJU01DX1NFVF9NQUNfQ01EKChscCksIE1BQ19DU1JfQ01EX0NTUl9CVVNZXyB8IChhKSApOwlcCisJCXdoaWxlIChTTUNfR0VUX01BQ19DTUQoKGxwKSkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCiAJfSB3aGlsZSAoMCkKLSNkZWZpbmUgU01DX0dFVF9NQUNfQ1IoeCkJU01DX0dFVF9NQUNfQ1NSKCBNQUNfQ1IsIHggKQotI2RlZmluZSBTTUNfU0VUX01BQ19DUih4KQlTTUNfU0VUX01BQ19DU1IoIE1BQ19DUiwgeCApCi0jZGVmaW5lIFNNQ19HRVRfQUREUkgoeCkJU01DX0dFVF9NQUNfQ1NSKCBBRERSSCwgeCApCi0jZGVmaW5lIFNNQ19TRVRfQUREUkgoeCkJU01DX1NFVF9NQUNfQ1NSKCBBRERSSCwgeCApCi0jZGVmaW5lIFNNQ19HRVRfQUREUkwoeCkJU01DX0dFVF9NQUNfQ1NSKCBBRERSTCwgeCApCi0jZGVmaW5lIFNNQ19TRVRfQUREUkwoeCkJU01DX1NFVF9NQUNfQ1NSKCBBRERSTCwgeCApCi0jZGVmaW5lIFNNQ19HRVRfSEFTSEgoeCkJU01DX0dFVF9NQUNfQ1NSKCBIQVNISCwgeCApCi0jZGVmaW5lIFNNQ19TRVRfSEFTSEgoeCkJU01DX1NFVF9NQUNfQ1NSKCBIQVNISCwgeCApCi0jZGVmaW5lIFNNQ19HRVRfSEFTSEwoeCkJU01DX0dFVF9NQUNfQ1NSKCBIQVNITCwgeCApCi0jZGVmaW5lIFNNQ19TRVRfSEFTSEwoeCkJU01DX1NFVF9NQUNfQ1NSKCBIQVNITCwgeCApCi0jZGVmaW5lIFNNQ19HRVRfTUlJX0FDQyh4KQlTTUNfR0VUX01BQ19DU1IoIE1JSV9BQ0MsIHggKQotI2RlZmluZSBTTUNfU0VUX01JSV9BQ0MoeCkJU01DX1NFVF9NQUNfQ1NSKCBNSUlfQUNDLCB4ICkKLSNkZWZpbmUgU01DX0dFVF9NSUlfREFUQSh4KQlTTUNfR0VUX01BQ19DU1IoIE1JSV9EQVRBLCB4ICkKLSNkZWZpbmUgU01DX1NFVF9NSUlfREFUQSh4KQlTTUNfU0VUX01BQ19DU1IoIE1JSV9EQVRBLCB4ICkKLSNkZWZpbmUgU01DX0dFVF9GTE9XKHgpCQlTTUNfR0VUX01BQ19DU1IoIEZMT1csIHggKQotI2RlZmluZSBTTUNfU0VUX0ZMT1coeCkJCVNNQ19TRVRfTUFDX0NTUiggRkxPVywgeCApCi0jZGVmaW5lIFNNQ19HRVRfVkxBTjEoeCkJU01DX0dFVF9NQUNfQ1NSKCBWTEFOMSwgeCApCi0jZGVmaW5lIFNNQ19TRVRfVkxBTjEoeCkJU01DX1NFVF9NQUNfQ1NSKCBWTEFOMSwgeCApCi0jZGVmaW5lIFNNQ19HRVRfVkxBTjIoeCkJU01DX0dFVF9NQUNfQ1NSKCBWTEFOMiwgeCApCi0jZGVmaW5lIFNNQ19TRVRfVkxBTjIoeCkJU01DX1NFVF9NQUNfQ1NSKCBWTEFOMiwgeCApCi0jZGVmaW5lIFNNQ19TRVRfV1VGRih4KQkJU01DX1NFVF9NQUNfQ1NSKCBXVUZGLCB4ICkKLSNkZWZpbmUgU01DX0dFVF9XVUNTUih4KQlTTUNfR0VUX01BQ19DU1IoIFdVQ1NSLCB4ICkKLSNkZWZpbmUgU01DX1NFVF9XVUNTUih4KQlTTUNfU0VUX01BQ19DU1IoIFdVQ1NSLCB4ICkKKyNkZWZpbmUgU01DX0dFVF9NQUNfQ1IobHAsIHgpCVNNQ19HRVRfTUFDX0NTUiggKGxwKSwgTUFDX0NSLCB4ICkKKyNkZWZpbmUgU01DX1NFVF9NQUNfQ1IobHAsIHgpCVNNQ19TRVRfTUFDX0NTUiggKGxwKSwgTUFDX0NSLCB4ICkKKyNkZWZpbmUgU01DX0dFVF9BRERSSChscCwgeCkJU01DX0dFVF9NQUNfQ1NSKCAobHApLCBBRERSSCwgeCApCisjZGVmaW5lIFNNQ19TRVRfQUREUkgobHAsIHgpCVNNQ19TRVRfTUFDX0NTUiggKGxwKSwgQUREUkgsIHggKQorI2RlZmluZSBTTUNfR0VUX0FERFJMKGxwLCB4KQlTTUNfR0VUX01BQ19DU1IoIChscCksIEFERFJMLCB4ICkKKyNkZWZpbmUgU01DX1NFVF9BRERSTChscCwgeCkJU01DX1NFVF9NQUNfQ1NSKCAobHApLCBBRERSTCwgeCApCisjZGVmaW5lIFNNQ19HRVRfSEFTSEgobHAsIHgpCVNNQ19HRVRfTUFDX0NTUiggKGxwKSwgSEFTSEgsIHggKQorI2RlZmluZSBTTUNfU0VUX0hBU0hIKGxwLCB4KQlTTUNfU0VUX01BQ19DU1IoIChscCksIEhBU0hILCB4ICkKKyNkZWZpbmUgU01DX0dFVF9IQVNITChscCwgeCkJU01DX0dFVF9NQUNfQ1NSKCAobHApLCBIQVNITCwgeCApCisjZGVmaW5lIFNNQ19TRVRfSEFTSEwobHAsIHgpCVNNQ19TRVRfTUFDX0NTUiggKGxwKSwgSEFTSEwsIHggKQorI2RlZmluZSBTTUNfR0VUX01JSV9BQ0MobHAsIHgpCVNNQ19HRVRfTUFDX0NTUiggKGxwKSwgTUlJX0FDQywgeCApCisjZGVmaW5lIFNNQ19TRVRfTUlJX0FDQyhscCwgeCkJU01DX1NFVF9NQUNfQ1NSKCAobHApLCBNSUlfQUNDLCB4ICkKKyNkZWZpbmUgU01DX0dFVF9NSUlfREFUQShscCwgeCkJU01DX0dFVF9NQUNfQ1NSKCAobHApLCBNSUlfREFUQSwgeCApCisjZGVmaW5lIFNNQ19TRVRfTUlJX0RBVEEobHAsIHgpCVNNQ19TRVRfTUFDX0NTUiggKGxwKSwgTUlJX0RBVEEsIHggKQorI2RlZmluZSBTTUNfR0VUX0ZMT1cobHAsIHgpCQlTTUNfR0VUX01BQ19DU1IoIChscCksIEZMT1csIHggKQorI2RlZmluZSBTTUNfU0VUX0ZMT1cobHAsIHgpCQlTTUNfU0VUX01BQ19DU1IoIChscCksIEZMT1csIHggKQorI2RlZmluZSBTTUNfR0VUX1ZMQU4xKGxwLCB4KQlTTUNfR0VUX01BQ19DU1IoIChscCksIFZMQU4xLCB4ICkKKyNkZWZpbmUgU01DX1NFVF9WTEFOMShscCwgeCkJU01DX1NFVF9NQUNfQ1NSKCAobHApLCBWTEFOMSwgeCApCisjZGVmaW5lIFNNQ19HRVRfVkxBTjIobHAsIHgpCVNNQ19HRVRfTUFDX0NTUiggKGxwKSwgVkxBTjIsIHggKQorI2RlZmluZSBTTUNfU0VUX1ZMQU4yKGxwLCB4KQlTTUNfU0VUX01BQ19DU1IoIChscCksIFZMQU4yLCB4ICkKKyNkZWZpbmUgU01DX1NFVF9XVUZGKGxwLCB4KQkJU01DX1NFVF9NQUNfQ1NSKCAobHApLCBXVUZGLCB4ICkKKyNkZWZpbmUgU01DX0dFVF9XVUNTUihscCwgeCkJU01DX0dFVF9NQUNfQ1NSKCAobHApLCBXVUNTUiwgeCApCisjZGVmaW5lIFNNQ19TRVRfV1VDU1IobHAsIHgpCVNNQ19TRVRfTUFDX0NTUiggKGxwKSwgV1VDU1IsIHggKQogCiAvKiBQSFkgcmVnaXN0ZXIgcmVhZC93cml0ZSBtYWNyb3MgKi8KLSNkZWZpbmUgU01DX0dFVF9NSUkoYSxwaHksdikJCQkJCVwKKyNkZWZpbmUgU01DX0dFVF9NSUkobHAsYSxwaHksdikJCQkJCVwKIAlkbyB7CQkJCQkJCVwKIAkJdTMyIF9fdjsJCQkJCVwKIAkJZG8gewkJCQkJCVwKLQkJCVNNQ19HRVRfTUlJX0FDQyhfX3YpOwkJCVwKKwkJCVNNQ19HRVRfTUlJX0FDQygobHApLCBfX3YpOwkJCVwKIAkJfSB3aGlsZSAoIF9fdiAmIE1JSV9BQ0NfTUlJX0JVU1lfICk7CQlcCi0JCVNNQ19TRVRfTUlJX0FDQyggKChwaHkpPDwxMSkgfCAoKGEpPDw2KSB8CVwKKwkJU01DX1NFVF9NSUlfQUNDKCAobHApLCAoKHBoeSk8PDExKSB8ICgoYSk8PDYpIHwJXAogCQkJTUlJX0FDQ19NSUlfQlVTWV8pOwkJCVwKIAkJZG8gewkJCQkJCVwKLQkJCVNNQ19HRVRfTUlJX0FDQyhfX3YpOwkJCVwKKwkJCVNNQ19HRVRfTUlJX0FDQyggKGxwKSwgX192KTsJCQlcCiAJCX0gd2hpbGUgKCBfX3YgJiBNSUlfQUNDX01JSV9CVVNZXyApOwkJXAotCQlTTUNfR0VUX01JSV9EQVRBKHYpOwkJCQlcCisJCVNNQ19HRVRfTUlJX0RBVEEoKGxwKSwgdik7CQkJCVwKIAl9IHdoaWxlICgwKQotI2RlZmluZSBTTUNfU0VUX01JSShhLHBoeSx2KQkJCQkJXAorI2RlZmluZSBTTUNfU0VUX01JSShscCxhLHBoeSx2KQkJCQkJXAogCWRvIHsJCQkJCQkJXAogCQl1MzIgX192OwkJCQkJXAogCQlkbyB7CQkJCQkJXAotCQkJU01DX0dFVF9NSUlfQUNDKF9fdik7CQkJXAorCQkJU01DX0dFVF9NSUlfQUNDKChscCksIF9fdik7CQkJXAogCQl9IHdoaWxlICggX192ICYgTUlJX0FDQ19NSUlfQlVTWV8gKTsJCVwKLQkJU01DX1NFVF9NSUlfREFUQSh2KTsJCQkJXAotCQlTTUNfU0VUX01JSV9BQ0MoICgocGh5KTw8MTEpIHwgKChhKTw8NikgfAlcCisJCVNNQ19TRVRfTUlJX0RBVEEoKGxwKSwgdik7CQkJCVwKKwkJU01DX1NFVF9NSUlfQUNDKCAobHApLCAoKHBoeSk8PDExKSB8ICgoYSk8PDYpIHwJXAogCQkJTUlJX0FDQ19NSUlfQlVTWV8JIHwJCVwKIAkJCU1JSV9BQ0NfTUlJX1dSSVRFXyAgKTsJCQlcCiAJCWRvIHsJCQkJCQlcCi0JCQlTTUNfR0VUX01JSV9BQ0MoX192KTsJCQlcCisJCQlTTUNfR0VUX01JSV9BQ0MoKGxwKSwgX192KTsJCQlcCiAJCX0gd2hpbGUgKCBfX3YgJiBNSUlfQUNDX01JSV9CVVNZXyApOwkJXAogCX0gd2hpbGUgKDApCi0jZGVmaW5lIFNNQ19HRVRfUEhZX0JNQ1IocGh5LHgpCQlTTUNfR0VUX01JSSggTUlJX0JNQ1IsIHBoeSwgeCApCi0jZGVmaW5lIFNNQ19TRVRfUEhZX0JNQ1IocGh5LHgpCQlTTUNfU0VUX01JSSggTUlJX0JNQ1IsIHBoeSwgeCApCi0jZGVmaW5lIFNNQ19HRVRfUEhZX0JNU1IocGh5LHgpCQlTTUNfR0VUX01JSSggTUlJX0JNU1IsIHBoeSwgeCApCi0jZGVmaW5lIFNNQ19HRVRfUEhZX0lEMShwaHkseCkJCVNNQ19HRVRfTUlJKCBNSUlfUEhZU0lEMSwgcGh5LCB4ICkKLSNkZWZpbmUgU01DX0dFVF9QSFlfSUQyKHBoeSx4KQkJU01DX0dFVF9NSUkoIE1JSV9QSFlTSUQyLCBwaHksIHggKQotI2RlZmluZSBTTUNfR0VUX1BIWV9NSUlfQURWKHBoeSx4KQlTTUNfR0VUX01JSSggTUlJX0FEVkVSVElTRSwgcGh5LCB4ICkKLSNkZWZpbmUgU01DX1NFVF9QSFlfTUlJX0FEVihwaHkseCkJU01DX1NFVF9NSUkoIE1JSV9BRFZFUlRJU0UsIHBoeSwgeCApCi0jZGVmaW5lIFNNQ19HRVRfUEhZX01JSV9MUEEocGh5LHgpCVNNQ19HRVRfTUlJKCBNSUlfTFBBLCBwaHksIHggKQotI2RlZmluZSBTTUNfU0VUX1BIWV9NSUlfTFBBKHBoeSx4KQlTTUNfU0VUX01JSSggTUlJX0xQQSwgcGh5LCB4ICkKLSNkZWZpbmUgU01DX0dFVF9QSFlfQ1RSTF9TVFMocGh5LHgpCVNNQ19HRVRfTUlJKCBQSFlfTU9ERV9DVFJMX1NUUywgcGh5LCB4ICkKLSNkZWZpbmUgU01DX1NFVF9QSFlfQ1RSTF9TVFMocGh5LHgpCVNNQ19TRVRfTUlJKCBQSFlfTU9ERV9DVFJMX1NUUywgcGh5LCB4ICkKLSNkZWZpbmUgU01DX0dFVF9QSFlfSU5UX1NSQyhwaHkseCkJU01DX0dFVF9NSUkoIFBIWV9JTlRfU1JDLCBwaHksIHggKQotI2RlZmluZSBTTUNfU0VUX1BIWV9JTlRfU1JDKHBoeSx4KQlTTUNfU0VUX01JSSggUEhZX0lOVF9TUkMsIHBoeSwgeCApCi0jZGVmaW5lIFNNQ19HRVRfUEhZX0lOVF9NQVNLKHBoeSx4KQlTTUNfR0VUX01JSSggUEhZX0lOVF9NQVNLLCBwaHksIHggKQotI2RlZmluZSBTTUNfU0VUX1BIWV9JTlRfTUFTSyhwaHkseCkJU01DX1NFVF9NSUkoIFBIWV9JTlRfTUFTSywgcGh5LCB4ICkKLSNkZWZpbmUgU01DX0dFVF9QSFlfU1BFQ0lBTChwaHkseCkJU01DX0dFVF9NSUkoIFBIWV9TUEVDSUFMLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9CTUNSKGxwLHBoeSx4KQkJU01DX0dFVF9NSUkoIChscCksIE1JSV9CTUNSLCBwaHksIHggKQorI2RlZmluZSBTTUNfU0VUX1BIWV9CTUNSKGxwLHBoeSx4KQkJU01DX1NFVF9NSUkoIChscCksIE1JSV9CTUNSLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9CTVNSKGxwLHBoeSx4KQkJU01DX0dFVF9NSUkoIChscCksIE1JSV9CTVNSLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9JRDEobHAscGh5LHgpCQlTTUNfR0VUX01JSSggKGxwKSwgTUlJX1BIWVNJRDEsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19HRVRfUEhZX0lEMihscCxwaHkseCkJCVNNQ19HRVRfTUlJKCAobHApLCBNSUlfUEhZU0lEMiwgcGh5LCB4ICkKKyNkZWZpbmUgU01DX0dFVF9QSFlfTUlJX0FEVihscCxwaHkseCkJU01DX0dFVF9NSUkoIChscCksIE1JSV9BRFZFUlRJU0UsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19TRVRfUEhZX01JSV9BRFYobHAscGh5LHgpCVNNQ19TRVRfTUlJKCAobHApLCBNSUlfQURWRVJUSVNFLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9NSUlfTFBBKGxwLHBoeSx4KQlTTUNfR0VUX01JSSggKGxwKSwgTUlJX0xQQSwgcGh5LCB4ICkKKyNkZWZpbmUgU01DX1NFVF9QSFlfTUlJX0xQQShscCxwaHkseCkJU01DX1NFVF9NSUkoIChscCksIE1JSV9MUEEsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19HRVRfUEhZX0NUUkxfU1RTKGxwLHBoeSx4KQlTTUNfR0VUX01JSSggKGxwKSwgUEhZX01PREVfQ1RSTF9TVFMsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19TRVRfUEhZX0NUUkxfU1RTKGxwLHBoeSx4KQlTTUNfU0VUX01JSSggKGxwKSwgUEhZX01PREVfQ1RSTF9TVFMsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19HRVRfUEhZX0lOVF9TUkMobHAscGh5LHgpCVNNQ19HRVRfTUlJKCAobHApLCBQSFlfSU5UX1NSQywgcGh5LCB4ICkKKyNkZWZpbmUgU01DX1NFVF9QSFlfSU5UX1NSQyhscCxwaHkseCkJU01DX1NFVF9NSUkoIChscCksIFBIWV9JTlRfU1JDLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9JTlRfTUFTSyhscCxwaHkseCkJU01DX0dFVF9NSUkoIChscCksIFBIWV9JTlRfTUFTSywgcGh5LCB4ICkKKyNkZWZpbmUgU01DX1NFVF9QSFlfSU5UX01BU0sobHAscGh5LHgpCVNNQ19TRVRfTUlJKCAobHApLCBQSFlfSU5UX01BU0ssIHBoeSwgeCApCisjZGVmaW5lIFNNQ19HRVRfUEhZX1NQRUNJQUwobHAscGh5LHgpCVNNQ19HRVRfTUlJKCAobHApLCBQSFlfU1BFQ0lBTCwgcGh5LCB4ICkKIAogCiAKIC8qIE1pc2MgcmVhZC93cml0ZSBtYWNyb3MgKi8KIAogI2lmbmRlZiBTTUNfR0VUX01BQ19BRERSCi0jZGVmaW5lIFNNQ19HRVRfTUFDX0FERFIoYWRkcikJCQkJCVwKKyNkZWZpbmUgU01DX0dFVF9NQUNfQUREUihscCwgYWRkcikJCQkJXAogCWRvIHsJCQkJCQkJXAogCQl1bnNpZ25lZCBpbnQgX192OwkJCQlcCiAJCQkJCQkJCVwKLQkJU01DX0dFVF9NQUNfQ1NSKEFERFJMLCBfX3YpOwkJCVwKKwkJU01DX0dFVF9NQUNfQ1NSKChscCksIEFERFJMLCBfX3YpOwkJCVwKIAkJYWRkclswXSA9IF9fdjsgYWRkclsxXSA9IF9fdiA+PiA4OwkJXAogCQlhZGRyWzJdID0gX192ID4+IDE2OyBhZGRyWzNdID0gX192ID4+IDI0OwlcCi0JCVNNQ19HRVRfTUFDX0NTUihBRERSSCwgX192KTsJCQlcCisJCVNNQ19HRVRfTUFDX0NTUigobHApLCBBRERSSCwgX192KTsJCQlcCiAJCWFkZHJbNF0gPSBfX3Y7IGFkZHJbNV0gPSBfX3YgPj4gODsJCVwKIAl9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUgU01DX1NFVF9NQUNfQUREUihhZGRyKQkJCQkJXAorI2RlZmluZSBTTUNfU0VUX01BQ19BRERSKGxwLCBhZGRyKQkJCQlcCiAJZG8gewkJCQkJCQlcCi0JCSBTTUNfU0VUX01BQ19DU1IoQUREUkwsCQkJCVwKKwkJIFNNQ19TRVRfTUFDX0NTUigobHApLCBBRERSTCwJCQkJXAogCQkJCSBhZGRyWzBdIHwJCQlcCiAJCQkJKGFkZHJbMV0gPDwgOCkgfAkJXAogCQkJCShhZGRyWzJdIDw8IDE2KSB8CQlcCiAJCQkJKGFkZHJbM10gPDwgMjQpKTsJCVwKLQkJIFNNQ19TRVRfTUFDX0NTUihBRERSSCwgYWRkcls0XXwoYWRkcls1XSA8PCA4KSk7XAorCQkgU01DX1NFVF9NQUNfQ1NSKChscCksIEFERFJILCBhZGRyWzRdfChhZGRyWzVdIDw8IDgpKTtcCiAJfSB3aGlsZSAoMCkKIAogCi0jZGVmaW5lIFNNQ19XUklURV9FRVBST01fQ01EKGNtZCwgYWRkcikJCQkJCVwKKyNkZWZpbmUgU01DX1dSSVRFX0VFUFJPTV9DTUQobHAsIGNtZCwgYWRkcikJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJd2hpbGUgKFNNQ19HRVRfRTJQX0NNRCgpICYgTUFDX0NTUl9DTURfQ1NSX0JVU1lfKTsJXAotCQlTTUNfU0VUX01BQ19DTUQoTUFDX0NTUl9DTURfUl9OT1RfV18gfCBhICk7CQlcCi0JCXdoaWxlIChTTUNfR0VUX01BQ19DTUQoKSAmIE1BQ19DU1JfQ01EX0NTUl9CVVNZXyk7CVwKKwkJd2hpbGUgKFNNQ19HRVRfRTJQX0NNRCgobHApKSAmIE1BQ19DU1JfQ01EX0NTUl9CVVNZXyk7CVwKKwkJU01DX1NFVF9NQUNfQ01EKChscCksIE1BQ19DU1JfQ01EX1JfTk9UX1dfIHwgYSApOwkJXAorCQl3aGlsZSAoU01DX0dFVF9NQUNfQ01EKChscCkpICYgTUFDX0NTUl9DTURfQ1NSX0JVU1lfKTsJXAogCX0gd2hpbGUgKDApCiAKICNlbmRpZgkgLyogX1NNQzkxMVhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggZjIwNTFiMi4uMjA0MDk2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCSAqIGNhbid0IGhhbmRsZSBpdCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gcmVjb3ZlcnkgZXhjZXB0IGZvcgogCSAqIGEgaGFyZCByZXNldCBvciBwb3dlciBjeWNsZQogCSAqLwotCWlmIChub3dhaXQpCisJaWYgKGxwLT5jZmcuZmxhZ3MgJiBTTUM5MVhfTk9XQUlUKQogCQljZmcgfD0gQ09ORklHX05PX1dBSVQ7CiAKIAkvKgpAQCAtMTkzOSw4ICsxOTM5LDExIEBACiAgICAgICAJaWYgKHJldHZhbCkKICAgICAgIAkJZ290byBlcnJfb3V0OwogCi0jaWZkZWYgU01DX1VTRV9QWEFfRE1BCi0JeworI2lmZGVmIENPTkZJR19BUkNIX1BYQQorIyAgaWZkZWYgU01DX1VTRV9QWEFfRE1BCisJbHAtPmNmZy5mbGFncyB8PSBTTUM5MVhfVVNFX0RNQTsKKyMgIGVuZGlmCisJaWYgKGxwLT5jZmcuZmxhZ3MgJiBTTUM5MVhfVVNFX0RNQSkgewogCQlpbnQgZG1hID0gcHhhX3JlcXVlc3RfZG1hKGRldi0+bmFtZSwgRE1BX1BSSU9fTE9XLAogCQkJCQkgIHNtY19weGFfZG1hX2lycSwgTlVMTCk7CiAJCWlmIChkbWEgPj0gMCkKQEAgLTE5ODAsNyArMTk4Myw3IEBACiAJfQogCiBlcnJfb3V0OgotI2lmZGVmIFNNQ19VU0VfUFhBX0RNQQorI2lmZGVmIENPTkZJR19BUkNIX1BYQQogCWlmIChyZXR2YWwgJiYgZGV2LT5kbWEgIT0gKHVuc2lnbmVkIGNoYXIpLTEpCiAJCXB4YV9mcmVlX2RtYShkZXYtPmRtYSk7CiAjZW5kaWYKQEAgLTIwNTAsOSArMjA1MywxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtY19yZXF1ZXN0X2F0dHJpYihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBzbWNfcmVxdWVzdF9hdHRyaWIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqIHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJzbWM5MXgtYXR0cmliIik7CisJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCWlmICghcmVzKQogCQlyZXR1cm4gMDsKQEAgLTIwNjMsOSArMjA2OCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzbWNfcmVsZWFzZV9hdHRyaWIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyB2b2lkIHNtY19yZWxlYXNlX2F0dHJpYihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqIHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJzbWM5MXgtYXR0cmliIik7CisJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCWlmIChyZXMpCiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBBVFRSSUJfU0laRSk7CkBAIC0yMTIzLDI3ICsyMTMwLDE0IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAJc3RydWN0IHJlc291cmNlICpyZXMsICppcmVzOwogCXVuc2lnbmVkIGludCBfX2lvbWVtICphZGRyOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzID0gU01DX0lSUV9GTEFHUzsKIAlpbnQgcmV0OwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInNtYzkxeC1yZWdzIik7Ci0JaWYgKCFyZXMpCi0JCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCi0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBTTUNfSU9fRVhURU5ULCBDQVJETkFNRSkpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KIAluZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBzbWNfbG9jYWwpKTsKIAlpZiAoIW5kZXYpIHsKIAkJcHJpbnRrKCIlczogY291bGQgbm90IGFsbG9jYXRlIGRldmljZS5cbiIsIENBUkROQU1FKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfcmVsZWFzZV9pbzsKKwkJZ290byBvdXQ7CiAJfQogCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOwogCkBAIC0yMTUyLDM3ICsyMTQ2LDQ3IEBACiAJICovCiAKIAlscCA9IG5ldGRldl9wcml2KG5kZXYpOwotCWxwLT5jZmcuaXJxX2ZsYWdzID0gU01DX0lSUV9GTEFHUzsKIAotI2lmZGVmIFNNQ19EWU5BTUlDX0JVU19DT05GSUcKLQlpZiAocGQpCisJaWYgKHBkKSB7CiAJCW1lbWNweSgmbHAtPmNmZywgcGQsIHNpemVvZihscC0+Y2ZnKSk7Ci0JZWxzZSB7Ci0JCWxwLT5jZmcuZmxhZ3MgPSBTTUM5MVhfVVNFXzhCSVQ7Ci0JCWxwLT5jZmcuZmxhZ3MgfD0gU01DOTFYX1VTRV8xNkJJVDsKLQkJbHAtPmNmZy5mbGFncyB8PSBTTUM5MVhfVVNFXzMyQklUOworCQlscC0+aW9fc2hpZnQgPSBTTUM5MVhfSU9fU0hJRlQobHAtPmNmZy5mbGFncyk7CisJfSBlbHNlIHsKKwkJbHAtPmNmZy5mbGFncyB8PSAoU01DX0NBTl9VU0VfOEJJVCkgID8gU01DOTFYX1VTRV84QklUICA6IDA7CisJCWxwLT5jZmcuZmxhZ3MgfD0gKFNNQ19DQU5fVVNFXzE2QklUKSA/IFNNQzkxWF9VU0VfMTZCSVQgOiAwOworCQlscC0+Y2ZnLmZsYWdzIHw9IChTTUNfQ0FOX1VTRV8zMkJJVCkgPyBTTUM5MVhfVVNFXzMyQklUIDogMDsKKwkJbHAtPmNmZy5mbGFncyB8PSAobm93YWl0KSA/IFNNQzkxWF9OT1dBSVQgOiAwOwogCX0KIAotCWxwLT5jZmcuZmxhZ3MgJj0gfihTTUNfQ0FOX1VTRV84QklUID8gMCA6IFNNQzkxWF9VU0VfOEJJVCk7Ci0JbHAtPmNmZy5mbGFncyAmPSB+KFNNQ19DQU5fVVNFXzE2QklUID8gMCA6IFNNQzkxWF9VU0VfMTZCSVQpOwotCWxwLT5jZmcuZmxhZ3MgJj0gfihTTUNfQ0FOX1VTRV8zMkJJVCA/IDAgOiBTTUM5MVhfVVNFXzMyQklUKTsKLSNlbmRpZgotCiAJbmRldi0+ZG1hID0gKHVuc2lnbmVkIGNoYXIpLTE7CiAKLQlpcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKLQlpZiAoIWlyZXMpIHsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAic21jOTF4LXJlZ3MiKTsKKwlpZiAoIXJlcykKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF9mcmVlX25ldGRldjsKIAl9CiAKLQluZGV2LT5pcnEgPSBpcmVzLT5zdGFydDsKLQlpZiAoU01DX0lSUV9GTEFHUyA9PSAtMSkKLQkJbHAtPmNmZy5pcnFfZmxhZ3MgPSBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCi0JcmV0ID0gc21jX3JlcXVlc3RfYXR0cmliKHBkZXYpOwotCWlmIChyZXQpCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgU01DX0lPX0VYVEVOVCwgQ0FSRE5BTUUpKSB7CisJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXRfZnJlZV9uZXRkZXY7CisJfQorCisJaXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcmVzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3JlbGVhc2VfaW87CisJfQorCisJbmRldi0+aXJxID0gaXJlcy0+c3RhcnQ7CisKKwlpZiAoaXJlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykKKwkJaXJxX2ZsYWdzID0gaXJlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKworCXJldCA9IHNtY19yZXF1ZXN0X2F0dHJpYihwZGV2LCBuZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWxlYXNlX2lvOwogI2lmIGRlZmluZWQoQ09ORklHX1NBMTEwMF9BU1NBQkVUKQogCU5DUl8wIHw9IE5DUl9FTkVUX09TQ19FTjsKICNlbmRpZgpAQCAtMjE5Nyw3ICsyMjAxLDcgQEAKIAkJZ290byBvdXRfcmVsZWFzZV9hdHRyaWI7CiAJfQogCi0jaWZkZWYgU01DX1VTRV9QWEFfRE1BCisjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCiAJewogCQlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwogCQlscC0+ZGV2aWNlID0gJnBkZXYtPmRldjsKQEAgLTIyMDUsNyArMjIwOSw3IEBACiAJfQogI2VuZGlmCiAKLQlyZXQgPSBzbWNfcHJvYmUobmRldiwgYWRkciwgbHAtPmNmZy5pcnFfZmxhZ3MpOworCXJldCA9IHNtY19wcm9iZShuZGV2LCBhZGRyLCBpcnFfZmxhZ3MpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfaW91bm1hcDsKIApAQCAtMjIxNywxMSArMjIyMSwxMSBAQAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWlvdW5tYXAoYWRkcik7CiAgb3V0X3JlbGVhc2VfYXR0cmliOgotCXNtY19yZWxlYXNlX2F0dHJpYihwZGV2KTsKLSBvdXRfZnJlZV9uZXRkZXY6Ci0JZnJlZV9uZXRkZXYobmRldik7CisJc21jX3JlbGVhc2VfYXR0cmliKHBkZXYsIG5kZXYpOwogIG91dF9yZWxlYXNlX2lvOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBTTUNfSU9fRVhURU5UKTsKKyBvdXRfZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYobmRldik7CiAgb3V0OgogCXByaW50aygiJXM6IG5vdCBmb3VuZCAoJWQpLlxuIiwgQ0FSRE5BTUUsIHJldCk7CiAKQEAgLTIyNDAsMTQgKzIyNDQsMTQgQEAKIAogCWZyZWVfaXJxKG5kZXYtPmlycSwgbmRldik7CiAKLSNpZmRlZiBTTUNfVVNFX1BYQV9ETUEKKyNpZmRlZiBDT05GSUdfQVJDSF9QWEEKIAlpZiAobmRldi0+ZG1hICE9ICh1bnNpZ25lZCBjaGFyKS0xKQogCQlweGFfZnJlZV9kbWEobmRldi0+ZG1hKTsKICNlbmRpZgogCWlvdW5tYXAobHAtPmJhc2UpOwogCiAJc21jX3JlbGVhc2VfZGF0YWNzKHBkZXYsbmRldik7Ci0Jc21jX3JlbGVhc2VfYXR0cmliKHBkZXYpOworCXNtY19yZWxlYXNlX2F0dHJpYihwZGV2LG5kZXYpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInNtYzkxeC1yZWdzIik7CiAJaWYgKCFyZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IDg2MDY4MTg2Li4yMjIwOWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtNDAsMjMgKzQwLDQ2IEBACiAgKiBEZWZpbmUgeW91ciBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYnVzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBoZXJlLgogICovCiAKLSNpZglkZWZpbmVkKENPTkZJR19BUkNIX0xVQkJPQ0spCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9MVUJCT0NLKSB8fFwKKyAgICBkZWZpbmVkKENPTkZJR19NQUNIX01BSU5TVE9ORSkgfHxcCisgICAgZGVmaW5lZChDT05GSUdfTUFDSF9aWUxPTklURSkgfHxcCisgICAgZGVmaW5lZChDT05GSUdfTUFDSF9MSVRUTEVUT04pCiAKLS8qIFdlIGNhbiBvbmx5IGRvIDE2LWJpdCByZWFkcyBhbmQgd3JpdGVzIGluIHRoZSBzdGF0aWMgbWVtb3J5IHNwYWNlLiAqLwotI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTAKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisvKiBOb3cgdGhlIGJ1cyB3aWR0aCBpcyBzcGVjaWZpZWQgaW4gdGhlIHBsYXRmb3JtIGRhdGEKKyAqIHByZXRlbmQgaGVyZSB0byBzdXBwb3J0IGFsbCBJL08gYWNjZXNzIHR5cGVzCisgKi8KKyNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCiAjZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKLSNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMAorI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVAkxCiAjZGVmaW5lIFNNQ19OT1dBSVQJCTEKIAotLyogVGhlIGZpcnN0IHR3byBhZGRyZXNzIGxpbmVzIGFyZW4ndCBjb25uZWN0ZWQuLi4gKi8KLSNkZWZpbmUgU01DX0lPX1NISUZUCQkyCisjZGVmaW5lIFNNQ19JT19TSElGVAkJKGxwLT5pb19zaGlmdCkKIAorI2RlZmluZSBTTUNfaW5iKGEsIHIpCQlyZWFkYigoYSkgKyAocikpCiAjZGVmaW5lIFNNQ19pbncoYSwgcikJCXJlYWR3KChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dHcodiwgYSwgcikJd3JpdGV3KHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX2lubChhLCByKQkJcmVhZGwoKGEpICsgKHIpKQorI2RlZmluZSBTTUNfb3V0Yih2LCBhLCByKQl3cml0ZWIodiwgKGEpICsgKHIpKQorI2RlZmluZSBTTUNfb3V0bCh2LCBhLCByKQl3cml0ZWwodiwgKGEpICsgKHIpKQogI2RlZmluZSBTTUNfaW5zdyhhLCByLCBwLCBsKQlyZWFkc3coKGEpICsgKHIpLCBwLCBsKQogI2RlZmluZSBTTUNfb3V0c3coYSwgciwgcCwgbCkJd3JpdGVzdygoYSkgKyAociksIHAsIGwpCisjZGVmaW5lIFNNQ19pbnNsKGEsIHIsIHAsIGwpCXJlYWRzbCgoYSkgKyAociksIHAsIGwpCisjZGVmaW5lIFNNQ19vdXRzbChhLCByLCBwLCBsKQl3cml0ZXNsKChhKSArIChyKSwgcCwgbCkKICNkZWZpbmUgU01DX0lSUV9GTEFHUwkJKC0xKQkvKiBmcm9tIHJlc291cmNlICovCiAKKy8qIFdlIGFjdHVhbGx5IGNhbid0IHdyaXRlIGhhbGZ3b3JkcyBwcm9wZXJseSBpZiBub3Qgd29yZCBhbGlnbmVkICovCitzdGF0aWMgaW5saW5lIHZvaWQgU01DX291dHcodTE2IHZhbCwgdm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWcpCit7CisJaWYgKG1hY2hpbmVfaXNfbWFpbnN0b25lKCkgJiYgcmVnICYgMikgeworCQl1bnNpZ25lZCBpbnQgdiA9IHZhbCA8PCAxNjsKKwkJdiB8PSByZWFkbChpb2FkZHIgKyAocmVnICYgfjIpKSAmIDB4ZmZmZjsKKwkJd3JpdGVsKHYsIGlvYWRkciArIChyZWcgJiB+MikpOworCX0gZWxzZSB7CisJCXdyaXRldyh2YWwsIGlvYWRkciArIHJlZyk7CisJfQorfQorCiAjZWxpZiBkZWZpbmVkKENPTkZJR19CTEFDS0ZJTikKIAogI2RlZmluZSBTTUNfSVJRX0ZMQUdTCQlJUlFGX1RSSUdHRVJfSElHSApAQCAtMTk1LDcgKzIxOCw2IEBACiAjZGVmaW5lIFNNQ19vdXRzdyhhLCByLCBwLCBsKQl3cml0ZXN3KChhKSArIChyKSwgcCwgbCkKIAogI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9JTk5PS09NKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfTUFDSF9NQUlOU1RPTkUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19BUkNIX1BYQV9JRFApIHx8IFwKIAlkZWZpbmVkKENPTkZJR19BUkNIX1JBTVNFUykgfHwgXAogCWRlZmluZWQoQ09ORklHX0FSQ0hfUENNMDI3KQpAQCAtMjI5LDIyICsyNTEsNiBAQAogCX0KIH0KIAotI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9aWUxPTklURSkKLQotI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUICAgICAgICAxCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUICAgICAgIDEKLSNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQgICAgICAgMAotI2RlZmluZSBTTUNfSU9fU0hJRlQgICAgICAgICAgICAwCi0jZGVmaW5lIFNNQ19OT1dBSVQgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU01DX1VTRV9QWEFfRE1BCQkxCi0jZGVmaW5lIFNNQ19pbmIoYSwgcikgICAgICAgICAgIHJlYWRiKChhKSArIChyKSkKLSNkZWZpbmUgU01DX2ludyhhLCByKSAgICAgICAgICAgcmVhZHcoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfaW5zdyhhLCByLCBwLCBsKSAgICBpbnN3KChhKSArIChyKSwgcCwgbCkKLSNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpICAgb3V0c3coKGEpICsgKHIpLCBwLCBsKQotI2RlZmluZSBTTUNfb3V0Yih2LCBhLCByKSAgICAgICB3cml0ZWIodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0dyh2LCBhLCByKSAgICAgICB3cml0ZXcodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfSVJRX0ZMQUdTCQkoLTEpCS8qIGZyb20gcmVzb3VyY2UgKi8KLQogI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQKQogCiAvKiBXZSBjYW4gb25seSBkbyAxNi1iaXQgcmVhZHMgYW5kIHdyaXRlcyBpbiB0aGUgc3RhdGljIG1lbW9yeSBzcGFjZS4gKi8KQEAgLTQ1NCw3ICs0NjAsNiBAQAogI2RlZmluZSBSUENfTFNBX0RFRkFVTFQJCVJQQ19MRURfMTAwXzEwCiAjZGVmaW5lIFJQQ19MU0JfREVGQVVMVAkJUlBDX0xFRF9UWF9SWAogCi0jZGVmaW5lIFNNQ19EWU5BTUlDX0JVU19DT05GSUcKICNlbmRpZgogCiAKQEAgLTQ5Myw3ICs0OTgsNyBAQAogCiAJc3BpbmxvY2tfdCBsb2NrOwogCi0jaWZkZWYgU01DX1VTRV9QWEFfRE1BCisjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCiAJLyogRE1BIG5lZWRzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjaGlwICovCiAJdV9sb25nIHBoeXNhZGRyOwogCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKQEAgLTUwMSwyMCArNTA2LDE3IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXZvaWQgX19pb21lbSAqZGF0YWNzOwogCisJLyogdGhlIGxvdyBhZGRyZXNzIGxpbmVzIG9uIHNvbWUgcGxhdGZvcm1zIGFyZW4ndCBjb25uZWN0ZWQuLi4gKi8KKwlpbnQJaW9fc2hpZnQ7CisKIAlzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIGNmZzsKIH07CiAKLSNpZmRlZiBTTUNfRFlOQU1JQ19CVVNfQ09ORklHCi0jZGVmaW5lIFNNQ184QklUKHApICgoKHApLT5jZmcuZmxhZ3MgJiBTTUM5MVhfVVNFXzhCSVQpICYmIFNNQ19DQU5fVVNFXzhCSVQpCi0jZGVmaW5lIFNNQ18xNkJJVChwKSAoKChwKS0+Y2ZnLmZsYWdzICYgU01DOTFYX1VTRV8xNkJJVCkgJiYgU01DX0NBTl9VU0VfMTZCSVQpCi0jZGVmaW5lIFNNQ18zMkJJVChwKSAoKChwKS0+Y2ZnLmZsYWdzICYgU01DOTFYX1VTRV8zMkJJVCkgJiYgU01DX0NBTl9VU0VfMzJCSVQpCi0jZWxzZQotI2RlZmluZSBTTUNfOEJJVChwKSBTTUNfQ0FOX1VTRV84QklUCi0jZGVmaW5lIFNNQ18xNkJJVChwKSBTTUNfQ0FOX1VTRV8xNkJJVAotI2RlZmluZSBTTUNfMzJCSVQocCkgU01DX0NBTl9VU0VfMzJCSVQKLSNlbmRpZgorI2RlZmluZSBTTUNfOEJJVChwKQkoKHApLT5jZmcuZmxhZ3MgJiBTTUM5MVhfVVNFXzhCSVQpCisjZGVmaW5lIFNNQ18xNkJJVChwKQkoKHApLT5jZmcuZmxhZ3MgJiBTTUM5MVhfVVNFXzE2QklUKQorI2RlZmluZSBTTUNfMzJCSVQocCkJKChwKS0+Y2ZnLmZsYWdzICYgU01DOTFYX1VTRV8zMkJJVCkKIAotI2lmZGVmIFNNQ19VU0VfUFhBX0RNQQorI2lmZGVmIENPTkZJR19BUkNIX1BYQQogLyoKICAqIExldCdzIHVzZSB0aGUgRE1BIGVuZ2luZSBvbiB0aGUgWFNjYWxlIFBYQTJ4eCBmb3IgUlggcGFja2V0cy4gVGhpcyBpcwogICogYWx3YXlzIGhhcHBlbmluZyBpbiBpcnEgY29udGV4dCBzbyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHJhY2VzLiAgVFggaXMKQEAgLTYwOCw3ICs2MTAsNyBAQAogewogCURDU1IoZG1hKSA9IDA7CiB9Ci0jZW5kaWYgIC8qIFNNQ19VU0VfUFhBX0RNQSAqLworI2VuZGlmICAvKiBDT05GSUdfQVJDSF9QWEEgKi8KIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IDQ3NzY3MTYuLjAwYWEwYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTE3MDQsNyArMTcwNCw3IEBACiAgKgogICogc3BpZGVyX25ldF9lbmFibGVfaW50ZXJydXB0IGVuYWJsZXMgc2V2ZXJhbCBpbnRlcnJ1cHRzCiAgKi8KLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIHNwaWRlcl9uZXRfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHNwaWRlcl9uZXRfY2FyZCAqY2FyZCkKIHsKIAlzcGlkZXJfbmV0X3dyaXRlX3JlZyhjYXJkLCBTUElERVJfTkVUX0dISUlOVDBNU0ssCkBAIC0xNzIxLDcgKzE3MjEsNyBAQAogICoKICAqIHNwaWRlcl9uZXRfZGlzYWJsZV9pbnRlcnJ1cHRzIGRpc2FibGVzIGFsbCB0aGUgaW50ZXJydXB0cwogICovCi1zdGF0aWMgdm9pZCAKK3N0YXRpYyB2b2lkCiBzcGlkZXJfbmV0X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgc3BpZGVyX25ldF9jYXJkICpjYXJkKQogewogCXNwaWRlcl9uZXRfd3JpdGVfcmVnKGNhcmQsIFNQSURFUl9ORVRfR0hJSU5UME1TSywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCA3YjdiMTcxLi4xZDJlZjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTI3LDggKzI3LDggQEAKICovCiAKICNkZWZpbmUgRFJWX05BTUUJInN0YXJmaXJlIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wIgotI2RlZmluZSBEUlZfUkVMREFURQkiSnVuZSAyNywgMjAwNiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMSIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIkp1bHkgIDYsIDIwMDgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTY5LDEwICs2OSw2IEBACiAjZGVmaW5lIFZMQU5fU1VQUE9SVAogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHX0FEQVBURUNfU1RBUkZJUkVfTkFQSQotI3VuZGVmIEhBVkVfTkVUREVWX1BPTEwKLSNlbmRpZgotCiAvKiBUaGUgdXNlci1jb25maWd1cmFibGUgdmFsdWVzLgogICAgVGhlc2UgbWF5IGJlIG1vZGlmaWVkIHdoZW4gYSBkcml2ZXIgbW9kdWxlIGlzIGxvYWRlZC4qLwogCkBAIC0xNzcsNDQgKzE3Myw2IEBACiAjZGVmaW5lIHNrYl9maXJzdF9mcmFnX2xlbihza2IpCXNrYl9oZWFkbGVuKHNrYikKICNkZWZpbmUgc2tiX251bV9mcmFncyhza2IpIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkKIAotI2lmZGVmIEhBVkVfTkVUREVWX1BPTEwKLSNkZWZpbmUgaW5pdF9wb2xsKGRldiwgbnApIFwKLQluZXRpZl9uYXBpX2FkZChkZXYsICZucC0+bmFwaSwgbmV0ZGV2X3BvbGwsIG1heF9pbnRlcnJ1cHRfd29yaykKLSNkZWZpbmUgbmV0ZGV2X3J4KGRldiwgbnAsIGlvYWRkcikgXAotZG8geyBcCi0JdTMyIGludHJfZW5hYmxlOyBcCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2LCAmbnAtPm5hcGkpKSB7IFwKLQkJX19uZXRpZl9yeF9zY2hlZHVsZShkZXYsICZucC0+bmFwaSk7IFwKLQkJaW50cl9lbmFibGUgPSByZWFkbChpb2FkZHIgKyBJbnRyRW5hYmxlKTsgXAotCQlpbnRyX2VuYWJsZSAmPSB+KEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSk7IFwKLQkJd3JpdGVsKGludHJfZW5hYmxlLCBpb2FkZHIgKyBJbnRyRW5hYmxlKTsgXAotCQlyZWFkbChpb2FkZHIgKyBJbnRyRW5hYmxlKTsgLyogZmx1c2ggUENJIHBvc3RpbmcgYnVmZmVycyAqLyBcCi0JfSBlbHNlIHsgXAotCQkvKiBQYXJhbm9pYSBjaGVjayAqLyBcCi0JCWludHJfZW5hYmxlID0gcmVhZGwoaW9hZGRyICsgSW50ckVuYWJsZSk7IFwKLQkJaWYgKGludHJfZW5hYmxlICYgKEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSkpIHsgXAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVycnVwdCB3aGlsZSBpbiBwb2xsaW5nIG1vZGUhXG4iLCBkZXYtPm5hbWUpOyBcCi0JCQlpbnRyX2VuYWJsZSAmPSB+KEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSk7IFwKLQkJCXdyaXRlbChpbnRyX2VuYWJsZSwgaW9hZGRyICsgSW50ckVuYWJsZSk7IFwKLQkJfSBcCi0JfSBcCi19IHdoaWxlICgwKQotI2RlZmluZSBuZXRkZXZfcmVjZWl2ZV9za2Ioc2tiKSBuZXRpZl9yZWNlaXZlX3NrYihza2IpCi0jZGVmaW5lIHZsYW5fbmV0ZGV2X3JlY2VpdmVfc2tiKHNrYiwgdmxncnAsIHZsaWQpIHZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHZsZ3JwLCB2bGlkKQotc3RhdGljIGludAluZXRkZXZfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwotI2Vsc2UgIC8qIG5vdCBIQVZFX05FVERFVl9QT0xMICovCi0jZGVmaW5lIGluaXRfcG9sbChkZXYsIG5wKQotI2RlZmluZSBuZXRkZXZfcmVjZWl2ZV9za2Ioc2tiKSBuZXRpZl9yeChza2IpCi0jZGVmaW5lIHZsYW5fbmV0ZGV2X3JlY2VpdmVfc2tiKHNrYiwgdmxncnAsIHZsaWQpIHZsYW5faHdhY2NlbF9yeChza2IsIHZsZ3JwLCB2bGlkKQotI2RlZmluZSBuZXRkZXZfcngoZGV2LCBucCwgaW9hZGRyKSBcCi1kbyB7IFwKLQlpbnQgcXVvdGEgPSBucC0+ZGlydHlfcnggKyBSWF9SSU5HX1NJWkUgLSBucC0+Y3VyX3J4OyBcCi0JX19uZXRkZXZfcngoZGV2LCAmcXVvdGEpO1wKLX0gd2hpbGUgKDApCi0jZW5kaWYgLyogbm90IEhBVkVfTkVUREVWX1BPTEwgKi8KLS8qIGVuZCBvZiBjb21wYXRpYmlsaXR5IGNvZGUgKi8KLQotCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwogc3RhdGljIGNoYXIgdmVyc2lvbltdID0KIEtFUk5fSU5GTyAic3RhcmZpcmUuYzp2MS4wMyA3LzI2LzIwMDAgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKQEAgLTYzNSw2ICs1OTMsNyBAQAogc3RhdGljIGlycXJldHVybl90IGludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIHZvaWQJbmV0ZGV2X2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbnRyX3N0YXR1cyk7CiBzdGF0aWMgaW50CV9fbmV0ZGV2X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqcXVvdGEpOworc3RhdGljIGludAluZXRkZXZfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwogc3RhdGljIHZvaWQJcmVmaWxsX3J4X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZAluZXRkZXZfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGludHJfc3RhdHVzKTsKIHN0YXRpYyB2b2lkCXNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtODUxLDcgKzgxMCw3IEBACiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc3RhcnRfdHg7CiAJZGV2LT50eF90aW1lb3V0ID0gdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLQlpbml0X3BvbGwoZGV2LCBucCk7CisJbmV0aWZfbmFwaV9hZGQoZGV2LCAmbnAtPm5hcGksIG5ldGRldl9wb2xsLCBtYXhfaW50ZXJydXB0X3dvcmspOwogCWRldi0+c3RvcCA9ICZuZXRkZXZfY2xvc2U7CiAJZGV2LT5nZXRfc3RhdHMgPSAmZ2V0X3N0YXRzOwogCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9yeF9tb2RlOwpAQCAtMTA1NCw5ICsxMDEzLDggQEAKIAogCXdyaXRlbChucC0+aW50cl90aW1lcl9jdHJsLCBpb2FkZHIgKyBJbnRyVGltZXJDdHJsKTsKIAotI2lmZGVmIEhBVkVfTkVUREVWX1BPTEwKIAluYXBpX2VuYWJsZSgmbnAtPm5hcGkpOwotI2VuZGlmCisKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCiAJaWYgKGRlYnVnID4gMSkKQEAgLTEzMzAsOCArMTI4OCwyOCBAQAogCiAJCWhhbmRsZWQgPSAxOwogCi0JCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpKQotCQkJbmV0ZGV2X3J4KGRldiwgbnAsIGlvYWRkcik7CisJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpKSB7CisJCQl1MzIgZW5hYmxlOworCisJCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2LCAmbnAtPm5hcGkpKSkgeworCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2LCAmbnAtPm5hcGkpOworCQkJCWVuYWJsZSA9IHJlYWRsKGlvYWRkciArIEludHJFbmFibGUpOworCQkJCWVuYWJsZSAmPSB+KEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSk7CisJCQkJd3JpdGVsKGVuYWJsZSwgaW9hZGRyICsgSW50ckVuYWJsZSk7CisJCQkJLyogZmx1c2ggUENJIHBvc3RpbmcgYnVmZmVycyAqLworCQkJCXJlYWRsKGlvYWRkciArIEludHJFbmFibGUpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBQYXJhbm9pYSBjaGVjayAqLworCQkJCWVuYWJsZSA9IHJlYWRsKGlvYWRkciArIEludHJFbmFibGUpOworCQkJCWlmIChlbmFibGUgJiAoSW50clJ4RG9uZSB8IEludHJSeEVtcHR5KSkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCSAgICAgICAiJXM6IGludGVycnVwdCB3aGlsZSBpbiBwb2xsIVxuIiwKKwkJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJCWVuYWJsZSAmPSB+KEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSk7CisJCQkJCXdyaXRlbChlbmFibGUsIGlvYWRkciArIEludHJFbmFibGUpOworCQkJCX0KKwkJCX0KKwkJfQogCiAJCS8qIFNjYXZlbmdlIHRoZSBza2J1ZmYgbGlzdCBiYXNlZCBvbiB0aGUgVHgtZG9uZSBxdWV1ZS4KIAkJICAgVGhlcmUgYXJlIHJlZHVuZGFudCBjaGVja3MgaGVyZSB0aGF0IG1heSBiZSBjbGVhbmVkIHVwCkBAIC0xNDExLDggKzEzODksMTAgQEAKIH0KIAogCi0vKiBUaGlzIHJvdXRpbmUgaXMgbG9naWNhbGx5IHBhcnQgb2YgdGhlIGludGVycnVwdC9wb2xsIGhhbmRsZXIsIGJ1dCBzZXBhcmF0ZWQKLSAgIGZvciBjbGFyaXR5LCBjb2RlIHNoYXJpbmcgYmV0d2VlbiBOQVBJL25vbi1OQVBJLCBhbmQgYmV0dGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24uICovCisvKgorICogVGhpcyByb3V0aW5lIGlzIGxvZ2ljYWxseSBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQvcG9sbCBoYW5kbGVyLCBidXQgc2VwYXJhdGVkCisgKiBmb3IgY2xhcml0eSBhbmQgYmV0dGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24uCisgKi8KIHN0YXRpYyBpbnQgX19uZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpxdW90YSkKIHsKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE1MDcsMTMgKzE0ODcsMjAgQEAKIAkJfQogI2lmZGVmIFZMQU5fU1VQUE9SVAogCQlpZiAobnAtPnZsZ3JwICYmIGxlMTZfdG9fY3B1KGRlc2MtPnN0YXR1czIpICYgMHgwMjAwKSB7Ci0JCQlpZiAoZGVidWcgPiA0KQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIgIG5ldGRldl9yeCgpIHZsYW5pZCA9ICVkXG4iLCBsZTE2X3RvX2NwdShkZXNjLT52bGFuaWQpKTsKLQkJCS8qIHZsYW5fbmV0ZGV2X3JlY2VpdmVfc2tiKCkgZXhwZWN0cyBhIHBhY2tldCB3aXRoIHRoZSBWTEFOIHRhZyBzdHJpcHBlZCBvdXQgKi8KLQkJCXZsYW5fbmV0ZGV2X3JlY2VpdmVfc2tiKHNrYiwgbnAtPnZsZ3JwLCBsZTE2X3RvX2NwdShkZXNjLT52bGFuaWQpICYgVkxBTl9WSURfTUFTSyk7CisJCQl1MTYgdmxpZCA9IGxlMTZfdG9fY3B1KGRlc2MtPnZsYW5pZCk7CisKKwkJCWlmIChkZWJ1ZyA+IDQpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBuZXRkZXZfcngoKSB2bGFuaWQgPSAlZFxuIiwKKwkJCQkgICAgICAgdmxpZCk7CisJCQl9CisJCQkvKgorCQkJICogdmxhbl9od2FjY2VsX3J4IGV4cGVjdHMgYSBwYWNrZXQgd2l0aCB0aGUgVkxBTiB0YWcKKwkJCSAqIHN0cmlwcGVkIG91dC4KKwkJCSAqLworCQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgbnAtPnZsZ3JwLCB2bGlkKTsKIAkJfSBlbHNlCiAjZW5kaWYgLyogVkxBTl9TVVBQT1JUICovCi0JCQluZXRkZXZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCW5wLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKQEAgLTE1MzIsOCArMTUxOSw2IEBACiAJcmV0dXJuIHJldGNvZGU7CiB9CiAKLQotI2lmZGVmIEhBVkVfTkVUREVWX1BPTEwKIHN0YXRpYyBpbnQgbmV0ZGV2X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IG5ldGRldl9wcml2YXRlLCBuYXBpKTsKQEAgLTE1NjQsOCArMTU0OSw2IEBACiAJLyogUmVzdGFydCBSeCBlbmdpbmUgaWYgc3RvcHBlZC4gKi8KIAlyZXR1cm4gYnVkZ2V0IC0gcXVvdGE7CiB9Ci0jZW5kaWYgLyogSEFWRV9ORVRERVZfUE9MTCAqLwotCiAKIHN0YXRpYyB2b2lkIHJlZmlsbF9yeF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xOTA2LDkgKzE4ODksOCBAQAogCWludCBpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotI2lmZGVmIEhBVkVfTkVUREVWX1BPTEwKKwogCW5hcGlfZGlzYWJsZSgmbnAtPm5hcGkpOwotI2VuZGlmCiAKIAlpZiAoZGVidWcgPiAxKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIEludHIgc3RhdHVzICUjOC44eC5cbiIsCkBAIC0yMDQ0LDExICsyMDI2LDggQEAKIC8qIHdoZW4gYSBtb2R1bGUsIHRoaXMgaXMgcHJpbnRlZCB3aGV0aGVyIG9yIG5vdCBkZXZpY2VzIGFyZSBmb3VuZCBpbiBwcm9iZSAqLwogI2lmZGVmIE1PRFVMRQogCXByaW50ayh2ZXJzaW9uKTsKLSNpZmRlZiBIQVZFX05FVERFVl9QT0xMCisKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IHBvbGxpbmcgKE5BUEkpIGVuYWJsZWRcbiIpOwotI2Vsc2UKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IHBvbGxpbmcgKE5BUEkpIGRpc2FibGVkXG4iKTsKLSNlbmRpZgogI2VuZGlmCiAKIAkvKiB3ZSBjYW4gZG8gdGhpcyB0ZXN0IG9ubHkgYXQgcnVuLXRpbWUuLi4gc2lnaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuaG1lLmMgYi9kcml2ZXJzL25ldC9zdW5obWUuYwppbmRleCAxYWE0MjViLi5iNzlkNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5obWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5obWUuYwpAQCAtMjM3Nyw4ICsyMzc3LDYgQEAKIAogCXNwaW5fbG9ja19pcnEoJmhwLT5oYXBweV9sb2NrKTsKIAotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQogCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKGRldi0+bWNfY291bnQgPiA2NCkpIHsKIAkJaG1lX3dyaXRlMzIoaHAsIGJyZWdzICsgQk1BQ19IVEFCTEUwLCAweGZmZmYpOwogCQlobWVfd3JpdGUzMihocCwgYnJlZ3MgKyBCTUFDX0hUQUJMRTEsIDB4ZmZmZik7CkBAIC0yNDEwLDggKzI0MDgsNiBAQAogCQlobWVfd3JpdGUzMihocCwgYnJlZ3MgKyBCTUFDX0hUQUJMRTMsIGhhc2hfdGFibGVbM10pOwogCX0KIAotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQogCXNwaW5fdW5sb2NrX2lycSgmaHAtPmhhcHB5X2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCAyNmFkZTY4Li40ZTk5NGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTkxNSwxNSArOTE1LDExIEBACiAJbHAtPnR4X25ldyA9IFRYX05FWFQoZW50cnkpOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7Ci0KIHN0YXRpYyBpbnQgbGFuY2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlsYXN0X2RldiA9IGRldjsKLQogCVNUT1BfTEFOQ0UobHApOwogCiAJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmbGFuY2VfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCBiMDdiOGNiLi5hNjQ1ZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC02NzIsNyArNjcyLDYgQEAKIAkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCQkJdGMzNTgxNV9zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKICNlbmRpZgotCQkJbmV0aWZfc2NoZWR1bGUoZGV2KTsKIAkJfSBlbHNlIHsKIAkJCWxwLT5zcGVlZCA9IDA7CiAJCQlscC0+ZHVwbGV4ID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuYyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCmluZGV4IDQzMmU4MzcuLjkxZjkwNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCkBAIC0xMTY1LDcgKzExNjUsNyBAQAogCQkJCQkgIEdFVF9SWERfVkxBTl9JRChyeGRfdmxhbikpLT5uYW1lKTsKIAkJLyogTkFQSSB2YXJpYW50IG9mIHJlY2VpdmUgZnVuY3Rpb25zICovCiAJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHByaXYtPnZsZ3JwLAotCQkJCQkgR0VUX1JYRF9WTEFOX0lEKHJ4ZF92bGFuKSk7CisJCQkJCSBHRVRfUlhEX1ZMQU5fVENJKHJ4ZF92bGFuKSk7CiAJfSBlbHNlIHsKIAkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuaCBiL2RyaXZlcnMvbmV0L3RlaHV0aS5oCmluZGV4IGVmZDE3MGYuLmM2NmRmYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5oCkBAIC0zMDksNiArMzA5LDcgQEAKICNkZWZpbmUgR0VUX1JYRF9QS1RfSUQoeCkJCUdFVF9CSVRTX1NISUZUKCh4KSwgMywgMjgpCiAjZGVmaW5lIEdFVF9SWERfVlRBRyh4KQkJCUdFVF9CSVRTX1NISUZUKCh4KSwgMSwgMzEpCiAjZGVmaW5lIEdFVF9SWERfVkxBTl9JRCh4KQkJR0VUX0JJVFNfU0hJRlQoKHgpLCAxMiwgMCkKKyNkZWZpbmUgR0VUX1JYRF9WTEFOX1RDSSh4KQkJR0VUX0JJVFNfU0hJRlQoKHgpLCAxNiwgMCkKICNkZWZpbmUgR0VUX1JYRF9DRkkoeCkJCQlHRVRfQklUU19TSElGVCgoeCksIDEsIDEyKQogI2RlZmluZSBHRVRfUlhEX1BSSU8oeCkJCQlHRVRfQklUU19TSElGVCgoeCksIDMsIDEzKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IGNjNGJkZTguLjYzM2MxMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2JyY21waHkuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KQEAgLTY0LDggKzY2LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuOTIuMSIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKdW5lIDksIDIwMDgiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy45MyIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXkgMjIsIDIwMDgiCiAKICNkZWZpbmUgVEczX0RFRl9NQUNfTU9ERQkwCiAjZGVmaW5lIFRHM19ERUZfUlhfTU9ERQkJMApAQCAtMjAzLDYgKzIwNSw3IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTcyMyl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NjEpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzYxRSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODUpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF85RFhYKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfOU1YWCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUxUSU1BLCBQQ0lfREVWSUNFX0lEX0FMVElNQV9BQzEwMDApfSwKQEAgLTgwNCw2ICs4MDcsNTY5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB0ZzNfYm1jcl9yZXNldChzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgcGh5X2NvbnRyb2w7CisJaW50IGxpbWl0LCBlcnI7CisKKwkvKiBPSywgcmVzZXQgaXQsIGFuZCBwb2xsIHRoZSBCTUNSX1JFU0VUIGJpdCB1bnRpbCBpdAorCSAqIGNsZWFycyBvciB3ZSB0aW1lIG91dC4KKwkgKi8KKwlwaHlfY29udHJvbCA9IEJNQ1JfUkVTRVQ7CisJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgcGh5X2NvbnRyb2wpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWxpbWl0ID0gNTAwMDsKKwl3aGlsZSAobGltaXQtLSkgeworCQllcnIgPSB0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNQ1IsICZwaHlfY29udHJvbCk7CisJCWlmIChlcnIgIT0gMCkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJaWYgKChwaHlfY29udHJvbCAmIEJNQ1JfUkVTRVQpID09IDApIHsKKwkJCXVkZWxheSg0MCk7CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0KKwlpZiAobGltaXQgPD0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRnM19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJwLCBpbnQgbWlpX2lkLCBpbnQgcmVnKQoreworCXN0cnVjdCB0ZzMgKnRwID0gKHN0cnVjdCB0ZzMgKilicC0+cHJpdjsKKwl1MzIgdmFsOworCisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19QQVVTRUQpCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKHRnM19yZWFkcGh5KHRwLCByZWcsICZ2YWwpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgdGczX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJwLCBpbnQgbWlpX2lkLCBpbnQgcmVnLCB1MTYgdmFsKQoreworCXN0cnVjdCB0ZzMgKnRwID0gKHN0cnVjdCB0ZzMgKilicC0+cHJpdjsKKworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX01ESU9CVVNfUEFVU0VEKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWlmICh0ZzNfd3JpdGVwaHkodHAsIHJlZywgdmFsKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZzNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRnM19tZGlvX2NvbmZpZyhzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgdmFsOworCisJaWYgKHRwLT5tZGlvX2J1cy5waHlfbWFwW1BIWV9BRERSXS0+aW50ZXJmYWNlICE9CisJICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSSkKKwkJcmV0dXJuOworCisJdmFsID0gdHIzMihNQUNfUEhZQ0ZHMSkgJiB+KE1BQ19QSFlDRkcxX1JHTUlJX0VYVF9SWF9ERUMgfAorCQkJCSAgICBNQUNfUEhZQ0ZHMV9SR01JSV9TTkRfU1RBVF9FTik7CisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRSkgeworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9SWF9FTikKKwkJCXZhbCB8PSBNQUNfUEhZQ0ZHMV9SR01JSV9FWFRfUlhfREVDOworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTikKKwkJCXZhbCB8PSBNQUNfUEhZQ0ZHMV9SR01JSV9TTkRfU1RBVF9FTjsKKwl9CisJdHczMihNQUNfUEhZQ0ZHMSwgdmFsIHwgTUFDX1BIWUNGRzFfUkdNSUlfSU5UIHwgTUFDX1BIWUNGRzFfVFhDX0RSVik7CisKKwl2YWwgPSB0cjMyKE1BQ19QSFlDRkcyKSAmIH4oTUFDX1BIWUNGRzJfSU5CQU5EX0VOQUJMRSk7CisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9TVERfSUJORF9ESVNBQkxFKSkKKwkJdmFsIHw9IE1BQ19QSFlDRkcyX0lOQkFORF9FTkFCTEU7CisJdHczMihNQUNfUEhZQ0ZHMiwgdmFsKTsKKworCXZhbCA9IHRyMzIoTUFDX0VYVF9SR01JSV9NT0RFKTsKKwl2YWwgJj0gfihNQUNfUkdNSUlfTU9ERV9SWF9JTlRfQiB8CisJCSBNQUNfUkdNSUlfTU9ERV9SWF9RVUFMSVRZIHwKKwkJIE1BQ19SR01JSV9NT0RFX1JYX0FDVElWSVRZIHwKKwkJIE1BQ19SR01JSV9NT0RFX1JYX0VOR19ERVQgfAorCQkgTUFDX1JHTUlJX01PREVfVFhfRU5BQkxFIHwKKwkJIE1BQ19SR01JSV9NT0RFX1RYX0xPV1BXUiB8CisJCSBNQUNfUkdNSUlfTU9ERV9UWF9SRVNFVCk7CisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRSkgeworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9SWF9FTikKKwkJCXZhbCB8PSBNQUNfUkdNSUlfTU9ERV9SWF9JTlRfQiB8CisJCQkgICAgICAgTUFDX1JHTUlJX01PREVfUlhfUVVBTElUWSB8CisJCQkgICAgICAgTUFDX1JHTUlJX01PREVfUlhfQUNUSVZJVFkgfAorCQkJICAgICAgIE1BQ19SR01JSV9NT0RFX1JYX0VOR19ERVQ7CisJCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1RYX0VOKQorCQkJdmFsIHw9IE1BQ19SR01JSV9NT0RFX1RYX0VOQUJMRSB8CisJCQkgICAgICAgTUFDX1JHTUlJX01PREVfVFhfTE9XUFdSIHwKKwkJCSAgICAgICBNQUNfUkdNSUlfTU9ERV9UWF9SRVNFVDsKKwl9CisJdHczMihNQUNfRVhUX1JHTUlJX01PREUsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHRnM19tZGlvX3N0YXJ0KHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX01ESU9CVVNfSU5JVEVEKSB7CisJCW11dGV4X2xvY2soJnRwLT5tZGlvX2J1cy5tZGlvX2xvY2spOworCQl0cC0+dGczX2ZsYWdzMyAmPSB+VEczX0ZMRzNfTURJT0JVU19QQVVTRUQ7CisJCW11dGV4X3VubG9jaygmdHAtPm1kaW9fYnVzLm1kaW9fbG9jayk7CisJfQorCisJdHAtPm1pX21vZGUgJj0gfk1BQ19NSV9NT0RFX0FVVE9fUE9MTDsKKwl0dzMyX2YoTUFDX01JX01PREUsIHRwLT5taV9tb2RlKTsKKwl1ZGVsYXkoODApOworCisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19JTklURUQpCisJCXRnM19tZGlvX2NvbmZpZyh0cCk7Cit9CisKK3N0YXRpYyB2b2lkIHRnM19tZGlvX3N0b3Aoc3RydWN0IHRnMyAqdHApCit7CisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19JTklURUQpIHsKKwkJbXV0ZXhfbG9jaygmdHAtPm1kaW9fYnVzLm1kaW9fbG9jayk7CisJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX01ESU9CVVNfUEFVU0VEOworCQltdXRleF91bmxvY2soJnRwLT5tZGlvX2J1cy5tZGlvX2xvY2spOworCX0KK30KKworc3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKQoreworCWludCBpOworCXUzMiByZWc7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKwlzdHJ1Y3QgbWlpX2J1cyAqbWRpb19idXMgPSAmdHAtPm1kaW9fYnVzOworCisJdGczX21kaW9fc3RhcnQodHApOworCisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB8fAorCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX0lOSVRFRCkpCisJCXJldHVybiAwOworCisJbWVtc2V0KG1kaW9fYnVzLCAwLCBzaXplb2YoKm1kaW9fYnVzKSk7CisKKwltZGlvX2J1cy0+bmFtZSAgICAgPSAidGczIG1kaW8gYnVzIjsKKwlzbnByaW50ZihtZGlvX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwKKwkJICh0cC0+cGRldi0+YnVzLT5udW1iZXIgPDwgOCkgfCB0cC0+cGRldi0+ZGV2Zm4pOworCW1kaW9fYnVzLT5wcml2ICAgICA9IHRwOworCW1kaW9fYnVzLT5kZXYgICAgICA9ICZ0cC0+cGRldi0+ZGV2OworCW1kaW9fYnVzLT5yZWFkICAgICA9ICZ0ZzNfbWRpb19yZWFkOworCW1kaW9fYnVzLT53cml0ZSAgICA9ICZ0ZzNfbWRpb193cml0ZTsKKwltZGlvX2J1cy0+cmVzZXQgICAgPSAmdGczX21kaW9fcmVzZXQ7CisJbWRpb19idXMtPnBoeV9tYXNrID0gfigxIDw8IFBIWV9BRERSKTsKKwltZGlvX2J1cy0+aXJxICAgICAgPSAmdHAtPm1kaW9faXJxWzBdOworCisJZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKQorCQltZGlvX2J1cy0+aXJxW2ldID0gUEhZX1BPTEw7CisKKwkvKiBUaGUgYnVzIHJlZ2lzdHJhdGlvbiB3aWxsIGxvb2sgZm9yIGFsbCB0aGUgUEhZcyBvbiB0aGUgbWRpbyBidXMuCisJICogVW5mb3J0dW5hdGVseSwgaXQgZG9lcyBub3QgZW5zdXJlIHRoZSBQSFkgaXMgcG93ZXJlZCB1cCBiZWZvcmUKKwkgKiBhY2Nlc3NpbmcgdGhlIFBIWSBJRCByZWdpc3RlcnMuICBBIGNoaXAgcmVzZXQgaXMgdGhlCisJICogcXVpY2tlc3Qgd2F5IHRvIGJyaW5nIHRoZSBkZXZpY2UgYmFjayB0byBhbiBvcGVyYXRpb25hbCBzdGF0ZS4uCisJICovCisJaWYgKHRnM19yZWFkcGh5KHRwLCBNSUlfQk1DUiwgJnJlZykgfHwgKHJlZyAmIEJNQ1JfUERPV04pKQorCQl0ZzNfYm1jcl9yZXNldCh0cCk7CisKKwlpID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7CisJaWYgKGkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1kaW9idXNfcmVnIGZhaWxlZCAoMHgleClcbiIsCisJCQl0cC0+ZGV2LT5uYW1lLCBpKTsKKwkJcmV0dXJuIGk7CisJfQorCisJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTURJT0JVU19JTklURUQ7CisKKwlwaHlkZXYgPSB0cC0+bWRpb19idXMucGh5X21hcFtQSFlfQUREUl07CisKKwlzd2l0Y2ggKHBoeWRldi0+cGh5X2lkKSB7CisJY2FzZSBURzNfUEhZX0lEX0JDTTUwNjEwOgorCQlwaHlkZXYtPmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTsKKwkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRSkKKwkJCXBoeWRldi0+ZGV2X2ZsYWdzIHw9IFBIWV9CUkNNX1NURF9JQk5EX0RJU0FCTEU7CisJCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1JYX0VOKQorCQkJcGh5ZGV2LT5kZXZfZmxhZ3MgfD0gUEhZX0JSQ01fRVhUX0lCTkRfUlhfRU5BQkxFOworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTikKKwkJCXBoeWRldi0+ZGV2X2ZsYWdzIHw9IFBIWV9CUkNNX0VYVF9JQk5EX1RYX0VOQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBURzNfUEhZX0lEX0JDTUFDMTMxOgorCQlwaHlkZXYtPmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CisJCWJyZWFrOworCX0KKworCXRnM19tZGlvX2NvbmZpZyh0cCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGczX21kaW9fZmluaShzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX0lOSVRFRCkgeworCQl0cC0+dGczX2ZsYWdzMyAmPSB+VEczX0ZMRzNfTURJT0JVU19JTklURUQ7CisJCW1kaW9idXNfdW5yZWdpc3RlcigmdHAtPm1kaW9fYnVzKTsKKwkJdHAtPnRnM19mbGFnczMgJj0gflRHM19GTEczX01ESU9CVVNfUEFVU0VEOworCX0KK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRnM193YWl0X2Zvcl9ldmVudF9hY2soc3RydWN0IHRnMyAqdHApCit7CisJaW50IGk7CisKKwkvKiBXYWl0IGZvciB1cCB0byAyLjUgbWlsbGlzZWNvbmRzICovCisJZm9yIChpID0gMDsgaSA8IDI1MDAwMDsgaSsrKSB7CisJCWlmICghKHRyMzIoR1JDX1JYX0NQVV9FVkVOVCkgJiBHUkNfUlhfQ1BVX0RSSVZFUl9FVkVOVCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgdm9pZCB0ZzNfdW1wX2xpbmtfcmVwb3J0KHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiByZWc7CisJdTMyIHZhbDsKKworCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykgfHwKKwkgICAgISh0cC0+dGczX2ZsYWdzICAmIFRHM19GTEFHX0VOQUJMRV9BU0YpKQorCQlyZXR1cm47CisKKwl0ZzNfd2FpdF9mb3JfZXZlbnRfYWNrKHRwKTsKKworCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9NQk9YLCBGV0NNRF9OSUNEUlZfTElOS19VUERBVEUpOworCisJdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRldfQ01EX0xFTl9NQk9YLCAxNCk7CisKKwl2YWwgPSAwOworCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9CTUNSLCAmcmVnKSkKKwkJdmFsID0gcmVnIDw8IDE2OworCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmcmVnKSkKKwkJdmFsIHw9IChyZWcgJiAweGZmZmYpOworCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9EQVRBX01CT1gsIHZhbCk7CisKKwl2YWwgPSAwOworCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9BRFZFUlRJU0UsICZyZWcpKQorCQl2YWwgPSByZWcgPDwgMTY7CisJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0xQQSwgJnJlZykpCisJCXZhbCB8PSAocmVnICYgMHhmZmZmKTsKKwl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GV19DTURfREFUQV9NQk9YICsgNCwgdmFsKTsKKworCXZhbCA9IDA7CisJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSkgeworCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfQ1RSTDEwMDAsICZyZWcpKQorCQkJdmFsID0gcmVnIDw8IDE2OworCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfU1RBVDEwMDAsICZyZWcpKQorCQkJdmFsIHw9IChyZWcgJiAweGZmZmYpOworCX0KKwl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GV19DTURfREFUQV9NQk9YICsgOCwgdmFsKTsKKworCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9QSFlBRERSLCAmcmVnKSkKKwkJdmFsID0gcmVnIDw8IDE2OworCWVsc2UKKwkJdmFsID0gMDsKKwl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GV19DTURfREFUQV9NQk9YICsgMTIsIHZhbCk7CisKKwl2YWwgPSB0cjMyKEdSQ19SWF9DUFVfRVZFTlQpOworCXZhbCB8PSBHUkNfUlhfQ1BVX0RSSVZFUl9FVkVOVDsKKwl0dzMyX2YoR1JDX1JYX0NQVV9FVkVOVCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgdGczX2xpbmtfcmVwb3J0KHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICghbmV0aWZfY2Fycmllcl9vayh0cC0+ZGV2KSkgeworCQlpZiAobmV0aWZfbXNnX2xpbmsodHApKQorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBMaW5rIGlzIGRvd24uXG4iLAorCQkJICAgICAgIHRwLT5kZXYtPm5hbWUpOworCQl0ZzNfdW1wX2xpbmtfcmVwb3J0KHRwKTsKKwl9IGVsc2UgaWYgKG5ldGlmX21zZ19saW5rKHRwKSkgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4LlxuIiwKKwkJICAgICAgIHRwLT5kZXYtPm5hbWUsCisJCSAgICAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwID8KKwkJCTEwMDAgOgorCQkJKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwID8KKwkJCSAxMDAgOiAxMCkpLAorCQkgICAgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4ID09IERVUExFWF9GVUxMID8KKwkJCSJmdWxsIiA6ICJoYWxmIikpOworCisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCSAgICAgICAiJXM6IEZsb3cgY29udHJvbCBpcyAlcyBmb3IgVFggYW5kICVzIGZvciBSWC5cbiIsCisJCSAgICAgICB0cC0+ZGV2LT5uYW1lLAorCQkgICAgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZmxvd2N0cmwgJiBURzNfRkxPV19DVFJMX1RYKSA/CisJCSAgICAgICAib24iIDogIm9mZiIsCisJCSAgICAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybCAmIFRHM19GTE9XX0NUUkxfUlgpID8KKwkJICAgICAgICJvbiIgOiAib2ZmIik7CisJCXRnM191bXBfbGlua19yZXBvcnQodHApOworCX0KK30KKworc3RhdGljIHUxNiB0ZzNfYWR2ZXJ0X2Zsb3djdHJsXzEwMDBUKHU4IGZsb3dfY3RybCkKK3sKKwl1MTYgbWlpcmVnOworCisJaWYgKChmbG93X2N0cmwgJiBURzNfRkxPV19DVFJMX1RYKSAmJiAoZmxvd19jdHJsICYgVEczX0ZMT1dfQ1RSTF9SWCkpCisJCW1paXJlZyA9IEFEVkVSVElTRV9QQVVTRV9DQVA7CisJZWxzZSBpZiAoZmxvd19jdHJsICYgVEczX0ZMT1dfQ1RSTF9UWCkKKwkJbWlpcmVnID0gQURWRVJUSVNFX1BBVVNFX0FTWU07CisJZWxzZSBpZiAoZmxvd19jdHJsICYgVEczX0ZMT1dfQ1RSTF9SWCkKKwkJbWlpcmVnID0gQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOworCWVsc2UKKwkJbWlpcmVnID0gMDsKKworCXJldHVybiBtaWlyZWc7Cit9CisKK3N0YXRpYyB1MTYgdGczX2FkdmVydF9mbG93Y3RybF8xMDAwWCh1OCBmbG93X2N0cmwpCit7CisJdTE2IG1paXJlZzsKKworCWlmICgoZmxvd19jdHJsICYgVEczX0ZMT1dfQ1RSTF9UWCkgJiYgKGZsb3dfY3RybCAmIFRHM19GTE9XX0NUUkxfUlgpKQorCQltaWlyZWcgPSBBRFZFUlRJU0VfMTAwMFhQQVVTRTsKKwllbHNlIGlmIChmbG93X2N0cmwgJiBURzNfRkxPV19DVFJMX1RYKQorCQltaWlyZWcgPSBBRFZFUlRJU0VfMTAwMFhQU0VfQVNZTTsKKwllbHNlIGlmIChmbG93X2N0cmwgJiBURzNfRkxPV19DVFJMX1JYKQorCQltaWlyZWcgPSBBRFZFUlRJU0VfMTAwMFhQQVVTRSB8IEFEVkVSVElTRV8xMDAwWFBTRV9BU1lNOworCWVsc2UKKwkJbWlpcmVnID0gMDsKKworCXJldHVybiBtaWlyZWc7Cit9CisKK3N0YXRpYyB1OCB0ZzNfcmVzb2x2ZV9mbG93Y3RybF8xMDAwVCh1MTYgbGNsYWR2LCB1MTYgcm10YWR2KQoreworCXU4IGNhcCA9IDA7CisKKwlpZiAobGNsYWR2ICYgQURWRVJUSVNFX1BBVVNFX0NBUCkgeworCQlpZiAobGNsYWR2ICYgQURWRVJUSVNFX1BBVVNFX0FTWU0pIHsKKwkJCWlmIChybXRhZHYgJiBMUEFfUEFVU0VfQ0FQKQorCQkJCWNhcCA9IFRHM19GTE9XX0NUUkxfVFggfCBURzNfRkxPV19DVFJMX1JYOworCQkJZWxzZSBpZiAocm10YWR2ICYgTFBBX1BBVVNFX0FTWU0pCisJCQkJY2FwID0gVEczX0ZMT1dfQ1RSTF9SWDsKKwkJfSBlbHNlIHsKKwkJCWlmIChybXRhZHYgJiBMUEFfUEFVU0VfQ0FQKQorCQkJCWNhcCA9IFRHM19GTE9XX0NUUkxfVFggfCBURzNfRkxPV19DVFJMX1JYOworCQl9CisJfSBlbHNlIGlmIChsY2xhZHYgJiBBRFZFUlRJU0VfUEFVU0VfQVNZTSkgeworCQlpZiAoKHJtdGFkdiAmIExQQV9QQVVTRV9DQVApICYmIChybXRhZHYgJiBMUEFfUEFVU0VfQVNZTSkpCisJCQljYXAgPSBURzNfRkxPV19DVFJMX1RYOworCX0KKworCXJldHVybiBjYXA7Cit9CisKK3N0YXRpYyB1OCB0ZzNfcmVzb2x2ZV9mbG93Y3RybF8xMDAwWCh1MTYgbGNsYWR2LCB1MTYgcm10YWR2KQoreworCXU4IGNhcCA9IDA7CisKKwlpZiAobGNsYWR2ICYgQURWRVJUSVNFXzEwMDBYUEFVU0UpIHsKKwkJaWYgKGxjbGFkdiAmIEFEVkVSVElTRV8xMDAwWFBTRV9BU1lNKSB7CisJCQlpZiAocm10YWR2ICYgTFBBXzEwMDBYUEFVU0UpCisJCQkJY2FwID0gVEczX0ZMT1dfQ1RSTF9UWCB8IFRHM19GTE9XX0NUUkxfUlg7CisJCQllbHNlIGlmIChybXRhZHYgJiBMUEFfMTAwMFhQQVVTRV9BU1lNKQorCQkJCWNhcCA9IFRHM19GTE9XX0NUUkxfUlg7CisJCX0gZWxzZSB7CisJCQlpZiAocm10YWR2ICYgTFBBXzEwMDBYUEFVU0UpCisJCQkJY2FwID0gVEczX0ZMT1dfQ1RSTF9UWCB8IFRHM19GTE9XX0NUUkxfUlg7CisJCX0KKwl9IGVsc2UgaWYgKGxjbGFkdiAmIEFEVkVSVElTRV8xMDAwWFBTRV9BU1lNKSB7CisJCWlmICgocm10YWR2ICYgTFBBXzEwMDBYUEFVU0UpICYmIChybXRhZHYgJiBMUEFfMTAwMFhQQVVTRV9BU1lNKSkKKwkJCWNhcCA9IFRHM19GTE9XX0NUUkxfVFg7CisJfQorCisJcmV0dXJuIGNhcDsKK30KKworc3RhdGljIHZvaWQgdGczX3NldHVwX2Zsb3dfY29udHJvbChzdHJ1Y3QgdGczICp0cCwgdTMyIGxjbGFkdiwgdTMyIHJtdGFkdikKK3sKKwl1OCBhdXRvbmVnOworCXU4IGZsb3djdHJsID0gMDsKKwl1MzIgb2xkX3J4X21vZGUgPSB0cC0+cnhfbW9kZTsKKwl1MzIgb2xkX3R4X21vZGUgPSB0cC0+dHhfbW9kZTsKKworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpCisJCWF1dG9uZWcgPSB0cC0+bWRpb19idXMucGh5X21hcFtQSFlfQUREUl0tPmF1dG9uZWc7CisJZWxzZQorCQlhdXRvbmVnID0gdHAtPmxpbmtfY29uZmlnLmF1dG9uZWc7CisKKwlpZiAoYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJgorCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BBVVNFX0FVVE9ORUcpKSB7CisJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpCisJCQlmbG93Y3RybCA9IHRnM19yZXNvbHZlX2Zsb3djdHJsXzEwMDBYKGxjbGFkdiwgcm10YWR2KTsKKwkJZWxzZQorCQkJZmxvd2N0cmwgPSB0ZzNfcmVzb2x2ZV9mbG93Y3RybF8xMDAwVChsY2xhZHYsIHJtdGFkdik7CisJfSBlbHNlCisJCWZsb3djdHJsID0gdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsOworCisJdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybCA9IGZsb3djdHJsOworCisJaWYgKGZsb3djdHJsICYgVEczX0ZMT1dfQ1RSTF9SWCkKKwkJdHAtPnJ4X21vZGUgfD0gUlhfTU9ERV9GTE9XX0NUUkxfRU5BQkxFOworCWVsc2UKKwkJdHAtPnJ4X21vZGUgJj0gflJYX01PREVfRkxPV19DVFJMX0VOQUJMRTsKKworCWlmIChvbGRfcnhfbW9kZSAhPSB0cC0+cnhfbW9kZSkKKwkJdHczMl9mKE1BQ19SWF9NT0RFLCB0cC0+cnhfbW9kZSk7CisKKwlpZiAoZmxvd2N0cmwgJiBURzNfRkxPV19DVFJMX1RYKQorCQl0cC0+dHhfbW9kZSB8PSBUWF9NT0RFX0ZMT1dfQ1RSTF9FTkFCTEU7CisJZWxzZQorCQl0cC0+dHhfbW9kZSAmPSB+VFhfTU9ERV9GTE9XX0NUUkxfRU5BQkxFOworCisJaWYgKG9sZF90eF9tb2RlICE9IHRwLT50eF9tb2RlKQorCQl0dzMyX2YoTUFDX1RYX01PREUsIHRwLT50eF9tb2RlKTsKK30KKworc3RhdGljIHZvaWQgdGczX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdTggb2xkZmxvd2N0cmwsIGxpbmttZXNnID0gMDsKKwl1MzIgbWFjX21vZGUsIGxjbF9hZHYsIHJtdF9hZHY7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0+bWRpb19idXMucGh5X21hcFtQSFlfQUREUl07CisKKwlzcGluX2xvY2soJnRwLT5sb2NrKTsKKworCW1hY19tb2RlID0gdHAtPm1hY19tb2RlICYgfihNQUNfTU9ERV9QT1JUX01PREVfTUFTSyB8CisJCQkJICAgIE1BQ19NT0RFX0hBTEZfRFVQTEVYKTsKKworCW9sZGZsb3djdHJsID0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybDsKKworCWlmIChwaHlkZXYtPmxpbmspIHsKKwkJbGNsX2FkdiA9IDA7CisJCXJtdF9hZHYgPSAwOworCisJCWlmIChwaHlkZXYtPnNwZWVkID09IFNQRUVEXzEwMCB8fCBwaHlkZXYtPnNwZWVkID09IFNQRUVEXzEwKQorCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX01JSTsKKwkJZWxzZQorCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CisKKwkJaWYgKHBoeWRldi0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQkJbWFjX21vZGUgfD0gTUFDX01PREVfSEFMRl9EVVBMRVg7CisJCWVsc2UgeworCQkJbGNsX2FkdiA9IHRnM19hZHZlcnRfZmxvd2N0cmxfMTAwMFQoCisJCQkJICB0cC0+bGlua19jb25maWcuZmxvd2N0cmwpOworCisJCQlpZiAocGh5ZGV2LT5wYXVzZSkKKwkJCQlybXRfYWR2ID0gTFBBX1BBVVNFX0NBUDsKKwkJCWlmIChwaHlkZXYtPmFzeW1fcGF1c2UpCisJCQkJcm10X2FkdiB8PSBMUEFfUEFVU0VfQVNZTTsKKwkJfQorCisJCXRnM19zZXR1cF9mbG93X2NvbnRyb2wodHAsIGxjbF9hZHYsIHJtdF9hZHYpOworCX0gZWxzZQorCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKKworCWlmIChtYWNfbW9kZSAhPSB0cC0+bWFjX21vZGUpIHsKKwkJdHAtPm1hY19tb2RlID0gbWFjX21vZGU7CisJCXR3MzJfZihNQUNfTU9ERSwgdHAtPm1hY19tb2RlKTsKKwkJdWRlbGF5KDQwKTsKKwl9CisKKwlpZiAocGh5ZGV2LT5zcGVlZCA9PSBTUEVFRF8xMDAwICYmIHBoeWRldi0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQl0dzMyKE1BQ19UWF9MRU5HVEhTLAorCQkgICAgICgoMiA8PCBUWF9MRU5HVEhTX0lQR19DUlNfU0hJRlQpIHwKKwkJICAgICAgKDYgPDwgVFhfTEVOR1RIU19JUEdfU0hJRlQpIHwKKwkJICAgICAgKDB4ZmYgPDwgVFhfTEVOR1RIU19TTE9UX1RJTUVfU0hJRlQpKSk7CisJZWxzZQorCQl0dzMyKE1BQ19UWF9MRU5HVEhTLAorCQkgICAgICgoMiA8PCBUWF9MRU5HVEhTX0lQR19DUlNfU0hJRlQpIHwKKwkJICAgICAgKDYgPDwgVFhfTEVOR1RIU19JUEdfU0hJRlQpIHwKKwkJICAgICAgKDMyIDw8IFRYX0xFTkdUSFNfU0xPVF9USU1FX1NISUZUKSkpOworCisJaWYgKChwaHlkZXYtPmxpbmsgJiYgdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF9JTlZBTElEKSB8fAorCSAgICAoIXBoeWRldi0+bGluayAmJiB0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkICE9IFNQRUVEX0lOVkFMSUQpIHx8CisJICAgIHBoeWRldi0+c3BlZWQgIT0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCB8fAorCSAgICBwaHlkZXYtPmR1cGxleCAhPSB0cC0+bGlua19jb25maWcuYWN0aXZlX2R1cGxleCB8fAorCSAgICBvbGRmbG93Y3RybCAhPSB0cC0+bGlua19jb25maWcuYWN0aXZlX2Zsb3djdHJsKQorCSAgICBsaW5rbWVzZyA9IDE7CisKKwl0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkID0gcGh5ZGV2LT5zcGVlZDsKKwl0cC0+bGlua19jb25maWcuYWN0aXZlX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworCisJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKKworCWlmIChsaW5rbWVzZykKKwkJdGczX2xpbmtfcmVwb3J0KHRwKTsKK30KKworc3RhdGljIGludCB0ZzNfcGh5X2luaXQoc3RydWN0IHRnMyAqdHApCit7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpCisJCXJldHVybiAwOworCisJLyogQnJpbmcgdGhlIFBIWSBiYWNrIHRvIGEga25vd24gc3RhdGUuICovCisJdGczX2JtY3JfcmVzZXQodHApOworCisJcGh5ZGV2ID0gdHAtPm1kaW9fYnVzLnBoeV9tYXBbUEhZX0FERFJdOworCisJLyogQXR0YWNoIHRoZSBNQUMgdG8gdGhlIFBIWS4gKi8KKwlwaHlkZXYgPSBwaHlfY29ubmVjdCh0cC0+ZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsIHRnM19hZGp1c3RfbGluaywKKwkJCSAgICAgcGh5ZGV2LT5kZXZfZmxhZ3MsIHBoeWRldi0+aW50ZXJmYWNlKTsKKwlpZiAoSVNfRVJSKHBoeWRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIHRwLT5kZXYtPm5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihwaHlkZXYpOworCX0KKworCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1BIWV9DT05ORUNURUQ7CisKKwkvKiBNYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcy4gKi8KKwlwaHlkZXYtPnN1cHBvcnRlZCAmPSAoUEhZX0dCSVRfRkVBVFVSRVMgfAorCQkJICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCSAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKworCXBoeWRldi0+YWR2ZXJ0aXNpbmcgPSBwaHlkZXYtPnN1cHBvcnRlZDsKKworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gKG1paV9idXM6cGh5X2FkZHI9JXMpXG4iLAorCSAgICAgICB0cC0+ZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZzNfcGh5X3N0YXJ0KHN0cnVjdCB0ZzMgKnRwKQoreworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpKQorCQlyZXR1cm47CisKKwlwaHlkZXYgPSB0cC0+bWRpb19idXMucGh5X21hcFtQSFlfQUREUl07CisKKwlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpIHsKKwkJdHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIgPSAwOworCQlwaHlkZXYtPnNwZWVkID0gdHAtPmxpbmtfY29uZmlnLm9yaWdfc3BlZWQ7CisJCXBoeWRldi0+ZHVwbGV4ID0gdHAtPmxpbmtfY29uZmlnLm9yaWdfZHVwbGV4OworCQlwaHlkZXYtPmF1dG9uZWcgPSB0cC0+bGlua19jb25maWcub3JpZ19hdXRvbmVnOworCQlwaHlkZXYtPmFkdmVydGlzaW5nID0gdHAtPmxpbmtfY29uZmlnLm9yaWdfYWR2ZXJ0aXNpbmc7CisJfQorCisJcGh5X3N0YXJ0KHBoeWRldik7CisKKwlwaHlfc3RhcnRfYW5lZyhwaHlkZXYpOworfQorCitzdGF0aWMgdm9pZCB0ZzNfcGh5X3N0b3Aoc3RydWN0IHRnMyAqdHApCit7CisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSkKKwkJcmV0dXJuOworCisJcGh5X3N0b3AodHAtPm1kaW9fYnVzLnBoeV9tYXBbUEhZX0FERFJdKTsKK30KKworc3RhdGljIHZvaWQgdGczX3BoeV9maW5pKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpIHsKKwkJcGh5X2Rpc2Nvbm5lY3QodHAtPm1kaW9fYnVzLnBoeV9tYXBbUEhZX0FERFJdKTsKKwkJdHAtPnRnM19mbGFnczMgJj0gflRHM19GTEczX1BIWV9DT05ORUNURUQ7CisJfQorfQorCiBzdGF0aWMgdm9pZCB0ZzNfcGh5ZHNwX3dyaXRlKHN0cnVjdCB0ZzMgKnRwLCB1MzIgcmVnLCB1MzIgdmFsKQogewogCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgcmVnKTsKQEAgLTg2MSwzNyArMTQyNyw2IEBACiAJCQkgICAgICh2YWwgfCAoMSA8PCAxNSkgfCAoMSA8PCA0KSkpOwogfQogCi1zdGF0aWMgaW50IHRnM19ibWNyX3Jlc2V0KHN0cnVjdCB0ZzMgKnRwKQotewotCXUzMiBwaHlfY29udHJvbDsKLQlpbnQgbGltaXQsIGVycjsKLQotCS8qIE9LLCByZXNldCBpdCwgYW5kIHBvbGwgdGhlIEJNQ1JfUkVTRVQgYml0IHVudGlsIGl0Ci0JICogY2xlYXJzIG9yIHdlIHRpbWUgb3V0LgotCSAqLwotCXBoeV9jb250cm9sID0gQk1DUl9SRVNFVDsKLQllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBwaHlfY29udHJvbCk7Ci0JaWYgKGVyciAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JbGltaXQgPSA1MDAwOwotCXdoaWxlIChsaW1pdC0tKSB7Ci0JCWVyciA9IHRnM19yZWFkcGh5KHRwLCBNSUlfQk1DUiwgJnBoeV9jb250cm9sKTsKLQkJaWYgKGVyciAhPSAwKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlpZiAoKHBoeV9jb250cm9sICYgQk1DUl9SRVNFVCkgPT0gMCkgewotCQkJdWRlbGF5KDQwKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXVkZWxheSgxMCk7Ci0JfQotCWlmIChsaW1pdCA8PSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHRnM19waHlfYXBwbHlfb3RwKHN0cnVjdCB0ZzMgKnRwKQogewogCXUzMiBvdHAsIHBoeTsKQEAgLTExMTUsOCArMTY1MCw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgdGczX2xpbmtfcmVwb3J0KHN0cnVjdCB0ZzMgKik7Ci0KIC8qIFRoaXMgd2lsbCByZXNldCB0aGUgdGlnb24zIFBIWSBpZiB0aGVyZSBpcyBubyB2YWxpZAogICogbGluayB1bmxlc3MgdGhlIEZPUkNFIGFyZ3VtZW50IGlzIG5vbi16ZXJvLgogICovCkBAIC0xNDIxLDcgKzE5NTQsNyBAQAogCQl0dzMyX2YoR1JDX01JU0NfQ0ZHLCB2YWwgfCBHUkNfTUlTQ19DRkdfRVBIWV9JRERRKTsKIAkJdWRlbGF5KDQwKTsKIAkJcmV0dXJuOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikpIHsKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VYVF9DVFJMLAogCQkJICAgICBNSUlfVEczX0VYVF9DVFJMX0ZPUkNFX0xFRF9PRkYpOwogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MDFiMik7CkBAIC0xNDk1LDcgKzIwMjgsNyBAQAogCQkgICAgICAgInJlcXVlc3RlZC5cbiIsCiAJCSAgICAgICB0cC0+ZGV2LT5uYW1lLCBzdGF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwotCX07CisJfQogCiAJcG93ZXJfY29udHJvbCB8PSBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFOwogCkBAIC0xNTAzLDE4ICsyMDM2LDU1IEBACiAJdHczMihURzNQQ0lfTUlTQ19IT1NUX0NUUkwsCiAJICAgICBtaXNjX2hvc3RfY3RybCB8IE1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCk7CiAKLQlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIgPT0gMCkgewotCQl0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlciA9IDE7Ci0JCXRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkID0gdHAtPmxpbmtfY29uZmlnLnNwZWVkOwotCQl0cC0+bGlua19jb25maWcub3JpZ19kdXBsZXggPSB0cC0+bGlua19jb25maWcuZHVwbGV4OwotCQl0cC0+bGlua19jb25maWcub3JpZ19hdXRvbmVnID0gdHAtPmxpbmtfY29uZmlnLmF1dG9uZWc7Ci0JfQorCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHsKKwkJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpICYmCisJCSAgICAhdHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpIHsKKwkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CisJCQl1MzIgYWR2ZXJ0aXNpbmc7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpKSB7Ci0JCXRwLT5saW5rX2NvbmZpZy5zcGVlZCA9IFNQRUVEXzEwOwotCQl0cC0+bGlua19jb25maWcuZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCXRwLT5saW5rX2NvbmZpZy5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCXRnM19zZXR1cF9waHkodHAsIDApOworCQkJcGh5ZGV2ID0gdHAtPm1kaW9fYnVzLnBoeV9tYXBbUEhZX0FERFJdOworCisJCQl0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlciA9IDE7CisKKwkJCXRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkID0gcGh5ZGV2LT5zcGVlZDsKKwkJCXRwLT5saW5rX2NvbmZpZy5vcmlnX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworCQkJdHAtPmxpbmtfY29uZmlnLm9yaWdfYXV0b25lZyA9IHBoeWRldi0+YXV0b25lZzsKKwkJCXRwLT5saW5rX2NvbmZpZy5vcmlnX2FkdmVydGlzaW5nID0gcGh5ZGV2LT5hZHZlcnRpc2luZzsKKworCQkJYWR2ZXJ0aXNpbmcgPSBBRFZFUlRJU0VEX1RQIHwKKwkJCQkgICAgICBBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkgICAgICBBRFZFUlRJU0VEX0F1dG9uZWcgfAorCQkJCSAgICAgIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmOworCisJCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB8fAorCQkJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX0VOQUJMRSkpIHsKKwkJCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQikKKwkJCQkJYWR2ZXJ0aXNpbmcgfD0KKwkJCQkJCUFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCQlBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkJQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGw7CisJCQkJZWxzZQorCQkJCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbDsKKwkJCX0KKworCQkJcGh5ZGV2LT5hZHZlcnRpc2luZyA9IGFkdmVydGlzaW5nOworCisJCQlwaHlfc3RhcnRfYW5lZyhwaHlkZXYpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyID09IDApIHsKKwkJCXRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyID0gMTsKKwkJCXRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkID0gdHAtPmxpbmtfY29uZmlnLnNwZWVkOworCQkJdHAtPmxpbmtfY29uZmlnLm9yaWdfZHVwbGV4ID0gdHAtPmxpbmtfY29uZmlnLmR1cGxleDsKKwkJCXRwLT5saW5rX2NvbmZpZy5vcmlnX2F1dG9uZWcgPSB0cC0+bGlua19jb25maWcuYXV0b25lZzsKKwkJfQorCisJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpIHsKKwkJCXRwLT5saW5rX2NvbmZpZy5zcGVlZCA9IFNQRUVEXzEwOworCQkJdHAtPmxpbmtfY29uZmlnLmR1cGxleCA9IERVUExFWF9IQUxGOworCQkJdHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJCXRnM19zZXR1cF9waHkodHAsIDApOworCQl9CiAJfQogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CkBAIC0xNTQ1LDggKzIxMTUsMTAgQEAKIAkJdTMyIG1hY19tb2RlOwogCiAJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykpIHsKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg1YSk7Ci0JCQl1ZGVsYXkoNDApOworCQkJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSkgeworCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg1YSk7CisJCQkJdWRlbGF5KDQwKTsKKwkJCX0KIAogCQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykKIAkJCQltYWNfbW9kZSA9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOwpAQCAtMTY3MSwyMTIgKzIyNDMsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIHZvaWQgdGczX3dhaXRfZm9yX2V2ZW50X2FjayhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpbnQgaTsKLQotCS8qIFdhaXQgZm9yIHVwIHRvIDIuNSBtaWxsaXNlY29uZHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjUwMDAwOyBpKyspIHsKLQkJaWYgKCEodHIzMihHUkNfUlhfQ1BVX0VWRU5UKSAmIEdSQ19SWF9DUFVfRFJJVkVSX0VWRU5UKSkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTApOwotCX0KLX0KLQotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyB2b2lkIHRnM191bXBfbGlua19yZXBvcnQoc3RydWN0IHRnMyAqdHApCi17Ci0JdTMyIHJlZzsKLQl1MzIgdmFsOwotCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSB8fAotCSAgICAhKHRwLT50ZzNfZmxhZ3MgICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCi0JCXJldHVybjsKLQotCXRnM193YWl0X2Zvcl9ldmVudF9hY2sodHApOwotCi0JdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRldfQ01EX01CT1gsIEZXQ01EX05JQ0RSVl9MSU5LX1VQREFURSk7Ci0KLQl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GV19DTURfTEVOX01CT1gsIDE0KTsKLQotCXZhbCA9IDA7Ci0JaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNQ1IsICZyZWcpKQotCQl2YWwgPSByZWcgPDwgMTY7Ci0JaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNU1IsICZyZWcpKQotCQl2YWwgfD0gKHJlZyAmIDB4ZmZmZik7Ci0JdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRldfQ01EX0RBVEFfTUJPWCwgdmFsKTsKLQotCXZhbCA9IDA7Ci0JaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0FEVkVSVElTRSwgJnJlZykpCi0JCXZhbCA9IHJlZyA8PCAxNjsKLQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfTFBBLCAmcmVnKSkKLQkJdmFsIHw9IChyZWcgJiAweGZmZmYpOwotCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9EQVRBX01CT1ggKyA0LCB2YWwpOwotCi0JdmFsID0gMDsKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpKSB7Ci0JCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9DVFJMMTAwMCwgJnJlZykpCi0JCQl2YWwgPSByZWcgPDwgMTY7Ci0JCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9TVEFUMTAwMCwgJnJlZykpCi0JCQl2YWwgfD0gKHJlZyAmIDB4ZmZmZik7Ci0JfQotCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9EQVRBX01CT1ggKyA4LCB2YWwpOwotCi0JaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1BIWUFERFIsICZyZWcpKQotCQl2YWwgPSByZWcgPDwgMTY7Ci0JZWxzZQotCQl2YWwgPSAwOwotCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9EQVRBX01CT1ggKyAxMiwgdmFsKTsKLQotCXZhbCA9IHRyMzIoR1JDX1JYX0NQVV9FVkVOVCk7Ci0JdmFsIHw9IEdSQ19SWF9DUFVfRFJJVkVSX0VWRU5UOwotCXR3MzJfZihHUkNfUlhfQ1BVX0VWRU5ULCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCB0ZzNfbGlua19yZXBvcnQoc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKCFuZXRpZl9jYXJyaWVyX29rKHRwLT5kZXYpKSB7Ci0JCWlmIChuZXRpZl9tc2dfbGluayh0cCkpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgaXMgZG93bi5cbiIsCi0JCQkgICAgICAgdHAtPmRldi0+bmFtZSk7Ci0JCXRnM191bXBfbGlua19yZXBvcnQodHApOwotCX0gZWxzZSBpZiAobmV0aWZfbXNnX2xpbmsodHApKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTGluayBpcyB1cCBhdCAlZCBNYnBzLCAlcyBkdXBsZXguXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSwKLQkJICAgICAgICh0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMDAgPwotCQkJMTAwMCA6Ci0JCQkodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAgPwotCQkJIDEwMCA6IDEwKSksCi0JCSAgICAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPwotCQkJImZ1bGwiIDogImhhbGYiKSk7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJICAgICAgICIlczogRmxvdyBjb250cm9sIGlzICVzIGZvciBUWCBhbmQgJXMgZm9yIFJYLlxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUsCi0JCSAgICAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybCAmIFRHM19GTE9XX0NUUkxfVFgpID8KLQkJICAgICAgICJvbiIgOiAib2ZmIiwKLQkJICAgICAgICh0cC0+bGlua19jb25maWcuYWN0aXZlX2Zsb3djdHJsICYgVEczX0ZMT1dfQ1RSTF9SWCkgPwotCQkgICAgICAgIm9uIiA6ICJvZmYiKTsKLQkJdGczX3VtcF9saW5rX3JlcG9ydCh0cCk7Ci0JfQotfQotCi1zdGF0aWMgdTE2IHRnM19hZHZlcnRfZmxvd2N0cmxfMTAwMFQodTggZmxvd19jdHJsKQotewotCXUxNiBtaWlyZWc7Ci0KLQlpZiAoKGZsb3dfY3RybCAmIFRHM19GTE9XX0NUUkxfVFgpICYmIChmbG93X2N0cmwgJiBURzNfRkxPV19DVFJMX1JYKSkKLQkJbWlpcmVnID0gQURWRVJUSVNFX1BBVVNFX0NBUDsKLQllbHNlIGlmIChmbG93X2N0cmwgJiBURzNfRkxPV19DVFJMX1RYKQotCQltaWlyZWcgPSBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKLQllbHNlIGlmIChmbG93X2N0cmwgJiBURzNfRkxPV19DVFJMX1JYKQotCQltaWlyZWcgPSBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU07Ci0JZWxzZQotCQltaWlyZWcgPSAwOwotCi0JcmV0dXJuIG1paXJlZzsKLX0KLQotc3RhdGljIHUxNiB0ZzNfYWR2ZXJ0X2Zsb3djdHJsXzEwMDBYKHU4IGZsb3dfY3RybCkKLXsKLQl1MTYgbWlpcmVnOwotCi0JaWYgKChmbG93X2N0cmwgJiBURzNfRkxPV19DVFJMX1RYKSAmJiAoZmxvd19jdHJsICYgVEczX0ZMT1dfQ1RSTF9SWCkpCi0JCW1paXJlZyA9IEFEVkVSVElTRV8xMDAwWFBBVVNFOwotCWVsc2UgaWYgKGZsb3dfY3RybCAmIFRHM19GTE9XX0NUUkxfVFgpCi0JCW1paXJlZyA9IEFEVkVSVElTRV8xMDAwWFBTRV9BU1lNOwotCWVsc2UgaWYgKGZsb3dfY3RybCAmIFRHM19GTE9XX0NUUkxfUlgpCi0JCW1paXJlZyA9IEFEVkVSVElTRV8xMDAwWFBBVVNFIHwgQURWRVJUSVNFXzEwMDBYUFNFX0FTWU07Ci0JZWxzZQotCQltaWlyZWcgPSAwOwotCi0JcmV0dXJuIG1paXJlZzsKLX0KLQotc3RhdGljIHU4IHRnM19yZXNvbHZlX2Zsb3djdHJsXzEwMDBUKHUxNiBsY2xhZHYsIHUxNiBybXRhZHYpCi17Ci0JdTggY2FwID0gMDsKLQotCWlmIChsY2xhZHYgJiBBRFZFUlRJU0VfUEFVU0VfQ0FQKSB7Ci0JCWlmIChsY2xhZHYgJiBBRFZFUlRJU0VfUEFVU0VfQVNZTSkgewotCQkJaWYgKHJtdGFkdiAmIExQQV9QQVVTRV9DQVApCi0JCQkJY2FwID0gVEczX0ZMT1dfQ1RSTF9UWCB8IFRHM19GTE9XX0NUUkxfUlg7Ci0JCQllbHNlIGlmIChybXRhZHYgJiBMUEFfUEFVU0VfQVNZTSkKLQkJCQljYXAgPSBURzNfRkxPV19DVFJMX1JYOwotCQl9IGVsc2UgewotCQkJaWYgKHJtdGFkdiAmIExQQV9QQVVTRV9DQVApCi0JCQkJY2FwID0gVEczX0ZMT1dfQ1RSTF9UWCB8IFRHM19GTE9XX0NUUkxfUlg7Ci0JCX0KLQl9IGVsc2UgaWYgKGxjbGFkdiAmIEFEVkVSVElTRV9QQVVTRV9BU1lNKSB7Ci0JCWlmICgocm10YWR2ICYgTFBBX1BBVVNFX0NBUCkgJiYgKHJtdGFkdiAmIExQQV9QQVVTRV9BU1lNKSkKLQkJCWNhcCA9IFRHM19GTE9XX0NUUkxfVFg7Ci0JfQotCi0JcmV0dXJuIGNhcDsKLX0KLQotc3RhdGljIHU4IHRnM19yZXNvbHZlX2Zsb3djdHJsXzEwMDBYKHUxNiBsY2xhZHYsIHUxNiBybXRhZHYpCi17Ci0JdTggY2FwID0gMDsKLQotCWlmIChsY2xhZHYgJiBBRFZFUlRJU0VfMTAwMFhQQVVTRSkgewotCQlpZiAobGNsYWR2ICYgQURWRVJUSVNFXzEwMDBYUFNFX0FTWU0pIHsKLQkJCWlmIChybXRhZHYgJiBMUEFfMTAwMFhQQVVTRSkKLQkJCQljYXAgPSBURzNfRkxPV19DVFJMX1RYIHwgVEczX0ZMT1dfQ1RSTF9SWDsKLQkJCWVsc2UgaWYgKHJtdGFkdiAmIExQQV8xMDAwWFBBVVNFX0FTWU0pCi0JCQkJY2FwID0gVEczX0ZMT1dfQ1RSTF9SWDsKLQkJfSBlbHNlIHsKLQkJCWlmIChybXRhZHYgJiBMUEFfMTAwMFhQQVVTRSkKLQkJCQljYXAgPSBURzNfRkxPV19DVFJMX1RYIHwgVEczX0ZMT1dfQ1RSTF9SWDsKLQkJfQotCX0gZWxzZSBpZiAobGNsYWR2ICYgQURWRVJUSVNFXzEwMDBYUFNFX0FTWU0pIHsKLQkJaWYgKChybXRhZHYgJiBMUEFfMTAwMFhQQVVTRSkgJiYgKHJtdGFkdiAmIExQQV8xMDAwWFBBVVNFX0FTWU0pKQotCQkJY2FwID0gVEczX0ZMT1dfQ1RSTF9UWDsKLQl9Ci0KLQlyZXR1cm4gY2FwOwotfQotCi1zdGF0aWMgdm9pZCB0ZzNfc2V0dXBfZmxvd19jb250cm9sKHN0cnVjdCB0ZzMgKnRwLCB1MzIgbG9jYWxfYWR2LCB1MzIgcmVtb3RlX2FkdikKLXsKLQl1OCBuZXdfdGczX2ZsYWdzID0gMDsKLQl1MzIgb2xkX3J4X21vZGUgPSB0cC0+cnhfbW9kZTsKLQl1MzIgb2xkX3R4X21vZGUgPSB0cC0+dHhfbW9kZTsKLQotCWlmICh0cC0+bGlua19jb25maWcuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BBVVNFX0FVVE9ORUcpKSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpCi0JCQluZXdfdGczX2ZsYWdzID0gdGczX3Jlc29sdmVfZmxvd2N0cmxfMTAwMFgobG9jYWxfYWR2LAotCQkJCQkJCQkgICByZW1vdGVfYWR2KTsKLQkJZWxzZQotCQkJbmV3X3RnM19mbGFncyA9IHRnM19yZXNvbHZlX2Zsb3djdHJsXzEwMDBUKGxvY2FsX2FkdiwKLQkJCQkJCQkJICAgcmVtb3RlX2Fkdik7Ci0JfSBlbHNlIHsKLQkJbmV3X3RnM19mbGFncyA9IHRwLT5saW5rX2NvbmZpZy5mbG93Y3RybDsKLQl9Ci0KLQl0cC0+bGlua19jb25maWcuYWN0aXZlX2Zsb3djdHJsID0gbmV3X3RnM19mbGFnczsKLQotCWlmIChuZXdfdGczX2ZsYWdzICYgVEczX0ZMT1dfQ1RSTF9SWCkKLQkJdHAtPnJ4X21vZGUgfD0gUlhfTU9ERV9GTE9XX0NUUkxfRU5BQkxFOwotCWVsc2UKLQkJdHAtPnJ4X21vZGUgJj0gflJYX01PREVfRkxPV19DVFJMX0VOQUJMRTsKLQotCWlmIChvbGRfcnhfbW9kZSAhPSB0cC0+cnhfbW9kZSkgewotCQl0dzMyX2YoTUFDX1JYX01PREUsIHRwLT5yeF9tb2RlKTsKLQl9Ci0KLQlpZiAobmV3X3RnM19mbGFncyAmIFRHM19GTE9XX0NUUkxfVFgpCi0JCXRwLT50eF9tb2RlIHw9IFRYX01PREVfRkxPV19DVFJMX0VOQUJMRTsKLQllbHNlCi0JCXRwLT50eF9tb2RlICY9IH5UWF9NT0RFX0ZMT1dfQ1RSTF9FTkFCTEU7Ci0KLQlpZiAob2xkX3R4X21vZGUgIT0gdHAtPnR4X21vZGUpIHsKLQkJdHczMl9mKE1BQ19UWF9NT0RFLCB0cC0+dHhfbW9kZSk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCB0ZzNfYXV4X3N0YXRfdG9fc3BlZWRfZHVwbGV4KHN0cnVjdCB0ZzMgKnRwLCB1MzIgdmFsLCB1MTYgKnNwZWVkLCB1OCAqZHVwbGV4KQogewogCXN3aXRjaCAodmFsICYgTUlJX1RHM19BVVhfU1RBVF9TUERNQVNLKSB7CkBAIC0xOTIxLDcgKzIyODcsNyBAQAogCQkqc3BlZWQgPSBTUEVFRF9JTlZBTElEOwogCQkqZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CiAJCWJyZWFrOwotCX07CisJfQogfQogCiBzdGF0aWMgdm9pZCB0ZzNfcGh5X2NvcHBlcl9iZWdpbihzdHJ1Y3QgdGczICp0cCkKQEAgLTIwMzMsNyArMjM5OSw3IEBACiAJCWNhc2UgU1BFRURfMTAwMDoKIAkJCWJtY3IgfD0gVEczX0JNQ1JfU1BFRUQxMDAwOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogCQlpZiAodHAtPmxpbmtfY29uZmlnLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCWJtY3IgfD0gQk1DUl9GVUxMRFBMWDsKQEAgLTI3MzEsNyArMzA5Nyw3IEBACiAJZGVmYXVsdDoKIAkJcmV0ID0gQU5FR19GQUlMRUQ7CiAJCWJyZWFrOwotCX07CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM1NzIsNyArMzkzOCw3IEBACiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKLQl9OworCX0KIAogCS8qIERvIG5vdCBvdmVyd3JpdGUgYW55IG9mIHRoZSBtYXAgb3IgcnAgaW5mb3JtYXRpb24KIAkgKiB1bnRpbCB3ZSBhcmUgc3VyZSB3ZSBjYW4gY29tbWl0IHRvIGEgbmV3IGJ1ZmZlci4KQEAgLTM2MzIsNyArMzk5OCw3IEBACiAKIAlkZWZhdWx0OgogCQlyZXR1cm47Ci0JfTsKKwl9CiAKIAlkZXN0X21hcC0+c2tiID0gc3JjX21hcC0+c2tiOwogCXBjaV91bm1hcF9hZGRyX3NldChkZXN0X21hcCwgbWFwcGluZywKQEAgLTM4NDIsNyArNDIwOCwxNSBAQAogCQkJc2Jsay0+c3RhdHVzID0gU0RfU1RBVFVTX1VQREFURUQgfAogCQkJCShzYmxrLT5zdGF0dXMgJiB+U0RfU1RBVFVTX0xJTktfQ0hHKTsKIAkJCXNwaW5fbG9jaygmdHAtPmxvY2spOwotCQkJdGczX3NldHVwX3BoeSh0cCwgMCk7CisJCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJCQkJdHczMl9mKE1BQ19TVEFUVVMsCisJCQkJICAgICAoTUFDX1NUQVRVU19TWU5DX0NIQU5HRUQgfAorCQkJCSAgICAgIE1BQ19TVEFUVVNfQ0ZHX0NIQU5HRUQgfAorCQkJCSAgICAgIE1BQ19TVEFUVVNfTUlfQ09NUExFVElPTiB8CisJCQkJICAgICAgTUFDX1NUQVRVU19MTktTVEFURV9DSEFOR0VEKSk7CisJCQkJdWRlbGF5KDQwKTsKKwkJCX0gZWxzZQorCQkJCXRnM19zZXR1cF9waHkodHAsIDApOwogCQkJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKIAkJfQogCX0KQEAgLTQxMzAsNiArNDUwNCw3IEBACiBzdGF0aWMgdm9pZCB0ZzNfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHRnMywgcmVzZXRfdGFzayk7CisJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgcmVzdGFydF90aW1lcjsKIAogCXRnM19mdWxsX2xvY2sodHAsIDApOwpAQCAtNDE0MSw2ICs0NTE2LDggQEAKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKKwl0ZzNfcGh5X3N0b3AodHApOworCiAJdGczX25ldGlmX3N0b3AodHApOwogCiAJdGczX2Z1bGxfbG9jayh0cCwgMSk7CkBAIC00MTU2LDcgKzQ1MzMsOCBAQAogCX0KIAogCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAwKTsKLQlpZiAodGczX2luaXRfaHcodHAsIDEpKQorCWVyciA9IHRnM19pbml0X2h3KHRwLCAxKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAogCXRnM19uZXRpZl9zdGFydCh0cCk7CkBAIC00MTY2LDYgKzQ1NDQsOSBAQAogCiBvdXQ6CiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKKworCWlmICghZXJyKQorCQl0ZzNfcGh5X3N0YXJ0KHRwKTsKIH0KIAogc3RhdGljIHZvaWQgdGczX2R1bXBfc2hvcnRfc3RhdGUoc3RydWN0IHRnMyAqdHApCkBAIC00NjY5LDYgKzUwNTAsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwl0ZzNfcGh5X3N0b3AodHApOworCiAJdGczX25ldGlmX3N0b3AodHApOwogCiAJdGczX2Z1bGxfbG9jayh0cCwgMSk7CkBAIC00Njg0LDYgKzUwNjcsOSBAQAogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIAorCWlmICghZXJyKQorCQl0ZzNfcGh5X3N0YXJ0KHRwKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ5NzUsNyArNTM2MSw3IEBACiAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJfQogCiAJdmFsID0gdHIzMihvZnMpOwpAQCAtNTIxNyw3ICs1NjAzLDcgQEAKIAogCQlkZWZhdWx0OgogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAl9CiAKIAlpZiAoa2luZCA9PSBSRVNFVF9LSU5EX0lOSVQgfHwKQEAgLTUyNDIsNyArNTYyOCw3IEBACiAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJfQogCiAJaWYgKGtpbmQgPT0gUkVTRVRfS0lORF9TSFVURE9XTikKQEAgLTUyNzEsNyArNTY1Nyw3IEBACiAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJfQogfQogCkBAIC01MzkzLDYgKzU3NzksOCBAQAogCiAJdGczX252cmFtX2xvY2sodHApOwogCisJdGczX21kaW9fc3RvcCh0cCk7CisKIAkvKiBObyBtYXRjaGluZyB0ZzNfbnZyYW1fdW5sb2NrKCkgYWZ0ZXIgdGhpcyBiZWNhdXNlCiAJICogY2hpcCByZXNldCBiZWxvdyB3aWxsIHVuZG8gdGhlIG52cmFtIGxvY2suCiAJICovCkBAIC01NDA4LDcgKzU3OTYsOCBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NyB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSkKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpCiAJCXR3MzIoR1JDX0ZBU1RCT09UX1BDLCAwKTsKIAogCS8qCkBAIC01NTQ0LDYgKzU5MzMsOCBAQAogCQl0dzMyX2YoTUFDX01PREUsIDApOwogCXVkZWxheSg0MCk7CiAKKwl0ZzNfbWRpb19zdGFydCh0cCk7CisKIAllcnIgPSB0ZzNfcG9sbF9mdyh0cCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTY2MjMsNyArNzAxNCw4IEBACiAJCXRnM19hYm9ydF9odyh0cCwgMSk7CiAJfQogCi0JaWYgKHJlc2V0X3BoeSkKKwlpZiAocmVzZXRfcGh5ICYmCisJICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSkKIAkJdGczX3BoeV9yZXNldCh0cCk7CiAKIAllcnIgPSB0ZzNfY2hpcF9yZXNldCh0cCk7CkBAIC02Njk5LDcgKzcwOTEsOCBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg0ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzYxKSB7CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzYxICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1KSB7CiAJCS8qIFRoaXMgdmFsdWUgaXMgZGV0ZXJtaW5lZCBkdXJpbmcgdGhlIHByb2JlIHRpbWUgRE1BCiAJCSAqIGVuZ2luZSB0ZXN0LCB0ZzNfdGVzdF9kbWEuCiAJCSAqLwpAQCAtNjkzOCw3ICs3MzMxLDggQEAKIAkJICAgICAgUkRNQUNfTU9ERV9GSUZPVVJVTl9FTkFCIHwgUkRNQUNfTU9ERV9GSUZPT1JFQURfRU5BQiB8CiAJCSAgICAgIFJETUFDX01PREVfTE5HUkVBRF9FTkFCKTsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCkKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpCiAJCXJkbWFjX21vZGUgfD0gUkRNQUNfTU9ERV9CRF9TQkRfQ1JQVF9FTkFCIHwKIAkJCSAgICAgIFJETUFDX01PREVfTUJVRl9SQkRfQ1JQVF9FTkFCIHwKIAkJCSAgICAgIFJETUFDX01PREVfTUJVRl9TQkRfQ1JQVF9FTkFCOwpAQCAtNzEwNiw4ICs3NTAwLDkgQEAKIAlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1KSB8fAogCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcpIHx8CiAJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCkgfHwKLQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxKSkKLQkJdmFsIHw9ICgxIDw8IDI5KTsKKwkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxKSB8fAorCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpKQorCQl2YWwgfD0gV0RNQUNfTU9ERV9TVEFUVVNfVEFHX0ZJWDsKIAogCXR3MzJfZihXRE1BQ19NT0RFLCB2YWwpOwogCXVkZWxheSg0MCk7CkBAIC03MTY4LDIzICs3NTYzLDE0IEBACiAKIAl0cC0+cnhfbW9kZSA9IFJYX01PREVfRU5BQkxFOwogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSkKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpCiAJCXRwLT5yeF9tb2RlIHw9IFJYX01PREVfSVBWNl9DU1VNX0VOQUJMRTsKIAogCXR3MzJfZihNQUNfUlhfTU9ERSwgdHAtPnJ4X21vZGUpOwogCXVkZWxheSgxMCk7CiAKLQlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpIHsKLQkJdHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIgPSAwOwotCQl0cC0+bGlua19jb25maWcuc3BlZWQgPSB0cC0+bGlua19jb25maWcub3JpZ19zcGVlZDsKLQkJdHAtPmxpbmtfY29uZmlnLmR1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5vcmlnX2R1cGxleDsKLQkJdHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPSB0cC0+bGlua19jb25maWcub3JpZ19hdXRvbmVnOwotCX0KLQotCXRwLT5taV9tb2RlICY9IH5NQUNfTUlfTU9ERV9BVVRPX1BPTEw7Ci0JdHczMl9mKE1BQ19NSV9NT0RFLCB0cC0+bWlfbW9kZSk7Ci0JdWRlbGF5KDgwKTsKLQogCXR3MzIoTUFDX0xFRF9DVFJMLCB0cC0+bGVkX2N0cmwpOwogCiAJdHczMihNQUNfTUlfU1RBVCwgTUFDX01JX1NUQVRfTE5LU1RBVF9BVFROX0VOQUIpOwpAQCAtNzIzMSwxOSArNzYxNywyOCBAQAogCQl0dzMyKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwpOwogCX0KIAotCWVyciA9IHRnM19zZXR1cF9waHkodHAsIDApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSkgeworCQlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpIHsKKwkJCXRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyID0gMDsKKwkJCXRwLT5saW5rX2NvbmZpZy5zcGVlZCA9IHRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkOworCQkJdHAtPmxpbmtfY29uZmlnLmR1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5vcmlnX2R1cGxleDsKKwkJCXRwLT5saW5rX2NvbmZpZy5hdXRvbmVnID0gdHAtPmxpbmtfY29uZmlnLm9yaWdfYXV0b25lZzsKKwkJfQogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKSAmJgotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTkwNikgewotCQl1MzIgdG1wOworCQllcnIgPSB0ZzNfc2V0dXBfcGh5KHRwLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CiAKLQkJLyogQ2xlYXIgQ1JDIHN0YXRzLiAqLwotCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX1RFU1QxLCAmdG1wKSkgewotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX1RFU1QxLAotCQkJCSAgICAgdG1wIHwgTUlJX1RHM19URVNUMV9DUkNfRU4pOwotCQkJdGczX3JlYWRwaHkodHAsIDB4MTQsICZ0bXApOworCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpICYmCisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTkwNikgeworCQkJdTMyIHRtcDsKKworCQkJLyogQ2xlYXIgQ1JDIHN0YXRzLiAqLworCQkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19URVNUMSwgJnRtcCkpIHsKKwkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfVEVTVDEsCisJCQkJCSAgICAgdG1wIHwgTUlJX1RHM19URVNUMV9DUkNfRU4pOworCQkJCXRnM19yZWFkcGh5KHRwLCAweDE0LCAmdG1wKTsKKwkJCX0KIAkJfQogCX0KIApAQCAtNzI5Niw3ICs3NjkxLDcgQEAKIAogCWRlZmF1bHQ6CiAJCWJyZWFrOwotCX07CisJfQogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKIAkJLyogV3JpdGUgb3VyIGhlYXJ0YmVhdCB1cGRhdGUgaW50ZXJ2YWwgdG8gQVBFLiAqLwpAQCAtNzc1OCw2ICs4MTUzLDggQEAKIAkJfQogCX0KIAorCXRnM19waHlfc3RhcnQodHApOworCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKIAlhZGRfdGltZXIoJnRwLT50aW1lcik7CkBAIC04NTU5LDcgKzg5NTYsMTMgQEAKIAogc3RhdGljIGludCB0ZzNfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotICAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHsKKwkJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCQlyZXR1cm4gcGh5X2V0aHRvb2xfZ3NldCh0cC0+bWRpb19idXMucGh5X21hcFtQSFlfQUREUl0sIGNtZCk7CisJfQogCiAJY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEX0F1dG9uZWcpOwogCkBAIC04NTk2LDYgKzg5OTksMTIgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0NPTk5FQ1RFRCkpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQodHAtPm1kaW9fYnVzLnBoeV9tYXBbUEhZX0FERFJdLCBjbWQpOworCX0KKwogCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpIHsKIAkJLyogVGhlc2UgYXJlIHRoZSBvbmx5IHZhbGlkIGFkdmVydGlzZW1lbnQgYml0cyBhbGxvd2VkLiAgKi8KIAkJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJgpAQCAtODYyOCw3ICs5MDM3LDcgQEAKIAkJdHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nID0gMDsKIAkJdHAtPmxpbmtfY29uZmlnLnNwZWVkID0gY21kLT5zcGVlZDsKIAkJdHAtPmxpbmtfY29uZmlnLmR1cGxleCA9IGNtZC0+ZHVwbGV4OwotICAJfQorCX0KIAogCXRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkID0gdHAtPmxpbmtfY29uZmlnLnNwZWVkOwogCXRwLT5saW5rX2NvbmZpZy5vcmlnX2R1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5kdXBsZXg7CkBAIC04NzExLDcgKzkxMjAsMTAgQEAKIAkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81OTA2KSkgewogCQlpZiAodmFsdWUpIHsKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxKQorCQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CisJCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0ICYmCisJCQkgICAgIEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3ODRfQVgpIHx8CisJCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpCiAJCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047CiAJCX0gZWxzZQogCQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfVFNPX0VDTik7CkBAIC04NzIyLDcgKzkxMzQsNiBAQAogc3RhdGljIGludCB0ZzNfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgYm1jcjsKIAlpbnQgcjsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQpAQCAtODczMSwxNyArOTE0MiwyNSBAQAogCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7Ci0JciA9IC1FSU5WQUw7Ci0JdGczX3JlYWRwaHkodHAsIE1JSV9CTUNSLCAmYm1jcik7Ci0JaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNQ1IsICZibWNyKSAmJgotCSAgICAoKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB8fAotCSAgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEFSQUxMRUxfREVURUNUKSkpIHsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgYm1jciB8IEJNQ1JfQU5SRVNUQVJUIHwKLQkJCQkJICAgQk1DUl9BTkVOQUJMRSk7Ci0JCXIgPSAwOworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHsKKwkJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCQlyID0gcGh5X3N0YXJ0X2FuZWcodHAtPm1kaW9fYnVzLnBoeV9tYXBbUEhZX0FERFJdKTsKKwl9IGVsc2UgeworCQl1MzIgYm1jcjsKKworCQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKKwkJciA9IC1FSU5WQUw7CisJCXRnM19yZWFkcGh5KHRwLCBNSUlfQk1DUiwgJmJtY3IpOworCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfQk1DUiwgJmJtY3IpICYmCisJCSAgICAoKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB8fAorCQkgICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVCkpKSB7CisJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBibWNyIHwgQk1DUl9BTlJFU1RBUlQgfAorCQkJCQkJICAgQk1DUl9BTkVOQUJMRSk7CisJCQlyID0gMDsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOwogCX0KLQlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOwogCiAJcmV0dXJuIHI7CiB9CkBAIC04NzgzLDYgKzkyMDIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJdGczX3BoeV9zdG9wKHRwKTsKIAkJdGczX25ldGlmX3N0b3AodHApOwogCQlpcnFfc3luYyA9IDE7CiAJfQpAQCAtODgwNiw2ICs5MjI2LDkgQEAKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKKwlpZiAoaXJxX3N5bmMgJiYgIWVycikKKwkJdGczX3BoeV9zdGFydCh0cCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04ODI5LDM3ICs5MjUyLDkzIEBACiBzdGF0aWMgaW50IHRnM19zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcGF1c2UpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpcnFfc3luYyA9IDAsIGVyciA9IDA7CisJaW50IGVyciA9IDA7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCXRnM19uZXRpZl9zdG9wKHRwKTsKLQkJaXJxX3N5bmMgPSAxOworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHsKKwkJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCWlmIChlcGF1c2UtPmF1dG9uZWcpIHsKKwkJCXUzMiBuZXdhZHY7CisJCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworCisJCQlwaHlkZXYgPSB0cC0+bWRpb19idXMucGh5X21hcFtQSFlfQUREUl07CisKKwkJCWlmIChlcGF1c2UtPnJ4X3BhdXNlKSB7CisJCQkJaWYgKGVwYXVzZS0+dHhfcGF1c2UpCisJCQkJCW5ld2FkdiA9IEFEVkVSVElTRURfUGF1c2U7CisJCQkJZWxzZQorCQkJCQluZXdhZHYgPSBBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkJCSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CisJCQl9IGVsc2UgaWYgKGVwYXVzZS0+dHhfcGF1c2UpIHsKKwkJCQluZXdhZHYgPSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CisJCQl9IGVsc2UKKwkJCQluZXdhZHYgPSAwOworCisJCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSB7CisJCQkJdTMyIG9sZGFkdiA9IHBoeWRldi0+YWR2ZXJ0aXNpbmcgJgorCQkJCQkgICAgIChBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkJICAgICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKKwkJCQlpZiAob2xkYWR2ICE9IG5ld2FkdikgeworCQkJCQlwaHlkZXYtPmFkdmVydGlzaW5nICY9CisJCQkJCQl+KEFEVkVSVElTRURfUGF1c2UgfAorCQkJCQkJICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOworCQkJCQlwaHlkZXYtPmFkdmVydGlzaW5nIHw9IG5ld2FkdjsKKwkJCQkJZXJyID0gcGh5X3N0YXJ0X2FuZWcocGh5ZGV2KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmPQorCQkJCQkJfihBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkJCSAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKKwkJCQl0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgfD0gbmV3YWR2OworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGVwYXVzZS0+cnhfcGF1c2UpCisJCQkJdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsIHw9IFRHM19GTE9XX0NUUkxfUlg7CisJCQllbHNlCisJCQkJdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsICY9IH5URzNfRkxPV19DVFJMX1JYOworCisJCQlpZiAoZXBhdXNlLT50eF9wYXVzZSkKKwkJCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgfD0gVEczX0ZMT1dfQ1RSTF9UWDsKKwkJCWVsc2UKKwkJCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgJj0gflRHM19GTE9XX0NUUkxfVFg7CisKKwkJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCQkJdGczX3NldHVwX2Zsb3dfY29udHJvbCh0cCwgMCwgMCk7CisJCX0KKwl9IGVsc2UgeworCQlpbnQgaXJxX3N5bmMgPSAwOworCisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCXRnM19uZXRpZl9zdG9wKHRwKTsKKwkJCWlycV9zeW5jID0gMTsKKwkJfQorCisJCXRnM19mdWxsX2xvY2sodHAsIGlycV9zeW5jKTsKKworCQlpZiAoZXBhdXNlLT5hdXRvbmVnKQorCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19QQVVTRV9BVVRPTkVHOworCQllbHNlCisJCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19QQVVTRV9BVVRPTkVHOworCQlpZiAoZXBhdXNlLT5yeF9wYXVzZSkKKwkJCXRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCB8PSBURzNfRkxPV19DVFJMX1JYOworCQllbHNlCisJCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgJj0gflRHM19GTE9XX0NUUkxfUlg7CisJCWlmIChlcGF1c2UtPnR4X3BhdXNlKQorCQkJdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsIHw9IFRHM19GTE9XX0NUUkxfVFg7CisJCWVsc2UKKwkJCXRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCAmPSB+VEczX0ZMT1dfQ1RSTF9UWDsKKworCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7CisJCQllcnIgPSB0ZzNfcmVzdGFydF9odyh0cCwgMSk7CisJCQlpZiAoIWVycikKKwkJCQl0ZzNfbmV0aWZfc3RhcnQodHApOworCQl9CisKKwkJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIAl9CiAKLQl0ZzNfZnVsbF9sb2NrKHRwLCBpcnFfc3luYyk7Ci0KLQlpZiAoZXBhdXNlLT5hdXRvbmVnKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BBVVNFX0FVVE9ORUc7Ci0JZWxzZQotCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19QQVVTRV9BVVRPTkVHOwotCWlmIChlcGF1c2UtPnJ4X3BhdXNlKQotCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgfD0gVEczX0ZMT1dfQ1RSTF9SWDsKLQllbHNlCi0JCXRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCAmPSB+VEczX0ZMT1dfQ1RSTF9SWDsKLQlpZiAoZXBhdXNlLT50eF9wYXVzZSkKLQkJdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsIHw9IFRHM19GTE9XX0NUUkxfVFg7Ci0JZWxzZQotCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgJj0gflRHM19GTE9XX0NUUkxfVFg7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKLQkJZXJyID0gdGczX3Jlc3RhcnRfaHcodHAsIDEpOwotCQlpZiAoIWVycikKLQkJCXRnM19uZXRpZl9zdGFydCh0cCk7Ci0JfQotCi0JdGczX2Z1bGxfdW5sb2NrKHRwKTsKLQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg5MDIsNyArOTM4MSw4IEBACiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxKQorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkKIAkJZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtKGRldiwgZGF0YSk7CiAJZWxzZQogCQlldGh0b29sX29wX3NldF90eF9jc3VtKGRldiwgZGF0YSk7CkBAIC05NDIzLDcgKzk5MDMsOCBAQAogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUgfHwKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3IHx8CiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAotCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEpCisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAorCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpCiAJCQltZW1fdGJsID0gbWVtX3RibF81NzU1OwogCQllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKIAkJCW1lbV90YmwgPSBtZW1fdGJsXzU5MDY7CkBAIC05NjMwLDcgKzEwMTExLDggQEAKIAkJcmV0dXJuIFRHM19MT09QQkFDS19GQUlMRUQ7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEpIHsKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpIHsKIAkJaW50IGk7CiAJCXUzMiBzdGF0dXM7CiAKQEAgLTk2NTgsMTQgKzEwMTQwLDE2IEBACiAJCWVyciB8PSBURzNfTUFDX0xPT1BCQUNLX0ZBSUxFRDsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSkgeworCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkgewogCQl0dzMyKFRHM19DUE1VX0NUUkwsIGNwbXVjdHJsKTsKIAogCQkvKiBSZWxlYXNlIHRoZSBtdXRleCAqLwogCQl0dzMyKFRHM19DUE1VX01VVEVYX0dOVCwgQ1BNVV9NVVRFWF9HTlRfRFJJVkVSKTsKIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpKSB7CisJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikpIHsKIAkJaWYgKHRnM19ydW5fbG9vcGJhY2sodHAsIFRHM19QSFlfTE9PUEJBQ0spKQogCQkJZXJyIHw9IFRHM19QSFlfTE9PUEJBQ0tfRkFJTEVEOwogCX0KQEAgLTk2OTIsOSArMTAxNzYsMTAgQEAKIAkJZGF0YVsxXSA9IDE7CiAJfQogCWlmIChldGVzdC0+ZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7Ci0JCWludCBlcnIsIGlycV9zeW5jID0gMDsKKwkJaW50IGVyciwgZXJyMiA9IDAsIGlycV9zeW5jID0gMDsKIAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQl0ZzNfcGh5X3N0b3AodHApOwogCQkJdGczX25ldGlmX3N0b3AodHApOwogCQkJaXJxX3N5bmMgPSAxOwogCQl9CkBAIC05NzM1LDExICsxMDIyMCwxNSBAQAogCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfSU5JVF9DT01QTEVURTsKLQkJCWlmICghdGczX3Jlc3RhcnRfaHcodHAsIDEpKQorCQkJZXJyMiA9IHRnM19yZXN0YXJ0X2h3KHRwLCAxKTsKKwkJCWlmICghZXJyMikKIAkJCQl0ZzNfbmV0aWZfc3RhcnQodHApOwogCQl9CiAKIAkJdGczX2Z1bGxfdW5sb2NrKHRwKTsKKworCQlpZiAoaXJxX3N5bmMgJiYgIWVycjIpCisJCQl0ZzNfcGh5X3N0YXJ0KHRwKTsKIAl9CiAJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQogCQl0ZzNfc2V0X3Bvd2VyX3N0YXRlKHRwLCBQQ0lfRDNob3QpOwpAQCAtOTc1Miw2ICsxMDI0MSwxMiBAQAogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyOwogCisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgeworCQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9DT05ORUNURUQpKQorCQkJcmV0dXJuIC1FQUdBSU47CisJCXJldHVybiBwaHlfbWlpX2lvY3RsKHRwLT5tZGlvX2J1cy5waHlfbWFwW1BIWV9BRERSXSwgZGF0YSwgY21kKTsKKwl9CisKIAlzd2l0Y2goY21kKSB7CiAJY2FzZSBTSU9DR01JSVBIWToKIAkJZGF0YS0+cGh5X2lkID0gUEhZX0FERFI7CkBAIC0xMDI5NCw3ICsxMDc4OSw4IEBACiAJCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1KQogCQkJdGczX2dldF81NzU1X252cmFtX2luZm8odHApOwogCQllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NyB8fAotCQkJIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0KQorCQkJIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8CisJCQkgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpCiAJCQl0ZzNfZ2V0XzU3ODdfbnZyYW1faW5mbyh0cCk7CiAJCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxKQogCQkJdGczX2dldF81NzYxX252cmFtX2luZm8odHApOwpAQCAtMTA2MjUsNiArMTExMjEsNyBAQAogCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg3KSAmJgogCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg0KSAmJgogCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzYxKSAmJgorCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1KSAmJgogCQkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19TVCkgJiYKIAkJICAgIChudnJhbV9jbWQgJiBOVlJBTV9DTURfRklSU1QpKSB7CiAKQEAgLTEwODA3LDcgKzExMzA0LDcgQEAKIAl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0RBVEFfU0lHLCAmdmFsKTsKIAlpZiAodmFsID09IE5JQ19TUkFNX0RBVEFfU0lHX01BR0lDKSB7CiAJCXUzMiBuaWNfY2ZnLCBsZWRfY2ZnOwotCQl1MzIgbmljX3BoeV9pZCwgdmVyLCBjZmcyID0gMCwgZWVwcm9tX3BoeV9pZDsKKwkJdTMyIG5pY19waHlfaWQsIHZlciwgY2ZnMiA9IDAsIGNmZzQgPSAwLCBlZXByb21fcGh5X2lkOwogCQlpbnQgZWVwcm9tX3BoeV9zZXJkZXMgPSAwOwogCiAJCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fREFUQV9DRkcsICZuaWNfY2ZnKTsKQEAgLTEwODIxLDYgKzExMzE4LDkgQEAKIAkJICAgICh2ZXIgPiAwKSAmJiAodmVyIDwgMHgxMDApKQogCQkJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9EQVRBX0NGR18yLCAmY2ZnMik7CiAKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1KQorCQkJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9EQVRBX0NGR180LCAmY2ZnNCk7CisKIAkJaWYgKChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfUEhZX1RZUEVfTUFTSykgPT0KIAkJICAgIE5JQ19TUkFNX0RBVEFfQ0ZHX1BIWV9UWVBFX0ZJQkVSKQogCQkJZWVwcm9tX3BoeV9zZXJkZXMgPSAxOwpAQCAtMTA4OTMsNyArMTEzOTMsNyBAQAogCQkJCQkJIExFRF9DVFJMX01PREVfUEhZXzIpOwogCQkJYnJlYWs7CiAKLQkJfTsKKwkJfQogCiAJCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKIAkJICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSkgJiYKQEAgLTEwOTQ1LDYgKzExNDQ1LDEzIEBACiAJCQlpZiAoY2ZnMyAmIE5JQ19TUkFNX0FTUE1fREVCT1VOQ0UpCiAJCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19BU1BNX1dPUktBUk9VTkQ7CiAJCX0KKworCQlpZiAoY2ZnNCAmIE5JQ19TUkFNX1JHTUlJX1NURF9JQk5EX0RJU0FCTEUpCisJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19SR01JSV9TVERfSUJORF9ESVNBQkxFOworCQlpZiAoY2ZnNCAmIE5JQ19TUkFNX1JHTUlJX0VYVF9JQk5EX1JYX0VOKQorCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU47CisJCWlmIChjZmc0ICYgTklDX1NSQU1fUkdNSUlfRVhUX0lCTkRfVFhfRU4pCisJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTjsKIAl9CiB9CiAKQEAgLTExMDAzLDYgKzExNTEwLDkgQEAKIAl1MzIgaHdfcGh5X2lkLCBod19waHlfaWRfbWFza2VkOwogCWludCBlcnI7CiAKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKQorCQlyZXR1cm4gdGczX3BoeV9pbml0KHRwKTsKKwogCS8qIFJlYWRpbmcgdGhlIFBIWSBJRCByZWdpc3RlciBjYW4gY29uZmxpY3Qgd2l0aCBBU0YKIAkgKiBmaXJ3bWFyZSBhY2Nlc3MgdG8gdGhlIFBIWSBoYXJkd2FyZS4KIAkgKi8KQEAgLTExNTI1LDYgKzEyMDM1LDcgQEAKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYgfHwKIAkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpCiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyXzU3NTBfUExVUzsKQEAgLTExNTQ2LDYgKzEyMDU3LDcgQEAKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3IHx8CiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEgfHwKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgewogCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfSFdfVFNPXzI7CiAJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl8xU0hPVF9NU0k7CkBAIC0xMTU1OCwxNCArMTIwNzAsOCBAQAogCQl9CiAJfQogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzA1ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzUwICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzUyICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzU1ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg3ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg0ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzYxICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81OTA2KQorCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB8fAorCSAgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpCiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0pVTUJPX0NBUEFCTEU7CiAKIAlwY2llX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkodHAtPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKQEAgLTExNzU0LDcgKzEyMjYwLDggQEAKIAl9CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEpIHsKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpIHsKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19DUE1VX1BSRVNFTlQ7CiAKIAkJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzg0X0EwIHx8CkBAIC0xMTg0Nyw3ICsxMjM1NCw4IEBACiAJCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX0pJVFRFUl9CVUc7CiAJCQlpZiAodHAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU1TSkKIAkJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfQURKVVNUX1RSSU07Ci0JCX0gZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU5MDYpCisJCX0gZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU5MDYgJiYKKwkJCSAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1KQogCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX0JFUl9CVUc7CiAJfQogCkBAIC0xMTg1OCw4ICsxMjM2Niw3IEBACiAJCQl0cC0+cGh5X290cCA9IFRHM19PVFBfREVGQVVMVDsKIAl9CiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEpCisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DUE1VX1BSRVNFTlQpCiAJCXRwLT5taV9tb2RlID0gTUFDX01JX01PREVfNTAwS0haX0NPTlNUOwogCWVsc2UKIAkJdHAtPm1pX21vZGUgPSBNQUNfTUlfTU9ERV9CQVNFOwpAQCAtMTE4NjksOSArMTIzNzYsMTIgQEAKIAkgICAgR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTcwMF9CWCkKIAkJdHAtPmNvYWxlc2NlX21vZGUgfD0gSE9TVENDX01PREVfMzJCWVRFOwogCi0JLyogSW5pdGlhbGl6ZSBNQUMgTUkgbW9kZSwgcG9sbGluZyBkaXNhYmxlZC4gKi8KLQl0dzMyX2YoTUFDX01JX01PREUsIHRwLT5taV9tb2RlKTsKLQl1ZGVsYXkoODApOworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkKKwkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfVVNFX1BIWUxJQjsKKworCWVyciA9IHRnM19tZGlvX2luaXQodHApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAkvKiBJbml0aWFsaXplIGRhdGEvZGVzY3JpcHRvciBieXRlL3dvcmQgc3dhcHBpbmcuICovCiAJdmFsID0gdHIzMihHUkNfTU9ERSk7CkBAIC0xMTk1Miw2ICsxMjQ2Miw3IEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiglcykgcGh5IHByb2JlIGZhaWxlZCwgZXJyICVkXG4iLAogCQkgICAgICAgcGNpX25hbWUodHAtPnBkZXYpLCBlcnIpOwogCQkvKiAuLi4gYnV0IGRvIG5vdCByZXR1cm4gaW1tZWRpYXRlbHkgLi4uICovCisJCXRnM19tZGlvX2ZpbmkodHApOwogCX0KIAogCXRnM19yZWFkX3BhcnRubyh0cCk7CkBAIC0xMTk5OSw2ICsxMjUxMCw3IEBACiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQogCQl0cC0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB0ZzNfc3RhcnRfeG1pdDsKIAllbHNlCkBAIC0xMjIwMSw3ICsxMjcxMyw3IEBACiAJCQl2YWwgfD0gKERNQV9SV0NUUkxfUkVBRF9CTkRSWV8zODRfUENJWCB8CiAJCQkJRE1BX1JXQ1RSTF9XUklURV9CTkRSWV8zODRfUENJWCk7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCX0gZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykgewogCQlzd2l0Y2ggKGNhY2hlbGluZV9zaXplKSB7CiAJCWNhc2UgMTY6CkBAIC0xMjIxOCw3ICsxMjczMCw3IEBACiAJCQl2YWwgJj0gfkRNQV9SV0NUUkxfV1JJVEVfQk5EUllfRElTQUJfUENJRTsKIAkJCXZhbCB8PSBETUFfUldDVFJMX1dSSVRFX0JORFJZXzEyOF9QQ0lFOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAl9IGVsc2UgewogCQlzd2l0Y2ggKGNhY2hlbGluZV9zaXplKSB7CiAJCWNhc2UgMTY6CkBAIC0xMjI2Miw3ICsxMjc3NCw3IEBACiAJCQl2YWwgfD0gKERNQV9SV0NUUkxfUkVBRF9CTkRSWV8xMDI0IHwKIAkJCQlETUFfUldDVFJMX1dSSVRFX0JORFJZXzEwMjQpOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAl9CiAKIG91dDoKQEAgLTEyNjIyLDcgKzEzMTM0LDcgQEAKIAljYXNlIFBIWV9JRF9CQ004MDAyOglyZXR1cm4gIjgwMDIvc2VyZGVzIjsKIAljYXNlIDA6CQkJcmV0dXJuICJzZXJkZXMiOwogCWRlZmF1bHQ6CQlyZXR1cm4gInVua25vd24iOwotCX07CisJfQogfQogCiBzdGF0aWMgY2hhciAqIF9fZGV2aW5pdCB0ZzNfYnVzX3N0cmluZyhzdHJ1Y3QgdGczICp0cCwgY2hhciAqc3RyKQpAQCAtMTI5MjMsNyArMTM0MzUsMTAgQEAKIAkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18yKSAmJgogCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81OTA2KSkKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEpCisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAorCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0ICYmCisJCSAgICAgR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTc4NF9BWCkgfHwKKwkJCUdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1KQogCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047CiAJfQogCkBAIC0xMjk4OSw3ICsxMzUwNCw4IEBACiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8Ci0JCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSkKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CiAKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19SWF9DSEVDS1NVTVM7CkBAIC0xMzA3MSw2ICsxMzU4NywxMiBAQAogCQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJCQl0ZzNfcGh5X2ZpbmkodHApOworCQkJdGczX21kaW9fZmluaSh0cCk7CisJCX0KKwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQlpZiAodHAtPmFwZXJlZ3MpIHsKIAkJCWlvdW5tYXAodHAtPmFwZXJlZ3MpOwpAQCAtMTMxMDMsNiArMTM2MjUsNyBAQAogCQlyZXR1cm4gMDsKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJdGczX3BoeV9zdG9wKHRwKTsKIAl0ZzNfbmV0aWZfc3RvcCh0cCk7CiAKIAlkZWxfdGltZXJfc3luYygmdHAtPnRpbWVyKTsKQEAgLTEzMTIwLDEwICsxMzY0MywxMyBAQAogCiAJZXJyID0gdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwogCWlmIChlcnIpIHsKKwkJaW50IGVycjI7CisKIAkJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19JTklUX0NPTVBMRVRFOwotCQlpZiAodGczX3Jlc3RhcnRfaHcodHAsIDEpKQorCQllcnIyID0gdGczX3Jlc3RhcnRfaHcodHAsIDEpOworCQlpZiAoZXJyMikKIAkJCWdvdG8gb3V0OwogCiAJCXRwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHRwLT50aW1lcl9vZmZzZXQ7CkBAIC0xMzEzNCw2ICsxMzY2MCw5IEBACiAKIG91dDoKIAkJdGczX2Z1bGxfdW5sb2NrKHRwKTsKKworCQlpZiAoIWVycjIpCisJCQl0ZzNfcGh5X3N0YXJ0KHRwKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTMxNzEsNiArMTM3MDAsOSBAQAogb3V0OgogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKKwlpZiAoIWVycikKKwkJdGczX3BoeV9zdGFydCh0cCk7CisKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IDA0MDRmOTMuLmRmMDc4NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0xMjgsNiArMTI4LDcgQEAKICNkZWZpbmUgICBBU0lDX1JFVl9VU0VfUFJPRF9JRF9SRUcJIDB4MGYKICNkZWZpbmUgICBBU0lDX1JFVl81Nzg0CQkJIDB4NTc4NAogI2RlZmluZSAgIEFTSUNfUkVWXzU3NjEJCQkgMHg1NzYxCisjZGVmaW5lICAgQVNJQ19SRVZfNTc4NQkJCSAweDU3ODUKICNkZWZpbmUgIEdFVF9DSElQX1JFVihDSElQX1JFVl9JRCkJKChDSElQX1JFVl9JRCkgPj4gOCkKICNkZWZpbmUgICBDSElQUkVWXzU3MDBfQVgJCSAweDcwCiAjZGVmaW5lICAgQ0hJUFJFVl81NzAwX0JYCQkgMHg3MQpAQCAtNTI4LDcgKzUyOSwyMyBAQAogI2RlZmluZSBNQUNfU0VSREVTX0NGRwkJCTB4MDAwMDA1OTAKICNkZWZpbmUgIE1BQ19TRVJERVNfQ0ZHX0VER0VfU0VMRUNUCSAweDAwMDAxMDAwCiAjZGVmaW5lIE1BQ19TRVJERVNfU1RBVAkJCTB4MDAwMDA1OTQKLS8qIDB4NTk4IC0tPiAweDViMCB1bnVzZWQgKi8KKy8qIDB4NTk4IC0tPiAweDVhMCB1bnVzZWQgKi8KKyNkZWZpbmUgTUFDX1BIWUNGRzEJCQkweDAwMDAwNWEwCisjZGVmaW5lICBNQUNfUEhZQ0ZHMV9SR01JSV9JTlQJCSAweDAwMDAwMDAxCisjZGVmaW5lICBNQUNfUEhZQ0ZHMV9SR01JSV9FWFRfUlhfREVDCSAweDAyMDAwMDAwCisjZGVmaW5lICBNQUNfUEhZQ0ZHMV9SR01JSV9TTkRfU1RBVF9FTgkgMHgwNDAwMDAwMAorI2RlZmluZSAgTUFDX1BIWUNGRzFfVFhDX0RSVgkJIDB4MjAwMDAwMDAKKyNkZWZpbmUgTUFDX1BIWUNGRzIJCQkweDAwMDAwNWE0CisjZGVmaW5lICBNQUNfUEhZQ0ZHMl9JTkJBTkRfRU5BQkxFCSAweDAwMDAwMDAxCisjZGVmaW5lIE1BQ19FWFRfUkdNSUlfTU9ERQkJMHgwMDAwMDVhOAorI2RlZmluZSAgTUFDX1JHTUlJX01PREVfVFhfRU5BQkxFCSAweDAwMDAwMDAxCisjZGVmaW5lICBNQUNfUkdNSUlfTU9ERV9UWF9MT1dQV1IJIDB4MDAwMDAwMDIKKyNkZWZpbmUgIE1BQ19SR01JSV9NT0RFX1RYX1JFU0VUCSAweDAwMDAwMDA0CisjZGVmaW5lICBNQUNfUkdNSUlfTU9ERV9SWF9JTlRfQgkgMHgwMDAwMDEwMAorI2RlZmluZSAgTUFDX1JHTUlJX01PREVfUlhfUVVBTElUWQkgMHgwMDAwMDIwMAorI2RlZmluZSAgTUFDX1JHTUlJX01PREVfUlhfQUNUSVZJVFkJIDB4MDAwMDA0MDAKKyNkZWZpbmUgIE1BQ19SR01JSV9NT0RFX1JYX0VOR19ERVQJIDB4MDAwMDA4MDAKKy8qIDB4NWFjIC0tPiAweDViMCB1bnVzZWQgKi8KICNkZWZpbmUgU0VSREVTX1JYX0NUUkwJCQkweDAwMDAwNWIwCS8qIDU3ODAvNTcxNCBvbmx5ICovCiAjZGVmaW5lICBTRVJERVNfUlhfU0lHX0RFVEVDVAkJIDB4MDAwMDA0MDAKICNkZWZpbmUgU0dfRElHX0NUUkwJCQkweDAwMDAwNWIwCkBAIC0xMTA5LDYgKzExMjYsNyBAQAogI2RlZmluZSAgV0RNQUNfTU9ERV9GSUZPT1JFQURfRU5BQgkgMHgwMDAwMDEwMAogI2RlZmluZSAgV0RNQUNfTU9ERV9MTkdSRUFEX0VOQUIJIDB4MDAwMDAyMDAKICNkZWZpbmUgIFdETUFDX01PREVfUlhfQUNDRUwJIAkgMHgwMDAwMDQwMAorI2RlZmluZSAgV0RNQUNfTU9ERV9TVEFUVVNfVEFHX0ZJWAkgMHgyMDAwMDAwMAogI2RlZmluZSBXRE1BQ19TVEFUVVMJCQkweDAwMDA0YzA0CiAjZGVmaW5lICBXRE1BQ19TVEFUVVNfVEdUQUJPUlQJCSAweDAwMDAwMDA0CiAjZGVmaW5lICBXRE1BQ19TVEFUVVNfTVNUQUJPUlQJCSAweDAwMDAwMDA4CkBAIC0xNzEzLDYgKzE3MzEsMTIgQEAKICNkZWZpbmUgTklDX1NSQU1fREFUQV9DRkdfMwkJMHgwMDAwMGQzYwogI2RlZmluZSAgTklDX1NSQU1fQVNQTV9ERUJPVU5DRQkJIDB4MDAwMDAwMDIKIAorI2RlZmluZSBOSUNfU1JBTV9EQVRBX0NGR180CQkweDAwMDAwZDYwCisjZGVmaW5lICBOSUNfU1JBTV9HTUlJX01PREUJCSAweDAwMDAwMDAyCisjZGVmaW5lICBOSUNfU1JBTV9SR01JSV9TVERfSUJORF9ESVNBQkxFIDB4MDAwMDAwMDQKKyNkZWZpbmUgIE5JQ19TUkFNX1JHTUlJX0VYVF9JQk5EX1JYX0VOCSAweDAwMDAwMDA4CisjZGVmaW5lICBOSUNfU1JBTV9SR01JSV9FWFRfSUJORF9UWF9FTgkgMHgwMDAwMDAxMAorCiAjZGVmaW5lIE5JQ19TUkFNX1JYX01JTklfQlVGRkVSX0RFU0MJMHgwMDAwMTAwMAogCiAjZGVmaW5lIE5JQ19TUkFNX0RNQV9ERVNDX1BPT0xfQkFTRQkweDAwMDAyMDAwCkBAIC0yMjA0LDYgKzIyMjgsNyBAQAogCXUxNgkJCQlvcmlnX3NwZWVkOwogCXU4CQkJCW9yaWdfZHVwbGV4OwogCXU4CQkJCW9yaWdfYXV0b25lZzsKKwl1MzIJCQkJb3JpZ19hZHZlcnRpc2luZzsKIH07CiAKIHN0cnVjdCB0ZzNfYnVmbWdyX2NvbmZpZyB7CkBAIC0yNDc5LDYgKzI1MDQsMTMgQEAKICNkZWZpbmUgVEczX0ZMRzNfRU5BQkxFX0FQRQkJMHgwMDAwMDAwMgogI2RlZmluZSBURzNfRkxHM181NzYxXzU3ODRfQVhfRklYRVMJMHgwMDAwMDAwNAogI2RlZmluZSBURzNfRkxHM181NzAxX0RNQV9CVUcJCTB4MDAwMDAwMDgKKyNkZWZpbmUgVEczX0ZMRzNfVVNFX1BIWUxJQgkJMHgwMDAwMDAxMAorI2RlZmluZSBURzNfRkxHM19NRElPQlVTX0lOSVRFRAkJMHgwMDAwMDAyMAorI2RlZmluZSBURzNfRkxHM19NRElPQlVTX1BBVVNFRAkJMHgwMDAwMDA0MAorI2RlZmluZSBURzNfRkxHM19QSFlfQ09OTkVDVEVECQkweDAwMDAwMDgwCisjZGVmaW5lIFRHM19GTEczX1JHTUlJX1NURF9JQk5EX0RJU0FCTEUJMHgwMDAwMDEwMAorI2RlZmluZSBURzNfRkxHM19SR01JSV9FWFRfSUJORF9SWF9FTgkweDAwMDAwMjAwCisjZGVmaW5lIFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1RYX0VOCTB4MDAwMDA0MDAKIAogCXN0cnVjdCB0aW1lcl9saXN0CQl0aW1lcjsKIAl1MTYJCQkJdGltZXJfY291bnRlcjsKQEAgLTI1MTksNiArMjU1MSw5IEBACiAJaW50CQkJCW1zaV9jYXA7CiAJaW50CQkJCXBjaXhfY2FwOwogCisJc3RydWN0IG1paV9idXMJCQltZGlvX2J1czsKKwlpbnQJCQkJbWRpb19pcnFbUEhZX01BWF9BRERSXTsKKwogCS8qIFBIWSBpbmZvICovCiAJdTMyCQkJCXBoeV9pZDsKICNkZWZpbmUgUEhZX0lEX01BU0sJCQkweGZmZmZmZmYwCkBAIC0yNTQ2LDYgKzI1ODEsOSBAQAogI2RlZmluZSBQSFlfUkVWX0JDTTU0MDFfQjIJCTB4MwogI2RlZmluZSBQSFlfUkVWX0JDTTU0MDFfQzAJCTB4NgogI2RlZmluZSBQSFlfUkVWX0JDTTU0MTFfWDAJCTB4MSAvKiBGb3VuZCBvbiBOZXRnZWFyIEdBMzAyVCAqLworI2RlZmluZSBURzNfUEhZX0lEX0JDTTUwNjEwCQkweDE0M2JkNjAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ01BQzEzMQkJMHgxNDNiYzcwCisKIAogCXUzMgkJCQlsZWRfY3RybDsKIAl1MzIJCQkJcGh5X290cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RsYW4uYyBiL2RyaXZlcnMvbmV0L3RsYW4uYwppbmRleCAwMTY2NDA3Li44NTI0NmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvdGxhbi5jCkBAIC0xMyw4ICsxMyw2IEBACiAgKiAgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwogICogIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgotICoqIFRoaXMgZmlsZSBpcyBiZXN0IHZpZXdlZC9lZGl0ZWQgd2l0aCBjb2x1bW5zPj0xMzIuCi0gKgogICoqIFVzZWZ1bCAoaWYgbm90IHJlcXVpcmVkKSByZWFkaW5nOgogICoKICAqCQlUZXhhcyBJbnN0cnVtZW50cywgVGh1bmRlckxBTiBQcm9ncmFtbWVyJ3MgR3VpZGUsCkBAIC0yMTgsOSArMjE2LDcgQEAKIG1vZHVsZV9wYXJhbShiYnVmLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhiYnVmLCAiVGh1bmRlckxBTiB1c2UgYmlnIGJ1ZmZlciAoMC0xKSIpOwogCi1zdGF0aWMJdTgJCSpUTGFuUGFkQnVmZmVyOwotc3RhdGljICBkbWFfYWRkcl90CVRMYW5QYWRCdWZmZXJETUE7Ci1zdGF0aWMJY2hhcgkJVExhblNpZ25hdHVyZVtdID0gIlRMQU4iOworc3RhdGljCWNvbnN0IGNoYXIgVExhblNpZ25hdHVyZVtdID0gIlRMQU4iOwogc3RhdGljICBjb25zdCBjaGFyIHRsYW5fYmFubmVyW10gPSAiVGh1bmRlckxBTiBkcml2ZXIgdjEuMTVcbiI7CiBzdGF0aWMgIGludCB0bGFuX2hhdmVfcGNpOwogc3RhdGljICBpbnQgdGxhbl9oYXZlX2Vpc2E7CkBAIC0yMzgsOSArMjM0LDExIEBACiAJeyAiQ29tcGFxIE5ldGVsbGlnZW50IDEwIFQgUENJIFVUUCIsIFRMQU5fQURBUFRFUl9BQ1RJVklUWV9MRUQsIDB4ODMgfSwKIAl7ICJDb21wYXEgTmV0ZWxsaWdlbnQgMTAvMTAwIFRYIFBDSSBVVFAiLCBUTEFOX0FEQVBURVJfQUNUSVZJVFlfTEVELCAweDgzIH0sCiAJeyAiQ29tcGFxIEludGVncmF0ZWQgTmV0RmxleC0zL1AiLCBUTEFOX0FEQVBURVJfTk9ORSwgMHg4MyB9LAotCXsgIkNvbXBhcSBOZXRGbGV4LTMvUCIsIFRMQU5fQURBUFRFUl9VTk1BTkFHRURfUEhZIHwgVExBTl9BREFQVEVSX0JJVF9SQVRFX1BIWSwgMHg4MyB9LAorCXsgIkNvbXBhcSBOZXRGbGV4LTMvUCIsCisJICBUTEFOX0FEQVBURVJfVU5NQU5BR0VEX1BIWSB8IFRMQU5fQURBUFRFUl9CSVRfUkFURV9QSFksIDB4ODMgfSwKIAl7ICJDb21wYXEgTmV0RmxleC0zL1AiLCBUTEFOX0FEQVBURVJfTk9ORSwgMHg4MyB9LAotCXsgIkNvbXBhcSBOZXRlbGxpZ2VudCBJbnRlZ3JhdGVkIDEwLzEwMCBUWCBVVFAiLCBUTEFOX0FEQVBURVJfQUNUSVZJVFlfTEVELCAweDgzIH0sCisJeyAiQ29tcGFxIE5ldGVsbGlnZW50IEludGVncmF0ZWQgMTAvMTAwIFRYIFVUUCIsCisJICBUTEFOX0FEQVBURVJfQUNUSVZJVFlfTEVELCAweDgzIH0sCiAJeyAiQ29tcGFxIE5ldGVsbGlnZW50IER1YWwgMTAvMTAwIFRYIFBDSSBVVFAiLCBUTEFOX0FEQVBURVJfTk9ORSwgMHg4MyB9LAogCXsgIkNvbXBhcSBOZXRlbGxpZ2VudCAxMC8xMDAgVFggRW1iZWRkZWQgVVRQIiwgVExBTl9BREFQVEVSX05PTkUsIDB4ODMgfSwKIAl7ICJPbGljb20gT0MtMjE4My8yMTg1IiwgVExBTl9BREFQVEVSX1VTRV9JTlRFUk5fMTAsIDB4ODMgfSwKQEAgLTI0OCw4ICsyNDYsOSBAQAogCXsgIk9saWNvbSBPQy0yMzI2IiwgVExBTl9BREFQVEVSX1VTRV9JTlRFUk5fMTAsIDB4RjggfSwKIAl7ICJDb21wYXEgTmV0ZWxsaWdlbnQgMTAvMTAwIFRYIFVUUCIsIFRMQU5fQURBUFRFUl9BQ1RJVklUWV9MRUQsIDB4ODMgfSwKIAl7ICJDb21wYXEgTmV0ZWxsaWdlbnQgMTAgVC8yIFBDSSBVVFAvQ29heCIsIFRMQU5fQURBUFRFUl9OT05FLCAweDgzIH0sCi0JeyAiQ29tcGFxIE5ldEZsZXgtMy9FIiwgVExBTl9BREFQVEVSX0FDVElWSVRZX0xFRCB8IAkvKiBFSVNBIGNhcmQgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICBUTEFOX0FEQVBURVJfVU5NQU5BR0VEX1BIWSB8IFRMQU5fQURBUFRFUl9CSVRfUkFURV9QSFksIDB4ODMgfSwKKwl7ICJDb21wYXEgTmV0RmxleC0zL0UiLAorCSAgVExBTl9BREFQVEVSX0FDVElWSVRZX0xFRCB8IAkvKiBFSVNBIGNhcmQgKi8KKwkgIFRMQU5fQURBUFRFUl9VTk1BTkFHRURfUEhZIHwgVExBTl9BREFQVEVSX0JJVF9SQVRFX1BIWSwgMHg4MyB9LAogCXsgIkNvbXBhcSBOZXRGbGV4LTMvRSIsIFRMQU5fQURBUFRFUl9BQ1RJVklUWV9MRUQsIDB4ODMgfSwgLyogRUlTQSBjYXJkICovCiB9OwogCkBAIC0yOTQsMTIgKzI5MywxMiBAQAogc3RhdGljIHN0cnVjdAluZXRfZGV2aWNlX3N0YXRzICpUTGFuX0dldFN0YXRzKCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkCVRMYW5fU2V0TXVsdGljYXN0TGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50CVRMYW5faW9jdGwoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotc3RhdGljIGludCAgICAgIFRMYW5fcHJvYmUxKCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgbG9uZyBpb2FkZHIsIGludCBpcnEsIGludCByZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOworc3RhdGljIGludCAgICAgIFRMYW5fcHJvYmUxKCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgbG9uZyBpb2FkZHIsCisJCQkgICAgIGludCBpcnEsIGludCByZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwogc3RhdGljIHZvaWQJVExhbl90eF90aW1lb3V0KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkCVRMYW5fdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgaW50IAl0bGFuX2luaXRfb25lKCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CiAKLXN0YXRpYyB1MzIJVExhbl9IYW5kbGVJbnZhbGlkKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MTYgKTsKIHN0YXRpYyB1MzIJVExhbl9IYW5kbGVUeEVPRiggc3RydWN0IG5ldF9kZXZpY2UgKiwgdTE2ICk7CiBzdGF0aWMgdTMyCVRMYW5fSGFuZGxlU3RhdE92ZXJmbG93KCBzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MTYgKTsKIHN0YXRpYyB1MzIJVExhbl9IYW5kbGVSeEVPRiggc3RydWN0IG5ldF9kZXZpY2UgKiwgdTE2ICk7CkBAIC0zNDgsMjkgKzM0NywyNyBAQAogc3RhdGljIGludAlUTGFuX0VlUmVhZEJ5dGUoIHN0cnVjdCBuZXRfZGV2aWNlICosIHU4LCB1OCAqICk7CiAKIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogVExhbl9TdG9yZVNLQiggc3RydWN0IHRsYW5fbGlzdF90YWcgKnRhZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylza2I7Ci0JdGFnLT5idWZmZXJbOV0uYWRkcmVzcyA9ICh1MzIpYWRkcjsKLQlhZGRyID4+PSAzMTsJLyogPj49IDMyIGlzIHVuZGVmaW5lZCBmb3IgMzJiaXQgYXJjaCwgc3R1cGlkIEMgKi8KLQlhZGRyID4+PSAxOwotCXRhZy0+YnVmZmVyWzhdLmFkZHJlc3MgPSAodTMyKWFkZHI7CisJdGFnLT5idWZmZXJbOV0uYWRkcmVzcyA9IGFkZHI7CisJdGFnLT5idWZmZXJbOF0uYWRkcmVzcyA9IHVwcGVyXzMyX2JpdHMoYWRkcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCi1UTGFuX0dldFNLQiggc3RydWN0IHRsYW5fbGlzdF90YWcgKnRhZykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKgorVExhbl9HZXRTS0IoIGNvbnN0IHN0cnVjdCB0bGFuX2xpc3RfdGFnICp0YWcpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gdGFnLT5idWZmZXJbOF0uYWRkcmVzczsKLQlhZGRyIDw8PSAzMTsKLQlhZGRyIDw8PSAxOwotCWFkZHIgfD0gdGFnLT5idWZmZXJbOV0uYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0gdGFnLT5idWZmZXJbOF0uYWRkcmVzczsKKwlhZGRyIHw9ICh0YWctPmJ1ZmZlcls5XS5hZGRyZXNzIDw8IDE2KSA8PCAxNjsKIAlyZXR1cm4gKHN0cnVjdCBza19idWZmICopIGFkZHI7CiB9CiAKIAogc3RhdGljIFRMYW5JbnRWZWN0b3JGdW5jICpUTGFuSW50VmVjdG9yW1RMQU5fSU5UX05VTUJFUl9PRl9JTlRTXSA9IHsKLQlUTGFuX0hhbmRsZUludmFsaWQsCisJTlVMTCwKIAlUTGFuX0hhbmRsZVR4RU9GLAogCVRMYW5fSGFuZGxlU3RhdE92ZXJmbG93LAogCVRMYW5fSGFuZGxlUnhFT0YsCkBAIC00NDQsNyArNDQxLDkgQEAKIAl1bnJlZ2lzdGVyX25ldGRldiggZGV2ICk7CiAKIAlpZiAoIHByaXYtPmRtYVN0b3JhZ2UgKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpRGV2LCBwcml2LT5kbWFTaXplLCBwcml2LT5kbWFTdG9yYWdlLCBwcml2LT5kbWFTdG9yYWdlRE1BICk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpRGV2LAorCQkJCSAgICBwcml2LT5kbWFTaXplLCBwcml2LT5kbWFTdG9yYWdlLAorCQkJCSAgICBwcml2LT5kbWFTdG9yYWdlRE1BICk7CiAJfQogCiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtNDY5LDE2ICs0NjgsNiBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB0bGFuX2Jhbm5lcik7CiAKLQlUTGFuUGFkQnVmZmVyID0gKHU4ICopIHBjaV9hbGxvY19jb25zaXN0ZW50KE5VTEwsIFRMQU5fTUlOX0ZSQU1FX1NJWkUsICZUTGFuUGFkQnVmZmVyRE1BKTsKLQotCWlmIChUTGFuUGFkQnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJUTEFOOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwYWQgYnVmZmVyLlxuIik7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0OwotCX0KLQotCW1lbXNldChUTGFuUGFkQnVmZmVyLCAwLCBUTEFOX01JTl9GUkFNRV9TSVpFKTsKLQogCVRMQU5fREJHKFRMQU5fREVCVUdfUFJPQkUsICJTdGFydGluZyBQQ0kgUHJvYmUuLi4uXG4iKTsKIAogCS8qIFVzZSBuZXcgc3R5bGUgUENJIHByb2JpbmcuIE5vdyB0aGUga2VybmVsIHdpbGwKQEAgLTUwNiw4ICs0OTUsNiBAQAogZXJyX291dF9wY2lfdW5yZWc6CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0bGFuX2RyaXZlcik7CiBlcnJfb3V0X3BjaV9mcmVlOgotCXBjaV9mcmVlX2NvbnNpc3RlbnQoTlVMTCwgVExBTl9NSU5fRlJBTUVfU0laRSwgVExhblBhZEJ1ZmZlciwgVExhblBhZEJ1ZmZlckRNQSk7Ci1lcnJfb3V0OgogCXJldHVybiByYzsKIH0KIApAQCAtNTM5LDcgKzUyNiw4IEBACiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBUTGFuX3Byb2JlMShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQlsb25nIGlvYWRkciwgaW50IGlycSwgaW50IHJldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCApCisJCQkJIGxvbmcgaW9hZGRyLCBpbnQgaXJxLCBpbnQgcmV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50ICkKIHsKIAogCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2OwpAQCAtNjI1LDggKzYxMywxMCBAQAogCS8qIEtlcm5lbCBwYXJhbWV0ZXJzICovCiAJaWYgKGRldi0+bWVtX3N0YXJ0KSB7CiAJCXByaXYtPmF1aSAgICA9IGRldi0+bWVtX3N0YXJ0ICYgMHgwMTsKLQkJcHJpdi0+ZHVwbGV4ID0gKChkZXYtPm1lbV9zdGFydCAmIDB4MDYpID09IDB4MDYpID8gMCA6IChkZXYtPm1lbV9zdGFydCAmIDB4MDYpID4+IDE7Ci0JCXByaXYtPnNwZWVkICA9ICgoZGV2LT5tZW1fc3RhcnQgJiAweDE4KSA9PSAweDE4KSA/IDAgOiAoZGV2LT5tZW1fc3RhcnQgJiAweDE4KSA+PiAzOworCQlwcml2LT5kdXBsZXggPSAoKGRldi0+bWVtX3N0YXJ0ICYgMHgwNikgPT0gMHgwNikgPyAwCisJCQk6IChkZXYtPm1lbV9zdGFydCAmIDB4MDYpID4+IDE7CisJCXByaXYtPnNwZWVkICA9ICgoZGV2LT5tZW1fc3RhcnQgJiAweDE4KSA9PSAweDE4KSA/IDAKKwkJCTogKGRldi0+bWVtX3N0YXJ0ICYgMHgxOCkgPj4gMzsKIAogCQlpZiAocHJpdi0+c3BlZWQgPT0gMHgxKSB7CiAJCQlwcml2LT5zcGVlZCA9IFRMQU5fU1BFRURfMTA7CkBAIC03MDYsNyArNjk2LDggQEAKIAkJZGV2ID0gVExhbl9FaXNhX0RldmljZXM7CiAJCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCQlpZiAocHJpdi0+ZG1hU3RvcmFnZSkgewotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lEZXYsIHByaXYtPmRtYVNpemUsIHByaXYtPmRtYVN0b3JhZ2UsIHByaXYtPmRtYVN0b3JhZ2VETUEgKTsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpRGV2LCBwcml2LT5kbWFTaXplLAorCQkJCQkgICAgcHJpdi0+ZG1hU3RvcmFnZSwgcHJpdi0+ZG1hU3RvcmFnZURNQSApOwogCQl9CiAJCXJlbGVhc2VfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgMHgxMCk7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KCBkZXYgKTsKQEAgLTcyNCw4ICs3MTUsNiBAQAogCWlmICh0bGFuX2hhdmVfZWlzYSkKIAkJVExhbl9FaXNhX0NsZWFudXAoKTsKIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQoTlVMTCwgVExBTl9NSU5fRlJBTUVfU0laRSwgVExhblBhZEJ1ZmZlciwgVExhblBhZEJ1ZmZlckRNQSk7Ci0KIH0KIAogCkBAIC03NjMsOCArNzUyLDEwIEBACiAJLyogTG9vcCB0aHJvdWdoIGFsbCBzbG90cyBvZiB0aGUgRUlTQSBidXMgKi8KIAlmb3IgKGlvYWRkciA9IDB4MTAwMDsgaW9hZGRyIDwgMHg5MDAwOyBpb2FkZHIgKz0gMHgxMDAwKSB7CiAKLQlUTEFOX0RCRyhUTEFOX0RFQlVHX1BST0JFLCJFSVNBX0lEIDB4JTR4OiAweCU0eFxuIiwgKGludCkgaW9hZGRyICsgMHhDODAsIGludyhpb2FkZHIgKyBFSVNBX0lEKSk7Ci0JVExBTl9EQkcoVExBTl9ERUJVR19QUk9CRSwiRUlTQV9JRCAweCU0eDogMHglNHhcbiIsIChpbnQpIGlvYWRkciArIDB4QzgyLCBpbncoaW9hZGRyICsgRUlTQV9JRDIpKTsKKwlUTEFOX0RCRyhUTEFOX0RFQlVHX1BST0JFLCJFSVNBX0lEIDB4JTR4OiAweCU0eFxuIiwKKwkJIChpbnQpIGlvYWRkciArIDB4QzgwLCBpbncoaW9hZGRyICsgRUlTQV9JRCkpOworCVRMQU5fREJHKFRMQU5fREVCVUdfUFJPQkUsIkVJU0FfSUQgMHglNHg6IDB4JTR4XG4iLAorCQkgKGludCkgaW9hZGRyICsgMHhDODIsIGludyhpb2FkZHIgKyBFSVNBX0lEMikpOwogCiAKIAkJVExBTl9EQkcoVExBTl9ERUJVR19QUk9CRSwgIlByb2JpbmcgZm9yIEVJU0EgYWRhcHRlciBhdCBJTzogMHglNHggOiAiLApAQCAtODc0LDcgKzg2NSw4IEBACiAJCWRtYV9zaXplID0gKCBUTEFOX05VTV9SWF9MSVNUUyArIFRMQU5fTlVNX1RYX0xJU1RTICkKIAkgICAgICAgICAgICogKCBzaXplb2YoVExhbkxpc3QpICk7CiAJfQotCXByaXYtPmRtYVN0b3JhZ2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lEZXYsIGRtYV9zaXplLCAmcHJpdi0+ZG1hU3RvcmFnZURNQSk7CisJcHJpdi0+ZG1hU3RvcmFnZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBjaURldiwKKwkJCQkJCWRtYV9zaXplLCAmcHJpdi0+ZG1hU3RvcmFnZURNQSk7CiAJcHJpdi0+ZG1hU2l6ZSA9IGRtYV9zaXplOwogCiAJaWYgKCBwcml2LT5kbWFTdG9yYWdlID09IE5VTEwgKSB7CkBAIC04ODMsMTYgKzg3NSwxOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KCBwcml2LT5kbWFTdG9yYWdlLCAwLCBkbWFfc2l6ZSApOwotCXByaXYtPnJ4TGlzdCA9IChUTGFuTGlzdCAqKQotCQkgICAgICAgKCAoICggKHUzMikgcHJpdi0+ZG1hU3RvcmFnZSApICsgNyApICYgMHhGRkZGRkZGOCApOwotCXByaXYtPnJ4TGlzdERNQSA9ICggKCAoICh1MzIpIHByaXYtPmRtYVN0b3JhZ2VETUEgKSArIDcgKSAmIDB4RkZGRkZGRjggKTsKKwlwcml2LT5yeExpc3QgPSAoVExhbkxpc3QgKikgQUxJR04oKHVuc2lnbmVkIGxvbmcpcHJpdi0+ZG1hU3RvcmFnZSwgOCk7CisJcHJpdi0+cnhMaXN0RE1BID0gQUxJR04ocHJpdi0+ZG1hU3RvcmFnZURNQSwgOCk7CiAJcHJpdi0+dHhMaXN0ID0gcHJpdi0+cnhMaXN0ICsgVExBTl9OVU1fUlhfTElTVFM7CiAJcHJpdi0+dHhMaXN0RE1BID0gcHJpdi0+cnhMaXN0RE1BICsgc2l6ZW9mKFRMYW5MaXN0KSAqIFRMQU5fTlVNX1JYX0xJU1RTOworCiAJaWYgKCBiYnVmICkgewogCQlwcml2LT5yeEJ1ZmZlciA9ICh1OCAqKSAoIHByaXYtPnR4TGlzdCArIFRMQU5fTlVNX1RYX0xJU1RTICk7Ci0JCXByaXYtPnJ4QnVmZmVyRE1BID1wcml2LT50eExpc3RETUEgKyBzaXplb2YoVExhbkxpc3QpICogVExBTl9OVU1fVFhfTElTVFM7Ci0JCXByaXYtPnR4QnVmZmVyID0gcHJpdi0+cnhCdWZmZXIgKyAoIFRMQU5fTlVNX1JYX0xJU1RTICogVExBTl9NQVhfRlJBTUVfU0laRSApOwotCQlwcml2LT50eEJ1ZmZlckRNQSA9IHByaXYtPnJ4QnVmZmVyRE1BICsgKCBUTEFOX05VTV9SWF9MSVNUUyAqIFRMQU5fTUFYX0ZSQU1FX1NJWkUgKTsKKwkJcHJpdi0+cnhCdWZmZXJETUEgPXByaXYtPnR4TGlzdERNQQorCQkJKyBzaXplb2YoVExhbkxpc3QpICogVExBTl9OVU1fVFhfTElTVFM7CisJCXByaXYtPnR4QnVmZmVyID0gcHJpdi0+cnhCdWZmZXIKKwkJCSsgKCBUTEFOX05VTV9SWF9MSVNUUyAqIFRMQU5fTUFYX0ZSQU1FX1NJWkUgKTsKKwkJcHJpdi0+dHhCdWZmZXJETUEgPSBwcml2LT5yeEJ1ZmZlckRNQQorCQkJKyAoIFRMQU5fTlVNX1JYX0xJU1RTICogVExBTl9NQVhfRlJBTUVfU0laRSApOwogCX0KIAogCWVyciA9IDA7CkBAIC05NTIsMTAgKzk0NywxMiBAQAogCWludAkJZXJyOwogCiAJcHJpdi0+dGxhblJldiA9IFRMYW5fRGlvUmVhZDgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX0RFRl9SRVZJU0lPTiApOwotCWVyciA9IHJlcXVlc3RfaXJxKCBkZXYtPmlycSwgVExhbl9IYW5kbGVJbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBUTGFuU2lnbmF0dXJlLCBkZXYgKTsKKwllcnIgPSByZXF1ZXN0X2lycSggZGV2LT5pcnEsIFRMYW5fSGFuZGxlSW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCSAgIGRldi0+bmFtZSwgZGV2ICk7CiAKIAlpZiAoIGVyciApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJUTEFOOiAgQ2Fubm90IG9wZW4gJXMgYmVjYXVzZSBJUlEgJWQgaXMgYWxyZWFkeSBpbiB1c2UuXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxICk7CisJCXByX2VycigiVExBTjogIENhbm5vdCBvcGVuICVzIGJlY2F1c2UgSVJRICVkIGlzIGFscmVhZHkgaW4gdXNlLlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEgKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTk2OSw3ICs5NjYsOCBAQAogCVRMYW5fUmVhZEFuZENsZWFyU3RhdHMoIGRldiwgVExBTl9JR05PUkUgKTsKIAlUTGFuX1Jlc2V0QWRhcHRlciggZGV2ICk7CiAKLQlUTEFOX0RCRyggVExBTl9ERUJVR19HTlJMLCAiJXM6IE9wZW5lZC4gIFRMQU4gQ2hpcCBSZXY6ICV4XG4iLCBkZXYtPm5hbWUsIHByaXYtPnRsYW5SZXYgKTsKKwlUTEFOX0RCRyggVExBTl9ERUJVR19HTlJMLCAiJXM6IE9wZW5lZC4gIFRMQU4gQ2hpcCBSZXY6ICV4XG4iLAorCQkgIGRldi0+bmFtZSwgcHJpdi0+dGxhblJldiApOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEwMDcsMTQgKzEwMDUsMTYgQEAKIAogCiAJY2FzZSBTSU9DR01JSVJFRzoJCS8qIFJlYWQgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQkJCVRMYW5fTWlpUmVhZFJlZyhkZXYsIGRhdGEtPnBoeV9pZCAmIDB4MWYsIGRhdGEtPnJlZ19udW0gJiAweDFmLCAmZGF0YS0+dmFsX291dCk7CisJCQlUTGFuX01paVJlYWRSZWcoZGV2LCBkYXRhLT5waHlfaWQgJiAweDFmLAorCQkJCQlkYXRhLT5yZWdfbnVtICYgMHgxZiwgJmRhdGEtPnZhbF9vdXQpOwogCQkJcmV0dXJuIDA7CiAKIAogCWNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLiAqLwogCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJCXJldHVybiAtRVBFUk07Ci0JCQlUTGFuX01paVdyaXRlUmVnKGRldiwgZGF0YS0+cGh5X2lkICYgMHgxZiwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CisJCQlUTGFuX01paVdyaXRlUmVnKGRldiwgZGF0YS0+cGh5X2lkICYgMHgxZiwKKwkJCQkJIGRhdGEtPnJlZ19udW0gJiAweDFmLCBkYXRhLT52YWxfaW4pOwogCQkJcmV0dXJuIDA7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0xMDk2LDIwICsxMDk2LDI1IEBACiAJVExhbkxpc3QJKnRhaWxfbGlzdDsKIAlkbWFfYWRkcl90CXRhaWxfbGlzdF9waHlzOwogCXU4CQkqdGFpbF9idWZmZXI7Ci0JaW50CQlwYWQ7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAogCWlmICggISBwcml2LT5waHlPbmxpbmUgKSB7Ci0JCVRMQU5fREJHKCBUTEFOX0RFQlVHX1RYLCAiVFJBTlNNSVQ6ICAlcyBQSFkgaXMgbm90IHJlYWR5XG4iLCBkZXYtPm5hbWUgKTsKKwkJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsICJUUkFOU01JVDogICVzIFBIWSBpcyBub3QgcmVhZHlcbiIsCisJCQkgIGRldi0+bmFtZSApOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoc2tiX3BhZHRvKHNrYiwgVExBTl9NSU5fRlJBTUVfU0laRSkpCisJCXJldHVybiAwOworCiAJdGFpbF9saXN0ID0gcHJpdi0+dHhMaXN0ICsgcHJpdi0+dHhUYWlsOwogCXRhaWxfbGlzdF9waHlzID0gcHJpdi0+dHhMaXN0RE1BICsgc2l6ZW9mKFRMYW5MaXN0KSAqIHByaXYtPnR4VGFpbDsKIAogCWlmICggdGFpbF9saXN0LT5jU3RhdCAhPSBUTEFOX0NTVEFUX1VOVVNFRCApIHsKLQkJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsICJUUkFOU01JVDogICVzIGlzIGJ1c3kgKEhlYWQ9JWQgVGFpbD0lZClcbiIsIGRldi0+bmFtZSwgcHJpdi0+dHhIZWFkLCBwcml2LT50eFRhaWwgKTsKKwkJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsCisJCQkgICJUUkFOU01JVDogICVzIGlzIGJ1c3kgKEhlYWQ9JWQgVGFpbD0lZClcbiIsCisJCQkgIGRldi0+bmFtZSwgcHJpdi0+dHhIZWFkLCBwcml2LT50eFRhaWwgKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlwcml2LT50eEJ1c3lDb3VudCsrOwogCQlyZXR1cm4gMTsKQEAgLTExMjEsMzcgKzExMjYsMzQgQEAKIAkJdGFpbF9idWZmZXIgPSBwcml2LT50eEJ1ZmZlciArICggcHJpdi0+dHhUYWlsICogVExBTl9NQVhfRlJBTUVfU0laRSApOwogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgdGFpbF9idWZmZXIsIHNrYi0+bGVuKTsKIAl9IGVsc2UgewotCQl0YWlsX2xpc3QtPmJ1ZmZlclswXS5hZGRyZXNzID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpRGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJdGFpbF9saXN0LT5idWZmZXJbMF0uYWRkcmVzcyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaURldiwKKwkJCQkJCQkgICAgICBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCQkJCSAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlUTGFuX1N0b3JlU0tCKHRhaWxfbGlzdCwgc2tiKTsKIAl9CiAKLQlwYWQgPSBUTEFOX01JTl9GUkFNRV9TSVpFIC0gc2tiLT5sZW47Ci0KLQlpZiAoIHBhZCA+IDAgKSB7Ci0JCXRhaWxfbGlzdC0+ZnJhbWVTaXplID0gKHUxNikgc2tiLT5sZW4gKyBwYWQ7Ci0JCXRhaWxfbGlzdC0+YnVmZmVyWzBdLmNvdW50ID0gKHUzMikgc2tiLT5sZW47Ci0JCXRhaWxfbGlzdC0+YnVmZmVyWzFdLmNvdW50ID0gVExBTl9MQVNUX0JVRkZFUiB8ICh1MzIpIHBhZDsKLQkJdGFpbF9saXN0LT5idWZmZXJbMV0uYWRkcmVzcyA9IFRMYW5QYWRCdWZmZXJETUE7Ci0JfSBlbHNlIHsKLQkJdGFpbF9saXN0LT5mcmFtZVNpemUgPSAodTE2KSBza2ItPmxlbjsKLQkJdGFpbF9saXN0LT5idWZmZXJbMF0uY291bnQgPSBUTEFOX0xBU1RfQlVGRkVSIHwgKHUzMikgc2tiLT5sZW47Ci0JCXRhaWxfbGlzdC0+YnVmZmVyWzFdLmNvdW50ID0gMDsKLQkJdGFpbF9saXN0LT5idWZmZXJbMV0uYWRkcmVzcyA9IDA7Ci0JfQorCXRhaWxfbGlzdC0+ZnJhbWVTaXplID0gKHUxNikgc2tiLT5sZW47CisJdGFpbF9saXN0LT5idWZmZXJbMF0uY291bnQgPSBUTEFOX0xBU1RfQlVGRkVSIHwgKHUzMikgc2tiLT5sZW47CisJdGFpbF9saXN0LT5idWZmZXJbMV0uY291bnQgPSAwOworCXRhaWxfbGlzdC0+YnVmZmVyWzFdLmFkZHJlc3MgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl0YWlsX2xpc3QtPmNTdGF0ID0gVExBTl9DU1RBVF9SRUFEWTsKIAlpZiAoICEgcHJpdi0+dHhJblByb2dyZXNzICkgewogCQlwcml2LT50eEluUHJvZ3Jlc3MgPSAxOwotCQlUTEFOX0RCRyggVExBTl9ERUJVR19UWCwgIlRSQU5TTUlUOiAgU3RhcnRpbmcgVFggb24gYnVmZmVyICVkXG4iLCBwcml2LT50eFRhaWwgKTsKKwkJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsCisJCQkgICJUUkFOU01JVDogIFN0YXJ0aW5nIFRYIG9uIGJ1ZmZlciAlZFxuIiwgcHJpdi0+dHhUYWlsICk7CiAJCW91dGwoIHRhaWxfbGlzdF9waHlzLCBkZXYtPmJhc2VfYWRkciArIFRMQU5fQ0hfUEFSTSApOwogCQlvdXRsKCBUTEFOX0hDX0dPLCBkZXYtPmJhc2VfYWRkciArIFRMQU5fSE9TVF9DTUQgKTsKIAl9IGVsc2UgewotCQlUTEFOX0RCRyggVExBTl9ERUJVR19UWCwgIlRSQU5TTUlUOiAgQWRkaW5nIGJ1ZmZlciAlZCB0byBUWCBjaGFubmVsXG4iLCBwcml2LT50eFRhaWwgKTsKKwkJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsICJUUkFOU01JVDogIEFkZGluZyBidWZmZXIgJWQgdG8gVFggY2hhbm5lbFxuIiwKKwkJCSAgcHJpdi0+dHhUYWlsICk7CiAJCWlmICggcHJpdi0+dHhUYWlsID09IDAgKSB7Ci0JCQkoIHByaXYtPnR4TGlzdCArICggVExBTl9OVU1fVFhfTElTVFMgLSAxICkgKS0+Zm9yd2FyZCA9IHRhaWxfbGlzdF9waHlzOworCQkJKCBwcml2LT50eExpc3QgKyAoIFRMQU5fTlVNX1RYX0xJU1RTIC0gMSApICktPmZvcndhcmQKKwkJCQk9IHRhaWxfbGlzdF9waHlzOwogCQl9IGVsc2UgewotCQkJKCBwcml2LT50eExpc3QgKyAoIHByaXYtPnR4VGFpbCAtIDEgKSApLT5mb3J3YXJkID0gdGFpbF9saXN0X3BoeXM7CisJCQkoIHByaXYtPnR4TGlzdCArICggcHJpdi0+dHhUYWlsIC0gMSApICktPmZvcndhcmQKKwkJCQk9IHRhaWxfbGlzdF9waHlzOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTExOTEsMzMgKzExOTMsMzEgQEAKIAogc3RhdGljIGlycXJldHVybl90IFRMYW5fSGFuZGxlSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQl1MzIJCWFjazsKLQlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotCXUzMgkJaG9zdF9jbWQ7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldiA9IGRldl9pZDsKKwlUTGFuUHJpdmF0ZUluZm8gKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUxNgkJaG9zdF9pbnQ7Ci0JaW50CQl0eXBlOwotCVRMYW5Qcml2YXRlSW5mbyAqcHJpdjsKLQotCWRldiA9IGRldl9pZDsKLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYJCXR5cGU7CiAKIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCiAJaG9zdF9pbnQgPSBpbncoIGRldi0+YmFzZV9hZGRyICsgVExBTl9IT1NUX0lOVCApOwotCW91dHcoIGhvc3RfaW50LCBkZXYtPmJhc2VfYWRkciArIFRMQU5fSE9TVF9JTlQgKTsKLQogCXR5cGUgPSAoIGhvc3RfaW50ICYgVExBTl9ISV9JVF9NQVNLICkgPj4gMjsKKwlpZiAoIHR5cGUgKSB7CisJCXUzMglhY2s7CisJCXUzMglob3N0X2NtZDsKIAotCWFjayA9IFRMYW5JbnRWZWN0b3JbdHlwZV0oIGRldiwgaG9zdF9pbnQgKTsKKwkJb3V0dyggaG9zdF9pbnQsIGRldi0+YmFzZV9hZGRyICsgVExBTl9IT1NUX0lOVCApOworCQlhY2sgPSBUTGFuSW50VmVjdG9yW3R5cGVdKCBkZXYsIGhvc3RfaW50ICk7CiAKLQlpZiAoIGFjayApIHsKLQkJaG9zdF9jbWQgPSBUTEFOX0hDX0FDSyB8IGFjayB8ICggdHlwZSA8PCAxOCApOwotCQlvdXRsKCBob3N0X2NtZCwgZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0hPU1RfQ01EICk7CisJCWlmICggYWNrICkgeworCQkJaG9zdF9jbWQgPSBUTEFOX0hDX0FDSyB8IGFjayB8ICggdHlwZSA8PCAxOCApOworCQkJb3V0bCggaG9zdF9jbWQsIGRldi0+YmFzZV9hZGRyICsgVExBTl9IT1NUX0NNRCApOworCQl9CiAJfQogCiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBJUlFfUkVUVkFMKHR5cGUpOwogfSAvKiBUTGFuX0hhbmRsZUludGVycnVwdHMgKi8KIAogCkBAIC0xMjg2LDggKzEyODYsMTAgQEAKIAkvKiBTaG91bGQgb25seSByZWFkIHN0YXRzIGlmIG9wZW4gPyAqLwogCVRMYW5fUmVhZEFuZENsZWFyU3RhdHMoIGRldiwgVExBTl9SRUNPUkQgKTsKIAotCVRMQU5fREJHKCBUTEFOX0RFQlVHX1JYLCAiUkVDRUlWRTogICVzIEVPQyBjb3VudCA9ICVkXG4iLCBkZXYtPm5hbWUsIHByaXYtPnJ4RW9jQ291bnQgKTsKLQlUTEFOX0RCRyggVExBTl9ERUJVR19UWCwgIlRSQU5TTUlUOiAgJXMgQnVzeSBjb3VudCA9ICVkXG4iLCBkZXYtPm5hbWUsIHByaXYtPnR4QnVzeUNvdW50ICk7CisJVExBTl9EQkcoIFRMQU5fREVCVUdfUlgsICJSRUNFSVZFOiAgJXMgRU9DIGNvdW50ID0gJWRcbiIsIGRldi0+bmFtZSwKKwkJICBwcml2LT5yeEVvY0NvdW50ICk7CisJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsICJUUkFOU01JVDogICVzIEJ1c3kgY291bnQgPSAlZFxuIiwgZGV2LT5uYW1lLAorCQkgIHByaXYtPnR4QnVzeUNvdW50ICk7CiAJaWYgKCBkZWJ1ZyAmIFRMQU5fREVCVUdfR05STCApIHsKIAkJVExhbl9QcmludERpbyggZGV2LT5iYXNlX2FkZHIgKTsKIAkJVExhbl9QaHlQcmludCggZGV2ICk7CkBAIC0xMjk5LDcgKzEzMDEsNyBAQAogCQkJVExhbl9QcmludExpc3QoIHByaXYtPnR4TGlzdCArIGksICJUWCIsIGkgKTsKIAl9CiAKLQlyZXR1cm4gKCAmKCAoVExhblByaXZhdGVJbmZvICopIG5ldGRldl9wcml2KGRldikgKS0+c3RhdHMgKTsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiAKIH0gLyogVExhbl9HZXRTdGF0cyAqLwogCkBAIC0xMzM3LDEwICsxMzM5LDEyIEBACiAKIAlpZiAoIGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyApIHsKIAkJdG1wID0gVExhbl9EaW9SZWFkOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fTkVUX0NNRCApOwotCQlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fTkVUX0NNRCwgdG1wIHwgVExBTl9ORVRfQ01EX0NBRiApOworCQlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsCisJCQkJVExBTl9ORVRfQ01ELCB0bXAgfCBUTEFOX05FVF9DTURfQ0FGICk7CiAJfSBlbHNlIHsKIAkJdG1wID0gVExhbl9EaW9SZWFkOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fTkVUX0NNRCApOwotCQlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fTkVUX0NNRCwgdG1wICYgflRMQU5fTkVUX0NNRF9DQUYgKTsKKwkJVExhbl9EaW9Xcml0ZTgoIGRldi0+YmFzZV9hZGRyLAorCQkJCVRMQU5fTkVUX0NNRCwgdG1wICYgflRMQU5fTkVUX0NNRF9DQUYgKTsKIAkJaWYgKCBkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJICkgewogCQkJZm9yICggaSA9IDA7IGkgPCAzOyBpKysgKQogCQkJCVRMYW5fU2V0TWFjKCBkZXYsIGkgKyAxLCBOVUxMICk7CkBAIC0xMzQ5LDcgKzEzNTMsOCBAQAogCQl9IGVsc2UgewogCQkJZm9yICggaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKysgKSB7CiAJCQkJaWYgKCBpIDwgMyApIHsKLQkJCQkJVExhbl9TZXRNYWMoIGRldiwgaSArIDEsIChjaGFyICopICZkbWktPmRtaV9hZGRyICk7CisJCQkJCVRMYW5fU2V0TWFjKCBkZXYsIGkgKyAxLAorCQkJCQkJICAgICAoY2hhciAqKSAmZG1pLT5kbWlfYWRkciApOwogCQkJCX0gZWxzZSB7CiAJCQkJCW9mZnNldCA9IFRMYW5fSGFzaEZ1bmMoICh1OCAqKSAmZG1pLT5kbWlfYWRkciApOwogCQkJCQlpZiAoIG9mZnNldCA8IDMyICkKQEAgLTEzODMsMzEgKzEzODgsNiBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQkgKglUTGFuX0hhbmRsZUludmFsaWQKLQkgKgotCSAqCVJldHVybnM6Ci0JICoJCTAKLQkgKglQYXJtczoKLQkgKgkJZGV2CQlEZXZpY2UgYXNzaWduZWQgdGhlIElSUSB0aGF0IHdhcwotCSAqCQkJCXJhaXNlZC4KLQkgKgkJaG9zdF9pbnQJVGhlIGNvbnRlbnRzIG9mIHRoZSBIT1NUX0lOVAotCSAqCQkJCXBvcnQuCi0JICoKLQkgKglUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgaW52YWxpZCBpbnRlcnJ1cHRzLiAgVGhpcyBzaG91bGQKLQkgKgluZXZlciBoYXBwZW4gdW5sZXNzIHNvbWUgb3RoZXIgYWRhcHRlciBpcyB0cnlpbmcgdG8gdXNlCi0JICoJdGhlIElSUSBsaW5lIGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuCi0JICoKLQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB1MzIgVExhbl9IYW5kbGVJbnZhbGlkKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgaG9zdF9pbnQgKQotewotCS8qIHByaW50ayggIlRMQU46ICBJbnZhbGlkIGludGVycnVwdCBvbiAlcy5cbiIsIGRldi0+bmFtZSApOyAqLwotCXJldHVybiAwOwotCi19IC8qIFRMYW5fSGFuZGxlSW52YWxpZCAqLwotCi0KIAogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTQ0MSwxNCArMTQyMSwxNiBAQAogCXUzMgkJYWNrID0gMDsKIAl1MTYJCXRtcENTdGF0OwogCi0JVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsICJUUkFOU01JVDogIEhhbmRsaW5nIFRYIEVPRiAoSGVhZD0lZCBUYWlsPSVkKVxuIiwgcHJpdi0+dHhIZWFkLCBwcml2LT50eFRhaWwgKTsKKwlUTEFOX0RCRyggVExBTl9ERUJVR19UWCwgIlRSQU5TTUlUOiAgSGFuZGxpbmcgVFggRU9GIChIZWFkPSVkIFRhaWw9JWQpXG4iLAorCQkgIHByaXYtPnR4SGVhZCwgcHJpdi0+dHhUYWlsICk7CiAJaGVhZF9saXN0ID0gcHJpdi0+dHhMaXN0ICsgcHJpdi0+dHhIZWFkOwogCiAJd2hpbGUgKCgodG1wQ1N0YXQgPSBoZWFkX2xpc3QtPmNTdGF0ICkgJiBUTEFOX0NTVEFUX0ZSTV9DTVApICYmIChhY2sgPCAyNTUpKSB7CiAJCWFjaysrOwogCQlpZiAoICEgYmJ1ZiApIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgPSBUTGFuX0dldFNLQihoZWFkX2xpc3QpOwotCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lEZXYsIGhlYWRfbGlzdC0+YnVmZmVyWzBdLmFkZHJlc3MsIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpRGV2LCBoZWFkX2xpc3QtPmJ1ZmZlclswXS5hZGRyZXNzLAorCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWhlYWRfbGlzdC0+YnVmZmVyWzhdLmFkZHJlc3MgPSAwOwogCQkJaGVhZF9saXN0LT5idWZmZXJbOV0uYWRkcmVzcyA9IDA7CkBAIC0xNDU3LDcgKzE0MzksNyBAQAogCQlpZiAoIHRtcENTdGF0ICYgVExBTl9DU1RBVF9FT0MgKQogCQkJZW9jID0gMTsKIAotCQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBoZWFkX2xpc3QtPmZyYW1lU2l6ZTsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBoZWFkX2xpc3QtPmZyYW1lU2l6ZTsKIAogCQloZWFkX2xpc3QtPmNTdGF0ID0gVExBTl9DU1RBVF9VTlVTRUQ7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CkBAIC0xNDY5LDcgKzE0NTEsOSBAQAogCQlwcmludGsoS0VSTl9JTkZPICJUTEFOOiBSZWNlaXZlZCBpbnRlcnJ1cHQgZm9yIHVuY29tcGxldGVkIFRYIGZyYW1lLlxuIik7CiAKIAlpZiAoIGVvYyApIHsKLQkJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsICJUUkFOU01JVDogIEhhbmRsaW5nIFRYIEVPQyAoSGVhZD0lZCBUYWlsPSVkKVxuIiwgcHJpdi0+dHhIZWFkLCBwcml2LT50eFRhaWwgKTsKKwkJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsCisJCQkgICJUUkFOU01JVDogIEhhbmRsaW5nIFRYIEVPQyAoSGVhZD0lZCBUYWlsPSVkKVxuIiwKKwkJCSAgcHJpdi0+dHhIZWFkLCBwcml2LT50eFRhaWwgKTsKIAkJaGVhZF9saXN0ID0gcHJpdi0+dHhMaXN0ICsgcHJpdi0+dHhIZWFkOwogCQloZWFkX2xpc3RfcGh5cyA9IHByaXYtPnR4TGlzdERNQSArIHNpemVvZihUTGFuTGlzdCkgKiBwcml2LT50eEhlYWQ7CiAJCWlmICggKCBoZWFkX2xpc3QtPmNTdGF0ICYgVExBTl9DU1RBVF9SRUFEWSApID09IFRMQU5fQ1NUQVRfUkVBRFkgKSB7CkBAIC0xNDgxLDcgKzE0NjUsOCBAQAogCX0KIAogCWlmICggcHJpdi0+YWRhcHRlci0+ZmxhZ3MgJiBUTEFOX0FEQVBURVJfQUNUSVZJVFlfTEVEICkgewotCQlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fTEVEX1JFRywgVExBTl9MRURfTElOSyB8IFRMQU5fTEVEX0FDVCApOworCQlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsCisJCQkJVExBTl9MRURfUkVHLCBUTEFOX0xFRF9MSU5LIHwgVExBTl9MRURfQUNUICk7CiAJCWlmICggcHJpdi0+dGltZXIuZnVuY3Rpb24gPT0gTlVMTCApIHsKIAkJCSBwcml2LT50aW1lci5mdW5jdGlvbiA9ICZUTGFuX1RpbWVyOwogCQkJIHByaXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwpAQCAtMTU2Myw2NiArMTU0OCw2NSBAQAogCVRMYW5MaXN0CSpoZWFkX2xpc3Q7CiAJc3RydWN0IHNrX2J1ZmYJKnNrYjsKIAlUTGFuTGlzdAkqdGFpbF9saXN0OwotCXZvaWQJCSp0OwotCXUzMgkJZnJhbWVTaXplOwogCXUxNgkJdG1wQ1N0YXQ7CiAJZG1hX2FkZHJfdAloZWFkX2xpc3RfcGh5czsKIAotCVRMQU5fREJHKCBUTEFOX0RFQlVHX1JYLCAiUkVDRUlWRTogIEhhbmRsaW5nIFJYIEVPRiAoSGVhZD0lZCBUYWlsPSVkKVxuIiwgcHJpdi0+cnhIZWFkLCBwcml2LT5yeFRhaWwgKTsKKwlUTEFOX0RCRyggVExBTl9ERUJVR19SWCwgIlJFQ0VJVkU6ICBIYW5kbGluZyBSWCBFT0YgKEhlYWQ9JWQgVGFpbD0lZClcbiIsCisJCSAgcHJpdi0+cnhIZWFkLCBwcml2LT5yeFRhaWwgKTsKIAloZWFkX2xpc3QgPSBwcml2LT5yeExpc3QgKyBwcml2LT5yeEhlYWQ7CiAJaGVhZF9saXN0X3BoeXMgPSBwcml2LT5yeExpc3RETUEgKyBzaXplb2YoVExhbkxpc3QpICogcHJpdi0+cnhIZWFkOwogCiAJd2hpbGUgKCgodG1wQ1N0YXQgPSBoZWFkX2xpc3QtPmNTdGF0KSAmIFRMQU5fQ1NUQVRfRlJNX0NNUCkgJiYgKGFjayA8IDI1NSkpIHsKLQkJZnJhbWVTaXplID0gaGVhZF9saXN0LT5mcmFtZVNpemU7CisJCWRtYV9hZGRyX3QgZnJhbWVEbWEgPSBoZWFkX2xpc3QtPmJ1ZmZlclswXS5hZGRyZXNzOworCQl1MzIgZnJhbWVTaXplID0gaGVhZF9saXN0LT5mcmFtZVNpemU7CiAJCWFjaysrOwogCQlpZiAodG1wQ1N0YXQgJiBUTEFOX0NTVEFUX0VPQykKIAkJCWVvYyA9IDE7CiAKIAkJaWYgKGJidWYpIHsKLQkJCXNrYiA9IGRldl9hbGxvY19za2IoZnJhbWVTaXplICsgNyk7Ci0JCQlpZiAoc2tiID09IE5VTEwpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiVExBTjogQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciByZWNlaXZlZCBkYXRhLlxuIik7Ci0JCQllbHNlIHsKLQkJCQloZWFkX2J1ZmZlciA9IHByaXYtPnJ4QnVmZmVyICsgKHByaXYtPnJ4SGVhZCAqIFRMQU5fTUFYX0ZSQU1FX1NJWkUpOwotCQkJCXNrYl9yZXNlcnZlKHNrYiwgMik7Ci0JCQkJdCA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBmcmFtZVNpemUpOworCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIGZyYW1lU2l6ZSArIDcpOworCQkJaWYgKCAhc2tiICkKKwkJCQlnb3RvIGRyb3BfYW5kX3JldXNlOwogCi0JCQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gaGVhZF9saXN0LT5mcmFtZVNpemU7CisJCQloZWFkX2J1ZmZlciA9IHByaXYtPnJ4QnVmZmVyCisJCQkJKyAocHJpdi0+cnhIZWFkICogVExBTl9NQVhfRlJBTUVfU0laRSk7CisJCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHByaXYtPnBjaURldiwKKwkJCQkJCSAgICBmcmFtZURtYSwgZnJhbWVTaXplLAorCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgaGVhZF9idWZmZXIsIGZyYW1lU2l6ZSk7CisJCQlza2JfcHV0KHNrYiwgZnJhbWVTaXplKTsKKwkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gZnJhbWVTaXplOwogCi0JCQkJbWVtY3B5KCB0LCBoZWFkX2J1ZmZlciwgZnJhbWVTaXplICk7Ci0JCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKCBza2IsIGRldiApOwotCQkJCW5ldGlmX3J4KCBza2IgKTsKLQkJCX0KKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyggc2tiLCBkZXYgKTsKKwkJCW5ldGlmX3J4KCBza2IgKTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwogCi0JCQkvKgotCQkgCSAqCUkgY2hhbmdlZCB0aGUgYWxnb3JpdGhtIGhlcmUuIFdoYXQgd2Ugbm93IGRvCi0JCSAJICoJaXMgYWxsb2NhdGUgdGhlIG5ldyBmcmFtZS4gSWYgdGhpcyBmYWlscyB3ZQotCQkgCSAqCXNpbXBseSByZWN5Y2xlIHRoZSBmcmFtZS4KLQkJIAkgKi8KKwkJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgVExBTl9NQVhfRlJBTUVfU0laRSArIDcgKTsKKwkJCWlmICggIW5ld19za2IgKQorCQkJCWdvdG8gZHJvcF9hbmRfcmV1c2U7CiAKLQkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKCBUTEFOX01BWF9GUkFNRV9TSVpFICsgNyApOworCQkJc2tiID0gVExhbl9HZXRTS0IoaGVhZF9saXN0KTsKKwkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpRGV2LCBmcmFtZURtYSwKKwkJCQkJIFRMQU5fTUFYX0ZSQU1FX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlza2JfcHV0KCBza2IsIGZyYW1lU2l6ZSApOwogCi0JCQlpZiAoIG5ld19za2IgIT0gTlVMTCApIHsKLQkJCQlza2IgPSBUTGFuX0dldFNLQihoZWFkX2xpc3QpOwotCQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpRGV2LCBoZWFkX2xpc3QtPmJ1ZmZlclswXS5hZGRyZXNzLCBUTEFOX01BWF9GUkFNRV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJCXNrYl90cmltKCBza2IsIGZyYW1lU2l6ZSApOworCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBmcmFtZVNpemU7CiAKLQkJCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBmcmFtZVNpemU7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoIHNrYiwgZGV2ICk7CisJCQluZXRpZl9yeCggc2tiICk7CiAKLQkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoIHNrYiwgZGV2ICk7Ci0JCQkJbmV0aWZfcngoIHNrYiApOworCQkJc2tiX3Jlc2VydmUoIG5ld19za2IsIE5FVF9JUF9BTElHTiApOworCQkJaGVhZF9saXN0LT5idWZmZXJbMF0uYWRkcmVzcyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaURldiwKKwkJCQkJCQkJICAgICAgbmV3X3NrYi0+ZGF0YSwKKwkJCQkJCQkJICAgICAgVExBTl9NQVhfRlJBTUVfU0laRSwKKwkJCQkJCQkJICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCQkJCXNrYl9yZXNlcnZlKCBuZXdfc2tiLCAyICk7Ci0JCQkJdCA9ICh2b2lkICopIHNrYl9wdXQoIG5ld19za2IsIFRMQU5fTUFYX0ZSQU1FX1NJWkUgKTsKLQkJCQloZWFkX2xpc3QtPmJ1ZmZlclswXS5hZGRyZXNzID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpRGV2LCBuZXdfc2tiLT5kYXRhLCBUTEFOX01BWF9GUkFNRV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJCWhlYWRfbGlzdC0+YnVmZmVyWzhdLmFkZHJlc3MgPSAodTMyKSB0OwotCQkJCVRMYW5fU3RvcmVTS0IoaGVhZF9saXN0LCBuZXdfc2tiKTsKLQkJCX0gZWxzZQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRMQU46ICBDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlY2VpdmVkIGRhdGEuXG4iICk7CisJCQlUTGFuX1N0b3JlU0tCKGhlYWRfbGlzdCwgbmV3X3NrYik7CisKIAkJfQotCitkcm9wX2FuZF9yZXVzZToKIAkJaGVhZF9saXN0LT5mb3J3YXJkID0gMDsKIAkJaGVhZF9saXN0LT5jU3RhdCA9IDA7CiAJCXRhaWxfbGlzdCA9IHByaXYtPnJ4TGlzdCArIHByaXYtPnJ4VGFpbDsKQEAgLTE2MzgsMTAgKzE2MjIsMTAgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVExBTjogUmVjZWl2ZWQgaW50ZXJydXB0IGZvciB1bmNvbXBsZXRlZCBSWCBmcmFtZS5cbiIpOwogCiAKLQotCiAJaWYgKCBlb2MgKSB7Ci0JCVRMQU5fREJHKCBUTEFOX0RFQlVHX1JYLCAiUkVDRUlWRTogIEhhbmRsaW5nIFJYIEVPQyAoSGVhZD0lZCBUYWlsPSVkKVxuIiwgcHJpdi0+cnhIZWFkLCBwcml2LT5yeFRhaWwgKTsKKwkJVExBTl9EQkcoIFRMQU5fREVCVUdfUlgsCisJCQkgICJSRUNFSVZFOiAgSGFuZGxpbmcgUlggRU9DIChIZWFkPSVkIFRhaWw9JWQpXG4iLAorCQkJICBwcml2LT5yeEhlYWQsIHByaXYtPnJ4VGFpbCApOwogCQloZWFkX2xpc3QgPSBwcml2LT5yeExpc3QgKyBwcml2LT5yeEhlYWQ7CiAJCWhlYWRfbGlzdF9waHlzID0gcHJpdi0+cnhMaXN0RE1BICsgc2l6ZW9mKFRMYW5MaXN0KSAqIHByaXYtPnJ4SGVhZDsKIAkJb3V0bChoZWFkX2xpc3RfcGh5cywgZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0NIX1BBUk0gKTsKQEAgLTE2NTAsNyArMTYzNCw4IEBACiAJfQogCiAJaWYgKCBwcml2LT5hZGFwdGVyLT5mbGFncyAmIFRMQU5fQURBUFRFUl9BQ1RJVklUWV9MRUQgKSB7Ci0JCVRMYW5fRGlvV3JpdGU4KCBkZXYtPmJhc2VfYWRkciwgVExBTl9MRURfUkVHLCBUTEFOX0xFRF9MSU5LIHwgVExBTl9MRURfQUNUICk7CisJCVRMYW5fRGlvV3JpdGU4KCBkZXYtPmJhc2VfYWRkciwKKwkJCQlUTEFOX0xFRF9SRUcsIFRMQU5fTEVEX0xJTksgfCBUTEFOX0xFRF9BQ1QgKTsKIAkJaWYgKCBwcml2LT50aW1lci5mdW5jdGlvbiA9PSBOVUxMICkgIHsKIAkJCXByaXYtPnRpbWVyLmZ1bmN0aW9uID0gJlRMYW5fVGltZXI7CiAJCQlwcml2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKQEAgLTE3MjgsNyArMTcxMyw5IEBACiAKIAlob3N0X2ludCA9IDA7CiAJaWYgKCBwcml2LT50bGFuUmV2IDwgMHgzMCApIHsKLQkJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsICJUUkFOU01JVDogIEhhbmRsaW5nIFRYIEVPQyAoSGVhZD0lZCBUYWlsPSVkKSAtLSBJUlFcbiIsIHByaXYtPnR4SGVhZCwgcHJpdi0+dHhUYWlsICk7CisJCVRMQU5fREJHKCBUTEFOX0RFQlVHX1RYLAorCQkJICAiVFJBTlNNSVQ6ICBIYW5kbGluZyBUWCBFT0MgKEhlYWQ9JWQgVGFpbD0lZCkgLS0gSVJRXG4iLAorCQkJICBwcml2LT50eEhlYWQsIHByaXYtPnR4VGFpbCApOwogCQloZWFkX2xpc3QgPSBwcml2LT50eExpc3QgKyBwcml2LT50eEhlYWQ7CiAJCWhlYWRfbGlzdF9waHlzID0gcHJpdi0+dHhMaXN0RE1BICsgc2l6ZW9mKFRMYW5MaXN0KSAqIHByaXYtPnR4SGVhZDsKIAkJaWYgKCAoIGhlYWRfbGlzdC0+Y1N0YXQgJiBUTEFOX0NTVEFUX1JFQURZICkgPT0gVExBTl9DU1RBVF9SRUFEWSApIHsKQEAgLTE3OTYsMTUgKzE3ODMsMTggQEAKIAkJbmV0X3N0cyA9IFRMYW5fRGlvUmVhZDgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX05FVF9TVFMgKTsKIAkJaWYgKCBuZXRfc3RzICkgewogCQkJVExhbl9EaW9Xcml0ZTgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX05FVF9TVFMsIG5ldF9zdHMgKTsKLQkJCVRMQU5fREJHKCBUTEFOX0RFQlVHX0dOUkwsICIlczogICAgTmV0X1N0cyA9ICV4XG4iLCBkZXYtPm5hbWUsICh1bnNpZ25lZCkgbmV0X3N0cyApOworCQkJVExBTl9EQkcoIFRMQU5fREVCVUdfR05STCwgIiVzOiAgICBOZXRfU3RzID0gJXhcbiIsCisJCQkJICBkZXYtPm5hbWUsICh1bnNpZ25lZCkgbmV0X3N0cyApOwogCQl9CiAJCWlmICggKCBuZXRfc3RzICYgVExBTl9ORVRfU1RTX01JUlEgKSAmJiAgKCBwcml2LT5waHlOdW0gPT0gMCApICkgewogCQkJVExhbl9NaWlSZWFkUmVnKCBkZXYsIHBoeSwgVExBTl9UTFBIWV9TVFMsICZ0bHBoeV9zdHMgKTsKIAkJCVRMYW5fTWlpUmVhZFJlZyggZGV2LCBwaHksIFRMQU5fVExQSFlfQ1RMLCAmdGxwaHlfY3RsICk7Ci0gICAgICAgIAkJaWYgKCAhICggdGxwaHlfc3RzICYgVExBTl9UU19QT0xPSyApICYmICEgKCB0bHBoeV9jdGwgJiBUTEFOX1RDX1NXQVBPTCApICkgeworICAgICAgICAJCWlmICggISAoIHRscGh5X3N0cyAmIFRMQU5fVFNfUE9MT0sgKSAmJgorCQkJICAgICAhICggdGxwaHlfY3RsICYgVExBTl9UQ19TV0FQT0wgKSApIHsKICAgICAgICAgICAgICAgICAJCXRscGh5X2N0bCB8PSBUTEFOX1RDX1NXQVBPTDsKICAgICAgICAgICAgICAgICAJCVRMYW5fTWlpV3JpdGVSZWcoIGRldiwgcGh5LCBUTEFOX1RMUEhZX0NUTCwgdGxwaHlfY3RsKTsKLSAgICAgICAgCQl9IGVsc2UgaWYgKCAoIHRscGh5X3N0cyAmIFRMQU5fVFNfUE9MT0sgKSAmJiAoIHRscGh5X2N0bCAmIFRMQU5fVENfU1dBUE9MICkgKSB7CisgICAgICAgIAkJfSBlbHNlIGlmICggKCB0bHBoeV9zdHMgJiBUTEFOX1RTX1BPTE9LICkKKwkJCQkgICAgJiYgKCB0bHBoeV9jdGwgJiBUTEFOX1RDX1NXQVBPTCApICkgewogICAgICAgICAgICAgICAgIAkJdGxwaHlfY3RsICY9IH5UTEFOX1RDX1NXQVBPTDsKICAgICAgICAgICAgICAgICAJCVRMYW5fTWlpV3JpdGVSZWcoIGRldiwgcGh5LCBUTEFOX1RMUEhZX0NUTCwgdGxwaHlfY3RsKTsKICAgICAgICAgCQl9CkBAIC0xODQ5LDcgKzE4MzksOSBAQAogCXUzMgkJYWNrID0gMTsKIAogCWlmICggIHByaXYtPnRsYW5SZXYgPCAweDMwICkgewotCQlUTEFOX0RCRyggVExBTl9ERUJVR19SWCwgIlJFQ0VJVkU6ICBIYW5kbGluZyBSWCBFT0MgKEhlYWQ9JWQgVGFpbD0lZCkgLS0gSVJRXG4iLCBwcml2LT5yeEhlYWQsIHByaXYtPnJ4VGFpbCApOworCQlUTEFOX0RCRyggVExBTl9ERUJVR19SWCwKKwkJCSAgIlJFQ0VJVkU6ICBIYW5kbGluZyBSWCBFT0MgKEhlYWQ9JWQgVGFpbD0lZCkgLS0gSVJRXG4iLAorCQkJICBwcml2LT5yeEhlYWQsIHByaXYtPnJ4VGFpbCApOwogCQloZWFkX2xpc3RfcGh5cyA9IHByaXYtPnJ4TGlzdERNQSArIHNpemVvZihUTGFuTGlzdCkgKiBwcml2LT5yeEhlYWQ7CiAJCW91dGwoIGhlYWRfbGlzdF9waHlzLCBkZXYtPmJhc2VfYWRkciArIFRMQU5fQ0hfUEFSTSApOwogCQlhY2sgfD0gVExBTl9IQ19HTyB8IFRMQU5fSENfUlQ7CkBAIC0xOTQwLDEwICsxOTMyLDEyIEBACiAJCQlpZiAoIHByaXYtPnRpbWVyLmZ1bmN0aW9uID09IE5VTEwgKSB7CiAJCQkJZWxhcHNlZCA9IGppZmZpZXMgLSBwcml2LT50aW1lclNldEF0OwogCQkJCWlmICggZWxhcHNlZCA+PSBUTEFOX1RJTUVSX0FDVF9ERUxBWSApIHsKLQkJCQkJVExhbl9EaW9Xcml0ZTgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX0xFRF9SRUcsIFRMQU5fTEVEX0xJTksgKTsKKwkJCQkJVExhbl9EaW9Xcml0ZTgoIGRldi0+YmFzZV9hZGRyLAorCQkJCQkJCVRMQU5fTEVEX1JFRywgVExBTl9MRURfTElOSyApOwogCQkJCX0gZWxzZSAgewogCQkJCQlwcml2LT50aW1lci5mdW5jdGlvbiA9ICZUTGFuX1RpbWVyOwotCQkJCQlwcml2LT50aW1lci5leHBpcmVzID0gcHJpdi0+dGltZXJTZXRBdCArIFRMQU5fVElNRVJfQUNUX0RFTEFZOworCQkJCQlwcml2LT50aW1lci5leHBpcmVzID0gcHJpdi0+dGltZXJTZXRBdAorCQkJCQkJKyBUTEFOX1RJTUVSX0FDVF9ERUxBWTsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJCQlhZGRfdGltZXIoICZwcml2LT50aW1lciApOwogCQkJCQlicmVhazsKQEAgLTE5OTgsNyArMTk5Miw4IEBACiAJCWxpc3QgPSBwcml2LT50eExpc3QgKyBpOwogCQlsaXN0LT5jU3RhdCA9IFRMQU5fQ1NUQVRfVU5VU0VEOwogCQlpZiAoIGJidWYgKSB7Ci0JCQlsaXN0LT5idWZmZXJbMF0uYWRkcmVzcyA9IHByaXYtPnR4QnVmZmVyRE1BICsgKCBpICogVExBTl9NQVhfRlJBTUVfU0laRSApOworCQkJbGlzdC0+YnVmZmVyWzBdLmFkZHJlc3MgPSBwcml2LT50eEJ1ZmZlckRNQQorCQkJCSsgKCBpICogVExBTl9NQVhfRlJBTUVfU0laRSApOwogCQl9IGVsc2UgewogCQkJbGlzdC0+YnVmZmVyWzBdLmFkZHJlc3MgPSAwOwogCQl9CkBAIC0yMDE3LDI5ICsyMDEyLDMzIEBACiAJCWxpc3QtPmZyYW1lU2l6ZSA9IFRMQU5fTUFYX0ZSQU1FX1NJWkU7CiAJCWxpc3QtPmJ1ZmZlclswXS5jb3VudCA9IFRMQU5fTUFYX0ZSQU1FX1NJWkUgfCBUTEFOX0xBU1RfQlVGRkVSOwogCQlpZiAoIGJidWYgKSB7Ci0JCQlsaXN0LT5idWZmZXJbMF0uYWRkcmVzcyA9IHByaXYtPnJ4QnVmZmVyRE1BICsgKCBpICogVExBTl9NQVhfRlJBTUVfU0laRSApOworCQkJbGlzdC0+YnVmZmVyWzBdLmFkZHJlc3MgPSBwcml2LT5yeEJ1ZmZlckRNQQorCQkJCSsgKCBpICogVExBTl9NQVhfRlJBTUVfU0laRSApOwogCQl9IGVsc2UgewotCQkJc2tiID0gZGV2X2FsbG9jX3NrYiggVExBTl9NQVhfRlJBTUVfU0laRSArIDcgKTsKLQkJCWlmICggc2tiID09IE5VTEwgKSB7Ci0JCQkJcHJpbnRrKCAiVExBTjogIENvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVjZWl2ZWQgZGF0YS5cbiIgKTsKLQkJCQkvKiBJZiB0aGlzIGV2ZXIgaGFwcGVuZWQgaXQgd291bGQgYmUgYSBwcm9ibGVtICovCi0JCQl9IGVsc2UgewotCQkJCXNrYi0+ZGV2ID0gZGV2OwotCQkJCXNrYl9yZXNlcnZlKCBza2IsIDIgKTsKLQkJCQl0ID0gKHZvaWQgKikgc2tiX3B1dCggc2tiLCBUTEFOX01BWF9GUkFNRV9TSVpFICk7CisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgVExBTl9NQVhfRlJBTUVfU0laRSArIDcgKTsKKwkJCWlmICggIXNrYiApIHsKKwkJCQlwcl9lcnIoIlRMQU46IG91dCBvZiBtZW1vcnkgZm9yIHJlY2VpdmVkIGRhdGEuXG4iICk7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQlsaXN0LT5idWZmZXJbMF0uYWRkcmVzcyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaURldiwgdCwgVExBTl9NQVhfRlJBTUVfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWxpc3QtPmJ1ZmZlcls4XS5hZGRyZXNzID0gKHUzMikgdDsKKworCQkJc2tiX3Jlc2VydmUoIHNrYiwgTkVUX0lQX0FMSUdOICk7CisJCQlsaXN0LT5idWZmZXJbMF0uYWRkcmVzcyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaURldiwgdCwKKwkJCQkJCQkJIFRMQU5fTUFYX0ZSQU1FX1NJWkUsCisJCQkJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJVExhbl9TdG9yZVNLQihsaXN0LCBza2IpOwogCQl9CiAJCWxpc3QtPmJ1ZmZlclsxXS5jb3VudCA9IDA7CiAJCWxpc3QtPmJ1ZmZlclsxXS5hZGRyZXNzID0gMDsKLQkJaWYgKCBpIDwgVExBTl9OVU1fUlhfTElTVFMgLSAxICkKLQkJCWxpc3QtPmZvcndhcmQgPSBsaXN0X3BoeXMgKyBzaXplb2YoVExhbkxpc3QpOwotCQllbHNlCi0JCQlsaXN0LT5mb3J3YXJkID0gMDsKKwkJbGlzdC0+Zm9yd2FyZCA9IGxpc3RfcGh5cyArIHNpemVvZihUTGFuTGlzdCk7CiAJfQogCisJLyogaW4gY2FzZSByYW4gb3V0IG9mIG1lbW9yeSBlYXJseSwgY2xlYXIgYml0cyAqLworCXdoaWxlIChpIDwgVExBTl9OVU1fUlhfTElTVFMpIHsKKwkJVExhbl9TdG9yZVNLQihwcml2LT5yeExpc3QgKyBpLCBOVUxMKTsKKwkJKytpOworCX0KKwlsaXN0LT5mb3J3YXJkID0gMDsKKwogfSAvKiBUTGFuX1Jlc2V0TGlzdHMgKi8KIAogCkBAIC0yMDU1LDcgKzIwNTQsOSBAQAogCQkJbGlzdCA9IHByaXYtPnR4TGlzdCArIGk7CiAJCQlza2IgPSBUTGFuX0dldFNLQihsaXN0KTsKIAkJCWlmICggc2tiICkgewotCQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpRGV2LCBsaXN0LT5idWZmZXJbMF0uYWRkcmVzcywgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpRGV2LAorCQkJCQkJIGxpc3QtPmJ1ZmZlclswXS5hZGRyZXNzLCBza2ItPmxlbiwKKwkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueSggc2tiICk7CiAJCQkJbGlzdC0+YnVmZmVyWzhdLmFkZHJlc3MgPSAwOwogCQkJCWxpc3QtPmJ1ZmZlcls5XS5hZGRyZXNzID0gMDsKQEAgLTIwNjYsNyArMjA2NywxMCBAQAogCQkJbGlzdCA9IHByaXYtPnJ4TGlzdCArIGk7CiAJCQlza2IgPSBUTGFuX0dldFNLQihsaXN0KTsKIAkJCWlmICggc2tiICkgewotCQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpRGV2LCBsaXN0LT5idWZmZXJbMF0uYWRkcmVzcywgVExBTl9NQVhfRlJBTUVfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaURldiwKKwkJCQkJCSBsaXN0LT5idWZmZXJbMF0uYWRkcmVzcywKKwkJCQkJCSBUTEFOX01BWF9GUkFNRV9TSVpFLAorCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoIHNrYiApOwogCQkJCWxpc3QtPmJ1ZmZlcls4XS5hZGRyZXNzID0gMDsKIAkJCQlsaXN0LT5idWZmZXJbOV0uYWRkcmVzcyA9IDA7CkBAIC0yMDk3LDcgKzIxMDEsOCBAQAogCXUzMiBkYXRhMCwgZGF0YTE7CiAJaW50CWk7CiAKLQlwcmludGsoICJUTEFOOiAgIENvbnRlbnRzIG9mIGludGVybmFsIHJlZ2lzdGVycyBmb3IgaW8gYmFzZSAweCUwNGh4LlxuIiwgaW9fYmFzZSApOworCXByaW50ayggIlRMQU46ICAgQ29udGVudHMgb2YgaW50ZXJuYWwgcmVnaXN0ZXJzIGZvciBpbyBiYXNlIDB4JTA0aHguXG4iLAorCQlpb19iYXNlICk7CiAJcHJpbnRrKCAiVExBTjogICAgICBPZmYuICArMCAgICAgICAgICs0XG4iICk7CiAJZm9yICggaSA9IDA7IGkgPCAweDRDOyBpKz0gOCApIHsKIAkJZGF0YTAgPSBUTGFuX0Rpb1JlYWQzMiggaW9fYmFzZSwgaSApOwpAQCAtMjEzMSwxMyArMjEzNiwxNCBAQAogewogCWludCBpOwogCi0JcHJpbnRrKCAiVExBTjogICAlcyBMaXN0ICVkIGF0IDB4JTA4eFxuIiwgdHlwZSwgbnVtLCAodTMyKSBsaXN0ICk7CisJcHJpbnRrKCAiVExBTjogICAlcyBMaXN0ICVkIGF0ICVwXG4iLCB0eXBlLCBudW0sIGxpc3QgKTsKIAlwcmludGsoICJUTEFOOiAgICAgIEZvcndhcmQgICAgPSAweCUwOHhcbiIsICBsaXN0LT5mb3J3YXJkICk7CiAJcHJpbnRrKCAiVExBTjogICAgICBDU1RBVCAgICAgID0gMHglMDRoeFxuIiwgbGlzdC0+Y1N0YXQgKTsKIAlwcmludGsoICJUTEFOOiAgICAgIEZyYW1lIFNpemUgPSAweCUwNGh4XG4iLCBsaXN0LT5mcmFtZVNpemUgKTsKIAkvKiBmb3IgKCBpID0gMDsgaSA8IDEwOyBpKysgKSB7ICovCiAJZm9yICggaSA9IDA7IGkgPCAyOyBpKysgKSB7Ci0JCXByaW50ayggIlRMQU46ICAgICAgQnVmZmVyWyVkXS5jb3VudCwgYWRkciA9IDB4JTA4eCwgMHglMDh4XG4iLCBpLCBsaXN0LT5idWZmZXJbaV0uY291bnQsIGxpc3QtPmJ1ZmZlcltpXS5hZGRyZXNzICk7CisJCXByaW50ayggIlRMQU46ICAgICAgQnVmZmVyWyVkXS5jb3VudCwgYWRkciA9IDB4JTA4eCwgMHglMDh4XG4iLAorCQkJaSwgbGlzdC0+YnVmZmVyW2ldLmNvdW50LCBsaXN0LT5idWZmZXJbaV0uYWRkcmVzcyApOwogCX0KIAogfSAvKiBUTGFuX1ByaW50TGlzdCAqLwpAQCAtMjE2NSw3ICsyMTcxLDYgQEAKIAogc3RhdGljIHZvaWQgVExhbl9SZWFkQW5kQ2xlYXJTdGF0cyggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHJlY29yZCApCiB7Ci0JVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIJCXR4X2dvb2QsIHR4X3VuZGVyOwogCXUzMgkJcnhfZ29vZCwgcnhfb3ZlcjsKIAl1MzIJCWRlZl90eCwgY3JjLCBjb2RlOwpAQCAtMjIwMiwxOCArMjIwNywxOCBAQAogCWxvc3MgICAgICAgPSBpbmIoIGRldi0+YmFzZV9hZGRyICsgVExBTl9ESU9fREFUQSArIDIgKTsKIAogCWlmICggcmVjb3JkICkgewotCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzICs9IHJ4X2dvb2Q7Ci0JCXByaXYtPnN0YXRzLnJ4X2Vycm9ycyAgKz0gcnhfb3ZlciArIGNyYyArIGNvZGU7Ci0JCXByaXYtPnN0YXRzLnR4X3BhY2tldHMgKz0gdHhfZ29vZDsKLQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzICArPSB0eF91bmRlciArIGxvc3M7Ci0JCXByaXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gbXVsdGlfY29sICsgc2luZ2xlX2NvbCArIGV4Y2Vzc19jb2wgKyBsYXRlX2NvbDsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzICs9IHJ4X2dvb2Q7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzICArPSByeF9vdmVyICsgY3JjICsgY29kZTsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IHR4X2dvb2Q7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzICArPSB0eF91bmRlciArIGxvc3M7CisJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBtdWx0aV9jb2wgKyBzaW5nbGVfY29sICsgZXhjZXNzX2NvbCArIGxhdGVfY29sOwogCi0JCXByaXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzICAgICs9IHJ4X292ZXI7Ci0JCXByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMgICAgICs9IGNyYzsKLQkJcHJpdi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICAgKz0gY29kZTsKKwkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycyAgICArPSByeF9vdmVyOworCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMgICAgICs9IGNyYzsKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgICArPSBjb2RlOwogCi0JCXByaXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IHR4X3VuZGVyOwotCQlwcml2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBsb3NzOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IHR4X3VuZGVyOworCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IGxvc3M7CiAJfQogCiB9IC8qIFRMYW5fUmVhZEFuZENsZWFyU3RhdHMgKi8KQEAgLTIzNTQsMTQgKzIzNTksMTYgQEAKIAlUTGFuX01paVJlYWRSZWcoIGRldiwgcGh5LCBNSUlfR0VOX0lEX0hJLCAmdGxwaHlfaWQxICk7CiAJVExhbl9NaWlSZWFkUmVnKCBkZXYsIHBoeSwgTUlJX0dFTl9JRF9MTywgJnRscGh5X2lkMiApOwogCi0JaWYgKCAoIHByaXYtPmFkYXB0ZXItPmZsYWdzICYgVExBTl9BREFQVEVSX1VOTUFOQUdFRF9QSFkgKSB8fCAoIHByaXYtPmF1aSApICkgeworCWlmICggKCBwcml2LT5hZGFwdGVyLT5mbGFncyAmIFRMQU5fQURBUFRFUl9VTk1BTkFHRURfUEhZICkgfHwKKwkgICAgICggcHJpdi0+YXVpICkgKSB7CiAJCXN0YXR1cyA9IE1JSV9HU19MSU5LOwogCQlwcmludGsoICJUTEFOOiAgJXM6IExpbmsgZm9yY2VkLlxuIiwgZGV2LT5uYW1lICk7CiAJfSBlbHNlIHsKIAkJVExhbl9NaWlSZWFkUmVnKCBkZXYsIHBoeSwgTUlJX0dFTl9TVFMsICZzdGF0dXMgKTsKIAkJdWRlbGF5KCAxMDAwICk7CiAJCVRMYW5fTWlpUmVhZFJlZyggZGV2LCBwaHksIE1JSV9HRU5fU1RTLCAmc3RhdHVzICk7Ci0JCWlmICggKHN0YXR1cyAmIE1JSV9HU19MSU5LKSAmJgkgLyogV2Ugb25seSBzdXBwb3J0IGxpbmsgaW5mbyBvbiBOYXQuU2VtLiBQSFkncyAqLworCQlpZiAoIChzdGF0dXMgJiBNSUlfR1NfTElOSykgJiYKKwkJICAgICAvKiBXZSBvbmx5IHN1cHBvcnQgbGluayBpbmZvIG9uIE5hdC5TZW0uIFBIWSdzICovCiAJCQkodGxwaHlfaWQxID09IE5BVF9TRU1fSUQxKSAmJgogCQkJKHRscGh5X2lkMiA9PSBOQVRfU0VNX0lEMikgKSB7CiAJCQlUTGFuX01paVJlYWRSZWcoIGRldiwgcGh5LCBNSUlfQU5fTFBBLCAmcGFydG5lciApOwpAQCAtMjM3MCwxMiArMjM3NywxMiBAQAogCQkJcHJpbnRrKCAiVExBTjogJXM6IExpbmsgYWN0aXZlIHdpdGggIiwgZGV2LT5uYW1lICk7CiAJCQlpZiAoISh0bHBoeV9wYXIgJiBUTEFOX1BIWV9BTl9FTl9TVEFUKSkgewogCQkJICAgICAgCSBwcmludGsoICJmb3JjZWQgMTAlc01icHMgJXMtRHVwbGV4XG4iLAotCQkJCQkJdGxwaHlfcGFyICYgVExBTl9QSFlfU1BFRURfMTAwID8gIiIgOiAiMCIsCi0JCQkJCQl0bHBoeV9wYXIgJiBUTEFOX1BIWV9EVVBMRVhfRlVMTCA/ICJGdWxsIiA6ICJIYWxmIik7CisJCQkJCSB0bHBoeV9wYXIgJiBUTEFOX1BIWV9TUEVFRF8xMDAgPyAiIiA6ICIwIiwKKwkJCQkJIHRscGh5X3BhciAmIFRMQU5fUEhZX0RVUExFWF9GVUxMID8gIkZ1bGwiIDogIkhhbGYiKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKCAiQXV0b05lZ290aWF0aW9uIGVuYWJsZWQsIGF0IDEwJXNNYnBzICVzLUR1cGxleFxuIiwKLQkJCQkJCXRscGh5X3BhciAmIFRMQU5fUEhZX1NQRUVEXzEwMCA/ICIiIDogIjAiLAotCQkJCQkJdGxwaHlfcGFyICYgVExBTl9QSFlfRFVQTEVYX0ZVTEwgPyAiRnVsbCIgOiAiSGFsZiIpOworCQkJCQl0bHBoeV9wYXIgJiBUTEFOX1BIWV9TUEVFRF8xMDAgPyAiIiA6ICIwIiwKKwkJCQkJdGxwaHlfcGFyICYgVExBTl9QSFlfRFVQTEVYX0ZVTEwgPyAiRnVsbCIgOiAiSGFsZiIpOwogCQkJCXByaW50aygiVExBTjogUGFydG5lciBjYXBhYmlsaXR5OiAiKTsKIAkJCQkJZm9yIChpID0gNTsgaSA8PSAxMDsgaSsrKQogCQkJCQkJaWYgKHBhcnRuZXIgJiAoMTw8aSkpCkBAIC0yNDE2LDcgKzI0MjMsOCBAQAogCQlvdXRsKCBUTEFOX0hDX0dPIHwgVExBTl9IQ19SVCwgZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0hPU1RfQ01EICk7CiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAl9IGVsc2UgewotCQlwcmludGsoICJUTEFOOiAlczogTGluayBpbmFjdGl2ZSwgd2lsbCByZXRyeSBpbiAxMCBzZWNzLi4uXG4iLCBkZXYtPm5hbWUgKTsKKwkJcHJpbnRrKCAiVExBTjogJXM6IExpbmsgaW5hY3RpdmUsIHdpbGwgcmV0cnkgaW4gMTAgc2Vjcy4uLlxuIiwKKwkJCWRldi0+bmFtZSApOwogCQlUTGFuX1NldFRpbWVyKCBkZXYsICgxMCpIWiksIFRMQU5fVElNRVJfRklOSVNIX1JFU0VUICk7CiAJCXJldHVybjsKIAl9CkBAIC0yNDU2LDEwICsyNDY0LDEyIEBACiAKIAlpZiAoIG1hYyAhPSBOVUxMICkgewogCQlmb3IgKCBpID0gMDsgaSA8IDY7IGkrKyApCi0JCQlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fQVJFR18wICsgYXJlZyArIGksIG1hY1tpXSApOworCQkJVExhbl9EaW9Xcml0ZTgoIGRldi0+YmFzZV9hZGRyLAorCQkJCQlUTEFOX0FSRUdfMCArIGFyZWcgKyBpLCBtYWNbaV0gKTsKIAl9IGVsc2UgewogCQlmb3IgKCBpID0gMDsgaSA8IDY7IGkrKyApCi0JCQlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fQVJFR18wICsgYXJlZyArIGksIDAgKTsKKwkJCVRMYW5fRGlvV3JpdGU4KCBkZXYtPmJhc2VfYWRkciwKKwkJCQkJVExBTl9BUkVHXzAgKyBhcmVnICsgaSwgMCApOwogCX0KIAogfSAvKiBUTGFuX1NldE1hYyAqLwpAQCAtMjU2NSw5ICsyNTc1LDEzIEBACiAJCVRMYW5fTWlpUmVhZFJlZyggZGV2LCBwaHksIE1JSV9HRU5fQ1RMLCAmY29udHJvbCApOwogCQlUTGFuX01paVJlYWRSZWcoIGRldiwgcGh5LCBNSUlfR0VOX0lEX0hJLCAmaGkgKTsKIAkJVExhbl9NaWlSZWFkUmVnKCBkZXYsIHBoeSwgTUlJX0dFTl9JRF9MTywgJmxvICk7Ci0JCWlmICggKCBjb250cm9sICE9IDB4RkZGRiApIHx8ICggaGkgIT0gMHhGRkZGICkgfHwgKCBsbyAhPSAweEZGRkYgKSApIHsKLQkJCVRMQU5fREJHKCBUTEFOX0RFQlVHX0dOUkwsICJQSFkgZm91bmQgYXQgJTAyeCAlMDR4ICUwNHggJTA0eFxuIiwgcGh5LCBjb250cm9sLCBoaSwgbG8gKTsKLQkJCWlmICggKCBwcml2LT5waHlbMV0gPT0gVExBTl9QSFlfTk9ORSApICYmICggcGh5ICE9IFRMQU5fUEhZX01BWF9BRERSICkgKSB7CisJCWlmICggKCBjb250cm9sICE9IDB4RkZGRiApIHx8CisJCSAgICAgKCBoaSAhPSAweEZGRkYgKSB8fCAoIGxvICE9IDB4RkZGRiApICkgeworCQkJVExBTl9EQkcoIFRMQU5fREVCVUdfR05STCwKKwkJCQkgICJQSFkgZm91bmQgYXQgJTAyeCAlMDR4ICUwNHggJTA0eFxuIiwKKwkJCQkgIHBoeSwgY29udHJvbCwgaGksIGxvICk7CisJCQlpZiAoICggcHJpdi0+cGh5WzFdID09IFRMQU5fUEhZX05PTkUgKSAmJgorCQkJICAgICAoIHBoeSAhPSBUTEFOX1BIWV9NQVhfQUREUiApICkgewogCQkJCXByaXYtPnBoeVsxXSA9IHBoeTsKIAkJCX0KIAkJfQpAQCAtMjU5NSw3ICsyNjA5LDkgQEAKIAl2YWx1ZSA9IE1JSV9HQ19QRE9XTiB8IE1JSV9HQ19MT09QQksgfCBNSUlfR0NfSVNPTEFURTsKIAlUTGFuX01paVN5bmMoIGRldi0+YmFzZV9hZGRyICk7CiAJVExhbl9NaWlXcml0ZVJlZyggZGV2LCBwcml2LT5waHlbcHJpdi0+cGh5TnVtXSwgTUlJX0dFTl9DVEwsIHZhbHVlICk7Ci0JaWYgKCAoIHByaXYtPnBoeU51bSA9PSAwICkgJiYgKCBwcml2LT5waHlbMV0gIT0gVExBTl9QSFlfTk9ORSApICYmICggISAoIHByaXYtPmFkYXB0ZXItPmZsYWdzICYgVExBTl9BREFQVEVSX1VTRV9JTlRFUk5fMTAgKSApICkgeworCWlmICggKCBwcml2LT5waHlOdW0gPT0gMCApICYmCisJICAgICAoIHByaXYtPnBoeVsxXSAhPSBUTEFOX1BIWV9OT05FICkgJiYKKwkgICAgICggISAoIHByaXYtPmFkYXB0ZXItPmZsYWdzICYgVExBTl9BREFQVEVSX1VTRV9JTlRFUk5fMTAgKSApICkgewogCQlUTGFuX01paVN5bmMoIGRldi0+YmFzZV9hZGRyICk7CiAJCVRMYW5fTWlpV3JpdGVSZWcoIGRldiwgcHJpdi0+cGh5WzFdLCBNSUlfR0VOX0NUTCwgdmFsdWUgKTsKIAl9CkBAIC0yNzY4LDEwICsyNzg0LDEwIEBACiAJCSAqIG1vcmUgdGltZS4gIFBlcmhhcHMgd2Ugc2hvdWxkIGZhaWwgYWZ0ZXIgYSB3aGlsZS4KIAkJICovCiAJCSBpZiAoIXByaXYtPm5lZ19iZV92ZXJib3NlKyspIHsKLQkJCSBwcmludGsoS0VSTl9JTkZPICJUTEFOOiAgR2l2aW5nIGF1dG9uZWdvdGlhdGlvbiBtb3JlIHRpbWUuXG4iKTsKLQkJIAkgcHJpbnRrKEtFUk5fSU5GTyAiVExBTjogIFBsZWFzZSBjaGVjayB0aGF0IHlvdXIgYWRhcHRlciBoYXNcbiIpOwotCQkgCSBwcmludGsoS0VSTl9JTkZPICJUTEFOOiAgYmVlbiBwcm9wZXJseSBjb25uZWN0ZWQgdG8gYSBIVUIgb3IgU3dpdGNoLlxuIik7Ci0JCQkgcHJpbnRrKEtFUk5fSU5GTyAiVExBTjogIFRyeWluZyB0byBlc3RhYmxpc2ggbGluayBpbiB0aGUgYmFja2dyb3VuZC4uLlxuIik7CisJCQkgcHJfaW5mbygiVExBTjogIEdpdmluZyBhdXRvbmVnb3RpYXRpb24gbW9yZSB0aW1lLlxuIik7CisJCSAJIHByX2luZm8oIlRMQU46ICBQbGVhc2UgY2hlY2sgdGhhdCB5b3VyIGFkYXB0ZXIgaGFzXG4iKTsKKwkJIAkgcHJfaW5mbygiVExBTjogIGJlZW4gcHJvcGVybHkgY29ubmVjdGVkIHRvIGEgSFVCIG9yIFN3aXRjaC5cbiIpOworCQkJIHByX2luZm8oIlRMQU46ICBUcnlpbmcgdG8gZXN0YWJsaXNoIGxpbmsgaW4gdGhlIGJhY2tncm91bmQuLi5cbiIpOwogCQkgfQogCQlUTGFuX1NldFRpbWVyKCBkZXYsICg4KkhaKSwgVExBTl9USU1FUl9QSFlfRklOSVNIX0FOICk7CiAJCXJldHVybjsKQEAgLTI3ODcsNyArMjgwMyw5IEBACiAJCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gVFJVRTsKIAl9CiAKLQlpZiAoICggISAoIG1vZGUgJiAweDAxODAgKSApICYmICggcHJpdi0+YWRhcHRlci0+ZmxhZ3MgJiBUTEFOX0FEQVBURVJfVVNFX0lOVEVSTl8xMCApICYmICggcHJpdi0+cGh5TnVtICE9IDAgKSApIHsKKwlpZiAoICggISAoIG1vZGUgJiAweDAxODAgKSApICYmCisJICAgICAoIHByaXYtPmFkYXB0ZXItPmZsYWdzICYgVExBTl9BREFQVEVSX1VTRV9JTlRFUk5fMTAgKSAmJgorCSAgICAgKCBwcml2LT5waHlOdW0gIT0gMCApICkgewogCQlwcml2LT5waHlOdW0gPSAwOwogCQlkYXRhID0gVExBTl9ORVRfQ0ZHXzFGUkFHIHwgVExBTl9ORVRfQ0ZHXzFDSEFOIHwgVExBTl9ORVRfQ0ZHX1BIWV9FTjsKIAkJVExhbl9EaW9Xcml0ZTE2KCBkZXYtPmJhc2VfYWRkciwgVExBTl9ORVRfQ09ORklHLCBkYXRhICk7CkBAIC0yNzk2LDEyICsyODE0LDE0IEBACiAJfQogCiAJaWYgKCBwcml2LT5waHlOdW0gPT0gMCApIHsKLQkJaWYgKCAoIHByaXYtPmR1cGxleCA9PSBUTEFOX0RVUExFWF9GVUxMICkgfHwgKCBhbl9hZHYgJiBhbl9scGEgJiAweDAwNDAgKSApIHsKLQkJCVRMYW5fTWlpV3JpdGVSZWcoIGRldiwgcGh5LCBNSUlfR0VOX0NUTCwgTUlJX0dDX0FVVE9FTkIgfCBNSUlfR0NfRFVQTEVYICk7Ci0JCQlwcmludGsoICJUTEFOOiAgU3RhcnRpbmcgaW50ZXJuYWwgUEhZIHdpdGggRlVMTC1EVVBMRVhcbiIgKTsKKwkJaWYgKCAoIHByaXYtPmR1cGxleCA9PSBUTEFOX0RVUExFWF9GVUxMICkgfHwKKwkJICAgICAoIGFuX2FkdiAmIGFuX2xwYSAmIDB4MDA0MCApICkgeworCQkJVExhbl9NaWlXcml0ZVJlZyggZGV2LCBwaHksIE1JSV9HRU5fQ1RMLAorCQkJCQkgIE1JSV9HQ19BVVRPRU5CIHwgTUlJX0dDX0RVUExFWCApOworCQkJcHJfaW5mbygiVExBTjogIFN0YXJ0aW5nIGludGVybmFsIFBIWSB3aXRoIEZVTEwtRFVQTEVYXG4iICk7CiAJCX0gZWxzZSB7CiAJCQlUTGFuX01paVdyaXRlUmVnKCBkZXYsIHBoeSwgTUlJX0dFTl9DVEwsIE1JSV9HQ19BVVRPRU5CICk7Ci0JCQlwcmludGsoICJUTEFOOiAgU3RhcnRpbmcgaW50ZXJuYWwgUEhZIHdpdGggSEFMRi1EVVBMRVhcbiIgKTsKKwkJCXByX2luZm8oICJUTEFOOiAgU3RhcnRpbmcgaW50ZXJuYWwgUEhZIHdpdGggSEFMRi1EVVBMRVhcbiIgKTsKIAkJfQogCX0KIApAQCAtMzIwOSw3ICszMjI5LDggQEAKIAlUTGFuX1NldEJpdCggVExBTl9ORVRfU0lPX0VUWEVOLCBzaW8gKTsKIAogCWlmICggKCAhIGVyciApICYmIHN0b3AgKSB7Ci0JCVRMYW5fQ2xlYXJCaXQoIFRMQU5fTkVUX1NJT19FREFUQSwgc2lvICk7CS8qIFNUT1AsIHJhaXNlIGRhdGEgd2hpbGUgY2xvY2sgaXMgaGlnaCAqLworCQkvKiBTVE9QLCByYWlzZSBkYXRhIHdoaWxlIGNsb2NrIGlzIGhpZ2ggKi8KKwkJVExhbl9DbGVhckJpdCggVExBTl9ORVRfU0lPX0VEQVRBLCBzaW8gKTsKIAkJVExhbl9TZXRCaXQoIFRMQU5fTkVUX1NJT19FQ0xPSywgc2lvICk7CiAJCVRMYW5fU2V0Qml0KCBUTEFOX05FVF9TSU9fRURBVEEsIHNpbyApOwogCX0KQEAgLTMyNzIsNyArMzI5Myw4IEBACiAJCVRMYW5fU2V0Qml0KCBUTEFOX05FVF9TSU9fRURBVEEsIHNpbyApOwkJLyogTm8gYWNrID0gMSAoPykgKi8KIAkJVExhbl9TZXRCaXQoIFRMQU5fTkVUX1NJT19FQ0xPSywgc2lvICk7CiAJCVRMYW5fQ2xlYXJCaXQoIFRMQU5fTkVUX1NJT19FQ0xPSywgc2lvICk7Ci0JCVRMYW5fQ2xlYXJCaXQoIFRMQU5fTkVUX1NJT19FREFUQSwgc2lvICk7CS8qIFNUT1AsIHJhaXNlIGRhdGEgd2hpbGUgY2xvY2sgaXMgaGlnaCAqLworCQkvKiBTVE9QLCByYWlzZSBkYXRhIHdoaWxlIGNsb2NrIGlzIGhpZ2ggKi8KKwkJVExhbl9DbGVhckJpdCggVExBTl9ORVRfU0lPX0VEQVRBLCBzaW8gKTsKIAkJVExhbl9TZXRCaXQoIFRMQU5fTkVUX1NJT19FQ0xPSywgc2lvICk7CiAJCVRMYW5fU2V0Qml0KCBUTEFOX05FVF9TSU9fRURBVEEsIHNpbyApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RsYW4uaCBiL2RyaXZlcnMvbmV0L3RsYW4uaAppbmRleCA0MWNlMGI2Li40YjgyZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90bGFuLmgKKysrIGIvZHJpdmVycy9uZXQvdGxhbi5oCkBAIC0xMyw4ICsxMyw2IEBACiAgKiAgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwogICogIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgotICoqIFRoaXMgZmlsZSBpcyBiZXN0IHZpZXdlZC9lZGl0ZWQgd2l0aCB0YWJzdG9wPTQsIGNvbHVtcz49MTMyCi0gKgogICoKICAqICBEZWMgMTAsIDE5OTkJVG9yYmVuIE1hdGhpYXNlbiA8dG9yYmVuLm1hdGhpYXNlbkBjb21wYXEuY29tPgogICoJCQlOZXcgTWFpbnRhaW5lcgpAQCAtNDUsNyArNDMsOSBAQAogI2RlZmluZSBUTEFOX0lHTk9SRQkJMAogI2RlZmluZSBUTEFOX1JFQ09SRAkJMQogCi0jZGVmaW5lIFRMQU5fREJHKGx2bCwgZm9ybWF0LCBhcmdzLi4uKQlpZiAoZGVidWcmbHZsKSBwcmludGsoS0VSTl9ERUJVRyAiVExBTjogIiBmb3JtYXQsICMjYXJncyApOworI2RlZmluZSBUTEFOX0RCRyhsdmwsIGZvcm1hdCwgYXJncy4uLikJXAorCWRvIHsgaWYgKGRlYnVnJmx2bCkgcHJpbnRrKEtFUk5fREVCVUcgIlRMQU46ICIgZm9ybWF0LCAjI2FyZ3MgKTsgfSB3aGlsZSgwKQorCiAjZGVmaW5lIFRMQU5fREVCVUdfR05STAkJMHgwMDAxCiAjZGVmaW5lIFRMQU5fREVCVUdfVFgJCTB4MDAwMgogI2RlZmluZSBUTEFOX0RFQlVHX1JYCQkweDAwMDQKQEAgLTE5NCw3ICsxOTQsNiBAQAogCXUzMgkJCXRpbWVyU2V0QXQ7CiAJdTMyCQkJdGltZXJUeXBlOwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOwogCXN0cnVjdCBib2FyZAkJKmFkYXB0ZXI7CiAJdTMyCQkJYWRhcHRlclJldjsKIAl1MzIJCQlhdWk7CkBAIC0yMDUsNyArMjA0LDYgQEAKIAl1MzIJCQlzcGVlZDsKIAl1OAkJCXRsYW5SZXY7CiAJdTgJCQl0bGFuRnVsbER1cGxleDsKLQljaGFyICAgICAgICAgICAgICAgICAgICBkZXZOYW1lWzhdOwogCXNwaW5sb2NrX3QJCWxvY2s7CiAJdTgJCQlsaW5rOwogCXU4CQkJaXNfZWlzYTsKQEAgLTUxNywxMiArNTE1LDE4IEBACiAgKiAJeG9yKCBhLCB4b3IoIGIsIHhvciggYywgeG9yKCBkLCB4b3IoIGUsIHhvciggZiwgeG9yKCBnLCBoICkgKSApICkgKSApICkKICAqICNkZWZpbmUgREEoIGEsIGJpdCApCQkoICggKHU4KSBhW2JpdC84XSApICYgKCAodTgpICggMSA8PCBiaXQlOCApICkgKQogICoKLSAqIAloYXNoICA9IFhPUjgoIERBKGEsMCksIERBKGEsIDYpLCBEQShhLDEyKSwgREEoYSwxOCksIERBKGEsMjQpLCBEQShhLDMwKSwgREEoYSwzNiksIERBKGEsNDIpICk7Ci0gKiAJaGFzaCB8PSBYT1I4KCBEQShhLDEpLCBEQShhLCA3KSwgREEoYSwxMyksIERBKGEsMTkpLCBEQShhLDI1KSwgREEoYSwzMSksIERBKGEsMzcpLCBEQShhLDQzKSApIDw8IDE7Ci0gKiAJaGFzaCB8PSBYT1I4KCBEQShhLDIpLCBEQShhLCA4KSwgREEoYSwxNCksIERBKGEsMjApLCBEQShhLDI2KSwgREEoYSwzMiksIERBKGEsMzgpLCBEQShhLDQ0KSApIDw8IDI7Ci0gKiAJaGFzaCB8PSBYT1I4KCBEQShhLDMpLCBEQShhLCA5KSwgREEoYSwxNSksIERBKGEsMjEpLCBEQShhLDI3KSwgREEoYSwzMyksIERBKGEsMzkpLCBEQShhLDQ1KSApIDw8IDM7Ci0gKiAJaGFzaCB8PSBYT1I4KCBEQShhLDQpLCBEQShhLDEwKSwgREEoYSwxNiksIERBKGEsMjIpLCBEQShhLDI4KSwgREEoYSwzNCksIERBKGEsNDApLCBEQShhLDQ2KSApIDw8IDQ7Ci0gKiAJaGFzaCB8PSBYT1I4KCBEQShhLDUpLCBEQShhLDExKSwgREEoYSwxNyksIERBKGEsMjMpLCBEQShhLDI5KSwgREEoYSwzNSksIERBKGEsNDEpLCBEQShhLDQ3KSApIDw8IDU7CisgKiAJaGFzaCAgPSBYT1I4KCBEQShhLDApLCBEQShhLCA2KSwgREEoYSwxMiksIERBKGEsMTgpLCBEQShhLDI0KSwKKyAqIAkgICAgICAgICAgICAgIERBKGEsMzApLCBEQShhLDM2KSwgREEoYSw0MikgKTsKKyAqIAloYXNoIHw9IFhPUjgoIERBKGEsMSksIERBKGEsIDcpLCBEQShhLDEzKSwgREEoYSwxOSksIERBKGEsMjUpLAorICogCQkgICAgICBEQShhLDMxKSwgREEoYSwzNyksIERBKGEsNDMpICkgPDwgMTsKKyAqIAloYXNoIHw9IFhPUjgoIERBKGEsMiksIERBKGEsIDgpLCBEQShhLDE0KSwgREEoYSwyMCksIERBKGEsMjYpLAorICogCQkgICAgICBEQShhLDMyKSwgREEoYSwzOCksIERBKGEsNDQpICkgPDwgMjsKKyAqIAloYXNoIHw9IFhPUjgoIERBKGEsMyksIERBKGEsIDkpLCBEQShhLDE1KSwgREEoYSwyMSksIERBKGEsMjcpLAorICogCQkgICAgICBEQShhLDMzKSwgREEoYSwzOSksIERBKGEsNDUpICkgPDwgMzsKKyAqIAloYXNoIHw9IFhPUjgoIERBKGEsNCksIERBKGEsMTApLCBEQShhLDE2KSwgREEoYSwyMiksIERBKGEsMjgpLAorICogCSAgICAgICAgICAgICAgREEoYSwzNCksIERBKGEsNDApLCBEQShhLDQ2KSApIDw8IDQ7CisgKiAJaGFzaCB8PSBYT1I4KCBEQShhLDUpLCBEQShhLDExKSwgREEoYSwxNyksIERBKGEsMjMpLCBEQShhLDI5KSwKKyAqIAkgICAgICAgICAgICAgIERBKGEsMzUpLCBEQShhLDQxKSwgREEoYSw0NykgKSA8PCA1OwogICoKICAqLwogc3RhdGljIGlubGluZSB1MzIgVExhbl9IYXNoRnVuYyggY29uc3QgdTggKmEgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwppbmRleCA0NTIwOGEwLi43NzY2Y2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwpAQCAtMTMyLDcgKzEzMiw2IEBACiBzdGF0aWMgaW50IHhsX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgeGxfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiB4bF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHhsX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKSA7IAogc3RhdGljIHZvaWQgeGxfYXJiX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHhsX2FzYl9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAKQEAgLTM0Myw3ICszNDIsNiBAQAogCWRldi0+c3RvcD0meGxfY2xvc2U7CiAJZGV2LT5kb19pb2N0bD1OVUxMOwogCWRldi0+c2V0X211bHRpY2FzdF9saXN0PSZ4bF9zZXRfcnhfbW9kZTsKLQlkZXYtPmdldF9zdGF0cz0meGxfZ2V0X3N0YXRzIDsKIAlkZXYtPnNldF9tYWNfYWRkcmVzcz0meGxfc2V0X21hY19hZGRyZXNzIDsgCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIApAQCAtOTIxLDcgKzkxOSw3IEBACiAJCQkJCWFkdl9yeF9yaW5nKGRldikgOyAKIAkJCQkKIAkJCQlhZHZfcnhfcmluZyhkZXYpIDsgLyogT25lIG1vcmUgdGltZSBqdXN0IGZvciBsdWNrIDopICovIAotCQkJCXhsX3ByaXYtPnhsX3N0YXRzLnJ4X2Ryb3BwZWQrKyA7IAorCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrIDsgCiAKIAkJCQl3cml0ZWwoQUNLX0lOVEVSUlVQVCB8IFVQQ09NUEFDSyB8IExBVENIX0FDSyAsIHhsX21taW8gKyBNTUlPX0NPTU1BTkQpIDsgCiAJCQkJcmV0dXJuIDsgCQkJCQpAQCAtOTU3LDcgKzk1NSw3IEBACiAJCQlpZiAoc2tiPT1OVUxMKSB7IC8qIFN0aWxsIG5lZWQgdG8gZml4IHRoZSByeCByaW5nICovCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRldl9hbGxvY19za2IgZmFpbGVkIGluIHJ4LCBzaW5nbGUgYnVmZmVyIFxuIixkZXYtPm5hbWUpIDsgCiAJCQkJYWR2X3J4X3JpbmcoZGV2KSA7IAotCQkJCXhsX3ByaXYtPnhsX3N0YXRzLnJ4X2Ryb3BwZWQrKyA7IAorCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrIDsgCiAJCQkJd3JpdGVsKEFDS19JTlRFUlJVUFQgfCBVUENPTVBBQ0sgfCBMQVRDSF9BQ0sgLCB4bF9tbWlvICsgTU1JT19DT01NQU5EKSA7IAogCQkJCXJldHVybiA7IAogCQkJfQpAQCAtOTcxLDggKzk2OSw4IEBACiAJCQl4bF9wcml2LT54bF9yeF9yaW5nW3hsX3ByaXYtPnJ4X3JpbmdfdGFpbF0udXBmcmFnYWRkciA9IGNwdV90b19sZTMyKHBjaV9tYXBfc2luZ2xlKHhsX3ByaXYtPnBkZXYsc2tiLT5kYXRhLHhsX3ByaXYtPnBrdF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSkpOwogCQkJeGxfcHJpdi0+eGxfcnhfcmluZ1t4bF9wcml2LT5yeF9yaW5nX3RhaWxdLnVwZnJhZ2xlbiA9IGNwdV90b19sZTMyKHhsX3ByaXYtPnBrdF9idWZfc3opIHwgUlhVUExBU1RGUkFHOwogCQkJYWR2X3J4X3JpbmcoZGV2KSA7IAotCQkJeGxfcHJpdi0+eGxfc3RhdHMucnhfcGFja2V0cysrIDsgCi0JCQl4bF9wcml2LT54bF9zdGF0cy5yeF9ieXRlcyArPSBmcmFtZV9sZW5ndGggOyAJCisJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKyA7IAorCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBmcmFtZV9sZW5ndGggOyAJCiAKIAkJCW5ldGlmX3J4KHNrYjIpIDsgCQkKIAkJIH0gLyogaWYgbXVsdGlwbGUgYnVmZmVycyAqLwpAQCAtMTE4Miw4ICsxMTgwLDggQEAKIAkJdHhkLT5idWZmZXIgPSBjcHVfdG9fbGUzMihwY2lfbWFwX3NpbmdsZSh4bF9wcml2LT5wZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKSk7CiAJCXR4ZC0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHNrYi0+bGVuKSB8IFRYRE5GUkFHTEFTVDsKIAkJeGxfcHJpdi0+dHhfcmluZ19za2JbdHhfaGVhZF0gPSBza2IgOyAKLQkJeGxfcHJpdi0+eGxfc3RhdHMudHhfcGFja2V0cysrIDsgCi0JCXhsX3ByaXYtPnhsX3N0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuIDsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKysgOyAKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbiA7CiAKIAkJLyogCiAJCSAqIFNldCB0aGUgbmV4dHB0ciBvZiB0aGUgcHJldmlvdXMgZGVzY3JpcHRvciBlcXVhbCB0byB0aGlzIGRlc2NyaXB0b3IsIGFkZCBYTF9UWF9SSU5HX1NJWkUgLTEgCkBAIC0xNDYzLDEyICsxNDYxLDYgQEAKIAlyZXR1cm4gOyAJCiB9IAogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiB4bF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgeGxfcHJpdmF0ZSAqeGxfcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSAmeGxfcHJpdi0+eGxfc3RhdHM7IAotfQotCiBzdGF0aWMgaW50IHhsX3NldF9tYWNfYWRkcmVzcyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikgCiB7CiAJc3RydWN0IHNvY2thZGRyICpzYWRkciA9IGFkZHIgOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmgKaW5kZXggNzRjZjhlMS4uNjZiMWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmgKQEAgLTI3Myw4ICsyNzMsNiBAQAogCXN0cnVjdCB3YWl0X3F1ZXVlICpzcmJfd2FpdDsKIAl2b2xhdGlsZSBpbnQgYXNiX3F1ZXVlZDsgICAKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHhsX3N0YXRzIDsKLQogCXUxNiBtYWNfYnVmZmVyIDsgCQogCXUxNiB4bF9sYW5fc3RhdHVzIDsKIAl1OCB4bF9yaW5nX3NwZWVkIDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwppbmRleCA2MDE3ZDUyLi40M2ZkZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCkBAIC04MDMsNyArODAzLDggQEAKIAkJaW50IHJ4ID0gZGF0YS0+cnhoZWFkOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JCWRhdGEtPnJ4c2tic1tyeF0gPSBza2IgPSBkZXZfYWxsb2Nfc2tiKFRTSTEwOF9SWEJVRl9TSVpFICsgMik7CisJCWRhdGEtPnJ4c2tic1tyeF0gPSBza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwKKwkJCQkJCQkgIFRTSTEwOF9SWEJVRl9TSVpFICsgMik7CiAJCWlmICghc2tiKQogCQkJYnJlYWs7CiAKQEAgLTEzNTIsOCArMTM1Myw5IEBACiAJZGF0YS0+cnhoZWFkID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBUU0kxMDhfUlhSSU5HX0xFTjsgaSsrKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKFRTSTEwOF9SWEJVRl9TSVpFICsgTkVUX0lQX0FMSUdOKTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAorCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgVFNJMTA4X1JYQlVGX1NJWkUgKyBORVRfSVBfQUxJR04pOwogCQlpZiAoIXNrYikgewogCQkJLyogQmFoLiAgTm8gbWVtb3J5IGZvciBub3csIGJ1dCBtYXliZSB3ZSdsbCBnZXQKIAkJCSAqIHNvbWUgbW9yZSBsYXRlci4KQEAgLTE0MzUsNyArMTQzNyw2IEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CiAKLQlzeW5jaHJvbml6ZV9pcnEoZGF0YS0+aXJxX251bSk7CiAJZnJlZV9pcnEoZGF0YS0+aXJxX251bSwgZGV2KTsKIAogCS8qIERpc2NhcmQgdGhlIFJYIHJpbmcuICovCkBAIC0xNTI2LDcgKzE1MjcsNyBAQAogCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwotCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPnR4bG9jaywgZmxhZ3MpOwogCXJjID0gbWlpX2V0aHRvb2xfZ3NldCgmZGF0YS0+bWlpX2lmLCBjbWQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPnR4bG9jaywgZmxhZ3MpOwpAQCAtMTU0Myw3ICsxNTQ0LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+dHhsb2NrLCBmbGFncyk7CiAJcmMgPSBtaWlfZXRodG9vbF9zc2V0KCZkYXRhLT5taWlfaWYsIGNtZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+dHhsb2NrLCBmbGFncyk7Ci0JCisKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwLzIxMTQyLmMgYi9kcml2ZXJzL25ldC90dWxpcC8yMTE0Mi5jCmluZGV4IDZjNDAwY2MuLjEyMTBmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwLzIxMTQyLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYwpAQCAtMSw3ICsxLDYgQEAKIC8qCiAJZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYwogCi0JTWFpbnRhaW5lZCBieSBWYWxlcmllIEhlbnNvbiA8dmFsX2hlbnNvbkBsaW51eC5pbnRlbC5jb20+CiAJQ29weXJpZ2h0IDIwMDAsMjAwMSAgVGhlIExpbnV4IEtlcm5lbCBUZWFtCiAJV3JpdHRlbi9jb3B5cmlnaHQgMTk5NC0yMDAxIGJ5IERvbmFsZCBCZWNrZXIuCiAKQEAgLTksOSArOCw4IEBACiAJb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KIAogCVBsZWFzZSByZWZlciB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdHVsaXAtdXNlci57cGRmLHBzLGh0bWx9Ci0JZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIsIG9yIHZpc2l0IHRoZSBwcm9qZWN0Ci0JV2ViIHBhZ2UgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90dWxpcC8KLQorCWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLgorCVBsZWFzZSBzdWJtaXQgYnVncyB0byBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy8gLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKaW5kZXggMWI1ZWRkNi4uOTI4MWQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwpAQCAtMTI0LDggKzEyNCw2IEBACiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCiAjZGVmaW5lIFRYX1RJTUVPVVQJCSg2KkhaKQogCi0jZGVmaW5lIERFX1VOQUxJR05FRF8xNihhKQkodTE2KShnZXRfdW5hbGlnbmVkKCh1MTYgKikoYSkpKQotCiAvKiBUaGlzIGlzIGEgbXlzdGVyaW91cyB2YWx1ZSB0aGF0IGNhbiBiZSB3cml0dGVuIHRvIENTUjExIGluIHRoZSAyMTA0MCAob25seSkKICAgIHRvIHN1cHBvcnQgYSBwcmUtTldheSBmdWxsLWR1cGxleCBzaWduYWxpbmcgbWVjaGFuaXNtIHVzaW5nIHNob3J0IGZyYW1lcy4KICAgIE5vIG9uZSBrbm93cyB3aGF0IGl0IHNob3VsZCBiZSwgYnV0IGlmIGxlZnQgYXQgaXRzIGRlZmF1bHQgdmFsdWUgc29tZQpAQCAtMTgxMSw3ICsxODA5LDcgQEAKIAkJZ290byBiYWRfc3JvbTsKIAogCS8qIGdldCBkZWZhdWx0IG1lZGlhIHR5cGUgKi8KLQlzd2l0Y2ggKERFX1VOQUxJR05FRF8xNigmaWwtPmRlZmF1bHRfbWVkaWEpKSB7CisJc3dpdGNoIChnZXRfdW5hbGlnbmVkKCZpbC0+ZGVmYXVsdF9tZWRpYSkpIHsKIAljYXNlIDB4MDAwMTogIGRlLT5tZWRpYV90eXBlID0gREVfTUVESUFfQk5DOyBicmVhazsKIAljYXNlIDB4MDAwMjogIGRlLT5tZWRpYV90eXBlID0gREVfTUVESUFfQVVJOyBicmVhazsKIAljYXNlIDB4MDIwNDogIGRlLT5tZWRpYV90eXBlID0gREVfTUVESUFfVFBfRkQ7IGJyZWFrOwpAQCAtMTg3NSw5ICsxODczLDkgQEAKIAkJYnVmcCArPSBzaXplb2YgKGliLT5vcHRzKTsKIAogCQlpZiAoaWItPm9wdHMgJiBNZWRpYUN1c3RvbUNTUnMpIHsKLQkJCWRlLT5tZWRpYVtpZHhdLmNzcjEzID0gREVfVU5BTElHTkVEXzE2KCZpYi0+Y3NyMTMpOwotCQkJZGUtPm1lZGlhW2lkeF0uY3NyMTQgPSBERV9VTkFMSUdORURfMTYoJmliLT5jc3IxNCk7Ci0JCQlkZS0+bWVkaWFbaWR4XS5jc3IxNSA9IERFX1VOQUxJR05FRF8xNigmaWItPmNzcjE1KTsKKwkJCWRlLT5tZWRpYVtpZHhdLmNzcjEzID0gZ2V0X3VuYWxpZ25lZCgmaWItPmNzcjEzKTsKKwkJCWRlLT5tZWRpYVtpZHhdLmNzcjE0ID0gZ2V0X3VuYWxpZ25lZCgmaWItPmNzcjE0KTsKKwkJCWRlLT5tZWRpYVtpZHhdLmNzcjE1ID0gZ2V0X3VuYWxpZ25lZCgmaWItPmNzcjE1KTsKIAkJCWJ1ZnAgKz0gc2l6ZW9mKGliLT5jc3IxMykgKyBzaXplb2YoaWItPmNzcjE0KSArCiAJCQkJc2l6ZW9mKGliLT5jc3IxNSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IGJjMzBjNmUuLjYxN2VmNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwpAQCAtNTUxNCwyMiArNTUxNCw2IEBACiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOyAgICAgICAgICAgICAgICAgICAgICAvKiBVbmxvY2sgdGhlIFRYIHJpbmcgKi8KIAlicmVhazsKIAotICAgIGNhc2UgREU0WDVfU0VUX1BST006ICAgICAgICAgICAgIC8qIFNldCBQcm9taXNjdW91cyBNb2RlICovCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSByZXR1cm4gLUVQRVJNOwotCW9tciA9IGlubChERTRYNV9PTVIpOwotCW9tciB8PSBPTVJfUFI7Ci0Jb3V0bChvbXIsIERFNFg1X09NUik7Ci0JZGV2LT5mbGFncyB8PSBJRkZfUFJPTUlTQzsKLQlicmVhazsKLQotICAgIGNhc2UgREU0WDVfQ0xSX1BST006ICAgICAgICAgICAgIC8qIENsZWFyIFByb21pc2N1b3VzIE1vZGUgKi8KLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHJldHVybiAtRVBFUk07Ci0Jb21yID0gaW5sKERFNFg1X09NUik7Ci0Jb21yICY9IH5PTVJfUFI7Ci0Jb3V0bChvbXIsIERFNFg1X09NUik7Ci0JZGV2LT5mbGFncyAmPSB+SUZGX1BST01JU0M7Ci0JYnJlYWs7Ci0KICAgICBjYXNlIERFNFg1X1NBWV9CT086ICAgICAgICAgICAgICAvKiBTYXkgIkJvbyEiIHRvIHRoZSBrZXJuZWwgbG9nIGZpbGUgKi8KIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHJldHVybiAtRVBFUk07CiAJcHJpbnRrKCIlczogQm9vIVxuIiwgZGV2LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmggYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5oCmluZGV4IGY1ZjMzYjMuLjlmMjg3NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmgKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuaApAQCAtMTAwNCw4ICsxMDA0LDcgQEAKICovCiAjZGVmaW5lIERFNFg1X0dFVF9IV0FERFIJMHgwMSAvKiBHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3MgKi8KICNkZWZpbmUgREU0WDVfU0VUX0hXQUREUgkweDAyIC8qIFNldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyAqLwotI2RlZmluZSBERTRYNV9TRVRfUFJPTSAgCTB4MDMgLyogU2V0IFByb21pc2N1b3VzIE1vZGUgKi8KLSNkZWZpbmUgREU0WDVfQ0xSX1BST00gIAkweDA0IC8qIENsZWFyIFByb21pc2N1b3VzIE1vZGUgKi8KKy8qIDB4MDMgYW5kIDB4MDQgd2VyZSB1c2VkIGJlZm9yZSBhbmQgYXJlIG9ic29sZXRlZCBub3cuIERvbid0IHVzZSB0aGVtLiAqLwogI2RlZmluZSBERTRYNV9TQVlfQk9PCSAgICAgICAgMHgwNSAvKiBTYXkgIkJvbyEiIHRvIHRoZSBrZXJuZWwgbG9nIGZpbGUgKi8KICNkZWZpbmUgREU0WDVfR0VUX01DQSAgIAkweDA2IC8qIEdldCBhIG11bHRpY2FzdCBhZGRyZXNzICovCiAjZGVmaW5lIERFNFg1X1NFVF9NQ0EgICAJMHgwNyAvKiBTZXQgYSBtdWx0aWNhc3QgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYwppbmRleCBkYTIyMDZmLi4wZGNjZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYwpAQCAtMSw3ICsxLDYgQEAKIC8qCiAJZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKIAotCU1haW50YWluZWQgYnkgVmFsZXJpZSBIZW5zb24gPHZhbF9oZW5zb25AbGludXguaW50ZWwuY29tPgogCUNvcHlyaWdodCAyMDAwLDIwMDEgIFRoZSBMaW51eCBLZXJuZWwgVGVhbQogCVdyaXR0ZW4vY29weXJpZ2h0IDE5OTQtMjAwMSBieSBEb25hbGQgQmVja2VyLgogCkBAIC05LDkgKzgsOCBAQAogCW9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAKIAlQbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3R1bGlwLXVzZXIue3BkZixwcyxodG1sfQotCWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLCBvciB2aXNpdCB0aGUgcHJvamVjdAotCVdlYiBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdHVsaXAvCi0KKwlmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlci4KKwlQbGVhc2Ugc3VibWl0IGJ1ZyByZXBvcnRzIHRvIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnLy4KICovCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKaW5kZXggNjI4NGFmZC4uYzZiYWQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKQEAgLTEsNyArMSw2IEBACiAvKgogCWRyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCiAKLQlNYWludGFpbmVkIGJ5IFZhbGVyaWUgSGVuc29uIDx2YWxfaGVuc29uQGxpbnV4LmludGVsLmNvbT4KIAlDb3B5cmlnaHQgMjAwMCwyMDAxICBUaGUgTGludXggS2VybmVsIFRlYW0KIAlXcml0dGVuL2NvcHlyaWdodCAxOTk0LTIwMDEgYnkgRG9uYWxkIEJlY2tlci4KIApAQCAtOSw4ICs4LDggQEAKIAlvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogCiAJUGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay90dWxpcC11c2VyLntwZGYscHMsaHRtbH0KLQlmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciwgb3IgdmlzaXQgdGhlIHByb2plY3QKLQlXZWIgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3R1bGlwLworCWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLgorICAgICAgICBQbGVhc2Ugc3VibWl0IGJ1Z3MgdG8gaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvIC4KIAogKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKaW5kZXggYjU2MjU2Ni4uOTFjZjljOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCkBAIC0xLDcgKzEsNiBAQAogLyoKIAlkcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCiAKLQlNYWludGFpbmVkIGJ5IFZhbGVyaWUgSGVuc29uIDx2YWxfaGVuc29uQGxpbnV4LmludGVsLmNvbT4KIAlDb3B5cmlnaHQgMjAwMCwyMDAxICBUaGUgTGludXggS2VybmVsIFRlYW0KIAlXcml0dGVuL2NvcHlyaWdodCAxOTk0LTIwMDEgYnkgRG9uYWxkIEJlY2tlci4KIApAQCAtOSw5ICs4LDkgQEAKIAlvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogCiAJUGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay90dWxpcC11c2VyLntwZGYscHMsaHRtbH0KLQlmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciwgb3IgdmlzaXQgdGhlIHByb2plY3QKLQlXZWIgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3R1bGlwLworCWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLgogCisJUGxlYXNlIHN1Ym1pdCBidWdzIHRvIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnLyAuCiAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9wbmljLmMgYi9kcml2ZXJzL25ldC90dWxpcC9wbmljLmMKaW5kZXggYmU4MmEyZS4uZDMyNTNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYwpAQCAtMSw3ICsxLDYgQEAKIC8qCiAJZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jCiAKLQlNYWludGFpbmVkIGJ5IFZhbGVyaWUgSGVuc29uIDx2YWxfaGVuc29uQGxpbnV4LmludGVsLmNvbT4KIAlDb3B5cmlnaHQgMjAwMCwyMDAxICBUaGUgTGludXggS2VybmVsIFRlYW0KIAlXcml0dGVuL2NvcHlyaWdodCAxOTk0LTIwMDEgYnkgRG9uYWxkIEJlY2tlci4KIApAQCAtOSw5ICs4LDkgQEAKIAlvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogCiAJUGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay90dWxpcC11c2VyLntwZGYscHMsaHRtbH0KLQlmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciwgb3IgdmlzaXQgdGhlIHByb2plY3QKLQlXZWIgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3R1bGlwLworCWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLgogCisJUGxlYXNlIHN1Ym1pdCBidWdzIHRvIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnLyAuCiAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9wbmljMi5jIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYzIuYwppbmRleCA0ZTRhODc5Li5mNDk1NzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9wbmljMi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMyLmMKQEAgLTEsNyArMSw2IEBACiAvKgogCWRyaXZlcnMvbmV0L3R1bGlwL3BuaWMyLmMKIAotCU1haW50YWluZWQgYnkgVmFsZXJpZSBIZW5zb24gPHZhbF9oZW5zb25AbGludXguaW50ZWwuY29tPgogCUNvcHlyaWdodCAyMDAwLDIwMDEgIFRoZSBMaW51eCBLZXJuZWwgVGVhbQogCVdyaXR0ZW4vY29weXJpZ2h0IDE5OTQtMjAwMSBieSBEb25hbGQgQmVja2VyLgogICAgICAgICBNb2RpZmllZCB0byBoZXAgc3VwcG9ydCBQTklDX0lJIGJ5IEtldmluIEIuIEhlbmRyaWNrcwpAQCAtMTAsOSArOSw5IEBACiAJb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KIAogCVBsZWFzZSByZWZlciB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdHVsaXAtdXNlci57cGRmLHBzLGh0bWx9Ci0JZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIsIG9yIHZpc2l0IHRoZSBwcm9qZWN0Ci0JV2ViIHBhZ2UgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90dWxpcC8KKwlmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlci4KIAorICAgICAgICBQbGVhc2Ugc3VibWl0IGJ1Z3MgdG8gaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvIC4KICovCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdGltZXIuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3RpbWVyLmMKaW5kZXggZDJjMWY0Mi4uYTBlMDg0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdGltZXIuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC90aW1lci5jCkBAIC0xLDcgKzEsNiBAQAogLyoKIAlkcml2ZXJzL25ldC90dWxpcC90aW1lci5jCiAKLQlNYWludGFpbmVkIGJ5IFZhbGVyaWUgSGVuc29uIDx2YWxfaGVuc29uQGxpbnV4LmludGVsLmNvbT4KIAlDb3B5cmlnaHQgMjAwMCwyMDAxICBUaGUgTGludXggS2VybmVsIFRlYW0KIAlXcml0dGVuL2NvcHlyaWdodCAxOTk0LTIwMDEgYnkgRG9uYWxkIEJlY2tlci4KIApAQCAtOSwxMSArOCwxMiBAQAogCW9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAKIAlQbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3R1bGlwLXVzZXIue3BkZixwcyxodG1sfQotCWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLCBvciB2aXNpdCB0aGUgcHJvamVjdAotCVdlYiBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdHVsaXAvCisJZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIuCiAKKwlQbGVhc2Ugc3VibWl0IGJ1Z3MgdG8gaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvIC4KICovCiAKKwogI2luY2x1ZGUgInR1bGlwLmgiCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaCBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKaW5kZXggOTJjNjhhMi4uMTlhYmJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAorKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCkBAIC04LDkgKzgsOSBAQAogCW9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAKIAlQbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3R1bGlwLXVzZXIue3BkZixwcyxodG1sfQotCWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLCBvciB2aXNpdCB0aGUgcHJvamVjdAotCVdlYiBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdHVsaXAvCisJZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIuCiAKKwlQbGVhc2Ugc3VibWl0IGJ1Z3MgdG8gaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvIC4KICovCiAKICNpZm5kZWYgX19ORVRfVFVMSVBfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKaW5kZXggYWY4ZDJjNC4uY2FmYTg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwpAQCAtMSw3ICsxLDUgQEAKLS8qIHR1bGlwX2NvcmUuYzogQSBERUMgMjF4NHgtZmFtaWx5IGV0aGVybmV0IGRyaXZlciBmb3IgTGludXguICovCisvKgl0dWxpcF9jb3JlLmM6IEEgREVDIDIxeDR4LWZhbWlseSBldGhlcm5ldCBkcml2ZXIgZm9yIExpbnV4LgogCi0vKgotCU1haW50YWluZWQgYnkgVmFsZXJpZSBIZW5zb24gPHZhbF9oZW5zb25AbGludXguaW50ZWwuY29tPgogCUNvcHlyaWdodCAyMDAwLDIwMDEgIFRoZSBMaW51eCBLZXJuZWwgVGVhbQogCVdyaXR0ZW4vY29weXJpZ2h0IDE5OTQtMjAwMSBieSBEb25hbGQgQmVja2VyLgogCkBAIC05LDkgKzcsOSBAQAogCW9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAKIAlQbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3R1bGlwLXVzZXIue3BkZixwcyxodG1sfQotCWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLCBvciB2aXNpdCB0aGUgcHJvamVjdAotCVdlYiBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdHVsaXAvCisJZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIuCiAKKwlQbGVhc2Ugc3VibWl0IGJ1Z3MgdG8gaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvIC4KICovCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCBlYmExMjcxLi5lNmJiYzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtMTgsMTUgKzE4LDExIEBACiAvKgogICogIENoYW5nZXM6CiAgKgotICogIEJyaWFuIEJyYXVuc3RlaW4gPGxpbnV4a2VybmVsQGJyaXN0eWxlLmNvbT4gMjAwNy8wMy8yMwotICogICAgRml4ZWQgaHcgYWRkcmVzcyBoYW5kbGluZy4gIE5vdyBuZXRfZGV2aWNlLmRldl9hZGRyIGlzIGtlcHQgY29uc2lzdGVudAotICogICAgd2l0aCB0dW4uZGV2X2FkZHIgd2hlbiB0aGUgYWRkcmVzcyBpcyBzZXQgYnkgdGhpcyBtb2R1bGUuCi0gKgogICogIE1pa2UgS2Vyc2hhdyA8ZHJhZ29ybkBraXNtZXR3aXJlbGVzcy5uZXQ+IDIwMDUvMDgvMTQKICAqICAgIEFkZCBUVU5TRVRMSU5LIGlvY3RsIHRvIHNldCB0aGUgbGluayBlbmNhcHN1bGF0aW9uCiAgKgogICogIE1hcmsgU21pdGggPG1hcmt6enpzbWl0aEB5YWhvby5jb20uYXU+Ci0gKiAgIFVzZSByYW5kb21fZXRoZXJfYWRkcigpIGZvciB0YXAgTUFDIGFkZHJlc3MuCisgKiAgICBVc2UgcmFuZG9tX2V0aGVyX2FkZHIoKSBmb3IgdGFwIE1BQyBhZGRyZXNzLgogICoKICAqICBIYXJhbGQgUm9lbGxlIDxoYXJhbGQucm9lbGxlQGlmaS5sbXUuZGU+ICAyMDA0LzA0LzIwCiAgKiAgICBGaXhlcyBpbiBwYWNrZXQgZHJvcHBpbmcsIHF1ZXVlIGxlbmd0aCBzZXR0aW5nIGFuZCBxdWV1ZSB3YWtldXAuCkBAIC02NCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfdHVuLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KIApAQCAtODMsOSArODAsMTYgQEAKICNkZWZpbmUgREJHMSggYS4uLiApCiAjZW5kaWYKIAorI2RlZmluZSBGTFRfRVhBQ1RfQ09VTlQgOAorc3RydWN0IHRhcF9maWx0ZXIgeworCXVuc2lnbmVkIGludCAgICBjb3VudDsgICAgLyogTnVtYmVyIG9mIGFkZHJzLiBaZXJvIG1lYW5zIGRpc2FibGVkICovCisJdTMyICAgICAgICAgICAgIG1hc2tbMl07ICAvKiBNYXNrIG9mIHRoZSBoYXNoZWQgYWRkcnMgKi8KKwl1bnNpZ25lZCBjaGFyCWFkZHJbRkxUX0VYQUNUX0NPVU5UXVtFVEhfQUxFTl07Cit9OworCiBzdHJ1Y3QgdHVuX3N0cnVjdCB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsKLQl1bnNpZ25lZCBsb25nIAkJZmxhZ3M7CisJdW5zaWduZWQgaW50IAkJZmxhZ3M7CiAJaW50CQkJYXR0YWNoZWQ7CiAJdWlkX3QJCQlvd25lcjsKIAlnaWRfdAkJCWdyb3VwOwpAQCAtOTQsMTkgKzk4LDExOSBAQAogCXN0cnVjdCBza19idWZmX2hlYWQJcmVhZHE7CiAKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCXN0cnVjdCBmYXN5bmNfc3RydWN0CSpmYXN5bmM7CiAKLQlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAgICAqZmFzeW5jOwotCi0JdW5zaWduZWQgbG9uZyBpZl9mbGFnczsKLQl1OCBkZXZfYWRkcltFVEhfQUxFTl07Ci0JdTMyIGNocl9maWx0ZXJbMl07Ci0JdTMyIG5ldF9maWx0ZXJbMl07CisJc3RydWN0IHRhcF9maWx0ZXIgICAgICAgdHhmbHQ7CiAKICNpZmRlZiBUVU5fREVCVUcKIAlpbnQgZGVidWc7CiAjZW5kaWYKIH07CiAKKy8qIFRBUCBmaWx0ZXJ0aW5nICovCitzdGF0aWMgdm9pZCBhZGRyX2hhc2hfc2V0KHUzMiAqbWFzaywgY29uc3QgdTggKmFkZHIpCit7CisJaW50IG4gPSBldGhlcl9jcmMoRVRIX0FMRU4sIGFkZHIpID4+IDI2OworCW1hc2tbbiA+PiA1XSB8PSAoMSA8PCAobiAmIDMxKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWRkcl9oYXNoX3Rlc3QoY29uc3QgdTMyICptYXNrLCBjb25zdCB1OCAqYWRkcikKK3sKKwlpbnQgbiA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgYWRkcikgPj4gMjY7CisJcmV0dXJuIG1hc2tbbiA+PiA1XSAmICgxIDw8IChuICYgMzEpKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfZmlsdGVyKHN0cnVjdCB0YXBfZmlsdGVyICpmaWx0ZXIsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHsgdTggdVtFVEhfQUxFTl07IH0gKmFkZHI7CisJc3RydWN0IHR1bl9maWx0ZXIgdWY7CisJaW50IGVyciwgYWxlbiwgbiwgbmV4YWN0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1ZiwgYXJnLCBzaXplb2YodWYpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIXVmLmNvdW50KSB7CisJCS8qIERpc2FibGVkICovCisJCWZpbHRlci0+Y291bnQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlhbGVuID0gRVRIX0FMRU4gKiB1Zi5jb3VudDsKKwlhZGRyID0ga21hbGxvYyhhbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGFkZHIsIGFyZyArIHNpemVvZih1ZiksIGFsZW4pKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBUaGUgZmlsdGVyIGlzIHVwZGF0ZWQgd2l0aG91dCBob2xkaW5nIGFueSBsb2Nrcy4gV2hpY2ggaXMKKwkgKiBwZXJmZWN0bHkgc2FmZS4gV2UgZGlzYWJsZSBpdCBmaXJzdCBhbmQgaW4gdGhlIHdvcnN0CisJICogY2FzZSB3ZSdsbCBhY2NlcHQgYSBmZXcgdW5kZXNpcmVkIHBhY2tldHMuICovCisJZmlsdGVyLT5jb3VudCA9IDA7CisJd21iKCk7CisKKwkvKiBVc2UgZmlyc3Qgc2V0IG9mIGFkZHJlc3NlcyBhcyBhbiBleGFjdCBmaWx0ZXIgKi8KKwlmb3IgKG4gPSAwOyBuIDwgdWYuY291bnQgJiYgbiA8IEZMVF9FWEFDVF9DT1VOVDsgbisrKQorCQltZW1jcHkoZmlsdGVyLT5hZGRyW25dLCBhZGRyW25dLnUsIEVUSF9BTEVOKTsKKworCW5leGFjdCA9IG47CisKKwkvKiBUaGUgcmVzdCBpcyBoYXNoZWQgKi8KKwltZW1zZXQoZmlsdGVyLT5tYXNrLCAwLCBzaXplb2YoZmlsdGVyLT5tYXNrKSk7CisJZm9yICg7IG4gPCB1Zi5jb3VudDsgbisrKQorCQlhZGRyX2hhc2hfc2V0KGZpbHRlci0+bWFzaywgYWRkcltuXS51KTsKKworCS8qIEZvciBBTExNVUxUSSBqdXN0IHNldCB0aGUgbWFzayB0byBhbGwgb25lcy4KKwkgKiBUaGlzIG92ZXJyaWRlcyB0aGUgbWFzayBwb3B1bGF0ZWQgYWJvdmUuICovCisJaWYgKCh1Zi5mbGFncyAmIFRVTl9GTFRfQUxMTVVMVEkpKQorCQltZW1zZXQoZmlsdGVyLT5tYXNrLCB+MCwgc2l6ZW9mKGZpbHRlci0+bWFzaykpOworCisJLyogTm93IGVuYWJsZSB0aGUgZmlsdGVyICovCisJd21iKCk7CisJZmlsdGVyLT5jb3VudCA9IG5leGFjdDsKKworCS8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGV4YWN0IGZpbHRlcnMgKi8KKwllcnIgPSBuZXhhY3Q7CisKK2RvbmU6CisJa2ZyZWUoYWRkcik7CisJcmV0dXJuIGVycjsKK30KKworLyogUmV0dXJuczogMCAtIGRyb3AsICE9MCAtIGFjY2VwdCAqLworc3RhdGljIGludCBydW5fZmlsdGVyKHN0cnVjdCB0YXBfZmlsdGVyICpmaWx0ZXIsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJLyogQ2Fubm90IHVzZSBldGhfaGRyKHNrYikgaGVyZSBiZWNhdXNlIHNrYl9tYWNfaGRyKCkgaXMgaW5jb3JyZWN0CisJICogYXQgdGhpcyBwb2ludC4gKi8KKwlzdHJ1Y3QgZXRoaGRyICplaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0+ZGF0YTsKKwlpbnQgaTsKKworCS8qIEV4YWN0IG1hdGNoICovCisJZm9yIChpID0gMDsgaSA8IGZpbHRlci0+Y291bnQ7IGkrKykKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZWgtPmhfZGVzdCwgZmlsdGVyLT5hZGRyW2ldKSkKKwkJCXJldHVybiAxOworCisJLyogSW5leGFjdCBtYXRjaCAobXVsdGljYXN0IG9ubHkpICovCisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGVoLT5oX2Rlc3QpKQorCQlyZXR1cm4gYWRkcl9oYXNoX3Rlc3QoZmlsdGVyLT5tYXNrLCBlaC0+aF9kZXN0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIHBhY2tldCBpcyBhY2NlcHRlZCBvciBub3QuCisgKiBSZXR1cm5zOiAwIC0gZHJvcCwgIT0wIC0gYWNjZXB0CisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfZmlsdGVyKHN0cnVjdCB0YXBfZmlsdGVyICpmaWx0ZXIsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKCFmaWx0ZXItPmNvdW50KQorCQlyZXR1cm4gMTsKKworCXJldHVybiBydW5fZmlsdGVyKGZpbHRlciwgc2tiKTsKK30KKwogLyogTmV0d29yayBkZXZpY2UgcGFydCBvZiB0aGUgZHJpdmVyICovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHVuX25ldF9pZDsKQEAgLTE0MSw3ICsyNDUsMTIgQEAKIAlpZiAoIXR1bi0+YXR0YWNoZWQpCiAJCWdvdG8gZHJvcDsKIAotCS8qIFBhY2tldCBkcm9wcGluZyAqLworCS8qIERyb3AgaWYgdGhlIGZpbHRlciBkb2VzIG5vdCBsaWtlIGl0LgorCSAqIFRoaXMgaXMgYSBub29wIGlmIHRoZSBmaWx0ZXIgaXMgZGlzYWJsZWQuCisJICogRmlsdGVyIGNhbiBiZSBlbmFibGVkIG9ubHkgZm9yIHRoZSBUQVAgZGV2aWNlcy4gKi8KKwlpZiAoIWNoZWNrX2ZpbHRlcigmdHVuLT50eGZsdCwgc2tiKSkKKwkJZ290byBkcm9wOworCiAJaWYgKHNrYl9xdWV1ZV9sZW4oJnR1bi0+cmVhZHEpID49IGRldi0+dHhfcXVldWVfbGVuKSB7CiAJCWlmICghKHR1bi0+ZmxhZ3MgJiBUVU5fT05FX1FVRVVFKSkgewogCQkJLyogTm9ybWFsIHF1ZXVlaW5nIG1vZGUuICovCkBAIC0xNTgsNyArMjY3LDcgQEAKIAkJfQogCX0KIAotCS8qIFF1ZXVlIHBhY2tldCAqLworCS8qIEVucXVldWUgcGFja2V0ICovCiAJc2tiX3F1ZXVlX3RhaWwoJnR1bi0+cmVhZHEsIHNrYik7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKQEAgLTE3NCw0MSArMjgzLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKiBBZGQgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBhZGRyZXNzIHRvIHRoaXMgbXVsdGljYXN0IGZpbHRlci4gKi8KLXN0YXRpYyB2b2lkCi1hZGRfbXVsdGkodTMyKiBmaWx0ZXIsIGNvbnN0IHU4KiBhZGRyKQorc3RhdGljIHZvaWQgdHVuX25ldF9tY2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpbnQgYml0X25yID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBhZGRyKSA+PiAyNjsKLQlmaWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKLX0KLQotLyoqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIEV0aGVybmV0IGFkZHJlcyBmcm9tIHRoaXMgbXVsdGljYXN0IGZpbHRlci4gKi8KLXN0YXRpYyB2b2lkCi1kZWxfbXVsdGkodTMyKiBmaWx0ZXIsIGNvbnN0IHU4KiBhZGRyKQotewotCWludCBiaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIGFkZHIpID4+IDI2OwotCWZpbHRlcltiaXRfbnIgPj4gNV0gJj0gfigxIDw8IChiaXRfbnIgJiAzMSkpOwotfQotCi0vKiogVXBkYXRlIHRoZSBsaXN0IG9mIG11bHRpY2FzdCBncm91cHMgdG8gd2hpY2ggdGhlIG5ldHdvcmsgZGV2aWNlIGJlbG9uZ3MuCi0gKiBUaGlzIGxpc3QgaXMgdXNlZCB0byBmaWx0ZXIgcGFja2V0cyBiZWluZyBzZW50IGZyb20gdGhlIGNoYXJhY3RlciBkZXZpY2UgdG8KLSAqIHRoZSBuZXR3b3JrIGRldmljZS4gKi8KLXN0YXRpYyB2b2lkCi10dW5fbmV0X21jbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwotCWNvbnN0IHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCWludCBpOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCURCRyhLRVJOX0RFQlVHICIlczogdHVuX25ldF9tY2xpc3Q6IG1jX2NvdW50ICVkXG4iLAotCQkJZGV2LT5uYW1lLCBkZXYtPm1jX2NvdW50KTsKLQltZW1zZXQodHVuLT5jaHJfZmlsdGVyLCAwLCBzaXplb2YgdHVuLT5jaHJfZmlsdGVyKTsKLQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IGkgPCBkZXYtPm1jX2NvdW50ICYmIG1jbGlzdCAhPSBOVUxMOwotCQkJaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQkJYWRkX211bHRpKHR1bi0+bmV0X2ZpbHRlciwgbWNsaXN0LT5kbWlfYWRkcik7Ci0JCURCRyhLRVJOX0RFQlVHICIlczogdHVuX25ldF9tY2xpc3Q6ICVzXG4iLAotCQkgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtY2xpc3QtPmRtaV9hZGRyKSk7Ci0JfQorCS8qCisJICogVGhpcyBjYWxsYmFjayBpcyBzdXBwb3NlZCB0byBkZWFsIHdpdGggbWMgZmlsdGVyIGluCisJICogX3J4XyBwYXRoIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBfdHhfIHBhdGguCisJICogSW4gcnggcGF0aCB3ZSBhbHdheXMgYWNjZXB0IGV2ZXJ5dGhpbmcgdXNlcnNwYWNlIGdpdmVzIHVzLgorCSAqLworCXJldHVybjsKIH0KIAogI2RlZmluZSBNSU5fTVRVIDY4CkBAIC0yNDQsMTMgKzMyNiwxMSBAQAogCiAJY2FzZSBUVU5fVEFQX0RFVjoKIAkJLyogRXRoZXJuZXQgVEFQIERldmljZSAqLworCQlldGhlcl9zZXR1cChkZXYpOworCQlkZXYtPmNoYW5nZV9tdHUgICAgICAgICA9IHR1bl9uZXRfY2hhbmdlX210dTsKIAkJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB0dW5fbmV0X21jbGlzdDsKIAotCQlldGhlcl9zZXR1cChkZXYpOwotCQlkZXYtPmNoYW5nZV9tdHUgPSB0dW5fbmV0X2NoYW5nZV9tdHU7Ci0KLQkJLyogcmFuZG9tIGFkZHJlc3MgYWxyZWFkeSBjcmVhdGVkIGZvciB1cyBieSB0dW5fc2V0X2lmZiwgdXNlIGl0ICovCi0JCW1lbWNweShkZXYtPmRldl9hZGRyLCB0dW4tPmRldl9hZGRyLCBtaW4oc2l6ZW9mKHR1bi0+ZGV2X2FkZHIpLCBzaXplb2YoZGV2LT5kZXZfYWRkcikpICk7CisJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCiAJCWRldi0+dHhfcXVldWVfbGVuID0gVFVOX1JFQURRX1NJWkU7ICAvKiBXZSBwcmVmZXIgb3VyIG93biBxdWV1ZSBsZW5ndGggKi8KIAkJYnJlYWs7CkBAIC0yODQsNiArMzY0LDcgQEAKIAlzdHJ1Y3QgdHVuX3BpIHBpID0geyAwLCBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSB9OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IGxlbiA9IGNvdW50LCBhbGlnbiA9IDA7CisJc3RydWN0IHZpcnRpb19uZXRfaGRyIGdzbyA9IHsgMCB9OwogCiAJaWYgKCEodHVuLT5mbGFncyAmIFRVTl9OT19QSSkpIHsKIAkJaWYgKChsZW4gLT0gc2l6ZW9mKHBpKSkgPiBjb3VudCkKQEAgLTI5Myw2ICszNzQsMTcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAorCWlmICh0dW4tPmZsYWdzICYgVFVOX1ZORVRfSERSKSB7CisJCWlmICgobGVuIC09IHNpemVvZihnc28pKSA+IGNvdW50KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKG1lbWNweV9mcm9taW92ZWMoKHZvaWQgKikmZ3NvLCBpdiwgc2l6ZW9mKGdzbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGdzby5oZHJfbGVuID4gbGVuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKCh0dW4tPmZsYWdzICYgVFVOX1RZUEVfTUFTSykgPT0gVFVOX1RBUF9ERVYpIHsKIAkJYWxpZ24gPSBORVRfSVBfQUxJR047CiAJCWlmICh1bmxpa2VseShsZW4gPCBFVEhfSExFTikpCkBAIC0zMTIsNiArNDA0LDE2IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAorCWlmIChnc28uZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU0pIHsKKwkJaWYgKCFza2JfcGFydGlhbF9jc3VtX3NldChza2IsIGdzby5jc3VtX3N0YXJ0LAorCQkJCQkgIGdzby5jc3VtX29mZnNldCkpIHsKKwkJCXR1bi0+ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fTk9DSEVDS1NVTSkKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwogCXN3aXRjaCAodHVuLT5mbGFncyAmIFRVTl9UWVBFX01BU0spIHsKIAljYXNlIFRVTl9UVU5fREVWOgogCQlpZiAodHVuLT5mbGFncyAmIFRVTl9OT19QSSkgewpAQCAtMzM4LDggKzQ0MCwzNSBAQAogCQlicmVhazsKIAl9OwogCi0JaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fTk9DSEVDS1NVTSkKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwlpZiAoZ3NvLmdzb190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19OT05FKSB7CisJCXByX2RlYnVnKCJHU08hXG4iKTsKKwkJc3dpdGNoIChnc28uZ3NvX3R5cGUgJiB+VklSVElPX05FVF9IRFJfR1NPX0VDTikgeworCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNDoKKwkJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY0OworCQkJYnJlYWs7CisJCWNhc2UgVklSVElPX05FVF9IRFJfR1NPX1RDUFY2OgorCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IFNLQl9HU09fVENQVjY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXR1bi0+ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoZ3NvLmdzb190eXBlICYgVklSVElPX05FVF9IRFJfR1NPX0VDTikKKwkJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgfD0gU0tCX0dTT19UQ1BfRUNOOworCisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSBnc28uZ3NvX3NpemU7CisJCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID09IDApIHsKKwkJCXR1bi0+ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgY29tcHV0ZWQuICovCisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgfD0gU0tCX0dTT19ET0RHWTsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyA9IDA7CisJfQogCiAJbmV0aWZfcnhfbmkoc2tiKTsKIAl0dW4tPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CkBAIC0zODUsNiArNTE0LDM5IEBACiAJCXRvdGFsICs9IHNpemVvZihwaSk7CiAJfQogCisJaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fVk5FVF9IRFIpIHsKKwkJc3RydWN0IHZpcnRpb19uZXRfaGRyIGdzbyA9IHsgMCB9OyAvKiBubyBpbmZvIGxlYWsgKi8KKwkJaWYgKChsZW4gLT0gc2l6ZW9mKGdzbykpIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChza2JfaXNfZ3NvKHNrYikpIHsKKwkJCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpbmZvID0gc2tiX3NoaW5mbyhza2IpOworCisJCQkvKiBUaGlzIGlzIGEgaGludCBhcyB0byBob3cgbXVjaCBzaG91bGQgYmUgbGluZWFyLiAqLworCQkJZ3NvLmhkcl9sZW4gPSBza2JfaGVhZGxlbihza2IpOworCQkJZ3NvLmdzb19zaXplID0gc2luZm8tPmdzb19zaXplOworCQkJaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjQpCisJCQkJZ3NvLmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX1RDUFY0OworCQkJZWxzZSBpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19UQ1BWNikKKwkJCQlnc28uZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY7CisJCQllbHNlCisJCQkJQlVHKCk7CisJCQlpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19UQ1BfRUNOKQorCQkJCWdzby5nc29fdHlwZSB8PSBWSVJUSU9fTkVUX0hEUl9HU09fRUNOOworCQl9IGVsc2UKKwkJCWdzby5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19OT05FOworCisJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQlnc28uZmxhZ3MgPSBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU07CisJCQlnc28uY3N1bV9zdGFydCA9IHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpOworCQkJZ3NvLmNzdW1fb2Zmc2V0ID0gc2tiLT5jc3VtX29mZnNldDsKKwkJfSAvKiBlbHNlIGV2ZXJ5dGhpbmcgaXMgemVybyAqLworCisJCWlmICh1bmxpa2VseShtZW1jcHlfdG9pb3ZlYyhpdiwgKHZvaWQgKikmZ3NvLCBzaXplb2YoZ3NvKSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXRvdGFsICs9IHNpemVvZihnc28pOworCX0KKwogCWxlbiA9IG1pbl90KGludCwgc2tiLT5sZW4sIGxlbik7CiAKIAlza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIDAsIGl2LCBsZW4pOwpAQCAtNDA0LDcgKzU2Niw2IEBACiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzc2l6ZV90IGxlbiwgcmV0ID0gMDsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWlmICghdHVuKQogCQlyZXR1cm4gLUVCQURGRDsKQEAgLTQxNywxMCArNTc4LDYgQEAKIAogCWFkZF93YWl0X3F1ZXVlKCZ0dW4tPnJlYWRfd2FpdCwgJndhaXQpOwogCXdoaWxlIChsZW4pIHsKLQkJY29uc3QgdTggb25lc1sgRVRIX0FMRU5dID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0JCXU4IGFkZHJbIEVUSF9BTEVOXTsKLQkJaW50IGJpdF9ucjsKLQogCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKIAogCQkvKiBSZWFkIGZyYW1lcyBmcm9tIHRoZSBxdWV1ZSAqLwpAQCAtNDQwLDM2ICs1OTcsOSBAQAogCQl9CiAJCW5ldGlmX3dha2VfcXVldWUodHVuLT5kZXYpOwogCi0JCS8qKiBEZWNpZGUgd2hldGhlciB0byBhY2NlcHQgdGhpcyBwYWNrZXQuIFRoaXMgY29kZSBpcyBkZXNpZ25lZCB0bwotCQkgKiBiZWhhdmUgaWRlbnRpY2FsbHkgdG8gYW4gRXRoZXJuZXQgaW50ZXJmYWNlLiBBY2NlcHQgdGhlIHBhY2tldCBpZgotCQkgKiAtIHdlIGFyZSBwcm9taXNjdW91cy4KLQkJICogLSB0aGUgcGFja2V0IGlzIGFkZHJlc3NlZCB0byB1cy4KLQkJICogLSB0aGUgcGFja2V0IGlzIGJyb2FkY2FzdC4KLQkJICogLSB0aGUgcGFja2V0IGlzIG11bHRpY2FzdCBhbmQKLQkJICogICAtIHdlIGFyZSBtdWx0aWNhc3QgcHJvbWlzY291cy4KLQkJICogICAtIHdlIGJlbG9uZyB0byB0aGUgbXVsdGljYXN0IGdyb3VwLgotCQkgKi8KLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIGFkZHIsIG1pbl90KHNpemVfdCwgc2l6ZW9mIGFkZHIsCi0JCQkJCQkJCSAgIHNrYi0+bGVuKSk7Ci0JCWJpdF9uciA9IGV0aGVyX2NyYyhzaXplb2YgYWRkciwgYWRkcikgPj4gMjY7Ci0JCWlmICgodHVuLT5pZl9mbGFncyAmIElGRl9QUk9NSVNDKSB8fAotCQkJCW1lbWNtcChhZGRyLCB0dW4tPmRldl9hZGRyLCBzaXplb2YgYWRkcikgPT0gMCB8fAotCQkJCW1lbWNtcChhZGRyLCBvbmVzLCBzaXplb2YgYWRkcikgPT0gMCB8fAotCQkJCSgoKGFkZHJbMF0gPT0gMSAmJiBhZGRyWzFdID09IDAgJiYgYWRkclsyXSA9PSAweDVlKSB8fAotCQkJCSAgKGFkZHJbMF0gPT0gMHgzMyAmJiBhZGRyWzFdID09IDB4MzMpKSAmJgotCQkJCSAoKHR1bi0+aWZfZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JCQkJICAodHVuLT5jaHJfZmlsdGVyW2JpdF9uciA+PiA1XSAmICgxIDw8IChiaXRfbnIgJiAzMSkpKSkpKSB7Ci0JCQlEQkcoS0VSTl9ERUJVRyAiJXM6IHR1bl9jaHJfcmVhZHY6IGFjY2VwdGVkOiAlc1xuIiwKLQkJCQkJdHVuLT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGFkZHIpKTsKLQkJCXJldCA9IHR1bl9wdXRfdXNlcih0dW4sIHNrYiwgKHN0cnVjdCBpb3ZlYyAqKSBpdiwgbGVuKTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQlEQkcoS0VSTl9ERUJVRyAiJXM6IHR1bl9jaHJfcmVhZHY6IHJlamVjdGVkOiAlc1xuIiwKLQkJCQkJdHVuLT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGFkZHIpKTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJY29udGludWU7Ci0JCX0KKwkJcmV0ID0gdHVuX3B1dF91c2VyKHR1biwgc2tiLCAoc3RydWN0IGlvdmVjICopIGl2LCBsZW4pOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJYnJlYWs7CiAJfQogCiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CkBAIC01NjUsMTIgKzY5NSw3IEBACiAJCXR1biA9IG5ldGRldl9wcml2KGRldik7CiAJCXR1bi0+ZGV2ID0gZGV2OwogCQl0dW4tPmZsYWdzID0gZmxhZ3M7Ci0JCS8qIEJlIHByb21pc2N1b3VzIGJ5IGRlZmF1bHQgdG8gbWFpbnRhaW4gcHJldmlvdXMgYmVoYXZpb3VyLiAqLwotCQl0dW4tPmlmX2ZsYWdzID0gSUZGX1BST01JU0M7Ci0JCS8qIEdlbmVyYXRlIHJhbmRvbSBFdGhlcm5ldCBhZGRyZXNzLiAqLwotCQkqKF9fYmUxNiAqKXR1bi0+ZGV2X2FkZHIgPSBodG9ucygweDAwRkYpOwotCQlnZXRfcmFuZG9tX2J5dGVzKHR1bi0+ZGV2X2FkZHIgKyBzaXplb2YodTE2KSwgNCk7Ci0JCW1lbXNldCh0dW4tPmNocl9maWx0ZXIsIDAsIHNpemVvZiB0dW4tPmNocl9maWx0ZXIpOworCQl0dW4tPnR4Zmx0LmNvdW50ID0gMDsKIAogCQl0dW5fbmV0X2luaXQoZGV2KTsKIApAQCAtNTk5LDYgKzcyNCwxMSBAQAogCWVsc2UKIAkJdHVuLT5mbGFncyAmPSB+VFVOX09ORV9RVUVVRTsKIAorCWlmIChpZnItPmlmcl9mbGFncyAmIElGRl9WTkVUX0hEUikKKwkJdHVuLT5mbGFncyB8PSBUVU5fVk5FVF9IRFI7CisJZWxzZQorCQl0dW4tPmZsYWdzICY9IH5UVU5fVk5FVF9IRFI7CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSB0dW47CiAJdHVuLT5hdHRhY2hlZCA9IDE7CiAJZ2V0X25ldChkZXZfbmV0KHR1bi0+ZGV2KSk7CkBAIC02MTgsMTIgKzc0OCw1MyBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qIFRoaXMgaXMgbGlrZSBhIGN1dC1kb3duIGV0aHRvb2wgb3BzLCBleGNlcHQgZG9uZSB2aWEgdHVuIGZkIHNvIG5vCisgKiBwcml2cyByZXF1aXJlZC4gKi8KK3N0YXRpYyBpbnQgc2V0X29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgaW50IG9sZF9mZWF0dXJlcywgZmVhdHVyZXM7CisKKwlvbGRfZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzOworCS8qIFVuc2V0IGZlYXR1cmVzLCBzZXQgdGhlbSBhcyB3ZSBjaGV3IG9uIHRoZSBhcmcuICovCisJZmVhdHVyZXMgPSAob2xkX2ZlYXR1cmVzICYgfihORVRJRl9GX0hXX0NTVU18TkVUSUZfRl9TR3xORVRJRl9GX0ZSQUdMSVNUCisJCQkJICAgIHxORVRJRl9GX1RTT19FQ058TkVUSUZfRl9UU098TkVUSUZfRl9UU082KSk7CisKKwlpZiAoYXJnICYgVFVOX0ZfQ1NVTSkgeworCQlmZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU18TkVUSUZfRl9TR3xORVRJRl9GX0ZSQUdMSVNUOworCQlhcmcgJj0gflRVTl9GX0NTVU07CisKKwkJaWYgKGFyZyAmIChUVU5fRl9UU080fFRVTl9GX1RTTzYpKSB7CisJCQlpZiAoYXJnICYgVFVOX0ZfVFNPX0VDTikgeworCQkJCWZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPX0VDTjsKKwkJCQlhcmcgJj0gflRVTl9GX1RTT19FQ047CisJCQl9CisJCQlpZiAoYXJnICYgVFVOX0ZfVFNPNCkKKwkJCQlmZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKKwkJCWlmIChhcmcgJiBUVU5fRl9UU082KQorCQkJCWZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwkJCWFyZyAmPSB+KFRVTl9GX1RTTzR8VFVOX0ZfVFNPNik7CisJCX0KKwl9CisKKwkvKiBUaGlzIGdpdmVzIHRoZSB1c2VyIGEgd2F5IHRvIHRlc3QgZm9yIG5ldyBmZWF0dXJlcyBpbiBmdXR1cmUgYnkKKwkgKiB0cnlpbmcgdG8gc2V0IHRoZW0uICovCisJaWYgKGFyZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7CisJaWYgKG9sZF9mZWF0dXJlcyAhPSBkZXYtPmZlYXR1cmVzKQorCQluZXRkZXZfZmVhdHVyZXNfY2hhbmdlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB0dW5fY2hyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIqIGFyZ3AgPSAodm9pZCBfX3VzZXIqKWFyZzsKIAlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXQ7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlpZiAoY21kID09IFRVTlNFVElGRiB8fCBfSU9DX1RZUEUoY21kKSA9PSAweDg5KQpAQCAtNjQ3LDYgKzgxOCwxNSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoY21kID09IFRVTkdFVEZFQVRVUkVTKSB7CisJCS8qIEN1cnJlbnRseSB0aGlzIGp1c3QgbWVhbnM6ICJ3aGF0IElGRiBmbGFncyBhcmUgdmFsaWQ/Ii4KKwkJICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZXZlciBjaGVja2VkIGZvciBpbnZhbGlkIGZsYWdzIG9uCisJCSAqIFRVTlNFVElGRi4gKi8KKwkJcmV0dXJuIHB1dF91c2VyKElGRl9UVU4gfCBJRkZfVEFQIHwgSUZGX05PX1BJIHwgSUZGX09ORV9RVUVVRSB8CisJCQkJSUZGX1ZORVRfSERSLAorCQkJCSh1bnNpZ25lZCBpbnQgX191c2VyKilhcmdwKTsKKwl9CisKIAlpZiAoIXR1bikKIAkJcmV0dXJuIC1FQkFERkQ7CiAKQEAgLTY5MCw5ICs4NzAsNiBAQAogCQlicmVhazsKIAogCWNhc2UgVFVOU0VUTElOSzoKLQl7Ci0JCWludCByZXQ7Ci0KIAkJLyogT25seSBhbGxvdyBzZXR0aW5nIHRoZSB0eXBlIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duICovCiAJCXJ0bmxfbG9jaygpOwogCQlpZiAodHVuLT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7CkBAIC03MDYsODUgKzg4Myw0NCBAQAogCQl9CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybiByZXQ7Ci0JfQogCiAjaWZkZWYgVFVOX0RFQlVHCiAJY2FzZSBUVU5TRVRERUJVRzoKIAkJdHVuLT5kZWJ1ZyA9IGFyZzsKIAkJYnJlYWs7CiAjZW5kaWYKKwljYXNlIFRVTlNFVE9GRkxPQUQ6CisJCXJ0bmxfbG9jaygpOworCQlyZXQgPSBzZXRfb2ZmbG9hZCh0dW4tPmRldiwgYXJnKTsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuIHJldDsKIAotCWNhc2UgU0lPQ0dJRkZMQUdTOgotCQlpZnIuaWZyX2ZsYWdzID0gdHVuLT5pZl9mbGFnczsKLQkJaWYgKGNvcHlfdG9fdXNlciggYXJncCwgJmlmciwgc2l6ZW9mIGlmcikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNJT0NTSUZGTEFHUzoKLQkJLyoqIFNldCB0aGUgY2hhcmFjdGVyIGRldmljZSdzIGludGVyZmFjZSBmbGFncy4gQ3VycmVudGx5IG9ubHkKLQkJICogSUZGX1BST01JU0MgYW5kIElGRl9BTExNVUxUSSBhcmUgdXNlZC4gKi8KLQkJdHVuLT5pZl9mbGFncyA9IGlmci5pZnJfZmxhZ3M7Ci0JCURCRyhLRVJOX0lORk8gIiVzOiBpbnRlcmZhY2UgZmxhZ3MgMHglbHhcbiIsCi0JCQkJdHVuLT5kZXYtPm5hbWUsIHR1bi0+aWZfZmxhZ3MpOwotCQlyZXR1cm4gMDsKKwljYXNlIFRVTlNFVFRYRklMVEVSOgorCQkvKiBDYW4gYmUgc2V0IG9ubHkgZm9yIFRBUHMgKi8KKwkJaWYgKCh0dW4tPmZsYWdzICYgVFVOX1RZUEVfTUFTSykgIT0gVFVOX1RBUF9ERVYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcnRubF9sb2NrKCk7CisJCXJldCA9IHVwZGF0ZV9maWx0ZXIoJnR1bi0+dHhmbHQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiByZXQ7CiAKIAljYXNlIFNJT0NHSUZIV0FERFI6Ci0JCS8qIE5vdGU6IHRoZSBhY3R1YWwgbmV0IGRldmljZSdzIGFkZHJlc3MgbWF5IGJlIGRpZmZlcmVudCAqLwotCQltZW1jcHkoaWZyLmlmcl9od2FkZHIuc2FfZGF0YSwgdHVuLT5kZXZfYWRkciwKLQkJCQltaW4oc2l6ZW9mIGlmci5pZnJfaHdhZGRyLnNhX2RhdGEsIHNpemVvZiB0dW4tPmRldl9hZGRyKSk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoIGFyZ3AsICZpZnIsIHNpemVvZiBpZnIpKQorCQkvKiBHZXQgaHcgYWRkcmVzICovCisJCW1lbWNweShpZnIuaWZyX2h3YWRkci5zYV9kYXRhLCB0dW4tPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJaWZyLmlmcl9od2FkZHIuc2FfZmFtaWx5ID0gdHVuLT5kZXYtPnR5cGU7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlmciwgc2l6ZW9mIGlmcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNJT0NTSUZIV0FERFI6Ci0JewotCQkvKiB0cnkgdG8gc2V0IHRoZSBhY3R1YWwgbmV0IGRldmljZSdzIGh3IGFkZHJlc3MgKi8KLQkJaW50IHJldDsKKwkJLyogU2V0IGh3IGFkZHJlc3MgKi8KKwkJREJHKEtFUk5fREVCVUcgIiVzOiBzZXQgaHcgYWRkcmVzczogJXNcbiIsCisJCQl0dW4tPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaWZyLmlmcl9od2FkZHIuc2FfZGF0YSkpOwogCiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSBkZXZfc2V0X21hY19hZGRyZXNzKHR1bi0+ZGV2LCAmaWZyLmlmcl9od2FkZHIpOwogCQlydG5sX3VubG9jaygpOwotCi0JCWlmIChyZXQgPT0gMCkgewotCQkJLyoqIFNldCB0aGUgY2hhcmFjdGVyIGRldmljZSdzIGhhcmR3YXJlIGFkZHJlc3MuIFRoaXMgaXMgdXNlZCB3aGVuCi0JCQkgKiBmaWx0ZXJpbmcgcGFja2V0cyBiZWluZyBzZW50IGZyb20gdGhlIG5ldHdvcmsgZGV2aWNlIHRvIHRoZSBjaGFyYWN0ZXIKLQkJCSAqIGRldmljZS4gKi8KLQkJCW1lbWNweSh0dW4tPmRldl9hZGRyLCBpZnIuaWZyX2h3YWRkci5zYV9kYXRhLAotCQkJCQltaW4oc2l6ZW9mIGlmci5pZnJfaHdhZGRyLnNhX2RhdGEsIHNpemVvZiB0dW4tPmRldl9hZGRyKSk7Ci0JCQlEQkcoS0VSTl9ERUJVRyAiJXM6IHNldCBoYXJkd2FyZSBhZGRyZXNzOiAleDoleDoleDoleDoleDoleFxuIiwKLQkJCQkJdHVuLT5kZXYtPm5hbWUsCi0JCQkJCXR1bi0+ZGV2X2FkZHJbMF0sIHR1bi0+ZGV2X2FkZHJbMV0sIHR1bi0+ZGV2X2FkZHJbMl0sCi0JCQkJCXR1bi0+ZGV2X2FkZHJbM10sIHR1bi0+ZGV2X2FkZHJbNF0sIHR1bi0+ZGV2X2FkZHJbNV0pOwotCQl9Ci0KLQkJcmV0dXJuICByZXQ7Ci0JfQotCi0JY2FzZSBTSU9DQURETVVMVEk6Ci0JCS8qKiBBZGQgdGhlIHNwZWNpZmllZCBncm91cCB0byB0aGUgY2hhcmFjdGVyIGRldmljZSdzIG11bHRpY2FzdCBmaWx0ZXIKLQkJICogbGlzdC4gKi8KLQkJcnRubF9sb2NrKCk7Ci0JCW5ldGlmX3R4X2xvY2tfYmgodHVuLT5kZXYpOwotCQlhZGRfbXVsdGkodHVuLT5jaHJfZmlsdGVyLCBpZnIuaWZyX2h3YWRkci5zYV9kYXRhKTsKLQkJbmV0aWZfdHhfdW5sb2NrX2JoKHR1bi0+ZGV2KTsKLQkJcnRubF91bmxvY2soKTsKLQotCQlEQkcoS0VSTl9ERUJVRyAiJXM6IGFkZCBtdWx0aTogJXNcbiIsCi0JCSAgICB0dW4tPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaWZyLmlmcl9od2FkZHIuc2FfZGF0YSkpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgU0lPQ0RFTE1VTFRJOgotCQkvKiogUmVtb3ZlIHRoZSBzcGVjaWZpZWQgZ3JvdXAgZnJvbSB0aGUgY2hhcmFjdGVyIGRldmljZSdzIG11bHRpY2FzdAotCQkgKiBmaWx0ZXIgbGlzdC4gKi8KLQkJcnRubF9sb2NrKCk7Ci0JCW5ldGlmX3R4X2xvY2tfYmgodHVuLT5kZXYpOwotCQlkZWxfbXVsdGkodHVuLT5jaHJfZmlsdGVyLCBpZnIuaWZyX2h3YWRkci5zYV9kYXRhKTsKLQkJbmV0aWZfdHhfdW5sb2NrX2JoKHR1bi0+ZGV2KTsKLQkJcnRubF91bmxvY2soKTsKLQotCQlEQkcoS0VSTl9ERUJVRyAiJXM6IGRlbCBtdWx0aTogJXNcbiIsCi0JCSAgICB0dW4tPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaWZyLmlmcl9od2FkZHIuc2FfZGF0YSkpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHJldDsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IGMwZGQyNWIuLjg1NDlmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTMzNCw4ICszMzQsNiBAQAogI2RlZmluZSBUWVBIT09OX1JFU0VUX1RJTUVPVVRfTk9TTEVFUAkoKDYgKiAxMDAwMDAwKSAvIFRZUEhPT05fVURFTEFZKQogI2RlZmluZSBUWVBIT09OX1dBSVRfVElNRU9VVAkJKCgxMDAwMDAwIC8gMikgLyBUWVBIT09OX1VERUxBWSkKIAotI2RlZmluZSB0eXBob29uX3N5bmNocm9uaXplX2lycSh4KSBzeW5jaHJvbml6ZV9pcnEoeCkKLQogI2lmIGRlZmluZWQoTkVUSUZfRl9UU08pCiAjZGVmaW5lIHNrYl90c29fc2l6ZSh4KQkJKHNrYl9zaGluZm8oeCktPmdzb19zaXplKQogI2RlZmluZSBUU09fTlVNX0RFU0NSSVBUT1JTCTIKQEAgLTIxNDMsNyArMjE0MSw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBzdG9wIHJ1bnRpbWVcbiIsIGRldi0+bmFtZSk7CiAKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gaXJxIGhhbmRsZXIgcnVubmluZyBvbiBhIGRpZmZlcmVudCBDUFUuICovCi0JdHlwaG9vbl9zeW5jaHJvbml6ZV9pcnEoZGV2LT5pcnEpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCiAJdHlwaG9vbl9mcmVlX3J4X3JpbmdzKHRwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCmluZGV4IDQwMmU4MTAuLjhmOTQ0ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwpAQCAtMTU4OCw3ICsxNTg4LDYgQEAKIAkJaWYgKCF1Z2V0aC0+b2xkbGluaykgewogCQkJbmV3X3N0YXRlID0gMTsKIAkJCXVnZXRoLT5vbGRsaW5rID0gMTsKLQkJCW5ldGlmX3NjaGVkdWxlKGRldik7CiAJCX0KIAl9IGVsc2UgaWYgKHVnZXRoLT5vbGRsaW5rKSB7CiAJCQluZXdfc3RhdGUgPSAxOwpAQCAtMzM3Miw3ICszMzcxLDcgQEAKIAkJdWNjX2dldGhfc3RhcnR1cCh1Z2V0aCk7CiAJfQogCi0JbmV0aWZfc2NoZWR1bGUoZGV2KTsKKwluZXRpZl90eF9zY2hlZHVsZV9hbGwoZGV2KTsKIH0KIAogLyogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGtlcm5lbCB3aGVuIGEgZnJhbWUgaXMgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbi4gKi8KQEAgLTM1MDAsMTEgKzM0OTksNyBAQAogCiAJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKIAkJCS8qIFNlbmQgdGhlIHBhY2tldCB1cCB0aGUgc3RhY2sgKi8KLSNpZmRlZiBDT05GSUdfVUdFVEhfTkFQSQogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLSNlbHNlCi0JCQluZXRpZl9yeChza2IpOwotI2VuZGlmCQkJCS8qIENPTkZJR19VR0VUSF9OQVBJICovCiAJCX0KIAogCQl1Z2V0aC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKQEAgLTM1ODAsNyArMzU3NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVUdFVEhfTkFQSQogc3RhdGljIGludCB1Y2NfZ2V0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHVjY19nZXRoX3ByaXZhdGUsIG5hcGkpOwpAQCAtMzYwNyw3ICszNjAxLDYgQEAKIAogCXJldHVybiBob3dtYW55OwogfQotI2VuZGlmCQkJCS8qIENPTkZJR19VR0VUSF9OQVBJICovCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB1Y2NfZ2V0aF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICppbmZvKQogewpAQCAtMzYxNyw5ICszNjEwLDYgQEAKIAlzdHJ1Y3QgdWNjX2dldGhfaW5mbyAqdWdfaW5mbzsKIAlyZWdpc3RlciB1MzIgdWNjZTsKIAlyZWdpc3RlciB1MzIgdWNjbTsKLSNpZm5kZWYgQ09ORklHX1VHRVRIX05BUEkKLQlyZWdpc3RlciB1MzIgcnhfbWFzazsKLSNlbmRpZgogCXJlZ2lzdGVyIHUzMiB0eF9tYXNrOwogCXU4IGk7CiAKQEAgLTM2MzYsMjEgKzM2MjYsMTEgQEAKIAogCS8qIGNoZWNrIGZvciByZWNlaXZlIGV2ZW50cyB0aGF0IHJlcXVpcmUgcHJvY2Vzc2luZyAqLwogCWlmICh1Y2NlICYgVUNDRV9SWF9FVkVOVFMpIHsKLSNpZmRlZiBDT05GSUdfVUdFVEhfTkFQSQogCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYsICZ1Z2V0aC0+bmFwaSkpIHsKIAkJCXVjY20gJj0gflVDQ0VfUlhfRVZFTlRTOwogCQkJb3V0X2JlMzIodWNjZi0+cF91Y2NtLCB1Y2NtKTsKIAkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2LCAmdWdldGgtPm5hcGkpOwogCQl9Ci0jZWxzZQotCQlyeF9tYXNrID0gVUNDRV9SWEJGX1NJTkdMRV9NQVNLOwotCQlmb3IgKGkgPSAwOyBpIDwgdWdfaW5mby0+bnVtUXVldWVzUng7IGkrKykgewotCQkJaWYgKHVjY2UgJiByeF9tYXNrKQotCQkJCXVjY19nZXRoX3J4KHVnZXRoLCBpLCAoaW50KXVnZXRoLT51Z19pbmZvLT5iZFJpbmdMZW5SeFtpXSk7Ci0JCQl1Y2NlICY9IH5yeF9tYXNrOwotCQkJcnhfbWFzayA8PD0gMTsKLQkJfQotI2VuZGlmIC8qIENPTkZJR19VR0VUSF9OQVBJICovCiAJfQogCiAJLyogVHggZXZlbnQgcHJvY2Vzc2luZyAqLwpAQCAtMzcyMCw5ICszNzAwLDggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLSNpZmRlZiBDT05GSUdfVUdFVEhfTkFQSQogCW5hcGlfZW5hYmxlKCZ1Z2V0aC0+bmFwaSk7Ci0jZW5kaWYKKwogCWVyciA9IHVjY19nZXRoX3N0YXJ0dXAodWdldGgpOwogCWlmIChlcnIpIHsKIAkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKQEAgLTM3ODMsOSArMzc2Miw4IEBACiAJcmV0dXJuIGVycjsKIAogb3V0X2VycjoKLSNpZmRlZiBDT05GSUdfVUdFVEhfTkFQSQogCW5hcGlfZGlzYWJsZSgmdWdldGgtPm5hcGkpOwotI2VuZGlmCisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zNzk2LDkgKzM3NzQsNyBAQAogCiAJdWdldGhfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKIAotI2lmZGVmIENPTkZJR19VR0VUSF9OQVBJCiAJbmFwaV9kaXNhYmxlKCZ1Z2V0aC0+bmFwaSk7Ci0jZW5kaWYKIAogCXVjY19nZXRoX3N0b3AodWdldGgpOwogCkBAIC00MDUwLDkgKzQwMjYsNyBAQAogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdWNjX2dldGhfc3RhcnRfeG1pdDsKIAlkZXYtPnR4X3RpbWVvdXQgPSB1Y2NfZ2V0aF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2lmZGVmIENPTkZJR19VR0VUSF9OQVBJCiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdWdldGgtPm5hcGksIHVjY19nZXRoX3BvbGwsIFVDQ19HRVRIX0RFVl9XRUlHSFQpOwotI2VuZGlmCQkJCS8qIENPTkZJR19VR0VUSF9OQVBJICovCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAlkZXYtPnBvbGxfY29udHJvbGxlciA9IHVjY19uZXRwb2xsOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKaW5kZXggZjU4MzljNC4uY2ZiYmZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBBdXRob3I6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CiAgKgotICogTGltaXRhdGlvbjogCisgKiBMaW1pdGF0aW9uOgogICogQ2FuIG9ubHkgZ2V0L3NldCBzZXR0dGluZ3Mgb2YgdGhlIGZpcnN0IHF1ZXVlLgogICogTmVlZCB0byByZS1vcGVuIHRoZSBpbnRlcmZhY2UgbWFudWFsbHkgYWZ0ZXIgY2hhbmdpbmcgc29tZSBwYXJhbXRlcnMuCiAgKgpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAl1Z2V0aC0+dWdfaW5mby0+cmVjZWl2ZUZsb3dDb250cm9sID0gcGF1c2UtPnJ4X3BhdXNlOwogCXVnZXRoLT51Z19pbmZvLT50cmFuc21pdEZsb3dDb250cm9sID0gcGF1c2UtPnR4X3BhdXNlOwotCQorCiAJaWYgKHVnZXRoLT5waHlkZXYtPmF1dG9uZWcpIHsKIAkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQkJLyogRklYTUU6IGF1dG9tYXRpY2FsbHkgcmVzdGFydCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL0tjb25maWcgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwppbmRleCAwNjA0ZjNmLi42OGUxOThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwpAQCAtMTU0LDYgKzE1NCwxNiBAQAogCSAgVGhpcyBkcml2ZXIgY3JlYXRlcyBhbiBpbnRlcmZhY2UgbmFtZWQgImV0aFgiLCB3aGVyZSBYIGRlcGVuZHMgb24KIAkgIHdoYXQgb3RoZXIgbmV0d29ya2luZyBkZXZpY2VzIHlvdSBoYXZlIGluIHVzZS4KIAorY29uZmlnIFVTQl9IU08KKwl0cmlzdGF0ZSAiT3B0aW9uIFVTQiBIaWdoIFNwZWVkIE1vYmlsZSBEZXZpY2VzIgorCWRlcGVuZHMgb24gVVNCICYmIFJGS0lMTAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBPcHRpb24gSFNEUEEvSFNVUEEgY2FyZC4KKwkgIFRoZXNlIGNhcmRzIHN1cHBvcnQgZG93bmxpbmsgc3BlZWRzIG9mIDcuMk1icHMgb3IgZ3JlYXRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaHNvLgogCiBjb25maWcgVVNCX05FVF9DRENFVEhFUgogCXRyaXN0YXRlICJDREMgRXRoZXJuZXQgc3VwcG9ydCAoc21hcnQgZGV2aWNlcyBzdWNoIGFzIGNhYmxlIG1vZGVtcykiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUKaW5kZXggNTk1YTUzOS4uMjQ4MDBjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIG9iai0kKENPTkZJR19VU0JfS0FXRVRIKQkrPSBrYXdldGgubwogb2JqLSQoQ09ORklHX1VTQl9QRUdBU1VTKQkrPSBwZWdhc3VzLm8KIG9iai0kKENPTkZJR19VU0JfUlRMODE1MCkJKz0gcnRsODE1MC5vCitvYmotJChDT05GSUdfVVNCX0hTTykJCSs9IGhzby5vCiBvYmotJChDT05GSUdfVVNCX05FVF9BWDg4MTdYKQkrPSBhc2l4Lm8KIG9iai0kKENPTkZJR19VU0JfTkVUX0NEQ0VUSEVSKQkrPSBjZGNfZXRoZXIubwogb2JqLSQoQ09ORklHX1VTQl9ORVRfRE05NjAxKQkrPSBkbTk2MDEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IGE5MzQ0MjguLjBlMDYxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTUwLDEwICs1MCwxOCBAQAogCQkmJiBkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wgPT0gMTsKIH0KIAorc3RhdGljIGludCBpc193aXJlbGVzc19ybmRpcyhzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjKQoreworCXJldHVybiBkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX1dJUkVMRVNTX0NPTlRST0xMRVIKKwkJJiYgZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzID09IDEKKwkJJiYgZGVzYy0+YkludGVyZmFjZVByb3RvY29sID09IDM7Cit9CisKICNlbHNlCiAKICNkZWZpbmUgaXNfcm5kaXMoZGVzYykJCTAKICNkZWZpbmUgaXNfYWN0aXZlc3luYyhkZXNjKQkwCisjZGVmaW5lIGlzX3dpcmVsZXNzX3JuZGlzKGRlc2MpCTAKIAogI2VuZGlmCiAKQEAgLTExMCw3ICsxMTgsOCBAQAogCSAqIG9mIGNkYy1hY20sIGl0J2xsIGZhaWwgUk5ESVMgcmVxdWVzdHMgY2xlYW5seS4KIAkgKi8KIAlybmRpcyA9IGlzX3JuZGlzKCZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYykKLQkJfHwgaXNfYWN0aXZlc3luYygmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MpOworCQl8fCBpc19hY3RpdmVzeW5jKCZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYykKKwkJfHwgaXNfd2lyZWxlc3Nfcm5kaXMoJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjKTsKIAogCW1lbXNldChpbmZvLCAwLCBzaXplb2YgKmluZm8pOwogCWluZm8tPmNvbnRyb2wgPSBpbnRmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMWQwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKQEAgLTAsMCArMSwyODM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRHJpdmVyIGZvciBPcHRpb24gSGlnaCBTcGVlZCBNb2JpbGUgRGV2aWNlcy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE9wdGlvbiBJbnRlcm5hdGlvbmFsCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFuZHJldyBCaXJkIChTcGhlcmUgU3lzdGVtcyBMdGQpCisgKiAgCQkJPGFqYkBzcGhlcmVzeXN0ZW1zLmNvLnVrPgorICogIENvcHlyaWdodCAoQykgMjAwOCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwOCBOb3ZlbGwsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwKKyAqICBVU0EKKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRGVzY3JpcHRpb24gb2YgdGhlIGRldmljZToKKyAqCisgKiBJbnRlcmZhY2UgMDoJQ29udGFpbnMgdGhlIElQIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHRoZSBidWxrIGVuZCBwb2ludHMuCisgKgkJVGhlIG11bHRpcGxleGVkIHNlcmlhbCBwb3J0cyBhcmUgdXNpbmcgdGhlIGludGVycnVwdCBhbmQKKyAqCQljb250cm9sIGVuZHBvaW50cy4KKyAqCQlJbnRlcnJ1cHQgY29udGFpbnMgYSBiaXRtYXAgdGVsbGluZyB3aGljaCBtdWx0aXBsZXhlZAorICoJCXNlcmlhbHBvcnQgbmVlZHMgc2VydmljaW5nLgorICoKKyAqIEludGVyZmFjZSAxOglEaWFnbm9zdGljcyBwb3J0LCB1c2VzIGJ1bGsgb25seSwgZG8gbm90IHN1Ym1pdCB1cmJzIHVudGlsIHRoZQorICoJCXBvcnQgaXMgb3BlbmVkLCBhcyB0aGlzIGhhdmUgYSBodWdlIGltcGFjdCBvbiB0aGUgbmV0d29yayBwb3J0CisgKgkJdGhyb3VnaHB1dC4KKyAqCisgKiBJbnRlcmZhY2UgMjoJU3RhbmRhcmQgbW9kZW0gaW50ZXJmYWNlIC0gY2lyY3VpdCBzd2l0Y2hlZCBpbnRlcmZhY2UsIHNob3VsZAorICoJCW5vdCBiZSB1c2VkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CisjaW5jbHVkZSA8bmV0L2FycC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkJIjEuMiIKKyNkZWZpbmUgTU9EX0FVVEhPUgkJCSJPcHRpb24gV2lyZWxlc3MiCisjZGVmaW5lIE1PRF9ERVNDUklQVElPTgkJCSJVU0IgSGlnaCBTcGVlZCBPcHRpb24gZHJpdmVyIgorI2RlZmluZSBNT0RfTElDRU5TRQkJCSJHUEwiCisKKyNkZWZpbmUgSFNPX01BWF9ORVRfREVWSUNFUwkJMTAKKyNkZWZpbmUgSFNPX19NQVhfTVRVCQkJMjA0OAorI2RlZmluZSBERUZBVUxUX01UVQkJCTE1MDAKKyNkZWZpbmUgREVGQVVMVF9NUlUJCQkxNTAwCisKKyNkZWZpbmUgQ1RSTF9VUkJfUlhfU0laRQkJMTAyNAorI2RlZmluZSBDVFJMX1VSQl9UWF9TSVpFCQk2NAorCisjZGVmaW5lIEJVTEtfVVJCX1JYX1NJWkUJCTQwOTYKKyNkZWZpbmUgQlVMS19VUkJfVFhfU0laRQkJODE5MgorCisjZGVmaW5lIE1VWF9CVUxLX1JYX0JVRl9TSVpFCQlIU09fX01BWF9NVFUKKyNkZWZpbmUgTVVYX0JVTEtfVFhfQlVGX1NJWkUJCUhTT19fTUFYX01UVQorI2RlZmluZSBNVVhfQlVMS19SWF9CVUZfQ09VTlQJCTQKKyNkZWZpbmUgVVNCX1RZUEVfT1BUSU9OX1ZFTkRPUgkJMHgyMAorCisvKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgdXNlZCB3aXRoIHRoZSBzdHJ1Y3QgaHNvX25ldCBmbGFncyBlbGVtZW50ICovCisvKiAtIHVzZSAqX2JpdCBvcGVyYXRpb25zIG9uIGl0LiAoYml0IGluZGljZXMgbm90IHZhbHVlcy4pICovCisjZGVmaW5lIEhTT19ORVRfUlVOTklORwkJCTAKKworI2RlZmluZQlIU09fTkVUX1RYX1RJTUVPVVQJCShIWioxMCkKKworLyogU2VyaWFsIHBvcnQgZGVmaW5lcyBhbmQgc3RydWN0cy4gKi8KKyNkZWZpbmUgSFNPX1NFUklBTF9GTEFHX1JYX1NFTlQJCTAKKworI2RlZmluZSBIU09fU0VSSUFMX01BR0lDCQkweDQ4NTM0ZjMxCisKKy8qIE51bWJlciBvZiB0dHlzIHRvIGhhbmRsZSAqLworI2RlZmluZSBIU09fU0VSSUFMX1RUWV9NSU5PUlMJCTI1NgorCisjZGVmaW5lIE1BWF9SWF9VUkJTCQkJMgorCisjZGVmaW5lIGdldF9zZXJpYWxfYnlfdHR5KHgpCVwKKwkoeCA/IChzdHJ1Y3QgaHNvX3NlcmlhbCAqKXgtPmRyaXZlcl9kYXRhIDogTlVMTCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVidWdnaW5nIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEX18obHZsXywgZm10LCBhcmcuLi4pCQkJCVwKKwlkbyB7CQkJCQkJXAorCQlwcmludGsobHZsXyAiWyVkOiVzXTogIiBmbXQgIlxuIiwJXAorCQkgICAgICAgX19MSU5FX18sIF9fZnVuY19fLCAjIyBhcmcpOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEXyhsdmwsIGFyZ3MuLi4pCQkJCVwKKwlkbyB7CQkJCQkJXAorCQlpZiAobHZsICYgZGVidWcpCQkJXAorCQkJRF9fKEtFUk5fSU5GTywgYXJncyk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEMShhcmdzLi4uKQlEXygweDAxLCAjI2FyZ3MpCisjZGVmaW5lIEQyKGFyZ3MuLi4pCURfKDB4MDIsICMjYXJncykKKyNkZWZpbmUgRDMoYXJncy4uLikJRF8oMHgwNCwgIyNhcmdzKQorI2RlZmluZSBENChhcmdzLi4uKQlEXygweDA4LCAjI2FyZ3MpCisjZGVmaW5lIEQ1KGFyZ3MuLi4pCURfKDB4MTAsICMjYXJncykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRW51bWVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZW51bSBwa3RfcGFyc2Vfc3RhdGUgeworCVdBSVRfSVAsCisJV0FJVF9EQVRBLAorCVdBSVRfU1lOQworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU3RydWN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgaHNvX3NoYXJlZF9pbnQgeworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqaW50cl9lbmRwOworCXZvaWQgKnNoYXJlZF9pbnRyX2J1ZjsKKwlzdHJ1Y3QgdXJiICpzaGFyZWRfaW50cl91cmI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYjsKKwlpbnQgdXNlX2NvdW50OworCWludCByZWZfY291bnQ7CisJc3RydWN0IG11dGV4IHNoYXJlZF9pbnRfbG9jazsKK307CisKK3N0cnVjdCBoc29fbmV0IHsKKwlzdHJ1Y3QgaHNvX2RldmljZSAqcGFyZW50OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQ7CisJc3RydWN0IHJma2lsbCAqcmZraWxsOworCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbl9lbmRwOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqb3V0X2VuZHA7CisKKwlzdHJ1Y3QgdXJiICptdXhfYnVsa19yeF91cmJfcG9vbFtNVVhfQlVMS19SWF9CVUZfQ09VTlRdOworCXN0cnVjdCB1cmIgKm11eF9idWxrX3R4X3VyYjsKKwl2b2lkICptdXhfYnVsa19yeF9idWZfcG9vbFtNVVhfQlVMS19SWF9CVUZfQ09VTlRdOworCXZvaWQgKm11eF9idWxrX3R4X2J1ZjsKKworCXN0cnVjdCBza19idWZmICpza2JfcnhfYnVmOworCXN0cnVjdCBza19idWZmICpza2JfdHhfYnVmOworCisJZW51bSBwa3RfcGFyc2Vfc3RhdGUgcnhfcGFyc2Vfc3RhdGU7CisJc3BpbmxvY2tfdCBuZXRfbG9jazsKKworCXVuc2lnbmVkIHNob3J0IHJ4X2J1Zl9zaXplOworCXVuc2lnbmVkIHNob3J0IHJ4X2J1Zl9taXNzaW5nOworCXN0cnVjdCBpcGhkciByeF9pcF9oZHI7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworc3RydWN0IGhzb19zZXJpYWwgeworCXN0cnVjdCBoc29fZGV2aWNlICpwYXJlbnQ7CisJaW50IG1hZ2ljOworCXU4IG1pbm9yOworCisJc3RydWN0IGhzb19zaGFyZWRfaW50ICpzaGFyZWRfaW50OworCisJLyogcngvdHggdXJiIGNvdWxkIGJlIGVpdGhlciBhIGJ1bGsgdXJiIG9yIGEgY29udHJvbCB1cmIgZGVwZW5kaW5nCisJICAgb24gd2hpY2ggc2VyaWFsIHBvcnQgaXQgaXMgdXNlZCBvbi4gKi8KKwlzdHJ1Y3QgdXJiICpyeF91cmJbTUFYX1JYX1VSQlNdOworCXU4IG51bV9yeF91cmJzOworCXU4ICpyeF9kYXRhW01BWF9SWF9VUkJTXTsKKwl1MTYgcnhfZGF0YV9sZW5ndGg7CS8qIHNob3VsZCBjb250YWluIGFsbG9jYXRlZCBsZW5ndGggKi8KKworCXN0cnVjdCB1cmIgKnR4X3VyYjsKKwl1OCAqdHhfZGF0YTsKKwl1OCAqdHhfYnVmZmVyOworCXUxNiB0eF9kYXRhX2xlbmd0aDsJLyogc2hvdWxkIGNvbnRhaW4gYWxsb2NhdGVkIGxlbmd0aCAqLworCXUxNiB0eF9kYXRhX2NvdW50OworCXUxNiB0eF9idWZmZXJfY291bnQ7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjdHJsX3JlcV90eDsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGN0cmxfcmVxX3J4OworCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbl9lbmRwOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqb3V0X2VuZHA7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHJ0c19zdGF0ZTsKKwl1OCBkdHJfc3RhdGU7CisJdW5zaWduZWQgdHhfdXJiX3VzZWQ6MTsKKworCS8qIGZyb20gdXNiX3NlcmlhbF9wb3J0ICovCisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgb3Blbl9jb3VudDsKKwlzcGlubG9ja190IHNlcmlhbF9sb2NrOworCisJaW50ICgqd3JpdGVfZGF0YSkgKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpOworfTsKKworc3RydWN0IGhzb19kZXZpY2UgeworCXVuaW9uIHsKKwkJc3RydWN0IGhzb19zZXJpYWwgKmRldl9zZXJpYWw7CisJCXN0cnVjdCBoc29fbmV0ICpkZXZfbmV0OworCX0gcG9ydF9kYXRhOworCisJdTMyIHBvcnRfc3BlYzsKKworCXU4IGlzX2FjdGl2ZTsKKwl1OCB1c2JfZ29uZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXN5bmNfZ2V0X2ludGY7CisJc3RydWN0IHdvcmtfc3RydWN0IGFzeW5jX3B1dF9pbnRmOworCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBrcmVmIHJlZjsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Cit9OworCisvKiBUeXBlIG9mIGludGVyZmFjZSAqLworI2RlZmluZSBIU09fSU5URl9NQVNLCQkweEZGMDAKKyNkZWZpbmUJSFNPX0lOVEZfTVVYCQkweDAxMDAKKyNkZWZpbmUJSFNPX0lOVEZfQlVMSyAgIAkweDAyMDAKKworLyogVHlwZSBvZiBwb3J0ICovCisjZGVmaW5lIEhTT19QT1JUX01BU0sJCTB4RkYKKyNkZWZpbmUgSFNPX1BPUlRfTk9fUE9SVAkweDAKKyNkZWZpbmUJSFNPX1BPUlRfQ09OVFJPTAkweDEKKyNkZWZpbmUJSFNPX1BPUlRfQVBQCQkweDIKKyNkZWZpbmUJSFNPX1BPUlRfR1BTCQkweDMKKyNkZWZpbmUJSFNPX1BPUlRfUENTQwkJMHg0CisjZGVmaW5lCUhTT19QT1JUX0FQUDIJCTB4NQorI2RlZmluZSBIU09fUE9SVF9HUFNfQ09OVFJPTAkweDYKKyNkZWZpbmUgSFNPX1BPUlRfTVNECQkweDcKKyNkZWZpbmUgSFNPX1BPUlRfVk9JQ0UJCTB4OAorI2RlZmluZSBIU09fUE9SVF9ESUFHMgkJMHg5CisjZGVmaW5lCUhTT19QT1JUX0RJQUcJCTB4MTAKKyNkZWZpbmUJSFNPX1BPUlRfTU9ERU0JCTB4MTEKKyNkZWZpbmUJSFNPX1BPUlRfTkVUV09SSwkweDEyCisKKy8qIEFkZGl0aW9uYWwgZGV2aWNlIGluZm8gKi8KKyNkZWZpbmUgSFNPX0lORk9fTUFTSwkJMHhGRjAwMDAwMAorI2RlZmluZSBIU09fSU5GT19DUkNfQlVHCTB4MDEwMDAwMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2VyaWFsIGRyaXZlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgaHNvX3NlcmlhbF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIHZvaWQgY3RybF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgcHV0X3J4YnVmX2RhdGEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGhzb19raWNrX3RyYW5zbWl0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpOworLyogSGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBoc29fbXV4X3N1Ym1pdF9pbnRyX3VyYihzdHJ1Y3QgaHNvX3NoYXJlZF9pbnQgKm11eF9pbnQsCisJCQkJICAgc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgZ2ZwX3QgZ2ZwKTsKK3N0YXRpYyB2b2lkIGxvZ191c2Jfc3RhdHVzKGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKTsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmhzb19nZXRfZXAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJCQkgIGludCB0eXBlLCBpbnQgZGlyKTsKK3N0YXRpYyBpbnQgaHNvX2dldF9tdXhfcG9ydHMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGNoYXIgKnBvcnRzKTsKK3N0YXRpYyB2b2lkIGhzb19mcmVlX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgaW50IGhzb19zdGFydF9zZXJpYWxfZGV2aWNlKHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2LCBnZnBfdCBmbGFncyk7CitzdGF0aWMgaW50IGhzb19zdG9wX3NlcmlhbF9kZXZpY2Uoc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXYpOworc3RhdGljIGludCBoc29fc3RhcnRfbmV0X2RldmljZShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2Rldik7CitzdGF0aWMgdm9pZCBoc29fZnJlZV9zaGFyZWRfaW50KHN0cnVjdCBoc29fc2hhcmVkX2ludCAqc2hhcmVkX2ludCk7CitzdGF0aWMgaW50IGhzb19zdG9wX25ldF9kZXZpY2Uoc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXYpOworc3RhdGljIHZvaWQgaHNvX3NlcmlhbF9yZWZfZnJlZShzdHJ1Y3Qga3JlZiAqcmVmKTsKK3N0YXRpYyB2b2lkIGFzeW5jX2dldF9pbnRmKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CitzdGF0aWMgdm9pZCBhc3luY19wdXRfaW50ZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpOworc3RhdGljIGludCBoc29fcHV0X2FjdGl2aXR5KHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KTsKK3N0YXRpYyBpbnQgaHNvX2dldF9hY3Rpdml0eShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2Rldik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEhlbHBpbmcgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogI2RlZmluZSBERUJVRyAqLworCisjZGVmaW5lIGRldjJuZXQoeCkgKHgtPnBvcnRfZGF0YS5kZXZfbmV0KQorI2RlZmluZSBkZXYyc2VyKHgpICh4LT5wb3J0X2RhdGEuZGV2X3NlcmlhbCkKKworLyogRGVidWdnaW5nIGZ1bmN0aW9ucyAqLworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBkYmdfZHVtcChpbnQgbGluZV9jb3VudCwgY29uc3QgY2hhciAqZnVuY19uYW1lLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1OCBpID0gMDsKKworCXByaW50ayhLRVJOX0RFQlVHICJbJWQ6JXNdOiBsZW4gJWQiLCBsaW5lX2NvdW50LCBmdW5jX25hbWUsIGxlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKCEoaSAlIDE2KSkKKwkJCXByaW50aygiXG4gICAgMHglMDN4OiAgIiwgaSk7CisJCXByaW50aygiJTAyeCAiLCAodW5zaWduZWQgY2hhcilidWZbaV0pOworCX0KKwlwcmludGsoIlxuIik7Cit9CisKKyNkZWZpbmUgRFVNUChidWZfLCBsZW5fKQlcCisJZGJnX2R1bXAoX19MSU5FX18sIF9fZnVuY19fLCBidWZfLCBsZW5fKQorCisjZGVmaW5lIERVTVAxKGJ1Zl8sIGxlbl8pCQkJXAorCWRvIHsJCQkJCVwKKwkJaWYgKDB4MDEgJiBkZWJ1ZykJCVwKKwkJCURVTVAoYnVmXywgbGVuXyk7CVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgRFVNUChidWZfLCBsZW5fKQorI2RlZmluZSBEVU1QMShidWZfLCBsZW5fKQorI2VuZGlmCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIGludCB0dHlfbWFqb3I7CitzdGF0aWMgaW50IGRpc2FibGVfbmV0OworCisvKiBkcml2ZXIgaW5mbyAqLworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJoc28iOworc3RhdGljIGNvbnN0IGNoYXIgdHR5X2ZpbGVuYW1lW10gPSAidHR5SFMiOworc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPSBfX0ZJTEVfXyAiOiAiIERSSVZFUl9WRVJTSU9OICIgIiBNT0RfQVVUSE9SOworLyogdGhlIHVzYiBkcml2ZXIgaXRzZWxmIChyZWdpc3RlcmVkIGluIGhzb19pbml0KSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGhzb19kcml2ZXI7CisvKiBzZXJpYWwgc3RydWN0dXJlcyAqLworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICp0dHlfZHJ2Oworc3RhdGljIHN0cnVjdCBoc29fZGV2aWNlICpzZXJpYWxfdGFibGVbSFNPX1NFUklBTF9UVFlfTUlOT1JTXTsKK3N0YXRpYyBzdHJ1Y3QgaHNvX2RldmljZSAqbmV0d29ya190YWJsZVtIU09fTUFYX05FVF9ERVZJQ0VTXTsKK3N0YXRpYyBzcGlubG9ja190IHNlcmlhbF90YWJsZV9sb2NrOworc3RhdGljIHN0cnVjdCBrdGVybWlvcyAqaHNvX3NlcmlhbF90ZXJtaW9zW0hTT19TRVJJQUxfVFRZX01JTk9SU107CitzdGF0aWMgc3RydWN0IGt0ZXJtaW9zICpoc29fc2VyaWFsX3Rlcm1pb3NfbG9ja2VkW0hTT19TRVJJQUxfVFRZX01JTk9SU107CisKK3N0YXRpYyBjb25zdCBzMzIgZGVmYXVsdF9wb3J0X3NwZWNbXSA9IHsKKwlIU09fSU5URl9NVVggfCBIU09fUE9SVF9ORVRXT1JLLAorCUhTT19JTlRGX0JVTEsgfCBIU09fUE9SVF9ESUFHLAorCUhTT19JTlRGX0JVTEsgfCBIU09fUE9SVF9NT0RFTSwKKwkwCit9OworCitzdGF0aWMgY29uc3QgczMyIGljb24zMjFfcG9ydF9zcGVjW10gPSB7CisJSFNPX0lOVEZfTVVYIHwgSFNPX1BPUlRfTkVUV09SSywKKwlIU09fSU5URl9CVUxLIHwgSFNPX1BPUlRfRElBRzIsCisJSFNPX0lOVEZfQlVMSyB8IEhTT19QT1JUX01PREVNLAorCUhTT19JTlRGX0JVTEsgfCBIU09fUE9SVF9ESUFHLAorCTAKK307CisKKyNkZWZpbmUgZGVmYXVsdF9wb3J0X2RldmljZSh2ZW5kb3IsIHByb2R1Y3QpCVwKKwlVU0JfREVWSUNFKHZlbmRvciwgcHJvZHVjdCksCVwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KWRlZmF1bHRfcG9ydF9zcGVjCisKKyNkZWZpbmUgaWNvbjMyMV9wb3J0X2RldmljZSh2ZW5kb3IsIHByb2R1Y3QpCVwKKwlVU0JfREVWSUNFKHZlbmRvciwgcHJvZHVjdCksCVwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KWljb24zMjFfcG9ydF9zcGVjCisKKy8qIGxpc3Qgb2YgZGV2aWNlcyB3ZSBzdXBwb3J0ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaHNvX2lkc1tdID0geworCXtkZWZhdWx0X3BvcnRfZGV2aWNlKDB4MGFmMCwgMHg2NzExKX0sCisJe2RlZmF1bHRfcG9ydF9kZXZpY2UoMHgwYWYwLCAweDY3MzEpfSwKKwl7ZGVmYXVsdF9wb3J0X2RldmljZSgweDBhZjAsIDB4Njc1MSl9LAorCXtkZWZhdWx0X3BvcnRfZGV2aWNlKDB4MGFmMCwgMHg2NzcxKX0sCisJe2RlZmF1bHRfcG9ydF9kZXZpY2UoMHgwYWYwLCAweDY3OTEpfSwKKwl7ZGVmYXVsdF9wb3J0X2RldmljZSgweDBhZjAsIDB4NjgxMSl9LAorCXtkZWZhdWx0X3BvcnRfZGV2aWNlKDB4MGFmMCwgMHg2OTExKX0sCisJe2RlZmF1bHRfcG9ydF9kZXZpY2UoMHgwYWYwLCAweDY5NTEpfSwKKwl7ZGVmYXVsdF9wb3J0X2RldmljZSgweDBhZjAsIDB4Njk3MSl9LAorCXtkZWZhdWx0X3BvcnRfZGV2aWNlKDB4MGFmMCwgMHg3MDExKX0sCisJe2RlZmF1bHRfcG9ydF9kZXZpY2UoMHgwYWYwLCAweDcwMzEpfSwKKwl7ZGVmYXVsdF9wb3J0X2RldmljZSgweDBhZjAsIDB4NzA1MSl9LAorCXtkZWZhdWx0X3BvcnRfZGV2aWNlKDB4MGFmMCwgMHg3MDcxKX0sCisJe2RlZmF1bHRfcG9ydF9kZXZpY2UoMHgwYWYwLCAweDcxMTEpfSwKKwl7ZGVmYXVsdF9wb3J0X2RldmljZSgweDBhZjAsIDB4NzIxMSl9LAorCXtkZWZhdWx0X3BvcnRfZGV2aWNlKDB4MGFmMCwgMHg3MjUxKX0sCisJe2RlZmF1bHRfcG9ydF9kZXZpY2UoMHgwYWYwLCAweDcyNzEpfSwKKwl7ZGVmYXVsdF9wb3J0X2RldmljZSgweDBhZjAsIDB4NzMxMSl9LAorCXtkZWZhdWx0X3BvcnRfZGV2aWNlKDB4MGFmMCwgMHhjMDMxKX0sCS8qIEljb24tRWRnZSAqLworCXtpY29uMzIxX3BvcnRfZGV2aWNlKDB4MGFmMCwgMHhkMDEzKX0sCS8qIE1vZHVsZSBIU3hQQSAqLworCXtpY29uMzIxX3BvcnRfZGV2aWNlKDB4MGFmMCwgMHhkMDMxKX0sCS8qIEljb24tMzIxICovCisJe2RlZmF1bHRfcG9ydF9kZXZpY2UoMHgwYWYwLCAweGQwMzMpfSwJLyogSWNvbi0zMjIgKi8KKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzMwMSl9LAkJLyogR0U0MHggKi8KKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzM2MSl9LAkJLyogR0U0MHggKi8KKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzQwMSl9LAkJLyogR0kgMDQwMSAqLworCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg3NTAxKX0sCQkvKiBHVE0gMzgyICovCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDc2MDEpfSwJCS8qIEdFNDB4ICovCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaHNvX2lkcyk7CisKKy8qIFN5c2ZzIGF0dHJpYnV0ZSAqLworc3RhdGljIHNzaXplX3QgaHNvX3N5c2ZzX3Nob3dfcG9ydHR5cGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2ID0gZGV2LT5kcml2ZXJfZGF0YTsKKwljaGFyICpwb3J0X25hbWU7CisKKwlpZiAoIWhzb19kZXYpCisJCXJldHVybiAwOworCisJc3dpdGNoIChoc29fZGV2LT5wb3J0X3NwZWMgJiBIU09fUE9SVF9NQVNLKSB7CisJY2FzZSBIU09fUE9SVF9DT05UUk9MOgorCQlwb3J0X25hbWUgPSAiQ29udHJvbCI7CisJCWJyZWFrOworCWNhc2UgSFNPX1BPUlRfQVBQOgorCQlwb3J0X25hbWUgPSAiQXBwbGljYXRpb24iOworCQlicmVhazsKKwljYXNlIEhTT19QT1JUX0FQUDI6CisJCXBvcnRfbmFtZSA9ICJBcHBsaWNhdGlvbjIiOworCQlicmVhazsKKwljYXNlIEhTT19QT1JUX0dQUzoKKwkJcG9ydF9uYW1lID0gIkdQUyI7CisJCWJyZWFrOworCWNhc2UgSFNPX1BPUlRfR1BTX0NPTlRST0w6CisJCXBvcnRfbmFtZSA9ICJHUFMgQ29udHJvbCI7CisJCWJyZWFrOworCWNhc2UgSFNPX1BPUlRfUENTQzoKKwkJcG9ydF9uYW1lID0gIlBDU0MiOworCQlicmVhazsKKwljYXNlIEhTT19QT1JUX0RJQUc6CisJCXBvcnRfbmFtZSA9ICJEaWFnbm9zdGljIjsKKwkJYnJlYWs7CisJY2FzZSBIU09fUE9SVF9ESUFHMjoKKwkJcG9ydF9uYW1lID0gIkRpYWdub3N0aWMyIjsKKwkJYnJlYWs7CisJY2FzZSBIU09fUE9SVF9NT0RFTToKKwkJcG9ydF9uYW1lID0gIk1vZGVtIjsKKwkJYnJlYWs7CisJY2FzZSBIU09fUE9SVF9ORVRXT1JLOgorCQlwb3J0X25hbWUgPSAiTmV0d29yayI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBvcnRfbmFtZSA9ICJVbmtub3duIjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHBvcnRfbmFtZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaHNvdHlwZSwgU19JUlVHTywgaHNvX3N5c2ZzX3Nob3dfcG9ydHR5cGUsIE5VTEwpOworCisvKiBjb252ZXJ0cyBtdXggdmFsdWUgdG8gYSBwb3J0IHNwZWMgdmFsdWUgKi8KK3N0YXRpYyB1MzIgaHNvX211eF90b19wb3J0KGludCBtdXgpCit7CisJdTMyIHJlc3VsdDsKKworCXN3aXRjaCAobXV4KSB7CisJY2FzZSAweDE6CisJCXJlc3VsdCA9IEhTT19QT1JUX0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQlyZXN1bHQgPSBIU09fUE9SVF9BUFA7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQlyZXN1bHQgPSBIU09fUE9SVF9QQ1NDOworCQlicmVhazsKKwljYXNlIDB4ODoKKwkJcmVzdWx0ID0gSFNPX1BPUlRfR1BTOworCQlicmVhazsKKwljYXNlIDB4MTA6CisJCXJlc3VsdCA9IEhTT19QT1JUX0FQUDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IEhTT19QT1JUX05PX1BPUlQ7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIGNvbnZlcnRzIHBvcnQgc3BlYyB2YWx1ZSB0byBhIG11eCB2YWx1ZSAqLworc3RhdGljIHUzMiBoc29fcG9ydF90b19tdXgoaW50IHBvcnQpCit7CisJdTMyIHJlc3VsdDsKKworCXN3aXRjaCAocG9ydCAmIEhTT19QT1JUX01BU0spIHsKKwljYXNlIEhTT19QT1JUX0NPTlRST0w6CisJCXJlc3VsdCA9IDB4MDsKKwkJYnJlYWs7CisJY2FzZSBIU09fUE9SVF9BUFA6CisJCXJlc3VsdCA9IDB4MTsKKwkJYnJlYWs7CisJY2FzZSBIU09fUE9SVF9QQ1NDOgorCQlyZXN1bHQgPSAweDI7CisJCWJyZWFrOworCWNhc2UgSFNPX1BPUlRfR1BTOgorCQlyZXN1bHQgPSAweDM7CisJCWJyZWFrOworCWNhc2UgSFNPX1BPUlRfQVBQMjoKKwkJcmVzdWx0ID0gMHg0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSAweDA7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHNvX3NlcmlhbCAqZ2V0X3NlcmlhbF9ieV9zaGFyZWRfaW50X2FuZF90eXBlKAorCQkJCQlzdHJ1Y3QgaHNvX3NoYXJlZF9pbnQgKnNoYXJlZF9pbnQsCisJCQkJCWludCBtdXgpCit7CisJaW50IGksIHBvcnQ7CisKKwlwb3J0ID0gaHNvX211eF90b19wb3J0KG11eCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSFNPX1NFUklBTF9UVFlfTUlOT1JTOyBpKyspIHsKKwkJaWYgKHNlcmlhbF90YWJsZVtpXQorCQkgICAgJiYgKGRldjJzZXIoc2VyaWFsX3RhYmxlW2ldKS0+c2hhcmVkX2ludCA9PSBzaGFyZWRfaW50KQorCQkgICAgJiYgKChzZXJpYWxfdGFibGVbaV0tPnBvcnRfc3BlYyAmIEhTT19QT1JUX01BU0spID09IHBvcnQpKSB7CisJCQlyZXR1cm4gZGV2MnNlcihzZXJpYWxfdGFibGVbaV0pOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHNvX3NlcmlhbCAqZ2V0X3NlcmlhbF9ieV9pbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXNlcmlhbF90YWJsZVtpbmRleF0pCisJCXJldHVybiBOVUxMOworCXNwaW5fbG9ja19pcnFzYXZlKCZzZXJpYWxfdGFibGVfbG9jaywgZmxhZ3MpOworCXNlcmlhbCA9IGRldjJzZXIoc2VyaWFsX3RhYmxlW2luZGV4XSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaWFsX3RhYmxlX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBzZXJpYWw7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2ZyZWVfc2VyaWFsX2luZGV4KHZvaWQpCit7CisJaW50IGluZGV4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaWFsX3RhYmxlX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIU09fU0VSSUFMX1RUWV9NSU5PUlM7IGluZGV4KyspIHsKKwkJaWYgKHNlcmlhbF90YWJsZVtpbmRleF0gPT0gTlVMTCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaWFsX3RhYmxlX2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiBpbmRleDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJpYWxfdGFibGVfbG9jaywgZmxhZ3MpOworCisJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gZnJlZSBzZXJpYWwgZGV2aWNlcyBpbiB0YWJsZVxuIiwgX19mdW5jX18pOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgc2V0X3NlcmlhbF9ieV9pbmRleCh1bnNpZ25lZCBpbmRleCwgc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZzZXJpYWxfdGFibGVfbG9jaywgZmxhZ3MpOworCWlmIChzZXJpYWwpCisJCXNlcmlhbF90YWJsZVtpbmRleF0gPSBzZXJpYWwtPnBhcmVudDsKKwllbHNlCisJCXNlcmlhbF90YWJsZVtpbmRleF0gPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlcmlhbF90YWJsZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qIGxvZyBhIG1lYW5pbmdmdWxsIGV4cGxhbmF0aW9uIG9mIGFuIFVTQiBzdGF0dXMgKi8KK3N0YXRpYyB2b2lkIGxvZ191c2Jfc3RhdHVzKGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworCWNoYXIgKmV4cGxhbmF0aW9uOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIC1FTk9ERVY6CisJCWV4cGxhbmF0aW9uID0gIm5vIGRldmljZSI7CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwkJZXhwbGFuYXRpb24gPSAiZW5kcG9pbnQgbm90IGVuYWJsZWQiOworCQlicmVhazsKKwljYXNlIC1FUElQRToKKwkJZXhwbGFuYXRpb24gPSAiZW5kcG9pbnQgc3RhbGxlZCI7CisJCWJyZWFrOworCWNhc2UgLUVOT1NQQzoKKwkJZXhwbGFuYXRpb24gPSAibm90IGVub3VnaCBiYW5kd2lkdGgiOworCQlicmVhazsKKwljYXNlIC1FU0hVVERPV046CisJCWV4cGxhbmF0aW9uID0gImRldmljZSBkaXNhYmxlZCI7CisJCWJyZWFrOworCWNhc2UgLUVIT1NUVU5SRUFDSDoKKwkJZXhwbGFuYXRpb24gPSAiZGV2aWNlIHN1c3BlbmRlZCI7CisJCWJyZWFrOworCWNhc2UgLUVJTlZBTDoKKwljYXNlIC1FQUdBSU46CisJY2FzZSAtRUZCSUc6CisJY2FzZSAtRU1TR1NJWkU6CisJCWV4cGxhbmF0aW9uID0gImludGVybmFsIGVycm9yIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXhwbGFuYXRpb24gPSAidW5rbm93biBzdGF0dXMiOworCQlicmVhazsKKwl9CisJRDEoIiVzOiByZWNlaXZlZCBVU0Igc3RhdHVzIC0gJXMgKCVkKSIsIGZ1bmN0aW9uLCBleHBsYW5hdGlvbiwgc3RhdHVzKTsKK30KKworLyogTmV0d29yayBpbnRlcmZhY2UgZnVuY3Rpb25zICovCisKKy8qIGNhbGxlZCB3aGVuIG5ldCBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cCBieSBpZmNvbmZpZyAqLworc3RhdGljIGludCBoc29fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgaHNvX25ldCAqb2RldiA9IG5ldGRldl9wcml2KG5ldCk7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlpZiAoIW9kZXYpIHsKKwkJZGV2X2VycigmbmV0LT5kZXYsICJObyBuZXQgZGV2aWNlICFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlvZGV2LT5za2JfdHhfYnVmID0gTlVMTDsKKworCS8qIHNldHVwIGVudmlyb25tZW50ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9kZXYtPm5ldF9sb2NrLCBmbGFncyk7CisJb2Rldi0+cnhfcGFyc2Vfc3RhdGUgPSBXQUlUX0lQOworCW9kZXYtPnJ4X2J1Zl9zaXplID0gMDsKKwlvZGV2LT5yeF9idWZfbWlzc2luZyA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9kZXYtPm5ldF9sb2NrLCBmbGFncyk7CisKKwloc29fc3RhcnRfbmV0X2RldmljZShvZGV2LT5wYXJlbnQpOworCisJLyogV2UgYXJlIHVwIGFuZCBydW5uaW5nLiAqLworCXNldF9iaXQoSFNPX05FVF9SVU5OSU5HLCAmb2Rldi0+ZmxhZ3MpOworCisJLyogVGVsbCB0aGUga2VybmVsIHdlIGFyZSByZWFkeSB0byBzdGFydCByZWNlaXZpbmcgZnJvbSBpdCAqLworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVkIHdoZW4gaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93biBieSBpZmNvbmZpZyAqLworc3RhdGljIGludCBoc29fbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGhzb19uZXQgKm9kZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJLyogd2UgZG9uJ3QgbmVlZCB0aGUgcXVldWUgYW55bW9yZSAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKKwkvKiBubyBsb25nZXIgcnVubmluZyAqLworCWNsZWFyX2JpdChIU09fTkVUX1JVTk5JTkcsICZvZGV2LT5mbGFncyk7CisKKwloc29fc3RvcF9uZXRfZGV2aWNlKG9kZXYtPnBhcmVudCk7CisKKwkvKiBkb25lICovCisJcmV0dXJuIDA7Cit9CisKKy8qIFVTQiB0ZWxscyBpcyB4bWl0IGRvbmUsIHdlIHNob3VsZCBzdGFydCB0aGUgbmV0cXVldWUgYWdhaW4gKi8KK3N0YXRpYyB2b2lkIHdyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBoc29fbmV0ICpvZGV2ID0gdXJiLT5jb250ZXh0OworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICghb2RldiB8fCAhdGVzdF9iaXQoSFNPX05FVF9SVU5OSU5HLCAmb2Rldi0+ZmxhZ3MpKSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlczogZGV2aWNlIG5vdCBydW5uaW5nXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBEbyB3ZSBzdGlsbCBoYXZlIGEgdmFsaWQga2VybmVsIG5ldHdvcmsgZGV2aWNlPyAqLworCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQob2Rldi0+bmV0KSkgeworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXM6IG5ldCBkZXZpY2Ugbm90IHByZXNlbnRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBsb2cgc3RhdHVzLCBidXQgZG9uJ3QgYWN0IG9uIGl0LCB3ZSBkb24ndCBuZWVkIHRvIHJlc3VibWl0IGFueXRoaW5nCisJICogYW55aG93ICovCisJaWYgKHN0YXR1cykKKwkJbG9nX3VzYl9zdGF0dXMoc3RhdHVzLCBfX2Z1bmNfXyk7CisKKwloc29fcHV0X2FjdGl2aXR5KG9kZXYtPnBhcmVudCk7CisKKwkvKiBUZWxsIHRoZSBuZXR3b3JrIGludGVyZmFjZSB3ZSBhcmUgcmVhZHkgZm9yIGFub3RoZXIgZnJhbWUgKi8KKwluZXRpZl93YWtlX3F1ZXVlKG9kZXYtPm5ldCk7Cit9CisKKy8qIGNhbGxlZCBieSBrZXJuZWwgd2hlbiB3ZSBuZWVkIHRvIHRyYW5zbWl0IGEgcGFja2V0ICovCitzdGF0aWMgaW50IGhzb19uZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBoc29fbmV0ICpvZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpbnQgcmVzdWx0OworCisJLyogVGVsbCB0aGUga2VybmVsLCAiTm8gbW9yZSBmcmFtZXMgJ3RpbCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgb25lLiIgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CisJaWYgKGhzb19nZXRfYWN0aXZpdHkob2Rldi0+cGFyZW50KSA9PSAtRUFHQUlOKSB7CisJCW9kZXYtPnNrYl90eF9idWYgPSBza2I7CisJCXJldHVybiAwOworCX0KKworCS8qIGxvZyBpZiBhc2tlZCAqLworCURVTVAxKHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCS8qIENvcHkgaXQgZnJvbSBrZXJuZWwgbWVtb3J5IHRvIE9VUiBtZW1vcnkgKi8KKwltZW1jcHkob2Rldi0+bXV4X2J1bGtfdHhfYnVmLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlEMSgibGVuOiAlZC8lZCIsIHNrYi0+bGVuLCBNVVhfQlVMS19UWF9CVUZfU0laRSk7CisKKwkvKiBGaWxsIGluIHRoZSBVUkIgZm9yIHNoaXBwaW5nIGl0IG91dC4gKi8KKwl1c2JfZmlsbF9idWxrX3VyYihvZGV2LT5tdXhfYnVsa190eF91cmIsCisJCQkgIG9kZXYtPnBhcmVudC0+dXNiLAorCQkJICB1c2Jfc25kYnVsa3BpcGUob2Rldi0+cGFyZW50LT51c2IsCisJCQkJCSAgb2Rldi0+b3V0X2VuZHAtPgorCQkJCQkgIGJFbmRwb2ludEFkZHJlc3MgJiAweDdGKSwKKwkJCSAgb2Rldi0+bXV4X2J1bGtfdHhfYnVmLCBza2ItPmxlbiwgd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCSAgb2Rldik7CisKKwkvKiBEZWFsIHdpdGggdGhlIFplcm8gTGVuZ3RoIHBhY2tldCBwcm9ibGVtLCBJIGhvcGUgKi8KKwlvZGV2LT5tdXhfYnVsa190eF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDsKKworCS8qIFNlbmQgdGhlIFVSQiBvbiBpdHMgbWVycnkgd2F5LiAqLworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKG9kZXYtPm11eF9idWxrX3R4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfd2Fybigmb2Rldi0+cGFyZW50LT5pbnRlcmZhY2UtPmRldiwKKwkJCSJmYWlsZWQgbXV4X2J1bGtfdHhfdXJiICVkIiwgcmVzdWx0KTsKKwkJbmV0LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKKwl9IGVsc2UgeworCQluZXQtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJbmV0LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJLyogQW5kIHRlbGwgdGhlIGtlcm5lbCB3aGVuIHRoZSBsYXN0IHRyYW5zbWl0IHN0YXJ0ZWQuICovCisJCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCX0KKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJLyogd2UncmUgZG9uZSAqLworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGhzb19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCBoc29fbmV0ICpvZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSwgRVRIVE9PTF9CVVNJTkZPX0xFTik7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgRVRIVE9PTF9CVVNJTkZPX0xFTik7CisJdXNiX21ha2VfcGF0aChvZGV2LT5wYXJlbnQtPnVzYiwgaW5mby0+YnVzX2luZm8sIHNpemVvZiBpbmZvLT5idXNfaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IGhzb19nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rCit9OworCisvKiBjYWxsZWQgd2hlbiBhIHBhY2tldCBkaWQgbm90IGFjayBhZnRlciB3YXRjaGRvZ3RpbWVvdXQgKi8KK3N0YXRpYyB2b2lkIGhzb19uZXRfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBoc29fbmV0ICpvZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCWlmICghb2RldikKKwkJcmV0dXJuOworCisJLyogVGVsbCBzeXNsb2cgd2UgYXJlIGhvc2VkLiAqLworCWRldl93YXJuKCZuZXQtPmRldiwgIlR4IHRpbWVkIG91dC5cbiIpOworCisJLyogVGVhciB0aGUgd2FpdGluZyBmcmFtZSBvZmYgdGhlIGxpc3QgKi8KKwlpZiAob2Rldi0+bXV4X2J1bGtfdHhfdXJiCisJICAgICYmIChvZGV2LT5tdXhfYnVsa190eF91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpKQorCQl1c2JfdW5saW5rX3VyYihvZGV2LT5tdXhfYnVsa190eF91cmIpOworCisJLyogVXBkYXRlIHN0YXRpc3RpY3MgKi8KKwluZXQtPnN0YXRzLnR4X2Vycm9ycysrOworfQorCisvKiBtYWtlIGEgcmVhbCBwYWNrZXQgZnJvbSB0aGUgcmVjZWl2ZWQgVVNCIGJ1ZmZlciAqLworc3RhdGljIHZvaWQgcGFja2V0aXplUngoc3RydWN0IGhzb19uZXQgKm9kZXYsIHVuc2lnbmVkIGNoYXIgKmlwX3BrdCwKKwkJCXVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgY2hhciBpc19lb3ApCit7CisJdW5zaWduZWQgc2hvcnQgdGVtcF9ieXRlczsKKwl1bnNpZ25lZCBzaG9ydCBidWZmZXJfb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBmcmFtZV9sZW47CisJdW5zaWduZWQgY2hhciAqdG1wX3J4X2J1ZjsKKworCS8qIGxvZyBpZiBuZWVkZWQgKi8KKwlEMSgiUnggJWQgYnl0ZXMiLCBjb3VudCk7CisJRFVNUChpcF9wa3QsIG1pbigxMjgsIChpbnQpY291bnQpKTsKKworCXdoaWxlIChjb3VudCkgeworCQlzd2l0Y2ggKG9kZXYtPnJ4X3BhcnNlX3N0YXRlKSB7CisJCWNhc2UgV0FJVF9JUDoKKwkJCS8qIHdhaXRpbmcgZm9yIElQIGhlYWRlci4gKi8KKwkJCS8qIHdhbnRlZCBieXRlcyAtIHNpemUgb2YgaXAgaGVhZGVyICovCisJCQl0ZW1wX2J5dGVzID0KKwkJCSAgICAoY291bnQgPAorCQkJICAgICBvZGV2LT5yeF9idWZfbWlzc2luZykgPyBjb3VudCA6IG9kZXYtPgorCQkJICAgIHJ4X2J1Zl9taXNzaW5nOworCisJCQltZW1jcHkoKCh1bnNpZ25lZCBjaGFyICopKCZvZGV2LT5yeF9pcF9oZHIpKSArCisJCQkgICAgICAgb2Rldi0+cnhfYnVmX3NpemUsIGlwX3BrdCArIGJ1ZmZlcl9vZmZzZXQsCisJCQkgICAgICAgdGVtcF9ieXRlcyk7CisKKwkJCW9kZXYtPnJ4X2J1Zl9zaXplICs9IHRlbXBfYnl0ZXM7CisJCQlidWZmZXJfb2Zmc2V0ICs9IHRlbXBfYnl0ZXM7CisJCQlvZGV2LT5yeF9idWZfbWlzc2luZyAtPSB0ZW1wX2J5dGVzOworCQkJY291bnQgLT0gdGVtcF9ieXRlczsKKworCQkJaWYgKCFvZGV2LT5yeF9idWZfbWlzc2luZykgeworCQkJCS8qIGhlYWRlciBpcyBjb21wbGV0ZSBhbGxvY2F0ZSBhbiBza19idWZmZXIgYW5kCisJCQkJICogY29udGludWUgdG8gV0FJVF9EQVRBICovCisJCQkJZnJhbWVfbGVuID0gbnRvaHMob2Rldi0+cnhfaXBfaGRyLnRvdF9sZW4pOworCisJCQkJaWYgKChmcmFtZV9sZW4gPiBERUZBVUxUX01SVSkgfHwKKwkJCQkgICAgKGZyYW1lX2xlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkgeworCQkJCQlkZXZfZXJyKCZvZGV2LT5uZXQtPmRldiwKKwkJCQkJCSJJbnZhbGlkIGZyYW1lICglZCkgbGVuZ3RoXG4iLAorCQkJCQkJZnJhbWVfbGVuKTsKKwkJCQkJb2Rldi0+cnhfcGFyc2Vfc3RhdGUgPSBXQUlUX1NZTkM7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQkvKiBBbGxvY2F0ZSBhbiBza19idWZmICovCisJCQkJb2Rldi0+c2tiX3J4X2J1ZiA9IGRldl9hbGxvY19za2IoZnJhbWVfbGVuKTsKKwkJCQlpZiAoIW9kZXYtPnNrYl9yeF9idWYpIHsKKwkJCQkJLyogV2UgZ290IG5vIHJlY2VpdmUgYnVmZmVyLiAqLworCQkJCQlEMSgiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSIpOworCQkJCQlvZGV2LT5yeF9wYXJzZV9zdGF0ZSA9IFdBSVRfU1lOQzsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQkvKiBIZXJlJ3Mgd2hlcmUgaXQgY2FtZSBmcm9tICovCisJCQkJb2Rldi0+c2tiX3J4X2J1Zi0+ZGV2ID0gb2Rldi0+bmV0OworCisJCQkJLyogQ29weSB3aGF0IHdlIGdvdCBzbyBmYXIuIG1ha2Ugcm9vbSBmb3IgaXBoZHIKKwkJCQkgKiBhZnRlciB0YWlsLiAqLworCQkJCXRtcF9yeF9idWYgPQorCQkJCSAgICBza2JfcHV0KG9kZXYtPnNrYl9yeF9idWYsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7CisJCQkJbWVtY3B5KHRtcF9yeF9idWYsIChjaGFyICopJihvZGV2LT5yeF9pcF9oZHIpLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7CisKKwkJCQkvKiBFVEhfSExFTiAqLworCQkJCW9kZXYtPnJ4X2J1Zl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CisKKwkJCQkvKiBGaWxpcCBhY3R1YWxseSB1c2UgLnRvdF9sZW4gKi8KKwkJCQlvZGV2LT5yeF9idWZfbWlzc2luZyA9CisJCQkJICAgIGZyYW1lX2xlbiAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOworCQkJCW9kZXYtPnJ4X3BhcnNlX3N0YXRlID0gV0FJVF9EQVRBOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBXQUlUX0RBVEE6CisJCQl0ZW1wX2J5dGVzID0gKGNvdW50IDwgb2Rldi0+cnhfYnVmX21pc3NpbmcpCisJCQkJCT8gY291bnQgOiBvZGV2LT5yeF9idWZfbWlzc2luZzsKKworCQkJLyogQ29weSB0aGUgcmVzdCBvZiB0aGUgYnl0ZXMgdGhhdCBhcmUgbGVmdCBpbiB0aGUKKwkJCSAqIGJ1ZmZlciBpbnRvIHRoZSB3YWl0aW5nIHNrX2J1Zi4gKi8KKwkJCS8qIE1ha2Ugcm9vbSBmb3IgdGVtcF9ieXRlcyBhZnRlciB0YWlsLiAqLworCQkJdG1wX3J4X2J1ZiA9IHNrYl9wdXQob2Rldi0+c2tiX3J4X2J1ZiwgdGVtcF9ieXRlcyk7CisJCQltZW1jcHkodG1wX3J4X2J1ZiwgaXBfcGt0ICsgYnVmZmVyX29mZnNldCwgdGVtcF9ieXRlcyk7CisKKwkJCW9kZXYtPnJ4X2J1Zl9taXNzaW5nIC09IHRlbXBfYnl0ZXM7CisJCQljb3VudCAtPSB0ZW1wX2J5dGVzOworCQkJYnVmZmVyX29mZnNldCArPSB0ZW1wX2J5dGVzOworCQkJb2Rldi0+cnhfYnVmX3NpemUgKz0gdGVtcF9ieXRlczsKKwkJCWlmICghb2Rldi0+cnhfYnVmX21pc3NpbmcpIHsKKwkJCQkvKiBQYWNrZXQgaXMgY29tcGxldGUuIEluamVjdCBpbnRvIHN0YWNrLiAqLworCQkJCS8qIFdlIGhhdmUgSVAgcGFja2V0IGhlcmUgKi8KKwkJCQlvZGV2LT5za2JfcnhfYnVmLT5wcm90b2NvbCA9CisJCQkJCQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKTsKKwkJCQkvKiBkb24ndCBjaGVjayBpdCAqLworCQkJCW9kZXYtPnNrYl9yeF9idWYtPmlwX3N1bW1lZCA9CisJCQkJCUNIRUNLU1VNX1VOTkVDRVNTQVJZOworCisJCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIob2Rldi0+c2tiX3J4X2J1Zik7CisKKwkJCQkvKiBTaGlwIGl0IG9mZiB0byB0aGUga2VybmVsICovCisJCQkJbmV0aWZfcngob2Rldi0+c2tiX3J4X2J1Zik7CisJCQkJLyogTm8gbG9uZ2VyIG91ciBidWZmZXIuICovCisJCQkJb2Rldi0+c2tiX3J4X2J1ZiA9IE5VTEw7CisKKwkJCQkvKiB1cGRhdGUgb3V0IHN0YXRpc3RpY3MgKi8KKwkJCQlvZGV2LT5uZXQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKworCQkJCW9kZXYtPm5ldC0+c3RhdHMucnhfYnl0ZXMgKz0gb2Rldi0+cnhfYnVmX3NpemU7CisKKwkJCQlvZGV2LT5yeF9idWZfc2l6ZSA9IDA7CisJCQkJb2Rldi0+cnhfYnVmX21pc3NpbmcgPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKKwkJCQlvZGV2LT5yeF9wYXJzZV9zdGF0ZSA9IFdBSVRfSVA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFdBSVRfU1lOQzoKKwkJCUQxKCIgV19TIik7CisJCQljb3VudCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUQxKCIgIik7CisJCQljb3VudC0tOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBSZWNvdmVyeSBtZWNoYW5pc20gZm9yIFdBSVRfU1lOQyBzdGF0ZS4gKi8KKwlpZiAoaXNfZW9wKSB7CisJCWlmIChvZGV2LT5yeF9wYXJzZV9zdGF0ZSA9PSBXQUlUX1NZTkMpIHsKKwkJCW9kZXYtPnJ4X3BhcnNlX3N0YXRlID0gV0FJVF9JUDsKKwkJCW9kZXYtPnJ4X2J1Zl9zaXplID0gMDsKKwkJCW9kZXYtPnJ4X2J1Zl9taXNzaW5nID0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CisJCX0KKwl9Cit9CisKKy8qIE1vdmluZyBkYXRhIGZyb20gdXNiIHRvIGtlcm5lbCAoaW4gaW50ZXJydXB0IHN0YXRlKSAqLworc3RhdGljIHZvaWQgcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgaHNvX25ldCAqb2RldiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OworCWludCByZXN1bHQ7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJLyogaXMgYWwgb2s/ICAoRmlsaXA6IFdobydzIEFsID8pICovCisJaWYgKHN0YXR1cykgeworCQlsb2dfdXNiX3N0YXR1cyhzdGF0dXMsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICghb2RldiB8fCAhdGVzdF9iaXQoSFNPX05FVF9SVU5OSU5HLCAmb2Rldi0+ZmxhZ3MpKSB7CisJCUQxKCJCVUxLIElOIGNhbGxiYWNrIGJ1dCBkcml2ZXIgaXMgbm90IGFjdGl2ZSEiKTsKKwkJcmV0dXJuOworCX0KKwl1c2JfbWFya19sYXN0X2J1c3kodXJiLT5kZXYpOworCisJbmV0ID0gb2Rldi0+bmV0OworCisJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXQpKSB7CisJCS8qIFNvbWVib2R5IGtpbGxlZCBvdXIgbmV0d29yayBpbnRlcmZhY2UuLi4gKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChvZGV2LT5wYXJlbnQtPnBvcnRfc3BlYyAmIEhTT19JTkZPX0NSQ19CVUcpIHsKKwkJdTMyIHJlc3Q7CisJCXU4IGNyY19jaGVja1s0XSA9IHsgMHhERSwgMHhBRCwgMHhCRSwgMHhFRiB9OworCQlyZXN0ID0gdXJiLT5hY3R1YWxfbGVuZ3RoICUgb2Rldi0+aW5fZW5kcC0+d01heFBhY2tldFNpemU7CisJCWlmICgoKHJlc3QgPT0gNSkgfHwgKHJlc3QgPT0gNikpCisJCSAgICAmJiAhbWVtY21wKCgodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIpICsKKwkJCSAgICAgICB1cmItPmFjdHVhbF9sZW5ndGggLSA0LCBjcmNfY2hlY2ssIDQpKSB7CisJCQl1cmItPmFjdHVhbF9sZW5ndGggLT0gNDsKKwkJfQorCX0KKworCS8qIGRvIHdlIGV2ZW4gaGF2ZSBhIHBhY2tldD8gKi8KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCS8qIEhhbmRsZSB0aGUgSVAgc3RyZWFtLCBhZGQgaGVhZGVyIGFuZCBwdXNoIGl0IG9udG8gbmV0d29yaworCQkgKiBzdGFjayBpZiB0aGUgcGFja2V0IGlzIGNvbXBsZXRlLiAqLworCQlzcGluX2xvY2soJm9kZXYtPm5ldF9sb2NrKTsKKwkJcGFja2V0aXplUngob2RldiwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCSAgICAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4KKwkJCSAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoKSA/IDEgOiAwKTsKKwkJc3Bpbl91bmxvY2soJm9kZXYtPm5ldF9sb2NrKTsKKwl9CisKKwkvKiBXZSBhcmUgZG9uZSB3aXRoIHRoaXMgVVJCLCByZXN1Ym1pdCBpdC4gUHJlcCB0aGUgVVNCIHRvIHdhaXQgZm9yCisJICogYW5vdGhlciBmcmFtZS4gUmV1c2Ugc2FtZSBhcyByZWNlaXZlZC4gKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsCisJCQkgIG9kZXYtPnBhcmVudC0+dXNiLAorCQkJICB1c2JfcmN2YnVsa3BpcGUob2Rldi0+cGFyZW50LT51c2IsCisJCQkJCSAgb2Rldi0+aW5fZW5kcC0+CisJCQkJCSAgYkVuZHBvaW50QWRkcmVzcyAmIDB4N0YpLAorCQkJICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgTVVYX0JVTEtfUlhfQlVGX1NJWkUsCisJCQkgIHJlYWRfYnVsa19jYWxsYmFjaywgb2Rldik7CisKKwkvKiBHaXZlIHRoaXMgdG8gdGhlIFVTQiBzdWJzeXN0ZW0gc28gaXQgY2FuIHRlbGwgdXMgd2hlbiBtb3JlIGRhdGEKKwkgKiBhcnJpdmVzLiAqLworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X3dhcm4oJm9kZXYtPnBhcmVudC0+aW50ZXJmYWNlLT5kZXYsCisJCQkgIiVzIGZhaWxlZCBzdWJtaXQgbXV4X2J1bGtfcnhfdXJiICVkIiwgX19mdW5jX18sCisJCQkgcmVzdWx0KTsKK30KKworLyogU2VyaWFsIGRyaXZlciBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQgX2hzb19zZXJpYWxfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCA9IGdldF9zZXJpYWxfYnlfdHR5KHR0eSk7CisJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zOworCisJaWYgKCghdHR5KSB8fCAoIXR0eS0+dGVybWlvcykgfHwgKCFzZXJpYWwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJRDQoInBvcnQgJWQiLCBzZXJpYWwtPm1pbm9yKTsKKworCS8qCisJICogVGhlIGRlZmF1bHQgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGRldmljZSBhcmU6CisJICovCisJdGVybWlvcyA9IHR0eS0+dGVybWlvczsKKwl0ZXJtaW9zLT5jX2lmbGFnICY9CisJCX4oSUdOQlJLCS8qIGRpc2FibGUgaWdub3JlIGJyZWFrICovCisJCXwgQlJLSU5UCS8qIGRpc2FibGUgYnJlYWsgY2F1c2VzIGludGVycnVwdCAqLworCQl8IFBBUk1SSwkvKiBkaXNhYmxlIG1hcmsgcGFyaXR5IGVycm9ycyAqLworCQl8IElTVFJJUAkvKiBkaXNhYmxlIGNsZWFyIGhpZ2ggYml0IG9mIGlucHV0IGNoYXJhY3RlcnMgKi8KKwkJfCBJTkxDUgkJLyogZGlzYWJsZSB0cmFuc2xhdGUgTkwgdG8gQ1IgKi8KKwkJfCBJR05DUgkJLyogZGlzYWJsZSBpZ25vcmUgQ1IgKi8KKwkJfCBJQ1JOTAkJLyogZGlzYWJsZSB0cmFuc2xhdGUgQ1IgdG8gTkwgKi8KKwkJfCBJWE9OKTsJLyogZGlzYWJsZSBlbmFibGUgWE9OL1hPRkYgZmxvdyBjb250cm9sICovCisKKwkvKiBkaXNhYmxlIHBvc3Rwcm9jZXNzIG91dHB1dCBjaGFyYWN0ZXJzICovCisJdGVybWlvcy0+Y19vZmxhZyAmPSB+T1BPU1Q7CisKKwl0ZXJtaW9zLT5jX2xmbGFnICY9CisJCX4oRUNITwkJLyogZGlzYWJsZSBlY2hvIGlucHV0IGNoYXJhY3RlcnMgKi8KKwkJfCBFQ0hPTkwJLyogZGlzYWJsZSBlY2hvIG5ldyBsaW5lICovCisJCXwgSUNBTk9OCS8qIGRpc2FibGUgZXJhc2UsIGtpbGwsIHdlcmFzZSwgYW5kIHJwcm50CisJCQkJICAgc3BlY2lhbCBjaGFyYWN0ZXJzICovCisJCXwgSVNJRwkJLyogZGlzYWJsZSBpbnRlcnJ1cHQsIHF1aXQsIGFuZCBzdXNwZW5kIHNwZWNpYWwKKwkJCQkgICBjaGFyYWN0ZXJzICovCisJCXwgSUVYVEVOKTsJLyogZGlzYWJsZSBub24tUE9TSVggc3BlY2lhbCBjaGFyYWN0ZXJzICovCisKKwl0ZXJtaW9zLT5jX2NmbGFnICY9CisJCX4oQ1NJWkUJCS8qIG5vIHNpemUgKi8KKwkJfCBQQVJFTkIJLyogZGlzYWJsZSBwYXJpdHkgYml0ICovCisJCXwgQ0JBVUQJCS8qIGNsZWFyIGN1cnJlbnQgYmF1ZCByYXRlICovCisJCXwgQ0JBVURFWCk7CS8qIGNsZWFyIGN1cnJlbnQgYnVhZCByYXRlICovCisKKwl0ZXJtaW9zLT5jX2NmbGFnIHw9IENTODsJLyogY2hhcmFjdGVyIHNpemUgOCBiaXRzICovCisKKwkvKiBiYXVkIHJhdGUgMTE1MjAwICovCisJdHR5X2VuY29kZV9iYXVkX3JhdGUoc2VyaWFsLT50dHksIDExNTIwMCwgMTE1MjAwKTsKKworCS8qCisJICogRm9yY2UgbG93X2xhdGVuY3kgb247IG90aGVyd2lzZSB0aGUgcHVzaGVzIGFyZSBzY2hlZHVsZWQ7CisJICogdGhpcyBpcyBiYWQgYXMgaXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIGRyb3BwaW5nIGJ5dGVzCisJICogb24gdGhlIGZsb29yLiAgV2UgZG9uJ3Qgd2FudCB0byBkcm9wIGJ5dGVzIG9uIHRoZSBmbG9vci4gOikKKwkgKi8KKwlzZXJpYWwtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCXJldHVybjsKK30KKworLyogb3BlbiB0aGUgcmVxdWVzdGVkIHNlcmlhbCBwb3J0ICovCitzdGF0aWMgaW50IGhzb19zZXJpYWxfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3NlcmlhbF9ieV9pbmRleCh0dHktPmluZGV4KTsKKwlpbnQgcmVzdWx0OworCisJLyogc2FuaXR5IGNoZWNrICovCisJaWYgKHNlcmlhbCA9PSBOVUxMIHx8IHNlcmlhbC0+bWFnaWMgIT0gSFNPX1NFUklBTF9NQUdJQykgeworCQl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJRDEoIkZhaWxlZCB0byBvcGVuIHBvcnQiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbXV0ZXhfbG9jaygmc2VyaWFsLT5wYXJlbnQtPm11dGV4KTsKKwlyZXN1bHQgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5wYXJlbnQtPmludGVyZmFjZSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyX291dDsKKworCUQxKCJPcGVuaW5nICVkIiwgc2VyaWFsLT5taW5vcik7CisJa3JlZl9nZXQoJnNlcmlhbC0+cGFyZW50LT5yZWYpOworCisJLyogc2V0dXAgKi8KKwl0dHktPmRyaXZlcl9kYXRhID0gc2VyaWFsOworCXNlcmlhbC0+dHR5ID0gdHR5OworCisJLyogY2hlY2sgZm9yIHBvcnQgYWxscmVhZHkgb3BlbmVkLCBpZiBub3Qgc2V0IHRoZSB0ZXJtaW9zICovCisJc2VyaWFsLT5vcGVuX2NvdW50Kys7CisJaWYgKHNlcmlhbC0+b3Blbl9jb3VudCA9PSAxKSB7CisJCXR0eS0+bG93X2xhdGVuY3kgPSAxOworCQlzZXJpYWwtPmZsYWdzID0gMDsKKwkJLyogRm9yY2UgZGVmYXVsdCB0ZXJtaW8gc2V0dGluZ3MgKi8KKwkJX2hzb19zZXJpYWxfc2V0X3Rlcm1pb3ModHR5LCBOVUxMKTsKKwkJcmVzdWx0ID0gaHNvX3N0YXJ0X3NlcmlhbF9kZXZpY2Uoc2VyaWFsLT5wYXJlbnQsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KSB7CisJCQloc29fc3RvcF9zZXJpYWxfZGV2aWNlKHNlcmlhbC0+cGFyZW50KTsKKwkJCXNlcmlhbC0+b3Blbl9jb3VudC0tOworCQkJa3JlZl9wdXQoJnNlcmlhbC0+cGFyZW50LT5yZWYsIGhzb19zZXJpYWxfcmVmX2ZyZWUpOworCQl9CisJfSBlbHNlIHsKKwkJRDEoIlBvcnQgd2FzIGFscmVhZHkgb3BlbiIpOworCX0KKworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPnBhcmVudC0+aW50ZXJmYWNlKTsKKworCS8qIGRvbmUgKi8KKwlpZiAocmVzdWx0KQorCQloc29fc2VyaWFsX3Rpb2Ntc2V0KHR0eSwgTlVMTCwgVElPQ01fUlRTIHwgVElPQ01fRFRSLCAwKTsKK2Vycl9vdXQ6CisJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPnBhcmVudC0+bXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIGNsb3NlIHRoZSByZXF1ZXN0ZWQgc2VyaWFsIHBvcnQgKi8KK3N0YXRpYyB2b2lkIGhzb19zZXJpYWxfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdTggdXNiX2dvbmU7CisKKwlEMSgiQ2xvc2luZyBzZXJpYWwgcG9ydCIpOworCisJbXV0ZXhfbG9jaygmc2VyaWFsLT5wYXJlbnQtPm11dGV4KTsKKwl1c2JfZ29uZSA9IHNlcmlhbC0+cGFyZW50LT51c2JfZ29uZTsKKworCWlmICghdXNiX2dvbmUpCisJCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPnBhcmVudC0+aW50ZXJmYWNlKTsKKworCS8qIHJlc2V0IHRoZSBydHMgYW5kIGR0ciAqLworCS8qIGRvIHRoZSBhY3R1YWwgY2xvc2UgKi8KKwlzZXJpYWwtPm9wZW5fY291bnQtLTsKKwlpZiAoc2VyaWFsLT5vcGVuX2NvdW50IDw9IDApIHsKKwkJa3JlZl9wdXQoJnNlcmlhbC0+cGFyZW50LT5yZWYsIGhzb19zZXJpYWxfcmVmX2ZyZWUpOworCQlzZXJpYWwtPm9wZW5fY291bnQgPSAwOworCQlpZiAoc2VyaWFsLT50dHkpIHsKKwkJCXNlcmlhbC0+dHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJCQlzZXJpYWwtPnR0eSA9IE5VTEw7CisJCX0KKwkJaWYgKCF1c2JfZ29uZSkKKwkJCWhzb19zdG9wX3NlcmlhbF9kZXZpY2Uoc2VyaWFsLT5wYXJlbnQpOworCX0KKwlpZiAoIXVzYl9nb25lKQorCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5wYXJlbnQtPmludGVyZmFjZSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPnBhcmVudC0+bXV0ZXgpOworfQorCisvKiBjbG9zZSB0aGUgcmVxdWVzdGVkIHNlcmlhbCBwb3J0ICovCitzdGF0aWMgaW50IGhzb19zZXJpYWxfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJICAgIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3NlcmlhbF9ieV90dHkodHR5KTsKKwlpbnQgc3BhY2UsIHR4X2J5dGVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoc2VyaWFsID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2VyaWFsIGlzIE5VTExcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcmlhbC0+c2VyaWFsX2xvY2ssIGZsYWdzKTsKKworCXNwYWNlID0gc2VyaWFsLT50eF9kYXRhX2xlbmd0aCAtIHNlcmlhbC0+dHhfYnVmZmVyX2NvdW50OworCXR4X2J5dGVzID0gKGNvdW50IDwgc3BhY2UpID8gY291bnQgOiBzcGFjZTsKKworCWlmICghdHhfYnl0ZXMpCisJCWdvdG8gb3V0OworCisJbWVtY3B5KHNlcmlhbC0+dHhfYnVmZmVyICsgc2VyaWFsLT50eF9idWZmZXJfY291bnQsIGJ1ZiwgdHhfYnl0ZXMpOworCXNlcmlhbC0+dHhfYnVmZmVyX2NvdW50ICs9IHR4X2J5dGVzOworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaWFsLT5zZXJpYWxfbG9jaywgZmxhZ3MpOworCisJaHNvX2tpY2tfdHJhbnNtaXQoc2VyaWFsKTsKKwkvKiBkb25lICovCisJcmV0dXJuIHR4X2J5dGVzOworfQorCisvKiBob3cgbXVjaCByb29tIGlzIHRoZXJlIGZvciB3cml0aW5nICovCitzdGF0aWMgaW50IGhzb19zZXJpYWxfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSBnZXRfc2VyaWFsX2J5X3R0eSh0dHkpOworCWludCByb29tOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaWFsLT5zZXJpYWxfbG9jaywgZmxhZ3MpOworCXJvb20gPSBzZXJpYWwtPnR4X2RhdGFfbGVuZ3RoIC0gc2VyaWFsLT50eF9idWZmZXJfY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaWFsLT5zZXJpYWxfbG9jaywgZmxhZ3MpOworCisJLyogcmV0dXJuIGZyZWUgcm9vbSAqLworCXJldHVybiByb29tOworfQorCisvKiBzZXR1cCB0aGUgdGVybSAqLworc3RhdGljIHZvaWQgaHNvX3NlcmlhbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKK3sKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3NlcmlhbF9ieV90dHkodHR5KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9sZCkKKwkJRDUoIlRlcm1pb3MgY2FsbGVkIHdpdGg6IGNmbGFncyBuZXdbJWRdIC0gb2xkWyVkXSIsCisJCSAgIHR0eS0+dGVybWlvcy0+Y19jZmxhZywgb2xkLT5jX2NmbGFnKTsKKworCS8qIHRoZSBhY3R1YWwgc2V0dXAgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaWFsLT5zZXJpYWxfbG9jaywgZmxhZ3MpOworCWlmIChzZXJpYWwtPm9wZW5fY291bnQpCisJCV9oc29fc2VyaWFsX3NldF90ZXJtaW9zKHR0eSwgb2xkKTsKKwllbHNlCisJCXR0eS0+dGVybWlvcyA9IG9sZDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJpYWwtPnNlcmlhbF9sb2NrLCBmbGFncyk7CisKKwkvKiBkb25lICovCisJcmV0dXJuOworfQorCisvKiBob3cgbWFueSBjaGFyYWN0ZXJzIGluIHRoZSBidWZmZXIgKi8KK3N0YXRpYyBpbnQgaHNvX3NlcmlhbF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3NlcmlhbF9ieV90dHkodHR5KTsKKwlpbnQgY2hhcnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChzZXJpYWwgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaWFsLT5zZXJpYWxfbG9jaywgZmxhZ3MpOworCWNoYXJzID0gc2VyaWFsLT50eF9idWZmZXJfY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaWFsLT5zZXJpYWxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNoYXJzOworfQorCitzdGF0aWMgaW50IGhzb19zZXJpYWxfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSBnZXRfc2VyaWFsX2J5X3R0eSh0dHkpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoIXNlcmlhbCkgeworCQlEMSgibm8gdHR5IHN0cnVjdHVyZXMiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcmlhbC0+c2VyaWFsX2xvY2ssIGZsYWdzKTsKKwl2YWx1ZSA9ICgoc2VyaWFsLT5ydHNfc3RhdGUpID8gVElPQ01fUlRTIDogMCkgfAorCSAgICAoKHNlcmlhbC0+ZHRyX3N0YXRlKSA/IFRJT0NNX0RUUiA6IDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlcmlhbC0+c2VyaWFsX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCBoc29fc2VyaWFsX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlpbnQgdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpZl9udW07CisJc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCA9IGdldF9zZXJpYWxfYnlfdHR5KHR0eSk7CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoIXNlcmlhbCkgeworCQlEMSgibm8gdHR5IHN0cnVjdHVyZXMiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmX251bSA9IHNlcmlhbC0+cGFyZW50LT5pbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZXJpYWwtPnNlcmlhbF9sb2NrLCBmbGFncyk7CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJc2VyaWFsLT5ydHNfc3RhdGUgPSAxOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCXNlcmlhbC0+ZHRyX3N0YXRlID0gMTsKKworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJc2VyaWFsLT5ydHNfc3RhdGUgPSAwOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJc2VyaWFsLT5kdHJfc3RhdGUgPSAwOworCisJaWYgKHNlcmlhbC0+ZHRyX3N0YXRlKQorCQl2YWwgfD0gMHgwMTsKKwlpZiAoc2VyaWFsLT5ydHNfc3RhdGUpCisJCXZhbCB8PSAweDAyOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaWFsLT5zZXJpYWxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPnBhcmVudC0+dXNiLAorCQkJICAgICAgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPnBhcmVudC0+dXNiLCAwKSwgMHgyMiwKKwkJCSAgICAgICAweDIxLCB2YWwsIGlmX251bSwgTlVMTCwgMCwKKwkJCSAgICAgICBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Cit9CisKKy8qIHN0YXJ0cyBhIHRyYW5zbWl0ICovCitzdGF0aWMgdm9pZCBoc29fa2lja190cmFuc21pdChzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKQoreworCXU4ICp0ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZXJpYWwtPnNlcmlhbF9sb2NrLCBmbGFncyk7CisJaWYgKCFzZXJpYWwtPnR4X2J1ZmZlcl9jb3VudCkKKwkJZ290byBvdXQ7CisKKwlpZiAoc2VyaWFsLT50eF91cmJfdXNlZCkKKwkJZ290byBvdXQ7CisKKwkvKiBXYWtldXAgVVNCIGludGVyZmFjZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoaHNvX2dldF9hY3Rpdml0eShzZXJpYWwtPnBhcmVudCkgPT0gLUVBR0FJTikKKwkJZ290byBvdXQ7CisKKwkvKiBTd2l0Y2ggcG9pbnRlcnMgYXJvdW5kIHRvIGF2b2lkIG1lbWNweSAqLworCXRlbXAgPSBzZXJpYWwtPnR4X2J1ZmZlcjsKKwlzZXJpYWwtPnR4X2J1ZmZlciA9IHNlcmlhbC0+dHhfZGF0YTsKKwlzZXJpYWwtPnR4X2RhdGEgPSB0ZW1wOworCXNlcmlhbC0+dHhfZGF0YV9jb3VudCA9IHNlcmlhbC0+dHhfYnVmZmVyX2NvdW50OworCXNlcmlhbC0+dHhfYnVmZmVyX2NvdW50ID0gMDsKKworCS8qIElmIHRlbXAgaXMgc2V0LCBpdCBtZWFucyB3ZSBzd2l0Y2hlZCBidWZmZXJzICovCisJaWYgKHRlbXAgJiYgc2VyaWFsLT53cml0ZV9kYXRhKSB7CisJCXJlcyA9IHNlcmlhbC0+d3JpdGVfZGF0YShzZXJpYWwpOworCQlpZiAocmVzID49IDApCisJCQlzZXJpYWwtPnR4X3VyYl91c2VkID0gMTsKKwl9CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaWFsLT5zZXJpYWxfbG9jaywgZmxhZ3MpOworfQorCisvKiBtYWtlIGEgcmVxdWVzdCAoZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgZGF0YSB0byBtdXhlZCBzZXJpYWwgcG9ydCkgKi8KK3N0YXRpYyBpbnQgbXV4X2RldmljZV9yZXF1ZXN0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwsIHU4IHR5cGUsIHUxNiBwb3J0LAorCQkJICAgICAgc3RydWN0IHVyYiAqY3RybF91cmIsCisJCQkgICAgICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsX3JlcSwKKwkJCSAgICAgIHU4ICpjdHJsX3VyYl9kYXRhLCB1MzIgc2l6ZSkKK3sKKwlpbnQgcmVzdWx0OworCWludCBwaXBlOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKCFzZXJpYWwgfHwgIWN0cmxfdXJiIHx8ICFjdHJsX3JlcSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcm9uZyBhcmd1bWVudHNcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogaW5pdGlhbGl6ZSAqLworCWN0cmxfcmVxLT53VmFsdWUgPSAwOworCWN0cmxfcmVxLT53SW5kZXggPSBoc29fcG9ydF90b19tdXgocG9ydCk7CisJY3RybF9yZXEtPndMZW5ndGggPSBzaXplOworCisJaWYgKHR5cGUgPT0gVVNCX0NEQ19HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFKSB7CisJCS8qIFJlYWRpbmcgY29tbWFuZCAqLworCQljdHJsX3JlcS0+YlJlcXVlc3RUeXBlID0gVVNCX0RJUl9JTiB8CisJCQkJCSBVU0JfVFlQRV9PUFRJT05fVkVORE9SIHwKKwkJCQkJIFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCWN0cmxfcmVxLT5iUmVxdWVzdCA9IFVTQl9DRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRTsKKwkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPnBhcmVudC0+dXNiLCAwKTsKKwl9IGVsc2UgeworCQkvKiBXcml0aW5nIGNvbW1hbmQgKi8KKwkJY3RybF9yZXEtPmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwKKwkJCQkJIFVTQl9UWVBFX09QVElPTl9WRU5ET1IgfAorCQkJCQkgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJY3RybF9yZXEtPmJSZXF1ZXN0ID0gVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+cGFyZW50LT51c2IsIDApOworCX0KKwkvKiBzeXNsb2cgKi8KKwlEMigiJXMgY29tbWFuZCAoJTAyeCkgbGVuOiAlZCwgcG9ydDogJWQiLAorCSAgIHR5cGUgPT0gVVNCX0NEQ19HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFID8gIlJlYWQiIDogIldyaXRlIiwKKwkgICBjdHJsX3JlcS0+YlJlcXVlc3RUeXBlLCBjdHJsX3JlcS0+d0xlbmd0aCwgcG9ydCk7CisKKwkvKiBMb2FkIGN0cmwgdXJiICovCisJY3RybF91cmItPnRyYW5zZmVyX2ZsYWdzID0gMDsKKwl1c2JfZmlsbF9jb250cm9sX3VyYihjdHJsX3VyYiwKKwkJCSAgICAgc2VyaWFsLT5wYXJlbnQtPnVzYiwKKwkJCSAgICAgcGlwZSwKKwkJCSAgICAgKHU4ICopIGN0cmxfcmVxLAorCQkJICAgICBjdHJsX3VyYl9kYXRhLCBzaXplLCBjdHJsX2NhbGxiYWNrLCBzZXJpYWwpOworCS8qIFNlbmQgaXQgb24gbWVycnkgd2F5ICovCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoY3RybF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmY3RybF91cmItPmRldi0+ZGV2LAorCQkJIiVzIGZhaWxlZCBzdWJtaXQgY3RybF91cmIgJWQgdHlwZSAlZCIsIF9fZnVuY19fLAorCQkJcmVzdWx0LCB0eXBlKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBkb25lICovCisJcmV0dXJuIHNpemU7Cit9CisKKy8qIGNhbGxlZCBieSBpbnRyX2NhbGxiYWNrIHdoZW4gcmVhZCBvY2N1cnMgKi8KK3N0YXRpYyBpbnQgaHNvX211eF9zZXJpYWxfcmVhZChzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKQoreworCWlmICghc2VyaWFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNsZWFuIGRhdGEgKi8KKwltZW1zZXQoc2VyaWFsLT5yeF9kYXRhWzBdLCAwLCBDVFJMX1VSQl9SWF9TSVpFKTsKKwkvKiBtYWtlIHRoZSByZXF1ZXN0ICovCisKKwlpZiAoc2VyaWFsLT5udW1fcnhfdXJicyAhPSAxKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+cGFyZW50LT5pbnRlcmZhY2UtPmRldiwKKwkJCSJFUlJPUjogbXV4J2QgcmVhZHMgd2l0aCBtdWx0aXBsZSBidWZmZXJzICIKKwkJCSJub3QgcG9zc2libGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIG11eF9kZXZpY2VfcmVxdWVzdChzZXJpYWwsCisJCQkJICBVU0JfQ0RDX0dFVF9FTkNBUFNVTEFURURfUkVTUE9OU0UsCisJCQkJICBzZXJpYWwtPnBhcmVudC0+cG9ydF9zcGVjICYgSFNPX1BPUlRfTUFTSywKKwkJCQkgIHNlcmlhbC0+cnhfdXJiWzBdLAorCQkJCSAgJnNlcmlhbC0+Y3RybF9yZXFfcngsCisJCQkJICBzZXJpYWwtPnJ4X2RhdGFbMF0sIHNlcmlhbC0+cnhfZGF0YV9sZW5ndGgpOworfQorCisvKiB1c2VkIGZvciBtdXhlZCBzZXJpYWwgcG9ydCBjYWxsYmFjayAobXV4ZWQgc2VyaWFsIHJlYWQpICovCitzdGF0aWMgdm9pZCBpbnRyX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgaHNvX3NoYXJlZF9pbnQgKnNoYXJlZF9pbnQgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbDsKKwl1bnNpZ25lZCBjaGFyICpwb3J0X3JlcTsKKwlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJaW50IGk7CisKKwl1c2JfbWFya19sYXN0X2J1c3kodXJiLT5kZXYpOworCisJLyogc2FuaXR5IGNoZWNrICovCisJaWYgKCFzaGFyZWRfaW50KQorCQlyZXR1cm47CisKKwkvKiBzdGF0dXMgY2hlY2sgKi8KKwlpZiAoc3RhdHVzKSB7CisJCWxvZ191c2Jfc3RhdHVzKHN0YXR1cywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCUQ0KCJcbi0tLSBHb3QgaW50ciBjYWxsYmFjayAweCUwMlggLS0tIiwgc3RhdHVzKTsKKworCS8qIHdoYXQgcmVxdWVzdD8gKi8KKwlwb3J0X3JlcSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCUQ0KCIgcG9ydF9yZXEgPSAweCUuMlhcbiIsICpwb3J0X3JlcSk7CisJLyogbG9vcCBvdmVyIGFsbCBtdXhlZCBwb3J0cyB0byBmaW5kIHRoZSBvbmUgc2VuZGluZyB0aGlzICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkvKiBtYXggOCBjaGFubmVscyBvbiBNVVggKi8KKwkJaWYgKCpwb3J0X3JlcSAmICgxIDw8IGkpKSB7CisJCQlzZXJpYWwgPSBnZXRfc2VyaWFsX2J5X3NoYXJlZF9pbnRfYW5kX3R5cGUoc2hhcmVkX2ludCwKKwkJCQkJCQkJICAgKDEgPDwgaSkpOworCQkJaWYgKHNlcmlhbCAhPSBOVUxMKSB7CisJCQkJRDEoIlBlbmRpbmcgcmVhZCBpbnRlcnJ1cHQgb24gcG9ydCAlZFxuIiwgaSk7CisJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhTT19TRVJJQUxfRkxBR19SWF9TRU5ULAorCQkJCQkJICAgICAgJnNlcmlhbC0+ZmxhZ3MpKSB7CisJCQkJCS8qIFNldHVwIGFuZCBzZW5kIGEgY3RybCByZXEgcmVhZCBvbgorCQkJCQkgKiBwb3J0IGkgKi8KKwkJCQkJaHNvX211eF9zZXJpYWxfcmVhZChzZXJpYWwpOworCQkJCX0gZWxzZSB7CisJCQkJCUQxKCJBbHJlYWR5IHBlbmRpbmcgYSByZWFkIG9uICIKKwkJCQkJICAgInBvcnQgJWRcbiIsIGkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkvKiBSZXN1Ym1pdCBpbnRlcnJ1cHQgdXJiICovCisJaHNvX211eF9zdWJtaXRfaW50cl91cmIoc2hhcmVkX2ludCwgdXJiLT5kZXYsIEdGUF9BVE9NSUMpOworfQorCisvKiBjYWxsZWQgZm9yIHdyaXRpbmcgdG8gbXV4ZWQgc2VyaWFsIHBvcnQgKi8KK3N0YXRpYyBpbnQgaHNvX211eF9zZXJpYWxfd3JpdGVfZGF0YShzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKQoreworCWlmIChOVUxMID09IHNlcmlhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gbXV4X2RldmljZV9yZXF1ZXN0KHNlcmlhbCwKKwkJCQkgIFVTQl9DRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORCwKKwkJCQkgIHNlcmlhbC0+cGFyZW50LT5wb3J0X3NwZWMgJiBIU09fUE9SVF9NQVNLLAorCQkJCSAgc2VyaWFsLT50eF91cmIsCisJCQkJICAmc2VyaWFsLT5jdHJsX3JlcV90eCwKKwkJCQkgIHNlcmlhbC0+dHhfZGF0YSwgc2VyaWFsLT50eF9kYXRhX2NvdW50KTsKK30KKworLyogd3JpdGUgY2FsbGJhY2sgZm9yIERpYWcgYW5kIENTIHBvcnQgKi8KK3N0YXRpYyB2b2lkIGhzb19zdGRfc2VyaWFsX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSB1cmItPmNvbnRleHQ7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJLyogc2FuaXR5IGNoZWNrICovCisJaWYgKCFzZXJpYWwpIHsKKwkJRDEoInNlcmlhbCA9PSBOVUxMIik7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2soJnNlcmlhbC0+c2VyaWFsX2xvY2spOworCXNlcmlhbC0+dHhfdXJiX3VzZWQgPSAwOworCXNwaW5fdW5sb2NrKCZzZXJpYWwtPnNlcmlhbF9sb2NrKTsKKwlpZiAoc3RhdHVzKSB7CisJCWxvZ191c2Jfc3RhdHVzKHN0YXR1cywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWhzb19wdXRfYWN0aXZpdHkoc2VyaWFsLT5wYXJlbnQpOworCXR0eV93YWtldXAoc2VyaWFsLT50dHkpOworCWhzb19raWNrX3RyYW5zbWl0KHNlcmlhbCk7CisKKwlEMSgiICIpOworCXJldHVybjsKK30KKworLyogY2FsbGVkIGZvciB3cml0aW5nIGRpYWcgb3IgQ1Mgc2VyaWFsIHBvcnQgKi8KK3N0YXRpYyBpbnQgaHNvX3N0ZF9zZXJpYWxfd3JpdGVfZGF0YShzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBjb3VudCA9IHNlcmlhbC0+dHhfZGF0YV9jb3VudDsKKwlpbnQgcmVzdWx0OworCisJdXNiX2ZpbGxfYnVsa191cmIoc2VyaWFsLT50eF91cmIsCisJCQkgIHNlcmlhbC0+cGFyZW50LT51c2IsCisJCQkgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPnBhcmVudC0+dXNiLAorCQkJCQkgIHNlcmlhbC0+b3V0X2VuZHAtPgorCQkJCQkgIGJFbmRwb2ludEFkZHJlc3MgJiAweDdGKSwKKwkJCSAgc2VyaWFsLT50eF9kYXRhLCBzZXJpYWwtPnR4X2RhdGFfY291bnQsCisJCQkgIGhzb19zdGRfc2VyaWFsX3dyaXRlX2J1bGtfY2FsbGJhY2ssIHNlcmlhbCk7CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihzZXJpYWwtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfd2Fybigmc2VyaWFsLT5wYXJlbnQtPnVzYi0+ZGV2LAorCQkJICJGYWlsZWQgdG8gc3VibWl0IHVyYiAtIHJlcyAlZFxuIiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIGNhbGxiYWNrIGFmdGVyIHJlYWQgb3Igd3JpdGUgb24gbXV4ZWQgc2VyaWFsIHBvcnQgKi8KK3N0YXRpYyB2b2lkIGN0cmxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJnNlcmlhbC0+c2VyaWFsX2xvY2spOworCXNlcmlhbC0+dHhfdXJiX3VzZWQgPSAwOworCXNwaW5fdW5sb2NrKCZzZXJpYWwtPnNlcmlhbF9sb2NrKTsKKwlpZiAoc3RhdHVzKSB7CisJCWxvZ191c2Jfc3RhdHVzKHN0YXR1cywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyogd2hhdCByZXF1ZXN0PyAqLworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopKHVyYi0+c2V0dXBfcGFja2V0KTsKKwlENCgiXG4tLS0gR290IG11eGVkIGN0cmwgY2FsbGJhY2sgMHglMDJYIC0tLSIsIHN0YXR1cyk7CisJRDQoIkFjdHVhbCBsZW5ndGggb2YgdXJiID0gJWRcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJRFVNUDEodXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwlpZiAocmVxLT5iUmVxdWVzdFR5cGUgPT0KKwkgICAgKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9PUFRJT05fVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkpIHsKKwkJLyogcmVzcG9uc2UgdG8gYSByZWFkIGNvbW1hbmQgKi8KKwkJaWYgKHNlcmlhbC0+b3Blbl9jb3VudCA+IDApIHsKKwkJCS8qIGhhbmRsZSBSWCBkYXRhIHRoZSBub3JtYWwgd2F5ICovCisJCQlwdXRfcnhidWZfZGF0YSh1cmIsIHNlcmlhbCk7CisJCX0KKworCQkvKiBSZSBpc3N1ZSBhIHJlYWQgYXMgbG9uZyBhcyB3ZSByZWNlaXZlIGRhdGEuICovCisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gMCkKKwkJCWhzb19tdXhfc2VyaWFsX3JlYWQoc2VyaWFsKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KEhTT19TRVJJQUxfRkxBR19SWF9TRU5ULCAmc2VyaWFsLT5mbGFncyk7CisJfSBlbHNlIHsKKwkJaHNvX3B1dF9hY3Rpdml0eShzZXJpYWwtPnBhcmVudCk7CisJCXR0eV93YWtldXAoc2VyaWFsLT50dHkpOworCQkvKiByZXNwb25zZSB0byBhIHdyaXRlIGNvbW1hbmQgKi8KKwkJaHNvX2tpY2tfdHJhbnNtaXQoc2VyaWFsKTsKKwl9Cit9CisKKy8qIGhhbmRsZSBSWCBkYXRhIGZvciBzZXJpYWwgcG9ydCAqLworc3RhdGljIHZvaWQgcHV0X3J4YnVmX2RhdGEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzZXJpYWwtPnR0eTsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICh1cmIgPT0gTlVMTCB8fCBzZXJpYWwgPT0gTlVMTCkgeworCQlEMSgic2VyaWFsID0gTlVMTCIpOworCQlyZXR1cm47CisJfQorCisJLyogUHVzaCBkYXRhIHRvIHR0eSAqLworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCUQxKCJkYXRhIHRvIHB1c2ggdG8gdHR5Iik7CisJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9Cit9CisKKy8qIHJlYWQgY2FsbGJhY2sgZm9yIERpYWcgYW5kIENTIHBvcnQgKi8KK3N0YXRpYyB2b2lkIGhzb19zdGRfc2VyaWFsX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcmVzdWx0OworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmICghc2VyaWFsKSB7CisJCUQxKCJzZXJpYWwgPT0gTlVMTCIpOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChzdGF0dXMpIHsKKwkJbG9nX3VzYl9zdGF0dXMoc3RhdHVzLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlENCgiXG4tLS0gR290IHNlcmlhbF9yZWFkX2J1bGsgY2FsbGJhY2sgJTAyeCAtLS0iLCBzdGF0dXMpOworCUQxKCJBY3R1YWwgbGVuZ3RoID0gJWRcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJRFVNUDEodXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwkvKiBBbnlvbmUgbGlzdGVuaW5nPyAqLworCWlmIChzZXJpYWwtPm9wZW5fY291bnQgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChzZXJpYWwtPnBhcmVudC0+cG9ydF9zcGVjICYgSFNPX0lORk9fQ1JDX0JVRykgeworCQkJdTMyIHJlc3Q7CisJCQl1OCBjcmNfY2hlY2tbNF0gPSB7IDB4REUsIDB4QUQsIDB4QkUsIDB4RUYgfTsKKwkJCXJlc3QgPQorCQkJICAgIHVyYi0+YWN0dWFsX2xlbmd0aCAlCisJCQkgICAgc2VyaWFsLT5pbl9lbmRwLT53TWF4UGFja2V0U2l6ZTsKKwkJCWlmICgoKHJlc3QgPT0gNSkgfHwgKHJlc3QgPT0gNikpCisJCQkgICAgJiYgIW1lbWNtcCgoKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSArCisJCQkJICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCAtIDQsIGNyY19jaGVjaywgNCkpIHsKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGggLT0gNDsKKwkJCX0KKwkJfQorCQkvKiBWYWxpZCBkYXRhLCBoYW5kbGUgUlggZGF0YSAqLworCQlwdXRfcnhidWZfZGF0YSh1cmIsIHNlcmlhbCk7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gLUVOT0VOVCB8fCBzdGF0dXMgPT0gLUVDT05OUkVTRVQpIHsKKwkJLyogVW5saW5rZWQgLSBjaGVjayBmb3IgdGhyb3R0bGVkIHBvcnQuICovCisJCUQyKCJQb3J0ICVkLCBzdWNjZXNzZnVsbHkgdW5saW5rZWQgdXJiIiwgc2VyaWFsLT5taW5vcik7CisJfSBlbHNlIHsKKwkJRDIoIlBvcnQgJWQsIHN0YXR1cyA9ICVkIGZvciByZWFkIHVyYiIsIHNlcmlhbC0+bWlub3IsIHN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2JfbWFya19sYXN0X2J1c3kodXJiLT5kZXYpOworCisJLyogV2UgYXJlIGRvbmUgd2l0aCB0aGlzIFVSQiwgcmVzdWJtaXQgaXQuIFByZXAgdGhlIFVTQiB0byB3YWl0IGZvcgorCSAqIGFub3RoZXIgZnJhbWUgKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+cGFyZW50LT51c2IsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPnBhcmVudC0+dXNiLAorCQkJCQkgIHNlcmlhbC0+aW5fZW5kcC0+CisJCQkJCSAgYkVuZHBvaW50QWRkcmVzcyAmIDB4N0YpLAorCQkJICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgc2VyaWFsLT5yeF9kYXRhX2xlbmd0aCwKKwkJCSAgaHNvX3N0ZF9zZXJpYWxfcmVhZF9idWxrX2NhbGxiYWNrLCBzZXJpYWwpOworCS8qIEdpdmUgdGhpcyB0byB0aGUgVVNCIHN1YnN5c3RlbSBzbyBpdCBjYW4gdGVsbCB1cyB3aGVuIG1vcmUgZGF0YQorCSAqIGFycml2ZXMuICovCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyBmYWlsZWQgc3VibWl0IHNlcmlhbCByeF91cmIgJWQiLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CisJfQorfQorCisvKiBCYXNlIGRyaXZlciBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQgaHNvX2xvZ19wb3J0KHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KQoreworCWNoYXIgKnBvcnRfdHlwZTsKKwljaGFyIHBvcnRfZGV2WzIwXTsKKworCXN3aXRjaCAoaHNvX2Rldi0+cG9ydF9zcGVjICYgSFNPX1BPUlRfTUFTSykgeworCWNhc2UgSFNPX1BPUlRfQ09OVFJPTDoKKwkJcG9ydF90eXBlID0gIkNvbnRyb2wiOworCQlicmVhazsKKwljYXNlIEhTT19QT1JUX0FQUDoKKwkJcG9ydF90eXBlID0gIkFwcGxpY2F0aW9uIjsKKwkJYnJlYWs7CisJY2FzZSBIU09fUE9SVF9HUFM6CisJCXBvcnRfdHlwZSA9ICJHUFMiOworCQlicmVhazsKKwljYXNlIEhTT19QT1JUX0dQU19DT05UUk9MOgorCQlwb3J0X3R5cGUgPSAiR1BTIGNvbnRyb2wiOworCQlicmVhazsKKwljYXNlIEhTT19QT1JUX0FQUDI6CisJCXBvcnRfdHlwZSA9ICJBcHBsaWNhdGlvbjIiOworCQlicmVhazsKKwljYXNlIEhTT19QT1JUX1BDU0M6CisJCXBvcnRfdHlwZSA9ICJQQ1NDIjsKKwkJYnJlYWs7CisJY2FzZSBIU09fUE9SVF9ESUFHOgorCQlwb3J0X3R5cGUgPSAiRGlhZ25vc3RpYyI7CisJCWJyZWFrOworCWNhc2UgSFNPX1BPUlRfRElBRzI6CisJCXBvcnRfdHlwZSA9ICJEaWFnbm9zdGljMiI7CisJCWJyZWFrOworCWNhc2UgSFNPX1BPUlRfTU9ERU06CisJCXBvcnRfdHlwZSA9ICJNb2RlbSI7CisJCWJyZWFrOworCWNhc2UgSFNPX1BPUlRfTkVUV09SSzoKKwkJcG9ydF90eXBlID0gIk5ldHdvcmsiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwb3J0X3R5cGUgPSAiVW5rbm93biI7CisJCWJyZWFrOworCX0KKwlpZiAoKGhzb19kZXYtPnBvcnRfc3BlYyAmIEhTT19QT1JUX01BU0spID09IEhTT19QT1JUX05FVFdPUkspIHsKKwkJc3ByaW50Zihwb3J0X2RldiwgIiVzIiwgZGV2Mm5ldChoc29fZGV2KS0+bmV0LT5uYW1lKTsKKwl9IGVsc2UKKwkJc3ByaW50Zihwb3J0X2RldiwgIi9kZXYvJXMlZCIsIHR0eV9maWxlbmFtZSwKKwkJCWRldjJzZXIoaHNvX2RldiktPm1pbm9yKTsKKworCWRldl9kYmcoJmhzb19kZXYtPmludGVyZmFjZS0+ZGV2LCAiSFNPOiBGb3VuZCAlcyBwb3J0ICVzXG4iLAorCQlwb3J0X3R5cGUsIHBvcnRfZGV2KTsKK30KKworc3RhdGljIGludCBoc29fc3RhcnRfbmV0X2RldmljZShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldikKK3sKKwlpbnQgaSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgaHNvX25ldCAqaHNvX25ldCA9IGRldjJuZXQoaHNvX2Rldik7CisKKwlpZiAoIWhzb19uZXQpCisJCXJldHVybiAtRU5PREVWOworCisJLyogc2VuZCBVUkJzIGZvciBhbGwgcmVhZCBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IE1VWF9CVUxLX1JYX0JVRl9DT1VOVDsgaSsrKSB7CisKKwkJLyogUHJlcCBhIHJlY2VpdmUgVVJCICovCisJCXVzYl9maWxsX2J1bGtfdXJiKGhzb19uZXQtPm11eF9idWxrX3J4X3VyYl9wb29sW2ldLAorCQkJCSAgaHNvX2Rldi0+dXNiLAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGhzb19kZXYtPnVzYiwKKwkJCQkJCSAgaHNvX25ldC0+aW5fZW5kcC0+CisJCQkJCQkgIGJFbmRwb2ludEFkZHJlc3MgJiAweDdGKSwKKwkJCQkgIGhzb19uZXQtPm11eF9idWxrX3J4X2J1Zl9wb29sW2ldLAorCQkJCSAgTVVYX0JVTEtfUlhfQlVGX1NJWkUsIHJlYWRfYnVsa19jYWxsYmFjaywKKwkJCQkgIGhzb19uZXQpOworCisJCS8qIFB1dCBpdCBvdXQgdGhlcmUgc28gdGhlIGRldmljZSBjYW4gc2VuZCB1cyBzdHVmZiAqLworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihoc29fbmV0LT5tdXhfYnVsa19yeF91cmJfcG9vbFtpXSwKKwkJCQkJR0ZQX05PSU8pOworCQlpZiAocmVzdWx0KQorCQkJZGV2X3dhcm4oJmhzb19kZXYtPnVzYi0+ZGV2LAorCQkJCSIlcyBmYWlsZWQgbXV4X2J1bGtfcnhfdXJiWyVkXSAlZFxuIiwgX19mdW5jX18sCisJCQkJaSwgcmVzdWx0KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGhzb19zdG9wX25ldF9kZXZpY2Uoc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXYpCit7CisJaW50IGk7CisJc3RydWN0IGhzb19uZXQgKmhzb19uZXQgPSBkZXYybmV0KGhzb19kZXYpOworCisJaWYgKCFoc29fbmV0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7IGkgPCBNVVhfQlVMS19SWF9CVUZfQ09VTlQ7IGkrKykgeworCQlpZiAoaHNvX25ldC0+bXV4X2J1bGtfcnhfdXJiX3Bvb2xbaV0pCisJCQl1c2Jfa2lsbF91cmIoaHNvX25ldC0+bXV4X2J1bGtfcnhfdXJiX3Bvb2xbaV0pOworCisJfQorCWlmIChoc29fbmV0LT5tdXhfYnVsa190eF91cmIpCisJCXVzYl9raWxsX3VyYihoc29fbmV0LT5tdXhfYnVsa190eF91cmIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHNvX3N0YXJ0X3NlcmlhbF9kZXZpY2Uoc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXYsIGdmcF90IGZsYWdzKQoreworCWludCBpLCByZXN1bHQgPSAwOworCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSBkZXYyc2VyKGhzb19kZXYpOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogSWYgaXQgaXMgbm90IHRoZSBNVVggcG9ydCBmaWxsIGluIGFuZCBzdWJtaXQgYSBidWxrIHVyYiAoYWxyZWFkeQorCSAqIGFsbG9jYXRlZCBpbiBoc29fc2VyaWFsX3N0YXJ0KSAqLworCWlmICghKHNlcmlhbC0+cGFyZW50LT5wb3J0X3NwZWMgJiBIU09fSU5URl9NVVgpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9yeF91cmJzOyBpKyspIHsKKwkJCXVzYl9maWxsX2J1bGtfdXJiKHNlcmlhbC0+cnhfdXJiW2ldLAorCQkJCQkgIHNlcmlhbC0+cGFyZW50LT51c2IsCisJCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+cGFyZW50LT51c2IsCisJCQkJCQkJICBzZXJpYWwtPmluX2VuZHAtPgorCQkJCQkJCSAgYkVuZHBvaW50QWRkcmVzcyAmCisJCQkJCQkJICAweDdGKSwKKwkJCQkJICBzZXJpYWwtPnJ4X2RhdGFbaV0sCisJCQkJCSAgc2VyaWFsLT5yeF9kYXRhX2xlbmd0aCwKKwkJCQkJICBoc29fc3RkX3NlcmlhbF9yZWFkX2J1bGtfY2FsbGJhY2ssCisJCQkJCSAgc2VyaWFsKTsKKwkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cnhfdXJiW2ldLCBmbGFncyk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJZGV2X3dhcm4oJnNlcmlhbC0+cGFyZW50LT51c2ItPmRldiwKKwkJCQkJICJGYWlsZWQgdG8gc3VibWl0IHVyYiAtIHJlcyAlZFxuIiwKKwkJCQkJIHJlc3VsdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZzZXJpYWwtPnNoYXJlZF9pbnQtPnNoYXJlZF9pbnRfbG9jayk7CisJCWlmICghc2VyaWFsLT5zaGFyZWRfaW50LT51c2VfY291bnQpIHsKKwkJCXJlc3VsdCA9CisJCQkgICAgaHNvX211eF9zdWJtaXRfaW50cl91cmIoc2VyaWFsLT5zaGFyZWRfaW50LAorCQkJCQkJICAgIGhzb19kZXYtPnVzYiwgZmxhZ3MpOworCQl9CisJCXNlcmlhbC0+c2hhcmVkX2ludC0+dXNlX2NvdW50Kys7CisJCW11dGV4X3VubG9jaygmc2VyaWFsLT5zaGFyZWRfaW50LT5zaGFyZWRfaW50X2xvY2spOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaHNvX3N0b3Bfc2VyaWFsX2RldmljZShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gZGV2MnNlcihoc29fZGV2KTsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9yeF91cmJzOyBpKyspIHsKKwkJaWYgKHNlcmlhbC0+cnhfdXJiW2ldKQorCQkJCXVzYl9raWxsX3VyYihzZXJpYWwtPnJ4X3VyYltpXSk7CisJfQorCisJaWYgKHNlcmlhbC0+dHhfdXJiKQorCQl1c2Jfa2lsbF91cmIoc2VyaWFsLT50eF91cmIpOworCisJaWYgKHNlcmlhbC0+c2hhcmVkX2ludCkgeworCQltdXRleF9sb2NrKCZzZXJpYWwtPnNoYXJlZF9pbnQtPnNoYXJlZF9pbnRfbG9jayk7CisJCWlmIChzZXJpYWwtPnNoYXJlZF9pbnQtPnVzZV9jb3VudCAmJgorCQkgICAgKC0tc2VyaWFsLT5zaGFyZWRfaW50LT51c2VfY291bnQgPT0gMCkpIHsKKwkJCXN0cnVjdCB1cmIgKnVyYjsKKworCQkJdXJiID0gc2VyaWFsLT5zaGFyZWRfaW50LT5zaGFyZWRfaW50cl91cmI7CisJCQlpZiAodXJiKQorCQkJCXVzYl9raWxsX3VyYih1cmIpOworCQl9CisJCW11dGV4X3VubG9jaygmc2VyaWFsLT5zaGFyZWRfaW50LT5zaGFyZWRfaW50X2xvY2spOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoc29fc2VyaWFsX2NvbW1vbl9mcmVlKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisKKwlpZiAoc2VyaWFsLT5wYXJlbnQtPmRldikKKwkJZGV2aWNlX3JlbW92ZV9maWxlKHNlcmlhbC0+cGFyZW50LT5kZXYsICZkZXZfYXR0cl9oc290eXBlKTsKKworCXR0eV91bnJlZ2lzdGVyX2RldmljZSh0dHlfZHJ2LCBzZXJpYWwtPm1pbm9yKTsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9yeF91cmJzOyBpKyspIHsKKwkJLyogdW5saW5rIGFuZCBmcmVlIFJYIFVSQiAqLworCQl1c2JfZnJlZV91cmIoc2VyaWFsLT5yeF91cmJbaV0pOworCQkvKiBmcmVlIHRoZSBSWCBidWZmZXIgKi8KKwkJa2ZyZWUoc2VyaWFsLT5yeF9kYXRhW2ldKTsKKwl9CisKKwkvKiB1bmxpbmsgYW5kIGZyZWUgVFggVVJCICovCisJdXNiX2ZyZWVfdXJiKHNlcmlhbC0+dHhfdXJiKTsKKwlrZnJlZShzZXJpYWwtPnR4X2RhdGEpOworfQorCitzdGF0aWMgaW50IGhzb19zZXJpYWxfY29tbW9uX2NyZWF0ZShzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLCBpbnQgbnVtX3VyYnMsCisJCQkJICAgIGludCByeF9zaXplLCBpbnQgdHhfc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IG1pbm9yOworCWludCBpOworCisJbWlub3IgPSBnZXRfZnJlZV9zZXJpYWxfaW5kZXgoKTsKKwlpZiAobWlub3IgPCAwKQorCQlnb3RvIGV4aXQ7CisKKwkvKiByZWdpc3RlciBvdXIgbWlub3IgbnVtYmVyICovCisJc2VyaWFsLT5wYXJlbnQtPmRldiA9IHR0eV9yZWdpc3Rlcl9kZXZpY2UodHR5X2RydiwgbWlub3IsCisJCQkJCSZzZXJpYWwtPnBhcmVudC0+aW50ZXJmYWNlLT5kZXYpOworCWRldiA9IHNlcmlhbC0+cGFyZW50LT5kZXY7CisJZGV2LT5kcml2ZXJfZGF0YSA9IHNlcmlhbC0+cGFyZW50OworCWkgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaHNvdHlwZSk7CisKKwkvKiBmaWxsIGluIHNwZWNpZmljIGRhdGEgZm9yIGxhdGVyIHVzZSAqLworCXNlcmlhbC0+bWlub3IgPSBtaW5vcjsKKwlzZXJpYWwtPm1hZ2ljID0gSFNPX1NFUklBTF9NQUdJQzsKKwlzcGluX2xvY2tfaW5pdCgmc2VyaWFsLT5zZXJpYWxfbG9jayk7CisJc2VyaWFsLT5udW1fcnhfdXJicyA9IG51bV91cmJzOworCisJLyogUlgsIGFsbG9jYXRlIHVyYiBhbmQgaW5pdGlhbGl6ZSAqLworCisJLyogcHJlcGFyZSBvdXIgUlggYnVmZmVyICovCisJc2VyaWFsLT5yeF9kYXRhX2xlbmd0aCA9IHJ4X3NpemU7CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3J4X3VyYnM7IGkrKykgeworCQlzZXJpYWwtPnJ4X3VyYltpXSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2VyaWFsLT5yeF91cmJbaV0pIHsKKwkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIHVyYj9cbiIpOworCQkJZ290byBleGl0OworCQl9CisJCXNlcmlhbC0+cnhfdXJiW2ldLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCQlzZXJpYWwtPnJ4X3VyYltpXS0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDA7CisJCXNlcmlhbC0+cnhfZGF0YVtpXSA9IGt6YWxsb2Moc2VyaWFsLT5yeF9kYXRhX2xlbmd0aCwKKwkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzZXJpYWwtPnJ4X2RhdGFbaV0pIHsKKwkJCWRldl9lcnIoZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwkvKiBUWCwgYWxsb2NhdGUgdXJiIGFuZCBpbml0aWFsaXplICovCisJc2VyaWFsLT50eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghc2VyaWFsLT50eF91cmIpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgdXJiP1xuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJc2VyaWFsLT50eF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisJc2VyaWFsLT50eF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAwOworCS8qIHByZXBhcmUgb3VyIFRYIGJ1ZmZlciAqLworCXNlcmlhbC0+dHhfZGF0YV9jb3VudCA9IDA7CisJc2VyaWFsLT50eF9idWZmZXJfY291bnQgPSAwOworCXNlcmlhbC0+dHhfZGF0YV9sZW5ndGggPSB0eF9zaXplOworCXNlcmlhbC0+dHhfZGF0YSA9IGt6YWxsb2Moc2VyaWFsLT50eF9kYXRhX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXJpYWwtPnR4X2RhdGEpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisJc2VyaWFsLT50eF9idWZmZXIgPSBremFsbG9jKHNlcmlhbC0+dHhfZGF0YV9sZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghc2VyaWFsLT50eF9idWZmZXIpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR1cm4gMDsKK2V4aXQ6CisJaHNvX3NlcmlhbF9jb21tb25fZnJlZShzZXJpYWwpOworCXJldHVybiAtMTsKK30KKworLyogRnJlZXMgYSBnZW5lcmFsIGhzbyBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGhzb19mcmVlX2RldmljZShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldikKK3sKKwlrZnJlZShoc29fZGV2KTsKK30KKworLyogQ3JlYXRlcyBhIGdlbmVyYWwgaHNvIGRldmljZSAqLworc3RhdGljIHN0cnVjdCBoc29fZGV2aWNlICpoc29fY3JlYXRlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkJICAgIGludCBwb3J0X3NwZWMpCit7CisJc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXY7CisKKwloc29fZGV2ID0ga3phbGxvYyhzaXplb2YoKmhzb19kZXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWhzb19kZXYpCisJCXJldHVybiBOVUxMOworCisJaHNvX2Rldi0+cG9ydF9zcGVjID0gcG9ydF9zcGVjOworCWhzb19kZXYtPnVzYiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJaHNvX2Rldi0+aW50ZXJmYWNlID0gaW50ZjsKKwlrcmVmX2luaXQoJmhzb19kZXYtPnJlZik7CisJbXV0ZXhfaW5pdCgmaHNvX2Rldi0+bXV0ZXgpOworCisJSU5JVF9XT1JLKCZoc29fZGV2LT5hc3luY19nZXRfaW50ZiwgYXN5bmNfZ2V0X2ludGYpOworCUlOSVRfV09SSygmaHNvX2Rldi0+YXN5bmNfcHV0X2ludGYsIGFzeW5jX3B1dF9pbnRmKTsKKworCXJldHVybiBoc29fZGV2OworfQorCisvKiBSZW1vdmVzIGEgbmV0d29yayBkZXZpY2UgaW4gdGhlIG5ldHdvcmsgZGV2aWNlIHRhYmxlICovCitzdGF0aWMgaW50IHJlbW92ZV9uZXRfZGV2aWNlKHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEhTT19NQVhfTkVUX0RFVklDRVM7IGkrKykgeworCQlpZiAobmV0d29ya190YWJsZVtpXSA9PSBoc29fZGV2KSB7CisJCQluZXR3b3JrX3RhYmxlW2ldID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IEhTT19NQVhfTkVUX0RFVklDRVMpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworLyogRnJlZXMgb3VyIG5ldHdvcmsgZGV2aWNlICovCitzdGF0aWMgdm9pZCBoc29fZnJlZV9uZXRfZGV2aWNlKHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KQoreworCWludCBpOworCXN0cnVjdCBoc29fbmV0ICpoc29fbmV0ID0gZGV2Mm5ldChoc29fZGV2KTsKKworCWlmICghaHNvX25ldCkKKwkJcmV0dXJuOworCisJLyogc3RhcnQgZnJlZWluZyAqLworCWZvciAoaSA9IDA7IGkgPCBNVVhfQlVMS19SWF9CVUZfQ09VTlQ7IGkrKykgeworCQl1c2JfZnJlZV91cmIoaHNvX25ldC0+bXV4X2J1bGtfcnhfdXJiX3Bvb2xbaV0pOworCQlrZnJlZShoc29fbmV0LT5tdXhfYnVsa19yeF9idWZfcG9vbFtpXSk7CisJfQorCXVzYl9mcmVlX3VyYihoc29fbmV0LT5tdXhfYnVsa190eF91cmIpOworCWtmcmVlKGhzb19uZXQtPm11eF9idWxrX3R4X2J1Zik7CisKKwlyZW1vdmVfbmV0X2RldmljZShoc29fbmV0LT5wYXJlbnQpOworCisJaWYgKGhzb19uZXQtPm5ldCkgeworCQl1bnJlZ2lzdGVyX25ldGRldihoc29fbmV0LT5uZXQpOworCQlmcmVlX25ldGRldihoc29fbmV0LT5uZXQpOworCX0KKworCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKK30KKworLyogaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgKi8KK3N0YXRpYyB2b2lkIGhzb19uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBoc29fbmV0ICpoc29fbmV0ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCUQxKCJzaXplb2YgaHNvX25ldCBpcyAlZCIsIChpbnQpc2l6ZW9mKCpoc29fbmV0KSk7CisKKwkvKiBmaWxsIGluIHRoZSBvdGhlciBmaWVsZHMgKi8KKwluZXQtPm9wZW4gPSBoc29fbmV0X29wZW47CisJbmV0LT5zdG9wID0gaHNvX25ldF9jbG9zZTsKKwluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGhzb19uZXRfc3RhcnRfeG1pdDsKKwluZXQtPnR4X3RpbWVvdXQgPSBoc29fbmV0X3R4X3RpbWVvdXQ7CisJbmV0LT53YXRjaGRvZ190aW1lbyA9IEhTT19ORVRfVFhfVElNRU9VVDsKKwluZXQtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQIHwgSUZGX01VTFRJQ0FTVDsKKwluZXQtPnR5cGUgPSBBUlBIUkRfTk9ORTsKKwluZXQtPm10dSA9IERFRkFVTFRfTVRVIC0gMTQ7CisJbmV0LT50eF9xdWV1ZV9sZW4gPSAxMDsKKwlTRVRfRVRIVE9PTF9PUFMobmV0LCAmb3BzKTsKKworCS8qIGFuZCBpbml0aWFsaXplIHRoZSBzZW1hcGhvcmUgKi8KKwlzcGluX2xvY2tfaW5pdCgmaHNvX25ldC0+bmV0X2xvY2spOworfQorCisvKiBBZGRzIGEgbmV0d29yayBkZXZpY2UgaW4gdGhlIG5ldHdvcmsgZGV2aWNlIHRhYmxlICovCitzdGF0aWMgaW50IGFkZF9uZXRfZGV2aWNlKHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEhTT19NQVhfTkVUX0RFVklDRVM7IGkrKykgeworCQlpZiAobmV0d29ya190YWJsZVtpXSA9PSBOVUxMKSB7CisJCQluZXR3b3JrX3RhYmxlW2ldID0gaHNvX2RldjsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IEhTT19NQVhfTkVUX0RFVklDRVMpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoc29fcmFkaW9fdG9nZ2xlKHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2ID0gZGF0YTsKKwlpbnQgZW5hYmxlZCA9IChzdGF0ZSA9PSBSRktJTExfU1RBVEVfT04pOworCWludCBydjsKKworCW11dGV4X2xvY2soJmhzb19kZXYtPm11dGV4KTsKKwlpZiAoaHNvX2Rldi0+dXNiX2dvbmUpCisJCXJ2ID0gMDsKKwllbHNlCisJCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGhzb19kZXYtPnVzYiwgdXNiX3JjdmN0cmxwaXBlKGhzb19kZXYtPnVzYiwgMCksCisJCQkJICAgICAgIGVuYWJsZWQgPyAweDgyIDogMHg4MSwgMHg0MCwgMCwgMCwgTlVMTCwgMCwKKwkJCQkgICAgICAgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCW11dGV4X3VubG9jaygmaHNvX2Rldi0+bXV0ZXgpOworCXJldHVybiBydjsKK30KKworLyogQ3JlYXRlcyBhbmQgc2V0cyB1cCBldmVyeXRoaW5nIGZvciByZmtpbGwgKi8KK3N0YXRpYyB2b2lkIGhzb19jcmVhdGVfcmZraWxsKHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2LAorCQkJICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBoc29fbmV0ICpoc29fbmV0ID0gZGV2Mm5ldChoc29fZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoc29fZGV2LT5kZXY7CisJY2hhciAqcmZrbjsKKworCWhzb19uZXQtPnJma2lsbCA9IHJma2lsbF9hbGxvY2F0ZSgmaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpLT5kZXYsCisJCQkJIFJGS0lMTF9UWVBFX1dMQU4pOworCWlmICghaHNvX25ldC0+cmZraWxsKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCXJma24gPSBremFsbG9jKDIwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJma24pIHsKKwkJcmZraWxsX2ZyZWUoaHNvX25ldC0+cmZraWxsKTsKKwkJZGV2X2VycihkZXYsICIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJc25wcmludGYocmZrbiwgMjAsICJoc28tJWQiLAorCQkgaW50ZXJmYWNlLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCWhzb19uZXQtPnJma2lsbC0+bmFtZSA9IHJma247CisJaHNvX25ldC0+cmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9PTjsKKwloc29fbmV0LT5yZmtpbGwtPmRhdGEgPSBoc29fZGV2OworCWhzb19uZXQtPnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gaHNvX3JhZGlvX3RvZ2dsZTsKKwlpZiAocmZraWxsX3JlZ2lzdGVyKGhzb19uZXQtPnJma2lsbCkgPCAwKSB7CisJCWtmcmVlKHJma24pOworCQloc29fbmV0LT5yZmtpbGwtPm5hbWUgPSBOVUxMOworCQlyZmtpbGxfZnJlZShoc29fbmV0LT5yZmtpbGwpOworCQlkZXZfZXJyKGRldiwgIiVzIC0gRmFpbGVkIHRvIHJlZ2lzdGVyIHJma2lsbCIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KK30KKworLyogQ3JlYXRlcyBvdXIgbmV0d29yayBkZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2NyZWF0ZV9uZXRfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJaW50IHJlc3VsdCwgaTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OworCXN0cnVjdCBoc29fbmV0ICpoc29fbmV0OworCXN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2OworCisJaHNvX2RldiA9IGhzb19jcmVhdGVfZGV2aWNlKGludGVyZmFjZSwgSFNPX0lOVEZfTVVYIHwgSFNPX1BPUlRfTkVUV09SSyk7CisJaWYgKCFoc29fZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIGFsbG9jYXRlIG91ciBuZXR3b3JrIGRldmljZSwgdGhlbiB3ZSBjYW4gcHV0IGluIG91ciBwcml2YXRlIGRhdGEgKi8KKwkvKiBjYWxsIGhzb19uZXRfaW5pdCB0byBkbyB0aGUgYmFzaWMgaW5pdGlhbGl6YXRpb24gKi8KKwluZXQgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBoc29fbmV0KSwgImhzbyVkIiwgaHNvX25ldF9pbml0KTsKKwlpZiAoIW5ldCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIlVuYWJsZSB0byBjcmVhdGUgZXRoZXJuZXQgZGV2aWNlXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCWhzb19uZXQgPSBuZXRkZXZfcHJpdihuZXQpOworCisJaHNvX2Rldi0+cG9ydF9kYXRhLmRldl9uZXQgPSBoc29fbmV0OworCWhzb19uZXQtPm5ldCA9IG5ldDsKKwloc29fbmV0LT5wYXJlbnQgPSBoc29fZGV2OworCisJaHNvX25ldC0+aW5fZW5kcCA9IGhzb19nZXRfZXAoaW50ZXJmYWNlLCBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkJCSAgICAgIFVTQl9ESVJfSU4pOworCWlmICghaHNvX25ldC0+aW5fZW5kcCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNhbid0IGZpbmQgQlVMSyBJTiBlbmRwb2ludFxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJaHNvX25ldC0+b3V0X2VuZHAgPSBoc29fZ2V0X2VwKGludGVyZmFjZSwgVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkJCQkgICAgICAgVVNCX0RJUl9PVVQpOworCWlmICghaHNvX25ldC0+b3V0X2VuZHApIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDYW4ndCBmaW5kIEJVTEsgT1VUIGVuZHBvaW50XG4iKTsKKwkJZ290byBleGl0OworCX0KKwlTRVRfTkVUREVWX0RFVihuZXQsICZpbnRlcmZhY2UtPmRldik7CisKKwkvKiByZWdpc3RlcmluZyBvdXIgbmV0IGRldmljZSAqLworCXJlc3VsdCA9IHJlZ2lzdGVyX25ldGRldihuZXQpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHN0YXJ0IGFsbG9jYXRpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVVYX0JVTEtfUlhfQlVGX0NPVU5UOyBpKyspIHsKKwkJaHNvX25ldC0+bXV4X2J1bGtfcnhfdXJiX3Bvb2xbaV0gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIWhzb19uZXQtPm11eF9idWxrX3J4X3VyYl9wb29sW2ldKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSByeCB1cmJcbiIpOworCQkJZ290byBleGl0OworCQl9CisJCWhzb19uZXQtPm11eF9idWxrX3J4X2J1Zl9wb29sW2ldID0ga3phbGxvYyhNVVhfQlVMS19SWF9CVUZfU0laRSwKKwkJCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFoc29fbmV0LT5tdXhfYnVsa19yeF9idWZfcG9vbFtpXSkgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgcnggYnVmXG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKwloc29fbmV0LT5tdXhfYnVsa190eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghaHNvX25ldC0+bXV4X2J1bGtfdHhfdXJiKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIHR4IHVyYlxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJaHNvX25ldC0+bXV4X2J1bGtfdHhfYnVmID0ga3phbGxvYyhNVVhfQlVMS19UWF9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoc29fbmV0LT5tdXhfYnVsa190eF9idWYpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgdHggYnVmXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCWFkZF9uZXRfZGV2aWNlKGhzb19kZXYpOworCisJaHNvX2xvZ19wb3J0KGhzb19kZXYpOworCisJaHNvX2NyZWF0ZV9yZmtpbGwoaHNvX2RldiwgaW50ZXJmYWNlKTsKKworCXJldHVybiBoc29fZGV2OworZXhpdDoKKwloc29fZnJlZV9uZXRfZGV2aWNlKGhzb19kZXYpOworCXJldHVybiBOVUxMOworfQorCisvKiBGcmVlcyBhbiBBVCBjaGFubmVsICggZ29lcyBmb3IgYm90aCBtdXggYW5kIG5vbi1tdXggKSAqLworc3RhdGljIHZvaWQgaHNvX2ZyZWVfc2VyaWFsX2RldmljZShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldikKK3sKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gZGV2MnNlcihoc29fZGV2KTsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisJc2V0X3NlcmlhbF9ieV9pbmRleChzZXJpYWwtPm1pbm9yLCBOVUxMKTsKKworCWhzb19zZXJpYWxfY29tbW9uX2ZyZWUoc2VyaWFsKTsKKworCWlmIChzZXJpYWwtPnNoYXJlZF9pbnQpIHsKKwkJbXV0ZXhfbG9jaygmc2VyaWFsLT5zaGFyZWRfaW50LT5zaGFyZWRfaW50X2xvY2spOworCQlpZiAoLS1zZXJpYWwtPnNoYXJlZF9pbnQtPnJlZl9jb3VudCA9PSAwKQorCQkJaHNvX2ZyZWVfc2hhcmVkX2ludChzZXJpYWwtPnNoYXJlZF9pbnQpOworCQllbHNlCisJCQltdXRleF91bmxvY2soJnNlcmlhbC0+c2hhcmVkX2ludC0+c2hhcmVkX2ludF9sb2NrKTsKKwl9CisJa2ZyZWUoc2VyaWFsKTsKKwloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7Cit9CisKKy8qIENyZWF0ZXMgYSBidWxrIEFUIGNoYW5uZWwgKi8KK3N0YXRpYyBzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2NyZWF0ZV9idWxrX3NlcmlhbF9kZXZpY2UoCisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBpbnQgcG9ydCkKK3sKKwlzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldjsKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsOworCWludCBudW1fdXJiczsKKworCWhzb19kZXYgPSBoc29fY3JlYXRlX2RldmljZShpbnRlcmZhY2UsIHBvcnQpOworCWlmICghaHNvX2RldikKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXJpYWwgPSBremFsbG9jKHNpemVvZigqc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXJpYWwpCisJCWdvdG8gZXhpdDsKKworCXNlcmlhbC0+cGFyZW50ID0gaHNvX2RldjsKKwloc29fZGV2LT5wb3J0X2RhdGEuZGV2X3NlcmlhbCA9IHNlcmlhbDsKKworCWlmIChwb3J0ICYgSFNPX1BPUlRfTU9ERU0pCisJCW51bV91cmJzID0gMjsKKwllbHNlCisJCW51bV91cmJzID0gMTsKKworCWlmIChoc29fc2VyaWFsX2NvbW1vbl9jcmVhdGUoc2VyaWFsLCBudW1fdXJicywgQlVMS19VUkJfUlhfU0laRSwKKwkJCQkgICAgIEJVTEtfVVJCX1RYX1NJWkUpKQorCQlnb3RvIGV4aXQ7CisKKwlzZXJpYWwtPmluX2VuZHAgPSBoc29fZ2V0X2VwKGludGVyZmFjZSwgVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkJCQkgICAgIFVTQl9ESVJfSU4pOworCWlmICghc2VyaWFsLT5pbl9lbmRwKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiRmFpbGVkIHRvIGZpbmQgQlVMSyBJTiBlcFxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIQorCSAgICAoc2VyaWFsLT5vdXRfZW5kcCA9CisJICAgICBoc29fZ2V0X2VwKGludGVyZmFjZSwgVVNCX0VORFBPSU5UX1hGRVJfQlVMSywgVVNCX0RJUl9PVVQpKSkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkZhaWxlZCB0byBmaW5kIEJVTEsgSU4gZXBcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJc2VyaWFsLT53cml0ZV9kYXRhID0gaHNvX3N0ZF9zZXJpYWxfd3JpdGVfZGF0YTsKKworCS8qIGFuZCByZWNvcmQgdGhpcyBzZXJpYWwgKi8KKwlzZXRfc2VyaWFsX2J5X2luZGV4KHNlcmlhbC0+bWlub3IsIHNlcmlhbCk7CisKKwkvKiBzZXR1cCB0aGUgcHJvYyBkaXJzIGFuZCBmaWxlcyBpZiBuZWVkZWQgKi8KKwloc29fbG9nX3BvcnQoaHNvX2Rldik7CisKKwkvKiBkb25lLCByZXR1cm4gaXQgKi8KKwlyZXR1cm4gaHNvX2RldjsKK2V4aXQ6CisJaWYgKGhzb19kZXYgJiYgc2VyaWFsKQorCQloc29fc2VyaWFsX2NvbW1vbl9mcmVlKHNlcmlhbCk7CisJa2ZyZWUoc2VyaWFsKTsKKwloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIENyZWF0ZXMgYSBtdWx0aXBsZXhlZCBBVCBjaGFubmVsICovCitzdGF0aWMKK3N0cnVjdCBoc29fZGV2aWNlICpoc29fY3JlYXRlX211eF9zZXJpYWxfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCQlpbnQgcG9ydCwKKwkJCQkJCXN0cnVjdCBoc29fc2hhcmVkX2ludCAqbXV4KQoreworCXN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2OworCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWw7CisJaW50IHBvcnRfc3BlYzsKKworCXBvcnRfc3BlYyA9IEhTT19JTlRGX01VWDsKKwlwb3J0X3NwZWMgJj0gfkhTT19QT1JUX01BU0s7CisKKwlwb3J0X3NwZWMgfD0gaHNvX211eF90b19wb3J0KHBvcnQpOworCWlmICgocG9ydF9zcGVjICYgSFNPX1BPUlRfTUFTSykgPT0gSFNPX1BPUlRfTk9fUE9SVCkKKwkJcmV0dXJuIE5VTEw7CisKKwloc29fZGV2ID0gaHNvX2NyZWF0ZV9kZXZpY2UoaW50ZXJmYWNlLCBwb3J0X3NwZWMpOworCWlmICghaHNvX2RldikKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXJpYWwgPSBremFsbG9jKHNpemVvZigqc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXJpYWwpCisJCWdvdG8gZXhpdDsKKworCWhzb19kZXYtPnBvcnRfZGF0YS5kZXZfc2VyaWFsID0gc2VyaWFsOworCXNlcmlhbC0+cGFyZW50ID0gaHNvX2RldjsKKworCWlmIChoc29fc2VyaWFsX2NvbW1vbl9jcmVhdGUKKwkgICAgKHNlcmlhbCwgMSwgQ1RSTF9VUkJfUlhfU0laRSwgQ1RSTF9VUkJfVFhfU0laRSkpCisJCWdvdG8gZXhpdDsKKworCXNlcmlhbC0+dHhfZGF0YV9sZW5ndGgtLTsKKwlzZXJpYWwtPndyaXRlX2RhdGEgPSBoc29fbXV4X3NlcmlhbF93cml0ZV9kYXRhOworCisJc2VyaWFsLT5zaGFyZWRfaW50ID0gbXV4OworCW11dGV4X2xvY2soJnNlcmlhbC0+c2hhcmVkX2ludC0+c2hhcmVkX2ludF9sb2NrKTsKKwlzZXJpYWwtPnNoYXJlZF9pbnQtPnJlZl9jb3VudCsrOworCW11dGV4X3VubG9jaygmc2VyaWFsLT5zaGFyZWRfaW50LT5zaGFyZWRfaW50X2xvY2spOworCisJLyogYW5kIHJlY29yZCB0aGlzIHNlcmlhbCAqLworCXNldF9zZXJpYWxfYnlfaW5kZXgoc2VyaWFsLT5taW5vciwgc2VyaWFsKTsKKworCS8qIHNldHVwIHRoZSBwcm9jIGRpcnMgYW5kIGZpbGVzIGlmIG5lZWRlZCAqLworCWhzb19sb2dfcG9ydChoc29fZGV2KTsKKworCS8qIGRvbmUsIHJldHVybiBpdCAqLworCXJldHVybiBoc29fZGV2OworCitleGl0OgorCWlmIChzZXJpYWwpIHsKKwkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKHR0eV9kcnYsIHNlcmlhbC0+bWlub3IpOworCQlrZnJlZShzZXJpYWwpOworCX0KKwlpZiAoaHNvX2RldikKKwkJaHNvX2ZyZWVfZGV2aWNlKGhzb19kZXYpOworCXJldHVybiBOVUxMOworCit9CisKK3N0YXRpYyB2b2lkIGhzb19mcmVlX3NoYXJlZF9pbnQoc3RydWN0IGhzb19zaGFyZWRfaW50ICptdXgpCit7CisJdXNiX2ZyZWVfdXJiKG11eC0+c2hhcmVkX2ludHJfdXJiKTsKKwlrZnJlZShtdXgtPnNoYXJlZF9pbnRyX2J1Zik7CisJbXV0ZXhfdW5sb2NrKCZtdXgtPnNoYXJlZF9pbnRfbG9jayk7CisJa2ZyZWUobXV4KTsKK30KKworc3RhdGljCitzdHJ1Y3QgaHNvX3NoYXJlZF9pbnQgKmhzb19jcmVhdGVfc2hhcmVkX2ludChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBoc29fc2hhcmVkX2ludCAqbXV4ID0ga3phbGxvYyhzaXplb2YoKm11eCksIEdGUF9LRVJORUwpOworCisJaWYgKCFtdXgpCisJCXJldHVybiBOVUxMOworCisJbXV4LT5pbnRyX2VuZHAgPSBoc29fZ2V0X2VwKGludGVyZmFjZSwgVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCQkJCSAgICBVU0JfRElSX0lOKTsKKwlpZiAoIW11eC0+aW50cl9lbmRwKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ2FuJ3QgZmluZCBJTlQgSU4gZW5kcG9pbnRcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJbXV4LT5zaGFyZWRfaW50cl91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghbXV4LT5zaGFyZWRfaW50cl91cmIpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgaW50ciB1cmI/Iik7CisJCWdvdG8gZXhpdDsKKwl9CisJbXV4LT5zaGFyZWRfaW50cl9idWYgPSBremFsbG9jKG11eC0+aW50cl9lbmRwLT53TWF4UGFja2V0U2l6ZSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdXgtPnNoYXJlZF9pbnRyX2J1ZikgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbnRyIGJ1Zj8iKTsKKwkJZ290byBleGl0OworCX0KKworCW11dGV4X2luaXQoJm11eC0+c2hhcmVkX2ludF9sb2NrKTsKKworCXJldHVybiBtdXg7CisKK2V4aXQ6CisJa2ZyZWUobXV4LT5zaGFyZWRfaW50cl9idWYpOworCXVzYl9mcmVlX3VyYihtdXgtPnNoYXJlZF9pbnRyX3VyYik7CisJa2ZyZWUobXV4KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogR2V0cyB0aGUgcG9ydCBzcGVjIGZvciBhIGNlcnRhaW4gaW50ZXJmYWNlICovCitzdGF0aWMgaW50IGhzb19nZXRfY29uZmlnX2RhdGEoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXU4IGNvbmZpZ19kYXRhWzE3XTsKKwl1MzIgaWZfbnVtID0gaW50ZXJmYWNlLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJczMyIHJlc3VsdDsKKworCWlmICh1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiZGV2LCAwKSwKKwkJCSAgICAweDg2LCAweEMwLCAwLCAwLCBjb25maWdfZGF0YSwgMTcsCisJCQkgICAgVVNCX0NUUkxfU0VUX1RJTUVPVVQpICE9IDB4MTEpIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc3dpdGNoIChjb25maWdfZGF0YVtpZl9udW1dKSB7CisJY2FzZSAweDA6CisJCXJlc3VsdCA9IDA7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQlyZXN1bHQgPSBIU09fUE9SVF9ESUFHOworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJcmVzdWx0ID0gSFNPX1BPUlRfR1BTOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJcmVzdWx0ID0gSFNPX1BPUlRfR1BTX0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQlyZXN1bHQgPSBIU09fUE9SVF9BUFA7CisJCWJyZWFrOworCWNhc2UgMHg1OgorCQlyZXN1bHQgPSBIU09fUE9SVF9BUFAyOworCQlicmVhazsKKwljYXNlIDB4NjoKKwkJcmVzdWx0ID0gSFNPX1BPUlRfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSAweDc6CisJCXJlc3VsdCA9IEhTT19QT1JUX05FVFdPUks7CisJCWJyZWFrOworCWNhc2UgMHg4OgorCQlyZXN1bHQgPSBIU09fUE9SVF9NT0RFTTsKKwkJYnJlYWs7CisJY2FzZSAweDk6CisJCXJlc3VsdCA9IEhTT19QT1JUX01TRDsKKwkJYnJlYWs7CisJY2FzZSAweGE6CisJCXJlc3VsdCA9IEhTT19QT1JUX1BDU0M7CisJCWJyZWFrOworCWNhc2UgMHhiOgorCQlyZXN1bHQgPSBIU09fUE9SVF9WT0lDRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gMDsKKwl9CisKKwlpZiAocmVzdWx0KQorCQlyZXN1bHQgfD0gSFNPX0lOVEZfQlVMSzsKKworCWlmIChjb25maWdfZGF0YVsxNl0gJiAweDEpCisJCXJlc3VsdCB8PSBIU09fSU5GT19DUkNfQlVHOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogY2FsbGVkIG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlIHVwb24gZGV2aWNlIGluc2VydGlvbiAqLworc3RhdGljIGludCBoc29fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IG11eCwgaSwgaWZfbnVtLCBwb3J0X3NwZWM7CisJdW5zaWduZWQgY2hhciBwb3J0X21hc2s7CisJc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXYgPSBOVUxMOworCXN0cnVjdCBoc29fc2hhcmVkX2ludCAqc2hhcmVkX2ludDsKKwlzdHJ1Y3QgaHNvX2RldmljZSAqdG1wX2RldiA9IE5VTEw7CisKKwlpZl9udW0gPSBpbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCS8qIEdldCB0aGUgaW50ZXJmYWNlL3BvcnQgc3BlY2lmaWNhdGlvbiBmcm9tIGVpdGhlciBkcml2ZXJfaW5mbyBvciBmcm9tCisJICogdGhlIGRldmljZSBpdHNlbGYgKi8KKwlpZiAoaWQtPmRyaXZlcl9pbmZvKQorCQlwb3J0X3NwZWMgPSAoKHUzMiAqKShpZC0+ZHJpdmVyX2luZm8pKVtpZl9udW1dOworCWVsc2UKKwkJcG9ydF9zcGVjID0gaHNvX2dldF9jb25maWdfZGF0YShpbnRlcmZhY2UpOworCisJaWYgKGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IDB4RkYpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJOb3Qgb3VyIGludGVyZmFjZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHN3aXRjaCB0byBhbHQgaW50ZXJmYWNlcyBwcmlvciB0byBwb3J0CisJICogY29uZmlndXJhdGlvbiAqLworCWlmIChpbnRlcmZhY2UtPm51bV9hbHRzZXR0aW5nID4gMSkKKwkJdXNiX3NldF9pbnRlcmZhY2UoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpLCBpZl9udW0sIDEpOworCWludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CisKKwkvKiBBbGxvY2F0ZSBuZXcgaHNvIGRldmljZShzKSAqLworCXN3aXRjaCAocG9ydF9zcGVjICYgSFNPX0lOVEZfTUFTSykgeworCWNhc2UgSFNPX0lOVEZfTVVYOgorCQlpZiAoKHBvcnRfc3BlYyAmIEhTT19QT1JUX01BU0spID09IEhTT19QT1JUX05FVFdPUkspIHsKKwkJCS8qIENyZWF0ZSB0aGUgbmV0d29yayBkZXZpY2UgKi8KKwkJCWlmICghZGlzYWJsZV9uZXQpIHsKKwkJCQloc29fZGV2ID0gaHNvX2NyZWF0ZV9uZXRfZGV2aWNlKGludGVyZmFjZSk7CisJCQkJaWYgKCFoc29fZGV2KQorCQkJCQlnb3RvIGV4aXQ7CisJCQkJdG1wX2RldiA9IGhzb19kZXY7CisJCQl9CisJCX0KKworCQlpZiAoaHNvX2dldF9tdXhfcG9ydHMoaW50ZXJmYWNlLCAmcG9ydF9tYXNrKSkKKwkJCS8qIFRPRE86IGRlLWFsbG9jYXRlIGV2ZXJ5dGhpbmcgKi8KKwkJCWdvdG8gZXhpdDsKKworCQlzaGFyZWRfaW50ID0gaHNvX2NyZWF0ZV9zaGFyZWRfaW50KGludGVyZmFjZSk7CisJCWlmICghc2hhcmVkX2ludCkKKwkJCWdvdG8gZXhpdDsKKworCQlmb3IgKGkgPSAxLCBtdXggPSAwOyBpIDwgMHgxMDA7IGkgPSBpIDw8IDEsIG11eCsrKSB7CisJCQlpZiAocG9ydF9tYXNrICYgaSkgeworCQkJCWhzb19kZXYgPSBoc29fY3JlYXRlX211eF9zZXJpYWxfZGV2aWNlKAorCQkJCQkJaW50ZXJmYWNlLCBpLCBzaGFyZWRfaW50KTsKKwkJCQlpZiAoIWhzb19kZXYpCisJCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCisJCWlmICh0bXBfZGV2KQorCQkJaHNvX2RldiA9IHRtcF9kZXY7CisJCWJyZWFrOworCisJY2FzZSBIU09fSU5URl9CVUxLOgorCQkvKiBJdCdzIGEgcmVndWxhciBidWxrIGludGVyZmFjZSAqLworCQlpZiAoKChwb3J0X3NwZWMgJiBIU09fUE9SVF9NQVNLKSA9PSBIU09fUE9SVF9ORVRXT1JLKQorCQkgICAgJiYgIWRpc2FibGVfbmV0KQorCQkJaHNvX2RldiA9IGhzb19jcmVhdGVfbmV0X2RldmljZShpbnRlcmZhY2UpOworCQllbHNlCisJCQloc29fZGV2ID0KKwkJCSAgICBoc29fY3JlYXRlX2J1bGtfc2VyaWFsX2RldmljZShpbnRlcmZhY2UsIHBvcnRfc3BlYyk7CisJCWlmICghaHNvX2RldikKKwkJCWdvdG8gZXhpdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBleGl0OworCX0KKworCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZoc29fZHJpdmVyLCBpbnRlcmZhY2UsIGhzb19kZXYpOworCisJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgZGV2aWNlICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGhzb19kZXYpOworCisJLyogZG9uZSAqLworCXJldHVybiAwOworZXhpdDoKKwloc29fZnJlZV9pbnRlcmZhY2UoaW50ZXJmYWNlKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyogZGV2aWNlIHJlbW92ZWQsIGNsZWFuaW5nIHVwICovCitzdGF0aWMgdm9pZCBoc29fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCWhzb19mcmVlX2ludGVyZmFjZShpbnRlcmZhY2UpOworCisJLyogcmVtb3ZlIHJlZmVyZW5jZSBvZiBvdXIgcHJpdmF0ZSBkYXRhICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSgmaHNvX2RyaXZlciwgaW50ZXJmYWNlKTsKK30KKworc3RhdGljIHZvaWQgYXN5bmNfZ2V0X2ludGYoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQoreworCXN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBoc29fZGV2aWNlLCBhc3luY19nZXRfaW50Zik7CisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGhzb19kZXYtPmludGVyZmFjZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFzeW5jX3B1dF9pbnRmKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaHNvX2RldmljZSwgYXN5bmNfcHV0X2ludGYpOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShoc29fZGV2LT5pbnRlcmZhY2UpOworfQorCitzdGF0aWMgaW50IGhzb19nZXRfYWN0aXZpdHkoc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXYpCit7CisJaWYgKGhzb19kZXYtPnVzYi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkgeworCQlpZiAoIWhzb19kZXYtPmlzX2FjdGl2ZSkgeworCQkJaHNvX2Rldi0+aXNfYWN0aXZlID0gMTsKKwkJCXNjaGVkdWxlX3dvcmsoJmhzb19kZXYtPmFzeW5jX2dldF9pbnRmKTsKKwkJfQorCX0KKworCWlmIChoc29fZGV2LT51c2ItPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXVzYl9tYXJrX2xhc3RfYnVzeShoc29fZGV2LT51c2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHNvX3B1dF9hY3Rpdml0eShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldikKK3sKKwlpZiAoaHNvX2Rldi0+dXNiLT5zdGF0ZSAhPSBVU0JfU1RBVEVfU1VTUEVOREVEKSB7CisJCWlmIChoc29fZGV2LT5pc19hY3RpdmUpIHsKKwkJCWhzb19kZXYtPmlzX2FjdGl2ZSA9IDA7CisJCQlzY2hlZHVsZV93b3JrKCZoc29fZGV2LT5hc3luY19wdXRfaW50Zik7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCX0KKwloc29fZGV2LT5pc19hY3RpdmUgPSAwOworCXJldHVybiAwOworfQorCisvKiBjYWxsZWQgYnkga2VybmVsIHdoZW4gd2UgbmVlZCB0byBzdXNwZW5kIGRldmljZSAqLworc3RhdGljIGludCBoc29fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCWludCBpLCByZXN1bHQ7CisKKwkvKiBTdG9wIGFsbCBzZXJpYWwgcG9ydHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSFNPX1NFUklBTF9UVFlfTUlOT1JTOyBpKyspIHsKKwkJaWYgKHNlcmlhbF90YWJsZVtpXSAmJiAoc2VyaWFsX3RhYmxlW2ldLT5pbnRlcmZhY2UgPT0gaWZhY2UpKSB7CisJCQlyZXN1bHQgPSBoc29fc3RvcF9zZXJpYWxfZGV2aWNlKHNlcmlhbF90YWJsZVtpXSk7CisJCQlpZiAocmVzdWx0KQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogU3RvcCBhbGwgbmV0d29yayBwb3J0cyAqLworCWZvciAoaSA9IDA7IGkgPCBIU09fTUFYX05FVF9ERVZJQ0VTOyBpKyspIHsKKwkJaWYgKG5ldHdvcmtfdGFibGVbaV0gJiYKKwkJICAgIChuZXR3b3JrX3RhYmxlW2ldLT5pbnRlcmZhY2UgPT0gaWZhY2UpKSB7CisJCQlyZXN1bHQgPSBoc29fc3RvcF9uZXRfZGV2aWNlKG5ldHdvcmtfdGFibGVbaV0pOworCQkJaWYgKHJlc3VsdCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCXJldHVybiAwOworfQorCisvKiBjYWxsZWQgYnkga2VybmVsIHdoZW4gd2UgbmVlZCB0byByZXN1bWUgZGV2aWNlICovCitzdGF0aWMgaW50IGhzb19yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoreworCWludCBpLCByZXN1bHQgPSAwOworCXN0cnVjdCBoc29fbmV0ICpoc29fbmV0OworCisJLyogU3RhcnQgYWxsIHNlcmlhbCBwb3J0cyAqLworCWZvciAoaSA9IDA7IGkgPCBIU09fU0VSSUFMX1RUWV9NSU5PUlM7IGkrKykgeworCQlpZiAoc2VyaWFsX3RhYmxlW2ldICYmIChzZXJpYWxfdGFibGVbaV0tPmludGVyZmFjZSA9PSBpZmFjZSkpIHsKKwkJCWlmIChkZXYyc2VyKHNlcmlhbF90YWJsZVtpXSktPm9wZW5fY291bnQpIHsKKwkJCQlyZXN1bHQgPQorCQkJCSAgICBoc29fc3RhcnRfc2VyaWFsX2RldmljZShzZXJpYWxfdGFibGVbaV0sIEdGUF9OT0lPKTsKKwkJCQloc29fa2lja190cmFuc21pdChkZXYyc2VyKHNlcmlhbF90YWJsZVtpXSkpOworCQkJCWlmIChyZXN1bHQpCisJCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJLyogU3RhcnQgYWxsIG5ldHdvcmsgcG9ydHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSFNPX01BWF9ORVRfREVWSUNFUzsgaSsrKSB7CisJCWlmIChuZXR3b3JrX3RhYmxlW2ldICYmCisJCSAgICAobmV0d29ya190YWJsZVtpXS0+aW50ZXJmYWNlID09IGlmYWNlKSkgeworCQkJaHNvX25ldCA9IGRldjJuZXQobmV0d29ya190YWJsZVtpXSk7CisJCQkvKiBGaXJzdCB0cmFuc21pdCBhbnkgbGluZ2VyaW5nIGRhdGEsIHRoZW4gcmVzdGFydCB0aGUKKwkJCSAqIGRldmljZS4gKi8KKwkJCWlmIChoc29fbmV0LT5za2JfdHhfYnVmKSB7CisJCQkJZGV2X2RiZygmaWZhY2UtPmRldiwKKwkJCQkJIlRyYW5zbWl0dGluZyBsaW5nZXJpbmcgZGF0YVxuIik7CisJCQkJaHNvX25ldF9zdGFydF94bWl0KGhzb19uZXQtPnNrYl90eF9idWYsCisJCQkJCQkgICBoc29fbmV0LT5uZXQpOworCQkJfQorCQkJcmVzdWx0ID0gaHNvX3N0YXJ0X25ldF9kZXZpY2UobmV0d29ya190YWJsZVtpXSk7CisJCQlpZiAocmVzdWx0KQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorCitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgaHNvX3NlcmlhbF9yZWZfZnJlZShzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2ID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGhzb19kZXZpY2UsIHJlZik7CisKKwloc29fZnJlZV9zZXJpYWxfZGV2aWNlKGhzb19kZXYpOworfQorCitzdGF0aWMgdm9pZCBoc29fZnJlZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqaHNvX2RldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBIU09fU0VSSUFMX1RUWV9NSU5PUlM7IGkrKykgeworCQlpZiAoc2VyaWFsX3RhYmxlW2ldCisJCSAgICAmJiAoc2VyaWFsX3RhYmxlW2ldLT5pbnRlcmZhY2UgPT0gaW50ZXJmYWNlKSkgeworCQkJaHNvX2RldiA9IGRldjJzZXIoc2VyaWFsX3RhYmxlW2ldKTsKKwkJCWlmIChoc29fZGV2LT50dHkpCisJCQkJdHR5X2hhbmd1cChoc29fZGV2LT50dHkpOworCQkJbXV0ZXhfbG9jaygmaHNvX2Rldi0+cGFyZW50LT5tdXRleCk7CisJCQloc29fZGV2LT5wYXJlbnQtPnVzYl9nb25lID0gMTsKKwkJCW11dGV4X3VubG9jaygmaHNvX2Rldi0+cGFyZW50LT5tdXRleCk7CisJCQlrcmVmX3B1dCgmc2VyaWFsX3RhYmxlW2ldLT5yZWYsIGhzb19zZXJpYWxfcmVmX2ZyZWUpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IEhTT19NQVhfTkVUX0RFVklDRVM7IGkrKykgeworCQlpZiAobmV0d29ya190YWJsZVtpXQorCQkgICAgJiYgKG5ldHdvcmtfdGFibGVbaV0tPmludGVyZmFjZSA9PSBpbnRlcmZhY2UpKSB7CisJCQlzdHJ1Y3QgcmZraWxsICpyZmsgPSBkZXYybmV0KG5ldHdvcmtfdGFibGVbaV0pLT5yZmtpbGw7CisJCQkvKiBoc29fc3RvcF9uZXRfZGV2aWNlIGRvZXNuJ3Qgc3RvcCB0aGUgbmV0IHF1ZXVlIHNpbmNlCisJCQkgKiB0cmFmZmljIG5lZWRzIHRvIHN0YXJ0IGl0IGFnYWluIHdoZW4gc3VzcGVuZGVkICovCisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldjJuZXQobmV0d29ya190YWJsZVtpXSktPm5ldCk7CisJCQloc29fc3RvcF9uZXRfZGV2aWNlKG5ldHdvcmtfdGFibGVbaV0pOworCQkJY2FuY2VsX3dvcmtfc3luYygmbmV0d29ya190YWJsZVtpXS0+YXN5bmNfcHV0X2ludGYpOworCQkJY2FuY2VsX3dvcmtfc3luYygmbmV0d29ya190YWJsZVtpXS0+YXN5bmNfZ2V0X2ludGYpOworCQkJaWYocmZrKQorCQkJCXJma2lsbF91bnJlZ2lzdGVyKHJmayk7CisJCQloc29fZnJlZV9uZXRfZGV2aWNlKG5ldHdvcmtfdGFibGVbaV0pOworCQl9CisJfQorfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zICovCisKKy8qIEdldCB0aGUgZW5kcG9pbnQgISAqLworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqaHNvX2dldF9lcChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkJCSAgaW50IHR5cGUsIGludCBkaXIpCit7CisJaW50IGk7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2UtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CisJCWVuZHAgPSAmaWZhY2UtPmVuZHBvaW50W2ldLmRlc2M7CisJCWlmICgoKGVuZHAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IGRpcikgJiYKKwkJICAgICgoZW5kcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IHR5cGUpKQorCQkJcmV0dXJuIGVuZHA7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEdldCB0aGUgYnl0ZSB0aGF0IGRlc2NyaWJlcyB3aGljaCBwb3J0cyBhcmUgZW5hYmxlZCAqLworc3RhdGljIGludCBoc29fZ2V0X211eF9wb3J0cyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgY2hhciAqcG9ydHMpCit7CisJaW50IGk7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCWlmIChpZmFjZS0+ZXh0cmFsZW4gPT0gMykgeworCQkqcG9ydHMgPSBpZmFjZS0+ZXh0cmFbMl07CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBpZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJaWYgKGlmYWNlLT5lbmRwb2ludFtpXS5leHRyYWxlbiA9PSAzKSB7CisJCQkqcG9ydHMgPSBpZmFjZS0+ZW5kcG9pbnRbaV0uZXh0cmFbMl07CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKworLyogaW50ZXJydXB0IHVyYiBuZWVkcyB0byBiZSBzdWJtaXR0ZWQsIHVzZWQgZm9yIHNlcmlhbCByZWFkIG9mIG11eGVkIHBvcnQgKi8KK3N0YXRpYyBpbnQgaHNvX211eF9zdWJtaXRfaW50cl91cmIoc3RydWN0IGhzb19zaGFyZWRfaW50ICpzaGFyZWRfaW50LAorCQkJCSAgIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IsIGdmcF90IGdmcCkKK3sKKwlpbnQgcmVzdWx0OworCisJdXNiX2ZpbGxfaW50X3VyYihzaGFyZWRfaW50LT5zaGFyZWRfaW50cl91cmIsIHVzYiwKKwkJCSB1c2JfcmN2aW50cGlwZSh1c2IsCisJCQkJc2hhcmVkX2ludC0+aW50cl9lbmRwLT5iRW5kcG9pbnRBZGRyZXNzICYgMHg3RiksCisJCQkgc2hhcmVkX2ludC0+c2hhcmVkX2ludHJfYnVmLAorCQkJIHNoYXJlZF9pbnQtPmludHJfZW5kcC0+d01heFBhY2tldFNpemUsCisJCQkgaW50cl9jYWxsYmFjaywgc2hhcmVkX2ludCwKKwkJCSBzaGFyZWRfaW50LT5pbnRyX2VuZHAtPmJJbnRlcnZhbCk7CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihzaGFyZWRfaW50LT5zaGFyZWRfaW50cl91cmIsIGdmcCk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X3dhcm4oJnVzYi0+ZGV2LCAiJXMgZmFpbGVkIG11eF9pbnRyX3VyYiAlZCIsIF9fZnVuY19fLAorCQkJcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIG9wZXJhdGlvbnMgc2V0dXAgb2YgdGhlIHNlcmlhbCBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgaHNvX3NlcmlhbF9vcHMgPSB7CisJLm9wZW4gPSBoc29fc2VyaWFsX29wZW4sCisJLmNsb3NlID0gaHNvX3NlcmlhbF9jbG9zZSwKKwkud3JpdGUgPSBoc29fc2VyaWFsX3dyaXRlLAorCS53cml0ZV9yb29tID0gaHNvX3NlcmlhbF93cml0ZV9yb29tLAorCS5zZXRfdGVybWlvcyA9IGhzb19zZXJpYWxfc2V0X3Rlcm1pb3MsCisJLmNoYXJzX2luX2J1ZmZlciA9IGhzb19zZXJpYWxfY2hhcnNfaW5fYnVmZmVyLAorCS50aW9jbWdldCA9IGhzb19zZXJpYWxfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gaHNvX3NlcmlhbF90aW9jbXNldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBoc29fZHJpdmVyID0geworCS5uYW1lID0gZHJpdmVyX25hbWUsCisJLnByb2JlID0gaHNvX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gaHNvX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gaHNvX2lkcywKKwkuc3VzcGVuZCA9IGhzb19zdXNwZW5kLAorCS5yZXN1bWUgPSBoc29fcmVzdW1lLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBoc29faW5pdCh2b2lkKQoreworCWludCBpOworCWludCByZXN1bHQ7CisKKwkvKiBwdXQgaXQgaW4gdGhlIGxvZyAqLworCXByaW50ayhLRVJOX0lORk8gImhzbzogJXNcbiIsIHZlcnNpb24pOworCisJLyogSW5pdGlhbGlzZSB0aGUgc2VyaWFsIHRhYmxlIHNlbWFwaG9yZSBhbmQgdGFibGUgKi8KKwlzcGluX2xvY2tfaW5pdCgmc2VyaWFsX3RhYmxlX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBIU09fU0VSSUFMX1RUWV9NSU5PUlM7IGkrKykKKwkJc2VyaWFsX3RhYmxlW2ldID0gTlVMTDsKKworCS8qIGFsbG9jYXRlIG91ciBkcml2ZXIgdXNpbmcgdGhlIHByb3BlciBhbW91bnQgb2Ygc3VwcG9ydGVkIG1pbm9ycyAqLworCXR0eV9kcnYgPSBhbGxvY190dHlfZHJpdmVyKEhTT19TRVJJQUxfVFRZX01JTk9SUyk7CisJaWYgKCF0dHlfZHJ2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGZpbGwgaW4gYWxsIG5lZWRlZCB2YWx1ZXMgKi8KKwl0dHlfZHJ2LT5tYWdpYyA9IFRUWV9EUklWRVJfTUFHSUM7CisJdHR5X2Rydi0+b3duZXIgPSBUSElTX01PRFVMRTsKKwl0dHlfZHJ2LT5kcml2ZXJfbmFtZSA9IGRyaXZlcl9uYW1lOworCXR0eV9kcnYtPm5hbWUgPSB0dHlfZmlsZW5hbWU7CisKKwkvKiBpZiBtYWpvciBudW1iZXIgaXMgcHJvdmlkZWQgYXMgcGFyYW1ldGVyLCB1c2UgdGhhdCBvbmUgKi8KKwlpZiAodHR5X21ham9yKQorCQl0dHlfZHJ2LT5tYWpvciA9IHR0eV9tYWpvcjsKKworCXR0eV9kcnYtPm1pbm9yX3N0YXJ0ID0gMDsKKwl0dHlfZHJ2LT5udW0gPSBIU09fU0VSSUFMX1RUWV9NSU5PUlM7CisJdHR5X2Rydi0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CisJdHR5X2Rydi0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKKwl0dHlfZHJ2LT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOworCXR0eV9kcnYtPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKKwl0dHlfZHJ2LT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHlfZHJ2LT50ZXJtaW9zID0gaHNvX3NlcmlhbF90ZXJtaW9zOworCXR0eV9kcnYtPnRlcm1pb3NfbG9ja2VkID0gaHNvX3NlcmlhbF90ZXJtaW9zX2xvY2tlZDsKKwl0dHlfc2V0X29wZXJhdGlvbnModHR5X2RydiwgJmhzb19zZXJpYWxfb3BzKTsKKworCS8qIHJlZ2lzdGVyIHRoZSB0dHkgZHJpdmVyICovCisJcmVzdWx0ID0gdHR5X3JlZ2lzdGVyX2RyaXZlcih0dHlfZHJ2KTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgLSB0dHlfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZCglZClcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBhbiB1c2IgZHJpdmVyICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZoc29fZHJpdmVyKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHJlZ2lzdGVyIGhzbyBkcml2ZXI/IGVycm9yOiAlZFxuIiwKKwkJCXJlc3VsdCk7CisJCS8qIGNsZWFudXAgc2VyaWFsIGludGVyZmFjZSAqLworCQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIodHR5X2Rydik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogZG9uZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaHNvX2V4aXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJoc286IHVubG9hZGVkXG4iKTsKKworCXR0eV91bnJlZ2lzdGVyX2RyaXZlcih0dHlfZHJ2KTsKKwkvKiBkZXJlZ2lzdGVyIHRoZSB1c2IgZHJpdmVyICovCisJdXNiX2RlcmVnaXN0ZXIoJmhzb19kcml2ZXIpOworfQorCisvKiBNb2R1bGUgZGVmaW5pdGlvbnMgKi8KK21vZHVsZV9pbml0KGhzb19pbml0KTsKK21vZHVsZV9leGl0KGhzb19leGl0KTsKKworTU9EVUxFX0FVVEhPUihNT0RfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihNT0RfREVTQ1JJUFRJT04pOworTU9EVUxFX0xJQ0VOU0UoTU9EX0xJQ0VOU0UpOworTU9EVUxFX0lORk8oVmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04pOworCisvKiBjaGFuZ2UgdGhlIGRlYnVnIGxldmVsIChlZzogaW5zbW9kIGhzby5rbyBkZWJ1Zz0weDA0KSAqLworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkxldmVsIG9mIGRlYnVnIFsweDAxIHwgMHgwMiB8IDB4MDQgfCAweDA4IHwgMHgxMF0iKTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CisKKy8qIHNldCB0aGUgbWFqb3IgdHR5IG51bWJlciAoZWc6IGluc21vZCBoc28ua28gdHR5X21ham9yPTI0NSkgKi8KK01PRFVMRV9QQVJNX0RFU0ModHR5X21ham9yLCAiU2V0IHRoZSBtYWpvciB0dHkgbnVtYmVyIik7Cittb2R1bGVfcGFyYW0odHR5X21ham9yLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworLyogZGlzYWJsZSBuZXR3b3JrIGludGVyZmFjZSAoZWc6IGluc21vZCBoc28ua28gZGlzYWJsZV9uZXQ9MSkgKi8KK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9uZXQsICJEaXNhYmxlIHRoZSBuZXR3b3JrIGludGVyZmFjZSIpOworbW9kdWxlX3BhcmFtKGRpc2FibGVfbmV0LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IGFlNDY3ZjEuLmJjZDg1OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtNzQsNyArNzQsNyBAQAogICogQ2FsbCBjb250ZXh0IGlzIGxpa2VseSBwcm9iZSgpLCBiZWZvcmUgaW50ZXJmYWNlIG5hbWUgaXMga25vd24sCiAgKiB3aGljaCBpcyB3aHkgd2Ugd29uJ3QgdHJ5IHRvIHVzZSBpdCBpbiB0aGUgZGlhZ25vc3RpY3MuCiAgKi8KLWludCBybmRpc19jb21tYW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHJuZGlzX21zZ19oZHIgKmJ1ZikKK2ludCBybmRpc19jb21tYW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHJuZGlzX21zZ19oZHIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKIAlzdHJ1Y3QgY2RjX3N0YXRlCSppbmZvID0gKHZvaWQgKikgJmRldi0+ZGF0YTsKIAlpbnQJCQltYXN0ZXJfaWZudW07CkBAIC0xMjEsNyArMTIxLDcgQEAKIAkJCVVTQl9DRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRSwKIAkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCiAJCQkwLCBtYXN0ZXJfaWZudW0sCi0JCQlidWYsIENPTlRST0xfQlVGRkVSX1NJWkUsCisJCQlidWYsIGJ1ZmxlbiwKIAkJCVJORElTX0NPTlRST0xfVElNRU9VVF9NUyk7CiAJCWlmIChsaWtlbHkocmV0dmFsID49IDgpKSB7CiAJCQltc2dfbGVuID0gbGUzMl90b19jcHUoYnVmLT5tc2dfbGVuKTsKQEAgLTIzOSw3ICsyMzksNyBAQAogCXUuZ2V0LT5sZW4gPSBjcHVfdG9fbGUzMihpbl9sZW4pOwogCXUuZ2V0LT5vZmZzZXQgPSBjY3B1MigyMCk7CiAKLQlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIpOworCXJldHZhbCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIlJORElTX01TR19RVUVSWSgweCUwOHgpIGZhaWxlZCwgJWRcbiIsCiAJCQkJb2lkLCByZXR2YWwpOwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJdS5pbml0LT5tYXhfdHJhbnNmZXJfc2l6ZSA9IGNwdV90b19sZTMyKGRldi0+cnhfdXJiX3NpemUpOwogCiAJbmV0LT5jaGFuZ2VfbXR1ID0gTlVMTDsKLQlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIpOworCXJldHZhbCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKSB7CiAJCS8qIGl0IG1pZ2h0IG5vdCBldmVuIGJlIGFuIFJORElTIGRldmljZSEhICovCiAJCWRldl9lcnIoJmludGYtPmRldiwgIlJORElTIGluaXQgZmFpbGVkLCAlZFxuIiwgcmV0dmFsKTsKQEAgLTQwOSw3ICs0MDksNyBAQAogCXUuc2V0LT5vZmZzZXQgPSBjY3B1Migoc2l6ZW9mICp1LnNldCkgLSA4KTsKIAkqKF9fbGUzMiAqKSh1LmJ1ZiArIHNpemVvZiAqdS5zZXQpID0gUk5ESVNfREVGQVVMVF9GSUxURVI7CiAKLQlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIpOworCXJldHZhbCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgInJuZGlzIHNldCBwYWNrZXQgZmlsdGVyLCAlZFxuIiwgcmV0dmFsKTsKIAkJZ290byBoYWx0X2ZhaWxfYW5kX3JlbGVhc2U7CkBAIC00MjQsNyArNDI0LDcgQEAKIAltZW1zZXQodS5oYWx0LCAwLCBzaXplb2YgKnUuaGFsdCk7CiAJdS5oYWx0LT5tc2dfdHlwZSA9IFJORElTX01TR19IQUxUOwogCXUuaGFsdC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqdS5oYWx0KTsKLQkodm9pZCkgcm5kaXNfY29tbWFuZChkZXYsICh2b2lkICopdS5oYWx0KTsKKwkodm9pZCkgcm5kaXNfY29tbWFuZChkZXYsICh2b2lkICopdS5oYWx0LCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIGZhaWxfYW5kX3JlbGVhc2U6CiAJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5kYXRhLCBOVUxMKTsKIAl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKGRyaXZlcl9vZihpbnRmKSwgaW5mby0+ZGF0YSk7CkBAIC00NDksNyArNDQ5LDcgQEAKIAlpZiAoaGFsdCkgewogCQloYWx0LT5tc2dfdHlwZSA9IFJORElTX01TR19IQUxUOwogCQloYWx0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICpoYWx0KTsKLQkJKHZvaWQpIHJuZGlzX2NvbW1hbmQoZGV2LCAodm9pZCAqKWhhbHQpOworCQkodm9pZCkgcm5kaXNfY29tbWFuZChkZXYsICh2b2lkICopaGFsdCwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CiAJCWtmcmVlKGhhbHQpOwogCX0KIApAQCAtNTc2LDYgKzU3NiwxMCBAQAogCS8qICJBY3RpdmVTeW5jIiBpcyBhbiB1bmRvY3VtZW50ZWQgdmFyaWFudCBvZiBSTkRJUywgdXNlZCBpbiBXTTUgKi8KIAlVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01JU0MsIDEsIDEpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmcm5kaXNfaW5mbywKK30sIHsKKwkvKiBSTkRJUyBmb3IgdGV0aGVyaW5nICovCisJVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19XSVJFTEVTU19DT05UUk9MTEVSLCAxLCAzKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJnJuZGlzX2luZm8sCiB9LAogCXsgfSwJCS8vIEVORAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggOGM5ZDZhZS4uOTZkZmYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTczLDEyICs3Myw3IEBACiAgICBUaGVyZSBhcmUgbm8gaWxsIGVmZmVjdHMgZnJvbSB0b28tbGFyZ2UgcmVjZWl2ZSByaW5ncy4gKi8KICNkZWZpbmUgVFhfUklOR19TSVpFCTE2CiAjZGVmaW5lIFRYX1FVRVVFX0xFTgkxMAkvKiBMaW1pdCByaW5nIGVudHJpZXMgYWN0dWFsbHkgdXNlZC4gKi8KLSNpZmRlZiBDT05GSUdfVklBX1JISU5FX05BUEkKICNkZWZpbmUgUlhfUklOR19TSVpFCTY0Ci0jZWxzZQotI2RlZmluZSBSWF9SSU5HX1NJWkUJMTYKLSNlbmRpZgotCiAKIC8qIE9wZXJhdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCB1c3VhbGx5IGFyZSBub3QgY2hhbmdlZC4gKi8KIApAQCAtNTgzLDcgKzU3OCw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19WSUFfUkhJTkVfTkFQSQogc3RhdGljIGludCByaGluZV9uYXBpcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCByaGluZV9wcml2YXRlLCBuYXBpKTsKQEAgLTYwNCw3ICs1OTgsNiBAQAogCX0KIAlyZXR1cm4gd29ya19kb25lOwogfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCByaGluZV9od19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGxvbmcgcGlvYWRkcikKIHsKQEAgLTc4NCw5ICs3NzcsOCBAQAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSByaGluZV9wb2xsOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJQV9SSElORV9OQVBJCiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmcnAtPm5hcGksIHJoaW5lX25hcGlwb2xsLCA2NCk7Ci0jZW5kaWYKKwogCWlmIChycC0+cXVpcmtzICYgcnFSaGluZUkpCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TR3xORVRJRl9GX0hXX0NTVU07CiAKQEAgLTEwNTYsOSArMTA0OCw3IEBACiAKIAlyaGluZV9zZXRfcnhfbW9kZShkZXYpOwogCi0jaWZkZWYgQ09ORklHX1ZJQV9SSElORV9OQVBJCiAJbmFwaV9lbmFibGUoJnJwLT5uYXBpKTsKLSNlbmRpZgogCiAJLyogRW5hYmxlIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCiAJaW93cml0ZTE2KEludHJSeERvbmUgfCBJbnRyUnhFcnIgfCBJbnRyUnhFbXB0eXwgSW50clJ4T3ZlcmZsb3cgfApAQCAtMTE5Myw5ICsxMTgzLDcgQEAKIAkvKiBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCByeCBpbnRlcnJ1cHRzICovCiAJZGlzYWJsZV9pcnEocnAtPnBkZXYtPmlycSk7CiAKLSNpZmRlZiBDT05GSUdfVklBX1JISU5FX05BUEkKIAluYXBpX2Rpc2FibGUoJnJwLT5uYXBpKTsKLSNlbmRpZgogCiAJc3Bpbl9sb2NrKCZycC0+bG9jayk7CiAKQEAgLTEzMTksMTYgKzEzMDcsMTIgQEAKIAogCQlpZiAoaW50cl9zdGF0dXMgJiAoSW50clJ4RG9uZSB8IEludHJSeEVyciB8IEludHJSeERyb3BwZWQgfAogCQkJCSAgIEludHJSeFdha2VVcCB8IEludHJSeEVtcHR5IHwgSW50clJ4Tm9CdWYpKSB7Ci0jaWZkZWYgQ09ORklHX1ZJQV9SSElORV9OQVBJCiAJCQlpb3dyaXRlMTYoSW50clR4QWJvcnRlZCB8CiAJCQkJICBJbnRyVHhEb25lIHwgSW50clR4RXJyb3IgfCBJbnRyVHhVbmRlcnJ1biB8CiAJCQkJICBJbnRyUENJRXJyIHwgSW50clN0YXRzTWF4IHwgSW50ckxpbmtDaGFuZ2UsCiAJCQkJICBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAogCQkJbmV0aWZfcnhfc2NoZWR1bGUoZGV2LCAmcnAtPm5hcGkpOwotI2Vsc2UKLQkJCXJoaW5lX3J4KGRldiwgUlhfUklOR19TSVpFKTsKLSNlbmRpZgogCQl9CiAKIAkJaWYgKGludHJfc3RhdHVzICYgKEludHJUeEVyclN1bW1hcnkgfCBJbnRyVHhEb25lKSkgewpAQCAtMTUyMCwxMSArMTUwNCw3IEBACiAJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCX0KIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0jaWZkZWYgQ09ORklHX1ZJQV9SSElORV9OQVBJCiAJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotI2Vsc2UKLQkJCW5ldGlmX3J4KHNrYik7Ci0jZW5kaWYKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCQlycC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAkJCXJwLT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0xODM2LDkgKzE4MTYsNyBAQAogCXNwaW5fbG9ja19pcnEoJnJwLT5sb2NrKTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSNpZmRlZiBDT05GSUdfVklBX1JISU5FX05BUEkKIAluYXBpX2Rpc2FibGUoJnJwLT5uYXBpKTsKLSNlbmRpZgogCiAJaWYgKGRlYnVnID4gMSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgIgpAQCAtMTkzNyw5ICsxOTE1LDggQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIDA7CiAKLSNpZmRlZiBDT05GSUdfVklBX1JISU5FX05BUEkKIAluYXBpX2Rpc2FibGUoJnJwLT5uYXBpKTsKLSNlbmRpZgorCiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IDZiOGQ4ODIuLjM3MGNlMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC0xMTAyLDYxICsxMTAyLDQxIEBACiAKIHN0YXRpYyBpbnQgdmVsb2NpdHlfaW5pdF9yaW5ncyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKIHsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgcHNpemU7Ci0JdW5zaWduZWQgaW50IHRzaXplOworCXN0cnVjdCB2ZWxvY2l0eV9vcHQgKm9wdCA9ICZ2cHRyLT5vcHRpb25zOworCWNvbnN0IHVuc2lnbmVkIGludCByeF9yaW5nX3NpemUgPSBvcHQtPm51bXJ4ICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKTsKKwljb25zdCB1bnNpZ25lZCBpbnQgdHhfcmluZ19zaXplID0gb3B0LT5udW10eCAqIHNpemVvZihzdHJ1Y3QgdHhfZGVzYyk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2cHRyLT5wZGV2OwogCWRtYV9hZGRyX3QgcG9vbF9kbWE7Ci0JdTggKnBvb2w7CisJdm9pZCAqcG9vbDsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCS8qCi0JICoJQWxsb2NhdGUgYWxsIFJEL1REIHJpbmdzIGEgc2luZ2xlIHBvb2wKLQkgKi8KLQotCXBzaXplID0gdnB0ci0+b3B0aW9ucy5udW1yeCAqIHNpemVvZihzdHJ1Y3QgcnhfZGVzYykgKwotCQl2cHRyLT5vcHRpb25zLm51bXR4ICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSAqIHZwdHItPm51bV90eHE7Ci0KLQkvKgorCSAqIEFsbG9jYXRlIGFsbCBSRC9URCByaW5ncyBhIHNpbmdsZSBwb29sLgorCSAqCiAJICogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSBmdWxmaWxscyB0aGUgcmVxdWlyZW1lbnQgZm9yIDY0IGJ5dGVzCiAJICogYWxpZ25tZW50CiAJICovCi0JcG9vbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHZwdHItPnBkZXYsIHBzaXplLCAmcG9vbF9kbWEpOwotCi0JaWYgKHBvb2wgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIDogRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsCi0JCQkJCXZwdHItPmRldi0+bmFtZSk7CisJcG9vbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4X3Jpbmdfc2l6ZSAqIHZwdHItPm51bV90eHEgKworCQkJCSAgICByeF9yaW5nX3NpemUsICZwb29sX2RtYSk7CisJaWYgKCFwb29sKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIDogRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsCisJCQl2cHRyLT5kZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltZW1zZXQocG9vbCwgMCwgcHNpemUpOwotCi0JdnB0ci0+cmRfcmluZyA9IChzdHJ1Y3QgcnhfZGVzYyAqKSBwb29sOwotCisJdnB0ci0+cmRfcmluZyA9IHBvb2w7CiAJdnB0ci0+cmRfcG9vbF9kbWEgPSBwb29sX2RtYTsKIAotCXRzaXplID0gdnB0ci0+b3B0aW9ucy5udW10eCAqIFBLVF9CVUZfU1ogKiB2cHRyLT5udW1fdHhxOwotCXZwdHItPnR4X2J1ZnMgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh2cHRyLT5wZGV2LCB0c2l6ZSwKLQkJCQkJCSZ2cHRyLT50eF9idWZzX2RtYSk7CisJcG9vbCArPSByeF9yaW5nX3NpemU7CisJcG9vbF9kbWEgKz0gcnhfcmluZ19zaXplOwogCi0JaWYgKHZwdHItPnR4X2J1ZnMgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwKLQkJCQkJdnB0ci0+ZGV2LT5uYW1lKTsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudCh2cHRyLT5wZGV2LCBwc2l6ZSwgcG9vbCwgcG9vbF9kbWEpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQodnB0ci0+dHhfYnVmcywgMCwgdnB0ci0+b3B0aW9ucy5udW10eCAqIFBLVF9CVUZfU1ogKiB2cHRyLT5udW1fdHhxKTsKLQotCWkgPSB2cHRyLT5vcHRpb25zLm51bXJ4ICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKTsKLQlwb29sICs9IGk7Ci0JcG9vbF9kbWEgKz0gaTsKIAlmb3IgKGkgPSAwOyBpIDwgdnB0ci0+bnVtX3R4cTsgaSsrKSB7Ci0JCWludCBvZmZzZXQgPSB2cHRyLT5vcHRpb25zLm51bXR4ICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKTsKLQorCQl2cHRyLT50ZF9yaW5nc1tpXSA9IHBvb2w7CiAJCXZwdHItPnRkX3Bvb2xfZG1hW2ldID0gcG9vbF9kbWE7Ci0JCXZwdHItPnRkX3JpbmdzW2ldID0gKHN0cnVjdCB0eF9kZXNjICopIHBvb2w7Ci0JCXBvb2wgKz0gb2Zmc2V0OwotCQlwb29sX2RtYSArPSBvZmZzZXQ7CisJCXBvb2wgKz0gdHhfcmluZ19zaXplOworCQlwb29sX2RtYSArPSB0eF9yaW5nX3NpemU7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNjksMTkgKzExNDksMTMgQEAKIAogc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV9yaW5ncyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKIHsKLQlpbnQgc2l6ZTsKLQotCXNpemUgPSB2cHRyLT5vcHRpb25zLm51bXJ4ICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKSArCi0JICAgICAgIHZwdHItPm9wdGlvbnMubnVtdHggKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpICogdnB0ci0+bnVtX3R4cTsKKwljb25zdCBpbnQgc2l6ZSA9IHZwdHItPm9wdGlvbnMubnVtcnggKiBzaXplb2Yoc3RydWN0IHJ4X2Rlc2MpICsKKwkJdnB0ci0+b3B0aW9ucy5udW10eCAqIHNpemVvZihzdHJ1Y3QgdHhfZGVzYykgKiB2cHRyLT5udW1fdHhxOwogCiAJcGNpX2ZyZWVfY29uc2lzdGVudCh2cHRyLT5wZGV2LCBzaXplLCB2cHRyLT5yZF9yaW5nLCB2cHRyLT5yZF9wb29sX2RtYSk7Ci0KLQlzaXplID0gdnB0ci0+b3B0aW9ucy5udW10eCAqIFBLVF9CVUZfU1ogKiB2cHRyLT5udW1fdHhxOwotCi0JcGNpX2ZyZWVfY29uc2lzdGVudCh2cHRyLT5wZGV2LCBzaXplLCB2cHRyLT50eF9idWZzLCB2cHRyLT50eF9idWZzX2RtYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZWxvY2l0eV9naXZlX21hbnlfcnhfZGVzY3Moc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV9naXZlX21hbnlfcnhfZGVzY3Moc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCiB7CiAJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKIAlpbnQgYXZhaWwsIGRpcnR5LCB1bnVzYWJsZTsKQEAgLTEyMDgsNyArMTE4Miw3IEBACiAKIHN0YXRpYyBpbnQgdmVsb2NpdHlfcnhfcmVmaWxsKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQogewotCWludCBkaXJ0eSA9IHZwdHItPnJkX2RpcnR5LCBkb25lID0gMCwgcmV0ID0gMDsKKwlpbnQgZGlydHkgPSB2cHRyLT5yZF9kaXJ0eSwgZG9uZSA9IDA7CiAKIAlkbyB7CiAJCXN0cnVjdCByeF9kZXNjICpyZCA9IHZwdHItPnJkX3JpbmcgKyBkaXJ0eTsKQEAgLTEyMTgsOCArMTE5Miw3IEBACiAJCQlicmVhazsKIAogCQlpZiAoIXZwdHItPnJkX2luZm9bZGlydHldLnNrYikgewotCQkJcmV0ID0gdmVsb2NpdHlfYWxsb2NfcnhfYnVmKHZwdHIsIGRpcnR5KTsKLQkJCWlmIChyZXQgPCAwKQorCQkJaWYgKHZlbG9jaXR5X2FsbG9jX3J4X2J1Zih2cHRyLCBkaXJ0eSkgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJCWRvbmUrKzsKQEAgLTEyMjksMTAgKzEyMDIsMTQgQEAKIAlpZiAoZG9uZSkgewogCQl2cHRyLT5yZF9kaXJ0eSA9IGRpcnR5OwogCQl2cHRyLT5yZF9maWxsZWQgKz0gZG9uZTsKLQkJdmVsb2NpdHlfZ2l2ZV9tYW55X3J4X2Rlc2NzKHZwdHIpOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIGRvbmU7Cit9CisKK3N0YXRpYyB2b2lkIHZlbG9jaXR5X3NldF9yeGJ1ZnNpemUoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBtdHUpCit7CisJdnB0ci0+cnhfYnVmX3N6ID0gKG10dSA8PSBFVEhfREFUQV9MRU4pID8gUEtUX0JVRl9TWiA6IG10dSArIDMyOwogfQogCiAvKioKQEAgLTEyNDUsMjUgKzEyMjIsMjQgQEAKIAogc3RhdGljIGludCB2ZWxvY2l0eV9pbml0X3JkX3Jpbmcoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCiB7Ci0JaW50IHJldDsKLQlpbnQgbXR1ID0gdnB0ci0+ZGV2LT5tdHU7Ci0KLQl2cHRyLT5yeF9idWZfc3ogPSAobXR1IDw9IEVUSF9EQVRBX0xFTikgPyBQS1RfQlVGX1NaIDogbXR1ICsgMzI7CisJaW50IHJldCA9IC1FTk9NRU07CiAKIAl2cHRyLT5yZF9pbmZvID0ga2NhbGxvYyh2cHRyLT5vcHRpb25zLm51bXJ4LAogCQkJCXNpemVvZihzdHJ1Y3QgdmVsb2NpdHlfcmRfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghdnB0ci0+cmRfaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0OwogCiAJdnB0ci0+cmRfZmlsbGVkID0gdnB0ci0+cmRfZGlydHkgPSB2cHRyLT5yZF9jdXJyID0gMDsKIAotCXJldCA9IHZlbG9jaXR5X3J4X3JlZmlsbCh2cHRyKTsKLQlpZiAocmV0IDwgMCkgeworCWlmICh2ZWxvY2l0eV9yeF9yZWZpbGwodnB0cikgIT0gdnB0ci0+b3B0aW9ucy5udW1yeCkgewogCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0VSUiwgS0VSTl9FUlIKIAkJCSIlczogZmFpbGVkIHRvIGFsbG9jYXRlIFJYIGJ1ZmZlci5cbiIsIHZwdHItPmRldi0+bmFtZSk7CiAJCXZlbG9jaXR5X2ZyZWVfcmRfcmluZyh2cHRyKTsKKwkJZ290byBvdXQ7CiAJfQogCisJcmV0ID0gMDsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzEzLDEwICsxMjg5LDggQEAKIAogc3RhdGljIGludCB2ZWxvY2l0eV9pbml0X3RkX3Jpbmcoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCiB7Ci0JaW50IGksIGo7CiAJZG1hX2FkZHJfdCBjdXJyOwotCXN0cnVjdCB0eF9kZXNjICp0ZDsKLQlzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyAqdGRfaW5mbzsKKwl1bnNpZ25lZCBpbnQgajsKIAogCS8qIEluaXQgdGhlIFREIHJpbmcgZW50cmllcyAqLwogCWZvciAoaiA9IDA7IGogPCB2cHRyLT5udW1fdHhxOyBqKyspIHsKQEAgLTEzMzEsMTQgKzEzMDUsNiBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlmb3IgKGkgPSAwOyBpIDwgdnB0ci0+b3B0aW9ucy5udW10eDsgaSsrLCBjdXJyICs9IHNpemVvZihzdHJ1Y3QgdHhfZGVzYykpIHsKLQkJCXRkID0gJih2cHRyLT50ZF9yaW5nc1tqXVtpXSk7Ci0JCQl0ZF9pbmZvID0gJih2cHRyLT50ZF9pbmZvc1tqXVtpXSk7Ci0JCQl0ZF9pbmZvLT5idWYgPSB2cHRyLT50eF9idWZzICsKLQkJCQkoaiAqIHZwdHItPm9wdGlvbnMubnVtdHggKyBpKSAqIFBLVF9CVUZfU1o7Ci0JCQl0ZF9pbmZvLT5idWZfZG1hID0gdnB0ci0+dHhfYnVmc19kbWEgKwotCQkJCShqICogdnB0ci0+b3B0aW9ucy5udW10eCArIGkpICogUEtUX0JVRl9TWjsKLQkJfQogCQl2cHRyLT50ZF90YWlsW2pdID0gdnB0ci0+dGRfY3VycltqXSA9IHZwdHItPnRkX3VzZWRbal0gPSAwOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE0NDgsMTAgKzE0MTQsOCBAQAogCiAJdnB0ci0+cmRfY3VyciA9IHJkX2N1cnI7CiAKLQlpZiAod29ya3MgPiAwICYmIHZlbG9jaXR5X3J4X3JlZmlsbCh2cHRyKSA8IDApIHsKLQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9FUlIsIEtFUk5fRVJSCi0JCQkiJXM6IHJ4IGJ1ZiBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIHZwdHItPmRldi0+bmFtZSk7Ci0JfQorCWlmICgod29ya3MgPiAwKSAmJiAodmVsb2NpdHlfcnhfcmVmaWxsKHZwdHIpID4gMCkpCisJCXZlbG9jaXR5X2dpdmVfbWFueV9yeF9kZXNjcyh2cHRyKTsKIAogCVZBUl9VU0VEKHN0YXRzKTsKIAlyZXR1cm4gd29ya3M7CkBAIC0xNDk1LDI0ICsxNDU5LDE4IEBACiAgKgllbm91Z2guIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIHRoZSByZWNlaXZlZAogICoJcGFja2V0IGlzIHRvbyBiaWcgb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgdmVsb2NpdHlfcnhfY29weShzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYiwgaW50IHBrdF9zaXplLAotCQkJCSAgIHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQorc3RhdGljIGludCB2ZWxvY2l0eV9yeF9jb3B5KHN0cnVjdCBza19idWZmICoqcnhfc2tiLCBpbnQgcGt0X3NpemUsCisJCQkgICAgc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCiB7CiAJaW50IHJldCA9IC0xOwotCiAJaWYgKHBrdF9zaXplIDwgcnhfY29weWJyZWFrKSB7CiAJCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwogCi0JCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9zaXplICsgMik7CisJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHZwdHItPmRldiwgcGt0X3NpemUgKyAyKTsKIAkJaWYgKG5ld19za2IpIHsKLQkJCW5ld19za2ItPmRldiA9IHZwdHItPmRldjsKIAkJCW5ld19za2ItPmlwX3N1bW1lZCA9IHJ4X3NrYlswXS0+aXBfc3VtbWVkOwotCi0JCQlpZiAodnB0ci0+ZmxhZ3MgJiBWRUxPQ0lUWV9GTEFHU19JUF9BTElHTikKLQkJCQlza2JfcmVzZXJ2ZShuZXdfc2tiLCAyKTsKLQotCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShyeF9za2JbMF0sIG5ld19za2ItPmRhdGEsCi0JCQkJCQkgIHBrdF9zaXplKTsKKwkJCXNrYl9yZXNlcnZlKG5ld19za2IsIDIpOworCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YSgqcnhfc2tiLCBuZXdfc2tiLT5kYXRhLCBwa3Rfc2l6ZSk7CiAJCQkqcnhfc2tiID0gbmV3X3NrYjsKIAkJCXJldCA9IDA7CiAJCX0KQEAgLTE1MzMsMTIgKzE0OTEsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIHZlbG9jaXR5X2lwaF9yZWFsaWduKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGt0X3NpemUpCiB7Ci0JLyogRklYTUUgLSBtZW1tb3ZlID8gKi8KIAlpZiAodnB0ci0+ZmxhZ3MgJiBWRUxPQ0lUWV9GTEFHU19JUF9BTElHTikgewotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSBwa3Rfc2l6ZTsgaSA+PSAwOyBpLS0pCi0JCQkqKHNrYi0+ZGF0YSArIGkgKyAyKSA9ICooc2tiLT5kYXRhICsgaSk7CisJCW1lbW1vdmUoc2tiLT5kYXRhICsgMiwgc2tiLT5kYXRhLCBwa3Rfc2l6ZSk7CiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJfQogfQpAQCAtMTYyOSw3ICsxNTgzLDcgQEAKIAlzdHJ1Y3QgcnhfZGVzYyAqcmQgPSAmKHZwdHItPnJkX3JpbmdbaWR4XSk7CiAJc3RydWN0IHZlbG9jaXR5X3JkX2luZm8gKnJkX2luZm8gPSAmKHZwdHItPnJkX2luZm9baWR4XSk7CiAKLQlyZF9pbmZvLT5za2IgPSBkZXZfYWxsb2Nfc2tiKHZwdHItPnJ4X2J1Zl9zeiArIDY0KTsKKwlyZF9pbmZvLT5za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHZwdHItPmRldiwgdnB0ci0+cnhfYnVmX3N6ICsgNjQpOwogCWlmIChyZF9pbmZvLT5za2IgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE2MzgsNyArMTU5Miw2IEBACiAJICoJNjRieXRlIGFsaWdubWVudC4KIAkgKi8KIAlza2JfcmVzZXJ2ZShyZF9pbmZvLT5za2IsICh1bnNpZ25lZCBsb25nKSByZF9pbmZvLT5za2ItPmRhdGEgJiA2Myk7Ci0JcmRfaW5mby0+c2tiLT5kZXYgPSB2cHRyLT5kZXY7CiAJcmRfaW5mby0+c2tiX2RtYSA9IHBjaV9tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHJkX2luZm8tPnNrYi0+ZGF0YSwgdnB0ci0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJLyoKQEAgLTE4NzgsNyArMTgzMSw3IEBACiAJLyoKIAkgKglEb24ndCB1bm1hcCB0aGUgcHJlLWFsbG9jYXRlZCB0eF9idWZzCiAJICovCi0JaWYgKHRkaW5mby0+c2tiX2RtYSAmJiAodGRpbmZvLT5za2JfZG1hWzBdICE9IHRkaW5mby0+YnVmX2RtYSkpIHsKKwlpZiAodGRpbmZvLT5za2JfZG1hKSB7CiAKIAkJZm9yIChpID0gMDsgaSA8IHRkaW5mby0+bnNrYl9kbWE7IGkrKykgewogI2lmZGVmIFZFTE9DSVRZX1pFUk9fQ09QWV9TVVBQT1JUCkBAIC0xOTA5LDYgKzE4NjIsOCBAQAogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmV0OwogCisJdmVsb2NpdHlfc2V0X3J4YnVmc2l6ZSh2cHRyLCBkZXYtPm10dSk7CisKIAlyZXQgPSB2ZWxvY2l0eV9pbml0X3JpbmdzKHZwdHIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKQEAgLTE5MjQsNiArMTg3OSw4IEBACiAJLyogRW5zdXJlIGNoaXAgaXMgcnVubmluZyAqLwogCXBjaV9zZXRfcG93ZXJfc3RhdGUodnB0ci0+cGRldiwgUENJX0QwKTsKIAorCXZlbG9jaXR5X2dpdmVfbWFueV9yeF9kZXNjcyh2cHRyKTsKKwogCXZlbG9jaXR5X2luaXRfcmVnaXN0ZXJzKHZwdHIsIFZFTE9DSVRZX0lOSVRfQ09MRCk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycSh2cHRyLT5wZGV2LT5pcnEsICZ2ZWxvY2l0eV9pbnRyLCBJUlFGX1NIQVJFRCwKQEAgLTE5ODgsNiArMTk0NSw4IEBACiAKIAkJZGV2LT5tdHUgPSBuZXdfbXR1OwogCisJCXZlbG9jaXR5X3NldF9yeGJ1ZnNpemUodnB0ciwgbmV3X210dSk7CisKIAkJcmV0ID0gdmVsb2NpdHlfaW5pdF9yZF9yaW5nKHZwdHIpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0X3VubG9jazsKQEAgLTIwNzQsOSArMjAzMywxOSBAQAogCXN0cnVjdCB0eF9kZXNjICp0ZF9wdHI7CiAJc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKnRkaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpbmRleDsKIAlpbnQgcGt0bGVuID0gc2tiLT5sZW47Ci0JX19sZTE2IGxlbiA9IGNwdV90b19sZTE2KHBrdGxlbik7CisJX19sZTE2IGxlbjsKKwlpbnQgaW5kZXg7CisKKworCisJaWYgKHNrYi0+bGVuIDwgRVRIX1pMRU4pIHsKKwkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJCWdvdG8gb3V0OworCQlwa3RsZW4gPSBFVEhfWkxFTjsKKwl9CisKKwlsZW4gPSBjcHVfdG9fbGUxNihwa3RsZW4pOwogCiAjaWZkZWYgVkVMT0NJVFlfWkVST19DT1BZX1NVUFBPUlQKIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDYgJiYgX19za2JfbGluZWFyaXplKHNrYikpIHsKQEAgLTIwOTQsMjMgKzIwNjMsNiBAQAogCXRkX3B0ci0+dGRlc2MxLlRDUiA9IFRDUjBfVElDOwogCXRkX3B0ci0+dGRfYnVmWzBdLnNpemUgJj0gflREX1FVRVVFOwogCi0JLyoKLQkgKglQYWQgc2hvcnQgZnJhbWVzLgotCSAqLwotCWlmIChwa3RsZW4gPCBFVEhfWkxFTikgewotCQkvKiBDYW5ub3Qgb2NjdXIgdW50aWwgWkMgc3VwcG9ydCAqLwotCQlwa3RsZW4gPSBFVEhfWkxFTjsKLQkJbGVuID0gY3B1X3RvX2xlMTYoRVRIX1pMRU4pOwotCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgdGRpbmZvLT5idWYsIHNrYi0+bGVuKTsKLQkJbWVtc2V0KHRkaW5mby0+YnVmICsgc2tiLT5sZW4sIDAsIEVUSF9aTEVOIC0gc2tiLT5sZW4pOwotCQl0ZGluZm8tPnNrYiA9IHNrYjsKLQkJdGRpbmZvLT5za2JfZG1hWzBdID0gdGRpbmZvLT5idWZfZG1hOwotCQl0ZF9wdHItPnRkZXNjMC5sZW4gPSBsZW47Ci0JCXRkX3B0ci0+dGRfYnVmWzBdLnBhX2xvdyA9IGNwdV90b19sZTMyKHRkaW5mby0+c2tiX2RtYVswXSk7Ci0JCXRkX3B0ci0+dGRfYnVmWzBdLnBhX2hpZ2ggPSAwOwotCQl0ZF9wdHItPnRkX2J1ZlswXS5zaXplID0gbGVuOwkvKiBxdWV1ZSBpcyAwIGFueXdheSAqLwotCQl0ZGluZm8tPm5za2JfZG1hID0gMTsKLQl9IGVsc2UKICNpZmRlZiBWRUxPQ0lUWV9aRVJPX0NPUFlfU1VQUE9SVAogCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID4gMCkgewogCQlpbnQgbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKQEAgLTIyMDIsNyArMjE1NCw4IEBACiAJfQogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKK291dDoKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKaW5kZXggNzM4N2JlNC4uODY0NDYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKQEAgLTIzNiwxMCArMjM2LDggQEAKIAogc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gewogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTggKmJ1ZjsKIAlpbnQgbnNrYl9kbWE7CiAJZG1hX2FkZHJfdCBza2JfZG1hWzddOwotCWRtYV9hZGRyX3QgYnVmX2RtYTsKIH07CiAKIGVudW0gIHZlbG9jaXR5X293bmVyIHsKQEAgLTE1MDYsOSArMTUwNCw2IEBACiAJZG1hX2FkZHJfdCByZF9wb29sX2RtYTsKIAlkbWFfYWRkcl90IHRkX3Bvb2xfZG1hW1RYX1FVRVVFX05PXTsKIAotCWRtYV9hZGRyX3QgdHhfYnVmc19kbWE7Ci0JdTggKnR4X2J1ZnM7Ci0KIAlzdHJ1Y3Qgdmxhbl9ncm91cCAgICAqdmxncnA7CiAJdTggaXBfYWRkcls0XTsKIAllbnVtIGNoaXBfdHlwZSBjaGlwX2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IDQ0NTIzMDYuLmMyOGQ3Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTU1MCw3ICs1NTAsOCBAQAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0gewotCVZJUlRJT19ORVRfRl9DU1VNLCBWSVJUSU9fTkVUX0ZfR1NPLCBWSVJUSU9fTkVUX0ZfTUFDLAorCVZJUlRJT19ORVRfRl9DU1VNLCBWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTSwKKwlWSVJUSU9fTkVUX0ZfR1NPLCBWSVJUSU9fTkVUX0ZfTUFDLAogCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQsIFZJUlRJT19ORVRfRl9IT1NUX1VGTywgVklSVElPX05FVF9GX0hPU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04sIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCmluZGV4IGQ1MTQwYWUuLjg0NmJlNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCkBAIC0zOTAsOCArMzkwLDcgQEAKIAogCSAgU2VsZWN0IGRyaXZlciB5b3VyIGNhcmQgYW5kIHJlbWVtYmVyIHRvIHNheSBZIHRvICJXYW4gUm91dGVyLiIKIAkgIFlvdSB3aWxsIG5lZWQgdGhlIHdhbi10b29scyBwYWNrYWdlIHdoaWNoIGlzIGF2YWlsYWJsZSBmcm9tCi0JICA8ZnRwOi8vZnRwLnNhbmdvbWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlYWQ6Ci0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQ+LgorCSAgPGZ0cDovL2Z0cC5zYW5nb21hLmNvbS8+LgogCiAJICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbid0IGRpcmVjdGx5IGFmZmVjdCB0aGUKIAkgIGtlcm5lbCBleGNlcHQgZm9yIGhvdyBzdWJvcmRpbmF0ZSBkcml2ZXJzIG1heSBiZSBidWlsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCmluZGV4IGMyY2M0MmYuLmM4ZTU2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwpAQCAtMTMzLDkgKzEzMyw5IEBACiAJc2NhX291dChzdGF0ICYgKFNUMV9VRFJOIHwgU1QxX0NEQ0QpLCBNU0NJMF9PRkZTRVQgKyBTVDEsIHBvcnQpOwogCiAJaWYgKHN0YXQgJiBTVDFfVURSTikgewotCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKHBvcnRfdG9fZGV2KHBvcnQpKTsKLQkJc3RhdHMtPnR4X2Vycm9ycysrOyAvKiBUWCBVbmRlcnJ1biBlcnJvciBkZXRlY3RlZCAqLwotCQlzdGF0cy0+dHhfZmlmb19lcnJvcnMrKzsKKwkJLyogVFggVW5kZXJydW4gZXJyb3IgZGV0ZWN0ZWQgKi8KKwkJcG9ydF90b19kZXYocG9ydCktPnN0YXRzLnR4X2Vycm9ycysrOworCQlwb3J0X3RvX2Rldihwb3J0KS0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAl9CiAKIAlzdGF0ID0gc2NhX2luKE1TQ0kxX09GRlNFVCArIFNUMSwgcG9ydCk7IC8qIHJlYWQgTVNDSTEgU1QxIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKaW5kZXggNTgyNzMyNC4uZjdkMzM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYworKysgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCkBAIC0zOTcsOSArMzk3LDkgQEAKIAkJZXJyID0gUFRSX0VSUihjb3NhX2NsYXNzKTsKIAkJZ290byBvdXRfY2hyZGV2OwogCX0KLQlmb3IgKGk9MDsgaTxucl9jYXJkczsgaSsrKSB7Ci0JCWRldmljZV9jcmVhdGUoY29zYV9jbGFzcywgTlVMTCwgTUtERVYoY29zYV9tYWpvciwgaSksICJjb3NhJWQiLCBpKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IG5yX2NhcmRzOyBpKyspCisJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShjb3NhX2NsYXNzLCBOVUxMLCBNS0RFVihjb3NhX21ham9yLCBpKSwKKwkJCQkgICAgICBOVUxMLCAiY29zYSVkIiwgaSk7CiAJZXJyID0gMDsKIAlnb3RvIG91dDsKIAkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKaW5kZXggYzZmMjZlMi4uNTBlZjViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKQEAgLTY0Miw3ICs2NDIsNiBAQAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFJ4RkQgKnJ4X2ZkID0gZHByaXYtPnJ4X2ZkICsgZHByaXYtPnJ4X2N1cnJlbnQlUlhfUklOR19TSVpFOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMoZGV2KTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRwcml2LT5wY2lfcHJpdi0+cGRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBwa3RfbGVuOwpAQCAtNjU2LDggKzY1NSw4IEBACiAJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBsZTMyX3RvX2NwdShyeF9mZC0+ZGF0YSksCiAJCQkgUlhfTUFYKEhETENfTUFYX01SVSksIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJaWYgKChza2ItPmRhdGFbLS1wa3RfbGVuXSAmIEZyYW1lT2spID09IEZyYW1lT2spIHsKLQkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQkJc3RhdHMtPnJ4X2J5dGVzICs9IHBrdF9sZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJCXNrYi0+cHJvdG9jb2wgPSBoZGxjX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwpAQCAtNjY1LDEzICs2NjQsMTMgQEAKIAkJbmV0aWZfcngoc2tiKTsKIAl9IGVsc2UgewogCQlpZiAoc2tiLT5kYXRhW3BrdF9sZW5dICYgRnJhbWVSZG8pCi0JCQlzdGF0cy0+cnhfZmlmb19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJZWxzZSBpZiAoIShza2ItPmRhdGFbcGt0X2xlbl0gfCB+RnJhbWVDcmMpKQotCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQllbHNlIGlmICghKHNrYi0+ZGF0YVtwa3RfbGVuXSB8IH4oRnJhbWVWZnIgfCBGcmFtZVJhYikpKQotCQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQllbHNlCi0JCQlzdGF0cy0+cnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCX0KIHJlZmlsbDoKQEAgLTE1NjksNyArMTU2OCw2IEBACiAKIAlpZiAoc3RhdGUgJiBTY2NFdnQpIHsKIAkJaWYgKHN0YXRlICYgQWxscykgewotCQkJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhkZXYpOwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCXN0cnVjdCBUeEZEICp0eF9mZDsKIApAQCAtMTU4Niw4ICsxNTg0LDggQEAKIAkJCQlwY2lfdW5tYXBfc2luZ2xlKHBwcml2LT5wZGV2LCBsZTMyX3RvX2NwdSh0eF9mZC0+ZGF0YSksCiAJCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJCWlmICh0eF9mZC0+c3RhdGUgJiBGcmFtZUVuZCkgewotCQkJCQlzdGF0cy0+dHhfcGFja2V0cysrOwotCQkJCQlzdGF0cy0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJCX0KIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQkJCWRwcml2LT50eF9za2J1ZmZbY3VyXSA9IE5VTEw7CkBAIC0xNjk4LDcgKzE2OTYsNyBAQAogCQl9CiAJCWlmIChzdGF0ZSAmIEVycikgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFR4IEVSUlxuIiwgZGV2LT5uYW1lKTsKLQkJCWhkbGNfc3RhdHMoZGV2KS0+dHhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJc3RhdGUgJj0gfkVycjsKIAkJfQogCX0KQEAgLTE4MzQsNyArMTgzMiw3IEBACiAJCQkJaWYgKCEocnhfZmQtPnN0YXRlMiAmIERhdGFDb21wbGV0ZSkpCiAJCQkJCWJyZWFrOwogCQkJCWlmIChyeF9mZC0+c3RhdGUyICYgRnJhbWVBYm9ydGVkKSB7Ci0JCQkJCWhkbGNfc3RhdHMoZGV2KS0+cnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJCQlyeF9mZC0+c3RhdGUxIHw9IEhvbGQ7CiAJCQkJCXJ4X2ZkLT5zdGF0ZTIgPSAweDAwMDAwMDAwOwogCQkJCQlyeF9mZC0+ZW5kID0gY3B1X3RvX2xlMzIoMHhiYWJlZmFjZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwppbmRleCA1NDczNjhlLi43NTRmMDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKQEAgLTg0NSw3ICs4NDUsNiBAQAogCQkgICAgaW50IGxlbiwgaW50IHR4cG9zKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0X3RvX2Rldihwb3J0KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAKIAkvKgogCSAqIEV2ZXJ5dGhpbmcgaXMgbm93IHNldCwganVzdCB0ZWxsIHRoZSBjYXJkIHRvIGdvCkBAIC04NTMsOCArODUyLDggQEAKIAlkYmcoREJHX1RYLCAiZnN0X3R4X2RtYV9jb21wbGV0ZVxuIik7CiAJRlNUX1dSQihjYXJkLCB0eERlc2NyUmluZ1twb3J0LT5pbmRleF1bdHhwb3NdLmJpdHMsCiAJCURNQV9PV04gfCBUWF9TVFAgfCBUWF9FTlApOwotCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnR4X2J5dGVzICs9IGxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIH0KIApAQCAtODc2LDcgKzg3NSw2IEBACiAJCSAgICBpbnQgbGVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcnhwKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0X3RvX2Rldihwb3J0KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAJaW50IHBpOwogCWludCByeF9zdGF0dXM7CiAKQEAgLTg4OCw4ICs4ODYsOCBAQAogCUZTVF9XUkIoY2FyZCwgcnhEZXNjclJpbmdbcGldW3J4cF0uYml0cywgRE1BX09XTik7CiAKIAkvKiBVcGRhdGUgc3RhdHMgKi8KLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBsZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAKIAkvKiBQdXNoIHVwc3RyZWFtICovCiAJZGJnKERCR19SWCwgIlB1c2hpbmcgdGhlIGZyYW1lIHVwIHRoZSBzdGFja1xuIik7CkBAIC05MDAsNyArODk4LDcgQEAKIAlyeF9zdGF0dXMgPSBuZXRpZl9yeChza2IpOwogCWZzdF9wcm9jZXNzX3J4X3N0YXR1cyhyeF9zdGF0dXMsIHBvcnRfdG9fZGV2KHBvcnQpLT5uYW1lKTsKIAlpZiAocnhfc3RhdHVzID09IE5FVF9SWF9EUk9QKQotCQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCkBAIC0xMTYzLDI5ICsxMTYxLDI4IEBACiAJCSB1bnNpZ25lZCBjaGFyIGRtYWJpdHMsIGludCByeHAsIHVuc2lnbmVkIHNob3J0IGxlbikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydF90b19kZXYocG9ydCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhkZXYpOwogCi0JLyogCisJLyoKIAkgKiBJbmNyZW1lbnQgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvdW50ZXIKIAkgKi8KLQlzdGF0cy0+cnhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAlpZiAoZG1hYml0cyAmIFJYX09GTE8pIHsKLQkJc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJZGJnKERCR19BU1MsICJSeCBmaWZvIGVycm9yIG9uIGNhcmQgJWQgcG9ydCAlZCBidWZmZXIgJWRcbiIsCiAJCSAgICBjYXJkLT5jYXJkX25vLCBwb3J0LT5pbmRleCwgcnhwKTsKIAl9CiAJaWYgKGRtYWJpdHMgJiBSWF9DUkMpIHsKLQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCWRiZyhEQkdfQVNTLCAiUnggY3JjIGVycm9yIG9uIGNhcmQgJWQgcG9ydCAlZFxuIiwKIAkJICAgIGNhcmQtPmNhcmRfbm8sIHBvcnQtPmluZGV4KTsKIAl9CiAJaWYgKGRtYWJpdHMgJiBSWF9GUkFNKSB7Ci0JCXN0YXRzLT5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJZGJnKERCR19BU1MsICJSeCBmcmFtZSBlcnJvciBvbiBjYXJkICVkIHBvcnQgJWRcbiIsCiAJCSAgICBjYXJkLT5jYXJkX25vLCBwb3J0LT5pbmRleCk7CiAJfQogCWlmIChkbWFiaXRzID09IChSWF9TVFAgfCBSWF9FTlApKSB7Ci0JCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQlkYmcoREJHX0FTUywgIlJ4IGxlbmd0aCBlcnJvciAoJWQpIG9uIGNhcmQgJWQgcG9ydCAlZFxuIiwKIAkJICAgIGxlbiwgY2FyZC0+Y2FyZF9ubywgcG9ydC0+aW5kZXgpOwogCX0KQEAgLTEyNDIsNyArMTIzOSw2IEBACiAJdW5zaWduZWQgc2hvcnQgbGVuOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvcnRfdG9fZGV2KHBvcnQpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMoZGV2KTsKIAogCS8qIENoZWNrIHdlIGhhdmUgYSBidWZmZXIgdG8gcHJvY2VzcyAqLwogCXBpID0gcG9ydC0+aW5kZXg7CkBAIC0xMjkxLDcgKzEyODcsNyBAQAogCWlmICgoc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pKSA9PSBOVUxMKSB7CiAJCWRiZyhEQkdfUlgsICJpbnRyX3J4OiBjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOwogCi0JCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCiAJCS8qIFJldHVybiBkZXNjcmlwdG9yIHRvIGNhcmQgKi8KIAkJRlNUX1dSQihjYXJkLCByeERlc2NyUmluZ1twaV1bcnhwXS5iaXRzLCBETUFfT1dOKTsKQEAgLTEzMTYsOCArMTMxMiw4IEBACiAJCUZTVF9XUkIoY2FyZCwgcnhEZXNjclJpbmdbcGldW3J4cF0uYml0cywgRE1BX09XTik7CiAKIAkJLyogVXBkYXRlIHN0YXRzICovCi0JCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0JCXN0YXRzLT5yeF9ieXRlcyArPSBsZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAogCQkvKiBQdXNoIHVwc3RyZWFtICovCiAJCWRiZyhEQkdfUlgsICJQdXNoaW5nIGZyYW1lIHVwIHRoZSBzdGFja1xuIik7CkBAIC0xMzI3LDkgKzEzMjMsOCBAQAogCQkJc2tiLT5wcm90b2NvbCA9IGhkbGNfdHlwZV90cmFucyhza2IsIGRldik7CiAJCXJ4X3N0YXR1cyA9IG5ldGlmX3J4KHNrYik7CiAJCWZzdF9wcm9jZXNzX3J4X3N0YXR1cyhyeF9zdGF0dXMsIHBvcnRfdG9fZGV2KHBvcnQpLT5uYW1lKTsKLQkJaWYgKHJ4X3N0YXR1cyA9PSBORVRfUlhfRFJPUCkgewotCQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKLQkJfQorCQlpZiAocnhfc3RhdHVzID09IE5FVF9SWF9EUk9QKQorCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJfSBlbHNlIHsKIAkJY2FyZC0+ZG1hX3NrYl9yeCA9IHNrYjsKQEAgLTEzNjEsNyArMTM1Niw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCiAJLyoKIAkgKiAgRmluZCBhIGZyZWUgYnVmZmVyIGZvciB0aGUgdHJhbnNtaXQKQEAgLTEzNzMsMTIgKzEzNjcsMTAgQEAKIAkJaWYgKCFwb3J0LT5ydW4pCiAJCQljb250aW51ZTsKIAotICAgICAgICAgICAgICAgIGRldiA9IHBvcnRfdG9fZGV2KHBvcnQpOwotICAgICAgICAgICAgICAgIHN0YXRzID0gaGRsY19zdGF0cyhkZXYpOwotCQl3aGlsZSAoIQotCQkgICAgICAgKEZTVF9SREIoY2FyZCwgdHhEZXNjclJpbmdbcGldW3BvcnQtPnR4cG9zXS5iaXRzKSAmCi0JCQlETUFfT1dOKQotICAgICAgICAgICAgICAgICAgICAgICAmJiAhKGNhcmQtPmRtYXR4X2luX3Byb2dyZXNzKSkgeworCQlkZXYgPSBwb3J0X3RvX2Rldihwb3J0KTsKKwkJd2hpbGUgKCEoRlNUX1JEQihjYXJkLCB0eERlc2NyUmluZ1twaV1bcG9ydC0+dHhwb3NdLmJpdHMpICYKKwkJCSBETUFfT1dOKQorCQkgICAgICAgJiYgIShjYXJkLT5kbWF0eF9pbl9wcm9ncmVzcykpIHsKIAkJCS8qCiAJCQkgKiBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSB0eGRvbmUgZXZlbnQgcGVyLXNlCiAJCQkgKiBXZSBzZWVtIHRvIGhhdmUgdG8gZGVkdWNlIGl0LCBieSBjaGVja2luZyB0aGUgRE1BX09XTgpAQCAtMTQyMiw4ICsxNDE0LDggQEAKIAkJCQkJCXR4RGVzY3JSaW5nW3BpXVtwb3J0LT50eHBvc10uCiAJCQkJCQliaXRzLAogCQkJCQkJRE1BX09XTiB8IFRYX1NUUCB8IFRYX0VOUCk7Ci0JCQkJCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0JCQkJCXN0YXRzLT50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCQkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIE9yIGRvIGl0IHRocm91Z2ggZG1hICovCkBAIC0xNjI4LDggKzE2MjAsOCBAQAogCQkJICogYWx3YXlzIGxvYWQgdXAgdGhlIGVudGlyZSBwYWNrZXQgZm9yIERNQS4KIAkJCSAqLwogCQkJZGJnKERCR19UWCwgIlR4IHVuZGVyZmxvdyBwb3J0ICVkXG4iLCBwb3J0LT5pbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZGxjX3N0YXRzKHBvcnRfdG9fZGV2KHBvcnQpKS0+dHhfZXJyb3JzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZGxjX3N0YXRzKHBvcnRfdG9fZGV2KHBvcnQpKS0+dHhfZmlmb19lcnJvcnMrKzsKKwkJCXBvcnRfdG9fZGV2KHBvcnQpLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCXBvcnRfdG9fZGV2KHBvcnQpLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJZGJnKERCR19BU1MsICJUeCB1bmRlcmZsb3cgb24gY2FyZCAlZCBwb3J0ICVkXG4iLAogCQkJICAgIGNhcmQtPmNhcmRfbm8sIHBvcnQtPmluZGV4KTsKIAkJCWJyZWFrOwpAQCAtMjI5MiwxMiArMjI4NCwxMSBAQAogewogCXN0cnVjdCBmc3RfcG9ydF9pbmZvICpwb3J0OwogCXN0cnVjdCBmc3RfY2FyZF9pbmZvICpjYXJkOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMoZGV2KTsKIAogCXBvcnQgPSBkZXZfdG9fcG9ydChkZXYpOwogCWNhcmQgPSBwb3J0LT5jYXJkOwotCXN0YXRzLT50eF9lcnJvcnMrKzsKLQlzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAlkYmcoREJHX0FTUywgIlR4IHRpbWVvdXQgY2FyZCAlZCBwb3J0ICVkXG4iLAogCSAgICBjYXJkLT5jYXJkX25vLCBwb3J0LT5pbmRleCk7CiAJZnN0X2lzc3VlX2NtZChwb3J0LCBBQk9SVFRYKTsKQEAgLTIzMTIsNyArMjMwMyw2IEBACiB7CiAJc3RydWN0IGZzdF9jYXJkX2luZm8gKmNhcmQ7CiAJc3RydWN0IGZzdF9wb3J0X2luZm8gKnBvcnQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHR4cV9sZW5ndGg7CiAKQEAgLTIzMjMsOCArMjMxMyw4IEBACiAJLyogRHJvcCBwYWNrZXQgd2l0aCBlcnJvciBpZiB3ZSBkb24ndCBoYXZlIGNhcnJpZXIgKi8KIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJZGJnKERCR19BU1MsCiAJCSAgICAiVHJpZWQgdG8gdHJhbnNtaXQgYnV0IG5vIGNhcnJpZXIgb24gY2FyZCAlZCBwb3J0ICVkXG4iLAogCQkgICAgY2FyZC0+Y2FyZF9ubywgcG9ydC0+aW5kZXgpOwpAQCAtMjMzNiw3ICsyMzI2LDcgQEAKIAkJZGJnKERCR19BU1MsICJQYWNrZXQgdG9vIGxhcmdlICVkIHZzICVkXG4iLCBza2ItPmxlbiwKIAkJICAgIExFTl9UWF9CVUZGRVIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXN0YXRzLT50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMzY4LDcgKzIzNTgsNyBAQAogCQkgKiBUaGlzIHNob3VsZG4ndCBoYXZlIGhhcHBlbmVkIGJ1dCBzdWNoIGlzIGxpZmUKIAkJICovCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJc3RhdHMtPnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlkYmcoREJHX0FTUywgIlR4IHF1ZXVlIG92ZXJmbG93IGNhcmQgJWQgcG9ydCAlZFxuIiwKIAkJICAgIGNhcmQtPmNhcmRfbm8sIHBvcnQtPmluZGV4KTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGQ2NDU3eC5jIGIvZHJpdmVycy9uZXQvd2FuL2hkNjQ1N3guYwppbmRleCA4ZDBhMWYyLi41OTFmYjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGQ2NDU3eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTd4LmMKQEAgLTI3MSw5ICsyNzEsOSBAQAogCXNjYV9vdXQoc3RhdCAmIChTVDFfVURSTiB8IFNUMV9DRENEKSwgbXNjaSArIFNUMSwgY2FyZCk7CiAKIAlpZiAoc3RhdCAmIFNUMV9VRFJOKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMocG9ydF90b19kZXYocG9ydCkpOwotCQlzdGF0cy0+dHhfZXJyb3JzKys7IC8qIFRYIFVuZGVycnVuIGVycm9yIGRldGVjdGVkICovCi0JCXN0YXRzLT50eF9maWZvX2Vycm9ycysrOworCQkvKiBUWCBVbmRlcnJ1biBlcnJvciBkZXRlY3RlZCAqLworCQlwb3J0X3RvX2Rldihwb3J0KS0+c3RhdHMudHhfZXJyb3JzKys7CisJCXBvcnRfdG9fZGV2KHBvcnQpLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCX0KIAogCWlmIChzdGF0ICYgU1QxX0NEQ0QpCkBAIC0yODYsNyArMjg2LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY2FfcngoY2FyZF90ICpjYXJkLCBwb3J0X3QgKnBvcnQsIHBrdF9kZXNjIF9faW9tZW0gKmRlc2MsIHUxNiByeGluKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0X3RvX2Rldihwb3J0KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MTYgbGVuOwogCXUzMiBidWZmOwpAQCAtMjk4LDcgKzI5Nyw3IEBACiAJbGVuID0gcmVhZHcoJmRlc2MtPmxlbik7CiAJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwogCWlmICghc2tiKSB7Ci0JCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMjcsOCArMzI2LDggQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMgUlgoJWkpOiIsIGRldi0+bmFtZSwgc2tiLT5sZW4pOwogCWRlYnVnX2ZyYW1lKHNrYik7CiAjZW5kaWYKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJc2tiLT5wcm90b2NvbCA9IGhkbGNfdHlwZV90cmFucyhza2IsIGRldik7CiAJbmV0aWZfcngoc2tiKTsKQEAgLTMzOSwxNyArMzM4LDE4IEBACiAvKiBSZWNlaXZlIERNQSBpbnRlcnJ1cHQgc2VydmljZSAqLwogc3RhdGljIGlubGluZSB2b2lkIHNjYV9yeF9pbnRyKHBvcnRfdCAqcG9ydCkKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydF90b19kZXYocG9ydCk7CiAJdTE2IGRtYWMgPSBnZXRfZG1hY19yeChwb3J0KTsKIAljYXJkX3QgKmNhcmQgPSBwb3J0X3RvX2NhcmQocG9ydCk7CiAJdTggc3RhdCA9IHNjYV9pbihEU1JfUlgocGh5X25vZGUocG9ydCkpLCBjYXJkKTsgLyogcmVhZCBETUEgU3RhdHVzICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhwb3J0X3RvX2Rldihwb3J0KSk7CiAKIAkvKiBSZXNldCBEU1Igc3RhdHVzIGJpdHMgKi8KIAlzY2Ffb3V0KChzdGF0ICYgKERTUl9FT1QgfCBEU1JfRU9NIHwgRFNSX0JPRiB8IERTUl9DT0YpKSB8IERTUl9EV0UsCiAJCURTUl9SWChwaHlfbm9kZShwb3J0KSksIGNhcmQpOwogCiAJaWYgKHN0YXQgJiBEU1JfQk9GKQotCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMrKzsgLyogRHJvcHBlZCBvbmUgb3IgbW9yZSBmcmFtZXMgKi8KKwkJLyogRHJvcHBlZCBvbmUgb3IgbW9yZSBmcmFtZXMgKi8KKwkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCiAJd2hpbGUgKDEpIHsKIAkJdTMyIGRlc2Nfb2ZmID0gZGVzY19vZmZzZXQocG9ydCwgcG9ydC0+cnhpbiwgMCk7CkBAIC0zNjQsMTIgKzM2NCwxNCBAQAogCQlpZiAoIShzdGF0ICYgU1RfUlhfRU9NKSkKIAkJCXBvcnQtPnJ4cGFydCA9IDE7IC8qIHBhcnRpYWwgZnJhbWUgcmVjZWl2ZWQgKi8KIAkJZWxzZSBpZiAoKHN0YXQgJiBTVF9FUlJPUl9NQVNLKSB8fCBwb3J0LT5yeHBhcnQpIHsKLQkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKLQkJCWlmIChzdGF0ICYgU1RfUlhfT1ZFUlJVTikgc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJaWYgKHN0YXQgJiBTVF9SWF9PVkVSUlVOKQorCQkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCWVsc2UgaWYgKChzdGF0ICYgKFNUX1JYX1NIT1JUIHwgU1RfUlhfQUJPUlQgfAogCQkJCQkgIFNUX1JYX1JFU0JJVCkpIHx8IHBvcnQtPnJ4cGFydCkKLQkJCQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzKys7Ci0JCQllbHNlIGlmIChzdGF0ICYgU1RfUlhfQ1JDKSBzdGF0cy0+cnhfY3JjX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQllbHNlIGlmIChzdGF0ICYgU1RfUlhfQ1JDKQorCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJaWYgKHN0YXQgJiBTVF9SWF9FT00pCiAJCQkJcG9ydC0+cnhwYXJ0ID0gMDsgLyogcmVjZWl2ZWQgbGFzdCBmcmFnbWVudCAqLwogCQl9IGVsc2UKQEAgLTM5MCw3ICszOTIsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIHNjYV90eF9pbnRyKHBvcnRfdCAqcG9ydCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydF90b19kZXYocG9ydCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhkZXYpOwogCXUxNiBkbWFjID0gZ2V0X2RtYWNfdHgocG9ydCk7CiAJY2FyZF90KiBjYXJkID0gcG9ydF90b19jYXJkKHBvcnQpOwogCXU4IHN0YXQ7CkBAIC00MTIsOCArNDEzLDggQEAKIAkJCWJyZWFrOwkvKiBUcmFuc21pdHRlciBpcy93aWxsX2JlIHNlbmRpbmcgdGhpcyBmcmFtZSAqLwogCiAJCWRlc2MgPSBkZXNjX2FkZHJlc3MocG9ydCwgcG9ydC0+dHhsYXN0LCAxKTsKLQkJc3RhdHMtPnR4X3BhY2tldHMrKzsKLQkJc3RhdHMtPnR4X2J5dGVzICs9IHJlYWR3KCZkZXNjLT5sZW4pOworCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSByZWFkdygmZGVzYy0+bGVuKTsKIAkJd3JpdGViKDAsICZkZXNjLT5zdGF0KTsJLyogRnJlZSBkZXNjcmlwdG9yICovCiAJCXBvcnQtPnR4bGFzdCA9IG5leHRfZGVzYyhwb3J0LCBwb3J0LT50eGxhc3QsIDEpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCmluZGV4IDdmOTg0ODkuLmUzYTUzNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuYwpAQCAtNTcsNyArNTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmhkbGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGhkbGNfc3RhdHMoZGV2KTsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKaW5kZXggNzYyZDIxYy4uODQ5ODE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCkBAIC0yNTIsOCArMjUyLDggQEAKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCXJldHVybiBORVRfUlhfRFJPUDsKIAotIHJ4X2Vycm9yOgotCWRldl90b19oZGxjKGRldiktPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBNYXJrIGVycm9yICovCityeF9lcnJvcjoKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBNYXJrIGVycm9yICovCiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYwppbmRleCA2ZDM1MTU1Li42MmU5M2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKQEAgLTEzNSwxMSArMTM1LDYgQEAKIAl9c3RhdGU7CiB9cHZjX2RldmljZTsKIAotc3RydWN0IHB2Y19kZXNjIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQlwdmNfZGV2aWNlICpwdmM7Ci19OwotCiBzdHJ1Y3QgZnJhZF9zdGF0ZSB7CiAJZnJfcHJvdG8gc2V0dGluZ3M7CiAJcHZjX2RldmljZSAqZmlyc3RfcHZjOwpAQCAtMTc5LDE1ICsxNzQsNiBAQAogCXJldHVybihzdHJ1Y3QgZnJhZF9zdGF0ZSAqKShoZGxjLT5zdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHB2Y19kZXNjKiBwdmNkZXZfdG9fZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiBkZXYtPnByaXY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIHB2Y19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJnB2Y2Rldl90b19kZXNjKGRldiktPnN0YXRzOwotfQogCiBzdGF0aWMgaW5saW5lIHB2Y19kZXZpY2UqIGZpbmRfcHZjKGhkbGNfZGV2aWNlICpoZGxjLCB1MTYgZGxjaSkKIHsKQEAgLTM1Nyw3ICszNDMsNyBAQAogCiBzdGF0aWMgaW50IHB2Y19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcHZjX2RldmljZSAqcHZjID0gcHZjZGV2X3RvX2Rlc2MoZGV2KS0+cHZjOworCXB2Y19kZXZpY2UgKnB2YyA9IGRldi0+cHJpdjsKIAogCWlmICgocHZjLT5mcmFkLT5mbGFncyAmIElGRl9VUCkgPT0gMCkKIAkJcmV0dXJuIC1FSU87ICAvKiBGcmFkIG11c3QgYmUgVVAgaW4gb3JkZXIgdG8gYWN0aXZhdGUgUFZDICovCkBAIC0zNzcsNyArMzYzLDcgQEAKIAogc3RhdGljIGludCBwdmNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlwdmNfZGV2aWNlICpwdmMgPSBwdmNkZXZfdG9fZGVzYyhkZXYpLT5wdmM7CisJcHZjX2RldmljZSAqcHZjID0gZGV2LT5wcml2OwogCiAJaWYgKC0tcHZjLT5vcGVuX2NvdW50ID09IDApIHsKIAkJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhwdmMtPmZyYWQpOwpAQCAtMzk2LDcgKzM4Miw3IEBACiAKIHN0YXRpYyBpbnQgcHZjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewotCXB2Y19kZXZpY2UgKnB2YyA9IHB2Y2Rldl90b19kZXNjKGRldiktPnB2YzsKKwlwdmNfZGV2aWNlICpwdmMgPSBkZXYtPnByaXY7CiAJZnJfcHJvdG9fcHZjX2luZm8gaW5mbzsKIAogCWlmIChpZnItPmlmcl9zZXR0aW5ncy50eXBlID09IElGX0dFVF9QUk9UTykgewpAQCAtNDI0LDggKzQxMCw3IEBACiAKIHN0YXRpYyBpbnQgcHZjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlwdmNfZGV2aWNlICpwdmMgPSBwdmNkZXZfdG9fZGVzYyhkZXYpLT5wdmM7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gcHZjX2dldF9zdGF0cyhkZXYpOworCXB2Y19kZXZpY2UgKnB2YyA9IGRldi0+cHJpdjsKIAogCWlmIChwdmMtPnN0YXRlLmFjdGl2ZSkgewogCQlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewpAQCAtNDM1LDcgKzQyMCw3IEBACiAJCQkJaWYgKHNrYl90YWlscm9vbShza2IpIDwgcGFkKQogCQkJCQlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIHBhZCwKIAkJCQkJCQkgICAgIEdGUF9BVE9NSUMpKSB7Ci0JCQkJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQkJCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQkJCQlyZXR1cm4gMDsKIAkJCQkJfQpAQCAtNDQ1LDE3ICs0MzAsMTcgQEAKIAkJCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8zKTsKIAkJfQogCQlpZiAoIWZyX2hhcmRfaGVhZGVyKCZza2IsIHB2Yy0+ZGxjaSkpIHsKLQkJCXN0YXRzLT50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJCXN0YXRzLT50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQlpZiAocHZjLT5zdGF0ZS5mZWNuKSAvKiBUWCBDb25nZXN0aW9uIGNvdW50ZXIgKi8KLQkJCQlzdGF0cy0+dHhfY29tcHJlc3NlZCsrOworCQkJCWRldi0+c3RhdHMudHhfY29tcHJlc3NlZCsrOwogCQkJc2tiLT5kZXYgPSBwdmMtPmZyYWQ7CiAJCQlkZXZfcXVldWVfeG1pdChza2IpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTk1NSw3ICs5NDAsNyBAQAogCiAKIAlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7Ci0JCWRldl90b19oZGxjKGZyYWQpLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWZyYWQtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCX0KIApAQCAtMTAwMywxMSArOTg4LDEwIEBACiAJfQogCiAJaWYgKGRldikgewotCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBwdmNfZ2V0X3N0YXRzKGRldik7Ci0JCXN0YXRzLT5yeF9wYWNrZXRzKys7IC8qIFBWQyB0cmFmZmljICovCi0JCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7IC8qIFBWQyB0cmFmZmljICovCisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCWlmIChwdmMtPnN0YXRlLmJlY24pCi0JCQlzdGF0cy0+cnhfY29tcHJlc3NlZCsrOworCQkJZGV2LT5zdGF0cy5yeF9jb21wcmVzc2VkKys7CiAJCXNrYi0+ZGV2ID0gZGV2OwogCQluZXRpZl9yeChza2IpOwogCQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CkBAIC0xMDE3LDcgKzEwMDEsNyBAQAogCX0KIAogIHJ4X2Vycm9yOgotCWRldl90b19oZGxjKGZyYWQpLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogTWFyayBlcnJvciAqLworCWZyYWQtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBNYXJrIGVycm9yICovCiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CkBAIC0xMDg4LDcgKzEwNzIsNyBAQAogc3RhdGljIGludCBmcl9hZGRfcHZjKHN0cnVjdCBuZXRfZGV2aWNlICpmcmFkLCB1bnNpZ25lZCBpbnQgZGxjaSwgaW50IHR5cGUpCiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhmcmFkKTsKLQlwdmNfZGV2aWNlICpwdmMgPSBOVUxMOworCXB2Y19kZXZpY2UgKnB2YzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCByZXN1bHQsIHVzZWQ7CiAKQEAgLTExMDQsMTAgKzEwODgsOSBAQAogCXVzZWQgPSBwdmNfaXNfdXNlZChwdmMpOwogCiAJaWYgKHR5cGUgPT0gQVJQSFJEX0VUSEVSKQotCQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwdmNfZGVzYyksICJwdmNldGglZCIsCi0JCQkJICAgZXRoZXJfc2V0dXApOworCQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgInB2Y2V0aCVkIiwgZXRoZXJfc2V0dXApOwogCWVsc2UKLQkJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHZjX2Rlc2MpLCAicHZjJWQiLCBwdmNfc2V0dXApOworCQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgInB2YyVkIiwgcHZjX3NldHVwKTsKIAogCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNZW1vcnkgc3F1ZWV6ZSBvbiBmcl9wdmMoKVxuIiwKQEAgLTExMjMsMTQgKzExMDYsMTMgQEAKIAkJZGxjaV90b19xOTIyKGRldi0+YnJvYWRjYXN0LCBkbGNpKTsKIAl9CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBwdmNfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9IHB2Y19nZXRfc3RhdHM7CiAJZGV2LT5vcGVuID0gcHZjX29wZW47CiAJZGV2LT5zdG9wID0gcHZjX2Nsb3NlOwogCWRldi0+ZG9faW9jdGwgPSBwdmNfaW9jdGw7CiAJZGV2LT5jaGFuZ2VfbXR1ID0gcHZjX2NoYW5nZV9tdHU7CiAJZGV2LT5tdHUgPSBIRExDX01BWF9NVFU7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwotCXB2Y2Rldl90b19kZXNjKGRldiktPnB2YyA9IHB2YzsKKwlkZXYtPnByaXYgPSBwdmM7CiAKIAlyZXN1bHQgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7CiAJaWYgKHJlc3VsdCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYwppbmRleCBkMjBjNjg1Li4yNmRlZTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jCkBAIC0zMyw3ICszMyw3IEBACiAJCWludCBsZW4gPSBza2ItPmxlbjsKIAkJaWYgKHNrYl90YWlscm9vbShza2IpIDwgcGFkKQogCQkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBwYWQsIEdGUF9BVE9NSUMpKSB7Ci0JCQkJaGRsY19zdGF0cyhkZXYpLT50eF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCXJldHVybiAwOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwppbmRleCBjMTVjYzExLi5lODA4NzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwpAQCAtMTY0LDE3ICsxNjQsMTUgQEAKIAogc3RhdGljIGludCB4MjVfcngoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhza2ItPmRldik7Ci0KIAlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7Ci0JCWhkbGMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJc2tiLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCX0KIAogCWlmIChsYXBiX2RhdGFfcmVjZWl2ZWQoc2tiLT5kZXYsIHNrYikgPT0gTEFQQl9PSykKIAkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCi0JaGRsYy0+c3RhdHMucnhfZXJyb3JzKys7CisJc2tiLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCmluZGV4IDU3OTE0ZmIuLjMzNDE3MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYworKysgYi9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKQEAgLTI4NSw3ICsyODUsNiBAQAogc3RhdGljIHZvaWQgdHhfZG1hX2J1Zl9jaGVjayhwYzMwMF90ICosIGludCk7CiBzdGF0aWMgdm9pZCByeF9kbWFfYnVmX2NoZWNrKHBjMzAwX3QgKiwgaW50KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBjcGNfaW50cihpbnQsIHZvaWQgKik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNwY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGNsb2NrX3JhdGVfY2FsYyh1Y2xvbmcsIHVjbG9uZywgaW50ICopOwogc3RhdGljIHVjbG9uZyBkZXRlY3RfcmFtKHBjMzAwX3QgKik7CiBzdGF0aWMgdm9pZCBwbHhfaW5pdChwYzMwMF90ICopOwpAQCAtMTc3NSwxMyArMTc3NCwxMiBAQAogCXBjMzAwZGV2X3QgKmQgPSAocGMzMDBkZXZfdCAqKSBkZXYtPnByaXY7CiAJcGMzMDBjaF90ICpjaGFuID0gKHBjMzAwY2hfdCAqKSBkLT5jaGFuOwogCXBjMzAwX3QgKmNhcmQgPSAocGMzMDBfdCAqKSBjaGFuLT5jYXJkOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGhkbGNfc3RhdHMoZGV2KTsKIAlpbnQgY2ggPSBjaGFuLT5jaGFubmVsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdWNjaGFyIGlsYXI7CiAKLQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0Jc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJQ1BDX0xPQ0soY2FyZCwgZmxhZ3MpOwogCWlmICgoaWxhciA9IGNwY19yZWFkYihjYXJkLT5ody5zY2FiYXNlICsgSUxBUikpICE9IDApIHsKIAkJcHJpbnRrKCIlczogSUxBUj0weCV4XG4iLCBkZXYtPm5hbWUsIGlsYXIpOwpAQCAtMTgwMyw3ICsxODAxLDYgQEAKIAlwYzMwMGRldl90ICpkID0gKHBjMzAwZGV2X3QgKikgZGV2LT5wcml2OwogCXBjMzAwY2hfdCAqY2hhbiA9IChwYzMwMGNoX3QgKikgZC0+Y2hhbjsKIAlwYzMwMF90ICpjYXJkID0gKHBjMzAwX3QgKikgY2hhbi0+Y2FyZDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAJaW50IGNoID0gY2hhbi0+Y2hhbm5lbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2lmZGVmIFBDMzAwX0RFQlVHX1RYCkBAIC0xODE3LDEzICsxODE0LDEzIEBACiAJfSBlbHNlIGlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCS8qIERDRCBtdXN0IGJlIE9GRjogZHJvcCBwYWNrZXQgKi8KIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0JCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoY3BjX3JlYWRiKGNhcmQtPmh3LnNjYWJhc2UgKyBNX1JFRyhTVDMsIGNoKSkgJiBTVDNfRENEKSB7CiAJCXByaW50aygiJXM6IERDRCBpcyBPRkYuIEdvaW5nIGFkbWluaXN0cmF0aXZlIGRvd24uXG4iLCBkZXYtPm5hbWUpOwotCQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0JCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAkJQ1BDX0xPQ0soY2FyZCwgZmxhZ3MpOwpAQCAtMTg0Myw4ICsxODQwLDggQEAKIC8vCQlwcmludGsoIiVzOiB3cml0ZSBlcnJvci4gRHJvcHBpbmcgVFggcGFja2V0LlxuIiwgZGV2LT5uYW1lKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybiAwOwogCX0KICNpZmRlZiBQQzMwMF9ERUJVR19UWApAQCAtMTg4Niw3ICsxODgzLDYgQEAKIAlwYzMwMGRldl90ICpkID0gKHBjMzAwZGV2X3QgKikgZGV2LT5wcml2OwogCXBjMzAwY2hfdCAqY2hhbiA9IChwYzMwMGNoX3QgKikgZC0+Y2hhbjsKIAlwYzMwMF90ICpjYXJkID0gKHBjMzAwX3QgKikgY2hhbi0+Y2FyZDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAJaW50IGNoID0gY2hhbi0+Y2hhbm5lbDsKICNpZmRlZiBQQzMwMF9ERUJVR19SWAogCWludCBpOwpAQCAtMTkyMiwyNCArMTkxOCwyNCBAQAogI2VuZGlmCiAJCQlpZiAoKHNrYiA9PSBOVUxMKSAmJiAocnhiID4gMCkpIHsKIAkJCQkvKiByeGIgPiBkZXYtPm10dSAqLwotCQkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKLQkJCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJY29udGludWU7CiAJCQl9CiAKIAkJCWlmIChyeGIgPCAwKSB7CS8qIEludmFsaWQgZnJhbWUgKi8KIAkJCQlyeGIgPSAtcnhiOwogCQkJCWlmIChyeGIgJiBEU1RfT1ZSKSB7Ci0JCQkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKLQkJCQkJc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCQl9CiAJCQkJaWYgKHJ4YiAmIERTVF9DUkMpIHsKLQkJCQkJc3RhdHMtPnJ4X2Vycm9ycysrOwotCQkJCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCQl9CiAJCQkJaWYgKHJ4YiAmIChEU1RfUkJJVCB8IERTVF9TSFJUIHwgRFNUX0FCVCkpIHsKLQkJCQkJc3RhdHMtPnJ4X2Vycm9ycysrOwotCQkJCQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCQkJfQogCQkJfQogCQkJaWYgKHNrYikgewpAQCAtMTk0OCw3ICsxOTQ0LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJc3RhdHMtPnJ4X2J5dGVzICs9IHJ4YjsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSByeGI7CiAKICNpZmRlZiBQQzMwMF9ERUJVR19SWAogCQlwcmludGsoIiVzIFI6IiwgZGV2LT5uYW1lKTsKQEAgLTE5NTksNyArMTk1NSw3IEBACiAJCWlmIChkLT50cmFjZV9vbikgewogCQkJY3BjX3RyYWNlKGRldiwgc2tiLCAnUicpOwogCQl9Ci0JCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQlza2ItPnByb3RvY29sID0gaGRsY190eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CkBAIC0xOTc0LDE2ICsxOTcwLDE1IEBACiAJcGMzMDBfdCAqY2FyZCA9IChwYzMwMF90ICopY2hhbi0+Y2FyZDsgCiAJaW50IGNoID0gY2hhbi0+Y2hhbm5lbDsgCiAJdm9sYXRpbGUgcGNzY2FfYmRfdCBfX2lvbWVtICogcHRkZXNjcjsgCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gaGRsY19zdGF0cyhkZXYtPmRldik7CiAKICAgICAvKiBDbGVhbiB1cCBkZXNjcmlwdG9ycyBmcm9tIHByZXZpb3VzIHRyYW5zbWlzc2lvbiAqLwogCXB0ZGVzY3IgPSAoY2FyZC0+aHcucmFtYmFzZSArCiAJCQkJCQlUWF9CRF9BRERSKGNoLGNoYW4tPnR4X2ZpcnN0X2JkKSk7Ci0Jd2hpbGUgKChjcGNfcmVhZGwoY2FyZC0+aHcuc2NhYmFzZSArIERUWF9SRUcoQ0RBTCxjaCkpICE9IAotCQkJCQkJCVRYX0JEX0FERFIoY2gsY2hhbi0+dHhfZmlyc3RfYmQpKSAmJiAKLQkJCShjcGNfcmVhZGIoJnB0ZGVzY3ItPnN0YXR1cykgJiBEU1RfT1NCKSkgewotCQlzdGF0cy0+dHhfcGFja2V0cysrOwotCQlzdGF0cy0+dHhfYnl0ZXMgKz0gY3BjX3JlYWR3KCZwdGRlc2NyLT5sZW4pOworCXdoaWxlICgoY3BjX3JlYWRsKGNhcmQtPmh3LnNjYWJhc2UgKyBEVFhfUkVHKENEQUwsY2gpKSAhPQorCQlUWF9CRF9BRERSKGNoLGNoYW4tPnR4X2ZpcnN0X2JkKSkgJiYKKwkgICAgICAgKGNwY19yZWFkYigmcHRkZXNjci0+c3RhdHVzKSAmIERTVF9PU0IpKSB7CisJCWRldi0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWRldi0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBjcGNfcmVhZHcoJnB0ZGVzY3ItPmxlbik7CiAJCWNwY193cml0ZWIoJnB0ZGVzY3ItPnN0YXR1cywgRFNUX09TQik7CiAJCWNwY193cml0ZXcoJnB0ZGVzY3ItPmxlbiwgMCk7CiAJCWNoYW4tPm5mcmVlX3R4X2JkKys7CkBAIC0yMDQ4LDggKzIwNDMsOCBAQAogCQkJCQkJCX0KIAkJCQkJCQljcGNfbmV0X3J4KGRldik7CiAJCQkJCQkJLyogRGlzY2FyZCBpbnZhbGlkIGZyYW1lcyAqLwotCQkJCQkJCWhkbGNfc3RhdHMoZGV2KS0+cnhfZXJyb3JzKys7Ci0JCQkJCQkJaGRsY19zdGF0cyhkZXYpLT5yeF9vdmVyX2Vycm9ycysrOworCQkJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJCQkJCWNoYW4tPnJ4X2ZpcnN0X2JkID0gMDsKIAkJCQkJCQljaGFuLT5yeF9sYXN0X2JkID0gTl9ETUFfUlhfQlVGIC0gMTsKIAkJCQkJCQlyeF9kbWFfc3RhcnQoY2FyZCwgY2gpOwpAQCAtMjExNSw4ICsyMTEwLDggQEAKIAkJCQkJCQkJCQkgICBjYXJkLT5ody5jcGxkX3JlZzIpICYKIAkJCQkJCQkJICAgfiAoQ1BMRF9SRUcyX0ZBTENfTEVEMSA8PCAoMiAqIGNoKSkpOwogCQkJCQkJfQotCQkJCQkJaGRsY19zdGF0cyhkZXYpLT50eF9lcnJvcnMrKzsKLQkJCQkJCWhkbGNfc3RhdHMoZGV2KS0+dHhfZmlmb19lcnJvcnMrKzsKKwkJCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQkJCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQkJCQlzY2FfdHhfaW50cihkKTsKIAkJCQkJfQogCQkJCX0KQEAgLTI2MDQsNyArMjU5OSw3IEBACiAJCWNhc2UgU0lPQ0dQQzMwMFVUSUxTVEFUUzoKIAkJCXsKIAkJCQlpZiAoIWFyZykgewkvKiBjbGVhciBzdGF0aXN0aWNzICovCi0JCQkJCW1lbXNldChoZGxjX3N0YXRzKGRldiksIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCQkJCQltZW1zZXQoJmRldi0+c3RhdHMsIDAsIHNpemVvZihkZXYtPnN0YXRzKSk7CiAJCQkJCWlmIChjYXJkLT5ody50eXBlID09IFBDMzAwX1RFKSB7CiAJCQkJCQltZW1zZXQoJmNoYW4tPmZhbGMsIDAsIHNpemVvZihmYWxjX3QpKTsKIAkJCQkJfQpAQCAtMjYxNSw4ICsyNjEwLDggQEAKIAkJCQkJcGMzMDBzdGF0cy5od190eXBlID0gY2FyZC0+aHcudHlwZTsKIAkJCQkJcGMzMDBzdGF0cy5saW5lX29uID0gY2FyZC0+Y2hhbltjaF0uZC5saW5lX29uOwogCQkJCQlwYzMwMHN0YXRzLmxpbmVfb2ZmID0gY2FyZC0+Y2hhbltjaF0uZC5saW5lX29mZjsKLQkJCQkJbWVtY3B5KCZwYzMwMHN0YXRzLmdlbl9zdGF0cywgaGRsY19zdGF0cyhkZXYpLAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CisJCQkJCW1lbWNweSgmcGMzMDBzdGF0cy5nZW5fc3RhdHMsICZkZXYtPnN0YXRzLAorCQkJCQkgICAgICAgc2l6ZW9mKGRldi0+c3RhdHMpKTsKIAkJCQkJaWYgKGNhcmQtPmh3LnR5cGUgPT0gUEMzMDBfVEUpCiAJCQkJCQltZW1jcHkoJnBjMzAwc3RhdHMudGVfc3RhdHMsJmNoYW4tPmZhbGMsc2l6ZW9mKGZhbGNfdCkpOwogCQkJCSAgICAJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZwYzMwMHN0YXRzLCBzaXplb2YocGMzMDBzdGF0c190KSkpCkBAIC0yODIzLDExICsyODE4LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY3BjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiBoZGxjX3N0YXRzKGRldik7Ci19Ci0KIHN0YXRpYyBpbnQgY2xvY2tfcmF0ZV9jYWxjKHVjbG9uZyByYXRlLCB1Y2xvbmcgY2xvY2ssIGludCAqYnJfaW8pCiB7CiAJaW50IGJyLCB0YzsKQEAgLTMzOTQsNyArMzM4NCw2IEBACiAJCWRldi0+c3RvcCA9IGNwY19jbG9zZTsKIAkJZGV2LT50eF90aW1lb3V0ID0gY3BjX3R4X3RpbWVvdXQ7CiAJCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBQQzMwMF9UWF9USU1FT1VUOwotCQlkZXYtPmdldF9zdGF0cyA9IGNwY19nZXRfc3RhdHM7CiAJCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gTlVMTDsKIAkJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBOVUxMOwogCQlkZXYtPmNoYW5nZV9tdHUgPSBjcGNfY2hhbmdlX210dTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF90dHkuYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF90dHkuYwppbmRleCBlMDNlZWYyLi40NTE4ZDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfdHR5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX3R0eS5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAlDUENfVFRZX0RCRygiJXM6IGNwY190dHlfd3JpdGUgZGF0YSBsZW49JWlcbiIsY3BjX3R0eS0+bmFtZSxjb3VudCk7CiAJCiAJcGMzMDBjaGFuID0gKHBjMzAwY2hfdCAqKSgocGMzMDBkZXZfdCopY3BjX3R0eS0+cGMzMDBkZXYpLT5jaGFuOyAKLQlzdGF0cyA9IGhkbGNfc3RhdHMoKChwYzMwMGRldl90KiljcGNfdHR5LT5wYzMwMGRldiktPmRldik7CisJc3RhdHMgPSAmY3BjX3R0eS0+cGMzMDBkZXYtPmRldi0+c3RhdHM7CiAJY2FyZCA9IChwYzMwMF90ICopIHBjMzAwY2hhbi0+Y2FyZDsKIAljaCA9IHBjMzAwY2hhbi0+Y2hhbm5lbDsgCiAKQEAgLTY4OCw5ICs2ODgsOSBAQAogCQkJCWlmIChjcGNfdHR5LT50dHkpIHsKIAkJCQkJbGQgPSB0dHlfbGRpc2NfcmVmKGNwY190dHktPnR0eSk7CiAJCQkJCWlmIChsZCkgewotCQkJCQkJaWYgKGxkLT5yZWNlaXZlX2J1ZikgeworCQkJCQkJaWYgKGxkLT5vcHMtPnJlY2VpdmVfYnVmKSB7CiAJCQkJCQkJQ1BDX1RUWV9EQkcoIiVzOiBjYWxsIGxpbmUgZGlzYy4gcmVjZWl2ZV9idWZcbiIsY3BjX3R0eS0+bmFtZSk7Ci0JCQkJCQkJbGQtPnJlY2VpdmVfYnVmKGNwY190dHktPnR0eSwgKGNoYXIgKikoYnVmLT5kYXRhKSwgJmZsYWdzLCBidWYtPnNpemUpOworCQkJCQkJCWxkLT5vcHMtPnJlY2VpdmVfYnVmKGNwY190dHktPnR0eSwgKGNoYXIgKikoYnVmLT5kYXRhKSwgJmZsYWdzLCBidWYtPnNpemUpOwogCQkJCQkJfQogCQkJCQkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAkJCQkJfQpAQCAtNzQzLDcgKzc0Myw3IEBACiAJcGMzMDBfdCAqY2FyZCA9IChwYzMwMF90ICopcGMzMDBjaGFuLT5jYXJkOyAKIAlpbnQgY2ggPSBwYzMwMGNoYW4tPmNoYW5uZWw7IAogCXZvbGF0aWxlIHBjc2NhX2JkX3QgIF9faW9tZW0gKiBwdGRlc2NyOyAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKHBjMzAwZGV2LT5kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwYzMwMGRldi0+ZGV2LT5zdGF0czsKIAlpbnQgcnhfbGVuLCByeF9hdXg7IAogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3RhdHVzOyAKIAl1bnNpZ25lZCBzaG9ydCBmaXJzdF9iZCA9IHBjMzAwY2hhbi0+cnhfZmlyc3RfYmQ7CkBAIC05MTcsNyArOTE3LDcgQEAKIAlwYzMwMGNoX3QgKmNoYW4gPSAocGMzMDBjaF90ICopZGV2LT5jaGFuOyAKIAlwYzMwMF90ICpjYXJkID0gKHBjMzAwX3QgKiljaGFuLT5jYXJkOyAKIAlpbnQgY2ggPSBjaGFuLT5jaGFubmVsOyAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldi0+ZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5kZXYtPnN0YXRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7IAogCXZvbGF0aWxlIHBjc2NhX2JkX3QgX19pb21lbSAqcHRkZXNjcjsgCiAJaW50IGksIG5jaGFyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMgYi9kcml2ZXJzL25ldC93YW4vd2FueGwuYwppbmRleCBkNGFhYjhhLi5hOGE1Y2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vd2FueGwuYworKysgYi9kcml2ZXJzL25ldC93YW4vd2FueGwuYwpAQCAtMTYxLDcgKzE2MSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgd2FueGxfdHhfaW50cihwb3J0X3QgKnBvcnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvcnQtPmRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAJd2hpbGUgKDEpIHsKICAgICAgICAgICAgICAgICBkZXNjX3QgKmRlc2MgPSAmZ2V0X3N0YXR1cyhwb3J0KS0+dHhfZGVzY3NbcG9ydC0+dHhfaW5dOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcG9ydC0+dHhfc2tic1twb3J0LT50eF9pbl07CkBAIC0xNzMsMTMgKzE3MiwxMyBAQAogCQkJcmV0dXJuOwogCiAJCWNhc2UgUEFDS0VUX1VOREVSUlVOOgotCQkJc3RhdHMtPnR4X2Vycm9ycysrOwotCQkJc3RhdHMtPnR4X2ZpZm9fZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0JCQlzdGF0cy0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCX0KICAgICAgICAgICAgICAgICBkZXNjLT5zdGF0ID0gUEFDS0VUX0VNUFRZOyAvKiBGcmVlIGRlc2NyaXB0b3IgKi8KIAkJcGNpX3VubWFwX3NpbmdsZShwb3J0LT5jYXJkLT5wZGV2LCBkZXNjLT5hZGRyZXNzLCBza2ItPmxlbiwKQEAgLTIwNSwxMCArMjA0LDkgQEAKIAkJCXBvcnRfdCAqcG9ydCA9ICZjYXJkLT5wb3J0c1tkZXNjLT5zdGF0ICYKIAkJCQkJCSAgICBQQUNLRVRfUE9SVF9NQVNLXTsKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAKIAkJCWlmICghc2tiKQotCQkJCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQllbHNlIHsKIAkJCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBkZXYsIGRlc2MtPmFkZHJlc3MsCiAJCQkJCQkgQlVGRkVSX0xFTkdUSCwKQEAgLTIyMCw4ICsyMTgsOCBAQAogCQkJCSAgICAgICBza2ItPmxlbik7CiAJCQkJZGVidWdfZnJhbWUoc2tiKTsKICNlbmRpZgotCQkJCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0JCQkJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCQlza2ItPnByb3RvY29sID0gaGRsY190eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJCQluZXRpZl9yeChza2IpOwpAQCAtNDY4LDEzICs0NjYsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp3YW54bF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKGRldik7CiAJcG9ydF90ICpwb3J0ID0gZGV2X3RvX3BvcnQoZGV2KTsKIAotCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyA9IGdldF9zdGF0dXMocG9ydCktPnJ4X292ZXJydW5zOwotCXN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPSBnZXRfc3RhdHVzKHBvcnQpLT5yeF9mcmFtZV9lcnJvcnM7Ci0Jc3RhdHMtPnJ4X2Vycm9ycyA9IHN0YXRzLT5yeF9vdmVyX2Vycm9ycyArIHN0YXRzLT5yeF9mcmFtZV9lcnJvcnM7Ci0gICAgICAgIHJldHVybiBzdGF0czsKKwlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzID0gZ2V0X3N0YXR1cyhwb3J0KS0+cnhfb3ZlcnJ1bnM7CisJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSBnZXRfc3RhdHVzKHBvcnQpLT5yeF9mcmFtZV9lcnJvcnM7CisJZGV2LT5zdGF0cy5yeF9lcnJvcnMgPSBkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzICsKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCmluZGV4IDA2OWY4YmIuLjJhNmM3YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwpAQCAtNzU0LDcgKzc1NCw3IEBACiAJZGV2LT5mbGFncwkJPSBJRkZfTk9BUlA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjIHgyNV9sZGlzYyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyB4MjVfbGRpc2MgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5tYWdpYwkJPSBUVFlfTERJU0NfTUFHSUMsCiAJLm5hbWUJCT0gIlguMjUiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggZmRmNWFhOC4uOTFmYzJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC02MzUsMTQgKzYzNSwyMCBAQAogCSAgVGhhbmtzIHRvIFJlYWx0ZWsgZm9yIHRoZWlyIHN1cHBvcnQhCiAKIGNvbmZpZyBSVEw4MTg3Ci0JdHJpc3RhdGUgIlJlYWx0ZWsgODE4NyBVU0Igc3VwcG9ydCIKKwl0cmlzdGF0ZSAiUmVhbHRlayA4MTg3IGFuZCA4MTg3QiBVU0Igc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFVTQiAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBFRVBST01fOTNDWDYKIAktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgZHJpdmVyIGZvciBSVEw4MTg3IGJhc2VkIGNhcmRzLgotCSAgVGhlc2UgYXJlIFVTQiBiYXNlZCBjaGlwcyBmb3VuZCBpbiBjYXJkcyBzdWNoIGFzOgorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgUlRMODE4NyBhbmQgUlRMODE4N0IgYmFzZWQgY2FyZHMuCisJICBUaGVzZSBhcmUgVVNCIGJhc2VkIGNoaXBzIGZvdW5kIGluIGRldmljZXMgc3VjaCBhczoKIAogCSAgTmV0Z2VhciBXRzExMXYyCisJICBMZXZlbCAxIFdOQy0wMzAxVVNCCisJICBNaWNyb25ldCBTUDkwN0dLIFY1CisJICBFbmNvcmUgRU5VV0ktRzIKKwkgIFRyZW5kbmV0IFRFVy00MjRVQgorCSAgQVNVUyBQNUIgRGVsdXhlCisJICBUb3NoaWJhIFNhdGVsbGl0ZSBQcm8gc2VyaWVzIG9mIGxhcHRvcHMKIAogCSAgVGhhbmtzIHRvIFJlYWx0ZWsgZm9yIHRoZWlyIHN1cHBvcnQhCiAKQEAgLTY3Myw2ICs2NzksMTkgQEAKIAogCSAgVGhhbmtzIHRvIEluZmluZW9uLUFETXRlayBmb3IgdGhlaXIgc3VwcG9ydCBvZiB0aGlzIGRyaXZlci4KIAorY29uZmlnIE1BQzgwMjExX0hXU0lNCisJdHJpc3RhdGUgIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExIgorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3QKKwkgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdAorCSAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWUKKwkgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cKKwkgIHRvIHVzZSB0aGlzIHRvb2wuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCAyYzM0M2FhLi41NGE0ZjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQpAQCAtNjIsMyArNjIsNSBAQAogb2JqLSQoQ09ORklHX1A1NF9DT01NT04pCSs9IHA1NC8KIAogb2JqLSQoQ09ORklHX0FUSDVLKQkrPSBhdGg1ay8KKworb2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKQkrPSBtYWM4MDIxMV9od3NpbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMKaW5kZXggNWMwZDJiMC4uMzMzM2Q0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYwpAQCAtMzA2LDExICszMDYsMTAgQEAKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKIHsKIAlzdHJ1Y3QgYWRtODIxMV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHNfZGF0YSAqZGF0YSA9ICZzdGF0cy0+ZGF0YVswXTsKIAotCWRhdGEtPmxlbiA9IHByaXYtPmN1cl90eCAtIHByaXYtPmRpcnR5X3R4OwotCWRhdGEtPmxpbWl0ID0gcHJpdi0+dHhfcmluZ19zaXplIC0gMjsKLQlkYXRhLT5jb3VudCA9IHByaXYtPmRpcnR5X3R4OworCXN0YXRzWzBdLmxlbiA9IHByaXYtPmN1cl90eCAtIHByaXYtPmRpcnR5X3R4OworCXN0YXRzWzBdLmxpbWl0ID0gcHJpdi0+dHhfcmluZ19zaXplIC0gMjsKKwlzdGF0c1swXS5jb3VudCA9IHByaXYtPmRpcnR5X3R4OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjUsNyArMzI0LDcgQEAKIAlmb3IgKGRpcnR5X3R4ID0gcHJpdi0+ZGlydHlfdHg7IHByaXYtPmN1cl90eCAtIGRpcnR5X3R4OyBkaXJ0eV90eCsrKSB7CiAJCXVuc2lnbmVkIGludCBlbnRyeSA9IGRpcnR5X3R4ICUgcHJpdi0+dHhfcmluZ19zaXplOwogCQl1MzIgc3RhdHVzID0gbGUzMl90b19jcHUocHJpdi0+dHhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKLQkJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgdHhfc3RhdHVzOworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTsKIAkJc3RydWN0IGFkbTgyMTFfdHhfcmluZ19pbmZvICppbmZvOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCkBAIC0zMzUsMjQgKzMzNCwyMyBAQAogCiAJCWluZm8gPSAmcHJpdi0+dHhfYnVmZmVyc1tlbnRyeV07CiAJCXNrYiA9IGluZm8tPnNrYjsKKwkJdHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCiAJCS8qIFRPRE86IGNoZWNrIFRERVMwX1NUQVRVU19UVUYgYW5kIFRERVMwX1NUQVRVU19UUk8gKi8KIAogCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGluZm8tPm1hcHBpbmcsCiAJCQkJIGluZm8tPnNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAotCQltZW1zZXQoJnR4X3N0YXR1cywgMCwgc2l6ZW9mKHR4X3N0YXR1cykpOworCQltZW1zZXQoJnR4aS0+c3RhdHVzLCAwLCBzaXplb2YodHhpLT5zdGF0dXMpKTsKIAkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFkbTgyMTFfdHhfaGRyKSk7CiAJCW1lbWNweShza2JfcHVzaChza2IsIGluZm8tPmhkcmxlbiksIHNrYi0+Y2IsIGluZm8tPmhkcmxlbik7Ci0JCW1lbWNweSgmdHhfc3RhdHVzLmNvbnRyb2wsICZpbmZvLT50eF9jb250cm9sLAotCQkgICAgICAgc2l6ZW9mKHR4X3N0YXR1cy5jb250cm9sKSk7Ci0JCWlmICghKHR4X3N0YXR1cy5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX05PX0FDSykpIHsKKwkJaWYgKCEodHhpLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgewogCQkJaWYgKHN0YXR1cyAmIFRERVMwX1NUQVRVU19FUykKLQkJCQl0eF9zdGF0dXMuZXhjZXNzaXZlX3JldHJpZXMgPSAxOworCQkJCXR4aS0+c3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMTsKIAkJCWVsc2UKLQkJCQl0eF9zdGF0dXMuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7CisJCQkJdHhpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CiAJCX0KLQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGRldiwgc2tiLCAmdHhfc3RhdHVzKTsKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGRldiwgc2tiKTsKIAogCQlpbmZvLT5za2IgPSBOVUxMOwogCX0KQEAgLTQ0Niw5ICs0NDQsOSBAQAogCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0gezB9OwogCiAJCQlpZiAocHJpdi0+cGRldi0+cmV2aXNpb24gPCBBRE04MjExX1JFVl9DQSkKLQkJCQlyeF9zdGF0dXMuc3NpID0gcnNzaTsKKwkJCQlyeF9zdGF0dXMuc2lnbmFsID0gcnNzaTsKIAkJCWVsc2UKLQkJCQlyeF9zdGF0dXMuc3NpID0gMTAwIC0gcnNzaTsKKwkJCQlyeF9zdGF0dXMuc2lnbmFsID0gMTAwIC0gcnNzaTsKIAogCQkJcnhfc3RhdHVzLnJhdGVfaWR4ID0gcmF0ZTsKIApAQCAtMTYzOSw3ICsxNjM3LDYgQEAKIC8qIFRyYW5zbWl0IHNrYiB3L2FkbTgyMTFfdHhfaGRyICg4MDIuMTEgaGVhZGVyIGNyZWF0ZWQgYnkgaGFyZHdhcmUpICovCiBzdGF0aWMgdm9pZCBhZG04MjExX3R4X3JhdyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICB1MTYgcGxjcF9zaWduYWwsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsCiAJCQkgICBzaXplX3QgaGRybGVuKQogewogCXN0cnVjdCBhZG04MjExX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CkBAIC0xNjY1LDcgKzE2NjIsNiBAQAogCiAJcHJpdi0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gc2tiOwogCXByaXYtPnR4X2J1ZmZlcnNbZW50cnldLm1hcHBpbmcgPSBtYXBwaW5nOwotCW1lbWNweSgmcHJpdi0+dHhfYnVmZmVyc1tlbnRyeV0udHhfY29udHJvbCwgY29udHJvbCwgc2l6ZW9mKCpjb250cm9sKSk7CiAJcHJpdi0+dHhfYnVmZmVyc1tlbnRyeV0uaGRybGVuID0gaGRybGVuOwogCXByaXYtPnR4X3JpbmdbZW50cnldLmJ1ZmZlcjEgPSBjcHVfdG9fbGUzMihtYXBwaW5nKTsKIApAQCAtMTY4NiwyMiArMTY4MiwyMCBAQAogfQogCiAvKiBQdXQgYWRtODIxMV90eF9oZHIgb24gc2tiIGFuZCB0cmFuc21pdCAqLwotc3RhdGljIGludCBhZG04MjExX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorc3RhdGljIGludCBhZG04MjExX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgYWRtODIxMV90eF9oZHIgKnR4aGRyOwotCXUxNiBmYzsKIAlzaXplX3QgcGF5bG9hZF9sZW4sIGhkcmxlbjsKIAlpbnQgcGxjcCwgZHVyLCBsZW4sIHBsY3Bfc2lnbmFsLCBzaG9ydF9wcmVhbWJsZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnR4cmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZShkZXYsIGluZm8pOwogCi0Jc2hvcnRfcHJlYW1ibGUgPSAhIShjb250cm9sLT50eF9yYXRlLT5mbGFncyAmCi0JCQkJCUlFRUU4MDIxMV9UWENUTF9TSE9SVF9QUkVBTUJMRSk7Ci0JcGxjcF9zaWduYWwgPSBjb250cm9sLT50eF9yYXRlLT5iaXRyYXRlOworCXNob3J0X3ByZWFtYmxlID0gISEodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0hPUlRfUFJFQU1CTEUpOworCXBsY3Bfc2lnbmFsID0gdHhyYXRlLT5iaXRyYXRlOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSAmIH5JRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAltZW1jcHkoc2tiLT5jYiwgc2tiLT5kYXRhLCBoZHJsZW4pOwogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+Y2I7CiAJc2tiX3B1bGwoc2tiLCBoZHJsZW4pOwpAQCAtMTcxNSw4ICsxNzA5LDYgQEAKIAl0eGhkci0+ZnJhbWVfY29udHJvbCA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAogCWxlbiA9IGhkcmxlbiArIHBheWxvYWRfbGVuICsgRkNTX0xFTjsKLQlpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpCi0JCWxlbiArPSA4OwogCiAJdHhoZHItPmZyYWcgPSBjcHVfdG9fbGUxNigweDBGRkYpOwogCWFkbTgyMTFfY2FsY19kdXJhdGlvbnMoJmR1ciwgJnBsY3AsIHBheWxvYWRfbGVuLApAQCAtMTczMSwxNSArMTcyMywxMiBAQAogCWlmIChzaG9ydF9wcmVhbWJsZSkKIAkJdHhoZHItPmhlYWRlcl9jb250cm9sIHw9IGNwdV90b19sZTE2KEFETTgyMTFfVFhIRFJDVExfU0hPUlRfUFJFQU1CTEUpOwogCi0JaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKQorCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX1JUU19DVFMpCiAJCXR4aGRyLT5oZWFkZXJfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBRE04MjExX1RYSERSQ1RMX0VOQUJMRV9SVFMpOwogCi0JaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKQotCQl0eGhkci0+aGVhZGVyX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQURNODIxMV9UWEhEUkNUTF9FTkFCTEVfV0VQX0VOR0lORSk7CisJdHhoZHItPnJldHJ5X2xpbWl0ID0gaW5mby0+Y29udHJvbC5yZXRyeV9saW1pdDsKIAotCXR4aGRyLT5yZXRyeV9saW1pdCA9IGNvbnRyb2wtPnJldHJ5X2xpbWl0OwotCi0JYWRtODIxMV90eF9yYXcoZGV2LCBza2IsIHBsY3Bfc2lnbmFsLCBjb250cm9sLCBoZHJsZW4pOworCWFkbTgyMTFfdHhfcmF3KGRldiwgc2tiLCBwbGNwX3NpZ25hbCwgaGRybGVuKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xODk0LDkgKzE4ODMsMTAgQEAKIAogCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFkbTgyMTFfdHhfaGRyKTsKIAkvKiBkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyBpbiBwcm9taXNjIG1vZGUgKi8KKwlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUM7CiAKIAlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOwotCWRldi0+bWF4X3Jzc2kgPSAxMDA7CS8qIEZJWE1FOiBmaW5kIGJldHRlciB2YWx1ZSAqLworCWRldi0+bWF4X3NpZ25hbCA9IDEwMDsgICAgLyogRklYTUU6IGZpbmQgYmV0dGVyIHZhbHVlICovCiAKIAlkZXYtPnF1ZXVlcyA9IDE7IC8qIEFETTgyMTFDIHN1cHBvcnRzIG1vcmUsIG1heWJlIEFETTgyMTFCIHRvbyAqLwogCkBAIC0yMDE1LDcgKzIwMDUsNyBAQAogCiAJaWYgKHByaXYtPm1vZGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSU5WQUxJRCkgewogCQlhZG04MjExX3N0YXJ0KGRldik7Ci0JCWllZWU4MDIxMV9zdGFydF9xdWV1ZXMoZGV2KTsKKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmgKaW5kZXggOGQ3YzU2NC4uOWIxOTBlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaApAQCAtNDQzLDcgKzQ0Myw2IEBACiBzdHJ1Y3QgYWRtODIxMV90eF9yaW5nX2luZm8gewogCXN0cnVjdCBza19idWZmICpza2I7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCB0eF9jb250cm9sOwogCXNpemVfdCBoZHJsZW47CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggMzIwMTlmYi4uYjVjZDg1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtODUsMTAgKzg1LDEwIEBACiAKIC8qIEluY2x1ZGUgV2lyZWxlc3MgRXh0ZW5zaW9uIGRlZmluaXRpb24gYW5kIGNoZWNrIHZlcnNpb24gLSBKZWFuIElJICovCiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNkZWZpbmUgV0lSRUxFU1NfU1BZCQkvLyBlbmFibGUgaXdzcHkgc3VwcG9ydAotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CS8vIE5ldyBkcml2ZXIgQVBJCisjZGVmaW5lIFdJUkVMRVNTX1NQWQkJLyogZW5hYmxlIGl3c3B5IHN1cHBvcnQgKi8KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgkvKiBOZXcgZHJpdmVyIEFQSSAqLwogCi0jZGVmaW5lIENJU0NPX0VYVAkJLy8gZW5hYmxlIENpc2NvIGV4dGVuc2lvbnMKKyNkZWZpbmUgQ0lTQ09fRVhUCQkvKiBlbmFibGUgQ2lzY28gZXh0ZW5zaW9ucyAqLwogI2lmZGVmIENJU0NPX0VYVAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjZW5kaWYKQEAgLTI4MSw3ICsyODEsNyBAQAogLyogVGhpcyBpcyBhIGtpbmQgb2Ygc2xvcHB5IGhhY2sgdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb24gdG8gT1VUNDUwMCBhbmQKICAgIElONDUwMC4gIEkgd291bGQgYmUgZXh0cmVtZWx5IGludGVyZXN0ZWQgaW4gdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGlzCiAgICBkb2Vzbid0IHdvcmsgdGhvdWdoISEhICovCi1zdGF0aWMgaW50IGRvOGJpdElPID0gMDsKK3N0YXRpYyBpbnQgZG84Yml0SU8gLyogPSAwICovOwogCiAvKiBSZXR1cm4gY29kZXMgKi8KICNkZWZpbmUgU1VDQ0VTUyAwCkBAIC0zOTgsOCArMzk4LDggQEAKICNkZWZpbmUgTUFYVFhRIDY0CiAKIC8qIEJBUCBzZWxlY3RvcnMgKi8KLSNkZWZpbmUgQkFQMCAwIC8vIFVzZWQgZm9yIHJlY2VpdmluZyBwYWNrZXRzCi0jZGVmaW5lIEJBUDEgMiAvLyBVc2VkIGZvciB4bWl0aW5nIHBhY2tldHMgYW5kIHdvcmtpbmcgd2l0aCBSSURTCisjZGVmaW5lIEJBUDAgMCAvKiBVc2VkIGZvciByZWNlaXZpbmcgcGFja2V0cyAqLworI2RlZmluZSBCQVAxIDIgLyogVXNlZCBmb3IgeG1pdGluZyBwYWNrZXRzIGFuZCB3b3JraW5nIHdpdGggUklEUyAqLwogCiAvKiBGbGFncyAqLwogI2RlZmluZSBDT01NQU5EX0JVU1kgMHg4MDAwCkBAIC0xMTQ4LDcgKzExNDgsNiBAQAogc3RhdGljIHZvaWQgYWlyb19uZXR3b3Jrc19mcmVlKHN0cnVjdCBhaXJvX2luZm8gKmFpKTsKIAogc3RydWN0IGFpcm9faW5mbyB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgICAgICAgICAgICAgKmRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICBkZXZfbGlzdDsKIAkvKiBOb3RlLCB3ZSBjYW4gaGF2ZSBNQVhfRklEUyBvdXRzdGFuZGluZy4gIEZJRHMgYXJlIDE2LWJpdHMsIHNvIHdlCkBAIC0xOTI0LDcgKzE5MjMsNyBAQAogCWlmIChucGFja3MgPj0gTUFYVFhRIC0gMSkgewogCQluZXRpZl9zdG9wX3F1ZXVlIChkZXYpOwogCQlpZiAobnBhY2tzID4gTUFYVFhRKSB7Ci0JCQlhaS0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCXJldHVybiAxOwogCQl9CiAJCXNrYl9xdWV1ZV90YWlsICgmYWktPnR4cSwgc2tiKTsKQEAgLTIwNDQsMTMgKzIwNDMsMTMgQEAKIAkJYmFwX3JlYWQoYWksICZzdGF0dXMsIDIsIEJBUDApOwogCX0KIAlpZiAobGUxNl90b19jcHUoc3RhdHVzKSAmIDIpIC8qIFRvbyBtYW55IHJldHJpZXMgKi8KLQkJYWktPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWFpLT5kZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJaWYgKGxlMTZfdG9fY3B1KHN0YXR1cykgJiA0KSAvKiBUcmFuc21pdCBsaWZldGltZSBleGNlZWRlZCAqLwotCQlhaS0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQlhaS0+ZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7CiAJaWYgKGxlMTZfdG9fY3B1KHN0YXR1cykgJiA4KSAvKiBBaWQgZmFpbCAqLwogCQl7IH0KIAlpZiAobGUxNl90b19jcHUoc3RhdHVzKSAmIDB4MTApIC8qIE1BQyBkaXNhYmxlZCAqLwotCQlhaS0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJYWktPmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAlpZiAobGUxNl90b19jcHUoc3RhdHVzKSAmIDB4MjApIC8qIEFzc29jaWF0aW9uIGxvc3QgKi8KIAkJeyB9CiAJLyogV2UgcHJvZHVjZSBhIFRYRFJPUCBldmVudCBvbmx5IGZvciByZXRyeSBvciBsaWZldGltZQpAQCAtMjEwMiw3ICsyMTAxLDcgQEAKIAkJZm9yICg7IGkgPCBNQVhfRklEUyAvIDIgJiYgKHByaXYtPmZpZHNbaV0gJiAweGZmZmYwMDAwKTsgaSsrKTsKIAl9IGVsc2UgewogCQlwcml2LT5maWRzW2ZpZF0gJj0gMHhmZmZmOwotCQlwcml2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwogCX0KIAlpZiAoaSA8IE1BWF9GSURTIC8gMikKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtMjEyOCw3ICsyMTI3LDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJCWlmIChpID09IE1BWF9GSURTIC8gMikgewotCQkJcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCXJldHVybiAxOwogCQl9CiAJfQpAQCAtMjE2Nyw3ICsyMTY2LDcgQEAKIAkJZm9yICg7IGkgPCBNQVhfRklEUyAmJiAocHJpdi0+Zmlkc1tpXSAmIDB4ZmZmZjAwMDApOyBpKyspOwogCX0gZWxzZSB7CiAJCXByaXYtPmZpZHNbZmlkXSAmPSAweGZmZmY7Ci0JCXByaXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CiAJfQogCWlmIChpIDwgTUFYX0ZJRFMpCiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKQEAgLTIxOTksNyArMjE5OCw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogCQlpZiAoaSA9PSBNQVhfRklEUykgewotCQkJcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCXJldHVybiAxOwogCQl9CiAJfQpAQCAtMjIxOSw4ICsyMjE4LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYWlyb19yZWFkX3N0YXRzKHN0cnVjdCBhaXJvX2luZm8gKmFpKQorc3RhdGljIHZvaWQgYWlyb19yZWFkX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPnByaXY7CiAJU3RhdHNSaWQgc3RhdHNfcmlkOwogCV9fbGUzMiAqdmFscyA9IHN0YXRzX3JpZC52YWxzOwogCkBAIC0yMjMyLDIzICsyMjMyLDI0IEBACiAJcmVhZFN0YXRzUmlkKGFpLCAmc3RhdHNfcmlkLCBSSURfU1RBVFMsIDApOwogCXVwKCZhaS0+c2VtKTsKIAotCWFpLT5zdGF0cy5yeF9wYWNrZXRzID0gbGUzMl90b19jcHUodmFsc1s0M10pICsgbGUzMl90b19jcHUodmFsc1s0NF0pICsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMgPSBsZTMyX3RvX2NwdSh2YWxzWzQzXSkgKyBsZTMyX3RvX2NwdSh2YWxzWzQ0XSkgKwogCQkJICAgICAgIGxlMzJfdG9fY3B1KHZhbHNbNDVdKTsKLQlhaS0+c3RhdHMudHhfcGFja2V0cyA9IGxlMzJfdG9fY3B1KHZhbHNbMzldKSArIGxlMzJfdG9fY3B1KHZhbHNbNDBdKSArCisJZGV2LT5zdGF0cy50eF9wYWNrZXRzID0gbGUzMl90b19jcHUodmFsc1szOV0pICsgbGUzMl90b19jcHUodmFsc1s0MF0pICsKIAkJCSAgICAgICBsZTMyX3RvX2NwdSh2YWxzWzQxXSk7Ci0JYWktPnN0YXRzLnJ4X2J5dGVzID0gbGUzMl90b19jcHUodmFsc1s5Ml0pOwotCWFpLT5zdGF0cy50eF9ieXRlcyA9IGxlMzJfdG9fY3B1KHZhbHNbOTFdKTsKLQlhaS0+c3RhdHMucnhfZXJyb3JzID0gbGUzMl90b19jcHUodmFsc1swXSkgKyBsZTMyX3RvX2NwdSh2YWxzWzJdKSArCisJZGV2LT5zdGF0cy5yeF9ieXRlcyA9IGxlMzJfdG9fY3B1KHZhbHNbOTJdKTsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzID0gbGUzMl90b19jcHUodmFsc1s5MV0pOworCWRldi0+c3RhdHMucnhfZXJyb3JzID0gbGUzMl90b19jcHUodmFsc1swXSkgKyBsZTMyX3RvX2NwdSh2YWxzWzJdKSArCiAJCQkgICAgICBsZTMyX3RvX2NwdSh2YWxzWzNdKSArIGxlMzJfdG9fY3B1KHZhbHNbNF0pOwotCWFpLT5zdGF0cy50eF9lcnJvcnMgPSBsZTMyX3RvX2NwdSh2YWxzWzQyXSkgKyBhaS0+c3RhdHMudHhfZmlmb19lcnJvcnM7Ci0JYWktPnN0YXRzLm11bHRpY2FzdCA9IGxlMzJfdG9fY3B1KHZhbHNbNDNdKTsKLQlhaS0+c3RhdHMuY29sbGlzaW9ucyA9IGxlMzJfdG9fY3B1KHZhbHNbODldKTsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycyA9IGxlMzJfdG9fY3B1KHZhbHNbNDJdKSArCisJCQkgICAgICBkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzOworCWRldi0+c3RhdHMubXVsdGljYXN0ID0gbGUzMl90b19jcHUodmFsc1s0M10pOworCWRldi0+c3RhdHMuY29sbGlzaW9ucyA9IGxlMzJfdG9fY3B1KHZhbHNbODldKTsKIAogCS8qIGRldGFpbGVkIHJ4X2Vycm9yczogKi8KLQlhaS0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IGxlMzJfdG9fY3B1KHZhbHNbM10pOwotCWFpLT5zdGF0cy5yeF9jcmNfZXJyb3JzID0gbGUzMl90b19jcHUodmFsc1s0XSk7Ci0JYWktPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyA9IGxlMzJfdG9fY3B1KHZhbHNbMl0pOwotCWFpLT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IGxlMzJfdG9fY3B1KHZhbHNbMF0pOworCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IGxlMzJfdG9fY3B1KHZhbHNbM10pOworCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IGxlMzJfdG9fY3B1KHZhbHNbNF0pOworCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzID0gbGUzMl90b19jcHUodmFsc1syXSk7CisJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IGxlMzJfdG9fY3B1KHZhbHNbMF0pOwogfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmFpcm9fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yMjYxLDEwICsyMjYyLDEwIEBACiAJCQlzZXRfYml0KEpPQl9TVEFUUywgJmxvY2FsLT5qb2JzKTsKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbG9jYWwtPnRocl93YWl0KTsKIAkJfSBlbHNlCi0JCQlhaXJvX3JlYWRfc3RhdHMobG9jYWwpOworCQkJYWlyb19yZWFkX3N0YXRzKGRldik7CiAJfQogCi0JcmV0dXJuICZsb2NhbC0+c3RhdHM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiBzdGF0aWMgdm9pZCBhaXJvX3NldF9wcm9taXNjKHN0cnVjdCBhaXJvX2luZm8gKmFpKSB7CkBAIC0zMDkzLDcgKzMwOTQsNyBAQAogCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfWE1JVDExLCAmYWktPmpvYnMpKQogCQkJYWlyb19lbmRfeG1pdDExKGRldik7CiAJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9TVEFUUywgJmFpLT5qb2JzKSkKLQkJCWFpcm9fcmVhZF9zdGF0cyhhaSk7CisJCQlhaXJvX3JlYWRfc3RhdHMoZGV2KTsKIAkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX1dTVEFUUywgJmFpLT5qb2JzKSkKIAkJCWFpcm9fcmVhZF93aXJlbGVzc19zdGF0cyhhaSk7CiAJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9QUk9NSVNDLCAmYWktPmpvYnMpKQpAQCAtMzI4OSw3ICszMjkwLDcgQEAKIAogCQkJc2tiID0gZGV2X2FsbG9jX3NrYiggbGVuICsgaGRybGVuICsgMiArIDIgKTsKIAkJCWlmICggIXNrYiApIHsKLQkJCQlhcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCWdvdG8gYmFkcng7CiAJCQl9CiAJCQlza2JfcmVzZXJ2ZShza2IsIDIpOyAvKiBUaGlzIHdheSB0aGUgSVAgaGVhZGVyIGlzIGFsaWduZWQgKi8KQEAgLTM1NTcsNyArMzU1OCw3IEBACiAKIAkJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwogCQlpZiAoIXNrYikgewotCQkJYWktPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWFpLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCWdvdG8gYmFkcng7CiAJCX0KIAkJYnVmZmVyID0gc2tiX3B1dChza2IsbGVuKTsKQEAgLTM2NTAsNyArMzY1MSw3IEBACiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKCBsZW4gKyBoZHJsZW4gKyAyICk7CiAJaWYgKCAhc2tiICkgewotCQlhaS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlhaS0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCWdvdG8gYmFkcng7CiAJfQogCWJ1ZmZlciA9ICh1MTYqKXNrYl9wdXQgKHNrYiwgbGVuICsgaGRybGVuKTsKQEAgLTQ1NjAsMjIgKzQ1NjEsMTMgQEAKIAkJCSAgc2l6ZV90IGxlbiwKIAkJCSAgbG9mZl90ICpvZmZzZXQgKQogewotCWxvZmZfdCBwb3MgPSAqb2Zmc2V0OwotCXN0cnVjdCBwcm9jX2RhdGEgKnByaXYgPSAoc3RydWN0IHByb2NfZGF0YSopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwcm9jX2RhdGEgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIXByaXYtPnJidWZmZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHBvcyA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChwb3MgPj0gcHJpdi0+cmVhZGxlbikKLQkJcmV0dXJuIDA7Ci0JaWYgKGxlbiA+IHByaXYtPnJlYWRsZW4gLSBwb3MpCi0JCWxlbiA9IHByaXYtPnJlYWRsZW4gLSBwb3M7Ci0JaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIHByaXYtPnJidWZmZXIgKyBwb3MsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCSpvZmZzZXQgPSBwb3MgKyBsZW47Ci0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBsZW4sIG9mZnNldCwgcHJpdi0+cmJ1ZmZlciwKKwkJCQkJcHJpdi0+cmVhZGxlbik7CiB9CiAKIC8qCkBAIC01NTMwLDExICs1NTIyLDEzIEBACiAJQ21kIGNtZDsKIAlSZXNwIHJzcDsKIAotCWlmICgoYWktPkFQTGlzdCA9PSBOVUxMKSAmJgotCQkoYWktPkFQTGlzdCA9IGttYWxsb2Moc2l6ZW9mKEFQTGlzdFJpZCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICghYWktPkFQTGlzdCkKKwkJYWktPkFQTGlzdCA9IGttYWxsb2Moc2l6ZW9mKEFQTGlzdFJpZCksIEdGUF9LRVJORUwpOworCWlmICghYWktPkFQTGlzdCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKChhaS0+U1NJRCA9PSBOVUxMKSAmJgotCQkoYWktPlNTSUQgPSBrbWFsbG9jKHNpemVvZihTc2lkUmlkKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKCFhaS0+U1NJRCkKKwkJYWktPlNTSUQgPSBrbWFsbG9jKHNpemVvZihTc2lkUmlkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhaS0+U1NJRCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVhZEFQTGlzdFJpZChhaSwgYWktPkFQTGlzdCk7CiAJcmVhZFNzaWRSaWQoYWksIGFpLT5TU0lEKTsKQEAgLTU1NDUsNyArNTUzOSw3IEBACiAJZGlzYWJsZV9NQUMoYWksIDApOwogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAlhaS0+cG93ZXIgPSBzdGF0ZTsKLQljbWQuY21kPUhPU1RTTEVFUDsKKwljbWQuY21kID0gSE9TVFNMRUVQOwogCWlzc3VlY29tbWFuZChhaSwgJmNtZCwgJnJzcCk7CiAKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIDEpOwpAQCAtNTU3NSw3ICs1NTY5LDcgQEAKIAkJbXNsZWVwKDEwMCk7CiAJfQogCi0Jc2V0X2JpdCAoRkxBR19DT01NSVQsICZhaS0+ZmxhZ3MpOworCXNldF9iaXQoRkxBR19DT01NSVQsICZhaS0+ZmxhZ3MpOwogCWRpc2FibGVfTUFDKGFpLCAwKTsKICAgICAgICAgbXNsZWVwKDIwMCk7CiAJaWYgKGFpLT5TU0lEKSB7CkBAIC01NjAyLDkgKzU1OTYsNiBAQAogc3RhdGljIGludCBfX2luaXQgYWlyb19pbml0X21vZHVsZSggdm9pZCApCiB7CiAJaW50IGk7Ci0jaWYgMAotCWludCBoYXZlX2lzYV9kZXYgPSAwOwotI2VuZGlmCiAKIAlhaXJvX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImRyaXZlci9haXJvbmV0IiwKIAkJCQkgICAgICAgU19JRkRJUiB8IGFpcm9fcGVybSwKQEAgLTU2MTUsMTUgKzU2MDYsMTEgQEAKIAkJYWlyb19lbnRyeS0+Z2lkID0gcHJvY19naWQ7CiAJfQogCi0JZm9yKCBpID0gMDsgaSA8IDQgJiYgaW9baV0gJiYgaXJxW2ldOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IDQgJiYgaW9baV0gJiYgaXJxW2ldOyBpKyspIHsKIAkJYWlyb19wcmludF9pbmZvKCIiLCAiVHJ5aW5nIHRvIGNvbmZpZ3VyZSBJU0EgYWRhcHRlciBhdCBpcnE9JWQgIgogCQkJImlvPTB4JXgiLCBpcnFbaV0sIGlvW2ldICk7CiAJCWlmIChpbml0X2Fpcm9fY2FyZCggaXJxW2ldLCBpb1tpXSwgMCwgTlVMTCApKQotI2lmIDAKLQkJCWhhdmVfaXNhX2RldiA9IDE7Ci0jZWxzZQogCQkJLyogZG8gbm90aGluZyAqLyA7Ci0jZW5kaWYKIAl9CiAKICNpZmRlZiBDT05GSUdfUENJCkBAIC01NjY5LDcgKzU2NTYsNyBAQAogCiBzdGF0aWMgdTggYWlyb19yc3NpX3RvX2RibSAodGRzUnNzaUVudHJ5ICpyc3NpX3JpZCwgdTggcnNzaSkKIHsKLQlpZiggIXJzc2lfcmlkICkKKwlpZiAoIXJzc2lfcmlkKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAoMHgxMDAgLSByc3NpX3JpZFtyc3NpXS5yc3NpZEJtKTsKQEAgLTU2NzksMTAgKzU2NjYsMTAgQEAKIHsKIAlpbnQgaTsKIAotCWlmKCAhcnNzaV9yaWQgKQorCWlmICghcnNzaV9yaWQpCiAJCXJldHVybiAwOwogCi0JZm9yKCBpID0gMDsgaSA8IDI1NjsgaSsrICkKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCiAJCWlmIChyc3NpX3JpZFtpXS5yc3NpZEJtID09IGRibSkKIAkJCXJldHVybiByc3NpX3JpZFtpXS5yc3NpcGN0OwogCkBAIC03MTY0LDYgKzcxNTEsNyBAQAogICogZm9ybWF0IHRoYXQgdGhlIFdpcmVsZXNzIFRvb2xzIHdpbGwgdW5kZXJzdGFuZCAtIEplYW4gSUkKICAqLwogc3RhdGljIGlubGluZSBjaGFyICphaXJvX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJCWNoYXIgKmN1cnJlbnRfZXYsCiAJCQkJCWNoYXIgKmVuZF9idWYsCiAJCQkJCUJTU0xpc3RSaWQgKmJzcykKQEAgLTcxODAsNyArNzE2OCw4IEBACiAJaXdlLmNtZCA9IFNJT0NHSVdBUDsKIAlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7CiAKIAkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KIApAQCAtNzE5MCw3ICs3MTc5LDggQEAKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKIAlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwogCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBic3MtPnNzaWQpOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIGJzcy0+c3NpZCk7CiAKIAkvKiBBZGQgbW9kZSAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKQEAgLTcyMDAsNyArNzE5MCw4IEBACiAJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CiAJCWVsc2UKIAkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwogCX0KIAogCS8qIEFkZCBmcmVxdWVuY3kgKi8KQEAgLTcyMTEsNyArNzIwMiw4IEBACiAJICovCiAJaXdlLnUuZnJlcS5tID0gZnJlcXVlbmN5X2xpc3RbaXdlLnUuZnJlcS5tIC0gMV0gKiAxMDAwMDA7CiAJaXdlLnUuZnJlcS5lID0gMTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKIAogCWRCbSA9IGxlMTZfdG9fY3B1KGJzcy0+ZEJtKTsKIApAQCAtNzIzMSw3ICs3MjIzLDggQEAKIAkJCQl8IElXX1FVQUxfREJNOwogCX0KIAlpd2UudS5xdWFsLm5vaXNlID0gYWktPndzdGF0cy5xdWFsLm5vaXNlOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwogCiAJLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwpAQCAtNzI0MCwxMSArNzIzMywxMiBAQAogCWVsc2UKIAkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGJzcy0+c3NpZCk7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgYnNzLT5zc2lkKTsKIAogCS8qIFJhdGUgOiBzdHVmZmluZyBtdWx0aXBsZSB2YWx1ZXMgaW4gYSBzaW5nbGUgZXZlbnQgcmVxdWlyZSBhIGJpdAogCSAqIG1vcmUgb2YgbWFnaWMgLSBKZWFuIElJICovCi0JY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgSVdfRVZfTENQX0xFTjsKKwljdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7CiAKIAlpd2UuY21kID0gU0lPQ0dJV1JBVEU7CiAJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCkBAIC03MjU3LDEwICs3MjUxLDEyIEBACiAJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCiAJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGJzcy0+cmF0ZXNbaV0gJiAweDdmKSAqIDUwMDAwMCk7CiAJCS8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KLQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShjdXJyZW50X2V2LCBjdXJyZW50X3ZhbCwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKKwkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJICAgY3VycmVudF92YWwsIGVuZF9idWYsCisJCQkJCQkgICAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwogCX0KIAkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KLQlpZigoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IElXX0VWX0xDUF9MRU4pCisJaWYgKChjdXJyZW50X3ZhbCAtIGN1cnJlbnRfZXYpID4gaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKQogCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7CiAKIAkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KQEAgLTcyNjksNyArNzI2NSw4IEBACiAJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwogCQlzcHJpbnRmKGJ1ZiwgImJjbl9pbnQ9JWQiLCBic3MtPmJlYWNvbkludGVydmFsKTsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGJ1Zik7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBidWYpOwogCQlrZnJlZShidWYpOwogCX0KIApAQCAtNzMwMyw4ICs3MzAwLDEwIEBACiAJCQkJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CiAJCQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gbWluKGluZm9fZWxlbWVudC0+bGVuICsgMiwKIAkJCQkJCQkJICBNQVhfV1BBX0lFX0xFTik7Ci0JCQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJCSZpd2UsIChjaGFyICopIGluZm9fZWxlbWVudCk7CisJCQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKKwkJCQkJCQlpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCWVuZF9idWYsICZpd2UsCisJCQkJCQkJKGNoYXIgKikgaW5mb19lbGVtZW50KTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAKQEAgLTczMTIsOCArNzMxMSw5IEBACiAJCQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKIAkJCQlpd2UudS5kYXRhLmxlbmd0aCA9IG1pbihpbmZvX2VsZW1lbnQtPmxlbiArIDIsCiAJCQkJCQkJICBNQVhfV1BBX0lFX0xFTik7Ci0JCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkmaXdlLCAoY2hhciAqKSBpbmZvX2VsZW1lbnQpOworCQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKKwkJCQkJaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJJml3ZSwgKGNoYXIgKikgaW5mb19lbGVtZW50KTsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKQEAgLTczNTIsNyArNzM1Miw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5IChuZXQsICZhaS0+bmV0d29ya19saXN0LCBsaXN0KSB7CiAJCS8qIFRyYW5zbGF0ZSB0byBXRSBmb3JtYXQgdGhpcyBlbnRyeSAqLwotCQljdXJyZW50X2V2ID0gYWlyb190cmFuc2xhdGVfc2NhbihkZXYsIGN1cnJlbnRfZXYsCisJCWN1cnJlbnRfZXYgPSBhaXJvX3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywgY3VycmVudF9ldiwKIAkJCQkJCSBleHRyYSArIGR3cnEtPmxlbmd0aCwKIAkJCQkJCSAmbmV0LT5ic3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKaW5kZXggZGJkZmM5ZS4uZGVjNWU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYwpAQCAtMTI1LDcgKzEyNSw3IEBACiB7CiAJc3RydWN0IGFybGFuX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAlpZiAocHJpdi0+Q29uZi0+dHhfZGVsYXlfbXMpCiAJewogCQlwcml2LT50eF9kb25lX2RlbGF5ZWQgPSBqaWZmaWVzICsgcHJpdi0+Q29uZi0+dHhfZGVsYXlfbXMgKiBIWiAvIDEwMDAgKyAxOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAKIAkJewogCQkJSUZERUJVRyhBUkxBTl9ERUJVR19UWF9DSEFJTikKIAkJCQlwcmludGsoImFybGFuIGludHI6IHRyYW5zbWl0IE9LXG4iKTsKLQkJCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJcHJpdi0+YmFkID0gMDsKIAkJCXByaXYtPnJlc2V0ID0gMDsKIAkJCXByaXYtPnJldHJhbnNtaXNzaW9ucyA9IDA7CkBAIC0xNDk2LDcgKzE0OTYsNyBAQAogCQkJaWYgKHNrYiA9PSBOVUxMKQogCQkJewogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLCBkZXYtPm5hbWUpOwotCQkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CkBAIC0xNTM2LDE0ICsxNTM2LDE0IEBACiAJCQkJfQogCQkJbmV0aWZfcngoc2tiKTsKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCX0KIAkJYnJlYWs7CiAJCQogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICJhcmxhbiBpbnRyOiByZWNlaXZlZCB1bmtub3duIHN0YXR1c1xuIik7Ci0JCQlwcml2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCWJyZWFrOwogCX0KIAlBUkxBTl9ERUJVR19FWElUKCJhcmxhbl9yeF9pbnRlcnJ1cHQiKTsKQEAgLTE3MTksMjMgKzE3MTksMjMgQEAKIAogCS8qIFVwZGF0ZSB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSBkZXZpY2UgcmVnaXN0ZXJzLiAqLwogCi0JUkVBRFNITShwcml2LT5zdGF0cy5jb2xsaXNpb25zLCBhcmxhbi0+bnVtUmVUcmFuc21pc3Npb25zLCB1X2ludCk7Ci0JUkVBRFNITShwcml2LT5zdGF0cy5yeF9jcmNfZXJyb3JzLCBhcmxhbi0+bnVtQ1JDRXJyb3JzLCB1X2ludCk7Ci0JUkVBRFNITShwcml2LT5zdGF0cy5yeF9kcm9wcGVkLCBhcmxhbi0+bnVtRnJhbWVzRGlzY2FyZGVkLCB1X2ludCk7Ci0JUkVBRFNITShwcml2LT5zdGF0cy5yeF9maWZvX2Vycm9ycywgYXJsYW4tPm51bVJYQnVmZmVyT3ZlcmZsb3dzLCB1X2ludCk7Ci0JUkVBRFNITShwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMsIGFybGFuLT5udW1SZWNlaXZlRnJhbWVzTG9zdCwgdV9pbnQpOwotCVJFQURTSE0ocHJpdi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMsIGFybGFuLT5udW1SWE92ZXJydW5zLCB1X2ludCk7Ci0JUkVBRFNITShwcml2LT5zdGF0cy5yeF9wYWNrZXRzLCBhcmxhbi0+bnVtRGF0YWdyYW1zUmVjZWl2ZWQsIHVfaW50KTsKLQlSRUFEU0hNKHByaXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzLCBhcmxhbi0+bnVtQWJvcnRFcnJvcnMsIHVfaW50KTsKLQlSRUFEU0hNKHByaXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzLCBhcmxhbi0+bnVtU3RhdHVzVGltZW91dHMsIHVfaW50KTsKLQlSRUFEU0hNKHByaXYtPnN0YXRzLnR4X2Ryb3BwZWQsIGFybGFuLT5udW1EYXRhZ3JhbXNEaXNjYXJkZWQsIHVfaW50KTsKLQlSRUFEU0hNKHByaXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzLCBhcmxhbi0+bnVtVFhVbmRlcnJ1bnMsIHVfaW50KTsKLQlSRUFEU0hNKHByaXYtPnN0YXRzLnR4X3BhY2tldHMsIGFybGFuLT5udW1EYXRhZ3JhbXNUcmFuc21pdHRlZCwgdV9pbnQpOwotCVJFQURTSE0ocHJpdi0+c3RhdHMudHhfd2luZG93X2Vycm9ycywgYXJsYW4tPm51bUhvbGRPZmZzLCB1X2ludCk7CisJUkVBRFNITShkZXYtPnN0YXRzLmNvbGxpc2lvbnMsIGFybGFuLT5udW1SZVRyYW5zbWlzc2lvbnMsIHVfaW50KTsKKwlSRUFEU0hNKGRldi0+c3RhdHMucnhfY3JjX2Vycm9ycywgYXJsYW4tPm51bUNSQ0Vycm9ycywgdV9pbnQpOworCVJFQURTSE0oZGV2LT5zdGF0cy5yeF9kcm9wcGVkLCBhcmxhbi0+bnVtRnJhbWVzRGlzY2FyZGVkLCB1X2ludCk7CisJUkVBRFNITShkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzLCBhcmxhbi0+bnVtUlhCdWZmZXJPdmVyZmxvd3MsIHVfaW50KTsKKwlSRUFEU0hNKGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzLCBhcmxhbi0+bnVtUmVjZWl2ZUZyYW1lc0xvc3QsIHVfaW50KTsKKwlSRUFEU0hNKGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMsIGFybGFuLT5udW1SWE92ZXJydW5zLCB1X2ludCk7CisJUkVBRFNITShkZXYtPnN0YXRzLnJ4X3BhY2tldHMsIGFybGFuLT5udW1EYXRhZ3JhbXNSZWNlaXZlZCwgdV9pbnQpOworCVJFQURTSE0oZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycywgYXJsYW4tPm51bUFib3J0RXJyb3JzLCB1X2ludCk7CisJUkVBRFNITShkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzLCBhcmxhbi0+bnVtU3RhdHVzVGltZW91dHMsIHVfaW50KTsKKwlSRUFEU0hNKGRldi0+c3RhdHMudHhfZHJvcHBlZCwgYXJsYW4tPm51bURhdGFncmFtc0Rpc2NhcmRlZCwgdV9pbnQpOworCVJFQURTSE0oZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycywgYXJsYW4tPm51bVRYVW5kZXJydW5zLCB1X2ludCk7CisJUkVBRFNITShkZXYtPnN0YXRzLnR4X3BhY2tldHMsIGFybGFuLT5udW1EYXRhZ3JhbXNUcmFuc21pdHRlZCwgdV9pbnQpOworCVJFQURTSE0oZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzLCBhcmxhbi0+bnVtSG9sZE9mZnMsIHVfaW50KTsKIAogCUFSTEFOX0RFQlVHX0VYSVQoImFybGFuX3N0YXRpc3RpY3MiKTsKIAotCXJldHVybiAmcHJpdi0+c3RhdHM7CisJcmV0dXJuICZkZXYtPnN0YXRzOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi5oCmluZGV4IDNlZDFkZjcuLmZiM2FkNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4uaApAQCAtMzMwLDcgKzMzMCw2IEBACiAjZGVmaW5lIFRYX1JJTkdfU0laRSAyCiAvKiBJbmZvcm1hdGlvbiB0aGF0IG5lZWQgdG8gYmUga2VwdCBmb3IgZWFjaCBib2FyZC4gKi8KIHN0cnVjdCBhcmxhbl9wcml2YXRlIHsKLSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgICAgc3RydWN0IGFybGFuX3NobWVtIF9faW9tZW0gKiBjYXJkOwogICAgICAgc3RydWN0IGFybGFuX3NobWVtICogY29uZjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL0tjb25maWcKaW5kZXggZjFmMmFlYS4uNzUzODNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9LY29uZmlnCkBAIC0xLDYgKzEsOSBAQAogY29uZmlnIEFUSDVLCiAJdHJpc3RhdGUgIkF0aGVyb3MgNXh4eCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IE1BQzgwMjExX0xFRFMKKwlzZWxlY3QgTEVEU19DTEFTUworCXNlbGVjdCBORVdfTEVEUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24KIAkgIEF0aGVyb3MgNXh4eCBjaGlwc2V0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jCmluZGV4IDYzNWI5YWMuLjIxN2Q1MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMKQEAgLTU4LDExICs1OCw2IEBACiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotZW51bSB7Ci0JQVRIX0xFRF9UWCwKLQlBVEhfTEVEX1JYLAotfTsKLQogc3RhdGljIGludCBhdGg1a19jYWxpbnRlcnZhbCA9IDEwOyAvKiBDYWxpYnJhdGUgUEhZIGV2ZXJ5IDEwIHNlY3MgKFRPRE86IEZpeG1lKSAqLwogCiAKQEAgLTE2Nyw4ICsxNjIsNyBAQAogLyoKICAqIFByb3RvdHlwZXMgLSBNQUMgODAyLjExIHN0YWNrIHJlbGF0ZWQgZnVuY3Rpb25zCiAgKi8KLXN0YXRpYyBpbnQgYXRoNWtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKTsKK3N0YXRpYyBpbnQgYXRoNWtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIGludCBhdGg1a19yZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBzdGF0aWMgaW50IGF0aDVrX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHN0YXRpYyB2b2lkIGF0aDVrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMTk2LDggKzE5MCw3IEBACiBzdGF0aWMgdTY0IGF0aDVrX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogc3RhdGljIHZvaWQgYXRoNWtfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHN0YXRpYyBpbnQgYXRoNWtfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDVrX2h3X29wcyA9IHsKIAkudHggCQk9IGF0aDVrX3R4LApAQCAtMjE0LDcgKzIwNyw2IEBACiAJLmdldF90eF9zdGF0cyAJPSBhdGg1a19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YgCT0gYXRoNWtfZ2V0X3RzZiwKIAkucmVzZXRfdHNmIAk9IGF0aDVrX3Jlc2V0X3RzZiwKLQkuYmVhY29uX3VwZGF0ZSAJPSBhdGg1a19iZWFjb25fdXBkYXRlLAogfTsKIAogLyoKQEAgLTI1MSw5ICsyNDMsNyBAQAogc3RhdGljIGludCAJYXRoNWtfcnhidWZfc2V0dXAoc3RydWN0IGF0aDVrX3NvZnRjICpzYywKIAkJCQlzdHJ1Y3QgYXRoNWtfYnVmICpiZik7CiBzdGF0aWMgaW50IAlhdGg1a190eGJ1Zl9zZXR1cChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAotCQkJCXN0cnVjdCBhdGg1a19idWYgKmJmLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKTsKLQorCQkJCXN0cnVjdCBhdGg1a19idWYgKmJmKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGg1a190eGJ1Zl9mcmVlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpCiB7CkBAIC0yODksOCArMjc5LDcgQEAKIHN0YXRpYyB2b2lkIAlhdGg1a190YXNrbGV0X3R4KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAvKiBCZWFjb24gaGFuZGxpbmcgKi8KIHN0YXRpYyBpbnQgCWF0aDVrX2JlYWNvbl9zZXR1cChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAotCQkJCXN0cnVjdCBhdGg1a19idWYgKmJmLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKTsKKwkJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpOwogc3RhdGljIHZvaWQgCWF0aDVrX2JlYWNvbl9zZW5kKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIHZvaWQgCWF0aDVrX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZAlhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1NjQgYmNfdHNmKTsKQEAgLTMxNCwxMyArMzAzLDEwIEBACiAKIHN0YXRpYyB2b2lkIAlhdGg1a19jYWxpYnJhdGUodW5zaWduZWQgbG9uZyBkYXRhKTsKIC8qIExFRCBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIAlhdGg1a19sZWRfb2ZmKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdGF0aWMgdm9pZCAJYXRoNWtfbGVkX2JsaW5rKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCi0JCQkJdW5zaWduZWQgaW50IG9uLAotCQkJCXVuc2lnbmVkIGludCBvZmYpOwotc3RhdGljIHZvaWQgCWF0aDVrX2xlZF9ldmVudChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAotCQkJCWludCBldmVudCk7Ci0KK3N0YXRpYyBpbnQJYXRoNWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworc3RhdGljIHZvaWQJYXRoNWtfbGVkX2VuYWJsZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK3N0YXRpYyB2b2lkCWF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CitzdGF0aWMgdm9pZAlhdGg1a191bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiAKIC8qCiAgKiBNb2R1bGUgaW5pdC9leGl0IGZ1bmN0aW9ucwpAQCAtNDU4LDEzICs0NDQsMTEgQEAKIAogCS8qIEluaXRpYWxpemUgZHJpdmVyIHByaXZhdGUgZGF0YSAqLwogCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKLQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOworCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQkgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKIAlody0+ZXh0cmFfdHhfaGVhZHJvb20gPSAyOwogCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gNTAwMDsKLQkvKiB0aGVzZSBuYW1lcyBhcmUgbWlzbGVhZGluZyAqLwotCWh3LT5tYXhfcnNzaSA9IC0xMTA7IC8qIHNpZ25hbCBpbiBkQm0gKi8KLQlody0+bWF4X25vaXNlID0gLTExMDsgLyogbm9pc2UgaW4gZEJtICovCi0JaHctPm1heF9zaWduYWwgPSAxMDA7IC8qIHdlIHdpbGwgcHJvdmlkZSBhIHBlcmNlbnRhZ2UgYmFzZWQgb24gcnNzaSAqLwogCXNjID0gaHctPnByaXY7CiAJc2MtPmh3ID0gaHc7CiAJc2MtPnBkZXYgPSBwZGV2OwpAQCAtNjAzLDggKzU4Nyw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCi0JaWYgKHRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlhdGg1a19od19zZXRfZ3BpbyhzYy0+YWgsIHNjLT5sZWRfcGluLCAxKTsKKwlhdGg1a19sZWRfb2ZmKHNjKTsKIAogCWF0aDVrX3N0b3BfaHcoc2MpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwpAQCAtNjM5LDEwICs2MjIsNyBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQxLCAwKTsKIAogCWF0aDVrX2luaXQoc2MpOwotCWlmICh0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkgewotCQlhdGg1a19od19zZXRfZ3Bpb19vdXRwdXQoYWgsIHNjLT5sZWRfcGluKTsKLQkJYXRoNWtfaHdfc2V0X2dwaW8oYWgsIHNjLT5sZWRfcGluLCAwKTsKLQl9CisJYXRoNWtfbGVkX2VuYWJsZShzYyk7CiAKIAkvKgogCSAqIFJlc2V0IHRoZSBrZXkgY2FjaGUgc2luY2Ugc29tZSBwYXJ0cyBkbyBub3QKQEAgLTc0OSwyNyArNzI5LDYgQEAKIAl0YXNrbGV0X2luaXQoJnNjLT50eHRxLCBhdGg1a190YXNrbGV0X3R4LCAodW5zaWduZWQgbG9uZylzYyk7CiAJdGFza2xldF9pbml0KCZzYy0+cmVzdHEsIGF0aDVrX3Rhc2tsZXRfcmVzZXQsICh1bnNpZ25lZCBsb25nKXNjKTsKIAlzZXR1cF90aW1lcigmc2MtPmNhbGliX3RpbSwgYXRoNWtfY2FsaWJyYXRlLCAodW5zaWduZWQgbG9uZylzYyk7Ci0Jc2V0dXBfdGltZXIoJnNjLT5sZWRfdGltLCBhdGg1a19sZWRfb2ZmLCAodW5zaWduZWQgbG9uZylzYyk7Ci0KLQlzYy0+bGVkX29uID0gMDsgLyogbG93IHRydWUgKi8KLQkvKgotCSAqIEF1dG8tZW5hYmxlIHNvZnQgbGVkIHByb2Nlc3NpbmcgZm9yIElCTSBjYXJkcyBhbmQgZm9yCi0JICogNTIxMSBtaW5pcGNpIGNhcmRzLgotCSAqLwotCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMl9JQk0gfHwKLQkJCXBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfQVI1MjExKSB7Ci0JCV9fc2V0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKTsKLQkJc2MtPmxlZF9waW4gPSAwOwotCX0KLQkvKiBFbmFibGUgc29mdGxlZCBvbiBQSU4xIG9uIEhQIENvbXBhcSBuYzZ4eCwgbmM0MDAwICYgbng1MDAwIGxhcHRvcHMgKi8KLQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTVBBUSkgewotCQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cyk7Ci0JCXNjLT5sZWRfcGluID0gMDsKLQl9Ci0JaWYgKHRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKSB7Ci0JCWF0aDVrX2h3X3NldF9ncGlvX291dHB1dChhaCwgc2MtPmxlZF9waW4pOwotCQlhdGg1a19od19zZXRfZ3BpbyhhaCwgc2MtPmxlZF9waW4sICFzYy0+bGVkX29uKTsKLQl9CiAKIAlhdGg1a19od19nZXRfbGxhZGRyKGFoLCBtYWMpOwogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBtYWMpOwpAQCAtNzgzLDYgKzc0Miw4IEBACiAJCWdvdG8gZXJyX3F1ZXVlczsKIAl9CiAKKwlhdGg1a19pbml0X2xlZHMoc2MpOworCiAJcmV0dXJuIDA7CiBlcnJfcXVldWVzOgogCWF0aDVrX3R4cV9yZWxlYXNlKHNjKTsKQEAgLTgxNiw2ICs3NzcsNyBAQAogCWF0aDVrX2Rlc2NfZnJlZShzYywgcGRldik7CiAJYXRoNWtfdHhxX3JlbGVhc2Uoc2MpOwogCWF0aDVrX2h3X3JlbGVhc2VfdHhfcXVldWUoc2MtPmFoLCBzYy0+YmhhbHEpOworCWF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzYyk7CiAKIAkvKgogCSAqIE5COiBjYW4ndCByZWNsYWltIHRoZXNlIHVudGlsIGFmdGVyIGllZWU4MDIxMV9pZmRldGFjaApAQCAtMTA2Nyw2NSArMTAyOSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBUT0RPOiBDTEVBTiBUSElTICEhIQotICovCiBzdGF0aWMgdm9pZAogYXRoNWtfc2V0Y3VybW9kZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKLQlpZiAodW5saWtlbHkodGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpKSB7Ci0JCS8qIGZyb20gQXRoZXJvcyBORElTIGRyaXZlciwgdy8gcGVybWlzc2lvbiAqLwotCQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKLQkJCXUxNiByYXRlOwkvKiB0eC9yeCA4MDIuMTEgcmF0ZSAqLwotCQkJdTE2IHRpbWVPbjsJLyogTEVEIG9uIHRpbWUgKG1zKSAqLwotCQkJdTE2IHRpbWVPZmY7CS8qIExFRCBvZmYgdGltZSAobXMpICovCi0JCX0gYmxpbmtyYXRlc1tdID0gewotCQkJeyAxMDgsICA0MCwgIDEwIH0sCi0JCQl7ICA5NiwgIDQ0LCAgMTEgfSwKLQkJCXsgIDcyLCAgNTAsICAxMyB9LAotCQkJeyAgNDgsICA1NywgIDE0IH0sCi0JCQl7ICAzNiwgIDY3LCAgMTYgfSwKLQkJCXsgIDI0LCAgODAsICAyMCB9LAotCQkJeyAgMjIsIDEwMCwgIDI1IH0sCi0JCQl7ICAxOCwgMTMzLCAgMzQgfSwKLQkJCXsgIDEyLCAxNjAsICA0MCB9LAotCQkJeyAgMTAsIDIwMCwgIDUwIH0sCi0JCQl7ICAgNiwgMjQwLCAgNTggfSwKLQkJCXsgICA0LCAyNjcsICA2NiB9LAotCQkJeyAgIDIsIDQwMCwgMTAwIH0sCi0JCQl7ICAgMCwgNTAwLCAxMzAgfQotCQl9OwotCQljb25zdCBzdHJ1Y3QgYXRoNWtfcmF0ZV90YWJsZSAqcnQgPQotCQkJCWF0aDVrX2h3X2dldF9yYXRlX3RhYmxlKHNjLT5haCwgbW9kZSk7Ci0JCXVuc2lnbmVkIGludCBpLCBqOwotCi0JCUJVR19PTihydCA9PSBOVUxMKTsKLQotCQltZW1zZXQoc2MtPmh3bWFwLCAwLCBzaXplb2Yoc2MtPmh3bWFwKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCQl1OCBpeCA9IHJ0LT5yYXRlX2NvZGVfdG9faW5kZXhbaV07Ci0JCQlpZiAoaXggPT0gMHhmZikgewotCQkJCXNjLT5od21hcFtpXS5sZWRvbiA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQkJCQlzYy0+aHdtYXBbaV0ubGVkb2ZmID0gbXNlY3NfdG9famlmZmllcygxMzApOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc2MtPmh3bWFwW2ldLnR4ZmxhZ3MgPSBJRUVFODAyMTFfUkFESU9UQVBfRl9EQVRBUEFEOwotCQkJLyogcmVjZWl2ZSBmcmFtZXMgaW5jbHVkZSBGQ1MgKi8KLQkJCXNjLT5od21hcFtpXS5yeGZsYWdzID0gc2MtPmh3bWFwW2ldLnR4ZmxhZ3MgfAotCQkJCQlJRUVFODAyMTFfUkFESU9UQVBfRl9GQ1M7Ci0JCQkvKiBzZXR1cCBibGluayByYXRlIHRhYmxlIHRvIGF2b2lkIHBlci1wYWNrZXQgbG9va3VwICovCi0JCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShibGlua3JhdGVzKSAtIDE7IGorKykKLQkJCQlpZiAoYmxpbmtyYXRlc1tqXS5yYXRlID09IC8qIFhYWCB3aHkgN2Y/ICovCi0JCQkJCQkocnQtPnJhdGVzW2l4XS5kb3QxMV9yYXRlJjB4N2YpKQotCQkJCQlicmVhazsKLQotCQkJc2MtPmh3bWFwW2ldLmxlZG9uID0gbXNlY3NfdG9famlmZmllcyhibGlua3JhdGVzW2pdLgotCQkJCQl0aW1lT24pOwotCQkJc2MtPmh3bWFwW2ldLmxlZG9mZiA9IG1zZWNzX3RvX2ppZmZpZXMoYmxpbmtyYXRlc1tqXS4KLQkJCQkJdGltZU9mZik7Ci0JCX0KLQl9Ci0KIAlzYy0+Y3VybW9kZSA9IG1vZGU7CiAKIAlpZiAobW9kZSA9PSBBUjVLX01PREVfMTFBKSB7CkBAIC0xMjk3LDM2ICsxMjAzLDM2IEBACiB9CiAKIHN0YXRpYyBpbnQKLWF0aDVrX3R4YnVmX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19idWYgKmJmLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0bCkKK2F0aDVrX3R4YnVmX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19idWYgKmJmKQogewogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CiAJc3RydWN0IGF0aDVrX3R4cSAqdHhxID0gc2MtPnR4cTsKIAlzdHJ1Y3QgYXRoNWtfZGVzYyAqZHMgPSBiZi0+ZGVzYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYmYtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJdW5zaWduZWQgaW50IHBrdGxlbiwgZmxhZ3MsIGtleWlkeCA9IEFSNUtfVFhLRVlJWF9JTlZBTElEOwogCWludCByZXQ7CiAKIAlmbGFncyA9IEFSNUtfVFhERVNDX0lOVFJFUSB8IEFSNUtfVFhERVNDX0NMUkRNQVNLOwotCWJmLT5jdGwgPSAqY3RsOworCiAJLyogWFhYIGVuZGlhbm5lc3MgKi8KIAliZi0+c2tiYWRkciA9IHBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJUENJX0RNQV9UT0RFVklDRSk7CiAKLQlpZiAoY3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCiAJCWZsYWdzIHw9IEFSNUtfVFhERVNDX05PQUNLOwogCiAJcGt0bGVuID0gc2tiLT5sZW47CiAKLQlpZiAoIShjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0RPX05PVF9FTkNSWVBUKSkgewotCQlrZXlpZHggPSBjdGwtPmtleV9pZHg7Ci0JCXBrdGxlbiArPSBjdGwtPmljdl9sZW47CisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0RPX05PVF9FTkNSWVBUKSkgeworCQlrZXlpZHggPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKKwkJcGt0bGVuICs9IGluZm8tPmNvbnRyb2wuaWN2X2xlbjsKIAl9Ci0KIAlyZXQgPSBhaC0+YWhfc2V0dXBfdHhfZGVzYyhhaCwgZHMsIHBrdGxlbiwKIAkJaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKSwgQVI1S19QS1RfVFlQRV9OT1JNQUwsCi0JCShzYy0+cG93ZXJfbGV2ZWwgKiAyKSwgY3RsLT50eF9yYXRlLT5od192YWx1ZSwKLQkJY3RsLT5yZXRyeV9saW1pdCwga2V5aWR4LCAwLCBmbGFncywgMCwgMCk7CisJCShzYy0+cG93ZXJfbGV2ZWwgKiAyKSwKKwkJaWVlZTgwMjExX2dldF90eF9yYXRlKHNjLT5odywgaW5mbyktPmh3X3ZhbHVlLAorCQlpbmZvLT5jb250cm9sLnJldHJ5X2xpbWl0LCBrZXlpZHgsIDAsIGZsYWdzLCAwLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl91bm1hcDsKIApAQCAtMTMzNSw3ICsxMjQxLDcgQEAKIAogCXNwaW5fbG9ja19iaCgmdHhxLT5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJnR4cS0+cSk7Ci0Jc2MtPnR4X3N0YXRzLmRhdGFbdHhxLT5xbnVtXS5sZW4rKzsKKwlzYy0+dHhfc3RhdHNbdHhxLT5xbnVtXS5sZW4rKzsKIAlpZiAodHhxLT5saW5rID09IE5VTEwpIC8qIGlzIHRoaXMgZmlyc3QgcGFja2V0PyAqLwogCQlhdGg1a19od19wdXRfdHhfYnVmKGFoLCB0eHEtPnFudW0sIGJmLT5kYWRkcik7CiAJZWxzZSAvKiBubywgc28gb25seSBsaW5rIGl0ICovCkBAIC0xNTY2LDcgKzE0NzIsNyBAQAogCQlhdGg1a190eGJ1Zl9mcmVlKHNjLCBiZik7CiAKIAkJc3Bpbl9sb2NrX2JoKCZzYy0+dHhidWZsb2NrKTsKLQkJc2MtPnR4X3N0YXRzLmRhdGFbdHhxLT5xbnVtXS5sZW4tLTsKKwkJc2MtPnR4X3N0YXRzW3R4cS0+cW51bV0ubGVuLS07CiAJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJnNjLT50eGJ1Zik7CiAJCXNjLT50eGJ1Zl9sZW4rKzsKIAkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eGJ1ZmxvY2spOwpAQCAtMTYwMSw3ICsxNTA3LDcgQEAKIAkJCQkJc2MtPnR4cXNbaV0ubGluayk7CiAJCQl9CiAJfQotCWllZWU4MDIxMV9zdGFydF9xdWV1ZXMoc2MtPmh3KTsgLyogWFhYIG1vdmUgdG8gY2FsbGVycyAqLworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhzYy0+aHcpOyAvKiBYWFggbW92ZSB0byBjYWxsZXJzICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHhxcyk7IGkrKykKIAkJaWYgKHNjLT50eHFzW2ldLnNldHVwKQpAQCAtMTY5OCw5ICsxNjA0LDkgQEAKIAkvKiBBcHBhcmVudGx5IHdoZW4gYSBkZWZhdWx0IGtleSBpcyB1c2VkIHRvIGRlY3J5cHQgdGhlIHBhY2tldAogCSAgIHRoZSBodyBkb2VzIG5vdCBzZXQgdGhlIGluZGV4IHVzZWQgdG8gZGVjcnlwdC4gIEluIHN1Y2ggY2FzZXMKIAkgICBnZXQgdGhlIGluZGV4IGZyb20gdGhlIHBhY2tldC4gKi8KLQlpZiAoKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpICYmCi0JCQkhKHJzLT5yc19zdGF0dXMgJiBBUjVLX1JYRVJSX0RFQ1JZUFQpICYmCi0JCQlza2ItPmxlbiA+PSBobGVuICsgNCkgeworCWlmIChpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJICAgICEocnMtPnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfREVDUllQVCkgJiYKKwkgICAgc2tiLT5sZW4gPj0gaGxlbiArIDQpIHsKIAkJa2V5aXggPSBza2ItPmRhdGFbaGxlbiArIDNdID4+IDY7CiAKIAkJaWYgKHRlc3RfYml0KGtleWl4LCBzYy0+a2V5bWFwKSkKQEAgLTE3MTksMTAgKzE2MjUsNyBAQAogCXUzMiBod190dTsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhOwogCi0JaWYgKChsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKSAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PQotCQlJRUVFODAyMTFfRlRZUEVfTUdNVCAmJgotCSAgICAobGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCkgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0KLQkJSUVFRTgwMjExX1NUWVBFX0JFQUNPTiAmJgorCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKG1nbXQtPmZyYW1lX2NvbnRyb2wpICYmCiAJICAgIGxlMTZfdG9fY3B1KG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8pICYgV0xBTl9DQVBBQklMSVRZX0lCU1MgJiYKIAkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBzYy0+YWgtPmFoX2Jzc2lkLCBFVEhfQUxFTikgPT0gMCkgewogCQkvKgpAQCAtMTg5NSwyMCArMTc5OCw5IEBACiAJCXJ4cy5mcmVxID0gc2MtPmN1cmNoYW4tPmNlbnRlcl9mcmVxOwogCQlyeHMuYmFuZCA9IHNjLT5jdXJiYW5kLT5iYW5kOwogCi0JCS8qCi0JCSAqIHNpZ25hbCBxdWFsaXR5OgotCQkgKiB0aGUgbmFtZXMgaGVyZSBhcmUgbWlzbGVhZGluZyBhbmQgdGhlIHVzYWdlIG9mIHRoZXNlCi0JCSAqIHZhbHVlcyBieSBpd2NvbmZpZyBtYWtlcyBpdCBldmVuIHdvcnNlCi0JCSAqLwotCQkvKiBub2lzZSBmbG9vciBpbiBkQm0sIGZyb20gdGhlIGxhc3Qgbm9pc2UgY2FsaWJyYXRpb24gKi8KIAkJcnhzLm5vaXNlID0gc2MtPmFoLT5haF9ub2lzZV9mbG9vcjsKLQkJLyogc2lnbmFsIGxldmVsIGluIGRCbSAqLwotCQlyeHMuc3NpID0gcnhzLm5vaXNlICsgcnMucnNfcnNzaTsKLQkJLyoKLQkJICogInNpZ25hbCIgaXMgYWN0dWFsbHkgZGlzcGxheWVkIGFzIExpbmsgUXVhbGl0eSBieSBpd2NvbmZpZwotCQkgKiB3ZSBwcm92aWRlIGEgcGVyY2VudGFnZSBiYXNlZCBvbiByc3NpIChhc3N1bWluZyBtYXggcnNzaSA2NCkKLQkJICovCi0JCXJ4cy5zaWduYWwgPSBycy5yc19yc3NpICogMTAwIC8gNjQ7CisJCXJ4cy5zaWduYWwgPSByeHMubm9pc2UgKyBycy5yc19yc3NpOworCQlyeHMucXVhbCA9IHJzLnJzX3Jzc2kgKiAxMDAgLyA2NDsKIAogCQlyeHMuYW50ZW5uYSA9IHJzLnJzX2FudGVubmE7CiAJCXJ4cy5yYXRlX2lkeCA9IGF0aDVrX2h3X3RvX2RyaXZlcl9yaXgoc2MsIHJzLnJzX3JhdGUpOwpAQCAtMTkyMSw4ICsxODEzLDYgQEAKIAkJCWF0aDVrX2NoZWNrX2lic3NfdHNmKHNjLCBza2IsICZyeHMpOwogCiAJCV9faWVlZTgwMjExX3J4KHNjLT5odywgc2tiLCAmcnhzKTsKLQkJc2MtPmxlZF9yeHJhdGUgPSBycy5yc19yYXRlOwotCQlhdGg1a19sZWRfZXZlbnQoc2MsIEFUSF9MRURfUlgpOwogbmV4dDoKIAkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmc2MtPnJ4YnVmKTsKIAl9IHdoaWxlIChhdGg1a19yeGJ1Zl9zZXR1cChzYywgYmYpID09IDApOwpAQCAtMTkzOSwxMSArMTgyOSwxMSBAQAogc3RhdGljIHZvaWQKIGF0aDVrX3R4X3Byb2Nlc3NxKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a190eHEgKnR4cSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyB0eHMgPSB7fTsKIAlzdHJ1Y3QgYXRoNWtfdHhfc3RhdHVzIHRzID0ge307CiAJc3RydWN0IGF0aDVrX2J1ZiAqYmYsICpiZjA7CiAJc3RydWN0IGF0aDVrX2Rlc2MgKmRzOwogCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCWludCByZXQ7CiAKIAlzcGluX2xvY2soJnR4cS0+bG9jayk7CkBAIC0xOTYzLDI4ICsxODUzLDI5IEBACiAJCX0KIAogCQlza2IgPSBiZi0+c2tiOworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCQliZi0+c2tiID0gTlVMTDsKKwogCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+c2tiYWRkciwgc2tiLT5sZW4sCiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAKLQkJdHhzLmNvbnRyb2wgPSBiZi0+Y3RsOwotCQl0eHMucmV0cnlfY291bnQgPSB0cy50c19zaG9ydHJldHJ5ICsgdHMudHNfbG9uZ3JldHJ5IC8gNjsKKwkJaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50ID0gdHMudHNfc2hvcnRyZXRyeSArIHRzLnRzX2xvbmdyZXRyeSAvIDY7CiAJCWlmICh1bmxpa2VseSh0cy50c19zdGF0dXMpKSB7CiAJCQlzYy0+bGxfc3RhdHMuZG90MTFBQ0tGYWlsdXJlQ291bnQrKzsKIAkJCWlmICh0cy50c19zdGF0dXMgJiBBUjVLX1RYRVJSX1hSRVRSWSkKLQkJCQl0eHMuZXhjZXNzaXZlX3JldHJpZXMgPSAxOworCQkJCWluZm8tPnN0YXR1cy5leGNlc3NpdmVfcmV0cmllcyA9IDE7CiAJCQllbHNlIGlmICh0cy50c19zdGF0dXMgJiBBUjVLX1RYRVJSX0ZJTFQpCi0JCQkJdHhzLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfVFhfRklMVEVSRUQ7CisJCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ7CiAJCX0gZWxzZSB7Ci0JCQl0eHMuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7Ci0JCQl0eHMuYWNrX3NpZ25hbCA9IHRzLnRzX3Jzc2k7CisJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCQlpbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IHRzLnRzX3Jzc2k7CiAJCX0KIAotCQlpZWVlODAyMTFfdHhfc3RhdHVzKHNjLT5odywgc2tiLCAmdHhzKTsKLQkJc2MtPnR4X3N0YXRzLmRhdGFbdHhxLT5xbnVtXS5jb3VudCsrOworCQlpZWVlODAyMTFfdHhfc3RhdHVzKHNjLT5odywgc2tiKTsKKwkJc2MtPnR4X3N0YXRzW3R4cS0+cW51bV0uY291bnQrKzsKIAogCQlzcGluX2xvY2soJnNjLT50eGJ1ZmxvY2spOwotCQlzYy0+dHhfc3RhdHMuZGF0YVt0eHEtPnFudW1dLmxlbi0tOworCQlzYy0+dHhfc3RhdHNbdHhxLT5xbnVtXS5sZW4tLTsKIAkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmc2MtPnR4YnVmKTsKIAkJc2MtPnR4YnVmX2xlbisrOwogCQlzcGluX3VubG9jaygmc2MtPnR4YnVmbG9jayk7CkBAIC0yMDAyLDEzICsxODkzLDkgQEAKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gKHZvaWQgKilkYXRhOwogCiAJYXRoNWtfdHhfcHJvY2Vzc3Eoc2MsIHNjLT50eHEpOwotCi0JYXRoNWtfbGVkX2V2ZW50KHNjLCBBVEhfTEVEX1RYKTsKIH0KIAogCi0KLQogLyoqKioqKioqKioqKioqKioqXAogKiBCZWFjb24gaGFuZGxpbmcgKgogXCoqKioqKioqKioqKioqKioqLwpAQCAtMjAxNywxMCArMTkwNCwxMCBAQAogICogU2V0dXAgdGhlIGJlYWNvbiBmcmFtZSBmb3IgdHJhbnNtaXQuCiAgKi8KIHN0YXRpYyBpbnQKLWF0aDVrX2JlYWNvbl9zZXR1cChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfYnVmICpiZiwKLQkJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCithdGg1a19iZWFjb25fc2V0dXAoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2J1ZiAqYmYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJmLT5za2I7CisJc3RydWN0CWllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CiAJc3RydWN0IGF0aDVrX2Rlc2MgKmRzOwogCWludCByZXQsIGFudGVubmEgPSAwOwpAQCAtMjA1OSw3ICsxOTQ2LDggQEAKIAlyZXQgPSBhaC0+YWhfc2V0dXBfdHhfZGVzYyhhaCwgZHMsIHNrYi0+bGVuLAogCQkJaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKSwKIAkJCUFSNUtfUEtUX1RZUEVfQkVBQ09OLCAoc2MtPnBvd2VyX2xldmVsICogMiksCi0JCQljdGwtPnR4X3JhdGUtPmh3X3ZhbHVlLCAxLCBBUjVLX1RYS0VZSVhfSU5WQUxJRCwKKwkJCWllZWU4MDIxMV9nZXRfdHhfcmF0ZShzYy0+aHcsIGluZm8pLT5od192YWx1ZSwKKwkJCTEsIEFSNUtfVFhLRVlJWF9JTlZBTElELAogCQkJYW50ZW5uYSwgZmxhZ3MsIDAsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3VubWFwOwpAQCAtMjM4MiwxMSArMjI3MCw3IEBACiAJaWVlZTgwMjExX3N0b3BfcXVldWVzKHNjLT5odyk7CiAKIAlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0lOVkFMSUQsIHNjLT5zdGF0dXMpKSB7Ci0JCWlmICh0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkgewotCQkJZGVsX3RpbWVyX3N5bmMoJnNjLT5sZWRfdGltKTsKLQkJCWF0aDVrX2h3X3NldF9ncGlvKGFoLCBzYy0+bGVkX3BpbiwgIXNjLT5sZWRfb24pOwotCQkJX19jbGVhcl9iaXQoQVRIX1NUQVRfTEVEQkxJTktJTkcsIHNjLT5zdGF0dXMpOwotCQl9CisJCWF0aDVrX2xlZF9vZmYoc2MpOwogCQlhdGg1a19od19zZXRfaW50cihhaCwgMCk7CiAJfQogCWF0aDVrX3R4cV9jbGVhbnVwKHNjKTsKQEAgLTI1ODIsNTQgKzI0NjYsMTIzIEBACiBcKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZAotYXRoNWtfbGVkX29mZih1bnNpZ25lZCBsb25nIGRhdGEpCithdGg1a19sZWRfZW5hYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9ICh2b2lkICopZGF0YTsKLQotCWlmICh0ZXN0X2JpdChBVEhfU1RBVF9MRURFTkRCTElOSywgc2MtPnN0YXR1cykpCi0JCV9fY2xlYXJfYml0KEFUSF9TVEFUX0xFREJMSU5LSU5HLCBzYy0+c3RhdHVzKTsKLQllbHNlIHsKLQkJX19zZXRfYml0KEFUSF9TVEFUX0xFREVOREJMSU5LLCBzYy0+c3RhdHVzKTsKLQkJYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3BpbiwgIXNjLT5sZWRfb24pOwotCQltb2RfdGltZXIoJnNjLT5sZWRfdGltLCBqaWZmaWVzICsgc2MtPmxlZF9vZmYpOworCWlmICh0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkgeworCQlhdGg1a19od19zZXRfZ3Bpb19vdXRwdXQoc2MtPmFoLCBzYy0+bGVkX3Bpbik7CisJCWF0aDVrX2xlZF9vZmYoc2MpOwogCX0KIH0KIAotLyoKLSAqIEJsaW5rIHRoZSBMRUQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgb24vb2ZmIHRpbWVzLgotICovCiBzdGF0aWMgdm9pZAotYXRoNWtfbGVkX2JsaW5rKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBvbiwKLQkJdW5zaWduZWQgaW50IG9mZikKK2F0aDVrX2xlZF9vbihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewotCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfTEVELCAib24gJXUgb2ZmICV1XG4iLCBvbiwgb2ZmKTsKLQlhdGg1a19od19zZXRfZ3BpbyhzYy0+YWgsIHNjLT5sZWRfcGluLCBzYy0+bGVkX29uKTsKLQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEQkxJTktJTkcsIHNjLT5zdGF0dXMpOwotCV9fY2xlYXJfYml0KEFUSF9TVEFUX0xFREVOREJMSU5LLCBzYy0+c3RhdHVzKTsKLQlzYy0+bGVkX29mZiA9IG9mZjsKLQltb2RfdGltZXIoJnNjLT5sZWRfdGltLCBqaWZmaWVzICsgb24pOwotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfbGVkX2V2ZW50KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGludCBldmVudCkKLXsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkpCisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKIAkJcmV0dXJuOwotCWlmICh1bmxpa2VseSh0ZXN0X2JpdChBVEhfU1RBVF9MRURCTElOS0lORywgc2MtPnN0YXR1cykpKQotCQlyZXR1cm47IC8qIGRvbid0IGludGVycnVwdCBhY3RpdmUgYmxpbmsgKi8KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBBVEhfTEVEX1RYOgotCQlhdGg1a19sZWRfYmxpbmsoc2MsIHNjLT5od21hcFtzYy0+bGVkX3R4cmF0ZV0ubGVkb24sCi0JCQlzYy0+aHdtYXBbc2MtPmxlZF90eHJhdGVdLmxlZG9mZik7Ci0JCWJyZWFrOwotCWNhc2UgQVRIX0xFRF9SWDoKLQkJYXRoNWtfbGVkX2JsaW5rKHNjLCBzYy0+aHdtYXBbc2MtPmxlZF9yeHJhdGVdLmxlZG9uLAotCQkJc2MtPmh3bWFwW3NjLT5sZWRfcnhyYXRlXS5sZWRvZmYpOwotCQlicmVhazsKKwlhdGg1a19od19zZXRfZ3BpbyhzYy0+YWgsIHNjLT5sZWRfcGluLCBzYy0+bGVkX29uKTsKK30KKworc3RhdGljIHZvaWQKK2F0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQorCQlyZXR1cm47CisJYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3BpbiwgIXNjLT5sZWRfb24pOworfQorCitzdGF0aWMgdm9pZAorYXRoNWtfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCisJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBhdGg1a19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgYXRoNWtfbGVkLAorCQlsZWRfZGV2KTsKKworCWlmIChicmlnaHRuZXNzID09IExFRF9PRkYpCisJCWF0aDVrX2xlZF9vZmYobGVkLT5zYyk7CisJZWxzZQorCQlhdGg1a19sZWRfb24obGVkLT5zYyk7Cit9CisKK3N0YXRpYyBpbnQKK2F0aDVrX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfbGVkICpsZWQsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJaW50IGVycjsKKworCWxlZC0+c2MgPSBzYzsKKwlzdHJuY3B5KGxlZC0+bmFtZSwgbmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSkpOworCWxlZC0+bGVkX2Rldi5uYW1lID0gbGVkLT5uYW1lOworCWxlZC0+bGVkX2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDVrX2xlZF9icmlnaHRuZXNzX3NldDsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcigmc2MtPnBkZXYtPmRldiwgJmxlZC0+bGVkX2Rldik7CisJaWYgKGVycikKKwl7CisJCUFUSDVLX1dBUk4oc2MsICJjb3VsZCBub3QgcmVnaXN0ZXIgTEVEICVzXG4iLCBuYW1lKTsKKwkJbGVkLT5zYyA9IE5VTEw7CiAJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCithdGg1a191bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoNWtfbGVkICpsZWQpCit7CisJaWYgKCFsZWQtPnNjKQorCQlyZXR1cm47CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2Rldik7CisJYXRoNWtfbGVkX29mZihsZWQtPnNjKTsKKwlsZWQtPnNjID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2F0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+cnhfbGVkKTsKKwlhdGg1a191bnJlZ2lzdGVyX2xlZCgmc2MtPnR4X2xlZCk7CiB9CiAKIAorc3RhdGljIGludAorYXRoNWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBzYy0+cGRldjsKKwljaGFyIG5hbWVbQVRINUtfTEVEX01BWF9OQU1FX0xFTiArIDFdOworCisJc2MtPmxlZF9vbiA9IDA7ICAvKiBhY3RpdmUgbG93ICovCisKKwkvKgorCSAqIEF1dG8tZW5hYmxlIHNvZnQgbGVkIHByb2Nlc3NpbmcgZm9yIElCTSBjYXJkcyBhbmQgZm9yCisJICogNTIxMSBtaW5pcGNpIGNhcmRzLgorCSAqLworCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMl9JQk0gfHwKKwkgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTEpIHsKKwkJX19zZXRfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpOworCQlzYy0+bGVkX3BpbiA9IDA7CisJfQorCS8qIEVuYWJsZSBzb2Z0bGVkIG9uIFBJTjEgb24gSFAgQ29tcGFxIG5jNnh4LCBuYzQwMDAgJiBueDUwMDAgbGFwdG9wcyAqLworCWlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ09NUEFRKSB7CisJCV9fc2V0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKTsKKwkJc2MtPmxlZF9waW4gPSAxOworCX0KKwlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQorCQlnb3RvIG91dDsKKworCWF0aDVrX2xlZF9lbmFibGUoc2MpOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXRoNWstJXM6OnJ4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwlyZXQgPSBhdGg1a19yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCBuYW1lLAorCQlpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKGh3KSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIG5hbWUsCisJCWllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoaHcpKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKlwKQEAgLTI2MzcsOCArMjU5MCw3IEBACiBcKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQKLWF0aDVrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCithdGg1a190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJc3RydWN0IGF0aDVrX2J1ZiAqYmY7CkBAIC0yNjY3LDEzICsyNjE5LDExIEBACiAJCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGErcGFkLCBoZHJsZW4pOwogCX0KIAotCXNjLT5sZWRfdHhyYXRlID0gY3RsLT50eF9yYXRlLT5od192YWx1ZTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+dHhidWZsb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJnNjLT50eGJ1ZikpIHsKIAkJQVRINUtfRVJSKHNjLCAibm8gZnVydGhlciB0eGJ1ZiBhdmFpbGFibGUsIGRyb3BwaW5nIHBhY2tldFxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT50eGJ1ZmxvY2ssIGZsYWdzKTsKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIGN0bC0+cXVldWUpOworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCQlyZXR1cm4gLTE7CiAJfQogCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmc2MtPnR4YnVmLCBzdHJ1Y3QgYXRoNWtfYnVmLCBsaXN0KTsKQEAgLTI2ODUsNyArMjYzNSw3IEBACiAKIAliZi0+c2tiID0gc2tiOwogCi0JaWYgKGF0aDVrX3R4YnVmX3NldHVwKHNjLCBiZiwgY3RsKSkgeworCWlmIChhdGg1a190eGJ1Zl9zZXR1cChzYywgYmYpKSB7CiAJCWJmLT5za2IgPSBOVUxMOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPnR4YnVmbG9jaywgZmxhZ3MpOwogCQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJnNjLT50eGJ1Zik7CkBAIC0yODM0LDYgKzI3ODQsMTggQEAKIAkJICogYSBjbGVhbiB3YXkgb2YgbGV0dGluZyB1cyByZXRyaWV2ZSB0aGlzIHlldC4gKi8KIAkJYXRoNWtfaHdfc2V0X2Fzc29jaWQoYWgsIGFoLT5haF9ic3NpZCwgMCk7CiAJfQorCisJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04gJiYKKwkgICAgdmlmLT50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOworCQlpZiAoIWJlYWNvbikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCS8qIGNhbGwgb2xkIGhhbmRsZXIgZm9yIG5vdyAqLworCQlhdGg1a19iZWFjb25fdXBkYXRlKGh3LCBiZWFjb24pOworCX0KKwogCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwogCiAJcmV0dXJuIGF0aDVrX3Jlc2V0KGh3KTsKQEAgLTMwNjMsOCArMzAyNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWF0aDVrX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0bCkKK2F0aDVrX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCWludCByZXQ7CkBAIC0zMDgwLDcgKzMwNDEsNyBAQAogCiAJYXRoNWtfdHhidWZfZnJlZShzYywgc2MtPmJidWYpOwogCXNjLT5iYnVmLT5za2IgPSBza2I7Ci0JcmV0ID0gYXRoNWtfYmVhY29uX3NldHVwKHNjLCBzYy0+YmJ1ZiwgY3RsKTsKKwlyZXQgPSBhdGg1a19iZWFjb25fc2V0dXAoc2MsIHNjLT5iYnVmKTsKIAlpZiAocmV0KQogCQlzYy0+YmJ1Zi0+c2tiID0gTlVMTDsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmgKaW5kZXggM2E5NzU1OC4uNDdmNDE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjaW5jbHVkZSAiYXRoNWsuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgpAQCAtNjAsNyArNjEsNiBAQAogCWRtYV9hZGRyX3QJCWRhZGRyOwkvKiBwaHlzaWNhbCBhZGRyIG9mIGRlc2MgKi8KIAlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsJLyogc2tidWZmIGZvciBidWYgKi8KIAlkbWFfYWRkcl90CQlza2JhZGRyOy8qIHBoeXNpY2FsIGFkZHIgb2Ygc2tiIGRhdGEgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY3RsOwogfTsKIAogLyoKQEAgLTgwLDYgKzgwLDE5IEBACiAJYm9vbAkJCXNldHVwOwogfTsKIAorI2RlZmluZSBBVEg1S19MRURfTUFYX05BTUVfTEVOIDMxCisKKy8qCisgKiBTdGF0ZSBmb3IgTEVEIHRyaWdnZXJzCisgKi8KK3N0cnVjdCBhdGg1a19sZWQKK3sKKwljaGFyIG5hbWVbQVRINUtfTEVEX01BWF9OQU1FX0xFTiArIDFdOwkvKiBuYW1lIG9mIHRoZSBMRUQgaW4gc3lzZnMgKi8KKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjOwkJCS8qIGRyaXZlciBzdGF0ZSAqLworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2RldjsJCS8qIGxlZCBjbGFzc2RldiAqLworfTsKKworCiAjaWYgQ0hBTl9ERUJVRwogI2RlZmluZSBBVEhfQ0hBTl9NQVgJKDI2KzI2KzI2KzIwMCsyMDApCiAjZWxzZQpAQCAtOTIsNyArMTA1LDggQEAKIAlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CQkvKiBmb3IgZG1hIG1hcHBpbmcgKi8KIAl2b2lkIF9faW9tZW0JCSppb2Jhc2U7CS8qIGFkZHJlc3Mgb2YgdGhlIGRldmljZSAqLwogCXN0cnVjdCBtdXRleAkJbG9jazsJCS8qIGRldi1sZXZlbCBsb2NrICovCi0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0czsKKwkvKiBGSVhNRTogaG93IG1hbnkgZG9lcyBpdCByZWFsbHkgbmVlZD8gKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzWzE2XTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyBsbF9zdGF0czsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3CSpodzsJCS8qIElFRUUgODAyLjExIGNvbW1vbiAqLwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwpAQCAtMTE4LDEzICsxMzIsMTEgQEAKIAlzaXplX3QJCQlkZXNjX2xlbjsJLyogc2l6ZSBvZiBUWC9SWCBkZXNjcmlwdG9ycyAqLwogCXUxNgkJCWNhY2hlbHN6OwkvKiBjYWNoZSBsaW5lIHNpemUgKi8KIAotCURFQ0xBUkVfQklUTUFQKHN0YXR1cywgNik7CisJREVDTEFSRV9CSVRNQVAoc3RhdHVzLCA0KTsKICNkZWZpbmUgQVRIX1NUQVRfSU5WQUxJRAkwCQkvKiBkaXNhYmxlIGhhcmR3YXJlIGFjY2Vzc2VzICovCiAjZGVmaW5lIEFUSF9TVEFUX01SUkVUUlkJMQkJLyogbXVsdGktcmF0ZSByZXRyeSBzdXBwb3J0ICovCiAjZGVmaW5lIEFUSF9TVEFUX1BST01JU0MJMgotI2RlZmluZSBBVEhfU1RBVF9MRURCTElOS0lORwkzCQkvKiBMRUQgYmxpbmsgb3BlcmF0aW9uIGFjdGl2ZSAqLwotI2RlZmluZSBBVEhfU1RBVF9MRURFTkRCTElOSwk0CQkvKiBmaW5pc2ggTEVEIGJsaW5rIG9wZXJhdGlvbiAqLwotI2RlZmluZSBBVEhfU1RBVF9MRURTT0ZUCTUJCS8qIGVuYWJsZSBMRUQgZ3BpbyBzdGF0dXMgKi8KKyNkZWZpbmUgQVRIX1NUQVRfTEVEU09GVAkzCQkvKiBlbmFibGUgTEVEIGdwaW8gc3RhdHVzICovCiAKIAl1bnNpZ25lZCBpbnQJCWZpbHRlcl9mbGFnczsJLyogSFcgZmxhZ3MsIEFSNUtfUlhfRklMVEVSXyogKi8KIAl1bnNpZ25lZCBpbnQJCWN1cm1vZGU7CS8qIGN1cnJlbnQgcGh5IG1vZGUgKi8KQEAgLTEzMiwxMyArMTQ0LDYgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CiAKLQlzdHJ1Y3QgewotCQl1OAlyeGZsYWdzOwkvKiByYWRpb3RhcCByeCBmbGFncyAqLwotCQl1OAl0eGZsYWdzOwkvKiByYWRpb3RhcCB0eCBmbGFncyAqLwotCQl1MTYJbGVkb247CQkvKiBzb2Z0bGVkIG9uIHRpbWUgKi8KLQkJdTE2CWxlZG9mZjsJCS8qIHNvZnRsZWQgb2ZmIHRpbWUgKi8KLQl9IGh3bWFwWzMyXTsJCQkJLyogaC93IHJhdGUgaXggbWFwcGluZ3MgKi8KLQogCWVudW0gYXRoNWtfaW50CQlpbWFzazsJCS8qIGludGVycnVwdCBtYXNrIGNvcHkgKi8KIAogCURFQ0xBUkVfQklUTUFQKGtleW1hcCwgQVI1S19LRVlDQUNIRV9TSVpFKTsgLyoga2V5IHVzZSBiaXQgbWFwICovCkBAIC0xNDgsOSArMTUzLDYgQEAKIAl1bnNpZ25lZCBpbnQJCWxlZF9waW4sCS8qIEdQSU8gcGluIGZvciBkcml2aW5nIExFRCAqLwogCQkJCWxlZF9vbiwJCS8qIHBpbiBzZXR0aW5nIGZvciBMRUQgb24gKi8KIAkJCQlsZWRfb2ZmOwkvKiBvZmYgdGltZSBmb3IgY3VycmVudCBibGluayAqLwotCXN0cnVjdCB0aW1lcl9saXN0CWxlZF90aW07CS8qIGxlZCBvZmYgdGltZXIgKi8KLQl1OAkJCWxlZF9yeHJhdGU7CS8qIGN1cnJlbnQgcnggcmF0ZSBmb3IgTEVEICovCi0JdTgJCQlsZWRfdHhyYXRlOwkvKiBjdXJyZW50IHR4IHJhdGUgZm9yIExFRCAqLwogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXJlc3RxOwkJLyogcmVzZXQgdGFza2xldCAqLwogCkBAIC0xNTksNiArMTYxLDcgQEAKIAlzcGlubG9ja190CQlyeGJ1ZmxvY2s7CiAJdTMyCQkJKnJ4bGluazsJLyogbGluayBwdHIgaW4gbGFzdCBSWCBkZXNjICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXJ4dHE7CQkvKiByeCBpbnRyIHRhc2tsZXQgKi8KKwlzdHJ1Y3QgYXRoNWtfbGVkCXJ4X2xlZDsJCS8qIHJ4IGxlZCAqLwogCiAJc3RydWN0IGxpc3RfaGVhZAl0eGJ1ZjsJCS8qIHRyYW5zbWl0IGJ1ZmZlciAqLwogCXNwaW5sb2NrX3QJCXR4YnVmbG9jazsKQEAgLTE2Nyw2ICsxNzAsNyBAQAogCiAJc3RydWN0IGF0aDVrX3R4cQkqdHhxOwkJLyogYmVhY29uIGFuZCB0eCovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXR4dHE7CQkvKiB0eCBpbnRyIHRhc2tsZXQgKi8KKwlzdHJ1Y3QgYXRoNWtfbGVkCXR4X2xlZDsJCS8qIHR4IGxlZCAqLwogCiAJc3RydWN0IGF0aDVrX2J1ZgkqYmJ1ZjsJCS8qIGJlYWNvbiBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQJCWJoYWxxLAkJLyogU1cgcSBmb3Igb3V0Z29pbmcgYmVhY29ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2h3LmMKaW5kZXggNzc5OTBiNS4uYzZkMTJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ody5jCkBAIC0zMSwxNCArMzEsMTQgQEAKICNpbmNsdWRlICJiYXNlLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotLypSYXRlIHRhYmxlcyovCisvKiBSYXRlIHRhYmxlcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yYXRlX3RhYmxlIGF0aDVrX3J0XzExYSA9IEFSNUtfUkFURVNfMTFBOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yYXRlX3RhYmxlIGF0aDVrX3J0XzExYiA9IEFSNUtfUkFURVNfMTFCOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yYXRlX3RhYmxlIGF0aDVrX3J0XzExZyA9IEFSNUtfUkFURVNfMTFHOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yYXRlX3RhYmxlIGF0aDVrX3J0X3R1cmJvID0gQVI1S19SQVRFU19UVVJCTzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmF0ZV90YWJsZSBhdGg1a19ydF94ciA9IEFSNUtfUkFURVNfWFI7CiAKLS8qUHJvdG90eXBlcyovCisvKiBQcm90b3R5cGVzICovCiBzdGF0aWMgaW50IGF0aDVrX2h3X25pY19yZXNldChzdHJ1Y3QgYXRoNWtfaHcgKiwgdTMyKTsKIHN0YXRpYyBpbnQgYXRoNWtfaHdfbmljX3dha2V1cChzdHJ1Y3QgYXRoNWtfaHcgKiwgaW50LCBib29sKTsKIHN0YXRpYyBpbnQgYXRoNWtfaHdfc2V0dXBfNHdvcmRfdHhfZGVzYyhzdHJ1Y3QgYXRoNWtfaHcgKiwgc3RydWN0IGF0aDVrX2Rlc2MgKiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IGQxYWNlZjcuLmJkMzViYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtNDMzLDcgKzQzMyw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZGV2aWNlICpzeXNfZGV2OwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsJLy8gZGV2aWNlIHN0YXRzCiAJc3BpbmxvY2tfdCBpcnFsb2NrLCB0aW1lcmxvY2s7CS8vIHNwaW5sb2NrcwogCWVudW0geyBCVVNfVFlQRV9QQ0NBUkQsIEJVU19UWVBFX1BDSSB9IGJ1c190eXBlOwogCWVudW0gewpAQCAtNjk0LDkgKzY5Myw5IEBACiAKIAkJaWYgKHR5cGUgPT0gVFhfUEFDS0VUX1RZUEVfREFUQSkgewogCQkJaWYgKHN0YXR1cyA9PSBUWF9TVEFUVVNfU1VDQ0VTUykKLQkJCQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQllbHNlCi0JCQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKIAkJfQogCX0KQEAgLTc5MiwxMyArNzkxLDEzIEBACiAKIAlpZiAocHJpdi0+Y2FyZCAmJiBwcml2LT5wcmVzZW50X2NhbGxiYWNrICYmCiAJICAgICEoKnByaXYtPnByZXNlbnRfY2FsbGJhY2spKHByaXYtPmNhcmQpKSB7Ci0JCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChwcml2LT5zdGF0aW9uX3N0YXRlICE9IFNUQVRJT05fU1RBVEVfUkVBRFkpIHsKLQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODE1LDcgKzgxNCw3IEBACiAJICAgaW5pdGlhbCArIDE4ICgrMzAtMTIpICovCiAKIAlpZiAoIShidWZmID0gZmluZF90eF9idWZmKHByaXYsIGxlbiArIDE4KSkpIHsKLQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aXJxbG9jaywgZmxhZ3MpOwogCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dGltZXJsb2NrKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwpAQCAtODUxLDcgKzg1MCw3IEBACiAJLyogbG93IGJpdCBvZiBmaXJzdCBieXRlIG9mIGRlc3RpbmF0aW9uIHRlbGxzIHVzIGlmIGJyb2FkY2FzdCAqLwogCXR4X3VwZGF0ZV9kZXNjcmlwdG9yKHByaXYsICooc2tiLT5kYXRhKSAmIDB4MDEsIGxlbiArIDE4LCBidWZmLCBUWF9QQUNLRVRfVFlQRV9EQVRBKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pcnFsb2NrLCBmbGFncyk7CiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnRpbWVybG9jayk7CkBAIC04OTUsNyArODk0LDcgQEAKIAl9CiAKIAlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKG1zZHVfc2l6ZSArIDE0KSkpIHsKLQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTA4LDcgKzkwNyw3IEBACiAJCWNyYyA9IGNyYzMyX2xlKGNyYywgc2ticCArIDEyLCBtc2R1X3NpemUpOwogCQlhdG1lbF9jb3B5X3RvX2hvc3QocHJpdi0+ZGV2LCAodm9pZCAqKSZuZXRjcmMsIHJ4X3BhY2tldF9sb2MgKyAzMCArIG1zZHVfc2l6ZSwgNCk7CiAJCWlmICgoY3JjIF4gMHhmZmZmZmZmZikgIT0gbmV0Y3JjKSB7Ci0JCQlwcml2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtOTI0LDggKzkyMyw4IEBACiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcHJpdi0+ZGV2KTsKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJbmV0aWZfcngoc2tiKTsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSAxMiArIG1zZHVfc2l6ZTsKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJcHJpdi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSAxMiArIG1zZHVfc2l6ZTsKKwlwcml2LT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIH0KIAogLyogVGVzdCB0byBzZWUgaWYgdGhlIHBhY2tldCBpbiBjYXJkIG1lbW9yeSBhdCBwYWNrZXRfbG9jIGhhcyBhIHZhbGlkIENSQwpAQCAtOTkxLDcgKzk5MCw3IEBACiAJCQljcmMgPSBjcmMzMl9sZShjcmMsICZwcml2LT5yeF9idWZbMTJdLCBtc2R1X3NpemUpOwogCQkJYXRtZWxfY29weV90b19ob3N0KHByaXYtPmRldiwgKHZvaWQgKikmbmV0Y3JjLCByeF9wYWNrZXRfbG9jICsgbXNkdV9zaXplLCA0KTsKIAkJCWlmICgoY3JjIF4gMHhmZmZmZmZmZikgIT0gbmV0Y3JjKSB7Ci0JCQkJcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJCW1lbXNldChwcml2LT5mcmFnX3NvdXJjZSwgMHhmZiwgNik7CiAJCQl9CiAJCX0KQEAgLTEwMDksNyArMTAwOCw3IEBACiAJCQkJICAgICAgIG1zZHVfc2l6ZSk7CiAJCQlhdG1lbF9jb3B5X3RvX2hvc3QocHJpdi0+ZGV2LCAodm9pZCAqKSZuZXRjcmMsIHJ4X3BhY2tldF9sb2MgKyBtc2R1X3NpemUsIDQpOwogCQkJaWYgKChjcmMgXiAweGZmZmZmZmZmKSAhPSBuZXRjcmMpIHsKLQkJCQlwcml2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQkJbWVtc2V0KHByaXYtPmZyYWdfc291cmNlLCAweGZmLCA2KTsKIAkJCQltb3JlX2ZyYWdzID0gMTsgLyogZG9uJ3Qgc2VuZCBicm9rZW4gYXNzZW1ibHkgKi8KIAkJCX0KQEAgLTEwMjEsNyArMTAyMCw3IEBACiAJCWlmICghbW9yZV9mcmFncykgeyAvKiBsYXN0IG9uZSAqLwogCQkJbWVtc2V0KHByaXYtPmZyYWdfc291cmNlLCAweGZmLCA2KTsKIAkJCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IocHJpdi0+ZnJhZ19sZW4gKyAxNCkpKSB7Ci0JCQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJfSBlbHNlIHsKIAkJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwogCQkJCW1lbWNweShza2JfcHV0KHNrYiwgcHJpdi0+ZnJhZ19sZW4gKyAxMiksCkBAIC0xMDMxLDggKzEwMzAsOCBAQAogCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHByaXYtPmRldik7CiAJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQkJCW5ldGlmX3J4KHNrYik7Ci0JCQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gcHJpdi0+ZnJhZ19sZW4gKyAxMjsKLQkJCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwcml2LT5mcmFnX2xlbiArIDEyOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJfQogCQl9CiAJfSBlbHNlCkBAIC0xMDU3LDcgKzEwNTYsNyBAQAogCQkJaWYgKHN0YXR1cyA9PSAweGMxKSAvKiBkZXRlcm1pbmVkIGJ5IGV4cGVyaW1lbnQgKi8KIAkJCQlwcml2LT53c3RhdHMuZGlzY2FyZC5ud2lkKys7CiAJCQllbHNlCi0JCQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWdvdG8gbmV4dDsKIAkJfQogCkBAIC0xMDY1LDcgKzEwNjQsNyBAQAogCQlyeF9wYWNrZXRfbG9jID0gYXRtZWxfcm1lbTE2KHByaXYsIGF0bWVsX3J4KHByaXYsIFJYX0RFU0NfTVNEVV9QT1NfT0ZGU0VULCBwcml2LT5yeF9kZXNjX2hlYWQpKTsKIAogCQlpZiAobXNkdV9zaXplIDwgMzApIHsKLQkJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWdvdG8gbmV4dDsKIAkJfQogCkBAIC0xMTIzLDcgKzExMjIsNyBAQAogCQkJCW1zZHVfc2l6ZSAtPSA0OwogCQkJCWNyYyA9IGNyYzMyX2xlKGNyYywgKHVuc2lnbmVkIGNoYXIgKikmcHJpdi0+cnhfYnVmLCBtc2R1X3NpemUpOwogCQkJCWlmICgoY3JjIF4gMHhmZmZmZmZmZikgIT0gKCooKHUzMiAqKSZwcml2LT5yeF9idWZbbXNkdV9zaXplXSkpKSB7Ci0JCQkJCXByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQkJCWdvdG8gbmV4dDsKIAkJCQl9CiAJCQl9CkBAIC0xMjUwLDEyICsxMjQ5LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXRtZWxfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmcHJpdi0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqYXRtZWxfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTUxOCw4ICsxNTExLDYgQEAKIAkJcHJpdi0+Y3JjX29rX2NudCA9IHByaXYtPmNyY19rb19jbnQgPSAwOwogCX0gZWxzZQogCQlwcml2LT5wcm9iZV9jcmMgPSAwOwotCW1lbXNldCgmcHJpdi0+c3RhdHMsIDAsIHNpemVvZihwcml2LT5zdGF0cykpOwotCW1lbXNldCgmcHJpdi0+d3N0YXRzLCAwLCBzaXplb2YocHJpdi0+d3N0YXRzKSk7CiAJcHJpdi0+bGFzdF9xdWFsID0gamlmZmllczsKIAlwcml2LT5sYXN0X2JlYWNvbl90aW1lc3RhbXAgPSAwOwogCW1lbXNldChwcml2LT5mcmFnX3NvdXJjZSwgMHhmZiwgc2l6ZW9mKHByaXYtPmZyYWdfc291cmNlKSk7CkBAIC0xNTY4LDcgKzE1NTksNiBAQAogCWRldi0+Y2hhbmdlX210dSA9IGF0bWVsX2NoYW5nZV9tdHU7CiAJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBhdG1lbF9zZXRfbWFjX2FkZHJlc3M7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzdGFydF90eDsKLQlkZXYtPmdldF9zdGF0cyA9IGF0bWVsX2dldF9zdGF0czsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZhdG1lbF9oYW5kbGVyX2RlZjsKIAlkZXYtPmRvX2lvY3RsID0gYXRtZWxfaW9jdGw7CiAJZGV2LT5pcnEgPSBpcnE7CkBAIC0yMzIwLDMwICsyMzEwLDQwIEBACiAJCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CiAJCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBwcml2LT5CU1NpbmZvW2ldLkJTU0lELCA2KTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCSAgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLAorCQkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7CiAKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSAgcHJpdi0+QlNTaW5mb1tpXS5TU0lEc2l6ZTsKIAkJaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCiAJCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOwogCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwogCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgJml3ZSwgcHJpdi0+QlNTaW5mb1tpXS5TU0lEKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkgIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwKKwkJCQkJCSAgJml3ZSwgcHJpdi0+QlNTaW5mb1tpXS5TU0lEKTsKIAogCQlpd2UuY21kID0gU0lPQ0dJV01PREU7CiAJCWl3ZS51Lm1vZGUgPSBwcml2LT5CU1NpbmZvW2ldLkJTU3R5cGU7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkgIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwogCiAJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKIAkJaXdlLnUuZnJlcS5tID0gcHJpdi0+QlNTaW5mb1tpXS5jaGFubmVsOwogCQlpd2UudS5mcmVxLmUgPSAwOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJICBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsCisJCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKIAogCQkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzICovCiAJCWl3ZS5jbWQgPSBJV0VWUVVBTDsKIAkJaXdlLnUucXVhbC5sZXZlbCA9IHByaXYtPkJTU2luZm9baV0uUlNTSTsKIAkJaXdlLnUucXVhbC5xdWFsICA9IGl3ZS51LnF1YWwubGV2ZWw7CiAJCS8qIGl3ZS51LnF1YWwubm9pc2UgID0gU09NRVRISU5HICovCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEgLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJICBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsCisJCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKIAogCiAJCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwpAQCAtMjM1Miw3ICsyMzUyLDkgQEAKIAkJZWxzZQogCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmaXdlLCBOVUxMKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkgIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwKKwkJCQkJCSAgJml3ZSwgTlVMTCk7CiAJfQogCiAJLyogTGVuZ3RoIG9mIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAppbmRleCBkM2RiMjk4Li5lZGNkZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCkBAIC00MTAsOCArNDEwLDcgQEAKICNkZWZpbmUgQjQzX0lSUV9USU1FT1VUCQkJMHg4MDAwMDAwMAogCiAjZGVmaW5lIEI0M19JUlFfQUxMCQkJMHhGRkZGRkZGRgotI2RlZmluZSBCNDNfSVJRX01BU0tURU1QTEFURQkJKEI0M19JUlFfTUFDX1NVU1BFTkRFRCB8IFwKLQkJCQkJIEI0M19JUlFfVEJUVF9JTkRJIHwgXAorI2RlZmluZSBCNDNfSVJRX01BU0tURU1QTEFURQkJKEI0M19JUlFfVEJUVF9JTkRJIHwgXAogCQkJCQkgQjQzX0lSUV9BVElNX0VORCB8IFwKIAkJCQkJIEI0M19JUlFfUE1RIHwgXAogCQkJCQkgQjQzX0lSUV9NQUNfVFhFUlIgfCBcCkBAIC00MjMsNiArNDIyLDI4IEBACiAJCQkJCSBCNDNfSVJRX1JGS0lMTCB8IFwKIAkJCQkJIEI0M19JUlFfVFhfT0spCiAKKy8qIFRoZSBmaXJtd2FyZSByZWdpc3RlciB0byBmZXRjaCB0aGUgZGVidWctSVJRIHJlYXNvbiBmcm9tLiAqLworI2RlZmluZSBCNDNfREVCVUdJUlFfUkVBU09OX1JFRwkJNjMKKy8qIERlYnVnLUlSUSByZWFzb25zLiAqLworI2RlZmluZSBCNDNfREVCVUdJUlFfUEFOSUMJCTAJLyogVGhlIGZpcm13YXJlIHBhbmljJ2VkICovCisjZGVmaW5lIEI0M19ERUJVR0lSUV9EVU1QX1NITQkJMQkvKiBEdW1wIHNoYXJlZCBTSE0gKi8KKyNkZWZpbmUgQjQzX0RFQlVHSVJRX0RVTVBfUkVHUwkJMgkvKiBEdW1wIHRoZSBtaWNyb2NvZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIEI0M19ERUJVR0lSUV9NQVJLRVIJCTMJLyogQSAibWFya2VyIiB3YXMgdGhyb3duIGJ5IHRoZSBmaXJtd2FyZS4gKi8KKyNkZWZpbmUgQjQzX0RFQlVHSVJRX0FDSwkJMHhGRkZGCS8qIFRoZSBob3N0IHdyaXRlcyB0aGF0IHRvIEFDSyB0aGUgSVJRICovCisKKy8qIFRoZSBmaXJtd2FyZSByZWdpc3RlciB0aGF0IGNvbnRhaW5zIHRoZSAibWFya2VyIiBsaW5lLiAqLworI2RlZmluZSBCNDNfTUFSS0VSX0lEX1JFRwkJMgorI2RlZmluZSBCNDNfTUFSS0VSX0xJTkVfUkVHCQkzCisKKy8qIFRoZSBmaXJtd2FyZSByZWdpc3RlciB0byBmZXRjaCB0aGUgcGFuaWMgcmVhc29uIGZyb20uICovCisjZGVmaW5lIEI0M19GV1BBTklDX1JFQVNPTl9SRUcJCTMKKy8qIEZpcm13YXJlIHBhbmljIHJlYXNvbiBjb2RlcyAqLworI2RlZmluZSBCNDNfRldQQU5JQ19ESUUJCQkwIC8qIEZpcm13YXJlIGRpZWQuIERvbid0IGF1dG8tcmVzdGFydCBpdC4gKi8KKyNkZWZpbmUgQjQzX0ZXUEFOSUNfUkVTVEFSVAkJMSAvKiBGaXJtd2FyZSBkaWVkLiBTY2hlZHVsZSBhIGNvbnRyb2xsZXIgcmVzZXQuICovCisKKy8qIFRoZSBmaXJtd2FyZSByZWdpc3RlciB0aGF0IGNvbnRhaW5zIHRoZSB3YXRjaGRvZyBjb3VudGVyLiAqLworI2RlZmluZSBCNDNfV0FUQ0hET0dfUkVHCQkxCisKIC8qIERldmljZSBzcGVjaWZpYyByYXRlIHZhbHVlcy4KICAqIFRoZSBhY3R1YWwgdmFsdWVzIGRlZmluZWQgaGVyZSBhcmUgKHJhdGVfaW5fbWJwcyAqIDIpLgogICogU29tZSBjb2RlIGRlcGVuZHMgb24gdGhpcy4gRG9uJ3QgY2hhbmdlIGl0LiAqLwpAQCAtNzMzLDcgKzc1NCw2IEBACiAJLyogVGhlIGJlYWNvbiB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIChBUCBvciBJQlNTIG1vZGUpLgogCSAqIFRoaXMgYmVhY29uIHN0dWZmIGlzIHByb3RlY3RlZCBieSB0aGUgaXJxX2xvY2suICovCiAJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfYmVhY29uOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBiZWFjb25fdHhjdGw7CiAJYm9vbCBiZWFjb24wX3VwbG9hZGVkOwogCWJvb2wgYmVhY29uMV91cGxvYWRlZDsKIAlib29sIGJlYWNvbl90ZW1wbGF0ZXNfdmlyZ2luOyAvKiBOZXZlciB3cm90ZSB0aGUgdGVtcGxhdGVzPyAqLwpAQCAtNzY3LDYgKzc4NywxMyBAQAogCXUxNiByZXY7CiAJLyogRmlybXdhcmUgcGF0Y2hsZXZlbCAqLwogCXUxNiBwYXRjaDsKKworCS8qIFNldCB0byB0cnVlLCBpZiB3ZSBhcmUgdXNpbmcgYW4gb3BlbnNvdXJjZSBmaXJtd2FyZS4gKi8KKwlib29sIG9wZW5zb3VyY2U7CisJLyogU2V0IHRvIHRydWUsIGlmIHRoZSBjb3JlIG5lZWRzIGEgUENNIGZpcm13YXJlLCBidXQKKwkgKiB3ZSBmYWlsZWQgdG8gbG9hZCBvbmUuIFRoaXMgaXMgYWx3YXlzIGZhbHNlIGZvcgorCSAqIGNvcmUgcmV2ID4gMTAsIGFzIHRoZXNlIGRvbid0IG5lZWQgUENNIGZpcm13YXJlLiAqLworCWJvb2wgcGNtX3JlcXVlc3RfZmFpbGVkOwogfTsKIAogLyogRGV2aWNlICg4MDIuMTEgY29yZSkgaW5pdGlhbGl6YXRpb24gc3RhdHVzLiAqLwpAQCAtOTQwLDIyICs5NjcsNiBAQAogIyBkZWZpbmUgQjQzX1dBUk5fT04oeCkJX19iNDNfd2Fybl9vbl9kdW1teSh1bmxpa2VseSghISh4KSkpCiAjZW5kaWYKIAotLyoqIExpbWl0IGEgdmFsdWUgYmV0d2VlbiB0d28gbGltaXRzICovCi0jaWZkZWYgbGltaXRfdmFsdWUKLSMgdW5kZWYgbGltaXRfdmFsdWUKLSNlbmRpZgotI2RlZmluZSBsaW1pdF92YWx1ZSh2YWx1ZSwgbWluLCBtYXgpICBcCi0JKHsJCQkJCQlcCi0JCXR5cGVvZih2YWx1ZSkgX192YWx1ZSA9ICh2YWx1ZSk7CVwKLQkJdHlwZW9mKHZhbHVlKSBfX21pbiA9IChtaW4pOwkJXAotCQl0eXBlb2YodmFsdWUpIF9fbWF4ID0gKG1heCk7CQlcCi0JCWlmIChfX3ZhbHVlIDwgX19taW4pCQkJXAotCQkJX192YWx1ZSA9IF9fbWluOwkJXAotCQllbHNlIGlmIChfX3ZhbHVlID4gX19tYXgpCQlcCi0JCQlfX3ZhbHVlID0gX19tYXg7CQlcCi0JCV9fdmFsdWU7CQkJCVwKLQl9KQotCiAvKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBRNS4yIHZhbHVlICovCiAjZGVmaW5lIElOVF9UT19RNTIoaSkJKChpKSA8PCAyKQogLyogQ29udmVydCBhIFE1LjIgdmFsdWUgdG8gYW4gaW50ZWdlciAocHJlY2lzaW9uIGxvc3MhKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKaW5kZXggN2ZjYTJlYmMuLjI5ODUxYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYwpAQCAtNzQsNiArNzQsMjk5IEBACiAJfSB3aGlsZSAoMCkKIAogCisvKiBUaGUgYmlnZ2VzdCBhZGRyZXNzIHZhbHVlcyBmb3IgU0hNIGFjY2VzcyBmcm9tIHRoZSBkZWJ1Z2ZzIGZpbGVzLiAqLworI2RlZmluZSBCNDNfTUFYX1NITV9ST1VUSU5HCTQKKyNkZWZpbmUgQjQzX01BWF9TSE1fQUREUgkweEZGRkYKKworc3RhdGljIHNzaXplX3Qgc2htMTZyZWFkX19yZWFkX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgICBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKQoreworCXNzaXplX3QgY291bnQgPSAwOworCXVuc2lnbmVkIGludCByb3V0aW5nLCBhZGRyOworCXUxNiB2YWw7CisKKwlyb3V0aW5nID0gZGV2LT5kZnNlbnRyeS0+c2htMTZyZWFkX3JvdXRpbmdfbmV4dDsKKwlhZGRyID0gZGV2LT5kZnNlbnRyeS0+c2htMTZyZWFkX2FkZHJfbmV4dDsKKwlpZiAoKHJvdXRpbmcgPiBCNDNfTUFYX1NITV9ST1VUSU5HKSB8fAorCSAgICAoYWRkciA+IEI0M19NQVhfU0hNX0FERFIpKQorCQlyZXR1cm4gLUVERVNUQUREUlJFUTsKKworCXZhbCA9IGI0M19zaG1fcmVhZDE2KGRldiwgcm91dGluZywgYWRkcik7CisJZmFwcGVuZCgiMHglMDRYXG4iLCB2YWwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHNobTE2cmVhZF9fd3JpdGVfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGludCByb3V0aW5nLCBhZGRyOworCWludCByZXM7CisKKwlyZXMgPSBzc2NhbmYoYnVmLCAiMHglWCAweCVYIiwgJnJvdXRpbmcsICZhZGRyKTsKKwlpZiAocmVzICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChyb3V0aW5nID4gQjQzX01BWF9TSE1fUk9VVElORykKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWlmIChhZGRyID4gQjQzX01BWF9TSE1fQUREUikKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWlmIChyb3V0aW5nID09IEI0M19TSE1fU0hBUkVEKSB7CisJCWlmICgoYWRkciAlIDIpICE9IDApCisJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJfQorCisJZGV2LT5kZnNlbnRyeS0+c2htMTZyZWFkX3JvdXRpbmdfbmV4dCA9IHJvdXRpbmc7CisJZGV2LT5kZnNlbnRyeS0+c2htMTZyZWFkX2FkZHJfbmV4dCA9IGFkZHI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG0xNndyaXRlX193cml0ZV9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGludCByb3V0aW5nLCBhZGRyLCBtYXNrLCBzZXQ7CisJdTE2IHZhbDsKKwlpbnQgcmVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZXMgPSBzc2NhbmYoYnVmLCAiMHglWCAweCVYIDB4JVggMHglWCIsCisJCSAgICAgJnJvdXRpbmcsICZhZGRyLCAmbWFzaywgJnNldCk7CisJaWYgKHJlcyAhPSA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocm91dGluZyA+IEI0M19NQVhfU0hNX1JPVVRJTkcpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwlpZiAoYWRkciA+IEI0M19NQVhfU0hNX0FERFIpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwlpZiAocm91dGluZyA9PSBCNDNfU0hNX1NIQVJFRCkgeworCQlpZiAoKGFkZHIgJSAyKSAhPSAwKQorCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCX0KKwlpZiAoKG1hc2sgPiAweEZGRkYpIHx8IChzZXQgPiAweEZGRkYpKQorCQlyZXR1cm4gLUUyQklHOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+d2wtPnNobV9sb2NrLCBmbGFncyk7CisJaWYgKG1hc2sgPT0gMCkKKwkJdmFsID0gMDsKKwllbHNlCisJCXZhbCA9IF9fYjQzX3NobV9yZWFkMTYoZGV2LCByb3V0aW5nLCBhZGRyKTsKKwl2YWwgJj0gbWFzazsKKwl2YWwgfD0gc2V0OworCV9fYjQzX3NobV93cml0ZTE2KGRldiwgcm91dGluZywgYWRkciwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPndsLT5zaG1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNobTMycmVhZF9fcmVhZF9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKK3sKKwlzc2l6ZV90IGNvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgcm91dGluZywgYWRkcjsKKwl1MzIgdmFsOworCisJcm91dGluZyA9IGRldi0+ZGZzZW50cnktPnNobTMycmVhZF9yb3V0aW5nX25leHQ7CisJYWRkciA9IGRldi0+ZGZzZW50cnktPnNobTMycmVhZF9hZGRyX25leHQ7CisJaWYgKChyb3V0aW5nID4gQjQzX01BWF9TSE1fUk9VVElORykgfHwKKwkgICAgKGFkZHIgPiBCNDNfTUFYX1NITV9BRERSKSkKKwkJcmV0dXJuIC1FREVTVEFERFJSRVE7CisKKwl2YWwgPSBiNDNfc2htX3JlYWQzMihkZXYsIHJvdXRpbmcsIGFkZHIpOworCWZhcHBlbmQoIjB4JTA4WFxuIiwgdmFsKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBzaG0zMnJlYWRfX3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgcm91dGluZywgYWRkcjsKKwlpbnQgcmVzOworCisJcmVzID0gc3NjYW5mKGJ1ZiwgIjB4JVggMHglWCIsICZyb3V0aW5nLCAmYWRkcik7CisJaWYgKHJlcyAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocm91dGluZyA+IEI0M19NQVhfU0hNX1JPVVRJTkcpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwlpZiAoYWRkciA+IEI0M19NQVhfU0hNX0FERFIpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwlpZiAocm91dGluZyA9PSBCNDNfU0hNX1NIQVJFRCkgeworCQlpZiAoKGFkZHIgJSAyKSAhPSAwKQorCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCX0KKworCWRldi0+ZGZzZW50cnktPnNobTMycmVhZF9yb3V0aW5nX25leHQgPSByb3V0aW5nOworCWRldi0+ZGZzZW50cnktPnNobTMycmVhZF9hZGRyX25leHQgPSBhZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2htMzJ3cml0ZV9fd3JpdGVfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgcm91dGluZywgYWRkciwgbWFzaywgc2V0OworCXUzMiB2YWw7CisJaW50IHJlczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmVzID0gc3NjYW5mKGJ1ZiwgIjB4JVggMHglWCAweCVYIDB4JVgiLAorCQkgICAgICZyb3V0aW5nLCAmYWRkciwgJm1hc2ssICZzZXQpOworCWlmIChyZXMgIT0gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJvdXRpbmcgPiBCNDNfTUFYX1NITV9ST1VUSU5HKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJaWYgKGFkZHIgPiBCNDNfTUFYX1NITV9BRERSKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJaWYgKHJvdXRpbmcgPT0gQjQzX1NITV9TSEFSRUQpIHsKKwkJaWYgKChhZGRyICUgMikgIT0gMCkKKwkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwl9CisJaWYgKChtYXNrID4gMHhGRkZGRkZGRikgfHwgKHNldCA+IDB4RkZGRkZGRkYpKQorCQlyZXR1cm4gLUUyQklHOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+d2wtPnNobV9sb2NrLCBmbGFncyk7CisJaWYgKG1hc2sgPT0gMCkKKwkJdmFsID0gMDsKKwllbHNlCisJCXZhbCA9IF9fYjQzX3NobV9yZWFkMzIoZGV2LCByb3V0aW5nLCBhZGRyKTsKKwl2YWwgJj0gbWFzazsKKwl2YWwgfD0gc2V0OworCV9fYjQzX3NobV93cml0ZTMyKGRldiwgcm91dGluZywgYWRkciwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPndsLT5zaG1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZSBiaWdnZXN0IE1NSU8gYWRkcmVzcyB0aGF0IHdlIGFsbG93IGFjY2VzcyB0byBmcm9tIHRoZSBkZWJ1Z2ZzIGZpbGVzLiAqLworI2RlZmluZSBCNDNfTUFYX01NSU9fQUNDRVNTCSgweEYwMCAtIDEpCisKK3N0YXRpYyBzc2l6ZV90IG1taW8xNnJlYWRfX3JlYWRfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKQoreworCXNzaXplX3QgY291bnQgPSAwOworCXVuc2lnbmVkIGludCBhZGRyOworCXUxNiB2YWw7CisKKwlhZGRyID0gZGV2LT5kZnNlbnRyeS0+bW1pbzE2cmVhZF9uZXh0OworCWlmIChhZGRyID4gQjQzX01BWF9NTUlPX0FDQ0VTUykKKwkJcmV0dXJuIC1FREVTVEFERFJSRVE7CisKKwl2YWwgPSBiNDNfcmVhZDE2KGRldiwgYWRkcik7CisJZmFwcGVuZCgiMHglMDRYXG4iLCB2YWwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IG1taW8xNnJlYWRfX3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgaW50IGFkZHI7CisJaW50IHJlczsKKworCXJlcyA9IHNzY2FuZihidWYsICIweCVYIiwgJmFkZHIpOworCWlmIChyZXMgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGFkZHIgPiBCNDNfTUFYX01NSU9fQUNDRVNTKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJaWYgKChhZGRyICUgMikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYtPmRmc2VudHJ5LT5tbWlvMTZyZWFkX25leHQgPSBhZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW1pbzE2d3JpdGVfX3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGludCBhZGRyLCBtYXNrLCBzZXQ7CisJaW50IHJlczsKKwl1MTYgdmFsOworCisJcmVzID0gc3NjYW5mKGJ1ZiwgIjB4JVggMHglWCAweCVYIiwgJmFkZHIsICZtYXNrLCAmc2V0KTsKKwlpZiAocmVzICE9IDMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChhZGRyID4gQjQzX01BWF9NTUlPX0FDQ0VTUykKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWlmICgobWFzayA+IDB4RkZGRikgfHwgKHNldCA+IDB4RkZGRikpCisJCXJldHVybiAtRTJCSUc7CisJaWYgKChhZGRyICUgMikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWFzayA9PSAwKQorCQl2YWwgPSAwOworCWVsc2UKKwkJdmFsID0gYjQzX3JlYWQxNihkZXYsIGFkZHIpOworCXZhbCAmPSBtYXNrOworCXZhbCB8PSBzZXQ7CisJYjQzX3dyaXRlMTYoZGV2LCBhZGRyLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1taW8zMnJlYWRfX3JlYWRfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKQoreworCXNzaXplX3QgY291bnQgPSAwOworCXVuc2lnbmVkIGludCBhZGRyOworCXUzMiB2YWw7CisKKwlhZGRyID0gZGV2LT5kZnNlbnRyeS0+bW1pbzMycmVhZF9uZXh0OworCWlmIChhZGRyID4gQjQzX01BWF9NTUlPX0FDQ0VTUykKKwkJcmV0dXJuIC1FREVTVEFERFJSRVE7CisKKwl2YWwgPSBiNDNfcmVhZDMyKGRldiwgYWRkcik7CisJZmFwcGVuZCgiMHglMDhYXG4iLCB2YWwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IG1taW8zMnJlYWRfX3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgaW50IGFkZHI7CisJaW50IHJlczsKKworCXJlcyA9IHNzY2FuZihidWYsICIweCVYIiwgJmFkZHIpOworCWlmIChyZXMgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGFkZHIgPiBCNDNfTUFYX01NSU9fQUNDRVNTKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJaWYgKChhZGRyICUgNCkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYtPmRmc2VudHJ5LT5tbWlvMzJyZWFkX25leHQgPSBhZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW1pbzMyd3JpdGVfX3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGludCBhZGRyLCBtYXNrLCBzZXQ7CisJaW50IHJlczsKKwl1MzIgdmFsOworCisJcmVzID0gc3NjYW5mKGJ1ZiwgIjB4JVggMHglWCAweCVYIiwgJmFkZHIsICZtYXNrLCAmc2V0KTsKKwlpZiAocmVzICE9IDMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChhZGRyID4gQjQzX01BWF9NTUlPX0FDQ0VTUykKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWlmICgobWFzayA+IDB4RkZGRkZGRkYpIHx8IChzZXQgPiAweEZGRkZGRkZGKSkKKwkJcmV0dXJuIC1FMkJJRzsKKwlpZiAoKGFkZHIgJSA0KSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtYXNrID09IDApCisJCXZhbCA9IDA7CisJZWxzZQorCQl2YWwgPSBiNDNfcmVhZDMyKGRldiwgYWRkcik7CisJdmFsICY9IG1hc2s7CisJdmFsIHw9IHNldDsKKwliNDNfd3JpdGUzMihkZXYsIGFkZHIsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogd2wtPmlycV9sb2NrIGlzIGxvY2tlZCAqLwogc3RhdGljIHNzaXplX3QgdHNmX3JlYWRfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpCkBAIC0xMDIsNDIgKzM5NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHdsLT5pcnFfbG9jayBpcyBsb2NrZWQgKi8KLXN0YXRpYyBzc2l6ZV90IHVjb2RlX3JlZ3NfcmVhZF9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKLXsKLQlzc2l6ZV90IGNvdW50ID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWZhcHBlbmQoInIlZCA9IDB4JTA0eFxuIiwgaSwKLQkJCWI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9TQ1JBVENILCBpKSk7Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi0vKiB3bC0+aXJxX2xvY2sgaXMgbG9ja2VkICovCi1zdGF0aWMgc3NpemVfdCBzaG1fcmVhZF9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKLXsKLQlzc2l6ZV90IGNvdW50ID0gMDsKLQlpbnQgaTsKLQl1MTYgdG1wOwotCV9fbGUxNiAqbGUxNmJ1ZiA9IChfX2xlMTYgKilidWY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMHgxMDAwOyBpKyspIHsKLQkJaWYgKGJ1ZnNpemUgPCBzaXplb2YodG1wKSkKLQkJCWJyZWFrOwotCQl0bXAgPSBiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0hBUkVELCAyICogaSk7Ci0JCWxlMTZidWZbaV0gPSBjcHVfdG9fbGUxNih0bXApOwotCQljb3VudCArPSBzaXplb2YodG1wKTsKLQkJYnVmc2l6ZSAtPSBzaXplb2YodG1wKTsKLQl9Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHR4c3RhdF9yZWFkX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJCWNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpCiB7CkBAIC0yNzAsMjQgKzUyNywyMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFwcGVuZF9sb190YWJsZShzc2l6ZV90IGNvdW50LCBjaGFyICpidWYsIGNvbnN0IHNpemVfdCBidWZzaXplLAotCQkJICAgICAgIHN0cnVjdCBiNDNfbG9jdGwgdGFibGVbQjQzX05SX0JCXVtCNDNfTlJfUkZdKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY19leHBpcmVfc2Vjcyh1bnNpZ25lZCBsb25nIG5vdywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHRpbWUsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBleHBpcmUpCiB7Ci0JdW5zaWduZWQgaW50IGksIGo7Ci0Jc3RydWN0IGI0M19sb2N0bCAqY3RsOworCWV4cGlyZSA9IHRpbWUgKyBleHBpcmU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQjQzX05SX0JCOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IEI0M19OUl9SRjsgaisrKSB7Ci0JCQljdGwgPSAmKHRhYmxlW2ldW2pdKTsKLQkJCWZhcHBlbmQoIihiYmF0dCAlMnUsIHJmYXR0ICUydSkgIC0+ICAiCi0JCQkJIihJICUrM2QsIFEgJSszZCwgVXNlZDogJWQsIENhbGlicmF0ZWQ6ICVkKVxuIiwKLQkJCQlpLCBqLCBjdGwtPmksIGN0bC0+cSwKLQkJCQljdGwtPnVzZWQsCi0JCQkJYjQzX2xvY3RsX2lzX2NhbGlicmF0ZWQoY3RsKSk7Ci0JCX0KKwlpZiAodGltZV9hZnRlcihub3csIGV4cGlyZSkpCisJCXJldHVybiAwOyAvKiBleHBpcmVkICovCisJaWYgKGV4cGlyZSA8IG5vdykgeworCQkvKiBqaWZmaWVzIHdyYXBwZWQgKi8KKwkJZXhwaXJlIC09IE1BWF9KSUZGWV9PRkZTRVQ7CisJCW5vdyAtPSBNQVhfSklGRllfT0ZGU0VUOwogCX0KKwlCNDNfV0FSTl9PTihleHBpcmUgPCBub3cpOwogCi0JcmV0dXJuIGNvdW50OworCXJldHVybiAoZXhwaXJlIC0gbm93KSAvIEhaOwogfQogCiBzdGF0aWMgc3NpemVfdCBsb2N0bHNfcmVhZF9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKQEAgLTI5NiwyNyArNTUxLDQ1IEBACiAJc3NpemVfdCBjb3VudCA9IDA7CiAJc3RydWN0IGI0M190eHBvd2VyX2xvX2NvbnRyb2wgKmxvOwogCWludCBpLCBlcnIgPSAwOworCXN0cnVjdCBiNDNfbG9fY2FsaWIgKmNhbDsKKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAotCWlmIChkZXYtPnBoeS50eXBlICE9IEI0M19QSFlUWVBFX0cpIHsKKwlpZiAocGh5LT50eXBlICE9IEI0M19QSFlUWVBFX0cpIHsKIAkJZmFwcGVuZCgiRGV2aWNlIGlzIG5vdCBhIEctUEhZXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQotCWxvID0gZGV2LT5waHkubG9fY29udHJvbDsKKwlsbyA9IHBoeS0+bG9fY29udHJvbDsKIAlmYXBwZW5kKCItLSBMb2NhbCBPc2NpbGxhdG9yIGNhbGlicmF0aW9uIGRhdGEgLS1cblxuIik7Ci0JZmFwcGVuZCgiTWVhc3VyZWQ6ICVkLCAgUmVidWlsZDogJWQsICBIVy1wb3dlci1jb250cm9sOiAlZFxuIiwKLQkJbG8tPmxvX21lYXN1cmVkLAotCQlsby0+cmVidWlsZCwKKwlmYXBwZW5kKCJIVy1wb3dlci1jb250cm9sIGVuYWJsZWQ6ICVkXG4iLAogCQlkZXYtPnBoeS5oYXJkd2FyZV9wb3dlcl9jb250cm9sKTsKLQlmYXBwZW5kKCJUWCBCaWFzOiAweCUwMlgsICBUWCBNYWduOiAweCUwMlhcbiIsCi0JCWxvLT50eF9iaWFzLCBsby0+dHhfbWFnbik7Ci0JZmFwcGVuZCgiUG93ZXIgVmVjdG9yOiAweCUwOFglMDhYXG4iLAorCWZhcHBlbmQoIlRYIEJpYXM6IDB4JTAyWCwgIFRYIE1hZ246IDB4JTAyWCAgKGV4cGlyZSBpbiAlbHUgc2VjKVxuIiwKKwkJbG8tPnR4X2JpYXMsIGxvLT50eF9tYWduLAorCQljYWxjX2V4cGlyZV9zZWNzKG5vdywgbG8tPnR4Y3RsX21lYXN1cmVkX3RpbWUsCisJCQkJIEI0M19MT19UWENUTF9FWFBJUkUpKTsKKwlmYXBwZW5kKCJQb3dlciBWZWN0b3I6IDB4JTA4WCUwOFggIChleHBpcmVzIGluICVsdSBzZWMpXG4iLAogCQkodW5zaWduZWQgaW50KSgobG8tPnBvd2VyX3ZlY3RvciAmIDB4RkZGRkZGRkYwMDAwMDAwMFVMTCkgPj4gMzIpLAotCQkodW5zaWduZWQgaW50KShsby0+cG93ZXJfdmVjdG9yICYgMHgwMDAwMDAwMEZGRkZGRkZGVUxMKSk7Ci0JZmFwcGVuZCgiXG5Db250cm9sIHRhYmxlIFdJVEggUEFETUlYOlxuIik7Ci0JY291bnQgPSBhcHBlbmRfbG9fdGFibGUoY291bnQsIGJ1ZiwgYnVmc2l6ZSwgbG8tPndpdGhfcGFkbWl4KTsKLQlmYXBwZW5kKCJcbkNvbnRyb2wgdGFibGUgV0lUSE9VVCBQQURNSVg6XG4iKTsKLQljb3VudCA9IGFwcGVuZF9sb190YWJsZShjb3VudCwgYnVmLCBidWZzaXplLCBsby0+bm9fcGFkbWl4KTsKKwkJKHVuc2lnbmVkIGludCkobG8tPnBvd2VyX3ZlY3RvciAmIDB4MDAwMDAwMDBGRkZGRkZGRlVMTCksCisJCWNhbGNfZXhwaXJlX3NlY3Mobm93LCBsby0+cHdyX3ZlY19yZWFkX3RpbWUsCisJCQkJIEI0M19MT19QV1JWRUNfRVhQSVJFKSk7CisKKwlmYXBwZW5kKCJcbkNhbGlicmF0ZWQgc2V0dGluZ3M6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbCwgJmxvLT5jYWxpYl9saXN0LCBsaXN0KSB7CisJCWJvb2wgYWN0aXZlOworCisJCWFjdGl2ZSA9IChiNDNfY29tcGFyZV9iYmF0dCgmY2FsLT5iYmF0dCwgJnBoeS0+YmJhdHQpICYmCisJCQkgIGI0M19jb21wYXJlX3JmYXR0KCZjYWwtPnJmYXR0LCAmcGh5LT5yZmF0dCkpOworCQlmYXBwZW5kKCJCQiglZCksIFJGKCVkLCVkKSAgLT4gIEk9JWQsIFE9JWQgICIKKwkJCSIoZXhwaXJlcyBpbiAlbHUgc2VjKSVzXG4iLAorCQkJY2FsLT5iYmF0dC5hdHQsCisJCQljYWwtPnJmYXR0LmF0dCwgY2FsLT5yZmF0dC53aXRoX3BhZG1peCwKKwkJCWNhbC0+Y3RsLmksIGNhbC0+Y3RsLnEsCisJCQljYWxjX2V4cGlyZV9zZWNzKG5vdywgY2FsLT5jYWxpYl90aW1lLAorCQkJCQkgQjQzX0xPX0NBTElCX0VYUElSRSksCisJCQlhY3RpdmUgPyAiICBBQ1RJVkUiIDogIiIpOworCX0KKwogCWZhcHBlbmQoIlxuVXNlZCBSRiBhdHRlbnVhdGlvbiB2YWx1ZXM6ICBWYWx1ZShXaXRoUGFkbWl4IGZsYWcpXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgbG8tPnJmYXR0X2xpc3QubGVuOyBpKyspIHsKIAkJZmFwcGVuZCgiJXUoJWQpLCAiLApAQCAtMzUxLDcgKzYyNCw3IEBACiAJc3RydWN0IGI0M19kZnNfZmlsZSAqZGZpbGU7CiAJc3NpemVfdCB1bmluaXRpYWxpemVkX3ZhcihyZXQpOwogCWNoYXIgKmJ1ZjsKLQljb25zdCBzaXplX3QgYnVmc2l6ZSA9IDEwMjQgKiAxMjg7CisJY29uc3Qgc2l6ZV90IGJ1ZnNpemUgPSAxMDI0ICogMTY7IC8qIDE2IGtpQiBidWZmZXIgKi8KIAljb25zdCBzaXplX3QgYnVmb3JkZXIgPSBnZXRfb3JkZXIoYnVmc2l6ZSk7CiAJaW50IGVyciA9IDA7CiAKQEAgLTM4MCw4ICs2NTMsNiBAQAogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQotCQkvKiBTcGFyc2Ugd2FybnMgYWJvdXQgdGhlIGZvbGxvd2luZyBtZW1zZXQsIGJlY2F1c2UgaXQgaGFzIGEgYmlnCi0JCSAqIHNpemUgdmFsdWUuIFRoYXQgd2FybmluZyBpcyBib2d1cywgc28gSSB3aWxsIGlnbm9yZSBpdC4gLS1tYiAqLwogCQltZW1zZXQoYnVmLCAwLCBidWZzaXplKTsKIAkJaWYgKGRmb3BzLT50YWtlX2lycWxvY2spIHsKIAkJCXNwaW5fbG9ja19pcnEoJmRldi0+d2wtPmlycV9sb2NrKTsKQEAgLTQ4Miw5ICs3NTMsMTUgQEAKIAkJLnRha2VfaXJxbG9jawk9IF90YWtlX2lycWxvY2ssCQlcCiAJfQogCitCNDNfREVCVUdGU19GT1BTKHNobTE2cmVhZCwgc2htMTZyZWFkX19yZWFkX2ZpbGUsIHNobTE2cmVhZF9fd3JpdGVfZmlsZSwgMSk7CitCNDNfREVCVUdGU19GT1BTKHNobTE2d3JpdGUsIE5VTEwsIHNobTE2d3JpdGVfX3dyaXRlX2ZpbGUsIDEpOworQjQzX0RFQlVHRlNfRk9QUyhzaG0zMnJlYWQsIHNobTMycmVhZF9fcmVhZF9maWxlLCBzaG0zMnJlYWRfX3dyaXRlX2ZpbGUsIDEpOworQjQzX0RFQlVHRlNfRk9QUyhzaG0zMndyaXRlLCBOVUxMLCBzaG0zMndyaXRlX193cml0ZV9maWxlLCAxKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzE2cmVhZCwgbW1pbzE2cmVhZF9fcmVhZF9maWxlLCBtbWlvMTZyZWFkX193cml0ZV9maWxlLCAxKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzE2d3JpdGUsIE5VTEwsIG1taW8xNndyaXRlX193cml0ZV9maWxlLCAxKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzMycmVhZCwgbW1pbzMycmVhZF9fcmVhZF9maWxlLCBtbWlvMzJyZWFkX193cml0ZV9maWxlLCAxKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzMyd3JpdGUsIE5VTEwsIG1taW8zMndyaXRlX193cml0ZV9maWxlLCAxKTsKIEI0M19ERUJVR0ZTX0ZPUFModHNmLCB0c2ZfcmVhZF9maWxlLCB0c2Zfd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKHVjb2RlX3JlZ3MsIHVjb2RlX3JlZ3NfcmVhZF9maWxlLCBOVUxMLCAxKTsKLUI0M19ERUJVR0ZTX0ZPUFMoc2htLCBzaG1fcmVhZF9maWxlLCBOVUxMLCAxKTsKIEI0M19ERUJVR0ZTX0ZPUFModHhzdGF0LCB0eHN0YXRfcmVhZF9maWxlLCBOVUxMLCAwKTsKIEI0M19ERUJVR0ZTX0ZPUFModHhwb3dlcl9nLCB0eHBvd2VyX2dfcmVhZF9maWxlLCB0eHBvd2VyX2dfd3JpdGVfZmlsZSwgMCk7CiBCNDNfREVCVUdGU19GT1BTKHJlc3RhcnQsIE5VTEwsIHJlc3RhcnRfd3JpdGVfZmlsZSwgMSk7CkBAIC01MjMsNiArODAwLDggQEAKIAlhZGRfZHluX2RiZygiZGVidWdfZG1hdmVyYm9zZSIsIEI0M19EQkdfRE1BVkVSQk9TRSwgMCk7CiAJYWRkX2R5bl9kYmcoImRlYnVnX3B3b3JrX2Zhc3QiLCBCNDNfREJHX1BXT1JLX0ZBU1QsIDApOwogCWFkZF9keW5fZGJnKCJkZWJ1Z19wd29ya19zdG9wIiwgQjQzX0RCR19QV09SS19TVE9QLCAwKTsKKwlhZGRfZHluX2RiZygiZGVidWdfbG8iLCBCNDNfREJHX0xPLCAwKTsKKwlhZGRfZHluX2RiZygiZGVidWdfZmlybXdhcmUiLCBCNDNfREJHX0ZJUk1XQVJFLCAwKTsKIAogI3VuZGVmIGFkZF9keW5fZGJnCiB9CkBAIC01NjksNiArODQ4LDEzIEBACiAJCXJldHVybjsKIAl9CiAKKwllLT5tbWlvMTZyZWFkX25leHQgPSAweEZGRkY7IC8qIGludmFsaWQgYWRkcmVzcyAqLworCWUtPm1taW8zMnJlYWRfbmV4dCA9IDB4RkZGRjsgLyogaW52YWxpZCBhZGRyZXNzICovCisJZS0+c2htMTZyZWFkX3JvdXRpbmdfbmV4dCA9IDB4RkZGRkZGRkY7IC8qIGludmFsaWQgcm91dGluZyAqLworCWUtPnNobTE2cmVhZF9hZGRyX25leHQgPSAweEZGRkZGRkZGOyAvKiBpbnZhbGlkIGFkZHJlc3MgKi8KKwllLT5zaG0zMnJlYWRfcm91dGluZ19uZXh0ID0gMHhGRkZGRkZGRjsgLyogaW52YWxpZCByb3V0aW5nICovCisJZS0+c2htMzJyZWFkX2FkZHJfbmV4dCA9IDB4RkZGRkZGRkY7IC8qIGludmFsaWQgYWRkcmVzcyAqLworCiAjZGVmaW5lIEFERF9GSUxFKG5hbWUsIG1vZGUpCVwKIAlkbyB7CQkJCQkJCVwKIAkJc3RydWN0IGRlbnRyeSAqZDsJCQkJXApAQCAtNTgxLDkgKzg2NywxNSBAQAogCX0gd2hpbGUgKDApCiAKIAorCUFERF9GSUxFKHNobTE2cmVhZCwgMDYwMCk7CisJQUREX0ZJTEUoc2htMTZ3cml0ZSwgMDIwMCk7CisJQUREX0ZJTEUoc2htMzJyZWFkLCAwNjAwKTsKKwlBRERfRklMRShzaG0zMndyaXRlLCAwMjAwKTsKKwlBRERfRklMRShtbWlvMTZyZWFkLCAwNjAwKTsKKwlBRERfRklMRShtbWlvMTZ3cml0ZSwgMDIwMCk7CisJQUREX0ZJTEUobW1pbzMycmVhZCwgMDYwMCk7CisJQUREX0ZJTEUobW1pbzMyd3JpdGUsIDAyMDApOwogCUFERF9GSUxFKHRzZiwgMDYwMCk7Ci0JQUREX0ZJTEUodWNvZGVfcmVncywgMDQwMCk7Ci0JQUREX0ZJTEUoc2htLCAwNDAwKTsKIAlBRERfRklMRSh0eHN0YXQsIDA0MDApOwogCUFERF9GSUxFKHR4cG93ZXJfZywgMDYwMCk7CiAJQUREX0ZJTEUocmVzdGFydCwgMDIwMCk7CkBAIC02MDUsOSArODk3LDE1IEBACiAJCXJldHVybjsKIAliNDNfcmVtb3ZlX2R5bmFtaWNfZGVidWcoZGV2KTsKIAorCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfc2htMTZyZWFkLmRlbnRyeSk7CisJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9zaG0xNndyaXRlLmRlbnRyeSk7CisJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9zaG0zMnJlYWQuZGVudHJ5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX3NobTMyd3JpdGUuZGVudHJ5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX21taW8xNnJlYWQuZGVudHJ5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX21taW8xNndyaXRlLmRlbnRyeSk7CisJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9tbWlvMzJyZWFkLmRlbnRyeSk7CisJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9tbWlvMzJ3cml0ZS5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfdHNmLmRlbnRyeSk7Ci0JZGVidWdmc19yZW1vdmUoZS0+ZmlsZV91Y29kZV9yZWdzLmRlbnRyeSk7Ci0JZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9zaG0uZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX3R4c3RhdC5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfdHhwb3dlcl9nLmRlbnRyeSk7CiAJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9yZXN0YXJ0LmRlbnRyeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaAppbmRleCA2ZWViZTg1OC4uMjJmZmQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oCkBAIC0xMCw2ICsxMCw4IEBACiAJQjQzX0RCR19ETUFWRVJCT1NFLAogCUI0M19EQkdfUFdPUktfRkFTVCwKIAlCNDNfREJHX1BXT1JLX1NUT1AsCisJQjQzX0RCR19MTywKKwlCNDNfREJHX0ZJUk1XQVJFLAogCV9fQjQzX05SX0RZTkRCRywKIH07CiAKQEAgLTM1LDkgKzM3LDE1IEBACiAJc3RydWN0IGI0M193bGRldiAqZGV2OwogCXN0cnVjdCBkZW50cnkgKnN1YmRpcjsKIAorCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV9zaG0xNnJlYWQ7CisJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3NobTE2d3JpdGU7CisJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3NobTMycmVhZDsKKwlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfc2htMzJ3cml0ZTsKKwlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfbW1pbzE2cmVhZDsKKwlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfbW1pbzE2d3JpdGU7CisJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX21taW8zMnJlYWQ7CisJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX21taW8zMndyaXRlOwogCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV90c2Y7Ci0Jc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3Vjb2RlX3JlZ3M7Ci0Jc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3NobTsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfdHhzdGF0OwogCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV90eHBvd2VyX2c7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3Jlc3RhcnQ7CkBAIC00NSw2ICs1MywxOCBAQAogCiAJc3RydWN0IGI0M190eHN0YXR1c19sb2cgdHhzdGF0bG9nOwogCisJLyogVGhlIGNhY2hlZCBhZGRyZXNzIGZvciB0aGUgbmV4dCBtbWlvMTZyZWFkIGZpbGUgcmVhZCAqLworCXUxNiBtbWlvMTZyZWFkX25leHQ7CisJLyogVGhlIGNhY2hlZCBhZGRyZXNzIGZvciB0aGUgbmV4dCBtbWlvMzJyZWFkIGZpbGUgcmVhZCAqLworCXUxNiBtbWlvMzJyZWFkX25leHQ7CisKKwkvKiBUaGUgY2FjaGVkIGFkZHJlc3MgZm9yIHRoZSBuZXh0IHNobTE2cmVhZCBmaWxlIHJlYWQgKi8KKwl1MzIgc2htMTZyZWFkX3JvdXRpbmdfbmV4dDsKKwl1MzIgc2htMTZyZWFkX2FkZHJfbmV4dDsKKwkvKiBUaGUgY2FjaGVkIGFkZHJlc3MgZm9yIHRoZSBuZXh0IHNobTMycmVhZCBmaWxlIHJlYWQgKi8KKwl1MzIgc2htMzJyZWFkX3JvdXRpbmdfbmV4dDsKKwl1MzIgc2htMzJyZWFkX2FkZHJfbmV4dDsKKwogCS8qIEVuYWJsZWQvRGlzYWJsZWQgbGlzdCBmb3IgdGhlIGR5bmFtaWMgZGVidWdnaW5nIGZlYXR1cmVzLiAqLwogCXUzMiBkeW5fZGVidWdbX19CNDNfTlJfRFlOREJHXTsKIAkvKiBEZW50cmllcyBmb3IgdGhlIGR5bmFtaWMgZGVidWdnaW5nIGVudHJpZXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggZTIzZjJmMS4uMDk4Zjg4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtMzI4LDExICszMjgsMTEgQEAKIAlkbWFfYWRkcl90IGRtYWFkZHI7CiAKIAlpZiAodHgpIHsKLQkJZG1hYWRkciA9IGRtYV9tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAotCQkJCQkgYnVmLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlkbWFhZGRyID0gc3NiX2RtYV9tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LAorCQkJCQkgICAgIGJ1ZiwgbGVuLCBETUFfVE9fREVWSUNFKTsKIAl9IGVsc2UgewotCQlkbWFhZGRyID0gZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCi0JCQkJCSBidWYsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwkJZG1hYWRkciA9IHNzYl9kbWFfbWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldiwKKwkJCQkJICAgICBidWYsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIAl9CiAKIAlyZXR1cm4gZG1hYWRkcjsKQEAgLTM0MywxMSArMzQzLDExIEBACiAJCQkgIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IGxlbiwgaW50IHR4KQogewogCWlmICh0eCkgewotCQlkbWFfdW5tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAotCQkJCSBhZGRyLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlzc2JfZG1hX3VubWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldiwKKwkJCQkgICAgIGFkZHIsIGxlbiwgRE1BX1RPX0RFVklDRSk7CiAJfSBlbHNlIHsKLQkJZG1hX3VubWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKLQkJCQkgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCQlzc2JfZG1hX3VubWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldiwKKwkJCQkgICAgIGFkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIAl9CiB9CiAKQEAgLTM1Niw4ICszNTYsOCBAQAogCQkJCSBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBsZW4pCiB7CiAJQjQzX1dBUk5fT04ocmluZy0+dHgpOwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAotCQkJCWFkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocmluZy0+ZGV2LT5kZXYsCisJCQkJICAgIGFkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtMzY1LDggKzM2NSw4IEBACiAJCQkJICAgIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IGxlbikKIHsKIAlCNDNfV0FSTl9PTihyaW5nLT50eCk7Ci0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCi0JCQkJICAgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCXNzYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShyaW5nLT5kZXYtPmRldiwKKwkJCQkgICAgICAgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwogfQogCiBzdGF0aWMgaW5saW5lCkBAIC0zODEsNyArMzgxLDYgQEAKIAogc3RhdGljIGludCBhbGxvY19yaW5nbWVtb3J5KHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZykKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcmluZy0+ZGV2LT5kZXYtPmRtYV9kZXY7CiAJZ2ZwX3QgZmxhZ3MgPSBHRlBfS0VSTkVMOwogCiAJLyogVGhlIHNwZWNzIGNhbGwgZm9yIDRLIGJ1ZmZlcnMgZm9yIDMwLSBhbmQgMzItYml0IERNQSB3aXRoIDRLCkBAIC0zOTIsMTEgKzM5MSwxNCBAQAogCSAqIEZvciB1bmtub3duIHJlYXNvbnMgLSBwb3NzaWJseSBhIGhhcmR3YXJlIGVycm9yIC0gdGhlIEJDTTQzMTEgcmV2CiAJICogMDIsIHdoaWNoIHVzZXMgNjQtYml0IERNQSwgbmVlZHMgdGhlIHJpbmcgYnVmZmVyIGluIHZlcnkgbG93IG1lbW9yeSwKIAkgKiB3aGljaCBhY2NvdW50cyBmb3IgdGhlIEdGUF9ETUEgZmxhZyBiZWxvdy4KKwkgKgorCSAqIFRoZSBmbGFncyBoZXJlIG11c3QgbWF0Y2ggdGhlIGZsYWdzIGluIGZyZWVfcmluZ21lbW9yeSBiZWxvdyEKIAkgKi8KIAlpZiAocmluZy0+dHlwZSA9PSBCNDNfRE1BXzY0QklUKQogCQlmbGFncyB8PSBHRlBfRE1BOwotCXJpbmctPmRlc2NiYXNlID0gZG1hX2FsbG9jX2NvaGVyZW50KGRtYV9kZXYsIEI0M19ETUFfUklOR01FTVNJWkUsCi0JCQkJCSAgICAmKHJpbmctPmRtYWJhc2UpLCBmbGFncyk7CisJcmluZy0+ZGVzY2Jhc2UgPSBzc2JfZG1hX2FsbG9jX2NvbnNpc3RlbnQocmluZy0+ZGV2LT5kZXYsCisJCQkJCQkgIEI0M19ETUFfUklOR01FTVNJWkUsCisJCQkJCQkgICYocmluZy0+ZG1hYmFzZSksIGZsYWdzKTsKIAlpZiAoIXJpbmctPmRlc2NiYXNlKSB7CiAJCWI0M2VycihyaW5nLT5kZXYtPndsLCAiRE1BIHJpbmdtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQwOCwxMCArNDEwLDEzIEBACiAKIHN0YXRpYyB2b2lkIGZyZWVfcmluZ21lbW9yeShzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcpCiB7Ci0Jc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2OworCWdmcF90IGZsYWdzID0gR0ZQX0tFUk5FTDsKIAotCWRtYV9mcmVlX2NvaGVyZW50KGRtYV9kZXYsIEI0M19ETUFfUklOR01FTVNJWkUsCi0JCQkgIHJpbmctPmRlc2NiYXNlLCByaW5nLT5kbWFiYXNlKTsKKwlpZiAocmluZy0+dHlwZSA9PSBCNDNfRE1BXzY0QklUKQorCQlmbGFncyB8PSBHRlBfRE1BOworCisJc3NiX2RtYV9mcmVlX2NvbnNpc3RlbnQocmluZy0+ZGV2LT5kZXYsIEI0M19ETUFfUklOR01FTVNJWkUsCisJCQkJcmluZy0+ZGVzY2Jhc2UsIHJpbmctPmRtYWJhc2UsIGZsYWdzKTsKIH0KIAogLyogUmVzZXQgdGhlIFJYIERNQSBjaGFubmVsICovCkBAIC01MTgsNyArNTIzLDcgQEAKIAkJCQkgIGRtYV9hZGRyX3QgYWRkciwKIAkJCQkgIHNpemVfdCBidWZmZXJzaXplLCBib29sIGRtYV90b19kZXZpY2UpCiB7Ci0JaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGFkZHIpKSkKKwlpZiAodW5saWtlbHkoc3NiX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmctPmRldi0+ZGV2LCBhZGRyKSkpCiAJCXJldHVybiAxOwogCiAJc3dpdGNoIChyaW5nLT50eXBlKSB7CkBAIC04NDQsMTAgKzg0OSwxMCBAQAogCQkJZ290byBlcnJfa2ZyZWVfbWV0YTsKIAogCQkvKiB0ZXN0IGZvciBhYmlsaXR5IHRvIGRtYSB0byB0eGhkcl9jYWNoZSAqLwotCQlkbWFfdGVzdCA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LT5kbWFfZGV2LAotCQkJCQkgIHJpbmctPnR4aGRyX2NhY2hlLAotCQkJCQkgIGI0M190eGhkcl9zaXplKGRldiksCi0JCQkJCSAgRE1BX1RPX0RFVklDRSk7CisJCWRtYV90ZXN0ID0gc3NiX2RtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LAorCQkJCQkgICAgICByaW5nLT50eGhkcl9jYWNoZSwKKwkJCQkJICAgICAgYjQzX3R4aGRyX3NpemUoZGV2KSwKKwkJCQkJICAgICAgRE1BX1RPX0RFVklDRSk7CiAKIAkJaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFfdGVzdCwKIAkJCQkJICBiNDNfdHhoZHJfc2l6ZShkZXYpLCAxKSkgewpAQCAtODU5LDEwICs4NjQsMTAgQEAKIAkJCWlmICghcmluZy0+dHhoZHJfY2FjaGUpCiAJCQkJZ290byBlcnJfa2ZyZWVfbWV0YTsKIAotCQkJZG1hX3Rlc3QgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldi0+ZG1hX2RldiwKLQkJCQkJCSAgcmluZy0+dHhoZHJfY2FjaGUsCi0JCQkJCQkgIGI0M190eGhkcl9zaXplKGRldiksCi0JCQkJCQkgIERNQV9UT19ERVZJQ0UpOworCQkJZG1hX3Rlc3QgPSBzc2JfZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsCisJCQkJCQkgICAgICByaW5nLT50eGhkcl9jYWNoZSwKKwkJCQkJCSAgICAgIGI0M190eGhkcl9zaXplKGRldiksCisJCQkJCQkgICAgICBETUFfVE9fREVWSUNFKTsKIAogCQkJaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFfdGVzdCwKIAkJCQkJCSAgYjQzX3R4aGRyX3NpemUoZGV2KSwgMSkpIHsKQEAgLTg3Myw5ICs4NzgsOSBAQAogCQkJfQogCQl9CiAKLQkJZG1hX3VubWFwX3NpbmdsZShkZXYtPmRldi0+ZG1hX2RldiwKLQkJCQkgZG1hX3Rlc3QsIGI0M190eGhkcl9zaXplKGRldiksCi0JCQkJIERNQV9UT19ERVZJQ0UpOworCQlzc2JfZG1hX3VubWFwX3NpbmdsZShkZXYtPmRldiwKKwkJCQkgICAgIGRtYV90ZXN0LCBiNDNfdHhoZHJfc2l6ZShkZXYpLAorCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJfQogCiAJZXJyID0gYWxsb2NfcmluZ21lbW9yeShyaW5nKTsKQEAgLTExMzAsMTAgKzExMzUsMTAgQEAKIH0KIAogc3RhdGljIGludCBkbWFfdHhfZnJhZ21lbnQoc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLAotCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKQorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgYjQzX2RtYV9vcHMgKm9wcyA9IHJpbmctPm9wczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJdTggKmhlYWRlcjsKIAlpbnQgc2xvdCwgb2xkX3RvcF9zbG90LCBvbGRfdXNlZF9zbG90czsKIAlpbnQgZXJyOwpAQCAtMTE1Nyw3ICsxMTYyLDcgQEAKIAloZWFkZXIgPSAmKHJpbmctPnR4aGRyX2NhY2hlW3Nsb3QgKiBoZHJzaXplXSk7CiAJY29va2llID0gZ2VuZXJhdGVfY29va2llKHJpbmcsIHNsb3QpOwogCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihyaW5nLT5kZXYsIGhlYWRlciwKLQkJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwgY3RsLCBjb29raWUpOworCQkJCSBza2ItPmRhdGEsIHNrYi0+bGVuLCBpbmZvLCBjb29raWUpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCXJpbmctPmN1cnJlbnRfc2xvdCA9IG9sZF90b3Bfc2xvdDsKIAkJcmluZy0+dXNlZF9zbG90cyA9IG9sZF91c2VkX3Nsb3RzOwpAQCAtMTE3OSw3ICsxMTg0LDYgQEAKIAlkZXNjID0gb3BzLT5pZHgyZGVzYyhyaW5nLCBzbG90LCAmbWV0YSk7CiAJbWVtc2V0KG1ldGEsIDAsIHNpemVvZigqbWV0YSkpOwogCi0JbWVtY3B5KCZtZXRhLT50eHN0YXQuY29udHJvbCwgY3RsLCBzaXplb2YoKmN0bCkpOwogCW1ldGEtPnNrYiA9IHNrYjsKIAltZXRhLT5pc19sYXN0X2ZyYWdtZW50ID0gMTsKIApAQCAtMTIwOSw3ICsxMjEzLDcgQEAKIAogCW9wcy0+ZmlsbF9kZXNjcmlwdG9yKHJpbmcsIGRlc2MsIG1ldGEtPmRtYWFkZHIsIHNrYi0+bGVuLCAwLCAxLCAxKTsKIAotCWlmIChjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1NFTkRfQUZURVJfRFRJTSkgeworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKSB7CiAJCS8qIFRlbGwgdGhlIGZpcm13YXJlIGFib3V0IHRoZSBjb29raWUgb2YgdGhlIGxhc3QKIAkJICogbWNhc3QgZnJhbWUsIHNvIGl0IGNhbiBjbGVhciB0aGUgbW9yZS1kYXRhIGJpdCBpbiBpdC4gKi8KIAkJYjQzX3NobV93cml0ZTE2KHJpbmctPmRldiwgQjQzX1NITV9TSEFSRUQsCkBAIC0xMjgwLDE2ICsxMjg0LDE2IEBACiAJcmV0dXJuIHJpbmc7CiB9CiAKLWludCBiNDNfZG1hX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCitpbnQgYjQzX2RtYV90eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGI0M19kbWFyaW5nICpyaW5nOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JaWYgKGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfU0VORF9BRlRFUl9EVElNKSB7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pIHsKIAkJLyogVGhlIG11bHRpY2FzdCByaW5nIHdpbGwgYmUgc2VudCBhZnRlciB0aGUgRFRJTSAqLwogCQlyaW5nID0gZGV2LT5kbWEudHhfcmluZ19tY2FzdDsKIAkJLyogU2V0IHRoZSBtb3JlLWRhdGEgYml0LiBVY29kZSB3aWxsIGNsZWFyIGl0IG9uCkBAIC0xMjk3LDcgKzEzMDEsOCBAQAogCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOwogCX0gZWxzZSB7CiAJCS8qIERlY2lkZSBieSBwcmlvcml0eSB3aGVyZSB0byBwdXQgdGhpcyBmcmFtZS4gKi8KLQkJcmluZyA9IHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KGRldiwgY3RsLT5xdWV1ZSk7CisJCXJpbmcgPSBzZWxlY3RfcmluZ19ieV9wcmlvcml0eSgKKwkJCWRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CkBAIC0xMzE1LDkgKzEzMjAsOSBAQAogCS8qIEFzc2lnbiB0aGUgcXVldWUgbnVtYmVyIHRvIHRoZSByaW5nIChpZiBub3QgYWxyZWFkeSBkb25lIGJlZm9yZSkKIAkgKiBzbyBUWCBzdGF0dXMgaGFuZGxpbmcgY2FuIHVzZSBpdC4gVGhlIHF1ZXVlIHRvIHJpbmcgbWFwcGluZyBpcwogCSAqIHN0YXRpYywgc28gd2UgZG9uJ3QgbmVlZCB0byBzdG9yZSBpdCBwZXIgZnJhbWUuICovCi0JcmluZy0+cXVldWVfcHJpbyA9IGN0bC0+cXVldWU7CisJcmluZy0+cXVldWVfcHJpbyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCi0JZXJyID0gZG1hX3R4X2ZyYWdtZW50KHJpbmcsIHNrYiwgY3RsKTsKKwllcnIgPSBkbWFfdHhfZnJhZ21lbnQocmluZywgc2tiKTsKIAlpZiAodW5saWtlbHkoZXJyID09IC1FTk9LRVkpKSB7CiAJCS8qIERyb3AgdGhpcyBwYWNrZXQsIGFzIHdlIGRvbid0IGhhdmUgdGhlIGVuY3J5cHRpb24ga2V5CiAJCSAqIGFueW1vcmUgYW5kIG11c3Qgbm90IHRyYW5zbWl0IGl0IHVuZW5jcnlwdGVkLiAqLwpAQCAtMTMzMyw3ICsxMzM4LDcgQEAKIAlpZiAoKGZyZWVfc2xvdHMocmluZykgPCBTTE9UU19QRVJfUEFDS0VUKSB8fAogCSAgICBzaG91bGRfaW5qZWN0X292ZXJmbG93KHJpbmcpKSB7CiAJCS8qIFRoaXMgVFggcmluZyBpcyBmdWxsLiAqLwotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShkZXYtPndsLT5odywgY3RsLT5xdWV1ZSk7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldi0+d2wtPmh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiAJCXJpbmctPnN0b3BwZWQgPSAxOwogCQlpZiAoYjQzX2RlYnVnKGRldiwgQjQzX0RCR19ETUFWRVJCT1NFKSkgewogCQkJYjQzZGJnKGRldi0+d2wsICJTdG9wcGVkIFRYIHJpbmcgJWRcbiIsIHJpbmctPmluZGV4KTsKQEAgLTEzNzYsMTMgKzEzODEsMTkgQEAKIAkJCQkJIGI0M190eGhkcl9zaXplKGRldiksIDEpOwogCiAJCWlmIChtZXRhLT5pc19sYXN0X2ZyYWdtZW50KSB7Ci0JCQlCNDNfV0FSTl9PTighbWV0YS0+c2tiKTsKLQkJCS8qIENhbGwgYmFjayB0byBpbmZvcm0gdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gYWJvdXQgdGhlCi0JCQkgKiBzdGF0dXMgb2YgdGhlIHRyYW5zbWlzc2lvbi4KLQkJCSAqIFNvbWUgZmllbGRzIG9mIHR4c3RhdCBhcmUgYWxyZWFkeSBmaWxsZWQgaW4gZG1hX3R4KCkuCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisKKwkJCUJVR19PTighbWV0YS0+c2tiKTsKKworCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IobWV0YS0+c2tiKTsKKworCQkJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKworCQkJLyoKKwkJCSAqIENhbGwgYmFjayB0byBpbmZvcm0gdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gYWJvdXQKKwkJCSAqIHRoZSBzdGF0dXMgb2YgdGhlIHRyYW5zbWlzc2lvbi4KIAkJCSAqLwotCQkJZnJhbWVfc3VjY2VlZCA9IGI0M19maWxsX3R4c3RhdHVzX3JlcG9ydCgKLQkJCQkJCSYobWV0YS0+dHhzdGF0KSwgc3RhdHVzKTsKKwkJCWZyYW1lX3N1Y2NlZWQgPSBiNDNfZmlsbF90eHN0YXR1c19yZXBvcnQoaW5mbywgc3RhdHVzKTsKICNpZmRlZiBDT05GSUdfQjQzX0RFQlVHCiAJCQlpZiAoZnJhbWVfc3VjY2VlZCkKIAkJCQlyaW5nLT5ucl9zdWNjZWVkX3R4X3BhY2tldHMrKzsKQEAgLTEzOTAsOCArMTQwMSw4IEBACiAJCQkJcmluZy0+bnJfZmFpbGVkX3R4X3BhY2tldHMrKzsKIAkJCXJpbmctPm5yX3RvdGFsX3BhY2tldF90cmllcyArPSBzdGF0dXMtPmZyYW1lX2NvdW50OwogI2VuZGlmIC8qIERFQlVHICovCi0JCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoZGV2LT53bC0+aHcsIG1ldGEtPnNrYiwKLQkJCQkJCSAgICAmKG1ldGEtPnR4c3RhdCkpOworCQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGRldi0+d2wtPmh3LCBtZXRhLT5za2IpOworCiAJCQkvKiBza2IgaXMgZnJlZWQgYnkgaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKCkgKi8KIAkJCW1ldGEtPnNrYiA9IE5VTEw7CiAJCX0gZWxzZSB7CkBAIC0xNDI2LDE4ICsxNDM3LDE2IEBACiB7CiAJY29uc3QgaW50IG5yX3F1ZXVlcyA9IGRldi0+d2wtPmh3LT5xdWV1ZXM7CiAJc3RydWN0IGI0M19kbWFyaW5nICpyaW5nOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHNfZGF0YSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3F1ZXVlczsgaSsrKSB7Ci0JCWRhdGEgPSAmKHN0YXRzLT5kYXRhW2ldKTsKIAkJcmluZyA9IHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KGRldiwgaSk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKLQkJZGF0YS0+bGVuID0gcmluZy0+dXNlZF9zbG90cyAvIFNMT1RTX1BFUl9QQUNLRVQ7Ci0JCWRhdGEtPmxpbWl0ID0gcmluZy0+bnJfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOwotCQlkYXRhLT5jb3VudCA9IHJpbmctPm5yX3R4X3BhY2tldHM7CisJCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOworCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gU0xPVFNfUEVSX1BBQ0tFVDsKKwkJc3RhdHNbaV0uY291bnQgPSByaW5nLT5ucl90eF9wYWNrZXRzOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IDIwYWNmODguLmQxZWI1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTE4MSw3ICsxODEsNiBAQAogCWRtYV9hZGRyX3QgZG1hYWRkcjsKIAkvKiBpZWVlODAyMTEgVFggc3RhdHVzLiBPbmx5IHVzZWQgb25jZSBwZXIgODAyLjExIGZyYWcuICovCiAJYm9vbCBpc19sYXN0X2ZyYWdtZW50OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHR4c3RhdDsKIH07CiAKIHN0cnVjdCBiNDNfZG1hcmluZzsKQEAgLTI4NSw3ICsyODQsNyBAQAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiAKIGludCBiNDNfZG1hX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpOworCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgYjQzX2RtYV9oYW5kbGVfdHhzdGF0dXMoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJICAgICBjb25zdCBzdHJ1Y3QgYjQzX3R4c3RhdHVzICpzdGF0dXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCmluZGV4IGQ4OTBmMzYuLjljODU0ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCkBAIC0zNiwxNyArMzYsMjggQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAKLS8qIERlZmluZSB0byAxIHRvIGFsd2F5cyBjYWxpYnJhdGUgYWxsIHBvc3NpYmxlIExPIGNvbnRyb2wgcGFpcnMuCi0gKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB1bnRpbCB3ZSBmaXggdGhlIHBhcnRpYWwgTE8gY2FsaWJyYXRpb24gb3B0aW1pemF0aW9uLiAqLwotI2RlZmluZSBCNDNfQ0FMSUJfQUxMX0xPQ1RMUwkxCitzdGF0aWMgc3RydWN0IGI0M19sb19jYWxpYiAqIGI0M19maW5kX2xvX2NhbGliKHN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbywKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCit7CisJc3RydWN0IGI0M19sb19jYWxpYiAqYzsKIAorCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmxvLT5jYWxpYl9saXN0LCBsaXN0KSB7CisJCWlmICghYjQzX2NvbXBhcmVfYmJhdHQoJmMtPmJiYXR0LCBiYmF0dCkpCisJCQljb250aW51ZTsKKwkJaWYgKCFiNDNfY29tcGFyZV9yZmF0dCgmYy0+cmZhdHQsIHJmYXR0KSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gYzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KIAogLyogV3JpdGUgdGhlIExvY2FsT3NjaWxsYXRvciBDb250cm9sIChhZGp1c3QpIHZhbHVlLXBhaXIuICovCiBzdGF0aWMgdm9pZCBiNDNfbG9fd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCBzdHJ1Y3QgYjQzX2xvY3RsICpjb250cm9sKQogewogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAJdTE2IHZhbHVlOwotCXUxNiByZWc7CiAKIAlpZiAoQjQzX0RFQlVHKSB7CiAJCWlmICh1bmxpa2VseShhYnMoY29udHJvbC0+aSkgPiAxNiB8fCBhYnMoY29udHJvbC0+cSkgPiAxNikpIHsKQEAgLTU2LDE4OSArNjcsMTEgQEAKIAkJCXJldHVybjsKIAkJfQogCX0KKwlCNDNfV0FSTl9PTihwaHktPnR5cGUgIT0gQjQzX1BIWVRZUEVfRyk7CiAKIAl2YWx1ZSA9ICh1OCkgKGNvbnRyb2wtPnEpOwogCXZhbHVlIHw9ICgodTgpIChjb250cm9sLT5pKSkgPDwgODsKLQotCXJlZyA9IChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQikgPyAweDAwMkYgOiBCNDNfUEhZX0xPX0NUTDsKLQliNDNfcGh5X3dyaXRlKGRldiwgcmVnLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYXNzZXJ0X3JmYXR0X2FuZF9iYmF0dChjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCwKLQkJCQkgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAotCQkJCSAgc3RydWN0IGI0M193bGRldiAqZGV2KQotewotCWludCBlcnIgPSAwOwotCi0JLyogQ2hlY2sgdGhlIGF0dGVudWF0aW9uIHZhbHVlcyBhZ2FpbnN0IHRoZSBMTyBjb250cm9sIGFycmF5IHNpemVzLiAqLwotCWlmICh1bmxpa2VseShyZmF0dC0+YXR0ID49IEI0M19OUl9SRikpIHsKLQkJYjQzZXJyKGRldi0+d2wsICJyZmF0dCgldSkgPj0gc2l6ZSBvZiBMTyBhcnJheVxuIiwgcmZhdHQtPmF0dCk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotCWlmICh1bmxpa2VseShiYmF0dC0+YXR0ID49IEI0M19OUl9CQikpIHsKLQkJYjQzZXJyKGRldi0+d2wsICJiYmF0dCgldSkgPj0gc2l6ZSBvZiBMTyBhcnJheVxuIiwgYmJhdHQtPmF0dCk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotI2lmICFCNDNfQ0FMSUJfQUxMX0xPQ1RMUwotc3RhdGljCi1zdHJ1Y3QgYjQzX2xvY3RsICpiNDNfZ2V0X2xvX2dfY3RsX25vcGFkbWl4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJICAgIGNvbnN0IHN0cnVjdCBiNDNfcmZhdHQgKnJmYXR0LAotCQkJCQkgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQpCi17Ci0Jc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKLQlzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8gPSBwaHktPmxvX2NvbnRyb2w7Ci0KLQlpZiAoYXNzZXJ0X3JmYXR0X2FuZF9iYmF0dChyZmF0dCwgYmJhdHQsIGRldikpCi0JCXJldHVybiAmKGxvLT5ub19wYWRtaXhbMF1bMF0pOwkvKiBKdXN0IHByZXZlbnQgYSBjcmFzaCAqLwotCXJldHVybiAmKGxvLT5ub19wYWRtaXhbYmJhdHQtPmF0dF1bcmZhdHQtPmF0dF0pOwotfQotI2VuZGlmIC8qICFCNDNfQ0FMSUJfQUxMX0xPQ1RMUyAqLwotCi1zdHJ1Y3QgYjQzX2xvY3RsICpiNDNfZ2V0X2xvX2dfY3RsKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCkKLXsKLQlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwotCXN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbyA9IHBoeS0+bG9fY29udHJvbDsKLQotCWlmIChhc3NlcnRfcmZhdHRfYW5kX2JiYXR0KHJmYXR0LCBiYmF0dCwgZGV2KSkKLQkJcmV0dXJuICYobG8tPm5vX3BhZG1peFswXVswXSk7CS8qIEp1c3QgcHJldmVudCBhIGNyYXNoICovCi0JaWYgKHJmYXR0LT53aXRoX3BhZG1peCkKLQkJcmV0dXJuICYobG8tPndpdGhfcGFkbWl4W2JiYXR0LT5hdHRdW3JmYXR0LT5hdHRdKTsKLQlyZXR1cm4gJihsby0+bm9fcGFkbWl4W2JiYXR0LT5hdHRdW3JmYXR0LT5hdHRdKTsKLX0KLQotLyogQ2FsbCBhIGZ1bmN0aW9uIGZvciBldmVyeSBwb3NzaWJsZSBMTyBjb250cm9sIHZhbHVlLXBhaXIuICovCi1zdGF0aWMgdm9pZCBiNDNfY2FsbF9mb3JfZWFjaF9sb2N0bChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJICAgIHZvaWQgKCpmdW5jKSAoc3RydWN0IGI0M193bGRldiAqLAotCQkJCQkJICBzdHJ1Y3QgYjQzX2xvY3RsICopKQotewotCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7Ci0Jc3RydWN0IGI0M190eHBvd2VyX2xvX2NvbnRyb2wgKmN0bCA9IHBoeS0+bG9fY29udHJvbDsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgPCBCNDNfTlJfQkI7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgQjQzX05SX1JGOyBqKyspCi0JCQlmdW5jKGRldiwgJihjdGwtPndpdGhfcGFkbWl4W2ldW2pdKSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBCNDNfTlJfQkI7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgQjQzX05SX1JGOyBqKyspCi0JCQlmdW5jKGRldiwgJihjdGwtPm5vX3BhZG1peFtpXVtqXSkpOwotCX0KLX0KLQotc3RhdGljIHUxNiBsb19iX3IxNV9sb29wKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLQlpbnQgaTsKLQl1MTYgcmV0ID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTUsIDB4QUZBMCk7Ci0JCXVkZWxheSgxKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxNSwgMHhFRkEwKTsKLQkJdWRlbGF5KDEwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxNSwgMHhGRkEwKTsKLQkJdWRlbGF5KDQwKTsKLQkJcmV0ICs9IGI0M19waHlfcmVhZChkZXYsIDB4MDAyQyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBiNDNfbG9fYl9tZWFzdXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLQlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwotCXUxNiByZWdzdGFja1sxMl0gPSB7IDAgfTsKLQl1MTYgbWxzOwotCXUxNiBmdmFsOwotCWludCBpLCBqOwotCi0JcmVnc3RhY2tbMF0gPSBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTUpOwotCXJlZ3N0YWNrWzFdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA1MikgJiAweEZGRjA7Ci0KLQlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUzKSB7Ci0JCXJlZ3N0YWNrWzJdID0gYjQzX3BoeV9yZWFkKGRldiwgMHgwMDBBKTsKLQkJcmVnc3RhY2tbM10gPSBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMkEpOwotCQlyZWdzdGFja1s0XSA9IGI0M19waHlfcmVhZChkZXYsIDB4MDAzNSk7Ci0JCXJlZ3N0YWNrWzVdID0gYjQzX3BoeV9yZWFkKGRldiwgMHgwMDAzKTsKLQkJcmVnc3RhY2tbNl0gPSBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMDEpOwotCQlyZWdzdGFja1s3XSA9IGI0M19waHlfcmVhZChkZXYsIDB4MDAzMCk7Ci0KLQkJcmVnc3RhY2tbOF0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDQzKTsKLQkJcmVnc3RhY2tbOV0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKTsKLQkJcmVnc3RhY2tbMTBdID0gYjQzX3JlYWQxNihkZXYsIDB4MDNFQyk7Ci0JCXJlZ3N0YWNrWzExXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNTIpICYgMHgwMEYwOwotCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzAsIDB4MDBGRik7Ci0JCWI0M193cml0ZTE2KGRldiwgMHgwM0VDLCAweDNGM0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM1LCByZWdzdGFja1s0XSAmIDB4RkY3Rik7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLCByZWdzdGFja1s5XSAmIDB4RkZGMCk7Ci0JfQotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTUsIDB4QjAwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyQiwgMHgwMDA0KTsKLQotCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTMpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyQiwgMHgwMjAzKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyQSwgMHgwOEEzKTsKLQl9Ci0KLQlwaHktPm1pbmxvd3NpZ1swXSA9IDB4RkZGRjsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNTIsIHJlZ3N0YWNrWzFdIHwgaSk7Ci0JCWxvX2JfcjE1X2xvb3AoZGV2KTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNTIsIHJlZ3N0YWNrWzFdIHwgaSk7Ci0JCW1scyA9IGxvX2JfcjE1X2xvb3AoZGV2KSAvIDEwOwotCQlpZiAobWxzIDwgcGh5LT5taW5sb3dzaWdbMF0pIHsKLQkJCXBoeS0+bWlubG93c2lnWzBdID0gbWxzOwotCQkJcGh5LT5taW5sb3dzaWdwb3NbMF0gPSBpOwotCQl9Ci0JfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDUyLCByZWdzdGFja1sxXSB8IHBoeS0+bWlubG93c2lncG9zWzBdKTsKLQotCXBoeS0+bWlubG93c2lnWzFdID0gMHhGRkZGOwotCi0JZm9yIChpID0gLTQ7IGkgPCA1OyBpICs9IDIpIHsKLQkJZm9yIChqID0gLTQ7IGogPCA1OyBqICs9IDIpIHsKLQkJCWlmIChqIDwgMCkKLQkJCQlmdmFsID0gKDB4MDEwMCAqIGkpICsgaiArIDB4MDEwMDsKLQkJCWVsc2UKLQkJCQlmdmFsID0gKDB4MDEwMCAqIGkpICsgajsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkYsIGZ2YWwpOwotCQkJbWxzID0gbG9fYl9yMTVfbG9vcChkZXYpIC8gMTA7Ci0JCQlpZiAobWxzIDwgcGh5LT5taW5sb3dzaWdbMV0pIHsKLQkJCQlwaHktPm1pbmxvd3NpZ1sxXSA9IG1sczsKLQkJCQlwaHktPm1pbmxvd3NpZ3Bvc1sxXSA9IGZ2YWw7Ci0JCQl9Ci0JCX0KLQl9Ci0JcGh5LT5taW5sb3dzaWdwb3NbMV0gKz0gMHgwMTAxOwotCi0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyRiwgcGh5LT5taW5sb3dzaWdwb3NbMV0pOwotCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTMpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwQSwgcmVnc3RhY2tbMl0pOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLCByZWdzdGFja1szXSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsIHJlZ3N0YWNrWzRdKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgcmVnc3RhY2tbNV0pOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDAxLCByZWdzdGFja1s2XSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzAsIHJlZ3N0YWNrWzddKTsKLQotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA0MywgcmVnc3RhY2tbOF0pOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgcmVnc3RhY2tbOV0pOwotCi0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDUyLAotCQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNTIpICYgMHgwMDBGKQotCQkJCSAgfCByZWdzdGFja1sxMV0pOwotCi0JCWI0M193cml0ZTE2KGRldiwgMHgwM0VDLCByZWdzdGFja1sxMF0pOwotCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE1LCByZWdzdGFja1swXSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTE9fQ1RMLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyB1MTYgbG9fbWVhc3VyZV9mZWVkdGhyb3VnaChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCkBAIC0zNjYsNyArMTk5LDcgQEAKIAkJaWYgKGxiX2dhaW4gPiAxMCkgewogCQkJcmFkaW9fcGN0bF9yZWcgPSAwOwogCQkJcGdhID0gYWJzKDEwIC0gbGJfZ2FpbikgLyA2OwotCQkJcGdhID0gbGltaXRfdmFsdWUocGdhLCAwLCAxNSk7CisJCQlwZ2EgPSBjbGFtcF92YWwocGdhLCAwLCAxNSk7CiAJCX0gZWxzZSB7CiAJCQlpbnQgY21wX3ZhbDsKIAkJCWludCB0bXA7CkBAIC00MzgsNDggKzI3MSwyNiBAQAogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUyKQogCQkJCSAgJiAweEZGRjApOwkvKiBUWCBiaWFzID09IDAgKi8KIAl9CisJbG8tPnR4Y3RsX21lYXN1cmVkX3RpbWUgPSBqaWZmaWVzOwogfQogCiBzdGF0aWMgdm9pZCBsb19yZWFkX3Bvd2VyX3ZlY3RvcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAlzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8gPSBwaHktPmxvX2NvbnRyb2w7Ci0JdTE2IGk7CisJaW50IGk7CiAJdTY0IHRtcDsKIAl1NjQgcG93ZXJfdmVjdG9yID0gMDsKLQlpbnQgcmZfb2Zmc2V0LCBiYl9vZmZzZXQ7Ci0Jc3RydWN0IGI0M19sb2N0bCAqbG9jdGw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSArPSAyKSB7CiAJCXRtcCA9IGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9TSEFSRUQsIDB4MzEwICsgaSk7Ci0JCS8qIENsZWFyIHRoZSB0b3AgYnl0ZS4gV2UgZ2V0IGhvbGVzIGluIHRoZSBiaXRtYXAuLi4gKi8KLQkJdG1wICY9IDB4RkY7CiAJCXBvd2VyX3ZlY3RvciB8PSAodG1wIDw8IChpICogOCkpOwogCQkvKiBDbGVhciB0aGUgdmVjdG9yIG9uIHRoZSBkZXZpY2UuICovCiAJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCAweDMxMCArIGksIDApOwogCX0KLQogCWlmIChwb3dlcl92ZWN0b3IpCiAJCWxvLT5wb3dlcl92ZWN0b3IgPSBwb3dlcl92ZWN0b3I7Ci0JcG93ZXJfdmVjdG9yID0gbG8tPnBvd2VyX3ZlY3RvcjsKLQotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWlmIChwb3dlcl92ZWN0b3IgJiAoKHU2NCkgMVVMTCA8PCBpKSkgewotCQkJLyogTm93IGZpZ3VyZSBvdXQgd2hpY2ggYjQzX2xvY3RsIGNvcnJlc3BvbmRzCi0JCQkgKiB0byB0aGlzIGJpdC4KLQkJCSAqLwotCQkJcmZfb2Zmc2V0ID0gaSAvIGxvLT5yZmF0dF9saXN0LmxlbjsKLQkJCWJiX29mZnNldCA9IGkgJSBsby0+cmZhdHRfbGlzdC5sZW47CS8vRklYTUU/Ci0JCQlsb2N0bCA9Ci0JCQkgICAgYjQzX2dldF9sb19nX2N0bChkZXYsCi0JCQkJCSAgICAgJmxvLT5yZmF0dF9saXN0Lmxpc3RbcmZfb2Zmc2V0XSwKLQkJCQkJICAgICAmbG8tPmJiYXR0X2xpc3QubGlzdFtiYl9vZmZzZXRdKTsKLQkJCS8qIEFuZCBtYXJrIGl0IGFzICJ1c2VkIiwgYXMgdGhlIGRldmljZSB0b2xkIHVzCi0JCQkgKiB0aHJvdWdoIHRoZSBiaXRtYXAgaXQgaXMgdXNpbmcgaXQuCi0JCQkgKi8KLQkJCWxvY3RsLT51c2VkID0gMTsKLQkJfQotCX0KKwlsby0+cHdyX3ZlY19yZWFkX3RpbWUgPSBqaWZmaWVzOwogfQogCiAvKiA4MDIuMTEvTE8vR1BIWS9NZWFzdXJpbmdHYWlucyAqLwpAQCAtNTEwLDcgKzMyMSw3IEBACiAJCQlwaHktPmxuYV9sb2RfZ2FpbiA9IDE7CiAJCQl0cnN3X3J4X2dhaW4gLT0gODsKIAkJfQotCQl0cnN3X3J4X2dhaW4gPSBsaW1pdF92YWx1ZSh0cnN3X3J4X2dhaW4sIDAsIDB4MkQpOworCQl0cnN3X3J4X2dhaW4gPSBjbGFtcF92YWwodHJzd19yeF9nYWluLCAwLCAweDJEKTsKIAkJcGh5LT5wZ2FfZ2FpbiA9IHRyc3dfcnhfZ2FpbiAvIDM7CiAJCWlmIChwaHktPnBnYV9nYWluID49IDUpIHsKIAkJCXBoeS0+cGdhX2dhaW4gLT0gNTsKQEAgLTYwOSw4ICs0MjAsNiBAQAogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgxNiksIDB4NDEwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MTcpLCAweDgyMCk7CiAJfQotCWlmICghbG8tPnJlYnVpbGQgJiYgYjQzX2hhc19oYXJkd2FyZV9wY3RsKHBoeSkpCi0JCWxvX3JlYWRfcG93ZXJfdmVjdG9yKGRldik7CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKIAkJc2F2LT5waHlfYW5hbG9nb3ZlciA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUik7CiAJCXNhdi0+cGh5X2FuYWxvZ292ZXJ2YWwgPQpAQCAtNjkxLDggKzUwMCwxMiBAQAogCWI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUxKTsJLyogZHVtbXkgcmVhZCAqLwogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRykKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkYpLCAwKTsKLQlpZiAobG8tPnJlYnVpbGQpCisKKwkvKiBSZS1tZWFzdXJlIHRoZSB0eGN0bCB2YWx1ZXMsIGlmIG5lZWRlZC4gKi8KKwlpZiAodGltZV9iZWZvcmUobG8tPnR4Y3RsX21lYXN1cmVkX3RpbWUsCisJCQlqaWZmaWVzIC0gQjQzX0xPX1RYQ1RMX0VYUElSRSkpCiAJCWxvX21lYXN1cmVfdHhjdGxfdmFsdWVzKGRldik7CisKIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0cgJiYgcGh5LT5yZXYgPj0gMykgewogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9MT19NQVNLLCAweEMwNzgpOwogCX0gZWxzZSB7CkBAIC03MDcsNyArNTIwLDYgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbG9fZ19zYXZlZF92YWx1ZXMgKnNhdikKIHsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwotCXN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbyA9IHBoeS0+bG9fY29udHJvbDsKIAl1MTYgdG1wOwogCiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKQEAgLTcyMiwxNCArNTM0LDYgQEAKIAkJdG1wID0gKHBoeS0+cGdhX2dhaW4gfCAweEVGQTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QR0FDVEwsIHRtcCk7CiAJfQotCWlmIChiNDNfaGFzX2hhcmR3YXJlX3BjdGwocGh5KSkgewotCQliNDNfZ3BoeV9kY19sdF9pbml0KGRldik7Ci0JfSBlbHNlIHsKLQkJaWYgKGxvLT5yZWJ1aWxkKQotCQkJYjQzX2xvX2dfYWRqdXN0X3RvKGRldiwgMywgMiwgMCk7Ci0JCWVsc2UKLQkJCWI0M19sb19nX2FkanVzdChkZXYpOwotCX0KIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0cpIHsKIAkJaWYgKHBoeS0+cmV2ID49IDMpCiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyRSksIDB4QzA3OCk7CkBAIC03OTMsNyArNTk3LDYgQEAKIAkJCQkgICAgc3RydWN0IGI0M19sb19nX3N0YXRlbWFjaGluZSAqZCkKIHsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwotCXN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbyA9IHBoeS0+bG9fY29udHJvbDsKIAlzdHJ1Y3QgYjQzX2xvY3RsIHRlc3RfbG9jdGw7CiAJc3RydWN0IGI0M19sb2N0bCBvcmlnX2xvY3RsOwogCXN0cnVjdCBiNDNfbG9jdGwgcHJldl9sb2N0bCA9IHsKQEAgLTg1Miw3ICs2NTUsNyBAQAogCQkJCWZvdW5kX2xvd2VyID0gMTsKIAkJCQlkLT5sb3dlc3RfZmVlZHRoID0gZmVlZHRoOwogCQkJCWlmICgoZC0+bnJfbWVhc3VyZWQgPCAyKSAmJgotCQkJCSAgICAoIWhhc19sb29wYmFja19nYWluKHBoeSkgfHwgbG8tPnJlYnVpbGQpKQorCQkJCSAgICAhaGFzX2xvb3BiYWNrX2dhaW4ocGh5KSkKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTg3NCw3ICs2NzcsNiBAQAogCQkJCQkgaW50ICptYXhfcnhfZ2FpbikKIHsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwotCXN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbyA9IHBoeS0+bG9fY29udHJvbDsKIAlzdHJ1Y3QgYjQzX2xvX2dfc3RhdGVtYWNoaW5lIGQ7CiAJdTE2IGZlZWR0aDsKIAlpbnQgZm91bmRfbG93ZXI7CkBAIC04ODMsMTggKzY4NSwxOCBAQAogCiAJZC5ucl9tZWFzdXJlZCA9IDA7CiAJZC5zdGF0ZV92YWxfbXVsdGlwbGllciA9IDE7Ci0JaWYgKGhhc19sb29wYmFja19nYWluKHBoeSkgJiYgIWxvLT5yZWJ1aWxkKQorCWlmIChoYXNfbG9vcGJhY2tfZ2FpbihwaHkpKQogCQlkLnN0YXRlX3ZhbF9tdWx0aXBsaWVyID0gMzsKIAogCW1lbWNweSgmZC5taW5fbG9jdGwsIGxvY3RsLCBzaXplb2Yoc3RydWN0IGI0M19sb2N0bCkpOwotCWlmIChoYXNfbG9vcGJhY2tfZ2FpbihwaHkpICYmIGxvLT5yZWJ1aWxkKQorCWlmIChoYXNfbG9vcGJhY2tfZ2FpbihwaHkpKQogCQltYXhfcmVwZWF0ID0gNDsKIAlkbyB7CiAJCWI0M19sb193cml0ZShkZXYsICZkLm1pbl9sb2N0bCk7CiAJCWZlZWR0aCA9IGxvX21lYXN1cmVfZmVlZHRocm91Z2goZGV2LCBwaHktPmxuYV9nYWluLAogCQkJCQkJcGh5LT5wZ2FfZ2FpbiwKIAkJCQkJCXBoeS0+dHJzd19yeF9nYWluKTsKLQkJaWYgKCFsby0+cmVidWlsZCAmJiBmZWVkdGggPCAweDI1OCkgeworCQlpZiAoZmVlZHRoIDwgMHgyNTgpIHsKIAkJCWlmIChmZWVkdGggPj0gMHgxMkMpCiAJCQkJKm1heF9yeF9nYWluICs9IDY7CiAJCQllbHNlCkBAIC05NDQsMjc4ICs3NDYsMTg4IEBACiAJfSB3aGlsZSAoKytyZXBlYXRfY250IDwgbWF4X3JlcGVhdCk7CiB9CiAKLSNpZiBCNDNfQ0FMSUJfQUxMX0xPQ1RMUwotc3RhdGljIGNvbnN0IHN0cnVjdCBiNDNfcmZhdHQgYjQzX2Z1bGxfcmZhdHRfbGlzdF9pdGVtc1tdID0gewotCXsgLmF0dCA9IDAsIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gMSwgLndpdGhfcGFkbWl4ID0gMCwgfSwKLQl7IC5hdHQgPSAyLCAud2l0aF9wYWRtaXggPSAwLCB9LAotCXsgLmF0dCA9IDMsIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gNCwgLndpdGhfcGFkbWl4ID0gMCwgfSwKLQl7IC5hdHQgPSA1LCAud2l0aF9wYWRtaXggPSAwLCB9LAotCXsgLmF0dCA9IDYsIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gNywgLndpdGhfcGFkbWl4ID0gMCwgfSwKLQl7IC5hdHQgPSA4LCAud2l0aF9wYWRtaXggPSAwLCB9LAotCXsgLmF0dCA9IDksIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gMTAsIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gMTEsIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gMTIsIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gMTMsIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gMTQsIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gMTUsIC53aXRoX3BhZG1peCA9IDAsIH0sCi0JeyAuYXR0ID0gMCwgLndpdGhfcGFkbWl4ID0gMSwgfSwKLQl7IC5hdHQgPSAxLCAud2l0aF9wYWRtaXggPSAxLCB9LAotCXsgLmF0dCA9IDIsIC53aXRoX3BhZG1peCA9IDEsIH0sCi0JeyAuYXR0ID0gMywgLndpdGhfcGFkbWl4ID0gMSwgfSwKLQl7IC5hdHQgPSA0LCAud2l0aF9wYWRtaXggPSAxLCB9LAotCXsgLmF0dCA9IDUsIC53aXRoX3BhZG1peCA9IDEsIH0sCi0JeyAuYXR0ID0gNiwgLndpdGhfcGFkbWl4ID0gMSwgfSwKLQl7IC5hdHQgPSA3LCAud2l0aF9wYWRtaXggPSAxLCB9LAotCXsgLmF0dCA9IDgsIC53aXRoX3BhZG1peCA9IDEsIH0sCi0JeyAuYXR0ID0gOSwgLndpdGhfcGFkbWl4ID0gMSwgfSwKLQl7IC5hdHQgPSAxMCwgLndpdGhfcGFkbWl4ID0gMSwgfSwKLQl7IC5hdHQgPSAxMSwgLndpdGhfcGFkbWl4ID0gMSwgfSwKLQl7IC5hdHQgPSAxMiwgLndpdGhfcGFkbWl4ID0gMSwgfSwKLQl7IC5hdHQgPSAxMywgLndpdGhfcGFkbWl4ID0gMSwgfSwKLQl7IC5hdHQgPSAxNCwgLndpdGhfcGFkbWl4ID0gMSwgfSwKLQl7IC5hdHQgPSAxNSwgLndpdGhfcGFkbWl4ID0gMSwgfSwKLX07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGI0M19yZmF0dF9saXN0IGI0M19mdWxsX3JmYXR0X2xpc3QgPSB7Ci0JLmxpc3QJCT0gYjQzX2Z1bGxfcmZhdHRfbGlzdF9pdGVtcywKLQkubGVuCQk9IEFSUkFZX1NJWkUoYjQzX2Z1bGxfcmZhdHRfbGlzdF9pdGVtcyksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGI0M19iYmF0dCBiNDNfZnVsbF9iYmF0dF9saXN0X2l0ZW1zW10gPSB7Ci0JeyAuYXR0ID0gMCwgfSwKLQl7IC5hdHQgPSAxLCB9LAotCXsgLmF0dCA9IDIsIH0sCi0JeyAuYXR0ID0gMywgfSwKLQl7IC5hdHQgPSA0LCB9LAotCXsgLmF0dCA9IDUsIH0sCi0JeyAuYXR0ID0gNiwgfSwKLQl7IC5hdHQgPSA3LCB9LAotCXsgLmF0dCA9IDgsIH0sCi0JeyAuYXR0ID0gOSwgfSwKLQl7IC5hdHQgPSAxMCwgfSwKLQl7IC5hdHQgPSAxMSwgfSwKLX07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGI0M19iYmF0dF9saXN0IGI0M19mdWxsX2JiYXR0X2xpc3QgPSB7Ci0JLmxpc3QJCT0gYjQzX2Z1bGxfYmJhdHRfbGlzdF9pdGVtcywKLQkubGVuCQk9IEFSUkFZX1NJWkUoYjQzX2Z1bGxfYmJhdHRfbGlzdF9pdGVtcyksCi19OwotI2VuZGlmIC8qIEI0M19DQUxJQl9BTExfTE9DVExTICovCi0KLXN0YXRpYyB2b2lkIGxvX21lYXN1cmUoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljCitzdHJ1Y3QgYjQzX2xvX2NhbGliICogYjQzX2NhbGlicmF0ZV9sb19zZXR0aW5nKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKLQlzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8gPSBwaHktPmxvX2NvbnRyb2w7CiAJc3RydWN0IGI0M19sb2N0bCBsb2N0bCA9IHsKIAkJLmkgPSAwLAogCQkucSA9IDAsCiAJfTsKLQlzdHJ1Y3QgYjQzX2xvY3RsICpwbG9jdGw7CiAJaW50IG1heF9yeF9nYWluOwotCWludCByZmlkeCwgYmJpZHg7Ci0JY29uc3Qgc3RydWN0IGI0M19iYmF0dF9saXN0ICpiYmF0dF9saXN0OwotCWNvbnN0IHN0cnVjdCBiNDNfcmZhdHRfbGlzdCAqcmZhdHRfbGlzdDsKLQorCXN0cnVjdCBiNDNfbG9fY2FsaWIgKmNhbDsKKwlzdHJ1Y3QgbG9fZ19zYXZlZF92YWx1ZXMgdW5pbml0aWFsaXplZF92YXIoc2F2ZWRfcmVncyk7CiAJLyogVmFsdWVzIGZyb20gdGhlICJUWENUTCBSZWdpc3RlciBhbmQgVmFsdWUgVGFibGUiICovCiAJdTE2IHR4Y3RsX3JlZzsKIAl1MTYgdHhjdGxfdmFsdWU7CiAJdTE2IHBhZF9taXhfZ2FpbjsKIAotCWJiYXR0X2xpc3QgPSAmbG8tPmJiYXR0X2xpc3Q7Ci0JcmZhdHRfbGlzdCA9ICZsby0+cmZhdHRfbGlzdDsKLSNpZiBCNDNfQ0FMSUJfQUxMX0xPQ1RMUwotCWJiYXR0X2xpc3QgPSAmYjQzX2Z1bGxfYmJhdHRfbGlzdDsKLQlyZmF0dF9saXN0ID0gJmI0M19mdWxsX3JmYXR0X2xpc3Q7Ci0jZW5kaWYKKwlzYXZlZF9yZWdzLm9sZF9jaGFubmVsID0gcGh5LT5jaGFubmVsOworCWI0M19tYWNfc3VzcGVuZChkZXYpOworCWxvX21lYXN1cmVfc2V0dXAoZGV2LCAmc2F2ZWRfcmVncyk7CiAKIAl0eGN0bF9yZWcgPSBsb190eGN0bF9yZWdpc3Rlcl90YWJsZShkZXYsICZ0eGN0bF92YWx1ZSwgJnBhZF9taXhfZ2Fpbik7CiAKLQlmb3IgKHJmaWR4ID0gMDsgcmZpZHggPCByZmF0dF9saXN0LT5sZW47IHJmaWR4KyspIHsKKwliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsCisJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykgJiAweEZGRjApCisJCQkgIHwgcmZhdHQtPmF0dCk7CisJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0eGN0bF9yZWcsCisJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgdHhjdGxfcmVnKSAmIH50eGN0bF92YWx1ZSkKKwkJCSAgfCAocmZhdHQtPndpdGhfcGFkbWl4KSA/IHR4Y3RsX3ZhbHVlIDogMCk7CiAKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NDMpCi0JCQkJCSAgICAgICYgMHhGRkYwKSB8Ci0JCQkJICByZmF0dF9saXN0LT5saXN0W3JmaWR4XS5hdHQpOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHR4Y3RsX3JlZywKLQkJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgdHhjdGxfcmVnKQotCQkJCSAgICYgfnR4Y3RsX3ZhbHVlKQotCQkJCSAgfCAocmZhdHRfbGlzdC0+bGlzdFtyZmlkeF0ud2l0aF9wYWRtaXggPwotCQkJCSAgICAgdHhjdGxfdmFsdWUgOiAwKSk7CisJbWF4X3J4X2dhaW4gPSByZmF0dC0+YXR0ICogMjsKKwltYXhfcnhfZ2FpbiArPSBiYmF0dC0+YXR0IC8gMjsKKwlpZiAocmZhdHQtPndpdGhfcGFkbWl4KQorCQltYXhfcnhfZ2FpbiAtPSBwYWRfbWl4X2dhaW47CisJaWYgKGhhc19sb29wYmFja19nYWluKHBoeSkpCisJCW1heF9yeF9nYWluICs9IHBoeS0+bWF4X2xiX2dhaW47CisJbG9fbWVhc3VyZV9nYWluX3ZhbHVlcyhkZXYsIG1heF9yeF9nYWluLAorCQkJICAgICAgIGhhc19sb29wYmFja19nYWluKHBoeSkpOwogCi0JCWZvciAoYmJpZHggPSAwOyBiYmlkeCA8IGJiYXR0X2xpc3QtPmxlbjsgYmJpZHgrKykgewotCQkJaWYgKGxvLT5yZWJ1aWxkKSB7Ci0jaWYgQjQzX0NBTElCX0FMTF9MT0NUTFMKLQkJCQlwbG9jdGwgPSBiNDNfZ2V0X2xvX2dfY3RsKGRldiwKLQkJCQkJCQkgICZyZmF0dF9saXN0LT5saXN0W3JmaWR4XSwKLQkJCQkJCQkgICZiYmF0dF9saXN0LT5saXN0W2JiaWR4XSk7Ci0jZWxzZQotCQkJCXBsb2N0bCA9IGI0M19nZXRfbG9fZ19jdGxfbm9wYWRtaXgoZGV2LAotCQkJCQkJCQkgICAmcmZhdHRfbGlzdC0+Ci0JCQkJCQkJCSAgIGxpc3RbcmZpZHhdLAotCQkJCQkJCQkgICAmYmJhdHRfbGlzdC0+Ci0JCQkJCQkJCSAgIGxpc3RbYmJpZHhdKTsKLSNlbmRpZgotCQkJfSBlbHNlIHsKLQkJCQlwbG9jdGwgPSBiNDNfZ2V0X2xvX2dfY3RsKGRldiwKLQkJCQkJCQkgICZyZmF0dF9saXN0LT5saXN0W3JmaWR4XSwKLQkJCQkJCQkgICZiYmF0dF9saXN0LT5saXN0W2JiaWR4XSk7Ci0JCQkJaWYgKCFwbG9jdGwtPnVzZWQpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJbWVtY3B5KCZsb2N0bCwgcGxvY3RsLCBzaXplb2YobG9jdGwpKTsKLQkJCWxvY3RsLmkgPSAwOwotCQkJbG9jdGwucSA9IDA7CisJYjQzX3BoeV9zZXRfYmFzZWJhbmRfYXR0ZW51YXRpb24oZGV2LCBiYmF0dC0+YXR0KTsKKwlsb19wcm9iZV9sb2N0bHNfc3RhdGVtYWNoaW5lKGRldiwgJmxvY3RsLCAmbWF4X3J4X2dhaW4pOwogCi0JCQltYXhfcnhfZ2FpbiA9IHJmYXR0X2xpc3QtPmxpc3RbcmZpZHhdLmF0dCAqIDI7Ci0JCQltYXhfcnhfZ2FpbiArPSBiYmF0dF9saXN0LT5saXN0W2JiaWR4XS5hdHQgLyAyOwotCQkJaWYgKHJmYXR0X2xpc3QtPmxpc3RbcmZpZHhdLndpdGhfcGFkbWl4KQotCQkJCW1heF9yeF9nYWluIC09IHBhZF9taXhfZ2FpbjsKLQkJCWlmIChoYXNfbG9vcGJhY2tfZ2FpbihwaHkpKQotCQkJCW1heF9yeF9nYWluICs9IHBoeS0+bWF4X2xiX2dhaW47Ci0JCQlsb19tZWFzdXJlX2dhaW5fdmFsdWVzKGRldiwgbWF4X3J4X2dhaW4sCi0JCQkJCSAgICAgICBoYXNfbG9vcGJhY2tfZ2FpbihwaHkpKTsKKwlsb19tZWFzdXJlX3Jlc3RvcmUoZGV2LCAmc2F2ZWRfcmVncyk7CisJYjQzX21hY19lbmFibGUoZGV2KTsKIAotCQkJYjQzX3BoeV9zZXRfYmFzZWJhbmRfYXR0ZW51YXRpb24oZGV2LAotCQkJCQkJCSBiYmF0dF9saXN0LT5saXN0W2JiaWR4XS5hdHQpOwotCQkJbG9fcHJvYmVfbG9jdGxzX3N0YXRlbWFjaGluZShkZXYsICZsb2N0bCwgJm1heF9yeF9nYWluKTsKLQkJCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQikgewotCQkJCWxvY3RsLmkrKzsKLQkJCQlsb2N0bC5xKys7Ci0JCQl9Ci0JCQliNDNfbG9jdGxfc2V0X2NhbGlicmF0ZWQoJmxvY3RsLCAxKTsKLQkJCW1lbWNweShwbG9jdGwsICZsb2N0bCwgc2l6ZW9mKGxvY3RsKSk7Ci0JCX0KKwlpZiAoYjQzX2RlYnVnKGRldiwgQjQzX0RCR19MTykpIHsKKwkJYjQzZGJnKGRldi0+d2wsICJMTzogQ2FsaWJyYXRlZCBmb3IgQkIoJXUpLCBSRigldSwldSkgIgorCQkgICAgICAgIj0+IEk9JWQgUT0lZFxuIiwKKwkJICAgICAgIGJiYXR0LT5hdHQsIHJmYXR0LT5hdHQsIHJmYXR0LT53aXRoX3BhZG1peCwKKwkJICAgICAgIGxvY3RsLmksIGxvY3RsLnEpOwogCX0KLX0KIAotI2lmIEI0M19ERUJVRwotc3RhdGljIHZvaWQgZG9fdmFsaWRhdGVfbG9jdGwoc3RydWN0IGI0M193bGRldiAqZGV2LCBzdHJ1Y3QgYjQzX2xvY3RsICpjb250cm9sKQotewotCWNvbnN0IGludCBpc19pbml0aWFsaXppbmcgPSAoYjQzX3N0YXR1cyhkZXYpID09IEI0M19TVEFUX1VOSU5JVCk7Ci0JaW50IGkgPSBjb250cm9sLT5pOwotCWludCBxID0gY29udHJvbC0+cTsKLQotCWlmIChiNDNfbG9jdGxfaXNfY2FsaWJyYXRlZChjb250cm9sKSkgewotCQlpZiAoKGFicyhpKSA+IDE2KSB8fCAoYWJzKHEpID4gMTYpKQotCQkJZ290byBlcnJvcjsKLQl9IGVsc2UgewotCQlpZiAoY29udHJvbC0+dXNlZCkKLQkJCWdvdG8gZXJyb3I7Ci0JCWlmIChkZXYtPnBoeS5sb19jb250cm9sLT5yZWJ1aWxkKSB7Ci0JCQljb250cm9sLT5pID0gMDsKLQkJCWNvbnRyb2wtPnEgPSAwOwotCQkJaWYgKChpICE9IEI0M19MT0NUTF9QT0lTT04pIHx8Ci0JCQkgICAgKHEgIT0gQjQzX0xPQ1RMX1BPSVNPTikpCi0JCQkJZ290byBlcnJvcjsKLQkJfQorCWNhbCA9IGttYWxsb2Moc2l6ZW9mKCpjYWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhbCkgeworCQliNDN3YXJuKGRldi0+d2wsICJMTyBjYWxpYjogb3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiBOVUxMOwogCX0KLQlpZiAoaXNfaW5pdGlhbGl6aW5nICYmIGNvbnRyb2wtPnVzZWQpCi0JCWdvdG8gZXJyb3I7CisJbWVtY3B5KCZjYWwtPmJiYXR0LCBiYmF0dCwgc2l6ZW9mKCpiYmF0dCkpOworCW1lbWNweSgmY2FsLT5yZmF0dCwgcmZhdHQsIHNpemVvZigqcmZhdHQpKTsKKwltZW1jcHkoJmNhbC0+Y3RsLCAmbG9jdGwsIHNpemVvZihsb2N0bCkpOworCWNhbC0+Y2FsaWJfdGltZSA9IGppZmZpZXM7CisJSU5JVF9MSVNUX0hFQUQoJmNhbC0+bGlzdCk7CiAKLQlyZXR1cm47Ci1lcnJvcjoKLQliNDNlcnIoZGV2LT53bCwgIkxPIGNvbnRyb2wgcGFpciB2YWxpZGF0aW9uIGZhaWxlZCAiCi0JICAgICAgICIoSTogJWQsIFE6ICVkLCB1c2VkICV1LCBjYWxpYjogJXUsIGluaXRpbmc6ICVkKVxuIiwKLQkgICAgICAgaSwgcSwgY29udHJvbC0+dXNlZCwKLQkgICAgICAgYjQzX2xvY3RsX2lzX2NhbGlicmF0ZWQoY29udHJvbCksCi0JICAgICAgIGlzX2luaXRpYWxpemluZyk7CisJcmV0dXJuIGNhbDsKIH0KIAotc3RhdGljIHZvaWQgdmFsaWRhdGVfYWxsX2xvY3RscyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCisvKiBHZXQgYSBjYWxpYnJhdGVkIExPIHNldHRpbmcgZm9yIHRoZSBnaXZlbiBhdHRlbnVhdGlvbiB2YWx1ZXMuCisgKiBNaWdodCByZXR1cm4gYSBOVUxMIHBvaW50ZXIgdW5kZXIgT09NISAqLworc3RhdGljCitzdHJ1Y3QgYjQzX2xvX2NhbGliICogYjQzX2dldF9jYWxpYl9sb19zZXR0aW5ncyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCQljb25zdCBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCwKKwkJCQkJCWNvbnN0IHN0cnVjdCBiNDNfcmZhdHQgKnJmYXR0KQogewotCWI0M19jYWxsX2Zvcl9lYWNoX2xvY3RsKGRldiwgZG9fdmFsaWRhdGVfbG9jdGwpOworCXN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbyA9IGRldi0+cGh5LmxvX2NvbnRyb2w7CisJc3RydWN0IGI0M19sb19jYWxpYiAqYzsKKworCWMgPSBiNDNfZmluZF9sb19jYWxpYihsbywgYmJhdHQsIHJmYXR0KTsKKwlpZiAoYykKKwkJcmV0dXJuIGM7CisJLyogTm90IGluIHRoZSBsaXN0IG9mIGNhbGlicmF0ZWQgTE8gc2V0dGluZ3MuCisJICogQ2FsaWJyYXRlIGl0IG5vdy4gKi8KKwljID0gYjQzX2NhbGlicmF0ZV9sb19zZXR0aW5nKGRldiwgYmJhdHQsIHJmYXR0KTsKKwlpZiAoIWMpCisJCXJldHVybiBOVUxMOworCWxpc3RfYWRkKCZjLT5saXN0LCAmbG8tPmNhbGliX2xpc3QpOworCisJcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX3Jlc2V0X2NhbGliKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgc3RydWN0IGI0M19sb2N0bCAqY29udHJvbCkKLXsKLQlpZiAoZGV2LT5waHkubG9fY29udHJvbC0+cmVidWlsZCB8fAotCSAgICBjb250cm9sLT51c2VkKSB7Ci0JCWI0M19sb2N0bF9zZXRfY2FsaWJyYXRlZChjb250cm9sLCAwKTsKLQkJY29udHJvbC0+aSA9IEI0M19MT0NUTF9QT0lTT047Ci0JCWNvbnRyb2wtPnEgPSBCNDNfTE9DVExfUE9JU09OOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVzZXRfYWxsX2xvY3RsX2NhbGlicmF0aW9uX3N0YXRlcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci0JYjQzX2NhbGxfZm9yX2VhY2hfbG9jdGwoZGV2LCBkb19yZXNldF9jYWxpYik7Ci19Ci0KLSNlbHNlIC8qIEI0M19ERUJVRyAqLwotc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX2FsbF9sb2N0bHMoc3RydWN0IGI0M193bGRldiAqZGV2KSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9hbGxfbG9jdGxfY2FsaWJyYXRpb25fc3RhdGVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldikgeyB9Ci0jZW5kaWYgLyogQjQzX0RFQlVHICovCi0KLXZvaWQgYjQzX2xvX2dfbWVhc3VyZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit2b2lkIGI0M19ncGh5X2RjX2x0X2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIHVwZGF0ZV9hbGwpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKLQlzdHJ1Y3QgbG9fZ19zYXZlZF92YWx1ZXMgdW5pbml0aWFsaXplZF92YXIoc2F2KTsKKwlzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8gPSBwaHktPmxvX2NvbnRyb2w7CisJaW50IGk7CisJaW50IHJmX29mZnNldCwgYmJfb2Zmc2V0OworCWNvbnN0IHN0cnVjdCBiNDNfcmZhdHQgKnJmYXR0OworCWNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0OworCXU2NCBwb3dlcl92ZWN0b3I7CisJYm9vbCB0YWJsZV9jaGFuZ2VkID0gMDsKIAotCUI0M19XQVJOX09OKChwaHktPnR5cGUgIT0gQjQzX1BIWVRZUEVfQikgJiYKLQkJICAgIChwaHktPnR5cGUgIT0gQjQzX1BIWVRZUEVfRykpOworCUJVSUxEX0JVR19PTihCNDNfRENfTFRfU0laRSAhPSAzMik7CisJQjQzX1dBUk5fT04obG8tPnJmYXR0X2xpc3QubGVuICogbG8tPmJiYXR0X2xpc3QubGVuID4gNjQpOwogCi0Jc2F2Lm9sZF9jaGFubmVsID0gcGh5LT5jaGFubmVsOwotCWxvX21lYXN1cmVfc2V0dXAoZGV2LCAmc2F2KTsKLQlyZXNldF9hbGxfbG9jdGxfY2FsaWJyYXRpb25fc3RhdGVzKGRldik7Ci0JbG9fbWVhc3VyZShkZXYpOwotCWxvX21lYXN1cmVfcmVzdG9yZShkZXYsICZzYXYpOworCXBvd2VyX3ZlY3RvciA9IGxvLT5wb3dlcl92ZWN0b3I7CisJaWYgKCF1cGRhdGVfYWxsICYmICFwb3dlcl92ZWN0b3IpCisJCXJldHVybjsgLyogTm90aGluZyB0byBkby4gKi8KIAotCXZhbGlkYXRlX2FsbF9sb2N0bHMoZGV2KTsKKwkvKiBTdXNwZW5kIHRoZSBNQUMgbm93IHRvIGF2b2lkIGNvbnRpbnVvdXMgc3VzcGVuZC9lbmFibGUKKwkgKiBjeWNsZXMgaW4gdGhlIGxvb3AuICovCisJYjQzX21hY19zdXNwZW5kKGRldik7CiAKLQlwaHktPmxvX2NvbnRyb2wtPmxvX21lYXN1cmVkID0gMTsKLQlwaHktPmxvX2NvbnRyb2wtPnJlYnVpbGQgPSAwOwotfQorCWZvciAoaSA9IDA7IGkgPCBCNDNfRENfTFRfU0laRSAqIDI7IGkrKykgeworCQlzdHJ1Y3QgYjQzX2xvX2NhbGliICpjYWw7CisJCWludCBpZHg7CisJCXUxNiB2YWw7CiAKLSNpZiBCNDNfREVCVUcKLXN0YXRpYyB2b2lkIHZhbGlkYXRlX2xvY3RsX2NhbGlicmF0aW9uKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgICAgc3RydWN0IGI0M19sb2N0bCAqbG9jdGwsCi0JCQkJICAgICAgIHN0cnVjdCBiNDNfcmZhdHQgKnJmYXR0LAotCQkJCSAgICAgICBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCkKLXsKLQlpZiAoYjQzX2xvY3RsX2lzX2NhbGlicmF0ZWQobG9jdGwpKQotCQlyZXR1cm47Ci0JaWYgKCFkZXYtPnBoeS5sb19jb250cm9sLT5sb19tZWFzdXJlZCkgewotCQkvKiBPbiBpbml0IHdlIHNldCB0aGUgYXR0ZW51YXRpb24gdmFsdWVzIGJlZm9yZSB3ZQotCQkgKiBjYWxpYnJhdGVkIHRoZSBMTy4gSSBndWVzcyB0aGF0J3MgT0suICovCi0JCXJldHVybjsKKwkJaWYgKCF1cGRhdGVfYWxsICYmICEocG93ZXJfdmVjdG9yICYgKCgodTY0KTFVTEwpIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCQkvKiBVcGRhdGUgdGhlIHRhYmxlIGVudHJ5IGZvciB0aGlzIHBvd2VyX3ZlY3RvciBiaXQuCisJCSAqIFRoZSB0YWJsZSByb3dzIGFyZSBSRmF0dCBlbnRyaWVzIGFuZCBjb2x1bW5zIGFyZSBCQmF0dC4gKi8KKwkJYmJfb2Zmc2V0ID0gaSAvIGxvLT5yZmF0dF9saXN0LmxlbjsKKwkJcmZfb2Zmc2V0ID0gaSAlIGxvLT5yZmF0dF9saXN0LmxlbjsKKwkJYmJhdHQgPSAmKGxvLT5iYmF0dF9saXN0Lmxpc3RbYmJfb2Zmc2V0XSk7CisJCXJmYXR0ID0gJihsby0+cmZhdHRfbGlzdC5saXN0W3JmX29mZnNldF0pOworCisJCWNhbCA9IGI0M19jYWxpYnJhdGVfbG9fc2V0dGluZyhkZXYsIGJiYXR0LCByZmF0dCk7CisJCWlmICghY2FsKSB7CisJCQliNDN3YXJuKGRldi0+d2wsICJMTzogQ291bGQgbm90ICIKKwkJCQkiY2FsaWJyYXRlIERDIHRhYmxlIGVudHJ5XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qRklYTUU6IElzIFEgcmVhbGx5IGluIHRoZSBsb3cgbmliYmxlPyAqLworCQl2YWwgPSAodTgpKGNhbC0+Y3RsLnEpOworCQl2YWwgfD0gKCh1OCkoY2FsLT5jdGwuaSkpIDw8IDQ7CisJCWtmcmVlKGNhbCk7CisKKwkJLyogR2V0IHRoZSBpbmRleCBpbnRvIHRoZSBoYXJkd2FyZSBEQyBMVC4gKi8KKwkJaWR4ID0gaSAvIDI7CisJCS8qIENoYW5nZSB0aGUgdGFibGUgaW4gbWVtb3J5LiAqLworCQlpZiAoaSAlIDIpIHsKKwkJCS8qIENoYW5nZSB0aGUgaGlnaCBieXRlLiAqLworCQkJbG8tPmRjX2x0W2lkeF0gPSAobG8tPmRjX2x0W2lkeF0gJiAweDAwRkYpCisJCQkJCSB8ICgodmFsICYgMHgwMEZGKSA8PCA4KTsKKwkJfSBlbHNlIHsKKwkJCS8qIENoYW5nZSB0aGUgbG93IGJ5dGUuICovCisJCQlsby0+ZGNfbHRbaWR4XSA9IChsby0+ZGNfbHRbaWR4XSAmIDB4RkYwMCkKKwkJCQkJIHwgKHZhbCAmIDB4MDBGRik7CisJCX0KKwkJdGFibGVfY2hhbmdlZCA9IDE7CiAJfQotCWI0M2VycihkZXYtPndsLCAiQWRqdXN0aW5nIExvY2FsIE9zY2lsbGF0b3IgdG8gYW4gdW5jYWxpYnJhdGVkICIKLQkgICAgICAgImNvbnRyb2wgcGFpcjogcmZhdHQ9JXUsJXNwYWRtaXggYmJhdHQ9JXVcbiIsCi0JICAgICAgIHJmYXR0LT5hdHQsCi0JICAgICAgIChyZmF0dC0+d2l0aF9wYWRtaXgpID8gIiIgOiAibm8tIiwKLQkgICAgICAgYmJhdHQtPmF0dCk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX2xvY3RsX2NhbGlicmF0aW9uKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJICAgICAgc3RydWN0IGI0M19sb2N0bCAqbG9jdGwsCi0JCQkJCSAgICAgIHN0cnVjdCBiNDNfcmZhdHQgKnJmYXR0LAotCQkJCQkgICAgICBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCkKLXsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgZml4dXBfcmZhdHRfZm9yX3R4Y29udHJvbChzdHJ1Y3QgYjQzX3JmYXR0ICpyZiwKLQkJCQkJICAgICB1OCB0eF9jb250cm9sKQotewotCWlmICh0eF9jb250cm9sICYgQjQzX1RYQ1RMX1RYTUlYKSB7Ci0JCWlmIChyZi0+YXR0IDwgNSkKLQkJCXJmLT5hdHQgPSA0OworCWlmICh0YWJsZV9jaGFuZ2VkKSB7CisJCS8qIFRoZSB0YWJsZSBjaGFuZ2VkIGluIG1lbW9yeS4gVXBkYXRlIHRoZSBoYXJkd2FyZSB0YWJsZS4gKi8KKwkJZm9yIChpID0gMDsgaSA8IEI0M19EQ19MVF9TSVpFOyBpKyspCisJCQliNDNfcGh5X3dyaXRlKGRldiwgMHgzQTAgKyBpLCBsby0+ZGNfbHRbaV0pOwogCX0KKwliNDNfbWFjX2VuYWJsZShkZXYpOworfQorCisvKiBGaXh1cCB0aGUgUkYgYXR0ZW51YXRpb24gdmFsdWUgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGFyZQorICogdXNpbmcgdGhlIFBBRCBtaXhlci4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBiNDNfbG9fZml4dXBfcmZhdHQoc3RydWN0IGI0M19yZmF0dCAqcmYpCit7CisJaWYgKCFyZi0+d2l0aF9wYWRtaXgpCisJCXJldHVybjsKKwlpZiAoKHJmLT5hdHQgIT0gMSkgJiYgKHJmLT5hdHQgIT0gMikgJiYgKHJmLT5hdHQgIT0gMykpCisJCXJmLT5hdHQgPSA0OwogfQogCiB2b2lkIGI0M19sb19nX2FkanVzdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKKwlzdHJ1Y3QgYjQzX2xvX2NhbGliICpjYWw7CiAJc3RydWN0IGI0M19yZmF0dCByZjsKLQlzdHJ1Y3QgYjQzX2xvY3RsICpsb2N0bDsKIAogCW1lbWNweSgmcmYsICZwaHktPnJmYXR0LCBzaXplb2YocmYpKTsKLQlmaXh1cF9yZmF0dF9mb3JfdHhjb250cm9sKCZyZiwgcGh5LT50eF9jb250cm9sKTsKKwliNDNfbG9fZml4dXBfcmZhdHQoJnJmKTsKIAotCWxvY3RsID0gYjQzX2dldF9sb19nX2N0bChkZXYsICZyZiwgJnBoeS0+YmJhdHQpOwotCXZhbGlkYXRlX2xvY3RsX2NhbGlicmF0aW9uKGRldiwgbG9jdGwsICZyZiwgJnBoeS0+YmJhdHQpOwotCWI0M19sb193cml0ZShkZXYsIGxvY3RsKTsKKwljYWwgPSBiNDNfZ2V0X2NhbGliX2xvX3NldHRpbmdzKGRldiwgJnBoeS0+YmJhdHQsICZyZik7CisJaWYgKCFjYWwpCisJCXJldHVybjsKKwliNDNfbG9fd3JpdGUoZGV2LCAmY2FsLT5jdGwpOwogfQogCiB2b2lkIGI0M19sb19nX2FkanVzdF90byhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCkBAIC0xMjIzLDM5ICs5MzUsMTAyIEBACiB7CiAJc3RydWN0IGI0M19yZmF0dCByZjsKIAlzdHJ1Y3QgYjQzX2JiYXR0IGJiOwotCXN0cnVjdCBiNDNfbG9jdGwgKmxvY3RsOworCXN0cnVjdCBiNDNfbG9fY2FsaWIgKmNhbDsKIAogCW1lbXNldCgmcmYsIDAsIHNpemVvZihyZikpOwogCW1lbXNldCgmYmIsIDAsIHNpemVvZihiYikpOwogCXJmLmF0dCA9IHJmYXR0OwogCWJiLmF0dCA9IGJiYXR0OwotCWZpeHVwX3JmYXR0X2Zvcl90eGNvbnRyb2woJnJmLCB0eF9jb250cm9sKTsKLQlsb2N0bCA9IGI0M19nZXRfbG9fZ19jdGwoZGV2LCAmcmYsICZiYik7Ci0JdmFsaWRhdGVfbG9jdGxfY2FsaWJyYXRpb24oZGV2LCBsb2N0bCwgJnJmLCAmYmIpOwotCWI0M19sb193cml0ZShkZXYsIGxvY3RsKTsKKwliNDNfbG9fZml4dXBfcmZhdHQoJnJmKTsKKwljYWwgPSBiNDNfZ2V0X2NhbGliX2xvX3NldHRpbmdzKGRldiwgJmJiLCAmcmYpOworCWlmICghY2FsKQorCQlyZXR1cm47CisJYjQzX2xvX3dyaXRlKGRldiwgJmNhbC0+Y3RsKTsKIH0KIAotc3RhdGljIHZvaWQgZG9fbWFya191bnVzZWQoc3RydWN0IGI0M193bGRldiAqZGV2LCBzdHJ1Y3QgYjQzX2xvY3RsICpjb250cm9sKQotewotCWNvbnRyb2wtPnVzZWQgPSAwOwotfQotCi12b2lkIGI0M19sb19nX2N0bF9tYXJrX2FsbF91bnVzZWQoc3RydWN0IGI0M193bGRldiAqZGV2KQorLyogUGVyaW9kaWMgTE8gbWFpbnRhbmFuY2Ugd29yayAqLwordm9pZCBiNDNfbG9fZ19tYWludGFuYW5jZV93b3JrKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwogCXN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbyA9IHBoeS0+bG9fY29udHJvbDsKKwl1bnNpZ25lZCBsb25nIG5vdzsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKwlzdHJ1Y3QgYjQzX2xvX2NhbGliICpjYWwsICp0bXA7CisJYm9vbCBjdXJyZW50X2l0ZW1fZXhwaXJlZCA9IDA7CisJYm9vbCBod3BjdGw7CiAKLQliNDNfY2FsbF9mb3JfZWFjaF9sb2N0bChkZXYsIGRvX21hcmtfdW51c2VkKTsKLQlsby0+cmVidWlsZCA9IDE7CisJaWYgKCFsbykKKwkJcmV0dXJuOworCW5vdyA9IGppZmZpZXM7CisJaHdwY3RsID0gYjQzX2hhc19oYXJkd2FyZV9wY3RsKHBoeSk7CisKKwlpZiAoaHdwY3RsKSB7CisJCS8qIFJlYWQgdGhlIHBvd2VyIHZlY3RvciBhbmQgdXBkYXRlIGl0LCBpZiBuZWVkZWQuICovCisJCWV4cGlyZSA9IG5vdyAtIEI0M19MT19QV1JWRUNfRVhQSVJFOworCQlpZiAodGltZV9iZWZvcmUobG8tPnB3cl92ZWNfcmVhZF90aW1lLCBleHBpcmUpKSB7CisJCQlsb19yZWFkX3Bvd2VyX3ZlY3RvcihkZXYpOworCQkJYjQzX2dwaHlfZGNfbHRfaW5pdChkZXYsIDApOworCQl9CisJCS8vRklYTUUgUmVjYWxjIHRoZSB3aG9sZSBEQyB0YWJsZSBmcm9tIHRpbWUgdG8gdGltZT8KKwl9CisKKwlpZiAoaHdwY3RsKQorCQlyZXR1cm47CisJLyogU2VhcmNoIGZvciBleHBpcmVkIExPIHNldHRpbmdzLiBSZW1vdmUgdGhlbS4KKwkgKiBSZWNhbGlicmF0ZSB0aGUgY3VycmVudCBzZXR0aW5nLCBpZiBleHBpcmVkLiAqLworCWV4cGlyZSA9IG5vdyAtIEI0M19MT19DQUxJQl9FWFBJUkU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhbCwgdG1wLCAmbG8tPmNhbGliX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCF0aW1lX2JlZm9yZShjYWwtPmNhbGliX3RpbWUsIGV4cGlyZSkpCisJCQljb250aW51ZTsKKwkJLyogVGhpcyBpdGVtIGV4cGlyZWQuICovCisJCWlmIChiNDNfY29tcGFyZV9iYmF0dCgmY2FsLT5iYmF0dCwgJnBoeS0+YmJhdHQpICYmCisJCSAgICBiNDNfY29tcGFyZV9yZmF0dCgmY2FsLT5yZmF0dCwgJnBoeS0+cmZhdHQpKSB7CisJCQlCNDNfV0FSTl9PTihjdXJyZW50X2l0ZW1fZXhwaXJlZCk7CisJCQljdXJyZW50X2l0ZW1fZXhwaXJlZCA9IDE7CisJCX0KKwkJaWYgKGI0M19kZWJ1ZyhkZXYsIEI0M19EQkdfTE8pKSB7CisJCQliNDNkYmcoZGV2LT53bCwgIkxPOiBJdGVtIEJCKCV1KSwgUkYoJXUsJXUpLCAiCisJCQkgICAgICAgIkk9JWQsIFE9JWQgZXhwaXJlZFxuIiwKKwkJCSAgICAgICBjYWwtPmJiYXR0LmF0dCwgY2FsLT5yZmF0dC5hdHQsCisJCQkgICAgICAgY2FsLT5yZmF0dC53aXRoX3BhZG1peCwKKwkJCSAgICAgICBjYWwtPmN0bC5pLCBjYWwtPmN0bC5xKTsKKwkJfQorCQlsaXN0X2RlbCgmY2FsLT5saXN0KTsKKwkJa2ZyZWUoY2FsKTsKKwl9CisJaWYgKGN1cnJlbnRfaXRlbV9leHBpcmVkIHx8IHVubGlrZWx5KGxpc3RfZW1wdHkoJmxvLT5jYWxpYl9saXN0KSkpIHsKKwkJLyogUmVjYWxpYnJhdGUgY3VycmVudGx5IHVzZWQgTE8gc2V0dGluZy4gKi8KKwkJaWYgKGI0M19kZWJ1ZyhkZXYsIEI0M19EQkdfTE8pKQorCQkJYjQzZGJnKGRldi0+d2wsICJMTzogUmVjYWxpYnJhdGluZyBjdXJyZW50IExPIHNldHRpbmdcbiIpOworCQljYWwgPSBiNDNfY2FsaWJyYXRlX2xvX3NldHRpbmcoZGV2LCAmcGh5LT5iYmF0dCwgJnBoeS0+cmZhdHQpOworCQlpZiAoY2FsKSB7CisJCQlsaXN0X2FkZCgmY2FsLT5saXN0LCAmbG8tPmNhbGliX2xpc3QpOworCQkJYjQzX2xvX3dyaXRlKGRldiwgJmNhbC0+Y3RsKTsKKwkJfSBlbHNlCisJCQliNDN3YXJuKGRldi0+d2wsICJGYWlsZWQgdG8gcmVjYWxpYnJhdGUgY3VycmVudCBMTyBzZXR0aW5nXG4iKTsKKwl9CiB9CiAKLXZvaWQgYjQzX2xvX2dfY3RsX21hcmtfY3VyX3VzZWQoc3RydWN0IGI0M193bGRldiAqZGV2KQordm9pZCBiNDNfbG9fZ19jbGVhbnVwKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8gPSBkZXYtPnBoeS5sb19jb250cm9sOworCXN0cnVjdCBiNDNfbG9fY2FsaWIgKmNhbCwgKnRtcDsKKworCWlmICghbG8pCisJCXJldHVybjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2FsLCB0bXAsICZsby0+Y2FsaWJfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmY2FsLT5saXN0KTsKKwkJa2ZyZWUoY2FsKTsKKwl9Cit9CisKKy8qIExPIEluaXRpYWxpemF0aW9uICovCit2b2lkIGI0M19sb19nX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7Ci0Jc3RydWN0IGI0M19yZmF0dCByZjsKIAotCW1lbWNweSgmcmYsICZwaHktPnJmYXR0LCBzaXplb2YocmYpKTsKLQlmaXh1cF9yZmF0dF9mb3JfdHhjb250cm9sKCZyZiwgcGh5LT50eF9jb250cm9sKTsKLQotCWI0M19nZXRfbG9fZ19jdGwoZGV2LCAmcmYsICZwaHktPmJiYXR0KS0+dXNlZCA9IDE7CisJaWYgKGI0M19oYXNfaGFyZHdhcmVfcGN0bChwaHkpKSB7CisJCWxvX3JlYWRfcG93ZXJfdmVjdG9yKGRldik7CisJCWI0M19ncGh5X2RjX2x0X2luaXQoZGV2LCAxKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5oCmluZGV4IDQ1NTYxNWQuLjFkYTMyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5oCkBAIC0xMCw4MiArMTAsNjMgQEAKIAkvKiBDb250cm9sIHZhbHVlcy4gKi8KIAlzOCBpOwogCXM4IHE7Ci0JLyogIlVzZWQgYnkgaGFyZHdhcmUiIGZsYWcuICovCi0JYm9vbCB1c2VkOwotI2lmZGVmIENPTkZJR19CNDNfREVCVUcKLQkvKiBJcyB0aGlzIGxvLWNvbnRyb2wtYXJyYXkgZW50cnkgY2FsaWJyYXRlZD8gKi8KLQlib29sIGNhbGlicmF0ZWQ7Ci0jZW5kaWYKIH07Ci0KIC8qIERlYnVnZ2luZzogUG9pc29uIHZhbHVlIGZvciBpIGFuZCBxIHZhbHVlcy4gKi8KICNkZWZpbmUgQjQzX0xPQ1RMX1BPSVNPTgkxMTEKIAotLyogbG9jdGwtPmNhbGlicmF0ZWQgZGVidWdnaW5nIG1lY2hhbmlzbSAqLwotI2lmZGVmIENPTkZJR19CNDNfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfbG9jdGxfc2V0X2NhbGlicmF0ZWQoc3RydWN0IGI0M19sb2N0bCAqbG9jdGwsCi0JCQkJCSAgICBib29sIGNhbGlicmF0ZWQpCi17Ci0JbG9jdGwtPmNhbGlicmF0ZWQgPSBjYWxpYnJhdGVkOwotfQotc3RhdGljIGlubGluZSBib29sIGI0M19sb2N0bF9pc19jYWxpYnJhdGVkKHN0cnVjdCBiNDNfbG9jdGwgKmxvY3RsKQotewotCXJldHVybiBsb2N0bC0+Y2FsaWJyYXRlZDsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgYjQzX2xvY3RsX3NldF9jYWxpYnJhdGVkKHN0cnVjdCBiNDNfbG9jdGwgKmxvY3RsLAotCQkJCQkgICAgYm9vbCBjYWxpYnJhdGVkKQotewotfQotc3RhdGljIGlubGluZSBib29sIGI0M19sb2N0bF9pc19jYWxpYnJhdGVkKHN0cnVjdCBiNDNfbG9jdGwgKmxvY3RsKQotewotCXJldHVybiAxOwotfQotI2VuZGlmCisvKiBUaGlzIHN0cnVjdCBob2xkcyBjYWxpYnJhdGVkIExPIHNldHRpbmdzIGZvciBhIHNldCBvZgorICogQmFzZWJhbmQgYW5kIFJGIGF0dGVudWF0aW9uIHNldHRpbmdzLiAqLworc3RydWN0IGI0M19sb19jYWxpYiB7CisJLyogVGhlIHNldCBvZiBhdHRlbnVhdGlvbiB2YWx1ZXMgdGhpcyBzZXQgb2YgTE8KKwkgKiBjb250cm9sIHZhbHVlcyBpcyBjYWxpYnJhdGVkIGZvci4gKi8KKwlzdHJ1Y3QgYjQzX2JiYXR0IGJiYXR0OworCXN0cnVjdCBiNDNfcmZhdHQgcmZhdHQ7CisJLyogVGhlIHNldCBvZiBjb250cm9sIHZhbHVlcyBmb3IgdGhlIExPLiAqLworCXN0cnVjdCBiNDNfbG9jdGwgY3RsOworCS8qIFRoZSB0aW1lIHdoZW4gdGhlc2Ugc2V0dGluZ3Mgd2VyZSBjYWxpYnJhdGVkIChpbiBqaWZmaWVzKSAqLworCXVuc2lnbmVkIGxvbmcgY2FsaWJfdGltZTsKKwkvKiBMaXN0LiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CiAKLS8qIFRYIFBvd2VyIExPIENvbnRyb2wgQXJyYXkuCi0gKiBWYWx1ZS1wYWlycyB0byBhZGp1c3QgdGhlIExvY2FsT3NjaWxsYXRvciBhcmUgc3RvcmVkCi0gKiBpbiB0aGlzIHN0cnVjdHVyZS4KLSAqIFRoZXJlIGFyZSB0d28gZGlmZmVyZW50IHNldCBvZiB2YWx1ZXMuIE9uZSBmb3IgIkZsYWcgaXMgU2V0IgotICogYW5kIG9uZSBmb3IgIkZsYWcgaXMgVW5zZXQiLgotICogQnkgIkZsYWciIHRoZSBmbGFnIGluIHN0cnVjdCBiNDNfcmZhdHQgaXMgbWVhbnQuCi0gKiBUaGUgVmFsdWUgYXJyYXlzIGFyZSB0d28tZGltZW5zaW9uYWwuIFRoZSBmaXJzdCBpbmRleAotICogaXMgdGhlIGJhc2ViYW5kIGF0dGVudWF0aW9uIGFuZCB0aGUgc2Vjb25kIGluZGV4Ci0gKiBpcyB0aGUgcmFkaW8gYXR0ZW51YXRpb24uCi0gKiBVc2UgYjQzX2dldF9sb19nX2N0bCgpIHRvIHJldHJpZXZlIGEgdmFsdWUgZnJvbSB0aGUgbGlzdHMuCi0gKi8KKy8qIFNpemUgb2YgdGhlIERDIExvb2t1cCBUYWJsZSBpbiAxNmJpdCB3b3Jkcy4gKi8KKyNkZWZpbmUgQjQzX0RDX0xUX1NJWkUJCTMyCisKKy8qIExvY2FsIE9zY2lsbGF0b3IgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gKi8KIHN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sIHsKLSNkZWZpbmUgQjQzX05SX0JCCTEyCi0jZGVmaW5lIEI0M19OUl9SRgkxNgotCS8qIExPIENvbnRyb2wgdmFsdWVzLCB3aXRoIFBBRCBNaXhlciAqLwotCXN0cnVjdCBiNDNfbG9jdGwgd2l0aF9wYWRtaXhbQjQzX05SX0JCXVtCNDNfTlJfUkZdOwotCS8qIExPIENvbnRyb2wgdmFsdWVzLCB3aXRob3V0IFBBRCBNaXhlciAqLwotCXN0cnVjdCBiNDNfbG9jdGwgbm9fcGFkbWl4W0I0M19OUl9CQl1bQjQzX05SX1JGXTsKLQotCS8qIEZsYWcgdG8gaW5kaWNhdGUgYSBjb21wbGV0ZSByZWJ1aWxkIG9mIHRoZSB0d28gdGFibGVzIGFib3ZlCi0JICogdG8gdGhlIExPIG1lYXN1cmluZyBjb2RlLiAqLwotCWJvb2wgcmVidWlsZDsKLQotCS8qIExpc3RzIG9mIHZhbGlkIFJGIGFuZCBCQiBhdHRlbnVhdGlvbiB2YWx1ZXMgZm9yIHRoaXMgZGV2aWNlLiAqLworCS8qIExpc3RzIG9mIFJGIGFuZCBCQiBhdHRlbnVhdGlvbiB2YWx1ZXMgZm9yIHRoaXMgZGV2aWNlLgorCSAqIFVzZWQgZm9yIGJ1aWxkaW5nIGhhcmR3YXJlIHBvd2VyIGNvbnRyb2wgdGFibGVzLiAqLwogCXN0cnVjdCBiNDNfcmZhdHRfbGlzdCByZmF0dF9saXN0OwogCXN0cnVjdCBiNDNfYmJhdHRfbGlzdCBiYmF0dF9saXN0OwogCisJLyogVGhlIERDIExvb2t1cCBUYWJsZSBpcyBjYWNoZWQgaW4gbWVtb3J5IGhlcmUuCisJICogTm90ZSB0aGF0IHRoaXMgaXMgb25seSB1c2VkIGZvciBIYXJkd2FyZSBQb3dlciBDb250cm9sLiAqLworCXUxNiBkY19sdFtCNDNfRENfTFRfU0laRV07CisKKwkvKiBMaXN0IG9mIGNhbGlicmF0ZWQgY29udHJvbCB2YWx1ZXMgKHN0cnVjdCBiNDNfbG9fY2FsaWIpLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgY2FsaWJfbGlzdDsKKwkvKiBMYXN0IHRpbWUgdGhlIHBvd2VyIHZlY3RvciB3YXMgcmVhZCAoamlmZmllcykuICovCisJdW5zaWduZWQgbG9uZyBwd3JfdmVjX3JlYWRfdGltZTsKKwkvKiBMYXN0IHRpbWUgdGhlIHR4Y3RsIHZhbHVlcyB3ZXJlIG1lYXN1cmVkIChqaWZmaWVzKS4gKi8KKwl1bnNpZ25lZCBsb25nIHR4Y3RsX21lYXN1cmVkX3RpbWU7CisKIAkvKiBDdXJyZW50IFRYIEJpYXMgdmFsdWUgKi8KIAl1OCB0eF9iaWFzOwogCS8qIEN1cnJlbnQgVFggTWFnbmlmaWNhdGlvbiBWYWx1ZSAoaWYgdXNlZCBieSB0aGUgZGV2aWNlKSAqLwogCXU4IHR4X21hZ247CiAKLQkvKiBHUEhZIExPIGlzIG1lYXN1cmVkLiAqLwotCWJvb2wgbG9fbWVhc3VyZWQ7Ci0KIAkvKiBTYXZlZCBkZXZpY2UgUG93ZXJWZWN0b3IgKi8KIAl1NjQgcG93ZXJfdmVjdG9yOwogfTsKIAotLyogTWVhc3VyZSB0aGUgQlBIWSBMb2NhbCBPc2NpbGxhdG9yLiAqLwotdm9pZCBiNDNfbG9fYl9tZWFzdXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Ci0vKiBNZWFzdXJlIHRoZSBCUEhZL0dQSFkgTG9jYWwgT3NjaWxsYXRvci4gKi8KLXZvaWQgYjQzX2xvX2dfbWVhc3VyZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOworLyogQ2FsaWJyYXRpb24gZXhwaXJlIHRpbWVvdXRzLgorICogVGltZW91dHMgbXVzdCBiZSBtdWx0aXBsZSBvZiAxNSBzZWNvbmRzLiBUbyBtYWtlIHN1cmUKKyAqIHRoZSBpdGVtIHJlYWxseSBleHBpcmVkIHdoZW4gdGhlIDE1IHNlY29uZCB0aW1lciBoaXRzLCB3ZQorICogc3VidHJhY3QgdHdvIGFkZGl0aW9uYWwgc2Vjb25kcyBmcm9tIHRoZSB0aW1lb3V0LiAqLworI2RlZmluZSBCNDNfTE9fQ0FMSUJfRVhQSVJFCShIWiAqICgzMCAtIDIpKQorI2RlZmluZSBCNDNfTE9fUFdSVkVDX0VYUElSRQkoSFogKiAoMzAgLSAyKSkKKyNkZWZpbmUgQjQzX0xPX1RYQ1RMX0VYUElSRQkoSFogKiAoMTgwIC0gNCkpCisKIAogLyogQWRqdXN0IHRoZSBMb2NhbCBPc2NpbGxhdG9yIHRvIHRoZSBzYXZlZCBhdHRlbnVhdGlvbgogICogYW5kIHR4Y3RsIHZhbHVlcy4KQEAgLTk1LDE4ICs3NiwxMCBAQAogdm9pZCBiNDNfbG9fZ19hZGp1c3RfdG8oc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJdTE2IHJmYXR0LCB1MTYgYmJhdHQsIHUxNiB0eF9jb250cm9sKTsKIAotLyogTWFyayBhbGwgcG9zc2libGUgYjQzX2xvX2dfY3RsIGFzICJ1bnVzZWQiICovCi12b2lkIGI0M19sb19nX2N0bF9tYXJrX2FsbF91bnVzZWQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKLS8qIE1hcmsgdGhlIGI0M19sb19nX2N0bCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50Ci0gKiBhdHRlbnVhdGlvbiB2YWx1ZXMgYXMgdXNlZC4KLSAqLwotdm9pZCBiNDNfbG9fZ19jdGxfbWFya19jdXJfdXNlZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwordm9pZCBiNDNfZ3BoeV9kY19sdF9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCB1cGRhdGVfYWxsKTsKIAotLyogR2V0IGEgcmVmZXJlbmNlIHRvIGEgTE8gQ29udHJvbCB2YWx1ZSBwYWlyIGluIHRoZQotICogVFggUG93ZXIgTE8gQ29udHJvbCBBcnJheS4KLSAqLwotc3RydWN0IGI0M19sb2N0bCAqYjQzX2dldF9sb19nX2N0bChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQsCi0JCQkJICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQpOwordm9pZCBiNDNfbG9fZ19tYWludGFuYW5jZV93b3JrKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGI0M19sb19nX2NsZWFudXAoc3RydWN0IGI0M193bGRldiAqZGV2KTsKK3ZvaWQgYjQzX2xvX2dfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCiAjZW5kaWYgLyogQjQzX0xPX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCBhNzA4Mjc3Li5lNzgzMTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTM3MywxMyArMzczLDEwIEBACiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19TSE1fQ09OVFJPTCwgY29udHJvbCk7CiB9CiAKLXUzMiBiNDNfc2htX3JlYWQzMihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0KQordTMyIF9fYjQzX3NobV9yZWFkMzIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKIHsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwogCWlmIChyb3V0aW5nID09IEI0M19TSE1fU0hBUkVEKSB7CiAJCUI0M19XQVJOX09OKG9mZnNldCAmIDB4MDAwMSk7CiAJCWlmIChvZmZzZXQgJiAweDAwMDMpIHsKQEAgLTM5NywxOCArMzk0LDI2IEBACiAJYjQzX3NobV9jb250cm9sX3dvcmQoZGV2LCByb3V0aW5nLCBvZmZzZXQpOwogCXJldCA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19TSE1fREFUQSk7CiBvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordTMyIGI0M19zaG1fcmVhZDMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpCit7CisJc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+c2htX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBfX2I0M19zaG1fcmVhZDMyKGRldiwgcm91dGluZywgb2Zmc2V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+c2htX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXUxNiBiNDNfc2htX3JlYWQxNihzdHJ1Y3QgYjQzX3dsZGV2ICogZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKK3UxNiBfX2I0M19zaG1fcmVhZDE2KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpCiB7Ci0Jc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHJldDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+c2htX2xvY2ssIGZsYWdzKTsKIAlpZiAocm91dGluZyA9PSBCNDNfU0hNX1NIQVJFRCkgewogCQlCNDNfV0FSTl9PTihvZmZzZXQgJiAweDAwMDEpOwogCQlpZiAob2Zmc2V0ICYgMHgwMDAzKSB7CkBAIC00MjMsMTcgKzQyOCwyNCBAQAogCWI0M19zaG1fY29udHJvbF93b3JkKGRldiwgcm91dGluZywgb2Zmc2V0KTsKIAlyZXQgPSBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEpOwogb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3UxNiBiNDNfc2htX3JlYWQxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPnNobV9sb2NrLCBmbGFncyk7CisJcmV0ID0gX19iNDNfc2htX3JlYWQxNihkZXYsIHJvdXRpbmcsIG9mZnNldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPnNobV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIGI0M19zaG1fd3JpdGUzMihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit2b2lkIF9fYjQzX3NobV93cml0ZTMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+c2htX2xvY2ssIGZsYWdzKTsKIAlpZiAocm91dGluZyA9PSBCNDNfU0hNX1NIQVJFRCkgewogCQlCNDNfV0FSTl9PTihvZmZzZXQgJiAweDAwMDEpOwogCQlpZiAob2Zmc2V0ICYgMHgwMDAzKSB7CkBAIC00NDMsMzUgKzQ1NSw0NyBAQAogCQkJCSAgICAodmFsdWUgPj4gMTYpICYgMHhmZmZmKTsKIAkJCWI0M19zaG1fY29udHJvbF93b3JkKGRldiwgcm91dGluZywgKG9mZnNldCA+PiAyKSArIDEpOwogCQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19TSE1fREFUQSwgdmFsdWUgJiAweGZmZmYpOwotCQkJZ290byBvdXQ7CisJCQlyZXR1cm47CiAJCX0KIAkJb2Zmc2V0ID4+PSAyOwogCX0KIAliNDNfc2htX2NvbnRyb2xfd29yZChkZXYsIHJvdXRpbmcsIG9mZnNldCk7CiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19TSE1fREFUQSwgdmFsdWUpOwotb3V0OgorfQorCit2b2lkIGI0M19zaG1fd3JpdGUzMihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPnNobV9sb2NrLCBmbGFncyk7CisJX19iNDNfc2htX3dyaXRlMzIoZGV2LCByb3V0aW5nLCBvZmZzZXQsIHZhbHVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+c2htX2xvY2ssIGZsYWdzKTsKIH0KIAordm9pZCBfX2I0M19zaG1fd3JpdGUxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCit7CisJaWYgKHJvdXRpbmcgPT0gQjQzX1NITV9TSEFSRUQpIHsKKwkJQjQzX1dBUk5fT04ob2Zmc2V0ICYgMHgwMDAxKTsKKwkJaWYgKG9mZnNldCAmIDB4MDAwMykgeworCQkJLyogVW5hbGlnbmVkIGFjY2VzcyAqLworCQkJYjQzX3NobV9jb250cm9sX3dvcmQoZGV2LCByb3V0aW5nLCBvZmZzZXQgPj4gMik7CisJCQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1NITV9EQVRBX1VOQUxJR05FRCwgdmFsdWUpOworCQkJcmV0dXJuOworCQl9CisJCW9mZnNldCA+Pj0gMjsKKwl9CisJYjQzX3NobV9jb250cm9sX3dvcmQoZGV2LCByb3V0aW5nLCBvZmZzZXQpOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEsIHZhbHVlKTsKK30KKwogdm9pZCBiNDNfc2htX3dyaXRlMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCwgdTE2IHZhbHVlKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCWlmIChyb3V0aW5nID09IEI0M19TSE1fU0hBUkVEKSB7Ci0JCUI0M19XQVJOX09OKG9mZnNldCAmIDB4MDAwMSk7Ci0JCWlmIChvZmZzZXQgJiAweDAwMDMpIHsKLQkJCS8qIFVuYWxpZ25lZCBhY2Nlc3MgKi8KLQkJCWI0M19zaG1fY29udHJvbF93b3JkKGRldiwgcm91dGluZywgb2Zmc2V0ID4+IDIpOwotCQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19TSE1fREFUQV9VTkFMSUdORUQsIHZhbHVlKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCW9mZnNldCA+Pj0gMjsKLQl9Ci0JYjQzX3NobV9jb250cm9sX3dvcmQoZGV2LCByb3V0aW5nLCBvZmZzZXQpOwotCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEsIHZhbHVlKTsKLW91dDoKKwlfX2I0M19zaG1fd3JpdGUxNihkZXYsIHJvdXRpbmcsIG9mZnNldCwgdmFsdWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwogfQogCkBAIC0xMTg3LDEwICsxMjExLDEwIEBACiAJLyogR2V0IHRoZSBub2lzZSBzYW1wbGVzLiAqLwogCUI0M19XQVJOX09OKGRldi0+bm9pc2VjYWxjLm5yX3NhbXBsZXMgPj0gOCk7CiAJaSA9IGRldi0+bm9pc2VjYWxjLm5yX3NhbXBsZXM7Ci0Jbm9pc2VbMF0gPSBsaW1pdF92YWx1ZShub2lzZVswXSwgMCwgQVJSQVlfU0laRShwaHktPm5yc3NpX2x0KSAtIDEpOwotCW5vaXNlWzFdID0gbGltaXRfdmFsdWUobm9pc2VbMV0sIDAsIEFSUkFZX1NJWkUocGh5LT5ucnNzaV9sdCkgLSAxKTsKLQlub2lzZVsyXSA9IGxpbWl0X3ZhbHVlKG5vaXNlWzJdLCAwLCBBUlJBWV9TSVpFKHBoeS0+bnJzc2lfbHQpIC0gMSk7Ci0Jbm9pc2VbM10gPSBsaW1pdF92YWx1ZShub2lzZVszXSwgMCwgQVJSQVlfU0laRShwaHktPm5yc3NpX2x0KSAtIDEpOworCW5vaXNlWzBdID0gY2xhbXBfdmFsKG5vaXNlWzBdLCAwLCBBUlJBWV9TSVpFKHBoeS0+bnJzc2lfbHQpIC0gMSk7CisJbm9pc2VbMV0gPSBjbGFtcF92YWwobm9pc2VbMV0sIDAsIEFSUkFZX1NJWkUocGh5LT5ucnNzaV9sdCkgLSAxKTsKKwlub2lzZVsyXSA9IGNsYW1wX3ZhbChub2lzZVsyXSwgMCwgQVJSQVlfU0laRShwaHktPm5yc3NpX2x0KSAtIDEpOworCW5vaXNlWzNdID0gY2xhbXBfdmFsKG5vaXNlWzNdLCAwLCBBUlJBWV9TSVpFKHBoeS0+bnJzc2lfbHQpIC0gMSk7CiAJZGV2LT5ub2lzZWNhbGMuc2FtcGxlc1tpXVswXSA9IHBoeS0+bnJzc2lfbHRbbm9pc2VbMF1dOwogCWRldi0+bm9pc2VjYWxjLnNhbXBsZXNbaV1bMV0gPSBwaHktPm5yc3NpX2x0W25vaXNlWzFdXTsKIAlkZXYtPm5vaXNlY2FsYy5zYW1wbGVzW2ldWzJdID0gcGh5LT5ucnNzaV9sdFtub2lzZVsyXV07CkBAIC0xMzcyLDE4ICsxMzk2LDE4IEBACiAJdW5zaWduZWQgaW50IHJhdGU7CiAJdTE2IGN0bDsKIAlpbnQgYW50ZW5uYTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGRldi0+d2wtPmN1cnJlbnRfYmVhY29uKTsKIAogCWJjbiA9IChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikoZGV2LT53bC0+Y3VycmVudF9iZWFjb24tPmRhdGEpOwogCWxlbiA9IG1pbigoc2l6ZV90KSBkZXYtPndsLT5jdXJyZW50X2JlYWNvbi0+bGVuLAogCQkgIDB4MjAwIC0gc2l6ZW9mKHN0cnVjdCBiNDNfcGxjcF9oZHI2KSk7Ci0JcmF0ZSA9IGRldi0+d2wtPmJlYWNvbl90eGN0bC50eF9yYXRlLT5od192YWx1ZTsKKwlyYXRlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKGRldi0+d2wtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CiAKIAliNDNfd3JpdGVfdGVtcGxhdGVfY29tbW9uKGRldiwgKGNvbnN0IHU4ICopYmNuLAogCQkJCSAgbGVuLCByYW1fb2Zmc2V0LCBzaG1fc2l6ZV9vZmZzZXQsIHJhdGUpOwogCiAJLyogV3JpdGUgdGhlIFBIWSBUWCBjb250cm9sIHBhcmFtZXRlcnMuICovCi0JYW50ZW5uYSA9IGI0M19hbnRlbm5hX2Zyb21faWVlZTgwMjExKGRldiwKLQkJCWRldi0+d2wtPmJlYWNvbl90eGN0bC5hbnRlbm5hX3NlbF90eCk7CisJYW50ZW5uYSA9IGI0M19hbnRlbm5hX2Zyb21faWVlZTgwMjExKGRldiwgaW5mby0+YW50ZW5uYV9zZWxfdHgpOwogCWFudGVubmEgPSBiNDNfYW50ZW5uYV90b19waHljdGwoYW50ZW5uYSk7CiAJY3RsID0gYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9CRUFDUEhZQ1RMKTsKIAkvKiBXZSBjYW4ndCBzZW5kIGJlYWNvbnMgd2l0aCBzaG9ydCBwcmVhbWJsZS4gV291bGQgZ2V0IFBIWSBlcnJvcnMuICovCkBAIC0xNDM0LDExICsxNDU4LDE3IEBACiAJCWkgKz0gaWVfbGVuICsgMjsKIAl9CiAJaWYgKCF0aW1fZm91bmQpIHsKLQkJYjQzd2FybihkZXYtPndsLCAiRGlkIG5vdCBmaW5kIGEgdmFsaWQgVElNIElFIGluICIKLQkJCSJ0aGUgYmVhY29uIHRlbXBsYXRlIHBhY2tldC4gQVAgb3IgSUJTUyBvcGVyYXRpb24gIgotCQkJIm1heSBiZSBicm9rZW4uXG4iKTsKLQl9IGVsc2UKLQkJYjQzZGJnKGRldi0+d2wsICJVcGRhdGVkIGJlYWNvbiB0ZW1wbGF0ZVxuIik7CisJCS8qCisJCSAqIElmIHVjb2RlIHdhbnRzIHRvIG1vZGlmeSBUSU0gZG8gaXQgYmVoaW5kIHRoZSBiZWFjb24sIHRoaXMKKwkJICogd2lsbCBoYXBwZW4sIGZvciBleGFtcGxlLCB3aGVuIGRvaW5nIG1lc2ggbmV0d29ya2luZy4KKwkJICovCisJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAorCQkJCUI0M19TSE1fU0hfVElNQlBPUywKKwkJCQlsZW4gKyBzaXplb2Yoc3RydWN0IGI0M19wbGNwX2hkcjYpKTsKKwkJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsCisJCQkJQjQzX1NITV9TSF9EVElNUEVSLCAwKTsKKwl9CisJYjQzZGJnKGRldi0+d2wsICJVcGRhdGVkIGJlYWNvbiB0ZW1wbGF0ZSBhdCAweCV4XG4iLCByYW1fb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3dyaXRlX3Byb2JlX3Jlc3BfcGxjcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCkBAIC0xNTc3LDcgKzE2MDcsOCBAQAogCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKIAl1MzIgY21kLCBiZWFjb24wX3ZhbGlkLCBiZWFjb24xX3ZhbGlkOwogCi0JaWYgKCFiNDNfaXNfbW9kZSh3bCwgSUVFRTgwMjExX0lGX1RZUEVfQVApKQorCWlmICghYjQzX2lzX21vZGUod2wsIElFRUU4MDIxMV9JRl9UWVBFX0FQKSAmJgorCSAgICAhYjQzX2lzX21vZGUod2wsIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQpKQogCQlyZXR1cm47CiAKIAkvKiBUaGlzIGlzIHRoZSBib3R0b20gaGFsZiBvZiB0aGUgYXN5bmNocm9ub3VzIGJlYWNvbiB1cGRhdGUuICovCkBAIC0xNjQ0LDE5ICsxNjc1LDI3IEBACiAKIC8qIEFzeW5jaHJvbm91c2x5IHVwZGF0ZSB0aGUgcGFja2V0IHRlbXBsYXRlcyBpbiB0ZW1wbGF0ZSBSQU0uCiAgKiBMb2NraW5nOiBSZXF1aXJlcyB3bC0+aXJxX2xvY2sgdG8gYmUgbG9ja2VkLiAqLwotc3RhdGljIHZvaWQgYjQzX3VwZGF0ZV90ZW1wbGF0ZXMoc3RydWN0IGI0M193bCAqd2wsIHN0cnVjdCBza19idWZmICpiZWFjb24sCi0JCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqdHhjdGwpCitzdGF0aWMgdm9pZCBiNDNfdXBkYXRlX3RlbXBsYXRlcyhzdHJ1Y3QgYjQzX3dsICp3bCkKIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uOworCiAJLyogVGhpcyBpcyB0aGUgdG9wIGhhbGYgb2YgdGhlIGFuc3luY2hyb25vdXMgYmVhY29uIHVwZGF0ZS4KIAkgKiBUaGUgYm90dG9tIGhhbGYgaXMgdGhlIGJlYWNvbiBJUlEuCiAJICogQmVhY29uIHVwZGF0ZSBtdXN0IGJlIGFzeW5jaHJvbm91cyB0byBhdm9pZCBzZW5kaW5nIGFuCiAJICogaW52YWxpZCBiZWFjb24uIFRoaXMgY2FuIGhhcHBlbiBmb3IgZXhhbXBsZSwgaWYgdGhlIGZpcm13YXJlCiAJICogdHJhbnNtaXRzIGEgYmVhY29uIHdoaWxlIHdlIGFyZSB1cGRhdGluZyBpdC4gKi8KIAorCS8qIFdlIGNvdWxkIG1vZGlmeSB0aGUgZXhpc3RpbmcgYmVhY29uIGFuZCBzZXQgdGhlIGFpZCBiaXQgaW4KKwkgKiB0aGUgVElNIGZpZWxkLCBidXQgdGhhdCB3b3VsZCBwcm9iYWJseSByZXF1aXJlIHJlc2l6aW5nIGFuZAorCSAqIG1vdmluZyBvZiBkYXRhIHdpdGhpbiB0aGUgYmVhY29uIHRlbXBsYXRlLgorCSAqIFNpbXBseSByZXF1ZXN0IGEgbmV3IGJlYWNvbiBhbmQgbGV0IG1hYzgwMjExIGRvIHRoZSBoYXJkIHdvcmsuICovCisJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod2wtPmh3LCB3bC0+dmlmKTsKKwlpZiAodW5saWtlbHkoIWJlYWNvbikpCisJCXJldHVybjsKKwogCWlmICh3bC0+Y3VycmVudF9iZWFjb24pCiAJCWRldl9rZnJlZV9za2JfYW55KHdsLT5jdXJyZW50X2JlYWNvbik7CiAJd2wtPmN1cnJlbnRfYmVhY29uID0gYmVhY29uOwotCW1lbWNweSgmd2wtPmJlYWNvbl90eGN0bCwgdHhjdGwsIHNpemVvZih3bC0+YmVhY29uX3R4Y3RsKSk7CiAJd2wtPmJlYWNvbjBfdXBsb2FkZWQgPSAwOwogCXdsLT5iZWFjb24xX3VwbG9hZGVkID0gMDsKIAlxdWV1ZV93b3JrKHdsLT5ody0+d29ya3F1ZXVlLCAmd2wtPmJlYWNvbl91cGRhdGVfdHJpZ2dlcik7CkBAIC0xNjk1LDkgKzE3MzQsMTAwIEBACiAJYjQzZGJnKGRldi0+d2wsICJTZXQgYmVhY29uIGludGVydmFsIHRvICV1XG4iLCBiZWFjb25faW50KTsKIH0KIAorc3RhdGljIHZvaWQgYjQzX2hhbmRsZV9maXJtd2FyZV9wYW5pYyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJdTE2IHJlYXNvbjsKKworCS8qIFJlYWQgdGhlIHJlZ2lzdGVyIHRoYXQgY29udGFpbnMgdGhlIHJlYXNvbiBjb2RlIGZvciB0aGUgcGFuaWMuICovCisJcmVhc29uID0gYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NDUkFUQ0gsIEI0M19GV1BBTklDX1JFQVNPTl9SRUcpOworCWI0M2VycihkZXYtPndsLCAiV2hvb3BzeSwgZmlybXdhcmUgcGFuaWMhIFJlYXNvbjogJXVcbiIsIHJlYXNvbik7CisKKwlzd2l0Y2ggKHJlYXNvbikgeworCWRlZmF1bHQ6CisJCWI0M2RiZyhkZXYtPndsLCAiVGhlIHBhbmljIHJlYXNvbiBpcyB1bmtub3duLlxuIik7CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBCNDNfRldQQU5JQ19ESUU6CisJCS8qIERvIG5vdCByZXN0YXJ0IHRoZSBjb250cm9sbGVyIG9yIGZpcm13YXJlLgorCQkgKiBUaGUgZGV2aWNlIGlzIG5vbmZ1bmN0aW9uYWwgZnJvbSBub3cgb24uCisJCSAqIFJlc3RhcnRpbmcgd291bGQgcmVzdWx0IGluIHRoaXMgcGFuaWMgdG8gdHJpZ2dlciBhZ2FpbiwKKwkJICogc28gd2UgYXZvaWQgdGhhdCByZWN1cnNpb24uICovCisJCWJyZWFrOworCWNhc2UgQjQzX0ZXUEFOSUNfUkVTVEFSVDoKKwkJYjQzX2NvbnRyb2xsZXJfcmVzdGFydChkZXYsICJNaWNyb2NvZGUgcGFuaWMiKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVfaXJxX3Vjb2RlX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQkvL1RPRE8KKwl1bnNpZ25lZCBpbnQgaSwgY250OworCXUxNiByZWFzb24sIG1hcmtlcl9pZCwgbWFya2VyX2xpbmU7CisJX19sZTE2ICpidWY7CisKKwkvKiBUaGUgcHJvcHJpZXRhcnkgZmlybXdhcmUgZG9lc24ndCBoYXZlIHRoaXMgSVJRLiAqLworCWlmICghZGV2LT5mdy5vcGVuc291cmNlKQorCQlyZXR1cm47CisKKwkvKiBSZWFkIHRoZSByZWdpc3RlciB0aGF0IGNvbnRhaW5zIHRoZSByZWFzb24gY29kZSBmb3IgdGhpcyBJUlEuICovCisJcmVhc29uID0gYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NDUkFUQ0gsIEI0M19ERUJVR0lSUV9SRUFTT05fUkVHKTsKKworCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBCNDNfREVCVUdJUlFfUEFOSUM6CisJCWI0M19oYW5kbGVfZmlybXdhcmVfcGFuaWMoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfREVCVUdJUlFfRFVNUF9TSE06CisJCWlmICghQjQzX0RFQlVHKQorCQkJYnJlYWs7IC8qIE9ubHkgd2l0aCBkcml2ZXIgZGVidWdnaW5nIGVuYWJsZWQuICovCisJCWJ1ZiA9IGttYWxsb2MoNDA5NiwgR0ZQX0FUT01JQyk7CisJCWlmICghYnVmKSB7CisJCQliNDNkYmcoZGV2LT53bCwgIlNITS1kdW1wOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWZvciAoaSA9IDA7IGkgPCA0MDk2OyBpICs9IDIpIHsKKwkJCXUxNiB0bXAgPSBiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0hBUkVELCBpKTsKKwkJCWJ1ZltpIC8gMl0gPSBjcHVfdG9fbGUxNih0bXApOworCQl9CisJCWI0M2luZm8oZGV2LT53bCwgIlNoYXJlZCBtZW1vcnkgZHVtcDpcbiIpOworCQlwcmludF9oZXhfZHVtcChLRVJOX0lORk8sICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkgICAgICAgMTYsIDIsIGJ1ZiwgNDA5NiwgMSk7CisJCWtmcmVlKGJ1Zik7CisJCWJyZWFrOworCWNhc2UgQjQzX0RFQlVHSVJRX0RVTVBfUkVHUzoKKwkJaWYgKCFCNDNfREVCVUcpCisJCQlicmVhazsgLyogT25seSB3aXRoIGRyaXZlciBkZWJ1Z2dpbmcgZW5hYmxlZC4gKi8KKwkJYjQzaW5mbyhkZXYtPndsLCAiTWljcm9jb2RlIHJlZ2lzdGVyIGR1bXA6XG4iKTsKKwkJZm9yIChpID0gMCwgY250ID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJCXUxNiB0bXAgPSBiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0NSQVRDSCwgaSk7CisJCQlpZiAoY250ID09IDApCisJCQkJcHJpbnRrKEtFUk5fSU5GTyk7CisJCQlwcmludGsoInIlMDJ1OiAweCUwNFggICIsIGksIHRtcCk7CisJCQljbnQrKzsKKwkJCWlmIChjbnQgPT0gNikgeworCQkJCXByaW50aygiXG4iKTsKKwkJCQljbnQgPSAwOworCQkJfQorCQl9CisJCXByaW50aygiXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfREVCVUdJUlFfTUFSS0VSOgorCQlpZiAoIUI0M19ERUJVRykKKwkJCWJyZWFrOyAvKiBPbmx5IHdpdGggZHJpdmVyIGRlYnVnZ2luZyBlbmFibGVkLiAqLworCQltYXJrZXJfaWQgPSBiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0NSQVRDSCwKKwkJCQkJICAgQjQzX01BUktFUl9JRF9SRUcpOworCQltYXJrZXJfbGluZSA9IGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9TQ1JBVENILAorCQkJCQkgICAgIEI0M19NQVJLRVJfTElORV9SRUcpOworCQliNDNpbmZvKGRldi0+d2wsICJUaGUgZmlybXdhcmUganVzdCBleGVjdXRlZCB0aGUgTUFSS0VSKCV1KSAiCisJCQkiYXQgbGluZSBudW1iZXIgJXVcbiIsCisJCQltYXJrZXJfaWQsIG1hcmtlcl9saW5lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYjQzZGJnKGRldi0+d2wsICJEZWJ1Zy1JUlEgdHJpZ2dlcmVkIGZvciB1bmtub3duIHJlYXNvbjogJXVcbiIsCisJCSAgICAgICByZWFzb24pOworCX0KK291dDoKKwkvKiBBY2tub3dsZWRnZSB0aGUgZGVidWctSVJRLCBzbyB0aGUgZmlybXdhcmUgY2FuIGNvbnRpbnVlLiAqLworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0NSQVRDSCwKKwkJCUI0M19ERUJVR0lSUV9SRUFTT05fUkVHLCBCNDNfREVCVUdJUlFfQUNLKTsKIH0KIAogLyogSW50ZXJydXB0IGhhbmRsZXIgYm90dG9tLWhhbGYgKi8KQEAgLTE4ODQsNyArMjAxNCw4IEBACiAKIHN0YXRpYyBpbnQgZG9fcmVxdWVzdF9mdyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgY29uc3QgY2hhciAqbmFtZSwKLQkJCSBzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KQorCQkJIHN0cnVjdCBiNDNfZmlybXdhcmVfZmlsZSAqZncsCisJCQkgYm9vbCBzaWxlbnQpCiB7CiAJY2hhciBwYXRoW3NpemVvZihtb2RwYXJhbV9md3Bvc3RmaXgpICsgMzJdOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmxvYjsKQEAgLTE5MDgsOSArMjAzOSwxNSBAQAogCQkgImI0MyVzLyVzLmZ3IiwKIAkJIG1vZHBhcmFtX2Z3cG9zdGZpeCwgbmFtZSk7CiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYmxvYiwgcGF0aCwgZGV2LT5kZXYtPmRldik7Ci0JaWYgKGVycikgewotCQliNDNlcnIoZGV2LT53bCwgIkZpcm13YXJlIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCAiCi0JCSAgICAgICAib3IgbG9hZCBmYWlsZWQuXG4iLCBwYXRoKTsKKwlpZiAoZXJyID09IC1FTk9FTlQpIHsKKwkJaWYgKCFzaWxlbnQpIHsKKwkJCWI0M2VycihkZXYtPndsLCAiRmlybXdhcmUgZmlsZSBcIiVzXCIgbm90IGZvdW5kXG4iLAorCQkJICAgICAgIHBhdGgpOworCQl9CisJCXJldHVybiBlcnI7CisJfSBlbHNlIGlmIChlcnIpIHsKKwkJYjQzZXJyKGRldi0+d2wsICJGaXJtd2FyZSBmaWxlIFwiJXNcIiByZXF1ZXN0IGZhaWxlZCAoZXJyPSVkKVxuIiwKKwkJICAgICAgIHBhdGgsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChibG9iLT5zaXplIDwgc2l6ZW9mKHN0cnVjdCBiNDNfZndfaGVhZGVyKSkKQEAgLTE5NjEsNyArMjA5OCw3IEBACiAJCWZpbGVuYW1lID0gInVjb2RlMTMiOwogCWVsc2UKIAkJZ290byBlcnJfbm9fdWNvZGU7Ci0JZXJyID0gZG9fcmVxdWVzdF9mdyhkZXYsIGZpbGVuYW1lLCAmZnctPnVjb2RlKTsKKwllcnIgPSBkb19yZXF1ZXN0X2Z3KGRldiwgZmlsZW5hbWUsICZmdy0+dWNvZGUsIDApOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2xvYWQ7CiAKQEAgLTE5NzIsOCArMjEwOSwxMyBAQAogCQlmaWxlbmFtZSA9IE5VTEw7CiAJZWxzZQogCQlnb3RvIGVycl9ub19wY207Ci0JZXJyID0gZG9fcmVxdWVzdF9mdyhkZXYsIGZpbGVuYW1lLCAmZnctPnBjbSk7Ci0JaWYgKGVycikKKwlmdy0+cGNtX3JlcXVlc3RfZmFpbGVkID0gMDsKKwllcnIgPSBkb19yZXF1ZXN0X2Z3KGRldiwgZmlsZW5hbWUsICZmdy0+cGNtLCAxKTsKKwlpZiAoZXJyID09IC1FTk9FTlQpIHsKKwkJLyogV2UgZGlkIG5vdCBmaW5kIGEgUENNIGZpbGU/IE5vdCBmYXRhbCwgYnV0CisJCSAqIGNvcmUgcmV2IDw9IDEwIG11c3QgZG8gd2l0aG91dCBod2NyeXB0byB0aGVuLiAqLworCQlmdy0+cGNtX3JlcXVlc3RfZmFpbGVkID0gMTsKKwl9IGVsc2UgaWYgKGVycikKIAkJZ290byBlcnJfbG9hZDsKIAogCS8qIEdldCBpbml0dmFscyAqLwpAQCAtMTk5MSw3ICsyMTMzLDcgQEAKIAkJaWYgKChyZXYgPj0gNSkgJiYgKHJldiA8PSAxMCkpCiAJCQlmaWxlbmFtZSA9ICJiMGcwaW5pdHZhbHM1IjsKIAkJZWxzZSBpZiAocmV2ID49IDEzKQotCQkJZmlsZW5hbWUgPSAibHAwaW5pdHZhbHMxMyI7CisJCQlmaWxlbmFtZSA9ICJiMGcwaW5pdHZhbHMxMyI7CiAJCWVsc2UKIAkJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCQlicmVhazsKQEAgLTIwMDQsNyArMjE0Niw3IEBACiAJZGVmYXVsdDoKIAkJZ290byBlcnJfbm9faW5pdHZhbHM7CiAJfQotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFscyk7CisJZXJyID0gZG9fcmVxdWVzdF9mdyhkZXYsIGZpbGVuYW1lLCAmZnctPmluaXR2YWxzLCAwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9sb2FkOwogCkBAIC0yMDM4LDcgKzIxODAsNyBAQAogCWRlZmF1bHQ6CiAJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCX0KLQllcnIgPSBkb19yZXF1ZXN0X2Z3KGRldiwgZmlsZW5hbWUsICZmdy0+aW5pdHZhbHNfYmFuZCk7CisJZXJyID0gZG9fcmVxdWVzdF9mdyhkZXYsIGZpbGVuYW1lLCAmZnctPmluaXR2YWxzX2JhbmQsIDApOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2xvYWQ7CiAKQEAgLTIxNTUsMTQgKzIyOTcsMjggQEAKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWI0M2luZm8oZGV2LT53bCwgIkxvYWRpbmcgZmlybXdhcmUgdmVyc2lvbiAldS4ldSAiCi0JCSIoMjAlLjJpLSUuMmktJS4yaSAlLjJpOiUuMmk6JS4yaSlcbiIsCi0JCWZ3cmV2LCBmd3BhdGNoLAotCQkoZndkYXRlID4+IDEyKSAmIDB4RiwgKGZ3ZGF0ZSA+PiA4KSAmIDB4RiwgZndkYXRlICYgMHhGRiwKLQkJKGZ3dGltZSA+PiAxMSkgJiAweDFGLCAoZnd0aW1lID4+IDUpICYgMHgzRiwgZnd0aW1lICYgMHgxRik7Ci0KIAlkZXYtPmZ3LnJldiA9IGZ3cmV2OwogCWRldi0+ZncucGF0Y2ggPSBmd3BhdGNoOworCWRldi0+Zncub3BlbnNvdXJjZSA9IChmd2RhdGUgPT0gMHhGRkZGKTsKKworCWlmIChkZXYtPmZ3Lm9wZW5zb3VyY2UpIHsKKwkJLyogUGF0Y2hsZXZlbCBpbmZvIGlzIGVuY29kZWQgaW4gdGhlICJ0aW1lIiBmaWVsZC4gKi8KKwkJZGV2LT5mdy5wYXRjaCA9IGZ3dGltZTsKKwkJYjQzaW5mbyhkZXYtPndsLCAiTG9hZGluZyBPcGVuU291cmNlIGZpcm13YXJlIHZlcnNpb24gJXUuJXUlc1xuIiwKKwkJCWRldi0+ZncucmV2LCBkZXYtPmZ3LnBhdGNoLAorCQkJZGV2LT5mdy5wY21fcmVxdWVzdF9mYWlsZWQgPyAiIChIYXJkd2FyZSBjcnlwdG8gbm90IHN1cHBvcnRlZCkiIDogIiIpOworCX0gZWxzZSB7CisJCWI0M2luZm8oZGV2LT53bCwgIkxvYWRpbmcgZmlybXdhcmUgdmVyc2lvbiAldS4ldSAiCisJCQkiKDIwJS4yaS0lLjJpLSUuMmkgJS4yaTolLjJpOiUuMmkpXG4iLAorCQkJZndyZXYsIGZ3cGF0Y2gsCisJCQkoZndkYXRlID4+IDEyKSAmIDB4RiwgKGZ3ZGF0ZSA+PiA4KSAmIDB4RiwgZndkYXRlICYgMHhGRiwKKwkJCShmd3RpbWUgPj4gMTEpICYgMHgxRiwgKGZ3dGltZSA+PiA1KSAmIDB4M0YsIGZ3dGltZSAmIDB4MUYpOworCQlpZiAoZGV2LT5mdy5wY21fcmVxdWVzdF9mYWlsZWQpIHsKKwkJCWI0M3dhcm4oZGV2LT53bCwgIk5vIFwicGNtNS5md1wiIGZpcm13YXJlIGZpbGUgZm91bmQuICIKKwkJCQkiSGFyZHdhcmUgYWNjZWxlcmF0ZWQgY3J5cHRvZ3JhcGh5IGlzIGRpc2FibGVkLlxuIik7CisJCQliNDNfcHJpbnRfZndfaGVscHRleHQoZGV2LT53bCwgMCk7CisJCX0KKwl9CiAKIAlpZiAoYjQzX2lzX29sZF90eGhkcl9mb3JtYXQoZGV2KSkgewogCQliNDN3YXJuKGRldi0+d2wsICJZb3UgYXJlIHVzaW5nIGFuIG9sZCBmaXJtd2FyZSBpbWFnZS4gIgpAQCAtMjMzOSw4ICsyNDk1LDIxIEBACiB9CiAKIC8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9FbmFibGVNYWMgKi8KLXN0YXRpYyB2b2lkIGI0M19tYWNfZW5hYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3ZvaWQgYjQzX21hY19lbmFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KQogeworCWlmIChiNDNfZGVidWcoZGV2LCBCNDNfREJHX0ZJUk1XQVJFKSkgeworCQl1MTYgZndzdGF0ZTsKKworCQlmd3N0YXRlID0gYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwKKwkJCQkJIEI0M19TSE1fU0hfVUNPREVTVEFUKTsKKwkJaWYgKChmd3N0YXRlICE9IEI0M19TSE1fU0hfVUNPREVTVEFUX1NVU1ApICYmCisJCSAgICAoZndzdGF0ZSAhPSBCNDNfU0hNX1NIX1VDT0RFU1RBVF9TTEVFUCkpIHsKKwkJCWI0M2VycihkZXYtPndsLCAiYjQzX21hY19lbmFibGUoKTogVGhlIGZpcm13YXJlICIKKwkJCSAgICAgICAic2hvdWxkIGJlIHN1c3BlbmRlZCwgYnV0IGN1cnJlbnQgc3RhdGUgaXMgJXVcbiIsCisJCQkgICAgICAgZndzdGF0ZSk7CisJCX0KKwl9CisKIAlkZXYtPm1hY19zdXNwZW5kZWQtLTsKIAlCNDNfV0FSTl9PTihkZXYtPm1hY19zdXNwZW5kZWQgPCAwKTsKIAlpZiAoZGV2LT5tYWNfc3VzcGVuZGVkID09IDApIHsKQEAgLTIzNTMsMTYgKzI1MjIsMTEgQEAKIAkJYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX01BQ0NUTCk7CiAJCWI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX1JFQVNPTik7CiAJCWI0M19wb3dlcl9zYXZpbmdfY3RsX2JpdHMoZGV2LCAwKTsKLQotCQkvKiBSZS1lbmFibGUgSVJRcy4gKi8KLQkJc3Bpbl9sb2NrX2lycSgmZGV2LT53bC0+aXJxX2xvY2spOwotCQliNDNfaW50ZXJydXB0X2VuYWJsZShkZXYsIGRldi0+aXJxX3NhdmVkc3RhdGUpOwotCQlzcGluX3VubG9ja19pcnEoJmRldi0+d2wtPmlycV9sb2NrKTsKIAl9CiB9CiAKIC8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9TdXNwZW5kTUFDICovCi1zdGF0aWMgdm9pZCBiNDNfbWFjX3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KQordm9pZCBiNDNfbWFjX3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCWludCBpOwogCXUzMiB0bXA7CkBAIC0yMzcxLDE0ICsyNTM1LDYgQEAKIAlCNDNfV0FSTl9PTihkZXYtPm1hY19zdXNwZW5kZWQgPCAwKTsKIAogCWlmIChkZXYtPm1hY19zdXNwZW5kZWQgPT0gMCkgewotCQkvKiBNYXNrIElSUXMgYmVmb3JlIHN1c3BlbmRpbmcgTUFDLiBPdGhlcndpc2UKLQkJICogdGhlIE1BQyBzdGF5cyBidXN5IGFuZCB3b24ndCBzdXNwZW5kLiAqLwotCQlzcGluX2xvY2tfaXJxKCZkZXYtPndsLT5pcnFfbG9jayk7Ci0JCXRtcCA9IGI0M19pbnRlcnJ1cHRfZGlzYWJsZShkZXYsIEI0M19JUlFfQUxMKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPndsLT5pcnFfbG9jayk7Ci0JCWI0M19zeW5jaHJvbml6ZV9pcnEoZGV2KTsKLQkJZGV2LT5pcnFfc2F2ZWRzdGF0ZSA9IHRtcDsKLQogCQliNDNfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKGRldiwgQjQzX1BTX0FXQUtFKTsKIAkJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19NQUNDVEwsCiAJCQkgICAgYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX01BQ0NUTCkKQEAgLTI0MjAsNyArMjU3Niw4IEBACiAJY3RsICY9IH5CNDNfTUFDQ1RMX0JFQUNQUk9NSVNDOwogCWN0bCB8PSBCNDNfTUFDQ1RMX0lORlJBOwogCi0JaWYgKGI0M19pc19tb2RlKHdsLCBJRUVFODAyMTFfSUZfVFlQRV9BUCkpCisJaWYgKGI0M19pc19tb2RlKHdsLCBJRUVFODAyMTFfSUZfVFlQRV9BUCkgfHwKKwkgICAgYjQzX2lzX21vZGUod2wsIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQpKQogCQljdGwgfD0gQjQzX01BQ0NUTF9BUDsKIAllbHNlIGlmIChiNDNfaXNfbW9kZSh3bCwgSUVFRTgwMjExX0lGX1RZUEVfSUJTUykpCiAJCWN0bCAmPSB+QjQzX01BQ0NUTF9JTkZSQTsKQEAgLTI1MzQsNiArMjY5MSw3IEBACiB7CiAJYjQzX3JhZGlvX3R1cm5fb2ZmKGRldiwgMSk7CiAJYjQzX2dwaW9fY2xlYW51cChkZXYpOworCWI0M19sb19nX2NsZWFudXAoZGV2KTsKIAkvKiBmaXJtd2FyZSBpcyByZWxlYXNlZCBsYXRlciAqLwogfQogCkBAIC0yNjQwLDI4ICsyNzk4LDEyIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYjQzX3BlcmlvZGljX2V2ZXJ5MTIwc2VjKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLQlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwotCi0JaWYgKHBoeS0+dHlwZSAhPSBCNDNfUEhZVFlQRV9HIHx8IHBoeS0+cmV2IDwgMikKLQkJcmV0dXJuOwotCi0JYjQzX21hY19zdXNwZW5kKGRldik7Ci0JYjQzX2xvX2dfbWVhc3VyZShkZXYpOwotCWI0M19tYWNfZW5hYmxlKGRldik7Ci0JaWYgKGI0M19oYXNfaGFyZHdhcmVfcGN0bChwaHkpKQotCQliNDNfbG9fZ19jdGxfbWFya19hbGxfdW51c2VkKGRldik7Ci19Ci0KIHN0YXRpYyB2b2lkIGI0M19wZXJpb2RpY19ldmVyeTYwc2VjKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwogCiAJaWYgKHBoeS0+dHlwZSAhPSBCNDNfUEhZVFlQRV9HKQogCQlyZXR1cm47Ci0JaWYgKCFiNDNfaGFzX2hhcmR3YXJlX3BjdGwocGh5KSkKLQkJYjQzX2xvX2dfY3RsX21hcmtfYWxsX3VudXNlZChkZXYpOwogCWlmIChkZXYtPmRldi0+YnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9SU1NJKSB7CiAJCWI0M19tYWNfc3VzcGVuZChkZXYpOwogCQliNDNfY2FsY19ucnNzaV9zbG9wZShkZXYpOwpAQCAtMjY4OCw2ICsyODMwLDIxIEBACiBzdGF0aWMgdm9pZCBiNDNfcGVyaW9kaWNfZXZlcnkxNXNlYyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKKwl1MTYgd2RyOworCisJaWYgKGRldi0+Zncub3BlbnNvdXJjZSkgeworCQkvKiBDaGVjayBpZiB0aGUgZmlybXdhcmUgaXMgc3RpbGwgYWxpdmUuCisJCSAqIEl0IHdpbGwgcmVzZXQgdGhlIHdhdGNoZG9nIGNvdW50ZXIgdG8gMCBpbiBpdHMgaWRsZSBsb29wLiAqLworCQl3ZHIgPSBiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0NSQVRDSCwgQjQzX1dBVENIRE9HX1JFRyk7CisJCWlmICh1bmxpa2VseSh3ZHIpKSB7CisJCQliNDNlcnIoZGV2LT53bCwgIkZpcm13YXJlIHdhdGNoZG9nOiBUaGUgZmlybXdhcmUgZGllZCFcbiIpOworCQkJYjQzX2NvbnRyb2xsZXJfcmVzdGFydChkZXYsICJGaXJtd2FyZSB3YXRjaGRvZyIpOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TQ1JBVENILAorCQkJCQlCNDNfV0FUQ0hET0dfUkVHLCAxKTsKKwkJfQorCX0KIAogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRykgewogCQkvL1RPRE86IHVwZGF0ZV9hY2lfbW92aW5nX2F2ZXJhZ2UKQEAgLTI3MTMsNiArMjg3MCw3IEBACiAJCX0KIAl9CiAJYjQzX3BoeV94bWl0cG93ZXIoZGV2KTsJLy9GSVhNRTogdW5sZXNzIHNjYW5uaW5nPworCWI0M19sb19nX21haW50YW5hbmNlX3dvcmsoZGV2KTsKIAkvL1RPRE8gZm9yIEFQSFkgKHRlbXBlcmF0dXJlPykKIAogCWF0b21pY19zZXQoJnBoeS0+dHhlcnJfY250LCBCNDNfUEhZX1RYX0JBRE5FU1NfTElNSVQpOwpAQCAtMjcyNCw4ICsyODgyLDYgQEAKIAl1bnNpZ25lZCBpbnQgc3RhdGU7CiAKIAlzdGF0ZSA9IGRldi0+cGVyaW9kaWNfc3RhdGU7Ci0JaWYgKHN0YXRlICUgOCA9PSAwKQotCQliNDNfcGVyaW9kaWNfZXZlcnkxMjBzZWMoZGV2KTsKIAlpZiAoc3RhdGUgJSA0ID09IDApCiAJCWI0M19wZXJpb2RpY19ldmVyeTYwc2VjKGRldik7CiAJaWYgKHN0YXRlICUgMiA9PSAwKQpAQCAtMjg3Myw4ICszMDI5LDcgQEAKIH0KIAogc3RhdGljIGludCBiNDNfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0bCkKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7CkBAIC0yODk1LDkgKzMwNTAsOSBAQAogCWVyciA9IC1FTk9ERVY7CiAJaWYgKGxpa2VseShiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfU1RBUlRFRCkpIHsKIAkJaWYgKGI0M191c2luZ19waW9fdHJhbnNmZXJzKGRldikpCi0JCQllcnIgPSBiNDNfcGlvX3R4KGRldiwgc2tiLCBjdGwpOworCQkJZXJyID0gYjQzX3Bpb190eChkZXYsIHNrYik7CiAJCWVsc2UKLQkJCWVyciA9IGI0M19kbWFfdHgoZGV2LCBza2IsIGN0bCk7CisJCQllcnIgPSBiNDNfZG1hX3R4KGRldiwgc2tiKTsKIAl9CiAKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+dHhfbG9jaywgZmxhZ3MpOwpAQCAtMjkxOCw1MyArMzA3MywyMCBAQAogCQkJCSAgdTE2IHNobV9vZmZzZXQpCiB7CiAJdTE2IHBhcmFtc1tCNDNfTlJfUU9TUEFSQU1TXTsKLQlpbnQgY3dfbWluLCBjd19tYXgsIGFpZnMsIGJzbG90cywgdG1wOworCWludCBic2xvdHMsIHRtcDsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWNvbnN0IHUxNiBhQ1dtaW4gPSAweDAwMDE7Ci0JY29uc3QgdTE2IGFDV21heCA9IDB4MDNGRjsKLQotCS8qIENhbGN1bGF0ZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLCBpZiBuZWVkZWQuICovCi0Jc3dpdGNoIChzaG1fb2Zmc2V0KSB7Ci0JY2FzZSBCNDNfUU9TX1ZPSUNFOgotCQlhaWZzID0gKHAtPmFpZnMgPT0gLTEpID8gMiA6IHAtPmFpZnM7Ci0JCWN3X21pbiA9IChwLT5jd19taW4gPT0gMCkgPyAoKGFDV21pbiArIDEpIC8gNCAtIDEpIDogcC0+Y3dfbWluOwotCQljd19tYXggPSAocC0+Y3dfbWF4ID09IDApID8gKChhQ1dtaW4gKyAxKSAvIDIgLSAxKSA6IHAtPmN3X21heDsKLQkJYnJlYWs7Ci0JY2FzZSBCNDNfUU9TX1ZJREVPOgotCQlhaWZzID0gKHAtPmFpZnMgPT0gLTEpID8gMiA6IHAtPmFpZnM7Ci0JCWN3X21pbiA9IChwLT5jd19taW4gPT0gMCkgPyAoKGFDV21pbiArIDEpIC8gMiAtIDEpIDogcC0+Y3dfbWluOwotCQljd19tYXggPSAocC0+Y3dfbWF4ID09IDApID8gYUNXbWluIDogcC0+Y3dfbWF4OwotCQlicmVhazsKLQljYXNlIEI0M19RT1NfQkVTVEVGRk9SVDoKLQkJYWlmcyA9IChwLT5haWZzID09IC0xKSA/IDMgOiBwLT5haWZzOwotCQljd19taW4gPSAocC0+Y3dfbWluID09IDApID8gYUNXbWluIDogcC0+Y3dfbWluOwotCQljd19tYXggPSAocC0+Y3dfbWF4ID09IDApID8gYUNXbWF4IDogcC0+Y3dfbWF4OwotCQlicmVhazsKLQljYXNlIEI0M19RT1NfQkFDS0dST1VORDoKLQkJYWlmcyA9IChwLT5haWZzID09IC0xKSA/IDcgOiBwLT5haWZzOwotCQljd19taW4gPSAocC0+Y3dfbWluID09IDApID8gYUNXbWluIDogcC0+Y3dfbWluOwotCQljd19tYXggPSAocC0+Y3dfbWF4ID09IDApID8gYUNXbWF4IDogcC0+Y3dfbWF4OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCNDNfV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoY3dfbWluIDw9IDApCi0JCWN3X21pbiA9IGFDV21pbjsKLQlpZiAoY3dfbWF4IDw9IDApCi0JCWN3X21heCA9IGFDV21pbjsKLQlic2xvdHMgPSBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fUk5HKSAlIGN3X21pbjsKKwlic2xvdHMgPSBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fUk5HKSAmIHAtPmN3X21pbjsKIAogCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CiAKIAlwYXJhbXNbQjQzX1FPU1BBUkFNX1RYT1BdID0gcC0+dHhvcCAqIDMyOwotCXBhcmFtc1tCNDNfUU9TUEFSQU1fQ1dNSU5dID0gY3dfbWluOwotCXBhcmFtc1tCNDNfUU9TUEFSQU1fQ1dNQVhdID0gY3dfbWF4OwotCXBhcmFtc1tCNDNfUU9TUEFSQU1fQ1dDVVJdID0gY3dfbWluOwotCXBhcmFtc1tCNDNfUU9TUEFSQU1fQUlGU10gPSBhaWZzOworCXBhcmFtc1tCNDNfUU9TUEFSQU1fQ1dNSU5dID0gcC0+Y3dfbWluOworCXBhcmFtc1tCNDNfUU9TUEFSQU1fQ1dNQVhdID0gcC0+Y3dfbWF4OworCXBhcmFtc1tCNDNfUU9TUEFSQU1fQ1dDVVJdID0gcC0+Y3dfbWluOworCXBhcmFtc1tCNDNfUU9TUEFSQU1fQUlGU10gPSBwLT5haWZzOwogCXBhcmFtc1tCNDNfUU9TUEFSQU1fQlNMT1RTXSA9IGJzbG90czsKLQlwYXJhbXNbQjQzX1FPU1BBUkFNX1JFR0dBUF0gPSBic2xvdHMgKyBhaWZzOworCXBhcmFtc1tCNDNfUU9TUEFSQU1fUkVHR0FQXSA9IGJzbG90cyArIHAtPmFpZnM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYXJhbXMpOyBpKyspIHsKIAkJaWYgKGkgPT0gQjQzX1FPU1BBUkFNX1NUQVRVUykgewpAQCAtMzA2MCw4ICszMTgyLDcgQEAKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX29wX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgIGludCBfcXVldWUsCitzdGF0aWMgaW50IGI0M19vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgX3F1ZXVlLAogCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKQEAgLTMzMDksOCArMzQzMCw5IEBACiAJYW50ZW5uYSA9IGI0M19hbnRlbm5hX2Zyb21faWVlZTgwMjExKGRldiwgY29uZi0+YW50ZW5uYV9zZWxfcngpOwogCWI0M19zZXRfcnhfYW50ZW5uYShkZXYsIGFudGVubmEpOwogCi0JLyogVXBkYXRlIHRlbXBsYXRlcyBmb3IgQVAgbW9kZS4gKi8KLQlpZiAoYjQzX2lzX21vZGUod2wsIElFRUU4MDIxMV9JRl9UWVBFX0FQKSkKKwkvKiBVcGRhdGUgdGVtcGxhdGVzIGZvciBBUC9tZXNoIG1vZGUuICovCisJaWYgKGI0M19pc19tb2RlKHdsLCBJRUVFODAyMTFfSUZfVFlQRV9BUCkgfHwKKwkgICAgYjQzX2lzX21vZGUod2wsIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQpKQogCQliNDNfc2V0X2JlYWNvbl9pbnQoZGV2LCBjb25mLT5iZWFjb25faW50KTsKIAogCWlmICghIWNvbmYtPnJhZGlvX2VuYWJsZWQgIT0gcGh5LT5yYWRpb19vbikgewpAQCAtMzM2MSw2ICszNDgzLDEzIEBACiAJaWYgKCFkZXYgfHwgYjQzX3N0YXR1cyhkZXYpIDwgQjQzX1NUQVRfSU5JVElBTElaRUQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCWlmIChkZXYtPmZ3LnBjbV9yZXF1ZXN0X2ZhaWxlZCkgeworCQkvKiBXZSBkb24ndCBoYXZlIGZpcm13YXJlIGZvciB0aGUgY3J5cHRvIGVuZ2luZS4KKwkJICogTXVzdCB1c2Ugc29mdHdhcmUtY3J5cHRvLiAqLworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCWVyciA9IC1FSU5WQUw7CiAJc3dpdGNoIChrZXktPmFsZykgewogCWNhc2UgQUxHX1dFUDoKQEAgLTM0OTEsMTMgKzM2MjAsMTYgQEAKIAllbHNlCiAJCW1lbXNldCh3bC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAlpZiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSB7Ci0JCWlmIChiNDNfaXNfbW9kZSh3bCwgSUVFRTgwMjExX0lGX1RZUEVfQVApKSB7Ci0JCQlCNDNfV0FSTl9PTihjb25mLT50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0FQKTsKLQkJCWI0M19zZXRfc3NpZChkZXYsIGNvbmYtPnNzaWQsIGNvbmYtPnNzaWRfbGVuKTsKLQkJCWlmIChjb25mLT5iZWFjb24pIHsKLQkJCQliNDNfdXBkYXRlX3RlbXBsYXRlcyh3bCwgY29uZi0+YmVhY29uLAotCQkJCQkJICAgICBjb25mLT5iZWFjb25fY29udHJvbCk7Ci0JCQl9CisJCWlmIChiNDNfaXNfbW9kZSh3bCwgSUVFRTgwMjExX0lGX1RZUEVfQVApIHx8CisJCSAgICBiNDNfaXNfbW9kZSh3bCwgSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkpIHsKKwkJCUI0M19XQVJOX09OKHZpZi0+dHlwZSAhPSB3bC0+aWZfdHlwZSk7CisJCQlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX1NTSUQpCisJCQkJYjQzX3NldF9zc2lkKGRldiwgY29uZi0+c3NpZCwgY29uZi0+c3NpZF9sZW4pOworCQkJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pCisJCQkJYjQzX3VwZGF0ZV90ZW1wbGF0ZXMod2wpOworCQl9IGVsc2UgaWYgKGI0M19pc19tb2RlKHdsLCBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSkgeworCQkJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pCisJCQkJYjQzX3VwZGF0ZV90ZW1wbGF0ZXMod2wpOwogCQl9CiAJCWI0M193cml0ZV9tYWNfYnNzaWRfdGVtcGxhdGVzKGRldik7CiAJfQpAQCAtMzU2Miw3ICszNjk0LDYgQEAKIAkvKiBTdGFydCBkYXRhIGZsb3cgKFRYL1JYKS4gKi8KIAliNDNfbWFjX2VuYWJsZShkZXYpOwogCWI0M19pbnRlcnJ1cHRfZW5hYmxlKGRldiwgZGV2LT5pcnFfc2F2ZWRzdGF0ZSk7Ci0JaWVlZTgwMjExX3N0YXJ0X3F1ZXVlcyhkZXYtPndsLT5odyk7CiAKIAkvKiBTdGFydCBtYWludGFpbmFuY2Ugd29yayAqLwogCWI0M19wZXJpb2RpY190YXNrc19zZXR1cChkZXYpOwpAQCAtMzcwMyw4ICszODM0LDggQEAKIAlsbyA9IHBoeS0+bG9fY29udHJvbDsKIAlpZiAobG8pIHsKIAkJbWVtc2V0KGxvLCAwLCBzaXplb2YoKihwaHktPmxvX2NvbnRyb2wpKSk7Ci0JCWxvLT5yZWJ1aWxkID0gMTsKIAkJbG8tPnR4X2JpYXMgPSAweEZGOworCQlJTklUX0xJU1RfSEVBRCgmbG8tPmNhbGliX2xpc3QpOwogCX0KIAlwaHktPm1heF9sYl9nYWluID0gMDsKIAlwaHktPnRyc3dfcnhfZ2FpbiA9IDA7CkBAIC00MDM1LDYgKzQxNjYsNyBAQAogCS8qIFRPRE86IGFsbG93IFdEUy9BUCBkZXZpY2VzIHRvIGNvZXhpc3QgKi8KIAogCWlmIChjb25mLT50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0FQICYmCisJICAgIGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCAmJgogCSAgICBjb25mLT50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1NUQSAmJgogCSAgICBjb25mLT50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1dEUyAmJgogCSAgICBjb25mLT50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpCkBAIC00MTg1LDMzICs0MzE3LDEwIEBACiBzdGF0aWMgaW50IGI0M19vcF9iZWFjb25fc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGFpZCwgaW50IHNldCkKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7Ci0Jc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCB0eGN0bDsKLQotCS8qIFdlIGNvdWxkIG1vZGlmeSB0aGUgZXhpc3RpbmcgYmVhY29uIGFuZCBzZXQgdGhlIGFpZCBiaXQgaW4KLQkgKiB0aGUgVElNIGZpZWxkLCBidXQgdGhhdCB3b3VsZCBwcm9iYWJseSByZXF1aXJlIHJlc2l6aW5nIGFuZAotCSAqIG1vdmluZyBvZiBkYXRhIHdpdGhpbiB0aGUgYmVhY29uIHRlbXBsYXRlLgotCSAqIFNpbXBseSByZXF1ZXN0IGEgbmV3IGJlYWNvbiBhbmQgbGV0IG1hYzgwMjExIGRvIHRoZSBoYXJkIHdvcmsuICovCi0JYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHdsLT52aWYsICZ0eGN0bCk7Ci0JaWYgKHVubGlrZWx5KCFiZWFjb24pKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7Ci0JYjQzX3VwZGF0ZV90ZW1wbGF0ZXMod2wsIGJlYWNvbiwgJnR4Y3RsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGI0M19vcF9pYnNzX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCi17Ci0Jc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7Ci0JYjQzX3VwZGF0ZV90ZW1wbGF0ZXMod2wsIGJlYWNvbiwgY3RsKTsKKwliNDNfdXBkYXRlX3RlbXBsYXRlcyh3bCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTQyNDIsNyArNDM1MSw2IEBACiAJLnN0b3AJCQk9IGI0M19vcF9zdG9wLAogCS5zZXRfcmV0cnlfbGltaXQJPSBiNDNfb3Bfc2V0X3JldHJ5X2xpbWl0LAogCS5zZXRfdGltCQk9IGI0M19vcF9iZWFjb25fc2V0X3RpbSwKLQkuYmVhY29uX3VwZGF0ZQkJPSBiNDNfb3BfaWJzc19iZWFjb25fdXBkYXRlLAogCS5zdGFfbm90aWZ5CQk9IGI0M19vcF9zdGFfbm90aWZ5LAogfTsKIApAQCAtNDUzOCwxMCArNDY0NiwxMCBAQAogCiAJLyogZmlsbCBodyBpbmZvICovCiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfR0VOX0JFQUNPTl9URU1QTEFURSB8Ci0JCSAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOwotCWh3LT5tYXhfc2lnbmFsID0gMTAwOwotCWh3LT5tYXhfcnNzaSA9IC0xMTA7Ci0JaHctPm1heF9ub2lzZSA9IC0xMTA7CisJCSAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk07CisKIAlody0+cXVldWVzID0gYjQzX21vZHBhcmFtX3FvcyA/IDQgOiAxOwogCVNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYtPmRldik7CiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoc3Byb20tPmV0MW1hYykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaAppbmRleCA1MjMwYWVjLi5mODcxYTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKQEAgLTk1LDkgKzk1LDEzIEBACiB2b2lkIGI0M190c2Zfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1NjQgdHNmKTsKIAogdTMyIGI0M19zaG1fcmVhZDMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpOwordTMyIF9fYjQzX3NobV9yZWFkMzIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCk7CiB1MTYgYjQzX3NobV9yZWFkMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCk7Cit1MTYgX19iNDNfc2htX3JlYWQxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0KTsKIHZvaWQgYjQzX3NobV93cml0ZTMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSk7Cit2b2lkIF9fYjQzX3NobV93cml0ZTMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSk7CiB2b2lkIGI0M19zaG1fd3JpdGUxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpOwordm9pZCBfX2I0M19zaG1fd3JpdGUxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpOwogCiB1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHZvaWQgYjQzX2hmX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0IHZhbHVlKTsKQEAgLTExNCw0ICsxMTgsNyBAQAogI2RlZmluZSBCNDNfUFNfQVNMRUVQCSgxIDw8IDMpCS8qIEZvcmNlIGRldmljZSBhc2xlZXAgKi8KIHZvaWQgYjQzX3Bvd2VyX3NhdmluZ19jdGxfYml0cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHVuc2lnbmVkIGludCBwc19mbGFncyk7CiAKK3ZvaWQgYjQzX21hY19zdXNwZW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGI0M19tYWNfZW5hYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CisKICNlbmRpZiAvKiBCNDNfTUFJTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL25waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9ucGh5LmMKaW5kZXggODY5NWViMi4uNjQ0ZWVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL25waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbnBoeS5jCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5jbHVkZSAibnBoeS5oIgogI2luY2x1ZGUgInRhYmxlc19ucGh5LmgiCiAKLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCiAKIHZvaWQgYjQzX25waHlfc2V0X3J4YW50ZW5uYShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGludCBhbnRlbm5hKQogey8vVE9ETwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeS5jCmluZGV4IGRlMDI0ZGMuLjMwNWQ0Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KIAogI2luY2x1ZGUgImI0My5oIgogI2luY2x1ZGUgInBoeS5oIgpAQCAtODMsMjUgKzg0LDkgQEAKIAk3MiwgODQsCiB9OwogCisjZGVmaW5lIGJpdHJldjQodG1wKSAoYml0cmV2OCh0bXApID4+IDQpCiBzdGF0aWMgdm9pZCBiNDNfcGh5X2luaXRnKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiAKLS8qIFJldmVyc2UgdGhlIGJpdHMgb2YgYSA0Yml0IHZhbHVlLgotICogRXhhbXBsZTogIDExMDEgaXMgZmxpcHBlZCAxMDExCi0gKi8KLXN0YXRpYyB1MTYgZmxpcF80Yml0KHUxNiB2YWx1ZSkKLXsKLQl1MTYgZmxpcHBlZCA9IDB4MDAwMDsKLQotCUI0M19XQVJOX09OKHZhbHVlICYgfjB4MDAwRik7Ci0KLQlmbGlwcGVkIHw9ICh2YWx1ZSAmIDB4MDAwMSkgPDwgMzsKLQlmbGlwcGVkIHw9ICh2YWx1ZSAmIDB4MDAwMikgPDwgMTsKLQlmbGlwcGVkIHw9ICh2YWx1ZSAmIDB4MDAwNCkgPj4gMTsKLQlmbGlwcGVkIHw9ICh2YWx1ZSAmIDB4MDAwOCkgPj4gMzsKLQotCXJldHVybiBmbGlwcGVkOwotfQotCiBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9yZmF0dF9saXN0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJCQlzdHJ1Y3QgYjQzX3JmYXR0X2xpc3QgKmxpc3QpCiB7CkBAIC0xNDUsOCArMTMwLDcgQEAKIAkJey5hdHQgPSA5LC53aXRoX3BhZG1peCA9IDEsfSwKIAl9OwogCi0JaWYgKChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQSAmJiBwaHktPnJldiA8IDUpIHx8Ci0JICAgIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRyAmJiBwaHktPnJldiA8IDYpKSB7CisJaWYgKCFiNDNfaGFzX2hhcmR3YXJlX3BjdGwocGh5KSkgewogCQkvKiBTb2Z0d2FyZSBwY3RsICovCiAJCWxpc3QtPmxpc3QgPSByZmF0dF8wOwogCQlsaXN0LT5sZW4gPSBBUlJBWV9TSVpFKHJmYXR0XzApOwpAQCAtMTU4LDcgKzE0Miw3IEBACiAJCS8qIEhhcmR3YXJlIHBjdGwgKi8KIAkJbGlzdC0+bGlzdCA9IHJmYXR0XzE7CiAJCWxpc3QtPmxlbiA9IEFSUkFZX1NJWkUocmZhdHRfMSk7Ci0JCWxpc3QtPm1pbl92YWwgPSAyOworCQlsaXN0LT5taW5fdmFsID0gMDsKIAkJbGlzdC0+bWF4X3ZhbCA9IDE0OwogCQlyZXR1cm47CiAJfQpAQCAtMzQ2LDYgKzMzMCw3IEBACiAJLyogU2F2ZSB0aGUgdmFsdWVzIGZvciBsYXRlciAqLwogCXBoeS0+dHhfY29udHJvbCA9IHR4X2NvbnRyb2w7CiAJbWVtY3B5KCZwaHktPnJmYXR0LCByZmF0dCwgc2l6ZW9mKCpyZmF0dCkpOworCXBoeS0+cmZhdHQud2l0aF9wYWRtaXggPSAhISh0eF9jb250cm9sICYgQjQzX1RYQ1RMX1RYTUlYKTsKIAltZW1jcHkoJnBoeS0+YmJhdHQsIGJiYXR0LCBzaXplb2YoKmJiYXR0KSk7CiAKIAlpZiAoYjQzX2RlYnVnKGRldiwgQjQzX0RCR19YTUlUUE9XRVIpKSB7CkBAIC01NTksMTEgKzU0NCw2IEBACiAJdTE2IHRtcDsKIAl1OCByZiwgYmI7CiAKLQlpZiAoIWxvLT5sb19tZWFzdXJlZCkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgzRkYsIDApOwotCQlyZXR1cm47Ci0JfQotCiAJZm9yIChyZiA9IDA7IHJmIDwgbG8tPnJmYXR0X2xpc3QubGVuOyByZisrKSB7CiAJCWZvciAoYmIgPSAwOyBiYiA8IGxvLT5iYmF0dF9saXN0LmxlbjsgYmIrKykgewogCQkJaWYgKG5yX3dyaXR0ZW4gPj0gMHg0MCkKQEAgLTU4MSw0MiArNTYxLDYgQEAKIAl9CiB9CiAKLS8qIEdQSFlfRENfTG9va3VwX1RhYmxlICovCi12b2lkIGI0M19ncGh5X2RjX2x0X2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7Ci0Jc3RydWN0IGI0M190eHBvd2VyX2xvX2NvbnRyb2wgKmxvID0gcGh5LT5sb19jb250cm9sOwotCXN0cnVjdCBiNDNfbG9jdGwgKmxvY3RsMDsKLQlzdHJ1Y3QgYjQzX2xvY3RsICpsb2N0bDE7Ci0JaW50IGk7Ci0JaW50IHJmX29mZnNldCwgYmJfb2Zmc2V0OwotCXUxNiB0bXA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbG8tPnJmYXR0X2xpc3QubGVuICsgbG8tPmJiYXR0X2xpc3QubGVuOyBpICs9IDIpIHsKLQkJcmZfb2Zmc2V0ID0gaSAvIGxvLT5yZmF0dF9saXN0LmxlbjsKLQkJYmJfb2Zmc2V0ID0gaSAlIGxvLT5yZmF0dF9saXN0LmxlbjsKLQotCQlsb2N0bDAgPSBiNDNfZ2V0X2xvX2dfY3RsKGRldiwgJmxvLT5yZmF0dF9saXN0Lmxpc3RbcmZfb2Zmc2V0XSwKLQkJCQkJICAmbG8tPmJiYXR0X2xpc3QubGlzdFtiYl9vZmZzZXRdKTsKLQkJaWYgKGkgKyAxIDwgbG8tPnJmYXR0X2xpc3QubGVuICogbG8tPmJiYXR0X2xpc3QubGVuKSB7Ci0JCQlyZl9vZmZzZXQgPSAoaSArIDEpIC8gbG8tPnJmYXR0X2xpc3QubGVuOwotCQkJYmJfb2Zmc2V0ID0gKGkgKyAxKSAlIGxvLT5yZmF0dF9saXN0LmxlbjsKLQotCQkJbG9jdGwxID0KLQkJCSAgICBiNDNfZ2V0X2xvX2dfY3RsKGRldiwKLQkJCQkJICAgICAmbG8tPnJmYXR0X2xpc3QubGlzdFtyZl9vZmZzZXRdLAotCQkJCQkgICAgICZsby0+YmJhdHRfbGlzdC5saXN0W2JiX29mZnNldF0pOwotCQl9IGVsc2UKLQkJCWxvY3RsMSA9IGxvY3RsMDsKLQotCQl0bXAgPSAoKHUxNikgbG9jdGwwLT5xICYgMHhGKTsKLQkJdG1wIHw9ICgodTE2KSBsb2N0bDAtPmkgJiAweEYpIDw8IDQ7Ci0JCXRtcCB8PSAoKHUxNikgbG9jdGwxLT5xICYgMHhGKSA8PCA4OwotCQl0bXAgfD0gKCh1MTYpIGxvY3RsMS0+aSAmIDB4RikgPDwgMTI7CS8vRklYTUU/Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDNBMCArIChpIC8gMiksIHRtcCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBoYXJkd2FyZV9wY3RsX2luaXRfYXBoeShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJLy9UT0RPCkBAIC02NDMsNyArNTg3LDcgQEAKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpCiAJCSAgICAgICYgMHhGRkJGKTsKIAotCWI0M19ncGh5X2RjX2x0X2luaXQoZGV2KTsKKwliNDNfZ3BoeV9kY19sdF9pbml0KGRldiwgMSk7CiB9CiAKIC8qIEhhcmR3YXJlUG93ZXJDb250cm9sIGluaXQgZm9yIEEgYW5kIEcgUEhZICovCkBAIC05MzEsMTA5ICs4NzUsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYjQzX3BoeV9pbml0YjIoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7Ci0JdTE2IG9mZnNldCwgdmFsOwotCi0JYjQzX3dyaXRlMTYoZGV2LCAweDAzRUMsIDB4M0YyMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyMCwgMHgzMDFDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDI2LCAweDAwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzAsIDB4MDBDNik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDA4OCwgMHgzRTAwKTsKLQl2YWwgPSAweDNDM0Q7Ci0JZm9yIChvZmZzZXQgPSAweDAwODk7IG9mZnNldCA8IDB4MDBBNzsgb2Zmc2V0KyspIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIG9mZnNldCwgdmFsKTsKLQkJdmFsIC09IDB4MDIwMjsKLQl9Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDNFNCwgMHgzMDAwKTsKLQliNDNfcmFkaW9fc2VsZWN0Y2hhbm5lbChkZXYsIHBoeS0+Y2hhbm5lbCwgMCk7Ci0JaWYgKHBoeS0+cmFkaW9fdmVyICE9IDB4MjA1MCkgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3NSwgMHgwMDgwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzksIDB4MDA4MSk7Ci0JfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDUwLCAweDAwMjApOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDUwLCAweDAwMjMpOwotCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTApIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNTAsIDB4MDAyMCk7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDVBLCAweDAwNzApOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QiwgMHgwMDdCKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNUMsIDB4MDBCMCk7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLCAweDAwMEYpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM4LCAweDA2NzcpOwotCQliNDNfcmFkaW9faW5pdDIwNTAoZGV2KTsKLQl9Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxNCwgMHgwMDgwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDMyLCAweDAwQ0EpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzIsIDB4MDBDQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNSwgMHgwN0MyKTsKLQliNDNfbG9fYl9tZWFzdXJlKGRldik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyNiwgMHhDQzAwKTsKLQlpZiAocGh5LT5yYWRpb192ZXIgIT0gMHgyMDUwKQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDI2LCAweENFMDApOwotCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQsIDB4MTAwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyQSwgMHg4OEEzKTsKLQlpZiAocGh5LT5yYWRpb192ZXIgIT0gMHgyMDUwKQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLCAweDg4QzIpOwotCWI0M19zZXRfdHhwb3dlcl9nKGRldiwgJnBoeS0+YmJhdHQsICZwaHktPnJmYXR0LCBwaHktPnR4X2NvbnRyb2wpOwotCWI0M19waHlfaW5pdF9wY3RsKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIGI0M19waHlfaW5pdGI0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLQlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwotCXUxNiBvZmZzZXQsIHZhbDsKLQotCWI0M193cml0ZTE2KGRldiwgMHgwM0VDLCAweDNGMjIpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMjAsIDB4MzAxQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyNiwgMHgwMDAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDMwLCAweDAwQzYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwODgsIDB4M0UwMCk7Ci0JdmFsID0gMHgzQzNEOwotCWZvciAob2Zmc2V0ID0gMHgwMDg5OyBvZmZzZXQgPCAweDAwQTc7IG9mZnNldCsrKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBvZmZzZXQsIHZhbCk7Ci0JCXZhbCAtPSAweDAyMDI7Ci0JfQotCWI0M19waHlfd3JpdGUoZGV2LCAweDAzRTQsIDB4MzAwMCk7Ci0JYjQzX3JhZGlvX3NlbGVjdGNoYW5uZWwoZGV2LCBwaHktPmNoYW5uZWwsIDApOwotCWlmIChwaHktPnJhZGlvX3ZlciAhPSAweDIwNTApIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzUsIDB4MDA4MCk7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDc5LCAweDAwODEpOwotCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1MCwgMHgwMDIwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1MCwgMHgwMDIzKTsKLQlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKSB7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDUwLCAweDAwMjApOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QSwgMHgwMDcwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNUIsIDB4MDA3Qik7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDVDLCAweDAwQjApOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgMHgwMDBGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzOCwgMHgwNjc3KTsKLQkJYjQzX3JhZGlvX2luaXQyMDUwKGRldik7Ci0JfQotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTQsIDB4MDA4MCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzMiwgMHgwMENBKTsKLQlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDMyLCAweDAwRTApOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsIDB4MDdDMik7Ci0KLQliNDNfbG9fYl9tZWFzdXJlKGRldik7Ci0KLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDI2LCAweENDMDApOwotCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTApCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMjYsIDB4Q0UwMCk7Ci0JYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19DSEFOTkVMX0VYVCwgMHgxMTAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLCAweDg4QTMpOwotCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTApCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkEsIDB4ODhDMik7Ci0JYjQzX3NldF90eHBvd2VyX2coZGV2LCAmcGh5LT5iYmF0dCwgJnBoeS0+cmZhdHQsIHBoeS0+dHhfY29udHJvbCk7Ci0JaWYgKGRldi0+ZGV2LT5idXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX1JTU0kpIHsKLQkJYjQzX2NhbGNfbnJzc2lfc2xvcGUoZGV2KTsKLQkJYjQzX2NhbGNfbnJzc2lfdGhyZXNob2xkKGRldik7Ci0JfQotCWI0M19waHlfaW5pdF9wY3RsKGRldik7Ci19Ci0KIHN0YXRpYyB2b2lkIGI0M19waHlfaW5pdGI1KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKQEAgLTEyNTksMTkgKzExMDAsOSBAQAogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDAyLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDAyKSAmIDB4RkZDMCkKIAkJCSAgICAgIHwgMHgwMDA0KTsKIAl9Ci0JaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9CKSB7Ci0JCWI0M193cml0ZTE2KGRldiwgMHgwM0U2LCAweDgxNDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE2LCAweDA0MTApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE3LCAweDA4MjApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYyLCAweDAwMDcpOwotCQliNDNfcmFkaW9faW5pdDIwNTAoZGV2KTsKLQkJYjQzX2xvX2dfbWVhc3VyZShkZXYpOwotCQlpZiAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUlNTSSkgewotCQkJYjQzX2NhbGNfbnJzc2lfc2xvcGUoZGV2KTsKLQkJCWI0M19jYWxjX25yc3NpX3RocmVzaG9sZChkZXYpOwotCQl9Ci0JCWI0M19waHlfaW5pdF9wY3RsKGRldik7Ci0JfSBlbHNlIGlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRykKKwlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IpCisJCUI0M19XQVJOX09OKDEpOworCWVsc2UgaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9HKQogCQliNDNfd3JpdGUxNihkZXYsIDB4MDNFNiwgMHgwKTsKIH0KIApAQCAtMTUzNCwzNCArMTM2NSwzMSBAQAogCQllbHNlCiAJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3OCwgcGh5LT5pbml0dmFsKTsKIAl9Ci0JaWYgKHBoeS0+bG9fY29udHJvbC0+dHhfYmlhcyA9PSAweEZGKSB7Ci0JCWI0M19sb19nX21lYXN1cmUoZGV2KTsKKwliNDNfbG9fZ19pbml0KGRldik7CisJaWYgKGhhc190eF9tYWduaWZpY2F0aW9uKHBoeSkpIHsKKwkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLAorCQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUyKSAmIDB4RkYwMCkKKwkJCQkgIHwgcGh5LT5sb19jb250cm9sLT50eF9iaWFzIHwgcGh5LT4KKwkJCQkgIGxvX2NvbnRyb2wtPnR4X21hZ24pOwogCX0gZWxzZSB7Ci0JCWlmIChoYXNfdHhfbWFnbmlmaWNhdGlvbihwaHkpKSB7Ci0JCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsCi0JCQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUyKSAmIDB4RkYwMCkKLQkJCQkJICB8IHBoeS0+bG9fY29udHJvbC0+dHhfYmlhcyB8IHBoeS0+Ci0JCQkJCSAgbG9fY29udHJvbC0+dHhfbWFnbik7Ci0JCX0gZWxzZSB7Ci0JCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsCi0JCQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUyKSAmIDB4RkZGMCkKLQkJCQkJICB8IHBoeS0+bG9fY29udHJvbC0+dHhfYmlhcyk7Ci0JCX0KLQkJaWYgKHBoeS0+cmV2ID49IDYpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDM2KSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgzNikpCi0JCQkJICAgICAgICYgMHgwRkZGKSB8IChwaHktPmxvX2NvbnRyb2wtPgotCQkJCQkJICAgIHR4X2JpYXMgPDwgMTIpKTsKLQkJfQotCQlpZiAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUEFDVFJMKQotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkUpLCAweDgwNzUpOwotCQllbHNlCi0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyRSksIDB4ODA3Rik7Ci0JCWlmIChwaHktPnJldiA8IDIpCi0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyRiksIDB4MTAxKTsKLQkJZWxzZQotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkYpLCAweDIwMik7CisJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwKKwkJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikgJiAweEZGRjApCisJCQkJICB8IHBoeS0+bG9fY29udHJvbC0+dHhfYmlhcyk7CiAJfQorCWlmIChwaHktPnJldiA+PSA2KSB7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDM2KSwKKwkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDM2KSkKKwkJCSAgICAgICAmIDB4MEZGRikgfCAocGh5LT5sb19jb250cm9sLT4KKwkJCQkJICAgIHR4X2JpYXMgPDwgMTIpKTsKKwl9CisJaWYgKGRldi0+ZGV2LT5idXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX1BBQ1RSTCkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkUpLCAweDgwNzUpOworCWVsc2UKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkUpLCAweDgwN0YpOworCWlmIChwaHktPnJldiA8IDIpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDJGKSwgMHgxMDEpOworCWVsc2UKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkYpLCAweDIwMik7CiAJaWYgKHBoeS0+Z21vZGUgfHwgcGh5LT5yZXYgPj0gMikgewogCQliNDNfbG9fZ19hZGp1c3QoZGV2KTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTE9fTUFTSywgMHg4MDc4KTsKQEAgLTE1NzIsNyArMTQwMCw3IEBACiAJCSAqIHRoZSB2YWx1ZSAweDdGRkZGRkZGIGhlcmUuIEkgdGhpbmsgdGhhdCBpcyBzb21lIHdlaXJkCiAJCSAqIGNvbXBpbGVyIG9wdGltaXphdGlvbiBpbiB0aGUgb3JpZ2luYWwgZHJpdmVyLgogCQkgKiBFc3NlbnRpYWxseSwgd2hhdCB3ZSBkbyBoZXJlIGlzIHJlc2V0dGluZyBhbGwgTlJTU0kgTFQKLQkJICogZW50cmllcyB0byAtMzIgKHNlZSB0aGUgbGltaXRfdmFsdWUoKSBpbiBucnNzaV9od191cGRhdGUoKSkKKwkJICogZW50cmllcyB0byAtMzIgKHNlZSB0aGUgY2xhbXBfdmFsKCkgaW4gbnJzc2lfaHdfdXBkYXRlKCkpCiAJCSAqLwogCQliNDNfbnJzc2lfaHdfdXBkYXRlKGRldiwgMHhGRkZGKTsJLy9GSVhNRT8KIAkJYjQzX2NhbGNfbnJzc2lfdGhyZXNob2xkKGRldik7CkBAIC0xNjM0LDEzICsxNDYyLDEzIEBACiAJc3dpdGNoIChwaHktPnR5cGUpIHsKIAljYXNlIEI0M19QSFlUWVBFX0E6CiAJCXRtcCArPSAweDgwOwotCQl0bXAgPSBsaW1pdF92YWx1ZSh0bXAsIDB4MDAsIDB4RkYpOworCQl0bXAgPSBjbGFtcF92YWwodG1wLCAweDAwLCAweEZGKTsKIAkJZGJtID0gcGh5LT50c3NpMmRibVt0bXBdOwogCQkvL1RPRE86IFRoZXJlJ3MgYSBGSVhNRSBvbiB0aGUgc3BlY3MKIAkJYnJlYWs7CiAJY2FzZSBCNDNfUEhZVFlQRV9COgogCWNhc2UgQjQzX1BIWVRZUEVfRzoKLQkJdG1wID0gbGltaXRfdmFsdWUodG1wLCAweDAwLCAweDNGKTsKKwkJdG1wID0gY2xhbXBfdmFsKHRtcCwgMHgwMCwgMHgzRik7CiAJCWRibSA9IHBoeS0+dHNzaTJkYm1bdG1wXTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE2OTksOCArMTUyNyw4IEBACiAJCWJyZWFrOwogCX0KIAotCSpfcmZhdHQgPSBsaW1pdF92YWx1ZShyZmF0dCwgcmZfbWluLCByZl9tYXgpOwotCSpfYmJhdHQgPSBsaW1pdF92YWx1ZShiYmF0dCwgYmJfbWluLCBiYl9tYXgpOworCSpfcmZhdHQgPSBjbGFtcF92YWwocmZhdHQsIHJmX21pbiwgcmZfbWF4KTsKKwkqX2JiYXR0ID0gY2xhbXBfdmFsKGJiYXR0LCBiYl9taW4sIGJiX21heCk7CiB9CiAKIC8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9SZWNhbGN1bGF0ZVRyYW5zbWlzc2lvblBvd2VyICovCkBAIC0xNzk1LDcgKzE2MjMsNyBAQAogCQkJLyogR2V0IGRlc2lyZWQgcG93ZXIgKGluIFE1LjIpICovCiAJCQlkZXNpcmVkX3B3ciA9IElOVF9UT19RNTIocGh5LT5wb3dlcl9sZXZlbCk7CiAJCQkvKiBBbmQgbGltaXQgaXQuIG1heF9wd3IgYWxyZWFkeSBpcyBRNS4yICovCi0JCQlkZXNpcmVkX3B3ciA9IGxpbWl0X3ZhbHVlKGRlc2lyZWRfcHdyLCAwLCBtYXhfcHdyKTsKKwkJCWRlc2lyZWRfcHdyID0gY2xhbXBfdmFsKGRlc2lyZWRfcHdyLCAwLCBtYXhfcHdyKTsKIAkJCWlmIChiNDNfZGVidWcoZGV2LCBCNDNfREJHX1hNSVRQT1dFUikpIHsKIAkJCQliNDNkYmcoZGV2LT53bCwKIAkJCQkgICAgICAgIkN1cnJlbnQgVFggcG93ZXIgb3V0cHV0OiAiIFE1Ml9GTVQKQEAgLTE4MjEsMTAgKzE2NDksOCBAQAogCQkJYmJhdHRfZGVsdGEgLT0gNCAqIHJmYXR0X2RlbHRhOwogCiAJCQkvKiBTbyBkbyB3ZSBmaW5hbGx5IG5lZWQgdG8gYWRqdXN0IHNvbWV0aGluZz8gKi8KLQkJCWlmICgocmZhdHRfZGVsdGEgPT0gMCkgJiYgKGJiYXR0X2RlbHRhID09IDApKSB7Ci0JCQkJYjQzX2xvX2dfY3RsX21hcmtfY3VyX3VzZWQoZGV2KTsKKwkJCWlmICgocmZhdHRfZGVsdGEgPT0gMCkgJiYgKGJiYXR0X2RlbHRhID09IDApKQogCQkJCXJldHVybjsKLQkJCX0KIAogCQkJLyogQ2FsY3VsYXRlIHRoZSBuZXcgYXR0ZW51YXRpb24gdmFsdWVzLiAqLwogCQkJYmJhdHQgPSBwaHktPmJiYXR0LmF0dDsKQEAgLTE4NzAsNyArMTY5Niw2IEBACiAJCQliNDNfcmFkaW9fbG9jayhkZXYpOwogCQkJYjQzX3NldF90eHBvd2VyX2coZGV2LCAmcGh5LT5iYmF0dCwgJnBoeS0+cmZhdHQsCiAJCQkJCSAgcGh5LT50eF9jb250cm9sKTsKLQkJCWI0M19sb19nX2N0bF9tYXJrX2N1cl91c2VkKGRldik7CiAJCQliNDNfcmFkaW9fdW5sb2NrKGRldik7CiAJCQliNDNfcGh5X3VubG9jayhkZXYpOwogCQkJYnJlYWs7CkBAIC0xOTA4LDcgKzE3MzMsNyBAQAogCQlmID0gcTsKIAkJaSsrOwogCX0gd2hpbGUgKGRlbHRhID49IDIpOwotCWVudHJ5W2luZGV4XSA9IGxpbWl0X3ZhbHVlKGI0M190c3NpMmRibV9hZChtMSAqIGYsIDgxOTIpLCAtMTI3LCAxMjgpOworCWVudHJ5W2luZGV4XSA9IGNsYW1wX3ZhbChiNDNfdHNzaTJkYm1fYWQobTEgKiBmLCA4MTkyKSwgLTEyNywgMTI4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAwNywyNCArMTgzMiw2IEBACiAJCWVsc2UKIAkJCXVuc3VwcG9ydGVkID0gMTsKIAkJYnJlYWs7Ci0JY2FzZSBCNDNfUEhZVFlQRV9COgotCQlzd2l0Y2ggKHBoeS0+cmV2KSB7Ci0JCWNhc2UgMjoKLQkJCWI0M19waHlfaW5pdGIyKGRldik7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJYjQzX3BoeV9pbml0YjQoZGV2KTsKLQkJCWJyZWFrOwotCQljYXNlIDU6Ci0JCQliNDNfcGh5X2luaXRiNShkZXYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWI0M19waHlfaW5pdGI2KGRldik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXVuc3VwcG9ydGVkID0gMTsKLQkJfQotCQlicmVhazsKIAljYXNlIEI0M19QSFlUWVBFX0c6CiAJCWI0M19waHlfaW5pdGcoZGV2KTsKIAkJYnJlYWs7CkBAIC0yNDUyLDcgKzIyNTksNyBAQAogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAJCXRtcCA9IGI0M19ucnNzaV9od19yZWFkKGRldiwgaSk7CiAJCXRtcCAtPSB2YWw7Ci0JCXRtcCA9IGxpbWl0X3ZhbHVlKHRtcCwgLTMyLCAzMSk7CisJCXRtcCA9IGNsYW1wX3ZhbCh0bXAsIC0zMiwgMzEpOwogCQliNDNfbnJzc2lfaHdfd3JpdGUoZGV2LCBpLCB0bXApOwogCX0KIH0KQEAgLTI0NjksNyArMjI3Niw3IEBACiAJCXRtcCA9IChpIC0gZGVsdGEpICogcGh5LT5ucnNzaXNsb3BlOwogCQl0bXAgLz0gMHgxMDAwMDsKIAkJdG1wICs9IDB4M0E7Ci0JCXRtcCA9IGxpbWl0X3ZhbHVlKHRtcCwgMCwgMHgzRik7CisJCXRtcCA9IGNsYW1wX3ZhbCh0bXAsIDAsIDB4M0YpOwogCQlwaHktPm5yc3NpX2x0W2ldID0gdG1wOwogCX0KIH0KQEAgLTI5MDYsNyArMjcxMyw3IEBACiAJCQl9IGVsc2UKIAkJCQl0aHJlc2hvbGQgPSBwaHktPm5yc3NpWzFdIC0gNTsKIAotCQkJdGhyZXNob2xkID0gbGltaXRfdmFsdWUodGhyZXNob2xkLCAwLCAweDNFKTsKKwkJCXRocmVzaG9sZCA9IGNsYW1wX3ZhbCh0aHJlc2hvbGQsIDAsIDB4M0UpOwogCQkJYjQzX3BoeV9yZWFkKGRldiwgMHgwMDIwKTsJLyogZHVtbXkgcmVhZCAqLwogCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyMCwKIAkJCQkgICAgICAoKCh1MTYpIHRocmVzaG9sZCkgPDwgOCkgfCAweDAwMUMpOwpAQCAtMjk1Nyw3ICsyNzY0LDcgQEAKIAkJCWVsc2UKIAkJCQlhICs9IDMyOwogCQkJYSA9IGEgPj4gNjsKLQkJCWEgPSBsaW1pdF92YWx1ZShhLCAtMzEsIDMxKTsKKwkJCWEgPSBjbGFtcF92YWwoYSwgLTMxLCAzMSk7CiAKIAkJCWIgPSBiICogKHBoeS0+bnJzc2lbMV0gLSBwaHktPm5yc3NpWzBdKTsKIAkJCWIgKz0gKHBoeS0+bnJzc2lbMF0gPDwgNik7CkBAIC0yOTY2LDcgKzI3NzMsNyBAQAogCQkJZWxzZQogCQkJCWIgKz0gMzI7CiAJCQliID0gYiA+PiA2OwotCQkJYiA9IGxpbWl0X3ZhbHVlKGIsIC0zMSwgMzEpOworCQkJYiA9IGNsYW1wX3ZhbChiLCAtMzEsIDMxKTsKIAogCQkJdG1wX3UxNiA9IGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkgJiAweEYwMDA7CiAJCQl0bXBfdTE2IHw9ICgodTMyKSBiICYgMHgwMDAwMDAzRik7CkBAIC0zMDY5LDEzICsyODc2LDEzIEBACiAJCX0KIAkJcmFkaW9fc3RhY2tzYXZlKDB4MDA3OCk7CiAJCXRtcCA9IChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDc4KSAmIDB4MDAxRSk7Ci0JCWZsaXBwZWQgPSBmbGlwXzRiaXQodG1wKTsKKwkJQjQzX1dBUk5fT04odG1wID4gMTUpOworCQlmbGlwcGVkID0gYml0cmV2NCh0bXApOwogCQlpZiAoZmxpcHBlZCA8IDEwICYmIGZsaXBwZWQgPj0gOCkKIAkJCWZsaXBwZWQgPSA3OwogCQllbHNlIGlmIChmbGlwcGVkID49IDEwKQogCQkJZmxpcHBlZCAtPSAzOwotCQlmbGlwcGVkID0gZmxpcF80Yml0KGZsaXBwZWQpOwotCQlmbGlwcGVkID0gKGZsaXBwZWQgPDwgMSkgfCAweDAwMjA7CisJCWZsaXBwZWQgPSAoYml0cmV2NChmbGlwcGVkKSA8PCAxKSB8IDB4MDAyMDsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzgsIGZsaXBwZWQpOwogCiAJCWI0M19jYWxjX25yc3NpX3RocmVzaG9sZChkZXYpOwpAQCAtMzcwOCw3ICszNTE1LDcgQEAKIAl0bXAxID4+PSA5OwogCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJcmFkaW83OCA9ICgoZmxpcF80Yml0KGkpIDw8IDEpIHwgMHgyMCk7CisJCXJhZGlvNzggPSAoYml0cmV2NChpKSA8PCAxKSB8IDB4MDAyMDsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDc4LCByYWRpbzc4KTsKIAkJdWRlbGF5KDEwKTsKIAkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHkuaAppbmRleCA2ZDE2NWQ4Li40YWFiMTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeS5oCkBAIC0yMjUsNyArMjI1LDYgQEAKIHZvaWQgYjQzX3NldF9yeF9hbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpOwogCiB2b2lkIGI0M19waHlfeG1pdHBvd2VyKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Ci12b2lkIGI0M19ncGh5X2RjX2x0X2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAogLyogUmV0dXJucyB0aGUgYm9vbGVhbiB3aGV0aGVyIHRoZSBib2FyZCBoYXMgSGFyZHdhcmVQb3dlckNvbnRyb2wgKi8KIGJvb2wgYjQzX2hhc19oYXJkd2FyZV9wY3RsKHN0cnVjdCBiNDNfcGh5ICpwaHkpOwpAQCAtMjUyLDYgKzI1MSwxNCBAQAogCXU4IG1heF92YWw7CiB9OwogCisvKiBSZXR1cm5zIHRydWUsIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lLiAqLworc3RhdGljIGlubGluZSBib29sIGI0M19jb21wYXJlX3JmYXR0KGNvbnN0IHN0cnVjdCBiNDNfcmZhdHQgKmEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpiKQoreworCXJldHVybiAoKGEtPmF0dCA9PSBiLT5hdHQpICYmCisJCShhLT53aXRoX3BhZG1peCA9PSBiLT53aXRoX3BhZG1peCkpOworfQorCiAvKiBCYXNlYmFuZCBBdHRlbnVhdGlvbiAqLwogc3RydWN0IGI0M19iYmF0dCB7CiAJdTggYXR0OwkJCS8qIEF0dGVudWF0aW9uIHZhbHVlICovCkBAIC0yNjUsNiArMjcyLDEzIEBACiAJdTggbWF4X3ZhbDsKIH07CiAKKy8qIFJldHVybnMgdHJ1ZSwgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWUuICovCitzdGF0aWMgaW5saW5lIGJvb2wgYjQzX2NvbXBhcmVfYmJhdHQoY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmIpCit7CisJcmV0dXJuIChhLT5hdHQgPT0gYi0+YXR0KTsKK30KKwogLyogdHhfY29udHJvbCBiaXRzLiAqLwogI2RlZmluZSBCNDNfVFhDVExfUEEzREIJCTB4NDAJLyogUEEgR2FpbiAzZEIgKi8KICNkZWZpbmUgQjQzX1RYQ1RMX1BBMkRCCQkweDIwCS8qIFBBIEdhaW4gMmRCICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKaW5kZXggZmNhY2FmYi4uNDAxNTkxMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKQEAgLTQ0NiwyOSArNDQ2LDI3IEBACiB9CiAKIHN0YXRpYyBpbnQgcGlvX3R4X2ZyYW1lKHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnEsCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwYWNrOwogCXN0cnVjdCBiNDNfdHhoZHIgdHhoZHI7CiAJdTE2IGNvb2tpZTsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBoZHJsZW47CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCiAJQjQzX1dBUk5fT04obGlzdF9lbXB0eSgmcS0+cGFja2V0c19saXN0KSk7CiAJcGFjayA9IGxpc3RfZW50cnkocS0+cGFja2V0c19saXN0Lm5leHQsCiAJCQkgIHN0cnVjdCBiNDNfcGlvX3R4cGFja2V0LCBsaXN0KTsKLQltZW1zZXQoJnBhY2stPnR4c3RhdCwgMCwgc2l6ZW9mKHBhY2stPnR4c3RhdCkpOwotCW1lbWNweSgmcGFjay0+dHhzdGF0LmNvbnRyb2wsIGN0bCwgc2l6ZW9mKCpjdGwpKTsKIAogCWNvb2tpZSA9IGdlbmVyYXRlX2Nvb2tpZShxLCBwYWNrKTsKIAloZHJsZW4gPSBiNDNfdHhoZHJfc2l6ZShxLT5kZXYpOwogCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihxLT5kZXYsICh1OCAqKSZ0eGhkciwgc2tiLT5kYXRhLAotCQkJCSBza2ItPmxlbiwgY3RsLCBjb29raWUpOworCQkJCSBza2ItPmxlbiwgaW5mbywgY29va2llKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfU0VORF9BRlRFUl9EVElNKSB7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pIHsKIAkJLyogVGVsbCB0aGUgZmlybXdhcmUgYWJvdXQgdGhlIGNvb2tpZSBvZiB0aGUgbGFzdAogCQkgKiBtY2FzdCBmcmFtZSwgc28gaXQgY2FuIGNsZWFyIHRoZSBtb3JlLWRhdGEgYml0IGluIGl0LiAqLwogCQliNDNfc2htX3dyaXRlMTYocS0+ZGV2LCBCNDNfU0hNX1NIQVJFRCwKQEAgLTQ5MiwxNyArNDkwLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBiNDNfcGlvX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCitpbnQgYjQzX3Bpb190eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGhkcmxlbiwgdG90YWxfbGVuOwogCWludCBlcnIgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlpZiAoY3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9TRU5EX0FGVEVSX0RUSU0pIHsKKworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKSB7CiAJCS8qIFRoZSBtdWx0aWNhc3QgcXVldWUgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSBEVElNLiAqLwogCQlxID0gZGV2LT5waW8udHhfcXVldWVfbWNhc3Q7CiAJCS8qIFNldCB0aGUgZnJhbWUgTW9yZS1EYXRhIGJpdC4gVWNvZGUgd2lsbCBjbGVhciBpdApAQCAtNTEwLDcgKzUwOSw3IEBACiAJCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CiAJfSBlbHNlIHsKIAkJLyogRGVjaWRlIGJ5IHByaW9yaXR5IHdoZXJlIHRvIHB1dCB0aGlzIGZyYW1lLiAqLwotCQlxID0gc2VsZWN0X3F1ZXVlX2J5X3ByaW9yaXR5KGRldiwgY3RsLT5xdWV1ZSk7CisJCXEgPSBzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoZGV2LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKQEAgLTUzMyw3ICs1MzIsNyBAQAogCWlmICh0b3RhbF9sZW4gPiAocS0+YnVmZmVyX3NpemUgLSBxLT5idWZmZXJfdXNlZCkpIHsKIAkJLyogTm90IGVub3VnaCBtZW1vcnkgb24gdGhlIHF1ZXVlLiAqLwogCQllcnIgPSAtRUJVU1k7Ci0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldi0+d2wtPmh3LCBjdGwtPnF1ZXVlKTsKKwkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LT53bC0+aHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAkJcS0+c3RvcHBlZCA9IDE7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CkBAIC01NDEsOSArNTQwLDkgQEAKIAkvKiBBc3NpZ24gdGhlIHF1ZXVlIG51bWJlciB0byB0aGUgcmluZyAoaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUpCiAJICogc28gVFggc3RhdHVzIGhhbmRsaW5nIGNhbiB1c2UgaXQuIFRoZSBtYWM4MDIxMS1xdWV1ZSB0byBiNDMtcXVldWUKIAkgKiBtYXBwaW5nIGlzIHN0YXRpYywgc28gd2UgZG9uJ3QgbmVlZCB0byBzdG9yZSBpdCBwZXIgZnJhbWUuICovCi0JcS0+cXVldWVfcHJpbyA9IGN0bC0+cXVldWU7CisJcS0+cXVldWVfcHJpbyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCi0JZXJyID0gcGlvX3R4X2ZyYW1lKHEsIHNrYiwgY3RsKTsKKwllcnIgPSBwaW9fdHhfZnJhbWUocSwgc2tiKTsKIAlpZiAodW5saWtlbHkoZXJyID09IC1FTk9LRVkpKSB7CiAJCS8qIERyb3AgdGhpcyBwYWNrZXQsIGFzIHdlIGRvbid0IGhhdmUgdGhlIGVuY3J5cHRpb24ga2V5CiAJCSAqIGFueW1vcmUgYW5kIG11c3Qgbm90IHRyYW5zbWl0IGl0IHVuZW5jcnlwdGVkLiAqLwpAQCAtNTYxLDcgKzU2MCw3IEBACiAJaWYgKCgocS0+YnVmZmVyX3NpemUgLSBxLT5idWZmZXJfdXNlZCkgPCByb3VuZHVwKDIgKyAyICsgNiwgNCkpIHx8CiAJICAgIChxLT5mcmVlX3BhY2tldF9zbG90cyA9PSAwKSkgewogCQkvKiBUaGUgcXVldWUgaXMgZnVsbC4gKi8KLQkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LT53bC0+aHcsIGN0bC0+cXVldWUpOworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShkZXYtPndsLT5odywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCQlxLT5zdG9wcGVkID0gMTsKIAl9CiAKQEAgLTU3OCw2ICs1NzcsNyBAQAogCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnE7CiAJc3RydWN0IGI0M19waW9fdHhwYWNrZXQgKnBhY2sgPSBOVUxMOwogCXVuc2lnbmVkIGludCB0b3RhbF9sZW47CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCiAJcSA9IHBhcnNlX2Nvb2tpZShkZXYsIHN0YXR1cy0+Y29va2llLCAmcGFjayk7CiAJaWYgKHVubGlrZWx5KCFxKSkKQEAgLTU4NiwxNSArNTg2LDE3IEBACiAKIAlzcGluX2xvY2soJnEtPmxvY2spOyAvKiBJUlFzIGFyZSBhbHJlYWR5IGRpc2FibGVkLiAqLwogCi0JYjQzX2ZpbGxfdHhzdGF0dXNfcmVwb3J0KCYocGFjay0+dHhzdGF0KSwgc3RhdHVzKTsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwYWNrLT5za2IpOworCW1lbXNldCgmaW5mby0+c3RhdHVzLCAwLCBzaXplb2YoaW5mby0+c3RhdHVzKSk7CisKKwliNDNfZmlsbF90eHN0YXR1c19yZXBvcnQoaW5mbywgc3RhdHVzKTsKIAogCXRvdGFsX2xlbiA9IHBhY2stPnNrYi0+bGVuICsgYjQzX3R4aGRyX3NpemUoZGV2KTsKIAl0b3RhbF9sZW4gPSByb3VuZHVwKHRvdGFsX2xlbiwgNCk7CiAJcS0+YnVmZmVyX3VzZWQgLT0gdG90YWxfbGVuOwogCXEtPmZyZWVfcGFja2V0X3Nsb3RzICs9IDE7CiAKLQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoZGV2LT53bC0+aHcsIHBhY2stPnNrYiwKLQkJCQkgICAgJihwYWNrLT50eHN0YXQpKTsKKwlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoZGV2LT53bC0+aHcsIHBhY2stPnNrYik7CiAJcGFjay0+c2tiID0gTlVMTDsKIAlsaXN0X2FkZCgmcGFjay0+bGlzdCwgJnEtPnBhY2tldHNfbGlzdCk7CiAKQEAgLTYxMSwxOCArNjEzLDE2IEBACiB7CiAJY29uc3QgaW50IG5yX3F1ZXVlcyA9IGRldi0+d2wtPmh3LT5xdWV1ZXM7CiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzX2RhdGEgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9xdWV1ZXM7IGkrKykgewotCQlkYXRhID0gJihzdGF0cy0+ZGF0YVtpXSk7CiAJCXEgPSBzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoZGV2LCBpKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwotCQlkYXRhLT5sZW4gPSBCNDNfUElPX01BWF9OUl9UWFBBQ0tFVFMgLSBxLT5mcmVlX3BhY2tldF9zbG90czsKLQkJZGF0YS0+bGltaXQgPSBCNDNfUElPX01BWF9OUl9UWFBBQ0tFVFM7Ci0JCWRhdGEtPmNvdW50ID0gcS0+bnJfdHhfcGFja2V0czsKKwkJc3RhdHNbaV0ubGVuID0gQjQzX1BJT19NQVhfTlJfVFhQQUNLRVRTIC0gcS0+ZnJlZV9wYWNrZXRfc2xvdHM7CisJCXN0YXRzW2ldLmxpbWl0ID0gQjQzX1BJT19NQVhfTlJfVFhQQUNLRVRTOworCQlzdGF0c1tpXS5jb3VudCA9IHEtPm5yX3R4X3BhY2tldHM7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmgKaW5kZXggZTJlYzY3Ni4uNmMxNzRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaApAQCAtNjIsOCArNjIsNiBAQAogCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnF1ZXVlOwogCS8qIFRoZSBUWCBkYXRhIHBhY2tldC4gKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCS8qIFRoZSBzdGF0dXMgbWV0YSBkYXRhLiAqLwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHR4c3RhdDsKIAkvKiBJbmRleCBpbiB0aGUgKHN0cnVjdCBiNDNfcGlvX3R4cXVldWUpLT5wYWNrZXRzIGFycmF5LiAqLwogCXU4IGluZGV4OwogCkBAIC0xNjcsOCArMTY1LDcgQEAKIHZvaWQgYjQzX3Bpb19zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiB2b2lkIGI0M19waW9fZnJlZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCi1pbnQgYjQzX3Bpb190eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKTsKK2ludCBiNDNfcGlvX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGI0M19waW9faGFuZGxlX3R4c3RhdHVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdHVzKTsKIHZvaWQgYjQzX3Bpb19nZXRfdHhfc3RhdHMoc3RydWN0IGI0M193bGRldiAqZGV2LApAQCAtMTkzLDggKzE5MCw3IEBACiB7CiB9CiBzdGF0aWMgaW5saW5lIGludCBiNDNfcGlvX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKaW5kZXggMTFmNTNjYi4uZmVjNTY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYwpAQCAtNDMsNiArNDMsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogVXBkYXRlIHRoZSByZmtpbGwgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIGI0M19yZmtpbGxfdXBkYXRlX3N0YXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3Jma2lsbCAqcmZrID0gJihkZXYtPndsLT5yZmtpbGwpOworCisJaWYgKCFkZXYtPnJhZGlvX2h3X2VuYWJsZSkgeworCQlyZmstPnJma2lsbC0+c3RhdGUgPSBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEOworCQlyZXR1cm47CisJfQorCisJaWYgKCFkZXYtPnBoeS5yYWRpb19vbikKKwkJcmZrLT5yZmtpbGwtPnN0YXRlID0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDsKKwllbHNlCisJCXJmay0+cmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7CisKK30KKwogLyogVGhlIHBvbGwgY2FsbGJhY2sgZm9yIHRoZSBoYXJkd2FyZSBidXR0b24uICovCiBzdGF0aWMgdm9pZCBiNDNfcmZraWxsX3BvbGwoc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2KQogewpAQCAtNjAsNiArNzcsNyBAQAogCWlmICh1bmxpa2VseShlbmFibGVkICE9IGRldi0+cmFkaW9faHdfZW5hYmxlKSkgewogCQlkZXYtPnJhZGlvX2h3X2VuYWJsZSA9IGVuYWJsZWQ7CiAJCXJlcG9ydF9jaGFuZ2UgPSAxOworCQliNDNfcmZraWxsX3VwZGF0ZV9zdGF0ZShkZXYpOwogCQliNDNpbmZvKHdsLCAiUmFkaW8gaGFyZHdhcmUgc3RhdHVzIGNoYW5nZWQgdG8gJXNcbiIsCiAJCQllbmFibGVkID8gIkVOQUJMRUQiIDogIkRJU0FCTEVEIik7CiAJfQpAQCAtODgsNyArMTA2LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCWVyciA9IDA7CiAJc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgUkZLSUxMX1NUQVRFX09OOgorCWNhc2UgUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDoKIAkJaWYgKCFkZXYtPnJhZGlvX2h3X2VuYWJsZSkgewogCQkJLyogTm8gbHVjay4gV2UgY2FuJ3QgdG9nZ2xlIHRoZSBoYXJkd2FyZSBSRi1raWxsCiAJCQkgKiBidXR0b24gZnJvbSBzb2Z0d2FyZS4gKi8KQEAgLTk4LDEwICsxMTYsMTMgQEAKIAkJaWYgKCFkZXYtPnBoeS5yYWRpb19vbikKIAkJCWI0M19yYWRpb190dXJuX29uKGRldik7CiAJCWJyZWFrOwotCWNhc2UgUkZLSUxMX1NUQVRFX09GRjoKKwljYXNlIFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQ6CiAJCWlmIChkZXYtPnBoeS5yYWRpb19vbikKIAkJCWI0M19yYWRpb190dXJuX29mZihkZXYsIDApOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQliNDN3YXJuKHdsLCAiUmVjZWl2ZWQgdW5leHBlY3RlZCByZmtpbGwgc3RhdGUgJWQuXG4iLCBzdGF0ZSk7CisJCWJyZWFrOwogCX0KIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwpAQCAtMTMyLDcgKzE1Myw3IEBACiAJc25wcmludGYocmZrLT5uYW1lLCBzaXplb2YocmZrLT5uYW1lKSwKIAkJICJiNDMtJXMiLCB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpKTsKIAlyZmstPnJma2lsbC0+bmFtZSA9IHJmay0+bmFtZTsKLQlyZmstPnJma2lsbC0+c3RhdGUgPSBSRktJTExfU1RBVEVfT047CisJcmZrLT5yZmtpbGwtPnN0YXRlID0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKIAlyZmstPnJma2lsbC0+ZGF0YSA9IGRldjsKIAlyZmstPnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gYjQzX3Jma2lsbF9zb2Z0X3RvZ2dsZTsKIAlyZmstPnJma2lsbC0+dXNlcl9jbGFpbV91bnN1cHBvcnRlZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwppbmRleCAxOWFlZmJmLi44ZDU0NTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKQEAgLTE4NSwxNSArMTg1LDE1IEBACiAJCSAgICAgICB1OCAqX3R4aGRyLAogCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJhZ21lbnRfZGF0YSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBmcmFnbWVudF9sZW4sCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKnR4Y3RsLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkgICAgICAgdTE2IGNvb2tpZSkKIHsKIAlzdHJ1Y3QgYjQzX3R4aGRyICp0eGhkciA9IChzdHJ1Y3QgYjQzX3R4aGRyICopX3R4aGRyOwogCWNvbnN0IHN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKndsaGRyID0KIAkgICAgKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICopZnJhZ21lbnRfZGF0YTsKLQlpbnQgdXNlX2VuY3J5cHRpb24gPSAoISh0eGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQpKTsKLQl1MTYgZmN0bCA9IGxlMTZfdG9fY3B1KHdsaGRyLT5mcmFtZV9jb250cm9sKTsKKwlpbnQgdXNlX2VuY3J5cHRpb24gPSAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfRE9fTk9UX0VOQ1JZUFQpKTsKKwlfX2xlMTYgZmN0bCA9IHdsaGRyLT5mcmFtZV9jb250cm9sOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqZmJyYXRlOwogCXU4IHJhdGUsIHJhdGVfZmI7CiAJaW50IHJhdGVfb2ZkbSwgcmF0ZV9mYl9vZmRtOwpAQCAtMjAxLDEzICsyMDEsMTQgQEAKIAl1MzIgbWFjX2N0bCA9IDA7CiAJdTE2IHBoeV9jdGwgPSAwOwogCXU4IGV4dHJhX2Z0ID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnR4cmF0ZTsKIAogCW1lbXNldCh0eGhkciwgMCwgc2l6ZW9mKCp0eGhkcikpOwogCi0JV0FSTl9PTighdHhjdGwtPnR4X3JhdGUpOwotCXJhdGUgPSB0eGN0bC0+dHhfcmF0ZSA/IHR4Y3RsLT50eF9yYXRlLT5od192YWx1ZSA6IEI0M19DQ0tfUkFURV8xTUI7CisJdHhyYXRlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKGRldi0+d2wtPmh3LCBpbmZvKTsKKwlyYXRlID0gdHhyYXRlID8gdHhyYXRlLT5od192YWx1ZSA6IEI0M19DQ0tfUkFURV8xTUI7CiAJcmF0ZV9vZmRtID0gYjQzX2lzX29mZG1fcmF0ZShyYXRlKTsKLQlmYnJhdGUgPSB0eGN0bC0+YWx0X3JldHJ5X3JhdGUgPyA6IHR4Y3RsLT50eF9yYXRlOworCWZicmF0ZSA9IGllZWU4MDIxMV9nZXRfYWx0X3JldHJ5X3JhdGUoZGV2LT53bC0+aHcsIGluZm8pID8gOiB0eHJhdGU7CiAJcmF0ZV9mYiA9IGZicmF0ZS0+aHdfdmFsdWU7CiAJcmF0ZV9mYl9vZmRtID0gYjQzX2lzX29mZG1fcmF0ZShyYXRlX2ZiKTsKIApAQCAtMjI3LDE1ICsyMjgsMTMgQEAKIAkJICogdXNlIHRoZSBvcmlnaW5hbCBkdXJfaWQgZmllbGQuICovCiAJCXR4aGRyLT5kdXJfZmIgPSB3bGhkci0+ZHVyYXRpb25faWQ7CiAJfSBlbHNlIHsKLQkJdHhoZHItPmR1cl9mYiA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKGRldi0+d2wtPmh3LAotCQkJCQkJCQkgdHhjdGwtPnZpZiwKLQkJCQkJCQkJIGZyYWdtZW50X2xlbiwKLQkJCQkJCQkJIGZicmF0ZSk7CisJCXR4aGRyLT5kdXJfZmIgPSBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbigKKwkJCWRldi0+d2wtPmh3LCBpbmZvLT5jb250cm9sLnZpZiwgZnJhZ21lbnRfbGVuLCBmYnJhdGUpOwogCX0KIAogCXBsY3BfZnJhZ21lbnRfbGVuID0gZnJhZ21lbnRfbGVuICsgRkNTX0xFTjsKIAlpZiAodXNlX2VuY3J5cHRpb24pIHsKLQkJdTgga2V5X2lkeCA9ICh1MTYpICh0eGN0bC0+a2V5X2lkeCk7CisJCXU4IGtleV9pZHggPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKIAkJc3RydWN0IGI0M19rZXkgKmtleTsKIAkJaW50IHdsaGRyX2xlbjsKIAkJc2l6ZV90IGl2X2xlbjsKQEAgLTI1MywxNSArMjUyLDE1IEBACiAJCX0KIAogCQkvKiBIYXJkd2FyZSBhcHBlbmRzIElDVi4gKi8KLQkJcGxjcF9mcmFnbWVudF9sZW4gKz0gdHhjdGwtPmljdl9sZW47CisJCXBsY3BfZnJhZ21lbnRfbGVuICs9IGluZm8tPmNvbnRyb2wuaWN2X2xlbjsKIAogCQlrZXlfaWR4ID0gYjQzX2tpZHhfdG9fZncoZGV2LCBrZXlfaWR4KTsKIAkJbWFjX2N0bCB8PSAoa2V5X2lkeCA8PCBCNDNfVFhIX01BQ19LRVlJRFhfU0hJRlQpICYKIAkJCSAgIEI0M19UWEhfTUFDX0tFWUlEWDsKIAkJbWFjX2N0bCB8PSAoa2V5LT5hbGdvcml0aG0gPDwgQjQzX1RYSF9NQUNfS0VZQUxHX1NISUZUKSAmCiAJCQkgICBCNDNfVFhIX01BQ19LRVlBTEc7Ci0JCXdsaGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGZjdGwpOwotCQlpdl9sZW4gPSBtaW4oKHNpemVfdCkgdHhjdGwtPml2X2xlbiwKKwkJd2xoZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmY3RsKTsKKwkJaXZfbGVuID0gbWluKChzaXplX3QpIGluZm8tPmNvbnRyb2wuaXZfbGVuLAogCQkJICAgICBBUlJBWV9TSVpFKHR4aGRyLT5pdikpOwogCQltZW1jcHkodHhoZHItPml2LCAoKHU4ICopIHdsaGRyKSArIHdsaGRyX2xlbiwgaXZfbGVuKTsKIAl9CkBAIC0yOTIsMTAgKzI5MSwxMCBAQAogCQlwaHlfY3RsIHw9IEI0M19UWEhfUEhZX0VOQ19PRkRNOwogCWVsc2UKIAkJcGh5X2N0bCB8PSBCNDNfVFhIX1BIWV9FTkNfQ0NLOwotCWlmICh0eGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEUpCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TSE9SVF9QUkVBTUJMRSkKIAkJcGh5X2N0bCB8PSBCNDNfVFhIX1BIWV9TSE9SVFBSTUJMOwogCi0Jc3dpdGNoIChiNDNfaWVlZTgwMjExX2FudGVubmFfc2FuaXRpemUoZGV2LCB0eGN0bC0+YW50ZW5uYV9zZWxfdHgpKSB7CisJc3dpdGNoIChiNDNfaWVlZTgwMjExX2FudGVubmFfc2FuaXRpemUoZGV2LCBpbmZvLT5hbnRlbm5hX3NlbF90eCkpIHsKIAljYXNlIDA6IC8qIERlZmF1bHQgKi8KIAkJcGh5X2N0bCB8PSBCNDNfVFhIX1BIWV9BTlQwMUFVVE87CiAJCWJyZWFrOwpAQCAtMzE2LDM0ICszMTUsMzYgQEAKIAl9CiAKIAkvKiBNQUMgY29udHJvbCAqLwotCWlmICghKHR4Y3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spKQorCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKQogCQltYWNfY3RsIHw9IEI0M19UWEhfTUFDX0FDSzsKLQlpZiAoISgoKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCkgJiYKLQkgICAgICAoKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX1BTUE9MTCkpKQorCS8qIHVzZSBoYXJkd2FyZSBzZXF1ZW5jZSBjb3VudGVyIGFzIHRoZSBub24tVElEIGNvdW50ZXIgKi8KKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpCiAJCW1hY19jdGwgfD0gQjQzX1RYSF9NQUNfSFdTRVE7Ci0JaWYgKHR4Y3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9GSVJTVF9GUkFHTUVOVCkKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKQogCQltYWNfY3RsIHw9IEI0M19UWEhfTUFDX1NUTVNEVTsKIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0EpCiAJCW1hY19jdGwgfD0gQjQzX1RYSF9NQUNfNUdIWjsKLQlpZiAodHhjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0xPTkdfUkVUUllfTElNSVQpCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9MT05HX1JFVFJZX0xJTUlUKQogCQltYWNfY3RsIHw9IEI0M19UWEhfTUFDX0xPTkdGUkFNRTsKIAogCS8qIEdlbmVyYXRlIHRoZSBSVFMgb3IgQ1RTLXRvLXNlbGYgZnJhbWUgKi8KLQlpZiAoKHR4Y3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykgfHwKLQkgICAgKHR4Y3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QpKSB7CisJaWYgKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX1JUU19DVFMpIHx8CisJICAgIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX0NUU19QUk9URUNUKSkgewogCQl1bnNpZ25lZCBpbnQgbGVuOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCQlpbnQgcnRzX3JhdGUsIHJ0c19yYXRlX2ZiOwogCQlpbnQgcnRzX3JhdGVfb2ZkbSwgcnRzX3JhdGVfZmJfb2ZkbTsKIAkJc3RydWN0IGI0M19wbGNwX2hkcjYgKnBsY3A7CisJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcnRzX2N0c19yYXRlOwogCi0JCVdBUk5fT04oIXR4Y3RsLT5ydHNfY3RzX3JhdGUpOwotCQlydHNfcmF0ZSA9IHR4Y3RsLT5ydHNfY3RzX3JhdGUgPyB0eGN0bC0+cnRzX2N0c19yYXRlLT5od192YWx1ZSA6IEI0M19DQ0tfUkFURV8xTUI7CisJCXJ0c19jdHNfcmF0ZSA9IGllZWU4MDIxMV9nZXRfcnRzX2N0c19yYXRlKGRldi0+d2wtPmh3LCBpbmZvKTsKKworCQlydHNfcmF0ZSA9IHJ0c19jdHNfcmF0ZSA/IHJ0c19jdHNfcmF0ZS0+aHdfdmFsdWUgOiBCNDNfQ0NLX1JBVEVfMU1COwogCQlydHNfcmF0ZV9vZmRtID0gYjQzX2lzX29mZG1fcmF0ZShydHNfcmF0ZSk7CiAJCXJ0c19yYXRlX2ZiID0gYjQzX2NhbGNfZmFsbGJhY2tfcmF0ZShydHNfcmF0ZSk7CiAJCXJ0c19yYXRlX2ZiX29mZG0gPSBiNDNfaXNfb2ZkbV9yYXRlKHJ0c19yYXRlX2ZiKTsKIAotCQlpZiAodHhjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkgeworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9DVFNfUFJPVEVDVCkgewogCQkJc3RydWN0IGllZWU4MDIxMV9jdHMgKmN0czsKIAogCQkJaWYgKGI0M19pc19vbGRfdHhoZHJfZm9ybWF0KGRldikpIHsKQEAgLTM1Myw5ICszNTQsOSBAQAogCQkJCWN0cyA9IChzdHJ1Y3QgaWVlZTgwMjExX2N0cyAqKQogCQkJCQkodHhoZHItPm5ld19mb3JtYXQucnRzX2ZyYW1lKTsKIAkJCX0KLQkJCWllZWU4MDIxMV9jdHN0b3NlbGZfZ2V0KGRldi0+d2wtPmh3LCB0eGN0bC0+dmlmLAorCQkJaWVlZTgwMjExX2N0c3Rvc2VsZl9nZXQoZGV2LT53bC0+aHcsIGluZm8tPmNvbnRyb2wudmlmLAogCQkJCQkJZnJhZ21lbnRfZGF0YSwgZnJhZ21lbnRfbGVuLAotCQkJCQkJdHhjdGwsIGN0cyk7CisJCQkJCQlpbmZvLCBjdHMpOwogCQkJbWFjX2N0bCB8PSBCNDNfVFhIX01BQ19TRU5EQ1RTOwogCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3RzKTsKIAkJfSBlbHNlIHsKQEAgLTM2OCw5ICszNjksOSBAQAogCQkJCXJ0cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J0cyAqKQogCQkJCQkodHhoZHItPm5ld19mb3JtYXQucnRzX2ZyYW1lKTsKIAkJCX0KLQkJCWllZWU4MDIxMV9ydHNfZ2V0KGRldi0+d2wtPmh3LCB0eGN0bC0+dmlmLAorCQkJaWVlZTgwMjExX3J0c19nZXQoZGV2LT53bC0+aHcsIGluZm8tPmNvbnRyb2wudmlmLAogCQkJCQkgIGZyYWdtZW50X2RhdGEsIGZyYWdtZW50X2xlbiwKLQkJCQkJICB0eGN0bCwgcnRzKTsKKwkJCQkJICBpbmZvLCBydHMpOwogCQkJbWFjX2N0bCB8PSBCNDNfVFhIX01BQ19TRU5EUlRTOwogCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnRzKTsKIAkJfQpAQCAtNTA4LDcgKzUwOSw3IEBACiAJc3RydWN0IGI0M19wbGNwX2hkcjYgKnBsY3A7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKndsaGRyOwogCWNvbnN0IHN0cnVjdCBiNDNfcnhoZHJfZnc0ICpyeGhkciA9IF9yeGhkcjsKLQl1MTYgZmN0bDsKKwlfX2xlMTYgZmN0bDsKIAl1MTYgcGh5c3RhdDAsIHBoeXN0YXQzLCBjaGFuc3RhdCwgbWFjdGltZTsKIAl1MzIgbWFjc3RhdDsKIAl1MTYgY2hhbmlkOwpAQCAtNTQ4LDcgKzU0OSw3IEBACiAJCWdvdG8gZHJvcDsKIAl9CiAJd2xoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhKTsKLQlmY3RsID0gbGUxNl90b19jcHUod2xoZHItPmZyYW1lX2NvbnRyb2wpOworCWZjdGwgPSB3bGhkci0+ZnJhbWVfY29udHJvbDsKIAogCWlmIChtYWNzdGF0ICYgQjQzX1JYX01BQ19ERUMpIHsKIAkJdW5zaWduZWQgaW50IGtleWlkeDsKQEAgLTU2Myw3ICs1NjQsNyBAQAogCQlCNDNfV0FSTl9PTihrZXlpZHggPj0gZGV2LT5tYXhfbnJfa2V5cyk7CiAKIAkJaWYgKGRldi0+a2V5W2tleWlkeF0uYWxnb3JpdGhtICE9IEI0M19TRUNfQUxHT19OT05FKSB7Ci0JCQl3bGhkcl9sZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihmY3RsKTsKKwkJCXdsaGRyX2xlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmN0bCk7CiAJCQlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCAod2xoZHJfbGVuICsgMykpKSB7CiAJCQkJYjQzZGJnKGRldi0+d2wsCiAJCQkJICAgICAgICJSWDogUGFja2V0IHNpemUgdW5kZXJydW4gKDMpXG4iKTsKQEAgLTU4MSwxMiArNTgyLDExIEBACiAJCS8vICAgICAgYW5kIGFsc28gZmluZCBvdXQgd2hhdCB0aGUgbWF4aW11bSBwb3NzaWJsZSB2YWx1ZSBpcy4KIAkJLy8gICAgICBGaWxsIHN0YXR1cy5zc2kgYW5kIHN0YXR1cy5zaWduYWwgZmllbGRzLgogCX0gZWxzZSB7Ci0JCXN0YXR1cy5zc2kgPSBiNDNfcnNzaV9wb3N0cHJvY2VzcyhkZXYsIHJ4aGRyLT5qc3NpLAorCQlzdGF0dXMuc2lnbmFsID0gYjQzX3Jzc2lfcG9zdHByb2Nlc3MoZGV2LCByeGhkci0+anNzaSwKIAkJCQkJCSAgKHBoeXN0YXQwICYgQjQzX1JYX1BIWVNUMF9PRkRNKSwKIAkJCQkJCSAgKHBoeXN0YXQwICYgQjQzX1JYX1BIWVNUMF9HQUlOQ1RMKSwKIAkJCQkJCSAgKHBoeXN0YXQzICYgQjQzX1JYX1BIWVNUM19UUlNUQVRFKSk7Ci0JCS8qIHRoZSBuZXh0IGxpbmUgbG9va3Mgd3JvbmcsIGJ1dCBpcyB3aGF0IG1hYzgwMjExIHdhbnRzICovCi0JCXN0YXR1cy5zaWduYWwgPSAocnhoZHItPmpzc2kgKiAxMDApIC8gQjQzX1JYX01BWF9TU0k7CisJCXN0YXR1cy5xdWFsID0gKHJ4aGRyLT5qc3NpICogMTAwKSAvIEI0M19SWF9NQVhfU1NJOwogCX0KIAogCWlmIChwaHlzdGF0MCAmIEI0M19SWF9QSFlTVDBfT0ZETSkKQEAgLTYwNCw5ICs2MDQsNyBAQAogCSAqIG9mIHRpbWVzdGFtcCwgaS5lLiBhYm91dCA2NSBtaWxsaXNlY29uZHMgYWZ0ZXIgdGhlIFBIWSByZWNlaXZlZAogCSAqIHRoZSBmaXJzdCBzeW1ib2wuCiAJICovCi0JaWYgKCgoZmN0bCAmIChJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkKLQkgICAgPT0gKElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0JFQUNPTikpIHx8Ci0JICAgIGRldi0+d2wtPnJhZGlvdGFwX2VuYWJsZWQpIHsKKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmY3RsKSB8fCBkZXYtPndsLT5yYWRpb3RhcF9lbmFibGVkKSB7CiAJCXUxNiBsb3dfbWFjdGltZV9ub3c7CiAKIAkJYjQzX3RzZl9yZWFkKGRldiwgJnN0YXR1cy5tYWN0aW1lKTsKQEAgLTY4NSwyNyArNjgzLDI3IEBACiAvKiBGaWxsIG91dCB0aGUgbWFjODAyMTEgVFhzdGF0dXMgcmVwb3J0IGJhc2VkIG9uIHRoZSBiNDMtc3BlY2lmaWMKICAqIHR4c3RhdHVzIHJlcG9ydCBkYXRhLiBUaGlzIHJldHVybnMgYSBib29sZWFuIHdoZXRoZXIgdGhlIGZyYW1lIHdhcwogICogc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkLiAqLwotYm9vbCBiNDNfZmlsbF90eHN0YXR1c19yZXBvcnQoc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnJlcG9ydCwKK2Jvb2wgYjQzX2ZpbGxfdHhzdGF0dXNfcmVwb3J0KHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqcmVwb3J0LAogCQkJICAgICAgY29uc3Qgc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdHVzKQogewogCWJvb2wgZnJhbWVfc3VjY2VzcyA9IDE7CiAKIAlpZiAoc3RhdHVzLT5hY2tlZCkgewogCQkvKiBUaGUgZnJhbWUgd2FzIEFDS2VkLiAqLwotCQlyZXBvcnQtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLOworCQlyZXBvcnQtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAl9IGVsc2UgewogCQkvKiBUaGUgZnJhbWUgd2FzIG5vdCBBQ0tlZC4uLiAqLwotCQlpZiAoIShyZXBvcnQtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfTk9fQUNLKSkgeworCQlpZiAoIShyZXBvcnQtPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSB7CiAJCQkvKiAuLi5idXQgd2UgZXhwZWN0ZWQgYW4gQUNLLiAqLwogCQkJZnJhbWVfc3VjY2VzcyA9IDA7Ci0JCQlyZXBvcnQtPmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMTsKKwkJCXJlcG9ydC0+c3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMTsKIAkJfQogCX0KIAlpZiAoc3RhdHVzLT5mcmFtZV9jb3VudCA9PSAwKSB7CiAJCS8qIFRoZSBmcmFtZSB3YXMgbm90IHRyYW5zbWl0dGVkIGF0IGFsbC4gKi8KLQkJcmVwb3J0LT5yZXRyeV9jb3VudCA9IDA7CisJCXJlcG9ydC0+c3RhdHVzLnJldHJ5X2NvdW50ID0gMDsKIAl9IGVsc2UKLQkJcmVwb3J0LT5yZXRyeV9jb3VudCA9IHN0YXR1cy0+ZnJhbWVfY291bnQgLSAxOworCQlyZXBvcnQtPnN0YXR1cy5yZXRyeV9jb3VudCA9IHN0YXR1cy0+ZnJhbWVfY291bnQgLSAxOwogCiAJcmV0dXJuIGZyYW1lX3N1Y2Nlc3M7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuaAppbmRleCBiMDVmNDRlLi4wMjE1ZmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmgKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQkgICAgICAgdTggKiB0eGhkciwKIAkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyYWdtZW50X2RhdGEsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgZnJhZ21lbnRfbGVuLAotCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICp0eGN0bCwgdTE2IGNvb2tpZSk7CisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4Y3RsLCB1MTYgY29va2llKTsKIAogLyogVHJhbnNtaXQgU3RhdHVzICovCiBzdHJ1Y3QgYjQzX3R4c3RhdHVzIHsKQEAgLTI5NCw3ICsyOTQsNyBAQAogCiB2b2lkIGI0M19oYW5kbGVfdHhzdGF0dXMoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cyk7Ci1ib29sIGI0M19maWxsX3R4c3RhdHVzX3JlcG9ydChzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqcmVwb3J0LAorYm9vbCBiNDNfZmlsbF90eHN0YXR1c19yZXBvcnQoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpyZXBvcnQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3R4c3RhdHVzICpzdGF0dXMpOwogCiB2b2lkIGI0M190eF9zdXNwZW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvYjQzbGVnYWN5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvYjQzbGVnYWN5LmgKaW5kZXggZGVkM2NkMy4uYzQwMDc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2I0M2xlZ2FjeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9iNDNsZWdhY3kuaApAQCAtODIzLDIzICs4MjMsNiBAQAogIyBkZWZpbmUgYjQzbGVnYWN5ZGJnKHdsLCBmbXQuLi4pIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIERFQlVHICovCiAKLQotLyoqIExpbWl0IGEgdmFsdWUgYmV0d2VlbiB0d28gbGltaXRzICovCi0jaWZkZWYgbGltaXRfdmFsdWUKLSMgdW5kZWYgbGltaXRfdmFsdWUKLSNlbmRpZgotI2RlZmluZSBsaW1pdF92YWx1ZSh2YWx1ZSwgbWluLCBtYXgpICBcCi0JKHsJCQkJCQlcCi0JCXR5cGVvZih2YWx1ZSkgX192YWx1ZSA9ICh2YWx1ZSk7CVwKLQkJdHlwZW9mKHZhbHVlKSBfX21pbiA9IChtaW4pOwkJXAotCQl0eXBlb2YodmFsdWUpIF9fbWF4ID0gKG1heCk7CQlcCi0JCWlmIChfX3ZhbHVlIDwgX19taW4pCQkJXAotCQkJX192YWx1ZSA9IF9fbWluOwkJXAotCQllbHNlIGlmIChfX3ZhbHVlID4gX19tYXgpCQlcCi0JCQlfX3ZhbHVlID0gX19tYXg7CQlcCi0JCV9fdmFsdWU7CQkJCVwKLQl9KQotCiAvKiBNYWNyb3MgZm9yIHByaW50aW5nIGEgdmFsdWUgaW4gUTUuMiBmb3JtYXQgKi8KICNkZWZpbmUgUTUyX0ZNVAkJIiV1LiV1IgogI2RlZmluZSBRNTJfQVJHKHE1MikJKChxNTIpIC8gNCksICgoKHE1MikgJiAzKSAqIDEwMCAvIDQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmMKaW5kZXggOTNkZGMxYy4uZmI2ODE5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuYwpAQCAtMzkzLDEzICszOTMsMTMgQEAKIAlkbWFfYWRkcl90IGRtYWFkZHI7CiAKIAlpZiAodHgpCi0JCWRtYWFkZHIgPSBkbWFfbWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKLQkJCQkJIGJ1ZiwgbGVuLAotCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCWRtYWFkZHIgPSBzc2JfZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsCisJCQkJCSAgICAgYnVmLCBsZW4sCisJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJZWxzZQotCQlkbWFhZGRyID0gZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCi0JCQkJCSBidWYsIGxlbiwKLQkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCWRtYWFkZHIgPSBzc2JfZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsCisJCQkJCSAgICAgYnVmLCBsZW4sCisJCQkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKIAogCXJldHVybiBkbWFhZGRyOwogfQpAQCAtNDExLDEzICs0MTEsMTMgQEAKIAkJICAgICAgaW50IHR4KQogewogCWlmICh0eCkKLQkJZG1hX3VubWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKLQkJCQkgYWRkciwgbGVuLAotCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJc3NiX2RtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsCisJCQkJICAgICBhZGRyLCBsZW4sCisJCQkJICAgICBETUFfVE9fREVWSUNFKTsKIAllbHNlCi0JCWRtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCi0JCQkJIGFkZHIsIGxlbiwKLQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwkJc3NiX2RtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsCisJCQkJICAgICBhZGRyLCBsZW4sCisJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwogfQogCiBzdGF0aWMgaW5saW5lCkBAIC00MjcsOCArNDI3LDggQEAKIHsKIAlCNDNsZWdhY3lfV0FSTl9PTihyaW5nLT50eCk7CiAKLQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKLQkJCQlhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJc3NiX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHJpbmctPmRldi0+ZGV2LAorCQkJCSAgICBhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKQEAgLTQzOCw4ICs0MzgsOCBAQAogewogCUI0M2xlZ2FjeV9XQVJOX09OKHJpbmctPnR4KTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAotCQkJCSAgIGFkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+ZGV2LT5kZXYsCisJCQkJICAgICAgIGFkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtNDU4LDEwICs0NTgsMTEgQEAKIAogc3RhdGljIGludCBhbGxvY19yaW5nbWVtb3J5KHN0cnVjdCBiNDNsZWdhY3lfZG1hcmluZyAqcmluZykKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcmluZy0+ZGV2LT5kZXYtPmRtYV9kZXY7Ci0KLQlyaW5nLT5kZXNjYmFzZSA9IGRtYV9hbGxvY19jb2hlcmVudChkbWFfZGV2LCBCNDNsZWdhY3lfRE1BX1JJTkdNRU1TSVpFLAotCQkJCQkgICAgJihyaW5nLT5kbWFiYXNlKSwgR0ZQX0tFUk5FTCk7CisJLyogR0ZQIGZsYWdzIG11c3QgbWF0Y2ggdGhlIGZsYWdzIGluIGZyZWVfcmluZ21lbW9yeSgpISAqLworCXJpbmctPmRlc2NiYXNlID0gc3NiX2RtYV9hbGxvY19jb25zaXN0ZW50KHJpbmctPmRldi0+ZGV2LAorCQkJCQkJICBCNDNsZWdhY3lfRE1BX1JJTkdNRU1TSVpFLAorCQkJCQkJICAmKHJpbmctPmRtYWJhc2UpLAorCQkJCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAoIXJpbmctPmRlc2NiYXNlKSB7CiAJCWI0M2xlZ2FjeWVycihyaW5nLT5kZXYtPndsLCAiRE1BIHJpbmdtZW1vcnkgYWxsb2NhdGlvbiIKIAkJCSAgICAgIiBmYWlsZWRcbiIpOwpAQCAtNDc0LDEwICs0NzUsOCBAQAogCiBzdGF0aWMgdm9pZCBmcmVlX3JpbmdtZW1vcnkoc3RydWN0IGI0M2xlZ2FjeV9kbWFyaW5nICpyaW5nKQogewotCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSByaW5nLT5kZXYtPmRldi0+ZG1hX2RldjsKLQotCWRtYV9mcmVlX2NvaGVyZW50KGRtYV9kZXYsIEI0M2xlZ2FjeV9ETUFfUklOR01FTVNJWkUsCi0JCQkgIHJpbmctPmRlc2NiYXNlLCByaW5nLT5kbWFiYXNlKTsKKwlzc2JfZG1hX2ZyZWVfY29uc2lzdGVudChyaW5nLT5kZXYtPmRldiwgQjQzbGVnYWN5X0RNQV9SSU5HTUVNU0laRSwKKwkJCQlyaW5nLT5kZXNjYmFzZSwgcmluZy0+ZG1hYmFzZSwgR0ZQX0tFUk5FTCk7CiB9CiAKIC8qIFJlc2V0IHRoZSBSWCBETUEgY2hhbm5lbCAqLwpAQCAtNTg5LDcgKzU4OCw3IEBACiAJCQkJCSBzaXplX3QgYnVmZmVyc2l6ZSwKIAkJCQkJIGJvb2wgZG1hX3RvX2RldmljZSkKIHsKLQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoYWRkcikpKQorCWlmICh1bmxpa2VseShzc2JfZG1hX21hcHBpbmdfZXJyb3IocmluZy0+ZGV2LT5kZXYsIGFkZHIpKSkKIAkJcmV0dXJuIDE7CiAKIAlzd2l0Y2ggKHJpbmctPnR5cGUpIHsKQEAgLTg2MCw2ICs4NTksMTggQEAKIAlyZXR1cm4gRE1BXzMwQklUX01BU0s7CiB9CiAKK3N0YXRpYyBlbnVtIGI0M2xlZ2FjeV9kbWF0eXBlIGRtYV9tYXNrX3RvX2VuZ2luZV90eXBlKHU2NCBkbWFtYXNrKQoreworCWlmIChkbWFtYXNrID09IERNQV8zMEJJVF9NQVNLKQorCQlyZXR1cm4gQjQzbGVnYWN5X0RNQV8zMEJJVDsKKwlpZiAoZG1hbWFzayA9PSBETUFfMzJCSVRfTUFTSykKKwkJcmV0dXJuIEI0M2xlZ2FjeV9ETUFfMzJCSVQ7CisJaWYgKGRtYW1hc2sgPT0gRE1BXzY0QklUX01BU0spCisJCXJldHVybiBCNDNsZWdhY3lfRE1BXzY0QklUOworCUI0M2xlZ2FjeV9XQVJOX09OKDEpOworCXJldHVybiBCNDNsZWdhY3lfRE1BXzMwQklUOworfQorCiAvKiBNYWluIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAqLwogc3RhdGljCiBzdHJ1Y3QgYjQzbGVnYWN5X2RtYXJpbmcgKmI0M2xlZ2FjeV9zZXR1cF9kbWFyaW5nKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKQEAgLTg5NCw5ICs5MDUsOSBAQAogCQkJZ290byBlcnJfa2ZyZWVfbWV0YTsKIAogCQkvKiB0ZXN0IGZvciBhYmlsaXR5IHRvIGRtYSB0byB0eGhkcl9jYWNoZSAqLwotCQlkbWFfdGVzdCA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LT5kbWFfZGV2LCByaW5nLT50eGhkcl9jYWNoZSwKLQkJCQkJICBzaXplb2Yoc3RydWN0IGI0M2xlZ2FjeV90eGhkcl9mdzMpLAotCQkJCQkgIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdGVzdCA9IHNzYl9kbWFfbWFwX3NpbmdsZShkZXYtPmRldiwgcmluZy0+dHhoZHJfY2FjaGUsCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksCisJCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwogCiAJCWlmIChiNDNsZWdhY3lfZG1hX21hcHBpbmdfZXJyb3IocmluZywgZG1hX3Rlc3QsCiAJCQkJCXNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksIDEpKSB7CkBAIC05MDgsNyArOTE5LDcgQEAKIAkJCWlmICghcmluZy0+dHhoZHJfY2FjaGUpCiAJCQkJZ290byBlcnJfa2ZyZWVfbWV0YTsKIAotCQkJZG1hX3Rlc3QgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldi0+ZG1hX2RldiwKKwkJCQlkbWFfdGVzdCA9IHNzYl9kbWFfbWFwX3NpbmdsZShkZXYtPmRldiwKIAkJCQkJcmluZy0+dHhoZHJfY2FjaGUsCiAJCQkJCXNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksCiAJCQkJCURNQV9UT19ERVZJQ0UpOwpAQCAtOTE4LDkgKzkyOSw5IEBACiAJCQkJZ290byBlcnJfa2ZyZWVfdHhoZHJfY2FjaGU7CiAJCX0KIAotCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LT5kbWFfZGV2LAotCQkJCSBkbWFfdGVzdCwgc2l6ZW9mKHN0cnVjdCBiNDNsZWdhY3lfdHhoZHJfZnczKSwKLQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfdGVzdCwKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksCisJCQkJICAgICBETUFfVE9fREVWSUNFKTsKIAl9CiAKIAlyaW5nLT5ucl9zbG90cyA9IG5yX3Nsb3RzOwpAQCAtMTAxOSw2ICsxMDMwLDQzIEBACiAJZG1hLT50eF9yaW5nMCA9IE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgYjQzbGVnYWN5X2RtYV9zZXRfbWFzayhzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsIHU2NCBtYXNrKQoreworCXU2NCBvcmlnX21hc2sgPSBtYXNrOworCWJvb2wgZmFsbGJhY2sgPSAwOworCWludCBlcnI7CisKKwkvKiBUcnkgdG8gc2V0IHRoZSBETUEgbWFzay4gSWYgaXQgZmFpbHMsIHRyeSBmYWxsaW5nIGJhY2sgdG8gYQorCSAqIGxvd2VyIG1hc2ssIGFzIHdlIGNhbiBhbHdheXMgYWxzbyBzdXBwb3J0IGEgbG93ZXIgb25lLiAqLworCXdoaWxlICgxKSB7CisJCWVyciA9IHNzYl9kbWFfc2V0X21hc2soZGV2LT5kZXYsIG1hc2spOworCQlpZiAoIWVycikKKwkJCWJyZWFrOworCQlpZiAobWFzayA9PSBETUFfNjRCSVRfTUFTSykgeworCQkJbWFzayA9IERNQV8zMkJJVF9NQVNLOworCQkJZmFsbGJhY2sgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG1hc2sgPT0gRE1BXzMyQklUX01BU0spIHsKKwkJCW1hc2sgPSBETUFfMzBCSVRfTUFTSzsKKwkJCWZhbGxiYWNrID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWI0M2xlZ2FjeWVycihkZXYtPndsLCAiVGhlIG1hY2hpbmUva2VybmVsIGRvZXMgbm90IHN1cHBvcnQgIgorCQkgICAgICAgInRoZSByZXF1aXJlZCAldS1iaXQgRE1BIG1hc2tcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KWRtYV9tYXNrX3RvX2VuZ2luZV90eXBlKG9yaWdfbWFzaykpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCWlmIChmYWxsYmFjaykgeworCQliNDNsZWdhY3lpbmZvKGRldi0+d2wsICJETUEgbWFzayBmYWxsYmFjayBmcm9tICV1LWJpdCB0byAldS0iCisJCQkiYml0XG4iLAorCQkJKHVuc2lnbmVkIGludClkbWFfbWFza190b19lbmdpbmVfdHlwZShvcmlnX21hc2spLAorCQkJKHVuc2lnbmVkIGludClkbWFfbWFza190b19lbmdpbmVfdHlwZShtYXNrKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIGludCBiNDNsZWdhY3lfZG1hX2luaXQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KQogewogCXN0cnVjdCBiNDNsZWdhY3lfZG1hICpkbWEgPSAmZGV2LT5kbWE7CkBAIC0xMDI4LDIxICsxMDc2LDggQEAKIAllbnVtIGI0M2xlZ2FjeV9kbWF0eXBlIHR5cGU7CiAKIAlkbWFtYXNrID0gc3VwcG9ydGVkX2RtYV9tYXNrKGRldik7Ci0Jc3dpdGNoIChkbWFtYXNrKSB7Ci0JZGVmYXVsdDoKLQkJQjQzbGVnYWN5X1dBUk5fT04oMSk7Ci0JY2FzZSBETUFfMzBCSVRfTUFTSzoKLQkJdHlwZSA9IEI0M2xlZ2FjeV9ETUFfMzBCSVQ7Ci0JCWJyZWFrOwotCWNhc2UgRE1BXzMyQklUX01BU0s6Ci0JCXR5cGUgPSBCNDNsZWdhY3lfRE1BXzMyQklUOwotCQlicmVhazsKLQljYXNlIERNQV82NEJJVF9NQVNLOgotCQl0eXBlID0gQjQzbGVnYWN5X0RNQV82NEJJVDsKLQkJYnJlYWs7Ci0JfQotCi0JZXJyID0gc3NiX2RtYV9zZXRfbWFzayhkZXYtPmRldiwgZG1hbWFzayk7CisJdHlwZSA9IGRtYV9tYXNrX3RvX2VuZ2luZV90eXBlKGRtYW1hc2spOworCWVyciA9IGI0M2xlZ2FjeV9kbWFfc2V0X21hc2soZGV2LCBkbWFtYXNrKTsKIAlpZiAoZXJyKSB7CiAjaWZkZWYgQ09ORklHX0I0M0xFR0FDWV9QSU8KIAkJYjQzbGVnYWN5d2FybihkZXYtPndsLCAiRE1BIGZvciB0aGlzIGRldmljZSBub3Qgc3VwcG9ydGVkLiAiCkBAIC0xMjA1LDEwICsxMjQwLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgZG1hX3R4X2ZyYWdtZW50KHN0cnVjdCBiNDNsZWdhY3lfZG1hcmluZyAqcmluZywKLQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKQorCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IGI0M2xlZ2FjeV9kbWFfb3BzICpvcHMgPSByaW5nLT5vcHM7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXU4ICpoZWFkZXI7CiAJaW50IHNsb3QsIG9sZF90b3Bfc2xvdCwgb2xkX3VzZWRfc2xvdHM7CiAJaW50IGVycjsKQEAgLTEyMzEsNyArMTI2Niw3IEBACiAJaGVhZGVyID0gJihyaW5nLT50eGhkcl9jYWNoZVtzbG90ICogc2l6ZW9mKAogCQkJICAgICAgIHN0cnVjdCBiNDNsZWdhY3lfdHhoZHJfZnczKV0pOwogCWVyciA9IGI0M2xlZ2FjeV9nZW5lcmF0ZV90eGhkcihyaW5nLT5kZXYsIGhlYWRlciwKLQkJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwgY3RsLAorCQkJCSBza2ItPmRhdGEsIHNrYi0+bGVuLCBpbmZvLAogCQkJCSBnZW5lcmF0ZV9jb29raWUocmluZywgc2xvdCkpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCXJpbmctPmN1cnJlbnRfc2xvdCA9IG9sZF90b3Bfc2xvdDsKQEAgLTEyNTUsNyArMTI5MCw2IEBACiAJZGVzYyA9IG9wcy0+aWR4MmRlc2MocmluZywgc2xvdCwgJm1ldGEpOwogCW1lbXNldChtZXRhLCAwLCBzaXplb2YoKm1ldGEpKTsKIAotCW1lbWNweSgmbWV0YS0+dHhzdGF0LmNvbnRyb2wsIGN0bCwgc2l6ZW9mKCpjdGwpKTsKIAltZXRhLT5za2IgPSBza2I7CiAJbWV0YS0+aXNfbGFzdF9mcmFnbWVudCA9IDE7CiAKQEAgLTEzMjMsMTQgKzEzNTcsMTMgQEAKIH0KIAogaW50IGI0M2xlZ2FjeV9kbWFfdHgoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCisJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgYjQzbGVnYWN5X2RtYXJpbmcgKnJpbmc7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJpbmcgPSBwcmlvcml0eV90b190eHJpbmcoZGV2LCBjdGwtPnF1ZXVlKTsKKwlyaW5nID0gcHJpb3JpdHlfdG9fdHhyaW5nKGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJQjQzbGVnYWN5X1dBUk5fT04oIXJpbmctPnR4KTsKIAlpZiAodW5saWtlbHkoZnJlZV9zbG90cyhyaW5nKSA8IFNMT1RTX1BFUl9QQUNLRVQpKSB7CkBAIC0xMzQzLDcgKzEzNzYsNyBAQAogCSAqIFRoYXQgd291bGQgYmUgYSBtYWM4MDIxMSBidWcuICovCiAJQjQzbGVnYWN5X0JVR19PTihyaW5nLT5zdG9wcGVkKTsKIAotCWVyciA9IGRtYV90eF9mcmFnbWVudChyaW5nLCBza2IsIGN0bCk7CisJZXJyID0gZG1hX3R4X2ZyYWdtZW50KHJpbmcsIHNrYik7CiAJaWYgKHVubGlrZWx5KGVyciA9PSAtRU5PS0VZKSkgewogCQkvKiBEcm9wIHRoaXMgcGFja2V0LCBhcyB3ZSBkb24ndCBoYXZlIHRoZSBlbmNyeXB0aW9uIGtleQogCQkgKiBhbnltb3JlIGFuZCBtdXN0IG5vdCB0cmFuc21pdCBpdCB1bmVuY3J5cHRlZC4gKi8KQEAgLTE0MDEsMjYgKzE0MzQsMjkgQEAKIAkJCQkJIDEpOwogCiAJCWlmIChtZXRhLT5pc19sYXN0X2ZyYWdtZW50KSB7Ci0JCQlCNDNsZWdhY3lfV0FSTl9PTighbWV0YS0+c2tiKTsKKwkJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwkJCUJVR19PTighbWV0YS0+c2tiKTsKKwkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKG1ldGEtPnNrYik7CiAJCQkvKiBDYWxsIGJhY2sgdG8gaW5mb3JtIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGFib3V0IHRoZQogCQkJICogc3RhdHVzIG9mIHRoZSB0cmFuc21pc3Npb24uCiAJCQkgKiBTb21lIGZpZWxkcyBvZiB0eHN0YXQgYXJlIGFscmVhZHkgZmlsbGVkIGluIGRtYV90eCgpLgogCQkJICovCisKKwkJCW1lbXNldCgmaW5mby0+c3RhdHVzLCAwLCBzaXplb2YoaW5mby0+c3RhdHVzKSk7CisKIAkJCWlmIChzdGF0dXMtPmFja2VkKSB7Ci0JCQkJbWV0YS0+dHhzdGF0LmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLOworCQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKCEobWV0YS0+dHhzdGF0LmNvbnRyb2wuZmxhZ3MKLQkJCQkgICAgICAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spKQotCQkJCQkgbWV0YS0+dHhzdGF0LmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMTsKKwkJCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkKKwkJCQkJIGluZm8tPnN0YXR1cy5leGNlc3NpdmVfcmV0cmllcyA9IDE7CiAJCQl9CiAJCQlpZiAoc3RhdHVzLT5mcmFtZV9jb3VudCA9PSAwKSB7CiAJCQkJLyogVGhlIGZyYW1lIHdhcyBub3QgdHJhbnNtaXR0ZWQgYXQgYWxsLiAqLwotCQkJCW1ldGEtPnR4c3RhdC5yZXRyeV9jb3VudCA9IDA7CisJCQkJaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50ID0gMDsKIAkJCX0gZWxzZQotCQkJCW1ldGEtPnR4c3RhdC5yZXRyeV9jb3VudCA9IHN0YXR1cy0+ZnJhbWVfY291bnQKKwkJCQlpbmZvLT5zdGF0dXMucmV0cnlfY291bnQgPSBzdGF0dXMtPmZyYW1lX2NvdW50CiAJCQkJCQkJICAgLSAxOwotCQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGRldi0+d2wtPmh3LCBtZXRhLT5za2IsCi0JCQkJCQkgICAgJihtZXRhLT50eHN0YXQpKTsKKwkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYtPndsLT5odywgbWV0YS0+c2tiKTsKIAkJCS8qIHNrYiBpcyBmcmVlZCBieSBpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoKSAqLwogCQkJbWV0YS0+c2tiID0gTlVMTDsKIAkJfSBlbHNlIHsKQEAgLTE0NTUsMTggKzE0OTEsMTYgQEAKIHsKIAljb25zdCBpbnQgbnJfcXVldWVzID0gZGV2LT53bC0+aHctPnF1ZXVlczsKIAlzdHJ1Y3QgYjQzbGVnYWN5X2RtYXJpbmcgKnJpbmc7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0c19kYXRhICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcXVldWVzOyBpKyspIHsKLQkJZGF0YSA9ICYoc3RhdHMtPmRhdGFbaV0pOwogCQlyaW5nID0gcHJpb3JpdHlfdG9fdHhyaW5nKGRldiwgaSk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKLQkJZGF0YS0+bGVuID0gcmluZy0+dXNlZF9zbG90cyAvIFNMT1RTX1BFUl9QQUNLRVQ7Ci0JCWRhdGEtPmxpbWl0ID0gcmluZy0+bnJfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOwotCQlkYXRhLT5jb3VudCA9IHJpbmctPm5yX3R4X3BhY2tldHM7CisJCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOworCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gU0xPVFNfUEVSX1BBQ0tFVDsKKwkJc3RhdHNbaV0uY291bnQgPSByaW5nLT5ucl90eF9wYWNrZXRzOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5oCmluZGV4IDJkZDQ4OGMuLjJmMTg2MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmgKQEAgLTE5NSw3ICsxOTUsNiBAQAogCWRtYV9hZGRyX3QgZG1hYWRkcjsKIAkvKiBpZWVlODAyMTEgVFggc3RhdHVzLiBPbmx5IHVzZWQgb25jZSBwZXIgODAyLjExIGZyYWcuICovCiAJYm9vbCBpc19sYXN0X2ZyYWdtZW50OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHR4c3RhdDsKIH07CiAKIHN0cnVjdCBiNDNsZWdhY3lfZG1hcmluZzsKQEAgLTI5Nyw4ICsyOTYsNyBAQAogCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKTsKIAogaW50IGI0M2xlZ2FjeV9kbWFfdHgoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpOworCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBiNDNsZWdhY3lfZG1hX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IGI0M2xlZ2FjeV90eHN0YXR1cyAqc3RhdHVzKTsKIApAQCAtMzIzLDggKzMyMSw3IEBACiB9CiBzdGF0aWMgaW5saW5lCiBpbnQgYjQzbGVnYWN5X2RtYV90eChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCi0JCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0bCkKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKaW5kZXggM2U2MTJkMC4uYTFiOGJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCkBAIC04NDYsMTAgKzg0NiwxMCBAQAogCS8qIEdldCB0aGUgbm9pc2Ugc2FtcGxlcy4gKi8KIAlCNDNsZWdhY3lfV0FSTl9PTihkZXYtPm5vaXNlY2FsYy5ucl9zYW1wbGVzID49IDgpOwogCWkgPSBkZXYtPm5vaXNlY2FsYy5ucl9zYW1wbGVzOwotCW5vaXNlWzBdID0gbGltaXRfdmFsdWUobm9pc2VbMF0sIDAsIEFSUkFZX1NJWkUocGh5LT5ucnNzaV9sdCkgLSAxKTsKLQlub2lzZVsxXSA9IGxpbWl0X3ZhbHVlKG5vaXNlWzFdLCAwLCBBUlJBWV9TSVpFKHBoeS0+bnJzc2lfbHQpIC0gMSk7Ci0Jbm9pc2VbMl0gPSBsaW1pdF92YWx1ZShub2lzZVsyXSwgMCwgQVJSQVlfU0laRShwaHktPm5yc3NpX2x0KSAtIDEpOwotCW5vaXNlWzNdID0gbGltaXRfdmFsdWUobm9pc2VbM10sIDAsIEFSUkFZX1NJWkUocGh5LT5ucnNzaV9sdCkgLSAxKTsKKwlub2lzZVswXSA9IGNsYW1wX3ZhbChub2lzZVswXSwgMCwgQVJSQVlfU0laRShwaHktPm5yc3NpX2x0KSAtIDEpOworCW5vaXNlWzFdID0gY2xhbXBfdmFsKG5vaXNlWzFdLCAwLCBBUlJBWV9TSVpFKHBoeS0+bnJzc2lfbHQpIC0gMSk7CisJbm9pc2VbMl0gPSBjbGFtcF92YWwobm9pc2VbMl0sIDAsIEFSUkFZX1NJWkUocGh5LT5ucnNzaV9sdCkgLSAxKTsKKwlub2lzZVszXSA9IGNsYW1wX3ZhbChub2lzZVszXSwgMCwgQVJSQVlfU0laRShwaHktPm5yc3NpX2x0KSAtIDEpOwogCWRldi0+bm9pc2VjYWxjLnNhbXBsZXNbaV1bMF0gPSBwaHktPm5yc3NpX2x0W25vaXNlWzBdXTsKIAlkZXYtPm5vaXNlY2FsYy5zYW1wbGVzW2ldWzFdID0gcGh5LT5ucnNzaV9sdFtub2lzZVsxXV07CiAJZGV2LT5ub2lzZWNhbGMuc2FtcGxlc1tpXVsyXSA9IHBoeS0+bnJzc2lfbHRbbm9pc2VbMl1dOwpAQCAtMTEzOCwxNCArMTEzOCwyMiBAQAogCiAvKiBBc3luY2hyb25vdXNseSB1cGRhdGUgdGhlIHBhY2tldCB0ZW1wbGF0ZXMgaW4gdGVtcGxhdGUgUkFNLgogICogTG9ja2luZzogUmVxdWlyZXMgd2wtPmlycV9sb2NrIHRvIGJlIGxvY2tlZC4gKi8KLXN0YXRpYyB2b2lkIGI0M2xlZ2FjeV91cGRhdGVfdGVtcGxhdGVzKHN0cnVjdCBiNDNsZWdhY3lfd2wgKndsLAotCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uKQorc3RhdGljIHZvaWQgYjQzbGVnYWN5X3VwZGF0ZV90ZW1wbGF0ZXMoc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wpCiB7CisJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKIAkvKiBUaGlzIGlzIHRoZSB0b3AgaGFsZiBvZiB0aGUgYW5zeW5jaHJvbm91cyBiZWFjb24gdXBkYXRlLiBUaGUgYm90dG9tCiAJICogaGFsZiBpcyB0aGUgYmVhY29uIElSUS4gQmVhY29uIHVwZGF0ZSBtdXN0IGJlIGFzeW5jaHJvbm91cyB0byBhdm9pZAogCSAqIHNlbmRpbmcgYW4gaW52YWxpZCBiZWFjb24uIFRoaXMgY2FuIGhhcHBlbiBmb3IgZXhhbXBsZSwgaWYgdGhlCiAJICogZmlybXdhcmUgdHJhbnNtaXRzIGEgYmVhY29uIHdoaWxlIHdlIGFyZSB1cGRhdGluZyBpdC4gKi8KIAorCS8qIFdlIGNvdWxkIG1vZGlmeSB0aGUgZXhpc3RpbmcgYmVhY29uIGFuZCBzZXQgdGhlIGFpZCBiaXQgaW4gdGhlIFRJTQorCSAqIGZpZWxkLCBidXQgdGhhdCB3b3VsZCBwcm9iYWJseSByZXF1aXJlIHJlc2l6aW5nIGFuZCBtb3Zpbmcgb2YgZGF0YQorCSAqIHdpdGhpbiB0aGUgYmVhY29uIHRlbXBsYXRlLiBTaW1wbHkgcmVxdWVzdCBhIG5ldyBiZWFjb24gYW5kIGxldAorCSAqIG1hYzgwMjExIGRvIHRoZSBoYXJkIHdvcmsuICovCisJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod2wtPmh3LCB3bC0+dmlmKTsKKwlpZiAodW5saWtlbHkoIWJlYWNvbikpCisJCXJldHVybjsKKwogCWlmICh3bC0+Y3VycmVudF9iZWFjb24pCiAJCWRldl9rZnJlZV9za2JfYW55KHdsLT5jdXJyZW50X2JlYWNvbik7CiAJd2wtPmN1cnJlbnRfYmVhY29uID0gYmVhY29uOwpAQCAtMjM1OCw4ICsyMzY2LDcgQEAKIH0KIAogc3RhdGljIGludCBiNDNsZWdhY3lfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBiNDNsZWdhY3lfd2wgKndsID0gaHdfdG9fYjQzbGVnYWN5X3dsKGh3KTsKIAlzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7CkBAIC0yMzczLDEwICsyMzgwLDEwIEBACiAJLyogRE1BLVRYIGlzIGRvbmUgd2l0aG91dCBhIGdsb2JhbCBsb2NrLiAqLwogCWlmIChiNDNsZWdhY3lfdXNpbmdfcGlvKGRldikpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwotCQllcnIgPSBiNDNsZWdhY3lfcGlvX3R4KGRldiwgc2tiLCBjdGwpOworCQllcnIgPSBiNDNsZWdhY3lfcGlvX3R4KGRldiwgc2tiKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAJfSBlbHNlCi0JCWVyciA9IGI0M2xlZ2FjeV9kbWFfdHgoZGV2LCBza2IsIGN0bCk7CisJCWVyciA9IGI0M2xlZ2FjeV9kbWFfdHgoZGV2LCBza2IpOwogb3V0OgogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCS8qIERyb3AgdGhlIHBhY2tldC4gKi8KQEAgLTIzODUsOCArMjM5Miw3IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGludCBiNDNsZWdhY3lfb3BfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlpbnQgcXVldWUsCitzdGF0aWMgaW50IGI0M2xlZ2FjeV9vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKIAlyZXR1cm4gMDsKQEAgLTI3MjksMTAgKzI3MzUsMTMgQEAKIAkJbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOwogCWlmIChiNDNsZWdhY3lfc3RhdHVzKGRldikgPj0gQjQzbGVnYWN5X1NUQVRfSU5JVElBTElaRUQpIHsKIAkJaWYgKGI0M2xlZ2FjeV9pc19tb2RlKHdsLCBJRUVFODAyMTFfSUZfVFlQRV9BUCkpIHsKLQkJCUI0M2xlZ2FjeV9XQVJOX09OKGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVApOworCQkJQjQzbGVnYWN5X1dBUk5fT04odmlmLT50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0FQKTsKIAkJCWI0M2xlZ2FjeV9zZXRfc3NpZChkZXYsIGNvbmYtPnNzaWQsIGNvbmYtPnNzaWRfbGVuKTsKLQkJCWlmIChjb25mLT5iZWFjb24pCi0JCQkJYjQzbGVnYWN5X3VwZGF0ZV90ZW1wbGF0ZXMod2wsIGNvbmYtPmJlYWNvbik7CisJCQlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikKKwkJCQliNDNsZWdhY3lfdXBkYXRlX3RlbXBsYXRlcyh3bCk7CisJCX0gZWxzZSBpZiAoYjQzbGVnYWN5X2lzX21vZGUod2wsIElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpKSB7CisJCQlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikKKwkJCQliNDNsZWdhY3lfdXBkYXRlX3RlbXBsYXRlcyh3bCk7CiAJCX0KIAkJYjQzbGVnYWN5X3dyaXRlX21hY19ic3NpZF90ZW1wbGF0ZXMoZGV2KTsKIAl9CkBAIC0yNzk3LDcgKzI4MDYsNiBAQAogCS8qIFN0YXJ0IGRhdGEgZmxvdyAoVFgvUlgpICovCiAJYjQzbGVnYWN5X21hY19lbmFibGUoZGV2KTsKIAliNDNsZWdhY3lfaW50ZXJydXB0X2VuYWJsZShkZXYsIGRldi0+aXJxX3NhdmVkc3RhdGUpOwotCWllZWU4MDIxMV9zdGFydF9xdWV1ZXMoZGV2LT53bC0+aHcpOwogCiAJLyogU3RhcnQgbWFpbnRlbmFuY2Ugd29yayAqLwogCWI0M2xlZ2FjeV9wZXJpb2RpY190YXNrc19zZXR1cChkZXYpOwpAQCAtMzM5OSwzMiArMzQwNywxMCBAQAogCQkJCSAgICAgICBpbnQgYWlkLCBpbnQgc2V0KQogewogCXN0cnVjdCBiNDNsZWdhY3lfd2wgKndsID0gaHdfdG9fYjQzbGVnYWN5X3dsKGh3KTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBXZSBjb3VsZCBtb2RpZnkgdGhlIGV4aXN0aW5nIGJlYWNvbiBhbmQgc2V0IHRoZSBhaWQgYml0IGluIHRoZSBUSU0KLQkgKiBmaWVsZCwgYnV0IHRoYXQgd291bGQgcHJvYmFibHkgcmVxdWlyZSByZXNpemluZyBhbmQgbW92aW5nIG9mIGRhdGEKLQkgKiB3aXRoaW4gdGhlIGJlYWNvbiB0ZW1wbGF0ZS4gU2ltcGx5IHJlcXVlc3QgYSBuZXcgYmVhY29uIGFuZCBsZXQKLQkgKiBtYWM4MDIxMSBkbyB0aGUgaGFyZCB3b3JrLiAqLwotCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB3bC0+dmlmLCBOVUxMKTsKLQlpZiAodW5saWtlbHkoIWJlYWNvbikpCi0JCXJldHVybiAtRU5PTUVNOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKLQliNDNsZWdhY3lfdXBkYXRlX3RlbXBsYXRlcyh3bCwgYmVhY29uKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGI0M2xlZ2FjeV9vcF9pYnNzX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSAgIHN0cnVjdCBza19idWZmICpiZWFjb24sCi0JCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKQotewotCXN0cnVjdCBiNDNsZWdhY3lfd2wgKndsID0gaHdfdG9fYjQzbGVnYWN5X3dsKGh3KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwotCWI0M2xlZ2FjeV91cGRhdGVfdGVtcGxhdGVzKHdsLCBiZWFjb24pOworCWI0M2xlZ2FjeV91cGRhdGVfdGVtcGxhdGVzKHdsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMzQ0NCw3ICszNDMwLDYgQEAKIAkuc3RvcAkJCT0gYjQzbGVnYWN5X29wX3N0b3AsCiAJLnNldF9yZXRyeV9saW1pdAk9IGI0M2xlZ2FjeV9vcF9zZXRfcmV0cnlfbGltaXQsCiAJLnNldF90aW0JCT0gYjQzbGVnYWN5X29wX2JlYWNvbl9zZXRfdGltLAotCS5iZWFjb25fdXBkYXRlCQk9IGI0M2xlZ2FjeV9vcF9pYnNzX2JlYWNvbl91cGRhdGUsCiB9OwogCiAvKiBIYXJkLXJlc2V0IHRoZSBjaGlwLiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LgpAQCAtMzcxOCwxMCArMzcwMyw5IEBACiAKIAkvKiBmaWxsIGh3IGluZm8gKi8KIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFIHwKLQkJICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1M7Ci0JaHctPm1heF9zaWduYWwgPSAxMDA7Ci0JaHctPm1heF9yc3NpID0gLTExMDsKLQlody0+bWF4X25vaXNlID0gLTExMDsKKwkJICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQkgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKIAlody0+cXVldWVzID0gMTsgLyogRklYTUU6IGhhcmR3YXJlIGhhcyBtb3JlIHF1ZXVlcyAqLwogCVNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYtPmRldik7CiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoc3Byb20tPmV0MW1hYykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGh5LmMKaW5kZXggOGU1YzA5Yi4uNzY4Y2NjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waHkuYwpAQCAtMTA4OCw3ICsxMDg4LDcgQEAKIAkJICogdGhlIHZhbHVlIDB4N0ZGRkZGRkYgaGVyZS4gSSB0aGluayB0aGF0IGlzIHNvbWUgd2VpcmQKIAkJICogY29tcGlsZXIgb3B0aW1pemF0aW9uIGluIHRoZSBvcmlnaW5hbCBkcml2ZXIuCiAJCSAqIEVzc2VudGlhbGx5LCB3aGF0IHdlIGRvIGhlcmUgaXMgcmVzZXR0aW5nIGFsbCBOUlNTSSBMVAotCQkgKiBlbnRyaWVzIHRvIC0zMiAoc2VlIHRoZSBsaW1pdF92YWx1ZSgpIGluIG5yc3NpX2h3X3VwZGF0ZSgpKQorCQkgKiBlbnRyaWVzIHRvIC0zMiAoc2VlIHRoZSBjbGFtcF92YWwoKSBpbiBucnNzaV9od191cGRhdGUoKSkKIAkJICovCiAJCWI0M2xlZ2FjeV9ucnNzaV9od191cGRhdGUoZGV2LCAweEZGRkYpOwogCQliNDNsZWdhY3lfY2FsY19ucnNzaV90aHJlc2hvbGQoZGV2KTsKQEAgLTE3NTYsNyArMTc1Niw3IEBACiAJc3dpdGNoIChwaHktPnR5cGUpIHsKIAljYXNlIEI0M2xlZ2FjeV9QSFlUWVBFX0I6CiAJY2FzZSBCNDNsZWdhY3lfUEhZVFlQRV9HOgotCQl0bXAgPSBsaW1pdF92YWx1ZSh0bXAsIDB4MDAsIDB4M0YpOworCQl0bXAgPSBjbGFtcF92YWwodG1wLCAweDAwLCAweDNGKTsKIAkJZGJtID0gcGh5LT50c3NpMmRibVt0bXBdOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTg1OSw3ICsxODU5LDcgQEAKIAogCS8qIGZpbmQgdGhlIGRlc2lyZWQgcG93ZXIgaW4gUTUuMiAtIHBvd2VyX2xldmVsIGlzIGluIGRCbQogCSAqIGFuZCBsaW1pdCBpdCAtIG1heF9wd3IgaXMgYWxyZWFkeSBpbiBRNS4yICovCi0JZGVzaXJlZF9wd3IgPSBsaW1pdF92YWx1ZShwaHktPnBvd2VyX2xldmVsIDw8IDIsIDAsIG1heF9wd3IpOworCWRlc2lyZWRfcHdyID0gY2xhbXBfdmFsKHBoeS0+cG93ZXJfbGV2ZWwgPDwgMiwgMCwgbWF4X3B3cik7CiAJaWYgKGI0M2xlZ2FjeV9kZWJ1ZyhkZXYsIEI0M2xlZ2FjeV9EQkdfWE1JVFBPV0VSKSkKIAkJYjQzbGVnYWN5ZGJnKGRldi0+d2wsICJDdXJyZW50IFRYIHBvd2VyIG91dHB1dDogIiBRNTJfRk1UCiAJCSAgICAgICAiIGRCbSwgRGVzaXJlZCBUWCBwb3dlciBvdXRwdXQ6ICIgUTUyX0ZNVApAQCAtMTkwNSw3ICsxOTA1LDcgQEAKIAkJCXJhZGlvX2F0dGVudWF0aW9uKys7CiAJCX0KIAl9Ci0JYmFzZWJhbmRfYXR0ZW51YXRpb24gPSBsaW1pdF92YWx1ZShiYXNlYmFuZF9hdHRlbnVhdGlvbiwgMCwgMTEpOworCWJhc2ViYW5kX2F0dGVudWF0aW9uID0gY2xhbXBfdmFsKGJhc2ViYW5kX2F0dGVudWF0aW9uLCAwLCAxMSk7CiAKIAl0eHBvd2VyID0gcGh5LT50eGN0bDE7CiAJaWYgKChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTApICYmIChwaHktPnJhZGlvX3JldiA9PSAyKSkgewpAQCAtMTkzMyw4ICsxOTMzLDggQEAKIAl9CiAJLyogU2F2ZSB0aGUgY29udHJvbCB2YWx1ZXMgKi8KIAlwaHktPnR4Y3RsMSA9IHR4cG93ZXI7Ci0JYmFzZWJhbmRfYXR0ZW51YXRpb24gPSBsaW1pdF92YWx1ZShiYXNlYmFuZF9hdHRlbnVhdGlvbiwgMCwgMTEpOwotCXJhZGlvX2F0dGVudWF0aW9uID0gbGltaXRfdmFsdWUocmFkaW9fYXR0ZW51YXRpb24sIDAsIDkpOworCWJhc2ViYW5kX2F0dGVudWF0aW9uID0gY2xhbXBfdmFsKGJhc2ViYW5kX2F0dGVudWF0aW9uLCAwLCAxMSk7CisJcmFkaW9fYXR0ZW51YXRpb24gPSBjbGFtcF92YWwocmFkaW9fYXR0ZW51YXRpb24sIDAsIDkpOwogCXBoeS0+cmZhdHQgPSByYWRpb19hdHRlbnVhdGlvbjsKIAlwaHktPmJiYXR0ID0gYmFzZWJhbmRfYXR0ZW51YXRpb247CiAKQEAgLTE5NzksNyArMTk3OSw3IEBACiAJCWYgPSBxOwogCQlpKys7CiAJfSB3aGlsZSAoZGVsdGEgPj0gMik7Ci0JZW50cnlbaW5kZXhdID0gbGltaXRfdmFsdWUoYjQzbGVnYWN5X3Rzc2kyZGJtX2FkKG0xICogZiwgODE5MiksCisJZW50cnlbaW5kZXhdID0gY2xhbXBfdmFsKGI0M2xlZ2FjeV90c3NpMmRibV9hZChtMSAqIGYsIDgxOTIpLAogCQkJCSAgIC0xMjcsIDEyOCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmMKaW5kZXggYmNkZDU0ZS4uYTg2Yzc2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waW8uYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJQjQzbGVnYWN5X1dBUk5fT04oc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAhPSAwKTsKIAllcnIgPSBiNDNsZWdhY3lfZ2VuZXJhdGVfdHhoZHIocXVldWUtPmRldiwKIAkJCQkgdHhoZHIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJICZwYWNrZXQtPnR4c3RhdC5jb250cm9sLAorCQkJCSBJRUVFODAyMTFfU0tCX0NCKHNrYiksCiAJCQkJIGdlbmVyYXRlX2Nvb2tpZShxdWV1ZSwgcGFja2V0KSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTQ2Myw4ICs0NjMsNyBAQAogfQogCiBpbnQgYjQzbGVnYWN5X3Bpb190eChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCi0JCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0bCkKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBiNDNsZWdhY3lfcGlvcXVldWUgKnF1ZXVlID0gZGV2LT5waW8ucXVldWUxOwogCXN0cnVjdCBiNDNsZWdhY3lfcGlvX3R4cGFja2V0ICpwYWNrZXQ7CkBAIC00NzYsOSArNDc1LDYgQEAKIAkJCSAgICBsaXN0KTsKIAlwYWNrZXQtPnNrYiA9IHNrYjsKIAotCW1lbXNldCgmcGFja2V0LT50eHN0YXQsIDAsIHNpemVvZihwYWNrZXQtPnR4c3RhdCkpOwotCW1lbWNweSgmcGFja2V0LT50eHN0YXQuY29udHJvbCwgY3RsLCBzaXplb2YoKmN0bCkpOwotCiAJbGlzdF9tb3ZlX3RhaWwoJnBhY2tldC0+bGlzdCwgJnF1ZXVlLT50eHF1ZXVlKTsKIAlxdWV1ZS0+bnJfdHhmcmVlLS07CiAJcXVldWUtPm5yX3R4X3BhY2tldHMrKzsKQEAgLTQ5NCw2ICs0OTAsNyBAQAogewogCXN0cnVjdCBiNDNsZWdhY3lfcGlvcXVldWUgKnF1ZXVlOwogCXN0cnVjdCBiNDNsZWdhY3lfcGlvX3R4cGFja2V0ICpwYWNrZXQ7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCiAJcXVldWUgPSBwYXJzZV9jb29raWUoZGV2LCBzdGF0dXMtPmNvb2tpZSwgJnBhY2tldCk7CiAJQjQzbGVnYWN5X1dBUk5fT04oIXF1ZXVlKTsKQEAgLTUwNSwxMSArNTAyLDEzIEBACiAJcXVldWUtPnR4X2RldnFfdXNlZCAtPSAocGFja2V0LT5za2ItPmxlbiArCiAJCQkJc2l6ZW9mKHN0cnVjdCBiNDNsZWdhY3lfdHhoZHJfZnczKSk7CiAKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwYWNrZXQtPnNrYik7CisJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKwogCWlmIChzdGF0dXMtPmFja2VkKQotCQlwYWNrZXQtPnR4c3RhdC5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVFVTX0FDSzsKLQlwYWNrZXQtPnR4c3RhdC5yZXRyeV9jb3VudCA9IHN0YXR1cy0+ZnJhbWVfY291bnQgLSAxOwotCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYtPndsLT5odywgcGFja2V0LT5za2IsCi0JCQkJICAgICYocGFja2V0LT50eHN0YXQpKTsKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCWluZm8tPnN0YXR1cy5yZXRyeV9jb3VudCA9IHN0YXR1cy0+ZnJhbWVfY291bnQgLSAxOworCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYtPndsLT5odywgcGFja2V0LT5za2IpOwogCXBhY2tldC0+c2tiID0gTlVMTDsKIAogCWZyZWVfdHhwYWNrZXQocGFja2V0LCAxKTsKQEAgLTUyNSwxMyArNTI0LDExIEBACiB7CiAJc3RydWN0IGI0M2xlZ2FjeV9waW8gKnBpbyA9ICZkZXYtPnBpbzsKIAlzdHJ1Y3QgYjQzbGVnYWN5X3Bpb3F1ZXVlICpxdWV1ZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzX2RhdGEgKmRhdGE7CiAKIAlxdWV1ZSA9IHBpby0+cXVldWUxOwotCWRhdGEgPSAmKHN0YXRzLT5kYXRhWzBdKTsKLQlkYXRhLT5sZW4gPSBCNDNsZWdhY3lfUElPX01BWFRYUEFDS0VUUyAtIHF1ZXVlLT5ucl90eGZyZWU7Ci0JZGF0YS0+bGltaXQgPSBCNDNsZWdhY3lfUElPX01BWFRYUEFDS0VUUzsKLQlkYXRhLT5jb3VudCA9IHF1ZXVlLT5ucl90eF9wYWNrZXRzOworCXN0YXRzWzBdLmxlbiA9IEI0M2xlZ2FjeV9QSU9fTUFYVFhQQUNLRVRTIC0gcXVldWUtPm5yX3R4ZnJlZTsKKwlzdGF0c1swXS5saW1pdCA9IEI0M2xlZ2FjeV9QSU9fTUFYVFhQQUNLRVRTOworCXN0YXRzWzBdLmNvdW50ID0gcXVldWUtPm5yX3R4X3BhY2tldHM7CiB9CiAKIHN0YXRpYyB2b2lkIHBpb19yeF9lcnJvcihzdHJ1Y3QgYjQzbGVnYWN5X3Bpb3F1ZXVlICpxdWV1ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waW8uaAppbmRleCA1YmZlZDBjLi40NjRmZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3Bpby5oCkBAIC00MSw3ICs0MSw2IEBACiBzdHJ1Y3QgYjQzbGVnYWN5X3Bpb190eHBhY2tldCB7CiAJc3RydWN0IGI0M2xlZ2FjeV9waW9xdWV1ZSAqcXVldWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyB0eHN0YXQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtMTA0LDggKzEwMyw3IEBACiB2b2lkIGI0M2xlZ2FjeV9waW9fZnJlZShzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpOwogCiBpbnQgYjQzbGVnYWN5X3Bpb190eChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCi0JCSAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKTsKKwkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGI0M2xlZ2FjeV9waW9faGFuZGxlX3R4c3RhdHVzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKIAkJCQkgY29uc3Qgc3RydWN0IGI0M2xlZ2FjeV90eHN0YXR1cyAqc3RhdHVzKTsKIHZvaWQgYjQzbGVnYWN5X3Bpb19nZXRfdHhfc3RhdHMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LApAQCAtMTMyLDggKzEzMCw3IEBACiB9CiBzdGF0aWMgaW5saW5lCiBpbnQgYjQzbGVnYWN5X3Bpb190eChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCi0JCSAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKQorCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3JhZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcmFkaW8uYwppbmRleCA5NTU4MzJlLi4yZGY1NDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcmFkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcmFkaW8uYwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKIAkJdG1wID0gYjQzbGVnYWN5X25yc3NpX2h3X3JlYWQoZGV2LCBpKTsKIAkJdG1wIC09IHZhbDsKLQkJdG1wID0gbGltaXRfdmFsdWUodG1wLCAtMzIsIDMxKTsKKwkJdG1wID0gY2xhbXBfdmFsKHRtcCwgLTMyLCAzMSk7CiAJCWI0M2xlZ2FjeV9ucnNzaV9od193cml0ZShkZXYsIGksIHRtcCk7CiAJfQogfQpAQCAtMzc1LDcgKzM3NSw3IEBACiAJCXRtcCA9IChpIC0gZGVsdGEpICogcGh5LT5ucnNzaXNsb3BlOwogCQl0bXAgLz0gMHgxMDAwMDsKIAkJdG1wICs9IDB4M0E7Ci0JCXRtcCA9IGxpbWl0X3ZhbHVlKHRtcCwgMCwgMHgzRik7CisJCXRtcCA9IGNsYW1wX3ZhbCh0bXAsIDAsIDB4M0YpOwogCQlwaHktPm5yc3NpX2x0W2ldID0gdG1wOwogCX0KIH0KQEAgLTgzOSw3ICs4MzksNyBAQAogCQl9IGVsc2UKIAkJCXRocmVzaG9sZCA9IHBoeS0+bnJzc2lbMV0gLSA1OwogCi0JCXRocmVzaG9sZCA9IGxpbWl0X3ZhbHVlKHRocmVzaG9sZCwgMCwgMHgzRSk7CisJCXRocmVzaG9sZCA9IGNsYW1wX3ZhbCh0aHJlc2hvbGQsIDAsIDB4M0UpOwogCQliNDNsZWdhY3lfcGh5X3JlYWQoZGV2LCAweDAwMjApOyAvKiBkdW1teSByZWFkICovCiAJCWI0M2xlZ2FjeV9waHlfd3JpdGUoZGV2LCAweDAwMjAsICgoKHUxNil0aHJlc2hvbGQpIDw8IDgpCiAJCQkJICAgIHwgMHgwMDFDKTsKQEAgLTg5Miw3ICs4OTIsNyBAQAogCQkJZWxzZQogCQkJCWEgKz0gMzI7CiAJCQlhID0gYSA+PiA2OwotCQkJYSA9IGxpbWl0X3ZhbHVlKGEsIC0zMSwgMzEpOworCQkJYSA9IGNsYW1wX3ZhbChhLCAtMzEsIDMxKTsKIAogCQkJYiA9IGIgKiAocGh5LT5ucnNzaVsxXSAtIHBoeS0+bnJzc2lbMF0pOwogCQkJYiArPSAocGh5LT5ucnNzaVswXSA8PCA2KTsKQEAgLTkwMSw3ICs5MDEsNyBAQAogCQkJZWxzZQogCQkJCWIgKz0gMzI7CiAJCQliID0gYiA+PiA2OwotCQkJYiA9IGxpbWl0X3ZhbHVlKGIsIC0zMSwgMzEpOworCQkJYiA9IGNsYW1wX3ZhbChiLCAtMzEsIDMxKTsKIAogCQkJdG1wX3UxNiA9IGI0M2xlZ2FjeV9waHlfcmVhZChkZXYsIDB4MDQ4QSkgJiAweEYwMDA7CiAJCQl0bXBfdTE2IHw9ICgodTMyKWIgJiAweDAwMDAwMDNGKTsKQEAgLTE5MDUsNyArMTkwNSw3IEBACiAJdTE2IGRhYzsKIAl1MTYgaWx0OwogCi0JdHhwb3dlciA9IGxpbWl0X3ZhbHVlKHR4cG93ZXIsIDAsIDYzKTsKKwl0eHBvd2VyID0gY2xhbXBfdmFsKHR4cG93ZXIsIDAsIDYzKTsKIAogCXBhbXAgPSBiNDNsZWdhY3lfZ2V0X3R4Z2Fpbl9mcmVxX3Bvd2VyX2FtcCh0eHBvd2VyKTsKIAlwYW1wIDw8PSA1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3Jma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3Jma2lsbC5jCmluZGV4IGQxNzhkZmIuLjQ3NmFkZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9yZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcmZraWxsLmMKQEAgLTQ0LDYgKzQ0LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFVwZGF0ZSB0aGUgcmZraWxsIHN0YXRlICovCitzdGF0aWMgdm9pZCBiNDNsZWdhY3lfcmZraWxsX3VwZGF0ZV9zdGF0ZShzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M2xlZ2FjeV9yZmtpbGwgKnJmayA9ICYoZGV2LT53bC0+cmZraWxsKTsKKworCWlmICghZGV2LT5yYWRpb19od19lbmFibGUpIHsKKwkJcmZrLT5yZmtpbGwtPnN0YXRlID0gUkZLSUxMX1NUQVRFX0hBUkRfQkxPQ0tFRDsKKwkJcmV0dXJuOworCX0KKworCWlmICghZGV2LT5waHkucmFkaW9fb24pCisJCXJmay0+cmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQ7CisJZWxzZQorCQlyZmstPnJma2lsbC0+c3RhdGUgPSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOworCit9CisKIC8qIFRoZSBwb2xsIGNhbGxiYWNrIGZvciB0aGUgaGFyZHdhcmUgYnV0dG9uLiAqLwogc3RhdGljIHZvaWQgYjQzbGVnYWN5X3Jma2lsbF9wb2xsKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldikKIHsKQEAgLTYxLDYgKzc4LDcgQEAKIAlpZiAodW5saWtlbHkoZW5hYmxlZCAhPSBkZXYtPnJhZGlvX2h3X2VuYWJsZSkpIHsKIAkJZGV2LT5yYWRpb19od19lbmFibGUgPSBlbmFibGVkOwogCQlyZXBvcnRfY2hhbmdlID0gMTsKKwkJYjQzbGVnYWN5X3Jma2lsbF91cGRhdGVfc3RhdGUoZGV2KTsKIAkJYjQzbGVnYWN5aW5mbyh3bCwgIlJhZGlvIGhhcmR3YXJlIHN0YXR1cyBjaGFuZ2VkIHRvICVzXG4iLAogCQkJZW5hYmxlZCA/ICJFTkFCTEVEIiA6ICJESVNBQkxFRCIpOwogCX0KQEAgLTkwLDcgKzEwOCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAllcnIgPSAwOwogCXN3aXRjaCAoc3RhdGUpIHsKLQljYXNlIFJGS0lMTF9TVEFURV9PTjoKKwljYXNlIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ6CiAJCWlmICghZGV2LT5yYWRpb19od19lbmFibGUpIHsKIAkJCS8qIE5vIGx1Y2suIFdlIGNhbid0IHRvZ2dsZSB0aGUgaGFyZHdhcmUgUkYta2lsbAogCQkJICogYnV0dG9uIGZyb20gc29mdHdhcmUuICovCkBAIC0xMDAsMTAgKzExOCwxNCBAQAogCQlpZiAoIWRldi0+cGh5LnJhZGlvX29uKQogCQkJYjQzbGVnYWN5X3JhZGlvX3R1cm5fb24oZGV2KTsKIAkJYnJlYWs7Ci0JY2FzZSBSRktJTExfU1RBVEVfT0ZGOgorCWNhc2UgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDoKIAkJaWYgKGRldi0+cGh5LnJhZGlvX29uKQogCQkJYjQzbGVnYWN5X3JhZGlvX3R1cm5fb2ZmKGRldiwgMCk7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCWI0M2xlZ2FjeXdhcm4od2wsICJSZWNlaXZlZCB1bmV4cGVjdGVkIHJma2lsbCBzdGF0ZSAlZC5cbiIsCisJCQkgICAgICBzdGF0ZSk7CisJCWJyZWFrOwogCX0KIAogb3V0X3VubG9jazoKQEAgLTEzNSw3ICsxNTcsNyBAQAogCXNucHJpbnRmKHJmay0+bmFtZSwgc2l6ZW9mKHJmay0+bmFtZSksCiAJCSAiYjQzbGVnYWN5LSVzIiwgd2lwaHlfbmFtZSh3bC0+aHctPndpcGh5KSk7CiAJcmZrLT5yZmtpbGwtPm5hbWUgPSByZmstPm5hbWU7Ci0JcmZrLT5yZmtpbGwtPnN0YXRlID0gUkZLSUxMX1NUQVRFX09OOworCXJmay0+cmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7CiAJcmZrLT5yZmtpbGwtPmRhdGEgPSBkZXY7CiAJcmZrLT5yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IGI0M2xlZ2FjeV9yZmtpbGxfc29mdF90b2dnbGU7CiAJcmZrLT5yZmtpbGwtPnVzZXJfY2xhaW1fdW5zdXBwb3J0ZWQgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS94bWl0LmMKaW5kZXggZGNhZDI0OS4uZTk2OWVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kveG1pdC5jCkBAIC0xODgsMTEgKzE4OCwxMSBAQAogCQkJICAgICAgIHN0cnVjdCBiNDNsZWdhY3lfdHhoZHJfZnczICp0eGhkciwKIAkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcmFnbWVudF9kYXRhLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBmcmFnbWVudF9sZW4sCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICp0eGN0bCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQkgICAgICAgdTE2IGNvb2tpZSkKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2xoZHI7Ci0JaW50IHVzZV9lbmNyeXB0aW9uID0gKCEodHhjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0RPX05PVF9FTkNSWVBUKSk7CisJaW50IHVzZV9lbmNyeXB0aW9uID0gKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0RPX05PVF9FTkNSWVBUKSk7CiAJdTE2IGZjdGw7CiAJdTggcmF0ZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVfZmI7CkBAIC0yMDEsMTUgKzIwMSwxOCBAQAogCXVuc2lnbmVkIGludCBwbGNwX2ZyYWdtZW50X2xlbjsKIAl1MzIgbWFjX2N0bCA9IDA7CiAJdTE2IHBoeV9jdGwgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqdHhfcmF0ZTsKIAogCXdsaGRyID0gKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICopZnJhZ21lbnRfZGF0YTsKIAlmY3RsID0gbGUxNl90b19jcHUod2xoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJbWVtc2V0KHR4aGRyLCAwLCBzaXplb2YoKnR4aGRyKSk7CiAKLQlyYXRlID0gdHhjdGwtPnR4X3JhdGUtPmh3X3ZhbHVlOworCXR4X3JhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LT53bC0+aHcsIGluZm8pOworCisJcmF0ZSA9IHR4X3JhdGUtPmh3X3ZhbHVlOwogCXJhdGVfb2ZkbSA9IGI0M2xlZ2FjeV9pc19vZmRtX3JhdGUocmF0ZSk7Ci0JcmF0ZV9mYiA9IHR4Y3RsLT5hbHRfcmV0cnlfcmF0ZSA/IDogdHhjdGwtPnR4X3JhdGU7CisJcmF0ZV9mYiA9IGllZWU4MDIxMV9nZXRfYWx0X3JldHJ5X3JhdGUoZGV2LT53bC0+aHcsIGluZm8pID8gOiB0eF9yYXRlOwogCXJhdGVfZmJfb2ZkbSA9IGI0M2xlZ2FjeV9pc19vZmRtX3JhdGUocmF0ZV9mYi0+aHdfdmFsdWUpOwogCiAJdHhoZHItPm1hY19mcmFtZV9jdGwgPSB3bGhkci0+ZnJhbWVfY29udHJvbDsKQEAgLTIyNSwxNCArMjI4LDE0IEBACiAJCXR4aGRyLT5kdXJfZmIgPSB3bGhkci0+ZHVyYXRpb25faWQ7CiAJfSBlbHNlIHsKIAkJdHhoZHItPmR1cl9mYiA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKGRldi0+d2wtPmh3LAotCQkJCQkJCSB0eGN0bC0+dmlmLAorCQkJCQkJCSBpbmZvLT5jb250cm9sLnZpZiwKIAkJCQkJCQkgZnJhZ21lbnRfbGVuLAogCQkJCQkJCSByYXRlX2ZiKTsKIAl9CiAKIAlwbGNwX2ZyYWdtZW50X2xlbiA9IGZyYWdtZW50X2xlbiArIEZDU19MRU47CiAJaWYgKHVzZV9lbmNyeXB0aW9uKSB7Ci0JCXU4IGtleV9pZHggPSAodTE2KSh0eGN0bC0+a2V5X2lkeCk7CisJCXU4IGtleV9pZHggPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKIAkJc3RydWN0IGI0M2xlZ2FjeV9rZXkgKmtleTsKIAkJaW50IHdsaGRyX2xlbjsKIAkJc2l6ZV90IGl2X2xlbjsKQEAgLTI0Miw3ICsyNDUsNyBAQAogCiAJCWlmIChrZXktPmVuYWJsZWQpIHsKIAkJCS8qIEhhcmR3YXJlIGFwcGVuZHMgSUNWLiAqLwotCQkJcGxjcF9mcmFnbWVudF9sZW4gKz0gdHhjdGwtPmljdl9sZW47CisJCQlwbGNwX2ZyYWdtZW50X2xlbiArPSBpbmZvLT5jb250cm9sLmljdl9sZW47CiAKIAkJCWtleV9pZHggPSBiNDNsZWdhY3lfa2lkeF90b19mdyhkZXYsIGtleV9pZHgpOwogCQkJbWFjX2N0bCB8PSAoa2V5X2lkeCA8PCBCNDNsZWdhY3lfVFg0X01BQ19LRVlJRFhfU0hJRlQpICYKQEAgLTI1MSw3ICsyNTQsNyBAQAogCQkJCSAgIEI0M2xlZ2FjeV9UWDRfTUFDX0tFWUFMR19TSElGVCkgJgogCQkJCSAgIEI0M2xlZ2FjeV9UWDRfTUFDX0tFWUFMRzsKIAkJCXdsaGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGZjdGwpOwotCQkJaXZfbGVuID0gbWluKChzaXplX3QpdHhjdGwtPml2X2xlbiwKKwkJCWl2X2xlbiA9IG1pbigoc2l6ZV90KWluZm8tPmNvbnRyb2wuaXZfbGVuLAogCQkJCSAgICAgQVJSQVlfU0laRSh0eGhkci0+aXYpKTsKIAkJCW1lbWNweSh0eGhkci0+aXYsICgodTggKil3bGhkcikgKyB3bGhkcl9sZW4sIGl2X2xlbik7CiAJCX0gZWxzZSB7CkBAIC0yNzUsNyArMjc4LDcgQEAKIAkJcGh5X2N0bCB8PSBCNDNsZWdhY3lfVFg0X1BIWV9PRkRNOwogCWlmIChkZXYtPnNob3J0X3ByZWFtYmxlKQogCQlwaHlfY3RsIHw9IEI0M2xlZ2FjeV9UWDRfUEhZX1NIT1JUUFJNQkw7Ci0Jc3dpdGNoICh0eGN0bC0+YW50ZW5uYV9zZWxfdHgpIHsKKwlzd2l0Y2ggKGluZm8tPmFudGVubmFfc2VsX3R4KSB7CiAJY2FzZSAwOgogCQlwaHlfY3RsIHw9IEI0M2xlZ2FjeV9UWDRfUEhZX0FOVExBU1Q7CiAJCWJyZWFrOwpAQCAtMjkwLDIxICsyOTMsMjAgQEAKIAl9CiAKIAkvKiBNQUMgY29udHJvbCAqLwotCWlmICghKHR4Y3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spKQorCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKQogCQltYWNfY3RsIHw9IEI0M2xlZ2FjeV9UWDRfTUFDX0FDSzsKLQlpZiAoISgoKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCkgJiYKLQkgICAgICAoKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX1BTUE9MTCkpKQorCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkKIAkJbWFjX2N0bCB8PSBCNDNsZWdhY3lfVFg0X01BQ19IV1NFUTsKLQlpZiAodHhjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0ZJUlNUX0ZSQUdNRU5UKQorCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQpCiAJCW1hY19jdGwgfD0gQjQzbGVnYWN5X1RYNF9NQUNfU1RNU0RVOwogCWlmIChyYXRlX2ZiX29mZG0pCiAJCW1hY19jdGwgfD0gQjQzbGVnYWN5X1RYNF9NQUNfRkFMTEJBQ0tPRkRNOwotCWlmICh0eGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfTE9OR19SRVRSWV9MSU1JVCkKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0xPTkdfUkVUUllfTElNSVQpCiAJCW1hY19jdGwgfD0gQjQzbGVnYWN5X1RYNF9NQUNfTE9OR0ZSQU1FOwogCiAJLyogR2VuZXJhdGUgdGhlIFJUUyBvciBDVFMtdG8tc2VsZiBmcmFtZSAqLwotCWlmICgodHhjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKSB8fAotCSAgICAodHhjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkpIHsKKwlpZiAoKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfUlRTX0NUUykgfHwKKwkgICAgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfQ1RTX1BST1RFQ1QpKSB7CiAJCXVuc2lnbmVkIGludCBsZW47CiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJCWludCBydHNfcmF0ZTsKQEAgLTMxMiwyNiArMzE0LDI2IEBACiAJCWludCBydHNfcmF0ZV9vZmRtOwogCQlpbnQgcnRzX3JhdGVfZmJfb2ZkbTsKIAotCQlydHNfcmF0ZSA9IHR4Y3RsLT5ydHNfY3RzX3JhdGUtPmh3X3ZhbHVlOworCQlydHNfcmF0ZSA9IGllZWU4MDIxMV9nZXRfcnRzX2N0c19yYXRlKGRldi0+d2wtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CiAJCXJ0c19yYXRlX29mZG0gPSBiNDNsZWdhY3lfaXNfb2ZkbV9yYXRlKHJ0c19yYXRlKTsKIAkJcnRzX3JhdGVfZmIgPSBiNDNsZWdhY3lfY2FsY19mYWxsYmFja19yYXRlKHJ0c19yYXRlKTsKIAkJcnRzX3JhdGVfZmJfb2ZkbSA9IGI0M2xlZ2FjeV9pc19vZmRtX3JhdGUocnRzX3JhdGVfZmIpOwogCQlpZiAocnRzX3JhdGVfZmJfb2ZkbSkKIAkJCW1hY19jdGwgfD0gQjQzbGVnYWN5X1RYNF9NQUNfQ1RTRkFMTEJBQ0tPRkRNOwogCi0JCWlmICh0eGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX0NUU19QUk9URUNUKSB7CisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX0NUU19QUk9URUNUKSB7CiAJCQlpZWVlODAyMTFfY3RzdG9zZWxmX2dldChkZXYtPndsLT5odywKLQkJCQkJCXR4Y3RsLT52aWYsCisJCQkJCQlpbmZvLT5jb250cm9sLnZpZiwKIAkJCQkJCWZyYWdtZW50X2RhdGEsCi0JCQkJCQlmcmFnbWVudF9sZW4sIHR4Y3RsLAorCQkJCQkJZnJhZ21lbnRfbGVuLCBpbmZvLAogCQkJCQkJKHN0cnVjdCBpZWVlODAyMTFfY3RzICopCiAJCQkJCQkodHhoZHItPnJ0c19mcmFtZSkpOwogCQkJbWFjX2N0bCB8PSBCNDNsZWdhY3lfVFg0X01BQ19TRU5EQ1RTOwogCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3RzKTsKIAkJfSBlbHNlIHsKIAkJCWllZWU4MDIxMV9ydHNfZ2V0KGRldi0+d2wtPmh3LAotCQkJCQkgIHR4Y3RsLT52aWYsCi0JCQkJCSAgZnJhZ21lbnRfZGF0YSwgZnJhZ21lbnRfbGVuLCB0eGN0bCwKKwkJCQkJICBpbmZvLT5jb250cm9sLnZpZiwKKwkJCQkJICBmcmFnbWVudF9kYXRhLCBmcmFnbWVudF9sZW4sIGluZm8sCiAJCQkJCSAgKHN0cnVjdCBpZWVlODAyMTFfcnRzICopCiAJCQkJCSAgKHR4aGRyLT5ydHNfZnJhbWUpKTsKIAkJCW1hY19jdGwgfD0gQjQzbGVnYWN5X1RYNF9NQUNfU0VORFJUUzsKQEAgLTM2MiwxMiArMzY0LDEyIEBACiAJCQkgICAgICB1OCAqdHhoZHIsCiAJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcmFnbWVudF9kYXRhLAogCQkJICAgICAgdW5zaWduZWQgaW50IGZyYWdtZW50X2xlbiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqdHhjdGwsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQkgICAgICB1MTYgY29va2llKQogewogCXJldHVybiBnZW5lcmF0ZV90eGhkcl9mdzMoZGV2LCAoc3RydWN0IGI0M2xlZ2FjeV90eGhkcl9mdzMgKil0eGhkciwKIAkJCSAgIGZyYWdtZW50X2RhdGEsIGZyYWdtZW50X2xlbiwKLQkJCSAgIHR4Y3RsLCBjb29raWUpOworCQkJICAgaW5mbywgY29va2llKTsKIH0KIAogc3RhdGljIHM4IGI0M2xlZ2FjeV9yc3NpX3Bvc3Rwcm9jZXNzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKQEAgLTQzOSw3ICs0NDEsNyBAQAogCXN0cnVjdCBiNDNsZWdhY3lfcGxjcF9oZHI2ICpwbGNwOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3bGhkcjsKIAljb25zdCBzdHJ1Y3QgYjQzbGVnYWN5X3J4aGRyX2Z3MyAqcnhoZHIgPSBfcnhoZHI7Ci0JdTE2IGZjdGw7CisJX19sZTE2IGZjdGw7CiAJdTE2IHBoeXN0YXQwOwogCXUxNiBwaHlzdGF0MzsKIAl1MTYgY2hhbnN0YXQ7CkBAIC00NzcsNyArNDc5LDcgQEAKIAkJZ290byBkcm9wOwogCX0KIAl3bGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOwotCWZjdGwgPSBsZTE2X3RvX2NwdSh3bGhkci0+ZnJhbWVfY29udHJvbCk7CisJZmN0bCA9IHdsaGRyLT5mcmFtZV9jb250cm9sOwogCiAJaWYgKChtYWNzdGF0ICYgQjQzbGVnYWN5X1JYX01BQ19ERUMpICYmCiAJICAgICEobWFjc3RhdCAmIEI0M2xlZ2FjeV9SWF9NQUNfREVDRVJSKSkgewpAQCAtNDk2LDExICs0OTgsMTEgQEAKIAogCQlpZiAoZGV2LT5rZXlba2V5aWR4XS5hbGdvcml0aG0gIT0gQjQzbGVnYWN5X1NFQ19BTEdPX05PTkUpIHsKIAkJCS8qIFJlbW92ZSBQUk9URUNURUQgZmxhZyB0byBtYXJrIGl0IGFzIGRlY3J5cHRlZC4gKi8KLQkJCUI0M2xlZ2FjeV9XQVJOX09OKCEoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpOwotCQkJZmN0bCAmPSB+SUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOwotCQkJd2xoZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmY3RsKTsKKwkJCUI0M2xlZ2FjeV9XQVJOX09OKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChmY3RsKSk7CisJCQlmY3RsICY9IH5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOworCQkJd2xoZHItPmZyYW1lX2NvbnRyb2wgPSBmY3RsOwogCi0JCQl3bGhkcl9sZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihmY3RsKTsKKwkJCXdsaGRyX2xlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmN0bCk7CiAJCQlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCAod2xoZHJfbGVuICsgMykpKSB7CiAJCQkJYjQzbGVnYWN5ZGJnKGRldi0+d2wsICJSWDogUGFja2V0IHNpemUiCiAJCQkJCSAgICAgIiB1bmRlcnJ1bjNcbiIpOwpAQCAtNTMyLDEyICs1MzQsMTIgQEAKIAkJfQogCX0KIAotCXN0YXR1cy5zc2kgPSBiNDNsZWdhY3lfcnNzaV9wb3N0cHJvY2VzcyhkZXYsIGpzc2ksCisJc3RhdHVzLnNpZ25hbCA9IGI0M2xlZ2FjeV9yc3NpX3Bvc3Rwcm9jZXNzKGRldiwganNzaSwKIAkJCQkgICAgICAocGh5c3RhdDAgJiBCNDNsZWdhY3lfUlhfUEhZU1QwX09GRE0pLAogCQkJCSAgICAgIChwaHlzdGF0MCAmIEI0M2xlZ2FjeV9SWF9QSFlTVDBfR0FJTkNUTCksCiAJCQkJICAgICAgKHBoeXN0YXQzICYgQjQzbGVnYWN5X1JYX1BIWVNUM19UUlNUQVRFKSk7CiAJc3RhdHVzLm5vaXNlID0gZGV2LT5zdGF0cy5saW5rX25vaXNlOwotCXN0YXR1cy5zaWduYWwgPSAoanNzaSAqIDEwMCkgLyBCNDNsZWdhY3lfUlhfTUFYX1NTSTsKKwlzdGF0dXMucXVhbCA9IChqc3NpICogMTAwKSAvIEI0M2xlZ2FjeV9SWF9NQVhfU1NJOwogCS8qIGNoYW5nZSB0byBzdXBwb3J0IEEgUEhZICovCiAJaWYgKHBoeXN0YXQwICYgQjQzbGVnYWN5X1JYX1BIWVNUMF9PRkRNKQogCQlzdGF0dXMucmF0ZV9pZHggPSBiNDNsZWdhY3lfcGxjcF9nZXRfYml0cmF0ZV9pZHhfb2ZkbShwbGNwLCBmYWxzZSk7CkBAIC01NTMsOSArNTU1LDcgQEAKIAkgKiBvZiB0aW1lc3RhbXAsIGkuZS4gYWJvdXQgNjUgbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBQSFkgcmVjZWl2ZWQKIAkgKiB0aGUgZmlyc3Qgc3ltYm9sLgogCSAqLwotCWlmICgoKGZjdGwgJiAoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpCi0JICAgID09IChJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pKSB8fAotCSAgICBkZXYtPndsLT5yYWRpb3RhcF9lbmFibGVkKSB7CisJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmN0bCkgfHwgZGV2LT53bC0+cmFkaW90YXBfZW5hYmxlZCkgewogCQl1MTYgbG93X21hY3RpbWVfbm93OwogCiAJCWI0M2xlZ2FjeV90c2ZfcmVhZChkZXYsICZzdGF0dXMubWFjdGltZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kveG1pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3htaXQuaAppbmRleCBiYWI0NzkyLi5lNTY3NzdlMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS94bWl0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3htaXQuaApAQCAtODAsNyArODAsNyBAQAogCQkJICAgICAgdTggKnR4aGRyLAogCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJhZ21lbnRfZGF0YSwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBmcmFnbWVudF9sZW4sCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKnR4Y3RsLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJICAgICAgdTE2IGNvb2tpZSk7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oCmluZGV4IDU0N2JhODQuLjNhMzg2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmgKQEAgLTY3LDcgKzY3LDggQEAKIGludCBwcmlzbTJfYXBfZ2V0X3N0YV9xdWFsKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBzb2NrYWRkciBhZGRyW10sCiAJCQkgICBzdHJ1Y3QgaXdfcXVhbGl0eSBxdWFsW10sIGludCBidWZfc2l6ZSwKIAkJCSAgIGludCBhcGxpc3QpOwotaW50IHByaXNtMl9hcF90cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpidWZmZXIpOworaW50IHByaXNtMl9hcF90cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpidWZmZXIpOwogaW50IHByaXNtMl9ob3N0YXBkKHN0cnVjdCBhcF9kYXRhICphcCwgc3RydWN0IHByaXNtMl9ob3N0YXBkX3BhcmFtICpwYXJhbSk7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jCmluZGV4IDAyMGY0NTAuLmYxMDZiYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3J4LmMKQEAgLTc4LDYgKzc4LDkgQEAKIAkJCXByaXNtX2hlYWRlciA9IDI7CiAJCQlwaGRybGVuID0gc2l6ZW9mKHN0cnVjdCBsaW51eF93bGFuX25nX2NhcF9oZHIpOwogCQl9CisJfSBlbHNlIGlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUCkgeworCQlwcmlzbV9oZWFkZXIgPSAzOworCQlwaGRybGVuID0gc2l6ZW9mKHN0cnVjdCBob3N0YXBfcmFkaW90YXBfcngpOwogCX0gZWxzZSB7CiAJCXByaXNtX2hlYWRlciA9IDA7CiAJCXBoZHJsZW4gPSAwOwpAQCAtMTY1LDYgKzE2OCwyNCBAQAogCQloZHItPnNzaV9ub2lzZSAgPSBodG9ubChyeF9zdGF0cy0+bm9pc2UpOwogCQloZHItPnByZWFtYmxlICAgPSBodG9ubCgwKTsgLyogdW5rbm93biAqLwogCQloZHItPmVuY29kaW5nICAgPSBodG9ubCgxKTsgLyogY2NrICovCisJfSBlbHNlIGlmIChwcmlzbV9oZWFkZXIgPT0gMykgeworCQlzdHJ1Y3QgaG9zdGFwX3JhZGlvdGFwX3J4ICpoZHI7CisJCWhkciA9IChzdHJ1Y3QgaG9zdGFwX3JhZGlvdGFwX3J4ICopc2tiX3B1c2goc2tiLCBwaGRybGVuKTsKKwkJbWVtc2V0KGhkciwgMCwgcGhkcmxlbik7CisJCWhkci0+aGRyLml0X2xlbiA9IGNwdV90b19sZTE2KHBoZHJsZW4pOworCQloZHItPmhkci5pdF9wcmVzZW50ID0KKwkJCWNwdV90b19sZTMyKCgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9UU0ZUKSB8CisJCQkJICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSB8CisJCQkJICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SQVRFKSB8CisJCQkJICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMKSB8CisJCQkJICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0UpKTsKKwkJaGRyLT50c2Z0ID0gY3B1X3RvX2xlNjQocnhfc3RhdHMtPm1hY190aW1lKTsKKwkJaGRyLT5jaGFuX2ZyZXEgPSBjcHVfdG9fbGUxNihmcmVxX2xpc3RbbG9jYWwtPmNoYW5uZWwgLSAxXSk7CisJCWhkci0+Y2hhbl9mbGFncyA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9DSEFOX0NDSyB8CisJCQkJCQkgSUVFRTgwMjExX0NIQU5fMkdIWik7CisJCWhkci0+cmF0ZSA9IHJ4X3N0YXRzLT5yYXRlIC8gNTsKKwkJaGRyLT5kYm1fYW50c2lnbmFsID0gcnhfc3RhdHMtPnNpZ25hbDsKKwkJaGRyLT5kYm1fYW50bm9pc2UgPSByeF9zdGF0cy0+bm9pc2U7CiAJfQogCiAJcmV0ID0gc2tiLT5sZW4gLSBwaGRybGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCmluZGV4IGFiOTgxYWYuLmFmM2Q0ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKQEAgLTI0MjAsNyArMjQyMCw4IEBACiAKIC8qIFRyYW5zbGF0ZSBvdXIgbGlzdCBvZiBBY2Nlc3MgUG9pbnRzICYgU3RhdGlvbnMgdG8gYSBjYXJkIGluZGVwZW5kYW50CiAgKiBmb3JtYXQgdGhhdCB0aGUgV2lyZWxlc3MgVG9vbHMgd2lsbCB1bmRlcnN0YW5kIC0gSmVhbiBJSSAqLwotaW50IHByaXNtMl9hcF90cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpidWZmZXIpCitpbnQgcHJpc20yX2FwX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKQEAgLTI0NDksOCArMjQ1MCw4IEBACiAJCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKIAkJaXdlLmxlbiA9IElXX0VWX0FERFJfTEVOOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCSAgSVdfRVZfQUREUl9MRU4pOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwogCiAJCS8qIFVzZSB0aGUgbW9kZSB0byBpbmRpY2F0ZSBpZiBpdCdzIGEgc3RhdGlvbiBvcgogCQkgKiBhbiBBY2Nlc3MgUG9pbnQgKi8KQEAgLTI0NjEsOCArMjQ2Miw4IEBACiAJCWVsc2UKIAkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0lORlJBOwogCQlpd2UubGVuID0gSVdfRVZfVUlOVF9MRU47Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkJICBJV19FVl9VSU5UX0xFTik7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7CiAKIAkJLyogU29tZSBxdWFsaXR5ICovCiAJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CkBAIC0yNDc3LDggKzI0NzgsOCBAQAogCQlpd2UudS5xdWFsLm5vaXNlID0gSEZBMzg0WF9MRVZFTF9UT19kQm0oc3RhLT5sYXN0X3J4X3NpbGVuY2UpOwogCQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBzdGEtPmxhc3RfcnhfdXBkYXRlZDsKIAkJaXdlLmxlbiA9IElXX0VWX1FVQUxfTEVOOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCSAgSVdfRVZfUVVBTF9MRU4pOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwogCiAjaWZuZGVmIFBSSVNNMl9OT19LRVJORUxfSUVFRTgwMjExX01HTVQKIAkJaWYgKHN0YS0+YXApIHsKQEAgLTI0ODYsOCArMjQ4Nyw4IEBACiAJCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwogCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdGEtPnUuYXAuc3NpZF9sZW47CiAJCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwgJml3ZSwKIAkJCQkJCQkgIHN0YS0+dS5hcC5zc2lkKTsKIAogCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKQEAgLTI0OTcsMTAgKzI0OTgsOSBAQAogCQkJCQlJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKIAkJCWVsc2UKIAkJCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkJICAmaXdlLAotCQkJCQkJCSAgc3RhLT51LmFwLnNzaWQKLQkJCQkJCQkgIC8qIDAgYnl0ZSBtZW1jcHkgKi8pOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLCAmaXdlLAorCQkJCQkJCSAgc3RhLT51LmFwLnNzaWQpOwogCiAJCQlpZiAoc3RhLT51LmFwLmNoYW5uZWwgPiAwICYmCiAJCQkgICAgc3RhLT51LmFwLmNoYW5uZWwgPD0gRlJFUV9DT1VOVCkgewpAQCAtMjUxMCw3ICsyNTEwLDcgQEAKIAkJCQkJKiAxMDAwMDA7CiAJCQkJaXdlLnUuZnJlcS5lID0gMTsKIAkJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoCi0JCQkJCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCWluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCiAJCQkJCUlXX0VWX0ZSRVFfTEVOKTsKIAkJCX0KIApAQCAtMjUxOSw4ICsyNTE5LDggQEAKIAkJCXNwcmludGYoYnVmLCAiYmVhY29uX2ludGVydmFsPSVkIiwKIAkJCQlzdGEtPmxpc3Rlbl9pbnRlcnZhbCk7CiAJCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkJICAmaXdlLCBidWYpOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLCAmaXdlLCBidWYpOwogCQl9CiAjZW5kaWYgLyogUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggOTM2ZjUyZS4uMzE1M2ZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtMzEwMSw3ICszMTAxLDIyIEBACiAgKiBUaGlzIGlzIGEgbmF0dXJhbCBuZXN0aW5nLCB3aGljaCBuZWVkcyBhIHNwbGl0IGxvY2sgdHlwZS4KICAqLwogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBob3N0YXBfbmV0ZGV2X3htaXRfbG9ja19rZXk7CitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGhvc3RhcF9uZXRkZXZfYWRkcl9sb2NrX2tleTsKIAorc3RhdGljIHZvaWQgcHJpc20yX3NldF9sb2NrZGVwX2NsYXNzX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLAorCQkJCQkgdm9pZCAqX3VudXNlZCkKK3sKKwlsb2NrZGVwX3NldF9jbGFzcygmdHhxLT5feG1pdF9sb2NrLAorCQkJICAmaG9zdGFwX25ldGRldl94bWl0X2xvY2tfa2V5KTsKK30KKworc3RhdGljIHZvaWQgcHJpc20yX3NldF9sb2NrZGVwX2NsYXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbG9ja2RlcF9zZXRfY2xhc3MoJmRldi0+YWRkcl9saXN0X2xvY2ssCisJCQkgICZob3N0YXBfbmV0ZGV2X2FkZHJfbG9ja19rZXkpOworCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIHByaXNtMl9zZXRfbG9ja2RlcF9jbGFzc19vbmUsIE5VTEwpOworfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKgogcHJpc20yX2luaXRfbG9jYWxfZGF0YShzdHJ1Y3QgcHJpc20yX2hlbHBlcl9mdW5jdGlvbnMgKmZ1bmNzLCBpbnQgY2FyZF9pZHgsCkBAIC0zMjA0LDYgKzMyMTksNyBAQAogCWxvY2FsLT5hdXRoX2FsZ3MgPSBQUklTTTJfQVVUSF9PUEVOIHwgUFJJU00yX0FVVEhfU0hBUkVEX0tFWTsKIAlsb2NhbC0+c3JhbV90eXBlID0gLTE7CiAJbG9jYWwtPnNjYW5fY2hhbm5lbF9tYXNrID0gMHhmZmZmOworCWxvY2FsLT5tb25pdG9yX3R5cGUgPSBQUklTTTJfTU9OSVRPUl9SQURJT1RBUDsKIAogCS8qIEluaXRpYWxpemUgdGFzayBxdWV1ZSBzdHJ1Y3R1cmVzICovCiAJSU5JVF9XT1JLKCZsb2NhbC0+cmVzZXRfcXVldWUsIGhhbmRsZV9yZXNldF9xdWV1ZSk7CkBAIC0zMjY3LDcgKzMyODMsNyBAQAogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAKLQlsb2NrZGVwX3NldF9jbGFzcygmZGV2LT5feG1pdF9sb2NrLCAmaG9zdGFwX25ldGRldl94bWl0X2xvY2tfa2V5KTsKKwlwcmlzbTJfc2V0X2xvY2tkZXBfY2xhc3MoZGV2KTsKIAlydG5sX3VubG9jaygpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWdpc3RlciBuZXRkZXZpY2UgZmFpbGVkIVxuIiwKQEAgLTM0MTYsNyArMzQzMiw3IEBACiB9CiAKIAotI2lmbmRlZiBQUklTTTJfUExYCisjaWYgKGRlZmluZWQoUFJJU00yX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfUE0pKSB8fCBkZWZpbmVkKFBSSVNNMl9QQ0NBUkQpCiBzdGF0aWMgdm9pZCBwcmlzbTJfc3VzcGVuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKQEAgLTM0MzUsNyArMzQ1MSw3IEBACiAJLyogRGlzYWJsZSBoYXJkd2FyZSBhbmQgZmlybXdhcmUgKi8KIAlwcmlzbTJfaHdfc2h1dGRvd24oZGV2LCAwKTsKIH0KLSNlbmRpZiAvKiBQUklTTTJfUExYICovCisjZW5kaWYgLyogKFBSSVNNMl9QQ0kgJiYgQ09ORklHX1BNKSB8fCBQUklTTTJfUENDQVJEICovCiAKIAogLyogVGhlc2UgbWlnaHQgYXQgc29tZSBwb2ludCBiZSBjb21waWxlZCBzZXBhcmF0ZWx5IGFuZCB1c2VkIGFzIHNlcGFyYXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKaW5kZXggMGNhMGJmZS4uM2Y4YjFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwpAQCAtODk3LDYgKzg5Nyw4IEBACiAJaWYgKGxvY2FsLT5tb25pdG9yX3R5cGUgPT0gUFJJU00yX01PTklUT1JfUFJJU00gfHwKIAkgICAgbG9jYWwtPm1vbml0b3JfdHlwZSA9PSBQUklTTTJfTU9OSVRPUl9DQVBIRFIpIHsKIAkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9QUklTTTsKKwl9IGVsc2UgaWYgKGxvY2FsLT5tb25pdG9yX3R5cGUgPT0gUFJJU00yX01PTklUT1JfUkFESU9UQVApIHsKKwkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKIAl9IGVsc2UgewogCQlkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOwogCX0KQEAgLTE3OTMsNiArMTc5NSw3IEBACiAKICNpZm5kZWYgUFJJU00yX05PX1NUQVRJT05fTU9ERVMKIHN0YXRpYyBjaGFyICogX19wcmlzbTJfdHJhbnNsYXRlX3NjYW4obG9jYWxfaW5mb190ICpsb2NhbCwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgICAgIHN0cnVjdCBoZmEzODR4X2hvc3RzY2FuX3Jlc3VsdCAqc2NhbiwKIAkJCQkgICAgICBzdHJ1Y3QgaG9zdGFwX2Jzc19pbmZvICpic3MsCiAJCQkJICAgICAgY2hhciAqY3VycmVudF9ldiwgY2hhciAqZW5kX2J1ZikKQEAgLTE4MjMsNyArMTgyNiw3IEBACiAJaXdlLmNtZCA9IFNJT0NHSVdBUDsKIAlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3NpZCwgRVRIX0FMRU4pOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAogCQkJCQkgIElXX0VWX0FERFJfTEVOKTsKIAogCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwpAQCAtMTgzMiw3ICsxODM1LDggQEAKIAlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gc3NpZF9sZW47CiAJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIHNzaWQpOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIHNzaWQpOwogCiAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAlpd2UuY21kID0gU0lPQ0dJV01PREU7CkBAIC0xODQ3LDggKzE4NTEsOCBAQAogCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwogCQllbHNlCiAJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCQkgIElXX0VWX1VJTlRfTEVOKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKIAl9CiAKIAltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwpAQCAtMTg2NCw4ICsxODY4LDggQEAKIAlpZiAoY2hhbiA+IDApIHsKIAkJaXdlLnUuZnJlcS5tID0gZnJlcV9saXN0W2NoYW4gLSAxXSAqIDEwMDAwMDsKIAkJaXdlLnUuZnJlcS5lID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKIAl9CiAKIAlpZiAoc2NhbikgewpAQCAtMTg4NCw4ICsxODg4LDggQEAKIAkJCXwgSVdfUVVBTF9OT0lTRV9VUERBVEVECiAJCQl8IElXX1FVQUxfUVVBTF9JTlZBTElECiAJCQl8IElXX1FVQUxfREJNOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCSAgSVdfRVZfUVVBTF9MRU4pOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwogCX0KIAogCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CkBAIC0xODk1LDEzICsxODk5LDEzIEBACiAJZWxzZQogCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgIiIpOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAiIik7CiAKIAkvKiBUT0RPOiBhZGQgU3VwcFJhdGVzIGludG8gQlNTIHRhYmxlICovCiAJaWYgKHNjYW4pIHsKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQljdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBJV19FVl9MQ1BfTEVOOworCQljdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7CiAJCXBvcyA9IHNjYW4tPnN1cF9yYXRlczsKIAkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzY2FuLT5zdXBfcmF0ZXMpOyBpKyspIHsKIAkJCWlmIChwb3NbaV0gPT0gMCkKQEAgLTE5MDksMTEgKzE5MTMsMTEgQEAKIAkJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCiAJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChwb3NbaV0gJiAweDdmKSAqIDUwMDAwMCk7CiAJCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKAotCQkJCWN1cnJlbnRfZXYsIGN1cnJlbnRfdmFsLCBlbmRfYnVmLCAmaXdlLAorCQkJCWluZm8sIGN1cnJlbnRfZXYsIGN1cnJlbnRfdmFsLCBlbmRfYnVmLCAmaXdlLAogCQkJCUlXX0VWX1BBUkFNX0xFTik7CiAJCX0KIAkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCi0JCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IElXX0VWX0xDUF9MRU4pCisJCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkKIAkJCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKIAl9CiAKQEAgLTE5MjQsMTUgKzE5MjgsMTUgQEAKIAkJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJCXNwcmludGYoYnVmLCAiYmNuX2ludD0lZCIsIGxlMTZfdG9fY3B1KHNjYW4tPmJlYWNvbl9pbnRlcnZhbCkpOwogCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCSAgYnVmKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGJ1Zik7CiAKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJCXNwcmludGYoYnVmLCAicmVzcF9yYXRlPSVkIiwgbGUxNl90b19jcHUoc2Nhbi0+cmF0ZSkpOwogCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCSAgYnVmKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGJ1Zik7CiAKIAkJaWYgKGxvY2FsLT5sYXN0X3NjYW5fdHlwZSA9PSBQUklTTTJfSE9TVFNDQU4gJiYKIAkJICAgIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpIHsKQEAgLTE5NDAsOCArMTk0NCw4IEBACiAJCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKIAkJCXNwcmludGYoYnVmLCAiYXRpbT0lZCIsIGxlMTZfdG9fY3B1KHNjYW4tPmF0aW0pKTsKIAkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsICZpd2UsIGJ1Zik7CiAJCX0KIAl9CiAJa2ZyZWUoYnVmKTsKQEAgLTE5NTAsMTYgKzE5NTQsMTYgQEAKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IElXRVZHRU5JRTsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBic3MtPndwYV9pZV9sZW47Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKLQkJCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGJzcy0+d3BhX2llKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGJzcy0+d3BhX2llKTsKIAl9CiAKIAlpZiAoYnNzICYmIGJzcy0+cnNuX2llX2xlbiA+IDAgJiYgYnNzLT5yc25faWVfbGVuIDw9IE1BWF9XUEFfSUVfTEVOKSB7CiAJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CiAJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT5yc25faWVfbGVuOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoCi0JCQljdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBic3MtPnJzbl9pZSk7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBic3MtPnJzbl9pZSk7CiAJfQogCiAJcmV0dXJuIGN1cnJlbnRfZXY7CkBAIC0xOTY5LDYgKzE5NzMsNyBAQAogLyogVHJhbnNsYXRlIHNjYW4gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBjYXJkIHRvIGEgY2FyZCBpbmRlcGVuZGFudAogICogZm9ybWF0IHRoYXQgdGhlIFdpcmVsZXNzIFRvb2xzIHdpbGwgdW5kZXJzdGFuZCAtIEplYW4gSUkgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHByaXNtMl90cmFuc2xhdGVfc2Nhbihsb2NhbF9pbmZvX3QgKmxvY2FsLAorCQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCQljaGFyICpidWZmZXIsIGludCBidWZsZW4pCiB7CiAJc3RydWN0IGhmYTM4NHhfaG9zdHNjYW5fcmVzdWx0ICpzY2FuOwpAQCAtMTk5OSwxMyArMjAwNCwxNCBAQAogCQkJaWYgKG1lbWNtcChic3MtPmJzc2lkLCBzY2FuLT5ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKIAkJCQlic3MtPmluY2x1ZGVkID0gMTsKIAkJCQljdXJyZW50X2V2ID0gX19wcmlzbTJfdHJhbnNsYXRlX3NjYW4oCi0JCQkJCWxvY2FsLCBzY2FuLCBic3MsIGN1cnJlbnRfZXYsIGVuZF9idWYpOworCQkJCQlsb2NhbCwgaW5mbywgc2NhbiwgYnNzLCBjdXJyZW50X2V2LAorCQkJCQllbmRfYnVmKTsKIAkJCQlmb3VuZCsrOwogCQkJfQogCQl9CiAJCWlmICghZm91bmQpIHsKIAkJCWN1cnJlbnRfZXYgPSBfX3ByaXNtMl90cmFuc2xhdGVfc2NhbigKLQkJCQlsb2NhbCwgc2NhbiwgTlVMTCwgY3VycmVudF9ldiwgZW5kX2J1Zik7CisJCQkJbG9jYWwsIGluZm8sIHNjYW4sIE5VTEwsIGN1cnJlbnRfZXYsIGVuZF9idWYpOwogCQl9CiAJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLwogCQlpZiAoKGVuZF9idWYgLSBjdXJyZW50X2V2KSA8PSBJV19FVl9BRERSX0xFTikgewpAQCAtMjAyMyw3ICsyMDI5LDcgQEAKIAkJYnNzID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBob3N0YXBfYnNzX2luZm8sIGxpc3QpOwogCQlpZiAoYnNzLT5pbmNsdWRlZCkKIAkJCWNvbnRpbnVlOwotCQljdXJyZW50X2V2ID0gX19wcmlzbTJfdHJhbnNsYXRlX3NjYW4obG9jYWwsIE5VTEwsIGJzcywKKwkJY3VycmVudF9ldiA9IF9fcHJpc20yX3RyYW5zbGF0ZV9zY2FuKGxvY2FsLCBpbmZvLCBOVUxMLCBic3MsCiAJCQkJCQkgICAgIGN1cnJlbnRfZXYsIGVuZF9idWYpOwogCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KIAkJaWYgKChlbmRfYnVmIC0gY3VycmVudF9ldikgPD0gSVdfRVZfQUREUl9MRU4pIHsKQEAgLTIwNzAsNyArMjA3Niw3IEBACiAJfQogCWxvY2FsLT5zY2FuX3RpbWVzdGFtcCA9IDA7CiAKLQlyZXMgPSBwcmlzbTJfdHJhbnNsYXRlX3NjYW4obG9jYWwsIGV4dHJhLCBkYXRhLT5sZW5ndGgpOworCXJlcyA9IHByaXNtMl90cmFuc2xhdGVfc2Nhbihsb2NhbCwgaW5mbywgZXh0cmEsIGRhdGEtPmxlbmd0aCk7CiAKIAlpZiAocmVzID49IDApIHsKIAkJZGF0YS0+bGVuZ3RoID0gcmVzOwpAQCAtMjEwMyw3ICsyMTA5LDcgQEAKIAkJICogSmVhbiBJSSAqLwogCiAJCS8qIFRyYW5zbGF0ZSB0byBXRSBmb3JtYXQgKi8KLQkJcmVzID0gcHJpc20yX2FwX3RyYW5zbGF0ZV9zY2FuKGRldiwgZXh0cmEpOworCQlyZXMgPSBwcmlzbTJfYXBfdHJhbnNsYXRlX3NjYW4oZGV2LCBpbmZvLCBleHRyYSk7CiAJCWlmIChyZXMgPj0gMCkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlNjYW4gcmVzdWx0IHRyYW5zbGF0aW9uIHN1Y2NlZWRlZCAiCiAJCQkgICAgICAgIihsZW5ndGg9JWQpXG4iLCByZXMpOwpAQCAtMjUxNiw3ICsyNTIyLDggQEAKIAljYXNlIFBSSVNNMl9QQVJBTV9NT05JVE9SX1RZUEU6CiAJCWlmICh2YWx1ZSAhPSBQUklTTTJfTU9OSVRPUl84MDIxMSAmJgogCQkgICAgdmFsdWUgIT0gUFJJU00yX01PTklUT1JfQ0FQSERSICYmCi0JCSAgICB2YWx1ZSAhPSBQUklTTTJfTU9OSVRPUl9QUklTTSkgeworCQkgICAgdmFsdWUgIT0gUFJJU00yX01PTklUT1JfUFJJU00gJiYKKwkJICAgIHZhbHVlICE9IFBSSVNNMl9NT05JVE9SX1JBRElPVEFQKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMKaW5kZXggYTM4ZTg1Zi4uNzU2YWI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMKQEAgLTU5NywyNSArNTk3LDcgQEAKIHN0YXRpYyBpbnQgaG9zdGFwXzgwMjExX2hlYWRlcl9wYXJzZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgdW5zaWduZWQgY2hhciAqaGFkZHIpCiB7Ci0Jc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlID0gbmV0ZGV2X3ByaXYoc2tiLT5kZXYpOwotCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBpZmFjZS0+bG9jYWw7Ci0KLQlpZiAobG9jYWwtPm1vbml0b3JfdHlwZSA9PSBQUklTTTJfTU9OSVRPUl9QUklTTSB8fAotCSAgICBsb2NhbC0+bW9uaXRvcl90eXBlID09IFBSSVNNMl9NT05JVE9SX0NBUEhEUikgewotCQljb25zdCB1bnNpZ25lZCBjaGFyICptYWMgPSBza2JfbWFjX2hlYWRlcihza2IpOwotCi0JCWlmICgqKHUzMiAqKW1hYyA9PSBMV05HX0NBUF9ESURfQkFTRSkgewotCQkJbWVtY3B5KGhhZGRyLAotCQkJICAgICAgIG1hYyArIHNpemVvZihzdHJ1Y3QgbGludXhfd2xhbl9uZ19wcmlzbV9oZHIpICsgMTAsCi0JCQkgICAgICAgRVRIX0FMRU4pOyAvKiBhZGRyMiAqLwotCQl9IGVsc2UgeyAvKiAoKih1MzIgKiltYWMgPT0gaHRvbmwoTFdOR19DQVBIRFJfVkVSU0lPTikpICovCi0JCQltZW1jcHkoaGFkZHIsCi0JCQkgICAgICAgbWFjICsgc2l6ZW9mKHN0cnVjdCBsaW51eF93bGFuX25nX2NhcF9oZHIpICsgMTAsCi0JCQkgICAgICAgRVRIX0FMRU4pOyAvKiBhZGRyMiAqLwotCQl9Ci0JfSBlbHNlCi0JCW1lbWNweShoYWRkciwgc2tiX21hY19oZWFkZXIoc2tiKSArIDEwLCBFVEhfQUxFTik7IC8qIGFkZHIyICovCi0KKwltZW1jcHkoaGFkZHIsIHNrYl9tYWNfaGVhZGVyKHNrYikgKyAxMCwgRVRIX0FMRU4pOyAvKiBhZGRyMiAqLwogCXJldHVybiBFVEhfQUxFTjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaAppbmRleCAxNTQ0NWJjLi5mZmRmNDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCiAjaW5jbHVkZSAiaG9zdGFwX2NvbmZpZy5oIgogI2luY2x1ZGUgImhvc3RhcF9jb21tb24uaCIKQEAgLTU1LDYgKzU2LDE3IEBACiAJX19iZTMyIGVuY29kaW5nOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBob3N0YXBfcmFkaW90YXBfcnggeworCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIGhkcjsKKwlfX2xlNjQgdHNmdDsKKwl1OCByYXRlOworCXU4IHBhZGRpbmc7CisJX19sZTE2IGNoYW5fZnJlcTsKKwlfX2xlMTYgY2hhbl9mbGFnczsKKwlzOCBkYm1fYW50c2lnbmFsOworCXM4IGRibV9hbnRub2lzZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAjZGVmaW5lIExXTkdfQ0FQX0RJRF9CQVNFICAgKDQgfCAoMSA8PCA2KSkgLyogc2VjdGlvbiA0LCBncm91cCAxICovCiAjZGVmaW5lIExXTkdfQ0FQSERSX1ZFUlNJT04gMHg4MDIxMTAwMQogCkBAIC03MzQsNyArNzQ2LDcgQEAKIAl1bnNpZ25lZCBsb25nIHNjYW5fdGltZXN0YW1wOyAvKiBUaW1lIHN0YXJ0ZWQgdG8gc2NhbiAqLwogCWVudW0gewogCQlQUklTTTJfTU9OSVRPUl84MDIxMSA9IDAsIFBSSVNNMl9NT05JVE9SX1BSSVNNID0gMSwKLQkJUFJJU00yX01PTklUT1JfQ0FQSERSID0gMgorCQlQUklTTTJfTU9OSVRPUl9DQVBIRFIgPSAyLCBQUklTTTJfTU9OSVRPUl9SQURJT1RBUCA9IDMKIAl9IG1vbml0b3JfdHlwZTsKIAlpbnQgbW9uaXRvcl9hbGxvd19mY3NlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwppbmRleCA2ZTcwNDYwLi4xYWNmYmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCkBAIC00OTcyLDggKzQ5NzIsNyBAQAogCX0KICAgICAgIGRvbmU6CiAJaWYgKChpcHdfdHhfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyaykgJiYKLQkgICAgKHFpbmRleCA+PSAwKSAmJgotCSAgICAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+bmV0X2RldikpCisJICAgIChxaW5kZXggPj0gMCkpCiAJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0X2Rldik7CiAJdXNlZCA9IHEtPmZpcnN0X2VtcHR5IC0gcS0+bGFzdF91c2VkOwogCWlmICh1c2VkIDwgMCkKQEAgLTEwMTU0LDE0ICsxMDE1Myw4IEBACiAKIHN0YXRpYyBpbnQgaXB3X25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlJUFdfREVCVUdfSU5GTygiZGV2LT5vcGVuXG4iKTsKLQkvKiB3ZSBzaG91bGQgYmUgdmVyaWZ5aW5nIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgb3BlbmVkICovCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spICYmCi0JICAgIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpCi0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA0ODEsMTMgKzEwNDc0LDYgQEAKIAlJUFdfREVCVUdfVFgoImRldi0+eG1pdCglZCBieXRlcylcbiIsIHR4Yi0+cGF5bG9hZF9zaXplKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSB7Ci0JCUlQV19ERUJVR19JTkZPKCJUeCBhdHRlbXB0IHdoaWxlIG5vdCBhc3NvY2lhdGVkLlxuIik7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJZ290byBmYWlsX3VubG9jazsKLQl9Ci0KICNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUwogCWlmIChydGFwX2lmYWNlICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+cHJvbV9uZXRfZGV2KSkKIAkJaXB3X2hhbmRsZV9wcm9taXNjdW91c190eChwcml2LCB0eGIpOwpAQCAtMTA0OTksMTAgKzEwNDg1LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwotCi0gICAgICBmYWlsX3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXB3X25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEwNzAzLDEzICsxMDY4NSw2IEBACiAJcHJpdi0+bGFzdF9wYWNrZXRfdGltZSA9IDA7CiAKIAluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldF9kZXYpOwotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHByaXYtPm5ldF9kZXYpKSB7Ci0JCUlQV19ERUJVR19OT1RJRigid2FraW5nIHF1ZXVlXG4iKTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRfZGV2KTsKLQl9IGVsc2UgewotCQlJUFdfREVCVUdfTk9USUYoInN0YXJ0aW5nIHF1ZXVlXG4iKTsKLQkJbmV0aWZfc3RhcnRfcXVldWUocHJpdi0+bmV0X2Rldik7Ci0JfQogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmVxdWVzdF9zY2FuKTsKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5yZXF1ZXN0X2RpcmVjdF9zY2FuKTsKQEAgLTEwNzM5LDcgKzEwNzE0LDYgQEAKIHsKIAlpcHdfbGVkX2xpbmtfZG93bihwcml2KTsKIAluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRfZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwogCW5vdGlmeV93eF9hc3NvY19ldmVudChwcml2KTsKIAogCS8qIENhbmNlbCBhbnkgcXVldWVkIHdvcmsgLi4uICovCkBAIC0xMTQxOSw3ICsxMTM5Myw2IEBACiAJLyogQ2xlYXIgYWxsIGJpdHMgYnV0IHRoZSBSRiBLaWxsICovCiAJcHJpdi0+c3RhdHVzICY9IFNUQVRVU19SRl9LSUxMX01BU0sgfCBTVEFUVVNfRVhJVF9QRU5ESU5HOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldF9kZXYpOwotCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0X2Rldik7CiAKIAlpcHdfc3RvcF9uaWMocHJpdik7CiAKQEAgLTExNTIyLDcgKzExNDk1LDYgQEAKIAogCUlQV19ERUJVR19JTkZPKCJwcm9tIGRldi0+b3BlblxuIik7CiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX01PTklUT1IpIHsKIAkJcHJpdi0+c3lzX2NvbmZpZy5hY2NlcHRfYWxsX2RhdGFfZnJhbWVzID0gMTsKQEAgLTExNTU4LDcgKzExNTMwLDYgQEAKIHN0YXRpYyBpbnQgaXB3X3Byb21faGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT54bWl0XG4iKTsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKaW5kZXggNjJmYjg5ZC4uODJiNjZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwpAQCAtOCw3ICs4LDYgQEAKIAlzZWxlY3QgTUFDODAyMTFfTEVEUyBpZiBJV0xXSUZJX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUyBpZiBJV0xXSUZJX0xFRFMKIAlzZWxlY3QgUkZLSUxMIGlmIElXTFdJRklfUkZLSUxMCi0Jc2VsZWN0IFJGS0lMTF9JTlBVVCBpZiBJV0xXSUZJX1JGS0lMTAogCiBjb25maWcgSVdMV0lGSV9MRURTCiAJYm9vbApAQCAtNDUsMTQgKzQ0LDYgQEAKIAkgIHNheSBNIGhlcmUgYW5kIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQ+LiAgVGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXdsNDk2NS5rby4KIAotY29uZmlnIElXTDQ5NjVfSFQKLQlib29sICJFbmFibGUgODAyLjExbiBIVCBmZWF0dXJlcyBpbiBpd2w0OTY1IGRyaXZlciIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlcGVuZHMgb24gSVdMNDk2NQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgSUVFRSA4MDIuMTFuIEhpZ2ggVGhyb3VnaHB1dCBmZWF0dXJlcwotCSAgZm9yIHRoZSBpd2w0OTY1IGRyaXZlci4KLQogY29uZmlnIElXTDQ5NjVfTEVEUwogCWJvb2wgIkVuYWJsZSBMRURTIGZlYXR1cmVzIGluIGl3bDQ5NjUgZHJpdmVyIgogCWRlcGVuZHMgb24gSVdMNDk2NQpAQCAtNjcsMTMgKzU4LDYgQEAKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzcGVjdHJ1bSBtZWFzdXJlbWVudCBmb3IgdGhlIGl3bDQ5NjUgZHJpdmVyLgogCi1jb25maWcgSVdMNDk2NV9TRU5TSVRJVklUWQotCWJvb2wgIkVuYWJsZSBTZW5zaXRpdml0eSBDYWxpYnJhdGlvbiBpbiBpd2w0OTY1IGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTDQ5NjUKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzZW5zaXRpdml0eSBjYWxpYnJhdGlvbiBmb3IgdGhlIGl3bDQ5NjUKLQkgIGRyaXZlci4KLQogY29uZmlnIElXTFdJRklfREVCVUcKIAlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bDQ5NjUgZHJpdmVyIgogCWRlcGVuZHMgb24gSVdMNDk2NQpAQCAtODUsMTMgKzY5LDEzIEBACiAJICBjb250cm9sIHdoaWNoIGRlYnVnIG91dHB1dCBpcyBzZW50IHRvIHRoZSBrZXJuZWwgbG9nIGJ5IHNldHRpbmcgdGhlCiAJICB2YWx1ZSBpbgogCi0JICAgICAgICAgIC9zeXMvYnVzL3BjaS9kcml2ZXJzLyR7RFJJVkVSfS9kZWJ1Z19sZXZlbAorCQkvc3lzL2NsYXNzL25ldC93bGFuMC9kZXZpY2UvZGVidWdfbGV2ZWwKIAogCSAgVGhpcyBlbnRyeSB3aWxsIG9ubHkgZXhpc3QgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4KIAogCSAgVG8gc2V0IGEgdmFsdWUsIHNpbXBseSBlY2hvIGFuIDgtYnl0ZSBoZXggdmFsdWUgdG8gdGhlIHNhbWUgZmlsZToKIAotCQkgICUgZWNobyAweDQzZmZmID4gL3N5cy9idXMvcGNpL2RyaXZlcnMvJHtEUklWRVJ9L2RlYnVnX2xldmVsCisJCSAgJSBlY2hvIDB4NDNmZmYgPiAvc3lzL2NsYXNzL25ldC93bGFuMC9kZXZpY2UvZGVidWdfbGV2ZWwKIAogCSAgWW91IGNhbiBmaW5kIHRoZSBsaXN0IG9mIGRlYnVnIG1hc2sgdmFsdWVzIGluOgogCQkgIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtZGVidWcuaApAQCAtMTAwLDYgKzg0LDEzIEBACiAJICBhcyB0aGUgZGVidWcgaW5mb3JtYXRpb24gY2FuIGFzc2lzdCBvdGhlcnMgaW4gaGVscGluZyB5b3UgcmVzb2x2ZQogCSAgYW55IHByb2JsZW1zIHlvdSBtYXkgZW5jb3VudGVyLgogCitjb25maWcgSVdMNTAwMAorCWJvb2wgIkludGVsIFdpcmVsZXNzIFdpRmkgNTAwMEFHTiIKKwlkZXBlbmRzIG9uIElXTDQ5NjUKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayA1MDAwQUdOIEZhbWlseQorCSAgRGVwZW5kZW5jeSBvbiA0OTY1IGlzIHRlbXBvcmFyeQorCiBjb25maWcgSVdMV0lGSV9ERUJVR0ZTCiAgICAgICAgIGJvb2wgIkl3bHdpZmkgZGVidWdmcyBzdXBwb3J0IgogICAgICAgICBkZXBlbmRzIG9uIElXTENPUkUgJiYgSVdMV0lGSV9ERUJVRyAmJiBNQUM4MDIxMV9ERUJVR0ZTCkBAIC0xMTMsNiArMTA0LDcgQEAKIAlzZWxlY3QgSVdMV0lGSQogCXNlbGVjdCBNQUM4MDIxMV9MRURTIGlmIElXTDM5NDVfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTIGlmIElXTDM5NDVfTEVEUworCXNlbGVjdCBSRktJTEwgaWYgSVdMMzk0NV9SRktJTEwKIAktLS1oZWxwLS0tCiAJICBTZWxlY3QgdG8gYnVpbGQgdGhlIGRyaXZlciBzdXBwb3J0aW5nIHRoZToKIApAQCAtMTM1LDYgKzEyNywxMCBAQAogCSAgc2F5IE0gaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uICBUaGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpd2wzOTQ1LmtvLgogCitjb25maWcgSVdMMzk0NV9SRktJTEwKKwlib29sICJFbmFibGUgUkYga2lsbCBzdXBwb3J0IGluIGl3bDM5NDUgZHJpdmVycyIKKwlkZXBlbmRzIG9uIElXTDM5NDUKKwogY29uZmlnIElXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAlib29sICJFbmFibGUgU3BlY3RydW0gTWVhc3VyZW1lbnQgaW4gaXdsMzk0NSBkcml2ZXJzIgogCWRlcGVuZHMgb24gSVdMMzk0NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKaW5kZXggZWM2MTg3Yi4uMWY1MmI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCkBAIC0xLDUgKzEsNyBAQAogb2JqLSQoQ09ORklHX0lXTENPUkUpCSs9IGl3bGNvcmUubwotaXdsY29yZS1vYmpzIAkJOj0gaXdsLWNvcmUubyBpd2wtZWVwcm9tLm8gaXdsLWhjbWQubworaXdsY29yZS1vYmpzIAkJOj0gaXdsLWNvcmUubyBpd2wtZWVwcm9tLm8gaXdsLWhjbWQubyBpd2wtcG93ZXIubworaXdsY29yZS1vYmpzIAkJKz0gaXdsLXJ4Lm8gaXdsLXR4Lm8gaXdsLXN0YS5vIGl3bC1jYWxpYi5vCitpd2xjb3JlLW9ianMgCQkrPSBpd2wtc2Nhbi5vCiBpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfREVCVUdGUykgKz0gaXdsLWRlYnVnZnMubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX0xFRFMpICs9IGl3bC1sZWQubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX1JGS0lMTCkgKz0gaXdsLXJma2lsbC5vCkBAIC05LDUgKzExLDEwIEBACiBpd2wzOTQ1LSQoQ09ORklHX0lXTDM5NDVfTEVEUykgKz0gaXdsLTM5NDUtbGVkLm8KIAogb2JqLSQoQ09ORklHX0lXTDQ5NjUpCSs9IGl3bDQ5NjUubwotaXdsNDk2NS1vYmpzCQk6PSBpd2w0OTY1LWJhc2UubyBpd2wtNDk2NS5vIGl3bC00OTY1LXJzLm8gaXdsLXN0YS5vCitpd2w0OTY1LW9ianMJCTo9IGl3bDQ5NjUtYmFzZS5vIGl3bC00OTY1Lm8gaXdsLTQ5NjUtcnMubworCitpZmVxICgkKENPTkZJR19JV0w1MDAwKSx5KQorCWl3bDQ5NjUtb2JqcyArPSBpd2wtNTAwMC5vCitlbmRpZgorCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaAppbmRleCBhZDYxMmE4Li42NDRiZDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCkBAIC0xMjYsNyArMTI2LDcgQEAKIAlFRVBST01fQ0hBTk5FTF9BQ1RJVkUgPSAoMSA8PCAzKSwJLyogYWN0aXZlIHNjYW5uaW5nIGFsbG93ZWQgKi8KIAlFRVBST01fQ0hBTk5FTF9SQURBUiA9ICgxIDw8IDQpLAkvKiByYWRhciBkZXRlY3Rpb24gcmVxdWlyZWQgKi8KIAlFRVBST01fQ0hBTk5FTF9XSURFID0gKDEgPDwgNSksCQkvKiAyMCBNSHogY2hhbm5lbCBva2F5ICovCi0JRUVQUk9NX0NIQU5ORUxfTkFSUk9XID0gKDEgPDwgNiksCS8qIDEwIE1IeiBjaGFubmVsIChub3QgdXNlZCkgKi8KKwkvKiBCaXQgNiBSZXNlcnZlZCAod2FzIE5hcnJvdyBDaGFubmVsKSAqLwogCUVFUFJPTV9DSEFOTkVMX0RGUyA9ICgxIDw8IDcpLAkvKiBkeW5hbWljIGZyZXEgc2VsZWN0aW9uIGNhbmRpZGF0ZSAqLwogfTsKIApAQCAtMjg5LDE3ICsyODksNiBAQAogI2RlZmluZSBQQ0lfUkVHX1dVTTggICAgICAgMHgwRTgKICNkZWZpbmUgUENJX0NGR19QTUNfUE1FX0ZST01fRDNDT0xEX1NVUFBPUlQgICAgICAgICAoMHg4MDAwMDAwMCkKIAotLyogU0NEICgzOTQ1IFR4IEZyYW1lIFNjaGVkdWxlcikgKi8KLSNkZWZpbmUgU0NEX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAoQ1NSX0JBU0UgKyAweDJFMDApCi0KLSNkZWZpbmUgU0NEX01PREVfUkVHICAgICAgICAgICAgICAgICAgICAoU0NEX0JBU0UgKyAweDAwMCkKLSNkZWZpbmUgU0NEX0FSQVNUQVRfUkVHICAgICAgICAgICAgICAgICAoU0NEX0JBU0UgKyAweDAwNCkKLSNkZWZpbmUgU0NEX1RYRkFDVF9SRUcgICAgICAgICAgICAgICAgICAoU0NEX0JBU0UgKyAweDAxMCkKLSNkZWZpbmUgU0NEX1RYRjRNRl9SRUcgICAgICAgICAgICAgICAgICAoU0NEX0JBU0UgKyAweDAxNCkKLSNkZWZpbmUgU0NEX1RYRjVNRl9SRUcgICAgICAgICAgICAgICAgICAoU0NEX0JBU0UgKyAweDAyMCkKLSNkZWZpbmUgU0NEX1NCWVBfTU9ERV8xX1JFRyAgICAgICAgICAgICAoU0NEX0JBU0UgKyAweDAyQykKLSNkZWZpbmUgU0NEX1NCWVBfTU9ERV8yX1JFRyAgICAgICAgICAgICAoU0NEX0JBU0UgKyAweDAzMCkKLQogLyo9PT0gRkggKGRhdGEgRmxvdyBIYW5kbGVyKSA9PT0qLwogI2RlZmluZSBGSF9CQVNFICAgICAoMHg4MDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCmluZGV4IDhiMTUyOGUuLjZiZTFmZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwpAQCAtNDIsMTQgKzQyLDExIEBACiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogCi0jZGVmaW5lIElXTF8xTUJfUkFURSAoMTI4ICogMTAyNCkKLSNkZWZpbmUgSVdMX0xFRF9USFJFU0hPTEQgKDE2KQotI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoMTApCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXUxNiBicmlnaHRuZXNzOwogCXU4IG9uX3RpbWU7Ci0JdTggb2ZfdGltZTsKKwl1OCBvZmZfdGltZTsKIH0gYmxpbmtfdGJsW10gPQogewogCXszMDAsIDI1LCAyNX0sCkBAIC02MSw5ICs1OCwxNiBAQAogCXsxNSwgOTUsIDk1IH0sCiAJezEwLCAxMTAsIDExMH0sCiAJezUsIDEzMCwgMTMwfSwKLQl7MCwgMTY3LCAxNjd9CisJezAsIDE2NywgMTY3fSwKKwkvKlNPTElEX09OKi8KKwl7LTEsIElXTF9MRURfU09MSUQsIDB9CiB9OwogCisjZGVmaW5lIElXTF8xTUJfUkFURSAoMTI4ICogMTAyNCkKKyNkZWZpbmUgSVdMX0xFRF9USFJFU0hPTEQgKDE2KQorI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkgLypFeGNsdWRlIFNvbGlkIG9uKi8KKyNkZWZpbmUgSVdMX1NPTElEX0JMSU5LX0lEWCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkKKwogc3RhdGljIGludCBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2soc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCkBAIC03MSw2ICs3NSwxMCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2JyaWdodG5lc3NfdG9faWR4KGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlyZXR1cm4gZmxzKDB4MDAwMDAwRkYgJiAodTMyKWJyaWdodG5lc3MpOworfQogCiAvKiBTZW5kIGxlZCBjb21tYW5kICovCiBzdGF0aWMgaW50IGl3bF9zZW5kX2xlZF9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKQEAgLTgxLDEzICs4OSwzMyBAQAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQpLAogCQkuZGF0YSA9IGxlZF9jbWQsCiAJCS5tZXRhLmZsYWdzID0gQ01EX0FTWU5DLAotCQkubWV0YS51LmNhbGxiYWNrID0gaXdsMzk0NV9sZWRfY21kX2NhbGxiYWNrCisJCS5tZXRhLnUuY2FsbGJhY2sgPSBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2ssCiAJfTsKIAogCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCiAKKworLyogU2V0IGxlZCBvbiBjb21tYW5kICovCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3BhdHRlcm4oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgaWR4KQoreworCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkX2NtZCA9IHsKKwkJLmlkID0gbGVkX2lkLAorCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKKwl9OworCisJQlVHX09OKGlkeCA+IElXTF9NQVhfQkxJTktfVEJMKTsKKworCWxlZF9jbWQub24gPSBibGlua190YmxbaWR4XS5vbl90aW1lOworCWxlZF9jbWQub2ZmID0gYmxpbmtfdGJsW2lkeF0ub2ZmX3RpbWU7CisKKwlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7Cit9CisKKworI2lmIDEKIC8qIFNldCBsZWQgb24gY29tbWFuZCAqLwogc3RhdGljIGludCBpd2wzOTQ1X2xlZF9vbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewpAQCAtMTAwLDMwICsxMjgsNiBAQAogCXJldHVybiBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKIH0KIAotLyogU2V0IGxlZCBvbiBjb21tYW5kICovCi1zdGF0aWMgaW50IGl3bDM5NDVfbGVkX3BhdHRlcm4oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCwKLQkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCi17Ci0Jc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0gewotCQkuaWQgPSBsZWRfaWQsCi0JCS5vbiA9IGJyaWdodG5lc3MsCi0JCS5vZmYgPSBicmlnaHRuZXNzLAotCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKLQl9OwotCWlmIChicmlnaHRuZXNzID09IExFRF9GVUxMKSB7Ci0JCWxlZF9jbWQub24gPSBJV0xfTEVEX1NPTElEOwotCQlsZWRfY21kLm9mZiA9IDA7Ci0JfQotCXJldHVybiBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKLX0KLQotLyogU2V0IGxlZCByZWdpc3RlciBvZmYgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb25fcmVnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpCi17Ci0JSVdMX0RFQlVHX0xFRCgibGVkIG9uICVkXG4iLCBsZWRfaWQpOwotCXJldHVybiBpd2wzOTQ1X2xlZF9vbihwcml2LCBsZWRfaWQpOwotfQotCiAvKiBTZXQgbGVkIG9mZiBjb21tYW5kICovCiBzdGF0aWMgaW50IGl3bDM5NDVfbGVkX29mZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewpAQCAtMTM2LDI3ICsxNDAsNyBAQAogCUlXTF9ERUJVR19MRUQoImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CiAJcmV0dXJuIGl3bF9zZW5kX2xlZF9jbWQocHJpdiwgJmxlZF9jbWQpOwogfQotCi0vKiBTZXQgbGVkIHJlZ2lzdGVyIG9mZiAqLwotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9vZmZfcmVnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpCi17Ci0JaXdsMzk0NV9sZWRfb2ZmKHByaXYsIGxlZF9pZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFNldCBsZWQgYmxpbmsgY29tbWFuZCAqLwotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9ub3Rfc29saWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCwKLQkJCSAgICAgICB1OCBicmlnaHRuZXNzKQotewotCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkX2NtZCA9IHsKLQkJLmlkID0gbGVkX2lkLAotCQkub24gPSBicmlnaHRuZXNzLAotCQkub2ZmID0gYnJpZ2h0bmVzcywKLQkJLmludGVydmFsID0gSVdMX0RFRl9MRURfSU5UUlZMCi0JfTsKLQotCXJldHVybiBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKLX0KKyNlbmRpZgogCiAKIC8qCkBAIC0yMDYsOCArMTkwLDEwIEBACiAJCQlsZWQtPmxlZF9vZmYocHJpdiwgSVdMX0xFRF9MSU5LKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWYgKGxlZC0+bGVkX3BhdHRlcm4pCi0JCQlsZWQtPmxlZF9wYXR0ZXJuKHByaXYsIElXTF9MRURfTElOSywgYnJpZ2h0bmVzcyk7CisJCWlmIChsZWQtPmxlZF9wYXR0ZXJuKSB7CisJCQlpbnQgaWR4ID0gaXdsMzk0NV9icmlnaHRuZXNzX3RvX2lkeChicmlnaHRuZXNzKTsKKwkJCWxlZC0+bGVkX3BhdHRlcm4ocHJpdiwgSVdMX0xFRF9MSU5LLCBpZHgpOworCQl9CiAJCWJyZWFrOwogCX0KIH0KQEAgLTI1MiwyNCArMjM4LDIwIEBACiBzdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCiB7CiAJaW50IGluZGV4OwotCXU4IGJsaW5rX3JhdGU7CisJdTY0IGN1cnJlbnRfdHB0ID0gcHJpdi0+cnh0eHBhY2tldHM7CisJczY0IHRwdCA9IGN1cnJlbnRfdHB0IC0gcHJpdi0+bGVkX3RwdDsKIAotCWlmIChwcml2LT5yeHR4cGFja2V0cyA8IElXTF9MRURfVEhSRVNIT0xEKQotCQlpbmRleCA9IDEwOwotCWVsc2UgewotCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBJV0xfTUFYX0JMSU5LX1RCTDsgaW5kZXgrKykgewotCQkJaWYgKHByaXYtPnJ4dHhwYWNrZXRzID4gKGJsaW5rX3RibFtpbmRleF0uYnJpZ2h0bmVzcyAqCi0JCQkJCQkgSVdMXzFNQl9SQVRFKSkKLQkJCQlicmVhazsKLQkJfQotCX0KLQkvKiBpZiAwIGZyYW1lIGlzIHRyYW5zZmVyZWQgKi8KLQlpZiAoKGluZGV4ID09IElXTF9NQVhfQkxJTktfVEJMKSB8fCAhcHJpdi0+YWxsb3dfYmxpbmtpbmcpCi0JCWJsaW5rX3JhdGUgPSBJV0xfTEVEX1NPTElEOworCWlmICh0cHQgPCAwKQorCQl0cHQgPSAtdHB0OworCXByaXYtPmxlZF90cHQgPSBjdXJyZW50X3RwdDsKKworCWlmICghcHJpdi0+YWxsb3dfYmxpbmtpbmcpCisJCWluZGV4ID0gSVdMX01BWF9CTElOS19UQkw7CiAJZWxzZQotCQlibGlua19yYXRlID0gYmxpbmtfdGJsW2luZGV4XS5vbl90aW1lOwotCi0JcmV0dXJuIGJsaW5rX3JhdGU7CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IElXTF9NQVhfQkxJTktfVEJMOyBpbmRleCsrKQorCQkJaWYgKHRwdCA+IChibGlua190YmxbaW5kZXhdLmJyaWdodG5lc3MgKiBJV0xfMU1CX1JBVEUpKQorCQkJCWJyZWFrOworCXJldHVybiBpbmRleDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfcmZfa2lsbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQpAQCAtMjg1LDcgKzI2Nyw3IEBACiAgKi8KIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQogewotCXU4IGJsaW5rX3JhdGU7CisJdTggYmxpbmtfaWR4OwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7CiAJCXByaXYtPmxhc3RfYmxpbmtfdGltZSA9IDA7CkBAIC0yOTgsOSArMjgwLDEwIEBACiAKIAlpZiAoIXByaXYtPmFsbG93X2JsaW5raW5nKSB7CiAJCXByaXYtPmxhc3RfYmxpbmtfdGltZSA9IDA7Ci0JCWlmIChwcml2LT5sYXN0X2JsaW5rX3JhdGUgIT0gSVdMX0xFRF9TT0xJRCkgewotCQkJcHJpdi0+bGFzdF9ibGlua19yYXRlID0gSVdMX0xFRF9TT0xJRDsKLQkJCWl3bDM5NDVfbGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7CisJCWlmIChwcml2LT5sYXN0X2JsaW5rX3JhdGUgIT0gSVdMX1NPTElEX0JMSU5LX0lEWCkgeworCQkJcHJpdi0+bGFzdF9ibGlua19yYXRlID0gSVdMX1NPTElEX0JMSU5LX0lEWDsKKwkJCWl3bDM5NDVfbGVkX3BhdHRlcm4ocHJpdiwgSVdMX0xFRF9MSU5LLAorCQkJCQkgICAgSVdMX1NPTElEX0JMSU5LX0lEWCk7CiAJCX0KIAkJcmV0dXJuOwogCX0KQEAgLTMwOSwyMSArMjkyLDE0IEBACiAJCQltc2Vjc190b19qaWZmaWVzKDEwMDApKSkKIAkJcmV0dXJuOwogCi0JYmxpbmtfcmF0ZSA9IGdldF9ibGlua19yYXRlKHByaXYpOworCWJsaW5rX2lkeCA9IGdldF9ibGlua19yYXRlKHByaXYpOwogCiAJLyogY2FsbCBvbmx5IGlmIGJsaW5rIHJhdGUgY2hhbmdlICovCi0JaWYgKGJsaW5rX3JhdGUgIT0gcHJpdi0+bGFzdF9ibGlua19yYXRlKSB7Ci0JCWlmIChibGlua19yYXRlICE9IElXTF9MRURfU09MSUQpIHsKLQkJCXByaXYtPmxhc3RfYmxpbmtfdGltZSA9IGppZmZpZXMgKwotCQkJCQkJbXNlY3NfdG9famlmZmllcygxMDAwKTsKLQkJCWl3bDM5NDVfbGVkX25vdF9zb2xpZChwcml2LCBJV0xfTEVEX0xJTkssIGJsaW5rX3JhdGUpOwotCQl9IGVsc2UgewotCQkJcHJpdi0+bGFzdF9ibGlua190aW1lID0gMDsKLQkJCWl3bDM5NDVfbGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7Ci0JCX0KLQl9CisJaWYgKGJsaW5rX2lkeCAhPSBwcml2LT5sYXN0X2JsaW5rX3JhdGUpCisJCWl3bDM5NDVfbGVkX3BhdHRlcm4ocHJpdiwgSVdMX0xFRF9MSU5LLCBibGlua19pZHgpOwogCi0JcHJpdi0+bGFzdF9ibGlua19yYXRlID0gYmxpbmtfcmF0ZTsKKwlwcml2LT5sYXN0X2JsaW5rX3RpbWUgPSBqaWZmaWVzOworCXByaXYtPmxhc3RfYmxpbmtfcmF0ZSA9IGJsaW5rX2lkeDsKIAlwcml2LT5yeHR4cGFja2V0cyA9IDA7CiB9CiAKQEAgLTMzNyw2ICszMTMsNyBAQAogCiAJcHJpdi0+bGFzdF9ibGlua19yYXRlID0gMDsKIAlwcml2LT5yeHR4cGFja2V0cyA9IDA7CisJcHJpdi0+bGVkX3RwdCA9IDA7CiAJcHJpdi0+bGFzdF9ibGlua190aW1lID0gMDsKIAlwcml2LT5hbGxvd19ibGlua2luZyA9IDA7CiAKQEAgLTM0NCw4ICszMjEsOCBAQAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIml3bC0lczpyYWRpbyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCi0JcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb24gPSBpd2wzOTQ1X2xlZF9vbl9yZWc7Ci0JcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb2ZmID0gaXdsMzk0NV9sZWRfb2ZmX3JlZzsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vbiA9IGl3bDM5NDVfbGVkX29uOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubGVkX29mZiA9IGl3bDM5NDVfbGVkX29mZjsKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9wYXR0ZXJuID0gTlVMTDsKIAogCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LApAQCAtMzY0LDggKzM0MSw4IEBACiAJCQkJICAgSVdMX0xFRF9UUkdfQVNTT0MsIDAsCiAJCQkJICAgbmFtZSwgdHJpZ2dlcik7CiAJLyogZm9yIGFzc29jIGFsd2F5cyB0dXJuIGxlZCBvbiAqLwotCXByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX29uID0gaXdsMzk0NV9sZWRfb25fcmVnOwotCXByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX29mZiA9IGl3bDM5NDVfbGVkX29uX3JlZzsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLmxlZF9vbiA9IGl3bDM5NDVfbGVkX29uOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX29mZiA9IGl3bDM5NDVfbGVkX29uOwogCXByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX3BhdHRlcm4gPSBOVUxMOwogCiAJaWYgKHJldCkKQEAgLTM5MSw2ICszNjgsNyBAQAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJpd2wtJXM6VFgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwogCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LAogCQkJCSAgICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLAogCQkJCSAgIElXTF9MRURfVFJHX1RYLCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmgKaW5kZXggYjFkMmY2Yi4uNDdiN2UwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCkBAIC01NCw3ICs1NCw3IEBACiAJaW50ICgqbGVkX29uKSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCk7CiAJaW50ICgqbGVkX29mZikgKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpOwogCWludCAoKmxlZF9wYXR0ZXJuKSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCwKLQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpOworCQkJICAgIHVuc2lnbmVkIGludCBpZHgpOwogCiAJZW51bSBsZWRfdHlwZSB0eXBlOwogCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCmluZGV4IDg1YzIyNjQuLjEwYzY0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CkBAIC00NDYsOCArNDQ1LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcnNfdHhfc3RhdHVzKHZvaWQgKnByaXZfcmF0ZSwKIAkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnR4X3Jlc3ApCisJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1OCByZXRyaWVzLCBjdXJyZW50X2NvdW50OwogCWludCBzY2FsZV9yYXRlX2luZGV4LCBmaXJzdF9pbmRleCwgbGFzdF9pbmRleDsKQEAgLTQ1OCwxNCArNDU2LDE1IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKIAlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOwogCiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwogCiAKLQlyZXRyaWVzID0gdHhfcmVzcC0+cmV0cnlfY291bnQ7Ci0JZmlyc3RfaW5kZXggPSB0eF9yZXNwLT5jb250cm9sLnR4X3JhdGUtPmh3X3ZhbHVlOworCXJldHJpZXMgPSBpbmZvLT5zdGF0dXMucmV0cnlfY291bnQ7CisJZmlyc3RfaW5kZXggPSBzYmFuZC0+Yml0cmF0ZXNbaW5mby0+dHhfcmF0ZV9pZHhdLmh3X3ZhbHVlOwogCWlmICgoZmlyc3RfaW5kZXggPCAwKSB8fCAoZmlyc3RfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlQpKSB7CiAJCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogUmF0ZSBvdXQgb2YgYm91bmRzOiAlZFxuIiwgZmlyc3RfaW5kZXgpOwogCQlyZXR1cm47CkBAIC01MjYsMTEgKzUyNSwxMSBAQAogCS8qIFVwZGF0ZSB0aGUgbGFzdCBpbmRleCB3aW5kb3cgd2l0aCBzdWNjZXNzL2ZhaWx1cmUgYmFzZWQgb24gQUNLICovCiAJSVdMX0RFQlVHX1JBVEUoIlVwZGF0ZSByYXRlICVkIHdpdGggJXMuXG4iLAogCQkgICAgICAgbGFzdF9pbmRleCwKLQkJICAgICAgICh0eF9yZXNwLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLKSA/CisJCSAgICAgICAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spID8KIAkJICAgICAgICJzdWNjZXNzIiA6ICJmYWlsdXJlIik7CiAJaXdsMzk0NV9jb2xsZWN0X3R4X2RhdGEocnNfc3RhLAogCQkJICAgICZyc19zdGEtPndpbltsYXN0X2luZGV4XSwKLQkJCSAgICB0eF9yZXNwLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLLCAxKTsKKwkJCSAgICBpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSywgMSk7CiAKIAkvKiBXZSB1cGRhdGVkIHRoZSByYXRlIHNjYWxlIHdpbmRvdyAtLSBpZiBpdHMgYmVlbiBtb3JlIHRoYW4KIAkgKiBmbHVzaF90aW1lIHNpbmNlIHRoZSBsYXN0IHJ1biwgc2NoZWR1bGUgdGhlIGZsdXNoCkBAIC02NzAsNyArNjY5LDcgQEAKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKIAkgICAgIXN0YSB8fCAhc3RhLT5yYXRlX2N0cmxfcHJpdikgewogCQlJV0xfREVCVUdfUkFURSgibGVhdmU6IE5vIFNUQSBwcml2IGRhdGEgdG8gdXBkYXRlIVxuIik7Ci0JCXNlbC0+cmF0ZSA9IHJhdGVfbG93ZXN0KGxvY2FsLCBzYmFuZCwgc3RhKTsKKwkJc2VsLT5yYXRlX2lkeCA9IHJhdGVfbG93ZXN0X2luZGV4KGxvY2FsLCBzYmFuZCwgc3RhKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CkBAIC04MTQsNyArODEzLDcgQEAKIAogCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogJWRcbiIsIGluZGV4KTsKIAotCXNlbC0+cmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbc3RhLT50eHJhdGVfaWR4XTsKKwlzZWwtPnJhdGVfaWR4ID0gc3RhLT50eHJhdGVfaWR4OwogfQogCiBzdGF0aWMgc3RydWN0IHJhdGVfY29udHJvbF9vcHMgcnNfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDU1YWM4NTAuLmMyYTc2NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTI4Myw4ICsyODMsNyBAQAogCQlxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKIAogCQl0eF9pbmZvID0gJnR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl07Ci0JCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgdHhfaW5mby0+c2tiWzBdLAotCQkJCQkgICAgJnR4X2luZm8tPnN0YXR1cyk7CisJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgdHhfaW5mby0+c2tiWzBdKTsKIAkJdHhfaW5mby0+c2tiWzBdID0gTlVMTDsKIAkJaXdsMzk0NV9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKIAl9CkBAIC0zMDYsNyArMzA1LDcgQEAKIAlpbnQgdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcXVlbmNlKTsKIAlpbnQgaW5kZXggPSBTRVFfVE9fSU5ERVgoc2VxdWVuY2UpOwogCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnR4X3N0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJc3RydWN0IGl3bDM5NDVfdHhfcmVzcCAqdHhfcmVzcCA9ICh2b2lkICopJnBrdC0+dS5yYXdbMF07CiAJdTMyICBzdGF0dXMgPSBsZTMyX3RvX2NwdSh0eF9yZXNwLT5zdGF0dXMpOwogCWludCByYXRlX2lkeDsKQEAgLTMxOSwxOSArMzE4LDIyIEBACiAJCXJldHVybjsKIAl9CiAKLQl0eF9zdGF0dXMgPSAmKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc3RhdHVzKTsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXSk7CisJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKIAotCXR4X3N0YXR1cy0+cmV0cnlfY291bnQgPSB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lOworCWluZm8tPnN0YXR1cy5yZXRyeV9jb3VudCA9IHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWU7CiAJLyogdHhfc3RhdHVzLT5ydHNfcmV0cnlfY291bnQgPSB0eF9yZXNwLT5mYWlsdXJlX3J0czsgKi8KLQl0eF9zdGF0dXMtPmZsYWdzID0gKChzdGF0dXMgJiBUWF9TVEFUVVNfTVNLKSA9PSBUWF9TVEFUVVNfU1VDQ0VTUykgPwotCQkJCUlFRUU4MDIxMV9UWF9TVEFUVVNfQUNLIDogMDsKKwlpbmZvLT5mbGFncyB8PSAoKHN0YXR1cyAmIFRYX1NUQVRVU19NU0spID09IFRYX1NUQVRVU19TVUNDRVNTKSA/CisJCQkJSUVFRTgwMjExX1RYX1NUQVRfQUNLIDogMDsKIAogCUlXTF9ERUJVR19UWCgiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHBsY3AgcmF0ZSAlZCByZXRyaWVzICVkXG4iLAogCQkJdHhxX2lkLCBpd2wzOTQ1X2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCiAJCQl0eF9yZXNwLT5yYXRlLCB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKIAogCXJhdGVfaWR4ID0gaXdsMzk0NV9od3JhdGVfdG9fcGxjcF9pZHgodHhfcmVzcC0+cmF0ZSk7Ci0JdHhfc3RhdHVzLT5jb250cm9sLnR4X3JhdGUgPSAmcHJpdi0+aWVlZV9yYXRlc1tyYXRlX2lkeF07CisJaWYgKGluZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJcmF0ZV9pZHggLT0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwlpbmZvLT50eF9yYXRlX2lkeCA9IHJhdGVfaWR4OwogCUlXTF9ERUJVR19UWF9SRVBMWSgiVHggcXVldWUgcmVjbGFpbSAlZFxuIiwgaW5kZXgpOwogCWl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKIApAQCAtMzg2LDcgKzM4OCw3IEBACiAJdTMyIHByaW50X2R1bXAgPSAwOwkvKiBzZXQgdG8gMSB0byBkdW1wIGFsbCBmcmFtZXMnIGNvbnRlbnRzICovCiAJdTMyIGh1bmRyZWQgPSAwOwogCXUzMiBkYXRhZnJhbWUgPSAwOwotCXUxNiBmYzsKKwlfX2xlMTYgZmM7CiAJdTE2IHNlcV9jdGw7CiAJdTE2IGNoYW5uZWw7CiAJdTE2IHBoeV9mbGFnczsKQEAgLTQwNSw3ICs0MDcsNyBAQAogCXU4ICpkYXRhID0gSVdMX1JYX0RBVEEocGt0KTsKIAogCS8qIE1BQyBoZWFkZXIgKi8KLQlmYyA9IGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY29udHJvbCk7CisJZmMgPSBoZWFkZXItPmZyYW1lX2NvbnRyb2w7CiAJc2VxX2N0bCA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c2VxX2N0cmwpOwogCiAJLyogbWV0YWRhdGEgKi8KQEAgLTQyOSw4ICs0MzEsOCBAQAogCiAJLyogaWYgZGF0YSBmcmFtZSBpcyB0byB1cyBhbmQgYWxsIGlzIGdvb2QsCiAJICogICAob3B0aW9uYWxseSkgcHJpbnQgc3VtbWFyeSBmb3Igb25seSAxIG91dCBvZiBldmVyeSAxMDAgKi8KLQlpZiAodG9fdXMgJiYgKGZjICYgfklFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgPT0KLQkgICAgKElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GVFlQRV9EQVRBKSkgeworCWlmICh0b191cyAmJiAoZmMgJiB+Y3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkgPT0KKwkgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZUWVBFX0RBVEEpKSB7CiAJCWRhdGFmcmFtZSA9IDE7CiAJCWlmICghZ3JvdXAxMDApCiAJCQlwcmludF9zdW1tYXJ5ID0gMTsJLyogcHJpbnQgZWFjaCBmcmFtZSAqLwpAQCAtNDUzLDEzICs0NTUsMTMgQEAKIAogCQlpZiAoaHVuZHJlZCkKIAkJCXRpdGxlID0gIjEwMEZyYW1lcyI7Ci0JCWVsc2UgaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfUkVUUlkpCisJCWVsc2UgaWYgKGllZWU4MDIxMV9oYXNfcmV0cnkoZmMpKQogCQkJdGl0bGUgPSAiUmV0cnkiOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVzcG9uc2UoZmMpKQorCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVzcChmYykpCiAJCQl0aXRsZSA9ICJBc2NSc3AiOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwb25zZShmYykpCisJCWVsc2UgaWYgKGllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3AoZmMpKQogCQkJdGl0bGUgPSAiUmFzUnNwIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3BvbnNlKGZjKSkgeworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpIHsKIAkJCXRpdGxlID0gIlByYlJzcCI7CiAJCQlwcmludF9kdW1wID0gMTsJLyogZHVtcCBmcmFtZSBjb250ZW50cyAqLwogCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSB7CkBAIC00ODgsMTQgKzQ5MCwxNCBAQAogCQlpZiAoZGF0YWZyYW1lKQogCQkJSVdMX0RFQlVHX1JYKCIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgogCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgY2hubD0lZCwgcmF0ZT0lZCwgXG4iLAotCQkJCSAgICAgdGl0bGUsIGZjLCBoZWFkZXItPmFkZHIxWzVdLAorCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKIAkJCQkgICAgIGxlbmd0aCwgcnNzaSwgY2hhbm5lbCwgcmF0ZSk7CiAJCWVsc2UgewogCQkJLyogc3JjL2RzdCBhZGRyZXNzZXMgYXNzdW1lIG1hbmFnZWQgbW9kZSAqLwogCQkJSVdMX0RFQlVHX1JYKCIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCAiCiAJCQkJICAgICAic3JjPTB4JTAyeCwgcnNzaT0ldSwgdGltPSVsdSB1c2VjLCAiCiAJCQkJICAgICAicGh5PTB4JTAyeCwgY2hubD0lZFxuIiwKLQkJCQkgICAgIHRpdGxlLCBmYywgaGVhZGVyLT5hZGRyMVs1XSwKKwkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCiAJCQkJICAgICBoZWFkZXItPmFkZHIzWzVdLCByc3NpLAogCQkJCSAgICAgdHNmX2xvdyAtIHByaXYtPnNjYW5fc3RhcnRfdHNmLAogCQkJCSAgICAgcGh5X2ZsYWdzLCBjaGFubmVsKTsKQEAgLTUxMiw2ICs1MTQsMjMgQEAKIH0KICNlbmRpZgogCisvKiBUaGlzIGlzIG5lY2Vzc2FyeSBvbmx5IGZvciBhIG51bWJlciBvZiBzdGF0aXN0aWNzLCBzZWUgdGhlIGNhbGxlci4gKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQoreworCS8qIEZpbHRlciBpbmNvbWluZyBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSB0YXJnZXRlZCB0b3dhcmQKKwkgKiB0aGlzIG5ldHdvcmssIGRpc2NhcmRpbmcgcGFja2V0cyBjb21pbmcgZnJvbSBvdXJzZWx2ZXMgKi8KKwlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6IC8qIEhlYWRlcjogRGVzdC4gfCBTb3VyY2UgICAgfCBCU1NJRCAqLworCQkvKiBwYWNrZXRzIHRvIG91ciBJQlNTIHVwZGF0ZSBpbmZvcm1hdGlvbiAqLworCQlyZXR1cm4gIWNvbXBhcmVfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIzLCBwcml2LT5ic3NpZCk7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6IC8qIEhlYWRlcjogRGVzdC4gfCBBUHtCU1NJRH0gfCBTb3VyY2UgKi8KKwkJLyogcGFja2V0cyB0byBvdXIgSUJTUyB1cGRhdGUgaW5mb3JtYXRpb24gKi8KKwkJcmV0dXJuICFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMiwgcHJpdi0+YnNzaWQpOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9hZGRfcmFkaW90YXAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTUyMCw3ICs1MzksNyBAQAogewogCS8qIEZpcnN0IGNhY2hlIGFueSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGJlZm9yZSB3ZSBvdmVyd3JpdGUKIAkgKiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhlIHNrYiBmcm9tIHRoZSBoYXJkd2FyZSAqLwotCXM4IHNpZ25hbCA9IHN0YXRzLT5zc2k7CisJczggc2lnbmFsID0gc3RhdHMtPnNpZ25hbDsKIAlzOCBub2lzZSA9IDA7CiAJaW50IHJhdGUgPSBzdGF0cy0+cmF0ZV9pZHg7CiAJdTY0IHRzZiA9IHN0YXRzLT5tYWN0aW1lOwpAQCAtNjA2LDEyICs2MjUsMTIgQEAKIAlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX1JBRElPVEFQOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2hhbmRsZV9kYXRhX3BhY2tldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgaXNfZGF0YSwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKUlXTF9SWF9EQVRBKHBrdCk7CiAJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyICpyeF9oZHIgPSBJV0xfUlhfSERSKHBrdCk7CiAJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kICpyeF9lbmQgPSBJV0xfUlhfRU5EKHBrdCk7CiAJc2hvcnQgbGVuID0gbGUxNl90b19jcHUocnhfaGRyLT5sZW4pOwpAQCAtNjMzLDggKzY1Miw2IEBACiAJLyogU2V0IHRoZSBzaXplIG9mIHRoZSBza2IgdG8gdGhlIHNpemUgb2YgdGhlIGZyYW1lICovCiAJc2tiX3B1dChyeGItPnNrYiwgbGUxNl90b19jcHUocnhfaGRyLT5sZW4pKTsKIAotCWhkciA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0KIAlpZiAoaXdsMzk0NV9wYXJhbV9od2NyeXB0bykKIAkJaXdsMzk0NV9zZXRfZGVjcnlwdGVkX2ZsYWcocHJpdiwgcnhiLT5za2IsCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KHJ4X2VuZC0+c3RhdHVzKSwgc3RhdHMpOwpAQCAtNjQzLDcgKzY2MCw3IEBACiAJCWl3bDM5NDVfYWRkX3JhZGlvdGFwKHByaXYsIHJ4Yi0+c2tiLCByeF9oZHIsIHN0YXRzKTsKIAogI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKLQlpZiAoaXNfZGF0YSkKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJcHJpdi0+cnh0eHBhY2tldHMgKz0gbGVuOwogI2VuZGlmCiAJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHJ4Yi0+c2tiLCBzdGF0cyk7CkBAIC02OTIsMTIgKzcwOSwxMiBAQAogCX0KIAogCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX01OVFIpIHsKLQkJaXdsMzk0NV9oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwgMSwgcnhiLCAmcnhfc3RhdHVzKTsKKwkJaXdsMzk0NV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShwcml2LCByeGIsICZyeF9zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCiAJLyogQ29udmVydCAzOTQ1J3MgcnNzaSBpbmRpY2F0b3IgdG8gZEJtICovCi0Jcnhfc3RhdHVzLnNzaSA9IHJ4X3N0YXRzLT5yc3NpIC0gSVdMX1JTU0lfT0ZGU0VUOworCXJ4X3N0YXR1cy5zaWduYWwgPSByeF9zdGF0cy0+cnNzaSAtIElXTF9SU1NJX09GRlNFVDsKIAogCS8qIFNldCBkZWZhdWx0IG5vaXNlIHZhbHVlIHRvIC0xMjcgKi8KIAlpZiAocHJpdi0+bGFzdF9yeF9ub2lzZSA9PSAwKQpAQCAtNzE2LDIxICs3MzMsMjEgQEAKIAkgKiBDYWxjdWxhdGUgcnhfc3RhdHVzLnNpZ25hbCAocXVhbGl0eSBpbmRpY2F0b3IgaW4gJSkgYmFzZWQgb24gU05SLiAqLwogCWlmIChyeF9zdGF0c19ub2lzZV9kaWZmKSB7CiAJCXNuciA9IHJ4X3N0YXRzX3NpZ19hdmcgLyByeF9zdGF0c19ub2lzZV9kaWZmOwotCQlyeF9zdGF0dXMubm9pc2UgPSByeF9zdGF0dXMuc3NpIC0KKwkJcnhfc3RhdHVzLm5vaXNlID0gcnhfc3RhdHVzLnNpZ25hbCAtCiAJCQkJCWl3bDM5NDVfY2FsY19kYl9mcm9tX3JhdGlvKHNucik7Ci0JCXJ4X3N0YXR1cy5zaWduYWwgPSBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNzaSwKKwkJcnhfc3RhdHVzLnF1YWwgPSBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNpZ25hbCwKIAkJCQkJCQkgcnhfc3RhdHVzLm5vaXNlKTsKIAogCS8qIElmIG5vaXNlIGluZm8gbm90IGF2YWlsYWJsZSwgY2FsY3VsYXRlIHNpZ25hbCBxdWFsaXR5IGluZGljYXRvciAoJSkKIAkgKiAgIHVzaW5nIGp1c3QgdGhlIGRCbSBzaWduYWwgbGV2ZWwuICovCiAJfSBlbHNlIHsKIAkJcnhfc3RhdHVzLm5vaXNlID0gcHJpdi0+bGFzdF9yeF9ub2lzZTsKLQkJcnhfc3RhdHVzLnNpZ25hbCA9IGl3bDM5NDVfY2FsY19zaWdfcXVhbChyeF9zdGF0dXMuc3NpLCAwKTsKKwkJcnhfc3RhdHVzLnF1YWwgPSBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNpZ25hbCwgMCk7CiAJfQogCiAKIAlJV0xfREVCVUdfU1RBVFMoIlJzc2kgJWQgbm9pc2UgJWQgcXVhbCAlZCBzaWdfYXZnICVkIG5vaXNlX2RpZmYgJWRcbiIsCi0JCQlyeF9zdGF0dXMuc3NpLCByeF9zdGF0dXMubm9pc2UsIHJ4X3N0YXR1cy5zaWduYWwsCisJCQlyeF9zdGF0dXMuc2lnbmFsLCByeF9zdGF0dXMubm9pc2UsIHJ4X3N0YXR1cy5xdWFsLAogCQkJcnhfc3RhdHNfc2lnX2F2Zywgcnhfc3RhdHNfbm9pc2VfZGlmZik7CiAKIAloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilJV0xfUlhfREFUQShwa3QpOwpAQCAtNzQwLDggKzc1Nyw4IEBACiAJSVdMX0RFQlVHX1NUQVRTX0xJTUlUKCJbJWNdICVkIFJTU0k6JWQgU2lnbmFsOiV1LCBOb2lzZToldSwgUmF0ZToldVxuIiwKIAkJCSAgICAgIG5ldHdvcmtfcGFja2V0ID8gJyonIDogJyAnLAogCQkJICAgICAgbGUxNl90b19jcHUocnhfaGRyLT5jaGFubmVsKSwKLQkJCSAgICAgIHJ4X3N0YXR1cy5zc2ksIHJ4X3N0YXR1cy5zc2ksCi0JCQkgICAgICByeF9zdGF0dXMuc3NpLCByeF9zdGF0dXMucmF0ZV9pZHgpOworCQkJICAgICAgcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLnNpZ25hbCwKKwkJCSAgICAgIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnJhdGVfaWR4KTsKIAogI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCiAJaWYgKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiAoSVdMX0RMX1JYKSkKQEAgLTc1Miw3ICs3NjksNyBAQAogCWlmIChuZXR3b3JrX3BhY2tldCkgewogCQlwcml2LT5sYXN0X2JlYWNvbl90aW1lID0gbGUzMl90b19jcHUocnhfZW5kLT5iZWFjb25fdGltZXN0YW1wKTsKIAkJcHJpdi0+bGFzdF90c2YgPSBsZTY0X3RvX2NwdShyeF9lbmQtPnRpbWVzdGFtcCk7Ci0JCXByaXYtPmxhc3RfcnhfcnNzaSA9IHJ4X3N0YXR1cy5zc2k7CisJCXByaXYtPmxhc3RfcnhfcnNzaSA9IHJ4X3N0YXR1cy5zaWduYWw7CiAJCXByaXYtPmxhc3Rfcnhfbm9pc2UgPSByeF9zdGF0dXMubm9pc2U7CiAJfQogCkBAIC04NDAsMjYgKzg1NywxMSBAQAogCQkJfQogCQl9CiAKLQkJaXdsMzk0NV9oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwgMCwgcnhiLCAmcnhfc3RhdHVzKTsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlpd2wzOTQ1X3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHByaXYsIHJ4YiwgJnJ4X3N0YXR1cyk7CiAJCWJyZWFrOwotCi0JY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgotCQlicmVhazsKLQotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6IHsKLQkJREVDTEFSRV9NQUNfQlVGKG1hYzEpOwotCQlERUNMQVJFX01BQ19CVUYobWFjMik7Ci0JCURFQ0xBUkVfTUFDX0JVRihtYWMzKTsKLQotCQlpZiAodW5saWtlbHkoaXdsMzk0NV9pc19kdXBsaWNhdGVfcGFja2V0KHByaXYsIGhlYWRlcikpKQotCQkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIChkdXApOiAlcywgJXMsICVzXG4iLAotCQkJCSAgICAgICBwcmludF9tYWMobWFjMSwgaGVhZGVyLT5hZGRyMSksCi0JCQkJICAgICAgIHByaW50X21hYyhtYWMyLCBoZWFkZXItPmFkZHIyKSwKLQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzMsIGhlYWRlci0+YWRkcjMpKTsKLQkJZWxzZQotCQkJaXdsMzk0NV9oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwgMSwgcnhiLCAmcnhfc3RhdHVzKTsKLQkJYnJlYWs7Ci0JfQogCX0KIH0KIApAQCAtOTYyLDIzICs5NjQsMjQgQEAKICovCiB2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdHJsLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwgaW50IHR4X2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTE2IHJhdGVfaW5kZXggPSBtaW4oY3RybC0+dHhfcmF0ZS0+aHdfdmFsdWUgJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CisJdTE2IGh3X3ZhbHVlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CisJdTE2IHJhdGVfaW5kZXggPSBtaW4oaHdfdmFsdWUgJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CiAJdTE2IHJhdGVfbWFzazsKIAlpbnQgcmF0ZTsKIAl1OCBydHNfcmV0cnlfbGltaXQ7CiAJdTggZGF0YV9yZXRyeV9saW1pdDsKIAlfX2xlMzIgdHhfZmxhZ3M7Ci0JdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAKIAlyYXRlID0gaXdsMzk0NV9yYXRlc1tyYXRlX2luZGV4XS5wbGNwOwogCXR4X2ZsYWdzID0gY21kLT5jbWQudHgudHhfZmxhZ3M7CiAKIAkvKiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGdldCB0aGUgc3RhLT5zdXBwX3JhdGVzIHdoaWxlCi0JICogaW4gdGhpcyBydW5uaW5nIGNvbnRleHQ7IHBlcmhhcHMgZW5jb2RpbmcgaW50byBjdHJsLT50eF9yYXRlPyAqLworCSAqIGluIHRoaXMgcnVubmluZyBjb250ZXh0ICovCiAJcmF0ZV9tYXNrID0gSVdMX1JBVEVTX01BU0s7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTk5Nyw3ICsxMDAwLDcgQEAKIAllbHNlCiAJCXJ0c19yZXRyeV9saW1pdCA9IDc7CiAKLQlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3BvbnNlKGZjKSkgeworCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpIHsKIAkJZGF0YV9yZXRyeV9saW1pdCA9IDM7CiAJCWlmIChkYXRhX3JldHJ5X2xpbWl0IDwgcnRzX3JldHJ5X2xpbWl0KQogCQkJcnRzX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKQEAgLTEwMDcsMTIgKzEwMTAsMTIgQEAKIAlpZiAocHJpdi0+ZGF0YV9yZXRyeV9saW1pdCAhPSAtMSkKIAkJZGF0YV9yZXRyeV9saW1pdCA9IHByaXYtPmRhdGFfcmV0cnlfbGltaXQ7CiAKLQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9NR01UKSB7Ci0JCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUToKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVE6CisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkgeworCQlzd2l0Y2ggKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfU1RZUEUpKSB7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FVVEgpOgorCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpOgorCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpOgorCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk6CiAJCQlpZiAodHhfZmxhZ3MgJiBUWF9DTURfRkxHX1JUU19NU0spIHsKIAkJCQl0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19SVFNfTVNLOwogCQkJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQ1RTX01TSzsKQEAgLTEyMzMsNyArMTIzNiw3IEBACiAJaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShwcml2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9BTkFfUExMX0NGRywgKDEgPDwgMjQpKTsKKwlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1IzOV9BTkFfUExMX0NGR19WQUwpOwogCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKIAkJICAgIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfTDFBX05PX0wwU19SWCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAppbmRleCBjNzY5NWEyLi5mYTgxYmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCkBAIC0zNiw2ICszNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFfcmFkaW90YXAuaD4KIAorLyp1c2VkIGZvciByZmtpbGwqLworI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKIC8qIEhhcmR3YXJlIHNwZWNpZmljIGZpbGUgZGVmaW5lcyB0aGUgUENJIElEcyB0YWJsZSBmb3IgdGhhdCBoYXJkd2FyZSBtb2R1bGUgKi8KIGV4dGVybiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2wzOTQ1X2h3X2NhcmRfaWRzW107CiAKQEAgLTEyNCw3ICsxMjgsNiBAQAogCiAvKiBPbmUgZm9yIGVhY2ggVEZEICovCiBzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYltNQVhfTlVNX09GX1RCU107CiB9OwogCkBAIC01MDcsOCArNTEwLDYgQEAKIAl1OCBkYXRhWzBdOwkJLyogZGF0YSBpbiBzYW1lIG9yZGVyIGFzICJzaXplIiBlbGVtZW50cyAqLwogfTsKIAotI2RlZmluZSBJV0xfSUJTU19NQUNfSEFTSF9TSVpFIDMyCi0KIHN0cnVjdCBpd2wzOTQ1X2lic3Nfc2VxIHsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCXUxNiBzZXFfbnVtOwpAQCAtNTY2LDE3ICs1NjcsOCBAQAogCQkJCXN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpOwogZXh0ZXJuIHU4IGl3bDM5NDVfYWRkX3N0YXRpb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgY29uc3QgdTggKmJzc2lkLAogCQkJICBpbnQgaXNfYXAsIHU4IGZsYWdzKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKTsKIGV4dGVybiBpbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKIGV4dGVybiBpbnQgaXdsMzk0NV9lZXByb21faW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfaGFuZGxlX2RhdGFfcGFja2V0X21vbml0b3Ioc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiLAotCQkJCQkgICB2b2lkICpkYXRhLCBzaG9ydCBsZW4sCi0JCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cywKLQkJCQkJICAgdTE2IHBoeV9mbGFncyk7Ci1leHRlcm4gaW50IGl3bDM5NDVfaXNfZHVwbGljYXRlX3BhY2tldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKTsKIGV4dGVybiBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKIGV4dGVybiB2b2lkIGl3bDM5NDVfcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxKTsKQEAgLTY0NSw3ICs2MzcsNyBAQAogZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2dldF9yeF9yZWFkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAogCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0cmwsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCSAgICAgaW50IHN0YV9pZCwgaW50IHR4X2lkKTsKIGV4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwpAQCAtNjg3LDYgKzY3OSwxOCBAQAogCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JV0wzOTQ1X1JGS0lMTAorc3RydWN0IGl3bDM5NDVfcHJpdjsKKwordm9pZCBpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Cit2b2lkIGl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7CitpbnQgaXdsMzk0NV9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9yZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7fQorc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CisjZW5kaWYKKwogI2RlZmluZSBJV0xfTUFYX05VTV9RVUVVRVMgSVdMMzlfTUFYX05VTV9RVUVVRVMKIAogc3RydWN0IGl3bDM5NDVfcHJpdiB7CkBAIC03ODAsMTIgKzc4NCwxNyBAQAogCXN0cnVjdCBpd2wzOTQ1X2luaXRfYWxpdmVfcmVzcCBjYXJkX2FsaXZlX2luaXQ7CiAJc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCBjYXJkX2FsaXZlOwogCisjaWZkZWYgQ09ORklHX0lXTDM5NDVfUkZLSUxMCisJc3RydWN0IHJma2lsbCAqcmZraWxsOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCiAJc3RydWN0IGl3bDM5NDVfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9ibGlua190aW1lOwogCXU4IGxhc3RfYmxpbmtfcmF0ZTsKIAl1OCBhbGxvd19ibGlua2luZzsKIAl1bnNpZ25lZCBpbnQgcnh0eHBhY2tldHM7CisJdTY0IGxlZF90cHQ7CiAjZW5kaWYKIAogCkBAIC04MzYsMjAgKzg0NSwxMCBAQAogCiAJdTggbWFjODAyMTFfcmVnaXN0ZXJlZDsKIAotCXUzMiBub3RpZl9taXNzZWRfYmVhY29uczsKLQogCS8qIFJ4J2QgcGFja2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwogCXUzMiBsYXN0X2JlYWNvbl90aW1lOwogCXU2NCBsYXN0X3RzZjsKIAotCS8qIER1cGxpY2F0ZSBwYWNrZXQgZGV0ZWN0aW9uICovCi0JdTE2IGxhc3Rfc2VxX251bTsKLQl1MTYgbGFzdF9mcmFnX251bTsKLQl1bnNpZ25lZCBsb25nIGxhc3RfcGFja2V0X3RpbWU7Ci0KLQkvKiBIYXNoIHRhYmxlIGZvciBmaW5kaW5nIHN0YXRpb25zIGluIElCU1MgbmV0d29yayAqLwotCXN0cnVjdCBsaXN0X2hlYWQgaWJzc19tYWNfaGFzaFtJV0xfSUJTU19NQUNfSEFTSF9TSVpFXTsKLQogCS8qIGVlcHJvbSAqLwogCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSBlZXByb207CiAKQEAgLTg4Niw2ICs4ODUsNyBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXBvcnRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVxdWVzdF9zY2FuOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBiZWFjb25fdXBkYXRlOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXRfbW9uaXRvcjsKIAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdGFza2xldDsKIApAQCAtOTI0LDExICs5MjQsNiBAQAogCXJldHVybiAoY2hfaW5mby0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9WQUxJRCkgPyAxIDogMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9uYXJyb3coY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQotewotCXJldHVybiAoY2hfaW5mby0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9OQVJST1cpID8gMSA6IDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfcmFkYXIoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewogCXJldHVybiAoY2hfaW5mby0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikgPyAxIDogMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAppbmRleCAxYTY2YjUwLi5mY2U5NTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCkBAIC02MiwxMyArNjIsMTggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBQbGVhc2UgdXNlIHRoaXMgZmlsZSAoaXdsLTQ5NjUtaHcuaCkgb25seSBmb3IgaGFyZHdhcmUtcmVsYXRlZCBkZWZpbml0aW9ucy4KLSAqIFVzZSBpd2wtNDk2NS1jb21tYW5kcy5oIGZvciB1Q29kZSBBUEkgZGVmaW5pdGlvbnMuCi0gKiBVc2UgaXdsLTQ5NjUuaCBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb25zLgorICogVXNlIGl3bC1jb21tYW5kcy5oIGZvciB1Q29kZSBBUEkgZGVmaW5pdGlvbnMuCisgKiBVc2UgaXdsLWRldi5oIGZvciBkcml2ZXIgaW1wbGVtZW50YXRpb24gZGVmaW5pdGlvbnMuCiAgKi8KIAogI2lmbmRlZiBfX2l3bF80OTY1X2h3X2hfXwogI2RlZmluZSBfX2l3bF80OTY1X2h3X2hfXwogCisjaW5jbHVkZSAiaXdsLWZoLmgiCisKKy8qIEVFUlBST00gKi8KKyNkZWZpbmUgSVdMNDk2NV9FRVBST01fSU1HX1NJWkUJCQkxMDI0CisKIC8qCiAgKiB1Q29kZSBxdWV1ZSBtYW5hZ2VtZW50IGRlZmluaXRpb25zIC4uLgogICogUXVldWUgIzQgaXMgdGhlIGNvbW1hbmQgcXVldWUgZm9yIDM5NDUgYW5kIDQ5NjU7IG1hcCBpdCB0byBUeCBGSUZPIGNobmwgNC4KQEAgLTc3LDcgKzgyLDcgQEAKICAqLwogI2RlZmluZSBJV0xfQ01EX1FVRVVFX05VTSAgICAgICA0CiAjZGVmaW5lIElXTF9DTURfRklGT19OVU0gICAgICAgIDQKLSNkZWZpbmUgSVdMX0JBQ0tfUVVFVUVfRklSU1RfSUQgNworI2RlZmluZSBJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRQk3CiAKIC8qIFR4IHJhdGVzICovCiAjZGVmaW5lIElXTF9DQ0tfUkFURVMgNApAQCAtOTMsMTEgKzk4LDE2IEBACiAjZGVmaW5lIElXTF9SU1NJX09GRlNFVAk0NAogCiAKLSNpbmNsdWRlICJpd2wtNDk2NS1jb21tYW5kcy5oIgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgogCi0jZGVmaW5lIFBDSV9MSU5LX0NUUkwgICAgICAweDBGMAorLyogUENJIHJlZ2lzdGVycyAqLworI2RlZmluZSBQQ0lfTElOS19DVFJMICAgICAgMHgwRjAJLyogMSBieXRlICovCiAjZGVmaW5lIFBDSV9QT1dFUl9TT1VSQ0UgICAweDBDOAogI2RlZmluZSBQQ0lfUkVHX1dVTTggICAgICAgMHgwRTgKKworLyogUENJIHJlZ2lzdGVyIHZhbHVlcyAqLworI2RlZmluZSBQQ0lfTElOS19WQUxfTDBTX0VOCTB4MDEKKyNkZWZpbmUgUENJX0xJTktfVkFMX0wxX0VOCTB4MDIKICNkZWZpbmUgUENJX0NGR19QTUNfUE1FX0ZST01fRDNDT0xEX1NVUFBPUlQgICAgICAgICAoMHg4MDAwMDAwMCkKIAogI2RlZmluZSBURkRfUVVFVUVfU0laRV9NQVggICAgICAoMjU2KQpAQCAtMTMxLDEwICsxNDEsOCBAQAogI2RlZmluZSBSVENfREFUQV9MT1dFUl9CT1VORAkJCSgweDgwMDAwMCkKICNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfVVBQRVJfQk9VTkQJCSgweDgwQTAwMCkKIAotI2RlZmluZSBJV0w0OV9SVENfSU5TVF9TSVpFCVwKLQkJCShJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFJUQ19JTlNUX0xPV0VSX0JPVU5EKQotI2RlZmluZSBJV0w0OV9SVENfREFUQV9TSVpFCVwKLQkJCShJV0w0OV9SVENfREFUQV9VUFBFUl9CT1VORCAtIFJUQ19EQVRBX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0w0OV9SVENfSU5TVF9TSVpFICAoSVdMNDlfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfU0laRSAgKElXTDQ5X1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKICNkZWZpbmUgSVdMX01BWF9JTlNUX1NJWkUgSVdMNDlfUlRDX0lOU1RfU0laRQogI2RlZmluZSBJV0xfTUFYX0RBVEFfU0laRSBJV0w0OV9SVENfREFUQV9TSVpFCkBAIC03ODUsNTg1ICs3OTMsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqIEVORCBUWFBPV0VSICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZsb3cgSGFuZGxlciBEZWZpbml0aW9ucyAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogVGhpcyBJL08gYXJlYSBpcyBkaXJlY3RseSByZWFkL3dyaXRhYmxlIGJ5IGRyaXZlciAoZS5nLiBMaW51eCB1c2VzIHdyaXRlbCgpKQotICogQWRkcmVzc2VzIGFyZSBvZmZzZXRzIGZyb20gZGV2aWNlJ3MgUENJIGhhcmR3YXJlIGJhc2UgYWRkcmVzcy4KLSAqLwotI2RlZmluZSBGSF9NRU1fTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgKDB4MTAwMCkKLSNkZWZpbmUgRkhfTUVNX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgICgweDFFRjApCi0KLS8qKgotICogS2VlcC1XYXJtIChLVykgYnVmZmVyIGJhc2UgYWRkcmVzcy4KLSAqCi0gKiBEcml2ZXIgbXVzdCBhbGxvY2F0ZSBhIDRLQnl0ZSBidWZmZXIgdGhhdCBpcyB1c2VkIGJ5IDQ5NjUgZm9yIGtlZXBpbmcgdGhlCi0gKiBob3N0IERSQU0gcG93ZXJlZCBvbiAodmlhIGR1bW15IGFjY2Vzc2VzIHRvIERSQU0pIHRvIG1haW50YWluIGxvdy1sYXRlbmN5Ci0gKiBEUkFNIGFjY2VzcyB3aGVuIDQ5NjUgaXMgVHhpbmcgb3IgUnhpbmcuICBUaGUgZHVtbXkgYWNjZXNzZXMgcHJldmVudCBob3N0Ci0gKiBmcm9tIGdvaW5nIGludG8gYSBwb3dlci1zYXZpbmdzIG1vZGUgdGhhdCB3b3VsZCBjYXVzZSBoaWdoZXIgRFJBTSBsYXRlbmN5LAotICogYW5kIHBvc3NpYmxlIGRhdGEgb3Zlci91bmRlci1ydW5zLCBiZWZvcmUgYWxsIFR4L1J4IGlzIGNvbXBsZXRlLgotICoKLSAqIERyaXZlciBsb2FkcyBJV0xfRkhfS1dfTUVNX0FERFJfUkVHIHdpdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MgKGJpdHMgMzU6NCkKLSAqIG9mIHRoZSBidWZmZXIsIHdoaWNoIG11c3QgYmUgNEsgYWxpZ25lZC4gIE9uY2UgdGhpcyBpcyBzZXQgdXAsIHRoZSA0OTY1Ci0gKiBhdXRvbWF0aWNhbGx5IGludm9rZXMga2VlcC13YXJtIGFjY2Vzc2VzIHdoZW4gbm9ybWFsIGFjY2Vzc2VzIG1pZ2h0IG5vdAotICogYmUgc3VmZmljaWVudCB0byBtYWludGFpbiBmYXN0IERSQU0gcmVzcG9uc2UuCi0gKgotICogQml0IGZpZWxkczoKLSAqICAzMS0wOiAgS2VlcC13YXJtIGJ1ZmZlciBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgWzM1OjRdLCBtdXN0IGJlIDRLIGFsaWduZWQKLSAqLwotI2RlZmluZSBJV0xfRkhfS1dfTUVNX0FERFJfUkVHCQkgICAgIChGSF9NRU1fTE9XRVJfQk9VTkQgKyAweDk3QykKLQotCi0vKioKLSAqIFRGRCBDaXJjdWxhciBCdWZmZXJzIEJhc2UgKENCQkMpIGFkZHJlc3NlcwotICoKLSAqIDQ5NjUgaGFzIDE2IGJhc2UgcG9pbnRlciByZWdpc3RlcnMsIG9uZSBmb3IgZWFjaCBvZiAxNiBob3N0LURSQU0tcmVzaWRlbnQKLSAqIGNpcmN1bGFyIGJ1ZmZlcnMgKENCcy9xdWV1ZXMpIGNvbnRhaW5pbmcgVHJhbnNtaXQgRnJhbWUgRGVzY3JpcHRvcnMgKFRGRHMpCi0gKiAoc2VlIHN0cnVjdCBpd2xfdGZkX2ZyYW1lKS4gIFRoZXNlIDE2IHBvaW50ZXIgcmVnaXN0ZXJzIGFyZSBvZmZzZXQgYnkgMHgwNAotICogYnl0ZXMgZnJvbSBvbmUgYW5vdGhlci4gIEVhY2ggVEZEIGNpcmN1bGFyIGJ1ZmZlciBpbiBEUkFNIG11c3QgYmUgMjU2LWJ5dGUKLSAqIGFsaWduZWQgKGFkZHJlc3MgYml0cyAwLTcgbXVzdCBiZSAwKS4KLSAqCi0gKiBCaXQgZmllbGRzIGluIGVhY2ggcG9pbnRlciByZWdpc3RlcjoKLSAqICAyNy0wOiBURkQgQ0IgcGh5c2ljYWwgYmFzZSBhZGRyZXNzIFszNTo4XSwgbXVzdCBiZSAyNTYtYnl0ZSBhbGlnbmVkCi0gKi8KLSNkZWZpbmUgRkhfTUVNX0NCQkNfTE9XRVJfQk9VTkQgICAgICAgICAgICAgIChGSF9NRU1fTE9XRVJfQk9VTkQgKyAweDlEMCkKLSNkZWZpbmUgRkhfTUVNX0NCQkNfVVBQRVJfQk9VTkQgICAgICAgICAgICAgIChGSF9NRU1fTE9XRVJfQk9VTkQgKyAweEExMCkKLQotLyogRmluZCBURkQgQ0IgYmFzZSBwb2ludGVyIGZvciBnaXZlbiBxdWV1ZSAocmFuZ2UgMC0xNSkuICovCi0jZGVmaW5lIEZIX01FTV9DQkJDX1FVRVVFKHgpICAoRkhfTUVNX0NCQkNfTE9XRVJfQk9VTkQgKyAoeCkgKiAweDQpCi0KLQotLyoqCi0gKiBSeCBTUkFNIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcnMgKFJTQ1NSKQotICoKLSAqIFRoZXNlIHJlZ2lzdGVycyBwcm92aWRlIGhhbmRzaGFrZSBiZXR3ZWVuIGRyaXZlciBhbmQgNDk2NSBmb3IgdGhlIFJ4IHF1ZXVlCi0gKiAodGhpcyBxdWV1ZSBoYW5kbGVzICphbGwqIGNvbW1hbmQgcmVzcG9uc2VzLCBub3RpZmljYXRpb25zLCBSeCBkYXRhLCBldGMuCi0gKiBzZW50IGZyb20gNDk2NSB1Q29kZSB0byBob3N0IGRyaXZlcikuICBVbmxpa2UgVHgsIHRoZXJlIGlzIG9ubHkgb25lIFJ4Ci0gKiBxdWV1ZSwgYW5kIG9ubHkgb25lIFJ4IERNQS9GSUZPIGNoYW5uZWwuICBBbHNvIHVubGlrZSBUeCwgd2hpY2ggY2FuCi0gKiBjb25jYXRlbmF0ZSB1cCB0byAyMCBEUkFNIGJ1ZmZlcnMgdG8gZm9ybSBhIFR4IGZyYW1lLCBlYWNoIFJlY2VpdmUgQnVmZmVyCi0gKiBEZXNjcmlwdG9yIChSQkQpIHBvaW50cyB0byBvbmx5IG9uZSBSeCBCdWZmZXIgKFJCKTsgdGhlcmUgaXMgYSAxOjEKLSAqIG1hcHBpbmcgYmV0d2VlbiBSQkRzIGFuZCBSQnMuCi0gKgotICogRHJpdmVyIG11c3QgYWxsb2NhdGUgaG9zdCBEUkFNIG1lbW9yeSBmb3IgdGhlIGZvbGxvd2luZywgYW5kIHNldCB0aGUKLSAqIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWFjaCBpbnRvIDQ5NjUgcmVnaXN0ZXJzOgotICoKLSAqIDEpICBSZWNlaXZlIEJ1ZmZlciBEZXNjcmlwdG9yIChSQkQpIGNpcmN1bGFyIGJ1ZmZlciAoQ0IpLCB0eXBpY2FsbHkgd2l0aCAyNTYKLSAqICAgICBlbnRyaWVzIChhbHRob3VnaCBhbnkgcG93ZXIgb2YgMiwgdXAgdG8gNDA5NiwgaXMgc2VsZWN0YWJsZSBieSBkcml2ZXIpLgotICogICAgIEVhY2ggZW50cnkgKDEgZHdvcmQpIHBvaW50cyB0byBhIHJlY2VpdmUgYnVmZmVyIChSQikgb2YgY29uc2lzdGVudCBzaXplCi0gKiAgICAgKHR5cGljYWxseSA0SywgYWx0aG91Z2ggOEsgb3IgMTZLIGFyZSBhbHNvIHNlbGVjdGFibGUgYnkgZHJpdmVyKS4KLSAqICAgICBEcml2ZXIgc2V0cyB1cCBSQiBzaXplIGFuZCBudW1iZXIgb2YgUkJEcyBpbiB0aGUgQ0IgdmlhIFJ4IGNvbmZpZwotICogICAgIHJlZ2lzdGVyIEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcuCi0gKgotICogICAgIEJpdCBmaWVsZHMgd2l0aGluIG9uZSBSQkQ6Ci0gKiAgICAgMjctMDogIFJlY2VpdmUgQnVmZmVyIHBoeXNpY2FsIGFkZHJlc3MgYml0cyBbMzU6OF0sIDI1Ni1ieXRlIGFsaWduZWQKLSAqCi0gKiAgICAgRHJpdmVyIHNldHMgcGh5c2ljYWwgYWRkcmVzcyBbMzU6OF0gb2YgYmFzZSBvZiBSQkQgY2lyY3VsYXIgYnVmZmVyCi0gKiAgICAgaW50byBGSF9SU0NTUl9DSE5MMF9SQkRDQl9CQVNFX1JFRyBbMjc6MF0uCi0gKgotICogMikgIFJ4IHN0YXR1cyBidWZmZXIsIDggYnl0ZXMsIGluIHdoaWNoIDQ5NjUgaW5kaWNhdGVzIHdoaWNoIFJ4IEJ1ZmZlcnMKLSAqICAgICAoUkJzKSBoYXZlIGJlZW4gZmlsbGVkLCB2aWEgYSAid3JpdGUgcG9pbnRlciIsIGFjdHVhbGx5IHRoZSBpbmRleCBvZgotICogICAgIHRoZSBSQidzIGNvcnJlc3BvbmRpbmcgUkJEIHdpdGhpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLiAgRHJpdmVyIHNldHMKLSAqICAgICBwaHlzaWNhbCBhZGRyZXNzIFszNTo0XSBpbnRvIEZIX1JTQ1NSX0NITkwwX1NUVFNfV1BUUl9SRUcgWzMxOjBdLgotICoKLSAqICAgICBCaXQgZmllbGRzIGluIGxvd2VyIGR3b3JkIG9mIFJ4IHN0YXR1cyBidWZmZXIgKHVwcGVyIGR3b3JkIG5vdCB1c2VkCi0gKiAgICAgYnkgZHJpdmVyOyBzZWUgc3RydWN0IGl3bDQ5NjVfc2hhcmVkLCB2YWwwKToKLSAqICAgICAzMS0xMjogIE5vdCB1c2VkIGJ5IGRyaXZlcgotICogICAgIDExLSAwOiAgSW5kZXggb2YgbGFzdCBmaWxsZWQgUnggYnVmZmVyIGRlc2NyaXB0b3IKLSAqICAgICAgICAgICAgICg0OTY1IHdyaXRlcywgZHJpdmVyIHJlYWRzIHRoaXMgdmFsdWUpCi0gKgotICogQXMgdGhlIGRyaXZlciBwcmVwYXJlcyBSZWNlaXZlIEJ1ZmZlcnMgKFJCcykgZm9yIDQ5NjUgdG8gZmlsbCwgZHJpdmVyIG11c3QKLSAqIGVudGVyIHBvaW50ZXJzIHRvIHRoZXNlIFJCcyBpbnRvIGNvbnRpZ3VvdXMgUkJEIGNpcmN1bGFyIGJ1ZmZlciBlbnRyaWVzLAotICogYW5kIHVwZGF0ZSB0aGUgNDk2NSdzICJ3cml0ZSIgaW5kZXggcmVnaXN0ZXIsIEZIX1JTQ1NSX0NITkwwX1JCRENCX1dQVFJfUkVHLgotICoKLSAqIFRoaXMgIndyaXRlIiBpbmRleCBjb3JyZXNwb25kcyB0byB0aGUgKm5leHQqIFJCRCB0aGF0IHRoZSBkcml2ZXIgd2lsbCBtYWtlCi0gKiBhdmFpbGFibGUsIGkuZS4gb25lIFJCRCBwYXN0IHRoZSB0YWlsIG9mIHRoZSByZWFkeS10by1maWxsIFJCRHMgd2l0aGluCi0gKiB0aGUgY2lyY3VsYXIgYnVmZmVyLiAgVGhpcyB2YWx1ZSBzaG91bGQgaW5pdGlhbGx5IGJlIDAgKGJlZm9yZSBwcmVwYXJpbmcgYW55Ci0gKiBSQnMpLCBzaG91bGQgYmUgOCBhZnRlciBwcmVwYXJpbmcgdGhlIGZpcnN0IDggUkJzIChmb3IgZXhhbXBsZSksIGFuZCBtdXN0Ci0gKiB3cmFwIGJhY2sgdG8gMCBhdCB0aGUgZW5kIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgKGJ1dCBkb24ndCB3cmFwIGJlZm9yZQotICogInJlYWQiIGluZGV4IGhhcyBhZHZhbmNlZCBwYXN0IDEhICBTZWUgYmVsb3cpLgotICogTk9URTogIDQ5NjUgRVhQRUNUUyBUSEUgV1JJVEUgSU5ERVggVE8gQkUgSU5DUkVNRU5URUQgSU4gTVVMVElQTEVTIE9GIDguCi0gKgotICogQXMgdGhlIDQ5NjUgZmlsbHMgUkJzIChyZWZlcmVuY2VkIGZyb20gY29udGlndW91cyBSQkRzIHdpdGhpbiB0aGUgY2lyY3VsYXIKLSAqIGJ1ZmZlciksIGl0IHVwZGF0ZXMgdGhlIFJ4IHN0YXR1cyBidWZmZXIgaW4gaG9zdCBEUkFNLCAyKSBkZXNjcmliZWQgYWJvdmUsCi0gKiB0byB0ZWxsIHRoZSBkcml2ZXIgdGhlIGluZGV4IG9mIHRoZSBsYXRlc3QgZmlsbGVkIFJCRC4gIFRoZSBkcml2ZXIgbXVzdAotICogcmVhZCB0aGlzICJyZWFkIiBpbmRleCBmcm9tIERSQU0gYWZ0ZXIgcmVjZWl2aW5nIGFuIFJ4IGludGVycnVwdCBmcm9tIDQ5NjUuCi0gKgotICogVGhlIGRyaXZlciBtdXN0IGFsc28gaW50ZXJuYWxseSBrZWVwIHRyYWNrIG9mIGEgdGhpcmQgaW5kZXgsIHdoaWNoIGlzIHRoZQotICogbmV4dCBSQkQgdG8gcHJvY2Vzcy4gIFdoZW4gcmVjZWl2aW5nIGFuIFJ4IGludGVycnVwdCwgZHJpdmVyIHNob3VsZCBwcm9jZXNzCi0gKiBhbGwgZmlsbGVkIGJ1dCB1bnByb2Nlc3NlZCBSQnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgUkIKLSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlICJyZWFkIiBpbmRleC4gIEZvciBleGFtcGxlLCBpZiAicmVhZCIgaW5kZXggYmVjb21lcyAiMSIsCi0gKiBkcml2ZXIgbWF5IHByb2Nlc3MgdGhlIFJCIHBvaW50ZWQgdG8gYnkgUkJEIDAuICBEZXBlbmRpbmcgb24gdm9sdW1lIG9mCi0gKiB0cmFmZmljLCB0aGVyZSBtYXkgYmUgbWFueSBSQnMgdG8gcHJvY2Vzcy4KLSAqCi0gKiBJZiByZWFkIGluZGV4ID09IHdyaXRlIGluZGV4LCA0OTY1IHRoaW5rcyB0aGVyZSBpcyBubyByb29tIHRvIHB1dCBuZXcgZGF0YS4KLSAqIER1ZSB0byB0aGlzLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsbGVkIFJCcyBpcyAyNTUsIGluc3RlYWQgb2YgMjU2LiAgVG8KLSAqIGJlIHNhZmUsIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIGEgZ2FwIG9mIGF0IGxlYXN0IDIgUkJEcyBiZXR3ZWVuICJ3cml0ZSIKLSAqIGFuZCAicmVhZCIgaW5kZXhlczsgdGhhdCBpcywgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgdGhhbiAyNTQKLSAqIGJ1ZmZlcnMgd2FpdGluZyB0byBiZSBmaWxsZWQuCi0gKi8KLSNkZWZpbmUgRkhfTUVNX1JTQ1NSX0xPV0VSX0JPVU5ECShGSF9NRU1fTE9XRVJfQk9VTkQgKyAweEJDMCkKLSNkZWZpbmUgRkhfTUVNX1JTQ1NSX1VQUEVSX0JPVU5ECShGSF9NRU1fTE9XRVJfQk9VTkQgKyAweEMwMCkKLSNkZWZpbmUgRkhfTUVNX1JTQ1NSX0NITkwwCQkoRkhfTUVNX1JTQ1NSX0xPV0VSX0JPVU5EKQotCi0vKioKLSAqIFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiA4LWJ5dGUgUnggU3RhdHVzIGJ1ZmZlci4KLSAqIEJpdCBmaWVsZHM6Ci0gKiAgMzEtMDogUnggc3RhdHVzIGJ1ZmZlciBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgWzM1OjRdLCBtdXN0IDE2LWJ5dGUgYWxpZ25lZC4KLSAqLwotI2RlZmluZSBGSF9SU0NTUl9DSE5MMF9TVFRTX1dQVFJfUkVHCQkoRkhfTUVNX1JTQ1NSX0NITkwwKQotCi0vKioKLSAqIFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiBSeCBCdWZmZXIgRGVzY3JpcHRvciBDaXJjdWxhciBCdWZmZXIuCi0gKiBCaXQgZmllbGRzOgotICogIDI3LTA6ICBSQkQgQ0QgcGh5c2ljYWwgYmFzZSBhZGRyZXNzIFszNTo4XSwgbXVzdCBiZSAyNTYtYnl0ZSBhbGlnbmVkLgotICovCi0jZGVmaW5lIEZIX1JTQ1NSX0NITkwwX1JCRENCX0JBU0VfUkVHCQkoRkhfTUVNX1JTQ1NSX0NITkwwICsgMHgwMDQpCi0KLS8qKgotICogUnggd3JpdGUgcG9pbnRlciAoaW5kZXgsIHJlYWxseSEpLgotICogQml0IGZpZWxkczoKLSAqICAxMS0wOiAgSW5kZXggb2YgZHJpdmVyJ3MgbW9zdCByZWNlbnQgcHJlcGFyZWQtdG8tYmUtZmlsbGVkIFJCRCwgKyAxLgotICogICAgICAgICBOT1RFOiAgRm9yIDI1Ni1lbnRyeSBjaXJjdWxhciBidWZmZXIsIHVzZSBvbmx5IGJpdHMgWzc6MF0uCi0gKi8KLSNkZWZpbmUgRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfV1BUUl9SRUcJCShGSF9NRU1fUlNDU1JfQ0hOTDAgKyAweDAwOCkKLSNkZWZpbmUgRkhfUlNDU1JfQ0hOTDBfV1BUUiAgICAgICAgKEZIX1JTQ1NSX0NITkwwX1JCRENCX1dQVFJfUkVHKQotCi0KLS8qKgotICogUnggQ29uZmlnL1N0YXR1cyBSZWdpc3RlcnMgKFJDU1IpCi0gKiBSeCBDb25maWcgUmVnIGZvciBjaGFubmVsIDAgKG9ubHkgY2hhbm5lbCB1c2VkKQotICoKLSAqIERyaXZlciBtdXN0IGluaXRpYWxpemUgRkhfTUVNX1JDU1JfQ0hOTDBfQ09ORklHX1JFRyBhcyBmb2xsb3dzIGZvcgotICogbm9ybWFsIG9wZXJhdGlvbiAoc2VlIGJpdCBmaWVsZHMpLgotICoKLSAqIENsZWFyaW5nIEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcgdG8gMCB0dXJucyBvZmYgUnggRE1BLgotICogRHJpdmVyIHNob3VsZCBwb2xsIEZIX01FTV9SU1NSX1JYX1NUQVRVU19SRUcJZm9yCi0gKiBGSF9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUgKGJpdCAyNCkgYmVmb3JlIGNvbnRpbnVpbmcuCi0gKgotICogQml0IGZpZWxkczoKLSAqIDMxLTMwOiBSeCBETUEgY2hhbm5lbCBlbmFibGU6ICcwMCcgb2ZmL3BhdXNlLCAnMDEnIHBhdXNlIGF0IGVuZCBvZiBmcmFtZSwKLSAqICAgICAgICAnMTAnIG9wZXJhdGUgbm9ybWFsbHkKLSAqIDI5LTI0OiByZXNlcnZlZAotICogMjMtMjA6ICMgUkJEcyBpbiBjaXJjdWxhciBidWZmZXIgPSAyXnZhbHVlOyB1c2UgIjgiIGZvciAyNTYgUkJEcyAobm9ybWFsKSwKLSAqICAgICAgICBtaW4gIjUiIGZvciAzMiBSQkRzLCBtYXggIjEyIiBmb3IgNDA5NiBSQkRzLgotICogMTktMTg6IHJlc2VydmVkCi0gKiAxNy0xNjogc2l6ZSBvZiBlYWNoIHJlY2VpdmUgYnVmZmVyOyAnMDAnIDRLIChub3JtYWwpLCAnMDEnIDhLLAotICogICAgICAgICcxMCcgMTJLLCAnMTEnIDE2Sy4KLSAqIDE1LTE0OiByZXNlcnZlZAotICogMTMtMTI6IElSUSBkZXN0aW5hdGlvbjsgJzAwJyBub25lLCAnMDEnIGhvc3QgZHJpdmVyIChub3JtYWwgb3BlcmF0aW9uKQotICogMTEtIDQ6IHRpbWVvdXQgZm9yIGNsb3NpbmcgUnggYnVmZmVyIGFuZCBpbnRlcnJ1cHRpbmcgaG9zdCAodW5pdHMgMzIgdXNlYykKLSAqICAgICAgICB0eXBpY2FsIHZhbHVlIDB4MTAgKGFib3V0IDEvMiBtc2VjKQotICogIDMtIDA6IHJlc2VydmVkCi0gKi8KLSNkZWZpbmUgRkhfTUVNX1JDU1JfTE9XRVJfQk9VTkQgICAgICAoRkhfTUVNX0xPV0VSX0JPVU5EICsgMHhDMDApCi0jZGVmaW5lIEZIX01FTV9SQ1NSX1VQUEVSX0JPVU5EICAgICAgKEZIX01FTV9MT1dFUl9CT1VORCArIDB4Q0MwKQotI2RlZmluZSBGSF9NRU1fUkNTUl9DSE5MMCAgICAgICAgICAgIChGSF9NRU1fUkNTUl9MT1dFUl9CT1VORCkKLQotI2RlZmluZSBGSF9NRU1fUkNTUl9DSE5MMF9DT05GSUdfUkVHCShGSF9NRU1fUkNTUl9DSE5MMCkKLQotI2RlZmluZSBGSF9SQ1NSX0NITkwwX1JYX0NPTkZJR19SQl9USU1FT1VUX01BU0sgICAoMHgwMDAwMEZGMCkgLyogYml0IDQtMTEgKi8KLSNkZWZpbmUgRkhfUkNTUl9DSE5MMF9SWF9DT05GSUdfSVJRX0RFU1RfTUFTSyAgICAgKDB4MDAwMDEwMDApIC8qIGJpdCAxMiAqLwotI2RlZmluZSBGSF9SQ1NSX0NITkwwX1JYX0NPTkZJR19TSU5HTEVfRlJBTUVfTUFTSyAoMHgwMDAwODAwMCkgLyogYml0IDE1ICovCi0jZGVmaW5lIEZIX1JDU1JfQ0hOTDBfUlhfQ09ORklHX1JCX1NJWkVfTUFTSwkgICgweDAwMDMwMDAwKSAvKiBiaXRzIDE2LTE3ICovCi0jZGVmaW5lIEZIX1JDU1JfQ0hOTDBfUlhfQ09ORklHX1JCREJDX1NJWkVfTUFTSyAgICgweDAwRjAwMDAwKSAvKiBiaXRzIDIwLTIzICovCi0jZGVmaW5lIEZIX1JDU1JfQ0hOTDBfUlhfQ09ORklHX0RNQV9DSE5MX0VOX01BU0sgICgweEMwMDAwMDAwKSAvKiBiaXRzIDMwLTMxICovCi0KLSNkZWZpbmUgRkhfUkNTUl9SWF9DT05GSUdfUkJEQ0JfU0laRV9CSVRTSElGVAkoMjApCi0jZGVmaW5lIEZIX1JDU1JfUlhfQ09ORklHX1JFR19JUlFfUkJUSF9CSVRTSElGVAkoNCkKLSNkZWZpbmUgUlhfUkJfVElNRU9VVAkoMHgxMCkKLQotI2RlZmluZSBGSF9SQ1NSX1JYX0NPTkZJR19DSE5MX0VOX1BBVVNFX1ZBTCAgICAgICAgICgweDAwMDAwMDAwKQotI2RlZmluZSBGSF9SQ1NSX1JYX0NPTkZJR19DSE5MX0VOX1BBVVNFX0VPRl9WQUwgICAgICgweDQwMDAwMDAwKQotI2RlZmluZSBGSF9SQ1NSX1JYX0NPTkZJR19DSE5MX0VOX0VOQUJMRV9WQUwgICAgICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkJfU0laRV80SyAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SQl9TSVpFXzhLICAgICgweDAwMDEwMDAwKQotI2RlZmluZSBGSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JCX1NJWkVfMTJLICAgKDB4MDAwMjAwMDApCi0jZGVmaW5lIEZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkJfU0laRV8xNksgICAoMHgwMDAzMDAwMCkKLQotI2RlZmluZSBGSF9SQ1NSX0NITkwwX1JYX0NPTkZJR19JUlFfREVTVF9OT19JTlRfVkFMICAgICAgICgweDAwMDAwMDAwKQotI2RlZmluZSBGSF9SQ1NSX0NITkwwX1JYX0NPTkZJR19JUlFfREVTVF9JTlRfSE9TVF9WQUwgICAgICgweDAwMDAxMDAwKQotCi0KLS8qKgotICogUnggU2hhcmVkIFN0YXR1cyBSZWdpc3RlcnMgKFJTU1IpCi0gKgotICogQWZ0ZXIgc3RvcHBpbmcgUnggRE1BIGNoYW5uZWwgKHdyaXRpbmcgMCB0byBGSF9NRU1fUkNTUl9DSE5MMF9DT05GSUdfUkVHKSwKLSAqIGRyaXZlciBtdXN0IHBvbGwgRkhfTUVNX1JTU1JfUlhfU1RBVFVTX1JFRyB1bnRpbCBSeCBjaGFubmVsIGlzIGlkbGUuCi0gKgotICogQml0IGZpZWxkczoKLSAqICAyNDogIDEgPSBDaGFubmVsIDAgaXMgaWRsZQotICoKLSAqIEZIX01FTV9SU1NSX1NIQVJFRF9DVFJMX1JFRyBhbmQgRkhfTUVNX1JTU1JfUlhfRU5BQkxFX0VSUl9JUlEyRFJWIGNvbnRhaW4KLSAqIGRlZmF1bHQgdmFsdWVzIHRoYXQgc2hvdWxkIG5vdCBiZSBhbHRlcmVkIGJ5IHRoZSBkcml2ZXIuCi0gKi8KLSNkZWZpbmUgRkhfTUVNX1JTU1JfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgCShGSF9NRU1fTE9XRVJfQk9VTkQgKyAweEM0MCkKLSNkZWZpbmUgRkhfTUVNX1JTU1JfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAJKEZIX01FTV9MT1dFUl9CT1VORCArIDB4RDAwKQotCi0jZGVmaW5lIEZIX01FTV9SU1NSX1NIQVJFRF9DVFJMX1JFRyAgICAgICAgICAgCShGSF9NRU1fUlNTUl9MT1dFUl9CT1VORCkKLSNkZWZpbmUgRkhfTUVNX1JTU1JfUlhfU1RBVFVTX1JFRwkoRkhfTUVNX1JTU1JfTE9XRVJfQk9VTkQgKyAweDAwNCkKLSNkZWZpbmUgRkhfTUVNX1JTU1JfUlhfRU5BQkxFX0VSUl9JUlEyRFJWICAoRkhfTUVNX1JTU1JfTE9XRVJfQk9VTkQgKyAweDAwOCkKLQotI2RlZmluZSBGSF9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUJKDB4MDEwMDAwMDApCi0KLQotLyoqCi0gKiBUcmFuc21pdCBETUEgQ2hhbm5lbCBDb250cm9sL1N0YXR1cyBSZWdpc3RlcnMgKFRDU1IpCi0gKgotICogNDk2NSBoYXMgb25lIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZm9yIGVhY2ggb2YgOCBUeCBETUEvRklGTyBjaGFubmVscwotICogc3VwcG9ydGVkIGluIGhhcmR3YXJlIChkb24ndCBjb25mdXNlIHRoZXNlIHdpdGggdGhlIDE2IFR4IHF1ZXVlcyBpbiBEUkFNLAotICogd2hpY2ggZmVlZCB0aGUgRE1BL0ZJRk8gY2hhbm5lbHMpOyBjb25maWcgcmVncyBhcmUgc2VwYXJhdGVkIGJ5IDB4MjAgYnl0ZXMuCi0gKgotICogVG8gdXNlIGEgVHggRE1BIGNoYW5uZWwsIGRyaXZlciBtdXN0IGluaXRpYWxpemUgaXRzCi0gKiBJV0xfRkhfVENTUl9DSE5MX1RYX0NPTkZJR19SRUcoY2hubCkgd2l0aDoKLSAqCi0gKiBJV0xfRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTkFCTEUgfAotICogSVdMX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMCi0gKgotICogQWxsIG90aGVyIGJpdHMgc2hvdWxkIGJlIDAuCi0gKgotICogQml0IGZpZWxkczoKLSAqIDMxLTMwOiBUeCBETUEgY2hhbm5lbCBlbmFibGU6ICcwMCcgb2ZmL3BhdXNlLCAnMDEnIHBhdXNlIGF0IGVuZCBvZiBmcmFtZSwKLSAqICAgICAgICAnMTAnIG9wZXJhdGUgbm9ybWFsbHkKLSAqIDI5LSA0OiBSZXNlcnZlZCwgc2V0IHRvICIwIgotICogICAgIDM6IEVuYWJsZSBpbnRlcm5hbCBETUEgcmVxdWVzdHMgKDEsIG5vcm1hbCBvcGVyYXRpb24pLCBkaXNhYmxlICgwKQotICogIDItIDA6IFJlc2VydmVkLCBzZXQgdG8gIjAiCi0gKi8KLSNkZWZpbmUgSVdMX0ZIX1RDU1JfTE9XRVJfQk9VTkQgIChGSF9NRU1fTE9XRVJfQk9VTkQgKyAweEQwMCkKLSNkZWZpbmUgSVdMX0ZIX1RDU1JfVVBQRVJfQk9VTkQgIChGSF9NRU1fTE9XRVJfQk9VTkQgKyAweEU2MCkKLQotLyogRmluZCBDb250cm9sL1N0YXR1cyByZWcgZm9yIGdpdmVuIFR4IERNQS9GSUZPIGNoYW5uZWwgKi8KLSNkZWZpbmUgSVdMX0ZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKF9jaG5sKSBcCi0JKElXTF9GSF9UQ1NSX0xPV0VSX0JPVU5EICsgMHgyMCAqIF9jaG5sKQotCi0jZGVmaW5lIElXTF9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DUkVESVRfRElTQUJMRV9WQUwgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIElXTF9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DUkVESVRfRU5BQkxFX1ZBTCAgICAgKDB4MDAwMDAwMDgpCi0KLSNkZWZpbmUgSVdMX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfUEFVU0UgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgSVdMX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfUEFVU0VfRU9GICAgICAgICAoMHg0MDAwMDAwMCkKLSNkZWZpbmUgSVdMX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFICAgICAgICAgICAoMHg4MDAwMDAwMCkKLQotLyoqCi0gKiBUeCBTaGFyZWQgU3RhdHVzIFJlZ2lzdGVycyAoVFNTUikKLSAqCi0gKiBBZnRlciBzdG9wcGluZyBUeCBETUEgY2hhbm5lbCAod3JpdGluZyAwIHRvCi0gKiBJV0xfRkhfVENTUl9DSE5MX1RYX0NPTkZJR19SRUcoY2hubCkpLCBkcml2ZXIgbXVzdCBwb2xsCi0gKiBJV0xfRkhfVFNTUl9UWF9TVEFUVVNfUkVHIHVudGlsIHNlbGVjdGVkIFR4IGNoYW5uZWwgaXMgaWRsZQotICogKGNoYW5uZWwncyBidWZmZXJzIGVtcHR5IHwgbm8gcGVuZGluZyByZXF1ZXN0cykuCi0gKgotICogQml0IGZpZWxkczoKLSAqIDMxLTI0OiAgMSA9IENoYW5uZWwgYnVmZmVycyBlbXB0eSAoY2hhbm5lbCA3OjApCi0gKiAyMy0xNjogIDEgPSBObyBwZW5kaW5nIHJlcXVlc3RzIChjaGFubmVsIDc6MCkKLSAqLwotI2RlZmluZSBJV0xfRkhfVFNTUl9MT1dFUl9CT1VORAkJKEZIX01FTV9MT1dFUl9CT1VORCArIDB4RUEwKQotI2RlZmluZSBJV0xfRkhfVFNTUl9VUFBFUl9CT1VORAkJKEZIX01FTV9MT1dFUl9CT1VORCArIDB4RUMwKQotCi0jZGVmaW5lIElXTF9GSF9UU1NSX1RYX1NUQVRVU19SRUcJKElXTF9GSF9UU1NSX0xPV0VSX0JPVU5EICsgMHgwMTApCi0KLSNkZWZpbmUgSVdMX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfQlVGU19FTVBUWShfY2hubCkJXAotCSgoMSA8PCAoX2NobmwpKSA8PCAyNCkKLSNkZWZpbmUgSVdMX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfTk9fUEVORF9SRVEoX2NobmwpIFwKLQkoKDEgPDwgKF9jaG5sKSkgPDwgMTYpCi0KLSNkZWZpbmUgSVdMX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19NU0tfQ0hOTF9JRExFKF9jaG5sKSBcCi0JKElXTF9GSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX0JVRlNfRU1QVFkoX2NobmwpIHwgXAotCUlXTF9GSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaG5sKSkKLQotCi0vKioqKioqKioqKioqKioqKioqKioqIFNUQVJUIFRYIFNDSEVEVUxFUiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqIDQ5NjUgVHggU2NoZWR1bGVyCi0gKgotICogVGhlIFR4IFNjaGVkdWxlciBzZWxlY3RzIHRoZSBuZXh0IGZyYW1lIHRvIGJlIHRyYW5zbWl0dGVkLCBjaG9zaW5nIFRGRHMKLSAqIChUcmFuc21pdCBGcmFtZSBEZXNjcmlwdG9ycykgZnJvbSB1cCB0byAxNiBjaXJjdWxhciBUeCBxdWV1ZXMgcmVzaWRlbnQgaW4KLSAqIGhvc3QgRFJBTS4gIEl0IHN0ZWVycyBlYWNoIGZyYW1lJ3MgVHggY29tbWFuZCAod2hpY2ggY29udGFpbnMgdGhlIGZyYW1lCi0gKiBkYXRhKSBpbnRvIG9uZSBvZiB1cCB0byA3IHByaW9yaXRpemVkIFR4IERNQSBGSUZPIGNoYW5uZWxzIHdpdGhpbiB0aGUKLSAqIGRldmljZS4gIEEgcXVldWUgbWFwcyB0byBvbmx5IG9uZSAoc2VsZWN0YWJsZSBieSBkcml2ZXIpIFR4IERNQSBjaGFubmVsLAotICogYnV0IG9uZSBETUEgY2hhbm5lbCBtYXkgdGFrZSBpbnB1dCBmcm9tIHNldmVyYWwgcXVldWVzLgotICoKLSAqIFR4IERNQSBjaGFubmVscyBoYXZlIGRlZGljYXRlZCBwdXJwb3Nlcy4gIEZvciA0OTY1LCB0aGV5IGFyZSB1c2VkIGFzIGZvbGxvd3M6Ci0gKgotICogMCAtLSBFRENBIEJLIChiYWNrZ3JvdW5kKSBmcmFtZXMsIGxvd2VzdCBwcmlvcml0eQotICogMSAtLSBFRENBIEJFIChiZXN0IGVmZm9ydCkgZnJhbWVzLCBub3JtYWwgcHJpb3JpdHkKLSAqIDIgLS0gRURDQSBWSSAodmlkZW8pIGZyYW1lcywgaGlnaGVyIHByaW9yaXR5Ci0gKiAzIC0tIEVEQ0EgVk8gKHZvaWNlKSBhbmQgbWFuYWdlbWVudCBmcmFtZXMsIGhpZ2hlc3QgcHJpb3JpdHkKLSAqIDQgLS0gQ29tbWFuZHMgKGUuZy4gUlhPTiwgZXRjLikKLSAqIDUgLS0gSENDQSBzaG9ydCBmcmFtZXMKLSAqIDYgLS0gSENDQSBsb25nIGZyYW1lcwotICogNyAtLSBub3QgdXNlZCBieSBkcml2ZXIgKGRldmljZS1pbnRlcm5hbCBvbmx5KQotICoKLSAqIERyaXZlciBzaG91bGQgbm9ybWFsbHkgbWFwIHF1ZXVlcyAwLTYgdG8gVHggRE1BL0ZJRk8gY2hhbm5lbHMgMC02LgotICogSW4gYWRkaXRpb24sIGRyaXZlciBjYW4gbWFwIHF1ZXVlcyA3LTE1IHRvIFR4IERNQS9GSUZPIGNoYW5uZWxzIDAtMyB0bwotICogc3VwcG9ydCAxMW4gYWdncmVnYXRpb24gdmlhIEVEQ0EgRE1BIGNoYW5uZWxzLgotICoKLSAqIFRoZSBkcml2ZXIgc2V0cyB1cCBlYWNoIHF1ZXVlIHRvIHdvcmsgaW4gb25lIG9mIHR3byBtb2RlczoKLSAqCi0gKiAxKSAgU2NoZWR1bGVyLUFjaywgaW4gd2hpY2ggdGhlIHNjaGVkdWxlciBhdXRvbWF0aWNhbGx5IHN1cHBvcnRzIGEKLSAqICAgICBibG9jay1hY2sgKEJBKSB3aW5kb3cgb2YgdXAgdG8gNjQgVEZEcy4gIEluIHRoaXMgbW9kZSwgZWFjaCBxdWV1ZQotICogICAgIGNvbnRhaW5zIFRGRHMgZm9yIGEgdW5pcXVlIGNvbWJpbmF0aW9uIG9mIFJlY2lwaWVudCBBZGRyZXNzIChSQSkKLSAqICAgICBhbmQgVHJhZmZpYyBJZGVudGlmaWVyIChUSUQpLCB0aGF0IGlzLCB0cmFmZmljIG9mIGEgZ2l2ZW4KLSAqICAgICBRdWFsaXR5LU9mLVNlcnZpY2UgKFFPUykgcHJpb3JpdHksIGRlc3RpbmVkIGZvciBhIHNpbmdsZSBzdGF0aW9uLgotICoKLSAqICAgICBJbiBzY2hlZHVsZXItYWNrIG1vZGUsIHRoZSBzY2hlZHVsZXIga2VlcHMgdHJhY2sgb2YgdGhlIFR4IHN0YXR1cyBvZgotICogICAgIGVhY2ggZnJhbWUgd2l0aGluIHRoZSBCQSB3aW5kb3csIGluY2x1ZGluZyB3aGV0aGVyIGl0J3MgYmVlbiB0cmFuc21pdHRlZCwKLSAqICAgICBhbmQgd2hldGhlciBpdCdzIGJlZW4gYWNrbm93bGVkZ2VkIGJ5IHRoZSByZWNlaXZpbmcgc3RhdGlvbi4gIFRoZSBkZXZpY2UKLSAqICAgICBhdXRvbWF0aWNhbGx5IHByb2Nlc3NlcyBibG9jay1hY2tzIHJlY2VpdmVkIGZyb20gdGhlIHJlY2VpdmluZyBTVEEsCi0gKiAgICAgYW5kIHJlc2NoZWR1bGVzIHVuLWFja2VkIGZyYW1lcyB0byBiZSByZXRyYW5zbWl0dGVkIChzdWNjZXNzZnVsCi0gKiAgICAgVHggY29tcGxldGlvbiBtYXkgZW5kIHVwIGJlaW5nIG91dC1vZi1vcmRlcikuCi0gKgotICogICAgIFRoZSBkcml2ZXIgbXVzdCBtYWludGFpbiB0aGUgcXVldWUncyBCeXRlIENvdW50IHRhYmxlIGluIGhvc3QgRFJBTQotICogICAgIChzdHJ1Y3QgaXdsNDk2NV9zY2hlZF9xdWV1ZV9ieXRlX2NudF90YmwpIGZvciB0aGlzIG1vZGUuCi0gKiAgICAgVGhpcyBtb2RlIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnRhdGlvbi4KLSAqCi0gKiAyKSAgRklGTyAoYS5rLmEuIG5vbi1TY2hlZHVsZXItQUNLKSwgaW4gd2hpY2ggZWFjaCBURkQgaXMgcHJvY2Vzc2VkIGluIG9yZGVyLgotICogICAgIFRoZSBkZXZpY2UgbWF5IGF1dG9tYXRpY2FsbHkgcmV0cnkgVHgsIGJ1dCB3aWxsIHJldHJ5IG9ubHkgb25lIGZyYW1lCi0gKiAgICAgYXQgYSB0aW1lLCB1bnRpbCByZWNlaXZpbmcgQUNLIGZyb20gcmVjZWl2aW5nIHN0YXRpb24sIG9yIHJlYWNoaW5nCi0gKiAgICAgcmV0cnkgbGltaXQgYW5kIGdpdmluZyB1cC4KLSAqCi0gKiAgICAgVGhlIGNvbW1hbmQgcXVldWUgKCM0KSBtdXN0IHVzZSB0aGlzIG1vZGUhCi0gKiAgICAgVGhpcyBtb2RlIGRvZXMgbm90IHJlcXVpcmUgdXNlIG9mIHRoZSBCeXRlIENvdW50IHRhYmxlIGluIGhvc3QgRFJBTS4KLSAqCi0gKiBEcml2ZXIgY29udHJvbHMgc2NoZWR1bGVyIG9wZXJhdGlvbiB2aWEgMyBtZWFuczoKLSAqIDEpICBTY2hlZHVsZXIgcmVnaXN0ZXJzCi0gKiAyKSAgU2hhcmVkIHNjaGVkdWxlciBkYXRhIGJhc2UgaW4gaW50ZXJuYWwgNDk1NiBTUkFNCi0gKiAzKSAgU2hhcmVkIGRhdGEgaW4gaG9zdCBEUkFNCi0gKgotICogSW5pdGlhbGl6YXRpb246Ci0gKgotICogV2hlbiBsb2FkaW5nLCBkcml2ZXIgc2hvdWxkIGFsbG9jYXRlIG1lbW9yeSBmb3I6Ci0gKiAxKSAgMTYgVEZEIGNpcmN1bGFyIGJ1ZmZlcnMsIGVhY2ggd2l0aCBzcGFjZSBmb3IgKHR5cGljYWxseSkgMjU2IFRGRHMuCi0gKiAyKSAgMTYgQnl0ZSBDb3VudCBjaXJjdWxhciBidWZmZXJzIGluIDE2IEtCeXRlcyBjb250aWd1b3VzIG1lbW9yeQotICogICAgICgxMDI0IGJ5dGVzIGZvciBlYWNoIHF1ZXVlKS4KLSAqCi0gKiBBZnRlciByZWNlaXZpbmcgIkFsaXZlIiByZXNwb25zZSBmcm9tIHVDb2RlLCBkcml2ZXIgbXVzdCBpbml0aWFsaXplCi0gKiB0aGUgc2NoZWR1bGVyIChlc3BlY2lhbGx5IGZvciBxdWV1ZSAjNCwgdGhlIGNvbW1hbmQgcXVldWUsIG90aGVyd2lzZQotICogdGhlIGRyaXZlciBjYW4ndCBpc3N1ZSBjb21tYW5kcyEpOgotICovCi0KLS8qKgotICogTWF4IFR4IHdpbmRvdyBzaXplIGlzIHRoZSBtYXggbnVtYmVyIG9mIGNvbnRpZ3VvdXMgVEZEcyB0aGF0IHRoZSBzY2hlZHVsZXIKLSAqIGNhbiBrZWVwIHRyYWNrIG9mIGF0IG9uZSB0aW1lIHdoZW4gY3JlYXRpbmcgYmxvY2stYWNrIGNoYWlucyBvZiBmcmFtZXMuCi0gKiBOb3RlIHRoYXQgIjY0IiBtYXRjaGVzIHRoZSBudW1iZXIgb2YgYWNrIGJpdHMgaW4gYSBibG9jay1hY2sgcGFja2V0LgotICogRHJpdmVyIHNob3VsZCB1c2UgU0NEX1dJTl9TSVpFIGFuZCBTQ0RfRlJBTUVfTElNSVQgdmFsdWVzIHRvIGluaXRpYWxpemUKLSAqIFNDRF9DT05URVhUX1FVRVVFX09GRlNFVCh4KSB2YWx1ZXMuCi0gKi8KLSNkZWZpbmUgU0NEX1dJTl9TSVpFCQkJCTY0Ci0jZGVmaW5lIFNDRF9GUkFNRV9MSU1JVAkJCQk2NAotCi0vKiBTQ0QgcmVnaXN0ZXJzIGFyZSBpbnRlcm5hbCwgbXVzdCBiZSBhY2Nlc3NlZCB2aWEgSEJVU19UQVJHX1BSUEggcmVncyAqLwotI2RlZmluZSBTQ0RfU1RBUlRfT0ZGU0VUCQkweGEwMmMwMAotCi0vKgotICogNDk2NSB0ZWxscyBkcml2ZXIgU1JBTSBhZGRyZXNzIGZvciBpbnRlcm5hbCBzY2hlZHVsZXIgc3RydWN0cyB2aWEgdGhpcyByZWcuCi0gKiBWYWx1ZSBpcyB2YWxpZCBvbmx5IGFmdGVyICJBbGl2ZSIgcmVzcG9uc2UgZnJvbSB1Q29kZS4KLSAqLwotI2RlZmluZSBTQ0RfU1JBTV9CQVNFX0FERFIgICAgICAgICAgIChTQ0RfU1RBUlRfT0ZGU0VUICsgMHgwKQotCi0vKgotICogRHJpdmVyIG1heSBuZWVkIHRvIHVwZGF0ZSBxdWV1ZS1lbXB0eSBiaXRzIGFmdGVyIGNoYW5naW5nIHF1ZXVlJ3MKLSAqIHdyaXRlIGFuZCByZWFkIHBvaW50ZXJzIChpbmRleGVzKSBkdXJpbmcgKHJlLSlpbml0aWFsaXphdGlvbiAoaS5lLiB3aGVuCi0gKiBzY2hlZHVsZXIgaXMgbm90IHRyYWNraW5nIHdoYXQncyBoYXBwZW5pbmcpLgotICogQml0IGZpZWxkczoKLSAqIDMxLTE2OiAgV3JpdGUgbWFzayAtLSAxOiB1cGRhdGUgZW1wdHkgYml0LCAwOiBkb24ndCBjaGFuZ2UgZW1wdHkgYml0Ci0gKiAxNS0wMDogIEVtcHR5IHN0YXRlLCBvbmUgZm9yIGVhY2ggcXVldWUgLS0gMTogZW1wdHksIDA6IG5vbi1lbXB0eQotICogTk9URTogIFRoaXMgcmVnaXN0ZXIgaXMgbm90IHVzZWQgYnkgTGludXggZHJpdmVyLgotICovCi0jZGVmaW5lIFNDRF9FTVBUWV9CSVRTICAgICAgICAgICAgICAgKFNDRF9TVEFSVF9PRkZTRVQgKyAweDQpCi0KLS8qCi0gKiBQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgYXJyYXkgb2YgYnl0ZSBjb3VudCAoQkMpIGNpcmN1bGFyIGJ1ZmZlcnMgKENCcykuCi0gKiBFYWNoIFR4IHF1ZXVlIGhhcyBhIEJDIENCIGluIGhvc3QgRFJBTSB0byBzdXBwb3J0IFNjaGVkdWxlci1BQ0sgbW9kZS4KLSAqIFRoaXMgcmVnaXN0ZXIgcG9pbnRzIHRvIEJDIENCIGZvciBxdWV1ZSAwLCBtdXN0IGJlIG9uIDEwMjQtYnl0ZSBib3VuZGFyeS4KLSAqIE90aGVycyBhcmUgc3BhY2VkIGJ5IDEwMjQgYnl0ZXMuCi0gKiBFYWNoIEJDIENCIGlzIDIgYnl0ZXMgKiAoMjU2ICsgNjQpID0gNzQwIGJ5dGVzLCBmb2xsb3dlZCBieSAzODQgYnl0ZXMgcGFkLgotICogKEluZGV4IGludG8gYSBxdWV1ZSdzIEJDIENCKSA9IChpbmRleCBpbnRvIHF1ZXVlJ3MgVEZEIENCKSA9IChTU04gJiAweGZmKS4KLSAqIEJpdCBmaWVsZHM6Ci0gKiAyNS0wMDogIEJ5dGUgQ291bnQgQ0IgcGh5c2ljYWwgYWRkcmVzcyBbMzU6MTBdLCBtdXN0IGJlIDEwMjQtYnl0ZSBhbGlnbmVkLgotICovCi0jZGVmaW5lIFNDRF9EUkFNX0JBU0VfQUREUiAgICAgICAgICAgKFNDRF9TVEFSVF9PRkZTRVQgKyAweDEwKQotCi0vKgotICogRW5hYmxlcyBhbnkvYWxsIFR4IERNQS9GSUZPIGNoYW5uZWxzLgotICogU2NoZWR1bGVyIGdlbmVyYXRlcyByZXF1ZXN0cyBmb3Igb25seSB0aGUgYWN0aXZlIGNoYW5uZWxzLgotICogU2V0IHRoaXMgdG8gMHhmZiB0byBlbmFibGUgYWxsIDggY2hhbm5lbHMgKG5vcm1hbCB1c2FnZSkuCi0gKiBCaXQgZmllbGRzOgotICogIDctIDA6ICBFbmFibGUgKDEpLCBkaXNhYmxlICgwKSwgb25lIGJpdCBmb3IgZWFjaCBjaGFubmVsIDAtNwotICovCi0jZGVmaW5lIFNDRF9UWEZBQ1QgICAgICAgICAgICAgICAgICAgKFNDRF9TVEFSVF9PRkZTRVQgKyAweDFjKQotCi0vKiBNYXNrIHRvIGVuYWJsZSBjb250aWd1b3VzIFR4IERNQS9GSUZPIGNoYW5uZWxzIGJldHdlZW4gImxvIiBhbmQgImhpIi4gKi8KLSNkZWZpbmUgU0NEX1RYRkFDVF9SRUdfVFhGSUZPX01BU0sobG8sIGhpKSBcCi0gICAgICAgKCgxIDw8IChoaSkpIHwgKCgxIDw8IChoaSkpIC0gKDEgPDwgKGxvKSkpKQotCi0vKgotICogUXVldWUgKHgpIFdyaXRlIFBvaW50ZXJzIChpbmRleGVzLCByZWFsbHkhKSwgb25lIGZvciBlYWNoIFR4IHF1ZXVlLgotICogSW5pdGlhbGl6ZWQgYW5kIHVwZGF0ZWQgYnkgZHJpdmVyIGFzIG5ldyBURkRzIGFyZSBhZGRlZCB0byBxdWV1ZS4KLSAqIE5PVEU6ICBJZiB1c2luZyBCbG9jayBBY2ssIGluZGV4IG11c3QgY29ycmVzcG9uZCB0byBmcmFtZSdzCi0gKiAgICAgICAgU3RhcnQgU2VxdWVuY2UgTnVtYmVyOyBpbmRleCA9IChTU04gJiAweGZmKQotICogTk9URTogIEFsdGVybmF0aXZlIHRvIEhCVVNfVEFSR19XUlBUUiwgd2hpY2ggaXMgd2hhdCBMaW51eCBkcml2ZXIgdXNlcz8KLSAqLwotI2RlZmluZSBTQ0RfUVVFVUVfV1JQVFIoeCkgICAgICAgICAgIChTQ0RfU1RBUlRfT0ZGU0VUICsgMHgyNCArICh4KSAqIDQpCi0KLS8qCi0gKiBRdWV1ZSAoeCkgUmVhZCBQb2ludGVycyAoaW5kZXhlcywgcmVhbGx5ISksIG9uZSBmb3IgZWFjaCBUeCBxdWV1ZS4KLSAqIEZvciBGSUZPIG1vZGUsIGluZGV4IGluZGljYXRlcyBuZXh0IGZyYW1lIHRvIHRyYW5zbWl0LgotICogRm9yIFNjaGVkdWxlci1BQ0sgbW9kZSwgaW5kZXggaW5kaWNhdGVzIGZpcnN0IGZyYW1lIGluIFR4IHdpbmRvdy4KLSAqIEluaXRpYWxpemVkIGJ5IGRyaXZlciwgdXBkYXRlZCBieSBzY2hlZHVsZXIuCi0gKi8KLSNkZWZpbmUgU0NEX1FVRVVFX1JEUFRSKHgpICAgICAgICAgICAoU0NEX1NUQVJUX09GRlNFVCArIDB4NjQgKyAoeCkgKiA0KQotCi0vKgotICogU2VsZWN0IHdoaWNoIHF1ZXVlcyB3b3JrIGluIGNoYWluIG1vZGUgKDEpIHZzLiBub3QgKDApLgotICogVXNlIGNoYWluIG1vZGUgdG8gYnVpbGQgY2hhaW5zIG9mIGFnZ3JlZ2F0ZWQgZnJhbWVzLgotICogQml0IGZpZWxkczoKLSAqIDMxLTE2OiAgUmVzZXJ2ZWQKLSAqIDE1LTAwOiAgTW9kZSwgb25lIGJpdCBmb3IgZWFjaCBxdWV1ZSAtLSAxOiBDaGFpbiBtb2RlLCAwOiBvbmUtYXQtYS10aW1lCi0gKiBOT1RFOiAgSWYgZHJpdmVyIHNldHMgdXAgcXVldWUgZm9yIGNoYWluIG1vZGUsIGl0IHNob3VsZCBiZSBhbHNvIHNldCB1cAotICogICAgICAgIFNjaGVkdWxlci1BQ0sgbW9kZSBhcyB3ZWxsLCB2aWEgU0NEX1FVRVVFX1NUQVRVU19CSVRTKHgpLgotICovCi0jZGVmaW5lIFNDRF9RVUVVRUNIQUlOX1NFTCAgICAgICAgICAgKFNDRF9TVEFSVF9PRkZTRVQgKyAweGQwKQotCi0vKgotICogU2VsZWN0IHdoaWNoIHF1ZXVlcyBpbnRlcnJ1cHQgZHJpdmVyIHdoZW4gc2NoZWR1bGVyIGluY3JlbWVudHMKLSAqIGEgcXVldWUncyByZWFkIHBvaW50ZXIgKGluZGV4KS4KLSAqIEJpdCBmaWVsZHM6Ci0gKiAzMS0xNjogIFJlc2VydmVkCi0gKiAxNS0wMDogIEludGVycnVwdCBlbmFibGUsIG9uZSBiaXQgZm9yIGVhY2ggcXVldWUgLS0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKLSAqIE5PVEU6ICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgYXBwYXJlbnRseSBhIG5vLW9wOyBkcml2ZXIgcmVsaWVzIG9uIGludGVycnVwdHMKLSAqICAgICAgICBmcm9tIFJ4IHF1ZXVlIHRvIHJlYWQgVHggY29tbWFuZCByZXNwb25zZXMgYW5kIHVwZGF0ZSBUeCBxdWV1ZXMuCi0gKi8KLSNkZWZpbmUgU0NEX0lOVEVSUlVQVF9NQVNLICAgICAgICAgICAoU0NEX1NUQVJUX09GRlNFVCArIDB4ZTQpCi0KLS8qCi0gKiBRdWV1ZSBzZWFyY2ggc3RhdHVzIHJlZ2lzdGVycy4gIE9uZSBmb3IgZWFjaCBxdWV1ZS4KLSAqIFNldHMgdXAgcXVldWUgbW9kZSBhbmQgYXNzaWducyBxdWV1ZSB0byBUeCBETUEgY2hhbm5lbC4KLSAqIEJpdCBmaWVsZHM6Ci0gKiAxOS0xMDogV3JpdGUgbWFzay9lbmFibGUgYml0cyBmb3IgYml0cyAwLTkKLSAqICAgICA5OiBEcml2ZXIgc2hvdWxkIGluaXQgdG8gIjAiCi0gKiAgICAgODogU2NoZWR1bGVyLUFDSyBtb2RlICgxKSwgbm9uLVNjaGVkdWxlci1BQ0sgKGkuZS4gRklGTykgbW9kZSAoMCkuCi0gKiAgICAgICAgRHJpdmVyIHNob3VsZCBpbml0IHRvICIxIiBmb3IgYWdncmVnYXRpb24gbW9kZSwgb3IgIjAiIG90aGVyd2lzZS4KLSAqICAgNy02OiBEcml2ZXIgc2hvdWxkIGluaXQgdG8gIjAiCi0gKiAgICAgNTogV2luZG93IFNpemUgTGVmdDsgaW5kaWNhdGVzIHdoZXRoZXIgc2NoZWR1bGVyIGNhbiByZXF1ZXN0Ci0gKiAgICAgICAgYW5vdGhlciBURkQsIGJhc2VkIG9uIHdpbmRvdyBzaXplLCBldGMuICBEcml2ZXIgc2hvdWxkIGluaXQKLSAqICAgICAgICB0aGlzIGJpdCB0byAiMSIgZm9yIGFnZ3JlZ2F0aW9uIG1vZGUsIG9yICIwIiBmb3Igbm9uLWFnZy4KLSAqICAgNC0xOiBUeCBGSUZPIHRvIHVzZSAocmFuZ2UgMC03KS4KLSAqICAgICAwOiBRdWV1ZSBpcyBhY3RpdmUgKDEpLCBub3QgYWN0aXZlICgwKS4KLSAqIE90aGVyIGJpdHMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgIjAiCi0gKgotICogTk9URTogIElmIGVuYWJsaW5nIFNjaGVkdWxlci1BQ0sgbW9kZSwgY2hhaW4gbW9kZSBzaG91bGQgYWxzbyBiZSBlbmFibGVkCi0gKiAgICAgICAgdmlhIFNDRF9RVUVVRUNIQUlOX1NFTC4KLSAqLwotI2RlZmluZSBTQ0RfUVVFVUVfU1RBVFVTX0JJVFMoeCkgICAgIChTQ0RfU1RBUlRfT0ZGU0VUICsgMHgxMDQgKyAoeCkgKiA0KQotCi0vKiBCaXQgZmllbGQgcG9zaXRpb25zICovCi0jZGVmaW5lIFNDRF9RVUVVRV9TVFRTX1JFR19QT1NfQUNUSVZFCQkoMCkKLSNkZWZpbmUgU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19UWEYJCSgxKQotI2RlZmluZSBTQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1dTTAkJKDUpCi0jZGVmaW5lIFNDRF9RVUVVRV9TVFRTX1JFR19QT1NfU0NEX0FDSwkJKDgpCi0KLS8qIFdyaXRlIG1hc2tzICovCi0jZGVmaW5lIFNDRF9RVUVVRV9TVFRTX1JFR19QT1NfU0NEX0FDVF9FTgkoMTApCi0jZGVmaW5lIFNDRF9RVUVVRV9TVFRTX1JFR19NU0sJCQkoMHgwMDA3RkMwMCkKLQotLyoqCi0gKiA0OTY1IGludGVybmFsIFNSQU0gc3RydWN0dXJlcyBmb3Igc2NoZWR1bGVyLCBzaGFyZWQgd2l0aCBkcml2ZXIgLi4uCi0gKgotICogRHJpdmVyIHNob3VsZCBjbGVhciBhbmQgaW5pdGlhbGl6ZSB0aGUgZm9sbG93aW5nIGFyZWFzIGFmdGVyIHJlY2VpdmluZwotICogIkFsaXZlIiByZXNwb25zZSBmcm9tIDQ5NjUgdUNvZGUsIGkuZS4gYWZ0ZXIgaW5pdGlhbAotICogdUNvZGUgbG9hZCwgb3IgYWZ0ZXIgYSB1Q29kZSBsb2FkIGRvbmUgZm9yIGVycm9yIHJlY292ZXJ5OgotICoKLSAqIFNDRF9DT05URVhUX0RBVEFfT0ZGU0VUIChzaXplIDEyOCBieXRlcykKLSAqIFNDRF9UWF9TVFRTX0JJVE1BUF9PRkZTRVQgKHNpemUgMjU2IGJ5dGVzKQotICogU0NEX1RSQU5TTEFURV9UQkxfT0ZGU0VUIChzaXplIDMyIGJ5dGVzKQotICoKLSAqIERyaXZlciBhY2Nlc3NlcyBTUkFNIHZpYSBIQlVTX1RBUkdfTUVNXyogcmVnaXN0ZXJzLgotICogRHJpdmVyIHJlYWRzIGJhc2UgYWRkcmVzcyBvZiB0aGlzIHNjaGVkdWxlciBhcmVhIGZyb20gU0NEX1NSQU1fQkFTRV9BRERSLgotICogQWxsIE9GRlNFVCB2YWx1ZXMgbXVzdCBiZSBhZGRlZCB0byB0aGlzIGJhc2UgYWRkcmVzcy4KLSAqLwotCi0vKgotICogUXVldWUgY29udGV4dC4gIE9uZSA4LWJ5dGUgZW50cnkgZm9yIGVhY2ggb2YgMTYgcXVldWVzLgotICoKLSAqIERyaXZlciBzaG91bGQgY2xlYXIgdGhpcyBlbnRpcmUgYXJlYSAoc2l6ZSAweDgwKSB0byAwIGFmdGVyIHJlY2VpdmluZwotICogIkFsaXZlIiBub3RpZmljYXRpb24gZnJvbSB1Q29kZS4gIEFkZGl0aW9uYWxseSwgZHJpdmVyIHNob3VsZCBpbml0Ci0gKiBlYWNoIHF1ZXVlJ3MgZW50cnkgYXMgZm9sbG93czoKLSAqCi0gKiBMUyBEd29yZCBiaXQgZmllbGRzOgotICogIDAtMDY6ICBNYXggVHggd2luZG93IHNpemUgZm9yIFNjaGVkdWxlci1BQ0suICBEcml2ZXIgc2hvdWxkIGluaXQgdG8gNjQuCi0gKgotICogTVMgRHdvcmQgYml0IGZpZWxkczoKLSAqIDE2LTIyOiAgRnJhbWUgbGltaXQuICBEcml2ZXIgc2hvdWxkIGluaXQgdG8gMTAgKDB4YSkuCi0gKgotICogRHJpdmVyIHNob3VsZCBpbml0IGFsbCBvdGhlciBiaXRzIHRvIDAuCi0gKgotICogSW5pdCBtdXN0IGJlIGRvbmUgYWZ0ZXIgZHJpdmVyIHJlY2VpdmVzICJBbGl2ZSIgcmVzcG9uc2UgZnJvbSA0OTY1IHVDb2RlLAotICogYW5kIHdoZW4gc2V0dGluZyB1cCBxdWV1ZSBmb3IgYWdncmVnYXRpb24uCi0gKi8KLSNkZWZpbmUgU0NEX0NPTlRFWFRfREFUQV9PRkZTRVQJCQkweDM4MAotI2RlZmluZSBTQ0RfQ09OVEVYVF9RVUVVRV9PRkZTRVQoeCkJKFNDRF9DT05URVhUX0RBVEFfT0ZGU0VUICsgKCh4KSAqIDgpKQotCi0jZGVmaW5lIFNDRF9RVUVVRV9DVFhfUkVHMV9XSU5fU0laRV9QT1MJCSgwKQotI2RlZmluZSBTQ0RfUVVFVUVfQ1RYX1JFRzFfV0lOX1NJWkVfTVNLCQkoMHgwMDAwMDA3RikKLSNkZWZpbmUgU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX1BPUwkoMTYpCi0jZGVmaW5lIFNDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9NU0sJKDB4MDA3RjAwMDApCi0KLS8qCi0gKiBUeCBTdGF0dXMgQml0bWFwCi0gKgotICogRHJpdmVyIHNob3VsZCBjbGVhciB0aGlzIGVudGlyZSBhcmVhIChzaXplIDB4MTAwKSB0byAwIGFmdGVyIHJlY2VpdmluZwotICogIkFsaXZlIiBub3RpZmljYXRpb24gZnJvbSB1Q29kZS4gIEFyZWEgaXMgdXNlZCBvbmx5IGJ5IGRldmljZSBpdHNlbGY7Ci0gKiBubyBvdGhlciBzdXBwb3J0IChiZXNpZGVzIGNsZWFyaW5nKSBpcyByZXF1aXJlZCBmcm9tIGRyaXZlci4KLSAqLwotI2RlZmluZSBTQ0RfVFhfU1RUU19CSVRNQVBfT0ZGU0VUCQkweDQwMAotCi0vKgotICogUkF4VElEIHRvIHF1ZXVlIHRyYW5zbGF0aW9uIG1hcHBpbmcuCi0gKgotICogV2hlbiBxdWV1ZSBpcyBpbiBTY2hlZHVsZXItQUNLIG1vZGUsIGZyYW1lcyBwbGFjZWQgaW4gYSB0aGF0IHF1ZXVlIG11c3QgYmUKLSAqIGZvciBvbmx5IG9uZSBjb21iaW5hdGlvbiBvZiByZWNlaXZlciBhZGRyZXNzIChSQSkgYW5kIHRyYWZmaWMgSUQgKFRJRCksIGkuZS4KLSAqIG9uZSBRT1MgcHJpb3JpdHkgbGV2ZWwgZGVzdGluZWQgZm9yIG9uZSBzdGF0aW9uIChmb3IgdGhpcyB3aXJlbGVzcyBsaW5rLAotICogbm90IGZpbmFsIGRlc3RpbmF0aW9uKS4gIFRoZSBTQ0RfVFJBTlNMQVRFX1RBQkxFIGFyZWEgcHJvdmlkZXMgMTYgMTYtYml0Ci0gKiBtYXBwaW5ncywgb25lIGZvciBlYWNoIG9mIHRoZSAxNiBxdWV1ZXMuICBJZiBxdWV1ZSBpcyBub3QgaW4gU2NoZWR1bGVyLUFDSwotICogbW9kZSwgdGhlIGRldmljZSBpZ25vcmVzIHRoZSBtYXBwaW5nIHZhbHVlLgotICoKLSAqIEJpdCBmaWVsZHMsIGZvciBlYWNoIDE2LWJpdCBtYXA6Ci0gKiAxNS05OiAgUmVzZXJ2ZWQsIHNldCB0byAwCi0gKiAgOC00OiAgSW5kZXggaW50byBkZXZpY2UncyBzdGF0aW9uIHRhYmxlIGZvciByZWNpcGllbnQgc3RhdGlvbgotICogIDMtMDogIFRyYWZmaWMgSUQgKHRpZCksIHJhbmdlIDAtMTUKLSAqCi0gKiBEcml2ZXIgc2hvdWxkIGNsZWFyIHRoaXMgZW50aXJlIGFyZWEgKHNpemUgMzIgYnl0ZXMpIHRvIDAgYWZ0ZXIgcmVjZWl2aW5nCi0gKiAiQWxpdmUiIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlLiAgVG8gdXBkYXRlIGEgMTYtYml0IG1hcCB2YWx1ZSwgZHJpdmVyCi0gKiBtdXN0IHJlYWQgYSBkd29yZC1hbGlnbmVkIHZhbHVlIGZyb20gZGV2aWNlIFNSQU0sIHJlcGxhY2UgdGhlIDE2LWJpdCBtYXAKLSAqIHZhbHVlIG9mIGludGVyZXN0LCBhbmQgd3JpdGUgdGhlIGR3b3JkIHZhbHVlIGJhY2sgaW50byBkZXZpY2UgU1JBTS4KLSAqLwotI2RlZmluZSBTQ0RfVFJBTlNMQVRFX1RCTF9PRkZTRVQJCTB4NTAwCi0KLS8qIEZpbmQgdHJhbnNsYXRpb24gdGFibGUgZHdvcmQgdG8gcmVhZC93cml0ZSBmb3IgZ2l2ZW4gcXVldWUgKi8KLSNkZWZpbmUgU0NEX1RSQU5TTEFURV9UQkxfT0ZGU0VUX1FVRVVFKHgpIFwKLQkoKFNDRF9UUkFOU0xBVEVfVEJMX09GRlNFVCArICgoeCkgKiAyKSkgJiAweGZmZmZmZmZjKQotCi0jZGVmaW5lIFNDRF9UWEZJRk9fUE9TX1RJRAkJCSgwKQotI2RlZmluZSBTQ0RfVFhGSUZPX1BPU19SQQkJCSg0KQotI2RlZmluZSBTQ0RfUVVFVUVfUkFfVElEX01BUF9SQVRJRF9NU0sJCSgweDAxRkYpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKiBFTkQgVFggU0NIRURVTEVSICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgdTggaXdsNDk2NV9od19nZXRfcmF0ZShfX2xlMzIgcmF0ZV9uX2ZsYWdzKQotewotCXJldHVybiBsZTMyX3RvX2NwdShyYXRlX25fZmxhZ3MpICYgMHhGRjsKLX0KLXN0YXRpYyBpbmxpbmUgdTE2IGl3bDQ5NjVfaHdfZ2V0X3JhdGVfbl9mbGFncyhfX2xlMzIgcmF0ZV9uX2ZsYWdzKQotewotCXJldHVybiBsZTMyX3RvX2NwdShyYXRlX25fZmxhZ3MpICYgMHhGRkZGOwotfQotc3RhdGljIGlubGluZSBfX2xlMzIgaXdsNDk2NV9od19zZXRfcmF0ZV9uX2ZsYWdzKHU4IHJhdGUsIHUxNiBmbGFncykKLXsKLQlyZXR1cm4gY3B1X3RvX2xlMzIoZmxhZ3N8KHUxNilyYXRlKTsKLX0KLQogCiAvKioKICAqIFR4L1J4IFF1ZXVlcwpAQCAtMTM4NSwxNCArODE0LDE1IEBACiAgKiB1cCB0byA3IERNQSBjaGFubmVscyAoRklGT3MpLiAgRWFjaCBUeCBxdWV1ZSBpcyBzdXBwb3J0ZWQgYnkgYSBjaXJjdWxhciBhcnJheQogICogaW4gRFJBTSBjb250YWluaW5nIDI1NiBUcmFuc21pdCBGcmFtZSBEZXNjcmlwdG9ycyAoVEZEcykuCiAgKi8KLSNkZWZpbmUgSVdMNDk2NV9NQVhfV0lOX1NJWkUJNjQKLSNkZWZpbmUgSVdMNDk2NV9RVUVVRV9TSVpFCTI1NgotI2RlZmluZSBJV0w0OTY1X05VTV9GSUZPUwk3Ci0jZGVmaW5lIElXTDQ5NjVfTUFYX05VTV9RVUVVRVMJMTYKLQorI2RlZmluZSBJV0w0OV9NQVhfV0lOX1NJWkUJNjQKKyNkZWZpbmUgSVdMNDlfUVVFVUVfU0laRQkyNTYKKyNkZWZpbmUgSVdMNDlfTlVNX0ZJRk9TIAk3CisjZGVmaW5lIElXTDQ5X0NNRF9GSUZPX05VTQk0CisjZGVmaW5lIElXTDQ5X05VTV9RVUVVRVMJMTYKKyNkZWZpbmUgSVdMNDlfTlVNX0FNUERVX1FVRVVFUwk4CiAKIC8qKgotICogc3RydWN0IGl3bDQ5NjVfdGZkX2ZyYW1lX2RhdGEKKyAqIHN0cnVjdCBpd2xfdGZkX2ZyYW1lX2RhdGEKICAqCiAgKiBEZXNjcmliZXMgdXAgdG8gMiBidWZmZXJzIGNvbnRhaW5pbmcgKGNvbnRpZ3VvdXMpIHBvcnRpb25zIG9mIGEgVHggZnJhbWUuCiAgKiBFYWNoIGJ1ZmZlciBtdXN0IGJlIG9uIGR3b3JkIGJvdW5kYXJ5LgpAQCAtMTQxMSw3ICs4NDEsNyBAQAogICogMzEtMjA6IFR4IGJ1ZmZlciAyIGxlbmd0aCAoYnl0ZXMpCiAgKiAxOS0gMDogVHggYnVmZmVyIDIgYWRkcmVzcyBiaXRzIFszNToxNl0KICAqLwotc3RydWN0IGl3bDQ5NjVfdGZkX2ZyYW1lX2RhdGEgeworc3RydWN0IGl3bF90ZmRfZnJhbWVfZGF0YSB7CiAJX19sZTMyIHRiMV9hZGRyOwogCiAJX19sZTMyIHZhbDE7CkBAIC0xNDQxLDcgKzg3MSw3IEBACiAKIAogLyoqCi0gKiBzdHJ1Y3QgaXdsNDk2NV90ZmRfZnJhbWUKKyAqIHN0cnVjdCBpd2xfdGZkX2ZyYW1lCiAgKgogICogVHJhbnNtaXQgRnJhbWUgRGVzY3JpcHRvciAoVEZEKQogICoKQEAgLTE0NjgsNyArODk4LDcgQEAKICAqCiAgKiBBIG1heGltdW0gb2YgMjU1IChub3QgMjU2ISkgVEZEcyBtYXkgYmUgb24gYSBxdWV1ZSB3YWl0aW5nIGZvciBUeC4KICAqLwotc3RydWN0IGl3bDQ5NjVfdGZkX2ZyYW1lIHsKK3N0cnVjdCBpd2xfdGZkX2ZyYW1lIHsKIAlfX2xlMzIgdmFsMDsKIAkvKiBfX2xlMzIgcnN2ZDE6MjQ7ICovCiAJLyogX19sZTMyIG51bV90YnM6NTsgKi8KQEAgLTE0NzcsNyArOTA3LDcgQEAKICNkZWZpbmUgSVdMX251bV90YnNfU1lNIHZhbDAKIAkvKiBfX2xlMzIgcnN2ZDI6MTsgKi8KIAkvKiBfX2xlMzIgcGFkZGluZzoyOyAqLwotCXN0cnVjdCBpd2w0OTY1X3RmZF9mcmFtZV9kYXRhIHBhWzEwXTsKKwlzdHJ1Y3QgaXdsX3RmZF9mcmFtZV9kYXRhIHBhWzEwXTsKIAlfX2xlMzIgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTUyMCwxMCArOTUwLDEwIEBACiAgKiA0OTY1IGFzc3VtZXMgdGFibGVzIGFyZSBzZXBhcmF0ZWQgYnkgMTAyNCBieXRlcy4KICAqLwogc3RydWN0IGl3bDQ5NjVfc2NoZWRfcXVldWVfYnl0ZV9jbnRfdGJsIHsKLQlzdHJ1Y3QgaXdsNDk2NV9xdWV1ZV9ieXRlX2NudF9lbnRyeSB0ZmRfb2Zmc2V0W0lXTDQ5NjVfUVVFVUVfU0laRSArCi0JCQkJCQkgICAgICAgSVdMNDk2NV9NQVhfV0lOX1NJWkVdOworCXN0cnVjdCBpd2w0OTY1X3F1ZXVlX2J5dGVfY250X2VudHJ5IHRmZF9vZmZzZXRbSVdMNDlfUVVFVUVfU0laRSArCisJCQkJCQkgICAgICAgSVdMNDlfTUFYX1dJTl9TSVpFXTsKIAl1OCBkb250X2NhcmVbMTAyNCAtCi0JCSAgICAgKElXTDQ5NjVfUVVFVUVfU0laRSArIElXTDQ5NjVfTUFYX1dJTl9TSVpFKSAqCisJCSAgICAgKElXTDQ5X1FVRVVFX1NJWkUgKyBJV0w0OV9NQVhfV0lOX1NJWkUpICoKIAkJICAgICBzaXplb2YoX19sZTE2KV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTU1Myw3ICs5ODMsNyBAQAogICovCiBzdHJ1Y3QgaXdsNDk2NV9zaGFyZWQgewogCXN0cnVjdCBpd2w0OTY1X3NjaGVkX3F1ZXVlX2J5dGVfY250X3RibAotCSBxdWV1ZXNfYnl0ZV9jbnRfdGJsc1tJV0w0OTY1X01BWF9OVU1fUVVFVUVTXTsKKwkgcXVldWVzX2J5dGVfY250X3RibHNbSVdMNDlfTlVNX1FVRVVFU107CiAJX19sZTMyIHJiX2Nsb3NlZDsKIAogCS8qIF9fbGUzMiByYl9jbG9zZWRfc3R0c19yYl9udW06MTI7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LXJzLmMKaW5kZXggM2E3ZjBjYi4uM2NjYjg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtcnMuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KQEAgLTM4LDEzICszNywxNCBAQAogCiAjaW5jbHVkZSAiLi4vbmV0L21hYzgwMjExL3JhdGUuaCIKIAotI2luY2x1ZGUgIml3bC00OTY1LmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAKICNkZWZpbmUgUlNfTkFNRSAiaXdsLTQ5NjUtcnMiCiAKLSNkZWZpbmUgTlVNX1RSWV9CRUZPUkVfQU5URU5OQV9UT0dHTEUgMQorI2RlZmluZSBOVU1fVFJZX0JFRk9SRV9BTlRfVE9HR0xFIDEKICNkZWZpbmUgSVdMX05VTUJFUl9UUlkgICAgICAxCiAjZGVmaW5lIElXTF9IVF9OVU1CRVJfVFJZICAgMwogCkBAIC02NSw5ICs2NSwxNiBAQAogCUlXTF9SQVRFXzQ4TV9JTkRFWCwgSVdMX1JBVEVfNTRNX0lOREVYCiB9OwogCi1zdHJ1Y3QgaXdsNDk2NV9yYXRlIHsKLQl1MzIgcmF0ZV9uX2ZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CitzdGF0aWMgY29uc3QgdTggYW50X3RvZ2dsZV9sb29rdXBbXSA9IHsKKwkvKkFOVF9OT05FIC0+ICovIEFOVF9OT05FLAorCS8qQU5UX0EgICAgLT4gKi8gQU5UX0IsCisJLypBTlRfQiAgICAtPiAqLyBBTlRfQywKKwkvKkFOVF9BQiAgIC0+ICovIEFOVF9CQywKKwkvKkFOVF9DICAgIC0+ICovIEFOVF9BLAorCS8qQU5UX0FDICAgLT4gKi8gQU5UX0FCLAorCS8qQU5UX0JDICAgLT4gKi8gQU5UX0FDLAorCS8qQU5UX0FCQyAgLT4gKi8gQU5UX0FCQywKK307CiAKIC8qKgogICogc3RydWN0IGl3bDQ5NjVfcmF0ZV9zY2FsZV9kYXRhIC0tIHR4IHN1Y2Nlc3MgaGlzdG9yeSBmb3Igb25lIHJhdGUKQEAgLTg4LDE5ICs5NSwxNyBAQAogICogb25lIGZvciAiYWN0aXZlIiwgYW5kIG9uZSBmb3IgInNlYXJjaCIuCiAgKi8KIHN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvIHsKLQllbnVtIGl3bDQ5NjVfdGFibGVfdHlwZSBscV90eXBlOwotCWVudW0gaXdsNDk2NV9hbnRlbm5hX3R5cGUgYW50ZW5uYV90eXBlOworCWVudW0gaXdsX3RhYmxlX3R5cGUgbHFfdHlwZTsKKwl1OCBhbnRfdHlwZTsKIAl1OCBpc19TR0k7CS8qIDEgPSBzaG9ydCBndWFyZCBpbnRlcnZhbCAqLwogCXU4IGlzX2ZhdDsJLyogMSA9IDQwIE1IeiBjaGFubmVsIHdpZHRoICovCiAJdTggaXNfZHVwOwkvKiAxID0gZHVwbGljYXRlZCBkYXRhIHN0cmVhbXMgKi8KIAl1OCBhY3Rpb247CS8qIGNoYW5nZSBtb2R1bGF0aW9uOyBJV0xfW0xFR0FDWS9TSVNPL01JTU9dX1NXSVRDSF8qICovCiAJczMyICpleHBlY3RlZF90cHQ7CS8qIHRocm91Z2hwdXQgbWV0cmljczsgZXhwZWN0ZWRfdHB0X0csIGV0Yy4gKi8KLQlzdHJ1Y3QgaXdsNDk2NV9yYXRlIGN1cnJlbnRfcmF0ZTsgIC8qIHJhdGVfbl9mbGFncywgdUNvZGUgQVBJIGZvcm1hdCAqLworCXUzMiBjdXJyZW50X3JhdGU7ICAvKiByYXRlX25fZmxhZ3MsIHVDb2RlIEFQSSBmb3JtYXQgKi8KIAlzdHJ1Y3QgaXdsNDk2NV9yYXRlX3NjYWxlX2RhdGEgd2luW0lXTF9SQVRFX0NPVU5UXTsgLyogcmF0ZSBoaXN0b3JpZXMgKi8KIH07CiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCiBzdHJ1Y3QgaXdsNDk2NV90cmFmZmljX2xvYWQgewogCXVuc2lnbmVkIGxvbmcgdGltZV9zdGFtcDsJLyogYWdlIG9mIHRoZSBvbGRlc3Qgc3RhdGlzdGljcyAqLwogCXUzMiBwYWNrZXRfY291bnRbVElEX1FVRVVFX01BWF9TSVpFXTsgICAvKiBwYWNrZXQgY291bnQgaW4gdGhpcyB0aW1lCkBAIC0xMTIsOCArMTE3LDYgQEAKIAl1OCBoZWFkOwkJCS8qIHN0YXJ0IG9mIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KIH07CiAKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwotCiAvKioKICAqIHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAtLSBkcml2ZXIncyByYXRlIHNjYWxpbmcgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCkBAIC0xMzYsOCArMTM5LDYgQEAKIAl1MzIgZmx1c2hfdGltZXI7CS8qIHRpbWUgc3RheWluZyBpbiBtb2RlIGJlZm9yZSBuZXcgc2VhcmNoICovCiAKIAl1OCBhY3Rpb25fY291bnRlcjsJLyogIyBtb2RlLXN3aXRjaCBhY3Rpb25zIHRyaWVkICovCi0JdTggYW50ZW5uYTsKLQl1OCB2YWxpZF9hbnRlbm5hOwogCXU4IGlzX2dyZWVuOwogCXU4IGlzX2R1cDsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CkBAIC0xNDUsMjQgKzE0NiwyMSBAQAogCiAJLyogVGhlIGZvbGxvd2luZyBhcmUgYml0bWFwcyBvZiByYXRlczsgSVdMX1JBVEVfNk1fTUFTSywgZXRjLiAqLwogCXUzMiBzdXBwX3JhdGVzOwotCXUxNiBhY3RpdmVfcmF0ZTsKKwl1MTYgYWN0aXZlX2xlZ2FjeV9yYXRlOwogCXUxNiBhY3RpdmVfc2lzb19yYXRlOwotCXUxNiBhY3RpdmVfbWltb19yYXRlOworCXUxNiBhY3RpdmVfbWltbzJfcmF0ZTsKKwl1MTYgYWN0aXZlX21pbW8zX3JhdGU7CiAJdTE2IGFjdGl2ZV9yYXRlX2Jhc2ljOwogCiAJc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kIGxxOwogCXN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvIGxxX2luZm9bTFFfU0laRV07IC8qICJhY3RpdmUiLCAic2VhcmNoIiAqLwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCiAJc3RydWN0IGl3bDQ5NjVfdHJhZmZpY19sb2FkIGxvYWRbVElEX01BWF9MT0FEX0NPVU5UXTsKIAl1OCB0eF9hZ2dfdGlkX2VuOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgZGVudHJ5ICpyc19zdGFfZGJnZnNfc2NhbGVfdGFibGVfZmlsZTsKIAlzdHJ1Y3QgZGVudHJ5ICpyc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfZmlsZTsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogCXN0cnVjdCBkZW50cnkgKnJzX3N0YV9kYmdmc190eF9hZ2dfdGlkX2VuX2ZpbGU7Ci0jZW5kaWYKLQlzdHJ1Y3QgaXdsNDk2NV9yYXRlIGRiZ19maXhlZDsKKwl1MzIgZGJnX2ZpeGVkX3JhdGU7CiAjZW5kaWYKIAlzdHJ1Y3QgaXdsX3ByaXYgKmRydjsKIH07CkBAIC0xNzEsMTcgKzE2OSwxNyBAQAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7Ci1zdGF0aWMgdm9pZCByc19maWxsX2xpbmtfY21kKHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfc3RhLAotCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV9yYXRlICp0eF9tY3MsCi0JCQkgICAgIHN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCAqdGJsKTsKK3N0YXRpYyB2b2lkIHJzX2ZpbGxfbGlua19jbWQoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKKwkJCSAgICAgdTMyIHJhdGVfbl9mbGFncyk7CiAKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCiBzdGF0aWMgdm9pZCByc19kYmdmc19zZXRfbWNzKHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfc3RhLAotCQkJCXN0cnVjdCBpd2w0OTY1X3JhdGUgKm1jcywgaW50IGluZGV4KTsKKwkJCQkJdTMyICpyYXRlX25fZmxhZ3MsIGludCBpbmRleCk7CiAjZWxzZQogc3RhdGljIHZvaWQgcnNfZGJnZnNfc2V0X21jcyhzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKLQkJCQlzdHJ1Y3QgaXdsNDk2NV9yYXRlICptY3MsIGludCBpbmRleCkKKwkJCQkJdTMyICpyYXRlX25fZmxhZ3MsIGludCBpbmRleCkKIHt9CiAjZW5kaWYKIApAQCAtMTkwLDYgKzE4OCw3IEBACiAgKiAxLCAyLCA1LjUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0LCA2MCBNQml0cwogICogIkciIGlzIHRoZSBvbmx5IHRhYmxlIHRoYXQgc3VwcG9ydHMgQ0NLICh0aGUgZmlyc3QgNCByYXRlcykuCiAgKi8KKy8qRklYTUU6UlM6bmVlZCB0byBzcGVhcmF0ZSB0YWJsZXMgZm9yIE1JTU8yL01JTU8zKi8KIHN0YXRpYyBzMzIgZXhwZWN0ZWRfdHB0X0FbSVdMX1JBVEVfQ09VTlRdID0gewogCTAsIDAsIDAsIDAsIDQwLCA1NywgNzIsIDk4LCAxMjEsIDE1NCwgMTc3LCAxODYsIDE4NgogfTsKQEAgLTIzMCw3ICsyMjksNyBAQAogCTAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxOTEsIDIyMiwgMjQyLCAyNzAsIDI4NCwgMjg5LCAyOTMKIH07CiAKLXN0YXRpYyBpbmxpbmUgdTggaXdsNDk2NV9yYXRlX2dldF9yYXRlKHUzMiByYXRlX25fZmxhZ3MpCitzdGF0aWMgaW5saW5lIHU4IHJzX2V4dHJhY3RfcmF0ZSh1MzIgcmF0ZV9uX2ZsYWdzKQogewogCXJldHVybiAodTgpKHJhdGVfbl9mbGFncyAmIDB4RkYpOwogfQpAQCAtMjQ1LDcgKzI0NCwxMSBAQAogCXdpbmRvdy0+c3RhbXAgPSAwOwogfQogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKK3N0YXRpYyBpbmxpbmUgdTggcnNfaXNfdmFsaWRfYW50KHU4IHZhbGlkX2FudGVubmEsIHU4IGFudF90eXBlKQoreworCXJldHVybiAoKGFudF90eXBlICYgdmFsaWRfYW50ZW5uYSkgPT0gYW50X3R5cGUpOworfQorCiAvKgogICoJcmVtb3ZlcyB0aGUgb2xkIGRhdGEgZnJvbSB0aGUgc3RhdGlzdGljcy4gQWxsIGRhdGEgdGhhdCBpcyBvbGRlciB0aGFuCiAgKglUSURfTUFYX1RJTUVfRElGRiwgd2lsbCBiZSBkZWxldGVkLgpAQCAtMjcxLDE1ICsyNzQsMjEgQEAKICAqCWluY3JlbWVudCB0cmFmZmljIGxvYWQgdmFsdWUgZm9yIHRpZCBhbmQgYWxzbyByZW1vdmUKICAqCWFueSBvbGQgdmFsdWVzIGlmIHBhc3NlZCB0aGUgY2VydGFpbiB0aW1lIHBlcmlvZAogICovCi1zdGF0aWMgdm9pZCByc190bF9hZGRfcGFja2V0KHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfZGF0YSwgdTggdGlkKQorc3RhdGljIHU4IHJzX3RsX2FkZF9wYWNrZXQoc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9kYXRhLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAl1MzIgY3Vycl90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKIAl1MzIgdGltZV9kaWZmOwogCXMzMiBpbmRleDsKIAlzdHJ1Y3QgaXdsNDk2NV90cmFmZmljX2xvYWQgKnRsID0gTlVMTDsKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJdTggdGlkOwogCi0JaWYgKHRpZCA+PSBUSURfTUFYX0xPQURfQ09VTlQpCi0JCXJldHVybjsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQl1OCAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKKwkJdGlkID0gcWNbMF0gJiAweGY7CisJfSBlbHNlCisJCXJldHVybiBNQVhfVElEX0NPVU5UOwogCiAJdGwgPSAmbHFfZGF0YS0+bG9hZFt0aWRdOwogCkBAIC0yOTIsNyArMzAxLDcgQEAKIAkJdGwtPnF1ZXVlX2NvdW50ID0gMTsKIAkJdGwtPmhlYWQgPSAwOwogCQl0bC0+cGFja2V0X2NvdW50WzBdID0gMTsKLQkJcmV0dXJuOworCQlyZXR1cm4gTUFYX1RJRF9DT1VOVDsKIAl9CiAKIAl0aW1lX2RpZmYgPSBUSU1FX1dSQVBfQVJPVU5EKHRsLT50aW1lX3N0YW1wLCBjdXJyX3RpbWUpOwpAQCAtMzA5LDYgKzMxOCw4IEBACiAKIAlpZiAoKGluZGV4ICsgMSkgPiB0bC0+cXVldWVfY291bnQpCiAJCXRsLT5xdWV1ZV9jb3VudCA9IGluZGV4ICsgMTsKKworCXJldHVybiB0aWQ7CiB9CiAKIC8qCkBAIC0zNDksOSArMzYwLDkgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXRlOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAlzdGF0ZSA9IHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAogCWlmIChzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfSURMRSAmJgogCSAgICByc190bF9nZXRfbG9hZChscV9kYXRhLCB0aWQpID4gSVdMX0FHR19MT0FEX1RIUkVTSE9MRCkgewpAQCAtMzcyLDcgKzM4MywxMiBAQAogCQkJcnNfdGxfdHVybl9vbl9hZ2dfZm9yX3RpZChwcml2LCBscV9kYXRhLCB0aWQsIHN0YSk7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9IVCAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X251bV9vZl9hbnRfZnJvbV9yYXRlKHUzMiByYXRlX25fZmxhZ3MpCit7CisJcmV0dXJuICghIShyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19BTlRfQV9NU0spICsKKwkJISEocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfQU5UX0JfTVNLKSArCisJCSEhKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0FOVF9DX01TSykpOworfQogCiAvKioKICAqIHJzX2NvbGxlY3RfdHhfZGF0YSAtIFVwZGF0ZSB0aGUgc3VjY2Vzcy9mYWlsdXJlIHNsaWRpbmcgd2luZG93CkBAIC0zODYsOCArNDAyLDcgQEAKIAkJCSAgICAgIGludCBzdWNjZXNzZXMpCiB7CiAJc3RydWN0IGl3bDQ5NjVfcmF0ZV9zY2FsZV9kYXRhICp3aW5kb3cgPSBOVUxMOwotCXU2NCBtYXNrOwotCXU4IHdpbl9zaXplID0gSVdMX1JBVEVfTUFYX1dJTkRPVzsKKwlzdGF0aWMgY29uc3QgdTY0IG1hc2sgPSAoKCh1NjQpMSkgPDwgKElXTF9SQVRFX01BWF9XSU5ET1cgLSAxKSk7CiAJczMyIGZhaWxfY291bnQ7CiAKIAlpZiAoc2NhbGVfaW5kZXggPCAwIHx8IHNjYWxlX2luZGV4ID49IElXTF9SQVRFX0NPVU5UKQpAQCAtNDA1LDE0ICs0MjAsMTQgQEAKIAkgKiB3ZSBrZWVwIHRoZXNlIGJpdG1hcHMhKS4KIAkgKi8KIAl3aGlsZSAocmV0cmllcyA+IDApIHsKLQkJaWYgKHdpbmRvdy0+Y291bnRlciA+PSB3aW5fc2l6ZSkgewotCQkJd2luZG93LT5jb3VudGVyID0gd2luX3NpemUgLSAxOwotCQkJbWFzayA9IDE7Ci0JCQltYXNrID0gKG1hc2sgPDwgKHdpbl9zaXplIC0gMSkpOworCQlpZiAod2luZG93LT5jb3VudGVyID49IElXTF9SQVRFX01BWF9XSU5ET1cpIHsKKworCQkJLyogcmVtb3ZlIGVhcmxpZXN0ICovCisJCQl3aW5kb3ctPmNvdW50ZXIgPSBJV0xfUkFURV9NQVhfV0lORE9XIC0gMTsKKwogCQkJaWYgKHdpbmRvdy0+ZGF0YSAmIG1hc2spIHsKIAkJCQl3aW5kb3ctPmRhdGEgJj0gfm1hc2s7Ci0JCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPQotCQkJCQl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciAtIDE7CisJCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXItLTsKIAkJCX0KIAkJfQogCkBAIC00MjIsMTAgKzQzNyw5IEBACiAJCS8qIFNoaWZ0IGJpdG1hcCBieSBvbmUgZnJhbWUgKHRocm93IGF3YXkgb2xkZXN0IGhpc3RvcnkpLAogCQkgKiBPUiBpbiAiMSIsIGFuZCBpbmNyZW1lbnQgInN1Y2Nlc3MiIGlmIHRoaXMKIAkJICogZnJhbWUgd2FzIHN1Y2Nlc3NmdWwuICovCi0JCW1hc2sgPSB3aW5kb3ctPmRhdGE7Ci0JCXdpbmRvdy0+ZGF0YSA9IChtYXNrIDw8IDEpOworCQl3aW5kb3ctPmRhdGEgPDw9IDE7OwogCQlpZiAoc3VjY2Vzc2VzID4gMCkgewotCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciArIDE7CisJCQl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcisrOwogCQkJd2luZG93LT5kYXRhIHw9IDB4MTsKIAkJCXN1Y2Nlc3Nlcy0tOwogCQl9CkBAIC00NTgsMTY4ICs0NzIsMTYyIEBACiAvKgogICogRmlsbCB1Q29kZSBBUEkgcmF0ZV9uX2ZsYWdzIGZpZWxkLCBiYXNlZCBvbiAic2VhcmNoIiBvciAiYWN0aXZlIiB0YWJsZS4KICAqLwotc3RhdGljIHZvaWQgcnNfbWNzX2Zyb21fdGJsKHN0cnVjdCBpd2w0OTY1X3JhdGUgKm1jc19yYXRlLAotCQkJICAgc3RydWN0IGl3bDQ5NjVfc2NhbGVfdGJsX2luZm8gKnRibCwKLQkJCSAgIGludCBpbmRleCwgdTggdXNlX2dyZWVuKQorLyogRklYTUU6UlM6cmVtb3ZlIHRoaXMgZnVuY3Rpb24gYW5kIHB1dCB0aGUgZmxhZ3Mgc3RhdGljYWxseSBpbiB0aGUgdGFibGUgKi8KK3N0YXRpYyB1MzIgcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvICp0YmwsCisJCQkJICAgICAgIGludCBpbmRleCwgdTggdXNlX2dyZWVuKQogeworCXUzMiByYXRlX25fZmxhZ3MgPSAwOworCiAJaWYgKGlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKSB7Ci0JCW1jc19yYXRlLT5yYXRlX25fZmxhZ3MgPSBpd2w0OTY1X3JhdGVzW2luZGV4XS5wbGNwOworCQlyYXRlX25fZmxhZ3MgPSBpd2xfcmF0ZXNbaW5kZXhdLnBsY3A7CiAJCWlmIChpbmRleCA+PSBJV0xfRklSU1RfQ0NLX1JBVEUgJiYgaW5kZXggPD0gSVdMX0xBU1RfQ0NLX1JBVEUpCi0JCQltY3NfcmF0ZS0+cmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0NDS19NU0s7CisJCQlyYXRlX25fZmxhZ3MgfD0gUkFURV9NQ1NfQ0NLX01TSzsKIAotCX0gZWxzZSBpZiAoaXNfc2lzbyh0YmwtPmxxX3R5cGUpKSB7Ci0JCWlmIChpbmRleCA+IElXTF9MQVNUX09GRE1fUkFURSkKKwl9IGVsc2UgaWYgKGlzX0h0KHRibC0+bHFfdHlwZSkpIHsKKwkJaWYgKGluZGV4ID4gSVdMX0xBU1RfT0ZETV9SQVRFKSB7CisJCQlJV0xfRVJST1IoImludmFsaWQgSFQgcmF0ZSBpbmRleCAlZFxuIiwgaW5kZXgpOwogCQkJaW5kZXggPSBJV0xfTEFTVF9PRkRNX1JBVEU7Ci0JCSBtY3NfcmF0ZS0+cmF0ZV9uX2ZsYWdzID0gaXdsNDk2NV9yYXRlc1tpbmRleF0ucGxjcF9zaXNvIHwKLQkJCQkJICBSQVRFX01DU19IVF9NU0s7Ci0JfSBlbHNlIHsKLQkJaWYgKGluZGV4ID4gSVdMX0xBU1RfT0ZETV9SQVRFKQotCQkJaW5kZXggPSBJV0xfTEFTVF9PRkRNX1JBVEU7Ci0JCW1jc19yYXRlLT5yYXRlX25fZmxhZ3MgPSBpd2w0OTY1X3JhdGVzW2luZGV4XS5wbGNwX21pbW8gfAotCQkJCQkgUkFURV9NQ1NfSFRfTVNLOwotCX0KKwkJfQorCQlyYXRlX25fZmxhZ3MgPSBSQVRFX01DU19IVF9NU0s7CiAKLQlzd2l0Y2ggKHRibC0+YW50ZW5uYV90eXBlKSB7Ci0JY2FzZSBBTlRfQk9USDoKLQkJbWNzX3JhdGUtPnJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19BTlRfQUJfTVNLOwotCQlicmVhazsKLQljYXNlIEFOVF9NQUlOOgotCQltY3NfcmF0ZS0+cmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0FOVF9BX01TSzsKLQkJYnJlYWs7Ci0JY2FzZSBBTlRfQVVYOgotCQltY3NfcmF0ZS0+cmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0FOVF9CX01TSzsKLQkJYnJlYWs7Ci0JY2FzZSBBTlRfTk9ORToKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKQotCQlyZXR1cm47Ci0KLQlpZiAodGJsLT5pc19mYXQpIHsKLQkJaWYgKHRibC0+aXNfZHVwKQotCQkJbWNzX3JhdGUtPnJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19EVVBfTVNLOwotCQllbHNlCi0JCQltY3NfcmF0ZS0+cmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0ZBVF9NU0s7Ci0JfQotCWlmICh0YmwtPmlzX1NHSSkKLQkJbWNzX3JhdGUtPnJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19TR0lfTVNLOwotCi0JaWYgKHVzZV9ncmVlbikgewotCQltY3NfcmF0ZS0+cmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0dGX01TSzsKIAkJaWYgKGlzX3Npc28odGJsLT5scV90eXBlKSkKLQkJCW1jc19yYXRlLT5yYXRlX25fZmxhZ3MgJj0gflJBVEVfTUNTX1NHSV9NU0s7CisJCQlyYXRlX25fZmxhZ3MgfD0JaXdsX3JhdGVzW2luZGV4XS5wbGNwX3Npc287CisJCWVsc2UgaWYgKGlzX21pbW8yKHRibC0+bHFfdHlwZSkpCisJCQlyYXRlX25fZmxhZ3MgfD0JaXdsX3JhdGVzW2luZGV4XS5wbGNwX21pbW8yOworCQllbHNlCisJCQlyYXRlX25fZmxhZ3MgfD0JaXdsX3JhdGVzW2luZGV4XS5wbGNwX21pbW8zOworCX0gZWxzZSB7CisJCUlXTF9FUlJPUigiSW52YWxpZCB0YmwtPmxxX3R5cGUgJWRcbiIsIHRibC0+bHFfdHlwZSk7CiAJfQorCisJcmF0ZV9uX2ZsYWdzIHw9ICgodGJsLT5hbnRfdHlwZSA8PCBSQVRFX01DU19BTlRfUE9TKSAmCisJCQkJCQkgICAgIFJBVEVfTUNTX0FOVF9BQkNfTVNLKTsKKworCWlmIChpc19IdCh0YmwtPmxxX3R5cGUpKSB7CisJCWlmICh0YmwtPmlzX2ZhdCkgeworCQkJaWYgKHRibC0+aXNfZHVwKQorCQkJCXJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19EVVBfTVNLOworCQkJZWxzZQorCQkJCXJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19GQVRfTVNLOworCQl9CisJCWlmICh0YmwtPmlzX1NHSSkKKwkJCXJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19TR0lfTVNLOworCisJCWlmICh1c2VfZ3JlZW4pIHsKKwkJCXJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19HRl9NU0s7CisJCQlpZiAoaXNfc2lzbyh0YmwtPmxxX3R5cGUpICYmIHRibC0+aXNfU0dJKSB7CisJCQkJcmF0ZV9uX2ZsYWdzICY9IH5SQVRFX01DU19TR0lfTVNLOworCQkJCUlXTF9FUlJPUigiR0Ygd2FzIHNldCB3aXRoIFNHSTpTSVNPXG4iKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmF0ZV9uX2ZsYWdzOwogfQogCiAvKgogICogSW50ZXJwcmV0IHVDb2RlIEFQSSdzIHJhdGVfbl9mbGFncyBmb3JtYXQsCiAgKiBmaWxsICJzZWFyY2giIG9yICJhY3RpdmUiIHR4IG1vZGUgdGFibGUuCiAgKi8KLXN0YXRpYyBpbnQgcnNfZ2V0X3RibF9pbmZvX2Zyb21fbWNzKGNvbnN0IHN0cnVjdCBpd2w0OTY1X3JhdGUgKm1jc19yYXRlLAorc3RhdGljIGludCByc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoY29uc3QgdTMyIHJhdGVfbl9mbGFncywKIAkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAogCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqdGJsLAogCQkJCSAgICBpbnQgKnJhdGVfaWR4KQogewotCWludCBpbmRleDsKLQl1MzIgYW50X21zazsKKwl1MzIgYW50X21zayA9IChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19BTlRfQUJDX01TSyk7CisJdTggbnVtX29mX2FudCA9IGdldF9udW1fb2ZfYW50X2Zyb21fcmF0ZShyYXRlX25fZmxhZ3MpOworCXU4IG1jczsKIAotCWluZGV4ID0gaXdsNDk2NV9od3JhdGVfdG9fcGxjcF9pZHgobWNzX3JhdGUtPnJhdGVfbl9mbGFncyk7CisJKnJhdGVfaWR4ID0gaXdsX2h3cmF0ZV90b19wbGNwX2lkeChyYXRlX25fZmxhZ3MpOwogCi0JaWYgKGluZGV4ICA9PSBJV0xfUkFURV9JTlZBTElEKSB7CisJaWYgKCpyYXRlX2lkeCAgPT0gSVdMX1JBVEVfSU5WQUxJRCkgewogCQkqcmF0ZV9pZHggPSAtMTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXRibC0+aXNfU0dJID0gMDsJLyogZGVmYXVsdCBsZWdhY3kgc2V0dXAgKi8KIAl0YmwtPmlzX2ZhdCA9IDA7CiAJdGJsLT5pc19kdXAgPSAwOwotCXRibC0+YW50ZW5uYV90eXBlID0gQU5UX0JPVEg7CS8qIGRlZmF1bHQgTUlNTyBzZXR1cCAqLworCXRibC0+YW50X3R5cGUgPSAoYW50X21zayA+PiBSQVRFX01DU19BTlRfUE9TKTsKKwl0YmwtPmxxX3R5cGUgPSBMUV9OT05FOwogCiAJLyogbGVnYWN5IHJhdGUgZm9ybWF0ICovCi0JaWYgKCEobWNzX3JhdGUtPnJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUX01TSykpIHsKLQkJYW50X21zayA9IChtY3NfcmF0ZS0+cmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfQU5UX0FCX01TSyk7Ci0KLQkJaWYgKGFudF9tc2sgPT0gUkFURV9NQ1NfQU5UX0FCX01TSykKLQkJCXRibC0+bHFfdHlwZSA9IExRX05PTkU7Ci0JCWVsc2UgewotCisJaWYgKCEocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfSFRfTVNLKSkgeworCQlpZiAobnVtX29mX2FudCA9PSAxKSB7CiAJCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJCXRibC0+bHFfdHlwZSA9IExRX0E7CiAJCQllbHNlCiAJCQkJdGJsLT5scV90eXBlID0gTFFfRzsKLQotCQkJaWYgKG1jc19yYXRlLT5yYXRlX25fZmxhZ3MgJiBSQVRFX01DU19BTlRfQV9NU0spCi0JCQkJdGJsLT5hbnRlbm5hX3R5cGUgPSBBTlRfTUFJTjsKLQkJCWVsc2UKLQkJCQl0YmwtPmFudGVubmFfdHlwZSA9IEFOVF9BVVg7CiAJCX0KLQkJKnJhdGVfaWR4ID0gaW5kZXg7Ci0KLQkvKiBIVCByYXRlIGZvcm1hdCwgU0lTTyAobWlnaHQgYmUgMjAgTUh6IGxlZ2FjeSBvciA0MCBNSHogZmF0IHdpZHRoKSAqLwotCX0gZWxzZSBpZiAoaXdsNDk2NV9yYXRlX2dldF9yYXRlKG1jc19yYXRlLT5yYXRlX25fZmxhZ3MpCi0JCQkJCTw9IElXTF9SQVRFX1NJU09fNjBNX1BMQ1ApIHsKLQkJdGJsLT5scV90eXBlID0gTFFfU0lTTzsKLQotCQlhbnRfbXNrID0gKG1jc19yYXRlLT5yYXRlX25fZmxhZ3MgJiBSQVRFX01DU19BTlRfQUJfTVNLKTsKLQkJaWYgKGFudF9tc2sgPT0gUkFURV9NQ1NfQU5UX0FCX01TSykKLQkJCXRibC0+bHFfdHlwZSA9IExRX05PTkU7Ci0JCWVsc2UgewotCQkJaWYgKG1jc19yYXRlLT5yYXRlX25fZmxhZ3MgJiBSQVRFX01DU19BTlRfQV9NU0spCi0JCQkJdGJsLT5hbnRlbm5hX3R5cGUgPSBBTlRfTUFJTjsKLQkJCWVsc2UKLQkJCQl0YmwtPmFudGVubmFfdHlwZSA9IEFOVF9BVVg7Ci0JCX0KLQkJaWYgKG1jc19yYXRlLT5yYXRlX25fZmxhZ3MgJiBSQVRFX01DU19TR0lfTVNLKQotCQkJdGJsLT5pc19TR0kgPSAxOwotCi0JCWlmICgobWNzX3JhdGUtPnJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0ZBVF9NU0spIHx8Ci0JCSAgICAobWNzX3JhdGUtPnJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0RVUF9NU0spKQotCQkJdGJsLT5pc19mYXQgPSAxOwotCi0JCWlmIChtY3NfcmF0ZS0+cmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfRFVQX01TSykKLQkJCXRibC0+aXNfZHVwID0gMTsKLQotCQkqcmF0ZV9pZHggPSBpbmRleDsKLQotCS8qIEhUIHJhdGUgZm9ybWF0LCBNSU1PIChtaWdodCBiZSAyMCBNSHogbGVnYWN5IG9yIDQwIE1IeiBmYXQgd2lkdGgpICovCisJLyogSFQgcmF0ZSBmb3JtYXQgKi8KIAl9IGVsc2UgewotCQl0YmwtPmxxX3R5cGUgPSBMUV9NSU1POwotCQlpZiAobWNzX3JhdGUtPnJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX1NHSV9NU0spCisJCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19TR0lfTVNLKQogCQkJdGJsLT5pc19TR0kgPSAxOwogCi0JCWlmICgobWNzX3JhdGUtPnJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0ZBVF9NU0spIHx8Ci0JCSAgICAobWNzX3JhdGUtPnJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0RVUF9NU0spKQorCQlpZiAoKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0ZBVF9NU0spIHx8CisJCSAgICAocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfRFVQX01TSykpCiAJCQl0YmwtPmlzX2ZhdCA9IDE7CiAKLQkJaWYgKG1jc19yYXRlLT5yYXRlX25fZmxhZ3MgJiBSQVRFX01DU19EVVBfTVNLKQorCQlpZiAocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfRFVQX01TSykKIAkJCXRibC0+aXNfZHVwID0gMTsKLQkJKnJhdGVfaWR4ID0gaW5kZXg7CisKKwkJbWNzID0gcnNfZXh0cmFjdF9yYXRlKHJhdGVfbl9mbGFncyk7CisKKwkJLyogU0lTTyAqLworCQlpZiAobWNzIDw9IElXTF9SQVRFX1NJU09fNjBNX1BMQ1ApIHsKKwkJCWlmIChudW1fb2ZfYW50ID09IDEpCisJCQkJdGJsLT5scV90eXBlID0gTFFfU0lTTzsgLyplbHNlIE5PTkUqLworCQkvKiBNSU1PMiAqLworCQl9IGVsc2UgaWYgKG1jcyA8PSBJV0xfUkFURV9NSU1PMl82ME1fUExDUCkgeworCQkJaWYgKG51bV9vZl9hbnQgPT0gMikKKwkJCQl0YmwtPmxxX3R5cGUgPSBMUV9NSU1PMjsKKwkJLyogTUlNTzMgKi8KKwkJfSBlbHNlIHsKKwkJCWlmIChudW1fb2ZfYW50ID09IDMpCisJCQkJdGJsLT5scV90eXBlID0gTFFfTUlNTzM7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByc190b2dnbGVfYW50ZW5uYShzdHJ1Y3QgaXdsNDk2NV9yYXRlICpuZXdfcmF0ZSwKLQkJCQkgICAgIHN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvICp0YmwpCisvKiBzd2l0Y2ggdG8gYW5vdGhlciBhbnRlbm5hL2FudGVubmFzIGFuZCByZXR1cm4gMSAqLworLyogaWYgbm8gb3RoZXIgdmFsaWQgYW50ZW5uYSBmb3VuZCwgcmV0dXJuIDAgKi8KK3N0YXRpYyBpbnQgcnNfdG9nZ2xlX2FudGVubmEodTMyIHZhbGlkX2FudCwgdTMyICpyYXRlX25fZmxhZ3MsCisJCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqdGJsKQogewotCWlmICh0YmwtPmFudGVubmFfdHlwZSA9PSBBTlRfQVVYKSB7Ci0JCXRibC0+YW50ZW5uYV90eXBlID0gQU5UX01BSU47Ci0JCW5ld19yYXRlLT5yYXRlX25fZmxhZ3MgJj0gflJBVEVfTUNTX0FOVF9CX01TSzsKLQkJbmV3X3JhdGUtPnJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19BTlRfQV9NU0s7Ci0JfSBlbHNlIHsKLQkJdGJsLT5hbnRlbm5hX3R5cGUgPSBBTlRfQVVYOwotCQluZXdfcmF0ZS0+cmF0ZV9uX2ZsYWdzICY9IH5SQVRFX01DU19BTlRfQV9NU0s7Ci0JCW5ld19yYXRlLT5yYXRlX25fZmxhZ3MgfD0gUkFURV9NQ1NfQU5UX0JfTVNLOwotCX0KKwl1OCBuZXdfYW50X3R5cGU7CisKKwlpZiAoIXRibC0+YW50X3R5cGUgfHwgdGJsLT5hbnRfdHlwZSA+IEFOVF9BQkMpCisJCXJldHVybiAwOworCisJaWYgKCFyc19pc192YWxpZF9hbnQodmFsaWRfYW50LCB0YmwtPmFudF90eXBlKSkKKwkJcmV0dXJuIDA7CisKKwluZXdfYW50X3R5cGUgPSBhbnRfdG9nZ2xlX2xvb2t1cFt0YmwtPmFudF90eXBlXTsKKworCXdoaWxlICgobmV3X2FudF90eXBlICE9IHRibC0+YW50X3R5cGUpICYmCisJICAgICAgICFyc19pc192YWxpZF9hbnQodmFsaWRfYW50LCBuZXdfYW50X3R5cGUpKQorCQluZXdfYW50X3R5cGUgPSBhbnRfdG9nZ2xlX2xvb2t1cFtuZXdfYW50X3R5cGVdOworCisJaWYgKG5ld19hbnRfdHlwZSA9PSB0YmwtPmFudF90eXBlKQorCQlyZXR1cm4gMDsKKworCXRibC0+YW50X3R5cGUgPSBuZXdfYW50X3R5cGU7CisJKnJhdGVfbl9mbGFncyAmPSB+UkFURV9NQ1NfQU5UX0FCQ19NU0s7CisJKnJhdGVfbl9mbGFncyB8PSBuZXdfYW50X3R5cGUgPDwgUkFURV9NQ1NfQU5UX1BPUzsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSB1OCByc191c2VfZ3JlZW4oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQorLyogRklYTUU6UlM6IGluIDQ5NjUgd2UgZG9uJ3QgdXNlIGdyZWVuZmllbGQgYXQgYWxsICovCisvKiBGSVhNRTpSUzogZG9uJ3QgdXNlIGdyZWVuZmllbGQgZm9yIG5vdyBpbiBUWCAqLworI2lmIDAKK3N0YXRpYyBpbmxpbmUgdTggcnNfdXNlX2dyZWVuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQogewotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCiAJcmV0dXJuICgoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREUpICYmCiAJCXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2dyZWVuX2ZpZWxkICYmCiAJCSFwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5ub25fR0ZfU1RBX3ByZXNlbnQpOwotI2VuZGlmCS8qIENPTkZJR19JV0w0OTY1X0hUICovCit9CisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdTggcnNfdXNlX2dyZWVuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQorewogCXJldHVybiAwOwogfQogCkBAIC02MzAsMjcgKzYzOCwyOCBAQAogICogYmFzaWMgYXZhaWxhYmxlIHJhdGVzLgogICoKICAqLwotc3RhdGljIHZvaWQgcnNfZ2V0X3N1cHBvcnRlZF9yYXRlcyhzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKK3N0YXRpYyB1MTYgcnNfZ2V0X3N1cHBvcnRlZF9yYXRlcyhzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAotCQkJCSAgIGVudW0gaXdsNDk2NV90YWJsZV90eXBlIHJhdGVfdHlwZSwKLQkJCQkgICB1MTYgKmRhdGFfcmF0ZSkKKwkJCQkgICBlbnVtIGl3bF90YWJsZV90eXBlIHJhdGVfdHlwZSkKIHsKLQlpZiAoaXNfbGVnYWN5KHJhdGVfdHlwZSkpCi0JCSpkYXRhX3JhdGUgPSBscV9zdGEtPmFjdGl2ZV9yYXRlOwotCWVsc2UgewotCQlpZiAoaXNfc2lzbyhyYXRlX3R5cGUpKQotCQkJKmRhdGFfcmF0ZSA9IGxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZTsKLQkJZWxzZQotCQkJKmRhdGFfcmF0ZSA9IGxxX3N0YS0+YWN0aXZlX21pbW9fcmF0ZTsKLQl9Ci0KIAlpZiAoaGRyICYmIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCi0JICAgIGxxX3N0YS0+YWN0aXZlX3JhdGVfYmFzaWMpIHsKLQkJKmRhdGFfcmF0ZSA9IGxxX3N0YS0+YWN0aXZlX3JhdGVfYmFzaWM7CisJICAgIGxxX3N0YS0+YWN0aXZlX3JhdGVfYmFzaWMpCisJCXJldHVybiBscV9zdGEtPmFjdGl2ZV9yYXRlX2Jhc2ljOworCisJaWYgKGlzX2xlZ2FjeShyYXRlX3R5cGUpKSB7CisJCXJldHVybiBscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZTsKKwl9IGVsc2UgeworCQlpZiAoaXNfc2lzbyhyYXRlX3R5cGUpKQorCQkJcmV0dXJuIGxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZTsKKwkJZWxzZSBpZiAoaXNfbWltbzIocmF0ZV90eXBlKSkKKwkJCXJldHVybiBscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlOworCQllbHNlCisJCQlyZXR1cm4gbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZTsKIAl9CiB9CiAKLXN0YXRpYyB1MTYgcnNfZ2V0X2FkamFjZW50X3JhdGUodTggaW5kZXgsIHUxNiByYXRlX21hc2ssIGludCByYXRlX3R5cGUpCitzdGF0aWMgdTE2IHJzX2dldF9hZGphY2VudF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggaW5kZXgsIHUxNiByYXRlX21hc2ssCisJCQkJaW50IHJhdGVfdHlwZSkKIHsKIAl1OCBoaWdoID0gSVdMX1JBVEVfSU5WQUxJRDsKIAl1OCBsb3cgPSBJV0xfUkFURV9JTlZBTElEOwpAQCAtNjg0LDcgKzY5Myw3IEBACiAKIAlsb3cgPSBpbmRleDsKIAl3aGlsZSAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpIHsKLQkJbG93ID0gaXdsNDk2NV9yYXRlc1tsb3ddLnByZXZfcnM7CisJCWxvdyA9IGl3bF9yYXRlc1tsb3ddLnByZXZfcnM7CiAJCWlmIChsb3cgPT0gSVdMX1JBVEVfSU5WQUxJRCkKIAkJCWJyZWFrOwogCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgbG93KSkKQEAgLTY5NCw3ICs3MDMsNyBAQAogCiAJaGlnaCA9IGluZGV4OwogCXdoaWxlIChoaWdoICE9IElXTF9SQVRFX0lOVkFMSUQpIHsKLQkJaGlnaCA9IGl3bDQ5NjVfcmF0ZXNbaGlnaF0ubmV4dF9yczsKKwkJaGlnaCA9IGl3bF9yYXRlc1toaWdoXS5uZXh0X3JzOwogCQlpZiAoaGlnaCA9PSBJV0xfUkFURV9JTlZBTElEKQogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBoaWdoKSkKQEAgLTcwNSw5ICs3MTQsOSBAQAogCXJldHVybiAoaGlnaCA8PCA4KSB8IGxvdzsKIH0KIAotc3RhdGljIHZvaWQgcnNfZ2V0X2xvd2VyX3JhdGUoc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9zdGEsCitzdGF0aWMgdTMyIHJzX2dldF9sb3dlcl9yYXRlKHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfc3RhLAogCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqdGJsLCB1OCBzY2FsZV9pbmRleCwKLQkJCSAgICAgdTggaHRfcG9zc2libGUsIHN0cnVjdCBpd2w0OTY1X3JhdGUgKm1jc19yYXRlKQorCQkJICAgICB1OCBodF9wb3NzaWJsZSkKIHsKIAlzMzIgbG93OwogCXUxNiByYXRlX21hc2s7CkBAIC03MjYsMTUgKzczNSwxNCBAQAogCQllbHNlCiAJCQl0YmwtPmxxX3R5cGUgPSBMUV9HOwogCi0JCWlmICgodGJsLT5hbnRlbm5hX3R5cGUgPT0gQU5UX0JPVEgpIHx8Ci0JCSAgICAodGJsLT5hbnRlbm5hX3R5cGUgPT0gQU5UX05PTkUpKQotCQkJdGJsLT5hbnRlbm5hX3R5cGUgPSBBTlRfTUFJTjsKKwkJaWYgKG51bV9vZl9hbnQodGJsLT5hbnRfdHlwZSkgPiAxKQorCQkJdGJsLT5hbnRfdHlwZSA9IEFOVF9BOy8qRklYTUU6UlMqLwogCiAJCXRibC0+aXNfZmF0ID0gMDsKIAkJdGJsLT5pc19TR0kgPSAwOwogCX0KIAotCXJzX2dldF9zdXBwb3J0ZWRfcmF0ZXMobHFfc3RhLCBOVUxMLCB0YmwtPmxxX3R5cGUsICZyYXRlX21hc2spOworCXJhdGVfbWFzayA9IHJzX2dldF9zdXBwb3J0ZWRfcmF0ZXMobHFfc3RhLCBOVUxMLCB0YmwtPmxxX3R5cGUpOwogCiAJLyogTWFzayB3aXRoIHN0YXRpb24gcmF0ZSByZXN0cmljdGlvbiAqLwogCWlmIChpc19sZWdhY3kodGJsLT5scV90eXBlKSkgewpAQCAtNzQ4LDI1ICs3NTYsMjYgQEAKIAogCS8qIElmIHdlIHN3aXRjaGVkIGZyb20gSFQgdG8gbGVnYWN5LCBjaGVjayBjdXJyZW50IHJhdGUgKi8KIAlpZiAoc3dpdGNoX3RvX2xlZ2FjeSAmJiAocmF0ZV9tYXNrICYgKDEgPDwgc2NhbGVfaW5kZXgpKSkgewotCQlyc19tY3NfZnJvbV90YmwobWNzX3JhdGUsIHRibCwgc2NhbGVfaW5kZXgsIGlzX2dyZWVuKTsKLQkJcmV0dXJuOworCQlsb3cgPSBzY2FsZV9pbmRleDsKKwkJZ290byBvdXQ7CiAJfQogCi0JaGlnaF9sb3cgPSByc19nZXRfYWRqYWNlbnRfcmF0ZShzY2FsZV9pbmRleCwgcmF0ZV9tYXNrLCB0YmwtPmxxX3R5cGUpOworCWhpZ2hfbG93ID0gcnNfZ2V0X2FkamFjZW50X3JhdGUobHFfc3RhLT5kcnYsIHNjYWxlX2luZGV4LCByYXRlX21hc2ssCisJCQkJCXRibC0+bHFfdHlwZSk7CiAJbG93ID0gaGlnaF9sb3cgJiAweGZmOwogCi0JaWYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKQotCQlyc19tY3NfZnJvbV90YmwobWNzX3JhdGUsIHRibCwgbG93LCBpc19ncmVlbik7Ci0JZWxzZQotCQlyc19tY3NfZnJvbV90YmwobWNzX3JhdGUsIHRibCwgc2NhbGVfaW5kZXgsIGlzX2dyZWVuKTsKKwlpZiAobG93ID09IElXTF9SQVRFX0lOVkFMSUQpCisJCWxvdyA9IHNjYWxlX2luZGV4OworCitvdXQ6CisJcmV0dXJuIHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIGxvdywgaXNfZ3JlZW4pOwogfQogCiAvKgogICogbWFjODAyMTEgc2VuZHMgdXMgVHggc3RhdHVzCiAgKi8KIHN0YXRpYyB2b2lkIHJzX3R4X3N0YXR1cyh2b2lkICpwcml2X3JhdGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqdHhfcmVzcCkKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBzdGF0dXM7CiAJdTggcmV0cmllczsKQEAgLTc3OCwxMyArNzg3LDE0IEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKXByaXZfcmF0ZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbG9jYWxfdG9faHcobG9jYWwpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaXdsNDk2NV9yYXRlX3NjYWxlX2RhdGEgKndpbmRvdyA9IE5VTEw7CiAJc3RydWN0IGl3bDQ5NjVfcmF0ZV9zY2FsZV9kYXRhICpzZWFyY2hfd2luID0gTlVMTDsKLQlzdHJ1Y3QgaXdsNDk2NV9yYXRlIHR4X21jczsKKwl1MzIgdHhfcmF0ZTsKIAlzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyB0YmxfdHlwZTsKIAlzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqY3Vycl90YmwsICpzZWFyY2hfdGJsOwogCXU4IGFjdGl2ZV9pbmRleCA9IDA7Ci0JdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAJczMyIHRwdCA9IDA7CiAKIAlJV0xfREVCVUdfUkFURV9MSU1JVCgiZ2V0IGZyYW1lIGFjayByZXNwb25zZSwgdXBkYXRlIHJhdGUgc2NhbGUgd2luZG93XG4iKTsKQEAgLTc5MywxMSArODAzLDExIEBACiAJCXJldHVybjsKIAogCS8qIFRoaXMgcGFja2V0IHdhcyBhZ2dyZWdhdGVkIGJ1dCBkb2Vzbid0IGNhcnJ5IHJhdGUgc2NhbGUgaW5mbyAqLwotCWlmICgodHhfcmVzcC0+Y29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9BTVBEVSkgJiYKLQkgICAgISh0eF9yZXNwLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfQU1QRFUpKQorCWlmICgoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSAmJgorCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpKQogCQlyZXR1cm47CiAKLQlyZXRyaWVzID0gdHhfcmVzcC0+cmV0cnlfY291bnQ7CisJcmV0cmllcyA9IGluZm8tPnN0YXR1cy5yZXRyeV9jb3VudDsKIAogCWlmIChyZXRyaWVzID4gMTUpCiAJCXJldHJpZXMgPSAxNTsKQEAgLTgxMiw5ICs4MjIsNiBAQAogCiAJbHFfc3RhID0gKHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqKXN0YS0+cmF0ZV9jdHJsX3ByaXY7CiAKLQlpZiAoIXByaXYtPmxxX21uZ3IubHFfcmVhZHkpCi0JCWdvdG8gb3V0OwotCiAJaWYgKChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpICYmCiAJICAgICFscV9zdGEtPmlic3Nfc3RhX2FkZGVkKQogCQlnb3RvIG91dDsKQEAgLTgyMiwxNSArODI5LDYgQEAKIAl0YWJsZSA9ICZscV9zdGEtPmxxOwogCWFjdGl2ZV9pbmRleCA9IGxxX3N0YS0+YWN0aXZlX3RibDsKIAotCS8qIEdldCBtYWM4MDIxMSBhbnRlbm5hIGluZm8gKi8KLQlscV9zdGEtPmFudGVubmEgPQotCQkobHFfc3RhLT52YWxpZF9hbnRlbm5hICYgbG9jYWwtPmh3LmNvbmYuYW50ZW5uYV9zZWxfdHgpOwotCWlmICghbHFfc3RhLT5hbnRlbm5hKQotCQlscV9zdGEtPmFudGVubmEgPSBscV9zdGEtPnZhbGlkX2FudGVubmE7Ci0KLQkvKiBJZ25vcmUgbWFjODAyMTEgYW50ZW5uYSBpbmZvIGZvciBub3cgKi8KLQlscV9zdGEtPmFudGVubmEgPSBscV9zdGEtPnZhbGlkX2FudGVubmE7Ci0KIAljdXJyX3RibCA9ICYobHFfc3RhLT5scV9pbmZvW2FjdGl2ZV9pbmRleF0pOwogCXNlYXJjaF90YmwgPSAmKGxxX3N0YS0+bHFfaW5mb1soMSAtIGFjdGl2ZV9pbmRleCldKTsKIAl3aW5kb3cgPSAoc3RydWN0IGl3bDQ5NjVfcmF0ZV9zY2FsZV9kYXRhICopCkBAIC04NDYsMjggKzg0NCwyNiBAQAogCSAqIHRvIGNoZWNrICJzZWFyY2giIG1vZGUsIG9yIGEgcHJpb3IgInNlYXJjaCIgbW9kZSBhZnRlciB3ZSd2ZSBtb3ZlZAogCSAqIHRvIGEgbmV3ICJzZWFyY2giIG1vZGUgKHdoaWNoIG1pZ2h0IGJlY29tZSB0aGUgbmV3ICJhY3RpdmUiIG1vZGUpLgogCSAqLwotCXR4X21jcy5yYXRlX25fZmxhZ3MgPSBsZTMyX3RvX2NwdSh0YWJsZS0+cnNfdGFibGVbMF0ucmF0ZV9uX2ZsYWdzKTsKLQlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoJnR4X21jcywgcHJpdi0+YmFuZCwgJnRibF90eXBlLCAmcnNfaW5kZXgpOworCXR4X3JhdGUgPSBsZTMyX3RvX2NwdSh0YWJsZS0+cnNfdGFibGVbMF0ucmF0ZV9uX2ZsYWdzKTsKKwlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3ModHhfcmF0ZSwgcHJpdi0+YmFuZCwgJnRibF90eXBlLCAmcnNfaW5kZXgpOwogCWlmIChwcml2LT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJzX2luZGV4IC09IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKLQlpZiAoKHR4X3Jlc3AtPmNvbnRyb2wudHhfcmF0ZSA9PSBOVUxMKSB8fAorCWlmICgoaW5mby0+dHhfcmF0ZV9pZHggPCAwKSB8fAogCSAgICAodGJsX3R5cGUuaXNfU0dJIF4KLQkJISEodHhfcmVzcC0+Y29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9TSE9SVF9HSSkpIHx8CisJCSEhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TSE9SVF9HSSkpIHx8CiAJICAgICh0YmxfdHlwZS5pc19mYXQgXgotCQkhISh0eF9yZXNwLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMXzQwX01IWl9XSURUSCkpIHx8CisJCSEhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF80MF9NSFpfV0lEVEgpKSB8fAogCSAgICAodGJsX3R5cGUuaXNfZHVwIF4KLQkJISEodHhfcmVzcC0+Y29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9EVVBfREFUQSkpIHx8Ci0JICAgICh0YmxfdHlwZS5hbnRlbm5hX3R5cGUgXgotCQl0eF9yZXNwLT5jb250cm9sLmFudGVubmFfc2VsX3R4KSB8fAotCSAgICAoISEodHhfbWNzLnJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUX01TSykgXgotCQkhISh0eF9yZXNwLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX09GRE1fSFQpKSB8fAotCSAgICAoISEodHhfbWNzLnJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0dGX01TSykgXgotCQkhISh0eF9yZXNwLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0dSRUVOX0ZJRUxEKSkgfHwKKwkJISEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0RVUF9EQVRBKSkgfHwKKwkgICAgKHRibF90eXBlLmFudF90eXBlIF4gaW5mby0+YW50ZW5uYV9zZWxfdHgpIHx8CisJICAgICghISh0eF9yYXRlICYgUkFURV9NQ1NfSFRfTVNLKSBeCisJCSEhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9PRkRNX0hUKSkgfHwKKwkgICAgKCEhKHR4X3JhdGUgJiBSQVRFX01DU19HRl9NU0spIF4KKwkJISEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0dSRUVOX0ZJRUxEKSkgfHwKIAkgICAgKGh3LT53aXBoeS0+YmFuZHNbcHJpdi0+YmFuZF0tPmJpdHJhdGVzW3JzX2luZGV4XS5iaXRyYXRlICE9Ci0JCXR4X3Jlc3AtPmNvbnRyb2wudHhfcmF0ZS0+Yml0cmF0ZSkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImluaXRpYWwgcmF0ZSBkb2VzIG5vdCBtYXRjaCAweCV4XG4iLAotCQkJCXR4X21jcy5yYXRlX25fZmxhZ3MpOworCSAgICAgaHctPndpcGh5LT5iYW5kc1tpbmZvLT5iYW5kXS0+Yml0cmF0ZXNbaW5mby0+dHhfcmF0ZV9pZHhdLmJpdHJhdGUpKSB7CisJCUlXTF9ERUJVR19SQVRFKCJpbml0aWFsIHJhdGUgZG9lcyBub3QgbWF0Y2ggMHgleFxuIiwgdHhfcmF0ZSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtODc1LDE1ICs4NzEsMTQgQEAKIAl3aGlsZSAocmV0cmllcykgewogCQkvKiBMb29rIHVwIHRoZSByYXRlIGFuZCBvdGhlciBpbmZvIHVzZWQgZm9yIGVhY2ggdHggYXR0ZW1wdC4KIAkJICogRWFjaCB0eCBhdHRlbXB0IHN0ZXBzIG9uZSBlbnRyeSBkZWVwZXIgaW4gdGhlIHJhdGUgdGFibGUuICovCi0JCXR4X21jcy5yYXRlX25fZmxhZ3MgPQotCQkgICAgbGUzMl90b19jcHUodGFibGUtPnJzX3RhYmxlW2luZGV4XS5yYXRlX25fZmxhZ3MpOwotCQlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoJnR4X21jcywgcHJpdi0+YmFuZCwKKwkJdHhfcmF0ZSA9IGxlMzJfdG9fY3B1KHRhYmxlLT5yc190YWJsZVtpbmRleF0ucmF0ZV9uX2ZsYWdzKTsKKwkJcnNfZ2V0X3RibF9pbmZvX2Zyb21fbWNzKHR4X3JhdGUsIHByaXYtPmJhbmQsCiAJCQkJCSAgJnRibF90eXBlLCAmcnNfaW5kZXgpOwogCiAJCS8qIElmIHR5cGUgbWF0Y2hlcyAic2VhcmNoIiB0YWJsZSwKIAkJICogYWRkIGZhaWx1cmUgdG8gInNlYXJjaCIgaGlzdG9yeSAqLwogCQlpZiAoKHRibF90eXBlLmxxX3R5cGUgPT0gc2VhcmNoX3RibC0+bHFfdHlwZSkgJiYKLQkJICAgICh0YmxfdHlwZS5hbnRlbm5hX3R5cGUgPT0gc2VhcmNoX3RibC0+YW50ZW5uYV90eXBlKSAmJgorCQkgICAgKHRibF90eXBlLmFudF90eXBlID09IHNlYXJjaF90YmwtPmFudF90eXBlKSAmJgogCQkgICAgKHRibF90eXBlLmlzX1NHSSA9PSBzZWFyY2hfdGJsLT5pc19TR0kpKSB7CiAJCQlpZiAoc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0KQogCQkJCXRwdCA9IHNlYXJjaF90YmwtPmV4cGVjdGVkX3RwdFtyc19pbmRleF07CkBAIC04OTQsNyArODg5LDcgQEAKIAkJLyogRWxzZSBpZiB0eXBlIG1hdGNoZXMgImN1cnJlbnQvYWN0aXZlIiB0YWJsZSwKIAkJICogYWRkIGZhaWx1cmUgdG8gImN1cnJlbnQvYWN0aXZlIiBoaXN0b3J5ICovCiAJCX0gZWxzZSBpZiAoKHRibF90eXBlLmxxX3R5cGUgPT0gY3Vycl90YmwtPmxxX3R5cGUpICYmCi0JCQkgICAodGJsX3R5cGUuYW50ZW5uYV90eXBlID09IGN1cnJfdGJsLT5hbnRlbm5hX3R5cGUpICYmCisJCQkgICAodGJsX3R5cGUuYW50X3R5cGUgPT0gY3Vycl90YmwtPmFudF90eXBlKSAmJgogCQkJICAgKHRibF90eXBlLmlzX1NHSSA9PSBjdXJyX3RibC0+aXNfU0dJKSkgewogCQkJaWYgKGN1cnJfdGJsLT5leHBlY3RlZF90cHQpCiAJCQkJdHB0ID0gY3Vycl90YmwtPmV4cGVjdGVkX3RwdFtyc19pbmRleF07CkBAIC05MTcsNDQgKzkxMiw0MSBAQAogCSAqIGlmIFR4IHdhcyBzdWNjZXNzZnVsIGZpcnN0IHRyeSwgdXNlIG9yaWdpbmFsIHJhdGUsCiAJICogZWxzZSBsb29rIHVwIHRoZSByYXRlIHRoYXQgd2FzLCBmaW5hbGx5LCBzdWNjZXNzZnVsLgogCSAqLwotCXR4X21jcy5yYXRlX25fZmxhZ3MgPSBsZTMyX3RvX2NwdSh0YWJsZS0+cnNfdGFibGVbaW5kZXhdLnJhdGVfbl9mbGFncyk7Ci0JcnNfZ2V0X3RibF9pbmZvX2Zyb21fbWNzKCZ0eF9tY3MsIHByaXYtPmJhbmQsICZ0YmxfdHlwZSwgJnJzX2luZGV4KTsKKwl0eF9yYXRlID0gbGUzMl90b19jcHUodGFibGUtPnJzX3RhYmxlW2luZGV4XS5yYXRlX25fZmxhZ3MpOworCXJzX2dldF90YmxfaW5mb19mcm9tX21jcyh0eF9yYXRlLCBwcml2LT5iYW5kLCAmdGJsX3R5cGUsICZyc19pbmRleCk7CiAKIAkvKiBVcGRhdGUgZnJhbWUgaGlzdG9yeSB3aW5kb3cgd2l0aCAic3VjY2VzcyIgaWYgVHggZ290IEFDS2VkIC4uLiAqLwotCWlmICh0eF9yZXNwLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLKQotCQlzdGF0dXMgPSAxOwotCWVsc2UKLQkJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSAhIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSyk7CiAKIAkvKiBJZiB0eXBlIG1hdGNoZXMgInNlYXJjaCIgdGFibGUsCiAJICogYWRkIGZpbmFsIHR4IHN0YXR1cyB0byAic2VhcmNoIiBoaXN0b3J5ICovCiAJaWYgKCh0YmxfdHlwZS5scV90eXBlID09IHNlYXJjaF90YmwtPmxxX3R5cGUpICYmCi0JICAgICh0YmxfdHlwZS5hbnRlbm5hX3R5cGUgPT0gc2VhcmNoX3RibC0+YW50ZW5uYV90eXBlKSAmJgorCSAgICAodGJsX3R5cGUuYW50X3R5cGUgPT0gc2VhcmNoX3RibC0+YW50X3R5cGUpICYmCiAJICAgICh0YmxfdHlwZS5pc19TR0kgPT0gc2VhcmNoX3RibC0+aXNfU0dJKSkgewogCQlpZiAoc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0KQogCQkJdHB0ID0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJZWxzZQogCQkJdHB0ID0gMDsKLQkJaWYgKHR4X3Jlc3AtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfQU1QRFUpCisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCiAJCQlyc19jb2xsZWN0X3R4X2RhdGEoc2VhcmNoX3dpbiwgcnNfaW5kZXgsIHRwdCwKLQkJCQkJICAgdHhfcmVzcC0+YW1wZHVfYWNrX2xlbiwKLQkJCQkJICAgdHhfcmVzcC0+YW1wZHVfYWNrX21hcCk7CisJCQkJCSAgIGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuLAorCQkJCQkgICBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX21hcCk7CiAJCWVsc2UKIAkJCXJzX2NvbGxlY3RfdHhfZGF0YShzZWFyY2hfd2luLCByc19pbmRleCwgdHB0LAogCQkJCQkgICAxLCBzdGF0dXMpOwogCS8qIEVsc2UgaWYgdHlwZSBtYXRjaGVzICJjdXJyZW50L2FjdGl2ZSIgdGFibGUsCiAJICogYWRkIGZpbmFsIHR4IHN0YXR1cyB0byAiY3VycmVudC9hY3RpdmUiIGhpc3RvcnkgKi8KIAl9IGVsc2UgaWYgKCh0YmxfdHlwZS5scV90eXBlID09IGN1cnJfdGJsLT5scV90eXBlKSAmJgotCQkgICAodGJsX3R5cGUuYW50ZW5uYV90eXBlID09IGN1cnJfdGJsLT5hbnRlbm5hX3R5cGUpICYmCisJCSAgICh0YmxfdHlwZS5hbnRfdHlwZSA9PSBjdXJyX3RibC0+YW50X3R5cGUpICYmCiAJCSAgICh0YmxfdHlwZS5pc19TR0kgPT0gY3Vycl90YmwtPmlzX1NHSSkpIHsKIAkJaWYgKGN1cnJfdGJsLT5leHBlY3RlZF90cHQpCiAJCQl0cHQgPSBjdXJyX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJZWxzZQogCQkJdHB0ID0gMDsKLQkJaWYgKHR4X3Jlc3AtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfQU1QRFUpCisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCiAJCQlyc19jb2xsZWN0X3R4X2RhdGEod2luZG93LCByc19pbmRleCwgdHB0LAotCQkJCQkgICB0eF9yZXNwLT5hbXBkdV9hY2tfbGVuLAotCQkJCQkgICB0eF9yZXNwLT5hbXBkdV9hY2tfbWFwKTsKKwkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4sCisJCQkJCSAgIGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwKTsKIAkJZWxzZQogCQkJcnNfY29sbGVjdF90eF9kYXRhKHdpbmRvdywgcnNfaW5kZXgsIHRwdCwKIAkJCQkJICAgMSwgc3RhdHVzKTsKQEAgLTk2MywxMCArOTU1LDEwIEBACiAJLyogSWYgbm90IHNlYXJjaGluZyBmb3IgbmV3IG1vZGUsIGluY3JlbWVudCBzdWNjZXNzL2ZhaWxlZCBjb3VudGVyCiAJICogLi4uIHRoZXNlIGhlbHAgZGV0ZXJtaW5lIHdoZW4gdG8gc3RhcnQgc2VhcmNoaW5nIGFnYWluICovCiAJaWYgKGxxX3N0YS0+c3RheV9pbl90YmwpIHsKLQkJaWYgKHR4X3Jlc3AtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfQU1QRFUpIHsKLQkJCWxxX3N0YS0+dG90YWxfc3VjY2VzcyArPSB0eF9yZXNwLT5hbXBkdV9hY2tfbWFwOworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCQlscV9zdGEtPnRvdGFsX3N1Y2Nlc3MgKz0gaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXA7CiAJCQlscV9zdGEtPnRvdGFsX2ZhaWxlZCArPQotCQkJICAgICAodHhfcmVzcC0+YW1wZHVfYWNrX2xlbiAtIHR4X3Jlc3AtPmFtcGR1X2Fja19tYXApOworCQkJICAgICAoaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gLSBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX21hcCk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoc3RhdHVzKQogCQkJCWxxX3N0YS0+dG90YWxfc3VjY2VzcysrOwpAQCAtOTgyLDMwICs5NzQsNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHU4IHJzX2lzX2FudF9jb25uZWN0ZWQodTggdmFsaWRfYW50ZW5uYSwKLQkJCSAgICAgIGVudW0gaXdsNDk2NV9hbnRlbm5hX3R5cGUgYW50ZW5uYV90eXBlKQotewotCWlmIChhbnRlbm5hX3R5cGUgPT0gQU5UX0FVWCkKLQkJcmV0dXJuICgodmFsaWRfYW50ZW5uYSAmIDB4MikgPyAxOjApOwotCWVsc2UgaWYgKGFudGVubmFfdHlwZSA9PSBBTlRfTUFJTikKLQkJcmV0dXJuICgodmFsaWRfYW50ZW5uYSAmIDB4MSkgPyAxOjApOwotCWVsc2UgaWYgKGFudGVubmFfdHlwZSA9PSBBTlRfQk9USCkKLQkJcmV0dXJuICgodmFsaWRfYW50ZW5uYSAmIDB4MykgPT0gMHgzKTsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdTggcnNfaXNfb3RoZXJfYW50X2Nvbm5lY3RlZCh1OCB2YWxpZF9hbnRlbm5hLAotCQkJCSAgICBlbnVtIGl3bDQ5NjVfYW50ZW5uYV90eXBlIGFudGVubmFfdHlwZSkKLXsKLQlpZiAoYW50ZW5uYV90eXBlID09IEFOVF9BVVgpCi0JCXJldHVybiByc19pc19hbnRfY29ubmVjdGVkKHZhbGlkX2FudGVubmEsIEFOVF9NQUlOKTsKLQllbHNlCi0JCXJldHVybiByc19pc19hbnRfY29ubmVjdGVkKHZhbGlkX2FudGVubmEsIEFOVF9BVVgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBCZWdpbiBhIHBlcmlvZCBvZiBzdGF5aW5nIHdpdGggYSBzZWxlY3RlZCBtb2R1bGF0aW9uIG1vZGUuCiAgKiBTZXQgInN0YXlfaW5fdGJsIiBmbGFnIHRvIHByZXZlbnQgYW55IG1vZGUgc3dpdGNoZXMuCkBAIC0xMDE0LDEwICs5ODIsMTAgQEAKICAqIFRoZXNlIGNvbnRyb2wgaG93IGxvbmcgd2Ugc3RheSB1c2luZyBzYW1lIG1vZHVsYXRpb24gbW9kZSBiZWZvcmUKICAqIHNlYXJjaGluZyBmb3IgYSBuZXcgbW9kZS4KICAqLwotc3RhdGljIHZvaWQgcnNfc2V0X3N0YXlfaW5fdGFibGUodTggaXNfbGVnYWN5LAorc3RhdGljIHZvaWQgcnNfc2V0X3N0YXlfaW5fdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpc19sZWdhY3ksCiAJCQkJIHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfc3RhKQogewotCUlXTF9ERUJVR19IVCgid2UgYXJlIHN0YXlpbmcgaW4gdGhlIHNhbWUgdGFibGVcbiIpOworCUlXTF9ERUJVR19SQVRFKCJ3ZSBhcmUgc3RheWluZyBpbiB0aGUgc2FtZSB0YWJsZVxuIik7CiAJbHFfc3RhLT5zdGF5X2luX3RibCA9IDE7CS8qIG9ubHkgcGxhY2UgdGhpcyBnZXRzIHNldCAqLwogCWlmIChpc19sZWdhY3kpIHsKIAkJbHFfc3RhLT50YWJsZV9jb3VudF9saW1pdCA9IElXTF9MRUdBQ1lfVEFCTEVfQ09VTlQ7CkBAIC0xMDM2LDcgKzEwMDQsNyBAQAogLyoKICAqIEZpbmQgY29ycmVjdCB0aHJvdWdocHV0IHRhYmxlIGZvciBnaXZlbiBtb2RlIG9mIG1vZHVsYXRpb24KICAqLwotc3RhdGljIHZvaWQgcnNfZ2V0X2V4cGVjdGVkX3RwdF90YWJsZShzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKK3N0YXRpYyB2b2lkIHJzX3NldF9leHBlY3RlZF90cHRfdGFibGUoc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9zdGEsCiAJCQkJICAgICAgc3RydWN0IGl3bDQ5NjVfc2NhbGVfdGJsX2luZm8gKnRibCkKIHsKIAlpZiAoaXNfbGVnYWN5KHRibC0+bHFfdHlwZSkpIHsKQEAgLTEwNTUsNyArMTAyMyw3IEBACiAJCWVsc2UKIAkJCXRibC0+ZXhwZWN0ZWRfdHB0ID0gZXhwZWN0ZWRfdHB0X3Npc28yME1IejsKIAotCX0gZWxzZSBpZiAoaXNfbWltbyh0YmwtPmxxX3R5cGUpKSB7CisJfSBlbHNlIGlmIChpc19taW1vKHRibC0+bHFfdHlwZSkpIHsgLyogRklYTUU6bmVlZCB0byBzZXBhcmF0ZSBtaW1vMi8zICovCiAJCWlmICh0YmwtPmlzX2ZhdCAmJiAhbHFfc3RhLT5pc19kdXApCiAJCQlpZiAodGJsLT5pc19TR0kpCiAJCQkJdGJsLT5leHBlY3RlZF90cHQgPSBleHBlY3RlZF90cHRfbWltbzQwTUh6U0dJOwpAQCAtMTA2OSw3ICsxMDM3LDYgQEAKIAkJdGJsLT5leHBlY3RlZF90cHQgPSBleHBlY3RlZF90cHRfRzsKIH0KIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCiAvKgogICogRmluZCBzdGFydGluZyByYXRlIGZvciBuZXcgInNlYXJjaCIgaGlnaC10aHJvdWdocHV0IG1vZGUgb2YgbW9kdWxhdGlvbi4KICAqIEdvYWwgaXMgdG8gZmluZCBsb3dlc3QgZXhwZWN0ZWQgcmF0ZSAodW5kZXIgcGVyZmVjdCBjb25kaXRpb25zKSB0aGF0IGlzCkBAIC0xMDg1LDcgKzEwNTIsNyBAQAogc3RhdGljIHMzMiByc19nZXRfYmVzdF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKIAkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqdGJsLAkvKiAic2VhcmNoIiAqLwotCQkJICAgIHUxNiByYXRlX21hc2ssIHM4IGluZGV4LCBzOCByYXRlKQorCQkJICAgIHUxNiByYXRlX21hc2ssIHM4IGluZGV4KQogewogCS8qICJhY3RpdmUiIHZhbHVlcyAqLwogCXN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvICphY3RpdmVfdGJsID0KQEAgLTEwOTgsMTEgKzEwNjUsMTMgQEAKIAogCXMzMiBuZXdfcmF0ZSwgaGlnaCwgbG93LCBzdGFydF9oaTsKIAl1MTYgaGlnaF9sb3c7CisJczggcmF0ZSA9IGluZGV4OwogCiAJbmV3X3JhdGUgPSBoaWdoID0gbG93ID0gc3RhcnRfaGkgPSBJV0xfUkFURV9JTlZBTElEOwogCiAJZm9yICg7IDspIHsKLQkJaGlnaF9sb3cgPSByc19nZXRfYWRqYWNlbnRfcmF0ZShyYXRlLCByYXRlX21hc2ssIHRibC0+bHFfdHlwZSk7CisJCWhpZ2hfbG93ID0gcnNfZ2V0X2FkamFjZW50X3JhdGUocHJpdiwgcmF0ZSwgcmF0ZV9tYXNrLAorCQkJCQkJdGJsLT5scV90eXBlKTsKIAogCQlsb3cgPSBoaWdoX2xvdyAmIDB4ZmY7CiAJCWhpZ2ggPSAoaGlnaF9sb3cgPj4gOCkgJiAweGZmOwpAQCAtMTE2OSwyMyArMTEzOCwxNiBAQAogCiAJcmV0dXJuIG5ld19yYXRlOwogfQotI2VuZGlmCQkJCS8qIENPTkZJR19JV0w0OTY1X0hUICovCi0KLXN0YXRpYyBpbmxpbmUgdTggcnNfaXNfYm90aF9hbnRfc3VwcCh1OCB2YWxpZF9hbnRlbm5hKQotewotCXJldHVybiAocnNfaXNfYW50X2Nvbm5lY3RlZCh2YWxpZF9hbnRlbm5hLCBBTlRfQk9USCkpOwotfQogCiAvKgogICogU2V0IHVwIHNlYXJjaCB0YWJsZSBmb3IgTUlNTwogICovCi1zdGF0aWMgaW50IHJzX3N3aXRjaF90b19taW1vKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgcnNfc3dpdGNoX3RvX21pbW8yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9zdGEsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiwKIAkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkgICAgIHN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvICp0YmwsIGludCBpbmRleCkKIHsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogCXUxNiByYXRlX21hc2s7CiAJczMyIHJhdGU7CiAJczggaXNfZ3JlZW4gPSBscV9zdGEtPmlzX2dyZWVuOwpAQCAtMTE5NCwyNiArMTE1NiwyNyBAQAogCSAgICAhc3RhLT5odF9pbmZvLmh0X3N1cHBvcnRlZCkKIAkJcmV0dXJuIC0xOwogCi0JSVdMX0RFQlVHX0hUKCJMUTogdHJ5IHRvIHN3aXRjaCB0byBNSU1PXG4iKTsKLQl0YmwtPmxxX3R5cGUgPSBMUV9NSU1POwotCXJzX2dldF9zdXBwb3J0ZWRfcmF0ZXMobHFfc3RhLCBOVUxMLCB0YmwtPmxxX3R5cGUsCi0JCQkJJnJhdGVfbWFzayk7Ci0KIAlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcudHhfbWltb19wc19tb2RlID09IElXTF9NSU1PX1BTX1NUQVRJQykKIAkJcmV0dXJuIC0xOwogCiAJLyogTmVlZCBib3RoIFR4IGNoYWlucy9hbnRlbm5hcyB0byBzdXBwb3J0IE1JTU8gKi8KLQlpZiAoIXJzX2lzX2JvdGhfYW50X3N1cHAobHFfc3RhLT5hbnRlbm5hKSkKKwlpZiAocHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPCAyKQogCQlyZXR1cm4gLTE7CiAKKwlJV0xfREVCVUdfUkFURSgiTFE6IHRyeSB0byBzd2l0Y2ggdG8gTUlNTzJcbiIpOworCisJdGJsLT5scV90eXBlID0gTFFfTUlNTzI7CiAJdGJsLT5pc19kdXAgPSBscV9zdGEtPmlzX2R1cDsKIAl0YmwtPmFjdGlvbiA9IDA7CisJcmF0ZV9tYXNrID0gbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZTsKKwogCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zdXBwb3J0ZWRfY2hhbl93aWR0aAotCSAgICA9PSBJV0xfQ0hBTk5FTF9XSURUSF80ME1IWikKKwkJCQkJPT0gSVdMX0NIQU5ORUxfV0lEVEhfNDBNSFopCiAJCXRibC0+aXNfZmF0ID0gMTsKIAllbHNlCiAJCXRibC0+aXNfZmF0ID0gMDsKIAorCS8qIEZJWE1FOiAtIGRvbid0IHRvZ2dsZSBTR0kgaGVyZQogCWlmICh0YmwtPmlzX2ZhdCkgewogCQlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYgSFRfU0hPUlRfR0lfNDBNSFpfT05MWSkKIAkJCXRibC0+aXNfU0dJID0gMTsKQEAgLTEyMjMsMjIgKzExODYsMjQgQEAKIAkJdGJsLT5pc19TR0kgPSAxOwogCWVsc2UKIAkJdGJsLT5pc19TR0kgPSAwOworCSovCiAKLQlyc19nZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgdGJsKTsKKwlyc19zZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgdGJsKTsKIAotCXJhdGUgPSByc19nZXRfYmVzdF9yYXRlKHByaXYsIGxxX3N0YSwgdGJsLCByYXRlX21hc2ssIGluZGV4LCBpbmRleCk7CisJcmF0ZSA9IHJzX2dldF9iZXN0X3JhdGUocHJpdiwgbHFfc3RhLCB0YmwsIHJhdGVfbWFzaywgaW5kZXgpOwogCi0JSVdMX0RFQlVHX0hUKCJMUTogTUlNTyBiZXN0IHJhdGUgJWQgbWFzayAlWFxuIiwgcmF0ZSwgcmF0ZV9tYXNrKTsKLQlpZiAoKHJhdGUgPT0gSVdMX1JBVEVfSU5WQUxJRCkgfHwgISgoMSA8PCByYXRlKSAmIHJhdGVfbWFzaykpCisJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PMiBiZXN0IHJhdGUgJWQgbWFzayAlWFxuIiwgcmF0ZSwgcmF0ZV9tYXNrKTsKKworCWlmICgocmF0ZSA9PSBJV0xfUkFURV9JTlZBTElEKSB8fCAhKCgxIDw8IHJhdGUpICYgcmF0ZV9tYXNrKSkgeworCQlJV0xfREVCVUdfUkFURSgiQ2FuJ3Qgc3dpdGNoIHdpdGggaW5kZXggJWQgcmF0ZSBtYXNrICV4XG4iLAorCQkJCQkJcmF0ZSwgcmF0ZV9tYXNrKTsKIAkJcmV0dXJuIC0xOwotCXJzX21jc19mcm9tX3RibCgmdGJsLT5jdXJyZW50X3JhdGUsIHRibCwgcmF0ZSwgaXNfZ3JlZW4pOworCX0KKwl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIHJhdGUsIGlzX2dyZWVuKTsKIAotCUlXTF9ERUJVR19IVCgiTFE6IFN3aXRjaCB0byBuZXcgbWNzICVYIGluZGV4IGlzIGdyZWVuICVYXG4iLAotCQkgICAgIHRibC0+Y3VycmVudF9yYXRlLnJhdGVfbl9mbGFncywgaXNfZ3JlZW4pOworCUlXTF9ERUJVR19SQVRFKCJMUTogU3dpdGNoIHRvIG5ldyBtY3MgJVggaW5kZXggaXMgZ3JlZW4gJVhcbiIsCisJCSAgICAgdGJsLT5jdXJyZW50X3JhdGUsIGlzX2dyZWVuKTsKIAlyZXR1cm4gMDsKLSNlbHNlCi0JcmV0dXJuIC0xOwotI2VuZGlmCS8qQ09ORklHX0lXTDQ5NjVfSFQgKi8KIH0KIAogLyoKQEAgLTEyNTAsMjEgKzEyMTUsMjAgQEAKIAkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkgICAgIHN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvICp0YmwsIGludCBpbmRleCkKIHsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogCXUxNiByYXRlX21hc2s7CiAJdTggaXNfZ3JlZW4gPSBscV9zdGEtPmlzX2dyZWVuOwogCXMzMiByYXRlOwogCi0JSVdMX0RFQlVHX0hUKCJMUTogdHJ5IHRvIHN3aXRjaCB0byBTSVNPXG4iKTsKIAlpZiAoIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1NVUFBPUlRfSFRfTU9ERSkgfHwKIAkgICAgIXN0YS0+aHRfaW5mby5odF9zdXBwb3J0ZWQpCiAJCXJldHVybiAtMTsKIAorCUlXTF9ERUJVR19SQVRFKCJMUTogdHJ5IHRvIHN3aXRjaCB0byBTSVNPXG4iKTsKKwogCXRibC0+aXNfZHVwID0gbHFfc3RhLT5pc19kdXA7CiAJdGJsLT5scV90eXBlID0gTFFfU0lTTzsKIAl0YmwtPmFjdGlvbiA9IDA7Ci0JcnNfZ2V0X3N1cHBvcnRlZF9yYXRlcyhscV9zdGEsIE5VTEwsIHRibC0+bHFfdHlwZSwKLQkJCQkmcmF0ZV9tYXNrKTsKKwlyYXRlX21hc2sgPSBscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGU7CiAKIAlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuc3VwcG9ydGVkX2NoYW5fd2lkdGgKIAkgICAgPT0gSVdMX0NIQU5ORUxfV0lEVEhfNDBNSFopCkBAIC0xMjcyLDYgKzEyMzYsNyBAQAogCWVsc2UKIAkJdGJsLT5pc19mYXQgPSAwOwogCisJLyogRklYTUU6IC0gZG9uJ3QgdG9nZ2xlIFNHSSBoZXJlCiAJaWYgKHRibC0+aXNfZmF0KSB7CiAJCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJiBIVF9TSE9SVF9HSV80ME1IWl9PTkxZKQogCQkJdGJsLT5pc19TR0kgPSAxOwpAQCAtMTI4MSwyNyArMTI0NiwyNCBAQAogCQl0YmwtPmlzX1NHSSA9IDE7CiAJZWxzZQogCQl0YmwtPmlzX1NHSSA9IDA7CisJKi8KIAogCWlmIChpc19ncmVlbikKLQkJdGJsLT5pc19TR0kgPSAwOworCQl0YmwtPmlzX1NHSSA9IDA7IC8qMTFuIHNwZWM6IG5vIFNHSSBpbiBTSVNPK0dyZWVuZmllbGQqLwogCi0JcnNfZ2V0X2V4cGVjdGVkX3RwdF90YWJsZShscV9zdGEsIHRibCk7Ci0JcmF0ZSA9IHJzX2dldF9iZXN0X3JhdGUocHJpdiwgbHFfc3RhLCB0YmwsIHJhdGVfbWFzaywgaW5kZXgsIGluZGV4KTsKKwlyc19zZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgdGJsKTsKKwlyYXRlID0gcnNfZ2V0X2Jlc3RfcmF0ZShwcml2LCBscV9zdGEsIHRibCwgcmF0ZV9tYXNrLCBpbmRleCk7CiAKLQlJV0xfREVCVUdfSFQoIkxROiBnZXQgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CisJSVdMX0RFQlVHX1JBVEUoIkxROiBnZXQgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CiAJaWYgKChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpIHx8ICEoKDEgPDwgcmF0ZSkgJiByYXRlX21hc2spKSB7Ci0JCUlXTF9ERUJVR19IVCgiY2FuIG5vdCBzd2l0Y2ggd2l0aCBpbmRleCAlZCByYXRlIG1hc2sgJXhcbiIsCisJCUlXTF9ERUJVR19SQVRFKCJjYW4gbm90IHN3aXRjaCB3aXRoIGluZGV4ICVkIHJhdGUgbWFzayAleFxuIiwKIAkJCSAgICAgcmF0ZSwgcmF0ZV9tYXNrKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlyc19tY3NfZnJvbV90YmwoJnRibC0+Y3VycmVudF9yYXRlLCB0YmwsIHJhdGUsIGlzX2dyZWVuKTsKLQlJV0xfREVCVUdfSFQoIkxROiBTd2l0Y2ggdG8gbmV3IG1jcyAlWCBpbmRleCBpcyBncmVlbiAlWFxuIiwKLQkJICAgICB0YmwtPmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MsIGlzX2dyZWVuKTsKKwl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIHJhdGUsIGlzX2dyZWVuKTsKKwlJV0xfREVCVUdfUkFURSgiTFE6IFN3aXRjaCB0byBuZXcgbWNzICVYIGluZGV4IGlzIGdyZWVuICVYXG4iLAorCQkgICAgIHRibC0+Y3VycmVudF9yYXRlLCBpc19ncmVlbik7CiAJcmV0dXJuIDA7Ci0jZWxzZQotCXJldHVybiAtMTsKLQotI2VuZGlmCS8qQ09ORklHX0lXTDQ5NjVfSFQgKi8KIH0KIAogLyoKQEAgLTEzMTMsNyArMTI3NSw2IEBACiAJCQkJc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkJaW50IGluZGV4KQogewotCWludCByZXQgPSAwOwogCXN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvICp0YmwgPQogCSAgICAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKIAlzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqc2VhcmNoX3RibCA9CkBAIC0xMzIyLDQxICsxMjgzLDM1IEBACiAJdTMyIHN6ID0gKHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbykgLQogCQkgIChzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcmF0ZV9zY2FsZV9kYXRhKSAqIElXTF9SQVRFX0NPVU5UKSk7CiAJdTggc3RhcnRfYWN0aW9uID0gdGJsLT5hY3Rpb247CisJdTggdmFsaWRfdHhfYW50ID0gcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudDsKKwlpbnQgcmV0ID0gMDsKIAogCWZvciAoOyA7KSB7CiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9BTlRFTk5BOgotCQkJSVdMX0RFQlVHX0hUKCJMUSBMZWdhY3kgc3dpdGNoIEFudGVubmFcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgdG9nZ2xlIEFudGVubmFcbiIpOwogCi0JCQlzZWFyY2hfdGJsLT5scV90eXBlID0gTFFfTk9ORTsKIAkJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIrKzsKIAogCQkJLyogRG9uJ3QgY2hhbmdlIGFudGVubmEgaWYgc3VjY2VzcyBoYXMgYmVlbiBncmVhdCAqLwogCQkJaWYgKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA+PSBJV0xfUlNfR09PRF9SQVRJTykKIAkJCQlicmVhazsKIAotCQkJLyogRG9uJ3QgY2hhbmdlIGFudGVubmEgaWYgb3RoZXIgb25lIGlzIG5vdCBjb25uZWN0ZWQgKi8KLQkJCWlmICghcnNfaXNfb3RoZXJfYW50X2Nvbm5lY3RlZChscV9zdGEtPmFudGVubmEsCi0JCQkJCQkJdGJsLT5hbnRlbm5hX3R5cGUpKQotCQkJCWJyZWFrOwotCiAJCQkvKiBTZXQgdXAgc2VhcmNoIHRhYmxlIHRvIHRyeSBvdGhlciBhbnRlbm5hICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CiAKLQkJCXJzX3RvZ2dsZV9hbnRlbm5hKCYoc2VhcmNoX3RibC0+Y3VycmVudF9yYXRlKSwKLQkJCQkJICAgc2VhcmNoX3RibCk7Ci0JCQlyc19nZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgc2VhcmNoX3RibCk7Ci0JCQlscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsID0gMTsKLQkJCWdvdG8gb3V0OwotCisJCQlpZiAocnNfdG9nZ2xlX2FudGVubmEodmFsaWRfdHhfYW50LAorCQkJCSZzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUsIHNlYXJjaF90YmwpKSB7CisJCQkJbHFfc3RhLT5zZWFyY2hfYmV0dGVyX3RibCA9IDE7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9TSVNPOgotCQkJSVdMX0RFQlVHX0hUKCJMUTogTGVnYWN5IHN3aXRjaCB0byBTSVNPXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKCJMUTogTGVnYWN5IHN3aXRjaCB0byBTSVNPXG4iKTsKIAogCQkJLyogU2V0IHVwIHNlYXJjaCB0YWJsZSB0byB0cnkgU0lTTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwotCQkJc2VhcmNoX3RibC0+bHFfdHlwZSA9IExRX1NJU087CiAJCQlzZWFyY2hfdGJsLT5pc19TR0kgPSAwOwotCQkJc2VhcmNoX3RibC0+aXNfZmF0ID0gMDsKIAkJCXJldCA9IHJzX3N3aXRjaF90b19zaXNvKHByaXYsIGxxX3N0YSwgY29uZiwgc3RhLAogCQkJCQkJIHNlYXJjaF90YmwsIGluZGV4KTsKIAkJCWlmICghcmV0KSB7CkBAIC0xMzY2LDE2ICsxMzIxLDE1IEBACiAJCQl9CiAKIAkJCWJyZWFrOwotCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU86Ci0JCQlJV0xfREVCVUdfSFQoIkxROiBMZWdhY3kgc3dpdGNoIE1JTU9cbiIpOworCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yOgorCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgc3dpdGNoIHRvIE1JTU8yXG4iKTsKIAogCQkJLyogU2V0IHVwIHNlYXJjaCB0YWJsZSB0byB0cnkgTUlNTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwotCQkJc2VhcmNoX3RibC0+bHFfdHlwZSA9IExRX01JTU87CiAJCQlzZWFyY2hfdGJsLT5pc19TR0kgPSAwOwotCQkJc2VhcmNoX3RibC0+aXNfZmF0ID0gMDsKLQkJCXNlYXJjaF90YmwtPmFudGVubmFfdHlwZSA9IEFOVF9CT1RIOwotCQkJcmV0ID0gcnNfc3dpdGNoX3RvX21pbW8ocHJpdiwgbHFfc3RhLCBjb25mLCBzdGEsCisJCQlzZWFyY2hfdGJsLT5hbnRfdHlwZSA9IEFOVF9BQjsvKkZJWE1FOlJTKi8KKwkJCQkvKkZJWE1FOlJTOm5lZWQgdG8gY2hlY2sgYW50IHZhbGlkaXR5Ki8KKwkJCXJldCA9IHJzX3N3aXRjaF90b19taW1vMihwcml2LCBscV9zdGEsIGNvbmYsIHN0YSwKIAkJCQkJCSBzZWFyY2hfdGJsLCBpbmRleCk7CiAJCQlpZiAoIXJldCkgewogCQkJCWxxX3N0YS0+c2VhcmNoX2JldHRlcl90YmwgPSAxOwpAQCAtMTM4NSw3ICsxMzM5LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXRibC0+YWN0aW9uKys7Ci0JCWlmICh0YmwtPmFjdGlvbiA+IElXTF9MRUdBQ1lfU1dJVENIX01JTU8pCisJCWlmICh0YmwtPmFjdGlvbiA+IElXTF9MRUdBQ1lfU1dJVENIX01JTU8yKQogCQkJdGJsLT5hY3Rpb24gPSBJV0xfTEVHQUNZX1NXSVRDSF9BTlRFTk5BOwogCiAJCWlmICh0YmwtPmFjdGlvbiA9PSBzdGFydF9hY3Rpb24pCkBAIC0xMzk2LDcgKzEzNTAsNyBAQAogCiAgb3V0OgogCXRibC0+YWN0aW9uKys7Ci0JaWYgKHRibC0+YWN0aW9uID4gSVdMX0xFR0FDWV9TV0lUQ0hfTUlNTykKKwlpZiAodGJsLT5hY3Rpb24gPiBJV0xfTEVHQUNZX1NXSVRDSF9NSU1PMikKIAkJdGJsLT5hY3Rpb24gPSBJV0xfTEVHQUNZX1NXSVRDSF9BTlRFTk5BOwogCXJldHVybiAwOwogCkBAIC0xNDExLDcgKzEzNjUsNiBAQAogCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCQkgaW50IGluZGV4KQogewotCWludCByZXQ7CiAJdTggaXNfZ3JlZW4gPSBscV9zdGEtPmlzX2dyZWVuOwogCXN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvICp0YmwgPQogCSAgICAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKQEAgLTE0MjEsMzUgKzEzNzQsMzAgQEAKIAl1MzIgc3ogPSAoc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvKSAtCiAJCSAgKHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9yYXRlX3NjYWxlX2RhdGEpICogSVdMX1JBVEVfQ09VTlQpKTsKIAl1OCBzdGFydF9hY3Rpb24gPSB0YmwtPmFjdGlvbjsKKwl1OCB2YWxpZF90eF9hbnQgPSBwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50OworCWludCByZXQ7CiAKIAlmb3IgKDs7KSB7CiAJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIrKzsKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewogCQljYXNlIElXTF9TSVNPX1NXSVRDSF9BTlRFTk5BOgotCQkJSVdMX0RFQlVHX0hUKCJMUTogU0lTTyBTV0lUQ0ggQU5URU5OQSBTSVNPXG4iKTsKLQkJCXNlYXJjaF90YmwtPmxxX3R5cGUgPSBMUV9OT05FOworCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTSVNPIHRvZ2dsZSBBbnRlbm5hXG4iKTsKIAkJCWlmICh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPj0gSVdMX1JTX0dPT0RfUkFUSU8pCiAJCQkJYnJlYWs7Ci0JCQlpZiAoIXJzX2lzX290aGVyX2FudF9jb25uZWN0ZWQobHFfc3RhLT5hbnRlbm5hLAotCQkJCQkJICAgICAgIHRibC0+YW50ZW5uYV90eXBlKSkKLQkJCQlicmVhazsKIAogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwotCQkJc2VhcmNoX3RibC0+YWN0aW9uID0gSVdMX1NJU09fU1dJVENIX01JTU87Ci0JCQlyc190b2dnbGVfYW50ZW5uYSgmKHNlYXJjaF90YmwtPmN1cnJlbnRfcmF0ZSksCi0JCQkJCSAgIHNlYXJjaF90YmwpOwotCQkJbHFfc3RhLT5zZWFyY2hfYmV0dGVyX3RibCA9IDE7Ci0KLQkJCWdvdG8gb3V0OwotCi0JCWNhc2UgSVdMX1NJU09fU1dJVENIX01JTU86Ci0JCQlJV0xfREVCVUdfSFQoIkxROiBTSVNPIFNXSVRDSCBUTyBNSU1PIEZST00gU0lTT1xuIik7CisJCQlpZiAocnNfdG9nZ2xlX2FudGVubmEodmFsaWRfdHhfYW50LAorCQkJCSAgICAgICAmc2VhcmNoX3RibC0+Y3VycmVudF9yYXRlLCBzZWFyY2hfdGJsKSkgeworCQkJCWxxX3N0YS0+c2VhcmNoX2JldHRlcl90YmwgPSAxOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSVdMX1NJU09fU1dJVENIX01JTU8yOgorCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTSVNPIHN3aXRjaCB0byBNSU1PMlxuIik7CiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7Ci0JCQlzZWFyY2hfdGJsLT5scV90eXBlID0gTFFfTUlNTzsKIAkJCXNlYXJjaF90YmwtPmlzX1NHSSA9IDA7Ci0JCQlzZWFyY2hfdGJsLT5pc19mYXQgPSAwOwotCQkJc2VhcmNoX3RibC0+YW50ZW5uYV90eXBlID0gQU5UX0JPVEg7Ci0JCQlyZXQgPSByc19zd2l0Y2hfdG9fbWltbyhwcml2LCBscV9zdGEsIGNvbmYsIHN0YSwKKwkJCXNlYXJjaF90YmwtPmFudF90eXBlID0gQU5UX0FCOyAvKkZJWE1FOlJTKi8KKwkJCXJldCA9IHJzX3N3aXRjaF90b19taW1vMihwcml2LCBscV9zdGEsIGNvbmYsIHN0YSwKIAkJCQkJCSBzZWFyY2hfdGJsLCBpbmRleCk7CiAJCQlpZiAoIXJldCkgewogCQkJCWxxX3N0YS0+c2VhcmNoX2JldHRlcl90YmwgPSAxOwpAQCAtMTQ1NywyOSArMTQwNSwzNCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX0dJOgotCQkJSVdMX0RFQlVHX0hUKCJMUTogU0lTTyBTV0lUQ0ggVE8gR0lcbiIpOworCQkJaWYgKCF0YmwtPmlzX2ZhdCAmJgorCQkJCSEocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYKKwkJCQkJCUhUX1NIT1JUX0dJXzIwTUhaKSkKKwkJCQlicmVhazsKKwkJCWlmICh0YmwtPmlzX2ZhdCAmJgorCQkJCSEocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYKKwkJCQkJCUhUX1NIT1JUX0dJXzQwTUhaKSkKKwkJCQlicmVhazsKKworCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTSVNPIHRvZ2dsZSBTR0kvTkdJXG4iKTsKIAogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwotCQkJc2VhcmNoX3RibC0+YWN0aW9uID0gMDsKLQkJCWlmIChzZWFyY2hfdGJsLT5pc19TR0kpCi0JCQkJc2VhcmNoX3RibC0+aXNfU0dJID0gMDsKLQkJCWVsc2UgaWYgKCFpc19ncmVlbikKLQkJCQlzZWFyY2hfdGJsLT5pc19TR0kgPSAxOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQkJbHFfc3RhLT5zZWFyY2hfYmV0dGVyX3RibCA9IDE7Ci0JCQlpZiAoKHRibC0+bHFfdHlwZSA9PSBMUV9TSVNPKSAmJgotCQkJICAgICh0YmwtPmlzX1NHSSkpIHsKLQkJCQlzMzIgdHB0ID0gbHFfc3RhLT5sYXN0X3RwdCAvIDEwMDsKLQkJCQlpZiAoKCghdGJsLT5pc19mYXQpICYmCi0JCQkJICAgICAodHB0ID49IGV4cGVjdGVkX3RwdF9zaXNvMjBNSHpbaW5kZXhdKSkgfHwKLQkJCQkgICAgKCh0YmwtPmlzX2ZhdCkgJiYKLQkJCQkgICAgICh0cHQgPj0gZXhwZWN0ZWRfdHB0X3Npc280ME1IeltpbmRleF0pKSkKLQkJCQkJbHFfc3RhLT5zZWFyY2hfYmV0dGVyX3RibCA9IDA7CisJCQlpZiAoaXNfZ3JlZW4pIHsKKwkJCQlpZiAoIXRibC0+aXNfU0dJKQorCQkJCQlicmVhazsKKwkJCQllbHNlCisJCQkJCUlXTF9FUlJPUigiU0dJIHdhcyBzZXQgaW4gR0YrU0lTT1xuIik7CiAJCQl9Ci0JCQlyc19nZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgc2VhcmNoX3RibCk7Ci0JCQlyc19tY3NfZnJvbV90YmwoJnNlYXJjaF90YmwtPmN1cnJlbnRfcmF0ZSwKLQkJCQkJICAgICBzZWFyY2hfdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCQkJc2VhcmNoX3RibC0+aXNfU0dJID0gIXRibC0+aXNfU0dJOworCQkJcnNfc2V0X2V4cGVjdGVkX3RwdF90YWJsZShscV9zdGEsIHNlYXJjaF90YmwpOworCQkJaWYgKHRibC0+aXNfU0dJKSB7CisJCQkJczMyIHRwdCA9IGxxX3N0YS0+bGFzdF90cHQgLyAxMDA7CisJCQkJaWYgKHRwdCA+PSBzZWFyY2hfdGJsLT5leHBlY3RlZF90cHRbaW5kZXhdKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCXNlYXJjaF90YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCgKKwkJCQkJCXNlYXJjaF90YmwsIGluZGV4LCBpc19ncmVlbik7CisJCQlscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsID0gMTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXRibC0+YWN0aW9uKys7CkBAIC0xNTA3LDcgKzE0NjAsNiBAQAogCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCQkgaW50IGluZGV4KQogewotCWludCByZXQ7CiAJczggaXNfZ3JlZW4gPSBscV9zdGEtPmlzX2dyZWVuOwogCXN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvICp0YmwgPQogCSAgICAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKQEAgLTE1MTYsMjQgKzE0NjgsMjQgQEAKIAl1MzIgc3ogPSAoc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvKSAtCiAJCSAgKHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9yYXRlX3NjYWxlX2RhdGEpICogSVdMX1JBVEVfQ09VTlQpKTsKIAl1OCBzdGFydF9hY3Rpb24gPSB0YmwtPmFjdGlvbjsKKwkvKnU4IHZhbGlkX3R4X2FudCA9IHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQ7Ki8KKwlpbnQgcmV0OwogCiAJZm9yICg7OykgewogCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyKys7CiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKIAkJY2FzZSBJV0xfTUlNT19TV0lUQ0hfQU5URU5OQV9BOgogCQljYXNlIElXTF9NSU1PX1NXSVRDSF9BTlRFTk5BX0I6Ci0JCQlJV0xfREVCVUdfSFQoIkxROiBNSU1PIFNXSVRDSCBUTyBTSVNPXG4iKTsKLQorCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PMiBzd2l0Y2ggdG8gU0lTT1xuIik7CiAKIAkJCS8qIFNldCB1cCBuZXcgc2VhcmNoIHRhYmxlIGZvciBTSVNPICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7Ci0JCQlzZWFyY2hfdGJsLT5scV90eXBlID0gTFFfU0lTTzsKLQkJCXNlYXJjaF90YmwtPmlzX1NHSSA9IDA7Ci0JCQlzZWFyY2hfdGJsLT5pc19mYXQgPSAwOworCisJCQkvKkZJWE1FOlJTOm5lZWQgdG8gY2hlY2sgYW50IHZhbGlkaXR5ICsgQyovCiAJCQlpZiAodGJsLT5hY3Rpb24gPT0gSVdMX01JTU9fU1dJVENIX0FOVEVOTkFfQSkKLQkJCQlzZWFyY2hfdGJsLT5hbnRlbm5hX3R5cGUgPSBBTlRfTUFJTjsKKwkJCQlzZWFyY2hfdGJsLT5hbnRfdHlwZSA9IEFOVF9BOwogCQkJZWxzZQotCQkJCXNlYXJjaF90YmwtPmFudGVubmFfdHlwZSA9IEFOVF9BVVg7CisJCQkJc2VhcmNoX3RibC0+YW50X3R5cGUgPSBBTlRfQjsKIAogCQkJcmV0ID0gcnNfc3dpdGNoX3RvX3Npc28ocHJpdiwgbHFfc3RhLCBjb25mLCBzdGEsCiAJCQkJCQkgc2VhcmNoX3RibCwgaW5kZXgpOwpAQCAtMTU0NCwzNyArMTQ5NiwzNSBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBJV0xfTUlNT19TV0lUQ0hfR0k6Ci0JCQlJV0xfREVCVUdfSFQoIkxROiBNSU1PIFNXSVRDSCBUTyBHSVxuIik7CisJCQlpZiAoIXRibC0+aXNfZmF0ICYmCisJCQkJIShwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJgorCQkJCQkJSFRfU0hPUlRfR0lfMjBNSFopKQorCQkJCWJyZWFrOworCQkJaWYgKHRibC0+aXNfZmF0ICYmCisJCQkJIShwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJgorCQkJCQkJSFRfU0hPUlRfR0lfNDBNSFopKQorCQkJCWJyZWFrOworCisJCQlJV0xfREVCVUdfUkFURSgiTFE6IE1JTU8gdG9nZ2xlIFNHSS9OR0lcbiIpOwogCiAJCQkvKiBTZXQgdXAgbmV3IHNlYXJjaCB0YWJsZSBmb3IgTUlNTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwotCQkJc2VhcmNoX3RibC0+bHFfdHlwZSA9IExRX01JTU87Ci0JCQlzZWFyY2hfdGJsLT5hbnRlbm5hX3R5cGUgPSBBTlRfQk9USDsKLQkJCXNlYXJjaF90YmwtPmFjdGlvbiA9IDA7Ci0JCQlpZiAoc2VhcmNoX3RibC0+aXNfU0dJKQotCQkJCXNlYXJjaF90YmwtPmlzX1NHSSA9IDA7Ci0JCQllbHNlCi0JCQkJc2VhcmNoX3RibC0+aXNfU0dJID0gMTsKLQkJCWxxX3N0YS0+c2VhcmNoX2JldHRlcl90YmwgPSAxOwotCisJCQlzZWFyY2hfdGJsLT5pc19TR0kgPSAhdGJsLT5pc19TR0k7CisJCQlyc19zZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgc2VhcmNoX3RibCk7CiAJCQkvKgogCQkJICogSWYgYWN0aXZlIHRhYmxlIGFscmVhZHkgdXNlcyB0aGUgZmFzdGVzdCBwb3NzaWJsZQogCQkJICogbW9kdWxhdGlvbiAoZHVhbCBzdHJlYW0gd2l0aCBzaG9ydCBndWFyZCBpbnRlcnZhbCksCiAJCQkgKiBhbmQgaXQncyB3b3JraW5nIHdlbGwsIHRoZXJlJ3Mgbm8gbmVlZCB0byBsb29rCiAJCQkgKiBmb3IgYSBiZXR0ZXIgdHlwZSBvZiBtb2R1bGF0aW9uIQogCQkJICovCi0JCQlpZiAoKHRibC0+bHFfdHlwZSA9PSBMUV9NSU1PKSAmJgotCQkJICAgICh0YmwtPmlzX1NHSSkpIHsKKwkJCWlmICh0YmwtPmlzX1NHSSkgewogCQkJCXMzMiB0cHQgPSBscV9zdGEtPmxhc3RfdHB0IC8gMTAwOwotCQkJCWlmICgoKCF0YmwtPmlzX2ZhdCkgJiYKLQkJCQkgICAgICh0cHQgPj0gZXhwZWN0ZWRfdHB0X21pbW8yME1IeltpbmRleF0pKSB8fAotCQkJCSAgICAoKHRibC0+aXNfZmF0KSAmJgotCQkJCSAgICAgKHRwdCA+PSBleHBlY3RlZF90cHRfbWltbzQwTUh6W2luZGV4XSkpKQotCQkJCQlscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsID0gMDsKKwkJCQlpZiAodHB0ID49IHNlYXJjaF90YmwtPmV4cGVjdGVkX3RwdFtpbmRleF0pCisJCQkJCWJyZWFrOwogCQkJfQotCQkJcnNfZ2V0X2V4cGVjdGVkX3RwdF90YWJsZShscV9zdGEsIHNlYXJjaF90YmwpOwotCQkJcnNfbWNzX2Zyb21fdGJsKCZzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUsCi0JCQkJCSAgICAgc2VhcmNoX3RibCwgaW5kZXgsIGlzX2dyZWVuKTsKKwkJCXNlYXJjaF90YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCgKKwkJCQkJCXNlYXJjaF90YmwsIGluZGV4LCBpc19ncmVlbik7CisJCQlscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsID0gMTsKIAkJCWdvdG8gb3V0OwogCiAJCX0KQEAgLTE2MDgsNyArMTU1OCw5IEBACiAJaW50IGk7CiAJaW50IGFjdGl2ZV90Ymw7CiAJaW50IGZsdXNoX2ludGVydmFsX3Bhc3NlZCA9IDA7CisJc3RydWN0IGl3bF9wcml2ICpwcml2OwogCisJcHJpdiA9IGxxX3N0YS0+ZHJ2OwogCWFjdGl2ZV90YmwgPSBscV9zdGEtPmFjdGl2ZV90Ymw7CiAKIAl0YmwgPSAmKGxxX3N0YS0+bHFfaW5mb1thY3RpdmVfdGJsXSk7CkBAIC0xNjIzLDkgKzE1NzUsNiBAQAogCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykobHFfc3RhLT5mbHVzaF90aW1lciArCiAJCQkJCUlXTF9SQVRFX1NDQUxFX0ZMVVNIX0lOVFZMKSk7CiAKLQkJLyogRm9yIG5vdywgZGlzYWJsZSB0aGUgZWxhcHNlZCB0aW1lIGNyaXRlcmlvbiAqLwotCQlmbHVzaF9pbnRlcnZhbF9wYXNzZWQgPSAwOwotCiAJCS8qCiAJCSAqIENoZWNrIGlmIHdlIHNob3VsZCBhbGxvdyBzZWFyY2ggZm9yIG5ldyBtb2R1bGF0aW9uIG1vZGUuCiAJCSAqIElmIG1hbnkgZnJhbWVzIGhhdmUgZmFpbGVkIG9yIHN1Y2NlZWRlZCwgb3Igd2UndmUgdXNlZApAQCAtMTYzOCw3ICsxNTg3LDcgQEAKIAkJICAgIChscV9zdGEtPnRvdGFsX3N1Y2Nlc3MgPiBscV9zdGEtPm1heF9zdWNjZXNzX2xpbWl0KSB8fAogCQkgICAgKCghbHFfc3RhLT5zZWFyY2hfYmV0dGVyX3RibCkgJiYgKGxxX3N0YS0+Zmx1c2hfdGltZXIpCiAJCSAgICAgJiYgKGZsdXNoX2ludGVydmFsX3Bhc3NlZCkpKSB7Ci0JCQlJV0xfREVCVUdfSFQoIkxROiBzdGF5IGlzIGV4cGlyZWQgJWQgJWQgJWRcbjoiLAorCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBzdGF5IGlzIGV4cGlyZWQgJWQgJWQgJWRcbjoiLAogCQkJCSAgICAgbHFfc3RhLT50b3RhbF9mYWlsZWQsCiAJCQkJICAgICBscV9zdGEtPnRvdGFsX3N1Y2Nlc3MsCiAJCQkJICAgICBmbHVzaF9pbnRlcnZhbF9wYXNzZWQpOwpAQCAtMTY2MSw3ICsxNjEwLDcgQEAKIAkJCSAgICBscV9zdGEtPnRhYmxlX2NvdW50X2xpbWl0KSB7CiAJCQkJbHFfc3RhLT50YWJsZV9jb3VudCA9IDA7CiAKLQkJCQlJV0xfREVCVUdfSFQoIkxROiBzdGF5IGluIHRhYmxlIGNsZWFyIHdpblxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBzdGF5IGluIHRhYmxlIGNsZWFyIHdpblxuIik7CiAJCQkJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspCiAJCQkJCXJzX3JhdGVfc2NhbGVfY2xlYXJfd2luZG93KAogCQkJCQkJJih0YmwtPndpbltpXSkpOwpAQCAtMTY5OSwyNCArMTY0OCwyMyBAQAogCWludCBoaWdoX3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOwogCXUzMiBmYWlsX2NvdW50OwogCXM4IHNjYWxlX2FjdGlvbiA9IDA7Ci0JdTE2IGZjLCByYXRlX21hc2s7CisJX19sZTE2IGZjOworCXUxNiByYXRlX21hc2s7CiAJdTggdXBkYXRlX2xxID0gMDsKIAlzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YTsKIAlzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqdGJsLCAqdGJsMTsKIAl1MTYgcmF0ZV9zY2FsZV9pbmRleF9tc2sgPSAwOwotCXN0cnVjdCBpd2w0OTY1X3JhdGUgbWNzX3JhdGU7CisJdTMyIHJhdGU7CiAJdTggaXNfZ3JlZW4gPSAwOwogCXU4IGFjdGl2ZV90YmwgPSAwOwogCXU4IGRvbmVfc2VhcmNoID0gMDsKIAl1MTYgaGlnaF9sb3c7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKKwlzMzIgc3I7CiAJdTggdGlkID0gTUFYX1RJRF9DT1VOVDsKLQlfX2xlMTYgKnFjOwotI2VuZGlmCiAKIAlJV0xfREVCVUdfUkFURSgicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKIAkJLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgYnJvYWRjYXN0L211bHRpY2FzdCBkYXRhIHVzaW5nCiAJCSAqIGxvd2VzdCByYXRlLiAqLwpAQCAtMTcyNywxOSArMTY3NSwxMCBAQAogCWlmICghc3RhIHx8ICFzdGEtPnJhdGVfY3RybF9wcml2KQogCQlyZXR1cm47CiAKLQlpZiAoIXByaXYtPmxxX21uZ3IubHFfcmVhZHkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoInN0aWxsIHJhdGUgc2NhbGluZyBub3QgcmVhZHlcbiIpOwotCQlyZXR1cm47Ci0JfQogCWxxX3N0YSA9IChzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKilzdGEtPnJhdGVfY3RybF9wcml2OwogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0cmwoaGRyKTsKLQlpZiAocWMpIHsKLQkJdGlkID0gKHU4KShsZTE2X3RvX2NwdSgqcWMpICYgMHhmKTsKLQkJcnNfdGxfYWRkX3BhY2tldChscV9zdGEsIHRpZCk7Ci0JfQotI2VuZGlmCisJdGlkID0gcnNfdGxfYWRkX3BhY2tldChscV9zdGEsIGhkcik7CisKIAkvKgogCSAqIFNlbGVjdCByYXRlLXNjYWxlIC8gbW9kdWxhdGlvbi1tb2RlIHRhYmxlIHRvIHdvcmsgd2l0aCBpbgogCSAqIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb246ICAic2VhcmNoIiBpZiBzZWFyY2hpbmcgZm9yIGJldHRlcgpAQCAtMTc2MCw4ICsxNjk5LDcgQEAKIAkJICAgICAgIHRibC0+bHFfdHlwZSk7CiAKIAkvKiByYXRlcyBhdmFpbGFibGUgZm9yIHRoaXMgYXNzb2NpYXRpb24sIGFuZCBmb3IgbW9kdWxhdGlvbiBtb2RlICovCi0JcnNfZ2V0X3N1cHBvcnRlZF9yYXRlcyhscV9zdGEsIGhkciwgdGJsLT5scV90eXBlLAotCQkJCSZyYXRlX21hc2spOworCXJhdGVfbWFzayA9IHJzX2dldF9zdXBwb3J0ZWRfcmF0ZXMobHFfc3RhLCBoZHIsIHRibC0+bHFfdHlwZSk7CiAKIAlJV0xfREVCVUdfUkFURSgibWFzayAweCUwNFggXG4iLCByYXRlX21hc2spOwogCkBAIC0xNzgxLDI3ICsxNzE5LDE2IEBACiAJaWYgKCFyYXRlX3NjYWxlX2luZGV4X21zaykKIAkJcmF0ZV9zY2FsZV9pbmRleF9tc2sgPSByYXRlX21hc2s7CiAKLQkvKiBJZiBjdXJyZW50IHJhdGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBvbiBjdXJyZW50IGFzc29jaWF0aW9uLAotCSAqIG9yIHVzZXIgY2hhbmdlZCBwcmVmZXJlbmNlcyBmb3IgcmF0ZXMsIGZpbmQgYSBuZXcgc3VwcG9ydGVkIHJhdGUuICovCi0JaWYgKGluZGV4IDwgMCB8fCAhKCgxIDw8IGluZGV4KSAmIHJhdGVfc2NhbGVfaW5kZXhfbXNrKSkgewotCQlpbmRleCA9IElXTF9JTlZBTElEX1ZBTFVFOwotCQl1cGRhdGVfbHEgPSAxOwotCi0JCS8qIGdldCB0aGUgaGlnaGVzdCBhdmFpbGFibGUgcmF0ZSAqLwotCQlmb3IgKGkgPSAwOyBpIDw9IElXTF9SQVRFX0NPVU5UOyBpKyspIHsKLQkJCWlmICgoMSA8PCBpKSAmIHJhdGVfc2NhbGVfaW5kZXhfbXNrKQotCQkJCWluZGV4ID0gaTsKLQkJfQotCi0JCWlmIChpbmRleCA9PSBJV0xfSU5WQUxJRF9WQUxVRSkgewotCQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgZmluZCBhIHN1aXRhYmxlIHJhdGVcbiIpOwotCQkJcmV0dXJuOwotCQl9CisJaWYgKCEoKDEgPDwgaW5kZXgpICYgcmF0ZV9zY2FsZV9pbmRleF9tc2spKSB7CisJCUlXTF9FUlJPUigiQ3VycmVudCBSYXRlIGlzIG5vdCB2YWxpZFxuIik7CisJCXJldHVybjsKIAl9CiAKIAkvKiBHZXQgZXhwZWN0ZWQgdGhyb3VnaHB1dCB0YWJsZSBhbmQgaGlzdG9yeSB3aW5kb3cgZm9yIGN1cnJlbnQgcmF0ZSAqLwotCWlmICghdGJsLT5leHBlY3RlZF90cHQpCi0JCXJzX2dldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCB0YmwpOworCWlmICghdGJsLT5leHBlY3RlZF90cHQpIHsKKwkJSVdMX0VSUk9SKCJ0YmwtPmV4cGVjdGVkX3RwdCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuOworCX0KIAogCXdpbmRvdyA9ICYodGJsLT53aW5baW5kZXhdKTsKIApAQCAtMTgxMywxMCArMTc0MCw5IEBACiAJICogaW4gY3VycmVudCBhc3NvY2lhdGlvbiAodXNlIG5ldyByYXRlIGZvdW5kIGFib3ZlKS4KIAkgKi8KIAlmYWlsX2NvdW50ID0gd2luZG93LT5jb3VudGVyIC0gd2luZG93LT5zdWNjZXNzX2NvdW50ZXI7Ci0JaWYgKCgoZmFpbF9jb3VudCA8IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSAmJgotCSAgICAgKHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyIDwgSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgpKQotCSAgICB8fCAodGJsLT5leHBlY3RlZF90cHQgPT0gTlVMTCkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoIkxROiBzdGlsbCBiZWxvdyBUSCBzdWNjICVkIHRvdGFsICVkICIKKwlpZiAoKGZhaWxfY291bnQgPCBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCkgJiYKKwkJCSh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA8IElXTF9SQVRFX01JTl9TVUNDRVNTX1RIKSkgeworCQlJV0xfREVCVUdfUkFURSgiTFE6IHN0aWxsIGJlbG93IFRILiBzdWNjPSVkIHRvdGFsPSVkICIKIAkJCSAgICAgICAiZm9yIGluZGV4ICVkXG4iLAogCQkJICAgICAgIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyLCB3aW5kb3ctPmNvdW50ZXIsIGluZGV4KTsKIApAQCAtMTgyNyw0NCArMTc1Myw1MSBAQAogCQkgKiBvciBzZWFyY2ggZm9yIGEgbmV3IG9uZT8gKi8KIAkJcnNfc3RheV9pbl90YWJsZShscV9zdGEpOwogCi0JCS8qIFNldCB1cCBuZXcgcmF0ZSB0YWJsZSBpbiB1Q29kZSwgaWYgbmVlZGVkICovCi0JCWlmICh1cGRhdGVfbHEpIHsKLQkJCXJzX21jc19mcm9tX3RibCgmbWNzX3JhdGUsIHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKLQkJCXJzX2ZpbGxfbGlua19jbWQobHFfc3RhLCAmbWNzX3JhdGUsICZscV9zdGEtPmxxKTsKLQkJCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKLQkJfQogCQlnb3RvIG91dDsKIAogCS8qIEVsc2Ugd2UgaGF2ZSBlbm91Z2ggc2FtcGxlczsgY2FsY3VsYXRlIGVzdGltYXRlIG9mCiAJICogYWN0dWFsIGF2ZXJhZ2UgdGhyb3VnaHB1dCAqLwotCX0gZWxzZQotCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gKgorCX0gZWxzZSB7CisJCS8qRklYTUU6UlMgcmVtb3ZlIHRoaXMgZWxzZSBpZiB3ZSBkb24ndCBnZXQgdGhpcyBlcnJvciovCisJCWlmICh3aW5kb3ctPmF2ZXJhZ2VfdHB0ICE9ICgod2luZG93LT5zdWNjZXNzX3JhdGlvICoKKwkJCQl0YmwtPmV4cGVjdGVkX3RwdFtpbmRleF0gKyA2NCkgLyAxMjgpKSB7CisJCQlJV0xfRVJST1IoImV4cGVjdGVkX3RwdCBzaG91bGQgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQiCisJCQkJCQkJCSIgYnkgbm93XG4iKTsKKwkJCXdpbmRvdy0+YXZlcmFnZV90cHQgPSAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyAqCiAJCQkJCXRibC0+ZXhwZWN0ZWRfdHB0W2luZGV4XSArIDY0KSAvIDEyOCk7CisJCX0KKwl9CiAKIAkvKiBJZiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBiZXR0ZXIgbW9kdWxhdGlvbiBtb2RlLCBjaGVjayBzdWNjZXNzLiAqLwogCWlmIChscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsKSB7Ci0JCWludCBzdWNjZXNzX2xpbWl0ID0gSVdMX1JBVEVfU0NBTEVfU1dJVENIOwogCiAJCS8qIElmIGdvb2Qgc3VjY2VzcywgY29udGludWUgdXNpbmcgdGhlICJzZWFyY2giIG1vZGU7CiAJCSAqIG5vIG5lZWQgdG8gc2VuZCBuZXcgbGluayBxdWFsaXR5IGNvbW1hbmQsIHNpbmNlIHdlJ3JlCiAJCSAqIGNvbnRpbnVpbmcgdG8gdXNlIHRoZSBzZXR1cCB0aGF0IHdlJ3ZlIGJlZW4gdHJ5aW5nLiAqLwotCQlpZiAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA+IHN1Y2Nlc3NfbGltaXQpIHx8Ci0JCSAgICAod2luZG93LT5hdmVyYWdlX3RwdCA+IGxxX3N0YS0+bGFzdF90cHQpKSB7Ci0JCQlpZiAoIWlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKSB7Ci0JCQkJSVdMX0RFQlVHX0hUKCJMUTogd2UgYXJlIHN3aXRjaGluZyB0byBIVCIKLQkJCQkJICAgICAiIHJhdGUgc3VjICVkIGN1cnJlbnQgdHB0ICVkIgotCQkJCQkgICAgICIgb2xkIHRwdCAlZFxuIiwKLQkJCQkJICAgICB3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8sCi0JCQkJCSAgICAgd2luZG93LT5hdmVyYWdlX3RwdCwKLQkJCQkJICAgICBscV9zdGEtPmxhc3RfdHB0KTsKKwkJaWYgKHdpbmRvdy0+YXZlcmFnZV90cHQgPiBscV9zdGEtPmxhc3RfdHB0KSB7CisKKwkJCUlXTF9ERUJVR19SQVRFKCJMUTogU1dJVENISU5HIFRPIENVUlJFTlQgVEFCTEUgIgorCQkJCQkic3VjPSVkIGN1ci10cHQ9JWQgb2xkLXRwdD0lZFxuIiwKKwkJCQkJd2luZG93LT5zdWNjZXNzX3JhdGlvLAorCQkJCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0LAorCQkJCQlscV9zdGEtPmxhc3RfdHB0KTsKKworCQkJaWYgKCFpc19sZWdhY3kodGJsLT5scV90eXBlKSkKIAkJCQlscV9zdGEtPmVuYWJsZV9jb3VudGVyID0gMTsKLQkJCX0KKwogCQkJLyogU3dhcCB0YWJsZXM7ICJzZWFyY2giIGJlY29tZXMgImFjdGl2ZSIgKi8KIAkJCWxxX3N0YS0+YWN0aXZlX3RibCA9IGFjdGl2ZV90Ymw7CiAJCQljdXJyZW50X3RwdCA9IHdpbmRvdy0+YXZlcmFnZV90cHQ7CiAKIAkJLyogRWxzZSBwb29yIHN1Y2Nlc3M7IGdvIGJhY2sgdG8gbW9kZSBpbiAiYWN0aXZlIiB0YWJsZSAqLwogCQl9IGVsc2UgeworCisJCQlJV0xfREVCVUdfUkFURSgiTFE6IEdPSU5HIEJBQ0sgVE8gVEhFIE9MRCBUQUJMRSAiCisJCQkJCSJzdWM9JWQgY3VyLXRwdD0lZCBvbGQtdHB0PSVkXG4iLAorCQkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8sCisJCQkJCXdpbmRvdy0+YXZlcmFnZV90cHQsCisJCQkJCWxxX3N0YS0+bGFzdF90cHQpOworCiAJCQkvKiBOdWxsaWZ5ICJzZWFyY2giIHRhYmxlICovCiAJCQl0YmwtPmxxX3R5cGUgPSBMUV9OT05FOwogCkBAIC0xODczLDEzICsxODA2LDExIEBACiAJCQl0YmwgPSAmKGxxX3N0YS0+bHFfaW5mb1thY3RpdmVfdGJsXSk7CiAKIAkJCS8qIFJldmVydCB0byAiYWN0aXZlIiByYXRlIGFuZCB0aHJvdWdocHV0IGluZm8gKi8KLQkJCWluZGV4ID0gaXdsNDk2NV9od3JhdGVfdG9fcGxjcF9pZHgoCi0JCQkJdGJsLT5jdXJyZW50X3JhdGUucmF0ZV9uX2ZsYWdzKTsKKwkJCWluZGV4ID0gaXdsX2h3cmF0ZV90b19wbGNwX2lkeCh0YmwtPmN1cnJlbnRfcmF0ZSk7CiAJCQljdXJyZW50X3RwdCA9IGxxX3N0YS0+bGFzdF90cHQ7CiAKIAkJCS8qIE5lZWQgdG8gc2V0IHVwIGEgbmV3IHJhdGUgdGFibGUgaW4gdUNvZGUgKi8KIAkJCXVwZGF0ZV9scSA9IDE7Ci0JCQlJV0xfREVCVUdfSFQoIlhYWSBHTyBCQUNLIFRPIE9MRCBUQUJMRVxuIik7CiAJCX0KIAogCQkvKiBFaXRoZXIgd2F5LCB3ZSd2ZSBtYWRlIGEgZGVjaXNpb247IG1vZHVsYXRpb24gbW9kZQpAQCAtMTg5MSwxMSArMTgyMiwxMyBAQAogCiAJLyogKEVsc2UpIG5vdCBpbiBzZWFyY2ggb2YgYmV0dGVyIG1vZHVsYXRpb24gbW9kZSwgdHJ5IGZvciBiZXR0ZXIKIAkgKiBzdGFydGluZyByYXRlLCB3aGlsZSBzdGF5aW5nIGluIHRoaXMgbW9kZS4gKi8KLQloaWdoX2xvdyA9IHJzX2dldF9hZGphY2VudF9yYXRlKGluZGV4LCByYXRlX3NjYWxlX2luZGV4X21zaywKKwloaWdoX2xvdyA9IHJzX2dldF9hZGphY2VudF9yYXRlKHByaXYsIGluZGV4LCByYXRlX3NjYWxlX2luZGV4X21zaywKIAkJCQkJdGJsLT5scV90eXBlKTsKIAlsb3cgPSBoaWdoX2xvdyAmIDB4ZmY7CiAJaGlnaCA9IChoaWdoX2xvdyA+PiA4KSAmIDB4ZmY7CiAKKwlzciA9IHdpbmRvdy0+c3VjY2Vzc19yYXRpbzsKKwogCS8qIENvbGxlY3QgbWVhc3VyZWQgdGhyb3VnaHB1dHMgZm9yIGN1cnJlbnQgYW5kIGFkamFjZW50IHJhdGVzICovCiAJY3VycmVudF90cHQgPSB3aW5kb3ctPmF2ZXJhZ2VfdHB0OwogCWlmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkKQEAgLTE5MDMsMTkgKzE4MzYsMjIgQEAKIAlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEKQogCQloaWdoX3RwdCA9IHRibC0+d2luW2hpZ2hdLmF2ZXJhZ2VfdHB0OwogCi0JLyogQXNzdW1lIHJhdGUgaW5jcmVhc2UgKi8KLQlzY2FsZV9hY3Rpb24gPSAxOworCXNjYWxlX2FjdGlvbiA9IDA7CiAKIAkvKiBUb28gbWFueSBmYWlsdXJlcywgZGVjcmVhc2UgcmF0ZSAqLwotCWlmICgod2luZG93LT5zdWNjZXNzX3JhdGlvIDw9IElXTF9SQVRFX0RFQ1JFQVNFX1RIKSB8fAotCSAgICAoY3VycmVudF90cHQgPT0gMCkpIHsKKwlpZiAoKHNyIDw9IElXTF9SQVRFX0RFQ1JFQVNFX1RIKSB8fCAoY3VycmVudF90cHQgPT0gMCkpIHsKIAkJSVdMX0RFQlVHX1JBVEUoImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgc3VjY2Vzc19yYXRpb1xuIik7CiAJCXNjYWxlX2FjdGlvbiA9IC0xOwogCiAJLyogTm8gdGhyb3VnaHB1dCBtZWFzdXJlZCB5ZXQgZm9yIGFkamFjZW50IHJhdGVzOyB0cnkgaW5jcmVhc2UuICovCiAJfSBlbHNlIGlmICgobG93X3RwdCA9PSBJV0xfSU5WQUxJRF9WQUxVRSkgJiYKLQkJICAgKGhpZ2hfdHB0ID09IElXTF9JTlZBTElEX1ZBTFVFKSkKLQkJc2NhbGVfYWN0aW9uID0gMTsKKwkJICAgKGhpZ2hfdHB0ID09IElXTF9JTlZBTElEX1ZBTFVFKSkgeworCisJCWlmIChoaWdoICE9IElXTF9SQVRFX0lOVkFMSUQgJiYgc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCisJCQlzY2FsZV9hY3Rpb24gPSAxOworCQllbHNlIGlmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkKKwkJCXNjYWxlX2FjdGlvbiA9IC0xOworCX0KIAogCS8qIEJvdGggYWRqYWNlbnQgdGhyb3VnaHB1dHMgYXJlIG1lYXN1cmVkLCBidXQgbmVpdGhlciBvbmUgaGFzIGJldHRlcgogCSAqIHRocm91Z2hwdXQ7IHdlJ3JlIHVzaW5nIHRoZSBiZXN0IHJhdGUsIGRvbid0IGNoYW5nZSBpdCEgKi8KQEAgLTE5MzEsOSArMTg2NywxMCBAQAogCQkvKiBIaWdoZXIgYWRqYWNlbnQgcmF0ZSdzIHRocm91Z2hwdXQgaXMgbWVhc3VyZWQgKi8KIAkJaWYgKGhpZ2hfdHB0ICE9IElXTF9JTlZBTElEX1ZBTFVFKSB7CiAJCQkvKiBIaWdoZXIgcmF0ZSBoYXMgYmV0dGVyIHRocm91Z2hwdXQgKi8KLQkJCWlmIChoaWdoX3RwdCA+IGN1cnJlbnRfdHB0KQorCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQgJiYKKwkJCQkJc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKIAkJCQlzY2FsZV9hY3Rpb24gPSAxOwotCQkJZWxzZSB7CisJCQl9IGVsc2UgewogCQkJCUlXTF9ERUJVR19SQVRFCiAJCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKQEAgLTE5NDYsMjMgKzE4ODMsMTcgQEAKIAkJCQlJV0xfREVCVUdfUkFURQogCQkJCSAgICAoImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIGlmIChzciA+PSBJV0xfUkFURV9JTkNSRUFTRV9USCkgewogCQkJCXNjYWxlX2FjdGlvbiA9IDE7CisJCQl9CiAJCX0KIAl9CiAKIAkvKiBTYW5pdHkgY2hlY2s7IGFza2VkIGZvciBkZWNyZWFzZSwgYnV0IHN1Y2Nlc3MgcmF0ZSBvciB0aHJvdWdocHV0CiAJICogaGFzIGJlZW4gZ29vZCBhdCBvbGQgcmF0ZS4gIERvbid0IGNoYW5nZSBpdC4gKi8KLQlpZiAoc2NhbGVfYWN0aW9uID09IC0xKSB7Ci0JCWlmICgobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpICYmCi0JCSAgICAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA+IElXTF9SQVRFX0hJR0hfVEgpIHx8CisJaWYgKChzY2FsZV9hY3Rpb24gPT0gLTEpICYmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkgJiYKKwkJICAgICgoc3IgPiBJV0xfUkFURV9ISUdIX1RIKSB8fAogCQkgICAgIChjdXJyZW50X3RwdCA+ICgxMDAgKiB0YmwtPmV4cGVjdGVkX3RwdFtsb3ddKSkpKQotCQkJc2NhbGVfYWN0aW9uID0gMDsKLQotCS8qIFNhbml0eSBjaGVjazsgYXNrZWQgZm9yIGluY3JlYXNlLCBidXQgc3VjY2VzcyByYXRlIGhhcyBub3QgYmVlbiBncmVhdAotCSAqIGV2ZW4gYXQgb2xkIHJhdGUsIGhpZ2hlciByYXRlIHdpbGwgYmUgd29yc2UuICBEb24ndCBjaGFuZ2UgaXQuICovCi0JfSBlbHNlIGlmICgoc2NhbGVfYWN0aW9uID09IDEpICYmCi0JCSAgICh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPCBJV0xfUkFURV9JTkNSRUFTRV9USCkpCiAJCXNjYWxlX2FjdGlvbiA9IDA7CiAKIAlzd2l0Y2ggKHNjYWxlX2FjdGlvbikgewpAQCAtMTk4NywxNSArMTkxOCwxNSBAQAogCQlicmVhazsKIAl9CiAKLQlJV0xfREVCVUdfSFQoImNob29zZSByYXRlIHNjYWxlIGluZGV4ICVkIGFjdGlvbiAlZCBsb3cgJWQgIgorCUlXTF9ERUJVR19SQVRFKCJjaG9vc2UgcmF0ZSBzY2FsZSBpbmRleCAlZCBhY3Rpb24gJWQgbG93ICVkICIKIAkJICAgICJoaWdoICVkIHR5cGUgJWRcbiIsCiAJCSAgICAgaW5kZXgsIHNjYWxlX2FjdGlvbiwgbG93LCBoaWdoLCB0YmwtPmxxX3R5cGUpOwogCi0gbHFfdXBkYXRlOgorbHFfdXBkYXRlOgogCS8qIFJlcGxhY2UgdUNvZGUncyByYXRlIHRhYmxlIGZvciB0aGUgZGVzdGluYXRpb24gc3RhdGlvbi4gKi8KIAlpZiAodXBkYXRlX2xxKSB7Ci0JCXJzX21jc19mcm9tX3RibCgmbWNzX3JhdGUsIHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKLQkJcnNfZmlsbF9saW5rX2NtZChscV9zdGEsICZtY3NfcmF0ZSwgJmxxX3N0YS0+bHEpOworCQlyYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKKwkJcnNfZmlsbF9saW5rX2NtZChwcml2LCBscV9zdGEsIHJhdGUpOwogCQlpd2xfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CiAJfQogCkBAIC0yMDI5LDEzICsxOTYwLDExIEBACiAJCQkJcnNfcmF0ZV9zY2FsZV9jbGVhcl93aW5kb3coJih0YmwtPndpbltpXSkpOwogCiAJCQkvKiBVc2UgbmV3ICJzZWFyY2giIHN0YXJ0IHJhdGUgKi8KLQkJCWluZGV4ID0gaXdsNDk2NV9od3JhdGVfdG9fcGxjcF9pZHgoCi0JCQkJCXRibC0+Y3VycmVudF9yYXRlLnJhdGVfbl9mbGFncyk7CisJCQlpbmRleCA9IGl3bF9od3JhdGVfdG9fcGxjcF9pZHgodGJsLT5jdXJyZW50X3JhdGUpOwogCi0JCQlJV0xfREVCVUdfSFQoIlN3aXRjaCBjdXJyZW50ICBtY3M6ICVYIGluZGV4OiAlZFxuIiwKLQkJCQkgICAgIHRibC0+Y3VycmVudF9yYXRlLnJhdGVfbl9mbGFncywgaW5kZXgpOwotCQkJcnNfZmlsbF9saW5rX2NtZChscV9zdGEsICZ0YmwtPmN1cnJlbnRfcmF0ZSwKLQkJCQkJICZscV9zdGEtPmxxKTsKKwkJCUlXTF9ERUJVR19SQVRFKCJTd2l0Y2ggY3VycmVudCAgbWNzOiAlWCBpbmRleDogJWRcbiIsCisJCQkJICAgICB0YmwtPmN1cnJlbnRfcmF0ZSwgaW5kZXgpOworCQkJcnNfZmlsbF9saW5rX2NtZChwcml2LCBscV9zdGEsIHRibC0+Y3VycmVudF9yYXRlKTsKIAkJCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKIAkJfQogCkBAIC0yMDQ2LDEzICsxOTc1LDExIEBACiAJCSAqIGJlZm9yZSBuZXh0IHJvdW5kIG9mIG1vZGUgY29tcGFyaXNvbnMuICovCiAJCXRibDEgPSAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKIAkJaWYgKGlzX2xlZ2FjeSh0YmwxLT5scV90eXBlKSAmJgotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCiAJCSAgICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfU1VQUE9SVF9IVF9NT0RFKSkgJiYKLSNlbmRpZgogCQkgICAgKGxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPj0gMSkpIHsKIAkJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPSAwOwotCQkJSVdMX0RFQlVHX0hUKCJMUTogU1RBWSBpbiBsZWdhY3kgdGFibGVcbiIpOwotCQkJcnNfc2V0X3N0YXlfaW5fdGFibGUoMSwgbHFfc3RhKTsKKwkJCUlXTF9ERUJVR19SQVRFKCJMUTogU1RBWSBpbiBsZWdhY3kgdGFibGVcbiIpOworCQkJcnNfc2V0X3N0YXlfaW5fdGFibGUocHJpdiwgMSwgbHFfc3RhKTsKIAkJfQogCiAJCS8qIElmIHdlJ3JlIGluIGFuIEhUIG1vZGUsIGFuZCBhbGwgMyBtb2RlIHN3aXRjaCBhY3Rpb25zCkBAIC0yMDYwLDE2ICsxOTg3LDE0IEBACiAJCSAqIG1vZGUgZm9yIGEgd2hpbGUgYmVmb3JlIG5leHQgcm91bmQgb2YgbW9kZSBjb21wYXJpc29ucy4gKi8KIAkJaWYgKGxxX3N0YS0+ZW5hYmxlX2NvdW50ZXIgJiYKIAkJICAgIChscV9zdGEtPmFjdGlvbl9jb3VudGVyID49IElXTF9BQ1RJT05fTElNSVQpKSB7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIAkJCWlmICgobHFfc3RhLT5sYXN0X3RwdCA+IElXTF9BR0dfVFBUX1RIUkVIT0xEKSAmJgogCQkJICAgIChscV9zdGEtPnR4X2FnZ190aWRfZW4gJiAoMSA8PCB0aWQpKSAmJgogCQkJICAgICh0aWQgIT0gTUFYX1RJRF9DT1VOVCkpIHsKLQkJCQlJV0xfREVCVUdfSFQoInRyeSB0byBhZ2dyZWdhdGUgdGlkICVkXG4iLCB0aWQpOworCQkJCUlXTF9ERUJVR19SQVRFKCJ0cnkgdG8gYWdncmVnYXRlIHRpZCAlZFxuIiwgdGlkKTsKIAkJCQlyc190bF90dXJuX29uX2FnZyhwcml2LCB0aWQsIGxxX3N0YSwgc3RhKTsKIAkJCX0KLSNlbmRpZiAvKkNPTkZJR19JV0w0OTY1X0hUICovCiAJCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyID0gMDsKLQkJCXJzX3NldF9zdGF5X2luX3RhYmxlKDAsIGxxX3N0YSk7CisJCQlyc19zZXRfc3RheV9pbl90YWJsZShwcml2LCAwLCBscV9zdGEpOwogCQl9CiAKIAkvKgpAQCAtMjA4NSw3ICsyMDEwLDcgQEAKIAl9CiAKIG91dDoKLQlyc19tY3NfZnJvbV90YmwoJnRibC0+Y3VycmVudF9yYXRlLCB0YmwsIGluZGV4LCBpc19ncmVlbik7CisJdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwodGJsLCBpbmRleCwgaXNfZ3JlZW4pOwogCWkgPSBpbmRleDsKIAlzdGEtPmxhc3RfdHhyYXRlX2lkeCA9IGk7CiAKQEAgLTIxMDUsMTMgKzIwMzAsMTQgQEAKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLAogCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKLQlpbnQgaTsKIAlzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YTsKIAlzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqdGJsOwotCXU4IGFjdGl2ZV90YmwgPSAwOwogCWludCByYXRlX2lkeDsKKwlpbnQgaTsKKwl1MzIgcmF0ZTsKIAl1OCB1c2VfZ3JlZW4gPSByc191c2VfZ3JlZW4ocHJpdiwgY29uZik7Ci0Jc3RydWN0IGl3bDQ5NjVfcmF0ZSBtY3NfcmF0ZTsKKwl1OCBhY3RpdmVfdGJsID0gMDsKKwl1OCB2YWxpZF90eF9hbnQ7CiAKIAlpZiAoIXN0YSB8fCAhc3RhLT5yYXRlX2N0cmxfcHJpdikKIAkJZ290byBvdXQ7CkBAIC0yMTIzLDYgKzIwNDksOCBAQAogCSAgICAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSkKIAkJZ290byBvdXQ7CiAKKwl2YWxpZF90eF9hbnQgPSBwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50OworCiAJaWYgKCFscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsKQogCQlhY3RpdmVfdGJsID0gbHFfc3RhLT5hY3RpdmVfdGJsOwogCWVsc2UKQEAgLTIxMzMsMjIgKzIwNjEsMjMgQEAKIAlpZiAoKGkgPCAwKSB8fCAoaSA+PSBJV0xfUkFURV9DT1VOVCkpCiAJCWkgPSAwOwogCi0JbWNzX3JhdGUucmF0ZV9uX2ZsYWdzID0gaXdsNDk2NV9yYXRlc1tpXS5wbGNwIDsKLQltY3NfcmF0ZS5yYXRlX25fZmxhZ3MgfD0gUkFURV9NQ1NfQU5UX0JfTVNLOwotCW1jc19yYXRlLnJhdGVfbl9mbGFncyAmPSB+UkFURV9NQ1NfQU5UX0FfTVNLOworCS8qIEZJWE1FOlJTOiBUaGlzIGlzIGFsc28gd3JvbmcgaW4gNDk2NSAqLworCXJhdGUgPSBpd2xfcmF0ZXNbaV0ucGxjcDsKKwlyYXRlIHw9IFJBVEVfTUNTX0FOVF9CX01TSzsKKwlyYXRlICY9IH5SQVRFX01DU19BTlRfQV9NU0s7CiAKIAlpZiAoaSA+PSBJV0xfRklSU1RfQ0NLX1JBVEUgJiYgaSA8PSBJV0xfTEFTVF9DQ0tfUkFURSkKLQkJbWNzX3JhdGUucmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0NDS19NU0s7CisJCXJhdGUgfD0gUkFURV9NQ1NfQ0NLX01TSzsKIAotCXRibC0+YW50ZW5uYV90eXBlID0gQU5UX0FVWDsKLQlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoJm1jc19yYXRlLCBwcml2LT5iYW5kLCB0YmwsICZyYXRlX2lkeCk7Ci0JaWYgKCFyc19pc19hbnRfY29ubmVjdGVkKHByaXYtPnZhbGlkX2FudGVubmEsIHRibC0+YW50ZW5uYV90eXBlKSkKLQkgICAgcnNfdG9nZ2xlX2FudGVubmEoJm1jc19yYXRlLCB0YmwpOworCXRibC0+YW50X3R5cGUgPSBBTlRfQjsKKwlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MocmF0ZSwgcHJpdi0+YmFuZCwgdGJsLCAmcmF0ZV9pZHgpOworCWlmICghcnNfaXNfdmFsaWRfYW50KHZhbGlkX3R4X2FudCwgdGJsLT5hbnRfdHlwZSkpCisJICAgIHJzX3RvZ2dsZV9hbnRlbm5hKHZhbGlkX3R4X2FudCwgJnJhdGUsIHRibCk7CiAKLQlyc19tY3NfZnJvbV90YmwoJm1jc19yYXRlLCB0YmwsIHJhdGVfaWR4LCB1c2VfZ3JlZW4pOwotCXRibC0+Y3VycmVudF9yYXRlLnJhdGVfbl9mbGFncyA9IG1jc19yYXRlLnJhdGVfbl9mbGFnczsKLQlyc19nZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgdGJsKTsKLQlyc19maWxsX2xpbmtfY21kKGxxX3N0YSwgJm1jc19yYXRlLCAmbHFfc3RhLT5scSk7CisJcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIHJhdGVfaWR4LCB1c2VfZ3JlZW4pOworCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZTsKKwlyc19zZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgdGJsKTsKKwlyc19maWxsX2xpbmtfY21kKE5VTEwsIGxxX3N0YSwgcmF0ZSk7CiAJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwogIG91dDoKIAlyZXR1cm47CkBAIC0yMTY1LDcgKzIwOTQsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZsb2NhbC0+aHcuY29uZjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXUxNiBmYzsKKwlfX2xlMTYgZmM7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKXByaXZfcmF0ZTsKIAlzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YTsKIApAQCAtMjE3NywxMCArMjEwNiwxMCBAQAogCiAJLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgYnJvYWRjYXN0L211bHRpY2FzdCBkYXRhIHVzaW5nIGxvd2VzdAogCSAqIHJhdGUuICovCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCWlmICghaWVlZTgwMjExX2lzX2RhdGEoZmMpIHx8IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CiAJICAgICFzdGEgfHwgIXN0YS0+cmF0ZV9jdHJsX3ByaXYpIHsKLQkJc2VsLT5yYXRlID0gcmF0ZV9sb3dlc3QobG9jYWwsIHNiYW5kLCBzdGEpOworCQlzZWwtPnJhdGVfaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgobG9jYWwsIHNiYW5kLCBzdGEpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIxODksMTMgKzIxMTgsMTMgQEAKIAogCWlmICgocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSAmJgogCSAgICAhbHFfc3RhLT5pYnNzX3N0YV9hZGRlZCkgewotCQl1OCBzdGFfaWQgPSBpd2w0OTY1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKKwkJdTggc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAkJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CiAJCQlJV0xfREVCVUdfUkFURSgiTFE6IEFERCBzdGF0aW9uICVzXG4iLAogCQkJCSAgICAgICBwcmludF9tYWMobWFjLCBoZHItPmFkZHIxKSk7Ci0JCQlzdGFfaWQgPSBpd2w0OTY1X2FkZF9zdGF0aW9uX2ZsYWdzKHByaXYsIGhkci0+YWRkcjEsCisJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgaGRyLT5hZGRyMSwKIAkJCQkJCQkwLCBDTURfQVNZTkMsIE5VTEwpOwogCQl9CiAJCWlmICgoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pKSB7CkBAIC0yMjA0LDI2ICsyMTMzLDI3IEBACiAJCQlscV9zdGEtPmlic3Nfc3RhX2FkZGVkID0gMTsKIAkJCXJzX2luaXRpYWxpemVfbHEocHJpdiwgY29uZiwgc3RhKTsKIAkJfQotCQlpZiAoIWxxX3N0YS0+aWJzc19zdGFfYWRkZWQpCi0JCQlnb3RvIGRvbmU7CiAJfQogCi1kb25lOgogCWlmICgoaSA8IDApIHx8IChpID4gSVdMX1JBVEVfQ09VTlQpKSB7Ci0JCXNlbC0+cmF0ZSA9IHJhdGVfbG93ZXN0KGxvY2FsLCBzYmFuZCwgc3RhKTsKKwkJc2VsLT5yYXRlX2lkeCA9IHJhdGVfbG93ZXN0X2luZGV4KGxvY2FsLCBzYmFuZCwgc3RhKTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2VsLT5yYXRlID0gJnByaXYtPmllZWVfcmF0ZXNbaV07CisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCWkgLT0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwlzZWwtPnJhdGVfaWR4ID0gaTsKIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RhdGljIHZvaWQgKnJzX2FsbG9jX3N0YSh2b2lkICpwcml2LCBnZnBfdCBnZnApCitzdGF0aWMgdm9pZCAqcnNfYWxsb2Nfc3RhKHZvaWQgKnByaXZfcmF0ZSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfc3RhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAlpbnQgaSwgajsKIAorCXByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yYXRlOwogCUlXTF9ERUJVR19SQVRFKCJjcmVhdGUgc3RhdGlvbiByYXRlIHNjYWxlIHdpbmRvd1xuIik7CiAKIAlscV9zdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9scV9zdGEpLCBnZnApOwpAQCAtMjI1OSw3ICsyMTg5LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspCiAJCQlyc19yYXRlX3NjYWxlX2NsZWFyX3dpbmRvdygmKGxxX3N0YS0+bHFfaW5mb1tqXS53aW5baV0pKTsKIAotCUlXTF9ERUJVR19SQVRFKCJyYXRlIHNjYWxlIGdsb2JhbCBpbml0XG4iKTsKKwlJV0xfREVCVUdfUkFURSgiTFE6ICoqKiByYXRlIHNjYWxlIGdsb2JhbCBpbml0ICoqKlxuIik7CiAJLyogVE9ETzogd2hhdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcmF0ZSBmb3IgU1RBPyBBYm91dCBtaWRkbGU/IE1heWJlIG5vdAogCSAqIHRoZSBsb3dlc3Qgb3IgdGhlIGhpZ2hlc3QgcmF0ZS4uIENvdWxkIGNvbnNpZGVyIHVzaW5nIFJTU0kgZnJvbQogCSAqIHByZXZpb3VzIHBhY2tldHM/IE5lZWQgdG8gaGF2ZSBJRUVFIDgwMi4xWCBhdXRoIHN1Y2NlZWQgaW1tZWRpYXRlbHkKQEAgLTIyNjcsMTcgKzIxOTcsMTcgQEAKIAogCWxxX3N0YS0+aWJzc19zdGFfYWRkZWQgPSAwOwogCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7Ci0JCXU4IHN0YV9pZCA9IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHByaXYsIHN0YS0+YWRkcik7CisJCXU4IHN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgc3RhLT5hZGRyKTsKIAkJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAkJLyogZm9yIElCU1MgdGhlIGNhbGwgYXJlIGZyb20gdGFza2xldCAqLwotCQlJV0xfREVCVUdfSFQoIkxROiBBREQgc3RhdGlvbiAlc1xuIiwKKwkJSVdMX0RFQlVHX1JBVEUoIkxROiBBREQgc3RhdGlvbiAlc1xuIiwKIAkJCSAgICAgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7CiAKIAkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CiAJCQlJV0xfREVCVUdfUkFURSgiTFE6IEFERCBzdGF0aW9uICVzXG4iLAogCQkJCSAgICAgICBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpKTsKLQkJCXN0YV9pZCA9IGl3bDQ5NjVfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgc3RhLT5hZGRyLAorCQkJc3RhX2lkID0gaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHByaXYsIHN0YS0+YWRkciwKIAkJCQkJCQkwLCBDTURfQVNZTkMsIE5VTEwpOwogCQl9CiAJCWlmICgoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pKSB7CkBAIC0yMzAwLDkyICsyMjMwLDk1IEBACiAJCXN0YS0+bGFzdF90eHJhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKIAlscV9zdGEtPmlzX2R1cCA9IDA7Ci0JbHFfc3RhLT52YWxpZF9hbnRlbm5hID0gcHJpdi0+dmFsaWRfYW50ZW5uYTsKLQlscV9zdGEtPmFudGVubmEgPSBwcml2LT5hbnRlbm5hOwogCWxxX3N0YS0+aXNfZ3JlZW4gPSByc191c2VfZ3JlZW4ocHJpdiwgY29uZik7Ci0JbHFfc3RhLT5hY3RpdmVfcmF0ZSA9IHByaXYtPmFjdGl2ZV9yYXRlOwotCWxxX3N0YS0+YWN0aXZlX3JhdGUgJj0gfigweDEwMDApOworCWxxX3N0YS0+YWN0aXZlX2xlZ2FjeV9yYXRlID0gcHJpdi0+YWN0aXZlX3JhdGUgJiB+KDB4MTAwMCk7CiAJbHFfc3RhLT5hY3RpdmVfcmF0ZV9iYXNpYyA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljOwogCWxxX3N0YS0+YmFuZCA9IHByaXYtPmJhbmQ7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIAkvKgogCSAqIGFjdGl2ZV9zaXNvX3JhdGUgbWFzayBpbmNsdWRlcyA5IE1CaXRzIChiaXQgNSksIGFuZCBDQ0sgKGJpdHMgMC0zKSwKIAkgKiBzdXBwX3JhdGVzW10gZG9lcyBub3Q7IHNoaWZ0IHRvIGNvbnZlcnQgZm9ybWF0LCBmb3JjZSA5IE1CaXRzIG9mZi4KIAkgKi8KLQlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgPSAocHJpdi0+Y3VycmVudF9odF9jb25maWcuc3VwcF9tY3Nfc2V0WzBdIDw8IDEpOwotCWxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZSB8PQotCQkJKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnN1cHBfbWNzX3NldFswXSAmIDB4MSk7CisJbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlID0gY29uZi0+aHRfY29uZi5zdXBwX21jc19zZXRbMF0gPDwgMTsKKwlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgfD0gY29uZi0+aHRfY29uZi5zdXBwX21jc19zZXRbMF0gJiAweDE7CiAJbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlICY9IH4oKHUxNikweDIpOwotCWxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZSA9Ci0JCQlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgPDwgSVdMX0ZJUlNUX09GRE1fUkFURTsKKwlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgPDw9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKIAkvKiBTYW1lIGhlcmUgKi8KLQlscV9zdGEtPmFjdGl2ZV9taW1vX3JhdGUgPSAocHJpdi0+Y3VycmVudF9odF9jb25maWcuc3VwcF9tY3Nfc2V0WzFdIDw8IDEpOwotCWxxX3N0YS0+YWN0aXZlX21pbW9fcmF0ZSB8PQotCQkJKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnN1cHBfbWNzX3NldFsxXSAmIDB4MSk7Ci0JbHFfc3RhLT5hY3RpdmVfbWltb19yYXRlICY9IH4oKHUxNikweDIpOwotCWxxX3N0YS0+YWN0aXZlX21pbW9fcmF0ZSA9Ci0JCQlscV9zdGEtPmFjdGl2ZV9taW1vX3JhdGUgPDwgSVdMX0ZJUlNUX09GRE1fUkFURTsKLQlJV0xfREVCVUdfSFQoIlNJU08gUkFURSAweCVYIE1JTU8gUkFURSAweCVYXG4iLAorCWxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUgPSBjb25mLT5odF9jb25mLnN1cHBfbWNzX3NldFsxXSA8PCAxOworCWxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUgfD0gY29uZi0+aHRfY29uZi5zdXBwX21jc19zZXRbMV0gJiAweDE7CisJbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSAmPSB+KCh1MTYpMHgyKTsKKwlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlIDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOworCisJbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSA9IGNvbmYtPmh0X2NvbmYuc3VwcF9tY3Nfc2V0WzJdIDw8IDE7CisJbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSB8PSBjb25mLT5odF9jb25mLnN1cHBfbWNzX3NldFsyXSAmIDB4MTsKKwlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlICY9IH4oKHUxNikweDIpOworCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgPDw9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisKKwlJV0xfREVCVUdfUkFURSgiU0lTTy1SQVRFPSVYIE1JTU8yLVJBVEU9JVggTUlNTzMtUkFURT0lWFxuIiwKIAkJICAgICBscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUsCi0JCSAgICAgbHFfc3RhLT5hY3RpdmVfbWltb19yYXRlKTsKKwkJICAgICBscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlLAorCQkgICAgIGxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUpOworCisJLyogVGhlc2UgdmFsdWVzIHdpbGwgYmUgb3ZlcnJpZGVuIGxhdGVyICovCisJbHFfc3RhLT5scS5nZW5lcmFsX3BhcmFtcy5zaW5nbGVfc3RyZWFtX2FudF9tc2sgPSBBTlRfQTsKKwlscV9zdGEtPmxxLmdlbmVyYWxfcGFyYW1zLmR1YWxfc3RyZWFtX2FudF9tc2sgPSBBTlRfQUI7CisKIAkvKiBhcyBkZWZhdWx0IGFsbG93IGFnZ3JlZ2F0aW9uIGZvciBhbGwgdGlkcyAqLwogCWxxX3N0YS0+dHhfYWdnX3RpZF9lbiA9IElXTF9BR0dfQUxMX1RJRDsKLSNlbmRpZiAvKkNPTkZJR19JV0w0OTY1X0hUKi8KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogCWxxX3N0YS0+ZHJ2ID0gcHJpdjsKLSNlbmRpZgotCi0JaWYgKHByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQpCi0JCXByaXYtPmxxX21uZ3IubHFfcmVhZHkgPSAxOwogCiAJcnNfaW5pdGlhbGl6ZV9scShwcml2LCBjb25mLCBzdGEpOwogfQogCi1zdGF0aWMgdm9pZCByc19maWxsX2xpbmtfY21kKHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfc3RhLAotCQkJICAgIHN0cnVjdCBpd2w0OTY1X3JhdGUgKnR4X21jcywKLQkJCSAgICBzdHJ1Y3QgaXdsX2xpbmtfcXVhbGl0eV9jbWQgKmxxX2NtZCkKK3N0YXRpYyB2b2lkIHJzX2ZpbGxfbGlua19jbWQoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKKwkJCSAgICAgdTMyIG5ld19yYXRlKQogeworCXN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvIHRibF90eXBlOwogCWludCBpbmRleCA9IDA7CiAJaW50IHJhdGVfaWR4OwogCWludCByZXBlYXRfcmF0ZSA9IDA7Ci0JdTggYW50X3RvZ2dsZV9jb3VudCA9IDA7CisJdTggYW50X3RvZ2dsZV9jbnQgPSAwOwogCXU4IHVzZV9odF9wb3NzaWJsZSA9IDE7Ci0Jc3RydWN0IGl3bDQ5NjVfcmF0ZSBuZXdfcmF0ZTsKLQlzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyB0YmxfdHlwZSA9IHsgMCB9OworCXU4IHZhbGlkX3R4X2FudCA9IDA7CisJc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kICpscV9jbWQgPSAmbHFfc3RhLT5scTsKIAogCS8qIE92ZXJyaWRlIHN0YXJ0aW5nIHJhdGUgKGluZGV4IDApIGlmIG5lZWRlZCBmb3IgZGVidWcgcHVycG9zZXMgKi8KLQlyc19kYmdmc19zZXRfbWNzKGxxX3N0YSwgdHhfbWNzLCBpbmRleCk7CisJcnNfZGJnZnNfc2V0X21jcyhscV9zdGEsICZuZXdfcmF0ZSwgaW5kZXgpOwogCi0JLyogSW50ZXJwcmV0IHJhdGVfbl9mbGFncyAqLwotCXJzX2dldF90YmxfaW5mb19mcm9tX21jcyh0eF9tY3MsIGxxX3N0YS0+YmFuZCwKKwkvKiBJbnRlcnByZXQgbmV3X3JhdGUgKHJhdGVfbl9mbGFncykgKi8KKwltZW1zZXQoJnRibF90eXBlLCAwLCBzaXplb2YodGJsX3R5cGUpKTsKKwlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MobmV3X3JhdGUsIGxxX3N0YS0+YmFuZCwKIAkJCQkgICZ0YmxfdHlwZSwgJnJhdGVfaWR4KTsKIAogCS8qIEhvdyBtYW55IHRpbWVzIHNob3VsZCB3ZSByZXBlYXQgdGhlIGluaXRpYWwgcmF0ZT8gKi8KIAlpZiAoaXNfbGVnYWN5KHRibF90eXBlLmxxX3R5cGUpKSB7Ci0JCWFudF90b2dnbGVfY291bnQgPSAxOworCQlhbnRfdG9nZ2xlX2NudCA9IDE7CiAJCXJlcGVhdF9yYXRlID0gSVdMX05VTUJFUl9UUlk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJcmVwZWF0X3JhdGUgPSBJV0xfSFRfTlVNQkVSX1RSWTsKKwl9CiAKIAlscV9jbWQtPmdlbmVyYWxfcGFyYW1zLm1pbW9fZGVsaW1pdGVyID0KIAkJCWlzX21pbW8odGJsX3R5cGUubHFfdHlwZSkgPyAxIDogMDsKIAogCS8qIEZpbGwgMXN0IHRhYmxlIGVudHJ5IChpbmRleCAwKSAqLwotCWxxX2NtZC0+cnNfdGFibGVbaW5kZXhdLnJhdGVfbl9mbGFncyA9Ci0JCQljcHVfdG9fbGUzMih0eF9tY3MtPnJhdGVfbl9mbGFncyk7Ci0JbmV3X3JhdGUucmF0ZV9uX2ZsYWdzID0gdHhfbWNzLT5yYXRlX25fZmxhZ3M7CisJbHFfY21kLT5yc190YWJsZVtpbmRleF0ucmF0ZV9uX2ZsYWdzID0gY3B1X3RvX2xlMzIobmV3X3JhdGUpOwogCi0JaWYgKGlzX21pbW8odGJsX3R5cGUubHFfdHlwZSkgfHwgKHRibF90eXBlLmFudGVubmFfdHlwZSA9PSBBTlRfTUFJTikpCi0JCWxxX2NtZC0+Z2VuZXJhbF9wYXJhbXMuc2luZ2xlX3N0cmVhbV9hbnRfbXNrCi0JCQk9IExJTktfUVVBTF9BTlRfQV9NU0s7Ci0JZWxzZQotCQlscV9jbWQtPmdlbmVyYWxfcGFyYW1zLnNpbmdsZV9zdHJlYW1fYW50X21zawotCQkJPSBMSU5LX1FVQUxfQU5UX0JfTVNLOworCWlmIChudW1fb2ZfYW50KHRibF90eXBlLmFudF90eXBlKSA9PSAxKSB7CisJCWxxX2NtZC0+Z2VuZXJhbF9wYXJhbXMuc2luZ2xlX3N0cmVhbV9hbnRfbXNrID0KKwkJCQkJCXRibF90eXBlLmFudF90eXBlOworCX0gZWxzZSBpZiAobnVtX29mX2FudCh0YmxfdHlwZS5hbnRfdHlwZSkgPT0gMikgeworCQlscV9jbWQtPmdlbmVyYWxfcGFyYW1zLmR1YWxfc3RyZWFtX2FudF9tc2sgPQorCQkJCQkJdGJsX3R5cGUuYW50X3R5cGU7CisJfSAvKiBvdGhlcndpc2Ugd2UgZG9uJ3QgbW9kaWZ5IHRoZSBleGlzdGluZyB2YWx1ZSAqLwogCiAJaW5kZXgrKzsKIAlyZXBlYXRfcmF0ZS0tOwogCisJaWYgKHByaXYpCisJCXZhbGlkX3R4X2FudCA9IHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQ7CisKIAkvKiBGaWxsIHJlc3Qgb2YgcmF0ZSB0YWJsZSAqLwogCXdoaWxlIChpbmRleCA8IExJTktfUVVBTF9NQVhfUkVUUllfTlVNKSB7CiAJCS8qIFJlcGVhdCBpbml0aWFsL25leHQgcmF0ZS4KQEAgLTIzOTMsMjYgKzIzMjYsMjUgQEAKIAkJICogRm9yIEhUIElXTF9IVF9OVU1CRVJfVFJZID09IDMsIHRoaXMgZXhlY3V0ZXMgdHdpY2UuICovCiAJCXdoaWxlIChyZXBlYXRfcmF0ZSA+IDAgJiYgKGluZGV4IDwgTElOS19RVUFMX01BWF9SRVRSWV9OVU0pKSB7CiAJCQlpZiAoaXNfbGVnYWN5KHRibF90eXBlLmxxX3R5cGUpKSB7Ci0JCQkJaWYgKGFudF90b2dnbGVfY291bnQgPAotCQkJCSAgICBOVU1fVFJZX0JFRk9SRV9BTlRFTk5BX1RPR0dMRSkKLQkJCQkJYW50X3RvZ2dsZV9jb3VudCsrOwotCQkJCWVsc2UgewotCQkJCQlyc190b2dnbGVfYW50ZW5uYSgmbmV3X3JhdGUsICZ0YmxfdHlwZSk7Ci0JCQkJCWFudF90b2dnbGVfY291bnQgPSAxOwotCQkJCX0KLQkJCX0KKwkJCQlpZiAoYW50X3RvZ2dsZV9jbnQgPCBOVU1fVFJZX0JFRk9SRV9BTlRfVE9HR0xFKQorCQkJCQlhbnRfdG9nZ2xlX2NudCsrOworCQkJCWVsc2UgaWYgKHByaXYgJiYKKwkJCQkJIHJzX3RvZ2dsZV9hbnRlbm5hKHZhbGlkX3R4X2FudCwKKwkJCQkJCQkmbmV3X3JhdGUsICZ0YmxfdHlwZSkpCisJCQkJCWFudF90b2dnbGVfY250ID0gMTsKK30KIAogCQkJLyogT3ZlcnJpZGUgbmV4dCByYXRlIGlmIG5lZWRlZCBmb3IgZGVidWcgcHVycG9zZXMgKi8KIAkJCXJzX2RiZ2ZzX3NldF9tY3MobHFfc3RhLCAmbmV3X3JhdGUsIGluZGV4KTsKIAogCQkJLyogRmlsbCBuZXh0IHRhYmxlIGVudHJ5ICovCiAJCQlscV9jbWQtPnJzX3RhYmxlW2luZGV4XS5yYXRlX25fZmxhZ3MgPQotCQkJCQljcHVfdG9fbGUzMihuZXdfcmF0ZS5yYXRlX25fZmxhZ3MpOworCQkJCQljcHVfdG9fbGUzMihuZXdfcmF0ZSk7CiAJCQlyZXBlYXRfcmF0ZS0tOwogCQkJaW5kZXgrKzsKIAkJfQogCi0JCXJzX2dldF90YmxfaW5mb19mcm9tX21jcygmbmV3X3JhdGUsIGxxX3N0YS0+YmFuZCwgJnRibF90eXBlLAorCQlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MobmV3X3JhdGUsIGxxX3N0YS0+YmFuZCwgJnRibF90eXBlLAogCQkJCQkJJnJhdGVfaWR4KTsKIAogCQkvKiBJbmRpY2F0ZSB0byB1Q29kZSB3aGljaCBlbnRyaWVzIG1pZ2h0IGJlIE1JTU8uCkBAIC0yNDIyLDIwICsyMzU0LDIyIEBACiAJCQlscV9jbWQtPmdlbmVyYWxfcGFyYW1zLm1pbW9fZGVsaW1pdGVyID0gaW5kZXg7CiAKIAkJLyogR2V0IG5leHQgcmF0ZSAqLwotCQlyc19nZXRfbG93ZXJfcmF0ZShscV9zdGEsICZ0YmxfdHlwZSwgcmF0ZV9pZHgsCi0JCQkJICB1c2VfaHRfcG9zc2libGUsICZuZXdfcmF0ZSk7CisJCW5ld19yYXRlID0gcnNfZ2V0X2xvd2VyX3JhdGUobHFfc3RhLCAmdGJsX3R5cGUsIHJhdGVfaWR4LAorCQkJCQkgICAgIHVzZV9odF9wb3NzaWJsZSk7CiAKIAkJLyogSG93IG1hbnkgdGltZXMgc2hvdWxkIHdlIHJlcGVhdCB0aGUgbmV4dCByYXRlPyAqLwogCQlpZiAoaXNfbGVnYWN5KHRibF90eXBlLmxxX3R5cGUpKSB7Ci0JCQlpZiAoYW50X3RvZ2dsZV9jb3VudCA8IE5VTV9UUllfQkVGT1JFX0FOVEVOTkFfVE9HR0xFKQotCQkJCWFudF90b2dnbGVfY291bnQrKzsKLQkJCWVsc2UgewotCQkJCXJzX3RvZ2dsZV9hbnRlbm5hKCZuZXdfcmF0ZSwgJnRibF90eXBlKTsKLQkJCQlhbnRfdG9nZ2xlX2NvdW50ID0gMTsKLQkJCX0KKwkJCWlmIChhbnRfdG9nZ2xlX2NudCA8IE5VTV9UUllfQkVGT1JFX0FOVF9UT0dHTEUpCisJCQkJYW50X3RvZ2dsZV9jbnQrKzsKKwkJCWVsc2UgaWYgKHByaXYgJiYKKwkJCQkgcnNfdG9nZ2xlX2FudGVubmEodmFsaWRfdHhfYW50LAorCQkJCQkJICAgJm5ld19yYXRlLCAmdGJsX3R5cGUpKQorCQkJCWFudF90b2dnbGVfY250ID0gMTsKKwogCQkJcmVwZWF0X3JhdGUgPSBJV0xfTlVNQkVSX1RSWTsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CiAJCQlyZXBlYXRfcmF0ZSA9IElXTF9IVF9OVU1CRVJfVFJZOworCQl9CiAKIAkJLyogRG9uJ3QgYWxsb3cgSFQgcmF0ZXMgYWZ0ZXIgbmV4dCBwYXNzLgogCQkgKiByc19nZXRfbG93ZXJfcmF0ZSgpIHdpbGwgY2hhbmdlIHR5cGUgdG8gTFFfQSBvciBMUV9HLiAqLwpAQCAtMjQ0NSwxNCArMjM3OSwxMyBAQAogCQlyc19kYmdmc19zZXRfbWNzKGxxX3N0YSwgJm5ld19yYXRlLCBpbmRleCk7CiAKIAkJLyogRmlsbCBuZXh0IHRhYmxlIGVudHJ5ICovCi0JCWxxX2NtZC0+cnNfdGFibGVbaW5kZXhdLnJhdGVfbl9mbGFncyA9Ci0JCQkJY3B1X3RvX2xlMzIobmV3X3JhdGUucmF0ZV9uX2ZsYWdzKTsKKwkJbHFfY21kLT5yc190YWJsZVtpbmRleF0ucmF0ZV9uX2ZsYWdzID0gY3B1X3RvX2xlMzIobmV3X3JhdGUpOwogCiAJCWluZGV4Kys7CiAJCXJlcGVhdF9yYXRlLS07CiAJfQogCi0JbHFfY21kLT5nZW5lcmFsX3BhcmFtcy5kdWFsX3N0cmVhbV9hbnRfbXNrID0gMzsKKwlscV9jbWQtPmFnZ19wYXJhbXMuYWdnX2ZyYW1lX2NudF9saW1pdCA9IDY0OwogCWxxX2NtZC0+YWdnX3BhcmFtcy5hZ2dfZGlzX3N0YXJ0X3RoID0gMzsKIAlscV9jbWQtPmFnZ19wYXJhbXMuYWdnX3RpbWVfbGltaXQgPSBjcHVfdG9fbGUxNig0MDAwKTsKIH0KQEAgLTI0NzMsMTUgKzI0MDYsMTcgQEAKIAogCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CiAKLQlwcml2LT5scV9tbmdyLmxxX3JlYWR5ID0gMDsKKwkvKiBUT0RPIC0gYWRkIHJhdGUgc2NhbGUgc3RhdGUgcmVzZXQgKi8KIAogCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHJzX2ZyZWVfc3RhKHZvaWQgKnByaXYsIHZvaWQgKnByaXZfc3RhKQorc3RhdGljIHZvaWQgcnNfZnJlZV9zdGEodm9pZCAqcHJpdl9yYXRlLCB2b2lkICpwcml2X3N0YSkKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSA9IHByaXZfc3RhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAorCXByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yYXRlOwogCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CiAJa2ZyZWUobHFfc3RhKTsKIAlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOwpAQCAtMjQ5NSw1NCArMjQzMCw1NiBAQAogCXJldHVybiAwOwogfQogc3RhdGljIHZvaWQgcnNfZGJnZnNfc2V0X21jcyhzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKLQkJCQlzdHJ1Y3QgaXdsNDk2NV9yYXRlICptY3MsIGludCBpbmRleCkKKwkJCQl1MzIgKnJhdGVfbl9mbGFncywgaW50IGluZGV4KQogewotCXUzMiBiYXNlX3JhdGU7CisJc3RydWN0IGl3bF9wcml2ICpwcml2OwogCi0JaWYgKGxxX3N0YS0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQliYXNlX3JhdGUgPSAweDgwMEQ7Ci0JZWxzZQotCQliYXNlX3JhdGUgPSAweDgyMEE7Ci0KLQlpZiAobHFfc3RhLT5kYmdfZml4ZWQucmF0ZV9uX2ZsYWdzKSB7Ci0JCWlmIChpbmRleCA8IDEyKQotCQkJbWNzLT5yYXRlX25fZmxhZ3MgPSBscV9zdGEtPmRiZ19maXhlZC5yYXRlX25fZmxhZ3M7Ci0JCWVsc2UKLQkJCW1jcy0+cmF0ZV9uX2ZsYWdzID0gYmFzZV9yYXRlOworCXByaXYgPSBscV9zdGEtPmRydjsKKwlpZiAobHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSkgeworCQlpZiAoaW5kZXggPCAxMikgeworCQkJKnJhdGVfbl9mbGFncyA9IGxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGU7CisJCX0gZWxzZSB7CisJCQlpZiAobHFfc3RhLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQkJKnJhdGVfbl9mbGFncyA9IDB4ODAwRDsKKwkJCWVsc2UKKwkJCQkqcmF0ZV9uX2ZsYWdzID0gMHg4MjBBOworCQl9CiAJCUlXTF9ERUJVR19SQVRFKCJGaXhlZCByYXRlIE9OXG4iKTsKLQkJcmV0dXJuOworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19SQVRFKCJGaXhlZCByYXRlIE9GRlxuIik7CiAJfQotCi0JSVdMX0RFQlVHX1JBVEUoIkZpeGVkIHJhdGUgT0ZGXG4iKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcnNfc3RhX2RiZ2ZzX3NjYWxlX3RhYmxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CiAJY2hhciBidWZbNjRdOwogCWludCBidWZfc2l6ZTsKIAl1MzIgcGFyc2VkX3JhdGU7CiAKKwlwcml2ID0gbHFfc3RhLT5kcnY7CiAJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChzc2NhbmYoYnVmLCAiJXgiLCAmcGFyc2VkX3JhdGUpID09IDEpCi0JCWxxX3N0YS0+ZGJnX2ZpeGVkLnJhdGVfbl9mbGFncyA9IHBhcnNlZF9yYXRlOworCQlscV9zdGEtPmRiZ19maXhlZF9yYXRlID0gcGFyc2VkX3JhdGU7CiAJZWxzZQotCQlscV9zdGEtPmRiZ19maXhlZC5yYXRlX25fZmxhZ3MgPSAwOworCQlscV9zdGEtPmRiZ19maXhlZF9yYXRlID0gMDsKIAotCWxxX3N0YS0+YWN0aXZlX3JhdGUgPSAweDBGRkY7CS8qIDEgLSA1NCBNQml0cywgaW5jbHVkZXMgQ0NLICovCi0JbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlID0gMHgxRkQwOwkvKiA2IC0gNjAgTUJpdHMsIG5vIDksIG5vIENDSyAqLwotCWxxX3N0YS0+YWN0aXZlX21pbW9fcmF0ZSA9IDB4MUZEMDsJLyogNiAtIDYwIE1CaXRzLCBubyA5LCBubyBDQ0sgKi8KKwlscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZSA9IDB4MEZGRjsJLyogMSAtIDU0IE1CaXRzLCBpbmNsdWRlcyBDQ0sgKi8KKwlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgICA9IDB4MUZEMDsJLyogNiAtIDYwIE1CaXRzLCBubyA5LCBubyBDQ0sgKi8KKwlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlICA9IDB4MUZEMDsJLyogNiAtIDYwIE1CaXRzLCBubyA5LCBubyBDQ0sgKi8KKwlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlICA9IDB4MUZEMDsJLyogNiAtIDYwIE1CaXRzLCBubyA5LCBubyBDQ0sgKi8KIAogCUlXTF9ERUJVR19SQVRFKCJzdGFfaWQgJWQgcmF0ZSAweCVYXG4iLAotCQlscV9zdGEtPmxxLnN0YV9pZCwgbHFfc3RhLT5kYmdfZml4ZWQucmF0ZV9uX2ZsYWdzKTsKKwkJbHFfc3RhLT5scS5zdGFfaWQsIGxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUpOwogCi0JaWYgKGxxX3N0YS0+ZGJnX2ZpeGVkLnJhdGVfbl9mbGFncykgewotCQlyc19maWxsX2xpbmtfY21kKGxxX3N0YSwgJmxxX3N0YS0+ZGJnX2ZpeGVkLCAmbHFfc3RhLT5scSk7CisJaWYgKGxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUpIHsKKwkJcnNfZmlsbF9saW5rX2NtZChOVUxMLCBscV9zdGEsIGxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUpOwogCQlpd2xfc2VuZF9scV9jbWQobHFfc3RhLT5kcnYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwogCX0KIApAQCAtMjU2MSw5ICsyNDk4LDkgQEAKIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAic3RhX2lkICVkXG4iLCBscV9zdGEtPmxxLnN0YV9pZCk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImZhaWxlZD0lZCBzdWNjZXNzPSVkIHJhdGU9MCVYXG4iLAogCQkJbHFfc3RhLT50b3RhbF9mYWlsZWQsIGxxX3N0YS0+dG90YWxfc3VjY2VzcywKLQkJCWxxX3N0YS0+YWN0aXZlX3JhdGUpOworCQkJbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGUpOwogCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJmaXhlZCByYXRlIDB4JVhcbiIsCi0JCQlscV9zdGEtPmRiZ19maXhlZC5yYXRlX25fZmxhZ3MpOworCQkJbHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImdlbmVyYWw6IgogCQkiZmxhZ3M9MHglWCBtaW1vLWQ9JWQgcy1hbnQweCV4IGQtYW50PTB4JXhcbiIsCiAJCWxxX3N0YS0+bHEuZ2VuZXJhbF9wYXJhbXMuZmxhZ3MsCkBAIC0yNjEzLDcgKzI1NTAsNyBAQAogCQkJCWxxX3N0YS0+bHFfaW5mb1tpXS5pc19TR0ksCiAJCQkJbHFfc3RhLT5scV9pbmZvW2ldLmlzX2ZhdCwKIAkJCQlscV9zdGEtPmxxX2luZm9baV0uaXNfZHVwLAotCQkJCWxxX3N0YS0+bHFfaW5mb1tpXS5jdXJyZW50X3JhdGUucmF0ZV9uX2ZsYWdzKTsKKwkJCQlscV9zdGEtPmxxX2luZm9baV0uY3VycmVudF9yYXRlKTsKIAkJZm9yIChqID0gMDsgaiA8IElXTF9SQVRFX0NPVU5UOyBqKyspIHsKIAkJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsCiAJCQkJImNvdW50ZXI9JWQgc3VjY2Vzcz0lZCAlJT0lZFxuIiwKQEAgLTI2NDAsMTEgKzI1NzcsOSBAQAogCWxxX3N0YS0+cnNfc3RhX2RiZ2ZzX3N0YXRzX3RhYmxlX2ZpbGUgPQogCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyYXRlX3N0YXRzX3RhYmxlIiwgMDYwMCwgZGlyLAogCQkJbHFfc3RhLCAmcnNfc3RhX2RiZ2ZzX3N0YXRzX3RhYmxlX29wcyk7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIAlscV9zdGEtPnJzX3N0YV9kYmdmc190eF9hZ2dfdGlkX2VuX2ZpbGUgPQogCQlkZWJ1Z2ZzX2NyZWF0ZV91OCgidHhfYWdnX3RpZF9lbmFibGUiLCAwNjAwLCBkaXIsCiAJCSZscV9zdGEtPnR4X2FnZ190aWRfZW4pOwotI2VuZGlmCiAKIH0KIApAQCAtMjY1Myw5ICsyNTg4LDcgQEAKIAlzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSA9IHByaXZfc3RhOwogCWRlYnVnZnNfcmVtb3ZlKGxxX3N0YS0+cnNfc3RhX2RiZ2ZzX3NjYWxlX3RhYmxlX2ZpbGUpOwogCWRlYnVnZnNfcmVtb3ZlKGxxX3N0YS0+cnNfc3RhX2RiZ2ZzX3N0YXRzX3RhYmxlX2ZpbGUpOwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCiAJZGVidWdmc19yZW1vdmUobHFfc3RhLT5yc19zdGFfZGJnZnNfdHhfYWdnX3RpZF9lbl9maWxlKTsKLSNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTI3MDMsNyArMjYzNiw3IEBACiAJbHFfc3RhID0gKHZvaWQgKilzdGEtPnJhdGVfY3RybF9wcml2OwogCiAJbHFfdHlwZSA9IGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdLmxxX3R5cGU7Ci0JYW50ZW5uYSA9IGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdLmFudGVubmFfdHlwZTsKKwlhbnRlbm5hID0gbHFfc3RhLT5scV9pbmZvW2xxX3N0YS0+YWN0aXZlX3RibF0uYW50X3R5cGU7CiAKIAlpZiAoaXNfbGVnYWN5KGxxX3R5cGUpKQogCQlpID0gSVdMX1JBVEVfNTRNX0lOREVYOwpAQCAtMjcxNSw3ICsyNjQ4LDcgQEAKIAkJaW50IGFjdGl2ZSA9IGxxX3N0YS0+YWN0aXZlX3RibDsKIAogCQljbnQgKz0KLQkJICAgIHNwcmludGYoJmJ1ZltjbnRdLCAiICUyZE1iczogIiwgaXdsNDk2NV9yYXRlc1tpXS5pZWVlIC8gMik7CisJCSAgICBzcHJpbnRmKCZidWZbY250XSwgIiAlMmRNYnM6ICIsIGl3bF9yYXRlc1tpXS5pZWVlIC8gMik7CiAKIAkJbWFzayA9ICgxVUxMIDw8IChJV0xfUkFURV9NQVhfV0lORE9XIC0gMSkpOwogCQlmb3IgKGogPSAwOyBqIDwgSVdMX1JBVEVfTUFYX1dJTkRPVzsgaisrLCBtYXNrID4+PSAxKQpAQCAtMjcyNiw3ICsyNjU5LDcgQEAKIAkJc2FtcGxlcyArPSBscV9zdGEtPmxxX2luZm9bYWN0aXZlXS53aW5baV0uY291bnRlcjsKIAkJZ29vZCArPSBscV9zdGEtPmxxX2luZm9bYWN0aXZlXS53aW5baV0uc3VjY2Vzc19jb3VudGVyOwogCQlzdWNjZXNzICs9IGxxX3N0YS0+bHFfaW5mb1thY3RpdmVdLndpbltpXS5zdWNjZXNzX2NvdW50ZXIgKgotCQkJICAgaXdsNDk2NV9yYXRlc1tpXS5pZWVlOworCQkJICAgaXdsX3JhdGVzW2ldLmllZWU7CiAKIAkJaWYgKGxxX3N0YS0+bHFfaW5mb1thY3RpdmVdLndpbltpXS5zdGFtcCkgewogCQkJaW50IGRlbHRhID0KQEAgLTI3NDYsMTAgKzI2NzksMTEgQEAKIAkJaSA9IGo7CiAJfQogCi0JLyogRGlzcGxheSB0aGUgYXZlcmFnZSByYXRlIG9mIGFsbCBzYW1wbGVzIHRha2VuLgotCSAqCi0JICogTk9URTogIFdlIG11bHRpcGx5ICMgb2Ygc2FtcGxlcyBieSAyIHNpbmNlIHRoZSBJRUVFIG1lYXN1cmVtZW50Ci0JICogYWRkZWQgZnJvbSBpd2w0OTY1X3JhdGVzIGlzIGFjdHVhbGx5IDJYIHRoZSByYXRlICovCisJLyoKKwkgKiBEaXNwbGF5IHRoZSBhdmVyYWdlIHJhdGUgb2YgYWxsIHNhbXBsZXMgdGFrZW4uCisJICogTk9URTogV2UgbXVsdGlwbHkgIyBvZiBzYW1wbGVzIGJ5IDIgc2luY2UgdGhlIElFRUUgbWVhc3VyZW1lbnQKKwkgKiBhZGRlZCBmcm9tIGl3bF9yYXRlcyBpcyBhY3R1YWxseSAyWCB0aGUgcmF0ZS4KKwkgKi8KIAlpZiAoc2FtcGxlcykKIAkJY250ICs9IHNwcmludGYoJmJ1ZltjbnRdLAogCQkJICJcbkF2ZXJhZ2UgcmF0ZSBpcyAlM2QuJTAyZE1icyBvdmVyIGxhc3QgJTRkbXNcbiIKQEAgLTI3NjcsMTMgKzI3MDEsNiBAQAogCXJldHVybiBjbnQ7CiB9CiAKLXZvaWQgaXdsNDk2NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0KLQlwcml2LT5scV9tbmdyLmxxX3JlYWR5ID0gMTsKLX0KLQogaW50IGl3bDQ5NjVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpCiB7CiAJcmV0dXJuIGllZWU4MDIxMV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoJnJzX29wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LXJzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LXJzLmgKaW5kZXggODY2ZTM3OC4uOWI5OTcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtcnMuaApAQCAtMjcsMTIgKzI3LDEzIEBACiAjaWZuZGVmIF9faXdsXzQ5NjVfcnNfaF9fCiAjZGVmaW5lIF9faXdsXzQ5NjVfcnNfaF9fCiAKLSNpbmNsdWRlICJpd2wtNDk2NS5oIgorI2luY2x1ZGUgIml3bC1kZXYuaCIKIAotc3RydWN0IGl3bDQ5NjVfcmF0ZV9pbmZvIHsKK3N0cnVjdCBpd2xfcmF0ZV9pbmZvIHsKIAl1OCBwbGNwOwkvKiB1Q29kZSBBUEk6ICBJV0xfUkFURV82TV9QTENQLCBldGMuICovCiAJdTggcGxjcF9zaXNvOwkvKiB1Q29kZSBBUEk6ICBJV0xfUkFURV9TSVNPXzZNX1BMQ1AsIGV0Yy4gKi8KLQl1OCBwbGNwX21pbW87CS8qIHVDb2RlIEFQSTogIElXTF9SQVRFX01JTU9fNk1fUExDUCwgZXRjLiAqLworCXU4IHBsY3BfbWltbzI7CS8qIHVDb2RlIEFQSTogIElXTF9SQVRFX01JTU8yXzZNX1BMQ1AsIGV0Yy4gKi8KKwl1OCBwbGNwX21pbW8zOyAgLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfTUlNTzNfNk1fUExDUCwgZXRjLiAqLwogCXU4IGllZWU7CS8qIE1BQyBoZWFkZXI6ICBJV0xfUkFURV82TV9JRUVFLCBldGMuICovCiAJdTggcHJldl9pZWVlOyAgICAvKiBwcmV2aW91cyByYXRlIGluIElFRUUgc3BlZWRzICovCiAJdTggbmV4dF9pZWVlOyAgICAvKiBuZXh0IHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KQEAgLTQ0LDcgKzQ1LDcgQEAKIAogLyoKICAqIFRoZXNlIHNlcnZlIGFzIGluZGV4ZXMgaW50bwotICogc3RydWN0IGl3bDQ5NjVfcmF0ZV9pbmZvIGl3bDQ5NjVfcmF0ZXNbSVdMX1JBVEVfQ09VTlRdOworICogc3RydWN0IGl3bF9yYXRlX2luZm8gaXdsX3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKICAqLwogZW51bSB7CiAJSVdMX1JBVEVfMU1fSU5ERVggPSAwLApAQCAtNjAsOSArNjEsOSBAQAogCUlXTF9SQVRFXzQ4TV9JTkRFWCwKIAlJV0xfUkFURV81NE1fSU5ERVgsCiAJSVdMX1JBVEVfNjBNX0lOREVYLAotCUlXTF9SQVRFX0NPVU5ULAorCUlXTF9SQVRFX0NPVU5ULCAvKkZJWE1FOlJTOmNoYW5nZSB0byBJV0xfUkFURV9JTkRFWF9DT1VOVCwqLwogCUlXTF9SQVRFX0lOVk1fSU5ERVggPSBJV0xfUkFURV9DT1VOVCwKLQlJV0xfUkFURV9JTlZBTElEID0gSVdMX1JBVEVfSU5WTV9JTkRFWAorCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9DT1VOVCwKIH07CiAKIGVudW0gewpAQCAtOTcsMTEgKzk4LDEzIEBACiAJSVdMX1JBVEVfMzZNX1BMQ1AgPSAxMSwKIAlJV0xfUkFURV80OE1fUExDUCA9IDEsCiAJSVdMX1JBVEVfNTRNX1BMQ1AgPSAzLAotCUlXTF9SQVRFXzYwTV9QTENQID0gMywKKwlJV0xfUkFURV82ME1fUExDUCA9IDMsLypGSVhNRTpSUzpzaG91bGQgYmUgcmVtb3ZlZCovCiAJSVdMX1JBVEVfMU1fUExDUCAgPSAxMCwKIAlJV0xfUkFURV8yTV9QTENQICA9IDIwLAogCUlXTF9SQVRFXzVNX1BMQ1AgID0gNTUsCiAJSVdMX1JBVEVfMTFNX1BMQ1AgPSAxMTAsCisJLypGSVhNRTpSUzpjaGFuZ2UgdG8gSVdMX1JBVEVfTEVHQUNZXz8/TV9QTENQICovCisJLypGSVhNRTpSUzphZGQgSVdMX1JBVEVfTEVHQUNZX0lOVk1fUExDUCA9IDAsKi8KIH07CiAKIC8qIDQ5NjUgdUNvZGUgQVBJIHZhbHVlcyBmb3IgT0ZETSBoaWdoLXRocm91Z2hwdXQgKEhUKSBiaXQgcmF0ZXMgKi8KQEAgLTExNCwxNiArMTE3LDI1IEBACiAJSVdMX1JBVEVfU0lTT180OE1fUExDUCA9IDUsCiAJSVdMX1JBVEVfU0lTT181NE1fUExDUCA9IDYsCiAJSVdMX1JBVEVfU0lTT182ME1fUExDUCA9IDcsCi0JSVdMX1JBVEVfTUlNT182TV9QTENQICA9IDB4OCwKLQlJV0xfUkFURV9NSU1PXzEyTV9QTENQID0gMHg5LAotCUlXTF9SQVRFX01JTU9fMThNX1BMQ1AgPSAweGEsCi0JSVdMX1JBVEVfTUlNT18yNE1fUExDUCA9IDB4YiwKLQlJV0xfUkFURV9NSU1PXzM2TV9QTENQID0gMHhjLAotCUlXTF9SQVRFX01JTU9fNDhNX1BMQ1AgPSAweGQsCi0JSVdMX1JBVEVfTUlNT181NE1fUExDUCA9IDB4ZSwKLQlJV0xfUkFURV9NSU1PXzYwTV9QTENQID0gMHhmLAorCUlXTF9SQVRFX01JTU8yXzZNX1BMQ1AgID0gMHg4LAorCUlXTF9SQVRFX01JTU8yXzEyTV9QTENQID0gMHg5LAorCUlXTF9SQVRFX01JTU8yXzE4TV9QTENQID0gMHhhLAorCUlXTF9SQVRFX01JTU8yXzI0TV9QTENQID0gMHhiLAorCUlXTF9SQVRFX01JTU8yXzM2TV9QTENQID0gMHhjLAorCUlXTF9SQVRFX01JTU8yXzQ4TV9QTENQID0gMHhkLAorCUlXTF9SQVRFX01JTU8yXzU0TV9QTENQID0gMHhlLAorCUlXTF9SQVRFX01JTU8yXzYwTV9QTENQID0gMHhmLAorCUlXTF9SQVRFX01JTU8zXzZNX1BMQ1AgID0gMHgxMCwKKwlJV0xfUkFURV9NSU1PM18xMk1fUExDUCA9IDB4MTEsCisJSVdMX1JBVEVfTUlNTzNfMThNX1BMQ1AgPSAweDEyLAorCUlXTF9SQVRFX01JTU8zXzI0TV9QTENQID0gMHgxMywKKwlJV0xfUkFURV9NSU1PM18zNk1fUExDUCA9IDB4MTQsCisJSVdMX1JBVEVfTUlNTzNfNDhNX1BMQ1AgPSAweDE1LAorCUlXTF9SQVRFX01JTU8zXzU0TV9QTENQID0gMHgxNiwKKwlJV0xfUkFURV9NSU1PM182ME1fUExDUCA9IDB4MTcsCiAJSVdMX1JBVEVfU0lTT19JTlZNX1BMQ1AsCi0JSVdMX1JBVEVfTUlNT19JTlZNX1BMQ1AgPSBJV0xfUkFURV9TSVNPX0lOVk1fUExDUCwKKwlJV0xfUkFURV9NSU1PMl9JTlZNX1BMQ1AgPSBJV0xfUkFURV9TSVNPX0lOVk1fUExDUCwKKwlJV0xfUkFURV9NSU1PM19JTlZNX1BMQ1AgPSBJV0xfUkFURV9TSVNPX0lOVk1fUExDUCwKIH07CiAKIC8qIE1BQyBoZWFkZXIgdmFsdWVzIGZvciBiaXQgcmF0ZXMgKi8KQEAgLTE5NiwxMSArMjA4LDExIEBACiAvKiBwb3NzaWJsZSBhY3Rpb25zIHdoZW4gaW4gbGVnYWN5IG1vZGUgKi8KICNkZWZpbmUgSVdMX0xFR0FDWV9TV0lUQ0hfQU5URU5OQQkwCiAjZGVmaW5lIElXTF9MRUdBQ1lfU1dJVENIX1NJU08JCTEKLSNkZWZpbmUgSVdMX0xFR0FDWV9TV0lUQ0hfTUlNTwkgICAgICAgIDIKKyNkZWZpbmUgSVdMX0xFR0FDWV9TV0lUQ0hfTUlNTzIJCTIKIAogLyogcG9zc2libGUgYWN0aW9ucyB3aGVuIGluIHNpc28gbW9kZSAqLwogI2RlZmluZSBJV0xfU0lTT19TV0lUQ0hfQU5URU5OQQkJMAotI2RlZmluZSBJV0xfU0lTT19TV0lUQ0hfTUlNTwkJMQorI2RlZmluZSBJV0xfU0lTT19TV0lUQ0hfTUlNTzIJCTEKICNkZWZpbmUgSVdMX1NJU09fU1dJVENIX0dJCQkyCiAKIC8qIHBvc3NpYmxlIGFjdGlvbnMgd2hlbiBpbiBtaW1vIG1vZGUgKi8KQEAgLTIwOCw2ICsyMjAsMTAgQEAKICNkZWZpbmUgSVdMX01JTU9fU1dJVENIX0FOVEVOTkFfQgkxCiAjZGVmaW5lIElXTF9NSU1PX1NXSVRDSF9HSQkJMgogCisvKkZJWE1FOlJTOnNlcGFyYXRlIE1JTU8yLzMgdHJhbnNpdGlvbnMqLworCisvKkZJWE1FOlJTOmFkZCBwb3NpYmxlIGFjY3Rpb25zIGZvciBNSU1PMyovCisKICNkZWZpbmUgSVdMX0FDVElPTl9MSU1JVAkJMwkvKiAjIHBvc3NpYmxlIGFjdGlvbnMgKi8KIAogI2RlZmluZSBMUV9TSVpFCQkyCS8qIDIgbW9kZSB0YWJsZXM6ICAiQWN0aXZlIiBhbmQgIlNlYXJjaCIgKi8KQEAgLTIyNCw0MyArMjQwLDUyIEBACiAjZGVmaW5lIFRJRF9NQVhfVElNRV9ESUZGICgoVElEX1FVRVVFX01BWF9TSVpFIC0gMSkgKiBUSURfUVVFVUVfQ0VMTF9TUEFDSU5HKQogI2RlZmluZSBUSU1FX1dSQVBfQVJPVU5EKHgsIHkpICgoKHkpID4gKHgpKSA/ICh5KSAtICh4KSA6ICgwLSh4KSkgKyAoeSkpCiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsNDk2NV9yYXRlX2luZm8gaXdsNDk2NV9yYXRlc1tJV0xfUkFURV9DT1VOVF07CitleHRlcm4gY29uc3Qgc3RydWN0IGl3bF9yYXRlX2luZm8gaXdsX3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKIAotZW51bSBpd2w0OTY1X3RhYmxlX3R5cGUgeworZW51bSBpd2xfdGFibGVfdHlwZSB7CiAJTFFfTk9ORSwKIAlMUV9HLAkJLyogbGVnYWN5IHR5cGVzICovCiAJTFFfQSwKIAlMUV9TSVNPLAkvKiBoaWdoLXRocm91Z2hwdXQgdHlwZXMgKi8KLQlMUV9NSU1PLAorCUxRX01JTU8yLAorCUxRX01JTU8zLAogCUxRX01BWCwKIH07CiAKICNkZWZpbmUgaXNfbGVnYWN5KHRibCkgKCgodGJsKSA9PSBMUV9HKSB8fCAoKHRibCkgPT0gTFFfQSkpCi0jZGVmaW5lIGlzX3Npc28odGJsKSAoKCh0YmwpID09IExRX1NJU08pKQotI2RlZmluZSBpc19taW1vKHRibCkgKCgodGJsKSA9PSBMUV9NSU1PKSkKKyNkZWZpbmUgaXNfc2lzbyh0YmwpICgodGJsKSA9PSBMUV9TSVNPKQorI2RlZmluZSBpc19taW1vMih0YmwpICgodGJsKSA9PSBMUV9NSU1PMikKKyNkZWZpbmUgaXNfbWltbzModGJsKSAoKHRibCkgPT0gTFFfTUlNTzMpCisjZGVmaW5lIGlzX21pbW8odGJsKSAoaXNfbWltbzIodGJsKSB8fCBpc19taW1vMyh0YmwpKQogI2RlZmluZSBpc19IdCh0YmwpIChpc19zaXNvKHRibCkgfHwgaXNfbWltbyh0YmwpKQotI2RlZmluZSBpc19hX2JhbmQodGJsKSAoKCh0YmwpID09IExRX0EpKQotI2RlZmluZSBpc19nX2FuZCh0YmwpICgoKHRibCkgPT0gTFFfRykpCisjZGVmaW5lIGlzX2FfYmFuZCh0YmwpICgodGJsKSA9PSBMUV9BKQorI2RlZmluZSBpc19nX2FuZCh0YmwpICgodGJsKSA9PSBMUV9HKQogCi0vKiA0OTY1IGhhcyAyIGFudGVubmFzL2NoYWlucyBmb3IgVHggKGJ1dCAzIGZvciBSeCkgKi8KLWVudW0gaXdsNDk2NV9hbnRlbm5hX3R5cGUgewotCUFOVF9OT05FLAotCUFOVF9NQUlOLAotCUFOVF9BVVgsCi0JQU5UX0JPVEgsCi19OworI2RlZmluZQlBTlRfTk9ORQkweDAKKyNkZWZpbmUJQU5UX0EJCUJJVCgwKQorI2RlZmluZQlBTlRfQgkJQklUKDEpCisjZGVmaW5lCUFOVF9BQgkJKEFOVF9BIHwgQU5UX0IpCisjZGVmaW5lIEFOVF9DCQlCSVQoMikKKyNkZWZpbmUJQU5UX0FDCQkoQU5UX0EgfCBBTlRfQykKKyNkZWZpbmUgQU5UX0JDCQkoQU5UX0IgfCBBTlRfQykKKyNkZWZpbmUgQU5UX0FCQwkJKEFOVF9BQiB8IEFOVF9DKQorCitzdGF0aWMgaW5saW5lIHU4IG51bV9vZl9hbnQodTggbWFzaykKK3sKKwlyZXR1cm4gICEhKChtYXNrKSAmIEFOVF9BKSArCisJCSEhKChtYXNrKSAmIEFOVF9CKSArCisJCSEhKChtYXNrKSAmIEFOVF9DKTsKK30KIAogc3RhdGljIGlubGluZSB1OCBpd2w0OTY1X2dldF9wcmV2X2llZWVfcmF0ZSh1OCByYXRlX2luZGV4KQogewotCXU4IHJhdGUgPSBpd2w0OTY1X3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKKwl1OCByYXRlID0gaXdsX3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKIAogCWlmIChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpCiAJCXJhdGUgPSByYXRlX2luZGV4OwogCXJldHVybiByYXRlOwogfQogCi1leHRlcm4gaW50IGl3bDQ5NjVfaHdyYXRlX3RvX3BsY3BfaWR4KHUzMiByYXRlX25fZmxhZ3MpOwotCiAvKioKICAqIGl3bDQ5NjVfZmlsbF9yc19pbmZvIC0gRmlsbCBhbiBvdXRwdXQgdGV4dCBidWZmZXIgd2l0aCB0aGUgcmF0ZSByZXByZXNlbnRhdGlvbgogICoKQEAgLTI3MSwxNCArMjk2LDYgQEAKIGV4dGVybiBpbnQgaXdsNDk2NV9maWxsX3JzX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqLCBjaGFyICpidWYsIHU4IHN0YV9pZCk7CiAKIC8qKgotICogaXdsNDk2NV9yYXRlX3NjYWxlX2luaXQgLSBJbml0aWFsaXplIHRoZSByYXRlIHNjYWxlIHRhYmxlIGJhc2VkIG9uIGFzc29jIGluZm8KLSAqCi0gKiBUaGUgc3BlY2lmaWMgdGhyb3VnaHB1dCB0YWJsZSB1c2VkIGlzIGJhc2VkIG9uIHRoZSB0eXBlIG9mIG5ldHdvcmsKLSAqIHRoZSBhc3NvY2lhdGVkIHdpdGgsIGluY2x1ZGluZyBBLCBCLCBHLCBhbmQgRyB3LyBUR0cgcHJvdGVjdGlvbgotICovCi1leHRlcm4gdm9pZCBpd2w0OTY1X3JhdGVfc2NhbGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgczMyIHN0YV9pZCk7Ci0KLS8qKgogICogaXdsNDk2NV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSBjYWxsYmFja3MKICAqCiAgKiBTaW5jZSB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSBpcyBoYXJkd2FyZSBzcGVjaWZpYywgdGhlcmUgaXMgbm8gbmVlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IGRlMzMwYWUuLjlhZmVjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTM5LDgxICszOSwzMyBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKLSNpbmNsdWRlICJpd2wtNDk2NS5oIgorI2luY2x1ZGUgIml3bC1kZXYuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgogI2luY2x1ZGUgIml3bC1pby5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLWNhbGliLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorCitzdGF0aWMgaW50IGl3bDQ5NjVfc2VuZF90eF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworc3RhdGljIGludCBpd2w0OTY1X2h3X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCisvKiBDaGFuZ2UgZmlybXdhcmUgZmlsZSBuYW1lLCB1c2luZyAiLSIgYW5kIGluY3JlbWVudGluZyBudW1iZXIsCisgKiAgICpvbmx5KiB3aGVuIHVDb2RlIGludGVyZmFjZSBvciBhcmNoaXRlY3R1cmUgY2hhbmdlcyBzbyB0aGF0IGl0CisgKiAgIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggZWFybGllciBkcml2ZXJzLgorICogVGhpcyBudW1iZXIgd2lsbCBhbHNvIGFwcGVhciBpbiA8PCA4IHBvc2l0aW9uIG9mIDFzdCBkd29yZCBvZiB1Q29kZSBmaWxlICovCisjZGVmaW5lIElXTDQ5NjVfVUNPREVfQVBJICItMiIKKwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLwogc3RhdGljIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w0OTY1X21vZF9wYXJhbXMgPSB7Ci0JLm51bV9vZl9xdWV1ZXMgPSBJV0w0OTY1X01BWF9OVU1fUVVFVUVTLAorCS5udW1fb2ZfcXVldWVzID0gSVdMNDlfTlVNX1FVRVVFUywKKwkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTDQ5X05VTV9BTVBEVV9RVUVVRVMsCiAJLmVuYWJsZV9xb3MgPSAxLAogCS5hbXNkdV9zaXplXzhLID0gMSwKKwkucmVzdGFydF9mdyA9IDEsCiAJLyogdGhlIHJlc3QgYXJlIDAgYnkgZGVmYXVsdCAqLwogfTsKIAotc3RhdGljIHZvaWQgaXdsNDk2NV9od19jYXJkX3Nob3dfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCi0jZGVmaW5lIElXTF9ERUNMQVJFX1JBVEVfSU5GTyhyLCBzLCBpcCwgaW4sIHJwLCBybiwgcHAsIG5wKSAgICBcCi0JW0lXTF9SQVRFXyMjciMjTV9JTkRFWF0gPSB7IElXTF9SQVRFXyMjciMjTV9QTENQLCAgICAgIFwKLQkJCQkgICAgSVdMX1JBVEVfU0lTT18jI3MjI01fUExDUCwgXAotCQkJCSAgICBJV0xfUkFURV9NSU1PXyMjcyMjTV9QTENQLCBcCi0JCQkJICAgIElXTF9SQVRFXyMjciMjTV9JRUVFLCAgICAgIFwKLQkJCQkgICAgSVdMX1JBVEVfIyNpcCMjTV9JTkRFWCwgICAgXAotCQkJCSAgICBJV0xfUkFURV8jI2luIyNNX0lOREVYLCAgICBcCi0JCQkJICAgIElXTF9SQVRFXyMjcnAjI01fSU5ERVgsICAgIFwKLQkJCQkgICAgSVdMX1JBVEVfIyNybiMjTV9JTkRFWCwgICAgXAotCQkJCSAgICBJV0xfUkFURV8jI3BwIyNNX0lOREVYLCAgICBcCi0JCQkJICAgIElXTF9SQVRFXyMjbnAjI01fSU5ERVggfQotCi0vKgotICogUGFyYW1ldGVyIG9yZGVyOgotICogICByYXRlLCBodCByYXRlLCBwcmV2IHJhdGUsIG5leHQgcmF0ZSwgcHJldiB0Z2cgcmF0ZSwgbmV4dCB0Z2cgcmF0ZQotICoKLSAqIElmIHRoZXJlIGlzbid0IGEgdmFsaWQgbmV4dCBvciBwcmV2aW91cyByYXRlIHRoZW4gSU5WIGlzIHVzZWQgd2hpY2gKLSAqIG1hcHMgdG8gSVdMX1JBVEVfSU5WQUxJRAotICoKLSAqLwotY29uc3Qgc3RydWN0IGl3bDQ5NjVfcmF0ZV9pbmZvIGl3bDQ5NjVfcmF0ZXNbSVdMX1JBVEVfQ09VTlRdID0gewotCUlXTF9ERUNMQVJFX1JBVEVfSU5GTygxLCBJTlYsIElOViwgMiwgSU5WLCAyLCBJTlYsIDIpLCAgICAvKiAgMW1icHMgKi8KLQlJV0xfREVDTEFSRV9SQVRFX0lORk8oMiwgSU5WLCAxLCA1LCAxLCA1LCAxLCA1KSwgICAgICAgICAgLyogIDJtYnBzICovCi0JSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDUsIElOViwgMiwgNiwgMiwgMTEsIDIsIDExKSwgICAgICAgIC8qNS41bWJwcyAqLwotCUlXTF9ERUNMQVJFX1JBVEVfSU5GTygxMSwgSU5WLCA5LCAxMiwgOSwgMTIsIDUsIDE4KSwgICAgICAvKiAxMW1icHMgKi8KLQlJV0xfREVDTEFSRV9SQVRFX0lORk8oNiwgNiwgNSwgOSwgNSwgMTEsIDUsIDExKSwgICAgICAgIC8qICA2bWJwcyAqLwotCUlXTF9ERUNMQVJFX1JBVEVfSU5GTyg5LCA2LCA2LCAxMSwgNiwgMTEsIDUsIDExKSwgICAgICAgLyogIDltYnBzICovCi0JSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDEyLCAxMiwgMTEsIDE4LCAxMSwgMTgsIDExLCAxOCksICAgLyogMTJtYnBzICovCi0JSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDE4LCAxOCwgMTIsIDI0LCAxMiwgMjQsIDExLCAyNCksICAgLyogMThtYnBzICovCi0JSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDI0LCAyNCwgMTgsIDM2LCAxOCwgMzYsIDE4LCAzNiksICAgLyogMjRtYnBzICovCi0JSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDM2LCAzNiwgMjQsIDQ4LCAyNCwgNDgsIDI0LCA0OCksICAgLyogMzZtYnBzICovCi0JSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDQ4LCA0OCwgMzYsIDU0LCAzNiwgNTQsIDM2LCA1NCksICAgLyogNDhtYnBzICovCi0JSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDU0LCA1NCwgNDgsIElOViwgNDgsIElOViwgNDgsIElOViksLyogNTRtYnBzICovCi0JSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDYwLCA2MCwgNDgsIElOViwgNDgsIElOViwgNDgsIElOViksLyogNjBtYnBzICovCi19OwotCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLQotc3RhdGljIGNvbnN0IHUxNiBkZWZhdWx0X3RpZF90b190eF9maWZvW10gPSB7Ci0JSVdMX1RYX0ZJRk9fQUMxLAotCUlXTF9UWF9GSUZPX0FDMCwKLQlJV0xfVFhfRklGT19BQzAsCi0JSVdMX1RYX0ZJRk9fQUMxLAotCUlXTF9UWF9GSUZPX0FDMiwKLQlJV0xfVFhfRklGT19BQzIsCi0JSVdMX1RYX0ZJRk9fQUMzLAotCUlXTF9UWF9GSUZPX0FDMywKLQlJV0xfVFhfRklGT19OT05FLAotCUlXTF9UWF9GSUZPX05PTkUsCi0JSVdMX1RYX0ZJRk9fTk9ORSwKLQlJV0xfVFhfRklGT19OT05FLAotCUlXTF9UWF9GSUZPX05PTkUsCi0JSVdMX1RYX0ZJRk9fTk9ORSwKLQlJV0xfVFhfRklGT19OT05FLAotCUlXTF9UWF9GSUZPX05PTkUsCi0JSVdMX1RYX0ZJRk9fQUMzCi19OwotCi0jZW5kaWYJLypDT05GSUdfSVdMNDk2NV9IVCAqLwotCiAvKiBjaGVjayBjb250ZW50cyBvZiBzcGVjaWFsIGJvb3RzdHJhcCB1Q29kZSBTUkFNICovCiBzdGF0aWMgaW50IGl3bDQ5NjVfdmVyaWZ5X2JzbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC0xOTIsMTUgKzE0NCwxOCBAQAogCiAJSVdMX0RFQlVHX0lORk8oIkJlZ2luIGxvYWQgYnNtXG4iKTsKIAorCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9SVDsKKwogCS8qIG1ha2Ugc3VyZSBib290c3RyYXAgcHJvZ3JhbSBpcyBubyBsYXJnZXIgdGhhbiBCU00ncyBTUkFNIHNpemUgKi8KIAlpZiAobGVuID4gSVdMX01BWF9CU01fU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIHRoZSAiSW5pdGlhbGl6ZSIgdUNvZGUKIAkgKiAgIGluIGhvc3QgRFJBTSAuLi4gaG9zdCBEUkFNIHBoeXNpY2FsIGFkZHJlc3MgYml0cyAzNTo0IGZvciA0OTY1LgotCSAqIE5PVEU6ICBpd2w0OTY1X2luaXRpYWxpemVfYWxpdmVfc3RhcnQoKSB3aWxsIHJlcGxhY2UgdGhlc2UgdmFsdWVzLAorCSAqIE5PVEU6ICBpd2xfaW5pdF9hbGl2ZV9zdGFydCgpIHdpbGwgcmVwbGFjZSB0aGVzZSB2YWx1ZXMsCiAJICogICAgICAgIGFmdGVyIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgaGFzIHJ1biwgdG8gcG9pbnQgdG8KLQkgKiAgICAgICAgcnVudGltZS9wcm90b2NvbCBpbnN0cnVjdGlvbnMgYW5kIGJhY2t1cCBkYXRhIGNhY2hlLiAqLworCSAqICAgICAgICBydW50aW1lL3Byb3RvY29sIGluc3RydWN0aW9ucyBhbmQgYmFja3VwIGRhdGEgY2FjaGUuCisJICovCiAJcGluc3QgPSBwcml2LT51Y29kZV9pbml0LnBfYWRkciA+PiA0OwogCXBkYXRhID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLnBfYWRkciA+PiA0OwogCWluc3RfbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47CkBAIC0yNTksNjE2ICsyMTQsMjY5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXdsNDk2NV9pbml0X2RydihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCisvKioKKyAqIGl3bDQ5NjVfc2V0X3Vjb2RlX3B0cnMgLSBTZXQgdUNvZGUgYWRkcmVzcyBsb2NhdGlvbgorICoKKyAqIFRlbGwgaW5pdGlhbGl6YXRpb24gdUNvZGUgd2hlcmUgdG8gZmluZCBydW50aW1lIHVDb2RlLgorICoKKyAqIEJTTSByZWdpc3RlcnMgaW5pdGlhbGx5IGNvbnRhaW4gcG9pbnRlcnMgdG8gaW5pdGlhbGl6YXRpb24gdUNvZGUuCisgKiBXZSBuZWVkIHRvIHJlcGxhY2UgdGhlbSB0byBsb2FkIHJ1bnRpbWUgdUNvZGUgaW5zdCBhbmQgZGF0YSwKKyAqIGFuZCB0byBzYXZlIHJ1bnRpbWUgZGF0YSB3aGVuIHBvd2VyaW5nIGRvd24uCisgKi8KK3N0YXRpYyBpbnQgaXdsNDk2NV9zZXRfdWNvZGVfcHRycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHJldDsKLQlpbnQgaTsKKwlkbWFfYWRkcl90IHBpbnN0OworCWRtYV9hZGRyX3QgcGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKIAotCXByaXYtPmFudGVubmEgPSAoZW51bSBpd2w0OTY1X2FudGVubmEpcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5hbnRlbm5hOwotCXByaXYtPnJldHJ5X3JhdGUgPSAxOwotCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKKwkvKiBiaXRzIDM1OjQgZm9yIDQ5NjUgKi8KKwlwaW5zdCA9IHByaXYtPnVjb2RlX2NvZGUucF9hZGRyID4+IDQ7CisJcGRhdGEgPSBwcml2LT51Y29kZV9kYXRhX2JhY2t1cC5wX2FkZHIgPj4gNDsKIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cG93ZXJfZGF0YS5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3RhX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZwcml2LT5oY21kX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZwcml2LT5scV9tbmdyLmxvY2spOwotCi0JcHJpdi0+c2hhcmVkX3ZpcnQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAotCQkJCQlzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2hhcmVkKSwKLQkJCQkJJnByaXYtPnNoYXJlZF9waHlzKTsKLQotCWlmICghcHJpdi0+c2hhcmVkX3ZpcnQpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI7Ci0JfQotCi0JbWVtc2V0KHByaXYtPnNoYXJlZF92aXJ0LCAwLCBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2hhcmVkKSk7Ci0KLQotCWZvciAoaSA9IDA7IGkgPCBJV0xfSUJTU19NQUNfSEFTSF9TSVpFOyBpKyspCi0JCUlOSVRfTElTVF9IRUFEKCZwcml2LT5pYnNzX21hY19oYXNoW2ldKTsKLQotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7Ci0KLQltdXRleF9pbml0KCZwcml2LT5tdXRleCk7Ci0KLQkvKiBDbGVhciB0aGUgZHJpdmVyJ3MgKG5vdCBkZXZpY2Uncykgc3RhdGlvbiB0YWJsZSAqLwotCWl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7Ci0KLQlwcml2LT5kYXRhX3JldHJ5X2xpbWl0ID0gLTE7Ci0JcHJpdi0+aWVlZV9jaGFubmVscyA9IE5VTEw7Ci0JcHJpdi0+aWVlZV9yYXRlcyA9IE5VTEw7Ci0JcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0KLQlwcml2LT5pd19tb2RlID0gSUVFRTgwMjExX0lGX1RZUEVfU1RBOwotCi0JcHJpdi0+dXNlX2FudF9iX2Zvcl9tYW5hZ2VtZW50X2ZyYW1lID0gMTsgLyogc3RhcnQgd2l0aCBhbnQgQiAqLwotCXByaXYtPnZhbGlkX2FudGVubmEgPSAweDc7CS8qIGFzc3VtZSBhbGwgMyBjb25uZWN0ZWQgKi8KLQlwcml2LT5wc19tb2RlID0gSVdMX01JTU9fUFNfTk9ORTsKLQotCS8qIENob29zZSB3aGljaCByZWNlaXZlcnMvYW50ZW5uYXMgdG8gdXNlICovCi0JaXdsNDk2NV9zZXRfcnhvbl9jaGFpbihwcml2KTsKLQotCWl3bGNvcmVfcmVzZXRfcW9zKHByaXYpOwotCi0JcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDA7Ci0JcHJpdi0+cW9zX2RhdGEucW9zX2NhcC52YWwgPSAwOwotCi0JaXdsY29yZV9zZXRfcnhvbl9jaGFubmVsKHByaXYsIElFRUU4MDIxMV9CQU5EXzJHSFosIDYpOwotCi0JcHJpdi0+cmF0ZXNfbWFzayA9IElXTF9SQVRFU19NQVNLOwotCS8qIElmIHBvd2VyIG1hbmFnZW1lbnQgaXMgdHVybmVkIG9uLCBkZWZhdWx0IHRvIEFDIG1vZGUgKi8KLQlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0FDOwotCXByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9IElXTF9ERUZBVUxUX1RYX1BPV0VSOwotCi0JcmV0ID0gaXdsX2luaXRfY2hhbm5lbF9tYXAocHJpdik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGl3bDQ5NjVfaW5pdF9nZW9zKHByaXYpOwotCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgZ2VvcyBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9mcmVlX2NoYW5uZWxfbWFwOwotCX0KKwkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIGltYWdlIHRvIGxvYWQgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX1BUUl9SRUcsIHBkYXRhKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsCisJCQkJIHByaXYtPnVjb2RlX2RhdGEubGVuKTsKIAotCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBuZXR3b3JrIGRldmljZSAoZXJyb3IgJWQpXG4iLAotCQkJCXJldCk7Ci0JCWdvdG8gZXJyX2ZyZWVfZ2VvczsKLQl9CisJLyogSW5zdCBieXRlY291bnQgbXVzdCBiZSBsYXN0IHRvIHNldCB1cCwgYml0IDMxIHNpZ25hbHMgdUNvZGUKKwkgKiAgIHRoYXQgYWxsIG5ldyBwdHIvc2l6ZSBpbmZvIGlzIGluIHBsYWNlICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLAorCQkJCSBwcml2LT51Y29kZV9jb2RlLmxlbiB8IEJTTV9EUkFNX0lOU1RfTE9BRCk7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAotCXByaXYtPmh3LT5jb25mLmJlYWNvbl9pbnQgPSAxMDA7Ci0JcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgdUNvZGUgcG9pbnRlcnMgYXJlIHNldC5cbiIpOwogCi1lcnJfZnJlZV9nZW9zOgotCWl3bDQ5NjVfZnJlZV9nZW9zKHByaXYpOwotZXJyX2ZyZWVfY2hhbm5lbF9tYXA6Ci0JaXdsX2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7Ci1lcnI6CiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBpd2w0OTY1X2luaXRfYWxpdmVfc3RhcnQgLSBDYWxsZWQgYWZ0ZXIgUkVQTFlfQUxJVkUgbm90aWZpY2F0aW9uIHJlY2VpdmVkCisgKgorICogQ2FsbGVkIGFmdGVyIFJFUExZX0FMSVZFIG5vdGlmaWNhdGlvbiByZWNlaXZlZCBmcm9tICJpbml0aWFsaXplIiB1Q29kZS4KKyAqCisgKiBUaGUgNDk2NSAiaW5pdGlhbGl6ZSIgQUxJVkUgcmVwbHkgY29udGFpbnMgY2FsaWJyYXRpb24gZGF0YSBmb3I6CisgKiAgIFZvbHRhZ2UsIHRlbXBlcmF0dXJlLCBhbmQgTUlNTyB0eCBnYWluIGNvcnJlY3Rpb24sIG5vdyBzdG9yZWQgaW4gcHJpdgorICogICAoMzk0NSBkb2VzIG5vdCBjb250YWluIHRoaXMgZGF0YSkuCisgKgorICogVGVsbCAiaW5pdGlhbGl6ZSIgdUNvZGUgdG8gZ28gYWhlYWQgYW5kIGxvYWQgdGhlIHJ1bnRpbWUgdUNvZGUuCisqLworc3RhdGljIHZvaWQgaXdsNDk2NV9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwkvKiBDaGVjayBhbGl2ZSByZXNwb25zZSBmb3IgInZhbGlkIiBzaWduIGZyb20gdUNvZGUgKi8KKwlpZiAocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CisJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKKwkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KKwkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgQWxpdmUgZmFpbGVkLlxuIik7CisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwkvKiBCb290c3RyYXAgdUNvZGUgaGFzIGxvYWRlZCBpbml0aWFsaXplIHVDb2RlIC4uLiB2ZXJpZnkgaW5zdCBpbWFnZS4KKwkgKiBUaGlzIGlzIGEgcGFyYW5vaWQgY2hlY2ssIGJlY2F1c2Ugd2Ugd291bGQgbm90IGhhdmUgZ290dGVuIHRoZQorCSAqICJpbml0aWFsaXplIiBhbGl2ZSBpZiBjb2RlIHdlcmVuJ3QgcHJvcGVybHkgbG9hZGVkLiAgKi8KKwlpZiAoaXdsX3ZlcmlmeV91Y29kZShwcml2KSkgeworCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKKwkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLworCQlJV0xfREVCVUdfSU5GTygiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKKwkJZ290byByZXN0YXJ0OworCX0KKworCS8qIENhbGN1bGF0ZSB0ZW1wZXJhdHVyZSAqLworCXByaXYtPnRlbXBlcmF0dXJlID0gaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUocHJpdik7CisKKwkvKiBTZW5kIHBvaW50ZXJzIHRvIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgaW1hZ2UgLi4uIGluaXQgY29kZSB3aWxsCisJICogbG9hZCBhbmQgbGF1bmNoIHJ1bnRpbWUgdUNvZGUsIHdoaWNoIHdpbGwgc2VuZCB1cyBhbm90aGVyICJBbGl2ZSIKKwkgKiBub3RpZmljYXRpb24uICovCisJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJaWYgKGl3bDQ5NjVfc2V0X3Vjb2RlX3B0cnMocHJpdikpIHsKKwkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdvbid0IGhhcHBlbjsKKwkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLworCQlJV0xfREVCVUdfSU5GTygiQ291bGRuJ3Qgc2V0IHVwIHVDb2RlIHBvaW50ZXJzLlxuIik7CisJCWdvdG8gcmVzdGFydDsKKwl9CisJcmV0dXJuOworCityZXN0YXJ0OgorCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Cit9CisKIHN0YXRpYyBpbnQgaXNfZmF0X2NoYW5uZWwoX19sZTMyIHJ4b25fZmxhZ3MpCiB7CiAJcmV0dXJuIChyeG9uX2ZsYWdzICYgUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX1BVUkVfNDBfTVNLKSB8fAogCQkocnhvbl9mbGFncyAmIFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0spOwogfQogCi1zdGF0aWMgdTggaXNfc2luZ2xlX3N0cmVhbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCisvKgorICogRUVQUk9NIGhhbmRsZXJzCisgKi8KKworc3RhdGljIGludCBpd2w0OTY1X2VlcHJvbV9jaGVja192ZXJzaW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCWlmICghcHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQgfHwKLQkgICAgKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnN1cHBfbWNzX3NldFsxXSA9PSAwKSB8fAotCSAgICAocHJpdi0+cHNfbW9kZSA9PSBJV0xfTUlNT19QU19TVEFUSUMpKQotCQlyZXR1cm4gMTsKLSNlbHNlCi0JcmV0dXJuIDE7Ci0jZW5kaWYJLypDT05GSUdfSVdMNDk2NV9IVCAqLworCXUxNiBlZXByb21fdmVyOworCXUxNiBjYWxpYl92ZXI7CisKKwllZXByb21fdmVyID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9WRVJTSU9OKTsKKworCWNhbGliX3ZlciA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fNDk2NV9DQUxJQl9WRVJTSU9OX09GRlNFVCk7CisKKwlpZiAoZWVwcm9tX3ZlciA8IEVFUFJPTV80OTY1X0VFUFJPTV9WRVJTSU9OIHx8CisJICAgIGNhbGliX3ZlciA8IEVFUFJPTV80OTY1X1RYX1BPV0VSX1ZFUlNJT04pCisJCWdvdG8gZXJyOworCiAJcmV0dXJuIDA7CitlcnI6CisJSVdMX0VSUk9SKCJVbnN1cG9ydGVkIEVFUFJPTSBWRVI9MHgleCA8IDB4JXggQ0FMSUI9MHgleCA8IDB4JXhcbiIsCisJCSAgZWVwcm9tX3ZlciwgRUVQUk9NXzQ5NjVfRUVQUk9NX1ZFUlNJT04sCisJCSAgY2FsaWJfdmVyLCBFRVBST01fNDk2NV9UWF9QT1dFUl9WRVJTSU9OKTsKKwlyZXR1cm4gLUVJTlZBTDsKKwogfQotCi1pbnQgaXdsNDk2NV9od3JhdGVfdG9fcGxjcF9pZHgodTMyIHJhdGVfbl9mbGFncykKK2ludCBpd2w0OTY1X3NldF9wd3Jfc3JjKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgZW51bSBpd2xfcHdyX3NyYyBzcmMpCiB7Ci0JaW50IGlkeCA9IDA7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogNDk2NSBIVCByYXRlIGZvcm1hdCAqLwotCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19IVF9NU0spIHsKLQkJaWR4ID0gKHJhdGVfbl9mbGFncyAmIDB4ZmYpOwotCi0JCWlmIChpZHggPj0gSVdMX1JBVEVfTUlNT182TV9QTENQKQotCQkJaWR4ID0gaWR4IC0gSVdMX1JBVEVfTUlNT182TV9QTENQOwotCi0JCWlkeCArPSBJV0xfRklSU1RfT0ZETV9SQVRFOwotCQkvKiBza2lwIDlNIG5vdCBzdXBwb3J0ZWQgaW4gaHQqLwotCQlpZiAoaWR4ID49IElXTF9SQVRFXzlNX0lOREVYKQotCQkJaWR4ICs9IDE7Ci0JCWlmICgoaWR4ID49IElXTF9GSVJTVF9PRkRNX1JBVEUpICYmIChpZHggPD0gSVdMX0xBU1RfT0ZETV9SQVRFKSkKLQkJCXJldHVybiBpZHg7Ci0KLQkvKiA0OTY1IGxlZ2FjeSByYXRlIGZvcm1hdCwgc2VhcmNoIGZvciBtYXRjaCBpbiB0YWJsZSAqLwotCX0gZWxzZSB7Ci0JCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShpd2w0OTY1X3JhdGVzKTsgaWR4KyspCi0JCQlpZiAoaXdsNDk2NV9yYXRlc1tpZHhdLnBsY3AgPT0gKHJhdGVfbl9mbGFncyAmIDB4RkYpKQotCQkJCXJldHVybiBpZHg7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldHVybiAtMTsKLX0KKwlpZiAoc3JjID09IElXTF9QV1JfU1JDX1ZBVVgpIHsKKwkJdTMyIHZhbDsKKwkJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9QT1dFUl9TT1VSQ0UsCisJCQkJCSAgICAmdmFsKTsKIAotLyoqCi0gKiB0cmFuc2xhdGUgdWNvZGUgcmVzcG9uc2UgdG8gbWFjODAyMTEgdHggc3RhdHVzIGNvbnRyb2wgdmFsdWVzCi0gKi8KLXZvaWQgaXdsNDk2NV9od3JhdGVfdG9fdHhfY29udHJvbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByYXRlX25fZmxhZ3MsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCi17Ci0JaW50IHJhdGVfaW5kZXg7CisJCWlmICh2YWwgJiBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCkgeworCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAorCQkJCQkgICAgICAgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX1ZBVVgsCisJCQkJCSAgICAgICB+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKKwkJfQorCX0gZWxzZSB7CisJCWl3bF9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJCQkgICAgICAgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX1ZNQUlOLAorCQkJCSAgICAgICB+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKKwl9CiAKLQljb250cm9sLT5hbnRlbm5hX3NlbF90eCA9Ci0JCSgocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfQU5UX0FCX01TSykgPj4gUkFURV9NQ1NfQU5UX1BPUyk7Ci0JaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUX01TSykKLQkJY29udHJvbC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX09GRE1fSFQ7Ci0JaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0dGX01TSykKLQkJY29udHJvbC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX0dSRUVOX0ZJRUxEOwotCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19GQVRfTVNLKQotCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfNDBfTUhaX1dJRFRIOwotCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19EVVBfTVNLKQotCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfRFVQX0RBVEE7Ci0JaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX1NHSV9NU0spCi0JCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9TSE9SVF9HSTsKLQkvKiBzaW5jZSBpd2w0OTY1X2h3cmF0ZV90b19wbGNwX2lkeCBpcyBiYW5kIGluZGlmZmVyZW50LCB3ZSBhbHdheXMgdXNlCi0JICogSUVFRTgwMjExX0JBTkRfMkdIWiBiYW5kIGFzIGl0IGNvbnRhaW5zIGFsbCB0aGUgcmF0ZXMgKi8KLQlyYXRlX2luZGV4ID0gaXdsNDk2NV9od3JhdGVfdG9fcGxjcF9pZHgocmF0ZV9uX2ZsYWdzKTsKLQlpZiAocmF0ZV9pbmRleCA9PSAtMSkKLQkJY29udHJvbC0+dHhfcmF0ZSA9IE5VTEw7Ci0JZWxzZQotCQljb250cm9sLT50eF9yYXRlID0KLQkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5iaXRyYXRlc1tyYXRlX2luZGV4XTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgaG93IG1hbnkgcmVjZWl2ZXIvYW50ZW5uYSBjaGFpbnMgdG8gdXNlLgotICogTW9yZSBwcm92aWRlcyBiZXR0ZXIgcmVjZXB0aW9uIHZpYSBkaXZlcnNpdHkuICBGZXdlciBzYXZlcyBwb3dlci4KLSAqIE1JTU8gKGR1YWwgc3RyZWFtKSByZXF1aXJlcyBhdCBsZWFzdCAyLCBidXQgd29ya3MgYmV0dGVyIHdpdGggMy4KLSAqIFRoaXMgZG9lcyBub3QgZGV0ZXJtaW5lICp3aGljaCogY2hhaW5zIHRvIHVzZSwganVzdCBob3cgbWFueS4KKyAqIEFjdGl2YXRlL0RlYWN0aXZhdCBUeCBETUEvRklGTyBjaGFubmVscyBhY2NvcmRpbmcgdHggZmlmb3MgbWFzaworICogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcHJpdi0+bG9jayBhbmQgbWFjIGFjY2VzcwogICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfZ2V0X3J4X2NoYWluX2NvdW50ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQl1OCAqaWRsZV9zdGF0ZSwgdTggKnJ4X3N0YXRlKQorc3RhdGljIHZvaWQgaXdsNDk2NV90eHFfc2V0X3NjaGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG1hc2spCiB7Ci0JdTggaXNfc2luZ2xlID0gaXNfc2luZ2xlX3N0cmVhbShwcml2KTsKLQl1OCBpc19jYW0gPSB0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSA/IDAgOiAxOwotCi0JLyogIyBvZiBSeCBjaGFpbnMgdG8gdXNlIHdoZW4gZXhwZWN0aW5nIE1JTU8uICovCi0JaWYgKGlzX3NpbmdsZSB8fCAoIWlzX2NhbSAmJiAocHJpdi0+cHNfbW9kZSA9PSBJV0xfTUlNT19QU19TVEFUSUMpKSkKLQkJKnJ4X3N0YXRlID0gMjsKLQllbHNlCi0JCSpyeF9zdGF0ZSA9IDM7Ci0KLQkvKiAjIFJ4IGNoYWlucyB3aGVuIGlkbGluZyBhbmQgbWF5YmUgdHJ5aW5nIHRvIHNhdmUgcG93ZXIgKi8KLQlzd2l0Y2ggKHByaXYtPnBzX21vZGUpIHsKLQljYXNlIElXTF9NSU1PX1BTX1NUQVRJQzoKLQljYXNlIElXTF9NSU1PX1BTX0RZTkFNSUM6Ci0JCSppZGxlX3N0YXRlID0gKGlzX2NhbSkgPyAyIDogMTsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfTUlNT19QU19OT05FOgotCQkqaWRsZV9zdGF0ZSA9IChpc19jYW0pID8gKnJ4X3N0YXRlIDogMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKmlkbGVfc3RhdGUgPSAxOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w0OV9TQ0RfVFhGQUNULCBtYXNrKTsKIH0KIAotaW50IGl3bDQ5NjVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X2FwbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcmM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQkvKiBzdG9wIFJ4IERNQSAqLwotCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fUkNTUl9DSE5MMF9DT05GSUdfUkVHLCAwKTsKLQlyYyA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgRkhfTUVNX1JTU1JfUlhfU1RBVFVTX1JFRywKLQkJCQkgICAgICgxIDw8IDI0KSwgMTAwMCk7Ci0JaWYgKHJjIDwgMCkKLQkJSVdMX0VSUk9SKCJDYW4ndCBzdG9wIFJ4IERNQS5cbiIpOwotCi0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdTggaXdsNDk2NV9od19maW5kX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkcikKLXsKLQlpbnQgaTsKLQlpbnQgc3RhcnQgPSAwOwotCWludCByZXQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0KLQlpZiAoKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgfHwKLQkgICAgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApKQotCQlzdGFydCA9IElXTF9TVEFfSUQ7Ci0KLQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspCi0JCWlmICgocHJpdi0+c3RhdGlvbnNbaV0udXNlZCkgJiYKLQkJICAgICghY29tcGFyZV9ldGhlcl9hZGRyCi0JCSAgICAgKHByaXYtPnN0YXRpb25zW2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7Ci0JCQlyZXQgPSBpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCUlXTF9ERUJVR19BU1NPQ19MSU1JVCgiY2FuIG5vdCBmaW5kIFNUQSAlcyB0b3RhbCAlZFxuIiwKLQkJCXByaW50X21hYyhtYWMsIGFkZHIpLCBwcml2LT5udW1fc3RhdGlvbnMpOwotCi0gb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpd2w0OTY1X25pY19zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBwd3JfbWF4KQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmV0KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoIXB3cl9tYXgpIHsKLQkJdTMyIHZhbDsKLQotCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocHJpdi0+cGNpX2RldiwgUENJX1BPV0VSX1NPVVJDRSwKLQkJCQkJICAgJnZhbCk7Ci0KLQkJaWYgKHZhbCAmIFBDSV9DRkdfUE1DX1BNRV9GUk9NX0QzQ09MRF9TVVBQT1JUKQotCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAotCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUFdSX1NSQ19WQVVYLAotCQkJCX5BUE1HX1BTX0NUUkxfTVNLX1BXUl9TUkMpOwotCX0gZWxzZQotCQlpd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcsCi0JCQlBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVk1BSU4sCi0JCQl+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKLQotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpd2w0OTY1X3J4X2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV9yeF9xdWV1ZSAqcnhxKQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgcmJfc2l6ZTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmV0KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5hbXNkdV9zaXplXzhLKQotCQlyYl9zaXplID0gRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SQl9TSVpFXzhLOwotCWVsc2UKLQkJcmJfc2l6ZSA9IEZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkJfU0laRV80SzsKLQotCS8qIFN0b3AgUnggRE1BICovCi0JaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcsIDApOwotCi0JLyogUmVzZXQgZHJpdmVyJ3MgUnggcXVldWUgd3JpdGUgaW5kZXggKi8KLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfV1BUUl9SRUcsIDApOwotCi0JLyogVGVsbCBkZXZpY2Ugd2hlcmUgdG8gZmluZCBSQkQgY2lyY3VsYXIgYnVmZmVyIGluIERSQU0gKi8KLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfQkFTRV9SRUcsCi0JCQkgICByeHEtPmRtYV9hZGRyID4+IDgpOwotCi0JLyogVGVsbCBkZXZpY2Ugd2hlcmUgaW4gRFJBTSB0byB1cGRhdGUgaXRzIFJ4IHN0YXR1cyAqLwotCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9TVFRTX1dQVFJfUkVHLAotCQkJICAgKHByaXYtPnNoYXJlZF9waHlzICsKLQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaXdsNDk2NV9zaGFyZWQsIHJiX2Nsb3NlZCkpID4+IDQpOwotCi0JLyogRW5hYmxlIFJ4IERNQSwgZW5hYmxlIGhvc3QgaW50ZXJydXB0LCBSeCBidWZmZXIgc2l6ZSA0aywgMjU2IFJCRHMgKi8KLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfTUVNX1JDU1JfQ0hOTDBfQ09ORklHX1JFRywKLQkJCSAgIEZIX1JDU1JfUlhfQ09ORklHX0NITkxfRU5fRU5BQkxFX1ZBTCB8Ci0JCQkgICBGSF9SQ1NSX0NITkwwX1JYX0NPTkZJR19JUlFfREVTVF9JTlRfSE9TVF9WQUwgfAotCQkJICAgcmJfc2l6ZSB8Ci0JCQkgICAgIC8qIDB4MTAgPDwgNCB8ICovCi0JCQkgICAoUlhfUVVFVUVfU0laRV9MT0cgPDwKLQkJCSAgICAgIEZIX1JDU1JfUlhfQ09ORklHX1JCRENCX1NJWkVfQklUU0hJRlQpKTsKLQotCS8qCi0JICogaXdsX3dyaXRlMzIocHJpdixDU1JfSU5UX0NPQUxfUkVHLDApOwotCSAqLwotCi0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVGVsbCA0OTY1IHdoZXJlIHRvIGZpbmQgdGhlICJrZWVwIHdhcm0iIGJ1ZmZlciAqLwotc3RhdGljIGludCBpd2w0OTY1X2t3X2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKQotCQlnb3RvIG91dDsKLQotCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBJV0xfRkhfS1dfTUVNX0FERFJfUkVHLAotCQkJICAgICBwcml2LT5rdy5kbWFfYWRkciA+PiA0KTsKLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsNDk2NV9rd19hbGxvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0Jc3RydWN0IGl3bDQ5NjVfa3cgKmt3ID0gJnByaXYtPmt3OwotCi0Ja3ctPnNpemUgPSBJV0w0OTY1X0tXX1NJWkU7CS8qIFRCVyBuZWVkIHNldCBzb21ld2hlcmUgZWxzZSAqLwotCWt3LT52X2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIGt3LT5zaXplLCAma3ctPmRtYV9hZGRyKTsKLQlpZiAoIWt3LT52X2FkZHIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsNDk2NV9rd19mcmVlIC0gRnJlZSB0aGUgImtlZXAgd2FybSIgYnVmZmVyCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfa3dfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0Jc3RydWN0IGl3bDQ5NjVfa3cgKmt3ID0gJnByaXYtPmt3OwotCi0JaWYgKGt3LT52X2FkZHIpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIGt3LT5zaXplLCBrdy0+dl9hZGRyLCBrdy0+ZG1hX2FkZHIpOwotCQltZW1zZXQoa3csIDAsIHNpemVvZigqa3cpKTsKLQl9Ci19Ci0KLS8qKgotICogaXdsNDk2NV90eHFfY3R4X3Jlc2V0IC0gUmVzZXQgVFggcXVldWUgY29udGV4dAotICogRGVzdHJveXMgYWxsIERNQSBzdHJ1Y3R1cmVzIGFuZCBpbml0aWFsaXNlIHRoZW0gYWdhaW4KLSAqCi0gKiBAcGFyYW0gcHJpdgotICogQHJldHVybiBlcnJvciBjb2RlCi0gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV90eHFfY3R4X3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmMgPSAwOwotCWludCB0eHFfaWQsIHNsb3RzX251bTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaXdsNDk2NV9rd19mcmVlKHByaXYpOwotCi0JLyogRnJlZSBhbGwgdHgvY21kIHF1ZXVlcyBhbmQga2VlcC13YXJtIGJ1ZmZlciAqLwotCWl3bDQ5NjVfaHdfdHhxX2N0eF9mcmVlKHByaXYpOwotCi0JLyogQWxsb2Mga2VlcC13YXJtIGJ1ZmZlciAqLwotCXJjID0gaXdsNDk2NV9rd19hbGxvYyhwcml2KTsKLQlpZiAocmMpIHsKLQkJSVdMX0VSUk9SKCJLZWVwIFdhcm0gYWxsb2NhdGlvbiBmYWlsZWQiKTsKLQkJZ290byBlcnJvcl9rdzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmICh1bmxpa2VseShyYykpIHsKLQkJSVdMX0VSUk9SKCJUWCByZXNldCBmYWlsZWQiKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlnb3RvIGVycm9yX3Jlc2V0OwotCX0KLQotCS8qIFR1cm4gb2ZmIGFsbCBUeCBETUEgY2hhbm5lbHMgKi8KLQlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w0OV9TQ0RfVFhGQUNULCAwKTsKLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFRlbGwgNDk2NSB3aGVyZSB0byBmaW5kIHRoZSBrZWVwLXdhcm0gYnVmZmVyICovCi0JcmMgPSBpd2w0OTY1X2t3X2luaXQocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigia3dfaW5pdCBmYWlsZWRcbiIpOwotCQlnb3RvIGVycm9yX3Jlc2V0OwotCX0KLQotCS8qIEFsbG9jIGFuZCBpbml0IGFsbCAoZGVmYXVsdCAxNikgVHggcXVldWVzLAotCSAqIGluY2x1ZGluZyB0aGUgY29tbWFuZCBxdWV1ZSAoIzQpICovCi0JZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKSB7Ci0JCXNsb3RzX251bSA9ICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pID8KLQkJCQkJVEZEX0NNRF9TTE9UUyA6IFRGRF9UWF9DTURfU0xPVFM7Ci0JCXJjID0gaXdsNDk2NV90eF9xdWV1ZV9pbml0KHByaXYsICZwcml2LT50eHFbdHhxX2lkXSwgc2xvdHNfbnVtLAotCQkJCSAgICAgICB0eHFfaWQpOwotCQlpZiAocmMpIHsKLQkJCUlXTF9FUlJPUigiVHggJWQgcXVldWUgaW5pdCBmYWlsZWRcbiIsIHR4cV9pZCk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotCi0gZXJyb3I6Ci0JaXdsNDk2NV9od190eHFfY3R4X2ZyZWUocHJpdik7Ci0gZXJyb3JfcmVzZXQ6Ci0JaXdsNDk2NV9rd19mcmVlKHByaXYpOwotIGVycm9yX2t3OgotCXJldHVybiByYzsKLX0KLQotaW50IGl3bDQ5NjVfaHdfbmljX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCByYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwotCXU4IHJldl9pZDsKLQl1MzIgdmFsOwotCXU4IHZhbF9saW5rOwotCi0JaXdsNDk2NV9wb3dlcl9pbml0X2hhbmRsZShwcml2KTsKLQotCS8qIG5pY19pbml0ICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpbnQgcmV0ID0gMDsKIAogCWl3bF9zZXRfYml0KHByaXYsIENTUl9HSU9fQ0hJQ0tFTl9CSVRTLAotCQkgICAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9ESVNfTDBTX0VYSVRfVElNRVIpOworCQkJICBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUik7CiAKKwkvKiBkaXNhYmxlIEwwcyB3aXRob3V0IGFmZmVjdGluZyBMMSA6ZG9uJ3Qgd2FpdCBmb3IgSUNIIEwwcyBidWcgVy9BKSAqLworCWl3bF9zZXRfYml0KHByaXYsIENTUl9HSU9fQ0hJQ0tFTl9CSVRTLAorCQkJICBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0wxQV9OT19MMFNfUlgpOworCisJLyogc2V0ICJpbml0aWFsaXphdGlvbiBjb21wbGV0ZSIgYml0IHRvIG1vdmUgYWRhcHRlcgorCSAqIEQwVSogLS0+IEQwQSogc3RhdGUgKi8KIAlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOwotCXJjID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKLQkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwKLQkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwotCWlmIChyYyA8IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyogd2FpdCBmb3IgY2xvY2sgc3RhYmlsaXphdGlvbiAqLworCXJldCA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJCQkgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLAorCQkJICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCWlmIChyZXQgPCAwKSB7CiAJCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7Ci0JCXJldHVybiByYzsKKwkJZ290byBvdXQ7CiAJfQogCi0JcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiByYzsKLQl9CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAotCWl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcpOwotCi0JaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcsCi0JCQlBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfCBBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOwotCWl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcpOworCS8qIGVuYWJsZSBETUEgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19DVFJMX1JFRywgQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUIHwKKwkJCQkJCUFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVCk7CiAKIAl1ZGVsYXkoMjApOwogCisJLyogZGlzYWJsZSBMMS1BY3RpdmUgKi8KIAlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBBUE1HX1BDSURFVl9TVFRfUkVHLAotCQkJCUFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUyk7CisJCQkgIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUyk7CiAKIAlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfQ09BTEVTQ0lORywgNTEyIC8gMzIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQogCi0JLyogRGV0ZXJtaW5lIEhXIHR5cGUgKi8KLQlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHByaXYtPnBjaV9kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldl9pZCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKLQlJV0xfREVCVUdfSU5GTygiSFcgUmV2aXNpb24gSUQgPSAweCVYXG4iLCByZXZfaWQpOworc3RhdGljIHZvaWQgaXdsNDk2NV9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisJdTE2IHJhZGlvX2NmZzsKKwl1OCB2YWxfbGluazsKIAotCWl3bDQ5NjVfbmljX3NldF9wd3Jfc3JjKHByaXYsIDEpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoKHJldl9pZCAmIDB4ODApID09IDB4ODAgJiYgKHJldl9pZCAmIDB4N2YpIDwgOCkgeworCWlmICgocHJpdi0+cmV2X2lkICYgMHg4MCkgPT0gMHg4MCAmJiAocHJpdi0+cmV2X2lkICYgMHg3ZikgPCA4KSB7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfUkVHX1dVTTgsICZ2YWwpOwogCQkvKiBFbmFibGUgTm8gU25vb3AgZmllbGQgKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfUkVHX1dVTTgsCiAJCQkJICAgICAgIHZhbCAmIH4oMSA8PCAxMSkpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwcml2LT5lZXByb20uY2FsaWJfdmVyc2lvbiA8IEVFUFJPTV9UWF9QT1dFUl9WRVJTSU9OX05FVykgewotCQlJV0xfRVJST1IoIk9sZGVyIEVFUFJPTSBkZXRlY3RlZCEgIEFib3J0aW5nLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHByaXYtPnBjaV9kZXYsIFBDSV9MSU5LX0NUUkwsICZ2YWxfbGluayk7CiAKLQkvKiBkaXNhYmxlIEwxIGVudHJ5IC0tIHdvcmthcm91bmQgZm9yIHByZS1CMSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwcml2LT5wY2lfZGV2LCBQQ0lfTElOS19DVFJMLCB2YWxfbGluayAmIH4weDAyKTsKKwkvKiBMMSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KKwlpZiAoKHZhbF9saW5rICYgUENJX0xJTktfVkFMX0wxX0VOKSA9PSBQQ0lfTElOS19WQUxfTDFfRU4pCisJCS8qIGRpYWJsZSBMMFMgZGlzYWJsZWQgTDFBIGVuYWJsZWQgKi8KKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19SRUcsIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7CisJZWxzZQorCQkvKiBMMFMgZW5hYmxlZCBMMUEgZGlzYWJsZWQgKi8KKwkJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR0lPX1JFRywgQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmFkaW9fY2ZnID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9SQURJT19DT05GSUcpOworCisJLyogd3JpdGUgcmFkaW8gY29uZmlnIHZhbHVlcyB0byByZWdpc3RlciAqLworCWlmIChFRVBST01fUkZfQ0ZHX1RZUEVfTVNLKHJhZGlvX2NmZykgPT0gRUVQUk9NXzQ5NjVfUkZfQ0ZHX1RZUEVfTUFYKQorCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCSAgICBFRVBST01fUkZfQ0ZHX1RZUEVfTVNLKHJhZGlvX2NmZykgfAorCQkJICAgIEVFUFJPTV9SRl9DRkdfU1RFUF9NU0socmFkaW9fY2ZnKSB8CisJCQkgICAgRUVQUk9NX1JGX0NGR19EQVNIX01TSyhyYWRpb19jZmcpKTsKIAogCS8qIHNldCBDU1JfSFdfQ09ORklHX1JFRyBmb3IgdUNvZGUgdXNlICovCi0KIAlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJICAgIENTUjQ5X0hXX0lGX0NPTkZJR19SRUdfQklUXzQ5NjVfUiB8Ci0JCSAgICBDU1I0OV9IV19JRl9DT05GSUdfUkVHX0JJVF9SQURJT19TSSB8Ci0JCSAgICBDU1I0OV9IV19JRl9DT05GSUdfUkVHX0JJVF9NQUNfU0kpOworCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX1JBRElPX1NJIHwKKwkJICAgIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9NQUNfU0kpOwogCi0JcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYyA8IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JaXdsX3JlYWRfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHKTsKLQlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLCBBUE1HX1BTX0NUUkxfVkFMX1JFU0VUX1JFUSk7Ci0JdWRlbGF5KDUpOwotCWl3bF9jbGVhcl9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywgQVBNR19QU19DVFJMX1ZBTF9SRVNFVF9SRVEpOwotCi0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpd2w0OTY1X2h3X2NhcmRfc2hvd19pbmZvKHByaXYpOwotCi0JLyogZW5kIG5pY19pbml0ICovCi0KLQkvKiBBbGxvY2F0ZSB0aGUgUlggcXVldWUsIG9yIHJlc2V0IGlmIGl0IGlzIGFscmVhZHkgYWxsb2NhdGVkICovCi0JaWYgKCFyeHEtPmJkKSB7Ci0JCXJjID0gaXdsNDk2NV9yeF9xdWV1ZV9hbGxvYyhwcml2KTsKLQkJaWYgKHJjKSB7Ci0JCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFJ4IHF1ZXVlXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfSBlbHNlCi0JCWl3bDQ5NjVfcnhfcXVldWVfcmVzZXQocHJpdiwgcnhxKTsKLQotCWl3bDQ5NjVfcnhfcmVwbGVuaXNoKHByaXYpOwotCi0JaXdsNDk2NV9yeF9pbml0KHByaXYsIHJ4cSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JcnhxLT5uZWVkX3VwZGF0ZSA9IDE7Ci0JaXdsNDk2NV9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CisJcHJpdi0+Y2FsaWJfaW5mbyA9IChzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9pbmZvICopCisJCWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBFRVBST01fNDk2NV9DQUxJQl9UWFBPV0VSX09GRlNFVCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBBbGxvY2F0ZSBhbmQgaW5pdCBhbGwgVHggYW5kIENvbW1hbmQgcXVldWVzICovCi0JcmMgPSBpd2w0OTY1X3R4cV9jdHhfcmVzZXQocHJpdik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAocHJpdi0+ZWVwcm9tLnNrdV9jYXAgJiBFRVBST01fU0tVX0NBUF9TV19SRl9LSUxMX0VOQUJMRSkKLQkJSVdMX0RFQlVHX1JGX0tJTEwoIlNXIFJGIEtJTEwgc3VwcG9ydGVkIGluIEVFUFJPTS5cbiIpOwotCi0JaWYgKHByaXYtPmVlcHJvbS5za3VfY2FwICYgRUVQUk9NX1NLVV9DQVBfSFdfUkZfS0lMTF9FTkFCTEUpCi0JCUlXTF9ERUJVR19SRl9LSUxMKCJIVyBSRiBLSUxMIHN1cHBvcnRlZCBpbiBFRVBST00uXG4iKTsKLQotCXNldF9iaXQoU1RBVFVTX0lOSVQsICZwcml2LT5zdGF0dXMpOwotCi0JcmV0dXJuIDA7CiB9CiAKLWludCBpd2w0OTY1X2h3X25pY19zdG9wX21hc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfYXBtX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcmMgPSAwOwotCXUzMiByZWdfdmFsOworCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtODc2LDY0ICs0ODQsMjQgQEAKIAkvKiBzZXQgc3RvcCBtYXN0ZXIgYml0ICovCiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1RPUF9NQVNURVIpOwogCi0JcmVnX3ZhbCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKLQotCWlmIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX1BPV0VSX1NBVkUgPT0KLQkgICAgKHJlZ192YWwgJiBDU1JfR1BfQ05UUkxfUkVHX01TS19QT1dFUl9TQVZFX1RZUEUpKQotCQlJV0xfREVCVUdfSU5GTygiQ2FyZCBpbiBwb3dlciBzYXZlLCBtYXN0ZXIgaXMgYWxyZWFkeSAiCi0JCQkgICAgICAgInN0b3BwZWRcbiIpOwotCWVsc2UgewotCQlyYyA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfUkVTRVQsCisJcmV0ID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9SRVNFVCwKIAkJCQkgIENTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsCiAJCQkJICBDU1JfUkVTRVRfUkVHX0ZMQUdfTUFTVEVSX0RJU0FCTEVELCAxMDApOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCitvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCUlXTF9ERUJVR19JTkZPKCJzdG9wIG1hc3RlclxuIik7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAotLyoqCi0gKiBpd2w0OTY1X2h3X3R4cV9jdHhfc3RvcCAtIFN0b3AgYWxsIFR4IERNQSBjaGFubmVscywgZnJlZSBUeCBxdWV1ZSBtZW1vcnkKLSAqLwotdm9pZCBpd2w0OTY1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X2FwbV9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQotCWludCB0eHFfaWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIFN0b3AgZWFjaCBUeCBETUEgY2hhbm5lbCwgYW5kIHdhaXQgZm9yIGl0IHRvIGJlIGlkbGUgKi8KLQlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsCi0JCQkJICAgSVdMX0ZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKHR4cV9pZCksIDB4MCk7Ci0JCWl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgSVdMX0ZIX1RTU1JfVFhfU1RBVFVTX1JFRywKLQkJCQkgICAgSVdMX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19NU0tfQ0hOTF9JRExFCi0JCQkJICAgICh0eHFfaWQpLCAyMDApOwotCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JfQotCi0JLyogRGVhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbCBUeCBxdWV1ZXMgKi8KLQlpd2w0OTY1X2h3X3R4cV9jdHhfZnJlZShwcml2KTsKLX0KLQotaW50IGl3bDQ5NjVfaHdfbmljX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmMgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpd2w0OTY1X2h3X25pY19zdG9wX21hc3Rlcihwcml2KTsKKwlpd2w0OTY1X2FwbV9zdG9wX21hc3Rlcihwcml2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTk0Miw1MDggKzUxMCw2NiBAQAogCXVkZWxheSgxMCk7CiAKIAlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOwotCXJjID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9SRVNFVCwKLQkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwKLQkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBpd2w0OTY1X2FwbV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWl3bDQ5NjVfYXBtX3N0b3BfbWFzdGVyKHByaXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKIAogCXVkZWxheSgxMCk7CiAKLQlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKCFyYykgewotCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsCi0JCQkJQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUIHwKLQkJCQlBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOworCS8qIEZJWE1FOiBwdXQgaGVyZSBMMUEgLUwwUyB3L2EgKi8KIAotCQl1ZGVsYXkoMTApOworCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7CiAKLQkJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKLQkJCQkJQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTKTsKKwlyZXQgPSBpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX1JFU0VULAorCQkJICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLAorCQkJICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNSk7CiAKLQkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQl9CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwl1ZGVsYXkoMTApOworCisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwkvKiBFbmFibGUgRE1BIGFuZCBCU00gQ2xvY2sgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8CisJCQkJCSAgICAgIEFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVCk7CisKKwl1ZGVsYXkoMTApOworCisJLyogZGlzYWJsZSBMMUEgKi8KKwlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBBUE1HX1BDSURFVl9TVFRfUkVHLAorCQkJICBBUE1HX1BDSURFVl9TVFRfVkFMX0wxX0FDVF9ESVMpOworCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAorb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiByYzsKLQotfQotCi0jZGVmaW5lIFJFR19SRUNBTElCX1BFUklPRCAoNjApCi0KLS8qKgotICogaXdsNDk2NV9iZ19zdGF0aXN0aWNzX3BlcmlvZGljIC0gVGltZXIgY2FsbGJhY2sgdG8gcXVldWUgc3RhdGlzdGljcwotICoKLSAqIFRoaXMgY2FsbGJhY2sgaXMgcHJvdmlkZWQgaW4gb3JkZXIgdG8gc2VuZCBhIHN0YXRpc3RpY3MgcmVxdWVzdC4KLSAqCi0gKiBUaGlzIHRpbWVyIGZ1bmN0aW9uIGlzIGNvbnRpbnVhbGx5IHJlc2V0IHRvIGV4ZWN1dGUgd2l0aGluCi0gKiBSRUdfUkVDQUxJQl9QRVJJT0Qgc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCBTVEFUSVNUSUNTX05PVElGSUNBVElPTgotICogd2FzIHJlY2VpdmVkLiAgV2UgbmVlZCB0byBlbnN1cmUgd2UgcmVjZWl2ZSB0aGUgc3RhdGlzdGljcyBpbiBvcmRlcgotICogdG8gdXBkYXRlIHRoZSB0ZW1wZXJhdHVyZSB1c2VkIGZvciBjYWxpYnJhdGluZyB0aGUgVFhQT1dFUi4KLSAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19zdGF0aXN0aWNzX3BlcmlvZGljKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZGF0YTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9BU1lOQyk7Ci19Ci0KLSNkZWZpbmUgQ1RfTElNSVRfQ09OU1QJCTI1OQotI2RlZmluZSBUTV9DVF9LSUxMX1RIUkVTSE9MRAkxMTAKLQotdm9pZCBpd2w0OTY1X3JmX2tpbGxfY3RfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9jdF9raWxsX2NvbmZpZyBjbWQ7Ci0JdTMyIFIxLCBSMiwgUjM7Ci0JdTMyIHRlbXBfdGg7Ci0JdTMyIGNyaXRfdGVtcGVyYXR1cmU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLAotCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfUkVHX0JJVF9DVF9LSUxMX0VYSVQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwcml2LT5zdGF0aXN0aWNzLmZsYWcgJiBTVEFUSVNUSUNTX1JFUExZX0ZMR19GQVRfTU9ERV9NU0spIHsKLQkJUjEgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yMVsxXSk7Ci0JCVIyID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjJbMV0pOwotCQlSMyA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IzWzFdKTsKLQl9IGVsc2UgewotCQlSMSA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IxWzBdKTsKLQkJUjIgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yMlswXSk7Ci0JCVIzID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjNbMF0pOwotCX0KLQotCXRlbXBfdGggPSBDRUxTSVVTX1RPX0tFTFZJTihUTV9DVF9LSUxMX1RIUkVTSE9MRCk7Ci0KLQljcml0X3RlbXBlcmF0dXJlID0gKCh0ZW1wX3RoICogKFIzLVIxKSkvQ1RfTElNSVRfQ09OU1QpICsgUjI7Ci0JY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IgPSAgY3B1X3RvX2xlMzIoY3JpdF90ZW1wZXJhdHVyZSk7Ci0JcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQsCi0JCQkgICAgICAgc2l6ZW9mKGNtZCksICZjbWQpOwotCWlmIChyZXQpCi0JCUlXTF9FUlJPUigiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIGZhaWxlZFxuIik7Ci0JZWxzZQotCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZFxuIik7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9TRU5TSVRJVklUWQotCi0vKiAiZmFsc2UgYWxhcm1zIiBhcmUgc2lnbmFscyB0aGF0IG91ciBEU1AgdHJpZXMgdG8gbG9jayBvbnRvLAotICogICBidXQgdGhlbiBkZXRlcm1pbmVzIHRoYXQgdGhleSBhcmUgZWl0aGVyIG5vaXNlLCBvciB0cmFuc21pc3Npb25zCi0gKiAgIGZyb20gYSBkaXN0YW50IHdpcmVsZXNzIG5ldHdvcmsgKGFsc28gIm5vaXNlIiwgcmVhbGx5KSB0aGF0IGdldAotICogICAic3RlcHBlZCBvbiIgYnkgc3Ryb25nZXIgdHJhbnNtaXNzaW9ucyB3aXRoaW4gb3VyIG93biBuZXR3b3JrLgotICogVGhpcyBhbGdvcml0aG0gYXR0ZW1wdHMgdG8gc2V0IGEgc2Vuc2l0aXZpdHkgbGV2ZWwgdGhhdCBpcyBoaWdoCi0gKiAgIGVub3VnaCB0byByZWNlaXZlIGFsbCBvZiBvdXIgb3duIG5ldHdvcmsgdHJhZmZpYywgYnV0IG5vdCBzbwotICogICBoaWdoIHRoYXQgb3VyIERTUCBnZXRzIHRvbyBidXN5IHRyeWluZyB0byBsb2NrIG9udG8gbm9uLW5ldHdvcmsKLSAqICAgYWN0aXZpdHkvbm9pc2UuICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2Vuc19lbmVyZ3lfY2NrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICB1MzIgbm9ybV9mYSwKLQkJCQkgICB1MzIgcnhfZW5hYmxlX3RpbWUsCi0JCQkJICAgc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9kYXRhICpyeF9pbmZvKQotewotCXUzMiBtYXhfbnJnX2NjayA9IDA7Ci0JaW50IGkgPSAwOwotCXU4IG1heF9zaWxlbmNlX3Jzc2kgPSAwOwotCXUzMiBzaWxlbmNlX3JlZiA9IDA7Ci0JdTggc2lsZW5jZV9yc3NpX2EgPSAwOwotCXU4IHNpbGVuY2VfcnNzaV9iID0gMDsKLQl1OCBzaWxlbmNlX3Jzc2lfYyA9IDA7Ci0JdTMyIHZhbDsKLQotCS8qICJmYWxzZV9hbGFybXMiIHZhbHVlcyBiZWxvdyBhcmUgY3Jvc3MtbXVsdGlwbGljYXRpb25zIHRvIGFzc2VzcyB0aGUKLQkgKiAgIG51bWJlcnMgb2YgZmFsc2UgYWxhcm1zIHdpdGhpbiB0aGUgbWVhc3VyZWQgcGVyaW9kIG9mIGFjdHVhbCBSeAotCSAqICAgKFJ4IGlzIG9mZiB3aGVuIHdlJ3JlIHR4aW5nKSwgdnMgdGhlIG1pbi9tYXggZXhwZWN0ZWQgZmFsc2UgYWxhcm1zCi0JICogICAoc29tZSBzaG91bGQgYmUgZXhwZWN0ZWQgaWYgcnggaXMgc2Vuc2l0aXZlIGVub3VnaCkgaW4gYQotCSAqICAgaHlwb3RoZXRpY2FsIGxpc3RlbmluZyBwZXJpb2Qgb2YgMjAwIHRpbWUgdW5pdHMgKFRVKSwgMjA0LjggbXNlYzoKLQkgKgotCSAqIE1JTl9GQS9maXhlZC10aW1lIDwgZmFsc2VfYWxhcm1zL2FjdHVhbC1yeC10aW1lIDwgTUFYX0ZBL2JlYWNvbi10aW1lCi0JICoKLQkgKiAqLwotCXUzMiBmYWxzZV9hbGFybXMgPSBub3JtX2ZhICogMjAwICogMTAyNDsKLQl1MzIgbWF4X2ZhbHNlX2FsYXJtcyA9IE1BWF9GQV9DQ0sgKiByeF9lbmFibGVfdGltZTsKLQl1MzIgbWluX2ZhbHNlX2FsYXJtcyA9IE1JTl9GQV9DQ0sgKiByeF9lbmFibGVfdGltZTsKLQlzdHJ1Y3QgaXdsNDk2NV9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKLQotCWRhdGEgPSAmKHByaXYtPnNlbnNpdGl2aXR5X2RhdGEpOwotCi0JZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYgPSAwOwotCi0JLyogRmluZCBtYXggc2lsZW5jZSByc3NpIGFtb25nIGFsbCAzIHJlY2VpdmVycy4KLQkgKiBUaGlzIGlzIGJhY2tncm91bmQgbm9pc2UsIHdoaWNoIG1heSBpbmNsdWRlIHRyYW5zbWlzc2lvbnMgZnJvbSBvdGhlcgotCSAqICAgIG5ldHdvcmtzLCBtZWFzdXJlZCBkdXJpbmcgc2lsZW5jZSBiZWZvcmUgb3VyIG5ldHdvcmsncyBiZWFjb24gKi8KLQlzaWxlbmNlX3Jzc2lfYSA9ICh1OCkoKHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSAmCi0JCQkgICAgQUxMX0JBTkRfRklMVEVSKSA+PiA4KTsKLQlzaWxlbmNlX3Jzc2lfYiA9ICh1OCkoKHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiAmCi0JCQkgICAgQUxMX0JBTkRfRklMVEVSKSA+PiA4KTsKLQlzaWxlbmNlX3Jzc2lfYyA9ICh1OCkoKHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYyAmCi0JCQkgICAgQUxMX0JBTkRfRklMVEVSKSA+PiA4KTsKLQotCXZhbCA9IG1heChzaWxlbmNlX3Jzc2lfYiwgc2lsZW5jZV9yc3NpX2MpOwotCW1heF9zaWxlbmNlX3Jzc2kgPSBtYXgoc2lsZW5jZV9yc3NpX2EsICh1OCkgdmFsKTsKLQotCS8qIFN0b3JlIHNpbGVuY2UgcnNzaSBpbiAyMC1iZWFjb24gaGlzdG9yeSB0YWJsZSAqLwotCWRhdGEtPm5yZ19zaWxlbmNlX3Jzc2lbZGF0YS0+bnJnX3NpbGVuY2VfaWR4XSA9IG1heF9zaWxlbmNlX3Jzc2k7Ci0JZGF0YS0+bnJnX3NpbGVuY2VfaWR4Kys7Ci0JaWYgKGRhdGEtPm5yZ19zaWxlbmNlX2lkeCA+PSBOUkdfTlVNX1BSRVZfU1RBVF9MKQotCQlkYXRhLT5ucmdfc2lsZW5jZV9pZHggPSAwOwotCi0JLyogRmluZCBtYXggc2lsZW5jZSByc3NpIGFjcm9zcyAyMCBiZWFjb24gaGlzdG9yeSAqLwotCWZvciAoaSA9IDA7IGkgPCBOUkdfTlVNX1BSRVZfU1RBVF9MOyBpKyspIHsKLQkJdmFsID0gZGF0YS0+bnJnX3NpbGVuY2VfcnNzaVtpXTsKLQkJc2lsZW5jZV9yZWYgPSBtYXgoc2lsZW5jZV9yZWYsIHZhbCk7Ci0JfQotCUlXTF9ERUJVR19DQUxJQigic2lsZW5jZSBhICV1LCBiICV1LCBjICV1LCAyMC1iY24gbWF4ICV1XG4iLAotCQkJc2lsZW5jZV9yc3NpX2EsIHNpbGVuY2VfcnNzaV9iLCBzaWxlbmNlX3Jzc2lfYywKLQkJCXNpbGVuY2VfcmVmKTsKLQotCS8qIEZpbmQgbWF4IHJ4IGVuZXJneSAobWluIHZhbHVlISkgYW1vbmcgYWxsIDMgcmVjZWl2ZXJzLAotCSAqICAgbWVhc3VyZWQgZHVyaW5nIGJlYWNvbiBmcmFtZS4KLQkgKiBTYXZlIGl0IGluIDEwLWJlYWNvbiBoaXN0b3J5IHRhYmxlLiAqLwotCWkgPSBkYXRhLT5ucmdfZW5lcmd5X2lkeDsKLQl2YWwgPSBtaW4ocnhfaW5mby0+YmVhY29uX2VuZXJneV9iLCByeF9pbmZvLT5iZWFjb25fZW5lcmd5X2MpOwotCWRhdGEtPm5yZ192YWx1ZVtpXSA9IG1pbihyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2EsIHZhbCk7Ci0KLQlkYXRhLT5ucmdfZW5lcmd5X2lkeCsrOwotCWlmIChkYXRhLT5ucmdfZW5lcmd5X2lkeCA+PSAxMCkKLQkJZGF0YS0+bnJnX2VuZXJneV9pZHggPSAwOwotCi0JLyogRmluZCBtaW4gcnggZW5lcmd5IChtYXggdmFsdWUpIGFjcm9zcyAxMCBiZWFjb24gaGlzdG9yeS4KLQkgKiBUaGlzIGlzIHRoZSBtaW5pbXVtIHNpZ25hbCBsZXZlbCB0aGF0IHdlIHdhbnQgdG8gcmVjZWl2ZSB3ZWxsLgotCSAqIEFkZCBiYWNrb2ZmIChtYXJnaW4gc28gd2UgZG9uJ3QgbWlzcyBzbGlnaHRseSBsb3dlciBlbmVyZ3kgZnJhbWVzKS4KLQkgKiBUaGlzIGVzdGFibGlzaGVzIGFuIHVwcGVyIGJvdW5kIChtaW4gdmFsdWUpIGZvciBlbmVyZ3kgdGhyZXNob2xkLiAqLwotCW1heF9ucmdfY2NrID0gZGF0YS0+bnJnX3ZhbHVlWzBdOwotCWZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKQotCQltYXhfbnJnX2NjayA9ICh1MzIpIG1heChtYXhfbnJnX2NjaywgKGRhdGEtPm5yZ192YWx1ZVtpXSkpOwotCW1heF9ucmdfY2NrICs9IDY7Ci0KLQlJV0xfREVCVUdfQ0FMSUIoInJ4IGVuZXJneSBhICV1LCBiICV1LCBjICV1LCAxMC1iY24gbWF4L21pbiAldVxuIiwKLQkJCXJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYSwgcnhfaW5mby0+YmVhY29uX2VuZXJneV9iLAotCQkJcnhfaW5mby0+YmVhY29uX2VuZXJneV9jLCBtYXhfbnJnX2NjayAtIDYpOwotCi0JLyogQ291bnQgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGJlYWNvbnMgd2l0aCBmZXdlci10aGFuLWRlc2lyZWQKLQkgKiAgIGZhbHNlIGFsYXJtcy4gKi8KLQlpZiAoZmFsc2VfYWxhcm1zIDwgbWluX2ZhbHNlX2FsYXJtcykKLQkJZGF0YS0+bnVtX2luX2Nja19ub19mYSsrOwotCWVsc2UKLQkJZGF0YS0+bnVtX2luX2Nja19ub19mYSA9IDA7Ci0JSVdMX0RFQlVHX0NBTElCKCJjb25zZWN1dGl2ZSBiY25zIHdpdGggZmV3IGZhbHNlIGFsYXJtcyA9ICV1XG4iLAotCQkJZGF0YS0+bnVtX2luX2Nja19ub19mYSk7Ci0KLQkvKiBJZiB3ZSBnb3QgdG9vIG1hbnkgZmFsc2UgYWxhcm1zIHRoaXMgdGltZSwgcmVkdWNlIHNlbnNpdGl2aXR5ICovCi0JaWYgKGZhbHNlX2FsYXJtcyA+IG1heF9mYWxzZV9hbGFybXMpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1ID4gbWF4IEZBICV1XG4iLAotCQkJICAgICBmYWxzZV9hbGFybXMsIG1heF9mYWxzZV9hbGFybXMpOwotCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiByZWR1Y2luZyBzZW5zaXRpdml0eVxuIik7Ci0JCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX1RPT19NQU5ZOwotCi0JCWlmIChkYXRhLT5hdXRvX2NvcnJfY2NrID4gQVVUT19DT1JSX01BWF9USF9DQ0spIHsKLQkJCS8qIFN0b3JlIGZvciAiZmV3ZXIgdGhhbiBkZXNpcmVkIiBvbiBsYXRlciBiZWFjb24gKi8KLQkJCWRhdGEtPm5yZ19zaWxlbmNlX3JlZiA9IHNpbGVuY2VfcmVmOwotCi0JCQkvKiBpbmNyZWFzZSBlbmVyZ3kgdGhyZXNob2xkIChyZWR1Y2UgbnJnIHZhbHVlKQotCQkJICogICB0byBkZWNyZWFzZSBzZW5zaXRpdml0eSAqLwotCQkJaWYgKGRhdGEtPm5yZ190aF9jY2sgPiAoTlJHX01BWF9DQ0sgKyBOUkdfU1RFUF9DQ0spKQotCQkJCWRhdGEtPm5yZ190aF9jY2sgPSBkYXRhLT5ucmdfdGhfY2NrCi0JCQkJCQkJIC0gTlJHX1NURVBfQ0NLOwotCQl9Ci0KLQkJLyogaW5jcmVhc2UgYXV0b19jb3JyIHZhbHVlcyB0byBkZWNyZWFzZSBzZW5zaXRpdml0eSAqLwotCQlpZiAoZGF0YS0+YXV0b19jb3JyX2NjayA8IEFVVE9fQ09SUl9NQVhfVEhfQ0NLKQotCQkJZGF0YS0+YXV0b19jb3JyX2NjayA9IEFVVE9fQ09SUl9NQVhfVEhfQ0NLICsgMTsKLQkJZWxzZSB7Ci0JCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfY2NrICsgQVVUT19DT1JSX1NURVBfQ0NLOwotCQkJZGF0YS0+YXV0b19jb3JyX2NjayA9IG1pbigodTMyKUFVVE9fQ09SUl9NQVhfQ0NLLCB2YWwpOwotCQl9Ci0JCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9jY2tfbXJjICsgQVVUT19DT1JSX1NURVBfQ0NLOwotCQlkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyA9IG1pbigodTMyKUFVVE9fQ09SUl9NQVhfQ0NLX01SQywgdmFsKTsKLQotCS8qIEVsc2UgaWYgd2UgZ290IGZld2VyIHRoYW4gZGVzaXJlZCwgaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KLQl9IGVsc2UgaWYgKGZhbHNlX2FsYXJtcyA8IG1pbl9mYWxzZV9hbGFybXMpIHsKLQkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfVE9PX0ZFVzsKLQotCQkvKiBDb21wYXJlIHNpbGVuY2UgbGV2ZWwgd2l0aCBzaWxlbmNlIGxldmVsIGZvciBtb3N0IHJlY2VudAotCQkgKiAgIGhlYWx0aHkgbnVtYmVyIG9yIHRvbyBtYW55IGZhbHNlIGFsYXJtcyAqLwotCQlkYXRhLT5ucmdfYXV0b19jb3JyX3NpbGVuY2VfZGlmZiA9IChzMzIpZGF0YS0+bnJnX3NpbGVuY2VfcmVmIC0KLQkJCQkJCSAgIChzMzIpc2lsZW5jZV9yZWY7Ci0KLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1IDwgbWluIEZBICV1LCBzaWxlbmNlIGRpZmYgJWRcbiIsCi0JCQkgZmFsc2VfYWxhcm1zLCBtaW5fZmFsc2VfYWxhcm1zLAotCQkJIGRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmKTsKLQotCQkvKiBJbmNyZWFzZSB2YWx1ZSB0byBpbmNyZWFzZSBzZW5zaXRpdml0eSwgYnV0IG9ubHkgaWY6Ci0JCSAqIDFhKSBwcmV2aW91cyBiZWFjb24gZGlkICpub3QqIGhhdmUgKnRvbyBtYW55KiBmYWxzZSBhbGFybXMKLQkJICogMWIpIEFORCB0aGVyZSdzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBSeCBsZXZlbHMKLQkJICogICAgICBmcm9tIGEgcHJldmlvdXMgYmVhY29uIHdpdGggdG9vIG1hbnksIG9yIGhlYWx0aHkgIyBGQXMKLQkJICogT1IgMikgV2UndmUgc2VlbiBhIGxvdCBvZiBiZWFjb25zICgxMDApIHdpdGggdG9vIGZldwotCQkgKiAgICAgICBmYWxzZSBhbGFybXMgKi8KLQkJaWYgKChkYXRhLT5ucmdfcHJldl9zdGF0ZSAhPSBJV0xfRkFfVE9PX01BTlkpICYmCi0JCQkoKGRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID4gTlJHX0RJRkYpIHx8Ci0JCQkoZGF0YS0+bnVtX2luX2Nja19ub19mYSA+IE1BWF9OVU1CRVJfQ0NLX05PX0ZBKSkpIHsKLQotCQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gaW5jcmVhc2luZyBzZW5zaXRpdml0eVxuIik7Ci0JCQkvKiBJbmNyZWFzZSBucmcgdmFsdWUgdG8gaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KLQkJCXZhbCA9IGRhdGEtPm5yZ190aF9jY2sgKyBOUkdfU1RFUF9DQ0s7Ci0JCQlkYXRhLT5ucmdfdGhfY2NrID0gbWluKCh1MzIpTlJHX01JTl9DQ0ssIHZhbCk7Ci0KLQkJCS8qIERlY3JlYXNlIGF1dG9fY29yciB2YWx1ZXMgdG8gaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KLQkJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9jY2sgLSBBVVRPX0NPUlJfU1RFUF9DQ0s7Ci0JCQlkYXRhLT5hdXRvX2NvcnJfY2NrID0gbWF4KCh1MzIpQVVUT19DT1JSX01JTl9DQ0ssIHZhbCk7Ci0KLQkJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9jY2tfbXJjIC0gQVVUT19DT1JSX1NURVBfQ0NLOwotCQkJZGF0YS0+YXV0b19jb3JyX2Nja19tcmMgPQotCQkJCQkgbWF4KCh1MzIpQVVUT19DT1JSX01JTl9DQ0tfTVJDLCB2YWwpOwotCi0JCX0gZWxzZQotCQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gYnV0IG5vdCBjaGFuZ2luZyBzZW5zaXRpdml0eVxuIik7Ci0KLQkvKiBFbHNlIHdlIGdvdCBhIGhlYWx0aHkgbnVtYmVyIG9mIGZhbHNlIGFsYXJtcywga2VlcCBzdGF0dXMgcXVvICovCi0JfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0NBTElCKCIgRkEgaW4gc2FmZSB6b25lXG4iKTsKLQkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfR09PRF9SQU5HRTsKLQotCQkvKiBTdG9yZSBmb3IgdXNlIGluICJmZXdlciB0aGFuIGRlc2lyZWQiIHdpdGggbGF0ZXIgYmVhY29uICovCi0JCWRhdGEtPm5yZ19zaWxlbmNlX3JlZiA9IHNpbGVuY2VfcmVmOwotCi0JCS8qIElmIHByZXZpb3VzIGJlYWNvbiBoYWQgdG9vIG1hbnkgZmFsc2UgYWxhcm1zLAotCQkgKiAgIGdpdmUgaXQgc29tZSBleHRyYSBtYXJnaW4gYnkgcmVkdWNpbmcgc2Vuc2l0aXZpdHkgYWdhaW4KLQkJICogICAoYnV0IGRvbid0IGdvIGJlbG93IG1lYXN1cmVkIGVuZXJneSBvZiBkZXNpcmVkIFJ4KSAqLwotCQlpZiAoSVdMX0ZBX1RPT19NQU5ZID09IGRhdGEtPm5yZ19wcmV2X3N0YXRlKSB7Ci0JCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBpbmNyZWFzaW5nIG1hcmdpblxuIik7Ci0JCQlkYXRhLT5ucmdfdGhfY2NrIC09IE5SR19NQVJHSU47Ci0JCX0KLQl9Ci0KLQkvKiBNYWtlIHN1cmUgdGhlIGVuZXJneSB0aHJlc2hvbGQgZG9lcyBub3QgZ28gYWJvdmUgdGhlIG1lYXN1cmVkCi0JICogZW5lcmd5IG9mIHRoZSBkZXNpcmVkIFJ4IHNpZ25hbHMgKHJlZHVjZWQgYnkgYmFja29mZiBtYXJnaW4pLAotCSAqIG9yIGVsc2Ugd2UgbWlnaHQgc3RhcnQgbWlzc2luZyBSeCBmcmFtZXMuCi0JICogTG93ZXIgdmFsdWUgaXMgaGlnaGVyIGVuZXJneSwgc28gd2UgdXNlIG1heCgpIQotCSAqLwotCWRhdGEtPm5yZ190aF9jY2sgPSBtYXgobWF4X25yZ19jY2ssIGRhdGEtPm5yZ190aF9jY2spOwotCUlXTF9ERUJVR19DQUxJQigibmV3IG5yZ190aF9jY2sgJXVcbiIsIGRhdGEtPm5yZ190aF9jY2spOwotCi0JZGF0YS0+bnJnX3ByZXZfc3RhdGUgPSBkYXRhLT5ucmdfY3Vycl9zdGF0ZTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaXdsNDk2NV9zZW5zX2F1dG9fY29ycl9vZmRtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgdTMyIG5vcm1fZmEsCi0JCQkJICAgICAgIHUzMiByeF9lbmFibGVfdGltZSkKLXsKLQl1MzIgdmFsOwotCXUzMiBmYWxzZV9hbGFybXMgPSBub3JtX2ZhICogMjAwICogMTAyNDsKLQl1MzIgbWF4X2ZhbHNlX2FsYXJtcyA9IE1BWF9GQV9PRkRNICogcnhfZW5hYmxlX3RpbWU7Ci0JdTMyIG1pbl9mYWxzZV9hbGFybXMgPSBNSU5fRkFfT0ZETSAqIHJ4X2VuYWJsZV90aW1lOwotCXN0cnVjdCBpd2w0OTY1X3NlbnNpdGl2aXR5X2RhdGEgKmRhdGEgPSBOVUxMOwotCi0JZGF0YSA9ICYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSk7Ci0KLQkvKiBJZiB3ZSBnb3QgdG9vIG1hbnkgZmFsc2UgYWxhcm1zIHRoaXMgdGltZSwgcmVkdWNlIHNlbnNpdGl2aXR5ICovCi0JaWYgKGZhbHNlX2FsYXJtcyA+IG1heF9mYWxzZV9hbGFybXMpIHsKLQotCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAotCQkJICAgICBmYWxzZV9hbGFybXMsIG1heF9mYWxzZV9hbGFybXMpOwotCi0JCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtICsgQVVUT19DT1JSX1NURVBfT0ZETTsKLQkJZGF0YS0+YXV0b19jb3JyX29mZG0gPQotCQkJCW1pbigodTMyKUFVVE9fQ09SUl9NQVhfT0ZETSwgdmFsKTsKLQotCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMgKyBBVVRPX0NPUlJfU1RFUF9PRkRNOwotCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMgPQotCQkJCW1pbigodTMyKUFVVE9fQ09SUl9NQVhfT0ZETV9NUkMsIHZhbCk7Ci0KLQkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG1feDEgKyBBVVRPX0NPUlJfU1RFUF9PRkRNOwotCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSA9Ci0JCQkJbWluKCh1MzIpQVVUT19DT1JSX01BWF9PRkRNX1gxLCB2YWwpOwotCi0JCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSArIEFVVE9fQ09SUl9TVEVQX09GRE07Ci0JCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSA9Ci0JCQkJbWluKCh1MzIpQVVUT19DT1JSX01BWF9PRkRNX01SQ19YMSwgdmFsKTsKLQl9Ci0KLQkvKiBFbHNlIGlmIHdlIGdvdCBmZXdlciB0aGFuIGRlc2lyZWQsIGluY3JlYXNlIHNlbnNpdGl2aXR5ICovCi0JZWxzZSBpZiAoZmFsc2VfYWxhcm1zIDwgbWluX2ZhbHNlX2FsYXJtcykgewotCi0JCUlXTF9ERUJVR19DQUxJQigibm9ybSBGQSAldSA8IG1pbiBGQSAldVxuIiwKLQkJCSAgICAgZmFsc2VfYWxhcm1zLCBtaW5fZmFsc2VfYWxhcm1zKTsKLQotCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbSAtIEFVVE9fQ09SUl9TVEVQX09GRE07Ci0JCWRhdGEtPmF1dG9fY29ycl9vZmRtID0KLQkJCQltYXgoKHUzMilBVVRPX0NPUlJfTUlOX09GRE0sIHZhbCk7Ci0KLQkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjIC0gQVVUT19DT1JSX1NURVBfT0ZETTsKLQkJZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjID0KLQkJCQltYXgoKHUzMilBVVRPX0NPUlJfTUlOX09GRE1fTVJDLCB2YWwpOwotCi0JCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtX3gxIC0gQVVUT19DT1JSX1NURVBfT0ZETTsKLQkJZGF0YS0+YXV0b19jb3JyX29mZG1feDEgPQotCQkJCW1heCgodTMyKUFVVE9fQ09SUl9NSU5fT0ZETV9YMSwgdmFsKTsKLQotCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEgLSBBVVRPX0NPUlJfU1RFUF9PRkRNOwotCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEgPQotCQkJCW1heCgodTMyKUFVVE9fQ09SUl9NSU5fT0ZETV9NUkNfWDEsIHZhbCk7Ci0JfQotCi0JZWxzZQotCQlJV0xfREVCVUdfQ0FMSUIoIm1pbiBGQSAldSA8IG5vcm0gRkEgJXUgPCBtYXggRkEgJXUgT0tcbiIsCi0JCQkgbWluX2ZhbHNlX2FsYXJtcywgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCS8qIFdlIGRpZG4ndCBjYWNoZSB0aGUgU0tCOyBsZXQgdGhlIGNhbGxlciBmcmVlIGl0ICovCi0JcmV0dXJuIDE7Ci19Ci0KLS8qIFByZXBhcmUgYSBTRU5TSVRJVklUWV9DTUQsIHNlbmQgdG8gdUNvZGUgaWYgdmFsdWVzIGhhdmUgY2hhbmdlZCAqLwotc3RhdGljIGludCBpd2w0OTY1X3NlbnNpdGl2aXR5X3dyaXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZmxhZ3MpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfY21kIGNtZCA7Ci0Jc3RydWN0IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7Ci0Jc3RydWN0IGl3bF9ob3N0X2NtZCBjbWRfb3V0ID0gewotCQkuaWQgPSBTRU5TSVRJVklUWV9DTUQsCi0JCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfY21kKSwKLQkJLm1ldGEuZmxhZ3MgPSBmbGFncywKLQkJLmRhdGEgPSAmY21kLAotCX07Ci0JaW50IHJldDsKLQotCWRhdGEgPSAmKHByaXYtPnNlbnNpdGl2aXR5X2RhdGEpOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQotCWNtZC50YWJsZVtIRF9BVVRPX0NPUlIzMl9YNF9USF9BRERfTUlOX0lOREVYXSA9Ci0JCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfb2ZkbSk7Ci0JY21kLnRhYmxlW0hEX0FVVE9fQ09SUjMyX1g0X1RIX0FERF9NSU5fTVJDX0lOREVYXSA9Ci0JCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMpOwotCWNtZC50YWJsZVtIRF9BVVRPX0NPUlIzMl9YMV9USF9BRERfTUlOX0lOREVYXSA9Ci0JCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSk7Ci0JY21kLnRhYmxlW0hEX0FVVE9fQ09SUjMyX1gxX1RIX0FERF9NSU5fTVJDX0lOREVYXSA9Ci0JCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEpOwotCi0JY21kLnRhYmxlW0hEX0FVVE9fQ09SUjQwX1g0X1RIX0FERF9NSU5fSU5ERVhdID0KLQkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPmF1dG9fY29ycl9jY2spOwotCWNtZC50YWJsZVtIRF9BVVRPX0NPUlI0MF9YNF9USF9BRERfTUlOX01SQ19JTkRFWF0gPQotCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+YXV0b19jb3JyX2Nja19tcmMpOwotCi0JY21kLnRhYmxlW0hEX01JTl9FTkVSR1lfQ0NLX0RFVF9JTkRFWF0gPQotCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+bnJnX3RoX2Njayk7Ci0JY21kLnRhYmxlW0hEX01JTl9FTkVSR1lfT0ZETV9ERVRfSU5ERVhdID0KLQkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPm5yZ190aF9vZmRtKTsKLQotCWNtZC50YWJsZVtIRF9CQVJLRVJfQ09SUl9USF9BRERfTUlOX0lOREVYXSA9Ci0JCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigxOTApOwotCWNtZC50YWJsZVtIRF9CQVJLRVJfQ09SUl9USF9BRERfTUlOX01SQ19JTkRFWF0gPQotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMzkwKTsKLQljbWQudGFibGVbSERfT0ZETV9FTkVSR1lfVEhfSU5fSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDYyKTsKLQotCUlXTF9ERUJVR19DQUxJQigib2ZkbTogYWMgJXUgbXJjICV1IHgxICV1IG1yY194MSAldSB0aHJlc2ggJXVcbiIsCi0JCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbSwgZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjLAotCQkJZGF0YS0+YXV0b19jb3JyX29mZG1feDEsIGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSwKLQkJCWRhdGEtPm5yZ190aF9vZmRtKTsKLQotCUlXTF9ERUJVR19DQUxJQigiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAotCQkJZGF0YS0+YXV0b19jb3JyX2NjaywgZGF0YS0+YXV0b19jb3JyX2Nja19tcmMsCi0JCQlkYXRhLT5ucmdfdGhfY2NrKTsKLQotCS8qIFVwZGF0ZSB1Q29kZSdzICJ3b3JrIiB0YWJsZSwgYW5kIGNvcHkgaXQgdG8gRFNQICovCi0JY21kLmNvbnRyb2wgPSBTRU5TSVRJVklUWV9DTURfQ09OVFJPTF9XT1JLX1RBQkxFOwotCi0JaWYgKGZsYWdzICYgQ01EX0FTWU5DKQotCQljbWRfb3V0Lm1ldGEudS5jYWxsYmFjayA9IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfY2FsbGJhY2s7Ci0KLQkvKiBEb24ndCBzZW5kIGNvbW1hbmQgdG8gdUNvZGUgaWYgbm90aGluZyBoYXMgY2hhbmdlZCAqLwotCWlmICghbWVtY21wKCZjbWQudGFibGVbMF0sICYocHJpdi0+c2Vuc2l0aXZpdHlfdGJsWzBdKSwKLQkJICAgIHNpemVvZih1MTYpKkhEX1RBQkxFX1NJWkUpKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiTm8gY2hhbmdlIGluIFNFTlNJVElWSVRZX0NNRFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIENvcHkgdGFibGUgZm9yIGNvbXBhcmlzb24gbmV4dCB0aW1lICovCi0JbWVtY3B5KCYocHJpdi0+c2Vuc2l0aXZpdHlfdGJsWzBdKSwgJihjbWQudGFibGVbMF0pLAotCSAgICAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKTsKLQotCXJldCA9IGl3bF9zZW5kX2NtZChwcml2LCAmY21kX291dCk7Ci0JaWYgKHJldCkKLQkJSVdMX0VSUk9SKCJTRU5TSVRJVklUWV9DTUQgZmFpbGVkXG4iKTsKLQogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgaXdsNDk2NV9pbml0X3NlbnNpdGl2aXR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZmxhZ3MsIHU4IGZvcmNlKQotewotCXN0cnVjdCBpd2w0OTY1X3NlbnNpdGl2aXR5X2RhdGEgKmRhdGEgPSBOVUxMOwotCWludCBpOwotCWludCByZXQgID0gMDsKLQotCUlXTF9ERUJVR19DQUxJQigiU3RhcnQgaXdsNDk2NV9pbml0X3NlbnNpdGl2aXR5XG4iKTsKLQotCWlmIChmb3JjZSkKLQkJbWVtc2V0KCYocHJpdi0+c2Vuc2l0aXZpdHlfdGJsWzBdKSwgMCwKLQkJCXNpemVvZih1MTYpKkhEX1RBQkxFX1NJWkUpOwotCi0JLyogQ2xlYXIgZHJpdmVyJ3Mgc2Vuc2l0aXZpdHkgYWxnbyBkYXRhICovCi0JZGF0YSA9ICYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSk7Ci0JbWVtc2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zZW5zaXRpdml0eV9kYXRhKSk7Ci0KLQlkYXRhLT5udW1faW5fY2NrX25vX2ZhID0gMDsKLQlkYXRhLT5ucmdfY3Vycl9zdGF0ZSA9IElXTF9GQV9UT09fTUFOWTsKLQlkYXRhLT5ucmdfcHJldl9zdGF0ZSA9IElXTF9GQV9UT09fTUFOWTsKLQlkYXRhLT5ucmdfc2lsZW5jZV9yZWYgPSAwOwotCWRhdGEtPm5yZ19zaWxlbmNlX2lkeCA9IDA7Ci0JZGF0YS0+bnJnX2VuZXJneV9pZHggPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0JCWRhdGEtPm5yZ192YWx1ZVtpXSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlJHX05VTV9QUkVWX1NUQVRfTDsgaSsrKQotCQlkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2ldID0gMDsKLQotCWRhdGEtPmF1dG9fY29ycl9vZmRtID0gOTA7Ci0JZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjID0gMTcwOwotCWRhdGEtPmF1dG9fY29ycl9vZmRtX3gxICA9IDEwNTsKLQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEgPSAyMjA7Ci0JZGF0YS0+YXV0b19jb3JyX2NjayA9IEFVVE9fQ09SUl9DQ0tfTUlOX1ZBTF9ERUY7Ci0JZGF0YS0+YXV0b19jb3JyX2Nja19tcmMgPSAyMDA7Ci0JZGF0YS0+bnJnX3RoX2NjayA9IDEwMDsKLQlkYXRhLT5ucmdfdGhfb2ZkbSA9IDEwMDsKLQotCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gPSAwOwotCWRhdGEtPmxhc3RfZmFfY250X29mZG0gPSAwOwotCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjayA9IDA7Ci0JZGF0YS0+bGFzdF9mYV9jbnRfY2NrID0gMDsKLQotCS8qIENsZWFyIHByaW9yIFNlbnNpdGl2aXR5IGNvbW1hbmQgZGF0YSB0byBmb3JjZSBzZW5kIHRvIHVDb2RlICovCi0JaWYgKGZvcmNlKQotCQltZW1zZXQoJihwcml2LT5zZW5zaXRpdml0eV90YmxbMF0pLCAwLAotCQkgICAgc2l6ZW9mKHUxNikqSERfVEFCTEVfU0laRSk7Ci0KLQlyZXQgfD0gaXdsNDk2NV9zZW5zaXRpdml0eV93cml0ZShwcml2LCBmbGFncyk7Ci0JSVdMX0RFQlVHX0NBTElCKCI8PHJldHVybiAweCVYXG4iLCByZXQpOwotCi0JcmV0dXJuOwotfQotCi0KIC8qIFJlc2V0IGRpZmZlcmVudGlhbCBSeCBnYWlucyBpbiBOSUMgdG8gcHJlcGFyZSBmb3IgY2hhaW4gbm9pc2UgY2FsaWJyYXRpb24uCiAgKiBDYWxsZWQgYWZ0ZXIgZXZlcnkgYXNzb2NpYXRpb24sIGJ1dCB0aGlzIHJ1bnMgb25seSBvbmNlIQogICogIC4uLiBvbmNlIGNoYWluIG5vaXNlIGlzIGNhbGlicmF0ZWQgdGhlIGZpcnN0IHRpbWUsIGl0J3MgZ29vZCBmb3JldmVyLiAgKi8KLXZvaWQgaXdsNDk2NV9jaGFpbl9ub2lzZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X2NoYWluX25vaXNlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9jaGFpbl9ub2lzZV9kYXRhICpkYXRhID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2NoYWluX25vaXNlX2RhdGEgKmRhdGEgPSAmKHByaXYtPmNoYWluX25vaXNlX2RhdGEpOwogCi0JZGF0YSA9ICYocHJpdi0+Y2hhaW5fbm9pc2VfZGF0YSk7CiAJaWYgKChkYXRhLT5zdGF0ZSA9PSBJV0xfQ0hBSU5fTk9JU0VfQUxJVkUpICYmIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCXN0cnVjdCBpd2w0OTY1X2NhbGlicmF0aW9uX2NtZCBjbWQ7CiAKQEAgLTE0NTIsMzg5ICs1NzgsOTAgQEAKIAkJY21kLmRpZmZfZ2Fpbl9hID0gMDsKIAkJY21kLmRpZmZfZ2Fpbl9iID0gMDsKIAkJY21kLmRpZmZfZ2Fpbl9jID0gMDsKLQkJaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01ELAotCQkJCSBzaXplb2YoY21kKSwgJmNtZCwgTlVMTCk7Ci0JCW1zbGVlcCg0KTsKKwkJaWYgKGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKKwkJCQkgc2l6ZW9mKGNtZCksICZjbWQpKQorCQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgc2VuZCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EXG4iKTsKIAkJZGF0YS0+c3RhdGUgPSBJV0xfQ0hBSU5fTk9JU0VfQUNDVU1VTEFURTsKIAkJSVdMX0RFQlVHX0NBTElCKCJSdW4gY2hhaW5fbm9pc2VfY2FsaWJyYXRlXG4iKTsKIAl9Ci0JcmV0dXJuOwogfQogCi0vKgotICogQWNjdW11bGF0ZSAyMCBiZWFjb25zIG9mIHNpZ25hbCBhbmQgbm9pc2Ugc3RhdGlzdGljcyBmb3IgZWFjaCBvZgotICogICAzIHJlY2VpdmVycy9hbnRlbm5hcy9yeC1jaGFpbnMsIHRoZW4gZmlndXJlIG91dDoKLSAqIDEpICBXaGljaCBhbnRlbm5hcyBhcmUgY29ubmVjdGVkLgotICogMikgIERpZmZlcmVudGlhbCByeCBnYWluIHNldHRpbmdzIHRvIGJhbGFuY2UgdGhlIDMgcmVjZWl2ZXJzLgotICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X25vaXNlX2NhbGlicmF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV9ub3RpZl9zdGF0aXN0aWNzICpzdGF0X3Jlc3ApCitzdGF0aWMgdm9pZCBpd2w0OTY1X2dhaW5fY29tcHV0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQl1MzIgKmF2ZXJhZ2Vfbm9pc2UsCisJCXUxNiBtaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2ksCisJCXUzMiBtaW5fYXZlcmFnZV9ub2lzZSkKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9jaGFpbl9ub2lzZV9kYXRhICpkYXRhID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgaSwgcmV0OworCXN0cnVjdCBpd2xfY2hhaW5fbm9pc2VfZGF0YSAqZGF0YSA9ICZwcml2LT5jaGFpbl9ub2lzZV9kYXRhOwogCi0JdTMyIGNoYWluX25vaXNlX2E7Ci0JdTMyIGNoYWluX25vaXNlX2I7Ci0JdTMyIGNoYWluX25vaXNlX2M7Ci0JdTMyIGNoYWluX3NpZ19hOwotCXUzMiBjaGFpbl9zaWdfYjsKLQl1MzIgY2hhaW5fc2lnX2M7Ci0JdTMyIGF2ZXJhZ2Vfc2lnW05VTV9SWF9DSEFJTlNdID0ge0lOSVRJQUxJWkFUSU9OX1ZBTFVFfTsKLQl1MzIgYXZlcmFnZV9ub2lzZVtOVU1fUlhfQ0hBSU5TXSA9IHtJTklUSUFMSVpBVElPTl9WQUxVRX07Ci0JdTMyIG1heF9hdmVyYWdlX3NpZzsKLQl1MTYgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaTsKLQl1MzIgbWluX2F2ZXJhZ2Vfbm9pc2UgPSBNSU5fQVZFUkFHRV9OT0lTRV9NQVhfVkFMVUU7Ci0JdTE2IG1pbl9hdmVyYWdlX25vaXNlX2FudGVubmFfaSA9IElOSVRJQUxJWkFUSU9OX1ZBTFVFOwotCXUxNiBpID0gMDsKLQl1MTYgY2hhbl9udW0gPSBJTklUSUFMSVpBVElPTl9WQUxVRTsKLQl1MzIgYmFuZCA9IElOSVRJQUxJWkFUSU9OX1ZBTFVFOwotCXUzMiBhY3RpdmVfY2hhaW5zID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgKnJ4X2luZm8gPSAmKHN0YXRfcmVzcC0+cnguZ2VuZXJhbCk7CisJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW21pbl9hdmVyYWdlX25vaXNlX2FudGVubmFfaV0gPSAwOwogCi0JZGF0YSA9ICYocHJpdi0+Y2hhaW5fbm9pc2VfZGF0YSk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9DSEFJTlM7IGkrKykgeworCQlzMzIgZGVsdGFfZyA9IDA7CiAKLQkvKiBBY2N1bXVsYXRlIGp1c3QgdGhlIGZpcnN0IDIwIGJlYWNvbnMgYWZ0ZXIgdGhlIGZpcnN0IGFzc29jaWF0aW9uLAotCSAqICAgdGhlbiB3ZSdyZSBkb25lIGZvcmV2ZXIuICovCi0JaWYgKGRhdGEtPnN0YXRlICE9IElXTF9DSEFJTl9OT0lTRV9BQ0NVTVVMQVRFKSB7Ci0JCWlmIChkYXRhLT5zdGF0ZSA9PSBJV0xfQ0hBSU5fTk9JU0VfQUxJVkUpCi0JCQlJV0xfREVCVUdfQ0FMSUIoIldhaXQgZm9yIG5vaXNlIGNhbGliIHJlc2V0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiIDw8IEludGVyZmVyZW5jZSBkYXRhIHVuYXZhaWxhYmxlXG4iKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JYmFuZCA9IChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spID8gMCA6IDE7Ci0JY2hhbl9udW0gPSBsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCk7Ci0KLQkvKiBNYWtlIHN1cmUgd2UgYWNjdW11bGF0ZSBkYXRhIGZvciBqdXN0IHRoZSBhc3NvY2lhdGVkIGNoYW5uZWwKLQkgKiAgIChldmVuIGlmIHNjYW5uaW5nKS4gKi8KLQlpZiAoKGNoYW5fbnVtICE9IChsZTMyX3RvX2NwdShzdGF0X3Jlc3AtPmZsYWcpID4+IDE2KSkgfHwKLQkgICAgKChTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0sgPT0KLQkgICAgIChzdGF0X3Jlc3AtPmZsYWcgJiBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0spKSAmJiBiYW5kKSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIlN0YXRzIG5vdCBmcm9tIGNoYW49JWQsIGJhbmQ9JWRcbiIsCi0JCQkJY2hhbl9udW0sIGJhbmQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBBY2N1bXVsYXRlIGJlYWNvbiBzdGF0aXN0aWNzIHZhbHVlcyBhY3Jvc3MgMjAgYmVhY29ucyAqLwotCWNoYWluX25vaXNlX2EgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpICYKLQkJCQlJTl9CQU5EX0ZJTFRFUjsKLQljaGFpbl9ub2lzZV9iID0gbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKSAmCi0JCQkJSU5fQkFORF9GSUxURVI7Ci0JY2hhaW5fbm9pc2VfYyA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYykgJgotCQkJCUlOX0JBTkRfRklMVEVSOwotCi0JY2hhaW5fc2lnX2EgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fcnNzaV9hKSAmIElOX0JBTkRfRklMVEVSOwotCWNoYWluX3NpZ19iID0gbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3Jzc2lfYikgJiBJTl9CQU5EX0ZJTFRFUjsKLQljaGFpbl9zaWdfYyA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9yc3NpX2MpICYgSU5fQkFORF9GSUxURVI7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlkYXRhLT5iZWFjb25fY291bnQrKzsKLQotCWRhdGEtPmNoYWluX25vaXNlX2EgPSAoY2hhaW5fbm9pc2VfYSArIGRhdGEtPmNoYWluX25vaXNlX2EpOwotCWRhdGEtPmNoYWluX25vaXNlX2IgPSAoY2hhaW5fbm9pc2VfYiArIGRhdGEtPmNoYWluX25vaXNlX2IpOwotCWRhdGEtPmNoYWluX25vaXNlX2MgPSAoY2hhaW5fbm9pc2VfYyArIGRhdGEtPmNoYWluX25vaXNlX2MpOwotCi0JZGF0YS0+Y2hhaW5fc2lnbmFsX2EgPSAoY2hhaW5fc2lnX2EgKyBkYXRhLT5jaGFpbl9zaWduYWxfYSk7Ci0JZGF0YS0+Y2hhaW5fc2lnbmFsX2IgPSAoY2hhaW5fc2lnX2IgKyBkYXRhLT5jaGFpbl9zaWduYWxfYik7Ci0JZGF0YS0+Y2hhaW5fc2lnbmFsX2MgPSAoY2hhaW5fc2lnX2MgKyBkYXRhLT5jaGFpbl9zaWduYWxfYyk7Ci0KLQlJV0xfREVCVUdfQ0FMSUIoImNoYW49JWQsIGJhbmQ9JWQsIGJlYWNvbj0lZFxuIiwgY2hhbl9udW0sIGJhbmQsCi0JCQlkYXRhLT5iZWFjb25fY291bnQpOwotCUlXTF9ERUJVR19DQUxJQigiY2hhaW5fc2lnOiBhICVkIGIgJWQgYyAlZFxuIiwKLQkJCWNoYWluX3NpZ19hLCBjaGFpbl9zaWdfYiwgY2hhaW5fc2lnX2MpOwotCUlXTF9ERUJVR19DQUxJQigiY2hhaW5fbm9pc2U6IGEgJWQgYiAlZCBjICVkXG4iLAotCQkJY2hhaW5fbm9pc2VfYSwgY2hhaW5fbm9pc2VfYiwgY2hhaW5fbm9pc2VfYyk7Ci0KLQkvKiBJZiB0aGlzIGlzIHRoZSAyMHRoIGJlYWNvbiwgZGV0ZXJtaW5lOgotCSAqIDEpICBEaXNjb25uZWN0ZWQgYW50ZW5uYXMgKHVzaW5nIHNpZ25hbCBzdHJlbmd0aHMpCi0JICogMikgIERpZmZlcmVudGlhbCBnYWluICh1c2luZyBzaWxlbmNlIG5vaXNlKSB0byBiYWxhbmNlIHJlY2VpdmVycyAqLwotCWlmIChkYXRhLT5iZWFjb25fY291bnQgPT0gQ0FMX05VTV9PRl9CRUFDT05TKSB7Ci0KLQkJLyogQW5hbHl6ZSBzaWduYWwgZm9yIGRpc2Nvbm5lY3RlZCBhbnRlbm5hICovCi0JCWF2ZXJhZ2Vfc2lnWzBdID0gKGRhdGEtPmNoYWluX3NpZ25hbF9hKSAvIENBTF9OVU1fT0ZfQkVBQ09OUzsKLQkJYXZlcmFnZV9zaWdbMV0gPSAoZGF0YS0+Y2hhaW5fc2lnbmFsX2IpIC8gQ0FMX05VTV9PRl9CRUFDT05TOwotCQlhdmVyYWdlX3NpZ1syXSA9IChkYXRhLT5jaGFpbl9zaWduYWxfYykgLyBDQUxfTlVNX09GX0JFQUNPTlM7Ci0KLQkJaWYgKGF2ZXJhZ2Vfc2lnWzBdID49IGF2ZXJhZ2Vfc2lnWzFdKSB7Ci0JCQltYXhfYXZlcmFnZV9zaWcgPSBhdmVyYWdlX3NpZ1swXTsKLQkJCW1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kgPSAwOwotCQkJYWN0aXZlX2NoYWlucyA9ICgxIDw8IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOwotCQl9IGVsc2UgewotCQkJbWF4X2F2ZXJhZ2Vfc2lnID0gYXZlcmFnZV9zaWdbMV07Ci0JCQltYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pID0gMTsKLQkJCWFjdGl2ZV9jaGFpbnMgPSAoMSA8PCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKLQkJfQotCi0JCWlmIChhdmVyYWdlX3NpZ1syXSA+PSBtYXhfYXZlcmFnZV9zaWcpIHsKLQkJCW1heF9hdmVyYWdlX3NpZyA9IGF2ZXJhZ2Vfc2lnWzJdOwotCQkJbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSA9IDI7Ci0JCQlhY3RpdmVfY2hhaW5zID0gKDEgPDwgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7Ci0JCX0KLQotCQlJV0xfREVCVUdfQ0FMSUIoImF2ZXJhZ2Vfc2lnOiBhICVkIGIgJWQgYyAlZFxuIiwKLQkJCSAgICAgYXZlcmFnZV9zaWdbMF0sIGF2ZXJhZ2Vfc2lnWzFdLCBhdmVyYWdlX3NpZ1syXSk7Ci0JCUlXTF9ERUJVR19DQUxJQigibWF4X2F2ZXJhZ2Vfc2lnID0gJWQsIGFudGVubmEgJWRcbiIsCi0JCQkgICAgIG1heF9hdmVyYWdlX3NpZywgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7Ci0KLQkJLyogQ29tcGFyZSBzaWduYWwgc3RyZW5ndGhzIGZvciBhbGwgMyByZWNlaXZlcnMuICovCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQ0hBSU5TOyBpKyspIHsKLQkJCWlmIChpICE9IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpIHsKLQkJCQlzMzIgcnNzaV9kZWx0YSA9IChtYXhfYXZlcmFnZV9zaWcgLQotCQkJCQkJICBhdmVyYWdlX3NpZ1tpXSk7Ci0KLQkJCQkvKiBJZiBzaWduYWwgaXMgdmVyeSB3ZWFrLCBjb21wYXJlZCB3aXRoCi0JCQkJICogc3Ryb25nZXN0LCBtYXJrIGl0IGFzIGRpc2Nvbm5lY3RlZC4gKi8KLQkJCQlpZiAocnNzaV9kZWx0YSA+IE1BWElNVU1fQUxMT1dFRF9QQVRITE9TUykKLQkJCQkJZGF0YS0+ZGlzY29ubl9hcnJheVtpXSA9IDE7Ci0JCQkJZWxzZQotCQkJCQlhY3RpdmVfY2hhaW5zIHw9ICgxIDw8IGkpOwotCQkJSVdMX0RFQlVHX0NBTElCKCJpID0gJWQgIHJzc2lEZWx0YSA9ICVkICAiCi0JCQkJICAgICAiZGlzY29ubl9hcnJheVtpXSA9ICVkXG4iLAotCQkJCSAgICAgaSwgcnNzaV9kZWx0YSwgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSk7Ci0JCQl9Ci0JCX0KLQotCQkvKklmIGJvdGggY2hhaW5zIEEgJiBCIGFyZSBkaXNjb25uZWN0ZWQgLQotCQkgKiBjb25uZWN0IEIgYW5kIGxlYXZlIEEgYXMgaXMgKi8KLQkJaWYgKGRhdGEtPmRpc2Nvbm5fYXJyYXlbQ0hBSU5fQV0gJiYKLQkJICAgIGRhdGEtPmRpc2Nvbm5fYXJyYXlbQ0hBSU5fQl0pIHsKLQkJCWRhdGEtPmRpc2Nvbm5fYXJyYXlbQ0hBSU5fQl0gPSAwOwotCQkJYWN0aXZlX2NoYWlucyB8PSAoMSA8PCBDSEFJTl9CKTsKLQkJCUlXTF9ERUJVR19DQUxJQigiYm90aCBBICYgQiBjaGFpbnMgYXJlIGRpc2Nvbm5lY3RlZCEgIgotCQkJCSAgICAgIlcvQSAtIGRlY2xhcmUgQiBhcyBjb25uZWN0ZWRcbiIpOwotCQl9Ci0KLQkJSVdMX0RFQlVHX0NBTElCKCJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCi0JCQkJYWN0aXZlX2NoYWlucyk7Ci0KLQkJLyogU2F2ZSBmb3IgdXNlIHdpdGhpbiBSWE9OLCBUWCwgU0NBTiBjb21tYW5kcywgZXRjLiAqLwotCQlwcml2LT52YWxpZF9hbnRlbm5hID0gYWN0aXZlX2NoYWluczsKLQotCQkvKiBBbmFseXplIG5vaXNlIGZvciByeCBiYWxhbmNlICovCi0JCWF2ZXJhZ2Vfbm9pc2VbMF0gPSAoKGRhdGEtPmNoYWluX25vaXNlX2EpL0NBTF9OVU1fT0ZfQkVBQ09OUyk7Ci0JCWF2ZXJhZ2Vfbm9pc2VbMV0gPSAoKGRhdGEtPmNoYWluX25vaXNlX2IpL0NBTF9OVU1fT0ZfQkVBQ09OUyk7Ci0JCWF2ZXJhZ2Vfbm9pc2VbMl0gPSAoKGRhdGEtPmNoYWluX25vaXNlX2MpL0NBTF9OVU1fT0ZfQkVBQ09OUyk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9DSEFJTlM7IGkrKykgewotCQkJaWYgKCEoZGF0YS0+ZGlzY29ubl9hcnJheVtpXSkgJiYKLQkJCSAgIChhdmVyYWdlX25vaXNlW2ldIDw9IG1pbl9hdmVyYWdlX25vaXNlKSkgewotCQkJCS8qIFRoaXMgbWVhbnMgdGhhdCBjaGFpbiBpIGlzIGFjdGl2ZSBhbmQgaGFzCi0JCQkJICogbG93ZXIgbm9pc2UgdmFsdWVzIHNvIGZhcjogKi8KLQkJCQltaW5fYXZlcmFnZV9ub2lzZSA9IGF2ZXJhZ2Vfbm9pc2VbaV07Ci0JCQkJbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pID0gaTsKLQkJCX0KLQkJfQotCi0JCWRhdGEtPmRlbHRhX2dhaW5fY29kZVttaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2ldID0gMDsKLQotCQlJV0xfREVCVUdfQ0FMSUIoImF2ZXJhZ2Vfbm9pc2U6IGEgJWQgYiAlZCBjICVkXG4iLAotCQkJCWF2ZXJhZ2Vfbm9pc2VbMF0sIGF2ZXJhZ2Vfbm9pc2VbMV0sCi0JCQkJYXZlcmFnZV9ub2lzZVsyXSk7Ci0KLQkJSVdMX0RFQlVHX0NBTElCKCJtaW5fYXZlcmFnZV9ub2lzZSA9ICVkLCBhbnRlbm5hICVkXG4iLAotCQkJCW1pbl9hdmVyYWdlX25vaXNlLCBtaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2kpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQ0hBSU5TOyBpKyspIHsKLQkJCXMzMiBkZWx0YV9nID0gMDsKLQotCQkJaWYgKCEoZGF0YS0+ZGlzY29ubl9hcnJheVtpXSkgJiYKLQkJCSAgICAoZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldID09CisJCWlmICghKGRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0pICYmCisJCSAgICAoZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldID09CiAJCQkgICAgIENIQUlOX05PSVNFX0RFTFRBX0dBSU5fSU5JVF9WQUwpKSB7Ci0JCQkJZGVsdGFfZyA9IGF2ZXJhZ2Vfbm9pc2VbaV0gLSBtaW5fYXZlcmFnZV9ub2lzZTsKLQkJCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gPSAodTgpKChkZWx0YV9nICoKLQkJCQkJCQkJICAgIDEwKSAvIDE1KTsKLQkJCQlpZiAoQ0hBSU5fTk9JU0VfTUFYX0RFTFRBX0dBSU5fQ09ERSA8Ci0JCQkJICAgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldKQotCQkJCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gPQotCQkJCQkgIENIQUlOX05PSVNFX01BWF9ERUxUQV9HQUlOX0NPREU7CisJCQlkZWx0YV9nID0gYXZlcmFnZV9ub2lzZVtpXSAtIG1pbl9hdmVyYWdlX25vaXNlOworCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldID0gKHU4KSgoZGVsdGFfZyAqIDEwKSAvIDE1KTsKKwkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSA9CisJCQkJbWluKGRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSwKKwkJCQkodTgpIENIQUlOX05PSVNFX01BWF9ERUxUQV9HQUlOX0NPREUpOwogCi0JCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldID0KLQkJCQkJKGRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSB8ICgxIDw8IDIpKTsKLQkJCX0gZWxzZQotCQkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSA9IDA7CisJCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gPQorCQkJCShkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gfCAoMSA8PCAyKSk7CisJCX0gZWxzZSB7CisJCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gPSAwOwogCQl9Ci0JCUlXTF9ERUJVR19DQUxJQigiZGVsdGFfZ2Fpbl9jb2RlczogYSAlZCBiICVkIGMgJWRcbiIsCi0JCQkgICAgIGRhdGEtPmRlbHRhX2dhaW5fY29kZVswXSwKLQkJCSAgICAgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzFdLAotCQkJICAgICBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMl0pOwotCi0JCS8qIERpZmZlcmVudGlhbCBnYWluIGdldHMgc2VudCB0byB1Q29kZSBvbmx5IG9uY2UgKi8KLQkJaWYgKCFkYXRhLT5yYWRpb193cml0ZSkgewotCQkJc3RydWN0IGl3bDQ5NjVfY2FsaWJyYXRpb25fY21kIGNtZDsKLQkJCWRhdGEtPnJhZGlvX3dyaXRlID0gMTsKLQotCQkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQkJCWNtZC5vcENvZGUgPSBQSFlfQ0FMSUJSQVRFX0RJRkZfR0FJTl9DTUQ7Ci0JCQljbWQuZGlmZl9nYWluX2EgPSBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMF07Ci0JCQljbWQuZGlmZl9nYWluX2IgPSBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMV07Ci0JCQljbWQuZGlmZl9nYWluX2MgPSBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMl07Ci0JCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCi0JCQkJCSAgICAgIHNpemVvZihjbWQpLCAmY21kKTsKLQkJCWlmIChyZXQpCi0JCQkJSVdMX0RFQlVHX0NBTElCKCJmYWlsIHNlbmRpbmcgY21kICIKLQkJCQkJICAgICAiUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCBcbiIpOwotCi0JCQkvKiBUT0RPIHdlIG1pZ2h0IHdhbnQgcmVjYWxjdWxhdGUKLQkJCSAqIHJ4X2NoYWluIGluIHJ4b24gY21kICovCi0KLQkJCS8qIE1hcmsgc28gd2UgcnVuIHRoaXMgYWxnbyBvbmx5IG9uY2UhICovCi0JCQlkYXRhLT5zdGF0ZSA9IElXTF9DSEFJTl9OT0lTRV9DQUxJQlJBVEVEOwotCQl9Ci0JCWRhdGEtPmNoYWluX25vaXNlX2EgPSAwOwotCQlkYXRhLT5jaGFpbl9ub2lzZV9iID0gMDsKLQkJZGF0YS0+Y2hhaW5fbm9pc2VfYyA9IDA7Ci0JCWRhdGEtPmNoYWluX3NpZ25hbF9hID0gMDsKLQkJZGF0YS0+Y2hhaW5fc2lnbmFsX2IgPSAwOwotCQlkYXRhLT5jaGFpbl9zaWduYWxfYyA9IDA7Ci0JCWRhdGEtPmJlYWNvbl9jb3VudCA9IDA7CiAJfQotCXJldHVybjsKKwlJV0xfREVCVUdfQ0FMSUIoImRlbHRhX2dhaW5fY29kZXM6IGEgJWQgYiAlZCBjICVkXG4iLAorCQkgICAgIGRhdGEtPmRlbHRhX2dhaW5fY29kZVswXSwKKwkJICAgICBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMV0sCisJCSAgICAgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzJdKTsKKworCS8qIERpZmZlcmVudGlhbCBnYWluIGdldHMgc2VudCB0byB1Q29kZSBvbmx5IG9uY2UgKi8KKwlpZiAoIWRhdGEtPnJhZGlvX3dyaXRlKSB7CisJCXN0cnVjdCBpd2w0OTY1X2NhbGlicmF0aW9uX2NtZCBjbWQ7CisJCWRhdGEtPnJhZGlvX3dyaXRlID0gMTsKKworCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCQljbWQub3BDb2RlID0gUEhZX0NBTElCUkFURV9ESUZGX0dBSU5fQ01EOworCQljbWQuZGlmZl9nYWluX2EgPSBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMF07CisJCWNtZC5kaWZmX2dhaW5fYiA9IGRhdGEtPmRlbHRhX2dhaW5fY29kZVsxXTsKKwkJY21kLmRpZmZfZ2Fpbl9jID0gZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzJdOworCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCisJCQkJICAgICAgc2l6ZW9mKGNtZCksICZjbWQpOworCQlpZiAocmV0KQorCQkJSVdMX0RFQlVHX0NBTElCKCJmYWlsIHNlbmRpbmcgY21kICIKKwkJCQkgICAgICJSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EIFxuIik7CisKKwkJLyogVE9ETyB3ZSBtaWdodCB3YW50IHJlY2FsY3VsYXRlCisJCSAqIHJ4X2NoYWluIGluIHJ4b24gY21kICovCisKKwkJLyogTWFyayBzbyB3ZSBydW4gdGhpcyBhbGdvIG9ubHkgb25jZSEgKi8KKwkJZGF0YS0+c3RhdGUgPSBJV0xfQ0hBSU5fTk9JU0VfQ0FMSUJSQVRFRDsKKwl9CisJZGF0YS0+Y2hhaW5fbm9pc2VfYSA9IDA7CisJZGF0YS0+Y2hhaW5fbm9pc2VfYiA9IDA7CisJZGF0YS0+Y2hhaW5fbm9pc2VfYyA9IDA7CisJZGF0YS0+Y2hhaW5fc2lnbmFsX2EgPSAwOworCWRhdGEtPmNoYWluX3NpZ25hbF9iID0gMDsKKwlkYXRhLT5jaGFpbl9zaWduYWxfYyA9IDA7CisJZGF0YS0+YmVhY29uX2NvdW50ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9ub3RpZl9zdGF0aXN0aWNzICpyZXNwKQorc3RhdGljIHZvaWQgaXdsNDk2NV9ydHNfdHhfY21kX2ZsYWcoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJX19sZTMyICp0eF9mbGFncykKIHsKLQl1MzIgcnhfZW5hYmxlX3RpbWU7Ci0JdTMyIGZhX2NjazsKLQl1MzIgZmFfb2ZkbTsKLQl1MzIgYmFkX3BsY3BfY2NrOwotCXUzMiBiYWRfcGxjcF9vZmRtOwotCXUzMiBub3JtX2ZhX29mZG07Ci0JdTMyIG5vcm1fZmFfY2NrOwotCXN0cnVjdCBpd2w0OTY1X3NlbnNpdGl2aXR5X2RhdGEgKmRhdGEgPSBOVUxMOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgKnJ4X2luZm8gPSAmKHJlc3AtPnJ4LmdlbmVyYWwpOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4ICpzdGF0aXN0aWNzID0gJihyZXNwLT5yeCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2RhdGEgc3RhdGlzOwotCWludCByZXQ7Ci0KLQlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKLQotCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKLQkJcmV0dXJuOworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX1JUU19DVFMpIHsKKwkJKnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfUlRTX01TSzsKKwkJKnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX0NUU19NU0s7CisJfSBlbHNlIGlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX0NUU19QUk9URUNUKSB7CisJCSp0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19SVFNfTVNLOworCQkqdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19DVFNfTVNLOwogCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiPDwgaW52YWxpZCBkYXRhLlxuIik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEV4dHJhY3QgU3RhdGlzdGljczogKi8KLQlyeF9lbmFibGVfdGltZSA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmNoYW5uZWxfbG9hZCk7Ci0JZmFfY2NrID0gbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Y2NrLmZhbHNlX2FsYXJtX2NudCk7Ci0JZmFfb2ZkbSA9IGxlMzJfdG9fY3B1KHN0YXRpc3RpY3MtPm9mZG0uZmFsc2VfYWxhcm1fY250KTsKLQliYWRfcGxjcF9jY2sgPSBsZTMyX3RvX2NwdShzdGF0aXN0aWNzLT5jY2sucGxjcF9lcnIpOwotCWJhZF9wbGNwX29mZG0gPSBsZTMyX3RvX2NwdShzdGF0aXN0aWNzLT5vZmRtLnBsY3BfZXJyKTsKLQotCXN0YXRpcy5iZWFjb25fc2lsZW5jZV9yc3NpX2EgPQotCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fc2lsZW5jZV9yc3NpX2EpOwotCXN0YXRpcy5iZWFjb25fc2lsZW5jZV9yc3NpX2IgPQotCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fc2lsZW5jZV9yc3NpX2IpOwotCXN0YXRpcy5iZWFjb25fc2lsZW5jZV9yc3NpX2MgPQotCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fc2lsZW5jZV9yc3NpX2MpOwotCXN0YXRpcy5iZWFjb25fZW5lcmd5X2EgPQotCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fZW5lcmd5X2EpOwotCXN0YXRpcy5iZWFjb25fZW5lcmd5X2IgPQotCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fZW5lcmd5X2IpOwotCXN0YXRpcy5iZWFjb25fZW5lcmd5X2MgPQotCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fZW5lcmd5X2MpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JSVdMX0RFQlVHX0NBTElCKCJyeF9lbmFibGVfdGltZSA9ICV1IHVzZWNzXG4iLCByeF9lbmFibGVfdGltZSk7Ci0KLQlpZiAoIXJ4X2VuYWJsZV90aW1lKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiPDwgUlggRW5hYmxlIFRpbWUgPT0gMCEgXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFRoZXNlIHN0YXRpc3RpY3MgaW5jcmVhc2UgbW9ub3RvbmljYWxseSwgYW5kIGRvIG5vdCByZXNldAotCSAqICAgYXQgZWFjaCBiZWFjb24uICBDYWxjdWxhdGUgZGlmZmVyZW5jZSBmcm9tIGxhc3QgdmFsdWUsIG9yIGp1c3QKLQkgKiAgIHVzZSB0aGUgbmV3IHN0YXRpc3RpY3MgdmFsdWUgaWYgaXQgaGFzIHJlc2V0IG9yIHdyYXBwZWQgYXJvdW5kLiAqLwotCWlmIChkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9jY2sgPiBiYWRfcGxjcF9jY2spCi0JCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjayA9IGJhZF9wbGNwX2NjazsKLQllbHNlIHsKLQkJYmFkX3BsY3BfY2NrIC09IGRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjazsKLQkJZGF0YS0+bGFzdF9iYWRfcGxjcF9jbnRfY2NrICs9IGJhZF9wbGNwX2NjazsKLQl9Ci0KLQlpZiAoZGF0YS0+bGFzdF9iYWRfcGxjcF9jbnRfb2ZkbSA+IGJhZF9wbGNwX29mZG0pCi0JCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gPSBiYWRfcGxjcF9vZmRtOwotCWVsc2UgewotCQliYWRfcGxjcF9vZmRtIC09IGRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG07Ci0JCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gKz0gYmFkX3BsY3Bfb2ZkbTsKLQl9Ci0KLQlpZiAoZGF0YS0+bGFzdF9mYV9jbnRfb2ZkbSA+IGZhX29mZG0pCi0JCWRhdGEtPmxhc3RfZmFfY250X29mZG0gPSBmYV9vZmRtOwotCWVsc2UgewotCQlmYV9vZmRtIC09IGRhdGEtPmxhc3RfZmFfY250X29mZG07Ci0JCWRhdGEtPmxhc3RfZmFfY250X29mZG0gKz0gZmFfb2ZkbTsKLQl9Ci0KLQlpZiAoZGF0YS0+bGFzdF9mYV9jbnRfY2NrID4gZmFfY2NrKQotCQlkYXRhLT5sYXN0X2ZhX2NudF9jY2sgPSBmYV9jY2s7Ci0JZWxzZSB7Ci0JCWZhX2NjayAtPSBkYXRhLT5sYXN0X2ZhX2NudF9jY2s7Ci0JCWRhdGEtPmxhc3RfZmFfY250X2NjayArPSBmYV9jY2s7Ci0JfQotCi0JLyogVG90YWwgYWJvcnRlZCBzaWduYWwgbG9ja3MgKi8KLQlub3JtX2ZhX29mZG0gPSBmYV9vZmRtICsgYmFkX3BsY3Bfb2ZkbTsKLQlub3JtX2ZhX2NjayA9IGZhX2NjayArIGJhZF9wbGNwX2NjazsKLQotCUlXTF9ERUJVR19DQUxJQigiY2NrOiBmYSAldSBiYWRwICV1ICBvZmRtOiBmYSAldSBiYWRwICV1XG4iLCBmYV9jY2ssCi0JCQliYWRfcGxjcF9jY2ssIGZhX29mZG0sIGJhZF9wbGNwX29mZG0pOwotCi0JaXdsNDk2NV9zZW5zX2F1dG9fY29ycl9vZmRtKHByaXYsIG5vcm1fZmFfb2ZkbSwgcnhfZW5hYmxlX3RpbWUpOwotCWl3bDQ5NjVfc2Vuc19lbmVyZ3lfY2NrKHByaXYsIG5vcm1fZmFfY2NrLCByeF9lbmFibGVfdGltZSwgJnN0YXRpcyk7Ci0JcmV0ID0gaXdsNDk2NV9zZW5zaXRpdml0eV93cml0ZShwcml2LCBDTURfQVNZTkMpOwotCi0JcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2JnX3NlbnNpdGl2aXR5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsCi0JCQlzZW5zaXRpdml0eV93b3JrKTsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSB8fAotCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHByaXYtPnN0YXJ0X2NhbGliKSB7Ci0JCWl3bDQ5NjVfbm9pc2VfY2FsaWJyYXRpb24ocHJpdiwgJnByaXYtPnN0YXRpc3RpY3MpOwotCi0JCWlmIChwcml2LT5zZW5zaXRpdml0eV9kYXRhLnN0YXRlID09Ci0JCQkJCUlXTF9TRU5TX0NBTElCX05FRURfUkVJTklUKSB7Ci0JCQlpd2w0OTY1X2luaXRfc2Vuc2l0aXZpdHkocHJpdiwgQ01EX0FTWU5DLCAwKTsKLQkJCXByaXYtPnNlbnNpdGl2aXR5X2RhdGEuc3RhdGUgPSBJV0xfU0VOU19DQUxJQl9BTExPV0VEOwotCQl9IGVsc2UKLQkJCWl3bDQ5NjVfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24ocHJpdiwKLQkJCQkJJnByaXYtPnN0YXRpc3RpY3MpOwotCX0KLQotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldHVybjsKLX0KLSNlbmRpZiAvKkNPTkZJR19JV0w0OTY1X1NFTlNJVElWSVRZKi8KLQogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ190eHBvd2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsCkBAIC0xODUzLDcgKzY4MCw3IEBACiAJLyogUmVnYXJkbGVzcyBvZiBpZiB3ZSBhcmUgYXNzb2NhaXRlZCwgd2UgbXVzdCByZWNvbmZpZ3VyZSB0aGUKIAkgKiBUWCBwb3dlciBzaW5jZSBmcmFtZXMgY2FuIGJlIHNlbnQgb24gbm9uLXJhZGFyIGNoYW5uZWxzIHdoaWxlCiAJICogbm90IGFzc29jaWF0ZWQgKi8KLQlpd2w0OTY1X2h3X3JlZ19zZW5kX3R4cG93ZXIocHJpdik7CisJaXdsNDk2NV9zZW5kX3R4X3Bvd2VyKHByaXYpOwogCiAJLyogVXBkYXRlIGxhc3RfdGVtcGVyYXR1cmUgdG8ga2VlcCBpc19jYWxpYl9uZWVkZWQgZnJvbSBydW5uaW5nCiAJICogd2hlbiBpdCBpc24ndCBuZWVkZWQuLi4gKi8KQEAgLTE4ODAsNyArNzA3LDcgQEAKICAqIE5PVEU6ICBBY3F1aXJlIHByaXYtPmxvY2sgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiAhCiAgKi8KIHN0YXRpYyB2b2lkIGl3bDQ5NjVfdHhfcXVldWVfc2V0X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCXN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEsCisJCQkJCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKIAkJCQkJaW50IHR4X2ZpZm9faWQsIGludCBzY2RfcmV0cnkpCiB7CiAJaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKQEAgLTE4OTAsMTEgKzcxNywxMSBAQAogCiAJLyogU2V0IHVwIGFuZCBhY3RpdmF0ZSAqLwogCWl3bF93cml0ZV9wcnBoKHByaXYsIElXTDQ5X1NDRF9RVUVVRV9TVEFUVVNfQklUUyh0eHFfaWQpLAotCQkJCSAoYWN0aXZlIDw8IFNDRF9RVUVVRV9TVFRTX1JFR19QT1NfQUNUSVZFKSB8Ci0JCQkJICh0eF9maWZvX2lkIDw8IFNDRF9RVUVVRV9TVFRTX1JFR19QT1NfVFhGKSB8Ci0JCQkJIChzY2RfcmV0cnkgPDwgU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19XU0wpIHwKLQkJCQkgKHNjZF9yZXRyeSA8PCBTQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1NDRF9BQ0spIHwKLQkJCQkgU0NEX1FVRVVFX1NUVFNfUkVHX01TSyk7CisJCQkgKGFjdGl2ZSA8PCBJV0w0OV9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX0FDVElWRSkgfAorCQkJICh0eF9maWZvX2lkIDw8IElXTDQ5X1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfVFhGKSB8CisJCQkgKHNjZF9yZXRyeSA8PCBJV0w0OV9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1dTTCkgfAorCQkJIChzY2RfcmV0cnkgPDwgSVdMNDlfU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19TQ0RfQUNLKSB8CisJCQkgSVdMNDlfU0NEX1FVRVVFX1NUVFNfUkVHX01TSyk7CiAKIAl0eHEtPnNjaGVkX3JldHJ5ID0gc2NkX3JldHJ5OwogCkBAIC0xOTA4LDIyICs3MzUsMTIgQEAKIAlJV0xfVFhfRklGT19BQzIsCiAJSVdMX1RYX0ZJRk9fQUMxLAogCUlXTF9UWF9GSUZPX0FDMCwKLQlJV0xfQ01EX0ZJRk9fTlVNLAorCUlXTDQ5X0NNRF9GSUZPX05VTSwKIAlJV0xfVFhfRklGT19IQ0NBXzEsCiAJSVdMX1RYX0ZJRk9fSENDQV8yCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsNDk2NV90eHFfY3R4X2FjdGl2YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCkKLXsKLQlzZXRfYml0KHR4cV9pZCwgJnByaXYtPnR4cV9jdHhfYWN0aXZlX21zayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2w0OTY1X3R4cV9jdHhfZGVhY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCi17Ci0JY2xlYXJfYml0KHR4cV9pZCwgJnByaXYtPnR4cV9jdHhfYWN0aXZlX21zayk7Ci19Ci0KLWludCBpd2w0OTY1X2FsaXZlX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfYWxpdmVfbm90aWZ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgYTsKIAlpbnQgaSA9IDA7CkBAIC0xOTMyLDE1ICs3NDksNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X1NFTlNJVElWSVRZCi0JbWVtc2V0KCYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSksIDAsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zZW5zaXRpdml0eV9kYXRhKSk7Ci0JbWVtc2V0KCYocHJpdi0+Y2hhaW5fbm9pc2VfZGF0YSksIDAsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9jaGFpbl9ub2lzZV9kYXRhKSk7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9SWF9DSEFJTlM7IGkrKykKLQkJcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5kZWx0YV9nYWluX2NvZGVbaV0gPQotCQkJCUNIQUlOX05PSVNFX0RFTFRBX0dBSU5fSU5JVF9WQUw7Ci0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfU0VOU0lUSVZJVFkqLwogCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJldCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0xOTQ5LDEwICs3NTcsMTAgQEAKIAogCS8qIENsZWFyIDQ5NjUncyBpbnRlcm5hbCBUeCBTY2hlZHVsZXIgZGF0YSBiYXNlICovCiAJcHJpdi0+c2NkX2Jhc2VfYWRkciA9IGl3bF9yZWFkX3BycGgocHJpdiwgSVdMNDlfU0NEX1NSQU1fQkFTRV9BRERSKTsKLQlhID0gcHJpdi0+c2NkX2Jhc2VfYWRkciArIFNDRF9DT05URVhUX0RBVEFfT0ZGU0VUOwotCWZvciAoOyBhIDwgcHJpdi0+c2NkX2Jhc2VfYWRkciArIFNDRF9UWF9TVFRTX0JJVE1BUF9PRkZTRVQ7IGEgKz0gNCkKKwlhID0gcHJpdi0+c2NkX2Jhc2VfYWRkciArIElXTDQ5X1NDRF9DT05URVhUX0RBVEFfT0ZGU0VUOworCWZvciAoOyBhIDwgcHJpdi0+c2NkX2Jhc2VfYWRkciArIElXTDQ5X1NDRF9UWF9TVFRTX0JJVE1BUF9PRkZTRVQ7IGEgKz0gNCkKIAkJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsIGEsIDApOwotCWZvciAoOyBhIDwgcHJpdi0+c2NkX2Jhc2VfYWRkciArIFNDRF9UUkFOU0xBVEVfVEJMX09GRlNFVDsgYSArPSA0KQorCWZvciAoOyBhIDwgcHJpdi0+c2NkX2Jhc2VfYWRkciArIElXTDQ5X1NDRF9UUkFOU0xBVEVfVEJMX09GRlNFVDsgYSArPSA0KQogCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwgYSwgMCk7CiAJZm9yICg7IGEgPCBzaXplb2YodTE2KSAqIHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgYSArPSA0KQogCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwgYSwgMCk7CkBAIC0xOTc0LDE2MCArNzgyLDEwOSBAQAogCiAJCS8qIE1heCBUeCBXaW5kb3cgc2l6ZSBmb3IgU2NoZWR1bGVyLUFDSyBtb2RlICovCiAJCWl3bF93cml0ZV90YXJnX21lbShwcml2LCBwcml2LT5zY2RfYmFzZV9hZGRyICsKLQkJCQkJU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKGkpLAotCQkJCQkoU0NEX1dJTl9TSVpFIDw8Ci0JCQkJCVNDRF9RVUVVRV9DVFhfUkVHMV9XSU5fU0laRV9QT1MpICYKLQkJCQkJU0NEX1FVRVVFX0NUWF9SRUcxX1dJTl9TSVpFX01TSyk7CisJCQkJSVdMNDlfU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKGkpLAorCQkJCShTQ0RfV0lOX1NJWkUgPDwKKwkJCQlJV0w0OV9TQ0RfUVVFVUVfQ1RYX1JFRzFfV0lOX1NJWkVfUE9TKSAmCisJCQkJSVdMNDlfU0NEX1FVRVVFX0NUWF9SRUcxX1dJTl9TSVpFX01TSyk7CiAKIAkJLyogRnJhbWUgbGltaXQgKi8KIAkJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsIHByaXYtPnNjZF9iYXNlX2FkZHIgKwotCQkJCQlTQ0RfQ09OVEVYVF9RVUVVRV9PRkZTRVQoaSkgKwotCQkJCQlzaXplb2YodTMyKSwKLQkJCQkJKFNDRF9GUkFNRV9MSU1JVCA8PAotCQkJCQlTQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfUE9TKSAmCi0JCQkJCVNDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9NU0spOworCQkJCUlXTDQ5X1NDRF9DT05URVhUX1FVRVVFX09GRlNFVChpKSArCisJCQkJc2l6ZW9mKHUzMiksCisJCQkJKFNDRF9GUkFNRV9MSU1JVCA8PAorCQkJCUlXTDQ5X1NDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9QT1MpICYKKwkJCQlJV0w0OV9TQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfTVNLKTsKIAogCX0KIAlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w0OV9TQ0RfSU5URVJSVVBUX01BU0ssCiAJCQkJICgxIDw8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bSkgLSAxKTsKIAogCS8qIEFjdGl2YXRlIGFsbCBUeCBETUEvRklGTyBjaGFubmVscyAqLwotCWl3bF93cml0ZV9wcnBoKHByaXYsIElXTDQ5X1NDRF9UWEZBQ1QsCi0JCQkJIFNDRF9UWEZBQ1RfUkVHX1RYRklGT19NQVNLKDAsIDcpKTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfc2V0X3NjaGVkKHByaXYsIElXTF9NQVNLKDAsIDcpKTsKIAogCWl3bDQ5NjVfc2V0X3dyX3B0cnMocHJpdiwgSVdMX0NNRF9RVUVVRV9OVU0sIDApOwogCiAJLyogTWFwIGVhY2ggVHgvY21kIHF1ZXVlIHRvIGl0cyBjb3JyZXNwb25kaW5nIGZpZm8gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZWZhdWx0X3F1ZXVlX3RvX3R4X2ZpZm8pOyBpKyspIHsKIAkJaW50IGFjID0gZGVmYXVsdF9xdWV1ZV90b190eF9maWZvW2ldOwotCQlpd2w0OTY1X3R4cV9jdHhfYWN0aXZhdGUocHJpdiwgaSk7CisJCWl3bF90eHFfY3R4X2FjdGl2YXRlKHByaXYsIGkpOwogCQlpd2w0OTY1X3R4X3F1ZXVlX3NldF9zdGF0dXMocHJpdiwgJnByaXYtPnR4cVtpXSwgYWMsIDApOwogCX0KIAogCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JLyogQXNrIGZvciBzdGF0aXN0aWNzIG5vdywgdGhlIHVDb2RlIHdpbGwgc2VuZCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbgotCSAqIHBlcmlvZGljYWxseSBhZnRlciBhc3NvY2lhdGlvbiAqLwotCWl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2LCBDTURfQVNZTkMpOwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyBpd2w0OTY1X3NlbnNpdGl2aXR5ID0geworCS5taW5fbnJnX2NjayA9IDk3LAorCS5tYXhfbnJnX2NjayA9IDAsCisKKwkuYXV0b19jb3JyX21pbl9vZmRtID0gODUsCisJLmF1dG9fY29ycl9taW5fb2ZkbV9tcmMgPSAxNzAsCisJLmF1dG9fY29ycl9taW5fb2ZkbV94MSA9IDEwNSwKKwkuYXV0b19jb3JyX21pbl9vZmRtX21yY194MSA9IDIyMCwKKworCS5hdXRvX2NvcnJfbWF4X29mZG0gPSAxMjAsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV9tcmMgPSAyMTAsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV94MSA9IDE0MCwKKwkuYXV0b19jb3JyX21heF9vZmRtX21yY194MSA9IDI3MCwKKworCS5hdXRvX2NvcnJfbWluX2NjayA9IDEyNSwKKwkuYXV0b19jb3JyX21heF9jY2sgPSAyMDAsCisJLmF1dG9fY29ycl9taW5fY2NrX21yYyA9IDIwMCwKKwkuYXV0b19jb3JyX21heF9jY2tfbXJjID0gNDAwLAorCisJLm5yZ190aF9jY2sgPSAxMDAsCisJLm5yZ190aF9vZmRtID0gMTAwLAorfTsKKwogLyoqCiAgKiBpd2w0OTY1X2h3X3NldF9od19wYXJhbXMKICAqCiAgKiBDYWxsZWQgd2hlbiBpbml0aWFsaXppbmcgZHJpdmVyCiAgKi8KLWludCBpd2w0OTY1X2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCi0JaWYgKChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPiBJV0w0OTY1X01BWF9OVU1fUVVFVUVTKSB8fAorCWlmICgocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzID4gSVdMNDlfTlVNX1FVRVVFUykgfHwKIAkgICAgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8IElXTF9NSU5fTlVNX1FVRVVFUykpIHsKIAkJSVdMX0VSUk9SKCJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKLQkJCSAgSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w0OTY1X01BWF9OVU1fUVVFVUVTKTsKKwkJCSAgSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w0OV9OVU1fUVVFVUVTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtID0gcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzOwotCXByaXYtPmh3X3BhcmFtcy50eF9jbWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3R4X2NtZCk7Ci0JcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfc2l6ZSA9IFJYX1FVRVVFX1NJWkU7Ci0JcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfbG9nID0gUlhfUVVFVUVfU0laRV9MT0c7Ci0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+YW1zZHVfc2l6ZV84SykKLQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplID0gSVdMX1JYX0JVRl9TSVpFXzhLOwotCWVsc2UKLQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplID0gSVdMX1JYX0JVRl9TSVpFXzRLOwotCXByaXYtPmh3X3BhcmFtcy5tYXhfcGt0X3NpemUgPSBwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUgLSAyNTY7CisJcHJpdi0+aHdfcGFyYW1zLmZpcnN0X2FtcGR1X3EgPSBJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRTsKIAlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMNDk2NV9TVEFUSU9OX0NPVU5UOwogCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0w0OTY1X0JST0FEQ0FTVF9JRDsKKwlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDQ5X1JUQ19EQVRBX1NJWkU7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w0OV9SVENfSU5TVF9TSVpFOworCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSBCU01fU1JBTV9TSVpFOworCXByaXYtPmh3X3BhcmFtcy5mYXRfY2hhbm5lbCA9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAogCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gMjsKIAlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IDI7Ci0JcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCA9IChJV0xfQU5URU5OQV9NQUlOIHwgSVdMX0FOVEVOTkFfQVVYKTsKLQlwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50ID0gKElXTF9BTlRFTk5BX01BSU4gfCBJV0xfQU5URU5OQV9BVVgpOworCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQSB8IEFOVF9COworCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBBTlRfQSB8IEFOVF9COworCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9IENFTFNJVVNfVE9fS0VMVklOKENUX0tJTExfVEhSRVNIT0xEKTsKKworCXByaXYtPmh3X3BhcmFtcy5zZW5zID0gJml3bDQ5NjVfc2Vuc2l0aXZpdHk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBpd2w0OTY1X2h3X3R4cV9jdHhfZnJlZSAtIEZyZWUgVFhRIENvbnRleHQKLSAqCi0gKiBEZXN0cm95IGFsbCBUWCBETUEgcXVldWVzIGFuZCBzdHJ1Y3R1cmVzCi0gKi8KLXZvaWQgaXdsNDk2NV9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KQorLyogc2V0IGNhcmQgcG93ZXIgY29tbWFuZCAqLworc3RhdGljIGludCBpd2w0OTY1X3NldF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHZvaWQgKmNtZCkKIHsKLQlpbnQgdHhxX2lkOworCWludCByZXQgPSAwOwogCi0JLyogVHggcXVldWVzICovCi0JZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKQotCQlpd2w0OTY1X3R4X3F1ZXVlX2ZyZWUocHJpdiwgJnByaXYtPnR4cVt0eHFfaWRdKTsKLQotCS8qIEtlZXAtd2FybSBidWZmZXIgKi8KLQlpd2w0OTY1X2t3X2ZyZWUocHJpdik7Ci19Ci0KLS8qKgotICogaXdsNDk2NV9od190eHFfZnJlZV90ZmQgLSBGcmVlIGFsbCBjaHVua3MgcmVmZXJlbmNlZCBieSBURkQgW3R4cS0+cS5yZWFkX3B0cl0KLSAqCi0gKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBURkQgY2lyY3VsYXIgYnVmZmVyIHJlYWQvd3JpdGUgaW5kZXhlcwotICogRG9lcyBOT1QgZnJlZSB0aGUgVEZEIGl0c2VsZiAod2hpY2ggaXMgd2l0aGluIGNpcmN1bGFyIGJ1ZmZlcikKLSAqLwotaW50IGl3bDQ5NjVfaHdfdHhxX2ZyZWVfdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSkKLXsKLQlzdHJ1Y3QgaXdsNDk2NV90ZmRfZnJhbWUgKmJkX3RtcCA9IChzdHJ1Y3QgaXdsNDk2NV90ZmRfZnJhbWUgKikmdHhxLT5iZFswXTsKLQlzdHJ1Y3QgaXdsNDk2NV90ZmRfZnJhbWUgKmJkID0gJmJkX3RtcFt0eHEtPnEucmVhZF9wdHJdOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCWludCBpOwotCWludCBjb3VudGVyID0gMDsKLQlpbnQgaW5kZXgsIGlzX29kZDsKLQotCS8qIEhvc3QgY29tbWFuZCBidWZmZXJzIHN0YXkgbWFwcGVkIGluIG1lbW9yeSwgbm90aGluZyB0byBjbGVhbiAqLwotCWlmICh0eHEtPnEuaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCi0JCXJldHVybiAwOwotCi0JLyogU2FuaXR5IGNoZWNrIG9uIG51bWJlciBvZiBjaHVua3MgKi8KLQljb3VudGVyID0gSVdMX0dFVF9CSVRTKCpiZCwgbnVtX3Ricyk7Ci0JaWYgKGNvdW50ZXIgPiBNQVhfTlVNX09GX1RCUykgewotCQlJV0xfRVJST1IoIlRvbyBtYW55IGNodW5rczogJWlcbiIsIGNvdW50ZXIpOwotCQkvKiBAdG9kbyBpc3N1ZSBmYXRhbCBlcnJvciwgaXQgaXMgcXVpdGUgc2VyaW91cyBzaXR1YXRpb24gKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogVW5tYXAgY2h1bmtzLCBpZiBhbnkuCi0JICogVEZEIGluZm8gZm9yIG9kZCBjaHVua3MgaXMgZGlmZmVyZW50IGZvcm1hdCB0aGFuIGZvciBldmVuIGNodW5rcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnRlcjsgaSsrKSB7Ci0JCWluZGV4ID0gaSAvIDI7Ci0JCWlzX29kZCA9IGkgJiAweDE7Ci0KLQkJaWYgKGlzX29kZCkKLQkJCXBjaV91bm1hcF9zaW5nbGUoCi0JCQkJZGV2LAotCQkJCUlXTF9HRVRfQklUUyhiZC0+cGFbaW5kZXhdLCB0YjJfYWRkcl9sbzE2KSB8Ci0JCQkJKElXTF9HRVRfQklUUyhiZC0+cGFbaW5kZXhdLAotCQkJCQkgICAgICB0YjJfYWRkcl9oaTIwKSA8PCAxNiksCi0JCQkJSVdMX0dFVF9CSVRTKGJkLT5wYVtpbmRleF0sIHRiMl9sZW4pLAotCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JCWVsc2UgaWYgKGkgPiAwKQotCQkJcGNpX3VubWFwX3NpbmdsZShkZXYsCi0JCQkJCSBsZTMyX3RvX2NwdShiZC0+cGFbaW5kZXhdLnRiMV9hZGRyKSwKLQkJCQkJIElXTF9HRVRfQklUUyhiZC0+cGFbaW5kZXhdLCB0YjFfbGVuKSwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JCS8qIEZyZWUgU0tCLCBpZiBhbnksIGZvciB0aGlzIGNodW5rICovCi0JCWlmICh0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpXSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2ldOwotCi0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQl0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpXSA9IE5VTEw7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBpd2w0OTY1X2h3X3JlZ19zZXRfdHhwb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHM4IHBvd2VyKQotewotCUlXTF9FUlJPUigiVE9ETzogSW1wbGVtZW50IGl3bDQ5NjVfaHdfcmVnX3NldF90eHBvd2VyIVxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBQT1dFUl9UQUJMRV9DTUQsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9wb3dlcnRhYmxlX2NtZCksCisJCQkJICAgIGNtZCwgTlVMTCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHMzMiBpd2w0OTY1X21hdGhfZGl2X3JvdW5kKHMzMiBudW0sIHMzMiBkZW5vbSwgczMyICpyZXMpCkBAIC0yMTc5LDIwICs5MzYsNiBAQAogCXJldHVybiBjb21wOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKgotaXdsNDk2NV9nZXRfY2hhbm5lbF90eHBvd2VyX2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsKQotewotCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIGNoYW5uZWwpOwotCi0JaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBjaF9pbmZvOwotfQotCiBzdGF0aWMgczMyIGl3bDQ5NjVfZ2V0X3R4X2F0dGVuX2dycCh1MTYgY2hhbm5lbCkKIHsKIAlpZiAoY2hhbm5lbCA+PSBDQUxJQl9JV0xfVFhfQVRURU5fR1I1X0ZDSCAmJgpAQCAtMjIyNCwxMSArOTY3LDExIEBACiAJczMyIGIgPSAtMTsKIAogCWZvciAoYiA9IDA7IGIgPCBFRVBST01fVFhfUE9XRVJfQkFORFM7IGIrKykgewotCQlpZiAocHJpdi0+ZWVwcm9tLmNhbGliX2luZm8uYmFuZF9pbmZvW2JdLmNoX2Zyb20gPT0gMCkKKwkJaWYgKHByaXYtPmNhbGliX2luZm8tPmJhbmRfaW5mb1tiXS5jaF9mcm9tID09IDApCiAJCQljb250aW51ZTsKIAotCQlpZiAoKGNoYW5uZWwgPj0gcHJpdi0+ZWVwcm9tLmNhbGliX2luZm8uYmFuZF9pbmZvW2JdLmNoX2Zyb20pCi0JCSAgICAmJiAoY2hhbm5lbCA8PSBwcml2LT5lZXByb20uY2FsaWJfaW5mby5iYW5kX2luZm9bYl0uY2hfdG8pKQorCQlpZiAoKGNoYW5uZWwgPj0gcHJpdi0+Y2FsaWJfaW5mby0+YmFuZF9pbmZvW2JdLmNoX2Zyb20pCisJCSAgICAmJiAoY2hhbm5lbCA8PSBwcml2LT5jYWxpYl9pbmZvLT5iYW5kX2luZm9bYl0uY2hfdG8pKQogCQkJYnJlYWs7CiAJfQogCkBAIC0yMjU2LDE0ICs5OTksMTQgQEAKICAqIGluIGNoYW5uZWwgbnVtYmVyLgogICovCiBzdGF0aWMgaW50IGl3bDQ5NjVfaW50ZXJwb2xhdGVfY2hhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBjaGFubmVsLAotCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfY2hfaW5mbyAqY2hhbl9pbmZvKQorCQkJCSAgICBzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9jaF9pbmZvICpjaGFuX2luZm8pCiB7CiAJczMyIHMgPSAtMTsKIAl1MzIgYzsKIAl1MzIgbTsKLQljb25zdCBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfbWVhc3VyZSAqbTE7Ci0JY29uc3Qgc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX21lYXN1cmUgKm0yOwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9tZWFzdXJlICpvbWVhczsKKwljb25zdCBzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9tZWFzdXJlICptMTsKKwljb25zdCBzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9tZWFzdXJlICptMjsKKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9tZWFzdXJlICpvbWVhczsKIAl1MzIgY2hfaTE7CiAJdTMyIGNoX2kyOwogCkBAIC0yMjczLDggKzEwMTYsOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JY2hfaTEgPSBwcml2LT5lZXByb20uY2FsaWJfaW5mby5iYW5kX2luZm9bc10uY2gxLmNoX251bTsKLQljaF9pMiA9IHByaXYtPmVlcHJvbS5jYWxpYl9pbmZvLmJhbmRfaW5mb1tzXS5jaDIuY2hfbnVtOworCWNoX2kxID0gcHJpdi0+Y2FsaWJfaW5mby0+YmFuZF9pbmZvW3NdLmNoMS5jaF9udW07CisJY2hfaTIgPSBwcml2LT5jYWxpYl9pbmZvLT5iYW5kX2luZm9bc10uY2gyLmNoX251bTsKIAljaGFuX2luZm8tPmNoX251bSA9ICh1OCkgY2hhbm5lbDsKIAogCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFubmVsICVkIHN1YmJhbmQgJWQgZmFjdG9yeSBjYWwgY2ggJWQgJiAlZFxuIiwKQEAgLTIyODIsOSArMTAyNSw5IEBACiAKIAlmb3IgKGMgPSAwOyBjIDwgRUVQUk9NX1RYX1BPV0VSX1RYX0NIQUlOUzsgYysrKSB7CiAJCWZvciAobSA9IDA7IG0gPCBFRVBST01fVFhfUE9XRVJfTUVBU1VSRU1FTlRTOyBtKyspIHsKLQkJCW0xID0gJihwcml2LT5lZXByb20uY2FsaWJfaW5mby5iYW5kX2luZm9bc10uY2gxLgorCQkJbTEgPSAmKHByaXYtPmNhbGliX2luZm8tPmJhbmRfaW5mb1tzXS5jaDEuCiAJCQkgICAgICAgbWVhc3VyZW1lbnRzW2NdW21dKTsKLQkJCW0yID0gJihwcml2LT5lZXByb20uY2FsaWJfaW5mby5iYW5kX2luZm9bc10uY2gyLgorCQkJbTIgPSAmKHByaXYtPmNhbGliX2luZm8tPmJhbmRfaW5mb1tzXS5jaDIuCiAJCQkgICAgICAgbWVhc3VyZW1lbnRzW2NdW21dKTsKIAkJCW9tZWFzID0gJihjaGFuX2luZm8tPm1lYXN1cmVtZW50c1tjXVttXSk7CiAKQEAgLTI2MDMsOCArMTM0Niw4IEBACiAJaW50IGk7CiAJaW50IGM7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9jaF9pbmZvIGNoX2VlcHJvbV9pbmZvOwotCWNvbnN0IHN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9tZWFzdXJlICptZWFzdXJlbWVudDsKKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9jaF9pbmZvIGNoX2VlcHJvbV9pbmZvOworCWNvbnN0IHN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX21lYXN1cmUgKm1lYXN1cmVtZW50OwogCXMxNiB2b2x0YWdlOwogCXMzMiBpbml0X3ZvbHRhZ2U7CiAJczMyIHZvbHRhZ2VfY29tcGVuc2F0aW9uOwpAQCAtMjYxNiwzMCArMTM1OSwxNyBAQAogCXMzMiBmYWN0b3J5X2FjdHVhbF9wd3JbMl07CiAJczMyIHBvd2VyX2luZGV4OwogCi0JLyogU2FuaXR5IGNoZWNrIHJlcXVlc3RlZCBsZXZlbCAoZEJtKSAqLwotCWlmIChwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPCBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTikgewotCQlJV0xfV0FSTklORygiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBiZWxvdyBsaW1pdC5cbiIsCi0JCQkgICAgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPiBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWCkgewotCQlJV0xfV0FSTklORygiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBhYm92ZSBsaW1pdC5cbiIsCi0JCQkgICAgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJLyogdXNlcl90eHBvd2VyX2xpbWl0IGlzIGluIGRCbSwgY29udmVydCB0byBoYWxmLWRCbSAoaGFsZi1kQiB1bml0cwogCSAqICAgYXJlIHVzZWQgZm9yIGluZGV4aW5nIGludG8gdHhwb3dlciB0YWJsZSkgKi8KLQl1c2VyX3RhcmdldF9wb3dlciA9IDIgKiBwcml2LT51c2VyX3R4cG93ZXJfbGltaXQ7CisJdXNlcl90YXJnZXRfcG93ZXIgPSAyICogcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQ7CiAKIAkvKiBHZXQgY3VycmVudCAoUlhPTikgY2hhbm5lbCwgYmFuZCwgd2lkdGggKi8KLQljaF9pbmZvID0KLQkJaXdsNDk2NV9nZXRfY2hhbm5lbF90eHBvd2VyX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwgY2hhbm5lbCk7Ci0KIAlJV0xfREVCVUdfVFhQT1dFUigiY2hhbiAlZCBiYW5kICVkIGlzX2ZhdCAlZFxuIiwgY2hhbm5lbCwgYmFuZCwKIAkJCSAgaXNfZmF0KTsKIAotCWlmICghY2hfaW5mbykKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwgY2hhbm5lbCk7CisKKwlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogZ2V0IHR4YXR0ZW4gZ3JvdXAsIHVzZWQgdG8gc2VsZWN0IDEpIHRoZXJtYWwgdHhwb3dlciBhZGp1c3RtZW50CkBAIC0yNjYxLDkgKzEzOTEsOSBAQAogCS8qIGhhcmR3YXJlIHR4cG93ZXIgbGltaXRzIC4uLgogCSAqIHNhdHVyYXRpb24gKGNsaXBwaW5nIGRpc3RvcnRpb24pIHR4cG93ZXJzIGFyZSBpbiBoYWxmLWRCbSAqLwogCWlmIChiYW5kKQotCQlzYXR1cmF0aW9uX3Bvd2VyID0gcHJpdi0+ZWVwcm9tLmNhbGliX2luZm8uc2F0dXJhdGlvbl9wb3dlcjI0OworCQlzYXR1cmF0aW9uX3Bvd2VyID0gcHJpdi0+Y2FsaWJfaW5mby0+c2F0dXJhdGlvbl9wb3dlcjI0OwogCWVsc2UKLQkJc2F0dXJhdGlvbl9wb3dlciA9IHByaXYtPmVlcHJvbS5jYWxpYl9pbmZvLnNhdHVyYXRpb25fcG93ZXI1MjsKKwkJc2F0dXJhdGlvbl9wb3dlciA9IHByaXYtPmNhbGliX2luZm8tPnNhdHVyYXRpb25fcG93ZXI1MjsKIAogCWlmIChzYXR1cmF0aW9uX3Bvd2VyIDwgSVdMX1RYX1BPV0VSX1NBVFVSQVRJT05fTUlOIHx8CiAJICAgIHNhdHVyYXRpb25fcG93ZXIgPiBJV0xfVFhfUE9XRVJfU0FUVVJBVElPTl9NQVgpIHsKQEAgLTI2OTMsNyArMTQyMyw3IEBACiAJaXdsNDk2NV9pbnRlcnBvbGF0ZV9jaGFuKHByaXYsIGNoYW5uZWwsICZjaF9lZXByb21faW5mbyk7CiAKIAkvKiBjYWxjdWxhdGUgdHggZ2FpbiBhZGp1c3RtZW50IGJhc2VkIG9uIHBvd2VyIHN1cHBseSB2b2x0YWdlICovCi0Jdm9sdGFnZSA9IHByaXYtPmVlcHJvbS5jYWxpYl9pbmZvLnZvbHRhZ2U7CisJdm9sdGFnZSA9IHByaXYtPmNhbGliX2luZm8tPnZvbHRhZ2U7CiAJaW5pdF92b2x0YWdlID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudm9sdGFnZSk7CiAJdm9sdGFnZV9jb21wZW5zYXRpb24gPQogCSAgICBpd2w0OTY1X2dldF92b2x0YWdlX2NvbXBlbnNhdGlvbih2b2x0YWdlLCBpbml0X3ZvbHRhZ2UpOwpAQCAtMjg0MCwxMiArMTU3MCwxMiBAQAogfQogCiAvKioKLSAqIGl3bDQ5NjVfaHdfcmVnX3NlbmRfdHhwb3dlciAtIENvbmZpZ3VyZSB0aGUgVFhQT1dFUiBsZXZlbCB1c2VyIGxpbWl0CisgKiBpd2w0OTY1X3NlbmRfdHhfcG93ZXIgLSBDb25maWd1cmUgdGhlIFRYUE9XRVIgbGV2ZWwgdXNlciBsaW1pdAogICoKICAqIFVzZXMgdGhlIGFjdGl2ZSBSWE9OIGZvciBjaGFubmVsLCBiYW5kLCBhbmQgY2hhcmFjdGVyaXN0aWNzIChmYXQsIGhpZ2gpCi0gKiBUaGUgcG93ZXIgbGltaXQgaXMgdGFrZW4gZnJvbSBwcml2LT51c2VyX3R4cG93ZXJfbGltaXQuCisgKiBUaGUgcG93ZXIgbGltaXQgaXMgdGFrZW4gZnJvbSBwcml2LT50eF9wb3dlcl91c2VyX2xtdC4KICAqLwotaW50IGl3bDQ5NjVfaHdfcmVnX3NlbmRfdHhwb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfc2VuZF90eF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCBjbWQgPSB7IDAgfTsKIAlpbnQgcmV0OwpAQCAtMjg4OCw4ICsxNjE4LDggQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaXdsNDk2NV9yeG9uX2Fzc29jX2NtZCByeG9uX2Fzc29jOwotCWNvbnN0IHN0cnVjdCBpd2w0OTY1X3J4b25fY21kICpyeG9uMSA9ICZwcml2LT5zdGFnaW5nX3J4b247Ci0JY29uc3Qgc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgKnJ4b24yID0gJnByaXYtPmFjdGl2ZV9yeG9uOworCWNvbnN0IHN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24xID0gJnByaXYtPnN0YWdpbmdfcnhvbjsKKwljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uMiA9ICZwcml2LT5hY3RpdmVfcnhvbjsKIAogCWlmICgocnhvbjEtPmZsYWdzID09IHJ4b24yLT5mbGFncykgJiYKIAkgICAgKHJ4b24xLT5maWx0ZXJfZmxhZ3MgPT0gcnhvbjItPmZpbHRlcl9mbGFncykgJiYKQEAgLTI5NjUsODkgKzE2OTUsMTQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLSNkZWZpbmUgUlRTX0hDQ0FfUkVUUllfTElNSVQJCTMKLSNkZWZpbmUgUlRTX0RGQVVMVF9SRVRSWV9MSU1JVAkJNjAKLQotdm9pZCBpd2w0OTY1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0cmwsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBpbnQgc3RhX2lkLAotCQkJICAgICAgaW50IGlzX2hjY2EpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfdHhfY21kICp0eCA9ICZjbWQtPmNtZC50eDsKLQl1OCBydHNfcmV0cnlfbGltaXQgPSAwOwotCXU4IGRhdGFfcmV0cnlfbGltaXQgPSAwOwotCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JdTggcmF0ZV9wbGNwOwotCXUxNiByYXRlX2ZsYWdzID0gMDsKLQlpbnQgcmF0ZV9pZHggPSBtaW4oY3RybC0+dHhfcmF0ZS0+aHdfdmFsdWUgJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7Ci0KLQlyYXRlX3BsY3AgPSBpd2w0OTY1X3JhdGVzW3JhdGVfaWR4XS5wbGNwOwotCi0JcnRzX3JldHJ5X2xpbWl0ID0gKGlzX2hjY2EpID8KLQkgICAgUlRTX0hDQ0FfUkVUUllfTElNSVQgOiBSVFNfREZBVUxUX1JFVFJZX0xJTUlUOwotCi0JaWYgKChyYXRlX2lkeCA+PSBJV0xfRklSU1RfQ0NLX1JBVEUpICYmIChyYXRlX2lkeCA8PSBJV0xfTEFTVF9DQ0tfUkFURSkpCi0JCXJhdGVfZmxhZ3MgfD0gUkFURV9NQ1NfQ0NLX01TSzsKLQotCi0JaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwb25zZShmYykpIHsKLQkJZGF0YV9yZXRyeV9saW1pdCA9IDM7Ci0JCWlmIChkYXRhX3JldHJ5X2xpbWl0IDwgcnRzX3JldHJ5X2xpbWl0KQotCQkJcnRzX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKLQl9IGVsc2UKLQkJZGF0YV9yZXRyeV9saW1pdCA9IElXTF9ERUZBVUxUX1RYX1JFVFJZOwotCi0JaWYgKHByaXYtPmRhdGFfcmV0cnlfbGltaXQgIT0gLTEpCi0JCWRhdGFfcmV0cnlfbGltaXQgPSBwcml2LT5kYXRhX3JldHJ5X2xpbWl0OwotCi0KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7Ci0JCXR4LT5pbml0aWFsX3JhdGVfaW5kZXggPSAwOwotCQl0eC0+dHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19TVEFfUkFURV9NU0s7Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUToKLQkJCWlmICh0eC0+dHhfZmxhZ3MgJiBUWF9DTURfRkxHX1JUU19NU0spIHsKLQkJCQl0eC0+dHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfUlRTX01TSzsKLQkJCQl0eC0+dHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19DVFNfTVNLOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEFsdGVybmF0ZSBiZXR3ZWVuIGFudGVubmEgQSBhbmQgQiBmb3Igc3VjY2Vzc2l2ZSBmcmFtZXMgKi8KLQkJaWYgKHByaXYtPnVzZV9hbnRfYl9mb3JfbWFuYWdlbWVudF9mcmFtZSkgewotCQkJcHJpdi0+dXNlX2FudF9iX2Zvcl9tYW5hZ2VtZW50X2ZyYW1lID0gMDsKLQkJCXJhdGVfZmxhZ3MgfD0gUkFURV9NQ1NfQU5UX0JfTVNLOwotCQl9IGVsc2UgewotCQkJcHJpdi0+dXNlX2FudF9iX2Zvcl9tYW5hZ2VtZW50X2ZyYW1lID0gMTsKLQkJCXJhdGVfZmxhZ3MgfD0gUkFURV9NQ1NfQU5UX0FfTVNLOwotCQl9Ci0JfQotCi0JdHgtPnJ0c19yZXRyeV9saW1pdCA9IHJ0c19yZXRyeV9saW1pdDsKLQl0eC0+ZGF0YV9yZXRyeV9saW1pdCA9IGRhdGFfcmV0cnlfbGltaXQ7Ci0JdHgtPnJhdGVfbl9mbGFncyA9IGl3bDQ5NjVfaHdfc2V0X3JhdGVfbl9mbGFncyhyYXRlX3BsY3AsIHJhdGVfZmxhZ3MpOwotfQotCi1pbnQgaXdsNDk2NV9od19nZXRfcnhfcmVhZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfc2hhcmVkX21lbV9yeF9pZHgoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2w0OTY1X3NoYXJlZCAqcyA9IHByaXYtPnNoYXJlZF92aXJ0OwogCXJldHVybiBsZTMyX3RvX2NwdShzLT5yYl9jbG9zZWQpICYgMHhGRkY7CiB9CiAKLWludCBpd2w0OTY1X2h3X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHByaXYtPnRlbXBlcmF0dXJlOwotfQotCiB1bnNpZ25lZCBpbnQgaXdsNDk2NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgIHN0cnVjdCBpd2w0OTY1X2ZyYW1lICpmcmFtZSwgdTggcmF0ZSkKKwkJCSAgc3RydWN0IGl3bF9mcmFtZSAqZnJhbWUsIHU4IHJhdGUpCiB7CiAJc3RydWN0IGl3bDQ5NjVfdHhfYmVhY29uX2NtZCAqdHhfYmVhY29uX2NtZDsKIAl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsKQEAgLTMwNjAsNyArMTcxNSw3IEBACiAKIAlmcmFtZV9zaXplID0gaXdsNDk2NV9maWxsX2JlYWNvbl9mcmFtZShwcml2LAogCQkJCXR4X2JlYWNvbl9jbWQtPmZyYW1lLAotCQkJCWl3bDQ5NjVfYnJvYWRjYXN0X2FkZHIsCisJCQkJaXdsX2JjYXN0X2FkZHIsCiAJCQkJc2l6ZW9mKGZyYW1lLT51KSAtIHNpemVvZigqdHhfYmVhY29uX2NtZCkpOwogCiAJQlVHX09OKGZyYW1lX3NpemUgPiBNQVhfTVBEVV9TSVpFKTsKQEAgLTMwNjgsMTA1ICsxNzIzLDQ1IEBACiAKIAlpZiAoKHJhdGUgPT0gSVdMX1JBVEVfMU1fUExDUCkgfHwgKHJhdGUgPj0gSVdMX1JBVEVfMk1fUExDUCkpCiAJCXR4X2JlYWNvbl9jbWQtPnR4LnJhdGVfbl9mbGFncyA9Ci0JCQlpd2w0OTY1X2h3X3NldF9yYXRlX25fZmxhZ3MocmF0ZSwgUkFURV9NQ1NfQ0NLX01TSyk7CisJCQlpd2xfaHdfc2V0X3JhdGVfbl9mbGFncyhyYXRlLCBSQVRFX01DU19DQ0tfTVNLKTsKIAllbHNlCiAJCXR4X2JlYWNvbl9jbWQtPnR4LnJhdGVfbl9mbGFncyA9Ci0JCQlpd2w0OTY1X2h3X3NldF9yYXRlX25fZmxhZ3MocmF0ZSwgMCk7CisJCQlpd2xfaHdfc2V0X3JhdGVfbl9mbGFncyhyYXRlLCAwKTsKIAogCXR4X2JlYWNvbl9jbWQtPnR4LnR4X2ZsYWdzID0gKFRYX0NNRF9GTEdfU0VRX0NUTF9NU0sgfAogCQkJCVRYX0NNRF9GTEdfVFNGX01TSyB8IFRYX0NNRF9GTEdfU1RBX1JBVEVfTVNLKTsKIAlyZXR1cm4gKHNpemVvZigqdHhfYmVhY29uX2NtZCkgKyBmcmFtZV9zaXplKTsKIH0KIAotLyoKLSAqIFRlbGwgNDk2NSB3aGVyZSB0byBmaW5kIGNpcmN1bGFyIGJ1ZmZlciBvZiBUeCBGcmFtZSBEZXNjcmlwdG9ycyBmb3IKLSAqIGdpdmVuIFR4IHF1ZXVlLCBhbmQgZW5hYmxlIHRoZSBETUEgY2hhbm5lbCB1c2VkIGZvciB0aGF0IHF1ZXVlLgotICoKLSAqIDQ5NjUgc3VwcG9ydHMgdXAgdG8gMTYgVHggcXVldWVzIGluIERSQU0sIG1hcHBlZCB0byB1cCB0byA4IFR4IERNQQotICogY2hhbm5lbHMgc3VwcG9ydGVkIGluIGhhcmR3YXJlLgotICovCi1pbnQgaXdsNDk2NV9od190eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSkKK3N0YXRpYyBpbnQgaXdsNDk2NV9hbGxvY19zaGFyZWRfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcmM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOworCXByaXYtPnNoYXJlZF92aXJ0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3NoYXJlZCksCisJCQkJCSZwcml2LT5zaGFyZWRfcGh5cyk7CisJaWYgKCFwcml2LT5zaGFyZWRfdmlydCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmMpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcmM7Ci0JfQorCW1lbXNldChwcml2LT5zaGFyZWRfdmlydCwgMCwgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3NoYXJlZCkpOwogCi0JLyogQ2lyY3VsYXIgYnVmZmVyIChURkQgcXVldWUgaW4gRFJBTSkgcGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCi0JaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX01FTV9DQkJDX1FVRVVFKHR4cV9pZCksCi0JCQkgICAgIHR4cS0+cS5kbWFfYWRkciA+PiA4KTsKLQotCS8qIEVuYWJsZSBETUEgY2hhbm5lbCwgdXNpbmcgc2FtZSBpZCBhcyBmb3IgVEZEIHF1ZXVlICovCi0JaXdsX3dyaXRlX2RpcmVjdDMyKAotCQlwcml2LCBJV0xfRkhfVENTUl9DSE5MX1RYX0NPTkZJR19SRUcodHhxX2lkKSwKLQkJSVdMX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFIHwKLQkJSVdMX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMKTsKLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5yYl9jbG9zZWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGl3bDQ5NjVfc2hhcmVkLCByYl9jbG9zZWQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2w0OTY1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHZvaWQgKnB0ciwKLQkJCQkgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKQorc3RhdGljIHZvaWQgaXdsNDk2NV9mcmVlX3NoYXJlZF9tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWludCBpbmRleCwgaXNfb2RkOwotCXN0cnVjdCBpd2w0OTY1X3RmZF9mcmFtZSAqdGZkID0gcHRyOwotCXUzMiBudW1fdGJzID0gSVdMX0dFVF9CSVRTKCp0ZmQsIG51bV90YnMpOwotCi0JLyogRWFjaCBURkQgY2FuIHBvaW50IHRvIGEgbWF4aW11bSAyMCBUeCBidWZmZXJzICovCi0JaWYgKChudW1fdGJzID49IE1BWF9OVU1fT0ZfVEJTKSB8fCAobnVtX3RicyA8IDApKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgY2FuIG5vdCBzZW5kIG1vcmUgdGhhbiAlZCBjaHVua3NcbiIsCi0JCQkgIE1BWF9OVU1fT0ZfVEJTKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaW5kZXggPSBudW1fdGJzIC8gMjsKLQlpc19vZGQgPSBudW1fdGJzICYgMHgxOwotCi0JaWYgKCFpc19vZGQpIHsKLQkJdGZkLT5wYVtpbmRleF0udGIxX2FkZHIgPSBjcHVfdG9fbGUzMihhZGRyKTsKLQkJSVdMX1NFVF9CSVRTKHRmZC0+cGFbaW5kZXhdLCB0YjFfYWRkcl9oaSwKLQkJCSAgICAgaXdsX2dldF9kbWFfaGlfYWRkcmVzcyhhZGRyKSk7Ci0JCUlXTF9TRVRfQklUUyh0ZmQtPnBhW2luZGV4XSwgdGIxX2xlbiwgbGVuKTsKLQl9IGVsc2UgewotCQlJV0xfU0VUX0JJVFModGZkLT5wYVtpbmRleF0sIHRiMl9hZGRyX2xvMTYsCi0JCQkgICAgICh1MzIpIChhZGRyICYgMHhmZmZmKSk7Ci0JCUlXTF9TRVRfQklUUyh0ZmQtPnBhW2luZGV4XSwgdGIyX2FkZHJfaGkyMCwgYWRkciA+PiAxNik7Ci0JCUlXTF9TRVRfQklUUyh0ZmQtPnBhW2luZGV4XSwgdGIyX2xlbiwgbGVuKTsKLQl9Ci0KLQlJV0xfU0VUX0JJVFMoKnRmZCwgbnVtX3RicywgbnVtX3RicyArIDEpOwotCi0JcmV0dXJuIDA7CisJaWYgKHByaXYtPnNoYXJlZF92aXJ0KQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zaGFyZWQpLAorCQkJCSAgICBwcml2LT5zaGFyZWRfdmlydCwKKwkJCQkgICAgcHJpdi0+c2hhcmVkX3BoeXMpOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2h3X2NhcmRfc2hvd19pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQl1MTYgaHdfdmVyc2lvbiA9IHByaXYtPmVlcHJvbS5ib2FyZF9yZXZpc2lvbl80OTY1OwotCi0JSVdMX0RFQlVHX0lORk8oIjQ5NjVBQkdOIEhXIFZlcnNpb24gJXUuJXUuJXVcbiIsCi0JCSAgICAgICAoKGh3X3ZlcnNpb24gPj4gOCkgJiAweDBGKSwKLQkJICAgICAgICgoaHdfdmVyc2lvbiA+PiA4KSA+PiA0KSwgKGh3X3ZlcnNpb24gJiAweDAwRkYpKTsKLQotCUlXTF9ERUJVR19JTkZPKCI0OTY1QUJHTiBQQkEgTnVtYmVyICUuMTZzXG4iLAotCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3BiYV9udW1iZXJfNDk2NSk7Ci19Ci0KLSNkZWZpbmUgSVdMX1RYX0NSQ19TSVpFCQk0Ci0jZGVmaW5lIElXTF9UWF9ERUxJTUlURVJfU0laRQk0Ci0KIC8qKgogICogaXdsNDk2NV90eHFfdXBkYXRlX2J5dGVfY250X3RibCAtIFNldCB1cCBlbnRyeSBpbiBUeCBieXRlLWNvdW50IGFycmF5CiAgKi8KIHN0YXRpYyB2b2lkIGl3bDQ5NjVfdHhxX3VwZGF0ZV9ieXRlX2NudF90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgICAgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSwKKwkJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKIAkJCQkJICAgIHUxNiBieXRlX2NudCkKIHsKIAlpbnQgbGVuOwpAQCAtMzE4MCw1MCArMTc3NSwxMyBAQAogCQkgICAgICAgdGZkX29mZnNldFt0eHEtPnEud3JpdGVfcHRyXSwgYnl0ZV9jbnQsIGxlbik7CiAKIAkvKiBJZiB3aXRoaW4gZmlyc3QgNjQgZW50cmllcywgZHVwbGljYXRlIGF0IGVuZCAqLwotCWlmICh0eHEtPnEud3JpdGVfcHRyIDwgSVdMNDk2NV9NQVhfV0lOX1NJWkUpCisJaWYgKHR4cS0+cS53cml0ZV9wdHIgPCBJV0w0OV9NQVhfV0lOX1NJWkUpCiAJCUlXTF9TRVRfQklUUzE2KHNoYXJlZF9kYXRhLT5xdWV1ZXNfYnl0ZV9jbnRfdGJsc1t0eHFfaWRdLgotCQkJdGZkX29mZnNldFtJV0w0OTY1X1FVRVVFX1NJWkUgKyB0eHEtPnEud3JpdGVfcHRyXSwKKwkJCXRmZF9vZmZzZXRbSVdMNDlfUVVFVUVfU0laRSArIHR4cS0+cS53cml0ZV9wdHJdLAogCQkJYnl0ZV9jbnQsIGxlbik7CiB9CiAKIC8qKgotICogaXdsNDk2NV9zZXRfcnhvbl9jaGFpbiAtIFNldCB1cCBSeCBjaGFpbiB1c2FnZSBpbiAic3RhZ2luZyIgUlhPTiBpbWFnZQotICoKLSAqIFNlbGVjdHMgaG93IG1hbnkgYW5kIHdoaWNoIFJ4IHJlY2VpdmVycy9hbnRlbm5hcy9jaGFpbnMgdG8gdXNlLgotICogVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHNjYW4gY29tbWFuZCAuLi4gaXQgcHV0cyBkYXRhIGluIHdyb25nIHBsYWNlLgotICovCi12b2lkIGl3bDQ5NjVfc2V0X3J4b25fY2hhaW4oc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXU4IGlzX3NpbmdsZSA9IGlzX3NpbmdsZV9zdHJlYW0ocHJpdik7Ci0JdTggaWRsZV9zdGF0ZSwgcnhfc3RhdGU7Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4gPSAwOwotCXJ4X3N0YXRlID0gaWRsZV9zdGF0ZSA9IDM7Ci0KLQkvKiBUZWxsIHVDb2RlIHdoaWNoIGFudGVubmFzIGFyZSBhY3R1YWxseSBjb25uZWN0ZWQuCi0JICogQmVmb3JlIGZpcnN0IGFzc29jaWF0aW9uLCB3ZSBhc3N1bWUgYWxsIGFudGVubmFzIGFyZSBjb25uZWN0ZWQuCi0JICogSnVzdCBhZnRlciBmaXJzdCBhc3NvY2lhdGlvbiwgaXdsNDk2NV9ub2lzZV9jYWxpYnJhdGlvbigpCi0JICogICAgY2hlY2tzIHdoaWNoIGFudGVubmFzIGFjdHVhbGx5ICphcmUqIGNvbm5lY3RlZC4gKi8KLQlwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4gfD0KLQkgICAgY3B1X3RvX2xlMTYocHJpdi0+dmFsaWRfYW50ZW5uYSA8PCBSWE9OX1JYX0NIQUlOX1ZBTElEX1BPUyk7Ci0KLQkvKiBIb3cgbWFueSByZWNlaXZlcnMgc2hvdWxkIHdlIHVzZT8gKi8KLQlpd2w0OTY1X2dldF9yeF9jaGFpbl9jb3VudGVyKHByaXYsICZpZGxlX3N0YXRlLCAmcnhfc3RhdGUpOwotCXByaXYtPnN0YWdpbmdfcnhvbi5yeF9jaGFpbiB8PQotCQljcHVfdG9fbGUxNihyeF9zdGF0ZSA8PCBSWE9OX1JYX0NIQUlOX01JTU9fQ05UX1BPUyk7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluIHw9Ci0JCWNwdV90b19sZTE2KGlkbGVfc3RhdGUgPDwgUlhPTl9SWF9DSEFJTl9DTlRfUE9TKTsKLQotCWlmICghaXNfc2luZ2xlICYmIChyeF9zdGF0ZSA+PSAyKSAmJgotCSAgICAhdGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5yeF9jaGFpbiB8PSBSWE9OX1JYX0NIQUlOX01JTU9fRk9SQ0VfTVNLOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluICY9IH5SWE9OX1JYX0NIQUlOX01JTU9fRk9SQ0VfTVNLOwotCi0JSVdMX0RFQlVHX0FTU09DKCJyeCBjaGFpbiAlWFxuIiwgcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluKTsKLX0KLQotLyoqCiAgKiBzaWduX2V4dGVuZCAtIFNpZ24gZXh0ZW5kIGEgdmFsdWUgdXNpbmcgc3BlY2lmaWVkIGJpdCBhcyBzaWduLWJpdAogICoKICAqIEV4YW1wbGU6IHNpZ25fZXh0ZW5kKDksIDMpIHdvdWxkIHJldHVybiAtNyBhcyBiaXQzIG9mIDEwMDFiIGlzIDEKQEAgLTMyNDAsMTIgKzE3OTgsMTIgQEAKIH0KIAogLyoqCi0gKiBpd2w0OTY1X2dldF90ZW1wZXJhdHVyZSAtIHJldHVybiB0aGUgY2FsaWJyYXRlZCB0ZW1wZXJhdHVyZSAoaW4gS2VsdmluKQorICogaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUgLSByZXR1cm4gdGhlIGNhbGlicmF0ZWQgdGVtcGVyYXR1cmUgKGluIEtlbHZpbikKICAqIEBzdGF0aXN0aWNzOiBQcm92aWRlcyB0aGUgdGVtcGVyYXR1cmUgcmVhZGluZyBmcm9tIHRoZSB1Q29kZQogICoKICAqIEEgcmV0dXJuIG9mIDwwIGluZGljYXRlcyBib2d1cyBkYXRhIGluIHRoZSBzdGF0aXN0aWNzCiAgKi8KLWludCBpd2w0OTY1X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfaHdfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzMzIgdGVtcGVyYXR1cmU7CiAJczMyIHZ0OwpAQCAtMzI4MCw4ICsxODM4LDcgQEAKIAkJdnQgPSBzaWduX2V4dGVuZCgKIAkJCWxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSksIDIzKTsKIAotCUlXTF9ERUJVR19URU1QKCJDYWxpYiB2YWx1ZXMgUlsxLTNdOiAlZCAlZCAlZCBSNDogJWRcbiIsCi0JCSAgICAgICBSMSwgUjIsIFIzLCB2dCk7CisJSVdMX0RFQlVHX1RFTVAoIkNhbGliIHZhbHVlcyBSWzEtM106ICVkICVkICVkIFI0OiAlZFxuIiwgUjEsIFIyLCBSMywgdnQpOwogCiAJaWYgKFIzID09IFIxKSB7CiAJCUlXTF9FUlJPUigiQ2FsaWJyYXRpb24gY29uZmxpY3QgUjEgPT0gUjNcbiIpOwpAQCAtMzI5MiwxMSArMTg0OSwxMCBAQAogCSAqIEFkZCBvZmZzZXQgdG8gY2VudGVyIHRoZSBhZGp1c3RtZW50IGFyb3VuZCAwIGRlZ3JlZXMgQ2VudGlncmFkZS4gKi8KIAl0ZW1wZXJhdHVyZSA9IFRFTVBFUkFUVVJFX0NBTElCX0FfVkFMICogKHZ0IC0gUjIpOwogCXRlbXBlcmF0dXJlIC89IChSMyAtIFIxKTsKLQl0ZW1wZXJhdHVyZSA9ICh0ZW1wZXJhdHVyZSAqIDk3KSAvIDEwMCArCi0JICAgIFRFTVBFUkFUVVJFX0NBTElCX0tFTFZJTl9PRkZTRVQ7CisJdGVtcGVyYXR1cmUgPSAodGVtcGVyYXR1cmUgKiA5NykgLyAxMDAgKyBURU1QRVJBVFVSRV9DQUxJQl9LRUxWSU5fT0ZGU0VUOwogCi0JSVdMX0RFQlVHX1RFTVAoIkNhbGlicmF0ZWQgdGVtcGVyYXR1cmU6ICVkSywgJWRDXG4iLCB0ZW1wZXJhdHVyZSwKLQkgICAgS0VMVklOX1RPX0NFTFNJVVModGVtcGVyYXR1cmUpKTsKKwlJV0xfREVCVUdfVEVNUCgiQ2FsaWJyYXRlZCB0ZW1wZXJhdHVyZTogJWRLLCAlZENcbiIsCisJCQl0ZW1wZXJhdHVyZSwgS0VMVklOX1RPX0NFTFNJVVModGVtcGVyYXR1cmUpKTsKIAogCXJldHVybiB0ZW1wZXJhdHVyZTsKIH0KQEAgLTMzNDMsODkgKzE4OTksMTEgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogQ2FsY3VsYXRlIG5vaXNlIGxldmVsLCBiYXNlZCBvbiBtZWFzdXJlbWVudHMgZHVyaW5nIG5ldHdvcmsgc2lsZW5jZSBqdXN0Ci0gKiAgIGJlZm9yZSBhcnJpdmluZyBiZWFjb24uICBUaGlzIG1lYXN1cmVtZW50IGNhbiBiZSBkb25lIG9ubHkgaWYgd2Uga25vdwotICogICBleGFjdGx5IHdoZW4gdG8gZXhwZWN0IGJlYWNvbnMsIHRoZXJlZm9yZSBvbmx5IHdoZW4gd2UncmUgYXNzb2NpYXRlZC4gKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfY2FsY19ub2lzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X3RlbXBlcmF0dXJlX2NhbGliKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9pbmZvCi0JCQkJPSAmKHByaXYtPnN0YXRpc3RpY3MucnguZ2VuZXJhbCk7Ci0JaW50IG51bV9hY3RpdmVfcnggPSAwOwotCWludCB0b3RhbF9zaWxlbmNlID0gMDsKLQlpbnQgYmNuX3NpbGVuY2VfYSA9Ci0JCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSkgJiBJTl9CQU5EX0ZJTFRFUjsKLQlpbnQgYmNuX3NpbGVuY2VfYiA9Ci0JCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYikgJiBJTl9CQU5EX0ZJTFRFUjsKLQlpbnQgYmNuX3NpbGVuY2VfYyA9Ci0JCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYykgJiBJTl9CQU5EX0ZJTFRFUjsKLQotCWlmIChiY25fc2lsZW5jZV9hKSB7Ci0JCXRvdGFsX3NpbGVuY2UgKz0gYmNuX3NpbGVuY2VfYTsKLQkJbnVtX2FjdGl2ZV9yeCsrOwotCX0KLQlpZiAoYmNuX3NpbGVuY2VfYikgewotCQl0b3RhbF9zaWxlbmNlICs9IGJjbl9zaWxlbmNlX2I7Ci0JCW51bV9hY3RpdmVfcngrKzsKLQl9Ci0JaWYgKGJjbl9zaWxlbmNlX2MpIHsKLQkJdG90YWxfc2lsZW5jZSArPSBiY25fc2lsZW5jZV9jOwotCQludW1fYWN0aXZlX3J4Kys7Ci0JfQotCi0JLyogQXZlcmFnZSBhbW9uZyBhY3RpdmUgYW50ZW5uYXMgKi8KLQlpZiAobnVtX2FjdGl2ZV9yeCkKLQkJcHJpdi0+bGFzdF9yeF9ub2lzZSA9ICh0b3RhbF9zaWxlbmNlIC8gbnVtX2FjdGl2ZV9yeCkgLSAxMDc7Ci0JZWxzZQotCQlwcml2LT5sYXN0X3J4X25vaXNlID0gSVdMX05PSVNFX01FQVNfTk9UX0FWQUlMQUJMRTsKLQotCUlXTF9ERUJVR19DQUxJQigiaW5iYW5kIHNpbGVuY2UgYSAldSwgYiAldSwgYyAldSwgZEJtICVkXG4iLAotCQkJYmNuX3NpbGVuY2VfYSwgYmNuX3NpbGVuY2VfYiwgYmNuX3NpbGVuY2VfYywKLQkJCXByaXYtPmxhc3Rfcnhfbm9pc2UpOwotfQotCi12b2lkIGl3bDQ5NjVfaHdfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0JaW50IGNoYW5nZTsKIAlzMzIgdGVtcDsKIAotCUlXTF9ERUJVR19SWCgiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCi0JCSAgICAgKGludClzaXplb2YocHJpdi0+c3RhdGlzdGljcyksIHBrdC0+bGVuKTsKLQotCWNoYW5nZSA9ICgocHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlICE9Ci0JCSAgIHBrdC0+dS5zdGF0cy5nZW5lcmFsLnRlbXBlcmF0dXJlKSB8fAotCQkgICgocHJpdi0+c3RhdGlzdGljcy5mbGFnICYKLQkJICAgIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0ZBVF9NT0RFX01TSykgIT0KLQkJICAgKHBrdC0+dS5zdGF0cy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLKSkpOwotCi0JbWVtY3B5KCZwcml2LT5zdGF0aXN0aWNzLCAmcGt0LT51LnN0YXRzLCBzaXplb2YocHJpdi0+c3RhdGlzdGljcykpOwotCi0Jc2V0X2JpdChTVEFUVVNfU1RBVElTVElDUywgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiBSZXNjaGVkdWxlIHRoZSBzdGF0aXN0aWNzIHRpbWVyIHRvIG9jY3VyIGluCi0JICogUkVHX1JFQ0FMSUJfUEVSSU9EIHNlY29uZHMgdG8gZW5zdXJlIHdlIGdldCBhCi0JICogdGhlcm1hbCB1cGRhdGUgZXZlbiBpZiB0aGUgdUNvZGUgZG9lc24ndCBnaXZlCi0JICogdXMgb25lICovCi0JbW9kX3RpbWVyKCZwcml2LT5zdGF0aXN0aWNzX3BlcmlvZGljLCBqaWZmaWVzICsKLQkJICBtc2Vjc190b19qaWZmaWVzKFJFR19SRUNBTElCX1BFUklPRCAqIDEwMDApKTsKLQotCWlmICh1bmxpa2VseSghdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgJiYKLQkgICAgKHBrdC0+aGRyLmNtZCA9PSBTVEFUSVNUSUNTX05PVElGSUNBVElPTikpIHsKLQkJaXdsNDk2NV9yeF9jYWxjX25vaXNlKHByaXYpOwotI2lmZGVmIENPTkZJR19JV0w0OTY1X1NFTlNJVElWSVRZCi0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Vuc2l0aXZpdHlfd29yayk7Ci0jZW5kaWYKLQl9Ci0KLQlpd2xfbGVkc19iYWNrZ3JvdW5kKHByaXYpOwotCi0JLyogSWYgdGhlIGhhcmR3YXJlIGhhc24ndCByZXBvcnRlZCBhIGNoYW5nZSBpbgotCSAqIHRlbXBlcmF0dXJlIHRoZW4gZG9uJ3QgYm90aGVyIGNvbXB1dGluZyBhCi0JICogY2FsaWJyYXRlZCB0ZW1wZXJhdHVyZSB2YWx1ZSAqLwotCWlmICghY2hhbmdlKQotCQlyZXR1cm47Ci0KLQl0ZW1wID0gaXdsNDk2NV9nZXRfdGVtcGVyYXR1cmUocHJpdik7CisJdGVtcCA9IGl3bDQ5NjVfaHdfZ2V0X3RlbXBlcmF0dXJlKHByaXYpOwogCWlmICh0ZW1wIDwgMCkKIAkJcmV0dXJuOwogCkBAIC0zNDQ0LDgxMCArMTkyMiwxMiBAQAogCXByaXYtPnRlbXBlcmF0dXJlID0gdGVtcDsKIAlzZXRfYml0KFNUQVRVU19URU1QRVJBVFVSRSwgJnByaXYtPnN0YXR1cyk7CiAKLQlpZiAodW5saWtlbHkoIXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpICYmCi0JCSAgICAgaXdsNDk2NV9pc190ZW1wX2NhbGliX25lZWRlZChwcml2KSkKKwlpZiAoIXByaXYtPmRpc2FibGVfdHhfcG93ZXJfY2FsICYmCisJICAgICB1bmxpa2VseSghdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgJiYKKwkgICAgIGl3bDQ5NjVfaXNfdGVtcF9jYWxpYl9uZWVkZWQocHJpdikpCiAJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+dHhwb3dlcl93b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9hZGRfcmFkaW90YXAoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICpyeF9zdGFydCwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzLAotCQkJCSB1MzIgYW1wZHVfc3RhdHVzKQotewotCXM4IHNpZ25hbCA9IHN0YXRzLT5zc2k7Ci0Jczggbm9pc2UgPSAwOwotCWludCByYXRlID0gc3RhdHMtPnJhdGVfaWR4OwotCXU2NCB0c2YgPSBzdGF0cy0+bWFjdGltZTsKLQlfX2xlMTYgYW50ZW5uYTsKLQlfX2xlMTYgcGh5X2ZsYWdzX2h3ID0gcnhfc3RhcnQtPnBoeV9mbGFnczsKLQlzdHJ1Y3QgaXdsNDk2NV9ydF9yeF9oZHIgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBydF9oZHI7Ci0JCV9fbGU2NCBydF90c2Y7CQkvKiBUU0YgKi8KLQkJdTggcnRfZmxhZ3M7CQkvKiByYWRpb3RhcCBwYWNrZXQgZmxhZ3MgKi8KLQkJdTggcnRfcmF0ZTsJCS8qIHJhdGUgaW4gNTAwa2IvcyAqLwotCQlfX2xlMTYgcnRfY2hhbm5lbE1IejsJLyogY2hhbm5lbCBpbiBNSHogKi8KLQkJX19sZTE2IHJ0X2NoYml0bWFzazsJLyogY2hhbm5lbCBiaXRmaWVsZCAqLwotCQlzOCBydF9kYm1zaWduYWw7CS8qIHNpZ25hbCBpbiBkQm0sIGtsdWdlZCB0byBzaWduZWQgKi8KLQkJczggcnRfZGJtbm9pc2U7Ci0JCXU4IHJ0X2FudGVubmE7CQkvKiBhbnRlbm5hIG51bWJlciAqLwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICppd2w0OTY1X3J0OwotCi0JLyogVE9ETzogV2Ugd29uJ3QgaGF2ZSBlbm91Z2ggaGVhZHJvb20gZm9yIEhUIGZyYW1lcy4gRml4IGl0IGxhdGVyLiAqLwotCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZigqaXdsNDk2NV9ydCkpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAibm90IGVub3VnaCBoZWFkcm9vbSBbJWRdIGZvciAiCi0JCQkgICAgICAgInJhZGlvdGFwIGhlYWQgWyV6ZF1cbiIsCi0JCQkgICAgICAgc2tiX2hlYWRyb29tKHNrYiksIHNpemVvZigqaXdsNDk2NV9ydCkpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogcHV0IHJhZGlvdGFwIGhlYWRlciBpbiBmcm9udCBvZiA4MDIuMTEgaGVhZGVyIGFuZCBkYXRhICovCi0JaXdsNDk2NV9ydCA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKml3bDQ5NjVfcnQpKTsKLQotCS8qIGluaXRpYWxpc2UgcmFkaW90YXAgaGVhZGVyICovCi0JaXdsNDk2NV9ydC0+cnRfaGRyLml0X3ZlcnNpb24gPSBQS1RIRFJfUkFESU9UQVBfVkVSU0lPTjsKLQlpd2w0OTY1X3J0LT5ydF9oZHIuaXRfcGFkID0gMDsKLQotCS8qIHRvdGFsIGhlYWRlciArIGRhdGEgKi8KLQlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTE2KHNpemVvZigqaXdsNDk2NV9ydCkpLAotCQkgICAgICAmaXdsNDk2NV9ydC0+cnRfaGRyLml0X2xlbik7Ci0KLQkvKiBJbmRpY2F0ZSBhbGwgdGhlIGZpZWxkcyB3ZSBhZGQgdG8gdGhlIHJhZGlvdGFwIGhlYWRlciAqLwotCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMzIoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1RTRlQpIHwKLQkJCQkgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUykgfAotCQkJCSAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKLQkJCQkgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSB8Ci0JCQkJICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCkgfAotCQkJCSAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRSkgfAotCQkJCSAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEpKSwKLQkJICAgICAgJml3bDQ5NjVfcnQtPnJ0X2hkci5pdF9wcmVzZW50KTsKLQotCS8qIFplcm8gdGhlIGZsYWdzLCB3ZSdsbCBhZGQgdG8gdGhlbSBhcyB3ZSBnbyAqLwotCWl3bDQ5NjVfcnQtPnJ0X2ZsYWdzID0gMDsKLQotCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlNjQodHNmKSwgJml3bDQ5NjVfcnQtPnJ0X3RzZik7Ci0KLQlpd2w0OTY1X3J0LT5ydF9kYm1zaWduYWwgPSBzaWduYWw7Ci0JaXdsNDk2NV9ydC0+cnRfZGJtbm9pc2UgPSBub2lzZTsKLQotCS8qIENvbnZlcnQgdGhlIGNoYW5uZWwgZnJlcXVlbmN5IGFuZCBzZXQgdGhlIGZsYWdzICovCi0JcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUxNihzdGF0cy0+ZnJlcSksICZpd2w0OTY1X3J0LT5ydF9jaGFubmVsTUh6KTsKLQlpZiAoIShwaHlfZmxhZ3NfaHcgJiBSWF9SRVNfUEhZX0ZMQUdTX0JBTkRfMjRfTVNLKSkKLQkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUxNihJRUVFODAyMTFfQ0hBTl9PRkRNIHwKLQkJCQkJICBJRUVFODAyMTFfQ0hBTl81R0haKSwKLQkJCSAgICAgICZpd2w0OTY1X3J0LT5ydF9jaGJpdG1hc2spOwotCWVsc2UgaWYgKHBoeV9mbGFnc19odyAmIFJYX1JFU19QSFlfRkxBR1NfTU9EX0NDS19NU0spCi0JCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMTYoSUVFRTgwMjExX0NIQU5fQ0NLIHwKLQkJCQkJICBJRUVFODAyMTFfQ0hBTl8yR0haKSwKLQkJCSAgICAgICZpd2w0OTY1X3J0LT5ydF9jaGJpdG1hc2spOwotCWVsc2UJLyogODAyLjExZyAqLwotCQlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTE2KElFRUU4MDIxMV9DSEFOX09GRE0gfAotCQkJCQkgIElFRUU4MDIxMV9DSEFOXzJHSFopLAotCQkJICAgICAgJml3bDQ5NjVfcnQtPnJ0X2NoYml0bWFzayk7Ci0KLQlpZiAocmF0ZSA9PSAtMSkKLQkJaXdsNDk2NV9ydC0+cnRfcmF0ZSA9IDA7Ci0JZWxzZSB7Ci0JCWlmIChzdGF0cy0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQkJcmF0ZSArPSBJV0xfRklSU1RfT0ZETV9SQVRFOwotCi0JCWl3bDQ5NjVfcnQtPnJ0X3JhdGUgPSBpd2w0OTY1X3JhdGVzW3JhdGVdLmllZWU7Ci0JfQotCi0JLyoKLQkgKiAiYW50ZW5uYSBudW1iZXIiCi0JICoKLQkgKiBJdCBzZWVtcyB0aGF0IHRoZSBhbnRlbm5hIGZpZWxkIGluIHRoZSBwaHkgZmxhZ3MgdmFsdWUKLQkgKiBpcyBhY3R1YWxseSBhIGJpdGZpZWxkLiBUaGlzIGlzIHVuZGVmaW5lZCBieSByYWRpb3RhcCwKLQkgKiBpdCB3YW50cyBhbiBhY3R1YWwgYW50ZW5uYSBudW1iZXIgYnV0IEkgYWx3YXlzIGdldCAiNyIKLQkgKiBmb3IgbW9zdCBsZWdhY3kgZnJhbWVzIEkgcmVjZWl2ZSBpbmRpY2F0aW5nIHRoYXQgdGhlCi0JICogc2FtZSBmcmFtZSB3YXMgcmVjZWl2ZWQgb24gYWxsIHRocmVlIFJYIGNoYWlucy4KLQkgKgotCSAqIEkgdGhpbmsgdGhpcyBmaWVsZCBzaG91bGQgYmUgcmVtb3ZlZCBpbiBmYXZvdXIgb2YgYQotCSAqIG5ldyA4MDIuMTFuIHJhZGlvdGFwIGZpZWxkICJSWCBjaGFpbnMiIHRoYXQgaXMgZGVmaW5lZAotCSAqIGFzIGEgYml0bWFzay4KLQkgKi8KLQlhbnRlbm5hID0gcGh5X2ZsYWdzX2h3ICYgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSzsKLQlpd2w0OTY1X3J0LT5ydF9hbnRlbm5hID0gbGUxNl90b19jcHUoYW50ZW5uYSkgPj4gNDsKLQotCS8qIHNldCB0aGUgcHJlYW1ibGUgZmxhZyBpZiBhcHByb3ByaWF0ZSAqLwotCWlmIChwaHlfZmxhZ3NfaHcgJiBSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSykKLQkJaXdsNDk2NV9ydC0+cnRfZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfU0hPUlRQUkU7Ci0KLQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX1JBRElPVEFQOwotfQotCi1zdGF0aWMgdm9pZCBpd2xfdXBkYXRlX3J4X3N0YXRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGZjLCB1MTYgbGVuKQotewotCS8qIDAgLSBtZ210LCAxIC0gY250LCAyIC0gZGF0YSAqLwotCWludCBpZHggPSAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMjsKLQlwcml2LT5yeF9zdGF0c1tpZHhdLmNudCsrOwotCXByaXYtPnJ4X3N0YXRzW2lkeF0uYnl0ZXMgKz0gbGVuOwotfQotCi1zdGF0aWMgdTMyIGl3bDQ5NjVfdHJhbnNsYXRlX3J4X3N0YXR1cyh1MzIgZGVjcnlwdF9pbikKLXsKLQl1MzIgZGVjcnlwdF9vdXQgPSAwOwotCi0JaWYgKChkZWNyeXB0X2luICYgUlhfUkVTX1NUQVRVU19TVEFUSU9OX0ZPVU5EKSA9PQotCQkJCQlSWF9SRVNfU1RBVFVTX1NUQVRJT05fRk9VTkQpCi0JCWRlY3J5cHRfb3V0IHw9IChSWF9SRVNfU1RBVFVTX1NUQVRJT05fRk9VTkQgfAotCQkJCVJYX1JFU19TVEFUVVNfTk9fU1RBVElPTl9JTkZPX01JU01BVENIKTsKLQotCWRlY3J5cHRfb3V0IHw9IChkZWNyeXB0X2luICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spOwotCi0JLyogcGFja2V0IHdhcyBub3QgZW5jcnlwdGVkICovCi0JaWYgKChkZWNyeXB0X2luICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spID09Ci0JCQkJCVJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTk9ORSkKLQkJcmV0dXJuIGRlY3J5cHRfb3V0OwotCi0JLyogcGFja2V0IHdhcyBlbmNyeXB0ZWQgd2l0aCB1bmtub3duIGFsZyAqLwotCWlmICgoZGVjcnlwdF9pbiAmIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLKSA9PQotCQkJCQlSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX0VSUikKLQkJcmV0dXJuIGRlY3J5cHRfb3V0OwotCi0JLyogZGVjcnlwdGlvbiB3YXMgbm90IGRvbmUgaW4gSFcgKi8KLQlpZiAoKGRlY3J5cHRfaW4gJiBSWF9NUERVX1JFU19TVEFUVVNfREVDX0RPTkVfTVNLKSAhPQotCQkJCQlSWF9NUERVX1JFU19TVEFUVVNfREVDX0RPTkVfTVNLKQotCQlyZXR1cm4gZGVjcnlwdF9vdXQ7Ci0KLQlzd2l0Y2ggKGRlY3J5cHRfaW4gJiBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSykgewotCi0JY2FzZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX0NDTVA6Ci0JCS8qIGFsZyBpcyBDQ006IGNoZWNrIE1JQyBvbmx5ICovCi0JCWlmICghKGRlY3J5cHRfaW4gJiBSWF9NUERVX1JFU19TVEFUVVNfTUlDX09LKSkKLQkJCS8qIEJhZCBNSUMgKi8KLQkJCWRlY3J5cHRfb3V0IHw9IFJYX1JFU19TVEFUVVNfQkFEX0lDVl9NSUM7Ci0JCWVsc2UKLQkJCWRlY3J5cHRfb3V0IHw9IFJYX1JFU19TVEFUVVNfREVDUllQVF9PSzsKLQotCQlicmVhazsKLQotCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQOgotCQlpZiAoIShkZWNyeXB0X2luICYgUlhfTVBEVV9SRVNfU1RBVFVTX1RUQUtfT0spKSB7Ci0JCQkvKiBCYWQgVFRBSyAqLwotCQkJZGVjcnlwdF9vdXQgfD0gUlhfUkVTX1NUQVRVU19CQURfS0VZX1RUQUs7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBmYWxsIHRocm91Z2ggaWYgVFRBSyBPSyAqLwotCWRlZmF1bHQ6Ci0JCWlmICghKGRlY3J5cHRfaW4gJiBSWF9NUERVX1JFU19TVEFUVVNfSUNWX09LKSkKLQkJCWRlY3J5cHRfb3V0IHw9IFJYX1JFU19TVEFUVVNfQkFEX0lDVl9NSUM7Ci0JCWVsc2UKLQkJCWRlY3J5cHRfb3V0IHw9IFJYX1JFU19TVEFUVVNfREVDUllQVF9PSzsKLQkJYnJlYWs7Ci0JfTsKLQotCUlXTF9ERUJVR19SWCgiZGVjcnlwdF9pbjoweCV4ICBkZWNyeXB0X291dCA9IDB4JXhcbiIsCi0JCQkJCWRlY3J5cHRfaW4sIGRlY3J5cHRfb3V0KTsKLQotCXJldHVybiBkZWNyeXB0X291dDsKLX0KLQotc3RhdGljIHZvaWQgaXdsNDk2NV9oYW5kbGVfZGF0YV9wYWNrZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgaXNfZGF0YSwKLQkJCQkgICAgICAgaW50IGluY2x1ZGVfcGh5LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICpyeF9zdGFydCA9IChpbmNsdWRlX3BoeSkgPwotCSAgICAoc3RydWN0IGl3bDQ5NjVfcnhfcGh5X3JlcyAqKSYocGt0LT51LnJhd1swXSkgOiBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JdTE2IGxlbjsKLQlfX2xlMzIgKnJ4X2VuZDsKLQl1bnNpZ25lZCBpbnQgc2tibGVuOwotCXUzMiBhbXBkdV9zdGF0dXM7Ci0JdTMyIGFtcGR1X3N0YXR1c19sZWdhY3k7Ci0KLQlpZiAoIWluY2x1ZGVfcGh5ICYmIHByaXYtPmxhc3RfcGh5X3Jlc1swXSkKLQkJcnhfc3RhcnQgPSAoc3RydWN0IGl3bDQ5NjVfcnhfcGh5X3JlcyAqKSZwcml2LT5sYXN0X3BoeV9yZXNbMV07Ci0KLQlpZiAoIXJ4X3N0YXJ0KSB7Ci0JCUlXTF9FUlJPUigiTVBEVSBmcmFtZSB3aXRob3V0IGEgUEhZIGRhdGFcbiIpOwotCQlyZXR1cm47Ci0JfQotCWlmIChpbmNsdWRlX3BoeSkgewotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoKHU4ICopICYgcnhfc3RhcnRbMV0gKwotCQkJCQkgICAgICAgcnhfc3RhcnQtPmNmZ19waHlfY250KTsKLQotCQlsZW4gPSBsZTE2X3RvX2NwdShyeF9zdGFydC0+Ynl0ZV9jb3VudCk7Ci0KLQkJcnhfZW5kID0gKF9fbGUzMiAqKSAoKHU4ICopICYgcGt0LT51LnJhd1swXSArCi0JCQkJICBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcnhfcGh5X3JlcykgKwotCQkJCSAgcnhfc3RhcnQtPmNmZ19waHlfY250ICsgbGVuKTsKLQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0ICphbXNkdSA9Ci0JCSAgICAoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKilwa3QtPnUucmF3OwotCi0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShwa3QtPnUucmF3ICsKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQpKTsKLQkJbGVuID0gIGxlMTZfdG9fY3B1KGFtc2R1LT5ieXRlX2NvdW50KTsKLQkJcnhfc3RhcnQtPmJ5dGVfY291bnQgPSBhbXNkdS0+Ynl0ZV9jb3VudDsKLQkJcnhfZW5kID0gKF9fbGUzMiAqKSAoKCh1OCAqKSBoZHIpICsgbGVuKTsKLQl9Ci0JaWYgKGxlbiA+IHByaXYtPmh3X3BhcmFtcy5tYXhfcGt0X3NpemUgfHwgbGVuIDwgMTYpIHsKLQkJSVdMX1dBUk5JTkcoImJ5dGUgY291bnQgb3V0IG9mIHJhbmdlIFsxNiw0S10gOiAlZFxuIiwgbGVuKTsKLQkJcmV0dXJuOwotCX0KLQotCWFtcGR1X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpyeF9lbmQpOwotCXNrYmxlbiA9ICgodTggKikgcnhfZW5kIC0gKHU4ICopICYgcGt0LT51LnJhd1swXSkgKyBzaXplb2YodTMyKTsKLQotCWlmICghaW5jbHVkZV9waHkpIHsKLQkJLyogTmV3IHN0YXR1cyBzY2hlbWUsIG5lZWQgdG8gdHJhbnNsYXRlICovCi0JCWFtcGR1X3N0YXR1c19sZWdhY3kgPSBhbXBkdV9zdGF0dXM7Ci0JCWFtcGR1X3N0YXR1cyA9IGl3bDQ5NjVfdHJhbnNsYXRlX3J4X3N0YXR1cyhhbXBkdV9zdGF0dXMpOwotCX0KLQotCS8qIHN0YXJ0IGZyb20gTUFDICovCi0Jc2tiX3Jlc2VydmUocnhiLT5za2IsICh2b2lkICopaGRyIC0gKHZvaWQgKilwa3QpOwotCXNrYl9wdXQocnhiLT5za2IsIGxlbik7CS8qIGVuZCB3aGVyZSBkYXRhIGVuZHMgKi8KLQotCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlIGludGVyZmFjZSBpcyBvcGVuICovCi0JaWYgKHVubGlrZWx5KCFwcml2LT5pc19vcGVuKSkgewotCQlJV0xfREVCVUdfRFJPUF9MSU1JVAotCQkgICAgKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCBvcGVuLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzdGF0cy0+ZmxhZyA9IDA7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcnhiLT5za2ItPmRhdGE7Ci0KLQlpZiAoIXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+c3dfY3J5cHRvKQotCQlpd2w0OTY1X3NldF9kZWNyeXB0ZWRfZmxhZyhwcml2LCByeGItPnNrYiwgYW1wZHVfc3RhdHVzLCBzdGF0cyk7Ci0KLQlpZiAocHJpdi0+YWRkX3JhZGlvdGFwKQotCQlpd2w0OTY1X2FkZF9yYWRpb3RhcChwcml2LCByeGItPnNrYiwgcnhfc3RhcnQsIHN0YXRzLCBhbXBkdV9zdGF0dXMpOwotCi0JaXdsX3VwZGF0ZV9yeF9zdGF0cyhwcml2LCBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpLCBsZW4pOwotCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCByeGItPnNrYiwgc3RhdHMpOwotCXByaXYtPmFsbG9jX3J4Yl9za2ItLTsKLQlyeGItPnNrYiA9IE5VTEw7Ci19Ci0KLS8qIENhbGMgbWF4IHNpZ25hbCBsZXZlbCAoZEJtKSBhbW9uZyAzIHBvc3NpYmxlIHJlY2VpdmVycyAqLwotc3RhdGljIGludCBpd2w0OTY1X2NhbGNfcnNzaShzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICpyeF9yZXNwKQotewotCS8qIGRhdGEgZnJvbSBQSFkvRFNQIHJlZ2FyZGluZyBzaWduYWwgc3RyZW5ndGgsIGV0Yy4sCi0JICogICBjb250ZW50cyBhcmUgYWx3YXlzIHRoZXJlLCBub3QgY29uZmlndXJhYmxlIGJ5IGhvc3QuICAqLwotCXN0cnVjdCBpd2w0OTY1X3J4X25vbl9jZmdfcGh5ICpuY3BoeSA9Ci0JICAgIChzdHJ1Y3QgaXdsNDk2NV9yeF9ub25fY2ZnX3BoeSAqKXJ4X3Jlc3AtPm5vbl9jZmdfcGh5OwotCXUzMiBhZ2MgPSAobGUxNl90b19jcHUobmNwaHktPmFnY19pbmZvKSAmIElXTF9BR0NfREJfTUFTSykKLQkJCT4+IElXTF9BR0NfREJfUE9TOwotCi0JdTMyIHZhbGlkX2FudGVubmFlID0KLQkgICAgKGxlMTZfdG9fY3B1KHJ4X3Jlc3AtPnBoeV9mbGFncykgJiBSWF9QSFlfRkxBR1NfQU5URU5OQUVfTUFTSykKLQkJCT4+IFJYX1BIWV9GTEFHU19BTlRFTk5BRV9PRkZTRVQ7Ci0JdTggbWF4X3Jzc2kgPSAwOwotCXUzMiBpOwotCi0JLyogRmluZCBtYXggcnNzaSBhbW9uZyAzIHBvc3NpYmxlIHJlY2VpdmVycy4KLQkgKiBUaGVzZSB2YWx1ZXMgYXJlIG1lYXN1cmVkIGJ5IHRoZSBkaWdpdGFsIHNpZ25hbCBwcm9jZXNzb3IgKERTUCkuCi0JICogVGhleSBzaG91bGQgc3RheSBmYWlybHkgY29uc3RhbnQgZXZlbiBhcyB0aGUgc2lnbmFsIHN0cmVuZ3RoIHZhcmllcywKLQkgKiAgIGlmIHRoZSByYWRpbydzIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgKEFHQykgaXMgd29ya2luZyByaWdodC4KLQkgKiBBR0MgdmFsdWUgKHNlZSBiZWxvdykgd2lsbCBwcm92aWRlIHRoZSAiaW50ZXJlc3RpbmciIGluZm8uICovCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJaWYgKHZhbGlkX2FudGVubmFlICYgKDEgPDwgaSkpCi0JCQltYXhfcnNzaSA9IG1heChuY3BoeS0+cnNzaV9pbmZvW2kgPDwgMV0sIG1heF9yc3NpKTsKLQotCUlXTF9ERUJVR19TVEFUUygiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAotCQluY3BoeS0+cnNzaV9pbmZvWzBdLCBuY3BoeS0+cnNzaV9pbmZvWzJdLCBuY3BoeS0+cnNzaV9pbmZvWzRdLAotCQltYXhfcnNzaSwgYWdjKTsKLQotCS8qIGRCbSA9IG1heF9yc3NpIGRCIC0gYWdjIGRCIC0gY29uc3RhbnQuCi0JICogSGlnaGVyIEFHQyAoaGlnaGVyIHJhZGlvIGdhaW4pIG1lYW5zIGxvd2VyIHNpZ25hbC4gKi8KLQlyZXR1cm4gKG1heF9yc3NpIC0gYWdjIC0gSVdMX1JTU0lfT0ZGU0VUKTsKLX0KLQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0KLXZvaWQgaXdsNDk2NV9pbml0X2h0X2h3X2NhcGFiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRfaW5mbywKLQkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKLXsKLQlodF9pbmZvLT5jYXAgPSAwOwotCW1lbXNldChodF9pbmZvLT5zdXBwX21jc19zZXQsIDAsIDE2KTsKLQotCWh0X2luZm8tPmh0X3N1cHBvcnRlZCA9IDE7Ci0KLQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7Ci0JCWh0X2luZm8tPmNhcCB8PSAodTE2KUlFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIOwotCQlodF9pbmZvLT5jYXAgfD0gKHUxNilJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKLQkJaHRfaW5mby0+c3VwcF9tY3Nfc2V0WzRdID0gMHgwMTsKLQl9Ci0JaHRfaW5mby0+Y2FwIHw9ICh1MTYpSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEOwotCWh0X2luZm8tPmNhcCB8PSAodTE2KUlFRUU4MDIxMV9IVF9DQVBfU0dJXzIwOwotCWh0X2luZm8tPmNhcCB8PSAodTE2KShJRUVFODAyMTFfSFRfQ0FQX01JTU9fUFMgJgotCQkJICAgICAoSVdMX01JTU9fUFNfTk9ORSA8PCAyKSk7Ci0KLQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5hbXNkdV9zaXplXzhLKQotCQlodF9pbmZvLT5jYXAgfD0gKHUxNilJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVTsKLQotCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IENGR19IVF9SWF9BTVBEVV9GQUNUT1JfREVGOwotCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBDRkdfSFRfTVBEVV9ERU5TSVRZX0RFRjsKLQotCWh0X2luZm8tPnN1cHBfbWNzX3NldFswXSA9IDB4RkY7Ci0JaHRfaW5mby0+c3VwcF9tY3Nfc2V0WzFdID0gMHhGRjsKLX0KLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3N0YV9tb2RpZnlfcHNfd2FrZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YXRpb25fZmxhZ3MgJj0gflNUQV9GTEdfUFdSX1NBVkVfTVNLOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YXRpb25fZmxhZ3NfbXNrID0gU1RBX0ZMR19QV1JfU0FWRV9NU0s7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gMDsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCi0JaXdsNDk2NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsNDk2NV91cGRhdGVfcHNfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBwc19iaXQsIHU4ICphZGRyKQotewotCS8qIEZJWE1FOiBuZWVkIGxvY2tpbmcgb3ZlciBwc19zdGF0dXMgPz8/ICovCi0JdTggc3RhX2lkID0gaXdsNDk2NV9od19maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7Ci0KLQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJdTggc3RhX2F3YWtlID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS4KLQkJCQlwc19zdGF0dXMgPT0gU1RBX1BTX1NUQVRVU19XQUtFOwotCi0JCWlmIChzdGFfYXdha2UgJiYgcHNfYml0KQotCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5wc19zdGF0dXMgPSBTVEFfUFNfU1RBVFVTX1NMRUVQOwotCQllbHNlIGlmICghc3RhX2F3YWtlICYmICFwc19iaXQpIHsKLQkJCWl3bDQ5NjVfc3RhX21vZGlmeV9wc193YWtlKHByaXYsIHN0YV9pZCk7Ci0JCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnBzX3N0YXR1cyA9IFNUQV9QU19TVEFUVVNfV0FLRTsKLQkJfQotCX0KLX0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCi0vKioKLSAqIGl3bDQ5NjVfZGJnX3JlcG9ydF9mcmFtZSAtIGR1bXAgZnJhbWUgdG8gc3lzbG9nIGR1cmluZyBkZWJ1ZyBzZXNzaW9ucwotICoKLSAqIFlvdSBtYXkgaGFjayB0aGlzIGZ1bmN0aW9uIHRvIHNob3cgZGlmZmVyZW50IGFzcGVjdHMgb2YgcmVjZWl2ZWQgZnJhbWVzLAotICogaW5jbHVkaW5nIHNlbGVjdGl2ZSBmcmFtZSBkdW1wcy4KLSAqIGdyb3VwMTAwIHBhcmFtZXRlciBzZWxlY3RzIHdoZXRoZXIgdG8gc2hvdyAxIG91dCBvZiAxMDAgZ29vZCBmcmFtZXMuCi0gKgotICogVE9ETzogIFRoaXMgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgMzk0NSwgbmVlZCB0byBhdWRpdCBmb3IKLSAqICAgICAgICBwcm9wZXIgb3BlcmF0aW9uIHdpdGggNDk2NS4KLSAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJICAgICAgc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QsCi0JCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKLXsKLQl1MzIgdG9fdXM7Ci0JdTMyIHByaW50X3N1bW1hcnkgPSAwOwotCXUzMiBwcmludF9kdW1wID0gMDsJLyogc2V0IHRvIDEgdG8gZHVtcCBhbGwgZnJhbWVzJyBjb250ZW50cyAqLwotCXUzMiBodW5kcmVkID0gMDsKLQl1MzIgZGF0YWZyYW1lID0gMDsKLQl1MTYgZmM7Ci0JdTE2IHNlcV9jdGw7Ci0JdTE2IGNoYW5uZWw7Ci0JdTE2IHBoeV9mbGFnczsKLQlpbnQgcmF0ZV9zeW07Ci0JdTE2IGxlbmd0aDsKLQl1MTYgc3RhdHVzOwotCXUxNiBiY25fdG1yOwotCXUzMiB0c2ZfbG93OwotCXU2NCB0c2Y7Ci0JdTggcnNzaTsKLQl1OCBhZ2M7Ci0JdTE2IHNpZ19hdmc7Ci0JdTE2IG5vaXNlX2RpZmY7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfc3RhdHMgKnJ4X3N0YXRzID0gSVdMX1JYX1NUQVRTKHBrdCk7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfaGRyICpyeF9oZHIgPSBJV0xfUlhfSERSKHBrdCk7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfZW5kICpyeF9lbmQgPSBJV0xfUlhfRU5EKHBrdCk7Ci0JdTggKmRhdGEgPSBJV0xfUlhfREFUQShwa3QpOwotCi0JaWYgKGxpa2VseSghKGl3bF9kZWJ1Z19sZXZlbCAmIElXTF9ETF9SWCkpKQotCQlyZXR1cm47Ci0KLQkvKiBNQUMgaGVhZGVyICovCi0JZmMgPSBsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2NvbnRyb2wpOwotCXNlcV9jdGwgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNlcV9jdHJsKTsKLQotCS8qIG1ldGFkYXRhICovCi0JY2hhbm5lbCA9IGxlMTZfdG9fY3B1KHJ4X2hkci0+Y2hhbm5lbCk7Ci0JcGh5X2ZsYWdzID0gbGUxNl90b19jcHUocnhfaGRyLT5waHlfZmxhZ3MpOwotCXJhdGVfc3ltID0gcnhfaGRyLT5yYXRlOwotCWxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2hkci0+bGVuKTsKLQotCS8qIGVuZC1vZi1mcmFtZSBzdGF0dXMgYW5kIHRpbWVzdGFtcCAqLwotCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+c3RhdHVzKTsKLQliY25fdG1yID0gbGUzMl90b19jcHUocnhfZW5kLT5iZWFjb25fdGltZXN0YW1wKTsKLQl0c2ZfbG93ID0gbGU2NF90b19jcHUocnhfZW5kLT50aW1lc3RhbXApICYgMHgwZmZmZmZmZmY7Ci0JdHNmID0gbGU2NF90b19jcHUocnhfZW5kLT50aW1lc3RhbXApOwotCi0JLyogc2lnbmFsIHN0YXRpc3RpY3MgKi8KLQlyc3NpID0gcnhfc3RhdHMtPnJzc2k7Ci0JYWdjID0gcnhfc3RhdHMtPmFnYzsKLQlzaWdfYXZnID0gbGUxNl90b19jcHUocnhfc3RhdHMtPnNpZ19hdmcpOwotCW5vaXNlX2RpZmYgPSBsZTE2X3RvX2NwdShyeF9zdGF0cy0+bm9pc2VfZGlmZik7Ci0KLQl0b191cyA9ICFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSwgcHJpdi0+bWFjX2FkZHIpOwotCi0JLyogaWYgZGF0YSBmcmFtZSBpcyB0byB1cyBhbmQgYWxsIGlzIGdvb2QsCi0JICogICAob3B0aW9uYWxseSkgcHJpbnQgc3VtbWFyeSBmb3Igb25seSAxIG91dCBvZiBldmVyeSAxMDAgKi8KLQlpZiAodG9fdXMgJiYgKGZjICYgfklFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgPT0KLQkgICAgKElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GVFlQRV9EQVRBKSkgewotCQlkYXRhZnJhbWUgPSAxOwotCQlpZiAoIWdyb3VwMTAwKQotCQkJcHJpbnRfc3VtbWFyeSA9IDE7CS8qIHByaW50IGVhY2ggZnJhbWUgKi8KLQkJZWxzZSBpZiAocHJpdi0+ZnJhbWVjbnRfdG9fdXMgPCAxMDApIHsKLQkJCXByaXYtPmZyYW1lY250X3RvX3VzKys7Ci0JCQlwcmludF9zdW1tYXJ5ID0gMDsKLQkJfSBlbHNlIHsKLQkJCXByaXYtPmZyYW1lY250X3RvX3VzID0gMDsKLQkJCXByaW50X3N1bW1hcnkgPSAxOwotCQkJaHVuZHJlZCA9IDE7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBwcmludCBzdW1tYXJ5IGZvciBhbGwgb3RoZXIgZnJhbWVzICovCi0JCXByaW50X3N1bW1hcnkgPSAxOwotCX0KLQotCWlmIChwcmludF9zdW1tYXJ5KSB7Ci0JCWNoYXIgKnRpdGxlOwotCQlpbnQgcmF0ZV9pZHg7Ci0JCXUzMiBiaXRyYXRlOwotCi0JCWlmIChodW5kcmVkKQotCQkJdGl0bGUgPSAiMTAwRnJhbWVzIjsKLQkJZWxzZSBpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9SRVRSWSkKLQkJCXRpdGxlID0gIlJldHJ5IjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3Jlc3BvbnNlKGZjKSkKLQkJCXRpdGxlID0gIkFzY1JzcCI7Ci0JCWVsc2UgaWYgKGllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3BvbnNlKGZjKSkKLQkJCXRpdGxlID0gIlJhc1JzcCI7Ci0JCWVsc2UgaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwb25zZShmYykpIHsKLQkJCXRpdGxlID0gIlByYlJzcCI7Ci0JCQlwcmludF9kdW1wID0gMTsJLyogZHVtcCBmcmFtZSBjb250ZW50cyAqLwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSB7Ci0JCQl0aXRsZSA9ICJCZWFjb24iOwotCQkJcHJpbnRfZHVtcCA9IDE7CS8qIGR1bXAgZnJhbWUgY29udGVudHMgKi8KLQkJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYXRpbShmYykpCi0JCQl0aXRsZSA9ICJBVElNIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F1dGgoZmMpKQotCQkJdGl0bGUgPSAiQXV0aCI7Ci0JCWVsc2UgaWYgKGllZWU4MDIxMV9pc19kZWF1dGgoZmMpKQotCQkJdGl0bGUgPSAiRGVBdXRoIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Rpc2Fzc29jKGZjKSkKLQkJCXRpdGxlID0gIkRpc0Fzc29jIjsKLQkJZWxzZQotCQkJdGl0bGUgPSAiRnJhbWUiOwotCi0JCXJhdGVfaWR4ID0gaXdsNDk2NV9od3JhdGVfdG9fcGxjcF9pZHgocmF0ZV9zeW0pOwotCQlpZiAodW5saWtlbHkocmF0ZV9pZHggPT0gLTEpKQotCQkJYml0cmF0ZSA9IDA7Ci0JCWVsc2UKLQkJCWJpdHJhdGUgPSBpd2w0OTY1X3JhdGVzW3JhdGVfaWR4XS5pZWVlIC8gMjsKLQotCQkvKiBwcmludCBmcmFtZSBzdW1tYXJ5LgotCQkgKiBNQUMgYWRkcmVzc2VzIHNob3cganVzdCB0aGUgbGFzdCBieXRlIChmb3IgYnJldml0eSksCi0JCSAqICAgIGJ1dCB5b3UgY2FuIGhhY2sgaXQgdG8gc2hvdyBtb3JlLCBpZiB5b3UnZCBsaWtlIHRvLiAqLwotCQlpZiAoZGF0YWZyYW1lKQotCQkJSVdMX0RFQlVHX1JYKCIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgotCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgY2hubD0lZCwgcmF0ZT0ldSwgXG4iLAotCQkJCSAgICAgdGl0bGUsIGZjLCBoZWFkZXItPmFkZHIxWzVdLAotCQkJCSAgICAgbGVuZ3RoLCByc3NpLCBjaGFubmVsLCBiaXRyYXRlKTsKLQkJZWxzZSB7Ci0JCQkvKiBzcmMvZHN0IGFkZHJlc3NlcyBhc3N1bWUgbWFuYWdlZCBtb2RlICovCi0JCQlJV0xfREVCVUdfUlgoIiVzOiAweCUwNHgsIGRzdD0weCUwMngsICIKLQkJCQkgICAgICJzcmM9MHglMDJ4LCByc3NpPSV1LCB0aW09JWx1IHVzZWMsICIKLQkJCQkgICAgICJwaHk9MHglMDJ4LCBjaG5sPSVkXG4iLAotCQkJCSAgICAgdGl0bGUsIGZjLCBoZWFkZXItPmFkZHIxWzVdLAotCQkJCSAgICAgaGVhZGVyLT5hZGRyM1s1XSwgcnNzaSwKLQkJCQkgICAgIHRzZl9sb3cgLSBwcml2LT5zY2FuX3N0YXJ0X3RzZiwKLQkJCQkgICAgIHBoeV9mbGFncywgY2hhbm5lbCk7Ci0JCX0KLQl9Ci0JaWYgKHByaW50X2R1bXApCi0JCWl3bF9wcmludF9oZXhfZHVtcChJV0xfRExfUlgsIGRhdGEsIGxlbmd0aCk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bDQ5NjVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCwKLQkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsCi0JCQkJCSAgICBpbnQgZ3JvdXAxMDApCi17Ci19Ci0jZW5kaWYKLQotCi0KLS8qIENhbGxlZCBmb3IgUkVQTFlfUlggKGxlZ2FjeSBBQkcgZnJhbWVzKSwgb3IKLSAqIFJFUExZX1JYX01QRFVfQ01EIChIVCBoaWdoLXRocm91Z2hwdXQgTiBmcmFtZXMpLiAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9yZXBseV9yeChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXI7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOwotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQkvKiBVc2UgcGh5IGRhdGEgKFJ4IHNpZ25hbCBzdHJlbmd0aCwgZXRjLikgY29udGFpbmVkIHdpdGhpbgotCSAqICAgdGhpcyByeCBwYWNrZXQgZm9yIGxlZ2FjeSBmcmFtZXMsCi0JICogICBvciBwaHkgZGF0YSBjYWNoZWQgZnJvbSBSRVBMWV9SWF9QSFlfQ01EIGZvciBIVCBmcmFtZXMuICovCi0JaW50IGluY2x1ZGVfcGh5ID0gKHBrdC0+aGRyLmNtZCA9PSBSRVBMWV9SWCk7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfcGh5X3JlcyAqcnhfc3RhcnQgPSAoaW5jbHVkZV9waHkpID8KLQkJKHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMgKikmKHBrdC0+dS5yYXdbMF0pIDoKLQkJKHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMgKikmcHJpdi0+bGFzdF9waHlfcmVzWzFdOwotCV9fbGUzMiAqcnhfZW5kOwotCXVuc2lnbmVkIGludCBsZW4gPSAwOwotCXUxNiBmYzsKLQl1OCBuZXR3b3JrX3BhY2tldDsKLQotCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUocnhfc3RhcnQtPnRpbWVzdGFtcCk7Ci0Jcnhfc3RhdHVzLmZyZXEgPQotCQlpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3kobGUxNl90b19jcHUocnhfc3RhcnQtPmNoYW5uZWwpKTsKLQlyeF9zdGF0dXMuYmFuZCA9IChyeF9zdGFydC0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19CQU5EXzI0X01TSykgPwotCQkJCUlFRUU4MDIxMV9CQU5EXzJHSFogOiBJRUVFODAyMTFfQkFORF81R0haOwotCXJ4X3N0YXR1cy5yYXRlX2lkeCA9Ci0JCWl3bDQ5NjVfaHdyYXRlX3RvX3BsY3BfaWR4KGxlMzJfdG9fY3B1KHJ4X3N0YXJ0LT5yYXRlX25fZmxhZ3MpKTsKLQlpZiAocnhfc3RhdHVzLmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJcnhfc3RhdHVzLnJhdGVfaWR4IC09IElXTF9GSVJTVF9PRkRNX1JBVEU7Ci0KLQlyeF9zdGF0dXMuYW50ZW5uYSA9IDA7Ci0Jcnhfc3RhdHVzLmZsYWcgPSAwOwotCi0JaWYgKCh1bmxpa2VseShyeF9zdGFydC0+Y2ZnX3BoeV9jbnQgPiAyMCkpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJkc3Agc2l6ZSBvdXQgb2YgcmFuZ2UgWzAsMjBdOiAlZC9uIiwKLQkJCQlyeF9zdGFydC0+Y2ZnX3BoeV9jbnQpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFpbmNsdWRlX3BoeSkgewotCQlpZiAocHJpdi0+bGFzdF9waHlfcmVzWzBdKQotCQkJcnhfc3RhcnQgPSAoc3RydWN0IGl3bDQ5NjVfcnhfcGh5X3JlcyAqKQotCQkJCSZwcml2LT5sYXN0X3BoeV9yZXNbMV07Ci0JCWVsc2UKLQkJCXJ4X3N0YXJ0ID0gTlVMTDsKLQl9Ci0KLQlpZiAoIXJ4X3N0YXJ0KSB7Ci0JCUlXTF9FUlJPUigiTVBEVSBmcmFtZSB3aXRob3V0IGEgUEhZIGRhdGFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGluY2x1ZGVfcGh5KSB7Ci0JCWhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSgodTggKikgJiByeF9zdGFydFsxXQotCQkJCQkJICArIHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCk7Ci0KLQkJbGVuID0gbGUxNl90b19jcHUocnhfc3RhcnQtPmJ5dGVfY291bnQpOwotCQlyeF9lbmQgPSAoX19sZTMyICopKHBrdC0+dS5yYXcgKyByeF9zdGFydC0+Y2ZnX3BoeV9jbnQgKwotCQkJCSAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMpICsgbGVuKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgaXdsNDk2NV9yeF9tcGR1X3Jlc19zdGFydCAqYW1zZHUgPQotCQkJKHN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0ICopcGt0LT51LnJhdzsKLQotCQloZWFkZXIgPSAodm9pZCAqKShwa3QtPnUucmF3ICsKLQkJCXNpemVvZihzdHJ1Y3QgaXdsNDk2NV9yeF9tcGR1X3Jlc19zdGFydCkpOwotCQlsZW4gPSBsZTE2X3RvX2NwdShhbXNkdS0+Ynl0ZV9jb3VudCk7Ci0JCXJ4X2VuZCA9IChfX2xlMzIgKikgKHBrdC0+dS5yYXcgKwotCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0KSArIGxlbik7Ci0JfQotCi0JaWYgKCEoKnJ4X2VuZCAmIFJYX1JFU19TVEFUVVNfTk9fQ1JDMzJfRVJST1IpIHx8Ci0JICAgICEoKnJ4X2VuZCAmIFJYX1JFU19TVEFUVVNfTk9fUlhFX09WRVJGTE9XKSkgewotCQlJV0xfREVCVUdfUlgoIkJhZCBDUkMgb3IgRklGTzogMHglMDhYLlxuIiwKLQkJCQlsZTMyX3RvX2NwdSgqcnhfZW5kKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcml2LT51Y29kZV9iZWFjb25fdGltZSA9IGxlMzJfdG9fY3B1KHJ4X3N0YXJ0LT5iZWFjb25fdGltZV9zdGFtcCk7Ci0KLQkvKiBGaW5kIG1heCBzaWduYWwgc3RyZW5ndGggKGRCbSkgYW1vbmcgMyBhbnRlbm5hL3JlY2VpdmVyIGNoYWlucyAqLwotCXJ4X3N0YXR1cy5zc2kgPSBpd2w0OTY1X2NhbGNfcnNzaShyeF9zdGFydCk7Ci0KLQkvKiBNZWFuaW5nZnVsIG5vaXNlIHZhbHVlcyBhcmUgYXZhaWxhYmxlIG9ubHkgZnJvbSBiZWFjb24gc3RhdGlzdGljcywKLQkgKiAgIHdoaWNoIGFyZSBnYXRoZXJlZCBvbmx5IHdoZW4gYXNzb2NpYXRlZCwgYW5kIGluZGljYXRlIG5vaXNlCi0JICogICBvbmx5IGZvciB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIGNoYW5uZWwgLi4uCi0JICogSWdub3JlIHRoZXNlIG5vaXNlIHZhbHVlcyB3aGlsZSBzY2FubmluZyAob3RoZXIgY2hhbm5lbHMpICovCi0JaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmCi0JICAgICF0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCXJ4X3N0YXR1cy5ub2lzZSA9IHByaXYtPmxhc3Rfcnhfbm9pc2U7Ci0JCXJ4X3N0YXR1cy5zaWduYWwgPSBpd2w0OTY1X2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNzaSwKLQkJCQkJCQkgcnhfc3RhdHVzLm5vaXNlKTsKLQl9IGVsc2UgewotCQlyeF9zdGF0dXMubm9pc2UgPSBJV0xfTk9JU0VfTUVBU19OT1RfQVZBSUxBQkxFOwotCQlyeF9zdGF0dXMuc2lnbmFsID0gaXdsNDk2NV9jYWxjX3NpZ19xdWFsKHJ4X3N0YXR1cy5zc2ksIDApOwotCX0KLQotCS8qIFJlc2V0IGJlYWNvbiBub2lzZSBsZXZlbCBpZiBub3QgYXNzb2NpYXRlZC4gKi8KLQlpZiAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpKQotCQlwcml2LT5sYXN0X3J4X25vaXNlID0gSVdMX05PSVNFX01FQVNfTk9UX0FWQUlMQUJMRTsKLQotCS8qIFNldCAiMSIgdG8gcmVwb3J0IGdvb2QgZGF0YSBmcmFtZXMgaW4gZ3JvdXBzIG9mIDEwMCAqLwotCS8qIEZJWE1FOiBuZWVkIHRvIG9wdGltemUgdGhlIGNhbGw6ICovCi0JaXdsNDk2NV9kYmdfcmVwb3J0X2ZyYW1lKHByaXYsIHBrdCwgaGVhZGVyLCAxKTsKLQotCUlXTF9ERUJVR19TVEFUU19MSU1JVCgiUnNzaSAlZCwgbm9pc2UgJWQsIHF1YWwgJWQsIFRTRiAlbGx1XG4iLAotCQkJICAgICAgcnhfc3RhdHVzLnNzaSwgcnhfc3RhdHVzLm5vaXNlLCByeF9zdGF0dXMuc2lnbmFsLAotCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyeF9zdGF0dXMubWFjdGltZSk7Ci0KLQluZXR3b3JrX3BhY2tldCA9IGl3bDQ5NjVfaXNfbmV0d29ya19wYWNrZXQocHJpdiwgaGVhZGVyKTsKLQlpZiAobmV0d29ya19wYWNrZXQpIHsKLQkJcHJpdi0+bGFzdF9yeF9yc3NpID0gcnhfc3RhdHVzLnNzaTsKLQkJcHJpdi0+bGFzdF9iZWFjb25fdGltZSA9ICBwcml2LT51Y29kZV9iZWFjb25fdGltZTsKLQkJcHJpdi0+bGFzdF90c2YgPSBsZTY0X3RvX2NwdShyeF9zdGFydC0+dGltZXN0YW1wKTsKLQl9Ci0KLQlmYyA9IGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY29udHJvbCk7Ci0Jc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKLQkJaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApCi0JCQlpd2w0OTY1X3VwZGF0ZV9wc19tb2RlKHByaXYsIGZjICAmIElFRUU4MDIxMV9GQ1RMX1BNLAotCQkJCQkJaGVhZGVyLT5hZGRyMik7Ci0JCWl3bDQ5NjVfaGFuZGxlX2RhdGFfcGFja2V0KHByaXYsIDAsIGluY2x1ZGVfcGh5LCByeGIsICZyeF9zdGF0dXMpOwotCQlicmVhazsKLQotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVE6Ci0JCQlJV0xfREVCVUdfSFQoIklFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSBhcnJpdmVkXG4iKTsKLQkJCWl3bDQ5NjVfaGFuZGxlX2RhdGFfcGFja2V0KHByaXYsIDAsIGluY2x1ZGVfcGh5LAotCQkJCQkJcnhiLCAmcnhfc3RhdHVzKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlicmVhazsKLQotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6IHsKLQkJREVDTEFSRV9NQUNfQlVGKG1hYzEpOwotCQlERUNMQVJFX01BQ19CVUYobWFjMik7Ci0JCURFQ0xBUkVfTUFDX0JVRihtYWMzKTsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkKLQkJCWl3bDQ5NjVfdXBkYXRlX3BzX21vZGUocHJpdiwgZmMgICYgSUVFRTgwMjExX0ZDVExfUE0sCi0JCQkJCQloZWFkZXItPmFkZHIyKTsKLQotCQlpZiAodW5saWtlbHkoIW5ldHdvcmtfcGFja2V0KSkKLQkJCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAobm9uIG5ldHdvcmspOiAiCi0JCQkJICAgICAgICIlcywgJXMsICVzXG4iLAotCQkJCSAgICAgICBwcmludF9tYWMobWFjMSwgaGVhZGVyLT5hZGRyMSksCi0JCQkJICAgICAgIHByaW50X21hYyhtYWMyLCBoZWFkZXItPmFkZHIyKSwKLQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzMsIGhlYWRlci0+YWRkcjMpKTsKLQkJZWxzZSBpZiAodW5saWtlbHkoaXdsNDk2NV9pc19kdXBsaWNhdGVfcGFja2V0KHByaXYsIGhlYWRlcikpKQotCQkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIChkdXApOiAlcywgJXMsICVzXG4iLAotCQkJCSAgICAgICBwcmludF9tYWMobWFjMSwgaGVhZGVyLT5hZGRyMSksCi0JCQkJICAgICAgIHByaW50X21hYyhtYWMyLCBoZWFkZXItPmFkZHIyKSwKLQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzMsIGhlYWRlci0+YWRkcjMpKTsKLQkJZWxzZQotCQkJaXdsNDk2NV9oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwgMSwgaW5jbHVkZV9waHksIHJ4YiwKLQkJCQkJCSAgICZyeF9zdGF0dXMpOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0KLQl9Ci19Ci0KLS8qIENhY2hlIHBoeSBkYXRhIChSeCBzaWduYWwgc3RyZW5ndGgsIGV0YykgZm9yIEhUIGZyYW1lIChSRVBMWV9SWF9QSFlfQ01EKS4KLSAqIFRoaXMgd2lsbCBiZSB1c2VkIGxhdGVyIGluIGl3bDQ5NjVfcnhfcmVwbHlfcngoKSBmb3IgUkVQTFlfUlhfTVBEVV9DTUQuICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X3J4X3BoeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0JcHJpdi0+bGFzdF9waHlfcmVzWzBdID0gMTsKLQltZW1jcHkoJnByaXYtPmxhc3RfcGh5X3Jlc1sxXSwgJihwa3QtPnUucmF3WzBdKSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMpKTsKLX0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfbWlzc2VkX2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKLQotewotI2lmZGVmIENPTkZJR19JV0w0OTY1X1NFTlNJVElWSVRZCi0Jc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2w0OTY1X21pc3NlZF9iZWFjb25fbm90aWYgKm1pc3NlZF9iZWFjb247Ci0KLQltaXNzZWRfYmVhY29uID0gJnBrdC0+dS5taXNzZWRfYmVhY29uOwotCWlmIChsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZXF1dGl2ZV9taXNzZWRfYmVhY29ucykgPiA1KSB7Ci0JCUlXTF9ERUJVR19DQUxJQigibWlzc2VkIGJjbiBjbnNxICVkIHRvdGwgJWQgcmNkICVkIGV4cGN0ZCAlZFxuIiwKLQkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zKSwKLQkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPnRvdGFsX21pc3NlZF9iZWNvbnMpLAotCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX3JlY3ZkX2JlYWNvbnMpLAotCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX2V4cGVjdGVkX2JlYWNvbnMpKTsKLQkJcHJpdi0+c2Vuc2l0aXZpdHlfZGF0YS5zdGF0ZSA9IElXTF9TRU5TX0NBTElCX05FRURfUkVJTklUOwotCQlpZiAodW5saWtlbHkoIXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKQotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zZW5zaXRpdml0eV93b3JrKTsKLQl9Ci0jZW5kaWYgLypDT05GSUdfSVdMNDk2NV9TRU5TSVRJVklUWSovCi19Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLQotLyoqCi0gKiBpd2w0OTY1X3N0YV9tb2RpZnlfZW5hYmxlX3RpZF90eCAtIEVuYWJsZSBUeCBmb3IgdGhpcyBUSUQgaW4gc3RhdGlvbiB0YWJsZQotICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3N0YV9tb2RpZnlfZW5hYmxlX3RpZF90eChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSBpbnQgc3RhX2lkLCBpbnQgdGlkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBSZW1vdmUgImRpc2FibGUiIGZsYWcsIHRvIGVuYWJsZSBUeCBmb3IgdGhpcyBUSUQgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX1RJRF9ESVNBQkxFX1RYOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnRpZF9kaXNhYmxlX3R4ICY9IGNwdV90b19sZTE2KH4oMSA8PCB0aWQpKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCi0JaXdsNDk2NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKLX0KLQotLyoqCi0gKiBpd2w0OTY1X3R4X3N0YXR1c19yZXBseV9jb21wcmVzc2VkX2JhIC0gVXBkYXRlIHR4IHN0YXR1cyBmcm9tIGJsb2NrLWFjawotICoKLSAqIEdvIHRocm91Z2ggYmxvY2stYWNrJ3MgYml0bWFwIG9mIEFDSydkIGZyYW1lcywgdXBkYXRlIGRyaXZlcidzIHJlY29yZCBvZgotICogQUNLIHZzLiBub3QuICBUaGlzIGdldHMgc2VudCB0byBtYWM4MDIxMSwgdGhlbiB0byByYXRlIHNjYWxpbmcgYWxnby4KLSAqLwotc3RhdGljIGludCBpd2w0OTY1X3R4X3N0YXR1c19yZXBseV9jb21wcmVzc2VkX2JhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJCSBzdHJ1Y3QgaXdsNDk2NV9odF9hZ2cgKmFnZywKLQkJCQkJCSBzdHJ1Y3QgaXdsNDk2NV9jb21wcmVzc2VkX2JhX3Jlc3AqCi0JCQkJCQkgYmFfcmVzcCkKLQotewotCWludCBpLCBzaCwgYWNrOwotCXUxNiBzZXFfY3RsID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2VxX2N0bCk7Ci0JdTE2IHNjZF9mbG93ID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX2Zsb3cpOwotCXU2NCBiaXRtYXA7Ci0JaW50IHN1Y2Nlc3NlcyA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnR4X3N0YXR1czsKLQotCWlmICh1bmxpa2VseSghYWdnLT53YWl0X2Zvcl9iYSkpICB7Ci0JCUlXTF9FUlJPUigiUmVjZWl2ZWQgQkEgd2hlbiBub3QgZXhwZWN0ZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBNYXJrIHRoYXQgdGhlIGV4cGVjdGVkIGJsb2NrLWFjayByZXNwb25zZSBhcnJpdmVkICovCi0JYWdnLT53YWl0X2Zvcl9iYSA9IDA7Ci0JSVdMX0RFQlVHX1RYX1JFUExZKCJCQSAlZCAlZFxuIiwgYWdnLT5zdGFydF9pZHgsIGJhX3Jlc3AtPnNlcV9jdGwpOwotCi0JLyogQ2FsY3VsYXRlIHNoaWZ0IHRvIGFsaWduIGJsb2NrLWFjayBiaXRzIHdpdGggb3VyIFR4IHdpbmRvdyBiaXRzICovCi0Jc2ggPSBhZ2ctPnN0YXJ0X2lkeCAtIFNFUV9UT19JTkRFWChzZXFfY3RsPj40KTsKLQlpZiAoc2ggPCAwKSAvKiB0Yncgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggaW5kaWNlcyAqLwotCQlzaCArPSAweDEwMDsKLQotCS8qIGRvbid0IHVzZSA2NC1iaXQgdmFsdWVzIGZvciBub3cgKi8KLQliaXRtYXAgPSBsZTY0X3RvX2NwdShiYV9yZXNwLT5iaXRtYXApID4+IHNoOwotCi0JaWYgKGFnZy0+ZnJhbWVfY291bnQgPiAoNjQgLSBzaCkpIHsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJtb3JlIGZyYW1lcyB0aGFuIGJpdG1hcCBzaXplIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBjaGVjayBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIGFjY29yZGluZyB0byB0aGUKLQkgKiB0cmFuc21pdHRlZCBiaXRtYXAgYW5kIGJsb2NrLWFjayBiaXRtYXAgKi8KLQliaXRtYXAgJj0gYWdnLT5iaXRtYXA7Ci0KLQkvKiBGb3IgZWFjaCBmcmFtZSBhdHRlbXB0ZWQgaW4gYWdncmVnYXRpb24sCi0JICogdXBkYXRlIGRyaXZlcidzIHJlY29yZCBvZiB0eCBmcmFtZSdzIHN0YXR1cy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgYWdnLT5mcmFtZV9jb3VudCA7IGkrKykgewotCQlhY2sgPSBiaXRtYXAgJiAoMSA8PCBpKTsKLQkJc3VjY2Vzc2VzICs9ICEhYWNrOwotCQlJV0xfREVCVUdfVFhfUkVQTFkoIiVzIE9OIGk9JWQgaWR4PSVkIHJhdz0lZFxuIiwKLQkJCWFjaz8gIkFDSyI6Ik5BQ0siLCBpLCAoYWdnLT5zdGFydF9pZHggKyBpKSAmIDB4ZmYsCi0JCQlhZ2ctPnN0YXJ0X2lkeCArIGkpOwotCX0KLQotCXR4X3N0YXR1cyA9ICZwcml2LT50eHFbc2NkX2Zsb3ddLnR4YlthZ2ctPnN0YXJ0X2lkeF0uc3RhdHVzOwotCXR4X3N0YXR1cy0+ZmxhZ3MgPSBJRUVFODAyMTFfVFhfU1RBVFVTX0FDSzsKLQl0eF9zdGF0dXMtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfQU1QRFU7Ci0JdHhfc3RhdHVzLT5hbXBkdV9hY2tfbWFwID0gc3VjY2Vzc2VzOwotCXR4X3N0YXR1cy0+YW1wZHVfYWNrX2xlbiA9IGFnZy0+ZnJhbWVfY291bnQ7Ci0JaXdsNDk2NV9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LCBhZ2ctPnJhdGVfbl9mbGFncywKLQkJCQkgICAgICZ0eF9zdGF0dXMtPmNvbnRyb2wpOwotCi0JSVdMX0RFQlVHX1RYX1JFUExZKCJCaXRtYXAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRtYXApOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogaXdsNDk2NV90eF9xdWV1ZV9zdG9wX3NjaGVkdWxlciAtIFN0b3AgcXVldWUsIGJ1dCBrZWVwIGNvbmZpZ3VyYXRpb24KICAqLwpAQCAtNDI1OCwyMiArMTkzOCwyNCBAQAogCSAqIHRoZSBTQ0RfQUNUX0VOIGJpdCBpcyB0aGUgd3JpdGUtZW5hYmxlIG1hc2sgZm9yIHRoZSBBQ1RJVkUgYml0LiAqLwogCWl3bF93cml0ZV9wcnBoKHByaXYsCiAJCUlXTDQ5X1NDRF9RVUVVRV9TVEFUVVNfQklUUyh0eHFfaWQpLAotCQkoMCA8PCBTQ0RfUVVFVUVfU1RUU19SRUdfUE9TX0FDVElWRSl8Ci0JCSgxIDw8IFNDRF9RVUVVRV9TVFRTX1JFR19QT1NfU0NEX0FDVF9FTikpOworCQkoMCA8PCBJV0w0OV9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX0FDVElWRSl8CisJCSgxIDw8IElXTDQ5X1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfU0NEX0FDVF9FTikpOwogfQogCiAvKioKLSAqIHR4cV9pZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBJV0xfQkFDS19RVUVVRV9GSVJTVF9JRAorICogdHhxX2lkIG11c3QgYmUgZ3JlYXRlciB0aGFuIElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFCiAgKiBwcml2LT5sb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV90eF9xdWV1ZV9hZ2dfZGlzYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiB0eHFfaWQsCi0JCQkJCXUxNiBzc25faWR4LCB1OCB0eF9maWZvKQorc3RhdGljIGludCBpd2w0OTY1X3R4cV9hZ2dfZGlzYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiB0eHFfaWQsCisJCQkJICAgdTE2IHNzbl9pZHgsIHU4IHR4X2ZpZm8pCiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoSVdMX0JBQ0tfUVVFVUVfRklSU1RfSUQgPiB0eHFfaWQpIHsKLQkJSVdMX1dBUk5JTkcoInF1ZXVlIG51bWJlciB0b28gc21hbGw6ICVkLCBtdXN0IGJlID4gJWRcbiIsCi0JCQkJdHhxX2lkLCBJV0xfQkFDS19RVUVVRV9GSVJTVF9JRCk7CisJaWYgKChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKKwkgICAgKElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNDlfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7CisJCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJCXR4cV9pZCwgSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUsCisJCQlJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00MjkxLDcgKzE5NzMsNyBAQAogCWl3bDQ5NjVfc2V0X3dyX3B0cnMocHJpdiwgdHhxX2lkLCBzc25faWR4KTsKIAogCWl3bF9jbGVhcl9iaXRzX3BycGgocHJpdiwgSVdMNDlfU0NEX0lOVEVSUlVQVF9NQVNLLCAoMSA8PCB0eHFfaWQpKTsKLQlpd2w0OTY1X3R4cV9jdHhfZGVhY3RpdmF0ZShwcml2LCB0eHFfaWQpOworCWl3bF90eHFfY3R4X2RlYWN0aXZhdGUocHJpdiwgdHhxX2lkKTsKIAlpd2w0OTY1X3R4X3F1ZXVlX3NldF9zdGF0dXMocHJpdiwgJnByaXYtPnR4cVt0eHFfaWRdLCB0eF9maWZvLCAwKTsKIAogCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CkBAIC00Mjk5LDEyMSArMTk4MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2w0OTY1X2NoZWNrX2VtcHR5X2h3X3F1ZXVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKLQkJCQkJIHU4IHRpZCwgaW50IHR4cV9pZCkKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSA9ICZwcml2LT50eHFbdHhxX2lkXS5xOwotCXU4ICphZGRyID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHI7Ci0Jc3RydWN0IGl3bDQ5NjVfdGlkX2RhdGEgKnRpZF9kYXRhID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF07Ci0KLQlzd2l0Y2ggKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnLnN0YXRlKSB7Ci0JY2FzZSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfREVMQkE6Ci0JCS8qIFdlIGFyZSByZWNsYWltaW5nIHRoZSBsYXN0IHBhY2tldCBvZiB0aGUgKi8KLQkJLyogYWdncmVnYXRlZCBIVyBxdWV1ZSAqLwotCQlpZiAodHhxX2lkICA9PSB0aWRfZGF0YS0+YWdnLnR4cV9pZCAmJgotCQkgICAgcS0+cmVhZF9wdHIgPT0gcS0+d3JpdGVfcHRyKSB7Ci0JCQl1MTYgc3NuID0gU0VRX1RPX1NOKHRpZF9kYXRhLT5zZXFfbnVtYmVyKTsKLQkJCWludCB0eF9maWZvID0gZGVmYXVsdF90aWRfdG9fdHhfZmlmb1t0aWRdOwotCQkJSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBlbXB0eTogY29udGludWUgREVMQkEgZmxvd1xuIik7Ci0JCQlpd2w0OTY1X3R4X3F1ZXVlX2FnZ19kaXNhYmxlKHByaXYsIHR4cV9pZCwKLQkJCQkJCSAgICAgc3NuLCB0eF9maWZvKTsKLQkJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09GRjsKLQkJCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUocHJpdi0+aHcsIGFkZHIsIHRpZCk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkE6Ci0JCS8qIFdlIGFyZSByZWNsYWltaW5nIHRoZSBsYXN0IHBhY2tldCBvZiB0aGUgcXVldWUgKi8KLQkJaWYgKHRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlID09IDApIHsKLQkJCUlXTF9ERUJVR19IVCgiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIEFEREJBIGZsb3dcbiIpOwotCQkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9BR0dfT047Ci0JCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgYWRkciwgdGlkKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsNDk2NV9xdWV1ZV9kZWNfd3JhcCAtIERlY3JlbWVudCBxdWV1ZSBpbmRleCwgd3JhcCBiYWNrIHRvIGVuZCBpZiBuZWVkZWQKLSAqIEBpbmRleCAtLSBjdXJyZW50IGluZGV4Ci0gKiBAbl9iZCAtLSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiBxdWV1ZSAocy9iIHBvd2VyIG9mIDIpCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfcXVldWVfZGVjX3dyYXAoaW50IGluZGV4LCBpbnQgbl9iZCkKLXsKLQlyZXR1cm4gKGluZGV4ID09IDApID8gbl9iZCAtIDEgOiBpbmRleCAtIDE7Ci19Ci0KLS8qKgotICogaXdsNDk2NV9yeF9yZXBseV9jb21wcmVzc2VkX2JhIC0gSGFuZGxlciBmb3IgUkVQTFlfQ09NUFJFU1NFRF9CQQotICoKLSAqIEhhbmRsZXMgYmxvY2stYWNrbm93bGVkZ2Ugbm90aWZpY2F0aW9uIGZyb20gZGV2aWNlLCB3aGljaCByZXBvcnRzIHN1Y2Nlc3MKLSAqIG9mIGZyYW1lcyBzZW50IHZpYSBhZ2dyZWdhdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9yZXBseV9jb21wcmVzc2VkX2JhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsNDk2NV9jb21wcmVzc2VkX2JhX3Jlc3AgKmJhX3Jlc3AgPSAmcGt0LT51LmNvbXByZXNzZWRfYmE7Ci0JaW50IGluZGV4OwotCXN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEgPSBOVUxMOwotCXN0cnVjdCBpd2w0OTY1X2h0X2FnZyAqYWdnOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0JLyogImZsb3ciIGNvcnJlc3BvbmRzIHRvIFR4IHF1ZXVlICovCi0JdTE2IHNjZF9mbG93ID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX2Zsb3cpOwotCi0JLyogInNzbiIgaXMgc3RhcnQgb2YgYmxvY2stYWNrIFR4IHdpbmRvdywgY29ycmVzcG9uZHMgdG8gaW5kZXgKLQkgKiAoaW4gVHggcXVldWUncyBjaXJjdWxhciBidWZmZXIpIG9mIGZpcnN0IFRGRC9mcmFtZSBpbiB3aW5kb3cgKi8KLQl1MTYgYmFfcmVzcF9zY2Rfc3NuID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX3Nzbik7Ci0KLQlpZiAoc2NkX2Zsb3cgPj0gcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtKSB7Ci0JCUlXTF9FUlJPUigiQlVHX09OIHNjZF9mbG93IGlzIGJpZ2dlciB0aGFuIG51bWJlciBvZiBxdWV1ZXMiKTsKLQkJcmV0dXJuOwotCX0KLQotCXR4cSA9ICZwcml2LT50eHFbc2NkX2Zsb3ddOwotCWFnZyA9ICZwcml2LT5zdGF0aW9uc1tiYV9yZXNwLT5zdGFfaWRdLnRpZFtiYV9yZXNwLT50aWRdLmFnZzsKLQotCS8qIEZpbmQgaW5kZXgganVzdCBiZWZvcmUgYmxvY2stYWNrIHdpbmRvdyAqLwotCWluZGV4ID0gaXdsNDk2NV9xdWV1ZV9kZWNfd3JhcChiYV9yZXNwX3NjZF9zc24gJiAweGZmLCB0eHEtPnEubl9iZCk7Ci0KLQkvKiBUT0RPOiBOZWVkIHRvIGdldCB0aGlzIGNvcHkgbW9yZSBzYWZlbHkgLSBub3cgZ29vZCBmb3IgZGVidWcgKi8KLQotCUlXTF9ERUJVR19UWF9SRVBMWSgiUkVQTFlfQ09NUFJFU1NFRF9CQSBbJWRdUmVjZWl2ZWQgZnJvbSAlcywgIgotCQkJICAgInN0YV9pZCA9ICVkXG4iLAotCQkJICAgYWdnLT53YWl0X2Zvcl9iYSwKLQkJCSAgIHByaW50X21hYyhtYWMsICh1OCopICZiYV9yZXNwLT5zdGFfYWRkcl9sbzMyKSwKLQkJCSAgIGJhX3Jlc3AtPnN0YV9pZCk7Ci0JSVdMX0RFQlVHX1RYX1JFUExZKCJUSUQgPSAlZCwgU2VxQ3RsID0gJWQsIGJpdG1hcCA9IDB4JWxseCwgc2NkX2Zsb3cgPSAiCi0JCQkgICAiJWQsIHNjZF9zc24gPSAlZFxuIiwKLQkJCSAgIGJhX3Jlc3AtPnRpZCwKLQkJCSAgIGJhX3Jlc3AtPnNlcV9jdGwsCi0JCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGJhX3Jlc3AtPmJpdG1hcCksCi0JCQkgICBiYV9yZXNwLT5zY2RfZmxvdywKLQkJCSAgIGJhX3Jlc3AtPnNjZF9zc24pOwotCUlXTF9ERUJVR19UWF9SRVBMWSgiREFUIHN0YXJ0X2lkeCA9ICVkLCBiaXRtYXAgPSAweCVsbHggXG4iLAotCQkJICAgYWdnLT5zdGFydF9pZHgsCi0JCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWFnZy0+Yml0bWFwKTsKLQotCS8qIFVwZGF0ZSBkcml2ZXIncyByZWNvcmQgb2YgQUNLIHZzLiBub3QgZm9yIGVhY2ggZnJhbWUgaW4gd2luZG93ICovCi0JaXdsNDk2NV90eF9zdGF0dXNfcmVwbHlfY29tcHJlc3NlZF9iYShwcml2LCBhZ2csIGJhX3Jlc3ApOwotCi0JLyogUmVsZWFzZSBhbGwgVEZEcyBiZWZvcmUgdGhlIFNTTiwgaS5lLiBhbGwgVEZEcyBpbiBmcm9udCBvZgotCSAqIGJsb2NrLWFjayB3aW5kb3cgKHdlIGFzc3VtZSB0aGF0IHRoZXkndmUgYmVlbiBzdWNjZXNzZnVsbHkKLQkgKiB0cmFuc21pdHRlZCAuLi4gaWYgbm90LCBpdCdzIHRvbyBsYXRlIGFueXdheSkuICovCi0JaWYgKHR4cS0+cS5yZWFkX3B0ciAhPSAoYmFfcmVzcF9zY2Rfc3NuICYgMHhmZikpIHsKLQkJaW50IGZyZWVkID0gaXdsNDk2NV90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHNjZF9mbG93LCBpbmRleCk7Ci0JCXByaXYtPnN0YXRpb25zW2JhX3Jlc3AtPnN0YV9pZF0uCi0JCQl0aWRbYmFfcmVzcC0+dGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOwotCQlpZiAoaXdsNDk2NV9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyayAmJgotCQkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgotCQkJYWdnLT5zdGF0ZSAhPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfREVMQkEpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgc2NkX2Zsb3cpOwotCQlpd2w0OTY1X2NoZWNrX2VtcHR5X2h3X3F1ZXVlKHByaXYsIGJhX3Jlc3AtPnN0YV9pZCwKLQkJCWJhX3Jlc3AtPnRpZCwgc2NkX2Zsb3cpOwotCX0KLX0KLQogLyoqCiAgKiBpd2w0OTY1X3R4X3F1ZXVlX3NldF9xMnJhdGlkIC0gTWFwIHVuaXF1ZSByZWNlaXZlci90aWQgY29tYmluYXRpb24gdG8gYSBxdWV1ZQogICovCkBAIC00NDI0LDEwICsxOTkxLDEwIEBACiAJdTMyIHRibF9kdzsKIAl1MTYgc2NkX3EycmF0aWQ7CiAKLQlzY2RfcTJyYXRpZCA9IHJhX3RpZCAmIFNDRF9RVUVVRV9SQV9USURfTUFQX1JBVElEX01TSzsKKwlzY2RfcTJyYXRpZCA9IHJhX3RpZCAmIElXTF9TQ0RfUVVFVUVfUkFfVElEX01BUF9SQVRJRF9NU0s7CiAKIAl0YmxfZHdfYWRkciA9IHByaXYtPnNjZF9iYXNlX2FkZHIgKwotCQkJU0NEX1RSQU5TTEFURV9UQkxfT0ZGU0VUX1FVRVVFKHR4cV9pZCk7CisJCQlJV0w0OV9TQ0RfVFJBTlNMQVRFX1RCTF9PRkZTRVRfUVVFVUUodHhxX2lkKTsKIAogCXRibF9kdyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHRibF9kd19hZGRyKTsKIApAQCAtNDQ0NSwzMSArMjAxMiwzNCBAQAogLyoqCiAgKiBpd2w0OTY1X3R4X3F1ZXVlX2FnZ19lbmFibGUgLSBTZXQgdXAgJiBlbmFibGUgYWdncmVnYXRpb24gZm9yIHNlbGVjdGVkIHF1ZXVlCiAgKgotICogTk9URTogIHR4cV9pZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBJV0xfQkFDS19RVUVVRV9GSVJTVF9JRCwKKyAqIE5PVEU6ICB0eHFfaWQgbXVzdCBiZSBncmVhdGVyIHRoYW4gSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUsCiAgKiAgICAgICAgaS5lLiBpdCBtdXN0IGJlIG9uZSBvZiB0aGUgaGlnaGVyIHF1ZXVlcyB1c2VkIGZvciBhZ2dyZWdhdGlvbgogICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfdHhfcXVldWVfYWdnX2VuYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsCi0JCQkJICAgICAgIGludCB0eF9maWZvLCBpbnQgc3RhX2lkLCBpbnQgdGlkLAotCQkJCSAgICAgICB1MTYgc3NuX2lkeCkKK3N0YXRpYyBpbnQgaXdsNDk2NV90eHFfYWdnX2VuYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsCisJCQkJICBpbnQgdHhfZmlmbywgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbl9pZHgpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmM7CisJaW50IHJldDsKIAl1MTYgcmFfdGlkOwogCi0JaWYgKElXTF9CQUNLX1FVRVVFX0ZJUlNUX0lEID4gdHhxX2lkKQotCQlJV0xfV0FSTklORygicXVldWUgbnVtYmVyIHRvbyBzbWFsbDogJWQsIG11c3QgYmUgPiAlZFxuIiwKLQkJCXR4cV9pZCwgSVdMX0JBQ0tfUVVFVUVfRklSU1RfSUQpOworCWlmICgoSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgPiB0eHFfaWQpIHx8CisJICAgIChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgPD0gdHhxX2lkKSkgeworCQlJV0xfV0FSTklORygicXVldWUgbnVtYmVyIG91dCBvZiByYW5nZTogJWQsIG11c3QgYmUgJWQgdG8gJWRcbiIsCisJCQl0eHFfaWQsIElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFLAorCQkJSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w0OV9OVU1fQU1QRFVfUVVFVUVTIC0gMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXJhX3RpZCA9IEJVSUxEX1JBeFRJRChzdGFfaWQsIHRpZCk7CiAKIAkvKiBNb2RpZnkgZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSB0byBUeCB0aGlzIFRJRCAqLwotCWl3bDQ5NjVfc3RhX21vZGlmeV9lbmFibGVfdGlkX3R4KHByaXYsIHN0YV9pZCwgdGlkKTsKKwlpd2xfc3RhX21vZGlmeV9lbmFibGVfdGlkX3R4KHByaXYsIHN0YV9pZCwgdGlkKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYykgeworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiByYzsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKiBTdG9wIHRoaXMgVHggcXVldWUgYmVmb3JlIGNvbmZpZ3VyaW5nIGl0ICovCkBAIC00NDg5LDE0ICsyMDU5LDE0IEBACiAKIAkvKiBTZXQgdXAgVHggd2luZG93IHNpemUgYW5kIGZyYW1lIGxpbWl0IGZvciB0aGlzIHF1ZXVlICovCiAJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsCi0JCQlwcml2LT5zY2RfYmFzZV9hZGRyICsgU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKHR4cV9pZCksCi0JCQkoU0NEX1dJTl9TSVpFIDw8IFNDRF9RVUVVRV9DVFhfUkVHMV9XSU5fU0laRV9QT1MpICYKLQkJCVNDRF9RVUVVRV9DVFhfUkVHMV9XSU5fU0laRV9NU0spOworCQlwcml2LT5zY2RfYmFzZV9hZGRyICsgSVdMNDlfU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKHR4cV9pZCksCisJCShTQ0RfV0lOX1NJWkUgPDwgSVdMNDlfU0NEX1FVRVVFX0NUWF9SRUcxX1dJTl9TSVpFX1BPUykgJgorCQlJV0w0OV9TQ0RfUVVFVUVfQ1RYX1JFRzFfV0lOX1NJWkVfTVNLKTsKIAogCWl3bF93cml0ZV90YXJnX21lbShwcml2LCBwcml2LT5zY2RfYmFzZV9hZGRyICsKLQkJCVNDRF9DT05URVhUX1FVRVVFX09GRlNFVCh0eHFfaWQpICsgc2l6ZW9mKHUzMiksCi0JCQkoU0NEX0ZSQU1FX0xJTUlUIDw8IFNDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9QT1MpCi0JCQkmIFNDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9NU0spOworCQlJV0w0OV9TQ0RfQ09OVEVYVF9RVUVVRV9PRkZTRVQodHhxX2lkKSArIHNpemVvZih1MzIpLAorCQkoU0NEX0ZSQU1FX0xJTUlUIDw8IElXTDQ5X1NDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9QT1MpCisJCSYgSVdMNDlfU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX01TSyk7CiAKIAlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBJV0w0OV9TQ0RfSU5URVJSVVBUX01BU0ssICgxIDw8IHR4cV9pZCkpOwogCkBAIC00NTA5LDQwMCArMjA3OSwzMiBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KLQotLyoqCi0gKiBpd2w0OTY1X2FkZF9zdGF0aW9uIC0gSW5pdGlhbGl6ZSBhIHN0YXRpb24ncyBoYXJkd2FyZSByYXRlIHRhYmxlCi0gKgotICogVGhlIHVDb2RlJ3Mgc3RhdGlvbiB0YWJsZSBjb250YWlucyBhIHRhYmxlIG9mIGZhbGxiYWNrIHJhdGVzCi0gKiBmb3IgYXV0b21hdGljIGZhbGxiYWNrIGR1cmluZyB0cmFuc21pc3Npb24uCi0gKgotICogTk9URTogVGhpcyBzZXRzIHVwIGEgZGVmYXVsdCBzZXQgb2YgdmFsdWVzLiAgVGhlc2Ugd2lsbCBiZSByZXBsYWNlZCBsYXRlcgotICogICAgICAgaWYgdGhlIGRyaXZlcidzIGl3bC00OTY1LXJzIHJhdGUgc2NhbGluZyBhbGdvcml0aG0gaXMgdXNlZCwgaW5zdGVhZCBvZgotICogICAgICAgcmM4MDIxMV9zaW1wbGUuCi0gKgotICogTk9URTogUnVuIFJFUExZX0FERF9TVEEgY29tbWFuZCB0byBzZXQgdXAgc3RhdGlvbiB0YWJsZSBlbnRyeSwgYmVmb3JlCi0gKiAgICAgICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gKHdoaWNoIHJ1bnMgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCwKLSAqICAgICAgIHdoaWNoIHJlcXVpcmVzIHN0YXRpb24gdGFibGUgZW50cnkgdG8gZXhpc3QpLgotICovCi12b2lkIGl3bDQ5NjVfYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQotewotCWludCBpLCByOwotCXN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCBsaW5rX2NtZCA9IHsKLQkJLnJlc2VydmVkMSA9IDAsCi0JfTsKLQl1MTYgcmF0ZV9mbGFnczsKLQotCS8qIFNldCB1cCB0aGUgcmF0ZSBzY2FsaW5nIHRvIHN0YXJ0IGF0IHNlbGVjdGVkIHJhdGUsIGZhbGwgYmFjawotCSAqIGFsbCB0aGUgd2F5IGRvd24gdG8gMU0gaW4gSUVFRSBvcmRlciwgYW5kIHRoZW4gc3BpbiBvbiAxTSAqLwotCWlmIChpc19hcCkKLQkJciA9IElXTF9SQVRFXzU0TV9JTkRFWDsKLQllbHNlIGlmIChwcml2LT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCXIgPSBJV0xfUkFURV82TV9JTkRFWDsKLQllbHNlCi0JCXIgPSBJV0xfUkFURV8xTV9JTkRFWDsKLQotCWZvciAoaSA9IDA7IGkgPCBMSU5LX1FVQUxfTUFYX1JFVFJZX05VTTsgaSsrKSB7Ci0JCXJhdGVfZmxhZ3MgPSAwOwotCQlpZiAociA+PSBJV0xfRklSU1RfQ0NLX1JBVEUgJiYgciA8PSBJV0xfTEFTVF9DQ0tfUkFURSkKLQkJCXJhdGVfZmxhZ3MgfD0gUkFURV9NQ1NfQ0NLX01TSzsKLQotCQkvKiBVc2UgVHggYW50ZW5uYSBCIG9ubHkgKi8KLQkJcmF0ZV9mbGFncyB8PSBSQVRFX01DU19BTlRfQl9NU0s7Ci0JCXJhdGVfZmxhZ3MgJj0gflJBVEVfTUNTX0FOVF9BX01TSzsKLQotCQlsaW5rX2NtZC5yc190YWJsZVtpXS5yYXRlX25fZmxhZ3MgPQotCQkJaXdsNDk2NV9od19zZXRfcmF0ZV9uX2ZsYWdzKGl3bDQ5NjVfcmF0ZXNbcl0ucGxjcCwgcmF0ZV9mbGFncyk7Ci0JCXIgPSBpd2w0OTY1X2dldF9wcmV2X2llZWVfcmF0ZShyKTsKLQl9Ci0KLQlsaW5rX2NtZC5nZW5lcmFsX3BhcmFtcy5zaW5nbGVfc3RyZWFtX2FudF9tc2sgPSAyOwotCWxpbmtfY21kLmdlbmVyYWxfcGFyYW1zLmR1YWxfc3RyZWFtX2FudF9tc2sgPSAzOwotCWxpbmtfY21kLmFnZ19wYXJhbXMuYWdnX2Rpc19zdGFydF90aCA9IDM7Ci0JbGlua19jbWQuYWdnX3BhcmFtcy5hZ2dfdGltZV9saW1pdCA9IGNwdV90b19sZTE2KDQwMDApOwotCi0JLyogVXBkYXRlIHRoZSByYXRlIHNjYWxpbmcgZm9yIGNvbnRyb2wgZnJhbWUgVHggdG8gQVAgKi8KLQlsaW5rX2NtZC5zdGFfaWQgPSBpc19hcCA/IElXTF9BUF9JRCA6IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7Ci0KLQlpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQsCi0JCQkgICAgICAgc2l6ZW9mKGxpbmtfY21kKSwgJmxpbmtfY21kLCBOVUxMKTsKLX0KLQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0KLXN0YXRpYyB1OCBpd2w0OTY1X2lzX2NoYW5uZWxfZXh0ZW5zaW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJCSAgICAgICB1MTYgY2hhbm5lbCwgdTggZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0KQotewotCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIGNoYW5uZWwpOwotCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID09IElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfTk9ORSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoKGNoX2luZm8tPmZhdF9leHRlbnNpb25fY2hhbm5lbCA9PSBleHRlbnNpb25fY2hhbl9vZmZzZXQpIHx8Ci0JICAgIChjaF9pbmZvLT5mYXRfZXh0ZW5zaW9uX2NoYW5uZWwgPT0gSFRfSUVfRVhUX0NIQU5ORUxfTUFYKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHU4IGl3bDQ5NjVfaXNfZmF0X3R4X2FsbG93ZWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqc3RhX2h0X2luZikKLXsKLQlzdHJ1Y3QgaXdsX2h0X2luZm8gKml3bF9odF9jb25mID0gJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnOwotCi0JaWYgKCghaXdsX2h0X2NvbmYtPmlzX2h0KSB8fAotCSAgIChpd2xfaHRfY29uZi0+c3VwcG9ydGVkX2NoYW5fd2lkdGggIT0gSVdMX0NIQU5ORUxfV0lEVEhfNDBNSFopIHx8Ci0JICAgKGl3bF9odF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPT0gSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9OT05FKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc3RhX2h0X2luZikgewotCQlpZiAoKCFzdGFfaHRfaW5mLT5odF9zdXBwb3J0ZWQpIHx8Ci0JCSAgICghKHN0YV9odF9pbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIKSkpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gKGl3bDQ5NjVfaXNfY2hhbm5lbF9leHRlbnNpb24ocHJpdiwgcHJpdi0+YmFuZCwKLQkJCQkJIGl3bF9odF9jb25mLT5jb250cm9sX2NoYW5uZWwsCi0JCQkJCSBpd2xfaHRfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0KSk7Ci19Ci0KLXZvaWQgaXdsNDk2NV9zZXRfcnhvbl9odChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaHRfaW5mbyAqaHRfaW5mbykKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247Ci0JdTMyIHZhbDsKLQotCWlmICghaHRfaW5mby0+aXNfaHQpCi0JCXJldHVybjsKLQotCS8qIFNldCB1cCBjaGFubmVsIGJhbmR3aWR0aDogIDIwIE1IeiBvbmx5LCBvciAyMC80MCBtaXhlZCBpZiBmYXQgb2sgKi8KLQlpZiAoaXdsNDk2NV9pc19mYXRfdHhfYWxsb3dlZChwcml2LCBOVUxMKSkKLQkJcnhvbi0+ZmxhZ3MgfD0gUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX01JWEVEX01TSzsKLQllbHNlCi0JCXJ4b24tPmZsYWdzICY9IH4oUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX01JWEVEX01TSyB8Ci0JCQkJIFJYT05fRkxHX0NIQU5ORUxfTU9ERV9QVVJFXzQwX01TSyk7Ci0KLQlpZiAobGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkgIT0gaHRfaW5mby0+Y29udHJvbF9jaGFubmVsKSB7Ci0JCUlXTF9ERUJVR19BU1NPQygiY29udHJvbCBkaWZmIHRoYW4gY3VycmVudCAlZCAlZFxuIiwKLQkJCQlsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSwKLQkJCQlodF9pbmZvLT5jb250cm9sX2NoYW5uZWwpOwotCQlyeG9uLT5jaGFubmVsID0gY3B1X3RvX2xlMTYoaHRfaW5mby0+Y29udHJvbF9jaGFubmVsKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIE5vdGU6IGNvbnRyb2wgY2hhbm5lbCBpcyBvcHBvc2l0ZSBvZiBleHRlbnNpb24gY2hhbm5lbCAqLwotCXN3aXRjaCAoaHRfaW5mby0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0KSB7Ci0JY2FzZSBJV0xfRVhUX0NIQU5ORUxfT0ZGU0VUX0FCT1ZFOgotCQlyeG9uLT5mbGFncyAmPSB+KFJYT05fRkxHX0NUUkxfQ0hBTk5FTF9MT0NfSElfTVNLKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfRVhUX0NIQU5ORUxfT0ZGU0VUX0JFTE9XOgotCQlyeG9uLT5mbGFncyB8PSBSWE9OX0ZMR19DVFJMX0NIQU5ORUxfTE9DX0hJX01TSzsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfRVhUX0NIQU5ORUxfT0ZGU0VUX05PTkU6Ci0JZGVmYXVsdDoKLQkJcnhvbi0+ZmxhZ3MgJj0gflJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0s7Ci0JCWJyZWFrOwotCX0KLQotCXZhbCA9IGh0X2luZm8tPmh0X3Byb3RlY3Rpb247Ci0KLQlyeG9uLT5mbGFncyB8PSBjcHVfdG9fbGUzMih2YWwgPDwgUlhPTl9GTEdfSFRfT1BFUkFUSU5HX01PREVfUE9TKTsKLQotCWl3bDQ5NjVfc2V0X3J4b25fY2hhaW4ocHJpdik7Ci0KLQlJV0xfREVCVUdfQVNTT0MoInN1cHBvcnRlZCBIVCByYXRlIDB4JVggJVggIgotCQkJInJ4b24gZmxhZ3MgMHglWCBvcGVyYXRpb24gbW9kZSA6MHglWCAiCi0JCQkiZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0IDB4JXggIgotCQkJImNvbnRyb2wgY2hhbiAlZFxuIiwKLQkJCWh0X2luZm8tPnN1cHBfbWNzX3NldFswXSwgaHRfaW5mby0+c3VwcF9tY3Nfc2V0WzFdLAotCQkJbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MpLCBodF9pbmZvLT5odF9wcm90ZWN0aW9uLAotCQkJaHRfaW5mby0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0LAotCQkJaHRfaW5mby0+Y29udHJvbF9jaGFubmVsKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgaXdsNDk2NV9zZXRfaHRfYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpbmRleCwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKnN0YV9odF9pbmYpCi17Ci0JX19sZTMyIHN0YV9mbGFnczsKLQl1OCBtaW1vX3BzX21vZGU7Ci0KLQlpZiAoIXN0YV9odF9pbmYgfHwgIXN0YV9odF9pbmYtPmh0X3N1cHBvcnRlZCkKLQkJZ290byBkb25lOwotCi0JbWltb19wc19tb2RlID0gKHN0YV9odF9pbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUlNT19QUykgPj4gMjsKLQotCXN0YV9mbGFncyA9IHByaXYtPnN0YXRpb25zW2luZGV4XS5zdGEuc3RhdGlvbl9mbGFnczsKLQotCXN0YV9mbGFncyAmPSB+KFNUQV9GTEdfUlRTX01JTU9fUFJPVF9NU0sgfCBTVEFfRkxHX01JTU9fRElTX01TSyk7Ci0KLQlzd2l0Y2ggKG1pbW9fcHNfbW9kZSkgewotCWNhc2UgV0xBTl9IVF9DQVBfTUlNT19QU19TVEFUSUM6Ci0JCXN0YV9mbGFncyB8PSBTVEFfRkxHX01JTU9fRElTX01TSzsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0hUX0NBUF9NSU1PX1BTX0RZTkFNSUM6Ci0JCXN0YV9mbGFncyB8PSBTVEFfRkxHX1JUU19NSU1PX1BST1RfTVNLOwotCQlicmVhazsKLQljYXNlIFdMQU5fSFRfQ0FQX01JTU9fUFNfRElTQUJMRUQ6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUlXTF9XQVJOSU5HKCJJbnZhbGlkIE1JTU8gUFMgbW9kZSAlZCIsIG1pbW9fcHNfbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCXN0YV9mbGFncyB8PSBjcHVfdG9fbGUzMigKLQkgICAgICAodTMyKXN0YV9odF9pbmYtPmFtcGR1X2ZhY3RvciA8PCBTVEFfRkxHX01BWF9BR0dfU0laRV9QT1MpOwotCi0Jc3RhX2ZsYWdzIHw9IGNwdV90b19sZTMyKAotCSAgICAgICh1MzIpc3RhX2h0X2luZi0+YW1wZHVfZGVuc2l0eSA8PCBTVEFfRkxHX0FHR19NUERVX0RFTlNJVFlfUE9TKTsKLQotCWlmIChpd2w0OTY1X2lzX2ZhdF90eF9hbGxvd2VkKHByaXYsIHN0YV9odF9pbmYpKQotCQlzdGFfZmxhZ3MgfD0gU1RBX0ZMR19GQVRfRU5fTVNLOwotCWVsc2UKLQkJc3RhX2ZsYWdzICY9IH5TVEFfRkxHX0ZBVF9FTl9NU0s7Ci0KLQlwcml2LT5zdGF0aW9uc1tpbmRleF0uc3RhLnN0YXRpb25fZmxhZ3MgPSBzdGFfZmxhZ3M7Ci0gZG9uZToKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfc3RhX21vZGlmeV9hZGRfYmFfdGlkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICBpbnQgc3RhX2lkLCBpbnQgdGlkLCB1MTYgc3NuKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGF0aW9uX2ZsYWdzX21zayA9IDA7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9BRERCQV9USURfTVNLOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmFkZF9pbW1lZGlhdGVfYmFfdGlkID0gKHU4KXRpZDsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5hZGRfaW1tZWRpYXRlX2JhX3NzbiA9IGNwdV90b19sZTE2KHNzbik7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQotCWl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfc3RhX21vZGlmeV9kZWxfYmFfdGlkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICBpbnQgc3RhX2lkLCBpbnQgdGlkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGF0aW9uX2ZsYWdzX21zayA9IDA7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9ERUxCQV9USURfTVNLOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnJlbW92ZV9pbW1lZGlhdGVfYmFfdGlkID0gKHU4KXRpZDsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCi0JaXdsNDk2NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKLX0KLQotLyoKLSAqIEZpbmQgZmlyc3QgYXZhaWxhYmxlIChsb3dlc3QgdW51c2VkKSBUeCBRdWV1ZSwgbWFyayBpdCAiYWN0aXZlIi4KLSAqIENhbGxlZCBvbmx5IHdoZW4gZmluZGluZyBxdWV1ZSBmb3IgYWdncmVnYXRpb24uCi0gKiBTaG91bGQgbmV2ZXIgcmV0dXJuIGFueXRoaW5nIDwgNywgYmVjYXVzZSB0aGV5IHNob3VsZCBhbHJlYWR5Ci0gKiBiZSBpbiB1c2UgYXMgRURDQSBBQyAoMC0zKSwgQ29tbWFuZCAoNCksIEhDQ0EgKDUsIDYpLgotICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfdHhxX2N0eF9hY3RpdmF0ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpbnQgdHhxX2lkOwotCi0JZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKQotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQodHhxX2lkLCAmcHJpdi0+dHhxX2N0eF9hY3RpdmVfbXNrKSkKLQkJCXJldHVybiB0eHFfaWQ7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IGl3bDQ5NjVfbWFjX2h0X3R4X2FnZ19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKmRhLAotCQkJCSAgICAgICB1MTYgdGlkLCB1MTYgKnN0YXJ0X3NlcV9udW0pCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHN0YV9pZDsKLQlpbnQgdHhfZmlmbzsKLQlpbnQgdHhxX2lkOwotCWludCBzc24gPSAtMTsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2w0OTY1X3RpZF9kYXRhICp0aWRfZGF0YTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCWlmIChsaWtlbHkodGlkIDwgQVJSQVlfU0laRShkZWZhdWx0X3RpZF90b190eF9maWZvKSkpCi0JCXR4X2ZpZm8gPSBkZWZhdWx0X3RpZF90b190eF9maWZvW3RpZF07Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCUlXTF9XQVJOSU5HKCIlcyBvbiBkYSA9ICVzIHRpZCA9ICVkXG4iLAotCQkJX19mdW5jX18sIHByaW50X21hYyhtYWMsIGRhKSwgdGlkKTsKLQotCXN0YV9pZCA9IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGRhKTsKLQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pCi0JCXJldHVybiAtRU5YSU87Ci0KLQlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgIT0gSVdMX0FHR19PRkYpIHsKLQkJSVdMX0VSUk9SKCJTdGFydCBBR0cgd2hlbiBzdGF0ZSBpcyBub3QgSVdMX0FHR19PRkYgIVxuIik7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JdHhxX2lkID0gaXdsNDk2NV90eHFfY3R4X2FjdGl2YXRlX2ZyZWUocHJpdik7Ci0JaWYgKHR4cV9pZCA9PSAtMSkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCXRpZF9kYXRhID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF07Ci0Jc3NuID0gU0VRX1RPX1NOKHRpZF9kYXRhLT5zZXFfbnVtYmVyKTsKLQl0aWRfZGF0YS0+YWdnLnR4cV9pZCA9IHR4cV9pZDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCi0JKnN0YXJ0X3NlcV9udW0gPSBzc247Ci0JcmV0ID0gaXdsNDk2NV90eF9xdWV1ZV9hZ2dfZW5hYmxlKHByaXYsIHR4cV9pZCwgdHhfZmlmbywKLQkJCQkJICBzdGFfaWQsIHRpZCwgc3NuKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gMDsKLQlpZiAodGlkX2RhdGEtPnRmZHNfaW5fcXVldWUgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkhXIHF1ZXVlIGlzIGVtcHR5XG4iKTsKLQkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9BR0dfT047Ci0JCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKGh3LCBkYSwgdGlkKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGlzIE5PVCBlbXB0eTogJWQgcGFja2V0cyBpbiBIVyBxdWV1ZVxuIiwKLQkJCQl0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSk7Ci0JCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkE7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfaHRfdHhfYWdnX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpkYSwKLQkJCQkgICAgICB1MTYgdGlkKQotewotCi0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHR4X2ZpZm9faWQsIHR4cV9pZCwgc3RhX2lkLCBzc24gPSAtMTsKLQlzdHJ1Y3QgaXdsNDk2NV90aWRfZGF0YSAqdGlkX2RhdGE7Ci0JaW50IHJldCwgd3JpdGVfcHRyLCByZWFkX3B0cjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0JaWYgKCFkYSkgewotCQlJV0xfRVJST1IoImRhID0gTlVMTFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChsaWtlbHkodGlkIDwgQVJSQVlfU0laRShkZWZhdWx0X3RpZF90b190eF9maWZvKSkpCi0JCXR4X2ZpZm9faWQgPSBkZWZhdWx0X3RpZF90b190eF9maWZvW3RpZF07Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0YV9pZCA9IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGRhKTsKLQotCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikKLQkJcmV0dXJuIC1FTlhJTzsKLQotCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSAhPSBJV0xfQUdHX09OKQotCQlJV0xfV0FSTklORygiU3RvcHBpbmcgQUdHIHdoaWxlIHN0YXRlIG5vdCBJV0xfQUdHX09OXG4iKTsKLQotCXRpZF9kYXRhID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF07Ci0Jc3NuID0gKHRpZF9kYXRhLT5zZXFfbnVtYmVyICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OwotCXR4cV9pZCA9IHRpZF9kYXRhLT5hZ2cudHhxX2lkOwotCXdyaXRlX3B0ciA9IHByaXYtPnR4cVt0eHFfaWRdLnEud3JpdGVfcHRyOwotCXJlYWRfcHRyID0gcHJpdi0+dHhxW3R4cV9pZF0ucS5yZWFkX3B0cjsKLQotCS8qIFRoZSBxdWV1ZSBpcyBub3QgZW1wdHkgKi8KLQlpZiAod3JpdGVfcHRyICE9IHJlYWRfcHRyKSB7Ci0JCUlXTF9ERUJVR19IVCgiU3RvcHBpbmcgYSBub24gZW1wdHkgQUdHIEhXIFFVRVVFXG4iKTsKLQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPQotCQkJCUlXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBlbXB0eVxuIik7OwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnLnN0YXRlID0gSVdMX0FHR19PRkY7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJldCA9IGl3bDQ5NjVfdHhfcXVldWVfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLCBzc24sIHR4X2ZpZm9faWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHByaXYtPmh3LCBkYSwgdGlkKTsKLQotCUlXTF9ERUJVR19JTkZPKCJpd2w0OTY1X21hY19odF90eF9hZ2dfc3RvcCBvbiBkYT0lcyB0aWQ9JWRcbiIsCi0JCQlwcmludF9tYWMobWFjLCBkYSksIHRpZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogaW50IGl3bDQ5NjVfbWFjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAogCQkJICAgICBjb25zdCB1OCAqYWRkciwgdTE2IHRpZCwgdTE2ICpzc24pCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHN0YV9pZDsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAotCUlXTF9ERUJVR19IVCgiQS1NUERVIGFjdGlvbiBvbiBkYT0lcyB0aWQ9JWQgIiwKLQkJCXByaW50X21hYyhtYWMsIGFkZHIpLCB0aWQpOwotCXN0YV9pZCA9IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOworCUlXTF9ERUJVR19IVCgiQS1NUERVIGFjdGlvbiBvbiBhZGRyICVzIHRpZCAlZFxuIiwKKwkJICAgICBwcmludF9tYWMobWFjLCBhZGRyKSwgdGlkKTsKKworCWlmICghKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9OKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgogCQlJV0xfREVCVUdfSFQoInN0YXJ0IFJ4XG4iKTsKLQkJaXdsNDk2NV9zdGFfbW9kaWZ5X2FkZF9iYV90aWQocHJpdiwgc3RhX2lkLCB0aWQsICpzc24pOwotCQlicmVhazsKKwkJcmV0dXJuIGl3bF9yeF9hZ2dfc3RhcnQocHJpdiwgYWRkciwgdGlkLCAqc3NuKTsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgogCQlJV0xfREVCVUdfSFQoInN0b3AgUnhcbiIpOwotCQlpd2w0OTY1X3N0YV9tb2RpZnlfZGVsX2JhX3RpZChwcml2LCBzdGFfaWQsIHRpZCk7Ci0JCWJyZWFrOworCQlyZXR1cm4gaXdsX3J4X2FnZ19zdG9wKHByaXYsIGFkZHIsIHRpZCk7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6CiAJCUlXTF9ERUJVR19IVCgic3RhcnQgVHhcbiIpOwotCQlyZXR1cm4gaXdsNDk2NV9tYWNfaHRfdHhfYWdnX3N0YXJ0KGh3LCBhZGRyLCB0aWQsIHNzbik7CisJCXJldHVybiBpd2xfdHhfYWdnX3N0YXJ0KHByaXYsIGFkZHIsIHRpZCwgc3NuKTsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgogCQlJV0xfREVCVUdfSFQoInN0b3AgVHhcbiIpOwotCQlyZXR1cm4gaXdsNDk2NV9tYWNfaHRfdHhfYWdnX3N0b3AoaHcsIGFkZHIsIHRpZCk7CisJCXJldHVybiBpd2xfdHhfYWdnX3N0b3AocHJpdiwgYWRkciwgdGlkKTsKIAlkZWZhdWx0OgogCQlJV0xfREVCVUdfSFQoInVua25vd25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5MTEsNDIgKzIxMTMsMjc5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLworc3RhdGljIHUxNiBpd2w0OTY1X2dldF9oY21kX3NpemUodTggY21kX2lkLCB1MTYgbGVuKQoreworCXN3aXRjaCAoY21kX2lkKSB7CisJY2FzZSBSRVBMWV9SWE9OOgorCQlyZXR1cm4gKHUxNikgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4b25fY21kKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gbGVuOworCX0KK30KKworc3RhdGljIHUxNiBpd2w0OTY1X2J1aWxkX2FkZHN0YV9oY21kKGNvbnN0IHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqY21kLCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXdsNDk2NV9hZGRzdGFfY21kICphZGRzdGEgPSAoc3RydWN0IGl3bDQ5NjVfYWRkc3RhX2NtZCAqKWRhdGE7CisJYWRkc3RhLT5tb2RlID0gY21kLT5tb2RlOworCW1lbWNweSgmYWRkc3RhLT5zdGEsICZjbWQtPnN0YSwgc2l6ZW9mKHN0cnVjdCBzdGFfaWRfbW9kaWZ5KSk7CisJbWVtY3B5KCZhZGRzdGEtPmtleSwgJmNtZC0+a2V5LCBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfa2V5aW5mbykpOworCWFkZHN0YS0+c3RhdGlvbl9mbGFncyA9IGNtZC0+c3RhdGlvbl9mbGFnczsKKwlhZGRzdGEtPnN0YXRpb25fZmxhZ3NfbXNrID0gY21kLT5zdGF0aW9uX2ZsYWdzX21zazsKKwlhZGRzdGEtPnRpZF9kaXNhYmxlX3R4ID0gY21kLT50aWRfZGlzYWJsZV90eDsKKwlhZGRzdGEtPmFkZF9pbW1lZGlhdGVfYmFfdGlkID0gY21kLT5hZGRfaW1tZWRpYXRlX2JhX3RpZDsKKwlhZGRzdGEtPnJlbW92ZV9pbW1lZGlhdGVfYmFfdGlkID0gY21kLT5yZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKKwlhZGRzdGEtPmFkZF9pbW1lZGlhdGVfYmFfc3NuID0gY21kLT5hZGRfaW1tZWRpYXRlX2JhX3NzbjsKKwlhZGRzdGEtPnJlc2VydmVkMSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk7CisJYWRkc3RhLT5yZXNlcnZlZDIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDApOworCisJcmV0dXJuICh1MTYpc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBpd2w0OTY1X2dldF9zY2Rfc3NuKHN0cnVjdCBpd2w0OTY1X3R4X3Jlc3AgKnR4X3Jlc3ApCit7CisJcmV0dXJuIGxlMzJfdG9fY3B1cCgmdHhfcmVzcC0+dS5zdGF0dXMgKyB0eF9yZXNwLT5mcmFtZV9jb3VudCkgJiBNQVhfU047Cit9CisKKy8qKgorICogaXdsNDk2NV90eF9zdGF0dXNfcmVwbHlfdHggLSBIYW5kbGUgVHggcnNwbnNlIGZvciBmcmFtZXMgaW4gYWdncmVnYXRpb24gcXVldWUKKyAqLworc3RhdGljIGludCBpd2w0OTY1X3R4X3N0YXR1c19yZXBseV90eChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9odF9hZ2cgKmFnZywKKwkJCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV90eF9yZXNwICp0eF9yZXNwLAorCQkJCSAgICAgIGludCB0eHFfaWQsIHUxNiBzdGFydF9pZHgpCit7CisJdTE2IHN0YXR1czsKKwlzdHJ1Y3QgYWdnX3R4X3N0YXR1cyAqZnJhbWVfc3RhdHVzID0gdHhfcmVzcC0+dS5hZ2dfc3RhdHVzOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IE5VTEw7CisJdTMyIHJhdGVfbl9mbGFncyA9IGxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyk7CisJaW50IGksIHNoLCBpZHg7CisJdTE2IHNlcTsKKwlpZiAoYWdnLT53YWl0X2Zvcl9iYSkKKwkJSVdMX0RFQlVHX1RYX1JFUExZKCJnb3QgdHggcmVzcG9uc2Ugdy9vIGJsb2NrLWFja1xuIik7CisKKwlhZ2ctPmZyYW1lX2NvdW50ID0gdHhfcmVzcC0+ZnJhbWVfY291bnQ7CisJYWdnLT5zdGFydF9pZHggPSBzdGFydF9pZHg7CisJYWdnLT5yYXRlX25fZmxhZ3MgPSByYXRlX25fZmxhZ3M7CisJYWdnLT5iaXRtYXAgPSAwOworCisJLyogIyBmcmFtZXMgYXR0ZW1wdGVkIGJ5IFR4IGNvbW1hbmQgKi8KKwlpZiAoYWdnLT5mcmFtZV9jb3VudCA9PSAxKSB7CisJCS8qIE9ubHkgb25lIGZyYW1lIHdhcyBhdHRlbXB0ZWQ7IG5vIGJsb2NrLWFjayB3aWxsIGFycml2ZSAqLworCQlzdGF0dXMgPSBsZTE2X3RvX2NwdShmcmFtZV9zdGF0dXNbMF0uc3RhdHVzKTsKKwkJaWR4ID0gc3RhcnRfaWR4OworCisJCS8qIEZJWE1FOiBjb2RlIHJlcGV0aXRpb24gKi8KKwkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZUNudCA9ICVkLCBTdGFydElkeD0lZCBpZHg9JWRcbiIsCisJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgYWdnLT5zdGFydF9pZHgsIGlkeCk7CisKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocHJpdi0+dHhxW3R4cV9pZF0udHhiW2lkeF0uc2tiWzBdKTsKKwkJaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50ID0gdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZTsKKwkJaW5mby0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9DVExfQU1QRFU7CisJCWluZm8tPmZsYWdzIHw9IGl3bF9pc190eF9zdWNjZXNzKHN0YXR1cyk/CisJCQlJRUVFODAyMTFfVFhfU1RBVF9BQ0sgOiAwOworCQlpd2xfaHdyYXRlX3RvX3R4X2NvbnRyb2wocHJpdiwgcmF0ZV9uX2ZsYWdzLCBpbmZvKTsKKwkJLyogRklYTUU6IGNvZGUgcmVwZXRpdGlvbiBlbmQgKi8KKworCQlJV0xfREVCVUdfVFhfUkVQTFkoIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKKwkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7CisJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKworCQlhZ2ctPndhaXRfZm9yX2JhID0gMDsKKwl9IGVsc2UgeworCQkvKiBUd28gb3IgbW9yZSBmcmFtZXMgd2VyZSBhdHRlbXB0ZWQ7IGV4cGVjdCBibG9jay1hY2sgKi8KKwkJdTY0IGJpdG1hcCA9IDA7CisJCWludCBzdGFydCA9IGFnZy0+c3RhcnRfaWR4OworCisJCS8qIENvbnN0cnVjdCBiaXQtbWFwIG9mIHBlbmRpbmcgZnJhbWVzIHdpdGhpbiBUeCB3aW5kb3cgKi8KKwkJZm9yIChpID0gMDsgaSA8IGFnZy0+ZnJhbWVfY291bnQ7IGkrKykgeworCQkJdTE2IHNjOworCQkJc3RhdHVzID0gbGUxNl90b19jcHUoZnJhbWVfc3RhdHVzW2ldLnN0YXR1cyk7CisJCQlzZXEgID0gbGUxNl90b19jcHUoZnJhbWVfc3RhdHVzW2ldLnNlcXVlbmNlKTsKKwkJCWlkeCA9IFNFUV9UT19JTkRFWChzZXEpOworCQkJdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcSk7CisKKwkJCWlmIChzdGF0dXMgJiAoQUdHX1RYX1NUQVRFX0ZFV19CWVRFU19NU0sgfAorCQkJCSAgICAgIEFHR19UWF9TVEFURV9BQk9SVF9NU0spKQorCQkJCWNvbnRpbnVlOworCisJCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lQ250ID0gJWQsIHR4cV9pZD0lZCBpZHg9JWRcbiIsCisJCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIHR4cV9pZCwgaWR4KTsKKworCQkJaGRyID0gaXdsX3R4X3F1ZXVlX2dldF9oZHIocHJpdiwgdHhxX2lkLCBpZHgpOworCisJCQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOworCQkJaWYgKGlkeCAhPSAoU0VRX1RPX1NOKHNjKSAmIDB4ZmYpKSB7CisJCQkJSVdMX0VSUk9SKCJCVUdfT04gaWR4IGRvZXNuJ3QgbWF0Y2ggc2VxIGNvbnRyb2wiCisJCQkJCSAgIiBpZHg9JWQsIHNlcV9pZHg9JWQsIHNlcT0lZFxuIiwKKwkJCQkJICBpZHgsIFNFUV9UT19TTihzYyksCisJCQkJCSAgaGRyLT5zZXFfY3RybCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CisKKwkJCXNoID0gaWR4IC0gc3RhcnQ7CisJCQlpZiAoc2ggPiA2NCkgeworCQkJCXNoID0gKHN0YXJ0IC0gaWR4KSArIDB4ZmY7CisJCQkJYml0bWFwID0gYml0bWFwIDw8IHNoOworCQkJCXNoID0gMDsKKwkJCQlzdGFydCA9IGlkeDsKKwkJCX0gZWxzZSBpZiAoc2ggPCAtNjQpCisJCQkJc2ggID0gMHhmZiAtIChzdGFydCAtIGlkeCk7CisJCQllbHNlIGlmIChzaCA8IDApIHsKKwkJCQlzaCA9IHN0YXJ0IC0gaWR4OworCQkJCXN0YXJ0ID0gaWR4OworCQkJCWJpdG1hcCA9IGJpdG1hcCA8PCBzaDsKKwkJCQlzaCA9IDA7CisJCQl9CisJCQliaXRtYXAgfD0gKDEgPDwgc2gpOworCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJzdGFydD0lZCBiaXRtYXA9MHgleFxuIiwKKwkJCQkJICAgc3RhcnQsICh1MzIpKGJpdG1hcCAmIDB4RkZGRkZGRkYpKTsKKwkJfQorCisJCWFnZy0+Yml0bWFwID0gYml0bWFwOworCQlhZ2ctPnN0YXJ0X2lkeCA9IHN0YXJ0OworCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lcyAlZCBzdGFydF9pZHg9JWQgYml0bWFwPTB4JWxseFxuIiwKKwkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWFnZy0+Yml0bWFwKTsKKworCQlpZiAoYml0bWFwKQorCQkJYWdnLT53YWl0X2Zvcl9iYSA9IDE7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGl3bDQ5NjVfcnhfcmVwbHlfdHggLSBIYW5kbGUgc3RhbmRhcmQgKG5vbi1hZ2dyZWdhdGlvbikgVHggcmVzcG9uc2UKKyAqLworc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9yZXBseV90eChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXUxNiBzZXF1ZW5jZSA9IGxlMTZfdG9fY3B1KHBrdC0+aGRyLnNlcXVlbmNlKTsKKwlpbnQgdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcXVlbmNlKTsKKwlpbnQgaW5kZXggPSBTRVFfVE9fSU5ERVgoc2VxdWVuY2UpOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IGl3bDQ5NjVfdHhfcmVzcCAqdHhfcmVzcCA9ICh2b2lkICopJnBrdC0+dS5yYXdbMF07CisJdTMyICBzdGF0dXMgPSBsZTMyX3RvX2NwdSh0eF9yZXNwLT51LnN0YXR1cyk7CisJaW50IHRpZCA9IE1BWF9USURfQ09VTlQsIHN0YV9pZCA9IElXTF9JTlZBTElEX1NUQVRJT047CisJX19sZTE2IGZjOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJdTggKnFjID0gTlVMTDsKKworCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKKwkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAorCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCisJCQkgIHR4cS0+cS5yZWFkX3B0cik7CisJCXJldHVybjsKKwl9CisKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXSk7CisJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKworCWhkciA9IGl3bF90eF9xdWV1ZV9nZXRfaGRyKHByaXYsIHR4cV9pZCwgaW5kZXgpOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCXRpZCA9IHFjWzBdICYgMHhmOworCX0KKworCXN0YV9pZCA9IGl3bF9nZXRfcmFfc3RhX2lkKHByaXYsIGhkcik7CisJaWYgKHR4cS0+c2NoZWRfcmV0cnkgJiYgdW5saWtlbHkoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pKSB7CisJCUlXTF9FUlJPUigiU3RhdGlvbiBub3Qga25vd25cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHR4cS0+c2NoZWRfcmV0cnkpIHsKKwkJY29uc3QgdTMyIHNjZF9zc24gPSBpd2w0OTY1X2dldF9zY2Rfc3NuKHR4X3Jlc3ApOworCQlzdHJ1Y3QgaXdsX2h0X2FnZyAqYWdnID0gTlVMTDsKKworCQlpZiAoIXFjKQorCQkJcmV0dXJuOworCisJCWFnZyA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZzsKKworCQlpd2w0OTY1X3R4X3N0YXR1c19yZXBseV90eChwcml2LCBhZ2csIHR4X3Jlc3AsIHR4cV9pZCwgaW5kZXgpOworCisJCS8qIGNoZWNrIGlmIEJBUiBpcyBuZWVkZWQgKi8KKwkJaWYgKCh0eF9yZXNwLT5mcmFtZV9jb3VudCA9PSAxKSAmJiAhaXdsX2lzX3R4X3N1Y2Nlc3Moc3RhdHVzKSkKKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0s7CisKKwkJaWYgKHR4cS0+cS5yZWFkX3B0ciAhPSAoc2NkX3NzbiAmIDB4ZmYpKSB7CisJCQlpbnQgZnJlZWQsIGFtcGR1X3E7CisJCQlpbmRleCA9IGl3bF9xdWV1ZV9kZWNfd3JhcChzY2Rfc3NuICYgMHhmZiwgdHhxLT5xLm5fYmQpOworCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSBzY2Rfc3NuICIKKwkJCQkJICAgIiVkIGluZGV4ICVkXG4iLCBzY2Rfc3NuICwgaW5kZXgpOworCQkJZnJlZWQgPSBpd2xfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKKwkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSAtPSBmcmVlZDsKKworCQkJaWYgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyayAmJgorCQkJICAgIHR4cV9pZCA+PSAwICYmIHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgJiYKKwkJCSAgICBhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkgeworCQkJCS8qIGNhbGN1bGF0ZSBtYWM4MDIxMSBhbXBkdSBzdyBxdWV1ZSB0byB3YWtlICovCisJCQkJYW1wZHVfcSA9IHR4cV9pZCAtIElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFICsKKwkJCQkJICBwcml2LT5ody0+cXVldWVzOworCQkJCWlmIChhZ2ctPnN0YXRlID09IElXTF9BR0dfT0ZGKQorCQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgdHhxX2lkKTsKKwkJCQllbHNlCisJCQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCBhbXBkdV9xKTsKKwkJCX0KKwkJCWl3bF90eHFfY2hlY2tfZW1wdHkocHJpdiwgc3RhX2lkLCB0aWQsIHR4cV9pZCk7CisJCX0KKwl9IGVsc2UgeworCQlpbmZvLT5zdGF0dXMucmV0cnlfY291bnQgPSB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lOworCQlpbmZvLT5mbGFncyB8PQorCQkJaXdsX2lzX3R4X3N1Y2Nlc3Moc3RhdHVzKSA/IElFRUU4MDIxMV9UWF9TVEFUX0FDSyA6IDA7CisJCWl3bF9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LAorCQkJCQlsZTMyX3RvX2NwdSh0eF9yZXNwLT5yYXRlX25fZmxhZ3MpLAorCQkJCQlpbmZvKTsKKworCQlJV0xfREVCVUdfVFgoIlR4IHF1ZXVlICVkIFN0YXR1cyAlcyAoMHglMDh4KSByYXRlX25fZmxhZ3MgIgorCQkJICAgICAiMHgleCByZXRyaWVzICVkXG4iLCB0eHFfaWQsCisJCQkJaXdsX2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLAorCQkJCXN0YXR1cywgbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKSwKKwkJCQl0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKKworCQlJV0xfREVCVUdfVFhfUkVQTFkoIlR4IHF1ZXVlIHJlY2xhaW0gJWRcbiIsIGluZGV4KTsKKworCQlpZiAoaW5kZXggIT0gLTEpIHsKKwkJICAgIGludCBmcmVlZCA9IGl3bF90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOworCQkgICAgaWYgKHRpZCAhPSBNQVhfVElEX0NPVU5UKQorCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOworCQkgICAgaWYgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyayAmJgorCQkJKHR4cV9pZCA+PSAwKSAmJiBwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQorCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCSAgICBpZiAodGlkICE9IE1BWF9USURfQ09VTlQpCisJCQlpd2xfdHhxX2NoZWNrX2VtcHR5KHByaXYsIHN0YV9pZCwgdGlkLCB0eHFfaWQpOworCQl9CisJfQorCisJaWYgKGl3bF9jaGVja19iaXRzKHN0YXR1cywgVFhfQUJPUlRfUkVRVUlSRURfTVNLKSkKKwkJSVdMX0VSUk9SKCJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKK30KKwogCiAvKiBTZXQgdXAgNDk2NS1zcGVjaWZpYyBSeCBmcmFtZSByZXBseSBoYW5kbGVycyAqLwotdm9pZCBpd2w0OTY1X2h3X3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBMZWdhY3kgUnggZnJhbWVzICovCi0JcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfUlhdID0gaXdsNDk2NV9yeF9yZXBseV9yeDsKLQotCS8qIEhpZ2gtdGhyb3VnaHB1dCAoSFQpIFJ4IGZyYW1lcyAqLwotCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1JYX1BIWV9DTURdID0gaXdsNDk2NV9yeF9yZXBseV9yeF9waHk7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfUlhfTVBEVV9DTURdID0gaXdsNDk2NV9yeF9yZXBseV9yeDsKLQotCXByaXYtPnJ4X2hhbmRsZXJzW01JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTl0gPQotCSAgICBpd2w0OTY1X3J4X21pc3NlZF9iZWFjb25fbm90aWY7Ci0KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0NPTVBSRVNTRURfQkFdID0gaXdsNDk2NV9yeF9yZXBseV9jb21wcmVzc2VkX2JhOwotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUICovCisJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfUlhdID0gaXdsX3J4X3JlcGx5X3J4OworCS8qIFR4IHJlc3BvbnNlICovCisJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfVFhdID0gaXdsNDk2NV9yeF9yZXBseV90eDsKIH0KIAotdm9pZCBpd2w0OTY1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlJTklUX1dPUksoJnByaXYtPnR4cG93ZXJfd29yaywgaXdsNDk2NV9iZ190eHBvd2VyX3dvcmspOwotI2lmZGVmIENPTkZJR19JV0w0OTY1X1NFTlNJVElWSVRZCi0JSU5JVF9XT1JLKCZwcml2LT5zZW5zaXRpdml0eV93b3JrLCBpd2w0OTY1X2JnX3NlbnNpdGl2aXR5X3dvcmspOwotI2VuZGlmCi0JaW5pdF90aW1lcigmcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYyk7Ci0JcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKLQlwcml2LT5zdGF0aXN0aWNzX3BlcmlvZGljLmZ1bmN0aW9uID0gaXdsNDk2NV9iZ19zdGF0aXN0aWNzX3BlcmlvZGljOwogfQogCi12b2lkIGl3bDQ5NjVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JZGVsX3RpbWVyX3N5bmMoJnByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydCk7CisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+dHhwb3dlcl93b3JrKTsKIH0KIAogCkBAIC00OTU1LDIzICsyMzk0LDU2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2w0OTY1X2hjbWRfdXRpbHMgPSB7Ci0JLmVucXVldWVfaGNtZCA9IGl3bDQ5NjVfZW5xdWV1ZV9oY21kLAorCS5nZXRfaGNtZF9zaXplID0gaXdsNDk2NV9nZXRfaGNtZF9zaXplLAorCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDQ5NjVfYnVpbGRfYWRkc3RhX2hjbWQsCisJLmNoYWluX25vaXNlX3Jlc2V0ID0gaXdsNDk2NV9jaGFpbl9ub2lzZV9yZXNldCwKKwkuZ2Fpbl9jb21wdXRhdGlvbiA9IGl3bDQ5NjVfZ2Fpbl9jb21wdXRhdGlvbiwKKwkucnRzX3R4X2NtZF9mbGFnID0gaXdsNDk2NV9ydHNfdHhfY21kX2ZsYWcsCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDQ5NjVfbGliID0gewotCS5pbml0X2RydiA9IGl3bDQ5NjVfaW5pdF9kcnYsCiAJLnNldF9od19wYXJhbXMgPSBpd2w0OTY1X2h3X3NldF9od19wYXJhbXMsCisJLmFsbG9jX3NoYXJlZF9tZW0gPSBpd2w0OTY1X2FsbG9jX3NoYXJlZF9tZW0sCisJLmZyZWVfc2hhcmVkX21lbSA9IGl3bDQ5NjVfZnJlZV9zaGFyZWRfbWVtLAorCS5zaGFyZWRfbWVtX3J4X2lkeCA9IGl3bDQ5NjVfc2hhcmVkX21lbV9yeF9pZHgsCiAJLnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsID0gaXdsNDk2NV90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKLQkuaHdfbmljX2luaXQgPSBpd2w0OTY1X2h3X25pY19pbml0LAorCS50eHFfc2V0X3NjaGVkID0gaXdsNDk2NV90eHFfc2V0X3NjaGVkLAorCS50eHFfYWdnX2VuYWJsZSA9IGl3bDQ5NjVfdHhxX2FnZ19lbmFibGUsCisJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDQ5NjVfdHhxX2FnZ19kaXNhYmxlLAorCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNDk2NV9yeF9oYW5kbGVyX3NldHVwLAorCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNDk2NV9zZXR1cF9kZWZlcnJlZF93b3JrLAorCS5jYW5jZWxfZGVmZXJyZWRfd29yayA9IGl3bDQ5NjVfY2FuY2VsX2RlZmVycmVkX3dvcmssCiAJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2w0OTY1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCiAJLmFsaXZlX25vdGlmeSA9IGl3bDQ5NjVfYWxpdmVfbm90aWZ5LAorCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsNDk2NV9pbml0X2FsaXZlX3N0YXJ0LAogCS5sb2FkX3Vjb2RlID0gaXdsNDk2NV9sb2FkX2JzbSwKKwkuYXBtX29wcyA9IHsKKwkJLmluaXQgPSBpd2w0OTY1X2FwbV9pbml0LAorCQkucmVzZXQgPSBpd2w0OTY1X2FwbV9yZXNldCwKKwkJLnN0b3AgPSBpd2w0OTY1X2FwbV9zdG9wLAorCQkuY29uZmlnID0gaXdsNDk2NV9uaWNfY29uZmlnLAorCQkuc2V0X3B3cl9zcmMgPSBpd2w0OTY1X3NldF9wd3Jfc3JjLAorCX0sCiAJLmVlcHJvbV9vcHMgPSB7CisJCS5yZWd1bGF0b3J5X2JhbmRzID0geworCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF8xX0NIQU5ORUxTLAorCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF8yX0NIQU5ORUxTLAorCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF8zX0NIQU5ORUxTLAorCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF80X0NIQU5ORUxTLAorCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF81X0NIQU5ORUxTLAorCQkJRUVQUk9NXzQ5NjVfUkVHVUxBVE9SWV9CQU5EXzI0X0ZBVF9DSEFOTkVMUywKKwkJCUVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF81Ml9GQVRfQ0hBTk5FTFMKKwkJfSwKIAkJLnZlcmlmeV9zaWduYXR1cmUgID0gaXdsY29yZV9lZXByb21fdmVyaWZ5X3NpZ25hdHVyZSwKIAkJLmFjcXVpcmVfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUsCiAJCS5yZWxlYXNlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlLAorCQkuY2hlY2tfdmVyc2lvbiA9IGl3bDQ5NjVfZWVwcm9tX2NoZWNrX3ZlcnNpb24sCisJCS5xdWVyeV9hZGRyID0gaXdsY29yZV9lZXByb21fcXVlcnlfYWRkciwKIAl9LAotCS5yYWRpb19raWxsX3N3ID0gaXdsNDk2NV9yYWRpb19raWxsX3N3LAorCS5zZXRfcG93ZXIgPSBpd2w0OTY1X3NldF9wb3dlciwKKwkuc2VuZF90eF9wb3dlcgk9IGl3bDQ5NjVfc2VuZF90eF9wb3dlciwKKwkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsNDk2NV91cGRhdGVfY2hhaW5fZmxhZ3MsCisJLnRlbXBlcmF0dXJlID0gaXdsNDk2NV90ZW1wZXJhdHVyZV9jYWxpYiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2w0OTY1X29wcyA9IHsKQEAgLTQ5ODQsMTAgKzI0NTYsMTQgQEAKIAkubmFtZSA9ICI0OTY1QUdOIiwKIAkuZndfbmFtZSA9ICJpd2x3aWZpLTQ5NjUiIElXTDQ5NjVfVUNPREVfQVBJICIudWNvZGUiLAogCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKKwkuZWVwcm9tX3NpemUgPSBJV0w0OTY1X0VFUFJPTV9JTUdfU0laRSwKIAkub3BzID0gJml3bDQ5NjVfb3BzLAogCS5tb2RfcGFyYW1zID0gJml3bDQ5NjVfbW9kX3BhcmFtcywKIH07CiAKKy8qIE1vZHVsZSBmaXJtd2FyZSAqLworTU9EVUxFX0ZJUk1XQVJFKCJpd2x3aWZpLTQ5NjUiIElXTDQ5NjVfVUNPREVfQVBJICIudWNvZGUiKTsKKwogbW9kdWxlX3BhcmFtX25hbWVkKGFudGVubmEsIGl3bDQ5NjVfbW9kX3BhcmFtcy5hbnRlbm5hLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhbnRlbm5hLCAic2VsZWN0IGFudGVubmEgKDE9TWFpbiwgMj1BdXgsIGRlZmF1bHQgMCBbYm90aF0pIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGlzYWJsZSwgaXdsNDk2NV9tb2RfcGFyYW1zLmRpc2FibGUsIGludCwgMDQ0NCk7CkBAIC01MDAyLDEwICsyNDc4LDE0IEBACiAKIG1vZHVsZV9wYXJhbV9uYW1lZChxdWV1ZXNfbnVtLCBpd2w0OTY1X21vZF9wYXJhbXMubnVtX29mX3F1ZXVlcywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocXVldWVzX251bSwgIm51bWJlciBvZiBodyBxdWV1ZXMuIik7Ci0KIC8qIFFvUyAqLwogbW9kdWxlX3BhcmFtX25hbWVkKHFvc19lbmFibGUsIGl3bDQ5NjVfbW9kX3BhcmFtcy5lbmFibGVfcW9zLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhxb3NfZW5hYmxlLCAiZW5hYmxlIGFsbCBRb1MgZnVuY3Rpb25hbGl0eSIpOworLyogMTFuICovCittb2R1bGVfcGFyYW1fbmFtZWQoMTFuX2Rpc2FibGUsIGl3bDQ5NjVfbW9kX3BhcmFtcy5kaXNhYmxlXzExbiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoMTFuX2Rpc2FibGUsICJkaXNhYmxlIDExbiBmdW5jdGlvbmFsaXR5Iik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoYW1zZHVfc2l6ZV84SywgaXdsNDk2NV9tb2RfcGFyYW1zLmFtc2R1X3NpemVfOEssIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFtc2R1X3NpemVfOEssICJlbmFibGUgOEsgYW1zZHUgc2l6ZSIpOwogCittb2R1bGVfcGFyYW1fbmFtZWQoZndfcmVzdGFydDQ5NjUsIGl3bDQ5NjVfbW9kX3BhcmFtcy5yZXN0YXJ0X2Z3LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmd19yZXN0YXJ0NDk2NSwgInJlc3RhcnQgZmlybXdhcmUgaW4gY2FzZSBvZiBlcnJvciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDRmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKiBCU0QgTElDRU5TRQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFBsZWFzZSB1c2UgdGhpcyBmaWxlIChpd2wtNTAwMC1ody5oKSBvbmx5IGZvciBoYXJkd2FyZS1yZWxhdGVkIGRlZmluaXRpb25zLgorICogVXNlIGl3bC01MDAwLWNvbW1hbmRzLmggZm9yIHVDb2RlIEFQSSBkZWZpbml0aW9ucy4KKyAqLworCisjaWZuZGVmIF9faXdsXzUwMDBfaHdfaF9fCisjZGVmaW5lIF9faXdsXzUwMDBfaHdfaF9fCisKKyNkZWZpbmUgSVdMNTBfUlRDX0lOU1RfVVBQRVJfQk9VTkQJCSgweDAyMDAwMCkKKyNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQJCSgweDgwQzAwMCkKKyNkZWZpbmUgSVdMNTBfUlRDX0lOU1RfU0laRSAoSVdMNTBfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfU0laRSAoSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBSVENfREFUQV9MT1dFUl9CT1VORCkKKworLyogRUVSUFJPTSAqLworI2RlZmluZSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUJCQkyMDQ4CisKKworI2RlZmluZSBJV0w1MF9NQVhfV0lOX1NJWkUgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgSVdMNTBfUVVFVUVfU0laRSAgICAgICAgICAgICAgICAgMjU2CisjZGVmaW5lIElXTDUwX0NNRF9GSUZPX05VTSAgICAgICAgICAgICAgICAgNworI2RlZmluZSBJV0w1MF9OVU1fUVVFVUVTICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgSVdMNTBfTlVNX0FNUERVX1FVRVVFUwkJICAxMAorI2RlZmluZSBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRQkJICAxMAorCisjZGVmaW5lIElXTF9zdGFfaWRfUE9TIDEyCisjZGVmaW5lIElXTF9zdGFfaWRfTEVOIDQKKyNkZWZpbmUgSVdMX3N0YV9pZF9TWU0gdmFsCisKKy8qIEZpeGVkIChub24tY29uZmlndXJhYmxlKSByeCBkYXRhIGZyb20gcGh5ICovCisKKy8qIEJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiBpd2w1MDAwX3NoYXJlZCBpcyBwcm92aWRlZCB0byBTQ0RfRFJBTV9CQVNFX0FERFIKKyAqIGFuZCAmaXdsNTAwMF9zaGFyZWQudmFsMCBpcyBwcm92aWRlZCB0byBGSF9SU0NTUl9DSE5MMF9TVFRTX1dQVFJfUkVHICovCitzdHJ1Y3QgaXdsNTAwMF9zY2hlZF9xdWV1ZV9ieXRlX2NudF90YmwgeworCXN0cnVjdCBpd2w0OTY1X3F1ZXVlX2J5dGVfY250X2VudHJ5IHRmZF9vZmZzZXRbSVdMNTBfUVVFVUVfU0laRSArCisJCQkJCQkgICAgICAgSVdMNTBfTUFYX1dJTl9TSVpFXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsNTAwMF9zaGFyZWQgeworCXN0cnVjdCBpd2w1MDAwX3NjaGVkX3F1ZXVlX2J5dGVfY250X3RibAorCSBxdWV1ZXNfYnl0ZV9jbnRfdGJsc1tJV0w1MF9OVU1fUVVFVUVTXTsKKwlfX2xlMzIgcmJfY2xvc2VkOworCisJLyogX19sZTMyIHJiX2Nsb3NlZF9zdHRzX3JiX251bToxMjsgKi8KKyNkZWZpbmUgSVdMX3JiX2Nsb3NlZF9zdHRzX3JiX251bV9QT1MgMAorI2RlZmluZSBJV0xfcmJfY2xvc2VkX3N0dHNfcmJfbnVtX0xFTiAxMgorI2RlZmluZSBJV0xfcmJfY2xvc2VkX3N0dHNfcmJfbnVtX1NZTSByYl9jbG9zZWQKKwkvKiBfX2xlMzIgcnNydjE6NDsgKi8KKwkvKiBfX2xlMzIgcmJfY2xvc2VkX3N0dHNfcnhfZnJhbWVfbnVtOjEyOyAqLworI2RlZmluZSBJV0xfcmJfY2xvc2VkX3N0dHNfcnhfZnJhbWVfbnVtX1BPUyAxNgorI2RlZmluZSBJV0xfcmJfY2xvc2VkX3N0dHNfcnhfZnJhbWVfbnVtX0xFTiAxMgorI2RlZmluZSBJV0xfcmJfY2xvc2VkX3N0dHNfcnhfZnJhbWVfbnVtX1NZTSByYl9jbG9zZWQKKwkvKiBfX2xlMzIgcnNydjI6NDsgKi8KKworCV9fbGUzMiBmcm1fZmluaXNoZWQ7CisJLyogX19sZTMyIGZyYW1lX2ZpbmlzaGVkX3N0dHNfcmJfbnVtOjEyOyAqLworI2RlZmluZSBJV0xfZnJhbWVfZmluaXNoZWRfc3R0c19yYl9udW1fUE9TIDAKKyNkZWZpbmUgSVdMX2ZyYW1lX2ZpbmlzaGVkX3N0dHNfcmJfbnVtX0xFTiAxMgorI2RlZmluZSBJV0xfZnJhbWVfZmluaXNoZWRfc3R0c19yYl9udW1fU1lNIGZybV9maW5pc2hlZAorCS8qIF9fbGUzMiByc3J2Mzo0OyAqLworCS8qIF9fbGUzMiBmcmFtZV9maW5pc2hlZF9zdHRzX3J4X2ZyYW1lX251bToxMjsgKi8KKyNkZWZpbmUgSVdMX2ZyYW1lX2ZpbmlzaGVkX3N0dHNfcnhfZnJhbWVfbnVtX1BPUyAxNgorI2RlZmluZSBJV0xfZnJhbWVfZmluaXNoZWRfc3R0c19yeF9mcmFtZV9udW1fTEVOIDEyCisjZGVmaW5lIElXTF9mcmFtZV9maW5pc2hlZF9zdHRzX3J4X2ZyYW1lX251bV9TWU0gZnJtX2ZpbmlzaGVkCisJLyogX19sZTMyIHJzcnY0OjQ7ICovCisKKwlfX2xlMzIgcGFkZGluZzE7ICAvKiBzbyB0aGF0IGFsbG9jYXRpb24gd2lsbCBiZSBhbGlnbmVkIHRvIDE2QiAqLworCV9fbGUzMiBwYWRkaW5nMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKyNlbmRpZiAvKiBfX2l3bF81MDAwX2h3X2hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4ZDYxOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMCwwICsxLDE1ODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNy0yMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWlvLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLTUwMDAtaHcuaCIKKworI2RlZmluZSBJV0w1MDAwX1VDT0RFX0FQSSAgIi0xIgorCitzdGF0aWMgY29uc3QgdTE2IGl3bDUwMDBfZGVmYXVsdF9xdWV1ZV90b190eF9maWZvW10gPSB7CisJSVdMX1RYX0ZJRk9fQUMzLAorCUlXTF9UWF9GSUZPX0FDMiwKKwlJV0xfVFhfRklGT19BQzEsCisJSVdMX1RYX0ZJRk9fQUMwLAorCUlXTDUwX0NNRF9GSUZPX05VTSwKKwlJV0xfVFhfRklGT19IQ0NBXzEsCisJSVdMX1RYX0ZJRk9fSENDQV8yCit9OworCisvKiBGSVhNRTogc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyA0OTY1ICovCitzdGF0aWMgaW50IGl3bDUwMDBfYXBtX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHNldCBzdG9wIG1hc3RlciBiaXQgKi8KKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TVE9QX01BU1RFUik7CisKKwlyZXQgPSBpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX1JFU0VULAorCQkJCSAgQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCwKKwkJCQkgIENTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsIDEwMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCUlXTF9ERUJVR19JTkZPKCJzdG9wIG1hc3RlclxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgaXdsNTAwMF9hcG1faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKKwkJICAgIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfRElTX0wwU19FWElUX1RJTUVSKTsKKworCS8qIGRpc2FibGUgTDBzIHdpdGhvdXQgYWZmZWN0aW5nIEwxIDpkb24ndCB3YWl0IGZvciBJQ0ggTDBzIGJ1ZyBXL0EpICovCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCisJCSAgICBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0wxQV9OT19MMFNfUlgpOworCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1I1MF9BTkFfUExMX0NGR19WQUwpOworCisJLyogc2V0ICJpbml0aWFsaXphdGlvbiBjb21wbGV0ZSIgYml0IHRvIG1vdmUgYWRhcHRlcgorCSAqIEQwVSogLS0+IEQwQSogc3RhdGUgKi8KKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCisJLyogd2FpdCBmb3IgY2xvY2sgc3RhYmlsaXphdGlvbiAqLworCXJldCA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJCQkgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksCisJCQkgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGVuYWJsZSBETUEgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCk7CisKKwl1ZGVsYXkoMjApOworCisJLyogZGlzYWJsZSBMMS1BY3RpdmUgKi8KKwlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBBUE1HX1BDSURFVl9TVFRfUkVHLAorCQkJICBBUE1HX1BDSURFVl9TVFRfVkFMX0wxX0FDVF9ESVMpOworCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEZJWE1FOiB0aGlzIGlzIGluZGVudGljYWwgdG8gNDk2NSAqLworc3RhdGljIHZvaWQgaXdsNTAwMF9hcG1fc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWl3bDUwMDBfYXBtX3N0b3BfbWFzdGVyKHByaXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKKworCXVkZWxheSgxMCk7CisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCisKK3N0YXRpYyBpbnQgaXdsNTAwMF9hcG1fcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpd2w1MDAwX2FwbV9zdG9wX21hc3Rlcihwcml2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7CisKKwl1ZGVsYXkoMTApOworCisKKwkvKiBGSVhNRTogcHV0IGhlcmUgTDFBIC1MMFMgdy9hICovCisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CisKKwkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyCisJICogRDBVKiAtLT4gRDBBKiBzdGF0ZSAqLworCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7CisKKwkvKiB3YWl0IGZvciBjbG9jayBzdGFiaWxpemF0aW9uICovCisJcmV0ID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKKwkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwKKwkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCWlmIChyZXQgPCAwKSB7CisJCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBlbmFibGUgRE1BICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLCBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQpOworCisJdWRlbGF5KDIwKTsKKworCS8qIGRpc2FibGUgTDEtQWN0aXZlICovCisJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKKwkJCSAgQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIGl3bDUwMDBfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgcmFkaW9fY2ZnOworCXU4IHZhbF9saW5rOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHByaXYtPnBjaV9kZXYsIFBDSV9MSU5LX0NUUkwsICZ2YWxfbGluayk7CisKKwkvKiBMMSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KKwlpZiAoKHZhbF9saW5rICYgUENJX0xJTktfVkFMX0wxX0VOKSA9PSBQQ0lfTElOS19WQUxfTDFfRU4pCisJCS8qIGRpYWJsZSBMMFMgZGlzYWJsZWQgTDFBIGVuYWJsZWQgKi8KKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19SRUcsIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7CisJZWxzZQorCQkvKiBMMFMgZW5hYmxlZCBMMUEgZGlzYWJsZWQgKi8KKwkJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR0lPX1JFRywgQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKKworCXJhZGlvX2NmZyA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fUkFESU9fQ09ORklHKTsKKworCS8qIHdyaXRlIHJhZGlvIGNvbmZpZyB2YWx1ZXMgdG8gcmVnaXN0ZXIgKi8KKwlpZiAoRUVQUk9NX1JGX0NGR19UWVBFX01TSyhyYWRpb19jZmcpIDwgRUVQUk9NXzUwMDBfUkZfQ0ZHX1RZUEVfTUFYKQorCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCSAgICBFRVBST01fUkZfQ0ZHX1RZUEVfTVNLKHJhZGlvX2NmZykgfAorCQkJICAgIEVFUFJPTV9SRl9DRkdfU1RFUF9NU0socmFkaW9fY2ZnKSB8CisJCQkgICAgRUVQUk9NX1JGX0NGR19EQVNIX01TSyhyYWRpb19jZmcpKTsKKworCS8qIHNldCBDU1JfSFdfQ09ORklHX1JFRyBmb3IgdUNvZGUgdXNlICovCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfUkFESU9fU0kgfAorCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX01BQ19TSSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKKworCisvKgorICogRUVQUk9NCisgKi8KK3N0YXRpYyB1MzIgZWVwcm9tX2luZGlyZWN0X2FkZHJlc3MoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkcmVzcykKK3sKKwl1MTYgb2Zmc2V0ID0gMDsKKworCWlmICgoYWRkcmVzcyAmIElORElSRUNUX0FERFJFU1MpID09IDApCisJCXJldHVybiBhZGRyZXNzOworCisJc3dpdGNoIChhZGRyZXNzICYgSU5ESVJFQ1RfVFlQRV9NU0spIHsKKwljYXNlIElORElSRUNUX0hPU1Q6CisJCW9mZnNldCA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fNTAwMF9MSU5LX0hPU1QpOworCQlicmVhazsKKwljYXNlIElORElSRUNUX0dFTkVSQUw6CisJCW9mZnNldCA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fNTAwMF9MSU5LX0dFTkVSQUwpOworCQlicmVhazsKKwljYXNlIElORElSRUNUX1JFR1VMQVRPUlk6CisJCW9mZnNldCA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fNTAwMF9MSU5LX1JFR1VMQVRPUlkpOworCQlicmVhazsKKwljYXNlIElORElSRUNUX0NBTElCUkFUSU9OOgorCQlvZmZzZXQgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NXzUwMDBfTElOS19DQUxJQlJBVElPTik7CisJCWJyZWFrOworCWNhc2UgSU5ESVJFQ1RfUFJPQ0VTU19BREpTVDoKKwkJb2Zmc2V0ID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV81MDAwX0xJTktfUFJPQ0VTU19BREpTVCk7CisJCWJyZWFrOworCWNhc2UgSU5ESVJFQ1RfT1RIRVJTOgorCQlvZmZzZXQgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NXzUwMDBfTElOS19PVEhFUlMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlJV0xfRVJST1IoImlsbGVnYWwgaW5kaXJlY3QgdHlwZTogMHglWFxuIiwKKwkJYWRkcmVzcyAmIElORElSRUNUX1RZUEVfTVNLKTsKKwkJYnJlYWs7CisJfQorCisJLyogdHJhbnNsYXRlIHRoZSBvZmZzZXQgZnJvbSB3b3JkcyB0byBieXRlICovCisJcmV0dXJuIChhZGRyZXNzICYgQUREUkVTU19NU0spICsgKG9mZnNldCA8PCAxKTsKK30KKworc3RhdGljIGludCBpd2w1MDAwX2VlcHJvbV9jaGVja192ZXJzaW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MTYgZWVwcm9tX3ZlcjsKKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9oZHIgeworCQl1OCB2ZXJzaW9uOworCQl1OCBwYV90eXBlOworCQl1MTYgdm9sdGFnZTsKKwl9ICpoZHI7CisKKwllZXByb21fdmVyID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9WRVJTSU9OKTsKKworCWhkciA9IChzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9oZHIgKilpd2xfZWVwcm9tX3F1ZXJ5X2FkZHIocHJpdiwKKwkJCQkJCQlFRVBST01fNTAwMF9DQUxJQl9BTEwpOworCisJaWYgKGVlcHJvbV92ZXIgPCBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiB8fAorCSAgICBoZHItPnZlcnNpb24gPCBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OKQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyOgorCUlXTF9FUlJPUigiVW5zdXBvcnRlZCBFRVBST00gVkVSPTB4JXggPCAweCV4IENBTElCPTB4JXggPCAweCV4XG4iLAorCQkgIGVlcHJvbV92ZXIsIEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAorCQkgIGhkci0+dmVyc2lvbiwgRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTik7CisJcmV0dXJuIC1FSU5WQUw7CisKK30KKworc3RhdGljIHZvaWQgaXdsNTAwMF9nYWluX2NvbXB1dGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJdTMyIGF2ZXJhZ2Vfbm9pc2VbTlVNX1JYX0NIQUlOU10sCisJCXUxNiBtaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2ksCisJCXUzMiBtaW5fYXZlcmFnZV9ub2lzZSkKK3sKKwlpbnQgaTsKKwlzMzIgZGVsdGFfZzsKKwlzdHJ1Y3QgaXdsX2NoYWluX25vaXNlX2RhdGEgKmRhdGEgPSAmcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YTsKKworCS8qIEZpbmQgR2FpbiBDb2RlIGZvciB0aGUgYW50ZW5uYXMgQiBhbmQgQyAqLworCWZvciAoaSA9IDE7IGkgPCBOVU1fUlhfQ0hBSU5TOyBpKyspIHsKKwkJaWYgKChkYXRhLT5kaXNjb25uX2FycmF5W2ldKSkgeworCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRlbHRhX2cgPSAoMTAwMCAqICgoczMyKWF2ZXJhZ2Vfbm9pc2VbMF0gLQorCQkJKHMzMilhdmVyYWdlX25vaXNlW2ldKSkgLyAxNTAwOworCQkvKiBib3VuZCBnYWluIGJ5IDIgYml0cyB2YWx1ZSBtYXgsIDNyZCBiaXQgaXMgc2lnbiAqLworCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gPQorCQkJbWluKGFicyhkZWx0YV9nKSwgQ0hBSU5fTk9JU0VfTUFYX0RFTFRBX0dBSU5fQ09ERSk7CisKKwkJaWYgKGRlbHRhX2cgPCAwKQorCQkJLyogc2V0IG5lZ2F0aXZlIHNpZ24gKi8KKwkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSB8PSAoMSA8PCAyKTsKKwl9CisKKwlJV0xfREVCVUdfQ0FMSUIoIkRlbHRhIGdhaW5zOiBBTlRfQiA9ICVkICBBTlRfQyA9ICVkXG4iLAorCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzFdLCBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMl0pOworCisJaWYgKCFkYXRhLT5yYWRpb193cml0ZSkgeworCQlzdHJ1Y3QgaXdsNTAwMF9jYWxpYnJhdGlvbl9jaGFpbl9ub2lzZV9nYWluX2NtZCBjbWQ7CisJCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisKKwkJY21kLm9wX2NvZGUgPSBJV0w1MDAwX1BIWV9DQUxJQlJBVEVfQ0hBSU5fTk9JU0VfR0FJTl9DTUQ7CisJCWNtZC5kZWx0YV9nYWluXzEgPSBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMV07CisJCWNtZC5kZWx0YV9nYWluXzIgPSBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMl07CisJCWl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKKwkJCXNpemVvZihjbWQpLCAmY21kLCBOVUxMKTsKKworCQlkYXRhLT5yYWRpb193cml0ZSA9IDE7CisJCWRhdGEtPnN0YXRlID0gSVdMX0NIQUlOX05PSVNFX0NBTElCUkFURUQ7CisJfQorCisJZGF0YS0+Y2hhaW5fbm9pc2VfYSA9IDA7CisJZGF0YS0+Y2hhaW5fbm9pc2VfYiA9IDA7CisJZGF0YS0+Y2hhaW5fbm9pc2VfYyA9IDA7CisJZGF0YS0+Y2hhaW5fc2lnbmFsX2EgPSAwOworCWRhdGEtPmNoYWluX3NpZ25hbF9iID0gMDsKKwlkYXRhLT5jaGFpbl9zaWduYWxfYyA9IDA7CisJZGF0YS0+YmVhY29uX2NvdW50ID0gMDsKK30KKworc3RhdGljIHZvaWQgaXdsNTAwMF9jaGFpbl9ub2lzZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9jaGFpbl9ub2lzZV9kYXRhICpkYXRhID0gJnByaXYtPmNoYWluX25vaXNlX2RhdGE7CisKKwlpZiAoKGRhdGEtPnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9BTElWRSkgJiYgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJc3RydWN0IGl3bDUwMDBfY2FsaWJyYXRpb25fY2hhaW5fbm9pc2VfcmVzZXRfY21kIGNtZDsKKworCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCQljbWQub3BfY29kZSA9IElXTDUwMDBfUEhZX0NBTElCUkFURV9DSEFJTl9OT0lTRV9SRVNFVF9DTUQ7CisJCWlmIChpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCisJCQlzaXplb2YoY21kKSwgJmNtZCkpCisJCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBzZW5kIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTURcbiIpOworCQlkYXRhLT5zdGF0ZSA9IElXTF9DSEFJTl9OT0lTRV9BQ0NVTVVMQVRFOworCQlJV0xfREVCVUdfQ0FMSUIoIlJ1biBjaGFpbl9ub2lzZV9jYWxpYnJhdGVcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgaXdsNTAwMF9ydHNfdHhfY21kX2ZsYWcoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJX19sZTMyICp0eF9mbGFncykKK3sKKwlpZiAoKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfUlRTX0NUUykgfHwKKwkgICAgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfQ1RTX1BST1RFQ1QpKQorCQkqdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19SVFNfQ1RTX01TSzsKKwllbHNlCisJCSp0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19SVFNfQ1RTX01TSzsKK30KKworc3RhdGljIHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzIGl3bDUwMDBfc2Vuc2l0aXZpdHkgPSB7CisJLm1pbl9ucmdfY2NrID0gOTUsCisJLm1heF9ucmdfY2NrID0gMCwKKwkuYXV0b19jb3JyX21pbl9vZmRtID0gOTAsCisJLmF1dG9fY29ycl9taW5fb2ZkbV9tcmMgPSAxNzAsCisJLmF1dG9fY29ycl9taW5fb2ZkbV94MSA9IDEyMCwKKwkuYXV0b19jb3JyX21pbl9vZmRtX21yY194MSA9IDI0MCwKKworCS5hdXRvX2NvcnJfbWF4X29mZG0gPSAxMjAsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV9tcmMgPSAyMTAsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV94MSA9IDE1NSwKKwkuYXV0b19jb3JyX21heF9vZmRtX21yY194MSA9IDI5MCwKKworCS5hdXRvX2NvcnJfbWluX2NjayA9IDEyNSwKKwkuYXV0b19jb3JyX21heF9jY2sgPSAyMDAsCisJLmF1dG9fY29ycl9taW5fY2NrX21yYyA9IDE3MCwKKwkuYXV0b19jb3JyX21heF9jY2tfbXJjID0gNDAwLAorCS5ucmdfdGhfY2NrID0gOTUsCisJLm5yZ190aF9vZmRtID0gOTUsCit9OworCitzdGF0aWMgY29uc3QgdTggKml3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICBzaXplX3Qgb2Zmc2V0KQoreworCXUzMiBhZGRyZXNzID0gZWVwcm9tX2luZGlyZWN0X2FkZHJlc3MocHJpdiwgb2Zmc2V0KTsKKwlCVUdfT04oYWRkcmVzcyA+PSBwcml2LT5jZmctPmVlcHJvbV9zaXplKTsKKwlyZXR1cm4gJnByaXYtPmVlcHJvbVthZGRyZXNzXTsKK30KKworLyoKKyAqICBDYWxpYnJhdGlvbgorICovCitzdGF0aWMgaW50IGl3bDUwMDBfc2VuZF9YdGFsX2NhbGliKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MTYgKnh0YWxfY2FsaWIgPSAodTE2ICopaXdsX2VlcHJvbV9xdWVyeV9hZGRyKHByaXYsIEVFUFJPTV81MDAwX1hUQUwpOworCisJc3RydWN0IGl3bDUwMDBfY2FsaWJyYXRpb24gY2FsX2NtZCA9IHsKKwkJLm9wX2NvZGUgPSBJV0w1MDAwX1BIWV9DQUxJQlJBVEVfQ1JZU1RBTF9GUlFfQ01ELAorCQkuZGF0YSA9IHsKKwkJCSh1OCl4dGFsX2NhbGliWzBdLAorCQkJKHU4KXh0YWxfY2FsaWJbMV0sCisJCX0KKwl9OworCisJcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKKwkJCQlzaXplb2YoY2FsX2NtZCksICZjYWxfY21kKTsKK30KKworc3RhdGljIGludCBpd2w1MDAwX3NlbmRfY2FsaWJfcmVzdWx0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGhjbWQgPSB7CisJCS5pZCA9IFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCisJCS5tZXRhLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwl9OworCisJaWYgKHByaXYtPmNhbGliX3Jlc3VsdHMubG9fcmVzKSB7CisJCWhjbWQubGVuID0gcHJpdi0+Y2FsaWJfcmVzdWx0cy5sb19yZXNfbGVuOworCQloY21kLmRhdGEgPSBwcml2LT5jYWxpYl9yZXN1bHRzLmxvX3JlczsKKwkJcmV0ID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmhjbWQpOworCisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpZiAocHJpdi0+Y2FsaWJfcmVzdWx0cy50eF9pcV9yZXMpIHsKKwkJaGNtZC5sZW4gPSBwcml2LT5jYWxpYl9yZXN1bHRzLnR4X2lxX3Jlc19sZW47CisJCWhjbWQuZGF0YSA9IHByaXYtPmNhbGliX3Jlc3VsdHMudHhfaXFfcmVzOworCQlyZXQgPSBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmaGNtZCk7CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChwcml2LT5jYWxpYl9yZXN1bHRzLnR4X2lxX3BlcmRfcmVzKSB7CisJCWhjbWQubGVuID0gcHJpdi0+Y2FsaWJfcmVzdWx0cy50eF9pcV9wZXJkX3Jlc19sZW47CisJCWhjbWQuZGF0YSA9IHByaXYtPmNhbGliX3Jlc3VsdHMudHhfaXFfcGVyZF9yZXM7CisJCXJldCA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZoY21kKTsKKworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJSVdMX0VSUk9SKCJFcnJvciAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl3bDUwMDBfc2VuZF9jYWxpYl9jZmcoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2w1MDAwX2NhbGliX2NmZ19jbWQgY2FsaWJfY2ZnX2NtZDsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKKwkJLmlkID0gQ0FMSUJSQVRJT05fQ0ZHX0NNRCwKKwkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsNTAwMF9jYWxpYl9jZmdfY21kKSwKKwkJLmRhdGEgPSAmY2FsaWJfY2ZnX2NtZCwKKwl9OworCisJbWVtc2V0KCZjYWxpYl9jZmdfY21kLCAwLCBzaXplb2YoY2FsaWJfY2ZnX2NtZCkpOworCWNhbGliX2NmZ19jbWQudWNkX2NhbGliX2NmZy5vbmNlLmlzX2VuYWJsZSA9IElXTF9DQUxJQl9JTklUX0NGR19BTEw7CisJY2FsaWJfY2ZnX2NtZC51Y2RfY2FsaWJfY2ZnLm9uY2Uuc3RhcnQgPSBJV0xfQ0FMSUJfSU5JVF9DRkdfQUxMOworCWNhbGliX2NmZ19jbWQudWNkX2NhbGliX2NmZy5vbmNlLnNlbmRfcmVzID0gSVdMX0NBTElCX0lOSVRfQ0ZHX0FMTDsKKwljYWxpYl9jZmdfY21kLnVjZF9jYWxpYl9jZmcuZmxhZ3MgPSBJV0xfQ0FMSUJfSU5JVF9DRkdfQUxMOworCisJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKworc3RhdGljIHZvaWQgaXdsNTAwMF9yeF9jYWxpYl9yZXN1bHQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsNTAwMF9jYWxpYl9oZHIgKmhkciA9IChzdHJ1Y3QgaXdsNTAwMF9jYWxpYl9oZHIgKilwa3QtPnUucmF3OworCWludCBsZW4gPSBsZTMyX3RvX2NwdShwa3QtPmxlbikgJiBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSzsKKworCWl3bF9mcmVlX2NhbGliX3Jlc3VsdHMocHJpdik7CisKKwkvKiByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGxlbmd0aCBmaWVsZCBpdHNlbGYgKi8KKwlsZW4gLT0gNDsKKworCXN3aXRjaCAoaGRyLT5vcF9jb2RlKSB7CisJY2FzZSBJV0w1MDAwX1BIWV9DQUxJQlJBVEVfTE9fQ01EOgorCQlwcml2LT5jYWxpYl9yZXN1bHRzLmxvX3JlcyA9IGt6YWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKKwkJcHJpdi0+Y2FsaWJfcmVzdWx0cy5sb19yZXNfbGVuID0gbGVuOworCQltZW1jcHkocHJpdi0+Y2FsaWJfcmVzdWx0cy5sb19yZXMsIHBrdC0+dS5yYXcsIGxlbik7CisJCWJyZWFrOworCWNhc2UgSVdMNTAwMF9QSFlfQ0FMSUJSQVRFX1RYX0lRX0NNRDoKKwkJcHJpdi0+Y2FsaWJfcmVzdWx0cy50eF9pcV9yZXMgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CisJCXByaXYtPmNhbGliX3Jlc3VsdHMudHhfaXFfcmVzX2xlbiA9IGxlbjsKKwkJbWVtY3B5KHByaXYtPmNhbGliX3Jlc3VsdHMudHhfaXFfcmVzLCBwa3QtPnUucmF3LCBsZW4pOworCQlicmVhazsKKwljYXNlIElXTDUwMDBfUEhZX0NBTElCUkFURV9UWF9JUV9QRVJEX0NNRDoKKwkJcHJpdi0+Y2FsaWJfcmVzdWx0cy50eF9pcV9wZXJkX3JlcyA9IGt6YWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKKwkJcHJpdi0+Y2FsaWJfcmVzdWx0cy50eF9pcV9wZXJkX3Jlc19sZW4gPSBsZW47CisJCW1lbWNweShwcml2LT5jYWxpYl9yZXN1bHRzLnR4X2lxX3BlcmRfcmVzLCBwa3QtPnUucmF3LCBsZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlJV0xfRVJST1IoIlVua25vd24gY2FsaWJyYXRpb24gbm90aWZpY2F0aW9uICVkXG4iLAorCQkJICBoZHItPm9wX2NvZGUpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBpd2w1MDAwX3J4X2NhbGliX2NvbXBsZXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlJV0xfREVCVUdfSU5GTygiSW5pdC4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkLCByZXN0YXJ0aW5nIGZ3LlxuIik7CisJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKK30KKworLyoKKyAqIHVjb2RlCisgKi8KK3N0YXRpYyBpbnQgaXdsNTAwMF9sb2FkX3NlY3Rpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBmd19kZXNjICppbWFnZSwKKwkJCQl1MzIgZHN0X2FkZHIpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRtYV9hZGRyX3QgcGh5X2FkZHIgPSBpbWFnZS0+cF9hZGRyOworCXUzMiBieXRlX2NudCA9IGltYWdlLT5sZW47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJfQorCisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsCisJCUZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKEZIX1NSVkNfQ0hOTCksCisJCUZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfUEFVU0UpOworCisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsCisJCUZIX1NSVkNfQ0hOTF9TUkFNX0FERFJfUkVHKEZIX1NSVkNfQ0hOTCksIGRzdF9hZGRyKTsKKworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LAorCQlGSF9URkRJQl9DVFJMMF9SRUcoRkhfU1JWQ19DSE5MKSwKKwkJcGh5X2FkZHIgJiBGSF9NRU1fVEZESUJfRFJBTV9BRERSX0xTQl9NU0spOworCisJLyogRklNRTogd3JpdGUgdGhlIE1TQiBvZiB0aGUgcGh5X2FkZHIgaW4gQ1RSTDEKKwkgKiBpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwKKwkJSVdMX0ZIX1RGRElCX0NUUkwxX1JFRyhJV0xfRkhfU1JWQ19DSE5MKSwKKwkJKChwaHlfYWRkciAmIE1TQl9NU0spCisJCQk8PCBGSF9NRU1fVEZESUJfUkVHMV9BRERSX0JJVFNISUZUKSB8IGJ5dGVfY291bnQpOworCSAqLworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LAorCQlGSF9URkRJQl9DVFJMMV9SRUcoRkhfU1JWQ19DSE5MKSwgYnl0ZV9jbnQpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LAorCQlGSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUcoRkhfU1JWQ19DSE5MKSwKKwkJMSA8PCBGSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfUE9TX1RCX05VTSB8CisJCTEgPDwgRkhfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHX1BPU19UQl9JRFggfAorCQlGSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfVkFMX1RGREJfVkFMSUQpOworCisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsCisJCUZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKEZIX1NSVkNfQ0hOTCksCisJCUZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFCXwKKwkJRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0RJU0FCTEVfVkFMIHwKKwkJRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfRU5EVEZEKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl3bDUwMDBfbG9hZF9naXZlbl91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCXN0cnVjdCBmd19kZXNjICppbnN0X2ltYWdlLAorCQlzdHJ1Y3QgZndfZGVzYyAqZGF0YV9pbWFnZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKAorCQlwcml2LCBpbnN0X2ltYWdlLCBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCUlXTF9ERUJVR19JTkZPKCJJTlNUIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iKTsKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCisJCQkJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUsIDUgKiBIWik7CisJaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJSVdMX0VSUk9SKCJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCisJCQkidG8gaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKCFyZXQpIHsKKwkJSVdMX0VSUk9SKCJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAwOworCisJcmV0ID0gaXdsNTAwMF9sb2FkX3NlY3Rpb24oCisJCXByaXYsIGRhdGFfaW1hZ2UsIFJUQ19EQVRBX0xPV0VSX0JPVU5EKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJSVdMX0RFQlVHX0lORk8oIkRBVEEgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOworCisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAorCQkJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlLCA1ICogSFopOworCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvbiBkdWUgIgorCQkJInRvIGludGVycnVwdFxuIik7CisJCXJldHVybiByZXQ7CisJfSBlbHNlIGlmICghcmV0KSB7CisJCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIERBVEEgdUNvZGUgc2VjdGlvblxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0gZWxzZQorCQlyZXQgPSAwOworCisJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpd2w1MDAwX2xvYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCisJLyogY2hlY2sgd2hldGhlciBpbml0IHVjb2RlIHNob3VsZCBiZSBsb2FkZWQsIG9yIHJhdGhlciBydW50aW1lIHVjb2RlICovCisJaWYgKHByaXYtPnVjb2RlX2luaXQubGVuICYmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX05PTkUpKSB7CisJCUlXTF9ERUJVR19JTkZPKCJJbml0IHVjb2RlIGZvdW5kLiBMb2FkaW5nIGluaXQgdWNvZGUuLi5cbiIpOworCQlyZXQgPSBpd2w1MDAwX2xvYWRfZ2l2ZW5fdWNvZGUocHJpdiwKKwkJCSZwcml2LT51Y29kZV9pbml0LCAmcHJpdi0+dWNvZGVfaW5pdF9kYXRhKTsKKwkJaWYgKCFyZXQpIHsKKwkJCUlXTF9ERUJVR19JTkZPKCJJbml0IHVjb2RlIGxvYWQgY29tcGxldGUuXG4iKTsKKwkJCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9JTklUOworCQl9CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX0lORk8oIkluaXQgdWNvZGUgbm90IGZvdW5kLCBvciBhbHJlYWR5IGxvYWRlZC4gIgorCQkJIkxvYWRpbmcgcnVudGltZSB1Y29kZS4uLlxuIik7CisJCXJldCA9IGl3bDUwMDBfbG9hZF9naXZlbl91Y29kZShwcml2LAorCQkJJnByaXYtPnVjb2RlX2NvZGUsICZwcml2LT51Y29kZV9kYXRhKTsKKwkJaWYgKCFyZXQpIHsKKwkJCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVjb2RlIGxvYWQgY29tcGxldGUuXG4iKTsKKwkJCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9SVDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGl3bDUwMDBfaW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisKKwkvKiBDaGVjayBhbGl2ZSByZXNwb25zZSBmb3IgInZhbGlkIiBzaWduIGZyb20gdUNvZGUgKi8KKwlpZiAocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CisJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKKwkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KKwkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgQWxpdmUgZmFpbGVkLlxuIik7CisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwkvKiBpbml0aWFsaXplIHVDb2RlIHdhcyBsb2FkZWQuLi4gdmVyaWZ5IGluc3QgaW1hZ2UuCisJICogVGhpcyBpcyBhIHBhcmFub2lkIGNoZWNrLCBiZWNhdXNlIHdlIHdvdWxkIG5vdCBoYXZlIGdvdHRlbiB0aGUKKwkgKiAiaW5pdGlhbGl6ZSIgYWxpdmUgaWYgY29kZSB3ZXJlbid0IHByb3Blcmx5IGxvYWRlZC4gICovCisJaWYgKGl3bF92ZXJpZnlfdWNvZGUocHJpdikpIHsKKwkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdhcyBiYWQ7CisJCSAqIHRha2UgaXQgYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KKwkJSVdMX0RFQlVHX0lORk8oIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7CisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uOiAlZFxuIiwgcmV0KTsKKwkJZ290byByZXN0YXJ0OworCX0KKworCWl3bDUwMDBfc2VuZF9jYWxpYl9jZmcocHJpdik7CisJcmV0dXJuOworCityZXN0YXJ0OgorCS8qIHJlYWwgcmVzdGFydCAoZmlyc3QgbG9hZCBpbml0X3Vjb2RlKSAqLworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Cit9CisKK3N0YXRpYyB2b2lkIGl3bDUwMDBfc2V0X3dyX3B0cnMoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCWludCB0eHFfaWQsIHUzMiBpbmRleCkKK3sKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLAorCQkJKGluZGV4ICYgMHhmZikgfCAodHhxX2lkIDw8IDgpKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w1MF9TQ0RfUVVFVUVfUkRQVFIodHhxX2lkKSwgaW5kZXgpOworfQorCitzdGF0aWMgdm9pZCBpd2w1MDAwX3R4X3F1ZXVlX3NldF9zdGF0dXMoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCisJCQkJCWludCB0eF9maWZvX2lkLCBpbnQgc2NkX3JldHJ5KQoreworCWludCB0eHFfaWQgPSB0eHEtPnEuaWQ7CisJaW50IGFjdGl2ZSA9IHRlc3RfYml0KHR4cV9pZCwgJnByaXYtPnR4cV9jdHhfYWN0aXZlX21zayk/MTowOworCisJaXdsX3dyaXRlX3BycGgocHJpdiwgSVdMNTBfU0NEX1FVRVVFX1NUQVRVU19CSVRTKHR4cV9pZCksCisJCQkoYWN0aXZlIDw8IElXTDUwX1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfQUNUSVZFKSB8CisJCQkodHhfZmlmb19pZCA8PCBJV0w1MF9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1RYRikgfAorCQkJKDEgPDwgSVdMNTBfU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19XU0wpIHwKKwkJCUlXTDUwX1NDRF9RVUVVRV9TVFRTX1JFR19NU0spOworCisJdHhxLT5zY2hlZF9yZXRyeSA9IHNjZF9yZXRyeTsKKworCUlXTF9ERUJVR19JTkZPKCIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKKwkJICAgICAgIGFjdGl2ZSA/ICJBY3RpdmF0ZSIgOiAiRGVhY3RpdmF0ZSIsCisJCSAgICAgICBzY2RfcmV0cnkgPyAiQkEiIDogIkFDIiwgdHhxX2lkLCB0eF9maWZvX2lkKTsKK30KKworc3RhdGljIGludCBpd2w1MDAwX3NlbmRfd2ltYXhfY29leChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF93aW1heF9jb2V4X2NtZCBjb2V4X2NtZDsKKworCW1lbXNldCgmY29leF9jbWQsIDAsIHNpemVvZihjb2V4X2NtZCkpOworCisJcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgQ09FWF9QUklPUklUWV9UQUJMRV9DTUQsCisJCQkJc2l6ZW9mKGNvZXhfY21kKSwgJmNvZXhfY21kKTsKK30KKworc3RhdGljIGludCBpd2w1MDAwX2FsaXZlX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdTMyIGE7CisJaW50IGkgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCX0KKworCXByaXYtPnNjZF9iYXNlX2FkZHIgPSBpd2xfcmVhZF9wcnBoKHByaXYsIElXTDUwX1NDRF9TUkFNX0JBU0VfQUREUik7CisJYSA9IHByaXYtPnNjZF9iYXNlX2FkZHIgKyBJV0w1MF9TQ0RfQ09OVEVYVF9EQVRBX09GRlNFVDsKKwlmb3IgKDsgYSA8IHByaXYtPnNjZF9iYXNlX2FkZHIgKyBJV0w1MF9TQ0RfVFhfU1RUU19CSVRNQVBfT0ZGU0VUOworCQlhICs9IDQpCisJCWl3bF93cml0ZV90YXJnX21lbShwcml2LCBhLCAwKTsKKwlmb3IgKDsgYSA8IHByaXYtPnNjZF9iYXNlX2FkZHIgKyBJV0w1MF9TQ0RfVFJBTlNMQVRFX1RCTF9PRkZTRVQ7CisJCWEgKz0gNCkKKwkJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsIGEsIDApOworCWZvciAoOyBhIDwgc2l6ZW9mKHUxNikgKiBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IGEgKz0gNCkKKwkJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsIGEsIDApOworCisJaXdsX3dyaXRlX3BycGgocHJpdiwgSVdMNTBfU0NEX0RSQU1fQkFTRV9BRERSLAorCQkocHJpdi0+c2hhcmVkX3BoeXMgKworCQkgb2Zmc2V0b2Yoc3RydWN0IGl3bDUwMDBfc2hhcmVkLCBxdWV1ZXNfYnl0ZV9jbnRfdGJscykpID4+IDEwKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w1MF9TQ0RfUVVFVUVDSEFJTl9TRUwsCisJCUlXTDUwX1NDRF9RVUVVRUNIQUlOX1NFTF9BTEwoCisJCQlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0pKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w1MF9TQ0RfQUdHUl9TRUwsIDApOworCisJLyogaW5pdGlhdGUgdGhlIHF1ZXVlcyAqLworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IGkrKykgeworCQlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w1MF9TQ0RfUVVFVUVfUkRQVFIoaSksIDApOworCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLCAwIHwgKGkgPDwgOCkpOworCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwgcHJpdi0+c2NkX2Jhc2VfYWRkciArCisJCQkJSVdMNTBfU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKGkpLCAwKTsKKwkJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsIHByaXYtPnNjZF9iYXNlX2FkZHIgKworCQkJCUlXTDUwX1NDRF9DT05URVhUX1FVRVVFX09GRlNFVChpKSArCisJCQkJc2l6ZW9mKHUzMiksCisJCQkJKChTQ0RfV0lOX1NJWkUgPDwKKwkJCQlJV0w1MF9TQ0RfUVVFVUVfQ1RYX1JFRzJfV0lOX1NJWkVfUE9TKSAmCisJCQkJSVdMNTBfU0NEX1FVRVVFX0NUWF9SRUcyX1dJTl9TSVpFX01TSykgfAorCQkJCSgoU0NEX0ZSQU1FX0xJTUlUIDw8CisJCQkJSVdMNTBfU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX1BPUykgJgorCQkJCUlXTDUwX1NDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9NU0spKTsKKwl9CisKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w1MF9TQ0RfSU5URVJSVVBUX01BU0ssCisJCQlJV0xfTUFTSygwLCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0pKTsKKworCS8qIEFjdGl2YXRlIGFsbCBUeCBETUEvRklGTyBjaGFubmVscyAqLworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9zZXRfc2NoZWQocHJpdiwgSVdMX01BU0soMCwgNykpOworCisJaXdsNTAwMF9zZXRfd3JfcHRycyhwcml2LCBJV0xfQ01EX1FVRVVFX05VTSwgMCk7CisJLyogbWFwIHFvcyBxdWV1ZXMgdG8gZmlmb3Mgb25lLXRvLW9uZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGl3bDUwMDBfZGVmYXVsdF9xdWV1ZV90b190eF9maWZvKTsgaSsrKSB7CisJCWludCBhYyA9IGl3bDUwMDBfZGVmYXVsdF9xdWV1ZV90b190eF9maWZvW2ldOworCQlpd2xfdHhxX2N0eF9hY3RpdmF0ZShwcml2LCBpKTsKKwkJaXdsNTAwMF90eF9xdWV1ZV9zZXRfc3RhdHVzKHByaXYsICZwcml2LT50eHFbaV0sIGFjLCAwKTsKKwl9CisJLyogVE9ETyAtIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aG9zZSBGSUZPcyBpbnNpZGUgdGhlIGxvb3AgYWJvdmUsCisJICogbm90IG9ubHkgbWFyayB0aGVtIGFzIGFjdGl2ZSAqLworCWl3bF90eHFfY3R4X2FjdGl2YXRlKHByaXYsIDQpOworCWl3bF90eHFfY3R4X2FjdGl2YXRlKHByaXYsIDcpOworCWl3bF90eHFfY3R4X2FjdGl2YXRlKHByaXYsIDgpOworCWl3bF90eHFfY3R4X2FjdGl2YXRlKHByaXYsIDkpOworCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKworCWl3bDUwMDBfc2VuZF93aW1heF9jb2V4KHByaXYpOworCisJaXdsNTAwMF9zZW5kX1h0YWxfY2FsaWIocHJpdik7CisKKwlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9SVCkKKwkJaXdsNTAwMF9zZW5kX2NhbGliX3Jlc3VsdHMocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd2w1MDAwX2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmICgocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzID4gSVdMNTBfTlVNX1FVRVVFUykgfHwKKwkgICAgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8IElXTF9NSU5fTlVNX1FVRVVFUykpIHsKKwkJSVdMX0VSUk9SKCJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKKwkJCSAgSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w1MF9OVU1fUVVFVUVTKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtID0gcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzOworCXByaXYtPmh3X3BhcmFtcy5maXJzdF9hbXBkdV9xID0gSVdMNTBfRklSU1RfQU1QRFVfUVVFVUU7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9ucyA9IElXTDUwMDBfU1RBVElPTl9DT1VOVDsKKwlwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkID0gSVdMNTAwMF9CUk9BRENBU1RfSUQ7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUgPSBJV0w1MF9SVENfREFUQV9TSVpFOworCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNTBfUlRDX0lOU1RfU0laRTsKKwlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gMDsKKwlwcml2LT5od19wYXJhbXMuZmF0X2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKKwkJCQkJQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOworCXByaXYtPmh3X3BhcmFtcy5zZW5zID0gJml3bDUwMDBfc2Vuc2l0aXZpdHk7CisKKwlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKKwljYXNlIENTUl9IV19SRVZfVFlQRV81MTAwOgorCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxNTA6CisJCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gMTsKKwkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOworCQkvKiBGSVhNRTogbW92ZSB0byBBTlRfQSwgQU5UX0IsIEFOVF9DIGVudW0gKi8KKwkJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCA9IEFOVF9BOworCQlwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50ID0gQU5UX0FCOworCQlicmVhazsKKwljYXNlIENTUl9IV19SRVZfVFlQRV81MzAwOgorCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6CisJCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gMzsKKwkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAzOworCQlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gQU5UX0FCQzsKKwkJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA9IEFOVF9BQkM7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgeworCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxMDA6CisJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTMwMDoKKwkJLyogNVgwMCB3YW50cyBpbiBDZWxzaXVzICovCisJCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9IENUX0tJTExfVEhSRVNIT0xEOworCQlicmVhazsKKwljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgorCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6CisJCS8qIDVYNTAgd2FudHMgaW4gS2VsdmluICovCisJCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9CisJCQkJQ0VMU0lVU19UT19LRUxWSU4oQ1RfS0lMTF9USFJFU0hPTEQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd2w1MDAwX2FsbG9jX3NoYXJlZF9tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXByaXYtPnNoYXJlZF92aXJ0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpd2w1MDAwX3NoYXJlZCksCisJCQkJCSZwcml2LT5zaGFyZWRfcGh5cyk7CisJaWYgKCFwcml2LT5zaGFyZWRfdmlydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQocHJpdi0+c2hhcmVkX3ZpcnQsIDAsIHNpemVvZihzdHJ1Y3QgaXdsNTAwMF9zaGFyZWQpKTsKKworCXByaXYtPnJiX2Nsb3NlZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaXdsNTAwMF9zaGFyZWQsIHJiX2Nsb3NlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXdsNTAwMF9mcmVlX3NoYXJlZF9tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmIChwcml2LT5zaGFyZWRfdmlydCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGl3bDUwMDBfc2hhcmVkKSwKKwkJCQkgICAgcHJpdi0+c2hhcmVkX3ZpcnQsCisJCQkJICAgIHByaXYtPnNoYXJlZF9waHlzKTsKK30KKworc3RhdGljIGludCBpd2w1MDAwX3NoYXJlZF9tZW1fcnhfaWR4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsNTAwMF9zaGFyZWQgKnMgPSBwcml2LT5zaGFyZWRfdmlydDsKKwlyZXR1cm4gbGUzMl90b19jcHUocy0+cmJfY2xvc2VkKSAmIDB4RkZGOworfQorCisvKioKKyAqIGl3bDUwMDBfdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgLSBTZXQgdXAgZW50cnkgaW4gVHggYnl0ZS1jb3VudCBhcnJheQorICovCitzdGF0aWMgdm9pZCBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkJICAgIHUxNiBieXRlX2NudCkKK3sKKwlzdHJ1Y3QgaXdsNTAwMF9zaGFyZWQgKnNoYXJlZF9kYXRhID0gcHJpdi0+c2hhcmVkX3ZpcnQ7CisJaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKKwl1OCBzZWNfY3RsID0gMDsKKwl1OCBzdGEgPSAwOworCWludCBsZW47CisKKwlsZW4gPSBieXRlX2NudCArIElXTF9UWF9DUkNfU0laRSArIElXTF9UWF9ERUxJTUlURVJfU0laRTsKKworCWlmICh0eHFfaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pIHsKKwkJc3RhID0gdHhxLT5jbWRbdHhxLT5xLndyaXRlX3B0cl0uY21kLnR4LnN0YV9pZDsKKwkJc2VjX2N0bCA9IHR4cS0+Y21kW3R4cS0+cS53cml0ZV9wdHJdLmNtZC50eC5zZWNfY3RsOworCisJCXN3aXRjaCAoc2VjX2N0bCAmIFRYX0NNRF9TRUNfTVNLKSB7CisJCWNhc2UgVFhfQ01EX1NFQ19DQ006CisJCQlsZW4gKz0gQ0NNUF9NSUNfTEVOOworCQkJYnJlYWs7CisJCWNhc2UgVFhfQ01EX1NFQ19US0lQOgorCQkJbGVuICs9IFRLSVBfSUNWX0xFTjsKKwkJCWJyZWFrOworCQljYXNlIFRYX0NNRF9TRUNfV0VQOgorCQkJbGVuICs9IFdFUF9JVl9MRU4gKyBXRVBfSUNWX0xFTjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJSVdMX1NFVF9CSVRTMTYoc2hhcmVkX2RhdGEtPnF1ZXVlc19ieXRlX2NudF90YmxzW3R4cV9pZF0uCisJCSAgICAgICB0ZmRfb2Zmc2V0W3R4cS0+cS53cml0ZV9wdHJdLCBieXRlX2NudCwgbGVuKTsKKworCUlXTF9TRVRfQklUUzE2KHNoYXJlZF9kYXRhLT5xdWV1ZXNfYnl0ZV9jbnRfdGJsc1t0eHFfaWRdLgorCQkgICAgICAgdGZkX29mZnNldFt0eHEtPnEud3JpdGVfcHRyXSwgc3RhX2lkLCBzdGEpOworCisJaWYgKHR4cS0+cS53cml0ZV9wdHIgPCBJV0w1MF9NQVhfV0lOX1NJWkUpIHsKKwkJSVdMX1NFVF9CSVRTMTYoc2hhcmVkX2RhdGEtPnF1ZXVlc19ieXRlX2NudF90YmxzW3R4cV9pZF0uCisJCQl0ZmRfb2Zmc2V0W0lXTDUwX1FVRVVFX1NJWkUgKyB0eHEtPnEud3JpdGVfcHRyXSwKKwkJCWJ5dGVfY250LCBsZW4pOworCQlJV0xfU0VUX0JJVFMxNihzaGFyZWRfZGF0YS0+cXVldWVzX2J5dGVfY250X3RibHNbdHhxX2lkXS4KKwkJCXRmZF9vZmZzZXRbSVdMNTBfUVVFVUVfU0laRSArIHR4cS0+cS53cml0ZV9wdHJdLAorCQkJc3RhX2lkLCBzdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQoreworCWludCB0eHFfaWQgPSB0eHEtPnEuaWQ7CisJc3RydWN0IGl3bDUwMDBfc2hhcmVkICpzaGFyZWRfZGF0YSA9IHByaXYtPnNoYXJlZF92aXJ0OworCXU4IHN0YSA9IDA7CisKKwlpZiAodHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKQorCQlzdGEgPSB0eHEtPmNtZFt0eHEtPnEucmVhZF9wdHJdLmNtZC50eC5zdGFfaWQ7CisKKwlzaGFyZWRfZGF0YS0+cXVldWVzX2J5dGVfY250X3RibHNbdHhxX2lkXS50ZmRfb2Zmc2V0W3R4cS0+cS5yZWFkX3B0cl0uCisJCQkJCXZhbCA9IGNwdV90b19sZTE2KDEgfCAoc3RhIDw8IDEyKSk7CisKKwlpZiAodHhxLT5xLndyaXRlX3B0ciA8IElXTDUwX01BWF9XSU5fU0laRSkgeworCQlzaGFyZWRfZGF0YS0+cXVldWVzX2J5dGVfY250X3RibHNbdHhxX2lkXS4KKwkJCXRmZF9vZmZzZXRbSVdMNTBfUVVFVUVfU0laRSArIHR4cS0+cS5yZWFkX3B0cl0uCisJCQkJdmFsID0gY3B1X3RvX2xlMTYoMSB8IChzdGEgPDwgMTIpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXdsNTAwMF90eF9xdWV1ZV9zZXRfcTJyYXRpZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiByYV90aWQsCisJCQkJCXUxNiB0eHFfaWQpCit7CisJdTMyIHRibF9kd19hZGRyOworCXUzMiB0YmxfZHc7CisJdTE2IHNjZF9xMnJhdGlkOworCisJc2NkX3EycmF0aWQgPSByYV90aWQgJiBJV0xfU0NEX1FVRVVFX1JBX1RJRF9NQVBfUkFUSURfTVNLOworCisJdGJsX2R3X2FkZHIgPSBwcml2LT5zY2RfYmFzZV9hZGRyICsKKwkJCUlXTDUwX1NDRF9UUkFOU0xBVEVfVEJMX09GRlNFVF9RVUVVRSh0eHFfaWQpOworCisJdGJsX2R3ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgdGJsX2R3X2FkZHIpOworCisJaWYgKHR4cV9pZCAmIDB4MSkKKwkJdGJsX2R3ID0gKHNjZF9xMnJhdGlkIDw8IDE2KSB8ICh0YmxfZHcgJiAweDAwMDBGRkZGKTsKKwllbHNlCisJCXRibF9kdyA9IHNjZF9xMnJhdGlkIHwgKHRibF9kdyAmIDB4RkZGRjAwMDApOworCisJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsIHRibF9kd19hZGRyLCB0YmxfZHcpOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBpd2w1MDAwX3R4X3F1ZXVlX3N0b3Bfc2NoZWR1bGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IHR4cV9pZCkKK3sKKwkvKiBTaW1wbHkgc3RvcCB0aGUgcXVldWUsIGJ1dCBkb24ndCBjaGFuZ2UgYW55IGNvbmZpZ3VyYXRpb247CisJICogdGhlIFNDRF9BQ1RfRU4gYml0IGlzIHRoZSB3cml0ZS1lbmFibGUgbWFzayBmb3IgdGhlIEFDVElWRSBiaXQuICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwKKwkJSVdMNTBfU0NEX1FVRVVFX1NUQVRVU19CSVRTKHR4cV9pZCksCisJCSgwIDw8IElXTDUwX1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfQUNUSVZFKXwKKwkJKDEgPDwgSVdMNTBfU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19TQ0RfQUNUX0VOKSk7Cit9CisKK3N0YXRpYyBpbnQgaXdsNTAwMF90eHFfYWdnX2VuYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsCisJCQkJICBpbnQgdHhfZmlmbywgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbl9pZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCXUxNiByYV90aWQ7CisKKwlpZiAoKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFID4gdHhxX2lkKSB8fAorCSAgICAoSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w1MF9OVU1fQU1QRFVfUVVFVUVTIDw9IHR4cV9pZCkpIHsKKwkJSVdMX1dBUk5JTkcoInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAorCQkJdHhxX2lkLCBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSwKKwkJCUlXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyAtIDEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyYV90aWQgPSBCVUlMRF9SQXhUSUQoc3RhX2lkLCB0aWQpOworCisJLyogTW9kaWZ5IGRldmljZSdzIHN0YXRpb24gdGFibGUgdG8gVHggdGhpcyBUSUQgKi8KKwlpd2xfc3RhX21vZGlmeV9lbmFibGVfdGlkX3R4KHByaXYsIHN0YV9pZCwgdGlkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBTdG9wIHRoaXMgVHggcXVldWUgYmVmb3JlIGNvbmZpZ3VyaW5nIGl0ICovCisJaXdsNTAwMF90eF9xdWV1ZV9zdG9wX3NjaGVkdWxlcihwcml2LCB0eHFfaWQpOworCisJLyogTWFwIHJlY2VpdmVyLWFkZHJlc3MgLyB0cmFmZmljLUlEIHRvIHRoaXMgcXVldWUgKi8KKwlpd2w1MDAwX3R4X3F1ZXVlX3NldF9xMnJhdGlkKHByaXYsIHJhX3RpZCwgdHhxX2lkKTsKKworCS8qIFNldCB0aGlzIHF1ZXVlIGFzIGEgY2hhaW4tYnVpbGRpbmcgcXVldWUgKi8KKwlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBJV0w1MF9TQ0RfUVVFVUVDSEFJTl9TRUwsICgxPDx0eHFfaWQpKTsKKworCS8qIGVuYWJsZSBhZ2dyZWdhdGlvbnMgZm9yIHRoZSBxdWV1ZSAqLworCWl3bF9zZXRfYml0c19wcnBoKHByaXYsIElXTDUwX1NDRF9BR0dSX1NFTCwgKDE8PHR4cV9pZCkpOworCisJLyogUGxhY2UgZmlyc3QgVEZEIGF0IGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gc3RhcnQgc2VxdWVuY2UgbnVtYmVyLgorCSAqIEFzc3VtZXMgdGhhdCBzc25faWR4IGlzIHZhbGlkICghPSAweEZGRikgKi8KKwlwcml2LT50eHFbdHhxX2lkXS5xLnJlYWRfcHRyID0gKHNzbl9pZHggJiAweGZmKTsKKwlwcml2LT50eHFbdHhxX2lkXS5xLndyaXRlX3B0ciA9IChzc25faWR4ICYgMHhmZik7CisJaXdsNTAwMF9zZXRfd3JfcHRycyhwcml2LCB0eHFfaWQsIHNzbl9pZHgpOworCisJLyogU2V0IHVwIFR4IHdpbmRvdyBzaXplIGFuZCBmcmFtZSBsaW1pdCBmb3IgdGhpcyBxdWV1ZSAqLworCWl3bF93cml0ZV90YXJnX21lbShwcml2LCBwcml2LT5zY2RfYmFzZV9hZGRyICsKKwkJCUlXTDUwX1NDRF9DT05URVhUX1FVRVVFX09GRlNFVCh0eHFfaWQpICsKKwkJCXNpemVvZih1MzIpLAorCQkJKChTQ0RfV0lOX1NJWkUgPDwKKwkJCUlXTDUwX1NDRF9RVUVVRV9DVFhfUkVHMl9XSU5fU0laRV9QT1MpICYKKwkJCUlXTDUwX1NDRF9RVUVVRV9DVFhfUkVHMl9XSU5fU0laRV9NU0spIHwKKwkJCSgoU0NEX0ZSQU1FX0xJTUlUIDw8CisJCQlJV0w1MF9TQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfUE9TKSAmCisJCQlJV0w1MF9TQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfTVNLKSk7CisKKwlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBJV0w1MF9TQ0RfSU5URVJSVVBUX01BU0ssICgxIDw8IHR4cV9pZCkpOworCisJLyogU2V0IHVwIFN0YXR1cyBhcmVhIGluIFNSQU0sIG1hcCB0byBUeCBETUEvRklGTywgYWN0aXZhdGUgdGhlIHF1ZXVlICovCisJaXdsNTAwMF90eF9xdWV1ZV9zZXRfc3RhdHVzKHByaXYsICZwcml2LT50eHFbdHhxX2lkXSwgdHhfZmlmbywgMSk7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IHR4cV9pZCwKKwkJCQkgICB1MTYgc3NuX2lkeCwgdTggdHhfZmlmbykKK3sKKwlpbnQgcmV0OworCisJaWYgKChJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKKwkgICAgKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7CisJCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJCXR4cV9pZCwgSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUsCisJCQlJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDUwX05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaXdsNTAwMF90eF9xdWV1ZV9zdG9wX3NjaGVkdWxlcihwcml2LCB0eHFfaWQpOworCisJaXdsX2NsZWFyX2JpdHNfcHJwaChwcml2LCBJV0w1MF9TQ0RfQUdHUl9TRUwsICgxIDw8IHR4cV9pZCkpOworCisJcHJpdi0+dHhxW3R4cV9pZF0ucS5yZWFkX3B0ciA9IChzc25faWR4ICYgMHhmZik7CisJcHJpdi0+dHhxW3R4cV9pZF0ucS53cml0ZV9wdHIgPSAoc3NuX2lkeCAmIDB4ZmYpOworCS8qIHN1cHBvc2VzIHRoYXQgc3NuX2lkeCBpcyB2YWxpZCAoIT0gMHhGRkYpICovCisJaXdsNTAwMF9zZXRfd3JfcHRycyhwcml2LCB0eHFfaWQsIHNzbl9pZHgpOworCisJaXdsX2NsZWFyX2JpdHNfcHJwaChwcml2LCBJV0w1MF9TQ0RfSU5URVJSVVBUX01BU0ssICgxIDw8IHR4cV9pZCkpOworCWl3bF90eHFfY3R4X2RlYWN0aXZhdGUocHJpdiwgdHhxX2lkKTsKKwlpd2w1MDAwX3R4X3F1ZXVlX3NldF9zdGF0dXMocHJpdiwgJnByaXYtPnR4cVt0eHFfaWRdLCB0eF9maWZvLCAwKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUxNiBpd2w1MDAwX2J1aWxkX2FkZHN0YV9oY21kKGNvbnN0IHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqY21kLCB1OCAqZGF0YSkKK3sKKwl1MTYgc2l6ZSA9ICh1MTYpc2l6ZW9mKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCk7CisJbWVtY3B5KGRhdGEsIGNtZCwgc2l6ZSk7CisJcmV0dXJuIHNpemU7Cit9CisKKworLyoKKyAqIEFjdGl2YXRlL0RlYWN0aXZhdCBUeCBETUEvRklGTyBjaGFubmVscyBhY2NvcmRpbmcgdHggZmlmb3MgbWFzaworICogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcHJpdi0+bG9jayBhbmQgbWFjIGFjY2VzcworICovCitzdGF0aWMgdm9pZCBpd2w1MDAwX3R4cV9zZXRfc2NoZWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgbWFzaykKK3sKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w1MF9TQ0RfVFhGQUNULCBtYXNrKTsKK30KKworCitzdGF0aWMgaW5saW5lIHUzMiBpd2w1MDAwX2dldF9zY2Rfc3NuKHN0cnVjdCBpd2w1MDAwX3R4X3Jlc3AgKnR4X3Jlc3ApCit7CisJcmV0dXJuIGxlMzJfdG9fY3B1cCgoX19sZTMyKikmdHhfcmVzcC0+c3RhdHVzICsKKwkJCSAgICB0eF9yZXNwLT5mcmFtZV9jb3VudCkgJiBNQVhfU047Cit9CisKK3N0YXRpYyBpbnQgaXdsNTAwMF90eF9zdGF0dXNfcmVwbHlfdHgoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCBpd2xfaHRfYWdnICphZ2csCisJCQkJICAgICAgc3RydWN0IGl3bDUwMDBfdHhfcmVzcCAqdHhfcmVzcCwKKwkJCQkgICAgICBpbnQgdHhxX2lkLCB1MTYgc3RhcnRfaWR4KQoreworCXUxNiBzdGF0dXM7CisJc3RydWN0IGFnZ190eF9zdGF0dXMgKmZyYW1lX3N0YXR1cyA9ICZ0eF9yZXNwLT5zdGF0dXM7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gTlVMTDsKKwl1MzIgcmF0ZV9uX2ZsYWdzID0gbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKTsKKwlpbnQgaSwgc2gsIGlkeDsKKwl1MTYgc2VxOworCisJaWYgKGFnZy0+d2FpdF9mb3JfYmEpCisJCUlXTF9ERUJVR19UWF9SRVBMWSgiZ290IHR4IHJlc3BvbnNlIHcvbyBibG9jay1hY2tcbiIpOworCisJYWdnLT5mcmFtZV9jb3VudCA9IHR4X3Jlc3AtPmZyYW1lX2NvdW50OworCWFnZy0+c3RhcnRfaWR4ID0gc3RhcnRfaWR4OworCWFnZy0+cmF0ZV9uX2ZsYWdzID0gcmF0ZV9uX2ZsYWdzOworCWFnZy0+Yml0bWFwID0gMDsKKworCS8qICMgZnJhbWVzIGF0dGVtcHRlZCBieSBUeCBjb21tYW5kICovCisJaWYgKGFnZy0+ZnJhbWVfY291bnQgPT0gMSkgeworCQkvKiBPbmx5IG9uZSBmcmFtZSB3YXMgYXR0ZW1wdGVkOyBubyBibG9jay1hY2sgd2lsbCBhcnJpdmUgKi8KKwkJc3RhdHVzID0gbGUxNl90b19jcHUoZnJhbWVfc3RhdHVzWzBdLnN0YXR1cyk7CisJCWlkeCA9IHN0YXJ0X2lkeDsKKworCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uICovCisJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgU3RhcnRJZHg9JWQgaWR4PSVkXG4iLAorCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LCBpZHgpOworCisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHByaXYtPnR4cVt0eHFfaWRdLnR4YltpZHhdLnNrYlswXSk7CisJCWluZm8tPnN0YXR1cy5yZXRyeV9jb3VudCA9IHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWU7CisJCWluZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfQ1RMX0FNUERVOworCQlpbmZvLT5mbGFncyB8PSBpd2xfaXNfdHhfc3VjY2VzcyhzdGF0dXMpPworCQkJSUVFRTgwMjExX1RYX1NUQVRfQUNLIDogMDsKKwkJaXdsX2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIHJhdGVfbl9mbGFncywgaW5mbyk7CisKKwkJLyogRklYTUU6IGNvZGUgcmVwZXRpdGlvbiBlbmQgKi8KKworCQlJV0xfREVCVUdfVFhfUkVQTFkoIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKKwkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7CisJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKworCQlhZ2ctPndhaXRfZm9yX2JhID0gMDsKKwl9IGVsc2UgeworCQkvKiBUd28gb3IgbW9yZSBmcmFtZXMgd2VyZSBhdHRlbXB0ZWQ7IGV4cGVjdCBibG9jay1hY2sgKi8KKwkJdTY0IGJpdG1hcCA9IDA7CisJCWludCBzdGFydCA9IGFnZy0+c3RhcnRfaWR4OworCisJCS8qIENvbnN0cnVjdCBiaXQtbWFwIG9mIHBlbmRpbmcgZnJhbWVzIHdpdGhpbiBUeCB3aW5kb3cgKi8KKwkJZm9yIChpID0gMDsgaSA8IGFnZy0+ZnJhbWVfY291bnQ7IGkrKykgeworCQkJdTE2IHNjOworCQkJc3RhdHVzID0gbGUxNl90b19jcHUoZnJhbWVfc3RhdHVzW2ldLnN0YXR1cyk7CisJCQlzZXEgID0gbGUxNl90b19jcHUoZnJhbWVfc3RhdHVzW2ldLnNlcXVlbmNlKTsKKwkJCWlkeCA9IFNFUV9UT19JTkRFWChzZXEpOworCQkJdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcSk7CisKKwkJCWlmIChzdGF0dXMgJiAoQUdHX1RYX1NUQVRFX0ZFV19CWVRFU19NU0sgfAorCQkJCSAgICAgIEFHR19UWF9TVEFURV9BQk9SVF9NU0spKQorCQkJCWNvbnRpbnVlOworCisJCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lQ250ID0gJWQsIHR4cV9pZD0lZCBpZHg9JWRcbiIsCisJCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIHR4cV9pZCwgaWR4KTsKKworCQkJaGRyID0gaXdsX3R4X3F1ZXVlX2dldF9oZHIocHJpdiwgdHhxX2lkLCBpZHgpOworCisJCQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOworCQkJaWYgKGlkeCAhPSAoU0VRX1RPX1NOKHNjKSAmIDB4ZmYpKSB7CisJCQkJSVdMX0VSUk9SKCJCVUdfT04gaWR4IGRvZXNuJ3QgbWF0Y2ggc2VxIGNvbnRyb2wiCisJCQkJCSAgIiBpZHg9JWQsIHNlcV9pZHg9JWQsIHNlcT0lZFxuIiwKKwkJCQkJICBpZHgsIFNFUV9UT19TTihzYyksCisJCQkJCSAgaGRyLT5zZXFfY3RybCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CisKKwkJCXNoID0gaWR4IC0gc3RhcnQ7CisJCQlpZiAoc2ggPiA2NCkgeworCQkJCXNoID0gKHN0YXJ0IC0gaWR4KSArIDB4ZmY7CisJCQkJYml0bWFwID0gYml0bWFwIDw8IHNoOworCQkJCXNoID0gMDsKKwkJCQlzdGFydCA9IGlkeDsKKwkJCX0gZWxzZSBpZiAoc2ggPCAtNjQpCisJCQkJc2ggID0gMHhmZiAtIChzdGFydCAtIGlkeCk7CisJCQllbHNlIGlmIChzaCA8IDApIHsKKwkJCQlzaCA9IHN0YXJ0IC0gaWR4OworCQkJCXN0YXJ0ID0gaWR4OworCQkJCWJpdG1hcCA9IGJpdG1hcCA8PCBzaDsKKwkJCQlzaCA9IDA7CisJCQl9CisJCQliaXRtYXAgfD0gKDEgPDwgc2gpOworCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJzdGFydD0lZCBiaXRtYXA9MHgleFxuIiwKKwkJCQkJICAgc3RhcnQsICh1MzIpKGJpdG1hcCAmIDB4RkZGRkZGRkYpKTsKKwkJfQorCisJCWFnZy0+Yml0bWFwID0gYml0bWFwOworCQlhZ2ctPnN0YXJ0X2lkeCA9IHN0YXJ0OworCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lcyAlZCBzdGFydF9pZHg9JWQgYml0bWFwPTB4JWxseFxuIiwKKwkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWFnZy0+Yml0bWFwKTsKKworCQlpZiAoYml0bWFwKQorCQkJYWdnLT53YWl0X2Zvcl9iYSA9IDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpd2w1MDAwX3J4X3JlcGx5X3R4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJdTE2IHNlcXVlbmNlID0gbGUxNl90b19jcHUocGt0LT5oZHIuc2VxdWVuY2UpOworCWludCB0eHFfaWQgPSBTRVFfVE9fUVVFVUUoc2VxdWVuY2UpOworCWludCBpbmRleCA9IFNFUV9UT19JTkRFWChzZXF1ZW5jZSk7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaXdsNTAwMF90eF9yZXNwICp0eF9yZXNwID0gKHZvaWQgKikmcGt0LT51LnJhd1swXTsKKwl1MzIgIHN0YXR1cyA9IGxlMTZfdG9fY3B1KHR4X3Jlc3AtPnN0YXR1cy5zdGF0dXMpOworCWludCB0aWQgPSBNQVhfVElEX0NPVU5ULCBzdGFfaWQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJdTggKnFjID0gTlVMTDsKKworCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKKwkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAorCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCisJCQkgIHR4cS0+cS5yZWFkX3B0cik7CisJCXJldHVybjsKKwl9CisKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXSk7CisJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKworCWhkciA9IGl3bF90eF9xdWV1ZV9nZXRfaGRyKHByaXYsIHR4cV9pZCwgaW5kZXgpOworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOworCQl0aWQgPSBxY1swXSAmIDB4ZjsKKwl9CisKKwlzdGFfaWQgPSBpd2xfZ2V0X3JhX3N0YV9pZChwcml2LCBoZHIpOworCWlmICh0eHEtPnNjaGVkX3JldHJ5ICYmIHVubGlrZWx5KHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkgeworCQlJV0xfRVJST1IoIlN0YXRpb24gbm90IGtub3duXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh0eHEtPnNjaGVkX3JldHJ5KSB7CisJCWNvbnN0IHUzMiBzY2Rfc3NuID0gaXdsNTAwMF9nZXRfc2NkX3Nzbih0eF9yZXNwKTsKKwkJc3RydWN0IGl3bF9odF9hZ2cgKmFnZyA9IE5VTEw7CisKKwkJaWYgKCFxYykKKwkJCXJldHVybjsKKworCQlhZ2cgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2c7CisKKwkJaXdsNTAwMF90eF9zdGF0dXNfcmVwbHlfdHgocHJpdiwgYWdnLCB0eF9yZXNwLCB0eHFfaWQsIGluZGV4KTsKKworCQkvKiBjaGVjayBpZiBCQVIgaXMgbmVlZGVkICovCisJCWlmICgodHhfcmVzcC0+ZnJhbWVfY291bnQgPT0gMSkgJiYgIWl3bF9pc190eF9zdWNjZXNzKHN0YXR1cykpCisJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLOworCisJCWlmICh0eHEtPnEucmVhZF9wdHIgIT0gKHNjZF9zc24gJiAweGZmKSkgeworCQkJaW50IGZyZWVkLCBhbXBkdV9xOworCQkJaW5kZXggPSBpd2xfcXVldWVfZGVjX3dyYXAoc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKKwkJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gc2NkX3NzbiAiCisJCQkJCSAgICIlZCBpbmRleCAlZFxuIiwgc2NkX3NzbiAsIGluZGV4KTsKKwkJCWZyZWVkID0gaXdsX3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7CisJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CisKKwkJCWlmIChpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmsgJiYKKwkJCSAgICB0eHFfaWQgPj0gMCAmJiBwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCisJCQkgICAgYWdnLT5zdGF0ZSAhPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfREVMQkEpIHsKKwkJCQkvKiBjYWxjdWxhdGUgbWFjODAyMTEgYW1wZHUgc3cgcXVldWUgdG8gd2FrZSAqLworCQkJCWFtcGR1X3EgPSB0eHFfaWQgLSBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSArCisJCQkJCSAgcHJpdi0+aHctPnF1ZXVlczsKKwkJCQlpZiAoYWdnLT5zdGF0ZSA9PSBJV0xfQUdHX09GRikKKwkJCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCQkJZWxzZQorCQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgYW1wZHVfcSk7CisJCQl9CisJCQlpd2xfdHhxX2NoZWNrX2VtcHR5KHByaXYsIHN0YV9pZCwgdGlkLCB0eHFfaWQpOworCQl9CisJfSBlbHNlIHsKKwkJaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50ID0gdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZTsKKwkJaW5mby0+ZmxhZ3MgPQorCQkJaXdsX2lzX3R4X3N1Y2Nlc3Moc3RhdHVzKSA/IElFRUU4MDIxMV9UWF9TVEFUX0FDSyA6IDA7CisJCWl3bF9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LAorCQkJCQlsZTMyX3RvX2NwdSh0eF9yZXNwLT5yYXRlX25fZmxhZ3MpLAorCQkJCQlpbmZvKTsKKworCQlJV0xfREVCVUdfVFgoIlR4IHF1ZXVlICVkIFN0YXR1cyAlcyAoMHglMDh4KSByYXRlX25fZmxhZ3MgIgorCQkJICAgICAiMHgleCByZXRyaWVzICVkXG4iLCB0eHFfaWQsCisJCQkJaXdsX2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLAorCQkJCXN0YXR1cywgbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKSwKKwkJCQl0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKKworCQlJV0xfREVCVUdfVFhfUkVQTFkoIlR4IHF1ZXVlIHJlY2xhaW0gJWRcbiIsIGluZGV4KTsKKwkJaWYgKGluZGV4ICE9IC0xKSB7CisJCSAgICBpbnQgZnJlZWQgPSBpd2xfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKKwkJICAgIGlmICh0aWQgIT0gTUFYX1RJRF9DT1VOVCkKKwkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSAtPSBmcmVlZDsKKwkJICAgIGlmIChpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmsgJiYKKwkJCSh0eHFfaWQgPj0gMCkgJiYgcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCB0eHFfaWQpOworCQkgICAgaWYgKHRpZCAhPSBNQVhfVElEX0NPVU5UKQorCQkJaXdsX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKKwkJfQorCX0KKworCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCisJCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7Cit9CisKKy8qIEN1cnJlbnRseSA1MDAwIGlzIHRoZSBzdXBwZXJzZXQgb2YgZXZlcnl0aGluZyAqLworc3RhdGljIHUxNiBpd2w1MDAwX2dldF9oY21kX3NpemUodTggY21kX2lkLCB1MTYgbGVuKQoreworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkIGl3bDUwMDBfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJLyogaW4gNTAwMCB0aGUgdHggcG93ZXIgY2FsaWJyYXRpb24gaXMgZG9uZSBpbiB1Q29kZSAqLworCXByaXYtPmRpc2FibGVfdHhfcG93ZXJfY2FsID0gMTsKK30KKworc3RhdGljIHZvaWQgaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwkvKiBpbml0IGNhbGlicmF0aW9uIGhhbmRsZXJzICovCisJcHJpdi0+cnhfaGFuZGxlcnNbQ0FMSUJSQVRJT05fUkVTX05PVElGSUNBVElPTl0gPQorCQkJCQlpd2w1MDAwX3J4X2NhbGliX3Jlc3VsdDsKKwlwcml2LT5yeF9oYW5kbGVyc1tDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT05dID0KKwkJCQkJaXdsNTAwMF9yeF9jYWxpYl9jb21wbGV0ZTsKKwlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9UWF0gPSBpd2w1MDAwX3J4X3JlcGx5X3R4OworfQorCisKK3N0YXRpYyBpbnQgaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyKHUzMiBhZGRyKQoreworCXJldHVybiAoYWRkciA+PSBSVENfREFUQV9MT1dFUl9CT1VORCkgJiYKKwkJKGFkZHIgPCBJV0w1MF9SVENfREFUQV9VUFBFUl9CT1VORCk7Cit9CisKK3N0YXRpYyBpbnQgaXdsNTAwMF9zZW5kX3J4b25fYXNzb2Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpd2w1MDAwX3J4b25fYXNzb2NfY21kIHJ4b25fYXNzb2M7CisJY29uc3Qgc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbjEgPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCWNvbnN0IHN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24yID0gJnByaXYtPmFjdGl2ZV9yeG9uOworCisJaWYgKChyeG9uMS0+ZmxhZ3MgPT0gcnhvbjItPmZsYWdzKSAmJgorCSAgICAocnhvbjEtPmZpbHRlcl9mbGFncyA9PSByeG9uMi0+ZmlsdGVyX2ZsYWdzKSAmJgorCSAgICAocnhvbjEtPmNja19iYXNpY19yYXRlcyA9PSByeG9uMi0+Y2NrX2Jhc2ljX3JhdGVzKSAmJgorCSAgICAocnhvbjEtPm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcyA9PQorCSAgICAgcnhvbjItPm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKKwkgICAgKHJ4b24xLT5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID09CisJICAgICByeG9uMi0+b2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKKwkgICAgKHJ4b24xLT5vZmRtX2h0X3RyaXBsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPT0KKwkgICAgIHJ4b24yLT5vZmRtX2h0X3RyaXBsZV9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCisJICAgIChyeG9uMS0+YWNxdWlzaXRpb25fZGF0YSA9PSByeG9uMi0+YWNxdWlzaXRpb25fZGF0YSkgJiYKKwkgICAgKHJ4b24xLT5yeF9jaGFpbiA9PSByeG9uMi0+cnhfY2hhaW4pICYmCisJICAgIChyeG9uMS0+b2ZkbV9iYXNpY19yYXRlcyA9PSByeG9uMi0+b2ZkbV9iYXNpY19yYXRlcykpIHsKKwkJSVdMX0RFQlVHX0lORk8oIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcnhvbl9hc3NvYy5mbGFncyA9IHByaXYtPnN0YWdpbmdfcnhvbi5mbGFnczsKKwlyeG9uX2Fzc29jLmZpbHRlcl9mbGFncyA9IHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7CisJcnhvbl9hc3NvYy5vZmRtX2Jhc2ljX3JhdGVzID0gcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXM7CisJcnhvbl9hc3NvYy5jY2tfYmFzaWNfcmF0ZXMgPSBwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzOworCXJ4b25fYXNzb2MucmVzZXJ2ZWQxID0gMDsKKwlyeG9uX2Fzc29jLnJlc2VydmVkMiA9IDA7CisJcnhvbl9hc3NvYy5yZXNlcnZlZDMgPSAwOworCXJ4b25fYXNzb2Mub2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzID0KKwkgICAgcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlczsKKwlyeG9uX2Fzc29jLm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMgPQorCSAgICBwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlczsKKwlyeG9uX2Fzc29jLnJ4X2NoYWluX3NlbGVjdF9mbGFncyA9IHByaXYtPnN0YWdpbmdfcnhvbi5yeF9jaGFpbjsKKwlyeG9uX2Fzc29jLm9mZG1faHRfdHJpcGxlX3N0cmVhbV9iYXNpY19yYXRlcyA9CisJCSBwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF90cmlwbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOworCXJ4b25fYXNzb2MuYWNxdWlzaXRpb25fZGF0YSA9IHByaXYtPnN0YWdpbmdfcnhvbi5hY3F1aXNpdGlvbl9kYXRhOworCisJcmV0ID0gaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9SWE9OX0FTU09DLAorCQkJCSAgICAgc2l6ZW9mKHJ4b25fYXNzb2MpLCAmcnhvbl9hc3NvYywgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXQ7Cit9CitzdGF0aWMgaW50ICBpd2w1MDAwX3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2w1MDAwX3R4X3Bvd2VyX2RibV9jbWQgdHhfcG93ZXJfY21kOworCisJLyogaGFsZiBkQm0gbmVlZCB0byBtdWx0aXBseSAqLworCXR4X3Bvd2VyX2NtZC5nbG9iYWxfbG10ID0gKHM4KSgyICogcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQpOworCXR4X3Bvd2VyX2NtZC5mbGFncyA9IElXTDUwX1RYX1BPV0VSX05PX0NMT1NFRDsKKwl0eF9wb3dlcl9jbWQuc3J2X2NoYW5fbG10ID0gSVdMNTBfVFhfUE9XRVJfQVVUTzsKKwlyZXR1cm4gIGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfVFhfUE9XRVJfREJNX0NNRCwKKwkJCQkgICAgICAgc2l6ZW9mKHR4X3Bvd2VyX2NtZCksICZ0eF9wb3dlcl9jbWQsCisJCQkJICAgICAgIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBpd2w1MDAwX3RlbXBlcmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwkvKiBzdG9yZSB0ZW1wZXJhdHVyZSBmcm9tIHN0YXRpc3RpY3MgKGluIENlbHNpdXMpICovCisJcHJpdi0+dGVtcGVyYXR1cmUgPSBsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwudGVtcGVyYXR1cmUpOworfQorCitzdGF0aWMgc3RydWN0IGl3bF9oY21kX29wcyBpd2w1MDAwX2hjbWQgPSB7CisJLnJ4b25fYXNzb2MgPSBpd2w1MDAwX3NlbmRfcnhvbl9hc3NvYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlscyA9IHsKKwkuZ2V0X2hjbWRfc2l6ZSA9IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSwKKwkuYnVpbGRfYWRkc3RhX2hjbWQgPSBpd2w1MDAwX2J1aWxkX2FkZHN0YV9oY21kLAorCS5nYWluX2NvbXB1dGF0aW9uID0gaXdsNTAwMF9nYWluX2NvbXB1dGF0aW9uLAorCS5jaGFpbl9ub2lzZV9yZXNldCA9IGl3bDUwMDBfY2hhaW5fbm9pc2VfcmVzZXQsCisJLnJ0c190eF9jbWRfZmxhZyA9IGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnLAorfTsKKworc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKKwkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKKwkuYWxsb2Nfc2hhcmVkX21lbSA9IGl3bDUwMDBfYWxsb2Nfc2hhcmVkX21lbSwKKwkuZnJlZV9zaGFyZWRfbWVtID0gaXdsNTAwMF9mcmVlX3NoYXJlZF9tZW0sCisJLnNoYXJlZF9tZW1fcnhfaWR4ID0gaXdsNTAwMF9zaGFyZWRfbWVtX3J4X2lkeCwKKwkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAorCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAorCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLAorCS50eHFfYWdnX2VuYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19lbmFibGUsCisJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlLAorCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwLAorCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrLAorCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLAorCS5sb2FkX3Vjb2RlID0gaXdsNTAwMF9sb2FkX3Vjb2RlLAorCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0LAorCS5hbGl2ZV9ub3RpZnkgPSBpd2w1MDAwX2FsaXZlX25vdGlmeSwKKwkuc2VuZF90eF9wb3dlciA9IGl3bDUwMDBfc2VuZF90eF9wb3dlciwKKwkudGVtcGVyYXR1cmUgPSBpd2w1MDAwX3RlbXBlcmF0dXJlLAorCS5hcG1fb3BzID0geworCQkuaW5pdCA9CWl3bDUwMDBfYXBtX2luaXQsCisJCS5yZXNldCA9IGl3bDUwMDBfYXBtX3Jlc2V0LAorCQkuc3RvcCA9IGl3bDUwMDBfYXBtX3N0b3AsCisJCS5jb25maWcgPSBpd2w1MDAwX25pY19jb25maWcsCisJCS5zZXRfcHdyX3NyYyA9IGl3bDQ5NjVfc2V0X3B3cl9zcmMsCisJfSwKKwkuZWVwcm9tX29wcyA9IHsKKwkJLnJlZ3VsYXRvcnlfYmFuZHMgPSB7CisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8xX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMl9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzNfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF80X0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0ZBVF9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzUyX0ZBVF9DSEFOTkVMUworCQl9LAorCQkudmVyaWZ5X3NpZ25hdHVyZSAgPSBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlLAorCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKKwkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCisJCS5jaGVja192ZXJzaW9uCT0gaXdsNTAwMF9lZXByb21fY2hlY2tfdmVyc2lvbiwKKwkJLnF1ZXJ5X2FkZHIgPSBpd2w1MDAwX2VlcHJvbV9xdWVyeV9hZGRyLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CisJLmxpYiA9ICZpd2w1MDAwX2xpYiwKKwkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCisJLnV0aWxzID0gJml3bDUwMDBfaGNtZF91dGlscywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsNTBfbW9kX3BhcmFtcyA9IHsKKwkubnVtX29mX3F1ZXVlcyA9IElXTDUwX05VTV9RVUVVRVMsCisJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0w1MF9OVU1fQU1QRFVfUVVFVUVTLAorCS5lbmFibGVfcW9zID0gMSwKKwkuYW1zZHVfc2l6ZV84SyA9IDEsCisJLnJlc3RhcnRfZncgPSAxLAorCS8qIHRoZSByZXN0IGFyZSAwIGJ5IGRlZmF1bHQgKi8KK307CisKKworc3RydWN0IGl3bF9jZmcgaXdsNTMwMF9hZ25fY2ZnID0geworCS5uYW1lID0gIjUzMDBBR04iLAorCS5md19uYW1lID0gIml3bHdpZmktNTAwMCIgSVdMNTAwMF9VQ09ERV9BUEkgIi51Y29kZSIsCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAorCS5vcHMgPSAmaXdsNTAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2JnX2NmZyA9IHsKKwkubmFtZSA9ICI1MTAwQkciLAorCS5md19uYW1lID0gIml3bHdpZmktNTAwMCIgSVdMNTAwMF9VQ09ERV9BUEkgIi51Y29kZSIsCisJLnNrdSA9IElXTF9TS1VfRywKKwkub3BzID0gJml3bDUwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hYmdfY2ZnID0geworCS5uYW1lID0gIjUxMDBBQkciLAorCS5md19uYW1lID0gIml3bHdpZmktNTAwMCIgSVdMNTAwMF9VQ09ERV9BUEkgIi51Y29kZSIsCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCisJLm9wcyA9ICZpd2w1MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWduX2NmZyA9IHsKKwkubmFtZSA9ICI1MTAwQUdOIiwKKwkuZndfbmFtZSA9ICJpd2x3aWZpLTUwMDAiIElXTDUwMDBfVUNPREVfQVBJICIudWNvZGUiLAorCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKKwkub3BzID0gJml3bDUwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNTM1MF9hZ25fY2ZnID0geworCS5uYW1lID0gIjUzNTBBR04iLAorCS5md19uYW1lID0gIml3bHdpZmktNTAwMCIgSVdMNTAwMF9VQ09ERV9BUEkgIi51Y29kZSIsCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAorCS5vcHMgPSAmaXdsNTAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCit9OworCittb2R1bGVfcGFyYW1fbmFtZWQoZGlzYWJsZTUwLCBpd2w1MF9tb2RfcGFyYW1zLmRpc2FibGUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGU1MCwKKwkJICAibWFudWFsbHkgZGlzYWJsZSB0aGUgNTBYWCByYWRpbyAoZGVmYXVsdCAwIFtyYWRpbyBvbl0pIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoc3djcnlwdG81MCwgaXdsNTBfbW9kX3BhcmFtcy5zd19jcnlwdG8sIGJvb2wsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzd2NyeXB0bzUwLAorCQkgICJ1c2luZyBzb2Z0d2FyZSBjcnlwdG8gZW5naW5lIChkZWZhdWx0IDAgW2hhcmR3YXJlXSlcbiIpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnNTAsIGl3bDUwX21vZF9wYXJhbXMuZGVidWcsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnNTAsICI1MFhYIGRlYnVnIG91dHB1dCBtYXNrIik7Cittb2R1bGVfcGFyYW1fbmFtZWQocXVldWVzX251bTUwLCBpd2w1MF9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW01MCwgIm51bWJlciBvZiBodyBxdWV1ZXMgaW4gNTB4eCBzZXJpZXMiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChxb3NfZW5hYmxlNTAsIGl3bDUwX21vZF9wYXJhbXMuZW5hYmxlX3FvcywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocW9zX2VuYWJsZTUwLCAiZW5hYmxlIGFsbCA1MFhYIFFvUyBmdW5jdGlvbmFsaXR5Iik7Cittb2R1bGVfcGFyYW1fbmFtZWQoMTFuX2Rpc2FibGU1MCwgaXdsNTBfbW9kX3BhcmFtcy5kaXNhYmxlXzExbiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoMTFuX2Rpc2FibGU1MCwgImRpc2FibGUgNTBYWCAxMW4gZnVuY3Rpb25hbGl0eSIpOworbW9kdWxlX3BhcmFtX25hbWVkKGFtc2R1X3NpemVfOEs1MCwgaXdsNTBfbW9kX3BhcmFtcy5hbXNkdV9zaXplXzhLLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhhbXNkdV9zaXplXzhLNTAsICJlbmFibGUgOEsgYW1zZHUgc2l6ZSBpbiA1MFhYIHNlcmllcyIpOworbW9kdWxlX3BhcmFtX25hbWVkKGZ3X3Jlc3RhcnQ1MCwgaXdsNTBfbW9kX3BhcmFtcy5yZXN0YXJ0X2Z3LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmd19yZXN0YXJ0NTAsICJyZXN0YXJ0IGZpcm13YXJlIGluIGNhc2Ugb2YgZXJyb3IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNDk0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCkBAIC0wLDAgKzEsODAyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIHVuZGVyIGEgZHVhbCBCU0QvR1BMdjIgbGljZW5zZS4gIFdoZW4gdXNpbmcgb3IKKyAqIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKyAqCisgKiBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIFRvbWFzIFdpbmtsZXIgPHRvbWFzLndpbmtsZXJAaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqIEJTRCBMSUNFTlNFCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogICogTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWNhbGliLmgiCisKKy8qICJmYWxzZSBhbGFybXMiIGFyZSBzaWduYWxzIHRoYXQgb3VyIERTUCB0cmllcyB0byBsb2NrIG9udG8sCisgKiAgIGJ1dCB0aGVuIGRldGVybWluZXMgdGhhdCB0aGV5IGFyZSBlaXRoZXIgbm9pc2UsIG9yIHRyYW5zbWlzc2lvbnMKKyAqICAgZnJvbSBhIGRpc3RhbnQgd2lyZWxlc3MgbmV0d29yayAoYWxzbyAibm9pc2UiLCByZWFsbHkpIHRoYXQgZ2V0CisgKiAgICJzdGVwcGVkIG9uIiBieSBzdHJvbmdlciB0cmFuc21pc3Npb25zIHdpdGhpbiBvdXIgb3duIG5ldHdvcmsuCisgKiBUaGlzIGFsZ29yaXRobSBhdHRlbXB0cyB0byBzZXQgYSBzZW5zaXRpdml0eSBsZXZlbCB0aGF0IGlzIGhpZ2gKKyAqICAgZW5vdWdoIHRvIHJlY2VpdmUgYWxsIG9mIG91ciBvd24gbmV0d29yayB0cmFmZmljLCBidXQgbm90IHNvCisgKiAgIGhpZ2ggdGhhdCBvdXIgRFNQIGdldHMgdG9vIGJ1c3kgdHJ5aW5nIHRvIGxvY2sgb250byBub24tbmV0d29yaworICogICBhY3Rpdml0eS9ub2lzZS4gKi8KK3N0YXRpYyBpbnQgaXdsX3NlbnNfZW5lcmd5X2NjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgdTMyIG5vcm1fZmEsCisJCQkJICAgdTMyIHJ4X2VuYWJsZV90aW1lLAorCQkJCSAgIHN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWxfZGF0YSAqcnhfaW5mbykKK3sKKwl1MzIgbWF4X25yZ19jY2sgPSAwOworCWludCBpID0gMDsKKwl1OCBtYXhfc2lsZW5jZV9yc3NpID0gMDsKKwl1MzIgc2lsZW5jZV9yZWYgPSAwOworCXU4IHNpbGVuY2VfcnNzaV9hID0gMDsKKwl1OCBzaWxlbmNlX3Jzc2lfYiA9IDA7CisJdTggc2lsZW5jZV9yc3NpX2MgPSAwOworCXUzMiB2YWw7CisKKwkvKiAiZmFsc2VfYWxhcm1zIiB2YWx1ZXMgYmVsb3cgYXJlIGNyb3NzLW11bHRpcGxpY2F0aW9ucyB0byBhc3Nlc3MgdGhlCisJICogICBudW1iZXJzIG9mIGZhbHNlIGFsYXJtcyB3aXRoaW4gdGhlIG1lYXN1cmVkIHBlcmlvZCBvZiBhY3R1YWwgUngKKwkgKiAgIChSeCBpcyBvZmYgd2hlbiB3ZSdyZSB0eGluZyksIHZzIHRoZSBtaW4vbWF4IGV4cGVjdGVkIGZhbHNlIGFsYXJtcworCSAqICAgKHNvbWUgc2hvdWxkIGJlIGV4cGVjdGVkIGlmIHJ4IGlzIHNlbnNpdGl2ZSBlbm91Z2gpIGluIGEKKwkgKiAgIGh5cG90aGV0aWNhbCBsaXN0ZW5pbmcgcGVyaW9kIG9mIDIwMCB0aW1lIHVuaXRzIChUVSksIDIwNC44IG1zZWM6CisJICoKKwkgKiBNSU5fRkEvZml4ZWQtdGltZSA8IGZhbHNlX2FsYXJtcy9hY3R1YWwtcngtdGltZSA8IE1BWF9GQS9iZWFjb24tdGltZQorCSAqCisJICogKi8KKwl1MzIgZmFsc2VfYWxhcm1zID0gbm9ybV9mYSAqIDIwMCAqIDEwMjQ7CisJdTMyIG1heF9mYWxzZV9hbGFybXMgPSBNQVhfRkFfQ0NLICogcnhfZW5hYmxlX3RpbWU7CisJdTMyIG1pbl9mYWxzZV9hbGFybXMgPSBNSU5fRkFfQ0NLICogcnhfZW5hYmxlX3RpbWU7CisJc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyAqcmFuZ2VzID0gcHJpdi0+aHdfcGFyYW1zLnNlbnM7CisKKwlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKKworCWRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID0gMDsKKworCS8qIEZpbmQgbWF4IHNpbGVuY2UgcnNzaSBhbW9uZyBhbGwgMyByZWNlaXZlcnMuCisJICogVGhpcyBpcyBiYWNrZ3JvdW5kIG5vaXNlLCB3aGljaCBtYXkgaW5jbHVkZSB0cmFuc21pc3Npb25zIGZyb20gb3RoZXIKKwkgKiAgICBuZXR3b3JrcywgbWVhc3VyZWQgZHVyaW5nIHNpbGVuY2UgYmVmb3JlIG91ciBuZXR3b3JrJ3MgYmVhY29uICovCisJc2lsZW5jZV9yc3NpX2EgPSAodTgpKChyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EgJgorCQkJICAgIEFMTF9CQU5EX0ZJTFRFUikgPj4gOCk7CisJc2lsZW5jZV9yc3NpX2IgPSAodTgpKChyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IgJgorCQkJICAgIEFMTF9CQU5EX0ZJTFRFUikgPj4gOCk7CisJc2lsZW5jZV9yc3NpX2MgPSAodTgpKChyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MgJgorCQkJICAgIEFMTF9CQU5EX0ZJTFRFUikgPj4gOCk7CisKKwl2YWwgPSBtYXgoc2lsZW5jZV9yc3NpX2IsIHNpbGVuY2VfcnNzaV9jKTsKKwltYXhfc2lsZW5jZV9yc3NpID0gbWF4KHNpbGVuY2VfcnNzaV9hLCAodTgpIHZhbCk7CisKKwkvKiBTdG9yZSBzaWxlbmNlIHJzc2kgaW4gMjAtYmVhY29uIGhpc3RvcnkgdGFibGUgKi8KKwlkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2RhdGEtPm5yZ19zaWxlbmNlX2lkeF0gPSBtYXhfc2lsZW5jZV9yc3NpOworCWRhdGEtPm5yZ19zaWxlbmNlX2lkeCsrOworCWlmIChkYXRhLT5ucmdfc2lsZW5jZV9pZHggPj0gTlJHX05VTV9QUkVWX1NUQVRfTCkKKwkJZGF0YS0+bnJnX3NpbGVuY2VfaWR4ID0gMDsKKworCS8qIEZpbmQgbWF4IHNpbGVuY2UgcnNzaSBhY3Jvc3MgMjAgYmVhY29uIGhpc3RvcnkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJHX05VTV9QUkVWX1NUQVRfTDsgaSsrKSB7CisJCXZhbCA9IGRhdGEtPm5yZ19zaWxlbmNlX3Jzc2lbaV07CisJCXNpbGVuY2VfcmVmID0gbWF4KHNpbGVuY2VfcmVmLCB2YWwpOworCX0KKwlJV0xfREVCVUdfQ0FMSUIoInNpbGVuY2UgYSAldSwgYiAldSwgYyAldSwgMjAtYmNuIG1heCAldVxuIiwKKwkJCXNpbGVuY2VfcnNzaV9hLCBzaWxlbmNlX3Jzc2lfYiwgc2lsZW5jZV9yc3NpX2MsCisJCQlzaWxlbmNlX3JlZik7CisKKwkvKiBGaW5kIG1heCByeCBlbmVyZ3kgKG1pbiB2YWx1ZSEpIGFtb25nIGFsbCAzIHJlY2VpdmVycywKKwkgKiAgIG1lYXN1cmVkIGR1cmluZyBiZWFjb24gZnJhbWUuCisJICogU2F2ZSBpdCBpbiAxMC1iZWFjb24gaGlzdG9yeSB0YWJsZS4gKi8KKwlpID0gZGF0YS0+bnJnX2VuZXJneV9pZHg7CisJdmFsID0gbWluKHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYiwgcnhfaW5mby0+YmVhY29uX2VuZXJneV9jKTsKKwlkYXRhLT5ucmdfdmFsdWVbaV0gPSBtaW4ocnhfaW5mby0+YmVhY29uX2VuZXJneV9hLCB2YWwpOworCisJZGF0YS0+bnJnX2VuZXJneV9pZHgrKzsKKwlpZiAoZGF0YS0+bnJnX2VuZXJneV9pZHggPj0gMTApCisJCWRhdGEtPm5yZ19lbmVyZ3lfaWR4ID0gMDsKKworCS8qIEZpbmQgbWluIHJ4IGVuZXJneSAobWF4IHZhbHVlKSBhY3Jvc3MgMTAgYmVhY29uIGhpc3RvcnkuCisJICogVGhpcyBpcyB0aGUgbWluaW11bSBzaWduYWwgbGV2ZWwgdGhhdCB3ZSB3YW50IHRvIHJlY2VpdmUgd2VsbC4KKwkgKiBBZGQgYmFja29mZiAobWFyZ2luIHNvIHdlIGRvbid0IG1pc3Mgc2xpZ2h0bHkgbG93ZXIgZW5lcmd5IGZyYW1lcykuCisJICogVGhpcyBlc3RhYmxpc2hlcyBhbiB1cHBlciBib3VuZCAobWluIHZhbHVlKSBmb3IgZW5lcmd5IHRocmVzaG9sZC4gKi8KKwltYXhfbnJnX2NjayA9IGRhdGEtPm5yZ192YWx1ZVswXTsKKwlmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykKKwkJbWF4X25yZ19jY2sgPSAodTMyKSBtYXgobWF4X25yZ19jY2ssIChkYXRhLT5ucmdfdmFsdWVbaV0pKTsKKwltYXhfbnJnX2NjayArPSA2OworCisJSVdMX0RFQlVHX0NBTElCKCJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCisJCQlyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2EsIHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYiwKKwkJCXJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYywgbWF4X25yZ19jY2sgLSA2KTsKKworCS8qIENvdW50IG51bWJlciBvZiBjb25zZWN1dGl2ZSBiZWFjb25zIHdpdGggZmV3ZXItdGhhbi1kZXNpcmVkCisJICogICBmYWxzZSBhbGFybXMuICovCisJaWYgKGZhbHNlX2FsYXJtcyA8IG1pbl9mYWxzZV9hbGFybXMpCisJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmErKzsKKwllbHNlCisJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEgPSAwOworCUlXTF9ERUJVR19DQUxJQigiY29uc2VjdXRpdmUgYmNucyB3aXRoIGZldyBmYWxzZSBhbGFybXMgPSAldVxuIiwKKwkJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEpOworCisJLyogSWYgd2UgZ290IHRvbyBtYW55IGZhbHNlIGFsYXJtcyB0aGlzIHRpbWUsIHJlZHVjZSBzZW5zaXRpdml0eSAqLworCWlmICgoZmFsc2VfYWxhcm1zID4gbWF4X2ZhbHNlX2FsYXJtcykgJiYKKwkJKGRhdGEtPmF1dG9fY29ycl9jY2sgPiBBVVRPX0NPUlJfTUFYX1RIX0NDSykpIHsKKwkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1ID4gbWF4IEZBICV1XG4iLAorCQkgICAgIGZhbHNlX2FsYXJtcywgbWF4X2ZhbHNlX2FsYXJtcyk7CisJCUlXTF9ERUJVR19DQUxJQigiLi4uIHJlZHVjaW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfVE9PX01BTlk7CisJCS8qIFN0b3JlIGZvciAiZmV3ZXIgdGhhbiBkZXNpcmVkIiBvbiBsYXRlciBiZWFjb24gKi8KKwkJZGF0YS0+bnJnX3NpbGVuY2VfcmVmID0gc2lsZW5jZV9yZWY7CisKKwkJLyogaW5jcmVhc2UgZW5lcmd5IHRocmVzaG9sZCAocmVkdWNlIG5yZyB2YWx1ZSkKKwkJICogICB0byBkZWNyZWFzZSBzZW5zaXRpdml0eSAqLworCQlpZiAoZGF0YS0+bnJnX3RoX2NjayA+CisJCQkocmFuZ2VzLT5tYXhfbnJnX2NjayArIE5SR19TVEVQX0NDSykpCisJCQlkYXRhLT5ucmdfdGhfY2NrID0gZGF0YS0+bnJnX3RoX2NjaworCQkJCQkJIC0gTlJHX1NURVBfQ0NLOworCQllbHNlCisJCQlkYXRhLT5ucmdfdGhfY2NrID0gcmFuZ2VzLT5tYXhfbnJnX2NjazsKKwkvKiBFbHNlIGlmIHdlIGdvdCBmZXdlciB0aGFuIGRlc2lyZWQsIGluY3JlYXNlIHNlbnNpdGl2aXR5ICovCisJfSBlbHNlIGlmIChmYWxzZV9hbGFybXMgPCBtaW5fZmFsc2VfYWxhcm1zKSB7CisJCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX1RPT19GRVc7CisKKwkJLyogQ29tcGFyZSBzaWxlbmNlIGxldmVsIHdpdGggc2lsZW5jZSBsZXZlbCBmb3IgbW9zdCByZWNlbnQKKwkJICogICBoZWFsdGh5IG51bWJlciBvciB0b28gbWFueSBmYWxzZSBhbGFybXMgKi8KKwkJZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYgPSAoczMyKWRhdGEtPm5yZ19zaWxlbmNlX3JlZiAtCisJCQkJCQkgICAoczMyKXNpbGVuY2VfcmVmOworCisJCUlXTF9ERUJVR19DQUxJQigibm9ybSBGQSAldSA8IG1pbiBGQSAldSwgc2lsZW5jZSBkaWZmICVkXG4iLAorCQkJIGZhbHNlX2FsYXJtcywgbWluX2ZhbHNlX2FsYXJtcywKKwkJCSBkYXRhLT5ucmdfYXV0b19jb3JyX3NpbGVuY2VfZGlmZik7CisKKwkJLyogSW5jcmVhc2UgdmFsdWUgdG8gaW5jcmVhc2Ugc2Vuc2l0aXZpdHksIGJ1dCBvbmx5IGlmOgorCQkgKiAxYSkgcHJldmlvdXMgYmVhY29uIGRpZCAqbm90KiBoYXZlICp0b28gbWFueSogZmFsc2UgYWxhcm1zCisJCSAqIDFiKSBBTkQgdGhlcmUncyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gUnggbGV2ZWxzCisJCSAqICAgICAgZnJvbSBhIHByZXZpb3VzIGJlYWNvbiB3aXRoIHRvbyBtYW55LCBvciBoZWFsdGh5ICMgRkFzCisJCSAqIE9SIDIpIFdlJ3ZlIHNlZW4gYSBsb3Qgb2YgYmVhY29ucyAoMTAwKSB3aXRoIHRvbyBmZXcKKwkJICogICAgICAgZmFsc2UgYWxhcm1zICovCisJCWlmICgoZGF0YS0+bnJnX3ByZXZfc3RhdGUgIT0gSVdMX0ZBX1RPT19NQU5ZKSAmJgorCQkJKChkYXRhLT5ucmdfYXV0b19jb3JyX3NpbGVuY2VfZGlmZiA+IE5SR19ESUZGKSB8fAorCQkJKGRhdGEtPm51bV9pbl9jY2tfbm9fZmEgPiBNQVhfTlVNQkVSX0NDS19OT19GQSkpKSB7CisKKwkJCUlXTF9ERUJVR19DQUxJQigiLi4uIGluY3JlYXNpbmcgc2Vuc2l0aXZpdHlcbiIpOworCQkJLyogSW5jcmVhc2UgbnJnIHZhbHVlIHRvIGluY3JlYXNlIHNlbnNpdGl2aXR5ICovCisJCQl2YWwgPSBkYXRhLT5ucmdfdGhfY2NrICsgTlJHX1NURVBfQ0NLOworCQkJZGF0YS0+bnJnX3RoX2NjayA9IG1pbigodTMyKXJhbmdlcy0+bWluX25yZ19jY2ssIHZhbCk7CisJCX0gZWxzZSB7CisJCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBidXQgbm90IGNoYW5naW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJfQorCisJLyogRWxzZSB3ZSBnb3QgYSBoZWFsdGh5IG51bWJlciBvZiBmYWxzZSBhbGFybXMsIGtlZXAgc3RhdHVzIHF1byAqLworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19DQUxJQigiIEZBIGluIHNhZmUgem9uZVxuIik7CisJCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX0dPT0RfUkFOR0U7CisKKwkJLyogU3RvcmUgZm9yIHVzZSBpbiAiZmV3ZXIgdGhhbiBkZXNpcmVkIiB3aXRoIGxhdGVyIGJlYWNvbiAqLworCQlkYXRhLT5ucmdfc2lsZW5jZV9yZWYgPSBzaWxlbmNlX3JlZjsKKworCQkvKiBJZiBwcmV2aW91cyBiZWFjb24gaGFkIHRvbyBtYW55IGZhbHNlIGFsYXJtcywKKwkJICogICBnaXZlIGl0IHNvbWUgZXh0cmEgbWFyZ2luIGJ5IHJlZHVjaW5nIHNlbnNpdGl2aXR5IGFnYWluCisJCSAqICAgKGJ1dCBkb24ndCBnbyBiZWxvdyBtZWFzdXJlZCBlbmVyZ3kgb2YgZGVzaXJlZCBSeCkgKi8KKwkJaWYgKElXTF9GQV9UT09fTUFOWSA9PSBkYXRhLT5ucmdfcHJldl9zdGF0ZSkgeworCQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOworCQkJaWYgKGRhdGEtPm5yZ190aF9jY2sgPiAobWF4X25yZ19jY2sgKyBOUkdfTUFSR0lOKSkKKwkJCQlkYXRhLT5ucmdfdGhfY2NrIC09IE5SR19NQVJHSU47CisJCQllbHNlCisJCQkJZGF0YS0+bnJnX3RoX2NjayA9IG1heF9ucmdfY2NrOworCQl9CisJfQorCisJLyogTWFrZSBzdXJlIHRoZSBlbmVyZ3kgdGhyZXNob2xkIGRvZXMgbm90IGdvIGFib3ZlIHRoZSBtZWFzdXJlZAorCSAqIGVuZXJneSBvZiB0aGUgZGVzaXJlZCBSeCBzaWduYWxzIChyZWR1Y2VkIGJ5IGJhY2tvZmYgbWFyZ2luKSwKKwkgKiBvciBlbHNlIHdlIG1pZ2h0IHN0YXJ0IG1pc3NpbmcgUnggZnJhbWVzLgorCSAqIExvd2VyIHZhbHVlIGlzIGhpZ2hlciBlbmVyZ3ksIHNvIHdlIHVzZSBtYXgoKSEKKwkgKi8KKwlkYXRhLT5ucmdfdGhfY2NrID0gbWF4KG1heF9ucmdfY2NrLCBkYXRhLT5ucmdfdGhfY2NrKTsKKwlJV0xfREVCVUdfQ0FMSUIoIm5ldyBucmdfdGhfY2NrICV1XG4iLCBkYXRhLT5ucmdfdGhfY2NrKTsKKworCWRhdGEtPm5yZ19wcmV2X3N0YXRlID0gZGF0YS0+bnJnX2N1cnJfc3RhdGU7CisKKwkvKiBBdXRvLWNvcnJlbGF0aW9uIENDSyBhbGdvcml0aG0gKi8KKwlpZiAoZmFsc2VfYWxhcm1zID4gbWluX2ZhbHNlX2FsYXJtcykgeworCisJCS8qIGluY3JlYXNlIGF1dG9fY29yciB2YWx1ZXMgdG8gZGVjcmVhc2Ugc2Vuc2l0aXZpdHkKKwkJICogc28gdGhlIERTUCB3b24ndCBiZSBkaXN0dXJiZWQgYnkgdGhlIG5vaXNlCisJCSAqLworCQlpZiAoZGF0YS0+YXV0b19jb3JyX2NjayA8IEFVVE9fQ09SUl9NQVhfVEhfQ0NLKQorCQkJZGF0YS0+YXV0b19jb3JyX2NjayA9IEFVVE9fQ09SUl9NQVhfVEhfQ0NLICsgMTsKKwkJZWxzZSB7CisJCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfY2NrICsgQVVUT19DT1JSX1NURVBfQ0NLOworCQkJZGF0YS0+YXV0b19jb3JyX2NjayA9CisJCQkJbWluKCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWF4X2NjaywgdmFsKTsKKwkJfQorCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyArIEFVVE9fQ09SUl9TVEVQX0NDSzsKKwkJZGF0YS0+YXV0b19jb3JyX2Nja19tcmMgPQorCQkJbWluKCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWF4X2Nja19tcmMsIHZhbCk7CisJfSBlbHNlIGlmICgoZmFsc2VfYWxhcm1zIDwgbWluX2ZhbHNlX2FsYXJtcykgJiYKKwkgICAoKGRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID4gTlJHX0RJRkYpIHx8CisJICAgKGRhdGEtPm51bV9pbl9jY2tfbm9fZmEgPiBNQVhfTlVNQkVSX0NDS19OT19GQSkpKSB7CisKKwkJLyogRGVjcmVhc2UgYXV0b19jb3JyIHZhbHVlcyB0byBpbmNyZWFzZSBzZW5zaXRpdml0eSAqLworCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfY2NrIC0gQVVUT19DT1JSX1NURVBfQ0NLOworCQlkYXRhLT5hdXRvX2NvcnJfY2NrID0KKwkJCW1heCgodTMyKXJhbmdlcy0+YXV0b19jb3JyX21pbl9jY2ssIHZhbCk7CisJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9jY2tfbXJjIC0gQVVUT19DT1JSX1NURVBfQ0NLOworCQlkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyA9CisJCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fY2NrX21yYywgdmFsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGl3bF9zZW5zX2F1dG9fY29ycl9vZmRtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgdTMyIG5vcm1fZmEsCisJCQkJICAgICAgIHUzMiByeF9lbmFibGVfdGltZSkKK3sKKwl1MzIgdmFsOworCXUzMiBmYWxzZV9hbGFybXMgPSBub3JtX2ZhICogMjAwICogMTAyNDsKKwl1MzIgbWF4X2ZhbHNlX2FsYXJtcyA9IE1BWF9GQV9PRkRNICogcnhfZW5hYmxlX3RpbWU7CisJdTMyIG1pbl9mYWxzZV9hbGFybXMgPSBNSU5fRkFfT0ZETSAqIHJ4X2VuYWJsZV90aW1lOworCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGl3bF9zZW5zaXRpdml0eV9yYW5nZXMgKnJhbmdlcyA9IHByaXYtPmh3X3BhcmFtcy5zZW5zOworCisJZGF0YSA9ICYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSk7CisKKwkvKiBJZiB3ZSBnb3QgdG9vIG1hbnkgZmFsc2UgYWxhcm1zIHRoaXMgdGltZSwgcmVkdWNlIHNlbnNpdGl2aXR5ICovCisJaWYgKGZhbHNlX2FsYXJtcyA+IG1heF9mYWxzZV9hbGFybXMpIHsKKworCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAorCQkJICAgICBmYWxzZV9hbGFybXMsIG1heF9mYWxzZV9hbGFybXMpOworCisJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtICsgQVVUT19DT1JSX1NURVBfT0ZETTsKKwkJZGF0YS0+YXV0b19jb3JyX29mZG0gPQorCQkJbWluKCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWF4X29mZG0sIHZhbCk7CisKKwkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjICsgQVVUT19DT1JSX1NURVBfT0ZETTsKKwkJZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjID0KKwkJCW1pbigodTMyKXJhbmdlcy0+YXV0b19jb3JyX21heF9vZmRtX21yYywgdmFsKTsKKworCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSArIEFVVE9fQ09SUl9TVEVQX09GRE07CisJCWRhdGEtPmF1dG9fY29ycl9vZmRtX3gxID0KKwkJCW1pbigodTMyKXJhbmdlcy0+YXV0b19jb3JyX21heF9vZmRtX3gxLCB2YWwpOworCisJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSArIEFVVE9fQ09SUl9TVEVQX09GRE07CisJCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSA9CisJCQltaW4oKHUzMilyYW5nZXMtPmF1dG9fY29ycl9tYXhfb2ZkbV9tcmNfeDEsIHZhbCk7CisJfQorCisJLyogRWxzZSBpZiB3ZSBnb3QgZmV3ZXIgdGhhbiBkZXNpcmVkLCBpbmNyZWFzZSBzZW5zaXRpdml0eSAqLworCWVsc2UgaWYgKGZhbHNlX2FsYXJtcyA8IG1pbl9mYWxzZV9hbGFybXMpIHsKKworCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXVcbiIsCisJCQkgICAgIGZhbHNlX2FsYXJtcywgbWluX2ZhbHNlX2FsYXJtcyk7CisKKwkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG0gLSBBVVRPX0NPUlJfU1RFUF9PRkRNOworCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbSA9CisJCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbSwgdmFsKTsKKworCQl2YWwgPSBkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMgLSBBVVRPX0NPUlJfU1RFUF9PRkRNOworCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMgPQorCQkJbWF4KCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWluX29mZG1fbXJjLCB2YWwpOworCisJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtX3gxIC0gQVVUT19DT1JSX1NURVBfT0ZETTsKKwkJZGF0YS0+YXV0b19jb3JyX29mZG1feDEgPQorCQkJbWF4KCh1MzIpcmFuZ2VzLT5hdXRvX2NvcnJfbWluX29mZG1feDEsIHZhbCk7CisKKwkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjX3gxIC0gQVVUT19DT1JSX1NURVBfT0ZETTsKKwkJZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjX3gxID0KKwkJCW1heCgodTMyKXJhbmdlcy0+YXV0b19jb3JyX21pbl9vZmRtX21yY194MSwgdmFsKTsKKwl9IGVsc2UgeworCQlJV0xfREVCVUdfQ0FMSUIoIm1pbiBGQSAldSA8IG5vcm0gRkEgJXUgPCBtYXggRkEgJXUgT0tcbiIsCisJCQkgbWluX2ZhbHNlX2FsYXJtcywgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFByZXBhcmUgYSBTRU5TSVRJVklUWV9DTUQsIHNlbmQgdG8gdUNvZGUgaWYgdmFsdWVzIGhhdmUgY2hhbmdlZCAqLworc3RhdGljIGludCBpd2xfc2Vuc2l0aXZpdHlfd3JpdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfY21kIGNtZCA7CisJc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZF9vdXQgPSB7CisJCS5pZCA9IFNFTlNJVElWSVRZX0NNRCwKKwkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZCksCisJCS5tZXRhLmZsYWdzID0gQ01EX0FTWU5DLAorCQkuZGF0YSA9ICZjbWQsCisJfTsKKworCWRhdGEgPSAmKHByaXYtPnNlbnNpdGl2aXR5X2RhdGEpOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKworCWNtZC50YWJsZVtIRF9BVVRPX0NPUlIzMl9YNF9USF9BRERfTUlOX0lOREVYXSA9CisJCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfb2ZkbSk7CisJY21kLnRhYmxlW0hEX0FVVE9fQ09SUjMyX1g0X1RIX0FERF9NSU5fTVJDX0lOREVYXSA9CisJCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMpOworCWNtZC50YWJsZVtIRF9BVVRPX0NPUlIzMl9YMV9USF9BRERfTUlOX0lOREVYXSA9CisJCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSk7CisJY21kLnRhYmxlW0hEX0FVVE9fQ09SUjMyX1gxX1RIX0FERF9NSU5fTVJDX0lOREVYXSA9CisJCQkJY3B1X3RvX2xlMTYoKHUxNilkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEpOworCisJY21kLnRhYmxlW0hEX0FVVE9fQ09SUjQwX1g0X1RIX0FERF9NSU5fSU5ERVhdID0KKwkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPmF1dG9fY29ycl9jY2spOworCWNtZC50YWJsZVtIRF9BVVRPX0NPUlI0MF9YNF9USF9BRERfTUlOX01SQ19JTkRFWF0gPQorCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+YXV0b19jb3JyX2Nja19tcmMpOworCisJY21kLnRhYmxlW0hEX01JTl9FTkVSR1lfQ0NLX0RFVF9JTkRFWF0gPQorCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+bnJnX3RoX2Njayk7CisJY21kLnRhYmxlW0hEX01JTl9FTkVSR1lfT0ZETV9ERVRfSU5ERVhdID0KKwkJCQljcHVfdG9fbGUxNigodTE2KWRhdGEtPm5yZ190aF9vZmRtKTsKKworCWNtZC50YWJsZVtIRF9CQVJLRVJfQ09SUl9USF9BRERfTUlOX0lOREVYXSA9CisJCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigxOTApOworCWNtZC50YWJsZVtIRF9CQVJLRVJfQ09SUl9USF9BRERfTUlOX01SQ19JTkRFWF0gPQorCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMzkwKTsKKwljbWQudGFibGVbSERfT0ZETV9FTkVSR1lfVEhfSU5fSU5ERVhdID0KKwkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDYyKTsKKworCUlXTF9ERUJVR19DQUxJQigib2ZkbTogYWMgJXUgbXJjICV1IHgxICV1IG1yY194MSAldSB0aHJlc2ggJXVcbiIsCisJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbSwgZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjLAorCQkJZGF0YS0+YXV0b19jb3JyX29mZG1feDEsIGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSwKKwkJCWRhdGEtPm5yZ190aF9vZmRtKTsKKworCUlXTF9ERUJVR19DQUxJQigiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAorCQkJZGF0YS0+YXV0b19jb3JyX2NjaywgZGF0YS0+YXV0b19jb3JyX2Nja19tcmMsCisJCQlkYXRhLT5ucmdfdGhfY2NrKTsKKworCS8qIFVwZGF0ZSB1Q29kZSdzICJ3b3JrIiB0YWJsZSwgYW5kIGNvcHkgaXQgdG8gRFNQICovCisJY21kLmNvbnRyb2wgPSBTRU5TSVRJVklUWV9DTURfQ09OVFJPTF9XT1JLX1RBQkxFOworCisJLyogRG9uJ3Qgc2VuZCBjb21tYW5kIHRvIHVDb2RlIGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQgKi8KKwlpZiAoIW1lbWNtcCgmY21kLnRhYmxlWzBdLCAmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksCisJCSAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKSkgeworCQlJV0xfREVCVUdfQ0FMSUIoIk5vIGNoYW5nZSBpbiBTRU5TSVRJVklUWV9DTURcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDb3B5IHRhYmxlIGZvciBjb21wYXJpc29uIG5leHQgdGltZSAqLworCW1lbWNweSgmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksICYoY21kLnRhYmxlWzBdKSwKKwkgICAgICAgc2l6ZW9mKHUxNikqSERfVEFCTEVfU0laRSk7CisKKwlyZXQgPSBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZF9vdXQpOworCWlmIChyZXQpCisJCUlXTF9FUlJPUigiU0VOU0lUSVZJVFlfQ01EIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGl3bF9pbml0X3NlbnNpdGl2aXR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2RhdGEgKmRhdGEgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzICpyYW5nZXMgPSBwcml2LT5od19wYXJhbXMuc2VuczsKKworCWlmIChwcml2LT5kaXNhYmxlX3NlbnNfY2FsKQorCQlyZXR1cm47CisKKwlJV0xfREVCVUdfQ0FMSUIoIlN0YXJ0IGl3bF9pbml0X3NlbnNpdGl2aXR5XG4iKTsKKworCS8qIENsZWFyIGRyaXZlcidzIHNlbnNpdGl2aXR5IGFsZ28gZGF0YSAqLworCWRhdGEgPSAmKHByaXYtPnNlbnNpdGl2aXR5X2RhdGEpOworCisJaWYgKHJhbmdlcyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSkpOworCisJZGF0YS0+bnVtX2luX2Nja19ub19mYSA9IDA7CisJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfVE9PX01BTlk7CisJZGF0YS0+bnJnX3ByZXZfc3RhdGUgPSBJV0xfRkFfVE9PX01BTlk7CisJZGF0YS0+bnJnX3NpbGVuY2VfcmVmID0gMDsKKwlkYXRhLT5ucmdfc2lsZW5jZV9pZHggPSAwOworCWRhdGEtPm5yZ19lbmVyZ3lfaWR4ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQlkYXRhLT5ucmdfdmFsdWVbaV0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IE5SR19OVU1fUFJFVl9TVEFUX0w7IGkrKykKKwkJZGF0YS0+bnJnX3NpbGVuY2VfcnNzaVtpXSA9IDA7CisKKwlkYXRhLT5hdXRvX2NvcnJfb2ZkbSA9IDkwOworCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yYyA9IHJhbmdlcy0+YXV0b19jb3JyX21pbl9vZmRtX21yYzsKKwlkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSAgPSByYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbV94MTsKKwlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmNfeDEgPSByYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbV9tcmNfeDE7CisJZGF0YS0+YXV0b19jb3JyX2NjayA9IEFVVE9fQ09SUl9DQ0tfTUlOX1ZBTF9ERUY7CisJZGF0YS0+YXV0b19jb3JyX2Nja19tcmMgPSByYW5nZXMtPmF1dG9fY29ycl9taW5fY2NrX21yYzsKKwlkYXRhLT5ucmdfdGhfY2NrID0gcmFuZ2VzLT5ucmdfdGhfY2NrOworCWRhdGEtPm5yZ190aF9vZmRtID0gcmFuZ2VzLT5ucmdfdGhfb2ZkbTsKKworCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gPSAwOworCWRhdGEtPmxhc3RfZmFfY250X29mZG0gPSAwOworCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjayA9IDA7CisJZGF0YS0+bGFzdF9mYV9jbnRfY2NrID0gMDsKKworCXJldCB8PSBpd2xfc2Vuc2l0aXZpdHlfd3JpdGUocHJpdik7CisJSVdMX0RFQlVHX0NBTElCKCI8PHJldHVybiAweCVYXG4iLCByZXQpOworfQorRVhQT1JUX1NZTUJPTChpd2xfaW5pdF9zZW5zaXRpdml0eSk7CisKK3ZvaWQgaXdsX3NlbnNpdGl2aXR5X2NhbGlicmF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICpyZXNwKQoreworCXUzMiByeF9lbmFibGVfdGltZTsKKwl1MzIgZmFfY2NrOworCXUzMiBmYV9vZmRtOworCXUzMiBiYWRfcGxjcF9jY2s7CisJdTMyIGJhZF9wbGNwX29mZG07CisJdTMyIG5vcm1fZmFfb2ZkbTsKKwl1MzIgbm9ybV9mYV9jY2s7CisJc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9pbmZvID0gJihyZXNwLT5yeC5nZW5lcmFsKTsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeCAqc3RhdGlzdGljcyA9ICYocmVzcC0+cngpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9kYXRhIHN0YXRpczsKKworCWlmIChwcml2LT5kaXNhYmxlX3NlbnNfY2FsKQorCQlyZXR1cm47CisKKwlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKKworCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJSVdMX0RFQlVHX0NBTElCKCI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7CisJCUlXTF9ERUJVR19DQUxJQigiPDwgaW52YWxpZCBkYXRhLlxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEV4dHJhY3QgU3RhdGlzdGljczogKi8KKwlyeF9lbmFibGVfdGltZSA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmNoYW5uZWxfbG9hZCk7CisJZmFfY2NrID0gbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Y2NrLmZhbHNlX2FsYXJtX2NudCk7CisJZmFfb2ZkbSA9IGxlMzJfdG9fY3B1KHN0YXRpc3RpY3MtPm9mZG0uZmFsc2VfYWxhcm1fY250KTsKKwliYWRfcGxjcF9jY2sgPSBsZTMyX3RvX2NwdShzdGF0aXN0aWNzLT5jY2sucGxjcF9lcnIpOworCWJhZF9wbGNwX29mZG0gPSBsZTMyX3RvX2NwdShzdGF0aXN0aWNzLT5vZmRtLnBsY3BfZXJyKTsKKworCXN0YXRpcy5iZWFjb25fc2lsZW5jZV9yc3NpX2EgPQorCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fc2lsZW5jZV9yc3NpX2EpOworCXN0YXRpcy5iZWFjb25fc2lsZW5jZV9yc3NpX2IgPQorCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fc2lsZW5jZV9yc3NpX2IpOworCXN0YXRpcy5iZWFjb25fc2lsZW5jZV9yc3NpX2MgPQorCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fc2lsZW5jZV9yc3NpX2MpOworCXN0YXRpcy5iZWFjb25fZW5lcmd5X2EgPQorCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fZW5lcmd5X2EpOworCXN0YXRpcy5iZWFjb25fZW5lcmd5X2IgPQorCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fZW5lcmd5X2IpOworCXN0YXRpcy5iZWFjb25fZW5lcmd5X2MgPQorCQkJbGUzMl90b19jcHUoc3RhdGlzdGljcy0+Z2VuZXJhbC5iZWFjb25fZW5lcmd5X2MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJSVdMX0RFQlVHX0NBTElCKCJyeF9lbmFibGVfdGltZSA9ICV1IHVzZWNzXG4iLCByeF9lbmFibGVfdGltZSk7CisKKwlpZiAoIXJ4X2VuYWJsZV90aW1lKSB7CisJCUlXTF9ERUJVR19DQUxJQigiPDwgUlggRW5hYmxlIFRpbWUgPT0gMCEgXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoZXNlIHN0YXRpc3RpY3MgaW5jcmVhc2UgbW9ub3RvbmljYWxseSwgYW5kIGRvIG5vdCByZXNldAorCSAqICAgYXQgZWFjaCBiZWFjb24uICBDYWxjdWxhdGUgZGlmZmVyZW5jZSBmcm9tIGxhc3QgdmFsdWUsIG9yIGp1c3QKKwkgKiAgIHVzZSB0aGUgbmV3IHN0YXRpc3RpY3MgdmFsdWUgaWYgaXQgaGFzIHJlc2V0IG9yIHdyYXBwZWQgYXJvdW5kLiAqLworCWlmIChkYXRhLT5sYXN0X2JhZF9wbGNwX2NudF9jY2sgPiBiYWRfcGxjcF9jY2spCisJCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjayA9IGJhZF9wbGNwX2NjazsKKwllbHNlIHsKKwkJYmFkX3BsY3BfY2NrIC09IGRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2NjazsKKwkJZGF0YS0+bGFzdF9iYWRfcGxjcF9jbnRfY2NrICs9IGJhZF9wbGNwX2NjazsKKwl9CisKKwlpZiAoZGF0YS0+bGFzdF9iYWRfcGxjcF9jbnRfb2ZkbSA+IGJhZF9wbGNwX29mZG0pCisJCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gPSBiYWRfcGxjcF9vZmRtOworCWVsc2UgeworCQliYWRfcGxjcF9vZmRtIC09IGRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG07CisJCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0gKz0gYmFkX3BsY3Bfb2ZkbTsKKwl9CisKKwlpZiAoZGF0YS0+bGFzdF9mYV9jbnRfb2ZkbSA+IGZhX29mZG0pCisJCWRhdGEtPmxhc3RfZmFfY250X29mZG0gPSBmYV9vZmRtOworCWVsc2UgeworCQlmYV9vZmRtIC09IGRhdGEtPmxhc3RfZmFfY250X29mZG07CisJCWRhdGEtPmxhc3RfZmFfY250X29mZG0gKz0gZmFfb2ZkbTsKKwl9CisKKwlpZiAoZGF0YS0+bGFzdF9mYV9jbnRfY2NrID4gZmFfY2NrKQorCQlkYXRhLT5sYXN0X2ZhX2NudF9jY2sgPSBmYV9jY2s7CisJZWxzZSB7CisJCWZhX2NjayAtPSBkYXRhLT5sYXN0X2ZhX2NudF9jY2s7CisJCWRhdGEtPmxhc3RfZmFfY250X2NjayArPSBmYV9jY2s7CisJfQorCisJLyogVG90YWwgYWJvcnRlZCBzaWduYWwgbG9ja3MgKi8KKwlub3JtX2ZhX29mZG0gPSBmYV9vZmRtICsgYmFkX3BsY3Bfb2ZkbTsKKwlub3JtX2ZhX2NjayA9IGZhX2NjayArIGJhZF9wbGNwX2NjazsKKworCUlXTF9ERUJVR19DQUxJQigiY2NrOiBmYSAldSBiYWRwICV1ICBvZmRtOiBmYSAldSBiYWRwICV1XG4iLCBmYV9jY2ssCisJCQliYWRfcGxjcF9jY2ssIGZhX29mZG0sIGJhZF9wbGNwX29mZG0pOworCisJaXdsX3NlbnNfYXV0b19jb3JyX29mZG0ocHJpdiwgbm9ybV9mYV9vZmRtLCByeF9lbmFibGVfdGltZSk7CisJaXdsX3NlbnNfZW5lcmd5X2Njayhwcml2LCBub3JtX2ZhX2NjaywgcnhfZW5hYmxlX3RpbWUsICZzdGF0aXMpOworCWl3bF9zZW5zaXRpdml0eV93cml0ZShwcml2KTsKKworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NlbnNpdGl2aXR5X2NhbGlicmF0aW9uKTsKKworLyoKKyAqIEFjY3VtdWxhdGUgMjAgYmVhY29ucyBvZiBzaWduYWwgYW5kIG5vaXNlIHN0YXRpc3RpY3MgZm9yIGVhY2ggb2YKKyAqICAgMyByZWNlaXZlcnMvYW50ZW5uYXMvcngtY2hhaW5zLCB0aGVuIGZpZ3VyZSBvdXQ6CisgKiAxKSAgV2hpY2ggYW50ZW5uYXMgYXJlIGNvbm5lY3RlZC4KKyAqIDIpICBEaWZmZXJlbnRpYWwgcnggZ2FpbiBzZXR0aW5ncyB0byBiYWxhbmNlIHRoZSAzIHJlY2VpdmVycy4KKyAqLwordm9pZCBpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgKnN0YXRfcmVzcCkKK3sKKwlzdHJ1Y3QgaXdsX2NoYWluX25vaXNlX2RhdGEgKmRhdGEgPSBOVUxMOworCisJdTMyIGNoYWluX25vaXNlX2E7CisJdTMyIGNoYWluX25vaXNlX2I7CisJdTMyIGNoYWluX25vaXNlX2M7CisJdTMyIGNoYWluX3NpZ19hOworCXUzMiBjaGFpbl9zaWdfYjsKKwl1MzIgY2hhaW5fc2lnX2M7CisJdTMyIGF2ZXJhZ2Vfc2lnW05VTV9SWF9DSEFJTlNdID0ge0lOSVRJQUxJWkFUSU9OX1ZBTFVFfTsKKwl1MzIgYXZlcmFnZV9ub2lzZVtOVU1fUlhfQ0hBSU5TXSA9IHtJTklUSUFMSVpBVElPTl9WQUxVRX07CisJdTMyIG1heF9hdmVyYWdlX3NpZzsKKwl1MTYgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaTsKKwl1MzIgbWluX2F2ZXJhZ2Vfbm9pc2UgPSBNSU5fQVZFUkFHRV9OT0lTRV9NQVhfVkFMVUU7CisJdTE2IG1pbl9hdmVyYWdlX25vaXNlX2FudGVubmFfaSA9IElOSVRJQUxJWkFUSU9OX1ZBTFVFOworCXUxNiBpID0gMDsKKwl1MTYgcnhvbl9jaG51bSA9IElOSVRJQUxJWkFUSU9OX1ZBTFVFOworCXUxNiBzdGF0X2NobnVtID0gSU5JVElBTElaQVRJT05fVkFMVUU7CisJdTggcnhvbl9iYW5kMjQ7CisJdTggc3RhdF9iYW5kMjQ7CisJdTMyIGFjdGl2ZV9jaGFpbnMgPSAwOworCXU4IG51bV90eF9jaGFpbnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9pbmZvID0gJihzdGF0X3Jlc3AtPnJ4LmdlbmVyYWwpOworCisJaWYgKHByaXYtPmRpc2FibGVfY2hhaW5fbm9pc2VfY2FsKQorCQlyZXR1cm47CisKKwlkYXRhID0gJihwcml2LT5jaGFpbl9ub2lzZV9kYXRhKTsKKworCS8qIEFjY3VtdWxhdGUganVzdCB0aGUgZmlyc3QgMjAgYmVhY29ucyBhZnRlciB0aGUgZmlyc3QgYXNzb2NpYXRpb24sCisJICogICB0aGVuIHdlJ3JlIGRvbmUgZm9yZXZlci4gKi8KKwlpZiAoZGF0YS0+c3RhdGUgIT0gSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEUpIHsKKwkJaWYgKGRhdGEtPnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9BTElWRSkKKwkJCUlXTF9ERUJVR19DQUxJQigiV2FpdCBmb3Igbm9pc2UgY2FsaWIgcmVzZXRcbiIpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocnhfaW5mby0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyAhPSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUpIHsKKwkJSVdMX0RFQlVHX0NBTElCKCIgPDwgSW50ZXJmZXJlbmNlIGRhdGEgdW5hdmFpbGFibGVcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlyeG9uX2JhbmQyNCA9ICEhKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSyk7CisJcnhvbl9jaG51bSA9IGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKTsKKwlzdGF0X2JhbmQyNCA9ICEhKHN0YXRfcmVzcC0+ZmxhZyAmIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyk7CisJc3RhdF9jaG51bSA9IGxlMzJfdG9fY3B1KHN0YXRfcmVzcC0+ZmxhZykgPj4gMTY7CisKKwkvKiBNYWtlIHN1cmUgd2UgYWNjdW11bGF0ZSBkYXRhIGZvciBqdXN0IHRoZSBhc3NvY2lhdGVkIGNoYW5uZWwKKwkgKiAgIChldmVuIGlmIHNjYW5uaW5nKS4gKi8KKwlpZiAoKHJ4b25fY2hudW0gIT0gc3RhdF9jaG51bSkgfHwgKHJ4b25fYmFuZDI0ICE9IHN0YXRfYmFuZDI0KSkgeworCQlJV0xfREVCVUdfQ0FMSUIoIlN0YXRzIG5vdCBmcm9tIGNoYW49JWQsIGJhbmQyND0lZFxuIiwKKwkJCQlyeG9uX2NobnVtLCByeG9uX2JhbmQyNCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEFjY3VtdWxhdGUgYmVhY29uIHN0YXRpc3RpY3MgdmFsdWVzIGFjcm9zcyAyMCBiZWFjb25zICovCisJY2hhaW5fbm9pc2VfYSA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSkgJgorCQkJCUlOX0JBTkRfRklMVEVSOworCWNoYWluX25vaXNlX2IgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IpICYKKwkJCQlJTl9CQU5EX0ZJTFRFUjsKKwljaGFpbl9ub2lzZV9jID0gbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3NpbGVuY2VfcnNzaV9jKSAmCisJCQkJSU5fQkFORF9GSUxURVI7CisKKwljaGFpbl9zaWdfYSA9IGxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9yc3NpX2EpICYgSU5fQkFORF9GSUxURVI7CisJY2hhaW5fc2lnX2IgPSBsZTMyX3RvX2NwdShyeF9pbmZvLT5iZWFjb25fcnNzaV9iKSAmIElOX0JBTkRfRklMVEVSOworCWNoYWluX3NpZ19jID0gbGUzMl90b19jcHUocnhfaW5mby0+YmVhY29uX3Jzc2lfYykgJiBJTl9CQU5EX0ZJTFRFUjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRhdGEtPmJlYWNvbl9jb3VudCsrOworCisJZGF0YS0+Y2hhaW5fbm9pc2VfYSA9IChjaGFpbl9ub2lzZV9hICsgZGF0YS0+Y2hhaW5fbm9pc2VfYSk7CisJZGF0YS0+Y2hhaW5fbm9pc2VfYiA9IChjaGFpbl9ub2lzZV9iICsgZGF0YS0+Y2hhaW5fbm9pc2VfYik7CisJZGF0YS0+Y2hhaW5fbm9pc2VfYyA9IChjaGFpbl9ub2lzZV9jICsgZGF0YS0+Y2hhaW5fbm9pc2VfYyk7CisKKwlkYXRhLT5jaGFpbl9zaWduYWxfYSA9IChjaGFpbl9zaWdfYSArIGRhdGEtPmNoYWluX3NpZ25hbF9hKTsKKwlkYXRhLT5jaGFpbl9zaWduYWxfYiA9IChjaGFpbl9zaWdfYiArIGRhdGEtPmNoYWluX3NpZ25hbF9iKTsKKwlkYXRhLT5jaGFpbl9zaWduYWxfYyA9IChjaGFpbl9zaWdfYyArIGRhdGEtPmNoYWluX3NpZ25hbF9jKTsKKworCUlXTF9ERUJVR19DQUxJQigiY2hhbj0lZCwgYmFuZDI0PSVkLCBiZWFjb249JWRcbiIsCisJCQlyeG9uX2NobnVtLCByeG9uX2JhbmQyNCwgZGF0YS0+YmVhY29uX2NvdW50KTsKKwlJV0xfREVCVUdfQ0FMSUIoImNoYWluX3NpZzogYSAlZCBiICVkIGMgJWRcbiIsCisJCQljaGFpbl9zaWdfYSwgY2hhaW5fc2lnX2IsIGNoYWluX3NpZ19jKTsKKwlJV0xfREVCVUdfQ0FMSUIoImNoYWluX25vaXNlOiBhICVkIGIgJWQgYyAlZFxuIiwKKwkJCWNoYWluX25vaXNlX2EsIGNoYWluX25vaXNlX2IsIGNoYWluX25vaXNlX2MpOworCisJLyogSWYgdGhpcyBpcyB0aGUgMjB0aCBiZWFjb24sIGRldGVybWluZToKKwkgKiAxKSAgRGlzY29ubmVjdGVkIGFudGVubmFzICh1c2luZyBzaWduYWwgc3RyZW5ndGhzKQorCSAqIDIpICBEaWZmZXJlbnRpYWwgZ2FpbiAodXNpbmcgc2lsZW5jZSBub2lzZSkgdG8gYmFsYW5jZSByZWNlaXZlcnMgKi8KKwlpZiAoZGF0YS0+YmVhY29uX2NvdW50ICE9IENBTF9OVU1fT0ZfQkVBQ09OUykKKwkJcmV0dXJuOworCisJLyogQW5hbHl6ZSBzaWduYWwgZm9yIGRpc2Nvbm5lY3RlZCBhbnRlbm5hICovCisJYXZlcmFnZV9zaWdbMF0gPSAoZGF0YS0+Y2hhaW5fc2lnbmFsX2EpIC8gQ0FMX05VTV9PRl9CRUFDT05TOworCWF2ZXJhZ2Vfc2lnWzFdID0gKGRhdGEtPmNoYWluX3NpZ25hbF9iKSAvIENBTF9OVU1fT0ZfQkVBQ09OUzsKKwlhdmVyYWdlX3NpZ1syXSA9IChkYXRhLT5jaGFpbl9zaWduYWxfYykgLyBDQUxfTlVNX09GX0JFQUNPTlM7CisKKwlpZiAoYXZlcmFnZV9zaWdbMF0gPj0gYXZlcmFnZV9zaWdbMV0pIHsKKwkJbWF4X2F2ZXJhZ2Vfc2lnID0gYXZlcmFnZV9zaWdbMF07CisJCW1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kgPSAwOworCQlhY3RpdmVfY2hhaW5zID0gKDEgPDwgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7CisJfSBlbHNlIHsKKwkJbWF4X2F2ZXJhZ2Vfc2lnID0gYXZlcmFnZV9zaWdbMV07CisJCW1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kgPSAxOworCQlhY3RpdmVfY2hhaW5zID0gKDEgPDwgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7CisJfQorCisJaWYgKGF2ZXJhZ2Vfc2lnWzJdID49IG1heF9hdmVyYWdlX3NpZykgeworCQltYXhfYXZlcmFnZV9zaWcgPSBhdmVyYWdlX3NpZ1syXTsKKwkJbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSA9IDI7CisJCWFjdGl2ZV9jaGFpbnMgPSAoMSA8PCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKKwl9CisKKwlJV0xfREVCVUdfQ0FMSUIoImF2ZXJhZ2Vfc2lnOiBhICVkIGIgJWQgYyAlZFxuIiwKKwkJICAgICBhdmVyYWdlX3NpZ1swXSwgYXZlcmFnZV9zaWdbMV0sIGF2ZXJhZ2Vfc2lnWzJdKTsKKwlJV0xfREVCVUdfQ0FMSUIoIm1heF9hdmVyYWdlX3NpZyA9ICVkLCBhbnRlbm5hICVkXG4iLAorCQkgICAgIG1heF9hdmVyYWdlX3NpZywgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7CisKKwkvKiBDb21wYXJlIHNpZ25hbCBzdHJlbmd0aHMgZm9yIGFsbCAzIHJlY2VpdmVycy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChpICE9IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpIHsKKwkJCXMzMiByc3NpX2RlbHRhID0gKG1heF9hdmVyYWdlX3NpZyAtIGF2ZXJhZ2Vfc2lnW2ldKTsKKworCQkJLyogSWYgc2lnbmFsIGlzIHZlcnkgd2VhaywgY29tcGFyZWQgd2l0aAorCQkJICogc3Ryb25nZXN0LCBtYXJrIGl0IGFzIGRpc2Nvbm5lY3RlZC4gKi8KKwkJCWlmIChyc3NpX2RlbHRhID4gTUFYSU1VTV9BTExPV0VEX1BBVEhMT1NTKQorCQkJCWRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0gPSAxOworCQkJZWxzZQorCQkJCWFjdGl2ZV9jaGFpbnMgfD0gKDEgPDwgaSk7CisJCQlJV0xfREVCVUdfQ0FMSUIoImkgPSAlZCAgcnNzaURlbHRhID0gJWQgICIKKwkJCSAgICAgImRpc2Nvbm5fYXJyYXlbaV0gPSAlZFxuIiwKKwkJCSAgICAgaSwgcnNzaV9kZWx0YSwgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSk7CisJCX0KKwl9CisKKwludW1fdHhfY2hhaW5zID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0NIQUlOUzsgaSsrKSB7CisJCS8qIGxvb3BzIG9uIGFsbCB0aGUgYml0cyBvZgorCQkgKiBwcml2LT5od19zZXR0aW5nLnZhbGlkX3R4X2FudCAqLworCQl1OCBhbnRfbXNrID0gKDEgPDwgaSk7CisJCWlmICghKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiBhbnRfbXNrKSkKKwkJCWNvbnRpbnVlOworCisJCW51bV90eF9jaGFpbnMrKzsKKwkJaWYgKGRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0gPT0gMCkKKwkJCS8qIHRoZXJlIGlzIGEgVHggYW50ZW5uYSBjb25uZWN0ZWQgKi8KKwkJCWJyZWFrOworCQlpZiAobnVtX3R4X2NoYWlucyA9PSBwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSAmJgorCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldKSB7CisJCQkvKiBUaGlzIGlzIHRoZSBsYXN0IFRYIGFudGVubmEgYW5kIGlzIGFsc28KKwkJCSAqIGRpc2Nvbm5lY3RlZCBjb25uZWN0IGl0IGFueXdheSAqLworCQkJZGF0YS0+ZGlzY29ubl9hcnJheVtpXSA9IDA7CisJCQlhY3RpdmVfY2hhaW5zIHw9IGFudF9tc2s7CisJCQlJV0xfREVCVUdfQ0FMSUIoIkFsbCBUeCBjaGFpbnMgYXJlIGRpc2Nvbm5lY3RlZCBXL0EgLSAiCisJCQkJImRlY2xhcmUgJWQgYXMgY29ubmVjdGVkXG4iLCBpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJSVdMX0RFQlVHX0NBTElCKCJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCisJCQlhY3RpdmVfY2hhaW5zKTsKKworCS8qIFNhdmUgZm9yIHVzZSB3aXRoaW4gUlhPTiwgVFgsIFNDQU4gY29tbWFuZHMsIGV0Yy4gKi8KKwkvKnByaXYtPnZhbGlkX2FudGVubmEgPSBhY3RpdmVfY2hhaW5zOyovCisJLypGSVhNRTogc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiBSWCBjaGFpbnMgaW4gUlhPTiAqLworCisJLyogQW5hbHl6ZSBub2lzZSBmb3IgcnggYmFsYW5jZSAqLworCWF2ZXJhZ2Vfbm9pc2VbMF0gPSAoKGRhdGEtPmNoYWluX25vaXNlX2EpL0NBTF9OVU1fT0ZfQkVBQ09OUyk7CisJYXZlcmFnZV9ub2lzZVsxXSA9ICgoZGF0YS0+Y2hhaW5fbm9pc2VfYikvQ0FMX05VTV9PRl9CRUFDT05TKTsKKwlhdmVyYWdlX25vaXNlWzJdID0gKChkYXRhLT5jaGFpbl9ub2lzZV9jKS9DQUxfTlVNX09GX0JFQUNPTlMpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9DSEFJTlM7IGkrKykgeworCQlpZiAoIShkYXRhLT5kaXNjb25uX2FycmF5W2ldKSAmJgorCQkgICAoYXZlcmFnZV9ub2lzZVtpXSA8PSBtaW5fYXZlcmFnZV9ub2lzZSkpIHsKKwkJCS8qIFRoaXMgbWVhbnMgdGhhdCBjaGFpbiBpIGlzIGFjdGl2ZSBhbmQgaGFzCisJCQkgKiBsb3dlciBub2lzZSB2YWx1ZXMgc28gZmFyOiAqLworCQkJbWluX2F2ZXJhZ2Vfbm9pc2UgPSBhdmVyYWdlX25vaXNlW2ldOworCQkJbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pID0gaTsKKwkJfQorCX0KKworCUlXTF9ERUJVR19DQUxJQigiYXZlcmFnZV9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCisJCQlhdmVyYWdlX25vaXNlWzBdLCBhdmVyYWdlX25vaXNlWzFdLAorCQkJYXZlcmFnZV9ub2lzZVsyXSk7CisKKwlJV0xfREVCVUdfQ0FMSUIoIm1pbl9hdmVyYWdlX25vaXNlID0gJWQsIGFudGVubmEgJWRcbiIsCisJCQltaW5fYXZlcmFnZV9ub2lzZSwgbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pKTsKKworCXByaXYtPmNmZy0+b3BzLT51dGlscy0+Z2Fpbl9jb21wdXRhdGlvbihwcml2LCBhdmVyYWdlX25vaXNlLAorCQltaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2ksIG1pbl9hdmVyYWdlX25vaXNlKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKTsKKworCit2b2lkIGl3bF9yZXNldF9ydW5fdGltZV9jYWxpYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJbWVtc2V0KCYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSksIDAsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2RhdGEpKTsKKwltZW1zZXQoJihwcml2LT5jaGFpbl9ub2lzZV9kYXRhKSwgMCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfY2hhaW5fbm9pc2VfZGF0YSkpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQ0hBSU5TOyBpKyspCisJCXByaXYtPmNoYWluX25vaXNlX2RhdGEuZGVsdGFfZ2Fpbl9jb2RlW2ldID0KKwkJCQlDSEFJTl9OT0lTRV9ERUxUQV9HQUlOX0lOSVRfVkFMOworCisJLyogQXNrIGZvciBzdGF0aXN0aWNzIG5vdywgdGhlIHVDb2RlIHdpbGwgc2VuZCBub3RpZmljYXRpb24KKwkgKiBwZXJpb2RpY2FsbHkgYWZ0ZXIgYXNzb2NpYXRpb24gKi8KKwlpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgQ01EX0FTWU5DKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3Jlc2V0X3J1bl90aW1lX2NhbGliKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjOGUzMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmgKQEAgLTAsMCArMSw4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCisgKiBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBUb21hcyBXaW5rbGVyIDx0b21hcy53aW5rbGVyQGludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKiBCU0QgTElDRU5TRQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9faXdsX2NhbGliX2hfXworI2RlZmluZSBfX2l3bF9jYWxpYl9oX18KKworI2luY2x1ZGUgIml3bC1kZXYuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgorCit2b2lkIGl3bF9jaGFpbl9ub2lzZV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICpzdGF0X3Jlc3ApOwordm9pZCBpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyAqcmVzcCk7CisKK3ZvaWQgaXdsX2luaXRfc2Vuc2l0aXZpdHkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3Jlc2V0X3J1bl90aW1lX2NhbGliKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2NoYWluX25vaXNlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKworCWlmICghcHJpdi0+ZGlzYWJsZV9jaGFpbl9ub2lzZV9jYWwgJiYKKwkgICAgcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5jaGFpbl9ub2lzZV9yZXNldCkKKwkJcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5jaGFpbl9ub2lzZV9yZXNldChwcml2KTsKK30KKworI2VuZGlmIC8qIF9faXdsX2NhbGliX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWNvbW1hbmRzLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKaW5kZXggM2JjZDEwNy4uZTliYjFkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKQEAgLTYxLDkgKzYxLDkgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogUGxlYXNlIHVzZSB0aGlzIGZpbGUgKGl3bC00OTY1LWNvbW1hbmRzLmgpIG9ubHkgZm9yIHVDb2RlIEFQSSBkZWZpbml0aW9ucy4KKyAqIFBsZWFzZSB1c2UgdGhpcyBmaWxlIChpd2wtY29tbWFuZHMuaCkgb25seSBmb3IgdUNvZGUgQVBJIGRlZmluaXRpb25zLgogICogUGxlYXNlIHVzZSBpd2wtNDk2NS1ody5oIGZvciBoYXJkd2FyZS1yZWxhdGVkIGRlZmluaXRpb25zLgotICogUGxlYXNlIHVzZSBpd2wtNDk2NS5oIGZvciBkcml2ZXIgaW1wbGVtZW50YXRpb24gZGVmaW5pdGlvbnMuCisgKiBQbGVhc2UgdXNlIGl3bC1kZXYuaCBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb25zLgogICovCiAKICNpZm5kZWYgX19pd2w0OTY1X2NvbW1hbmRzX2hfXwpAQCAtOTMsNiArOTMsMTEgQEAKIAlSRVBMWV9MRURTX0NNRCA9IDB4NDgsCiAJUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCA9IDB4NGUsIC8qIDQ5NjUgb25seSAqLwogCisJLyogV2lNQVggY29leGlzdGVuY2UgKi8KKwlDT0VYX1BSSU9SSVRZX1RBQkxFX0NNRCA9IDB4NWEsCS8qNTAwMCBvbmx5ICovCisJQ09FWF9NRURJVU1fTk9USUZJQ0FUSU9OID0gMHg1YiwKKwlDT0VYX0VWRU5UX0NNRCA9IDB4NWMsCisKIAkvKiA4MDIuMTFoIHJlbGF0ZWQgKi8KIAlSQURBUl9OT1RJRklDQVRJT04gPSAweDcwLAkvKiBub3QgdXNlZCAqLwogCVJFUExZX1FVSUVUX0NNRCA9IDB4NzEsCQkvKiBub3QgdXNlZCAqLwpAQCAtMTIxLDYgKzEyNiw3IEBACiAJLyogTWlzY2VsbGFuZW91cyBjb21tYW5kcyAqLwogCVFVSUVUX05PVElGSUNBVElPTiA9IDB4OTYsCQkvKiBub3QgdXNlZCAqLwogCVJFUExZX1RYX1BXUl9UQUJMRV9DTUQgPSAweDk3LAorCVJFUExZX1RYX1BPV0VSX0RCTV9DTUQgPSAweDk4LAogCU1FQVNVUkVfQUJPUlRfTk9USUZJQ0FUSU9OID0gMHg5OSwJLyogbm90IHVzZWQgKi8KIAogCS8qIEJsdWV0b290aCBkZXZpY2UgY29leGlzdGFuY2UgY29uZmlnIGNvbW1hbmQgKi8KQEAgLTI2OSwyMSArMjc1LDEzIEBACiAgKiAgICAgICAgICAxMCBCIGFjdGl2ZSwgQSBpbmFjdGl2ZQogICogICAgICAgICAgMTEgQm90aCBhY3RpdmUKICAqLwotI2RlZmluZSBSQVRFX01DU19BTlRfUE9TICAgICAgIDE0Ci0jZGVmaW5lIFJBVEVfTUNTX0FOVF9BX01TSyAgICAgMHgwNDAwMAotI2RlZmluZSBSQVRFX01DU19BTlRfQl9NU0sgICAgIDB4MDgwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FCX01TSyAgICAweDBDMDAwCisjZGVmaW5lIFJBVEVfTUNTX0FOVF9QT1MgICAgICAxNAorI2RlZmluZSBSQVRFX01DU19BTlRfQV9NU0sgICAgMHgwNDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQl9NU0sgICAgMHgwODAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQ19NU0sgICAgMHgxMDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQUJDX01TSyAgMHgxQzAwMAogCi0KLS8qKgotICogc3RydWN0IGl3bDQ5NjVfdHhfcG93ZXIgLSB0eHBvd2VyIGZvcm1hdCB1c2VkIGluIFJFUExZX1NDQU5fQ01ECi0gKgotICogU2NhbiB1c2VzIG9ubHkgb25lIHRyYW5zbWl0dGVyLCBzbyBvbmx5IG9uZSBhbmFsb2cvZHNwIGdhaW4gcGFpciBpcyBuZWVkZWQuCi0gKi8KLXN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyIHsKLQl1OCB0eF9nYWluOwkJLyogZ2FpbiBmb3IgYW5hbG9nIHJhZGlvICovCi0JdTggZHNwX2F0dGVuOwkJLyogZ2FpbiBmb3IgRFNQICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgUkFURV9NQ1NfQU5UX0lOSVRfSU5EICAgMQogCiAjZGVmaW5lIFBPV0VSX1RBQkxFX05VTV9FTlRSSUVTCQkJMzMKICNkZWZpbmUgUE9XRVJfVEFCTEVfTlVNX0hUX09GRE1fRU5UUklFUwkJMzIKQEAgLTMzMyw2ICszMzEsMTkgQEAKIAlzdHJ1Y3QgdHhfcG93ZXJfZHVhbF9zdHJlYW0gcG93ZXJfdGJsW1BPV0VSX1RBQkxFX05VTV9FTlRSSUVTXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKioKKyAqIENvbW1hZCBSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5OAorICogc3RydWN0IGl3bDUwMDBfdHhfcG93ZXJfZGJtX2NtZAorICovCisjZGVmaW5lIElXTDUwX1RYX1BPV0VSX0FVVE8gMHg3ZgorI2RlZmluZSBJV0w1MF9UWF9QT1dFUl9OT19DTE9TRUQgKDB4MSA8PCA2KQorCitzdHJ1Y3QgaXdsNTAwMF90eF9wb3dlcl9kYm1fY21kIHsKKwlzOCBnbG9iYWxfbG10OyAvKmluIGhhbGYtZEJtIChlLmcuIDMwID0gMTUgZEJtKSAqLworCXU4IGZsYWdzOworCXM4IHNydl9jaGFuX2xtdDsgLyppbiBoYWxmLWRCbSAoZS5nLiAzMCA9IDE1IGRCbSkgKi8KKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAoMGEpCkBAIC0zNjcsNyArMzc4LDcgQEAKICAqIDMpICBUeCBnYWluIGNvbXBlbnNhdGlvbiB0byBiYWxhbmNlIDQ5NjUncyAyIFR4IGNoYWlucyBmb3IgTUlNTyBvcGVyYXRpb24sCiAgKiAgICAgZm9yIGVhY2ggb2YgNSBmcmVxdWVuY3kgcmFuZ2VzLgogICovCi1zdHJ1Y3QgaXdsNDk2NV9pbml0X2FsaXZlX3Jlc3Ageworc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3AgewogCXU4IHVjb2RlX21pbm9yOwogCXU4IHVjb2RlX21ham9yOwogCV9fbGUxNiByZXNlcnZlZDE7CkBAIC00NDMsNyArNDU0LDcgQEAKICAqIFRoZSBMaW51eCBkcml2ZXIgY2FuIHByaW50IGJvdGggbG9ncyB0byB0aGUgc3lzdGVtIGxvZyB3aGVuIGEgdUNvZGUgZXJyb3IKICAqIG9jY3Vycy4KICAqLwotc3RydWN0IGl3bDQ5NjVfYWxpdmVfcmVzcCB7CitzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3AgewogCXU4IHVjb2RlX21pbm9yOwogCXU4IHVjb2RlX21ham9yOwogCV9fbGUxNiByZXNlcnZlZDE7CkBAIC00NjcsNyArNDc4LDcgQEAKIC8qCiAgKiBSRVBMWV9FUlJPUiA9IDB4MiAocmVzcG9uc2Ugb25seSwgbm90IGEgY29tbWFuZCkKICAqLwotc3RydWN0IGl3bDQ5NjVfZXJyb3JfcmVzcCB7CitzdHJ1Y3QgaXdsX2Vycm9yX3Jlc3AgewogCV9fbGUzMiBlcnJvcl90eXBlOwogCXU4IGNtZF9pZDsKIAl1OCByZXNlcnZlZDE7CkBAIC01NDUsNiArNTU2LDggQEAKICNkZWZpbmUgUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX01TSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDMgPDwgMjUpCiAjZGVmaW5lIFJYT05fRkxHX0NIQU5ORUxfTU9ERV9QVVJFXzQwX01TSwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MSA8PCAyNSkKICNkZWZpbmUgUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX01JWEVEX01TSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDIgPDwgMjUpCisvKiBDVFMgdG8gc2VsZiAoaWYgc3BlYyBhbGxvd3MpIGZsYWcgKi8KKyNkZWZpbmUgUlhPTl9GTEdfU0VMRl9DVFNfRU4JCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MTw8MzApCiAKIC8qIHJ4X2NvbmZpZyBmaWx0ZXIgZmxhZ3MgKi8KIC8qIGFjY2VwdCBhbGwgZGF0YSBmcmFtZXMgKi8KQEAgLTU5OSw2ICs2MTIsNDYgQEAKIAl1OCBvZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qIDUwMDAgSFcganVzdCBleHRlbmQgdGhpcyBjbW1hbmQgKi8KK3N0cnVjdCBpd2xfcnhvbl9jbWQgeworCXU4IG5vZGVfYWRkcls2XTsKKwlfX2xlMTYgcmVzZXJ2ZWQxOworCXU4IGJzc2lkX2FkZHJbNl07CisJX19sZTE2IHJlc2VydmVkMjsKKwl1OCB3bGFwX2Jzc2lkX2FkZHJbNl07CisJX19sZTE2IHJlc2VydmVkMzsKKwl1OCBkZXZfdHlwZTsKKwl1OCBhaXJfcHJvcGFnYXRpb247CisJX19sZTE2IHJ4X2NoYWluOworCXU4IG9mZG1fYmFzaWNfcmF0ZXM7CisJdTggY2NrX2Jhc2ljX3JhdGVzOworCV9fbGUxNiBhc3NvY19pZDsKKwlfX2xlMzIgZmxhZ3M7CisJX19sZTMyIGZpbHRlcl9mbGFnczsKKwlfX2xlMTYgY2hhbm5lbDsKKwl1OCBvZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXM7CisJdTggb2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlczsKKwl1OCBvZmRtX2h0X3RyaXBsZV9zdHJlYW1fYmFzaWNfcmF0ZXM7CisJdTggcmVzZXJ2ZWQ1OworCV9fbGUxNiBhY3F1aXNpdGlvbl9kYXRhOworCV9fbGUxNiByZXNlcnZlZDY7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDUwMDBfcnhvbl9hc3NvY19jbWQgeworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCXU4IG9mZG1fYmFzaWNfcmF0ZXM7CisJdTggY2NrX2Jhc2ljX3JhdGVzOworCV9fbGUxNiByZXNlcnZlZDE7CisJdTggb2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOworCXU4IG9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7CisJdTggb2ZkbV9odF90cmlwbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOworCXU4IHJlc2VydmVkMjsKKwlfX2xlMTYgcnhfY2hhaW5fc2VsZWN0X2ZsYWdzOworCV9fbGUxNiBhY3F1aXNpdGlvbl9kYXRhOworCV9fbGUzMiByZXNlcnZlZDM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoKICAqIFJFUExZX1JYT05fQVNTT0MgPSAweDExIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KQEAgLTYxMyw2ICs2NjYsOSBAQAogCV9fbGUxNiByZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKworCiAvKgogICogUkVQTFlfUlhPTl9USU1JTkcgPSAweDE0IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KQEAgLTY2OSw3ICs3MjUsNyBAQAogICogdHJhbnNtaXNzaW9uIHJldHJ5LiAgRGV2aWNlIHVzZXMgY3dfbWF4IGFzIGEgYml0IG1hc2ssIEFORGVkIHdpdGggbmV3IENXCiAgKiB2YWx1ZSwgdG8gY2FwIHRoZSBDVyB2YWx1ZS4KICAqLwotc3RydWN0IGl3bDQ5NjVfYWNfcW9zIHsKK3N0cnVjdCBpd2xfYWNfcW9zIHsKIAlfX2xlMTYgY3dfbWluOwogCV9fbGUxNiBjd19tYXg7CiAJdTggYWlmc247CkBAIC02OTEsOSArNzQ3LDkgQEAKICAqIFRoaXMgY29tbWFuZCBzZXRzIHVwIHRpbWluZ3MgZm9yIGVhY2ggb2YgdGhlIDQgcHJpb3JpdGl6ZWQgRURDQSBUeCBGSUZPcwogICogMDogQmFja2dyb3VuZCwgMTogQmVzdCBFZmZvcnQsIDI6IFZpZGVvLCAzOiBWb2ljZS4KICAqLwotc3RydWN0IGl3bDQ5NjVfcW9zcGFyYW1fY21kIHsKK3N0cnVjdCBpd2xfcW9zcGFyYW1fY21kIHsKIAlfX2xlMzIgcW9zX2ZsYWdzOwotCXN0cnVjdCBpd2w0OTY1X2FjX3FvcyBhY1tBQ19OVU1dOworCXN0cnVjdCBpd2xfYWNfcW9zIGFjW0FDX05VTV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzExLDYgKzc2Nyw4IEBACiAjZGVmaW5lCUlXTF9TVEFfSUQJCTIKICNkZWZpbmUgSVdMNDk2NV9CUk9BRENBU1RfSUQJMzEKICNkZWZpbmUJSVdMNDk2NV9TVEFUSU9OX0NPVU5UCTMyCisjZGVmaW5lIElXTDUwMDBfQlJPQURDQVNUX0lECTE1CisjZGVmaW5lCUlXTDUwMDBfU1RBVElPTl9DT1VOVAkxNgogCiAjZGVmaW5lCUlXTF9TVEFUSU9OX0NPVU5UCTMyIAkvKiBNQVgoMzk0NSw0OTY1KSovCiAjZGVmaW5lCUlXTF9JTlZBTElEX1NUQVRJT04gCTI1NQpAQCAtNzY2LDYgKzgyNCwyMCBAQAogCXU4IGtleVsxNl07CQkvKiAxNi1ieXRlIHVuaWNhc3QgZGVjcnlwdGlvbiBrZXkgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiA1MDAwICovCitzdHJ1Y3QgaXdsX2tleWluZm8geworCV9fbGUxNiBrZXlfZmxhZ3M7CisJdTggdGtpcF9yeF90c2NfYnl0ZTI7CS8qIFRTQ1syXSBmb3Iga2V5IG1peCBwaDEgZGV0ZWN0aW9uICovCisJdTggcmVzZXJ2ZWQxOworCV9fbGUxNiB0a2lwX3J4X3R0YWtbNV07CS8qIDEwLWJ5dGUgdW5pY2FzdCBUS0lQIFRUQUsgKi8KKwl1OCBrZXlfb2Zmc2V0OworCXU4IHJlc2VydmVkMjsKKwl1OCBrZXlbMTZdOwkJLyogMTYtYnl0ZSB1bmljYXN0IGRlY3J5cHRpb24ga2V5ICovCisJX19sZTY0IHR4X3NlY3VyX3NlcV9jbnQ7CisJX19sZTY0IGh3X3RraXBfbWljX3J4X2tleTsKKwlfX2xlNjQgaHdfdGtpcF9taWNfdHhfa2V5OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qKgogICogc3RydWN0IHN0YV9pZF9tb2RpZnkKICAqIEBhZGRyW0VUSF9BTEVOXTogc3RhdGlvbidzIE1BQyBhZGRyZXNzCkBAIC04NDEsNiArOTEzLDM4IEBACiAJX19sZTMyIHJlc2VydmVkMjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiA1MDAwICovCitzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgeworCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLworCXU4IHJlc2VydmVkWzNdOworCXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHN0YTsKKwlzdHJ1Y3QgaXdsX2tleWluZm8ga2V5OworCV9fbGUzMiBzdGF0aW9uX2ZsYWdzOwkJLyogU1RBX0ZMR18qICovCisJX19sZTMyIHN0YXRpb25fZmxhZ3NfbXNrOwkvKiBTVEFfRkxHXyogKi8KKworCS8qIGJpdCBmaWVsZCB0byBkaXNhYmxlICgxKSBvciBlbmFibGUgKDApIFR4IGZvciBUcmFmZmljIElEIChUSUQpCisJICogY29ycmVzcG9uZGluZyB0byBiaXQgKGUuZy4gYml0IDUgY29udHJvbHMgVElEIDUpLgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9USURfRElTQUJMRV9UWCB0byB1c2UgdGhpcyBmaWVsZC4gKi8KKwlfX2xlMTYgdGlkX2Rpc2FibGVfdHg7CisKKwlfX2xlMTYJcmVzZXJ2ZWQxOworCisJLyogVElEIGZvciB3aGljaCB0byBhZGQgYmxvY2stYWNrIHN1cHBvcnQuCisJICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCisJdTggYWRkX2ltbWVkaWF0ZV9iYV90aWQ7CisKKwkvKiBUSUQgZm9yIHdoaWNoIHRvIHJlbW92ZSBibG9jay1hY2sgc3VwcG9ydC4KKwkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfREVMQkFfVElEX01TSyB0byB1c2UgdGhpcyBmaWVsZC4gKi8KKwl1OCByZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKKworCS8qIFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBmb3IgYWRkZWQgYmxvY2stYWNrIHN1cHBvcnQuCisJICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCisJX19sZTE2IGFkZF9pbW1lZGlhdGVfYmFfc3NuOworCisJX19sZTMyIHJlc2VydmVkMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKICNkZWZpbmUgQUREX1NUQV9TVUNDRVNTX01TSwkJMHgxCiAjZGVmaW5lIEFERF9TVEFfTk9fUk9PTV9JTl9UQUJMRQkweDIKICNkZWZpbmUgQUREX1NUQV9OT19CTE9DS19BQ0tfUkVTT1VSQ0UJMHg0CkBAIC04NDgsMTAgKzk1MiwyOCBAQAogLyoKICAqIFJFUExZX0FERF9TVEEgPSAweDE4IChyZXNwb25zZSkKICAqLwotc3RydWN0IGl3bDQ5NjVfYWRkX3N0YV9yZXNwIHsKK3N0cnVjdCBpd2xfYWRkX3N0YV9yZXNwIHsKIAl1OCBzdGF0dXM7CS8qIEFERF9TVEFfKiAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgUkVNX1NUQV9TVUNDRVNTX01TSyAgICAgICAgICAgICAgMHgxCisvKgorICogIFJFUExZX1JFTV9TVEEgPSAweDE5IChyZXNwb25zZSkKKyAqLworc3RydWN0IGl3bF9yZW1fc3RhX3Jlc3AgeworCXU4IHN0YXR1czsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogIFJFUExZX1JFTV9TVEEgPSAweDE5IChjb21tYW5kKQorICovCitzdHJ1Y3QgaXdsX3JlbV9zdGFfY21kIHsKKwl1OCBudW1fc3RhOyAgICAgLyogbnVtYmVyIG9mIHJlbW92ZWQgc3RhdGlvbnMgKi8KKwl1OCByZXNlcnZlZFszXTsKKwl1OCBhZGRyW0VUSF9BTEVOXTsgLyogTUFDIGFkZHIgb2YgdGhlIGZpcnN0IHN0YXRpb24gKi8KKwl1OCByZXNlcnZlZDJbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoKICAqIFJFUExZX1dFUF9LRVkgPSAweDIwCiAgKi8KQEAgLTg3NSw2ICs5OTcsNyBAQAogI2RlZmluZSBXRVBfS0VZX1dFUF9UWVBFIDEKICNkZWZpbmUgV0VQX0tFWVNfTUFYIDQKICNkZWZpbmUgV0VQX0lOVkFMSURfT0ZGU0VUIDB4ZmYKKyNkZWZpbmUgV0VQX0tFWV9MRU5fNjQgNQogI2RlZmluZSBXRVBfS0VZX0xFTl8xMjggMTMKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTAxOCw2ICsxMTQxLDExIEBACiAKIC8qIFJFUExZX1RYIFR4IGZsYWdzIGZpZWxkICovCiAKKy8qIDE6IFVzZSBSVFMvQ1RTIHByb3RvY29sIG9yIENUUy10by1zZWxmIGlmIHNwZWMgYWxvd3MgaXQKKyAqIGJlZm9yZSB0aGlzIGZyYW1lLiBpZiBDVFMtdG8tc2VsZiByZXF1aXJlZCBjaGVjaworICogUlhPTl9GTEdfU0VMRl9DVFNfRU4gc3RhdHVzLiAqLworI2RlZmluZSBUWF9DTURfRkxHX1JUU19DVFNfTVNLIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSA8PCAwKQorCiAvKiAxOiBVc2UgUmVxdWVzdC1Uby1TZW5kIHByb3RvY29sIGJlZm9yZSB0aGlzIGZyYW1lLgogICogTXV0dWFsbHkgZXhjbHVzaXZlIHZzLiBUWF9DTURfRkxHX0NUU19NU0suICovCiAjZGVmaW5lIFRYX0NNRF9GTEdfUlRTX01TSyBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEgPDwgMSkKQEAgLTExMDAsNiArMTIyOCwxNCBAQAogI2RlZmluZSBUWF9DTURfU0VDX0tFWTEyOAkweDA4CiAKIC8qCisgKiBzZWN1cml0eSBvdmVyaGVhZCBzaXplcworICovCisjZGVmaW5lIFdFUF9JVl9MRU4gNAorI2RlZmluZSBXRVBfSUNWX0xFTiA0CisjZGVmaW5lIENDTVBfTUlDX0xFTiA4CisjZGVmaW5lIFRLSVBfSUNWX0xFTiA0CisKKy8qCiAgKiA0OTY1IHVDb2RlIHVwZGF0ZXMgdGhlc2UgVHggYXR0ZW1wdCBjb3VudCB2YWx1ZXMgaW4gaG9zdCBEUkFNLgogICogVXNlZCBmb3IgbWFuYWdpbmcgVHggcmV0cmllcyB3aGVuIGV4cGVjdGluZyBibG9jay1hY2tzLgogICogRHJpdmVyIHNob3VsZCBzZXQgdGhlc2UgZmllbGRzIHRvIDAuCkBAIC0xMTEzLDcgKzEyNDksNyBAQAogLyoKICAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKICAqLwotc3RydWN0IGl3bDQ5NjVfdHhfY21kIHsKK3N0cnVjdCBpd2xfdHhfY21kIHsKIAkvKgogCSAqIE1QRFUgYnl0ZSBjb3VudDoKIAkgKiBNQUMgaGVhZGVyICgyNC8yNi8zMC8zMiBieXRlcykgKyAyIGJ5dGVzIHBhZCBpZiAyNi8zMCBoZWFkZXIgc2l6ZSwKQEAgLTEyNTksNiArMTM5NSwxNSBAQAogCVRYX0FCT1JUX1JFUVVJUkVEX01TSyA9IDB4ODAwMDAwMDAsCS8qIGJpdHMgMzE6MzEgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IGl3bF9pc190eF9zdWNjZXNzKHUzMiBzdGF0dXMpCit7CisJc3RhdHVzICY9IFRYX1NUQVRVU19NU0s7CisJcmV0dXJuIChzdGF0dXMgPT0gVFhfU1RBVFVTX1NVQ0NFU1MpCisJICAgIHx8IChzdGF0dXMgPT0gVFhfU1RBVFVTX0RJUkVDVF9ET05FKTsKK30KKworCisKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRYIGFnZ3JlZ2F0aW9uIHN0YXR1cwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KQEAgLTEzMTMsNiArMTQ1OCwxMSBAQAogICogICAgIHdpdGhpbiB0aGUgc2VuZGluZyBzdGF0aW9uICh0aGlzIDQ5NjUpLCByYXRoZXIgdGhhbiB3aGV0aGVyIGl0IHdhcwogICogICAgIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseSBieSB0aGUgZGVzdGluYXRpb24gc3RhdGlvbi4KICAqLworc3RydWN0IGFnZ190eF9zdGF0dXMgeworCV9fbGUxNiBzdGF0dXM7CisJX19sZTE2IHNlcXVlbmNlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w0OTY1X3R4X3Jlc3AgewogCXU4IGZyYW1lX2NvdW50OwkJLyogMSBubyBhZ2dyZWdhdGlvbiwgPjEgYWdncmVnYXRpb24gKi8KIAl1OCBidF9raWxsX2NvdW50OwkvKiAjIGJsb2NrZWQgYnkgYmx1ZXRvb3RoICh1bnVzZWQgZm9yIGFnZykgKi8KQEAgLTEzNDQsMzQgKzE0OTQsNTYgQEAKIAkgKiAgICAgICAgICAgICAgICAgICB0YWJsZSBlbnRyeSB1c2VkIGZvciBhbGwgZnJhbWVzIGluIHRoZSBuZXcgYWdnLgogCSAqICAgICAgICAgICAzMS0xNjogIFNlcXVlbmNlICMgZm9yIHRoaXMgZnJhbWUncyBUeCBjbWQgKG5vdCBTU04hKQogCSAqLwotCV9fbGUzMiBzdGF0dXM7CS8qIFRYIHN0YXR1cyAoZm9yIGFnZ3JlZ2F0aW9uIHN0YXR1cyBvZiAxc3QgZnJhbWUpICovCisJdW5pb24geworCQlfX2xlMzIgc3RhdHVzOworCQlzdHJ1Y3QgYWdnX3R4X3N0YXR1cyBhZ2dfc3RhdHVzWzBdOyAvKiBmb3IgZWFjaCBhZ2cgZnJhbWUgKi8KKwl9IHU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IGFnZ190eF9zdGF0dXMgewotCV9fbGUxNiBzdGF0dXM7Ci0JX19sZTE2IHNlcXVlbmNlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CitzdHJ1Y3QgaXdsNTAwMF90eF9yZXNwIHsKKwl1OCBmcmFtZV9jb3VudDsJCS8qIDEgbm8gYWdncmVnYXRpb24sID4xIGFnZ3JlZ2F0aW9uICovCisJdTggYnRfa2lsbF9jb3VudDsJLyogIyBibG9ja2VkIGJ5IGJsdWV0b290aCAodW51c2VkIGZvciBhZ2cpICovCisJdTggZmFpbHVyZV9ydHM7CQkvKiAjIGZhaWx1cmVzIGR1ZSB0byB1bnN1Y2Nlc3NmdWwgUlRTICovCisJdTggZmFpbHVyZV9mcmFtZTsJLyogIyBmYWlsdXJlcyBkdWUgdG8gbm8gQUNLICh1bnVzZWQgZm9yIGFnZykgKi8KIAotc3RydWN0IGl3bDQ5NjVfdHhfcmVzcF9hZ2cgewotCXU4IGZyYW1lX2NvdW50OyAgICAgICAgIC8qIDEgbm8gYWdncmVnYXRpb24sID4xIGFnZ3JlZ2F0aW9uICovCi0JdTggcmVzZXJ2ZWQxOwotCXU4IGZhaWx1cmVfcnRzOwotCXU4IGZhaWx1cmVfZnJhbWU7Ci0JX19sZTMyIHJhdGVfbl9mbGFnczsKLQlfX2xlMTYgd2lyZWxlc3NfbWVkaWFfdGltZTsKLQlfX2xlMTYgcmVzZXJ2ZWQzOwotCV9fbGUzMiBwYV9wb3dlcjE7CisJLyogRm9yIG5vbi1hZ2c6ICBSYXRlIGF0IHdoaWNoIGZyYW1lIHdhcyBzdWNjZXNzZnVsLgorCSAqIEZvciBhZ2c6ICBSYXRlIGF0IHdoaWNoIGFsbCBmcmFtZXMgd2VyZSB0cmFuc21pdHRlZC4gKi8KKwlfX2xlMzIgcmF0ZV9uX2ZsYWdzOwkvKiBSQVRFX01DU18qICAqLworCisJLyogRm9yIG5vbi1hZ2c6ICBSVFMgKyBDVFMgKyBmcmFtZSB0eCBhdHRlbXB0cyB0aW1lICsgQUNLLgorCSAqIEZvciBhZ2c6ICBSVFMgKyBDVFMgKyBhZ2dyZWdhdGlvbiB0eCB0aW1lICsgYmxvY2stYWNrIHRpbWUuICovCisJX19sZTE2IHdpcmVsZXNzX21lZGlhX3RpbWU7CS8qIHVTZWNzICovCisKKwlfX2xlMTYgcmVzZXJ2ZWQ7CisJX19sZTMyIHBhX3Bvd2VyMTsJLyogUkYgcG93ZXIgYW1wbGlmaWVyIG1lYXN1cmVtZW50IChub3QgdXNlZCkgKi8KIAlfX2xlMzIgcGFfcG93ZXIyOwotCXN0cnVjdCBhZ2dfdHhfc3RhdHVzIHN0YXR1czsgICAgLyogVFggc3RhdHVzIChmb3IgYWdncmVnYXRpb24gc3RhdHVzICovCi0JCQkJCS8qIG9mIDFzdCBmcmFtZSkgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisJX19sZTMyIHRmZF9pbmZvOworCV9fbGUxNiBzZXFfY3RsOworCV9fbGUxNiBieXRlX2NudDsKKwlfX2xlMzIgdGxjX2luZm87CisJLyoKKwkgKiBGb3Igbm9uLWFnZzogIGZyYW1lIHN0YXR1cyBUWF9TVEFUVVNfKgorCSAqIEZvciBhZ2c6ICBzdGF0dXMgb2YgMXN0IGZyYW1lLCBBR0dfVFhfU1RBVEVfKjsgb3RoZXIgZnJhbWUgc3RhdHVzCisJICogICAgICAgICAgIGZpZWxkcyBmb2xsb3cgdGhpcyBvbmUsIHVwIHRvIGZyYW1lX2NvdW50LgorCSAqICAgICAgICAgICBCaXQgZmllbGRzOgorCSAqICAgICAgICAgICAxMS0gMDogIEFHR19UWF9TVEFURV8qIHN0YXR1cyBjb2RlCisJICogICAgICAgICAgIDE1LTEyOiAgUmV0cnkgY291bnQgZm9yIDFzdCBmcmFtZSBpbiBhZ2dyZWdhdGlvbiAocmV0cmllcworCSAqICAgICAgICAgICAgICAgICAgIG9jY3VyIGlmIHR4IGZhaWxlZCBmb3IgdGhpcyBmcmFtZSB3aGVuIGl0IHdhcyBhCisJICogICAgICAgICAgICAgICAgICAgbWVtYmVyIG9mIGEgcHJldmlvdXMgYWdncmVnYXRpb24gYmxvY2spLiAgSWYgcmF0ZQorCSAqICAgICAgICAgICAgICAgICAgIHNjYWxpbmcgaXMgdXNlZCwgcmV0cnkgY291bnQgaW5kaWNhdGVzIHRoZSByYXRlCisJICogICAgICAgICAgICAgICAgICAgdGFibGUgZW50cnkgdXNlZCBmb3IgYWxsIGZyYW1lcyBpbiB0aGUgbmV3IGFnZy4KKwkgKiAgICAgICAgICAgMzEtMTY6ICBTZXF1ZW5jZSAjIGZvciB0aGlzIGZyYW1lJ3MgVHggY21kIChub3QgU1NOISkKKwkgKi8KKwlzdHJ1Y3QgYWdnX3R4X3N0YXR1cyBzdGF0dXM7CS8qIFRYIHN0YXR1cyAoaW4gYWdncmVnYXRpb24gLQorCQkJCQkgKiBzdGF0dXMgb2YgMXN0IGZyYW1lKSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAvKgogICogUkVQTFlfQ09NUFJFU1NFRF9CQSA9IDB4YzUgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCiAgKgogICogUmVwb3J0cyBCbG9jay1BY2tub3dsZWRnZSBmcm9tIHJlY2lwaWVudCBzdGF0aW9uCiAgKi8KLXN0cnVjdCBpd2w0OTY1X2NvbXByZXNzZWRfYmFfcmVzcCB7CitzdHJ1Y3QgaXdsX2NvbXByZXNzZWRfYmFfcmVzcCB7CiAJX19sZTMyIHN0YV9hZGRyX2xvMzI7CiAJX19sZTE2IHN0YV9hZGRyX2hpMTY7CiAJX19sZTE2IHJlc2VydmVkOwpAQCAtMTg1Myw2ICsyMDI1LDcgQEAKICNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJX19jb25zdGFudF9jcHVfdG9fbGUxNigxIDw8IDApCiAjZGVmaW5lIElXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEgPDwgMikKICNkZWZpbmUgSVdMX1BPV0VSX1BDSV9QTV9NU0sJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEgPDwgMykKKyNkZWZpbmUgSVdMX1BPV0VSX0ZBU1RfUEQJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEgPDwgNCkKIAogc3RydWN0IGl3bDQ5NjVfcG93ZXJ0YWJsZV9jbWQgewogCV9fbGUxNiBmbGFnczsKQEAgLTE5MTQsNyArMjA4Nyw3IEBACiAjZGVmaW5lIFJGX0NBUkRfRElTQUJMRUQgICAweDA0CiAjZGVmaW5lIFJYT05fQ0FSRF9ESVNBQkxFRCAweDEwCiAKLXN0cnVjdCBpd2w0OTY1X2N0X2tpbGxfY29uZmlnIHsKK3N0cnVjdCBpd2xfY3Rfa2lsbF9jb25maWcgewogCV9fbGUzMiAgIHJlc2VydmVkOwogCV9fbGUzMiAgIGNyaXRpY2FsX3RlbXBlcmF0dXJlX007CiAJX19sZTMyICAgY3JpdGljYWxfdGVtcGVyYXR1cmVfUjsKQEAgLTE5MjYsOCArMjA5OSwxMSBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2RlZmluZSBTQ0FOX0NIQU5ORUxfVFlQRV9QQVNTSVZFIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCkKKyNkZWZpbmUgU0NBTl9DSEFOTkVMX1RZUEVfQUNUSVZFICBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpCisKIC8qKgotICogc3RydWN0IGl3bDQ5NjVfc2Nhbl9jaGFubmVsIC0gZW50cnkgaW4gUkVQTFlfU0NBTl9DTUQgY2hhbm5lbCB0YWJsZQorICogc3RydWN0IGl3bF9zY2FuX2NoYW5uZWwgLSBlbnRyeSBpbiBSRVBMWV9TQ0FOX0NNRCBjaGFubmVsIHRhYmxlCiAgKgogICogT25lIGZvciBlYWNoIGNoYW5uZWwgaW4gdGhlIHNjYW4gbGlzdC4KICAqIEVhY2ggY2hhbm5lbCBjYW4gaW5kZXBlbmRlbnRseSBzZWxlY3Q6CkBAIC0xOTM3LDcgKzIxMTMsNyBAQAogICogICAgIHF1aWV0X3BsY3BfdGgsIGdvb2RfQ1JDX3RoKQogICoKICAqIFRvIGF2b2lkIHVDb2RlIGVycm9ycywgbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgYXJlIHRydWUgKHNlZSBjb21tZW50cwotICogdW5kZXIgc3RydWN0IGl3bDQ5NjVfc2Nhbl9jbWQgYWJvdXQgbWF4X291dF90aW1lIGFuZCBxdWlldF90aW1lKToKKyAqIHVuZGVyIHN0cnVjdCBpd2xfc2Nhbl9jbWQgYWJvdXQgbWF4X291dF90aW1lIGFuZCBxdWlldF90aW1lKToKICAqIDEpICBJZiB1c2luZyBwYXNzaXZlX2R3ZWxsIChpLmUuIHBhc3NpdmVfZHdlbGwgIT0gMCk6CiAgKiAgICAgYWN0aXZlX2R3ZWxsIDw9IHBhc3NpdmVfZHdlbGwgKDwgbWF4X291dF90aW1lIGlmIG1heF9vdXRfdGltZSAhPSAwKQogICogMikgIHF1aWV0X3RpbWUgPD0gYWN0aXZlX2R3ZWxsCkBAIC0xOTQ1LDM3ICsyMTIxLDM4IEBACiAgKiAgICAgcGFzc2l2ZV9kd2VsbCA8IG1heF9vdXRfdGltZQogICogICAgIGFjdGl2ZV9kd2VsbCA8IG1heF9vdXRfdGltZQogICovCi1zdHJ1Y3QgaXdsNDk2NV9zY2FuX2NoYW5uZWwgeworc3RydWN0IGl3bF9zY2FuX2NoYW5uZWwgewogCS8qCiAJICogdHlwZSBpcyBkZWZpbmVkIGFzOgogCSAqIDA6MCAxID0gYWN0aXZlLCAwID0gcGFzc2l2ZQotCSAqIDE6NCBTU0lEIGRpcmVjdCBiaXQgbWFwOyBpZiBhIGJpdCBpcyBzZXQsIHRoZW4gY29ycmVzcG9uZGluZworCSAqIDE6MjAgU1NJRCBkaXJlY3QgYml0IG1hcDsgaWYgYSBiaXQgaXMgc2V0LCB0aGVuIGNvcnJlc3BvbmRpbmcKIAkgKiAgICAgU1NJRCBJRSBpcyB0cmFuc21pdHRlZCBpbiBwcm9iZSByZXF1ZXN0LgotCSAqIDU6NyByZXNlcnZlZAorCSAqIDIxOjMxIHJlc2VydmVkCiAJICovCi0JdTggdHlwZTsKLQl1OCBjaGFubmVsOwkvKiBiYW5kIGlzIHNlbGVjdGVkIGJ5IGl3bDQ5NjVfc2Nhbl9jbWQgImZsYWdzIiBmaWVsZCAqLwotCXN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyIHRwYzsKKwlfX2xlMzIgdHlwZTsKKwlfX2xlMTYgY2hhbm5lbDsJLyogYmFuZCBpcyBzZWxlY3RlZCBieSBpd2xfc2Nhbl9jbWQgImZsYWdzIiBmaWVsZCAqLworCXU4IHR4X2dhaW47CQkvKiBnYWluIGZvciBhbmFsb2cgcmFkaW8gKi8KKwl1OCBkc3BfYXR0ZW47CQkvKiBnYWluIGZvciBEU1AgKi8KIAlfX2xlMTYgYWN0aXZlX2R3ZWxsOwkvKiBpbiAxMDI0LXVTZWMgVFUgKHRpbWUgdW5pdHMpLCB0eXAgNS01MCAqLwogCV9fbGUxNiBwYXNzaXZlX2R3ZWxsOwkvKiBpbiAxMDI0LXVTZWMgVFUgKHRpbWUgdW5pdHMpLCB0eXAgMjAtNTAwICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoqCi0gKiBzdHJ1Y3QgaXdsNDk2NV9zc2lkX2llIC0gZGlyZWN0ZWQgc2NhbiBuZXR3b3JrIGluZm9ybWF0aW9uIGVsZW1lbnQKKyAqIHN0cnVjdCBpd2xfc3NpZF9pZSAtIGRpcmVjdGVkIHNjYW4gbmV0d29yayBpbmZvcm1hdGlvbiBlbGVtZW50CiAgKgogICogVXAgdG8gNCBvZiB0aGVzZSBtYXkgYXBwZWFyIGluIFJFUExZX1NDQU5fQ01ELCBzZWxlY3RlZCBieSAidHlwZSIgZmllbGQKICAqIGluIHN0cnVjdCBpd2w0OTY1X3NjYW5fY2hhbm5lbDsgZWFjaCBjaGFubmVsIG1heSBzZWxlY3QgZGlmZmVyZW50IHNzaWRzIGZyb20KICAqIGFtb25nIHRoZSA0IGVudHJpZXMuICBTU0lEIElFcyBnZXQgdHJhbnNtaXR0ZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBlbnRyeS4KICAqLwotc3RydWN0IGl3bDQ5NjVfc3NpZF9pZSB7CitzdHJ1Y3QgaXdsX3NzaWRfaWUgewogCXU4IGlkOwogCXU4IGxlbjsKIAl1OCBzc2lkWzMyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIFBST0JFX09QVElPTl9NQVggICAgICAgIDB4NAorI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYICAgICAgICAJMHgxNAogI2RlZmluZSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHhGRkZGRkZGRikKLSNkZWZpbmUgSVdMX0dPT0RfQ1JDX1RICQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpCisjZGVmaW5lIElXTF9HT09EX0NSQ19USAkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSkKICNkZWZpbmUgSVdMX01BWF9TQ0FOX1NJWkUgMTAyNAogCiAvKgpAQCAtMjAyOCw5ICsyMjA1LDkgQEAKICAqIERyaXZlciBtdXN0IHVzZSBzZXBhcmF0ZSBzY2FuIGNvbW1hbmRzIGZvciAyLjQgdnMuIDUgR0h6IGJhbmRzLgogICoKICAqIFRvIGF2b2lkIHVDb2RlIGVycm9ycywgc2VlIHRpbWluZyByZXN0cmljdGlvbnMgZGVzY3JpYmVkIHVuZGVyCi0gKiBzdHJ1Y3QgaXdsNDk2NV9zY2FuX2NoYW5uZWwuCisgKiBzdHJ1Y3QgaXdsX3NjYW5fY2hhbm5lbC4KICAqLwotc3RydWN0IGl3bDQ5NjVfc2Nhbl9jbWQgeworc3RydWN0IGl3bF9zY2FuX2NtZCB7CiAJX19sZTE2IGxlbjsKIAl1OCByZXNlcnZlZDA7CiAJdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KQEAgLTIwNTEsMTAgKzIyMjgsMTAgQEAKIAogCS8qIEZvciBhY3RpdmUgc2NhbnMgKHNldCB0byBhbGwtMHMgZm9yIHBhc3NpdmUgc2NhbnMpLgogCSAqIERvZXMgbm90IGluY2x1ZGUgcGF5bG9hZC4gIE11c3Qgc3BlY2lmeSBUeCByYXRlOyBubyByYXRlIHNjYWxpbmcuICovCi0Jc3RydWN0IGl3bDQ5NjVfdHhfY21kIHR4X2NtZDsKKwlzdHJ1Y3QgaXdsX3R4X2NtZCB0eF9jbWQ7CiAKIAkvKiBGb3IgZGlyZWN0ZWQgYWN0aXZlIHNjYW5zIChzZXQgdG8gYWxsLTBzIG90aGVyd2lzZSkgKi8KLQlzdHJ1Y3QgaXdsNDk2NV9zc2lkX2llIGRpcmVjdF9zY2FuW1BST0JFX09QVElPTl9NQVhdOworCXN0cnVjdCBpd2xfc3NpZF9pZSBkaXJlY3Rfc2NhbltQUk9CRV9PUFRJT05fTUFYXTsKIAogCS8qCiAJICogUHJvYmUgcmVxdWVzdCBmcmFtZSwgZm9sbG93ZWQgYnkgY2hhbm5lbCBsaXN0LgpAQCAtMjA4MiwxNCArMjI1OSwxNCBAQAogLyoKICAqIFJFUExZX1NDQU5fQ01EID0gMHg4MCAocmVzcG9uc2UpCiAgKi8KLXN0cnVjdCBpd2w0OTY1X3NjYW5yZXFfbm90aWZpY2F0aW9uIHsKK3N0cnVjdCBpd2xfc2NhbnJlcV9ub3RpZmljYXRpb24gewogCV9fbGUzMiBzdGF0dXM7CQkvKiAxOiBva2F5LCAyOiBjYW5ub3QgZnVsZmlsbCByZXF1ZXN0ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoKICAqIFNDQU5fU1RBUlRfTk9USUZJQ0FUSU9OID0gMHg4MiAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCiAgKi8KLXN0cnVjdCBpd2w0OTY1X3NjYW5zdGFydF9ub3RpZmljYXRpb24geworc3RydWN0IGl3bF9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uIHsKIAlfX2xlMzIgdHNmX2xvdzsKIAlfX2xlMzIgdHNmX2hpZ2g7CiAJX19sZTMyIGJlYWNvbl90aW1lcjsKQEAgLTIxMDYsNyArMjI4Myw3IEBACiAvKgogICogU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTiA9IDB4ODMgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQogICovCi1zdHJ1Y3QgaXdsNDk2NV9zY2FucmVzdWx0c19ub3RpZmljYXRpb24geworc3RydWN0IGl3bF9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gewogCXU4IGNoYW5uZWw7CiAJdTggYmFuZDsKIAl1OCByZXNlcnZlZFsyXTsKQEAgLTIxMTgsNyArMjI5NSw3IEBACiAvKgogICogU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04gPSAweDg0IChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKICAqLwotc3RydWN0IGl3bDQ5NjVfc2NhbmNvbXBsZXRlX25vdGlmaWNhdGlvbiB7CitzdHJ1Y3QgaXdsX3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gewogCXU4IHNjYW5uZWRfY2hhbm5lbHM7CiAJdTggc3RhdHVzOwogCXU4IHJlc2VydmVkOwpAQCAtMjE0OCw3ICsyMzI1LDcgQEAKICAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqLwogc3RydWN0IGl3bDQ5NjVfdHhfYmVhY29uX2NtZCB7Ci0Jc3RydWN0IGl3bDQ5NjVfdHhfY21kIHR4OworCXN0cnVjdCBpd2xfdHhfY21kIHR4OwogCV9fbGUxNiB0aW1faWR4OwogCXU4IHRpbV9zaXplOwogCXU4IHJlc2VydmVkMTsKQEAgLTIzMzksNyArMjUxNiw3IEBACiAgKi8KICNkZWZpbmUgSVdMX1NUQVRTX0NPTkZfQ0xFQVJfU1RBVFMgX19jb25zdGFudF9jcHVfdG9fbGUzMigweDEpCS8qIHNlZSBhYm92ZSAqLwogI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9ESVNBQkxFX05PVElGIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgyKS8qIHNlZSBhYm92ZSAqLwotc3RydWN0IGl3bDQ5NjVfc3RhdGlzdGljc19jbWQgeworc3RydWN0IGl3bF9zdGF0aXN0aWNzX2NtZCB7CiAJX19sZTMyIGNvbmZpZ3VyYXRpb25fZmxhZ3M7CS8qIElXTF9TVEFUU19DT05GXyogKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0yMzYwLDcgKzI1MzcsNyBAQAogICovCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyAgICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgyKQogI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19GQVRfTU9ERV9NU0sgICAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4OCkKLXN0cnVjdCBpd2w0OTY1X25vdGlmX3N0YXRpc3RpY3Mgeworc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgZmxhZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKIAlzdHJ1Y3Qgc3RhdGlzdGljc190eCB0eDsKQEAgLTI1NTksNyArMjczNiw3IEBACiAgKi8KIAogLyoKLSAqIFRhYmxlIGVudHJpZXMgaW4gU0VOU0lUSVZJVFlfQ01EIChzdHJ1Y3QgaXdsNDk2NV9zZW5zaXRpdml0eV9jbWQpCisgKiBUYWJsZSBlbnRyaWVzIGluIFNFTlNJVElWSVRZX0NNRCAoc3RydWN0IGl3bF9zZW5zaXRpdml0eV9jbWQpCiAgKi8KICNkZWZpbmUgSERfVEFCTEVfU0laRSAgKDExKQkvKiBudW1iZXIgb2YgZW50cmllcyAqLwogI2RlZmluZSBIRF9NSU5fRU5FUkdZX0NDS19ERVRfSU5ERVggICAgICAgICAgICAgICAgICgwKQkvKiB0YWJsZSBpbmRleGVzICovCkBAIC0yNTc0LDE4ICsyNzUxLDE4IEBACiAjZGVmaW5lIEhEX0FVVE9fQ09SUjQwX1g0X1RIX0FERF9NSU5fSU5ERVggICAgICAgICAgKDkpCiAjZGVmaW5lIEhEX09GRE1fRU5FUkdZX1RIX0lOX0lOREVYICAgICAgICAgICAgICAgICAgKDEwKQogCi0vKiBDb250cm9sIGZpZWxkIGluIHN0cnVjdCBpd2w0OTY1X3NlbnNpdGl2aXR5X2NtZCAqLworLyogQ29udHJvbCBmaWVsZCBpbiBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZCAqLwogI2RlZmluZSBTRU5TSVRJVklUWV9DTURfQ09OVFJPTF9ERUZBVUxUX1RBQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkKICNkZWZpbmUgU0VOU0lUSVZJVFlfQ01EX0NPTlRST0xfV09SS19UQUJMRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpCiAKIC8qKgotICogc3RydWN0IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfY21kCisgKiBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZAogICogQGNvbnRyb2w6ICAoMSkgdXBkYXRlcyB3b3JraW5nIHRhYmxlLCAoMCkgdXBkYXRlcyBkZWZhdWx0IHRhYmxlCiAgKiBAdGFibGU6ICBlbmVyZ3kgdGhyZXNob2xkIHZhbHVlcywgdXNlIEhEXyogYXMgaW5kZXggaW50byB0YWJsZQogICoKICAqIEFsd2F5cyB1c2UgIjEiIGluICJjb250cm9sIiB0byB1cGRhdGUgdUNvZGUncyB3b3JraW5nIHRhYmxlIGFuZCBEU1AuCiAgKi8KLXN0cnVjdCBpd2w0OTY1X3NlbnNpdGl2aXR5X2NtZCB7CitzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZCB7CiAJX19sZTE2IGNvbnRyb2w7CQkJLyogYWx3YXlzIHVzZSAiMSIgKi8KIAlfX2xlMTYgdGFibGVbSERfVEFCTEVfU0laRV07CS8qIHVzZSBIRF8qIGFzIGluZGV4ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTI2NTksNiArMjgzNiw4NiBAQAogCXU4IHJlc2VydmVkMTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiBQaHkgY2FsaWJyYXRpb24gY29tbWFuZCBmb3IgNTAwMCBzZXJpZXMgKi8KKworZW51bSB7CisJSVdMNTAwMF9QSFlfQ0FMSUJSQVRFX0RDX0NNRAkJPSA4LAorCUlXTDUwMDBfUEhZX0NBTElCUkFURV9MT19DTUQJCT0gOSwKKwlJV0w1MDAwX1BIWV9DQUxJQlJBVEVfUlhfQkJfQ01ECQk9IDEwLAorCUlXTDUwMDBfUEhZX0NBTElCUkFURV9UWF9JUV9DTUQJCT0gMTEsCisJSVdMNTAwMF9QSFlfQ0FMSUJSQVRFX1JYX0lRX0NNRAkJPSAxMiwKKwlJV0w1MDAwX1BIWV9DQUxJQlJBVElPTl9OT0lTRV9DTUQJPSAxMywKKwlJV0w1MDAwX1BIWV9DQUxJQlJBVEVfQUdDX1RBQkxFX0NNRAk9IDE0LAorCUlXTDUwMDBfUEhZX0NBTElCUkFURV9DUllTVEFMX0ZSUV9DTUQJPSAxNSwKKwlJV0w1MDAwX1BIWV9DQUxJQlJBVEVfQkFTRV9CQU5EX0NNRAk9IDE2LAorCUlXTDUwMDBfUEhZX0NBTElCUkFURV9UWF9JUV9QRVJEX0NNRAk9IDE3LAorCUlXTDUwMDBfUEhZX0NBTElCUkFURV9DSEFJTl9OT0lTRV9SRVNFVF9DTUQgPSAxOCwKKwlJV0w1MDAwX1BIWV9DQUxJQlJBVEVfQ0hBSU5fTk9JU0VfR0FJTl9DTUQgPSAxOSwKK307CisKK2VudW0geworCUNBTElCUkFUSU9OX0NGR19DTUQgPSAweDY1LAorCUNBTElCUkFUSU9OX1JFU19OT1RJRklDQVRJT04gPSAweDY2LAorCUNBTElCUkFUSU9OX0NPTVBMRVRFX05PVElGSUNBVElPTiA9IDB4NjcKK307CisKK3N0cnVjdCBpd2xfY2FsX2NyeXN0YWxfZnJlcV9jbWQgeworCXU4IGNhcF9waW4xOworCXU4IGNhcF9waW4yOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpd2w1MDAwX2NhbGlicmF0aW9uIHsKKwl1OCBvcF9jb2RlOworCXU4IGZpcnN0X2dyb3VwOworCXU4IG51bV9ncm91cHM7CisJdTggYWxsX2RhdGFfdmFsaWQ7CisJc3RydWN0IGl3bF9jYWxfY3J5c3RhbF9mcmVxX2NtZCBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSVdMX0NBTElCX0lOSVRfQ0ZHX0FMTAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ZmZmZmZmZmYpCisKK3N0cnVjdCBpd2xfY2FsaWJfY2ZnX2VsbW50X3MgeworCV9fbGUzMiBpc19lbmFibGU7CisJX19sZTMyIHN0YXJ0OworCV9fbGUzMiBzZW5kX3JlczsKKwlfX2xlMzIgYXBwbHlfcmVzOworCV9fbGUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsX2NhbGliX2NmZ19zdGF0dXNfcyB7CisJc3RydWN0IGl3bF9jYWxpYl9jZmdfZWxtbnRfcyBvbmNlOworCXN0cnVjdCBpd2xfY2FsaWJfY2ZnX2VsbW50X3MgcGVyZDsKKwlfX2xlMzIgZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDUwMDBfY2FsaWJfY2ZnX2NtZCB7CisJc3RydWN0IGl3bF9jYWxpYl9jZmdfc3RhdHVzX3MgdWNkX2NhbGliX2NmZzsKKwlzdHJ1Y3QgaXdsX2NhbGliX2NmZ19zdGF0dXNfcyBkcnZfY2FsaWJfY2ZnOworCV9fbGUzMiByZXNlcnZlZDE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDUwMDBfY2FsaWJfaGRyIHsKKwl1OCBvcF9jb2RlOworCXU4IGZpcnN0X2dyb3VwOworCXU4IGdyb3Vwc19udW07CisJdTggZGF0YV92YWxpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsNTAwMF9jYWxpYnJhdGlvbl9jaGFpbl9ub2lzZV9yZXNldF9jbWQgeworCXU4IG9wX2NvZGU7CS8qIElXTDUwMDBfUEhZX0NBTElCUkFURV9DSEFJTl9OT0lTRV9SRVNFVF9DTUQgKi8KKwl1OCBmbGFnczsJLyogbm90IHVzZWQgKi8KKwlfX2xlMTYgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDUwMDBfY2FsaWJyYXRpb25fY2hhaW5fbm9pc2VfZ2Fpbl9jbWQgeworCXU4IG9wX2NvZGU7CS8qIElXTDUwMDBfUEhZX0NBTElCUkFURV9DSEFJTl9OT0lTRV9HQUlOX0NNRCAqLworCXU4IGZsYWdzOwkvKiBub3QgdXNlZCAqLworCV9fbGUxNiByZXNlcnZlZDsKKwl1OCBkZWx0YV9nYWluXzE7CisJdTggZGVsdGFfZ2Fpbl8yOworCV9fbGUxNiByZXNlcnZlZDE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogKDEyKQogICogTWlzY2VsbGFuZW91cyBDb21tYW5kczoKQEAgLTI2NzIsNyArMjkyOSw3IEBACiAgKiBGb3IgZWFjaCBvZiAzIHBvc3NpYmxlIExFRHMgKEFjdGl2aXR5L0xpbmsvVGVjaCwgc2VsZWN0ZWQgYnkgImlkIiBmaWVsZCksCiAgKiB0aGlzIGNvbW1hbmQgdHVybnMgaXQgb24gb3Igb2ZmLCBvciBzZXRzIHVwIGEgcGVyaW9kaWMgYmxpbmtpbmcgY3ljbGUuCiAgKi8KLXN0cnVjdCBpd2w0OTY1X2xlZF9jbWQgeworc3RydWN0IGl3bF9sZWRfY21kIHsKIAlfX2xlMzIgaW50ZXJ2YWw7CS8qICJpbnRlcnZhbCIgaW4gdVNlYyAqLwogCXU4IGlkOwkJCS8qIDE6IEFjdGl2aXR5LCAyOiBMaW5rLCAzOiBUZWNoICovCiAJdTggb2ZmOwkJCS8qICMgaW50ZXJ2YWxzIG9mZiB3aGlsZSBibGlua2luZzsKQEAgLTI2ODIsMzAgKzI5MzksODEgQEAKIAl1OCByZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKgorICogQ29leGlzdGVuY2UgV0lGSS9XSU1BWCAgQ29tbWFuZAorICogQ09FWF9QUklPUklUWV9UQUJMRV9DTUQgPSAweDVhCisgKgorICovCitlbnVtIHsKKwlDT0VYX1VOQVNTT0NfSURMRQkJPSAwLAorCUNPRVhfVU5BU1NPQ19NQU5VQUxfU0NBTgk9IDEsCisJQ09FWF9VTkFTU09DX0FVVE9fU0NBTgkJPSAyLAorCUNPRVhfQ0FMSUJSQVRJT04JCT0gMywKKwlDT0VYX1BFUklPRElDX0NBTElCUkFUSU9OCT0gNCwKKwlDT0VYX0NPTk5FQ1RJT05fRVNUQUIJCT0gNSwKKwlDT0VYX0FTU09DSUFURURfSURMRQkJPSA2LAorCUNPRVhfQVNTT0NfTUFOVUFMX1NDQU4JCT0gNywKKwlDT0VYX0FTU09DX0FVVE9fU0NBTgkJPSA4LAorCUNPRVhfQVNTT0NfQUNUSVZFX0xFVkVMCQk9IDksCisJQ09FWF9SRl9PTgkJCT0gMTAsCisJQ09FWF9SRl9PRkYJCQk9IDExLAorCUNPRVhfU1RBTkRfQUxPTkVfREVCVUcJCT0gMTIsCisJQ09FWF9JUEFOX0FTU09DX0xFVkVMCQk9IDEzLAorCUNPRVhfUlNSVkQxCQkJPSAxNCwKKwlDT0VYX1JTUlZEMgkJCT0gMTUsCisJQ09FWF9OVU1fT0ZfRVZFTlRTCQk9IDE2Cit9OworCitzdHJ1Y3QgaXdsX3dpbWF4X2NvZXhfZXZlbnRfZW50cnkgeworCXU4IHJlcXVlc3RfcHJpbzsKKwl1OCB3aW5fbWVkaXVtX3ByaW87CisJdTggcmVzZXJ2ZWQ7CisJdTggZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQ09FWCBmbGFnIG1hc2tzICovCisKKy8qIFN0YWlvbiB0YWJsZSBpcyB2YWxpZCAqLworI2RlZmluZSBDT0VYX0ZMQUdTX1NUQV9UQUJMRV9WQUxJRF9NU0sgICAgICAoMHgxKQorLyogVW5NYXNrIHdha2V1cCBzcmMgYXQgdW5hc3NvY2lhdGVkIHNsZWVwICovCisjZGVmaW5lIENPRVhfRkxBR1NfVU5BU1NPQ19XQV9VTk1BU0tfTVNLICAgICgweDQpCisvKiBVbk1hc2sgd2FrZXVwIHNyYyBhdCBhc3NvY2lhdGVkIHNsZWVwICovCisjZGVmaW5lIENPRVhfRkxBR1NfQVNTT0NfV0FfVU5NQVNLX01TSyAgICAgICgweDgpCisvKiBFbmFibGUgQ29FeCBmZWF0dXJlLiAqLworI2RlZmluZSBDT0VYX0ZMQUdTX0NPRVhfRU5BQkxFX01TSyAgICAgICAgICAoMHg4MCkKKworc3RydWN0IGl3bF93aW1heF9jb2V4X2NtZCB7CisJdTggZmxhZ3M7CisJdTggcmVzZXJ2ZWRbM107CisJc3RydWN0IGl3bF93aW1heF9jb2V4X2V2ZW50X2VudHJ5IHN0YV9wcmlvW0NPRVhfTlVNX09GX0VWRU5UU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogKDEzKQogICogVW5pb24gb2YgYWxsIGV4cGVjdGVkIG5vdGlmaWNhdGlvbnMvcmVzcG9uc2VzOgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0IHsKK3N0cnVjdCBpd2xfcnhfcGFja2V0IHsKIAlfX2xlMzIgbGVuOwogCXN0cnVjdCBpd2xfY21kX2hlYWRlciBoZHI7CiAJdW5pb24gewotCQlzdHJ1Y3QgaXdsNDk2NV9hbGl2ZV9yZXNwIGFsaXZlX2ZyYW1lOworCQlzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3AgYWxpdmVfZnJhbWU7CiAJCXN0cnVjdCBpd2w0OTY1X3J4X2ZyYW1lIHJ4X2ZyYW1lOwogCQlzdHJ1Y3QgaXdsNDk2NV90eF9yZXNwIHR4X3Jlc3A7CiAJCXN0cnVjdCBpd2w0OTY1X3NwZWN0cnVtX25vdGlmaWNhdGlvbiBzcGVjdHJ1bV9ub3RpZjsKIAkJc3RydWN0IGl3bDQ5NjVfY3NhX25vdGlmaWNhdGlvbiBjc2Ffbm90aWY7Ci0JCXN0cnVjdCBpd2w0OTY1X2Vycm9yX3Jlc3AgZXJyX3Jlc3A7CisJCXN0cnVjdCBpd2xfZXJyb3JfcmVzcCBlcnJfcmVzcDsKIAkJc3RydWN0IGl3bDQ5NjVfY2FyZF9zdGF0ZV9ub3RpZiBjYXJkX3N0YXRlX25vdGlmOwogCQlzdHJ1Y3QgaXdsNDk2NV9iZWFjb25fbm90aWYgYmVhY29uX3N0YXR1czsKLQkJc3RydWN0IGl3bDQ5NjVfYWRkX3N0YV9yZXNwIGFkZF9zdGE7CisJCXN0cnVjdCBpd2xfYWRkX3N0YV9yZXNwIGFkZF9zdGE7CisJCXN0cnVjdCBpd2xfcmVtX3N0YV9yZXNwIHJlbV9zdGE7CiAJCXN0cnVjdCBpd2w0OTY1X3NsZWVwX25vdGlmaWNhdGlvbiBzbGVlcF9ub3RpZjsKIAkJc3RydWN0IGl3bDQ5NjVfc3BlY3RydW1fcmVzcCBzcGVjdHJ1bTsKLQkJc3RydWN0IGl3bDQ5NjVfbm90aWZfc3RhdGlzdGljcyBzdGF0czsKLQkJc3RydWN0IGl3bDQ5NjVfY29tcHJlc3NlZF9iYV9yZXNwIGNvbXByZXNzZWRfYmE7CisJCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBzdGF0czsKKwkJc3RydWN0IGl3bF9jb21wcmVzc2VkX2JhX3Jlc3AgY29tcHJlc3NlZF9iYTsKIAkJc3RydWN0IGl3bDQ5NjVfbWlzc2VkX2JlYWNvbl9ub3RpZiBtaXNzZWRfYmVhY29uOworCQlzdHJ1Y3QgaXdsNTAwMF9jYWxpYnJhdGlvbiBjYWxpYjsKIAkJX19sZTMyIHN0YXR1czsKIAkJdTggcmF3WzBdOwogCX0gdTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCAyZGZkOTgyLi5hNDQxODhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0zNCw5ICszNCwxMSBAQAogc3RydWN0IGl3bF9wcml2OyAvKiBGSVhNRTogcmVtb3ZlICovCiAjaW5jbHVkZSAiaXdsLWRlYnVnLmgiCiAjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgotI2luY2x1ZGUgIml3bC00OTY1LmgiIC8qIEZJWE1FOiByZW1vdmUgKi8KKyNpbmNsdWRlICJpd2wtZGV2LmgiIC8qIEZJWE1FOiByZW1vdmUgKi8KICNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1pby5oIgogI2luY2x1ZGUgIml3bC1yZmtpbGwuaCIKKyNpbmNsdWRlICJpd2wtcG93ZXIuaCIKIAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIml3bCBjb3JlIik7CkBAIC00NCwxMCArNDYsMTA2IEBACiBNT0RVTEVfQVVUSE9SKERSVl9DT1BZUklHSFQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXUzMiBpd2xfZGVidWdfbGV2ZWw7Ci1FWFBPUlRfU1lNQk9MKGl3bF9kZWJ1Z19sZXZlbCk7Ci0jZW5kaWYKKyNkZWZpbmUgSVdMX0RFQ0xBUkVfUkFURV9JTkZPKHIsIHMsIGlwLCBpbiwgcnAsIHJuLCBwcCwgbnApICAgIFwKKwlbSVdMX1JBVEVfIyNyIyNNX0lOREVYXSA9IHsgSVdMX1JBVEVfIyNyIyNNX1BMQ1AsICAgICAgXAorCQkJCSAgICBJV0xfUkFURV9TSVNPXyMjcyMjTV9QTENQLCBcCisJCQkJICAgIElXTF9SQVRFX01JTU8yXyMjcyMjTV9QTENQLFwKKwkJCQkgICAgSVdMX1JBVEVfTUlNTzNfIyNzIyNNX1BMQ1AsXAorCQkJCSAgICBJV0xfUkFURV8jI3IjI01fSUVFRSwgICAgICBcCisJCQkJICAgIElXTF9SQVRFXyMjaXAjI01fSU5ERVgsICAgIFwKKwkJCQkgICAgSVdMX1JBVEVfIyNpbiMjTV9JTkRFWCwgICAgXAorCQkJCSAgICBJV0xfUkFURV8jI3JwIyNNX0lOREVYLCAgICBcCisJCQkJICAgIElXTF9SQVRFXyMjcm4jI01fSU5ERVgsICAgIFwKKwkJCQkgICAgSVdMX1JBVEVfIyNwcCMjTV9JTkRFWCwgICAgXAorCQkJCSAgICBJV0xfUkFURV8jI25wIyNNX0lOREVYIH0KKworLyoKKyAqIFBhcmFtZXRlciBvcmRlcjoKKyAqICAgcmF0ZSwgaHQgcmF0ZSwgcHJldiByYXRlLCBuZXh0IHJhdGUsIHByZXYgdGdnIHJhdGUsIG5leHQgdGdnIHJhdGUKKyAqCisgKiBJZiB0aGVyZSBpc24ndCBhIHZhbGlkIG5leHQgb3IgcHJldmlvdXMgcmF0ZSB0aGVuIElOViBpcyB1c2VkIHdoaWNoCisgKiBtYXBzIHRvIElXTF9SQVRFX0lOVkFMSUQKKyAqCisgKi8KK2NvbnN0IHN0cnVjdCBpd2xfcmF0ZV9pbmZvIGl3bF9yYXRlc1tJV0xfUkFURV9DT1VOVF0gPSB7CisJSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDEsIElOViwgSU5WLCAyLCBJTlYsIDIsIElOViwgMiksICAgIC8qICAxbWJwcyAqLworCUlXTF9ERUNMQVJFX1JBVEVfSU5GTygyLCBJTlYsIDEsIDUsIDEsIDUsIDEsIDUpLCAgICAgICAgICAvKiAgMm1icHMgKi8KKwlJV0xfREVDTEFSRV9SQVRFX0lORk8oNSwgSU5WLCAyLCA2LCAyLCAxMSwgMiwgMTEpLCAgICAgICAgLyo1LjVtYnBzICovCisJSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDExLCBJTlYsIDksIDEyLCA5LCAxMiwgNSwgMTgpLCAgICAgIC8qIDExbWJwcyAqLworCUlXTF9ERUNMQVJFX1JBVEVfSU5GTyg2LCA2LCA1LCA5LCA1LCAxMSwgNSwgMTEpLCAgICAgICAgLyogIDZtYnBzICovCisJSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDksIDYsIDYsIDExLCA2LCAxMSwgNSwgMTEpLCAgICAgICAvKiAgOW1icHMgKi8KKwlJV0xfREVDTEFSRV9SQVRFX0lORk8oMTIsIDEyLCAxMSwgMTgsIDExLCAxOCwgMTEsIDE4KSwgICAvKiAxMm1icHMgKi8KKwlJV0xfREVDTEFSRV9SQVRFX0lORk8oMTgsIDE4LCAxMiwgMjQsIDEyLCAyNCwgMTEsIDI0KSwgICAvKiAxOG1icHMgKi8KKwlJV0xfREVDTEFSRV9SQVRFX0lORk8oMjQsIDI0LCAxOCwgMzYsIDE4LCAzNiwgMTgsIDM2KSwgICAvKiAyNG1icHMgKi8KKwlJV0xfREVDTEFSRV9SQVRFX0lORk8oMzYsIDM2LCAyNCwgNDgsIDI0LCA0OCwgMjQsIDQ4KSwgICAvKiAzNm1icHMgKi8KKwlJV0xfREVDTEFSRV9SQVRFX0lORk8oNDgsIDQ4LCAzNiwgNTQsIDM2LCA1NCwgMzYsIDU0KSwgICAvKiA0OG1icHMgKi8KKwlJV0xfREVDTEFSRV9SQVRFX0lORk8oNTQsIDU0LCA0OCwgSU5WLCA0OCwgSU5WLCA0OCwgSU5WKSwvKiA1NG1icHMgKi8KKwlJV0xfREVDTEFSRV9SQVRFX0lORk8oNjAsIDYwLCA0OCwgSU5WLCA0OCwgSU5WLCA0OCwgSU5WKSwvKiA2MG1icHMgKi8KKwkvKiBGSVhNRTpSUzogICAgICAgICAgXl4gICAgc2hvdWxkIGJlIElOViAobGVnYWN5KSAqLworfTsKK0VYUE9SVF9TWU1CT0woaXdsX3JhdGVzKTsKKworLyoqCisgKiB0cmFuc2xhdGUgdWNvZGUgcmVzcG9uc2UgdG8gbWFjODAyMTEgdHggc3RhdHVzIGNvbnRyb2wgdmFsdWVzCisgKi8KK3ZvaWQgaXdsX2h3cmF0ZV90b190eF9jb250cm9sKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJhdGVfbl9mbGFncywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqY29udHJvbCkKK3sKKwlpbnQgcmF0ZV9pbmRleDsKKworCWNvbnRyb2wtPmFudGVubmFfc2VsX3R4ID0KKwkJKChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19BTlRfQUJDX01TSykgPj4gUkFURV9NQ1NfQU5UX1BPUyk7CisJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUX01TSykKKwkJY29udHJvbC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9PRkRNX0hUOworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19HRl9NU0spCisJCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfR1JFRU5fRklFTEQ7CisJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0ZBVF9NU0spCisJCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfNDBfTUhaX1dJRFRIOworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19EVVBfTVNLKQorCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0RVUF9EQVRBOworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19TR0lfTVNLKQorCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1NIT1JUX0dJOworCXJhdGVfaW5kZXggPSBpd2xfaHdyYXRlX3RvX3BsY3BfaWR4KHJhdGVfbl9mbGFncyk7CisJaWYgKGNvbnRyb2wtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJcmF0ZV9pbmRleCAtPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCWNvbnRyb2wtPnR4X3JhdGVfaWR4ID0gcmF0ZV9pbmRleDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2h3cmF0ZV90b190eF9jb250cm9sKTsKKworaW50IGl3bF9od3JhdGVfdG9fcGxjcF9pZHgodTMyIHJhdGVfbl9mbGFncykKK3sKKwlpbnQgaWR4ID0gMDsKKworCS8qIEhUIHJhdGUgZm9ybWF0ICovCisJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUX01TSykgeworCQlpZHggPSAocmF0ZV9uX2ZsYWdzICYgMHhmZik7CisKKwkJaWYgKGlkeCA+PSBJV0xfUkFURV9NSU1PMl82TV9QTENQKQorCQkJaWR4ID0gaWR4IC0gSVdMX1JBVEVfTUlNTzJfNk1fUExDUDsKKworCQlpZHggKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwkJLyogc2tpcCA5TSBub3Qgc3VwcG9ydGVkIGluIGh0Ki8KKwkJaWYgKGlkeCA+PSBJV0xfUkFURV85TV9JTkRFWCkKKwkJCWlkeCArPSAxOworCQlpZiAoKGlkeCA+PSBJV0xfRklSU1RfT0ZETV9SQVRFKSAmJiAoaWR4IDw9IElXTF9MQVNUX09GRE1fUkFURSkpCisJCQlyZXR1cm4gaWR4OworCisJLyogbGVnYWN5IHJhdGUgZm9ybWF0LCBzZWFyY2ggZm9yIG1hdGNoIGluIHRhYmxlICovCisJfSBlbHNlIHsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGl3bF9yYXRlcyk7IGlkeCsrKQorCQkJaWYgKGl3bF9yYXRlc1tpZHhdLnBsY3AgPT0gKHJhdGVfbl9mbGFncyAmIDB4RkYpKQorCQkJCXJldHVybiBpZHg7CisJfQorCisJcmV0dXJuIC0xOworfQorRVhQT1JUX1NZTUJPTChpd2xfaHdyYXRlX3RvX3BsY3BfaWR4KTsKKworCisKK2NvbnN0IHU4IGl3bF9iY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9OworRVhQT1JUX1NZTUJPTChpd2xfYmNhc3RfYWRkcik7CisKIAogLyogVGhpcyBmdW5jdGlvbiBib3RoIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgaHcgYW5kIHByaXYuICovCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICppd2xfYWxsb2NfYWxsKHN0cnVjdCBpd2xfY2ZnICpjZmcsCkBAIC03MiwyNSArMTcwLDEzMiBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfYWxsb2NfYWxsKTsKIAordm9pZCBpd2xfaHdfZGV0ZWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlwcml2LT5od19yZXYgPSBfaXdsX3JlYWQzMihwcml2LCBDU1JfSFdfUkVWKTsKKwlwcml2LT5od193YV9yZXYgPSBfaXdsX3JlYWQzMihwcml2LCBDU1JfSFdfUkVWX1dBX1JFRyk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocHJpdi0+cGNpX2RldiwgUENJX1JFVklTSU9OX0lELCAmcHJpdi0+cmV2X2lkKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2h3X2RldGVjdCk7CisKKy8qIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgdGhlICJrZWVwIHdhcm0iIGJ1ZmZlciAqLworaW50IGl3bF9rd19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfS1dfTUVNX0FERFJfUkVHLAorCQkJICAgICBwcml2LT5rdy5kbWFfYWRkciA+PiA0KTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXdsX2t3X2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlzdHJ1Y3QgaXdsX2t3ICprdyA9ICZwcml2LT5rdzsKKworCWt3LT5zaXplID0gSVdMX0tXX1NJWkU7CisJa3ctPnZfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwga3ctPnNpemUsICZrdy0+ZG1hX2FkZHIpOworCWlmICgha3ctPnZfYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCi0gKiBpd2xjb3JlX2NsZWFyX3N0YXRpb25zX3RhYmxlIC0gQ2xlYXIgdGhlIGRyaXZlcidzIHN0YXRpb24gdGFibGUKKyAqIGl3bF9rd19mcmVlIC0gRnJlZSB0aGUgImtlZXAgd2FybSIgYnVmZmVyCisgKi8KK3ZvaWQgaXdsX2t3X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OworCXN0cnVjdCBpd2xfa3cgKmt3ID0gJnByaXYtPmt3OworCisJaWYgKGt3LT52X2FkZHIpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIGt3LT5zaXplLCBrdy0+dl9hZGRyLCBrdy0+ZG1hX2FkZHIpOworCQltZW1zZXQoa3csIDAsIHNpemVvZigqa3cpKTsKKwl9Cit9CisKK2ludCBpd2xfaHdfbmljX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwlpbnQgcmV0OworCisJLyogbmljX2luaXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuaW5pdChwcml2KTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX0NPQUxFU0NJTkcsIDUxMiAvIDMyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLnNldF9wd3Jfc3JjKHByaXYsIElXTF9QV1JfU1JDX1ZNQUlOKTsKKworCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuY29uZmlnKHByaXYpOworCisJLyogQWxsb2NhdGUgdGhlIFJYIHF1ZXVlLCBvciByZXNldCBpZiBpdCBpcyBhbHJlYWR5IGFsbG9jYXRlZCAqLworCWlmICghcnhxLT5iZCkgeworCQlyZXQgPSBpd2xfcnhfcXVldWVfYWxsb2MocHJpdik7CisJCWlmIChyZXQpIHsKKwkJCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUnggcXVldWVcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9IGVsc2UKKwkJaXdsX3J4X3F1ZXVlX3Jlc2V0KHByaXYsIHJ4cSk7CisKKwlpd2xfcnhfcmVwbGVuaXNoKHByaXYpOworCisJaXdsX3J4X2luaXQocHJpdiwgcnhxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyeHEtPm5lZWRfdXBkYXRlID0gMTsKKwlpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyogQWxsb2NhdGUgYW5kIGluaXQgYWxsIFR4IGFuZCBDb21tYW5kIHF1ZXVlcyAqLworCXJldCA9IGl3bF90eHFfY3R4X3Jlc2V0KHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZXRfYml0KFNUQVRVU19JTklULCAmcHJpdi0+c3RhdHVzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfaHdfbmljX2luaXQpOworCisvKioKKyAqIGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZSAtIENsZWFyIHRoZSBkcml2ZXIncyBzdGF0aW9uIHRhYmxlCiAgKgogICogTk9URTogIFRoaXMgZG9lcyBub3QgY2xlYXIgb3Igb3RoZXJ3aXNlIGFsdGVyIHRoZSBkZXZpY2UncyBzdGF0aW9uIHRhYmxlLgogICovCi12b2lkIGl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQordm9pZCBpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAorCWlmIChpd2xfaXNfYWxpdmUocHJpdikgJiYKKwkgICAhdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgJiYKKwkgICBpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1JFTU9WRV9BTExfU1RBLCAwLCBOVUxMLCBOVUxMKSkKKwkJSVdMX0VSUk9SKCJDb3VsZG4ndCBjbGVhciB0aGUgc3RhdGlvbiB0YWJsZVxuIik7CisKIAlwcml2LT5udW1fc3RhdGlvbnMgPSAwOwogCW1lbXNldChwcml2LT5zdGF0aW9ucywgMCwgc2l6ZW9mKHByaXYtPnN0YXRpb25zKSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChpd2xjb3JlX2NsZWFyX3N0YXRpb25zX3RhYmxlKTsKK0VYUE9SVF9TWU1CT0woaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKTsKIAotdm9pZCBpd2xjb3JlX3Jlc2V0X3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit2b2lkIGl3bF9yZXNldF9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUxNiBjd19taW4gPSAxNTsKIAl1MTYgY3dfbWF4ID0gMTAyMzsKQEAgLTE3Niw3ICszODEsMzk3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MKGl3bGNvcmVfcmVzZXRfcW9zKTsKK0VYUE9SVF9TWU1CT0woaXdsX3Jlc2V0X3Fvcyk7CisKKyNkZWZpbmUgTUFYX0JJVF9SQVRFXzQwX01IWiAweDk2OyAvKiAxNTAgTWJwcyAqLworI2RlZmluZSBNQVhfQklUX1JBVEVfMjBfTUhaIDB4NDg7IC8qIDcyIE1icHMgKi8KK3N0YXRpYyB2b2lkIGl3bGNvcmVfaW5pdF9odF9od19jYXBhYihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8sCisJCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit7CisJdTE2IG1heF9iaXRfcmF0ZSA9IDA7CisJdTggcnhfY2hhaW5zX251bSA9IHByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtOworCXU4IHR4X2NoYWluc19udW0gPSBwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bTsKKworCWh0X2luZm8tPmNhcCA9IDA7CisJbWVtc2V0KGh0X2luZm8tPnN1cHBfbWNzX3NldCwgMCwgMTYpOworCisJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gMTsKKworCWh0X2luZm8tPmNhcCB8PSAodTE2KUlFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRDsKKwlodF9pbmZvLT5jYXAgfD0gKHUxNilJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKKwlodF9pbmZvLT5jYXAgfD0gKHUxNikoSUVFRTgwMjExX0hUX0NBUF9NSU1PX1BTICYKKwkJCSAgICAgKElXTF9NSU1PX1BTX05PTkUgPDwgMikpOworCisJbWF4X2JpdF9yYXRlID0gTUFYX0JJVF9SQVRFXzIwX01IWjsKKwlpZiAocHJpdi0+aHdfcGFyYW1zLmZhdF9jaGFubmVsICYgQklUKGJhbmQpKSB7CisJCWh0X2luZm8tPmNhcCB8PSAodTE2KUlFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIOworCQlodF9pbmZvLT5jYXAgfD0gKHUxNilJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwkJaHRfaW5mby0+c3VwcF9tY3Nfc2V0WzRdID0gMHgwMTsKKwkJbWF4X2JpdF9yYXRlID0gTUFYX0JJVF9SQVRFXzQwX01IWjsKKwl9CisKKwlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5hbXNkdV9zaXplXzhLKQorCQlodF9pbmZvLT5jYXAgfD0gKHUxNilJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVTsKKworCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IENGR19IVF9SWF9BTVBEVV9GQUNUT1JfREVGOworCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBDRkdfSFRfTVBEVV9ERU5TSVRZX0RFRjsKKworCWh0X2luZm8tPnN1cHBfbWNzX3NldFswXSA9IDB4RkY7CisJaWYgKHJ4X2NoYWluc19udW0gPj0gMikKKwkJaHRfaW5mby0+c3VwcF9tY3Nfc2V0WzFdID0gMHhGRjsKKwlpZiAocnhfY2hhaW5zX251bSA+PSAzKQorCQlodF9pbmZvLT5zdXBwX21jc19zZXRbMl0gPSAweEZGOworCisJLyogSGlnaGVzdCBzdXBwb3J0ZWQgUnggZGF0YSByYXRlICovCisJbWF4X2JpdF9yYXRlICo9IHJ4X2NoYWluc19udW07CisJaHRfaW5mby0+c3VwcF9tY3Nfc2V0WzEwXSA9ICh1OCkobWF4X2JpdF9yYXRlICYgMHgwMEZGKTsKKwlodF9pbmZvLT5zdXBwX21jc19zZXRbMTFdID0gKHU4KSgobWF4X2JpdF9yYXRlICYgMHhGRjAwKSA+PiA4KTsKKworCS8qIFR4IE1DUyBjYXBhYmlsaXRpZXMgKi8KKwlodF9pbmZvLT5zdXBwX21jc19zZXRbMTJdID0gSUVFRTgwMjExX0hUX0NBUF9NQ1NfVFhfREVGSU5FRDsKKwlpZiAodHhfY2hhaW5zX251bSAhPSByeF9jaGFpbnNfbnVtKSB7CisJCWh0X2luZm8tPnN1cHBfbWNzX3NldFsxMl0gfD0gSUVFRTgwMjExX0hUX0NBUF9NQ1NfVFhfUlhfRElGRjsKKwkJaHRfaW5mby0+c3VwcF9tY3Nfc2V0WzEyXSB8PSAoKHR4X2NoYWluc19udW0gLSAxKSA8PCAyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl3bGNvcmVfaW5pdF9od19yYXRlcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspIHsKKwkJcmF0ZXNbaV0uYml0cmF0ZSA9IGl3bF9yYXRlc1tpXS5pZWVlICogNTsKKwkJcmF0ZXNbaV0uaHdfdmFsdWUgPSBpOyAvKiBSYXRlIHNjYWxpbmcgd2lsbCB3b3JrIG9uIGluZGV4ZXMgKi8KKwkJcmF0ZXNbaV0uaHdfdmFsdWVfc2hvcnQgPSBpOworCQlyYXRlc1tpXS5mbGFncyA9IDA7CisJCWlmICgoaSA+IElXTF9MQVNUX09GRE1fUkFURSkgfHwgKGkgPCBJV0xfRklSU1RfT0ZETV9SQVRFKSkgeworCQkJLyoKKwkJCSAqIElmIENDSyAhPSAxTSB0aGVuIHNldCBzaG9ydCBwcmVhbWJsZSByYXRlIGZsYWcuCisJCQkgKi8KKwkJCXJhdGVzW2ldLmZsYWdzIHw9CisJCQkJKGl3bF9yYXRlc1tpXS5wbGNwID09IElXTF9SQVRFXzFNX1BMQ1ApID8KKwkJCQkJMCA6IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFOworCQl9CisJfQorfQorCisvKioKKyAqIGl3bGNvcmVfaW5pdF9nZW9zIC0gSW5pdGlhbGl6ZSBtYWM4MDIxMSdzIGdlby9jaGFubmVsIGluZm8gYmFzZWQgZnJvbSBlZXByb20KKyAqLworc3RhdGljIGludCBpd2xjb3JlX2luaXRfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHM7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpnZW9fY2g7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlczsKKwlpbnQgaSA9IDA7CisKKwlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9iaXRyYXRlcyB8fAorCSAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2JpdHJhdGVzKSB7CisJCUlXTF9ERUJVR19JTkZPKCJHZW9ncmFwaHkgbW9kZXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOworCQlzZXRfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CisJCXJldHVybiAwOworCX0KKworCWNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSAqCisJCQkgICBwcml2LT5jaGFubmVsX2NvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoYW5uZWxzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJhdGVzID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmF0ZSkgKiAoSVdMX1JBVEVfQ09VTlQgKyAxKSksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXJhdGVzKSB7CisJCWtmcmVlKGNoYW5uZWxzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogNS4yR0h6IGNoYW5uZWxzIHN0YXJ0IGFmdGVyIHRoZSAyLjRHSHogY2hhbm5lbHMgKi8KKwlzYmFuZCA9ICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKKwlzYmFuZC0+Y2hhbm5lbHMgPSAmY2hhbm5lbHNbQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfMSldOworCS8qIGp1c3QgT0ZETSAqLworCXNiYW5kLT5iaXRyYXRlcyA9ICZyYXRlc1tJV0xfRklSU1RfT0ZETV9SQVRFXTsKKwlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UIC0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKworCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikKKwkJaXdsY29yZV9pbml0X2h0X2h3X2NhcGFiKHByaXYsICZzYmFuZC0+aHRfaW5mbywKKwkJCQkJIElFRUU4MDIxMV9CQU5EXzVHSFopOworCisJc2JhbmQgPSAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJc2JhbmQtPmNoYW5uZWxzID0gY2hhbm5lbHM7CisJLyogT0ZETSAmIENDSyAqLworCXNiYW5kLT5iaXRyYXRlcyA9IHJhdGVzOworCXNiYW5kLT5uX2JpdHJhdGVzID0gSVdMX1JBVEVfQ09VTlQ7CisKKwlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pCisJCWl3bGNvcmVfaW5pdF9odF9od19jYXBhYihwcml2LCAmc2JhbmQtPmh0X2luZm8sCisJCQkJCSBJRUVFODAyMTFfQkFORF8yR0haKTsKKworCXByaXYtPmllZWVfY2hhbm5lbHMgPSBjaGFubmVsczsKKwlwcml2LT5pZWVlX3JhdGVzID0gcmF0ZXM7CisKKwlpd2xjb3JlX2luaXRfaHdfcmF0ZXMocHJpdiwgcmF0ZXMpOworCisJZm9yIChpID0gMDsgIGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOworCisJCS8qIEZJWE1FOiBtaWdodCBiZSByZW1vdmVkIGlmIHNjYW4gaXMgT0sgKi8KKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpc19jaGFubmVsX2FfYmFuZChjaCkpCisJCQlzYmFuZCA9ICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisJCWVsc2UKKwkJCXNiYW5kID0gICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKworCQlnZW9fY2ggPSAmc2JhbmQtPmNoYW5uZWxzW3NiYW5kLT5uX2NoYW5uZWxzKytdOworCisJCWdlb19jaC0+Y2VudGVyX2ZyZXEgPQorCQkJCWllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaC0+Y2hhbm5lbCk7CisJCWdlb19jaC0+bWF4X3Bvd2VyID0gY2gtPm1heF9wb3dlcl9hdmc7CisJCWdlb19jaC0+bWF4X2FudGVubmFfZ2FpbiA9IDB4ZmY7CisJCWdlb19jaC0+aHdfdmFsdWUgPSBjaC0+Y2hhbm5lbDsKKworCQlpZiAoaXNfY2hhbm5lbF92YWxpZChjaCkpIHsKKwkJCWlmICghKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpKQorCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKworCQkJaWYgKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkKKwkJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKworCQkJaWYgKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKQorCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUkFEQVI7CisKKwkJCWdlb19jaC0+ZmxhZ3MgfD0gY2gtPmZhdF9leHRlbnNpb25fY2hhbm5lbDsKKworCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gcHJpdi0+dHhfcG93ZXJfY2hhbm5lbF9sbXQpCisJCQkJcHJpdi0+dHhfcG93ZXJfY2hhbm5lbF9sbXQgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKKwkJfSBlbHNlIHsKKwkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7CisJCX0KKworCQkvKiBTYXZlIGZsYWdzIGZvciByZWcgZG9tYWluIHVzYWdlICovCisJCWdlb19jaC0+b3JpZ19mbGFncyA9IGdlb19jaC0+ZmxhZ3M7CisKKwkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgJWQgRnJlcT0lZFslc0dIel0gJXMgZmxhZz0weCVYXG4iLAorCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAorCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAorCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/CisJCQkJInJlc3RyaWN0ZWQiIDogInZhbGlkIiwKKwkJCQkgZ2VvX2NoLT5mbGFncyk7CisJfQorCisJaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCisJICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgeworCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKKwkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAorCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJcHJpdi0+Y2ZnLT5za3UgJj0gfklXTF9TS1VfQTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJICAgICAgICI6IFR1bmFibGUgY2hhbm5lbHM6ICVkIDgwMi4xMWJnLCAlZCA4MDIuMTFhIGNoYW5uZWxzXG4iLAorCSAgICAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzLAorCSAgICAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKTsKKworCisJc2V0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpd2xjb3JlX2ZyZWVfZ2VvcyAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsY29yZV9pbml0X2dlb3MKKyAqLworc3RhdGljIHZvaWQgaXdsY29yZV9mcmVlX2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWtmcmVlKHByaXYtPmllZWVfY2hhbm5lbHMpOworCWtmcmVlKHByaXYtPmllZWVfcmF0ZXMpOworCWNsZWFyX2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOworfQorCitzdGF0aWMgdTggaXNfc2luZ2xlX3J4X3N0cmVhbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuICFwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCB8fAorCSAgICAgICAoKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnN1cHBfbWNzX3NldFsxXSA9PSAwKSAmJgorCQkocHJpdi0+Y3VycmVudF9odF9jb25maWcuc3VwcF9tY3Nfc2V0WzJdID09IDApKSB8fAorCSAgICAgICBwcml2LT5wc19tb2RlID09IElXTF9NSU1PX1BTX1NUQVRJQzsKK30KKworc3RhdGljIHU4IGl3bF9pc19jaGFubmVsX2V4dGVuc2lvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkJCSAgIHUxNiBjaGFubmVsLCB1OCBleHRlbnNpb25fY2hhbl9vZmZzZXQpCit7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgY2hhbm5lbCk7CisJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKQorCQlyZXR1cm4gMDsKKworCWlmIChleHRlbnNpb25fY2hhbl9vZmZzZXQgPT0gSUVFRTgwMjExX0hUX0lFX0NIQV9TRUNfQUJPVkUpCisJCXJldHVybiAhKGNoX2luZm8tPmZhdF9leHRlbnNpb25fY2hhbm5lbCAmCisJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0ZBVF9BQk9WRSk7CisJZWxzZSBpZiAoZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID09IElFRUU4MDIxMV9IVF9JRV9DSEFfU0VDX0JFTE9XKQorCQlyZXR1cm4gIShjaF9pbmZvLT5mYXRfZXh0ZW5zaW9uX2NoYW5uZWwgJgorCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19GQVRfQkVMT1cpOworCisJcmV0dXJuIDA7Cit9CisKK3U4IGl3bF9pc19mYXRfdHhfYWxsb3dlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqc3RhX2h0X2luZikKK3sKKwlzdHJ1Y3QgaXdsX2h0X2luZm8gKml3bF9odF9jb25mID0gJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnOworCisJaWYgKCghaXdsX2h0X2NvbmYtPmlzX2h0KSB8fAorCSAgIChpd2xfaHRfY29uZi0+c3VwcG9ydGVkX2NoYW5fd2lkdGggIT0gSVdMX0NIQU5ORUxfV0lEVEhfNDBNSFopIHx8CisJICAgKGl3bF9odF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPT0gSUVFRTgwMjExX0hUX0lFX0NIQV9TRUNfTk9ORSkpCisJCXJldHVybiAwOworCisJaWYgKHN0YV9odF9pbmYpIHsKKwkJaWYgKCghc3RhX2h0X2luZi0+aHRfc3VwcG9ydGVkKSB8fAorCQkgICAoIShzdGFfaHRfaW5mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSCkpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGl3bF9pc19jaGFubmVsX2V4dGVuc2lvbihwcml2LCBwcml2LT5iYW5kLAorCQkJCQkgaXdsX2h0X2NvbmYtPmNvbnRyb2xfY2hhbm5lbCwKKwkJCQkJIGl3bF9odF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQpOworfQorRVhQT1JUX1NZTUJPTChpd2xfaXNfZmF0X3R4X2FsbG93ZWQpOworCit2b2lkIGl3bF9zZXRfcnhvbl9odChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaHRfaW5mbyAqaHRfaW5mbykKK3sKKwlzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uID0gJnByaXYtPnN0YWdpbmdfcnhvbjsKKwl1MzIgdmFsOworCisJaWYgKCFodF9pbmZvLT5pc19odCkKKwkJcmV0dXJuOworCisJLyogU2V0IHVwIGNoYW5uZWwgYmFuZHdpZHRoOiAgMjAgTUh6IG9ubHksIG9yIDIwLzQwIG1peGVkIGlmIGZhdCBvayAqLworCWlmIChpd2xfaXNfZmF0X3R4X2FsbG93ZWQocHJpdiwgTlVMTCkpCisJCXJ4b24tPmZsYWdzIHw9IFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0s7CisJZWxzZQorCQlyeG9uLT5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0sgfAorCQkJCSBSWE9OX0ZMR19DSEFOTkVMX01PREVfUFVSRV80MF9NU0spOworCisJaWYgKGxlMTZfdG9fY3B1KHJ4b24tPmNoYW5uZWwpICE9IGh0X2luZm8tPmNvbnRyb2xfY2hhbm5lbCkgeworCQlJV0xfREVCVUdfQVNTT0MoImNvbnRyb2wgZGlmZiB0aGFuIGN1cnJlbnQgJWQgJWRcbiIsCisJCQkJbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCksCisJCQkJaHRfaW5mby0+Y29udHJvbF9jaGFubmVsKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE5vdGU6IGNvbnRyb2wgY2hhbm5lbCBpcyBvcHBvc2l0ZSBvZiBleHRlbnNpb24gY2hhbm5lbCAqLworCXN3aXRjaCAoaHRfaW5mby0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0KSB7CisJY2FzZSBJRUVFODAyMTFfSFRfSUVfQ0hBX1NFQ19BQk9WRToKKwkJcnhvbi0+ZmxhZ3MgJj0gfihSWE9OX0ZMR19DVFJMX0NIQU5ORUxfTE9DX0hJX01TSyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0hUX0lFX0NIQV9TRUNfQkVMT1c6CisJCXJ4b24tPmZsYWdzIHw9IFJYT05fRkxHX0NUUkxfQ0hBTk5FTF9MT0NfSElfTVNLOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9IVF9JRV9DSEFfU0VDX05PTkU6CisJZGVmYXVsdDoKKwkJcnhvbi0+ZmxhZ3MgJj0gflJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0s7CisJCWJyZWFrOworCX0KKworCXZhbCA9IGh0X2luZm8tPmh0X3Byb3RlY3Rpb247CisKKwlyeG9uLT5mbGFncyB8PSBjcHVfdG9fbGUzMih2YWwgPDwgUlhPTl9GTEdfSFRfT1BFUkFUSU5HX01PREVfUE9TKTsKKworCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKKworCUlXTF9ERUJVR19BU1NPQygic3VwcG9ydGVkIEhUIHJhdGUgMHglWCAweCVYIDB4JVggIgorCQkJInJ4b24gZmxhZ3MgMHglWCBvcGVyYXRpb24gbW9kZSA6MHglWCAiCisJCQkiZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0IDB4JXggIgorCQkJImNvbnRyb2wgY2hhbiAlZFxuIiwKKwkJCWh0X2luZm8tPnN1cHBfbWNzX3NldFswXSwKKwkJCWh0X2luZm8tPnN1cHBfbWNzX3NldFsxXSwKKwkJCWh0X2luZm8tPnN1cHBfbWNzX3NldFsyXSwKKwkJCWxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSwgaHRfaW5mby0+aHRfcHJvdGVjdGlvbiwKKwkJCWh0X2luZm8tPmV4dGVuc2lvbl9jaGFuX29mZnNldCwKKwkJCWh0X2luZm8tPmNvbnRyb2xfY2hhbm5lbCk7CisJcmV0dXJuOworfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25faHQpOworCisvKgorICogRGV0ZXJtaW5lIGhvdyBtYW55IHJlY2VpdmVyL2FudGVubmEgY2hhaW5zIHRvIHVzZS4KKyAqIE1vcmUgcHJvdmlkZXMgYmV0dGVyIHJlY2VwdGlvbiB2aWEgZGl2ZXJzaXR5LiAgRmV3ZXIgc2F2ZXMgcG93ZXIuCisgKiBNSU1PIChkdWFsIHN0cmVhbSkgcmVxdWlyZXMgYXQgbGVhc3QgMiwgYnV0IHdvcmtzIGJldHRlciB3aXRoIDMuCisgKiBUaGlzIGRvZXMgbm90IGRldGVybWluZSAqd2hpY2gqIGNoYWlucyB0byB1c2UsIGp1c3QgaG93IG1hbnkuCisgKi8KK3N0YXRpYyBpbnQgaXdsY29yZV9nZXRfcnhfY2hhaW5fY291bnRlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCXU4ICppZGxlX3N0YXRlLCB1OCAqcnhfc3RhdGUpCit7CisJdTggaXNfc2luZ2xlID0gaXNfc2luZ2xlX3J4X3N0cmVhbShwcml2KTsKKwl1OCBpc19jYW0gPSB0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSA/IDAgOiAxOworCisJLyogIyBvZiBSeCBjaGFpbnMgdG8gdXNlIHdoZW4gZXhwZWN0aW5nIE1JTU8uICovCisJaWYgKGlzX3NpbmdsZSB8fCAoIWlzX2NhbSAmJiAocHJpdi0+cHNfbW9kZSA9PSBJV0xfTUlNT19QU19TVEFUSUMpKSkKKwkJKnJ4X3N0YXRlID0gMjsKKwllbHNlCisJCSpyeF9zdGF0ZSA9IDM7CisKKwkvKiAjIFJ4IGNoYWlucyB3aGVuIGlkbGluZyBhbmQgbWF5YmUgdHJ5aW5nIHRvIHNhdmUgcG93ZXIgKi8KKwlzd2l0Y2ggKHByaXYtPnBzX21vZGUpIHsKKwljYXNlIElXTF9NSU1PX1BTX1NUQVRJQzoKKwljYXNlIElXTF9NSU1PX1BTX0RZTkFNSUM6CisJCSppZGxlX3N0YXRlID0gKGlzX2NhbSkgPyAyIDogMTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfTUlNT19QU19OT05FOgorCQkqaWRsZV9zdGF0ZSA9IChpc19jYW0pID8gKnJ4X3N0YXRlIDogMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKmlkbGVfc3RhdGUgPSAxOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpd2xfc2V0X3J4b25fY2hhaW4gLSBTZXQgdXAgUnggY2hhaW4gdXNhZ2UgaW4gInN0YWdpbmciIFJYT04gaW1hZ2UKKyAqCisgKiBTZWxlY3RzIGhvdyBtYW55IGFuZCB3aGljaCBSeCByZWNlaXZlcnMvYW50ZW5uYXMvY2hhaW5zIHRvIHVzZS4KKyAqIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBzY2FuIGNvbW1hbmQgLi4uIGl0IHB1dHMgZGF0YSBpbiB3cm9uZyBwbGFjZS4KKyAqLwordm9pZCBpd2xfc2V0X3J4b25fY2hhaW4oc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXU4IGlzX3NpbmdsZSA9IGlzX3NpbmdsZV9yeF9zdHJlYW0ocHJpdik7CisJdTggaWRsZV9zdGF0ZSwgcnhfc3RhdGU7CisKKwlwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4gPSAwOworCXJ4X3N0YXRlID0gaWRsZV9zdGF0ZSA9IDM7CisKKwkvKiBUZWxsIHVDb2RlIHdoaWNoIGFudGVubmFzIGFyZSBhY3R1YWxseSBjb25uZWN0ZWQuCisJICogQmVmb3JlIGZpcnN0IGFzc29jaWF0aW9uLCB3ZSBhc3N1bWUgYWxsIGFudGVubmFzIGFyZSBjb25uZWN0ZWQuCisJICogSnVzdCBhZnRlciBmaXJzdCBhc3NvY2lhdGlvbiwgaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKCkKKwkgKiAgICBjaGVja3Mgd2hpY2ggYW50ZW5uYXMgYWN0dWFsbHkgKmFyZSogY29ubmVjdGVkLiAqLworCXByaXYtPnN0YWdpbmdfcnhvbi5yeF9jaGFpbiB8PQorCQkgICAgY3B1X3RvX2xlMTYocHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA8PAorCQkJCQkJIFJYT05fUlhfQ0hBSU5fVkFMSURfUE9TKTsKKworCS8qIEhvdyBtYW55IHJlY2VpdmVycyBzaG91bGQgd2UgdXNlPyAqLworCWl3bGNvcmVfZ2V0X3J4X2NoYWluX2NvdW50ZXIocHJpdiwgJmlkbGVfc3RhdGUsICZyeF9zdGF0ZSk7CisJcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluIHw9CisJCWNwdV90b19sZTE2KHJ4X3N0YXRlIDw8IFJYT05fUlhfQ0hBSU5fTUlNT19DTlRfUE9TKTsKKwlwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4gfD0KKwkJY3B1X3RvX2xlMTYoaWRsZV9zdGF0ZSA8PCBSWE9OX1JYX0NIQUlOX0NOVF9QT1MpOworCisJaWYgKCFpc19zaW5nbGUgJiYgKHJ4X3N0YXRlID49IDIpICYmCisJICAgICF0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluIHw9IFJYT05fUlhfQ0hBSU5fTUlNT19GT1JDRV9NU0s7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4gJj0gflJYT05fUlhfQ0hBSU5fTUlNT19GT1JDRV9NU0s7CisKKwlJV0xfREVCVUdfQVNTT0MoInJ4IGNoYWluICVYXG4iLCBwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4pOworfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25fY2hhaW4pOwogCiAvKioKICAqIGl3bGNvcmVfc2V0X3J4b25fY2hhbm5lbCAtIFNldCB0aGUgcGh5bW9kZSBhbmQgY2hhbm5lbCB2YWx1ZXMgaW4gc3RhZ2luZyBSWE9OCkBAIC0xODgsNyArNzgzLDcgQEAKICAqIE5PVEU6ICBEb2VzIG5vdCBjb21taXQgdG8gdGhlIGhhcmR3YXJlOyBpdCBzZXRzIGFwcHJvcHJpYXRlIGJpdCBmaWVsZHMKICAqIGluIHRoZSBzdGFnaW5nIFJYT04gZmxhZyBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIHBoeW1vZGUKICAqLwotaW50IGl3bGNvcmVfc2V0X3J4b25fY2hhbm5lbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCitpbnQgaXdsX3NldF9yeG9uX2NoYW5uZWwoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCQl1MTYgY2hhbm5lbCkKIHsKQEAgLTIxNCw2OCArODA5LDE4NSBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGl3bGNvcmVfc2V0X3J4b25fY2hhbm5lbCk7CitFWFBPUlRfU1lNQk9MKGl3bF9zZXRfcnhvbl9jaGFubmVsKTsKIAotc3RhdGljIHZvaWQgaXdsY29yZV9pbml0X2h3KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK2ludCBpd2xfc2V0dXBfbWFjKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi0+aHc7CiAJaHctPnJhdGVfY29udHJvbF9hbGdvcml0aG0gPSAiaXdsLTQ5NjUtcnMiOwogCi0JLyogVGVsbCBtYWM4MDIxMSBhbmQgaXRzIGNsaWVudHMgKGUuZy4gV2lyZWxlc3MgRXh0ZW5zaW9ucykKLQkgKgkgdGhlIHJhbmdlIG9mIHNpZ25hbCBxdWFsaXR5IHZhbHVlcyB0aGF0IHdlJ2xsIHByb3ZpZGUuCi0JICogTmVnYXRpdmUgdmFsdWVzIGZvciBsZXZlbC9ub2lzZSBpbmRpY2F0ZSB0aGF0IHdlJ2xsIHByb3ZpZGUgZEJtLgotCSAqIEZvciBXRSwgYXQgbGVhc3QsIG5vbi0wIHZhbHVlcyBoZXJlICplbmFibGUqIGRpc3BsYXkgb2YgdmFsdWVzCi0JICoJIGluIGFwcCAoaXdjb25maWcpLiAqLwotCWh3LT5tYXhfcnNzaSA9IC0yMDsgLyogc2lnbmFsIGxldmVsLCBuZWdhdGl2ZSBpbmRpY2F0ZXMgZEJtICovCi0JaHctPm1heF9ub2lzZSA9IC0yMDsJLyogbm9pc2UgbGV2ZWwsIG5lZ2F0aXZlIGluZGljYXRlcyBkQm0gKi8KLQlody0+bWF4X3NpZ25hbCA9IDEwMDsJLyogbGluayBxdWFsaXR5IGluZGljYXRpb24gKCUpICovCi0KLQkvKiBUZWxsIG1hYzgwMjExIG91ciBUeCBjaGFyYWN0ZXJpc3RpY3MgKi8KLQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFOwotCisJLyogVGVsbCBtYWM4MDIxMSBvdXIgY2hhcmFjdGVyaXN0aWNzICovCisJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfR0VOX0JFQUNPTl9URU1QTEFURSB8CisJCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCSAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNOwogCS8qIERlZmF1bHQgdmFsdWU7IDQgRURDQSBRT1MgcHJpb3JpdGllcyAqLwogCWh3LT5xdWV1ZXMgPSA0OwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0JLyogRW5oYW5jZWQgdmFsdWU7IG1vcmUgcXVldWVzLCB0byBzdXBwb3J0IDExbiBhZ2dyZWdhdGlvbiAqLwotCWh3LT5xdWV1ZXMgPSAxNjsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwotfQorCS8qIHF1ZXVlcyB0byBzdXBwb3J0IDExbiBhZ2dyZWdhdGlvbiAqLworCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikKKwkJaHctPmFtcGR1X3F1ZXVlcyA9IHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX2FtcGR1X3F1ZXVlczsKIAotaW50IGl3bF9zZXR1cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JaW50IHJldCA9IDA7Ci0JaXdsY29yZV9pbml0X2h3KHByaXYpOwotCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmluaXRfZHJ2KHByaXYpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9zZXR1cCk7CisJaHctPmNvbmYuYmVhY29uX2ludCA9IDEwMDsKIAotLyogTG93IGxldmVsIGRyaXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdXBkYXRlIGl3bGNvcmUgd2l0aAotICogZHJpdmVyIHN0YXR1cy4KLSAqLwotaW50IGl3bGNvcmVfbG93X2xldmVsX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgICBlbnVtIGl3bGNvcmVfY2FyZF9ub3RpZnkgbm90aWZ5KQotewotCWludCByZXQ7Ci0Jc3dpdGNoIChub3RpZnkpIHsKLQljYXNlIElXTENPUkVfSU5JVF9FVlQ6Ci0JCXJldCA9IGl3bF9yZmtpbGxfaW5pdChwcml2KTsKLQkJaWYgKHJldCkKLQkJCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgotCQkJCSAgIklnbm9yaW5nIGVycm9yOiAlZFxuIiwgcmV0KTsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xDT1JFX1NUQVJUX0VWVDoKLQkJYnJlYWs7Ci0JY2FzZSBJV0xDT1JFX1NUT1BfRVZUOgotCQlicmVhazsKLQljYXNlIElXTENPUkVfUkVNT1ZFX0VWVDoKLQkJaXdsX3Jma2lsbF91bnJlZ2lzdGVyKHByaXYpOwotCQlicmVhazsKKwlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscykKKwkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9CisJCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpCisJCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPQorCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCisJcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHByaXYtPmh3KTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3IChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQorCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGl3bGNvcmVfbG93X2xldmVsX25vdGlmeSk7CitFWFBPUlRfU1lNQk9MKGl3bF9zZXR1cF9tYWMpOworCitpbnQgaXdsX3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8gPSBwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0bzsKKwlwcml2LT5od19wYXJhbXMubWF4X3J4cV9zaXplID0gUlhfUVVFVUVfU0laRTsKKwlwcml2LT5od19wYXJhbXMubWF4X3J4cV9sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsKKwlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5hbXNkdV9zaXplXzhLKQorCQlwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUgPSBJV0xfUlhfQlVGX1NJWkVfOEs7CisJZWxzZQorCQlwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUgPSBJV0xfUlhfQlVGX1NJWkVfNEs7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9wa3Rfc2l6ZSA9IHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSAtIDI1NjsKKworCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGVfMTFuKQorCQlwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9OOworCisJLyogRGV2aWNlLXNwZWNpZmljIHNldHVwICovCisJcmV0dXJuIHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9od19wYXJhbXMocHJpdik7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zZXRfaHdfcGFyYW1zKTsKKworaW50IGl3bF9pbml0X2RydihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKworCXByaXYtPnJldHJ5X3JhdGUgPSAxOworCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cG93ZXJfZGF0YS5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3RhX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5oY21kX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5scV9tbmdyLmxvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVfZnJhbWVzKTsKKworCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKKworCS8qIENsZWFyIHRoZSBkcml2ZXIncyAobm90IGRldmljZSdzKSBzdGF0aW9uIHRhYmxlICovCisJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOworCisJcHJpdi0+ZGF0YV9yZXRyeV9saW1pdCA9IC0xOworCXByaXYtPmllZWVfY2hhbm5lbHMgPSBOVUxMOworCXByaXYtPmllZWVfcmF0ZXMgPSBOVUxMOworCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCisJcHJpdi0+aXdfbW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX1NUQTsKKworCXByaXYtPnVzZV9hbnRfYl9mb3JfbWFuYWdlbWVudF9mcmFtZSA9IDE7IC8qIHN0YXJ0IHdpdGggYW50IEIgKi8KKwlwcml2LT5wc19tb2RlID0gSVdMX01JTU9fUFNfTk9ORTsKKworCS8qIENob29zZSB3aGljaCByZWNlaXZlcnMvYW50ZW5uYXMgdG8gdXNlICovCisJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOworCWl3bF9pbml0X3NjYW5fcGFyYW1zKHByaXYpOworCisJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZW5hYmxlX3FvcykKKwkJcHJpdi0+cW9zX2RhdGEucW9zX2VuYWJsZSA9IDE7CisKKwlpd2xfcmVzZXRfcW9zKHByaXYpOworCisJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDA7CisJcHJpdi0+cW9zX2RhdGEucW9zX2NhcC52YWwgPSAwOworCisJaXdsX3NldF9yeG9uX2NoYW5uZWwocHJpdiwgSUVFRTgwMjExX0JBTkRfMkdIWiwgNik7CisKKwlwcml2LT5yYXRlc19tYXNrID0gSVdMX1JBVEVTX01BU0s7CisJLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQUMgbW9kZSAqLworCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfQUM7CisJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWDsKKworCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBpd2xjb3JlX2luaXRfZ2Vvcyhwcml2KTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlJPUigiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfY2hhbm5lbF9tYXA6CisJaXdsX2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2luaXRfZHJ2KTsKKwordm9pZCBpd2xfZnJlZV9jYWxpYl9yZXN1bHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlrZnJlZShwcml2LT5jYWxpYl9yZXN1bHRzLmxvX3Jlcyk7CisJcHJpdi0+Y2FsaWJfcmVzdWx0cy5sb19yZXMgPSBOVUxMOworCXByaXYtPmNhbGliX3Jlc3VsdHMubG9fcmVzX2xlbiA9IDA7CisKKwlrZnJlZShwcml2LT5jYWxpYl9yZXN1bHRzLnR4X2lxX3Jlcyk7CisJcHJpdi0+Y2FsaWJfcmVzdWx0cy50eF9pcV9yZXMgPSBOVUxMOworCXByaXYtPmNhbGliX3Jlc3VsdHMudHhfaXFfcmVzX2xlbiA9IDA7CisKKwlrZnJlZShwcml2LT5jYWxpYl9yZXN1bHRzLnR4X2lxX3BlcmRfcmVzKTsKKwlwcml2LT5jYWxpYl9yZXN1bHRzLnR4X2lxX3BlcmRfcmVzID0gTlVMTDsKKwlwcml2LT5jYWxpYl9yZXN1bHRzLnR4X2lxX3BlcmRfcmVzX2xlbiA9IDA7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9mcmVlX2NhbGliX3Jlc3VsdHMpOworCitpbnQgaXdsX3NldF90eF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHM4IHR4X3Bvd2VyLCBib29sIGZvcmNlKQoreworCWludCByZXQgPSAwOworCWlmICh0eF9wb3dlciA8IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7CisJCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxpbWl0LlxuIiwKKwkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0eF9wb3dlciA+IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUFYKSB7CisJCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIGxpbWl0LlxuIiwKKwkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwcml2LT50eF9wb3dlcl91c2VyX2xtdCAhPSB0eF9wb3dlcikKKwkJZm9yY2UgPSB0cnVlOworCisJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSB0eF9wb3dlcjsKKworCWlmIChmb3JjZSAmJiBwcml2LT5jZmctPm9wcy0+bGliLT5zZW5kX3R4X3Bvd2VyKQorCQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5zZW5kX3R4X3Bvd2VyKHByaXYpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NldF90eF9wb3dlcik7CisKKwordm9pZCBpd2xfdW5pbml0X2RydihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaXdsX2ZyZWVfY2FsaWJfcmVzdWx0cyhwcml2KTsKKwlpd2xjb3JlX2ZyZWVfZ2Vvcyhwcml2KTsKKwlpd2xfZnJlZV9jaGFubmVsX21hcChwcml2KTsKKwlrZnJlZShwcml2LT5zY2FuKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3VuaW5pdF9kcnYpOwogCiBpbnQgaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZmxhZ3MpCiB7CkBAIC0yOTAsMyArMTAwMiw0NDAgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KTsKIAorLyoqCisgKiBpd2xfdmVyaWZ5X2luc3Rfc3BhcnNlIC0gdmVyaWZ5IHJ1bnRpbWUgdUNvZGUgaW1hZ2UgaW4gY2FyZCB2cy4gaG9zdCwKKyAqICAgdXNpbmcgc2FtcGxlIGRhdGEgMTAwIGJ5dGVzIGFwYXJ0LiAgSWYgdGhlc2Ugc2FtcGxlIHBvaW50cyBhcmUgZ29vZCwKKyAqICAgaXQncyBhIHByZXR0eSBnb29kIGJldCB0aGF0IGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGVtIGlzIGdvb2QsIHRvby4KKyAqLworc3RhdGljIGludCBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsIHUzMiBsZW4pCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgZXJyY250ID0gMDsKKwl1MzIgaTsKKworCUlXTF9ERUJVR19JTkZPKCJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CisKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDEwMCwgaW1hZ2UgKz0gMTAwL3NpemVvZih1MzIpKSB7CisJCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLworCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKKwkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLworCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKKwkJCWkgKyBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKKwkJCXJldCA9IC1FSU87CisJCQllcnJjbnQrKzsKKwkJCWlmIChlcnJjbnQgPj0gMykKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGl3bGNvcmVfdmVyaWZ5X2luc3RfZnVsbCAtIHZlcmlmeSBydW50aW1lIHVDb2RlIGltYWdlIGluIGNhcmQgdnMuIGhvc3QsCisgKiAgICAgbG9va2luZyBhdCBhbGwgZGF0YS4KKyAqLworc3RhdGljIGludCBpd2xfdmVyaWZ5X2luc3RfZnVsbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsCisJCQkJIHUzMiBsZW4pCit7CisJdTMyIHZhbDsKKwl1MzIgc2F2ZV9sZW4gPSBsZW47CisJaW50IHJldCA9IDA7CisJdTMyIGVycmNudDsKKworCUlXTF9ERUJVR19JTkZPKCJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CisKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCisJZXJyY250ID0gMDsKKwlmb3IgKDsgbGVuID4gMDsgbGVuIC09IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CisJCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLworCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKKwkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLworCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7CisJCQlJV0xfRVJST1IoInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKKwkJCQkgICJvZmZzZXQgMHgleCwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCisJCQkJICBzYXZlX2xlbiAtIGxlbiwgdmFsLCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKKwkJCXJldCA9IC1FSU87CisJCQllcnJjbnQrKzsKKwkJCWlmIChlcnJjbnQgPj0gMjApCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCisJaWYgKCFlcnJjbnQpCisJCUlXTF9ERUJVR19JTkZPCisJCSAgICAoInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXdsX3ZlcmlmeV91Y29kZSAtIGRldGVybWluZSB3aGljaCBpbnN0cnVjdGlvbiBpbWFnZSBpcyBpbiBTUkFNLAorICogICAgYW5kIHZlcmlmeSBpdHMgY29udGVudHMKKyAqLworaW50IGl3bF92ZXJpZnlfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCV9fbGUzMiAqaW1hZ2U7CisJdTMyIGxlbjsKKwlpbnQgcmV0OworCisJLyogVHJ5IGJvb3RzdHJhcCAqLworCWltYWdlID0gKF9fbGUzMiAqKXByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOworCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOworCWlmICghcmV0KSB7CisJCUlXTF9ERUJVR19JTkZPKCJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBUcnkgaW5pdGlhbGl6ZSAqLworCWltYWdlID0gKF9fbGUzMiAqKXByaXYtPnVjb2RlX2luaXQudl9hZGRyOworCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOworCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOworCWlmICghcmV0KSB7CisJCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVHJ5IHJ1bnRpbWUvcHJvdG9jb2wgKi8KKwlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9jb2RlLnZfYWRkcjsKKwlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKKwlyZXQgPSBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKKwlpZiAoIXJldCkgeworCQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CisJCXJldHVybiAwOworCX0KKworCUlXTF9FUlJPUigiTk8gVkFMSUQgVUNPREUgSU1BR0UgSU4gSU5TVFJVQ1RJT04gU1JBTSEhXG4iKTsKKworCS8qIFNpbmNlIG5vdGhpbmcgc2VlbXMgdG8gbWF0Y2gsIHNob3cgZmlyc3Qgc2V2ZXJhbCBkYXRhIGVudHJpZXMgaW4KKwkgKiBpbnN0cnVjdGlvbiBTUkFNLCBzbyBtYXliZSB2aXN1YWwgaW5zcGVjdGlvbiB3aWxsIGdpdmUgYSBjbHVlLgorCSAqIFNlbGVjdGlvbiBvZiBib290c3RyYXAgaW1hZ2UgKHZzLiBvdGhlciBpbWFnZXMpIGlzIGFyYml0cmFyeS4gKi8KKwlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9ib290LnZfYWRkcjsKKwlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKKwlyZXQgPSBpd2xfdmVyaWZ5X2luc3RfZnVsbChwcml2LCBpbWFnZSwgbGVuKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF92ZXJpZnlfdWNvZGUpOworCisKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKK3sKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDE6CisJCXJldHVybiAiRkFJTCI7CisJY2FzZSAyOgorCQlyZXR1cm4gIkJBRF9QQVJBTSI7CisJY2FzZSAzOgorCQlyZXR1cm4gIkJBRF9DSEVDS1NVTSI7CisJY2FzZSA0OgorCQlyZXR1cm4gIk5NSV9JTlRFUlJVUFQiOworCWNhc2UgNToKKwkJcmV0dXJuICJTWVNBU1NFUlQiOworCWNhc2UgNjoKKwkJcmV0dXJuICJGQVRBTF9FUlJPUiI7CisJfQorCisJcmV0dXJuICJVTktOT1dOIjsKK30KKworI2RlZmluZSBFUlJPUl9TVEFSVF9PRkZTRVQgICgxICogc2l6ZW9mKHUzMikpCisjZGVmaW5lIEVSUk9SX0VMRU1fU0laRSAgICAgKDcgKiBzaXplb2YodTMyKSkKKwordm9pZCBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MzIgZGF0YTIsIGxpbmU7CisJdTMyIGRlc2MsIHRpbWUsIGNvdW50LCBiYXNlLCBkYXRhMTsKKwl1MzIgYmxpbmsxLCBibGluazIsIGlsaW5rMSwgaWxpbmsyOworCWludCByZXQ7CisKKwlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQorCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmVycm9yX2V2ZW50X3RhYmxlX3B0cik7CisJZWxzZQorCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5lcnJvcl9ldmVudF90YWJsZV9wdHIpOworCisJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CisJCUlXTF9FUlJPUigiTm90IHZhbGlkIGVycm9yIGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCXJldHVybjsKKwl9CisKKwljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCisJaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgeworCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOworCQlJV0xfRVJST1IoIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLCBwcml2LT5zdGF0dXMsIGNvdW50KTsKKwl9CisKKwlkZXNjID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDEgKiBzaXplb2YodTMyKSk7CisJYmxpbmsxID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDMgKiBzaXplb2YodTMyKSk7CisJYmxpbmsyID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDQgKiBzaXplb2YodTMyKSk7CisJaWxpbmsxID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDUgKiBzaXplb2YodTMyKSk7CisJaWxpbmsyID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDYgKiBzaXplb2YodTMyKSk7CisJZGF0YTEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNyAqIHNpemVvZih1MzIpKTsKKwlkYXRhMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA4ICogc2l6ZW9mKHUzMikpOworCWxpbmUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOSAqIHNpemVvZih1MzIpKTsKKwl0aW1lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDExICogc2l6ZW9mKHUzMikpOworCisJSVdMX0VSUk9SKCJEZXNjICAgICAgICBUaW1lICAgICAgICIKKwkJImRhdGExICAgICAgZGF0YTIgICAgICBsaW5lXG4iKTsKKwlJV0xfRVJST1IoIiUtMTNzICgjJWQpICUwMTB1IDB4JTA4WCAweCUwOFggJXVcbiIsCisJCWRlc2NfbG9va3VwKGRlc2MpLCBkZXNjLCB0aW1lLCBkYXRhMSwgZGF0YTIsIGxpbmUpOworCUlXTF9FUlJPUigiYmxpbmsxICBibGluazIgIGlsaW5rMSAgaWxpbmsyXG4iKTsKKwlJV0xfRVJST1IoIjB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WFxuIiwgYmxpbmsxLCBibGluazIsCisJCWlsaW5rMSwgaWxpbmsyKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9kdW1wX25pY19lcnJvcl9sb2cpOworCisjZGVmaW5lIEVWRU5UX1NUQVJUX09GRlNFVCAgKDQgKiBzaXplb2YodTMyKSkKKworLyoqCisgKiBpd2xfcHJpbnRfZXZlbnRfbG9nIC0gRHVtcCBlcnJvciBldmVudCBsb2cgdG8gc3lzbG9nCisgKgorICogTk9URTogTXVzdCBiZSBjYWxsZWQgd2l0aCBpd2w0OTY1X2dyYWJfbmljX2FjY2VzcygpIGFscmVhZHkgb2J0YWluZWQhCisgKi8KK3ZvaWQgaXdsX3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCisJCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQoreworCXUzMiBpOworCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCisJdTMyIGV2ZW50X3NpemU7IC8qIDIgdTMycywgb3IgMyB1MzJzIGlmIHRpbWVzdGFtcCByZWNvcmRlZCAqLworCXUzMiBwdHI7ICAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBsb2cgZGF0YSAqLworCXUzMiBldiwgdGltZSwgZGF0YTsgLyogZXZlbnQgbG9nIGRhdGEgKi8KKworCWlmIChudW1fZXZlbnRzID09IDApCisJCXJldHVybjsKKwlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQorCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmxvZ19ldmVudF90YWJsZV9wdHIpOworCWVsc2UKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CisKKwlpZiAobW9kZSA9PSAwKQorCQlldmVudF9zaXplID0gMiAqIHNpemVvZih1MzIpOworCWVsc2UKKwkJZXZlbnRfc2l6ZSA9IDMgKiBzaXplb2YodTMyKTsKKworCXB0ciA9IGJhc2UgKyBFVkVOVF9TVEFSVF9PRkZTRVQgKyAoc3RhcnRfaWR4ICogZXZlbnRfc2l6ZSk7CisKKwkvKiAidGltZSIgaXMgYWN0dWFsbHkgImRhdGEiIGZvciBtb2RlIDAgKG5vIHRpbWVzdGFtcCkuCisJKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLiAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKKwkJZXYgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQlwdHIgKz0gc2l6ZW9mKHUzMik7CisJCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQlwdHIgKz0gc2l6ZW9mKHUzMik7CisJCWlmIChtb2RlID09IDApIHsKKwkJCS8qIGRhdGEsIGV2ICovCisJCQlJV0xfRVJST1IoIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsIHRpbWUsIGV2KTsKKwkJfSBlbHNlIHsKKwkJCWRhdGEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQkJcHRyICs9IHNpemVvZih1MzIpOworCQkJSVdMX0VSUk9SKCJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKKwkJCQkJdGltZSwgZGF0YSwgZXYpOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfcHJpbnRfZXZlbnRfbG9nKTsKKworCit2b2lkIGl3bF9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KKwl1MzIgY2FwYWNpdHk7ICAgLyogZXZlbnQgbG9nIGNhcGFjaXR5IGluICMgZW50cmllcyAqLworCXUzMiBtb2RlOyAgICAgICAvKiAwIC0gbm8gdGltZXN0YW1wLCAxIC0gdGltZXN0YW1wIHJlY29yZGVkICovCisJdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCisJdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLworCXUzMiBzaXplOyAgICAgICAvKiAjIGVudHJpZXMgdGhhdCB3ZSdsbCBwcmludCAqLworCisJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKKwllbHNlCisJCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOworCisJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CisJCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CisJCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogZXZlbnQgbG9nIGhlYWRlciAqLworCWNhcGFjaXR5ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CisJbW9kZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMSAqIHNpemVvZih1MzIpKSk7CisJbnVtX3dyYXBzID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgyICogc2l6ZW9mKHUzMikpKTsKKwluZXh0X2VudHJ5ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgzICogc2l6ZW9mKHUzMikpKTsKKworCXNpemUgPSBudW1fd3JhcHMgPyBjYXBhY2l0eSA6IG5leHRfZW50cnk7CisKKwkvKiBiYWlsIG91dCBpZiBub3RoaW5nIGluIGxvZyAqLworCWlmIChzaXplID09IDApIHsKKwkJSVdMX0VSUk9SKCJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJcmV0dXJuOworCX0KKworCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKKwkJCXNpemUsIG51bV93cmFwcyk7CisKKwkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCisJICogaS5lIHRoZSBuZXh0IG9uZSB0aGF0IHVDb2RlIHdvdWxkIGZpbGwuICovCisJaWYgKG51bV93cmFwcykKKwkJaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5LAorCQkJCQljYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUpOworCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KKwlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOworCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2R1bXBfbmljX2V2ZW50X2xvZyk7CisKK3ZvaWQgaXdsX3JmX2tpbGxfY3RfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsX2N0X2tpbGxfY29uZmlnIGNtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCisJCSAgICBDU1JfVUNPREVfRFJWX0dQMV9SRUdfQklUX0NUX0tJTExfRVhJVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IgPQorCQljcHVfdG9fbGUzMihwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQpOworCisJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQsCisJCQkgICAgICAgc2l6ZW9mKGNtZCksICZjbWQpOworCWlmIChyZXQpCisJCUlXTF9FUlJPUigiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIGZhaWxlZFxuIik7CisJZWxzZQorCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZCwgIgorCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGlzICVkXG4iLAorCQkJY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcmZfa2lsbF9jdF9jb25maWcpOworCisvKgorICogQ0FSRF9TVEFURV9DTUQKKyAqCisgKiBVc2U6IFNldHMgdGhlIGRldmljZSdzIGludGVybmFsIGNhcmQgc3RhdGUgdG8gZW5hYmxlLCBkaXNhYmxlLCBvciBoYWx0CisgKgorICogV2hlbiBpbiB0aGUgJ2VuYWJsZScgc3RhdGUgdGhlIGNhcmQgb3BlcmF0ZXMgYXMgbm9ybWFsLgorICogV2hlbiBpbiB0aGUgJ2Rpc2FibGUnIHN0YXRlLCB0aGUgY2FyZCBlbnRlcnMgaW50byBhIGxvdyBwb3dlciBtb2RlLgorICogV2hlbiBpbiB0aGUgJ2hhbHQnIHN0YXRlLCB0aGUgY2FyZCBpcyBzaHV0IGRvd24gYW5kIG11c3QgYmUgZnVsbHkKKyAqIHJlc3RhcnRlZCB0byBjb21lIGJhY2sgb24uCisgKi8KK3N0YXRpYyBpbnQgaXdsX3NlbmRfY2FyZF9zdGF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBmbGFncywgdTggbWV0YV9mbGFnKQoreworCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0geworCQkuaWQgPSBSRVBMWV9DQVJEX1NUQVRFX0NNRCwKKwkJLmxlbiA9IHNpemVvZih1MzIpLAorCQkuZGF0YSA9ICZmbGFncywKKwkJLm1ldGEuZmxhZ3MgPSBtZXRhX2ZsYWcsCisJfTsKKworCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7Cit9CisKK3ZvaWQgaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCUlXTF9ERUJVR19SRl9LSUxMKCJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPIE9GRlxuIik7CisKKwlpd2xfc2Nhbl9jYW5jZWwocHJpdik7CisJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBUCAqLworCWlmIChwcml2LT5pd19tb2RlICE9IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKKwkJCSAgICBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJLyogY2FsbCB0aGUgaG9zdCBjb21tYW5kIG9ubHkgaWYgbm8gaHcgcmYta2lsbCBzZXQgKi8KKwkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgJiYKKwkJICAgIGl3bF9pc19yZWFkeShwcml2KSkKKwkJCWl3bF9zZW5kX2NhcmRfc3RhdGUocHJpdiwKKwkJCQlDQVJEX1NUQVRFX0NNRF9ESVNBQkxFLCAwKTsKKwkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7CisJCQkvKiBtYWtlIHN1cmUgbWFjODAyMTEgc3RvcCBzZW5kaW5nIFR4IGZyYW1lICovCisJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQorCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHByaXYtPmh3KTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8pOworCitpbnQgaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybiAwOworCisJSVdMX0RFQlVHX1JGX0tJTEwoIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gT05cbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKworCS8qIElmIHRoZSBkcml2ZXIgaXMgdXAgaXQgd2lsbCByZWNlaXZlIENBUkRfU1RBVEVfTk9USUZJQ0FUSU9OCisJICogbm90aWZpY2F0aW9uIHdoZXJlIGl0IHdpbGwgY2xlYXIgU1cgcmZraWxsIHN0YXR1cy4KKwkgKiBTZXR0aW5nIGl0IGhlcmUgd291bGQgYnJlYWsgdGhlIGhhbmRsZXIuIE9ubHkgaWYgdGhlCisJICogaW50ZXJmYWNlIGlzIGRvd24gd2UgY2FuIHNldCBoZXJlIHNpbmNlIHdlIGRvbid0CisJICogcmVjZWl2ZSBhbnkgZnVydGhlciBub3RpZmljYXRpb24uCisJICovCisJaWYgKCFwcml2LT5pc19vcGVuKQorCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHdha2UgdXAgdWNvZGUgKi8KKwltc2xlZXAoMTApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpd2xfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKKwlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpCisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FuIG5vdCB0dXJuIHJhZGlvIGJhY2sgb24gLSAiCisJCQkJICAiZGlzYWJsZWQgYnkgSFcgc3dpdGNoXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSWYgdGhlIGRyaXZlciBpcyBhbHJlYWR5IGxvYWRlZCwgaXQgd2lsbCByZWNlaXZlCisJICogQ0FSRF9TVEFURV9OT1RJRklDQVRJT04gbm90aWZpY2F0aW9ucyBhbmQgdGhlIGhhbmRsZXIgd2lsbAorCSAqIGNhbGwgcmVzdGFydCB0byByZWxvYWQgdGhlIGRyaXZlci4KKwkgKi8KKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAppbmRleCA3MTkzZDk3Li5kYjY2MTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCkBAIC03MCw3ICs3MCw3IEBACiBzdHJ1Y3QgaXdsX2NtZDsKIAogCi0jZGVmaW5lIElXTFdJRklfVkVSU0lPTiAiMS4yLjI2ayIKKyNkZWZpbmUgSVdMV0lGSV9WRVJTSU9OICIxLjMuMjdrIgogI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA4IEludGVsIENvcnBvcmF0aW9uIgogCiAjZGVmaW5lIElXTF9QQ0lfREVWSUNFKGRldiwgc3ViZGV2LCBjZmcpIFwKQEAgLTg2LDI4ICs4Niw2MyBAQAogCWludCAoKnJ4b25fYXNzb2MpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB9Owogc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyB7Ci0JaW50ICgqZW5xdWV1ZV9oY21kKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCk7CisJdTE2ICgqZ2V0X2hjbWRfc2l6ZSkodTggY21kX2lkLCB1MTYgbGVuKTsKKwl1MTYgKCpidWlsZF9hZGRzdGFfaGNtZCkoY29uc3Qgc3RydWN0IGl3bF9hZGRzdGFfY21kICpjbWQsIHU4ICpkYXRhKTsKKwl2b2lkICgqZ2Fpbl9jb21wdXRhdGlvbikoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJdTMyICphdmVyYWdlX25vaXNlLAorCQkJdTE2IG1pbl9hdmVyYWdlX25vaXNlX2FudGVubmF0X2ksCisJCQl1MzIgbWluX2F2ZXJhZ2Vfbm9pc2UpOworCXZvaWQgKCpjaGFpbl9ub2lzZV9yZXNldCkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwl2b2lkICgqcnRzX3R4X2NtZF9mbGFnKShzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQlfX2xlMzIgKnR4X2ZsYWdzKTsKIH07CiAKIHN0cnVjdCBpd2xfbGliX29wcyB7Ci0JLyogaXdsd2lmaSBkcml2ZXIgKHByaXYpIGluaXQgKi8KLQlpbnQgKCppbml0X2Rydikoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAkvKiBzZXQgaHcgZGVwZW5kYW50IHBlcmFtZXRlcnMgKi8KIAlpbnQgKCpzZXRfaHdfcGFyYW1zKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCisJLyogdWNvZGUgc2hhcmVkIG1lbW9yeSAqLworCWludCAoKmFsbG9jX3NoYXJlZF9tZW0pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisJdm9pZCAoKmZyZWVfc2hhcmVkX21lbSkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwlpbnQgKCpzaGFyZWRfbWVtX3J4X2lkeCkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwkvKiBIYW5kbGluZyBUWCAqLwogCXZvaWQgKCp0eHFfdXBkYXRlX2J5dGVfY250X3RibCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxLAorCQkJCQlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCiAJCQkJCXUxNiBieXRlX2NudCk7Ci0JLyogbmljIGluaXQgKi8KLQlpbnQgKCpod19uaWNfaW5pdCkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwl2b2lkICgqdHhxX2ludmFsX2J5dGVfY250X3RibCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworCXZvaWQgKCp0eHFfc2V0X3NjaGVkKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBtYXNrKTsKKwkvKiBhZ2dyZWdhdGlvbnMgKi8KKwlpbnQgKCp0eHFfYWdnX2VuYWJsZSkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLCBpbnQgdHhfZmlmbywKKwkJCSAgICAgIGludCBzdGFfaWQsIGludCB0aWQsIHUxNiBzc25faWR4KTsKKwlpbnQgKCp0eHFfYWdnX2Rpc2FibGUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IHR4cV9pZCwgdTE2IHNzbl9pZHgsCisJCQkgICAgICAgdTggdHhfZmlmbyk7CisJLyogc2V0dXAgUnggaGFuZGxlciAqLworCXZvaWQgKCpyeF9oYW5kbGVyX3NldHVwKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCS8qIHNldHVwIGRlZmVycmVkIHdvcmsgKi8KKwl2b2lkICgqc2V0dXBfZGVmZXJyZWRfd29yaykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwkvKiBjYW5jZWwgZGVmZXJyZWQgd29yayAqLworCXZvaWQgKCpjYW5jZWxfZGVmZXJyZWRfd29yaykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwkvKiBhbGl2ZSBub3RpZmljYXRpb24gYWZ0ZXIgaW5pdCB1Q29kZSBsb2FkICovCisJdm9pZCAoKmluaXRfYWxpdmVfc3RhcnQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJLyogYWxpdmUgbm90aWZpY2F0aW9uICovCiAJaW50ICgqYWxpdmVfbm90aWZ5KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCS8qIGNoZWNrIHZhbGlkaXR5IG9mIHJ0YyBkYXRhIGFkZHJlc3MgKi8KIAlpbnQgKCppc192YWxpZF9ydGNfZGF0YV9hZGRyKSh1MzIgYWRkcik7CiAJLyogMXN0IHVjb2RlIGxvYWQgKi8KIAlpbnQgKCpsb2FkX3Vjb2RlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCS8qIHJma2lsbCAqLwotCXZvaWQgKCpyYWRpb19raWxsX3N3KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBkaXNhYmxlX3JhZGlvKTsKKwkgLyogcG93ZXIgbWFuYWdlbWVudCAqLworCXN0cnVjdCB7CisJCWludCAoKmluaXQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisJCWludCAoKnJlc2V0KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCQl2b2lkICgqc3RvcCkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwkJdm9pZCAoKmNvbmZpZykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwkJaW50ICgqc2V0X3B3cl9zcmMpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgZW51bSBpd2xfcHdyX3NyYyBzcmMpOworCX0gYXBtX29wczsKKwkvKiBwb3dlciAqLworCWludCAoKnNldF9wb3dlcikoc3RydWN0IGl3bF9wcml2ICpwcml2LCB2b2lkICpjbWQpOworCWludCAoKnNlbmRfdHhfcG93ZXIpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCXZvaWQgKCp1cGRhdGVfY2hhaW5fZmxhZ3MpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisJdm9pZCAoKnRlbXBlcmF0dXJlKSAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAkvKiBlZXByb20gb3BlcmF0aW9ucyAoYXMgZGVmaW5lZCBpbiBpd2wtZWVwcm9tLmgpICovCiAJc3RydWN0IGl3bF9lZXByb21fb3BzIGVlcHJvbV9vcHM7CiB9OwpAQCAtMTI0LDE1ICsxNTksMTkgQEAKIAlpbnQgZGVidWc7CQkvKiBkZWY6IDAgPSBtaW5pbWFsIGRlYnVnIGxvZyBtZXNzYWdlcyAqLwogCWludCBkaXNhYmxlX2h3X3NjYW47CS8qIGRlZjogMCA9IHVzZSBoL3cgc2NhbiAqLwogCWludCBudW1fb2ZfcXVldWVzOwkvKiBkZWY6IEhXIGRlcGVuZGVudCAqLworCWludCBudW1fb2ZfYW1wZHVfcXVldWVzOy8qIGRlZjogSFcgZGVwZW5kZW50ICovCiAJaW50IGVuYWJsZV9xb3M7CQkvKiBkZWY6IDEgPSB1c2UgcXVhbGl0eSBvZiBzZXJ2aWNlICovCisJaW50IGRpc2FibGVfMTFuOwkvKiBkZWY6IDAgPSBkaXNhYmxlIDExbiBjYXBhYmlsaXRpZXMgKi8KIAlpbnQgYW1zZHVfc2l6ZV84SzsJLyogZGVmOiAxID0gZW5hYmxlIDhLIGFtc2R1IHNpemUgKi8KIAlpbnQgYW50ZW5uYTsgIAkJLyogZGVmOiAwID0gYm90aCBhbnRlbm5hcyAodXNlIGRpdmVyc2l0eSkgKi8KKwlpbnQgcmVzdGFydF9mdzsJCS8qIGRlZjogMSA9IHJlc3RhcnQgZmlybXdhcmUgKi8KIH07CiAKIHN0cnVjdCBpd2xfY2ZnIHsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKmZ3X25hbWU7CiAJdW5zaWduZWQgaW50IHNrdTsKKwlpbnQgZWVwcm9tX3NpemU7CiAJY29uc3Qgc3RydWN0IGl3bF9vcHMgKm9wczsKIAljb25zdCBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgKm1vZF9wYXJhbXM7CiB9OwpAQCAtMTQzLDE0ICsxODIsMTEzIEBACiAKIHN0cnVjdCBpZWVlODAyMTFfaHcgKml3bF9hbGxvY19hbGwoc3RydWN0IGl3bF9jZmcgKmNmZywKIAkJc3RydWN0IGllZWU4MDIxMV9vcHMgKmh3X29wcyk7Cit2b2lkIGl3bF9od19kZXRlY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAotdm9pZCBpd2xjb3JlX2NsZWFyX3N0YXRpb25zX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci12b2lkIGl3bGNvcmVfcmVzZXRfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1pbnQgaXdsY29yZV9zZXRfcnhvbl9jaGFubmVsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK3ZvaWQgaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9mcmVlX2NhbGliX3Jlc3VsdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3Jlc2V0X3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfc2V0X3J4b25fY2hhaW4oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfc2V0X3J4b25fY2hhbm5lbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAogCQkJCXUxNiBjaGFubmVsKTsKK3ZvaWQgaXdsX3NldF9yeG9uX2h0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9odF9pbmZvICpodF9pbmZvKTsKK3U4IGl3bF9pc19mYXRfdHhfYWxsb3dlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpzdGFfaHRfaW5mKTsKK2ludCBpd2xfaHdfbmljX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfc2V0dXBfbWFjKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfaW5pdF9kcnYoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3VuaW5pdF9kcnYoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKy8qICJrZWVwIHdhcm0iIGZ1bmN0aW9ucyAqLworaW50IGl3bF9rd19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX2t3X2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9rd19mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKLWludCBpd2xfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBSWAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBpd2xfcnhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSk7CitpbnQgaXdsX3J4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9yeF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpxKTsKK3ZvaWQgaXdsX3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKK3ZvaWQgaXdsX3J4X3JlcGxlbmlzaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9yeF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKK2ludCBpd2xfcnhfYWdnX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCB0aWQsIHUxNiBzc24pOworaW50IGl3bF9yeF9hZ2dfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgdGlkKTsKKy8qIEZJWE1FOiByZW1vdmUgd2hlbiBUWCBpcyBtb3ZlZCB0byBpd2wgY29yZSAqLworaW50IGl3bF9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX3J4X3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2xfcnhfcXVldWUgKnEpOwordm9pZCBpd2xfcnhfYWxsb2NhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3R4X2NtZF9jb21wbGV0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK2ludCBpd2xfdHhfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsIGludCBpbmRleCk7CisvKiBIYW5kbGVycyAqLwordm9pZCBpd2xfcnhfbWlzc2VkX2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwordm9pZCBpd2xfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CisKKy8qIFRYIGhlbHBlcnMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFRYCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgaXdsX3R4cV9jdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfdHhfc2tiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisvKiBGSVhNRTogcmVtb3ZlIHdoZW4gZnJlZSBUeCBpcyBmdWxseSBtZXJnZWQgaW50byBpd2xjb3JlICovCitpbnQgaXdsX2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7Cit2b2lkIGl3bF9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdm9pZCAqdGZkLAorCQkJCQlkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pOworaW50IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitpbnQgaXdsX3R4X2FnZ19zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCwgdTE2ICpzc24pOworaW50IGl3bF90eF9hZ2dfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgLCBjb25zdCB1OCAqcmEsIHUxNiB0aWQpOworaW50IGl3bF90eHFfY2hlY2tfZW1wdHkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCB1OCB0aWQsIGludCB0eHFfaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRYIHBvd2VyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBpd2xfc2V0X3R4X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggdHhfcG93ZXIsIGJvb2wgZm9yY2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJGIC1LaWxsIC0gaGVyZSBhbmQgbm90IGluIGl3bC1yZmtpbGwuaCB0byBiZSBhdmFpbGFibGUgd2hlbgorICogUkYta2lsbCBzdWJzeXN0ZW0gaXMgbm90IGNvbXBpbGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhdGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgaXdsX2h3cmF0ZV90b190eF9jb250cm9sKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJhdGVfbl9mbGFncywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyk7CitpbnQgaXdsX2h3cmF0ZV90b19wbGNwX2lkeCh1MzIgcmF0ZV9uX2ZsYWdzKTsKKworc3RhdGljIGlubGluZSB1OCBpd2xfaHdfZ2V0X3JhdGUoX19sZTMyIHJhdGVfbl9mbGFncykKK3sKKwlyZXR1cm4gbGUzMl90b19jcHUocmF0ZV9uX2ZsYWdzKSAmIDB4RkY7Cit9CitzdGF0aWMgaW5saW5lIHUzMiBpd2xfaHdfZ2V0X3JhdGVfbl9mbGFncyhfX2xlMzIgcmF0ZV9uX2ZsYWdzKQoreworCXJldHVybiBsZTMyX3RvX2NwdShyYXRlX25fZmxhZ3MpICYgMHgxRkZGRjsKK30KK3N0YXRpYyBpbmxpbmUgX19sZTMyIGl3bF9od19zZXRfcmF0ZV9uX2ZsYWdzKHU4IHJhdGUsIHUzMiBmbGFncykKK3sKKwlyZXR1cm4gY3B1X3RvX2xlMzIoZmxhZ3N8KHUzMilyYXRlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNjYW5uaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBpd2xfaW5pdF9zY2FuX3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9zY2FuX2NhbmNlbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBtcyk7Citjb25zdCBjaGFyICppd2xfZXNjYXBlX2Vzc2lkKGNvbnN0IGNoYXIgKmVzc2lkLCB1OCBlc3NpZF9sZW4pOworaW50IGl3bF9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9zZXR1cF9zY2FuX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgIFMgZSBuIGQgaSBuIGcgICAgIEggbyBzIHQgICAgIEMgbyBtIG0gYSBuIGQgcyAgICoKQEAgLTE2Nyw2ICszMDUsMTcgQEAKIAkJCSAgIGludCAoKmNhbGxiYWNrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSAgIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpKTsKKworaW50IGl3bF9lbnF1ZXVlX2hjbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEVycm9yIEhhbmRsaW5nIERlYnVnZ2luZworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBpd2xfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHN0YXJ0X2lkeCwKKwkJCSB1MzIgbnVtX2V2ZW50cywgdTMyIG1vZGUpOwordm9pZCBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwogLyoqKioqKioqKioqKioqKiBEUklWRVIgU1RBVFVTIEZVTkNUSU9OUyAgICoqKioqLwogCiAjZGVmaW5lIFNUQVRVU19IQ01EX0FDVElWRQkwCS8qIGhvc3QgY29tbWFuZCBpbiBwcm9ncmVzcyAqLwpAQCAtMTg4LDYgKzMzNyw3IEBACiAjZGVmaW5lIFNUQVRVU19QT1dFUl9QTUkJMTYKICNkZWZpbmUgU1RBVFVTX0ZXX0VSUk9SCQkxNwogI2RlZmluZSBTVEFUVVNfQ09ORl9QRU5ESU5HCTE4CisjZGVmaW5lIFNUQVRVU19NT0RFX1BFTkRJTkcJMTkKIAogCiBzdGF0aWMgaW5saW5lIGludCBpd2xfaXNfcmVhZHkoc3RydWN0IGl3bF9wcml2ICpwcml2KQpAQCAtMjA5LDEwICszNTksMTkgQEAKIAlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX0lOSVQsICZwcml2LT5zdGF0dXMpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpd2xfaXNfcmZraWxsX3N3KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpd2xfaXNfcmZraWxsX2h3KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBpd2xfaXNfcmZraWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpIHx8Ci0JICAgICAgIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKKwlyZXR1cm4gaXdsX2lzX3Jma2lsbF9odyhwcml2KSB8fCBpd2xfaXNfcmZraWxsX3N3KHByaXYpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpd2xfaXNfcmVhZHlfcmYoc3RydWN0IGl3bF9wcml2ICpwcml2KQpAQCAtMjI0LDIzICszODMsMjcgQEAKIAlyZXR1cm4gaXdsX2lzX3JlYWR5KHByaXYpOwogfQogCi0KLWVudW0gaXdsY29yZV9jYXJkX25vdGlmeSB7Ci0JSVdMQ09SRV9JTklUX0VWVCA9IDAsCi0JSVdMQ09SRV9TVEFSVF9FVlQgPSAxLAotCUlXTENPUkVfU1RPUF9FVlQgPSAyLAotCUlXTENPUkVfUkVNT1ZFX0VWVCA9IDMsCi19OwotCi1pbnQgaXdsY29yZV9sb3dfbGV2ZWxfbm90aWZ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICAgZW51bSBpd2xjb3JlX2NhcmRfbm90aWZ5IG5vdGlmeSk7CitleHRlcm4gdm9pZCBpd2xfcmZfa2lsbF9jdF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGV4dGVybiBpbnQgaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZmxhZ3MpOwotaW50IGl3bF9zZW5kX2xxX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCSAgICBzdHJ1Y3QgaXdsX2xpbmtfcXVhbGl0eV9jbWQgKmxxLCB1OCBmbGFncyk7CitleHRlcm4gaW50IGl3bF92ZXJpZnlfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsX3NlbmRfbHFfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kICpscSwgdTggZmxhZ3MpOworZXh0ZXJuIHZvaWQgaXdsX3J4X3JlcGx5X3J4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOworZXh0ZXJuIHZvaWQgaXdsX3J4X3JlcGx5X3J4X3BoeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X3JlcGx5X2NvbXByZXNzZWRfYmEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9zZW5kX3J4b25fYXNzb2Moc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXJldHVybiBwcml2LT5jZmctPm9wcy0+aGNtZC0+cnhvbl9hc3NvYyhwcml2KTsKIH0KIAorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICppd2xfZ2V0X2h3X21vZGUoCisJCQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKK3sKKwlyZXR1cm4gcHJpdi0+aHctPndpcGh5LT5iYW5kc1tiYW5kXTsKK30KKwogI2VuZGlmIC8qIF9faXdsX2NvcmVfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCmluZGV4IDEyNzI1NzkuLjU0NWVkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCkBAIC04NywxNiArODcsMTYgQEAKIC8qIEVFUFJPTSByZWFkcyAqLwogI2RlZmluZSBDU1JfRUVQUk9NX1JFRyAgICAgICAgICAoQ1NSX0JBU0UrMHgwMmMpCiAjZGVmaW5lIENTUl9FRVBST01fR1AgICAgICAgICAgIChDU1JfQkFTRSsweDAzMCkKKyNkZWZpbmUgQ1NSX0dJT19SRUcJCShDU1JfQkFTRSsweDAzQykKICNkZWZpbmUgQ1NSX0dQX1VDT0RFCQkoQ1NSX0JBU0UrMHgwNDQpCiAjZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AxICAgICAgIChDU1JfQkFTRSsweDA1NCkKICNkZWZpbmUgQ1NSX1VDT0RFX0RSVl9HUDFfU0VUICAgKENTUl9CQVNFKzB4MDU4KQogI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9DTFIgICAoQ1NSX0JBU0UrMHgwNWMpCiAjZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AyICAgICAgIChDU1JfQkFTRSsweDA2MCkKLSNkZWZpbmUgQ1NSX0dJT19DSElDS0VOX0JJVFMgICAgKENTUl9CQVNFKzB4MTAwKQogI2RlZmluZSBDU1JfTEVEX1JFRyAgICAgICAgICAgICAoQ1NSX0JBU0UrMHgwOTQpCisjZGVmaW5lIENTUl9HSU9fQ0hJQ0tFTl9CSVRTICAgIChDU1JfQkFTRSsweDEwMCkKIAotLyogQW5hbG9nIHBoYXNlLWxvY2stbG9vcCBjb25maWd1cmF0aW9uICgzOTQ1IG9ubHkpCi0gKiBTZXQgYml0IDI0LiAqLworLyogQW5hbG9nIHBoYXNlLWxvY2stbG9vcCBjb25maWd1cmF0aW9uICAqLwogI2RlZmluZSBDU1JfQU5BX1BMTF9DRkcgICAgICAgICAoQ1NSX0JBU0UrMHgyMGMpCiAvKgogICogSW5kaWNhdGVzIGhhcmR3YXJlIHJldiwgdG8gZGV0ZXJtaW5lIENDSyBiYWNrb2ZmIGZvciB0eHBvd2VyIGNhbGN1bGF0aW9uLgpAQCAtMTA3LDkgKzEwNyw5IEBACiAKIC8qIEJpdHMgZm9yIENTUl9IV19JRl9DT05GSUdfUkVHICovCiAjZGVmaW5lIENTUjQ5X0hXX0lGX0NPTkZJR19SRUdfQklUXzQ5NjVfUgkoMHgwMDAwMDAxMCkKLSNkZWZpbmUgQ1NSNDlfSFdfSUZfQ09ORklHX1JFR19NU0tfQk9BUkRfVkVSCSgweDAwMDAwQzAwKQotI2RlZmluZSBDU1I0OV9IV19JRl9DT05GSUdfUkVHX0JJVF9NQUNfU0kJCSgweDAwMDAwMTAwKQotI2RlZmluZSBDU1I0OV9IV19JRl9DT05GSUdfUkVHX0JJVF9SQURJT19TSQkoMHgwMDAwMDIwMCkKKyNkZWZpbmUgQ1NSX0hXX0lGX0NPTkZJR19SRUdfTVNLX0JPQVJEX1ZFUgkoMHgwMDAwMEMwMCkKKyNkZWZpbmUgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX01BQ19TSSAJKDB4MDAwMDAxMDApCisjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9SQURJT19TSQkoMHgwMDAwMDIwMCkKIAogI2RlZmluZSBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01CICAgICAgICAgKDB4MDAwMDAxMDApCiAjZGVmaW5lIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTU0gICAgICAgICAoMHgwMDAwMDIwMCkKQEAgLTE3MCw2ICsxNzAsMTAgQEAKICNkZWZpbmUgQ1NSNDlfRkhfSU5UX1RYX01BU0sJKENTUl9GSF9JTlRfQklUX1RYX0NITkwxIHwgXAogCQkJCSBDU1JfRkhfSU5UX0JJVF9UWF9DSE5MMCkKIAorLyogR1BJTyAqLworI2RlZmluZSBDU1JfR1BJT19JTl9CSVRfQVVYX1BPV0VSICAgICAgICAgICAgICAgICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBDU1JfR1BJT19JTl9WQUxfVkFVWF9QV1JfU1JDICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBDU1JfR1BJT19JTl9WQUxfVk1BSU5fUFdSX1NSQyAgICAgICAgICAgICAgICgweDAwMDAwMjAwKQogCiAvKiBSRVNFVCAqLwogI2RlZmluZSBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKQEAgLTE5MSw2ICsxOTUsMTYgQEAKICNkZWZpbmUgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cgICAgICAgICAgKDB4MDgwMDAwMDApCiAKIAorLyogSFcgUkVWICovCisjZGVmaW5lIENTUl9IV19SRVZfVFlQRV9NU0sgICAgICAgICAgICAoMHgwMDAwMEYwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfMzk0NSAgICAgICAgICAgKDB4MDAwMDBEMCkKKyNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzQ5NjUgICAgICAgICAgICgweDAwMDAwMDApCisjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MzAwICAgICAgICAgICAoMHgwMDAwMDIwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNTM1MCAgICAgICAgICAgKDB4MDAwMDAzMCkKKyNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzUxMDAgICAgICAgICAgICgweDAwMDAwNTApCisjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MTUwICAgICAgICAgICAoMHgwMDAwMDQwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfTk9ORSAgICAgICAgICAgKDB4MDAwMDBGMCkKKwogLyogRUVQUk9NIFJFRyAqLwogI2RlZmluZSBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSwkoMHgwMDAwMDAwMSkKICNkZWZpbmUgQ1NSX0VFUFJPTV9SRUdfQklUX0NNRAkJKDB4MDAwMDAwMDIpCkBAIC0yMDAsMTcgKzIxNCwxNSBAQAogI2RlZmluZSBDU1JfRUVQUk9NX0dQX0JBRF9TSUdOQVRVUkUJKDB4MDAwMDAwMDApCiAjZGVmaW5lIENTUl9FRVBST01fR1BfSUZfT1dORVJfTVNLCSgweDAwMDAwMTgwKQogCisvKiBDU1IgR0lPICovCisjZGVmaW5lIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRAkoMHgwMDAwMDAwMikKKwogLyogVUNPREUgRFJWIEdQICovCiAjZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCiAjZGVmaW5lIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCiAjZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCAgICAgICAgICAgKDB4MDAwMDAwMDQpCiAjZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AxX1JFR19CSVRfQ1RfS0lMTF9FWElUICAgICAgKDB4MDAwMDAwMDgpCiAKLS8qIEdQSU8gKi8KLSNkZWZpbmUgQ1NSX0dQSU9fSU5fQklUX0FVWF9QT1dFUiAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMCkKLSNkZWZpbmUgQ1NSX0dQSU9fSU5fVkFMX1ZBVVhfUFdSX1NSQyAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMJCUNTUl9HUElPX0lOX0JJVF9BVVhfUE9XRVIKLQogLyogR0kgQ2hpY2tlbiBCaXRzICovCiAjZGVmaW5lIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfTDFBX05PX0wwU19SWCAgKDB4MDA4MDAwMDApCiAjZGVmaW5lIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfRElTX0wwU19FWElUX1RJTUVSICAoMHgyMDAwMDAwMCkKQEAgLTIyMCw2ICsyMzIsMTAgQEAKICNkZWZpbmUgQ1NSX0xFRF9SRUdfVFJVTl9PTiAoMHg3OCkKICNkZWZpbmUgQ1NSX0xFRF9SRUdfVFJVTl9PRkYgKDB4MzgpCiAKKy8qIEFOQV9QTEwgKi8KKyNkZWZpbmUgQ1NSMzlfQU5BX1BMTF9DRkdfVkFMICAgICAgICAoMHgwMTAwMDAwMCkKKyNkZWZpbmUgQ1NSNTBfQU5BX1BMTF9DRkdfVkFMICAgICAgICAoMHgwMDg4MDMwMCkKKwogLyo9PT0gSEJVUyAoSG9zdC1zaWRlIEJ1cykgPT09Ki8KICNkZWZpbmUgSEJVU19CQVNFCSgweDQwMCkKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAppbmRleCBjNjA3MjRjLi41ODM4NDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKQEAgLTMwLDM3ICszMCwzNSBAQAogI2RlZmluZSBfX2l3bF9kZWJ1Z19oX18KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi1leHRlcm4gdTMyIGl3bF9kZWJ1Z19sZXZlbDsKICNkZWZpbmUgSVdMX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLWRvIHsgaWYgKGl3bF9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKLSAgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FIjogJWMgJXMgIiBmbXQsIFwKK2RvIHsgaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkgXAorICBkZXZfcHJpbnRrKEtFUk5fRVJSLCAmKHByaXYtPmh3LT53aXBoeS0+ZGV2KSwgIiVjICVzICIgZm10LCBcCiAJIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBJV0xfREVCVUdfTElNSVQobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoKGl3bF9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpICYmIG5ldF9yYXRlbGltaXQoKSkgXAotICBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUiOiAlYyAlcyAiIGZtdCwgXAorZG8geyBpZiAoKHByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKSBcCisgIGRldl9wcmludGsoS0VSTl9FUlIsICYocHJpdi0+aHctPndpcGh5LT5kZXYpLCAiJWMgJXMgIiBmbXQsIFwKIAkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3ByaW50X2hleF9kdW1wKGludCBsZXZlbCwgdm9pZCAqcCwgdTMyIGxlbikKLXsKLQlpZiAoIShpd2xfZGVidWdfbGV2ZWwgJiBsZXZlbCkpCi0JCXJldHVybjsKLQotCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJpd2wgZGF0YTogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwKLQkJCXAsIGxlbiwgMSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCiBzdHJ1Y3QgaXdsX2RlYnVnZnMgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGRlbnRyeSAqZGlyX2RydjsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGF0YTsKLQlzdHJ1Y3QgZGlyX2RhdGFfZmlsZXN7CisJc3RydWN0IGRlbnRyeSAqZGlyX3JmOworCXN0cnVjdCBkaXJfZGF0YV9maWxlcyB7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfc3JhbTsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9lZXByb207CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfc3RhdGlvbnM7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfcnhfc3RhdGlzdGljczsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9zdGF0aXN0aWNzOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xvZ19ldmVudDsKIAl9IGRiZ2ZzX2RhdGFfZmlsZXM7CisJc3RydWN0IGRpcl9yZl9maWxlcyB7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfZGlzYWJsZV9zZW5zaXRpdml0eTsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9kaXNhYmxlX2NoYWluX25vaXNlOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfdHhfcG93ZXI7CisJfSBkYmdmc19yZl9maWxlczsKIAl1MzIgc3JhbV9vZmZzZXQ7CiAJdTMyIHNyYW1fbGVuOwogfTsKQEAgLTc2LDkgKzc0LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBJV0xfREVCVUdfTElNSVQoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfcHJpbnRfaGV4X2R1bXAoaW50IGxldmVsLCB2b2lkICpwLCB1MzIgbGVuKQotewotfQogI2VuZGlmCQkJCS8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCmluZGV4IDlhMzBlMWQuLmVkOTQ4ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAogCi0jaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCiAjaW5jbHVkZSAiaXdsLWRlYnVnLmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKICNpbmNsdWRlICJpd2wtaW8uaCIKQEAgLTU1LDYgKzU1LDEzIEBACiAJCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBERUJVR0ZTX0FERF9CT09MKG5hbWUsIHBhcmVudCwgcHRyKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lID0gICAgICAgICAgICAgICAgICAgICBcCisJZGVidWdmc19jcmVhdGVfYm9vbCgjbmFtZSwgMDY0NCwgZGJnZnMtPmRpcl8jI3BhcmVudCwgcHRyKTsgICAgIFwKKwlpZiAoSVNfRVJSKGRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKSkgICAgICAgICAgXAorCQlnb3RvIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgREVCVUdGU19SRU1PVkUobmFtZSkgIGRvIHsgICAgICAgICAgICAgIFwKIAlkZWJ1Z2ZzX3JlbW92ZShuYW1lKTsgICAgICAgICAgICAgICAgICAgXAogCW5hbWUgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC04NSw2ICs5MiwxNCBAQAogCS5vcGVuID0gaXdsX2RiZ2ZzX29wZW5fZmlsZV9nZW5lcmljLCAgICAgICAgICAgICAgICAgICAgCVwKIH07CiAKKyNkZWZpbmUgREVCVUdGU19XUklURV9GSUxFX09QUyhuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlERUJVR0ZTX1dSSVRFX0ZVTkMobmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXdsX2RiZ2ZzXyMjbmFtZSMjX29wcyA9IHsgICAgICAgICAgXAorCS53cml0ZSA9IGl3bF9kYmdmc18jI25hbWUjI193cml0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLm9wZW4gPSBpd2xfZGJnZnNfb3Blbl9maWxlX2dlbmVyaWMsICAgICAgICAgICAgICAgICAgICAJXAorfTsKKworCiAjZGVmaW5lIERFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJREVCVUdGU19SRUFEX0ZVTkMobmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlERUJVR0ZTX1dSSVRFX0ZVTkMobmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjA2LDcgKzIyMSw3IEBACiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGl3bDQ5NjVfc3RhdGlvbl9lbnRyeSAqc3RhdGlvbjsKKwlzdHJ1Y3QgaXdsX3N0YXRpb25fZW50cnkgKnN0YXRpb247CiAJaW50IG1heF9zdGEgPSBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOwogCWNoYXIgKmJ1ZjsKIAlpbnQgaSwgaiwgcG9zID0gMDsKQEAgLTI0MCwyMSArMjU1LDE4IEBACiAJCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0aWQgZGF0YTpcbiIpOwogCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAogCQkJCQkic2VxX251bVx0XHR0eHFfaWQiKTsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAogCQkJCQkiXHRmcmFtZV9jb3VudFx0d2FpdF9mb3JfYmFcdCIpOwogCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAogCQkJCQkic3RhcnRfaWR4XHRiaXRtYXAwXHQiKTsKIAkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKIAkJCQkJImJpdG1hcDFcdHJhdGVfbl9mbGFncyIpOwotI2VuZGlmCiAJCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcbiIpOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgTUFYX1RJRF9DT1VOVDsgaisrKSB7CiAJCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAogCQkJCQkJIlslZF06XHRcdCV1IiwgaiwKIAkJCQkJCXN0YXRpb24tPnRpZFtqXS5zZXFfbnVtYmVyKTsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKIAkJCQkJCSJcdCV1XHRcdCV1XHRcdCV1XHRcdCIsCiAJCQkJCQlzdGF0aW9uLT50aWRbal0uYWdnLnR4cV9pZCwKQEAgLTI2NSw3ICsyNzcsNiBAQAogCQkJCQkJc3RhdGlvbi0+dGlkW2pdLmFnZy5zdGFydF9pZHgsCiAJCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXN0YXRpb24tPnRpZFtqXS5hZ2cuYml0bWFwLAogCQkJCQkJc3RhdGlvbi0+dGlkW2pdLmFnZy5yYXRlX25fZmxhZ3MpOwotI2VuZGlmCiAJCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiXG4iKTsKIAkJCX0KIAkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlxuIik7CkBAIC0yNzcsOCArMjg4LDcwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2VlcHJvbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICAgIHNpemVfdCBjb3VudCwKKwkJCQkgICAgICAgbG9mZl90ICpwcG9zKQoreworCXNzaXplX3QgcmV0OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHBvcyA9IDAsIG9mcyA9IDAsIGJ1Zl9zaXplID0gMDsKKwljb25zdCB1OCAqcHRyOworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgZWVwcm9tX2xlbiA9IHByaXYtPmNmZy0+ZWVwcm9tX3NpemU7CisJYnVmX3NpemUgPSA0ICogZWVwcm9tX2xlbiArIDI1NjsKKworCWlmIChlZXByb21fbGVuICUgMTYpIHsKKwkJSVdMX0VSUk9SKCJFRVBST00gc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMTYuXG4iKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCS8qIDQgY2hhcmFjdGVycyBmb3IgYnl0ZSAweFlZICovCisJYnVmID0ga3phbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJSVdMX0VSUk9SKCJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXB0ciA9IHByaXYtPmVlcHJvbTsKKwlmb3IgKG9mcyA9IDAgOyBvZnMgPCBlZXByb21fbGVuIDsgb2ZzICs9IDE2KSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZfc2l6ZSAtIHBvcywgIjB4JS40eCAiLCBvZnMpOworCQloZXhfZHVtcF90b19idWZmZXIocHRyICsgb2ZzLCAxNiAsIDE2LCAyLCBidWYgKyBwb3MsCisJCQkJICAgYnVmX3NpemUgLSBwb3MsIDApOworCQlwb3MgKz0gc3RybGVuKGJ1Zik7CisJCWlmIChidWZfc2l6ZSAtIHBvcyA+IDApCisJCQlidWZbcG9zKytdID0gJ1xuJzsKKwl9CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19sb2dfZXZlbnRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXUzMiBldmVudF9sb2dfZmxhZzsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZXZlbnRfbG9nX2ZsYWcpICE9IDEpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChldmVudF9sb2dfZmxhZyA9PSAxKQorCQlpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYpOworCisJcmV0dXJuIGNvdW50OworfQogCiBERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMoc3JhbSk7CitERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKGxvZ19ldmVudCk7CitERUJVR0ZTX1JFQURfRklMRV9PUFMoZWVwcm9tKTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhzdGF0aW9ucyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMocnhfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFModHhfc3RhdGlzdGljcyk7CkBAIC0yOTAsNiArMzYzLDcgQEAKIGludCBpd2xfZGJnZnNfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBpd2xfZGVidWdmcyAqZGJnZnM7CisJc3RydWN0IGRlbnRyeSAqcGh5ZCA9IHByaXYtPmh3LT53aXBoeS0+ZGVidWdmc2RpcjsKIAogCWRiZ2ZzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF9kZWJ1Z2ZzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYmdmcykgewpAQCAtMjk4LDE3ICszNzIsMjMgQEAKIAogCXByaXYtPmRiZ2ZzID0gZGJnZnM7CiAJZGJnZnMtPm5hbWUgPSBuYW1lOwotCWRiZ2ZzLT5kaXJfZHJ2ID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIE5VTEwpOworCWRiZ2ZzLT5kaXJfZHJ2ID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHBoeWQpOwogCWlmICghZGJnZnMtPmRpcl9kcnYgfHwgSVNfRVJSKGRiZ2ZzLT5kaXJfZHJ2KSl7CiAJCWdvdG8gZXJyOwogCX0KIAogCURFQlVHRlNfQUREX0RJUihkYXRhLCBkYmdmcy0+ZGlyX2Rydik7CisJREVCVUdGU19BRERfRElSKHJmLCBkYmdmcy0+ZGlyX2Rydik7CisJREVCVUdGU19BRERfRklMRShlZXByb20sIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUoc3JhbSwgZGF0YSk7CisJREVCVUdGU19BRERfRklMRShsb2dfZXZlbnQsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUoc3RhdGlvbnMsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUocnhfc3RhdGlzdGljcywgZGF0YSk7CiAJREVCVUdGU19BRERfRklMRSh0eF9zdGF0aXN0aWNzLCBkYXRhKTsKLQorCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV9zZW5zaXRpdml0eSwgcmYsICZwcml2LT5kaXNhYmxlX3NlbnNfY2FsKTsKKwlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfY2hhaW5fbm9pc2UsIHJmLAorCQkJICZwcml2LT5kaXNhYmxlX2NoYWluX25vaXNlX2NhbCk7CisJREVCVUdGU19BRERfQk9PTChkaXNhYmxlX3R4X3Bvd2VyLCByZiwgJnByaXYtPmRpc2FibGVfdHhfcG93ZXJfY2FsKTsKIAlyZXR1cm4gMDsKIAogZXJyOgpAQCAtMzI3LDExICs0MDcsMTcgQEAKIAlpZiAoIShwcml2LT5kYmdmcykpCiAJCXJldHVybjsKIAorCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfZWVwcm9tKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3J4X3N0YXRpc3RpY3MpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfdHhfc3RhdGlzdGljcyk7CiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9zcmFtKTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX2xvZ19ldmVudCk7CiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9zdGF0aW9ucyk7CiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRpcl9kYXRhKTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfcmZfZmlsZXMuZmlsZV9kaXNhYmxlX3NlbnNpdGl2aXR5KTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfcmZfZmlsZXMuZmlsZV9kaXNhYmxlX2NoYWluX25vaXNlKTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfcmZfZmlsZXMuZmlsZV9kaXNhYmxlX3R4X3Bvd2VyKTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGlyX3JmKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGlyX2Rydik7CiAJa2ZyZWUocHJpdi0+ZGJnZnMpOwogCXByaXYtPmRiZ2ZzID0gTlVMTDsKQEAgLTMzOSwzICs0MjUsNCBAQAogRVhQT1JUX1NZTUJPTChpd2xfZGJnZnNfdW5yZWdpc3Rlcik7CiAKIAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaApzaW1pbGFyaXR5IGluZGV4IDY2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCmluZGV4IDU4MWI5ODUuLjRkNzg5ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaApAQCAtMjQsMTMgKzI0LDEzIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIFBsZWFzZSB1c2UgdGhpcyBmaWxlIChpd2wtNDk2NS5oKSBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb25zLgotICogUGxlYXNlIHVzZSBpd2wtNDk2NS1jb21tYW5kcy5oIGZvciB1Q29kZSBBUEkgZGVmaW5pdGlvbnMuCisgKiBQbGVhc2UgdXNlIHRoaXMgZmlsZSAoaXdsLWRldi5oKSBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb25zLgorICogUGxlYXNlIHVzZSBpd2wtY29tbWFuZHMuaCBmb3IgdUNvZGUgQVBJIGRlZmluaXRpb25zLgogICogUGxlYXNlIHVzZSBpd2wtNDk2NS1ody5oIGZvciBoYXJkd2FyZS1yZWxhdGVkIGRlZmluaXRpb25zLgogICovCiAKLSNpZm5kZWYgX19pd2xfNDk2NV9oX18KLSNkZWZpbmUgX19pd2xfNDk2NV9oX18KKyNpZm5kZWYgX19pd2xfZGV2X2hfXworI2RlZmluZSBfX2l3bF9kZXZfaF9fCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4gLyogZm9yIHN0cnVjdCBwY2lfZGV2aWNlX2lkICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC00NCwxNiArNDQsMTggQEAKICNpbmNsdWRlICJpd2wtcHJwaC5oIgogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgogI2luY2x1ZGUgIml3bC1sZWQuaCIKKyNpbmNsdWRlICJpd2wtcG93ZXIuaCIKIAogLyogY29uZmlndXJhdGlvbiBmb3IgdGhlIGl3bDQ5NjUgKi8KIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w0OTY1X2Fnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTMwMF9hZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MzUwX2Fnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9iZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hYmdfY2ZnOwogCi0vKiBDaGFuZ2UgZmlybXdhcmUgZmlsZSBuYW1lLCB1c2luZyAiLSIgYW5kIGluY3JlbWVudGluZyBudW1iZXIsCi0gKiAgICpvbmx5KiB3aGVuIHVDb2RlIGludGVyZmFjZSBvciBhcmNoaXRlY3R1cmUgY2hhbmdlcyBzbyB0aGF0IGl0Ci0gKiAgIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggZWFybGllciBkcml2ZXJzLgotICogVGhpcyBudW1iZXIgd2lsbCBhbHNvIGFwcGVhciBpbiA8PCA4IHBvc2l0aW9uIG9mIDFzdCBkd29yZCBvZiB1Q29kZSBmaWxlICovCi0jZGVmaW5lIElXTDQ5NjVfVUNPREVfQVBJICItMSIKLQorLyogQ1QtS0lMTCBjb25zdGFudHMgKi8KKyNkZWZpbmUgQ1RfS0lMTF9USFJFU0hPTEQJMTEwIC8qIGluIENlbHNpdXMgKi8KIAogLyogRGVmYXVsdCBub2lzZSBsZXZlbCB0byByZXBvcnQgd2hlbiBub2lzZSBtZWFzdXJlbWVudCBpcyBub3QgYXZhaWxhYmxlLgogICogICBUaGlzIG1heSBiZSBiZWNhdXNlIHdlJ3JlOgpAQCAtNjgsMTIgKzcwLDYgQEAKICAqICAgYXZlcmFnZXMgd2l0aGluIGFuIHM4J3MgKHVzZWQgaW4gc29tZSBhcHBzKSByYW5nZSBvZiBuZWdhdGl2ZSB2YWx1ZXMuICovCiAjZGVmaW5lIElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEUgKC0xMjcpCiAKLWVudW0gaXdsNDk2NV9hbnRlbm5hIHsKLQlJV0xfQU5URU5OQV9ESVZFUlNJVFksCi0JSVdMX0FOVEVOTkFfTUFJTiwKLQlJV0xfQU5URU5OQV9BVVgKLX07Ci0KIC8qCiAgKiBSVFMgdGhyZXNob2xkIGhlcmUgaXMgdG90YWwgc2l6ZSBbMjM0N10gbWludXMgNCBGQ1MgYnl0ZXMKICAqIFBlciBzcGVjOgpAQCAtOTEsNyArODcsNyBAQAogI2RlZmluZQlERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUIDdVCiAjZGVmaW5lCURFRkFVTFRfTE9OR19SRVRSWV9MSU1JVCAgNFUKIAotc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciB7CitzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgewogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0xMDIsNyArOTgsNyBAQAogICoKICAqIENvbnRhaW5zIGNvbW1vbiBkYXRhIGZvciBSeCBhbmQgVHggcXVldWVzCiAgKi8KLXN0cnVjdCBpd2w0OTY1X3F1ZXVlIHsKK3N0cnVjdCBpd2xfcXVldWUgewogCWludCBuX2JkOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIEJEcyBpbiB0aGlzIHF1ZXVlICovCiAJaW50IHdyaXRlX3B0cjsgICAgICAgLyogMS1zdCBlbXB0eSBlbnRyeSAoaW5kZXgpIGhvc3RfdyovCiAJaW50IHJlYWRfcHRyOyAgICAgICAgIC8qIGxhc3QgdXNlZCBlbnRyeSAoaW5kZXgpIGhvc3RfciovCkBAIC0xMTgsMTMgKzExNCwxMiBAQAogI2RlZmluZSBNQVhfTlVNX09GX1RCUyAgICAgICAgICAoMjApCiAKIC8qIE9uZSBmb3IgZWFjaCBURkQgKi8KLXN0cnVjdCBpd2w0OTY1X3R4X2luZm8gewotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHN0YXR1czsKK3N0cnVjdCBpd2xfdHhfaW5mbyB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYltNQVhfTlVNX09GX1RCU107CiB9OwogCiAvKioKLSAqIHN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlIC0gVHggUXVldWUgZm9yIERNQQorICogc3RydWN0IGl3bF90eF9xdWV1ZSAtIFR4IFF1ZXVlIGZvciBETUEKICAqIEBxOiBnZW5lcmljIFJ4L1R4IHF1ZXVlIGRlc2NyaXB0b3IKICAqIEBiZDogYmFzZSBvZiBjaXJjdWxhciBidWZmZXIgb2YgVEZEcwogICogQGNtZDogYXJyYXkgb2YgY29tbWFuZC9UeCBidWZmZXJzCkBAIC0xMzYsMTIgKzEzMSwxMiBAQAogICogQSBUeCBxdWV1ZSBjb25zaXN0cyBvZiBjaXJjdWxhciBidWZmZXIgb2YgQkRzIChhLmsuYS4gVEZEcywgdHJhbnNtaXQgZnJhbWUKICAqIGRlc2NyaXB0b3JzKSBhbmQgcmVxdWlyZWQgbG9ja2luZyBzdHJ1Y3R1cmVzLgogICovCi1zdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSB7Ci0Jc3RydWN0IGl3bDQ5NjVfcXVldWUgcTsKLQlzdHJ1Y3QgaXdsNDk2NV90ZmRfZnJhbWUgKmJkOworc3RydWN0IGl3bF90eF9xdWV1ZSB7CisJc3RydWN0IGl3bF9xdWV1ZSBxOworCXN0cnVjdCBpd2xfdGZkX2ZyYW1lICpiZDsKIAlzdHJ1Y3QgaXdsX2NtZCAqY21kOwogCWRtYV9hZGRyX3QgZG1hX2FkZHJfY21kOwotCXN0cnVjdCBpd2w0OTY1X3R4X2luZm8gKnR4YjsKKwlzdHJ1Y3QgaXdsX3R4X2luZm8gKnR4YjsKIAlpbnQgbmVlZF91cGRhdGU7CiAJaW50IHNjaGVkX3JldHJ5OwogCWludCBhY3RpdmU7CkBAIC0xNTgsNTAgKzE1MywxNyBAQAogCXM2NCBsYXN0X3JhZGFyX3RpbWU7CiB9OwogCi0vKiBjdXJyZW50IFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCByYXRlIGZvciBlYWNoIGNoYW5uZWwuCi0gKiByZXF1ZXN0ZWQgcG93ZXIgaXMgbGltaXRlZCBieToKLSAqIC0tIHJlZ3VsYXRvcnkgRUVQUk9NIGxpbWl0cyBmb3IgdGhpcyBjaGFubmVsCi0gKiAtLSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKGNsaXAtcG93ZXJzKQotICogLS0gc3BlY3RydW0gbWFuYWdlbWVudAotICogLS0gdXNlciBwcmVmZXJlbmNlIChlLmcuIGl3Y29uZmlnKQotICogd2hlbiByZXF1ZXN0ZWQgcG93ZXIgaXMgc2V0LCBiYXNlIHBvd2VyIGluZGV4IG11c3QgYWxzbyBiZSBzZXQuICovCi1zdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3Bvd2VyX2luZm8gewotCXN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLwotCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwotCXM4IGJhc2VfcG93ZXJfaW5kZXg7CS8qIGdhaW4gaW5kZXggZm9yIHBvd2VyIGF0IGZhY3RvcnkgdGVtcC4gKi8KLQlzOCByZXF1ZXN0ZWRfcG93ZXI7CS8qIHBvd2VyIChkQm0pIHJlcXVlc3RlZCBmb3IgdGhpcyBjaG5sL3JhdGUgKi8KLX07Ci0KLS8qIGN1cnJlbnQgc2NhbiBUeCBwb3dlciB2YWx1ZXMgdG8gdXNlLCBvbmUgZm9yIGVhY2ggc2NhbiByYXRlIGZvciBlYWNoCi0gKiBjaGFubmVsLiAqLwotc3RydWN0IGl3bDQ5NjVfc2Nhbl9wb3dlcl9pbmZvIHsKLQlzdHJ1Y3QgaXdsNDk2NV90eF9wb3dlciB0cGM7CS8qIGFjdHVhbCByYWRpbyBhbmQgRFNQIGdhaW4gc2V0dGluZ3MgKi8KLQlzOCBwb3dlcl90YWJsZV9pbmRleDsJLyogYWN0dWFsIChjb21wZW5zdCdkKSBpbmRleCBpbnRvIGdhaW4gdGFibGUgKi8KLQlzOCByZXF1ZXN0ZWRfcG93ZXI7CS8qIHNjYW4gcHdyIChkQm0pIHJlcXVlc3RlZCBmb3IgY2hubC9yYXRlICovCi19OwotCi0vKiBGb3IgZmF0X2V4dGVuc2lvbl9jaGFubmVsICovCi1lbnVtIHsKLQlIVF9JRV9FWFRfQ0hBTk5FTF9OT05FID0gMCwKLQlIVF9JRV9FWFRfQ0hBTk5FTF9BQk9WRSwKLQlIVF9JRV9FWFRfQ0hBTk5FTF9JTlZBTElELAotCUhUX0lFX0VYVF9DSEFOTkVMX0JFTE9XLAotCUhUX0lFX0VYVF9DSEFOTkVMX01BWAotfTsKLQogLyoKICAqIE9uZSBmb3IgZWFjaCBjaGFubmVsLCBob2xkcyBhbGwgY2hhbm5lbCBzZXR1cCBkYXRhCiAgKiBTb21lIG9mIHRoZSBmaWVsZHMgKGUuZy4gZWVwcm9tIGFuZCBmbGFncy9tYXhfcG93ZXJfYXZnKSBhcmUgcmVkdW5kYW50CiAgKiAgICAgd2l0aCBvbmUgYW5vdGhlciEKICAqLwotI2RlZmluZSBJV0w0OTY1X01BWF9SQVRFICgzMykKLQogc3RydWN0IGl3bF9jaGFubmVsX2luZm8gewogCXN0cnVjdCBpd2w0OTY1X2NoYW5uZWxfdGdkX2luZm8gdGdkOwogCXN0cnVjdCBpd2w0OTY1X2NoYW5uZWxfdGdoX2luZm8gdGdoOwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGVlcHJvbTsJICAvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGZhdF9lZXByb207IC8qIEVFUFJPTSByZWd1bGF0b3J5IGxpbWl0IGZvcgotCQkJCQkJICAgKiBGQVQgY2hhbm5lbCAqLworCXN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCAqLworCXN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgZmF0X2VlcHJvbTsJLyogRUVQUk9NIHJlZ3VsYXRvcnkgbGltaXQgZm9yCisJCQkJCQkgKiBGQVQgY2hhbm5lbCAqLwogCiAJdTggY2hhbm5lbDsJICAvKiBjaGFubmVsIG51bWJlciAqLwogCXU4IGZsYWdzOwkgIC8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwpAQCAtMjE0LDExICsxNzYsNiBAQAogCXU4IGJhbmRfaW5kZXg7CSAgLyogMC00LCBtYXBzIGNoYW5uZWwgdG8gYmFuZDEvMi8zLzQvNSAqLwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAotCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoICJub3JtYWwiIGRhdGEgVHggcmF0ZS4KLQkgKiBUaGVzZSBpbmNsdWRlLCBpbiBhZGRpdGlvbiB0byBSRiBhbmQgRFNQIGdhaW4sIGEgZmV3IGZpZWxkcyBmb3IKLQkgKiAgIHJlbWVtYmVyaW5nL21vZGlmeWluZyBnYWluIHNldHRpbmdzIChpbmRleGVzKS4gKi8KLQlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3Bvd2VyX2luZm8gcG93ZXJfaW5mb1tJV0w0OTY1X01BWF9SQVRFXTsKLQogCS8qIEZBVCBjaGFubmVsIGluZm8gKi8KIAlzOCBmYXRfbWF4X3Bvd2VyX2F2ZzsJLyogKGRCbSkgcmVndWwuIGVlcHJvbSwgbm9ybWFsIFR4LCBhbnkgcmF0ZSAqLwogCXM4IGZhdF9jdXJyX3R4cG93OwkvKiAoZEJtKSByZWd1bGF0b3J5L3NwZWN0cnVtL3VzZXIgKG5vdCBoL3cpICovCkBAIC0yMjYsOSArMTgzLDYgQEAKIAlzOCBmYXRfc2Nhbl9wb3dlcjsJLyogKGRCbSkgZWVwcm9tLCBkaXJlY3Qgc2NhbnMsIGFueSByYXRlICovCiAJdTggZmF0X2ZsYWdzOwkJLyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCiAJdTggZmF0X2V4dGVuc2lvbl9jaGFubmVsOyAvKiBIVF9JRV9FWFRfQ0hBTk5FTF8qICovCi0KLQkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCBzY2FuIHJhdGUsIGZvciBkaXJlY3RlZCBzY2Fucy4gKi8KLQlzdHJ1Y3QgaXdsNDk2NV9zY2FuX3Bvd2VyX2luZm8gc2Nhbl9wd3JfaW5mb1tJV0xfTlVNX1NDQU5fUkFURVNdOwogfTsKIAogc3RydWN0IGl3bDQ5NjVfY2xpcF9ncm91cCB7CkBAIC0yNTIsMjkgKzIwNiw5IEBACiAKIC8qIFBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlcikgc3RydWN0dXJlcyAqLwogCi1zdHJ1Y3QgaXdsNDk2NV9wb3dlcl92ZWNfZW50cnkgewotCXN0cnVjdCBpd2w0OTY1X3Bvd2VydGFibGVfY21kIGNtZDsKLQl1OCBub19kdGltOwotfTsKLSNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzAgICgwKQotI2RlZmluZSBJV0xfUE9XRVJfUkFOR0VfMSAgKDEpCi0KLSNkZWZpbmUgSVdMX1BPV0VSX01PREVfQ0FNCTB4MDAJLyogQ29udGludW91c2x5IEF3YXJlIE1vZGUsIGFsd2F5cyBvbiAqLwotI2RlZmluZSBJV0xfUE9XRVJfSU5ERVhfMwkweDAzCi0jZGVmaW5lIElXTF9QT1dFUl9JTkRFWF81CTB4MDUKLSNkZWZpbmUgSVdMX1BPV0VSX0FDCQkweDA2Ci0jZGVmaW5lIElXTF9QT1dFUl9CQVRURVJZCTB4MDcKLSNkZWZpbmUgSVdMX1BPV0VSX0xJTUlUCQkweDA3Ci0jZGVmaW5lIElXTF9QT1dFUl9NQVNLCQkweDBGCi0jZGVmaW5lIElXTF9QT1dFUl9FTkFCTEVECTB4MTAKLSNkZWZpbmUgSVdMX1BPV0VSX0xFVkVMKHgpCSgoeCkgJiBJV0xfUE9XRVJfTUFTSykKLQotc3RydWN0IGl3bDQ5NjVfcG93ZXJfbWdyIHsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGl3bDQ5NjVfcG93ZXJfdmVjX2VudHJ5IHB3cl9yYW5nZV8wW0lXTF9QT1dFUl9BQ107Ci0Jc3RydWN0IGl3bDQ5NjVfcG93ZXJfdmVjX2VudHJ5IHB3cl9yYW5nZV8xW0lXTF9QT1dFUl9BQ107Ci0JdTggYWN0aXZlX2luZGV4OwotCXUzMiBkdGltX3ZhbDsKK2VudW0gaXdsX3B3cl9zcmMgeworCUlXTF9QV1JfU1JDX1ZNQUlOLAorCUlXTF9QV1JfU1JDX1ZBVVgsCiB9OwogCiAjZGVmaW5lIElFRUU4MDIxMV9EQVRBX0xFTiAgICAgICAgICAgICAgMjMwNApAQCAtMjgyLDcgKzIxNiw3IEBACiAjZGVmaW5lIElFRUU4MDIxMV9ITEVOICAgICAgICAgICAgICAgICAgKElFRUU4MDIxMV80QUREUl9MRU4pCiAjZGVmaW5lIElFRUU4MDIxMV9GUkFNRV9MRU4gICAgICAgICAgICAgKElFRUU4MDIxMV9EQVRBX0xFTiArIElFRUU4MDIxMV9ITEVOKQogCi1zdHJ1Y3QgaXdsNDk2NV9mcmFtZSB7CitzdHJ1Y3QgaXdsX2ZyYW1lIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyIGZyYW1lOwogCQlzdHJ1Y3QgaXdsNDk2NV90eF9iZWFjb25fY21kIGJlYWNvbjsKQEAgLTMyOCw2ICsyNjIsOCBAQAogCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBJV0xfQ01EX01BWF9QQVlMT0FEIDMyMAorCiAvKioKICAqIHN0cnVjdCBpd2xfY21kCiAgKgpAQCAtMzM5LDggKzI3NSw4IEBACiAJc3RydWN0IGl3bF9jbWRfbWV0YSBtZXRhOwkvKiBkcml2ZXIgZGF0YSAqLwogCXN0cnVjdCBpd2xfY21kX2hlYWRlciBoZHI7CS8qIHVDb2RlIEFQSSAqLwogCXVuaW9uIHsKLQkJc3RydWN0IGl3bDQ5NjVfYWRkc3RhX2NtZCBhZGRzdGE7Ci0JCXN0cnVjdCBpd2w0OTY1X2xlZF9jbWQgbGVkOworCQlzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgYWRkc3RhOworCQlzdHJ1Y3QgaXdsX2xlZF9jbWQgbGVkOwogCQl1MzIgZmxhZ3M7CiAJCXU4IHZhbDg7CiAJCXUxNiB2YWwxNjsKQEAgLTM0OCwxMiArMjg0LDEzIEBACiAJCXN0cnVjdCBpd2w0OTY1X2J0X2NtZCBidDsKIAkJc3RydWN0IGl3bDQ5NjVfcnhvbl90aW1lX2NtZCByeG9uX3RpbWU7CiAJCXN0cnVjdCBpd2w0OTY1X3Bvd2VydGFibGVfY21kIHBvd2VydGFibGU7Ci0JCXN0cnVjdCBpd2w0OTY1X3Fvc3BhcmFtX2NtZCBxb3NwYXJhbTsKLQkJc3RydWN0IGl3bDQ5NjVfdHhfY21kIHR4OworCQlzdHJ1Y3QgaXdsX3Fvc3BhcmFtX2NtZCBxb3NwYXJhbTsKKwkJc3RydWN0IGl3bF90eF9jbWQgdHg7CiAJCXN0cnVjdCBpd2w0OTY1X3R4X2JlYWNvbl9jbWQgdHhfYmVhY29uOwogCQlzdHJ1Y3QgaXdsNDk2NV9yeG9uX2Fzc29jX2NtZCByeG9uX2Fzc29jOworCQlzdHJ1Y3QgaXdsX3JlbV9zdGFfY21kIHJtX3N0YTsKIAkJdTggKmluZGlyZWN0OwotCQl1OCBwYXlsb2FkWzM2MF07CisJCXU4IHBheWxvYWRbSVdMX0NNRF9NQVhfUEFZTE9BRF07CiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY21kOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTM3OCw3ICszMTUsNyBAQAogI2RlZmluZSBTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMUyAgMTIKIAogLyoqCi0gKiBzdHJ1Y3QgaXdsNDk2NV9yeF9xdWV1ZSAtIFJ4IHF1ZXVlCisgKiBzdHJ1Y3QgaXdsX3J4X3F1ZXVlIC0gUnggcXVldWUKICAqIEBwcm9jZXNzZWQ6IEludGVybmFsIGluZGV4IHRvIGxhc3QgaGFuZGxlZCBSeCBwYWNrZXQKICAqIEByZWFkOiBTaGFyZWQgaW5kZXggdG8gbmV3ZXN0IGF2YWlsYWJsZSBSeCBidWZmZXIKICAqIEB3cml0ZTogU2hhcmVkIGluZGV4IHRvIG9sZGVzdCB3cml0dGVuIFJ4IHBhY2tldApAQCAtMzg3LDEzICszMjQsMTMgQEAKICAqIEByeF91c2VkOiBMaXN0IG9mIFJ4IGJ1ZmZlcnMgd2l0aCBubyBTS0IKICAqIEBuZWVkX3VwZGF0ZTogZmxhZyB0byBpbmRpY2F0ZSB3ZSBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4CiAgKgotICogTk9URTogIHJ4X2ZyZWUgYW5kIHJ4X3VzZWQgYXJlIHVzZWQgYXMgYSBGSUZPIGZvciBpd2w0OTY1X3J4X21lbV9idWZmZXJzCisgKiBOT1RFOiAgcnhfZnJlZSBhbmQgcnhfdXNlZCBhcmUgdXNlZCBhcyBhIEZJRk8gZm9yIGl3bF9yeF9tZW1fYnVmZmVycwogICovCi1zdHJ1Y3QgaXdsNDk2NV9yeF9xdWV1ZSB7CitzdHJ1Y3QgaXdsX3J4X3F1ZXVlIHsKIAlfX2xlMzIgKmJkOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciBwb29sW1JYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlNdOwotCXN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnF1ZXVlW1JYX1FVRVVFX1NJWkVdOworCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciBwb29sW1JYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlNdOworCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcXVldWVbUlhfUVVFVUVfU0laRV07CiAJdTMyIHByb2Nlc3NlZDsKIAl1MzIgcmVhZDsKIAl1MzIgd3JpdGU7CkBAIC00MTksOSArMzU2LDggQEAKICNkZWZpbmUgSVdMX0lOVkFMSURfUkFURSAgICAgMHhGRgogI2RlZmluZSBJV0xfSU5WQUxJRF9WQUxVRSAgICAtMQogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIC8qKgotICogc3RydWN0IGl3bDQ5NjVfaHRfYWdnIC0tIGFnZ3JlZ2F0aW9uIHN0YXR1cyB3aGlsZSB3YWl0aW5nIGZvciBibG9jay1hY2sKKyAqIHN0cnVjdCBpd2xfaHRfYWdnIC0tIGFnZ3JlZ2F0aW9uIHN0YXR1cyB3aGlsZSB3YWl0aW5nIGZvciBibG9jay1hY2sKICAqIEB0eHFfaWQ6IFR4IHF1ZXVlIHVzZWQgZm9yIFR4IGF0dGVtcHQKICAqIEBmcmFtZV9jb3VudDogIyBmcmFtZXMgYXR0ZW1wdGVkIGJ5IFR4IGNvbW1hbmQKICAqIEB3YWl0X2Zvcl9iYTogRXhwZWN0IGJsb2NrLWFjayBiZWZvcmUgbmV4dCBUeCByZXBseQpAQCAtNDM0LDcgKzM3MCw3IEBACiAgKiBmb3IgYmxvY2sgYWNrIChSRVBMWV9DT01QUkVTU0VEX0JBKS4gIFRoaXMgc3RydWN0IHN0b3JlcyB0eCByZXBseSBpbmZvCiAgKiB1bnRpbCBibG9jayBhY2sgYXJyaXZlcy4KICAqLwotc3RydWN0IGl3bDQ5NjVfaHRfYWdnIHsKK3N0cnVjdCBpd2xfaHRfYWdnIHsKIAl1MTYgdHhxX2lkOwogCXUxNiBmcmFtZV9jb3VudDsKIAl1MTYgd2FpdF9mb3JfYmE7CkBAIC00NDgsMjEgKzM4NCwxNyBAQAogCXU4IHN0YXRlOwogfTsKIAotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUICovCiAKLXN0cnVjdCBpd2w0OTY1X3RpZF9kYXRhIHsKK3N0cnVjdCBpd2xfdGlkX2RhdGEgewogCXUxNiBzZXFfbnVtYmVyOwogCXUxNiB0ZmRzX2luX3F1ZXVlOwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0Jc3RydWN0IGl3bDQ5NjVfaHRfYWdnIGFnZzsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLworCXN0cnVjdCBpd2xfaHRfYWdnIGFnZzsKIH07CiAKLXN0cnVjdCBpd2w0OTY1X2h3X2tleSB7CitzdHJ1Y3QgaXdsX2h3X2tleSB7CiAJZW51bSBpZWVlODAyMTFfa2V5X2FsZyBhbGc7CiAJaW50IGtleWxlbjsKIAl1OCBrZXlpZHg7Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqY29uZjsKIAl1OCBrZXlbMzJdOwogfTsKIApAQCAtNDc0LDcgKzQwNiw2IEBACiAJfTsKIH07CiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogI2RlZmluZSBDRkdfSFRfUlhfQU1QRFVfRkFDVE9SX0RFRiAgKDB4MykKICNkZWZpbmUgQ0ZHX0hUX01QRFVfREVOU0lUWV8yVVNFQyAgICgweDUpCiAjZGVmaW5lIENGR19IVF9NUERVX0RFTlNJVFlfREVGIENGR19IVF9NUERVX0RFTlNJVFlfMlVTRUMKQEAgLTQ5Nyw5ICs0MjgsOCBAQAogCXU4IGh0X3Byb3RlY3Rpb247CiAJdTggbm9uX0dGX1NUQV9wcmVzZW50OwogfTsKLSNlbmRpZgkJCQkvKkNPTkZJR19JV0w0OTY1X0hUICovCiAKLXVuaW9uIGl3bDQ5NjVfcW9zX2NhcGFiaXR5IHsKK3VuaW9uIGl3bF9xb3NfY2FwYWJpdHkgewogCXN0cnVjdCB7CiAJCXU4IGVkY2FfY291bnQ6NDsJLyogYml0IDAtMyAqLwogCQl1OCBxX2FjazoxOwkJLyogYml0IDQgKi8KQEAgLTUyMCwyMiArNDUwLDIyIEBACiB9OwogCiAvKiBRb1Mgc3RydWN0dXJlcyAqLwotc3RydWN0IGl3bDQ5NjVfcW9zX2luZm8geworc3RydWN0IGl3bF9xb3NfaW5mbyB7CiAJaW50IHFvc19lbmFibGU7CiAJaW50IHFvc19hY3RpdmU7Ci0JdW5pb24gaXdsNDk2NV9xb3NfY2FwYWJpdHkgcW9zX2NhcDsKLQlzdHJ1Y3QgaXdsNDk2NV9xb3NwYXJhbV9jbWQgZGVmX3Fvc19wYXJtOworCXVuaW9uIGl3bF9xb3NfY2FwYWJpdHkgcW9zX2NhcDsKKwlzdHJ1Y3QgaXdsX3Fvc3BhcmFtX2NtZCBkZWZfcW9zX3Bhcm07CiB9OwogCiAjZGVmaW5lIFNUQV9QU19TVEFUVVNfV0FLRSAgICAgICAgICAgICAwCiAjZGVmaW5lIFNUQV9QU19TVEFUVVNfU0xFRVAgICAgICAgICAgICAxCiAKLXN0cnVjdCBpd2w0OTY1X3N0YXRpb25fZW50cnkgewotCXN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQgc3RhOwotCXN0cnVjdCBpd2w0OTY1X3RpZF9kYXRhIHRpZFtNQVhfVElEX0NPVU5UXTsKK3N0cnVjdCBpd2xfc3RhdGlvbl9lbnRyeSB7CisJc3RydWN0IGl3bF9hZGRzdGFfY21kIHN0YTsKKwlzdHJ1Y3QgaXdsX3RpZF9kYXRhIHRpZFtNQVhfVElEX0NPVU5UXTsKIAl1OCB1c2VkOwogCXU4IHBzX3N0YXR1czsKLQlzdHJ1Y3QgaXdsNDk2NV9od19rZXkga2V5aW5mbzsKKwlzdHJ1Y3QgaXdsX2h3X2tleSBrZXlpbmZvOwogfTsKIAogLyogb25lIGZvciBlYWNoIHVDb2RlIGltYWdlIChpbnN0L2RhdGEsIGJvb3QvaW5pdC9ydW50aW1lKSAqLwpAQCAtNTQ2LDcgKzQ3Niw3IEBACiB9OwogCiAvKiB1Q29kZSBmaWxlIGxheW91dCAqLwotc3RydWN0IGl3bDQ5NjVfdWNvZGUgeworc3RydWN0IGl3bF91Y29kZSB7CiAJX19sZTMyIHZlcjsJCS8qIG1ham9yL21pbm9yL3N1Ym1pbm9yICovCiAJX19sZTMyIGluc3Rfc2l6ZTsJLyogYnl0ZXMgb2YgcnVudGltZSBpbnN0cnVjdGlvbnMgKi8KIAlfX2xlMzIgZGF0YV9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGRhdGEgKi8KQEAgLTU1Niw4ICs0ODYsNiBAQAogCXU4IGRhdGFbMF07CQkvKiBkYXRhIGluIHNhbWUgb3JkZXIgYXMgInNpemUiIGVsZW1lbnRzICovCiB9OwogCi0jZGVmaW5lIElXTF9JQlNTX01BQ19IQVNIX1NJWkUgMzIKLQogc3RydWN0IGl3bDQ5NjVfaWJzc19zZXEgewogCXU4IG1hY1tFVEhfQUxFTl07CiAJdTE2IHNlcV9udW07CkBAIC01NjYsMjAgKzQ5NCw1MiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKK3N0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzIHsKKwl1MTYgbWluX25yZ19jY2s7CisJdTE2IG1heF9ucmdfY2NrOworCisJdTE2IG5yZ190aF9jY2s7CisJdTE2IG5yZ190aF9vZmRtOworCisJdTE2IGF1dG9fY29ycl9taW5fb2ZkbTsKKwl1MTYgYXV0b19jb3JyX21pbl9vZmRtX21yYzsKKwl1MTYgYXV0b19jb3JyX21pbl9vZmRtX3gxOworCXUxNiBhdXRvX2NvcnJfbWluX29mZG1fbXJjX3gxOworCisJdTE2IGF1dG9fY29ycl9tYXhfb2ZkbTsKKwl1MTYgYXV0b19jb3JyX21heF9vZmRtX21yYzsKKwl1MTYgYXV0b19jb3JyX21heF9vZmRtX3gxOworCXUxNiBhdXRvX2NvcnJfbWF4X29mZG1fbXJjX3gxOworCisJdTE2IGF1dG9fY29ycl9tYXhfY2NrOworCXUxNiBhdXRvX2NvcnJfbWF4X2Nja19tcmM7CisJdTE2IGF1dG9fY29ycl9taW5fY2NrOworCXUxNiBhdXRvX2NvcnJfbWluX2Nja19tcmM7Cit9OworCisKKyNkZWZpbmUgSVdMX0ZBVF9DSEFOTkVMXzUyIEJJVChJRUVFODAyMTFfQkFORF81R0haKQorCiAvKioKICAqIHN0cnVjdCBpd2xfaHdfcGFyYW1zCiAgKiBAbWF4X3R4cV9udW06IE1heCAjIFR4IHF1ZXVlcyBzdXBwb3J0ZWQKLSAqIEB0eF9jbWRfbGVuOiBTaXplIG9mIFR4IGNvbW1hbmQgKGJ1dCBub3QgaW5jbHVkaW5nIGZyYW1lIGl0c2VsZikKLSAqIEB0eF9hbnRfbnVtOiBOdW1iZXIgb2YgVFggYW50ZW5uYXMKKyAqIEB0eC9yeF9jaGFpbnNfbnVtOiBOdW1iZXIgb2YgVFgvUlggY2hhaW5zCisgKiBAdmFsaWRfdHgvcnhfYW50OiB1c2FibGUgYW50ZW5uYXMKICAqIEBtYXhfcnhxX3NpemU6IE1heCAjIFJ4IGZyYW1lcyBpbiBSeCBxdWV1ZSAobXVzdCBiZSBwb3dlci1vZi0yKQotICogQHJ4X2J1ZmZlcl9zaXplOgogICogQG1heF9yeHFfbG9nOiBMb2ctYmFzZS0yIG9mIG1heF9yeHFfc2l6ZQorICogQHJ4X2J1Zl9zaXplOiBSeCBidWZmZXIgc2l6ZQogICogQG1heF9zdGF0aW9uczoKICAqIEBiY2FzdF9zdGFfaWQ6CisgKiBAZmF0X2NoYW5uZWw6IGlzIDQwTUh6IHdpZHRoIHBvc3NpYmxlIGluIGJhbmQgMi40CisgKiBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWikgQklUKElFRUU4MDIxMV9CQU5EXzVHSFopCisgKiBAc3dfY3J5cHRvOiAwIGZvciBodywgMSBmb3Igc3cKKyAqIEBtYXhfeHh4X3NpemU6IGZvciB1Y29kZSB1c2VzCisgKiBAY3Rfa2lsbF90aHJlc2hvbGQ6IHRlbXBlcmF0dXJlIHRocmVzaG9sZAorICogQHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzOiByYW5nZSBvZiBzZW5zaXRpdml0eSB2YWx1ZXMKKyAqIEBmaXJzdF9hbXBkdV9xOiBmaXJzdCBIVyBxdWV1ZSBhdmFpbGFibGUgZm9yIGFtcGR1CiAgKi8KIHN0cnVjdCBpd2xfaHdfcGFyYW1zIHsKIAl1MTYgbWF4X3R4cV9udW07Ci0JdTE2IHR4X2NtZF9sZW47CiAJdTggIHR4X2NoYWluc19udW07CiAJdTggIHJ4X2NoYWluc19udW07CiAJdTggIHZhbGlkX3R4X2FudDsKQEAgLTU5MCwxMCArNTUwLDE4IEBACiAJdTMyIG1heF9wa3Rfc2l6ZTsKIAl1OCAgbWF4X3N0YXRpb25zOwogCXU4ICBiY2FzdF9zdGFfaWQ7CisJdTggZmF0X2NoYW5uZWw7CisJdTggc3dfY3J5cHRvOworCXUzMiBtYXhfaW5zdF9zaXplOworCXUzMiBtYXhfZGF0YV9zaXplOworCXUzMiBtYXhfYnNtX3NpemU7CisJdTMyIGN0X2tpbGxfdGhyZXNob2xkOyAvKiB2YWx1ZSBpbiBody1kZXBlbmRlbnQgdW5pdHMgKi8KKwljb25zdCBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyAqc2VuczsKKwl1OCBmaXJzdF9hbXBkdV9xOwogfTsKIAotI2RlZmluZSBIVF9TSE9SVF9HSV8yME1IWl9PTkxZICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIEhUX1NIT1JUX0dJXzQwTUhaX09OTFkgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSFRfU0hPUlRfR0lfMjBNSFoJKDEgPDwgMCkKKyNkZWZpbmUgSFRfU0hPUlRfR0lfNDBNSFoJKDEgPDwgMSkKIAogCiAjZGVmaW5lIElXTF9SWF9IRFIoeCkgKChzdHJ1Y3QgaXdsNDk2NV9yeF9mcmFtZV9oZHIgKikoXApAQCAtNjEyLDUxICs1ODAsMTggQEAKICAqIGZvciB1c2UgYnkgaXdsLSouYwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQ7Ci1leHRlcm4gaW50IGl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDQ5NjVfYWRkc3RhX2NtZCAqc3RhLCB1OCBmbGFncyk7Ci1leHRlcm4gdTggaXdsNDk2NV9hZGRfc3RhdGlvbl9mbGFncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLAotCQkJICBpbnQgaXNfYXAsIHU4IGZsYWdzLCB2b2lkICpodF9kYXRhKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpOwotZXh0ZXJuIGludCBpd2w0OTY1X3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X2hhbmRsZV9kYXRhX3BhY2tldF9tb25pdG9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiLAotCQkJCQkgICB2b2lkICpkYXRhLCBzaG9ydCBsZW4sCi0JCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cywKLQkJCQkJICAgdTE2IHBoeV9mbGFncyk7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaXNfZHVwbGljYXRlX3BhY2tldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpOwotZXh0ZXJuIGludCBpd2w0OTY1X3J4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9xdWV1ZSAqcnhxKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9jYWxjX2RiX2Zyb21fcmF0aW8oaW50IHNpZ19yYXRpbyk7Ci1leHRlcm4gaW50IGl3bDQ5NjVfY2FsY19zaWdfcXVhbChpbnQgcnNzaV9kYm0sIGludCBub2lzZV9kYm0pOwotZXh0ZXJuIGludCBpd2w0OTY1X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxLCBpbnQgY291bnQsIHUzMiBpZCk7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X3J4X3JlcGxlbmlzaCh2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEpOworc3RydWN0IGl3bF9hZGRzdGFfY21kOworZXh0ZXJuIGludCBpd2xfc2VuZF9hZGRfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpOwordTggaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCBpc19hcCwKKwkJCSB1OCBmbGFncywgc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9pbmZvKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXdsNDk2NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkJCWNvbnN0IHU4ICpkZXN0LCBpbnQgbGVmdCk7Ci1leHRlcm4gaW50IGl3bDQ5NjVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSBzdHJ1Y3QgaXdsNDk2NV9yeF9xdWV1ZSAqcSk7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X3NldF9kZWNyeXB0ZWRfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgdTMyIGRlY3J5cHRfcmVzLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyk7Ci1leHRlcm4gX19sZTE2ICppZWVlODAyMTFfZ2V0X3Fvc19jdHJsKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwotaW50IGl3bDQ5NjVfaW5pdF9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci12b2lkIGl3bDQ5NjVfZnJlZV9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2w0OTY1X3VwZGF0ZV9jaGFpbl9mbGFncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bDQ5NjVfc2V0X3B3cl9zcmMoc3RydWN0IGl3bF9wcml2ICpwcml2LCBlbnVtIGl3bF9wd3Jfc3JjIHNyYyk7CiAKLWV4dGVybiBjb25zdCB1OCBpd2w0OTY1X2Jyb2FkY2FzdF9hZGRyW0VUSF9BTEVOXTsKLWludCBpd2w0OTY1X2VucXVldWVfaGNtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCk7Ci0KLS8qCi0gKiBDdXJyZW50bHkgdXNlZCBieSBpd2wtMzk0NS1ycy4uLiBsb29rIGF0IHJlc3RydWN0dXJpbmcgc28gdGhhdCBpdCBkb2Vzbid0Ci0gKiBjYWxsIHRoaXMuLi4gdG9kby4uLiBmaXggdGhhdC4KLSovCi1leHRlcm4gdTggaXdsNDk2NV9zeW5jX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLAotCQkJICAgdTE2IHR4X3JhdGUsIHU4IGZsYWdzKTsKK2V4dGVybiBjb25zdCB1OCBpd2xfYmNhc3RfYWRkcltFVEhfQUxFTl07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC02NzQsOTYgKzYwOSw1MSBAQAogICogaXdsNDk2NV9tYWNfICAgICA8LS0gbWFjODAyMTEgY2FsbGJhY2sKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWV4dGVybiB2b2lkIGl3bDQ5NjVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsNDk2NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X2h3X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od19zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaHdfbmljX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od19uaWNfc3RvcF9tYXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfaHdfdHhxX2N0eF9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2w0OTY1X2h3X25pY19yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2w0OTY1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHZvaWQgKnRmZCwKLQkJCQkJZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od190eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxKTsKK2V4dGVybiBpbnQgaXdsX3J4cV9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2xfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gdW5zaWduZWQgaW50IGl3bDQ5NjVfaHdfZ2V0X2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSBzdHJ1Y3QgaXdsNDk2NV9mcmFtZSAqZnJhbWUsIHU4IHJhdGUpOwotZXh0ZXJuIGludCBpd2w0OTY1X2h3X2dldF9yeF9yZWFkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0cmwsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAotCQkJCSAgICAgaW50IHN0YV9pZCwgaW50IHR4X2lkKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggcG93ZXIpOwotZXh0ZXJuIHZvaWQgaXdsNDk2NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKTsKKwkJCQkgc3RydWN0IGl3bF9mcmFtZSAqZnJhbWUsIHU4IHJhdGUpOwogZXh0ZXJuIHZvaWQgaXdsNDk2NV9kaXNhYmxlX2V2ZW50cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2w0OTY1X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCi0vKioKLSAqIGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uIC0gRmluZCBzdGF0aW9uIGlkIGZvciBhIGdpdmVuIEJTU0lECi0gKiBAYnNzaWQ6IE1BQyBhZGRyZXNzIG9mIHN0YXRpb24gSUQgdG8gZmluZAotICoKLSAqIE5PVEU6ICBUaGlzIHNob3VsZCBub3QgYmUgaGFyZHdhcmUgc3BlY2lmaWMgYnV0IHRoZSBjb2RlIGhhcwotICogbm90IHlldCBiZWVuIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGNvbW1vbiBsYXllciBmb3IgbWFuYWdpbmcgdGhlCi0gKiBzdGF0aW9uIHRhYmxlcy4KLSAqLwotZXh0ZXJuIHU4IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmJzc2lkKTsKIAogZXh0ZXJuIGludCBpd2w0OTY1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpOwotZXh0ZXJuIGludCBpd2w0OTY1X3R4X3F1ZXVlX3JlY2xhaW0oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLCBpbnQgaW5kZXgpOwotZXh0ZXJuIGludCBpd2w0OTY1X3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2w0OTY1X3F1ZXVlICpxKTsKK2V4dGVybiBpbnQgaXdsX3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2xfcXVldWUgKnEpOworc3RhdGljIGlubGluZSBpbnQgaXdsX3F1ZXVlX3VzZWQoY29uc3Qgc3RydWN0IGl3bF9xdWV1ZSAqcSwgaW50IGkpCit7CisJcmV0dXJuIHEtPndyaXRlX3B0ciA+IHEtPnJlYWRfcHRyID8KKwkJKGkgPj0gcS0+cmVhZF9wdHIgJiYgaSA8IHEtPndyaXRlX3B0cikgOgorCQkhKGkgPCBxLT5yZWFkX3B0ciAmJiBpID49IHEtPndyaXRlX3B0cik7Cit9CisKKworc3RhdGljIGlubGluZSB1OCBnZXRfY21kX2luZGV4KHN0cnVjdCBpd2xfcXVldWUgKnEsIHUzMiBpbmRleCwgaW50IGlzX2h1Z2UpCit7CisJLyogVGhpcyBpcyBmb3Igc2NhbiBjb21tYW5kLCB0aGUgYmlnIGJ1ZmZlciBhdCBlbmQgb2YgY29tbWFuZCBhcnJheSAqLworCWlmIChpc19odWdlKQorCQlyZXR1cm4gcS0+bl93aW5kb3c7CS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLworCisJLyogT3RoZXJ3aXNlLCB1c2Ugbm9ybWFsIHNpemUgYnVmZmVycyAqLworCXJldHVybiBpbmRleCAmIChxLT5uX3dpbmRvdyAtIDEpOworfQorCisKIHN0cnVjdCBpd2xfcHJpdjsKIAotZXh0ZXJuIHZvaWQgaXdsNDk2NV9yYWRpb19raWxsX3N3KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGRpc2FibGVfcmFkaW8pOwogLyoKICAqIEZvcndhcmQgZGVjbGFyZSBpd2wtNDk2NS5jIGZ1bmN0aW9ucyBmb3IgaXdsLWJhc2UuYwogICovCi1leHRlcm4gaW50IGl3bDQ5NjVfdHhfcXVldWVfdXBkYXRlX3dyX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSwKLQkJCQkJICB1MTYgYnl0ZV9jbnQpOwotZXh0ZXJuIHZvaWQgaXdsNDk2NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLAotCQkJCWludCBpc19hcCk7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X3NldF9yeG9uX2NoYWluKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfYWxpdmVfbm90aWZ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X3VwZGF0ZV9yYXRlX3NjYWxpbmcoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBtb2RlKTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfY2hhaW5fbm9pc2VfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfaW5pdF9zZW5zaXRpdml0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZsYWdzLAotCQkJCSAgICAgdTggZm9yY2UpOwogZXh0ZXJuIHZvaWQgaXdsNDk2NV9yZl9raWxsX2N0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsNDk2NV9od3JhdGVfdG9fdHhfY29udHJvbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSB1MzIgcmF0ZV9uX2ZsYWdzLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKTsKIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi12b2lkIGl3bDQ5NjVfaW5pdF9odF9od19jYXBhYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8sCi0JCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwotdm9pZCBpd2w0OTY1X3NldF9yeG9uX2h0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2luZm8pOwotdm9pZCBpd2w0OTY1X3NldF9odF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGluZGV4LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqc3RhX2h0X2luZik7CiBpbnQgaXdsNDk2NV9tYWNfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCiAJCQkJICAgIGNvbnN0IHU4ICphZGRyLCB1MTYgdGlkLCB1MTYgKnNzbik7CiBpbnQgaXdsNDk2NV9jaGVja19lbXB0eV9od19xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsCiAJCQkJCXU4IHRpZCwgaW50IHR4cV9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bDQ5NjVfaW5pdF9odF9od19jYXBhYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8sCi0JCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpIHt9CiAKLSNlbmRpZiAvKkNPTkZJR19JV0w0OTY1X0hUICovCiAvKiBTdHJ1Y3R1cmVzLCBlbnVtLCBhbmQgZGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgNDk2NSAqLwogCi0jZGVmaW5lIElXTDQ5NjVfS1dfU0laRSAweDEwMDAJLyo0ayAqLworI2RlZmluZSBJV0xfS1dfU0laRSAweDEwMDAJLyo0ayAqLwogCi1zdHJ1Y3QgaXdsNDk2NV9rdyB7CitzdHJ1Y3QgaXdsX2t3IHsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCXZvaWQgKnZfYWRkcjsKIAlzaXplX3Qgc2l6ZTsKQEAgLTc4MiwxMyArNjcyLDggQEAKICNkZWZpbmUgSVdMX09QRVJBVElPTl9NT0RFX01JWEVEICAgIDIKICNkZWZpbmUgSVdMX09QRVJBVElPTl9NT0RFXzIwTUhaICAgIDMKIAotI2RlZmluZSBJV0xfRVhUX0NIQU5ORUxfT0ZGU0VUX05PTkUgICAgICAwCi0jZGVmaW5lIElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfQUJPVkUgICAgIDEKLSNkZWZpbmUgSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9SRVNFUlZFMSAgMgotI2RlZmluZSBJV0xfRVhUX0NIQU5ORUxfT0ZGU0VUX0JFTE9XICAgICAzCi0KLSNkZWZpbmUgTlJHX05VTV9QUkVWX1NUQVRfTCAgICAgMjAKLSNkZWZpbmUgTlVNX1JYX0NIQUlOUyAgICAgICAgICAgKDMpCisjZGVmaW5lIElXTF9UWF9DUkNfU0laRSA0CisjZGVmaW5lIElXTF9UWF9ERUxJTUlURVJfU0laRSA0CiAKICNkZWZpbmUgVFhfUE9XRVJfSVdMX0lMTEVHQUxfVk9MVEFHRSAtMTAwMDAKIApAQCAtODAyLDcgKzY4Nyw2IEBACiAJdW5zaWduZWQgbG9uZyBzdGFtcF9sYXN0OwogCXUzMiBmbHVzaF90aW1lOwogCXUzMiB0eF9wYWNrZXRzOwotCXU4IGxxX3JlYWR5OwogfTsKIAogLyogU2Vuc2l0aXZpdHkgYW5kIGNoYWluIG5vaXNlIGNhbGlicmF0aW9uICovCkBAIC04MTgsMjMgKzcwMiw4IEBACiAjZGVmaW5lIE1BWF9GQV9DQ0sgICA1MAogI2RlZmluZSBNSU5fRkFfQ0NLICAgNQogCi0jZGVmaW5lIE5SR19NSU5fQ0NLICA5NwotI2RlZmluZSBOUkdfTUFYX0NDSyAgMAotCi0jZGVmaW5lIEFVVE9fQ09SUl9NSU5fT0ZETSAgICAgICAgODUKLSNkZWZpbmUgQVVUT19DT1JSX01JTl9PRkRNX01SQyAgICAxNzAKLSNkZWZpbmUgQVVUT19DT1JSX01JTl9PRkRNX1gxICAgICAxMDUKLSNkZWZpbmUgQVVUT19DT1JSX01JTl9PRkRNX01SQ19YMSAyMjAKLSNkZWZpbmUgQVVUT19DT1JSX01BWF9PRkRNICAgICAgICAxMjAKLSNkZWZpbmUgQVVUT19DT1JSX01BWF9PRkRNX01SQyAgICAyMTAKLSNkZWZpbmUgQVVUT19DT1JSX01BWF9PRkRNX1gxICAgICAxNDAKLSNkZWZpbmUgQVVUT19DT1JSX01BWF9PRkRNX01SQ19YMSAyNzAKICNkZWZpbmUgQVVUT19DT1JSX1NURVBfT0ZETSAgICAgICAxCiAKLSNkZWZpbmUgQVVUT19DT1JSX01JTl9DQ0sgICAgICAoMTI1KQotI2RlZmluZSBBVVRPX0NPUlJfTUFYX0NDSyAgICAgICgyMDApCi0jZGVmaW5lIEFVVE9fQ09SUl9NSU5fQ0NLX01SQyAgMjAwCi0jZGVmaW5lIEFVVE9fQ09SUl9NQVhfQ0NLX01SQyAgNDAwCiAjZGVmaW5lIEFVVE9fQ09SUl9TVEVQX0NDSyAgICAgMwogI2RlZmluZSBBVVRPX0NPUlJfTUFYX1RIX0NDSyAgIDE2MAogCkBAIC04NTMsNiArNzIyLDkgQEAKICNkZWZpbmUgSU5fQkFORF9GSUxURVIJCQkweEZGCiAjZGVmaW5lIE1JTl9BVkVSQUdFX05PSVNFX01BWF9WQUxVRQkweEZGRkZGRkZGCiAKKyNkZWZpbmUgTlJHX05VTV9QUkVWX1NUQVRfTCAgICAgMjAKKyNkZWZpbmUgTlVNX1JYX0NIQUlOUyAgICAgICAgICAgMworCiBlbnVtIGl3bDQ5NjVfZmFsc2VfYWxhcm1fc3RhdGUgewogCUlXTF9GQV9UT09fTUFOWSA9IDAsCiAJSVdMX0ZBX1RPT19GRVcgPSAxLApAQCAtODY1LDExICs3MzcsNiBAQAogCUlXTF9DSEFJTl9OT0lTRV9DQUxJQlJBVEVEID0gMiwKIH07CiAKLWVudW0gaXdsNDk2NV9zZW5zaXRpdml0eV9zdGF0ZSB7Ci0JSVdMX1NFTlNfQ0FMSUJfQUxMT1dFRCA9IDAsCi0JSVdMX1NFTlNfQ0FMSUJfTkVFRF9SRUlOSVQgPSAxLAotfTsKLQogZW51bSBpd2w0OTY1X2NhbGliX2VuYWJsZWRfc3RhdGUgewogCUlXTF9DQUxJQl9ESVNBQkxFRCA9IDAsICAvKiBtdXN0IGJlIDAgKi8KIAlJV0xfQ0FMSUJfRU5BQkxFRCA9IDEsCkBAIC04ODQsOCArNzUxLDIzIEBACiAJdTMyIGJlYWNvbl9lbmVyZ3lfYzsKIH07CiAKK3N0cnVjdCBpd2xfY2FsaWJfcmVzdWx0cyB7CisJdm9pZCAqdHhfaXFfcmVzOworCXZvaWQgKnR4X2lxX3BlcmRfcmVzOworCXZvaWQgKmxvX3JlczsKKwl1MzIgdHhfaXFfcmVzX2xlbjsKKwl1MzIgdHhfaXFfcGVyZF9yZXNfbGVuOworCXUzMiBsb19yZXNfbGVuOworfTsKKworZW51bSB1Y29kZV90eXBlIHsKKwlVQ09ERV9OT05FID0gMCwKKwlVQ09ERV9JTklULAorCVVDT0RFX1JUCit9OworCiAvKiBTZW5zaXRpdml0eSBjYWxpYiBkYXRhICovCi1zdHJ1Y3QgaXdsNDk2NV9zZW5zaXRpdml0eV9kYXRhIHsKK3N0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSB7CiAJdTMyIGF1dG9fY29ycl9vZmRtOwogCXUzMiBhdXRvX2NvcnJfb2ZkbV9tcmM7CiAJdTMyIGF1dG9fY29ycl9vZmRtX3gxOwpAQCAtOTA5LDEyICs3OTEsMTAgQEAKIAlzMzIgbnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmY7CiAJdTMyIG51bV9pbl9jY2tfbm9fZmE7CiAJdTMyIG5yZ190aF9vZmRtOwotCi0JdTggc3RhdGU7CiB9OwogCiAvKiBDaGFpbiBub2lzZSAoZGlmZmVyZW50aWFsIFJ4IGdhaW4pIGNhbGliIGRhdGEgKi8KLXN0cnVjdCBpd2w0OTY1X2NoYWluX25vaXNlX2RhdGEgeworc3RydWN0IGl3bF9jaGFpbl9ub2lzZV9kYXRhIHsKIAl1OCBzdGF0ZTsKIAl1MTYgYmVhY29uX2NvdW50OwogCXUzMiBjaGFpbl9ub2lzZV9hOwpAQCAtOTYwLDcgKzg0MCw3IEBACiAJYm9vbCBhZGRfcmFkaW90YXA7CiAKIAl2b2lkICgqcnhfaGFuZGxlcnNbUkVQTFlfTUFYXSkoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpOworCQkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCkBAIC05ODUsNiArODY1LDkgQEAKIAlzMzIgdGVtcGVyYXR1cmU7CS8qIGRlZ3JlZXMgS2VsdmluICovCiAJczMyIGxhc3RfdGVtcGVyYXR1cmU7CiAKKwkvKiBpbml0IGNhbGlicmF0aW9uIHJlc3VsdHMgKi8KKwlzdHJ1Y3QgaXdsX2NhbGliX3Jlc3VsdHMgY2FsaWJfcmVzdWx0czsKKwogCS8qIFNjYW4gcmVsYXRlZCB2YXJpYWJsZXMgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbl9qaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcgbmV4dF9zY2FuX2ppZmZpZXM7CkBAIC05OTUsNyArODc4LDggQEAKIAlpbnQgb25lX2RpcmVjdF9zY2FuOwogCXU4IGRpcmVjdF9zc2lkX2xlbjsKIAl1OCBkaXJlY3Rfc3NpZFtJV19FU1NJRF9NQVhfU0laRV07Ci0Jc3RydWN0IGl3bDQ5NjVfc2Nhbl9jbWQgKnNjYW47CisJc3RydWN0IGl3bF9zY2FuX2NtZCAqc2NhbjsKKwl1MzIgc2Nhbl90eF9hbnRbSUVFRTgwMjExX05VTV9CQU5EU107CiAKIAkvKiBzcGlubG9jayAqLwogCXNwaW5sb2NrX3QgbG9jazsJLyogcHJvdGVjdCBnZW5lcmFsIHNoYXJlZCBkYXRhICovCkBAIC0xMDA3LDYgKzg5MSw5IEBACiAKIAkvKiBwY2kgaGFyZHdhcmUgYWRkcmVzcyBzdXBwb3J0ICovCiAJdm9pZCBfX2lvbWVtICpod19iYXNlOworCXUzMiAgaHdfcmV2OworCXUzMiAgaHdfd2FfcmV2OworCXU4ICAgcmV2X2lkOwogCiAJLyogdUNvZGUgaW1hZ2VzLCBzYXZlIHRvIHJlbG9hZCBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KIAlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9jb2RlOwkvKiBydW50aW1lIGluc3QgKi8KQEAgLTEwMTUsNiArOTAyLDggQEAKIAlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9pbml0OwkvKiBpbml0aWFsaXphdGlvbiBpbnN0ICovCiAJc3RydWN0IGZ3X2Rlc2MgdWNvZGVfaW5pdF9kYXRhOwkvKiBpbml0aWFsaXphdGlvbiBkYXRhICovCiAJc3RydWN0IGZ3X2Rlc2MgdWNvZGVfYm9vdDsJLyogYm9vdHN0cmFwIGluc3QgKi8KKwllbnVtIHVjb2RlX3R5cGUgdWNvZGVfdHlwZTsKKwl1OCB1Y29kZV93cml0ZV9jb21wbGV0ZTsJLyogdGhlIGltYWdlIHdyaXRlIGlzIGNvbXBsZXRlICovCiAKIAogCXN0cnVjdCBpd2w0OTY1X3J4b25fdGltZV9jbWQgcnhvbl90aW1pbmc7CkBAIC0xMDIzLDIyICs5MTIsMjIgQEAKIAkgKiBjaGFuZ2VkIHZpYSBleHBsaWNpdCBjYXN0IHdpdGhpbiB0aGUKIAkgKiByb3V0aW5lcyB0aGF0IGFjdHVhbGx5IHVwZGF0ZSB0aGUgcGh5c2ljYWwKIAkgKiBoYXJkd2FyZSAqLwotCWNvbnN0IHN0cnVjdCBpd2w0OTY1X3J4b25fY21kIGFjdGl2ZV9yeG9uOwotCXN0cnVjdCBpd2w0OTY1X3J4b25fY21kIHN0YWdpbmdfcnhvbjsKKwljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kIGFjdGl2ZV9yeG9uOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgc3RhZ2luZ19yeG9uOwogCiAJaW50IGVycm9yX3JlY292ZXJpbmc7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgcmVjb3ZlcnlfcnhvbjsKKwlzdHJ1Y3QgaXdsX3J4b25fY21kIHJlY292ZXJ5X3J4b247CiAKIAkvKiAxc3QgcmVzcG9uc2VzIGZyb20gaW5pdGlhbGl6ZSBhbmQgcnVudGltZSB1Q29kZSBpbWFnZXMuCiAJICogNDk2NSdzIGluaXRpYWxpemUgYWxpdmUgcmVzcG9uc2UgY29udGFpbnMgc29tZSBjYWxpYnJhdGlvbiBkYXRhLiAqLwotCXN0cnVjdCBpd2w0OTY1X2luaXRfYWxpdmVfcmVzcCBjYXJkX2FsaXZlX2luaXQ7Ci0Jc3RydWN0IGl3bDQ5NjVfYWxpdmVfcmVzcCBjYXJkX2FsaXZlOworCXN0cnVjdCBpd2xfaW5pdF9hbGl2ZV9yZXNwIGNhcmRfYWxpdmVfaW5pdDsKKwlzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZTsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9SRktJTEwKLQlzdHJ1Y3QgaXdsX3Jma2lsbF9tbmdyIHJma2lsbF9tbmdyOworCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwotCXN0cnVjdCBpd2w0OTY1X2xlZCBsZWRbSVdMX0xFRF9UUkdfTUFYXTsKKwlzdHJ1Y3QgaXdsX2xlZCBsZWRbSVdMX0xFRF9UUkdfTUFYXTsKIAl1bnNpZ25lZCBsb25nIGxhc3RfYmxpbmtfdGltZTsKIAl1OCBsYXN0X2JsaW5rX3JhdGU7CiAJdTggYWxsb3dfYmxpbmtpbmc7CkBAIC0xMDUwLDE3ICs5MzksMTIgQEAKIAogCXU4IGFzc29jX3N0YXRpb25fYWRkZWQ7CiAJdTggdXNlX2FudF9iX2Zvcl9tYW5hZ2VtZW50X2ZyYW1lOwkvKiBUeCBhbnRlbm5hIHNlbGVjdGlvbiAqLwotCXU4IHZhbGlkX2FudGVubmE7CS8qIEJpdCBtYXNrIG9mIGFudGVubmFzIGFjdHVhbGx5IGNvbm5lY3RlZCAqLwotI2lmZGVmIENPTkZJR19JV0w0OTY1X1NFTlNJVElWSVRZCi0Jc3RydWN0IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfZGF0YSBzZW5zaXRpdml0eV9kYXRhOwotCXN0cnVjdCBpd2w0OTY1X2NoYWluX25vaXNlX2RhdGEgY2hhaW5fbm9pc2VfZGF0YTsKIAl1OCBzdGFydF9jYWxpYjsKKwlzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2RhdGEgc2Vuc2l0aXZpdHlfZGF0YTsKKwlzdHJ1Y3QgaXdsX2NoYWluX25vaXNlX2RhdGEgY2hhaW5fbm9pc2VfZGF0YTsKIAlfX2xlMTYgc2Vuc2l0aXZpdHlfdGJsW0hEX1RBQkxFX1NJWkVdOwotI2VuZGlmIC8qQ09ORklHX0lXTDQ5NjVfU0VOU0lUSVZJVFkqLwogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIAlzdHJ1Y3QgaXdsX2h0X2luZm8gY3VycmVudF9odF9jb25maWc7Ci0jZW5kaWYKIAl1OCBsYXN0X3BoeV9yZXNbMTAwXTsKIAogCS8qIFJhdGUgc2NhbGluZyBkYXRhICovCkBAIC0xMDc1LDEwICs5NTksMTAgQEAKIAlpbnQgYWN0aXZpdHlfdGltZXJfYWN0aXZlOwogCiAJLyogUnggYW5kIFR4IERNQSBwcm9jZXNzaW5nIHF1ZXVlcyAqLwotCXN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlIHJ4cTsKLQlzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSB0eHFbSVdMX01BWF9OVU1fUVVFVUVTXTsKKwlzdHJ1Y3QgaXdsX3J4X3F1ZXVlIHJ4cTsKKwlzdHJ1Y3QgaXdsX3R4X3F1ZXVlIHR4cVtJV0xfTUFYX05VTV9RVUVVRVNdOwogCXVuc2lnbmVkIGxvbmcgdHhxX2N0eF9hY3RpdmVfbXNrOwotCXN0cnVjdCBpd2w0OTY1X2t3IGt3OwkvKiBrZWVwIHdhcm0gYWRkcmVzcyAqLworCXN0cnVjdCBpd2xfa3cga3c7CS8qIGtlZXAgd2FybSBhZGRyZXNzICovCiAJdTMyIHNjZF9iYXNlX2FkZHI7CS8qIHNjaGVkdWxlciBzcmFtIGJhc2UgYWRkcmVzcyAqLwogCiAJdW5zaWduZWQgbG9uZyBzdGF0dXM7CkBAIC0xMDkyLDkgKzk3Niw5IEBACiAJCXU2NCBieXRlczsKIAl9IHR4X3N0YXRzWzNdLCByeF9zdGF0c1szXTsKIAotCXN0cnVjdCBpd2w0OTY1X3Bvd2VyX21nciBwb3dlcl9kYXRhOworCXN0cnVjdCBpd2xfcG93ZXJfbWdyIHBvd2VyX2RhdGE7CiAKLQlzdHJ1Y3QgaXdsNDk2NV9ub3RpZl9zdGF0aXN0aWNzIHN0YXRpc3RpY3M7CisJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHN0YXRpc3RpY3M7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3N0YXRpc3RpY3NfdGltZTsKIAogCS8qIGNvbnRleHQgaW5mb3JtYXRpb24gKi8KQEAgLTExMTEsNyArOTk1LDcgQEAKIAkvKnN0YXRpb24gdGFibGUgdmFyaWFibGVzICovCiAJc3BpbmxvY2tfdCBzdGFfbG9jazsKIAlpbnQgbnVtX3N0YXRpb25zOwotCXN0cnVjdCBpd2w0OTY1X3N0YXRpb25fZW50cnkgc3RhdGlvbnNbSVdMX1NUQVRJT05fQ09VTlRdOworCXN0cnVjdCBpd2xfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc1tJV0xfU1RBVElPTl9DT1VOVF07CiAJc3RydWN0IGl3bF93ZXBfa2V5IHdlcF9rZXlzW1dFUF9LRVlTX01BWF07CiAJdTggZGVmYXVsdF93ZXBfa2V5OwogCXU4IGtleV9tYXBwaW5nX2tleTsKQEAgLTExMjIsMjIgKzEwMDYsMTMgQEAKIAogCXU4IG1hYzgwMjExX3JlZ2lzdGVyZWQ7CiAKLQl1MzIgbm90aWZfbWlzc2VkX2JlYWNvbnM7Ci0KIAkvKiBSeCdkIHBhY2tldCB0aW1pbmcgaW5mb3JtYXRpb24gKi8KIAl1MzIgbGFzdF9iZWFjb25fdGltZTsKIAl1NjQgbGFzdF90c2Y7CiAKLQkvKiBEdXBsaWNhdGUgcGFja2V0IGRldGVjdGlvbiAqLwotCXUxNiBsYXN0X3NlcV9udW07Ci0JdTE2IGxhc3RfZnJhZ19udW07Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3BhY2tldF90aW1lOwotCi0JLyogSGFzaCB0YWJsZSBmb3IgZmluZGluZyBzdGF0aW9ucyBpbiBJQlNTIG5ldHdvcmsgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGlic3NfbWFjX2hhc2hbSVdMX0lCU1NfTUFDX0hBU0hfU0laRV07Ci0KIAkvKiBlZXByb20gKi8KLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb20gZWVwcm9tOworCXU4ICplZXByb207CisJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfaW5mbyAqY2FsaWJfaW5mbzsKIAogCWVudW0gaWVlZTgwMjExX2lmX3R5cGVzIGl3X21vZGU7CiAKQEAgLTExNTEsNiArMTAyNiw3IEBACiAJc3RydWN0IGl3bF9od19wYXJhbXMgaHdfcGFyYW1zOwogCS8qIGRyaXZlci91Q29kZSBzaGFyZWQgVHggQnl0ZSBDb3VudHMgYW5kIFJ4IHN0YXR1cyAqLwogCXZvaWQgKnNoYXJlZF92aXJ0OworCWludCByYl9jbG9zZWRfb2Zmc2V0OwogCS8qIFBoeXNpY2FsIFBvaW50ZXIgdG8gVHggQnl0ZSBDb3VudHMgYW5kIFJ4IHN0YXR1cyAqLwogCWRtYV9hZGRyX3Qgc2hhcmVkX3BoeXM7CiAKQEAgLTExNjAsNyArMTAzNiw3IEBACiAJdTE2IGFzc29jX2NhcGFiaWxpdHk7CiAJdTggcHNfbW9kZTsKIAotCXN0cnVjdCBpd2w0OTY1X3Fvc19pbmZvIHFvc19kYXRhOworCXN0cnVjdCBpd2xfcW9zX2luZm8gcW9zX2RhdGE7CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOwogCkBAIC0xMTc2LDIwICsxMDUyLDE2IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHJlcG9ydF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXF1ZXN0X3NjYW47CiAJc3RydWN0IHdvcmtfc3RydWN0IGJlYWNvbl91cGRhdGU7CisJc3RydWN0IHdvcmtfc3RydWN0IHNldF9tb25pdG9yOwogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlycV90YXNrbGV0OwogCiAJc3RydWN0IGRlbGF5ZWRfd29yayBpbml0X2FsaXZlX3N0YXJ0OwogCXN0cnVjdCBkZWxheWVkX3dvcmsgYWxpdmVfc3RhcnQ7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBhY3Rpdml0eV90aW1lcjsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHRoZXJtYWxfcGVyaW9kaWM7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBnYXRoZXJfc3RhdHM7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBzY2FuX2NoZWNrOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgcG9zdF9hc3NvY2lhdGU7Ci0KLSNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUE9XRVIgMHgwRgotCXM4IHVzZXJfdHhwb3dlcl9saW1pdDsKLQlzOCBtYXhfY2hhbm5lbF90eHBvd2VyX2xpbWl0OworCS8qIFRYIFBvd2VyICovCisJczggdHhfcG93ZXJfdXNlcl9sbXQ7CisJczggdHhfcG93ZXJfY2hhbm5lbF9sbXQ7CiAKICNpZmRlZiBDT05GSUdfUE0KIAl1MzIgcG1fc3RhdGVbMTZdOwpAQCAtMTE5Nyw2ICsxMDY5LDcgQEAKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJLyogZGVidWdnaW5nIGluZm8gKi8KKwl1MzIgZGVidWdfbGV2ZWw7CiAJdTMyIGZyYW1lY250X3RvX3VzOwogCWF0b21pY190IHJlc3RyaWN0X3JlZmNudDsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCkBAIC0xMjA2LDEyICsxMDc5LDQwIEBACiAjZW5kaWYgLyogQ09ORklHX0lXTFdJRklfREVCVUcgKi8KIAogCXN0cnVjdCB3b3JrX3N0cnVjdCB0eHBvd2VyX3dvcms7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfU0VOU0lUSVZJVFkKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Vuc2l0aXZpdHlfd29yazsKLSNlbmRpZgorCXUzMiBkaXNhYmxlX3NlbnNfY2FsOworCXUzMiBkaXNhYmxlX2NoYWluX25vaXNlX2NhbDsKKwl1MzIgZGlzYWJsZV90eF9wb3dlcl9jYWw7CisJc3RydWN0IHdvcmtfc3RydWN0IHJ1bl90aW1lX2NhbGliX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhdGlzdGljc19wZXJpb2RpYzsKIH07IC8qaXdsX3ByaXYgKi8KIAorc3RhdGljIGlubGluZSB2b2lkIGl3bF90eHFfY3R4X2FjdGl2YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCkKK3sKKwlzZXRfYml0KHR4cV9pZCwgJnByaXYtPnR4cV9jdHhfYWN0aXZlX21zayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdHhxX2N0eF9kZWFjdGl2YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCkKK3sKKwljbGVhcl9iaXQodHhxX2lkLCAmcHJpdi0+dHhxX2N0eF9hY3RpdmVfbXNrKTsKK30KKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCitjb25zdCBjaGFyICppd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKHUzMiBzdGF0dXMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqaXdsX2dldF90eF9mYWlsX3JlYXNvbih1MzIgc3RhdHVzKSB7IHJldHVybiAiIjsgfQorI2VuZGlmCisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaXdsX3R4X3F1ZXVlX2dldF9oZHIoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkJCSBpbnQgdHhxX2lkLCBpbnQgaWR4KQoreworCWlmIChwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2JbMF0pCisJCXJldHVybiAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwcml2LT50eHFbdHhxX2lkXS4KKwkJCQl0eGJbaWR4XS5za2JbMF0tPmRhdGE7CisJcmV0dXJuIE5VTEw7Cit9CisKKwogc3RhdGljIGlubGluZSBpbnQgaXdsX2lzX2Fzc29jaWF0ZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXJldHVybiAocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSA/IDEgOiAwOwpAQCAtMTIyNCwxMSArMTEyNSw2IEBACiAJcmV0dXJuIChjaF9pbmZvLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1ZBTElEKSA/IDEgOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX25hcnJvdyhjb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKLXsKLQlyZXR1cm4gKGNoX2luZm8tPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfTkFSUk9XKSA/IDEgOiAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX3JhZGFyKGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewogCXJldHVybiAoY2hfaW5mby0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikgPyAxIDogMDsKQEAgLTEyNTQsOSArMTE1MCwyNiBAQAogCXJldHVybiAoKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpKSA/IDEgOiAwOwogfQogCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfcHJpbnRfaGV4X2R1bXAoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGV2ZWwsCisJCQkJICAgICAgdm9pZCAqcCwgdTMyIGxlbikKK3sKKwlpZiAoIShwcml2LT5kZWJ1Z19sZXZlbCAmIGxldmVsKSkKKwkJcmV0dXJuOworCisJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIml3bCBkYXRhOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAorCQkJcCwgbGVuLCAxKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3ByaW50X2hleF9kdW1wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxldmVsLAorCQkJCSAgICAgIHZvaWQgKnAsIHUzMiBsZW4pCit7Cit9CisjZW5kaWYKKwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICppd2xfZ2V0X2NoYW5uZWxfaW5mbygKIAljb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgdTE2IGNoYW5uZWwpOwogCiAvKiBSZXF1aXJlcyBmdWxsIGRlY2xhcmF0aW9uIG9mIGl3bF9wcml2IGJlZm9yZSBpbmNsdWRpbmcgKi8KIAotI2VuZGlmCQkJCS8qIF9faXdsNDk2NV80OTY1X2hfXyAqLworI2VuZGlmCQkJCS8qIF9faXdsX2Rldl9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKaW5kZXggYTA3ZDVkYy4uNGEwOGExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKQEAgLTY4LDggKzY4LDggQEAKIAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCi0jaW5jbHVkZSAiaXdsLTQ5NjUtY29tbWFuZHMuaCIKLSNpbmNsdWRlICJpd2wtNDk2NS5oIgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgorI2luY2x1ZGUgIml3bC1kZXYuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKQEAgLTE5Myw2ICsxOTMsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUpOwogCitjb25zdCB1OCAqaXdsY29yZV9lZXByb21fcXVlcnlfYWRkcihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpCit7CisJQlVHX09OKG9mZnNldCA+PSBwcml2LT5jZmctPmVlcHJvbV9zaXplKTsKKwlyZXR1cm4gJnByaXYtPmVlcHJvbVtvZmZzZXRdOworfQorRVhQT1JUX1NZTUJPTChpd2xjb3JlX2VlcHJvbV9xdWVyeV9hZGRyKTsKIAogLyoqCiAgKiBpd2xfZWVwcm9tX2luaXQgLSByZWFkIEVFUFJPTSBjb250ZW50cwpAQCAtMjAzLDMwICsyMDksMzUgQEAKICAqLwogaW50IGl3bF9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JdTE2ICplID0gKHUxNiAqKSZwcml2LT5lZXByb207CisJdTE2ICplOwogCXUzMiBncCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCk7CiAJdTMyIHI7Ci0JaW50IHN6ID0gc2l6ZW9mKHByaXYtPmVlcHJvbSk7CisJaW50IHN6ID0gcHJpdi0+Y2ZnLT5lZXByb21fc2l6ZTsKIAlpbnQgcmV0OwogCWludCBpOwogCXUxNiBhZGRyOwogCi0JLyogVGhlIEVFUFJPTSBzdHJ1Y3R1cmUgaGFzIHNldmVyYWwgcGFkZGluZyBidWZmZXJzIHdpdGhpbiBpdAotCSAqIGFuZCB3aGVuIGFkZGluZyBuZXcgRUVQUk9NIG1hcHMgaXMgc3ViamVjdCB0byBwcm9ncmFtbWVyIGVycm9ycwotCSAqIHdoaWNoIG1heSBiZSB2ZXJ5IGRpZmZpY3VsdCB0byBpZGVudGlmeSB3aXRob3V0IGV4cGxpY2l0bHkKLQkgKiBjaGVja2luZyB0aGUgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGVlcHJvbSBtYXAuICovCi0JQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5lZXByb20pICE9IElXTF9FRVBST01fSU1BR0VfU0laRSk7CisJLyogYWxsb2NhdGUgZWVwcm9tICovCisJcHJpdi0+ZWVwcm9tID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5lZXByb20pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBhbGxvY19lcnI7CisJfQorCWUgPSAodTE2ICopcHJpdi0+ZWVwcm9tOwogCi0JaWYgKChncCAmIENTUl9FRVBST01fR1BfVkFMSURfTVNLKSA9PSBDU1JfRUVQUk9NX0dQX0JBRF9TSUdOQVRVUkUpIHsKKwlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnZlcmlmeV9zaWduYXR1cmUocHJpdik7CisJaWYgKHJldCA8IDApIHsKIAkJSVdMX0VSUk9SKCJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4IiwgZ3ApOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnI7CiAJfQogCiAJLyogTWFrZSBzdXJlIGRyaXZlciAoaW5zdGVhZCBvZiB1Q29kZSkgaXMgYWxsb3dlZCB0byByZWFkIEVFUFJPTSAqLwogCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmVlcHJvbV9vcHMuYWNxdWlyZV9zZW1hcGhvcmUocHJpdik7CiAJaWYgKHJldCA8IDApIHsKIAkJSVdMX0VSUk9SKCJGYWlsZWQgdG8gYWNxdWlyZSBFRVBST00gc2VtYXBob3JlLlxuIik7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycjsKIAl9CiAKIAkvKiBlZXByb20gaXMgYW4gYXJyYXkgb2YgMTZiaXQgdmFsdWVzICovCkBAIC0yNTAsNjEgKzI2MSw5OCBAQAogCQllW2FkZHIgLyAyXSA9IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNikociA+PiAxNikpOwogCX0KIAlyZXQgPSAwOwotCiBkb25lOgogCXByaXYtPmNmZy0+b3BzLT5saWItPmVlcHJvbV9vcHMucmVsZWFzZV9zZW1hcGhvcmUocHJpdik7CitlcnI6CisJaWYgKHJldCkKKwkJa2ZyZWUocHJpdi0+ZWVwcm9tKTsKK2FsbG9jX2VycjoKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfZWVwcm9tX2luaXQpOwogCit2b2lkIGl3bF9lZXByb21fZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaWYocHJpdi0+ZWVwcm9tKQorCQlrZnJlZShwcml2LT5lZXByb20pOworCXByaXYtPmVlcHJvbSA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9lZXByb21fZnJlZSk7CisKK2ludCBpd2xfZWVwcm9tX2NoZWNrX3ZlcnNpb24oc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXJldHVybiBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmNoZWNrX3ZlcnNpb24ocHJpdik7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbik7CisKK2NvbnN0IHU4ICppd2xfZWVwcm9tX3F1ZXJ5X2FkZHIoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCBzaXplX3Qgb2Zmc2V0KQoreworCXJldHVybiBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnF1ZXJ5X2FkZHIocHJpdiwgb2Zmc2V0KTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2VlcHJvbV9xdWVyeV9hZGRyKTsKKwordTE2IGl3bF9lZXByb21fcXVlcnkxNihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpCit7CisJcmV0dXJuICh1MTYpcHJpdi0+ZWVwcm9tW29mZnNldF0gfCAoKHUxNilwcml2LT5lZXByb21bb2Zmc2V0ICsgMV0gPDwgOCk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9lZXByb21fcXVlcnkxNik7CiAKIHZvaWQgaXdsX2VlcHJvbV9nZXRfbWFjKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggKm1hYykKIHsKLQltZW1jcHkobWFjLCBwcml2LT5lZXByb20ubWFjX2FkZHJlc3MsIDYpOworCWNvbnN0IHU4ICphZGRyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5xdWVyeV9hZGRyKHByaXYsCisJCQkJCUVFUFJPTV9NQUNfQUREUkVTUyk7CisJbWVtY3B5KG1hYywgYWRkciwgRVRIX0FMRU4pOwogfQogRVhQT1JUX1NZTUJPTChpd2xfZWVwcm9tX2dldF9tYWMpOwogCiBzdGF0aWMgdm9pZCBpd2xfaW5pdF9iYW5kX3JlZmVyZW5jZShjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgIGludCBiYW5kLAotCQkJCSAgICBpbnQgKmVlcHJvbV9jaF9jb3VudCwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwKLQkJCQkgICAgKiplZXByb21fY2hfaW5mbywKLQkJCQkgICAgY29uc3QgdTggKiplZXByb21fY2hfaW5kZXgpCisJCQlpbnQgZWVwX2JhbmQsIGludCAqZWVwcm9tX2NoX2NvdW50LAorCQkJY29uc3Qgc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCAqKmVlcHJvbV9jaF9pbmZvLAorCQkJY29uc3QgdTggKiplZXByb21fY2hfaW5kZXgpCiB7Ci0Jc3dpdGNoIChiYW5kKSB7CisJdTMyIG9mZnNldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPgorCQkJZWVwcm9tX29wcy5yZWd1bGF0b3J5X2JhbmRzW2VlcF9iYW5kIC0gMV07CisJc3dpdGNoIChlZXBfYmFuZCkgewogCWNhc2UgMToJCS8qIDIuNEdIeiBiYW5kICovCiAJCSplZXByb21fY2hfY291bnQgPSBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF8xKTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfMV9jaGFubmVsczsKKwkJKmVlcHJvbV9jaF9pbmZvID0gKHN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgKikKKwkJCQlpd2xfZWVwcm9tX3F1ZXJ5X2FkZHIocHJpdiwgb2Zmc2V0KTsKIAkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bF9lZXByb21fYmFuZF8xOwogCQlicmVhazsKIAljYXNlIDI6CQkvKiA0LjlHSHogYmFuZCAqLwogCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfMik7Ci0JCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzJfY2hhbm5lbHM7CisJCSplZXByb21fY2hfaW5mbyA9IChzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsICopCisJCQkJaXdsX2VlcHJvbV9xdWVyeV9hZGRyKHByaXYsIG9mZnNldCk7CiAJCSplZXByb21fY2hfaW5kZXggPSBpd2xfZWVwcm9tX2JhbmRfMjsKIAkJYnJlYWs7CiAJY2FzZSAzOgkJLyogNS4yR0h6IGJhbmQgKi8KIAkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzMpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8zX2NoYW5uZWxzOworCQkqZWVwcm9tX2NoX2luZm8gPSAoc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCAqKQorCQkJCWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBvZmZzZXQpOwogCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsX2VlcHJvbV9iYW5kXzM7CiAJCWJyZWFrOwogCWNhc2UgNDoJCS8qIDUuNUdIeiBiYW5kICovCiAJCSplZXByb21fY2hfY291bnQgPSBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF80KTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfNF9jaGFubmVsczsKKwkJKmVlcHJvbV9jaF9pbmZvID0gKHN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgKikKKwkJCQlpd2xfZWVwcm9tX3F1ZXJ5X2FkZHIocHJpdiwgb2Zmc2V0KTsKIAkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bF9lZXByb21fYmFuZF80OwogCQlicmVhazsKIAljYXNlIDU6CQkvKiA1LjdHSHogYmFuZCAqLwogCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfNSk7Ci0JCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzVfY2hhbm5lbHM7CisJCSplZXByb21fY2hfaW5mbyA9IChzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsICopCisJCQkJaXdsX2VlcHJvbV9xdWVyeV9hZGRyKHByaXYsIG9mZnNldCk7CiAJCSplZXByb21fY2hfaW5kZXggPSBpd2xfZWVwcm9tX2JhbmRfNTsKIAkJYnJlYWs7CiAJY2FzZSA2OgkJLyogMi40R0h6IEZBVCBjaGFubmVscyAqLwogCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfNik7Ci0JCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzI0X2NoYW5uZWxzOworCQkqZWVwcm9tX2NoX2luZm8gPSAoc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCAqKQorCQkJCWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBvZmZzZXQpOwogCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsX2VlcHJvbV9iYW5kXzY7CiAJCWJyZWFrOwogCWNhc2UgNzoJCS8qIDUgR0h6IEZBVCBjaGFubmVscyAqLwogCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfNyk7Ci0JCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzUyX2NoYW5uZWxzOworCQkqZWVwcm9tX2NoX2luZm8gPSAoc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCAqKQorCQkJCWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBvZmZzZXQpOwogCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsX2VlcHJvbV9iYW5kXzc7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zMTcsMTMgKzM2NSwxMyBAQAogCQkJICAgID8gIyB4ICIgIiA6ICIiKQogCiAvKioKLSAqIGl3bDQ5NjVfc2V0X2ZhdF9jaGFuX2luZm8gLSBDb3B5IGZhdCBjaGFubmVsIGluZm8gaW50byBkcml2ZXIncyBwcml2LgorICogaXdsX3NldF9mYXRfY2hhbl9pbmZvIC0gQ29weSBmYXQgY2hhbm5lbCBpbmZvIGludG8gZHJpdmVyJ3MgcHJpdi4KICAqCiAgKiBEb2VzIG5vdCBzZXQgdXAgYSBjb21tYW5kLCBvciB0b3VjaCBoYXJkd2FyZS4KICAqLwotc3RhdGljIGludCBpd2w0OTY1X3NldF9mYXRfY2hhbl9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsX3NldF9mYXRfY2hhbl9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgdTE2IGNoYW5uZWwsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCAqZWVwcm9tX2NoLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCAqZWVwcm9tX2NoLAogCQkJICAgICAgdTggZmF0X2V4dGVuc2lvbl9jaGFubmVsKQogewogCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwpAQCAtMzM0LDggKzM4Miw4IEBACiAJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKQogCQlyZXR1cm4gLTE7CiAKLQlJV0xfREVCVUdfSU5GTygiRkFUIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMlcygweCUwMngiCi0JCQkiICVkZEJtKTogQWQtSG9jICVzc3VwcG9ydGVkXG4iLAorCUlXTF9ERUJVR19JTkZPKCJGQVQgQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKKwkJCSIgQWQtSG9jICVzc3VwcG9ydGVkXG4iLAogCQkJY2hfaW5mby0+Y2hhbm5lbCwKIAkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KIAkJCSI1LjIiIDogIjIuNCIsCkBAIC0zNDMsNyArMzkxLDYgQEAKIAkJCUNIRUNLX0FORF9QUklOVChBQ1RJVkUpLAogCQkJQ0hFQ0tfQU5EX1BSSU5UKFJBREFSKSwKIAkJCUNIRUNLX0FORF9QUklOVChXSURFKSwKLQkJCUNIRUNLX0FORF9QUklOVChOQVJST1cpLAogCQkJQ0hFQ0tfQU5EX1BSSU5UKERGUyksCiAJCQllZXByb21fY2gtPmZsYWdzLAogCQkJZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnLApAQCAtMzcyLDcgKzQxOSw3IEBACiB7CiAJaW50IGVlcHJvbV9jaF9jb3VudCA9IDA7CiAJY29uc3QgdTggKmVlcHJvbV9jaF9pbmRleCA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgKmVlcHJvbV9jaF9pbmZvID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsICplZXByb21fY2hfaW5mbyA9IE5VTEw7CiAJaW50IGJhbmQsIGNoOwogCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCkBAIC0zODEsMTIgKzQyOCw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChwcml2LT5lZXByb20udmVyc2lvbiA8IDB4MmYpIHsKLQkJSVdMX1dBUk5JTkcoIlVuc3VwcG9ydGVkIEVFUFJPTSB2ZXJzaW9uOiAweCUwNFhcbiIsCi0JCQkgICAgcHJpdi0+ZWVwcm9tLnZlcnNpb24pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgaW5mbyBmcm9tIEVFUFJPTVxuIik7CiAKIAlwcml2LT5jaGFubmVsX2NvdW50ID0KQEAgLTQyOSw2ICs0NzAsMTEgQEAKIAkJCS8qIENvcHkgdGhlIHJ1bi10aW1lIGZsYWdzIHNvIHRoZXkgYXJlIHRoZXJlIGV2ZW4gb24KIAkJCSAqIGludmFsaWQgY2hhbm5lbHMgKi8KIAkJCWNoX2luZm8tPmZsYWdzID0gZWVwcm9tX2NoX2luZm9bY2hdLmZsYWdzOworCQkJLyogRmlyc3Qgd3JpdGUgdGhhdCBmYXQgaXMgbm90IGVuYWJsZWQsIGFuZCB0aGVuIGVuYWJsZQorCQkJICogb25lIGJ5IG9uZSAqLworCQkJY2hfaW5mby0+ZmF0X2V4dGVuc2lvbl9jaGFubmVsID0KKwkJCQkoSUVFRTgwMjExX0NIQU5fTk9fRkFUX0FCT1ZFIHwKKwkJCQkgSUVFRTgwMjExX0NIQU5fTk9fRkFUX0JFTE9XKTsKIAogCQkJaWYgKCEoaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkpIHsKIAkJCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIEZsYWdzICV4IFslc0dIel0gLSAiCkBAIC00NDcsOCArNDkzLDggQEAKIAkJCWNoX2luZm8tPnNjYW5fcG93ZXIgPSBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKIAkJCWNoX2luZm8tPm1pbl9wb3dlciA9IDA7CiAKLQkJCUlXTF9ERUJVR19JTkZPKCJDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzJXMlcygweCUwMngiCi0JCQkJICAgICAgICIgJWRkQm0pOiBBZC1Ib2MgJXNzdXBwb3J0ZWRcbiIsCisJCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzKDB4JTAyeCAlZGRCbSk6IgorCQkJCSAgICAgICAiIEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKIAkJCQkgICAgICAgY2hfaW5mby0+Y2hhbm5lbCwKIAkJCQkgICAgICAgaXNfY2hhbm5lbF9hX2JhbmQoY2hfaW5mbykgPwogCQkJCSAgICAgICAiNS4yIiA6ICIyLjQiLApAQCAtNDU3LDcgKzUwMyw2IEBACiAJCQkJICAgICAgIENIRUNLX0FORF9QUklOVF9JKEFDVElWRSksCiAJCQkJICAgICAgIENIRUNLX0FORF9QUklOVF9JKFJBREFSKSwKIAkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UX0koV0lERSksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVF9JKE5BUlJPVyksCiAJCQkJICAgICAgIENIRUNLX0FORF9QUklOVF9JKERGUyksCiAJCQkJICAgICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFncywKIAkJCQkgICAgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcsCkBAIC00NzAsOCArNTE1LDggQEAKIAkJCS8qIFNldCB0aGUgdXNlcl90eHBvd2VyX2xpbWl0IHRvIHRoZSBoaWdoZXN0IHBvd2VyCiAJCQkgKiBzdXBwb3J0ZWQgYnkgYW55IGNoYW5uZWwgKi8KIAkJCWlmIChlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZyA+Ci0JCQkgICAgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KQotCQkJCXByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9CisJCQkJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCkKKwkJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9CiAJCQkJICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnOwogCiAJCQljaF9pbmZvKys7CkBAIC00OTQsMjQgKzUzOSwyNiBAQAogCQlmb3IgKGNoID0gMDsgY2ggPCBlZXByb21fY2hfY291bnQ7IGNoKyspIHsKIAogCQkJaWYgKChiYW5kID09IDYpICYmCi0JCQkgICAgKChlZXByb21fY2hfaW5kZXhbY2hdID09IDUpIHx8Ci0JCQkgICAgKGVlcHJvbV9jaF9pbmRleFtjaF0gPT0gNikgfHwKLQkJCSAgICAoZWVwcm9tX2NoX2luZGV4W2NoXSA9PSA3KSkpCi0JCQkgICAgICAgZmF0X2V4dGVuc2lvbl9jaGFuID0gSFRfSUVfRVhUX0NIQU5ORUxfTUFYOworCQkJCSgoZWVwcm9tX2NoX2luZGV4W2NoXSA9PSA1KSB8fAorCQkJCSAoZWVwcm9tX2NoX2luZGV4W2NoXSA9PSA2KSB8fAorCQkJCSAoZWVwcm9tX2NoX2luZGV4W2NoXSA9PSA3KSkpCisJCQkJLyogYm90aCBhcmUgYWxsb3dlZDogYWJvdmUgYW5kIGJlbG93ICovCisJCQkJZmF0X2V4dGVuc2lvbl9jaGFuID0gMDsKIAkJCWVsc2UKLQkJCQlmYXRfZXh0ZW5zaW9uX2NoYW4gPSBIVF9JRV9FWFRfQ0hBTk5FTF9BQk9WRTsKKwkJCQlmYXRfZXh0ZW5zaW9uX2NoYW4gPQorCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19GQVRfQkVMT1c7CiAKIAkJCS8qIFNldCB1cCBkcml2ZXIncyBpbmZvIGZvciBsb3dlciBoYWxmICovCi0JCQlpd2w0OTY1X3NldF9mYXRfY2hhbl9pbmZvKHByaXYsIGllZWViYW5kLAotCQkJCQkJICBlZXByb21fY2hfaW5kZXhbY2hdLAotCQkJCQkJICAmKGVlcHJvbV9jaF9pbmZvW2NoXSksCi0JCQkJCQkgIGZhdF9leHRlbnNpb25fY2hhbik7CisJCQlpd2xfc2V0X2ZhdF9jaGFuX2luZm8ocHJpdiwgaWVlZWJhbmQsCisJCQkJCQllZXByb21fY2hfaW5kZXhbY2hdLAorCQkJCQkJJihlZXByb21fY2hfaW5mb1tjaF0pLAorCQkJCQkJZmF0X2V4dGVuc2lvbl9jaGFuKTsKIAogCQkJLyogU2V0IHVwIGRyaXZlcidzIGluZm8gZm9yIHVwcGVyIGhhbGYgKi8KLQkJCWl3bDQ5NjVfc2V0X2ZhdF9jaGFuX2luZm8ocHJpdiwgaWVlZWJhbmQsCi0JCQkJCQkgIChlZXByb21fY2hfaW5kZXhbY2hdICsgNCksCi0JCQkJCQkgICYoZWVwcm9tX2NoX2luZm9bY2hdKSwKLQkJCQkJCSAgSFRfSUVfRVhUX0NIQU5ORUxfQkVMT1cpOworCQkJaXdsX3NldF9mYXRfY2hhbl9pbmZvKHByaXYsIGllZWViYW5kLAorCQkJCQkJKGVlcHJvbV9jaF9pbmRleFtjaF0gKyA0KSwKKwkJCQkJCSYoZWVwcm9tX2NoX2luZm9bY2hdKSwKKwkJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0ZBVF9BQk9WRSk7CiAJCX0KIAl9CiAKQEAgLTUyMCwyMyArNTY3LDIxIEBACiBFWFBPUlRfU1lNQk9MKGl3bF9pbml0X2NoYW5uZWxfbWFwKTsKIAogLyoKLSAqIGl3bF9mcmVlX2NoYW5uZWxfbWFwIC0gdW5kbyBhbGxvY2F0aW9ucyBpbiBpd2w0OTY1X2luaXRfY2hhbm5lbF9tYXAKKyAqIGl3bF9mcmVlX2NoYW5uZWxfbWFwIC0gdW5kbyBhbGxvY2F0aW9ucyBpbiBpd2xfaW5pdF9jaGFubmVsX21hcAogICovCiB2b2lkIGl3bF9mcmVlX2NoYW5uZWxfbWFwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlrZnJlZShwcml2LT5jaGFubmVsX2luZm8pOwogCXByaXYtPmNoYW5uZWxfY291bnQgPSAwOwogfQotRVhQT1JUX1NZTUJPTChpd2xfZnJlZV9jaGFubmVsX21hcCk7CiAKIC8qKgogICogaXdsX2dldF9jaGFubmVsX2luZm8gLSBGaW5kIGRyaXZlcidzIHByaXZhdGUgY2hhbm5lbCBpbmZvCiAgKgogICogQmFzZWQgb24gYmFuZCBhbmQgY2hhbm5lbCBudW1iZXIuCiAgKi8KLWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICppd2xfZ2V0X2NoYW5uZWxfaW5mbygKLQkJY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsKQorY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKml3bF9nZXRfY2hhbm5lbF9pbmZvKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCkKIHsKIAlpbnQgaTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAppbmRleCBiZDBhMDQyLi5kM2EyYTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApAQCAtMTA2LDcgKzEwNiw3IEBACiAJRUVQUk9NX0NIQU5ORUxfQUNUSVZFID0gKDEgPDwgMyksCS8qIGFjdGl2ZSBzY2FubmluZyBhbGxvd2VkICovCiAJRUVQUk9NX0NIQU5ORUxfUkFEQVIgPSAoMSA8PCA0KSwJLyogcmFkYXIgZGV0ZWN0aW9uIHJlcXVpcmVkICovCiAJRUVQUk9NX0NIQU5ORUxfV0lERSA9ICgxIDw8IDUpLAkJLyogMjAgTUh6IGNoYW5uZWwgb2theSAqLwotCUVFUFJPTV9DSEFOTkVMX05BUlJPVyA9ICgxIDw8IDYpLAkvKiAxMCBNSHogY2hhbm5lbCAobm90IHVzZWQpICovCisJLyogQml0IDYgUmVzZXJ2ZWQgKHdhcyBOYXJyb3cgQ2hhbm5lbCkgKi8KIAlFRVBST01fQ0hBTk5FTF9ERlMgPSAoMSA8PCA3KSwJLyogZHluYW1pYyBmcmVxIHNlbGVjdGlvbiBjYW5kaWRhdGUgKi8KIH07CiAKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAvKiAqcmVndWxhdG9yeSogY2hhbm5lbCBkYXRhIGZvcm1hdCBpbiBlZXByb20sIG9uZSBmb3IgZWFjaCBjaGFubmVsLgogICogVGhlcmUgYXJlIHNlcGFyYXRlIGVudHJpZXMgZm9yIEZBVCAoNDAgTUh6KSB2cy4gbm9ybWFsICgyMCBNSHopIGNoYW5uZWxzLiAqLwotc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgeworc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCB7CiAJdTggZmxhZ3M7CQkvKiBFRVBST01fQ0hBTk5FTF8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwogCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTEzMSwxNyArMTMxLDU1IEBACiAgKiBlYWNoIG9mIDMgdGFyZ2V0IG91dHB1dCBsZXZlbHMgKi8KICNkZWZpbmUgRUVQUk9NX1RYX1BPV0VSX01FQVNVUkVNRU5UUyAgICgzKQogCi0jZGVmaW5lIEVFUFJPTV80OTY1X1RYX1BPV0VSX1ZFUlNJT04gICAgICAgICgyKQorLyogNDk2NSBTcGVjaWZpYyAqLworLyogNDk2NSBkcml2ZXIgZG9lcyBub3Qgd29yayB3aXRoIHR4cG93ZXIgY2FsaWJyYXRpb24gdmVyc2lvbiA8IDUgKi8KKyNkZWZpbmUgRUVQUk9NXzQ5NjVfVFhfUE9XRVJfVkVSU0lPTiAgICAoNSkKKyNkZWZpbmUgRUVQUk9NXzQ5NjVfRUVQUk9NX1ZFUlNJT04JKDB4MmYpCisjZGVmaW5lIEVFUFJPTV80OTY1X0NBTElCX1ZFUlNJT05fT0ZGU0VUICAgICAgICgyKjB4QjYpIC8qIDIgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NXzQ5NjVfQ0FMSUJfVFhQT1dFUl9PRkZTRVQgICAgICAgKDIqMHhFOCkgLyogNDggIGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV80OTY1X0JPQVJEX1JFVklTSU9OICAgICAgICAgICAgICgyKjB4NEYpIC8qIDIgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NXzQ5NjVfQk9BUkRfUEJBICAgICAgICAgICAgICAgICAgKDIqMHg1NisxKSAvKiA5IGJ5dGVzICovCiAKLS8qIDQ5NjUgZHJpdmVyIGRvZXMgbm90IHdvcmsgd2l0aCB0eHBvd2VyIGNhbGlicmF0aW9uIHZlcnNpb24gPCA1LgotICogTG9vayBmb3IgdGhpcyBpbiBjYWxpYl92ZXJzaW9uIG1lbWJlciBvZiBzdHJ1Y3QgaXdsNDk2NV9lZXByb20uICovCi0jZGVmaW5lIEVFUFJPTV9UWF9QT1dFUl9WRVJTSU9OX05FVyAgICAoNSkKKy8qIDUwMDAgU3BlY2lmaWMgKi8KKyNkZWZpbmUgRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiAgICAoNCkKKyNkZWZpbmUgRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04JKDB4MTFBKQorCisvKjUwMDAgY2FsaWJyYXRpb25zICovCisjZGVmaW5lIEVFUFJPTV81MDAwX0NBTElCX0FMTAkoSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX0NBTElCUkFUSU9OKQorI2RlZmluZSBFRVBST01fNTAwMF9YVEFMCSgoMioweDEyOCkgfCBFRVBST01fNTAwMF9DQUxJQl9BTEwpCisKKy8qIDUwMDAgbGlua3MgKi8KKyNkZWZpbmUgRUVQUk9NXzUwMDBfTElOS19IT1NUICAgICAgICAgICAgICgyKjB4NjQpCisjZGVmaW5lIEVFUFJPTV81MDAwX0xJTktfR0VORVJBTCAgICAgICAgICAoMioweDY1KQorI2RlZmluZSBFRVBST01fNTAwMF9MSU5LX1JFR1VMQVRPUlkgICAgICAgKDIqMHg2NikKKyNkZWZpbmUgRUVQUk9NXzUwMDBfTElOS19DQUxJQlJBVElPTiAgICAgICgyKjB4NjcpCisjZGVmaW5lIEVFUFJPTV81MDAwX0xJTktfUFJPQ0VTU19BREpTVCAgICAoMioweDY4KQorI2RlZmluZSBFRVBST01fNTAwMF9MSU5LX09USEVSUyAgICAgICAgICAgKDIqMHg2OSkKKworLyogNTAwMCByZWd1bGF0b3J5IC0gaW5kaXJlY3QgYWNjZXNzICovCisjZGVmaW5lIEVFUFJPTV81MDAwX1JFR19TS1VfSUQgKCgweDAyKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiA0ICBieXRlcyAqLworI2RlZmluZSBFRVBST01fNTAwMF9SRUdfQkFORF8xX0NIQU5ORUxTICAgICAgICgoMHgwOClcCisJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjggYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NXzUwMDBfUkVHX0JBTkRfMl9DSEFOTkVMUyAgICAgICAoKDB4MjYpXAorCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDI2IGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV81MDAwX1JFR19CQU5EXzNfQ0hBTk5FTFMgICAgICAgKCgweDQyKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAyNCBieXRlcyAqLworI2RlZmluZSBFRVBST01fNTAwMF9SRUdfQkFORF80X0NIQU5ORUxTICAgICAgICgoMHg1QylcCisJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjIgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUyAgICAgICAoKDB4NzQpXAorCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDEyIGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0ZBVF9DSEFOTkVMUyAgKCgweDgyKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNCAgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NXzUwMDBfUkVHX0JBTkRfNTJfRkFUX0NIQU5ORUxTICAoKDB4OTIpXAorCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDIyICBieXRlcyAqLworCiAKIC8qIDIuNCBHSHogKi8KIGV4dGVybiBjb25zdCB1OCBpd2xfZWVwcm9tX2JhbmRfMVsxNF07CiAKIC8qCi0gKiA0OTY1IGZhY3RvcnkgY2FsaWJyYXRpb24gZGF0YSBmb3Igb25lIHR4cG93ZXIgbGV2ZWwsIG9uIG9uZSBjaGFubmVsLAorICogZmFjdG9yeSBjYWxpYnJhdGlvbiBkYXRhIGZvciBvbmUgdHhwb3dlciBsZXZlbCwgb24gb25lIGNoYW5uZWwsCiAgKiBtZWFzdXJlZCBvbiBvbmUgb2YgdGhlIDIgdHggY2hhaW5zIChyYWRpbyB0cmFuc21pdHRlciBhbmQgYXNzb2NpYXRlZAogICogYW50ZW5uYSkuICBFRVBST00gY29udGFpbnM6CiAgKgpAQCAtMTU0LDcgKzE5Miw3IEBACiAgKgogICogNCkgIFJGIHBvd2VyIGFtcGxpZmllciBkZXRlY3RvciBsZXZlbCBtZWFzdXJlbWVudCAobm90IHVzZWQpLgogICovCi1zdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfbWVhc3VyZSB7CitzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9tZWFzdXJlIHsKIAl1OCB0ZW1wZXJhdHVyZTsJCS8qIERldmljZSB0ZW1wZXJhdHVyZSAoQ2Vsc2l1cykgKi8KIAl1OCBnYWluX2lkeDsJCS8qIEluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwogCXU4IGFjdHVhbF9wb3c7CQkvKiBNZWFzdXJlZCBSRiBvdXRwdXQgcG93ZXIsIGhhbGYtZEJtICovCkBAIC0xNjMsMjIgKzIwMSwyMiBAQAogCiAKIC8qCi0gKiA0OTY1IG1lYXN1cmVtZW50IHNldCBmb3Igb25lIGNoYW5uZWwuICBFRVBST00gY29udGFpbnM6CisgKiBtZWFzdXJlbWVudCBzZXQgZm9yIG9uZSBjaGFubmVsLiAgRUVQUk9NIGNvbnRhaW5zOgogICoKICAqIDEpICBDaGFubmVsIG51bWJlciBtZWFzdXJlZAogICoKICAqIDIpICBNZWFzdXJlbWVudHMgZm9yIGVhY2ggb2YgMyBwb3dlciBsZXZlbHMgZm9yIGVhY2ggb2YgMiByYWRpbyB0cmFuc21pdHRlcnMKICAqICAgICAoYS5rLmEuICJ0eCBjaGFpbnMiKSAoNiBtZWFzdXJlbWVudHMgYWx0b2dldGhlcikKICAqLwotc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX2NoX2luZm8geworc3RydWN0IGl3bF9lZXByb21fY2FsaWJfY2hfaW5mbyB7CiAJdTggY2hfbnVtOwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9tZWFzdXJlCisJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfbWVhc3VyZQogCQltZWFzdXJlbWVudHNbRUVQUk9NX1RYX1BPV0VSX1RYX0NIQUlOU10KIAkJCVtFRVBST01fVFhfUE9XRVJfTUVBU1VSRU1FTlRTXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKgotICogNDk2NSB0eHBvd2VyIHN1YmJhbmQgaW5mby4KKyAqIHR4cG93ZXIgc3ViYmFuZCBpbmZvLgogICoKICAqIEZvciBlYWNoIGZyZXF1ZW5jeSBzdWJiYW5kLCBFRVBST00gY29udGFpbnMgdGhlIGZvbGxvd2luZzoKICAqCkBAIC0xODcsMTYgKzIyNSwxNiBAQAogICoKICAqIDIpICBTYW1wbGUgbWVhc3VyZW1lbnQgc2V0cyBmb3IgMiBjaGFubmVscyBjbG9zZSB0byB0aGUgcmFuZ2UgZW5kcG9pbnRzLgogICovCi1zdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfc3ViYmFuZF9pbmZvIHsKK3N0cnVjdCBpd2xfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbyB7CiAJdTggY2hfZnJvbTsJLyogY2hhbm5lbCBudW1iZXIgb2YgbG93ZXN0IGNoYW5uZWwgaW4gc3ViYmFuZCAqLwogCXU4IGNoX3RvOwkvKiBjaGFubmVsIG51bWJlciBvZiBoaWdoZXN0IGNoYW5uZWwgaW4gc3ViYmFuZCAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9jaF9pbmZvIGNoMTsKLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfY2hfaW5mbyBjaDI7CisJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfY2hfaW5mbyBjaDE7CisJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfY2hfaW5mbyBjaDI7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCiAvKgotICogNDk2NSB0eHBvd2VyIGNhbGlicmF0aW9uIGluZm8uICBFRVBST00gY29udGFpbnM6CisgKiB0eHBvd2VyIGNhbGlicmF0aW9uIGluZm8uICBFRVBST00gY29udGFpbnM6CiAgKgogICogMSkgIEZhY3RvcnktbWVhc3VyZWQgc2F0dXJhdGlvbiBwb3dlciBsZXZlbHMgKG1heGltdW0gbGV2ZWxzIGF0IHdoaWNoCiAgKiAgICAgdHggcG93ZXIgYW1wbGlmaWVyIGNhbiBvdXRwdXQgYSBzaWduYWwgd2l0aG91dCB0b28gbXVjaCBkaXN0b3J0aW9uKS4KQEAgLTIxMiw1NSArMjUwLDU4IEBACiAgKiAgICAgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBhbmFsb2cgcmFkaW8gY2lyY3VpdHJ5IHZhcnkgd2l0aCBmcmVxdWVuY3kuCiAgKgogICogICAgIE5vdCBhbGwgc2V0cyBuZWVkIHRvIGJlIGZpbGxlZCB3aXRoIGRhdGE7Ci0gKiAgICAgc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbyBjb250YWlucyByYW5nZSBvZiBjaGFubmVscworICogICAgIHN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbyBjb250YWlucyByYW5nZSBvZiBjaGFubmVscwogICogICAgICgwIGlmIHVudXNlZCkgZm9yIGVhY2ggc2V0IG9mIGRhdGEuCiAgKi8KLXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9pbmZvIHsKK3N0cnVjdCBpd2xfZWVwcm9tX2NhbGliX2luZm8gewogCXU4IHNhdHVyYXRpb25fcG93ZXIyNDsJLyogaGFsZi1kQm0gKGUuZy4gIjM0IiA9IDE3IGRCbSkgKi8KIAl1OCBzYXR1cmF0aW9uX3Bvd2VyNTI7CS8qIGhhbGYtZEJtICovCiAJczE2IHZvbHRhZ2U7CQkvKiBzaWduZWQgKi8KLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfc3ViYmFuZF9pbmZvCisJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfc3ViYmFuZF9pbmZvCiAJCWJhbmRfaW5mb1tFRVBST01fVFhfUE9XRVJfQkFORFNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIAorI2RlZmluZSBBRERSRVNTX01TSyAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJTkRJUkVDVF9UWVBFX01TSyAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBJTkRJUkVDVF9IT1NUICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJTkRJUkVDVF9HRU5FUkFMICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJTkRJUkVDVF9SRUdVTEFUT1JZICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJTkRJUkVDVF9DQUxJQlJBVElPTiAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJTkRJUkVDVF9QUk9DRVNTX0FESlNUICAgICAgMHgwMDA1MDAwMAorI2RlZmluZSBJTkRJUkVDVF9PVEhFUlMgICAgICAgICAgICAgMHgwMDA2MDAwMAorI2RlZmluZSBJTkRJUkVDVF9BRERSRVNTICAgICAgICAgICAgMHgwMDEwMDAwMAogCi0vKgotICogNDk2NSBFRVBST00gbWFwCi0gKi8KLXN0cnVjdCBpd2w0OTY1X2VlcHJvbSB7Ci0JdTggcmVzZXJ2ZWQwWzE2XTsKLQl1MTYgZGV2aWNlX2lkOwkJLyogYWJzLm9mczogMTYgKi8KLQl1OCByZXNlcnZlZDFbMl07Ci0JdTE2IHBtYzsJCS8qIGFicy5vZnM6IDIwICovCi0JdTggcmVzZXJ2ZWQyWzIwXTsKLQl1OCBtYWNfYWRkcmVzc1s2XTsJLyogYWJzLm9mczogNDIgKi8KLQl1OCByZXNlcnZlZDNbNThdOwotCXUxNiBib2FyZF9yZXZpc2lvbjsJLyogYWJzLm9mczogMTA2ICovCi0JdTggcmVzZXJ2ZWQ0WzExXTsKLQl1OCBib2FyZF9wYmFfbnVtYmVyWzldOwkvKiBhYnMub2ZzOiAxMTkgKi8KLQl1OCByZXNlcnZlZDVbOF07Ci0JdTE2IHZlcnNpb247CQkvKiBhYnMub2ZzOiAxMzYgKi8KLQl1OCBza3VfY2FwOwkJLyogYWJzLm9mczogMTM4ICovCi0JdTggbGVkc19tb2RlOwkJLyogYWJzLm9mczogMTM5ICovCi0JdTE2IG9lbV9tb2RlOwotCXUxNiB3b3dsYW5fbW9kZTsJLyogYWJzLm9mczogMTQyICovCi0JdTE2IGxlZHNfdGltZV9pbnRlcnZhbDsJLyogYWJzLm9mczogMTQ0ICovCi0JdTggbGVkc19vZmZfdGltZTsJLyogYWJzLm9mczogMTQ2ICovCi0JdTggbGVkc19vbl90aW1lOwkvKiBhYnMub2ZzOiAxNDcgKi8KLQl1OCBhbG1nb3JfbV92ZXJzaW9uOwkvKiBhYnMub2ZzOiAxNDggKi8KLQl1OCBhbnRlbm5hX3N3aXRjaF90eXBlOwkvKiBhYnMub2ZzOiAxNDkgKi8KLQl1OCByZXNlcnZlZDZbOF07Ci0JdTE2IGJvYXJkX3JldmlzaW9uXzQ5NjU7CS8qIGFicy5vZnM6IDE1OCAqLwotCXU4IHJlc2VydmVkN1sxM107Ci0JdTggYm9hcmRfcGJhX251bWJlcl80OTY1WzldOwkvKiBhYnMub2ZzOiAxNzMgKi8KLQl1OCByZXNlcnZlZDhbMTBdOwotCXU4IHNrdV9pZFs0XTsJCS8qIGFicy5vZnM6IDE5MiAqLworLyogR2VuZXJhbCAqLworI2RlZmluZSBFRVBST01fREVWSUNFX0lEICAgICAgICAgICAgICAgICAgICAoMioweDA4KQkvKiAyIGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgICAgICgyKjB4MTUpCS8qIDYgIGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV9CT0FSRF9SRVZJU0lPTiAgICAgICAgICAgICAgICgyKjB4MzUpCS8qIDIgIGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV9CT0FSRF9QQkFfTlVNQkVSICAgICAgICAgICAgICgyKjB4M0IrMSkJLyogOSAgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgKDIqMHg0NCkJLyogMiAgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NX1NLVV9DQVAgICAgICAgICAgICAgICAgICAgICAgKDIqMHg0NSkJLyogMSAgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NX0xFRFNfTU9ERSAgICAgICAgICAgICAgICAgICAgKDIqMHg0NSsxKQkvKiAxICBieXRlcyAqLworI2RlZmluZSBFRVBST01fT0VNX01PREUgICAgICAgICAgICAgICAgICAgICAoMioweDQ2KQkvKiAyICBieXRlcyAqLworI2RlZmluZSBFRVBST01fV09XTEFOX01PREUgICAgICAgICAgICAgICAgICAoMioweDQ3KQkvKiAyICBieXRlcyAqLworI2RlZmluZSBFRVBST01fUkFESU9fQ09ORklHICAgICAgICAgICAgICAgICAoMioweDQ4KQkvKiAyICBieXRlcyAqLworI2RlZmluZSBFRVBST01fMzk0NV9NX1ZFUlNJT04gICAgICAgICAgICAgICAoMioweDRBKQkvKiAxICBieXRlcyAqLworI2RlZmluZSBFRVBST01fQU5URU5OQV9TV0lUQ0hfVFlQRSAgICAgICAgICAoMioweDRBKzEpCS8qIDEgIGJ5dGVzICovCisKKy8qIFRoZSBmb2xsb3dpbmcgbWFza3MgYXJlIHRvIGJlIGFwcGxpZWQgb24gRUVQUk9NX1JBRElPX0NPTkZJRyAqLworI2RlZmluZSBFRVBST01fUkZfQ0ZHX1RZUEVfTVNLKHgpICAgKHggJiAweDMpICAgICAgICAgLyogYml0cyAwLTEgICAqLworI2RlZmluZSBFRVBST01fUkZfQ0ZHX1NURVBfTVNLKHgpICAgKCh4ID4+IDIpICAmIDB4MykgLyogYml0cyAyLTMgICAqLworI2RlZmluZSBFRVBST01fUkZfQ0ZHX0RBU0hfTVNLKHgpICAgKCh4ID4+IDQpICAmIDB4MykgLyogYml0cyA0LTUgICAqLworI2RlZmluZSBFRVBST01fUkZfQ0ZHX1BOVU1fTVNLKHgpICAgKCh4ID4+IDYpICAmIDB4MykgLyogYml0cyA2LTcgICAqLworI2RlZmluZSBFRVBST01fUkZfQ0ZHX1RYX0FOVF9NU0soeCkgKCh4ID4+IDgpICAmIDB4RikgLyogYml0cyA4LTExICAqLworI2RlZmluZSBFRVBST01fUkZfQ0ZHX1JYX0FOVF9NU0soeCkgKCh4ID4+IDEyKSAmIDB4RikgLyogYml0cyAxMi0xNSAqLworCisjZGVmaW5lIEVFUFJPTV8zOTQ1X1JGX0NGR19UWVBFX01BWCAgMHgwCisjZGVmaW5lIEVFUFJPTV80OTY1X1JGX0NGR19UWVBFX01BWCAgMHgxCisjZGVmaW5lIEVFUFJPTV81MDAwX1JGX0NGR19UWVBFX01BWCAgMHgzCiAKIC8qCiAgKiBQZXItY2hhbm5lbCByZWd1bGF0b3J5IGRhdGEuCiAgKgotICogRWFjaCBjaGFubmVsIHRoYXQgKm1pZ2h0KiBiZSBzdXBwb3J0ZWQgYnkgMzk0NSBvciA0OTY1IGhhcyBhIGZpeGVkIGxvY2F0aW9uCisgKiBFYWNoIGNoYW5uZWwgdGhhdCAqbWlnaHQqIGJlIHN1cHBvcnRlZCBieSBpd2wgaGFzIGEgZml4ZWQgbG9jYXRpb24KICAqIGluIEVFUFJPTSBjb250YWluaW5nIEVFUFJPTV9DSEFOTkVMXyogdXNhZ2UgZmxhZ3MgKExTQikgYW5kIG1heCByZWd1bGF0b3J5CiAgKiB0eHBvd2VyIChNU0IpLgogICoKQEAgLTI2OSw0MCArMzEwLDM4IEBACiAgKgogICogMi40IEdIeiBjaGFubmVscyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQKICAqLwotCXUxNiBiYW5kXzFfY291bnQ7CS8qIGFicy5vZnM6IDE5NiAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGJhbmRfMV9jaGFubmVsc1sxNF07IC8qIGFicy5vZnM6IDE5NiAqLworI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9TS1VfSUQgICAgICAgICAgICAoMioweDYwKSAgICAvKiA0ICBieXRlcyAqLworI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzEgICAgICAgICAgICAoMioweDYyKQkvKiAyICBieXRlcyAqLworI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzFfQ0hBTk5FTFMgICAoMioweDYzKQkvKiAyOCBieXRlcyAqLwogCiAvKgogICogNC45IEdIeiBjaGFubmVscyAxODMsIDE4NCwgMTg1LCAxODcsIDE4OCwgMTg5LCAxOTIsIDE5NiwKICAqIDUuMCBHSHogY2hhbm5lbHMgNywgOCwgMTEsIDEyLCAxNgogICogKDQ5MTUtNTA4ME1IeikgKG5vbmUgb2YgdGhlc2UgaXMgZXZlciBzdXBwb3J0ZWQpCiAgKi8KLQl1MTYgYmFuZF8yX2NvdW50OwkvKiBhYnMub2ZzOiAyMjYgKi8KLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCBiYW5kXzJfY2hhbm5lbHNbMTNdOyAvKiBhYnMub2ZzOiAyMjggKi8KKyNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8yICAgICAgICAgICAgKDIqMHg3MSkJLyogMiAgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8yX0NIQU5ORUxTICAgKDIqMHg3MikJLyogMjYgYnl0ZXMgKi8KIAogLyoKICAqIDUuMiBHSHogY2hhbm5lbHMgMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NAogICogKDUxNzAtNTMyME1IeikKICAqLwotCXUxNiBiYW5kXzNfY291bnQ7CS8qIGFicy5vZnM6IDI1NCAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGJhbmRfM19jaGFubmVsc1sxMl07IC8qIGFicy5vZnM6IDI1NiAqLworI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzMgICAgICAgICAgICAoMioweDdGKQkvKiAyICBieXRlcyAqLworI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzNfQ0hBTk5FTFMgICAoMioweDgwKQkvKiAyNCBieXRlcyAqLwogCiAvKgogICogNS41IEdIeiBjaGFubmVscyAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MAogICogKDU1MDAtNTcwME1IeikKICAqLwotCXUxNiBiYW5kXzRfY291bnQ7CS8qIGFicy5vZnM6IDI4MCAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGJhbmRfNF9jaGFubmVsc1sxMV07IC8qIGFicy5vZnM6IDI4MiAqLworI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzQgICAgICAgICAgICAoMioweDhDKQkvKiAyICBieXRlcyAqLworI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzRfQ0hBTk5FTFMgICAoMioweDhEKQkvKiAyMiBieXRlcyAqLwogCiAvKgogICogNS43IEdIeiBjaGFubmVscyAxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CiAgKiAoNTcyNS01ODI1TUh6KQogICovCi0JdTE2IGJhbmRfNV9jb3VudDsJLyogYWJzLm9mczogMzA0ICovCi0Jc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgYmFuZF81X2NoYW5uZWxzWzZdOyAvKiBhYnMub2ZzOiAzMDYgKi8KLQotCXU4IHJlc2VydmVkMTBbMl07Ci0KKyNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF81ICAgICAgICAgICAgKDIqMHg5OCkJLyogMiAgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF81X0NIQU5ORUxTICAgKDIqMHg5OSkJLyogMTIgYnl0ZXMgKi8KIAogLyoKICAqIDIuNCBHSHogRkFUIGNoYW5uZWxzIDEgKDUpLCAyICg2KSwgMyAoNyksIDQgKDgpLCA1ICg5KSwgNiAoMTApLCA3ICgxMSkKQEAgLTMxOSw1MiArMzU4LDM1IEBACiAgKgogICogTk9URTogIDQ5NjUgZG9lcyBub3Qgc3VwcG9ydCBGQVQgY2hhbm5lbHMgb24gMi40IEdIei4KICAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGJhbmRfMjRfY2hhbm5lbHNbN107IC8qIGFicy5vZnM6IDMyMCAqLwotCXU4IHJlc2VydmVkMTFbMl07CisjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF8yNF9GQVRfQ0hBTk5FTFMgKDIqMHhBMCkJLyogMTQgYnl0ZXMgKi8KIAogLyoKICAqIDUuMiBHSHogRkFUIGNoYW5uZWxzIDM2ICg0MCksIDQ0ICg0OCksIDUyICg1NiksIDYwICg2NCksCiAgKiAxMDAgKDEwNCksIDEwOCAoMTEyKSwgMTE2ICgxMjApLCAxMjQgKDEyOCksIDEzMiAoMTM2KSwgMTQ5ICgxNTMpLCAxNTcgKDE2MSkKICAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGJhbmRfNTJfY2hhbm5lbHNbMTFdOyAvKiBhYnMub2ZzOiAzMzYgKi8KLQl1OCByZXNlcnZlZDEyWzZdOwotCi0vKgotICogNDk2NSBkcml2ZXIgcmVxdWlyZXMgdHhwb3dlciBjYWxpYnJhdGlvbiBmb3JtYXQgdmVyc2lvbiA1IG9yIGdyZWF0ZXIuCi0gKiBEcml2ZXIgZG9lcyBub3Qgd29yayB3aXRoIHR4cG93ZXIgY2FsaWJyYXRpb24gdmVyc2lvbiA8IDUuCi0gKiBUaGlzIHZhbHVlIGlzIHNpbXBseSBhIDE2LWJpdCBudW1iZXIsIG5vIG1ham9yL21pbm9yIHZlcnNpb25zIGhlcmUuCi0gKi8KLQl1MTYgY2FsaWJfdmVyc2lvbjsJLyogYWJzLm9mczogMzY0ICovCi0JdTggcmVzZXJ2ZWQxM1syXTsKLQl1OCByZXNlcnZlZDE0Wzk2XTsJLyogYWJzLm9mczogMzY4ICovCi0KLS8qCi0gKiA0OTY1IFR4cG93ZXIgY2FsaWJyYXRpb24gZGF0YS4KLSAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9pbmZvIGNhbGliX2luZm87CS8qIGFicy5vZnM6IDQ2NCAqLwotCi0JdTggcmVzZXJ2ZWQxNlsxNDBdOwkvKiBmaWxsIG91dCB0byBmdWxsIDEwMjQgYnl0ZSBibG9jayAqLwotCi0KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIElXTF9FRVBST01fSU1BR0VfU0laRSAxMDI0Ci0KLS8qIEVuZCBvZiBFRVBST00gKi8KKyNkZWZpbmUgRUVQUk9NXzQ5NjVfUkVHVUxBVE9SWV9CQU5EXzUyX0ZBVF9DSEFOTkVMUyAoMioweEE4KQkvKiAyMiBieXRlcyAqLwogCiBzdHJ1Y3QgaXdsX2VlcHJvbV9vcHMgeworCWNvbnN0IHUzMiByZWd1bGF0b3J5X2JhbmRzWzddOwogCWludCAoKnZlcmlmeV9zaWduYXR1cmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCWludCAoKmFjcXVpcmVfc2VtYXBob3JlKSAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAl2b2lkICgqcmVsZWFzZV9zZW1hcGhvcmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCWludCAoKmNoZWNrX3ZlcnNpb24pIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCWNvbnN0IHU4KiAoKnF1ZXJ5X2FkZHIpIChjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOwogfTsKIAogCiB2b2lkIGl3bF9lZXByb21fZ2V0X21hYyhjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4ICptYWMpOwogaW50IGl3bF9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfZWVwcm9tX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCAgaXdsX2VlcHJvbV9jaGVja192ZXJzaW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Citjb25zdCB1OCAqaXdsX2VlcHJvbV9xdWVyeV9hZGRyKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc2l6ZV90IG9mZnNldCk7Cit1MTYgaXdsX2VlcHJvbV9xdWVyeTE2KGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc2l6ZV90IG9mZnNldCk7CiAKIGludCBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsY29yZV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2NvbnN0IHU4ICppd2xjb3JlX2VlcHJvbV9xdWVyeV9hZGRyKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc2l6ZV90IG9mZnNldCk7CiAKIGludCBpd2xfaW5pdF9jaGFubmVsX21hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfZnJlZV9jaGFubmVsX21hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0NjQyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKQEAgLTAsMCArMSwzOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKiBCU0QgTElDRU5TRQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZsb3cgSGFuZGxlciBEZWZpbml0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBJL08gYXJlYSBpcyBkaXJlY3RseSByZWFkL3dyaXRhYmxlIGJ5IGRyaXZlciAoZS5nLiBMaW51eCB1c2VzIHdyaXRlbCgpKQorICogQWRkcmVzc2VzIGFyZSBvZmZzZXRzIGZyb20gZGV2aWNlJ3MgUENJIGhhcmR3YXJlIGJhc2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBGSF9NRU1fTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgKDB4MTAwMCkKKyNkZWZpbmUgRkhfTUVNX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgICgweDFFRjApCisKKy8qKgorICogS2VlcC1XYXJtIChLVykgYnVmZmVyIGJhc2UgYWRkcmVzcy4KKyAqCisgKiBEcml2ZXIgbXVzdCBhbGxvY2F0ZSBhIDRLQnl0ZSBidWZmZXIgdGhhdCBpcyB1c2VkIGJ5IDQ5NjUgZm9yIGtlZXBpbmcgdGhlCisgKiBob3N0IERSQU0gcG93ZXJlZCBvbiAodmlhIGR1bW15IGFjY2Vzc2VzIHRvIERSQU0pIHRvIG1haW50YWluIGxvdy1sYXRlbmN5CisgKiBEUkFNIGFjY2VzcyB3aGVuIDQ5NjUgaXMgVHhpbmcgb3IgUnhpbmcuICBUaGUgZHVtbXkgYWNjZXNzZXMgcHJldmVudCBob3N0CisgKiBmcm9tIGdvaW5nIGludG8gYSBwb3dlci1zYXZpbmdzIG1vZGUgdGhhdCB3b3VsZCBjYXVzZSBoaWdoZXIgRFJBTSBsYXRlbmN5LAorICogYW5kIHBvc3NpYmxlIGRhdGEgb3Zlci91bmRlci1ydW5zLCBiZWZvcmUgYWxsIFR4L1J4IGlzIGNvbXBsZXRlLgorICoKKyAqIERyaXZlciBsb2FkcyBGSF9LV19NRU1fQUREUl9SRUcgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcyAoYml0cyAzNTo0KQorICogb2YgdGhlIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSA0SyBhbGlnbmVkLiAgT25jZSB0aGlzIGlzIHNldCB1cCwgdGhlIDQ5NjUKKyAqIGF1dG9tYXRpY2FsbHkgaW52b2tlcyBrZWVwLXdhcm0gYWNjZXNzZXMgd2hlbiBub3JtYWwgYWNjZXNzZXMgbWlnaHQgbm90CisgKiBiZSBzdWZmaWNpZW50IHRvIG1haW50YWluIGZhc3QgRFJBTSByZXNwb25zZS4KKyAqCisgKiBCaXQgZmllbGRzOgorICogIDMxLTA6ICBLZWVwLXdhcm0gYnVmZmVyIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBbMzU6NF0sIG11c3QgYmUgNEsgYWxpZ25lZAorICovCisjZGVmaW5lIEZIX0tXX01FTV9BRERSX1JFRwkJICAgICAoRkhfTUVNX0xPV0VSX0JPVU5EICsgMHg5N0MpCisKKworLyoqCisgKiBURkQgQ2lyY3VsYXIgQnVmZmVycyBCYXNlIChDQkJDKSBhZGRyZXNzZXMKKyAqCisgKiA0OTY1IGhhcyAxNiBiYXNlIHBvaW50ZXIgcmVnaXN0ZXJzLCBvbmUgZm9yIGVhY2ggb2YgMTYgaG9zdC1EUkFNLXJlc2lkZW50CisgKiBjaXJjdWxhciBidWZmZXJzIChDQnMvcXVldWVzKSBjb250YWluaW5nIFRyYW5zbWl0IEZyYW1lIERlc2NyaXB0b3JzIChURkRzKQorICogKHNlZSBzdHJ1Y3QgaXdsX3RmZF9mcmFtZSkuICBUaGVzZSAxNiBwb2ludGVyIHJlZ2lzdGVycyBhcmUgb2Zmc2V0IGJ5IDB4MDQKKyAqIGJ5dGVzIGZyb20gb25lIGFub3RoZXIuICBFYWNoIFRGRCBjaXJjdWxhciBidWZmZXIgaW4gRFJBTSBtdXN0IGJlIDI1Ni1ieXRlCisgKiBhbGlnbmVkIChhZGRyZXNzIGJpdHMgMC03IG11c3QgYmUgMCkuCisgKgorICogQml0IGZpZWxkcyBpbiBlYWNoIHBvaW50ZXIgcmVnaXN0ZXI6CisgKiAgMjctMDogVEZEIENCIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBbMzU6OF0sIG11c3QgYmUgMjU2LWJ5dGUgYWxpZ25lZAorICovCisjZGVmaW5lIEZIX01FTV9DQkJDX0xPV0VSX0JPVU5EICAgICAgICAgIChGSF9NRU1fTE9XRVJfQk9VTkQgKyAweDlEMCkKKyNkZWZpbmUgRkhfTUVNX0NCQkNfVVBQRVJfQk9VTkQgICAgICAgICAgKEZIX01FTV9MT1dFUl9CT1VORCArIDB4QTEwKQorCisvKiBGaW5kIFRGRCBDQiBiYXNlIHBvaW50ZXIgZm9yIGdpdmVuIHF1ZXVlIChyYW5nZSAwLTE1KS4gKi8KKyNkZWZpbmUgRkhfTUVNX0NCQkNfUVVFVUUoeCkgIChGSF9NRU1fQ0JCQ19MT1dFUl9CT1VORCArICh4KSAqIDB4NCkKKworCisvKioKKyAqIFJ4IFNSQU0gQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVycyAoUlNDU1IpCisgKgorICogVGhlc2UgcmVnaXN0ZXJzIHByb3ZpZGUgaGFuZHNoYWtlIGJldHdlZW4gZHJpdmVyIGFuZCA0OTY1IGZvciB0aGUgUnggcXVldWUKKyAqICh0aGlzIHF1ZXVlIGhhbmRsZXMgKmFsbCogY29tbWFuZCByZXNwb25zZXMsIG5vdGlmaWNhdGlvbnMsIFJ4IGRhdGEsIGV0Yy4KKyAqIHNlbnQgZnJvbSA0OTY1IHVDb2RlIHRvIGhvc3QgZHJpdmVyKS4gIFVubGlrZSBUeCwgdGhlcmUgaXMgb25seSBvbmUgUngKKyAqIHF1ZXVlLCBhbmQgb25seSBvbmUgUnggRE1BL0ZJRk8gY2hhbm5lbC4gIEFsc28gdW5saWtlIFR4LCB3aGljaCBjYW4KKyAqIGNvbmNhdGVuYXRlIHVwIHRvIDIwIERSQU0gYnVmZmVycyB0byBmb3JtIGEgVHggZnJhbWUsIGVhY2ggUmVjZWl2ZSBCdWZmZXIKKyAqIERlc2NyaXB0b3IgKFJCRCkgcG9pbnRzIHRvIG9ubHkgb25lIFJ4IEJ1ZmZlciAoUkIpOyB0aGVyZSBpcyBhIDE6MQorICogbWFwcGluZyBiZXR3ZWVuIFJCRHMgYW5kIFJCcy4KKyAqCisgKiBEcml2ZXIgbXVzdCBhbGxvY2F0ZSBob3N0IERSQU0gbWVtb3J5IGZvciB0aGUgZm9sbG93aW5nLCBhbmQgc2V0IHRoZQorICogcGh5c2ljYWwgYWRkcmVzcyBvZiBlYWNoIGludG8gNDk2NSByZWdpc3RlcnM6CisgKgorICogMSkgIFJlY2VpdmUgQnVmZmVyIERlc2NyaXB0b3IgKFJCRCkgY2lyY3VsYXIgYnVmZmVyIChDQiksIHR5cGljYWxseSB3aXRoIDI1NgorICogICAgIGVudHJpZXMgKGFsdGhvdWdoIGFueSBwb3dlciBvZiAyLCB1cCB0byA0MDk2LCBpcyBzZWxlY3RhYmxlIGJ5IGRyaXZlcikuCisgKiAgICAgRWFjaCBlbnRyeSAoMSBkd29yZCkgcG9pbnRzIHRvIGEgcmVjZWl2ZSBidWZmZXIgKFJCKSBvZiBjb25zaXN0ZW50IHNpemUKKyAqICAgICAodHlwaWNhbGx5IDRLLCBhbHRob3VnaCA4SyBvciAxNksgYXJlIGFsc28gc2VsZWN0YWJsZSBieSBkcml2ZXIpLgorICogICAgIERyaXZlciBzZXRzIHVwIFJCIHNpemUgYW5kIG51bWJlciBvZiBSQkRzIGluIHRoZSBDQiB2aWEgUnggY29uZmlnCisgKiAgICAgcmVnaXN0ZXIgRkhfTUVNX1JDU1JfQ0hOTDBfQ09ORklHX1JFRy4KKyAqCisgKiAgICAgQml0IGZpZWxkcyB3aXRoaW4gb25lIFJCRDoKKyAqICAgICAyNy0wOiAgUmVjZWl2ZSBCdWZmZXIgcGh5c2ljYWwgYWRkcmVzcyBiaXRzIFszNTo4XSwgMjU2LWJ5dGUgYWxpZ25lZAorICoKKyAqICAgICBEcml2ZXIgc2V0cyBwaHlzaWNhbCBhZGRyZXNzIFszNTo4XSBvZiBiYXNlIG9mIFJCRCBjaXJjdWxhciBidWZmZXIKKyAqICAgICBpbnRvIEZIX1JTQ1NSX0NITkwwX1JCRENCX0JBU0VfUkVHIFsyNzowXS4KKyAqCisgKiAyKSAgUnggc3RhdHVzIGJ1ZmZlciwgOCBieXRlcywgaW4gd2hpY2ggNDk2NSBpbmRpY2F0ZXMgd2hpY2ggUnggQnVmZmVycworICogICAgIChSQnMpIGhhdmUgYmVlbiBmaWxsZWQsIHZpYSBhICJ3cml0ZSBwb2ludGVyIiwgYWN0dWFsbHkgdGhlIGluZGV4IG9mCisgKiAgICAgdGhlIFJCJ3MgY29ycmVzcG9uZGluZyBSQkQgd2l0aGluIHRoZSBjaXJjdWxhciBidWZmZXIuICBEcml2ZXIgc2V0cworICogICAgIHBoeXNpY2FsIGFkZHJlc3MgWzM1OjRdIGludG8gRkhfUlNDU1JfQ0hOTDBfU1RUU19XUFRSX1JFRyBbMzE6MF0uCisgKgorICogICAgIEJpdCBmaWVsZHMgaW4gbG93ZXIgZHdvcmQgb2YgUnggc3RhdHVzIGJ1ZmZlciAodXBwZXIgZHdvcmQgbm90IHVzZWQKKyAqICAgICBieSBkcml2ZXI7IHNlZSBzdHJ1Y3QgaXdsNDk2NV9zaGFyZWQsIHZhbDApOgorICogICAgIDMxLTEyOiAgTm90IHVzZWQgYnkgZHJpdmVyCisgKiAgICAgMTEtIDA6ICBJbmRleCBvZiBsYXN0IGZpbGxlZCBSeCBidWZmZXIgZGVzY3JpcHRvcgorICogICAgICAgICAgICAgKDQ5NjUgd3JpdGVzLCBkcml2ZXIgcmVhZHMgdGhpcyB2YWx1ZSkKKyAqCisgKiBBcyB0aGUgZHJpdmVyIHByZXBhcmVzIFJlY2VpdmUgQnVmZmVycyAoUkJzKSBmb3IgNDk2NSB0byBmaWxsLCBkcml2ZXIgbXVzdAorICogZW50ZXIgcG9pbnRlcnMgdG8gdGhlc2UgUkJzIGludG8gY29udGlndW91cyBSQkQgY2lyY3VsYXIgYnVmZmVyIGVudHJpZXMsCisgKiBhbmQgdXBkYXRlIHRoZSA0OTY1J3MgIndyaXRlIiBpbmRleCByZWdpc3RlciwKKyAqIEZIX1JTQ1NSX0NITkwwX1JCRENCX1dQVFJfUkVHLgorICoKKyAqIFRoaXMgIndyaXRlIiBpbmRleCBjb3JyZXNwb25kcyB0byB0aGUgKm5leHQqIFJCRCB0aGF0IHRoZSBkcml2ZXIgd2lsbCBtYWtlCisgKiBhdmFpbGFibGUsIGkuZS4gb25lIFJCRCBwYXN0IHRoZSB0YWlsIG9mIHRoZSByZWFkeS10by1maWxsIFJCRHMgd2l0aGluCisgKiB0aGUgY2lyY3VsYXIgYnVmZmVyLiAgVGhpcyB2YWx1ZSBzaG91bGQgaW5pdGlhbGx5IGJlIDAgKGJlZm9yZSBwcmVwYXJpbmcgYW55CisgKiBSQnMpLCBzaG91bGQgYmUgOCBhZnRlciBwcmVwYXJpbmcgdGhlIGZpcnN0IDggUkJzIChmb3IgZXhhbXBsZSksIGFuZCBtdXN0CisgKiB3cmFwIGJhY2sgdG8gMCBhdCB0aGUgZW5kIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgKGJ1dCBkb24ndCB3cmFwIGJlZm9yZQorICogInJlYWQiIGluZGV4IGhhcyBhZHZhbmNlZCBwYXN0IDEhICBTZWUgYmVsb3cpLgorICogTk9URTogIDQ5NjUgRVhQRUNUUyBUSEUgV1JJVEUgSU5ERVggVE8gQkUgSU5DUkVNRU5URUQgSU4gTVVMVElQTEVTIE9GIDguCisgKgorICogQXMgdGhlIDQ5NjUgZmlsbHMgUkJzIChyZWZlcmVuY2VkIGZyb20gY29udGlndW91cyBSQkRzIHdpdGhpbiB0aGUgY2lyY3VsYXIKKyAqIGJ1ZmZlciksIGl0IHVwZGF0ZXMgdGhlIFJ4IHN0YXR1cyBidWZmZXIgaW4gaG9zdCBEUkFNLCAyKSBkZXNjcmliZWQgYWJvdmUsCisgKiB0byB0ZWxsIHRoZSBkcml2ZXIgdGhlIGluZGV4IG9mIHRoZSBsYXRlc3QgZmlsbGVkIFJCRC4gIFRoZSBkcml2ZXIgbXVzdAorICogcmVhZCB0aGlzICJyZWFkIiBpbmRleCBmcm9tIERSQU0gYWZ0ZXIgcmVjZWl2aW5nIGFuIFJ4IGludGVycnVwdCBmcm9tIDQ5NjUuCisgKgorICogVGhlIGRyaXZlciBtdXN0IGFsc28gaW50ZXJuYWxseSBrZWVwIHRyYWNrIG9mIGEgdGhpcmQgaW5kZXgsIHdoaWNoIGlzIHRoZQorICogbmV4dCBSQkQgdG8gcHJvY2Vzcy4gIFdoZW4gcmVjZWl2aW5nIGFuIFJ4IGludGVycnVwdCwgZHJpdmVyIHNob3VsZCBwcm9jZXNzCisgKiBhbGwgZmlsbGVkIGJ1dCB1bnByb2Nlc3NlZCBSQnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgUkIKKyAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlICJyZWFkIiBpbmRleC4gIEZvciBleGFtcGxlLCBpZiAicmVhZCIgaW5kZXggYmVjb21lcyAiMSIsCisgKiBkcml2ZXIgbWF5IHByb2Nlc3MgdGhlIFJCIHBvaW50ZWQgdG8gYnkgUkJEIDAuICBEZXBlbmRpbmcgb24gdm9sdW1lIG9mCisgKiB0cmFmZmljLCB0aGVyZSBtYXkgYmUgbWFueSBSQnMgdG8gcHJvY2Vzcy4KKyAqCisgKiBJZiByZWFkIGluZGV4ID09IHdyaXRlIGluZGV4LCA0OTY1IHRoaW5rcyB0aGVyZSBpcyBubyByb29tIHRvIHB1dCBuZXcgZGF0YS4KKyAqIER1ZSB0byB0aGlzLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsbGVkIFJCcyBpcyAyNTUsIGluc3RlYWQgb2YgMjU2LiAgVG8KKyAqIGJlIHNhZmUsIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIGEgZ2FwIG9mIGF0IGxlYXN0IDIgUkJEcyBiZXR3ZWVuICJ3cml0ZSIKKyAqIGFuZCAicmVhZCIgaW5kZXhlczsgdGhhdCBpcywgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgdGhhbiAyNTQKKyAqIGJ1ZmZlcnMgd2FpdGluZyB0byBiZSBmaWxsZWQuCisgKi8KKyNkZWZpbmUgRkhfTUVNX1JTQ1NSX0xPV0VSX0JPVU5ECShGSF9NRU1fTE9XRVJfQk9VTkQgKyAweEJDMCkKKyNkZWZpbmUgRkhfTUVNX1JTQ1NSX1VQUEVSX0JPVU5ECShGSF9NRU1fTE9XRVJfQk9VTkQgKyAweEMwMCkKKyNkZWZpbmUgRkhfTUVNX1JTQ1NSX0NITkwwCQkoRkhfTUVNX1JTQ1NSX0xPV0VSX0JPVU5EKQorCisvKioKKyAqIFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiA4LWJ5dGUgUnggU3RhdHVzIGJ1ZmZlci4KKyAqIEJpdCBmaWVsZHM6CisgKiAgMzEtMDogUnggc3RhdHVzIGJ1ZmZlciBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgWzM1OjRdLCBtdXN0IDE2LWJ5dGUgYWxpZ25lZC4KKyAqLworI2RlZmluZSBGSF9SU0NTUl9DSE5MMF9TVFRTX1dQVFJfUkVHCShGSF9NRU1fUlNDU1JfQ0hOTDApCisKKy8qKgorICogUGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIFJ4IEJ1ZmZlciBEZXNjcmlwdG9yIENpcmN1bGFyIEJ1ZmZlci4KKyAqIEJpdCBmaWVsZHM6CisgKiAgMjctMDogIFJCRCBDRCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgWzM1OjhdLCBtdXN0IGJlIDI1Ni1ieXRlIGFsaWduZWQuCisgKi8KKyNkZWZpbmUgRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfQkFTRV9SRUcJKEZIX01FTV9SU0NTUl9DSE5MMCArIDB4MDA0KQorCisvKioKKyAqIFJ4IHdyaXRlIHBvaW50ZXIgKGluZGV4LCByZWFsbHkhKS4KKyAqIEJpdCBmaWVsZHM6CisgKiAgMTEtMDogIEluZGV4IG9mIGRyaXZlcidzIG1vc3QgcmVjZW50IHByZXBhcmVkLXRvLWJlLWZpbGxlZCBSQkQsICsgMS4KKyAqICAgICAgICAgTk9URTogIEZvciAyNTYtZW50cnkgY2lyY3VsYXIgYnVmZmVyLCB1c2Ugb25seSBiaXRzIFs3OjBdLgorICovCisjZGVmaW5lIEZIX1JTQ1NSX0NITkwwX1JCRENCX1dQVFJfUkVHCShGSF9NRU1fUlNDU1JfQ0hOTDAgKyAweDAwOCkKKyNkZWZpbmUgRkhfUlNDU1JfQ0hOTDBfV1BUUiAgICAgICAgKEZIX1JTQ1NSX0NITkwwX1JCRENCX1dQVFJfUkVHKQorCisKKy8qKgorICogUnggQ29uZmlnL1N0YXR1cyBSZWdpc3RlcnMgKFJDU1IpCisgKiBSeCBDb25maWcgUmVnIGZvciBjaGFubmVsIDAgKG9ubHkgY2hhbm5lbCB1c2VkKQorICoKKyAqIERyaXZlciBtdXN0IGluaXRpYWxpemUgRkhfTUVNX1JDU1JfQ0hOTDBfQ09ORklHX1JFRyBhcyBmb2xsb3dzIGZvcgorICogbm9ybWFsIG9wZXJhdGlvbiAoc2VlIGJpdCBmaWVsZHMpLgorICoKKyAqIENsZWFyaW5nIEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcgdG8gMCB0dXJucyBvZmYgUnggRE1BLgorICogRHJpdmVyIHNob3VsZCBwb2xsIEZIX01FTV9SU1NSX1JYX1NUQVRVU19SRUcJZm9yCisgKiBGSF9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUgKGJpdCAyNCkgYmVmb3JlIGNvbnRpbnVpbmcuCisgKgorICogQml0IGZpZWxkczoKKyAqIDMxLTMwOiBSeCBETUEgY2hhbm5lbCBlbmFibGU6ICcwMCcgb2ZmL3BhdXNlLCAnMDEnIHBhdXNlIGF0IGVuZCBvZiBmcmFtZSwKKyAqICAgICAgICAnMTAnIG9wZXJhdGUgbm9ybWFsbHkKKyAqIDI5LTI0OiByZXNlcnZlZAorICogMjMtMjA6ICMgUkJEcyBpbiBjaXJjdWxhciBidWZmZXIgPSAyXnZhbHVlOyB1c2UgIjgiIGZvciAyNTYgUkJEcyAobm9ybWFsKSwKKyAqICAgICAgICBtaW4gIjUiIGZvciAzMiBSQkRzLCBtYXggIjEyIiBmb3IgNDA5NiBSQkRzLgorICogMTktMTg6IHJlc2VydmVkCisgKiAxNy0xNjogc2l6ZSBvZiBlYWNoIHJlY2VpdmUgYnVmZmVyOyAnMDAnIDRLIChub3JtYWwpLCAnMDEnIDhLLAorICogICAgICAgICcxMCcgMTJLLCAnMTEnIDE2Sy4KKyAqIDE1LTE0OiByZXNlcnZlZAorICogMTMtMTI6IElSUSBkZXN0aW5hdGlvbjsgJzAwJyBub25lLCAnMDEnIGhvc3QgZHJpdmVyIChub3JtYWwgb3BlcmF0aW9uKQorICogMTEtIDQ6IHRpbWVvdXQgZm9yIGNsb3NpbmcgUnggYnVmZmVyIGFuZCBpbnRlcnJ1cHRpbmcgaG9zdCAodW5pdHMgMzIgdXNlYykKKyAqICAgICAgICB0eXBpY2FsIHZhbHVlIDB4MTAgKGFib3V0IDEvMiBtc2VjKQorICogIDMtIDA6IHJlc2VydmVkCisgKi8KKyNkZWZpbmUgRkhfTUVNX1JDU1JfTE9XRVJfQk9VTkQgICAgICAoRkhfTUVNX0xPV0VSX0JPVU5EICsgMHhDMDApCisjZGVmaW5lIEZIX01FTV9SQ1NSX1VQUEVSX0JPVU5EICAgICAgKEZIX01FTV9MT1dFUl9CT1VORCArIDB4Q0MwKQorI2RlZmluZSBGSF9NRU1fUkNTUl9DSE5MMCAgICAgICAgICAgIChGSF9NRU1fUkNTUl9MT1dFUl9CT1VORCkKKworI2RlZmluZSBGSF9NRU1fUkNTUl9DSE5MMF9DT05GSUdfUkVHCShGSF9NRU1fUkNTUl9DSE5MMCkKKworI2RlZmluZSBGSF9SQ1NSX0NITkwwX1JYX0NPTkZJR19SQl9USU1FT1VUX01TSyAoMHgwMDAwMEZGMCkgLyogYml0cyA0LTExICovCisjZGVmaW5lIEZIX1JDU1JfQ0hOTDBfUlhfQ09ORklHX0lSUV9ERVNUX01TSyAgICgweDAwMDAxMDAwKSAvKiBiaXRzIDEyICovCisjZGVmaW5lIEZIX1JDU1JfQ0hOTDBfUlhfQ09ORklHX1NJTkdMRV9GUkFNRV9NU0sgKDB4MDAwMDgwMDApIC8qIGJpdCAxNSAqLworI2RlZmluZSBGSF9SQ1NSX0NITkwwX1JYX0NPTkZJR19SQl9TSVpFX01TSyAgICgweDAwMDMwMDAwKSAvKiBiaXRzIDE2LTE3ICovCisjZGVmaW5lIEZIX1JDU1JfQ0hOTDBfUlhfQ09ORklHX1JCREJDX1NJWkVfTVNLICgweDAwRjAwMDAwKSAvKiBiaXRzIDIwLTIzICovCisjZGVmaW5lIEZIX1JDU1JfQ0hOTDBfUlhfQ09ORklHX0RNQV9DSE5MX0VOX01TSyAoMHhDMDAwMDAwMCkgLyogYml0cyAzMC0zMSovCisKKyNkZWZpbmUgRkhfUkNTUl9SWF9DT05GSUdfUkJEQ0JfU0laRV9CSVRTSElGVAkoMjApCisjZGVmaW5lIEZIX1JDU1JfUlhfQ09ORklHX1JFR19JUlFfUkJUSF9CSVRTSElGVAkoNCkKKyNkZWZpbmUgUlhfUkJfVElNRU9VVAkoMHgxMCkKKworI2RlZmluZSBGSF9SQ1NSX1JYX0NPTkZJR19DSE5MX0VOX1BBVVNFX1ZBTCAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBGSF9SQ1NSX1JYX0NPTkZJR19DSE5MX0VOX1BBVVNFX0VPRl9WQUwgICAgICgweDQwMDAwMDAwKQorI2RlZmluZSBGSF9SQ1NSX1JYX0NPTkZJR19DSE5MX0VOX0VOQUJMRV9WQUwgICAgICAgICgweDgwMDAwMDAwKQorCisjZGVmaW5lIEZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkJfU0laRV80SyAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SQl9TSVpFXzhLICAgICgweDAwMDEwMDAwKQorI2RlZmluZSBGSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JCX1NJWkVfMTJLICAgKDB4MDAwMjAwMDApCisjZGVmaW5lIEZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkJfU0laRV8xNksgICAoMHgwMDAzMDAwMCkKKworI2RlZmluZSBGSF9SQ1NSX0NITkwwX1JYX0NPTkZJR19JUlFfREVTVF9OT19JTlRfVkFMICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBGSF9SQ1NSX0NITkwwX1JYX0NPTkZJR19JUlFfREVTVF9JTlRfSE9TVF9WQUwgICAgICgweDAwMDAxMDAwKQorCisKKy8qKgorICogUnggU2hhcmVkIFN0YXR1cyBSZWdpc3RlcnMgKFJTU1IpCisgKgorICogQWZ0ZXIgc3RvcHBpbmcgUnggRE1BIGNoYW5uZWwgKHdyaXRpbmcgMCB0bworICogRkhfTUVNX1JDU1JfQ0hOTDBfQ09ORklHX1JFRyksIGRyaXZlciBtdXN0IHBvbGwKKyAqIEZIX01FTV9SU1NSX1JYX1NUQVRVU19SRUcgdW50aWwgUnggY2hhbm5lbCBpcyBpZGxlLgorICoKKyAqIEJpdCBmaWVsZHM6CisgKiAgMjQ6ICAxID0gQ2hhbm5lbCAwIGlzIGlkbGUKKyAqCisgKiBGSF9NRU1fUlNTUl9TSEFSRURfQ1RSTF9SRUcgYW5kIEZIX01FTV9SU1NSX1JYX0VOQUJMRV9FUlJfSVJRMkRSVgorICogY29udGFpbiBkZWZhdWx0IHZhbHVlcyB0aGF0IHNob3VsZCBub3QgYmUgYWx0ZXJlZCBieSB0aGUgZHJpdmVyLgorICovCisjZGVmaW5lIEZIX01FTV9SU1NSX0xPV0VSX0JPVU5EICAgICAgICAgICAoRkhfTUVNX0xPV0VSX0JPVU5EICsgMHhDNDApCisjZGVmaW5lIEZIX01FTV9SU1NSX1VQUEVSX0JPVU5EICAgICAgICAgICAoRkhfTUVNX0xPV0VSX0JPVU5EICsgMHhEMDApCisKKyNkZWZpbmUgRkhfTUVNX1JTU1JfU0hBUkVEX0NUUkxfUkVHICAgICAgIChGSF9NRU1fUlNTUl9MT1dFUl9CT1VORCkKKyNkZWZpbmUgRkhfTUVNX1JTU1JfUlhfU1RBVFVTX1JFRwkoRkhfTUVNX1JTU1JfTE9XRVJfQk9VTkQgKyAweDAwNCkKKyNkZWZpbmUgRkhfTUVNX1JTU1JfUlhfRU5BQkxFX0VSUl9JUlEyRFJWXAorCQkJCQkoRkhfTUVNX1JTU1JfTE9XRVJfQk9VTkQgKyAweDAwOCkKKworI2RlZmluZSBGSF9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUJKDB4MDEwMDAwMDApCisKKworLyoqCisgKiBUcmFuc21pdCBETUEgQ2hhbm5lbCBDb250cm9sL1N0YXR1cyBSZWdpc3RlcnMgKFRDU1IpCisgKgorICogNDk2NSBoYXMgb25lIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZm9yIGVhY2ggb2YgOCBUeCBETUEvRklGTyBjaGFubmVscworICogc3VwcG9ydGVkIGluIGhhcmR3YXJlIChkb24ndCBjb25mdXNlIHRoZXNlIHdpdGggdGhlIDE2IFR4IHF1ZXVlcyBpbiBEUkFNLAorICogd2hpY2ggZmVlZCB0aGUgRE1BL0ZJRk8gY2hhbm5lbHMpOyBjb25maWcgcmVncyBhcmUgc2VwYXJhdGVkIGJ5IDB4MjAgYnl0ZXMuCisgKgorICogVG8gdXNlIGEgVHggRE1BIGNoYW5uZWwsIGRyaXZlciBtdXN0IGluaXRpYWxpemUgaXRzCisgKiBGSF9UQ1NSX0NITkxfVFhfQ09ORklHX1JFRyhjaG5sKSB3aXRoOgorICoKKyAqIEZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFIHwKKyAqIEZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMCisgKgorICogQWxsIG90aGVyIGJpdHMgc2hvdWxkIGJlIDAuCisgKgorICogQml0IGZpZWxkczoKKyAqIDMxLTMwOiBUeCBETUEgY2hhbm5lbCBlbmFibGU6ICcwMCcgb2ZmL3BhdXNlLCAnMDEnIHBhdXNlIGF0IGVuZCBvZiBmcmFtZSwKKyAqICAgICAgICAnMTAnIG9wZXJhdGUgbm9ybWFsbHkKKyAqIDI5LSA0OiBSZXNlcnZlZCwgc2V0IHRvICIwIgorICogICAgIDM6IEVuYWJsZSBpbnRlcm5hbCBETUEgcmVxdWVzdHMgKDEsIG5vcm1hbCBvcGVyYXRpb24pLCBkaXNhYmxlICgwKQorICogIDItIDA6IFJlc2VydmVkLCBzZXQgdG8gIjAiCisgKi8KKyNkZWZpbmUgRkhfVENTUl9MT1dFUl9CT1VORCAgKEZIX01FTV9MT1dFUl9CT1VORCArIDB4RDAwKQorI2RlZmluZSBGSF9UQ1NSX1VQUEVSX0JPVU5EICAoRkhfTUVNX0xPV0VSX0JPVU5EICsgMHhFNjApCisKKy8qIEZpbmQgQ29udHJvbC9TdGF0dXMgcmVnIGZvciBnaXZlbiBUeCBETUEvRklGTyBjaGFubmVsICovCisjZGVmaW5lIEZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKF9jaG5sKSBcCisJKEZIX1RDU1JfTE9XRVJfQk9VTkQgKyAweDIwICogX2NobmwpCisKKyNkZWZpbmUgRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0RJU0FCTEVfVkFMICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBGSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DUkVESVRfRU5BQkxFX1ZBTCAgICAgKDB4MDAwMDAwMDgpCisKKyNkZWZpbmUgRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9QQVVTRSAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBGSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DSE5MX1BBVVNFX0VPRiAgICAgICAgKDB4NDAwMDAwMDApCisjZGVmaW5lIEZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFICAgICAgICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSBGSF9UQ1NSX0NITkxfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICg3KQorCisjZGVmaW5lIEZIX1RDU1JfQ0hOTF9UWF9CVUZfU1RTX1JFR19WQUxfVEZEQl9FTVBUWSAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgRkhfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHX1ZBTF9URkRCX1dBSVQgICAgICAgICAgICgweDAwMDAyMDAwKQorI2RlZmluZSBGSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfVkFMX1RGREJfVkFMSUQgICAgICAgICAgKDB4MDAwMDAwMDMpCisKKyNkZWZpbmUgRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfTk9JTlQgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBGSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfSE9TVF9FTkRURkQgICAgICAgICAgKDB4MDAxMDAwMDApCisjZGVmaW5lIEZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9IT1NUX0lGVEZEICAgICAgICAgICAoMHgwMDIwMDAwMCkKKworI2RlZmluZSBGSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfUE9TX1RCX05VTSAgICAgICgyMCkKKyNkZWZpbmUgRkhfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHX1BPU19UQl9JRFggICAgICAoMTIpCisjZGVmaW5lIEZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKF9jaG5sKSBcCisJKEZIX1RDU1JfTE9XRVJfQk9VTkQgKyAweDIwICogX2NobmwpCisjZGVmaW5lIEZIX1RDU1JfQ0hOTF9UWF9DUkVESVRfUkVHKF9jaG5sKSBcCisJICAoRkhfVENTUl9MT1dFUl9CT1VORCArIDB4MjAgKiBfY2hubCArIDB4NCkKKyNkZWZpbmUgRkhfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHKF9jaG5sKSBcCisJIChGSF9UQ1NSX0xPV0VSX0JPVU5EICsgMHgyMCAqIF9jaG5sICsgMHg4KQorCisvKioKKyAqIFR4IFNoYXJlZCBTdGF0dXMgUmVnaXN0ZXJzIChUU1NSKQorICoKKyAqIEFmdGVyIHN0b3BwaW5nIFR4IERNQSBjaGFubmVsICh3cml0aW5nIDAgdG8KKyAqIEZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKGNobmwpKSwgZHJpdmVyIG11c3QgcG9sbAorICogRkhfVFNTUl9UWF9TVEFUVVNfUkVHIHVudGlsIHNlbGVjdGVkIFR4IGNoYW5uZWwgaXMgaWRsZQorICogKGNoYW5uZWwncyBidWZmZXJzIGVtcHR5IHwgbm8gcGVuZGluZyByZXF1ZXN0cykuCisgKgorICogQml0IGZpZWxkczoKKyAqIDMxLTI0OiAgMSA9IENoYW5uZWwgYnVmZmVycyBlbXB0eSAoY2hhbm5lbCA3OjApCisgKiAyMy0xNjogIDEgPSBObyBwZW5kaW5nIHJlcXVlc3RzIChjaGFubmVsIDc6MCkKKyAqLworI2RlZmluZSBGSF9UU1NSX0xPV0VSX0JPVU5ECQkoRkhfTUVNX0xPV0VSX0JPVU5EICsgMHhFQTApCisjZGVmaW5lIEZIX1RTU1JfVVBQRVJfQk9VTkQJCShGSF9NRU1fTE9XRVJfQk9VTkQgKyAweEVDMCkKKworI2RlZmluZSBGSF9UU1NSX1RYX1NUQVRVU19SRUcJKEZIX1RTU1JfTE9XRVJfQk9VTkQgKyAweDAxMCkKKworI2RlZmluZSBGSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX0JVRlNfRU1QVFkoX2NobmwpICgoMSA8PCAoX2NobmwpKSA8PCAyNCkKKyNkZWZpbmUgRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9OT19QRU5EX1JFUShfY2hubCkgKCgxIDw8IChfY2hubCkpIDw8IDE2KQorCisjZGVmaW5lIEZIX1RTU1JfVFhfU1RBVFVTX1JFR19NU0tfQ0hOTF9JRExFKF9jaG5sKSBcCisJKEZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfQlVGU19FTVBUWShfY2hubCkgfCBcCisJRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9OT19QRU5EX1JFUShfY2hubCkpCisKKworCisjZGVmaW5lIEZIX1JFR1NfTE9XRVJfQk9VTkQJCSAgICAgKDB4MTAwMCkKKyNkZWZpbmUgRkhfUkVHU19VUFBFUl9CT1VORAkJICAgICAoMHgyMDAwKQorCisvKiBUeCBzZXJ2aWNlIGNoYW5uZWxzICovCisjZGVmaW5lIEZIX1NSVkNfQ0hOTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkpCisjZGVmaW5lIEZIX1NSVkNfTE9XRVJfQk9VTkQgICAgICAgICAgKEZIX1JFR1NfTE9XRVJfQk9VTkQgKyAweDlDOCkKKyNkZWZpbmUgRkhfU1JWQ19VUFBFUl9CT1VORCAgICAgICAgICAoRkhfUkVHU19MT1dFUl9CT1VORCArIDB4OUQwKQorI2RlZmluZSBGSF9TUlZDX0NITkxfU1JBTV9BRERSX1JFRyhfY2hubCkgXAorCQkoRkhfU1JWQ19MT1dFUl9CT1VORCArICgoX2NobmwpIC0gOSkgKiAweDQpCisKKy8qIFRGREIgIEFyZWEgLSBURkRzIGJ1ZmZlciB0YWJsZSAqLworI2RlZmluZSBGSF9NRU1fVEZESUJfRFJBTV9BRERSX0xTQl9NU0sgICAgICAoMHhGRkZGRkZGRikKKyNkZWZpbmUgRkhfVEZESUJfTE9XRVJfQk9VTkQgICAgICAgKEZIX1JFR1NfTE9XRVJfQk9VTkQgKyAweDkwMCkKKyNkZWZpbmUgRkhfVEZESUJfVVBQRVJfQk9VTkQgICAgICAgKEZIX1JFR1NfTE9XRVJfQk9VTkQgKyAweDk1OCkKKyNkZWZpbmUgRkhfVEZESUJfQ1RSTDBfUkVHKF9jaG5sKSAgKEZIX1RGRElCX0xPV0VSX0JPVU5EICsgMHg4ICogKF9jaG5sKSkKKyNkZWZpbmUgRkhfVEZESUJfQ1RSTDFfUkVHKF9jaG5sKSAgKEZIX1RGRElCX0xPV0VSX0JPVU5EICsgMHg4ICogKF9jaG5sKSArIDB4NCkKKworLyogVENTUjogdHhfY29uZmlnIHJlZ2lzdGVyIHZhbHVlcyAqLworI2RlZmluZSBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSwkoMHgwMDAwM0ZGRikJLyogYml0cyAwLTEzICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwppbmRleCBmZGIyN2YxLi44ZmE5OTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCi0jaW5jbHVkZSAiaXdsLTQ5NjUuaCIgLyogRklYTUU6IHJlbW92ZSAqLworI2luY2x1ZGUgIml3bC1kZXYuaCIgLyogRklYTUU6IHJlbW92ZSAqLwogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgpAQCAtNTYsNiArNTYsNyBAQAogCQlJV0xfQ01EKFJFUExZX1JBVEVfU0NBTEUpOwogCQlJV0xfQ01EKFJFUExZX0xFRFNfQ01EKTsKIAkJSVdMX0NNRChSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01EKTsKKwkJSVdMX0NNRChDT0VYX1BSSU9SSVRZX1RBQkxFX0NNRCk7CiAJCUlXTF9DTUQoUkFEQVJfTk9USUZJQ0FUSU9OKTsKIAkJSVdMX0NNRChSRVBMWV9RVUlFVF9DTUQpOwogCQlJV0xfQ01EKFJFUExZX0NIQU5ORUxfU1dJVENIKTsKQEAgLTg5LDYgKzkwLDEwIEBACiAJCUlXTF9DTUQoUkVQTFlfUlhfTVBEVV9DTUQpOwogCQlJV0xfQ01EKFJFUExZX1JYKTsKIAkJSVdMX0NNRChSRVBMWV9DT01QUkVTU0VEX0JBKTsKKwkJSVdMX0NNRChDQUxJQlJBVElPTl9DRkdfQ01EKTsKKwkJSVdMX0NNRChDQUxJQlJBVElPTl9SRVNfTk9USUZJQ0FUSU9OKTsKKwkJSVdMX0NNRChDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT04pOworCQlJV0xfQ01EKFJFUExZX1RYX1BPV0VSX0RCTV9DTUQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAiVU5LTk9XTiI7CiAKQEAgLTEwMSw3ICsxMDYsNyBAQAogc3RhdGljIGludCBpd2xfZ2VuZXJpY19jbWRfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gTlVMTDsKIAogCWlmICghc2tiKSB7CiAJCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJXMuXG4iLApAQCAtMTA5LDcgKzExNCw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCXBrdCA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKilza2ItPmRhdGE7CisJcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopc2tiLT5kYXRhOwogCWlmIChwa3QtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKQEAgLTEzOSw3ICsxNDQsNyBAQAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXJldCA9IHByaXYtPmNmZy0+b3BzLT51dGlscy0+ZW5xdWV1ZV9oY21kKHByaXYsIGNtZCk7CisJcmV0ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChyZXQgPCAwKSB7CiAJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCiAJCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLCByZXQpOwpAQCAtMTcwLDcgKzE3NSw3IEBACiAJaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikKIAkJY21kLT5tZXRhLnNvdXJjZSA9ICZjbWQtPm1ldGE7CiAKLQljbWRfaWR4ID0gcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5lbnF1ZXVlX2hjbWQocHJpdiwgY21kKTsKKwljbWRfaWR4ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChjbWRfaWR4IDwgMCkgewogCQlyZXQgPSBjbWRfaWR4OwogCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCmluZGV4IGE0NDM0NzIuLjQxZWVkNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKQEAgLTEzNiw4ICsxMzYsOCBAQAogCiAjZGVmaW5lIEtFTFZJTl9UT19DRUxTSVVTKHgpICgoeCktMjczKQogI2RlZmluZSBDRUxTSVVTX1RPX0tFTFZJTih4KSAoKHgpKzI3MykKKyNkZWZpbmUgSVdMX01BU0sobG8sIGhpKSAoKDEgPDwgKGhpKSkgfCAoKDEgPDwgKGhpKSkgLSAoMSA8PCAobG8pKSkpCiAKLSNkZWZpbmUgSUVFRTgwMjExX0NIQU5fV19SQURBUl9ERVRFQ1QgMHgwMDAwMDAxMAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqaWVlZTgwMjExX2dldF9od19jb25mKAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQpAQCAtMTQ1LDk2ICsxNDUsNiBAQAogCXJldHVybiAmaHctPmNvbmY7CiB9CiAKLSNkZWZpbmUgUU9TX0NPTlRST0xfTEVOIDIKLQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfbWFuYWdlbWVudCh1MTYgZmMpCi17Ci0JcmV0dXJuIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2NvbnRyb2wodTE2IGZjKQotewotCXJldHVybiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2RhdGEodTE2IGZjKQotewotCXJldHVybiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19iYWNrX3JlcXVlc3QodTE2IGZjKQotewotCXJldHVybiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9DVEwpICYmCi0JICAgICAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVRKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3BvbnNlKHUxNiBmYykKLXsKLQlyZXR1cm4gKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkgJiYKLQkgICAgICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19wcm9iZV9yZXF1ZXN0KHUxNiBmYykKLXsKLQlyZXR1cm4gKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkgJiYKLQkgICAgICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2JlYWNvbih1MTYgZmMpCi17Ci0JcmV0dXJuICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpICYmCi0JICAgICAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19hdGltKHUxNiBmYykKLXsKLQlyZXR1cm4gKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkgJiYKLQkgICAgICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQVRJTSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19hc3NvY19yZXF1ZXN0KHUxNiBmYykKLXsKLQlyZXR1cm4gKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkgJiYKLQkgICAgICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2Fzc29jX3Jlc3BvbnNlKHUxNiBmYykKLXsKLQlyZXR1cm4gKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkgJiYKLQkgICAgICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19hdXRoKHUxNiBmYykKLXsKLQlyZXR1cm4gKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkgJiYKLQkgICAgICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2RlYXV0aCh1MTYgZmMpCi17Ci0JcmV0dXJuICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpICYmCi0JICAgICAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19kaXNhc3NvYyh1MTYgZmMpCi17Ci0JcmV0dXJuICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpICYmCi0JICAgICAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19yZWFzc29jX3JlcXVlc3QodTE2IGZjKQotewotCXJldHVybiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9NR01UKSAmJgotCSAgICAgICAoKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3BvbnNlKHUxNiBmYykKLXsKLQlyZXR1cm4gKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkgJiYKLQkgICAgICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaXdsX2NoZWNrX2JpdHModW5zaWduZWQgbG9uZyBmaWVsZCwgdW5zaWduZWQgbG9uZyBtYXNrKQogewogCXJldHVybiAoKGZpZWxkICYgbWFzaykgPT0gbWFzaykgPyAxIDogMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKaW5kZXggMDNmZGY1Yi4uODk5ZDdhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKQEAgLTM5LDE5ICszOSwyNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCi0jaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKICNpbmNsdWRlICJpd2wtaW8uaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogCi0jZGVmaW5lIElXTF8xTUJfUkFURSAoMTI4ICogMTAyNCkKLSNkZWZpbmUgSVdMX0xFRF9USFJFU0hPTEQgKDE2KQotI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoMTApCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKK3N0YXRpYyBjb25zdCBjaGFyICpsZWRfdHlwZV9zdHJbXSA9IHsKKwlfX3N0cmluZ2lmeShJV0xfTEVEX1RSR19UWCksCisJX19zdHJpbmdpZnkoSVdMX0xFRF9UUkdfUlgpLAorCV9fc3RyaW5naWZ5KElXTF9MRURfVFJHX0FTU09DKSwKKwlfX3N0cmluZ2lmeShJV0xfTEVEX1RSR19SQURJTyksCisJTlVMTAorfTsKKyNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9ERUJVRyAqLworCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXUxNiB0cHQ7CiAJdTggb25fdGltZTsKLQl1OCBvZl90aW1lOworCXU4IG9mZl90aW1lOwogfSBibGlua190YmxbXSA9CiB7CiAJezMwMCwgMjUsIDI1fSwKQEAgLTYzLDI2ICs3MCwzMSBAQAogCXsxNSwgOTUsIDk1IH0sCiAJezEwLCAxMTAsIDExMH0sCiAJezUsIDEzMCwgMTMwfSwKLQl7MCwgMTY3LCAxNjd9CisJezAsIDE2NywgMTY3fSwKKy8qIFNPTElEX09OICovCisJey0xLCBJV0xfTEVEX1NPTElELCAwfQogfTsKIAotc3RhdGljIGludCBpd2xfbGVkX2NtZF9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bF9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKKyNkZWZpbmUgSVdMXzFNQl9SQVRFICgxMjggKiAxMDI0KQorI2RlZmluZSBJV0xfTEVEX1RIUkVTSE9MRCAoMTYpCisjZGVmaW5lIElXTF9NQVhfQkxJTktfVEJMIChBUlJBWV9TSVpFKGJsaW5rX3RibCkgLSAxKSAvKiBleGNsdWRlIFNPTElEX09OICovCisjZGVmaW5lIElXTF9TT0xJRF9CTElOS19JRFggKEFSUkFZX1NJWkUoYmxpbmtfdGJsKSAtIDEpCisKKy8qICBbMC0yNTZdIC0+IFswLi44XSBGSVhNRTogd2UgbmVlZCBbMC4uMTBdICovCitzdGF0aWMgaW5saW5lIGludCBpd2xfYnJpZ2h0bmVzc190b19pZHgoZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQogewotCXJldHVybiAxOworCXJldHVybiBmbHMoMHgwMDAwMDBGRiAmICh1MzIpYnJpZ2h0bmVzcyk7CiB9CiAKLQogLyogU2VuZCBsZWQgY29tbWFuZCAqLwotc3RhdGljIGludCBpd2xfc2VuZF9sZWRfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9sZWRfY21kICpsZWRfY21kKQorc3RhdGljIGludCBpd2xfc2VuZF9sZWRfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9sZWRfY21kICpsZWRfY21kKQogewogCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewogCQkuaWQgPSBSRVBMWV9MRURTX0NNRCwKLQkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9sZWRfY21kKSwKKwkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2xlZF9jbWQpLAogCQkuZGF0YSA9IGxlZF9jbWQsCiAJCS5tZXRhLmZsYWdzID0gQ01EX0FTWU5DLAotCQkubWV0YS51LmNhbGxiYWNrID0gaXdsX2xlZF9jbWRfY2FsbGJhY2sKKwkJLm1ldGEudS5jYWxsYmFjayA9IE5VTEwsCiAJfTsKIAl1MzIgcmVnOwogCkBAIC05MywzMyArMTA1LDIwIEBACiAJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAotCi0vKiBTZXQgbGVkIG9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9sZWRfb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQotewotCXN0cnVjdCBpd2w0OTY1X2xlZF9jbWQgbGVkX2NtZCA9IHsKLQkJLmlkID0gbGVkX2lkLAotCQkub24gPSBJV0xfTEVEX1NPTElELAotCQkub2ZmID0gMCwKLQkJLmludGVydmFsID0gSVdMX0RFRl9MRURfSU5UUlZMCi0JfTsKLQlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7Ci19Ci0KLS8qIFNldCBsZWQgb24gY29tbWFuZCAqLworLyogU2V0IGxlZCBwYXR0ZXJuIGNvbW1hbmQgKi8KIHN0YXRpYyBpbnQgaXdsNDk2NV9sZWRfcGF0dGVybihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQsCi0JCQkgICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQorCQkJICAgICAgIHVuc2lnbmVkIGludCBpZHgpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCi0JCS5vbiA9IGJyaWdodG5lc3MsCi0JCS5vZmYgPSBicmlnaHRuZXNzLAogCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKIAl9OwotCWlmIChicmlnaHRuZXNzID09IExFRF9GVUxMKSB7Ci0JCWxlZF9jbWQub24gPSBJV0xfTEVEX1NPTElEOwotCQlsZWRfY21kLm9mZiA9IDA7Ci0JfQorCisJQlVHX09OKGlkeCA+IElXTF9NQVhfQkxJTktfVEJMKTsKKworCWxlZF9jbWQub24gPSBibGlua190YmxbaWR4XS5vbl90aW1lOworCWxlZF9jbWQub2ZmID0gYmxpbmtfdGJsW2lkeF0ub2ZmX3RpbWU7CisKIAlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7CiB9CiAKQEAgLTEzMiwxMCArMTMxLDIyIEBACiB9CiAKICNpZiAwCisvKiBTZXQgbGVkIG9uIGNvbW1hbmQgKi8KK3N0YXRpYyBpbnQgaXdsNDk2NV9sZWRfb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQoreworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0geworCQkuaWQgPSBsZWRfaWQsCisJCS5vbiA9IElXTF9MRURfU09MSUQsCisJCS5vZmYgPSAwLAorCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKKwl9OworCXJldHVybiBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKK30KKwogLyogU2V0IGxlZCBvZmYgY29tbWFuZCAqLwogaW50IGl3bDQ5NjVfbGVkX29mZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCiAJCS5vbiA9IDAsCiAJCS5vZmYgPSAwLApAQCAtMTU1LDI1ICsxNjYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogU2V0IGxlZCBibGluayBjb21tYW5kICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfbGVkX25vdF9zb2xpZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQsCi0JCQkgICAgICAgdTggYnJpZ2h0bmVzcykKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9sZWRfY21kIGxlZF9jbWQgPSB7Ci0JCS5pZCA9IGxlZF9pZCwKLQkJLm9uID0gYnJpZ2h0bmVzcywKLQkJLm9mZiA9IGJyaWdodG5lc3MsCi0JCS5pbnRlcnZhbCA9IElXTF9ERUZfTEVEX0lOVFJWTAotCX07Ci0KLQlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7Ci19Ci0KLQogLyoKICAqIGJyaWdodG5lc3MgY2FsbCBiYWNrIGZ1bmN0aW9uIGZvciBUeC9SeCBMRUQKICAqLwotc3RhdGljIGludCBpd2w0OTY1X2xlZF9hc3NvY2lhdGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsX2xlZF9hc3NvY2lhdGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKIHsKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgfHwKIAkgICAgIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpCkBAIC0xODksMTYgKzE4NSwxOCBAQAogLyoKICAqIGJyaWdodG5lc3MgY2FsbCBiYWNrIGZvciBhc3NvY2lhdGlvbiBhbmQgcmFkaW8KICAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCitzdGF0aWMgdm9pZCBpd2xfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsNDk2NV9sZWQsIGxlZF9kZXYpOworCXN0cnVjdCBpd2xfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpd2xfbGVkLCBsZWRfZGV2KTsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAorCisJSVdMX0RFQlVHX0xFRCgiTGVkIHR5cGUgPSAlcyBicmlnaHRuZXNzID0gJWRcbiIsCisJCQlsZWRfdHlwZV9zdHJbbGVkLT50eXBlXSwgYnJpZ2h0bmVzcyk7CiAJc3dpdGNoIChicmlnaHRuZXNzKSB7CiAJY2FzZSBMRURfRlVMTDoKIAkJaWYgKGxlZC0+dHlwZSA9PSBJV0xfTEVEX1RSR19BU1NPQykKQEAgLTIxNSw4ICsyMTMsMTAgQEAKIAkJCWxlZC0+bGVkX29mZihwcml2LCBJV0xfTEVEX0xJTkspOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlpZiAobGVkLT5sZWRfcGF0dGVybikKLQkJCWxlZC0+bGVkX3BhdHRlcm4ocHJpdiwgSVdMX0xFRF9MSU5LLCBicmlnaHRuZXNzKTsKKwkJaWYgKGxlZC0+bGVkX3BhdHRlcm4pIHsKKwkJCWludCBpZHggPSBpd2xfYnJpZ2h0bmVzc190b19pZHgoYnJpZ2h0bmVzcyk7CisJCQlsZWQtPmxlZF9wYXR0ZXJuKHByaXYsIElXTF9MRURfTElOSywgaWR4KTsKKwkJfQogCQlicmVhazsKIAl9CiB9CkBAIC0yMjYsOCArMjI2LDcgQEAKIC8qCiAgKiBSZWdpc3RlciBsZWQgY2xhc3Mgd2l0aCB0aGUgc3lzdGVtCiAgKi8KLXN0YXRpYyBpbnQgaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaXdsNDk2NV9sZWQgKmxlZCwKK3N0YXRpYyBpbnQgaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9sZWQgKmxlZCwKIAkJCQkgICBlbnVtIGxlZF90eXBlIHR5cGUsIHU4IHNldF9sZWQsCiAJCQkJICAgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdHJpZ2dlcikKIHsKQEAgLTIzNSw3ICsyMzQsNyBAQAogCWludCByZXQ7CiAKIAlsZWQtPmxlZF9kZXYubmFtZSA9IG5hbWU7Ci0JbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0gaXdsNDk2NV9sZWRfYnJpZ2h0bmVzc19zZXQ7CisJbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0gaXdsX2xlZF9icmlnaHRuZXNzX3NldDsKIAlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKIAogCWxlZC0+cHJpdiA9IHByaXY7CkBAIC0yNTksMzIgKzI1OCwyOCBAQAogLyoKICAqIGNhbGN1bGF0ZSBibGluayByYXRlIGFjY29yZGluZyB0byBsYXN0IDIgc2VjIFR4L1J4IGFjdGl2aXRpZXMKICAqLwotc3RhdGljIGlubGluZSB1OCBnZXRfYmxpbmtfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bF9nZXRfYmxpbmtfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IGk7Ci0JdTggYmxpbmtfcmF0ZTsKLQl1NjQgY3VycmVudF90cHQgPSBwcml2LT50eF9zdGF0c1syXS5ieXRlcyArIHByaXYtPnJ4X3N0YXRzWzJdLmJ5dGVzOworCXU2NCBjdXJyZW50X3RwdCA9IHByaXYtPnR4X3N0YXRzWzJdLmJ5dGVzOworCS8qIEZJWE1FOiArIHByaXYtPnJ4X3N0YXRzWzJdLmJ5dGVzOyAqLwogCXM2NCB0cHQgPSBjdXJyZW50X3RwdCAtIHByaXYtPmxlZF90cHQ7CiAKIAlpZiAodHB0IDwgMCkgLyogd3JhcHBhcm91bmQgKi8KIAkJdHB0ID0gLXRwdDsKIAorCUlXTF9ERUJVR19MRUQoInRwdCAlbGxkIGN1cnJlbnRfdHB0ICVsbGRcbiIsIHRwdCwgY3VycmVudF90cHQpOwogCXByaXYtPmxlZF90cHQgPSBjdXJyZW50X3RwdDsKIAotCWlmICh0cHQgPCBJV0xfTEVEX1RIUkVTSE9MRCkgeworCWlmICghcHJpdi0+YWxsb3dfYmxpbmtpbmcpCiAJCWkgPSBJV0xfTUFYX0JMSU5LX1RCTDsKLQl9IGVsc2UgeworCWVsc2UKIAkJZm9yIChpID0gMDsgaSA8IElXTF9NQVhfQkxJTktfVEJMOyBpKyspCiAJCQlpZiAodHB0ICA+IChibGlua190YmxbaV0udHB0ICogSVdMXzFNQl9SQVRFKSkKIAkJCQlicmVhazsKLQl9Ci0JLyogaWYgMCBmcmFtZSBpcyB0cmFuc2ZlcmVkICovCi0JaWYgKChpID09IElXTF9NQVhfQkxJTktfVEJMKSB8fCAhcHJpdi0+YWxsb3dfYmxpbmtpbmcpCi0JCWJsaW5rX3JhdGUgPSBJV0xfTEVEX1NPTElEOwotCWVsc2UKLQkJYmxpbmtfcmF0ZSA9IGJsaW5rX3RibFtpXS5vbl90aW1lOwogCi0JcmV0dXJuIGJsaW5rX3JhdGU7CisJSVdMX0RFQlVHX0xFRCgiTEVEIEJMSU5LIElEWD0lZCIsIGkpOworCXJldHVybiBpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19yZl9raWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKQEAgLTMwMCw3ICsyOTUsNyBAQAogICovCiB2b2lkIGl3bF9sZWRzX2JhY2tncm91bmQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXU4IGJsaW5rX3JhdGU7CisJdTggYmxpbmtfaWR4OwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7CiAJCXByaXYtPmxhc3RfYmxpbmtfdGltZSA9IDA7CkBAIC0zMTMsOSArMzA4LDEwIEBACiAKIAlpZiAoIXByaXYtPmFsbG93X2JsaW5raW5nKSB7CiAJCXByaXYtPmxhc3RfYmxpbmtfdGltZSA9IDA7Ci0JCWlmIChwcml2LT5sYXN0X2JsaW5rX3JhdGUgIT0gSVdMX0xFRF9TT0xJRCkgewotCQkJcHJpdi0+bGFzdF9ibGlua19yYXRlID0gSVdMX0xFRF9TT0xJRDsKLQkJCWl3bDQ5NjVfbGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7CisJCWlmIChwcml2LT5sYXN0X2JsaW5rX3JhdGUgIT0gSVdMX1NPTElEX0JMSU5LX0lEWCkgeworCQkJcHJpdi0+bGFzdF9ibGlua19yYXRlID0gSVdMX1NPTElEX0JMSU5LX0lEWDsKKwkJCWl3bDQ5NjVfbGVkX3BhdHRlcm4ocHJpdiwgSVdMX0xFRF9MSU5LLAorCQkJCQkgICAgSVdMX1NPTElEX0JMSU5LX0lEWCk7CiAJCX0KIAkJcmV0dXJuOwogCX0KQEAgLTMyNCwyMSArMzIwLDE0IEBACiAJCQltc2Vjc190b19qaWZmaWVzKDEwMDApKSkKIAkJcmV0dXJuOwogCi0JYmxpbmtfcmF0ZSA9IGdldF9ibGlua19yYXRlKHByaXYpOworCWJsaW5rX2lkeCA9IGl3bF9nZXRfYmxpbmtfcmF0ZShwcml2KTsKIAogCS8qIGNhbGwgb25seSBpZiBibGluayByYXRlIGNoYW5nZSAqLwotCWlmIChibGlua19yYXRlICE9IHByaXYtPmxhc3RfYmxpbmtfcmF0ZSkgewotCQlpZiAoYmxpbmtfcmF0ZSAhPSBJV0xfTEVEX1NPTElEKSB7Ci0JCQlwcml2LT5sYXN0X2JsaW5rX3RpbWUgPSBqaWZmaWVzICsKLQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7Ci0JCQlpd2w0OTY1X2xlZF9ub3Rfc29saWQocHJpdiwgSVdMX0xFRF9MSU5LLCBibGlua19yYXRlKTsKLQkJfSBlbHNlIHsKLQkJCXByaXYtPmxhc3RfYmxpbmtfdGltZSA9IDA7Ci0JCQlpd2w0OTY1X2xlZF9vbihwcml2LCBJV0xfTEVEX0xJTkspOwotCQl9Ci0JfQorCWlmIChibGlua19pZHggIT0gcHJpdi0+bGFzdF9ibGlua19yYXRlKQorCQlpd2w0OTY1X2xlZF9wYXR0ZXJuKHByaXYsIElXTF9MRURfTElOSywgYmxpbmtfaWR4KTsKIAotCXByaXYtPmxhc3RfYmxpbmtfcmF0ZSA9IGJsaW5rX3JhdGU7CisJcHJpdi0+bGFzdF9ibGlua190aW1lID0gamlmZmllczsKKwlwcml2LT5sYXN0X2JsaW5rX3JhdGUgPSBibGlua19pZHg7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9sZWRzX2JhY2tncm91bmQpOwogCkBAIC0zNjIsMTAgKzM1MSw4IEBACiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb2ZmID0gaXdsNDk2NV9sZWRfb2ZmX3JlZzsKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9wYXR0ZXJuID0gTlVMTDsKIAotCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LAotCQkJCSAgICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLAotCQkJCSAgIElXTF9MRURfVFJHX1JBRElPLCAxLAotCQkJCSAgIG5hbWUsIHRyaWdnZXIpOworCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXSwKKwkJCQkgICBJV0xfTEVEX1RSR19SQURJTywgMSwgbmFtZSwgdHJpZ2dlcik7CiAJaWYgKHJldCkKIAkJZ290byBleGl0X2ZhaWw7CiAKQEAgLTM3MywxMCArMzYwLDkgQEAKIAlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJpd2wtJXM6YXNzb2MiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAotCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LAotCQkJCSAgICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLAotCQkJCSAgIElXTF9MRURfVFJHX0FTU09DLCAwLAotCQkJCSAgIG5hbWUsIHRyaWdnZXIpOworCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwKKwkJCQkgICBJV0xfTEVEX1RSR19BU1NPQywgMCwgbmFtZSwgdHJpZ2dlcik7CisKIAkvKiBmb3IgYXNzb2MgYWx3YXlzIHR1cm4gbGVkIG9uICovCiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXS5sZWRfb24gPSBpd2w0OTY1X2xlZF9vbl9yZWc7CiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXS5sZWRfb2ZmID0gaXdsNDk2NV9sZWRfb25fcmVnOwpAQCAtMzg2LDMxICszNzIsMjYgQEAKIAkJZ290byBleGl0X2ZhaWw7CiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShwcml2LT5odyk7Ci0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiaXdsLSVzOlJYIiwKLQkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiaXdsLSVzOlJYIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCi0JcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsCi0JCQkJICAgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sCi0JCQkJICAgSVdMX0xFRF9UUkdfUlgsIDAsCi0JCQkJICAgbmFtZSwgdHJpZ2dlcik7CisJcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLAorCQkJCSAgIElXTF9MRURfVFJHX1JYLCAwLCBuYW1lLCB0cmlnZ2VyKTsKIAotCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX29uID0gaXdsNDk2NV9sZWRfYXNzb2NpYXRlZDsKLQlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLmxlZF9vZmYgPSBpd2w0OTY1X2xlZF9hc3NvY2lhdGVkOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX29uID0gaXdsX2xlZF9hc3NvY2lhdGVkOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX29mZiA9IGl3bF9sZWRfYXNzb2NpYXRlZDsKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLmxlZF9wYXR0ZXJuID0gaXdsNDk2NV9sZWRfcGF0dGVybjsKIAogCWlmIChyZXQpCiAJCWdvdG8gZXhpdF9mYWlsOwogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUocHJpdi0+aHcpOwotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIml3bC0lczpUWCIsCi0JCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwotCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LAotCQkJCSAgICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLAotCQkJCSAgIElXTF9MRURfVFJHX1RYLCAwLAotCQkJCSAgIG5hbWUsIHRyaWdnZXIpOwotCXByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubGVkX29uID0gaXdsNDk2NV9sZWRfYXNzb2NpYXRlZDsKLQlwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLmxlZF9vZmYgPSBpd2w0OTY1X2xlZF9hc3NvY2lhdGVkOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIml3bC0lczpUWCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLAorCQkJCSAgIElXTF9MRURfVFJHX1RYLCAwLCBuYW1lLCB0cmlnZ2VyKTsKKworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubGVkX29uID0gaXdsX2xlZF9hc3NvY2lhdGVkOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubGVkX29mZiA9IGl3bF9sZWRfYXNzb2NpYXRlZDsKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLmxlZF9wYXR0ZXJuID0gaXdsNDk2NV9sZWRfcGF0dGVybjsKIAogCWlmIChyZXQpCkBAIC00MjUsNyArNDA2LDcgQEAKIEVYUE9SVF9TWU1CT0woaXdsX2xlZHNfcmVnaXN0ZXIpOwogCiAvKiB1bnJlZ2lzdGVyIGxlZCBjbGFzcyAqLwotc3RhdGljIHZvaWQgaXdsX2xlZHNfdW5yZWdpc3Rlcl9sZWQoc3RydWN0IGl3bDQ5NjVfbGVkICpsZWQsIHU4IHNldF9sZWQpCitzdGF0aWMgdm9pZCBpd2xfbGVkc191bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsX2xlZCAqbGVkLCB1OCBzZXRfbGVkKQogewogCWlmICghbGVkLT5yZWdpc3RlcmVkKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCmluZGV4IDViYjA0MTIuLjE5ODBhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCkBAIC00OSwxNCArNDksMTMgQEAKIH07CiAKIAotc3RydWN0IGl3bDQ5NjVfbGVkIHsKK3N0cnVjdCBpd2xfbGVkIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CiAJc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfZGV2OwogCiAJaW50ICgqbGVkX29uKSAoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKTsKIAlpbnQgKCpsZWRfb2ZmKSAoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKTsKLQlpbnQgKCpsZWRfcGF0dGVybikgKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCwKLQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpOworCWludCAoKmxlZF9wYXR0ZXJuKSAoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkLCB1bnNpZ25lZCBpbnQgaWR4KTsKIAogCWVudW0gbGVkX3R5cGUgdHlwZTsKIAl1bnNpZ25lZCBpbnQgcmVnaXN0ZXJlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNzE4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCkBAIC0wLDAgKzEsNDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKKyAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgorI2luY2x1ZGUgIml3bC1kZXYuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgorI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgorI2luY2x1ZGUgIml3bC1wb3dlci5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisKKy8qCisgKiBTZXR0aW5nIHBvd2VyIGxldmVsIGFsbG93IHRoZSBjYXJkIHRvIGdvIHRvIHNsZWVwIHdoZW4gbm90IGJ1c3kKKyAqIHRoZXJlIGFyZSB0aHJlZSBmYWN0b3IgdGhhdCBkZWNpZGUgdGhlIHBvd2VyIGxldmVsIHRvIGdvIHRvLCB0aGV5CisgKiBhcmUgbGlzdCBoZXJlIHdpdGggaXRzIHByaW9yaXR5CisgKiAgMS0gY3JpdGljYWxfcG93ZXJfc2V0dGluZyB0aGlzIHdpbGwgYmUgc2V0IGFjY29yZGluZyB0byBjYXJkIHRlbXBlcmF0dXJlLgorICogIDItIHN5c3RlbV9wb3dlcl9zZXR0aW5nIHRoaXMgd2lsbCBiZSBzZXQgYnkgc3lzdGVtIFBNIG1hbmFnZXIuCisgKiAgMy0gdXNlcl9wb3dlcl9zZXR0aW5nIHRoaXMgd2lsbCBiZSBzZXQgYnkgdXNlciBlaXRoZXIgYnkgd3JpdGluZyB0byBzeXMgb3IKKyAqICAJbWFjODAyMTEKKyAqCisgKiBpZiBzeXN0ZW1fcG93ZXJfc2V0dGluZyBhbmQgdXNlcl9wb3dlcl9zZXR0aW5nIGlzIHNldCB0byBhdXRvCisgKiB0aGUgcG93ZXIgbGV2ZWwgd2lsbCBiZSBkZWNpZGVkIGFjY29yZGluZyB0byBhc3NvY2lhdGlvbiBzdGF0dXMgYW5kIGJhdHRlcnkKKyAqIHN0YXR1cy4KKyAqCisgKi8KKworI2RlZmluZSBNU0VDX1RPX1VTRUMgMTAyNAorI2RlZmluZSBJV0xfUE9XRVJfUkFOR0VfMF9NQVggICgyKQorI2RlZmluZSBJV0xfUE9XRVJfUkFOR0VfMV9NQVggICgxMCkKKworCisjZGVmaW5lIE5PU0xQIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksIDAsIDAKKyNkZWZpbmUgU0xQIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLLCAwLCAwCisjZGVmaW5lIFNMUF9UT1VUKFQpIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKFQpICogTVNFQ19UT19VU0VDKQorI2RlZmluZSBTTFBfVkVDKFgwLCBYMSwgWDIsIFgzLCBYNCkge19fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDApLCBcCisJCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgxKSwgXAorCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMiksIFwKKwkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDMpLCBcCisJCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFg0KX0KKworI2RlZmluZSBJV0xfUE9XRVJfT05fQkFUVEVSWQkJSVdMX1BPV0VSX0lOREVYXzUKKyNkZWZpbmUgSVdMX1BPV0VSX09OX0FDX0RJU0FTU09DCUlXTF9QT1dFUl9NT0RFX0NBTQorI2RlZmluZSBJV0xfUE9XRVJfT05fQUNfQVNTT0MJCUlXTF9QT1dFUl9NT0RFX0NBTQorCisKKyNkZWZpbmUgSVdMX0NUX0tJTExfVEVNUEVSQVRVUkUJCTExMAorI2RlZmluZSBJV0xfTUlOX1BPV0VSX1RFTVBFUkFUVVJFCTEwMAorI2RlZmluZSBJV0xfUkVEVUNFRF9QT1dFUl9URU1QRVJBVFVSRQk5NQorCisvKiBkZWZhdWx0IHBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlcikgdGFibGUgdmFsdWVzICovCisvKiBmb3IgdGltICAwLTEwICovCitzdGF0aWMgc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkgcmFuZ2VfMFtJV0xfUE9XRVJfQUNdID0geworCXt7Tk9TTFAsIFNMUF9UT1VUKDApLCBTTFBfVE9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAorCXt7U0xQLCBTTFBfVE9VVCgyMDApLCBTTFBfVE9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDIsIDIsIDB4RkYpfSwgMH0sCisJe3tTTFAsIFNMUF9UT1VUKDIwMCksIFNMUF9UT1VUKDMwMCksIFNMUF9WRUMoMSwgMiwgMiwgMiwgMHhGRil9LCAwfSwKKwl7e1NMUCwgU0xQX1RPVVQoNTApLCBTTFBfVE9VVCgxMDApLCBTTFBfVkVDKDIsIDIsIDIsIDIsIDB4RkYpfSwgMH0sCisJe3tTTFAsIFNMUF9UT1VUKDUwKSwgU0xQX1RPVVQoMjUpLCBTTFBfVkVDKDIsIDIsIDQsIDQsIDB4RkYpfSwgMX0sCisJe3tTTFAsIFNMUF9UT1VUKDI1KSwgU0xQX1RPVVQoMjUpLCBTTFBfVkVDKDIsIDIsIDQsIDYsIDB4RkYpfSwgMn0KK307CisKKworLyogZm9yIHRpbSA9IDMtMTAgKi8KK3N0YXRpYyBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8xW0lXTF9QT1dFUl9BQ10gPSB7CisJe3tOT1NMUCwgU0xQX1RPVVQoMCksIFNMUF9UT1VUKDApLCBTTFBfVkVDKDAsIDAsIDAsIDAsIDApfSwgMH0sCisJe3tTTFAsIFNMUF9UT1VUKDIwMCksIFNMUF9UT1VUKDUwMCksIFNMUF9WRUMoMSwgMiwgMywgNCwgNCl9LCAwfSwKKwl7e1NMUCwgU0xQX1RPVVQoMjAwKSwgU0xQX1RPVVQoMzAwKSwgU0xQX1ZFQygxLCAyLCAzLCA0LCA3KX0sIDB9LAorCXt7U0xQLCBTTFBfVE9VVCg1MCksIFNMUF9UT1VUKDEwMCksIFNMUF9WRUMoMiwgNCwgNiwgNywgOSl9LCAwfSwKKwl7e1NMUCwgU0xQX1RPVVQoNTApLCBTTFBfVE9VVCgyNSksIFNMUF9WRUMoMiwgNCwgNiwgOSwgMTApfSwgMX0sCisJe3tTTFAsIFNMUF9UT1VUKDI1KSwgU0xQX1RPVVQoMjUpLCBTTFBfVkVDKDIsIDQsIDcsIDEwLCAxMCl9LCAyfQorfTsKKworLyogZm9yIHRpbSA+IDExICovCitzdGF0aWMgc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkgcmFuZ2VfMltJV0xfUE9XRVJfQUNdID0geworCXt7Tk9TTFAsIFNMUF9UT1VUKDApLCBTTFBfVE9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAorCXt7U0xQLCBTTFBfVE9VVCgyMDApLCBTTFBfVE9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDMsIDQsIDB4RkYpfSwgMH0sCisJe3tTTFAsIFNMUF9UT1VUKDIwMCksIFNMUF9UT1VUKDMwMCksIFNMUF9WRUMoMiwgNCwgNiwgNywgMHhGRil9LCAwfSwKKwl7e1NMUCwgU0xQX1RPVVQoNTApLCBTTFBfVE9VVCgxMDApLCBTTFBfVkVDKDIsIDcsIDksIDksIDB4RkYpfSwgMH0sCisJe3tTTFAsIFNMUF9UT1VUKDUwKSwgU0xQX1RPVVQoMjUpLCBTTFBfVkVDKDIsIDcsIDksIDksIDB4RkYpfSwgMH0sCisJe3tTTFAsIFNMUF9UT1VUKDI1KSwgU0xQX1RPVVQoMjUpLCBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMHhGRil9LCAwfQorfTsKKworLyogZGVjaWRlIHRoZSByaWdodCBwb3dlciBsZXZlbCBhY2NvcmRpbmcgdG8gYXNzb2NpYXRpb24gc3RhdHVzCisgKiBhbmQgYmF0dGVyeSBzdGF0dXMKKyAqLworc3RhdGljIHUxNiBpd2xfZ2V0X2F1dG9fcG93ZXJfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdTE2IG1vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKKworCXN3aXRjaCAocHJpdi0+cG93ZXJfZGF0YS51c2VyX3Bvd2VyX3NldHRpbmcpIHsKKwljYXNlIElXTF9QT1dFUl9BVVRPOgorCQkvKiBpZiBydW5uaW5nIG9uIGJhdHRlcnkgKi8KKwkJaWYgKHByaXYtPnBvd2VyX2RhdGEuaXNfYmF0dGVyeV9hY3RpdmUpCisJCQltb2RlID0gSVdMX1BPV0VSX09OX0JBVFRFUlk7CisJCWVsc2UgaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKQorCQkJbW9kZSA9IElXTF9QT1dFUl9PTl9BQ19BU1NPQzsKKwkJZWxzZQorCQkJbW9kZSA9IElXTF9QT1dFUl9PTl9BQ19ESVNBU1NPQzsKKwkJYnJlYWs7CisJY2FzZSBJV0xfUE9XRVJfQkFUVEVSWToKKwkJbW9kZSA9IElXTF9QT1dFUl9JTkRFWF8zOworCQlicmVhazsKKwljYXNlIElXTF9QT1dFUl9BQzoKKwkJbW9kZSA9IElXTF9QT1dFUl9NT0RFX0NBTTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBtb2RlOworfQorCisvKiBpbml0aWFsaXplIHRvIGRlZmF1bHQgKi8KK3N0YXRpYyBpbnQgaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMCwgaTsKKwlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7CisJaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkpICogSVdMX1BPV0VSX0FDOworCXUxNiBwY2lfcG07CisKKwlJV0xfREVCVUdfUE9XRVIoIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKKworCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKKworCW1lbXNldChwb3dfZGF0YSwgMCwgc2l6ZW9mKCpwb3dfZGF0YSkpOworCisJbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbMF0sICZyYW5nZV8wWzBdLCBzaXplKTsKKwltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMVswXSwgJnJhbmdlXzFbMF0sIHNpemUpOworCW1lbWNweSgmcG93X2RhdGEtPnB3cl9yYW5nZV8yWzBdLCAmcmFuZ2VfMlswXSwgc2l6ZSk7CisKKwlyZXQgPSBwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LAorCQkJCSAgUENJX0xJTktfQ1RSTCwgJnBjaV9wbSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gMDsKKwllbHNlIHsKKwkJc3RydWN0IGl3bDQ5NjVfcG93ZXJ0YWJsZV9jbWQgKmNtZDsKKworCQlJV0xfREVCVUdfUE9XRVIoImFkanVzdCBwb3dlciBjb21tYW5kIGZsYWdzXG4iKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX0FDOyBpKyspIHsKKwkJCWNtZCA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbaV0uY21kOworCisJCQlpZiAocGNpX3BtICYgMHgxKQorCQkJCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9QQ0lfUE1fTVNLOworCQkJZWxzZQorCQkJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogYWRqdXN0IHBvd2VyIGNvbW1hbmQgYWNjb3JkaW5nIHRvIGR0aW0gcGVyaW9kIGFuZCBwb3dlciBsZXZlbCovCitzdGF0aWMgaW50IGl3bF91cGRhdGVfcG93ZXJfY29tbWFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2w0OTY1X3Bvd2VydGFibGVfY21kICpjbWQsCisJCQkJICAgIHUxNiBtb2RlKQoreworCWludCByZXQgPSAwLCBpOworCXU4IHNraXA7CisJdTMyIG1heF9zbGVlcCA9IDA7CisJc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkgKnJhbmdlOworCXU4IHBlcmlvZCA9IDA7CisJc3RydWN0IGl3bF9wb3dlcl9tZ3IgKnBvd19kYXRhOworCisJaWYgKG1vZGUgPiBJV0xfUE9XRVJfSU5ERVhfNSkgeworCQlJV0xfREVCVUdfUE9XRVIoIkVycm9yIGludmFsaWQgcG93ZXIgbW9kZSBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKKworCWlmIChwb3dfZGF0YS0+ZHRpbV9wZXJpb2QgPD0gSVdMX1BPV0VSX1JBTkdFXzBfTUFYKQorCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbMF07CisJZWxzZSBpZiAocG93X2RhdGEtPmR0aW1fcGVyaW9kIDw9IElXTF9QT1dFUl9SQU5HRV8xX01BWCkKKwkJcmFuZ2UgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8xWzBdOworCWVsc2UKKwkJcmFuZ2UgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8yWzBdOworCisJcGVyaW9kID0gcG93X2RhdGEtPmR0aW1fcGVyaW9kOworCW1lbWNweShjbWQsICZyYW5nZVttb2RlXS5jbWQsIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9wb3dlcnRhYmxlX2NtZCkpOworCisJaWYgKHBlcmlvZCA9PSAwKSB7CisJCXBlcmlvZCA9IDE7CisJCXNraXAgPSAwOworCX0gZWxzZQorCQlza2lwID0gcmFuZ2VbbW9kZV0ubm9fZHRpbTsKKworCWlmIChza2lwID09IDApIHsKKwkJbWF4X3NsZWVwID0gcGVyaW9kOworCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKKwl9IGVsc2UgeworCQlfX2xlMzIgc2xwX2l0cnZsID0gY21kLT5zbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkUgLSAxXTsKKwkJbWF4X3NsZWVwID0gbGUzMl90b19jcHUoc2xwX2l0cnZsKTsKKwkJaWYgKG1heF9zbGVlcCA9PSAweEZGKQorCQkJbWF4X3NsZWVwID0gcGVyaW9kICogKHNraXAgKyAxKTsKKwkJZWxzZSBpZiAobWF4X3NsZWVwID4gIHBlcmlvZCkKKwkJCW1heF9zbGVlcCA9IChsZTMyX3RvX2NwdShzbHBfaXRydmwpIC8gcGVyaW9kKSAqIHBlcmlvZDsKKwkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspIHsKKwkJaWYgKGxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0pID4gbWF4X3NsZWVwKQorCQkJY21kLT5zbGVlcF9pbnRlcnZhbFtpXSA9IGNwdV90b19sZTMyKG1heF9zbGVlcCk7CisJfQorCisJSVdMX0RFQlVHX1BPV0VSKCJGbGFncyB2YWx1ZSA9IDB4JTA4WFxuIiwgY21kLT5mbGFncyk7CisJSVdMX0RFQlVHX1BPV0VSKCJUeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+dHhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKCJSeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKCJTbGVlcCBpbnRlcnZhbCB2ZWN0b3IgPSB7ICVkICwgJWQgLCAlZCAsICVkICwgJWQgfVxuIiwKKwkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMF0pLAorCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFsxXSksCisJCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzJdKSwKKwkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbM10pLAorCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFs0XSkpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogY2FsdWNhdXRlIHRoZSBmaW5hbCBwb3dlciBtb2RlIGluZGV4CisgKi8KK2ludCBpd2xfcG93ZXJfdXBkYXRlX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCByZWZyZXNoKQoreworCXN0cnVjdCBpd2xfcG93ZXJfbWdyICpzZXR0aW5nID0gJihwcml2LT5wb3dlcl9kYXRhKTsKKwlpbnQgcmV0ID0gMDsKKwl1MTYgdW5pbml0aWFsaXplZF92YXIoZmluYWxfbW9kZSk7CisKKyAgICAgICAvKiBJZiBvbiBiYXR0ZXJ5LCBzZXQgdG8gMywKKwkqIGlmIHBsdWdnZWQgaW50byBBQyBwb3dlciwgc2V0IHRvIENBTSAoImNvbnRpbnVvdXNseSBhd2FyZSBtb2RlIiksCisJKiBlbHNlIHVzZXIgbGV2ZWwgKi8KKworCXN3aXRjaCAoc2V0dGluZy0+c3lzdGVtX3Bvd2VyX3NldHRpbmcpIHsKKwljYXNlIElXTF9QT1dFUl9BVVRPOgorCQlmaW5hbF9tb2RlID0gaXdsX2dldF9hdXRvX3Bvd2VyX21vZGUocHJpdik7CisJCWJyZWFrOworCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6CisJCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfSU5ERVhfMzsKKwkJYnJlYWs7CisJY2FzZSBJV0xfUE9XRVJfQUM6CisJCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZpbmFsX21vZGUgPSBzZXR0aW5nLT5zeXN0ZW1fcG93ZXJfc2V0dGluZzsKKwl9CisKKwlpZiAoc2V0dGluZy0+Y3JpdGljYWxfcG93ZXJfc2V0dGluZyA+IGZpbmFsX21vZGUpCisJCWZpbmFsX21vZGUgPSBzZXR0aW5nLT5jcml0aWNhbF9wb3dlcl9zZXR0aW5nOworCisJLyogZHJpdmVyIG9ubHkgc3VwcG9ydCBDQU0gZm9yIG5vbiBTVEEgbmV0d29yayAqLworCWlmIChwcml2LT5pd19tb2RlICE9IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkKKwkJZmluYWxfbW9kZSA9IElXTF9QT1dFUl9NT0RFX0NBTTsKKworCWlmICghaXdsX2lzX3Jma2lsbChwcml2KSAmJiAhc2V0dGluZy0+cG93ZXJfZGlzYWJsZWQgJiYKKwkgICAgKChzZXR0aW5nLT5wb3dlcl9tb2RlICE9IGZpbmFsX21vZGUpIHx8IHJlZnJlc2gpKSB7CisJCXN0cnVjdCBpd2w0OTY1X3Bvd2VydGFibGVfY21kIGNtZDsKKworCQlpZiAoZmluYWxfbW9kZSAhPSBJV0xfUE9XRVJfTU9ERV9DQU0pCisJCQlzZXRfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOworCisJCWl3bF91cGRhdGVfcG93ZXJfY29tbWFuZChwcml2LCAmY21kLCBmaW5hbF9tb2RlKTsKKwkJY21kLmtlZXBfYWxpdmVfYmVhY29ucyA9IDA7CisKKwkJaWYgKGZpbmFsX21vZGUgPT0gSVdMX1BPV0VSX0lOREVYXzUpCisJCQljbWQuZmxhZ3MgfD0gSVdMX1BPV0VSX0ZBU1RfUEQ7CisKKwkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9wb3dlcikKKwkJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9wb3dlcihwcml2LCAmY21kKTsKKworCQlpZiAoZmluYWxfbW9kZSA9PSBJV0xfUE9XRVJfTU9ERV9DQU0pCisJCQljbGVhcl9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7CisJCWVsc2UKKwkJCXNldF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7CisKKwkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncykKKwkJCXByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncyhwcml2KTsKKworCQlpZiAoIXJldCkKKwkJCXNldHRpbmctPnBvd2VyX21vZGUgPSBmaW5hbF9tb2RlOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9wb3dlcl91cGRhdGVfbW9kZSk7CisKKy8qIEFsbG93IG90aGVyIGl3bCBjb2RlIHRvIGRpc2FibGUvZW5hYmxlIHBvd2VyIG1hbmFnZW1lbnQgYWN0aXZlCisgKiB0aGlzIHdpbGwgYmUgdXNlZnVsbCBmb3IgcmF0ZSBzY2FsZSB0byBkaXNhYmxlIFBNIGR1cmluZyBoZWF2eQorICogVHgvUnggYWN0aXZpdGllcworICovCitpbnQgaXdsX3Bvd2VyX2Rpc2FibGVfbWFuYWdlbWVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdTE2IHByZXZfbW9kZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcml2LT5wb3dlcl9kYXRhLnBvd2VyX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVCVVNZOworCisJcHJldl9tb2RlID0gcHJpdi0+cG93ZXJfZGF0YS51c2VyX3Bvd2VyX3NldHRpbmc7CisJcHJpdi0+cG93ZXJfZGF0YS51c2VyX3Bvd2VyX3NldHRpbmcgPSBJV0xfUE9XRVJfTU9ERV9DQU07CisJcmV0ID0gaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIDApOworCXByaXYtPnBvd2VyX2RhdGEucG93ZXJfZGlzYWJsZWQgPSAxOworCXByaXYtPnBvd2VyX2RhdGEudXNlcl9wb3dlcl9zZXR0aW5nID0gcHJldl9tb2RlOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3Bvd2VyX2Rpc2FibGVfbWFuYWdlbWVudCk7CisKKy8qIEFsbG93IG90aGVyIGl3bCBjb2RlIHRvIGRpc2FibGUvZW5hYmxlIHBvd2VyIG1hbmFnZW1lbnQgYWN0aXZlCisgKiB0aGlzIHdpbGwgYmUgdXNlZnVsbCBmb3IgcmF0ZSBzY2FsZSB0byBkaXNhYmxlIFBNIGR1cmluZyBoaWdodAorICogdmFsdW1lIGFjdGl2aXRpZXMKKyAqLworaW50IGl3bF9wb3dlcl9lbmFibGVfbWFuYWdlbWVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5wb3dlcl9kYXRhLnBvd2VyX2Rpc2FibGVkID0gMDsKKwlyZXQgPSBpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3Bvd2VyX2VuYWJsZV9tYW5hZ2VtZW50KTsKKworLyogc2V0IHVzZXJfcG93ZXJfc2V0dGluZyAqLworaW50IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IG1vZGUpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAobW9kZSA+IElXTF9QT1dFUl9MSU1JVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZyA9IG1vZGU7CisKKwlyZXQgPSBpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZSk7CisKKworLyogc2V0IHN5c3RlbV9wb3dlcl9zZXR0aW5nLiBUaGlzIHNob3VsZCBiZSBzZXQgYnkgb3ZlciBhbGwKKyAqIFBNIGFwcGxpY2F0aW9uLgorICovCitpbnQgaXdsX3Bvd2VyX3NldF9zeXN0ZW1fbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBtb2RlKQoreworCWludCByZXQgPSAwOworCisJaWYgKG1vZGUgPiBJV0xfUE9XRVJfTElNSVQpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+cG93ZXJfZGF0YS5zeXN0ZW1fcG93ZXJfc2V0dGluZyA9IG1vZGU7CisKKwlyZXQgPSBpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfc2V0X3N5c3RlbV9tb2RlKTsKKworLyogaW5pdGlsaXplIHRvIGRlZmF1bHQgKi8KK3ZvaWQgaXdsX3Bvd2VyX2luaXRpYWxpemUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCisJaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHByaXYpOworCXByaXYtPnBvd2VyX2RhdGEudXNlcl9wb3dlcl9zZXR0aW5nID0gSVdMX1BPV0VSX0FVVE87CisJcHJpdi0+cG93ZXJfZGF0YS5wb3dlcl9kaXNhYmxlZCA9IDA7CisJcHJpdi0+cG93ZXJfZGF0YS5zeXN0ZW1fcG93ZXJfc2V0dGluZyA9IElXTF9QT1dFUl9BVVRPOworCXByaXYtPnBvd2VyX2RhdGEuaXNfYmF0dGVyeV9hY3RpdmUgPSAwOworCXByaXYtPnBvd2VyX2RhdGEucG93ZXJfZGlzYWJsZWQgPSAwOworCXByaXYtPnBvd2VyX2RhdGEuY3JpdGljYWxfcG93ZXJfc2V0dGluZyA9IDA7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9wb3dlcl9pbml0aWFsaXplKTsKKworLyogc2V0IGNyaXRpY2FsX3Bvd2VyX3NldHRpbmcgYWNjb3JkaW5nIHRvIHRlbXBlcmF0dXJlIHZhbHVlICovCitpbnQgaXdsX3Bvd2VyX3RlbXBlcmF0dXJlX2NoYW5nZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisJdTE2IG5ld19jcml0aWNhbCA9IHByaXYtPnBvd2VyX2RhdGEuY3JpdGljYWxfcG93ZXJfc2V0dGluZzsKKwlzMzIgdGVtcGVyYXR1cmUgPSBLRUxWSU5fVE9fQ0VMU0lVUyhwcml2LT5sYXN0X3RlbXBlcmF0dXJlKTsKKworCWlmICh0ZW1wZXJhdHVyZSA+IElXTF9DVF9LSUxMX1RFTVBFUkFUVVJFKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICh0ZW1wZXJhdHVyZSA+IElXTF9NSU5fUE9XRVJfVEVNUEVSQVRVUkUpCisJCW5ld19jcml0aWNhbCA9IElXTF9QT1dFUl9JTkRFWF81OworCWVsc2UgaWYgKHRlbXBlcmF0dXJlID4gSVdMX1JFRFVDRURfUE9XRVJfVEVNUEVSQVRVUkUpCisJCW5ld19jcml0aWNhbCA9IElXTF9QT1dFUl9JTkRFWF8zOworCWVsc2UKKwkJbmV3X2NyaXRpY2FsID0gSVdMX1BPV0VSX01PREVfQ0FNOworCisJaWYgKG5ld19jcml0aWNhbCAhPSBwcml2LT5wb3dlcl9kYXRhLmNyaXRpY2FsX3Bvd2VyX3NldHRpbmcpCisJCXByaXYtPnBvd2VyX2RhdGEuY3JpdGljYWxfcG93ZXJfc2V0dGluZyA9IG5ld19jcml0aWNhbDsKKworCWlmIChwcml2LT5wb3dlcl9kYXRhLmNyaXRpY2FsX3Bvd2VyX3NldHRpbmcgPgorCQkJCXByaXYtPnBvd2VyX2RhdGEucG93ZXJfbW9kZSkKKwkJcmV0ID0gaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIDApOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3Bvd2VyX3RlbXBlcmF0dXJlX2NoYW5nZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDY2NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaApAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKKyAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19pd2xfcG93ZXJfc2V0dGluZ19oX18KKyNkZWZpbmUgX19pd2xfcG93ZXJfc2V0dGluZ19oX18KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgorCitzdHJ1Y3QgaXdsX3ByaXY7CisKKyNkZWZpbmUgSVdMX1BPV0VSX01PREVfQ0FNCTB4MDAgICAgLyogQ29udGludW91c2x5IEF3YXJlIE1vZGUsIGFsd2F5cyBvbiAqLworI2RlZmluZSBJV0xfUE9XRVJfSU5ERVhfMwkweDAzCisjZGVmaW5lIElXTF9QT1dFUl9JTkRFWF81CTB4MDUKKyNkZWZpbmUgSVdMX1BPV0VSX0FDCQkweDA2CisjZGVmaW5lIElXTF9QT1dFUl9CQVRURVJZCTB4MDcKKyNkZWZpbmUgSVdMX1BPV0VSX0FVVE8JCTB4MDgKKyNkZWZpbmUgSVdMX1BPV0VSX0xJTUlUCQkweDA4CisjZGVmaW5lIElXTF9QT1dFUl9NQVNLCQkweDBGCisjZGVmaW5lIElXTF9QT1dFUl9FTkFCTEVECTB4MTAKKworLyogUG93ZXIgbWFuYWdlbWVudCAobm90IFR4IHBvd2VyKSBzdHJ1Y3R1cmVzICovCisKK3N0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5IHsKKwlzdHJ1Y3QgaXdsNDk2NV9wb3dlcnRhYmxlX2NtZCBjbWQ7CisJdTggbm9fZHRpbTsKK307CisKK3N0cnVjdCBpd2xfcG93ZXJfbWdyIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkgcHdyX3JhbmdlXzBbSVdMX1BPV0VSX0FDXTsKKwlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMVtJV0xfUE9XRVJfQUNdOworCXN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5IHB3cl9yYW5nZV8yW0lXTF9QT1dFUl9BQ107CisJdTMyIGR0aW1fcGVyaW9kOworCS8qIGZpbmFsIHBvd2VyIGxldmVsIHRoYXQgdXNlZCB0byBjYWxjdWxhdGUgZmluYWwgcG93ZXIgY29tbWFuZCAqLworCXU4IHBvd2VyX21vZGU7CisJdTggdXNlcl9wb3dlcl9zZXR0aW5nOyAvKiBzZXQgYnkgdXNlciB0aHJvdWdoIG1hYzgwMjExIG9yIHN5c2ZzICovCisJdTggc3lzdGVtX3Bvd2VyX3NldHRpbmc7IC8qIHNldCBieSBrZXJuZWwgc3lhdGVtIHRvb2xzICovCisJdTggY3JpdGljYWxfcG93ZXJfc2V0dGluZzsgLyogc2V0IGlmIGRyaXZlciBvdmVyIGhlYXRlZCAqLworCXU4IGlzX2JhdHRlcnlfYWN0aXZlOyAvKiBEQy9BQyBwb3dlciAqLworCXU4IHBvd2VyX2Rpc2FibGVkOyAvKiBmbGFnIHRvIGRpc2FibGUgdXNpbmcgcG93ZXIgc2F2aW5nIGxldmVsICovCit9OworCitpbnQgaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggcmVmcmVzaCk7CitpbnQgaXdsX3Bvd2VyX2Rpc2FibGVfbWFuYWdlbWVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9wb3dlcl9lbmFibGVfbWFuYWdlbWVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IG1vZGUpOworaW50IGl3bF9wb3dlcl9zZXRfc3lzdGVtX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgbW9kZSk7Cit2b2lkIGl3bF9wb3dlcl9pbml0aWFsaXplKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX3Bvd2VyX3RlbXBlcmF0dXJlX2NoYW5nZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCisjZW5kaWYgIC8qIF9faXdsX3Bvd2VyX3NldHRpbmdfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKaW5kZXggYzljZjhlZWYuLjcwZDljNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKQEAgLTIzOSw0MCArMjM5LDMwNyBAQAogI2RlZmluZSBBTE1fU0NEX1NCWVBfTU9ERV8xX1JFRyAgICAgICAgICAgICAoQUxNX1NDRF9CQVNFICsgMHgwMkMpCiAjZGVmaW5lIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHICAgICAgICAgICAgIChBTE1fU0NEX0JBU0UgKyAweDAzMCkKIAotLyoKLSAqIDQ5NjUgVHggU2NoZWR1bGVyIHJlZ2lzdGVycy4KLSAqIERldGFpbHMgYXJlIGRvY3VtZW50ZWQgaW4gaXdsLTQ5NjUtaHcuaAorLyoqCisgKiBUeCBTY2hlZHVsZXIKKyAqCisgKiBUaGUgVHggU2NoZWR1bGVyIHNlbGVjdHMgdGhlIG5leHQgZnJhbWUgdG8gYmUgdHJhbnNtaXR0ZWQsIGNob3NpbmcgVEZEcworICogKFRyYW5zbWl0IEZyYW1lIERlc2NyaXB0b3JzKSBmcm9tIHVwIHRvIDE2IGNpcmN1bGFyIFR4IHF1ZXVlcyByZXNpZGVudCBpbgorICogaG9zdCBEUkFNLiAgSXQgc3RlZXJzIGVhY2ggZnJhbWUncyBUeCBjb21tYW5kICh3aGljaCBjb250YWlucyB0aGUgZnJhbWUKKyAqIGRhdGEpIGludG8gb25lIG9mIHVwIHRvIDcgcHJpb3JpdGl6ZWQgVHggRE1BIEZJRk8gY2hhbm5lbHMgd2l0aGluIHRoZQorICogZGV2aWNlLiAgQSBxdWV1ZSBtYXBzIHRvIG9ubHkgb25lIChzZWxlY3RhYmxlIGJ5IGRyaXZlcikgVHggRE1BIGNoYW5uZWwsCisgKiBidXQgb25lIERNQSBjaGFubmVsIG1heSB0YWtlIGlucHV0IGZyb20gc2V2ZXJhbCBxdWV1ZXMuCisgKgorICogVHggRE1BIGNoYW5uZWxzIGhhdmUgZGVkaWNhdGVkIHB1cnBvc2VzLiAgRm9yIDQ5NjUsIHRoZXkgYXJlIHVzZWQgYXMgZm9sbG93czoKKyAqCisgKiAwIC0tIEVEQ0EgQksgKGJhY2tncm91bmQpIGZyYW1lcywgbG93ZXN0IHByaW9yaXR5CisgKiAxIC0tIEVEQ0EgQkUgKGJlc3QgZWZmb3J0KSBmcmFtZXMsIG5vcm1hbCBwcmlvcml0eQorICogMiAtLSBFRENBIFZJICh2aWRlbykgZnJhbWVzLCBoaWdoZXIgcHJpb3JpdHkKKyAqIDMgLS0gRURDQSBWTyAodm9pY2UpIGFuZCBtYW5hZ2VtZW50IGZyYW1lcywgaGlnaGVzdCBwcmlvcml0eQorICogNCAtLSBDb21tYW5kcyAoZS5nLiBSWE9OLCBldGMuKQorICogNSAtLSBIQ0NBIHNob3J0IGZyYW1lcworICogNiAtLSBIQ0NBIGxvbmcgZnJhbWVzCisgKiA3IC0tIG5vdCB1c2VkIGJ5IGRyaXZlciAoZGV2aWNlLWludGVybmFsIG9ubHkpCisgKgorICogRHJpdmVyIHNob3VsZCBub3JtYWxseSBtYXAgcXVldWVzIDAtNiB0byBUeCBETUEvRklGTyBjaGFubmVscyAwLTYuCisgKiBJbiBhZGRpdGlvbiwgZHJpdmVyIGNhbiBtYXAgcXVldWVzIDctMTUgdG8gVHggRE1BL0ZJRk8gY2hhbm5lbHMgMC0zIHRvCisgKiBzdXBwb3J0IDExbiBhZ2dyZWdhdGlvbiB2aWEgRURDQSBETUEgY2hhbm5lbHMuCisgKgorICogVGhlIGRyaXZlciBzZXRzIHVwIGVhY2ggcXVldWUgdG8gd29yayBpbiBvbmUgb2YgdHdvIG1vZGVzOgorICoKKyAqIDEpICBTY2hlZHVsZXItQWNrLCBpbiB3aGljaCB0aGUgc2NoZWR1bGVyIGF1dG9tYXRpY2FsbHkgc3VwcG9ydHMgYQorICogICAgIGJsb2NrLWFjayAoQkEpIHdpbmRvdyBvZiB1cCB0byA2NCBURkRzLiAgSW4gdGhpcyBtb2RlLCBlYWNoIHF1ZXVlCisgKiAgICAgY29udGFpbnMgVEZEcyBmb3IgYSB1bmlxdWUgY29tYmluYXRpb24gb2YgUmVjaXBpZW50IEFkZHJlc3MgKFJBKQorICogICAgIGFuZCBUcmFmZmljIElkZW50aWZpZXIgKFRJRCksIHRoYXQgaXMsIHRyYWZmaWMgb2YgYSBnaXZlbgorICogICAgIFF1YWxpdHktT2YtU2VydmljZSAoUU9TKSBwcmlvcml0eSwgZGVzdGluZWQgZm9yIGEgc2luZ2xlIHN0YXRpb24uCisgKgorICogICAgIEluIHNjaGVkdWxlci1hY2sgbW9kZSwgdGhlIHNjaGVkdWxlciBrZWVwcyB0cmFjayBvZiB0aGUgVHggc3RhdHVzIG9mCisgKiAgICAgZWFjaCBmcmFtZSB3aXRoaW4gdGhlIEJBIHdpbmRvdywgaW5jbHVkaW5nIHdoZXRoZXIgaXQncyBiZWVuIHRyYW5zbWl0dGVkLAorICogICAgIGFuZCB3aGV0aGVyIGl0J3MgYmVlbiBhY2tub3dsZWRnZWQgYnkgdGhlIHJlY2VpdmluZyBzdGF0aW9uLiAgVGhlIGRldmljZQorICogICAgIGF1dG9tYXRpY2FsbHkgcHJvY2Vzc2VzIGJsb2NrLWFja3MgcmVjZWl2ZWQgZnJvbSB0aGUgcmVjZWl2aW5nIFNUQSwKKyAqICAgICBhbmQgcmVzY2hlZHVsZXMgdW4tYWNrZWQgZnJhbWVzIHRvIGJlIHJldHJhbnNtaXR0ZWQgKHN1Y2Nlc3NmdWwKKyAqICAgICBUeCBjb21wbGV0aW9uIG1heSBlbmQgdXAgYmVpbmcgb3V0LW9mLW9yZGVyKS4KKyAqCisgKiAgICAgVGhlIGRyaXZlciBtdXN0IG1haW50YWluIHRoZSBxdWV1ZSdzIEJ5dGUgQ291bnQgdGFibGUgaW4gaG9zdCBEUkFNCisgKiAgICAgKHN0cnVjdCBpd2w0OTY1X3NjaGVkX3F1ZXVlX2J5dGVfY250X3RibCkgZm9yIHRoaXMgbW9kZS4KKyAqICAgICBUaGlzIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudGF0aW9uLgorICoKKyAqIDIpICBGSUZPIChhLmsuYS4gbm9uLVNjaGVkdWxlci1BQ0spLCBpbiB3aGljaCBlYWNoIFRGRCBpcyBwcm9jZXNzZWQgaW4gb3JkZXIuCisgKiAgICAgVGhlIGRldmljZSBtYXkgYXV0b21hdGljYWxseSByZXRyeSBUeCwgYnV0IHdpbGwgcmV0cnkgb25seSBvbmUgZnJhbWUKKyAqICAgICBhdCBhIHRpbWUsIHVudGlsIHJlY2VpdmluZyBBQ0sgZnJvbSByZWNlaXZpbmcgc3RhdGlvbiwgb3IgcmVhY2hpbmcKKyAqICAgICByZXRyeSBsaW1pdCBhbmQgZ2l2aW5nIHVwLgorICoKKyAqICAgICBUaGUgY29tbWFuZCBxdWV1ZSAoIzQpIG11c3QgdXNlIHRoaXMgbW9kZSEKKyAqICAgICBUaGlzIG1vZGUgZG9lcyBub3QgcmVxdWlyZSB1c2Ugb2YgdGhlIEJ5dGUgQ291bnQgdGFibGUgaW4gaG9zdCBEUkFNLgorICoKKyAqIERyaXZlciBjb250cm9scyBzY2hlZHVsZXIgb3BlcmF0aW9uIHZpYSAzIG1lYW5zOgorICogMSkgIFNjaGVkdWxlciByZWdpc3RlcnMKKyAqIDIpICBTaGFyZWQgc2NoZWR1bGVyIGRhdGEgYmFzZSBpbiBpbnRlcm5hbCA0OTU2IFNSQU0KKyAqIDMpICBTaGFyZWQgZGF0YSBpbiBob3N0IERSQU0KKyAqCisgKiBJbml0aWFsaXphdGlvbjoKKyAqCisgKiBXaGVuIGxvYWRpbmcsIGRyaXZlciBzaG91bGQgYWxsb2NhdGUgbWVtb3J5IGZvcjoKKyAqIDEpICAxNiBURkQgY2lyY3VsYXIgYnVmZmVycywgZWFjaCB3aXRoIHNwYWNlIGZvciAodHlwaWNhbGx5KSAyNTYgVEZEcy4KKyAqIDIpICAxNiBCeXRlIENvdW50IGNpcmN1bGFyIGJ1ZmZlcnMgaW4gMTYgS0J5dGVzIGNvbnRpZ3VvdXMgbWVtb3J5CisgKiAgICAgKDEwMjQgYnl0ZXMgZm9yIGVhY2ggcXVldWUpLgorICoKKyAqIEFmdGVyIHJlY2VpdmluZyAiQWxpdmUiIHJlc3BvbnNlIGZyb20gdUNvZGUsIGRyaXZlciBtdXN0IGluaXRpYWxpemUKKyAqIHRoZSBzY2hlZHVsZXIgKGVzcGVjaWFsbHkgZm9yIHF1ZXVlICM0LCB0aGUgY29tbWFuZCBxdWV1ZSwgb3RoZXJ3aXNlCisgKiB0aGUgZHJpdmVyIGNhbid0IGlzc3VlIGNvbW1hbmRzISk6CiAgKi8KLSNkZWZpbmUgSVdMNDlfU0NEX0JBU0UJCShQUlBIX0JBU0UgKyAweGEwMmMwMCkKIAotI2RlZmluZSBJV0w0OV9TQ0RfU1JBTV9CQVNFX0FERFIgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweDApCi0jZGVmaW5lIElXTDQ5X1NDRF9FTVBUWV9CSVRTICAgICAgICAgICAgIChJV0w0OV9TQ0RfQkFTRSArIDB4NCkKLSNkZWZpbmUgSVdMNDlfU0NEX0RSQU1fQkFTRV9BRERSICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHgxMCkKLSNkZWZpbmUgSVdMNDlfU0NEX0FJVCAgICAgICAgICAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHgxOCkKLSNkZWZpbmUgSVdMNDlfU0NEX1RYRkFDVCAgICAgICAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHgxYykKLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1dSUFRSKHgpICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHgyNCArICh4KSAqIDQpCi0jZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9SRFBUUih4KSAgICAgICAgIChJV0w0OV9TQ0RfQkFTRSArIDB4NjQgKyAoeCkgKiA0KQotI2RlZmluZSBJV0w0OV9TQ0RfU0VUUVVFVUVOVU0gICAgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGE0KQotI2RlZmluZSBJV0w0OV9TQ0RfU0VUX1RYU1RBVF9UWEVEICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGE4KQotI2RlZmluZSBJV0w0OV9TQ0RfU0VUX1RYU1RBVF9ET05FICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGFjKQotI2RlZmluZSBJV0w0OV9TQ0RfU0VUX1RYU1RBVF9OT1RfU0NIRCAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGIwKQotI2RlZmluZSBJV0w0OV9TQ0RfREVDUkVBU0VfQ1JFRElUICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGI0KQotI2RlZmluZSBJV0w0OV9TQ0RfREVDUkVBU0VfU0NSRURJVCAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGI4KQotI2RlZmluZSBJV0w0OV9TQ0RfTE9BRF9DUkVESVQgICAgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGJjKQotI2RlZmluZSBJV0w0OV9TQ0RfTE9BRF9TQ1JFRElUICAgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGMwKQotI2RlZmluZSBJV0w0OV9TQ0RfQkFSICAgICAgICAgICAgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGM0KQotI2RlZmluZSBJV0w0OV9TQ0RfQkFSX0RXMCAgICAgICAgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGM4KQotI2RlZmluZSBJV0w0OV9TQ0RfQkFSX0RXMSAgICAgICAgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGNjKQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVDSEFJTl9TRUwgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGQwKQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFUllfUkVRICAgICAgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGQ4KQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFUllfUkVTICAgICAgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGRjKQotI2RlZmluZSBJV0w0OV9TQ0RfUEVORElOR19GUkFNRVMgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGUwKQotI2RlZmluZSBJV0w0OV9TQ0RfSU5URVJSVVBUX01BU0sgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGU0KQotI2RlZmluZSBJV0w0OV9TQ0RfSU5URVJSVVBUX1RIUkVTSE9MRCAgICAoSVdMNDlfU0NEX0JBU0UgKyAweGU4KQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFUllfTUlOX0ZSQU1FX1NJWkUgICAoSVdMNDlfU0NEX0JBU0UgKyAweDEwMCkKLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUQVRVU19CSVRTKHgpICAgKElXTDQ5X1NDRF9CQVNFICsgMHgxMDQgKyAoeCkgKiA0KQorLyoqCisgKiBNYXggVHggd2luZG93IHNpemUgaXMgdGhlIG1heCBudW1iZXIgb2YgY29udGlndW91cyBURkRzIHRoYXQgdGhlIHNjaGVkdWxlcgorICogY2FuIGtlZXAgdHJhY2sgb2YgYXQgb25lIHRpbWUgd2hlbiBjcmVhdGluZyBibG9jay1hY2sgY2hhaW5zIG9mIGZyYW1lcy4KKyAqIE5vdGUgdGhhdCAiNjQiIG1hdGNoZXMgdGhlIG51bWJlciBvZiBhY2sgYml0cyBpbiBhIGJsb2NrLWFjayBwYWNrZXQuCisgKiBEcml2ZXIgc2hvdWxkIHVzZSBTQ0RfV0lOX1NJWkUgYW5kIFNDRF9GUkFNRV9MSU1JVCB2YWx1ZXMgdG8gaW5pdGlhbGl6ZQorICogSVdMNDlfU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKHgpIHZhbHVlcy4KKyAqLworI2RlZmluZSBTQ0RfV0lOX1NJWkUJCQkJNjQKKyNkZWZpbmUgU0NEX0ZSQU1FX0xJTUlUCQkJCTY0CiAKLS8qIFNQIFNDRCAqLworLyogU0NEIHJlZ2lzdGVycyBhcmUgaW50ZXJuYWwsIG11c3QgYmUgYWNjZXNzZWQgdmlhIEhCVVNfVEFSR19QUlBIIHJlZ3MgKi8KKyNkZWZpbmUgSVdMNDlfU0NEX1NUQVJUX09GRlNFVAkJMHhhMDJjMDAKKworLyoKKyAqIDQ5NjUgdGVsbHMgZHJpdmVyIFNSQU0gYWRkcmVzcyBmb3IgaW50ZXJuYWwgc2NoZWR1bGVyIHN0cnVjdHMgdmlhIHRoaXMgcmVnLgorICogVmFsdWUgaXMgdmFsaWQgb25seSBhZnRlciAiQWxpdmUiIHJlc3BvbnNlIGZyb20gdUNvZGUuCisgKi8KKyNkZWZpbmUgSVdMNDlfU0NEX1NSQU1fQkFTRV9BRERSICAgICAgICAgICAoSVdMNDlfU0NEX1NUQVJUX09GRlNFVCArIDB4MCkKKworLyoKKyAqIERyaXZlciBtYXkgbmVlZCB0byB1cGRhdGUgcXVldWUtZW1wdHkgYml0cyBhZnRlciBjaGFuZ2luZyBxdWV1ZSdzCisgKiB3cml0ZSBhbmQgcmVhZCBwb2ludGVycyAoaW5kZXhlcykgZHVyaW5nIChyZS0paW5pdGlhbGl6YXRpb24gKGkuZS4gd2hlbgorICogc2NoZWR1bGVyIGlzIG5vdCB0cmFja2luZyB3aGF0J3MgaGFwcGVuaW5nKS4KKyAqIEJpdCBmaWVsZHM6CisgKiAzMS0xNjogIFdyaXRlIG1hc2sgLS0gMTogdXBkYXRlIGVtcHR5IGJpdCwgMDogZG9uJ3QgY2hhbmdlIGVtcHR5IGJpdAorICogMTUtMDA6ICBFbXB0eSBzdGF0ZSwgb25lIGZvciBlYWNoIHF1ZXVlIC0tIDE6IGVtcHR5LCAwOiBub24tZW1wdHkKKyAqIE5PVEU6ICBUaGlzIHJlZ2lzdGVyIGlzIG5vdCB1c2VkIGJ5IExpbnV4IGRyaXZlci4KKyAqLworI2RlZmluZSBJV0w0OV9TQ0RfRU1QVFlfQklUUyAgICAgICAgICAgICAgIChJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHg0KQorCisvKgorICogUGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIGFycmF5IG9mIGJ5dGUgY291bnQgKEJDKSBjaXJjdWxhciBidWZmZXJzIChDQnMpLgorICogRWFjaCBUeCBxdWV1ZSBoYXMgYSBCQyBDQiBpbiBob3N0IERSQU0gdG8gc3VwcG9ydCBTY2hlZHVsZXItQUNLIG1vZGUuCisgKiBUaGlzIHJlZ2lzdGVyIHBvaW50cyB0byBCQyBDQiBmb3IgcXVldWUgMCwgbXVzdCBiZSBvbiAxMDI0LWJ5dGUgYm91bmRhcnkuCisgKiBPdGhlcnMgYXJlIHNwYWNlZCBieSAxMDI0IGJ5dGVzLgorICogRWFjaCBCQyBDQiBpcyAyIGJ5dGVzICogKDI1NiArIDY0KSA9IDc0MCBieXRlcywgZm9sbG93ZWQgYnkgMzg0IGJ5dGVzIHBhZC4KKyAqIChJbmRleCBpbnRvIGEgcXVldWUncyBCQyBDQikgPSAoaW5kZXggaW50byBxdWV1ZSdzIFRGRCBDQikgPSAoU1NOICYgMHhmZikuCisgKiBCaXQgZmllbGRzOgorICogMjUtMDA6ICBCeXRlIENvdW50IENCIHBoeXNpY2FsIGFkZHJlc3MgWzM1OjEwXSwgbXVzdCBiZSAxMDI0LWJ5dGUgYWxpZ25lZC4KKyAqLworI2RlZmluZSBJV0w0OV9TQ0RfRFJBTV9CQVNFX0FERFIgICAgICAgICAgIChJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHgxMCkKKworLyoKKyAqIEVuYWJsZXMgYW55L2FsbCBUeCBETUEvRklGTyBjaGFubmVscy4KKyAqIFNjaGVkdWxlciBnZW5lcmF0ZXMgcmVxdWVzdHMgZm9yIG9ubHkgdGhlIGFjdGl2ZSBjaGFubmVscy4KKyAqIFNldCB0aGlzIHRvIDB4ZmYgdG8gZW5hYmxlIGFsbCA4IGNoYW5uZWxzIChub3JtYWwgdXNhZ2UpLgorICogQml0IGZpZWxkczoKKyAqICA3LSAwOiAgRW5hYmxlICgxKSwgZGlzYWJsZSAoMCksIG9uZSBiaXQgZm9yIGVhY2ggY2hhbm5lbCAwLTcKKyAqLworI2RlZmluZSBJV0w0OV9TQ0RfVFhGQUNUICAgICAgICAgICAgICAgICAgIChJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHgxYykKKy8qCisgKiBRdWV1ZSAoeCkgV3JpdGUgUG9pbnRlcnMgKGluZGV4ZXMsIHJlYWxseSEpLCBvbmUgZm9yIGVhY2ggVHggcXVldWUuCisgKiBJbml0aWFsaXplZCBhbmQgdXBkYXRlZCBieSBkcml2ZXIgYXMgbmV3IFRGRHMgYXJlIGFkZGVkIHRvIHF1ZXVlLgorICogTk9URTogIElmIHVzaW5nIEJsb2NrIEFjaywgaW5kZXggbXVzdCBjb3JyZXNwb25kIHRvIGZyYW1lJ3MKKyAqICAgICAgICBTdGFydCBTZXF1ZW5jZSBOdW1iZXI7IGluZGV4ID0gKFNTTiAmIDB4ZmYpCisgKiBOT1RFOiAgQWx0ZXJuYXRpdmUgdG8gSEJVU19UQVJHX1dSUFRSLCB3aGljaCBpcyB3aGF0IExpbnV4IGRyaXZlciB1c2VzPworICovCisjZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9XUlBUUih4KSAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweDI0ICsgKHgpICogNCkKKworLyoKKyAqIFF1ZXVlICh4KSBSZWFkIFBvaW50ZXJzIChpbmRleGVzLCByZWFsbHkhKSwgb25lIGZvciBlYWNoIFR4IHF1ZXVlLgorICogRm9yIEZJRk8gbW9kZSwgaW5kZXggaW5kaWNhdGVzIG5leHQgZnJhbWUgdG8gdHJhbnNtaXQuCisgKiBGb3IgU2NoZWR1bGVyLUFDSyBtb2RlLCBpbmRleCBpbmRpY2F0ZXMgZmlyc3QgZnJhbWUgaW4gVHggd2luZG93LgorICogSW5pdGlhbGl6ZWQgYnkgZHJpdmVyLCB1cGRhdGVkIGJ5IHNjaGVkdWxlci4KKyAqLworI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfUkRQVFIoeCkgIChJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHg2NCArICh4KSAqIDQpCisKKy8qCisgKiBTZWxlY3Qgd2hpY2ggcXVldWVzIHdvcmsgaW4gY2hhaW4gbW9kZSAoMSkgdnMuIG5vdCAoMCkuCisgKiBVc2UgY2hhaW4gbW9kZSB0byBidWlsZCBjaGFpbnMgb2YgYWdncmVnYXRlZCBmcmFtZXMuCisgKiBCaXQgZmllbGRzOgorICogMzEtMTY6ICBSZXNlcnZlZAorICogMTUtMDA6ICBNb2RlLCBvbmUgYml0IGZvciBlYWNoIHF1ZXVlIC0tIDE6IENoYWluIG1vZGUsIDA6IG9uZS1hdC1hLXRpbWUKKyAqIE5PVEU6ICBJZiBkcml2ZXIgc2V0cyB1cCBxdWV1ZSBmb3IgY2hhaW4gbW9kZSwgaXQgc2hvdWxkIGJlIGFsc28gc2V0IHVwCisgKiAgICAgICAgU2NoZWR1bGVyLUFDSyBtb2RlIGFzIHdlbGwsIHZpYSBTQ0RfUVVFVUVfU1RBVFVTX0JJVFMoeCkuCisgKi8KKyNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFQ0hBSU5fU0VMICAoSVdMNDlfU0NEX1NUQVJUX09GRlNFVCArIDB4ZDApCisKKy8qCisgKiBTZWxlY3Qgd2hpY2ggcXVldWVzIGludGVycnVwdCBkcml2ZXIgd2hlbiBzY2hlZHVsZXIgaW5jcmVtZW50cworICogYSBxdWV1ZSdzIHJlYWQgcG9pbnRlciAoaW5kZXgpLgorICogQml0IGZpZWxkczoKKyAqIDMxLTE2OiAgUmVzZXJ2ZWQKKyAqIDE1LTAwOiAgSW50ZXJydXB0IGVuYWJsZSwgb25lIGJpdCBmb3IgZWFjaCBxdWV1ZSAtLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogTk9URTogIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhcHBhcmVudGx5IGEgbm8tb3A7IGRyaXZlciByZWxpZXMgb24gaW50ZXJydXB0cworICogICAgICAgIGZyb20gUnggcXVldWUgdG8gcmVhZCBUeCBjb21tYW5kIHJlc3BvbnNlcyBhbmQgdXBkYXRlIFR4IHF1ZXVlcy4KKyAqLworI2RlZmluZSBJV0w0OV9TQ0RfSU5URVJSVVBUX01BU0sgIChJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHhlNCkKKworLyoKKyAqIFF1ZXVlIHNlYXJjaCBzdGF0dXMgcmVnaXN0ZXJzLiAgT25lIGZvciBlYWNoIHF1ZXVlLgorICogU2V0cyB1cCBxdWV1ZSBtb2RlIGFuZCBhc3NpZ25zIHF1ZXVlIHRvIFR4IERNQSBjaGFubmVsLgorICogQml0IGZpZWxkczoKKyAqIDE5LTEwOiBXcml0ZSBtYXNrL2VuYWJsZSBiaXRzIGZvciBiaXRzIDAtOQorICogICAgIDk6IERyaXZlciBzaG91bGQgaW5pdCB0byAiMCIKKyAqICAgICA4OiBTY2hlZHVsZXItQUNLIG1vZGUgKDEpLCBub24tU2NoZWR1bGVyLUFDSyAoaS5lLiBGSUZPKSBtb2RlICgwKS4KKyAqICAgICAgICBEcml2ZXIgc2hvdWxkIGluaXQgdG8gIjEiIGZvciBhZ2dyZWdhdGlvbiBtb2RlLCBvciAiMCIgb3RoZXJ3aXNlLgorICogICA3LTY6IERyaXZlciBzaG91bGQgaW5pdCB0byAiMCIKKyAqICAgICA1OiBXaW5kb3cgU2l6ZSBMZWZ0OyBpbmRpY2F0ZXMgd2hldGhlciBzY2hlZHVsZXIgY2FuIHJlcXVlc3QKKyAqICAgICAgICBhbm90aGVyIFRGRCwgYmFzZWQgb24gd2luZG93IHNpemUsIGV0Yy4gIERyaXZlciBzaG91bGQgaW5pdAorICogICAgICAgIHRoaXMgYml0IHRvICIxIiBmb3IgYWdncmVnYXRpb24gbW9kZSwgb3IgIjAiIGZvciBub24tYWdnLgorICogICA0LTE6IFR4IEZJRk8gdG8gdXNlIChyYW5nZSAwLTcpLgorICogICAgIDA6IFF1ZXVlIGlzIGFjdGl2ZSAoMSksIG5vdCBhY3RpdmUgKDApLgorICogT3RoZXIgYml0cyBzaG91bGQgYmUgd3JpdHRlbiBhcyAiMCIKKyAqCisgKiBOT1RFOiAgSWYgZW5hYmxpbmcgU2NoZWR1bGVyLUFDSyBtb2RlLCBjaGFpbiBtb2RlIHNob3VsZCBhbHNvIGJlIGVuYWJsZWQKKyAqICAgICAgICB2aWEgU0NEX1FVRVVFQ0hBSU5fU0VMLgorICovCisjZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9TVEFUVVNfQklUUyh4KVwKKwkoSVdMNDlfU0NEX1NUQVJUX09GRlNFVCArIDB4MTA0ICsgKHgpICogNCkKKworLyogQml0IGZpZWxkIHBvc2l0aW9ucyAqLworI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX0FDVElWRQkoMCkKKyNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19UWEYJKDEpCisjZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfV1NMCSg1KQorI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1NDRF9BQ0sJKDgpCisKKy8qIFdyaXRlIG1hc2tzICovCisjZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfU0NEX0FDVF9FTgkoMTApCisjZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9TVFRTX1JFR19NU0sJCSgweDAwMDdGQzAwKQorCisvKioKKyAqIDQ5NjUgaW50ZXJuYWwgU1JBTSBzdHJ1Y3R1cmVzIGZvciBzY2hlZHVsZXIsIHNoYXJlZCB3aXRoIGRyaXZlciAuLi4KKyAqCisgKiBEcml2ZXIgc2hvdWxkIGNsZWFyIGFuZCBpbml0aWFsaXplIHRoZSBmb2xsb3dpbmcgYXJlYXMgYWZ0ZXIgcmVjZWl2aW5nCisgKiAiQWxpdmUiIHJlc3BvbnNlIGZyb20gNDk2NSB1Q29kZSwgaS5lLiBhZnRlciBpbml0aWFsCisgKiB1Q29kZSBsb2FkLCBvciBhZnRlciBhIHVDb2RlIGxvYWQgZG9uZSBmb3IgZXJyb3IgcmVjb3Zlcnk6CisgKgorICogU0NEX0NPTlRFWFRfREFUQV9PRkZTRVQgKHNpemUgMTI4IGJ5dGVzKQorICogU0NEX1RYX1NUVFNfQklUTUFQX09GRlNFVCAoc2l6ZSAyNTYgYnl0ZXMpCisgKiBTQ0RfVFJBTlNMQVRFX1RCTF9PRkZTRVQgKHNpemUgMzIgYnl0ZXMpCisgKgorICogRHJpdmVyIGFjY2Vzc2VzIFNSQU0gdmlhIEhCVVNfVEFSR19NRU1fKiByZWdpc3RlcnMuCisgKiBEcml2ZXIgcmVhZHMgYmFzZSBhZGRyZXNzIG9mIHRoaXMgc2NoZWR1bGVyIGFyZWEgZnJvbSBTQ0RfU1JBTV9CQVNFX0FERFIuCisgKiBBbGwgT0ZGU0VUIHZhbHVlcyBtdXN0IGJlIGFkZGVkIHRvIHRoaXMgYmFzZSBhZGRyZXNzLgorICovCisKKy8qCisgKiBRdWV1ZSBjb250ZXh0LiAgT25lIDgtYnl0ZSBlbnRyeSBmb3IgZWFjaCBvZiAxNiBxdWV1ZXMuCisgKgorICogRHJpdmVyIHNob3VsZCBjbGVhciB0aGlzIGVudGlyZSBhcmVhIChzaXplIDB4ODApIHRvIDAgYWZ0ZXIgcmVjZWl2aW5nCisgKiAiQWxpdmUiIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlLiAgQWRkaXRpb25hbGx5LCBkcml2ZXIgc2hvdWxkIGluaXQKKyAqIGVhY2ggcXVldWUncyBlbnRyeSBhcyBmb2xsb3dzOgorICoKKyAqIExTIER3b3JkIGJpdCBmaWVsZHM6CisgKiAgMC0wNjogIE1heCBUeCB3aW5kb3cgc2l6ZSBmb3IgU2NoZWR1bGVyLUFDSy4gIERyaXZlciBzaG91bGQgaW5pdCB0byA2NC4KKyAqCisgKiBNUyBEd29yZCBiaXQgZmllbGRzOgorICogMTYtMjI6ICBGcmFtZSBsaW1pdC4gIERyaXZlciBzaG91bGQgaW5pdCB0byAxMCAoMHhhKS4KKyAqCisgKiBEcml2ZXIgc2hvdWxkIGluaXQgYWxsIG90aGVyIGJpdHMgdG8gMC4KKyAqCisgKiBJbml0IG11c3QgYmUgZG9uZSBhZnRlciBkcml2ZXIgcmVjZWl2ZXMgIkFsaXZlIiByZXNwb25zZSBmcm9tIDQ5NjUgdUNvZGUsCisgKiBhbmQgd2hlbiBzZXR0aW5nIHVwIHF1ZXVlIGZvciBhZ2dyZWdhdGlvbi4KKyAqLworI2RlZmluZSBJV0w0OV9TQ0RfQ09OVEVYVF9EQVRBX09GRlNFVAkJCTB4MzgwCisjZGVmaW5lIElXTDQ5X1NDRF9DT05URVhUX1FVRVVFX09GRlNFVCh4KSBcCisJCQkoSVdMNDlfU0NEX0NPTlRFWFRfREFUQV9PRkZTRVQgKyAoKHgpICogOCkpCisKKyNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX0NUWF9SRUcxX1dJTl9TSVpFX1BPUwkJKDApCisjZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9DVFhfUkVHMV9XSU5fU0laRV9NU0sJCSgweDAwMDAwMDdGKQorI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfUE9TCSgxNikKKyNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX01TSwkoMHgwMDdGMDAwMCkKKworLyoKKyAqIFR4IFN0YXR1cyBCaXRtYXAKKyAqCisgKiBEcml2ZXIgc2hvdWxkIGNsZWFyIHRoaXMgZW50aXJlIGFyZWEgKHNpemUgMHgxMDApIHRvIDAgYWZ0ZXIgcmVjZWl2aW5nCisgKiAiQWxpdmUiIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlLiAgQXJlYSBpcyB1c2VkIG9ubHkgYnkgZGV2aWNlIGl0c2VsZjsKKyAqIG5vIG90aGVyIHN1cHBvcnQgKGJlc2lkZXMgY2xlYXJpbmcpIGlzIHJlcXVpcmVkIGZyb20gZHJpdmVyLgorICovCisjZGVmaW5lIElXTDQ5X1NDRF9UWF9TVFRTX0JJVE1BUF9PRkZTRVQJCTB4NDAwCisKKy8qCisgKiBSQXhUSUQgdG8gcXVldWUgdHJhbnNsYXRpb24gbWFwcGluZy4KKyAqCisgKiBXaGVuIHF1ZXVlIGlzIGluIFNjaGVkdWxlci1BQ0sgbW9kZSwgZnJhbWVzIHBsYWNlZCBpbiBhIHRoYXQgcXVldWUgbXVzdCBiZQorICogZm9yIG9ubHkgb25lIGNvbWJpbmF0aW9uIG9mIHJlY2VpdmVyIGFkZHJlc3MgKFJBKSBhbmQgdHJhZmZpYyBJRCAoVElEKSwgaS5lLgorICogb25lIFFPUyBwcmlvcml0eSBsZXZlbCBkZXN0aW5lZCBmb3Igb25lIHN0YXRpb24gKGZvciB0aGlzIHdpcmVsZXNzIGxpbmssCisgKiBub3QgZmluYWwgZGVzdGluYXRpb24pLiAgVGhlIFNDRF9UUkFOU0xBVEVfVEFCTEUgYXJlYSBwcm92aWRlcyAxNiAxNi1iaXQKKyAqIG1hcHBpbmdzLCBvbmUgZm9yIGVhY2ggb2YgdGhlIDE2IHF1ZXVlcy4gIElmIHF1ZXVlIGlzIG5vdCBpbiBTY2hlZHVsZXItQUNLCisgKiBtb2RlLCB0aGUgZGV2aWNlIGlnbm9yZXMgdGhlIG1hcHBpbmcgdmFsdWUuCisgKgorICogQml0IGZpZWxkcywgZm9yIGVhY2ggMTYtYml0IG1hcDoKKyAqIDE1LTk6ICBSZXNlcnZlZCwgc2V0IHRvIDAKKyAqICA4LTQ6ICBJbmRleCBpbnRvIGRldmljZSdzIHN0YXRpb24gdGFibGUgZm9yIHJlY2lwaWVudCBzdGF0aW9uCisgKiAgMy0wOiAgVHJhZmZpYyBJRCAodGlkKSwgcmFuZ2UgMC0xNQorICoKKyAqIERyaXZlciBzaG91bGQgY2xlYXIgdGhpcyBlbnRpcmUgYXJlYSAoc2l6ZSAzMiBieXRlcykgdG8gMCBhZnRlciByZWNlaXZpbmcKKyAqICJBbGl2ZSIgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUuICBUbyB1cGRhdGUgYSAxNi1iaXQgbWFwIHZhbHVlLCBkcml2ZXIKKyAqIG11c3QgcmVhZCBhIGR3b3JkLWFsaWduZWQgdmFsdWUgZnJvbSBkZXZpY2UgU1JBTSwgcmVwbGFjZSB0aGUgMTYtYml0IG1hcAorICogdmFsdWUgb2YgaW50ZXJlc3QsIGFuZCB3cml0ZSB0aGUgZHdvcmQgdmFsdWUgYmFjayBpbnRvIGRldmljZSBTUkFNLgorICovCisjZGVmaW5lIElXTDQ5X1NDRF9UUkFOU0xBVEVfVEJMX09GRlNFVAkJMHg1MDAKKworLyogRmluZCB0cmFuc2xhdGlvbiB0YWJsZSBkd29yZCB0byByZWFkL3dyaXRlIGZvciBnaXZlbiBxdWV1ZSAqLworI2RlZmluZSBJV0w0OV9TQ0RfVFJBTlNMQVRFX1RCTF9PRkZTRVRfUVVFVUUoeCkgXAorCSgoSVdMNDlfU0NEX1RSQU5TTEFURV9UQkxfT0ZGU0VUICsgKCh4KSAqIDIpKSAmIDB4ZmZmZmZmZmMpCisKKyNkZWZpbmUgSVdMX1NDRF9UWEZJRk9fUE9TX1RJRAkJCSgwKQorI2RlZmluZSBJV0xfU0NEX1RYRklGT19QT1NfUkEJCQkoNCkKKyNkZWZpbmUgSVdMX1NDRF9RVUVVRV9SQV9USURfTUFQX1JBVElEX01TSwkoMHgwMUZGKQorCisvKiA1MDAwIFNDRCAqLworI2RlZmluZSBJV0w1MF9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1RYRgkoMCkKKyNkZWZpbmUgSVdMNTBfU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19BQ1RJVkUJKDMpCisjZGVmaW5lIElXTDUwX1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfV1NMCSg0KQorI2RlZmluZSBJV0w1MF9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1NDRF9BQ1RfRU4gKDE5KQorI2RlZmluZSBJV0w1MF9TQ0RfUVVFVUVfU1RUU19SRUdfTVNLCQkoMHgwMEZGMDAwMCkKKworI2RlZmluZSBJV0w1MF9TQ0RfUVVFVUVfQ1RYX1JFRzFfQ1JFRElUX1BPUwkJKDgpCisjZGVmaW5lIElXTDUwX1NDRF9RVUVVRV9DVFhfUkVHMV9DUkVESVRfTVNLCQkoMHgwMEZGRkYwMCkKKyNkZWZpbmUgSVdMNTBfU0NEX1FVRVVFX0NUWF9SRUcxX1NVUEVSX0NSRURJVF9QT1MJKDI0KQorI2RlZmluZSBJV0w1MF9TQ0RfUVVFVUVfQ1RYX1JFRzFfU1VQRVJfQ1JFRElUX01TSwkoMHhGRjAwMDAwMCkKKyNkZWZpbmUgSVdMNTBfU0NEX1FVRVVFX0NUWF9SRUcyX1dJTl9TSVpFX1BPUwkJKDApCisjZGVmaW5lIElXTDUwX1NDRF9RVUVVRV9DVFhfUkVHMl9XSU5fU0laRV9NU0sJCSgweDAwMDAwMDdGKQorI2RlZmluZSBJV0w1MF9TQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfUE9TCSgxNikKKyNkZWZpbmUgSVdMNTBfU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX01TSwkoMHgwMDdGMDAwMCkKKworI2RlZmluZSBJV0w1MF9TQ0RfQ09OVEVYVF9EQVRBX09GRlNFVAkJKDB4NjAwKQorI2RlZmluZSBJV0w1MF9TQ0RfVFhfU1RUU19CSVRNQVBfT0ZGU0VUCQkoMHg3QjEpCisjZGVmaW5lIElXTDUwX1NDRF9UUkFOU0xBVEVfVEJMX09GRlNFVAkJKDB4N0UwKQorCisjZGVmaW5lIElXTDUwX1NDRF9DT05URVhUX1FVRVVFX09GRlNFVCh4KVwKKwkoSVdMNTBfU0NEX0NPTlRFWFRfREFUQV9PRkZTRVQgKyAoKHgpICogOCkpCisKKyNkZWZpbmUgSVdMNTBfU0NEX1RSQU5TTEFURV9UQkxfT0ZGU0VUX1FVRVVFKHgpIFwKKwkoKElXTDUwX1NDRF9UUkFOU0xBVEVfVEJMX09GRlNFVCArICgoeCkgKiAyKSkgJiAweGZmZmMpCisKKyNkZWZpbmUgSVdMNTBfU0NEX1FVRVVFQ0hBSU5fU0VMX0FMTCh4KQkJKCgoMTw8KHgpKSAtIDEpICZcCisJKH4oMTw8SVdMX0NNRF9RVUVVRV9OVU0pKSkKKwogI2RlZmluZSBJV0w1MF9TQ0RfQkFTRQkJCShQUlBIX0JBU0UgKyAweGEwMmMwMCkKIAogI2RlZmluZSBJV0w1MF9TQ0RfU1JBTV9CQVNFX0FERFIgICAgICAgICAoSVdMNTBfU0NEX0JBU0UgKyAweDApCkBAIC0yODcsNCArNTU0LDYgQEAKICNkZWZpbmUgSVdMNTBfU0NEX0lOVEVSUlVQVF9NQVNLICAgICAgICAgKElXTDUwX1NDRF9CQVNFICsgMHgxMDgpCiAjZGVmaW5lIElXTDUwX1NDRF9RVUVVRV9TVEFUVVNfQklUUyh4KSAgIChJV0w1MF9TQ0RfQkFTRSArIDB4MTBjICsgKHgpICogNCkKIAorLyoqKioqKioqKioqKioqKioqKioqKioqIEVORCBUWCBTQ0hFRFVMRVIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogI2VuZGlmCQkJCS8qIF9faXdsX3BycGhfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCmluZGV4IDU5ODBhNTYuLmU1ZTU4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCi0jaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogCkBAIC00NCwyOCArNDQsMzEgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOwogCWludCBlcnIgPSAwOwogCi0JaWYgKCFwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwpCisJaWYgKCFwcml2LT5yZmtpbGwpCiAJCXJldHVybiAwOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm4gMDsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJ3ZSByZWNpZXZlZCBzb2Z0IFJGS0lMTCBzZXQgdG8gc3RhdGUgJWRcbiIsIHN0YXRlKTsKKwlJV0xfREVCVUdfUkZfS0lMTCgid2UgcmVjZWl2ZWQgc29mdCBSRktJTEwgc2V0IHRvIHN0YXRlICVkXG4iLCBzdGF0ZSk7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgUkZLSUxMX1NUQVRFX09OOgotCQlwcml2LT5jZmctPm9wcy0+bGliLT5yYWRpb19raWxsX3N3KHByaXYsIDApOwotCQkvKiBpZiBIVyByZi1raWxsIGlzIHNldCBkb250IGFsbG93IE9OIHN0YXRlICovCi0JCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQorCWNhc2UgUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDoKKwkJaWYgKGl3bF9pc19yZmtpbGxfaHcocHJpdikpIHsKIAkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCQlpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8ocHJpdik7CiAJCWJyZWFrOwotCWNhc2UgUkZLSUxMX1NUQVRFX09GRjoKLQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+cmFkaW9fa2lsbF9zdyhwcml2LCAxKTsKLQkJaWYgKCFpd2xfaXNfcmZraWxsKHByaXYpKQotCQkJZXJyID0gLUVCVVNZOworCWNhc2UgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDoKKwkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX1dBUk5JTkcoIndlIHJlY2lldmVkIHVuZXhwZWN0ZWQgUkZLSUxMIHN0YXRlICVkXG4iLCBzdGF0ZSk7CiAJCWJyZWFrOwogCX0KK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNzksNjQgKzgyLDM1IEBACiAJQlVHX09OKGRldmljZSA9PSBOVUxMKTsKIAogCUlXTF9ERUJVR19SRl9LSUxMKCJJbml0aWFsaXppbmcgUkZLSUxMLlxuIik7Ci0JcHJpdi0+cmZraWxsX21uZ3IucmZraWxsID0gcmZraWxsX2FsbG9jYXRlKGRldmljZSwgUkZLSUxMX1RZUEVfV0xBTik7Ci0JaWYgKCFwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwpIHsKKwlwcml2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoZGV2aWNlLCBSRktJTExfVFlQRV9XTEFOKTsKKwlpZiAoIXByaXYtPnJma2lsbCkgewogCQlJV0xfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSByZmtpbGwgZGV2aWNlLlxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JcHJpdi0+cmZraWxsX21uZ3IucmZraWxsLT5uYW1lID0gcHJpdi0+Y2ZnLT5uYW1lOwotCXByaXYtPnJma2lsbF9tbmdyLnJma2lsbC0+ZGF0YSA9IHByaXY7Ci0JcHJpdi0+cmZraWxsX21uZ3IucmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9PTjsKLQlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IGl3bF9yZmtpbGxfc29mdF9yZl9raWxsOwotCXByaXYtPnJma2lsbF9tbmdyLnJma2lsbC0+dXNlcl9jbGFpbV91bnN1cHBvcnRlZCA9IDE7CisJcHJpdi0+cmZraWxsLT5uYW1lID0gcHJpdi0+Y2ZnLT5uYW1lOworCXByaXYtPnJma2lsbC0+ZGF0YSA9IHByaXY7CisJcHJpdi0+cmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7CisJcHJpdi0+cmZraWxsLT50b2dnbGVfcmFkaW8gPSBpd2xfcmZraWxsX3NvZnRfcmZfa2lsbDsKKwlwcml2LT5yZmtpbGwtPnVzZXJfY2xhaW1fdW5zdXBwb3J0ZWQgPSAxOwogCi0JcHJpdi0+cmZraWxsX21uZ3IucmZraWxsLT5kZXYuY2xhc3MtPnN1c3BlbmQgPSBOVUxMOwotCXByaXYtPnJma2lsbF9tbmdyLnJma2lsbC0+ZGV2LmNsYXNzLT5yZXN1bWUgPSBOVUxMOworCXByaXYtPnJma2lsbC0+ZGV2LmNsYXNzLT5zdXNwZW5kID0gTlVMTDsKKwlwcml2LT5yZmtpbGwtPmRldi5jbGFzcy0+cmVzdW1lID0gTlVMTDsKIAotCXByaXYtPnJma2lsbF9tbmdyLmlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghcHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGFsbG9jYXRlIHJma2lsbCBpbnB1dCBkZXZpY2UuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmcmVlZF9yZmtpbGw7Ci0JfQotCi0JcHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2LT5uYW1lID0gcHJpdi0+Y2ZnLT5uYW1lOwotCXByaXYtPnJma2lsbF9tbmdyLmlucHV0X2Rldi0+cGh5cyA9IHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KTsKLQlwcml2LT5yZmtpbGxfbW5nci5pbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKLQlwcml2LT5yZmtpbGxfbW5nci5pbnB1dF9kZXYtPmlkLnZlbmRvciA9IHByaXYtPnBjaV9kZXYtPnZlbmRvcjsKLQlwcml2LT5yZmtpbGxfbW5nci5pbnB1dF9kZXYtPmRldi5wYXJlbnQgPSBkZXZpY2U7Ci0JcHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOwotCXNldF9iaXQoS0VZX1dMQU4sIHByaXYtPnJma2lsbF9tbmdyLmlucHV0X2Rldi0+a2V5Yml0KTsKLQotCXJldCA9IHJma2lsbF9yZWdpc3Rlcihwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwpOworCXJldCA9IHJma2lsbF9yZWdpc3Rlcihwcml2LT5yZmtpbGwpOwogCWlmIChyZXQpIHsKIAkJSVdMX0VSUk9SKCJVbmFibGUgdG8gcmVnaXN0ZXIgcmZraWxsOiAlZFxuIiwgcmV0KTsKLQkJZ290byBmcmVlX2lucHV0X2RldjsKLQl9Ci0KLQlyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2KTsKLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHJma2lsbCBpbnB1dCBkZXZpY2U6ICVkXG4iLCByZXQpOwotCQlnb3RvIHVucmVnaXN0ZXJfcmZraWxsOworCQlnb3RvIGZyZWVfcmZraWxsOwogCX0KIAogCUlXTF9ERUJVR19SRl9LSUxMKCJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKIAlyZXR1cm4gcmV0OwogCi11bnJlZ2lzdGVyX3Jma2lsbDoKLQlyZmtpbGxfdW5yZWdpc3Rlcihwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwpOwotCXByaXYtPnJma2lsbF9tbmdyLnJma2lsbCA9IE5VTEw7Ci0KLWZyZWVfaW5wdXRfZGV2OgotCWlucHV0X2ZyZWVfZGV2aWNlKHByaXYtPnJma2lsbF9tbmdyLmlucHV0X2Rldik7Ci0JcHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2ID0gTlVMTDsKLQotZnJlZWRfcmZraWxsOgotCWlmIChwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwgIT0gTlVMTCkKLQkJcmZraWxsX2ZyZWUocHJpdi0+cmZraWxsX21uZ3IucmZraWxsKTsKLQlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwgPSBOVUxMOworZnJlZV9yZmtpbGw6CisJaWYgKHByaXYtPnJma2lsbCAhPSBOVUxMKQorCQlyZmtpbGxfZnJlZShwcml2LT5yZmtpbGwpOworCXByaXYtPnJma2lsbCA9IE5VTEw7CiAKIGVycm9yOgogCUlXTF9ERUJVR19SRl9LSUxMKCJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKQEAgLTE0NywyNyArMTIxLDI3IEBACiB2b2lkIGl3bF9yZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAKLQlpZiAocHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2KQotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShwcml2LT5yZmtpbGxfbW5nci5pbnB1dF9kZXYpOworCWlmIChwcml2LT5yZmtpbGwpCisJCXJma2lsbF91bnJlZ2lzdGVyKHByaXYtPnJma2lsbCk7CiAKLQlpZiAocHJpdi0+cmZraWxsX21uZ3IucmZraWxsKQotCQlyZmtpbGxfdW5yZWdpc3Rlcihwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwpOwotCi0JcHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2ID0gTlVMTDsKLQlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwgPSBOVUxMOworCXByaXYtPnJma2lsbCA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yZmtpbGxfdW5yZWdpc3Rlcik7CiAKIC8qIHNldCByZi1raWxsIHRvIHRoZSByaWdodCBzdGF0ZS4gKi8KIHZvaWQgaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCi0JaWYgKCFwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwpCisJaWYgKCFwcml2LT5yZmtpbGwpCiAJCXJldHVybjsKIAotCWlmICghaXdsX2lzX3Jma2lsbChwcml2KSkKLQkJcHJpdi0+cmZraWxsX21uZ3IucmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9PTjsKKwlpZiAoaXdsX2lzX3Jma2lsbF9odyhwcml2KSkgeworCQlyZmtpbGxfZm9yY2Vfc3RhdGUocHJpdi0+cmZraWxsLCBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghaXdsX2lzX3Jma2lsbF9zdyhwcml2KSkKKwkJcmZraWxsX2ZvcmNlX3N0YXRlKHByaXYtPnJma2lsbCwgUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCk7CiAJZWxzZQotCQlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwtPnN0YXRlID0gUkZLSUxMX1NUQVRFX09GRjsKKwkJcmZraWxsX2ZvcmNlX3N0YXRlKHByaXYtPnJma2lsbCwgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKaW5kZXggYTdmMDRiOC4uNDAyZmQ0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKQEAgLTMxLDE0ICszMSw4IEBACiBzdHJ1Y3QgaXdsX3ByaXY7CiAKICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotCiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9SRktJTEwKLXN0cnVjdCBpd2xfcmZraWxsX21uZ3IgewotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci19OwogCiB2b2lkIGl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkOWFmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTAsMCArMSwxMzIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKKyAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorI2luY2x1ZGUgIml3bC1pby5oIgorI2luY2x1ZGUgIml3bC1jYWxpYi5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogUlgtRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUnggdGhlb3J5IG9mIG9wZXJhdGlvbgorICoKKyAqIERyaXZlciBhbGxvY2F0ZXMgYSBjaXJjdWxhciBidWZmZXIgb2YgUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvcnMgKFJCRHMpLAorICogZWFjaCBvZiB3aGljaCBwb2ludCB0byBSZWNlaXZlIEJ1ZmZlcnMgdG8gYmUgZmlsbGVkIGJ5IHRoZSBOSUMuICBUaGVzZSBnZXQKKyAqIHVzZWQgbm90IG9ubHkgZm9yIFJ4IGZyYW1lcywgYnV0IGZvciBhbnkgY29tbWFuZCByZXNwb25zZSBvciBub3RpZmljYXRpb24KKyAqIGZyb20gdGhlIE5JQy4gIFRoZSBkcml2ZXIgYW5kIE5JQyBtYW5hZ2UgdGhlIFJ4IGJ1ZmZlcnMgYnkgbWVhbnMKKyAqIG9mIGluZGV4ZXMgaW50byB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICoKKyAqIFJ4IFF1ZXVlIEluZGV4ZXMKKyAqIFRoZSBob3N0L2Zpcm13YXJlIHNoYXJlIHR3byBpbmRleCByZWdpc3RlcnMgZm9yIG1hbmFnaW5nIHRoZSBSeCBidWZmZXJzLgorICoKKyAqIFRoZSBSRUFEIGluZGV4IG1hcHMgdG8gdGhlIGZpcnN0IHBvc2l0aW9uIHRoYXQgdGhlIGZpcm13YXJlIG1heSBiZSB3cml0aW5nCisgKiB0byAtLSB0aGUgZHJpdmVyIGNhbiByZWFkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhpcyBwb3NpdGlvbiBhbmQgZ2V0CisgKiBnb29kIGRhdGEuCisgKiBUaGUgUkVBRCBpbmRleCBpcyBtYW5hZ2VkIGJ5IHRoZSBmaXJtd2FyZSBvbmNlIHRoZSBjYXJkIGlzIGVuYWJsZWQuCisgKgorICogVGhlIFdSSVRFIGluZGV4IG1hcHMgdG8gdGhlIGxhc3QgcG9zaXRpb24gdGhlIGRyaXZlciBoYXMgcmVhZCBmcm9tIC0tIHRoZQorICogcG9zaXRpb24gcHJlY2VkaW5nIFdSSVRFIGlzIHRoZSBsYXN0IHNsb3QgdGhlIGZpcm13YXJlIGNhbiBwbGFjZSBhIHBhY2tldC4KKyAqCisgKiBUaGUgcXVldWUgaXMgZW1wdHkgKG5vIGdvb2QgZGF0YSkgaWYgV1JJVEUgPSBSRUFEIC0gMSwgYW5kIGlzIGZ1bGwgaWYKKyAqIFdSSVRFID0gUkVBRC4KKyAqCisgKiBEdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZSBob3N0IHNldHMgdXAgdGhlIFJFQUQgcXVldWUgcG9zaXRpb24gdG8gdGhlIGZpcnN0CisgKiBJTkRFWCBwb3NpdGlvbiwgYW5kIFdSSVRFIHRvIHRoZSBsYXN0IChSRUFEIC0gMSB3cmFwcGVkKQorICoKKyAqIFdoZW4gdGhlIGZpcm13YXJlIHBsYWNlcyBhIHBhY2tldCBpbiBhIGJ1ZmZlciwgaXQgd2lsbCBhZHZhbmNlIHRoZSBSRUFEIGluZGV4CisgKiBhbmQgZmlyZSB0aGUgUlggaW50ZXJydXB0LiAgVGhlIGRyaXZlciBjYW4gdGhlbiBxdWVyeSB0aGUgUkVBRCBpbmRleCBhbmQKKyAqIHByb2Nlc3MgYXMgbWFueSBwYWNrZXRzIGFzIHBvc3NpYmxlLCBtb3ZpbmcgdGhlIFdSSVRFIGluZGV4IGZvcndhcmQgYXMgaXQKKyAqIHJlc2V0cyB0aGUgUnggcXVldWUgYnVmZmVycyB3aXRoIG5ldyBtZW1vcnkuCisgKgorICogVGhlIG1hbmFnZW1lbnQgaW4gdGhlIGRyaXZlciBpcyBhcyBmb2xsb3dzOgorICogKyBBIGxpc3Qgb2YgcHJlLWFsbG9jYXRlZCBTS0JzIGlzIHN0b3JlZCBpbiBpd2wtPnJ4cS0+cnhfZnJlZS4gIFdoZW4KKyAqICAgaXdsLT5yeHEtPmZyZWVfY291bnQgZHJvcHMgdG8gb3IgYmVsb3cgUlhfTE9XX1dBVEVSTUFSSywgd29yayBpcyBzY2hlZHVsZWQKKyAqICAgdG8gcmVwbGVuaXNoIHRoZSBpd2wtPnJ4cS0+cnhfZnJlZS4KKyAqICsgSW4gaXdsX3J4X3JlcGxlbmlzaCAoc2NoZWR1bGVkKSBpZiAncHJvY2Vzc2VkJyAhPSAncmVhZCcgdGhlbiB0aGUKKyAqICAgaXdsLT5yeHEgaXMgcmVwbGVuaXNoZWQgYW5kIHRoZSBSRUFEIElOREVYIGlzIHVwZGF0ZWQgKHVwZGF0aW5nIHRoZQorICogICAncHJvY2Vzc2VkJyBhbmQgJ3JlYWQnIGRyaXZlciBpbmRleGVzIGFzIHdlbGwpCisgKiArIEEgcmVjZWl2ZWQgcGFja2V0IGlzIHByb2Nlc3NlZCBhbmQgaGFuZGVkIHRvIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjaywKKyAqICAgZGV0YWNoZWQgZnJvbSB0aGUgaXdsLT5yeHEuICBUaGUgZHJpdmVyICdwcm9jZXNzZWQnIGluZGV4IGlzIHVwZGF0ZWQuCisgKiArIFRoZSBIb3N0L0Zpcm13YXJlIGl3bC0+cnhxIGlzIHJlcGxlbmlzaGVkIGF0IHRhc2tsZXQgdGltZSBmcm9tIHRoZSByeF9mcmVlCisgKiAgIGxpc3QuIElmIHRoZXJlIGFyZSBubyBhbGxvY2F0ZWQgYnVmZmVycyBpbiBpd2wtPnJ4cS0+cnhfZnJlZSwgdGhlIFJFQUQKKyAqICAgSU5ERVggaXMgbm90IGluY3JlbWVudGVkIGFuZCBpd2wtPnN0YXR1cyhSWF9TVEFMTEVEKSBpcyBzZXQuICBJZiB0aGVyZQorICogICB3ZXJlIGVub3VnaCBmcmVlIGJ1ZmZlcnMgYW5kIFJYX1NUQUxMRUQgaXMgc2V0IGl0IGlzIGNsZWFyZWQuCisgKgorICoKKyAqIERyaXZlciBzZXF1ZW5jZToKKyAqCisgKiBpd2xfcnhfcXVldWVfYWxsb2MoKSAgIEFsbG9jYXRlcyByeF9mcmVlCisgKiBpd2xfcnhfcmVwbGVuaXNoKCkgICAgIFJlcGxlbmlzaGVzIHJ4X2ZyZWUgbGlzdCBmcm9tIHJ4X3VzZWQsIGFuZCBjYWxscworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXdsX3J4X3F1ZXVlX3Jlc3RvY2sKKyAqIGl3bF9yeF9xdWV1ZV9yZXN0b2NrKCkgTW92ZXMgYXZhaWxhYmxlIGJ1ZmZlcnMgZnJvbSByeF9mcmVlIGludG8gUngKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLCB1cGRhdGVzIGZpcm13YXJlIHBvaW50ZXJzLCBhbmQgdXBkYXRlcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFdSSVRFIGluZGV4LiAgSWYgaW5zdWZmaWNpZW50IHJ4X2ZyZWUgYnVmZmVycworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGF2YWlsYWJsZSwgc2NoZWR1bGVzIGl3bF9yeF9yZXBsZW5pc2gKKyAqCisgKiAtLSBlbmFibGUgaW50ZXJydXB0cyAtLQorICogSVNSIC0gaXdsX3J4KCkgICAgICAgICBEZXRhY2ggaXdsX3J4X21lbV9idWZmZXJzIGZyb20gcG9vbCB1cCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUQgSU5ERVgsIGRldGFjaGluZyB0aGUgU0tCIGZyb20gdGhlIHBvb2wuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlcyB0aGUgcGFja2V0IGJ1ZmZlciBmcm9tIHF1ZXVlIHRvIHJ4X3VzZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxscyBpd2xfcnhfcXVldWVfcmVzdG9jayB0byByZWZpbGwgYW55IGVtcHR5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90cy4KKyAqIC4uLgorICoKKyAqLworCisvKioKKyAqIGl3bF9yeF9xdWV1ZV9zcGFjZSAtIFJldHVybiBudW1iZXIgb2YgZnJlZSBzbG90cyBhdmFpbGFibGUgaW4gcXVldWUuCisgKi8KK2ludCBpd2xfcnhfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcSkKK3sKKwlpbnQgcyA9IHEtPnJlYWQgLSBxLT53cml0ZTsKKwlpZiAocyA8PSAwKQorCQlzICs9IFJYX1FVRVVFX1NJWkU7CisJLyoga2VlcCBzb21lIGJ1ZmZlciB0byBub3QgY29uZnVzZSBmdWxsIGFuZCBlbXB0eSBxdWV1ZSAqLworCXMgLT0gMjsKKwlpZiAocyA8IDApCisJCXMgPSAwOworCXJldHVybiBzOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcXVldWVfc3BhY2UpOworCisvKioKKyAqIGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyIC0gVXBkYXRlIHRoZSB3cml0ZSBwb2ludGVyIGZvciB0aGUgUlggcXVldWUKKyAqLworaW50IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcSkKK3sKKwl1MzIgcmVnID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKKworCWlmIChxLT5uZWVkX3VwZGF0ZSA9PSAwKQorCQlnb3RvIGV4aXRfdW5sb2NrOworCisJLyogSWYgcG93ZXItc2F2aW5nIGlzIGluIHVzZSwgbWFrZSBzdXJlIGRldmljZSBpcyBhd2FrZSAqLworCWlmICh0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkgeworCQlyZWcgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKKworCQlpZiAocmVnICYgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX01BQ19TTEVFUCkgeworCQkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOworCQkJZ290byBleGl0X3VubG9jazsKKwkJfQorCisJCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJCWlmIChyZXQpCisJCQlnb3RvIGV4aXRfdW5sb2NrOworCisJCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLworCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwKKwkJCQkgICAgIHEtPndyaXRlICYgfjB4Nyk7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisKKwkvKiBFbHNlIGRldmljZSBpcyBhc3N1bWVkIHRvIGJlIGF3YWtlICovCisJfSBlbHNlCisJCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLworCQlpd2xfd3JpdGUzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLCBxLT53cml0ZSAmIH4weDcpOworCisKKwlxLT5uZWVkX3VwZGF0ZSA9IDA7CisKKyBleGl0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIpOworLyoqCisgKiBpd2xfZG1hX2FkZHIycmJkX3B0ciAtIGNvbnZlcnQgYSBETUEgYWRkcmVzcyB0byBhIHVDb2RlIHJlYWQgYnVmZmVyIHB0cgorICovCitzdGF0aWMgaW5saW5lIF9fbGUzMiBpd2xfZG1hX2FkZHIycmJkX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gY3B1X3RvX2xlMzIoKHUzMikoZG1hX2FkZHIgPj4gOCkpOworfQorCisvKioKKyAqIGl3bF9yeF9xdWV1ZV9yZXN0b2NrIC0gcmVmaWxsIFJYIHF1ZXVlIGZyb20gcHJlLWFsbG9jYXRlZCBwb29sCisgKgorICogSWYgdGhlcmUgYXJlIHNsb3RzIGluIHRoZSBSWCBxdWV1ZSB0aGF0IG5lZWQgdG8gYmUgcmVzdG9ja2VkLAorICogYW5kIHdlIGhhdmUgZnJlZSBwcmUtYWxsb2NhdGVkIGJ1ZmZlcnMsIGZpbGwgdGhlIHJhbmtzIGFzIG11Y2gKKyAqIGFzIHdlIGNhbiwgcHVsbGluZyBmcm9tIHJ4X2ZyZWUuCisgKgorICogVGhpcyBtb3ZlcyB0aGUgJ3dyaXRlJyBpbmRleCBmb3J3YXJkIHRvIGNhdGNoIHVwIHdpdGggJ3Byb2Nlc3NlZCcsIGFuZAorICogYWxzbyB1cGRhdGVzIHRoZSBtZW1vcnkgYWRkcmVzcyBpbiB0aGUgZmlybXdhcmUgdG8gcmVmZXJlbmNlIHRoZSBuZXcKKyAqIHRhcmdldCBidWZmZXIuCisgKi8KK2ludCBpd2xfcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OworCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHdyaXRlOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOworCXdyaXRlID0gcnhxLT53cml0ZSAmIH4weDc7CisJd2hpbGUgKChpd2xfcnhfcXVldWVfc3BhY2UocnhxKSA+IDApICYmIChyeHEtPmZyZWVfY291bnQpKSB7CisJCS8qIEdldCBuZXh0IGZyZWUgUnggYnVmZmVyLCByZW1vdmUgZnJvbSBmcmVlIGxpc3QgKi8KKwkJZWxlbWVudCA9IHJ4cS0+cnhfZnJlZS5uZXh0OworCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CisJCWxpc3RfZGVsKGVsZW1lbnQpOworCisJCS8qIFBvaW50IHRvIFJ4IGJ1ZmZlciB2aWEgbmV4dCBSQkQgaW4gY2lyY3VsYXIgYnVmZmVyICovCisJCXJ4cS0+YmRbcnhxLT53cml0ZV0gPSBpd2xfZG1hX2FkZHIycmJkX3B0cihwcml2LCByeGItPmRtYV9hZGRyKTsKKwkJcnhxLT5xdWV1ZVtyeHEtPndyaXRlXSA9IHJ4YjsKKwkJcnhxLT53cml0ZSA9IChyeHEtPndyaXRlICsgMSkgJiBSWF9RVUVVRV9NQVNLOworCQlyeHEtPmZyZWVfY291bnQtLTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7CisJLyogSWYgdGhlIHByZS1hbGxvY2F0ZWQgYnVmZmVyIHBvb2wgaXMgZHJvcHBpbmcgbG93LCBzY2hlZHVsZSB0bworCSAqIHJlZmlsbCBpdCAqLworCWlmIChyeHEtPmZyZWVfY291bnQgPD0gUlhfTE9XX1dBVEVSTUFSSykKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yeF9yZXBsZW5pc2gpOworCisKKwkvKiBJZiB3ZSd2ZSBhZGRlZCBtb3JlIHNwYWNlIGZvciB0aGUgZmlybXdhcmUgdG8gcGxhY2UgZGF0YSwgdGVsbCBpdC4KKwkgKiBJbmNyZW1lbnQgZGV2aWNlJ3Mgd3JpdGUgcG9pbnRlciBpbiBtdWx0aXBsZXMgb2YgOC4gKi8KKwlpZiAoKHdyaXRlICE9IChyeHEtPndyaXRlICYgfjB4NykpCisJICAgIHx8IChhYnMocnhxLT53cml0ZSAtIHJ4cS0+cmVhZCkgPiA3KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CisJCXJ4cS0+bmVlZF91cGRhdGUgPSAxOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHEtPmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgcnhxKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcXVldWVfcmVzdG9jayk7CisKKworLyoqCisgKiBpd2xfcnhfcmVwbGVuaXNoIC0gTW92ZSBhbGwgdXNlZCBwYWNrZXQgZnJvbSByeF91c2VkIHRvIHJ4X2ZyZWUKKyAqCisgKiBXaGVuIG1vdmluZyB0byByeF9mcmVlIGFuIFNLQiBpcyBhbGxvY2F0ZWQgZm9yIHRoZSBzbG90LgorICoKKyAqIEFsc28gcmVzdG9jayB0aGUgUnggcXVldWUgdmlhIGl3bF9yeF9xdWV1ZV9yZXN0b2NrLgorICogVGhpcyBpcyBjYWxsZWQgYXMgYSBzY2hlZHVsZWQgd29yayBpdGVtIChleGNlcHQgZm9yIGR1cmluZyBpbml0aWFsaXphdGlvbikKKyAqLwordm9pZCBpd2xfcnhfYWxsb2NhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKKwlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJ4cS0+cnhfdXNlZCkpIHsKKwkJZWxlbWVudCA9IHJ4cS0+cnhfdXNlZC5uZXh0OworCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CisKKwkJLyogQWxsb2MgYSBuZXcgcmVjZWl2ZSBidWZmZXIgKi8KKwkJcnhiLT5za2IgPSBhbGxvY19za2IocHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAorCQkJCV9fR0ZQX05PV0FSTiB8IEdGUF9BVE9NSUMpOworCQlpZiAoIXJ4Yi0+c2tiKSB7CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCXByaW50ayhLRVJOX0NSSVQgRFJWX05BTUUKKwkJCQkgICAgICAgIjogQ2FuIG5vdCBhbGxvY2F0ZSBTS0IgYnVmZmVyc1xuIik7CisJCQkvKiBXZSBkb24ndCByZXNjaGVkdWxlIHJlcGxlbmlzaCB3b3JrIGhlcmUgLS0gd2Ugd2lsbAorCQkJICogY2FsbCB0aGUgcmVzdG9jayBtZXRob2QgYW5kIGlmIGl0IHN0aWxsIG5lZWRzCisJCQkgKiBtb3JlIGJ1ZmZlcnMgaXQgd2lsbCBzY2hlZHVsZSByZXBsZW5pc2ggKi8KKwkJCWJyZWFrOworCQl9CisJCXByaXYtPmFsbG9jX3J4Yl9za2IrKzsKKwkJbGlzdF9kZWwoZWxlbWVudCk7CisKKwkJLyogR2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgUkIvU0tCICovCisJCXJ4Yi0+ZG1hX2FkZHIgPQorCQkgICAgcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcnhiLT5za2ItPmRhdGEsCisJCQkgICBwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWxpc3RfYWRkX3RhaWwoJnJ4Yi0+bGlzdCwgJnJ4cS0+cnhfZnJlZSk7CisJCXJ4cS0+ZnJlZV9jb3VudCsrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHEtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X2FsbG9jYXRlKTsKKwordm9pZCBpd2xfcnhfcmVwbGVuaXNoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaXdsX3J4X2FsbG9jYXRlKHByaXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpd2xfcnhfcXVldWVfcmVzdG9jayhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yeF9yZXBsZW5pc2gpOworCisKKy8qIEFzc3VtZXMgdGhhdCB0aGUgc2tiIGZpZWxkIG9mIHRoZSBidWZmZXJzIGluICdwb29sJyBpcyBrZXB0IGFjY3VyYXRlLgorICogSWYgYW4gU0tCIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgUE9PTCBuZWVkcyB0byBoYXZlIGl0cyBTS0Igc2V0IHRvIE5VTEwKKyAqIFRoaXMgZnJlZSByb3V0aW5lIHdhbGtzIHRoZSBsaXN0IG9mIFBPT0wgZW50cmllcyBhbmQgaWYgU0tCIGlzIHNldCB0bworICogbm9uIE5VTEwgaXQgaXMgdW5tYXBwZWQgYW5kIGZyZWVkCisgKi8KK3ZvaWQgaXdsX3J4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IFJYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlM7IGkrKykgeworCQlpZiAocnhxLT5wb29sW2ldLnNrYiAhPSBOVUxMKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCisJCQkJCSByeHEtPnBvb2xbaV0uZG1hX2FkZHIsCisJCQkJCSBwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJZGV2X2tmcmVlX3NrYihyeHEtPnBvb2xbaV0uc2tiKTsKKwkJfQorCX0KKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwgNCAqIFJYX1FVRVVFX1NJWkUsIHJ4cS0+YmQsCisJCQkgICAgcnhxLT5kbWFfYWRkcik7CisJcnhxLT5iZCA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yeF9xdWV1ZV9mcmVlKTsKKworaW50IGl3bF9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pbml0KCZyeHEtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X2ZyZWUpOworCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOworCisJLyogQWxsb2MgdGhlIGNpcmN1bGFyIGJ1ZmZlciBvZiBSZWFkIEJ1ZmZlciBEZXNjcmlwdG9ycyAoUkJEcykgKi8KKwlyeHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgJnJ4cS0+ZG1hX2FkZHIpOworCWlmICghcnhxLT5iZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBGaWxsIHRoZSByeF91c2VkIHF1ZXVlIHdpdGggX2FsbF8gb2YgdGhlIFJ4IGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUlhfRlJFRV9CVUZGRVJTICsgUlhfUVVFVUVfU0laRTsgaSsrKQorCQlsaXN0X2FkZF90YWlsKCZyeHEtPnBvb2xbaV0ubGlzdCwgJnJ4cS0+cnhfdXNlZCk7CisKKwkvKiBTZXQgdXMgc28gdGhhdCB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgdXNlZCBhbGwgYnVmZmVycywgYnV0IGhhdmUKKwkgKiBub3QgcmVzdG9ja2VkIHRoZSBSeCBxdWV1ZSB3aXRoIGZyZXNoIGJ1ZmZlcnMgKi8KKwlyeHEtPnJlYWQgPSByeHEtPndyaXRlID0gMDsKKwlyeHEtPmZyZWVfY291bnQgPSAwOworCXJ4cS0+bmVlZF91cGRhdGUgPSAwOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcXVldWVfYWxsb2MpOworCit2b2lkIGl3bF9yeF9xdWV1ZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKKwlJTklUX0xJU1RfSEVBRCgmcnhxLT5yeF9mcmVlKTsKKwlJTklUX0xJU1RfSEVBRCgmcnhxLT5yeF91c2VkKTsKKwkvKiBGaWxsIHRoZSByeF91c2VkIHF1ZXVlIHdpdGggX2FsbF8gb2YgdGhlIFJ4IGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUlhfRlJFRV9CVUZGRVJTICsgUlhfUVVFVUVfU0laRTsgaSsrKSB7CisJCS8qIEluIHRoZSByZXNldCBmdW5jdGlvbiwgdGhlc2UgYnVmZmVycyBtYXkgaGF2ZSBiZWVuIGFsbG9jYXRlZAorCQkgKiB0byBhbiBTS0IsIHNvIHdlIG5lZWQgdG8gdW5tYXAgYW5kIGZyZWUgcG90ZW50aWFsIHN0b3JhZ2UgKi8KKwkJaWYgKHJ4cS0+cG9vbFtpXS5za2IgIT0gTlVMTCkgeworCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAorCQkJCQkgcnhxLT5wb29sW2ldLmRtYV9hZGRyLAorCQkJCQkgcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXByaXYtPmFsbG9jX3J4Yl9za2ItLTsKKwkJCWRldl9rZnJlZV9za2IocnhxLT5wb29sW2ldLnNrYik7CisJCQlyeHEtPnBvb2xbaV0uc2tiID0gTlVMTDsKKwkJfQorCQlsaXN0X2FkZF90YWlsKCZyeHEtPnBvb2xbaV0ubGlzdCwgJnJ4cS0+cnhfdXNlZCk7CisJfQorCisJLyogU2V0IHVzIHNvIHRoYXQgd2UgaGF2ZSBwcm9jZXNzZWQgYW5kIHVzZWQgYWxsIGJ1ZmZlcnMsIGJ1dCBoYXZlCisJICogbm90IHJlc3RvY2tlZCB0aGUgUnggcXVldWUgd2l0aCBmcmVzaCBidWZmZXJzICovCisJcnhxLT5yZWFkID0gcnhxLT53cml0ZSA9IDA7CisJcnhxLT5mcmVlX2NvdW50ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHEtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3F1ZXVlX3Jlc2V0KTsKKworaW50IGl3bF9yeF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcmJfc2l6ZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5hbXNkdV9zaXplXzhLKQorCQlyYl9zaXplID0gRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SQl9TSVpFXzhLOworCWVsc2UKKwkJcmJfc2l6ZSA9IEZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkJfU0laRV80SzsKKworCS8qIFN0b3AgUnggRE1BICovCisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcsIDApOworCisJLyogUmVzZXQgZHJpdmVyJ3MgUnggcXVldWUgd3JpdGUgaW5kZXggKi8KKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfV1BUUl9SRUcsIDApOworCisJLyogVGVsbCBkZXZpY2Ugd2hlcmUgdG8gZmluZCBSQkQgY2lyY3VsYXIgYnVmZmVyIGluIERSQU0gKi8KKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfQkFTRV9SRUcsCisJCQkgICByeHEtPmRtYV9hZGRyID4+IDgpOworCisJLyogVGVsbCBkZXZpY2Ugd2hlcmUgaW4gRFJBTSB0byB1cGRhdGUgaXRzIFJ4IHN0YXR1cyAqLworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9TVFRTX1dQVFJfUkVHLAorCQkJICAgKHByaXYtPnNoYXJlZF9waHlzICsgcHJpdi0+cmJfY2xvc2VkX29mZnNldCkgPj4gNCk7CisKKwkvKiBFbmFibGUgUnggRE1BLCBlbmFibGUgaG9zdCBpbnRlcnJ1cHQsIFJ4IGJ1ZmZlciBzaXplIDRrLCAyNTYgUkJEcyAqLworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fUkNTUl9DSE5MMF9DT05GSUdfUkVHLAorCQkJICAgRkhfUkNTUl9SWF9DT05GSUdfQ0hOTF9FTl9FTkFCTEVfVkFMIHwKKwkJCSAgIEZIX1JDU1JfQ0hOTDBfUlhfQ09ORklHX0lSUV9ERVNUX0lOVF9IT1NUX1ZBTCB8CisJCQkgICByYl9zaXplIHwKKwkJCSAgICAgLyogMHgxMCA8PCA0IHwgKi8KKwkJCSAgIChSWF9RVUVVRV9TSVpFX0xPRyA8PAorCQkJICAgICAgRkhfUkNTUl9SWF9DT05GSUdfUkJEQ0JfU0laRV9CSVRTSElGVCkpOworCisJLyoKKwkgKiBpd2xfd3JpdGUzMihwcml2LENTUl9JTlRfQ09BTF9SRUcsMCk7CisJICovCisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitpbnQgaXdsX3J4cV9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHN0b3AgUnggRE1BICovCisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcsIDApOworCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgRkhfTUVNX1JTU1JfUlhfU1RBVFVTX1JFRywKKwkJCQkgICAgICgxIDw8IDI0KSwgMTAwMCk7CisJaWYgKHJldCA8IDApCisJCUlXTF9FUlJPUigiQ2FuJ3Qgc3RvcCBSeCBETUEuXG4iKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yeHFfc3RvcCk7CisKK3ZvaWQgaXdsX3J4X21pc3NlZF9iZWFjb25fbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQorCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2w0OTY1X21pc3NlZF9iZWFjb25fbm90aWYgKm1pc3NlZF9iZWFjb247CisKKwltaXNzZWRfYmVhY29uID0gJnBrdC0+dS5taXNzZWRfYmVhY29uOworCWlmIChsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZXF1dGl2ZV9taXNzZWRfYmVhY29ucykgPiA1KSB7CisJCUlXTF9ERUJVR19DQUxJQigibWlzc2VkIGJjbiBjbnNxICVkIHRvdGwgJWQgcmNkICVkIGV4cGN0ZCAlZFxuIiwKKwkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPnRvdGFsX21pc3NlZF9iZWNvbnMpLAorCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX3JlY3ZkX2JlYWNvbnMpLAorCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX2V4cGVjdGVkX2JlYWNvbnMpKTsKKwkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQorCQkJaXdsX2luaXRfc2Vuc2l0aXZpdHkocHJpdik7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfbWlzc2VkX2JlYWNvbl9ub3RpZik7CisKK2ludCBpd2xfcnhfYWdnX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCB0aWQsIHUxNiBzc24pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RhX2lkOworCisJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKKwlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pCisJCXJldHVybiAtRU5YSU87CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGF0aW9uX2ZsYWdzX21zayA9IDA7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9BRERCQV9USURfTVNLOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmFkZF9pbW1lZGlhdGVfYmFfdGlkID0gKHU4KXRpZDsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5hZGRfaW1tZWRpYXRlX2JhX3NzbiA9IGNwdV90b19sZTE2KHNzbik7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwKKwkJCQkJQ01EX0FTWU5DKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X2FnZ19zdGFydCk7CisKK2ludCBpd2xfcnhfYWdnX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IHRpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGFfaWQ7CisKKwlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOworCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikKKwkJcmV0dXJuIC1FTlhJTzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YXRpb25fZmxhZ3NfbXNrID0gMDsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0RFTEJBX1RJRF9NU0s7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEucmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQgPSAodTgpdGlkOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsCisJCQkJCUNNRF9BU1lOQyk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yeF9hZ2dfc3RvcCk7CisKKworLyogQ2FsY3VsYXRlIG5vaXNlIGxldmVsLCBiYXNlZCBvbiBtZWFzdXJlbWVudHMgZHVyaW5nIG5ldHdvcmsgc2lsZW5jZSBqdXN0CisgKiAgIGJlZm9yZSBhcnJpdmluZyBiZWFjb24uICBUaGlzIG1lYXN1cmVtZW50IGNhbiBiZSBkb25lIG9ubHkgaWYgd2Uga25vdworICogICBleGFjdGx5IHdoZW4gdG8gZXhwZWN0IGJlYWNvbnMsIHRoZXJlZm9yZSBvbmx5IHdoZW4gd2UncmUgYXNzb2NpYXRlZC4gKi8KK3N0YXRpYyB2b2lkIGl3bF9yeF9jYWxjX25vaXNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9pbmZvCisJCQkJPSAmKHByaXYtPnN0YXRpc3RpY3MucnguZ2VuZXJhbCk7CisJaW50IG51bV9hY3RpdmVfcnggPSAwOworCWludCB0b3RhbF9zaWxlbmNlID0gMDsKKwlpbnQgYmNuX3NpbGVuY2VfYSA9CisJCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSkgJiBJTl9CQU5EX0ZJTFRFUjsKKwlpbnQgYmNuX3NpbGVuY2VfYiA9CisJCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYikgJiBJTl9CQU5EX0ZJTFRFUjsKKwlpbnQgYmNuX3NpbGVuY2VfYyA9CisJCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYykgJiBJTl9CQU5EX0ZJTFRFUjsKKworCWlmIChiY25fc2lsZW5jZV9hKSB7CisJCXRvdGFsX3NpbGVuY2UgKz0gYmNuX3NpbGVuY2VfYTsKKwkJbnVtX2FjdGl2ZV9yeCsrOworCX0KKwlpZiAoYmNuX3NpbGVuY2VfYikgeworCQl0b3RhbF9zaWxlbmNlICs9IGJjbl9zaWxlbmNlX2I7CisJCW51bV9hY3RpdmVfcngrKzsKKwl9CisJaWYgKGJjbl9zaWxlbmNlX2MpIHsKKwkJdG90YWxfc2lsZW5jZSArPSBiY25fc2lsZW5jZV9jOworCQludW1fYWN0aXZlX3J4Kys7CisJfQorCisJLyogQXZlcmFnZSBhbW9uZyBhY3RpdmUgYW50ZW5uYXMgKi8KKwlpZiAobnVtX2FjdGl2ZV9yeCkKKwkJcHJpdi0+bGFzdF9yeF9ub2lzZSA9ICh0b3RhbF9zaWxlbmNlIC8gbnVtX2FjdGl2ZV9yeCkgLSAxMDc7CisJZWxzZQorCQlwcml2LT5sYXN0X3J4X25vaXNlID0gSVdMX05PSVNFX01FQVNfTk9UX0FWQUlMQUJMRTsKKworCUlXTF9ERUJVR19DQUxJQigiaW5iYW5kIHNpbGVuY2UgYSAldSwgYiAldSwgYyAldSwgZEJtICVkXG4iLAorCQkJYmNuX3NpbGVuY2VfYSwgYmNuX3NpbGVuY2VfYiwgYmNuX3NpbGVuY2VfYywKKwkJCXByaXYtPmxhc3Rfcnhfbm9pc2UpOworfQorCisjZGVmaW5lIFJFR19SRUNBTElCX1BFUklPRCAoNjApCisKK3ZvaWQgaXdsX3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJaW50IGNoYW5nZTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisKKwlJV0xfREVCVUdfUlgoIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAorCQkgICAgIChpbnQpc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpLCBwa3QtPmxlbik7CisKKwljaGFuZ2UgPSAoKHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSAhPQorCQkgICBwa3QtPnUuc3RhdHMuZ2VuZXJhbC50ZW1wZXJhdHVyZSkgfHwKKwkJICAoKHByaXYtPnN0YXRpc3RpY3MuZmxhZyAmCisJCSAgICBTVEFUSVNUSUNTX1JFUExZX0ZMR19GQVRfTU9ERV9NU0spICE9CisJCSAgIChwa3QtPnUuc3RhdHMuZmxhZyAmIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0ZBVF9NT0RFX01TSykpKTsKKworCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcywgJnBrdC0+dS5zdGF0cywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpKTsKKworCXNldF9iaXQoU1RBVFVTX1NUQVRJU1RJQ1MsICZwcml2LT5zdGF0dXMpOworCisJLyogUmVzY2hlZHVsZSB0aGUgc3RhdGlzdGljcyB0aW1lciB0byBvY2N1ciBpbgorCSAqIFJFR19SRUNBTElCX1BFUklPRCBzZWNvbmRzIHRvIGVuc3VyZSB3ZSBnZXQgYQorCSAqIHRoZXJtYWwgdXBkYXRlIGV2ZW4gaWYgdGhlIHVDb2RlIGRvZXNuJ3QgZ2l2ZQorCSAqIHVzIG9uZSAqLworCW1vZF90aW1lcigmcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYywgamlmZmllcyArCisJCSAgbXNlY3NfdG9famlmZmllcyhSRUdfUkVDQUxJQl9QRVJJT0QgKiAxMDAwKSk7CisKKwlpZiAodW5saWtlbHkoIXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpICYmCisJICAgIChwa3QtPmhkci5jbWQgPT0gU1RBVElTVElDU19OT1RJRklDQVRJT04pKSB7CisJCWl3bF9yeF9jYWxjX25vaXNlKHByaXYpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJ1bl90aW1lX2NhbGliX3dvcmspOworCX0KKworCWl3bF9sZWRzX2JhY2tncm91bmQocHJpdik7CisKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dGVtcGVyYXR1cmUgJiYgY2hhbmdlKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wZXJhdHVyZShwcml2KTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3N0YXRpc3RpY3MpOworCisjZGVmaW5lIFBFUkZFQ1RfUlNTSSAoLTIwKSAvKiBkQm0gKi8KKyNkZWZpbmUgV09SU1RfUlNTSSAoLTk1KSAgIC8qIGRCbSAqLworI2RlZmluZSBSU1NJX1JBTkdFIChQRVJGRUNUX1JTU0kgLSBXT1JTVF9SU1NJKQorCisvKiBDYWxjdWxhdGUgYW4gaW5kaWNhdGlvbiBvZiByeCBzaWduYWwgcXVhbGl0eSAoYSBwZXJjZW50YWdlLCBub3QgZEJtISkuCisgKiBTZWUgaHR0cDovL3d3dy5jZXMuY2xlbXNvbi5lZHUvbGludXgvc2lnbmFsX3F1YWxpdHkuc2h0bWwgZm9yIGluZm8KKyAqICAgYWJvdXQgZm9ybXVsYXMgdXNlZCBiZWxvdy4gKi8KK3N0YXRpYyBpbnQgaXdsX2NhbGNfc2lnX3F1YWwoaW50IHJzc2lfZGJtLCBpbnQgbm9pc2VfZGJtKQoreworCWludCBzaWdfcXVhbDsKKwlpbnQgZGVncmFkYXRpb24gPSBQRVJGRUNUX1JTU0kgLSByc3NpX2RibTsKKworCS8qIElmIHdlIGdldCBhIG5vaXNlIG1lYXN1cmVtZW50LCB1c2Ugc2lnbmFsLXRvLW5vaXNlIHJhdGlvIChTTlIpCisJICogYXMgaW5kaWNhdG9yOyBmb3JtdWxhIGlzIChzaWduYWwgZGJtIC0gbm9pc2UgZGJtKS4KKwkgKiBTTlIgYXQgb3IgYWJvdmUgNDAgaXMgYSBncmVhdCBzaWduYWwgKDEwMCUpLgorCSAqIEJlbG93IHRoYXQsIHNjYWxlIHRvIGZpdCBTTlIgb2YgMCAtIDQwIGRCIHdpdGhpbiAwIC0gMTAwJSBpbmRpY2F0b3IuCisJICogV2Vha2VzdCB1c2FibGUgc2lnbmFsIGlzIHVzdWFsbHkgMTAgLSAxNSBkQiBTTlIuICovCisJaWYgKG5vaXNlX2RibSkgeworCQlpZiAocnNzaV9kYm0gLSBub2lzZV9kYm0gPj0gNDApCisJCQlyZXR1cm4gMTAwOworCQllbHNlIGlmIChyc3NpX2RibSA8IG5vaXNlX2RibSkKKwkJCXJldHVybiAwOworCQlzaWdfcXVhbCA9ICgocnNzaV9kYm0gLSBub2lzZV9kYm0pICogNSkgLyAyOworCisJLyogRWxzZSB1c2UganVzdCB0aGUgc2lnbmFsIGxldmVsLgorCSAqIFRoaXMgZm9ybXVsYSBpcyBhIGxlYXN0IHNxdWFyZXMgZml0IG9mIGRhdGEgcG9pbnRzIGNvbGxlY3RlZCBhbmQKKwkgKiAgIGNvbXBhcmVkIHdpdGggYSByZWZlcmVuY2Ugc3lzdGVtIHRoYXQgaGFkIGEgcGVyY2VudGFnZSAoJSkgZGlzcGxheQorCSAqICAgZm9yIHNpZ25hbCBxdWFsaXR5LiAqLworCX0gZWxzZQorCQlzaWdfcXVhbCA9ICgxMDAgKiAoUlNTSV9SQU5HRSAqIFJTU0lfUkFOR0UpIC0gZGVncmFkYXRpb24gKgorCQkJICAgICgxNSAqIFJTU0lfUkFOR0UgKyA2MiAqIGRlZ3JhZGF0aW9uKSkgLworCQkJICAgKFJTU0lfUkFOR0UgKiBSU1NJX1JBTkdFKTsKKworCWlmIChzaWdfcXVhbCA+IDEwMCkKKwkJc2lnX3F1YWwgPSAxMDA7CisJZWxzZSBpZiAoc2lnX3F1YWwgPCAxKQorCQlzaWdfcXVhbCA9IDA7CisKKwlyZXR1cm4gc2lnX3F1YWw7Cit9CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCisvKioKKyAqIGl3bF9kYmdfcmVwb3J0X2ZyYW1lIC0gZHVtcCBmcmFtZSB0byBzeXNsb2cgZHVyaW5nIGRlYnVnIHNlc3Npb25zCisgKgorICogWW91IG1heSBoYWNrIHRoaXMgZnVuY3Rpb24gdG8gc2hvdyBkaWZmZXJlbnQgYXNwZWN0cyBvZiByZWNlaXZlZCBmcmFtZXMsCisgKiBpbmNsdWRpbmcgc2VsZWN0aXZlIGZyYW1lIGR1bXBzLgorICogZ3JvdXAxMDAgcGFyYW1ldGVyIHNlbGVjdHMgd2hldGhlciB0byBzaG93IDEgb3V0IG9mIDEwMCBnb29kIGZyYW1lcy4KKyAqCisgKiBUT0RPOiAgVGhpcyB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciAzOTQ1LCBuZWVkIHRvIGF1ZGl0IGZvcgorICogICAgICAgIHByb3BlciBvcGVyYXRpb24gd2l0aCA0OTY1LgorICovCitzdGF0aWMgdm9pZCBpd2xfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKK3sKKwl1MzIgdG9fdXM7CisJdTMyIHByaW50X3N1bW1hcnkgPSAwOworCXUzMiBwcmludF9kdW1wID0gMDsJLyogc2V0IHRvIDEgdG8gZHVtcCBhbGwgZnJhbWVzJyBjb250ZW50cyAqLworCXUzMiBodW5kcmVkID0gMDsKKwl1MzIgZGF0YWZyYW1lID0gMDsKKwlfX2xlMTYgZmM7CisJdTE2IHNlcV9jdGw7CisJdTE2IGNoYW5uZWw7CisJdTE2IHBoeV9mbGFnczsKKwlpbnQgcmF0ZV9zeW07CisJdTE2IGxlbmd0aDsKKwl1MTYgc3RhdHVzOworCXUxNiBiY25fdG1yOworCXUzMiB0c2ZfbG93OworCXU2NCB0c2Y7CisJdTggcnNzaTsKKwl1OCBhZ2M7CisJdTE2IHNpZ19hdmc7CisJdTE2IG5vaXNlX2RpZmY7CisJc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfc3RhdHMgKnJ4X3N0YXRzID0gSVdMX1JYX1NUQVRTKHBrdCk7CisJc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfaGRyICpyeF9oZHIgPSBJV0xfUlhfSERSKHBrdCk7CisJc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfZW5kICpyeF9lbmQgPSBJV0xfUlhfRU5EKHBrdCk7CisJdTggKmRhdGEgPSBJV0xfUlhfREFUQShwa3QpOworCisJaWYgKGxpa2VseSghKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX1JYKSkpCisJCXJldHVybjsKKworCS8qIE1BQyBoZWFkZXIgKi8KKwlmYyA9IGhlYWRlci0+ZnJhbWVfY29udHJvbDsKKwlzZXFfY3RsID0gbGUxNl90b19jcHUoaGVhZGVyLT5zZXFfY3RybCk7CisKKwkvKiBtZXRhZGF0YSAqLworCWNoYW5uZWwgPSBsZTE2X3RvX2NwdShyeF9oZHItPmNoYW5uZWwpOworCXBoeV9mbGFncyA9IGxlMTZfdG9fY3B1KHJ4X2hkci0+cGh5X2ZsYWdzKTsKKwlyYXRlX3N5bSA9IHJ4X2hkci0+cmF0ZTsKKwlsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9oZHItPmxlbik7CisKKwkvKiBlbmQtb2YtZnJhbWUgc3RhdHVzIGFuZCB0aW1lc3RhbXAgKi8KKwlzdGF0dXMgPSBsZTMyX3RvX2NwdShyeF9lbmQtPnN0YXR1cyk7CisJYmNuX3RtciA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+YmVhY29uX3RpbWVzdGFtcCk7CisJdHNmX2xvdyA9IGxlNjRfdG9fY3B1KHJ4X2VuZC0+dGltZXN0YW1wKSAmIDB4MGZmZmZmZmZmOworCXRzZiA9IGxlNjRfdG9fY3B1KHJ4X2VuZC0+dGltZXN0YW1wKTsKKworCS8qIHNpZ25hbCBzdGF0aXN0aWNzICovCisJcnNzaSA9IHJ4X3N0YXRzLT5yc3NpOworCWFnYyA9IHJ4X3N0YXRzLT5hZ2M7CisJc2lnX2F2ZyA9IGxlMTZfdG9fY3B1KHJ4X3N0YXRzLT5zaWdfYXZnKTsKKwlub2lzZV9kaWZmID0gbGUxNl90b19jcHUocnhfc3RhdHMtPm5vaXNlX2RpZmYpOworCisJdG9fdXMgPSAhY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEsIHByaXYtPm1hY19hZGRyKTsKKworCS8qIGlmIGRhdGEgZnJhbWUgaXMgdG8gdXMgYW5kIGFsbCBpcyBnb29kLAorCSAqICAgKG9wdGlvbmFsbHkpIHByaW50IHN1bW1hcnkgZm9yIG9ubHkgMSBvdXQgb2YgZXZlcnkgMTAwICovCisJaWYgKHRvX3VzICYmIChmYyAmIH5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKSA9PQorCSAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRlRZUEVfREFUQSkpIHsKKwkJZGF0YWZyYW1lID0gMTsKKwkJaWYgKCFncm91cDEwMCkKKwkJCXByaW50X3N1bW1hcnkgPSAxOwkvKiBwcmludCBlYWNoIGZyYW1lICovCisJCWVsc2UgaWYgKHByaXYtPmZyYW1lY250X3RvX3VzIDwgMTAwKSB7CisJCQlwcml2LT5mcmFtZWNudF90b191cysrOworCQkJcHJpbnRfc3VtbWFyeSA9IDA7CisJCX0gZWxzZSB7CisJCQlwcml2LT5mcmFtZWNudF90b191cyA9IDA7CisJCQlwcmludF9zdW1tYXJ5ID0gMTsKKwkJCWh1bmRyZWQgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJLyogcHJpbnQgc3VtbWFyeSBmb3IgYWxsIG90aGVyIGZyYW1lcyAqLworCQlwcmludF9zdW1tYXJ5ID0gMTsKKwl9CisKKwlpZiAocHJpbnRfc3VtbWFyeSkgeworCQljaGFyICp0aXRsZTsKKwkJaW50IHJhdGVfaWR4OworCQl1MzIgYml0cmF0ZTsKKworCQlpZiAoaHVuZHJlZCkKKwkJCXRpdGxlID0gIjEwMEZyYW1lcyI7CisJCWVsc2UgaWYgKGllZWU4MDIxMV9oYXNfcmV0cnkoZmMpKQorCQkJdGl0bGUgPSAiUmV0cnkiOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVzcChmYykpCisJCQl0aXRsZSA9ICJBc2NSc3AiOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKGZjKSkKKwkJCXRpdGxlID0gIlJhc1JzcCI7CisJCWVsc2UgaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGZjKSkgeworCQkJdGl0bGUgPSAiUHJiUnNwIjsKKwkJCXByaW50X2R1bXAgPSAxOwkvKiBkdW1wIGZyYW1lIGNvbnRlbnRzICovCisJCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpIHsKKwkJCXRpdGxlID0gIkJlYWNvbiI7CisJCQlwcmludF9kdW1wID0gMTsJLyogZHVtcCBmcmFtZSBjb250ZW50cyAqLworCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19hdGltKGZjKSkKKwkJCXRpdGxlID0gIkFUSU0iOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXV0aChmYykpCisJCQl0aXRsZSA9ICJBdXRoIjsKKwkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RlYXV0aChmYykpCisJCQl0aXRsZSA9ICJEZUF1dGgiOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfZGlzYXNzb2MoZmMpKQorCQkJdGl0bGUgPSAiRGlzQXNzb2MiOworCQllbHNlCisJCQl0aXRsZSA9ICJGcmFtZSI7CisKKwkJcmF0ZV9pZHggPSBpd2xfaHdyYXRlX3RvX3BsY3BfaWR4KHJhdGVfc3ltKTsKKwkJaWYgKHVubGlrZWx5KHJhdGVfaWR4ID09IC0xKSkKKwkJCWJpdHJhdGUgPSAwOworCQllbHNlCisJCQliaXRyYXRlID0gaXdsX3JhdGVzW3JhdGVfaWR4XS5pZWVlIC8gMjsKKworCQkvKiBwcmludCBmcmFtZSBzdW1tYXJ5LgorCQkgKiBNQUMgYWRkcmVzc2VzIHNob3cganVzdCB0aGUgbGFzdCBieXRlIChmb3IgYnJldml0eSksCisJCSAqICAgIGJ1dCB5b3UgY2FuIGhhY2sgaXQgdG8gc2hvdyBtb3JlLCBpZiB5b3UnZCBsaWtlIHRvLiAqLworCQlpZiAoZGF0YWZyYW1lKQorCQkJSVdMX0RFQlVHX1JYKCIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgorCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgY2hubD0lZCwgcmF0ZT0ldSwgXG4iLAorCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKKwkJCQkgICAgIGxlbmd0aCwgcnNzaSwgY2hhbm5lbCwgYml0cmF0ZSk7CisJCWVsc2UgeworCQkJLyogc3JjL2RzdCBhZGRyZXNzZXMgYXNzdW1lIG1hbmFnZWQgbW9kZSAqLworCQkJSVdMX0RFQlVHX1JYKCIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCAiCisJCQkJICAgICAic3JjPTB4JTAyeCwgcnNzaT0ldSwgdGltPSVsdSB1c2VjLCAiCisJCQkJICAgICAicGh5PTB4JTAyeCwgY2hubD0lZFxuIiwKKwkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCisJCQkJICAgICBoZWFkZXItPmFkZHIzWzVdLCByc3NpLAorCQkJCSAgICAgdHNmX2xvdyAtIHByaXYtPnNjYW5fc3RhcnRfdHNmLAorCQkJCSAgICAgcGh5X2ZsYWdzLCBjaGFubmVsKTsKKwkJfQorCX0KKwlpZiAocHJpbnRfZHVtcCkKKwkJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsCisJCQkJCSAgICBpbnQgZ3JvdXAxMDApCit7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaXdsX2FkZF9yYWRpb3RhcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMgKnJ4X3N0YXJ0LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMsCisJCQkJIHUzMiBhbXBkdV9zdGF0dXMpCit7CisJczggc2lnbmFsID0gc3RhdHMtPnNpZ25hbDsKKwlzOCBub2lzZSA9IDA7CisJaW50IHJhdGUgPSBzdGF0cy0+cmF0ZV9pZHg7CisJdTY0IHRzZiA9IHN0YXRzLT5tYWN0aW1lOworCV9fbGUxNiBhbnRlbm5hOworCV9fbGUxNiBwaHlfZmxhZ3NfaHcgPSByeF9zdGFydC0+cGh5X2ZsYWdzOworCXN0cnVjdCBpd2w0OTY1X3J0X3J4X2hkciB7CisJCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHJ0X2hkcjsKKwkJX19sZTY0IHJ0X3RzZjsJCS8qIFRTRiAqLworCQl1OCBydF9mbGFnczsJCS8qIHJhZGlvdGFwIHBhY2tldCBmbGFncyAqLworCQl1OCBydF9yYXRlOwkJLyogcmF0ZSBpbiA1MDBrYi9zICovCisJCV9fbGUxNiBydF9jaGFubmVsTUh6OwkvKiBjaGFubmVsIGluIE1IeiAqLworCQlfX2xlMTYgcnRfY2hiaXRtYXNrOwkvKiBjaGFubmVsIGJpdGZpZWxkICovCisJCXM4IHJ0X2RibXNpZ25hbDsJLyogc2lnbmFsIGluIGRCbSwga2x1Z2VkIHRvIHNpZ25lZCAqLworCQlzOCBydF9kYm1ub2lzZTsKKwkJdTggcnRfYW50ZW5uYTsJCS8qIGFudGVubmEgbnVtYmVyICovCisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKml3bDQ5NjVfcnQ7CisKKwkvKiBUT0RPOiBXZSB3b24ndCBoYXZlIGVub3VnaCBoZWFkcm9vbSBmb3IgSFQgZnJhbWVzLiBGaXggaXQgbGF0ZXIuICovCisJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgc2l6ZW9mKCppd2w0OTY1X3J0KSkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJub3QgZW5vdWdoIGhlYWRyb29tIFslZF0gZm9yICIKKwkJCSAgICAgICAicmFkaW90YXAgaGVhZCBbJXpkXVxuIiwKKwkJCSAgICAgICBza2JfaGVhZHJvb20oc2tiKSwgc2l6ZW9mKCppd2w0OTY1X3J0KSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBwdXQgcmFkaW90YXAgaGVhZGVyIGluIGZyb250IG9mIDgwMi4xMSBoZWFkZXIgYW5kIGRhdGEgKi8KKwlpd2w0OTY1X3J0ID0gKHZvaWQgKilza2JfcHVzaChza2IsIHNpemVvZigqaXdsNDk2NV9ydCkpOworCisJLyogaW5pdGlhbGlzZSByYWRpb3RhcCBoZWFkZXIgKi8KKwlpd2w0OTY1X3J0LT5ydF9oZHIuaXRfdmVyc2lvbiA9IFBLVEhEUl9SQURJT1RBUF9WRVJTSU9OOworCWl3bDQ5NjVfcnQtPnJ0X2hkci5pdF9wYWQgPSAwOworCisJLyogdG90YWwgaGVhZGVyICsgZGF0YSAqLworCXB1dF91bmFsaWduZWRfbGUxNihzaXplb2YoKml3bDQ5NjVfcnQpLCAmaXdsNDk2NV9ydC0+cnRfaGRyLml0X2xlbik7CisKKwkvKiBJbmRpY2F0ZSBhbGwgdGhlIGZpZWxkcyB3ZSBhZGQgdG8gdGhlIHJhZGlvdGFwIGhlYWRlciAqLworCXB1dF91bmFsaWduZWRfbGUzMigoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkgfAorCQkJICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CisJCQkgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSkgfAorCQkJICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwpIHwKKwkJCSAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMKSB8CisJCQkgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVE5PSVNFKSB8CisJCQkgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQSksCisJCQkgICAmKGl3bDQ5NjVfcnQtPnJ0X2hkci5pdF9wcmVzZW50KSk7CisKKwkvKiBaZXJvIHRoZSBmbGFncywgd2UnbGwgYWRkIHRvIHRoZW0gYXMgd2UgZ28gKi8KKwlpd2w0OTY1X3J0LT5ydF9mbGFncyA9IDA7CisKKwlwdXRfdW5hbGlnbmVkX2xlNjQodHNmLCAmaXdsNDk2NV9ydC0+cnRfdHNmKTsKKworCWl3bDQ5NjVfcnQtPnJ0X2RibXNpZ25hbCA9IHNpZ25hbDsKKwlpd2w0OTY1X3J0LT5ydF9kYm1ub2lzZSA9IG5vaXNlOworCisJLyogQ29udmVydCB0aGUgY2hhbm5lbCBmcmVxdWVuY3kgYW5kIHNldCB0aGUgZmxhZ3MgKi8KKwlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTE2KHN0YXRzLT5mcmVxKSwgJml3bDQ5NjVfcnQtPnJ0X2NoYW5uZWxNSHopOworCWlmICghKHBoeV9mbGFnc19odyAmIFJYX1JFU19QSFlfRkxBR1NfQkFORF8yNF9NU0spKQorCQlwdXRfdW5hbGlnbmVkX2xlMTYoSUVFRTgwMjExX0NIQU5fT0ZETSB8IElFRUU4MDIxMV9DSEFOXzVHSFosCisJCQkJICAgJml3bDQ5NjVfcnQtPnJ0X2NoYml0bWFzayk7CisJZWxzZSBpZiAocGh5X2ZsYWdzX2h3ICYgUlhfUkVTX1BIWV9GTEFHU19NT0RfQ0NLX01TSykKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KElFRUU4MDIxMV9DSEFOX0NDSyB8IElFRUU4MDIxMV9DSEFOXzJHSFosCisJCQkJICAgJml3bDQ5NjVfcnQtPnJ0X2NoYml0bWFzayk7CisJZWxzZQkvKiA4MDIuMTFnICovCisJCXB1dF91bmFsaWduZWRfbGUxNihJRUVFODAyMTFfQ0hBTl9PRkRNIHwgSUVFRTgwMjExX0NIQU5fMkdIWiwKKwkJCQkgICAmaXdsNDk2NV9ydC0+cnRfY2hiaXRtYXNrKTsKKworCWlmIChyYXRlID09IC0xKQorCQlpd2w0OTY1X3J0LT5ydF9yYXRlID0gMDsKKwllbHNlCisJCWl3bDQ5NjVfcnQtPnJ0X3JhdGUgPSBpd2xfcmF0ZXNbcmF0ZV0uaWVlZTsKKworCS8qCisJICogImFudGVubmEgbnVtYmVyIgorCSAqCisJICogSXQgc2VlbXMgdGhhdCB0aGUgYW50ZW5uYSBmaWVsZCBpbiB0aGUgcGh5IGZsYWdzIHZhbHVlCisJICogaXMgYWN0dWFsbHkgYSBiaXRmaWVsZC4gVGhpcyBpcyB1bmRlZmluZWQgYnkgcmFkaW90YXAsCisJICogaXQgd2FudHMgYW4gYWN0dWFsIGFudGVubmEgbnVtYmVyIGJ1dCBJIGFsd2F5cyBnZXQgIjciCisJICogZm9yIG1vc3QgbGVnYWN5IGZyYW1lcyBJIHJlY2VpdmUgaW5kaWNhdGluZyB0aGF0IHRoZQorCSAqIHNhbWUgZnJhbWUgd2FzIHJlY2VpdmVkIG9uIGFsbCB0aHJlZSBSWCBjaGFpbnMuCisJICoKKwkgKiBJIHRoaW5rIHRoaXMgZmllbGQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gZmF2b3VyIG9mIGEKKwkgKiBuZXcgODAyLjExbiByYWRpb3RhcCBmaWVsZCAiUlggY2hhaW5zIiB0aGF0IGlzIGRlZmluZWQKKwkgKiBhcyBhIGJpdG1hc2suCisJICovCisJYW50ZW5uYSA9IHBoeV9mbGFnc19odyAmIFJYX1JFU19QSFlfRkxBR1NfQU5URU5OQV9NU0s7CisJaXdsNDk2NV9ydC0+cnRfYW50ZW5uYSA9IGxlMTZfdG9fY3B1KGFudGVubmEpID4+IDQ7CisKKwkvKiBzZXQgdGhlIHByZWFtYmxlIGZsYWcgaWYgYXBwcm9wcmlhdGUgKi8KKwlpZiAocGh5X2ZsYWdzX2h3ICYgUlhfUkVTX1BIWV9GTEFHU19TSE9SVF9QUkVBTUJMRV9NU0spCisJCWl3bDQ5NjVfcnQtPnJ0X2ZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9GX1NIT1JUUFJFOworCisJc3RhdHMtPmZsYWcgfD0gUlhfRkxBR19SQURJT1RBUDsKK30KKworc3RhdGljIHZvaWQgaXdsX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmYywgdTE2IGxlbikKK3sKKwkvKiAwIC0gbWdtdCwgMSAtIGNudCwgMiAtIGRhdGEgKi8KKwlpbnQgaWR4ID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDI7CisJcHJpdi0+cnhfc3RhdHNbaWR4XS5jbnQrKzsKKwlwcml2LT5yeF9zdGF0c1tpZHhdLmJ5dGVzICs9IGxlbjsKK30KKworLyoKKyAqIHJldHVybnMgbm9uLXplcm8gaWYgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkCisgKi8KK3N0YXRpYyBpbnQgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCQkgICAgICB1MzIgZGVjcnlwdF9yZXMsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKQoreworCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisKKwlpZiAocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLKQorCQlyZXR1cm4gMDsKKworCWlmICghKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkKKwkJcmV0dXJuIDA7CisKKwlJV0xfREVCVUdfUlgoImRlY3J5cHRfcmVzOjB4JXhcbiIsIGRlY3J5cHRfcmVzKTsKKwlzd2l0Y2ggKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spIHsKKwljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfVEtJUDoKKwkJLyogVGhlIHVDb2RlIGhhcyBnb3QgYSBiYWQgcGhhc2UgMSBLZXksIHB1c2hlcyB0aGUgcGFja2V0LgorCQkgKiBEZWNyeXB0aW9uIHdpbGwgYmUgZG9uZSBpbiBTVy4gKi8KKwkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KKwkJICAgIFJYX1JFU19TVEFUVVNfQkFEX0tFWV9UVEFLKQorCQkJYnJlYWs7CisKKwljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfV0VQOgorCQlpZiAoKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLKSA9PQorCQkgICAgUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQykgeworCQkJLyogYmFkIElDViwgdGhlIHBhY2tldCBpcyBkZXN0cm95ZWQgc2luY2UgdGhlCisJCQkgKiBkZWNyeXB0aW9uIGlzIGlucGxhY2UsIGRyb3AgaXQgKi8KKwkJCUlXTF9ERUJVR19SWCgiUGFja2V0IGRlc3Ryb3llZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfQ0NNUDoKKwkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KKwkJICAgIFJYX1JFU19TVEFUVVNfREVDUllQVF9PSykgeworCQkJSVdMX0RFQlVHX1JYKCJodyBkZWNyeXB0IHN1Y2Nlc3NmdWxseSEhIVxuIik7CisJCQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBpd2xfdHJhbnNsYXRlX3J4X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBkZWNyeXB0X2luKQoreworCXUzMiBkZWNyeXB0X291dCA9IDA7CisKKwlpZiAoKGRlY3J5cHRfaW4gJiBSWF9SRVNfU1RBVFVTX1NUQVRJT05fRk9VTkQpID09CisJCQkJCVJYX1JFU19TVEFUVVNfU1RBVElPTl9GT1VORCkKKwkJZGVjcnlwdF9vdXQgfD0gKFJYX1JFU19TVEFUVVNfU1RBVElPTl9GT1VORCB8CisJCQkJUlhfUkVTX1NUQVRVU19OT19TVEFUSU9OX0lORk9fTUlTTUFUQ0gpOworCisJZGVjcnlwdF9vdXQgfD0gKGRlY3J5cHRfaW4gJiBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSyk7CisKKwkvKiBwYWNrZXQgd2FzIG5vdCBlbmNyeXB0ZWQgKi8KKwlpZiAoKGRlY3J5cHRfaW4gJiBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSykgPT0KKwkJCQkJUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9OT05FKQorCQlyZXR1cm4gZGVjcnlwdF9vdXQ7CisKKwkvKiBwYWNrZXQgd2FzIGVuY3J5cHRlZCB3aXRoIHVua25vd24gYWxnICovCisJaWYgKChkZWNyeXB0X2luICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spID09CisJCQkJCVJYX1JFU19TVEFUVVNfU0VDX1RZUEVfRVJSKQorCQlyZXR1cm4gZGVjcnlwdF9vdXQ7CisKKwkvKiBkZWNyeXB0aW9uIHdhcyBub3QgZG9uZSBpbiBIVyAqLworCWlmICgoZGVjcnlwdF9pbiAmIFJYX01QRFVfUkVTX1NUQVRVU19ERUNfRE9ORV9NU0spICE9CisJCQkJCVJYX01QRFVfUkVTX1NUQVRVU19ERUNfRE9ORV9NU0spCisJCXJldHVybiBkZWNyeXB0X291dDsKKworCXN3aXRjaCAoZGVjcnlwdF9pbiAmIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLKSB7CisKKwljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfQ0NNUDoKKwkJLyogYWxnIGlzIENDTTogY2hlY2sgTUlDIG9ubHkgKi8KKwkJaWYgKCEoZGVjcnlwdF9pbiAmIFJYX01QRFVfUkVTX1NUQVRVU19NSUNfT0spKQorCQkJLyogQmFkIE1JQyAqLworCQkJZGVjcnlwdF9vdXQgfD0gUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQzsKKwkJZWxzZQorCQkJZGVjcnlwdF9vdXQgfD0gUlhfUkVTX1NUQVRVU19ERUNSWVBUX09LOworCisJCWJyZWFrOworCisJY2FzZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1RLSVA6CisJCWlmICghKGRlY3J5cHRfaW4gJiBSWF9NUERVX1JFU19TVEFUVVNfVFRBS19PSykpIHsKKwkJCS8qIEJhZCBUVEFLICovCisJCQlkZWNyeXB0X291dCB8PSBSWF9SRVNfU1RBVFVTX0JBRF9LRVlfVFRBSzsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCBpZiBUVEFLIE9LICovCisJZGVmYXVsdDoKKwkJaWYgKCEoZGVjcnlwdF9pbiAmIFJYX01QRFVfUkVTX1NUQVRVU19JQ1ZfT0spKQorCQkJZGVjcnlwdF9vdXQgfD0gUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQzsKKwkJZWxzZQorCQkJZGVjcnlwdF9vdXQgfD0gUlhfUkVTX1NUQVRVU19ERUNSWVBUX09LOworCQlicmVhazsKKwl9OworCisJSVdMX0RFQlVHX1JYKCJkZWNyeXB0X2luOjB4JXggIGRlY3J5cHRfb3V0ID0gMHgleFxuIiwKKwkJCQkJZGVjcnlwdF9pbiwgZGVjcnlwdF9vdXQpOworCisJcmV0dXJuIGRlY3J5cHRfb3V0OworfQorCitzdGF0aWMgdm9pZCBpd2xfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgICBpbnQgaW5jbHVkZV9waHksCisJCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMgKnJ4X3N0YXJ0ID0gKGluY2x1ZGVfcGh5KSA/CisJICAgIChzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICopJihwa3QtPnUucmF3WzBdKSA6IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwl1MTYgbGVuOworCV9fbGUzMiAqcnhfZW5kOworCXVuc2lnbmVkIGludCBza2JsZW47CisJdTMyIGFtcGR1X3N0YXR1czsKKwl1MzIgYW1wZHVfc3RhdHVzX2xlZ2FjeTsKKworCWlmICghaW5jbHVkZV9waHkgJiYgcHJpdi0+bGFzdF9waHlfcmVzWzBdKQorCQlyeF9zdGFydCA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICopJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKKworCWlmICghcnhfc3RhcnQpIHsKKwkJSVdMX0VSUk9SKCJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKGluY2x1ZGVfcGh5KSB7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSgodTggKikgJnJ4X3N0YXJ0WzFdICsKKwkJCQkJICAgICAgIHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCk7CisKKwkJbGVuID0gbGUxNl90b19jcHUocnhfc3RhcnQtPmJ5dGVfY291bnQpOworCisJCXJ4X2VuZCA9IChfX2xlMzIgKikgKCh1OCAqKSAmcGt0LT51LnJhd1swXSArCisJCQkJICBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcnhfcGh5X3JlcykgKworCQkJCSAgcnhfc3RhcnQtPmNmZ19waHlfY250ICsgbGVuKTsKKworCX0gZWxzZSB7CisJCXN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0ICphbXNkdSA9CisJCSAgICAoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKilwa3QtPnUucmF3OworCisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShwa3QtPnUucmF3ICsKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQpKTsKKwkJbGVuID0gIGxlMTZfdG9fY3B1KGFtc2R1LT5ieXRlX2NvdW50KTsKKwkJcnhfc3RhcnQtPmJ5dGVfY291bnQgPSBhbXNkdS0+Ynl0ZV9jb3VudDsKKwkJcnhfZW5kID0gKF9fbGUzMiAqKSAoKCh1OCAqKSBoZHIpICsgbGVuKTsKKwl9CisKKwlhbXBkdV9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqcnhfZW5kKTsKKwlza2JsZW4gPSAoKHU4ICopIHJ4X2VuZCAtICh1OCAqKSAmcGt0LT51LnJhd1swXSkgKyBzaXplb2YodTMyKTsKKworCWlmICghaW5jbHVkZV9waHkpIHsKKwkJLyogTmV3IHN0YXR1cyBzY2hlbWUsIG5lZWQgdG8gdHJhbnNsYXRlICovCisJCWFtcGR1X3N0YXR1c19sZWdhY3kgPSBhbXBkdV9zdGF0dXM7CisJCWFtcGR1X3N0YXR1cyA9IGl3bF90cmFuc2xhdGVfcnhfc3RhdHVzKHByaXYsIGFtcGR1X3N0YXR1cyk7CisJfQorCisJLyogc3RhcnQgZnJvbSBNQUMgKi8KKwlza2JfcmVzZXJ2ZShyeGItPnNrYiwgKHZvaWQgKiloZHIgLSAodm9pZCAqKXBrdCk7CisJc2tiX3B1dChyeGItPnNrYiwgbGVuKTsJLyogZW5kIHdoZXJlIGRhdGEgZW5kcyAqLworCisJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUgaW50ZXJmYWNlIGlzIG9wZW4gKi8KKwlpZiAodW5saWtlbHkoIXByaXYtPmlzX29wZW4pKSB7CisJCUlXTF9ERUJVR19EUk9QX0xJTUlUCisJCSAgICAoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IG9wZW4uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4Yi0+c2tiLT5kYXRhOworCisJLyogIGluIGNhc2Ugb2YgSFcgYWNjZWxlcmF0ZWQgY3J5cHRvIGFuZCBiYWQgZGVjcnlwdGlvbiwgZHJvcCAqLworCWlmICghcHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0byAmJgorCSAgICBpd2xfc2V0X2RlY3J5cHRlZF9mbGFnKHByaXYsIGhkciwgYW1wZHVfc3RhdHVzLCBzdGF0cykpCisJCXJldHVybjsKKworCWlmIChwcml2LT5hZGRfcmFkaW90YXApCisJCWl3bF9hZGRfcmFkaW90YXAocHJpdiwgcnhiLT5za2IsIHJ4X3N0YXJ0LCBzdGF0cywgYW1wZHVfc3RhdHVzKTsKKworCWl3bF91cGRhdGVfcnhfc3RhdHMocHJpdiwgbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSwgbGVuKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgcnhiLT5za2IsIHN0YXRzKTsKKwlwcml2LT5hbGxvY19yeGJfc2tiLS07CisJcnhiLT5za2IgPSBOVUxMOworfQorCisvKiBDYWxjIG1heCBzaWduYWwgbGV2ZWwgKGRCbSkgYW1vbmcgMyBwb3NzaWJsZSByZWNlaXZlcnMgKi8KK3N0YXRpYyBpbnQgaXdsX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMgKnJ4X3Jlc3ApCit7CisJLyogZGF0YSBmcm9tIFBIWS9EU1AgcmVnYXJkaW5nIHNpZ25hbCBzdHJlbmd0aCwgZXRjLiwKKwkgKiAgIGNvbnRlbnRzIGFyZSBhbHdheXMgdGhlcmUsIG5vdCBjb25maWd1cmFibGUgYnkgaG9zdC4gICovCisJc3RydWN0IGl3bDQ5NjVfcnhfbm9uX2NmZ19waHkgKm5jcGh5ID0KKwkgICAgKHN0cnVjdCBpd2w0OTY1X3J4X25vbl9jZmdfcGh5ICopcnhfcmVzcC0+bm9uX2NmZ19waHk7CisJdTMyIGFnYyA9IChsZTE2X3RvX2NwdShuY3BoeS0+YWdjX2luZm8pICYgSVdMX0FHQ19EQl9NQVNLKQorCQkJPj4gSVdMX0FHQ19EQl9QT1M7CisKKwl1MzIgdmFsaWRfYW50ZW5uYWUgPQorCSAgICAobGUxNl90b19jcHUocnhfcmVzcC0+cGh5X2ZsYWdzKSAmIFJYX1BIWV9GTEFHU19BTlRFTk5BRV9NQVNLKQorCQkJPj4gUlhfUEhZX0ZMQUdTX0FOVEVOTkFFX09GRlNFVDsKKwl1OCBtYXhfcnNzaSA9IDA7CisJdTMyIGk7CisKKwkvKiBGaW5kIG1heCByc3NpIGFtb25nIDMgcG9zc2libGUgcmVjZWl2ZXJzLgorCSAqIFRoZXNlIHZhbHVlcyBhcmUgbWVhc3VyZWQgYnkgdGhlIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3NvciAoRFNQKS4KKwkgKiBUaGV5IHNob3VsZCBzdGF5IGZhaXJseSBjb25zdGFudCBldmVuIGFzIHRoZSBzaWduYWwgc3RyZW5ndGggdmFyaWVzLAorCSAqICAgaWYgdGhlIHJhZGlvJ3MgYXV0b21hdGljIGdhaW4gY29udHJvbCAoQUdDKSBpcyB3b3JraW5nIHJpZ2h0LgorCSAqIEFHQyB2YWx1ZSAoc2VlIGJlbG93KSB3aWxsIHByb3ZpZGUgdGhlICJpbnRlcmVzdGluZyIgaW5mby4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlpZiAodmFsaWRfYW50ZW5uYWUgJiAoMSA8PCBpKSkKKwkJCW1heF9yc3NpID0gbWF4KG5jcGh5LT5yc3NpX2luZm9baSA8PCAxXSwgbWF4X3Jzc2kpOworCisJSVdMX0RFQlVHX1NUQVRTKCJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCisJCW5jcGh5LT5yc3NpX2luZm9bMF0sIG5jcGh5LT5yc3NpX2luZm9bMl0sIG5jcGh5LT5yc3NpX2luZm9bNF0sCisJCW1heF9yc3NpLCBhZ2MpOworCisJLyogZEJtID0gbWF4X3Jzc2kgZEIgLSBhZ2MgZEIgLSBjb25zdGFudC4KKwkgKiBIaWdoZXIgQUdDIChoaWdoZXIgcmFkaW8gZ2FpbikgbWVhbnMgbG93ZXIgc2lnbmFsLiAqLworCXJldHVybiBtYXhfcnNzaSAtIGFnYyAtIElXTF9SU1NJX09GRlNFVDsKK30KKworc3RhdGljIHZvaWQgaXdsX3N0YV9tb2RpZnlfcHNfd2FrZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YXRpb25fZmxhZ3MgJj0gflNUQV9GTEdfUFdSX1NBVkVfTVNLOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YXRpb25fZmxhZ3NfbXNrID0gU1RBX0ZMR19QV1JfU0FWRV9NU0s7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gMDsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7Cit9CisKK3N0YXRpYyB2b2lkIGl3bF91cGRhdGVfcHNfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBwc19iaXQsIHU4ICphZGRyKQoreworCS8qIEZJWE1FOiBuZWVkIGxvY2tpbmcgb3ZlciBwc19zdGF0dXMgPz8/ICovCisJdTggc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKKworCWlmIChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikgeworCQl1OCBzdGFfYXdha2UgPSBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLgorCQkJCXBzX3N0YXR1cyA9PSBTVEFfUFNfU1RBVFVTX1dBS0U7CisKKwkJaWYgKHN0YV9hd2FrZSAmJiBwc19iaXQpCisJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnBzX3N0YXR1cyA9IFNUQV9QU19TVEFUVVNfU0xFRVA7CisJCWVsc2UgaWYgKCFzdGFfYXdha2UgJiYgIXBzX2JpdCkgeworCQkJaXdsX3N0YV9tb2RpZnlfcHNfd2FrZShwcml2LCBzdGFfaWQpOworCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5wc19zdGF0dXMgPSBTVEFfUFNfU1RBVFVTX1dBS0U7CisJCX0KKwl9Cit9CisKKy8qIFRoaXMgaXMgbmVjZXNzYXJ5IG9ubHkgZm9yIGEgbnVtYmVyIG9mIHN0YXRpc3RpY3MsIHNlZSB0aGUgY2FsbGVyLiAqLworc3RhdGljIGludCBpd2xfaXNfbmV0d29ya19wYWNrZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQoreworCS8qIEZpbHRlciBpbmNvbWluZyBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSB0YXJnZXRlZCB0b3dhcmQKKwkgKiB0aGlzIG5ldHdvcmssIGRpc2NhcmRpbmcgcGFja2V0cyBjb21pbmcgZnJvbSBvdXJzZWx2ZXMgKi8KKwlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6IC8qIEhlYWRlcjogRGVzdC4gfCBTb3VyY2UgICAgfCBCU1NJRCAqLworCQkvKiBwYWNrZXRzIHRvIG91ciBJQlNTIHVwZGF0ZSBpbmZvcm1hdGlvbiAqLworCQlyZXR1cm4gIWNvbXBhcmVfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIzLCBwcml2LT5ic3NpZCk7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6IC8qIEhlYWRlcjogRGVzdC4gfCBBUHtCU1NJRH0gfCBTb3VyY2UgKi8KKwkJLyogcGFja2V0cyB0byBvdXIgSUJTUyB1cGRhdGUgaW5mb3JtYXRpb24gKi8KKwkJcmV0dXJuICFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMiwgcHJpdi0+YnNzaWQpOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworLyogQ2FsbGVkIGZvciBSRVBMWV9SWCAobGVnYWN5IEFCRyBmcmFtZXMpLCBvcgorICogUkVQTFlfUlhfTVBEVV9DTUQgKEhUIGhpZ2gtdGhyb3VnaHB1dCBOIGZyYW1lcykuICovCit2b2lkIGl3bF9yeF9yZXBseV9yeChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCS8qIFVzZSBwaHkgZGF0YSAoUnggc2lnbmFsIHN0cmVuZ3RoLCBldGMuKSBjb250YWluZWQgd2l0aGluCisJICogICB0aGlzIHJ4IHBhY2tldCBmb3IgbGVnYWN5IGZyYW1lcywKKwkgKiAgIG9yIHBoeSBkYXRhIGNhY2hlZCBmcm9tIFJFUExZX1JYX1BIWV9DTUQgZm9yIEhUIGZyYW1lcy4gKi8KKwlpbnQgaW5jbHVkZV9waHkgPSAocGt0LT5oZHIuY21kID09IFJFUExZX1JYKTsKKwlzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICpyeF9zdGFydCA9IChpbmNsdWRlX3BoeSkgPworCQkoc3RydWN0IGl3bDQ5NjVfcnhfcGh5X3JlcyAqKSYocGt0LT51LnJhd1swXSkgOgorCQkoc3RydWN0IGl3bDQ5NjVfcnhfcGh5X3JlcyAqKSZwcml2LT5sYXN0X3BoeV9yZXNbMV07CisJX19sZTMyICpyeF9lbmQ7CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJdTE2IGZjOworCXU4IG5ldHdvcmtfcGFja2V0OworCisJcnhfc3RhdHVzLm1hY3RpbWUgPSBsZTY0X3RvX2NwdShyeF9zdGFydC0+dGltZXN0YW1wKTsKKwlyeF9zdGF0dXMuZnJlcSA9CisJCWllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShsZTE2X3RvX2NwdShyeF9zdGFydC0+Y2hhbm5lbCkpOworCXJ4X3N0YXR1cy5iYW5kID0gKHJ4X3N0YXJ0LT5waHlfZmxhZ3MgJiBSWF9SRVNfUEhZX0ZMQUdTX0JBTkRfMjRfTVNLKSA/CisJCQkJSUVFRTgwMjExX0JBTkRfMkdIWiA6IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJcnhfc3RhdHVzLnJhdGVfaWR4ID0KKwkJaXdsX2h3cmF0ZV90b19wbGNwX2lkeChsZTMyX3RvX2NwdShyeF9zdGFydC0+cmF0ZV9uX2ZsYWdzKSk7CisJaWYgKHJ4X3N0YXR1cy5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXJ4X3N0YXR1cy5yYXRlX2lkeCAtPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCisJcnhfc3RhdHVzLmFudGVubmEgPSAwOworCXJ4X3N0YXR1cy5mbGFnID0gMDsKKwlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7CisKKwlpZiAoKHVubGlrZWx5KHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCA+IDIwKSkpIHsKKwkJSVdMX0RFQlVHX0RST1AoImRzcCBzaXplIG91dCBvZiByYW5nZSBbMCwyMF06ICVkL24iLAorCQkJCXJ4X3N0YXJ0LT5jZmdfcGh5X2NudCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWluY2x1ZGVfcGh5KSB7CisJCWlmIChwcml2LT5sYXN0X3BoeV9yZXNbMF0pCisJCQlyeF9zdGFydCA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICopCisJCQkJJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKKwkJZWxzZQorCQkJcnhfc3RhcnQgPSBOVUxMOworCX0KKworCWlmICghcnhfc3RhcnQpIHsKKwkJSVdMX0VSUk9SKCJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW5jbHVkZV9waHkpIHsKKwkJaGVhZGVyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKCh1OCAqKSAmcnhfc3RhcnRbMV0KKwkJCQkJCSAgKyByeF9zdGFydC0+Y2ZnX3BoeV9jbnQpOworCisJCWxlbiA9IGxlMTZfdG9fY3B1KHJ4X3N0YXJ0LT5ieXRlX2NvdW50KTsKKwkJcnhfZW5kID0gKF9fbGUzMiAqKShwa3QtPnUucmF3ICsgcnhfc3RhcnQtPmNmZ19waHlfY250ICsKKwkJCQkgIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzKSArIGxlbik7CisJfSBlbHNlIHsKKwkJc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKmFtc2R1ID0KKwkJCShzdHJ1Y3QgaXdsNDk2NV9yeF9tcGR1X3Jlc19zdGFydCAqKXBrdC0+dS5yYXc7CisKKwkJaGVhZGVyID0gKHZvaWQgKikocGt0LT51LnJhdyArCisJCQlzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQpKTsKKwkJbGVuID0gbGUxNl90b19jcHUoYW1zZHUtPmJ5dGVfY291bnQpOworCQlyeF9lbmQgPSAoX19sZTMyICopIChwa3QtPnUucmF3ICsKKwkJCXNpemVvZihzdHJ1Y3QgaXdsNDk2NV9yeF9tcGR1X3Jlc19zdGFydCkgKyBsZW4pOworCX0KKworCWlmICghKCpyeF9lbmQgJiBSWF9SRVNfU1RBVFVTX05PX0NSQzMyX0VSUk9SKSB8fAorCSAgICAhKCpyeF9lbmQgJiBSWF9SRVNfU1RBVFVTX05PX1JYRV9PVkVSRkxPVykpIHsKKwkJSVdMX0RFQlVHX1JYKCJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsCisJCQkJbGUzMl90b19jcHUoKnJ4X2VuZCkpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+dWNvZGVfYmVhY29uX3RpbWUgPSBsZTMyX3RvX2NwdShyeF9zdGFydC0+YmVhY29uX3RpbWVfc3RhbXApOworCisJLyogRmluZCBtYXggc2lnbmFsIHN0cmVuZ3RoIChkQm0pIGFtb25nIDMgYW50ZW5uYS9yZWNlaXZlciBjaGFpbnMgKi8KKwlyeF9zdGF0dXMuc2lnbmFsID0gaXdsX2NhbGNfcnNzaShwcml2LCByeF9zdGFydCk7CisKKwkvKiBNZWFuaW5nZnVsIG5vaXNlIHZhbHVlcyBhcmUgYXZhaWxhYmxlIG9ubHkgZnJvbSBiZWFjb24gc3RhdGlzdGljcywKKwkgKiAgIHdoaWNoIGFyZSBnYXRoZXJlZCBvbmx5IHdoZW4gYXNzb2NpYXRlZCwgYW5kIGluZGljYXRlIG5vaXNlCisJICogICBvbmx5IGZvciB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIGNoYW5uZWwgLi4uCisJICogSWdub3JlIHRoZXNlIG5vaXNlIHZhbHVlcyB3aGlsZSBzY2FubmluZyAob3RoZXIgY2hhbm5lbHMpICovCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmCisJICAgICF0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCXJ4X3N0YXR1cy5ub2lzZSA9IHByaXYtPmxhc3Rfcnhfbm9pc2U7CisJCXJ4X3N0YXR1cy5xdWFsID0gaXdsX2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNpZ25hbCwKKwkJCQkJCQkgcnhfc3RhdHVzLm5vaXNlKTsKKwl9IGVsc2UgeworCQlyeF9zdGF0dXMubm9pc2UgPSBJV0xfTk9JU0VfTUVBU19OT1RfQVZBSUxBQkxFOworCQlyeF9zdGF0dXMucXVhbCA9IGl3bF9jYWxjX3NpZ19xdWFsKHJ4X3N0YXR1cy5zaWduYWwsIDApOworCX0KKworCS8qIFJlc2V0IGJlYWNvbiBub2lzZSBsZXZlbCBpZiBub3QgYXNzb2NpYXRlZC4gKi8KKwlpZiAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpKQorCQlwcml2LT5sYXN0X3J4X25vaXNlID0gSVdMX05PSVNFX01FQVNfTk9UX0FWQUlMQUJMRTsKKworCS8qIFNldCAiMSIgdG8gcmVwb3J0IGdvb2QgZGF0YSBmcmFtZXMgaW4gZ3JvdXBzIG9mIDEwMCAqLworCS8qIEZJWE1FOiBuZWVkIHRvIG9wdGltemUgdGhlIGNhbGw6ICovCisJaXdsX2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGt0LCBoZWFkZXIsIDEpOworCisJSVdMX0RFQlVHX1NUQVRTX0xJTUlUKCJSc3NpICVkLCBub2lzZSAlZCwgcXVhbCAlZCwgVFNGICVsbHVcbiIsCisJCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnNpZ25hbCwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylyeF9zdGF0dXMubWFjdGltZSk7CisKKwkvKiBUYWtlIHNob3J0Y3V0IHdoZW4gb25seSBpbiBtb25pdG9yIG1vZGUgKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSKSB7CisJCWl3bF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShwcml2LCBpbmNsdWRlX3BoeSwKKwkJCQkJCSByeGIsICZyeF9zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJbmV0d29ya19wYWNrZXQgPSBpd2xfaXNfbmV0d29ya19wYWNrZXQocHJpdiwgaGVhZGVyKTsKKwlpZiAobmV0d29ya19wYWNrZXQpIHsKKwkJcHJpdi0+bGFzdF9yeF9yc3NpID0gcnhfc3RhdHVzLnNpZ25hbDsKKwkJcHJpdi0+bGFzdF9iZWFjb25fdGltZSA9ICBwcml2LT51Y29kZV9iZWFjb25fdGltZTsKKwkJcHJpdi0+bGFzdF90c2YgPSBsZTY0X3RvX2NwdShyeF9zdGFydC0+dGltZXN0YW1wKTsKKwl9CisKKwlmYyA9IGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY29udHJvbCk7CisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgorCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkKKwkJCWl3bF91cGRhdGVfcHNfbW9kZShwcml2LCBmYyAgJiBJRUVFODAyMTFfRkNUTF9QTSwKKwkJCQkJCWhlYWRlci0+YWRkcjIpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQkJaXdsX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHByaXYsIGluY2x1ZGVfcGh5LCByeGIsCisJCQkJICAgJnJ4X3N0YXR1cyk7CisJCWJyZWFrOworCisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcmVwbHlfcngpOworCisvKiBDYWNoZSBwaHkgZGF0YSAoUnggc2lnbmFsIHN0cmVuZ3RoLCBldGMpIGZvciBIVCBmcmFtZSAoUkVQTFlfUlhfUEhZX0NNRCkuCisgKiBUaGlzIHdpbGwgYmUgdXNlZCBsYXRlciBpbiBpd2xfcnhfcmVwbHlfcngoKSBmb3IgUkVQTFlfUlhfTVBEVV9DTUQuICovCit2b2lkIGl3bF9yeF9yZXBseV9yeF9waHkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJcHJpdi0+bGFzdF9waHlfcmVzWzBdID0gMTsKKwltZW1jcHkoJnByaXYtPmxhc3RfcGh5X3Jlc1sxXSwgJihwa3QtPnUucmF3WzBdKSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMpKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3JlcGx5X3J4X3BoeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjNzUwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwpAQCAtMCwwICsxLDkzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogVG9tYXMgV2lua2xlciA8dG9tYXMud2lua2xlckBpbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgIml3bC1lZXByb20uaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCisjaW5jbHVkZSAiaXdsLWlvLmgiCisjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKKworLyogRm9yIGFjdGl2ZSBzY2FuLCBsaXN0ZW4gQUNUSVZFX0RXRUxMX1RJTUUgKG1zZWMpIG9uIGVhY2ggY2hhbm5lbCBhZnRlcgorICogc2VuZGluZyBwcm9iZSByZXEuICBUaGlzIHNob3VsZCBiZSBzZXQgbG9uZyBlbm91Z2ggdG8gaGVhciBwcm9iZSByZXNwb25zZXMKKyAqIGZyb20gbW9yZSB0aGFuIG9uZSBBUC4gICovCisjZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfVElNRV8yNCAgICAoMzApICAgICAgIC8qIGFsbCB0aW1lcyBpbiBtc2VjICovCisjZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfVElNRV81MiAgICAoMjApCisKKyNkZWZpbmUgSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKDMpCisjZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzUyR0haICgyKQorCisvKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCisgKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCisgKiBBQ1RJVkVfUVVJRVRfVElNRSBhZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3QuICBUaGlzIHNob3J0ZW5zIHRoZSBkd2VsbAorICogdGltZSBpZiBpdCdzIGEgcXVpZXQgY2hhbm5lbCAobm90aGluZyByZXNwb25kZWQgdG8gb3VyIHByb2JlLCBhbmQgdGhlcmUncworICogbm8gb3RoZXIgdHJhZmZpYykuCisgKiBEaXNhYmxlICJxdWlldCIgZmVhdHVyZSBieSBzZXR0aW5nIFBMQ1BfUVVJRVRfVEhSRVNIIHRvIDAuICovCisjZGVmaW5lIElXTF9QTENQX1FVSUVUX1RIUkVTSCAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpICAvKiBwYWNrZXRzICovCisjZGVmaW5lIElXTF9BQ1RJVkVfUVVJRVRfVElNRSAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEwKSAgLyogbXNlYyAqLworCisvKiBGb3IgcGFzc2l2ZSBzY2FuLCBsaXN0ZW4gUEFTU0lWRV9EV0VMTF9USU1FIChtc2VjKSBvbiBlYWNoIGNoYW5uZWwuCisgKiBNdXN0IGJlIHNldCBsb25nZXIgdGhhbiBhY3RpdmUgZHdlbGwgdGltZS4KKyAqIEZvciB0aGUgbW9zdCByZWxpYWJsZSBzY2FuLCBzZXQgPiBBUCBiZWFjb24gaW50ZXJ2YWwgKHR5cGljYWxseSAxMDBtc2VjKS4gKi8KKyNkZWZpbmUgSVdMX1BBU1NJVkVfRFdFTExfVElNRV8yNCAgICgyMCkgICAgICAgLyogYWxsIHRpbWVzIGluIG1zZWMgKi8KKyNkZWZpbmUgSVdMX1BBU1NJVkVfRFdFTExfVElNRV81MiAgICgxMCkKKyNkZWZpbmUgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSAgICAgICgxMDApCisjZGVmaW5lIElXTF9DSEFOTkVMX1RVTkVfVElNRSAgICAgICA1CisKKyNkZWZpbmUgSVdMX1NDQU5fUFJPQkVfTUFTSyhuKSAJY3B1X3RvX2xlMzIoKEJJVChuKSB8IChCSVQobikgLSBCSVQoMSkpKSkKKworCitzdGF0aWMgaW50IHNjYW5fdHhfYW50WzNdID0geworCVJBVEVfTUNTX0FOVF9BX01TSywgUkFURV9NQ1NfQU5UX0JfTVNLLCBSQVRFX01DU19BTlRfQ19NU0sKK307CisKKworCitzdGF0aWMgaW50IGl3bF9pc19lbXB0eV9lc3NpZChjb25zdCBjaGFyICplc3NpZCwgaW50IGVzc2lkX2xlbikKK3sKKwkvKiBTaW5nbGUgd2hpdGUgc3BhY2UgaXMgZm9yIExpbmtzeXMgQVBzICovCisJaWYgKGVzc2lkX2xlbiA9PSAxICYmIGVzc2lkWzBdID09ICcgJykKKwkJcmV0dXJuIDE7CisKKwkvKiBPdGhlcndpc2UsIGlmIHRoZSBlbnRpcmUgZXNzaWQgaXMgMCwgd2UgYXNzdW1lIGl0IGlzIGhpZGRlbiAqLworCXdoaWxlIChlc3NpZF9sZW4pIHsKKwkJZXNzaWRfbGVuLS07CisJCWlmIChlc3NpZFtlc3NpZF9sZW5dICE9ICdcMCcpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworCisKK2NvbnN0IGNoYXIgKml3bF9lc2NhcGVfZXNzaWQoY29uc3QgY2hhciAqZXNzaWQsIHU4IGVzc2lkX2xlbikKK3sKKwlzdGF0aWMgY2hhciBlc2NhcGVkW0lXX0VTU0lEX01BWF9TSVpFICogMiArIDFdOworCWNvbnN0IGNoYXIgKnMgPSBlc3NpZDsKKwljaGFyICpkID0gZXNjYXBlZDsKKworCWlmIChpd2xfaXNfZW1wdHlfZXNzaWQoZXNzaWQsIGVzc2lkX2xlbikpIHsKKwkJbWVtY3B5KGVzY2FwZWQsICI8aGlkZGVuPiIsIHNpemVvZigiPGhpZGRlbj4iKSk7CisJCXJldHVybiBlc2NhcGVkOworCX0KKworCWVzc2lkX2xlbiA9IG1pbihlc3NpZF9sZW4sICh1OCkgSVdfRVNTSURfTUFYX1NJWkUpOworCXdoaWxlIChlc3NpZF9sZW4tLSkgeworCQlpZiAoKnMgPT0gJ1wwJykgeworCQkJKmQrKyA9ICdcXCc7CisJCQkqZCsrID0gJzAnOworCQkJcysrOworCQl9IGVsc2UKKwkJCSpkKysgPSAqcysrOworCX0KKwkqZCA9ICdcMCc7CisJcmV0dXJuIGVzY2FwZWQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9lc2NhcGVfZXNzaWQpOworCisvKioKKyAqIGl3bF9zY2FuX2NhbmNlbCAtIENhbmNlbCBhbnkgY3VycmVudGx5IGV4ZWN1dGluZyBIVyBzY2FuCisgKgorICogTk9URTogcHJpdi0+bXV0ZXggaXMgbm90IHJlcXVpcmVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAqLworaW50IGl3bF9zY2FuX2NhbmNlbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKKwkJY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CisJCXJldHVybiAwOworCX0KKworCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCQlJV0xfREVCVUdfU0NBTigiUXVldWluZyBzY2FuIGFib3J0LlxuIik7CisJCQlzZXRfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWJvcnRfc2Nhbik7CisKKwkJfSBlbHNlCisJCQlJV0xfREVCVUdfU0NBTigiU2NhbiBhYm9ydCBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CisKKwkJcmV0dXJuIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zY2FuX2NhbmNlbCk7CisvKioKKyAqIGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0IC0gQ2FuY2VsIGFueSBjdXJyZW50bHkgZXhlY3V0aW5nIEhXIHNjYW4KKyAqIEBtczogYW1vdW50IG9mIHRpbWUgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igc2NhbiB0byBhYm9ydAorICoKKyAqIE5PVEU6IHByaXYtPm11dGV4IG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgKi8KK2ludCBpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgbXMpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCWludCByZXQ7CisKKwlyZXQgPSBpd2xfc2Nhbl9jYW5jZWwocHJpdik7CisJaWYgKHJldCAmJiBtcykgeworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwkJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIG5vdyArIG1zZWNzX3RvX2ppZmZpZXMobXMpKSAmJgorCQkJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpCisJCQltc2xlZXAoMSk7CisJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dCk7CisKK3N0YXRpYyBpbnQgaXdsX3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlczsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKKwkJLmlkID0gUkVQTFlfU0NBTl9BQk9SVF9DTUQsCisJCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLAorCX07CisKKwkvKiBJZiB0aGVyZSBpc24ndCBhIHNjYW4gYWN0aXZlbHkgZ29pbmcgb24gaW4gdGhlIGhhcmR3YXJlCisJICogdGhlbiB3ZSBhcmUgaW4gYmV0d2VlbiBzY2FuIGJhbmRzIGFuZCBub3QgYWN0dWFsbHkKKwkgKiBhY3RpdmVseSBzY2FubmluZywgc28gZG9uJ3Qgc2VuZCB0aGUgYWJvcnQgY29tbWFuZCAqLworCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7CisJCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCWlmIChyZXQpIHsKKwkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKKwlpZiAocmVzLT51LnN0YXR1cyAhPSBDQU5fQUJPUlRfU1RBVFVTKSB7CisJCS8qIFRoZSBzY2FuIGFib3J0IHdpbGwgcmV0dXJuIDEgZm9yIHN1Y2Nlc3Mgb3IKKwkJICogMiBmb3IgImZhaWx1cmUiLiAgQSBmYWlsdXJlIGNvbmRpdGlvbiBjYW4gYmUKKwkJICogZHVlIHRvIHNpbXBseSBub3QgYmVpbmcgaW4gYW4gYWN0aXZlIHNjYW4gd2hpY2gKKwkJICogY2FuIG9jY3VyIGlmIHdlIHNlbmQgdGhlIHNjYW4gYWJvcnQgYmVmb3JlIHdlCisJCSAqIHRoZSBtaWNyb2NvZGUgaGFzIG5vdGlmaWVkIHVzIHRoYXQgYSBzY2FuIGlzCisJCSAqIGNvbXBsZXRlZC4gKi8KKwkJSVdMX0RFQlVHX0lORk8oIlNDQU5fQUJPUlQgcmV0dXJuZWQgJWQuXG4iLCByZXMtPnUuc3RhdHVzKTsKKwkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKKwkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKKwl9CisKKwlkZXZfa2ZyZWVfc2tiX2FueShjbWQubWV0YS51LnNrYik7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIFNlcnZpY2UgcmVzcG9uc2UgdG8gUkVQTFlfU0NBTl9DTUQgKDB4ODApICovCitzdGF0aWMgdm9pZCBpd2xfcnhfcmVwbHlfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3NjYW5yZXFfbm90aWZpY2F0aW9uICpub3RpZiA9CisJICAgIChzdHJ1Y3QgaXdsX3NjYW5yZXFfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKKworCUlXTF9ERUJVR19SWCgiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOworI2VuZGlmCit9CisKKy8qIFNlcnZpY2UgU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gKDB4ODIpICovCitzdGF0aWMgdm9pZCBpd2xfcnhfc2Nhbl9zdGFydF9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3NjYW5zdGFydF9ub3RpZmljYXRpb24gKm5vdGlmID0KKwkgICAgKHN0cnVjdCBpd2xfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7CisJcHJpdi0+c2Nhbl9zdGFydF90c2YgPSBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyk7CisJSVdMX0RFQlVHX1NDQU4oIlNjYW4gc3RhcnQ6ICIKKwkJICAgICAgICIlZCBbODAyLjExJXNdICIKKwkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAoYmVhY29uIHRpbWVyICV1KVxuIiwKKwkJICAgICAgIG5vdGlmLT5jaGFubmVsLAorCQkgICAgICAgbm90aWYtPmJhbmQgPyAiYmciIDogImEiLAorCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnRzZl9oaWdoKSwKKwkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KSwKKwkJICAgICAgIG5vdGlmLT5zdGF0dXMsIG5vdGlmLT5iZWFjb25fdGltZXIpOworfQorCisvKiBTZXJ2aWNlIFNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04gKDB4ODMpICovCitzdGF0aWMgdm9pZCBpd2xfcnhfc2Nhbl9yZXN1bHRzX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiAqbm90aWYgPQorCSAgICAoc3RydWN0IGl3bF9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OworCisJSVdMX0RFQlVHX1NDQU4oIlNjYW4gY2gucmVzOiAiCisJCSAgICAgICAiJWQgWzgwMi4xMSVzXSAiCisJCSAgICAgICAiKFRTRjogMHglMDhYOiUwOFgpIC0gJWQgIgorCQkgICAgICAgImVsYXBzZWQ9JWx1IHVzZWMgKCVkbXMgc2luY2UgbGFzdClcbiIsCisJCSAgICAgICBub3RpZi0+Y2hhbm5lbCwKKwkJICAgICAgIG5vdGlmLT5iYW5kID8gImJnIiA6ICJhIiwKKwkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfaGlnaCksCisJCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyksCisJCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+c3RhdGlzdGljc1swXSksCisJCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdykgLSBwcml2LT5zY2FuX3N0YXJ0X3RzZiwKKwkJICAgICAgIGppZmZpZXNfdG9fbXNlY3MoZWxhcHNlZF9qaWZmaWVzCisJCQkJCShwcml2LT5sYXN0X3NjYW5famlmZmllcywgamlmZmllcykpKTsKKyNlbmRpZgorCisJcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOworCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKK30KKworLyogU2VydmljZSBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTiAoMHg4NCkgKi8KK3N0YXRpYyB2b2lkIGl3bF9yeF9zY2FuX2NvbXBsZXRlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfc2NhbmNvbXBsZXRlX25vdGlmaWNhdGlvbiAqc2Nhbl9ub3RpZiA9ICh2b2lkICopcGt0LT51LnJhdzsKKworCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGNvbXBsZXRlOiAlZCBjaGFubmVscyAoVFNGIDB4JTA4WDolMDhYKSAtICVkXG4iLAorCQkgICAgICAgc2Nhbl9ub3RpZi0+c2Nhbm5lZF9jaGFubmVscywKKwkJICAgICAgIHNjYW5fbm90aWYtPnRzZl9sb3csCisJCSAgICAgICBzY2FuX25vdGlmLT50c2ZfaGlnaCwgc2Nhbl9ub3RpZi0+c3RhdHVzKTsKKworCS8qIFRoZSBIVyBpcyBubyBsb25nZXIgc2Nhbm5pbmcgKi8KKwljbGVhcl9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpOworCisJLyogVGhlIHNjYW4gY29tcGxldGlvbiBub3RpZmljYXRpb24gY2FtZSBpbiwgc28ga2lsbCB0aGF0IHRpbWVyLi4uICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl9jaGVjayk7CisKKwlJV0xfREVCVUdfSU5GTygiU2NhbiBwYXNzIG9uICVzR0h6IHRvb2sgJWRtc1xuIiwKKwkJICAgICAgIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopKSA/CisJCQkJCQkiMi40IiA6ICI1LjIiLAorCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKKwkJCQkJKHByaXYtPnNjYW5fcGFzc19zdGFydCwgamlmZmllcykpKTsKKworCS8qIFJlbW92ZSB0aGlzIHNjYW5uZWQgYmFuZCBmcm9tIHRoZSBsaXN0IG9mIHBlbmRpbmcKKwkgKiBiYW5kcyB0byBzY2FuLCBiYW5kIEcgcHJlY2VkZXMgQSBpbiBvcmRlciBvZiBzY2FubmluZworCSAqIGFzIHNlZW4gaW4gaXdsX2JnX3JlcXVlc3Rfc2NhbiAqLworCWlmIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopKQorCQlwcml2LT5zY2FuX2JhbmRzICY9IH5CSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7CisJZWxzZSBpZiAocHJpdi0+c2Nhbl9iYW5kcyAmICBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWikpCisJCXByaXYtPnNjYW5fYmFuZHMgJj0gfkJJVChJRUVFODAyMTFfQkFORF81R0haKTsKKworCS8qIElmIGEgcmVxdWVzdCB0byBhYm9ydCB3YXMgZ2l2ZW4sIG9yIHRoZSBzY2FuIGRpZCBub3Qgc3VjY2VlZAorCSAqIHRoZW4gd2UgcmVzZXQgdGhlIHNjYW4gc3RhdGUgbWFjaGluZSBhbmQgdGVybWluYXRlLAorCSAqIHJlLXF1ZXVpbmcgYW5vdGhlciBzY2FuIGlmIG9uZSBoYXMgYmVlbiByZXF1ZXN0ZWQgKi8KKwlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCUlXTF9ERUJVR19JTkZPKCJBYm9ydGVkIHNjYW4gY29tcGxldGVkLlxuIik7CisJCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7CisJfSBlbHNlIHsKKwkJLyogSWYgdGhlcmUgYXJlIG1vcmUgYmFuZHMgb24gdGhpcyBzY2FuIHBhc3MgcmVzY2hlZHVsZSAqLworCQlpZiAocHJpdi0+c2Nhbl9iYW5kcykKKwkJCWdvdG8gcmVzY2hlZHVsZTsKKwl9CisKKwlwcml2LT5sYXN0X3NjYW5famlmZmllcyA9IGppZmZpZXM7CisJcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSAwOworCUlXTF9ERUJVR19JTkZPKCJTZXR0aW5nIHNjYW4gdG8gb2ZmXG4iKTsKKworCWNsZWFyX2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOworCisJSVdMX0RFQlVHX0lORk8oIlNjYW4gdG9vayAlZG1zXG4iLAorCQlqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcyhwcml2LT5zY2FuX3N0YXJ0LCBqaWZmaWVzKSkpOworCisJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7CisKKwlyZXR1cm47CisKK3Jlc2NoZWR1bGU6CisJcHJpdi0+c2Nhbl9wYXNzX3N0YXJ0ID0gamlmZmllczsKKwlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlcXVlc3Rfc2Nhbik7Cit9CisKK3ZvaWQgaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCS8qIHNjYW4gaGFuZGxlcnMgKi8KKwlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9TQ0FOX0NNRF0gPSBpd2xfcnhfcmVwbHlfc2NhbjsKKwlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX1NUQVJUX05PVElGSUNBVElPTl0gPSBpd2xfcnhfc2Nhbl9zdGFydF9ub3RpZjsKKwlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OXSA9CisJCQkJCWl3bF9yeF9zY2FuX3Jlc3VsdHNfbm90aWY7CisJcHJpdi0+cnhfaGFuZGxlcnNbU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT05dID0KKwkJCQkJaXdsX3J4X3NjYW5fY29tcGxldGVfbm90aWY7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKTsKKworc3RhdGljIGlubGluZSB1MTYgaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJCSAgICB1OCBuX3Byb2JlcykKK3sKKwlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzUyICsKKwkJCUlXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzUyR0haICogKG5fcHJvYmVzICsgMSk7CisJZWxzZQorCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzI0ICsKKwkJCUlXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzI0R0haICogKG5fcHJvYmVzICsgMSk7Cit9CisKK3N0YXRpYyB1MTYgaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKK3sKKwl1MTYgcGFzc2l2ZSA9IChiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopID8KKwkgICAgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSArIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfMjQgOgorCSAgICBJV0xfUEFTU0lWRV9EV0VMTF9CQVNFICsgSVdMX1BBU1NJVkVfRFdFTExfVElNRV81MjsKKworCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgeworCQkvKiBJZiB3ZSdyZSBhc3NvY2lhdGVkLCB3ZSBjbGFtcCB0aGUgbWF4aW11bSBwYXNzaXZlCisJCSAqIGR3ZWxsIHRpbWUgdG8gYmUgOTglIG9mIHRoZSBiZWFjb24gaW50ZXJ2YWwgKG1pbnVzCisJCSAqIDIgKiBjaGFubmVsIHR1bmUgdGltZSkgKi8KKwkJcGFzc2l2ZSA9IHByaXYtPmJlYWNvbl9pbnQ7CisJCWlmICgocGFzc2l2ZSA+IElXTF9QQVNTSVZFX0RXRUxMX0JBU0UpIHx8ICFwYXNzaXZlKQorCQkJcGFzc2l2ZSA9IElXTF9QQVNTSVZFX0RXRUxMX0JBU0U7CisJCXBhc3NpdmUgPSAocGFzc2l2ZSAqIDk4KSAvIDEwMCAtIElXTF9DSEFOTkVMX1RVTkVfVElNRSAqIDI7CisJfQorCisJcmV0dXJuIHBhc3NpdmU7Cit9CisKK3N0YXRpYyBpbnQgaXdsX2dldF9jaGFubmVsc19mb3Jfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJICAgICB1OCBpc19hY3RpdmUsIHU4IG5fcHJvYmVzLAorCQkJCSAgICAgc3RydWN0IGl3bF9zY2FuX2NoYW5uZWwgKnNjYW5fY2gpCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVscyA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisJdTE2IHBhc3NpdmVfZHdlbGwgPSAwOworCXUxNiBhY3RpdmVfZHdlbGwgPSAwOworCWludCBhZGRlZCwgaTsKKwl1MTYgY2hhbm5lbDsKKworCXNiYW5kID0gaXdsX2dldF9od19tb2RlKHByaXYsIGJhbmQpOworCWlmICghc2JhbmQpCisJCXJldHVybiAwOworCisJY2hhbm5lbHMgPSBzYmFuZC0+Y2hhbm5lbHM7CisKKwlhY3RpdmVfZHdlbGwgPSBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQsIG5fcHJvYmVzKTsKKwlwYXNzaXZlX2R3ZWxsID0gaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCk7CisKKwlpZiAocGFzc2l2ZV9kd2VsbCA8PSBhY3RpdmVfZHdlbGwpCisJCXBhc3NpdmVfZHdlbGwgPSBhY3RpdmVfZHdlbGwgKyAxOworCisJZm9yIChpID0gMCwgYWRkZWQgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgeworCQlpZiAoY2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJCWNvbnRpbnVlOworCisJCWNoYW5uZWwgPQorCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNoYW5uZWxzW2ldLmNlbnRlcl9mcmVxKTsKKwkJc2Nhbl9jaC0+Y2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW5uZWwpOworCisJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKTsKKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7CisJCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAorCQkJCQljaGFubmVsKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFpc19hY3RpdmUgfHwgaXNfY2hhbm5lbF9wYXNzaXZlKGNoX2luZm8pIHx8CisJCSAgICAoY2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pKQorCQkJc2Nhbl9jaC0+dHlwZSA9IFNDQU5fQ0hBTk5FTF9UWVBFX1BBU1NJVkU7CisJCWVsc2UKKwkJCXNjYW5fY2gtPnR5cGUgPSBTQ0FOX0NIQU5ORUxfVFlQRV9BQ1RJVkU7CisKKwkJaWYgKChzY2FuX2NoLT50eXBlICYgU0NBTl9DSEFOTkVMX1RZUEVfQUNUSVZFKSAmJiBuX3Byb2JlcykKKwkJCXNjYW5fY2gtPnR5cGUgfD0gSVdMX1NDQU5fUFJPQkVfTUFTSyhuX3Byb2Jlcyk7CisKKwkJc2Nhbl9jaC0+YWN0aXZlX2R3ZWxsID0gY3B1X3RvX2xlMTYoYWN0aXZlX2R3ZWxsKTsKKwkJc2Nhbl9jaC0+cGFzc2l2ZV9kd2VsbCA9IGNwdV90b19sZTE2KHBhc3NpdmVfZHdlbGwpOworCisJCS8qIFNldCB0eHBvd2VyIGxldmVscyB0byBkZWZhdWx0cyAqLworCQlzY2FuX2NoLT5kc3BfYXR0ZW4gPSAxMTA7CisKKwkJLyogTk9URTogaWYgd2Ugd2VyZSBkb2luZyA2TWIgT0ZETSBmb3Igc2NhbnMgd2UnZCB1c2UKKwkJICogcG93ZXIgbGV2ZWw6CisJCSAqIHNjYW5fY2gtPnR4X2dhaW4gPSAoKDEgPDwgNSkgfCAoMiA8PCAzKSkgfCAzOworCQkgKi8KKwkJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCXNjYW5fY2gtPnR4X2dhaW4gPSAoKDEgPDwgNSkgfCAoMyA8PCAzKSkgfCAzOworCQllbHNlCisJCQlzY2FuX2NoLT50eF9nYWluID0gKCgxIDw8IDUpIHwgKDUgPDwgMykpOworCisJCUlXTF9ERUJVR19TQ0FOKCJTY2FubmluZyBjaD0lZCBwcm9iPTB4JVggWyVzICVkXVxuIiwKKwkJCSAgICAgICBjaGFubmVsLCBsZTMyX3RvX2NwdShzY2FuX2NoLT50eXBlKSwKKwkJCSAgICAgICAoc2Nhbl9jaC0+dHlwZSAmIFNDQU5fQ0hBTk5FTF9UWVBFX0FDVElWRSkgPworCQkJCSJBQ1RJVkUiIDogIlBBU1NJVkUiLAorCQkJICAgICAgIChzY2FuX2NoLT50eXBlICYgU0NBTl9DSEFOTkVMX1RZUEVfQUNUSVZFKSA/CisJCQkgICAgICAgYWN0aXZlX2R3ZWxsIDogcGFzc2l2ZV9kd2VsbCk7CisKKwkJc2Nhbl9jaCsrOworCQlhZGRlZCsrOworCX0KKworCUlXTF9ERUJVR19TQ0FOKCJ0b3RhbCBjaGFubmVscyB0byBzY2FuICVkIFxuIiwgYWRkZWQpOworCXJldHVybiBhZGRlZDsKK30KKwordm9pZCBpd2xfaW5pdF9zY2FuX3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaWYgKCFwcml2LT5zY2FuX3R4X2FudFtJRUVFODAyMTFfQkFORF81R0haXSkKKwkJcHJpdi0+c2Nhbl90eF9hbnRbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSBSQVRFX01DU19BTlRfSU5JVF9JTkQ7CisJaWYgKCFwcml2LT5zY2FuX3R4X2FudFtJRUVFODAyMTFfQkFORF8yR0haXSkKKwkJcHJpdi0+c2Nhbl90eF9hbnRbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSBSQVRFX01DU19BTlRfSU5JVF9JTkQ7Cit9CisKK2ludCBpd2xfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApIHsKKwkJSVdMX0VSUk9SKCJBUHMgZG9uJ3Qgc2Nhbi5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlJV0xfREVCVUdfU0NBTigiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfREVCVUdfU0NBTigiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICAiCisJCQkgICAgICAgIlF1ZXVpbmcuXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJSVdMX0RFQlVHX0lORk8oIlN0YXJ0aW5nIHNjYW4uLi5cbiIpOworCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfRykKKwkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7CisJaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9BKQorCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKKwlzZXRfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CisJcHJpdi0+c2Nhbl9zdGFydCA9IGppZmZpZXM7CisJcHJpdi0+c2Nhbl9wYXNzX3N0YXJ0ID0gcHJpdi0+c2Nhbl9zdGFydDsKKworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfc2Nhbl9pbml0aWF0ZSk7CisKKyNkZWZpbmUgSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cgKDcgKiBIWikKKworc3RhdGljIHZvaWQgaXdsX2JnX3NjYW5fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHNjYW5fY2hlY2sud29yayk7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSB8fAorCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHKElXTF9ETF9TQ0FOLCAiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nIHJlc2V0dGluZyAiCisJCQkiYWRhcHRlciAoJWRtcylcbiIsCisJCQlqaWZmaWVzX3RvX21zZWNzKElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKSk7CisKKwkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJCWl3bF9zZW5kX3NjYW5fYWJvcnQocHJpdik7CisJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorLyoqCisgKiBpd2xfc3VwcG9ydGVkX3JhdGVfdG9faWUgLSBmaWxsIGluIHRoZSBzdXBwb3J0ZWQgcmF0ZSBpbiBJRSBmaWVsZAorICoKKyAqIHJldHVybiA6IHNldCB0aGUgYml0IGZvciBlYWNoIHN1cHBvcnRlZCByYXRlIGluc2VydCBpbiBpZQorICovCitzdGF0aWMgdTE2IGl3bF9zdXBwb3J0ZWRfcmF0ZV90b19pZSh1OCAqaWUsIHUxNiBzdXBwb3J0ZWRfcmF0ZSwKKwkJCQkgICAgdTE2IGJhc2ljX3JhdGUsIGludCAqbGVmdCkKK3sKKwl1MTYgcmV0X3JhdGVzID0gMCwgYml0OworCWludCBpOworCXU4ICpjbnQgPSBpZTsKKwl1OCAqcmF0ZXMgPSBpZSArIDE7CisKKwlmb3IgKGJpdCA9IDEsIGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKywgYml0IDw8PSAxKSB7CisJCWlmIChiaXQgJiBzdXBwb3J0ZWRfcmF0ZSkgeworCQkJcmV0X3JhdGVzIHw9IGJpdDsKKwkJCXJhdGVzWypjbnRdID0gaXdsX3JhdGVzW2ldLmllZWUgfAorCQkJCSgoYml0ICYgYmFzaWNfcmF0ZSkgPyAweDgwIDogMHgwMCk7CisJCQkoKmNudCkrKzsKKwkJCSgqbGVmdCktLTsKKwkJCWlmICgoKmxlZnQgPD0gMCkgfHwKKwkJCSAgICAoKmNudCA+PSBJV0xfU1VQUE9SVEVEX1JBVEVTX0lFX0xFTikpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0X3JhdGVzOworfQorCisKK3N0YXRpYyB2b2lkIGl3bF9odF9jYXBfdG9faWUoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisJCQkgICAgIHU4ICpwb3MsIGludCAqbGVmdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqaHRfY2FwOworCisJaWYgKCFzYmFuZCB8fCAhc2JhbmQtPmh0X2luZm8uaHRfc3VwcG9ydGVkKQorCQlyZXR1cm47CisKKwlpZiAoKmxlZnQgPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKQorCQlyZXR1cm47CisKKwkqcG9zKysgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApOworCWh0X2NhcCA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKSBwb3M7CisKKwlodF9jYXAtPmNhcF9pbmZvID0gY3B1X3RvX2xlMTYoc2JhbmQtPmh0X2luZm8uY2FwKTsKKwltZW1jcHkoaHRfY2FwLT5zdXBwX21jc19zZXQsIHNiYW5kLT5odF9pbmZvLnN1cHBfbWNzX3NldCwgMTYpOworCWh0X2NhcC0+YW1wZHVfcGFyYW1zX2luZm8gPQorCQkoc2JhbmQtPmh0X2luZm8uYW1wZHVfZmFjdG9yICYgSUVFRTgwMjExX0hUX0NBUF9BTVBEVV9GQUNUT1IpIHwKKwkJKChzYmFuZC0+aHRfaW5mby5hbXBkdV9kZW5zaXR5IDw8IDIpICYKKwkJCUlFRUU4MDIxMV9IVF9DQVBfQU1QRFVfREVOU0lUWSk7CisJKmxlZnQgLT0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKTsKK30KKworLyoqCisgKiBpd2xfZmlsbF9wcm9iZV9yZXEgLSBmaWxsIGluIGFsbCByZXF1aXJlZCBmaWVsZHMgYW5kIElFIGZvciBwcm9iZSByZXF1ZXN0CisgKi8KKworc3RhdGljIHUxNiBpd2xfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKKwkJCQkgIGludCBsZWZ0KQoreworCWludCBsZW4gPSAwOworCXU4ICpwb3MgPSBOVUxMOworCXUxNiBhY3RpdmVfcmF0ZXMsIHJldF9yYXRlcywgY2NrX3JhdGVzLCBhY3RpdmVfcmF0ZV9iYXNpYzsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CisJCQkJCQlpd2xfZ2V0X2h3X21vZGUocHJpdiwgYmFuZCk7CisKKworCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBwcm9iZSByZXF1ZXN0LAorCSAqIHR3byBtYW5kYXRvcnkgSUVzIGFuZCB0aGUgZGF0YSAqLworCWxlZnQgLT0gMjQ7CisJaWYgKGxlZnQgPCAwKQorCQlyZXR1cm4gMDsKKworCWZyYW1lLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7CisJbWVtY3B5KGZyYW1lLT5kYSwgaXdsX2JjYXN0X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoZnJhbWUtPnNhLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShmcmFtZS0+YnNzaWQsIGl3bF9iY2FzdF9hZGRyLCBFVEhfQUxFTik7CisJZnJhbWUtPnNlcV9jdHJsID0gMDsKKworCWxlbiArPSAyNDsKKworCS8qIC4uLm5leHQgSUUuLi4gKi8KKwlwb3MgPSAmZnJhbWUtPnUucHJvYmVfcmVxLnZhcmlhYmxlWzBdOworCisJLyogZmlsbCBpbiBvdXIgaW5kaXJlY3QgU1NJRCBJRSAqLworCWxlZnQgLT0gMjsKKwlpZiAobGVmdCA8IDApCisJCXJldHVybiAwOworCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKnBvcysrID0gMDsKKworCWxlbiArPSAyOworCisJLyogZmlsbCBpbiBzdXBwb3J0ZWQgcmF0ZSAqLworCWxlZnQgLT0gMjsKKwlpZiAobGVmdCA8IDApCisJCXJldHVybiAwOworCisJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwkqcG9zID0gMDsKKworCS8qIGV4Y2x1ZGUgNjBNIHJhdGUgKi8KKwlhY3RpdmVfcmF0ZXMgPSBwcml2LT5yYXRlc19tYXNrOworCWFjdGl2ZV9yYXRlcyAmPSB+SVdMX1JBVEVfNjBNX01BU0s7CisKKwlhY3RpdmVfcmF0ZV9iYXNpYyA9IGFjdGl2ZV9yYXRlcyAmIElXTF9CQVNJQ19SQVRFU19NQVNLOworCisJY2NrX3JhdGVzID0gSVdMX0NDS19SQVRFU19NQVNLICYgYWN0aXZlX3JhdGVzOworCXJldF9yYXRlcyA9IGl3bF9zdXBwb3J0ZWRfcmF0ZV90b19pZShwb3MsIGNja19yYXRlcywKKwkJCQkJICAgICBhY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOworCWFjdGl2ZV9yYXRlcyAmPSB+cmV0X3JhdGVzOworCisJcmV0X3JhdGVzID0gaXdsX3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgYWN0aXZlX3JhdGVzLAorCQkJCQkgICAgIGFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7CisJYWN0aXZlX3JhdGVzICY9IH5yZXRfcmF0ZXM7CisKKwlsZW4gKz0gMiArICpwb3M7CisJcG9zICs9ICgqcG9zKSArIDE7CisKKwlpZiAoYWN0aXZlX3JhdGVzID09IDApCisJCWdvdG8gZmlsbF9lbmQ7CisKKwkvKiBmaWxsIGluIHN1cHBvcnRlZCBleHRlbmRlZCByYXRlICovCisJLyogLi4ubmV4dCBJRS4uLiAqLworCWxlZnQgLT0gMjsKKwlpZiAobGVmdCA8IDApCisJCXJldHVybiAwOworCS8qIC4uLiBmaWxsIGl0IGluLi4uICovCisJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJKnBvcyA9IDA7CisJaXdsX3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgYWN0aXZlX3JhdGVzLCBhY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOworCWlmICgqcG9zID4gMCkgeworCQlsZW4gKz0gMiArICpwb3M7CisJCXBvcyArPSAoKnBvcykgKyAxOworCX0gZWxzZSB7CisJCXBvcy0tOworCX0KKworIGZpbGxfZW5kOgorCisJbGVmdCAtPSAyOworCWlmIChsZWZ0IDwgMCkKKwkJcmV0dXJuIDA7CisKKwkqcG9zKysgPSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOworCSpwb3MgPSAwOworCWl3bF9odF9jYXBfdG9faWUoc2JhbmQsIHBvcywgJmxlZnQpOworCWlmICgqcG9zID4gMCkKKwkJbGVuICs9IDIgKyAqcG9zOworCisJcmV0dXJuICh1MTYpbGVuOworfQorCitzdGF0aWMgdTMyIGl3bF9zY2FuX3R4X2FudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKK3sKKwlpbnQgaSwgaW5kOworCisJaW5kID0gcHJpdi0+c2Nhbl90eF9hbnRbYmFuZF07CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtOyBpKyspIHsKKwkJaW5kID0gKGluZCsxKSA+PSBwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA/IDAgOiBpbmQrMTsKKwkJaWYgKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiAoMSA8PCBpbmQpKSB7CisJCQlwcml2LT5zY2FuX3R4X2FudFtiYW5kXSA9IGluZDsKKwkJCWJyZWFrOworCQl9CisJfQorCUlXTF9ERUJVR19TQ0FOKCJzZWxlY3QgVFggQU5UID0gJWNcbiIsICdBJyArIGluZCk7CisJcmV0dXJuIHNjYW5fdHhfYW50W2luZF07Cit9CisKKworc3RhdGljIHZvaWQgaXdsX2JnX3JlcXVlc3Rfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmVxdWVzdF9zY2FuKTsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKKwkJLmlkID0gUkVQTFlfU0NBTl9DTUQsCisJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9zY2FuX2NtZCksCisJCS5tZXRhLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwl9OworCXN0cnVjdCBpd2xfc2Nhbl9jbWQgKnNjYW47CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgdHhfYW50OworCXUxNiBjbWRfbGVuOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwl1OCBuX3Byb2JlcyA9IDI7CisJdTggcnhfY2hhaW4gPSAweDc7IC8qIGJpdG1hcDogQUJDIGNoYWlucyAqLworCisJY29uZiA9IGllZWU4MDIxMV9nZXRfaHdfY29uZihwcml2LT5odyk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgeworCQlJV0xfV0FSTklORygicmVxdWVzdCBzY2FuIGNhbGxlZCB3aGVuIGRyaXZlciBub3QgcmVhZHkuXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgc2NhbiB3YXNuJ3QgY2FuY2VsbGVkIGJlZm9yZSB0aGlzIHF1ZXVlZCB3b3JrCisJICogd2FzIGdpdmVuIHRoZSBjaGFuY2UgdG8gcnVuLi4uICovCisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQorCQlnb3RvIGRvbmU7CisKKwkvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb3Igc2NoZWR1bGVkIGlmIHRoZXJlIGlzIGN1cnJlbnRseQorCSAqIGEgc2NhbiBhY3RpdmUgaW4gdGhlIGhhcmR3YXJlLiAqLworCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHX0lORk8oIk11bHRpcGxlIGNvbmN1cnJlbnQgc2NhbiByZXF1ZXN0cyBpbiBwYXJhbGxlbC4gIgorCQkJICAgICAgICJJZ25vcmluZyBzZWNvbmQgcmVxdWVzdC5cbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCUlXTF9ERUJVR19TQ0FOKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKKwkJSVdMX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBSRiBLaWxsIGFjdGl2YXRpb25cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7CisJCUlXTF9ERUJVR19IQygiU2NhbiByZXF1ZXN0IHdoaWxlIHVuaW5pdGlhbGl6ZWQuICBRdWV1aW5nLlxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIXByaXYtPnNjYW5fYmFuZHMpIHsKKwkJSVdMX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBubyByZXF1ZXN0ZWQgYmFuZHNcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCFwcml2LT5zY2FuKSB7CisJCXByaXYtPnNjYW4gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsX3NjYW5fY21kKSArCisJCQkJICAgICBJV0xfTUFYX1NDQU5fU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdi0+c2NhbikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwlzY2FuID0gcHJpdi0+c2NhbjsKKwltZW1zZXQoc2NhbiwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfc2Nhbl9jbWQpICsgSVdMX01BWF9TQ0FOX1NJWkUpOworCisJc2Nhbi0+cXVpZXRfcGxjcF90aCA9IElXTF9QTENQX1FVSUVUX1RIUkVTSDsKKwlzY2FuLT5xdWlldF90aW1lID0gSVdMX0FDVElWRV9RVUlFVF9USU1FOworCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCXUxNiBpbnRlcnZhbCA9IDA7CisJCXUzMiBleHRyYTsKKwkJdTMyIHN1c3BlbmRfdGltZSA9IDEwMDsKKwkJdTMyIHNjYW5fc3VzcGVuZF90aW1lID0gMTAwOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCUlXTF9ERUJVR19JTkZPKCJTY2FubmluZyB3aGlsZSBhc3NvY2lhdGVkLi4uXG4iKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlpbnRlcnZhbCA9IHByaXYtPmJlYWNvbl9pbnQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlzY2FuLT5zdXNwZW5kX3RpbWUgPSAwOworCQlzY2FuLT5tYXhfb3V0X3RpbWUgPSBjcHVfdG9fbGUzMigyMDAgKiAxMDI0KTsKKwkJaWYgKCFpbnRlcnZhbCkKKwkJCWludGVydmFsID0gc3VzcGVuZF90aW1lOworCisJCWV4dHJhID0gKHN1c3BlbmRfdGltZSAvIGludGVydmFsKSA8PCAyMjsKKwkJc2Nhbl9zdXNwZW5kX3RpbWUgPSAoZXh0cmEgfAorCQkgICAgKChzdXNwZW5kX3RpbWUgJSBpbnRlcnZhbCkgKiAxMDI0KSk7CisJCXNjYW4tPnN1c3BlbmRfdGltZSA9IGNwdV90b19sZTMyKHNjYW5fc3VzcGVuZF90aW1lKTsKKwkJSVdMX0RFQlVHX1NDQU4oInN1c3BlbmRfdGltZSAweCVYIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKKwkJCSAgICAgICBzY2FuX3N1c3BlbmRfdGltZSwgaW50ZXJ2YWwpOworCX0KKworCS8qIFdlIHNob3VsZCBhZGQgdGhlIGFiaWxpdHkgZm9yIHVzZXIgdG8gbG9jayB0byBQQVNTSVZFIE9OTFkgKi8KKwlpZiAocHJpdi0+b25lX2RpcmVjdF9zY2FuKSB7CisJCUlXTF9ERUJVR19TQ0FOKCJTdGFydCBkaXJlY3Qgc2NhbiBmb3IgJyVzJ1xuIiwKKwkJCQlpd2xfZXNjYXBlX2Vzc2lkKHByaXYtPmRpcmVjdF9zc2lkLAorCQkJCXByaXYtPmRpcmVjdF9zc2lkX2xlbikpOworCQlzY2FuLT5kaXJlY3Rfc2NhblswXS5pZCA9IFdMQU5fRUlEX1NTSUQ7CisJCXNjYW4tPmRpcmVjdF9zY2FuWzBdLmxlbiA9IHByaXYtPmRpcmVjdF9zc2lkX2xlbjsKKwkJbWVtY3B5KHNjYW4tPmRpcmVjdF9zY2FuWzBdLnNzaWQsCisJCSAgICAgICBwcml2LT5kaXJlY3Rfc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKTsKKwkJbl9wcm9iZXMrKzsKKwl9IGVsc2UgaWYgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5lc3NpZF9sZW4pIHsKKwkJSVdMX0RFQlVHX1NDQU4oIlN0YXJ0IGRpcmVjdCBzY2FuIGZvciAnJXMnIChub3QgYXNzb2NpYXRlZClcbiIsCisJCQkJaXdsX2VzY2FwZV9lc3NpZChwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKSk7CisJCXNjYW4tPmRpcmVjdF9zY2FuWzBdLmlkID0gV0xBTl9FSURfU1NJRDsKKwkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0ubGVuID0gcHJpdi0+ZXNzaWRfbGVuOworCQltZW1jcHkoc2Nhbi0+ZGlyZWN0X3NjYW5bMF0uc3NpZCwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX2xlbik7CisJCW5fcHJvYmVzKys7CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX1NDQU4oIlN0YXJ0IGluZGlyZWN0IHNjYW4uXG4iKTsKKwl9CisKKwlzY2FuLT50eF9jbWQudHhfZmxhZ3MgPSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOworCXNjYW4tPnR4X2NtZC5zdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOworCXNjYW4tPnR4X2NtZC5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKKworCisJaWYgKHByaXYtPnNjYW5fYmFuZHMgJiBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWikpIHsKKwkJYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJCXNjYW4tPmZsYWdzID0gUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLOworCQl0eF9hbnQgPSBpd2xfc2Nhbl90eF9hbnQocHJpdiwgYmFuZCk7CisJCWlmIChwcml2LT5hY3RpdmVfcnhvbi5mbGFncyAmIFJYT05fRkxHX0NIQU5ORUxfTU9ERV9QVVJFXzQwX01TSykKKwkJCXNjYW4tPnR4X2NtZC5yYXRlX25fZmxhZ3MgPQorCQkJCWl3bF9od19zZXRfcmF0ZV9uX2ZsYWdzKElXTF9SQVRFXzZNX1BMQ1AsCisJCQkJCQkJdHhfYW50KTsKKwkJZWxzZQorCQkJc2Nhbi0+dHhfY21kLnJhdGVfbl9mbGFncyA9CisJCQkJaXdsX2h3X3NldF9yYXRlX25fZmxhZ3MoSVdMX1JBVEVfMU1fUExDUCwKKwkJCQkJCQl0eF9hbnQgfAorCQkJCQkJCVJBVEVfTUNTX0NDS19NU0spOworCQlzY2FuLT5nb29kX0NSQ190aCA9IDA7CisJfSBlbHNlIGlmIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzVHSFopKSB7CisJCWJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOworCQl0eF9hbnQgPSBpd2xfc2Nhbl90eF9hbnQocHJpdiwgYmFuZCk7CisJCXNjYW4tPnR4X2NtZC5yYXRlX25fZmxhZ3MgPQorCQkJCWl3bF9od19zZXRfcmF0ZV9uX2ZsYWdzKElXTF9SQVRFXzZNX1BMQ1AsCisJCQkJCQkJdHhfYW50KTsKKwkJc2Nhbi0+Z29vZF9DUkNfdGggPSBJV0xfR09PRF9DUkNfVEg7CisKKwkJLyogRm9yY2UgdXNlIG9mIGNoYWlucyBCIGFuZCBDICgweDYpIGZvciBzY2FuIFJ4IGZvciA0OTY1CisJCSAqIEF2b2lkIEEgKDB4MSkgYmVjYXVzZSBvZiBpdHMgb2ZmLWNoYW5uZWwgcmVjZXB0aW9uIG9uIEEtYmFuZC4KKwkJICogTUlNTyBpcyBub3QgdXNlZCBoZXJlLCBidXQgdmFsdWUgaXMgcmVxdWlyZWQgKi8KKwkJaWYgKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSA9PSBDU1JfSFdfUkVWX1RZUEVfNDk2NSkKKwkJCXJ4X2NoYWluID0gMHg2OworCX0gZWxzZSB7CisJCUlXTF9XQVJOSU5HKCJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzY2FuLT5yeF9jaGFpbiA9IFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX01TSyB8CisJCQkJY3B1X3RvX2xlMTYoKDB4NyA8PCBSWE9OX1JYX0NIQUlOX1ZBTElEX1BPUykgfAorCQkJCShyeF9jaGFpbiA8PCBSWE9OX1JYX0NIQUlOX0ZPUkNFX1NFTF9QT1MpIHwKKwkJCQkoMHg3IDw8IFJYT05fUlhfQ0hBSU5fRk9SQ0VfTUlNT19TRUxfUE9TKSk7CisKKwljbWRfbGVuID0gaXdsX2ZpbGxfcHJvYmVfcmVxKHByaXYsIGJhbmQsCisJCQkJICAgICAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2Nhbi0+ZGF0YSwKKwkJCQkgICAgIElXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSk7CisKKwlzY2FuLT50eF9jbWQubGVuID0gY3B1X3RvX2xlMTYoY21kX2xlbik7CisKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSKQorCQlzY2FuLT5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKKworCXNjYW4tPmZpbHRlcl9mbGFncyB8PSAoUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0sgfAorCQkJICAgICAgIFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLKTsKKworCXNjYW4tPmNoYW5uZWxfY291bnQgPQorCQlpd2xfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHByaXYsIGJhbmQsIDEsIC8qIGFjdGl2ZSAqLworCQkJbl9wcm9iZXMsCisJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KHNjYW4tPnR4X2NtZC5sZW4pXSk7CisKKwlpZiAoc2Nhbi0+Y2hhbm5lbF9jb3VudCA9PSAwKSB7CisJCUlXTF9ERUJVR19TQ0FOKCJjaGFubmVsIGNvdW50ICVkXG4iLCBzY2FuLT5jaGFubmVsX2NvdW50KTsKKwkJZ290byBkb25lOworCX0KKworCWNtZC5sZW4gKz0gbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbikgKworCSAgICBzY2FuLT5jaGFubmVsX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsKTsKKwljbWQuZGF0YSA9IHNjYW47CisJc2Nhbi0+bGVuID0gY3B1X3RvX2xlMTYoY21kLmxlbik7CisKKwlzZXRfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKKwlyZXQgPSBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jaGVjaywKKwkJCSAgIElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCXJldHVybjsKKworIGRvbmU6CisJLyogaW5mb3JtIG1hYzgwMjExIHNjYW4gYWJvcnRlZCAqLworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBpd2xfYmdfYWJvcnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgYWJvcnRfc2Nhbik7CisKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCisJc2V0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7CisJaXdsX3NlbmRfc2Nhbl9hYm9ydChwcml2KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorCit2b2lkIGl3bF9zZXR1cF9zY2FuX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCS8qICBGSVhNRTogbW92ZSBoZXJlIHdoZW4gcmVzb2x2ZWQgUEVORElORworCSAqICBJTklUX1dPUksoJnByaXYtPnNjYW5fY29tcGxldGVkLCBpd2xfYmdfc2Nhbl9jb21wbGV0ZWQpOyAqLworCUlOSVRfV09SSygmcHJpdi0+cmVxdWVzdF9zY2FuLCBpd2xfYmdfcmVxdWVzdF9zY2FuKTsKKwlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sIGl3bF9iZ19hYm9ydF9zY2FuKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c2Nhbl9jaGVjaywgaXdsX2JnX3NjYW5fY2hlY2spOworfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0dXBfc2Nhbl9kZWZlcnJlZF93b3JrKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwppbmRleCBlNGZkZmFhLi42ZDE0NjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwpAQCAtMjgsMTcgKzI4LDQ0NiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KIAotI2luY2x1ZGUgIml3bC1lZXByb20uaCIKLSNpbmNsdWRlICJpd2wtNDk2NS5oIgorI2luY2x1ZGUgIml3bC1kZXYuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgogI2luY2x1ZGUgIml3bC1zdGEuaCIKLSNpbmNsdWRlICJpd2wtaW8uaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgotI2luY2x1ZGUgIml3bC00OTY1LmgiCi0jaW5jbHVkZSAiaXdsLXN0YS5oIgogCi1pbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCisKKyNkZWZpbmUgSVdMX1NUQV9EUklWRVJfQUNUSVZFIEJJVCgwKSAvKiBkcml2ZXIgZW50cnkgaXMgYWN0aXZlICovCisjZGVmaW5lIElXTF9TVEFfVUNPREVfQUNUSVZFICBCSVQoMSkgLyogdWNvZGUgZW50cnkgaXMgYWN0aXZlICovCisKK3U4IGl3bF9maW5kX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkcikKK3sKKwlpbnQgaTsKKwlpbnQgc3RhcnQgPSAwOworCWludCByZXQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlpZiAoKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgfHwKKwkgICAgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApKQorCQlzdGFydCA9IElXTF9TVEFfSUQ7CisKKwlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspCisJCWlmIChwcml2LT5zdGF0aW9uc1tpXS51c2VkICYmCisJCSAgICAoIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpXS5zdGEuc3RhLmFkZHIsCisJCQkJCSBhZGRyKSkpIHsKKwkJCXJldCA9IGk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJSVdMX0RFQlVHX0FTU09DX0xJTUlUKCJjYW4gbm90IGZpbmQgU1RBICVzIHRvdGFsICVkXG4iLAorCQkJICAgICAgcHJpbnRfbWFjKG1hYywgYWRkciksIHByaXYtPm51bV9zdGF0aW9ucyk7CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd2xfZmluZF9zdGF0aW9uKTsKKworaW50IGl3bF9nZXRfcmFfc3RhX2lkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpIHsKKwkJcmV0dXJuIElXTF9BUF9JRDsKKwl9IGVsc2UgeworCQl1OCAqZGEgPSBpZWVlODAyMTFfZ2V0X0RBKGhkcik7CisJCXJldHVybiBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGRhKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9nZXRfcmFfc3RhX2lkKTsKKworc3RhdGljIHZvaWQgaXdsX3N0YV91Y29kZV9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX0RSSVZFUl9BQ1RJVkUpKQorCQlJV0xfRVJST1IoIkFDVElWQVRFIGEgbm9uIERSSVZFUiBhY3RpdmUgc3RhdGlvbiAlZFxuIiwgc3RhX2lkKTsKKworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCB8PSBJV0xfU1RBX1VDT0RFX0FDVElWRTsKKwlJV0xfREVCVUdfQVNTT0MoIkFkZGVkIFNUQSB0byBVY29kZTogJXNcbiIsCisJCQlwcmludF9tYWMobWFjLCBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEuYWRkcikpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBpd2xfYWRkX3N0YV9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGl3bF9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzID0gTlVMTDsKKwl1OCBzdGFfaWQgPSBjbWQtPmNtZC5hZGRzdGEuc3RhLnN0YV9pZDsKKworCWlmICghc2tiKSB7CisJCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfQUREX1NUQS5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilza2ItPmRhdGE7CisJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7CisJCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCisJCQkgIHJlcy0+aGRyLmZsYWdzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKKwljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6CisJCWl3bF9zdGFfdWNvZGVfYWN0aXZhdGUocHJpdiwgc3RhX2lkKTsKKwkJIC8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCUlXTF9ERUJVR19IQygiUmVjZWl2ZWQgUkVQTFlfQUREX1NUQTooMHglMDhYKVxuIiwKKwkJCSAgICAgcmVzLT51LmFkZF9zdGEuc3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJLyogV2UgZGlkbid0IGNhY2hlIHRoZSBTS0I7IGxldCB0aGUgY2FsbGVyIGZyZWUgaXQgKi8KKwlyZXR1cm4gMTsKK30KKworaW50IGl3bF9zZW5kX2FkZF9zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgIHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqc3RhLCB1OCBmbGFncykKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwl1OCBkYXRhW3NpemVvZigqc3RhKV07CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CisJCS5pZCA9IFJFUExZX0FERF9TVEEsCisJCS5tZXRhLmZsYWdzID0gZmxhZ3MsCisJCS5kYXRhID0gZGF0YSwKKwl9OworCisJaWYgKGZsYWdzICYgQ01EX0FTWU5DKQorCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsX2FkZF9zdGFfY2FsbGJhY2s7CisJZWxzZQorCQljbWQubWV0YS5mbGFncyB8PSBDTURfV0FOVF9TS0I7CisKKwljbWQubGVuID0gcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5idWlsZF9hZGRzdGFfaGNtZChzdGEsIGRhdGEpOworCXJldCA9IGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKKworCWlmIChyZXQgfHwgKGZsYWdzICYgQ01EX0FTWU5DKSkKKwkJcmV0dXJuIHJldDsKKworCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOworCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgeworCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAorCQkJICByZXMtPmhkci5mbGFncyk7CisJCXJldCA9IC1FSU87CisJfQorCisJaWYgKHJldCA9PSAwKSB7CisJCXN3aXRjaCAocmVzLT51LmFkZF9zdGEuc3RhdHVzKSB7CisJCWNhc2UgQUREX1NUQV9TVUNDRVNTX01TSzoKKwkJCWl3bF9zdGFfdWNvZGVfYWN0aXZhdGUocHJpdiwgc3RhLT5zdGEuc3RhX2lkKTsKKwkJCUlXTF9ERUJVR19JTkZPKCJSRVBMWV9BRERfU1RBIFBBU1NFRFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU87CisJCQlJV0xfV0FSTklORygiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlwcml2LT5hbGxvY19yeGJfc2tiLS07CisJZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfYWRkX3N0YSk7CisKK3N0YXRpYyB2b2lkIGl3bF9zZXRfaHRfYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpbmRleCwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKnN0YV9odF9pbmYpCit7CisJX19sZTMyIHN0YV9mbGFnczsKKwl1OCBtaW1vX3BzX21vZGU7CisKKwlpZiAoIXN0YV9odF9pbmYgfHwgIXN0YV9odF9pbmYtPmh0X3N1cHBvcnRlZCkKKwkJZ290byBkb25lOworCisJbWltb19wc19tb2RlID0gKHN0YV9odF9pbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUlNT19QUykgPj4gMjsKKworCXN0YV9mbGFncyA9IHByaXYtPnN0YXRpb25zW2luZGV4XS5zdGEuc3RhdGlvbl9mbGFnczsKKworCXN0YV9mbGFncyAmPSB+KFNUQV9GTEdfUlRTX01JTU9fUFJPVF9NU0sgfCBTVEFfRkxHX01JTU9fRElTX01TSyk7CisKKwlzd2l0Y2ggKG1pbW9fcHNfbW9kZSkgeworCWNhc2UgV0xBTl9IVF9DQVBfTUlNT19QU19TVEFUSUM6CisJCXN0YV9mbGFncyB8PSBTVEFfRkxHX01JTU9fRElTX01TSzsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0hUX0NBUF9NSU1PX1BTX0RZTkFNSUM6CisJCXN0YV9mbGFncyB8PSBTVEFfRkxHX1JUU19NSU1PX1BST1RfTVNLOworCQlicmVhazsKKwljYXNlIFdMQU5fSFRfQ0FQX01JTU9fUFNfRElTQUJMRUQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9XQVJOSU5HKCJJbnZhbGlkIE1JTU8gUFMgbW9kZSAlZCIsIG1pbW9fcHNfbW9kZSk7CisJCWJyZWFrOworCX0KKworCXN0YV9mbGFncyB8PSBjcHVfdG9fbGUzMigKKwkgICAgICAodTMyKXN0YV9odF9pbmYtPmFtcGR1X2ZhY3RvciA8PCBTVEFfRkxHX01BWF9BR0dfU0laRV9QT1MpOworCisJc3RhX2ZsYWdzIHw9IGNwdV90b19sZTMyKAorCSAgICAgICh1MzIpc3RhX2h0X2luZi0+YW1wZHVfZGVuc2l0eSA8PCBTVEFfRkxHX0FHR19NUERVX0RFTlNJVFlfUE9TKTsKKworCWlmIChpd2xfaXNfZmF0X3R4X2FsbG93ZWQocHJpdiwgc3RhX2h0X2luZikpCisJCXN0YV9mbGFncyB8PSBTVEFfRkxHX0ZBVF9FTl9NU0s7CisJZWxzZQorCQlzdGFfZmxhZ3MgJj0gflNUQV9GTEdfRkFUX0VOX01TSzsKKworCXByaXYtPnN0YXRpb25zW2luZGV4XS5zdGEuc3RhdGlvbl9mbGFncyA9IHN0YV9mbGFnczsKKyBkb25lOgorCXJldHVybjsKK30KKworLyoqCisgKiBpd2xfYWRkX3N0YXRpb25fZmxhZ3MgLSBBZGQgc3RhdGlvbiB0byB0YWJsZXMgaW4gZHJpdmVyIGFuZCBkZXZpY2UKKyAqLwordTggaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCBpc19hcCwKKwkJCSB1OCBmbGFncywgc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9pbmZvKQoreworCWludCBpOworCWludCBzdGFfaWQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOworCXN0cnVjdCBpd2xfc3RhdGlvbl9lbnRyeSAqc3RhdGlvbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzX3NwaW47CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzX3NwaW4pOworCWlmIChpc19hcCkKKwkJc3RhX2lkID0gSVdMX0FQX0lEOworCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQorCQlzdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOworCWVsc2UKKwkJZm9yIChpID0gSVdMX1NUQV9JRDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnM7IGkrKykgeworCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNbaV0uc3RhLnN0YS5hZGRyLAorCQkJCQkJYWRkcikpIHsKKwkJCQlzdGFfaWQgPSBpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoIXByaXYtPnN0YXRpb25zW2ldLnVzZWQgJiYKKwkJCSAgICBzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikKKwkJCQlzdGFfaWQgPSBpOworCQl9CisKKwkvKiBUaGVzZSB0d28gY29uZGl0aW9ucyBoYXZlIHRoZSBzYW1lIG91dGNvbWUsIGJ1dCBrZWVwIHRoZW0gc2VwYXJhdGUKKwkgICBzaW5jZSB0aGV5IGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzICovCisJaWYgKHVubGlrZWx5KHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7CisJCXJldHVybiBzdGFfaWQ7CisJfQorCisJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmJgorCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5hZGRyLCBhZGRyKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7CisJCXJldHVybiBzdGFfaWQ7CisJfQorCisKKwlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF07CisJc3RhdGlvbi0+dXNlZCA9IElXTF9TVEFfRFJJVkVSX0FDVElWRTsKKwlJV0xfREVCVUdfQVNTT0MoIkFkZCBTVEEgdG8gZHJpdmVyIElEICVkOiAlc1xuIiwKKwkJCXN0YV9pZCwgcHJpbnRfbWFjKG1hYywgYWRkcikpOworCXByaXYtPm51bV9zdGF0aW9ucysrOworCisJLyogU2V0IHVwIHRoZSBSRVBMWV9BRERfU1RBIGNvbW1hbmQgdG8gc2VuZCB0byBkZXZpY2UgKi8KKwltZW1zZXQoJnN0YXRpb24tPnN0YSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCkpOworCW1lbWNweShzdGF0aW9uLT5zdGEuc3RhLmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKwlzdGF0aW9uLT5zdGEubW9kZSA9IDA7CisJc3RhdGlvbi0+c3RhLnN0YS5zdGFfaWQgPSBzdGFfaWQ7CisJc3RhdGlvbi0+c3RhLnN0YXRpb25fZmxhZ3MgPSAwOworCisJLyogQkNBU1Qgc3RhdGlvbiBhbmQgSUJTUyBzdGF0aW9ucyBkbyBub3Qgd29yayBpbiBIVCBtb2RlICovCisJaWYgKHN0YV9pZCAhPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkICYmCisJICAgIHByaXYtPml3X21vZGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykKKwkJaXdsX3NldF9odF9hZGRfc3RhdGlvbihwcml2LCBzdGFfaWQsIGh0X2luZm8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzX3NwaW4pOworCisJLyogQWRkIHN0YXRpb24gdG8gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSAqLworCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwgJnN0YXRpb24tPnN0YSwgZmxhZ3MpOworCXJldHVybiBzdGFfaWQ7CisKK30KK0VYUE9SVF9TWU1CT0woaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKTsKKworc3RhdGljIHZvaWQgaXdsX3N0YV91Y29kZV9kZWFjdGl2YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgY2hhciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJdTggc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKKworCUJVR19PTihzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTik7CisKKwlJV0xfREVCVUdfQVNTT0MoIlJlbW92ZWQgU1RBIGZyb20gVWNvZGU6ICVzXG4iLAorCQkJcHJpbnRfbWFjKG1hYywgYWRkcikpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisKKwkvKiBVY29kZSBtdXN0IGJlIGFjdGl2ZSBhbmQgZHJpdmVyIG11c3QgYmUgbm9uIGFjdGl2ZSAqLworCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgIT0gSVdMX1NUQV9VQ09ERV9BQ1RJVkUpCisJCUlXTF9FUlJPUigicmVtb3ZlZCBub24gYWN0aXZlIFNUQSAlZFxuIiwgc3RhX2lkKTsKKworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmPSB+SVdMX1NUQV9VQ09ERV9BQ1RJVkU7CisKKwltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0sIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3N0YXRpb25fZW50cnkpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGl3bF9yZW1vdmVfc3RhX2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpyZXMgPSBOVUxMOworCWNvbnN0IGNoYXIgKmFkZHIgPSBjbWQtPmNtZC5ybV9zdGEuYWRkcjsKKworCWlmICghc2tiKSB7CisJCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfUkVNT1ZFX1NUQS5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilza2ItPmRhdGE7CisJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7CisJCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCisJCXJlcy0+aGRyLmZsYWdzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3dpdGNoIChyZXMtPnUucmVtX3N0YS5zdGF0dXMpIHsKKwljYXNlIFJFTV9TVEFfU1VDQ0VTU19NU0s6CisJCWl3bF9zdGFfdWNvZGVfZGVhY3RpdmF0ZShwcml2LCBhZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0VSUk9SKCJSRVBMWV9SRU1PVkVfU1RBIGZhaWxlZFxuIik7CisJCWJyZWFrOworCX0KKworCS8qIFdlIGRpZG4ndCBjYWNoZSB0aGUgU0tCOyBsZXQgdGhlIGNhbGxlciBmcmVlIGl0ICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaXdsX3NlbmRfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwKKwkJCQkgICB1OCBmbGFncykKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzID0gTlVMTDsKKwlpbnQgcmV0OworCisJc3RydWN0IGl3bF9yZW1fc3RhX2NtZCBybV9zdGFfY21kOworCisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CisJCS5pZCA9IFJFUExZX1JFTU9WRV9TVEEsCisJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9yZW1fc3RhX2NtZCksCisJCS5tZXRhLmZsYWdzID0gZmxhZ3MsCisJCS5kYXRhID0gJnJtX3N0YV9jbWQsCisJfTsKKworCW1lbXNldCgmcm1fc3RhX2NtZCwgMCwgc2l6ZW9mKHJtX3N0YV9jbWQpKTsKKwlybV9zdGFfY21kLm51bV9zdGEgPSAxOworCW1lbWNweSgmcm1fc3RhX2NtZC5hZGRyLCBhZGRyICwgRVRIX0FMRU4pOworCisJaWYgKGZsYWdzICYgQ01EX0FTWU5DKQorCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsX3JlbW92ZV9zdGFfY2FsbGJhY2s7CisJZWxzZQorCQljbWQubWV0YS5mbGFncyB8PSBDTURfV0FOVF9TS0I7CisJcmV0ID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOworCisJaWYgKHJldCB8fCAoZmxhZ3MgJiBDTURfQVNZTkMpKQorCQlyZXR1cm4gcmV0OworCisJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CisJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7CisJCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCisJCQkgIHJlcy0+aGRyLmZsYWdzKTsKKwkJcmV0ID0gLUVJTzsKKwl9CisKKwlpZiAoIXJldCkgeworCQlzd2l0Y2ggKHJlcy0+dS5yZW1fc3RhLnN0YXR1cykgeworCQljYXNlIFJFTV9TVEFfU1VDQ0VTU19NU0s6CisJCQlpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUocHJpdiwgYWRkcik7CisJCQlJV0xfREVCVUdfQVNTT0MoIlJFUExZX1JFTU9WRV9TVEEgUEFTU0VEXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVJTzsKKwkJCUlXTF9FUlJPUigiUkVQTFlfUkVNT1ZFX1NUQSBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlwcml2LT5hbGxvY19yeGJfc2tiLS07CisJZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpd2xfcmVtb3ZlX3N0YXRpb24gLSBSZW1vdmUgZHJpdmVyJ3Mga25vd2xlZGdlIG9mIHN0YXRpb24uCisgKi8KK2ludCBpd2xfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQoreworCWludCBzdGFfaWQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOworCWludCBpLCByZXQgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKworCWlmIChpc19hcCkKKwkJc3RhX2lkID0gSVdMX0FQX0lEOworCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQorCQlzdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOworCWVsc2UKKwkJZm9yIChpID0gSVdMX1NUQV9JRDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnM7IGkrKykKKwkJCWlmIChwcml2LT5zdGF0aW9uc1tpXS51c2VkICYmCisJCQkgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpXS5zdGEuc3RhLmFkZHIsCisJCQkJCQlhZGRyKSkgeworCQkJCXN0YV9pZCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisKKwlpZiAodW5saWtlbHkoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pKQorCQlnb3RvIG91dDsKKworCUlXTF9ERUJVR19BU1NPQygiUmVtb3ZpbmcgU1RBIGZyb20gZHJpdmVyOiVkICAlc1xuIiwKKwkJc3RhX2lkLCBwcmludF9tYWMobWFjLCBhZGRyKSk7CisKKwlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX0RSSVZFUl9BQ1RJVkUpKSB7CisJCUlXTF9FUlJPUigiUmVtb3ZpbmcgJXMgYnV0IG5vbiBEUklWRVIgYWN0aXZlXG4iLAorCQkJCXByaW50X21hYyhtYWMsIGFkZHIpKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCEocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9VQ09ERV9BQ1RJVkUpKSB7CisJCUlXTF9FUlJPUigiUmVtb3ZpbmcgJXMgYnV0IG5vbiBVQ09ERSBhY3RpdmVcbiIsCisJCQkJcHJpbnRfbWFjKG1hYywgYWRkcikpOworCQlnb3RvIG91dDsKKwl9CisKKworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmPSB+SVdMX1NUQV9EUklWRVJfQUNUSVZFOworCisJcHJpdi0+bnVtX3N0YXRpb25zLS07CisKKwlCVUdfT04ocHJpdi0+bnVtX3N0YXRpb25zIDwgMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJcmV0ID0gaXdsX3NlbmRfcmVtb3ZlX3N0YXRpb24ocHJpdiwgYWRkciwgQ01EX0FTWU5DKTsKKwlyZXR1cm4gcmV0Oworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3JlbW92ZV9zdGF0aW9uKTsKKworc3RhdGljIGludCBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgaTsKIApAQCAtOTEsNiArNTIwLDcgQEAKIAllbHNlCiAJCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZCk7CiAKIGludCBpd2xfcmVtb3ZlX2RlZmF1bHRfd2VwX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZikKQEAgLTEwNywxMCArNTM3LDEzIEBACiAJcHJpdi0+ZGVmYXVsdF93ZXBfa2V5LS07CiAJbWVtc2V0KCZwcml2LT53ZXBfa2V5c1trZXljb25mLT5rZXlpZHhdLCAwLCBzaXplb2YocHJpdi0+d2VwX2tleXNbMF0pKTsKIAlyZXQgPSBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChwcml2LCAxKTsKKwlJV0xfREVCVUdfV0VQKCJSZW1vdmUgZGVmYXVsdCBXRVAga2V5OiBpZHg9JWQgcmV0PSVkXG4iLAorCQkgICAgICBrZXljb25mLT5rZXlpZHgsIHJldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9yZW1vdmVfZGVmYXVsdF93ZXBfa2V5KTsKIAogaW50IGl3bF9zZXRfZGVmYXVsdF93ZXBfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mKQpAQCAtMTE4LDggKzU1MSwxNCBAQAogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmIChrZXljb25mLT5rZXlsZW4gIT0gV0VQX0tFWV9MRU5fMTI4ICYmCisJICAgIGtleWNvbmYtPmtleWxlbiAhPSBXRVBfS0VZX0xFTl82NCkgeworCQlJV0xfREVCVUdfV0VQKCJCYWQgV0VQIGtleSBsZW5ndGggJWRcbiIsIGtleWNvbmYtPmtleWxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWtleWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7Ci0Ja2V5Y29uZi0+aHdfa2V5X2lkeCA9IGtleWNvbmYtPmtleWlkeDsKKwlrZXljb25mLT5od19rZXlfaWR4ID0gSFdfS0VZX0RFRkFVTFQ7CiAJcHJpdi0+c3RhdGlvbnNbSVdMX0FQX0lEXS5rZXlpbmZvLmFsZyA9IEFMR19XRVA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTEzNCwxMCArNTczLDEzIEBACiAJCQkJCQkJa2V5Y29uZi0+a2V5bGVuKTsKIAogCXJldCA9IGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDApOworCUlXTF9ERUJVR19XRVAoIlNldCBkZWZhdWx0IFdFUCBrZXk6IGxlbj0lZCBpZHg9JWQgcmV0PSVkXG4iLAorCQlrZXljb25mLT5rZXlsZW4sIGtleWNvbmYtPmtleWlkeCwgcmV0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3NldF9kZWZhdWx0X3dlcF9rZXkpOwogCiBzdGF0aWMgaW50IGl3bF9zZXRfd2VwX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCkBAIC0xNDgsNyArNTkwLDYgQEAKIAlpbnQgcmV0OwogCiAJa2V5Y29uZi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKLQlrZXljb25mLT5od19rZXlfaWR4ID0ga2V5Y29uZi0+a2V5aWR4OwogCiAJa2V5X2ZsYWdzIHw9IChTVEFfS0VZX0ZMR19XRVAgfCBTVEFfS0VZX0ZMR19NQVBfS0VZX01TSyk7CiAJa2V5X2ZsYWdzIHw9IGNwdV90b19sZTE2KGtleWNvbmYtPmtleWlkeCA8PCBTVEFfS0VZX0ZMR19LRVlJRF9QT1MpOwpAQCAtMTcyLDE1ICs2MTMsMTggQEAKIAltZW1jcHkoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlbM10sCiAJCQkJa2V5Y29uZi0+a2V5LCBrZXljb25mLT5rZXlsZW4pOwogCi0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPQorCWlmICgocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyAmIFNUQV9LRVlfRkxHX0VOQ1JZUFRfTVNLKQorCQkJPT0gU1RBX0tFWV9GTEdfTk9fRU5DKQorCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9CiAJCQkJIGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgocHJpdik7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyA9IGtleV9mbGFnczsKKwkvKiBlbHNlLCB3ZSBhcmUgb3ZlcnJpZGluZyBhbiBleGlzdGluZyBrZXkgPT4gbm8gbmVlZCB0byBhbGxvY2F0ZWQgcm9vbQorCSAqIGluIHVDb2RlLiAqLwogCisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyA9IGtleV9mbGFnczsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOwogCi0JcmV0ID0gaXdsNDk2NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsCi0JCSZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKKwlyZXQgPSBpd2xfc2VuZF9hZGRfc3RhKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKQEAgLTIwMiw3ICs2NDYsNiBAQAogCQlrZXlfZmxhZ3MgfD0gU1RBX0tFWV9NVUxUSUNBU1RfTVNLOwogCiAJa2V5Y29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwotCWtleWNvbmYtPmh3X2tleV9pZHggPSBrZXljb25mLT5rZXlpZHg7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8uYWxnID0ga2V5Y29uZi0+YWxnOwpAQCAtMjE0LDggKzY1NywxMyBAQAogCW1lbWNweShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5LCBrZXljb25mLT5rZXksCiAJICAgICAgIGtleWNvbmYtPmtleWxlbik7CiAKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9Ci0JCQkJaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChwcml2KTsKKwlpZiAoKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgJiBTVEFfS0VZX0ZMR19FTkNSWVBUX01TSykKKwkJCT09IFNUQV9LRVlfRkxHX05PX0VOQykKKwkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPQorCQkJCSBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHByaXYpOworCS8qIGVsc2UsIHdlIGFyZSBvdmVycmlkaW5nIGFuIGV4aXN0aW5nIGtleSA9PiBubyBuZWVkIHRvIGFsbG9jYXRlZCByb29tCisJICogaW4gdUNvZGUuICovCisKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CkBAIC0yMjMsOCArNjcxLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJSVdMX0RFQlVHX0lORk8oImh3Y3J5cHRvOiBtb2RpZnkgdWNvZGUgc3RhdGlvbiBrZXkgaW5mb1xuIik7Ci0JcmV0dXJuIGl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihwcml2LAotCQkJCSZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKKwlyZXR1cm4gaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CiB9CiAKIHN0YXRpYyBpbnQgaXdsX3NldF90a2lwX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMjM2LDE1ICs2ODMsMTggQEAKIAogCWtleWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKIAlrZXljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQzsKLQlrZXljb25mLT5od19rZXlfaWR4ID0ga2V5Y29uZi0+a2V5aWR4OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8uYWxnID0ga2V5Y29uZi0+YWxnOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5jb25mID0ga2V5Y29uZjsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8ua2V5bGVuID0gMTY7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPQorCisJaWYgKChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzICYgU1RBX0tFWV9GTEdfRU5DUllQVF9NU0spCisJCQk9PSBTVEFfS0VZX0ZMR19OT19FTkMpCisJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID0KIAkJCQkgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChwcml2KTsKKwkvKiBlbHNlLCB3ZSBhcmUgb3ZlcnJpZGluZyBhbiBleGlzdGluZyBrZXkgPT4gbm8gbmVlZCB0byBhbGxvY2F0ZWQgcm9vbQorCSAqIGluIHVDb2RlLiAqLwogCiAJLyogVGhpcyBjb3B5IGlzIGFjdXRhbGx5IG5vdCBuZWVkZWQ6IHdlIGdldCB0aGUga2V5IHdpdGggZWFjaCBUWCAqLwogCW1lbWNweShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8ua2V5LCBrZXljb25mLT5rZXksIDE2KTsKQEAgLTI1Niw1NCArNzA2LDg0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGl3bF9yZW1vdmVfZHluYW1pY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBzdGFfaWQpCitpbnQgaXdsX3JlbW92ZV9keW5hbWljX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKKwkJCQl1OCBzdGFfaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKwl1MTYga2V5X2ZsYWdzOworCXU4IGtleWlkeDsKIAotCXByaXYtPmtleV9tYXBwaW5nX2tleSA9IDA7CisJcHJpdi0+a2V5X21hcHBpbmdfa2V5LS07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKwlrZXlfZmxhZ3MgPSBsZTE2X3RvX2NwdShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzKTsKKwlrZXlpZHggPSAoa2V5X2ZsYWdzID4+IFNUQV9LRVlfRkxHX0tFWUlEX1BPUykgJiAweDM7CisKKwlJV0xfREVCVUdfV0VQKCJSZW1vdmUgZHluYW1pYyBrZXk6IGlkeD0lZCBzdGE9JWRcbiIsCisJCSAgICAgIGtleWNvbmYtPmtleWlkeCwgc3RhX2lkKTsKKworCWlmIChrZXljb25mLT5rZXlpZHggIT0ga2V5aWR4KSB7CisJCS8qIFdlIG5lZWQgdG8gcmVtb3ZlIGEga2V5IHdpdGggaW5kZXggZGlmZmVyZW50IHRoYXQgdGhlIG9uZQorCQkgKiBpbiB0aGUgdUNvZGUuIFRoaXMgbWVhbnMgdGhhdCB0aGUga2V5IHdlIG5lZWQgdG8gcmVtb3ZlIGhhcworCQkgKiBiZWVuIHJlcGxhY2VkIGJ5IGFub3RoZXIgb25lIHdpdGggZGlmZmVyZW50IGluZGV4LgorCQkgKiBEb24ndCBkbyBhbnl0aGluZyBhbmQgcmV0dXJuIG9rCisJCSAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCwKIAkJJnByaXYtPnVjb2RlX2tleV90YWJsZSkpCiAJCUlXTF9FUlJPUigiaW5kZXggJWQgbm90IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKIAkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0KTsKIAltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbywgMCwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2h3X2tleSkpOworCQkJCQlzaXplb2Yoc3RydWN0IGl3bF9od19rZXkpKTsKIAltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleSwgMCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2tleWluZm8pKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0gU1RBX0tFWV9GTEdfTk9fRU5DOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPQorCQkJU1RBX0tFWV9GTEdfTk9fRU5DIHwgU1RBX0tFWV9GTEdfSU5WQUxJRDsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9IFdFUF9JTlZBTElEX09GRlNFVDsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfSU5GTygiaHdjcnlwdG86IGNsZWFyIHVjb2RlIHN0YXRpb24ga2V5IGluZm9cbiIpOwotCXJldHVybiBpd2w0OTY1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCAwKTsKKwlyZXQgPSAgaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChpd2xfcmVtb3ZlX2R5bmFtaWNfa2V5KTsKIAogaW50IGl3bF9zZXRfZHluYW1pY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggc3RhX2lkKQorCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIHU4IHN0YV9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcHJpdi0+a2V5X21hcHBpbmdfa2V5ID0gMTsKKwlwcml2LT5rZXlfbWFwcGluZ19rZXkrKzsKKwlrZXljb25mLT5od19rZXlfaWR4ID0gSFdfS0VZX0RZTkFNSUM7CiAKLQlzd2l0Y2ggKGtleS0+YWxnKSB7CisJc3dpdGNoIChrZXljb25mLT5hbGcpIHsKIAljYXNlIEFMR19DQ01QOgotCQlyZXQgPSBpd2xfc2V0X2NjbXBfZHluYW1pY19rZXlfaW5mbyhwcml2LCBrZXksIHN0YV9pZCk7CisJCXJldCA9IGl3bF9zZXRfY2NtcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CiAJCWJyZWFrOwogCWNhc2UgQUxHX1RLSVA6Ci0JCXJldCA9IGl3bF9zZXRfdGtpcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleSwgc3RhX2lkKTsKKwkJcmV0ID0gaXdsX3NldF90a2lwX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKIAkJYnJlYWs7CiAJY2FzZSBBTEdfV0VQOgotCQlyZXQgPSBpd2xfc2V0X3dlcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleSwgc3RhX2lkKTsKKwkJcmV0ID0gaXdsX3NldF93ZXBfZHluYW1pY19rZXlfaW5mbyhwcml2LCBrZXljb25mLCBzdGFfaWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVua25vd24gYWxnOiAlcyBhbGcgPSAlZFxuIiwgX19mdW5jX18sIGtleS0+YWxnKTsKKwkJSVdMX0VSUk9SKCJVbmtub3duIGFsZzogJXMgYWxnID0gJWRcbiIsIF9fZnVuY19fLCBrZXljb25mLT5hbGcpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAorCUlXTF9ERUJVR19XRVAoIlNldCBkeW5hbWljIGtleTogYWxnPSAlZCBsZW49JWQgaWR4PSVkIHN0YT0lZCByZXQ9JWRcbiIsCisJCSAgICAgIGtleWNvbmYtPmFsZywga2V5Y29uZi0+a2V5bGVuLCBrZXljb25mLT5rZXlpZHgsCisJCSAgICAgIHN0YV9pZCwgcmV0KTsKKwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9zZXRfZHluYW1pY19rZXkpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIHN0YXRpYyB2b2lkIGl3bF9kdW1wX2xxX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0zNDUsMTEgKzgyNSwxNzEgQEAKIAogCWl3bF9kdW1wX2xxX2NtZChwcml2LGxxKTsKIAotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5hc3NvY19zdGF0aW9uX2FkZGVkICYmCi0JICAgIHByaXYtPmxxX21uZ3IubHFfcmVhZHkpCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQpCiAJCXJldHVybiAgaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwogCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2xxX2NtZCk7CiAKKy8qKgorICogaXdsX3N0YV9pbml0X2xxIC0gSW5pdGlhbGl6ZSBhIHN0YXRpb24ncyBoYXJkd2FyZSByYXRlIHRhYmxlCisgKgorICogVGhlIHVDb2RlJ3Mgc3RhdGlvbiB0YWJsZSBjb250YWlucyBhIHRhYmxlIG9mIGZhbGxiYWNrIHJhdGVzCisgKiBmb3IgYXV0b21hdGljIGZhbGxiYWNrIGR1cmluZyB0cmFuc21pc3Npb24uCisgKgorICogTk9URTogVGhpcyBzZXRzIHVwIGEgZGVmYXVsdCBzZXQgb2YgdmFsdWVzLiAgVGhlc2Ugd2lsbCBiZSByZXBsYWNlZCBsYXRlcgorICogICAgICAgaWYgdGhlIGRyaXZlcidzIGl3bC00OTY1LXJzIHJhdGUgc2NhbGluZyBhbGdvcml0aG0gaXMgdXNlZCwgaW5zdGVhZCBvZgorICogICAgICAgcmM4MDIxMV9zaW1wbGUuCisgKgorICogTk9URTogUnVuIFJFUExZX0FERF9TVEEgY29tbWFuZCB0byBzZXQgdXAgc3RhdGlvbiB0YWJsZSBlbnRyeSwgYmVmb3JlCisgKiAgICAgICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gKHdoaWNoIHJ1bnMgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCwKKyAqICAgICAgIHdoaWNoIHJlcXVpcmVzIHN0YXRpb24gdGFibGUgZW50cnkgdG8gZXhpc3QpLgorICovCitzdGF0aWMgdm9pZCBpd2xfc3RhX2luaXRfbHEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQoreworCWludCBpLCByOworCXN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCBsaW5rX2NtZCA9IHsKKwkJLnJlc2VydmVkMSA9IDAsCisJfTsKKwl1MTYgcmF0ZV9mbGFnczsKKworCS8qIFNldCB1cCB0aGUgcmF0ZSBzY2FsaW5nIHRvIHN0YXJ0IGF0IHNlbGVjdGVkIHJhdGUsIGZhbGwgYmFjaworCSAqIGFsbCB0aGUgd2F5IGRvd24gdG8gMU0gaW4gSUVFRSBvcmRlciwgYW5kIHRoZW4gc3BpbiBvbiAxTSAqLworCWlmIChpc19hcCkKKwkJciA9IElXTF9SQVRFXzU0TV9JTkRFWDsKKwllbHNlIGlmIChwcml2LT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXIgPSBJV0xfUkFURV82TV9JTkRFWDsKKwllbHNlCisJCXIgPSBJV0xfUkFURV8xTV9JTkRFWDsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5LX1FVQUxfTUFYX1JFVFJZX05VTTsgaSsrKSB7CisJCXJhdGVfZmxhZ3MgPSAwOworCQlpZiAociA+PSBJV0xfRklSU1RfQ0NLX1JBVEUgJiYgciA8PSBJV0xfTEFTVF9DQ0tfUkFURSkKKwkJCXJhdGVfZmxhZ3MgfD0gUkFURV9NQ1NfQ0NLX01TSzsKKworCQkvKiBVc2UgVHggYW50ZW5uYSBCIG9ubHkgKi8KKwkJcmF0ZV9mbGFncyB8PSBSQVRFX01DU19BTlRfQl9NU0s7IC8qRklYTUU6UlMqLworCisJCWxpbmtfY21kLnJzX3RhYmxlW2ldLnJhdGVfbl9mbGFncyA9CisJCQlpd2xfaHdfc2V0X3JhdGVfbl9mbGFncyhpd2xfcmF0ZXNbcl0ucGxjcCwgcmF0ZV9mbGFncyk7CisJCXIgPSBpd2w0OTY1X2dldF9wcmV2X2llZWVfcmF0ZShyKTsKKwl9CisKKwlsaW5rX2NtZC5nZW5lcmFsX3BhcmFtcy5zaW5nbGVfc3RyZWFtX2FudF9tc2sgPSAyOworCWxpbmtfY21kLmdlbmVyYWxfcGFyYW1zLmR1YWxfc3RyZWFtX2FudF9tc2sgPSAzOworCWxpbmtfY21kLmFnZ19wYXJhbXMuYWdnX2Rpc19zdGFydF90aCA9IDM7CisJbGlua19jbWQuYWdnX3BhcmFtcy5hZ2dfdGltZV9saW1pdCA9IGNwdV90b19sZTE2KDQwMDApOworCisJLyogVXBkYXRlIHRoZSByYXRlIHNjYWxpbmcgZm9yIGNvbnRyb2wgZnJhbWUgVHggdG8gQVAgKi8KKwlsaW5rX2NtZC5zdGFfaWQgPSBpc19hcCA/IElXTF9BUF9JRCA6IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CisKKwlpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQsCisJCQkgICAgICAgc2l6ZW9mKGxpbmtfY21kKSwgJmxpbmtfY21kLCBOVUxMKTsKK30KKworLyoqCisgKiBpd2xfcnhvbl9hZGRfc3RhdGlvbiAtIGFkZCBzdGF0aW9uIGludG8gc3RhdGlvbiB0YWJsZS4KKyAqCisgKiB0aGVyZSBpcyBvbmx5IG9uZSBBUCBzdGF0aW9uIHdpdGggaWQ9IElXTF9BUF9JRAorICogTk9URTogbXV0ZXggbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZm5jdGlvbgorICovCitpbnQgaXdsX3J4b25fYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQoreworCXU4IHN0YV9pZDsKKworCS8qIEFkZCBzdGF0aW9uIHRvIGRldmljZSdzIHN0YXRpb24gdGFibGUgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmcHJpdi0+aHctPmNvbmY7CisJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpjdXJfaHRfY29uZmlnID0gJmNvbmYtPmh0X2NvbmY7CisKKwlpZiAoKGlzX2FwKSAmJgorCSAgICAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREUpICYmCisJICAgIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkpCisJCXN0YV9pZCA9IGl3bF9hZGRfc3RhdGlvbl9mbGFncyhwcml2LCBhZGRyLCBpc19hcCwKKwkJCQkJCSAgIDAsIGN1cl9odF9jb25maWcpOworCWVsc2UKKwkJc3RhX2lkID0gaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHByaXYsIGFkZHIsIGlzX2FwLAorCQkJCQkJICAgMCwgTlVMTCk7CisKKwkvKiBTZXQgdXAgZGVmYXVsdCByYXRlIHNjYWxpbmcgdGFibGUgaW4gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSAqLworCWl3bF9zdGFfaW5pdF9scShwcml2LCBhZGRyLCBpc19hcCk7CisKKwlyZXR1cm4gc3RhX2lkOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhvbl9hZGRfc3RhdGlvbik7CisKKy8qKgorICogaXdsX2dldF9zdGFfaWQgLSBGaW5kIHN0YXRpb24ncyBpbmRleCB3aXRoaW4gc3RhdGlvbiB0YWJsZQorICoKKyAqIElmIG5ldyBJQlNTIHN0YXRpb24sIGNyZWF0ZSBuZXcgZW50cnkgaW4gc3RhdGlvbiB0YWJsZQorICovCitpbnQgaXdsX2dldF9zdGFfaWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCWludCBzdGFfaWQ7CisJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCS8qIElmIHRoaXMgZnJhbWUgaXMgYnJvYWRjYXN0IG9yIG1hbmFnZW1lbnQsIHVzZSBicm9hZGNhc3Qgc3RhdGlvbiBpZCAqLworCWlmICgoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB8fAorCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CisKKwlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKKworCS8qIElmIHdlIGFyZSBhIGNsaWVudCBzdGF0aW9uIGluIGEgQlNTIG5ldHdvcmssIHVzZSB0aGUgc3BlY2lhbAorCSAqIEFQIHN0YXRpb24gZW50cnkgKHRoYXQncyB0aGUgb25seSBzdGF0aW9uIHdlIGNvbW11bmljYXRlIHdpdGgpICovCisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6CisJCXJldHVybiBJV0xfQVBfSUQ7CisKKwkvKiBJZiB3ZSBhcmUgYW4gQVAsIHRoZW4gZmluZCB0aGUgc3RhdGlvbiwgb3IgdXNlIEJDQVNUICovCisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9BUDoKKwkJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKKwkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQorCQkJcmV0dXJuIHN0YV9pZDsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CisKKwkvKiBJZiB0aGlzIGZyYW1lIGlzIGdvaW5nIG91dCB0byBhbiBJQlNTIG5ldHdvcmssIGZpbmQgdGhlIHN0YXRpb24sCisJICogb3IgY3JlYXRlIGEgbmV3IHN0YXRpb24gdGFibGUgZW50cnkgKi8KKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6CisJCXN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgaGRyLT5hZGRyMSk7CisJCWlmIChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikKKwkJCXJldHVybiBzdGFfaWQ7CisKKwkJLyogQ3JlYXRlIG5ldyBzdGF0aW9uIHRhYmxlIGVudHJ5ICovCisJCXN0YV9pZCA9IGl3bF9hZGRfc3RhdGlvbl9mbGFncyhwcml2LCBoZHItPmFkZHIxLAorCQkJCQkJICAgMCwgQ01EX0FTWU5DLCBOVUxMKTsKKworCQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pCisJCQlyZXR1cm4gc3RhX2lkOworCisJCUlXTF9ERUJVR19EUk9QKCJTdGF0aW9uICVzIG5vdCBpbiBzdGF0aW9uIG1hcC4gIgorCQkJICAgICAgICJEZWZhdWx0aW5nIHRvIGJyb2FkY2FzdC4uLlxuIiwKKwkJCSAgICAgICBwcmludF9tYWMobWFjLCBoZHItPmFkZHIxKSk7CisJCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfRFJPUCwgKHU4ICopIGhkciwgc2l6ZW9mKCpoZHIpKTsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CisKKwlkZWZhdWx0OgorCQlJV0xfV0FSTklORygiVW5rbm93biBtb2RlIG9mIG9wZXJhdGlvbjogJWQiLCBwcml2LT5pd19tb2RlKTsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfZ2V0X3N0YV9pZCk7CisKKy8qKgorICogaXdsX3N0YV9tb2RpZnlfZW5hYmxlX3RpZF90eCAtIEVuYWJsZSBUeCBmb3IgdGhpcyBUSUQgaW4gc3RhdGlvbiB0YWJsZQorICovCit2b2lkIGl3bF9zdGFfbW9kaWZ5X2VuYWJsZV90aWRfdHgoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCBpbnQgdGlkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBSZW1vdmUgImRpc2FibGUiIGZsYWcsIHRvIGVuYWJsZSBUeCBmb3IgdGhpcyBUSUQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX1RJRF9ESVNBQkxFX1RYOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnRpZF9kaXNhYmxlX3R4ICY9IGNwdV90b19sZTE2KH4oMSA8PCB0aWQpKTsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zdGFfbW9kaWZ5X2VuYWJsZV90aWRfdHgpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oCmluZGV4IDQ0ZjI3MmUuLjIyMWI5M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oCkBAIC0yOSwyMSArMjksMjcgQEAKICNpZm5kZWYgX19pd2xfc3RhX2hfXwogI2RlZmluZSBfX2l3bF9zdGFfaF9fCiAKLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNkZWZpbmUgSFdfS0VZX0RZTkFNSUMgMAorI2RlZmluZSBIV19LRVlfREVGQVVMVCAxCiAKLSNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCi0jaW5jbHVkZSAiaXdsLWNvcmUuaCIKLSNpbmNsdWRlICJpd2wtNDk2NS5oIgotI2luY2x1ZGUgIml3bC1pby5oIgotI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisvKioKKyAqIGl3bF9maW5kX3N0YXRpb24gLSBGaW5kIHN0YXRpb24gaWQgZm9yIGEgZ2l2ZW4gQlNTSUQKKyAqIEBic3NpZDogTUFDIGFkZHJlc3Mgb2Ygc3RhdGlvbiBJRCB0byBmaW5kCisgKi8KK3U4IGl3bF9maW5kX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOwogCi1pbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggc2VuZF9pZl9lbXB0eSk7CiBpbnQgaXdsX3JlbW92ZV9kZWZhdWx0X3dlcF9rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKIGludCBpd2xfc2V0X2RlZmF1bHRfd2VwX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKLWludCBpd2xfcmVtb3ZlX2R5bmFtaWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggc3RhX2lkKTsKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogaW50IGl3bF9zZXRfZHluYW1pY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggc3RhX2lkKTsKKwkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggc3RhX2lkKTsKK2ludCBpd2xfcmVtb3ZlX2R5bmFtaWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggc3RhX2lkKTsKK2ludCBpd2xfcnhvbl9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApOworaW50IGl3bF9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApOworaW50IGl3bF9nZXRfc3RhX2lkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcik7Cit2b2lkIGl3bF9zdGFfbW9kaWZ5X2VuYWJsZV90aWRfdHgoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCBpbnQgdGlkKTsKK2ludCBpd2xfZ2V0X3JhX3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwogI2VuZGlmIC8qIF9faXdsX3N0YV9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNTBiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCkBAIC0wLDAgKzEsMTUxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCisgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorI2luY2x1ZGUgIml3bC1pby5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisKK3N0YXRpYyBjb25zdCB1MTYgZGVmYXVsdF90aWRfdG9fdHhfZmlmb1tdID0geworCUlXTF9UWF9GSUZPX0FDMSwKKwlJV0xfVFhfRklGT19BQzAsCisJSVdMX1RYX0ZJRk9fQUMwLAorCUlXTF9UWF9GSUZPX0FDMSwKKwlJV0xfVFhfRklGT19BQzIsCisJSVdMX1RYX0ZJRk9fQUMyLAorCUlXTF9UWF9GSUZPX0FDMywKKwlJV0xfVFhfRklGT19BQzMsCisJSVdMX1RYX0ZJRk9fTk9ORSwKKwlJV0xfVFhfRklGT19OT05FLAorCUlXTF9UWF9GSUZPX05PTkUsCisJSVdMX1RYX0ZJRk9fTk9ORSwKKwlJV0xfVFhfRklGT19OT05FLAorCUlXTF9UWF9GSUZPX05PTkUsCisJSVdMX1RYX0ZJRk9fTk9ORSwKKwlJV0xfVFhfRklGT19OT05FLAorCUlXTF9UWF9GSUZPX0FDMworfTsKKworCisvKioKKyAqIGl3bF9od190eHFfZnJlZV90ZmQgLSBGcmVlIGFsbCBjaHVua3MgcmVmZXJlbmNlZCBieSBURkQgW3R4cS0+cS5yZWFkX3B0cl0KKyAqCisgKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBURkQgY2lyY3VsYXIgYnVmZmVyIHJlYWQvd3JpdGUgaW5kZXhlcworICogRG9lcyBOT1QgZnJlZSB0aGUgVEZEIGl0c2VsZiAod2hpY2ggaXMgd2l0aGluIGNpcmN1bGFyIGJ1ZmZlcikKKyAqLworaW50IGl3bF9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCit7CisJc3RydWN0IGl3bF90ZmRfZnJhbWUgKmJkX3RtcCA9IChzdHJ1Y3QgaXdsX3RmZF9mcmFtZSAqKSZ0eHEtPmJkWzBdOworCXN0cnVjdCBpd2xfdGZkX2ZyYW1lICpiZCA9ICZiZF90bXBbdHhxLT5xLnJlYWRfcHRyXTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlpbnQgaTsKKwlpbnQgY291bnRlciA9IDA7CisJaW50IGluZGV4LCBpc19vZGQ7CisKKwkvKiBIb3N0IGNvbW1hbmQgYnVmZmVycyBzdGF5IG1hcHBlZCBpbiBtZW1vcnksIG5vdGhpbmcgdG8gY2xlYW4gKi8KKwlpZiAodHhxLT5xLmlkID09IElXTF9DTURfUVVFVUVfTlVNKQorCQlyZXR1cm4gMDsKKworCS8qIFNhbml0eSBjaGVjayBvbiBudW1iZXIgb2YgY2h1bmtzICovCisJY291bnRlciA9IElXTF9HRVRfQklUUygqYmQsIG51bV90YnMpOworCWlmIChjb3VudGVyID4gTUFYX05VTV9PRl9UQlMpIHsKKwkJSVdMX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLCBjb3VudGVyKTsKKwkJLyogQHRvZG8gaXNzdWUgZmF0YWwgZXJyb3IsIGl0IGlzIHF1aXRlIHNlcmlvdXMgc2l0dWF0aW9uICovCisJCXJldHVybiAwOworCX0KKworCS8qIFVubWFwIGNodW5rcywgaWYgYW55LgorCSAqIFRGRCBpbmZvIGZvciBvZGQgY2h1bmtzIGlzIGRpZmZlcmVudCBmb3JtYXQgdGhhbiBmb3IgZXZlbiBjaHVua3MuICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50ZXI7IGkrKykgeworCQlpbmRleCA9IGkgLyAyOworCQlpc19vZGQgPSBpICYgMHgxOworCisJCWlmIChpc19vZGQpCisJCQlwY2lfdW5tYXBfc2luZ2xlKAorCQkJCWRldiwKKwkJCQlJV0xfR0VUX0JJVFMoYmQtPnBhW2luZGV4XSwgdGIyX2FkZHJfbG8xNikgfAorCQkJCShJV0xfR0VUX0JJVFMoYmQtPnBhW2luZGV4XSwKKwkJCQkJICAgICAgdGIyX2FkZHJfaGkyMCkgPDwgMTYpLAorCQkJCUlXTF9HRVRfQklUUyhiZC0+cGFbaW5kZXhdLCB0YjJfbGVuKSwKKwkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKworCQllbHNlIGlmIChpID4gMCkKKwkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAorCQkJCQkgbGUzMl90b19jcHUoYmQtPnBhW2luZGV4XS50YjFfYWRkciksCisJCQkJCSBJV0xfR0VUX0JJVFMoYmQtPnBhW2luZGV4XSwgdGIxX2xlbiksCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQkvKiBGcmVlIFNLQiwgaWYgYW55LCBmb3IgdGhpcyBjaHVuayAqLworCQlpZiAodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbaV0pIHsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSB0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpXTsKKworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbaV0gPSBOVUxMOworCQl9CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfaHdfdHhxX2ZyZWVfdGZkKTsKKworCitpbnQgaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHZvaWQgKnB0ciwKKwkJCQkgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKQoreworCWludCBpbmRleCwgaXNfb2RkOworCXN0cnVjdCBpd2xfdGZkX2ZyYW1lICp0ZmQgPSBwdHI7CisJdTMyIG51bV90YnMgPSBJV0xfR0VUX0JJVFMoKnRmZCwgbnVtX3Ricyk7CisKKwkvKiBFYWNoIFRGRCBjYW4gcG9pbnQgdG8gYSBtYXhpbXVtIDIwIFR4IGJ1ZmZlcnMgKi8KKwlpZiAoKG51bV90YnMgPj0gTUFYX05VTV9PRl9UQlMpIHx8IChudW1fdGJzIDwgMCkpIHsKKwkJSVdMX0VSUk9SKCJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKKwkJCSAgTUFYX05VTV9PRl9UQlMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbmRleCA9IG51bV90YnMgLyAyOworCWlzX29kZCA9IG51bV90YnMgJiAweDE7CisKKwlpZiAoIWlzX29kZCkgeworCQl0ZmQtPnBhW2luZGV4XS50YjFfYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOworCQlJV0xfU0VUX0JJVFModGZkLT5wYVtpbmRleF0sIHRiMV9hZGRyX2hpLAorCQkJICAgICBpd2xfZ2V0X2RtYV9oaV9hZGRyZXNzKGFkZHIpKTsKKwkJSVdMX1NFVF9CSVRTKHRmZC0+cGFbaW5kZXhdLCB0YjFfbGVuLCBsZW4pOworCX0gZWxzZSB7CisJCUlXTF9TRVRfQklUUyh0ZmQtPnBhW2luZGV4XSwgdGIyX2FkZHJfbG8xNiwKKwkJCSAgICAgKHUzMikgKGFkZHIgJiAweGZmZmYpKTsKKwkJSVdMX1NFVF9CSVRTKHRmZC0+cGFbaW5kZXhdLCB0YjJfYWRkcl9oaTIwLCBhZGRyID4+IDE2KTsKKwkJSVdMX1NFVF9CSVRTKHRmZC0+cGFbaW5kZXhdLCB0YjJfbGVuLCBsZW4pOworCX0KKworCUlXTF9TRVRfQklUUygqdGZkLCBudW1fdGJzLCBudW1fdGJzICsgMSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCk7CisKKy8qKgorICogaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyIC0gU2VuZCBuZXcgd3JpdGUgaW5kZXggdG8gaGFyZHdhcmUKKyAqLworaW50IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKK3sKKwl1MzIgcmVnID0gMDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOworCisJaWYgKHR4cS0+bmVlZF91cGRhdGUgPT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGlmIHdlJ3JlIHRyeWluZyB0byBzYXZlIHBvd2VyICovCisJaWYgKHRlc3RfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpKSB7CisJCS8qIHdha2UgdXAgbmljIGlmIGl0J3MgcG93ZXJlZCBkb3duIC4uLgorCQkgKiB1Q29kZSB3aWxsIHdha2UgdXAsIGFuZCBpbnRlcnJ1cHQgdXMgYWdhaW4sIHNvIG5leHQKKwkJICogdGltZSB3ZSdsbCBza2lwIHRoaXMgcGFydC4gKi8KKwkJcmVnID0gaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7CisKKwkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKKwkJCUlXTF9ERUJVR19JTkZPKCJSZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwgcmVnKTsKKwkJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKKwkJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQkvKiByZXN0b3JlIHRoaXMgcXVldWUncyBwYXJhbWV0ZXJzIGluIG5pYyBoYXJkd2FyZS4gKi8KKwkJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCisJCQkJICAgICB0eHEtPnEud3JpdGVfcHRyIHwgKHR4cV9pZCA8PCA4KSk7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisKKwkvKiBlbHNlIG5vdCBpbiBwb3dlci1zYXZlIG1vZGUsIHVDb2RlIHdpbGwgbmV2ZXIgc2xlZXAgd2hlbiB3ZSdyZQorCSAqIHRyeWluZyB0byB0eCAoZHVyaW5nIFJGS0lMTCwgd2UncmUgbm90IHRyeWluZyB0byB0eCkuICovCisJfSBlbHNlCisJCWl3bF93cml0ZTMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwKKwkJCSAgICB0eHEtPnEud3JpdGVfcHRyIHwgKHR4cV9pZCA8PCA4KSk7CisKKwl0eHEtPm5lZWRfdXBkYXRlID0gMDsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cik7CisKKworLyoqCisgKiBpd2xfdHhfcXVldWVfZnJlZSAtIERlYWxsb2NhdGUgRE1BIHF1ZXVlLgorICogQHR4cTogVHJhbnNtaXQgcXVldWUgdG8gZGVhbGxvY2F0ZS4KKyAqCisgKiBFbXB0eSBxdWV1ZSBieSByZW1vdmluZyBhbmQgZGVzdHJveWluZyBhbGwgQkQncy4KKyAqIEZyZWUgYWxsIGJ1ZmZlcnMuCisgKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHZvaWQgaXdsX3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCit7CisJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CisJaW50IGxlbjsKKworCWlmIChxLT5uX2JkID09IDApCisJCXJldHVybjsKKworCS8qIGZpcnN0LCBlbXB0eSBhbGwgQkQncyAqLworCWZvciAoOyBxLT53cml0ZV9wdHIgIT0gcS0+cmVhZF9wdHI7CisJICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpCisJCWl3bF9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKKworCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgKiBxLT5uX3dpbmRvdzsKKwlpZiAocS0+aWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCisJCWxlbiArPSBJV0xfTUFYX1NDQU5fU0laRTsKKworCS8qIERlLWFsbG9jIGFycmF5IG9mIGNvbW1hbmQvdHggYnVmZmVycyAqLworCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBsZW4sIHR4cS0+Y21kLCB0eHEtPmRtYV9hZGRyX2NtZCk7CisKKwkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLworCWlmICh0eHEtPnEubl9iZCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHNpemVvZihzdHJ1Y3QgaXdsX3RmZF9mcmFtZSkgKgorCQkJCSAgICB0eHEtPnEubl9iZCwgdHhxLT5iZCwgdHhxLT5xLmRtYV9hZGRyKTsKKworCS8qIERlLWFsbG9jIGFycmF5IG9mIHBlci1URkQgZHJpdmVyIGRhdGEgKi8KKwlrZnJlZSh0eHEtPnR4Yik7CisJdHhxLT50eGIgPSBOVUxMOworCisJLyogMC1maWxsIHF1ZXVlIGRlc2NyaXB0b3Igc3RydWN0dXJlICovCisJbWVtc2V0KHR4cSwgMCwgc2l6ZW9mKCp0eHEpKTsKK30KKworLyoqKioqKioqKioqKioqKiBETUEtUVVFVUUtR0VORVJBTC1GVU5DVElPTlMgICoqKioqCisgKiBETUEgc2VydmljZXMKKyAqCisgKiBUaGVvcnkgb2Ygb3BlcmF0aW9uCisgKgorICogQSBUeCBvciBSeCBxdWV1ZSByZXNpZGVzIGluIGhvc3QgRFJBTSwgYW5kIGlzIGNvbXByaXNlZCBvZiBhIGNpcmN1bGFyIGJ1ZmZlcgorICogb2YgYnVmZmVyIGRlc2NyaXB0b3JzLCBlYWNoIG9mIHdoaWNoIHBvaW50cyB0byBvbmUgb3IgbW9yZSBkYXRhIGJ1ZmZlcnMgZm9yCisgKiB0aGUgZGV2aWNlIHRvIHJlYWQgZnJvbSBvciBmaWxsLiAgRHJpdmVyIGFuZCBkZXZpY2UgZXhjaGFuZ2Ugc3RhdHVzIG9mIGVhY2gKKyAqIHF1ZXVlIHZpYSAicmVhZCIgYW5kICJ3cml0ZSIgcG9pbnRlcnMuICBEcml2ZXIga2VlcHMgbWluaW11bSBvZiAyIGVtcHR5CisgKiBlbnRyaWVzIGluIGVhY2ggY2lyY3VsYXIgYnVmZmVyLCB0byBwcm90ZWN0IGFnYWluc3QgY29uZnVzaW5nIGVtcHR5IGFuZCBmdWxsCisgKiBxdWV1ZSBzdGF0ZXMuCisgKgorICogVGhlIGRldmljZSByZWFkcyBvciB3cml0ZXMgdGhlIGRhdGEgaW4gdGhlIHF1ZXVlcyB2aWEgdGhlIGRldmljZSdzIHNldmVyYWwKKyAqIERNQS9GSUZPIGNoYW5uZWxzLiAgRWFjaCBxdWV1ZSBpcyBtYXBwZWQgdG8gYSBzaW5nbGUgRE1BIGNoYW5uZWwuCisgKgorICogRm9yIFR4IHF1ZXVlLCB0aGVyZSBhcmUgbG93IG1hcmsgYW5kIGhpZ2ggbWFyayBsaW1pdHMuIElmLCBhZnRlciBxdWV1aW5nCisgKiB0aGUgcGFja2V0IGZvciBUeCwgZnJlZSBzcGFjZSBiZWNvbWUgPCBsb3cgbWFyaywgVHggcXVldWUgc3RvcHBlZC4gV2hlbgorICogcmVjbGFpbWluZyBwYWNrZXRzIChvbiAndHggZG9uZSBJUlEpLCBpZiBmcmVlIHNwYWNlIGJlY29tZSA+IGhpZ2ggbWFyaywKKyAqIFR4IHF1ZXVlIHJlc3VtZWQuCisgKgorICogU2VlIG1vcmUgZGV0YWlsZWQgaW5mbyBpbiBpd2wtNDk2NS1ody5oLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGl3bF9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsX3F1ZXVlICpxKQoreworCWludCBzID0gcS0+cmVhZF9wdHIgLSBxLT53cml0ZV9wdHI7CisKKwlpZiAocS0+cmVhZF9wdHIgPiBxLT53cml0ZV9wdHIpCisJCXMgLT0gcS0+bl9iZDsKKworCWlmIChzIDw9IDApCisJCXMgKz0gcS0+bl93aW5kb3c7CisJLyoga2VlcCBzb21lIHJlc2VydmUgdG8gbm90IGNvbmZ1c2UgZW1wdHkgYW5kIGZ1bGwgc2l0dWF0aW9ucyAqLworCXMgLT0gMjsKKwlpZiAocyA8IDApCisJCXMgPSAwOworCXJldHVybiBzOworfQorRVhQT1JUX1NZTUJPTChpd2xfcXVldWVfc3BhY2UpOworCisKKy8qKgorICogaXdsX3F1ZXVlX2luaXQgLSBJbml0aWFsaXplIHF1ZXVlJ3MgaGlnaC9sb3ctd2F0ZXIgYW5kIHJlYWQvd3JpdGUgaW5kZXhlcworICovCitzdGF0aWMgaW50IGl3bF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9xdWV1ZSAqcSwKKwkJCSAgaW50IGNvdW50LCBpbnQgc2xvdHNfbnVtLCB1MzIgaWQpCit7CisJcS0+bl9iZCA9IGNvdW50OworCXEtPm5fd2luZG93ID0gc2xvdHNfbnVtOworCXEtPmlkID0gaWQ7CisKKwkvKiBjb3VudCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UgaXdsX3F1ZXVlX2luY193cmFwCisJICogYW5kIGl3bF9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLworCUJVR19PTighaXNfcG93ZXJfb2ZfMihjb3VudCkpOworCisJLyogc2xvdHNfbnVtIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQorCSAqIGdldF9jbWRfaW5kZXggaXMgYnJva2VuLiAqLworCUJVR19PTighaXNfcG93ZXJfb2ZfMihzbG90c19udW0pKTsKKworCXEtPmxvd19tYXJrID0gcS0+bl93aW5kb3cgLyA0OworCWlmIChxLT5sb3dfbWFyayA8IDQpCisJCXEtPmxvd19tYXJrID0gNDsKKworCXEtPmhpZ2hfbWFyayA9IHEtPm5fd2luZG93IC8gODsKKwlpZiAocS0+aGlnaF9tYXJrIDwgMikKKwkJcS0+aGlnaF9tYXJrID0gMjsKKworCXEtPndyaXRlX3B0ciA9IHEtPnJlYWRfcHRyID0gMDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl3bF90eF9xdWV1ZV9hbGxvYyAtIEFsbG9jIGRyaXZlciBkYXRhIGFuZCBURkQgQ0IgZm9yIG9uZSBUeC9jbWQgcXVldWUKKyAqLworc3RhdGljIGludCBpd2xfdHhfcXVldWVfYWxsb2Moc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLCB1MzIgaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CisKKwkvKiBEcml2ZXIgcHJpdmF0ZSBkYXRhLCBvbmx5IGZvciBUeCAobm90IGNvbW1hbmQpIHF1ZXVlcywKKwkgKiBub3Qgc2hhcmVkIHdpdGggZGV2aWNlLiAqLworCWlmIChpZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgeworCQl0eHEtPnR4YiA9IGttYWxsb2Moc2l6ZW9mKHR4cS0+dHhiWzBdKSAqCisJCQkJICAgVEZEX1FVRVVFX1NJWkVfTUFYLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0eHEtPnR4YikgeworCQkJSVdMX0VSUk9SKCJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgorCQkJCSAgInN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9IGVsc2UKKwkJdHhxLT50eGIgPSBOVUxMOworCisJLyogQ2lyY3VsYXIgYnVmZmVyIG9mIHRyYW5zbWl0IGZyYW1lIGRlc2NyaXB0b3JzIChURkRzKSwKKwkgKiBzaGFyZWQgd2l0aCBkZXZpY2UgKi8KKwl0eHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LAorCQkJc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYLAorCQkJJnR4cS0+cS5kbWFfYWRkcik7CisKKwlpZiAoIXR4cS0+YmQpIHsKKwkJSVdMX0VSUk9SKCJwY2lfYWxsb2NfY29uc2lzdGVudCglemQpIGZhaWxlZFxuIiwKKwkJCSAgc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYKTsKKwkJZ290byBlcnJvcjsKKwl9CisJdHhxLT5xLmlkID0gaWQ7CisKKwlyZXR1cm4gMDsKKworIGVycm9yOgorCWtmcmVlKHR4cS0+dHhiKTsKKwl0eHEtPnR4YiA9IE5VTEw7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKKyAqIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgY2lyY3VsYXIgYnVmZmVyIG9mIFR4IEZyYW1lIERlc2NyaXB0b3JzIGZvcgorICogZ2l2ZW4gVHggcXVldWUsIGFuZCBlbmFibGUgdGhlIERNQSBjaGFubmVsIHVzZWQgZm9yIHRoYXQgcXVldWUuCisgKgorICogNDk2NSBzdXBwb3J0cyB1cCB0byAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwgbWFwcGVkIHRvIHVwIHRvIDggVHggRE1BCisgKiBjaGFubmVscyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJjKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIENpcmN1bGFyIGJ1ZmZlciAoVEZEIHF1ZXVlIGluIERSQU0pIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fQ0JCQ19RVUVVRSh0eHFfaWQpLAorCQkJICAgICB0eHEtPnEuZG1hX2FkZHIgPj4gOCk7CisKKwkvKiBFbmFibGUgRE1BIGNoYW5uZWwsIHVzaW5nIHNhbWUgaWQgYXMgZm9yIFRGRCBxdWV1ZSAqLworCWl3bF93cml0ZV9kaXJlY3QzMigKKwkJcHJpdiwgRkhfVENTUl9DSE5MX1RYX0NPTkZJR19SRUcodHhxX2lkKSwKKwkJRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTkFCTEUgfAorCQlGSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DUkVESVRfRU5BQkxFX1ZBTCk7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpd2xfdHhfcXVldWVfaW5pdCAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSB0eC9jbWQgcXVldWUKKyAqLworc3RhdGljIGludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCSAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlpbnQgbGVuOworCWludCByYyA9IDA7CisKKwkvKgorCSAqIEFsbG9jIGJ1ZmZlciBhcnJheSBmb3IgY29tbWFuZHMgKFR4IG9yIG90aGVyIHR5cGVzIG9mIGNvbW1hbmRzKS4KKwkgKiBGb3IgdGhlIGNvbW1hbmQgcXVldWUgKCM0KSwgYWxsb2NhdGUgY29tbWFuZCBzcGFjZSArIG9uZSBiaWcKKwkgKiBjb21tYW5kIGZvciBzY2FuLCBzaW5jZSBzY2FuIGNvbW1hbmQgaXMgdmVyeSBodWdlOyB0aGUgc3lzdGVtIHdpbGwKKwkgKiBub3QgaGF2ZSB0d28gc2NhbnMgYXQgdGhlIHNhbWUgdGltZSwgc28gb25seSBvbmUgaXMgbmVlZGVkLgorCSAqIEZvciBub3JtYWwgVHggcXVldWVzIChhbGwgb3RoZXIgcXVldWVzKSwgbm8gc3VwZXItc2l6ZSBjb21tYW5kCisJICogc3BhY2UgaXMgbmVlZGVkLgorCSAqLworCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgKiBzbG90c19udW07CisJaWYgKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKKwkJbGVuICs9ICBJV0xfTUFYX1NDQU5fU0laRTsKKwl0eHEtPmNtZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgbGVuLCAmdHhxLT5kbWFfYWRkcl9jbWQpOworCWlmICghdHhxLT5jbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogQWxsb2MgZHJpdmVyIGRhdGEgYXJyYXkgYW5kIFRGRCBjaXJjdWxhciBidWZmZXIgKi8KKwlyYyA9IGl3bF90eF9xdWV1ZV9hbGxvYyhwcml2LCB0eHEsIHR4cV9pZCk7CisJaWYgKHJjKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBsZW4sIHR4cS0+Y21kLCB0eHEtPmRtYV9hZGRyX2NtZCk7CisKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXR4cS0+bmVlZF91cGRhdGUgPSAwOworCisJLyogVEZEX1FVRVVFX1NJWkVfTUFYIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQorCSAqIGl3bF9xdWV1ZV9pbmNfd3JhcCBhbmQgaXdsX3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCisJQlVJTERfQlVHX09OKFRGRF9RVUVVRV9TSVpFX01BWCAmIChURkRfUVVFVUVfU0laRV9NQVggLSAxKSk7CisKKwkvKiBJbml0aWFsaXplIHF1ZXVlJ3MgaGlnaC9sb3ctd2F0ZXIgbWFya3MsIGFuZCBoZWFkL3RhaWwgaW5kZXhlcyAqLworCWl3bF9xdWV1ZV9pbml0KHByaXYsICZ0eHEtPnEsIFRGRF9RVUVVRV9TSVpFX01BWCwgc2xvdHNfbnVtLCB0eHFfaWQpOworCisJLyogVGVsbCBkZXZpY2Ugd2hlcmUgdG8gZmluZCBxdWV1ZSAqLworCWl3bF9od190eF9xdWV1ZV9pbml0KHByaXYsIHR4cSk7CisKKwlyZXR1cm4gMDsKK30KKy8qKgorICogaXdsX2h3X3R4cV9jdHhfZnJlZSAtIEZyZWUgVFhRIENvbnRleHQKKyAqCisgKiBEZXN0cm95IGFsbCBUWCBETUEgcXVldWVzIGFuZCBzdHJ1Y3R1cmVzCisgKi8KK3ZvaWQgaXdsX2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHR4cV9pZDsKKworCS8qIFR4IHF1ZXVlcyAqLworCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDwgcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtOyB0eHFfaWQrKykKKwkJaXdsX3R4X3F1ZXVlX2ZyZWUocHJpdiwgJnByaXYtPnR4cVt0eHFfaWRdKTsKKworCS8qIEtlZXAtd2FybSBidWZmZXIgKi8KKwlpd2xfa3dfZnJlZShwcml2KTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2h3X3R4cV9jdHhfZnJlZSk7CisKKworLyoqCisgKiBpd2xfdHhxX2N0eF9yZXNldCAtIFJlc2V0IFRYIHF1ZXVlIGNvbnRleHQKKyAqIERlc3Ryb3lzIGFsbCBETUEgc3RydWN0dXJlcyBhbmQgaW5pdGlhbGlzZSB0aGVtIGFnYWluCisgKgorICogQHBhcmFtIHByaXYKKyAqIEByZXR1cm4gZXJyb3IgY29kZQorICovCitpbnQgaXdsX3R4cV9jdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCWludCB0eHFfaWQsIHNsb3RzX251bTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaXdsX2t3X2ZyZWUocHJpdik7CisKKwkvKiBGcmVlIGFsbCB0eC9jbWQgcXVldWVzIGFuZCBrZWVwLXdhcm0gYnVmZmVyICovCisJaXdsX2h3X3R4cV9jdHhfZnJlZShwcml2KTsKKworCS8qIEFsbG9jIGtlZXAtd2FybSBidWZmZXIgKi8KKwlyZXQgPSBpd2xfa3dfYWxsb2MocHJpdik7CisJaWYgKHJldCkgeworCQlJV0xfRVJST1IoIktlZXAgV2FybSBhbGxvY2F0aW9uIGZhaWxlZCIpOworCQlnb3RvIGVycm9yX2t3OworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlnb3RvIGVycm9yX3Jlc2V0OworCX0KKworCS8qIFR1cm4gb2ZmIGFsbCBUeCBETUEgZmlmb3MgKi8KKwlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfc2V0X3NjaGVkKHByaXYsIDApOworCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKworCS8qIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgdGhlIGtlZXAtd2FybSBidWZmZXIgKi8KKwlyZXQgPSBpd2xfa3dfaW5pdChwcml2KTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlJPUigia3dfaW5pdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yX3Jlc2V0OworCX0KKworCS8qIEFsbG9jIGFuZCBpbml0IGFsbCBUeCBxdWV1ZXMsIGluY2x1ZGluZyB0aGUgY29tbWFuZCBxdWV1ZSAoIzQpICovCisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKSB7CisJCXNsb3RzX251bSA9ICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pID8KKwkJCQkJVEZEX0NNRF9TTE9UUyA6IFRGRF9UWF9DTURfU0xPVFM7CisJCXJldCA9IGl3bF90eF9xdWV1ZV9pbml0KHByaXYsICZwcml2LT50eHFbdHhxX2lkXSwgc2xvdHNfbnVtLAorCQkJCSAgICAgICB0eHFfaWQpOworCQlpZiAocmV0KSB7CisJCQlJV0xfRVJST1IoIlR4ICVkIHF1ZXVlIGluaXQgZmFpbGVkXG4iLCB0eHFfaWQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCXJldHVybiByZXQ7CisKKyBlcnJvcjoKKwlpd2xfaHdfdHhxX2N0eF9mcmVlKHByaXYpOworIGVycm9yX3Jlc2V0OgorCWl3bF9rd19mcmVlKHByaXYpOworIGVycm9yX2t3OgorCXJldHVybiByZXQ7Cit9CisvKioKKyAqIGl3bF90eHFfY3R4X3N0b3AgLSBTdG9wIGFsbCBUeCBETUEgY2hhbm5lbHMsIGZyZWUgVHggcXVldWUgbWVtb3J5CisgKi8KK3ZvaWQgaXdsX3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisKKwlpbnQgdHhxX2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKworCS8qIFR1cm4gb2ZmIGFsbCBUeCBETUEgZmlmb3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9zZXRfc2NoZWQocHJpdiwgMCk7CisKKwkvKiBTdG9wIGVhY2ggVHggRE1BIGNoYW5uZWwsIGFuZCB3YWl0IGZvciBpdCB0byBiZSBpZGxlICovCisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKSB7CisJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LAorCQkJCSAgIEZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKHR4cV9pZCksIDB4MCk7CisJCWl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgRkhfVFNTUl9UWF9TVEFUVVNfUkVHLAorCQkJCSAgICBGSF9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRQorCQkJCSAgICAodHhxX2lkKSwgMjAwKTsKKwl9CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBEZWFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsIFR4IHF1ZXVlcyAqLworCWl3bF9od190eHFfY3R4X2ZyZWUocHJpdik7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF90eHFfY3R4X3N0b3ApOworCisvKgorICogaGFuZGxlIGJ1aWxkIFJFUExZX1RYIGNvbW1hbmQgbm90aWZpY2F0aW9uLgorICovCitzdGF0aWMgdm9pZCBpd2xfdHhfY21kX2J1aWxkX2Jhc2ljKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpd2xfdHhfY21kICp0eF9jbWQsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJCSAgaW50IGlzX3VuaWNhc3QsIHU4IHN0ZF9pZCkKK3sKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJX19sZTMyIHR4X2ZsYWdzID0gdHhfY21kLT50eF9mbGFnczsKKworCXR4X2NtZC0+c3RvcF90aW1lLmxpZmVfdGltZSA9IFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEU7CisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpIHsKKwkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19BQ0tfTVNLOworCQlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKQorCQkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19TRVFfQ1RMX01TSzsKKwkJaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGZjKSAmJgorCQkgICAgIShsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIDB4ZikpCisJCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX1RTRl9NU0s7CisJfSBlbHNlIHsKKwkJdHhfZmxhZ3MgJj0gKH5UWF9DTURfRkxHX0FDS19NU0spOworCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOworCX0KKworCWlmIChpZWVlODAyMTFfaXNfYmFja19yZXEoZmMpKQorCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX0FDS19NU0sgfCBUWF9DTURfRkxHX0lNTV9CQV9SU1BfTUFTSzsKKworCisJdHhfY21kLT5zdGFfaWQgPSBzdGRfaWQ7CisJaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSkKKwkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19NT1JFX0ZSQUdfTVNLOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJdTggKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCXR4X2NtZC0+dGlkX3RzcGVjID0gcWNbMF0gJiAweGY7CisJCXR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1NFUV9DVExfTVNLOworCX0gZWxzZSB7CisJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7CisJfQorCisJcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5ydHNfdHhfY21kX2ZsYWcoaW5mbywgJnR4X2ZsYWdzKTsKKworCWlmICgodHhfZmxhZ3MgJiBUWF9DTURfRkxHX1JUU19NU0spIHx8ICh0eF9mbGFncyAmIFRYX0NNRF9GTEdfQ1RTX01TSykpCisJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfRlVMTF9UWE9QX1BST1RfTVNLOworCisJdHhfZmxhZ3MgJj0gfihUWF9DTURfRkxHX0FOVF9TRUxfTVNLKTsKKwlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKSB7CisJCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGZjKSB8fCBpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEoZmMpKQorCQkJdHhfY21kLT50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigzKTsKKwkJZWxzZQorCQkJdHhfY21kLT50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigyKTsKKwl9IGVsc2UgeworCQl0eF9jbWQtPnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IDA7CisJfQorCisJdHhfY21kLT5kcml2ZXJfdHhvcCA9IDA7CisJdHhfY21kLT50eF9mbGFncyA9IHR4X2ZsYWdzOworCXR4X2NtZC0+bmV4dF9mcmFtZV9sZW4gPSAwOworfQorCisjZGVmaW5lIFJUU19IQ0NBX1JFVFJZX0xJTUlUCQkzCisjZGVmaW5lIFJUU19ERkFVTFRfUkVUUllfTElNSVQJCTYwCisKK3N0YXRpYyB2b2lkIGl3bF90eF9jbWRfYnVpbGRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaXdsX3R4X2NtZCAqdHhfY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJICAgICAgX19sZTE2IGZjLCBpbnQgc3RhX2lkLAorCQkJICAgICAgaW50IGlzX2hjY2EpCit7CisJdTggcnRzX3JldHJ5X2xpbWl0ID0gMDsKKwl1OCBkYXRhX3JldHJ5X2xpbWl0ID0gMDsKKwl1OCByYXRlX3BsY3A7CisJdTE2IHJhdGVfZmxhZ3MgPSAwOworCWludCByYXRlX2lkeDsKKworCXJhdGVfaWR4ID0gbWluKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShwcml2LT5odywgaW5mbyktPmh3X3ZhbHVlICYgMHhmZmZmLAorCQkJSVdMX1JBVEVfQ09VTlQgLSAxKTsKKworCXJhdGVfcGxjcCA9IGl3bF9yYXRlc1tyYXRlX2lkeF0ucGxjcDsKKworCXJ0c19yZXRyeV9saW1pdCA9IChpc19oY2NhKSA/CisJICAgIFJUU19IQ0NBX1JFVFJZX0xJTUlUIDogUlRTX0RGQVVMVF9SRVRSWV9MSU1JVDsKKworCWlmICgocmF0ZV9pZHggPj0gSVdMX0ZJUlNUX0NDS19SQVRFKSAmJiAocmF0ZV9pZHggPD0gSVdMX0xBU1RfQ0NLX1JBVEUpKQorCQlyYXRlX2ZsYWdzIHw9IFJBVEVfTUNTX0NDS19NU0s7CisKKworCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpIHsKKwkJZGF0YV9yZXRyeV9saW1pdCA9IDM7CisJCWlmIChkYXRhX3JldHJ5X2xpbWl0IDwgcnRzX3JldHJ5X2xpbWl0KQorCQkJcnRzX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKKwl9IGVsc2UKKwkJZGF0YV9yZXRyeV9saW1pdCA9IElXTF9ERUZBVUxUX1RYX1JFVFJZOworCisJaWYgKHByaXYtPmRhdGFfcmV0cnlfbGltaXQgIT0gLTEpCisJCWRhdGFfcmV0cnlfbGltaXQgPSBwcml2LT5kYXRhX3JldHJ5X2xpbWl0OworCisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CisJCXR4X2NtZC0+aW5pdGlhbF9yYXRlX2luZGV4ID0gMDsKKwkJdHhfY21kLT50eF9mbGFncyB8PSBUWF9DTURfRkxHX1NUQV9SQVRFX01TSzsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfU1RZUEUpKSB7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FVVEgpOgorCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpOgorCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpOgorCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk6CisJCQlpZiAodHhfY21kLT50eF9mbGFncyAmIFRYX0NNRF9GTEdfUlRTX01TSykgeworCQkJCXR4X2NtZC0+dHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfUlRTX01TSzsKKwkJCQl0eF9jbWQtPnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQ1RTX01TSzsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQkvKiBBbHRlcm5hdGUgYmV0d2VlbiBhbnRlbm5hIEEgYW5kIEIgZm9yIHN1Y2Nlc3NpdmUgZnJhbWVzICovCisJCWlmIChwcml2LT51c2VfYW50X2JfZm9yX21hbmFnZW1lbnRfZnJhbWUpIHsKKwkJCXByaXYtPnVzZV9hbnRfYl9mb3JfbWFuYWdlbWVudF9mcmFtZSA9IDA7CisJCQlyYXRlX2ZsYWdzIHw9IFJBVEVfTUNTX0FOVF9CX01TSzsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnVzZV9hbnRfYl9mb3JfbWFuYWdlbWVudF9mcmFtZSA9IDE7CisJCQlyYXRlX2ZsYWdzIHw9IFJBVEVfTUNTX0FOVF9BX01TSzsKKwkJfQorCX0KKworCXR4X2NtZC0+cnRzX3JldHJ5X2xpbWl0ID0gcnRzX3JldHJ5X2xpbWl0OworCXR4X2NtZC0+ZGF0YV9yZXRyeV9saW1pdCA9IGRhdGFfcmV0cnlfbGltaXQ7CisJdHhfY21kLT5yYXRlX25fZmxhZ3MgPSBpd2xfaHdfc2V0X3JhdGVfbl9mbGFncyhyYXRlX3BsY3AsIHJhdGVfZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpd2xfdHhfY21kX2J1aWxkX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkJICAgICAgc3RydWN0IGl3bF90eF9jbWQgKnR4X2NtZCwKKwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWcsCisJCQkJICAgICAgaW50IHN0YV9pZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mID0gaW5mby0+Y29udHJvbC5od19rZXk7CisKKwlzd2l0Y2ggKGtleWNvbmYtPmFsZykgeworCWNhc2UgQUxHX0NDTVA6CisJCXR4X2NtZC0+c2VjX2N0bCA9IFRYX0NNRF9TRUNfQ0NNOworCQltZW1jcHkodHhfY21kLT5rZXksIGtleWNvbmYtPmtleSwga2V5Y29uZi0+a2V5bGVuKTsKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJCXR4X2NtZC0+dHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19BR0dfQ0NNUF9NU0s7CisJCUlXTF9ERUJVR19UWCgidHhfY21kIHdpdGggYWVzIGh3Y3J5cHRvXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEFMR19US0lQOgorCQl0eF9jbWQtPnNlY19jdGwgPSBUWF9DTURfU0VDX1RLSVA7CisJCWllZWU4MDIxMV9nZXRfdGtpcF9rZXkoa2V5Y29uZiwgc2tiX2ZyYWcsCisJCQlJRUVFODAyMTFfVEtJUF9QMl9LRVksIHR4X2NtZC0+a2V5KTsKKwkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCB0a2lwIGh3Y3J5cHRvXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEFMR19XRVA6CisJCXR4X2NtZC0+c2VjX2N0bCB8PSAoVFhfQ01EX1NFQ19XRVAgfAorCQkJKGtleWNvbmYtPmtleWlkeCAmIFRYX0NNRF9TRUNfTVNLKSA8PCBUWF9DTURfU0VDX1NISUZUKTsKKworCQlpZiAoa2V5Y29uZi0+a2V5bGVuID09IFdFUF9LRVlfTEVOXzEyOCkKKwkJCXR4X2NtZC0+c2VjX2N0bCB8PSBUWF9DTURfU0VDX0tFWTEyODsKKworCQltZW1jcHkoJnR4X2NtZC0+a2V5WzNdLCBrZXljb25mLT5rZXksIGtleWNvbmYtPmtleWxlbik7CisKKwkJSVdMX0RFQlVHX1RYKCJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKKwkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBrZXljb25mLT5rZXlpZHgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBlbmNvZGUgYWxnICVkXG4iLCBrZXljb25mLT5hbGcpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl3bF91cGRhdGVfdHhfc3RhdHMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgZmMsIHUxNiBsZW4pCit7CisJLyogMCAtIG1nbXQsIDEgLSBjbnQsIDIgLSBkYXRhICovCisJaW50IGlkeCA9IChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyOworCXByaXYtPnR4X3N0YXRzW2lkeF0uY250Kys7CisJcHJpdi0+dHhfc3RhdHNbaWR4XS5ieXRlcyArPSBsZW47Cit9CisKKy8qCisgKiBzdGFydCBSRVBMWV9UWCBjb21tYW5kIHByb2Nlc3MKKyAqLworaW50IGl3bF90eF9za2Ioc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpd2xfdGZkX2ZyYW1lICp0ZmQ7CisJdTMyICpjb250cm9sX2ZsYWdzOworCWludCB0eHFfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSBOVUxMOworCXN0cnVjdCBpd2xfcXVldWUgKnEgPSBOVUxMOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCWRtYV9hZGRyX3QgdHhjbWRfcGh5czsKKwlkbWFfYWRkcl90IHNjcmF0Y2hfcGh5czsKKwlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZCA9IE5VTEw7CisJc3RydWN0IGl3bF90eF9jbWQgKnR4X2NtZDsKKwl1MTYgbGVuLCBpZHgsIGxlbl9vcmc7CisJdTE2IHNlcV9udW1iZXIgPSAwOworCXU4IGlkLCBoZHJfbGVuLCB1bmljYXN0OworCXU4IHN0YV9pZDsKKwlfX2xlMTYgZmM7CisJdTggd2FpdF93cml0ZV9wdHIgPSAwOworCXU4IHRpZCA9IDA7CisJdTggKnFjID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIFJGIEtJTExcbiIpOworCQlnb3RvIGRyb3BfdW5sb2NrOworCX0KKworCWlmICghcHJpdi0+dmlmKSB7CisJCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtICFwcml2LT52aWZcbiIpOworCQlnb3RvIGRyb3BfdW5sb2NrOworCX0KKworCWlmICgoaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWUgJiAweEZGKSA9PQorCSAgICAgSVdMX0lOVkFMSURfUkFURSkgeworCQlJV0xfRVJST1IoIkVSUk9SOiBObyBUWCByYXRlIGF2YWlsYWJsZS5cbiIpOworCQlnb3RvIGRyb3BfdW5sb2NrOworCX0KKworCXVuaWNhc3QgPSAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CisJaWQgPSAwOworCisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWlmIChpZWVlODAyMTFfaXNfYXV0aChmYykpCisJCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBVVRIIGZyYW1lXG4iKTsKKwllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGZjKSkKKwkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFTU09DIGZyYW1lXG4iKTsKKwllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEoZmMpKQorCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CisjZW5kaWYKKworCS8qIGRyb3AgYWxsIGRhdGEgZnJhbWUgaWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkICovCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSAmJgorCSAgICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgfHwKKwkgICAgKChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkgJiYgIXByaXYtPmFzc29jX2lkKSB8fAorCSAgICAhcHJpdi0+YXNzb2Nfc3RhdGlvbl9hZGRlZCkpIHsKKwkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIC0gIWl3bF9pc19hc3NvY2lhdGVkXG4iKTsKKwkJZ290byBkcm9wX3VubG9jazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwloZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoZmMpKTsKKworCS8qIEZpbmQgKG9yIGNyZWF0ZSkgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCisJc3RhX2lkID0gaXdsX2dldF9zdGFfaWQocHJpdiwgaGRyKTsKKwlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlc1xuIiwKKwkJCSAgICAgICBwcmludF9tYWMobWFjLCBoZHItPmFkZHIxKSk7CisJCWdvdG8gZHJvcDsKKwl9CisKKwlJV0xfREVCVUdfVFgoInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOworCQl0aWQgPSBxY1swXSAmIDB4ZjsKKwkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciAmCisJCQkJSUVFRTgwMjExX1NDVExfU0VROworCQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoc2VxX251bWJlcikgfAorCQkJKGhkci0+c2VxX2N0cmwgJgorCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRykpOworCQlzZXFfbnVtYmVyICs9IDB4MTA7CisJCS8qIGFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aGlzIDxzdGEsdGlkPiAqLworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQorCQkJdHhxX2lkID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cudHhxX2lkOworCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUrKzsKKwl9CisKKwkvKiBEZXNjcmlwdG9yIGZvciBjaG9zZW4gVHggcXVldWUgKi8KKwl0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CisJcSA9ICZ0eHEtPnE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyogU2V0IHVwIGZpcnN0IGVtcHR5IFRGRCB3aXRoaW4gdGhpcyBxdWV1ZSdzIGNpcmN1bGFyIFRGRCBidWZmZXIgKi8KKwl0ZmQgPSAmdHhxLT5iZFtxLT53cml0ZV9wdHJdOworCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7CisJY29udHJvbF9mbGFncyA9ICh1MzIgKikgdGZkOworCWlkeCA9IGdldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCAwKTsKKworCS8qIFNldCB1cCBkcml2ZXIgZGF0YSBmb3IgdGhpcyBURkQgKi8KKwltZW1zZXQoJih0eHEtPnR4YltxLT53cml0ZV9wdHJdKSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfdHhfaW5mbykpOworCXR4cS0+dHhiW3EtPndyaXRlX3B0cl0uc2tiWzBdID0gc2tiOworCisJLyogU2V0IHVwIGZpcnN0IGVtcHR5IGVudHJ5IGluIHF1ZXVlJ3MgYXJyYXkgb2YgVHgvY21kIGJ1ZmZlcnMgKi8KKwlvdXRfY21kID0gJnR4cS0+Y21kW2lkeF07CisJdHhfY21kID0gJm91dF9jbWQtPmNtZC50eDsKKwltZW1zZXQoJm91dF9jbWQtPmhkciwgMCwgc2l6ZW9mKG91dF9jbWQtPmhkcikpOworCW1lbXNldCh0eF9jbWQsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3R4X2NtZCkpOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIFR4LWNvbW1hbmQgKG5vdCBNQUMhKSBoZWFkZXIuCisJICogU3RvcmUgdGhlIGNob3NlbiBUeCBxdWV1ZSBhbmQgVEZEIGluZGV4IHdpdGhpbiB0aGUgc2VxdWVuY2UgZmllbGQ7CisJICogYWZ0ZXIgVHgsIHVDb2RlJ3MgVHggcmVzcG9uc2Ugd2lsbCByZXR1cm4gdGhpcyB2YWx1ZSBzbyBkcml2ZXIgY2FuCisJICogbG9jYXRlIHRoZSBmcmFtZSB3aXRoaW4gdGhlIHR4IHF1ZXVlIGFuZCBkbyBwb3N0LXR4IHByb2Nlc3NpbmcuCisJICovCisJb3V0X2NtZC0+aGRyLmNtZCA9IFJFUExZX1RYOworCW91dF9jbWQtPmhkci5zZXF1ZW5jZSA9IGNwdV90b19sZTE2KCh1MTYpKFFVRVVFX1RPX1NFUSh0eHFfaWQpIHwKKwkJCQlJTkRFWF9UT19TRVEocS0+d3JpdGVfcHRyKSkpOworCisJLyogQ29weSBNQUMgaGVhZGVyIGZyb20gc2tiIGludG8gY29tbWFuZCBidWZmZXIgKi8KKwltZW1jcHkodHhfY21kLT5oZHIsIGhkciwgaGRyX2xlbik7CisKKwkvKgorCSAqIFVzZSB0aGUgZmlyc3QgZW1wdHkgZW50cnkgaW4gdGhpcyBxdWV1ZSdzIGNvbW1hbmQgYnVmZmVyIGFycmF5CisJICogdG8gY29udGFpbiB0aGUgVHggY29tbWFuZCBhbmQgTUFDIGhlYWRlciBjb25jYXRlbmF0ZWQgdG9nZXRoZXIKKwkgKiAocGF5bG9hZCBkYXRhIHdpbGwgYmUgaW4gYW5vdGhlciBidWZmZXIpLgorCSAqIFNpemUgb2YgdGhpcyB2YXJpZXMsIGR1ZSB0byB2YXJ5aW5nIE1BQyBoZWFkZXIgbGVuZ3RoLgorCSAqIElmIGVuZCBpcyBub3QgZHdvcmQgYWxpZ25lZCwgd2UnbGwgaGF2ZSAyIGV4dHJhIGJ5dGVzIGF0IHRoZSBlbmQKKwkgKiBvZiB0aGUgTUFDIGhlYWRlciAoZGV2aWNlIHJlYWRzIG9uIGR3b3JkIGJvdW5kYXJpZXMpLgorCSAqIFdlJ2xsIHRlbGwgZGV2aWNlIGFib3V0IHRoaXMgcGFkZGluZyBsYXRlci4KKwkgKi8KKwlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bF90eF9jbWQpICsKKwkJc2l6ZW9mKHN0cnVjdCBpd2xfY21kX2hlYWRlcikgKyBoZHJfbGVuOworCisJbGVuX29yZyA9IGxlbjsKKwlsZW4gPSAobGVuICsgMykgJiB+MzsKKworCWlmIChsZW5fb3JnICE9IGxlbikKKwkJbGVuX29yZyA9IDE7CisJZWxzZQorCQlsZW5fb3JnID0gMDsKKworCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyBUeCBjb21tYW5kJ3MgaGVhZGVyIChub3QgTUFDIGhlYWRlciEpLAorCSAqIHdpdGhpbiBjb21tYW5kIGJ1ZmZlciBhcnJheS4gKi8KKwl0eGNtZF9waHlzID0gdHhxLT5kbWFfYWRkcl9jbWQgKyBzaXplb2Yoc3RydWN0IGl3bF9jbWQpICogaWR4ICsKKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaXdsX2NtZCwgaGRyKTsKKworCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCisJICogZmlyc3QgZW50cnkgKi8KKwlpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgdHhjbWRfcGh5cywgbGVuKTsKKworCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9ET19OT1RfRU5DUllQVCkpCisJCWl3bF90eF9jbWRfYnVpbGRfaHdjcnlwdG8ocHJpdiwgaW5mbywgdHhfY21kLCBza2IsIHN0YV9pZCk7CisKKwkvKiBTZXQgdXAgVEZEJ3MgMm5kIGVudHJ5IHRvIHBvaW50IGRpcmVjdGx5IHRvIHJlbWFpbmRlciBvZiBza2IsCisJICogaWYgYW55ICg4MDIuMTEgbnVsbCBmcmFtZXMgaGF2ZSBubyBwYXlsb2FkKS4gKi8KKwlsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW47CisJaWYgKGxlbikgeworCQlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCBza2ItPmRhdGEgKyBoZHJfbGVuLAorCQkJCQkgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBsZW4pOworCX0KKworCS8qIFRlbGwgTklDIGFib3V0IGFueSAyLWJ5dGUgcGFkZGluZyBhZnRlciBNQUMgaGVhZGVyICovCisJaWYgKGxlbl9vcmcpCisJCXR4X2NtZC0+dHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19NSF9QQURfTVNLOworCisJLyogVG90YWwgIyBieXRlcyB0byBiZSB0cmFuc21pdHRlZCAqLworCWxlbiA9ICh1MTYpc2tiLT5sZW47CisJdHhfY21kLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOworCS8qIFRPRE8gbmVlZCB0aGlzIGZvciBidXJzdCBtb2RlIGxhdGVyIG9uICovCisJaXdsX3R4X2NtZF9idWlsZF9iYXNpYyhwcml2LCB0eF9jbWQsIGluZm8sIGhkciwgdW5pY2FzdCwgc3RhX2lkKTsKKworCS8qIHNldCBpc19oY2NhIHRvIDA7IGl0IHByb2JhYmx5IHdpbGwgbmV2ZXIgYmUgaW1wbGVtZW50ZWQgKi8KKwlpd2xfdHhfY21kX2J1aWxkX3JhdGUocHJpdiwgdHhfY21kLCBpbmZvLCBmYywgc3RhX2lkLCAwKTsKKworCWl3bF91cGRhdGVfdHhfc3RhdHMocHJpdiwgbGUxNl90b19jcHUoZmMpLCBsZW4pOworCisJc2NyYXRjaF9waHlzID0gdHhjbWRfcGh5cyArIHNpemVvZihzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIpICsKKwkJb2Zmc2V0b2Yoc3RydWN0IGl3bF90eF9jbWQsIHNjcmF0Y2gpOworCXR4X2NtZC0+ZHJhbV9sc2JfcHRyID0gY3B1X3RvX2xlMzIoc2NyYXRjaF9waHlzKTsKKwl0eF9jbWQtPmRyYW1fbXNiX3B0ciA9IGl3bF9nZXRfZG1hX2hpX2FkZHJlc3Moc2NyYXRjaF9waHlzKTsKKworCWlmICghaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKKwkJaWYgKHFjKQorCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyID0gc2VxX251bWJlcjsKKwl9IGVsc2UgeworCQl3YWl0X3dyaXRlX3B0ciA9IDE7CisJCXR4cS0+bmVlZF91cGRhdGUgPSAwOworCX0KKworCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfVFgsICh1OCAqKXR4X2NtZCwgc2l6ZW9mKCp0eF9jbWQpKTsKKworCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfVFgsICh1OCAqKXR4X2NtZC0+aGRyLCBoZHJfbGVuKTsKKworCS8qIFNldCB1cCBlbnRyeSBmb3IgdGhpcyBURkQgaW4gVHggYnl0ZS1jb3VudCBhcnJheSAqLworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSwgbGVuKTsKKworCS8qIFRlbGwgZGV2aWNlIHRoZSB3cml0ZSBpbmRleCAqanVzdCBwYXN0KiB0aGlzIGxhdGVzdCBmaWxsZWQgVEZEICovCisJcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7CisJcmV0ID0gaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgoaXdsX3F1ZXVlX3NwYWNlKHEpIDwgcS0+aGlnaF9tYXJrKQorCSAgICAmJiBwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKSB7CisJCWlmICh3YWl0X3dyaXRlX3B0cikgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXR4cS0+bmVlZF91cGRhdGUgPSAxOworCQkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCX0KKworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShwcml2LT5odywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCX0KKworCXJldHVybiAwOworCitkcm9wX3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Citkcm9wOgorCXJldHVybiAtMTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3R4X3NrYik7CisKKy8qKioqKioqKioqKioqKiogSE9TVCBDT01NQU5EIFFVRVVFIEZVTkNUSU9OUyAgICoqKioqLworCisvKioKKyAqIGl3bF9lbnF1ZXVlX2hjbWQgLSBlbnF1ZXVlIGEgdUNvZGUgY29tbWFuZAorICogQHByaXY6IGRldmljZSBwcml2YXRlIGRhdGEgcG9pbnQKKyAqIEBjbWQ6IGEgcG9pbnQgdG8gdGhlIHVjb2RlIGNvbW1hbmQgc3RydWN0dXJlCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgPCAwIHZhbHVlcyB0byBpbmRpY2F0ZSB0aGUgb3BlcmF0aW9uIGlzCisgKiBmYWlsZWQuIE9uIHN1Y2Nlc3MsIGl0IHR1cm5zIHRoZSBpbmRleCAoPiAwKSBvZiBjb21tYW5kIGluIHRoZQorICogY29tbWFuZCBxdWV1ZS4KKyAqLworaW50IGl3bF9lbnF1ZXVlX2hjbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpCit7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV07CisJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7CisJc3RydWN0IGl3bF90ZmRfZnJhbWUgKnRmZDsKKwl1MzIgKmNvbnRyb2xfZmxhZ3M7CisJc3RydWN0IGl3bF9jbWQgKm91dF9jbWQ7CisJdTMyIGlkeDsKKwl1MTYgZml4X3NpemU7CisJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY21kLT5sZW4gPSBwcml2LT5jZmctPm9wcy0+dXRpbHMtPmdldF9oY21kX3NpemUoY21kLT5pZCwgY21kLT5sZW4pOworCWZpeF9zaXplID0gKHUxNikoY21kLT5sZW4gKyBzaXplb2Yob3V0X2NtZC0+aGRyKSk7CisKKwkvKiBJZiBhbnkgb2YgdGhlIGNvbW1hbmQgc3RydWN0dXJlcyBlbmQgdXAgYmVpbmcgbGFyZ2VyIHRoYW4KKwkgKiB0aGUgVEZEX01BWF9QQVlMT0FEX1NJWkUsIGFuZCBpdCBzZW50IGFzIGEgJ3NtYWxsJyBjb21tYW5kIHRoZW4KKwkgKiB3ZSB3aWxsIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIFRGRCBlbnRyaWVzICovCisJQlVHX09OKChmaXhfc2l6ZSA+IFRGRF9NQVhfUEFZTE9BRF9TSVpFKSAmJgorCSAgICAgICAhKGNtZC0+bWV0YS5mbGFncyAmIENNRF9TSVpFX0hVR0UpKTsKKworCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19JTkZPKCJOb3Qgc2VuZGluZyBjb21tYW5kIC0gUkYgS0lMTCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoaXdsX3F1ZXVlX3NwYWNlKHEpIDwgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpID8gMiA6IDEpKSB7CisJCUlXTF9FUlJPUigiTm8gc3BhY2UgZm9yIFR4XG4iKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOworCisJdGZkID0gJnR4cS0+YmRbcS0+d3JpdGVfcHRyXTsKKwltZW1zZXQodGZkLCAwLCBzaXplb2YoKnRmZCkpOworCisJY29udHJvbF9mbGFncyA9ICh1MzIgKikgdGZkOworCisJaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIGNtZC0+bWV0YS5mbGFncyAmIENNRF9TSVpFX0hVR0UpOworCW91dF9jbWQgPSAmdHhxLT5jbWRbaWR4XTsKKworCW91dF9jbWQtPmhkci5jbWQgPSBjbWQtPmlkOworCW1lbWNweSgmb3V0X2NtZC0+bWV0YSwgJmNtZC0+bWV0YSwgc2l6ZW9mKGNtZC0+bWV0YSkpOworCW1lbWNweSgmb3V0X2NtZC0+Y21kLnBheWxvYWQsIGNtZC0+ZGF0YSwgY21kLT5sZW4pOworCisJLyogQXQgdGhpcyBwb2ludCwgdGhlIG91dF9jbWQgbm93IGhhcyBhbGwgb2YgdGhlIGluY29taW5nIGNtZAorCSAqIGluZm9ybWF0aW9uICovCisKKwlvdXRfY21kLT5oZHIuZmxhZ3MgPSAwOworCW91dF9jbWQtPmhkci5zZXF1ZW5jZSA9IGNwdV90b19sZTE2KFFVRVVFX1RPX1NFUShJV0xfQ01EX1FVRVVFX05VTSkgfAorCQkJSU5ERVhfVE9fU0VRKHEtPndyaXRlX3B0cikpOworCWlmIChvdXRfY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkKKwkJb3V0X2NtZC0+aGRyLnNlcXVlbmNlIHw9IGNwdV90b19sZTE2KFNFUV9IVUdFX0ZSQU1FKTsKKworCXBoeXNfYWRkciA9IHR4cS0+ZG1hX2FkZHJfY21kICsgc2l6ZW9mKHR4cS0+Y21kWzBdKSAqIGlkeCArCisJCQlvZmZzZXRvZihzdHJ1Y3QgaXdsX2NtZCwgaGRyKTsKKwlpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBmaXhfc2l6ZSk7CisKKwlJV0xfREVCVUdfSEMoIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKKwkJICAgICAiJWQgYnl0ZXMgYXQgJWRbJWRdOiVkXG4iLAorCQkgICAgIGdldF9jbWRfc3RyaW5nKG91dF9jbWQtPmhkci5jbWQpLAorCQkgICAgIG91dF9jbWQtPmhkci5jbWQsIGxlMTZfdG9fY3B1KG91dF9jbWQtPmhkci5zZXF1ZW5jZSksCisJCSAgICAgZml4X3NpemUsIHEtPndyaXRlX3B0ciwgaWR4LCBJV0xfQ01EX1FVRVVFX05VTSk7CisKKwl0eHEtPm5lZWRfdXBkYXRlID0gMTsKKworCS8qIFNldCB1cCBlbnRyeSBpbiBxdWV1ZSdzIGJ5dGUgY291bnQgY2lyY3VsYXIgYnVmZmVyICovCisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX3VwZGF0ZV9ieXRlX2NudF90YmwocHJpdiwgdHhxLCAwKTsKKworCS8qIEluY3JlbWVudCBhbmQgdXBkYXRlIHF1ZXVlJ3Mgd3JpdGUgaW5kZXggKi8KKwlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKKwlyZXQgPSBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQgPyByZXQgOiBpZHg7Cit9CisKK2ludCBpd2xfdHhfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CisJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7CisJc3RydWN0IGl3bF90eF9pbmZvICp0eF9pbmZvOworCWludCBuZnJlZWQgPSAwOworCisJaWYgKChpbmRleCA+PSBxLT5uX2JkKSB8fCAoaXdsX3F1ZXVlX3VzZWQocSwgaW5kZXgpID09IDApKSB7CisJCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgorCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZC5cbiIsIHR4cV9pZCwKKwkJCSAgaW5kZXgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGluZGV4ID0gaXdsX3F1ZXVlX2luY193cmFwKGluZGV4LCBxLT5uX2JkKTsgcS0+cmVhZF9wdHIgIT0gaW5kZXg7CisJCXEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkgeworCisJCXR4X2luZm8gPSAmdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXTsKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHByaXYtPmh3LCB0eF9pbmZvLT5za2JbMF0pOworCQl0eF9pbmZvLT5za2JbMF0gPSBOVUxMOworCisJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKQorCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ludmFsX2J5dGVfY250X3RibChwcml2LCB0eHEpOworCisJCWl3bF9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKKwkJbmZyZWVkKys7CisJfQorCXJldHVybiBuZnJlZWQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF90eF9xdWV1ZV9yZWNsYWltKTsKKworCisvKioKKyAqIGl3bF9oY21kX3F1ZXVlX3JlY2xhaW0gLSBSZWNsYWltIFRYIGNvbW1hbmQgcXVldWUgZW50cmllcyBhbHJlYWR5IFR4J2QKKyAqCisgKiBXaGVuIEZXIGFkdmFuY2VzICdSJyBpbmRleCwgYWxsIGVudHJpZXMgYmV0d2VlbiBvbGQgYW5kIG5ldyAnUicgaW5kZXgKKyAqIG5lZWQgdG8gYmUgcmVjbGFpbWVkLiBBcyByZXN1bHQsIHNvbWUgZnJlZSBzcGFjZSBmb3Jtcy4gIElmIHRoZXJlIGlzCisgKiBlbm91Z2ggZnJlZSBzcGFjZSAoPiBsb3cgbWFyayksIHdha2UgdGhlIHN0YWNrIHRoYXQgZmVlZHMgdXMuCisgKi8KK3N0YXRpYyB2b2lkIGl3bF9oY21kX3F1ZXVlX3JlY2xhaW0oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOworCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOworCWludCBuZnJlZWQgPSAwOworCisJaWYgKChpbmRleCA+PSBxLT5uX2JkKSB8fCAoaXdsX3F1ZXVlX3VzZWQocSwgaW5kZXgpID09IDApKSB7CisJCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgorCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZC5cbiIsIHR4cV9pZCwKKwkJCSAgaW5kZXgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpbmRleCA9IGl3bF9xdWV1ZV9pbmNfd3JhcChpbmRleCwgcS0+bl9iZCk7IHEtPnJlYWRfcHRyICE9IGluZGV4OworCQlxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKKworCQlpZiAobmZyZWVkID4gMSkgeworCQkJSVdMX0VSUk9SKCJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGluZGV4LAorCQkJCQlxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJCX0KKwkJbmZyZWVkKys7CisJfQorfQorCisvKioKKyAqIGl3bF90eF9jbWRfY29tcGxldGUgLSBQdWxsIHVudXNlZCBidWZmZXJzIG9mZiB0aGUgcXVldWUgYW5kIHJlY2xhaW0gdGhlbQorICogQHJ4YjogUnggYnVmZmVyIHRvIHJlY2xhaW0KKyAqCisgKiBJZiBhbiBSeCBidWZmZXIgaGFzIGFuIGFzeW5jIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGUgY2FsbGJhY2sKKyAqIHdpbGwgYmUgZXhlY3V0ZWQuICBUaGUgYXR0YWNoZWQgc2tiIChpZiBwcmVzZW50KSB3aWxsIG9ubHkgYmUgZnJlZWQKKyAqIGlmIHRoZSBjYWxsYmFjayByZXR1cm5zIDEKKyAqLwordm9pZCBpd2xfdHhfY21kX2NvbXBsZXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXUxNiBzZXF1ZW5jZSA9IGxlMTZfdG9fY3B1KHBrdC0+aGRyLnNlcXVlbmNlKTsKKwlpbnQgdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcXVlbmNlKTsKKwlpbnQgaW5kZXggPSBTRVFfVE9fSU5ERVgoc2VxdWVuY2UpOworCWludCBodWdlID0gc2VxdWVuY2UgJiBTRVFfSFVHRV9GUkFNRTsKKwlpbnQgY21kX2luZGV4OworCXN0cnVjdCBpd2xfY21kICpjbWQ7CisKKwkvKiBJZiBhIFR4IGNvbW1hbmQgaXMgYmVpbmcgaGFuZGxlZCBhbmQgaXQgaXNuJ3QgaW4gdGhlIGFjdHVhbAorCSAqIGNvbW1hbmQgcXVldWUgdGhlbiB0aGVyZSBhIGNvbW1hbmQgcm91dGluZyBidWcgaGFzIGJlZW4gaW50cm9kdWNlZAorCSAqIGluIHRoZSBxdWV1ZSBtYW5hZ2VtZW50IGNvZGUuICovCisJaWYgKHR4cV9pZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkKKwkJSVdMX0VSUk9SKCJFcnJvciB3cm9uZyBjb21tYW5kIHF1ZXVlICVkIGNvbW1hbmQgaWQgMHglWFxuIiwKKwkJCSAgdHhxX2lkLCBwa3QtPmhkci5jbWQpOworCUJVR19PTih0eHFfaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pOworCisJY21kX2luZGV4ID0gZ2V0X2NtZF9pbmRleCgmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLCBpbmRleCwgaHVnZSk7CisJY21kID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pbmRleF07CisKKwkvKiBJbnB1dCBlcnJvciBjaGVja2luZyBpcyBkb25lIHdoZW4gY29tbWFuZHMgYXJlIGFkZGVkIHRvIHF1ZXVlLiAqLworCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpIHsKKwkJY21kLT5tZXRhLnNvdXJjZS0+dS5za2IgPSByeGItPnNrYjsKKwkJcnhiLT5za2IgPSBOVUxMOworCX0gZWxzZSBpZiAoY21kLT5tZXRhLnUuY2FsbGJhY2sgJiYKKwkJICAgIWNtZC0+bWV0YS51LmNhbGxiYWNrKHByaXYsIGNtZCwgcnhiLT5za2IpKQorCQlyeGItPnNrYiA9IE5VTEw7CisKKwlpd2xfaGNtZF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOworCisJaWYgKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSkgeworCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX3R4X2NtZF9jb21wbGV0ZSk7CisKKy8qCisgKiBGaW5kIGZpcnN0IGF2YWlsYWJsZSAobG93ZXN0IHVudXNlZCkgVHggUXVldWUsIG1hcmsgaXQgImFjdGl2ZSIuCisgKiBDYWxsZWQgb25seSB3aGVuIGZpbmRpbmcgcXVldWUgZm9yIGFnZ3JlZ2F0aW9uLgorICogU2hvdWxkIG5ldmVyIHJldHVybiBhbnl0aGluZyA8IDcsIGJlY2F1c2UgdGhleSBzaG91bGQgYWxyZWFkeQorICogYmUgaW4gdXNlIGFzIEVEQ0EgQUMgKDAtMyksIENvbW1hbmQgKDQpLCBIQ0NBICg1LCA2KS4KKyAqLworc3RhdGljIGludCBpd2xfdHhxX2N0eF9hY3RpdmF0ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgdHhxX2lkOworCisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKQorCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQodHhxX2lkLCAmcHJpdi0+dHhxX2N0eF9hY3RpdmVfbXNrKSkKKwkJCXJldHVybiB0eHFfaWQ7CisJcmV0dXJuIC0xOworfQorCitpbnQgaXdsX3R4X2FnZ19zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCwgdTE2ICpzc24pCit7CisJaW50IHN0YV9pZDsKKwlpbnQgdHhfZmlmbzsKKwlpbnQgdHhxX2lkOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXdsX3RpZF9kYXRhICp0aWRfZGF0YTsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCWlmIChsaWtlbHkodGlkIDwgQVJSQVlfU0laRShkZWZhdWx0X3RpZF90b190eF9maWZvKSkpCisJCXR4X2ZpZm8gPSBkZWZhdWx0X3RpZF90b190eF9maWZvW3RpZF07CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCUlXTF9XQVJOSU5HKCIlcyBvbiByYSA9ICVzIHRpZCA9ICVkXG4iLAorCQkJX19mdW5jX18sIHByaW50X21hYyhtYWMsIHJhKSwgdGlkKTsKKworCXN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgcmEpOworCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikKKwkJcmV0dXJuIC1FTlhJTzsKKworCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSAhPSBJV0xfQUdHX09GRikgeworCQlJV0xfRVJST1IoIlN0YXJ0IEFHRyB3aGVuIHN0YXRlIGlzIG5vdCBJV0xfQUdHX09GRiAhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwl0eHFfaWQgPSBpd2xfdHhxX2N0eF9hY3RpdmF0ZV9mcmVlKHByaXYpOworCWlmICh0eHFfaWQgPT0gLTEpCisJCXJldHVybiAtRU5YSU87CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKwl0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOworCSpzc24gPSBTRVFfVE9fU04odGlkX2RhdGEtPnNlcV9udW1iZXIpOworCXRpZF9kYXRhLT5hZ2cudHhxX2lkID0gdHhxX2lkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2VuYWJsZShwcml2LCB0eHFfaWQsIHR4X2ZpZm8sCisJCQkJCQkgIHN0YV9pZCwgdGlkLCAqc3NuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CisJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09OOworCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgcmEsIHRpZCk7CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBpcyBOT1QgZW1wdHk6ICVkIHBhY2tldHMgaW4gSFcgcXVldWVcbiIsCisJCQkgICAgIHRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlKTsKKwkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9FTVBUWUlOR19IV19RVUVVRV9BRERCQTsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3R4X2FnZ19zdGFydCk7CisKK2ludCBpd2xfdHhfYWdnX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2ICwgY29uc3QgdTggKnJhLCB1MTYgdGlkKQoreworCWludCB0eF9maWZvX2lkLCB0eHFfaWQsIHN0YV9pZCwgc3NuID0gLTE7CisJc3RydWN0IGl3bF90aWRfZGF0YSAqdGlkX2RhdGE7CisJaW50IHJldCwgd3JpdGVfcHRyLCByZWFkX3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJaWYgKCFyYSkgeworCQlJV0xfRVJST1IoInJhID0gTlVMTFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChsaWtlbHkodGlkIDwgQVJSQVlfU0laRShkZWZhdWx0X3RpZF90b190eF9maWZvKSkpCisJCXR4X2ZpZm9faWQgPSBkZWZhdWx0X3RpZF90b190eF9maWZvW3RpZF07CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgcmEpOworCisJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKQorCQlyZXR1cm4gLUVOWElPOworCisJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnLnN0YXRlICE9IElXTF9BR0dfT04pCisJCUlXTF9XQVJOSU5HKCJTdG9wcGluZyBBR0cgd2hpbGUgc3RhdGUgbm90IElXTF9BR0dfT05cbiIpOworCisJdGlkX2RhdGEgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXTsKKwlzc24gPSAodGlkX2RhdGEtPnNlcV9udW1iZXIgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CisJdHhxX2lkID0gdGlkX2RhdGEtPmFnZy50eHFfaWQ7CisJd3JpdGVfcHRyID0gcHJpdi0+dHhxW3R4cV9pZF0ucS53cml0ZV9wdHI7CisJcmVhZF9wdHIgPSBwcml2LT50eHFbdHhxX2lkXS5xLnJlYWRfcHRyOworCisJLyogVGhlIHF1ZXVlIGlzIG5vdCBlbXB0eSAqLworCWlmICh3cml0ZV9wdHIgIT0gcmVhZF9wdHIpIHsKKwkJSVdMX0RFQlVHX0hUKCJTdG9wcGluZyBhIG5vbiBlbXB0eSBBR0cgSFcgUVVFVUVcbiIpOworCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9CisJCQkJSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBOworCQlyZXR1cm4gMDsKKwl9CisKKwlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGlzIGVtcHR5XG4iKTsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9IElXTF9BR0dfT0ZGOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLCBzc24sCisJCQkJCQkgICB0eF9maWZvX2lkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgcmEsIHRpZCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3R4X2FnZ19zdG9wKTsKKworaW50IGl3bF90eHFfY2hlY2tfZW1wdHkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCB1OCB0aWQsIGludCB0eHFfaWQpCit7CisJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZwcml2LT50eHFbdHhxX2lkXS5xOworCXU4ICphZGRyID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHI7CisJc3RydWN0IGl3bF90aWRfZGF0YSAqdGlkX2RhdGEgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXTsKKworCXN3aXRjaCAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUpIHsKKwljYXNlIElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQToKKwkJLyogV2UgYXJlIHJlY2xhaW1pbmcgdGhlIGxhc3QgcGFja2V0IG9mIHRoZSAqLworCQkvKiBhZ2dyZWdhdGVkIEhXIHF1ZXVlICovCisJCWlmICh0eHFfaWQgID09IHRpZF9kYXRhLT5hZ2cudHhxX2lkICYmCisJCSAgICBxLT5yZWFkX3B0ciA9PSBxLT53cml0ZV9wdHIpIHsKKwkJCXUxNiBzc24gPSBTRVFfVE9fU04odGlkX2RhdGEtPnNlcV9udW1iZXIpOworCQkJaW50IHR4X2ZpZm8gPSBkZWZhdWx0X3RpZF90b190eF9maWZvW3RpZF07CisJCQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGVtcHR5OiBjb250aW51ZSBERUxCQSBmbG93XG4iKTsKKwkJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hZ2dfZGlzYWJsZShwcml2LCB0eHFfaWQsCisJCQkJCQkJICAgICBzc24sIHR4X2ZpZm8pOworCQkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9BR0dfT0ZGOworCQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgYWRkciwgdGlkKTsKKwkJfQorCQlicmVhazsKKwljYXNlIElXTF9FTVBUWUlOR19IV19RVUVVRV9BRERCQToKKwkJLyogV2UgYXJlIHJlY2xhaW1pbmcgdGhlIGxhc3QgcGFja2V0IG9mIHRoZSBxdWV1ZSAqLworCQlpZiAodGlkX2RhdGEtPnRmZHNfaW5fcXVldWUgPT0gMCkgeworCQkJSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBlbXB0eTogY29udGludWUgQUREQkEgZmxvd1xuIik7CisJCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0FHR19PTjsKKwkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHByaXYtPmh3LCBhZGRyLCB0aWQpOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3R4cV9jaGVja19lbXB0eSk7CisKKy8qKgorICogaXdsX3R4X3N0YXR1c19yZXBseV9jb21wcmVzc2VkX2JhIC0gVXBkYXRlIHR4IHN0YXR1cyBmcm9tIGJsb2NrLWFjaworICoKKyAqIEdvIHRocm91Z2ggYmxvY2stYWNrJ3MgYml0bWFwIG9mIEFDSydkIGZyYW1lcywgdXBkYXRlIGRyaXZlcidzIHJlY29yZCBvZgorICogQUNLIHZzLiBub3QuICBUaGlzIGdldHMgc2VudCB0byBtYWM4MDIxMSwgdGhlbiB0byByYXRlIHNjYWxpbmcgYWxnby4KKyAqLworc3RhdGljIGludCBpd2xfdHhfc3RhdHVzX3JlcGx5X2NvbXByZXNzZWRfYmEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX2h0X2FnZyAqYWdnLAorCQkJCSBzdHJ1Y3QgaXdsX2NvbXByZXNzZWRfYmFfcmVzcCAqYmFfcmVzcCkKKworeworCWludCBpLCBzaCwgYWNrOworCXUxNiBzZXFfY3RsID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2VxX2N0bCk7CisJdTE2IHNjZF9mbG93ID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX2Zsb3cpOworCXU2NCBiaXRtYXA7CisJaW50IHN1Y2Nlc3NlcyA9IDA7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCisJaWYgKHVubGlrZWx5KCFhZ2ctPndhaXRfZm9yX2JhKSkgIHsKKwkJSVdMX0VSUk9SKCJSZWNlaXZlZCBCQSB3aGVuIG5vdCBleHBlY3RlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE1hcmsgdGhhdCB0aGUgZXhwZWN0ZWQgYmxvY2stYWNrIHJlc3BvbnNlIGFycml2ZWQgKi8KKwlhZ2ctPndhaXRfZm9yX2JhID0gMDsKKwlJV0xfREVCVUdfVFhfUkVQTFkoIkJBICVkICVkXG4iLCBhZ2ctPnN0YXJ0X2lkeCwgYmFfcmVzcC0+c2VxX2N0bCk7CisKKwkvKiBDYWxjdWxhdGUgc2hpZnQgdG8gYWxpZ24gYmxvY2stYWNrIGJpdHMgd2l0aCBvdXIgVHggd2luZG93IGJpdHMgKi8KKwlzaCA9IGFnZy0+c3RhcnRfaWR4IC0gU0VRX1RPX0lOREVYKHNlcV9jdGw+PjQpOworCWlmIChzaCA8IDApIC8qIHRidyBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBpbmRpY2VzICovCisJCXNoICs9IDB4MTAwOworCisJLyogZG9uJ3QgdXNlIDY0LWJpdCB2YWx1ZXMgZm9yIG5vdyAqLworCWJpdG1hcCA9IGxlNjRfdG9fY3B1KGJhX3Jlc3AtPmJpdG1hcCkgPj4gc2g7CisKKwlpZiAoYWdnLT5mcmFtZV9jb3VudCA+ICg2NCAtIHNoKSkgeworCQlJV0xfREVCVUdfVFhfUkVQTFkoIm1vcmUgZnJhbWVzIHRoYW4gYml0bWFwIHNpemUiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGNoZWNrIGZvciBzdWNjZXNzIG9yIGZhaWx1cmUgYWNjb3JkaW5nIHRvIHRoZQorCSAqIHRyYW5zbWl0dGVkIGJpdG1hcCBhbmQgYmxvY2stYWNrIGJpdG1hcCAqLworCWJpdG1hcCAmPSBhZ2ctPmJpdG1hcDsKKworCS8qIEZvciBlYWNoIGZyYW1lIGF0dGVtcHRlZCBpbiBhZ2dyZWdhdGlvbiwKKwkgKiB1cGRhdGUgZHJpdmVyJ3MgcmVjb3JkIG9mIHR4IGZyYW1lJ3Mgc3RhdHVzLiAqLworCWZvciAoaSA9IDA7IGkgPCBhZ2ctPmZyYW1lX2NvdW50IDsgaSsrKSB7CisJCWFjayA9IGJpdG1hcCAmICgxIDw8IGkpOworCQlzdWNjZXNzZXMgKz0gISFhY2s7CisJCUlXTF9ERUJVR19UWF9SRVBMWSgiJXMgT04gaT0lZCBpZHg9JWQgcmF3PSVkXG4iLAorCQkJYWNrPyAiQUNLIjoiTkFDSyIsIGksIChhZ2ctPnN0YXJ0X2lkeCArIGkpICYgMHhmZiwKKwkJCWFnZy0+c3RhcnRfaWR4ICsgaSk7CisJfQorCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocHJpdi0+dHhxW3NjZF9mbG93XS50eGJbYWdnLT5zdGFydF9pZHhdLnNrYlswXSk7CisJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKwlpbmZvLT5mbGFncyA9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVTsKKwlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX21hcCA9IHN1Y2Nlc3NlczsKKwlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IGFnZy0+ZnJhbWVfY291bnQ7CisJaXdsX2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIGFnZy0+cmF0ZV9uX2ZsYWdzLCBpbmZvKTsKKworCUlXTF9ERUJVR19UWF9SRVBMWSgiQml0bWFwICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYml0bWFwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl3bF9yeF9yZXBseV9jb21wcmVzc2VkX2JhIC0gSGFuZGxlciBmb3IgUkVQTFlfQ09NUFJFU1NFRF9CQQorICoKKyAqIEhhbmRsZXMgYmxvY2stYWNrbm93bGVkZ2Ugbm90aWZpY2F0aW9uIGZyb20gZGV2aWNlLCB3aGljaCByZXBvcnRzIHN1Y2Nlc3MKKyAqIG9mIGZyYW1lcyBzZW50IHZpYSBhZ2dyZWdhdGlvbi4KKyAqLwordm9pZCBpd2xfcnhfcmVwbHlfY29tcHJlc3NlZF9iYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX2NvbXByZXNzZWRfYmFfcmVzcCAqYmFfcmVzcCA9ICZwa3QtPnUuY29tcHJlc3NlZF9iYTsKKwlpbnQgaW5kZXg7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2h0X2FnZyAqYWdnOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJLyogImZsb3ciIGNvcnJlc3BvbmRzIHRvIFR4IHF1ZXVlICovCisJdTE2IHNjZF9mbG93ID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX2Zsb3cpOworCisJLyogInNzbiIgaXMgc3RhcnQgb2YgYmxvY2stYWNrIFR4IHdpbmRvdywgY29ycmVzcG9uZHMgdG8gaW5kZXgKKwkgKiAoaW4gVHggcXVldWUncyBjaXJjdWxhciBidWZmZXIpIG9mIGZpcnN0IFRGRC9mcmFtZSBpbiB3aW5kb3cgKi8KKwl1MTYgYmFfcmVzcF9zY2Rfc3NuID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX3Nzbik7CisKKwlpZiAoc2NkX2Zsb3cgPj0gcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtKSB7CisJCUlXTF9FUlJPUigiQlVHX09OIHNjZF9mbG93IGlzIGJpZ2dlciB0aGFuIG51bWJlciBvZiBxdWV1ZXMiKTsKKwkJcmV0dXJuOworCX0KKworCXR4cSA9ICZwcml2LT50eHFbc2NkX2Zsb3ddOworCWFnZyA9ICZwcml2LT5zdGF0aW9uc1tiYV9yZXNwLT5zdGFfaWRdLnRpZFtiYV9yZXNwLT50aWRdLmFnZzsKKworCS8qIEZpbmQgaW5kZXgganVzdCBiZWZvcmUgYmxvY2stYWNrIHdpbmRvdyAqLworCWluZGV4ID0gaXdsX3F1ZXVlX2RlY193cmFwKGJhX3Jlc3Bfc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKKworCS8qIFRPRE86IE5lZWQgdG8gZ2V0IHRoaXMgY29weSBtb3JlIHNhZmVseSAtIG5vdyBnb29kIGZvciBkZWJ1ZyAqLworCisJSVdMX0RFQlVHX1RYX1JFUExZKCJSRVBMWV9DT01QUkVTU0VEX0JBIFslZF1SZWNlaXZlZCBmcm9tICVzLCAiCisJCQkgICAic3RhX2lkID0gJWRcbiIsCisJCQkgICBhZ2ctPndhaXRfZm9yX2JhLAorCQkJICAgcHJpbnRfbWFjKG1hYywgKHU4ICopICZiYV9yZXNwLT5zdGFfYWRkcl9sbzMyKSwKKwkJCSAgIGJhX3Jlc3AtPnN0YV9pZCk7CisJSVdMX0RFQlVHX1RYX1JFUExZKCJUSUQgPSAlZCwgU2VxQ3RsID0gJWQsIGJpdG1hcCA9IDB4JWxseCwgc2NkX2Zsb3cgPSAiCisJCQkgICAiJWQsIHNjZF9zc24gPSAlZFxuIiwKKwkJCSAgIGJhX3Jlc3AtPnRpZCwKKwkJCSAgIGJhX3Jlc3AtPnNlcV9jdGwsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGJhX3Jlc3AtPmJpdG1hcCksCisJCQkgICBiYV9yZXNwLT5zY2RfZmxvdywKKwkJCSAgIGJhX3Jlc3AtPnNjZF9zc24pOworCUlXTF9ERUJVR19UWF9SRVBMWSgiREFUIHN0YXJ0X2lkeCA9ICVkLCBiaXRtYXAgPSAweCVsbHggXG4iLAorCQkJICAgYWdnLT5zdGFydF9pZHgsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWFnZy0+Yml0bWFwKTsKKworCS8qIFVwZGF0ZSBkcml2ZXIncyByZWNvcmQgb2YgQUNLIHZzLiBub3QgZm9yIGVhY2ggZnJhbWUgaW4gd2luZG93ICovCisJaXdsX3R4X3N0YXR1c19yZXBseV9jb21wcmVzc2VkX2JhKHByaXYsIGFnZywgYmFfcmVzcCk7CisKKwkvKiBSZWxlYXNlIGFsbCBURkRzIGJlZm9yZSB0aGUgU1NOLCBpLmUuIGFsbCBURkRzIGluIGZyb250IG9mCisJICogYmxvY2stYWNrIHdpbmRvdyAod2UgYXNzdW1lIHRoYXQgdGhleSd2ZSBiZWVuIHN1Y2Nlc3NmdWxseQorCSAqIHRyYW5zbWl0dGVkIC4uLiBpZiBub3QsIGl0J3MgdG9vIGxhdGUgYW55d2F5KS4gKi8KKwlpZiAodHhxLT5xLnJlYWRfcHRyICE9IChiYV9yZXNwX3NjZF9zc24gJiAweGZmKSkgeworCQkvKiBjYWxjdWxhdGUgbWFjODAyMTEgYW1wZHUgc3cgcXVldWUgdG8gd2FrZSAqLworCQlpbnQgYW1wZHVfcSA9CisJCSAgIHNjZF9mbG93IC0gcHJpdi0+aHdfcGFyYW1zLmZpcnN0X2FtcGR1X3EgKyBwcml2LT5ody0+cXVldWVzOworCQlpbnQgZnJlZWQgPSBpd2xfdHhfcXVldWVfcmVjbGFpbShwcml2LCBzY2RfZmxvdywgaW5kZXgpOworCQlwcml2LT5zdGF0aW9uc1tiYV9yZXNwLT5zdGFfaWRdLgorCQkJdGlkW2JhX3Jlc3AtPnRpZF0udGZkc19pbl9xdWV1ZSAtPSBmcmVlZDsKKwkJaWYgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyayAmJgorCQkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgorCQkJYWdnLT5zdGF0ZSAhPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfREVMQkEpCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgYW1wZHVfcSk7CisKKwkJaXdsX3R4cV9jaGVja19lbXB0eShwcml2LCBiYV9yZXNwLT5zdGFfaWQsCisJCQkJICAgIGJhX3Jlc3AtPnRpZCwgc2NkX2Zsb3cpOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3JlcGx5X2NvbXByZXNzZWRfYmEpOworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKyNkZWZpbmUgVFhfU1RBVFVTX0VOVFJZKHgpIGNhc2UgVFhfU1RBVFVTX0ZBSUxfICMjIHg6IHJldHVybiAjeAorCitjb25zdCBjaGFyICppd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKHUzMiBzdGF0dXMpCit7CisJc3dpdGNoIChzdGF0dXMgJiBUWF9TVEFUVVNfTVNLKSB7CisJY2FzZSBUWF9TVEFUVVNfU1VDQ0VTUzoKKwkJcmV0dXJuICJTVUNDRVNTIjsKKwkJVFhfU1RBVFVTX0VOVFJZKFNIT1JUX0xJTUlUKTsKKwkJVFhfU1RBVFVTX0VOVFJZKExPTkdfTElNSVQpOworCQlUWF9TVEFUVVNfRU5UUlkoRklGT19VTkRFUlJVTik7CisJCVRYX1NUQVRVU19FTlRSWShNR01OVF9BQk9SVCk7CisJCVRYX1NUQVRVU19FTlRSWShORVhUX0ZSQUcpOworCQlUWF9TVEFUVVNfRU5UUlkoTElGRV9FWFBJUkUpOworCQlUWF9TVEFUVVNfRU5UUlkoREVTVF9QUyk7CisJCVRYX1NUQVRVU19FTlRSWShBQk9SVEVEKTsKKwkJVFhfU1RBVFVTX0VOVFJZKEJUX1JFVFJZKTsKKwkJVFhfU1RBVFVTX0VOVFJZKFNUQV9JTlZBTElEKTsKKwkJVFhfU1RBVFVTX0VOVFJZKEZSQUdfRFJPUFBFRCk7CisJCVRYX1NUQVRVU19FTlRSWShUSURfRElTQUJMRSk7CisJCVRYX1NUQVRVU19FTlRSWShGUkFNRV9GTFVTSEVEKTsKKwkJVFhfU1RBVFVTX0VOVFJZKElOU1VGRklDSUVOVF9DRl9QT0xMKTsKKwkJVFhfU1RBVFVTX0VOVFJZKFRYX0xPQ0tFRCk7CisJCVRYX1NUQVRVU19FTlRSWShOT19CRUFDT05fT05fUkFEQVIpOworCX0KKworCXJldHVybiAiVU5LTk9XTiI7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9nZXRfdHhfZmFpbF9yZWFzb24pOworI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCA2MDI3ZTExLi40YTIyZDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTEwMiwxNiArMTAyLDYgQEAKIE1PRFVMRV9BVVRIT1IoRFJWX0NPUFlSSUdIVCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBfX2xlMTYgKmllZWU4MDIxMV9nZXRfcW9zX2N0cmwoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKLXsKLQl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWludCBoZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOwotCi0JaWYgKChmYyAmIDB4MDBjYykgPT0gKElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSB8IElFRUU4MDIxMV9GVFlQRV9EQVRBKSkKLQkJcmV0dXJuIChfX2xlMTYgKikgKCh1OCAqKSBoZHIgKyBoZHJfbGVuIC0gUU9TX0NPTlRST0xfTEVOKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKml3bDM5NDVfZ2V0X2JhbmQoCiAJCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKQEAgLTU0NywxMCArNTM3LDIwIEBACiAJcmV0dXJuIHRlc3RfYml0KFNUQVRVU19JTklULCAmcHJpdi0+c3RhdHVzKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19yZmtpbGxfc3coc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX3Jma2lsbF9odyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoreworCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmZraWxsKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCiB7Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSB8fAotCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7CisJcmV0dXJuIGl3bDM5NDVfaXNfcmZraWxsX2h3KHByaXYpIHx8CisJCWl3bDM5NDVfaXNfcmZraWxsX3N3KHByaXYpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX3JlYWR5X3JmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCkBAIC05ODAsNyArOTgwLDcgQEAKIHsKIAogCS8qIFRoZXNlIGl0ZW1zIGFyZSBvbmx5IHNldHRhYmxlIGZyb20gdGhlIGZ1bGwgUlhPTiBjb21tYW5kICovCi0JaWYgKCEocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSB8fAorCWlmICghKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgfHwKIAkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyLAogCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpIHx8CiAJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLApAQCAtMjAzNSwzNiArMjAzNSw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQotewotCS8qIEZpbHRlciBpbmNvbWluZyBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSB0YXJnZXRlZCB0b3dhcmQKLQkgKiB0aGlzIG5ldHdvcmssIGRpc2NhcmRpbmcgcGFja2V0cyBjb21pbmcgZnJvbSBvdXJzZWx2ZXMgKi8KLQlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6IC8qIEhlYWRlcjogRGVzdC4gfCBTb3VyY2UgICAgfCBCU1NJRCAqLwotCQkvKiBwYWNrZXRzIGZyb20gb3VyIGFkYXB0ZXIgYXJlIGRyb3BwZWQgKGVjaG8pICovCi0JCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjIsIHByaXYtPm1hY19hZGRyKSkKLQkJCXJldHVybiAwOwotCQkvKiB7YnJvYWQsbXVsdGl9Y2FzdCBwYWNrZXRzIHRvIG91ciBJQlNTIGdvIHRocm91Z2ggKi8KLQkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEpKQotCQkJcmV0dXJuICFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMywgcHJpdi0+YnNzaWQpOwotCQkvKiBwYWNrZXRzIHRvIG91ciBhZGFwdGVyIGdvIHRocm91Z2ggKi8KLQkJcmV0dXJuICFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSwgcHJpdi0+bWFjX2FkZHIpOwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOiAvKiBIZWFkZXI6IERlc3QuIHwgQVB7QlNTSUR9IHwgU291cmNlICovCi0JCS8qIHBhY2tldHMgZnJvbSBvdXIgYWRhcHRlciBhcmUgZHJvcHBlZCAoZWNobykgKi8KLQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMywgcHJpdi0+bWFjX2FkZHIpKQotCQkJcmV0dXJuIDA7Ci0JCS8qIHticm9hZCxtdWx0aX1jYXN0IHBhY2tldHMgdG8gb3VyIEJTUyBnbyB0aHJvdWdoICovCi0JCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxKSkKLQkJCXJldHVybiAhY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjIsIHByaXYtPmJzc2lkKTsKLQkJLyogcGFja2V0cyB0byBvdXIgYWRhcHRlciBnbyB0aHJvdWdoICovCi0JCXJldHVybiAhY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEsIHByaXYtPm1hY19hZGRyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQogLyoqCiAgKiBpd2wzOTQ1X3NjYW5fY2FuY2VsIC0gQ2FuY2VsIGFueSBjdXJyZW50bHkgZXhlY3V0aW5nIEhXIHNjYW4KICAqCkBAIC0yMTE3LDIwICsyMDg3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NlcXVlbmNlX3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JLyogUmVzZXQgaWVlZSBzdGF0cyAqLwotCi0JLyogV2UgZG9uJ3QgcmVzZXQgdGhlIG5ldF9kZXZpY2Vfc3RhdHMgKGllZWUtPnN0YXRzKSBvbgotCSAqIHJlLWFzc29jaWF0aW9uICovCi0KLQlwcml2LT5sYXN0X3NlcV9udW0gPSAtMTsKLQlwcml2LT5sYXN0X2ZyYWdfbnVtID0gLTE7Ci0JcHJpdi0+bGFzdF9wYWNrZXRfdGltZSA9IDA7Ci0KLQlpd2wzOTQ1X3NjYW5fY2FuY2VsKHByaXYpOwotfQotCiAjZGVmaW5lIE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUwJMTAyNAogI2RlZmluZSBJTlRFTF9DT05OX0xJU1RFTl9JTlRFUlZBTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4QSkKIApAQCAtMjMyMiw3ICsyMjc4LDcgQEAKICNlbmRpZgogCiAJY2hfaW5mbyA9IGl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLAotCQkJCSAgICAgICBsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCkpOworCQkJCSAgICAgICBsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSk7CiAKIAlpZiAoIWNoX2luZm8pCiAJCWNoX2luZm8gPSAmcHJpdi0+Y2hhbm5lbF9pbmZvWzBdOwpAQCAtMjM4OSwxMiArMjM0NSwxMyBAQAogfQogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsLAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKIAkJCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWcsCiAJCQkJICAgICAgaW50IGxhc3RfZnJhZykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9od19rZXkgKmtleWluZm8gPSAmcHJpdi0+c3RhdGlvbnNbY3RsLT5rZXlfaWR4XS5rZXlpbmZvOworCXN0cnVjdCBpd2wzOTQ1X2h3X2tleSAqa2V5aW5mbyA9CisJICAgICZwcml2LT5zdGF0aW9uc1tpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeF0ua2V5aW5mbzsKIAogCXN3aXRjaCAoa2V5aW5mby0+YWxnKSB7CiAJY2FzZSBBTEdfQ0NNUDoKQEAgLTI0MTcsNyArMjM3NCw3IEBACiAKIAljYXNlIEFMR19XRVA6CiAJCWNtZC0+Y21kLnR4LnNlY19jdGwgPSBUWF9DTURfU0VDX1dFUCB8Ci0JCSAgICAoY3RsLT5rZXlfaWR4ICYgVFhfQ01EX1NFQ19NU0spIDw8IFRYX0NNRF9TRUNfU0hJRlQ7CisJCSAgICAoaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHggJiBUWF9DTURfU0VDX01TSykgPDwgVFhfQ01EX1NFQ19TSElGVDsKIAogCQlpZiAoa2V5aW5mby0+a2V5bGVuID09IDEzKQogCQkJY21kLT5jbWQudHguc2VjX2N0bCB8PSBUWF9DTURfU0VDX0tFWTEyODsKQEAgLTI0MjUsNyArMjM4Miw3IEBACiAJCW1lbWNweSgmY21kLT5jbWQudHgua2V5WzNdLCBrZXlpbmZvLT5rZXksIGtleWluZm8tPmtleWxlbik7CiAKIAkJSVdMX0RFQlVHX1RYKCJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKLQkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBjdGwtPmtleV9pZHgpOworCQkJICAgICAid2l0aCBrZXkgJWRcbiIsIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4KTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMjQzOSwyMCArMjM5NiwxOSBAQAogICovCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAogCQkJCSAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0cmwsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCSAgaW50IGlzX3VuaWNhc3QsIHU4IHN0ZF9pZCkKIHsKLQlfX2xlMTYgKnFjOwotCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCV9fbGUzMiB0eF9mbGFncyA9IGNtZC0+Y21kLnR4LnR4X2ZsYWdzOwogCiAJY21kLT5jbWQudHguc3RvcF90aW1lLmxpZmVfdGltZSA9IFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEU7Ci0JaWYgKCEoY3RybC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfTk9fQUNLKSkgeworCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSB7CiAJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQUNLX01TSzsKLQkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkKKwkJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkKIAkJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0JCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcG9uc2UoZmMpICYmCisJCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykgJiYKIAkJICAgICEobGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkgJiAweGYpKQogCQkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19UU0ZfTVNLOwogCX0gZWxzZSB7CkBAIC0yNDYxLDIwICsyNDE3LDIxIEBACiAJfQogCiAJY21kLT5jbWQudHguc3RhX2lkID0gc3RkX2lkOwotCWlmIChpZWVlODAyMTFfZ2V0X21vcmVmcmFnKGhkcikpCisJaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSkKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19NT1JFX0ZSQUdfTVNLOwogCi0JcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdHJsKGhkcik7Ci0JaWYgKHFjKSB7Ci0JCWNtZC0+Y21kLnR4LnRpZF90c3BlYyA9ICh1OCkgKGxlMTZfdG9fY3B1KCpxYykgJiAweGYpOworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCXU4ICpxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOworCQljbWQtPmNtZC50eC50aWRfdHNwZWMgPSBxY1swXSAmIDB4ZjsKIAkJdHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19TRVFfQ1RMX01TSzsKKwl9CiAKLQlpZiAoY3RybC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX1JUU19DVFMpIHsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9SVFNfQ1RTKSB7CiAJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfUlRTX01TSzsKIAkJdHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQ1RTX01TSzsKLQl9IGVsc2UgaWYgKGN0cmwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkgeworCX0gZWxzZSBpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9DVFNfUFJPVEVDVCkgewogCQl0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19SVFNfTVNLOwogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX0NUU19NU0s7CiAJfQpAQCAtMjQ4Myw5ICsyNDQwLDggQEAKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19GVUxMX1RYT1BfUFJPVF9NU0s7CiAKIAl0eF9mbGFncyAmPSB+KFRYX0NNRF9GTEdfQU5UX1NFTF9NU0spOwotCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpIHsKLQkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRIHx8Ci0JCSAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRKQorCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpIHsKKwkJaWYgKGllZWU4MDIxMV9pc19hc3NvY19yZXEoZmMpIHx8IGllZWU4MDIxMV9pc19yZWFzc29jX3JlcShmYykpCiAJCQljbWQtPmNtZC50eC50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigzKTsKIAkJZWxzZQogCQkJY21kLT5jbWQudHgudGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMik7CkBAIC0yNTQ5LDYgKzI1MDUsMTEgQEAKIAkJaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfRFJPUCwgKHU4ICopIGhkciwgc2l6ZW9mKCpoZHIpKTsKIAkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOwogCX0KKwkvKiBJZiB3ZSBhcmUgaW4gbW9uaXRvciBtb2RlLCB1c2UgQkNBU1QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yCisJICogcGFja2V0IGluamVjdGlvbi4gKi8KKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01OVFI6CisJCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwogCWRlZmF1bHQ6CiAJCUlXTF9XQVJOSU5HKCJVbmtub3duIG1vZGUgb2Ygb3BlcmF0aW9uOiAlZCIsIHByaXYtPml3X21vZGUpOwogCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CkBAIC0yNTU4LDI1ICsyNTE5LDI3IEBACiAvKgogICogc3RhcnQgUkVQTFlfVFggY29tbWFuZCBwcm9jZXNzCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9za2Ioc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhfc2tiKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICp0ZmQ7CiAJdTMyICpjb250cm9sX2ZsYWdzOwotCWludCB0eHFfaWQgPSBjdGwtPnF1ZXVlOworCWludCB0eHFfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gTlVMTDsKIAlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSA9IE5VTEw7CiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CiAJZG1hX2FkZHJfdCB0eGNtZF9waHlzOwogCXN0cnVjdCBpd2wzOTQ1X2NtZCAqb3V0X2NtZCA9IE5VTEw7Ci0JdTE2IGxlbiwgaWR4LCBsZW5fb3JnOwotCXU4IGlkLCBoZHJfbGVuLCB1bmljYXN0OworCXUxNiBsZW4sIGlkeCwgbGVuX29yZywgaGRyX2xlbjsKKwl1OCBpZDsKKwl1OCB1bmljYXN0OwogCXU4IHN0YV9pZDsKKwl1OCB0aWQgPSAwOwogCXUxNiBzZXFfbnVtYmVyID0gMDsKLQl1MTYgZmM7Ci0JX19sZTE2ICpxYzsKKwlfX2xlMTYgZmM7CiAJdTggd2FpdF93cml0ZV9wdHIgPSAwOworCXU4ICpxYyA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKQEAgLTI1ODYsMTIgKzI1NDksNyBAQAogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIAotCWlmICghcHJpdi0+dmlmKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtICFwcml2LT52aWZcbiIpOwotCQlnb3RvIGRyb3BfdW5sb2NrOwotCX0KLQotCWlmICgoY3RsLT50eF9yYXRlLT5od192YWx1ZSAmIDB4RkYpID09IElXTF9JTlZBTElEX1JBVEUpIHsKKwlpZiAoKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShwcml2LT5odywgaW5mbyktPmh3X3ZhbHVlICYgMHhGRikgPT0gSVdMX0lOVkFMSURfUkFURSkgewogCQlJV0xfRVJST1IoIkVSUk9SOiBObyBUWCByYXRlIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KQEAgLTI1OTksMjggKzI1NTcsMjkgQEAKIAl1bmljYXN0ID0gIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpOwogCWlkID0gMDsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAogI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCiAJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkKIAkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFVVEggZnJhbWVcbiIpOwotCWVsc2UgaWYgKGllZWU4MDIxMV9pc19hc3NvY19yZXF1ZXN0KGZjKSkKKwllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGZjKSkKIAkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFTU09DIGZyYW1lXG4iKTsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXF1ZXN0KGZjKSkKKwllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEoZmMpKQogCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CiAjZW5kaWYKIAogCS8qIGRyb3AgYWxsIGRhdGEgZnJhbWUgaWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkICovCi0JaWYgKCghaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpIHx8Ci0JICAgICAoKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKSAmJiAhcHJpdi0+YXNzb2NfaWQpKSAmJgotCSAgICAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSkgeworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgJiYKKwkgICAgKHByaXYtPml3X21vZGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUikgJiYgLyogcGFja2V0IGluamVjdGlvbiAqLworCSAgICAoIWl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSB8fAorCSAgICAgKChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkgJiYgIXByaXYtPmFzc29jX2lkKSkpIHsKIAkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIC0gIWl3bDM5NDVfaXNfYXNzb2NpYXRlZFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoZmMpKTsKIAogCS8qIEZpbmQgKG9yIGNyZWF0ZSkgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCiAJc3RhX2lkID0gaXdsMzk0NV9nZXRfc3RhX2lkKHByaXYsIGhkcik7CkBAIC0yNjM0LDkgKzI1OTMsOSBAQAogCiAJSVdMX0RFQlVHX1JBVEUoInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CiAKLQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0cmwoaGRyKTsKLQlpZiAocWMpIHsKLQkJdTggdGlkID0gKHU4KShsZTE2X3RvX2NwdSgqcWMpICYgMHhmKTsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOworCQl0aWQgPSBxY1swXSAmIDB4ZjsKIAkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciAmCiAJCQkJSUVFRTgwMjExX1NDVExfU0VROwogCQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoc2VxX251bWJlcikgfApAQCAtMjY2MCw4ICsyNjE5LDYgQEAKIAkvKiBTZXQgdXAgZHJpdmVyIGRhdGEgZm9yIHRoaXMgVEZEICovCiAJbWVtc2V0KCYodHhxLT50eGJbcS0+d3JpdGVfcHRyXSksIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvKSk7CiAJdHhxLT50eGJbcS0+d3JpdGVfcHRyXS5za2JbMF0gPSBza2I7Ci0JbWVtY3B5KCYodHhxLT50eGJbcS0+d3JpdGVfcHRyXS5zdGF0dXMuY29udHJvbCksCi0JICAgICAgIGN0bCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCkpOwogCiAJLyogSW5pdCBmaXJzdCBlbXB0eSBlbnRyeSBpbiBxdWV1ZSdzIGFycmF5IG9mIFR4L2NtZCBidWZmZXJzICovCiAJb3V0X2NtZCA9ICZ0eHEtPmNtZFtpZHhdOwpAQCAtMjcxMCw4ICsyNjY3LDggQEAKIAkgKiBmaXJzdCBlbnRyeSAqLwogCWl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgdHhjbWRfcGh5cywgbGVuKTsKIAotCWlmICghKGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQpKQotCQlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhwcml2LCBjdGwsIG91dF9jbWQsIHNrYiwgMCk7CisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0RPX05PVF9FTkNSWVBUKSkKKwkJaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8ocHJpdiwgaW5mbywgb3V0X2NtZCwgc2tiLCAwKTsKIAogCS8qIFNldCB1cCBURkQncyAybmQgZW50cnkgdG8gcG9pbnQgZGlyZWN0bHkgdG8gcmVtYWluZGVyIG9mIHNrYiwKIAkgKiBpZiBhbnkgKDgwMi4xMSBudWxsIGZyYW1lcyBoYXZlIG5vIHBheWxvYWQpLiAqLwpAQCAtMjczNiwxOCArMjY5MywxNyBAQAogCW91dF9jbWQtPmNtZC50eC5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOwogCiAJLyogVE9ETyBuZWVkIHRoaXMgZm9yIGJ1cnN0IG1vZGUgbGF0ZXIgb24gKi8KLQlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhwcml2LCBvdXRfY21kLCBjdGwsIGhkciwgdW5pY2FzdCwgc3RhX2lkKTsKKwlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhwcml2LCBvdXRfY21kLCBpbmZvLCBoZHIsIHVuaWNhc3QsIHN0YV9pZCk7CiAKIAkvKiBzZXQgaXNfaGNjYSB0byAwOyBpdCBwcm9iYWJseSB3aWxsIG5ldmVyIGJlIGltcGxlbWVudGVkICovCi0JaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShwcml2LCBvdXRfY21kLCBjdGwsIGhkciwgc3RhX2lkLCAwKTsKKwlpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHByaXYsIG91dF9jbWQsIGluZm8sIGhkciwgc3RhX2lkLCAwKTsKIAogCW91dF9jbWQtPmNtZC50eC50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQV9NU0s7CiAJb3V0X2NtZC0+Y21kLnR4LnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX0FOVF9CX01TSzsKIAotCWlmICghaWVlZTgwMjExX2dldF9tb3JlZnJhZyhoZHIpKSB7CisJaWYgKCFpZWVlODAyMTFfaGFzX21vcmVmcmFncyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCXR4cS0+bmVlZF91cGRhdGUgPSAxOwogCQlpZiAocWMpIHsKLQkJCXU4IHRpZCA9ICh1OCkobGUxNl90b19jcHUoKnFjKSAmIDB4Zik7CiAJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgPSBzZXFfbnVtYmVyOwogCQl9CiAJfSBlbHNlIHsKQEAgLTI3NTksNyArMjcxNSw3IEBACiAJCQkgICBzaXplb2Yob3V0X2NtZC0+Y21kLnR4KSk7CiAKIAlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9UWCwgKHU4ICopb3V0X2NtZC0+Y21kLnR4LmhkciwKLQkJCSAgIGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKSk7CisJCQkgICBpZWVlODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShmYykpKTsKIAogCS8qIFRlbGwgZGV2aWNlIHRoZSB3cml0ZSBpbmRleCAqanVzdCBwYXN0KiB0aGlzIGxhdGVzdCBmaWxsZWQgVEZEICovCiAJcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7CkBAIC0yNzc4LDcgKzI3MzQsNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQl9CiAKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIGN0bC0+cXVldWUpOworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShwcml2LT5odywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjg4OCw3ICsyODQ0LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJaWYgKHByaXYtPmlzX29wZW4pCisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiAJcmV0dXJuOwogfQogCkBAIC0yOTI0LDcyICsyODgxLDYgQEAKIAl9CiB9CiAKLSNkZWZpbmUgSVdMX1BBQ0tFVF9SRVRSWV9USU1FIEhaCi0KLWludCBpd2wzOTQ1X2lzX2R1cGxpY2F0ZV9wYWNrZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcikKLXsKLQl1MTYgc2MgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNlcV9jdHJsKTsKLQl1MTYgc2VxID0gKHNjICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OwotCXUxNiBmcmFnID0gc2MgJiBJRUVFODAyMTFfU0NUTF9GUkFHOwotCXUxNiAqbGFzdF9zZXEsICpsYXN0X2ZyYWc7Ci0JdW5zaWduZWQgbG9uZyAqbGFzdF90aW1lOwotCi0Jc3dpdGNoIChwcml2LT5pd19tb2RlKSB7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOnsKLQkJc3RydWN0IGxpc3RfaGVhZCAqcDsKLQkJc3RydWN0IGl3bDM5NDVfaWJzc19zZXEgKmVudHJ5ID0gTlVMTDsKLQkJdTggKm1hYyA9IGhlYWRlci0+YWRkcjI7Ci0JCWludCBpbmRleCA9IG1hY1s1XSAmIChJV0xfSUJTU19NQUNfSEFTSF9TSVpFIC0gMSk7Ci0KLQkJX19saXN0X2Zvcl9lYWNoKHAsICZwcml2LT5pYnNzX21hY19oYXNoW2luZGV4XSkgewotCQkJZW50cnkgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBpd2wzOTQ1X2lic3Nfc2VxLCBsaXN0KTsKLQkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGVudHJ5LT5tYWMsIG1hYykpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHAgPT0gJnByaXYtPmlic3NfbWFjX2hhc2hbaW5kZXhdKSB7Ci0JCQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFlbnRyeSkgewotCQkJCUlXTF9FUlJPUigiQ2Fubm90IG1hbGxvYyBuZXcgbWFjIGVudHJ5XG4iKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCW1lbWNweShlbnRyeS0+bWFjLCBtYWMsIEVUSF9BTEVOKTsKLQkJCWVudHJ5LT5zZXFfbnVtID0gc2VxOwotCQkJZW50cnktPmZyYWdfbnVtID0gZnJhZzsKLQkJCWVudHJ5LT5wYWNrZXRfdGltZSA9IGppZmZpZXM7Ci0JCQlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZwcml2LT5pYnNzX21hY19oYXNoW2luZGV4XSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlsYXN0X3NlcSA9ICZlbnRyeS0+c2VxX251bTsKLQkJbGFzdF9mcmFnID0gJmVudHJ5LT5mcmFnX251bTsKLQkJbGFzdF90aW1lID0gJmVudHJ5LT5wYWNrZXRfdGltZTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgotCQlsYXN0X3NlcSA9ICZwcml2LT5sYXN0X3NlcV9udW07Ci0JCWxhc3RfZnJhZyA9ICZwcml2LT5sYXN0X2ZyYWdfbnVtOwotCQlsYXN0X3RpbWUgPSAmcHJpdi0+bGFzdF9wYWNrZXRfdGltZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICgoKmxhc3Rfc2VxID09IHNlcSkgJiYKLQkgICAgdGltZV9hZnRlcigqbGFzdF90aW1lICsgSVdMX1BBQ0tFVF9SRVRSWV9USU1FLCBqaWZmaWVzKSkgewotCQlpZiAoKmxhc3RfZnJhZyA9PSBmcmFnKQotCQkJZ290byBkcm9wOwotCQlpZiAoKmxhc3RfZnJhZyArIDEgIT0gZnJhZykKLQkJCS8qIG91dC1vZi1vcmRlciBmcmFnbWVudCAqLwotCQkJZ290byBkcm9wOwotCX0gZWxzZQotCQkqbGFzdF9zZXEgPSBzZXE7Ci0KLQkqbGFzdF9mcmFnID0gZnJhZzsKLQkqbGFzdF90aW1lID0gamlmZmllczsKLQlyZXR1cm4gMDsKLQotIGRyb3A6Ci0JcmV0dXJuIDE7Ci19Ci0KICNpZmRlZiBDT05GSUdfSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAogCiAjaW5jbHVkZSAiaXdsLXNwZWN0cnVtLmgiCkBAIC0zMjQxLDcgKzMxMzIsNyBAQAogCXN0cnVjdCBza19idWZmICpiZWFjb247CiAKIAkvKiBQdWxsIHVwZGF0ZWQgQVAgYmVhY29uIGZyb20gbWFjODAyMTEuIHdpbGwgZmFpbCBpZiBub3QgaW4gQVAgbW9kZSAqLwotCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCBwcml2LT52aWYsIE5VTEwpOworCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCBwcml2LT52aWYpOwogCiAJaWYgKCFiZWFjb24pIHsKIAkJSVdMX0VSUk9SKCJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CkBAIC00ODQ4LDcgKzQ3MzksNyBAQAogCQkJY2hfaW5mby0+c2Nhbl9wb3dlciA9IGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnOwogCQkJY2hfaW5mby0+bWluX3Bvd2VyID0gMDsKIAotCQkJSVdMX0RFQlVHX0lORk8oIkNoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMlcyVzKDB4JTAyeCIKKwkJCUlXTF9ERUJVR19JTkZPKCJDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzJXMoMHglMDJ4IgogCQkJCSAgICAgICAiICVkZEJtKTogQWQtSG9jICVzc3VwcG9ydGVkXG4iLAogCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAogCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CkBAIC00ODU4LDcgKzQ3NDksNiBAQAogCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoQUNUSVZFKSwKIAkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKFJBREFSKSwKIAkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKFdJREUpLAotCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoTkFSUk9XKSwKIAkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKERGUyksCiAJCQkJICAgICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFncywKIAkJCQkgICAgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcsCkBAIC00OTk0LDkgKzQ4ODQsNiBAQAogCQlpZiAoc2Nhbl9jaC0+dHlwZSAmIDEpCiAJCQlzY2FuX2NoLT50eXBlIHw9IChkaXJlY3RfbWFzayA8PCAxKTsKIAotCQlpZiAoaXNfY2hhbm5lbF9uYXJyb3coY2hfaW5mbykpCi0JCQlzY2FuX2NoLT50eXBlIHw9ICgxIDw8IDcpOwotCiAJCXNjYW5fY2gtPmFjdGl2ZV9kd2VsbCA9IGNwdV90b19sZTE2KGFjdGl2ZV9kd2VsbCk7CiAJCXNjYW5fY2gtPnBhc3NpdmVfZHdlbGwgPSBjcHVfdG9fbGUxNihwYXNzaXZlX2R3ZWxsKTsKIApAQCAtNTg0Myw3ICs1NzMwLDcgQEAKIAlpZiAoaXdsMzk0NV9pc19yZmtpbGwocHJpdikpCiAJCXJldHVybjsKIAotCWllZWU4MDIxMV9zdGFydF9xdWV1ZXMocHJpdi0+aHcpOworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhwcml2LT5odyk7CiAKIAlwcml2LT5hY3RpdmVfcmF0ZSA9IHByaXYtPnJhdGVzX21hc2s7CiAJcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5yYXRlc19tYXNrICYgSVdMX0JBU0lDX1JBVEVTX01BU0s7CkBAIC01ODY5LDkgKzU3NTYsNiBAQAogCS8qIENvbmZpZ3VyZSB0aGUgYWRhcHRlciBmb3IgdW5hc3NvY2lhdGVkIG9wZXJhdGlvbiAqLwogCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAKLQkvKiBBdCB0aGlzIHBvaW50LCB0aGUgTklDIGlzIGluaXRpYWxpemVkIGFuZCBvcGVyYXRpb25hbCAqLwotCXByaXYtPm5vdGlmX21pc3NlZF9iZWFjb25zID0gMDsKLQogCWl3bDM5NDVfcmVnX3R4cG93ZXJfcGVyaW9kaWMocHJpdik7CiAKIAlpd2wzOTQ1X2xlZF9yZWdpc3Rlcihwcml2KTsKQEAgLTU5MzgsNyArNTgyMiw5IEBACiAJCQkgICAgICAgdGVzdF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKSA8PAogCQkJCQlTVEFUVVNfR0VPX0NPTkZJR1VSRUQgfAogCQkJICAgICAgIHRlc3RfYml0KFNUQVRVU19JTl9TVVNQRU5ELCAmcHJpdi0+c3RhdHVzKSA8PAotCQkJCQlTVEFUVVNfSU5fU1VTUEVORDsKKwkJCQkJU1RBVFVTX0lOX1NVU1BFTkQgfAorCQkJCXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIDw8CisJCQkJCVNUQVRVU19FWElUX1BFTkRJTkc7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTU5NTMsNyArNTgzOSw5IEBACiAJCQl0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykgPDwKIAkJCQlTVEFUVVNfSU5fU1VTUEVORCB8CiAJCQl0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpIDw8Ci0JCQkJU1RBVFVTX0ZXX0VSUk9SOworCQkJCVNUQVRVU19GV19FUlJPUiB8CisJCQl0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSA8PAorCQkJCVNUQVRVU19FWElUX1BFTkRJTkc7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bDM5NDVfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKQEAgLTYwODUsNiArNTk3Myw3IEBACiAKIAlzZXRfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCV9faXdsMzk0NV9kb3duKHByaXYpOworCWNsZWFyX2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAogCS8qIHRyaWVkIHRvIHJlc3RhcnQgYW5kIGNvbmZpZyB0aGUgZGV2aWNlIGZvciBhcyBsb25nIGFzIG91cgogCSAqIHBhdGllbmNlIGNvdWxkIHdpdGhzdGFuZCAqLwpAQCAtNjE1Miw2ICs2MDQxLDI2IEBACiAJCQkJICAgICJLaWxsIHN3aXRjaCBtdXN0IGJlIHR1cm5lZCBvZmYgZm9yICIKIAkJCQkgICAgIndpcmVsZXNzIG5ldHdvcmtpbmcgdG8gd29yay5cbiIpOwogCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCWl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKK30KKworc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19zZXRfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCXN0cnVjdCBpd2wzOTQ1X3ByaXYsIHNldF9tb25pdG9yKTsKKworCUlXTF9ERUJVRyhJV0xfRExfU1RBVEUsICJzZXR0aW5nIG1vbml0b3IgbW9kZVxuIik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAoIWl3bDM5NDVfaXNfcmVhZHkocHJpdikpCisJCUlXTF9ERUJVRyhJV0xfRExfU1RBVEUsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CisJZWxzZQorCQlpZiAoaXdsMzk0NV9zZXRfbW9kZShwcml2LCBJRUVFODAyMTFfSUZfVFlQRV9NTlRSKSAhPSAwKQorCQkJSVdMX0VSUk9SKCJpd2wzOTQ1X3NldF9tb2RlKCkgZmFpbGVkXG4iKTsKKwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCkBAIC02Mzg4LDYgKzYyOTcsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlfX2l3bDM5NDVfdXAocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3Jlc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQpAQCAtNjUxMSw4ICs2NDIxLDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JaXdsMzk0NV9zZXF1ZW5jZV9yZXNldChwcml2KTsKLQogCWl3bDM5NDVfYWN0aXZhdGVfcW9zKHByaXYsIDApOwogCiAJLyogd2UgaGF2ZSBqdXN0IGFzc29jaWF0ZWQsIGRvbid0IHN0YXJ0IHNjYW4gdG9vIGVhcmx5ICovCkBAIC02NjA4LDYgKzY1MTYsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKKwlpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKIAlpZiAocmV0KQogCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIApAQCAtNjY3OCw4ICs2NTg4LDcgQEAKIAlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCitzdGF0aWMgaW50IGl3bDM5NDVfbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKIApAQCAtNjY5Miw5ICs2NjAxLDkgQEAKIAl9CiAKIAlJV0xfREVCVUdfVFgoImRldi0+eG1pdCglZCBieXRlcykgYXQgcmF0ZSAweCUwMnhcbiIsIHNrYi0+bGVuLAotCQkgICAgIGN0bC0+dHhfcmF0ZS0+Yml0cmF0ZSk7CisJCSAgICAgaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBJRUVFODAyMTFfU0tCX0NCKHNrYikpLT5iaXRyYXRlKTsKIAotCWlmIChpd2wzOTQ1X3R4X3NrYihwcml2LCBza2IsIGN0bCkpCisJaWYgKGl3bDM5NDVfdHhfc2tiKHByaXYsIHNrYikpCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKQEAgLTY4MzcsNyArNjc0Niw3IEBACiAJCXJldHVybjsKIAogCS8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGRvbmUgb25seSBhdCBBUCBicmluZyB1cCAqLwotCWlmICgocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSA9PSAwKSB7CisJaWYgKCEoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSkgewogCiAJCS8qIFJYT04gLSB1bmFzc29jICh0byBzZXQgdGltaW5nIGNvbW1hbmQpICovCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKQEAgLTY4ODYsNiArNjc5NSw5IEBACiAJICogY2xlYXIgc3RhIHRhYmxlLCBhZGQgQkNBU1Qgc3RhLi4uICovCiB9CiAKKy8qIHRlbXBvcmFyeSAqLworc3RhdGljIGludCBpd2wzOTQ1X21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwogc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25maWdfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCkBAIC02OTAzLDEwICs2ODE1LDIxIEBACiAJCXJldHVybiAwOwogCX0KIAorCS8qIGhhbmRsZSB0aGlzIHRlbXBvcmFyaWx5IGhlcmUgKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCisJICAgIGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pIHsKKwkJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOworCQlpZiAoIWJlYWNvbikKKwkJCXJldHVybiAtRU5PTUVNOworCQlyYyA9IGl3bDM5NDVfbWFjX2JlYWNvbl91cGRhdGUoaHcsIGJlYWNvbik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwl9CisKIAkvKiBYWFg6IHRoaXMgTVVTVCB1c2UgY29uZi0+bWFjX2FkZHIgKi8KIAogCWlmICgocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkgJiYKLQkgICAgKCFjb25mLT5iZWFjb24gfHwgIWNvbmYtPnNzaWRfbGVuKSkgeworCSAgICAoIWNvbmYtPnNzaWRfbGVuKSkgewogCQlJV0xfREVCVUdfTUFDODAyMTEKIAkJICAgICgiTGVhdmluZyBpbiBBUCBtb2RlIGJlY2F1c2UgSG9zdEFQRCBpcyBub3QgcmVhZHkuXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC02OTM4LDcgKzY4NjEsNyBAQAogCQlpZiAocHJpdi0+aWJzc19iZWFjb24pCiAJCQlkZXZfa2ZyZWVfc2tiKHByaXYtPmlic3NfYmVhY29uKTsKIAotCQlwcml2LT5pYnNzX2JlYWNvbiA9IGNvbmYtPmJlYWNvbjsKKwkJcHJpdi0+aWJzc19iZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKIAl9CiAKIAlpZiAoaXdsMzk0NV9pc19yZmtpbGwocHJpdikpCkBAIC02OTk5LDExICs2OTIyLDE4IEBACiAJCQkJIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCiAJCQkJIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCiB7Ci0JLyoKLQkgKiBYWFg6IGR1bW15Ci0JICogc2VlIGFsc28gaXdsMzk0NV9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnCi0JICovCi0JKnRvdGFsX2ZsYWdzID0gMDsKKwlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmICgqdG90YWxfZmxhZ3MpICYgRklGX09USEVSX0JTUykgeworCQlJV0xfREVCVUdfTUFDODAyMTEoIkVudGVyOiB0eXBlICVkICgweCV4LCAweCV4KVxuIiwKKwkJCQkgICBJRUVFODAyMTFfSUZfVFlQRV9NTlRSLAorCQkJCSAgIGNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7CisJCS8qIHF1ZXVlIHdvcmsgJ2N1eiBtYWM4MDIxMSBpcyBob2xkaW5nIGEgbG9jayB3aGljaAorCQkgKiBwcmV2ZW50cyB1cyBmcm9tIGlzc3VpbmcgKHN5bmNocm9ub3VzKSBmL3cgY21kcyAqLworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNldF9tb25pdG9yKTsKKwl9CisJKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfAorCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKIH0KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9tYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTcwNjEsOSArNjk5MSwxMCBAQAogCQlyYyA9IC1FQUdBSU47CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JLyogaWYgd2UganVzdCBmaW5pc2hlZCBzY2FuIGFzayBmb3IgZGVsYXkgKi8KLQlpZiAocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgJiYgdGltZV9hZnRlcihwcml2LT5sYXN0X3NjYW5famlmZmllcyArCi0JCQkJSVdMX0RFTEFZX05FWFRfU0NBTiwgamlmZmllcykpIHsKKwkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSBmb3IgYSBicm9hZGNhc3Qgc2NhbiAqLworCWlmICgobGVuID09IDApICYmIHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICYmCisJICAgIHRpbWVfYWZ0ZXIocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOLAorCQkgICAgICAgamlmZmllcykpIHsKIAkJcmMgPSAtRUFHQUlOOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtNzE1MCw3ICs3MDgxLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAorc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCQkgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKQEAgLTcyMjQsOSArNzE1NSw5IEBACiAJCXEgPSAmdHhxLT5xOwogCQlhdmFpbCA9IGl3bDM5NDVfcXVldWVfc3BhY2UocSk7CiAKLQkJc3RhdHMtPmRhdGFbaV0ubGVuID0gcS0+bl93aW5kb3cgLSBhdmFpbDsKLQkJc3RhdHMtPmRhdGFbaV0ubGltaXQgPSBxLT5uX3dpbmRvdyAtIHEtPmhpZ2hfbWFyazsKLQkJc3RhdHMtPmRhdGFbaV0uY291bnQgPSBxLT5uX3dpbmRvdzsKKwkJc3RhdHNbaV0ubGVuID0gcS0+bl93aW5kb3cgLSBhdmFpbDsKKwkJc3RhdHNbaV0ubGltaXQgPSBxLT5uX3dpbmRvdyAtIHEtPmhpZ2hfbWFyazsKKwkJc3RhdHNbaV0uY291bnQgPSBxLT5uX3dpbmRvdzsKIAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC03MzE1LDggKzcyNDYsNyBAQAogCiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorc3RhdGljIGludCBpd2wzOTQ1X21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzM5OCwzNyArNzMyOCw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfSVdMMzk0NV9ERUJVRyAqLwogCi1zdGF0aWMgc3NpemVfdCBzaG93X3JmX2tpbGwoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCS8qCi0JICogMCAtIFJGIGtpbGwgbm90IGVuYWJsZWQKLQkgKiAxIC0gU1cgYmFzZWQgUkYga2lsbCBhY3RpdmUgKHN5c2ZzKQotCSAqIDIgLSBIVyBiYXNlZCBSRiBraWxsIGFjdGl2ZQotCSAqIDMgLSBCb3RoIEhXIGFuZCBTVyBiYXNlZCBSRiBraWxsIGFjdGl2ZQotCSAqLwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwotCWludCB2YWwgPSAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpID8gMHgxIDogMHgwKSB8Ci0JCSAgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSA/IDB4MiA6IDB4MCk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgdmFsKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfcmZfa2lsbChzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsMzk0NV9yYWRpb19raWxsX3N3KHByaXYsIGJ1ZlswXSA9PSAnMScpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocmZfa2lsbCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcmZfa2lsbCwgc3RvcmVfcmZfa2lsbCk7Ci0KIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcGVyYXR1cmUoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNzg3OSw2ICs3Nzc4LDcgQEAKIAlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sIGl3bDM5NDVfYmdfYWJvcnRfc2Nhbik7CiAJSU5JVF9XT1JLKCZwcml2LT5yZl9raWxsLCBpd2wzOTQ1X2JnX3JmX2tpbGwpOwogCUlOSVRfV09SSygmcHJpdi0+YmVhY29uX3VwZGF0ZSwgaXdsMzk0NV9iZ19iZWFjb25fdXBkYXRlKTsKKwlJTklUX1dPUksoJnByaXYtPnNldF9tb25pdG9yLCBpd2wzOTQ1X2JnX3NldF9tb25pdG9yKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cG9zdF9hc3NvY2lhdGUsIGl3bDM5NDVfYmdfcG9zdF9hc3NvY2lhdGUpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pbml0X2FsaXZlX3N0YXJ0LCBpd2wzOTQ1X2JnX2luaXRfYWxpdmVfc3RhcnQpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hbGl2ZV9zdGFydCwgaXdsMzk0NV9iZ19hbGl2ZV9zdGFydCk7CkBAIC03OTEzLDcgKzc4MTMsNiBAQAogI2VuZGlmCiAJJmRldl9hdHRyX3Bvd2VyX2xldmVsLmF0dHIsCiAJJmRldl9hdHRyX3JldHJ5X3JhdGUuYXR0ciwKLQkmZGV2X2F0dHJfcmZfa2lsbC5hdHRyLAogCSZkZXZfYXR0cl9yc193aW5kb3cuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdGlzdGljcy5hdHRyLAogCSZkZXZfYXR0cl9zdGF0dXMuYXR0ciwKQEAgLTc5NDMsNyArNzg0Miw2IEBACiAJLmNvbmZfdHggPSBpd2wzOTQ1X21hY19jb25mX3R4LAogCS5nZXRfdHNmID0gaXdsMzk0NV9tYWNfZ2V0X3RzZiwKIAkucmVzZXRfdHNmID0gaXdsMzk0NV9tYWNfcmVzZXRfdHNmLAotCS5iZWFjb25fdXBkYXRlID0gaXdsMzk0NV9tYWNfYmVhY29uX3VwZGF0ZSwKIAkuaHdfc2NhbiA9IGl3bDM5NDVfbWFjX2h3X3NjYW4KIH07CiAKQEAgLTc5NTMsNyArNzg1MSw2IEBACiAJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgaXdsXzM5NDVfY2ZnICpjZmcgPSAoc3RydWN0IGl3bF8zOTQ1X2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKLQlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCkBAIC04MDAxLDE3ICs3ODk4LDEwIEBACiAKIAlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CiAKLQkvKiBUZWxsIG1hYzgwMjExIGFuZCBpdHMgY2xpZW50cyAoZS5nLiBXaXJlbGVzcyBFeHRlbnNpb25zKQotCSAqICAgdGhlIHJhbmdlIG9mIHNpZ25hbCBxdWFsaXR5IHZhbHVlcyB0aGF0IHdlJ2xsIHByb3ZpZGUuCi0JICogTmVnYXRpdmUgdmFsdWVzIGZvciBsZXZlbC9ub2lzZSBpbmRpY2F0ZSB0aGF0IHdlJ2xsIHByb3ZpZGUgZEJtLgotCSAqIEZvciBXRSwgYXQgbGVhc3QsIG5vbi0wIHZhbHVlcyBoZXJlICplbmFibGUqIGRpc3BsYXkgb2YgdmFsdWVzCi0JICogICBpbiBhcHAgKGl3Y29uZmlnKS4gKi8KLQlody0+bWF4X3Jzc2kgPSAtMjA7CS8qIHNpZ25hbCBsZXZlbCwgbmVnYXRpdmUgaW5kaWNhdGVzIGRCbSAqLwotCWh3LT5tYXhfbm9pc2UgPSAtMjA7CS8qIG5vaXNlIGxldmVsLCBuZWdhdGl2ZSBpbmRpY2F0ZXMgZEJtICovCi0JaHctPm1heF9zaWduYWwgPSAxMDA7CS8qIGxpbmsgcXVhbGl0eSBpbmRpY2F0aW9uICglKSAqLwotCi0JLyogVGVsbCBtYWM4MDIxMSBvdXIgVHggY2hhcmFjdGVyaXN0aWNzICovCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfR0VOX0JFQUNPTl9URU1QTEFURTsKKwkvKiBUZWxsIG1hYzgwMjExIG91ciBjaGFyYWN0ZXJpc3RpY3MgKi8KKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFIHwKKwkJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk07CiAKIAkvKiA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KIAlody0+cXVldWVzID0gNDsKQEAgLTgwMjEsOSArNzkxMSw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKIAotCWZvciAoaSA9IDA7IGkgPCBJV0xfSUJTU19NQUNfSEFTSF9TSVpFOyBpKyspCi0JCUlOSVRfTElTVF9IRUFEKCZwcml2LT5pYnNzX21hY19oYXNoW2ldKTsKLQogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7CiAKIAltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CkBAIC04MTYxLDYgKzgwNDgsMTEgQEAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKKwllcnIgPSBpd2wzOTQ1X3Jma2lsbF9pbml0KHByaXYpOworCWlmIChlcnIpCisJCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgorCQkJCSAgIklnbm9yaW5nIGVycm9yOiAlZFxuIiwgZXJyKTsKKwogCXJldHVybiAwOwogCiAgb3V0X2ZyZWVfZ2VvczoKQEAgLTgxOTEsOCArODA4Myw2IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaXdsMzk0NV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcCwgKnE7Ci0JaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghcHJpdikKQEAgLTgyMTMsMTYgKzgxMDMsOSBAQAogCiAJaXdsX3N5bmNocm9uaXplX2lycShwcml2KTsKIAotCS8qIEZyZWUgTUFDIGhhc2ggbGlzdCBmb3IgQURIT0MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX0lCU1NfTUFDX0hBU0hfU0laRTsgaSsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmcHJpdi0+aWJzc19tYWNfaGFzaFtpXSkgewotCQkJbGlzdF9kZWwocCk7Ci0JCQlrZnJlZShsaXN0X2VudHJ5KHAsIHN0cnVjdCBpd2wzOTQ1X2lic3Nfc2VxLCBsaXN0KSk7Ci0JCX0KLQl9Ci0KIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsMzk0NV9hdHRyaWJ1dGVfZ3JvdXApOwogCisJaXdsMzk0NV9yZmtpbGxfdW5yZWdpc3Rlcihwcml2KTsKIAlpd2wzOTQ1X2RlYWxsb2NfdWNvZGVfcGNpKHByaXYpOwogCiAJaWYgKHByaXYtPnJ4cS5iZCkKQEAgLTgyNTIsNyArODEzNSw3IEBACiAKIAlpd2wzOTQ1X2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7CiAJaXdsMzk0NV9mcmVlX2dlb3MocHJpdik7Ci0KKwlrZnJlZShwcml2LT5zY2FuKTsKIAlpZiAocHJpdi0+aWJzc19iZWFjb24pCiAJCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOwogCkBAIC04MjkxLDYgKzgxNzQsMTE0IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAorLyoqKioqKioqKioqKioqKiBSRktJTEwgRlVOQ1RJT05TICoqKioqKioqKiovCisjaWZkZWYgQ09ORklHX0lXTDM5NDVfUkZLSUxMCisvKiBzb2Z0d2FyZSByZi1raWxsIGZyb20gdXNlciAqLworc3RhdGljIGludCBpd2wzOTQ1X3Jma2lsbF9zb2Z0X3JmX2tpbGwodm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpCit7CisJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRhdGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIXByaXYtPnJma2lsbCkKKwlyZXR1cm4gMDsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuIDA7CisKKwlJV0xfREVCVUdfUkZfS0lMTCgid2UgcmVjaWV2ZWQgc29mdCBSRktJTEwgc2V0IHRvIHN0YXRlICVkXG4iLCBzdGF0ZSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDoKKwkJaWYgKGl3bDM5NDVfaXNfcmZraWxsX2h3KHByaXYpKSB7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwkJaXdsMzk0NV9yYWRpb19raWxsX3N3KHByaXYsIDApOworCQlicmVhazsKKwljYXNlIFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQ6CisJCWl3bDM5NDVfcmFkaW9fa2lsbF9zdyhwcml2LCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX1dBUk5JTkcoIndlIHJlY2lldmVkIHVuZXhwZWN0ZWQgUkZLSUxMIHN0YXRlICVkXG4iLCBzdGF0ZSk7CisJCWJyZWFrOworCX0KK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaXdsMzk0NV9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9IHdpcGh5X2Rldihwcml2LT5ody0+d2lwaHkpOworCWludCByZXQgPSAwOworCisJQlVHX09OKGRldmljZSA9PSBOVUxMKTsKKworCUlXTF9ERUJVR19SRl9LSUxMKCJJbml0aWFsaXppbmcgUkZLSUxMLlxuIik7CisJcHJpdi0+cmZraWxsID0gcmZraWxsX2FsbG9jYXRlKGRldmljZSwgUkZLSUxMX1RZUEVfV0xBTik7CisJaWYgKCFwcml2LT5yZmtpbGwpIHsKKwkJSVdMX0VSUk9SKCJVbmFibGUgdG8gYWxsb2NhdGUgcmZraWxsIGRldmljZS5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXByaXYtPnJma2lsbC0+bmFtZSA9IHByaXYtPmNmZy0+bmFtZTsKKwlwcml2LT5yZmtpbGwtPmRhdGEgPSBwcml2OworCXByaXYtPnJma2lsbC0+c3RhdGUgPSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOworCXByaXYtPnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gaXdsMzk0NV9yZmtpbGxfc29mdF9yZl9raWxsOworCXByaXYtPnJma2lsbC0+dXNlcl9jbGFpbV91bnN1cHBvcnRlZCA9IDE7CisKKwlwcml2LT5yZmtpbGwtPmRldi5jbGFzcy0+c3VzcGVuZCA9IE5VTEw7CisJcHJpdi0+cmZraWxsLT5kZXYuY2xhc3MtPnJlc3VtZSA9IE5VTEw7CisKKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIocHJpdi0+cmZraWxsKTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHJma2lsbDogJWRcbiIsIHJldCk7CisJCWdvdG8gZnJlZWRfcmZraWxsOworCX0KKworCUlXTF9ERUJVR19SRl9LSUxMKCJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKKwlyZXR1cm4gcmV0OworCitmcmVlZF9yZmtpbGw6CisJaWYgKHByaXYtPnJma2lsbCAhPSBOVUxMKQorCQlyZmtpbGxfZnJlZShwcml2LT5yZmtpbGwpOworCXByaXYtPnJma2lsbCA9IE5VTEw7CisKK2Vycm9yOgorCUlXTF9ERUJVR19SRl9LSUxMKCJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3sKKwlpZiAocHJpdi0+cmZraWxsKQorCQlyZmtpbGxfdW5yZWdpc3Rlcihwcml2LT5yZmtpbGwpOworCisJcHJpdi0+cmZraWxsID0gTlVMTDsKK30KKworLyogc2V0IHJmLWtpbGwgdG8gdGhlIHJpZ2h0IHN0YXRlLiAqLwordm9pZCBpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3sKKworCWlmICghcHJpdi0+cmZraWxsKQorCQlyZXR1cm47CisKKwlpZiAoaXdsMzk0NV9pc19yZmtpbGxfaHcocHJpdikpIHsKKwkJcmZraWxsX2ZvcmNlX3N0YXRlKHByaXYtPnJma2lsbCwgUkZLSUxMX1NUQVRFX0hBUkRfQkxPQ0tFRCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWl3bDM5NDVfaXNfcmZraWxsX3N3KHByaXYpKQorCQlyZmtpbGxfZm9yY2Vfc3RhdGUocHJpdi0+cmZraWxsLCBSRktJTExfU1RBVEVfVU5CTE9DS0VEKTsKKwllbHNlCisJCXJma2lsbF9mb3JjZV9zdGF0ZShwcml2LT5yZmtpbGwsIFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQpOworfQorI2VuZGlmCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIGRyaXZlciBhbmQgbW9kdWxlIGVudHJ5IHBvaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDQ5NjUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2w0OTY1LWJhc2UuYwppbmRleCAwYmQ1NWJiLi43MWY1ZGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDQ5NjUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsNDk2NS1iYXNlLmMKQEAgLTQ2LDE0ICs0NiwxMyBAQAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgotI2luY2x1ZGUgIml3bC00OTY1LmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogI2luY2x1ZGUgIml3bC1jb3JlLmgiCiAjaW5jbHVkZSAiaXdsLWlvLmgiCiAjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKICNpbmNsdWRlICJpd2wtc3RhLmgiCisjaW5jbHVkZSAiaXdsLWNhbGliLmgiCiAKLXN0YXRpYyBpbnQgaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtODgsMjkyICs4Nyw2IEBACiBNT0RVTEVfQVVUSE9SKERSVl9DT1BZUklHSFQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1fX2xlMTYgKmllZWU4MDIxMV9nZXRfcW9zX2N0cmwoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKLXsKLQl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWludCBoZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOwotCi0JaWYgKChmYyAmIDB4MDBjYykgPT0gKElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSB8IElFRUU4MDIxMV9GVFlQRV9EQVRBKSkKLQkJcmV0dXJuIChfX2xlMTYgKikgKCh1OCAqKSBoZHIgKyBoZHJfbGVuIC0gUU9TX0NPTlRST0xfTEVOKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKml3bDQ5NjVfZ2V0X2h3X21vZGUoCi0JCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQotewotCXJldHVybiBwcml2LT5ody0+d2lwaHktPmJhbmRzW2JhbmRdOwotfQotCi1zdGF0aWMgaW50IGl3bDQ5NjVfaXNfZW1wdHlfZXNzaWQoY29uc3QgY2hhciAqZXNzaWQsIGludCBlc3NpZF9sZW4pCi17Ci0JLyogU2luZ2xlIHdoaXRlIHNwYWNlIGlzIGZvciBMaW5rc3lzIEFQcyAqLwotCWlmIChlc3NpZF9sZW4gPT0gMSAmJiBlc3NpZFswXSA9PSAnICcpCi0JCXJldHVybiAxOwotCi0JLyogT3RoZXJ3aXNlLCBpZiB0aGUgZW50aXJlIGVzc2lkIGlzIDAsIHdlIGFzc3VtZSBpdCBpcyBoaWRkZW4gKi8KLQl3aGlsZSAoZXNzaWRfbGVuKSB7Ci0JCWVzc2lkX2xlbi0tOwotCQlpZiAoZXNzaWRbZXNzaWRfbGVuXSAhPSAnXDAnKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICppd2w0OTY1X2VzY2FwZV9lc3NpZChjb25zdCBjaGFyICplc3NpZCwgdTggZXNzaWRfbGVuKQotewotCXN0YXRpYyBjaGFyIGVzY2FwZWRbSVdfRVNTSURfTUFYX1NJWkUgKiAyICsgMV07Ci0JY29uc3QgY2hhciAqcyA9IGVzc2lkOwotCWNoYXIgKmQgPSBlc2NhcGVkOwotCi0JaWYgKGl3bDQ5NjVfaXNfZW1wdHlfZXNzaWQoZXNzaWQsIGVzc2lkX2xlbikpIHsKLQkJbWVtY3B5KGVzY2FwZWQsICI8aGlkZGVuPiIsIHNpemVvZigiPGhpZGRlbj4iKSk7Ci0JCXJldHVybiBlc2NhcGVkOwotCX0KLQotCWVzc2lkX2xlbiA9IG1pbihlc3NpZF9sZW4sICh1OCkgSVdfRVNTSURfTUFYX1NJWkUpOwotCXdoaWxlIChlc3NpZF9sZW4tLSkgewotCQlpZiAoKnMgPT0gJ1wwJykgewotCQkJKmQrKyA9ICdcXCc7Ci0JCQkqZCsrID0gJzAnOwotCQkJcysrOwotCQl9IGVsc2UKLQkJCSpkKysgPSAqcysrOwotCX0KLQkqZCA9ICdcMCc7Ci0JcmV0dXJuIGVzY2FwZWQ7Ci19Ci0KLS8qKioqKioqKioqKioqKiogRE1BLVFVRVVFLUdFTkVSQUwtRlVOQ1RJT05TICAqKioqKgotICogRE1BIHNlcnZpY2VzCi0gKgotICogVGhlb3J5IG9mIG9wZXJhdGlvbgotICoKLSAqIEEgVHggb3IgUnggcXVldWUgcmVzaWRlcyBpbiBob3N0IERSQU0sIGFuZCBpcyBjb21wcmlzZWQgb2YgYSBjaXJjdWxhciBidWZmZXIKLSAqIG9mIGJ1ZmZlciBkZXNjcmlwdG9ycywgZWFjaCBvZiB3aGljaCBwb2ludHMgdG8gb25lIG9yIG1vcmUgZGF0YSBidWZmZXJzIGZvcgotICogdGhlIGRldmljZSB0byByZWFkIGZyb20gb3IgZmlsbC4gIERyaXZlciBhbmQgZGV2aWNlIGV4Y2hhbmdlIHN0YXR1cyBvZiBlYWNoCi0gKiBxdWV1ZSB2aWEgInJlYWQiIGFuZCAid3JpdGUiIHBvaW50ZXJzLiAgRHJpdmVyIGtlZXBzIG1pbmltdW0gb2YgMiBlbXB0eQotICogZW50cmllcyBpbiBlYWNoIGNpcmN1bGFyIGJ1ZmZlciwgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmZ1c2luZyBlbXB0eSBhbmQgZnVsbAotICogcXVldWUgc3RhdGVzLgotICoKLSAqIFRoZSBkZXZpY2UgcmVhZHMgb3Igd3JpdGVzIHRoZSBkYXRhIGluIHRoZSBxdWV1ZXMgdmlhIHRoZSBkZXZpY2UncyBzZXZlcmFsCi0gKiBETUEvRklGTyBjaGFubmVscy4gIEVhY2ggcXVldWUgaXMgbWFwcGVkIHRvIGEgc2luZ2xlIERNQSBjaGFubmVsLgotICoKLSAqIEZvciBUeCBxdWV1ZSwgdGhlcmUgYXJlIGxvdyBtYXJrIGFuZCBoaWdoIG1hcmsgbGltaXRzLiBJZiwgYWZ0ZXIgcXVldWluZwotICogdGhlIHBhY2tldCBmb3IgVHgsIGZyZWUgc3BhY2UgYmVjb21lIDwgbG93IG1hcmssIFR4IHF1ZXVlIHN0b3BwZWQuIFdoZW4KLSAqIHJlY2xhaW1pbmcgcGFja2V0cyAob24gJ3R4IGRvbmUgSVJRKSwgaWYgZnJlZSBzcGFjZSBiZWNvbWUgPiBoaWdoIG1hcmssCi0gKiBUeCBxdWV1ZSByZXN1bWVkLgotICoKLSAqIFRoZSA0OTY1IG9wZXJhdGVzIHdpdGggdXAgdG8gMTcgcXVldWVzOiAgT25lIHJlY2VpdmUgcXVldWUsIG9uZSB0cmFuc21pdAotICogcXVldWUgKCM0KSBmb3Igc2VuZGluZyBjb21tYW5kcyB0byB0aGUgZGV2aWNlIGZpcm13YXJlLCBhbmQgMTUgb3RoZXIKLSAqIFR4IHF1ZXVlcyB0aGF0IG1heSBiZSBtYXBwZWQgdG8gcHJpb3JpdGl6ZWQgVHggRE1BL0ZJRk8gY2hhbm5lbHMuCi0gKgotICogU2VlIG1vcmUgZGV0YWlsZWQgaW5mbyBpbiBpd2wtNDk2NS1ody5oLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotaW50IGl3bDQ5NjVfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bDQ5NjVfcXVldWUgKnEpCi17Ci0JaW50IHMgPSBxLT5yZWFkX3B0ciAtIHEtPndyaXRlX3B0cjsKLQotCWlmIChxLT5yZWFkX3B0ciA+IHEtPndyaXRlX3B0cikKLQkJcyAtPSBxLT5uX2JkOwotCi0JaWYgKHMgPD0gMCkKLQkJcyArPSBxLT5uX3dpbmRvdzsKLQkvKiBrZWVwIHNvbWUgcmVzZXJ2ZSB0byBub3QgY29uZnVzZSBlbXB0eSBhbmQgZnVsbCBzaXR1YXRpb25zICovCi0JcyAtPSAyOwotCWlmIChzIDwgMCkKLQkJcyA9IDA7Ci0JcmV0dXJuIHM7Ci19Ci0KLQotc3RhdGljIGlubGluZSBpbnQgeDJfcXVldWVfdXNlZChjb25zdCBzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSwgaW50IGkpCi17Ci0JcmV0dXJuIHEtPndyaXRlX3B0ciA+IHEtPnJlYWRfcHRyID8KLQkJKGkgPj0gcS0+cmVhZF9wdHIgJiYgaSA8IHEtPndyaXRlX3B0cikgOgotCQkhKGkgPCBxLT5yZWFkX3B0ciAmJiBpID49IHEtPndyaXRlX3B0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggZ2V0X2NtZF9pbmRleChzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSwgdTMyIGluZGV4LCBpbnQgaXNfaHVnZSkKLXsKLQkvKiBUaGlzIGlzIGZvciBzY2FuIGNvbW1hbmQsIHRoZSBiaWcgYnVmZmVyIGF0IGVuZCBvZiBjb21tYW5kIGFycmF5ICovCi0JaWYgKGlzX2h1Z2UpCi0JCXJldHVybiBxLT5uX3dpbmRvdzsJLyogbXVzdCBiZSBwb3dlciBvZiAyICovCi0KLQkvKiBPdGhlcndpc2UsIHVzZSBub3JtYWwgc2l6ZSBidWZmZXJzICovCi0JcmV0dXJuIGluZGV4ICYgKHEtPm5fd2luZG93IC0gMSk7Ci19Ci0KLS8qKgotICogaXdsNDk2NV9xdWV1ZV9pbml0IC0gSW5pdGlhbGl6ZSBxdWV1ZSdzIGhpZ2gvbG93LXdhdGVyIGFuZCByZWFkL3dyaXRlIGluZGV4ZXMKLSAqLwotc3RhdGljIGludCBpd2w0OTY1X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSwKLQkJCSAgaW50IGNvdW50LCBpbnQgc2xvdHNfbnVtLCB1MzIgaWQpCi17Ci0JcS0+bl9iZCA9IGNvdW50OwotCXEtPm5fd2luZG93ID0gc2xvdHNfbnVtOwotCXEtPmlkID0gaWQ7Ci0KLQkvKiBjb3VudCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UgaXdsX3F1ZXVlX2luY193cmFwCi0JICogYW5kIGl3bF9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLwotCUJVR19PTighaXNfcG93ZXJfb2ZfMihjb3VudCkpOwotCi0JLyogc2xvdHNfbnVtIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQotCSAqIGdldF9jbWRfaW5kZXggaXMgYnJva2VuLiAqLwotCUJVR19PTighaXNfcG93ZXJfb2ZfMihzbG90c19udW0pKTsKLQotCXEtPmxvd19tYXJrID0gcS0+bl93aW5kb3cgLyA0OwotCWlmIChxLT5sb3dfbWFyayA8IDQpCi0JCXEtPmxvd19tYXJrID0gNDsKLQotCXEtPmhpZ2hfbWFyayA9IHEtPm5fd2luZG93IC8gODsKLQlpZiAocS0+aGlnaF9tYXJrIDwgMikKLQkJcS0+aGlnaF9tYXJrID0gMjsKLQotCXEtPndyaXRlX3B0ciA9IHEtPnJlYWRfcHRyID0gMDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDQ5NjVfdHhfcXVldWVfYWxsb2MgLSBBbGxvYyBkcml2ZXIgZGF0YSBhbmQgVEZEIENCIGZvciBvbmUgVHgvY21kIHF1ZXVlCi0gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV90eF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxLCB1MzIgaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0KLQkvKiBEcml2ZXIgcHJpdmF0ZSBkYXRhLCBvbmx5IGZvciBUeCAobm90IGNvbW1hbmQpIHF1ZXVlcywKLQkgKiBub3Qgc2hhcmVkIHdpdGggZGV2aWNlLiAqLwotCWlmIChpZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgewotCQl0eHEtPnR4YiA9IGttYWxsb2Moc2l6ZW9mKHR4cS0+dHhiWzBdKSAqCi0JCQkJICAgVEZEX1FVRVVFX1NJWkVfTUFYLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0eHEtPnR4YikgewotCQkJSVdMX0VSUk9SKCJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgotCQkJCSAgInN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9IGVsc2UKLQkJdHhxLT50eGIgPSBOVUxMOwotCi0JLyogQ2lyY3VsYXIgYnVmZmVyIG9mIHRyYW5zbWl0IGZyYW1lIGRlc2NyaXB0b3JzIChURkRzKSwKLQkgKiBzaGFyZWQgd2l0aCBkZXZpY2UgKi8KLQl0eHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LAotCQkJc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYLAotCQkJJnR4cS0+cS5kbWFfYWRkcik7Ci0KLQlpZiAoIXR4cS0+YmQpIHsKLQkJSVdMX0VSUk9SKCJwY2lfYWxsb2NfY29uc2lzdGVudCglemQpIGZhaWxlZFxuIiwKLQkJCSAgc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JdHhxLT5xLmlkID0gaWQ7Ci0KLQlyZXR1cm4gMDsKLQotIGVycm9yOgotCWlmICh0eHEtPnR4YikgewotCQlrZnJlZSh0eHEtPnR4Yik7Ci0JCXR4cS0+dHhiID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyoqCi0gKiBpd2w0OTY1X3R4X3F1ZXVlX2luaXQgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBvbmUgdHgvY21kIHF1ZXVlCi0gKi8KLWludCBpd2w0OTY1X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxLCBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCWludCBsZW47Ci0JaW50IHJjID0gMDsKLQotCS8qCi0JICogQWxsb2MgYnVmZmVyIGFycmF5IGZvciBjb21tYW5kcyAoVHggb3Igb3RoZXIgdHlwZXMgb2YgY29tbWFuZHMpLgotCSAqIEZvciB0aGUgY29tbWFuZCBxdWV1ZSAoIzQpLCBhbGxvY2F0ZSBjb21tYW5kIHNwYWNlICsgb25lIGJpZwotCSAqIGNvbW1hbmQgZm9yIHNjYW4sIHNpbmNlIHNjYW4gY29tbWFuZCBpcyB2ZXJ5IGh1Z2U7IHRoZSBzeXN0ZW0gd2lsbAotCSAqIG5vdCBoYXZlIHR3byBzY2FucyBhdCB0aGUgc2FtZSB0aW1lLCBzbyBvbmx5IG9uZSBpcyBuZWVkZWQuCi0JICogRm9yIG5vcm1hbCBUeCBxdWV1ZXMgKGFsbCBvdGhlciBxdWV1ZXMpLCBubyBzdXBlci1zaXplIGNvbW1hbmQKLQkgKiBzcGFjZSBpcyBuZWVkZWQuCi0JICovCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSAqIHNsb3RzX251bTsKLQlpZiAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKQotCQlsZW4gKz0gIElXTF9NQVhfU0NBTl9TSVpFOwotCXR4cS0+Y21kID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCBsZW4sICZ0eHEtPmRtYV9hZGRyX2NtZCk7Ci0JaWYgKCF0eHEtPmNtZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBBbGxvYyBkcml2ZXIgZGF0YSBhcnJheSBhbmQgVEZEIGNpcmN1bGFyIGJ1ZmZlciAqLwotCXJjID0gaXdsNDk2NV90eF9xdWV1ZV9hbGxvYyhwcml2LCB0eHEsIHR4cV9pZCk7Ci0JaWYgKHJjKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBsZW4sIHR4cS0+Y21kLCB0eHEtPmRtYV9hZGRyX2NtZCk7Ci0KLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXR4cS0+bmVlZF91cGRhdGUgPSAwOwotCi0JLyogVEZEX1FVRVVFX1NJWkVfTUFYIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQotCSAqIGl3bF9xdWV1ZV9pbmNfd3JhcCBhbmQgaXdsX3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCi0JQlVJTERfQlVHX09OKFRGRF9RVUVVRV9TSVpFX01BWCAmIChURkRfUVVFVUVfU0laRV9NQVggLSAxKSk7Ci0KLQkvKiBJbml0aWFsaXplIHF1ZXVlJ3MgaGlnaC9sb3ctd2F0ZXIgbWFya3MsIGFuZCBoZWFkL3RhaWwgaW5kZXhlcyAqLwotCWl3bDQ5NjVfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKLQotCS8qIFRlbGwgZGV2aWNlIHdoZXJlIHRvIGZpbmQgcXVldWUgKi8KLQlpd2w0OTY1X2h3X3R4X3F1ZXVlX2luaXQocHJpdiwgdHhxKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDQ5NjVfdHhfcXVldWVfZnJlZSAtIERlYWxsb2NhdGUgRE1BIHF1ZXVlLgotICogQHR4cTogVHJhbnNtaXQgcXVldWUgdG8gZGVhbGxvY2F0ZS4KLSAqCi0gKiBFbXB0eSBxdWV1ZSBieSByZW1vdmluZyBhbmQgZGVzdHJveWluZyBhbGwgQkQncy4KLSAqIEZyZWUgYWxsIGJ1ZmZlcnMuCi0gKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KLSAqLwotdm9pZCBpd2w0OTY1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxKQotewotCXN0cnVjdCBpd2w0OTY1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKLQlpbnQgbGVuOwotCi0JaWYgKHEtPm5fYmQgPT0gMCkKLQkJcmV0dXJuOwotCi0JLyogZmlyc3QsIGVtcHR5IGFsbCBCRCdzICovCi0JZm9yICg7IHEtPndyaXRlX3B0ciAhPSBxLT5yZWFkX3B0cjsKLQkgICAgIHEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkKLQkJaXdsNDk2NV9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKLQotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgKiBxLT5uX3dpbmRvdzsKLQlpZiAocS0+aWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCi0JCWxlbiArPSBJV0xfTUFYX1NDQU5fU0laRTsKLQotCS8qIERlLWFsbG9jIGFycmF5IG9mIGNvbW1hbmQvdHggYnVmZmVycyAqLwotCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBsZW4sIHR4cS0+Y21kLCB0eHEtPmRtYV9hZGRyX2NtZCk7Ci0KLQkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLwotCWlmICh0eHEtPnEubl9iZCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV90ZmRfZnJhbWUpICoKLQkJCQkgICAgdHhxLT5xLm5fYmQsIHR4cS0+YmQsIHR4cS0+cS5kbWFfYWRkcik7Ci0KLQkvKiBEZS1hbGxvYyBhcnJheSBvZiBwZXItVEZEIGRyaXZlciBkYXRhICovCi0JaWYgKHR4cS0+dHhiKSB7Ci0JCWtmcmVlKHR4cS0+dHhiKTsKLQkJdHhxLT50eGIgPSBOVUxMOwotCX0KLQotCS8qIDAtZmlsbCBxdWV1ZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwotCW1lbXNldCh0eHEsIDAsIHNpemVvZigqdHhxKSk7Ci19Ci0KLWNvbnN0IHU4IGl3bDQ5NjVfYnJvYWRjYXN0X2FkZHJbRVRIX0FMRU5dID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07Ci0KIC8qKioqKioqKioqKioqKiogU1RBVElPTiBUQUJMRSBNQU5BR0VNRU5UICoqKioKICAqIG1hYzgwMjExIHNob3VsZCBiZSBleGFtaW5lZCB0byBkZXRlcm1pbmUgaWYgc3RhX2luZm8gaXMgZHVwbGljYXRpbmcKICAqIHRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGhlcmUKQEAgLTM4MSwyMTMgKzk0LDExIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIDAgLyogdGVtcG9yYXJ5IGRpc2FibGUgdGlsbCB3ZSBhZGQgcmVhbCByZW1vdmUgc3RhdGlvbiAqLwotLyoqCi0gKiBpd2w0OTY1X3JlbW92ZV9zdGF0aW9uIC0gUmVtb3ZlIGRyaXZlcidzIGtub3dsZWRnZSBvZiBzdGF0aW9uLgotICoKLSAqIE5PVEU6ICBUaGlzIGRvZXMgbm90IHJlbW92ZSBzdGF0aW9uIGZyb20gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZS4KLSAqLwotc3RhdGljIHU4IGl3bDQ5NjVfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQotewotCWludCBpbmRleCA9IElXTF9JTlZBTElEX1NUQVRJT047Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGlzX2FwKQotCQlpbmRleCA9IElXTF9BUF9JRDsKLQllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKLQkJaW5kZXggPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwotCWVsc2UKLQkJZm9yIChpID0gSVdMX1NUQV9JRDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnM7IGkrKykKLQkJCWlmIChwcml2LT5zdGF0aW9uc1tpXS51c2VkICYmCi0JCQkgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpXS5zdGEuc3RhLmFkZHIsCi0JCQkJCQlhZGRyKSkgewotCQkJCWluZGV4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQotCWlmICh1bmxpa2VseShpbmRleCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAocHJpdi0+c3RhdGlvbnNbaW5kZXhdLnVzZWQpIHsKLQkJcHJpdi0+c3RhdGlvbnNbaW5kZXhdLnVzZWQgPSAwOwotCQlwcml2LT5udW1fc3RhdGlvbnMtLTsKLQl9Ci0KLQlCVUdfT04ocHJpdi0+bnVtX3N0YXRpb25zIDwgMCk7Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qKgotICogaXdsNDk2NV9hZGRfc3RhdGlvbl9mbGFncyAtIEFkZCBzdGF0aW9uIHRvIHRhYmxlcyBpbiBkcml2ZXIgYW5kIGRldmljZQotICovCi11OCBpd2w0OTY1X2FkZF9zdGF0aW9uX2ZsYWdzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsCi0JCQkJaW50IGlzX2FwLCB1OCBmbGFncywgdm9pZCAqaHRfZGF0YSkKLXsKLQlpbnQgaTsKLQlpbnQgaW5kZXggPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwotCXN0cnVjdCBpd2w0OTY1X3N0YXRpb25fZW50cnkgKnN0YXRpb247Ci0JdW5zaWduZWQgbG9uZyBmbGFnc19zcGluOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQlpZiAoaXNfYXApCi0JCWluZGV4ID0gSVdMX0FQX0lEOwotCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQotCQlpbmRleCA9IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7Ci0JZWxzZQotCQlmb3IgKGkgPSBJV0xfU1RBX0lEOyBpIDwgcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9uczsgaSsrKSB7Ci0JCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpXS5zdGEuc3RhLmFkZHIsCi0JCQkJCQlhZGRyKSkgewotCQkJCWluZGV4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKCFwcml2LT5zdGF0aW9uc1tpXS51c2VkICYmCi0JCQkgICAgaW5kZXggPT0gSVdMX0lOVkFMSURfU1RBVElPTikKLQkJCQlpbmRleCA9IGk7Ci0JCX0KLQotCi0JLyogVGhlc2UgdHdvIGNvbmRpdGlvbnMgaGF2ZSB0aGUgc2FtZSBvdXRjb21lLCBidXQga2VlcCB0aGVtIHNlcGFyYXRlCi0JICBzaW5jZSB0aGV5IGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzICovCi0JaWYgKHVubGlrZWx5KGluZGV4ID09IElXTF9JTlZBTElEX1NUQVRJT04pKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQkJcmV0dXJuIGluZGV4OwotCX0KLQotCWlmIChwcml2LT5zdGF0aW9uc1tpbmRleF0udXNlZCAmJgotCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zW2luZGV4XS5zdGEuc3RhLmFkZHIsIGFkZHIpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQkJcmV0dXJuIGluZGV4OwotCX0KLQotCi0JSVdMX0RFQlVHX0FTU09DKCJBZGQgU1RBIElEICVkOiAlc1xuIiwgaW5kZXgsIHByaW50X21hYyhtYWMsIGFkZHIpKTsKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW2luZGV4XTsKLQlzdGF0aW9uLT51c2VkID0gMTsKLQlwcml2LT5udW1fc3RhdGlvbnMrKzsKLQotCS8qIFNldCB1cCB0aGUgUkVQTFlfQUREX1NUQSBjb21tYW5kIHRvIHNlbmQgdG8gZGV2aWNlICovCi0JbWVtc2V0KCZzdGF0aW9uLT5zdGEsIDAsIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9hZGRzdGFfY21kKSk7Ci0JbWVtY3B5KHN0YXRpb24tPnN0YS5zdGEuYWRkciwgYWRkciwgRVRIX0FMRU4pOwotCXN0YXRpb24tPnN0YS5tb2RlID0gMDsKLQlzdGF0aW9uLT5zdGEuc3RhLnN0YV9pZCA9IGluZGV4OwotCXN0YXRpb24tPnN0YS5zdGF0aW9uX2ZsYWdzID0gMDsKLQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0JLyogQkNBU1Qgc3RhdGlvbiBhbmQgSUJTUyBzdGF0aW9ucyBkbyBub3Qgd29yayBpbiBIVCBtb2RlICovCi0JaWYgKGluZGV4ICE9IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgJiYKLQkgICAgcHJpdi0+aXdfbW9kZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKQotCQlpd2w0OTY1X3NldF9odF9hZGRfc3RhdGlvbihwcml2LCBpbmRleCwKLQkJCQkgKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKSBodF9kYXRhKTsKLSNlbmRpZiAvKkNPTkZJR19JV0w0OTY1X0hUKi8KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQotCS8qIEFkZCBzdGF0aW9uIHRvIGRldmljZSdzIHN0YXRpb24gdGFibGUgKi8KLQlpd2w0OTY1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnN0YXRpb24tPnN0YSwgZmxhZ3MpOwotCXJldHVybiBpbmRleDsKLQotfQotCi0KLQotLyoqKioqKioqKioqKioqKiBIT1NUIENPTU1BTkQgUVVFVUUgRlVOQ1RJT05TICAgKioqKiovCi0KLS8qKgotICogaXdsNDk2NV9lbnF1ZXVlX2hjbWQgLSBlbnF1ZXVlIGEgdUNvZGUgY29tbWFuZAotICogQHByaXY6IGRldmljZSBwcml2YXRlIGRhdGEgcG9pbnQKLSAqIEBjbWQ6IGEgcG9pbnQgdG8gdGhlIHVjb2RlIGNvbW1hbmQgc3RydWN0dXJlCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgPCAwIHZhbHVlcyB0byBpbmRpY2F0ZSB0aGUgb3BlcmF0aW9uIGlzCi0gKiBmYWlsZWQuIE9uIHN1Y2Nlc3MsIGl0IHR1cm5zIHRoZSBpbmRleCAoPiAwKSBvZiBjb21tYW5kIGluIHRoZQotICogY29tbWFuZCBxdWV1ZS4KLSAqLwotaW50IGl3bDQ5NjVfZW5xdWV1ZV9oY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9ob3N0X2NtZCAqY21kKQotewotCXN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKLQlzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0Jc3RydWN0IGl3bDQ5NjVfdGZkX2ZyYW1lICp0ZmQ7Ci0JdTMyICpjb250cm9sX2ZsYWdzOwotCXN0cnVjdCBpd2xfY21kICpvdXRfY21kOwotCXUzMiBpZHg7Ci0JdTE2IGZpeF9zaXplID0gKHUxNikoY21kLT5sZW4gKyBzaXplb2Yob3V0X2NtZC0+aGRyKSk7Ci0JZG1hX2FkZHJfdCBwaHlzX2FkZHI7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogSWYgYW55IG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZXMgZW5kIHVwIGJlaW5nIGxhcmdlciB0aGFuCi0JICogdGhlIFRGRF9NQVhfUEFZTE9BRF9TSVpFLCBhbmQgaXQgc2VudCBhcyBhICdzbWFsbCcgY29tbWFuZCB0aGVuCi0JICogd2Ugd2lsbCBuZWVkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBURkQgZW50cmllcyAqLwotCUJVR19PTigoZml4X3NpemUgPiBURkRfTUFYX1BBWUxPQURfU0laRSkgJiYKLQkgICAgICAgIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7Ci0KLQlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSU5GTygiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKGl3bDQ5NjVfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKLQkJSVdMX0VSUk9SKCJObyBzcGFjZSBmb3IgVHhcbiIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7Ci0KLQl0ZmQgPSAmdHhxLT5iZFtxLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KLQljb250cm9sX2ZsYWdzID0gKHUzMiAqKSB0ZmQ7Ci0KLQlpZHggPSBnZXRfY21kX2luZGV4KHEsIHEtPndyaXRlX3B0ciwgY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSk7Ci0Jb3V0X2NtZCA9ICZ0eHEtPmNtZFtpZHhdOwotCi0Jb3V0X2NtZC0+aGRyLmNtZCA9IGNtZC0+aWQ7Ci0JbWVtY3B5KCZvdXRfY21kLT5tZXRhLCAmY21kLT5tZXRhLCBzaXplb2YoY21kLT5tZXRhKSk7Ci0JbWVtY3B5KCZvdXRfY21kLT5jbWQucGF5bG9hZCwgY21kLT5kYXRhLCBjbWQtPmxlbik7Ci0KLQkvKiBBdCB0aGlzIHBvaW50LCB0aGUgb3V0X2NtZCBub3cgaGFzIGFsbCBvZiB0aGUgaW5jb21pbmcgY21kCi0JICogaW5mb3JtYXRpb24gKi8KLQotCW91dF9jbWQtPmhkci5mbGFncyA9IDA7Ci0Jb3V0X2NtZC0+aGRyLnNlcXVlbmNlID0gY3B1X3RvX2xlMTYoUVVFVUVfVE9fU0VRKElXTF9DTURfUVVFVUVfTlVNKSB8Ci0JCQlJTkRFWF9UT19TRVEocS0+d3JpdGVfcHRyKSk7Ci0JaWYgKG91dF9jbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKQotCQlvdXRfY21kLT5oZHIuc2VxdWVuY2UgfD0gY3B1X3RvX2xlMTYoU0VRX0hVR0VfRlJBTUUpOwotCi0JcGh5c19hZGRyID0gdHhxLT5kbWFfYWRkcl9jbWQgKyBzaXplb2YodHhxLT5jbWRbMF0pICogaWR4ICsKLQkJCW9mZnNldG9mKHN0cnVjdCBpd2xfY21kLCBoZHIpOwotCWl3bDQ5NjVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBmaXhfc2l6ZSk7Ci0KLQlJV0xfREVCVUdfSEMoIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKLQkJICAgICAiJWQgYnl0ZXMgYXQgJWRbJWRdOiVkXG4iLAotCQkgICAgIGdldF9jbWRfc3RyaW5nKG91dF9jbWQtPmhkci5jbWQpLAotCQkgICAgIG91dF9jbWQtPmhkci5jbWQsIGxlMTZfdG9fY3B1KG91dF9jbWQtPmhkci5zZXF1ZW5jZSksCi0JCSAgICAgZml4X3NpemUsIHEtPndyaXRlX3B0ciwgaWR4LCBJV0xfQ01EX1FVRVVFX05VTSk7Ci0KLQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKLQotCS8qIFNldCB1cCBlbnRyeSBpbiBxdWV1ZSdzIGJ5dGUgY291bnQgY2lyY3VsYXIgYnVmZmVyICovCi0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX3VwZGF0ZV9ieXRlX2NudF90YmwocHJpdiwgdHhxLCAwKTsKLQotCS8qIEluY3JlbWVudCBhbmQgdXBkYXRlIHF1ZXVlJ3Mgd3JpdGUgaW5kZXggKi8KLQlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlyZXQgPSBpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQgPyByZXQgOiBpZHg7Ci19CiAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfc2V0X3J4b25faHdjcnlwdG8oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgaHdfZGVjcnlwdCkKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247CisJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247CiAKIAlpZiAoaHdfZGVjcnlwdCkKIAkJcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0s7CkBAIC01OTcsNDUgKzEwOCwxMyBAQAogfQogCiAvKioKLSAqIGl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbiAtIGFkZCBzdGF0aW9uIGludG8gc3RhdGlvbiB0YWJsZS4KLSAqCi0gKiB0aGVyZSBpcyBvbmx5IG9uZSBBUCBzdGF0aW9uIHdpdGggaWQ9IElXTF9BUF9JRAotICogTk9URTogbXV0ZXggbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZm5jdGlvbgotICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJY29uc3QgdTggKmFkZHIsIGludCBpc19hcCkKLXsKLQl1OCBzdGFfaWQ7Ci0KLQkvKiBBZGQgc3RhdGlvbiB0byBkZXZpY2UncyBzdGF0aW9uIHRhYmxlICovCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmcHJpdi0+aHctPmNvbmY7Ci0Jc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpjdXJfaHRfY29uZmlnID0gJmNvbmYtPmh0X2NvbmY7Ci0KLQlpZiAoKGlzX2FwKSAmJgotCSAgICAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREUpICYmCi0JICAgIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkpCi0JCXN0YV9pZCA9IGl3bDQ5NjVfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgYWRkciwgaXNfYXAsCi0JCQkJCQkgICAwLCBjdXJfaHRfY29uZmlnKTsKLQllbHNlCi0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KLQkJc3RhX2lkID0gaXdsNDk2NV9hZGRfc3RhdGlvbl9mbGFncyhwcml2LCBhZGRyLCBpc19hcCwKLQkJCQkJCSAgIDAsIE5VTEwpOwotCi0JLyogU2V0IHVwIGRlZmF1bHQgcmF0ZSBzY2FsaW5nIHRhYmxlIGluIGRldmljZSdzIHN0YXRpb24gdGFibGUgKi8KLQlpd2w0OTY1X2FkZF9zdGF0aW9uKHByaXYsIGFkZHIsIGlzX2FwKTsKLQotCXJldHVybiBzdGFfaWQ7Ci19Ci0KLS8qKgogICogaXdsNDk2NV9jaGVja19yeG9uX2NtZCAtIHZhbGlkYXRlIFJYT04gc3RydWN0dXJlIGlzIHZhbGlkCiAgKgogICogTk9URTogIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgY2FuIGV2ZW50dWFsbHkKICAqIGJlICNpZmRlZidkIG91dCBvbmNlIHRoZSBkcml2ZXIgaXMgc3RhYmxlIGFuZCBmb2xrcyBhcmVuJ3QgYWN0aXZlbHkKICAqIG1ha2luZyBjaGFuZ2VzCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqcnhvbikKK3N0YXRpYyBpbnQgaXdsNDk2NV9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uKQogewogCWludCBlcnJvciA9IDA7CiAJaW50IGNvdW50ZXIgPSAxOwpAQCAtNzEzLDcgKzE5Miw3IEBACiB7CiAKIAkvKiBUaGVzZSBpdGVtcyBhcmUgb25seSBzZXR0YWJsZSBmcm9tIHRoZSBmdWxsIFJYT04gY29tbWFuZCAqLwotCWlmICghKHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykgfHwKKwlpZiAoIShpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgfHwKIAkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyLAogCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpIHx8CiAJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLApAQCAtNzYwLDE4ICsyMzksMjMgQEAKIHN0YXRpYyBpbnQgaXdsNDk2NV9jb21taXRfcnhvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogY2FzdCBhd2F5IHRoZSBjb25zdCBmb3IgYWN0aXZlX3J4b24gaW4gdGhpcyBmdW5jdGlvbiAqLwotCXN0cnVjdCBpd2w0OTY1X3J4b25fY21kICphY3RpdmVfcnhvbiA9ICh2b2lkICopJnByaXYtPmFjdGl2ZV9yeG9uOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKmFjdGl2ZV9yeG9uID0gKHZvaWQgKikmcHJpdi0+YWN0aXZlX3J4b247CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmV0OworCWJvb2wgbmV3X2Fzc29jID0KKwkJISEocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSyk7CiAKIAlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogYWx3YXlzIGdldCB0aW1lc3RhbXAgd2l0aCBSeCBmcmFtZSAqLwogCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19UU0YySE9TVF9NU0s7CisJLyogYWxsb3cgQ1RTLXRvLXNlbGYgaWYgcG9zc2libGUuIHRoaXMgaXMgcmVsZXZhbnQgb25seSBmb3IKKwkgKiA1MDAwLCBidXQgd2lsbCBub3QgZGFtYWdlIDQ5NjUgKi8KKwlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0VMRl9DVFNfRU47CiAKLQlyYyA9IGl3bDQ5NjVfY2hlY2tfcnhvbl9jbWQoJnByaXYtPnN0YWdpbmdfcnhvbik7Ci0JaWYgKHJjKSB7CisJcmV0ID0gaXdsNDk2NV9jaGVja19yeG9uX2NtZCgmcHJpdi0+c3RhZ2luZ19yeG9uKTsKKwlpZiAocmV0KSB7CiAJCUlXTF9FUlJPUigiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uICBOb3QgY29tbWl0dGluZy5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03ODAsNDkgKzI2NCwzNyBAQAogCSAqIGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgd2hpY2ggaXMgdXNlZCB0byByZWNvbmZpZ3VyZSBmaWx0ZXIKIAkgKiBhbmQgb3RoZXIgZmxhZ3MgZm9yIHRoZSBjdXJyZW50IHJhZGlvIGNvbmZpZ3VyYXRpb24uICovCiAJaWYgKCFpd2w0OTY1X2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgewotCQlyYyA9IGl3bF9zZW5kX3J4b25fYXNzb2MocHJpdik7Ci0JCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIFJYT05fQVNTT0MgIgotCQkJCSAgImNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKLQkJCXJldHVybiByYzsKKwkJcmV0ID0gaXdsX3NlbmRfcnhvbl9hc3NvYyhwcml2KTsKKwkJaWYgKHJldCkgeworCQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIFJYT05fQVNTT0MgKCVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAogCQltZW1jcHkoYWN0aXZlX3J4b24sICZwcml2LT5zdGFnaW5nX3J4b24sIHNpemVvZigqYWN0aXZlX3J4b24pKTsKLQogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBzdGF0aW9uIHRhYmxlIHdpbGwgYmUgY2xlYXJlZCAqLwogCXByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQgPSAwOwogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfU0VOU0lUSVZJVFkKLQlwcml2LT5zZW5zaXRpdml0eV9kYXRhLnN0YXRlID0gSVdMX1NFTlNfQ0FMSUJfTkVFRF9SRUlOSVQ7Ci0JaWYgKCFwcml2LT5lcnJvcl9yZWNvdmVyaW5nKQotCQlwcml2LT5zdGFydF9jYWxpYiA9IDA7Ci0KLQlpd2w0OTY1X2luaXRfc2Vuc2l0aXZpdHkocHJpdiwgQ01EX0FTWU5DLCAxKTsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9TRU5TSVRJVklUWSAqLwotCiAJLyogSWYgd2UgYXJlIGN1cnJlbnRseSBhc3NvY2lhdGVkIGFuZCB0aGUgbmV3IGNvbmZpZyByZXF1aXJlcwogCSAqIGFuIFJYT05fQVNTT0MgYW5kIHRoZSBuZXcgY29uZmlnIHdhbnRzIHRoZSBhc3NvY2lhdGVkIG1hc2sgZW5hYmxlZCwKIAkgKiB3ZSBtdXN0IGNsZWFyIHRoZSBhc3NvY2lhdGVkIGZyb20gdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uCiAJICogYmVmb3JlIHdlIGFwcGx5IHRoZSBuZXcgY29uZmlnICovCi0JaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmCi0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkgeworCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBuZXdfYXNzb2MpIHsKIAkJSVdMX0RFQlVHX0lORk8oIlRvZ2dsaW5nIGFzc29jaWF0ZWQgYml0IG9uIGN1cnJlbnQgUlhPTlxuIik7CiAJCWFjdGl2ZV9yeG9uLT5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAotCQlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKLQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQpLAorCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl9jbWQpLAogCQkJCSAgICAgICZwcml2LT5hY3RpdmVfcnhvbik7CiAKIAkJLyogSWYgdGhlIG1hc2sgY2xlYXJpbmcgZmFpbGVkIHRoZW4gd2Ugc2V0CiAJCSAqIGFjdGl2ZV9yeG9uIGJhY2sgdG8gd2hhdCBpdCB3YXMgcHJldmlvdXNseSAqLwotCQlpZiAocmMpIHsKKwkJaWYgKHJldCkgewogCQkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7Ci0JCQlJV0xfRVJST1IoIkVycm9yIGNsZWFyaW5nIEFTU09DX01TSyBvbiBjdXJyZW50ICIKLQkJCQkgICJjb25maWd1cmF0aW9uICglZCkuXG4iLCByYyk7Ci0JCQlyZXR1cm4gcmM7CisJCQlJV0xfRVJST1IoIkVycm9yIGNsZWFyaW5nIEFTU09DX01TSyAoJWQpXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtODMwLDY1ICszMDIsODcgQEAKIAkJICAgICAgICIqIHdpdGglcyBSWE9OX0ZJTFRFUl9BU1NPQ19NU0tcbiIKIAkJICAgICAgICIqIGNoYW5uZWwgPSAlZFxuIgogCQkgICAgICAgIiogYnNzaWQgPSAlc1xuIiwKLQkJICAgICAgICgocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmCi0JCQkgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSA/ICIiIDogIm91dCIpLAorCQkgICAgICAgKG5ld19hc3NvYyA/ICIiIDogIm91dCIpLAogCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpLAogCQkgICAgICAgcHJpbnRfbWFjKG1hYywgcHJpdi0+c3RhZ2luZ19yeG9uLmJzc2lkX2FkZHIpKTsKIAotCWl3bDQ5NjVfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgIXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+c3dfY3J5cHRvKTsKLQkvKiBBcHBseSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8KLQlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCksICZwcml2LT5zdGFnaW5nX3J4b24pOwotCWlmIChyYykgewotCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgbmV3IGNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKLQkJcmV0dXJuIHJjOworCWl3bDQ5NjVfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgIXByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8pOworCisJLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uCisJICogUlhPTiB1bmFzc29jIGNsZWFycyB0aGUgc3RhdGlvbiB0YWJsZSBpbiB1Q29kZSwgc2VuZCBpdCBiZWZvcmUKKwkgKiB3ZSBhZGQgdGhlIGJjYXN0IHN0YXRpb24uIElmIGFzc29jIGJpdCBpcyBzZXQsIHdlIHdpbGwgc2VuZCBSWE9OCisJICogYWZ0ZXIgaGF2aW5nIGFkZGVkIHRoZSBiY2FzdCBhbmQgYnNzaWQgc3RhdGlvbi4KKwkgKi8KKwlpZiAoIW5ld19hc3NvYykgeworCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCksICZwcml2LT5zdGFnaW5nX3J4b24pOworCQlpZiAocmV0KSB7CisJCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CiAJfQogCi0JaXdsY29yZV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKKwlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9TRU5TSVRJVklUWQogCWlmICghcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZykKIAkJcHJpdi0+c3RhcnRfY2FsaWIgPSAwOwogCi0JcHJpdi0+c2Vuc2l0aXZpdHlfZGF0YS5zdGF0ZSA9IElXTF9TRU5TX0NBTElCX05FRURfUkVJTklUOwotCWl3bDQ5NjVfaW5pdF9zZW5zaXRpdml0eShwcml2LCBDTURfQVNZTkMsIDEpOwotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X1NFTlNJVElWSVRZICovCi0KLQltZW1jcHkoYWN0aXZlX3J4b24sICZwcml2LT5zdGFnaW5nX3J4b24sIHNpemVvZigqYWN0aXZlX3J4b24pKTsKLQotCS8qIElmIHdlIGlzc3VlIGEgbmV3IFJYT04gY29tbWFuZCB3aGljaCByZXF1aXJlZCBhIHR1bmUgdGhlbiB3ZSBtdXN0Ci0JICogc2VuZCBhIG5ldyBUWFBPV0VSIGNvbW1hbmQgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBUeCBhbnkgZnJhbWVzICovCi0JcmMgPSBpd2w0OTY1X2h3X3JlZ19zZW5kX3R4cG93ZXIocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBUeCBwb3dlciAoJWQpLlxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCiAJLyogQWRkIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBzbyB3ZSBjYW4gc2VuZCBicm9hZGNhc3QgZnJhbWVzICovCi0JaWYgKGl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbihwcml2LCBpd2w0OTY1X2Jyb2FkY2FzdF9hZGRyLCAwKSA9PQotCSAgICBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CisJaWYgKGl3bF9yeG9uX2FkZF9zdGF0aW9uKHByaXYsIGl3bF9iY2FzdF9hZGRyLCAwKSA9PQorCQkJCQkJSVdMX0lOVkFMSURfU1RBVElPTikgewogCQlJV0xfRVJST1IoIkVycm9yIGFkZGluZyBCUk9BRENBU1QgYWRkcmVzcyBmb3IgdHJhbnNtaXQuXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogSWYgd2UgaGF2ZSBzZXQgdGhlIEFTU09DX01TSyBhbmQgd2UgYXJlIGluIEJTUyBtb2RlIHRoZW4KIAkgKiBhZGQgdGhlIElXTF9BUF9JRCB0byB0aGUgc3RhdGlvbiByYXRlIHRhYmxlICovCi0JaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmCi0JICAgIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkpIHsKLQkJaWYgKGl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbihwcml2LCBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyLCAxKQotCQkgICAgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJSVdMX0VSUk9SKCJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgdHJhbnNtaXQuXG4iKTsKLQkJCXJldHVybiAtRUlPOworCWlmIChuZXdfYXNzb2MpIHsKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKSB7CisJCQlyZXQgPSBpd2xfcnhvbl9hZGRfc3RhdGlvbihwcml2LAorCQkJCQkgICBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyLCAxKTsKKwkJCWlmIChyZXQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgeworCQkJCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIFRYLlxuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlwcml2LT5hc3NvY19zdGF0aW9uX2FkZGVkID0gMTsKKwkJCWlmIChwcml2LT5kZWZhdWx0X3dlcF9rZXkgJiYKKwkJCSAgICBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChwcml2LCAwKSkKKwkJCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBzZW5kIFdFUCBzdGF0aWMga2V5LlxuIik7CiAJCX0KLQkJcHJpdi0+YXNzb2Nfc3RhdGlvbl9hZGRlZCA9IDE7Ci0JCWlmIChwcml2LT5kZWZhdWx0X3dlcF9rZXkgJiYKLQkJICAgIGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDApKQotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgc2VuZCBXRVAgc3RhdGljIGtleS5cbiIpOworCisJCS8qIEFwcGx5IHRoZSBuZXcgY29uZmlndXJhdGlvbgorCQkgKiBSWE9OIGFzc29jIGRvZXNuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGUgaW4gdUNvZGUsCisJCSAqLworCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCksICZwcml2LT5zdGFnaW5nX3J4b24pOworCQlpZiAocmV0KSB7CisJCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CisJfQorCisJaXdsX2luaXRfc2Vuc2l0aXZpdHkocHJpdik7CisKKwkvKiBJZiB3ZSBpc3N1ZSBhIG5ldyBSWE9OIGNvbW1hbmQgd2hpY2ggcmVxdWlyZWQgYSB0dW5lIHRoZW4gd2UgbXVzdAorCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLworCXJldCA9IGl3bF9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIHRydWUpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nIFRYIHBvd2VyICglZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgaXdsNDk2NV91cGRhdGVfY2hhaW5fZmxhZ3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCisJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOworCWl3bDQ5NjVfY29tbWl0X3J4b24ocHJpdik7Cit9CisKIHN0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDQ5NjVfYnRfY21kIGJ0X2NtZCA9IHsKQEAgLTkwMywxNTUgKzM5Nyw3IEBACiAJCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2J0X2NtZCksICZidF9jbWQpOwogfQogCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcmVzOwotCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9TQ0FOX0FCT1JUX0NNRCwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCi0JfTsKLQotCS8qIElmIHRoZXJlIGlzbid0IGEgc2NhbiBhY3RpdmVseSBnb2luZyBvbiBpbiB0aGUgaGFyZHdhcmUKLQkgKiB0aGVuIHdlIGFyZSBpbiBiZXR3ZWVuIHNjYW4gYmFuZHMgYW5kIG5vdCBhY3R1YWxseQotCSAqIGFjdGl2ZWx5IHNjYW5uaW5nLCBzbyBkb24ndCBzZW5kIHRoZSBhYm9ydCBjb21tYW5kICovCi0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmMgPSBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKLQlpZiAocmMpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXJlcyA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKLQlpZiAocmVzLT51LnN0YXR1cyAhPSBDQU5fQUJPUlRfU1RBVFVTKSB7Ci0JCS8qIFRoZSBzY2FuIGFib3J0IHdpbGwgcmV0dXJuIDEgZm9yIHN1Y2Nlc3Mgb3IKLQkJICogMiBmb3IgImZhaWx1cmUiLiAgQSBmYWlsdXJlIGNvbmRpdGlvbiBjYW4gYmUKLQkJICogZHVlIHRvIHNpbXBseSBub3QgYmVpbmcgaW4gYW4gYWN0aXZlIHNjYW4gd2hpY2gKLQkJICogY2FuIG9jY3VyIGlmIHdlIHNlbmQgdGhlIHNjYW4gYWJvcnQgYmVmb3JlIHdlCi0JCSAqIHRoZSBtaWNyb2NvZGUgaGFzIG5vdGlmaWVkIHVzIHRoYXQgYSBzY2FuIGlzCi0JCSAqIGNvbXBsZXRlZC4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIlNDQU5fQUJPUlQgcmV0dXJuZWQgJWQuXG4iLCByZXMtPnUuc3RhdHVzKTsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQl9Ci0KLQlkZXZfa2ZyZWVfc2tiX2FueShjbWQubWV0YS51LnNrYik7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsNDk2NV9jYXJkX3N0YXRlX3N5bmNfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsX2NtZCAqY21kLAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAxOwotfQotCi0vKgotICogQ0FSRF9TVEFURV9DTUQKLSAqCi0gKiBVc2U6IFNldHMgdGhlIGRldmljZSdzIGludGVybmFsIGNhcmQgc3RhdGUgdG8gZW5hYmxlLCBkaXNhYmxlLCBvciBoYWx0Ci0gKgotICogV2hlbiBpbiB0aGUgJ2VuYWJsZScgc3RhdGUgdGhlIGNhcmQgb3BlcmF0ZXMgYXMgbm9ybWFsLgotICogV2hlbiBpbiB0aGUgJ2Rpc2FibGUnIHN0YXRlLCB0aGUgY2FyZCBlbnRlcnMgaW50byBhIGxvdyBwb3dlciBtb2RlLgotICogV2hlbiBpbiB0aGUgJ2hhbHQnIHN0YXRlLCB0aGUgY2FyZCBpcyBzaHV0IGRvd24gYW5kIG11c3QgYmUgZnVsbHkKLSAqIHJlc3RhcnRlZCB0byBjb21lIGJhY2sgb24uCi0gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZmxhZ3MsIHU4IG1ldGFfZmxhZykKLXsKLQlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfQ0FSRF9TVEFURV9DTUQsCi0JCS5sZW4gPSBzaXplb2YodTMyKSwKLQkJLmRhdGEgPSAmZmxhZ3MsCi0JCS5tZXRhLmZsYWdzID0gbWV0YV9mbGFnLAotCX07Ci0KLQlpZiAobWV0YV9mbGFnICYgQ01EX0FTWU5DKQotCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsNDk2NV9jYXJkX3N0YXRlX3N5bmNfY2FsbGJhY2s7Ci0KLQlyZXR1cm4gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwotfQotCi1zdGF0aWMgaW50IGl3bDQ5NjVfYWRkX3N0YV9zeW5jX2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgIHN0cnVjdCBpd2xfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwotCi0JaWYgKCFza2IpIHsKLQkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiBSRVBMWV9BRERfU1RBLlxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXJlcyA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKilza2ItPmRhdGE7Ci0JaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCi0JCQkgIHJlcy0+aGRyLmZsYWdzKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0Jc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKLQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCS8qIFdlIGRpZG4ndCBjYWNoZSB0aGUgU0tCOyBsZXQgdGhlIGNhbGxlciBmcmVlIGl0ICovCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBpd2w0OTY1X3NlbmRfYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJIHN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7Ci0JCS5pZCA9IFJFUExZX0FERF9TVEEsCi0JCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfYWRkc3RhX2NtZCksCi0JCS5tZXRhLmZsYWdzID0gZmxhZ3MsCi0JCS5kYXRhID0gc3RhLAotCX07Ci0KLQlpZiAoZmxhZ3MgJiBDTURfQVNZTkMpCi0JCWNtZC5tZXRhLnUuY2FsbGJhY2sgPSBpd2w0OTY1X2FkZF9zdGFfc3luY19jYWxsYmFjazsKLQllbHNlCi0JCWNtZC5tZXRhLmZsYWdzIHw9IENNRF9XQU5UX1NLQjsKLQotCXJjID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwotCi0JaWYgKHJjIHx8IChmbGFncyAmIENNRF9BU1lOQykpCi0JCXJldHVybiByYzsKLQotCXJlcyA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKLQlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKLQkJCSAgcmVzLT5oZHIuZmxhZ3MpOwotCQlyYyA9IC1FSU87Ci0JfQotCi0JaWYgKHJjID09IDApIHsKLQkJc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKLQkJY2FzZSBBRERfU1RBX1NVQ0NFU1NfTVNLOgotCQkJSVdMX0RFQlVHX0lORk8oIlJFUExZX0FERF9TVEEgUEFTU0VEXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmMgPSAtRUlPOwotCQkJSVdMX1dBUk5JTkcoIlJFUExZX0FERF9TVEEgZmFpbGVkXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcHJpdi0+YWxsb2NfcnhiX3NrYi0tOwotCWRldl9rZnJlZV9za2JfYW55KGNtZC5tZXRhLnUuc2tiKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgaXdsNDk2NV9jbGVhcl9mcmVlX2ZyYW1lcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2xfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAKQEAgLTEwNjEsNyArNDA3LDcgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnByaXYtPmZyZWVfZnJhbWVzKSkgewogCQllbGVtZW50ID0gcHJpdi0+ZnJlZV9mcmFtZXMubmV4dDsKIAkJbGlzdF9kZWwoZWxlbWVudCk7Ci0JCWtmcmVlKGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bDQ5NjVfZnJhbWUsIGxpc3QpKTsKKwkJa2ZyZWUobGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsX2ZyYW1lLCBsaXN0KSk7CiAJCXByaXYtPmZyYW1lc19jb3VudC0tOwogCX0KIApAQCAtMTA3Miw5ICs0MTgsOSBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBpd2w0OTY1X2ZyYW1lICppd2w0OTY1X2dldF9mcmVlX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyBzdHJ1Y3QgaXdsX2ZyYW1lICppd2xfZ2V0X2ZyZWVfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2w0OTY1X2ZyYW1lICpmcmFtZTsKKwlzdHJ1Y3QgaXdsX2ZyYW1lICpmcmFtZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwogCWlmIChsaXN0X2VtcHR5KCZwcml2LT5mcmVlX2ZyYW1lcykpIHsKIAkJZnJhbWUgPSBremFsbG9jKHNpemVvZigqZnJhbWUpLCBHRlBfS0VSTkVMKTsKQEAgLTEwODksMTAgKzQzNSwxMCBAQAogCiAJZWxlbWVudCA9IHByaXYtPmZyZWVfZnJhbWVzLm5leHQ7CiAJbGlzdF9kZWwoZWxlbWVudCk7Ci0JcmV0dXJuIGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bDQ5NjVfZnJhbWUsIGxpc3QpOworCXJldHVybiBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2xfZnJhbWUsIGxpc3QpOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2ZyZWVfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV9mcmFtZSAqZnJhbWUpCitzdGF0aWMgdm9pZCBpd2xfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfZnJhbWUgKmZyYW1lKQogewogCW1lbXNldChmcmFtZSwgMCwgc2l6ZW9mKCpmcmFtZSkpOwogCWxpc3RfYWRkKCZmcmFtZS0+bGlzdCwgJnByaXYtPmZyZWVfZnJhbWVzKTsKQEAgLTExMTYsMjcgKzQ2MiwzOSBAQAogCXJldHVybiBwcml2LT5pYnNzX2JlYWNvbi0+bGVuOwogfQogCi1zdGF0aWMgdTggaXdsNDk2NV9yYXRlX2dldF9sb3dlc3RfcGxjcChpbnQgcmF0ZV9tYXNrKQorc3RhdGljIHU4IGl3bDQ5NjVfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXU4IGk7CisJaW50IGk7CisJaW50IHJhdGVfbWFzazsKIAorCS8qIFNldCByYXRlIG1hc2sqLworCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCisJCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgMHhGOworCWVsc2UKKwkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiAweEZGMDsKKworCS8qIEZpbmQgbG93ZXN0IHZhbGlkIHJhdGUgKi8KIAlmb3IgKGkgPSBJV0xfUkFURV8xTV9JTkRFWDsgaSAhPSBJV0xfUkFURV9JTlZBTElEOwotCSAgICAgaSA9IGl3bDQ5NjVfcmF0ZXNbaV0ubmV4dF9pZWVlKSB7CisJCQkJCWkgPSBpd2xfcmF0ZXNbaV0ubmV4dF9pZWVlKSB7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBpKSkKLQkJCXJldHVybiBpd2w0OTY1X3JhdGVzW2ldLnBsY3A7CisJCQlyZXR1cm4gaXdsX3JhdGVzW2ldLnBsY3A7CiAJfQogCi0JcmV0dXJuIElXTF9SQVRFX0lOVkFMSUQ7CisJLyogTm8gdmFsaWQgcmF0ZSB3YXMgZm91bmQuIEFzc2lnbiB0aGUgbG93ZXN0IG9uZSAqLworCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCisJCXJldHVybiBJV0xfUkFURV8xTV9QTENQOworCWVsc2UKKwkJcmV0dXJuIElXTF9SQVRFXzZNX1BMQ1A7CiB9CiAKIHN0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2w0OTY1X2ZyYW1lICpmcmFtZTsKKwlzdHJ1Y3QgaXdsX2ZyYW1lICpmcmFtZTsKIAl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsKIAlpbnQgcmM7CiAJdTggcmF0ZTsKIAotCWZyYW1lID0gaXdsNDk2NV9nZXRfZnJlZV9mcmFtZShwcml2KTsKKwlmcmFtZSA9IGl3bF9nZXRfZnJlZV9mcmFtZShwcml2KTsKIAogCWlmICghZnJhbWUpIHsKIAkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgpAQCAtMTE0NCwyMyArNTAyLDE0IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmICghKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykpIHsKLQkJcmF0ZSA9IGl3bDQ5NjVfcmF0ZV9nZXRfbG93ZXN0X3BsY3AocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkJCQkJMHhGRjApOwotCQlpZiAocmF0ZSA9PSBJV0xfSU5WQUxJRF9SQVRFKQotCQkJcmF0ZSA9IElXTF9SQVRFXzZNX1BMQ1A7Ci0JfSBlbHNlIHsKLQkJcmF0ZSA9IGl3bDQ5NjVfcmF0ZV9nZXRfbG93ZXN0X3BsY3AocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiAweEYpOwotCQlpZiAocmF0ZSA9PSBJV0xfSU5WQUxJRF9SQVRFKQotCQkJcmF0ZSA9IElXTF9SQVRFXzFNX1BMQ1A7Ci0JfQorCXJhdGUgPSBpd2w0OTY1X3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHByaXYpOwogCiAJZnJhbWVfc2l6ZSA9IGl3bDQ5NjVfaHdfZ2V0X2JlYWNvbl9jbWQocHJpdiwgZnJhbWUsIHJhdGUpOwogCiAJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1RYX0JFQUNPTiwgZnJhbWVfc2l6ZSwKIAkJCSAgICAgICZmcmFtZS0+dS5jbWRbMF0pOwogCi0JaXdsNDk2NV9mcmVlX2ZyYW1lKHByaXYsIGZyYW1lKTsKKwlpd2xfZnJlZV9mcmFtZShwcml2LCBmcmFtZSk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0xMTcxLDE4NCArNTIwLDY5IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgaXdsNDk2NV91bnNldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9odF9jb25mKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKIHsKLQlpZiAocHJpdi0+c2hhcmVkX3ZpcnQpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3NoYXJlZCksCi0JCQkJICAgIHByaXYtPnNoYXJlZF92aXJ0LAotCQkJCSAgICBwcml2LT5zaGFyZWRfcGh5cyk7Ci19CisJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9jb25mID0gYnNzX2NvbmYtPmh0X2NvbmY7CisJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyAqaHRfYnNzX2NvbmYgPSBic3NfY29uZi0+aHRfYnNzX2NvbmY7CisJc3RydWN0IGl3bF9odF9pbmZvICppd2xfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKIAotLyoqCi0gKiBpd2w0OTY1X3N1cHBvcnRlZF9yYXRlX3RvX2llIC0gZmlsbCBpbiB0aGUgc3VwcG9ydGVkIHJhdGUgaW4gSUUgZmllbGQKLSAqCi0gKiByZXR1cm4gOiBzZXQgdGhlIGJpdCBmb3IgZWFjaCBzdXBwb3J0ZWQgcmF0ZSBpbnNlcnQgaW4gaWUKLSAqLwotc3RhdGljIHUxNiBpd2w0OTY1X3N1cHBvcnRlZF9yYXRlX3RvX2llKHU4ICppZSwgdTE2IHN1cHBvcnRlZF9yYXRlLAotCQkJCSAgICB1MTYgYmFzaWNfcmF0ZSwgaW50ICpsZWZ0KQotewotCXUxNiByZXRfcmF0ZXMgPSAwLCBiaXQ7Ci0JaW50IGk7Ci0JdTggKmNudCA9IGllOwotCXU4ICpyYXRlcyA9IGllICsgMTsKKwlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyOiBcbiIpOwogCi0JZm9yIChiaXQgPSAxLCBpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyssIGJpdCA8PD0gMSkgewotCQlpZiAoYml0ICYgc3VwcG9ydGVkX3JhdGUpIHsKLQkJCXJldF9yYXRlcyB8PSBiaXQ7Ci0JCQlyYXRlc1sqY250XSA9IGl3bDQ5NjVfcmF0ZXNbaV0uaWVlZSB8Ci0JCQkJKChiaXQgJiBiYXNpY19yYXRlKSA/IDB4ODAgOiAweDAwKTsKLQkJCSgqY250KSsrOwotCQkJKCpsZWZ0KS0tOwotCQkJaWYgKCgqbGVmdCA8PSAwKSB8fAotCQkJICAgICgqY250ID49IElXTF9TVVBQT1JURURfUkFURVNfSUVfTEVOKSkKLQkJCQlicmVhazsKLQkJfQorCWl3bF9jb25mLT5pc19odCA9IGJzc19jb25mLT5hc3NvY19odDsKKworCWlmICghaXdsX2NvbmYtPmlzX2h0KQorCQlyZXR1cm47CisKKwlwcml2LT5wc19tb2RlID0gKHU4KSgoaHRfY29uZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9NSU1PX1BTKSA+PiAyKTsKKworCWlmIChodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCkKKwkJaXdsX2NvbmYtPnNnZiB8PSBIVF9TSE9SVF9HSV8yME1IWjsKKwlpZiAoaHRfY29uZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApCisJCWl3bF9jb25mLT5zZ2YgfD0gSFRfU0hPUlRfR0lfNDBNSFo7CisKKwlpd2xfY29uZi0+aXNfZ3JlZW5fZmllbGQgPSAhIShodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQpOworCWl3bF9jb25mLT5tYXhfYW1zZHVfc2l6ZSA9CisJCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVKTsKKworCWl3bF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9CisJCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIKTsKKwlpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0KKwkJaHRfYnNzX2NvbmYtPmJzc19jYXAgJiBJRUVFODAyMTFfSFRfSUVfQ0hBX1NFQ19PRkZTRVQ7CisJLyogSWYgbm8gYWJvdmUgb3IgYmVsb3cgY2hhbm5lbCBzdXBwbGllZCBkaXNhYmxlIEZBVCBjaGFubmVsICovCisJaWYgKGl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgIT0gSUVFRTgwMjExX0hUX0lFX0NIQV9TRUNfQUJPVkUgJiYKKwkgICAgaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCAhPSBJRUVFODAyMTFfSFRfSUVfQ0hBX1NFQ19CRUxPVykgeworCQlpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0gSUVFRTgwMjExX0hUX0lFX0NIQV9TRUNfTk9ORTsKKwkJaXdsX2NvbmYtPnN1cHBvcnRlZF9jaGFuX3dpZHRoID0gMDsKIAl9CiAKLQlyZXR1cm4gcmV0X3JhdGVzOwotfQorCWl3bF9jb25mLT50eF9taW1vX3BzX21vZGUgPQorCQkodTgpKChodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX01JTU9fUFMpID4+IDIpOworCW1lbWNweShpd2xfY29uZi0+c3VwcF9tY3Nfc2V0LCBodF9jb25mLT5zdXBwX21jc19zZXQsIDE2KTsKIAotLyoqCi0gKiBpd2w0OTY1X2ZpbGxfcHJvYmVfcmVxIC0gZmlsbCBpbiBhbGwgcmVxdWlyZWQgZmllbGRzIGFuZCBJRSBmb3IgcHJvYmUgcmVxdWVzdAotICovCi1zdGF0aWMgdTE2IGl3bDQ5NjVfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKLQkJCQkgIGludCBsZWZ0LCBpbnQgaXNfZGlyZWN0KQotewotCWludCBsZW4gPSAwOwotCXU4ICpwb3MgPSBOVUxMOwotCXUxNiBhY3RpdmVfcmF0ZXMsIHJldF9yYXRlcywgY2NrX3JhdGVzLCBhY3RpdmVfcmF0ZV9iYXNpYzsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0KLQkJCQkJCWl3bDQ5NjVfZ2V0X2h3X21vZGUocHJpdiwgYmFuZCk7Ci0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KKwlpd2xfY29uZi0+Y29udHJvbF9jaGFubmVsID0gaHRfYnNzX2NvbmYtPnByaW1hcnlfY2hhbm5lbDsKKwlpd2xfY29uZi0+dHhfY2hhbl93aWR0aCA9CisJCSEhKGh0X2Jzc19jb25mLT5ic3NfY2FwICYgSUVFRTgwMjExX0hUX0lFX0NIQV9XSURUSCk7CisJaXdsX2NvbmYtPmh0X3Byb3RlY3Rpb24gPQorCQlodF9ic3NfY29uZi0+YnNzX29wX21vZGUgJiBJRUVFODAyMTFfSFRfSUVfSFRfUFJPVEVDVElPTjsKKwlpd2xfY29uZi0+bm9uX0dGX1NUQV9wcmVzZW50ID0KKwkJISEoaHRfYnNzX2NvbmYtPmJzc19vcF9tb2RlICYgSUVFRTgwMjExX0hUX0lFX05PTl9HRl9TVEFfUFJTTlQpOwogCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgdGhlIHByb2JlIHJlcXVlc3QsCi0JICogdHdvIG1hbmRhdG9yeSBJRXMgYW5kIHRoZSBkYXRhICovCi0JbGVmdCAtPSAyNDsKLQlpZiAobGVmdCA8IDApCi0JCXJldHVybiAwOwotCWxlbiArPSAyNDsKLQotCWZyYW1lLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7Ci0JbWVtY3B5KGZyYW1lLT5kYSwgaXdsNDk2NV9icm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShmcmFtZS0+c2EsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KGZyYW1lLT5ic3NpZCwgaXdsNDk2NV9icm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOwotCWZyYW1lLT5zZXFfY3RybCA9IDA7Ci0KLQkvKiBmaWxsIGluIG91ciBpbmRpcmVjdCBTU0lEIElFICovCi0JLyogLi4ubmV4dCBJRS4uLiAqLwotCi0JbGVmdCAtPSAyOwotCWlmIChsZWZ0IDwgMCkKLQkJcmV0dXJuIDA7Ci0JbGVuICs9IDI7Ci0JcG9zID0gJihmcmFtZS0+dS5wcm9iZV9yZXEudmFyaWFibGVbMF0pOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gMDsKLQotCS8qIGZpbGwgaW4gb3VyIGRpcmVjdCBTU0lEIElFLi4uICovCi0JaWYgKGlzX2RpcmVjdCkgewotCQkvKiAuLi5uZXh0IElFLi4uICovCi0JCWxlZnQgLT0gMiArIHByaXYtPmVzc2lkX2xlbjsKLQkJaWYgKGxlZnQgPCAwKQotCQkJcmV0dXJuIDA7Ci0JCS8qIC4uLiBmaWxsIGl0IGluLi4uICovCi0JCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JCSpwb3MrKyA9IHByaXYtPmVzc2lkX2xlbjsKLQkJbWVtY3B5KHBvcywgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX2xlbik7Ci0JCXBvcyArPSBwcml2LT5lc3NpZF9sZW47Ci0JCWxlbiArPSAyICsgcHJpdi0+ZXNzaWRfbGVuOwotCX0KLQotCS8qIGZpbGwgaW4gc3VwcG9ydGVkIHJhdGUgKi8KLQkvKiAuLi5uZXh0IElFLi4uICovCi0JbGVmdCAtPSAyOwotCWlmIChsZWZ0IDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiAuLi4gZmlsbCBpdCBpbi4uLiAqLwotCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0JKnBvcyA9IDA7Ci0KLQkvKiBleGNsdWRlIDYwTSByYXRlICovCi0JYWN0aXZlX3JhdGVzID0gcHJpdi0+cmF0ZXNfbWFzazsKLQlhY3RpdmVfcmF0ZXMgJj0gfklXTF9SQVRFXzYwTV9NQVNLOwotCi0JYWN0aXZlX3JhdGVfYmFzaWMgPSBhY3RpdmVfcmF0ZXMgJiBJV0xfQkFTSUNfUkFURVNfTUFTSzsKLQotCWNja19yYXRlcyA9IElXTF9DQ0tfUkFURVNfTUFTSyAmIGFjdGl2ZV9yYXRlczsKLQlyZXRfcmF0ZXMgPSBpd2w0OTY1X3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgY2NrX3JhdGVzLAotCQkJYWN0aXZlX3JhdGVfYmFzaWMsICZsZWZ0KTsKLQlhY3RpdmVfcmF0ZXMgJj0gfnJldF9yYXRlczsKLQotCXJldF9yYXRlcyA9IGl3bDQ5NjVfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBhY3RpdmVfcmF0ZXMsCi0JCQkJIGFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7Ci0JYWN0aXZlX3JhdGVzICY9IH5yZXRfcmF0ZXM7Ci0KLQlsZW4gKz0gMiArICpwb3M7Ci0JcG9zICs9ICgqcG9zKSArIDE7Ci0JaWYgKGFjdGl2ZV9yYXRlcyA9PSAwKQotCQlnb3RvIGZpbGxfZW5kOwotCi0JLyogZmlsbCBpbiBzdXBwb3J0ZWQgZXh0ZW5kZWQgcmF0ZSAqLwotCS8qIC4uLm5leHQgSUUuLi4gKi8KLQlsZWZ0IC09IDI7Ci0JaWYgKGxlZnQgPCAwKQotCQlyZXR1cm4gMDsKLQkvKiAuLi4gZmlsbCBpdCBpbi4uLiAqLwotCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOwotCSpwb3MgPSAwOwotCWl3bDQ5NjVfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBhY3RpdmVfcmF0ZXMsCi0JCQkJIGFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7Ci0JaWYgKCpwb3MgPiAwKQotCQlsZW4gKz0gMiArICpwb3M7Ci0KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCWlmIChzYmFuZCAmJiBzYmFuZC0+aHRfaW5mby5odF9zdXBwb3J0ZWQpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcDsKLQkJcG9zICs9ICgqcG9zKSArIDE7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk7Ci0JCSpwb3MrKyA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCk7Ci0JCWh0X2NhcCA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKXBvczsKLQkJaHRfY2FwLT5jYXBfaW5mbyA9IGNwdV90b19sZTE2KHNiYW5kLT5odF9pbmZvLmNhcCk7Ci0JCW1lbWNweShodF9jYXAtPnN1cHBfbWNzX3NldCwgc2JhbmQtPmh0X2luZm8uc3VwcF9tY3Nfc2V0LCAxNik7Ci0JCWh0X2NhcC0+YW1wZHVfcGFyYW1zX2luZm8gPShzYmFuZC0+aHRfaW5mby5hbXBkdV9mYWN0b3IgJgotCQkJCQkgICAgSUVFRTgwMjExX0hUX0NBUF9BTVBEVV9GQUNUT1IpIHwKLQkJCQkJICAgICgoc2JhbmQtPmh0X2luZm8uYW1wZHVfZGVuc2l0eSA8PCAyKSAmCi0JCQkJCSAgICBJRUVFODAyMTFfSFRfQ0FQX0FNUERVX0RFTlNJVFkpOwotCQlsZW4gKz0gMiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCk7Ci0JfQotI2VuZGlmICAvKkNPTkZJR19JV0w0OTY1X0hUICovCi0KLSBmaWxsX2VuZDoKLQlyZXR1cm4gKHUxNilsZW47CisJSVdMX0RFQlVHX01BQzgwMjExKCJjb250cm9sIGNoYW5uZWwgJWRcbiIsIGl3bF9jb25mLT5jb250cm9sX2NoYW5uZWwpOworCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwogfQogCiAvKgogICogUW9TICBzdXBwb3J0CiAqLwotc3RhdGljIGludCBpd2w0OTY1X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGl3bDQ5NjVfcW9zcGFyYW1fY21kICpxb3MpCitzdGF0aWMgdm9pZCBpd2xfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZm9yY2UpCiB7Ci0KLQlyZXR1cm4gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9RT1NfUEFSQU0sCi0JCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3Fvc3BhcmFtX2NtZCksIHFvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZm9yY2UpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwogCiAJaWYgKCFwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgPSAwOwogCiAJaWYgKHByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC5xdWV1ZV9yZXF1ZXN0ICYmCkBAIC0xMzU5LDMyNSArNTkzLDIwIEBACiAJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KIAkJCVFPU19QQVJBTV9GTEdfVVBEQVRFX0VEQ0FfTVNLOwogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIAlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQpCiAJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0gUU9TX1BBUkFNX0ZMR19UR05fTVNLOwotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUICovCi0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoZm9yY2UgfHwgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJSVdMX0RFQlVHX1FPUygic2VuZCBRb1MgY21kIHdpdGggUW9zIGFjdGl2ZT0lZCBGTEFHUz0weCVYXG4iLAogCQkJCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUsCiAJCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyk7CiAKLQkJaXdsNDk2NV9zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChwcml2LAotCQkJCSYocHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtKSk7CisJCWl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfUU9TX1BBUkFNLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9xb3NwYXJhbV9jbWQpLAorCQkJCSAgICAgICAmcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLCBOVUxMKTsKIAl9CiB9CiAKLS8qCi0gKiBQb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIhKSBmdW5jdGlvbnMKLSAqLwotI2RlZmluZSBNU0VDX1RPX1VTRUMgMTAyNAotCi0jZGVmaW5lIE5PU0xQIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksIDAsIDAKLSNkZWZpbmUgU0xQIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLLCAwLCAwCi0jZGVmaW5lIFNMUF9USU1FT1VUKFQpIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKFQpICogTVNFQ19UT19VU0VDKQotI2RlZmluZSBTTFBfVkVDKFgwLCBYMSwgWDIsIFgzLCBYNCkge19fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDApLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgxKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMiksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDMpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFg0KX0KLQotCi0vKiBkZWZhdWx0IHBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlcikgdGFibGUgdmFsdWVzICovCi0vKiBmb3IgdGltICAwLTEwICovCi1zdGF0aWMgc3RydWN0IGl3bDQ5NjVfcG93ZXJfdmVjX2VudHJ5IHJhbmdlXzBbSVdMX1BPV0VSX0FDXSA9IHsKLQl7e05PU0xQLCBTTFBfVElNRU9VVCgwKSwgU0xQX1RJTUVPVVQoMCksIFNMUF9WRUMoMCwgMCwgMCwgMCwgMCl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjAwKSwgU0xQX1RJTUVPVVQoNTAwKSwgU0xQX1ZFQygxLCAyLCAzLCA0LCA0KX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyMDApLCBTTFBfVElNRU9VVCgzMDApLCBTTFBfVkVDKDIsIDQsIDYsIDcsIDcpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDUwKSwgU0xQX1RJTUVPVVQoMTAwKSwgU0xQX1ZFQygyLCA2LCA5LCA5LCAxMCl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgyNSksIFNMUF9WRUMoMiwgNywgOSwgOSwgMTApfSwgMX0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDI1KSwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMTApfSwgMX0KLX07Ci0KLS8qIGZvciB0aW0gPiAxMCAqLwotc3RhdGljIHN0cnVjdCBpd2w0OTY1X3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8xW0lXTF9QT1dFUl9BQ10gPSB7Ci0Je3tOT1NMUCwgU0xQX1RJTUVPVVQoMCksIFNMUF9USU1FT1VUKDApLCBTTFBfVkVDKDAsIDAsIDAsIDAsIDApfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDIwMCksIFNMUF9USU1FT1VUKDUwMCksCi0JCSBTTFBfVkVDKDEsIDIsIDMsIDQsIDB4RkYpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDIwMCksIFNMUF9USU1FT1VUKDMwMCksCi0JCSBTTFBfVkVDKDIsIDQsIDYsIDcsIDB4RkYpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDUwKSwgU0xQX1RJTUVPVVQoMTAwKSwKLQkJIFNMUF9WRUMoMiwgNiwgOSwgOSwgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgyNSksIFNMUF9WRUMoMiwgNywgOSwgOSwgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVElNRU9VVCgyNSksCi0JCSBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMHhGRil9LCAwfQotfTsKLQotaW50IGl3bDQ5NjVfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCByYyA9IDAsIGk7Ci0Jc3RydWN0IGl3bDQ5NjVfcG93ZXJfbWdyICpwb3dfZGF0YTsKLQlpbnQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9wb3dlcl92ZWNfZW50cnkpICogSVdMX1BPV0VSX0FDOwotCXUxNiBwY2lfcG07Ci0KLQlJV0xfREVCVUdfUE9XRVIoIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKLQotCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKLQotCW1lbXNldChwb3dfZGF0YSwgMCwgc2l6ZW9mKCpwb3dfZGF0YSkpOwotCi0JcG93X2RhdGEtPmFjdGl2ZV9pbmRleCA9IElXTF9QT1dFUl9SQU5HRV8wOwotCXBvd19kYXRhLT5kdGltX3ZhbCA9IDB4ZmZmZjsKLQotCW1lbWNweSgmcG93X2RhdGEtPnB3cl9yYW5nZV8wWzBdLCAmcmFuZ2VfMFswXSwgc2l6ZSk7Ci0JbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF0sICZyYW5nZV8xWzBdLCBzaXplKTsKLQotCXJjID0gcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0xJTktfQ1RSTCwgJnBjaV9wbSk7Ci0JaWYgKHJjICE9IDApCi0JCXJldHVybiAwOwotCWVsc2UgewotCQlzdHJ1Y3QgaXdsNDk2NV9wb3dlcnRhYmxlX2NtZCAqY21kOwotCi0JCUlXTF9ERUJVR19QT1dFUigiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBJV0xfUE9XRVJfQUM7IGkrKykgewotCQkJY21kID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFtpXS5jbWQ7Ci0KLQkJCWlmIChwY2lfcG0gJiAweDEpCi0JCQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1BDSV9QTV9NU0s7Ci0JCQllbHNlCi0JCQkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfUENJX1BNX01TSzsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsNDk2NV91cGRhdGVfcG93ZXJfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsNDk2NV9wb3dlcnRhYmxlX2NtZCAqY21kLCB1MzIgbW9kZSkKLXsKLQlpbnQgcmMgPSAwLCBpOwotCXU4IHNraXA7Ci0JdTMyIG1heF9zbGVlcCA9IDA7Ci0Jc3RydWN0IGl3bDQ5NjVfcG93ZXJfdmVjX2VudHJ5ICpyYW5nZTsKLQl1OCBwZXJpb2QgPSAwOwotCXN0cnVjdCBpd2w0OTY1X3Bvd2VyX21nciAqcG93X2RhdGE7Ci0KLQlpZiAobW9kZSA+IElXTF9QT1dFUl9JTkRFWF81KSB7Ci0JCUlXTF9ERUJVR19QT1dFUigiRXJyb3IgaW52YWxpZCBwb3dlciBtb2RlIFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcG93X2RhdGEgPSAmKHByaXYtPnBvd2VyX2RhdGEpOwotCi0JaWYgKHBvd19kYXRhLT5hY3RpdmVfaW5kZXggPT0gSVdMX1BPV0VSX1JBTkdFXzApCi0JCXJhbmdlID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFswXTsKLQllbHNlCi0JCXJhbmdlID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMVsxXTsKLQotCW1lbWNweShjbWQsICZyYW5nZVttb2RlXS5jbWQsIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9wb3dlcnRhYmxlX2NtZCkpOwotCi0jaWZkZWYgSVdMX01BQzgwMjExX0RJU0FCTEUKLQlpZiAocHJpdi0+YXNzb2NfbmV0d29yayAhPSBOVUxMKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJcGVyaW9kID0gcHJpdi0+YXNzb2NfbmV0d29yay0+dGltLnRpbV9wZXJpb2Q7Ci0JfQotI2VuZGlmCS8qSVdMX01BQzgwMjExX0RJU0FCTEUgKi8KLQlza2lwID0gcmFuZ2VbbW9kZV0ubm9fZHRpbTsKLQotCWlmIChwZXJpb2QgPT0gMCkgewotCQlwZXJpb2QgPSAxOwotCQlza2lwID0gMDsKLQl9Ci0KLQlpZiAoc2tpcCA9PSAwKSB7Ci0JCW1heF9zbGVlcCA9IHBlcmlvZDsKLQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0s7Ci0JfSBlbHNlIHsKLQkJX19sZTMyIHNscF9pdHJ2bCA9IGNtZC0+c2xlZXBfaW50ZXJ2YWxbSVdMX1BPV0VSX1ZFQ19TSVpFIC0gMV07Ci0JCW1heF9zbGVlcCA9IChsZTMyX3RvX2NwdShzbHBfaXRydmwpIC8gcGVyaW9kKSAqIHBlcmlvZDsKLQkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspIHsKLQkJaWYgKGxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0pID4gbWF4X3NsZWVwKQotCQkJY21kLT5zbGVlcF9pbnRlcnZhbFtpXSA9IGNwdV90b19sZTMyKG1heF9zbGVlcCk7Ci0JfQotCi0JSVdMX0RFQlVHX1BPV0VSKCJGbGFncyB2YWx1ZSA9IDB4JTA4WFxuIiwgY21kLT5mbGFncyk7Ci0JSVdMX0RFQlVHX1BPV0VSKCJUeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+dHhfZGF0YV90aW1lb3V0KSk7Ci0JSVdMX0RFQlVHX1BPV0VSKCJSeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSk7Ci0JSVdMX0RFQlVHX1BPV0VSKCJTbGVlcCBpbnRlcnZhbCB2ZWN0b3IgPSB7ICVkICwgJWQgLCAlZCAsICVkICwgJWQgfVxuIiwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMF0pLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFsxXSksCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzJdKSwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbM10pLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFs0XSkpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2VuZF9wb3dlcl9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG1vZGUpCi17Ci0JdTMyIHVuaW5pdGlhbGl6ZWRfdmFyKGZpbmFsX21vZGUpOwotCWludCByYzsKLQlzdHJ1Y3QgaXdsNDk2NV9wb3dlcnRhYmxlX2NtZCBjbWQ7Ci0KLQkvKiBJZiBvbiBiYXR0ZXJ5LCBzZXQgdG8gMywKLQkgKiBpZiBwbHVnZ2VkIGludG8gQUMgcG93ZXIsIHNldCB0byBDQU0gKCJjb250aW51b3VzbHkgYXdhcmUgbW9kZSIpLAotCSAqIGVsc2UgdXNlciBsZXZlbCAqLwotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6Ci0JCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfSU5ERVhfMzsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQUM6Ci0JCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWZpbmFsX21vZGUgPSBtb2RlOwotCQlicmVhazsKLQl9Ci0KLQljbWQua2VlcF9hbGl2ZV9iZWFjb25zID0gMDsKLQotCWl3bDQ5NjVfdXBkYXRlX3Bvd2VyX2NtZChwcml2LCAmY21kLCBmaW5hbF9tb2RlKTsKLQotCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBQT1dFUl9UQUJMRV9DTUQsIHNpemVvZihjbWQpLCAmY21kKTsKLQotCWlmIChmaW5hbF9tb2RlID09IElXTF9QT1dFUl9NT0RFX0NBTSkKLQkJY2xlYXJfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOwotCWVsc2UKLQkJc2V0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKLQotCXJldHVybiByYzsKLX0KLQotaW50IGl3bDQ5NjVfaXNfbmV0d29ya19wYWNrZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQotewotCS8qIEZpbHRlciBpbmNvbWluZyBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSB0YXJnZXRlZCB0b3dhcmQKLQkgKiB0aGlzIG5ldHdvcmssIGRpc2NhcmRpbmcgcGFja2V0cyBjb21pbmcgZnJvbSBvdXJzZWx2ZXMgKi8KLQlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6IC8qIEhlYWRlcjogRGVzdC4gfCBTb3VyY2UgICAgfCBCU1NJRCAqLwotCQkvKiBwYWNrZXRzIGZyb20gb3VyIGFkYXB0ZXIgYXJlIGRyb3BwZWQgKGVjaG8pICovCi0JCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjIsIHByaXYtPm1hY19hZGRyKSkKLQkJCXJldHVybiAwOwotCQkvKiB7YnJvYWQsbXVsdGl9Y2FzdCBwYWNrZXRzIHRvIG91ciBJQlNTIGdvIHRocm91Z2ggKi8KLQkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEpKQotCQkJcmV0dXJuICFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMywgcHJpdi0+YnNzaWQpOwotCQkvKiBwYWNrZXRzIHRvIG91ciBhZGFwdGVyIGdvIHRocm91Z2ggKi8KLQkJcmV0dXJuICFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSwgcHJpdi0+bWFjX2FkZHIpOwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOiAvKiBIZWFkZXI6IERlc3QuIHwgQVB7QlNTSUR9IHwgU291cmNlICovCi0JCS8qIHBhY2tldHMgZnJvbSBvdXIgYWRhcHRlciBhcmUgZHJvcHBlZCAoZWNobykgKi8KLQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMywgcHJpdi0+bWFjX2FkZHIpKQotCQkJcmV0dXJuIDA7Ci0JCS8qIHticm9hZCxtdWx0aX1jYXN0IHBhY2tldHMgdG8gb3VyIEJTUyBnbyB0aHJvdWdoICovCi0JCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxKSkKLQkJCXJldHVybiAhY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjIsIHByaXYtPmJzc2lkKTsKLQkJLyogcGFja2V0cyB0byBvdXIgYWRhcHRlciBnbyB0aHJvdWdoICovCi0JCXJldHVybiAhY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEsIHByaXYtPm1hY19hZGRyKTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotI2RlZmluZSBUWF9TVEFUVVNfRU5UUlkoeCkgY2FzZSBUWF9TVEFUVVNfRkFJTF8gIyMgeDogcmV0dXJuICN4Ci0KLXN0YXRpYyBjb25zdCBjaGFyICppd2w0OTY1X2dldF90eF9mYWlsX3JlYXNvbih1MzIgc3RhdHVzKQotewotCXN3aXRjaCAoc3RhdHVzICYgVFhfU1RBVFVTX01TSykgewotCWNhc2UgVFhfU1RBVFVTX1NVQ0NFU1M6Ci0JCXJldHVybiAiU1VDQ0VTUyI7Ci0JCVRYX1NUQVRVU19FTlRSWShTSE9SVF9MSU1JVCk7Ci0JCVRYX1NUQVRVU19FTlRSWShMT05HX0xJTUlUKTsKLQkJVFhfU1RBVFVTX0VOVFJZKEZJRk9fVU5ERVJSVU4pOwotCQlUWF9TVEFUVVNfRU5UUlkoTUdNTlRfQUJPUlQpOwotCQlUWF9TVEFUVVNfRU5UUlkoTkVYVF9GUkFHKTsKLQkJVFhfU1RBVFVTX0VOVFJZKExJRkVfRVhQSVJFKTsKLQkJVFhfU1RBVFVTX0VOVFJZKERFU1RfUFMpOwotCQlUWF9TVEFUVVNfRU5UUlkoQUJPUlRFRCk7Ci0JCVRYX1NUQVRVU19FTlRSWShCVF9SRVRSWSk7Ci0JCVRYX1NUQVRVU19FTlRSWShTVEFfSU5WQUxJRCk7Ci0JCVRYX1NUQVRVU19FTlRSWShGUkFHX0RST1BQRUQpOwotCQlUWF9TVEFUVVNfRU5UUlkoVElEX0RJU0FCTEUpOwotCQlUWF9TVEFUVVNfRU5UUlkoRlJBTUVfRkxVU0hFRCk7Ci0JCVRYX1NUQVRVU19FTlRSWShJTlNVRkZJQ0lFTlRfQ0ZfUE9MTCk7Ci0JCVRYX1NUQVRVU19FTlRSWShUWF9MT0NLRUQpOwotCQlUWF9TVEFUVVNfRU5UUlkoTk9fQkVBQ09OX09OX1JBREFSKTsKLQl9Ci0KLQlyZXR1cm4gIlVOS05PV04iOwotfQotCi0vKioKLSAqIGl3bDQ5NjVfc2Nhbl9jYW5jZWwgLSBDYW5jZWwgYW55IGN1cnJlbnRseSBleGVjdXRpbmcgSFcgc2NhbgotICoKLSAqIE5PVEU6IHByaXYtPm11dGV4IGlzIG5vdCByZXF1aXJlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9zY2FuX2NhbmNlbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiUXVldWluZyBzY2FuIGFib3J0LlxuIik7Ci0JCQlzZXRfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWJvcnRfc2Nhbik7Ci0KLQkJfSBlbHNlCi0JCQlJV0xfREVCVUdfU0NBTigiU2NhbiBhYm9ydCBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7Ci0KLQkJcmV0dXJuIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsNDk2NV9zY2FuX2NhbmNlbF90aW1lb3V0IC0gQ2FuY2VsIGFueSBjdXJyZW50bHkgZXhlY3V0aW5nIEhXIHNjYW4KLSAqIEBtczogYW1vdW50IG9mIHRpbWUgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igc2NhbiB0byBhYm9ydAotICoKLSAqIE5PVEU6IHByaXYtPm11dGV4IG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9zY2FuX2NhbmNlbF90aW1lb3V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBtcykKLXsKLQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7Ci0JaW50IHJldDsKLQotCXJldCA9IGl3bDQ5NjVfc2Nhbl9jYW5jZWwocHJpdik7Ci0JaWYgKHJldCAmJiBtcykgewotCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQkJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIG5vdyArIG1zZWNzX3RvX2ppZmZpZXMobXMpKSAmJgotCQkJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpCi0JCQltc2xlZXAoMSk7Ci0JCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3NlcXVlbmNlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQkvKiBSZXNldCBpZWVlIHN0YXRzICovCi0KLQkvKiBXZSBkb24ndCByZXNldCB0aGUgbmV0X2RldmljZV9zdGF0cyAoaWVlZS0+c3RhdHMpIG9uCi0JICogcmUtYXNzb2NpYXRpb24gKi8KLQotCXByaXYtPmxhc3Rfc2VxX251bSA9IC0xOwotCXByaXYtPmxhc3RfZnJhZ19udW0gPSAtMTsKLQlwcml2LT5sYXN0X3BhY2tldF90aW1lID0gMDsKLQotCWl3bDQ5NjVfc2Nhbl9jYW5jZWwocHJpdik7Ci19Ci0KICNkZWZpbmUgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTAk0MDk2CiAjZGVmaW5lIElOVEVMX0NPTk5fTElTVEVOX0lOVEVSVkFMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhBKQogCkBAIC0xNzUwLDQ2ICs2NzksOCBAQAogCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdykpOwogfQogCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApIHsKLQkJSVdMX0VSUk9SKCJBUHMgZG9uJ3Qgc2Nhbi5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfU0NBTigiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTigiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICAiCi0JCQkgICAgICAgIlF1ZXVpbmcuXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0aW5nIHNjYW4uLi5cbiIpOwotCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfRykKLQkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9BKQotCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKLQlzZXRfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JcHJpdi0+c2Nhbl9zdGFydCA9IGppZmZpZXM7Ci0JcHJpdi0+c2Nhbl9wYXNzX3N0YXJ0ID0gcHJpdi0+c2Nhbl9zdGFydDsKLQotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCitzdGF0aWMgdm9pZCBpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CiAJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KQEAgLTE4NTgsNyArNzQ5LDcgQEAKICNlbmRpZgogCiAJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPmJhbmQsCi0JCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSk7CisJCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKIAogCWlmICghY2hfaW5mbykKIAkJY2hfaW5mbyA9ICZwcml2LT5jaGFubmVsX2luZm9bMF07CkBAIC0xODc0LDcgKzc2NSw3IEBACiAJcHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgPSBjcHVfdG9fbGUxNihjaF9pbmZvLT5jaGFubmVsKTsKIAlwcml2LT5iYW5kID0gY2hfaW5mby0+YmFuZDsKIAotCWl3bDQ5NjVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHByaXYsIHByaXYtPmJhbmQpOworCWl3bF9zZXRfZmxhZ3NfZm9yX2JhbmQocHJpdiwgcHJpdi0+YmFuZCk7CiAKIAlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9CiAJICAgIChJV0xfT0ZETV9SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKQEAgLTE4ODcsMzggKzc3OCwyNCBAQAogCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOwogCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKLQlpd2w0OTY1X3NldF9yeG9uX2NoYWluKHByaXYpOworCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIH0KIAogc3RhdGljIGludCBpd2w0OTY1X3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCiB7Ci0JaWYgKG1vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewotCQljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKLQotCQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwKLQkJCXByaXYtPmJhbmQsCi0JCQlsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCkpOwotCi0JCWlmICghY2hfaW5mbyB8fCAhaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSB7Ci0JCQlJV0xfRVJST1IoImNoYW5uZWwgJWQgbm90IElCU1MgY2hhbm5lbFxuIiwKLQkJCQkgIGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQogCXByaXYtPml3X21vZGUgPSBtb2RlOwogCiAJaXdsNDk2NV9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYpOwogCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCi0JaXdsY29yZV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKKwlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKIAkvKiBkb250IGNvbW1pdCByeG9uIGlmIHJmLWtpbGwgaXMgb24qLwogCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwotCWlmIChpd2w0OTY1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgeworCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKSB7CiAJCUlXTF9XQVJOSU5HKCJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgMTAwbXNcbiIpOwogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTE5MjksNDQ4ICs4MDYsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9idWlsZF90eF9jbWRfaHdjcnlwdG8oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsLAotCQkJCSAgICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCi0JCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYl9mcmFnLAotCQkJCSAgICAgIGludCBzdGFfaWQpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfaHdfa2V5ICprZXlpbmZvID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbzsKLQlzdHJ1Y3QgaXdsX3dlcF9rZXkgKndlcGtleTsKLQlpbnQga2V5aWR4ID0gMDsKLQotCUJVR19PTihjdGwtPmtleV9pZHggPiAzKTsKLQotCXN3aXRjaCAoa2V5aW5mby0+YWxnKSB7Ci0JY2FzZSBBTEdfQ0NNUDoKLQkJY21kLT5jbWQudHguc2VjX2N0bCA9IFRYX0NNRF9TRUNfQ0NNOwotCQltZW1jcHkoY21kLT5jbWQudHgua2V5LCBrZXlpbmZvLT5rZXksIGtleWluZm8tPmtleWxlbik7Ci0JCWlmIChjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0FNUERVKQotCQkJY21kLT5jbWQudHgudHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19BR0dfQ0NNUF9NU0s7Ci0JCUlXTF9ERUJVR19UWCgidHhfY21kIHdpdGggYWVzIGh3Y3J5cHRvXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFMR19US0lQOgotCQljbWQtPmNtZC50eC5zZWNfY3RsID0gVFhfQ01EX1NFQ19US0lQOwotCQlpZWVlODAyMTFfZ2V0X3RraXBfa2V5KGtleWluZm8tPmNvbmYsIHNrYl9mcmFnLAotCQkJSUVFRTgwMjExX1RLSVBfUDJfS0VZLCBjbWQtPmNtZC50eC5rZXkpOwotCQlJV0xfREVCVUdfVFgoInR4X2NtZCB3aXRoIHRraXAgaHdjcnlwdG9cbiIpOwotCQlicmVhazsKLQotCWNhc2UgQUxHX1dFUDoKLQkJd2Vwa2V5ID0gJnByaXYtPndlcF9rZXlzW2N0bC0+a2V5X2lkeF07Ci0JCWNtZC0+Y21kLnR4LnNlY19jdGwgPSAwOwotCQlpZiAocHJpdi0+ZGVmYXVsdF93ZXBfa2V5KSB7Ci0JCQkvKiB0aGUgV0VQIGtleSB3YXMgc2VudCBhcyBzdGF0aWMgKi8KLQkJCWtleWlkeCA9IGN0bC0+a2V5X2lkeDsKLQkJCW1lbWNweSgmY21kLT5jbWQudHgua2V5WzNdLCB3ZXBrZXktPmtleSwKLQkJCQkJCQl3ZXBrZXktPmtleV9zaXplKTsKLQkJCWlmICh3ZXBrZXktPmtleV9zaXplID09IFdFUF9LRVlfTEVOXzEyOCkKLQkJCQljbWQtPmNtZC50eC5zZWNfY3RsIHw9IFRYX0NNRF9TRUNfS0VZMTI4OwotCQl9IGVsc2UgewotCQkJLyogdGhlIFdFUCBrZXkgd2FzIHNlbnQgYXMgZHluYW1pYyAqLwotCQkJa2V5aWR4ID0ga2V5aW5mby0+a2V5aWR4OwotCQkJbWVtY3B5KCZjbWQtPmNtZC50eC5rZXlbM10sIGtleWluZm8tPmtleSwKLQkJCQkJCQlrZXlpbmZvLT5rZXlsZW4pOwotCQkJaWYgKGtleWluZm8tPmtleWxlbiA9PSBXRVBfS0VZX0xFTl8xMjgpCi0JCQkJY21kLT5jbWQudHguc2VjX2N0bCB8PSBUWF9DTURfU0VDX0tFWTEyODsKLQkJfQotCi0JCWNtZC0+Y21kLnR4LnNlY19jdGwgfD0gKFRYX0NNRF9TRUNfV0VQIHwKLQkJCShrZXlpZHggJiBUWF9DTURfU0VDX01TSykgPDwgVFhfQ01EX1NFQ19TSElGVCk7Ci0KLQkJSVdMX0RFQlVHX1RYKCJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKLQkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBrZXlpZHgpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBlbmNvZGUgYWxnICVkXG4iLCBrZXlpbmZvLT5hbGcpOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qCi0gKiBoYW5kbGUgYnVpbGQgUkVQTFlfVFggY29tbWFuZCBub3RpZmljYXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfYnVpbGRfdHhfY21kX2Jhc2ljKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2xfY21kICpjbWQsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0cmwsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAotCQkJCSAgaW50IGlzX3VuaWNhc3QsIHU4IHN0ZF9pZCkKLXsKLQlfX2xlMTYgKnFjOwotCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JX19sZTMyIHR4X2ZsYWdzID0gY21kLT5jbWQudHgudHhfZmxhZ3M7Ci0KLQljbWQtPmNtZC50eC5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKLQlpZiAoIShjdHJsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spKSB7Ci0JCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQUNLX01TSzsKLQkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkKLQkJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0JCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcG9uc2UoZmMpICYmCi0JCSAgICAhKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgMHhmKSkKLQkJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfVFNGX01TSzsKLQl9IGVsc2UgewotCQl0eF9mbGFncyAmPSAoflRYX0NNRF9GTEdfQUNLX01TSyk7Ci0JCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0JfQotCi0JaWYgKGllZWU4MDIxMV9pc19iYWNrX3JlcXVlc3QoZmMpKQotCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX0FDS19NU0sgfCBUWF9DTURfRkxHX0lNTV9CQV9SU1BfTUFTSzsKLQotCi0JY21kLT5jbWQudHguc3RhX2lkID0gc3RkX2lkOwotCWlmIChpZWVlODAyMTFfZ2V0X21vcmVmcmFnKGhkcikpCi0JCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfTU9SRV9GUkFHX01TSzsKLQotCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RybChoZHIpOwotCWlmIChxYykgewotCQljbWQtPmNtZC50eC50aWRfdHNwZWMgPSAodTgpIChsZTE2X3RvX2NwdSgqcWMpICYgMHhmKTsKLQkJdHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0JfSBlbHNlCi0JCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0KLQlpZiAoY3RybC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX1JUU19DVFMpIHsKLQkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19SVFNfTVNLOwotCQl0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19DVFNfTVNLOwotCX0gZWxzZSBpZiAoY3RybC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX0NUU19QUk9URUNUKSB7Ci0JCXR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1JUU19NU0s7Ci0JCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQ1RTX01TSzsKLQl9Ci0KLQlpZiAoKHR4X2ZsYWdzICYgVFhfQ01EX0ZMR19SVFNfTVNLKSB8fCAodHhfZmxhZ3MgJiBUWF9DTURfRkxHX0NUU19NU0spKQotCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX0ZVTExfVFhPUF9QUk9UX01TSzsKLQotCXR4X2ZsYWdzICY9IH4oVFhfQ01EX0ZMR19BTlRfU0VMX01TSyk7Ci0JaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkgewotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEgfHwKLQkJICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpCi0JCQljbWQtPmNtZC50eC50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigzKTsKLQkJZWxzZQotCQkJY21kLT5jbWQudHgudGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMik7Ci0JfSBlbHNlIHsKLQkJY21kLT5jbWQudHgudGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gMDsKLQl9Ci0KLQljbWQtPmNtZC50eC5kcml2ZXJfdHhvcCA9IDA7Ci0JY21kLT5jbWQudHgudHhfZmxhZ3MgPSB0eF9mbGFnczsKLQljbWQtPmNtZC50eC5uZXh0X2ZyYW1lX2xlbiA9IDA7Ci19Ci1zdGF0aWMgdm9pZCBpd2xfdXBkYXRlX3R4X3N0YXRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGZjLCB1MTYgbGVuKQotewotCS8qIDAgLSBtZ210LCAxIC0gY250LCAyIC0gZGF0YSAqLwotCWludCBpZHggPSAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMjsKLQlwcml2LT50eF9zdGF0c1tpZHhdLmNudCsrOwotCXByaXYtPnR4X3N0YXRzW2lkeF0uYnl0ZXMgKz0gbGVuOwotfQotLyoqCi0gKiBpd2w0OTY1X2dldF9zdGFfaWQgLSBGaW5kIHN0YXRpb24ncyBpbmRleCB3aXRoaW4gc3RhdGlvbiB0YWJsZQotICoKLSAqIElmIG5ldyBJQlNTIHN0YXRpb24sIGNyZWF0ZSBuZXcgZW50cnkgaW4gc3RhdGlvbiB0YWJsZQotICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKLXsKLQlpbnQgc3RhX2lkOwotCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0KLQkvKiBJZiB0aGlzIGZyYW1lIGlzIGJyb2FkY2FzdCBvciBtYW5hZ2VtZW50LCB1c2UgYnJvYWRjYXN0IHN0YXRpb24gaWQgKi8KLQlpZiAoKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSAhPSBJRUVFODAyMTFfRlRZUEVfREFUQSkgfHwKLQkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCi0JCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwotCi0Jc3dpdGNoIChwcml2LT5pd19tb2RlKSB7Ci0KLQkvKiBJZiB3ZSBhcmUgYSBjbGllbnQgc3RhdGlvbiBpbiBhIEJTUyBuZXR3b3JrLCB1c2UgdGhlIHNwZWNpYWwKLQkgKiBBUCBzdGF0aW9uIGVudHJ5ICh0aGF0J3MgdGhlIG9ubHkgc3RhdGlvbiB3ZSBjb21tdW5pY2F0ZSB3aXRoKSAqLwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgotCQlyZXR1cm4gSVdMX0FQX0lEOwotCi0JLyogSWYgd2UgYXJlIGFuIEFQLCB0aGVuIGZpbmQgdGhlIHN0YXRpb24sIG9yIHVzZSBCQ0FTVCAqLwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfQVA6Ci0JCXN0YV9pZCA9IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwotCQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pCi0JCQlyZXR1cm4gc3RhX2lkOwotCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKLQotCS8qIElmIHRoaXMgZnJhbWUgaXMgZ29pbmcgb3V0IHRvIGFuIElCU1MgbmV0d29yaywgZmluZCB0aGUgc3RhdGlvbiwKLQkgKiBvciBjcmVhdGUgYSBuZXcgc3RhdGlvbiB0YWJsZSBlbnRyeSAqLwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSUJTUzoKLQkJc3RhX2lkID0gaXdsNDk2NV9od19maW5kX3N0YXRpb24ocHJpdiwgaGRyLT5hZGRyMSk7Ci0JCWlmIChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikKLQkJCXJldHVybiBzdGFfaWQ7Ci0KLQkJLyogQ3JlYXRlIG5ldyBzdGF0aW9uIHRhYmxlIGVudHJ5ICovCi0JCXN0YV9pZCA9IGl3bDQ5NjVfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgaGRyLT5hZGRyMSwKLQkJCQkJCSAgIDAsIENNRF9BU1lOQywgTlVMTCk7Ci0KLQkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQotCQkJcmV0dXJuIHN0YV9pZDsKLQotCQlJV0xfREVCVUdfRFJPUCgiU3RhdGlvbiAlcyBub3QgaW4gc3RhdGlvbiBtYXAuICIKLQkJCSAgICAgICAiRGVmYXVsdGluZyB0byBicm9hZGNhc3QuLi5cbiIsCi0JCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMSkpOwotCQlpd2xfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX0RST1AsICh1OCAqKSBoZHIsIHNpemVvZigqaGRyKSk7Ci0JCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwotCi0JZGVmYXVsdDoKLQkJSVdMX1dBUk5JTkcoIlVua25vd24gbW9kZSBvZiBvcGVyYXRpb246ICVkIiwgcHJpdi0+aXdfbW9kZSk7Ci0JCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwotCX0KLX0KLQotLyoKLSAqIHN0YXJ0IFJFUExZX1RYIGNvbW1hbmQgcHJvY2VzcwotICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfdHhfc2tiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsNDk2NV90ZmRfZnJhbWUgKnRmZDsKLQl1MzIgKmNvbnRyb2xfZmxhZ3M7Ci0JaW50IHR4cV9pZCA9IGN0bC0+cXVldWU7Ci0Jc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSA9IE5VTEw7Ci0Jc3RydWN0IGl3bDQ5NjVfcXVldWUgKnEgPSBOVUxMOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOwotCWRtYV9hZGRyX3QgdHhjbWRfcGh5czsKLQlkbWFfYWRkcl90IHNjcmF0Y2hfcGh5czsKLQlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZCA9IE5VTEw7Ci0JdTE2IGxlbiwgaWR4LCBsZW5fb3JnOwotCXU4IGlkLCBoZHJfbGVuLCB1bmljYXN0OwotCXU4IHN0YV9pZDsKLQl1MTYgc2VxX251bWJlciA9IDA7Ci0JdTE2IGZjOwotCV9fbGUxNiAqcWM7Ci0JdTggd2FpdF93cml0ZV9wdHIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSBSRiBLSUxMXG4iKTsKLQkJZ290byBkcm9wX3VubG9jazsKLQl9Ci0KLQlpZiAoIXByaXYtPnZpZikgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSAhcHJpdi0+dmlmXG4iKTsKLQkJZ290byBkcm9wX3VubG9jazsKLQl9Ci0KLQlpZiAoKGN0bC0+dHhfcmF0ZS0+aHdfdmFsdWUgJiAweEZGKSA9PSBJV0xfSU5WQUxJRF9SQVRFKSB7Ci0JCUlXTF9FUlJPUigiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7Ci0JCWdvdG8gZHJvcF91bmxvY2s7Ci0JfQotCi0JdW5pY2FzdCA9ICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKTsKLQlpZCA9IDA7Ci0KLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChpZWVlODAyMTFfaXNfYXV0aChmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBVVRIIGZyYW1lXG4iKTsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxdWVzdChmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxdWVzdChmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBSRUFTU09DIGZyYW1lXG4iKTsKLSNlbmRpZgotCi0JLyogZHJvcCBhbGwgZGF0YSBmcmFtZSBpZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQgKi8KLQlpZiAoKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgJiYKLQkgICAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpIHx8Ci0JICAgICgocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpICYmICFwcml2LT5hc3NvY19pZCkgfHwKLQkgICAgIXByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtICFpd2xfaXNfYXNzb2NpYXRlZFxuIik7Ci0JCWdvdG8gZHJvcF91bmxvY2s7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKTsKLQotCS8qIEZpbmQgKG9yIGNyZWF0ZSkgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCi0Jc3RhX2lkID0gaXdsNDk2NV9nZXRfc3RhX2lkKHByaXYsIGhkcik7Ci0JaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXNcbiIsCi0JCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMSkpOwotCQlnb3RvIGRyb3A7Ci0JfQotCi0JSVdMX0RFQlVHX1JBVEUoInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7Ci0KLQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0cmwoaGRyKTsKLQlpZiAocWMpIHsKLQkJdTggdGlkID0gKHU4KShsZTE2X3RvX2NwdSgqcWMpICYgMHhmKTsKLQkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciAmCi0JCQkJSUVFRTgwMjExX1NDVExfU0VROwotCQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoc2VxX251bWJlcikgfAotCQkJKGhkci0+c2VxX2N0cmwgJgotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRykpOwotCQlzZXFfbnVtYmVyICs9IDB4MTA7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLQkJLyogYWdncmVnYXRpb24gaXMgb24gZm9yIHRoaXMgPHN0YSx0aWQ+ICovCi0JCWlmIChjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0FNUERVKQotCQkJdHhxX2lkID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cudHhxX2lkOwotCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUrKzsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwotCX0KLQotCS8qIERlc2NyaXB0b3IgZm9yIGNob3NlbiBUeCBxdWV1ZSAqLwotCXR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKLQlxID0gJnR4cS0+cTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBTZXQgdXAgZmlyc3QgZW1wdHkgVEZEIHdpdGhpbiB0aGlzIHF1ZXVlJ3MgY2lyY3VsYXIgVEZEIGJ1ZmZlciAqLwotCXRmZCA9ICZ0eHEtPmJkW3EtPndyaXRlX3B0cl07Ci0JbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKLQljb250cm9sX2ZsYWdzID0gKHUzMiAqKSB0ZmQ7Ci0JaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIDApOwotCi0JLyogU2V0IHVwIGRyaXZlciBkYXRhIGZvciB0aGlzIFRGRCAqLwotCW1lbXNldCgmKHR4cS0+dHhiW3EtPndyaXRlX3B0cl0pLCAwLCBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfdHhfaW5mbykpOwotCXR4cS0+dHhiW3EtPndyaXRlX3B0cl0uc2tiWzBdID0gc2tiOwotCW1lbWNweSgmKHR4cS0+dHhiW3EtPndyaXRlX3B0cl0uc3RhdHVzLmNvbnRyb2wpLAotCSAgICAgICBjdGwsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wpKTsKLQotCS8qIFNldCB1cCBmaXJzdCBlbXB0eSBlbnRyeSBpbiBxdWV1ZSdzIGFycmF5IG9mIFR4L2NtZCBidWZmZXJzICovCi0Jb3V0X2NtZCA9ICZ0eHEtPmNtZFtpZHhdOwotCW1lbXNldCgmb3V0X2NtZC0+aGRyLCAwLCBzaXplb2Yob3V0X2NtZC0+aGRyKSk7Ci0JbWVtc2V0KCZvdXRfY21kLT5jbWQudHgsIDAsIHNpemVvZihvdXRfY21kLT5jbWQudHgpKTsKLQotCS8qCi0JICogU2V0IHVwIHRoZSBUeC1jb21tYW5kIChub3QgTUFDISkgaGVhZGVyLgotCSAqIFN0b3JlIHRoZSBjaG9zZW4gVHggcXVldWUgYW5kIFRGRCBpbmRleCB3aXRoaW4gdGhlIHNlcXVlbmNlIGZpZWxkOwotCSAqIGFmdGVyIFR4LCB1Q29kZSdzIFR4IHJlc3BvbnNlIHdpbGwgcmV0dXJuIHRoaXMgdmFsdWUgc28gZHJpdmVyIGNhbgotCSAqIGxvY2F0ZSB0aGUgZnJhbWUgd2l0aGluIHRoZSB0eCBxdWV1ZSBhbmQgZG8gcG9zdC10eCBwcm9jZXNzaW5nLgotCSAqLwotCW91dF9jbWQtPmhkci5jbWQgPSBSRVBMWV9UWDsKLQlvdXRfY21kLT5oZHIuc2VxdWVuY2UgPSBjcHVfdG9fbGUxNigodTE2KShRVUVVRV9UT19TRVEodHhxX2lkKSB8Ci0JCQkJSU5ERVhfVE9fU0VRKHEtPndyaXRlX3B0cikpKTsKLQotCS8qIENvcHkgTUFDIGhlYWRlciBmcm9tIHNrYiBpbnRvIGNvbW1hbmQgYnVmZmVyICovCi0JbWVtY3B5KG91dF9jbWQtPmNtZC50eC5oZHIsIGhkciwgaGRyX2xlbik7Ci0KLQkvKgotCSAqIFVzZSB0aGUgZmlyc3QgZW1wdHkgZW50cnkgaW4gdGhpcyBxdWV1ZSdzIGNvbW1hbmQgYnVmZmVyIGFycmF5Ci0JICogdG8gY29udGFpbiB0aGUgVHggY29tbWFuZCBhbmQgTUFDIGhlYWRlciBjb25jYXRlbmF0ZWQgdG9nZXRoZXIKLQkgKiAocGF5bG9hZCBkYXRhIHdpbGwgYmUgaW4gYW5vdGhlciBidWZmZXIpLgotCSAqIFNpemUgb2YgdGhpcyB2YXJpZXMsIGR1ZSB0byB2YXJ5aW5nIE1BQyBoZWFkZXIgbGVuZ3RoLgotCSAqIElmIGVuZCBpcyBub3QgZHdvcmQgYWxpZ25lZCwgd2UnbGwgaGF2ZSAyIGV4dHJhIGJ5dGVzIGF0IHRoZSBlbmQKLQkgKiBvZiB0aGUgTUFDIGhlYWRlciAoZGV2aWNlIHJlYWRzIG9uIGR3b3JkIGJvdW5kYXJpZXMpLgotCSAqIFdlJ2xsIHRlbGwgZGV2aWNlIGFib3V0IHRoaXMgcGFkZGluZyBsYXRlci4KLQkgKi8KLQlsZW4gPSBwcml2LT5od19wYXJhbXMudHhfY21kX2xlbiArCi0JCXNpemVvZihzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKLQotCWxlbl9vcmcgPSBsZW47Ci0JbGVuID0gKGxlbiArIDMpICYgfjM7Ci0KLQlpZiAobGVuX29yZyAhPSBsZW4pCi0JCWxlbl9vcmcgPSAxOwotCWVsc2UKLQkJbGVuX29yZyA9IDA7Ci0KLQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgVHggY29tbWFuZCdzIGhlYWRlciAobm90IE1BQyBoZWFkZXIhKSwKLQkgKiB3aXRoaW4gY29tbWFuZCBidWZmZXIgYXJyYXkuICovCi0JdHhjbWRfcGh5cyA9IHR4cS0+ZG1hX2FkZHJfY21kICsgc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSAqIGlkeCArCi0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGl3bF9jbWQsIGhkcik7Ci0KLQkvKiBBZGQgYnVmZmVyIGNvbnRhaW5pbmcgVHggY29tbWFuZCBhbmQgTUFDKCEpIGhlYWRlciB0byBURkQncwotCSAqIGZpcnN0IGVudHJ5ICovCi0JaXdsNDk2NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCB0eGNtZF9waHlzLCBsZW4pOwotCi0JaWYgKCEoY3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9ET19OT1RfRU5DUllQVCkpCi0JCWl3bDQ5NjVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHByaXYsIGN0bCwgb3V0X2NtZCwgc2tiLCBzdGFfaWQpOwotCi0JLyogU2V0IHVwIFRGRCdzIDJuZCBlbnRyeSB0byBwb2ludCBkaXJlY3RseSB0byByZW1haW5kZXIgb2Ygc2tiLAotCSAqIGlmIGFueSAoODAyLjExIG51bGwgZnJhbWVzIGhhdmUgbm8gcGF5bG9hZCkuICovCi0JbGVuID0gc2tiLT5sZW4gLSBoZHJfbGVuOwotCWlmIChsZW4pIHsKLQkJcGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2Rldiwgc2tiLT5kYXRhICsgaGRyX2xlbiwKLQkJCQkJICAgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaXdsNDk2NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCBwaHlzX2FkZHIsIGxlbik7Ci0JfQotCi0JLyogVGVsbCA0OTY1IGFib3V0IGFueSAyLWJ5dGUgcGFkZGluZyBhZnRlciBNQUMgaGVhZGVyICovCi0JaWYgKGxlbl9vcmcpCi0JCW91dF9jbWQtPmNtZC50eC50eF9mbGFncyB8PSBUWF9DTURfRkxHX01IX1BBRF9NU0s7Ci0KLQkvKiBUb3RhbCAjIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkICovCi0JbGVuID0gKHUxNilza2ItPmxlbjsKLQlvdXRfY21kLT5jbWQudHgubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKLQotCS8qIFRPRE8gbmVlZCB0aGlzIGZvciBidXJzdCBtb2RlIGxhdGVyIG9uICovCi0JaXdsNDk2NV9idWlsZF90eF9jbWRfYmFzaWMocHJpdiwgb3V0X2NtZCwgY3RsLCBoZHIsIHVuaWNhc3QsIHN0YV9pZCk7Ci0KLQkvKiBzZXQgaXNfaGNjYSB0byAwOyBpdCBwcm9iYWJseSB3aWxsIG5ldmVyIGJlIGltcGxlbWVudGVkICovCi0JaXdsNDk2NV9od19idWlsZF90eF9jbWRfcmF0ZShwcml2LCBvdXRfY21kLCBjdGwsIGhkciwgc3RhX2lkLCAwKTsKLQotCWl3bF91cGRhdGVfdHhfc3RhdHMocHJpdiwgZmMsIGxlbik7Ci0KLQlzY3JhdGNoX3BoeXMgPSB0eGNtZF9waHlzICsgc2l6ZW9mKHN0cnVjdCBpd2xfY21kX2hlYWRlcikgKwotCQlvZmZzZXRvZihzdHJ1Y3QgaXdsNDk2NV90eF9jbWQsIHNjcmF0Y2gpOwotCW91dF9jbWQtPmNtZC50eC5kcmFtX2xzYl9wdHIgPSBjcHVfdG9fbGUzMihzY3JhdGNoX3BoeXMpOwotCW91dF9jbWQtPmNtZC50eC5kcmFtX21zYl9wdHIgPSBpd2xfZ2V0X2RtYV9oaV9hZGRyZXNzKHNjcmF0Y2hfcGh5cyk7Ci0KLQlpZiAoIWllZWU4MDIxMV9nZXRfbW9yZWZyYWcoaGRyKSkgewotCQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKLQkJaWYgKHFjKSB7Ci0JCQl1OCB0aWQgPSAodTgpKGxlMTZfdG9fY3B1KCpxYykgJiAweGYpOwotCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyID0gc2VxX251bWJlcjsKLQkJfQotCX0gZWxzZSB7Ci0JCXdhaXRfd3JpdGVfcHRyID0gMTsKLQkJdHhxLT5uZWVkX3VwZGF0ZSA9IDA7Ci0JfQotCi0JaXdsX3ByaW50X2hleF9kdW1wKElXTF9ETF9UWCwgb3V0X2NtZC0+Y21kLnBheWxvYWQsCi0JCQkgICBzaXplb2Yob3V0X2NtZC0+Y21kLnR4KSk7Ci0KLQlpd2xfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1RYLCAodTggKilvdXRfY21kLT5jbWQudHguaGRyLAotCQkJICAgaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpKTsKLQotCS8qIFNldCB1cCBlbnRyeSBmb3IgdGhpcyBURkQgaW4gVHggYnl0ZS1jb3VudCBhcnJheSAqLwotCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSwgbGVuKTsKLQotCS8qIFRlbGwgZGV2aWNlIHRoZSB3cml0ZSBpbmRleCAqanVzdCBwYXN0KiB0aGlzIGxhdGVzdCBmaWxsZWQgVEZEICovCi0JcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7Ci0JcmMgPSBpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWlmICgoaXdsNDk2NV9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykKLQkgICAgJiYgcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgewotCQlpZiAod2FpdF93cml0ZV9wdHIpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKLQkJCWl3bDQ5NjVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQl9Ci0KLQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIGN0bC0+cXVldWUpOwotCX0KLQotCXJldHVybiAwOwotCi1kcm9wX3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci1kcm9wOgotCXJldHVybiAtMTsKLX0KLQogc3RhdGljIHZvaWQgaXdsNDk2NV9zZXRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqaHcgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKIAlpbnQgaTsKIAotCWh3ID0gaXdsNDk2NV9nZXRfaHdfbW9kZShwcml2LCBwcml2LT5iYW5kKTsKKwlodyA9IGl3bF9nZXRfaHdfbW9kZShwcml2LCBwcml2LT5iYW5kKTsKIAlpZiAoIWh3KSB7CiAJCUlXTF9FUlJPUigiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOwogCQlyZXR1cm47CkBAIC0yNDExLDE2OSArODUzLDYgQEAKIAkJICAgKElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX09GRE1fUkFURSkgJiAweEZGOwogfQogCi12b2lkIGl3bDQ5NjVfcmFkaW9fa2lsbF9zdyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBkaXNhYmxlX3JhZGlvKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISFkaXNhYmxlX3JhZGlvID09IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gJXNcbiIsCi0JCQkgIGRpc2FibGVfcmFkaW8gPyAiT0ZGIiA6ICJPTiIpOwotCi0JaWYgKGRpc2FibGVfcmFkaW8pIHsKLQkJaXdsNDk2NV9zY2FuX2NhbmNlbChwcml2KTsKLQkJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBUCAqLwotCQlpZiAocHJpdi0+aXdfbW9kZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKLQkJCQkgICAgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQkJLyogY2FsbCB0aGUgaG9zdCBjb21tYW5kIG9ubHkgaWYgbm8gaHcgcmYta2lsbCBzZXQgKi8KLQkJCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpICYmCi0JCQkgICAgaXdsX2lzX3JlYWR5KHByaXYpKQotCQkJCWl3bDQ5NjVfc2VuZF9jYXJkX3N0YXRlKHByaXYsCi0JCQkJCQkJQ0FSRF9TVEFURV9DTURfRElTQUJMRSwKLQkJCQkJCQkwKTsKLQkJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwotCi0JCQkvKiBtYWtlIHN1cmUgbWFjODAyMTEgc3RvcCBzZW5kaW5nIFR4IGZyYW1lICovCi0JCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCi0JY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiB3YWtlIHVwIHVjb2RlICovCi0JbXNsZWVwKDEwKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0JaWYgKCFpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKQotCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1JGX0tJTEwoIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgotCQkJCSAgImRpc2FibGVkIGJ5IEhXIHN3aXRjaFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwotCXJldHVybjsKLX0KLQotdm9pZCBpd2w0OTY1X3NldF9kZWNyeXB0ZWRfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgdTMyIGRlY3J5cHRfcmVzLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCi17Ci0JdTE2IGZjID0KLQkgICAgbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSktPmZyYW1lX2NvbnRyb2wpOwotCi0JaWYgKHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSykKLQkJcmV0dXJuOwotCi0JaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKQotCQlyZXR1cm47Ci0KLQlJV0xfREVCVUdfUlgoImRlY3J5cHRfcmVzOjB4JXhcbiIsIGRlY3J5cHRfcmVzKTsKLQlzd2l0Y2ggKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spIHsKLQljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfVEtJUDoKLQkJLyogVGhlIHVDb2RlIGhhcyBnb3QgYSBiYWQgcGhhc2UgMSBLZXksIHB1c2hlcyB0aGUgcGFja2V0LgotCQkgKiBEZWNyeXB0aW9uIHdpbGwgYmUgZG9uZSBpbiBTVy4gKi8KLQkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KLQkJICAgIFJYX1JFU19TVEFUVVNfQkFEX0tFWV9UVEFLKQotCQkJYnJlYWs7Ci0KLQkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KLQkJICAgIFJYX1JFU19TVEFUVVNfQkFEX0lDVl9NSUMpCi0JCQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7Ci0JY2FzZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1dFUDoKLQljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfQ0NNUDoKLQkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KLQkJICAgIFJYX1JFU19TVEFUVVNfREVDUllQVF9PSykgewotCQkJSVdMX0RFQlVHX1JYKCJodyBkZWNyeXB0IHN1Y2Nlc3NmdWxseSEhIVxuIik7Ci0JCQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotCi0jZGVmaW5lIElXTF9QQUNLRVRfUkVUUllfVElNRSBIWgotCi1pbnQgaXdsNDk2NV9pc19kdXBsaWNhdGVfcGFja2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcikKLXsKLQl1MTYgc2MgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNlcV9jdHJsKTsKLQl1MTYgc2VxID0gKHNjICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OwotCXUxNiBmcmFnID0gc2MgJiBJRUVFODAyMTFfU0NUTF9GUkFHOwotCXUxNiAqbGFzdF9zZXEsICpsYXN0X2ZyYWc7Ci0JdW5zaWduZWQgbG9uZyAqbGFzdF90aW1lOwotCi0Jc3dpdGNoIChwcml2LT5pd19tb2RlKSB7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOnsKLQkJc3RydWN0IGxpc3RfaGVhZCAqcDsKLQkJc3RydWN0IGl3bDQ5NjVfaWJzc19zZXEgKmVudHJ5ID0gTlVMTDsKLQkJdTggKm1hYyA9IGhlYWRlci0+YWRkcjI7Ci0JCWludCBpbmRleCA9IG1hY1s1XSAmIChJV0xfSUJTU19NQUNfSEFTSF9TSVpFIC0gMSk7Ci0KLQkJX19saXN0X2Zvcl9lYWNoKHAsICZwcml2LT5pYnNzX21hY19oYXNoW2luZGV4XSkgewotCQkJZW50cnkgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBpd2w0OTY1X2lic3Nfc2VxLCBsaXN0KTsKLQkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGVudHJ5LT5tYWMsIG1hYykpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHAgPT0gJnByaXYtPmlic3NfbWFjX2hhc2hbaW5kZXhdKSB7Ci0JCQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFlbnRyeSkgewotCQkJCUlXTF9FUlJPUigiQ2Fubm90IG1hbGxvYyBuZXcgbWFjIGVudHJ5XG4iKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCW1lbWNweShlbnRyeS0+bWFjLCBtYWMsIEVUSF9BTEVOKTsKLQkJCWVudHJ5LT5zZXFfbnVtID0gc2VxOwotCQkJZW50cnktPmZyYWdfbnVtID0gZnJhZzsKLQkJCWVudHJ5LT5wYWNrZXRfdGltZSA9IGppZmZpZXM7Ci0JCQlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZwcml2LT5pYnNzX21hY19oYXNoW2luZGV4XSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlsYXN0X3NlcSA9ICZlbnRyeS0+c2VxX251bTsKLQkJbGFzdF9mcmFnID0gJmVudHJ5LT5mcmFnX251bTsKLQkJbGFzdF90aW1lID0gJmVudHJ5LT5wYWNrZXRfdGltZTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgotCQlsYXN0X3NlcSA9ICZwcml2LT5sYXN0X3NlcV9udW07Ci0JCWxhc3RfZnJhZyA9ICZwcml2LT5sYXN0X2ZyYWdfbnVtOwotCQlsYXN0X3RpbWUgPSAmcHJpdi0+bGFzdF9wYWNrZXRfdGltZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICgoKmxhc3Rfc2VxID09IHNlcSkgJiYKLQkgICAgdGltZV9hZnRlcigqbGFzdF90aW1lICsgSVdMX1BBQ0tFVF9SRVRSWV9USU1FLCBqaWZmaWVzKSkgewotCQlpZiAoKmxhc3RfZnJhZyA9PSBmcmFnKQotCQkJZ290byBkcm9wOwotCQlpZiAoKmxhc3RfZnJhZyArIDEgIT0gZnJhZykKLQkJCS8qIG91dC1vZi1vcmRlciBmcmFnbWVudCAqLwotCQkJZ290byBkcm9wOwotCX0gZWxzZQotCQkqbGFzdF9zZXEgPSBzZXE7Ci0KLQkqbGFzdF9mcmFnID0gZnJhZzsKLQkqbGFzdF90aW1lID0gamlmZmllczsKLQlyZXR1cm4gMDsKLQotIGRyb3A6Ci0JcmV0dXJuIDE7Ci19Ci0KICNpZmRlZiBDT05GSUdfSVdMNDk2NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAogCiAjaW5jbHVkZSAiaXdsLXNwZWN0cnVtLmgiCkBAIC0yNjMyLDcgKzkxMSw3IEBACiAJCQkgICAgICAgdTggdHlwZSkKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9zcGVjdHJ1bV9jbWQgc3BlY3RydW07Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpyZXM7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlczsKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01ELAogCQkuZGF0YSA9ICh2b2lkICopJnNwZWN0cnVtLApAQCAtMjY3Nyw3ICs5NTYsNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmVzID0gKHN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOworCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWF9PTl9BU1NPQyBjb21tYW5kXG4iKTsKIAkJcmMgPSAtRUlPOwpAQCAtMjcwNywzNTIgKzk4NiwxNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfdHhzdGF0dXNfdG9faWVlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpd2w0OTY1X3R4X2luZm8gKnR4X3N0YSkKLXsKLQotCXR4X3N0YS0+c3RhdHVzLmFja19zaWduYWwgPSAwOwotCXR4X3N0YS0+c3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMDsKLQl0eF9zdGEtPnN0YXR1cy5xdWV1ZV9sZW5ndGggPSAwOwotCXR4X3N0YS0+c3RhdHVzLnF1ZXVlX251bWJlciA9IDA7Ci0KLQlpZiAoaW5faW50ZXJydXB0KCkpCi0JCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywKLQkJCQkJICAgIHR4X3N0YS0+c2tiWzBdLCAmKHR4X3N0YS0+c3RhdHVzKSk7Ci0JZWxzZQotCQlpZWVlODAyMTFfdHhfc3RhdHVzKHByaXYtPmh3LAotCQkJCSAgICB0eF9zdGEtPnNrYlswXSwgJih0eF9zdGEtPnN0YXR1cykpOwotCi0JdHhfc3RhLT5za2JbMF0gPSBOVUxMOwotfQotCi0vKioKLSAqIGl3bDQ5NjVfdHhfcXVldWVfcmVjbGFpbSAtIFJlY2xhaW0gVHggcXVldWUgZW50cmllcyBhbHJlYWR5IFR4J2QKLSAqCi0gKiBXaGVuIEZXIGFkdmFuY2VzICdSJyBpbmRleCwgYWxsIGVudHJpZXMgYmV0d2VlbiBvbGQgYW5kIG5ldyAnUicgaW5kZXgKLSAqIG5lZWQgdG8gYmUgcmVjbGFpbWVkLiBBcyByZXN1bHQsIHNvbWUgZnJlZSBzcGFjZSBmb3Jtcy4gIElmIHRoZXJlIGlzCi0gKiBlbm91Z2ggZnJlZSBzcGFjZSAoPiBsb3cgbWFyayksIHdha2UgdGhlIHN0YWNrIHRoYXQgZmVlZHMgdXMuCi0gKi8KLWludCBpd2w0OTY1X3R4X3F1ZXVlX3JlY2xhaW0oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLCBpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKLQlzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0JaW50IG5mcmVlZCA9IDA7Ci0KLQlpZiAoKGluZGV4ID49IHEtPm5fYmQpIHx8ICh4Ml9xdWV1ZV91c2VkKHEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHEgaWQgKCVkKSwgaW5kZXggJWQsICIKLQkJCSAgImlzIG91dCBvZiByYW5nZSBbMC0lZF0gJWQgJWQuXG4iLCB0eHFfaWQsCi0JCQkgIGluZGV4LCBxLT5uX2JkLCBxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yIChpbmRleCA9IGl3bF9xdWV1ZV9pbmNfd3JhcChpbmRleCwgcS0+bl9iZCk7Ci0JCXEtPnJlYWRfcHRyICE9IGluZGV4OwotCQlxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKLQkJaWYgKHR4cV9pZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgewotCQkJaXdsNDk2NV90eHN0YXR1c190b19pZWVlKHByaXYsCi0JCQkJCSYodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXSkpOwotCQkJaXdsNDk2NV9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKLQkJfSBlbHNlIGlmIChuZnJlZWQgPiAxKSB7Ci0JCQlJV0xfRVJST1IoIkhDTUQgc2tpcHBlZDogaW5kZXggKCVkKSAlZCAlZFxuIiwgaW5kZXgsCi0JCQkJCXEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQkJfQotCQluZnJlZWQrKzsKLQl9Ci0KLS8qCWlmIChpd2w0OTY1X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmsgJiYgKHR4cV9pZCA+PSAwKSAmJgotCQkJKHR4cV9pZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgJiYKLQkJCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCB0eHFfaWQpOyAqLwotCi0KLQlyZXR1cm4gbmZyZWVkOwotfQotCi1zdGF0aWMgaW50IGl3bDQ5NjVfaXNfdHhfc3VjY2Vzcyh1MzIgc3RhdHVzKQotewotCXN0YXR1cyAmPSBUWF9TVEFUVVNfTVNLOwotCXJldHVybiAoc3RhdHVzID09IFRYX1NUQVRVU19TVUNDRVNTKQotCSAgICB8fCAoc3RhdHVzID09IFRYX1NUQVRVU19ESVJFQ1RfRE9ORSk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBHZW5lcmljIFJYIGhhbmRsZXIgaW1wbGVtZW50YXRpb25zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCi1zdGF0aWMgaW5saW5lIGludCBpd2w0OTY1X2dldF9yYV9zdGFfaWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQorc3RhdGljIHZvaWQgaXdsX3J4X3JlcGx5X2FsaXZlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpCi0JCXJldHVybiBJV0xfQVBfSUQ7Ci0JZWxzZSB7Ci0JCXU4ICpkYSA9IGllZWU4MDIxMV9nZXRfREEoaGRyKTsKLQkJcmV0dXJuIGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGRhKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaXdsNDk2NV90eF9xdWV1ZV9nZXRfaGRyKAotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwgaW50IGlkeCkKLXsKLQlpZiAocHJpdi0+dHhxW3R4cV9pZF0udHhiW2lkeF0uc2tiWzBdKQotCQlyZXR1cm4gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcHJpdi0+dHhxW3R4cV9pZF0uCi0JCQkJdHhiW2lkeF0uc2tiWzBdLT5kYXRhOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBpd2w0OTY1X2dldF9zY2Rfc3NuKHN0cnVjdCBpd2w0OTY1X3R4X3Jlc3AgKnR4X3Jlc3ApCi17Ci0JX19sZTMyICpzY2Rfc3NuID0gKF9fbGUzMiAqKSgodTMyICopJnR4X3Jlc3AtPnN0YXR1cyArCi0JCQkJdHhfcmVzcC0+ZnJhbWVfY291bnQpOwotCXJldHVybiBsZTMyX3RvX2NwdSgqc2NkX3NzbikgJiBNQVhfU047Ci0KLX0KLQotLyoqCi0gKiBpd2w0OTY1X3R4X3N0YXR1c19yZXBseV90eCAtIEhhbmRsZSBUeCByc3Buc2UgZm9yIGZyYW1lcyBpbiBhZ2dyZWdhdGlvbiBxdWV1ZQotICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfdHhfc3RhdHVzX3JlcGx5X3R4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV9odF9hZ2cgKmFnZywKLQkJCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV90eF9yZXNwX2FnZyAqdHhfcmVzcCwKLQkJCQkgICAgICB1MTYgc3RhcnRfaWR4KQotewotCXUxNiBzdGF0dXM7Ci0Jc3RydWN0IGFnZ190eF9zdGF0dXMgKmZyYW1lX3N0YXR1cyA9ICZ0eF9yZXNwLT5zdGF0dXM7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnR4X3N0YXR1cyA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IE5VTEw7Ci0JaW50IGksIHNoOwotCWludCB0eHFfaWQsIGlkeDsKLQl1MTYgc2VxOwotCi0JaWYgKGFnZy0+d2FpdF9mb3JfYmEpCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiZ290IHR4IHJlc3BvbnNlIHcvbyBibG9jay1hY2tcbiIpOwotCi0JYWdnLT5mcmFtZV9jb3VudCA9IHR4X3Jlc3AtPmZyYW1lX2NvdW50OwotCWFnZy0+c3RhcnRfaWR4ID0gc3RhcnRfaWR4OwotCWFnZy0+cmF0ZV9uX2ZsYWdzID0gbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKTsKLQlhZ2ctPmJpdG1hcCA9IDA7Ci0KLQkvKiAjIGZyYW1lcyBhdHRlbXB0ZWQgYnkgVHggY29tbWFuZCAqLwotCWlmIChhZ2ctPmZyYW1lX2NvdW50ID09IDEpIHsKLQkJLyogT25seSBvbmUgZnJhbWUgd2FzIGF0dGVtcHRlZDsgbm8gYmxvY2stYWNrIHdpbGwgYXJyaXZlICovCi0JCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGZyYW1lX3N0YXR1c1swXS5zdGF0dXMpOwotCQlzZXEgID0gbGUxNl90b19jcHUoZnJhbWVfc3RhdHVzWzBdLnNlcXVlbmNlKTsKLQkJaWR4ID0gU0VRX1RPX0lOREVYKHNlcSk7Ci0JCXR4cV9pZCA9IFNFUV9UT19RVUVVRShzZXEpOwotCi0JCS8qIEZJWE1FOiBjb2RlIHJlcGV0aXRpb24gKi8KLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZUNudCA9ICVkLCBTdGFydElkeD0lZCBpZHg9JWRcbiIsCi0JCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgYWdnLT5zdGFydF9pZHgsIGlkeCk7Ci0KLQkJdHhfc3RhdHVzID0gJihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5zdGF0dXMpOwotCQl0eF9zdGF0dXMtPnJldHJ5X2NvdW50ID0gdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZTsKLQkJdHhfc3RhdHVzLT5xdWV1ZV9udW1iZXIgPSBzdGF0dXMgJiAweGZmOwotCQl0eF9zdGF0dXMtPnF1ZXVlX2xlbmd0aCA9IHR4X3Jlc3AtPmZhaWx1cmVfcnRzOwotCQl0eF9zdGF0dXMtPmNvbnRyb2wuZmxhZ3MgJj0gfklFRUU4MDIxMV9UWENUTF9BTVBEVTsKLQkJdHhfc3RhdHVzLT5mbGFncyA9IGl3bDQ5NjVfaXNfdHhfc3VjY2VzcyhzdGF0dXMpPwotCQkJSUVFRTgwMjExX1RYX1NUQVRVU19BQ0sgOiAwOwotCQlpd2w0OTY1X2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsCi0JCQkJCSAgICAgbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKSwKLQkJCQkJICAgICAmdHhfc3RhdHVzLT5jb250cm9sKTsKLQkJLyogRklYTUU6IGNvZGUgcmVwZXRpdGlvbiBlbmQgKi8KLQotCQlJV0xfREVCVUdfVFhfUkVQTFkoIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKLQkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwKLQkJCQlpd2w0OTY1X2h3X2dldF9yYXRlX25fZmxhZ3ModHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKSk7Ci0KLQkJYWdnLT53YWl0X2Zvcl9iYSA9IDA7Ci0JfSBlbHNlIHsKLQkJLyogVHdvIG9yIG1vcmUgZnJhbWVzIHdlcmUgYXR0ZW1wdGVkOyBleHBlY3QgYmxvY2stYWNrICovCi0JCXU2NCBiaXRtYXAgPSAwOwotCQlpbnQgc3RhcnQgPSBhZ2ctPnN0YXJ0X2lkeDsKLQotCQkvKiBDb25zdHJ1Y3QgYml0LW1hcCBvZiBwZW5kaW5nIGZyYW1lcyB3aXRoaW4gVHggd2luZG93ICovCi0JCWZvciAoaSA9IDA7IGkgPCBhZ2ctPmZyYW1lX2NvdW50OyBpKyspIHsKLQkJCXUxNiBzYzsKLQkJCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGZyYW1lX3N0YXR1c1tpXS5zdGF0dXMpOwotCQkJc2VxICA9IGxlMTZfdG9fY3B1KGZyYW1lX3N0YXR1c1tpXS5zZXF1ZW5jZSk7Ci0JCQlpZHggPSBTRVFfVE9fSU5ERVgoc2VxKTsKLQkJCXR4cV9pZCA9IFNFUV9UT19RVUVVRShzZXEpOwotCi0JCQlpZiAoc3RhdHVzICYgKEFHR19UWF9TVEFURV9GRVdfQllURVNfTVNLIHwKLQkJCQkgICAgICBBR0dfVFhfU1RBVEVfQUJPUlRfTVNLKSkKLQkJCQljb250aW51ZTsKLQotCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZUNudCA9ICVkLCB0eHFfaWQ9JWQgaWR4PSVkXG4iLAotCQkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCB0eHFfaWQsIGlkeCk7Ci0KLQkJCWhkciA9IGl3bDQ5NjVfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGlkeCk7Ci0KLQkJCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7Ci0JCQlpZiAoaWR4ICE9IChTRVFfVE9fU04oc2MpICYgMHhmZikpIHsKLQkJCQlJV0xfRVJST1IoIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKLQkJCQkJICAiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAotCQkJCQkgIGlkeCwgU0VRX1RPX1NOKHNjKSwKLQkJCQkJICBoZHItPnNlcV9jdHJsKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0KLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiQUdHIEZyYW1lIGk9JWQgaWR4ICVkIHNlcT0lZFxuIiwKLQkJCQkJICAgaSwgaWR4LCBTRVFfVE9fU04oc2MpKTsKLQotCQkJc2ggPSBpZHggLSBzdGFydDsKLQkJCWlmIChzaCA+IDY0KSB7Ci0JCQkJc2ggPSAoc3RhcnQgLSBpZHgpICsgMHhmZjsKLQkJCQliaXRtYXAgPSBiaXRtYXAgPDwgc2g7Ci0JCQkJc2ggPSAwOwotCQkJCXN0YXJ0ID0gaWR4OwotCQkJfSBlbHNlIGlmIChzaCA8IC02NCkKLQkJCQlzaCAgPSAweGZmIC0gKHN0YXJ0IC0gaWR4KTsKLQkJCWVsc2UgaWYgKHNoIDwgMCkgewotCQkJCXNoID0gc3RhcnQgLSBpZHg7Ci0JCQkJc3RhcnQgPSBpZHg7Ci0JCQkJYml0bWFwID0gYml0bWFwIDw8IHNoOwotCQkJCXNoID0gMDsKLQkJCX0KLQkJCWJpdG1hcCB8PSAoMSA8PCBzaCk7Ci0JCQlJV0xfREVCVUdfVFhfUkVQTFkoInN0YXJ0PSVkIGJpdG1hcD0weCV4XG4iLAotCQkJCQkgICBzdGFydCwgKHUzMikoYml0bWFwICYgMHhGRkZGRkZGRikpOwotCQl9Ci0KLQkJYWdnLT5iaXRtYXAgPSBiaXRtYXA7Ci0JCWFnZy0+c3RhcnRfaWR4ID0gc3RhcnQ7Ci0JCWFnZy0+cmF0ZV9uX2ZsYWdzID0gbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKTsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCVsbHhcbiIsCi0JCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgYWdnLT5zdGFydF9pZHgsCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZ2ctPmJpdG1hcCk7Ci0KLQkJaWYgKGJpdG1hcCkKLQkJCWFnZy0+d2FpdF9mb3JfYmEgPSAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGl3bDQ5NjVfcnhfcmVwbHlfdHggLSBIYW5kbGUgc3RhbmRhcmQgKG5vbi1hZ2dyZWdhdGlvbikgVHggcmVzcG9uc2UKLSAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9yZXBseV90eChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQl1MTYgc2VxdWVuY2UgPSBsZTE2X3RvX2NwdShwa3QtPmhkci5zZXF1ZW5jZSk7Ci0JaW50IHR4cV9pZCA9IFNFUV9UT19RVUVVRShzZXF1ZW5jZSk7Ci0JaW50IGluZGV4ID0gU0VRX1RPX0lOREVYKHNlcXVlbmNlKTsKLQlzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICp0eF9zdGF0dXM7Ci0Jc3RydWN0IGl3bDQ5NjVfdHhfcmVzcCAqdHhfcmVzcCA9ICh2b2lkICopJnBrdC0+dS5yYXdbMF07Ci0JdTMyICBzdGF0dXMgPSBsZTMyX3RvX2NwdSh0eF9yZXNwLT5zdGF0dXMpOwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0JaW50IHRpZCA9IE1BWF9USURfQ09VTlQsIHN0YV9pZCA9IElXTF9JTlZBTElEX1NUQVRJT047Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlfX2xlMTYgKnFjOwotI2VuZGlmCi0KLQlpZiAoKGluZGV4ID49IHR4cS0+cS5uX2JkKSB8fCAoeDJfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgotCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAotCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCi0JCQkgIHR4cS0+cS5yZWFkX3B0cik7Ci0JCXJldHVybjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCWhkciA9IGl3bDQ5NjVfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGluZGV4KTsKLQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0cmwoaGRyKTsKLQotCWlmIChxYykKLQkJdGlkID0gbGUxNl90b19jcHUoKnFjKSAmIDB4ZjsKLQotCXN0YV9pZCA9IGl3bDQ5NjVfZ2V0X3JhX3N0YV9pZChwcml2LCBoZHIpOwotCWlmICh0eHEtPnNjaGVkX3JldHJ5ICYmIHVubGlrZWx5KHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkgewotCQlJV0xfRVJST1IoIlN0YXRpb24gbm90IGtub3duXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh0eHEtPnNjaGVkX3JldHJ5KSB7Ci0JCWNvbnN0IHUzMiBzY2Rfc3NuID0gaXdsNDk2NV9nZXRfc2NkX3Nzbih0eF9yZXNwKTsKLQkJc3RydWN0IGl3bDQ5NjVfaHRfYWdnICphZ2cgPSBOVUxMOwotCi0JCWlmICghcWMpCi0JCQlyZXR1cm47Ci0KLQkJYWdnID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnOwotCi0JCWl3bDQ5NjVfdHhfc3RhdHVzX3JlcGx5X3R4KHByaXYsIGFnZywKLQkJCQkoc3RydWN0IGl3bDQ5NjVfdHhfcmVzcF9hZ2cgKil0eF9yZXNwLCBpbmRleCk7Ci0KLQkJaWYgKCh0eF9yZXNwLT5mcmFtZV9jb3VudCA9PSAxKSAmJgotCQkgICAgIWl3bDQ5NjVfaXNfdHhfc3VjY2VzcyhzdGF0dXMpKSB7Ci0JCQkvKiBUT0RPOiBzZW5kIEJBUiAqLwotCQl9Ci0KLQkJaWYgKHR4cS0+cS5yZWFkX3B0ciAhPSAoc2NkX3NzbiAmIDB4ZmYpKSB7Ci0JCQlpbnQgZnJlZWQ7Ci0JCQlpbmRleCA9IGl3bF9xdWV1ZV9kZWNfd3JhcChzY2Rfc3NuICYgMHhmZiwgdHhxLT5xLm5fYmQpOwotCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSBzY2Rfc3NuICIKLQkJCQkJICAgIiVkIGluZGV4ICVkXG4iLCBzY2Rfc3NuICwgaW5kZXgpOwotCQkJZnJlZWQgPSBpd2w0OTY1X3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7Ci0JCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7Ci0KLQkJCWlmIChpd2w0OTY1X3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrICYmCi0JCQkgICAgdHhxX2lkID49IDAgJiYgcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgotCQkJICAgIGFnZy0+c3RhdGUgIT0gSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBKQotCQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCB0eHFfaWQpOwotCi0JCQlpd2w0OTY1X2NoZWNrX2VtcHR5X2h3X3F1ZXVlKHByaXYsIHN0YV9pZCwgdGlkLCB0eHFfaWQpOwotCQl9Ci0JfSBlbHNlIHsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwotCXR4X3N0YXR1cyA9ICYodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5zdGF0dXMpOwotCi0JdHhfc3RhdHVzLT5yZXRyeV9jb3VudCA9IHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWU7Ci0JdHhfc3RhdHVzLT5xdWV1ZV9udW1iZXIgPSBzdGF0dXM7Ci0JdHhfc3RhdHVzLT5xdWV1ZV9sZW5ndGggPSB0eF9yZXNwLT5idF9raWxsX2NvdW50OwotCXR4X3N0YXR1cy0+cXVldWVfbGVuZ3RoIHw9IHR4X3Jlc3AtPmZhaWx1cmVfcnRzOwotCXR4X3N0YXR1cy0+ZmxhZ3MgPQotCSAgICBpd2w0OTY1X2lzX3R4X3N1Y2Nlc3Moc3RhdHVzKSA/IElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLIDogMDsKLQlpd2w0OTY1X2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIGxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyksCi0JCQkJICAgICAmdHhfc3RhdHVzLT5jb250cm9sKTsKLQotCUlXTF9ERUJVR19UWCgiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHJhdGVfbl9mbGFncyAweCV4ICIKLQkJICAgICAicmV0cmllcyAlZFxuIiwgdHhxX2lkLCBpd2w0OTY1X2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLAotCQkgICAgIHN0YXR1cywgbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKSwKLQkJICAgICB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKLQotCUlXTF9ERUJVR19UWF9SRVBMWSgiVHggcXVldWUgcmVjbGFpbSAlZFxuIiwgaW5kZXgpOwotCWlmIChpbmRleCAhPSAtMSkgewotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0JCWludCBmcmVlZCA9IGl3bDQ5NjVfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKLQotCQlpZiAodGlkICE9IE1BWF9USURfQ09VTlQpCi0JCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7Ci0JCWlmIChpd2w0OTY1X3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrICYmCi0JCQkodHhxX2lkID49IDApICYmCi0JCQlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7Ci0JCWlmICh0aWQgIT0gTUFYX1RJRF9DT1VOVCkKLQkJCWl3bDQ5NjVfY2hlY2tfZW1wdHlfaHdfcXVldWUocHJpdiwgc3RhX2lkLCB0aWQsIHR4cV9pZCk7Ci0jZW5kaWYKLQl9Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KLQotCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7Ci19Ci0KLQotc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9yZXBseV9hbGl2ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsNDk2NV9hbGl2ZV9yZXNwICpwYWxpdmU7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCAqcGFsaXZlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgKnB3b3JrOwogCiAJcGFsaXZlID0gJnBrdC0+dS5hbGl2ZV9mcmFtZTsKQEAgLTMwNjYsMTIgKzEwMDksMTIgQEAKIAkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CiAJCW1lbWNweSgmcHJpdi0+Y2FyZF9hbGl2ZV9pbml0LAogCQkgICAgICAgJnBrdC0+dS5hbGl2ZV9mcmFtZSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9pbml0X2FsaXZlX3Jlc3ApKTsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX2luaXRfYWxpdmVfcmVzcCkpOwogCQlwd29yayA9ICZwcml2LT5pbml0X2FsaXZlX3N0YXJ0OwogCX0gZWxzZSB7CiAJCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CiAJCW1lbWNweSgmcHJpdi0+Y2FyZF9hbGl2ZSwgJnBrdC0+dS5hbGl2ZV9mcmFtZSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9hbGl2ZV9yZXNwKSk7CisJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmFsaXZlX3N0YXJ0OwogCX0KIApAQCAtMzA4NCwxOSArMTAyNywxMCBAQAogCQlJV0xfV0FSTklORygidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcmVwbHlfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0KLQlJV0xfREVCVUdfUlgoIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6IDB4JTAyWFxuIiwgcGt0LT51LnN0YXR1cyk7Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCisJCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAogCUlXTF9FUlJPUigiRXJyb3IgUmVwbHkgdHlwZSAweCUwOFggY21kICVzICgweCUwMlgpICIKIAkJInNlcSAweCUwNFggc2VyIDB4JTA4WFxuIiwKQEAgLTMxMDksMTAgKzEwNDMsMTAgQEAKIAogI2RlZmluZSBUWF9TVEFUVVNfRU5UUlkoeCkgY2FzZSBUWF9TVEFUVVNfRkFJTF8gIyMgeDogcmV0dXJuICN4CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfY3NhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9jc2Eoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgKnJ4b24gPSAodm9pZCAqKSZwcml2LT5hY3RpdmVfcnhvbjsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICh2b2lkICopJnByaXYtPmFjdGl2ZV9yeG9uOwogCXN0cnVjdCBpd2w0OTY1X2NzYV9ub3RpZmljYXRpb24gKmNzYSA9ICYocGt0LT51LmNzYV9ub3RpZik7CiAJSVdMX0RFQlVHXzExSCgiQ1NBIG5vdGlmOiBjaGFubmVsICVkLCBzdGF0dXMgJWRcbiIsCiAJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCksIGxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSk7CkBAIC0zMTIxLDE1ICsxMDU1LDE1IEBACiB9CiAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfc3BlY3RydW1fbWVhc3VyZV9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQorCQkJCQkgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogI2lmZGVmIENPTkZJR19JV0w0OTY1X1NQRUNUUlVNX01FQVNVUkVNRU5UCi0Jc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsNDk2NV9zcGVjdHJ1bV9ub3RpZmljYXRpb24gKnJlcG9ydCA9ICYocGt0LT51LnNwZWN0cnVtX25vdGlmKTsKIAogCWlmICghcmVwb3J0LT5zdGF0ZSkgewotCQlJV0xfREVCVUcoSVdMX0RMXzExSCB8IElXTF9ETF9JTkZPLAotCQkJICAiU3BlY3RydW0gTWVhc3VyZSBOb3RpZmljYXRpb246IFN0YXJ0XG4iKTsKKwkJSVdMX0RFQlVHKElXTF9ETF8xMUgsCisJCQkiU3BlY3RydW0gTWVhc3VyZSBOb3RpZmljYXRpb246IFN0YXJ0XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzEzOSwxMCArMTA3MywxMCBAQAogfQogCiBzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKKwkJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAJc3RydWN0IGl3bDQ5NjVfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKIAlJV0xfREVCVUdfUlgoInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLAogCQkgICAgIHNsZWVwLT5wbV9zbGVlcF9tb2RlLCBzbGVlcC0+cG1fd2FrZXVwX3NyYyk7CkBAIC0zMTUwLDEzICsxMDg0LDEzIEBACiB9CiAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQorCQkJCQkgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAJSVdMX0RFQlVHX1JBRElPKCJEdW1waW5nICVkIGJ5dGVzIG9mIHVuaGFuZGxlZCAiCiAJCQkibm90aWZpY2F0aW9uIGZvciAlczpcbiIsCiAJCQlsZTMyX3RvX2NwdShwa3QtPmxlbiksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCkpOwotCWl3bF9wcmludF9oZXhfZHVtcChJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsIGxlMzJfdG9fY3B1KHBrdC0+bGVuKSk7CisJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SQURJTywgcGt0LT51LnJhdywgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKIH0KIAogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTMxNjYsNyArMTEwMCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKIAogCS8qIFB1bGwgdXBkYXRlZCBBUCBiZWFjb24gZnJvbSBtYWM4MDIxMS4gd2lsbCBmYWlsIGlmIG5vdCBpbiBBUCBtb2RlICovCi0JYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi0+aHcsIHByaXYtPnZpZiwgTlVMTCk7CisJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi0+aHcsIHByaXYtPnZpZik7CiAKIAlpZiAoIWJlYWNvbikgewogCQlJV0xfRVJST1IoInVwZGF0ZSBiZWFjb24gZmFpbGVkXG4iKTsKQEAgLTMxODQsMTcgKzExMTgsMzcgQEAKIAlpd2w0OTY1X3NlbmRfYmVhY29uX2NtZChwcml2KTsKIH0KIAorLyoqCisgKiBpd2w0OTY1X2JnX3N0YXRpc3RpY3NfcGVyaW9kaWMgLSBUaW1lciBjYWxsYmFjayB0byBxdWV1ZSBzdGF0aXN0aWNzCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBwcm92aWRlZCBpbiBvcmRlciB0byBzZW5kIGEgc3RhdGlzdGljcyByZXF1ZXN0LgorICoKKyAqIFRoaXMgdGltZXIgZnVuY3Rpb24gaXMgY29udGludWFsbHkgcmVzZXQgdG8gZXhlY3V0ZSB3aXRoaW4KKyAqIFJFR19SRUNBTElCX1BFUklPRCBzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OCisgKiB3YXMgcmVjZWl2ZWQuICBXZSBuZWVkIHRvIGVuc3VyZSB3ZSByZWNlaXZlIHRoZSBzdGF0aXN0aWNzIGluIG9yZGVyCisgKiB0byB1cGRhdGUgdGhlIHRlbXBlcmF0dXJlIHVzZWQgZm9yIGNhbGlicmF0aW5nIHRoZSBUWFBPV0VSLgorICovCitzdGF0aWMgdm9pZCBpd2w0OTY1X2JnX3N0YXRpc3RpY3NfcGVyaW9kaWModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkYXRhOworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgQ01EX0FTWU5DKTsKK30KKwogc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9iZWFjb25fbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKKwkJCQlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAJc3RydWN0IGl3bDQ5NjVfYmVhY29uX25vdGlmICpiZWFjb24gPSAmKHBrdC0+dS5iZWFjb25fc3RhdHVzKTsKLQl1OCByYXRlID0gaXdsNDk2NV9od19nZXRfcmF0ZShiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnJhdGVfbl9mbGFncyk7CisJdTggcmF0ZSA9IGl3bF9od19nZXRfcmF0ZShiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnJhdGVfbl9mbGFncyk7CiAKIAlJV0xfREVCVUdfUlgoImJlYWNvbiBzdGF0dXMgJXggcmV0cmllcyAlZCBpc3MgJWQgIgogCQkidHNmICVkICVkIHJhdGUgJWRcbiIsCi0JCWxlMzJfdG9fY3B1KGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIuc3RhdHVzKSAmIFRYX1NUQVRVU19NU0ssCisJCWxlMzJfdG9fY3B1KGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIudS5zdGF0dXMpICYgVFhfU1RBVFVTX01TSywKIAkJYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5mYWlsdXJlX2ZyYW1lLAogCQlsZTMyX3RvX2NwdShiZWFjb24tPmlic3NfbWdyX3N0YXR1cyksCiAJCWxlMzJfdG9fY3B1KGJlYWNvbi0+aGlnaF90c2YpLApAQCAtMzIwNiwxMjkgKzExNjAsMTIgQEAKIAkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5iZWFjb25fdXBkYXRlKTsKIH0KIAotLyogU2VydmljZSByZXNwb25zZSB0byBSRVBMWV9TQ0FOX0NNRCAoMHg4MCkgKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcmVwbHlfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDQ5NjVfc2NhbnJlcV9ub3RpZmljYXRpb24gKm5vdGlmID0KLQkgICAgKHN0cnVjdCBpd2w0OTY1X3NjYW5yZXFfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKLQotCUlXTF9ERUJVR19SWCgiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOwotI2VuZGlmCi19Ci0KLS8qIFNlcnZpY2UgU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gKDB4ODIpICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3NjYW5fc3RhcnRfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2w0OTY1X3NjYW5zdGFydF9ub3RpZmljYXRpb24gKm5vdGlmID0KLQkgICAgKHN0cnVjdCBpd2w0OTY1X3NjYW5zdGFydF9ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwotCXByaXYtPnNjYW5fc3RhcnRfdHNmID0gbGUzMl90b19jcHUobm90aWYtPnRzZl9sb3cpOwotCUlXTF9ERUJVR19TQ0FOKCJTY2FuIHN0YXJ0OiAiCi0JCSAgICAgICAiJWQgWzgwMi4xMSVzXSAiCi0JCSAgICAgICAiKFRTRjogMHglMDhYOiUwOFgpIC0gJWQgKGJlYWNvbiB0aW1lciAldSlcbiIsCi0JCSAgICAgICBub3RpZi0+Y2hhbm5lbCwKLQkJICAgICAgIG5vdGlmLT5iYW5kID8gImJnIiA6ICJhIiwKLQkJICAgICAgIG5vdGlmLT50c2ZfaGlnaCwKLQkJICAgICAgIG5vdGlmLT50c2ZfbG93LCBub3RpZi0+c3RhdHVzLCBub3RpZi0+YmVhY29uX3RpbWVyKTsKLX0KLQotLyogU2VydmljZSBTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OICgweDgzKSAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9zY2FuX3Jlc3VsdHNfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDQ5NjVfc2NhbnJlc3VsdHNfbm90aWZpY2F0aW9uICpub3RpZiA9Ci0JICAgIChzdHJ1Y3QgaXdsNDk2NV9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwotCi0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gY2gucmVzOiAiCi0JCSAgICAgICAiJWQgWzgwMi4xMSVzXSAiCi0JCSAgICAgICAiKFRTRjogMHglMDhYOiUwOFgpIC0gJWQgIgotCQkgICAgICAgImVsYXBzZWQ9JWx1IHVzZWMgKCVkbXMgc2luY2UgbGFzdClcbiIsCi0JCSAgICAgICBub3RpZi0+Y2hhbm5lbCwKLQkJICAgICAgIG5vdGlmLT5iYW5kID8gImJnIiA6ICJhIiwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfaGlnaCksCi0JCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyksCi0JCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+c3RhdGlzdGljc1swXSksCi0JCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdykgLSBwcml2LT5zY2FuX3N0YXJ0X3RzZiwKLQkJICAgICAgIGppZmZpZXNfdG9fbXNlY3MoZWxhcHNlZF9qaWZmaWVzCi0JCQkJCShwcml2LT5sYXN0X3NjYW5famlmZmllcywgamlmZmllcykpKTsKLQotCXByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzID0gamlmZmllczsKLQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7Ci19Ci0KLS8qIFNlcnZpY2UgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04gKDB4ODQpICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3NjYW5fY29tcGxldGVfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2w0OTY1X3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gKnNjYW5fbm90aWYgPSAodm9pZCAqKXBrdC0+dS5yYXc7Ci0KLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjb21wbGV0ZTogJWQgY2hhbm5lbHMgKFRTRiAweCUwOFg6JTA4WCkgLSAlZFxuIiwKLQkJICAgICAgIHNjYW5fbm90aWYtPnNjYW5uZWRfY2hhbm5lbHMsCi0JCSAgICAgICBzY2FuX25vdGlmLT50c2ZfbG93LAotCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2hpZ2gsIHNjYW5fbm90aWYtPnN0YXR1cyk7Ci0KLQkvKiBUaGUgSFcgaXMgbm8gbG9uZ2VyIHNjYW5uaW5nICovCi0JY2xlYXJfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIFRoZSBzY2FuIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIGNhbWUgaW4sIHNvIGtpbGwgdGhhdCB0aW1lci4uLiAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwotCi0JSVdMX0RFQlVHX0lORk8oIlNjYW4gcGFzcyBvbiAlc0dIeiB0b29rICVkbXNcbiIsCi0JCSAgICAgICAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkgPwotCQkJCQkJIjIuNCIgOiAiNS4yIiwKLQkJICAgICAgIGppZmZpZXNfdG9fbXNlY3MoZWxhcHNlZF9qaWZmaWVzCi0JCQkJCShwcml2LT5zY2FuX3Bhc3Nfc3RhcnQsIGppZmZpZXMpKSk7Ci0KLQkvKiBSZW1vdmUgdGhpcyBzY2FubmVkIGJhbmQgZnJvbSB0aGUgbGlzdCBvZiBwZW5kaW5nCi0JICogYmFuZHMgdG8gc2NhbiwgYmFuZCBHIHByZWNlZGVzIEEgaW4gb3JkZXIgb2Ygc2Nhbm5pbmcKLQkgKiBhcyBzZWVuIGluIGl3bF9iZ19yZXF1ZXN0X3NjYW4gKi8KLQlpZiAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkKLQkJcHJpdi0+c2Nhbl9iYW5kcyAmPSB+QklUKElFRUU4MDIxMV9CQU5EXzJHSFopOwotCWVsc2UgaWYgKHByaXYtPnNjYW5fYmFuZHMgJiAgQklUKElFRUU4MDIxMV9CQU5EXzVHSFopKQotCQlwcml2LT5zY2FuX2JhbmRzICY9IH5CSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7Ci0KLQkvKiBJZiBhIHJlcXVlc3QgdG8gYWJvcnQgd2FzIGdpdmVuLCBvciB0aGUgc2NhbiBkaWQgbm90IHN1Y2NlZWQKLQkgKiB0aGVuIHdlIHJlc2V0IHRoZSBzY2FuIHN0YXRlIG1hY2hpbmUgYW5kIHRlcm1pbmF0ZSwKLQkgKiByZS1xdWV1aW5nIGFub3RoZXIgc2NhbiBpZiBvbmUgaGFzIGJlZW4gcmVxdWVzdGVkICovCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQWJvcnRlZCBzY2FuIGNvbXBsZXRlZC5cbiIpOwotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCX0gZWxzZSB7Ci0JCS8qIElmIHRoZXJlIGFyZSBtb3JlIGJhbmRzIG9uIHRoaXMgc2NhbiBwYXNzIHJlc2NoZWR1bGUgKi8KLQkJaWYgKHByaXYtPnNjYW5fYmFuZHMpCi0JCQlnb3RvIHJlc2NoZWR1bGU7Ci0JfQotCi0JcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwotCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLQlJV0xfREVCVUdfSU5GTygiU2V0dGluZyBzY2FuIHRvIG9mZlxuIik7Ci0KLQljbGVhcl9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQotCUlXTF9ERUJVR19JTkZPKCJTY2FuIHRvb2sgJWRtc1xuIiwKLQkJamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMocHJpdi0+c2Nhbl9zdGFydCwgamlmZmllcykpKTsKLQotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCi0JcmV0dXJuOwotCi1yZXNjaGVkdWxlOgotCXByaXYtPnNjYW5fcGFzc19zdGFydCA9IGppZmZpZXM7Ci0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4pOwotfQotCiAvKiBIYW5kbGUgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUgdGhhdCBjYXJkJ3MgcG93ZXIgc3RhdGUgaXMgY2hhbmdpbmcKICAqIGR1ZSB0byBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGNyaXRpY2FsIHRlbXBlcmF0dXJlIFJGS0lMTCAqLwogc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9jYXJkX3N0YXRlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQorCQkJCSAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXUzMiBmbGFncyA9IGxlMzJfdG9fY3B1KHBrdC0+dS5jYXJkX3N0YXRlX25vdGlmLmZsYWdzKTsKIAl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHByaXYtPnN0YXR1czsKIApAQCAtMzM4Myw3ICsxMjIwLDcgQEAKIAkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKIAogCWlmICghKGZsYWdzICYgUlhPTl9DQVJEX0RJU0FCTEVEKSkKLQkJaXdsNDk2NV9zY2FuX2NhbmNlbChwcml2KTsKKwkJaXdsX3NjYW5fY2FuY2VsKHByaXYpOwogCiAJaWYgKCh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnN0YXR1cykgIT0KIAkgICAgIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgfHwKQEAgLTM0MDMsMTAgKzEyNDAsOSBAQAogICogVGhpcyBmdW5jdGlvbiBjaGFpbnMgaW50byB0aGUgaGFyZHdhcmUgc3BlY2lmaWMgZmlsZXMgZm9yIHRoZW0gdG8gc2V0dXAKICAqIGFueSBoYXJkd2FyZSBzcGVjaWZpYyBoYW5kbGVycyBhcyB3ZWxsLgogICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3NldHVwX3J4X2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bF9zZXR1cF9yeF9oYW5kbGVycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfQUxJVkVdID0gaXdsNDk2NV9yeF9yZXBseV9hbGl2ZTsKLQlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9BRERfU1RBXSA9IGl3bDQ5NjVfcnhfcmVwbHlfYWRkX3N0YTsKKwlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9BTElWRV0gPSBpd2xfcnhfcmVwbHlfYWxpdmU7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfRVJST1JdID0gaXdsNDk2NV9yeF9yZXBseV9lcnJvcjsKIAlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsNDk2NV9yeF9jc2E7CiAJcHJpdi0+cnhfaGFuZGxlcnNbU1BFQ1RSVU1fTUVBU1VSRV9OT1RJRklDQVRJT05dID0KQEAgLTM0MjEsNTAwICsxMjU3LDQ3IEBACiAJICogc3RhdGlzdGljcyByZXF1ZXN0IGZyb20gdGhlIGhvc3QgYXMgd2VsbCBhcyBmb3IgdGhlIHBlcmlvZGljCiAJICogc3RhdGlzdGljcyBub3RpZmljYXRpb25zIChhZnRlciByZWNlaXZlZCBiZWFjb25zKSBmcm9tIHRoZSB1Q29kZS4KIAkgKi8KLQlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9TVEFUSVNUSUNTX0NNRF0gPSBpd2w0OTY1X2h3X3J4X3N0YXRpc3RpY3M7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU1RBVElTVElDU19OT1RJRklDQVRJT05dID0gaXdsNDk2NV9od19yeF9zdGF0aXN0aWNzOworCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NUQVRJU1RJQ1NfQ01EXSA9IGl3bF9yeF9zdGF0aXN0aWNzOworCXByaXYtPnJ4X2hhbmRsZXJzW1NUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OXSA9IGl3bF9yeF9zdGF0aXN0aWNzOwogCi0JcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfU0NBTl9DTURdID0gaXdsNDk2NV9yeF9yZXBseV9zY2FuOwotCXByaXYtPnJ4X2hhbmRsZXJzW1NDQU5fU1RBUlRfTk9USUZJQ0FUSU9OXSA9IGl3bDQ5NjVfcnhfc2Nhbl9zdGFydF9ub3RpZjsKLQlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OXSA9Ci0JICAgIGl3bDQ5NjVfcnhfc2Nhbl9yZXN1bHRzX25vdGlmOwotCXByaXYtPnJ4X2hhbmRsZXJzW1NDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OXSA9Ci0JICAgIGl3bDQ5NjVfcnhfc2Nhbl9jb21wbGV0ZV9ub3RpZjsKKwlpd2xfc2V0dXBfcnhfc2Nhbl9oYW5kbGVycyhwcml2KTsKKworCS8qIHN0YXR1cyBjaGFuZ2UgaGFuZGxlciAqLwogCXByaXYtPnJ4X2hhbmRsZXJzW0NBUkRfU1RBVEVfTk9USUZJQ0FUSU9OXSA9IGl3bDQ5NjVfcnhfY2FyZF9zdGF0ZV9ub3RpZjsKLQlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9UWF0gPSBpd2w0OTY1X3J4X3JlcGx5X3R4OwogCisJcHJpdi0+cnhfaGFuZGxlcnNbTUlTU0VEX0JFQUNPTlNfTk9USUZJQ0FUSU9OXSA9CisJICAgIGl3bF9yeF9taXNzZWRfYmVhY29uX25vdGlmOworCS8qIFJ4IGhhbmRsZXJzICovCisJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfUlhfUEhZX0NNRF0gPSBpd2xfcnhfcmVwbHlfcnhfcGh5OworCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1JYX01QRFVfQ01EXSA9IGl3bF9yeF9yZXBseV9yeDsKKwkvKiBibG9jayBhY2sgKi8KKwlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9DT01QUkVTU0VEX0JBXSA9IGl3bF9yeF9yZXBseV9jb21wcmVzc2VkX2JhOwogCS8qIFNldCB1cCBoYXJkd2FyZSBzcGVjaWZpYyBSeCBoYW5kbGVycyAqLwotCWl3bDQ5NjVfaHdfcnhfaGFuZGxlcl9zZXR1cChwcml2KTsKLX0KLQotLyoqCi0gKiBpd2w0OTY1X3R4X2NtZF9jb21wbGV0ZSAtIFB1bGwgdW51c2VkIGJ1ZmZlcnMgb2ZmIHRoZSBxdWV1ZSBhbmQgcmVjbGFpbSB0aGVtCi0gKiBAcnhiOiBSeCBidWZmZXIgdG8gcmVjbGFpbQotICoKLSAqIElmIGFuIFJ4IGJ1ZmZlciBoYXMgYW4gYXN5bmMgY2FsbGJhY2sgYXNzb2NpYXRlZCB3aXRoIGl0IHRoZSBjYWxsYmFjawotICogd2lsbCBiZSBleGVjdXRlZC4gIFRoZSBhdHRhY2hlZCBza2IgKGlmIHByZXNlbnQpIHdpbGwgb25seSBiZSBmcmVlZAotICogaWYgdGhlIGNhbGxiYWNrIHJldHVybnMgMQotICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3R4X2NtZF9jb21wbGV0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXUxNiBzZXF1ZW5jZSA9IGxlMTZfdG9fY3B1KHBrdC0+aGRyLnNlcXVlbmNlKTsKLQlpbnQgdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcXVlbmNlKTsKLQlpbnQgaW5kZXggPSBTRVFfVE9fSU5ERVgoc2VxdWVuY2UpOwotCWludCBodWdlID0gc2VxdWVuY2UgJiBTRVFfSFVHRV9GUkFNRTsKLQlpbnQgY21kX2luZGV4OwotCXN0cnVjdCBpd2xfY21kICpjbWQ7Ci0KLQkvKiBJZiBhIFR4IGNvbW1hbmQgaXMgYmVpbmcgaGFuZGxlZCBhbmQgaXQgaXNuJ3QgaW4gdGhlIGFjdHVhbAotCSAqIGNvbW1hbmQgcXVldWUgdGhlbiB0aGVyZSBhIGNvbW1hbmQgcm91dGluZyBidWcgaGFzIGJlZW4gaW50cm9kdWNlZAotCSAqIGluIHRoZSBxdWV1ZSBtYW5hZ2VtZW50IGNvZGUuICovCi0JaWYgKHR4cV9pZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJSVdMX0VSUk9SKCJFcnJvciB3cm9uZyBjb21tYW5kIHF1ZXVlICVkIGNvbW1hbmQgaWQgMHglWFxuIiwKLQkJCSAgdHhxX2lkLCBwa3QtPmhkci5jbWQpOwotCUJVR19PTih0eHFfaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pOwotCi0JY21kX2luZGV4ID0gZ2V0X2NtZF9pbmRleCgmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLCBpbmRleCwgaHVnZSk7Ci0JY21kID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pbmRleF07Ci0KLQkvKiBJbnB1dCBlcnJvciBjaGVja2luZyBpcyBkb25lIHdoZW4gY29tbWFuZHMgYXJlIGFkZGVkIHRvIHF1ZXVlLiAqLwotCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpIHsKLQkJY21kLT5tZXRhLnNvdXJjZS0+dS5za2IgPSByeGItPnNrYjsKLQkJcnhiLT5za2IgPSBOVUxMOwotCX0gZWxzZSBpZiAoY21kLT5tZXRhLnUuY2FsbGJhY2sgJiYKLQkJICAgIWNtZC0+bWV0YS51LmNhbGxiYWNrKHByaXYsIGNtZCwgcnhiLT5za2IpKQotCQlyeGItPnNrYiA9IE5VTEw7Ci0KLQlpd2w0OTY1X3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7Ci0KLQlpZiAoIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpKSB7Ci0JCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKiogUlgtRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogUnggdGhlb3J5IG9mIG9wZXJhdGlvbgotICoKLSAqIERyaXZlciBhbGxvY2F0ZXMgYSBjaXJjdWxhciBidWZmZXIgb2YgUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvcnMgKFJCRHMpLAotICogZWFjaCBvZiB3aGljaCBwb2ludCB0byBSZWNlaXZlIEJ1ZmZlcnMgdG8gYmUgZmlsbGVkIGJ5IDQ5NjUuICBUaGVzZSBnZXQKLSAqIHVzZWQgbm90IG9ubHkgZm9yIFJ4IGZyYW1lcywgYnV0IGZvciBhbnkgY29tbWFuZCByZXNwb25zZSBvciBub3RpZmljYXRpb24KLSAqIGZyb20gdGhlIDQ5NjUuICBUaGUgZHJpdmVyIGFuZCA0OTY1IG1hbmFnZSB0aGUgUnggYnVmZmVycyBieSBtZWFucwotICogb2YgaW5kZXhlcyBpbnRvIHRoZSBjaXJjdWxhciBidWZmZXIuCi0gKgotICogUnggUXVldWUgSW5kZXhlcwotICogVGhlIGhvc3QvZmlybXdhcmUgc2hhcmUgdHdvIGluZGV4IHJlZ2lzdGVycyBmb3IgbWFuYWdpbmcgdGhlIFJ4IGJ1ZmZlcnMuCi0gKgotICogVGhlIFJFQUQgaW5kZXggbWFwcyB0byB0aGUgZmlyc3QgcG9zaXRpb24gdGhhdCB0aGUgZmlybXdhcmUgbWF5IGJlIHdyaXRpbmcKLSAqIHRvIC0tIHRoZSBkcml2ZXIgY2FuIHJlYWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGlzIHBvc2l0aW9uIGFuZCBnZXQKLSAqIGdvb2QgZGF0YS4KLSAqIFRoZSBSRUFEIGluZGV4IGlzIG1hbmFnZWQgYnkgdGhlIGZpcm13YXJlIG9uY2UgdGhlIGNhcmQgaXMgZW5hYmxlZC4KLSAqCi0gKiBUaGUgV1JJVEUgaW5kZXggbWFwcyB0byB0aGUgbGFzdCBwb3NpdGlvbiB0aGUgZHJpdmVyIGhhcyByZWFkIGZyb20gLS0gdGhlCi0gKiBwb3NpdGlvbiBwcmVjZWRpbmcgV1JJVEUgaXMgdGhlIGxhc3Qgc2xvdCB0aGUgZmlybXdhcmUgY2FuIHBsYWNlIGEgcGFja2V0LgotICoKLSAqIFRoZSBxdWV1ZSBpcyBlbXB0eSAobm8gZ29vZCBkYXRhKSBpZiBXUklURSA9IFJFQUQgLSAxLCBhbmQgaXMgZnVsbCBpZgotICogV1JJVEUgPSBSRUFELgotICoKLSAqIER1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIGhvc3Qgc2V0cyB1cCB0aGUgUkVBRCBxdWV1ZSBwb3NpdGlvbiB0byB0aGUgZmlyc3QKLSAqIElOREVYIHBvc2l0aW9uLCBhbmQgV1JJVEUgdG8gdGhlIGxhc3QgKFJFQUQgLSAxIHdyYXBwZWQpCi0gKgotICogV2hlbiB0aGUgZmlybXdhcmUgcGxhY2VzIGEgcGFja2V0IGluIGEgYnVmZmVyLCBpdCB3aWxsIGFkdmFuY2UgdGhlIFJFQUQgaW5kZXgKLSAqIGFuZCBmaXJlIHRoZSBSWCBpbnRlcnJ1cHQuICBUaGUgZHJpdmVyIGNhbiB0aGVuIHF1ZXJ5IHRoZSBSRUFEIGluZGV4IGFuZAotICogcHJvY2VzcyBhcyBtYW55IHBhY2tldHMgYXMgcG9zc2libGUsIG1vdmluZyB0aGUgV1JJVEUgaW5kZXggZm9yd2FyZCBhcyBpdAotICogcmVzZXRzIHRoZSBSeCBxdWV1ZSBidWZmZXJzIHdpdGggbmV3IG1lbW9yeS4KLSAqCi0gKiBUaGUgbWFuYWdlbWVudCBpbiB0aGUgZHJpdmVyIGlzIGFzIGZvbGxvd3M6Ci0gKiArIEEgbGlzdCBvZiBwcmUtYWxsb2NhdGVkIFNLQnMgaXMgc3RvcmVkIGluIGl3bC0+cnhxLT5yeF9mcmVlLiAgV2hlbgotICogICBpd2wtPnJ4cS0+ZnJlZV9jb3VudCBkcm9wcyB0byBvciBiZWxvdyBSWF9MT1dfV0FURVJNQVJLLCB3b3JrIGlzIHNjaGVkdWxlZAotICogICB0byByZXBsZW5pc2ggdGhlIGl3bC0+cnhxLT5yeF9mcmVlLgotICogKyBJbiBpd2w0OTY1X3J4X3JlcGxlbmlzaCAoc2NoZWR1bGVkKSBpZiAncHJvY2Vzc2VkJyAhPSAncmVhZCcgdGhlbiB0aGUKLSAqICAgaXdsLT5yeHEgaXMgcmVwbGVuaXNoZWQgYW5kIHRoZSBSRUFEIElOREVYIGlzIHVwZGF0ZWQgKHVwZGF0aW5nIHRoZQotICogICAncHJvY2Vzc2VkJyBhbmQgJ3JlYWQnIGRyaXZlciBpbmRleGVzIGFzIHdlbGwpCi0gKiArIEEgcmVjZWl2ZWQgcGFja2V0IGlzIHByb2Nlc3NlZCBhbmQgaGFuZGVkIHRvIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjaywKLSAqICAgZGV0YWNoZWQgZnJvbSB0aGUgaXdsLT5yeHEuICBUaGUgZHJpdmVyICdwcm9jZXNzZWQnIGluZGV4IGlzIHVwZGF0ZWQuCi0gKiArIFRoZSBIb3N0L0Zpcm13YXJlIGl3bC0+cnhxIGlzIHJlcGxlbmlzaGVkIGF0IHRhc2tsZXQgdGltZSBmcm9tIHRoZSByeF9mcmVlCi0gKiAgIGxpc3QuIElmIHRoZXJlIGFyZSBubyBhbGxvY2F0ZWQgYnVmZmVycyBpbiBpd2wtPnJ4cS0+cnhfZnJlZSwgdGhlIFJFQUQKLSAqICAgSU5ERVggaXMgbm90IGluY3JlbWVudGVkIGFuZCBpd2wtPnN0YXR1cyhSWF9TVEFMTEVEKSBpcyBzZXQuICBJZiB0aGVyZQotICogICB3ZXJlIGVub3VnaCBmcmVlIGJ1ZmZlcnMgYW5kIFJYX1NUQUxMRUQgaXMgc2V0IGl0IGlzIGNsZWFyZWQuCi0gKgotICoKLSAqIERyaXZlciBzZXF1ZW5jZToKLSAqCi0gKiBpd2w0OTY1X3J4X3F1ZXVlX2FsbG9jKCkgICBBbGxvY2F0ZXMgcnhfZnJlZQotICogaXdsNDk2NV9yeF9yZXBsZW5pc2goKSAgICAgUmVwbGVuaXNoZXMgcnhfZnJlZSBsaXN0IGZyb20gcnhfdXNlZCwgYW5kIGNhbGxzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpd2w0OTY1X3J4X3F1ZXVlX3Jlc3RvY2sKLSAqIGl3bDQ5NjVfcnhfcXVldWVfcmVzdG9jaygpIE1vdmVzIGF2YWlsYWJsZSBidWZmZXJzIGZyb20gcnhfZnJlZSBpbnRvIFJ4Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZSwgdXBkYXRlcyBmaXJtd2FyZSBwb2ludGVycywgYW5kIHVwZGF0ZXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBXUklURSBpbmRleC4gIElmIGluc3VmZmljaWVudCByeF9mcmVlIGJ1ZmZlcnMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBhdmFpbGFibGUsIHNjaGVkdWxlcyBpd2w0OTY1X3J4X3JlcGxlbmlzaAotICoKLSAqIC0tIGVuYWJsZSBpbnRlcnJ1cHRzIC0tCi0gKiBJU1IgLSBpd2w0OTY1X3J4KCkgICAgICAgICBEZXRhY2ggaXdsNDk2NV9yeF9tZW1fYnVmZmVycyBmcm9tIHBvb2wgdXAgdG8gdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFEIElOREVYLCBkZXRhY2hpbmcgdGhlIFNLQiBmcm9tIHRoZSBwb29sLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZXMgdGhlIHBhY2tldCBidWZmZXIgZnJvbSBxdWV1ZSB0byByeF91c2VkLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbHMgaXdsNDk2NV9yeF9xdWV1ZV9yZXN0b2NrIHRvIHJlZmlsbCBhbnkgZW1wdHkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzLgotICogLi4uCi0gKgotICovCi0KLS8qKgotICogaXdsNDk2NV9yeF9xdWV1ZV9zcGFjZSAtIFJldHVybiBudW1iZXIgb2YgZnJlZSBzbG90cyBhdmFpbGFibGUgaW4gcXVldWUuCi0gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9yeF9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsNDk2NV9yeF9xdWV1ZSAqcSkKLXsKLQlpbnQgcyA9IHEtPnJlYWQgLSBxLT53cml0ZTsKLQlpZiAocyA8PSAwKQotCQlzICs9IFJYX1FVRVVFX1NJWkU7Ci0JLyoga2VlcCBzb21lIGJ1ZmZlciB0byBub3QgY29uZnVzZSBmdWxsIGFuZCBlbXB0eSBxdWV1ZSAqLwotCXMgLT0gMjsKLQlpZiAocyA8IDApCi0JCXMgPSAwOwotCXJldHVybiBzOwotfQotCi0vKioKLSAqIGl3bDQ5NjVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFVwZGF0ZSB0aGUgd3JpdGUgcG9pbnRlciBmb3IgdGhlIFJYIHF1ZXVlCi0gKi8KLWludCBpd2w0OTY1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV9yeF9xdWV1ZSAqcSkKLXsKLQl1MzIgcmVnID0gMDsKLQlpbnQgcmMgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHEtPm5lZWRfdXBkYXRlID09IDApCi0JCWdvdG8gZXhpdF91bmxvY2s7Ci0KLQkvKiBJZiBwb3dlci1zYXZpbmcgaXMgaW4gdXNlLCBtYWtlIHN1cmUgZGV2aWNlIGlzIGF3YWtlICovCi0JaWYgKHRlc3RfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpKSB7Ci0JCXJlZyA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCi0JCWlmIChyZWcgJiBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQKSB7Ci0JCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlnb3RvIGV4aXRfdW5sb2NrOwotCQl9Ci0KLQkJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCQlpZiAocmMpCi0JCQlnb3RvIGV4aXRfdW5sb2NrOwotCi0JCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLwotCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwKLQkJCQkgICAgIHEtPndyaXRlICYgfjB4Nyk7Ci0JCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQkvKiBFbHNlIGRldmljZSBpcyBhc3N1bWVkIHRvIGJlIGF3YWtlICovCi0JfSBlbHNlCi0JCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLwotCQlpd2xfd3JpdGUzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLCBxLT53cml0ZSAmIH4weDcpOwotCi0KLQlxLT5uZWVkX3VwZGF0ZSA9IDA7Ci0KLSBleGl0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGl3bDQ5NjVfZG1hX2FkZHIycmJkX3B0ciAtIGNvbnZlcnQgYSBETUEgYWRkcmVzcyB0byBhIHVDb2RlIHJlYWQgYnVmZmVyIHB0cgotICovCi1zdGF0aWMgaW5saW5lIF9fbGUzMiBpd2w0OTY1X2RtYV9hZGRyMnJiZF9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2FkZHIpCi17Ci0JcmV0dXJuIGNwdV90b19sZTMyKCh1MzIpKGRtYV9hZGRyID4+IDgpKTsKLX0KLQotCi0vKioKLSAqIGl3bDQ5NjVfcnhfcXVldWVfcmVzdG9jayAtIHJlZmlsbCBSWCBxdWV1ZSBmcm9tIHByZS1hbGxvY2F0ZWQgcG9vbAotICoKLSAqIElmIHRoZXJlIGFyZSBzbG90cyBpbiB0aGUgUlggcXVldWUgdGhhdCBuZWVkIHRvIGJlIHJlc3RvY2tlZCwKLSAqIGFuZCB3ZSBoYXZlIGZyZWUgcHJlLWFsbG9jYXRlZCBidWZmZXJzLCBmaWxsIHRoZSByYW5rcyBhcyBtdWNoCi0gKiBhcyB3ZSBjYW4sIHB1bGxpbmcgZnJvbSByeF9mcmVlLgotICoKLSAqIFRoaXMgbW92ZXMgdGhlICd3cml0ZScgaW5kZXggZm9yd2FyZCB0byBjYXRjaCB1cCB3aXRoICdwcm9jZXNzZWQnLCBhbmQKLSAqIGFsc28gdXBkYXRlcyB0aGUgbWVtb3J5IGFkZHJlc3MgaW4gdGhlIGZpcm13YXJlIHRvIHJlZmVyZW5jZSB0aGUgbmV3Ci0gKiB0YXJnZXQgYnVmZmVyLgotICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKLQlzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgd3JpdGUsIHJjOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCXdyaXRlID0gcnhxLT53cml0ZSAmIH4weDc7Ci0Jd2hpbGUgKChpd2w0OTY1X3J4X3F1ZXVlX3NwYWNlKHJ4cSkgPiAwKSAmJiAocnhxLT5mcmVlX2NvdW50KSkgewotCQkvKiBHZXQgbmV4dCBmcmVlIFJ4IGJ1ZmZlciwgcmVtb3ZlIGZyb20gZnJlZSBsaXN0ICovCi0JCWVsZW1lbnQgPSByeHEtPnJ4X2ZyZWUubmV4dDsKLQkJcnhiID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyLCBsaXN0KTsKLQkJbGlzdF9kZWwoZWxlbWVudCk7Ci0KLQkJLyogUG9pbnQgdG8gUnggYnVmZmVyIHZpYSBuZXh0IFJCRCBpbiBjaXJjdWxhciBidWZmZXIgKi8KLQkJcnhxLT5iZFtyeHEtPndyaXRlXSA9IGl3bDQ5NjVfZG1hX2FkZHIycmJkX3B0cihwcml2LCByeGItPmRtYV9hZGRyKTsKLQkJcnhxLT5xdWV1ZVtyeHEtPndyaXRlXSA9IHJ4YjsKLQkJcnhxLT53cml0ZSA9IChyeHEtPndyaXRlICsgMSkgJiBSWF9RVUVVRV9NQVNLOwotCQlyeHEtPmZyZWVfY291bnQtLTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7Ci0JLyogSWYgdGhlIHByZS1hbGxvY2F0ZWQgYnVmZmVyIHBvb2wgaXMgZHJvcHBpbmcgbG93LCBzY2hlZHVsZSB0bwotCSAqIHJlZmlsbCBpdCAqLwotCWlmIChyeHEtPmZyZWVfY291bnQgPD0gUlhfTE9XX1dBVEVSTUFSSykKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yeF9yZXBsZW5pc2gpOwotCi0KLQkvKiBJZiB3ZSd2ZSBhZGRlZCBtb3JlIHNwYWNlIGZvciB0aGUgZmlybXdhcmUgdG8gcGxhY2UgZGF0YSwgdGVsbCBpdC4KLQkgKiBJbmNyZW1lbnQgZGV2aWNlJ3Mgd3JpdGUgcG9pbnRlciBpbiBtdWx0aXBsZXMgb2YgOC4gKi8KLQlpZiAoKHdyaXRlICE9IChyeHEtPndyaXRlICYgfjB4NykpCi0JICAgIHx8IChhYnMocnhxLT53cml0ZSAtIHJ4cS0+cmVhZCkgPiA3KSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7Ci0JCXJ4cS0+bmVlZF91cGRhdGUgPSAxOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHEtPmxvY2ssIGZsYWdzKTsKLQkJcmMgPSBpd2w0OTY1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgcnhxKTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDQ5NjVfcnhfcmVwbGVuaXNoIC0gTW92ZSBhbGwgdXNlZCBwYWNrZXQgZnJvbSByeF91c2VkIHRvIHJ4X2ZyZWUKLSAqCi0gKiBXaGVuIG1vdmluZyB0byByeF9mcmVlIGFuIFNLQiBpcyBhbGxvY2F0ZWQgZm9yIHRoZSBzbG90LgotICoKLSAqIEFsc28gcmVzdG9jayB0aGUgUnggcXVldWUgdmlhIGl3bDQ5NjVfcnhfcXVldWVfcmVzdG9jay4KLSAqIFRoaXMgaXMgY2FsbGVkIGFzIGEgc2NoZWR1bGVkIHdvcmsgaXRlbSAoZXhjZXB0IGZvciBkdXJpbmcgaW5pdGlhbGl6YXRpb24pCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfYWxsb2NhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwotCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmcnhxLT5yeF91c2VkKSkgewotCQllbGVtZW50ID0gcnhxLT5yeF91c2VkLm5leHQ7Ci0JCXJ4YiA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciwgbGlzdCk7Ci0KLQkJLyogQWxsb2MgYSBuZXcgcmVjZWl2ZSBidWZmZXIgKi8KLQkJcnhiLT5za2IgPQotCQkgICAgYWxsb2Nfc2tiKHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSwKLQkJCQlfX0dGUF9OT1dBUk4gfCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFyeGItPnNrYikgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9DUklUIERSVl9OQU1FCi0JCQkJICAgICAgICI6IENhbiBub3QgYWxsb2NhdGUgU0tCIGJ1ZmZlcnNcbiIpOwotCQkJLyogV2UgZG9uJ3QgcmVzY2hlZHVsZSByZXBsZW5pc2ggd29yayBoZXJlIC0tIHdlIHdpbGwKLQkJCSAqIGNhbGwgdGhlIHJlc3RvY2sgbWV0aG9kIGFuZCBpZiBpdCBzdGlsbCBuZWVkcwotCQkJICogbW9yZSBidWZmZXJzIGl0IHdpbGwgc2NoZWR1bGUgcmVwbGVuaXNoICovCi0JCQlicmVhazsKLQkJfQotCQlwcml2LT5hbGxvY19yeGJfc2tiKys7Ci0JCWxpc3RfZGVsKGVsZW1lbnQpOwotCi0JCS8qIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIFJCL1NLQiAqLwotCQlyeGItPmRtYV9hZGRyID0KLQkJICAgIHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+c2tiLT5kYXRhLAotCQkJICAgcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlsaXN0X2FkZF90YWlsKCZyeGItPmxpc3QsICZyeHEtPnJ4X2ZyZWUpOwotCQlyeHEtPmZyZWVfY291bnQrKzsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+cnhfaGFuZGxlcl9zZXR1cChwcml2KTsKIH0KIAogLyoKICAqIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGlsZSBwcml2LT5sb2NrIGlzIGxvY2tlZAogKi8KLXN0YXRpYyB2b2lkIF9faXdsNDk2NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIF9faXdsX3J4X3JlcGxlbmlzaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKLQotCWl3bDQ5NjVfcnhfYWxsb2NhdGUocHJpdik7Ci0JaXdsNDk2NV9yeF9xdWV1ZV9yZXN0b2NrKHByaXYpOworCWl3bF9yeF9hbGxvY2F0ZShwcml2KTsKKwlpd2xfcnhfcXVldWVfcmVzdG9jayhwcml2KTsKIH0KIAogCi12b2lkIGl3bDQ5NjVfcnhfcmVwbGVuaXNoKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaXdsNDk2NV9yeF9hbGxvY2F0ZShwcml2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsNDk2NV9yeF9xdWV1ZV9yZXN0b2NrKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLX0KLQotLyogQXNzdW1lcyB0aGF0IHRoZSBza2IgZmllbGQgb2YgdGhlIGJ1ZmZlcnMgaW4gJ3Bvb2wnIGlzIGtlcHQgYWNjdXJhdGUuCi0gKiBJZiBhbiBTS0IgaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBQT09MIG5lZWRzIHRvIGhhdmUgaXRzIFNLQiBzZXQgdG8gTlVMTAotICogVGhpcyBmcmVlIHJvdXRpbmUgd2Fsa3MgdGhlIGxpc3Qgb2YgUE9PTCBlbnRyaWVzIGFuZCBpZiBTS0IgaXMgc2V0IHRvCi0gKiBub24gTlVMTCBpdCBpcyB1bm1hcHBlZCBhbmQgZnJlZWQKLSAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfcXVldWUgKnJ4cSkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfU0laRSArIFJYX0ZSRUVfQlVGRkVSUzsgaSsrKSB7Ci0JCWlmIChyeHEtPnBvb2xbaV0uc2tiICE9IE5VTEwpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJCQkJIHJ4cS0+cG9vbFtpXS5kbWFfYWRkciwKLQkJCQkJIHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlkZXZfa2ZyZWVfc2tiKHJ4cS0+cG9vbFtpXS5za2IpOwotCQl9Ci0JfQotCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgcnhxLT5iZCwKLQkJCSAgICByeHEtPmRtYV9hZGRyKTsKLQlyeHEtPmJkID0gTlVMTDsKLX0KLQotaW50IGl3bDQ5NjVfcnhfcXVldWVfYWxsb2Moc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnJ4cS0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfZnJlZSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfdXNlZCk7Ci0KLQkvKiBBbGxvYyB0aGUgY2lyY3VsYXIgYnVmZmVyIG9mIFJlYWQgQnVmZmVyIERlc2NyaXB0b3JzIChSQkRzKSAqLwotCXJ4cS0+YmQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCAmcnhxLT5kbWFfYWRkcik7Ci0JaWYgKCFyeHEtPmJkKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIEZpbGwgdGhlIHJ4X3VzZWQgcXVldWUgd2l0aCBfYWxsXyBvZiB0aGUgUnggYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBSWF9GUkVFX0JVRkZFUlMgKyBSWF9RVUVVRV9TSVpFOyBpKyspCi0JCWxpc3RfYWRkX3RhaWwoJnJ4cS0+cG9vbFtpXS5saXN0LCAmcnhxLT5yeF91c2VkKTsKLQotCS8qIFNldCB1cyBzbyB0aGF0IHdlIGhhdmUgcHJvY2Vzc2VkIGFuZCB1c2VkIGFsbCBidWZmZXJzLCBidXQgaGF2ZQotCSAqIG5vdCByZXN0b2NrZWQgdGhlIFJ4IHF1ZXVlIHdpdGggZnJlc2ggYnVmZmVycyAqLwotCXJ4cS0+cmVhZCA9IHJ4cS0+d3JpdGUgPSAwOwotCXJ4cS0+ZnJlZV9jb3VudCA9IDA7Ci0JcnhxLT5uZWVkX3VwZGF0ZSA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaXdsNDk2NV9yeF9xdWV1ZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlICpyeHEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfZnJlZSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfdXNlZCk7Ci0JLyogRmlsbCB0aGUgcnhfdXNlZCBxdWV1ZSB3aXRoIF9hbGxfIG9mIHRoZSBSeCBidWZmZXJzICovCi0JZm9yIChpID0gMDsgaSA8IFJYX0ZSRUVfQlVGRkVSUyArIFJYX1FVRVVFX1NJWkU7IGkrKykgewotCQkvKiBJbiB0aGUgcmVzZXQgZnVuY3Rpb24sIHRoZXNlIGJ1ZmZlcnMgbWF5IGhhdmUgYmVlbiBhbGxvY2F0ZWQKLQkJICogdG8gYW4gU0tCLCBzbyB3ZSBuZWVkIHRvIHVubWFwIGFuZCBmcmVlIHBvdGVudGlhbCBzdG9yYWdlICovCi0JCWlmIChyeHEtPnBvb2xbaV0uc2tiICE9IE5VTEwpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJCQkJIHJ4cS0+cG9vbFtpXS5kbWFfYWRkciwKLQkJCQkJIHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwcml2LT5hbGxvY19yeGJfc2tiLS07Ci0JCQlkZXZfa2ZyZWVfc2tiKHJ4cS0+cG9vbFtpXS5za2IpOwotCQkJcnhxLT5wb29sW2ldLnNrYiA9IE5VTEw7Ci0JCX0KLQkJbGlzdF9hZGRfdGFpbCgmcnhxLT5wb29sW2ldLmxpc3QsICZyeHEtPnJ4X3VzZWQpOwotCX0KLQotCS8qIFNldCB1cyBzbyB0aGF0IHdlIGhhdmUgcHJvY2Vzc2VkIGFuZCB1c2VkIGFsbCBidWZmZXJzLCBidXQgaGF2ZQotCSAqIG5vdCByZXN0b2NrZWQgdGhlIFJ4IHF1ZXVlIHdpdGggZnJlc2ggYnVmZmVycyAqLwotCXJ4cS0+cmVhZCA9IHJ4cS0+d3JpdGUgPSAwOwotCXJ4cS0+ZnJlZV9jb3VudCA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7Ci19Ci0KLS8qIENvbnZlcnQgbGluZWFyIHNpZ25hbC10by1ub2lzZSByYXRpbyBpbnRvIGRCICovCi1zdGF0aWMgdTggcmF0aW8yZEJbMTAwXSA9IHsKLS8qCSAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICovCi0JIDAsICAwLCAgNiwgMTAsIDEyLCAxNCwgMTYsIDE3LCAxOCwgMTksIC8qIDAwIC0gMDkgKi8KLQkyMCwgMjEsIDIyLCAyMiwgMjMsIDIzLCAyNCwgMjUsIDI2LCAyNiwgLyogMTAgLSAxOSAqLwotCTI2LCAyNiwgMjYsIDI3LCAyNywgMjgsIDI4LCAyOCwgMjksIDI5LCAvKiAyMCAtIDI5ICovCi0JMjksIDMwLCAzMCwgMzAsIDMxLCAzMSwgMzEsIDMxLCAzMiwgMzIsIC8qIDMwIC0gMzkgKi8KLQkzMiwgMzIsIDMyLCAzMywgMzMsIDMzLCAzMywgMzMsIDM0LCAzNCwgLyogNDAgLSA0OSAqLwotCTM0LCAzNCwgMzQsIDM0LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAvKiA1MCAtIDU5ICovCi0JMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM3LCAzNywgMzcsIC8qIDYwIC0gNjkgKi8KLQkzNywgMzcsIDM3LCAzNywgMzcsIDM4LCAzOCwgMzgsIDM4LCAzOCwgLyogNzAgLSA3OSAqLwotCTM4LCAzOCwgMzgsIDM4LCAzOCwgMzksIDM5LCAzOSwgMzksIDM5LCAvKiA4MCAtIDg5ICovCi0JMzksIDM5LCAzOSwgMzksIDM5LCA0MCwgNDAsIDQwLCA0MCwgNDAgIC8qIDkwIC0gOTkgKi8KLX07Ci0KLS8qIENhbGN1bGF0ZXMgYSByZWxhdGl2ZSBkQiB2YWx1ZSBmcm9tIGEgcmF0aW8gb2YgbGluZWFyCi0gKiAgIChpLmUuIG5vdCBkQikgc2lnbmFsIGxldmVscy4KLSAqIENvbnZlcnNpb24gYXNzdW1lcyB0aGF0IGxldmVscyBhcmUgdm9sdGFnZXMgKDIwKmxvZyksIG5vdCBwb3dlcnMgKDEwKmxvZykuICovCi1pbnQgaXdsNDk2NV9jYWxjX2RiX2Zyb21fcmF0aW8oaW50IHNpZ19yYXRpbykKLXsKLQkvKiAxMDAwOjEgb3IgaGlnaGVyIGp1c3QgcmVwb3J0IGFzIDYwIGRCICovCi0JaWYgKHNpZ19yYXRpbyA+PSAxMDAwKQotCQlyZXR1cm4gNjA7Ci0KLQkvKiAxMDA6MSBvciBoaWdoZXIsIGRpdmlkZSBieSAxMCBhbmQgdXNlIHRhYmxlLAotCSAqICAgYWRkIDIwIGRCIHRvIG1ha2UgdXAgZm9yIGRpdmlkZSBieSAxMCAqLwotCWlmIChzaWdfcmF0aW8gPj0gMTAwKQotCQlyZXR1cm4gKDIwICsgKGludClyYXRpbzJkQltzaWdfcmF0aW8vMTBdKTsKLQotCS8qIFdlIHNob3VsZG4ndCBzZWUgdGhpcyAqLwotCWlmIChzaWdfcmF0aW8gPCAxKQotCQlyZXR1cm4gMDsKLQotCS8qIFVzZSB0YWJsZSBmb3IgcmF0aW9zIDE6MSAtIDk5OjEgKi8KLQlyZXR1cm4gKGludClyYXRpbzJkQltzaWdfcmF0aW9dOwotfQotCi0jZGVmaW5lIFBFUkZFQ1RfUlNTSSAoLTIwKSAvKiBkQm0gKi8KLSNkZWZpbmUgV09SU1RfUlNTSSAoLTk1KSAgIC8qIGRCbSAqLwotI2RlZmluZSBSU1NJX1JBTkdFIChQRVJGRUNUX1JTU0kgLSBXT1JTVF9SU1NJKQotCi0vKiBDYWxjdWxhdGUgYW4gaW5kaWNhdGlvbiBvZiByeCBzaWduYWwgcXVhbGl0eSAoYSBwZXJjZW50YWdlLCBub3QgZEJtISkuCi0gKiBTZWUgaHR0cDovL3d3dy5jZXMuY2xlbXNvbi5lZHUvbGludXgvc2lnbmFsX3F1YWxpdHkuc2h0bWwgZm9yIGluZm8KLSAqICAgYWJvdXQgZm9ybXVsYXMgdXNlZCBiZWxvdy4gKi8KLWludCBpd2w0OTY1X2NhbGNfc2lnX3F1YWwoaW50IHJzc2lfZGJtLCBpbnQgbm9pc2VfZGJtKQotewotCWludCBzaWdfcXVhbDsKLQlpbnQgZGVncmFkYXRpb24gPSBQRVJGRUNUX1JTU0kgLSByc3NpX2RibTsKLQotCS8qIElmIHdlIGdldCBhIG5vaXNlIG1lYXN1cmVtZW50LCB1c2Ugc2lnbmFsLXRvLW5vaXNlIHJhdGlvIChTTlIpCi0JICogYXMgaW5kaWNhdG9yOyBmb3JtdWxhIGlzIChzaWduYWwgZGJtIC0gbm9pc2UgZGJtKS4KLQkgKiBTTlIgYXQgb3IgYWJvdmUgNDAgaXMgYSBncmVhdCBzaWduYWwgKDEwMCUpLgotCSAqIEJlbG93IHRoYXQsIHNjYWxlIHRvIGZpdCBTTlIgb2YgMCAtIDQwIGRCIHdpdGhpbiAwIC0gMTAwJSBpbmRpY2F0b3IuCi0JICogV2Vha2VzdCB1c2FibGUgc2lnbmFsIGlzIHVzdWFsbHkgMTAgLSAxNSBkQiBTTlIuICovCi0JaWYgKG5vaXNlX2RibSkgewotCQlpZiAocnNzaV9kYm0gLSBub2lzZV9kYm0gPj0gNDApCi0JCQlyZXR1cm4gMTAwOwotCQllbHNlIGlmIChyc3NpX2RibSA8IG5vaXNlX2RibSkKLQkJCXJldHVybiAwOwotCQlzaWdfcXVhbCA9ICgocnNzaV9kYm0gLSBub2lzZV9kYm0pICogNSkgLyAyOwotCi0JLyogRWxzZSB1c2UganVzdCB0aGUgc2lnbmFsIGxldmVsLgotCSAqIFRoaXMgZm9ybXVsYSBpcyBhIGxlYXN0IHNxdWFyZXMgZml0IG9mIGRhdGEgcG9pbnRzIGNvbGxlY3RlZCBhbmQKLQkgKiAgIGNvbXBhcmVkIHdpdGggYSByZWZlcmVuY2Ugc3lzdGVtIHRoYXQgaGFkIGEgcGVyY2VudGFnZSAoJSkgZGlzcGxheQotCSAqICAgZm9yIHNpZ25hbCBxdWFsaXR5LiAqLwotCX0gZWxzZQotCQlzaWdfcXVhbCA9ICgxMDAgKiAoUlNTSV9SQU5HRSAqIFJTU0lfUkFOR0UpIC0gZGVncmFkYXRpb24gKgotCQkJICAgICgxNSAqIFJTU0lfUkFOR0UgKyA2MiAqIGRlZ3JhZGF0aW9uKSkgLwotCQkJICAgKFJTU0lfUkFOR0UgKiBSU1NJX1JBTkdFKTsKLQotCWlmIChzaWdfcXVhbCA+IDEwMCkKLQkJc2lnX3F1YWwgPSAxMDA7Ci0JZWxzZSBpZiAoc2lnX3F1YWwgPCAxKQotCQlzaWdfcXVhbCA9IDA7Ci0KLQlyZXR1cm4gc2lnX3F1YWw7Ci19Ci0KIC8qKgotICogaXdsNDk2NV9yeF9oYW5kbGUgLSBNYWluIGVudHJ5IGZ1bmN0aW9uIGZvciByZWNlaXZpbmcgcmVzcG9uc2VzIGZyb20gdUNvZGUKKyAqIGl3bF9yeF9oYW5kbGUgLSBNYWluIGVudHJ5IGZ1bmN0aW9uIGZvciByZWNlaXZpbmcgcmVzcG9uc2VzIGZyb20gdUNvZGUKICAqCiAgKiBVc2VzIHRoZSBwcml2LT5yeF9oYW5kbGVycyBjYWxsYmFjayBmdW5jdGlvbiBhcnJheSB0byBpbnZva2UKICAqIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVycywgaW5jbHVkaW5nIGNvbW1hbmQgcmVzcG9uc2VzLAogICogZnJhbWUtcmVjZWl2ZWQgbm90aWZpY2F0aW9ucywgYW5kIG90aGVyIG5vdGlmaWNhdGlvbnMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3ZvaWQgaXdsX3J4X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiOwotCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0OwotCXN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOworCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3Q7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKIAl1MzIgciwgaTsKIAlpbnQgcmVjbGFpbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzkyMywxNCArMTMwNiwxNCBAQAogCiAJLyogdUNvZGUncyByZWFkIGluZGV4IChzdG9yZWQgaW4gc2hhcmVkIERSQU0pIGluZGljYXRlcyB0aGUgbGFzdCBSeAogCSAqIGJ1ZmZlciB0aGF0IHRoZSBkcml2ZXIgbWF5IHByb2Nlc3MgKGxhc3QgYnVmZmVyIGZpbGxlZCBieSB1Y29kZSkuICovCi0JciA9IGl3bDQ5NjVfaHdfZ2V0X3J4X3JlYWQocHJpdik7CisJciA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNoYXJlZF9tZW1fcnhfaWR4KHByaXYpOwogCWkgPSByeHEtPnJlYWQ7CiAKIAkvKiBSeCBpbnRlcnJ1cHQsIGJ1dCBub3RoaW5nIHNlbnQgZnJvbSB1Q29kZSAqLwogCWlmIChpID09IHIpCi0JCUlXTF9ERUJVRyhJV0xfRExfUlggfCBJV0xfRExfSVNSLCAiciA9ICVkLCBpID0gJWRcbiIsIHIsIGkpOworCQlJV0xfREVCVUcoSVdMX0RMX1JYLCAiciA9ICVkLCBpID0gJWRcbiIsIHIsIGkpOwogCi0JaWYgKGl3bDQ5NjVfcnhfcXVldWVfc3BhY2UocnhxKSA+IChSWF9RVUVVRV9TSVpFIC8gMikpCisJaWYgKGl3bF9yeF9xdWV1ZV9zcGFjZShyeHEpID4gKFJYX1FVRVVFX1NJWkUgLyAyKSkKIAkJZmlsbF9yeCA9IDE7CiAKIAl3aGlsZSAoaSAhPSByKSB7CkBAIC0zOTQ2LDcgKzEzMjksNyBAQAogCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocHJpdi0+cGNpX2RldiwgcnhiLT5kbWFfYWRkciwKIAkJCQkJICAgIHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSwKIAkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCXBrdCA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKwkJcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAKIAkJLyogUmVjbGFpbSBhIGNvbW1hbmQgYnVmZmVyIG9ubHkgaWYgdGhpcyBwYWNrZXQgaXMgYSByZXNwb25zZQogCQkgKiAgIHRvIGEgKGRyaXZlci1vcmlnaW5hdGVkKSBjb21tYW5kLgpAQCAtMzk2NSwxMyArMTM0OCwxMiBAQAogCQkgKiAgIGhhbmRsZSB0aG9zZSB0aGF0IG5lZWQgaGFuZGxpbmcgdmlhIGZ1bmN0aW9uIGluCiAJCSAqICAgcnhfaGFuZGxlcnMgdGFibGUuICBTZWUgaXdsNDk2NV9zZXR1cF9yeF9oYW5kbGVycygpICovCiAJCWlmIChwcml2LT5yeF9oYW5kbGVyc1twa3QtPmhkci5jbWRdKSB7Ci0JCQlJV0xfREVCVUcoSVdMX0RMX0hPU1RfQ09NTUFORCB8IElXTF9ETF9SWCB8IElXTF9ETF9JU1IsCi0JCQkJInIgPSAlZCwgaSA9ICVkLCAlcywgMHglMDJ4XG4iLCByLCBpLAotCQkJCWdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCksIHBrdC0+aGRyLmNtZCk7CisJCQlJV0xfREVCVUcoSVdMX0RMX1JYLCAiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsCisJCQkJaSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwgcGt0LT5oZHIuY21kKTsKIAkJCXByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0gKHByaXYsIHJ4Yik7CiAJCX0gZWxzZSB7CiAJCQkvKiBObyBoYW5kbGluZyBuZWVkZWQgKi8KLQkJCUlXTF9ERUJVRyhJV0xfRExfSE9TVF9DT01NQU5EIHwgSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwKKwkJCUlXTF9ERUJVRyhJV0xfRExfUlgsCiAJCQkJInIgJWQgaSAlZCBObyBoYW5kbGVyIG5lZWRlZCBmb3IgJXMsIDB4JTAyeFxuIiwKIAkJCQlyLCBpLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpLAogCQkJCXBrdC0+aGRyLmNtZCk7CkBAIC0zOTgyLDcgKzEzNjQsNyBAQAogCQkJICogZmlyZSBvZmYgdGhlIChwb3NzaWJseSkgYmxvY2tpbmcgaXdsX3NlbmRfY21kKCkKIAkJCSAqIGFzIHdlIHJlY2xhaW0gdGhlIGRyaXZlciBjb21tYW5kIHF1ZXVlICovCiAJCQlpZiAocnhiICYmIHJ4Yi0+c2tiKQotCQkJCWl3bDQ5NjVfdHhfY21kX2NvbXBsZXRlKHByaXYsIHJ4Yik7CisJCQkJaXdsX3R4X2NtZF9jb21wbGV0ZShwcml2LCByeGIpOwogCQkJZWxzZQogCQkJCUlXTF9XQVJOSU5HKCJDbGFpbSBudWxsIHJ4Yj9cbiIpOwogCQl9CkBAIC00MDA5LDcgKzEzOTEsNyBAQAogCQkJY291bnQrKzsKIAkJCWlmIChjb3VudCA+PSA4KSB7CiAJCQkJcHJpdi0+cnhxLnJlYWQgPSBpOwotCQkJCV9faXdsNDk2NV9yeF9yZXBsZW5pc2gocHJpdik7CisJCQkJX19pd2xfcnhfcmVwbGVuaXNoKHByaXYpOwogCQkJCWNvdW50ID0gMDsKIAkJCX0KIAkJfQpAQCAtNDAxNyw2MiArMTM5OSwxNyBAQAogCiAJLyogQmFja3RyYWNrIG9uZSBlbnRyeSAqLwogCXByaXYtPnJ4cS5yZWFkID0gaTsKLQlpd2w0OTY1X3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7Ci19Ci0KLS8qKgotICogaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyIC0gU2VuZCBuZXcgd3JpdGUgaW5kZXggdG8gaGFyZHdhcmUKLSAqLwotc3RhdGljIGludCBpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSkKLXsKLQl1MzIgcmVnID0gMDsKLQlpbnQgcmMgPSAwOwotCWludCB0eHFfaWQgPSB0eHEtPnEuaWQ7Ci0KLQlpZiAodHhxLT5uZWVkX3VwZGF0ZSA9PSAwKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBpZiB3ZSdyZSB0cnlpbmcgdG8gc2F2ZSBwb3dlciAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkgewotCQkvKiB3YWtlIHVwIG5pYyBpZiBpdCdzIHBvd2VyZWQgZG93biAuLi4KLQkJICogdUNvZGUgd2lsbCB3YWtlIHVwLCBhbmQgaW50ZXJydXB0IHVzIGFnYWluLCBzbyBuZXh0Ci0JCSAqIHRpbWUgd2UnbGwgc2tpcCB0aGlzIHBhcnQuICovCi0JCXJlZyA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCi0JCWlmIChyZWcgJiBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQKSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiUmVxdWVzdGluZyB3YWtldXAsIEdQMSA9IDB4JXhcbiIsIHJlZyk7Ci0JCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQkvKiByZXN0b3JlIHRoaXMgcXVldWUncyBwYXJhbWV0ZXJzIGluIG5pYyBoYXJkd2FyZS4gKi8KLQkJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0JCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCi0JCQkJICAgICB0eHEtPnEud3JpdGVfcHRyIHwgKHR4cV9pZCA8PCA4KSk7Ci0JCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQkvKiBlbHNlIG5vdCBpbiBwb3dlci1zYXZlIG1vZGUsIHVDb2RlIHdpbGwgbmV2ZXIgc2xlZXAgd2hlbiB3ZSdyZQotCSAqIHRyeWluZyB0byB0eCAoZHVyaW5nIFJGS0lMTCwgd2UncmUgbm90IHRyeWluZyB0byB0eCkuICovCi0JfSBlbHNlCi0JCWl3bF93cml0ZTMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwKLQkJCSAgICB0eHEtPnEud3JpdGVfcHRyIHwgKHR4cV9pZCA8PCA4KSk7Ci0KLQl0eHEtPm5lZWRfdXBkYXRlID0gMDsKLQotCXJldHVybiByYzsKKwlpd2xfcnhfcXVldWVfcmVzdG9jayhwcml2KTsKIH0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgKnJ4b24pCitzdGF0aWMgdm9pZCBpd2w0OTY1X3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogeworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJSVdMX0RFQlVHX1JBRElPKCJSWCBDT05GSUc6XG4iKTsKLQlpd2xfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7CisJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SQURJTywgKHU4ICopIHJ4b24sIHNpemVvZigqcnhvbikpOwogCUlXTF9ERUJVR19SQURJTygidTE2IGNoYW5uZWw6IDB4JXhcbiIsIGxlMTZfdG9fY3B1KHJ4b24tPmNoYW5uZWwpKTsKIAlJV0xfREVCVUdfUkFESU8oInUzMiBmbGFnczogMHglMDhYXG4iLCBsZTMyX3RvX2NwdShyeG9uLT5mbGFncykpOwogCUlXTF9ERUJVR19SQURJTygidTMyIGZpbHRlcl9mbGFnczogMHglMDh4XG4iLApAQCAtNDExOCwxNzMgKzE0NTUsNiBAQAogCUlXTF9ERUJVR19JU1IoIkRpc2FibGVkIGludGVycnVwdHNcbiIpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqZGVzY19sb29rdXAoaW50IGkpCi17Ci0Jc3dpdGNoIChpKSB7Ci0JY2FzZSAxOgotCQlyZXR1cm4gIkZBSUwiOwotCWNhc2UgMjoKLQkJcmV0dXJuICJCQURfUEFSQU0iOwotCWNhc2UgMzoKLQkJcmV0dXJuICJCQURfQ0hFQ0tTVU0iOwotCWNhc2UgNDoKLQkJcmV0dXJuICJOTUlfSU5URVJSVVBUIjsKLQljYXNlIDU6Ci0JCXJldHVybiAiU1lTQVNTRVJUIjsKLQljYXNlIDY6Ci0JCXJldHVybiAiRkFUQUxfRVJST1IiOwotCX0KLQotCXJldHVybiAiVU5LTk9XTiI7Ci19Ci0KLSNkZWZpbmUgRVJST1JfU1RBUlRfT0ZGU0VUICAoMSAqIHNpemVvZih1MzIpKQotI2RlZmluZSBFUlJPUl9FTEVNX1NJWkUgICAgICg3ICogc2l6ZW9mKHUzMikpCi0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQl1MzIgZGF0YTIsIGxpbmU7Ci0JdTMyIGRlc2MsIHRpbWUsIGNvdW50LCBiYXNlLCBkYXRhMTsKLQl1MzIgYmxpbmsxLCBibGluazIsIGlsaW5rMSwgaWxpbmsyOwotCWludCByYzsKLQotCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmVycm9yX2V2ZW50X3RhYmxlX3B0cik7Ci0KLQlpZiAoIXByaXYtPmNmZy0+b3BzLT5saWItPmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIoYmFzZSkpIHsKLQkJSVdMX0VSUk9SKCJOb3QgdmFsaWQgZXJyb3IgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKLQkJcmV0dXJuOwotCX0KLQotCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmMpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwotCi0JaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewotCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOwotCQlJV0xfRVJST1IoIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLCBwcml2LT5zdGF0dXMsIGNvdW50KTsKLQl9Ci0KLQlkZXNjID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDEgKiBzaXplb2YodTMyKSk7Ci0JYmxpbmsxID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDMgKiBzaXplb2YodTMyKSk7Ci0JYmxpbmsyID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDQgKiBzaXplb2YodTMyKSk7Ci0JaWxpbmsxID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDUgKiBzaXplb2YodTMyKSk7Ci0JaWxpbmsyID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDYgKiBzaXplb2YodTMyKSk7Ci0JZGF0YTEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNyAqIHNpemVvZih1MzIpKTsKLQlkYXRhMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA4ICogc2l6ZW9mKHUzMikpOwotCWxpbmUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOSAqIHNpemVvZih1MzIpKTsKLQl0aW1lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDExICogc2l6ZW9mKHUzMikpOwotCi0JSVdMX0VSUk9SKCJEZXNjICAgICAgICAgICAgICAgVGltZSAgICAgICAiCi0JCSAgImRhdGExICAgICAgZGF0YTIgICAgICBsaW5lXG4iKTsKLQlJV0xfRVJST1IoIiUtMTNzICgjJWQpICUwMTB1IDB4JTA4WCAweCUwOFggJXVcbiIsCi0JCSAgZGVzY19sb29rdXAoZGVzYyksIGRlc2MsIHRpbWUsIGRhdGExLCBkYXRhMiwgbGluZSk7Ci0JSVdMX0VSUk9SKCJibGluazEgIGJsaW5rMiAgaWxpbmsxICBpbGluazJcbiIpOwotCUlXTF9FUlJPUigiMHglMDVYIDB4JTA1WCAweCUwNVggMHglMDVYXG4iLCBibGluazEsIGJsaW5rMiwKLQkJICBpbGluazEsIGlsaW5rMik7Ci0KLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotfQotCi0jZGVmaW5lIEVWRU5UX1NUQVJUX09GRlNFVCAgKDQgKiBzaXplb2YodTMyKSkKLQotLyoqCi0gKiBpd2w0OTY1X3ByaW50X2V2ZW50X2xvZyAtIER1bXAgZXJyb3IgZXZlbnQgbG9nIHRvIHN5c2xvZwotICoKLSAqIE5PVEU6IE11c3QgYmUgY2FsbGVkIHdpdGggaXdsX2dyYWJfbmljX2FjY2VzcygpIGFscmVhZHkgb2J0YWluZWQhCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHN0YXJ0X2lkeCwKLQkJCQl1MzIgbnVtX2V2ZW50cywgdTMyIG1vZGUpCi17Ci0JdTMyIGk7Ci0JdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KLQl1MzIgZXZlbnRfc2l6ZTsJLyogMiB1MzJzLCBvciAzIHUzMnMgaWYgdGltZXN0YW1wIHJlY29yZGVkICovCi0JdTMyIHB0cjsgICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGxvZyBkYXRhICovCi0JdTMyIGV2LCB0aW1lLCBkYXRhOyAvKiBldmVudCBsb2cgZGF0YSAqLwotCi0JaWYgKG51bV9ldmVudHMgPT0gMCkKLQkJcmV0dXJuOwotCi0JYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7Ci0KLQlpZiAobW9kZSA9PSAwKQotCQlldmVudF9zaXplID0gMiAqIHNpemVvZih1MzIpOwotCWVsc2UKLQkJZXZlbnRfc2l6ZSA9IDMgKiBzaXplb2YodTMyKTsKLQotCXB0ciA9IGJhc2UgKyBFVkVOVF9TVEFSVF9PRkZTRVQgKyAoc3RhcnRfaWR4ICogZXZlbnRfc2l6ZSk7Ci0KLQkvKiAidGltZSIgaXMgYWN0dWFsbHkgImRhdGEiIGZvciBtb2RlIDAgKG5vIHRpbWVzdGFtcCkuCi0JICogcGxhY2UgZXZlbnQgaWQgIyBhdCBmYXIgcmlnaHQgZm9yIGVhc2llciB2aXN1YWwgcGFyc2luZy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2V2ZW50czsgaSsrKSB7Ci0JCWV2ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKLQkJcHRyICs9IHNpemVvZih1MzIpOwotCQl0aW1lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKLQkJcHRyICs9IHNpemVvZih1MzIpOwotCQlpZiAobW9kZSA9PSAwKQotCQkJSVdMX0VSUk9SKCIweCUwOHhcdCUwNHVcbiIsIHRpbWUsIGV2KTsgLyogZGF0YSwgZXYgKi8KLQkJZWxzZSB7Ci0JCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKLQkJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJCUlXTF9FUlJPUigiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZGF0YSwgZXYpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JaW50IHJjOwotCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCi0JdTMyIGNhcGFjaXR5OyAgIC8qIGV2ZW50IGxvZyBjYXBhY2l0eSBpbiAjIGVudHJpZXMgKi8KLQl1MzIgbW9kZTsgICAgICAgLyogMCAtIG5vIHRpbWVzdGFtcCwgMSAtIHRpbWVzdGFtcCByZWNvcmRlZCAqLwotCXUzMiBudW1fd3JhcHM7ICAvKiAjIHRpbWVzIHVDb2RlIHdyYXBwZWQgdG8gdG9wIG9mIGxvZyAqLwotCXUzMiBuZXh0X2VudHJ5OyAvKiBpbmRleCBvZiBuZXh0IGVudHJ5IHRvIGJlIHdyaXR0ZW4gYnkgdUNvZGUgKi8KLQl1MzIgc2l6ZTsgICAgICAgLyogIyBlbnRyaWVzIHRoYXQgd2UnbGwgcHJpbnQgKi8KLQotCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwotCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewotCQlJV0xfRVJST1IoIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKLQkJcmV0dXJuOwotCX0KLQotCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmMpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBldmVudCBsb2cgaGVhZGVyICovCi0JY2FwYWNpdHkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKLQltb2RlID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgxICogc2l6ZW9mKHUzMikpKTsKLQludW1fd3JhcHMgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDIgKiBzaXplb2YodTMyKSkpOwotCW5leHRfZW50cnkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDMgKiBzaXplb2YodTMyKSkpOwotCi0Jc2l6ZSA9IG51bV93cmFwcyA/IGNhcGFjaXR5IDogbmV4dF9lbnRyeTsKLQotCS8qIGJhaWwgb3V0IGlmIG5vdGhpbmcgaW4gbG9nICovCi0JaWYgKHNpemUgPT0gMCkgewotCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwotCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCQlyZXR1cm47Ci0JfQotCi0JSVdMX0VSUk9SKCJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IGRpc3BsYXkgY291bnQgJWQsIHdyYXBzICVkXG4iLAotCQkgIHNpemUsIG51bV93cmFwcyk7Ci0KLQkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCi0JICogaS5lIHRoZSBuZXh0IG9uZSB0aGF0IHVDb2RlIHdvdWxkIGZpbGwuICovCi0JaWYgKG51bV93cmFwcykKLQkJaXdsNDk2NV9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSwKLQkJCQkgICAgY2FwYWNpdHkgLSBuZXh0X2VudHJ5LCBtb2RlKTsKLQotCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KLQlpd2w0OTY1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLCBuZXh0X2VudHJ5LCBtb2RlKTsKLQotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci19CiAKIC8qKgogICogaXdsNDk2NV9pcnFfaGFuZGxlX2Vycm9yIC0gY2FsbGVkIGZvciBIVyBvciBTVyBlcnJvciBpbnRlcnJ1cHQgZnJvbSBjYXJkCkBAIC00Mjk4LDEwICsxNDY4LDEwIEBACiAJY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChpd2xfZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7Ci0JCWl3bDQ5NjVfZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwotCQlpd2w0OTY1X2R1bXBfbmljX2V2ZW50X2xvZyhwcml2KTsKLQkJaXdsNDk2NV9wcmludF9yeF9jb25maWdfY21kKCZwcml2LT5zdGFnaW5nX3J4b24pOworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9GV19FUlJPUlMpIHsKKwkJaXdsX2R1bXBfbmljX2Vycm9yX2xvZyhwcml2KTsKKwkJaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhwcml2KTsKKwkJaXdsNDk2NV9wcmludF9yeF9jb25maWdfY21kKHByaXYpOwogCX0KICNlbmRpZgogCkBAIC00MzEyLDcgKzE0ODIsNyBAQAogCWNsZWFyX2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCiAJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfRldfRVJST1JTLAorCQlJV0xfREVCVUcoSVdMX0RMX0ZXX0VSUk9SUywKIAkJCSAgIlJlc3RhcnRpbmcgYWRhcHRlciBkdWUgdG8gdUNvZGUgZXJyb3IuXG4iKTsKIAogCQlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKQEAgLTQzMjAsNyArMTQ5MCw4IEBACiAJCQkgICAgICAgc2l6ZW9mKHByaXYtPnJlY292ZXJ5X3J4b24pKTsKIAkJCXByaXYtPmVycm9yX3JlY292ZXJpbmcgPSAxOwogCQl9Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPnJlc3RhcnRfZncpCisJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwogCX0KIH0KIApAQCAtNDMzMyw3ICsxNTA0LDcgQEAKIAlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJaXdsNDk2NV9jb21taXRfcnhvbihwcml2KTsKIAotCWl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbihwcml2LCBwcml2LT5ic3NpZCwgMSk7CisJaXdsX3J4b25fYWRkX3N0YXRpb24ocHJpdiwgcHJpdi0+YnNzaWQsIDEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlwcml2LT5hc3NvY19pZCA9IGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5hc3NvY19pZCk7CkBAIC00MzY1LDcgKzE1MzYsNyBAQAogCWl3bF93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCBpbnRhX2ZoKTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKGl3bF9kZWJ1Z19sZXZlbCAmIElXTF9ETF9JU1IpIHsKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfSVNSKSB7CiAJCS8qIGp1c3QgZm9yIGRlYnVnICovCiAJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKIAkJSVdMX0RFQlVHX0lTUigiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCkBAIC00Mzk5LDcgKzE1NzAsNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKGl3bF9kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgeworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgewogCQkvKiBOSUMgZmlyZXMgdGhpcywgYnV0IHdlIGRvbid0IHVzZSBpdCwgcmVkdW5kYW50IHdpdGggV0FLRVVQICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfU0NEKQogCQkJSVdMX0RFQlVHX0lTUigiU2NoZWR1bGVyIGZpbmlzaGVkIHRvIHRyYW5zbWl0ICIKQEAgLTQ0MjAsMTggKzE1OTEsMTUgQEAKIAkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykpCiAJCQlod19yZl9raWxsID0gMTsKIAotCQlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfUkZfS0lMTCB8IElXTF9ETF9JU1IsCi0JCQkJIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAorCQlJV0xfREVCVUcoSVdMX0RMX1JGX0tJTEwsICJSRl9LSUxMIGJpdCB0b2dnbGVkIHRvICVzLlxuIiwKIAkJCQlod19yZl9raWxsID8gImRpc2FibGUgcmFkaW8iOiJlbmFibGUgcmFkaW8iKTsKIAotCQkvKiBRdWV1ZSByZXN0YXJ0IG9ubHkgaWYgUkZfS0lMTCBzd2l0Y2ggd2FzIHNldCB0byAia2lsbCIKLQkJICogICB3aGVuIHdlIGxvYWRlZCBkcml2ZXIsIGFuZCBpcyBub3cgc2V0IHRvICJlbmFibGUiLgotCQkgKiBBZnRlciB3ZSdyZSBBbGl2ZSwgUkZfS0lMTCBnZXRzIGhhbmRsZWQgYnkKLQkJICogICBpd2w0OTY1X3J4X2NhcmRfc3RhdGVfbm90aWYoKSAqLwotCQlpZiAoIWh3X3JmX2tpbGwgJiYgIXRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpIHsKKwkJLyogZHJpdmVyIG9ubHkgbG9hZHMgdWNvZGUgb25jZSBzZXR0aW5nIHRoZSBpbnRlcmZhY2UgdXAuCisJCSAqIHRoZSBkcml2ZXIgYXMgd2VsbCB3b24ndCBhbGxvdyBsb2FkaW5nIGlmIFJGS0lMTCBpcyBzZXQKKwkJICogdGhlcmVmb3JlIG5vIG5lZWQgdG8gcmVzdGFydCB0aGUgZHJpdmVyIGZyb20gdGhpcyBoYW5kbGVyCisJCSAqLworCQlpZiAoIWh3X3JmX2tpbGwgJiYgIXRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpCiAJCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQkJfQogCiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfUkZfS0lMTDsKIAl9CkBAIC00NDUzLDEzICsxNjIxLDEzIEBACiAJLyogdUNvZGUgd2FrZXMgdXAgYWZ0ZXIgcG93ZXItZG93biBzbGVlcCAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfV0FLRVVQKSB7CiAJCUlXTF9ERUJVR19JU1IoIldha2V1cCBpbnRlcnJ1cHRcbiIpOwotCQlpd2w0OTY1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnJ4cSk7Ci0JCWl3bDQ5NjVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzBdKTsKLQkJaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMV0pOwotCQlpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsyXSk7Ci0JCWl3bDQ5NjVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzNdKTsKLQkJaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbNF0pOwotCQlpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVs1XSk7CisJCWl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT5yeHEpOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVswXSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzFdKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMl0pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVszXSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzRdKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbNV0pOwogCiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfV0FLRVVQOwogCX0KQEAgLTQ0NjgsMTMgKzE2MzYsMTYgQEAKIAkgKiBSeCAicmVzcG9uc2VzIiAoZnJhbWUtcmVjZWl2ZWQgbm90aWZpY2F0aW9uKSwgYW5kIG90aGVyCiAJICogbm90aWZpY2F0aW9ucyBmcm9tIHVDb2RlIGNvbWUgdGhyb3VnaCBoZXJlKi8KIAlpZiAoaW50YSAmIChDU1JfSU5UX0JJVF9GSF9SWCB8IENTUl9JTlRfQklUX1NXX1JYKSkgewotCQlpd2w0OTY1X3J4X2hhbmRsZShwcml2KTsKKwkJaXdsX3J4X2hhbmRsZShwcml2KTsKIAkJaGFuZGxlZCB8PSAoQ1NSX0lOVF9CSVRfRkhfUlggfCBDU1JfSU5UX0JJVF9TV19SWCk7CiAJfQogCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9GSF9UWCkgewogCQlJV0xfREVCVUdfSVNSKCJUeCBpbnRlcnJ1cHRcbiIpOwogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0ZIX1RYOworCQkvKiBGSCBmaW5pc2hlZCB0byB3cml0ZSwgc2VuZCBldmVudCAqLworCQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSA9IDE7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAl9CiAKIAlpZiAoaW50YSAmIH5oYW5kbGVkKQpAQCAtNDQ5Miw3ICsxNjYzLDcgQEAKIAkJaXdsNDk2NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKGl3bF9kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgeworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgewogCQlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwogCQlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7CkBAIC00NTYxLDI5NyArMTczMiw2IEBACiAJcmV0dXJuIElSUV9OT05FOwogfQogCi0vKiBGb3IgYWN0aXZlIHNjYW4sIGxpc3RlbiBBQ1RJVkVfRFdFTExfVElNRSAobXNlYykgb24gZWFjaCBjaGFubmVsIGFmdGVyCi0gKiBzZW5kaW5nIHByb2JlIHJlcS4gIFRoaXMgc2hvdWxkIGJlIHNldCBsb25nIGVub3VnaCB0byBoZWFyIHByb2JlIHJlc3BvbnNlcwotICogZnJvbSBtb3JlIHRoYW4gb25lIEFQLiAgKi8KLSNkZWZpbmUgSVdMX0FDVElWRV9EV0VMTF9USU1FXzI0ICAgICgyMCkJLyogYWxsIHRpbWVzIGluIG1zZWMgKi8KLSNkZWZpbmUgSVdMX0FDVElWRV9EV0VMTF9USU1FXzUyICAgICgxMCkKLQotLyogRm9yIGZhc3RlciBhY3RpdmUgc2Nhbm5pbmcsIHNjYW4gd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGNoYW5uZWwgaWYgZmV3ZXIgdGhhbgotICogUExDUF9RVUlFVF9USFJFU0ggcGFja2V0cyBhcmUgaGVhcmQgb24gdGhpcyBjaGFubmVsIHdpdGhpbgotICogQUNUSVZFX1FVSUVUX1RJTUUgYWZ0ZXIgc2VuZGluZyBwcm9iZSByZXF1ZXN0LiAgVGhpcyBzaG9ydGVucyB0aGUgZHdlbGwKLSAqIHRpbWUgaWYgaXQncyBhIHF1aWV0IGNoYW5uZWwgKG5vdGhpbmcgcmVzcG9uZGVkIHRvIG91ciBwcm9iZSwgYW5kIHRoZXJlJ3MKLSAqIG5vIG90aGVyIHRyYWZmaWMpLgotICogRGlzYWJsZSAicXVpZXQiIGZlYXR1cmUgYnkgc2V0dGluZyBQTENQX1FVSUVUX1RIUkVTSCB0byAwLiAqLwotI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigxKQkvKiBwYWNrZXRzICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfUVVJRVRfVElNRSAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUpCS8qIG1zZWMgKi8KLQotLyogRm9yIHBhc3NpdmUgc2NhbiwgbGlzdGVuIFBBU1NJVkVfRFdFTExfVElNRSAobXNlYykgb24gZWFjaCBjaGFubmVsLgotICogTXVzdCBiZSBzZXQgbG9uZ2VyIHRoYW4gYWN0aXZlIGR3ZWxsIHRpbWUuCi0gKiBGb3IgdGhlIG1vc3QgcmVsaWFibGUgc2Nhbiwgc2V0ID4gQVAgYmVhY29uIGludGVydmFsICh0eXBpY2FsbHkgMTAwbXNlYykuICovCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfMjQgICAoMjApCS8qIGFsbCB0aW1lcyBpbiBtc2VjICovCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfNTIgICAoMTApCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgICAgICAoMTAwKQotI2RlZmluZSBJV0xfQ0hBTk5FTF9UVU5FX1RJTUUgICAgICAgNQotCi1zdGF0aWMgaW5saW5lIHUxNiBpd2w0OTY1X2dldF9hY3RpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJcmV0dXJuIElXTF9BQ1RJVkVfRFdFTExfVElNRV81MjsKLQllbHNlCi0JCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfMjQ7Ci19Ci0KLXN0YXRpYyB1MTYgaXdsNDk2NV9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JdTE2IGFjdGl2ZSA9IGl3bDQ5NjVfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOwotCXUxNiBwYXNzaXZlID0gKGJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikgPwotCSAgICBJV0xfUEFTU0lWRV9EV0VMTF9CQVNFICsgSVdMX1BBU1NJVkVfRFdFTExfVElNRV8yNCA6Ci0JICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzUyOwotCi0JaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCS8qIElmIHdlJ3JlIGFzc29jaWF0ZWQsIHdlIGNsYW1wIHRoZSBtYXhpbXVtIHBhc3NpdmUKLQkJICogZHdlbGwgdGltZSB0byBiZSA5OCUgb2YgdGhlIGJlYWNvbiBpbnRlcnZhbCAobWludXMKLQkJICogMiAqIGNoYW5uZWwgdHVuZSB0aW1lKSAqLwotCQlwYXNzaXZlID0gcHJpdi0+YmVhY29uX2ludDsKLQkJaWYgKChwYXNzaXZlID4gSVdMX1BBU1NJVkVfRFdFTExfQkFTRSkgfHwgIXBhc3NpdmUpCi0JCQlwYXNzaXZlID0gSVdMX1BBU1NJVkVfRFdFTExfQkFTRTsKLQkJcGFzc2l2ZSA9IChwYXNzaXZlICogOTgpIC8gMTAwIC0gSVdMX0NIQU5ORUxfVFVORV9USU1FICogMjsKLQl9Ci0KLQlpZiAocGFzc2l2ZSA8PSBhY3RpdmUpCi0JCXBhc3NpdmUgPSBhY3RpdmUgKyAxOwotCi0JcmV0dXJuIHBhc3NpdmU7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsNDk2NV9nZXRfY2hhbm5lbHNfZm9yX3NjYW4oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJCSAgICAgdTggaXNfYWN0aXZlLCB1OCBkaXJlY3RfbWFzaywKLQkJCQkgICAgIHN0cnVjdCBpd2w0OTY1X3NjYW5fY2hhbm5lbCAqc2Nhbl9jaCkKLXsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKLQl1MTYgcGFzc2l2ZV9kd2VsbCA9IDA7Ci0JdTE2IGFjdGl2ZV9kd2VsbCA9IDA7Ci0JaW50IGFkZGVkLCBpOwotCi0Jc2JhbmQgPSBpd2w0OTY1X2dldF9od19tb2RlKHByaXYsIGJhbmQpOwotCWlmICghc2JhbmQpCi0JCXJldHVybiAwOwotCi0JY2hhbm5lbHMgPSBzYmFuZC0+Y2hhbm5lbHM7Ci0KLQlhY3RpdmVfZHdlbGwgPSBpd2w0OTY1X2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kKTsKLQlwYXNzaXZlX2R3ZWxsID0gaXdsNDk2NV9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOwotCi0JZm9yIChpID0gMCwgYWRkZWQgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgewotCQlpZiAoY2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKLQkJCWNvbnRpbnVlOwotCi0JCXNjYW5fY2gtPmNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hhbm5lbHNbaV0uY2VudGVyX2ZyZXEpOwotCi0JCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBzY2FuX2NoLT5jaGFubmVsKTsKLQkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAotCQkJCSAgICAgICBzY2FuX2NoLT5jaGFubmVsKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFpc19hY3RpdmUgfHwgaXNfY2hhbm5lbF9wYXNzaXZlKGNoX2luZm8pIHx8Ci0JCSAgICAoY2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pKQotCQkJc2Nhbl9jaC0+dHlwZSA9IDA7CS8qIHBhc3NpdmUgKi8KLQkJZWxzZQotCQkJc2Nhbl9jaC0+dHlwZSA9IDE7CS8qIGFjdGl2ZSAqLwotCi0JCWlmIChzY2FuX2NoLT50eXBlICYgMSkKLQkJCXNjYW5fY2gtPnR5cGUgfD0gKGRpcmVjdF9tYXNrIDw8IDEpOwotCi0JCWlmIChpc19jaGFubmVsX25hcnJvdyhjaF9pbmZvKSkKLQkJCXNjYW5fY2gtPnR5cGUgfD0gKDEgPDwgNyk7Ci0KLQkJc2Nhbl9jaC0+YWN0aXZlX2R3ZWxsID0gY3B1X3RvX2xlMTYoYWN0aXZlX2R3ZWxsKTsKLQkJc2Nhbl9jaC0+cGFzc2l2ZV9kd2VsbCA9IGNwdV90b19sZTE2KHBhc3NpdmVfZHdlbGwpOwotCi0JCS8qIFNldCB0eHBvd2VyIGxldmVscyB0byBkZWZhdWx0cyAqLwotCQlzY2FuX2NoLT50cGMuZHNwX2F0dGVuID0gMTEwOwotCQkvKiBzY2FuX3B3cl9pbmZvLT50cGMuZHNwX2F0dGVuOyAqLwotCi0JCS8qc2Nhbl9wd3JfaW5mby0+dHBjLnR4X2dhaW47ICovCi0JCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCQlzY2FuX2NoLT50cGMudHhfZ2FpbiA9ICgoMSA8PCA1KSB8ICgzIDw8IDMpKSB8IDM7Ci0JCWVsc2UgewotCQkJc2Nhbl9jaC0+dHBjLnR4X2dhaW4gPSAoKDEgPDwgNSkgfCAoNSA8PCAzKSk7Ci0JCQkvKiBOT1RFOiBpZiB3ZSB3ZXJlIGRvaW5nIDZNYiBPRkRNIGZvciBzY2FucyB3ZSdkIHVzZQotCQkJICogcG93ZXIgbGV2ZWw6Ci0JCQkgKiBzY2FuX2NoLT50cGMudHhfZ2FpbiA9ICgoMSA8PCA1KSB8ICgyIDw8IDMpKSB8IDM7Ci0JCQkgKi8KLQkJfQotCi0JCUlXTF9ERUJVR19TQ0FOKCJTY2FubmluZyAlZCBbJXMgJWRdXG4iLAotCQkJICAgICAgIHNjYW5fY2gtPmNoYW5uZWwsCi0JCQkgICAgICAgKHNjYW5fY2gtPnR5cGUgJiAxKSA/ICJBQ1RJVkUiIDogIlBBU1NJVkUiLAotCQkJICAgICAgIChzY2FuX2NoLT50eXBlICYgMSkgPwotCQkJICAgICAgIGFjdGl2ZV9kd2VsbCA6IHBhc3NpdmVfZHdlbGwpOwotCi0JCXNjYW5fY2grKzsKLQkJYWRkZWQrKzsKLQl9Ci0KLQlJV0xfREVCVUdfU0NBTigidG90YWwgY2hhbm5lbHMgdG8gc2NhbiAlZCBcbiIsIGFkZGVkKTsKLQlyZXR1cm4gYWRkZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfaW5pdF9od19yYXRlcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspIHsKLQkJcmF0ZXNbaV0uYml0cmF0ZSA9IGl3bDQ5NjVfcmF0ZXNbaV0uaWVlZSAqIDU7Ci0JCXJhdGVzW2ldLmh3X3ZhbHVlID0gaTsgLyogUmF0ZSBzY2FsaW5nIHdpbGwgd29yayBvbiBpbmRleGVzICovCi0JCXJhdGVzW2ldLmh3X3ZhbHVlX3Nob3J0ID0gaTsKLQkJcmF0ZXNbaV0uZmxhZ3MgPSAwOwotCQlpZiAoKGkgPiBJV0xfTEFTVF9PRkRNX1JBVEUpIHx8IChpIDwgSVdMX0ZJUlNUX09GRE1fUkFURSkpIHsKLQkJCS8qCi0JCQkgKiBJZiBDQ0sgIT0gMU0gdGhlbiBzZXQgc2hvcnQgcHJlYW1ibGUgcmF0ZSBmbGFnLgotCQkJICovCi0JCQlyYXRlc1tpXS5mbGFncyB8PQotCQkJCShpd2w0OTY1X3JhdGVzW2ldLnBsY3AgPT0gSVdMX1JBVEVfMU1fUExDUCkgPwotCQkJCQkwIDogSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEU7Ci0JCX0KLQl9Ci19Ci0KLS8qKgotICogaXdsNDk2NV9pbml0X2dlb3MgLSBJbml0aWFsaXplIG1hYzgwMjExJ3MgZ2VvL2NoYW5uZWwgaW5mbyBiYXNlZCBmcm9tIGVlcHJvbQotICovCi1pbnQgaXdsNDk2NV9pbml0X2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqZ2VvX2NoOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZXM7Ci0JaW50IGkgPSAwOwotCi0JaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fYml0cmF0ZXMgfHwKLQkgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9iaXRyYXRlcykgewotCQlJV0xfREVCVUdfSU5GTygiR2VvZ3JhcGh5IG1vZGVzIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKLQkJc2V0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljaGFubmVscyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkgKgotCQkJICAgcHJpdi0+Y2hhbm5lbF9jb3VudCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGFubmVscykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyYXRlcyA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JhdGUpICogKElXTF9SQVRFX0NPVU5UICsgMSkpLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyYXRlcykgewotCQlrZnJlZShjaGFubmVscyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIDUuMkdIeiBjaGFubmVscyBzdGFydCBhZnRlciB0aGUgMi40R0h6IGNoYW5uZWxzICovCi0Jc2JhbmQgPSAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07Ci0Jc2JhbmQtPmNoYW5uZWxzID0gJmNoYW5uZWxzW0FSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzEpXTsKLQkvKiBqdXN0IE9GRE0gKi8KLQlzYmFuZC0+Yml0cmF0ZXMgPSAmcmF0ZXNbSVdMX0ZJUlNUX09GRE1fUkFURV07Ci0Jc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVCAtIElXTF9GSVJTVF9PRkRNX1JBVEU7Ci0KLQlpd2w0OTY1X2luaXRfaHRfaHdfY2FwYWIocHJpdiwgJnNiYW5kLT5odF9pbmZvLCBJRUVFODAyMTFfQkFORF81R0haKTsKLQotCXNiYW5kID0gJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCXNiYW5kLT5jaGFubmVscyA9IGNoYW5uZWxzOwotCS8qIE9GRE0gJiBDQ0sgKi8KLQlzYmFuZC0+Yml0cmF0ZXMgPSByYXRlczsKLQlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UOwotCi0JaXdsNDk2NV9pbml0X2h0X2h3X2NhcGFiKHByaXYsICZzYmFuZC0+aHRfaW5mbywgSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0KLQlwcml2LT5pZWVlX2NoYW5uZWxzID0gY2hhbm5lbHM7Ci0JcHJpdi0+aWVlZV9yYXRlcyA9IHJhdGVzOwotCi0JaXdsNDk2NV9pbml0X2h3X3JhdGVzKHByaXYsIHJhdGVzKTsKLQotCWZvciAoaSA9IDA7ICBpIDwgcHJpdi0+Y2hhbm5lbF9jb3VudDsgaSsrKSB7Ci0JCWNoID0gJnByaXYtPmNoYW5uZWxfaW5mb1tpXTsKLQotCQkvKiBGSVhNRTogbWlnaHQgYmUgcmVtb3ZlZCBpZiBzY2FuIGlzIE9LICovCi0JCWlmICghaXNfY2hhbm5lbF92YWxpZChjaCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoaXNfY2hhbm5lbF9hX2JhbmQoY2gpKQotCQkJc2JhbmQgPSAgJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCQllbHNlCi0JCQlzYmFuZCA9ICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0KLQkJZ2VvX2NoID0gJnNiYW5kLT5jaGFubmVsc1tzYmFuZC0+bl9jaGFubmVscysrXTsKLQotCQlnZW9fY2gtPmNlbnRlcl9mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGNoLT5jaGFubmVsKTsKLQkJZ2VvX2NoLT5tYXhfcG93ZXIgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKLQkJZ2VvX2NoLT5tYXhfYW50ZW5uYV9nYWluID0gMHhmZjsKLQkJZ2VvX2NoLT5od192YWx1ZSA9IGNoLT5jaGFubmVsOwotCi0JCWlmIChpc19jaGFubmVsX3ZhbGlkKGNoKSkgewotCQkJaWYgKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpCi0JCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19JQlNTOwotCi0JCQlpZiAoIShjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9BQ1RJVkUpKQotCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOwotCi0JCQlpZiAoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpCi0JCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9SQURBUjsKLQotCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gcHJpdi0+bWF4X2NoYW5uZWxfdHhwb3dlcl9saW1pdCkKLQkJCQlwcml2LT5tYXhfY2hhbm5lbF90eHBvd2VyX2xpbWl0ID0KLQkJCQkgICAgY2gtPm1heF9wb3dlcl9hdmc7Ci0JCX0gZWxzZSB7Ci0JCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOwotCQl9Ci0KLQkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwotCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwotCi0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MCVYXG4iLAotCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAotCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAotCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/Ci0JCQkJInJlc3RyaWN0ZWQiIDogInZhbGlkIiwKLQkJCQkgZ2VvX2NoLT5mbGFncyk7Ci0JfQotCi0JaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCi0JICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKLQkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAotCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKLQkJcHJpdi0+Y2ZnLT5za3UgJj0gfklXTF9TS1VfQTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JICAgICAgICI6IFR1bmFibGUgY2hhbm5lbHM6ICVkIDgwMi4xMWJnLCAlZCA4MDIuMTFhIGNoYW5uZWxzXG4iLAotCSAgICAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzLAotCSAgICAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKTsKLQotCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzKQotCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KLQkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKLQlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscykKLQkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9Ci0JCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07Ci0KLQlzZXRfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGl3bDQ5NjVfZnJlZV9nZW9zIC0gdW5kbyBhbGxvY2F0aW9ucyBpbiBpd2w0OTY1X2luaXRfZ2VvcwotICovCi12b2lkIGl3bDQ5NjVfZnJlZV9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlrZnJlZShwcml2LT5pZWVlX2NoYW5uZWxzKTsKLQlrZnJlZShwcml2LT5pZWVlX3JhdGVzKTsKLQljbGVhcl9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHVDb2RlIGRvd25sb2FkIGZ1bmN0aW9ucwpAQCAtNDg2OCwxNDYgKzE3NDgsNiBAQAogCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2Jvb3QpOwogfQogCi0vKioKLSAqIGl3bDQ5NjVfdmVyaWZ5X2luc3RfZnVsbCAtIHZlcmlmeSBydW50aW1lIHVDb2RlIGltYWdlIGluIGNhcmQgdnMuIGhvc3QsCi0gKiAgICAgbG9va2luZyBhdCBhbGwgZGF0YS4KLSAqLwotc3RhdGljIGludCBpd2w0OTY1X3ZlcmlmeV9pbnN0X2Z1bGwoc3RydWN0IGl3bF9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLAotCQkJCSB1MzIgbGVuKQotewotCXUzMiB2YWw7Ci0JdTMyIHNhdmVfbGVuID0gbGVuOwotCWludCByYyA9IDA7Ci0JdTMyIGVycmNudDsKLQotCUlXTF9ERUJVR19JTkZPKCJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7Ci0KLQlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCi0JZXJyY250ID0gMDsKLQlmb3IgKDsgbGVuID4gMDsgbGVuIC09IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7Ci0JCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLwotCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKLQkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwotCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKLQkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKLQkJCQkgICJvZmZzZXQgMHgleCwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCi0JCQkJICBzYXZlX2xlbiAtIGxlbiwgdmFsLCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKLQkJCXJjID0gLUVJTzsKLQkJCWVycmNudCsrOwotCQkJaWYgKGVycmNudCA+PSAyMCkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQlpZiAoIWVycmNudCkKLQkJSVdMX0RFQlVHX0lORk8KLQkJICAgICgidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOwotCi0JcmV0dXJuIHJjOwotfQotCi0KLS8qKgotICogaXdsNDk2NV92ZXJpZnlfaW5zdF9zcGFyc2UgLSB2ZXJpZnkgcnVudGltZSB1Q29kZSBpbWFnZSBpbiBjYXJkIHZzLiBob3N0LAotICogICB1c2luZyBzYW1wbGUgZGF0YSAxMDAgYnl0ZXMgYXBhcnQuICBJZiB0aGVzZSBzYW1wbGUgcG9pbnRzIGFyZSBnb29kLAotICogICBpdCdzIGEgcHJldHR5IGdvb2QgYmV0IHRoYXQgZXZlcnl0aGluZyBiZXR3ZWVuIHRoZW0gaXMgZ29vZCwgdG9vLgotICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfdmVyaWZ5X2luc3Rfc3BhcnNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwgdTMyIGxlbikKLXsKLQl1MzIgdmFsOwotCWludCByYyA9IDA7Ci0JdTMyIGVycmNudCA9IDA7Ci0JdTMyIGk7Ci0KLQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwotCi0JcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAxMDAsIGltYWdlICs9IDEwMC9zaXplb2YodTMyKSkgewotCQkvKiByZWFkIGRhdGEgY29tZXMgdGhyb3VnaCBzaW5nbGUgcG9ydCwgYXV0by1pbmNyIGFkZHIgKi8KLQkJLyogTk9URTogVXNlIHRoZSBkZWJ1Z2xlc3MgcmVhZCBzbyB3ZSBkb24ndCBmbG9vZCBrZXJuZWwgbG9nCi0JCSAqIGlmIElXTF9ETF9JTyBpcyBzZXQgKi8KLQkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCi0JCQlpICsgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKLQkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0jaWYgMCAvKiBFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscyAqLwotCQkJSVdMX0VSUk9SKCJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCi0JCQkJICAib2Zmc2V0IDB4JXgsIGlzIDB4JXgsIHMvYiAweCV4XG4iLAotCQkJCSAgaSwgdmFsLCAqaW1hZ2UpOwotI2VuZGlmCi0JCQlyYyA9IC1FSU87Ci0JCQllcnJjbnQrKzsKLQkJCWlmIChlcnJjbnQgPj0gMykKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLQotLyoqCi0gKiBpd2w0OTY1X3ZlcmlmeV91Y29kZSAtIGRldGVybWluZSB3aGljaCBpbnN0cnVjdGlvbiBpbWFnZSBpcyBpbiBTUkFNLAotICogICAgYW5kIHZlcmlmeSBpdHMgY29udGVudHMKLSAqLwotc3RhdGljIGludCBpd2w0OTY1X3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JX19sZTMyICppbWFnZTsKLQl1MzIgbGVuOwotCWludCByYyA9IDA7Ci0KLQkvKiBUcnkgYm9vdHN0cmFwICovCi0JaW1hZ2UgPSAoX19sZTMyICopcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7Ci0JbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47Ci0JcmMgPSBpd2w0OTY1X3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKLQlpZiAocmMgPT0gMCkgewotCQlJV0xfREVCVUdfSU5GTygiQm9vdHN0cmFwIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogVHJ5IGluaXRpYWxpemUgKi8KLQlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9pbml0LnZfYWRkcjsKLQlsZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKLQlyYyA9IGl3bDQ5NjVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwotCWlmIChyYyA9PSAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogVHJ5IHJ1bnRpbWUvcHJvdG9jb2wgKi8KLQlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9jb2RlLnZfYWRkcjsKLQlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKLQlyYyA9IGl3bDQ5NjVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwotCWlmIChyYyA9PSAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JSVdMX0VSUk9SKCJOTyBWQUxJRCBVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNISFcbiIpOwotCi0JLyogU2luY2Ugbm90aGluZyBzZWVtcyB0byBtYXRjaCwgc2hvdyBmaXJzdCBzZXZlcmFsIGRhdGEgZW50cmllcyBpbgotCSAqIGluc3RydWN0aW9uIFNSQU0sIHNvIG1heWJlIHZpc3VhbCBpbnNwZWN0aW9uIHdpbGwgZ2l2ZSBhIGNsdWUuCi0JICogU2VsZWN0aW9uIG9mIGJvb3RzdHJhcCBpbWFnZSAodnMuIG90aGVyIGltYWdlcykgaXMgYXJiaXRyYXJ5LiAqLwotCWltYWdlID0gKF9fbGUzMiAqKXByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOwotCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCXJjID0gaXdsNDk2NV92ZXJpZnlfaW5zdF9mdWxsKHByaXYsIGltYWdlLCBsZW4pOwotCi0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgdm9pZCBpd2w0OTY1X25pY19zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogUmVtb3ZlIGFsbCByZXNldHMgdG8gYWxsb3cgTklDIHRvIG9wZXJhdGUgKi8KQEAgLTUwMjIsNyArMTc2Miw3IEBACiAgKi8KIHN0YXRpYyBpbnQgaXdsNDk2NV9yZWFkX3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV91Y29kZSAqdWNvZGU7CisJc3RydWN0IGl3bF91Y29kZSAqdWNvZGU7CiAJaW50IHJldDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlX3JhdzsKIAljb25zdCBjaGFyICpuYW1lID0gcHJpdi0+Y2ZnLT5md19uYW1lOwpAQCAtNTA4MywzNCArMTgyMywzNCBAQAogCX0KIAogCS8qIFZlcmlmeSB0aGF0IHVDb2RlIGltYWdlcyB3aWxsIGZpdCBpbiBjYXJkJ3MgU1JBTSAqLwotCWlmIChpbnN0X3NpemUgPiBJV0xfTUFYX0lOU1RfU0laRSkgeworCWlmIChpbnN0X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSkgewogCQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkgICAgICAgaW5zdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKLQlpZiAoZGF0YV9zaXplID4gSVdMX01BWF9EQVRBX1NJWkUpIHsKKwlpZiAoZGF0YV9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUpIHsKIAkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkJZGF0YV9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9Ci0JaWYgKGluaXRfc2l6ZSA+IElXTF9NQVhfSU5TVF9TSVpFKSB7CisJaWYgKGluaXRfc2l6ZSA+IHByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplKSB7CiAJCUlXTF9ERUJVR19JTkZPCiAJCSAgICAoInVDb2RlIGluaXQgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCSAgICAgIGluaXRfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQotCWlmIChpbml0X2RhdGFfc2l6ZSA+IElXTF9NQVhfREFUQV9TSVpFKSB7CisJaWYgKGluaXRfZGF0YV9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUpIHsKIAkJSVdMX0RFQlVHX0lORk8KIAkJICAgICgidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkgICAgICBpbml0X2RhdGFfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQotCWlmIChib290X3NpemUgPiBJV0xfTUFYX0JTTV9TSVpFKSB7CisJaWYgKGJvb3Rfc2l6ZSA+IHByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUpIHsKIAkJSVdMX0RFQlVHX0lORk8KIAkJICAgICgidUNvZGUgYm9vdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJICAgICAgYm9vdF9zaXplKTsKQEAgLTUyMTEsMTExICsxOTUxLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotCiAvKioKLSAqIGl3bDQ5NjVfc2V0X3Vjb2RlX3B0cnMgLSBTZXQgdUNvZGUgYWRkcmVzcyBsb2NhdGlvbgotICoKLSAqIFRlbGwgaW5pdGlhbGl6YXRpb24gdUNvZGUgd2hlcmUgdG8gZmluZCBydW50aW1lIHVDb2RlLgotICoKLSAqIEJTTSByZWdpc3RlcnMgaW5pdGlhbGx5IGNvbnRhaW4gcG9pbnRlcnMgdG8gaW5pdGlhbGl6YXRpb24gdUNvZGUuCi0gKiBXZSBuZWVkIHRvIHJlcGxhY2UgdGhlbSB0byBsb2FkIHJ1bnRpbWUgdUNvZGUgaW5zdCBhbmQgZGF0YSwKLSAqIGFuZCB0byBzYXZlIHJ1bnRpbWUgZGF0YSB3aGVuIHBvd2VyaW5nIGRvd24uCi0gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9zZXRfdWNvZGVfcHRycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JZG1hX2FkZHJfdCBwaW5zdDsKLQlkbWFfYWRkcl90IHBkYXRhOwotCWludCByYyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIGJpdHMgMzU6NCBmb3IgNDk2NSAqLwotCXBpbnN0ID0gcHJpdi0+dWNvZGVfY29kZS5wX2FkZHIgPj4gNDsKLQlwZGF0YSA9IHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnBfYWRkciA+PiA0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8qIFRlbGwgYm9vdHN0cmFwIHVDb2RlIHdoZXJlIHRvIGZpbmQgaW1hZ2UgdG8gbG9hZCAqLwotCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfUFRSX1JFRywgcGluc3QpOwotCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfUFRSX1JFRywgcGRhdGEpOwotCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywKLQkJCQkgcHJpdi0+dWNvZGVfZGF0YS5sZW4pOwotCi0JLyogSW5zdCBieXRlY291bnQgbXVzdCBiZSBsYXN0IHRvIHNldCB1cCwgYml0IDMxIHNpZ25hbHMgdUNvZGUKLQkgKiAgIHRoYXQgYWxsIG5ldyBwdHIvc2l6ZSBpbmZvIGlzIGluIHBsYWNlICovCi0JaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLAotCQkJCSBwcml2LT51Y29kZV9jb2RlLmxlbiB8IEJTTV9EUkFNX0lOU1RfTE9BRCk7Ci0KLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgdUNvZGUgcG9pbnRlcnMgYXJlIHNldC5cbiIpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGl3bDQ5NjVfaW5pdF9hbGl2ZV9zdGFydCAtIENhbGxlZCBhZnRlciBSRVBMWV9BTElWRSBub3RpZmljYXRpb24gcmVjZWl2ZWQKLSAqCi0gKiBDYWxsZWQgYWZ0ZXIgUkVQTFlfQUxJVkUgbm90aWZpY2F0aW9uIHJlY2VpdmVkIGZyb20gImluaXRpYWxpemUiIHVDb2RlLgotICoKLSAqIFRoZSA0OTY1ICJpbml0aWFsaXplIiBBTElWRSByZXBseSBjb250YWlucyBjYWxpYnJhdGlvbiBkYXRhIGZvcjoKLSAqICAgVm9sdGFnZSwgdGVtcGVyYXR1cmUsIGFuZCBNSU1PIHR4IGdhaW4gY29ycmVjdGlvbiwgbm93IHN0b3JlZCBpbiBwcml2Ci0gKiAgICgzOTQ1IGRvZXMgbm90IGNvbnRhaW4gdGhpcyBkYXRhKS4KLSAqCi0gKiBUZWxsICJpbml0aWFsaXplIiB1Q29kZSB0byBnbyBhaGVhZCBhbmQgbG9hZCB0aGUgcnVudGltZSB1Q29kZS4KLSovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2luaXRfYWxpdmVfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCS8qIENoZWNrIGFsaXZlIHJlc3BvbnNlIGZvciAidmFsaWQiIHNpZ24gZnJvbSB1Q29kZSAqLwotCWlmIChwcml2LT5jYXJkX2FsaXZlX2luaXQuaXNfdmFsaWQgIT0gVUNPREVfVkFMSURfT0spIHsKLQkJLyogV2UgaGFkIGFuIGVycm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSwgc28gdGFrZSBpdAotCQkgKiBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKLQkJZ290byByZXN0YXJ0OwotCX0KLQotCS8qIEJvb3RzdHJhcCB1Q29kZSBoYXMgbG9hZGVkIGluaXRpYWxpemUgdUNvZGUgLi4uIHZlcmlmeSBpbnN0IGltYWdlLgotCSAqIFRoaXMgaXMgYSBwYXJhbm9pZCBjaGVjaywgYmVjYXVzZSB3ZSB3b3VsZCBub3QgaGF2ZSBnb3R0ZW4gdGhlCi0JICogImluaXRpYWxpemUiIGFsaXZlIGlmIGNvZGUgd2VyZW4ndCBwcm9wZXJseSBsb2FkZWQuICAqLwotCWlmIChpd2w0OTY1X3ZlcmlmeV91Y29kZShwcml2KSkgewotCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKLQkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKLQkJZ290byByZXN0YXJ0OwotCX0KLQotCS8qIENhbGN1bGF0ZSB0ZW1wZXJhdHVyZSAqLwotCXByaXYtPnRlbXBlcmF0dXJlID0gaXdsNDk2NV9nZXRfdGVtcGVyYXR1cmUocHJpdik7Ci0KLQkvKiBTZW5kIHBvaW50ZXJzIHRvIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgaW1hZ2UgLi4uIGluaXQgY29kZSB3aWxsCi0JICogbG9hZCBhbmQgbGF1bmNoIHJ1bnRpbWUgdUNvZGUsIHdoaWNoIHdpbGwgc2VuZCB1cyBhbm90aGVyICJBbGl2ZSIKLQkgKiBub3RpZmljYXRpb24uICovCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7Ci0JaWYgKGl3bDQ5NjVfc2V0X3Vjb2RlX3B0cnMocHJpdikpIHsKLQkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdvbid0IGhhcHBlbjsKLQkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQ291bGRuJ3Qgc2V0IHVwIHVDb2RlIHBvaW50ZXJzLlxuIik7Ci0JCWdvdG8gcmVzdGFydDsKLQl9Ci0JcmV0dXJuOwotCi0gcmVzdGFydDoKLQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwotfQotCi0KLS8qKgotICogaXdsNDk2NV9hbGl2ZV9zdGFydCAtIGNhbGxlZCBhZnRlciBSRVBMWV9BTElWRSBub3RpZmljYXRpb24gcmVjZWl2ZWQKKyAqIGl3bF9hbGl2ZV9zdGFydCAtIGNhbGxlZCBhZnRlciBSRVBMWV9BTElWRSBub3RpZmljYXRpb24gcmVjZWl2ZWQKICAqICAgICAgICAgICAgICAgICAgIGZyb20gcHJvdG9jb2wvcnVudGltZSB1Q29kZSAoaW5pdGlhbGl6YXRpb24gdUNvZGUncwotICogICAgICAgICAgICAgICAgICAgQWxpdmUgZ2V0cyBoYW5kbGVkIGJ5IGl3bDQ5NjVfaW5pdF9hbGl2ZV9zdGFydCgpKS4KKyAqICAgICAgICAgICAgICAgICAgIEFsaXZlIGdldHMgaGFuZGxlZCBieSBpd2xfaW5pdF9hbGl2ZV9zdGFydCgpKS4KICAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2xfYWxpdmVfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCkBAIC01MzMxLDE1ICsxOTcyLDE0IEBACiAJLyogSW5pdGlhbGl6ZSB1Q29kZSBoYXMgbG9hZGVkIFJ1bnRpbWUgdUNvZGUgLi4uIHZlcmlmeSBpbnN0IGltYWdlLgogCSAqIFRoaXMgaXMgYSBwYXJhbm9pZCBjaGVjaywgYmVjYXVzZSB3ZSB3b3VsZCBub3QgaGF2ZSBnb3R0ZW4gdGhlCiAJICogInJ1bnRpbWUiIGFsaXZlIGlmIGNvZGUgd2VyZW4ndCBwcm9wZXJseSBsb2FkZWQuICAqLwotCWlmIChpd2w0OTY1X3ZlcmlmeV91Y29kZShwcml2KSkgeworCWlmIChpd2xfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCiAJCUlXTF9ERUJVR19JTkZPKCJCYWQgcnVudGltZSB1Q29kZSBsb2FkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKLQlpd2xjb3JlX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwotCisJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwogCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmFsaXZlX25vdGlmeShwcml2KTsKIAlpZiAocmV0KSB7CiAJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbiBbbnRmXTogJWRcbiIsCkBAIC01MzUwLDIyICsxOTkwLDE3IEBACiAJLyogQWZ0ZXIgdGhlIEFMSVZFIHJlc3BvbnNlLCB3ZSBjYW4gc2VuZCBob3N0IGNvbW1hbmRzIHRvIDQ5NjUgdUNvZGUgKi8KIAlzZXRfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cyk7CiAKLQkvKiBDbGVhciBvdXQgdGhlIHVDb2RlIGVycm9yIGJpdCBpZiBpdCBpcyBzZXQgKi8KLQljbGVhcl9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKLQogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfc3RhcnRfcXVldWVzKHByaXYtPmh3KTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOwogCiAJcHJpdi0+YWN0aXZlX3JhdGUgPSBwcml2LT5yYXRlc19tYXNrOwogCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gcHJpdi0+cmF0ZXNfbWFzayAmIElXTF9CQVNJQ19SQVRFU19NQVNLOwogCi0JaXdsNDk2NV9zZW5kX3Bvd2VyX21vZGUocHJpdiwgSVdMX1BPV0VSX0xFVkVMKHByaXYtPnBvd2VyX21vZGUpKTsKLQogCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewotCQlzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqYWN0aXZlX3J4b24gPQotCQkJCShzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqKSgmcHJpdi0+YWN0aXZlX3J4b24pOworCQlzdHJ1Y3QgaXdsX3J4b25fY21kICphY3RpdmVfcnhvbiA9CisJCQkJKHN0cnVjdCBpd2xfcnhvbl9jbWQgKikmcHJpdi0+YWN0aXZlX3J4b247CiAKIAkJbWVtY3B5KCZwcml2LT5zdGFnaW5nX3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKIAkJICAgICAgIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKTsKQEAgLTUzNzksMTMgKzIwMTQsMTMgQEAKIAkvKiBDb25maWd1cmUgQmx1ZXRvb3RoIGRldmljZSBjb2V4aXN0ZW5jZSBzdXBwb3J0ICovCiAJaXdsNDk2NV9zZW5kX2J0X2NvbmZpZyhwcml2KTsKIAorCWl3bF9yZXNldF9ydW5fdGltZV9jYWxpYihwcml2KTsKKwogCS8qIENvbmZpZ3VyZSB0aGUgYWRhcHRlciBmb3IgdW5hc3NvY2lhdGVkIG9wZXJhdGlvbiAqLwogCWl3bDQ5NjVfY29tbWl0X3J4b24ocHJpdik7CiAKIAkvKiBBdCB0aGlzIHBvaW50LCB0aGUgTklDIGlzIGluaXRpYWxpemVkIGFuZCBvcGVyYXRpb25hbCAqLwotCXByaXYtPm5vdGlmX21pc3NlZF9iZWFjb25zID0gMDsKLQotCWl3bDQ5NjVfcmZfa2lsbF9jdF9jb25maWcocHJpdik7CisJaXdsX3JmX2tpbGxfY3RfY29uZmlnKHByaXYpOwogCiAJaXdsX2xlZHNfcmVnaXN0ZXIocHJpdik7CiAKQEAgLTUzOTYsMzQgKzIwMzEsMzMgQEAKIAlpZiAocHJpdi0+ZXJyb3JfcmVjb3ZlcmluZykKIAkJaXdsNDk2NV9lcnJvcl9yZWNvdmVyeShwcml2KTsKIAotCWl3bGNvcmVfbG93X2xldmVsX25vdGlmeShwcml2LCBJV0xDT1JFX1NUQVJUX0VWVCk7CisJaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIDEpOwogCWllZWU4MDIxMV9ub3RpZnlfbWFjKHByaXYtPmh3LCBJRUVFODAyMTFfTk9USUZZX1JFX0FTU09DKTsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1RBVFVTX01PREVfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCWl3bDQ5NjVfc2V0X21vZGUocHJpdiwgcHJpdi0+aXdfbW9kZSk7CisKIAlyZXR1cm47CiAKICByZXN0YXJ0OgogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3N0YXRpYyB2b2lkIGl3bF9jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiBzdGF0aWMgdm9pZCBfX2l3bDQ5NjVfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXhpdF9wZW5kaW5nID0gdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKIAogCUlXTF9ERUJVR19JTkZPKERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CiAKLQljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKLQogCWlmICghZXhpdF9wZW5kaW5nKQogCQlzZXRfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCiAJaXdsX2xlZHNfdW5yZWdpc3Rlcihwcml2KTsKIAotCWl3bGNvcmVfbG93X2xldmVsX25vdGlmeShwcml2LCBJV0xDT1JFX1NUT1BfRVZUKTsKLQotCWl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwogCiAJLyogVW5ibG9jayBhbnkgd2FpdGluZyBjYWxscyAqLwogCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CkBAIC01NDU1LDcgKzIwODksOSBAQAogCQkJICAgICAgIHRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgPDwKIAkJCQkJU1RBVFVTX0dFT19DT05GSUdVUkVEIHwKIAkJCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykgPDwKLQkJCQkJU1RBVFVTX0lOX1NVU1BFTkQ7CisJCQkJCVNUQVRVU19JTl9TVVNQRU5EIHwKKwkJCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSA8PAorCQkJCQlTVEFUVVNfRVhJVF9QRU5ESU5HOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC01NDcwLDE1ICsyMTA2LDE3IEBACiAJCQl0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykgPDwKIAkJCQlTVEFUVVNfSU5fU1VTUEVORCB8CiAJCQl0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpIDw8Ci0JCQkJU1RBVFVTX0ZXX0VSUk9SOworCQkJCVNUQVRVU19GV19FUlJPUiB8CisJCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSA8PAorCQkJCVNUQVRVU19FWElUX1BFTkRJTkc7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaXdsNDk2NV9od190eHFfY3R4X3N0b3AocHJpdik7Ci0JaXdsNDk2NV9od19yeHFfc3RvcChwcml2KTsKKwlpd2xfdHhxX2N0eF9zdG9wKHByaXYpOworCWl3bF9yeHFfc3RvcChwcml2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKCFpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CkBAIC01NDkwLDE5ICsyMTI4LDE5IEBACiAKIAl1ZGVsYXkoNSk7CiAKLQlpd2w0OTY1X2h3X25pY19zdG9wX21hc3Rlcihwcml2KTsKLQlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7Ci0JaXdsNDk2NV9od19uaWNfcmVzZXQocHJpdik7CisJLyogRklYTUU6IGFwbV9vcHMuc3VzcGVuZChwcml2KSAqLworCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMucmVzZXQocHJpdik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZnJlZV9zaGFyZWRfbWVtKHByaXYpOwogCiAgZXhpdDoKLQltZW1zZXQoJnByaXYtPmNhcmRfYWxpdmUsIDAsIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9hbGl2ZV9yZXNwKSk7CisJbWVtc2V0KCZwcml2LT5jYXJkX2FsaXZlLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAKIAlpZiAocHJpdi0+aWJzc19iZWFjb24pCiAJCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOwogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAogCS8qIGNsZWFyIG91dCBhbnkgZnJlZSBmcmFtZXMgKi8KLQlpd2w0OTY1X2NsZWFyX2ZyZWVfZnJhbWVzKHByaXYpOworCWl3bF9jbGVhcl9mcmVlX2ZyYW1lcyhwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgaXdsNDk2NV9kb3duKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKQEAgLTU1MTEsNyArMjE0OSw3IEBACiAJX19pd2w0OTY1X2Rvd24ocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlpd2w0OTY1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpOworCWl3bF9jYW5jZWxfZGVmZXJyZWRfd29yayhwcml2KTsKIH0KIAogI2RlZmluZSBNQVhfSFdfUkVTVEFSVFMgNQpAQCAtNTUyNiwxMyArMjE2NCw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX1dBUk5JTkcoIlJhZGlvIGRpc2FibGVkIGJ5IFNXIFJGIGtpbGwgKG1vZHVsZSAiCi0JCQkgICAgInBhcmFtZXRlcilcbiIpOwotCQlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJaWYgKCFwcml2LT51Y29kZV9kYXRhX2JhY2t1cC52X2FkZHIgfHwgIXByaXYtPnVjb2RlX2RhdGEudl9hZGRyKSB7CiAJCUlXTF9FUlJPUigidWNvZGUgbm90IGF2YWlsYWJsZSBmb3IgZGV2aWNlIGJyaW5ndXBcbiIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTU1NDIsMTkgKzIxNzMsMjUgQEAKIAlpZiAoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYKIAkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykKIAkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQllbHNlIHsKKwllbHNlCiAJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19JTl9TVVNQRU5ELCAmcHJpdi0+c3RhdHVzKSkgewotCQkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7Ci0JCQlJV0xfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgSFcgUkYgS2lsbCBzd2l0Y2hcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKworCWlmICghdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpICYmCisJICAgIGl3bF9pc19yZmtpbGwocHJpdikpIHsKKwkJSVdMX1dBUk5JTkcoIlJhZGlvIGRpc2FibGVkIGJ5ICVzIFJGIEtpbGwgc3dpdGNoXG4iLAorCQkgICAgdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpID8gIkhXIiA6ICJTVyIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKIAotCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmh3X25pY19pbml0KHByaXYpOworCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmFsbG9jX3NoYXJlZF9tZW0ocHJpdik7CisJaWYgKHJldCkgeworCQlJV0xfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBpd2xfaHdfbmljX2luaXQocHJpdik7CiAJaWYgKHJldCkgewogCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IG5pY1xuIik7CiAJCXJldHVybiByZXQ7CkBAIC01NTgwLDEyICsyMjE3LDEzIEBACiAJICAgICAgIHByaXYtPnVjb2RlX2RhdGEubGVuKTsKIAogCS8qIFdlIHJldHVybiBzdWNjZXNzIHdoZW4gd2UgcmVzdW1lIGZyb20gc3VzcGVuZCBhbmQgcmZfa2lsbCBpcyBvbi4gKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQorCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgfHwKKwkgICAgdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdfUkVTVEFSVFM7IGkrKykgewogCi0JCWl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisJCWl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAogCQkvKiBsb2FkIGJvb3RzdHJhcCBzdGF0ZSBtYWNoaW5lLAogCQkgKiBsb2FkIGJvb3RzdHJhcCBwcm9ncmFtIGludG8gcHJvY2Vzc29yJ3MgbWVtb3J5LApAQCAtNTU5Nyw2ICsyMjM1LDkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyogQ2xlYXIgb3V0IHRoZSB1Q29kZSBlcnJvciBiaXQgaWYgaXQgaXMgc2V0ICovCisJCWNsZWFyX2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpOworCiAJCS8qIHN0YXJ0IGNhcmQ7ICJpbml0aWFsaXplIiB3aWxsIGxvYWQgcnVudGltZSB1Y29kZSAqLwogCQlpd2w0OTY1X25pY19zdGFydChwcml2KTsKIApAQCAtNTYwNyw2ICsyMjQ4LDcgQEAKIAogCXNldF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAJX19pd2w0OTY1X2Rvd24ocHJpdik7CisJY2xlYXJfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCiAJLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCiAJICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCkBAIC01NjIxLDcgKzIyNjMsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3N0YXRpYyB2b2lkIGl3bF9iZ19pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBpbml0X2FsaXZlX3N0YXJ0LndvcmspOwpAQCAtNTYzMCwxMSArMjI3MiwxMSBAQAogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsNDk2NV9pbml0X2FsaXZlX3N0YXJ0KHByaXYpOworCXByaXYtPmNmZy0+b3BzLT5saWItPmluaXRfYWxpdmVfc3RhcnQocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfYmdfYWxpdmVfc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQorc3RhdGljIHZvaWQgaXdsX2JnX2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKQEAgLTU2NDMsNyArMjI4NSw3IEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlpd2w0OTY1X2FsaXZlX3N0YXJ0KHByaXYpOworCWl3bF9hbGl2ZV9zdGFydChwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIApAQCAtNTY1OSw3ICsyMzAxLDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoIWl3bF9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX1JGX0tJTEwsCisJCUlXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwKIAkJCSAgIkhXIGFuZC9vciBTVyBSRiBLaWxsIG5vIGxvbmdlciBhY3RpdmUsIHJlc3RhcnRpbmcgIgogCQkJICAiZGV2aWNlXG4iKTsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKQEAgLTU2NzcsMjM5ICsyMzE5LDUzIEBACiAJCQkJICAgICJLaWxsIHN3aXRjaCBtdXN0IGJlIHR1cm5lZCBvZmYgZm9yICIKIAkJCQkgICAgIndpcmVsZXNzIG5ldHdvcmtpbmcgdG8gd29yay5cbiIpOwogCX0KKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKK30KKworc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19zZXRfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJc3RydWN0IGl3bF9wcml2LCBzZXRfbW9uaXRvcik7CisJaW50IHJldDsKKworCUlXTF9ERUJVRyhJV0xfRExfU1RBVEUsICJzZXR0aW5nIG1vbml0b3IgbW9kZVxuIik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlyZXQgPSBpd2w0OTY1X3NldF9tb2RlKHByaXYsIElFRUU4MDIxMV9JRl9UWVBFX01OVFIpOworCisJaWYgKHJldCkgeworCQlpZiAocmV0ID09IC1FQUdBSU4pCisJCQlJV0xfREVCVUcoSVdMX0RMX1NUQVRFLCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOworCQllbHNlCisJCQlJV0xfRVJST1IoIml3bDQ5NjVfc2V0X21vZGUoKSBmYWlsZWQgcmV0ID0gJWRcbiIsIHJldCk7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLSNkZWZpbmUgSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cgKDcgKiBIWikKLQotc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3N0YXRpYyB2b2lkIGl3bF9iZ19ydW5fdGltZV9jYWxpYl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBzY2FuX2NoZWNrLndvcmspOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsCisJCQlydW5fdGltZV9jYWxpYl93b3JrKTsKIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgfHwKKwkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpIHx8Ci0JICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfU0NBTiwKLQkJCSAgIlNjYW4gY29tcGxldGlvbiB3YXRjaGRvZyByZXNldHRpbmcgYWRhcHRlciAoJWRtcylcbiIsCi0JCQkgIGppZmZpZXNfdG9fbXNlY3MoSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cpKTsKLQotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJaXdsNDk2NV9zZW5kX3NjYW5fYWJvcnQocHJpdik7Ci0JfQotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2JnX3JlcXVlc3Rfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmVxdWVzdF9zY2FuKTsKLQlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfU0NBTl9DTUQsCi0JCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2Nhbl9jbWQpLAotCQkubWV0YS5mbGFncyA9IENNRF9TSVpFX0hVR0UsCi0JfTsKLQlzdHJ1Y3QgaXdsNDk2NV9zY2FuX2NtZCAqc2NhbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSBOVUxMOwotCXUxNiBjbWRfbGVuOwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQl1OCBkaXJlY3RfbWFzazsKLQlpbnQgcmV0ID0gMDsKLQotCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpIHsKLQkJSVdMX1dBUk5JTkcoInJlcXVlc3Qgc2NhbiBjYWxsZWQgd2hlbiBkcml2ZXIgbm90IHJlYWR5LlxuIik7Ci0JCWdvdG8gZG9uZTsKIAl9CiAKLQkvKiBNYWtlIHN1cmUgdGhlIHNjYW4gd2Fzbid0IGNhbmNlbGxlZCBiZWZvcmUgdGhpcyBxdWV1ZWQgd29yawotCSAqIHdhcyBnaXZlbiB0aGUgY2hhbmNlIHRvIHJ1bi4uLiAqLwotCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJZ290byBkb25lOworCWlmIChwcml2LT5zdGFydF9jYWxpYikgeworCQlpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24ocHJpdiwgJnByaXYtPnN0YXRpc3RpY3MpOwogCi0JLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9yIHNjaGVkdWxlZCBpZiB0aGVyZSBpcyBjdXJyZW50bHkKLQkgKiBhIHNjYW4gYWN0aXZlIGluIHRoZSBoYXJkd2FyZS4gKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJNdWx0aXBsZSBjb25jdXJyZW50IHNjYW4gcmVxdWVzdHMgaW4gcGFyYWxsZWwuICIKLQkJCSAgICAgICAiSWdub3Jpbmcgc2Vjb25kIHJlcXVlc3QuXG4iKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBkb25lOworCQlpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24ocHJpdiwgJnByaXYtPnN0YXRpc3RpY3MpOwogCX0KIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTigiQWJvcnRpbmcgc2NhbiBkdWUgdG8gZGV2aWNlIHNodXRkb3duXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0hDKCJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gIFF1ZXVpbmcuXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWlmICghdGVzdF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSB1bmluaXRpYWxpemVkLiAgUXVldWluZy5cbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKCFwcml2LT5zY2FuX2JhbmRzKSB7Ci0JCUlXTF9ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm8gcmVxdWVzdGVkIGJhbmRzXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWlmICghcHJpdi0+c2NhbikgewotCQlwcml2LT5zY2FuID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2Nhbl9jbWQpICsKLQkJCQkgICAgIElXTF9NQVhfU0NBTl9TSVpFLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwcml2LT5zY2FuKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBkb25lOwotCQl9Ci0JfQotCXNjYW4gPSBwcml2LT5zY2FuOwotCW1lbXNldChzY2FuLCAwLCBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2Nhbl9jbWQpICsgSVdMX01BWF9TQ0FOX1NJWkUpOwotCi0Jc2Nhbi0+cXVpZXRfcGxjcF90aCA9IElXTF9QTENQX1FVSUVUX1RIUkVTSDsKLQlzY2FuLT5xdWlldF90aW1lID0gSVdMX0FDVElWRV9RVUlFVF9USU1FOwotCi0JaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCXUxNiBpbnRlcnZhbCA9IDA7Ci0JCXUzMiBleHRyYTsKLQkJdTMyIHN1c3BlbmRfdGltZSA9IDEwMDsKLQkJdTMyIHNjYW5fc3VzcGVuZF90aW1lID0gMTAwOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCUlXTF9ERUJVR19JTkZPKCJTY2FubmluZyB3aGlsZSBhc3NvY2lhdGVkLi4uXG4iKTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlpbnRlcnZhbCA9IHByaXYtPmJlYWNvbl9pbnQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCQlzY2FuLT5zdXNwZW5kX3RpbWUgPSAwOwotCQlzY2FuLT5tYXhfb3V0X3RpbWUgPSBjcHVfdG9fbGUzMigyMDAgKiAxMDI0KTsKLQkJaWYgKCFpbnRlcnZhbCkKLQkJCWludGVydmFsID0gc3VzcGVuZF90aW1lOwotCi0JCWV4dHJhID0gKHN1c3BlbmRfdGltZSAvIGludGVydmFsKSA8PCAyMjsKLQkJc2Nhbl9zdXNwZW5kX3RpbWUgPSAoZXh0cmEgfAotCQkgICAgKChzdXNwZW5kX3RpbWUgJSBpbnRlcnZhbCkgKiAxMDI0KSk7Ci0JCXNjYW4tPnN1c3BlbmRfdGltZSA9IGNwdV90b19sZTMyKHNjYW5fc3VzcGVuZF90aW1lKTsKLQkJSVdMX0RFQlVHX1NDQU4oInN1c3BlbmRfdGltZSAweCVYIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKLQkJCSAgICAgICBzY2FuX3N1c3BlbmRfdGltZSwgaW50ZXJ2YWwpOwotCX0KLQotCS8qIFdlIHNob3VsZCBhZGQgdGhlIGFiaWxpdHkgZm9yIHVzZXIgdG8gbG9jayB0byBQQVNTSVZFIE9OTFkgKi8KLQlpZiAocHJpdi0+b25lX2RpcmVjdF9zY2FuKSB7Ci0JCUlXTF9ERUJVR19TQ0FOCi0JCSAgICAoIktpY2tpbmcgb2ZmIG9uZSBkaXJlY3Qgc2NhbiBmb3IgJyVzJ1xuIiwKLQkJICAgICBpd2w0OTY1X2VzY2FwZV9lc3NpZChwcml2LT5kaXJlY3Rfc3NpZCwKLQkJCQkgICAgICBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pKTsKLQkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0uaWQgPSBXTEFOX0VJRF9TU0lEOwotCQlzY2FuLT5kaXJlY3Rfc2NhblswXS5sZW4gPSBwcml2LT5kaXJlY3Rfc3NpZF9sZW47Ci0JCW1lbWNweShzY2FuLT5kaXJlY3Rfc2NhblswXS5zc2lkLAotCQkgICAgICAgcHJpdi0+ZGlyZWN0X3NzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7Ci0JCWRpcmVjdF9tYXNrID0gMTsKLQl9IGVsc2UgaWYgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5lc3NpZF9sZW4pIHsKLQkJSVdMX0RFQlVHX1NDQU4KLQkJICAoIktpY2tpbmcgb2ZmIG9uZSBkaXJlY3Qgc2NhbiBmb3IgJyVzJyB3aGVuIG5vdCBhc3NvY2lhdGVkXG4iLAotCQkgICBpd2w0OTY1X2VzY2FwZV9lc3NpZChwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKSk7Ci0JCXNjYW4tPmRpcmVjdF9zY2FuWzBdLmlkID0gV0xBTl9FSURfU1NJRDsKLQkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0ubGVuID0gcHJpdi0+ZXNzaWRfbGVuOwotCQltZW1jcHkoc2Nhbi0+ZGlyZWN0X3NjYW5bMF0uc3NpZCwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX2xlbik7Ci0JCWRpcmVjdF9tYXNrID0gMTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfU0NBTigiS2lja2luZyBvZmYgb25lIGluZGlyZWN0IHNjYW4uXG4iKTsKLQkJZGlyZWN0X21hc2sgPSAwOwotCX0KLQotCXNjYW4tPnR4X2NtZC50eF9mbGFncyA9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0Jc2Nhbi0+dHhfY21kLnN0YV9pZCA9IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7Ci0Jc2Nhbi0+dHhfY21kLnN0b3BfdGltZS5saWZlX3RpbWUgPSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFOwotCi0KLQlpZiAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkgewotCQlzY2FuLT5mbGFncyA9IFJYT05fRkxHX0JBTkRfMjRHX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSzsKLQkJc2Nhbi0+dHhfY21kLnJhdGVfbl9mbGFncyA9Ci0JCQkJaXdsNDk2NV9od19zZXRfcmF0ZV9uX2ZsYWdzKElXTF9SQVRFXzFNX1BMQ1AsCi0JCQkJUkFURV9NQ1NfQU5UX0JfTVNLfFJBVEVfTUNTX0NDS19NU0spOwotCi0JCXNjYW4tPmdvb2RfQ1JDX3RoID0gMDsKLQkJYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0JfSBlbHNlIGlmIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzVHSFopKSB7Ci0JCXNjYW4tPnR4X2NtZC5yYXRlX25fZmxhZ3MgPQotCQkJCWl3bDQ5NjVfaHdfc2V0X3JhdGVfbl9mbGFncyhJV0xfUkFURV82TV9QTENQLAotCQkJCVJBVEVfTUNTX0FOVF9CX01TSyk7Ci0JCXNjYW4tPmdvb2RfQ1JDX3RoID0gSVdMX0dPT0RfQ1JDX1RIOwotCQliYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKLQl9IGVsc2UgewotCQlJV0xfV0FSTklORygiSW52YWxpZCBzY2FuIGJhbmQgY291bnRcbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JLyogV2UgZG9uJ3QgYnVpbGQgYSBkaXJlY3Qgc2NhbiBwcm9iZSByZXF1ZXN0OyB0aGUgdUNvZGUgd2lsbCBkbwotCSAqIHRoYXQgYmFzZWQgb24gdGhlIGRpcmVjdF9tYXNrIGFkZGVkIHRvIGVhY2ggY2hhbm5lbCBlbnRyeSAqLwotCWNtZF9sZW4gPSBpd2w0OTY1X2ZpbGxfcHJvYmVfcmVxKHByaXYsIGJhbmQsCi0JCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAotCQkJCQlJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbiksIDApOwotCi0Jc2Nhbi0+dHhfY21kLmxlbiA9IGNwdV90b19sZTE2KGNtZF9sZW4pOwotCS8qIHNlbGVjdCBSeCBjaGFpbnMgKi8KLQotCS8qIEZvcmNlIHVzZSBvZiBjaGFpbnMgQiBhbmQgQyAoMHg2KSBmb3Igc2NhbiBSeC4KLQkgKiBBdm9pZCBBICgweDEpIGJlY2F1c2Ugb2YgaXRzIG9mZi1jaGFubmVsIHJlY2VwdGlvbiBvbiBBLWJhbmQuCi0JICogTUlNTyBpcyBub3QgdXNlZCBoZXJlLCBidXQgdmFsdWUgaXMgcmVxdWlyZWQgdG8gbWFrZSB1Q29kZSBoYXBweS4gKi8KLQlzY2FuLT5yeF9jaGFpbiA9IFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX01TSyB8Ci0JCQljcHVfdG9fbGUxNigoMHg3IDw8IFJYT05fUlhfQ0hBSU5fVkFMSURfUE9TKSB8Ci0JCQkoMHg2IDw8IFJYT05fUlhfQ0hBSU5fRk9SQ0VfU0VMX1BPUykgfAotCQkJKDB4NyA8PCBSWE9OX1JYX0NIQUlOX0ZPUkNFX01JTU9fU0VMX1BPUykpOwotCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUikKLQkJc2Nhbi0+ZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7Ci0KLQlpZiAoZGlyZWN0X21hc2spCi0JCXNjYW4tPmNoYW5uZWxfY291bnQgPQotCQkJaXdsNDk2NV9nZXRfY2hhbm5lbHNfZm9yX3NjYW4oCi0JCQkJcHJpdiwgYmFuZCwgMSwgLyogYWN0aXZlICovCi0JCQkJZGlyZWN0X21hc2ssCi0JCQkJKHZvaWQgKikmc2Nhbi0+ZGF0YVtsZTE2X3RvX2NwdShzY2FuLT50eF9jbWQubGVuKV0pOwotCWVsc2UKLQkJc2Nhbi0+Y2hhbm5lbF9jb3VudCA9Ci0JCQlpd2w0OTY1X2dldF9jaGFubmVsc19mb3Jfc2NhbigKLQkJCQlwcml2LCBiYW5kLCAwLCAvKiBwYXNzaXZlICovCi0JCQkJZGlyZWN0X21hc2ssCi0JCQkJKHZvaWQgKikmc2Nhbi0+ZGF0YVtsZTE2X3RvX2NwdShzY2FuLT50eF9jbWQubGVuKV0pOwotCi0JY21kLmxlbiArPSBsZTE2X3RvX2NwdShzY2FuLT50eF9jbWQubGVuKSArCi0JICAgIHNjYW4tPmNoYW5uZWxfY291bnQgKiBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2Nhbl9jaGFubmVsKTsKLQljbWQuZGF0YSA9IHNjYW47Ci0Jc2Nhbi0+bGVuID0gY3B1X3RvX2xlMTYoY21kLmxlbik7Ci0KLQlzZXRfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQlyZXQgPSBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKLQlpZiAocmV0KQotCQlnb3RvIGRvbmU7Ci0KLQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jaGVjaywKLQkJCSAgIElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKTsKLQogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybjsKLQotIGRvbmU6Ci0JLyogaW5mb3JtIG1hYzgwMjExIHNjYW4gYWJvcnRlZCAqLwotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBpd2w0OTY1X2JnX3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKQEAgLTU5MjIsNiArMjM3OCw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCV9faXdsNDk2NV91cChwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKQEAgLTU5NDQsNyArMjQwMSw3IEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlpd2w0OTY1X3J4X3JlcGxlbmlzaChwcml2KTsKKwlpd2xfcnhfcmVwbGVuaXNoKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCkBAIC01OTU1LDYgKzI0MTIsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7CiAJCUlXTF9FUlJPUigiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gQVAgbW9kZVxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTU5NzMsNyArMjQzMSw3IEBACiAJaWYgKCFwcml2LT52aWYgfHwgIXByaXYtPmlzX29wZW4pCiAJCXJldHVybjsKIAotCWl3bDQ5NjVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAyMDApOworCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDIwMCk7CiAKIAljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKIApAQCAtNTk5MCwxMSArMjQ0OCwxMCBAQAogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCkKLQkJaXdsNDk2NV9zZXRfcnhvbl9odChwcml2LCAmcHJpdi0+Y3VycmVudF9odF9jb25maWcpOwotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUKi8KLQlpd2w0OTY1X3NldF9yeG9uX2NoYWluKHByaXYpOworCQlpd2xfc2V0X3J4b25faHQocHJpdiwgJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnKTsKKworCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAlwcml2LT5zdGFnaW5nX3J4b24uYXNzb2NfaWQgPSBjcHVfdG9fbGUxNihwcml2LT5hc3NvY19pZCk7CiAKIAlJV0xfREVCVUdfQVNTT0MoImFzc29jIGlkICVkIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKQEAgLTYwMjAsMTcgKzI0NzcsMTQgQEAKIAogCXN3aXRjaCAocHJpdi0+aXdfbW9kZSkgewogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgotCQlpd2w0OTY1X3JhdGVfc2NhbGVfaW5pdChwcml2LT5odywgSVdMX0FQX0lEKTsKIAkJYnJlYWs7CiAKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6CiAKLQkJLyogY2xlYXIgb3V0IHRoZSBzdGF0aW9uIHRhYmxlICovCi0JCWl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisJCS8qIGFzc3VtZSBkZWZhdWx0IGFzc29jIGlkICovCisJCXByaXYtPmFzc29jX2lkID0gMTsKIAotCQlpd2w0OTY1X3J4b25fYWRkX3N0YXRpb24ocHJpdiwgaXdsNDk2NV9icm9hZGNhc3RfYWRkciwgMCk7Ci0JCWl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbihwcml2LCBwcml2LT5ic3NpZCwgMCk7Ci0JCWl3bDQ5NjVfcmF0ZV9zY2FsZV9pbml0KHByaXYtPmh3LCBJV0xfU1RBX0lEKTsKKwkJaXdsX3J4b25fYWRkX3N0YXRpb24ocHJpdiwgcHJpdi0+YnNzaWQsIDApOwogCQlpd2w0OTY1X3NlbmRfYmVhY29uX2NtZChwcml2KTsKIAogCQlicmVhazsKQEAgLTYwNDEsNTggKzI0OTUsMzAgQEAKIAkJYnJlYWs7CiAJfQogCi0JaXdsNDk2NV9zZXF1ZW5jZV9yZXNldChwcml2KTsKLQotI2lmZGVmIENPTkZJR19JV0w0OTY1X1NFTlNJVElWSVRZCiAJLyogRW5hYmxlIFJ4IGRpZmZlcmVudGlhbCBnYWluIGFuZCBzZW5zaXRpdml0eSBjYWxpYnJhdGlvbnMgKi8KLQlpd2w0OTY1X2NoYWluX25vaXNlX3Jlc2V0KHByaXYpOworCWl3bF9jaGFpbl9ub2lzZV9yZXNldChwcml2KTsKIAlwcml2LT5zdGFydF9jYWxpYiA9IDE7Ci0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfU0VOU0lUSVZJVFkgKi8KIAogCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpCiAJCXByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQgPSAxOwogCi0JaXdsNDk2NV9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpd2xfYWN0aXZhdGVfcW9zKHByaXYsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAorCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCAwKTsKIAkvKiB3ZSBoYXZlIGp1c3QgYXNzb2NpYXRlZCwgZG9uJ3Qgc3RhcnQgc2NhbiB0b28gZWFybHkgKi8KIAlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IGppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOOwogfQogCi0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfYmdfcG9zdF9hc3NvY2lhdGUoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsCi0JCQkJCSAgICAgcG9zdF9hc3NvY2lhdGUud29yayk7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsNDk2NV9wb3N0X2Fzc29jaWF0ZShwcml2KTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotfQotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2JnX2Fib3J0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIGFib3J0X3NjYW4pOwotCi0JaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCXNldF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCWl3bDQ5NjVfc2VuZF9zY2FuX2Fib3J0KHByaXYpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci19Ci0KIHN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpOwogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2JnX3NjYW5fY29tcGxldGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGl3bF9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgc2Nhbl9jb21wbGV0ZWQpOwogCi0JSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX1NDQU4sICJTQ0FOIGNvbXBsZXRlIHNjYW5cbiIpOworCUlXTF9ERUJVR19TQ0FOKCJTQ0FOIGNvbXBsZXRlIHNjYW5cbiIpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02MTA1LDcgKzI1MzEsNyBAQAogCS8qIFNpbmNlIHNldHRpbmcgdGhlIFRYUE9XRVIgbWF5IGhhdmUgYmVlbiBkZWZlcnJlZCB3aGlsZQogCSAqIHBlcmZvcm1pbmcgdGhlIHNjYW4sIGZpcmUgb25lIG9mZiAqLwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlpd2w0OTY1X2h3X3JlZ19zZW5kX3R4cG93ZXIocHJpdik7CisJaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgdHJ1ZSk7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTYxMTUsNyArMjU0MSw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIFVDT0RFX1JFQURZX1RJTUVPVVQJKDIgKiBIWikKKyNkZWZpbmUgVUNPREVfUkVBRFlfVElNRU9VVAkoNCAqIEhaKQogCiBzdGF0aWMgaW50IGl3bDQ5NjVfbWFjX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpAQCAtNjE0MSw3ICsyNTY3LDcgQEAKIAkvKiB3ZSBzaG91bGQgYmUgdmVyaWZ5aW5nIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgb3BlbmVkICovCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JbWVtc2V0KCZwcml2LT5zdGFnaW5nX3J4b24sIDAsIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCkpOworCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCkpOwogCS8qIGZldGNoIHVjb2RlIGZpbGUgZnJvbSBkaXNrLCBhbGxvYyBhbmQgY29weSB0byBidXMtbWFzdGVyIGJ1ZmZlcnMgLi4uCiAJICogdWNvZGUgZmlsZW5hbWUgYW5kIG1heCBzaXplcyBhcmUgY2FyZC1zcGVjaWZpYy4gKi8KIApAQCAtNjE1OCw2ICsyNTg0LDggQEAKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCisJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKIAlpZiAocmV0KQogCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIApAQCAtNjE2NiwxNSArMjU5NCwxNSBAQAogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybiAwOwogCi0JLyogV2FpdCBmb3IgU1RBUlRfQUxJVkUgZnJvbSB1Y29kZS4gT3RoZXJ3aXNlIGNhbGxiYWNrcyBmcm9tCisJLyogV2FpdCBmb3IgU1RBUlRfQUxJVkUgZnJvbSBSdW4gVGltZSB1Y29kZS4gT3RoZXJ3aXNlIGNhbGxiYWNrcyBmcm9tCiAJICogbWFjODAyMTEgd2lsbCBub3QgYmUgcnVuIHN1Y2Nlc3NmdWxseS4gKi8KIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCiAJCQl0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpLAogCQkJVUNPREVfUkVBRFlfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfRVJST1IoIldhaXQgZm9yIFNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBqaWZmaWVzX3RvX21zZWNzKFVDT0RFX1JFQURZX1RJTUVPVVQpKTsKKwkJCUlXTF9FUlJPUigiU1RBUlRfQUxJVkUgdGltZW91dCBhZnRlciAlZG1zLlxuIiwKKwkJCQlqaWZmaWVzX3RvX21zZWNzKFVDT0RFX1JFQURZX1RJTUVPVVQpKTsKIAkJCXJldCA9IC1FVElNRURPVVQ7CiAJCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIAkJfQpAQCAtNjIxMiw4ICsyNjQwLDcgQEAKIAkJICogUlhPTl9GSUxURVJfQVNTT0NfTVNLIEJJVAogCQkgKi8KIAkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCQlpd2w0OTY1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cG9zdF9hc3NvY2lhdGUpOworCQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAl9CiAKQEAgLTYyMjgsOCArMjY1NSw3IEBACiAJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CiB9CiAKLXN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKQorc3RhdGljIGludCBpd2w0OTY1X21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIApAQCAtNjI0Miw5ICsyNjY4LDkgQEAKIAl9CiAKIAlJV0xfREVCVUdfVFgoImRldi0+eG1pdCglZCBieXRlcykgYXQgcmF0ZSAweCUwMnhcbiIsIHNrYi0+bGVuLAotCQkgICAgIGN0bC0+dHhfcmF0ZS0+Yml0cmF0ZSk7CisJCSAgICAgaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBJRUVFODAyMTFfU0tCX0NCKHNrYikpLT5iaXRyYXRlKTsKIAotCWlmIChpd2w0OTY1X3R4X3NrYihwcml2LCBza2IsIGN0bCkpCisJaWYgKGl3bF90eF9za2IocHJpdiwgc2tiKSkKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwpAQCAtNjI3Nyw4ICsyNzAzLDkgQEAKIAkJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCX0KIAotCWlmIChpd2xfaXNfcmVhZHkocHJpdikpCi0JCWl3bDQ5NjVfc2V0X21vZGUocHJpdiwgY29uZi0+dHlwZSk7CisJaWYgKGl3bDQ5NjVfc2V0X21vZGUocHJpdiwgY29uZi0+dHlwZSkgPT0gLUVBR0FJTikKKwkJLyogd2UgYXJlIG5vdCByZWFkeSwgd2lsbCBydW4gYWdhaW4gd2hlbiByZWFkeSAqLworCQlzZXRfYml0KFNUQVRVU19NT0RFX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKQEAgLTYyOTksMTIgKzI3MjYsMjEgQEAKIAljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOworCXUxNiBjaGFubmVsOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXIgdG8gY2hhbm5lbCAlZFxuIiwgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCiAJcHJpdi0+YWRkX3JhZGlvdGFwID0gISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9SQURJT1RBUCk7CiAKKwlpZiAoY29uZi0+cmFkaW9fZW5hYmxlZCAmJiBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8ocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGLUtJTEwgLSB3YWl0aW5nIGZvciB1Q29kZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkKKwkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKKwogCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQlyZXQgPSAtRUlPOwpAQCAtNjMxOSwzMyArMjc1NSwzNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQsCi0JCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpKTsKKwljaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwgY2hhbm5lbCk7CiAJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCisJaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyAmJgorCSAgICAhaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSB7CisJCUlXTF9FUlJPUigiY2hhbm5lbCAlZCBpbiBiYW5kICVkIG5vdCBJQlNTIGNoYW5uZWxcbiIsCisJCQljb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKIAkvKiBpZiB3ZSBhcmUgc3dpdGNoaW5nIGZyb20gaHQgdG8gMi40IGNsZWFyIGZsYWdzCiAJICogZnJvbSBhbnkgaHQgcmVsYXRlZCBpbmZvIHNpbmNlIDIuNCBkb2VzIG5vdAogCSAqIHN1cHBvcnQgaHQgKi8KLQlpZiAoKGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSAhPSBjb25mLT5jaGFubmVsLT5od192YWx1ZSkKKwlpZiAoKGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSAhPSBjaGFubmVsKQogI2lmZGVmIElFRUU4MDIxMV9DT05GX0NIQU5ORUxfU1dJVENICiAJICAgICYmICEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOTkVMX1NXSVRDSCkKICNlbmRpZgogCSkKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gMDsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwogCi0JaXdsY29yZV9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQsCi0JCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSkpOworCWl3bF9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQsIGNoYW5uZWwpOwogCi0JaXdsNDk2NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJaXdsX3NldF9mbGFnc19mb3JfYmFuZChwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kKTsKIAogCS8qIFRoZSBsaXN0IG9mIHN1cHBvcnRlZCByYXRlcyBhbmQgcmF0ZSBtYXNrIGNhbiBiZSBkaWZmZXJlbnQKIAkgKiBmb3IgZWFjaCBiYW5kOyBzaW5jZSB0aGUgYmFuZCBtYXkgaGF2ZSBjaGFuZ2VkLCByZXNldApAQCAtNjM2MSw5ICsyODAxLDYgQEAKIAl9CiAjZW5kaWYKIAotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5yYWRpb19raWxsX3N3KQotCQlwcml2LT5jZmctPm9wcy0+bGliLT5yYWRpb19raWxsX3N3KHByaXYsICFjb25mLT5yYWRpb19lbmFibGVkKTsKLQogCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkgewogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcmFkaW8gZGlzYWJsZWRcbiIpOwogCQlnb3RvIG91dDsKQEAgLTYzNzUsNiArMjgxMiwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlJV0xfREVCVUdfTUFDODAyMTEoIlRYIFBvd2VyIG9sZD0lZCBuZXc9JWRcbiIsCisJCQkgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgY29uZi0+cG93ZXJfbGV2ZWwpOworCisJaXdsX3NldF90eF9wb3dlcihwcml2LCBjb25mLT5wb3dlcl9sZXZlbCwgZmFsc2UpOworCiAJaXdsNDk2NV9zZXRfcmF0ZShwcml2KTsKIAogCWlmIChtZW1jbXAoJnByaXYtPmFjdGl2ZV9yeG9uLApAQCAtNjM5NCwxMiArMjgzNiwxMyBAQAogc3RhdGljIHZvaWQgaXdsNDk2NV9jb25maWdfYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAogCS8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGRvbmUgb25seSBhdCBBUCBicmluZyB1cCAqLwotCWlmICgocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSA9PSAwKSB7CisJaWYgKCEoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpKSB7CiAKIAkJLyogUlhPTiAtIHVuYXNzb2MgKHRvIHNldCB0aW1pbmcgY29tbWFuZCkgKi8KIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwpAQCAtNjQxNCw3ICsyODU3LDcgQEAKIAkJCUlXTF9XQVJOSU5HKCJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkJCSJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7CiAKLQkJaXdsNDk2NV9zZXRfcnhvbl9jaGFpbihwcml2KTsKKwkJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwogCiAJCS8qIEZJWE1FOiB3aGF0IHNob3VsZCBiZSB0aGUgYXNzb2NfaWQgZm9yIEFQPyAqLwogCQlwcml2LT5zdGFnaW5nX3J4b24uYXNzb2NfaWQgPSBjcHVfdG9fbGUxNihwcml2LT5hc3NvY19pZCk7CkBAIC02NDQxLDggKzI4ODQsMTAgQEAKIAkJLyogcmVzdG9yZSBSWE9OIGFzc29jICovCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQlpd2w0OTY1X2NvbW1pdF9yeG9uKHByaXYpOwotCQlpd2w0OTY1X2FjdGl2YXRlX3Fvcyhwcml2LCAxKTsKLQkJaXdsNDk2NV9yeG9uX2FkZF9zdGF0aW9uKHByaXYsIGl3bDQ5NjVfYnJvYWRjYXN0X2FkZHIsIDApOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlpd2xfYWN0aXZhdGVfcW9zKHByaXYsIDEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWl3bF9yeG9uX2FkZF9zdGF0aW9uKHByaXYsIGl3bF9iY2FzdF9hZGRyLCAwKTsKIAl9CiAJaXdsNDk2NV9zZW5kX2JlYWNvbl9jbWQocHJpdik7CiAKQEAgLTY0NTEsNiArMjg5Niw5IEBACiAJICogY2xlYXIgc3RhIHRhYmxlLCBhZGQgQkNBU1Qgc3RhLi4uICovCiB9CiAKKy8qIHRlbXBvcmFyeSAqLworc3RhdGljIGludCBpd2w0OTY1X21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwogc3RhdGljIGludCBpd2w0OTY1X21hY19jb25maWdfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCkBAIC02NDY4LDggKzI5MTYsMTggQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyAmJgorCSAgICBjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKSB7CisJCXN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKKwkJaWYgKCFiZWFjb24pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSBpd2w0OTY1X21hY19iZWFjb25fdXBkYXRlKGh3LCBiZWFjb24pOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfQorCiAJaWYgKChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSAmJgotCSAgICAoIWNvbmYtPmJlYWNvbiB8fCAhY29uZi0+c3NpZF9sZW4pKSB7CisJICAgICghY29uZi0+c3NpZF9sZW4pKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMQogCQkgICAgKCJMZWF2aW5nIGluIEFQIG1vZGUgYmVjYXVzZSBIb3N0QVBEIGlzIG5vdCByZWFkeS5cbiIpOwogCQlyZXR1cm4gMDsKQEAgLTY1MDEsNyArMjk1OSw3IEBACiAJCWlmIChwcml2LT5pYnNzX2JlYWNvbikKIAkJCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOwogCi0JCXByaXYtPmlic3NfYmVhY29uID0gY29uZi0+YmVhY29uOworCQlwcml2LT5pYnNzX2JlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOwogCX0KIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQpAQCAtNjUxMSw3ICsyOTY5LDcgQEAKIAkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbmYtPmJzc2lkKSkgewogCQkvKiBJZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBIVyBzY2FuIGdvaW5nIG9uIGluIHRoZSBiYWNrZ3JvdW5kCiAJCSAqIHRoZW4gd2UgbmVlZCB0byBjYW5jZWwgaXQgZWxzZSB0aGUgUlhPTiBiZWxvdyB3aWxsIGZhaWwuICovCi0JCWlmIChpd2w0OTY1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgeworCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewogCQkJSVdMX1dBUk5JTkcoIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCiAJCQkJICAgICJhZnRlciAxMDBtc1xuIik7CiAJCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOwpAQCAtNjUzMSwxMiArMjk4OSwxMiBAQAogCQllbHNlIHsKIAkJCXJjID0gaXdsNDk2NV9jb21taXRfcnhvbihwcml2KTsKIAkJCWlmICgocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpICYmIHJjKQotCQkJCWl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbigKKwkJCQlpd2xfcnhvbl9hZGRfc3RhdGlvbigKIAkJCQkJcHJpdiwgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkciwgMSk7CiAJCX0KIAogCX0gZWxzZSB7Ci0JCWl3bDQ5NjVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDQ5NjVfY29tbWl0X3J4b24ocHJpdik7CiAJfQpAQCAtNjU2MiwxMSArMzAyMCwxOCBAQAogCQkJCSB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAogCQkJCSBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQogewotCS8qCi0JICogWFhYOiBkdW1teQotCSAqIHNlZSBhbHNvIGl3bDQ5NjVfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZwotCSAqLwotCSp0b3RhbF9mbGFncyA9IDA7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmICgqdG90YWxfZmxhZ3MpICYgRklGX09USEVSX0JTUykgeworCQlJV0xfREVCVUdfTUFDODAyMTEoIkVudGVyOiB0eXBlICVkICgweCV4LCAweCV4KVxuIiwKKwkJCQkgICBJRUVFODAyMTFfSUZfVFlQRV9NTlRSLAorCQkJCSAgIGNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7CisJCS8qIHF1ZXVlIHdvcmsgJ2N1eiBtYWM4MDIxMSBpcyBob2xkaW5nIGEgbG9jayB3aGljaAorCQkgKiBwcmV2ZW50cyB1cyBmcm9tIGlzc3VpbmcgKHN5bmNocm9ub3VzKSBmL3cgY21kcyAqLworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNldF9tb25pdG9yKTsKKwl9CisJKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfAorCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKIH0KIAogc3RhdGljIHZvaWQgaXdsNDk2NV9tYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTY1NzksOCArMzA0NCw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKGl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlpd2w0OTY1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cG9zdF9hc3NvY2lhdGUpOworCQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDQ5NjVfY29tbWl0X3J4b24ocHJpdik7CiAJfQpAQCAtNjU5Niw2NCArMzA2MCw2IEBACiAKIH0KIAotCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfaHRfY29uZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9jb25mID0gYnNzX2NvbmYtPmh0X2NvbmY7Ci0Jc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyAqaHRfYnNzX2NvbmYgPSBic3NfY29uZi0+aHRfYnNzX2NvbmY7Ci0Jc3RydWN0IGl3bF9odF9pbmZvICppd2xfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXI6IFxuIik7Ci0KLQlpd2xfY29uZi0+aXNfaHQgPSBic3NfY29uZi0+YXNzb2NfaHQ7Ci0KLQlpZiAoIWl3bF9jb25mLT5pc19odCkKLQkJcmV0dXJuOwotCi0JcHJpdi0+cHNfbW9kZSA9ICh1OCkoKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUlNT19QUykgPj4gMik7Ci0KLQlpZiAoaHRfY29uZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApCi0JCWl3bF9jb25mLT5zZ2YgfD0gMHgxOwotCWlmIChodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkKLQkJaXdsX2NvbmYtPnNnZiB8PSAweDI7Ci0KLQlpd2xfY29uZi0+aXNfZ3JlZW5fZmllbGQgPSAhIShodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQpOwotCWl3bF9jb25mLT5tYXhfYW1zZHVfc2l6ZSA9Ci0JCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVKTsKLQotCWl3bF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9Ci0JCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIKTsKLQlpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0KLQkJaHRfYnNzX2NvbmYtPmJzc19jYXAgJiBJRUVFODAyMTFfSFRfSUVfQ0hBX1NFQ19PRkZTRVQ7Ci0JLyogSWYgbm8gYWJvdmUgb3IgYmVsb3cgY2hhbm5lbCBzdXBwbGllZCBkaXNhYmxlIEZBVCBjaGFubmVsICovCi0JaWYgKGl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgIT0gSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9BQk9WRSAmJgotCSAgICBpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ICE9IElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfQkVMT1cpCi0JCWl3bF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9IDA7Ci0KLQlpd2xfY29uZi0+dHhfbWltb19wc19tb2RlID0KLQkJKHU4KSgoaHRfY29uZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9NSU1PX1BTKSA+PiAyKTsKLQltZW1jcHkoaXdsX2NvbmYtPnN1cHBfbWNzX3NldCwgaHRfY29uZi0+c3VwcF9tY3Nfc2V0LCAxNik7Ci0KLQlpd2xfY29uZi0+Y29udHJvbF9jaGFubmVsID0gaHRfYnNzX2NvbmYtPnByaW1hcnlfY2hhbm5lbDsKLQlpd2xfY29uZi0+dHhfY2hhbl93aWR0aCA9Ci0JCSEhKGh0X2Jzc19jb25mLT5ic3NfY2FwICYgSUVFRTgwMjExX0hUX0lFX0NIQV9XSURUSCk7Ci0JaXdsX2NvbmYtPmh0X3Byb3RlY3Rpb24gPQotCQlodF9ic3NfY29uZi0+YnNzX29wX21vZGUgJiBJRUVFODAyMTFfSFRfSUVfSFRfUFJPVEVDVElPTjsKLQlpd2xfY29uZi0+bm9uX0dGX1NUQV9wcmVzZW50ID0KLQkJISEoaHRfYnNzX2NvbmYtPmJzc19vcF9tb2RlICYgSUVFRTgwMjExX0hUX0lFX05PTl9HRl9TVEFfUFJTTlQpOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJjb250cm9sIGNoYW5uZWwgJWRcbiIsIGl3bF9jb25mLT5jb250cm9sX2NoYW5uZWwpOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2w0OTY1X2h0X2NvbmYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKQotewotfQotI2VuZGlmCi0KICNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTl9BRlRFUl9BU1NPQyAoSFoqNikKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCkBAIC02Njg0LDcgKzMwOTAsNyBAQAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfSFQpIHsKIAkJSVdMX0RFQlVHX01BQzgwMjExKCJIVCAlZFxuIiwgYnNzX2NvbmYtPmFzc29jX2h0KTsKIAkJaXdsNDk2NV9odF9jb25mKHByaXYsIGJzc19jb25mKTsKLQkJaXdsNDk2NV9zZXRfcnhvbl9jaGFpbihwcml2KTsKKwkJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwogCX0KIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKQEAgLTY3NTEsNyArMzE1Nyw3IEBACiAJfQogCWlmIChsZW4pIHsKIAkJSVdMX0RFQlVHX1NDQU4oImRpcmVjdCBzY2FuIGZvciAlcyBbJWRdXG4gIiwKLQkJCSAgICAgICBpd2w0OTY1X2VzY2FwZV9lc3NpZChzc2lkLCBsZW4pLCAoaW50KWxlbik7CisJCQkgICAgICAgaXdsX2VzY2FwZV9lc3NpZChzc2lkLCBsZW4pLCAoaW50KWxlbik7CiAKIAkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMTsKIAkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuID0gKHU4KQpAQCAtNjc2MCw3ICszMTY2LDcgQEAKIAl9IGVsc2UKIAkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMDsKIAotCXJjID0gaXdsNDk2NV9zY2FuX2luaXRpYXRlKHByaXYpOworCXJjID0gaXdsX3NjYW5faW5pdGlhdGUocHJpdik7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKIApAQCAtNjc4NCwxNCArMzE5MCwxNCBAQAogCiAJSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CiAKLQlzdGFfaWQgPSBpd2w0OTY1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKKwlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwogCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gJXMgbm90IGluIHN0YXRpb24gbWFwLlxuIiwKIAkJCQkgICBwcmludF9tYWMobWFjLCBhZGRyKSk7CiAJCXJldHVybjsKIAl9CiAKLQlpd2w0OTY1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwogCiAJa2V5X2ZsYWdzIHw9IChTVEFfS0VZX0ZMR19US0lQIHwgU1RBX0tFWV9GTEdfTUFQX0tFWV9NU0spOwogCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNihrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKQEAgLTY4MTIsNyArMzIxOCw3IEBACiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAotCWl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CisJaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCkBAIC02ODMxLDcgKzMyMzcsNyBAQAogCiAJSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CiAKLQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8pIHsKKwlpZiAocHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0bykgewogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gaHdjcnlwdG8gZGlzYWJsZWRcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtNjg0MCw3ICszMjQ2LDcgQEAKIAkJLyogb25seSBzdXBwb3J0IHBhaXJ3aXNlIGtleXMgKi8KIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0Jc3RhX2lkID0gaXdsNDk2NV9od19maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7CisJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKIAkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtICVzIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCiAJCQkJICAgcHJpbnRfbWFjKG1hYywgYWRkcikpOwpAQCAtNjg0OSw3ICszMjU1LDcgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsNDk2NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCS8qIElmIHdlIGFyZSBnZXR0aW5nIFdFUCBncm91cCBrZXkgYW5kIHdlIGRpZG4ndCByZWNlaXZlIGFueSBrZXkgbWFwcGluZwpAQCAtNjg2MSw3ICszMjY3LDggQEAKIAkJaWYgKGNtZCA9PSBTRVRfS0VZKQogCQkJaXNfZGVmYXVsdF93ZXBfa2V5ID0gIXByaXYtPmtleV9tYXBwaW5nX2tleTsKIAkJZWxzZQotCQkJaXNfZGVmYXVsdF93ZXBfa2V5ID0gcHJpdi0+ZGVmYXVsdF93ZXBfa2V5OworCQkJaXNfZGVmYXVsdF93ZXBfa2V5ID0KKwkJCQkJKGtleS0+aHdfa2V5X2lkeCA9PSBIV19LRVlfREVGQVVMVCk7CiAJfQogCiAJc3dpdGNoIChjbWQpIHsKQEAgLTY4NzcsNyArMzI4NCw3IEBACiAJCWlmIChpc19kZWZhdWx0X3dlcF9rZXkpCiAJCQlyZXQgPSBpd2xfcmVtb3ZlX2RlZmF1bHRfd2VwX2tleShwcml2LCBrZXkpOwogCQllbHNlCi0JCQlyZXQgPSBpd2xfcmVtb3ZlX2R5bmFtaWNfa2V5KHByaXYsIHN0YV9pZCk7CisJCQlyZXQgPSBpd2xfcmVtb3ZlX2R5bmFtaWNfa2V5KHByaXYsIGtleSwgc3RhX2lkKTsKIAogCQlJV0xfREVCVUdfTUFDODAyMTEoImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKIAkJYnJlYWs7CkBAIC02ODkwLDcgKzMyOTcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAorc3RhdGljIGludCBpd2w0OTY1X21hY19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCQkgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwpAQCAtNjkyNywxNSArMzMzNCwxMiBAQAogCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1txXS5yZXNlcnZlZDEgPSAwOwogCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAxOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKQotCQlpd2w0OTY1X2FjdGl2YXRlX3Fvcyhwcml2LCAxKTsKKwkJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAxKTsKIAllbHNlIGlmIChwcml2LT5hc3NvY19pZCAmJiBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKLQkJaXdsNDk2NV9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CisJCWl3bF9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CiAKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTY5NDYsOCArMzM1MCw4IEBACiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IGksIGF2YWlsOwotCXN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHE7Ci0Jc3RydWN0IGl3bDQ5NjVfcXVldWUgKnE7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBpd2xfcXVldWUgKnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwpAQCAtNjk2MiwxMSArMzM2NiwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBBQ19OVU07IGkrKykgewogCQl0eHEgPSAmcHJpdi0+dHhxW2ldOwogCQlxID0gJnR4cS0+cTsKLQkJYXZhaWwgPSBpd2w0OTY1X3F1ZXVlX3NwYWNlKHEpOworCQlhdmFpbCA9IGl3bF9xdWV1ZV9zcGFjZShxKTsKIAotCQlzdGF0cy0+ZGF0YVtpXS5sZW4gPSBxLT5uX3dpbmRvdyAtIGF2YWlsOwotCQlzdGF0cy0+ZGF0YVtpXS5saW1pdCA9IHEtPm5fd2luZG93IC0gcS0+aGlnaF9tYXJrOwotCQlzdGF0cy0+ZGF0YVtpXS5jb3VudCA9IHEtPm5fd2luZG93OworCQlzdGF0c1tpXS5sZW4gPSBxLT5uX3dpbmRvdyAtIGF2YWlsOworCQlzdGF0c1tpXS5saW1pdCA9IHEtPm5fd2luZG93IC0gcS0+aGlnaF9tYXJrOworCQlzdGF0c1tpXS5jb3VudCA9IHEtPm5fd2luZG93OwogCiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTY5NzksMTQgKzMzODMsOSBAQAogc3RhdGljIGludCBpd2w0OTY1X21hY19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTY0IGl3bDQ5NjVfbWFjX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17CisJcHJpdiA9IGh3LT5wcml2OwogCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwogCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwogCkBAIC03MDAxLDE2ICszNDAwLDExIEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwogCi0JcHJpdi0+bHFfbW5nci5scV9yZWFkeSA9IDA7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCW1lbXNldCgmcHJpdi0+Y3VycmVudF9odF9jb25maWcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX2h0X2luZm8pKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KIAotCWl3bGNvcmVfcmVzZXRfcW9zKHByaXYpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cG9zdF9hc3NvY2lhdGUpOworCWl3bF9yZXNldF9xb3MocHJpdik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPmFzc29jX2lkID0gMDsKQEAgLTcwNDAsMTEgKzM0MzQsMTMgQEAKIAkgKiBjbGVhciBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgYml0CiAJICovCiAJaWYgKHByaXYtPml3X21vZGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVApIHsKLQkJaXdsNDk2NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsNDk2NV9jb21taXRfcnhvbihwcml2KTsKIAl9CiAKKwlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisKIAkvKiBQZXIgbWFjODAyMTEuaDogVGhpcyBpcyBvbmx5IHVzZWQgaW4gSUJTUyBtb2RlLi4uICovCiAJaWYgKHByaXYtPml3X21vZGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewogCkBAIC03MDYwLDExICszNDU2LDExIEBACiAJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CiB9CiAKLXN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorc3RhdGljIGludCBpd2w0OTY1X21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX19sZTY0IHRpbWVzdGFtcDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKQEAgLTcwODksMTMgKzM0ODUsMTUgQEAKIAlwcml2LT5pYnNzX2JlYWNvbiA9IHNrYjsKIAogCXByaXYtPmFzc29jX2lkID0gMDsKKwl0aW1lc3RhbXAgPSAoKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YSktPnUuYmVhY29uLnRpbWVzdGFtcDsKKwlwcml2LT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdSh0aW1lc3RhbXApICsgIChwcml2LT5iZWFjb25faW50ICogMTAwMCk7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpd2xjb3JlX3Jlc2V0X3Fvcyhwcml2KTsKKwlpd2xfcmVzZXRfcW9zKHByaXYpOwogCi0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5wb3N0X2Fzc29jaWF0ZS53b3JrKTsKKwlpd2w0OTY1X3Bvc3RfYXNzb2NpYXRlKHByaXYpOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKQEAgLTcxMTgsMTMgKzM1MTYsMTggQEAKICAqIFNlZSB0aGUgbGV2ZWwgZGVmaW5pdGlvbnMgaW4gaXdsIGZvciBkZXRhaWxzLgogICovCiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZV9kcml2ZXIgKmQsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgaXdsX2RlYnVnX2xldmVsKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkLT5kcml2ZXJfZGF0YTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgcHJpdi0+ZGVidWdfbGV2ZWwpOwogfQotc3RhdGljIHNzaXplX3Qgc3RvcmVfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZV9kcml2ZXIgKmQsCitzdGF0aWMgc3NpemVfdCBzdG9yZV9kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkLT5kcml2ZXJfZGF0YTsKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAJdTMyIHZhbDsKIApAQCAtNzEzMywxNyArMzUzNiw0OSBAQAogCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCiAJCSAgICAgICAiOiAlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CiAJZWxzZQotCQlpd2xfZGVidWdfbGV2ZWwgPSB2YWw7CisJCXByaXYtPmRlYnVnX2xldmVsID0gdmFsOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBEUklWRVJfQVRUUihkZWJ1Z19sZXZlbCwgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgIHNob3dfZGVidWdfbGV2ZWwsIHN0b3JlX2RlYnVnX2xldmVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWJ1Z19sZXZlbCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2RlYnVnX2xldmVsLCBzdG9yZV9kZWJ1Z19sZXZlbCk7CisKIAogI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKIAorc3RhdGljIHNzaXplX3Qgc2hvd192ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3AgKnBhbGl2ZSA9ICZwcml2LT5jYXJkX2FsaXZlOworCXNzaXplX3QgcG9zID0gMDsKKwl1MTYgZWVwcm9tX3ZlcjsKKworCWlmIChwYWxpdmUtPmlzX3ZhbGlkKQorCQlwb3MgKz0gc3ByaW50ZihidWYgKyBwb3MsCisJCQkJImZ3IHZlcnNpb246IDB4JTAxWC4weCUwMVguMHglMDFYLjB4JTAxWFxuIgorCQkJCSJmdyB0eXBlOiAweCUwMVggMHglMDFYXG4iLAorCQkJCXBhbGl2ZS0+dWNvZGVfbWFqb3IsIHBhbGl2ZS0+dWNvZGVfbWlub3IsCisJCQkJcGFsaXZlLT5zd19yZXZbMF0sIHBhbGl2ZS0+c3dfcmV2WzFdLAorCQkJCXBhbGl2ZS0+dmVyX3R5cGUsIHBhbGl2ZS0+dmVyX3N1YnR5cGUpOworCWVsc2UKKwkJcG9zICs9IHNwcmludGYoYnVmICsgcG9zLCAiZncgbm90IGxvYWRlZFxuIik7CisKKwlpZiAocHJpdi0+ZWVwcm9tKSB7CisJCWVlcHJvbV92ZXIgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX1ZFUlNJT04pOworCQlwb3MgKz0gc3ByaW50ZihidWYgKyBwb3MsICJFRVBST00gdmVyc2lvbjogMHgleFxuIiwKKwkJCQkgZWVwcm9tX3Zlcik7CisJfSBlbHNlIHsKKwkJcG9zICs9IHNwcmludGYoYnVmICsgcG9zLCAiRUVQUk9NIG5vdCBpbml0aWFsemVkXG4iKTsKKwl9CisKKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdmVyc2lvbiwgTlVMTCk7CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcGVyYXR1cmUoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNzE1Miw3ICszNTg3LDcgQEAKIAlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUocHJpdikpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT50ZW1wZXJhdHVyZSk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wZXJhdHVyZSwgU19JUlVHTywgc2hvd190ZW1wZXJhdHVyZSwgTlVMTCk7CkBAIC03MTcwLDcgKzM2MDUsNyBAQAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV90eF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNzE4Niw3ICszNjIxLDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQogCQkgICAgICAgIjogJXMgaXMgbm90IGluIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CiAJZWxzZQotCQlpd2w0OTY1X2h3X3JlZ19zZXRfdHhwb3dlcihwcml2LCB2YWwpOworCQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIHZhbCwgZmFsc2UpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNzIxMSw3ICszNjQ2LDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncykgIT0gZmxhZ3MpIHsKIAkJLyogQ2FuY2VsIGFueSBjdXJyZW50bHkgcnVubmluZyBzY2Fucy4uLiAqLwotCQlpZiAoaXdsNDk2NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpCisJCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQogCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOwogCQllbHNlIHsKIAkJCUlXTF9ERUJVR19JTkZPKCJDb21taXR0aW5nIHJ4b24uZmxhZ3MgPSAweCUwNFhcbiIsCkBAIC03MjQ2LDcgKzM2ODEsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAobGUzMl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncykgIT0gZmlsdGVyX2ZsYWdzKSB7CiAJCS8qIENhbmNlbCBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2NhbnMuLi4gKi8KLQkJaWYgKGl3bDQ5NjVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQorCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKIAkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7CiAJCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0dGluZyByeG9uLmZpbHRlcl9mbGFncyA9ICIKQEAgLTczNzYsMjAgKzM4MTEsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKChtb2RlIDwgMSkgfHwgKG1vZGUgPiBJV0xfUE9XRVJfTElNSVQpIHx8IChtb2RlID09IElXTF9QT1dFUl9BQykpCi0JCW1vZGUgPSBJV0xfUE9XRVJfQUM7Ci0JZWxzZQotCQltb2RlIHw9IElXTF9QT1dFUl9FTkFCTEVEOwotCi0JaWYgKG1vZGUgIT0gcHJpdi0+cG93ZXJfbW9kZSkgewotCQlyYyA9IGl3bDQ5NjVfc2VuZF9wb3dlcl9tb2RlKHByaXYsIElXTF9QT1dFUl9MRVZFTChtb2RlKSk7Ci0JCWlmIChyYykgewotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlwcml2LT5wb3dlcl9tb2RlID0gbW9kZTsKKwlyYyA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIG1vZGUpOworCWlmIChyYykgeworCQlJV0xfREVCVUdfTUFDODAyMTEoImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKKwkJZ290byBvdXQ7CiAJfQotCiAJcmMgPSBjb3VudDsKIAogIG91dDoKQEAgLTc0MTksNyArMzg0NSw3IEBACiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0JaW50IGxldmVsID0gSVdMX1BPV0VSX0xFVkVMKHByaXYtPnBvd2VyX21vZGUpOworCWludCBsZXZlbCA9IHByaXYtPnBvd2VyX2RhdGEucG93ZXJfbW9kZTsKIAljaGFyICpwID0gYnVmOwogCiAJcCArPSBzcHJpbnRmKHAsICIlZCAiLCBsZXZlbCk7CkBAIC03NDM3LDE0ICszODYzLDE0IEBACiAJCQkgICAgIHRpbWVvdXRfZHVyYXRpb25bbGV2ZWwgLSAxXSAvIDEwMDAsCiAJCQkgICAgIHBlcmlvZF9kdXJhdGlvbltsZXZlbCAtIDFdIC8gMTAwMCk7CiAJfQotCisvKgogCWlmICghKHByaXYtPnBvd2VyX21vZGUgJiBJV0xfUE9XRVJfRU5BQkxFRCkpCiAJCXAgKz0gc3ByaW50ZihwLCAiIE9GRlxuIik7CiAJZWxzZQogCQlwICs9IHNwcmludGYocCwgIiBcbiIpOwotCisqLworCXAgKz0gc3ByaW50ZihwLCAiIFxuIik7CiAJcmV0dXJuIChwIC0gYnVmICsgMSk7Ci0KIH0KIAogc3RhdGljIERFVklDRV9BVFRSKHBvd2VyX2xldmVsLCBTX0lXVVNSIHwgU19JUlVTUiwgc2hvd19wb3dlcl9sZXZlbCwKQEAgLTc0NTMsOCArMzg3OSw2MiBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19jaGFubmVscyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCS8qIGFsbCB0aGlzIHNoaXQgZG9lc24ndCBiZWxvbmcgaW50byBzeXNmcyBhbnl3YXkgKi8KLQlyZXR1cm4gMDsKKworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzdXBwX2JhbmQgPSBOVUxMOworCWludCBsZW4gPSAwLCBpOworCWludCBjb3VudCA9IDA7CisKKwlpZiAoIXRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykpCisJCXJldHVybiAtRUFHQUlOOworCisJc3VwcF9iYW5kID0gaXdsX2dldF9od19tb2RlKHByaXYsIElFRUU4MDIxMV9CQU5EXzJHSFopOworCWNoYW5uZWxzID0gc3VwcF9iYW5kLT5jaGFubmVsczsKKwljb3VudCA9IHN1cHBfYmFuZC0+bl9jaGFubmVsczsKKworCWxlbiArPSBzcHJpbnRmKCZidWZbbGVuXSwKKwkJCSJEaXNwbGF5aW5nICVkIGNoYW5uZWxzIGluIDIuNEdIeiBiYW5kICIKKwkJCSIoODAyLjExYmcpOlxuIiwgY291bnQpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCWxlbiArPSBzcHJpbnRmKCZidWZbbGVuXSwgIiVkOiAlZGRCbTogQlNTJXMlcywgJXMuXG4iLAorCQkJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKKwkJCQljaGFubmVsc1tpXS5jZW50ZXJfZnJlcSksCisJCQkJY2hhbm5lbHNbaV0ubWF4X3Bvd2VyLAorCQkJCWNoYW5uZWxzW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUkFEQVIgPworCQkJCSIgKElFRUUgODAyLjExaCByZXF1aXJlZCkiIDogIiIsCisJCQkJKCEoY2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTKQorCQkJCXx8IChjaGFubmVsc1tpXS5mbGFncyAmCisJCQkJSUVFRTgwMjExX0NIQU5fUkFEQVIpKSA/ICIiIDoKKwkJCQkiLCBJQlNTIiwKKwkJCQljaGFubmVsc1tpXS5mbGFncyAmCisJCQkJSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOID8KKwkJCQkicGFzc2l2ZSBvbmx5IiA6ICJhY3RpdmUvcGFzc2l2ZSIpOworCisJc3VwcF9iYW5kID0gaXdsX2dldF9od19tb2RlKHByaXYsIElFRUU4MDIxMV9CQU5EXzVHSFopOworCWNoYW5uZWxzID0gc3VwcF9iYW5kLT5jaGFubmVsczsKKwljb3VudCA9IHN1cHBfYmFuZC0+bl9jaGFubmVsczsKKworCWxlbiArPSBzcHJpbnRmKCZidWZbbGVuXSwgIkRpc3BsYXlpbmcgJWQgY2hhbm5lbHMgaW4gNS4yR0h6IGJhbmQgIgorCQkJIig4MDIuMTFhKTpcbiIsIGNvdW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQlsZW4gKz0gc3ByaW50ZigmYnVmW2xlbl0sICIlZDogJWRkQm06IEJTUyVzJXMsICVzLlxuIiwKKwkJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCisJCQkJY2hhbm5lbHNbaV0uY2VudGVyX2ZyZXEpLAorCQkJCWNoYW5uZWxzW2ldLm1heF9wb3dlciwKKwkJCQljaGFubmVsc1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSID8KKwkJCQkiIChJRUVFIDgwMi4xMWggcmVxdWlyZWQpIiA6ICIiLAorCQkJCSgoY2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTKQorCQkJCXx8IChjaGFubmVsc1tpXS5mbGFncyAmCisJCQkJSUVFRTgwMjExX0NIQU5fUkFEQVIpKSA/ICIiIDoKKwkJCQkiLCBJQlNTIiwKKwkJCQljaGFubmVsc1tpXS5mbGFncyAmCisJCQkJSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOID8KKwkJCQkicGFzc2l2ZSBvbmx5IiA6ICJhY3RpdmUvcGFzc2l2ZSIpOworCisJcmV0dXJuIGxlbjsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGNoYW5uZWxzLCBTX0lSVVNSLCBzaG93X2NoYW5uZWxzLCBOVUxMKTsKQEAgLTc0NjMsNyArMzk0Myw3IEBACiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0JdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfbm90aWZfc3RhdGlzdGljcyk7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKTsKIAl1MzIgbGVuID0gMCwgb2ZzID0gMDsKIAl1OCAqZGF0YSA9ICh1OCAqKSAmIHByaXYtPnN0YXRpc3RpY3M7CiAJaW50IHJjID0gMDsKQEAgLTc0OTcsNDQgKzM5NzcsNiBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdGlzdGljcywgU19JUlVHTywgc2hvd19zdGF0aXN0aWNzLCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19hbnRlbm5hKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0KLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+YW50ZW5uYSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2FudGVubmEoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWludCBhbnQ7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCi0JaWYgKGNvdW50ID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHNzY2FuZihidWYsICIlMWkiLCAmYW50KSAhPSAxKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIpOwotCQlyZXR1cm4gY291bnQ7Ci0JfQotCi0JaWYgKChhbnQgPj0gMCkgJiYgKGFudCA8PSAyKSkgewotCQlJV0xfREVCVUdfSU5GTygiU2V0dGluZyBhbnRlbm5hIHNlbGVjdCB0byAlZC5cbiIsIGFudCk7Ci0JCXByaXYtPmFudGVubmEgPSAoZW51bSBpd2w0OTY1X2FudGVubmEpYW50OwotCX0gZWxzZQotCQlJV0xfREVCVUdfSU5GTygiQmFkIGFudGVubmEgc2VsZWN0IHZhbHVlICVkLlxuIiwgYW50KTsKLQotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoYW50ZW5uYSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfYW50ZW5uYSwgc3RvcmVfYW50ZW5uYSk7Ci0KIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNzU0Niw0MSArMzk4OCwxMyBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IGR1bXBfZXJyb3JfbG9nKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKLQotCWlmIChwWzBdID09ICcxJykKLQkJaXdsNDk2NV9kdW1wX25pY19lcnJvcl9sb2coKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhKTsKLQotCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoZHVtcF9lcnJvcnMsIFNfSVdVU1IsIE5VTEwsIGR1bXBfZXJyb3JfbG9nKTsKLQotc3RhdGljIHNzaXplX3QgZHVtcF9ldmVudF9sb2coc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JY2hhciAqcCA9IChjaGFyICopYnVmOwotCi0JaWYgKHBbMF0gPT0gJzEnKQotCQlpd2w0OTY1X2R1bXBfbmljX2V2ZW50X2xvZygoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOwotCi0JcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihkdW1wX2V2ZW50cywgU19JV1VTUiwgTlVMTCwgZHVtcF9ldmVudF9sb2cpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBkcml2ZXIgc2V0dXAgYW5kIHRlYXJkb3duCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsX3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoRFJWX05BTUUpOwogCkBAIC03NTg5LDM4ICs0MDAzLDQyIEBACiAJSU5JVF9XT1JLKCZwcml2LT51cCwgaXdsNDk2NV9iZ191cCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXN0YXJ0LCBpd2w0OTY1X2JnX3Jlc3RhcnQpOwogCUlOSVRfV09SSygmcHJpdi0+cnhfcmVwbGVuaXNoLCBpd2w0OTY1X2JnX3J4X3JlcGxlbmlzaCk7Ci0JSU5JVF9XT1JLKCZwcml2LT5zY2FuX2NvbXBsZXRlZCwgaXdsNDk2NV9iZ19zY2FuX2NvbXBsZXRlZCk7Ci0JSU5JVF9XT1JLKCZwcml2LT5yZXF1ZXN0X3NjYW4sIGl3bDQ5NjVfYmdfcmVxdWVzdF9zY2FuKTsKLQlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sIGl3bDQ5NjVfYmdfYWJvcnRfc2Nhbik7CiAJSU5JVF9XT1JLKCZwcml2LT5yZl9raWxsLCBpd2w0OTY1X2JnX3JmX2tpbGwpOwogCUlOSVRfV09SSygmcHJpdi0+YmVhY29uX3VwZGF0ZSwgaXdsNDk2NV9iZ19iZWFjb25fdXBkYXRlKTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cG9zdF9hc3NvY2lhdGUsIGl3bDQ5NjVfYmdfcG9zdF9hc3NvY2lhdGUpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pbml0X2FsaXZlX3N0YXJ0LCBpd2w0OTY1X2JnX2luaXRfYWxpdmVfc3RhcnQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hbGl2ZV9zdGFydCwgaXdsNDk2NV9iZ19hbGl2ZV9zdGFydCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnNjYW5fY2hlY2ssIGl3bDQ5NjVfYmdfc2Nhbl9jaGVjayk7CisJSU5JVF9XT1JLKCZwcml2LT5zZXRfbW9uaXRvciwgaXdsNDk2NV9iZ19zZXRfbW9uaXRvcik7CisJSU5JVF9XT1JLKCZwcml2LT5ydW5fdGltZV9jYWxpYl93b3JrLCBpd2xfYmdfcnVuX3RpbWVfY2FsaWJfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmluaXRfYWxpdmVfc3RhcnQsIGl3bF9iZ19pbml0X2FsaXZlX3N0YXJ0KTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+YWxpdmVfc3RhcnQsIGl3bF9iZ19hbGl2ZV9zdGFydCk7CiAKLQlpd2w0OTY1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7CisJLyogRklYTUUgOiByZW1vdmUgd2hlbiByZXNvbHZlZCBQRU5ESU5HICovCisJSU5JVF9XT1JLKCZwcml2LT5zY2FuX2NvbXBsZXRlZCwgaXdsX2JnX3NjYW5fY29tcGxldGVkKTsKKwlpd2xfc2V0dXBfc2Nhbl9kZWZlcnJlZF93b3JrKHByaXYpOworCisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldHVwX2RlZmVycmVkX3dvcmspCisJCXByaXYtPmNmZy0+b3BzLT5saWItPnNldHVwX2RlZmVycmVkX3dvcmsocHJpdik7CisKKwlpbml0X3RpbWVyKCZwcml2LT5zdGF0aXN0aWNzX3BlcmlvZGljKTsKKwlwcml2LT5zdGF0aXN0aWNzX3BlcmlvZGljLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OworCXByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMuZnVuY3Rpb24gPSBpd2w0OTY1X2JnX3N0YXRpc3RpY3NfcGVyaW9kaWM7CiAKIAl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCiAJCSAgICAgaXdsNDk2NV9pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpd2w0OTY1X2h3X2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpOworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5jYW5jZWxfZGVmZXJyZWRfd29yaykKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+Y2FuY2VsX2RlZmVycmVkX3dvcmsocHJpdik7CiAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmluaXRfYWxpdmVfc3RhcnQpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFsaXZlX3N0YXJ0KTsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5wb3N0X2Fzc29jaWF0ZSk7CiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+YmVhY29uX3VwZGF0ZSk7CisJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMpOwogfQogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXdsNDk2NV9zeXNmc19lbnRyaWVzW10gPSB7Ci0JJmRldl9hdHRyX2FudGVubmEuYXR0ciwKIAkmZGV2X2F0dHJfY2hhbm5lbHMuYXR0ciwKLQkmZGV2X2F0dHJfZHVtcF9lcnJvcnMuYXR0ciwKLQkmZGV2X2F0dHJfZHVtcF9ldmVudHMuYXR0ciwKIAkmZGV2X2F0dHJfZmxhZ3MuYXR0ciwKIAkmZGV2X2F0dHJfZmlsdGVyX2ZsYWdzLmF0dHIsCiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKQEAgLTc2MzMsNiArNDA1MSwxMCBAQAogCSZkZXZfYXR0cl9zdGF0dXMuYXR0ciwKIAkmZGV2X2F0dHJfdGVtcGVyYXR1cmUuYXR0ciwKIAkmZGV2X2F0dHJfdHhfcG93ZXIuYXR0ciwKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCSZkZXZfYXR0cl9kZWJ1Z19sZXZlbC5hdHRyLAorI2VuZGlmCisJJmRldl9hdHRyX3ZlcnNpb24uYXR0ciwKIAogCU5VTEwKIH07CkBAIC03NjU2LDEzICs0MDc4LDkgQEAKIAkuZ2V0X3N0YXRzID0gaXdsNDk2NV9tYWNfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMgPSBpd2w0OTY1X21hY19nZXRfdHhfc3RhdHMsCiAJLmNvbmZfdHggPSBpd2w0OTY1X21hY19jb25mX3R4LAotCS5nZXRfdHNmID0gaXdsNDk2NV9tYWNfZ2V0X3RzZiwKIAkucmVzZXRfdHNmID0gaXdsNDk2NV9tYWNfcmVzZXRfdHNmLAotCS5iZWFjb25fdXBkYXRlID0gaXdsNDk2NV9tYWNfYmVhY29uX3VwZGF0ZSwKIAkuYnNzX2luZm9fY2hhbmdlZCA9IGl3bDQ5NjVfYnNzX2luZm9fY2hhbmdlZCwKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogCS5hbXBkdV9hY3Rpb24gPSBpd2w0OTY1X21hY19hbXBkdV9hY3Rpb24sCi0jZW5kaWYgIC8qIENPTkZJR19JV0w0OTY1X0hUICovCiAJLmh3X3NjYW4gPSBpd2w0OTY1X21hY19od19zY2FuCiB9OwogCkBAIC03NjgyLDcgKzQxMDAsOSBAQAogCS8qIERpc2FibGluZyBoYXJkd2FyZSBzY2FuIG1lYW5zIHRoYXQgbWFjODAyMTEgd2lsbCBwZXJmb3JtIHNjYW5zCiAJICogInRoZSBoYXJkIHdheSIsIHJhdGhlciB0aGFuIHVzaW5nIGRldmljZSdzIHNjYW4uICovCiAJaWYgKGNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV9od19zY2FuKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJEaXNhYmxpbmcgaHdfc2NhblxuIik7CisJCWlmIChjZmctPm1vZF9wYXJhbXMtPmRlYnVnICYgSVdMX0RMX0lORk8pCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICYocGRldi0+ZGV2KSwKKwkJCQkgICAiRGlzYWJsaW5nIGh3X3NjYW5cbiIpOwogCQlpd2w0OTY1X2h3X29wcy5od19zY2FuID0gTlVMTDsKIAl9CiAKQEAgLTc3MDEsNyArNDEyMSw3IEBACiAJcHJpdi0+cGNpX2RldiA9IHBkZXY7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWl3bF9kZWJ1Z19sZXZlbCA9IHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGVidWc7CisJcHJpdi0+ZGVidWdfbGV2ZWwgPSBwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRlYnVnOwogCWF0b21pY19zZXQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCwgMCk7CiAjZW5kaWYKIApAQCAtNzcxNSwxMyArNDEzNSwxOSBAQAogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKLQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKIAlpZiAoIWVycikKLQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKKwlpZiAoZXJyKSB7CisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAoIWVycikKKwkJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJCS8qIGJvdGggYXR0ZW1wdHMgZmFpbGVkOiAqLwogCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkJIjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iLAorCQkJCURSVl9OQU1FKTsKIAkJCWdvdG8gb3V0X3BjaV9kaXNhYmxlX2RldmljZTsKKwkJfQogCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX05BTUUpOwpAQCAtNzc0NywzMSArNDE3MywzMSBAQAogCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKIAlJV0xfREVCVUdfSU5GTygicGNpX3Jlc291cmNlX2Jhc2UgPSAlcFxuIiwgcHJpdi0+aHdfYmFzZSk7CiAKKwlpd2xfaHdfZGV0ZWN0KHByaXYpOwogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJIjogRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzXG4iLCBwcml2LT5jZmctPm5hbWUpOworCQkiOiBEZXRlY3RlZCBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgJXMgUkVWPTB4JVhcbiIsCisJCXByaXYtPmNmZy0+bmFtZSwgcHJpdi0+aHdfcmV2KTsKIAorCS8qIGFtcCBpbml0ICovCisJZXJyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOworCWlmIChlcnIgPCAwKSB7CisJCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCBBUE1HXG4iKTsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CiAJLyoqKioqKioqKioqKioqKioqCiAJICogNC4gUmVhZCBFRVBST00KIAkgKioqKioqKioqKioqKioqKiovCi0JLyogbmljIGluaXQgKi8KLQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKLQkJQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9ESVNfTDBTX0VYSVRfVElNRVIpOwotCi0JaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQllcnIgPSBpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLAotCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKLQkJZ290byBvdXRfaW91bm1hcDsKLQl9CiAJLyogUmVhZCB0aGUgRUVQUk9NICovCiAJZXJyID0gaXdsX2VlcHJvbV9pbml0KHByaXYpOwogCWlmIChlcnIpIHsKIAkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOwogCQlnb3RvIG91dF9pb3VubWFwOwogCX0KLQkvKiBNQUMgQWRkcmVzcyBsb2NhdGlvbiBpbiBFRVBST00gc2FtZSBmb3IgMzk0NS80OTY1ICovCisJZXJyID0gaXdsX2VlcHJvbV9jaGVja192ZXJzaW9uKHByaXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2lvdW5tYXA7CisKKwkvKiBleHRyYWN0IE1BQyBBZGRyZXNzICovCiAJaXdsX2VlcHJvbV9nZXRfbWFjKHByaXYsIHByaXYtPm1hY19hZGRyKTsKIAlJV0xfREVCVUdfSU5GTygiTUFDIGFkZHJlc3M6ICVzXG4iLCBwcmludF9tYWMobWFjLCBwcml2LT5tYWNfYWRkcikpOwogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHByaXYtPmh3LCBwcml2LT5tYWNfYWRkcik7CkBAIC03Nzc5LDE5ICs0MjA1LDE4IEBACiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDUuIFNldHVwIEhXIGNvbnN0YW50cwogCSAqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogRGV2aWNlLXNwZWNpZmljIHNldHVwICovCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9od19wYXJhbXMocHJpdikpIHsKKwlpZiAoaXdsX3NldF9od19wYXJhbXMocHJpdikpIHsKIAkJSVdMX0VSUk9SKCJmYWlsZWQgdG8gc2V0IGh3IHBhcmFtZXRlcnNcbiIpOwotCQlnb3RvIG91dF9pb3VubWFwOworCQlnb3RvIG91dF9mcmVlX2VlcHJvbTsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKgotCSAqIDYuIFNldHVwIGh3L3ByaXYKKwkgKiA2LiBTZXR1cCBwcml2CiAJICoqKioqKioqKioqKioqKioqKiovCiAKLQllcnIgPSBpd2xfc2V0dXAocHJpdik7CisJZXJyID0gaXdsX2luaXRfZHJ2KHByaXYpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X3Vuc2V0X2h3X3BhcmFtczsKKwkJZ290byBvdXRfZnJlZV9lZXByb207CiAJLyogQXQgdGhpcyBwb2ludCBib3RoIGh3IGFuZCBwcml2IGFyZSBpbml0aWFsaXplZC4gKi8KIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03ODA0LDkgKzQyMjksNiBAQAogCQlJV0xfREVCVUdfSU5GTygiUmFkaW8gZGlzYWJsZWQuXG4iKTsKIAl9CiAKLQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5lbmFibGVfcW9zKQotCQlwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlID0gMTsKLQogCS8qKioqKioqKioqKioqKioqKioqKgogCSAqIDguIFNldHVwIHNlcnZpY2VzCiAJICoqKioqKioqKioqKioqKioqKioqLwpAQCAtNzgxNywxNyArNDIzOSwxMiBAQAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2w0OTY1X2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewogCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXNcbiIpOwotCQlnb3RvIG91dF91bnNldF9od19wYXJhbXM7CisJCWdvdG8gb3V0X3VuaW5pdF9kcnY7CiAJfQogCi0JZXJyID0gaXdsX2RiZ2ZzX3JlZ2lzdGVyKHByaXYsIERSVl9OQU1FKTsKLQlpZiAoZXJyKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGZpbGVzXG4iKTsKLQkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOwotCX0KIAotCWl3bDQ5NjVfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKLQlpd2w0OTY1X3NldHVwX3J4X2hhbmRsZXJzKHByaXYpOworCWl3bF9zZXR1cF9kZWZlcnJlZF93b3JrKHByaXYpOworCWl3bF9zZXR1cF9yeF9oYW5kbGVycyhwcml2KTsKIAogCS8qKioqKioqKioqKioqKioqKioqKgogCSAqIDkuIENvbmNsdWRlCkBAIC03ODM1LDE0ICs0MjUyLDMxIEBACiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCi0JLyogbm90aWZ5IGl3bGNvcmUgdG8gaW5pdCAqLwotCWl3bGNvcmVfbG93X2xldmVsX25vdGlmeShwcml2LCBJV0xDT1JFX0lOSVRfRVZUKTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIDEwLiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWVyciA9IGl3bF9zZXR1cF9tYWMocHJpdik7CisJaWYgKGVycikKKwkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOworCisJZXJyID0gaXdsX2RiZ2ZzX3JlZ2lzdGVyKHByaXYsIERSVl9OQU1FKTsKKwlpZiAoZXJyKQorCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisKKwllcnIgPSBpd2xfcmZraWxsX2luaXQocHJpdik7CisJaWYgKGVycikKKwkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSRktJTEwgc3lzdGVtLiAiCisJCQkJICAiSWdub3JpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCWl3bF9wb3dlcl9pbml0aWFsaXplKHByaXYpOwogCXJldHVybiAwOwogCiAgb3V0X3JlbW92ZV9zeXNmczoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsNDk2NV9hdHRyaWJ1dGVfZ3JvdXApOwotIG91dF91bnNldF9od19wYXJhbXM6Ci0JaXdsNDk2NV91bnNldF9od19wYXJhbXMocHJpdik7Cisgb3V0X3VuaW5pdF9kcnY6CisJaXdsX3VuaW5pdF9kcnYocHJpdik7Cisgb3V0X2ZyZWVfZWVwcm9tOgorCWl3bF9lZXByb21fZnJlZShwcml2KTsKICBvdXRfaW91bm1hcDoKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5od19iYXNlKTsKICBvdXRfcGNpX3JlbGVhc2VfcmVnaW9uczoKQEAgLTc4NTksOCArNDI5Myw2IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaXdsNDk2NV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcTsKLQlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFwcml2KQpAQCAtNzg2OCw2ICs0MzAwLDkgQEAKIAogCUlXTF9ERUJVR19JTkZPKCIqKiogVU5MT0FEIERSSVZFUiAqKipcbiIpOwogCisJaXdsX2RiZ2ZzX3VucmVnaXN0ZXIocHJpdik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml3bDQ5NjVfYXR0cmlidXRlX2dyb3VwKTsKKwogCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKSB7CiAJCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHByaXYtPmh3KTsKIAkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDA7CkBAIC03ODg2LDI2ICs0MzIxLDE1IEBACiAKIAlpd2xfc3luY2hyb25pemVfaXJxKHByaXYpOwogCi0JLyogRnJlZSBNQUMgaGFzaCBsaXN0IGZvciBBREhPQyAqLwotCWZvciAoaSA9IDA7IGkgPCBJV0xfSUJTU19NQUNfSEFTSF9TSVpFOyBpKyspIHsKLQkJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZwcml2LT5pYnNzX21hY19oYXNoW2ldKSB7Ci0JCQlsaXN0X2RlbChwKTsKLQkJCWtmcmVlKGxpc3RfZW50cnkocCwgc3RydWN0IGl3bDQ5NjVfaWJzc19zZXEsIGxpc3QpKTsKLQkJfQotCX0KLQotCWl3bGNvcmVfbG93X2xldmVsX25vdGlmeShwcml2LCBJV0xDT1JFX1JFTU9WRV9FVlQpOwotCWl3bF9kYmdmc191bnJlZ2lzdGVyKHByaXYpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2w0OTY1X2F0dHJpYnV0ZV9ncm91cCk7Ci0KKwlpd2xfcmZraWxsX3VucmVnaXN0ZXIocHJpdik7CiAJaXdsNDk2NV9kZWFsbG9jX3Vjb2RlX3BjaShwcml2KTsKIAogCWlmIChwcml2LT5yeHEuYmQpCi0JCWl3bDQ5NjVfcnhfcXVldWVfZnJlZShwcml2LCAmcHJpdi0+cnhxKTsKLQlpd2w0OTY1X2h3X3R4cV9jdHhfZnJlZShwcml2KTsKKwkJaXdsX3J4X3F1ZXVlX2ZyZWUocHJpdiwgJnByaXYtPnJ4cSk7CisJaXdsX2h3X3R4cV9jdHhfZnJlZShwcml2KTsKIAotCWl3bDQ5NjVfdW5zZXRfaHdfcGFyYW1zKHByaXYpOwotCWl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOworCWl3bF9lZXByb21fZnJlZShwcml2KTsKIAogCiAJLypuZXRpZl9zdG9wX3F1ZXVlKGRldik7ICovCkBAIC03OTIyLDggKzQzNDYsNyBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKLQlpd2xfZnJlZV9jaGFubmVsX21hcChwcml2KTsKLQlpd2w0OTY1X2ZyZWVfZ2Vvcyhwcml2KTsKKwlpd2xfdW5pbml0X2Rydihwcml2KTsKIAogCWlmIChwcml2LT5pYnNzX2JlYWNvbikKIAkJZGV2X2tmcmVlX3NrYihwcml2LT5pYnNzX2JlYWNvbik7CkBAIC03OTczLDYgKzQzOTYsMTkgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2xfaHdfY2FyZF9pZHNbXSA9IHsKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjI5LCBQQ0lfQU5ZX0lELCBpd2w0OTY1X2Fnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjMwLCBQQ0lfQU5ZX0lELCBpd2w0OTY1X2Fnbl9jZmcpfSwKKyNpZmRlZiBDT05GSUdfSVdMNTAwMAorCXtJV0xfUENJX0RFVklDRSgweDQyMzIsIDB4MTIwNSwgaXdsNTEwMF9iZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjMyLCAweDEzMDUsIGl3bDUxMDBfYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIzMiwgMHgxMjA2LCBpd2w1MTAwX2FiZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjMyLCAweDEzMDYsIGl3bDUxMDBfYWJnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDQyMzIsIDB4MTMyNiwgaXdsNTEwMF9hYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIzNywgMHgxMjE2LCBpd2w1MTAwX2FiZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjMyLCBQQ0lfQU5ZX0lELCBpd2w1MTAwX2Fnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjM1LCBQQ0lfQU5ZX0lELCBpd2w1MzAwX2Fnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjM2LCBQQ0lfQU5ZX0lELCBpd2w1MzAwX2Fnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjM3LCBQQ0lfQU5ZX0lELCBpd2w1MTAwX2Fnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNBLCBQQ0lfQU5ZX0lELCBpd2w1MzUwX2Fnbl9jZmcpfSwKKyNlbmRpZiAvKiBDT05GSUdfSVdMNTAwMCAqLwogCXswfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpd2xfaHdfY2FyZF9pZHMpOwpAQCAtODAwNiwyMCArNDQ0Miw5IEBACiAJCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CiAJfQotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JcmV0ID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZpd2xfZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX2RlYnVnX2xldmVsKTsKLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBkcml2ZXIgc3lzZnMgZmlsZVxuIik7Ci0JCWdvdG8gZXJyb3JfZGVidWc7Ci0JfQotI2VuZGlmCiAKIAlyZXR1cm4gcmV0OwogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLWVycm9yX2RlYnVnOgotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXdsX2RyaXZlcik7Ci0jZW5kaWYKIGVycm9yX3JlZ2lzdGVyOgogCWl3bDQ5NjVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKIAlyZXR1cm4gcmV0OwpAQCAtODAyNyw5ICs0NDUyLDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGl3bDQ5NjVfZXhpdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JZHJpdmVyX3JlbW92ZV9maWxlKCZpd2xfZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX2RlYnVnX2xldmVsKTsKLSNlbmRpZgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXdsX2RyaXZlcik7CiAJaXdsNDk2NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZQppbmRleCBmMDcyNGUzLi4wMjA4MGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZQpAQCAtMSw5ICsxLDUgQEAKLWxpYmVydGFzLW9ianMgOj0gbWFpbi5vIHdleHQubyBcCi0JCXJ4Lm8gdHgubyBjbWQubyAJICBcCi0JCWNtZHJlc3AubyBzY2FuLm8JICBcCi0JCTExZC5vIAkJICBcCi0JCWRlYnVnZnMubwkgIFwKLQkJZXRodG9vbC5vIGFzc29jLm8KK2xpYmVydGFzLW9ianMgOj0gbWFpbi5vIHdleHQubyByeC5vIHR4Lm8gY21kLm8gY21kcmVzcC5vIHNjYW4ubyAxMWQubwlcCisJCSBkZWJ1Z2ZzLm8gcGVyc2lzdGNmZy5vIGV0aHRvb2wubyBhc3NvYy5vCiAKIHVzYjh4eHgtb2JqcyArPSBpZl91c2IubwogbGliZXJ0YXNfY3Mtb2JqcyArPSBpZl9jcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYwppbmRleCBjOWMzNjQwLi5hMjY3ZDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKQEAgLTYwMyw3ICs2MDMsOCBAQAogCQkvKiBDaGFuZ2UgbWVzaCBjaGFubmVsIGZpcnN0OyAyMS5wMjEgZmlybXdhcmUgd29uJ3QgbGV0CiAJCSAgIHlvdSBjaGFuZ2UgY2hhbm5lbCBvdGhlcndpc2UgKGV2ZW4gdGhvdWdoIGl0J2xsIHJldHVybgogCQkgICBhbiBlcnJvciB0byB0aGlzICovCi0JCWxic19tZXNoX2NvbmZpZyhwcml2LCAwLCBhc3NvY19yZXEtPmNoYW5uZWwpOworCQlsYnNfbWVzaF9jb25maWcocHJpdiwgQ01EX0FDVF9NRVNIX0NPTkZJR19TVE9QLAorCQkJCWFzc29jX3JlcS0+Y2hhbm5lbCk7CiAJfQogCiAJbGJzX2RlYl9hc3NvYygiQVNTT0M6IGNoYW5uZWw6ICVkIC0+ICVkXG4iLApAQCAtNjQyLDcgKzY0Myw4IEBACiAKICByZXN0b3JlX21lc2g6CiAJaWYgKHByaXYtPm1lc2hfZGV2KQotCQlsYnNfbWVzaF9jb25maWcocHJpdiwgMSwgcHJpdi0+Y3VyYnNzcGFyYW1zLmNoYW5uZWwpOworCQlsYnNfbWVzaF9jb25maWcocHJpdiwgQ01EX0FDVF9NRVNIX0NPTkZJR19TVEFSVCwKKwkJCQlwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCk7CiAKICBkb25lOgogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKQEAgLTEyNDgsNyArMTI1MCw3IEBACiAJbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiY29tbW9uIHJhdGVzIiwgdG1wLCB0bXBfc2l6ZSk7CiAJbGJzX2RlYl9qb2luKCJUWCBkYXRhIHJhdGUgMHglMDJ4XG4iLCBwcml2LT5jdXJfcmF0ZSk7CiAKLQlpZiAoIXByaXYtPmF1dG9fcmF0ZSkgeworCWlmICghcHJpdi0+ZW5hYmxlaHdhdXRvKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB0bXBfc2l6ZTsgaSsrKSB7CiAJCQlpZiAodG1wW2ldID09IHByaXYtPmN1cl9yYXRlKQogCQkJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKaW5kZXggODEyNGZkOS4uNzU0MjdlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKQEAgLTQsNiArNCw3IEBACiAgICovCiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgImhvc3QuaCIKICNpbmNsdWRlICJob3N0Y21kLmgiCkBAIC0xMDksNyArMTEwLDcgQEAKIAkgKiBDRiBjYXJkICAgIGZpcm13YXJlIDUuMC4xNnAwOiAgIGNhcCAweDAwMDAwMzAzCiAJICogVVNCIGRvbmdsZSBmaXJtd2FyZSA1LjExMC4xN3AyOiBjYXAgMHgwMDAwMDMwMwogCSAqLwotCXByaW50aygibGliZXJ0YXM6ICVzLCBmdyAldS4ldS4ldXAldSwgY2FwIDB4JTA4eFxuIiwKKwlsYnNfcHJfaW5mbygiJXMsIGZ3ICV1LiV1LiV1cCV1LCBjYXAgMHglMDh4XG4iLAogCQlwcmludF9tYWMobWFjLCBjbWQucGVybWFuZW50YWRkciksCiAJCXByaXYtPmZ3cmVsZWFzZSA+PiAyNCAmIDB4ZmYsCiAJCXByaXYtPmZ3cmVsZWFzZSA+PiAxNiAmIDB4ZmYsCkBAIC02NzUsNTggKzY3Niw2MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGxic19jbWRfODAyXzExX3JhdGVfYWRhcHRfcmF0ZXNldChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJCSAgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAotCQkJCQkgICAgICB1MTYgY21kX2FjdGlvbikKK3N0YXRpYyBfX2xlMTYgbGJzX3JhdGVfdG9fZndfYml0bWFwKGludCByYXRlLCBpbnQgbG93ZXJfcmF0ZXNfb2spCiB7Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfcmF0ZV9hZGFwdF9yYXRlc2V0Ci0JKnJhdGVhZGFwdCA9ICZjbWQtPnBhcmFtcy5yYXRlc2V0OworLyoJCUJpdCAgCVJhdGUKKyoJCTE1OjEzIFJlc2VydmVkCisqCQkxMiAgICA1NCBNYnBzCisqCQkxMSAgICA0OCBNYnBzCisqCQkxMCAgICAzNiBNYnBzCisqCQk5ICAgICAyNCBNYnBzCisqCQk4ICAgICAxOCBNYnBzCisqCQk3ICAgICAxMiBNYnBzCisqCQk2ICAgICA5IE1icHMKKyoJCTUgICAgIDYgTWJwcworKgkJNCAgICAgUmVzZXJ2ZWQKKyoJCTMgICAgIDExIE1icHMKKyoJCTIgICAgIDUuNSBNYnBzCisqCQkxICAgICAyIE1icHMKKyoJCTAgICAgIDEgTWJwcworKiovCiAKLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQljbWQtPnNpemUgPQotCSAgICBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfcmF0ZV9hZGFwdF9yYXRlc2V0KQotCQkJICAgICArIFNfRFNfR0VOKTsKLQljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX1JBVEVfQURBUFRfUkFURVNFVCk7Ci0KLQlyYXRlYWRhcHQtPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOwotCXJhdGVhZGFwdC0+ZW5hYmxlaHdhdXRvID0gY3B1X3RvX2xlMTYocHJpdi0+ZW5hYmxlaHdhdXRvKTsKLQlyYXRlYWRhcHQtPmJpdG1hcCA9IGNwdV90b19sZTE2KHByaXYtPnJhdGViaXRtYXApOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Ci0JcmV0dXJuIDA7CisJdWludDE2X3QgcmF0ZW1hc2s7CisJaW50IGkgPSBsYnNfZGF0YV9yYXRlX3RvX2Z3X2luZGV4KHJhdGUpOworCWlmIChsb3dlcl9yYXRlc19vaykKKwkJcmF0ZW1hc2sgPSAoMHgxZmVmID4+ICgxMiAtIGkpKTsKKwllbHNlCisJCXJhdGVtYXNrID0gKDEgPDwgaSk7CisJcmV0dXJuIGNwdV90b19sZTE2KHJhdGVtYXNrKTsKIH0KIAotLyoqCi0gKiAgQGJyaWVmIEdldCB0aGUgY3VycmVudCBkYXRhIHJhdGUKLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKgotICogIEByZXR1cm4gCSAgIAlUaGUgZGF0YSByYXRlIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKLSAqLwotaW50IGxic19nZXRfZGF0YV9yYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKK2ludCBsYnNfY21kXzgwMl8xMV9yYXRlX2FkYXB0X3JhdGVzZXQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCSAgICAgIHVpbnQxNl90IGNtZF9hY3Rpb24pCiB7Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfZGF0YV9yYXRlIGNtZDsKLQlpbnQgcmV0ID0gLTE7CisJc3RydWN0IGNtZF9kc184MDJfMTFfcmF0ZV9hZGFwdF9yYXRlc2V0IGNtZDsKKwlpbnQgcmV0OwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7CiAKLQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWlmICghcHJpdi0+Y3VyX3JhdGUgJiYgIXByaXYtPmVuYWJsZWh3YXV0bykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7Ci0JY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9BQ1RfR0VUX1RYX1JBVEUpOwogCi0JcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfREFUQV9SQVRFLCAmY21kKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKKwljbWQuYWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJY21kLmVuYWJsZWh3YXV0byA9IGNwdV90b19sZTE2KHByaXYtPmVuYWJsZWh3YXV0byk7CisJY21kLmJpdG1hcCA9IGxic19yYXRlX3RvX2Z3X2JpdG1hcChwcml2LT5jdXJfcmF0ZSwgcHJpdi0+ZW5hYmxlaHdhdXRvKTsKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9SQVRFX0FEQVBUX1JBVEVTRVQsICZjbWQpOworCWlmICghcmV0ICYmIGNtZF9hY3Rpb24gPT0gQ01EX0FDVF9HRVQpIHsKKwkJcHJpdi0+cmF0ZWJpdG1hcCA9IGxlMTZfdG9fY3B1KGNtZC5iaXRtYXApOworCQlwcml2LT5lbmFibGVod2F1dG8gPSBsZTE2X3RvX2NwdShjbWQuZW5hYmxlaHdhdXRvKTsKKwl9CiAKLQlsYnNfZGViX2hleChMQlNfREVCX0NNRCwgIkRBVEFfUkFURV9SRVNQIiwgKHU4ICopICZjbWQsIHNpemVvZiAoY21kKSk7Ci0KLQlyZXQgPSAoaW50KSBsYnNfZndfaW5kZXhfdG9fZGF0YV9yYXRlKGNtZC5yYXRlc1swXSk7Ci0JbGJzX2RlYl9jbWQoIkRBVEFfUkFURTogY3VycmVudCByYXRlIDB4JTAyeFxuIiwgcmV0KTsKLQotb3V0OgogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0NNRCwgInJldCAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGxic19jbWRfODAyXzExX3JhdGVfYWRhcHRfcmF0ZXNldCk7CiAKIC8qKgogICogIEBicmllZiBTZXQgdGhlIGRhdGEgcmF0ZQpAQCAtNzc4LDI4ICs3ODEsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbGJzX2NtZF9tYWNfbXVsdGljYXN0X2FkcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCi0JCQkJICAgICAgdTE2IGNtZF9hY3Rpb24pCi17Ci0Jc3RydWN0IGNtZF9kc19tYWNfbXVsdGljYXN0X2FkciAqcE1DYXN0QWRyID0gJmNtZC0+cGFyYW1zLm1hZHI7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc19tYWNfbXVsdGljYXN0X2FkcikgKwotCQkJICAgICBTX0RTX0dFTik7Ci0JY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EX01BQ19NVUxUSUNBU1RfQURSKTsKLQotCWxic19kZWJfY21kKCJNVUxUSUNBU1RfQURSOiBzZXR0aW5nICVkIGFkZHJlc3Nlc1xuIiwgcE1DYXN0QWRyLT5ucl9vZl9hZHJzKTsKLQlwTUNhc3RBZHItPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOwotCXBNQ2FzdEFkci0+bnJfb2ZfYWRycyA9Ci0JICAgIGNwdV90b19sZTE2KCh1MTYpIHByaXYtPm5yX29mX211bHRpY2FzdG1hY2FkZHIpOwotCW1lbWNweShwTUNhc3RBZHItPm1hY2xpc3QsIHByaXYtPm11bHRpY2FzdGxpc3QsCi0JICAgICAgIHByaXYtPm5yX29mX211bHRpY2FzdG1hY2FkZHIgKiBFVEhfQUxFTik7Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsKLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiAgQGJyaWVmIEdldCB0aGUgcmFkaW8gY2hhbm5lbAogICoKQEAgLTEwNTIsMjQgKzEwMzMsNjkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgbGJzX21lc2hfY29uZmlnKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgZW5hYmxlLCB1aW50MTZfdCBjaGFuKQoraW50IGxic19tZXNoX2NvbmZpZ19zZW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCSBzdHJ1Y3QgY21kX2RzX21lc2hfY29uZmlnICpjbWQsCisJCQkgdWludDE2X3QgYWN0aW9uLCB1aW50MTZfdCB0eXBlKQoreworCWludCByZXQ7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKKworCWNtZC0+aGRyLmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfTUVTSF9DT05GSUcpOworCWNtZC0+aGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZykpOworCWNtZC0+aGRyLnJlc3VsdCA9IDA7CisKKwljbWQtPnR5cGUgPSBjcHVfdG9fbGUxNih0eXBlKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KGFjdGlvbik7CisKKwlyZXQgPSBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EX01FU0hfQ09ORklHLCBjbWQpOworCisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7CisJcmV0dXJuIHJldDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyB0aGUgQ01EX01FU0hfQ09ORklHIGxlZ2FjeSBmdW5jdGlvbi4gIEl0IG9ubHkgaGFuZGxlcyB0aGUKKyAqIFNUQVJUIGFuZCBTVE9QIGFjdGlvbnMuICBUaGUgZXh0ZW5kZWQgYWN0aW9ucyBzdXBwb3J0ZWQgYnkgQ01EX01FU0hfQ09ORklHCisgKiBhcmUgYWxsIGhhbmRsZWQgYnkgcHJlcGFyaW5nIGEgc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZyBhbmQgcGFzc2luZyBpdCB0bworICogbGJzX21lc2hfY29uZmlnX3NlbmQuCisgKi8KK2ludCBsYnNfbWVzaF9jb25maWcoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBhY3Rpb24sIHVpbnQxNl90IGNoYW4pCiB7CiAJc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZyBjbWQ7CisJc3RydWN0IG1ydmxfbWVzaGllICppZTsKIAogCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0JY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KGVuYWJsZSk7CiAJY21kLmNoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFuKTsKLQljbWQudHlwZSA9IGNwdV90b19sZTE2KHByaXYtPm1lc2hfdGx2KTsKLQljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7CisJaWUgPSAoc3RydWN0IG1ydmxfbWVzaGllICopY21kLmRhdGE7CiAKLQlpZiAoZW5hYmxlKSB7Ci0JCWNtZC5sZW5ndGggPSBjcHVfdG9fbGUxNihwcml2LT5tZXNoX3NzaWRfbGVuKTsKLQkJbWVtY3B5KGNtZC5kYXRhLCBwcml2LT5tZXNoX3NzaWQsIHByaXYtPm1lc2hfc3NpZF9sZW4pOworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDTURfQUNUX01FU0hfQ09ORklHX1NUQVJUOgorCQlpZS0+aGRyLmlkID0gTUZJRV9UWVBFX0dFTkVSSUM7CisJCWllLT52YWwub3VpWzBdID0gMHgwMDsKKwkJaWUtPnZhbC5vdWlbMV0gPSAweDUwOworCQlpZS0+dmFsLm91aVsyXSA9IDB4NDM7CisJCWllLT52YWwudHlwZSA9IE1BUlZFTExfTUVTSF9JRV9UWVBFOworCQlpZS0+dmFsLnN1YnR5cGUgPSBNQVJWRUxMX01FU0hfSUVfU1VCVFlQRTsKKwkJaWUtPnZhbC52ZXJzaW9uID0gTUFSVkVMTF9NRVNIX0lFX1ZFUlNJT047CisJCWllLT52YWwuYWN0aXZlX3Byb3RvY29sX2lkID0gTUFSVkVMTF9NRVNIX1BST1RPX0lEX0hXTVA7CisJCWllLT52YWwuYWN0aXZlX21ldHJpY19pZCA9IE1BUlZFTExfTUVTSF9NRVRSSUNfSUQ7CisJCWllLT52YWwubWVzaF9jYXBhYmlsaXR5ID0gTUFSVkVMTF9NRVNIX0NBUEFCSUxJVFk7CisJCWllLT52YWwubWVzaF9pZF9sZW4gPSBwcml2LT5tZXNoX3NzaWRfbGVuOworCQltZW1jcHkoaWUtPnZhbC5tZXNoX2lkLCBwcml2LT5tZXNoX3NzaWQsIHByaXYtPm1lc2hfc3NpZF9sZW4pOworCQlpZS0+aGRyLmxlbiA9IHNpemVvZihzdHJ1Y3QgbXJ2bF9tZXNoaWVfdmFsKSAtCisJCQlJV19FU1NJRF9NQVhfU0laRSArIHByaXYtPm1lc2hfc3NpZF9sZW47CisJCWNtZC5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IG1ydmxfbWVzaGllX3ZhbCkpOworCQlicmVhazsKKwljYXNlIENNRF9BQ1RfTUVTSF9DT05GSUdfU1RPUDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOwogCX0KLQlsYnNfZGViX2NtZCgibWVzaCBjb25maWcgZW5hYmxlICVkIFRMViAleCBjaGFubmVsICVkIFNTSUQgJXNcbiIsCi0JCSAgICBlbmFibGUsIHByaXYtPm1lc2hfdGx2LCBjaGFuLAorCWxic19kZWJfY21kKCJtZXNoIGNvbmZpZyBhY3Rpb24gJWQgdHlwZSAleCBjaGFubmVsICVkIFNTSUQgJXNcbiIsCisJCSAgICBhY3Rpb24sIHByaXYtPm1lc2hfdGx2LCBjaGFuLAogCQkgICAgZXNjYXBlX2Vzc2lkKHByaXYtPm1lc2hfc3NpZCwgcHJpdi0+bWVzaF9zc2lkX2xlbikpOwotCXJldHVybiBsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EX01FU0hfQ09ORklHLCAmY21kKTsKKworCXJldHVybiBsYnNfbWVzaF9jb25maWdfc2VuZChwcml2LCAmY21kLCBhY3Rpb24sIHByaXYtPm1lc2hfdGx2KTsKIH0KIAogc3RhdGljIGludCBsYnNfY21kX2Jjbl9jdHJsKHN0cnVjdCBsYnNfcHJpdmF0ZSAqIHByaXYsCkBAIC0xMTQ0LDcgKzExNzAsNyBAQAogCXN0cnVjdCBjbWRfaGVhZGVyICpjbWQ7CiAJdWludDE2X3QgY21kc2l6ZTsKIAl1aW50MTZfdCBjb21tYW5kOwotCWludCB0aW1lbyA9IDUgKiBIWjsKKwlpbnQgdGltZW8gPSAzICogSFo7CiAJaW50IHJldDsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9IT1NUKTsKQEAgLTExNjIsNyArMTE4OCw3IEBACiAJLyogVGhlc2UgY29tbWFuZHMgdGFrZSBsb25nZXIgKi8KIAlpZiAoY29tbWFuZCA9PSBDTURfODAyXzExX1NDQU4gfHwgY29tbWFuZCA9PSBDTURfODAyXzExX0FTU09DSUFURSB8fAogCSAgICBjb21tYW5kID09IENNRF84MDJfMTFfQVVUSEVOVElDQVRFKQotCQl0aW1lbyA9IDEwICogSFo7CisJCXRpbWVvID0gNSAqIEhaOwogCiAJbGJzX2RlYl9jbWQoIkROTERfQ01EOiBjb21tYW5kIDB4JTA0eCwgc2VxICVkLCBzaXplICVkXG4iLAogCQkgICAgIGNvbW1hbmQsIGxlMTZfdG9fY3B1KGNtZC0+c2VxbnVtKSwgY21kc2l6ZSk7CkBAIC0xMTc0LDcgKzEyMDAsNyBAQAogCQlsYnNfcHJfaW5mbygiRE5MRF9DTUQ6IGh3X2hvc3RfdG9fY2FyZCBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQkvKiBMZXQgdGhlIHRpbWVyIGtpY2sgaW4gYW5kIHJldHJ5LCBhbmQgcG90ZW50aWFsbHkgcmVzZXQKIAkJICAgdGhlIHdob2xlIHRoaW5nIGlmIHRoZSBjb25kaXRpb24gcGVyc2lzdHMgKi8KLQkJdGltZW8gPSBIWjsKKwkJdGltZW8gPSBIWi80OwogCX0KIAogCS8qIFNldHVwIHRoZSB0aW1lciBhZnRlciB0cmFuc21pdCBjb21tYW5kICovCkBAIC0xMjc5LDggKzEzMDUsNyBAQAogCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihwcml2LT5tYWNfY29udHJvbCk7CiAJY21kLnJlc2VydmVkID0gMDsKIAotCWxic19jbWRfYXN5bmMocHJpdiwgQ01EX01BQ19DT05UUk9MLAotCQkmY21kLmhkciwgc2l6ZW9mKGNtZCkpOworCWxic19jbWRfYXN5bmMocHJpdiwgQ01EX01BQ19DT05UUk9MLCAmY21kLmhkciwgc2l6ZW9mKGNtZCkpOwogCiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7CiB9CkBAIC0xMzg3LDE1ICsxNDEyLDYgQEAKIAkJCQkJCSBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOwogCQlicmVhazsKIAotCWNhc2UgQ01EXzgwMl8xMV9SQVRFX0FEQVBUX1JBVEVTRVQ6Ci0JCXJldCA9IGxic19jbWRfODAyXzExX3JhdGVfYWRhcHRfcmF0ZXNldChwcml2LAotCQkJCQkJCSBjbWRwdHIsIGNtZF9hY3Rpb24pOwotCQlicmVhazsKLQotCWNhc2UgQ01EX01BQ19NVUxUSUNBU1RfQURSOgotCQlyZXQgPSBsYnNfY21kX21hY19tdWx0aWNhc3RfYWRyKHByaXYsIGNtZHB0ciwgY21kX2FjdGlvbik7Ci0JCWJyZWFrOwotCiAJY2FzZSBDTURfODAyXzExX01PTklUT1JfTU9ERToKIAkJcmV0ID0gbGJzX2NtZF84MDJfMTFfbW9uaXRvcl9tb2RlKGNtZHB0ciwKIAkJCQkgICAgICAgICAgY21kX2FjdGlvbiwgcGRhdGFfYnVmKTsKQEAgLTE0ODQsNyArMTUwMCw3IEBACiAJCXJldCA9IGxic19jbWRfYmNuX2N0cmwocHJpdiwgY21kcHRyLCBjbWRfYWN0aW9uKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJbGJzX2RlYl9ob3N0KCJQUkVQX0NNRDogdW5rbm93biBjb21tYW5kIDB4JTA0eFxuIiwgY21kX25vKTsKKwkJbGJzX3ByX2VycigiUFJFUF9DTUQ6IHVua25vd24gY29tbWFuZCAweCUwNHhcbiIsIGNtZF9ubyk7CiAJCXJldCA9IC0xOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCmluZGV4IDNkZmMyZDQuLmE1M2I1MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCkBAIC0zNCwxOCArMzQsMjIgQEAKIGludCBsYnNfbWVzaF9hY2Nlc3Moc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfYWN0aW9uLAogCQkgICAgc3RydWN0IGNtZF9kc19tZXNoX2FjY2VzcyAqY21kKTsKIAotaW50IGxic19nZXRfZGF0YV9yYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CiBpbnQgbGJzX3NldF9kYXRhX3JhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCByYXRlKTsKIAogaW50IGxic19nZXRfY2hhbm5lbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogaW50IGxic19zZXRfY2hhbm5lbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4IGNoYW5uZWwpOwogCitpbnQgbGJzX21lc2hfY29uZmlnX3NlbmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJIHN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgKmNtZCwKKwkJCSB1aW50MTZfdCBhY3Rpb24sIHVpbnQxNl90IHR5cGUpOwogaW50IGxic19tZXNoX2NvbmZpZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGVuYWJsZSwgdWludDE2X3QgY2hhbik7CiAKIGludCBsYnNfaG9zdF9zbGVlcF9jZmcoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MzJfdCBjcml0ZXJpYSk7CiBpbnQgbGJzX3N1c3BlbmQoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKLWludCBsYnNfcmVzdW1lKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7Cit2b2lkIGxic19yZXN1bWUoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKIAoraW50IGxic19jbWRfODAyXzExX3JhdGVfYWRhcHRfcmF0ZXNldChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgdWludDE2X3QgY21kX2FjdGlvbik7CiBpbnQgbGJzX2NtZF84MDJfMTFfaW5hY3Rpdml0eV90aW1lb3V0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKIAkJCQkgICAgICB1aW50MTZfdCBjbWRfYWN0aW9uLCB1aW50MTZfdCAqdGltZW91dCk7CiBpbnQgbGJzX2NtZF84MDJfMTFfc2xlZXBfcGFyYW1zKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX2FjdGlvbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYwppbmRleCA1YWJlY2I3Li4yNGRlM2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCkBAIC0yMDMsMjIgKzIwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbGJzX3JldF84MDJfMTFfcmF0ZV9hZGFwdF9yYXRlc2V0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkJICAgICAgc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX3JhdGVfYWRhcHRfcmF0ZXNldCAqcmF0ZXMgPSAmcmVzcC0+cGFyYW1zLnJhdGVzZXQ7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQotCWlmIChyYXRlcy0+YWN0aW9uID09IENNRF9BQ1RfR0VUKSB7Ci0JCXByaXYtPmVuYWJsZWh3YXV0byA9IGxlMTZfdG9fY3B1KHJhdGVzLT5lbmFibGVod2F1dG8pOwotCQlwcml2LT5yYXRlYml0bWFwID0gbGUxNl90b19jcHUocmF0ZXMtPmJpdG1hcCk7Ci0JfQotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbGJzX3JldF84MDJfMTFfcnNzaShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCiAJCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKQogewpAQCAtMzE2LDE2ICszMDAsMTEgQEAKIAogCQlicmVhazsKIAotCWNhc2UgQ01EX1JFVChDTURfTUFDX01VTFRJQ0FTVF9BRFIpOgogCWNhc2UgQ01EX1JFVChDTURfODAyXzExX1JFU0VUKToKIAljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9BVVRIRU5USUNBVEUpOgogCWNhc2UgQ01EX1JFVChDTURfODAyXzExX0JFQUNPTl9TVE9QKToKIAkJYnJlYWs7CiAKLQljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9SQVRFX0FEQVBUX1JBVEVTRVQpOgotCQlyZXQgPSBsYnNfcmV0XzgwMl8xMV9yYXRlX2FkYXB0X3JhdGVzZXQocHJpdiwgcmVzcCk7Ci0JCWJyZWFrOwotCiAJY2FzZSBDTURfUkVUKENNRF84MDJfMTFfUlNTSSk6CiAJCXJldCA9IGxic19yZXRfODAyXzExX3Jzc2kocHJpdiwgcmVzcCk7CiAJCWJyZWFrOwpAQCAtMzc2LDggKzM1NSw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJbGJzX2RlYl9ob3N0KCJDTURfUkVTUDogdW5rbm93biBjbWQgcmVzcG9uc2UgMHglMDR4XG4iLAotCQkJICAgICBsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKSk7CisJCWxic19wcl9lcnIoIkNNRF9SRVNQOiB1bmtub3duIGNtZCByZXNwb25zZSAweCUwNHhcbiIsCisJCQkgICBsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKSk7CiAJCWJyZWFrOwogCX0KIAlsYnNfZGViX2xlYXZlKExCU19ERUJfSE9TVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgKaW5kZXggYjY1MmZhMy4uYThhYzk3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaApAQCAtNjAsMTMgKzYwLDE3IEBACiAKIHZvaWQgbGJzX3NlbmRfaXdldmN1c3RvbV9ldmVudChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHM4ICpzdHIpOwogCisvKiBwZXJzaXN0Y2ZnLmMgKi8KK3ZvaWQgbGJzX3BlcnNpc3RfY29uZmlnX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7Cit2b2lkIGxic19wZXJzaXN0X2NvbmZpZ19yZW1vdmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CisKIC8qIG1haW4uYyAqLwogc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqbGJzX2dldF9yZWdpb25fY2ZwX3RhYmxlKHU4IHJlZ2lvbiwKIAlpbnQgKmNmcF9ubyk7CiBzdHJ1Y3QgbGJzX3ByaXZhdGUgKmxic19hZGRfY2FyZCh2b2lkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpkbWRldik7Ci1pbnQgbGJzX3JlbW92ZV9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7Cit2b2lkIGxic19yZW1vdmVfY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogaW50IGxic19zdGFydF9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7Ci1pbnQgbGJzX3N0b3BfY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwordm9pZCBsYnNfc3RvcF9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CiB2b2lkIGxic19ob3N0X3RvX2NhcmRfZG9uZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogCiBpbnQgbGJzX3VwZGF0ZV9jaGFubmVsKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggZDM5NTIwMS4uMTJlNjg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBMQlNfREVCX1RIUkVBRAkweDAwMTAwMDAwCiAjZGVmaW5lIExCU19ERUJfSEVYCTB4MDAyMDAwMDAKICNkZWZpbmUgTEJTX0RFQl9TRElPCTB4MDA0MDAwMDAKKyNkZWZpbmUgTEJTX0RFQl9TWVNGUwkweDAwODAwMDAwCiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbGJzX2RlYnVnOwogCkBAIC04MSw3ICs4Miw4IEBACiAjZGVmaW5lIGxic19kZWJfdXNiZChkZXYsIGZtdCwgYXJncy4uLikgTEJTX0RFQl9MTChMQlNfREVCX1VTQiwgIiB1c2JkIiwgIiVzOiIgZm10LCAoZGV2KS0+YnVzX2lkLCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfY3MoZm10LCBhcmdzLi4uKSAgICAgICAgTEJTX0RFQl9MTChMQlNfREVCX0NTLCAiIGNzIiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfdGhyZWFkKGZtdCwgYXJncy4uLikgICAgTEJTX0RFQl9MTChMQlNfREVCX1RIUkVBRCwgIiB0aHJlYWQiLCBmbXQsICMjYXJncykKLSNkZWZpbmUgbGJzX2RlYl9zZGlvKGZtdCwgYXJncy4uLikgICAgICBMQlNfREVCX0xMKExCU19ERUJfU0RJTywgIiB0aHJlYWQiLCBmbXQsICMjYXJncykKKyNkZWZpbmUgbGJzX2RlYl9zZGlvKGZtdCwgYXJncy4uLikgICAgICBMQlNfREVCX0xMKExCU19ERUJfU0RJTywgIiBzZGlvIiwgZm10LCAjI2FyZ3MpCisjZGVmaW5lIGxic19kZWJfc3lzZnMoZm10LCBhcmdzLi4uKSAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NZU0ZTLCAiIHN5c2ZzIiwgZm10LCAjI2FyZ3MpCiAKICNkZWZpbmUgbGJzX3ByX2luZm8oZm9ybWF0LCBhcmdzLi4uKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSI6ICIgZm9ybWF0LCAjIyBhcmdzKQpAQCAtMTcwLDYgKzE3MiwxNiBAQAogCiAjZGVmaW5lIE1BUlZFTExfTUVTSF9JRV9MRU5HVEgJCTkKIAorLyogVmFsdWVzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHN0cnVjdCBtcnZsX21lc2hfaWUuICBUaGUgb25seSB0aW1lIHlvdSBuZWVkIHRoaXMKKyAqIGlzIHdoZW4gZW5hYmxpbmcgdGhlIG1lc2ggdXNpbmcgQ01EX01FU0hfQ09ORklHLgorICovCisjZGVmaW5lIE1BUlZFTExfTUVTSF9JRV9UWVBFCQk0CisjZGVmaW5lIE1BUlZFTExfTUVTSF9JRV9TVUJUWVBFCQkwCisjZGVmaW5lIE1BUlZFTExfTUVTSF9JRV9WRVJTSU9OCQkwCisjZGVmaW5lIE1BUlZFTExfTUVTSF9QUk9UT19JRF9IV01QCTAKKyNkZWZpbmUgTUFSVkVMTF9NRVNIX01FVFJJQ19JRAkJMAorI2RlZmluZSBNQVJWRUxMX01FU0hfQ0FQQUJJTElUWQkJMAorCiAvKiogSU5UIHN0YXR1cyBCaXQgRGVmaW5pdGlvbiovCiAjZGVmaW5lIE1SVkRSVl9UWF9ETkxEX1JEWQkJMHgwMDAxCiAjZGVmaW5lIE1SVkRSVl9SWF9VUExEX1JEWQkJMHgwMDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IDBkOWVkYjkuLmY1YmI0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xNDAsNiArMTQwLDggQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya190aHJlYWQ7CiAKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbWNhc3Rfd29yazsKKwogCS8qKiBTY2FubmluZyAqLwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgYXNzb2Nfd29yazsKQEAgLTE1MSw2ICsxNTMsNyBAQAogCiAJLyoqIEhhcmR3YXJlIGFjY2VzcyAqLwogCWludCAoKmh3X2hvc3RfdG9fY2FyZCkgKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggdHlwZSwgdTggKnBheWxvYWQsIHUxNiBuYik7CisJdm9pZCAoKnJlc2V0X2NhcmQpIChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogCiAJLyogV2FrZSBPbiBMQU4gKi8KIAl1aW50MzJfdCB3b2xfY3JpdGVyaWE7CkBAIC0yMzQsOCArMjM3LDggQEAKIAkvKiogODAyLjExIHN0YXRpc3RpY3MgKi8KIC8vCXN0cnVjdCBjbWRfRFNfODAyXzExX0dFVF9TVEFUIHdsYW44MDJfMTFTdGF0OwogCi0JdTE2IGVuYWJsZWh3YXV0bzsKLQl1MTYgcmF0ZWJpdG1hcDsKKwl1aW50MTZfdCBlbmFibGVod2F1dG87CisJdWludDE2X3QgcmF0ZWJpdG1hcDsKIAogCXUzMiBmcmFndGhzZDsKIAl1MzIgcnRzdGhzZDsKQEAgLTI5Myw3ICsyOTYsNiBAQAogCiAJLyoqIGRhdGEgcmF0ZSBzdHVmZiAqLwogCXU4IGN1cl9yYXRlOwotCXU4IGF1dG9fcmF0ZTsKIAogCS8qKiBSRiBjYWxpYnJhdGlvbiBkYXRhICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaAppbmRleCAzOTE1YzMxLi5jOTJlNDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCkBAIC0yNTYsNiArMjU2LDIzIEBACiAJQ01EX0FDVF9NRVNIX0dFVF9BVVRPU1RBUlRfRU5BQkxFRCwKIH07CiAKKy8qIERlZmluZSBhY3Rpb25zIGFuZCB0eXBlcyBmb3IgQ01EX01FU0hfQ09ORklHICovCitlbnVtIGNtZF9tZXNoX2NvbmZpZ19hY3Rpb25zIHsKKwlDTURfQUNUX01FU0hfQ09ORklHX1NUT1AgPSAwLAorCUNNRF9BQ1RfTUVTSF9DT05GSUdfU1RBUlQsCisJQ01EX0FDVF9NRVNIX0NPTkZJR19TRVQsCisJQ01EX0FDVF9NRVNIX0NPTkZJR19HRVQsCit9OworCitlbnVtIGNtZF9tZXNoX2NvbmZpZ190eXBlcyB7CisJQ01EX1RZUEVfTUVTSF9TRVRfQk9PVEZMQUcgPSAxLAorCUNNRF9UWVBFX01FU0hfU0VUX0JPT1RUSU1FLAorCUNNRF9UWVBFX01FU0hfU0VUX0RFRl9DSEFOTkVMLAorCUNNRF9UWVBFX01FU0hfU0VUX01FU0hfSUUsCisJQ01EX1RZUEVfTUVTSF9HRVRfREVGQVVMVFMsCisJQ01EX1RZUEVfTUVTSF9HRVRfTUVTSF9JRSwgLyogR0VUX0RFRkFVTFRTIGlzIHN1cGVyc2V0IG9mIEdFVF9NRVNISUUgKi8KK307CisKIC8qKiBDYXJkIEV2ZW50IGRlZmluaXRpb24gKi8KICNkZWZpbmUgTUFDUkVHX0lOVF9DT0RFX1RYX1BQQV9GUkVFCQkwCiAjZGVmaW5lIE1BQ1JFR19JTlRfQ09ERV9UWF9ETUFfRE9ORQkJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oCmluZGV4IGYyOWJjNWIuLjkxM2I0ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmgKQEAgLTIxOSw2ICsyMTksNyBAQAogfTsKIAogc3RydWN0IGNtZF9kc19tYWNfbXVsdGljYXN0X2FkciB7CisJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IG5yX29mX2FkcnM7CiAJdTggbWFjbGlzdFtFVEhfQUxFTiAqIE1SVkRSVl9NQVhfTVVMVElDQVNUX0xJU1RfU0laRV07CkBAIC00OTksNiArNTAwLDcgQEAKIH07CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX3JhdGVfYWRhcHRfcmF0ZXNldCB7CisJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IGVuYWJsZWh3YXV0bzsKIAlfX2xlMTYgYml0bWFwOwpAQCAtNzAyLDggKzcwNCw2IEBACiAJCXN0cnVjdCBjbWRfZHNfODAyXzExX3JmX3R4X3Bvd2VyIHR4cDsKIAkJc3RydWN0IGNtZF9kc184MDJfMTFfcmZfYW50ZW5uYSByYW50OwogCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9tb25pdG9yX21vZGUgbW9uaXRvcjsKLQkJc3RydWN0IGNtZF9kc184MDJfMTFfcmF0ZV9hZGFwdF9yYXRlc2V0IHJhdGVzZXQ7Ci0JCXN0cnVjdCBjbWRfZHNfbWFjX211bHRpY2FzdF9hZHIgbWFkcjsKIAkJc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX2pvaW4gYWRqOwogCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9yc3NpIHJzc2k7CiAJCXN0cnVjdCBjbWRfZHNfODAyXzExX3Jzc2lfcnNwIHJzc2lyc3A7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCBkMDc1YjQ0Li4wNGQ3YTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTE0OCw3NiArMTQ4LDE0OSBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgewogCQl1OCB2YWwgPSBpZl9jc19yZWFkOChjYXJkLCBhZGRyKTsKIAkJaWYgKHZhbCA9PSByZWcpCiAJCQlyZXR1cm4gaTsKLQkJdWRlbGF5KDUwMCk7CisJCXVkZWxheSg1KTsKIAl9CiAJcmV0dXJuIC1FVElNRTsKIH0KIAogCiAKLS8qIEhvc3QgY29udHJvbCByZWdpc3RlcnMgYW5kIHRoZWlyIGJpdCBkZWZpbml0aW9ucyAqLworLyoKKyAqIEZpcnN0IHRoZSBiaXRtYXNrcyBmb3IgdGhlIGhvc3QvY2FyZCBpbnRlcnJ1cHQvc3RhdHVzIHJlZ2lzdGVyczoKKyAqLworI2RlZmluZSBJRl9DU19CSVRfVFgJCQkweDAwMDEKKyNkZWZpbmUgSUZfQ1NfQklUX1JYCQkJMHgwMDAyCisjZGVmaW5lIElGX0NTX0JJVF9DT01NQU5ECQkweDAwMDQKKyNkZWZpbmUgSUZfQ1NfQklUX1JFU1AJCQkweDAwMDgKKyNkZWZpbmUgSUZfQ1NfQklUX0VWRU5UCQkJMHgwMDEwCisjZGVmaW5lCUlGX0NTX0JJVF9NQVNLCQkJMHgwMDFmCiAKLSNkZWZpbmUgSUZfQ1NfSF9TVEFUVVMJCQkweDAwMDAwMDAwCi0jZGVmaW5lIElGX0NTX0hfU1RBVFVTX1RYX09WRVIJCTB4MDAwMQotI2RlZmluZSBJRl9DU19IX1NUQVRVU19SWF9PVkVSCQkweDAwMDIKLSNkZWZpbmUgSUZfQ1NfSF9TVEFUVVNfRE5MRF9PVkVSCTB4MDAwNAogCi0jZGVmaW5lIElGX0NTX0hfSU5UX0NBVVNFCQkweDAwMDAwMDAyCi0jZGVmaW5lIElGX0NTX0hfSUNfVFhfT1ZFUgkJMHgwMDAxCi0jZGVmaW5lIElGX0NTX0hfSUNfUlhfT1ZFUgkJMHgwMDAyCi0jZGVmaW5lIElGX0NTX0hfSUNfRE5MRF9PVkVSCQkweDAwMDQKLSNkZWZpbmUgSUZfQ1NfSF9JQ19QT1dFUl9ET1dOCQkweDAwMDgKLSNkZWZpbmUgSUZfQ1NfSF9JQ19IT1NUX0VWRU5UCQkweDAwMTAKLSNkZWZpbmUgSUZfQ1NfSF9JQ19NQVNLCQkJMHgwMDFmCiAKLSNkZWZpbmUgSUZfQ1NfSF9JTlRfTUFTSwkJMHgwMDAwMDAwNAotI2RlZmluZQlJRl9DU19IX0lNX01BU0sJCQkweDAwMWYKKy8qCisgKiBJdCdzIG5vdCByZWFsbHkgY2xlYXIgdG8gbWUgd2hhdCB0aGUgaG9zdCBzdGF0dXMgcmVnaXN0ZXIgaXMgZm9yLiBJdAorICogbmVlZHMgdG8gYmUgc2V0IGFsbW9zdCBpbiB1bmlvbiB3aXRoICJob3N0IGludCBjYXVzZSIuIFRoZSBmb2xsb3dpbmcKKyAqIGJpdHMgZnJvbSBhYm92ZSBhcmUgdXNlZDoKKyAqCisgKiAgIElGX0NTX0JJVF9UWCAgICAgICAgIGRyaXZlciBkb3dubG9hZGVkIGEgZGF0YSBwYWNrZXQKKyAqICAgSUZfQ1NfQklUX1JYICAgICAgICAgZHJpdmVyIGdvdCBhIGRhdGEgcGFja2V0CisgKiAgIElGX0NTX0JJVF9DT01NQU5EICAgIGRyaXZlciBkb3dubG9hZGVkIGEgY29tbWFuZAorICogICBJRl9DU19CSVRfUkVTUCAgICAgICBub3QgdXNlZCAoaGFzIHNvbWUgbWVhbmluZyB3aXRoIHBvd2VyZG93bikKKyAqICAgSUZfQ1NfQklUX0VWRU5UICAgICAgZHJpdmVyIHJlYWQgYSBob3N0IGV2ZW50CisgKi8KKyNkZWZpbmUgSUZfQ1NfSE9TVF9TVEFUVVMJCTB4MDAwMDAwMDAKIAotI2RlZmluZSBJRl9DU19IX1dSSVRFX0xFTgkJMHgwMDAwMDAxNAorLyoKKyAqIFdpdGggdGhlIGhvc3QgaW50IGNhdXNlIHJlZ2lzdGVyIGNhbiB0aGUgaG9zdCAodGhhdCBpcywgTGludXgpIGNhdXNlCisgKiBhbiBpbnRlcnJ1cHQgaW4gdGhlIGZpcm13YXJlLCB0byB0ZWxsIHRoZSBmaXJtd2FyZSBhYm91dCB0aG9zZSBldmVudHM6CisgKgorICogICBJRl9DU19CSVRfVFggICAgICAgICBhIGRhdGEgcGFja2V0IGhhcyBiZWVuIGRvd25sb2FkZWQKKyAqICAgSUZfQ1NfQklUX1JYICAgICAgICAgYSByZWNlaXZlZCBkYXRhIHBhY2tldCBoYXMgcmV0cmlldmVkCisgKiAgIElGX0NTX0JJVF9DT01NQU5EICAgIGEgZmlybXdhcmUgYmxvY2sgb3IgYSBjb21tYW5kIGhhcyBiZWVuIGRvd25sb2FkZWQKKyAqICAgSUZfQ1NfQklUX1JFU1AgICAgICAgbm90IHVzZWQgKGhhcyBzb21lIG1lYW5pbmcgd2l0aCBwb3dlcmRvd24pCisgKiAgIElGX0NTX0JJVF9FVkVOVCAgICAgIGEgaG9zdCBldmVudCAobGluayBsb3N0IGV0YykgaGFzIGJlZW4gcmV0cmlldmVkCisgKi8KKyNkZWZpbmUgSUZfQ1NfSE9TVF9JTlRfQ0FVU0UJCTB4MDAwMDAwMDIKIAotI2RlZmluZSBJRl9DU19IX1dSSVRFCQkJMHgwMDAwMDAxNgorLyoKKyAqIFRoZSBob3N0IGludCBtYXNrIHJlZ2lzdGVyIGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJydXB0LiAgSG93ZXZlciwKKyAqIEkgaGF2ZSB0aGUgc3VzcGljaW9uIHRoYXQgZGlzYWJsZWQgaW50ZXJydXB0cyBhcmUgbG9zdC4KKyAqLworI2RlZmluZSBJRl9DU19IT1NUX0lOVF9NQVNLCQkweDAwMDAwMDA0CiAKLSNkZWZpbmUgSUZfQ1NfSF9DTURfTEVOCQkJMHgwMDAwMDAxOAorLyoKKyAqIFVzZWQgdG8gc2VuZCBvciByZWNlaXZlIGRhdGEgcGFja2V0czoKKyAqLworI2RlZmluZSBJRl9DU19XUklURQkJCTB4MDAwMDAwMTYKKyNkZWZpbmUgSUZfQ1NfV1JJVEVfTEVOCQkJMHgwMDAwMDAxNAorI2RlZmluZSBJRl9DU19SRUFECQkJMHgwMDAwMDAxMAorI2RlZmluZSBJRl9DU19SRUFEX0xFTgkJCTB4MDAwMDAwMjQKIAotI2RlZmluZSBJRl9DU19IX0NNRAkJCTB4MDAwMDAwMUEKKy8qCisgKiBVc2VkIHRvIHNlbmQgY29tbWFuZHMgKGFuZCB0byBzZW5kIGZpcm13YXJlIGJsb2NrKSBhbmQgdG8KKyAqIHJlY2VpdmUgY29tbWFuZCByZXNwb25zZXM6CisgKi8KKyNkZWZpbmUgSUZfQ1NfQ01ECQkJMHgwMDAwMDAxQQorI2RlZmluZSBJRl9DU19DTURfTEVOCQkJMHgwMDAwMDAxOAorI2RlZmluZSBJRl9DU19SRVNQCQkJMHgwMDAwMDAxMgorI2RlZmluZSBJRl9DU19SRVNQX0xFTgkJCTB4MDAwMDAwMzAKIAotI2RlZmluZSBJRl9DU19DX1JFQURfTEVOCQkweDAwMDAwMDI0CisvKgorICogVGhlIGNhcmQgc3RhdHVzIHJlZ2lzdGVycyBzaG93cyB3aGF0IHRoZSBjYXJkL2Zpcm13YXJlIGFjdHVhbGx5CisgKiBhY2NlcHRzOgorICoKKyAqICAgSUZfQ1NfQklUX1RYICAgICAgICB5b3UgbWF5IHNlbmQgYSBkYXRhIHBhY2tldAorICogICBJRl9DU19CSVRfUlggICAgICAgIHlvdSBtYXkgcmV0cmlldmUgYSBkYXRhIHBhY2tldAorICogICBJRl9DU19CSVRfQ09NTUFORCAgIHlvdSBtYXkgc2VuZCBhIGNvbW1hbmQKKyAqICAgSUZfQ1NfQklUX1JFU1AgICAgICB5b3UgbWF5IHJldHJpZXZlIGEgY29tbWFuZCByZXNwb25zZQorICogICBJRl9DU19CSVRfRVZFTlQgICAgIHRoZSBjYXJkIGhhcyBhIGV2ZW50IGZvciB1c2UgKGxpbmsgbG9zdCwgc25yIGxvdyBldGMpCisgKgorICogV2hlbiByZWFkaW5nIHRoaXMgcmVnaXN0ZXIgc2V2ZXJhbCB0aW1lcywgeW91IHdpbGwgZ2V0IGJhY2sgdGhlIHNhbWUKKyAqIHJlc3VsdHMgLS0tIHdpdGggb25lIGV4Y2VwdGlvbjogdGhlIElGX0NTX0JJVF9FVkVOVCBjbGVhciBpdHNlbGYKKyAqIGF1dG9tYXRpY2FsbHkuCisgKgorICogTm90IHRoYXQgd2UgZG9uJ3QgcmVseSBvbiBCSVRfUlgsX0JJVF9SRVNQIG9yIEJJVF9FVkVOVCBiZWNhdXNlCisgKiB3ZSBoYW5kbGUgdGhpcyB2aWEgdGhlIGNhcmQgaW50IGNhdXNlIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIElGX0NTX0NBUkRfU1RBVFVTCQkweDAwMDAwMDIwCisjZGVmaW5lIElGX0NTX0NBUkRfU1RBVFVTX01BU0sJCTB4N2YwMAogCi0jZGVmaW5lIElGX0NTX0hfUkVBRAkJCTB4MDAwMDAwMTAKKy8qCisgKiBUaGUgY2FyZCBpbnQgY2F1c2UgcmVnaXN0ZXIgaXMgdXNlZCBieSB0aGUgY2FyZC9maXJtd2FyZSB0byBub3RpZnkgdXMKKyAqIGFib3V0IHRoZSBmb2xsb3dpbmcgZXZlbnRzOgorICoKKyAqICAgSUZfQ1NfQklUX1RYICAgICAgICBhIGRhdGEgcGFja2V0IGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBzZW50eAorICogICBJRl9DU19CSVRfUlggICAgICAgIGEgZGF0YSBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIGNhbiBiZSByZXRyaWV2ZWQKKyAqICAgSUZfQ1NfQklUX0NPTU1BTkQgICBub3QgdXNlZAorICogICBJRl9DU19CSVRfUkVTUCAgICAgIHRoZSBmaXJtd2FyZSBoYXMgYSBjb21tYW5kIHJlc3BvbnNlIGZvciB1cworICogICBJRl9DU19CSVRfRVZFTlQgICAgIHRoZSBjYXJkIGhhcyBhIGV2ZW50IGZvciB1c2UgKGxpbmsgbG9zdCwgc25yIGxvdyBldGMpCisgKi8KKyNkZWZpbmUgSUZfQ1NfQ0FSRF9JTlRfQ0FVU0UJCTB4MDAwMDAwMjIKIAotLyogQ2FyZCBjb250cm9sIHJlZ2lzdGVycyBhbmQgdGhlaXIgYml0IGRlZmluaXRpb25zICovCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGZvciBoYW5kc2hha2luZyB3aXRoIHRoZSBjYXJkJ3MgYm9vdGxvYWRlci9oZWxwZXIgaW1hZ2UKKyAqIHRvIHN5bmNocm9uaXplIGRvd25sb2FkaW5nIG9mIGZpcm13YXJlIGJsb2Nrcy4KKyAqLworI2RlZmluZSBJRl9DU19TUV9SRUFEX0xPVwkJMHgwMDAwMDAyOAorI2RlZmluZSBJRl9DU19TUV9IRUxQRVJfT0sJCTB4MTAKIAotI2RlZmluZSBJRl9DU19DX1NUQVRVUwkJCTB4MDAwMDAwMjAKLSNkZWZpbmUgSUZfQ1NfQ19TX1RYX0ROTERfUkRZCQkweDAwMDEKLSNkZWZpbmUgSUZfQ1NfQ19TX1JYX1VQTERfUkRZCQkweDAwMDIKLSNkZWZpbmUgSUZfQ1NfQ19TX0NNRF9ETkxEX1JEWQkJMHgwMDA0Ci0jZGVmaW5lIElGX0NTX0NfU19DTURfVVBMRF9SRFkJCTB4MDAwOAotI2RlZmluZSBJRl9DU19DX1NfQ0FSREVWRU5UCQkweDAwMTAKLSNkZWZpbmUgSUZfQ1NfQ19TX01BU0sJCQkweDAwMWYKLSNkZWZpbmUgSUZfQ1NfQ19TX1NUQVRVU19NQVNLCQkweDdmMDAKLQotI2RlZmluZSBJRl9DU19DX0lOVF9DQVVTRQkJMHgwMDAwMDAyMgotI2RlZmluZQlJRl9DU19DX0lDX01BU0sJCQkweDAwMWYKLQotI2RlZmluZSBJRl9DU19DX1NRX1JFQURfTE9XCQkweDAwMDAwMDI4Ci0jZGVmaW5lIElGX0NTX0NfU1FfSEVMUEVSX09LCQkweDEwCi0KLSNkZWZpbmUgSUZfQ1NfQ19DTURfTEVOCQkJMHgwMDAwMDAzMAotCi0jZGVmaW5lIElGX0NTX0NfQ01ECQkJMHgwMDAwMDAxMgotCisvKgorICogVGhlIHNjcmF0Y2ggcmVnaXN0ZXIgdGVsbHMgdXMgLi4uCisgKgorICogSUZfQ1NfU0NSQVRDSF9CT09UX09LICAgICB0aGUgYm9vdGxvYWRlciBydW5zCisgKiBJRl9DU19TQ1JBVENIX0hFTFBFUl9PSyAgIHRoZSBoZWxwZXIgZmlybXdhcmUgYWxyZWFkeSBydW5zCisgKi8KICNkZWZpbmUgSUZfQ1NfU0NSQVRDSAkJCTB4MDAwMDAwM0YKKyNkZWZpbmUgSUZfQ1NfU0NSQVRDSF9CT09UX09LCQkweDAwCisjZGVmaW5lIElGX0NTX1NDUkFUQ0hfSEVMUEVSX09LCQkweDVhCiAKKy8qCisgKiBVc2VkIHRvIGRldGVjdCBhbmNpZW50IGNoaXBzOgorICovCisjZGVmaW5lIElGX0NTX1BST0RVQ1RfSUQJCTB4MDAwMDAwMUMKKyNkZWZpbmUgSUZfQ1NfQ0Y4Mzg1X0IxX1JFVgkJMHgxMgogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEkvTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEkvTyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIGlubGluZSB2b2lkIGlmX2NzX2VuYWJsZV9pbnRzKHN0cnVjdCBpZl9jc19jYXJkICpjYXJkKQoreworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DUyk7CisJaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IT1NUX0lOVF9NQVNLLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlmX2NzX2Rpc2FibGVfaW50cyhzdHJ1Y3QgaWZfY3NfY2FyZCAqY2FyZCkKK3sKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ1MpOworCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfSE9TVF9JTlRfTUFTSywgSUZfQ1NfQklUX01BU0spOworfQorCiAvKgogICogQ2FsbGVkIGZyb20gaWZfY3NfaG9zdF90b19jYXJkIHRvIHNlbmQgYSBjb21tYW5kIHRvIHRoZSBoYXJkd2FyZQogICovCkBAIC0yMjgsMTEgKzMwMSwxMiBAQAogCWludCBsb29wcyA9IDA7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ1MpOworCWlmX2NzX2Rpc2FibGVfaW50cyhjYXJkKTsKIAogCS8qIElzIGhhcmR3YXJlIHJlYWR5PyAqLwogCXdoaWxlICgxKSB7Ci0JCXUxNiB2YWwgPSBpZl9jc19yZWFkMTYoY2FyZCwgSUZfQ1NfQ19TVEFUVVMpOwotCQlpZiAodmFsICYgSUZfQ1NfQ19TX0NNRF9ETkxEX1JEWSkKKwkJdTE2IHN0YXR1cyA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19DQVJEX1NUQVRVUyk7CisJCWlmIChzdGF0dXMgJiBJRl9DU19CSVRfQ09NTUFORCkKIAkJCWJyZWFrOwogCQlpZiAoKytsb29wcyA+IDEwMCkgewogCQkJbGJzX3ByX2VycigiY2FyZCBub3QgcmVhZHkgZm9yIGNvbW1hbmRzXG4iKTsKQEAgLTI0MSw1MSArMzE1LDU2IEBACiAJCW1kZWxheSgxKTsKIAl9CiAKLQlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0hfQ01EX0xFTiwgbmIpOworCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfQ01EX0xFTiwgbmIpOwogCi0JaWZfY3Nfd3JpdGUxNl9yZXAoY2FyZCwgSUZfQ1NfSF9DTUQsIGJ1ZiwgbmIgLyAyKTsKKwlpZl9jc193cml0ZTE2X3JlcChjYXJkLCBJRl9DU19DTUQsIGJ1ZiwgbmIgLyAyKTsKIAkvKiBBcmUgd2Ugc3VwcG9zZWQgdG8gdHJhbnNmZXIgYW4gb2RkIGFtb3VudCBvZiBieXRlcz8gKi8KIAlpZiAobmIgJiAxKQotCQlpZl9jc193cml0ZTgoY2FyZCwgSUZfQ1NfSF9DTUQsIGJ1ZltuYi0xXSk7CisJCWlmX2NzX3dyaXRlOChjYXJkLCBJRl9DU19DTUQsIGJ1ZltuYi0xXSk7CiAKIAkvKiAiQXNzZXJ0IHRoZSBkb3dubG9hZCBvdmVyIGludGVycnVwdCBjb21tYW5kIGluIHRoZSBIb3N0CiAJICogc3RhdHVzIHJlZ2lzdGVyIiAqLwotCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfSF9TVEFUVVMsIElGX0NTX0hfU1RBVFVTX0ROTERfT1ZFUik7CisJaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IT1NUX1NUQVRVUywgSUZfQ1NfQklUX0NPTU1BTkQpOwogCiAJLyogIkFzc2VydCB0aGUgZG93bmxvYWQgb3ZlciBpbnRlcnJ1cHQgY29tbWFuZCBpbiB0aGUgQ2FyZAogCSAqIGludGVycnVwdCBjYXNlIHJlZ2lzdGVyIiAqLwotCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfSF9JTlRfQ0FVU0UsIElGX0NTX0hfSUNfRE5MRF9PVkVSKTsKKwlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0hPU1RfSU5UX0NBVVNFLCBJRl9DU19CSVRfQ09NTUFORCk7CiAJcmV0ID0gMDsKIAogZG9uZToKKwlpZl9jc19lbmFibGVfaW50cyhjYXJkKTsKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DUywgInJldCAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotCiAvKgogICogQ2FsbGVkIGZyb20gaWZfY3NfaG9zdF90b19jYXJkIHRvIHNlbmQgYSBkYXRhIHRvIHRoZSBoYXJkd2FyZQogICovCiBzdGF0aWMgdm9pZCBpZl9jc19zZW5kX2RhdGEoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCAqYnVmLCB1MTYgbmIpCiB7CiAJc3RydWN0IGlmX2NzX2NhcmQgKmNhcmQgPSAoc3RydWN0IGlmX2NzX2NhcmQgKilwcml2LT5jYXJkOworCXUxNiBzdGF0dXM7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ1MpOworCWlmX2NzX2Rpc2FibGVfaW50cyhjYXJkKTsKIAotCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfSF9XUklURV9MRU4sIG5iKTsKKwlzdGF0dXMgPSBpZl9jc19yZWFkMTYoY2FyZCwgSUZfQ1NfQ0FSRF9TVEFUVVMpOworCUJVR19PTigoc3RhdHVzICYgSUZfQ1NfQklUX1RYKSA9PSAwKTsKKworCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfV1JJVEVfTEVOLCBuYik7CiAKIAkvKiB3cml0ZSBldmVuIG51bWJlciBvZiBieXRlcywgdGhlbiBvZGQgYnl0ZSBpZiBuZWNlc3NhcnkgKi8KLQlpZl9jc193cml0ZTE2X3JlcChjYXJkLCBJRl9DU19IX1dSSVRFLCBidWYsIG5iIC8gMik7CisJaWZfY3Nfd3JpdGUxNl9yZXAoY2FyZCwgSUZfQ1NfV1JJVEUsIGJ1ZiwgbmIgLyAyKTsKIAlpZiAobmIgJiAxKQotCQlpZl9jc193cml0ZTgoY2FyZCwgSUZfQ1NfSF9XUklURSwgYnVmW25iLTFdKTsKKwkJaWZfY3Nfd3JpdGU4KGNhcmQsIElGX0NTX1dSSVRFLCBidWZbbmItMV0pOwogCi0JaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IX1NUQVRVUywgSUZfQ1NfSF9TVEFUVVNfVFhfT1ZFUik7Ci0JaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IX0lOVF9DQVVTRSwgSUZfQ1NfSF9TVEFUVVNfVFhfT1ZFUik7CisJaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IT1NUX1NUQVRVUywgSUZfQ1NfQklUX1RYKTsKKwlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0hPU1RfSU5UX0NBVVNFLCBJRl9DU19CSVRfVFgpOworCWlmX2NzX2VuYWJsZV9pbnRzKGNhcmQpOwogCiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NTKTsKIH0KIAotCiAvKgogICogR2V0IHRoZSBjb21tYW5kIHJlc3VsdCBvdXQgb2YgdGhlIGNhcmQuCiAgKi8KQEAgLTI5MywyNyArMzcyLDI4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gLTE7Ci0JdTE2IHZhbDsKKwl1MTYgc3RhdHVzOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NTKTsKIAogCS8qIGlzIGhhcmR3YXJlIHJlYWR5PyAqLwotCXZhbCA9IGlmX2NzX3JlYWQxNihwcml2LT5jYXJkLCBJRl9DU19DX1NUQVRVUyk7Ci0JaWYgKCh2YWwgJiBJRl9DU19DX1NfQ01EX1VQTERfUkRZKSA9PSAwKSB7Ci0JCWxic19wcl9lcnIoImNhcmQgbm90IHJlYWR5IGZvciBDTURcbiIpOworCXN0YXR1cyA9IGlmX2NzX3JlYWQxNihwcml2LT5jYXJkLCBJRl9DU19DQVJEX1NUQVRVUyk7CisJaWYgKChzdGF0dXMgJiBJRl9DU19CSVRfUkVTUCkgPT0gMCkgeworCQlsYnNfcHJfZXJyKCJubyBjbWQgcmVzcG9uc2UgaW4gY2FyZFxuIik7CisJCSpsZW4gPSAwOwogCQlnb3RvIG91dDsKIAl9CiAKLQkqbGVuID0gaWZfY3NfcmVhZDE2KHByaXYtPmNhcmQsIElGX0NTX0NfQ01EX0xFTik7CisJKmxlbiA9IGlmX2NzX3JlYWQxNihwcml2LT5jYXJkLCBJRl9DU19SRVNQX0xFTik7CiAJaWYgKCgqbGVuID09IDApIHx8ICgqbGVuID4gTEJTX0NNRF9CVUZGRVJfU0laRSkpIHsKIAkJbGJzX3ByX2VycigiY2FyZCBjbWQgYnVmZmVyIGhhcyBpbnZhbGlkICMgb2YgYnl0ZXMgKCVkKVxuIiwgKmxlbik7CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIHJlYWQgZXZlbiBudW1iZXIgb2YgYnl0ZXMsIHRoZW4gb2RkIGJ5dGUgaWYgbmVjZXNzYXJ5ICovCi0JaWZfY3NfcmVhZDE2X3JlcChwcml2LT5jYXJkLCBJRl9DU19DX0NNRCwgZGF0YSwgKmxlbi9zaXplb2YodTE2KSk7CisJaWZfY3NfcmVhZDE2X3JlcChwcml2LT5jYXJkLCBJRl9DU19SRVNQLCBkYXRhLCAqbGVuL3NpemVvZih1MTYpKTsKIAlpZiAoKmxlbiAmIDEpCi0JCWRhdGFbKmxlbi0xXSA9IGlmX2NzX3JlYWQ4KHByaXYtPmNhcmQsIElGX0NTX0NfQ01EKTsKKwkJZGF0YVsqbGVuLTFdID0gaWZfY3NfcmVhZDgocHJpdi0+Y2FyZCwgSUZfQ1NfUkVTUCk7CiAKIAkvKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBmaXJtd2FyZSB0aGF0IHJlcG9ydHMgdG9vIG11Y2gKIAkgKiBieXRlcyAqLwpAQCAtMzMwLDcgKzQxMCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlmX2NzX3JlY2VpdmVfZGF0YShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CkBAIC0zMzksNyArNDE4LDcgQEAKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DUyk7CiAKLQlsZW4gPSBpZl9jc19yZWFkMTYocHJpdi0+Y2FyZCwgSUZfQ1NfQ19SRUFEX0xFTik7CisJbGVuID0gaWZfY3NfcmVhZDE2KHByaXYtPmNhcmQsIElGX0NTX1JFQURfTEVOKTsKIAlpZiAobGVuID09IDAgfHwgbGVuID4gTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpIHsKIAkJbGJzX3ByX2VycigiY2FyZCBkYXRhIGJ1ZmZlciBoYXMgaW52YWxpZCAjIG9mIGJ5dGVzICglZClcbiIsIGxlbik7CiAJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKQEAgLTM1NCwzOCArNDMzLDE5IEBACiAJZGF0YSA9IHNrYi0+ZGF0YTsKIAogCS8qIHJlYWQgZXZlbiBudW1iZXIgb2YgYnl0ZXMsIHRoZW4gb2RkIGJ5dGUgaWYgbmVjZXNzYXJ5ICovCi0JaWZfY3NfcmVhZDE2X3JlcChwcml2LT5jYXJkLCBJRl9DU19IX1JFQUQsIGRhdGEsIGxlbi9zaXplb2YodTE2KSk7CisJaWZfY3NfcmVhZDE2X3JlcChwcml2LT5jYXJkLCBJRl9DU19SRUFELCBkYXRhLCBsZW4vc2l6ZW9mKHUxNikpOwogCWlmIChsZW4gJiAxKQotCQlkYXRhW2xlbi0xXSA9IGlmX2NzX3JlYWQ4KHByaXYtPmNhcmQsIElGX0NTX0hfUkVBRCk7CisJCWRhdGFbbGVuLTFdID0gaWZfY3NfcmVhZDgocHJpdi0+Y2FyZCwgSUZfQ1NfUkVBRCk7CiAKIGRhdF9lcnI6Ci0JaWZfY3Nfd3JpdGUxNihwcml2LT5jYXJkLCBJRl9DU19IX1NUQVRVUywgSUZfQ1NfSF9TVEFUVVNfUlhfT1ZFUik7Ci0JaWZfY3Nfd3JpdGUxNihwcml2LT5jYXJkLCBJRl9DU19IX0lOVF9DQVVTRSwgSUZfQ1NfSF9JQ19SWF9PVkVSKTsKKwlpZl9jc193cml0ZTE2KHByaXYtPmNhcmQsIElGX0NTX0hPU1RfU1RBVFVTLCBJRl9DU19CSVRfUlgpOworCWlmX2NzX3dyaXRlMTYocHJpdi0+Y2FyZCwgSUZfQ1NfSE9TVF9JTlRfQ0FVU0UsIElGX0NTX0JJVF9SWCk7CiAKIG91dDoKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DUywgInJldCAlcCIsIHNrYik7CiAJcmV0dXJuIHNrYjsKIH0KIAotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVycnVwdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGlmX2NzX2VuYWJsZV9pbnRzKHN0cnVjdCBpZl9jc19jYXJkICpjYXJkKQotewotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DUyk7Ci0JaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IX0lOVF9NQVNLLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlmX2NzX2Rpc2FibGVfaW50cyhzdHJ1Y3QgaWZfY3NfY2FyZCAqY2FyZCkKLXsKLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ1MpOwotCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfSF9JTlRfTUFTSywgSUZfQ1NfSF9JTV9NQVNLKTsKLX0KLQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgaWZfY3NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlmX2NzX2NhcmQgKmNhcmQgPSBkYXRhOwpAQCAtMzk0LDEwICs0NTQsMTAgQEAKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DUyk7CiAKLQljYXVzZSA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19DX0lOVF9DQVVTRSk7Ci0JaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19DX0lOVF9DQVVTRSwgY2F1c2UgJiBJRl9DU19DX0lDX01BU0spOwotCisJLyogQXNrIGNhcmQgaW50ZXJydXB0IGNhdXNlIHJlZ2lzdGVyIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBmb3IgdXMgKi8KKwljYXVzZSA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19DQVJEX0lOVF9DQVVTRSk7CiAJbGJzX2RlYl9jcygiY2F1c2UgMHglMDR4XG4iLCBjYXVzZSk7CisKIAlpZiAoY2F1c2UgPT0gMCkgewogCQkvKiBOb3QgZm9yIHVzICovCiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTQwOSwxMSArNDY5LDcgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCS8qIFRPRE86IEknbSBub3Qgc3VyZSB3aGF0IHRoZSBiZXN0IG9yZGVyaW5nIGlzICovCi0KLQljYXVzZSA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19DX1NUQVRVUykgJiBJRl9DU19DX1NfTUFTSzsKLQotCWlmIChjYXVzZSAmIElGX0NTX0NfU19SWF9VUExEX1JEWSkgeworCWlmIChjYXVzZSAmIElGX0NTX0JJVF9SWCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlsYnNfZGViX2NzKCJyeCBwYWNrZXRcbiIpOwogCQlza2IgPSBpZl9jc19yZWNlaXZlX2RhdGEocHJpdik7CkBAIC00MjEsMTYgKzQ3NywxNiBAQAogCQkJbGJzX3Byb2Nlc3NfcnhlZF9wYWNrZXQocHJpdiwgc2tiKTsKIAl9CiAKLQlpZiAoY2F1c2UgJiBJRl9DU19IX0lDX1RYX09WRVIpIHsKLQkJbGJzX2RlYl9jcygidHggb3ZlclxuIik7CisJaWYgKGNhdXNlICYgSUZfQ1NfQklUX1RYKSB7CisJCWxic19kZWJfY3MoInR4IGRvbmVcbiIpOwogCQlsYnNfaG9zdF90b19jYXJkX2RvbmUocHJpdik7CiAJfQogCi0JaWYgKGNhdXNlICYgSUZfQ1NfQ19TX0NNRF9VUExEX1JEWSkgeworCWlmIChjYXVzZSAmIElGX0NTX0JJVF9SRVNQKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXU4IGk7CiAKLQkJbGJzX2RlYl9jcygiY21kIHVwbG9hZCByZWFkeVxuIik7CisJCWxic19kZWJfY3MoImNtZCByZXNwXG4iKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCWkgPSAocHJpdi0+cmVzcF9pZHggPT0gMCkgPyAxIDogMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKQEAgLTQ0NCwxNSArNTAwLDE3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJfQogCi0JaWYgKGNhdXNlICYgSUZfQ1NfSF9JQ19IT1NUX0VWRU5UKSB7Ci0JCXUxNiBldmVudCA9IGlmX2NzX3JlYWQxNihwcml2LT5jYXJkLCBJRl9DU19DX1NUQVRVUykKLQkJCSYgSUZfQ1NfQ19TX1NUQVRVU19NQVNLOwotCQlpZl9jc193cml0ZTE2KHByaXYtPmNhcmQsIElGX0NTX0hfSU5UX0NBVVNFLAotCQkJSUZfQ1NfSF9JQ19IT1NUX0VWRU5UKTsKLQkJbGJzX2RlYl9jcygiZXZlbnRjYXVzZSAweCUwNHhcbiIsIGV2ZW50KTsKLQkJbGJzX3F1ZXVlX2V2ZW50KHByaXYsIGV2ZW50ID4+IDggJiAweGZmKTsKKwlpZiAoY2F1c2UgJiBJRl9DU19CSVRfRVZFTlQpIHsKKwkJdTE2IHN0YXR1cyA9IGlmX2NzX3JlYWQxNihwcml2LT5jYXJkLCBJRl9DU19DQVJEX1NUQVRVUyk7CisJCWlmX2NzX3dyaXRlMTYocHJpdi0+Y2FyZCwgSUZfQ1NfSE9TVF9JTlRfQ0FVU0UsCisJCQlJRl9DU19CSVRfRVZFTlQpOworCQlsYnNfcXVldWVfZXZlbnQocHJpdiwgKHN0YXR1cyAmIElGX0NTX0NBUkRfU1RBVFVTX01BU0spID4+IDgpOwogCX0KIAorCS8qIENsZWFyIGludGVycnVwdCBjYXVzZSAqLworCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfQ0FSRF9JTlRfQ0FVU0UsIGNhdXNlICYgSUZfQ1NfQklUX01BU0spOworCisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NTKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTQ4MiwxMSArNTQwLDExIEBACiAJLyogIklmIHRoZSB2YWx1ZSBpcyAweDVhLCB0aGUgZmlybXdhcmUgaXMgYWxyZWFkeQogCSAqIGRvd25sb2FkZWQgc3VjY2Vzc2Z1bGx5IgogCSAqLwotCWlmIChzY3JhdGNoID09IDB4NWEpCisJaWYgKHNjcmF0Y2ggPT0gSUZfQ1NfU0NSQVRDSF9IRUxQRVJfT0spCiAJCWdvdG8gZG9uZTsKIAogCS8qICJJZiB0aGUgdmFsdWUgaXMgIT0gMDAsIGl0IGlzIGludmFsaWQgdmFsdWUgb2YgcmVnaXN0ZXIgKi8KLQlpZiAoc2NyYXRjaCAhPSAweDAwKSB7CisJaWYgKHNjcmF0Y2ggIT0gSUZfQ1NfU0NSQVRDSF9CT09UX09LKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC01MTQsMjYgKzU3MiwyNiBAQAogCiAJCS8qICJ3cml0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHNlbnQgdG8gdGhlIEkvTyBDb21tYW5kCiAJCSAqIHdyaXRlIGxlbmd0aCByZWdpc3RlciIgKi8KLQkJaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IX0NNRF9MRU4sIGNvdW50KTsKKwkJaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19DTURfTEVOLCBjb3VudCk7CiAKIAkJLyogIndyaXRlIHRoaXMgdG8gSS9PIENvbW1hbmQgcG9ydCByZWdpc3RlciBhcyAxNiBiaXQgd3JpdGVzICovCiAJCWlmIChjb3VudCkKLQkJCWlmX2NzX3dyaXRlMTZfcmVwKGNhcmQsIElGX0NTX0hfQ01ELAorCQkJaWZfY3Nfd3JpdGUxNl9yZXAoY2FyZCwgSUZfQ1NfQ01ELAogCQkJCSZmdy0+ZGF0YVtzZW50XSwKIAkJCQljb3VudCA+PiAxKTsKIAogCQkvKiAiQXNzZXJ0IHRoZSBkb3dubG9hZCBvdmVyIGludGVycnVwdCBjb21tYW5kIGluIHRoZSBIb3N0CiAJCSAqIHN0YXR1cyByZWdpc3RlciIgKi8KLQkJaWZfY3Nfd3JpdGU4KGNhcmQsIElGX0NTX0hfU1RBVFVTLCBJRl9DU19IX1NUQVRVU19ETkxEX09WRVIpOworCQlpZl9jc193cml0ZTgoY2FyZCwgSUZfQ1NfSE9TVF9TVEFUVVMsIElGX0NTX0JJVF9DT01NQU5EKTsKIAogCQkvKiAiQXNzZXJ0IHRoZSBkb3dubG9hZCBvdmVyIGludGVycnVwdCBjb21tYW5kIGluIHRoZSBDYXJkCiAJCSAqIGludGVycnVwdCBjYXNlIHJlZ2lzdGVyIiAqLwotCQlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0hfSU5UX0NBVVNFLCBJRl9DU19IX0lDX0ROTERfT1ZFUik7CisJCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfSE9TVF9JTlRfQ0FVU0UsIElGX0NTX0JJVF9DT01NQU5EKTsKIAogCQkvKiAiVGhlIGhvc3QgcG9sbHMgdGhlIENhcmQgU3RhdHVzIHJlZ2lzdGVyIC4uLiBmb3IgNTAgbXMgYmVmb3JlCiAJCSAgIGRlY2xhcmluZyBhIGZhaWx1cmUgKi8KLQkJcmV0ID0gaWZfY3NfcG9sbF93aGlsZV9md19kb3dubG9hZChjYXJkLCBJRl9DU19DX1NUQVRVUywKLQkJCUlGX0NTX0NfU19DTURfRE5MRF9SRFkpOworCQlyZXQgPSBpZl9jc19wb2xsX3doaWxlX2Z3X2Rvd25sb2FkKGNhcmQsIElGX0NTX0NBUkRfU1RBVFVTLAorCQkJSUZfQ1NfQklUX0NPTU1BTkQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbGJzX3ByX2VycigiY2FuJ3QgZG93bmxvYWQgaGVscGVyIGF0IDB4JXgsIHJldCAlZFxuIiwKIAkJCQlzZW50LCByZXQpOwpAQCAtNTc1LDE0ICs2MzMsMTUgQEAKIAl9CiAJbGJzX2RlYl9jcygiZncgc2l6ZSAldGRcbiIsIGZ3LT5zaXplKTsKIAotCXJldCA9IGlmX2NzX3BvbGxfd2hpbGVfZndfZG93bmxvYWQoY2FyZCwgSUZfQ1NfQ19TUV9SRUFEX0xPVywgSUZfQ1NfQ19TUV9IRUxQRVJfT0spOworCXJldCA9IGlmX2NzX3BvbGxfd2hpbGVfZndfZG93bmxvYWQoY2FyZCwgSUZfQ1NfU1FfUkVBRF9MT1csCisJCUlGX0NTX1NRX0hFTFBFUl9PSyk7CiAJaWYgKHJldCA8IDApIHsKIAkJbGJzX3ByX2VycigiaGVscGVyIGZpcm13YXJlIGRvZXNuJ3QgYW5zd2VyXG4iKTsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAlmb3IgKHNlbnQgPSAwOyBzZW50IDwgZnctPnNpemU7IHNlbnQgKz0gbGVuKSB7Ci0JCWxlbiA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19DX1NRX1JFQURfTE9XKTsKKwkJbGVuID0gaWZfY3NfcmVhZDE2KGNhcmQsIElGX0NTX1NRX1JFQURfTE9XKTsKIAkJaWYgKGxlbiAmIDEpIHsKIAkJCXJldHJ5Kys7CiAJCQlsYnNfcHJfaW5mbygib2RkLCBuZWVkIHRvIHJldHJ5IHRoaXMgZmlybXdhcmUgYmxvY2tcbiIpOwpAQCAtNjAwLDE2ICs2NTksMTYgQEAKIAkJfQogCiAKLQkJaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IX0NNRF9MRU4sIGxlbik7CisJCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfQ01EX0xFTiwgbGVuKTsKIAotCQlpZl9jc193cml0ZTE2X3JlcChjYXJkLCBJRl9DU19IX0NNRCwKKwkJaWZfY3Nfd3JpdGUxNl9yZXAoY2FyZCwgSUZfQ1NfQ01ELAogCQkJJmZ3LT5kYXRhW3NlbnRdLAogCQkJKGxlbisxKSA+PiAxKTsKLQkJaWZfY3Nfd3JpdGU4KGNhcmQsIElGX0NTX0hfU1RBVFVTLCBJRl9DU19IX1NUQVRVU19ETkxEX09WRVIpOwotCQlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0hfSU5UX0NBVVNFLCBJRl9DU19IX0lDX0ROTERfT1ZFUik7CisJCWlmX2NzX3dyaXRlOChjYXJkLCBJRl9DU19IT1NUX1NUQVRVUywgSUZfQ1NfQklUX0NPTU1BTkQpOworCQlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0hPU1RfSU5UX0NBVVNFLCBJRl9DU19CSVRfQ09NTUFORCk7CiAKLQkJcmV0ID0gaWZfY3NfcG9sbF93aGlsZV9md19kb3dubG9hZChjYXJkLCBJRl9DU19DX1NUQVRVUywKLQkJCUlGX0NTX0NfU19DTURfRE5MRF9SRFkpOworCQlyZXQgPSBpZl9jc19wb2xsX3doaWxlX2Z3X2Rvd25sb2FkKGNhcmQsIElGX0NTX0NBUkRfU1RBVFVTLAorCQkJSUZfQ1NfQklUX0NPTU1BTkQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbGJzX3ByX2VycigiY2FuJ3QgZG93bmxvYWQgZmlybXdhcmUgYXQgMHgleFxuIiwgc2VudCk7CiAJCQlnb3RvIGVycl9yZWxlYXNlOwpAQCAtODA2LDYgKzg2NSwxMiBAQAogCSAgICAgICBwX2Rldi0+aXJxLkFzc2lnbmVkSVJRLCBwX2Rldi0+aW8uQmFzZVBvcnQxLAogCSAgICAgICBwX2Rldi0+aW8uQmFzZVBvcnQxICsgcF9kZXYtPmlvLk51bVBvcnRzMSAtIDEpOwogCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIGN1cnJlbnQgc2lsaWNvbiAqLworCWlmIChpZl9jc19yZWFkOChjYXJkLCBJRl9DU19QUk9EVUNUX0lEKSA8IElGX0NTX0NGODM4NV9CMV9SRVYpIHsKKwkJbGJzX3ByX2Vycigib2xkIGNoaXBzIGxpa2UgODM4NSByZXYgQjEgYXJlbid0IHN1cHBvcnRlZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0MjsKKwl9CiAKIAkvKiBMb2FkIHRoZSBmaXJtd2FyZSBlYXJseSwgYmVmb3JlIGNhbGxpbmcgaW50byBsaWJlcnRhcy5rbyAqLwogCXJldCA9IGlmX2NzX3Byb2dfaGVscGVyKGNhcmQpOwpAQCAtODM3LDcgKzkwMiw3IEBACiAKIAkvKiBDbGVhciBhbnkgaW50ZXJydXB0IGNhdXNlIHRoYXQgaGFwcGVuZCB3aGlsZSBzZW5kaW5nCiAJICogZmlybXdhcmUvaW5pdGlhbGl6aW5nIGNhcmQgKi8KLQlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0NfSU5UX0NBVVNFLCBJRl9DU19DX0lDX01BU0spOworCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfQ0FSRF9JTlRfQ0FVU0UsIElGX0NTX0JJVF9NQVNLKTsKIAlpZl9jc19lbmFibGVfaW50cyhjYXJkKTsKIAogCS8qIEFuZCBmaW5hbGx5IGJyaW5nIHRoZSBjYXJkIHVwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jCmluZGV4IDRkY2Q0MDkuLjYzMmMyOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jCkBAIC03LDYgKzcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KIAorI2lmZGVmIENPTkZJR19PTFBDCisjaW5jbHVkZSA8YXNtL29scGMuaD4KKyNlbmRpZgorCiAjZGVmaW5lIERSVl9OQU1FICJ1c2I4eHh4IgogCiAjaW5jbHVkZSAiaG9zdC5oIgpAQCAtMTQ2LDYgKzE1MCwxNCBAQAogCXdha2VfdXAoJmNhcmRwLT5md193cSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfT0xQQworc3RhdGljIHZvaWQgaWZfdXNiX3Jlc2V0X29scGNfY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCit7CisJcHJpbnRrKEtFUk5fQ1JJVCAiUmVzZXR0aW5nIE9MUEMgd2lyZWxlc3MgdmlhIEVDLi4uXG4iKTsKKwlvbHBjX2VjX2NtZCgweDI1LCBOVUxMLCAwLCBOVUxMLCAwKTsKK30KKyNlbmRpZgorCiAvKioKICAqICBAYnJpZWYgc2V0cyB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMKICAqICBAcGFyYW0gaWZudW0JaW50ZXJmYWNlIG51bWJlcgpAQCAtMjMxLDYgKzI0MywxMSBAQAogCWNhcmRwLT5wcml2LT5md19yZWFkeSA9IDE7CiAKIAlwcml2LT5od19ob3N0X3RvX2NhcmQgPSBpZl91c2JfaG9zdF90b19jYXJkOworI2lmZGVmIENPTkZJR19PTFBDCisJaWYgKG1hY2hpbmVfaXNfb2xwYygpKQorCQlwcml2LT5yZXNldF9jYXJkID0gaWZfdXNiX3Jlc2V0X29scGNfY2FyZDsKKyNlbmRpZgorCiAJY2FyZHAtPmJvb3QyX3ZlcnNpb24gPSB1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZTsKIAogCWlmX3VzYl9zdWJtaXRfcnhfdXJiKGNhcmRwKTsKQEAgLTM2NCw2ICszODEsMTEgQEAKIAlyZXQgPSB1c2JfcmVzZXRfZGV2aWNlKGNhcmRwLT51ZGV2KTsKIAltc2xlZXAoMTAwKTsKIAorI2lmZGVmIENPTkZJR19PTFBDCisJaWYgKHJldCAmJiBtYWNoaW5lX2lzX29scGMoKSkKKwkJaWZfdXNiX3Jlc2V0X29scGNfY2FyZChOVUxMKTsKKyNlbmRpZgorCiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfVVNCLCAicmV0ICVkIiwgcmV0KTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKaW5kZXggYWNmYzRiZi4uMTRkNWQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogCiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CkBAIC0zNDMsMTQgKzM0NCwxNSBAQAogewogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHRvX25ldF9kZXYoZGV2KS0+cHJpdjsKIAlpbnQgZW5hYmxlOwotCWludCByZXQ7CisJaW50IHJldCwgYWN0aW9uID0gQ01EX0FDVF9NRVNIX0NPTkZJR19TVE9QOwogCiAJc3NjYW5mKGJ1ZiwgIiV4IiwgJmVuYWJsZSk7CiAJZW5hYmxlID0gISFlbmFibGU7CiAJaWYgKGVuYWJsZSA9PSAhIXByaXYtPm1lc2hfZGV2KQogCQlyZXR1cm4gY291bnQ7Ci0KLQlyZXQgPSBsYnNfbWVzaF9jb25maWcocHJpdiwgZW5hYmxlLCBwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCk7CisJaWYgKGVuYWJsZSkKKwkJYWN0aW9uID0gQ01EX0FDVF9NRVNIX0NPTkZJR19TVEFSVDsKKwlyZXQgPSBsYnNfbWVzaF9jb25maWcocHJpdiwgYWN0aW9uLCBwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDQ2LDYgKzQ0OCw4IEBACiAKIAlzcGluX3VubG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKIAorCXNjaGVkdWxlX3dvcmsoJnByaXYtPm1jYXN0X3dvcmspOworCiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX01FU0gpOwogCXJldHVybiAwOwogfQpAQCAtNDY3LDYgKzQ3MSw4IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOwogCisJc2NoZWR1bGVfd29yaygmcHJpdi0+bWNhc3Rfd29yayk7CisKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfTkVUKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU2Myw4NyArNTY5LDExNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbGJzX2NvcHlfbXVsdGljYXN0X2FkZHJlc3Moc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpbnQgaSA9IDA7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY3B0ciA9IGRldi0+bWNfbGlzdDsKIAotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKLQkJbWVtY3B5KCZwcml2LT5tdWx0aWNhc3RsaXN0W2ldLCBtY3B0ci0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLQkJbWNwdHIgPSBtY3B0ci0+bmV4dDsKK3N0YXRpYyBpbmxpbmUgaW50IG1hY19pbl9saXN0KHVuc2lnbmVkIGNoYXIgKmxpc3QsIGludCBsaXN0X2xlbiwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKm1hYykKK3sKKwl3aGlsZSAobGlzdF9sZW4pIHsKKwkJaWYgKCFtZW1jbXAobGlzdCwgbWFjLCBFVEhfQUxFTikpCisJCQlyZXR1cm4gMTsKKwkJbGlzdCArPSBFVEhfQUxFTjsKKwkJbGlzdF9sZW4tLTsKIAl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBsYnNfYWRkX21jYXN0X2FkZHJzKHN0cnVjdCBjbWRfZHNfbWFjX211bHRpY2FzdF9hZHIgKmNtZCwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnJfYWRkcnMpCit7CisJaW50IGkgPSBucl9hZGRyczsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlpZiAoKGRldi0+ZmxhZ3MgJiAoSUZGX1VQfElGRl9NVUxUSUNBU1QpKSAhPSAoSUZGX1VQfElGRl9NVUxUSUNBU1QpKQorCQlyZXR1cm4gbnJfYWRkcnM7CisKKwluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKKwlmb3IgKG1jX2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jX2xpc3Q7IG1jX2xpc3QgPSBtY19saXN0LT5uZXh0KSB7CisJCWlmIChtYWNfaW5fbGlzdChjbWQtPm1hY2xpc3QsIG5yX2FkZHJzLCBtY19saXN0LT5kbWlfYWRkcikpIHsKKwkJCWxic19kZWJfbmV0KCJtY2FzdCBhZGRyZXNzICVzOiVzIHNraXBwZWRcbiIsIGRldi0+bmFtZSwKKwkJCQkgICAgcHJpbnRfbWFjKG1hYywgbWNfbGlzdC0+ZG1pX2FkZHIpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGkgPT0gTVJWRFJWX01BWF9NVUxUSUNBU1RfTElTVF9TSVpFKQorCQkJYnJlYWs7CisJCW1lbWNweSgmY21kLT5tYWNsaXN0WzYqaV0sIG1jX2xpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7CisJCWxic19kZWJfbmV0KCJtY2FzdCBhZGRyZXNzICVzOiVzIGFkZGVkIHRvIGZpbHRlclxuIiwgZGV2LT5uYW1lLAorCQkJICAgIHByaW50X21hYyhtYWMsIG1jX2xpc3QtPmRtaV9hZGRyKSk7CisJCWkrKzsKKwl9CisJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKKwlpZiAobWNfbGlzdCkKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisKIAlyZXR1cm4gaTsKIH0KIAorc3RhdGljIHZvaWQgbGJzX3NldF9tY2FzdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGJzX3ByaXZhdGUsIG1jYXN0X3dvcmspOworCXN0cnVjdCBjbWRfZHNfbWFjX211bHRpY2FzdF9hZHIgbWNhc3RfY21kOworCWludCBkZXZfZmxhZ3M7CisJaW50IG5yX2FkZHJzOworCWludCBvbGRfbWFjX2NvbnRyb2wgPSBwcml2LT5tYWNfY29udHJvbDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9ORVQpOworCisJZGV2X2ZsYWdzID0gcHJpdi0+ZGV2LT5mbGFnczsKKwlpZiAocHJpdi0+bWVzaF9kZXYpCisJCWRldl9mbGFncyB8PSBwcml2LT5tZXNoX2Rldi0+ZmxhZ3M7CisKKwlpZiAoZGV2X2ZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJcHJpdi0+bWFjX2NvbnRyb2wgfD0gQ01EX0FDVF9NQUNfUFJPTUlTQ1VPVVNfRU5BQkxFOworCQlwcml2LT5tYWNfY29udHJvbCAmPSB+KENNRF9BQ1RfTUFDX0FMTF9NVUxUSUNBU1RfRU5BQkxFIHwKKwkJCQkgICAgICAgQ01EX0FDVF9NQUNfTVVMVElDQVNUX0VOQUJMRSk7CisJCWdvdG8gb3V0X3NldF9tYWNfY29udHJvbDsKKwl9IGVsc2UgaWYgKGRldl9mbGFncyAmIElGRl9BTExNVUxUSSkgeworCWRvX2FsbG11bHRpOgorCQlwcml2LT5tYWNfY29udHJvbCB8PSBDTURfQUNUX01BQ19BTExfTVVMVElDQVNUX0VOQUJMRTsKKwkJcHJpdi0+bWFjX2NvbnRyb2wgJj0gfihDTURfQUNUX01BQ19QUk9NSVNDVU9VU19FTkFCTEUgfAorCQkJCSAgICAgICBDTURfQUNUX01BQ19NVUxUSUNBU1RfRU5BQkxFKTsKKwkJZ290byBvdXRfc2V0X21hY19jb250cm9sOworCX0KKworCS8qIE9uY2UgZm9yIHByaXYtPmRldiwgYWdhaW4gZm9yIHByaXYtPm1lc2hfZGV2IGlmIGl0IGV4aXN0cyAqLworCW5yX2FkZHJzID0gbGJzX2FkZF9tY2FzdF9hZGRycygmbWNhc3RfY21kLCBwcml2LT5kZXYsIDApOworCWlmIChucl9hZGRycyA+PSAwICYmIHByaXYtPm1lc2hfZGV2KQorCQlucl9hZGRycyA9IGxic19hZGRfbWNhc3RfYWRkcnMoJm1jYXN0X2NtZCwgcHJpdi0+bWVzaF9kZXYsIG5yX2FkZHJzKTsKKwlpZiAobnJfYWRkcnMgPCAwKQorCQlnb3RvIGRvX2FsbG11bHRpOworCisJaWYgKG5yX2FkZHJzKSB7CisJCWludCBzaXplID0gb2Zmc2V0b2Yoc3RydWN0IGNtZF9kc19tYWNfbXVsdGljYXN0X2FkciwKKwkJCQkgICAgbWFjbGlzdFs2Km5yX2FkZHJzXSk7CisKKwkJbWNhc3RfY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9BQ1RfU0VUKTsKKwkJbWNhc3RfY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisJCW1jYXN0X2NtZC5ucl9vZl9hZHJzID0gY3B1X3RvX2xlMTYobnJfYWRkcnMpOworCisJCWxic19jbWRfYXN5bmMocHJpdiwgQ01EX01BQ19NVUxUSUNBU1RfQURSLCAmbWNhc3RfY21kLmhkciwgc2l6ZSk7CisKKwkJcHJpdi0+bWFjX2NvbnRyb2wgfD0gQ01EX0FDVF9NQUNfTVVMVElDQVNUX0VOQUJMRTsKKwl9IGVsc2UKKwkJcHJpdi0+bWFjX2NvbnRyb2wgJj0gfkNNRF9BQ1RfTUFDX01VTFRJQ0FTVF9FTkFCTEU7CisKKwlwcml2LT5tYWNfY29udHJvbCAmPSB+KENNRF9BQ1RfTUFDX1BST01JU0NVT1VTX0VOQUJMRSB8CisJCQkgICAgICAgQ01EX0FDVF9NQUNfQUxMX01VTFRJQ0FTVF9FTkFCTEUpOworIG91dF9zZXRfbWFjX2NvbnRyb2w6CisJaWYgKHByaXYtPm1hY19jb250cm9sICE9IG9sZF9tYWNfY29udHJvbCkKKwkJbGJzX3NldF9tYWNfY29udHJvbChwcml2KTsKKworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9ORVQpOworfQorCiBzdGF0aWMgdm9pZCBsYnNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5wcml2OwotCWludCBvbGRfbWFjX2NvbnRyb2w7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKLQlsYnNfZGViX2VudGVyKExCU19ERUJfTkVUKTsKLQotCW9sZF9tYWNfY29udHJvbCA9IHByaXYtPm1hY19jb250cm9sOwotCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCQlsYnNfZGViX25ldCgiZW5hYmxlIHByb21pc2N1b3VzIG1vZGVcbiIpOwotCQlwcml2LT5tYWNfY29udHJvbCB8PQotCQkgICAgQ01EX0FDVF9NQUNfUFJPTUlTQ1VPVVNfRU5BQkxFOwotCQlwcml2LT5tYWNfY29udHJvbCAmPQotCQkgICAgfihDTURfQUNUX01BQ19BTExfTVVMVElDQVNUX0VOQUJMRSB8Ci0JCSAgICAgIENNRF9BQ1RfTUFDX01VTFRJQ0FTVF9FTkFCTEUpOwotCX0gZWxzZSB7Ci0JCS8qIE11bHRpY2FzdCAqLwotCQlwcml2LT5tYWNfY29udHJvbCAmPQotCQkgICAgfkNNRF9BQ1RfTUFDX1BST01JU0NVT1VTX0VOQUJMRTsKLQotCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50ID4KLQkJICAgIE1SVkRSVl9NQVhfTVVMVElDQVNUX0xJU1RfU0laRSkgewotCQkJbGJzX2RlYl9uZXQoICJlbmFibGluZyBhbGwgbXVsdGljYXN0XG4iKTsKLQkJCXByaXYtPm1hY19jb250cm9sIHw9Ci0JCQkgICAgQ01EX0FDVF9NQUNfQUxMX01VTFRJQ0FTVF9FTkFCTEU7Ci0JCQlwcml2LT5tYWNfY29udHJvbCAmPQotCQkJICAgIH5DTURfQUNUX01BQ19NVUxUSUNBU1RfRU5BQkxFOwotCQl9IGVsc2UgewotCQkJcHJpdi0+bWFjX2NvbnRyb2wgJj0KLQkJCSAgICB+Q01EX0FDVF9NQUNfQUxMX01VTFRJQ0FTVF9FTkFCTEU7Ci0KLQkJCWlmICghZGV2LT5tY19jb3VudCkgewotCQkJCWxic19kZWJfbmV0KCJubyBtdWx0aWNhc3QgYWRkcmVzc2VzLCAiCi0JCQkJICAgICAgICJkaXNhYmxpbmcgbXVsdGljYXN0XG4iKTsKLQkJCQlwcml2LT5tYWNfY29udHJvbCAmPQotCQkJCSAgICB+Q01EX0FDVF9NQUNfTVVMVElDQVNUX0VOQUJMRTsKLQkJCX0gZWxzZSB7Ci0JCQkJaW50IGk7Ci0KLQkJCQlwcml2LT5tYWNfY29udHJvbCB8PQotCQkJCSAgICBDTURfQUNUX01BQ19NVUxUSUNBU1RfRU5BQkxFOwotCi0JCQkJcHJpdi0+bnJfb2ZfbXVsdGljYXN0bWFjYWRkciA9Ci0JCQkJICAgIGxic19jb3B5X211bHRpY2FzdF9hZGRyZXNzKHByaXYsIGRldik7Ci0KLQkJCQlsYnNfZGViX25ldCgibXVsdGljYXN0IGFkZHJlc3NlczogJWRcbiIsCi0JCQkJICAgICAgIGRldi0+bWNfY291bnQpOwotCi0JCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgewotCQkJCQlsYnNfZGViX25ldCgiTXVsdGljYXN0IGFkZHJlc3MgJWQ6ICVzXG4iLAotCQkJCQkgICAgICAgaSwgcHJpbnRfbWFjKG1hYywKLQkJCQkJICAgICAgIHByaXYtPm11bHRpY2FzdGxpc3RbaV0pKTsKLQkJCQl9Ci0JCQkJLyogc2VuZCBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIGZpcm13YXJlICovCi0JCQkJbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LAotCQkJCQkJICAgICAgQ01EX01BQ19NVUxUSUNBU1RfQURSLAotCQkJCQkJICAgICAgQ01EX0FDVF9TRVQsIDAsIDAsCi0JCQkJCQkgICAgICBOVUxMKTsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChwcml2LT5tYWNfY29udHJvbCAhPSBvbGRfbWFjX2NvbnRyb2wpCi0JCWxic19zZXRfbWFjX2NvbnRyb2wocHJpdik7Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfTkVUKTsKKwlzY2hlZHVsZV93b3JrKCZwcml2LT5tY2FzdF93b3JrKTsKIH0KIAogLyoqCkBAIC02ODksMjAgKzcyMiwyMCBAQAogCQkJc2hvdWxkc2xlZXAgPSAxOwkvKiBTb21ldGhpbmcgaXMgZW4gcm91dGUgdG8gdGhlIGRldmljZSBhbHJlYWR5ICovCiAJCWVsc2UgaWYgKHByaXYtPnR4X3BlbmRpbmdfbGVuID4gMCkKIAkJCXNob3VsZHNsZWVwID0gMDsJLyogV2UndmUgYSBwYWNrZXQgdG8gc2VuZCAqLworCQllbHNlIGlmIChwcml2LT5yZXNwX2xlbltwcml2LT5yZXNwX2lkeF0pCisJCQlzaG91bGRzbGVlcCA9IDA7CS8qIFdlIGhhdmUgYSBjb21tYW5kIHJlc3BvbnNlICovCiAJCWVsc2UgaWYgKHByaXYtPmN1cl9jbWQpCiAJCQlzaG91bGRzbGVlcCA9IDE7CS8qIENhbid0IHNlbmQgYSBjb21tYW5kOyBvbmUgYWxyZWFkeSBydW5uaW5nICovCiAJCWVsc2UgaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5jbWRwZW5kaW5ncSkpCiAJCQlzaG91bGRzbGVlcCA9IDA7CS8qIFdlIGhhdmUgYSBjb21tYW5kIHRvIHNlbmQgKi8KIAkJZWxzZSBpZiAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykpCiAJCQlzaG91bGRzbGVlcCA9IDA7CS8qIFdlIGhhdmUgYW4gZXZlbnQgdG8gcHJvY2VzcyAqLwotCQllbHNlIGlmIChwcml2LT5yZXNwX2xlbltwcml2LT5yZXNwX2lkeF0pCi0JCQlzaG91bGRzbGVlcCA9IDA7CS8qIFdlIGhhdmUgYSBjb21tYW5kIHJlc3BvbnNlICovCiAJCWVsc2UKIAkJCXNob3VsZHNsZWVwID0gMTsJLyogTm8gY29tbWFuZCAqLwogCiAJCWlmIChzaG91bGRzbGVlcCkgewogCQkJbGJzX2RlYl90aHJlYWQoInNsZWVwaW5nLCBjb25uZWN0X3N0YXR1cyAlZCwgIgotCQkJCSJwc19tb2RlICVkLCBwc19zdGF0ZSAlZFxuIiwKKwkJCQkicHNtb2RlICVkLCBwc3N0YXRlICVkXG4iLAogCQkJCXByaXYtPmNvbm5lY3Rfc3RhdHVzLAogCQkJCXByaXYtPnBzbW9kZSwgcHJpdi0+cHNzdGF0ZSk7CiAJCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKQEAgLTc0OSwxNiArNzgyLDIxIEBACiAJCWlmIChwcml2LT5jbWRfdGltZWRfb3V0ICYmIHByaXYtPmN1cl9jbWQpIHsKIAkJCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRub2RlID0gcHJpdi0+Y3VyX2NtZDsKIAotCQkJaWYgKCsrcHJpdi0+bnJfcmV0cmllcyA+IDEwKSB7Ci0JCQkJbGJzX3ByX2luZm8oIkV4Y2Vzc2l2ZSB0aW1lb3V0cyBzdWJtaXR0aW5nIGNvbW1hbmQgJXhcbiIsCi0JCQkJCSAgICBsZTE2X3RvX2NwdShjbWRub2RlLT5jbWRidWYtPmNvbW1hbmQpKTsKKwkJCWlmICgrK3ByaXYtPm5yX3JldHJpZXMgPiAzKSB7CisJCQkJbGJzX3ByX2luZm8oIkV4Y2Vzc2l2ZSB0aW1lb3V0cyBzdWJtaXR0aW5nICIKKwkJCQkJImNvbW1hbmQgMHglMDR4XG4iLAorCQkJCQlsZTE2X3RvX2NwdShjbWRub2RlLT5jbWRidWYtPmNvbW1hbmQpKTsKIAkJCQlsYnNfY29tcGxldGVfY29tbWFuZChwcml2LCBjbWRub2RlLCAtRVRJTUVET1VUKTsKIAkJCQlwcml2LT5ucl9yZXRyaWVzID0gMDsKKwkJCQlpZiAocHJpdi0+cmVzZXRfY2FyZCkKKwkJCQkJcHJpdi0+cmVzZXRfY2FyZChwcml2KTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpdi0+Y3VyX2NtZCA9IE5VTEw7CiAJCQkJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9SRVNfUkVDRUlWRUQ7Ci0JCQkJbGJzX3ByX2luZm8oInJlcXVldWVpbmcgY29tbWFuZCAleCBkdWUgdG8gdGltZW91dCAoIyVkKVxuIiwKLQkJCQkJICAgIGxlMTZfdG9fY3B1KGNtZG5vZGUtPmNtZGJ1Zi0+Y29tbWFuZCksIHByaXYtPm5yX3JldHJpZXMpOworCQkJCWxic19wcl9pbmZvKCJyZXF1ZXVlaW5nIGNvbW1hbmQgMHglMDR4IGR1ZSAiCisJCQkJCSJ0byB0aW1lb3V0ICgjJWQpXG4iLAorCQkJCQlsZTE2X3RvX2NwdShjbWRub2RlLT5jbWRidWYtPmNvbW1hbmQpLAorCQkJCQlwcml2LT5ucl9yZXRyaWVzKTsKIAogCQkJCS8qIFN0aWNrIGl0IGJhY2sgYXQgdGhlIF90b3BfIG9mIHRoZSBwZW5kaW5nIHF1ZXVlCiAJCQkJICAgZm9yIGltbWVkaWF0ZSByZXN1Ym1pc3Npb24gKi8KQEAgLTg5MCw3ICs5MjgsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3N1c3BlbmQpOwogCi1pbnQgbGJzX3Jlc3VtZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCit2b2lkIGxic19yZXN1bWUoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9GVyk7CiAKQEAgLTkwNiw3ICs5NDQsNiBAQAogCQluZXRpZl9kZXZpY2VfYXR0YWNoKHByaXYtPm1lc2hfZGV2KTsKIAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9GVyk7Ci0JcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfcmVzdW1lKTsKIApAQCAtOTI5LDIwICs5NjYsMTAgQEAKIAkgKi8KIAltZW1zZXQocHJpdi0+Y3VycmVudF9hZGRyLCAweGZmLCBFVEhfQUxFTik7CiAJcmV0ID0gbGJzX3VwZGF0ZV9od19zcGVjKHByaXYpOwotCWlmIChyZXQpIHsKLQkJcmV0ID0gLTE7CisJaWYgKHJldCkKIAkJZ290byBkb25lOwotCX0KIAogCWxic19zZXRfbWFjX2NvbnRyb2wocHJpdik7Ci0KLQlyZXQgPSBsYnNfZ2V0X2RhdGFfcmF0ZShwcml2KTsKLQlpZiAocmV0IDwgMCkgewotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQotCXJldCA9IDA7CiBkb25lOgogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0ZXLCAicmV0ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtOTYwLDEyICs5ODcsMTEgQEAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAotCWlmICghcHJpdi0+Y3VyX2NtZCkgewotCQlsYnNfcHJfaW5mbygiQ29tbWFuZCB0aW1lciBleHBpcmVkOyBubyBwZW5kaW5nIGNvbW1hbmRcbiIpOworCWlmICghcHJpdi0+Y3VyX2NtZCkKIAkJZ290byBvdXQ7Ci0JfQogCi0JbGJzX3ByX2luZm8oIkNvbW1hbmQgJXggdGltZWQgb3V0XG4iLCBsZTE2X3RvX2NwdShwcml2LT5jdXJfY21kLT5jbWRidWYtPmNvbW1hbmQpKTsKKwlsYnNfcHJfaW5mbygiY29tbWFuZCAweCUwNHggdGltZWQgb3V0XG4iLAorCQlsZTE2X3RvX2NwdShwcml2LT5jdXJfY21kLT5jbWRidWYtPmNvbW1hbmQpKTsKIAogCXByaXYtPmNtZF90aW1lZF9vdXQgPSAxOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdHEpOwpAQCAtMTAxOSw3ICsxMDQ1LDcgQEAKIAlwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCA9IERFRkFVTFRfQURfSE9DX0NIQU5ORUw7CiAJcHJpdi0+bWFjX2NvbnRyb2wgPSBDTURfQUNUX01BQ19SWF9PTiB8IENNRF9BQ1RfTUFDX1RYX09OOwogCXByaXYtPnJhZGlvb24gPSBSQURJT19PTjsKLQlwcml2LT5hdXRvX3JhdGUgPSAxOworCXByaXYtPmVuYWJsZWh3YXV0byA9IDE7CiAJcHJpdi0+Y2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRTsKIAlwcml2LT5wc21vZGUgPSBMQlM4MDJfMTFQT1dFUk1PREVDQU07CiAJcHJpdi0+cHNzdGF0ZSA9IFBTX1NUQVRFX0ZVTExfUE9XRVI7CkBAIC0xMTM0LDYgKzExNjAsNyBAQAogCXByaXYtPndvcmtfdGhyZWFkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImxic193b3JrZXIiKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+YXNzb2Nfd29yaywgbGJzX2Fzc29jaWF0aW9uX3dvcmtlcik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnNjYW5fd29yaywgbGJzX3NjYW5fd29ya2VyKTsKKwlJTklUX1dPUksoJnByaXYtPm1jYXN0X3dvcmssIGxic19zZXRfbWNhc3Rfd29ya2VyKTsKIAlJTklUX1dPUksoJnByaXYtPnN5bmNfY2hhbm5lbCwgbGJzX3N5bmNfY2hhbm5lbF93b3JrZXIpOwogCiAJc3ByaW50Zihwcml2LT5tZXNoX3NzaWQsICJtZXNoIik7CkBAIC0xMTU2LDcgKzExODMsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX2FkZF9jYXJkKTsKIAogCi1pbnQgbGJzX3JlbW92ZV9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKK3ZvaWQgbGJzX3JlbW92ZV9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKQEAgLTExNjgsOCArMTE5NSw5IEBACiAKIAlkZXYgPSBwcml2LT5kZXY7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFzc29jX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+c2Nhbl93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmFzc29jX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPm1jYXN0X3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtfdGhyZWFkKTsKIAogCWlmIChwcml2LT5wc21vZGUgPT0gTEJTODAyXzExUE9XRVJNT0RFTUFYX1BTUCkgewpAQCAtMTE5MSw3ICsxMjE5LDYgQEAKIAlmcmVlX25ldGRldihkZXYpOwogCiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX01BSU4pOwotCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3JlbW92ZV9jYXJkKTsKIApAQCAtMTIzNiw5ICsxMjYzLDExIEBACiAJCSAgIHVzZWZ1bCAqLwogCiAJCXByaXYtPm1lc2hfdGx2ID0gMHgxMDAgKyAyOTE7Ci0JCWlmIChsYnNfbWVzaF9jb25maWcocHJpdiwgMSwgcHJpdi0+Y3VyYnNzcGFyYW1zLmNoYW5uZWwpKSB7CisJCWlmIChsYnNfbWVzaF9jb25maWcocHJpdiwgQ01EX0FDVF9NRVNIX0NPTkZJR19TVEFSVCwKKwkJCQkgICAgcHJpdi0+Y3VyYnNzcGFyYW1zLmNoYW5uZWwpKSB7CiAJCQlwcml2LT5tZXNoX3RsdiA9IDB4MTAwICsgMzc7Ci0JCQlpZiAobGJzX21lc2hfY29uZmlnKHByaXYsIDEsIHByaXYtPmN1cmJzc3BhcmFtcy5jaGFubmVsKSkKKwkJCWlmIChsYnNfbWVzaF9jb25maWcocHJpdiwgQ01EX0FDVF9NRVNIX0NPTkZJR19TVEFSVCwKKwkJCQkJICAgIHByaXYtPmN1cmJzc3BhcmFtcy5jaGFubmVsKSkKIAkJCQlwcml2LT5tZXNoX3RsdiA9IDA7CiAJCX0KIAkJaWYgKHByaXYtPm1lc2hfdGx2KSB7CkBAIC0xMjYyLDI0ICsxMjkxLDI4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfc3RhcnRfY2FyZCk7CiAKIAotaW50IGxic19zdG9wX2NhcmQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQordm9pZCBsYnNfc3RvcF9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OwotCWludCByZXQgPSAtMTsKIAlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kbm9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX01BSU4pOwogCisJaWYgKCFwcml2KQorCQlnb3RvIG91dDsKKwogCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihwcml2LT5kZXYpOwogCiAJbGJzX2RlYnVnZnNfcmVtb3ZlX29uZShwcml2KTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbGJzX3J0YXApOwotCWlmIChwcml2LT5tZXNoX3RsdikKKwlpZiAocHJpdi0+bWVzaF90bHYpIHsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2xic19tZXNoKTsKKwl9CiAKIAkvKiBGbHVzaCBwZW5kaW5nIGNvbW1hbmQgbm9kZXMgKi8KKwlkZWxfdGltZXJfc3luYygmcHJpdi0+Y29tbWFuZF90aW1lcik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbWRub2RlLCAmcHJpdi0+Y21kcGVuZGluZ3EsIGxpc3QpIHsKIAkJY21kbm9kZS0+cmVzdWx0ID0gLUVOT0VOVDsKQEAgLTEyOTAsOCArMTMyMyw4IEBACiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCi0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfTUFJTiwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKK291dDoKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfc3RvcF9jYXJkKTsKIApAQCAtMTMzMiw2ICsxMzY1LDggQEAKICNpZmRlZglXSVJFTEVTU19FWFQKIAltZXNoX2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJm1lc2hfaGFuZGxlcl9kZWY7CiAjZW5kaWYKKwltZXNoX2Rldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7CisJbWVzaF9kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3Q7CiAJLyogUmVnaXN0ZXIgdmlydHVhbCBtZXNoIGludGVyZmFjZSAqLwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihtZXNoX2Rldik7CiAJaWYgKHJldCkgewpAQCAtMTM0Myw2ICsxMzc4LDggQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl91bnJlZ2lzdGVyOwogCisJbGJzX3BlcnNpc3RfY29uZmlnX2luaXQobWVzaF9kZXYpOworCiAJLyogRXZlcnl0aGluZyBzdWNjZXNzZnVsICovCiAJcmV0ID0gMDsKIAlnb3RvIGRvbmU7CkBAIC0xMzY5LDggKzE0MDYsOSBAQAogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX01FU0gpOwogCW5ldGlmX3N0b3BfcXVldWUobWVzaF9kZXYpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm1lc2hfZGV2KTsKKwluZXRpZl9jYXJyaWVyX29mZihtZXNoX2Rldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCYobWVzaF9kZXYtPmRldi5rb2JqKSwgJmxic19tZXNoX2F0dHJfZ3JvdXApOworCWxic19wZXJzaXN0X2NvbmZpZ19yZW1vdmUobWVzaF9kZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KG1lc2hfZGV2KTsKIAlwcml2LT5tZXNoX2RldiA9IE5VTEw7CiAJZnJlZV9uZXRkZXYobWVzaF9kZXYpOwpAQCAtMTUzMywxMCArMTU3MSwxMSBAQAogewogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9NQUlOKTsKIAlpZiAocHJpdi0+cnRhcF9uZXRfZGV2ID09IE5VTEwpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJdW5yZWdpc3Rlcl9uZXRkZXYocHJpdi0+cnRhcF9uZXRfZGV2KTsKIAlmcmVlX25ldGRldihwcml2LT5ydGFwX25ldF9kZXYpOwogCXByaXYtPnJ0YXBfbmV0X2RldiA9IE5VTEw7CitvdXQ6CiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX01BSU4pOwogfQogCkBAIC0xNTYzLDcgKzE2MDIsNiBAQAogCXJ0YXBfZGV2LT5zdG9wID0gbGJzX3J0YXBfc3RvcDsKIAlydGFwX2Rldi0+Z2V0X3N0YXRzID0gbGJzX3J0YXBfZ2V0X3N0YXRzOwogCXJ0YXBfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYnNfcnRhcF9oYXJkX3N0YXJ0X3htaXQ7Ci0JcnRhcF9kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3Q7CiAJcnRhcF9kZXYtPnByaXYgPSBwcml2OwogCVNFVF9ORVRERVZfREVWKHJ0YXBfZGV2LCBwcml2LT5kZXYtPmRldi5wYXJlbnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9wZXJzaXN0Y2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9wZXJzaXN0Y2ZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQwZmY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3BlcnNpc3RjZmcuYwpAQCAtMCwwICsxLDQ1MyBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorCisjaW5jbHVkZSAiaG9zdC5oIgorI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJkZXYuaCIKKyNpbmNsdWRlICJ3ZXh0LmgiCisjaW5jbHVkZSAiZGVidWdmcy5oIgorI2luY2x1ZGUgInNjYW4uaCIKKyNpbmNsdWRlICJhc3NvYy5oIgorI2luY2x1ZGUgImNtZC5oIgorCitzdGF0aWMgaW50IG1lc2hfZ2V0X2RlZmF1bHRfcGFyYW1ldGVycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBtcnZsX21lc2hfZGVmYXVsdHMgKmRlZnMpCit7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5wcml2OworCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOworCWludCByZXQ7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcpKTsKKwlyZXQgPSBsYnNfbWVzaF9jb25maWdfc2VuZChwcml2LCAmY21kLCBDTURfQUNUX01FU0hfQ09ORklHX0dFVCwKKwkJCQkgICBDTURfVFlQRV9NRVNIX0dFVF9ERUZBVUxUUyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwltZW1jcHkoZGVmcywgJmNtZC5kYXRhWzBdLCBzaXplb2Yoc3RydWN0IG1ydmxfbWVzaF9kZWZhdWx0cykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGJvb3RmbGFnCisgKi8KK3N0YXRpYyBzc2l6ZV90IGJvb3RmbGFnX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbXJ2bF9tZXNoX2RlZmF1bHRzIGRlZnM7CisJaW50IHJldDsKKworCXJldCA9IG1lc2hfZ2V0X2RlZmF1bHRfcGFyYW1ldGVycyhkZXYsICZkZWZzKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCAxMiwgIjB4JXhcbiIsIGxlMzJfdG9fY3B1KGRlZnMuYm9vdGZsYWcpKTsKK30KKworLyoqCisgKiBAYnJpZWYgU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgYm9vdGZsYWcKKyAqLworc3RhdGljIHNzaXplX3QgYm9vdGZsYWdfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5wcml2OworCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOworCXVpbnQzMl90IGRhdHVtOworCWludCByZXQ7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCXJldCA9IHNzY2FuZihidWYsICIleCIsICZkYXR1bSk7CisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSooKF9fbGUzMiAqKSZjbWQuZGF0YVswXSkgPSBjcHVfdG9fbGUzMighIWRhdHVtKTsKKwljbWQubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHVpbnQzMl90KSk7CisJcmV0ID0gbGJzX21lc2hfY29uZmlnX3NlbmQocHJpdiwgJmNtZCwgQ01EX0FDVF9NRVNIX0NPTkZJR19TRVQsCisJCQkJICAgQ01EX1RZUEVfTUVTSF9TRVRfQk9PVEZMQUcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGJvb3R0aW1lCisgKi8KK3N0YXRpYyBzc2l6ZV90IGJvb3R0aW1lX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbXJ2bF9tZXNoX2RlZmF1bHRzIGRlZnM7CisJaW50IHJldDsKKworCXJldCA9IG1lc2hfZ2V0X2RlZmF1bHRfcGFyYW1ldGVycyhkZXYsICZkZWZzKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCAxMiwgIjB4JXhcbiIsIGRlZnMuYm9vdHRpbWUpOworfQorCisvKioKKyAqIEBicmllZiBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBib290dGltZQorICovCitzdGF0aWMgc3NpemVfdCBib290dGltZV9zZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5wcml2OworCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOworCXVpbnQzMl90IGRhdHVtOworCWludCByZXQ7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCXJldCA9IHNzY2FuZihidWYsICIleCIsICZkYXR1bSk7CisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEEgdG9vIHNtYWxsIGJvb3QgdGltZSB3aWxsIHJlc3VsdCBpbiB0aGUgZGV2aWNlIGJvb3RpbmcgaW50bworCSAqIHN0YW5kYWxvbmUgKG5vLWhvc3QpIG1vZGUgYmVmb3JlIHRoZSBob3N0IGNhbiB0YWtlIGNvbnRyb2wgb2YgaXQsCisJICogc28gdGhlIGNoYW5nZSB3aWxsIGJlIGhhcmQgdG8gcmV2ZXJ0LiAgVGhpcyBtYXkgYmUgYSBkZXNpcmVkCisJICogZmVhdHVyZSAoZS5nIHRvIGNvbmZpZ3VyZSBhIHZlcnkgZmFzdCBib290IHRpbWUgZm9yIGRldmljZXMgdGhhdAorCSAqIHdpbGwgbm90IGJlIGF0dGFjaGVkIHRvIGEgaG9zdCksIGJ1dCBkYW5nZXJvdXMuICBTbyBJJ20gZW5mb3JjaW5nIGEKKwkgKiBsb3dlciBsaW1pdCBvZiAyMCBzZWNvbmRzOiAgcmVtb3ZlIGFuZCByZWNvbXBpbGUgdGhlIGRyaXZlciBpZiB0aGlzCisJICogZG9lcyBub3Qgd29yayBmb3IgeW91LgorCSAqLworCWRhdHVtID0gKGRhdHVtIDwgMjApID8gMjAgOiBkYXR1bTsKKwljbWQuZGF0YVswXSA9IGRhdHVtOworCWNtZC5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YodWludDhfdCkpOworCXJldCA9IGxic19tZXNoX2NvbmZpZ19zZW5kKHByaXYsICZjbWQsIENNRF9BQ1RfTUVTSF9DT05GSUdfU0VULAorCQkJCSAgIENNRF9UWVBFX01FU0hfU0VUX0JPT1RUSU1FKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCisvKioKKyAqIEBicmllZiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBjaGFubmVsCisgKi8KK3N0YXRpYyBzc2l6ZV90IGNoYW5uZWxfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG1ydmxfbWVzaF9kZWZhdWx0cyBkZWZzOworCWludCByZXQ7CisKKwlyZXQgPSBtZXNoX2dldF9kZWZhdWx0X3BhcmFtZXRlcnMoZGV2LCAmZGVmcyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTIsICIweCV4XG4iLCBsZTE2X3RvX2NwdShkZWZzLmNoYW5uZWwpKTsKK30KKworLyoqCisgKiBAYnJpZWYgU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgY2hhbm5lbAorICovCitzdGF0aWMgc3NpemVfdCBjaGFubmVsX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gdG9fbmV0X2RldihkZXYpLT5wcml2OworCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOworCXVpbnQxNl90IGRhdHVtOworCWludCByZXQ7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCXJldCA9IHNzY2FuZihidWYsICIlaHgiLCAmZGF0dW0pOworCWlmIChyZXQgIT0gMSB8fCBkYXR1bSA8IDEgfHwgZGF0dW0gPiAxMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqKChfX2xlMTYgKikmY21kLmRhdGFbMF0pID0gY3B1X3RvX2xlMTYoZGF0dW0pOworCWNtZC5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YodWludDE2X3QpKTsKKwlyZXQgPSBsYnNfbWVzaF9jb25maWdfc2VuZChwcml2LCAmY21kLCBDTURfQUNUX01FU0hfQ09ORklHX1NFVCwKKwkJCQkgICBDTURfVFlQRV9NRVNIX1NFVF9ERUZfQ0hBTk5FTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzdHJsZW4oYnVmKTsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgbWVzaF9pZAorICovCitzdGF0aWMgc3NpemVfdCBtZXNoX2lkX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBtcnZsX21lc2hfZGVmYXVsdHMgZGVmczsKKwlpbnQgbWF4bGVuOworCWludCByZXQ7CisKKwlyZXQgPSBtZXNoX2dldF9kZWZhdWx0X3BhcmFtZXRlcnMoZGV2LCAmZGVmcyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGRlZnMubWVzaGllLnZhbC5tZXNoX2lkX2xlbiA+IElXX0VTU0lEX01BWF9TSVpFKSB7CisJCWxic19wcl9lcnIoImluY29uc2lzdGVudCBtZXNoIElEIGxlbmd0aCIpOworCQlkZWZzLm1lc2hpZS52YWwubWVzaF9pZF9sZW4gPSBJV19FU1NJRF9NQVhfU0laRTsKKwl9CisKKwkvKiBTU0lEIG5vdCBudWxsIHRlcm1pbmF0ZWQ6IHJlc2VydmUgcm9vbSBmb3IgXDAgKyBcbiAqLworCW1heGxlbiA9IGRlZnMubWVzaGllLnZhbC5tZXNoX2lkX2xlbiArIDI7CisJbWF4bGVuID0gKFBBR0VfU0laRSA+IG1heGxlbikgPyBtYXhsZW4gOiBQQUdFX1NJWkU7CisKKwlkZWZzLm1lc2hpZS52YWwubWVzaF9pZFtkZWZzLm1lc2hpZS52YWwubWVzaF9pZF9sZW5dID0gJ1wwJzsKKworCXJldHVybiBzbnByaW50ZihidWYsIG1heGxlbiwgIiVzXG4iLCBkZWZzLm1lc2hpZS52YWwubWVzaF9pZCk7Cit9CisKKy8qKgorICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIG1lc2hfaWQKKyAqLworc3RhdGljIHNzaXplX3QgbWVzaF9pZF9zZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOworCXN0cnVjdCBtcnZsX21lc2hfZGVmYXVsdHMgZGVmczsKKwlzdHJ1Y3QgbXJ2bF9tZXNoaWUgKmllOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHRvX25ldF9kZXYoZGV2KS0+cHJpdjsKKwlpbnQgbGVuOworCWludCByZXQ7CisKKwlpZiAoY291bnQgPCAyIHx8IGNvdW50ID4gSVdfRVNTSURfTUFYX1NJWkUgKyAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IGNtZF9kc19tZXNoX2NvbmZpZykpOworCWllID0gKHN0cnVjdCBtcnZsX21lc2hpZSAqKSAmY21kLmRhdGFbMF07CisKKwkvKiBmZXRjaCBhbGwgb3RoZXIgSW5mb3JtYXRpb24gRWxlbWVudCBwYXJhbWV0ZXJzICovCisJcmV0ID0gbWVzaF9nZXRfZGVmYXVsdF9wYXJhbWV0ZXJzKGRldiwgJmRlZnMpOworCisJY21kLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXJ2bF9tZXNoaWUpKTsKKworCS8qIHRyYW5zZmVyIElFIGVsZW1lbnRzICovCisJbWVtY3B5KGllLCAmZGVmcy5tZXNoaWUsIHNpemVvZihzdHJ1Y3QgbXJ2bF9tZXNoaWUpKTsKKworCWxlbiA9IGNvdW50IC0gMTsKKwltZW1jcHkoaWUtPnZhbC5tZXNoX2lkLCBidWYsIGxlbik7CisJLyogU1NJRCBsZW4gKi8KKwlpZS0+dmFsLm1lc2hfaWRfbGVuID0gbGVuOworCS8qIElFIGxlbiAqLworCWllLT5oZHIubGVuID0gc2l6ZW9mKHN0cnVjdCBtcnZsX21lc2hpZV92YWwpIC0gSVdfRVNTSURfTUFYX1NJWkUgKyBsZW47CisKKwlyZXQgPSBsYnNfbWVzaF9jb25maWdfc2VuZChwcml2LCAmY21kLCBDTURfQUNUX01FU0hfQ09ORklHX1NFVCwKKwkJCQkgICBDTURfVFlQRV9NRVNIX1NFVF9NRVNIX0lFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCisvKioKKyAqIEBicmllZiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBwcm90b2NvbF9pZAorICovCitzdGF0aWMgc3NpemVfdCBwcm90b2NvbF9pZF9nZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG1ydmxfbWVzaF9kZWZhdWx0cyBkZWZzOworCWludCByZXQ7CisKKwlyZXQgPSBtZXNoX2dldF9kZWZhdWx0X3BhcmFtZXRlcnMoZGV2LCAmZGVmcyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgNSwgIiVkXG4iLCBkZWZzLm1lc2hpZS52YWwuYWN0aXZlX3Byb3RvY29sX2lkKTsKK30KKworLyoqCisgKiBAYnJpZWYgU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgcHJvdG9jb2xfaWQKKyAqLworc3RhdGljIHNzaXplX3QgcHJvdG9jb2xfaWRfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOworCXN0cnVjdCBtcnZsX21lc2hfZGVmYXVsdHMgZGVmczsKKwlzdHJ1Y3QgbXJ2bF9tZXNoaWUgKmllOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHRvX25ldF9kZXYoZGV2KS0+cHJpdjsKKwl1aW50MzJfdCBkYXR1bTsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXgiLCAmZGF0dW0pOworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmZXRjaCBhbGwgb3RoZXIgSW5mb3JtYXRpb24gRWxlbWVudCBwYXJhbWV0ZXJzICovCisJcmV0ID0gbWVzaF9nZXRfZGVmYXVsdF9wYXJhbWV0ZXJzKGRldiwgJmRlZnMpOworCisJY21kLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXJ2bF9tZXNoaWUpKTsKKworCS8qIHRyYW5zZmVyIElFIGVsZW1lbnRzICovCisJaWUgPSAoc3RydWN0IG1ydmxfbWVzaGllICopICZjbWQuZGF0YVswXTsKKwltZW1jcHkoaWUsICZkZWZzLm1lc2hpZSwgc2l6ZW9mKHN0cnVjdCBtcnZsX21lc2hpZSkpOworCS8qIHVwZGF0ZSBwcm90b2NvbCBpZCAqLworCWllLT52YWwuYWN0aXZlX3Byb3RvY29sX2lkID0gZGF0dW07CisKKwlyZXQgPSBsYnNfbWVzaF9jb25maWdfc2VuZChwcml2LCAmY21kLCBDTURfQUNUX01FU0hfQ09ORklHX1NFVCwKKwkJCQkgICBDTURfVFlQRV9NRVNIX1NFVF9NRVNIX0lFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCisvKioKKyAqIEBicmllZiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXRyaWNfaWQKKyAqLworc3RhdGljIHNzaXplX3QgbWV0cmljX2lkX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG1ydmxfbWVzaF9kZWZhdWx0cyBkZWZzOworCWludCByZXQ7CisKKwlyZXQgPSBtZXNoX2dldF9kZWZhdWx0X3BhcmFtZXRlcnMoZGV2LCAmZGVmcyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgNSwgIiVkXG4iLCBkZWZzLm1lc2hpZS52YWwuYWN0aXZlX21ldHJpY19pZCk7Cit9CisKKy8qKgorICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIG1ldHJpY19pZAorICovCitzdGF0aWMgc3NpemVfdCBtZXRyaWNfaWRfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOworCXN0cnVjdCBtcnZsX21lc2hfZGVmYXVsdHMgZGVmczsKKwlzdHJ1Y3QgbXJ2bF9tZXNoaWUgKmllOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHRvX25ldF9kZXYoZGV2KS0+cHJpdjsKKwl1aW50MzJfdCBkYXR1bTsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXgiLCAmZGF0dW0pOworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmZXRjaCBhbGwgb3RoZXIgSW5mb3JtYXRpb24gRWxlbWVudCBwYXJhbWV0ZXJzICovCisJcmV0ID0gbWVzaF9nZXRfZGVmYXVsdF9wYXJhbWV0ZXJzKGRldiwgJmRlZnMpOworCisJY21kLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXJ2bF9tZXNoaWUpKTsKKworCS8qIHRyYW5zZmVyIElFIGVsZW1lbnRzICovCisJaWUgPSAoc3RydWN0IG1ydmxfbWVzaGllICopICZjbWQuZGF0YVswXTsKKwltZW1jcHkoaWUsICZkZWZzLm1lc2hpZSwgc2l6ZW9mKHN0cnVjdCBtcnZsX21lc2hpZSkpOworCS8qIHVwZGF0ZSBtZXRyaWMgaWQgKi8KKwlpZS0+dmFsLmFjdGl2ZV9tZXRyaWNfaWQgPSBkYXR1bTsKKworCXJldCA9IGxic19tZXNoX2NvbmZpZ19zZW5kKHByaXYsICZjbWQsIENNRF9BQ1RfTUVTSF9DT05GSUdfU0VULAorCQkJCSAgIENNRF9UWVBFX01FU0hfU0VUX01FU0hfSUUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGNhcGFiaWxpdHkKKyAqLworc3RhdGljIHNzaXplX3QgY2FwYWJpbGl0eV9nZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBtcnZsX21lc2hfZGVmYXVsdHMgZGVmczsKKwlpbnQgcmV0OworCisJcmV0ID0gbWVzaF9nZXRfZGVmYXVsdF9wYXJhbWV0ZXJzKGRldiwgJmRlZnMpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzbnByaW50ZihidWYsIDUsICIlZFxuIiwgZGVmcy5tZXNoaWUudmFsLm1lc2hfY2FwYWJpbGl0eSk7Cit9CisKKy8qKgorICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGNhcGFiaWxpdHkKKyAqLworc3RhdGljIHNzaXplX3QgY2FwYWJpbGl0eV9zZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjbWRfZHNfbWVzaF9jb25maWcgY21kOworCXN0cnVjdCBtcnZsX21lc2hfZGVmYXVsdHMgZGVmczsKKwlzdHJ1Y3QgbXJ2bF9tZXNoaWUgKmllOworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IHRvX25ldF9kZXYoZGV2KS0+cHJpdjsKKwl1aW50MzJfdCBkYXR1bTsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXgiLCAmZGF0dW0pOworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmZXRjaCBhbGwgb3RoZXIgSW5mb3JtYXRpb24gRWxlbWVudCBwYXJhbWV0ZXJzICovCisJcmV0ID0gbWVzaF9nZXRfZGVmYXVsdF9wYXJhbWV0ZXJzKGRldiwgJmRlZnMpOworCisJY21kLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXJ2bF9tZXNoaWUpKTsKKworCS8qIHRyYW5zZmVyIElFIGVsZW1lbnRzICovCisJaWUgPSAoc3RydWN0IG1ydmxfbWVzaGllICopICZjbWQuZGF0YVswXTsKKwltZW1jcHkoaWUsICZkZWZzLm1lc2hpZSwgc2l6ZW9mKHN0cnVjdCBtcnZsX21lc2hpZSkpOworCS8qIHVwZGF0ZSB2YWx1ZSAqLworCWllLT52YWwubWVzaF9jYXBhYmlsaXR5ID0gZGF0dW07CisKKwlyZXQgPSBsYnNfbWVzaF9jb25maWdfc2VuZChwcml2LCAmY21kLCBDTURfQUNUX01FU0hfQ09ORklHX1NFVCwKKwkJCQkgICBDTURfVFlQRV9NRVNIX1NFVF9NRVNIX0lFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCisKK3N0YXRpYyBERVZJQ0VfQVRUUihib290ZmxhZywgMDY0NCwgYm9vdGZsYWdfZ2V0LCBib290ZmxhZ19zZXQpOworc3RhdGljIERFVklDRV9BVFRSKGJvb3R0aW1lLCAwNjQ0LCBib290dGltZV9nZXQsIGJvb3R0aW1lX3NldCk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2hhbm5lbCwgMDY0NCwgY2hhbm5lbF9nZXQsIGNoYW5uZWxfc2V0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtZXNoX2lkLCAwNjQ0LCBtZXNoX2lkX2dldCwgbWVzaF9pZF9zZXQpOworc3RhdGljIERFVklDRV9BVFRSKHByb3RvY29sX2lkLCAwNjQ0LCBwcm90b2NvbF9pZF9nZXQsIHByb3RvY29sX2lkX3NldCk7CitzdGF0aWMgREVWSUNFX0FUVFIobWV0cmljX2lkLCAwNjQ0LCBtZXRyaWNfaWRfZ2V0LCBtZXRyaWNfaWRfc2V0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjYXBhYmlsaXR5LCAwNjQ0LCBjYXBhYmlsaXR5X2dldCwgY2FwYWJpbGl0eV9zZXQpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYm9vdF9vcHRzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2Jvb3RmbGFnLmF0dHIsCisJJmRldl9hdHRyX2Jvb3R0aW1lLmF0dHIsCisJJmRldl9hdHRyX2NoYW5uZWwuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBib290X29wdHNfZ3JvdXAgPSB7CisJLm5hbWUgPSAiYm9vdF9vcHRpb25zIiwKKwkuYXR0cnMgPSBib290X29wdHNfYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVzaF9pZV9hdHRyc1tdID0geworCSZkZXZfYXR0cl9tZXNoX2lkLmF0dHIsCisJJmRldl9hdHRyX3Byb3RvY29sX2lkLmF0dHIsCisJJmRldl9hdHRyX21ldHJpY19pZC5hdHRyLAorCSZkZXZfYXR0cl9jYXBhYmlsaXR5LmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVzaF9pZV9ncm91cCA9IHsKKwkubmFtZSA9ICJtZXNoX2llIiwKKwkuYXR0cnMgPSBtZXNoX2llX2F0dHJzLAorfTsKKwordm9pZCBsYnNfcGVyc2lzdF9jb25maWdfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCYoZGV2LT5kZXYua29iaiksICZib290X29wdHNfZ3JvdXApOworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmKGRldi0+ZGV2LmtvYmopLCAmbWVzaF9pZV9ncm91cCk7Cit9CisKK3ZvaWQgbGJzX3BlcnNpc3RfY29uZmlnX3JlbW92ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmKGRldi0+ZGV2LmtvYmopLCAmYm9vdF9vcHRzX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJihkZXYtPmRldi5rb2JqKSwgJm1lc2hfaWVfZ3JvdXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKaW5kZXggMDVhZjczMS4uNTc0OWYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAkvKiBUYWtlIHRoZSBkYXRhIHJhdGUgZnJvbSB0aGUgcnhwZCBzdHJ1Y3R1cmUKIAkgKiBvbmx5IGlmIHRoZSByYXRlIGlzIGF1dG8KIAkgKi8KLQlpZiAocHJpdi0+YXV0b19yYXRlKQorCWlmIChwcml2LT5lbmFibGVod2F1dG8pCiAJCXByaXYtPmN1cl9yYXRlID0gbGJzX2Z3X2luZGV4X3RvX2RhdGFfcmF0ZShwX3J4X3BkLT5yeF9yYXRlKTsKIAogCWxic19jb21wdXRlX3Jzc2kocHJpdiwgcF9yeF9wZCk7CkBAIC0zODMsNyArMzgzLDcgQEAKIAkvKiBUYWtlIHRoZSBkYXRhIHJhdGUgZnJvbSB0aGUgcnhwZCBzdHJ1Y3R1cmUKIAkgKiBvbmx5IGlmIHRoZSByYXRlIGlzIGF1dG8KIAkgKi8KLQlpZiAocHJpdi0+YXV0b19yYXRlKQorCWlmIChwcml2LT5lbmFibGVod2F1dG8pCiAJCXByaXYtPmN1cl9yYXRlID0gbGJzX2Z3X2luZGV4X3RvX2RhdGFfcmF0ZShwcnhwZC0+cnhfcmF0ZSk7CiAKIAlsYnNfY29tcHV0ZV9yc3NpKHByaXYsIHByeHBkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwppbmRleCAzODdkNDg3OC4uNGIyNzQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwpAQCAtNzc2LDggKzc3Niw5IEBACiAjZGVmaW5lIE1BWF9DVVNUT01fTEVOIDY0CiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqbGJzX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgICAgY2hhciAqc3RhcnQsIGNoYXIgKnN0b3AsCi0JCQkJICAgICAgIHN0cnVjdCBic3NfZGVzY3JpcHRvciAqYnNzKQorCQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkJICAgIGNoYXIgKnN0YXJ0LCBjaGFyICpzdG9wLAorCQkJCQkgICAgc3RydWN0IGJzc19kZXNjcmlwdG9yICpic3MpCiB7CiAJc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqY2ZwOwogCWNoYXIgKmN1cnJlbnRfdmFsOwkvKiBGb3IgcmF0ZXMgKi8KQEAgLTgwMSwyNCArODAyLDI0IEBACiAJaXdlLmNtZCA9IFNJT0NHSVdBUDsKIAlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCAmYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKwlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CiAKIAkvKiBTU0lEICovCiAJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKIAlpd2UudS5kYXRhLmZsYWdzID0gMTsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IG1pbigodWludDMyX3QpIGJzcy0+c3NpZF9sZW4sICh1aW50MzJfdCkgSVdfRVNTSURfTUFYX1NJWkUpOwotCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsIGJzcy0+c3NpZCk7CisJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnNzLT5zc2lkKTsKIAogCS8qIE1vZGUgKi8KIAlpd2UuY21kID0gU0lPQ0dJV01PREU7CiAJaXdlLnUubW9kZSA9IGJzcy0+bW9kZTsKLQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwogCiAJLyogRnJlcXVlbmN5ICovCiAJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwogCWl3ZS51LmZyZXEubSA9IChsb25nKWNmcC0+ZnJlcSAqIDEwMDAwMDsKIAlpd2UudS5mcmVxLmUgPSAxOwotCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKwlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CiAKIAkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzICovCiAJaXdlLmNtZCA9IElXRVZRVUFMOwpAQCAtODUyLDcgKzg1Myw3IEBACiAJCW5mID0gcHJpdi0+TkZbVFlQRV9SWFBEXVtUWVBFX0FWR10gLyBBVkdfU0NBTEU7CiAJCWl3ZS51LnF1YWwubGV2ZWwgPSBDQUxfUlNTSShzbnIsIG5mKTsKIAl9Ci0Jc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKIAogCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKQEAgLTg2Miw5ICs4NjMsOSBAQAogCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwogCX0KIAlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0Jc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgYnNzLT5zc2lkKTsKKwlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBic3MtPnNzaWQpOwogCi0JY3VycmVudF92YWwgPSBzdGFydCArIElXX0VWX0xDUF9MRU47CisJY3VycmVudF92YWwgPSBzdGFydCArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKIAogCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKIAlpd2UudS5iaXRyYXRlLmZpeGVkID0gMDsKQEAgLTg3NCwxOSArODc1LDE5IEBACiAJZm9yIChqID0gMDsgYnNzLT5yYXRlc1tqXSAmJiAoaiA8IHNpemVvZihic3MtPnJhdGVzKSk7IGorKykgewogCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAqLwogCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gYnNzLT5yYXRlc1tqXSAqIDUwMDAwMDsKLQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShzdGFydCwgY3VycmVudF92YWwsCi0JCQkJCSBzdG9wLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOworCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIHN0YXJ0LCBjdXJyZW50X3ZhbCwKKwkJCQkJCSAgIHN0b3AsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CiAJfQogCWlmICgoYnNzLT5tb2RlID09IElXX01PREVfQURIT0MpICYmIHByaXYtPmFkaG9jY3JlYXRlCiAJICAgICYmICFsYnNfc3NpZF9jbXAocHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWQsCiAJCQkgICAgIHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbiwKIAkJCSAgICAgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSkgewogCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gMjIgKiA1MDAwMDA7Ci0JCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoc3RhcnQsIGN1cnJlbnRfdmFsLAorCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIHN0YXJ0LCBjdXJyZW50X3ZhbCwKIAkJCQkJCSAgIHN0b3AsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CiAJfQogCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLwotCWlmKChjdXJyZW50X3ZhbCAtIHN0YXJ0KSA+IElXX0VWX0xDUF9MRU4pCisJaWYgKChjdXJyZW50X3ZhbCAtIHN0YXJ0KSA+IGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkKIAkJc3RhcnQgPSBjdXJyZW50X3ZhbDsKIAogCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CkBAIC04OTUsNyArODk2LDcgQEAKIAkJbWVtY3B5KGJ1ZiwgYnNzLT53cGFfaWUsIGJzcy0+d3BhX2llX2xlbik7CiAJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT53cGFfaWVfbGVuOwotCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOworCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwogCX0KIAogCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CkBAIC05MDQsNyArOTA1LDcgQEAKIAkJbWVtY3B5KGJ1ZiwgYnNzLT5yc25faWUsIGJzcy0+cnNuX2llX2xlbik7CiAJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT5yc25faWVfbGVuOwotCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOworCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwogCX0KIAogCWlmIChic3MtPm1lc2gpIHsKQEAgLTkxNSw3ICs5MTYsOCBAQAogCQlwICs9IHNucHJpbnRmKHAsIE1BWF9DVVNUT01fTEVOLCAibWVzaC10eXBlOiBvbHBjIik7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gcCAtIGN1c3RvbTsKIAkJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQkJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgY3VzdG9tKTsKKwkJCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsCisJCQkJCQkgICAgICZpd2UsIGN1c3RvbSk7CiAJfQogCiBvdXQ6CkBAIC0xMDM2LDcgKzEwMzgsNyBAQAogCQl9CiAKIAkJLyogVHJhbnNsYXRlIHRvIFdFIGZvcm1hdCB0aGlzIGVudHJ5ICovCi0JCW5leHRfZXYgPSBsYnNfdHJhbnNsYXRlX3NjYW4ocHJpdiwgZXYsIHN0b3AsIGl0ZXJfYnNzKTsKKwkJbmV4dF9ldiA9IGxic190cmFuc2xhdGVfc2Nhbihwcml2LCBpbmZvLCBldiwgc3RvcCwgaXRlcl9ic3MpOwogCQlpZiAobmV4dF9ldiA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCWV2ID0gbmV4dF9ldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R5cGVzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eXBlcy5oCmluZGV4IDQwMzFiZTQuLmUwYzI1OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R5cGVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHlwZXMuaApAQCAtNiw2ICs2LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogCiBzdHJ1Y3QgaWVlZXR5cGVzX2NmcGFyYW1zZXQgewogCXU4IGVsZW1lbnRpZDsKQEAgLTI1Miw0ICsyNTQsMzIgQEAKIAlzdHJ1Y3QgbGVkX2JodiBsZWRiaHZbMV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogTWVhbnQgdG8gYmUgcGFja2VkIGFzIHRoZSB2YWx1ZSBtZW1iZXIgb2YgYSBzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudC4KKyAqIE5vdGUgdGhhdCB0aGUgbGVuIG1lbWJlciBvZiB0aGUgaWVlZTgwMjExX2luZm9fZWxlbWVudCB2YXJpZXMgZGVwZW5kaW5nIG9uCisgKiB0aGUgbWVzaF9pZF9sZW4gKi8KK3N0cnVjdCBtcnZsX21lc2hpZV92YWwgeworCXVpbnQ4X3Qgb3VpW1A4MDIxMV9PVUlfTEVOXTsKKwl1aW50OF90IHR5cGU7CisJdWludDhfdCBzdWJ0eXBlOworCXVpbnQ4X3QgdmVyc2lvbjsKKwl1aW50OF90IGFjdGl2ZV9wcm90b2NvbF9pZDsKKwl1aW50OF90IGFjdGl2ZV9tZXRyaWNfaWQ7CisJdWludDhfdCBtZXNoX2NhcGFiaWxpdHk7CisJdWludDhfdCBtZXNoX2lkX2xlbjsKKwl1aW50OF90IG1lc2hfaWRbSVdfRVNTSURfTUFYX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtcnZsX21lc2hpZSB7CisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaGRyOworCXN0cnVjdCBtcnZsX21lc2hpZV92YWwgdmFsOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtcnZsX21lc2hfZGVmYXVsdHMgeworCV9fbGUzMiBib290ZmxhZzsKKwl1aW50OF90IGJvb3R0aW1lOworCXVpbnQ4X3QgcmVzZXJ2ZWQ7CisJX19sZTE2IGNoYW5uZWw7CisJc3RydWN0IG1ydmxfbWVzaGllIG1lc2hpZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwppbmRleCAwOTczZDAxLi44YjNlZDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCkBAIC0xMDAyLDcgKzEwMDIsNyBAQAogCQllbHNlIGlmIChwcml2LT5tb2RlID09IElXX01PREVfQURIT0MpCiAJCQlsYnNfc3RvcF9hZGhvY19uZXR3b3JrKHByaXYpOwogCX0KLQlsYnNfbWVzaF9jb25maWcocHJpdiwgMSwgZndycS0+bSk7CisJbGJzX21lc2hfY29uZmlnKHByaXYsIENNRF9BQ1RfTUVTSF9DT05GSUdfU1RBUlQsIGZ3cnEtPm0pOwogCWxic191cGRhdGVfY2hhbm5lbChwcml2KTsKIAlyZXQgPSAwOwogCkBAIC0xMDIxLDI5ICsxMDIxLDM4IEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CiAJbGJzX2RlYl93ZXh0KCJ2d3JxLT52YWx1ZSAlZFxuIiwgdndycS0+dmFsdWUpOworCWxic19kZWJfd2V4dCgidndycS0+Zml4ZWQgJWRcbiIsIHZ3cnEtPmZpeGVkKTsKKworCWlmICh2d3JxLT5maXhlZCAmJiB2d3JxLT52YWx1ZSA9PSAtMSkKKwkJZ290byBvdXQ7CiAKIAkvKiBBdXRvIHJhdGU/ICovCi0JaWYgKHZ3cnEtPnZhbHVlID09IC0xKSB7Ci0JCXByaXYtPmF1dG9fcmF0ZSA9IDE7CisJcHJpdi0+ZW5hYmxlaHdhdXRvID0gIXZ3cnEtPmZpeGVkOworCisJaWYgKHZ3cnEtPnZhbHVlID09IC0xKQogCQlwcml2LT5jdXJfcmF0ZSA9IDA7Ci0JfSBlbHNlIHsKKwllbHNlIHsKIAkJaWYgKHZ3cnEtPnZhbHVlICUgMTAwMDAwKQogCQkJZ290byBvdXQ7CiAKKwkJbmV3X3JhdGUgPSB2d3JxLT52YWx1ZSAvIDUwMDAwMDsKKwkJcHJpdi0+Y3VyX3JhdGUgPSBuZXdfcmF0ZTsKKwkJLyogdGhlIHJlc3QgaXMgb25seSBuZWVkZWQgZm9yIGxic19zZXRfZGF0YV9yYXRlKCkgKi8KIAkJbWVtc2V0KHJhdGVzLCAwLCBzaXplb2YocmF0ZXMpKTsKIAkJY29weV9hY3RpdmVfZGF0YV9yYXRlcyhwcml2LCByYXRlcyk7Ci0JCW5ld19yYXRlID0gdndycS0+dmFsdWUgLyA1MDAwMDA7CiAJCWlmICghbWVtY2hyKHJhdGVzLCBuZXdfcmF0ZSwgc2l6ZW9mKHJhdGVzKSkpIHsKIAkJCWxic19wcl9hbGVydCgiZml4ZWQgZGF0YSByYXRlIDB4JVggb3V0IG9mIHJhbmdlXG4iLAogCQkJCW5ld19yYXRlKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0KLQkJcHJpdi0+Y3VyX3JhdGUgPSBuZXdfcmF0ZTsKLQkJcHJpdi0+YXV0b19yYXRlID0gMDsKIAl9CiAKLQlyZXQgPSBsYnNfc2V0X2RhdGFfcmF0ZShwcml2LCBuZXdfcmF0ZSk7CisJLyogVHJ5IHRoZSBuZXdlciBjb21tYW5kIGZpcnN0IChGaXJtd2FyZSBTcGVjIDUuMSBhbmQgYWJvdmUpICovCisJcmV0ID0gbGJzX2NtZF84MDJfMTFfcmF0ZV9hZGFwdF9yYXRlc2V0KHByaXYsIENNRF9BQ1RfU0VUKTsKKworCS8qIEZhbGxiYWNrIHRvIG9sZGVyIHZlcnNpb24gKi8KKwlpZiAocmV0KQorCQlyZXQgPSBsYnNfc2V0X2RhdGFfcmF0ZShwcml2LCBuZXdfcmF0ZSk7CiAKIG91dDoKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKQEAgLTEwNjAsNyArMTA2OSw3IEBACiAJaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHsKIAkJdndycS0+dmFsdWUgPSBwcml2LT5jdXJfcmF0ZSAqIDUwMDAwMDsKIAotCQlpZiAocHJpdi0+YXV0b19yYXRlKQorCQlpZiAocHJpdi0+ZW5hYmxlaHdhdXRvKQogCQkJdndycS0+Zml4ZWQgPSAwOwogCQllbHNlCiAJCQl2d3JxLT5maXhlZCA9IDE7CkBAIC0yMDExLDcgKzIwMjAsOCBAQAogCQlwcml2LT5tZXNoX3NzaWRfbGVuID0gZHdycS0+bGVuZ3RoOwogCX0KIAotCWxic19tZXNoX2NvbmZpZyhwcml2LCAxLCBwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCk7CisJbGJzX21lc2hfY29uZmlnKHByaXYsIENNRF9BQ1RfTUVTSF9DT05GSUdfU1RBUlQsCisJCQlwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCk7CiAgb3V0OgogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE2MjMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwpAQCAtMCwwICsxLDUyMSBAQAorLyoKKyAqIG1hYzgwMjExX2h3c2ltIC0gc29mdHdhcmUgc2ltdWxhdG9yIG9mIDgwMi4xMSByYWRpbyhzKSBmb3IgbWFjODAyMTEKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qCisgKiBUT0RPOgorICogLSBJQlNTIG1vZGUgc2ltdWxhdGlvbiAoQmVhY29uIHRyYW5zbWlzc2lvbiB3aXRoIGNvbXBldGl0aW9uIGZvciAiYWlyIHRpbWUiKQorICogLSBJRUVFIDgwMi4xMWEgYW5kIDgwMi4xMW4gbW9kZXMKKyAqIC0gUlggZmlsdGVyaW5nIGJhc2VkIG9uIGZpbHRlciBjb25maWd1cmF0aW9uIChkYXRhLT5yeF9maWx0ZXIpCisgKi8KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFfcmFkaW90YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCitNT0RVTEVfQVVUSE9SKCJKb3VuaSBNYWxpbmVuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvZnR3YXJlIHNpbXVsYXRvciBvZiA4MDIuMTEgcmFkaW8ocykgZm9yIG1hYzgwMjExIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgcmFkaW9zID0gMjsKK21vZHVsZV9wYXJhbShyYWRpb3MsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJhZGlvcywgIk51bWJlciBvZiBzaW11bGF0ZWQgcmFkaW9zIik7CisKKworc3RhdGljIHN0cnVjdCBjbGFzcyAqaHdzaW1fY2xhc3M7CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2h3ICoqaHdzaW1fcmFkaW9zOworc3RhdGljIGludCBod3NpbV9yYWRpb19jb3VudDsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaHdzaW1fbW9uOyAvKiBnbG9iYWwgbW9uaXRvciBuZXRkZXYgKi8KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDIyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDM3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDUyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDYyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDY3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDcyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDg0IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIGh3c2ltX3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwIH0sCisJeyAuYml0cmF0ZSA9IDIwLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSA1NSwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gMTEwLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSA2MCB9LAorCXsgLmJpdHJhdGUgPSA5MCB9LAorCXsgLmJpdHJhdGUgPSAxMjAgfSwKKwl7IC5iaXRyYXRlID0gMTgwIH0sCisJeyAuYml0cmF0ZSA9IDI0MCB9LAorCXsgLmJpdHJhdGUgPSAzNjAgfSwKKwl7IC5iaXRyYXRlID0gNDgwIH0sCisJeyAuYml0cmF0ZSA9IDU0MCB9Cit9OworCitzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNbQVJSQVlfU0laRShod3NpbV9jaGFubmVscyldOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1tBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKV07CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJaW50IHJhZGlvX2VuYWJsZWQ7CisJdW5zaWduZWQgbG9uZyBiZWFjb25faW50OyAvKiBpbiBqaWZmaWVzIHVuaXQgKi8KKwl1bnNpZ25lZCBpbnQgcnhfZmlsdGVyOworCWludCBzdGFydGVkOworCXN0cnVjdCB0aW1lcl9saXN0IGJlYWNvbl90aW1lcjsKK307CisKKworc3RydWN0IGh3c2ltX3JhZGlvdGFwX2hkciB7CisJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgaGRyOworCXU4IHJ0X2ZsYWdzOworCXU4IHJ0X3JhdGU7CisJX19sZTE2IHJ0X2NoYW5uZWw7CisJX19sZTE2IHJ0X2NoYml0bWFzazsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKK3N0YXRpYyBpbnQgaHdzaW1fbW9uX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwkvKiBUT0RPOiBhbGxvdyBwYWNrZXQgaW5qZWN0aW9uICovCisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnR4X3NrYikKK3sKKwlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGh3c2ltX3JhZGlvdGFwX2hkciAqaGRyOworCXUxNiBmbGFnczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4X3NrYik7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICp0eHJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIGluZm8pOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGh3c2ltX21vbikpCisJCXJldHVybjsKKworCXNrYiA9IHNrYl9jb3B5X2V4cGFuZCh0eF9za2IsIHNpemVvZigqaGRyKSwgMCwgR0ZQX0FUT01JQyk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwloZHIgPSAoc3RydWN0IGh3c2ltX3JhZGlvdGFwX2hkciAqKSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7CisJaGRyLT5oZHIuaXRfdmVyc2lvbiA9IFBLVEhEUl9SQURJT1RBUF9WRVJTSU9OOworCWhkci0+aGRyLml0X3BhZCA9IDA7CisJaGRyLT5oZHIuaXRfbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpoZHIpKTsKKwloZHItPmhkci5pdF9wcmVzZW50ID0gY3B1X3RvX2xlMzIoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CisJCQkJCSAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKKwkJCQkJICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCkpOworCWhkci0+cnRfZmxhZ3MgPSAwOworCWhkci0+cnRfcmF0ZSA9IHR4cmF0ZS0+Yml0cmF0ZSAvIDU7CisJaGRyLT5ydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZGF0YS0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCWZsYWdzID0gSUVFRTgwMjExX0NIQU5fMkdIWjsKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUF9HKQorCQlmbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9PRkRNOworCWVsc2UKKwkJZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fQ0NLOworCWhkci0+cnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpOworCisJc2tiLT5kZXYgPSBod3NpbV9tb247CisJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgMCk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOworCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOworCW5ldGlmX3J4KHNrYik7Cit9CisKKworc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctPnByaXY7CisJaW50IGksIGFjayA9IDA7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1czsKKworCW1lbXNldCgmcnhfc3RhdHVzLCAwLCBzaXplb2Yocnhfc3RhdHVzKSk7CisJLyogVE9ETzogc2V0IG1hY3RpbWUgKi8KKwlyeF9zdGF0dXMuZnJlcSA9IGRhdGEtPmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCXJ4X3N0YXR1cy5iYW5kID0gZGF0YS0+Y2hhbm5lbC0+YmFuZDsKKwlyeF9zdGF0dXMucmF0ZV9pZHggPSBpbmZvLT50eF9yYXRlX2lkeDsKKwkvKiBUT0RPOiBzaW11bGF0ZSBzaWduYWwgc3RyZW5ndGggKGFuZCBvcHRpb25hbCBwYWNrZXQgZHJvcCkgKi8KKworCS8qIENvcHkgc2tiIHRvIGFsbCBlbmFibGVkIHJhZGlvcyB0aGF0IGFyZSBvbiB0aGUgY3VycmVudCBmcmVxdWVuY3kgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHdzaW1fcmFkaW9fY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YTI7CisJCXN0cnVjdCBza19idWZmICpuc2tiOworCisJCWlmIChod3NpbV9yYWRpb3NbaV0gPT0gTlVMTCB8fCBod3NpbV9yYWRpb3NbaV0gPT0gaHcpCisJCQljb250aW51ZTsKKwkJZGF0YTIgPSBod3NpbV9yYWRpb3NbaV0tPnByaXY7CisJCWlmICghZGF0YTItPnN0YXJ0ZWQgfHwgIWRhdGEyLT5yYWRpb19lbmFibGVkIHx8CisJCSAgICBkYXRhLT5jaGFubmVsLT5jZW50ZXJfZnJlcSAhPSBkYXRhMi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpCisJCQljb250aW51ZTsKKworCQluc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKG5za2IgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChtZW1jbXAoaGRyLT5hZGRyMSwgaHdzaW1fcmFkaW9zW2ldLT53aXBoeS0+cGVybV9hZGRyLAorCQkJICAgRVRIX0FMRU4pID09IDApCisJCQlhY2sgPSAxOworCQlpZWVlODAyMTFfcnhfaXJxc2FmZShod3NpbV9yYWRpb3NbaV0sIG5za2IsICZyeF9zdGF0dXMpOworCX0KKworCXJldHVybiBhY2s7Cit9CisKKworc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LT5wcml2OworCWludCBhY2s7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGk7CisKKwltYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGh3LCBza2IpOworCisJaWYgKHNrYi0+bGVuIDwgMTApIHsKKwkJLyogU2hvdWxkIG5vdCBoYXBwZW47IGp1c3QgYSBzYW5pdHkgY2hlY2sgZm9yIGFkZHIxIHVzZSAqLworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJaWYgKCFkYXRhLT5yYWRpb19lbmFibGVkKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBUWCBmcmFtZSBzaW5jZSByYWRpbyAiCisJCSAgICAgICAiZGlzYWJsZWRcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlhY2sgPSBtYWM4MDIxMV9od3NpbV90eF9mcmFtZShodywgc2tiKTsKKworCXR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwltZW1zZXQoJnR4aS0+c3RhdHVzLCAwLCBzaXplb2YodHhpLT5zdGF0dXMpKTsKKwlpZiAoISh0eGktPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSB7CisJCWlmIChhY2spCisJCQl0eGktPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJZWxzZQorCQkJdHhpLT5zdGF0dXMuZXhjZXNzaXZlX3JldHJpZXMgPSAxOworCX0KKwlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworCitzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctPnByaXY7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fKTsKKwlkYXRhLT5zdGFydGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctPnByaXY7CisJZGF0YS0+c3RhcnRlZCA9IDA7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fKTsKK30KKworCitzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCXByaW50ayhLRVJOX0RFQlVHICIlczolcyAodHlwZT0lZCBtYWNfYWRkcj0lcylcbiIsCisJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18sIGNvbmYtPnR5cGUsCisJICAgICAgIHByaW50X21hYyhtYWMsIGNvbmYtPm1hY19hZGRyKSk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fcmVtb3ZlX2ludGVyZmFjZSgKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzICh0eXBlPSVkIG1hY19hZGRyPSVzKVxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBfX2Z1bmNfXywgY29uZi0+dHlwZSwKKwkgICAgICAgcHJpbnRfbWFjKG1hYywgY29uZi0+bWFjX2FkZHIpKTsKK30KKworCitzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9iZWFjb25fdHgodm9pZCAqYXJnLCB1OCAqbWFjLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGFyZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKworCWlmICh2aWYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVApCisJCXJldHVybjsKKworCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOworCWlmIChza2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwltYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGh3LCBza2IpOworCW1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lKGh3LCBza2IpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KKworCitzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9iZWFjb24odW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKSBhcmc7CisJc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEgPSBody0+cHJpdjsKKworCWlmICghZGF0YS0+c3RhcnRlZCB8fCAhZGF0YS0+cmFkaW9fZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKAorCQlodywgbWFjODAyMTFfaHdzaW1fYmVhY29uX3R4LCBodyk7CisKKwlkYXRhLT5iZWFjb25fdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBkYXRhLT5iZWFjb25faW50OworCWFkZF90aW1lcigmZGF0YS0+YmVhY29uX3RpbWVyKTsKK30KKworCitzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctPnByaXY7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXMgKGZyZXE9JWQgcmFkaW9fZW5hYmxlZD0lZCBiZWFjb25faW50PSVkKVxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBfX2Z1bmNfXywKKwkgICAgICAgY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEsIGNvbmYtPnJhZGlvX2VuYWJsZWQsCisJICAgICAgIGNvbmYtPmJlYWNvbl9pbnQpOworCisJZGF0YS0+Y2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisJZGF0YS0+cmFkaW9fZW5hYmxlZCA9IGNvbmYtPnJhZGlvX2VuYWJsZWQ7CisJZGF0YS0+YmVhY29uX2ludCA9IDEwMjQgKiBjb25mLT5iZWFjb25faW50IC8gMTAwMCAqIEhaIC8gMTAwMDsKKwlpZiAoZGF0YS0+YmVhY29uX2ludCA8IDEpCisJCWRhdGEtPmJlYWNvbl9pbnQgPSAxOworCisJaWYgKCFkYXRhLT5zdGFydGVkIHx8ICFkYXRhLT5yYWRpb19lbmFibGVkKQorCQlkZWxfdGltZXIoJmRhdGEtPmJlYWNvbl90aW1lcik7CisJZWxzZQorCQltb2RfdGltZXIoJmRhdGEtPmJlYWNvbl90aW1lciwgamlmZmllcyArIGRhdGEtPmJlYWNvbl9pbnQpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCQkJICAgIGludCBtY19jb3VudCwKKwkJCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctPnByaXY7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXNcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18pOworCisJZGF0YS0+cnhfZmlsdGVyID0gMDsKKwlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQorCQlkYXRhLT5yeF9maWx0ZXIgfD0gRklGX1BST01JU0NfSU5fQlNTOworCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCisJCWRhdGEtPnJ4X2ZpbHRlciB8PSBGSUZfQUxMTVVMVEk7CisKKwkqdG90YWxfZmxhZ3MgPSBkYXRhLT5yeF9maWx0ZXI7Cit9CisKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbWFjODAyMTFfaHdzaW1fb3BzID0KK3sKKwkudHggPSBtYWM4MDIxMV9od3NpbV90eCwKKwkuc3RhcnQgPSBtYWM4MDIxMV9od3NpbV9zdGFydCwKKwkuc3RvcCA9IG1hYzgwMjExX2h3c2ltX3N0b3AsCisJLmFkZF9pbnRlcmZhY2UgPSBtYWM4MDIxMV9od3NpbV9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlID0gbWFjODAyMTFfaHdzaW1fcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnID0gbWFjODAyMTFfaHdzaW1fY29uZmlnLAorCS5jb25maWd1cmVfZmlsdGVyID0gbWFjODAyMTFfaHdzaW1fY29uZmlndXJlX2ZpbHRlciwKK307CisKKworc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZnJlZSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGh3c2ltX3JhZGlvX2NvdW50OyBpKyspIHsKKwkJaWYgKGh3c2ltX3JhZGlvc1tpXSkgeworCQkJc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGE7CisJCQlkYXRhID0gaHdzaW1fcmFkaW9zW2ldLT5wcml2OworCQkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHdzaW1fcmFkaW9zW2ldKTsKKwkJCWRldmljZV91bnJlZ2lzdGVyKGRhdGEtPmRldik7CisJCQlpZWVlODAyMTFfZnJlZV9odyhod3NpbV9yYWRpb3NbaV0pOworCQl9CisJfQorCWtmcmVlKGh3c2ltX3JhZGlvcyk7CisJY2xhc3NfZGVzdHJveShod3NpbV9jbGFzcyk7Cit9CisKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1hYzgwMjExX2h3c2ltX2RyaXZlciA9IHsKKwkubmFtZSA9ICJtYWM4MDIxMV9od3NpbSIKK307CisKKworc3RhdGljIHZvaWQgaHdzaW1fbW9uX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBod3NpbV9tb25feG1pdDsKKwlkZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKKwlldGhlcl9zZXR1cChkZXYpOworCWRldi0+dHhfcXVldWVfbGVuID0gMDsKKwlkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOworCW1lbXNldChkZXYtPmRldl9hZGRyLCAwLCBFVEhfQUxFTik7CisJZGV2LT5kZXZfYWRkclswXSA9IDB4MTI7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9tYWM4MDIxMV9od3NpbSh2b2lkKQoreworCWludCBpLCBlcnIgPSAwOworCXU4IGFkZHJbRVRIX0FMRU5dOworCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJaWYgKHJhZGlvcyA8IDEgfHwgcmFkaW9zID4gNjU1MzUpCisJCXJldHVybiAtRUlOVkFMOworCisJaHdzaW1fcmFkaW9fY291bnQgPSByYWRpb3M7CisJaHdzaW1fcmFkaW9zID0ga2NhbGxvYyhod3NpbV9yYWRpb19jb3VudCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odyAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGh3c2ltX3JhZGlvcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWh3c2ltX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAibWFjODAyMTFfaHdzaW0iKTsKKwlpZiAoSVNfRVJSKGh3c2ltX2NsYXNzKSkgeworCQlrZnJlZShod3NpbV9yYWRpb3MpOworCQlyZXR1cm4gUFRSX0VSUihod3NpbV9jbGFzcyk7CisJfQorCisJbWVtc2V0KGFkZHIsIDAsIEVUSF9BTEVOKTsKKwlhZGRyWzBdID0gMHgwMjsKKworCWZvciAoaSA9IDA7IGkgPCBod3NpbV9yYWRpb19jb3VudDsgaSsrKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtYWM4MDIxMV9od3NpbTogSW5pdGlhbGl6aW5nIHJhZGlvICVkXG4iLAorCQkgICAgICAgaSk7CisJCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqZGF0YSksICZtYWM4MDIxMV9od3NpbV9vcHMpOworCQlpZiAoaHcgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1hYzgwMjExX2h3c2ltOiBpZWVlODAyMTFfYWxsb2NfaHcgIgorCQkJICAgICAgICJmYWlsZWRcbiIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCWh3c2ltX3JhZGlvc1tpXSA9IGh3OworCisJCWRhdGEgPSBody0+cHJpdjsKKwkJZGF0YS0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGh3c2ltX2NsYXNzLCBOVUxMLCAwLCBodywKKwkJCQkJCSJod3NpbSVkIiwgaSk7CisJCWlmIChJU19FUlIoZGF0YS0+ZGV2KSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAibWFjODAyMTFfaHdzaW06IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSAiCisJCQkgICAgICAgImZhaWxlZCAoJWxkKVxuIiwgUFRSX0VSUihkYXRhLT5kZXYpKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWxlZF9kcnZkYXRhOworCQl9CisJCWRhdGEtPmRldi0+ZHJpdmVyID0gJm1hYzgwMjExX2h3c2ltX2RyaXZlcjsKKworCQlTRVRfSUVFRTgwMjExX0RFVihodywgZGF0YS0+ZGV2KTsKKwkJYWRkclszXSA9IGkgPj4gODsKKwkJYWRkcls0XSA9IGk7CisJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBhZGRyKTsKKworCQlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDE7CisJCWh3LT5xdWV1ZXMgPSAxOworCisJCW1lbWNweShkYXRhLT5jaGFubmVscywgaHdzaW1fY2hhbm5lbHMsIHNpemVvZihod3NpbV9jaGFubmVscykpOworCQltZW1jcHkoZGF0YS0+cmF0ZXMsIGh3c2ltX3JhdGVzLCBzaXplb2YoaHdzaW1fcmF0ZXMpKTsKKwkJZGF0YS0+YmFuZC5jaGFubmVscyA9IGRhdGEtPmNoYW5uZWxzOworCQlkYXRhLT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzKTsKKwkJZGF0YS0+YmFuZC5iaXRyYXRlcyA9IGRhdGEtPnJhdGVzOworCQlkYXRhLT5iYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKTsKKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZkYXRhLT5iYW5kOworCisJCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAibWFjODAyMTFfaHdzaW06ICIKKwkJCSAgICAgICAiaWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQkJZ290byBmYWlsZWRfaHc7CisJCX0KKworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGh3YWRkciAlcyByZWdpc3RlcmVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAorCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaHctPndpcGh5LT5wZXJtX2FkZHIpKTsKKworCQlzZXR1cF90aW1lcigmZGF0YS0+YmVhY29uX3RpbWVyLCBtYWM4MDIxMV9od3NpbV9iZWFjb24sCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGh3KTsKKwl9CisKKwlod3NpbV9tb24gPSBhbGxvY19uZXRkZXYoMCwgImh3c2ltJWQiLCBod3NpbV9tb25fc2V0dXApOworCWlmIChod3NpbV9tb24gPT0gTlVMTCkKKwkJZ290byBmYWlsZWQ7CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGRldl9hbGxvY19uYW1lKGh3c2ltX21vbiwgaHdzaW1fbW9uLT5uYW1lKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsZWRfbW9uOworCisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoaHdzaW1fbW9uKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsZWRfbW9uOworCisJcnRubF91bmxvY2soKTsKKworCXJldHVybiAwOworCitmYWlsZWRfbW9uOgorCXJ0bmxfdW5sb2NrKCk7CisJZnJlZV9uZXRkZXYoaHdzaW1fbW9uKTsKKwltYWM4MDIxMV9od3NpbV9mcmVlKCk7CisJcmV0dXJuIGVycjsKKworZmFpbGVkX2h3OgorCWRldmljZV91bnJlZ2lzdGVyKGRhdGEtPmRldik7CitmYWlsZWRfZHJ2ZGF0YToKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisJaHdzaW1fcmFkaW9zW2ldID0gMDsKK2ZhaWxlZDoKKwltYWM4MDIxMV9od3NpbV9mcmVlKCk7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9tYWM4MDIxMV9od3NpbSh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJtYWM4MDIxMV9od3NpbTogdW5yZWdpc3RlciAlZCByYWRpb3NcbiIsCisJICAgICAgIGh3c2ltX3JhZGlvX2NvdW50KTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KGh3c2ltX21vbik7CisJbWFjODAyMTFfaHdzaW1fZnJlZSgpOworfQorCisKK21vZHVsZV9pbml0KGluaXRfbWFjODAyMTFfaHdzaW0pOworbW9kdWxlX2V4aXQoZXhpdF9tYWM4MDIxMV9od3NpbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKaW5kZXggNmQxM2EwZC4uYjA0NzMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYwpAQCAtNDA0Niw2ICs0MDQ2LDcgQEAKICAqIGZvcm1hdCB0aGF0IHRoZSBXaXJlbGVzcyBUb29scyB3aWxsIHVuZGVyc3RhbmQgLSBKZWFuIElJCiAgKiBSZXR1cm4gbWVzc2FnZSBsZW5ndGggb3IgLWVycm5vIGZvciBmYXRhbCBlcnJvcnMgKi8KIHN0YXRpYyBpbmxpbmUgY2hhciAqb3Jpbm9jb190cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCQkgICBjaGFyICpjdXJyZW50X2V2LAogCQkJCQkgICBjaGFyICplbmRfYnVmLAogCQkJCQkgICB1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICpic3MsCkBAIC00MDYyLDcgKzQwNjMsOCBAQAogCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CiAJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5hLmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7CiAKIAkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KIApAQCAtNDA3Miw3ICs0MDc0LDggQEAKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKIAlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwogCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBic3MtPmEuZXNzaWQpOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIGJzcy0+YS5lc3NpZCk7CiAKIAkvKiBBZGQgbW9kZSAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKQEAgLTQwODIsNyArNDA4NSw4IEBACiAJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CiAJCWVsc2UKIAkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwogCX0KIAogCWNoYW5uZWwgPSBic3MtPnMuY2hhbm5lbDsKQEAgLTQwOTEsNyArNDA5NSw3IEBACiAJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKIAkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbF9mcmVxdWVuY3lbY2hhbm5lbC0xXSAqIDEwMDAwMDsKIAkJaXdlLnUuZnJlcS5lID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAogCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CiAJfQogCkBAIC00MTA2LDcgKzQxMTAsOCBAQAogCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKIAllbHNlCiAJCWl3ZS51LnF1YWwucXVhbCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9RVUFMX0xFTik7CiAKIAkvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCiAJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CkBAIC00MTE1LDcgKzQxMjAsOCBAQAogCWVsc2UKIAkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGJzcy0+YS5lc3NpZCk7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgYnNzLT5hLmVzc2lkKTsKIAogCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQogCSAqIGZvciBnaXZlbiBuZXR3b3JrLiAqLwpAQCAtNDEyNiwxMSArNDEzMiwxMiBAQAogCQkgICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBsYXN0X3NjYW5uZWQpKTsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207CiAJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgY3VzdG9tKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CiAKIAkvKiBCaXQgcmF0ZSBpcyBub3QgYXZhaWxhYmxlIGluIEx1Y2VudC9BZ2VyZSBmaXJtd2FyZXMgKi8KIAlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSAhPSBGSVJNV0FSRV9UWVBFX0FHRVJFKSB7Ci0JCWNoYXIgKmN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIElXX0VWX0xDUF9MRU47CisJCWNoYXIgKmN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKIAkJaW50IGk7CiAJCWludCBzdGVwOwogCkBAIC00MTQ5LDEyICs0MTU2LDEzIEBACiAJCQkJYnJlYWs7CiAJCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLwogCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgoYnNzLT5wLnJhdGVzW2ldICYgMHg3ZikgKiA1MDAwMDApOwotCQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShjdXJyZW50X2V2LCBjdXJyZW50X3ZhbCwKKwkJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgICBjdXJyZW50X3ZhbCwKIAkJCQkJCQkgICBlbmRfYnVmLCAmaXdlLAogCQkJCQkJCSAgIElXX0VWX1BBUkFNX0xFTik7CiAJCX0KIAkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCi0JCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IElXX0VWX0xDUF9MRU4pCisJCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkKIAkJCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKIAl9CiAKQEAgLTQxOTAsNyArNDE5OCw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CiAJCS8qIFRyYW5zbGF0ZSB0byBXRSBmb3JtYXQgdGhpcyBlbnRyeSAqLwotCQljdXJyZW50X2V2ID0gb3Jpbm9jb190cmFuc2xhdGVfc2NhbihkZXYsIGN1cnJlbnRfZXYsCisJCWN1cnJlbnRfZXYgPSBvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywgY3VycmVudF9ldiwKIAkJCQkJCSAgICBleHRyYSArIHNycS0+bGVuZ3RoLAogCQkJCQkJICAgICZic3MtPmJzcywKIAkJCQkJCSAgICBic3MtPmxhc3Rfc2Nhbm5lZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKaW5kZXggMDZkMmM2Ny4uYzZmMjdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaApAQCAtNjQsNyArNjQsNyBAQAogCXVuc2lnbmVkIGludCB0eF9oZHJfbGVuOwogCXZvaWQgKmNhY2hlZF92ZGNmOwogCXVuc2lnbmVkIGludCBmd192YXI7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0czsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzWzRdOwogfTsKIAogaW50IHA1NF9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCmluZGV4IDYzZjliYWQuLmZmYWY3YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKQEAgLTE0NiwxMCArMTQ2LDEwIEBACiAKIAlpZiAocHJpdi0+ZndfdmFyID49IDB4MzAwKSB7CiAJCS8qIEZpcm13YXJlIHN1cHBvcnRzIFFvUywgdXNlIGl0ISAqLwotCQlwcml2LT50eF9zdGF0cy5kYXRhWzBdLmxpbWl0ID0gMzsKLQkJcHJpdi0+dHhfc3RhdHMuZGF0YVsxXS5saW1pdCA9IDQ7Ci0JCXByaXYtPnR4X3N0YXRzLmRhdGFbMl0ubGltaXQgPSAzOwotCQlwcml2LT50eF9zdGF0cy5kYXRhWzNdLmxpbWl0ID0gMTsKKwkJcHJpdi0+dHhfc3RhdHNbMF0ubGltaXQgPSAzOworCQlwcml2LT50eF9zdGF0c1sxXS5saW1pdCA9IDQ7CisJCXByaXYtPnR4X3N0YXRzWzJdLmxpbWl0ID0gMzsKKwkJcHJpdi0+dHhfc3RhdHNbM10ubGltaXQgPSAxOwogCQlkZXYtPnF1ZXVlcyA9IDQ7CiAJfQogfQpAQCAtMzU1LDggKzM1NSw5IEBACiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0gezB9OwogCXUxNiBmcmVxID0gbGUxNl90b19jcHUoaGRyLT5mcmVxKTsKIAotCXJ4X3N0YXR1cy5zc2kgPSBoZHItPnJzc2k7CisJcnhfc3RhdHVzLnNpZ25hbCA9IGhkci0+cnNzaTsKIAkvKiBYWCBjb3JyZWN0PyAqLworCXJ4X3N0YXR1cy5xdWFsID0gKDEwMCAqIGhkci0+cnNzaSkgLyAxMjc7CiAJcnhfc3RhdHVzLnJhdGVfaWR4ID0gaGRyLT5yYXRlICYgMHhmOwogCXJ4X3N0YXR1cy5mcmVxID0gZnJlcTsKIAlyeF9zdGF0dXMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CkBAIC0zNzUsMTEgKzM3Niw4IEBACiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJaW50IGk7CiAKLQkvKiBpZWVlODAyMTFfc3RhcnRfcXVldWVzIGlzIGdyZWF0IGlmIGFsbCBxdWV1ZXMgYXJlIHJlYWxseSBlbXB0eS4KLQkgKiBCdXQsIHdoYXQgaWYgc29tZSBhcmUgZnVsbD8gKi8KLQogCWZvciAoaSA9IDA7IGkgPCBkZXYtPnF1ZXVlczsgaSsrKQotCQlpZiAocHJpdi0+dHhfc3RhdHMuZGF0YVtpXS5sZW4gPCBwcml2LT50eF9zdGF0cy5kYXRhW2ldLmxpbWl0KQorCQlpZiAocHJpdi0+dHhfc3RhdHNbaV0ubGVuIDwgcHJpdi0+dHhfc3RhdHNbaV0ubGltaXQpCiAJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShkZXYsIGkpOwogfQogCkBAIC0zOTUsNDUgKzM5Myw0MiBAQAogCXUzMiBsYXN0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKIAogCXdoaWxlIChlbnRyeSAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKLQkJcmFuZ2UgPSAoc3RydWN0IG1lbXJlY29yZCAqKSZlbnRyeS0+Y2I7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnkpOworCQlyYW5nZSA9ICh2b2lkICopaW5mby0+ZHJpdmVyX2RhdGE7CiAJCWlmIChyYW5nZS0+c3RhcnRfYWRkciA9PSBhZGRyKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXM7CiAJCQlzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICplbnRyeV9oZHI7CiAJCQlzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfYWxsb2NkYXRhICplbnRyeV9kYXRhOwogCQkJaW50IHBhZCA9IDA7CiAKLQkJCWlmIChlbnRyeS0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpCi0JCQkJZnJlZWQgPSAoKHN0cnVjdCBtZW1yZWNvcmQgKikmZW50cnktPm5leHQtPmNiKS0+c3RhcnRfYWRkciAtIGxhc3RfYWRkcjsKLQkJCWVsc2UKKwkJCWlmIChlbnRyeS0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5pOworCQkJCXN0cnVjdCBtZW1yZWNvcmQgKm1yOworCisJCQkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5uZXh0KTsKKwkJCQltciA9IChzdHJ1Y3QgbWVtcmVjb3JkICopbmktPmRyaXZlcl9kYXRhOworCQkJCWZyZWVkID0gbXItPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7CisJCQl9IGVsc2UKIAkJCQlmcmVlZCA9IHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkcjsKIAogCQkJbGFzdF9hZGRyID0gcmFuZ2UtPmVuZF9hZGRyOwogCQkJX19za2JfdW5saW5rKGVudHJ5LCAmcHJpdi0+dHhfcXVldWUpOwotCQkJaWYgKCFyYW5nZS0+Y29udHJvbCkgewotCQkJCWtmcmVlX3NrYihlbnRyeSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltZW1zZXQoJnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpOwotCQkJbWVtY3B5KCZzdGF0dXMuY29udHJvbCwgcmFuZ2UtPmNvbnRyb2wsCi0JCQkgICAgICAgc2l6ZW9mKHN0YXR1cy5jb250cm9sKSk7Ci0JCQlrZnJlZShyYW5nZS0+Y29udHJvbCk7Ci0JCQlwcml2LT50eF9zdGF0cy5kYXRhW3N0YXR1cy5jb250cm9sLnF1ZXVlXS5sZW4tLTsKLQorCQkJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKwkJCXByaXYtPnR4X3N0YXRzW3NrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpXS5sZW4tLTsKIAkJCWVudHJ5X2hkciA9IChzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICopIGVudHJ5LT5kYXRhOwogCQkJZW50cnlfZGF0YSA9IChzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfYWxsb2NkYXRhICopIGVudHJ5X2hkci0+ZGF0YTsKIAkJCWlmICgoZW50cnlfaGRyLT5tYWdpYzEgJiBjcHVfdG9fbGUxNigweDQwMDApKSAhPSAwKQogCQkJCXBhZCA9IGVudHJ5X2RhdGEtPmFsaWduWzBdOwogCi0JCQlpZiAoIShzdGF0dXMuY29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spKSB7CisJCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgewogCQkJCWlmICghKHBheWxvYWQtPnN0YXR1cyAmIDB4MDEpKQotCQkJCQlzdGF0dXMuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7CisJCQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAkJCQllbHNlCi0JCQkJCXN0YXR1cy5leGNlc3NpdmVfcmV0cmllcyA9IDE7CisJCQkJCWluZm8tPnN0YXR1cy5leGNlc3NpdmVfcmV0cmllcyA9IDE7CiAJCQl9Ci0JCQlzdGF0dXMucmV0cnlfY291bnQgPSBwYXlsb2FkLT5yZXRyaWVzIC0gMTsKLQkJCXN0YXR1cy5hY2tfc2lnbmFsID0gbGUxNl90b19jcHUocGF5bG9hZC0+YWNrX3Jzc2kpOworCQkJaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50ID0gcGF5bG9hZC0+cmV0cmllcyAtIDE7CisJCQlpbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IGxlMTZfdG9fY3B1KHBheWxvYWQtPmFja19yc3NpKTsKIAkJCXNrYl9wdWxsKGVudHJ5LCBzaXplb2YoKmhkcikgKyBwYWQgKyBzaXplb2YoKmVudHJ5X2RhdGEpKTsKLQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYsIGVudHJ5LCAmc3RhdHVzKTsKKwkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYsIGVudHJ5KTsKIAkJCWJyZWFrOwogCQl9IGVsc2UKIAkJCWxhc3RfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKQEAgLTQ5OCwxMyArNDkzLDExIEBACiAgKiBhbGxvY2F0ZWQgYXJlYXMuCiAgKi8KIHN0YXRpYyB2b2lkIHA1NF9hc3NpZ25fYWRkcmVzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgc3RydWN0IHA1NF9jb250cm9sX2hkciAqZGF0YSwgdTMyIGxlbiwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCisJCQkgICAgICAgc3RydWN0IHA1NF9jb250cm9sX2hkciAqZGF0YSwgdTMyIGxlbikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnkgPSBwcml2LT50eF9xdWV1ZS5uZXh0OwogCXN0cnVjdCBza19idWZmICp0YXJnZXRfc2tiID0gTlVMTDsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZTsKIAl1MzIgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CiAJdTMyIGxhcmdlc3RfaG9sZSA9IDA7CiAJdTMyIHRhcmdldF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CkBAIC01MTYsNyArNTA5LDggQEAKIAlsZWZ0ID0gc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfcXVldWUpOwogCXdoaWxlIChsZWZ0LS0pIHsKIAkJdTMyIGhvbGVfc2l6ZTsKLQkJcmFuZ2UgPSAoc3RydWN0IG1lbXJlY29yZCAqKSZlbnRyeS0+Y2I7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnkpOworCQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZSA9ICh2b2lkICopaW5mby0+ZHJpdmVyX2RhdGE7CiAJCWhvbGVfc2l6ZSA9IHJhbmdlLT5zdGFydF9hZGRyIC0gbGFzdF9hZGRyOwogCQlpZiAoIXRhcmdldF9za2IgJiYgaG9sZV9zaXplID49IGxlbikgewogCQkJdGFyZ2V0X3NrYiA9IGVudHJ5LT5wcmV2OwpAQCAtNTMxLDE3ICs1MjUsMTggQEAKIAkJdGFyZ2V0X3NrYiA9IHByaXYtPnR4X3F1ZXVlLnByZXY7CiAJCWxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkciAtIGxlbik7CiAJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwcml2LT50eF9xdWV1ZSkpIHsKLQkJCXJhbmdlID0gKHN0cnVjdCBtZW1yZWNvcmQgKikmdGFyZ2V0X3NrYi0+Y2I7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHRhcmdldF9za2IpOworCQkJc3RydWN0IG1lbXJlY29yZCAqcmFuZ2UgPSAodm9pZCAqKWluZm8tPmRyaXZlcl9kYXRhOwogCQkJdGFyZ2V0X2FkZHIgPSByYW5nZS0+ZW5kX2FkZHI7CiAJCX0KIAl9IGVsc2UKIAkJbGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgcHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyKTsKIAogCWlmIChza2IpIHsKLQkJcmFuZ2UgPSAoc3RydWN0IG1lbXJlY29yZCAqKSZza2ItPmNiOworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCXN0cnVjdCBtZW1yZWNvcmQgKnJhbmdlID0gKHZvaWQgKilpbmZvLT5kcml2ZXJfZGF0YTsKIAkJcmFuZ2UtPnN0YXJ0X2FkZHIgPSB0YXJnZXRfYWRkcjsKIAkJcmFuZ2UtPmVuZF9hZGRyID0gdGFyZ2V0X2FkZHIgKyBsZW47Ci0JCXJhbmdlLT5jb250cm9sID0gY29udHJvbDsKIAkJX19za2JfcXVldWVfYWZ0ZXIoJnByaXYtPnR4X3F1ZXVlLCB0YXJnZXRfc2tiLCBza2IpOwogCQlpZiAobGFyZ2VzdF9ob2xlIDwgSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEICsgMHgxNzAgKwogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyKSkKQEAgLTU1MiwzMiArNTQ3LDI3IEBACiAJZGF0YS0+cmVxX2lkID0gY3B1X3RvX2xlMzIodGFyZ2V0X2FkZHIgKyAweDcwKTsKIH0KIAotc3RhdGljIGludCBwNTRfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKK3N0YXRpYyBpbnQgcDU0X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzX2RhdGEgKmN1cnJlbnRfcXVldWU7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKmN1cnJlbnRfcXVldWU7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyOwogCXN0cnVjdCBwNTRfdHhfY29udHJvbF9hbGxvY2RhdGEgKnR4aGRyOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbF9jb3B5OwogCXNpemVfdCBwYWRkaW5nLCBsZW47CiAJdTggcmF0ZTsKIAotCWN1cnJlbnRfcXVldWUgPSAmcHJpdi0+dHhfc3RhdHMuZGF0YVtjb250cm9sLT5xdWV1ZV07CisJY3VycmVudF9xdWV1ZSA9ICZwcml2LT50eF9zdGF0c1tza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07CiAJaWYgKHVubGlrZWx5KGN1cnJlbnRfcXVldWUtPmxlbiA+IGN1cnJlbnRfcXVldWUtPmxpbWl0KSkKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCWN1cnJlbnRfcXVldWUtPmxlbisrOwogCWN1cnJlbnRfcXVldWUtPmNvdW50Kys7CiAJaWYgKGN1cnJlbnRfcXVldWUtPmxlbiA9PSBjdXJyZW50X3F1ZXVlLT5saW1pdCkKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LCBjb250cm9sLT5xdWV1ZSk7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCiAJcGFkZGluZyA9ICh1bnNpZ25lZCBsb25nKShza2ItPmRhdGEgLSAoc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCp0eGhkcikpKSAmIDM7CiAJbGVuID0gc2tiLT5sZW47CiAKLQljb250cm9sX2NvcHkgPSBrbWFsbG9jKHNpemVvZigqY29udHJvbCksIEdGUF9BVE9NSUMpOwotCWlmIChjb250cm9sX2NvcHkpCi0JCW1lbWNweShjb250cm9sX2NvcHksIGNvbnRyb2wsIHNpemVvZigqY29udHJvbCkpOwotCiAJdHhoZHIgPSAoc3RydWN0IHA1NF90eF9jb250cm9sX2FsbG9jZGF0YSAqKQogCQkJc2tiX3B1c2goc2tiLCBzaXplb2YoKnR4aGRyKSArIHBhZGRpbmcpOwogCWhkciA9IChzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKQEAgLTU4NywzNSArNTc3LDM3IEBACiAJZWxzZQogCQloZHItPm1hZ2ljMSA9IGNwdV90b19sZTE2KDB4MDAxMCk7CiAJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOwotCWhkci0+dHlwZSA9IChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spID8gMCA6IGNwdV90b19sZTE2KDEpOwotCWhkci0+cmV0cnkxID0gaGRyLT5yZXRyeTIgPSBjb250cm9sLT5yZXRyeV9saW1pdDsKLQlwNTRfYXNzaWduX2FkZHJlc3MoZGV2LCBza2IsIGhkciwgc2tiLT5sZW4sIGNvbnRyb2xfY29weSk7CisJaGRyLT50eXBlID0gKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spID8gMCA6IGNwdV90b19sZTE2KDEpOworCWhkci0+cmV0cnkxID0gaGRyLT5yZXRyeTIgPSBpbmZvLT5jb250cm9sLnJldHJ5X2xpbWl0OwogCiAJbWVtc2V0KHR4aGRyLT53ZXBfa2V5LCAweDAsIDE2KTsKIAl0eGhkci0+cGFkZGluZyA9IDA7CiAJdHhoZHItPnBhZGRpbmcyID0gMDsKIAogCS8qIFRPRE86IGFkZCBzdXBwb3J0IGZvciBhbHRlcm5hdGUgcmV0cnkgVFggcmF0ZXMgKi8KLQlyYXRlID0gY29udHJvbC0+dHhfcmF0ZS0+aHdfdmFsdWU7Ci0JaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1NIT1JUX1BSRUFNQkxFKQorCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LCBpbmZvKS0+aHdfdmFsdWU7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TSE9SVF9QUkVBTUJMRSkKIAkJcmF0ZSB8PSAweDEwOwotCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9SVFNfQ1RTKQogCQlyYXRlIHw9IDB4NDA7Ci0JZWxzZSBpZiAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX0NUU19QUk9URUNUKQorCWVsc2UgaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfQ1RTX1BST1RFQ1QpCiAJCXJhdGUgfD0gMHgyMDsKIAltZW1zZXQodHhoZHItPnJhdGVzZXQsIHJhdGUsIDgpOwogCXR4aGRyLT53ZXBfa2V5X3ByZXNlbnQgPSAwOwogCXR4aGRyLT53ZXBfa2V5X2xlbiA9IDA7Ci0JdHhoZHItPmZyYW1lX3R5cGUgPSBjcHVfdG9fbGUzMihjb250cm9sLT5xdWV1ZSArIDQpOworCXR4aGRyLT5mcmFtZV90eXBlID0gY3B1X3RvX2xlMzIoc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikgKyA0KTsKIAl0eGhkci0+bWFnaWM0ID0gMDsKLQl0eGhkci0+YW50ZW5uYSA9IChjb250cm9sLT5hbnRlbm5hX3NlbF90eCA9PSAwKSA/Ci0JCTIgOiBjb250cm9sLT5hbnRlbm5hX3NlbF90eCAtIDE7CisJdHhoZHItPmFudGVubmEgPSAoaW5mby0+YW50ZW5uYV9zZWxfdHggPT0gMCkgPworCQkyIDogaW5mby0+YW50ZW5uYV9zZWxfdHggLSAxOwogCXR4aGRyLT5vdXRwdXRfcG93ZXIgPSAweDdmOyAvLyBIVyBNYXhpbXVtCi0JdHhoZHItPm1hZ2ljNSA9IChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spID8KKwl0eGhkci0+bWFnaWM1ID0gKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spID8KIAkJMCA6ICgocmF0ZSA+IDB4MykgPyBjcHVfdG9fbGUzMigweDMzKSA6IGNwdV90b19sZTMyKDB4MjMpKTsKIAlpZiAocGFkZGluZykKIAkJdHhoZHItPmFsaWduWzBdID0gcGFkZGluZzsKIAorCS8qIG1vZGlmaWVzIHNrYi0+Y2IgYW5kIHdpdGggaXQgaW5mbywgc28gbXVzdCBiZSBsYXN0ISAqLworCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIHNrYiwgaGRyLCBza2ItPmxlbik7CisKIAlwcml2LT50eChkZXYsIGhkciwgc2tiLT5sZW4sIDApOwogCXJldHVybiAwOwogfQpAQCAtNjM4LDcgKzYzMCw3IEBACiAJZmlsdGVyID0gKHN0cnVjdCBwNTRfdHhfY29udHJvbF9maWx0ZXIgKikgaGRyLT5kYXRhOwogCWhkci0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHg4MDAxKTsKIAloZHItPmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqZmlsdGVyKSk7Ci0JcDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgTlVMTCwgaGRyLCBzaXplb2YoKmhkcikgKyBzaXplb2YoKmZpbHRlciksIE5VTEwpOworCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIE5VTEwsIGhkciwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCpmaWx0ZXIpKTsKIAloZHItPnR5cGUgPSBjcHVfdG9fbGUxNihQNTRfQ09OVFJPTF9UWVBFX0ZJTFRFUl9TRVQpOwogCiAJZmlsdGVyLT5maWx0ZXJfdHlwZSA9IGNwdV90b19sZTE2KGZpbHRlcl90eXBlKTsKQEAgLTY4Miw3ICs2NzQsNyBAQAogCWhkci0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHg4MDAxKTsKIAloZHItPmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqY2hhbikpOwogCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KFA1NF9DT05UUk9MX1RZUEVfQ0hBTk5FTF9DSEFOR0UpOwotCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIE5VTEwsIGhkciwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4sIE5VTEwpOworCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIE5VTEwsIGhkciwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pOwogCiAJY2hhbi0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHgxKTsKIAljaGFuLT5tYWdpYzIgPSBjcHVfdG9fbGUxNigweDApOwpAQCAtNzU1LDcgKzc0Nyw3IEBACiAJaGRyLT5tYWdpYzEgPSBjcHVfdG9fbGUxNigweDgwMDEpOwogCWhkci0+bGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpsZWQpKTsKIAloZHItPnR5cGUgPSBjcHVfdG9fbGUxNihQNTRfQ09OVFJPTF9UWVBFX0xFRCk7Ci0JcDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgTlVMTCwgaGRyLCBzaXplb2YoKmhkcikgKyBzaXplb2YoKmxlZCksIE5VTEwpOworCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIE5VTEwsIGhkciwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCpsZWQpKTsKIAogCWxlZCA9IChzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfbGVkICopIGhkci0+ZGF0YTsKIAlsZWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKQEAgLTgwNSw3ICs3OTcsNyBAQAogCiAJaGRyID0gKHZvaWQgKilwcml2LT5jYWNoZWRfdmRjZiArIHByaXYtPnR4X2hkcl9sZW47CiAKLQlwNTRfYXNzaWduX2FkZHJlc3MoZGV2LCBOVUxMLCBoZHIsIHNpemVvZigqaGRyKSArIHNpemVvZigqdmRjZiksIE5VTEwpOworCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIE5VTEwsIGhkciwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCp2ZGNmKSk7CiAKIAl2ZGNmID0gKHN0cnVjdCBwNTRfdHhfY29udHJvbF92ZGNmICopIGhkci0+ZGF0YTsKIApAQCAtODQxLDEyICs4MzMsOCBAQAogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+dHhfcXVldWUpKSkgewotCQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZSA9IChzdHJ1Y3QgbWVtcmVjb3JkICopJnNrYi0+Y2I7Ci0JCWlmIChyYW5nZS0+Y29udHJvbCkKLQkJCWtmcmVlKHJhbmdlLT5jb250cm9sKTsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT50eF9xdWV1ZSkpKQogCQlrZnJlZV9za2Ioc2tiKTsKLQl9CiAJcHJpdi0+c3RvcChkZXYpOwogCXByaXYtPm1vZGUgPSBJRUVFODAyMTFfSUZfVFlQRV9JTlZBTElEOwogfQpAQCAtOTM2LDcgKzkyNCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHA1NF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IHF1ZXVlLAorc3RhdGljIGludCBwNTRfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUxNiBxdWV1ZSwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CkBAIC05NDUsNyArOTMzLDcgQEAKIAl2ZGNmID0gKHN0cnVjdCBwNTRfdHhfY29udHJvbF92ZGNmICopKCgoc3RydWN0IHA1NF9jb250cm9sX2hkciAqKQogCQkoKHZvaWQgKilwcml2LT5jYWNoZWRfdmRjZiArIHByaXYtPnR4X2hkcl9sZW4pKS0+ZGF0YSk7CiAKLQlpZiAoKHBhcmFtcykgJiYgISgocXVldWUgPCAwKSB8fCAocXVldWUgPiA0KSkpIHsKKwlpZiAoKHBhcmFtcykgJiYgIShxdWV1ZSA+IDQpKSB7CiAJCVA1NF9TRVRfUVVFVUUodmRjZi0+cXVldWVbcXVldWVdLCBwYXJhbXMtPmFpZnMsCiAJCQlwYXJhbXMtPmN3X21pbiwgcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+dHhvcCk7CiAJfSBlbHNlCkBAIC05NjcsMTEgKzk1NSw4IEBACiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5xdWV1ZXM7IGkrKykKLQkJbWVtY3B5KCZzdGF0cy0+ZGF0YVtpXSwgJnByaXYtPnR4X3N0YXRzLmRhdGFbaV0sCi0JCQlzaXplb2Yoc3RhdHMtPmRhdGFbaV0pKTsKKwltZW1jcHkoc3RhdHMsICZwcml2LT50eF9zdGF0cywgc2l6ZW9mKHN0YXRzWzBdKSAqIGRldi0+cXVldWVzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAwNCwxMSArOTg5LDEyIEBACiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfcXVldWUpOwogCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmJhbmRfMkdIejsKIAlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8IC8qIG5vdCBzdXJlICovCi0JCSAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOworCQkgICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDOwogCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CS8qIFRPRE86IGZpbmQgYWN0dWFsIHZhbHVlICovCi0JZGV2LT5tYXhfcnNzaSA9IDEyNzsKKwlkZXYtPm1heF9zaWduYWwgPSAxMjc7CiAKLQlwcml2LT50eF9zdGF0cy5kYXRhWzBdLmxpbWl0ID0gNTsKKwlwcml2LT50eF9zdGF0c1swXS5saW1pdCA9IDU7CiAJZGV2LT5xdWV1ZXMgPSAxOwogCiAJZGV2LT5leHRyYV90eF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyKSArIDQgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCmluZGV4IGMxNWI1NmUuLjIyNDVmY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKQEAgLTE1Miw3ICsxNTIsNiBAQAogc3RydWN0IG1lbXJlY29yZCB7CiAJdTMyIHN0YXJ0X2FkZHI7CiAJdTMyIGVuZF9hZGRyOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbDsKIH07CiAKIHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCmluZGV4IGZhNTI3NzIuLjdkZDRhZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKQEAgLTY2NSw3ICs2NjUsNyBAQAogCiAJaWYgKHByaXYtPmNvbW1vbi5tb2RlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lOVkFMSUQpIHsKIAkJcDU0cF9vcGVuKGRldik7Ci0JCWllZWU4MDIxMV9zdGFydF9xdWV1ZXMoZGV2KTsKKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwppbmRleCA1YjM3NWIyLi45N2ZhMTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKQEAgLTU3MSw4ICs1NzEsOSBAQAogICovCiAKIHN0YXRpYyBjaGFyICoKLXByaXNtNTRfdHJhbnNsYXRlX2JzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgY2hhciAqY3VycmVudF9ldiwKLQkJICAgICAgY2hhciAqZW5kX2J1Ziwgc3RydWN0IG9ial9ic3MgKmJzcywgY2hhciBub2lzZSkKK3ByaXNtNTRfdHJhbnNsYXRlX2JzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJICAgICAgY2hhciAqY3VycmVudF9ldiwgY2hhciAqZW5kX2J1Ziwgc3RydWN0IG9ial9ic3MgKmJzcywKKwkJICAgICAgY2hhciBub2lzZSkKIHsKIAlzdHJ1Y3QgaXdfZXZlbnQgaXdlOwkvKiBUZW1wb3JhcnkgYnVmZmVyICovCiAJc2hvcnQgY2FwOwpAQCAtNTg0LDggKzU4NSw4IEBACiAJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5hZGRyZXNzLCA2KTsKIAlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAlpd2UuY21kID0gU0lPQ0dJV0FQOwotCWN1cnJlbnRfZXYgPQotCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwogCiAJLyogVGhlIGZvbGxvd2luZyBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwogCkBAIC01OTMsNyArNTk0LDcgQEAKIAlpd2UudS5kYXRhLmxlbmd0aCA9IGJzcy0+c3NpZC5sZW5ndGg7CiAJaXdlLnUuZGF0YS5mbGFncyA9IDE7CiAJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKIAkJCQkJICAmaXdlLCBic3MtPnNzaWQub2N0ZXRzKTsKIAogCS8qIENhcGFiaWxpdGllcyAqLwpAQCAtNjEwLDkgKzYxMSw4IEBACiAJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwogCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKIAlpZiAoaXdlLnUubW9kZSkKLQkJY3VycmVudF9ldiA9Ci0JCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgSVdfRVZfVUlOVF9MRU4pOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwogCiAJLyogRW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCiAJaWYgKGNhcCAmIENBUF9DUllQVCkKQEAgLTYyMSwxNCArNjIxLDE1IEBACiAJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CiAJaXdlLnUuZGF0YS5sZW5ndGggPSAwOwogCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBOVUxMKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBOVUxMKTsKIAogCS8qIEFkZCBmcmVxdWVuY3kuIChzaG9ydCkgYnNzLT5jaGFubmVsIGlzIHRoZSBmcmVxdWVuY3kgaW4gTUh6ICovCiAJaXdlLnUuZnJlcS5tID0gYnNzLT5jaGFubmVsOwogCWl3ZS51LmZyZXEuZSA9IDY7CiAJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWN1cnJlbnRfZXYgPQotCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwogCiAJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLwogCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPnJzc2k7CkBAIC02MzYsMjAgKzYzNywyMCBAQAogCS8qIGRvIGEgc2ltcGxlIFNOUiBmb3IgcXVhbGl0eSAqLwogCWl3ZS51LnF1YWwucXVhbCA9IGJzcy0+cnNzaSAtIG5vaXNlOwogCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQljdXJyZW50X2V2ID0KLQkgICAgaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKIAogCS8qIEFkZCBXUEEvUlNOIEluZm9ybWF0aW9uIEVsZW1lbnQsIGlmIGFueSAqLwogCXdwYV9pZV9sZW4gPSBwcmlzbTU0X3dwYV9ic3NfaWVfZ2V0KHByaXYsIGJzcy0+YWRkcmVzcywgd3BhX2llKTsKIAlpZiAod3BhX2llX2xlbiA+IDApIHsKIAkJaXdlLmNtZCA9IElXRVZHRU5JRTsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBtaW4od3BhX2llX2xlbiwgKHNpemVfdClNQVhfV1BBX0lFX0xFTik7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCSZpd2UsIHdwYV9pZSk7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCB3cGFfaWUpOwogCX0KIAkvKiBEbyB0aGUgYml0cmF0ZXMgKi8KIAl7Ci0JCWNoYXIgKgljdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBJV19FVl9MQ1BfTEVOOworCQljaGFyICpjdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7CiAJCWludCBpOwogCQlpbnQgbWFzazsKIApAQCAtNjYyLDE0ICs2NjMsMTQgQEAKIAkJZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHNjYW5fcmF0ZV9saXN0KTsgaSsrKSB7CiAJCQlpZihic3MtPnJhdGVzICYgbWFzaykgewogCQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoc2Nhbl9yYXRlX2xpc3RbaV0gKiA1MDAwMDApOwotCQkJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoY3VycmVudF9ldiwgY3VycmVudF92YWwsCi0JCQkJCQkJCSAgIGVuZF9idWYsICZpd2UsCi0JCQkJCQkJCSAgIElXX0VWX1BBUkFNX0xFTik7CisJCQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZSgKKwkJCQkJaW5mbywgY3VycmVudF9ldiwgY3VycmVudF92YWwsCisJCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CiAJCQl9CiAJCQltYXNrIDw8PSAxOwogCQl9CiAJCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLwotCQlpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBJV19FVl9MQ1BfTEVOKQorCQlpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpCiAJCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7CiAJfQogCkBAIC03MTAsNyArNzExLDcgQEAKIAogCS8qIG9rIG5vdywgc2NhbiB0aGUgbGlzdCBhbmQgdHJhbnNsYXRlIGl0cyBpbmZvICovCiAJZm9yIChpID0gMDsgaSA8IChpbnQpIGJzc2xpc3QtPm5yOyBpKyspIHsKLQkJY3VycmVudF9ldiA9IHByaXNtNTRfdHJhbnNsYXRlX2JzcyhuZGV2LCBjdXJyZW50X2V2LAorCQljdXJyZW50X2V2ID0gcHJpc201NF90cmFuc2xhdGVfYnNzKG5kZXYsIGluZm8sIGN1cnJlbnRfZXYsCiAJCQkJCQkgICBleHRyYSArIGR3cnEtPmxlbmd0aCwKIAkJCQkJCSAgICYoYnNzbGlzdC0+YnNzbGlzdFtpXSksCiAJCQkJCQkgICBub2lzZSk7CkBAIC0yNzA0LDYgKzI3MDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByaXNtMl9ob3N0YXBkX3BhcmFtICpwYXJhbSkKIHsKIAlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gaW5mbzsKIAlpbnQgaSwgcnZhbHVlOwogCXN0cnVjdCBvYmpfYnNzbGlzdCAqYnNzbGlzdDsKIAl1MzIgbm9pc2UgPSAwOwpAQCAtMjcyNyw5ICsyNzI5LDEyIEBACiAJcnZhbHVlIHw9IG1ndF9nZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfQlNTTElTVCwgMCwgTlVMTCwgJnIpOwogCWJzc2xpc3QgPSByLnB0cjsKIAorCWluZm8uY21kID0gUFJJU001NF9IT1NUQVBEOworCWluZm8uZmxhZ3MgPSAwOworCiAJLyogb2sgbm93LCBzY2FuIHRoZSBsaXN0IGFuZCB0cmFuc2xhdGUgaXRzIGluZm8gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbWluKElXX01BWF9BUCwgKGludCkgYnNzbGlzdC0+bnIpOyBpKyspCi0JCWN1cnJlbnRfZXYgPSBwcmlzbTU0X3RyYW5zbGF0ZV9ic3MobmRldiwgY3VycmVudF9ldiwKKwkJY3VycmVudF9ldiA9IHByaXNtNTRfdHJhbnNsYXRlX2JzcyhuZGV2LCAmaW5mbywgY3VycmVudF9ldiwKIAkJCQkJCSAgIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwKIAkJCQkJCSAgICYoYnNzbGlzdC0+YnNzbGlzdFtpXSksCiAJCQkJCQkgICBub2lzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKaW5kZXggMThjOTkzMS4uMDBlOTY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwpAQCAtMzEwLDggKzMxMCwxMSBAQAogI2RlZmluZSBDQVBfTU9ERV9NQVNLCQk3CiAjZGVmaW5lIENBUF9TVVBQT1JUX1RYUE9XRVIJOAogCi0jZGVmaW5lIFdPUktfQ09OTkVDVElPTl9FVkVOVAkoMTw8MCkKLSNkZWZpbmUgV09SS19TRVRfTVVMVElDQVNUX0xJU1QJKDE8PDEpCisjZGVmaW5lIFdPUktfTElOS19VUAkJKDE8PDApCisjZGVmaW5lIFdPUktfTElOS19ET1dOCQkoMTw8MSkKKyNkZWZpbmUgV09SS19TRVRfTVVMVElDQVNUX0xJU1QJKDE8PDIpCisKKyNkZWZpbmUgQ09NTUFORF9CVUZGRVJfU0laRQkoQ09OVFJPTF9CVUZGRVJfU0laRSArIHNpemVvZihzdHJ1Y3Qgcm5kaXNfc2V0KSkKIAogLyogUk5ESVMgZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogc3RydWN0IHJuZGlzX3dleHRfcHJpdmF0ZSB7CkBAIC0zNjEsNiArMzY0LDggQEAKIAl1OCAgKndwYV9pZTsKIAlpbnQgIHdwYV9jaXBoZXJfcGFpcjsKIAlpbnQgIHdwYV9jaXBoZXJfZ3JvdXA7CisKKwl1OCBjb21tYW5kX2J1ZmZlcltDT01NQU5EX0JVRkZFUl9TSVpFXTsKIH07CiAKIApAQCAtNDI3LDE4ICs0MzIsMjMgQEAKIAlidWZsZW4gPSAqbGVuICsgc2l6ZW9mKCp1LmdldCk7CiAJaWYgKGJ1ZmxlbiA8IENPTlRST0xfQlVGRkVSX1NJWkUpCiAJCWJ1ZmxlbiA9IENPTlRST0xfQlVGRkVSX1NJWkU7Ci0JdS5idWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1LmJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYnVmbGVuID4gQ09NTUFORF9CVUZGRVJfU0laRSkgeworCQl1LmJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1LmJ1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCX0gZWxzZSB7CisJCXUuYnVmID0gcHJpdi0+Y29tbWFuZF9idWZmZXI7CisJfQorCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29tbWFuZF9sb2NrKTsKKwogCW1lbXNldCh1LmdldCwgMCwgc2l6ZW9mICp1LmdldCk7CiAJdS5nZXQtPm1zZ190eXBlID0gUk5ESVNfTVNHX1FVRVJZOwogCXUuZ2V0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICp1LmdldCk7CiAJdS5nZXQtPm9pZCA9IG9pZDsKIAotCW11dGV4X2xvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7Ci0JcmV0ID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyKTsKLQltdXRleF91bmxvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7Ci0KKwlyZXQgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIGJ1Zmxlbik7CiAJaWYgKHJldCA9PSAwKSB7CiAJCXJldCA9IGxlMzJfdG9fY3B1KHUuZ2V0X2MtPmxlbik7CiAJCSpsZW4gPSAoKmxlbiA+IHJldCkgPyByZXQgOiAqbGVuOwpAQCAtNDQ2LDcgKzQ1NiwxMCBAQAogCQlyZXQgPSBybmRpc19lcnJvcl9zdGF0dXModS5nZXRfYy0+c3RhdHVzKTsKIAl9CiAKLQlrZnJlZSh1LmJ1Zik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb21tYW5kX2xvY2spOworCisJaWYgKHUuYnVmICE9IHByaXYtPmNvbW1hbmRfYnVmZmVyKQorCQlrZnJlZSh1LmJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDY1LDkgKzQ3OCwxNiBAQAogCWJ1ZmxlbiA9IGxlbiArIHNpemVvZigqdS5zZXQpOwogCWlmIChidWZsZW4gPCBDT05UUk9MX0JVRkZFUl9TSVpFKQogCQlidWZsZW4gPSBDT05UUk9MX0JVRkZFUl9TSVpFOwotCXUuYnVmID0ga21hbGxvYyhidWZsZW4sIEdGUF9LRVJORUwpOwotCWlmICghdS5idWYpCi0JCXJldHVybiAtRU5PTUVNOworCisJaWYgKGJ1ZmxlbiA+IENPTU1BTkRfQlVGRkVSX1NJWkUpIHsKKwkJdS5idWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghdS5idWYpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UgeworCQl1LmJ1ZiA9IHByaXYtPmNvbW1hbmRfYnVmZmVyOworCX0KKworCW11dGV4X2xvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7CiAKIAltZW1zZXQodS5zZXQsIDAsIHNpemVvZiAqdS5zZXQpOwogCXUuc2V0LT5tc2dfdHlwZSA9IFJORElTX01TR19TRVQ7CkBAIC00NzgsMTQgKzQ5OCwxNCBAQAogCXUuc2V0LT5oYW5kbGUgPSBjY3B1MigwKTsKIAltZW1jcHkodS5idWYgKyBzaXplb2YoKnUuc2V0KSwgZGF0YSwgbGVuKTsKIAotCW11dGV4X2xvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7Ci0JcmV0ID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyKTsKLQltdXRleF91bmxvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7Ci0KKwlyZXQgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIGJ1Zmxlbik7CiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBybmRpc19lcnJvcl9zdGF0dXModS5zZXRfYy0+c3RhdHVzKTsKIAotCWtmcmVlKHUuYnVmKTsKKwltdXRleF91bmxvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7CisKKwlpZiAodS5idWYgIT0gcHJpdi0+Y29tbWFuZF9idWZmZXIpCisJCWtmcmVlKHUuYnVmKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MjAsOCArNjQwLDcgQEAKIHN0YXRpYyBpbnQgZnJlcV90b19kc2NvbmZpZyhzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgdW5zaWduZWQgaW50ICpkc2NvbmZpZykKIHsKIAlpZiAoZnJlcS0+bSA8IDEwMDAgJiYgZnJlcS0+ZSA9PSAwKSB7Ci0JCWlmIChmcmVxLT5tID49IDEgJiYKLQkJCWZyZXEtPm0gPD0gKHNpemVvZihmcmVxX2NoYW4pIC8gc2l6ZW9mKGZyZXFfY2hhblswXSkpKQorCQlpZiAoZnJlcS0+bSA+PSAxICYmIGZyZXEtPm0gPD0gQVJSQVlfU0laRShmcmVxX2NoYW4pKQogCQkJKmRzY29uZmlnID0gZnJlcV9jaGFuW2ZyZXEtPm0gLSAxXSAqIDEwMDA7CiAJCWVsc2UKIAkJCXJldHVybiAtMTsKQEAgLTExMzUsNyArMTE1NCw3IEBACiAJLyogZmlsbCBpbiA4MDIuMTFnIHJhdGVzICovCiAJaWYgKGhhc184MDIxMWdfcmF0ZXMpIHsKIAkJbnVtID0gcmFuZ2UtPm51bV9iaXRyYXRlczsKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihyYXRlc184MDIxMWcpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXNfODAyMTFnKTsgaSsrKSB7CiAJCQlmb3IgKGogPSAwOyBqIDwgbnVtOyBqKyspIHsKIAkJCQlpZiAocmFuZ2UtPmJpdHJhdGVbal0gPT0KIAkJCQkJcmF0ZXNfODAyMTFnW2ldICogMTAwMDAwMCkKQEAgLTExNTksMTAgKzExNzgsOSBAQAogCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDExICogMTAwMCAqIDEwMDAgLyAyOwogCX0KIAotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSAoc2l6ZW9mKGZyZXFfY2hhbikvc2l6ZW9mKGZyZXFfY2hhblswXSkpOworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGZyZXFfY2hhbik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihmcmVxX2NoYW4pL3NpemVvZihmcmVxX2NoYW5bMF0pKSAmJgotCQkJaSA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnJlcV9jaGFuKSAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBpKyspIHsKIAkJcmFuZ2UtPmZyZXFbaV0uaSA9IGkgKyAxOwogCQlyYW5nZS0+ZnJlcVtpXS5tID0gZnJlcV9jaGFuW2ldICogMTAwMDAwOwogCQlyYW5nZS0+ZnJlcVtpXS5lID0gMTsKQEAgLTE2MzAsNyArMTY0OCw5IEBACiAKIAogc3RhdGljIGNoYXIgKnJuZGlzX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgY2hhciAqY2V2LCBjaGFyICplbmRfYnVmLCBzdHJ1Y3QgbmRpc184MDIxMV9ic3NpZF9leCAqYnNzaWQpCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpjZXYsCisJCQkJICBjaGFyICplbmRfYnVmLAorCQkJCSAgc3RydWN0IG5kaXNfODAyMTFfYnNzaWRfZXggKmJzc2lkKQogewogI2lmZGVmIERFQlVHCiAJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gZGV2LT5wcml2OwpAQCAtMTY0OSwxNCArMTY2OSwxNCBAQAogCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CiAJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQtPm1hYywgRVRIX0FMRU4pOwotCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwogCiAJZGV2ZGJnKHVzYmRldiwgIlNTSUQoJWQpICVzIiwgbGUzMl90b19jcHUoYnNzaWQtPnNzaWQubGVuZ3RoKSwKIAkJCQkJCWJzc2lkLT5zc2lkLmVzc2lkKTsKIAlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwogCWl3ZS51LmVzc2lkLmxlbmd0aCA9IGxlMzJfdG9fY3B1KGJzc2lkLT5zc2lkLmxlbmd0aCk7CiAJaXdlLnUuZXNzaWQuZmxhZ3MgPSAxOwotCWNldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgYnNzaWQtPnNzaWQuZXNzaWQpOworCWNldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGNldiwgZW5kX2J1ZiwgJml3ZSwgYnNzaWQtPnNzaWQuZXNzaWQpOwogCiAJZGV2ZGJnKHVzYmRldiwgIk1PREUgJWQiLCBsZTMyX3RvX2NwdShic3NpZC0+bmV0X2luZnJhKSk7CiAJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwpAQCAtMTY3MiwxMiArMTY5MiwxMiBAQAogCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BVVRPOwogCQlicmVhazsKIAl9Ci0JY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CiAKIAlkZXZkYmcodXNiZGV2LCAiRlJFUSAlZCBrSHoiLCBsZTMyX3RvX2NwdShic3NpZC0+Y29uZmlnLmRzX2NvbmZpZykpOwogCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKIAlkc2NvbmZpZ190b19mcmVxKGxlMzJfdG9fY3B1KGJzc2lkLT5jb25maWcuZHNfY29uZmlnKSwgJml3ZS51LmZyZXEpOwotCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwogCiAJZGV2ZGJnKHVzYmRldiwgIlFVQUwgJWQiLCBsZTMyX3RvX2NwdShic3NpZC0+cnNzaSkpOwogCWl3ZS5jbWQgPSBJV0VWUVVBTDsKQEAgLTE2ODYsNyArMTcwNiw3IEBACiAJaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUQKIAkJCXwgSVdfUVVBTF9MRVZFTF9VUERBVEVECiAJCQl8IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKLQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKwljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKIAogCWRldmRiZyh1c2JkZXYsICJFTkNPREUgJWQiLCBsZTMyX3RvX2NwdShic3NpZC0+cHJpdmFjeSkpOwogCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwpAQCAtMTY5NiwxMCArMTcxNiwxMCBAQAogCWVsc2UKIAkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwogCi0JY2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBOVUxMKTsKKwljZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjZXYsIGVuZF9idWYsICZpd2UsIE5VTEwpOwogCiAJZGV2ZGJnKHVzYmRldiwgIlJBVEVTOiIpOwotCWN1cnJlbnRfdmFsID0gY2V2ICsgSVdfRVZfTENQX0xFTjsKKwljdXJyZW50X3ZhbCA9IGNldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKIAlpd2UuY21kID0gU0lPQ0dJV1JBVEU7CiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihic3NpZC0+cmF0ZXMpOyBpKyspIHsKIAkJaWYgKGJzc2lkLT5yYXRlc1tpXSAmIDB4N2YpIHsKQEAgLTE3MDcsMTMgKzE3MjcsMTMgQEAKIAkJCQkoKGJzc2lkLT5yYXRlc1tpXSAmIDB4N2YpICoKIAkJCQk1MDAwMDApOwogCQkJZGV2ZGJnKHVzYmRldiwgIiAlZCIsIGl3ZS51LmJpdHJhdGUudmFsdWUpOwotCQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShjZXYsCisJCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGNldiwKIAkJCQljdXJyZW50X3ZhbCwgZW5kX2J1ZiwgJml3ZSwKIAkJCQlJV19FVl9QQVJBTV9MRU4pOwogCQl9CiAJfQogCi0JaWYgKChjdXJyZW50X3ZhbCAtIGNldikgPiBJV19FVl9MQ1BfTEVOKQorCWlmICgoY3VycmVudF92YWwgLSBjZXYpID4gaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKQogCQljZXYgPSBjdXJyZW50X3ZhbDsKIAogCWJlYWNvbiA9IGxlMzJfdG9fY3B1KGJzc2lkLT5jb25maWcuYmVhY29uX3BlcmlvZCk7CkBAIC0xNzIxLDE0ICsxNzQxLDE0IEBACiAJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJc25wcmludGYoc2J1Ziwgc2l6ZW9mKHNidWYpLCAiYmNuX2ludD0lZCIsIGJlYWNvbik7CiAJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oc2J1Zik7Ci0JY2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBzYnVmKTsKKwljZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjZXYsIGVuZF9idWYsICZpd2UsIHNidWYpOwogCiAJYXRpbSA9IGxlMzJfdG9fY3B1KGJzc2lkLT5jb25maWcuYXRpbV93aW5kb3cpOwogCWRldmRiZyh1c2JkZXYsICJBVElNICVkIiwgYXRpbSk7CiAJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJc25wcmludGYoc2J1Ziwgc2l6ZW9mKHNidWYpLCAiYXRpbT0ldSIsIGF0aW0pOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKHNidWYpOwotCWNldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgc2J1Zik7CisJY2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY2V2LCBlbmRfYnVmLCAmaXdlLCBzYnVmKTsKIAogCWllID0gKHZvaWQgKikoYnNzaWQtPmllcyArIHNpemVvZihzdHJ1Y3QgbmRpc184MDIxMV9maXhlZF9pZXMpKTsKIAlpZV9sZW4gPSBtaW4oYnNzaWRfbGVuIC0gKGludClzaXplb2YoKmJzc2lkKSwKQEAgLTE3NDIsNyArMTc2Miw3IEBACiAJCQkJCShpZS0+aWQgPT0gTUZJRV9UWVBFX1JTTikgPyAyIDogMSk7CiAJCQlpd2UuY21kID0gSVdFVkdFTklFOwogCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBtaW4oaWUtPmxlbiArIDIsIE1BWF9XUEFfSUVfTEVOKTsKLQkJCWNldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGNldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCWNldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGNldiwgZW5kX2J1ZiwgJml3ZSwKIAkJCQkJCQkJKHU4ICopaWUpOwogCQl9CiAKQEAgLTE3ODUsOCArMTgwNSw4IEBACiAJZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdTQ0FOOiAlZCBCU1NJRHMgZm91bmQiLCBjb3VudCk7CiAKIAl3aGlsZSAoY291bnQgJiYgKCh2b2lkICopYnNzaWQgKyBic3NpZF9sZW4pIDw9IChidWYgKyBsZW4pKSB7Ci0JCWNldiA9IHJuZGlzX3RyYW5zbGF0ZV9zY2FuKGRldiwgY2V2LCBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsCi0JCQkJCQkJCQlic3NpZCk7CisJCWNldiA9IHJuZGlzX3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywgY2V2LAorCQkJCQkgICBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsIGJzc2lkKTsKIAkJYnNzaWQgPSAodm9pZCAqKWJzc2lkICsgYnNzaWRfbGVuOwogCQlic3NpZF9sZW4gPSBsZTMyX3RvX2NwdShic3NpZC0+bGVuZ3RoKTsKIAkJY291bnQtLTsKQEAgLTIyMTMsNyArMjIzMyw5IEBACiAJaW50IGFzc29jX3NpemUgPSBzaXplb2YoKmluZm8pICsgSVdfQ1VTVE9NX01BWCArIDMyOwogCWludCByZXQsIG9mZnNldDsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19DT05ORUNUSU9OX0VWRU5ULCAmcHJpdi0+d29ya19wZW5kaW5nKSkgeworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19MSU5LX1VQLCAmcHJpdi0+d29ya19wZW5kaW5nKSkgeworCQluZXRpZl9jYXJyaWVyX29uKHVzYmRldi0+bmV0KTsKKwogCQlpbmZvID0ga3phbGxvYyhhc3NvY19zaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFpbmZvKQogCQkJZ290byBnZXRfYnNzaWQ7CkBAIC0yMjUxLDYgKzIyNzMsMTUgQEAKIAkJfQogCX0KIAorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19MSU5LX0RPV04sICZwcml2LT53b3JrX3BlbmRpbmcpKSB7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKHVzYmRldi0+bmV0KTsKKworCQlldnQuZGF0YS5mbGFncyA9IDA7CisJCWV2dC5kYXRhLmxlbmd0aCA9IDA7CisJCW1lbXNldChldnQuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQodXNiZGV2LT5uZXQsIFNJT0NHSVdBUCwgJmV2dCwgTlVMTCk7CisJfQorCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXT1JLX1NFVF9NVUxUSUNBU1RfTElTVCwgJnByaXYtPndvcmtfcGVuZGluZykpCiAJCXNldF9tdWx0aWNhc3RfbGlzdCh1c2JkZXYpOwogfQpAQCAtMjI2MCwyOSArMjI5MSwyNCBAQAogCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3Qgcm5kaXNfd2V4dF9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dleHRfcHJpdih1c2JkZXYpOwogCisJaWYgKHRlc3RfYml0KFdPUktfU0VUX01VTFRJQ0FTVF9MSVNULCAmcHJpdi0+d29ya19wZW5kaW5nKSkKKwkJcmV0dXJuOworCiAJc2V0X2JpdChXT1JLX1NFVF9NVUxUSUNBU1RfTElTVCwgJnByaXYtPndvcmtfcGVuZGluZyk7CiAJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT53b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgcm5kaXNfd2V4dF9saW5rX2NoYW5nZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHJuZGlzX3dleHRfbGlua19jaGFuZ2Uoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgc3RhdGUpCiB7Ci0Jc3RydWN0IHJuZGlzX3dleHRfcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193ZXh0X3ByaXYoZGV2KTsKLQl1bmlvbiBpd3JlcV9kYXRhIGV2dDsKKwlzdHJ1Y3Qgcm5kaXNfd2V4dF9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dleHRfcHJpdih1c2JkZXYpOwogCi0JaWYgKHN0YXRlKSB7Ci0JCS8qIHF1ZXVlIHdvcmsgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIGludG8gcm5kaXNfY29tbWFuZCAqLwotCQlzZXRfYml0KFdPUktfQ09OTkVDVElPTl9FVkVOVCwgJnByaXYtPndvcmtfcGVuZGluZyk7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yayk7Ci0JfSBlbHNlIHsKLQkJZXZ0LmRhdGEuZmxhZ3MgPSAwOwotCQlldnQuZGF0YS5sZW5ndGggPSAwOwotCQltZW1zZXQoZXZ0LmFwX2FkZHIuc2FfZGF0YSwgMCwgRVRIX0FMRU4pOwotCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldi0+bmV0LCBTSU9DR0lXQVAsICZldnQsIE5VTEwpOwotCX0KKwkvKiBxdWV1ZSB3b3JrIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyBpbnRvIHJuZGlzX2NvbW1hbmQgKi8KKwlzZXRfYml0KHN0YXRlID8gV09SS19MSU5LX1VQIDogV09SS19MSU5LX0RPV04sICZwcml2LT53b3JrX3BlbmRpbmcpOworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yayk7CiB9CiAKIAotc3RhdGljIGludCBybmRpc193ZXh0X2dldF9jYXBzKHN0cnVjdCB1c2JuZXQgKmRldikKK3N0YXRpYyBpbnQgcm5kaXNfd2V4dF9nZXRfY2FwcyhzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7CiAJc3RydWN0IHsKIAkJX19sZTMyCW51bV9pdGVtczsKQEAgLTIyOTAsMTggKzIzMTYsMTggQEAKIAl9IG5ldHdvcmtzX3N1cHBvcnRlZDsKIAlpbnQgbGVuLCByZXR2YWwsIGksIG47CiAJX19sZTMyIHR4X3Bvd2VyOwotCXN0cnVjdCBybmRpc193ZXh0X3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2V4dF9wcml2KGRldik7CisJc3RydWN0IHJuZGlzX3dleHRfcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193ZXh0X3ByaXYodXNiZGV2KTsKIAogCS8qIGRldGVybWluZSBpZiBzdXBwb3J0cyBzZXR0aW5nIHR4cG93ZXIgKi8KIAlsZW4gPSBzaXplb2YodHhfcG93ZXIpOwotCXJldHZhbCA9IHJuZGlzX3F1ZXJ5X29pZChkZXYsIE9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUwsICZ0eF9wb3dlciwKLQkJCQkJCQkJJmxlbik7CisJcmV0dmFsID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTCwgJnR4X3Bvd2VyLAorCQkJCQkJCQkJJmxlbik7CiAJaWYgKHJldHZhbCA9PSAwICYmIGxlMzJfdG9fY3B1KHR4X3Bvd2VyKSAhPSAweEZGKQogCQlwcml2LT5jYXBzIHw9IENBUF9TVVBQT1JUX1RYUE9XRVI7CiAKIAkvKiBkZXRlcm1pbmUgc3VwcG9ydGVkIG1vZGVzICovCiAJbGVuID0gc2l6ZW9mKG5ldHdvcmtzX3N1cHBvcnRlZCk7Ci0JcmV0dmFsID0gcm5kaXNfcXVlcnlfb2lkKGRldiwgT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVTX1NVUFBPUlRFRCwKKwlyZXR2YWwgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVELAogCQkJCQkJJm5ldHdvcmtzX3N1cHBvcnRlZCwgJmxlbik7CiAJaWYgKHJldHZhbCA+PSAwKSB7CiAJCW4gPSBsZTMyX3RvX2NwdShuZXR3b3Jrc19zdXBwb3J0ZWQubnVtX2l0ZW1zKTsKQEAgLTI0NDAsOSArMjQ2Niw5IEBACiB9CiAKIAotc3RhdGljIGludCBiY200MzIwX2Vhcmx5X2luaXQoc3RydWN0IHVzYm5ldCAqZGV2KQorc3RhdGljIGludCBiY200MzIwX2Vhcmx5X2luaXQoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewotCXN0cnVjdCBybmRpc193ZXh0X3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2V4dF9wcml2KGRldik7CisJc3RydWN0IHJuZGlzX3dleHRfcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193ZXh0X3ByaXYodXNiZGV2KTsKIAljaGFyIGJ1Zls4XTsKIAogCS8qIEVhcmx5IGluaXRpYWxpemF0aW9uIHNldHRpbmdzLCBzZXR0aW5nIHRoZXNlIHdvbid0IGhhdmUgZWZmZWN0CkBAIC0yNDkwLDUxICsyNTE2LDQ4IEBACiAJZWxzZQogCQlwcml2LT5wYXJhbV93b3JrYXJvdW5kX2ludGVydmFsID0gbW9kcGFyYW1fd29ya2Fyb3VuZF9pbnRlcnZhbDsKIAotCXJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3N0cihkZXYsICJDb3VudHJ5IiwgcHJpdi0+cGFyYW1fY291bnRyeSk7Ci0Jcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXJfc3RyKGRldiwgIkZyYW1lQnVyc3RpbmciLAorCXJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3N0cih1c2JkZXYsICJDb3VudHJ5IiwgcHJpdi0+cGFyYW1fY291bnRyeSk7CisJcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXJfc3RyKHVzYmRldiwgIkZyYW1lQnVyc3RpbmciLAogCQkJCQlwcml2LT5wYXJhbV9mcmFtZWJ1cnN0ID8gIjEiIDogIjAiKTsKLQlybmRpc19zZXRfY29uZmlnX3BhcmFtZXRlcl9zdHIoZGV2LCAiQWZ0ZXJidXJuZXIiLAorCXJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3N0cih1c2JkZXYsICJBZnRlcmJ1cm5lciIsCiAJCQkJCXByaXYtPnBhcmFtX2FmdGVyYnVybmVyID8gIjEiIDogIjAiKTsKIAlzcHJpbnRmKGJ1ZiwgIiVkIiwgcHJpdi0+cGFyYW1fcG93ZXJfc2F2ZSk7Ci0Jcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXJfc3RyKGRldiwgIlBvd2VyU2F2ZU1vZGUiLCBidWYpOworCXJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3N0cih1c2JkZXYsICJQb3dlclNhdmVNb2RlIiwgYnVmKTsKIAlzcHJpbnRmKGJ1ZiwgIiVkIiwgcHJpdi0+cGFyYW1fcG93ZXJfb3V0cHV0KTsKLQlybmRpc19zZXRfY29uZmlnX3BhcmFtZXRlcl9zdHIoZGV2LCAiUHdyT3V0IiwgYnVmKTsKKwlybmRpc19zZXRfY29uZmlnX3BhcmFtZXRlcl9zdHIodXNiZGV2LCAiUHdyT3V0IiwgYnVmKTsKIAlzcHJpbnRmKGJ1ZiwgIiVkIiwgcHJpdi0+cGFyYW1fcm9hbXRyaWdnZXIpOwotCXJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3N0cihkZXYsICJSb2FtVHJpZ2dlciIsIGJ1Zik7CisJcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXJfc3RyKHVzYmRldiwgIlJvYW1UcmlnZ2VyIiwgYnVmKTsKIAlzcHJpbnRmKGJ1ZiwgIiVkIiwgcHJpdi0+cGFyYW1fcm9hbWRlbHRhKTsKLQlybmRpc19zZXRfY29uZmlnX3BhcmFtZXRlcl9zdHIoZGV2LCAiUm9hbURlbHRhIiwgYnVmKTsKKwlybmRpc19zZXRfY29uZmlnX3BhcmFtZXRlcl9zdHIodXNiZGV2LCAiUm9hbURlbHRhIiwgYnVmKTsKIAogCXJldHVybiAwOwogfQogCiAKLXN0YXRpYyBpbnQgcm5kaXNfd2V4dF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCitzdGF0aWMgaW50IHJuZGlzX3dleHRfYmluZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBkZXYtPm5ldDsKIAlzdHJ1Y3Qgcm5kaXNfd2V4dF9wcml2YXRlICpwcml2OwogCWludCByZXR2YWwsIGxlbjsKIAlfX2xlMzIgdG1wOwogCiAJLyogYWxsb2NhdGUgcm5kaXMgcHJpdmF0ZSBkYXRhICovCi0JcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBybmRpc193ZXh0X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJuZGlzX3dleHRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBUaGVzZSBoYXZlIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIGdlbmVyaWNfcm5kaXNfYmluZCgpLgogCSAqIE90aGVyd2lzZSB3ZSdsbCBiZSBpbiBiaWcgdHJvdWJsZSBpbiBybmRpc193ZXh0X2Vhcmx5X2luaXQoKS4KIAkgKi8KLQlkZXYtPmRyaXZlcl9wcml2ID0gcHJpdjsKLQltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKCpwcml2KSk7Ci0JbWVtc2V0KHByaXYtPm5hbWUsIDAsIHNpemVvZihwcml2LT5uYW1lKSk7CisJdXNiZGV2LT5kcml2ZXJfcHJpdiA9IHByaXY7CiAJc3RyY3B5KHByaXYtPm5hbWUsICJJRUVFODAyLjExIik7Ci0JbmV0LT53aXJlbGVzc19oYW5kbGVycyA9ICZybmRpc19pd19oYW5kbGVyczsKLQlwcml2LT51c2JkZXYgPSBkZXY7CisJdXNiZGV2LT5uZXQtPndpcmVsZXNzX2hhbmRsZXJzID0gJnJuZGlzX2l3X2hhbmRsZXJzOworCXByaXYtPnVzYmRldiA9IHVzYmRldjsKIAogCW11dGV4X2luaXQoJnByaXYtPmNvbW1hbmRfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YXRzX2xvY2spOwogCiAJLyogdHJ5IGJpbmQgcm5kaXNfaG9zdCAqLwotCXJldHZhbCA9IGdlbmVyaWNfcm5kaXNfYmluZChkZXYsIGludGYsIEZMQUdfUk5ESVNfUEhZTV9XSVJFTEVTUyk7CisJcmV0dmFsID0gZ2VuZXJpY19ybmRpc19iaW5kKHVzYmRldiwgaW50ZiwgRkxBR19STkRJU19QSFlNX1dJUkVMRVNTKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBmYWlsOwogCkBAIC0yNTQ1LDIwICsyNTY4LDIxIEBACiAJICogcm5kaXNfaG9zdCB3YW50cyB0byBhdm9pZCBhbGwgT0lEIGFzIG11Y2ggYXMgcG9zc2libGUKIAkgKiBzbyBkbyBwcm9taXNjL211bHRpY2FzdCBoYW5kbGluZyBpbiBybmRpc193ZXh0LgogCSAqLwotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBybmRpc193ZXh0X3NldF9tdWx0aWNhc3RfbGlzdDsKKwl1c2JkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gcm5kaXNfd2V4dF9zZXRfbXVsdGljYXN0X2xpc3Q7CiAJdG1wID0gUk5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQgfCBSTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1Q7Ci0JcmV0dmFsID0gcm5kaXNfc2V0X29pZChkZXYsIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSLCAmdG1wLAorCXJldHZhbCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiwgJnRtcCwKIAkJCQkJCQkJc2l6ZW9mKHRtcCkpOwogCiAJbGVuID0gc2l6ZW9mKHRtcCk7Ci0JcmV0dmFsID0gcm5kaXNfcXVlcnlfb2lkKGRldiwgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFLCAmdG1wLCAmbGVuKTsKKwlyZXR2YWwgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkUsICZ0bXAsCisJCQkJCQkJCSZsZW4pOwogCXByaXYtPm11bHRpY2FzdF9zaXplID0gbGUzMl90b19jcHUodG1wKTsKIAlpZiAocmV0dmFsIDwgMCB8fCBwcml2LT5tdWx0aWNhc3Rfc2l6ZSA8IDApCiAJCXByaXYtPm11bHRpY2FzdF9zaXplID0gMDsKIAlpZiAocHJpdi0+bXVsdGljYXN0X3NpemUgPiAwKQotCQlkZXYtPm5ldC0+ZmxhZ3MgfD0gSUZGX01VTFRJQ0FTVDsKKwkJdXNiZGV2LT5uZXQtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAJZWxzZQotCQlkZXYtPm5ldC0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CisJCXVzYmRldi0+bmV0LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsKIAogCXByaXYtPml3c3RhdHMucXVhbC5xdWFsID0gMDsKIAlwcml2LT5pd3N0YXRzLnF1YWwubGV2ZWwgPSAwOwpAQCAtMjU2OCwxMiArMjU5MiwxMyBAQAogCQkJCQl8IElXX1FVQUxfUVVBTF9JTlZBTElECiAJCQkJCXwgSVdfUVVBTF9MRVZFTF9JTlZBTElEOwogCi0Jcm5kaXNfd2V4dF9nZXRfY2FwcyhkZXYpOwotCXNldF9kZWZhdWx0X2l3X3BhcmFtcyhkZXYpOworCXJuZGlzX3dleHRfZ2V0X2NhcHModXNiZGV2KTsKKwlzZXRfZGVmYXVsdF9pd19wYXJhbXModXNiZGV2KTsKIAogCS8qIHR1cm4gcmFkaW8gb24gKi8KIAlwcml2LT5yYWRpb19vbiA9IDE7Ci0JZGlzYXNzb2NpYXRlKGRldiwgMSk7CisJZGlzYXNzb2NpYXRlKHVzYmRldiwgMSk7CisJbmV0aWZfY2Fycmllcl9vZmYodXNiZGV2LT5uZXQpOwogCiAJLyogYmVjYXVzZSBybmRpc19jb21tYW5kKCkgc2xlZXBzIHdlIG5lZWQgdG8gdXNlIHdvcmtxdWV1ZSAqLwogCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJybmRpc193bGFuIik7CkBAIC0yNTkwLDEyICsyNjE1LDEyIEBACiB9CiAKIAotc3RhdGljIHZvaWQgcm5kaXNfd2V4dF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3N0YXRpYyB2b2lkIHJuZGlzX3dleHRfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0Jc3RydWN0IHJuZGlzX3dleHRfcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193ZXh0X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgcm5kaXNfd2V4dF9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dleHRfcHJpdih1c2JkZXYpOwogCiAJLyogdHVybiByYWRpbyBvZmYgKi8KLQlkaXNhc3NvY2lhdGUoZGV2LCAwKTsKKwlkaXNhc3NvY2lhdGUodXNiZGV2LCAwKTsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+c3RhdHNfd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+d29yayk7CkBAIC0yNjA2LDEzICsyNjMxLDEzIEBACiAJCWtmcmVlKHByaXYtPndwYV9pZSk7CiAJa2ZyZWUocHJpdik7CiAKLQlybmRpc191bmJpbmQoZGV2LCBpbnRmKTsKKwlybmRpc191bmJpbmQodXNiZGV2LCBpbnRmKTsKIH0KIAogCi1zdGF0aWMgaW50IHJuZGlzX3dleHRfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQorc3RhdGljIGludCBybmRpc193ZXh0X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKLQlyZXR1cm4gZGVhdXRoZW50aWNhdGUoZGV2KTsKKwlyZXR1cm4gZGVhdXRoZW50aWNhdGUodXNiZGV2KTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCmluZGV4IDJkNjExODcuLmQ0ODVhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCkBAIC01LDEyICs1LDE2IEBACiAJICBUaGlzIHdpbGwgZW5hYmxlIHRoZSBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgdGhlIFJhbGluayBkcml2ZXJzLAogCSAgZGV2ZWxvcGVkIGluIHRoZSBydDJ4MDAgcHJvamVjdCA8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPi4KIAotCSAgVGhlc2UgZHJpdmVycyB3aWxsIG1ha2UgdXNlIG9mIHRoZSBtYWM4MDIxMSBzdGFjay4KKwkgIFRoZXNlIGRyaXZlcnMgbWFrZSB1c2Ugb2YgdGhlIG1hYzgwMjExIHN0YWNrLgogCiAJICBXaGVuIGJ1aWxkaW5nIG9uZSBvZiB0aGUgaW5kaXZpZHVhbCBkcml2ZXJzLCB0aGUgcnQyeDAwIGxpYnJhcnkKIAkgIHdpbGwgYWxzbyBiZSBjcmVhdGVkLiBUaGF0IGxpYnJhcnkgKHdoZW4gdGhlIGRyaXZlciBpcyBidWlsdCBhcwogCSAgYSBtb2R1bGUpIHdpbGwgYmUgY2FsbGVkICJydDJ4MDBsaWIua28iLgogCisJICBBZGRpdGlvbmFsbHkgUENJIGFuZCBVU0IgbGlicmFyaWVzIHdpbGwgYWxzbyBiZSBidWlsZCBkZXBlbmRpbmcKKwkgIG9uIHRoZSB0eXBlcyBvZiBkcml2ZXJzIGJlaW5nIHNlbGVjdGVkLCB0aGVzZSBsaWJyYXJpZXMgd2lsbCBiZQorCSAgY2FsbGVkICJydDJ4MDBwY2kua28iIGFuZCAicnQyeDAwdXNiLmtvIi4KKwogaWYgUlQyWDAwCiAKIGNvbmZpZyBSVDJYMDBfTElCCkBAIC0zMiwzNSArMzYsMzQgQEAKIGNvbmZpZyBSVDJYMDBfTElCX1JGS0lMTAogCWJvb2xlYW4KIAlkZXBlbmRzIG9uIFJUMlgwMF9MSUIKLQlkZXBlbmRzIG9uIElOUFVUCiAJc2VsZWN0IFJGS0lMTAotCXNlbGVjdCBJTlBVVF9QT0xMREVWCiAKIGNvbmZpZyBSVDJYMDBfTElCX0xFRFMKIAlib29sZWFuCiAJZGVwZW5kcyBvbiBSVDJYMDBfTElCICYmIE5FV19MRURTCiAKIGNvbmZpZyBSVDI0MDBQQ0kKLQl0cmlzdGF0ZSAiUmFsaW5rIHJ0MjQwMCBwY2kvcGNtY2lhIHN1cHBvcnQiCisJdHJpc3RhdGUgIlJhbGluayBydDI0MDAgKFBDSS9QQ01DSUEpIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgUlQyWDAwX0xJQl9QQ0kKIAlzZWxlY3QgRUVQUk9NXzkzQ1g2CiAJLS0taGVscC0tLQotCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIHJ0MjQwMCB3aXJlbGVzcyBjaGlwLgorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MjQwMCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseS4KKwkgIFN1cHBvcnRlZCBjaGlwczogUlQyNDYwLgogCiAJICBXaGVuIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB0aGlzIGRyaXZlciB3aWxsIGJlIGNhbGxlZCAicnQyNDAwcGNpLmtvIi4KIAogY29uZmlnIFJUMjQwMFBDSV9SRktJTEwKLQlib29sICJSVDI0MDAgcmZraWxsIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBSVDI0MDBQQ0kgJiYgSU5QVVQKKwlib29sICJSYWxpbmsgcnQyNDAwIHJma2lsbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUlQyNDAwUENJCiAJc2VsZWN0IFJUMlgwMF9MSUJfUkZLSUxMCiAJLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGludGVncmF0ZWQgcnQyNDAwIGRldmljZXMgdGhhdCBmZWF0dXJlIGEKKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBpbnRlZ3JhdGVkIHJ0MjQwMCBoYXJkd2FyZSB0aGF0IGZlYXR1cmVzIGEKIAkgIGhhcmR3YXJlIGJ1dHRvbiB0byBjb250cm9sIHRoZSByYWRpbyBzdGF0ZS4KIAkgIFRoaXMgZmVhdHVyZSBkZXBlbmRzIG9uIHRoZSBSRiBzd2l0Y2ggc3Vic3lzdGVtIHJma2lsbC4KIAogY29uZmlnIFJUMjQwMFBDSV9MRURTCi0JYm9vbCAiUlQyNDAwIGxlZHMgc3VwcG9ydCIKKwlib29sICJSYWxpbmsgcnQyNDAwIGxlZHMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFJUMjQwMFBDSSAmJiBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiAJc2VsZWN0IFJUMlgwMF9MSUJfTEVEUwpAQCAtNjgsMjYgKzcxLDI3IEBACiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgbGVkIHRyaWdnZXJzIHByb3ZpZGVkIG15IG1hYzgwMjExLgogCiBjb25maWcgUlQyNTAwUENJCi0JdHJpc3RhdGUgIlJhbGluayBydDI1MDAgcGNpL3BjbWNpYSBzdXBwb3J0IgorCXRyaXN0YXRlICJSYWxpbmsgcnQyNTAwIChQQ0kvUENNQ0lBKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFJUMlgwMF9MSUJfUENJCiAJc2VsZWN0IEVFUFJPTV85M0NYNgogCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayBydDI1MDAgd2lyZWxlc3MgY2hpcC4KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDI1MDAgd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkuCisJICBTdXBwb3J0ZWQgY2hpcHM6IFJUMjU2MC4KIAogCSAgV2hlbiBjb21waWxlZCBhcyBhIG1vZHVsZSwgdGhpcyBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgInJ0MjUwMHBjaS5rbyIuCiAKIGNvbmZpZyBSVDI1MDBQQ0lfUkZLSUxMCi0JYm9vbCAiUlQyNTAwIHJma2lsbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUlQyNTAwUENJICYmIElOUFVUCisJYm9vbCAiUmFsaW5rIHJ0MjUwMCByZmtpbGwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFJUMjUwMFBDSQogCXNlbGVjdCBSVDJYMDBfTElCX1JGS0lMTAogCS0tLWhlbHAtLS0KLQkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBpbnRlZ3JhdGVkIHJ0MjUwMCBkZXZpY2VzIHRoYXQgZmVhdHVyZSBhCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgaW50ZWdyYXRlZCBydDI1MDAgaGFyZHdhcmUgdGhhdCBmZWF0dXJlcyBhCiAJICBoYXJkd2FyZSBidXR0b24gdG8gY29udHJvbCB0aGUgcmFkaW8gc3RhdGUuCiAJICBUaGlzIGZlYXR1cmUgZGVwZW5kcyBvbiB0aGUgUkYgc3dpdGNoIHN1YnN5c3RlbSByZmtpbGwuCiAKIGNvbmZpZyBSVDI1MDBQQ0lfTEVEUwotCWJvb2wgIlJUMjUwMCBsZWRzIHN1cHBvcnQiCisJYm9vbCAiUmFsaW5rIHJ0MjUwMCBsZWRzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBSVDI1MDBQQ0kgJiYgTkVXX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUwogCXNlbGVjdCBSVDJYMDBfTElCX0xFRFMKQEAgLTk1LDI4ICs5OSwyOSBAQAogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGxlZCB0cmlnZ2VycyBwcm92aWRlZCBteSBtYWM4MDIxMS4KIAogY29uZmlnIFJUNjFQQ0kKLQl0cmlzdGF0ZSAiUmFsaW5rIHJ0NjEgcGNpL3BjbWNpYSBzdXBwb3J0IgorCXRyaXN0YXRlICJSYWxpbmsgcnQyNTAxL3J0NjEgKFBDSS9QQ01DSUEpIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgUlQyWDAwX0xJQl9QQ0kKIAlzZWxlY3QgUlQyWDAwX0xJQl9GSVJNV0FSRQogCXNlbGVjdCBDUkNfSVRVX1QKIAlzZWxlY3QgRUVQUk9NXzkzQ1g2CiAJLS0taGVscC0tLQotCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIHJ0NjEgd2lyZWxlc3MgY2hpcC4KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDI1MDEgd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkuCisJICBTdXBwb3J0ZWQgY2hpcHM6IFJUMjU2MSwgUlQyNTYxUyAmIFJUMjY2MS4KIAogCSAgV2hlbiBjb21waWxlZCBhcyBhIG1vZHVsZSwgdGhpcyBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgInJ0NjFwY2kua28iLgogCiBjb25maWcgUlQ2MVBDSV9SRktJTEwKLQlib29sICJSVDYxIHJma2lsbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUlQ2MVBDSSAmJiBJTlBVVAorCWJvb2wgIlJhbGluayBydDI1MDEvcnQ2MSByZmtpbGwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFJUNjFQQ0kKIAlzZWxlY3QgUlQyWDAwX0xJQl9SRktJTEwKIAktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgaW50ZWdyYXRlZCBydDYxIGRldmljZXMgdGhhdCBmZWF0dXJlIGEKKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBpbnRlZ3JhdGVkIHJ0NjEgaGFyZHdhcmUgdGhhdCBmZWF0dXJlcyBhCiAJICBoYXJkd2FyZSBidXR0b24gdG8gY29udHJvbCB0aGUgcmFkaW8gc3RhdGUuCiAJICBUaGlzIGZlYXR1cmUgZGVwZW5kcyBvbiB0aGUgUkYgc3dpdGNoIHN1YnN5c3RlbSByZmtpbGwuCiAKIGNvbmZpZyBSVDYxUENJX0xFRFMKLQlib29sICJSVDYxIGxlZHMgc3VwcG9ydCIKKwlib29sICJSYWxpbmsgcnQyNTAxL3J0NjEgbGVkcyBzdXBwb3J0IgogCWRlcGVuZHMgb24gUlQ2MVBDSSAmJiBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiAJc2VsZWN0IFJUMlgwMF9MSUJfTEVEUwpAQCAtMTI0LDE2ICsxMjksMTcgQEAKIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBsZWQgdHJpZ2dlcnMgcHJvdmlkZWQgbXkgbWFjODAyMTEuCiAKIGNvbmZpZyBSVDI1MDBVU0IKLQl0cmlzdGF0ZSAiUmFsaW5rIHJ0MjUwMCB1c2Igc3VwcG9ydCIKKwl0cmlzdGF0ZSAiUmFsaW5rIHJ0MjUwMCAoVVNCKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCiAJc2VsZWN0IFJUMlgwMF9MSUJfVVNCCiAJLS0taGVscC0tLQotCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIHJ0MjUwMCB3aXJlbGVzcyBjaGlwLgorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MjUwMCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseS4KKwkgIFN1cHBvcnRlZCBjaGlwczogUlQyNTcxICYgUlQyNTcyLgogCiAJICBXaGVuIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB0aGlzIGRyaXZlciB3aWxsIGJlIGNhbGxlZCAicnQyNTAwdXNiLmtvIi4KIAogY29uZmlnIFJUMjUwMFVTQl9MRURTCi0JYm9vbCAiUlQyNTAwIGxlZHMgc3VwcG9ydCIKKwlib29sICJSYWxpbmsgcnQyNTAwIGxlZHMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFJUMjUwMFVTQiAmJiBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiAJc2VsZWN0IFJUMlgwMF9MSUJfTEVEUwpAQCAtMTQxLDE4ICsxNDcsMTkgQEAKIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBsZWQgdHJpZ2dlcnMgcHJvdmlkZWQgbXkgbWFjODAyMTEuCiAKIGNvbmZpZyBSVDczVVNCCi0JdHJpc3RhdGUgIlJhbGluayBydDczIHVzYiBzdXBwb3J0IgorCXRyaXN0YXRlICJSYWxpbmsgcnQyNTAxL3J0NzMgKFVTQikgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQgogCXNlbGVjdCBSVDJYMDBfTElCX1VTQgogCXNlbGVjdCBSVDJYMDBfTElCX0ZJUk1XQVJFCiAJc2VsZWN0IENSQ19JVFVfVAogCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayBydDczIHdpcmVsZXNzIGNoaXAuCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQyNTAxIHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5LgorCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDI1NzFXLCBSVDI1NzMgJiBSVDI2NzEuCiAKIAkgIFdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoaXMgZHJpdmVyIHdpbGwgYmUgY2FsbGVkICJydDczdXNiLmtvIi4KIAogY29uZmlnIFJUNzNVU0JfTEVEUwotCWJvb2wgIlJUNzMgbGVkcyBzdXBwb3J0IgorCWJvb2wgIlJhbGluayBydDI1MDEvcnQ3MyBsZWRzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBSVDczVVNCICYmIE5FV19MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MKIAlzZWxlY3QgUlQyWDAwX0xJQl9MRURTCkBAIC0xNjUsNyArMTcyLDcgQEAKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgY3JlYXRpb24gb2YgZGVidWdmcyBmaWxlcyBmb3IgdGhlIHJ0MngwMCBkcml2ZXJzLgogCSAgVGhlc2UgZGVidWdmcyBmaWxlcyBzdXBwb3J0IGJvdGggcmVhZGluZyBhbmQgd3JpdGluZyBvZiB0aGUKLQkgIG1vc3QgaW1wb3J0YW50IHJlZ2lzdGVyIHR5cGVzIG9mIHRoZSBydDJ4MDAgZGV2aWNlcy4KKwkgIG1vc3QgaW1wb3J0YW50IHJlZ2lzdGVyIHR5cGVzIG9mIHRoZSBydDJ4MDAgaGFyZHdhcmUuCiAKIGNvbmZpZyBSVDJYMDBfREVCVUcKIAlib29sICJSYWxpbmsgZGVidWcgb3V0cHV0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IGIzNmVkMWMuLjRjMDUzOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKQEAgLTI3Nyw2ICsyNzcsMTcgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfaW5pdF9sZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgICBzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkLAorCQkJICAgICAgIGVudW0gbGVkX3R5cGUgdHlwZSkKK3sKKwlsZWQtPnJ0MngwMGRldiA9IHJ0MngwMGRldjsKKwlsZWQtPnR5cGUgPSB0eXBlOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IHJ0MjQwMHBjaV9icmlnaHRuZXNzX3NldDsKKwlsZWQtPmxlZF9kZXYuYmxpbmtfc2V0ID0gcnQyNDAwcGNpX2JsaW5rX3NldDsKKwlsZWQtPmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOworfQogI2VuZGlmIC8qIENPTkZJR19SVDI0MDBQQ0lfTEVEUyAqLwogCiAvKgpAQCAtNjIwLDQ4ICs2MzEsMzggQEAKIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9pbml0X3J4ZW50cnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCAqcHJpdl9yeCA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CiAJdTMyIHdvcmQ7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDIsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFJYRF9XMl9CVUZGRVJfTEVOR1RILAotCQkJICAgZW50cnktPnF1ZXVlLT5kYXRhX3NpemUpOwotCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfcngtPmRlc2MsIDIsIHdvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMiwgJndvcmQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cyX0JVRkZFUl9MRU5HVEgsIGVudHJ5LT5za2ItPmxlbik7CisJcnQyeDAwX2Rlc2Nfd3JpdGUoZW50cnlfcHJpdi0+ZGVzYywgMiwgd29yZCk7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDEsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFJYRF9XMV9CVUZGRVJfQUREUkVTUywgcHJpdl9yeC0+ZGF0YV9kbWEpOwotCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfcngtPmRlc2MsIDEsIHdvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMSwgJndvcmQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cxX0JVRkZFUl9BRERSRVNTLCBza2JkZXNjLT5za2JfZG1hKTsKKwlydDJ4MDBfZGVzY193cml0ZShlbnRyeV9wcml2LT5kZXNjLCAxLCB3b3JkKTsKIAotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cwX09XTkVSX05JQywgMSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl9yeC0+ZGVzYywgMCwgd29yZCk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUoZW50cnlfcHJpdi0+ZGVzYywgMCwgd29yZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9pbml0X3R4ZW50cnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eCA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIAl1MzIgd29yZDsKIAotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMSwgJndvcmQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0JVRkZFUl9BRERSRVNTLCBwcml2X3R4LT5kYXRhX2RtYSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgMSwgd29yZCk7Ci0KLQlydDJ4MDBfZGVzY19yZWFkKHByaXZfdHgtPmRlc2MsIDIsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9CVUZGRVJfTEVOR1RILAotCQkJICAgZW50cnktPnF1ZXVlLT5kYXRhX3NpemUpOwotCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfdHgtPmRlc2MsIDIsIHdvcmQpOwotCi0JcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCAwLCAmd29yZCk7CisJcnQyeDAwX2Rlc2NfcmVhZChlbnRyeV9wcml2LT5kZXNjLCAwLCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVkFMSUQsIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09XTkVSX05JQywgMCk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgMCwgd29yZCk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUoZW50cnlfcHJpdi0+ZGVzYywgMCwgd29yZCk7CiB9CiAKIHN0YXRpYyBpbnQgcnQyNDAwcGNpX2luaXRfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4ICpwcml2X3J4OwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXY7CiAJdTMyIHJlZzsKIAogCS8qCkBAIC02NzQsMjggKzY3NSwyOCBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjJfTlVNX1BSSU8sIHJ0MngwMGRldi0+dHhbMF0ubGltaXQpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMiwgcmVnKTsKIAotCXByaXZfdHggPSBydDJ4MDBkZXYtPnR4WzFdLmVudHJpZXNbMF0ucHJpdl9kYXRhOworCWVudHJ5X3ByaXYgPSBydDJ4MDBkZXYtPnR4WzFdLmVudHJpZXNbMF0ucHJpdl9kYXRhOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IzLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IzX1RYX1JJTkdfUkVHSVNURVIsCi0JCQkgICBwcml2X3R4LT5kZXNjX2RtYSk7CisJCQkgICBlbnRyeV9wcml2LT5kZXNjX2RtYSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IzLCByZWcpOwogCi0JcHJpdl90eCA9IHJ0MngwMGRldi0+dHhbMF0uZW50cmllc1swXS5wcml2X2RhdGE7CisJZW50cnlfcHJpdiA9IHJ0MngwMGRldi0+dHhbMF0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjUsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjVfUFJJT19SSU5HX1JFR0lTVEVSLAotCQkJICAgcHJpdl90eC0+ZGVzY19kbWEpOworCQkJICAgZW50cnlfcHJpdi0+ZGVzY19kbWEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSNSwgcmVnKTsKIAotCXByaXZfdHggPSBydDJ4MDBkZXYtPmJjblsxXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKKwllbnRyeV9wcml2ID0gcnQyeDAwZGV2LT5iY25bMV0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjQsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjRfQVRJTV9SSU5HX1JFR0lTVEVSLAotCQkJICAgcHJpdl90eC0+ZGVzY19kbWEpOworCQkJICAgZW50cnlfcHJpdi0+ZGVzY19kbWEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSNCwgcmVnKTsKIAotCXByaXZfdHggPSBydDJ4MDBkZXYtPmJjblswXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKKwllbnRyeV9wcml2ID0gcnQyeDAwZGV2LT5iY25bMF0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjYsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjZfQkVBQ09OX1JJTkdfUkVHSVNURVIsCi0JCQkgICBwcml2X3R4LT5kZXNjX2RtYSk7CisJCQkgICBlbnRyeV9wcml2LT5kZXNjX2RtYSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1I2LCByZWcpOwogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWENTUjEsICZyZWcpOwpAQCAtNzAzLDkgKzcwNCwxMCBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjFfTlVNX1JYRCwgcnQyeDAwZGV2LT5yeC0+bGltaXQpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYQ1NSMSwgcmVnKTsKIAotCXByaXZfcnggPSBydDJ4MDBkZXYtPnJ4LT5lbnRyaWVzWzBdLnByaXZfZGF0YTsKKwllbnRyeV9wcml2ID0gcnQyeDAwZGV2LT5yeC0+ZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWENTUjIsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjJfUlhfUklOR19SRUdJU1RFUiwgcHJpdl9yeC0+ZGVzY19kbWEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjJfUlhfUklOR19SRUdJU1RFUiwKKwkJCSAgIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWENTUjIsIHJlZyk7CiAKIAlyZXR1cm4gMDsKQEAgLTgwMSw2ICs4MDMsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBydDI0MDBwY2lfd2FpdF9iYnBfcmVhZHkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1OCB2YWx1ZTsKKworCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKKwkJcnQyNDAwcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMCwgJnZhbHVlKTsKKwkJaWYgKCh2YWx1ZSAhPSAweGZmKSAmJiAodmFsdWUgIT0gMHgwMCkpCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KFJFR0lTVEVSX0JVU1lfREVMQVkpOworCX0KKworCUVSUk9SKHJ0MngwMGRldiwgIkJCUCByZWdpc3RlciBhY2Nlc3MgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCXJldHVybiAtRUFDQ0VTOworfQorCiBzdGF0aWMgaW50IHJ0MjQwMHBjaV9pbml0X2JicChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtODA4LDE4ICs4MjYsOSBAQAogCXU4IHJlZ19pZDsKIAl1OCB2YWx1ZTsKIAotCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKLQkJcnQyNDAwcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMCwgJnZhbHVlKTsKLQkJaWYgKCh2YWx1ZSAhPSAweGZmKSAmJiAodmFsdWUgIT0gMHgwMCkpCi0JCQlnb3RvIGNvbnRpbnVlX2Nzcl9pbml0OwotCQlOT1RJQ0UocnQyeDAwZGV2LCAiV2FpdGluZyBmb3IgQkJQIHJlZ2lzdGVyLlxuIik7Ci0JCXVkZWxheShSRUdJU1RFUl9CVVNZX0RFTEFZKTsKLQl9CisJaWYgKHVubGlrZWx5KHJ0MjQwMHBjaV93YWl0X2JicF9yZWFkeShydDJ4MDBkZXYpKSkKKwkJcmV0dXJuIC1FQUNDRVM7CiAKLQlFUlJPUihydDJ4MDBkZXYsICJCQlAgcmVnaXN0ZXIgYWNjZXNzIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKLQlyZXR1cm4gLUVBQ0NFUzsKLQotY29udGludWVfY3NyX2luaXQ6CiAJcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEsIDB4MDApOwogCXJ0MjQwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAzLCAweDI3KTsKIAlydDI0MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgNCwgMHgwOCk7CkBAIC04NTgsNyArODY3LDggQEAKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUlhDU1IwLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RJU0FCTEVfUlgsCi0JCQkgICBzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkYpOworCQkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRikgfHwKKwkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkZfTElOSykpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYQ1NSMCwgcmVnKTsKIH0KIApAQCAtODk1LDE3ICs5MDUsMTAgQEAKIAkvKgogCSAqIEluaXRpYWxpemUgYWxsIHJlZ2lzdGVycy4KIAkgKi8KLQlpZiAocnQyNDAwcGNpX2luaXRfcXVldWVzKHJ0MngwMGRldikgfHwKLQkgICAgcnQyNDAwcGNpX2luaXRfcmVnaXN0ZXJzKHJ0MngwMGRldikgfHwKLQkgICAgcnQyNDAwcGNpX2luaXRfYmJwKHJ0MngwMGRldikpIHsKLQkJRVJST1IocnQyeDAwZGV2LCAiUmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJaWYgKHVubGlrZWx5KHJ0MjQwMHBjaV9pbml0X3F1ZXVlcyhydDJ4MDBkZXYpIHx8CisJCSAgICAgcnQyNDAwcGNpX2luaXRfcmVnaXN0ZXJzKHJ0MngwMGRldikgfHwKKwkJICAgICBydDI0MDBwY2lfaW5pdF9iYnAocnQyeDAwZGV2KSkpCiAJCXJldHVybiAtRUlPOwotCX0KLQotCS8qCi0JICogRW5hYmxlIGludGVycnVwdHMuCi0JICovCi0JcnQyNDAwcGNpX3RvZ2dsZV9pcnEocnQyeDAwZGV2LCBTVEFURV9SQURJT19JUlFfT04pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MjcsMTEgKzkzMCw2IEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKLQotCS8qCi0JICogRGlzYWJsZSBpbnRlcnJ1cHRzLgotCSAqLwotCXJ0MjQwMHBjaV90b2dnbGVfaXJxKHJ0MngwMGRldiwgU1RBVEVfUkFESU9fSVJRX09GRik7CiB9CiAKIHN0YXRpYyBpbnQgcnQyNDAwcGNpX3NldF9zdGF0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtOTY2LDEwICs5NjQsNiBAQAogCQltc2xlZXAoMTApOwogCX0KIAotCU5PVElDRShydDJ4MDBkZXYsICJEZXZpY2UgZmFpbGVkIHRvIGVudGVyIHN0YXRlICVkLCAiCi0JICAgICAgICJjdXJyZW50IGRldmljZSBzdGF0ZTogYmJwICVkIGFuZCByZiAlZC5cbiIsCi0JICAgICAgIHN0YXRlLCBiYnBfc3RhdGUsIHJmX3N0YXRlKTsKLQogCXJldHVybiAtRUJVU1k7CiB9CiAKQEAgLTk4NywxMSArOTgxLDEzIEBACiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fUlhfT046CiAJY2FzZSBTVEFURV9SQURJT19SWF9PTl9MSU5LOgotCQlydDI0MDBwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT04pOwotCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX1JYX09GRjoKIAljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgotCQlydDI0MDBwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT0ZGKTsKKwkJcnQyNDAwcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIHN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFURV9SQURJT19JUlFfT046CisJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGOgorCQlydDI0MDBwY2lfdG9nZ2xlX2lycShydDJ4MDBkZXYsIHN0YXRlKTsKIAkJYnJlYWs7CiAJY2FzZSBTVEFURV9ERUVQX1NMRUVQOgogCWNhc2UgU1RBVEVfU0xFRVA6CkBAIC0xMDA0LDYgKzEwMDAsMTAgQEAKIAkJYnJlYWs7CiAJfQogCisJaWYgKHVubGlrZWx5KHJldHZhbCkpCisJCUVSUk9SKHJ0MngwMGRldiwgIkRldmljZSBmYWlsZWQgdG8gZW50ZXIgc3RhdGUgJWQgKCVkKS5cbiIsCisJCSAgICAgIHN0YXRlLCByZXR2YWwpOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTAxMiwxOCArMTAxMiwyMyBAQAogICovCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfd3JpdGVfdHhfZGVzYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKKwkJCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogewogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSAqZW50cnlfcHJpdiA9IHNrYmRlc2MtPmVudHJ5LT5wcml2X2RhdGE7CiAJX19sZTMyICp0eGQgPSBza2JkZXNjLT5kZXNjOwogCXUzMiB3b3JkOwogCiAJLyoKIAkgKiBTdGFydCB3cml0aW5nIHRoZSBkZXNjcmlwdG9yIHdvcmRzLgogCSAqLworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMSwgJndvcmQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0JVRkZFUl9BRERSRVNTLCBza2JkZXNjLT5za2JfZG1hKTsKKwlydDJ4MDBfZGVzY193cml0ZShlbnRyeV9wcml2LT5kZXNjLCAxLCB3b3JkKTsKKwogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAyLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfREFUQUJZVEVfQ09VTlQsIHNrYmRlc2MtPmRhdGFfbGVuKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9CVUZGRVJfTEVOR1RILCBza2ItPmxlbik7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfREFUQUJZVEVfQ09VTlQsIHNrYi0+bGVuKTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDIsIHdvcmQpOwogCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDMsICZ3b3JkKTsKQEAgLTEwNTcsMjAgKzEwNjIsNTMgQEAKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SVFNfRlJBTUUsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTU9ERSwKLQkJCSAgICEhKGNvbnRyb2wtPmZsYWdzICYKLQkJCSAgICAgIElFRUU4MDIxMV9UWENUTF9MT05HX1JFVFJZX0xJTUlUKSk7CisJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfUkVUUllfTU9ERSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDAsIHdvcmQpOwogfQogCiAvKgogICogVFggZGF0YSBpbml0aWFsaXphdGlvbgogICovCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfd3JpdGVfYmVhY29uKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOworCXUzMiB3b3JkOworCXUzMiByZWc7CisKKwkvKgorCSAqIERpc2FibGUgYmVhY29uaW5nIHdoaWxlIHdlIGFyZSByZWxvYWRpbmcgdGhlIGJlYWNvbiBkYXRhLAorCSAqIG90aGVyd2lzZSB3ZSBtaWdodCBiZSBzZW5kaW5nIG91dCBpbnZhbGlkIGRhdGEuCisJICovCisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IxNCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RCQ04sIDApOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9CRUFDT05fR0VOLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgcmVnKTsKKworCS8qCisJICogUmVwbGFjZSBydDJ4MDBsaWIgYWxsb2NhdGVkIGRlc2NyaXB0b3Igd2l0aCB0aGUKKwkgKiBwb2ludGVyIHRvIHRoZSBfcmVhbF8gaGFyZHdhcmUgZGVzY3JpcHRvci4KKwkgKiBBZnRlciB0aGF0LCBtYXAgdGhlIGJlYWNvbiB0byBETUEgYW5kIHVwZGF0ZSB0aGUKKwkgKiBkZXNjcmlwdG9yLgorCSAqLworCW1lbWNweShlbnRyeV9wcml2LT5kZXNjLCBza2JkZXNjLT5kZXNjLCBza2JkZXNjLT5kZXNjX2xlbik7CisJc2tiZGVzYy0+ZGVzYyA9IGVudHJ5X3ByaXYtPmRlc2M7CisKKwlydDJ4MDBxdWV1ZV9tYXBfdHhza2IocnQyeDAwZGV2LCBlbnRyeS0+c2tiKTsKKworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMSwgJndvcmQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0JVRkZFUl9BRERSRVNTLCBza2JkZXNjLT5za2JfZG1hKTsKKwlydDJ4MDBfZGVzY193cml0ZShlbnRyeV9wcml2LT5kZXNjLCAxLCB3b3JkKTsKK30KKwogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2tpY2tfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IHF1ZXVlKQorCQkJCSAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHF1ZXVlKQogewogCXUzMiByZWc7CiAKLQlpZiAocXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04pIHsKKwlpZiAocXVldWUgPT0gUUlEX0JFQUNPTikgewogCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1IxNF9CRUFDT05fR0VOKSkgewogCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMSk7CkBAIC0xMDgyLDEyICsxMTIwLDkgQEAKIAl9CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX1BSSU8sCi0JCQkgICAocXVldWUgPT0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX1RYLAotCQkJICAgKHF1ZXVlID09IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMSkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfS0lDS19BVElNLAotCQkJICAgKHF1ZXVlID09IFJUMlgwMF9CQ05fUVVFVUVfQVRJTSkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfS0lDS19QUklPLCAocXVldWUgPT0gUUlEX0FDX0JFKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX1RYLCAocXVldWUgPT0gUUlEX0FDX0JLKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX0FUSU0sIChxdWV1ZSA9PSBRSURfQVRJTSkpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKIH0KIApAQCAtMTA5NywzMiArMTEzMiw1NCBAQAogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2ZpbGxfcnhkb25lKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcnggKnByaXZfcnggPSBlbnRyeS0+cHJpdl9kYXRhOworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwogCXUzMiB3b3JkMDsKIAl1MzIgd29yZDI7CiAJdTMyIHdvcmQzOworCXUzMiB3b3JkNDsKKwl1NjQgdHNmOworCXUzMiByeF9sb3c7CisJdTMyIHJ4X2hpZ2g7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDAsICZ3b3JkMCk7Ci0JcnQyeDAwX2Rlc2NfcmVhZChwcml2X3J4LT5kZXNjLCAyLCAmd29yZDIpOwotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMywgJndvcmQzKTsKKwlydDJ4MDBfZGVzY19yZWFkKGVudHJ5X3ByaXYtPmRlc2MsIDAsICZ3b3JkMCk7CisJcnQyeDAwX2Rlc2NfcmVhZChlbnRyeV9wcml2LT5kZXNjLCAyLCAmd29yZDIpOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMywgJndvcmQzKTsKKwlydDJ4MDBfZGVzY19yZWFkKGVudHJ5X3ByaXYtPmRlc2MsIDQsICZ3b3JkNCk7CiAKLQlyeGRlc2MtPmZsYWdzID0gMDsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfQ1JDX0VSUk9SKSkKIAkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9QSFlTSUNBTF9FUlJPUikpCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19GQUlMRURfUExDUF9DUkM7CiAKIAkvKgorCSAqIFdlIG9ubHkgZ2V0IHRoZSBsb3dlciAzMmJpdHMgZnJvbSB0aGUgdGltZXN0YW1wLAorCSAqIHRvIGdldCB0aGUgZnVsbCA2NGJpdHMgd2UgbXVzdCBjb21wbGVtZW50IGl0IHdpdGgKKwkgKiB0aGUgdGltZXN0YW1wIGZyb20gZ2V0X3RzZigpLgorCSAqIE5vdGUgdGhhdCB3aGVuIGEgd3JhcGFyb3VuZCBvZiB0aGUgbG93ZXIgMzJiaXRzCisJICogaGFzIG9jY3VycmVkIGJldHdlZW4gdGhlIGZyYW1lIGFycml2YWwgYW5kIHRoZSBnZXRfdHNmKCkKKwkgKiBjYWxsLCB3ZSBtdXN0IGRlY3JlYXNlIHRoZSBoaWdoZXIgMzJiaXRzIHdpdGggMSB0byBnZXQKKwkgKiB0byBjb3JyZWN0IHZhbHVlLgorCSAqLworCXRzZiA9IHJ0MngwMGRldi0+b3BzLT5ody0+Z2V0X3RzZihydDJ4MDBkZXYtPmh3KTsKKwlyeF9sb3cgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDQsIFJYRF9XNF9SWF9FTkRfVElNRSk7CisJcnhfaGlnaCA9IHVwcGVyXzMyX2JpdHModHNmKTsKKworCWlmICgodTMyKXRzZiA8PSByeF9sb3cpCisJCXJ4X2hpZ2gtLTsKKworCS8qCiAJICogT2J0YWluIHRoZSBzdGF0dXMgYWJvdXQgdGhpcyBwYWNrZXQuCiAJICogVGhlIHNpZ25hbCBpcyB0aGUgUExDUCB2YWx1ZSwgYW5kIG5lZWRzIHRvIGJlIHN0cmlwcGVkCiAJICogb2YgdGhlIHByZWFtYmxlIGJpdCAoMHgwOCkuCiAJICovCisJcnhkZXNjLT50aW1lc3RhbXAgPSAoKHU2NClyeF9oaWdoIDw8IDMyKSB8IHJ4X2xvdzsKIAlyeGRlc2MtPnNpZ25hbCA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMiwgUlhEX1cyX1NJR05BTCkgJiB+MHgwODsKIAlyeGRlc2MtPnJzc2kgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDIsIFJYRF9XM19SU1NJKSAtCiAJICAgIGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5yc3NpX29mZnNldDsKIAlyeGRlc2MtPnNpemUgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9EQVRBQllURV9DT1VOVCk7CiAKLQlyeGRlc2MtPmRldl9mbGFncyA9IFJYRE9ORV9TSUdOQUxfUExDUDsKKwlyeGRlc2MtPmRldl9mbGFncyB8PSBSWERPTkVfU0lHTkFMX1BMQ1A7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX01ZX0JTUykpCiAJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9NWV9CU1M7CiB9CkBAIC0xMTMxLDE4ICsxMTg4LDE4IEBACiAgKiBJbnRlcnJ1cHQgZnVuY3Rpb25zLgogICovCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfdHhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgIGNvbnN0IGVudW0gaWVlZTgwMjExX3R4X3F1ZXVlIHF1ZXVlX2lkeCkKKwkJCSAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxdWV1ZV9pZHgpCiB7CiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgcXVldWVfaWR4KTsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHggKnByaXZfdHg7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2OwogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnk7CiAJc3RydWN0IHR4ZG9uZV9lbnRyeV9kZXNjIHR4ZGVzYzsKIAl1MzIgd29yZDsKIAogCXdoaWxlICghcnQyeDAwcXVldWVfZW1wdHkocXVldWUpKSB7CiAJCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUpOwotCQlwcml2X3R4ID0gZW50cnktPnByaXZfZGF0YTsKLQkJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCAwLCAmd29yZCk7CisJCWVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOworCQlydDJ4MDBfZGVzY19yZWFkKGVudHJ5X3ByaXYtPmRlc2MsIDAsICZ3b3JkKTsKIAogCQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9PV05FUl9OSUMpIHx8CiAJCSAgICAhcnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9WQUxJRCkpCkBAIC0xMTUxLDEwICsxMjA4LDIxIEBACiAJCS8qCiAJCSAqIE9idGFpbiB0aGUgc3RhdHVzIGFib3V0IHRoaXMgcGFja2V0LgogCQkgKi8KLQkJdHhkZXNjLnN0YXR1cyA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfUkVTVUxUKTsKKwkJdHhkZXNjLmZsYWdzID0gMDsKKwkJc3dpdGNoIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZCwgVFhEX1cwX1JFU1VMVCkpIHsKKwkJY2FzZSAwOiAvKiBTdWNjZXNzICovCisJCWNhc2UgMTogLyogU3VjY2VzcyB3aXRoIHJldHJ5ICovCisJCQlfX3NldF9iaXQoVFhET05FX1NVQ0NFU1MsICZ0eGRlc2MuZmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgMjogLyogRmFpbHVyZSwgZXhjZXNzaXZlIHJldHJpZXMgKi8KKwkJCV9fc2V0X2JpdChUWERPTkVfRVhDRVNTSVZFX1JFVFJZLCAmdHhkZXNjLmZsYWdzKTsKKwkJCS8qIERvbid0IGJyZWFrLCB0aGlzIGlzIGEgZmFpbGVkIGZyYW1lISAqLworCQlkZWZhdWx0OiAvKiBGYWlsdXJlICovCisJCQlfX3NldF9iaXQoVFhET05FX0ZBSUxVUkUsICZ0eGRlc2MuZmxhZ3MpOworCQl9CiAJCXR4ZGVzYy5yZXRyeSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfUkVUUllfQ09VTlQpOwogCi0JCXJ0MngwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBlbnRyeSwgJnR4ZGVzYyk7CisJCXJ0MngwMGxpYl90eGRvbmUoZW50cnksICZ0eGRlc2MpOwogCX0KIH0KIApAQCAtMTE5OCwxOSArMTI2NiwxOSBAQAogCSAqIDMgLSBBdGltIHJpbmcgdHJhbnNtaXQgZG9uZSBpbnRlcnJ1cHQuCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIENTUjdfVFhET05FX0FUSU1SSU5HKSkKLQkJcnQyNDAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIFJUMlgwMF9CQ05fUVVFVUVfQVRJTSk7CisJCXJ0MjQwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBRSURfQVRJTSk7CiAKIAkvKgogCSAqIDQgLSBQcmlvcml0eSByaW5nIHRyYW5zbWl0IGRvbmUgaW50ZXJydXB0LgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1I3X1RYRE9ORV9QUklPUklORykpCi0JCXJ0MjQwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTApOworCQlydDI0MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgUUlEX0FDX0JFKTsKIAogCS8qCiAJICogNSAtIFR4IHJpbmcgdHJhbnNtaXQgZG9uZSBpbnRlcnJ1cHQuCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIENTUjdfVFhET05FX1RYUklORykpCi0JCXJ0MjQwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTEpOworCQlydDI0MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgUUlEX0FDX0JLKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEzMDksMjMgKzEzNzcsMTAgQEAKICNpZmRlZiBDT05GSUdfUlQyNDAwUENJX0xFRFMKIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0xFRF9NT0RFKTsKIAotCXJ0MngwMGRldi0+bGVkX3JhZGlvLnJ0MngwMGRldiA9IHJ0MngwMGRldjsKLQlydDJ4MDBkZXYtPmxlZF9yYWRpby50eXBlID0gTEVEX1RZUEVfUkFESU87Ci0JcnQyeDAwZGV2LT5sZWRfcmFkaW8ubGVkX2Rldi5icmlnaHRuZXNzX3NldCA9Ci0JICAgIHJ0MjQwMHBjaV9icmlnaHRuZXNzX3NldDsKLQlydDJ4MDBkZXYtPmxlZF9yYWRpby5sZWRfZGV2LmJsaW5rX3NldCA9Ci0JICAgIHJ0MjQwMHBjaV9ibGlua19zZXQ7Ci0JcnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7Ci0KLQlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSkgewotCQlydDJ4MDBkZXYtPmxlZF9xdWFsLnJ0MngwMGRldiA9IHJ0MngwMGRldjsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC50eXBlID0gTEVEX1RZUEVfQUNUSVZJVFk7Ci0JCXJ0MngwMGRldi0+bGVkX3F1YWwubGVkX2Rldi5icmlnaHRuZXNzX3NldCA9Ci0JCSAgICBydDI0MDBwY2lfYnJpZ2h0bmVzc19zZXQ7Ci0JCXJ0MngwMGRldi0+bGVkX3F1YWwubGVkX2Rldi5ibGlua19zZXQgPQotCQkgICAgcnQyNDAwcGNpX2JsaW5rX3NldDsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC5mbGFncyA9IExFRF9JTklUSUFMSVpFRDsKLQl9CisJcnQyNDAwcGNpX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3JhZGlvLCBMRURfVFlQRV9SQURJTyk7CisJaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpCisJCXJ0MjQwMHBjaV9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9xdWFsLAorCQkJCSAgIExFRF9UWVBFX0FDVElWSVRZKTsKICNlbmRpZiAvKiBDT05GSUdfUlQyNDAwUENJX0xFRFMgKi8KIAogCS8qCkBAIC0xMzc1LDEzICsxNDMwLDExIEBACiAJLyoKIAkgKiBJbml0aWFsaXplIGFsbCBodyBmaWVsZHMuCiAJICovCi0JcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HOworCXJ0MngwMGRldi0+aHctPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJCQkgICAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSAwOwotCXJ0MngwMGRldi0+aHctPm1heF9zaWduYWwgPSBNQVhfU0lHTkFMOwotCXJ0MngwMGRldi0+aHctPm1heF9yc3NpID0gTUFYX1JYX1NTSTsKLQlydDJ4MDBkZXYtPmh3LT5xdWV1ZXMgPSAyOwogCi0JU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgJnJ0MngwMGRldl9wY2kocnQyeDAwZGV2KS0+ZGV2KTsKKwlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmRldik7CiAJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIocnQyeDAwZGV2LT5odywKIAkJCQlydDJ4MDBfZWVwcm9tX2FkZHIocnQyeDAwZGV2LAogCQkJCQkJICAgRUVQUk9NX01BQ19BRERSXzApKTsKQEAgLTE0MjcsOSArMTQ4MCwxMCBAQAogCXJ0MjQwMHBjaV9wcm9iZV9od19tb2RlKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIHRoZSBhdGltIHF1ZXVlCisJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgdGhlIGF0aW0gcXVldWUgYW5kIERNQS1tYXBwZWQgc2ticy4KIAkgKi8KIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAogCS8qCiAJICogU2V0IHRoZSByc3NpIG9mZnNldC4KQEAgLTE0NTYsOCArMTUxMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnQyNDAwcGNpX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgIGludCBxdWV1ZSwKK3N0YXRpYyBpbnQgcnQyNDAwcGNpX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CkBAIC0xNDY3LDcgKzE1MjAsNyBAQAogCSAqIHBlciBxdWV1ZS4gU28gYnkgZGVmYXVsdCB3ZSBvbmx5IGNvbmZpZ3VyZSB0aGUgVFggcXVldWUsCiAJICogYW5kIGlnbm9yZSBhbGwgb3RoZXIgY29uZmlndXJhdGlvbnMuCiAJICovCi0JaWYgKHF1ZXVlICE9IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMCkKKwlpZiAocXVldWUgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocnQyeDAwbWFjX2NvbmZfdHgoaHcsIHF1ZXVlLCBwYXJhbXMpKQpAQCAtMTQ5Niw2MCArMTU0OSw2IEBACiAJcmV0dXJuIHRzZjsKIH0KIAotc3RhdGljIGludCBydDI0MDBwY2lfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKGNvbnRyb2wtPnZpZik7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4OwotCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKLQl1MzIgcmVnOwotCi0JaWYgKHVubGlrZWx5KCFpbnRmLT5iZWFjb24pKQotCQlyZXR1cm4gLUVOT0JVRlM7Ci0JcHJpdl90eCA9IGludGYtPmJlYWNvbi0+cHJpdl9kYXRhOwotCi0JLyoKLQkgKiBGaWxsIGluIHNrYiBkZXNjcmlwdG9yCi0JICovCi0Jc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwotCW1lbXNldChza2JkZXNjLCAwLCBzaXplb2YoKnNrYmRlc2MpKTsKLQlza2JkZXNjLT5mbGFncyB8PSBGUkFNRV9ERVNDX0RSSVZFUl9HRU5FUkFURUQ7Ci0Jc2tiZGVzYy0+ZGF0YSA9IHNrYi0+ZGF0YTsKLQlza2JkZXNjLT5kYXRhX2xlbiA9IHNrYi0+bGVuOwotCXNrYmRlc2MtPmRlc2MgPSBwcml2X3R4LT5kZXNjOwotCXNrYmRlc2MtPmRlc2NfbGVuID0gaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplOwotCXNrYmRlc2MtPmVudHJ5ID0gaW50Zi0+YmVhY29uOwotCi0JLyoKLQkgKiBEaXNhYmxlIGJlYWNvbmluZyB3aGlsZSB3ZSBhcmUgcmVsb2FkaW5nIHRoZSBiZWFjb24gZGF0YSwKLQkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSMTQsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UU0ZfQ09VTlQsIDApOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UQkNOLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfQkVBQ09OX0dFTiwgMCk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIHJlZyk7Ci0KLQkvKgotCSAqIG1hYzgwMjExIGRvZXNuJ3QgcHJvdmlkZSB0aGUgY29udHJvbC0+cXVldWUgdmFyaWFibGUKLQkgKiBmb3IgYmVhY29ucy4gU2V0IG91ciBvd24gcXVldWUgaWRlbnRpZmljYXRpb24gc28KLQkgKiBpdCBjYW4gYmUgdXNlZCBkdXJpbmcgZGVzY3JpcHRvciBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQljb250cm9sLT5xdWV1ZSA9IFJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OOwotCXJ0MngwMGxpYl93cml0ZV90eF9kZXNjKHJ0MngwMGRldiwgc2tiLCBjb250cm9sKTsKLQotCS8qCi0JICogRW5hYmxlIGJlYWNvbiBnZW5lcmF0aW9uLgotCSAqIFdyaXRlIGVudGlyZSBiZWFjb24gd2l0aCBkZXNjcmlwdG9yIHRvIHJlZ2lzdGVyLAotCSAqIGFuZCBraWNrIHRoZSBiZWFjb24gZ2VuZXJhdG9yLgotCSAqLwotCW1lbWNweShwcml2X3R4LT5kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5raWNrX3R4X3F1ZXVlKHJ0MngwMGRldiwgY29udHJvbC0+cXVldWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgcnQyNDAwcGNpX3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKQEAgLTE1NzQsNyArMTU3Myw2IEBACiAJLmNvbmZfdHgJCT0gcnQyNDAwcGNpX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjQwMHBjaV9nZXRfdHNmLAotCS5iZWFjb25fdXBkYXRlCQk9IHJ0MjQwMHBjaV9iZWFjb25fdXBkYXRlLAogCS50eF9sYXN0X2JlYWNvbgkJPSBydDI0MDBwY2lfdHhfbGFzdF9iZWFjb24sCiB9OwogCkBAIC0xNTkyLDYgKzE1OTAsNyBAQAogCS5saW5rX3R1bmVyCQk9IHJ0MjQwMHBjaV9saW5rX3R1bmVyLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjQwMHBjaV93cml0ZV90eF9kZXNjLAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAorCS53cml0ZV9iZWFjb24JCT0gcnQyNDAwcGNpX3dyaXRlX2JlYWNvbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDI0MDBwY2lfa2lja190eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNDAwcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfZmlsdGVyCQk9IHJ0MjQwMHBjaV9jb25maWdfZmlsdGVyLApAQCAtMTYwNCwyOCArMTYwMywyOCBAQAogCS5lbnRyeV9udW0JCT0gUlhfRU5UUklFUywKIAkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFJYRF9ERVNDX1NJWkUsCi0JLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4KSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyNDAwcGNpX3F1ZXVlX3R4ID0gewogCS5lbnRyeV9udW0JCT0gVFhfRU5UUklFUywKIAkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCi0JLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4KSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyNDAwcGNpX3F1ZXVlX2JjbiA9IHsKIAkuZW50cnlfbnVtCQk9IEJFQUNPTl9FTlRSSUVTLAogCS5kYXRhX3NpemUJCT0gTUdNVF9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKLQkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHgpLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI0MDBwY2lfcXVldWVfYXRpbSA9IHsKIAkuZW50cnlfbnVtCQk9IEFUSU1fRU5UUklFUywKIAkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCi0JLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4KSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzIHJ0MjQwMHBjaV9vcHMgPSB7CkBAIC0xNjM0LDYgKzE2MzMsNyBAQAogCS5tYXhfYXBfaW50Zgk9IDEsCiAJLmVlcHJvbV9zaXplCT0gRUVQUk9NX1NJWkUsCiAJLnJmX3NpemUJPSBSRl9TSVpFLAorCS50eF9xdWV1ZXMJPSBOVU1fVFhfUVVFVUVTLAogCS5yeAkJPSAmcnQyNDAwcGNpX3F1ZXVlX3J4LAogCS50eAkJPSAmcnQyNDAwcGNpX3F1ZXVlX3R4LAogCS5iY24JCT0gJnJ0MjQwMHBjaV9xdWV1ZV9iY24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKaW5kZXggYTUyMTBmOS4uYmM1NTY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaApAQCAtMzcsOCArMzcsNiBAQAogICogU2lnbmFsIGluZm9ybWF0aW9uLgogICogRGVmYXVsIG9mZnNldCBpcyByZXF1aXJlZCBmb3IgUlNTSSA8LT4gZEJtIGNvbnZlcnNpb24uCiAgKi8KLSNkZWZpbmUgTUFYX1NJR05BTAkJCTEwMAotI2RlZmluZSBNQVhfUlhfU1NJCQkJLTEKICNkZWZpbmUgREVGQVVMVF9SU1NJX09GRlNFVAkJMTAwCiAKIC8qCkBAIC01Miw2ICs1MCwxMSBAQAogI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAogCiAvKgorICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KKyAqLworI2RlZmluZSBOVU1fVFhfUVVFVUVTCQkJMgorCisvKgogICogQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzKENTUikuCiAgKiBTb21lIHZhbHVlcyBhcmUgc2V0IGluIFRVLCB3aGVyZWFzIDEgVFUgPT0gMTAyNCB1cy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCmluZGV4IGY3NzMxZmIuLmFhNmRmYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKQEAgLTI3Nyw2ICsyNzcsMTcgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfaW5pdF9sZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgICBzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkLAorCQkJICAgICAgIGVudW0gbGVkX3R5cGUgdHlwZSkKK3sKKwlsZWQtPnJ0MngwMGRldiA9IHJ0MngwMGRldjsKKwlsZWQtPnR5cGUgPSB0eXBlOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IHJ0MjUwMHBjaV9icmlnaHRuZXNzX3NldDsKKwlsZWQtPmxlZF9kZXYuYmxpbmtfc2V0ID0gcnQyNTAwcGNpX2JsaW5rX3NldDsKKwlsZWQtPmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOworfQogI2VuZGlmIC8qIENPTkZJR19SVDI1MDBQQ0lfTEVEUyAqLwogCiAvKgpAQCAtMzE3LDggKzMyOCw3IEBACiAJCQkJICBzdHJ1Y3QgcnQyeDAwaW50Zl9jb25mICpjb25mLAogCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9Ci0JICAgIHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIFJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OKTsKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBRSURfQkVBQ09OKTsKIAl1bnNpZ25lZCBpbnQgYmNuX3ByZWxvYWQ7CiAJdTMyIHJlZzsKIApAQCAtNzE2LDM4ICs3MjYsMzQgQEAKIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9pbml0X3J4ZW50cnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCAqcHJpdl9yeCA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CiAJdTMyIHdvcmQ7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDEsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFJYRF9XMV9CVUZGRVJfQUREUkVTUywgcHJpdl9yeC0+ZGF0YV9kbWEpOwotCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfcngtPmRlc2MsIDEsIHdvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMSwgJndvcmQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cxX0JVRkZFUl9BRERSRVNTLCBza2JkZXNjLT5za2JfZG1hKTsKKwlydDJ4MDBfZGVzY193cml0ZShlbnRyeV9wcml2LT5kZXNjLCAxLCB3b3JkKTsKIAotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cwX09XTkVSX05JQywgMSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl9yeC0+ZGVzYywgMCwgd29yZCk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUoZW50cnlfcHJpdi0+ZGVzYywgMCwgd29yZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9pbml0X3R4ZW50cnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eCA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIAl1MzIgd29yZDsKIAotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMSwgJndvcmQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0JVRkZFUl9BRERSRVNTLCBwcml2X3R4LT5kYXRhX2RtYSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgMSwgd29yZCk7Ci0KLQlydDJ4MDBfZGVzY19yZWFkKHByaXZfdHgtPmRlc2MsIDAsICZ3b3JkKTsKKwlydDJ4MDBfZGVzY19yZWFkKGVudHJ5X3ByaXYtPmRlc2MsIDAsICZ3b3JkKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9WQUxJRCwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT1dORVJfTklDLCAwKTsKLQlydDJ4MDBfZGVzY193cml0ZShwcml2X3R4LT5kZXNjLCAwLCB3b3JkKTsKKwlydDJ4MDBfZGVzY193cml0ZShlbnRyeV9wcml2LT5kZXNjLCAwLCB3b3JkKTsKIH0KIAogc3RhdGljIGludCBydDI1MDBwY2lfaW5pdF9xdWV1ZXMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcnggKnByaXZfcng7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSAqZW50cnlfcHJpdjsKIAl1MzIgcmVnOwogCiAJLyoKQEAgLTc2MCwyOCArNzY2LDI4IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMl9OVU1fUFJJTywgcnQyeDAwZGV2LT50eFswXS5saW1pdCk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IyLCByZWcpOwogCi0JcHJpdl90eCA9IHJ0MngwMGRldi0+dHhbMV0uZW50cmllc1swXS5wcml2X2RhdGE7CisJZW50cnlfcHJpdiA9IHJ0MngwMGRldi0+dHhbMV0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjMsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjNfVFhfUklOR19SRUdJU1RFUiwKLQkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKKwkJCSAgIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjMsIHJlZyk7CiAKLQlwcml2X3R4ID0gcnQyeDAwZGV2LT50eFswXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKKwllbnRyeV9wcml2ID0gcnQyeDAwZGV2LT50eFswXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSNSwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSNV9QUklPX1JJTkdfUkVHSVNURVIsCi0JCQkgICBwcml2X3R4LT5kZXNjX2RtYSk7CisJCQkgICBlbnRyeV9wcml2LT5kZXNjX2RtYSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1I1LCByZWcpOwogCi0JcHJpdl90eCA9IHJ0MngwMGRldi0+YmNuWzFdLmVudHJpZXNbMF0ucHJpdl9kYXRhOworCWVudHJ5X3ByaXYgPSBydDJ4MDBkZXYtPmJjblsxXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSNCwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSNF9BVElNX1JJTkdfUkVHSVNURVIsCi0JCQkgICBwcml2X3R4LT5kZXNjX2RtYSk7CisJCQkgICBlbnRyeV9wcml2LT5kZXNjX2RtYSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1I0LCByZWcpOwogCi0JcHJpdl90eCA9IHJ0MngwMGRldi0+YmNuWzBdLmVudHJpZXNbMF0ucHJpdl9kYXRhOworCWVudHJ5X3ByaXYgPSBydDJ4MDBkZXYtPmJjblswXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSNiwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSNl9CRUFDT05fUklOR19SRUdJU1RFUiwKLQkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKKwkJCSAgIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjYsIHJlZyk7CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYQ1NSMSwgJnJlZyk7CkBAIC03ODksOSArNzk1LDEwIEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMV9OVU1fUlhELCBydDJ4MDBkZXYtPnJ4LT5saW1pdCk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhDU1IxLCByZWcpOwogCi0JcHJpdl9yeCA9IHJ0MngwMGRldi0+cngtPmVudHJpZXNbMF0ucHJpdl9kYXRhOworCWVudHJ5X3ByaXYgPSBydDJ4MDBkZXYtPnJ4LT5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYQ1NSMiwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMl9SWF9SSU5HX1JFR0lTVEVSLCBwcml2X3J4LT5kZXNjX2RtYSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMl9SWF9SSU5HX1JFR0lTVEVSLAorCQkJICAgZW50cnlfcHJpdi0+ZGVzY19kbWEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYQ1NSMiwgcmVnKTsKIAogCXJldHVybiAwOwpAQCAtOTQwLDYgKzk0NywyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJ0MjUwMHBjaV93YWl0X2JicF9yZWFkeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXVuc2lnbmVkIGludCBpOworCXU4IHZhbHVlOworCisJZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgeworCQlydDI1MDBwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAwLCAmdmFsdWUpOworCQlpZiAoKHZhbHVlICE9IDB4ZmYpICYmICh2YWx1ZSAhPSAweDAwKSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoUkVHSVNURVJfQlVTWV9ERUxBWSk7CisJfQorCisJRVJST1IocnQyeDAwZGV2LCAiQkJQIHJlZ2lzdGVyIGFjY2VzcyBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJcmV0dXJuIC1FQUNDRVM7Cit9CisKIHN0YXRpYyBpbnQgcnQyNTAwcGNpX2luaXRfYmJwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC05NDcsMTggKzk3MCw5IEBACiAJdTggcmVnX2lkOwogCXU4IHZhbHVlOwogCi0JZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewotCQlydDI1MDBwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAwLCAmdmFsdWUpOwotCQlpZiAoKHZhbHVlICE9IDB4ZmYpICYmICh2YWx1ZSAhPSAweDAwKSkKLQkJCWdvdG8gY29udGludWVfY3NyX2luaXQ7Ci0JCU5PVElDRShydDJ4MDBkZXYsICJXYWl0aW5nIGZvciBCQlAgcmVnaXN0ZXIuXG4iKTsKLQkJdWRlbGF5KFJFR0lTVEVSX0JVU1lfREVMQVkpOwotCX0KKwlpZiAodW5saWtlbHkocnQyNTAwcGNpX3dhaXRfYmJwX3JlYWR5KHJ0MngwMGRldikpKQorCQlyZXR1cm4gLUVBQ0NFUzsKIAotCUVSUk9SKHJ0MngwMGRldiwgIkJCUCByZWdpc3RlciBhY2Nlc3MgZmFpbGVkLCBhYm9ydGluZy5cbiIpOwotCXJldHVybiAtRUFDQ0VTOwotCi1jb250aW51ZV9jc3JfaW5pdDoKIAlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMywgMHgwMik7CiAJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDQsIDB4MTkpOwogCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNCwgMHgxYyk7CkBAIC0xMDEzLDcgKzEwMjcsOCBAQAogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWENTUjAsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRElTQUJMRV9SWCwKLQkJCSAgIHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRik7CisJCQkgICAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT0ZGKSB8fAorCQkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRl9MSU5LKSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhDU1IwLCByZWcpOwogfQogCkBAIC0xMDUwLDE3ICsxMDY1LDEwIEBACiAJLyoKIAkgKiBJbml0aWFsaXplIGFsbCByZWdpc3RlcnMuCiAJICovCi0JaWYgKHJ0MjUwMHBjaV9pbml0X3F1ZXVlcyhydDJ4MDBkZXYpIHx8Ci0JICAgIHJ0MjUwMHBjaV9pbml0X3JlZ2lzdGVycyhydDJ4MDBkZXYpIHx8Ci0JICAgIHJ0MjUwMHBjaV9pbml0X2JicChydDJ4MDBkZXYpKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIlJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCWlmICh1bmxpa2VseShydDI1MDBwY2lfaW5pdF9xdWV1ZXMocnQyeDAwZGV2KSB8fAorCQkgICAgIHJ0MjUwMHBjaV9pbml0X3JlZ2lzdGVycyhydDJ4MDBkZXYpIHx8CisJCSAgICAgcnQyNTAwcGNpX2luaXRfYmJwKHJ0MngwMGRldikpKQogCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKgotCSAqIEVuYWJsZSBpbnRlcnJ1cHRzLgotCSAqLwotCXJ0MjUwMHBjaV90b2dnbGVfaXJxKHJ0MngwMGRldiwgU1RBVEVfUkFESU9fSVJRX09OKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA4MiwxMSArMTA5MCw2IEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKLQotCS8qCi0JICogRGlzYWJsZSBpbnRlcnJ1cHRzLgotCSAqLwotCXJ0MjUwMHBjaV90b2dnbGVfaXJxKHJ0MngwMGRldiwgU1RBVEVfUkFESU9fSVJRX09GRik7CiB9CiAKIHN0YXRpYyBpbnQgcnQyNTAwcGNpX3NldF9zdGF0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtMTEyMSwxMCArMTEyNCw2IEBACiAJCW1zbGVlcCgxMCk7CiAJfQogCi0JTk9USUNFKHJ0MngwMGRldiwgIkRldmljZSBmYWlsZWQgdG8gZW50ZXIgc3RhdGUgJWQsICIKLQkgICAgICAgImN1cnJlbnQgZGV2aWNlIHN0YXRlOiBiYnAgJWQgYW5kIHJmICVkLlxuIiwKLQkgICAgICAgc3RhdGUsIGJicF9zdGF0ZSwgcmZfc3RhdGUpOwotCiAJcmV0dXJuIC1FQlVTWTsKIH0KIApAQCAtMTE0MiwxMSArMTE0MSwxMyBAQAogCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX1JYX09OOgogCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKLQkJcnQyNTAwcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09OKTsKLQkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19SWF9PRkY6CiAJY2FzZSBTVEFURV9SQURJT19SWF9PRkZfTElOSzoKLQkJcnQyNTAwcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CisJCXJ0MjUwMHBjaV90b2dnbGVfcngocnQyeDAwZGV2LCBzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OOgorCWNhc2UgU1RBVEVfUkFESU9fSVJRX09GRjoKKwkJcnQyNTAwcGNpX3RvZ2dsZV9pcnEocnQyeDAwZGV2LCBzdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfREVFUF9TTEVFUDoKIAljYXNlIFNUQVRFX1NMRUVQOgpAQCAtMTE1OSw2ICsxMTYwLDEwIEBACiAJCWJyZWFrOwogCX0KIAorCWlmICh1bmxpa2VseShyZXR2YWwpKQorCQlFUlJPUihydDJ4MDBkZXYsICJEZXZpY2UgZmFpbGVkIHRvIGVudGVyIHN0YXRlICVkICglZCkuXG4iLAorCQkgICAgICBzdGF0ZSwgcmV0dmFsKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTExNjcsMTYgKzExNzIsMjAgQEAKICAqLwogc3RhdGljIHZvaWQgcnQyNTAwcGNpX3dyaXRlX3R4X2Rlc2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCisJCQkJICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXYgPSBza2JkZXNjLT5lbnRyeS0+cHJpdl9kYXRhOwogCV9fbGUzMiAqdHhkID0gc2tiZGVzYy0+ZGVzYzsKIAl1MzIgd29yZDsKIAogCS8qCiAJICogU3RhcnQgd3JpdGluZyB0aGUgZGVzY3JpcHRvciB3b3Jkcy4KIAkgKi8KKwlydDJ4MDBfZGVzY19yZWFkKGVudHJ5X3ByaXYtPmRlc2MsIDEsICZ3b3JkKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9CVUZGRVJfQUREUkVTUywgc2tiZGVzYy0+c2tiX2RtYSk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUoZW50cnlfcHJpdi0+ZGVzYywgMSwgd29yZCk7CisKIAlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMiwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX0lWX09GRlNFVCwgSUVFRTgwMjExX0hFQURFUik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfQUlGUywgdHhkZXNjLT5haWZzKTsKQEAgLTEyMTAsOSArMTIxOSw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQ0lQSEVSX09XTkVSLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLAotCQkJICAgISEoY29udHJvbC0+ZmxhZ3MgJgotCQkJICAgICAgSUVFRTgwMjExX1RYQ1RMX0xPTkdfUkVUUllfTElNSVQpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9EQVRBQllURV9DT1VOVCwgc2tiZGVzYy0+ZGF0YV9sZW4pOworCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFVFJZX01PREUsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQ0lQSEVSX0FMRywgQ0lQSEVSX05PTkUpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMCwgd29yZCk7CiB9CkBAIC0xMjIwLDEyICsxMjI3LDQ2IEBACiAvKgogICogVFggZGF0YSBpbml0aWFsaXphdGlvbgogICovCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfd3JpdGVfYmVhY29uKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOworCXUzMiB3b3JkOworCXUzMiByZWc7CisKKwkvKgorCSAqIERpc2FibGUgYmVhY29uaW5nIHdoaWxlIHdlIGFyZSByZWxvYWRpbmcgdGhlIGJlYWNvbiBkYXRhLAorCSAqIG90aGVyd2lzZSB3ZSBtaWdodCBiZSBzZW5kaW5nIG91dCBpbnZhbGlkIGRhdGEuCisJICovCisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IxNCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RCQ04sIDApOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9CRUFDT05fR0VOLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgcmVnKTsKKworCS8qCisJICogUmVwbGFjZSBydDJ4MDBsaWIgYWxsb2NhdGVkIGRlc2NyaXB0b3Igd2l0aCB0aGUKKwkgKiBwb2ludGVyIHRvIHRoZSBfcmVhbF8gaGFyZHdhcmUgZGVzY3JpcHRvci4KKwkgKiBBZnRlciB0aGF0LCBtYXAgdGhlIGJlYWNvbiB0byBETUEgYW5kIHVwZGF0ZSB0aGUKKwkgKiBkZXNjcmlwdG9yLgorCSAqLworCW1lbWNweShlbnRyeV9wcml2LT5kZXNjLCBza2JkZXNjLT5kZXNjLCBza2JkZXNjLT5kZXNjX2xlbik7CisJc2tiZGVzYy0+ZGVzYyA9IGVudHJ5X3ByaXYtPmRlc2M7CisKKwlydDJ4MDBxdWV1ZV9tYXBfdHhza2IocnQyeDAwZGV2LCBlbnRyeS0+c2tiKTsKKworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMSwgJndvcmQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0JVRkZFUl9BRERSRVNTLCBza2JkZXNjLT5za2JfZG1hKTsKKwlydDJ4MDBfZGVzY193cml0ZShlbnRyeV9wcml2LT5kZXNjLCAxLCB3b3JkKTsKK30KKwogc3RhdGljIHZvaWQgcnQyNTAwcGNpX2tpY2tfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IHF1ZXVlKQorCQkJCSAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHF1ZXVlKQogewogCXUzMiByZWc7CiAKLQlpZiAocXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04pIHsKKwlpZiAocXVldWUgPT0gUUlEX0JFQUNPTikgewogCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1IxNF9CRUFDT05fR0VOKSkgewogCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMSk7CkBAIC0xMjM3LDEyICsxMjc4LDkgQEAKIAl9CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX1BSSU8sCi0JCQkgICAocXVldWUgPT0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX1RYLAotCQkJICAgKHF1ZXVlID09IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMSkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfS0lDS19BVElNLAotCQkJICAgKHF1ZXVlID09IFJUMlgwMF9CQ05fUVVFVUVfQVRJTSkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfS0lDS19QUklPLCAocXVldWUgPT0gUUlEX0FDX0JFKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX1RYLCAocXVldWUgPT0gUUlEX0FDX0JLKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX0FUSU0sIChxdWV1ZSA9PSBRSURfQVRJTSkpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKIH0KIApAQCAtMTI1MiwxNCArMTI5MCwxMyBAQAogc3RhdGljIHZvaWQgcnQyNTAwcGNpX2ZpbGxfcnhkb25lKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcnggKnByaXZfcnggPSBlbnRyeS0+cHJpdl9kYXRhOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7CiAJdTMyIHdvcmQwOwogCXUzMiB3b3JkMjsKIAotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQwKTsKLQlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDIsICZ3b3JkMik7CisJcnQyeDAwX2Rlc2NfcmVhZChlbnRyeV9wcml2LT5kZXNjLCAwLCAmd29yZDApOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMiwgJndvcmQyKTsKIAotCXJ4ZGVzYy0+ZmxhZ3MgPSAwOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9DUkNfRVJST1IpKQogCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX1BIWVNJQ0FMX0VSUk9SKSkKQEAgLTEyNzYsNyArMTMxMyw2IEBACiAJICAgIGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5yc3NpX29mZnNldDsKIAlyeGRlc2MtPnNpemUgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9EQVRBQllURV9DT1VOVCk7CiAKLQlyeGRlc2MtPmRldl9mbGFncyA9IDA7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX09GRE0pKQogCQlyeGRlc2MtPmRldl9mbGFncyB8PSBSWERPTkVfU0lHTkFMX1BMQ1A7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX01ZX0JTUykpCkBAIC0xMjg3LDE4ICsxMzIzLDE4IEBACiAgKiBJbnRlcnJ1cHQgZnVuY3Rpb25zLgogICovCiBzdGF0aWMgdm9pZCBydDI1MDBwY2lfdHhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgIGNvbnN0IGVudW0gaWVlZTgwMjExX3R4X3F1ZXVlIHF1ZXVlX2lkeCkKKwkJCSAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxdWV1ZV9pZHgpCiB7CiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgcXVldWVfaWR4KTsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHggKnByaXZfdHg7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2OwogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnk7CiAJc3RydWN0IHR4ZG9uZV9lbnRyeV9kZXNjIHR4ZGVzYzsKIAl1MzIgd29yZDsKIAogCXdoaWxlICghcnQyeDAwcXVldWVfZW1wdHkocXVldWUpKSB7CiAJCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUpOwotCQlwcml2X3R4ID0gZW50cnktPnByaXZfZGF0YTsKLQkJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCAwLCAmd29yZCk7CisJCWVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOworCQlydDJ4MDBfZGVzY19yZWFkKGVudHJ5X3ByaXYtPmRlc2MsIDAsICZ3b3JkKTsKIAogCQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9PV05FUl9OSUMpIHx8CiAJCSAgICAhcnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9WQUxJRCkpCkBAIC0xMzA3LDEwICsxMzQzLDIxIEBACiAJCS8qCiAJCSAqIE9idGFpbiB0aGUgc3RhdHVzIGFib3V0IHRoaXMgcGFja2V0LgogCQkgKi8KLQkJdHhkZXNjLnN0YXR1cyA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfUkVTVUxUKTsKKwkJdHhkZXNjLmZsYWdzID0gMDsKKwkJc3dpdGNoIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZCwgVFhEX1cwX1JFU1VMVCkpIHsKKwkJY2FzZSAwOiAvKiBTdWNjZXNzICovCisJCWNhc2UgMTogLyogU3VjY2VzcyB3aXRoIHJldHJ5ICovCisJCQlfX3NldF9iaXQoVFhET05FX1NVQ0NFU1MsICZ0eGRlc2MuZmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgMjogLyogRmFpbHVyZSwgZXhjZXNzaXZlIHJldHJpZXMgKi8KKwkJCV9fc2V0X2JpdChUWERPTkVfRVhDRVNTSVZFX1JFVFJZLCAmdHhkZXNjLmZsYWdzKTsKKwkJCS8qIERvbid0IGJyZWFrLCB0aGlzIGlzIGEgZmFpbGVkIGZyYW1lISAqLworCQlkZWZhdWx0OiAvKiBGYWlsdXJlICovCisJCQlfX3NldF9iaXQoVFhET05FX0ZBSUxVUkUsICZ0eGRlc2MuZmxhZ3MpOworCQl9CiAJCXR4ZGVzYy5yZXRyeSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfUkVUUllfQ09VTlQpOwogCi0JCXJ0MngwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBlbnRyeSwgJnR4ZGVzYyk7CisJCXJ0MngwMGxpYl90eGRvbmUoZW50cnksICZ0eGRlc2MpOwogCX0KIH0KIApAQCAtMTM1NCwxOSArMTQwMSwxOSBAQAogCSAqIDMgLSBBdGltIHJpbmcgdHJhbnNtaXQgZG9uZSBpbnRlcnJ1cHQuCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIENTUjdfVFhET05FX0FUSU1SSU5HKSkKLQkJcnQyNTAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIFJUMlgwMF9CQ05fUVVFVUVfQVRJTSk7CisJCXJ0MjUwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBRSURfQVRJTSk7CiAKIAkvKgogCSAqIDQgLSBQcmlvcml0eSByaW5nIHRyYW5zbWl0IGRvbmUgaW50ZXJydXB0LgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1I3X1RYRE9ORV9QUklPUklORykpCi0JCXJ0MjUwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTApOworCQlydDI1MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgUUlEX0FDX0JFKTsKIAogCS8qCiAJICogNSAtIFR4IHJpbmcgdHJhbnNtaXQgZG9uZSBpbnRlcnJ1cHQuCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIENTUjdfVFhET05FX1RYUklORykpCi0JCXJ0MjUwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTEpOworCQlydDI1MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgUUlEX0FDX0JLKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE0ODYsMjMgKzE1MzMsMTAgQEAKICNpZmRlZiBDT05GSUdfUlQyNTAwUENJX0xFRFMKIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0xFRF9NT0RFKTsKIAotCXJ0MngwMGRldi0+bGVkX3JhZGlvLnJ0MngwMGRldiA9IHJ0MngwMGRldjsKLQlydDJ4MDBkZXYtPmxlZF9yYWRpby50eXBlID0gTEVEX1RZUEVfUkFESU87Ci0JcnQyeDAwZGV2LT5sZWRfcmFkaW8ubGVkX2Rldi5icmlnaHRuZXNzX3NldCA9Ci0JICAgIHJ0MjUwMHBjaV9icmlnaHRuZXNzX3NldDsKLQlydDJ4MDBkZXYtPmxlZF9yYWRpby5sZWRfZGV2LmJsaW5rX3NldCA9Ci0JICAgIHJ0MjUwMHBjaV9ibGlua19zZXQ7Ci0JcnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7Ci0KLQlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSkgewotCQlydDJ4MDBkZXYtPmxlZF9xdWFsLnJ0MngwMGRldiA9IHJ0MngwMGRldjsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC50eXBlID0gTEVEX1RZUEVfQUNUSVZJVFk7Ci0JCXJ0MngwMGRldi0+bGVkX3F1YWwubGVkX2Rldi5icmlnaHRuZXNzX3NldCA9Ci0JCSAgICBydDI1MDBwY2lfYnJpZ2h0bmVzc19zZXQ7Ci0JCXJ0MngwMGRldi0+bGVkX3F1YWwubGVkX2Rldi5ibGlua19zZXQgPQotCQkgICAgcnQyNTAwcGNpX2JsaW5rX3NldDsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC5mbGFncyA9IExFRF9JTklUSUFMSVpFRDsKLQl9CisJcnQyNTAwcGNpX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3JhZGlvLCBMRURfVFlQRV9SQURJTyk7CisJaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpCisJCXJ0MjUwMHBjaV9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9xdWFsLAorCQkJCSAgIExFRF9UWVBFX0FDVElWSVRZKTsKICNlbmRpZiAvKiBDT05GSUdfUlQyNTAwUENJX0xFRFMgKi8KIAogCS8qCkBAIC0xNjk1LDEzICsxNzI5LDEyIEBACiAJLyoKIAkgKiBJbml0aWFsaXplIGFsbCBodyBmaWVsZHMuCiAJICovCi0JcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HOwotCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gMDsKLQlydDJ4MDBkZXYtPmh3LT5tYXhfc2lnbmFsID0gTUFYX1NJR05BTDsKLQlydDJ4MDBkZXYtPmh3LT5tYXhfcnNzaSA9IE1BWF9SWF9TU0k7Ci0JcnQyeDAwZGV2LT5ody0+cXVldWVzID0gMjsKKwlydDJ4MDBkZXYtPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAorCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOwogCi0JU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgJnJ0MngwMGRldl9wY2kocnQyeDAwZGV2KS0+ZGV2KTsKKwlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDA7CisKKwlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmRldik7CiAJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIocnQyeDAwZGV2LT5odywKIAkJCQlydDJ4MDBfZWVwcm9tX2FkZHIocnQyeDAwZGV2LAogCQkJCQkJICAgRUVQUk9NX01BQ19BRERSXzApKTsKQEAgLTE3NjUsOSArMTc5OCwxMCBAQAogCXJ0MjUwMHBjaV9wcm9iZV9od19tb2RlKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIHRoZSBhdGltIHF1ZXVlCisJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgdGhlIGF0aW0gcXVldWUgYW5kIERNQS1tYXBwZWQgc2ticy4KIAkgKi8KIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAogCS8qCiAJICogU2V0IHRoZSByc3NpIG9mZnNldC4KQEAgLTE4MDgsNjEgKzE4NDIsNiBAQAogCXJldHVybiB0c2Y7CiB9CiAKLXN0YXRpYyBpbnQgcnQyNTAwcGNpX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb250cm9sLT52aWYpOwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7Ci0JdTMyIHJlZzsKLQotCWlmICh1bmxpa2VseSghaW50Zi0+YmVhY29uKSkKLQkJcmV0dXJuIC1FTk9CVUZTOwotCi0JcHJpdl90eCA9IGludGYtPmJlYWNvbi0+cHJpdl9kYXRhOwotCi0JLyoKLQkgKiBGaWxsIGluIHNrYiBkZXNjcmlwdG9yCi0JICovCi0Jc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwotCW1lbXNldChza2JkZXNjLCAwLCBzaXplb2YoKnNrYmRlc2MpKTsKLQlza2JkZXNjLT5mbGFncyB8PSBGUkFNRV9ERVNDX0RSSVZFUl9HRU5FUkFURUQ7Ci0Jc2tiZGVzYy0+ZGF0YSA9IHNrYi0+ZGF0YTsKLQlza2JkZXNjLT5kYXRhX2xlbiA9IHNrYi0+bGVuOwotCXNrYmRlc2MtPmRlc2MgPSBwcml2X3R4LT5kZXNjOwotCXNrYmRlc2MtPmRlc2NfbGVuID0gaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplOwotCXNrYmRlc2MtPmVudHJ5ID0gaW50Zi0+YmVhY29uOwotCi0JLyoKLQkgKiBEaXNhYmxlIGJlYWNvbmluZyB3aGlsZSB3ZSBhcmUgcmVsb2FkaW5nIHRoZSBiZWFjb24gZGF0YSwKLQkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSMTQsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UU0ZfQ09VTlQsIDApOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UQkNOLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfQkVBQ09OX0dFTiwgMCk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIHJlZyk7Ci0KLQkvKgotCSAqIG1hYzgwMjExIGRvZXNuJ3QgcHJvdmlkZSB0aGUgY29udHJvbC0+cXVldWUgdmFyaWFibGUKLQkgKiBmb3IgYmVhY29ucy4gU2V0IG91ciBvd24gcXVldWUgaWRlbnRpZmljYXRpb24gc28KLQkgKiBpdCBjYW4gYmUgdXNlZCBkdXJpbmcgZGVzY3JpcHRvciBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQljb250cm9sLT5xdWV1ZSA9IFJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OOwotCXJ0MngwMGxpYl93cml0ZV90eF9kZXNjKHJ0MngwMGRldiwgc2tiLCBjb250cm9sKTsKLQotCS8qCi0JICogRW5hYmxlIGJlYWNvbiBnZW5lcmF0aW9uLgotCSAqIFdyaXRlIGVudGlyZSBiZWFjb24gd2l0aCBkZXNjcmlwdG9yIHRvIHJlZ2lzdGVyLAotCSAqIGFuZCBraWNrIHRoZSBiZWFjb24gZ2VuZXJhdG9yLgotCSAqLwotCW1lbWNweShwcml2X3R4LT5kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5raWNrX3R4X3F1ZXVlKHJ0MngwMGRldiwgY29udHJvbC0+cXVldWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgcnQyNTAwcGNpX3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKQEAgLTE4ODcsNyArMTg2Niw2IEBACiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjUwMHBjaV9nZXRfdHNmLAotCS5iZWFjb25fdXBkYXRlCQk9IHJ0MjUwMHBjaV9iZWFjb25fdXBkYXRlLAogCS50eF9sYXN0X2JlYWNvbgkJPSBydDI1MDBwY2lfdHhfbGFzdF9iZWFjb24sCiB9OwogCkBAIC0xOTA1LDYgKzE4ODMsNyBAQAogCS5saW5rX3R1bmVyCQk9IHJ0MjUwMHBjaV9saW5rX3R1bmVyLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjUwMHBjaV93cml0ZV90eF9kZXNjLAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAorCS53cml0ZV9iZWFjb24JCT0gcnQyNTAwcGNpX3dyaXRlX2JlYWNvbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDI1MDBwY2lfa2lja190eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNTAwcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfZmlsdGVyCQk9IHJ0MjUwMHBjaV9jb25maWdfZmlsdGVyLApAQCAtMTkxNywyOCArMTg5NiwyOCBAQAogCS5lbnRyeV9udW0JCT0gUlhfRU5UUklFUywKIAkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFJYRF9ERVNDX1NJWkUsCi0JLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4KSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyNTAwcGNpX3F1ZXVlX3R4ID0gewogCS5lbnRyeV9udW0JCT0gVFhfRU5UUklFUywKIAkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCi0JLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4KSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyNTAwcGNpX3F1ZXVlX2JjbiA9IHsKIAkuZW50cnlfbnVtCQk9IEJFQUNPTl9FTlRSSUVTLAogCS5kYXRhX3NpemUJCT0gTUdNVF9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKLQkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHgpLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDBwY2lfcXVldWVfYXRpbSA9IHsKIAkuZW50cnlfbnVtCQk9IEFUSU1fRU5UUklFUywKIAkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCi0JLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4KSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzIHJ0MjUwMHBjaV9vcHMgPSB7CkBAIC0xOTQ3LDYgKzE5MjYsNyBAQAogCS5tYXhfYXBfaW50Zgk9IDEsCiAJLmVlcHJvbV9zaXplCT0gRUVQUk9NX1NJWkUsCiAJLnJmX3NpemUJPSBSRl9TSVpFLAorCS50eF9xdWV1ZXMJPSBOVU1fVFhfUVVFVUVTLAogCS5yeAkJPSAmcnQyNTAwcGNpX3F1ZXVlX3J4LAogCS50eAkJPSAmcnQyNTAwcGNpX3F1ZXVlX3R4LAogCS5iY24JCT0gJnJ0MjUwMHBjaV9xdWV1ZV9iY24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKaW5kZXggMTM4OTk1NS4uNDJmMzc2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaApAQCAtNDgsOCArNDgsNiBAQAogICogU2lnbmFsIGluZm9ybWF0aW9uLgogICogRGVmYXVsIG9mZnNldCBpcyByZXF1aXJlZCBmb3IgUlNTSSA8LT4gZEJtIGNvbnZlcnNpb24uCiAgKi8KLSNkZWZpbmUgTUFYX1NJR05BTAkJCTEwMAotI2RlZmluZSBNQVhfUlhfU1NJCQkJLTEKICNkZWZpbmUgREVGQVVMVF9SU1NJX09GRlNFVAkJMTIxCiAKIC8qCkBAIC02Myw2ICs2MSwxMSBAQAogI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAogCiAvKgorICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KKyAqLworI2RlZmluZSBOVU1fVFhfUVVFVUVTCQkJMgorCisvKgogICogQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzKENTUikuCiAgKiBTb21lIHZhbHVlcyBhcmUgc2V0IGluIFRVLCB3aGVyZWFzIDEgVFUgPT0gMTAyNCB1cy4KICAqLwpAQCAtNzQ4LDcgKzc1MSw3IEBACiAjZGVmaW5lIExFRENTUl9MRURfREVGQVVMVAkJRklFTEQzMigweDAwMTAwMDAwKQogCiAvKgotICogQUVTIGNvbnRyb2wgcmVnaXN0ZXIuCisgKiBTRUNDU1IzOiBBRVMgY29udHJvbCByZWdpc3Rlci4KICAqLwogI2RlZmluZSBTRUNDU1IzCQkJCTB4MDBmYwogCkBAIC04OTIsNyArODk1LDcgQEAKICNkZWZpbmUgQVJUQ1NSMl9BQ0tfQ1RTXzU0TUJTCQlGSUVMRDMyKDB4ZmYwMDAwMDApCiAKIC8qCi0gKiBTRUNDU1IxX1JUMjUwOTogV0VQIGNvbnRyb2wgcmVnaXN0ZXIuCisgKiBTRUNDU1IxOiBXRVAgY29udHJvbCByZWdpc3Rlci4KICAqIEtJQ0tfRU5DUllQVDogS2ljayBlbmNyeXB0aW9uIGVuZ2luZSwgc2VsZi1jbGVhci4KICAqIE9ORV9TSE9UOiAwOiByaW5nIG1vZGUsIDE6IE9uZSBzaG90IG9ubHkgbW9kZS4KICAqIERFU0NfQUREUkVTUzogRGVzY3JpcHRvciBwaHlzaWNhbCBhZGRyZXNzIG9mIGZyYW1lLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCmluZGV4IGQ5MDUxMmYuLjM1NThjYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKQEAgLTc2LDEwICs3NiwxMCBAQAogCQkJCQkJY29uc3QgdW5zaWduZWQgaW50IG9mZnNldCwKIAkJCQkJCXZvaWQgKnZhbHVlLCBjb25zdCB1MTYgbGVuZ3RoKQogewotCWludCB0aW1lb3V0ID0gUkVHSVNURVJfVElNRU9VVCAqIChsZW5ndGggLyBzaXplb2YodTE2KSk7CiAJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X2J1ZmYocnQyeDAwZGV2LCBVU0JfTVVMVElfUkVBRCwKIAkJCQkgICAgICBVU0JfVkVORE9SX1JFUVVFU1RfSU4sIG9mZnNldCwKLQkJCQkgICAgICB2YWx1ZSwgbGVuZ3RoLCB0aW1lb3V0KTsKKwkJCQkgICAgICB2YWx1ZSwgbGVuZ3RoLAorCQkJCSAgICAgIFJFR0lTVEVSX1RJTUVPVVQxNihsZW5ndGgpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtMTA2LDEwICsxMDYsMTAgQEAKIAkJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogCQkJCQkJIHZvaWQgKnZhbHVlLCBjb25zdCB1MTYgbGVuZ3RoKQogewotCWludCB0aW1lb3V0ID0gUkVHSVNURVJfVElNRU9VVCAqIChsZW5ndGggLyBzaXplb2YodTE2KSk7CiAJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X2J1ZmYocnQyeDAwZGV2LCBVU0JfTVVMVElfV1JJVEUsCiAJCQkJICAgICAgVVNCX1ZFTkRPUl9SRVFVRVNUX09VVCwgb2Zmc2V0LAotCQkJCSAgICAgIHZhbHVlLCBsZW5ndGgsIHRpbWVvdXQpOworCQkJCSAgICAgIHZhbHVlLCBsZW5ndGgsCisJCQkJICAgICAgUkVHSVNURVJfVElNRU9VVDE2KGxlbmd0aCkpOwogfQogCiBzdGF0aWMgdTE2IHJ0MjUwMHVzYl9iYnBfY2hlY2soc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTMyMiw2ICszMjIsMTcgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgdm9pZCBydDI1MDB1c2JfaW5pdF9sZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgICBzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkLAorCQkJICAgICAgIGVudW0gbGVkX3R5cGUgdHlwZSkKK3sKKwlsZWQtPnJ0MngwMGRldiA9IHJ0MngwMGRldjsKKwlsZWQtPnR5cGUgPSB0eXBlOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IHJ0MjUwMHVzYl9icmlnaHRuZXNzX3NldDsKKwlsZWQtPmxlZF9kZXYuYmxpbmtfc2V0ID0gcnQyNTAwdXNiX2JsaW5rX3NldDsKKwlsZWQtPmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOworfQogI2VuZGlmIC8qIENPTkZJR19SVDI1MDBVU0JfTEVEUyAqLwogCiAvKgpAQCAtODYwLDYgKzg3MSwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJ0MjUwMHVzYl93YWl0X2JicF9yZWFkeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXVuc2lnbmVkIGludCBpOworCXU4IHZhbHVlOworCisJZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgeworCQlydDI1MDB1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAwLCAmdmFsdWUpOworCQlpZiAoKHZhbHVlICE9IDB4ZmYpICYmICh2YWx1ZSAhPSAweDAwKSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoUkVHSVNURVJfQlVTWV9ERUxBWSk7CisJfQorCisJRVJST1IocnQyeDAwZGV2LCAiQkJQIHJlZ2lzdGVyIGFjY2VzcyBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJcmV0dXJuIC1FQUNDRVM7Cit9CisKIHN0YXRpYyBpbnQgcnQyNTAwdXNiX2luaXRfYmJwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC04NjcsMTggKzg5NCw5IEBACiAJdTggdmFsdWU7CiAJdTggcmVnX2lkOwogCi0JZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewotCQlydDI1MDB1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAwLCAmdmFsdWUpOwotCQlpZiAoKHZhbHVlICE9IDB4ZmYpICYmICh2YWx1ZSAhPSAweDAwKSkKLQkJCWdvdG8gY29udGludWVfY3NyX2luaXQ7Ci0JCU5PVElDRShydDJ4MDBkZXYsICJXYWl0aW5nIGZvciBCQlAgcmVnaXN0ZXIuXG4iKTsKLQkJdWRlbGF5KFJFR0lTVEVSX0JVU1lfREVMQVkpOwotCX0KKwlpZiAodW5saWtlbHkocnQyNTAwdXNiX3dhaXRfYmJwX3JlYWR5KHJ0MngwMGRldikpKQorCQlyZXR1cm4gLUVBQ0NFUzsKIAotCUVSUk9SKHJ0MngwMGRldiwgIkJCUCByZWdpc3RlciBhY2Nlc3MgZmFpbGVkLCBhYm9ydGluZy5cbiIpOwotCXJldHVybiAtRUFDQ0VTOwotCi1jb250aW51ZV9jc3JfaW5pdDoKIAlydDI1MDB1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMywgMHgwMik7CiAJcnQyNTAwdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDQsIDB4MTkpOwogCXJ0MjUwMHVzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNCwgMHgxYyk7CkBAIC05MzQsNyArOTUyLDggQEAKIAogCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IyLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyX0RJU0FCTEVfUlgsCi0JCQkgICBzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkYpOworCQkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRikgfHwKKwkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkZfTElOSykpOwogCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMiwgcmVnKTsKIH0KIApAQCAtOTQzLDExICs5NjIsOSBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgcmVnaXN0ZXJzLgogCSAqLwotCWlmIChydDI1MDB1c2JfaW5pdF9yZWdpc3RlcnMocnQyeDAwZGV2KSB8fAotCSAgICBydDI1MDB1c2JfaW5pdF9iYnAocnQyeDAwZGV2KSkgewotCQlFUlJPUihydDJ4MDBkZXYsICJSZWdpc3RlciBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwlpZiAodW5saWtlbHkocnQyNTAwdXNiX2luaXRfcmVnaXN0ZXJzKHJ0MngwMGRldikgfHwKKwkJICAgICBydDI1MDB1c2JfaW5pdF9iYnAocnQyeDAwZGV2KSkpCiAJCXJldHVybiAtRUlPOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTAwMCwxMCArMTAxNyw2IEBACiAJCW1zbGVlcCgzMCk7CiAJfQogCi0JTk9USUNFKHJ0MngwMGRldiwgIkRldmljZSBmYWlsZWQgdG8gZW50ZXIgc3RhdGUgJWQsICIKLQkgICAgICAgImN1cnJlbnQgZGV2aWNlIHN0YXRlOiBiYnAgJWQgYW5kIHJmICVkLlxuIiwKLQkgICAgICAgc3RhdGUsIGJicF9zdGF0ZSwgcmZfc3RhdGUpOwotCiAJcmV0dXJuIC1FQlVTWTsKIH0KIApAQCAtMTAyMSwxMSArMTAzNCwxMyBAQAogCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX1JYX09OOgogCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKLQkJcnQyNTAwdXNiX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09OKTsKLQkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19SWF9PRkY6CiAJY2FzZSBTVEFURV9SQURJT19SWF9PRkZfTElOSzoKLQkJcnQyNTAwdXNiX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CisJCXJ0MjUwMHVzYl90b2dnbGVfcngocnQyeDAwZGV2LCBzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgU1RBVEVfUkFESU9fSVJRX09OOgorCWNhc2UgU1RBVEVfUkFESU9fSVJRX09GRjoKKwkJLyogTm8gc3VwcG9ydCwgYnV0IG5vIGVycm9yIGVpdGhlciAqLwogCQlicmVhazsKIAljYXNlIFNUQVRFX0RFRVBfU0xFRVA6CiAJY2FzZSBTVEFURV9TTEVFUDoKQEAgLTEwMzgsNiArMTA1MywxMCBAQAogCQlicmVhazsKIAl9CiAKKwlpZiAodW5saWtlbHkocmV0dmFsKSkKKwkJRVJST1IocnQyeDAwZGV2LCAiRGV2aWNlIGZhaWxlZCB0byBlbnRlciBzdGF0ZSAlZCAoJWQpLlxuIiwKKwkJICAgICAgc3RhdGUsIHJldHZhbCk7CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMDQ2LDggKzEwNjUsNyBAQAogICovCiBzdGF0aWMgdm9pZCBydDI1MDB1c2Jfd3JpdGVfdHhfZGVzYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKKwkJCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogewogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwogCV9fbGUzMiAqdHhkID0gc2tiZGVzYy0+ZGVzYzsKQEAgLTEwNzEsNyArMTA4OSw3IEBACiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCAyLCB3b3JkKTsKIAogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAwLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTElNSVQsIGNvbnRyb2wtPnJldHJ5X2xpbWl0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9MSU1JVCwgdHhkZXNjLT5yZXRyeV9saW1pdCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfTU9SRV9GUkFHLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX01PUkVfRlJBRywgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9BQ0ssCkBAIC0xMDgxLDEzICsxMDk5LDczIEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfTkVXX1NFUSwKLQkJCSAgICEhKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0ZJUlNUX0ZSQUdNRU5UKSk7CisJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfRklSU1RfRlJBR01FTlQsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfREFUQUJZVEVfQ09VTlQsIHNrYmRlc2MtPmRhdGFfbGVuKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9EQVRBQllURV9DT1VOVCwKKwkJCSAgIHNrYi0+bGVuIC0gc2tiZGVzYy0+ZGVzY19sZW4pOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0NJUEhFUiwgQ0lQSEVSX05PTkUpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMCwgd29yZCk7CiB9CiAKKy8qCisgKiBUWCBkYXRhIGluaXRpYWxpemF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHJ0MjUwMHVzYl9iZWFjb25kb25lKHN0cnVjdCB1cmIgKnVyYik7CisKK3N0YXRpYyB2b2lkIHJ0MjUwMHVzYl93cml0ZV9iZWFjb24oc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB0b191c2JfZGV2aWNlX2ludGYocnQyeDAwZGV2LT5kZXYpOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9iY24gKmJjbl9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CisJaW50IHBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgMSk7CisJaW50IGxlbmd0aDsKKwl1MTYgcmVnOworCisJLyoKKwkgKiBBZGQgdGhlIGRlc2NyaXB0b3IgaW4gZnJvbnQgb2YgdGhlIHNrYi4KKwkgKi8KKwlza2JfcHVzaChlbnRyeS0+c2tiLCBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZSk7CisJbWVtY3B5KGVudHJ5LT5za2ItPmRhdGEsIHNrYmRlc2MtPmRlc2MsIHNrYmRlc2MtPmRlc2NfbGVuKTsKKwlza2JkZXNjLT5kZXNjID0gZW50cnktPnNrYi0+ZGF0YTsKKworCS8qCisJICogRGlzYWJsZSBiZWFjb25pbmcgd2hpbGUgd2UgYXJlIHJlbG9hZGluZyB0aGUgYmVhY29uIGRhdGEsCisJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KKwkgKi8KKwlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMTksICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X1RTRl9DT1VOVCwgMCk7CisJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVEJDTiwgMCk7CisJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfQkVBQ09OX0dFTiwgMCk7CisJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgcmVnKTsKKworCS8qCisJICogVVNCIGRldmljZXMgY2Fubm90IGJsaW5kbHkgcGFzcyB0aGUgc2tiLT5sZW4gYXMgdGhlCisJICogbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHVzYl9maWxsX2J1bGtfdXJiLiBQYXNzIHRoZSBza2IKKwkgKiB0byB0aGUgZHJpdmVyIHRvIGRldGVybWluZSB3aGF0IHRoZSBsZW5ndGggc2hvdWxkIGJlLgorCSAqLworCWxlbmd0aCA9IHJ0MngwMGRldi0+b3BzLT5saWItPmdldF90eF9kYXRhX2xlbihydDJ4MDBkZXYsIGVudHJ5LT5za2IpOworCisJdXNiX2ZpbGxfYnVsa191cmIoYmNuX3ByaXYtPnVyYiwgdXNiX2RldiwgcGlwZSwKKwkJCSAgZW50cnktPnNrYi0+ZGF0YSwgbGVuZ3RoLCBydDI1MDB1c2JfYmVhY29uZG9uZSwKKwkJCSAgZW50cnkpOworCisJLyoKKwkgKiBTZWNvbmQgd2UgbmVlZCB0byBjcmVhdGUgdGhlIGd1YXJkaWFuIGJ5dGUuCisJICogV2Ugb25seSBuZWVkIGEgc2luZ2xlIGJ5dGUsIHNvIGxldHMgcmVjeWNsZQorCSAqIHRoZSAnZmxhZ3MnIGZpZWxkIHdlIGFyZSBub3QgdXNpbmcgZm9yIGJlYWNvbnMuCisJICovCisJYmNuX3ByaXYtPmd1YXJkaWFuX2RhdGEgPSAwOworCXVzYl9maWxsX2J1bGtfdXJiKGJjbl9wcml2LT5ndWFyZGlhbl91cmIsIHVzYl9kZXYsIHBpcGUsCisJCQkgICZiY25fcHJpdi0+Z3VhcmRpYW5fZGF0YSwgMSwgcnQyNTAwdXNiX2JlYWNvbmRvbmUsCisJCQkgIGVudHJ5KTsKKworCS8qCisJICogU2VuZCBvdXQgdGhlIGd1YXJkaWFuIGJ5dGUuCisJICovCisJdXNiX3N1Ym1pdF91cmIoYmNuX3ByaXYtPmd1YXJkaWFuX3VyYiwgR0ZQX0FUT01JQyk7Cit9CisKIHN0YXRpYyBpbnQgcnQyNTAwdXNiX2dldF90eF9kYXRhX2xlbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTExMDMsMTYgKzExODEsMTUgQEAKIAlyZXR1cm4gbGVuZ3RoOwogfQogCi0vKgotICogVFggZGF0YSBpbml0aWFsaXphdGlvbgotICovCiBzdGF0aWMgdm9pZCBydDI1MDB1c2Jfa2lja190eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgcXVldWUpCisJCQkJICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcXVldWUpCiB7CiAJdTE2IHJlZzsKIAotCWlmIChxdWV1ZSAhPSBSVDJYMDBfQkNOX1FVRVVFX0JFQUNPTikKKwlpZiAocXVldWUgIT0gUUlEX0JFQUNPTikgeworCQlydDJ4MDB1c2Jfa2lja190eF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlKTsKIAkJcmV0dXJuOworCX0KIAogCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgJnJlZyk7CiAJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMTYocmVnLCBUWFJYX0NTUjE5X0JFQUNPTl9HRU4pKSB7CkBAIC0xMTM4LDMwICsxMjE1LDI4IEBACiBzdGF0aWMgdm9pZCBydDI1MDB1c2JfZmlsbF9yeGRvbmUoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCQkgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9yeCAqcHJpdl9yeCA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CiAJX19sZTMyICpyeGQgPQogCSAgICAoX19sZTMyICopKGVudHJ5LT5za2ItPmRhdGEgKwotCQkgICAgICAgKHByaXZfcngtPnVyYi0+YWN0dWFsX2xlbmd0aCAtIGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplKSk7Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplICsgMjsKKwkJICAgICAgIChlbnRyeV9wcml2LT51cmItPmFjdHVhbF9sZW5ndGggLQorCQkJZW50cnktPnF1ZXVlLT5kZXNjX3NpemUpKTsKIAl1MzIgd29yZDA7CiAJdTMyIHdvcmQxOwogCiAJLyoKLQkgKiBDb3B5IGRlc2NyaXB0b3IgdG8gdGhlIGF2YWlsYWJsZSBoZWFkcm9vbSBpbnNpZGUgdGhlIHNrYnVmZmVyLgorCSAqIENvcHkgZGVzY3JpcHRvciB0byB0aGUgc2tiZGVzYy0+ZGVzYyBidWZmZXIsIG1ha2luZyBpdCBzYWZlIGZyb20gbW92aW5nIG9mCisJICogZnJhbWUgZGF0YSBpbiBydDJ4MDB1c2IuCiAJICovCi0Jc2tiX3B1c2goZW50cnktPnNrYiwgb2Zmc2V0KTsKLQltZW1jcHkoZW50cnktPnNrYi0+ZGF0YSwgcnhkLCBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZSk7Ci0JcnhkID0gKF9fbGUzMiAqKWVudHJ5LT5za2ItPmRhdGE7CisJbWVtY3B5KHNrYmRlc2MtPmRlc2MsIHJ4ZCwgc2tiZGVzYy0+ZGVzY19sZW4pOworCXJ4ZCA9IChfX2xlMzIgKilza2JkZXNjLT5kZXNjOwogCiAJLyoKLQkgKiBUaGUgZGVzY3JpcHRvciBpcyBub3cgYWxpZ25lZCB0byA0IGJ5dGVzIGFuZCB0aHVzIGl0IGlzCi0JICogbm93IHNhZmUgdG8gcmVhZCBpdCBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4KKwkgKiBJdCBpcyBub3cgc2FmZSB0byByZWFkIHRoZSBkZXNjcmlwdG9yIG9uIGFsbCBhcmNoaXRlY3R1cmVzLgogCSAqLwogCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAwLCAmd29yZDApOwogCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAxLCAmd29yZDEpOwogCi0JcnhkZXNjLT5mbGFncyA9IDA7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX0NSQ19FUlJPUikpCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfUEhZU0lDQUxfRVJST1IpKQpAQCAtMTE3OCw3ICsxMjUzLDYgQEAKIAkgICAgZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0OwogCXJ4ZGVzYy0+c2l6ZSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX0RBVEFCWVRFX0NPVU5UKTsKIAotCXJ4ZGVzYy0+ZGV2X2ZsYWdzID0gMDsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfT0ZETSkpCiAJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9TSUdOQUxfUExDUDsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfTVlfQlNTKSkKQEAgLTExODcsMTYgKzEyNjEsNyBAQAogCS8qCiAJICogQWRqdXN0IHRoZSBza2IgbWVtb3J5IHdpbmRvdyB0byB0aGUgZnJhbWUgYm91bmRhcmllcy4KIAkgKi8KLQlza2JfcHVsbChlbnRyeS0+c2tiLCBvZmZzZXQpOwogCXNrYl90cmltKGVudHJ5LT5za2IsIHJ4ZGVzYy0+c2l6ZSk7Ci0KLQkvKgotCSAqIFNldCBkZXNjcmlwdG9yIGFuZCBkYXRhIHBvaW50ZXIuCi0JICovCi0Jc2tiZGVzYy0+ZGF0YSA9IGVudHJ5LT5za2ItPmRhdGE7Ci0Jc2tiZGVzYy0+ZGF0YV9sZW4gPSByeGRlc2MtPnNpemU7Ci0Jc2tiZGVzYy0+ZGVzYyA9IHJ4ZDsKLQlza2JkZXNjLT5kZXNjX2xlbiA9IGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplOwogfQogCiAvKgpAQCAtMTIwNSw3ICsxMjcwLDcgQEAKIHN0YXRpYyB2b2lkIHJ0MjUwMHVzYl9iZWFjb25kb25lKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBxdWV1ZV9lbnRyeSAqKXVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuICpwcml2X2JjbiA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqYmNuX3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwogCiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJmVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybjsKQEAgLTEyMTYsOSArMTI4MSw5IEBACiAJICogT3RoZXJ3aXNlIHdlIHNob3VsZCBmcmVlIHRoZSBza19idWZmZXIsIHRoZSBkZXZpY2UKIAkgKiBzaG91bGQgYmUgZG9pbmcgdGhlIHJlc3Qgb2YgdGhlIHdvcmsgbm93LgogCSAqLwotCWlmIChwcml2X2Jjbi0+Z3VhcmRpYW5fdXJiID09IHVyYikgewotCQl1c2Jfc3VibWl0X3VyYihwcml2X2Jjbi0+dXJiLCBHRlBfQVRPTUlDKTsKLQl9IGVsc2UgaWYgKHByaXZfYmNuLT51cmIgPT0gdXJiKSB7CisJaWYgKGJjbl9wcml2LT5ndWFyZGlhbl91cmIgPT0gdXJiKSB7CisJCXVzYl9zdWJtaXRfdXJiKGJjbl9wcml2LT51cmIsIEdGUF9BVE9NSUMpOworCX0gZWxzZSBpZiAoYmNuX3ByaXYtPnVyYiA9PSB1cmIpIHsKIAkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKIAkJZW50cnktPnNrYiA9IE5VTEw7CiAJfQpAQCAtMTM5NywyMyArMTQ2MiwxMCBAQAogI2lmZGVmIENPTkZJR19SVDI1MDBVU0JfTEVEUwogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTEVEX01PREUpOwogCi0JcnQyeDAwZGV2LT5sZWRfcmFkaW8ucnQyeDAwZGV2ID0gcnQyeDAwZGV2OwotCXJ0MngwMGRldi0+bGVkX3JhZGlvLnR5cGUgPSBMRURfVFlQRV9SQURJTzsKLQlydDJ4MDBkZXYtPmxlZF9yYWRpby5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0KLQkgICAgcnQyNTAwdXNiX2JyaWdodG5lc3Nfc2V0OwotCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYmxpbmtfc2V0ID0KLQkgICAgcnQyNTAwdXNiX2JsaW5rX3NldDsKLQlydDJ4MDBkZXYtPmxlZF9yYWRpby5mbGFncyA9IExFRF9JTklUSUFMSVpFRDsKLQotCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZKSB7Ci0JCXJ0MngwMGRldi0+bGVkX3F1YWwucnQyeDAwZGV2ID0gcnQyeDAwZGV2OwotCQlydDJ4MDBkZXYtPmxlZF9xdWFsLnR5cGUgPSBMRURfVFlQRV9BQ1RJVklUWTsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0KLQkJICAgIHJ0MjUwMHVzYl9icmlnaHRuZXNzX3NldDsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC5sZWRfZGV2LmJsaW5rX3NldCA9Ci0JCSAgICBydDI1MDB1c2JfYmxpbmtfc2V0OwotCQlydDJ4MDBkZXYtPmxlZF9xdWFsLmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOwotCX0KKwlydDI1MDB1c2JfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcmFkaW8sIExFRF9UWVBFX1JBRElPKTsKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSkKKwkJcnQyNTAwdXNiX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3F1YWwsCisJCQkJICAgTEVEX1RZUEVfQUNUSVZJVFkpOwogI2VuZGlmIC8qIENPTkZJR19SVDI1MDBVU0JfTEVEUyAqLwogCiAJLyoKQEAgLTE2MDAsMTMgKzE2NTIsMTIgQEAKIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9CiAJICAgIElFRUU4MDIxMV9IV19IT1NUX0dFTl9CRUFDT05fVEVNUExBVEUgfAogCSAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORzsKLQlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IFRYRF9ERVNDX1NJWkU7Ci0JcnQyeDAwZGV2LT5ody0+bWF4X3NpZ25hbCA9IE1BWF9TSUdOQUw7Ci0JcnQyeDAwZGV2LT5ody0+bWF4X3Jzc2kgPSBNQVhfUlhfU1NJOwotCXJ0MngwMGRldi0+aHctPnF1ZXVlcyA9IDI7CisJICAgIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAorCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKIAotCVNFVF9JRUVFODAyMTFfREVWKHJ0MngwMGRldi0+aHcsICZydDJ4MDBkZXZfdXNiKHJ0MngwMGRldiktPmRldik7CisJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBUWERfREVTQ19TSVpFOworCisJU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgcnQyeDAwZGV2LT5kZXYpOwogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHJ0MngwMGRldi0+aHcsCiAJCQkJcnQyeDAwX2VlcHJvbV9hZGRyKHJ0MngwMGRldiwKIAkJCQkJCSAgIEVFUFJPTV9NQUNfQUREUl8wKSk7CkBAIC0xNjg0LDk3ICsxNzM1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIElFRUU4MDIxMSBzdGFjayBjYWxsYmFjayBmdW5jdGlvbnMuCi0gKi8KLXN0YXRpYyBpbnQgcnQyNTAwdXNiX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gcnQyeDAwZGV2X3VzYl9kZXYocnQyeDAwZGV2KTsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb250cm9sLT52aWYpOwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9iY24gKnByaXZfYmNuOwotCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKLQlpbnQgcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1c2JfZGV2LCAxKTsKLQlpbnQgbGVuZ3RoOwotCXUxNiByZWc7Ci0KLQlpZiAodW5saWtlbHkoIWludGYtPmJlYWNvbikpCi0JCXJldHVybiAtRU5PQlVGUzsKLQotCXByaXZfYmNuID0gaW50Zi0+YmVhY29uLT5wcml2X2RhdGE7Ci0KLQkvKgotCSAqIEFkZCB0aGUgZGVzY3JpcHRvciBpbiBmcm9udCBvZiB0aGUgc2tiLgotCSAqLwotCXNrYl9wdXNoKHNrYiwgaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplKTsKLQltZW1zZXQoc2tiLT5kYXRhLCAwLCBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemUpOwotCi0JLyoKLQkgKiBGaWxsIGluIHNrYiBkZXNjcmlwdG9yCi0JICovCi0Jc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwotCW1lbXNldChza2JkZXNjLCAwLCBzaXplb2YoKnNrYmRlc2MpKTsKLQlza2JkZXNjLT5mbGFncyB8PSBGUkFNRV9ERVNDX0RSSVZFUl9HRU5FUkFURUQ7Ci0Jc2tiZGVzYy0+ZGF0YSA9IHNrYi0+ZGF0YSArIGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZTsKLQlza2JkZXNjLT5kYXRhX2xlbiA9IHNrYi0+bGVuIC0gaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplOwotCXNrYmRlc2MtPmRlc2MgPSBza2ItPmRhdGE7Ci0Jc2tiZGVzYy0+ZGVzY19sZW4gPSBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemU7Ci0Jc2tiZGVzYy0+ZW50cnkgPSBpbnRmLT5iZWFjb247Ci0KLQkvKgotCSAqIERpc2FibGUgYmVhY29uaW5nIHdoaWxlIHdlIGFyZSByZWxvYWRpbmcgdGhlIGJlYWNvbiBkYXRhLAotCSAqIG90aGVyd2lzZSB3ZSBtaWdodCBiZSBzZW5kaW5nIG91dCBpbnZhbGlkIGRhdGEuCi0JICovCi0JcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9UU0ZfQ09VTlQsIDApOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X1RCQ04sIDApOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X0JFQUNPTl9HRU4sIDApOwotCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTksIHJlZyk7Ci0KLQkvKgotCSAqIG1hYzgwMjExIGRvZXNuJ3QgcHJvdmlkZSB0aGUgY29udHJvbC0+cXVldWUgdmFyaWFibGUKLQkgKiBmb3IgYmVhY29ucy4gU2V0IG91ciBvd24gcXVldWUgaWRlbnRpZmljYXRpb24gc28KLQkgKiBpdCBjYW4gYmUgdXNlZCBkdXJpbmcgZGVzY3JpcHRvciBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQljb250cm9sLT5xdWV1ZSA9IFJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OOwotCXJ0MngwMGxpYl93cml0ZV90eF9kZXNjKHJ0MngwMGRldiwgc2tiLCBjb250cm9sKTsKLQotCS8qCi0JICogVVNCIGRldmljZXMgY2Fubm90IGJsaW5kbHkgcGFzcyB0aGUgc2tiLT5sZW4gYXMgdGhlCi0JICogbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHVzYl9maWxsX2J1bGtfdXJiLiBQYXNzIHRoZSBza2IKLQkgKiB0byB0aGUgZHJpdmVyIHRvIGRldGVybWluZSB3aGF0IHRoZSBsZW5ndGggc2hvdWxkIGJlLgotCSAqLwotCWxlbmd0aCA9IHJ0MjUwMHVzYl9nZXRfdHhfZGF0YV9sZW4ocnQyeDAwZGV2LCBza2IpOwotCi0JdXNiX2ZpbGxfYnVsa191cmIocHJpdl9iY24tPnVyYiwgdXNiX2RldiwgcGlwZSwKLQkJCSAgc2tiLT5kYXRhLCBsZW5ndGgsIHJ0MjUwMHVzYl9iZWFjb25kb25lLAotCQkJICBpbnRmLT5iZWFjb24pOwotCi0JLyoKLQkgKiBTZWNvbmQgd2UgbmVlZCB0byBjcmVhdGUgdGhlIGd1YXJkaWFuIGJ5dGUuCi0JICogV2Ugb25seSBuZWVkIGEgc2luZ2xlIGJ5dGUsIHNvIGxldHMgcmVjeWNsZQotCSAqIHRoZSAnZmxhZ3MnIGZpZWxkIHdlIGFyZSBub3QgdXNpbmcgZm9yIGJlYWNvbnMuCi0JICovCi0JcHJpdl9iY24tPmd1YXJkaWFuX2RhdGEgPSAwOwotCXVzYl9maWxsX2J1bGtfdXJiKHByaXZfYmNuLT5ndWFyZGlhbl91cmIsIHVzYl9kZXYsIHBpcGUsCi0JCQkgICZwcml2X2Jjbi0+Z3VhcmRpYW5fZGF0YSwgMSwgcnQyNTAwdXNiX2JlYWNvbmRvbmUsCi0JCQkgIGludGYtPmJlYWNvbik7Ci0KLQkvKgotCSAqIFNlbmQgb3V0IHRoZSBndWFyZGlhbiBieXRlLgotCSAqLwotCXVzYl9zdWJtaXRfdXJiKHByaXZfYmNuLT5ndWFyZGlhbl91cmIsIEdGUF9BVE9NSUMpOwotCi0JLyoKLQkgKiBFbmFibGUgYmVhY29uIGdlbmVyYXRpb24uCi0JICovCi0JcnQyNTAwdXNiX2tpY2tfdHhfcXVldWUocnQyeDAwZGV2LCBjb250cm9sLT5xdWV1ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHJ0MjUwMHVzYl9tYWM4MDIxMV9vcHMgPSB7CiAJLnR4CQkJPSBydDJ4MDBtYWNfdHgsCiAJLnN0YXJ0CQkJPSBydDJ4MDBtYWNfc3RhcnQsCkBAIC0xNzg4LDcgKzE3NDgsNiBAQAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAotCS5iZWFjb25fdXBkYXRlCQk9IHJ0MjUwMHVzYl9iZWFjb25fdXBkYXRlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0MjUwMHVzYl9ydDJ4MDBfb3BzID0gewpAQCAtMTgwMyw2ICsxNzYyLDcgQEAKIAkubGlua190dW5lcgkJPSBydDI1MDB1c2JfbGlua190dW5lciwKIAkud3JpdGVfdHhfZGVzYwkJPSBydDI1MDB1c2Jfd3JpdGVfdHhfZGVzYywKIAkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDB1c2Jfd3JpdGVfdHhfZGF0YSwKKwkud3JpdGVfYmVhY29uCQk9IHJ0MjUwMHVzYl93cml0ZV9iZWFjb24sCiAJLmdldF90eF9kYXRhX2xlbgk9IHJ0MjUwMHVzYl9nZXRfdHhfZGF0YV9sZW4sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyNTAwdXNiX2tpY2tfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjUwMHVzYl9maWxsX3J4ZG9uZSwKQEAgLTE4MTYsMTQgKzE3NzYsMTQgQEAKIAkuZW50cnlfbnVtCQk9IFJYX0VOVFJJRVMsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBSWERfREVTQ19TSVpFLAotCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9yeCksCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0MjUwMHVzYl9xdWV1ZV90eCA9IHsKIAkuZW50cnlfbnVtCQk9IFRYX0VOVFJJRVMsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAotCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eCksCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0MjUwMHVzYl9xdWV1ZV9iY24gPSB7CkBAIC0xODM3LDcgKzE3OTcsNyBAQAogCS5lbnRyeV9udW0JCT0gQVRJTV9FTlRSSUVTLAogCS5kYXRhX3NpemUJCT0gREFUQV9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKLQkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfdHgpLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMF9vcHMgcnQyNTAwdXNiX29wcyA9IHsKQEAgLTE4NDYsNiArMTgwNiw3IEBACiAJLm1heF9hcF9pbnRmCT0gMSwKIAkuZWVwcm9tX3NpemUJPSBFRVBST01fU0laRSwKIAkucmZfc2l6ZQk9IFJGX1NJWkUsCisJLnR4X3F1ZXVlcwk9IE5VTV9UWF9RVUVVRVMsCiAJLnJ4CQk9ICZydDI1MDB1c2JfcXVldWVfcngsCiAJLnR4CQk9ICZydDI1MDB1c2JfcXVldWVfdHgsCiAJLmJjbgkJPSAmcnQyNTAwdXNiX3F1ZXVlX2JjbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaAppbmRleCBhMzdhMDY4Li40NzY5ZmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCkBAIC00OCw4ICs0OCw2IEBACiAgKiBTaWduYWwgaW5mb3JtYXRpb24uCiAgKiBEZWZhdWwgb2Zmc2V0IGlzIHJlcXVpcmVkIGZvciBSU1NJIDwtPiBkQm0gY29udmVyc2lvbi4KICAqLwotI2RlZmluZSBNQVhfU0lHTkFMCQkJMTAwCi0jZGVmaW5lIE1BWF9SWF9TU0kJCQktMQogI2RlZmluZSBERUZBVUxUX1JTU0lfT0ZGU0VUCQkxMjAKIAogLyoKQEAgLTYzLDYgKzYxLDExIEBACiAjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CiAKIC8qCisgKiBOdW1iZXIgb2YgVFggcXVldWVzLgorICovCisjZGVmaW5lIE5VTV9UWF9RVUVVRVMJCQkyCisKKy8qCiAgKiBDb250cm9sL1N0YXR1cyBSZWdpc3RlcnMoQ1NSKS4KICAqIFNvbWUgdmFsdWVzIGFyZSBzZXQgaW4gVFUsIHdoZXJlYXMgMSBUVSA9PSAxMDI0IHVzLgogICovCkBAIC0yMDYsNyArMjA5LDcgQEAKICNkZWZpbmUgTUFDX0NTUjIxX09GRl9QRVJJT0QJCUZJRUxEMTYoMHhmZjAwKQogCiAvKgotICogQ29sbGlzaW9uIHdpbmRvdyBjb250cm9sIHJlZ2lzdGVyLgorICogTUFDX0NTUjIyOiBDb2xsaXNpb24gd2luZG93IGNvbnRyb2wgcmVnaXN0ZXIuCiAgKi8KICNkZWZpbmUgTUFDX0NTUjIyCQkJMHgwNDJjCiAKQEAgLTI5Myw3ICsyOTYsNyBAQAogI2RlZmluZSBUWFJYX0NTUjdfQkJQX0lEMV9WQUxJRAkJRklFTEQxNigweDgwMDApCiAKIC8qCi0gKiBUWFJYX0NTUjU6IE9GRE0gVFggQkJQIElEMS4KKyAqIFRYUlhfQ1NSODogT0ZETSBUWCBCQlAgSUQxLgogICovCiAjZGVmaW5lIFRYUlhfQ1NSOAkJCTB4MDQ1MAogI2RlZmluZSBUWFJYX0NTUjhfQkJQX0lEMAkJRklFTEQxNigweDAwN2YpCkBAIC0zNjcsNyArMzcwLDE0IEBACiAgKi8KIAogLyoKLSAqIFNFQ19DU1IwLVNFQ19DU1I3OiBTaGFyZWQga2V5IDAsIHdvcmQgMC03CisgKiBTRUNfQ1NSMDogU2hhcmVkIGtleSAwLCB3b3JkIDAKKyAqIFNFQ19DU1IxOiBTaGFyZWQga2V5IDAsIHdvcmQgMQorICogU0VDX0NTUjI6IFNoYXJlZCBrZXkgMCwgd29yZCAyCisgKiBTRUNfQ1NSMzogU2hhcmVkIGtleSAwLCB3b3JkIDMKKyAqIFNFQ19DU1I0OiBTaGFyZWQga2V5IDAsIHdvcmQgNAorICogU0VDX0NTUjU6IFNoYXJlZCBrZXkgMCwgd29yZCA1CisgKiBTRUNfQ1NSNjogU2hhcmVkIGtleSAwLCB3b3JkIDYKKyAqIFNFQ19DU1I3OiBTaGFyZWQga2V5IDAsIHdvcmQgNwogICovCiAjZGVmaW5lIFNFQ19DU1IwCQkJMHgwNDgwCiAjZGVmaW5lIFNFQ19DU1IxCQkJMHgwNDgyCkBAIC0zNzksNyArMzg5LDE0IEBACiAjZGVmaW5lIFNFQ19DU1I3CQkJMHgwNDhlCiAKIC8qCi0gKiBTRUNfQ1NSOC1TRUNfQ1NSMTU6IFNoYXJlZCBrZXkgMSwgd29yZCAwLTcKKyAqIFNFQ19DU1I4OiBTaGFyZWQga2V5IDEsIHdvcmQgMAorICogU0VDX0NTUjk6IFNoYXJlZCBrZXkgMSwgd29yZCAxCisgKiBTRUNfQ1NSMTA6IFNoYXJlZCBrZXkgMSwgd29yZCAyCisgKiBTRUNfQ1NSMTE6IFNoYXJlZCBrZXkgMSwgd29yZCAzCisgKiBTRUNfQ1NSMTI6IFNoYXJlZCBrZXkgMSwgd29yZCA0CisgKiBTRUNfQ1NSMTM6IFNoYXJlZCBrZXkgMSwgd29yZCA1CisgKiBTRUNfQ1NSMTQ6IFNoYXJlZCBrZXkgMSwgd29yZCA2CisgKiBTRUNfQ1NSMTU6IFNoYXJlZCBrZXkgMSwgd29yZCA3CiAgKi8KICNkZWZpbmUgU0VDX0NTUjgJCQkweDA0OTAKICNkZWZpbmUgU0VDX0NTUjkJCQkweDA0OTIKQEAgLTM5MSw3ICs0MDgsMTQgQEAKICNkZWZpbmUgU0VDX0NTUjE1CQkJMHgwNDllCiAKIC8qCi0gKiBTRUNfQ1NSMTYtU0VDX0NTUjIzOiBTaGFyZWQga2V5IDIsIHdvcmQgMC03CisgKiBTRUNfQ1NSMTY6IFNoYXJlZCBrZXkgMiwgd29yZCAwCisgKiBTRUNfQ1NSMTc6IFNoYXJlZCBrZXkgMiwgd29yZCAxCisgKiBTRUNfQ1NSMTg6IFNoYXJlZCBrZXkgMiwgd29yZCAyCisgKiBTRUNfQ1NSMTk6IFNoYXJlZCBrZXkgMiwgd29yZCAzCisgKiBTRUNfQ1NSMjA6IFNoYXJlZCBrZXkgMiwgd29yZCA0CisgKiBTRUNfQ1NSMjE6IFNoYXJlZCBrZXkgMiwgd29yZCA1CisgKiBTRUNfQ1NSMjI6IFNoYXJlZCBrZXkgMiwgd29yZCA2CisgKiBTRUNfQ1NSMjM6IFNoYXJlZCBrZXkgMiwgd29yZCA3CiAgKi8KICNkZWZpbmUgU0VDX0NTUjE2CQkJMHgwNGEwCiAjZGVmaW5lIFNFQ19DU1IxNwkJCTB4MDRhMgpAQCAtNDAzLDcgKzQyNywxNCBAQAogI2RlZmluZSBTRUNfQ1NSMjMJCQkweDA0YWUKIAogLyoKLSAqIFNFQ19DU1IyNC1TRUNfQ1NSMzE6IFNoYXJlZCBrZXkgMywgd29yZCAwLTcKKyAqIFNFQ19DU1IyNDogU2hhcmVkIGtleSAzLCB3b3JkIDAKKyAqIFNFQ19DU1IyNTogU2hhcmVkIGtleSAzLCB3b3JkIDEKKyAqIFNFQ19DU1IyNjogU2hhcmVkIGtleSAzLCB3b3JkIDIKKyAqIFNFQ19DU1IyNzogU2hhcmVkIGtleSAzLCB3b3JkIDMKKyAqIFNFQ19DU1IyODogU2hhcmVkIGtleSAzLCB3b3JkIDQKKyAqIFNFQ19DU1IyOTogU2hhcmVkIGtleSAzLCB3b3JkIDUKKyAqIFNFQ19DU1IzMDogU2hhcmVkIGtleSAzLCB3b3JkIDYKKyAqIFNFQ19DU1IzMTogU2hhcmVkIGtleSAzLCB3b3JkIDcKICAqLwogI2RlZmluZSBTRUNfQ1NSMjQJCQkweDA0YjAKICNkZWZpbmUgU0VDX0NTUjI1CQkJMHgwNGIyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKaW5kZXggYTc0ZTFhNS4uMDdiMDNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaApAQCAtNDQsNyArNDQsNyBAQAogLyoKICAqIE1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4xLjQiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIyLjEuOCIKICNkZWZpbmUgRFJWX1BST0pFQ1QJImh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbSIKIAogLyoKQEAgLTExMSwzMyArMTExLDYgQEAKICNkZWZpbmUgRUlGUwkJCSggU0lGUyArICg4ICogKElFRUU4MDIxMV9IRUFERVIgKyBBQ0tfU0laRSkpICkKIAogLyoKLSAqIElFRUU4MDIuMTEgaGVhZGVyIGRlZmluZXMKLSAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfcnRzX2ZyYW1lKHUxNiBmYykKLXsKLQlyZXR1cm4gKCgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCkgJiYKLQkJKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUlRTKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2N0c19mcmFtZSh1MTYgZmMpCi17Ci0JcmV0dXJuICgoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9DVEwpICYmCi0JCSgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0NUUykpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19wcm9iZV9yZXNwKHUxNiBmYykKLXsKLQlyZXR1cm4gKCgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpICYmCi0JCSgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfYmVhY29uKHUxNiBmYykKLXsKLQlyZXR1cm4gKCgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpICYmCi0JCSgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikpOwotfQotCi0vKgogICogQ2hpcHNldCBpZGVudGlmaWNhdGlvbgogICogVGhlIGNoaXBzZXQgb24gdGhlIGRldmljZSBpcyBjb21wb3NlZCBvZiBhIFJUIGFuZCBSRiBjaGlwLgogICogVGhlIGNoaXBzZXQgY29tYmluYXRpb24gaXMgaW1wb3J0YW50IGZvciBkZXRlcm1pbmluZyBkZXZpY2UgY2FwYWJpbGl0aWVzLgpAQCAtMzkxLDYgKzM2NCw4IEBACiAjZGVmaW5lIERFTEFZRURfVVBEQVRFX0JFQUNPTgkJMHgwMDAwMDAwMQogI2RlZmluZSBERUxBWUVEX0NPTkZJR19FUlAJCTB4MDAwMDAwMDIKICNkZWZpbmUgREVMQVlFRF9MRURfQVNTT0MJCTB4MDAwMDAwMDQKKworCXUxNiBzZXFubzsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0MngwMF9pbnRmKiB2aWZfdG9faW50ZihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQpAQCAtNDA5LDcgKzM4NCw3IEBACiAgKiBAc3VwcG9ydGVkX3JhdGVzOiBSYXRlIHR5cGVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgKENDSywgT0ZETSkuCiAgKiBAbnVtX2NoYW5uZWxzOiBOdW1iZXIgb2Ygc3VwcG9ydGVkIGNoYW5uZWxzLiBUaGlzIGlzIHVzZWQgYXMgYXJyYXkgc2l6ZQogICoJZm9yIEB0eF9wb3dlcl9hLCBAdHhfcG93ZXJfYmcgYW5kIEBjaGFubmVscy4KLSAqIGNoYW5uZWxzOiBEZXZpY2UvY2hpcHNldCBzcGVjaWZpYyBjaGFubmVsIHZhbHVlcyAoU2VlICZzdHJ1Y3QgcmZfY2hhbm5lbCkuCisgKiBAY2hhbm5lbHM6IERldmljZS9jaGlwc2V0IHNwZWNpZmljIGNoYW5uZWwgdmFsdWVzIChTZWUgJnN0cnVjdCByZl9jaGFubmVsKS4KICAqIEB0eF9wb3dlcl9hOiBUWCBwb3dlciB2YWx1ZXMgZm9yIGFsbCA1LjJHSHogY2hhbm5lbHMgKG1heSBiZSBOVUxMKS4KICAqIEB0eF9wb3dlcl9iZzogVFggcG93ZXIgdmFsdWVzIGZvciBhbGwgMi40R0h6IGNoYW5uZWxzIChtYXkgYmUgTlVMTCkuCiAgKiBAdHhfcG93ZXJfZGVmYXVsdDogRGVmYXVsdCBUWCBwb3dlciB2YWx1ZSB0byB1c2Ugd2hlbiBlaXRoZXIKQEAgLTQ2MSw2ICs0MzYsNyBAQAogICovCiBzdHJ1Y3QgcnQyeDAwbGliX2VycCB7CiAJaW50IHNob3J0X3ByZWFtYmxlOworCWludCBjdHNfcHJvdGVjdGlvbjsKIAogCWludCBhY2tfdGltZW91dDsKIAlpbnQgYWNrX2NvbnN1bWVfdGltZTsKQEAgLTU0NSwxNSArNTIxLDEzIEBACiAJICovCiAJdm9pZCAoKndyaXRlX3R4X2Rlc2MpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCk7Ci0JaW50ICgqd3JpdGVfdHhfZGF0YSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpOworCQkJICAgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7CisJaW50ICgqd3JpdGVfdHhfZGF0YSkgKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpOworCXZvaWQgKCp3cml0ZV9iZWFjb24pIChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KTsKIAlpbnQgKCpnZXRfdHhfZGF0YV9sZW4pIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCXN0cnVjdCBza19idWZmICpza2IpOwogCXZvaWQgKCpraWNrX3R4X3F1ZXVlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgcXVldWUpOworCQkJICAgICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcXVldWUpOwogCiAJLyoKIAkgKiBSWCBjb250cm9sIGhhbmRsZXJzCkBAIC01OTcsNiArNTcxLDcgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgbWF4X2FwX2ludGY7CiAJY29uc3QgdW5zaWduZWQgaW50IGVlcHJvbV9zaXplOwogCWNvbnN0IHVuc2lnbmVkIGludCByZl9zaXplOworCWNvbnN0IHVuc2lnbmVkIGludCB0eF9xdWV1ZXM7CiAJY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyAqcng7CiAJY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyAqdHg7CiAJY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyAqYmNuOwpAQCAtNjI2LDExICs2MDEsMTEgQEAKIAkvKgogCSAqIERyaXZlciBmZWF0dXJlcwogCSAqLwotCURSSVZFUl9TVVBQT1JUX01JWEVEX0lOVEVSRkFDRVMsCiAJRFJJVkVSX1JFUVVJUkVfRklSTVdBUkUsCiAJRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELAogCURSSVZFUl9SRVFVSVJFX0FUSU1fUVVFVUUsCiAJRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELAorCURSSVZFUl9SRVFVSVJFX0RNQSwKIAogCS8qCiAJICogRHJpdmVyIGNvbmZpZ3VyYXRpb24KQEAgLTY1NSwxMSArNjMwLDcgQEAKIAkgKiBXaGVuIGFjY2Vzc2luZyB0aGlzIHZhcmlhYmxlLCB0aGUgcnQyeDAwZGV2X3twY2ksdXNifQogCSAqIG1hY3JvJ3Mgc2hvdWxkIGJlIHVzZWQgZm9yIGNvcnJlY3QgdHlwZWNhc3RpbmcuCiAJICovCi0Jdm9pZCAqZGV2OwotI2RlZmluZSBydDJ4MDBkZXZfcGNpKF9fZGV2KQkoIChzdHJ1Y3QgcGNpX2RldiAqKShfX2RldiktPmRldiApCi0jZGVmaW5lIHJ0MngwMGRldl91c2IoX19kZXYpCSggKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopKF9fZGV2KS0+ZGV2ICkKLSNkZWZpbmUgcnQyeDAwZGV2X3VzYl9kZXYoX19kZXYpXAotCSggKHN0cnVjdCB1c2JfZGV2aWNlICopaW50ZXJmYWNlX3RvX3VzYmRldihydDJ4MDBkZXZfdXNiKF9fZGV2KSkgKQorCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCS8qCiAJICogQ2FsbGJhY2sgZnVuY3Rpb25zLgpAQCAtNjgyLDcgKzY1Myw3IEBACiAjZGVmaW5lIFJGS0lMTF9TVEFURV9BTExPQ0FURUQJCTEKICNkZWZpbmUgUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQJCTIKIAlzdHJ1Y3QgcmZraWxsICpyZmtpbGw7Ci0Jc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2OworCXN0cnVjdCBkZWxheWVkX3dvcmsgcmZraWxsX3dvcms7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKIAkvKgpAQCAtODIwLDggKzc5MSwxMCBAQAogCiAJLyoKIAkgKiBTY2hlZHVsZWQgd29yay4KKwkgKiBOT1RFOiBpbnRmX3dvcmsgd2lsbCB1c2UgaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMoKQorCSAqIHdoaWNoIG1lYW5zIGl0IGNhbm5vdCBiZSBwbGFjZWQgb24gdGhlIGh3LT53b3JrcXVldWUKKwkgKiBkdWUgdG8gUlROTCBsb2NraW5nIHJlcXVpcmVtZW50cy4KIAkgKi8KLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBpbnRmX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGZpbHRlcl93b3JrOwogCkBAIC04MzAsNyArODAzLDcgQEAKIAkgKiBUaGUgQmVhY29uIGFycmF5IGFsc28gY29udGFpbnMgdGhlIEF0aW0gcXVldWUKIAkgKiBpZiB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLgogCSAqLwotCWludCBkYXRhX3F1ZXVlczsKKwl1bnNpZ25lZCBpbnQgZGF0YV9xdWV1ZXM7CiAJc3RydWN0IGRhdGFfcXVldWUgKnJ4OwogCXN0cnVjdCBkYXRhX3F1ZXVlICp0eDsKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqYmNuOwpAQCAtOTM0LDU1ICs5MDcsNDEgQEAKIH0KIAogLyoqCi0gKiBydDJ4MDBxdWV1ZV9nZXRfcXVldWUgLSBDb252ZXJ0IG1hYzgwMjExIHF1ZXVlIGluZGV4IHRvIHJ0MngwMCBxdWV1ZQorICogcnQyeDAwcXVldWVfbWFwX3R4c2tiIC0gTWFwIGEgc2tiIGludG8gRE1BIGZvciBUWCBwdXJwb3Nlcy4KICAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgotICogQHF1ZXVlOiBtYWM4MDIxMS9ydDJ4MDAgcXVldWUgaW5kZXgKLSAqCShzZWUgJmVudW0gaWVlZTgwMjExX3R4X3F1ZXVlIGFuZCAmZW51bSBydDJ4MDBfYmNuX3F1ZXVlKS4KKyAqIEBza2I6IFRoZSBza2IgdG8gbWFwLgorICovCit2b2lkIHJ0MngwMHF1ZXVlX21hcF90eHNrYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyoqCisgKiBydDJ4MDBxdWV1ZV9nZXRfcXVldWUgLSBDb252ZXJ0IHF1ZXVlIGluZGV4IHRvIHF1ZXVlIHBvaW50ZXIKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQHF1ZXVlOiBydDJ4MDAgcXVldWUgaW5kZXggKHNlZSAmZW51bSBkYXRhX3F1ZXVlX3FpZCkuCiAgKi8KIHN0cnVjdCBkYXRhX3F1ZXVlICpydDJ4MDBxdWV1ZV9nZXRfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCBxdWV1ZSk7CisJCQkJCSBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHF1ZXVlKTsKIAogLyoqCiAgKiBydDJ4MDBxdWV1ZV9nZXRfZW50cnkgLSBHZXQgcXVldWUgZW50cnkgd2hlcmUgdGhlIGdpdmVuIGluZGV4IHBvaW50cyB0by4KLSAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQHF1ZXVlOiBQb2ludGVyIHRvICZzdHJ1Y3QgZGF0YV9xdWV1ZSBmcm9tIHdoZXJlIHdlIG9idGFpbiB0aGUgZW50cnkuCiAgKiBAaW5kZXg6IEluZGV4IGlkZW50aWZpZXIgZm9yIG9idGFpbmluZyB0aGUgY29ycmVjdCBpbmRleC4KICAqLwogc3RydWN0IHF1ZXVlX2VudHJ5ICpydDJ4MDBxdWV1ZV9nZXRfZW50cnkoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLAogCQkJCQkgIGVudW0gcXVldWVfaW5kZXggaW5kZXgpOwogCi0vKioKLSAqIHJ0MngwMHF1ZXVlX2luZGV4X2luYyAtIEluZGV4IGluY3JlbWVudGF0aW9uIGZ1bmN0aW9uCi0gKiBAcXVldWU6IFF1ZXVlICgmc3RydWN0IGRhdGFfcXVldWUpIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4KLSAqIEBhY3Rpb246IEluZGV4IHR5cGUgKCZlbnVtIHF1ZXVlX2luZGV4KSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGluY3JlYXNlIHRoZSByZXF1ZXN0ZWQgaW5kZXggb24gdGhlIHF1ZXVlLAotICogaXQgd2lsbCBncmFiIHRoZSBhcHByb3ByaWF0ZSBsb2NrcyBhbmQgaGFuZGxlIHF1ZXVlIG92ZXJmbG93IGV2ZW50cyBieQotICogcmVzZXR0aW5nIHRoZSBpbmRleCB0byB0aGUgc3RhcnQgb2YgdGhlIHF1ZXVlLgotICovCi12b2lkIHJ0MngwMHF1ZXVlX2luZGV4X2luYyhzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGVudW0gcXVldWVfaW5kZXggaW5kZXgpOwotCi0KIC8qCiAgKiBJbnRlcnJ1cHQgY29udGV4dCBoYW5kbGVycy4KICAqLwogdm9pZCBydDJ4MDBsaWJfYmVhY29uZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwbGliX3R4ZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkgICAgICBzdHJ1Y3QgdHhkb25lX2VudHJ5X2Rlc2MgKnR4ZGVzYyk7Ci12b2lkIHJ0MngwMGxpYl9yeGRvbmUoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKLQkJICAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpOwotCi0vKgotICogVFggZGVzY3JpcHRvciBpbml0aWFsaXplcgotICovCi12b2lkIHJ0MngwMGxpYl93cml0ZV90eF9kZXNjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCk7Cit2b2lkIHJ0MngwMGxpYl9yeGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJICAgICAgc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSk7CiAKIC8qCiAgKiBtYWM4MDIxMSBoYW5kbGVycy4KICAqLwotaW50IHJ0MngwMG1hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCk7CitpbnQgcnQyeDAwbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBydDJ4MDBtYWNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydDJ4MDBtYWNfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBpbnQgcnQyeDAwbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0xMDA1LDcgKzk2NCw3IEBACiAJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKIAkJCQl1MzIgY2hhbmdlcyk7Ci1pbnQgcnQyeDAwbWFjX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKK2ludCBydDJ4MDBtYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCA0ODYwOGU4Li5mMjBjYTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC04NCw2ICs4NCw4IEBACiAJbWVtc2V0KCZlcnAsIDAsIHNpemVvZihlcnApKTsKIAogCWVycC5zaG9ydF9wcmVhbWJsZSA9IGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGU7CisJZXJwLmN0c19wcm90ZWN0aW9uID0gYnNzX2NvbmYtPnVzZV9jdHNfcHJvdDsKKwogCWVycC5hY2tfdGltZW91dCA9IFBMQ1AgKyBnZXRfZHVyYXRpb24oQUNLX1NJWkUsIDEwKTsKIAllcnAuYWNrX2NvbnN1bWVfdGltZSA9IFNJRlMgKyBQTENQICsgZ2V0X2R1cmF0aW9uKEFDS19TSVpFLCAxMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKaW5kZXggYmZhYjNiOC4uMzAwY2YwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogfTsKIAogdm9pZCBydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKKwkJCSAgICBlbnVtIHJ0MngwMF9kdW1wX3R5cGUgdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgcnQyeDAwZGVidWdfaW50ZiAqaW50ZiA9IHJ0MngwMGRldi0+ZGVidWdmc19pbnRmOwogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlza2Jjb3B5ID0gYWxsb2Nfc2tiKHNpemVvZigqZHVtcF9oZHIpICsgZGVzYy0+ZGVzY19sZW4gKyBkZXNjLT5kYXRhX2xlbiwKKwlza2Jjb3B5ID0gYWxsb2Nfc2tiKHNpemVvZigqZHVtcF9oZHIpICsgZGVzYy0+ZGVzY19sZW4gKyBza2ItPmxlbiwKIAkJCSAgICBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYmNvcHkpIHsKIAkJREVCVUcocnQyeDAwZGV2LCAiRmFpbGVkIHRvIGNvcHkgc2tiIGZvciBkdW1wLlxuIik7CkBAIC0xNDQsMTggKzE0NCwxOCBAQAogCWR1bXBfaGRyLT52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRFVNUF9IRUFERVJfVkVSU0lPTik7CiAJZHVtcF9oZHItPmhlYWRlcl9sZW5ndGggPSBjcHVfdG9fbGUzMihzaXplb2YoKmR1bXBfaGRyKSk7CiAJZHVtcF9oZHItPmRlc2NfbGVuZ3RoID0gY3B1X3RvX2xlMzIoZGVzYy0+ZGVzY19sZW4pOwotCWR1bXBfaGRyLT5kYXRhX2xlbmd0aCA9IGNwdV90b19sZTMyKGRlc2MtPmRhdGFfbGVuKTsKKwlkdW1wX2hkci0+ZGF0YV9sZW5ndGggPSBjcHVfdG9fbGUzMihza2ItPmxlbik7CiAJZHVtcF9oZHItPmNoaXBfcnQgPSBjcHVfdG9fbGUxNihydDJ4MDBkZXYtPmNoaXAucnQpOwogCWR1bXBfaGRyLT5jaGlwX3JmID0gY3B1X3RvX2xlMTYocnQyeDAwZGV2LT5jaGlwLnJmKTsKIAlkdW1wX2hkci0+Y2hpcF9yZXYgPSBjcHVfdG9fbGUzMihydDJ4MDBkZXYtPmNoaXAucmV2KTsKLQlkdW1wX2hkci0+dHlwZSA9IGNwdV90b19sZTE2KGRlc2MtPmZyYW1lX3R5cGUpOworCWR1bXBfaGRyLT50eXBlID0gY3B1X3RvX2xlMTYodHlwZSk7CiAJZHVtcF9oZHItPnF1ZXVlX2luZGV4ID0gZGVzYy0+ZW50cnktPnF1ZXVlLT5xaWQ7CiAJZHVtcF9oZHItPmVudHJ5X2luZGV4ID0gZGVzYy0+ZW50cnktPmVudHJ5X2lkeDsKIAlkdW1wX2hkci0+dGltZXN0YW1wX3NlYyA9IGNwdV90b19sZTMyKHRpbWVzdGFtcC50dl9zZWMpOwogCWR1bXBfaGRyLT50aW1lc3RhbXBfdXNlYyA9IGNwdV90b19sZTMyKHRpbWVzdGFtcC50dl91c2VjKTsKIAogCW1lbWNweShza2JfcHV0KHNrYmNvcHksIGRlc2MtPmRlc2NfbGVuKSwgZGVzYy0+ZGVzYywgZGVzYy0+ZGVzY19sZW4pOwotCW1lbWNweShza2JfcHV0KHNrYmNvcHksIGRlc2MtPmRhdGFfbGVuKSwgZGVzYy0+ZGF0YSwgZGVzYy0+ZGF0YV9sZW4pOworCW1lbWNweShza2JfcHV0KHNrYmNvcHksIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKIAlza2JfcXVldWVfdGFpbCgmaW50Zi0+ZnJhbWVfZHVtcF9za2JxdWV1ZSwgc2tiY29weSk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbnRmLT5mcmFtZV9kdW1wX3dhaXRxdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKaW5kZXggYzk5N2Q0Zi4uOGM5M2ViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAicnQyeDAwLmgiCiAjaW5jbHVkZSAicnQyeDAwbGliLmgiCi0jaW5jbHVkZSAicnQyeDAwZHVtcC5oIgogCiAvKgogICogTGluayB0dW5pbmcgaGFuZGxlcnMKQEAgLTc1LDcgKzc0LDcgQEAKIAogCXJ0MngwMGxpYl9yZXNldF9saW5rX3R1bmVyKHJ0MngwMGRldik7CiAKLQlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT53b3JrcXVldWUsCisJcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKIAkJCSAgICZydDJ4MDBkZXYtPmxpbmsud29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKIH0KIApAQCAtMTEzLDYgKzExMiw4IEBACiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIAorCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBTVEFURV9SQURJT19JUlFfT04pOworCiAJcnQyeDAwbGVkc19sZWRfcmFkaW8ocnQyeDAwZGV2LCB0cnVlKTsKIAlydDJ4MDBsZWRfbGVkX2FjdGl2aXR5KHJ0MngwMGRldiwgdHJ1ZSk7CiAKQEAgLTEyNiw3ICsxMjcsNyBAQAogCS8qCiAJICogU3RhcnQgdGhlIFRYIHF1ZXVlcy4KIAkgKi8KLQlpZWVlODAyMTFfc3RhcnRfcXVldWVzKHJ0MngwMGRldi0+aHcpOworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhydDJ4MDBkZXYtPmh3KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUwLDYgKzE1MSw3IEBACiAJICogRGlzYWJsZSByYWRpby4KIAkgKi8KIAlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfUkFESU9fT0ZGKTsKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfUkFESU9fSVJRX09GRik7CiAJcnQyeDAwbGVkX2xlZF9hY3Rpdml0eShydDJ4MDBkZXYsIGZhbHNlKTsKIAlydDJ4MDBsZWRzX2xlZF9yYWRpbyhydDJ4MDBkZXYsIGZhbHNlKTsKIH0KQEAgLTM5MCw3ICszOTIsNyBAQAogCSAqIEluY3JlYXNlIHR1bmVyIGNvdW50ZXIsIGFuZCByZXNjaGVkdWxlIHRoZSBuZXh0IGxpbmsgdHVuZXIgcnVuLgogCSAqLwogCXJ0MngwMGRldi0+bGluay5jb3VudCsrOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwKKwlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAogCQkJICAgJnJ0MngwMGRldi0+bGluay53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOwogfQogCkBAIC00MDcsOCArNDA5LDYgQEAKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIGNvbnRyb2w7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiBjb25mOwogCWludCBkZWxheWVkX2ZsYWdzOwogCkBAIC00MzQsMTIgKzQzNCw4IEBACiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKLQlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfVVBEQVRFX0JFQUNPTikgewotCQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChydDJ4MDBkZXYtPmh3LCB2aWYsICZjb250cm9sKTsKLQkJaWYgKHNrYiAmJiBydDJ4MDBkZXYtPm9wcy0+aHctPmJlYWNvbl91cGRhdGUocnQyeDAwZGV2LT5odywKLQkJCQkJCQkgICAgIHNrYiwgJmNvbnRyb2wpKQotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCX0KKwlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfVVBEQVRFX0JFQUNPTikKKwkJcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihydDJ4MDBkZXYsIHZpZik7CiAKIAlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfQ09ORklHX0VSUCkKIAkJcnQyeDAwbGliX2NvbmZpZ19lcnAocnQyeDAwZGV2LCBpbnRmLCAmY29uZik7CkBAIC00NjgsMTIgKzQ2NCwxOSBAQAogc3RhdGljIHZvaWQgcnQyeDAwbGliX2JlYWNvbmRvbmVfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRhdGE7CiAJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKIAogCWlmICh2aWYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYKIAkgICAgdmlmLT50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpCiAJCXJldHVybjsKIAorCS8qCisJICogQ2xlYW4gdXAgdGhlIGJlYWNvbiBza2IuCisJICovCisJcnQyeDAwcXVldWVfZnJlZV9za2IocnQyeDAwZGV2LCBpbnRmLT5iZWFjb24tPnNrYik7CisJaW50Zi0+YmVhY29uLT5za2IgPSBOVUxMOworCiAJc3Bpbl9sb2NrKCZpbnRmLT5sb2NrKTsKIAlpbnRmLT5kZWxheWVkX2ZsYWdzIHw9IERFTEFZRURfVVBEQVRFX0JFQUNPTjsKIAlzcGluX3VubG9jaygmaW50Zi0+bG9jayk7CkBAIC00ODgsNyArNDkxLDcgQEAKIAkJCQkJCSAgIHJ0MngwMGxpYl9iZWFjb25kb25lX2l0ZXIsCiAJCQkJCQkgICBydDJ4MDBkZXYpOwogCi0JcXVldWVfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKKwlzY2hlZHVsZV93b3JrKCZydDJ4MDBkZXYtPmludGZfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfYmVhY29uZG9uZSk7CiAKQEAgLTQ5Niw3OSArNDk5LDEzMiBAQAogCQkgICAgICBzdHJ1Y3QgdHhkb25lX2VudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7Ci0Jc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHR4X3N0YXR1czsKLQlpbnQgc3VjY2VzcyA9ICEhKHR4ZGVzYy0+c3RhdHVzID09IFRYX1NVQ0NFU1MgfHwKLQkJCSB0eGRlc2MtPnN0YXR1cyA9PSBUWF9TVUNDRVNTX1JFVFJZKTsKLQlpbnQgZmFpbCA9ICEhKHR4ZGVzYy0+c3RhdHVzID09IFRYX0ZBSUxfUkVUUlkgfHwKLQkJICAgICAgdHhkZXNjLT5zdGF0dXMgPT0gVFhfRkFJTF9JTlZBTElEIHx8Ci0JCSAgICAgIHR4ZGVzYy0+c3RhdHVzID09IFRYX0ZBSUxfT1RIRVIpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CisJZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoZW50cnktPnNrYik7CisKKwkvKgorCSAqIFVubWFwIHRoZSBza2IuCisJICovCisJcnQyeDAwcXVldWVfdW5tYXBfc2tiKHJ0MngwMGRldiwgZW50cnktPnNrYik7CisKKwkvKgorCSAqIFNlbmQgZnJhbWUgdG8gZGVidWdmcyBpbW1lZGlhdGVseSwgYWZ0ZXIgdGhpcyBjYWxsIGlzIGNvbXBsZXRlZAorCSAqIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIHNrYi0+Y2IgYXJyYXkuCisJICovCisJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIERVTVBfRlJBTUVfVFhET05FLCBlbnRyeS0+c2tiKTsKIAogCS8qCiAJICogVXBkYXRlIFRYIHN0YXRpc3RpY3MuCiAJICovCi0JcnQyeDAwZGV2LT5saW5rLnF1YWwudHhfc3VjY2VzcyArPSBzdWNjZXNzOwotCXJ0MngwMGRldi0+bGluay5xdWFsLnR4X2ZhaWxlZCArPSBmYWlsOworCXJ0MngwMGRldi0+bGluay5xdWFsLnR4X3N1Y2Nlc3MgKz0KKwkgICAgdGVzdF9iaXQoVFhET05FX1NVQ0NFU1MsICZ0eGRlc2MtPmZsYWdzKTsKKwlydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9mYWlsZWQgKz0KKwkgICAgdGVzdF9iaXQoVFhET05FX0ZBSUxVUkUsICZ0eGRlc2MtPmZsYWdzKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBUWCBzdGF0dXMKIAkgKi8KLQl0eF9zdGF0dXMuZmxhZ3MgPSAwOwotCXR4X3N0YXR1cy5hY2tfc2lnbmFsID0gMDsKLQl0eF9zdGF0dXMuZXhjZXNzaXZlX3JldHJpZXMgPSAodHhkZXNjLT5zdGF0dXMgPT0gVFhfRkFJTF9SRVRSWSk7Ci0JdHhfc3RhdHVzLnJldHJ5X2NvdW50ID0gdHhkZXNjLT5yZXRyeTsKLQltZW1jcHkoJnR4X3N0YXR1cy5jb250cm9sLCB0eGRlc2MtPmNvbnRyb2wsIHNpemVvZigqdHhkZXNjLT5jb250cm9sKSk7CisJbWVtc2V0KCZ0eF9pbmZvLT5zdGF0dXMsIDAsIHNpemVvZih0eF9pbmZvLT5zdGF0dXMpKTsKKwl0eF9pbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IDA7CisJdHhfaW5mby0+c3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0KKwkgICAgdGVzdF9iaXQoVFhET05FX0VYQ0VTU0lWRV9SRVRSWSwgJnR4ZGVzYy0+ZmxhZ3MpOworCXR4X2luZm8tPnN0YXR1cy5yZXRyeV9jb3VudCA9IHR4ZGVzYy0+cmV0cnk7CiAKLQlpZiAoISh0eF9zdGF0dXMuY29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spKSB7Ci0JCWlmIChzdWNjZXNzKQotCQkJdHhfc3RhdHVzLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLOwotCQllbHNlCisJaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpIHsKKwkJaWYgKHRlc3RfYml0KFRYRE9ORV9TVUNDRVNTLCAmdHhkZXNjLT5mbGFncykpCisJCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCWVsc2UgaWYgKHRlc3RfYml0KFRYRE9ORV9GQUlMVVJFLCAmdHhkZXNjLT5mbGFncykpCiAJCQlydDJ4MDBkZXYtPmxvd19sZXZlbF9zdGF0cy5kb3QxMUFDS0ZhaWx1cmVDb3VudCsrOwogCX0KIAotCXR4X3N0YXR1cy5xdWV1ZV9sZW5ndGggPSBlbnRyeS0+cXVldWUtPmxpbWl0OwotCXR4X3N0YXR1cy5xdWV1ZV9udW1iZXIgPSB0eF9zdGF0dXMuY29udHJvbC5xdWV1ZTsKLQotCWlmICh0eF9zdGF0dXMuY29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykgewotCQlpZiAoc3VjY2VzcykKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9SVFNfQ1RTKSB7CisJCWlmICh0ZXN0X2JpdChUWERPTkVfU1VDQ0VTUywgJnR4ZGVzYy0+ZmxhZ3MpKQogCQkJcnQyeDAwZGV2LT5sb3dfbGV2ZWxfc3RhdHMuZG90MTFSVFNTdWNjZXNzQ291bnQrKzsKLQkJZWxzZQorCQllbHNlIGlmICh0ZXN0X2JpdChUWERPTkVfRkFJTFVSRSwgJnR4ZGVzYy0+ZmxhZ3MpKQogCQkJcnQyeDAwZGV2LT5sb3dfbGV2ZWxfc3RhdHMuZG90MTFSVFNGYWlsdXJlQ291bnQrKzsKIAl9CiAKIAkvKgotCSAqIFNlbmQgdGhlIHR4X3N0YXR1cyB0byBkZWJ1Z2ZzLiBPbmx5IHNlbmQgdGhlIHN0YXR1cyByZXBvcnQKLQkgKiB0byBtYWM4MDIxMSB3aGVuIHRoZSBmcmFtZSBvcmlnaW5hdGVkIGZyb20gdGhlcmUuIElmIHRoaXMgd2FzCi0JICogYSBleHRyYSBmcmFtZSBjb21pbmcgdGhyb3VnaCBhIG1hYzgwMjExIGxpYnJhcnkgY2FsbCAoUlRTL0NUUykKLQkgKiB0aGVuIHdlIHNob3VsZCBub3Qgc2VuZCB0aGUgc3RhdHVzIHJlcG9ydCBiYWNrLgotCSAqIElmIHNlbmQgdG8gbWFjODAyMTEsIG1hYzgwMjExIHdpbGwgY2xlYW4gdXAgdGhlIHNrYiBzdHJ1Y3R1cmUsCi0JICogb3RoZXJ3aXNlIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsZi4KKwkgKiBPbmx5IHNlbmQgdGhlIHN0YXR1cyByZXBvcnQgdG8gbWFjODAyMTEgd2hlbiBUWCBzdGF0dXMgd2FzCisJICogcmVxdWVzdGVkIGJ5IGl0LiBJZiB0aGlzIHdhcyBhIGV4dHJhIGZyYW1lIGNvbWluZyB0aHJvdWdoCisJICogYSBtYWM4MDIxMSBsaWJyYXJ5IGNhbGwgKFJUUy9DVFMpIHRoZW4gd2Ugc2hvdWxkIG5vdCBzZW5kIHRoZQorCSAqIHN0YXR1cyByZXBvcnQgYmFjay4KIAkgKi8KLQlza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOwotCXNrYmRlc2MtPmZyYW1lX3R5cGUgPSBEVU1QX0ZSQU1FX1RYRE9ORTsKLQotCXJ0MngwMGRlYnVnX2R1bXBfZnJhbWUocnQyeDAwZGV2LCBlbnRyeS0+c2tiKTsKLQotCWlmICghKHNrYmRlc2MtPmZsYWdzICYgRlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEKSkKLQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHJ0MngwMGRldi0+aHcsCi0JCQkJCSAgICBlbnRyeS0+c2tiLCAmdHhfc3RhdHVzKTsKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMpCisJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShydDJ4MDBkZXYtPmh3LCBlbnRyeS0+c2tiKTsKIAllbHNlCi0JCWRldl9rZnJlZV9za2IoZW50cnktPnNrYik7CisJCWRldl9rZnJlZV9za2JfaXJxKGVudHJ5LT5za2IpOworCisJLyoKKwkgKiBNYWtlIHRoaXMgZW50cnkgYXZhaWxhYmxlIGZvciByZXVzZS4KKwkgKi8KIAllbnRyeS0+c2tiID0gTlVMTDsKKwllbnRyeS0+ZmxhZ3MgPSAwOworCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+aW5pdF90eGVudHJ5KHJ0MngwMGRldiwgZW50cnkpOworCisJX19jbGVhcl9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpOworCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhlbnRyeS0+cXVldWUsIFFfSU5ERVhfRE9ORSk7CisKKwkvKgorCSAqIElmIHRoZSBkYXRhIHF1ZXVlIHdhcyBiZWxvdyB0aGUgdGhyZXNob2xkIGJlZm9yZSB0aGUgdHhkb25lCisJICogaGFuZGxlciB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGUgcGFja2V0IHF1ZXVlIGluIHRoZSBtYWM4MDIxMSBzdGFjaworCSAqIGlzIHJlZW5hYmxlZCB3aGVuIHRoZSB0eGRvbmUgaGFuZGxlciBoYXMgZmluaXNoZWQuCisJICovCisJaWYgKCFydDJ4MDBxdWV1ZV90aHJlc2hvbGQoZW50cnktPnF1ZXVlKSkKKwkJaWVlZTgwMjExX3dha2VfcXVldWUocnQyeDAwZGV2LT5odywgcWlkKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMGxpYl90eGRvbmUpOwogCi12b2lkIHJ0MngwMGxpYl9yeGRvbmUoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKLQkJICAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpCit2b2lkIHJ0MngwMGxpYl9yeGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJICAgICAgc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKIHsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisJc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjIHJ4ZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSAmcnQyeDAwZGV2LT5yeF9zdGF0dXM7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAljb25zdCBzdHJ1Y3QgcnQyeDAwX3JhdGUgKnJhdGU7CisJdW5zaWduZWQgaW50IGhlYWRlcl9zaXplOworCXVuc2lnbmVkIGludCBhbGlnbjsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgaWR4ID0gLTE7Ci0JdTE2IGZjOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhIG5ldyBza19idWZmZXIuIElmIG5vIG5ldyBidWZmZXIgYXZhaWxhYmxlLCBkcm9wIHRoZQorCSAqIHJlY2VpdmVkIGZyYW1lIGFuZCByZXVzZSB0aGUgZXhpc3RpbmcgYnVmZmVyLgorCSAqLworCXNrYiA9IHJ0MngwMHF1ZXVlX2FsbG9jX3J4c2tiKHJ0MngwMGRldiwgZW50cnkpOworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVubWFwIHRoZSBza2IuCisJICovCisJcnQyeDAwcXVldWVfdW5tYXBfc2tiKHJ0MngwMGRldiwgZW50cnktPnNrYik7CisKKwkvKgorCSAqIEV4dHJhY3QgdGhlIFJYRCBkZXRhaWxzLgorCSAqLworCW1lbXNldCgmcnhkZXNjLCAwLCBzaXplb2YocnhkZXNjKSk7CisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+ZmlsbF9yeGRvbmUoZW50cnksICZyeGRlc2MpOworCisJLyoKKwkgKiBUaGUgZGF0YSBiZWhpbmQgdGhlIGllZWU4MDIxMSBoZWFkZXIgbXVzdCBiZQorCSAqIGFsaWduZWQgb24gYSA0IGJ5dGUgYm91bmRhcnkuCisJICovCisJaGVhZGVyX3NpemUgPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihlbnRyeS0+c2tiKTsKKwlhbGlnbiA9ICgodW5zaWduZWQgbG9uZykoZW50cnktPnNrYi0+ZGF0YSArIGhlYWRlcl9zaXplKSkgJiAzOworCisJaWYgKGFsaWduKSB7CisJCXNrYl9wdXNoKGVudHJ5LT5za2IsIGFsaWduKTsKKwkJLyogTW92ZSBlbnRpcmUgZnJhbWUgaW4gMSBjb21tYW5kICovCisJCW1lbW1vdmUoZW50cnktPnNrYi0+ZGF0YSwgZW50cnktPnNrYi0+ZGF0YSArIGFsaWduLAorCQkJcnhkZXNjLnNpemUpOworCX0KKworCS8qIFVwZGF0ZSBkYXRhIHBvaW50ZXJzLCB0cmltIGJ1ZmZlciB0byBjb3JyZWN0IHNpemUgKi8KKwlza2JfdHJpbShlbnRyeS0+c2tiLCByeGRlc2Muc2l6ZSk7CiAKIAkvKgogCSAqIFVwZGF0ZSBSWCBzdGF0aXN0aWNzLgpAQCAtNTc3LDEwICs2MzMsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewogCQlyYXRlID0gcnQyeDAwX2dldF9yYXRlKHNiYW5kLT5iaXRyYXRlc1tpXS5od192YWx1ZSk7CiAKLQkJaWYgKCgocnhkZXNjLT5kZXZfZmxhZ3MgJiBSWERPTkVfU0lHTkFMX1BMQ1ApICYmCi0JCSAgICAgKHJhdGUtPnBsY3AgPT0gcnhkZXNjLT5zaWduYWwpKSB8fAotCQkgICAgKCEocnhkZXNjLT5kZXZfZmxhZ3MgJiBSWERPTkVfU0lHTkFMX1BMQ1ApICYmCi0JCSAgICAgIChyYXRlLT5iaXRyYXRlID09IHJ4ZGVzYy0+c2lnbmFsKSkpIHsKKwkJaWYgKCgocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9TSUdOQUxfUExDUCkgJiYKKwkJICAgICAocmF0ZS0+cGxjcCA9PSByeGRlc2Muc2lnbmFsKSkgfHwKKwkJICAgICghKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfU0lHTkFMX1BMQ1ApICYmCisJCSAgICAgIChyYXRlLT5iaXRyYXRlID09IHJ4ZGVzYy5zaWduYWwpKSkgewogCQkJaWR4ID0gaTsKIAkJCWJyZWFrOwogCQl9CkBAIC01ODgsOCArNjQ0LDggQEAKIAogCWlmIChpZHggPCAwKSB7CiAJCVdBUk5JTkcocnQyeDAwZGV2LCAiRnJhbWUgcmVjZWl2ZWQgd2l0aCB1bnJlY29nbml6ZWQgc2lnbmFsLCIKLQkJCSJzaWduYWw9MHglLjJ4LCBwbGNwPSVkLlxuIiwgcnhkZXNjLT5zaWduYWwsCi0JCQkhIShyeGRlc2MtPmRldl9mbGFncyAmIFJYRE9ORV9TSUdOQUxfUExDUCkpOworCQkJInNpZ25hbD0weCUuMngsIHBsY3A9JWQuXG4iLCByeGRlc2Muc2lnbmFsLAorCQkJISEocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9TSUdOQUxfUExDUCkpOwogCQlpZHggPSAwOwogCX0KIApAQCAtNTk3LDE3MiArNjUzLDQwIEBACiAJICogT25seSB1cGRhdGUgbGluayBzdGF0dXMgaWYgdGhpcyBpcyBhIGJlYWNvbiBmcmFtZSBjYXJyeWluZyBvdXIgYnNzaWQuCiAJICovCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaWYgKGlzX2JlYWNvbihmYykgJiYgKHJ4ZGVzYy0+ZGV2X2ZsYWdzICYgUlhET05FX01ZX0JTUykpCi0JCXJ0MngwMGxpYl91cGRhdGVfbGlua19zdGF0cygmcnQyeDAwZGV2LT5saW5rLCByeGRlc2MtPnJzc2kpOworCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfTVlfQlNTKSkKKwkJcnQyeDAwbGliX3VwZGF0ZV9saW5rX3N0YXRzKCZydDJ4MDBkZXYtPmxpbmssIHJ4ZGVzYy5yc3NpKTsKIAogCXJ0MngwMGRldi0+bGluay5xdWFsLnJ4X3N1Y2Nlc3MrKzsKIAorCXJ4X3N0YXR1cy0+bWFjdGltZSA9IHJ4ZGVzYy50aW1lc3RhbXA7CiAJcnhfc3RhdHVzLT5yYXRlX2lkeCA9IGlkeDsKLQlyeF9zdGF0dXMtPnNpZ25hbCA9Ci0JICAgIHJ0MngwMGxpYl9jYWxjdWxhdGVfbGlua19zaWduYWwocnQyeDAwZGV2LCByeGRlc2MtPnJzc2kpOwotCXJ4X3N0YXR1cy0+c3NpID0gcnhkZXNjLT5yc3NpOwotCXJ4X3N0YXR1cy0+ZmxhZyA9IHJ4ZGVzYy0+ZmxhZ3M7CisJcnhfc3RhdHVzLT5xdWFsID0KKwkgICAgcnQyeDAwbGliX2NhbGN1bGF0ZV9saW5rX3NpZ25hbChydDJ4MDBkZXYsIHJ4ZGVzYy5yc3NpKTsKKwlyeF9zdGF0dXMtPnNpZ25hbCA9IHJ4ZGVzYy5yc3NpOworCXJ4X3N0YXR1cy0+ZmxhZyA9IHJ4ZGVzYy5mbGFnczsKIAlyeF9zdGF0dXMtPmFudGVubmEgPSBydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZS5yeDsKIAogCS8qCiAJICogU2VuZCBmcmFtZSB0byBtYWM4MDIxMSAmIGRlYnVnZnMuCiAJICogbWFjODAyMTEgd2lsbCBjbGVhbiB1cCB0aGUgc2tiIHN0cnVjdHVyZS4KIAkgKi8KLQlnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYiktPmZyYW1lX3R5cGUgPSBEVU1QX0ZSQU1FX1JYRE9ORTsKLQlydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHJ0MngwMGRldiwgZW50cnktPnNrYik7CisJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIERVTVBfRlJBTUVfUlhET05FLCBlbnRyeS0+c2tiKTsKIAlpZWVlODAyMTFfcnhfaXJxc2FmZShydDJ4MDBkZXYtPmh3LCBlbnRyeS0+c2tiLCByeF9zdGF0dXMpOwotCWVudHJ5LT5za2IgPSBOVUxMOworCisJLyoKKwkgKiBSZXBsYWNlIHRoZSBza2Igd2l0aCB0aGUgZnJlc2hseSBhbGxvY2F0ZWQgb25lLgorCSAqLworCWVudHJ5LT5za2IgPSBza2I7CisJZW50cnktPmZsYWdzID0gMDsKKworCXJ0MngwMGRldi0+b3BzLT5saWItPmluaXRfcnhlbnRyeShydDJ4MDBkZXYsIGVudHJ5KTsKKworCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhlbnRyeS0+cXVldWUsIFFfSU5ERVgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3J4ZG9uZSk7CiAKIC8qCi0gKiBUWCBkZXNjcmlwdG9yIGluaXRpYWxpemVyCi0gKi8KLXZvaWQgcnQyeDAwbGliX3dyaXRlX3R4X2Rlc2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQotewotCXN0cnVjdCB0eGVudHJ5X2Rlc2MgdHhkZXNjOwotCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2JkZXNjLT5kYXRhOwotCWNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqcmF0ZTsKLQlpbnQgdHhfcmF0ZTsKLQlpbnQgbGVuZ3RoOwotCWludCBkdXJhdGlvbjsKLQlpbnQgcmVzaWR1YWw7Ci0JdTE2IGZyYW1lX2NvbnRyb2w7Ci0JdTE2IHNlcV9jdHJsOwotCi0JbWVtc2V0KCZ0eGRlc2MsIDAsIHNpemVvZih0eGRlc2MpKTsKLQotCXR4ZGVzYy5xdWV1ZSA9IHNrYmRlc2MtPmVudHJ5LT5xdWV1ZS0+cWlkOwotCXR4ZGVzYy5jd19taW4gPSBza2JkZXNjLT5lbnRyeS0+cXVldWUtPmN3X21pbjsKLQl0eGRlc2MuY3dfbWF4ID0gc2tiZGVzYy0+ZW50cnktPnF1ZXVlLT5jd19tYXg7Ci0JdHhkZXNjLmFpZnMgPSBza2JkZXNjLT5lbnRyeS0+cXVldWUtPmFpZnM7Ci0KLQkvKgotCSAqIFJlYWQgcmVxdWlyZWQgZmllbGRzIGZyb20gaWVlZTgwMjExIGhlYWRlci4KLQkgKi8KLQlmcmFtZV9jb250cm9sID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQlzZXFfY3RybCA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOwotCi0JdHhfcmF0ZSA9IGNvbnRyb2wtPnR4X3JhdGUtPmh3X3ZhbHVlOwotCi0JLyoKLQkgKiBDaGVjayB3aGV0aGVyIHRoaXMgZnJhbWUgaXMgdG8gYmUgYWNrZWQKLQkgKi8KLQlpZiAoIShjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spKQotCQlfX3NldF9iaXQoRU5UUllfVFhEX0FDSywgJnR4ZGVzYy5mbGFncyk7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoaXMgaXMgYSBSVFMvQ1RTIGZyYW1lCi0JICovCi0JaWYgKGlzX3J0c19mcmFtZShmcmFtZV9jb250cm9sKSB8fCBpc19jdHNfZnJhbWUoZnJhbWVfY29udHJvbCkpIHsKLQkJX19zZXRfYml0KEVOVFJZX1RYRF9CVVJTVCwgJnR4ZGVzYy5mbGFncyk7Ci0JCWlmIChpc19ydHNfZnJhbWUoZnJhbWVfY29udHJvbCkpIHsKLQkJCV9fc2V0X2JpdChFTlRSWV9UWERfUlRTX0ZSQU1FLCAmdHhkZXNjLmZsYWdzKTsKLQkJCV9fc2V0X2JpdChFTlRSWV9UWERfQUNLLCAmdHhkZXNjLmZsYWdzKTsKLQkJfSBlbHNlCi0JCQlfX2NsZWFyX2JpdChFTlRSWV9UWERfQUNLLCAmdHhkZXNjLmZsYWdzKTsKLQkJaWYgKGNvbnRyb2wtPnJ0c19jdHNfcmF0ZSkKLQkJCXR4X3JhdGUgPSBjb250cm9sLT5ydHNfY3RzX3JhdGUtPmh3X3ZhbHVlOwotCX0KLQotCXJhdGUgPSBydDJ4MDBfZ2V0X3JhdGUodHhfcmF0ZSk7Ci0KLQkvKgotCSAqIENoZWNrIGlmIG1vcmUgZnJhZ21lbnRzIGFyZSBwZW5kaW5nCi0JICovCi0JaWYgKGllZWU4MDIxMV9nZXRfbW9yZWZyYWcoaGRyKSkgewotCQlfX3NldF9iaXQoRU5UUllfVFhEX0JVUlNULCAmdHhkZXNjLmZsYWdzKTsKLQkJX19zZXRfYml0KEVOVFJZX1RYRF9NT1JFX0ZSQUcsICZ0eGRlc2MuZmxhZ3MpOwotCX0KLQotCS8qCi0JICogQmVhY29ucyBhbmQgcHJvYmUgcmVzcG9uc2VzIHJlcXVpcmUgdGhlIHRzZiB0aW1lc3RhbXAKLQkgKiB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBmcmFtZS4KLQkgKi8KLQlpZiAoY29udHJvbC0+cXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04gfHwKLQkgICAgaXNfcHJvYmVfcmVzcChmcmFtZV9jb250cm9sKSkKLQkJX19zZXRfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLmZsYWdzKTsKLQotCS8qCi0JICogRGV0ZXJtaW5lIHdpdGggd2hhdCBJRlMgcHJpb3JpdHkgdGhpcyBmcmFtZSBzaG91bGQgYmUgc2VuZC4KLQkgKiBTZXQgaWZzIHRvIElGU19TSUZTIHdoZW4gdGhlIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBmcmFnbWVudCwKLQkgKiBvciB0aGlzIGZyYWdtZW50IGNhbWUgYWZ0ZXIgUlRTL0NUUy4KLQkgKi8KLQlpZiAoKHNlcV9jdHJsICYgSUVFRTgwMjExX1NDVExfRlJBRykgPiAwIHx8Ci0JICAgIHRlc3RfYml0KEVOVFJZX1RYRF9SVFNfRlJBTUUsICZ0eGRlc2MuZmxhZ3MpKQotCQl0eGRlc2MuaWZzID0gSUZTX1NJRlM7Ci0JZWxzZQotCQl0eGRlc2MuaWZzID0gSUZTX0JBQ0tPRkY7Ci0KLQkvKgotCSAqIFBMQ1Agc2V0dXAKLQkgKiBMZW5ndGggY2FsY3VsYXRpb24gZGVwZW5kcyBvbiBPRkRNL0NDSyByYXRlLgotCSAqLwotCXR4ZGVzYy5zaWduYWwgPSByYXRlLT5wbGNwOwotCXR4ZGVzYy5zZXJ2aWNlID0gMHgwNDsKLQotCWxlbmd0aCA9IHNrYmRlc2MtPmRhdGFfbGVuICsgRkNTX0xFTjsKLQlpZiAocmF0ZS0+ZmxhZ3MgJiBERVZfUkFURV9PRkRNKSB7Ci0JCV9fc2V0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLmZsYWdzKTsKLQotCQl0eGRlc2MubGVuZ3RoX2hpZ2ggPSAobGVuZ3RoID4+IDYpICYgMHgzZjsKLQkJdHhkZXNjLmxlbmd0aF9sb3cgPSBsZW5ndGggJiAweDNmOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIENvbnZlcnQgbGVuZ3RoIHRvIG1pY3Jvc2Vjb25kcy4KLQkJICovCi0JCXJlc2lkdWFsID0gZ2V0X2R1cmF0aW9uX3JlcyhsZW5ndGgsIHJhdGUtPmJpdHJhdGUpOwotCQlkdXJhdGlvbiA9IGdldF9kdXJhdGlvbihsZW5ndGgsIHJhdGUtPmJpdHJhdGUpOwotCi0JCWlmIChyZXNpZHVhbCAhPSAwKSB7Ci0JCQlkdXJhdGlvbisrOwotCi0JCQkvKgotCQkJICogQ2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIExlbmd0aCBFeHRlbnNpb24KLQkJCSAqLwotCQkJaWYgKHJhdGUtPmJpdHJhdGUgPT0gMTEwICYmIHJlc2lkdWFsIDw9IDMwKQotCQkJCXR4ZGVzYy5zZXJ2aWNlIHw9IDB4ODA7Ci0JCX0KLQotCQl0eGRlc2MubGVuZ3RoX2hpZ2ggPSAoZHVyYXRpb24gPj4gOCkgJiAweGZmOwotCQl0eGRlc2MubGVuZ3RoX2xvdyA9IGR1cmF0aW9uICYgMHhmZjsKLQotCQkvKgotCQkgKiBXaGVuIHByZWFtYmxlIGlzIGVuYWJsZWQgd2Ugc2hvdWxkIHNldCB0aGUKLQkJICogcHJlYW1ibGUgYml0IGZvciB0aGUgc2lnbmFsLgotCQkgKi8KLQkJaWYgKHJ0MngwMF9nZXRfcmF0ZV9wcmVhbWJsZSh0eF9yYXRlKSkKLQkJCXR4ZGVzYy5zaWduYWwgfD0gMHgwODsKLQl9Ci0KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT53cml0ZV90eF9kZXNjKHJ0MngwMGRldiwgc2tiLCAmdHhkZXNjLCBjb250cm9sKTsKLQotCS8qCi0JICogVXBkYXRlIHF1ZXVlIGVudHJ5LgotCSAqLwotCXNrYmRlc2MtPmVudHJ5LT5za2IgPSBza2I7Ci0KLQkvKgotCSAqIFRoZSBmcmFtZSBoYXMgYmVlbiBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGFuZCByZWFkeQotCSAqIGZvciBzZW5kaW5nIHRvIHRoZSBkZXZpY2UuIFRoZSBjYWxsZXIgd2lsbCBwdXNoIHRoZQotCSAqIGZyYW1lIHRvIHRoZSBkZXZpY2UsIGJ1dCB3ZSBhcmUgZ29pbmcgdG8gcHVzaCB0aGUKLQkgKiBmcmFtZSB0byBkZWJ1Z2ZzIGhlcmUuCi0JICovCi0Jc2tiZGVzYy0+ZnJhbWVfdHlwZSA9IERVTVBfRlJBTUVfVFg7Ci0JcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIHNrYik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfd3JpdGVfdHhfZGVzYyk7Ci0KLS8qCiAgKiBEcml2ZXIgaW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCiAgKi8KIGNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSBydDJ4MDBfc3VwcG9ydGVkX3JhdGVzWzEyXSA9IHsKQEAgLTk3OCw2ICs5MDIsMTEgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCS8qCisJICogSW5pdGlhbGl6ZSBIVyBmaWVsZHMuCisJICovCisJcnQyeDAwZGV2LT5ody0+cXVldWVzID0gcnQyeDAwZGV2LT5vcHMtPnR4X3F1ZXVlczsKKworCS8qCiAJICogUmVnaXN0ZXIgSFcuCiAJICovCiAJc3RhdHVzID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHJ0MngwMGRldi0+aHcpOwpAQCAtMTEzMSwxMCArMTA2MCw2IEBACiAJLyoKIAkgKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gd29yay4KIAkgKi8KLQlydDJ4MDBkZXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJydDJ4MDBsaWIiKTsKLQlpZiAoIXJ0MngwMGRldi0+d29ya3F1ZXVlKQotCQlnb3RvIGV4aXQ7Ci0KIAlJTklUX1dPUksoJnJ0MngwMGRldi0+aW50Zl93b3JrLCBydDJ4MDBsaWJfaW50Zl9zY2hlZHVsZWQpOwogCUlOSVRfV09SSygmcnQyeDAwZGV2LT5maWx0ZXJfd29yaywgcnQyeDAwbGliX3BhY2tldGZpbHRlcl9zY2hlZHVsZWQpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPmxpbmsud29yaywgcnQyeDAwbGliX2xpbmtfdHVuZXIpOwpAQCAtMTE5NSwxMyArMTEyMCw2IEBACiAJcnQyeDAwbGVkc191bnJlZ2lzdGVyKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIFN0b3AgYWxsIHF1ZXVlZCB3b3JrLiBOb3RlIHRoYXQgbW9zdCB0YXNrcyB3aWxsIGFscmVhZHkgYmUgaGFsdGVkCi0JICogZHVyaW5nIHJ0MngwMGxpYl9kaXNhYmxlX3JhZGlvKCkgYW5kIHJ0MngwMGxpYl91bmluaXRpYWxpemUoKS4KLQkgKi8KLQlmbHVzaF93b3JrcXVldWUocnQyeDAwZGV2LT53b3JrcXVldWUpOwotCWRlc3Ryb3lfd29ya3F1ZXVlKHJ0MngwMGRldi0+d29ya3F1ZXVlKTsKLQotCS8qCiAJICogRnJlZSBpZWVlODAyMTFfaHcgbWVtb3J5LgogCSAqLwogCXJ0MngwMGxpYl9yZW1vdmVfaHcocnQyeDAwZGV2KTsKQEAgLTEyNDYsNyArMTE2NCw2IEBACiAJICogU3VzcGVuZC9kaXNhYmxlIGV4dHJhIGNvbXBvbmVudHMuCiAJICovCiAJcnQyeDAwbGVkc19zdXNwZW5kKHJ0MngwMGRldik7Ci0JcnQyeDAwcmZraWxsX3N1c3BlbmQocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19kZXJlZ2lzdGVyKHJ0MngwMGRldik7CiAKIGV4aXQ6CkBAIC0xMzAyLDcgKzEyMTksNiBAQAogCSAqIFJlc3RvcmUvZW5hYmxlIGV4dHJhIGNvbXBvbmVudHMuCiAJICovCiAJcnQyeDAwZGVidWdfcmVnaXN0ZXIocnQyeDAwZGV2KTsKLQlydDJ4MDByZmtpbGxfcmVzdW1lKHJ0MngwMGRldik7CiAJcnQyeDAwbGVkc19yZXN1bWUocnQyeDAwZGV2KTsKIAogCS8qCkBAIC0xMzQzLDcgKzEyNTksNyBAQAogCSAqIEluIHRoYXQgY2FzZSB3ZSBoYXZlIGRpc2FibGVkIHRoZSBUWCBxdWV1ZSBhbmQgc2hvdWxkCiAJICogbm93IGVuYWJsZSBpdCBhZ2FpbgogCSAqLwotCWllZWU4MDIxMV9zdGFydF9xdWV1ZXMocnQyeDAwZGV2LT5odyk7CisJaWVlZTgwMjExX3dha2VfcXVldWVzKHJ0MngwMGRldi0+aHcpOwogCiAJLyoKIAkgKiBEdXJpbmcgaW50ZXJmYWNlIGl0ZXJhdGlvbiB3ZSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCmluZGV4IGI5NzFiYzYuLmJhYjA1YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCkBAIC0xMDAsNiArMTAwLDE0IEBACiAJcmV0dmFsID0gcnQyeDAwZGV2LT5vcHMtPmxpYi0+bG9hZF9maXJtd2FyZShydDJ4MDBkZXYsCiAJCQkJCQkgICAgcnQyeDAwZGV2LT5mdy0+ZGF0YSwKIAkJCQkJCSAgICBydDJ4MDBkZXYtPmZ3LT5zaXplKTsKKworCS8qCisJICogV2hlbiB0aGUgZmlybXdhcmUgaXMgdXBsb2FkZWQgdG8gdGhlIGhhcmR3YXJlIHRoZSBMRUQKKwkgKiBhc3NvY2lhdGlvbiBzdGF0dXMgbWlnaHQgaGF2ZSBiZWVuIHRyaWdnZXJlZCwgZm9yIGNvcnJlY3QKKwkgKiBMRUQgaGFuZGxpbmcgaXQgc2hvdWxkIG5vdyBiZSByZXNldC4KKwkgKi8KKwlydDJ4MDBsZWRzX2xlZF9hc3NvYyhydDJ4MDBkZXYsIGZhbHNlKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAppbmRleCA0MWVlMDJjLi5mMmM5YjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCkBAIC0yNiwxMiArMjYsMTQgQEAKICNpZm5kZWYgUlQyWDAwTElCX0gKICNkZWZpbmUgUlQyWDAwTElCX0gKIAorI2luY2x1ZGUgInJ0MngwMGR1bXAuaCIKKwogLyoKICAqIEludGVydmFsIGRlZmluZXMKICAqIEJvdGggdGhlIGxpbmsgdHVuZXIgYXMgdGhlIHJma2lsbCB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlciBzZWNvbmQuCiAgKi8KICNkZWZpbmUgTElOS19UVU5FX0lOVEVSVkFMCSggcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikgKQotI2RlZmluZSBSRktJTExfUE9MTF9JTlRFUlZBTAkoIDEwMDAgKQorI2RlZmluZSBSRktJTExfUE9MTF9JTlRFUlZBTAkoIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopICkKIAogLyoKICAqIHJ0MngwMF9yYXRlOiBQZXIgcmF0ZSBkZXZpY2UgaW5mb3JtYXRpb24KQEAgLTk2LDkgKzk4LDY1IEBACiB2b2lkIHJ0MngwMGxpYl9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLCBjb25zdCBpbnQgZm9yY2VfY29uZmlnKTsKIAotLyoKLSAqIFF1ZXVlIGhhbmRsZXJzLgorLyoqCisgKiBET0M6IFF1ZXVlIGhhbmRsZXJzCiAgKi8KKworLyoqCisgKiBydDJ4MDBxdWV1ZV9hbGxvY19yeHNrYiAtIGFsbG9jYXRlIGEgc2tiIGZvciBSWCBwdXJwb3Nlcy4KKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQHF1ZXVlOiBUaGUgcXVldWUgZm9yIHdoaWNoIHRoZSBza2Igd2lsbCBiZSBhcHBsaWNhYmxlLgorICovCitzdHJ1Y3Qgc2tfYnVmZiAqcnQyeDAwcXVldWVfYWxsb2Nfcnhza2Ioc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSk7CisKKy8qKgorICogcnQyeDAwcXVldWVfdW5tYXBfc2tiIC0gVW5tYXAgYSBza2IgZnJvbSBETUEuCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqIEBza2I6IFRoZSBza2IgdG8gdW5tYXAuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfdW5tYXBfc2tiKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX2ZyZWVfc2tiIC0gZnJlZSBhIHNrYgorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAc2tiOiBUaGUgc2tiIHRvIGZyZWUuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfZnJlZV9za2Ioc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKy8qKgorICogcnQyeDAwcXVldWVfZnJlZV9za2IgLSBmcmVlIGEgc2tiCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqIEBza2I6IFRoZSBza2IgdG8gZnJlZS4KKyAqLwordm9pZCBydDJ4MDBxdWV1ZV9mcmVlX3NrYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyoqCisgKiBydDJ4MDBxdWV1ZV93cml0ZV90eF9mcmFtZSAtIFdyaXRlIFRYIGZyYW1lIHRvIGhhcmR3YXJlCisgKiBAcXVldWU6IFF1ZXVlIG92ZXIgd2hpY2ggdGhlIGZyYW1lIHNob3VsZCBiZSBzZW5kCisgKiBAc2tiOiBUaGUgc2tiIHRvIHNlbmQKKyAqLworaW50IHJ0MngwMHF1ZXVlX3dyaXRlX3R4X2ZyYW1lKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKy8qKgorICogcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbiAtIFNlbmQgbmV3IGJlYWNvbiBmcm9tIG1hYzgwMjExIHRvIGhhcmR3YXJlCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqIEB2aWY6IEludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGJlYWNvbiBzaG91bGQgYmUgdXBkYXRlZC4KKyAqLworaW50IHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX2luZGV4X2luYyAtIEluZGV4IGluY3JlbWVudGF0aW9uIGZ1bmN0aW9uCisgKiBAcXVldWU6IFF1ZXVlICgmc3RydWN0IGRhdGFfcXVldWUpIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4KKyAqIEBpbmRleDogSW5kZXggdHlwZSAoJmVudW0gcXVldWVfaW5kZXgpIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5jcmVhc2UgdGhlIHJlcXVlc3RlZCBpbmRleCBvbiB0aGUgcXVldWUsCisgKiBpdCB3aWxsIGdyYWIgdGhlIGFwcHJvcHJpYXRlIGxvY2tzIGFuZCBoYW5kbGUgcXVldWUgb3ZlcmZsb3cgZXZlbnRzIGJ5CisgKiByZXNldHRpbmcgdGhlIGluZGV4IHRvIHRoZSBzdGFydCBvZiB0aGUgcXVldWUuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfaW5kZXhfaW5jKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgZW51bSBxdWV1ZV9pbmRleCBpbmRleCk7CisKIHZvaWQgcnQyeDAwcXVldWVfaW5pdF9yeChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwcXVldWVfaW5pdF90eChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIGludCBydDJ4MDBxdWV1ZV9pbml0aWFsaXplKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwpAQCAtMTI4LDcgKzE4Niw4IEBACiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUwogdm9pZCBydDJ4MDBkZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwZGVidWdfZGVyZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLXZvaWQgcnQyeDAwZGVidWdfZHVtcF9mcmFtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgcnQyeDAwZGVidWdfZHVtcF9mcmFtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgIGVudW0gcnQyeDAwX2R1bXBfdHlwZSB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwZGVidWdfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKQEAgLTEzOSw2ICsxOTgsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwZGVidWdfZHVtcF9mcmFtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkgIGVudW0gcnQyeDAwX2R1bXBfdHlwZSB0eXBlLAogCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiB9CkBAIC0xNTIsOCArMjEyLDYgQEAKIHZvaWQgcnQyeDAwcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiB2b2lkIHJ0MngwMHJma2lsbF9hbGxvY2F0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwcmZraWxsX2ZyZWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Ci12b2lkIHJ0MngwMHJma2lsbF9zdXNwZW5kKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotdm9pZCBydDJ4MDByZmtpbGxfcmVzdW1lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKQEAgLTE3MCwxNCArMjI4LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfZnJlZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwcmZraWxsX3N1c3BlbmQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF9yZXN1bWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLX0KICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwppbmRleCA5Y2IwMjNlLi5mMWRjYmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCkBAIC0zMSwxNCArMzEsMTQgQEAKIAogc3RhdGljIGludCBydDJ4MDBtYWNfdHhfcnRzX2N0cyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19za2IsCi0JCQkJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorCQkJCXN0cnVjdCBza19idWZmICpmcmFnX3NrYikKIHsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihmcmFnX3NrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpydHNfaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBzaXplOwogCi0JaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9DVFNfUFJPVEVDVCkKIAkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2N0cyk7CiAJZWxzZQogCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnRzKTsKQEAgLTUyLDIzICs1MiwzNyBAQAogCXNrYl9yZXNlcnZlKHNrYiwgcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20pOwogCXNrYl9wdXQoc2tiLCBzaXplKTsKIAotCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QpCi0JCWllZWU4MDIxMV9jdHN0b3NlbGZfZ2V0KHJ0MngwMGRldi0+aHcsIGNvbnRyb2wtPnZpZiwKLQkJCQkJZnJhZ19za2ItPmRhdGEsIGZyYWdfc2tiLT5sZW4sIGNvbnRyb2wsCisJLyoKKwkgKiBDb3B5IFRYIGluZm9ybWF0aW9uIG92ZXIgZnJvbSBvcmlnaW5hbCBmcmFtZSB0bworCSAqIFJUUy9DVFMgZnJhbWUuIE5vdGUgdGhhdCB3ZSBzZXQgdGhlIG5vIGVuY3J5cHRpb24gZmxhZworCSAqIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhpcyBmcmFtZSB0byBiZSBlbmNyeXB0ZWQuCisJICogUlRTIGZyYW1lcyBzaG91bGQgYmUgYWNrZWQsIHdoaWxlIENUUy10by1zZWxmIGZyYW1lcworCSAqIHNob3VsZCBub3QuIFRoZSByZWFkeSBmb3IgVFggZmxhZyBpcyBjbGVhcmVkIHRvIHByZXZlbnQKKwkgKiBpdCBiZWluZyBhdXRvbWF0aWNhbGx5IHNlbmQgd2hlbiB0aGUgZGVzY3JpcHRvciBpcworCSAqIHdyaXR0ZW4gdG8gdGhlIGhhcmR3YXJlLgorCSAqLworCW1lbWNweShza2ItPmNiLCBmcmFnX3NrYi0+Y2IsIHNpemVvZihza2ItPmNiKSk7CisJcnRzX2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJcnRzX2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfRE9fTk9UX0VOQ1JZUFQ7CisJcnRzX2luZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfQ1RMX1VTRV9SVFNfQ1RTOworCXJ0c19pbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0NUTF9VU0VfQ1RTX1BST1RFQ1Q7CisJcnRzX2luZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9DVFNfUFJPVEVDVCkKKwkJcnRzX2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLOworCWVsc2UKKwkJcnRzX2luZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfQ1RMX05PX0FDSzsKKworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX0NUU19QUk9URUNUKQorCQlpZWVlODAyMTFfY3RzdG9zZWxmX2dldChydDJ4MDBkZXYtPmh3LCB0eF9pbmZvLT5jb250cm9sLnZpZiwKKwkJCQkJZnJhZ19za2ItPmRhdGEsIHNpemUsIHR4X2luZm8sCiAJCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2N0cyAqKShza2ItPmRhdGEpKTsKIAllbHNlCi0JCWllZWU4MDIxMV9ydHNfZ2V0KHJ0MngwMGRldi0+aHcsIGNvbnRyb2wtPnZpZiwKLQkJCQkgIGZyYWdfc2tiLT5kYXRhLCBmcmFnX3NrYi0+bGVuLCBjb250cm9sLAorCQlpZWVlODAyMTFfcnRzX2dldChydDJ4MDBkZXYtPmh3LCB0eF9pbmZvLT5jb250cm9sLnZpZiwKKwkJCQkgIGZyYWdfc2tiLT5kYXRhLCBzaXplLCB0eF9pbmZvLAogCQkJCSAgKHN0cnVjdCBpZWVlODAyMTFfcnRzICopKHNrYi0+ZGF0YSkpOwogCi0JLyoKLQkgKiBJbml0aWFsaXplIHNrYiBkZXNjcmlwdG9yCi0JICovCi0Jc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwotCW1lbXNldChza2JkZXNjLCAwLCBzaXplb2YoKnNrYmRlc2MpKTsKLQlza2JkZXNjLT5mbGFncyB8PSBGUkFNRV9ERVNDX0RSSVZFUl9HRU5FUkFURUQ7Ci0KLQlpZiAocnQyeDAwZGV2LT5vcHMtPmxpYi0+d3JpdGVfdHhfZGF0YShydDJ4MDBkZXYsIHF1ZXVlLCBza2IsIGNvbnRyb2wpKSB7CisJaWYgKHJ0MngwMHF1ZXVlX3dyaXRlX3R4X2ZyYW1lKHF1ZXVlLCBza2IpKSB7CiAJCVdBUk5JTkcocnQyeDAwZGV2LCAiRmFpbGVkIHRvIHNlbmQgUlRTL0NUUyBmcmFtZS5cbiIpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtNzYsMTMgKzkwLDE0IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotaW50IHJ0MngwMG1hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKK2ludCBydDJ4MDBtYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaWVlZTgwMjExaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodHhfaW5mby0+Y29udHJvbC52aWYpOwogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CiAJdTE2IGZyYW1lX2NvbnRyb2w7CiAKIAkvKgpAQCAtMTAwLDU3ICsxMTUsNjIgQEAKIAkvKgogCSAqIERldGVybWluZSB3aGljaCBxdWV1ZSB0byBwdXQgcGFja2V0IG9uLgogCSAqLwotCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9TRU5EX0FGVEVSX0RUSU0gJiYKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSAmJgogCSAgICB0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgUlQyWDAwX0JDTl9RVUVVRV9BVElNKTsKKwkJcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBRSURfQVRJTSk7CiAJZWxzZQotCQlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKKwkJcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBxaWQpOwogCWlmICh1bmxpa2VseSghcXVldWUpKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwKIAkJICAgICAgIkF0dGVtcHQgdG8gc2VuZCBwYWNrZXQgb3ZlciBpbnZhbGlkIHF1ZXVlICVkLlxuIgotCQkgICAgICAiUGxlYXNlIGZpbGUgYnVnIHJlcG9ydCB0byAlcy5cbiIsCi0JCSAgICAgIGNvbnRyb2wtPnF1ZXVlLCBEUlZfUFJPSkVDVCk7CisJCSAgICAgICJQbGVhc2UgZmlsZSBidWcgcmVwb3J0IHRvICVzLlxuIiwgcWlkLCBEUlZfUFJPSkVDVCk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJLyoKLQkgKiBJZiBDVFMvUlRTIGlzIHJlcXVpcmVkLiBhbmQgdGhpcyBmcmFtZSBpcyBub3QgQ1RTIG9yIFJUUywKLQkgKiBjcmVhdGUgYW5kIHF1ZXVlIHRoYXQgZnJhbWUgZmlyc3QuIEJ1dCBtYWtlIHN1cmUgd2UgaGF2ZQotCSAqIGF0IGxlYXN0IGVub3VnaCBlbnRyaWVzIGF2YWlsYWJsZSB0byBzZW5kIHRoaXMgQ1RTL1JUUwotCSAqIGZyYW1lIGFzIHdlbGwgYXMgdGhlIGRhdGEgZnJhbWUuCisJICogSWYgQ1RTL1JUUyBpcyByZXF1aXJlZC4gY3JlYXRlIGFuZCBxdWV1ZSB0aGF0IGZyYW1lIGZpcnN0LgorCSAqIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGVub3VnaCBlbnRyaWVzIGF2YWlsYWJsZSB0byBzZW5kCisJICogdGhpcyBDVFMvUlRTIGZyYW1lIGFzIHdlbGwgYXMgdGhlIGRhdGEgZnJhbWUuCisJICogTm90ZSB0aGF0IHdoZW4gdGhlIGRyaXZlciBoYXMgc2V0IHRoZSBzZXRfcnRzX3RocmVzaG9sZCgpCisJICogY2FsbGJhY2sgZnVuY3Rpb24gaXQgZG9lc24ndCBuZWVkIHNvZnR3YXJlIGdlbmVyYXRpb24gb2YKKwkgKiBlaXRoZXIgUlRTIG9yIENUUy10by1zZWxmIGZyYW1lIGFuZCBoYW5kbGVzIGV2ZXJ5dGhpbmcKKwkgKiBpbnNpZGUgdGhlIGhhcmR3YXJlLgogCSAqLwogCWZyYW1lX2NvbnRyb2wgPSBsZTE2X3RvX2NwdShpZWVlODAyMTFoZHItPmZyYW1lX2NvbnRyb2wpOwotCWlmICghaXNfcnRzX2ZyYW1lKGZyYW1lX2NvbnRyb2wpICYmICFpc19jdHNfZnJhbWUoZnJhbWVfY29udHJvbCkgJiYKLQkgICAgKGNvbnRyb2wtPmZsYWdzICYgKElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUyB8Ci0JCQkgICAgICAgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkpKSB7CisJaWYgKCh0eF9pbmZvLT5mbGFncyAmIChJRUVFODAyMTFfVFhfQ1RMX1VTRV9SVFNfQ1RTIHwKKwkJCSAgICAgICBJRUVFODAyMTFfVFhfQ1RMX1VTRV9DVFNfUFJPVEVDVCkpICYmCisJICAgICFydDJ4MDBkZXYtPm9wcy0+aHctPnNldF9ydHNfdGhyZXNob2xkKSB7CiAJCWlmIChydDJ4MDBxdWV1ZV9hdmFpbGFibGUocXVldWUpIDw9IDEpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+aHcsIGNvbnRyb2wtPnF1ZXVlKTsKKwkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+aHcsIHFpZCk7CiAJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJCX0KIAotCQlpZiAocnQyeDAwbWFjX3R4X3J0c19jdHMocnQyeDAwZGV2LCBxdWV1ZSwgc2tiLCBjb250cm9sKSkgewotCQkJaWVlZTgwMjExX3N0b3BfcXVldWUocnQyeDAwZGV2LT5odywgY29udHJvbC0+cXVldWUpOworCQlpZiAocnQyeDAwbWFjX3R4X3J0c19jdHMocnQyeDAwZGV2LCBxdWV1ZSwgc2tiKSkgeworCQkJaWVlZTgwMjExX3N0b3BfcXVldWUocnQyeDAwZGV2LT5odywgcWlkKTsKIAkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAkJfQogCX0KIAogCS8qCi0JICogSW5pdGlhbGl6ZSBza2IgZGVzY3JpcHRvcgorCSAqIFhYWDogVGhpcyBpcyBhcyB3cm9uZyBhcyB0aGUgb2xkIG1hYzgwMjExIGNvZGUgd2FzLAorCSAqCWR1ZSB0byBiZWFjb25zIG5vdCBnZXR0aW5nIHNlcXVlbmNlIG51bWJlcnMgYXNzaWduZWQKKwkgKglwcm9wZXJseS4KIAkgKi8KLQlza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7Ci0JbWVtc2V0KHNrYmRlc2MsIDAsIHNpemVvZigqc2tiZGVzYykpOworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkgeworCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKQorCQkJaW50Zi0+c2Vxbm8gKz0gMHgxMDsKKwkJaWVlZTgwMjExaGRyLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKKwkJaWVlZTgwMjExaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihpbnRmLT5zZXFubyk7CisJfQogCi0JaWYgKHJ0MngwMGRldi0+b3BzLT5saWItPndyaXRlX3R4X2RhdGEocnQyeDAwZGV2LCBxdWV1ZSwgc2tiLCBjb250cm9sKSkgewotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShydDJ4MDBkZXYtPmh3LCBjb250cm9sLT5xdWV1ZSk7CisJaWYgKHJ0MngwMHF1ZXVlX3dyaXRlX3R4X2ZyYW1lKHF1ZXVlLCBza2IpKSB7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+aHcsIHFpZCk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQlpZiAocnQyeDAwcXVldWVfZnVsbChxdWV1ZSkpCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+aHcsIGNvbnRyb2wtPnF1ZXVlKTsKLQotCWlmIChydDJ4MDBkZXYtPm9wcy0+bGliLT5raWNrX3R4X3F1ZXVlKQotCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5raWNrX3R4X3F1ZXVlKHJ0MngwMGRldiwgY29udHJvbC0+cXVldWUpOworCWlmIChydDJ4MDBxdWV1ZV90aHJlc2hvbGQocXVldWUpKQorCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShydDJ4MDBkZXYtPmh3LCBxaWQpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTE4Myw4ICsyMDMsNyBAQAogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb25mLT52aWYpOwotCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9Ci0JICAgIHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIFJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OKTsKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBRSURfQkVBQ09OKTsKIAlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtMTk3LDEzICsyMTYsMTIgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKgotCSAqIFdoZW4gd2UgZG9uJ3Qgc3VwcG9ydCBtaXhlZCBpbnRlcmZhY2VzIChhIGNvbWJpbmF0aW9uCi0JICogb2Ygc3RhIGFuZCBhcCB2aXJ0dWFsIGludGVyZmFjZXMpIHRoZW4gd2UgY2FuIG9ubHkKLQkgKiBhZGQgdGhpcyBpbnRlcmZhY2Ugd2hlbiB0aGUgcml2YWwgaW50ZXJmYWNlIGNvdW50IGlzIDAuCisJICogV2UgZG9uJ3Qgc3VwcG9ydCBtaXhlZCBjb21iaW5hdGlvbnMgb2Ygc3RhIGFuZCBhcCB2aXJ0dWFsCisJICogaW50ZXJmYWNlcy4gV2UgY2FuIG9ubHkgYWRkIHRoaXMgaW50ZXJmYWNlIHdoZW4gdGhlIHJpdmFsCisJICogaW50ZXJmYWNlIGNvdW50IGlzIDAuCiAJICovCi0JaWYgKCF0ZXN0X2JpdChEUklWRVJfU1VQUE9SVF9NSVhFRF9JTlRFUkZBQ0VTLCAmcnQyeDAwZGV2LT5mbGFncykgJiYKLQkgICAgKChjb25mLT50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQICYmIHJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpIHx8Ci0JICAgICAoY29uZi0+dHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCAmJiBydDJ4MDBkZXYtPmludGZfYXBfY291bnQpKSkKKwlpZiAoKGNvbmYtPnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYgcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkgfHwKKwkgICAgKGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYgcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50KSkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCiAJLyoKQEAgLTM0Myw3ICszNjEsOCBAQAogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwotCWludCBzdGF0dXM7CisJaW50IHVwZGF0ZV9ic3NpZCA9IDA7CisJaW50IHN0YXR1cyA9IDA7CiAKIAkvKgogCSAqIE1hYzgwMjExIG1pZ2h0IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aGlsZSB3ZSBhcmUgdHJ5aW5nCkBAIC0zNTUsMTIgKzM3NCwxMyBAQAogCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7CiAKIAkvKgotCSAqIElmIHRoZSBpbnRlcmZhY2UgZG9lcyBub3Qgd29yayBpbiBtYXN0ZXIgbW9kZSwKLQkgKiB0aGVuIHRoZSBic3NpZCB2YWx1ZSBpbiB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZQotCSAqIHNob3VsZCBub3cgYmUgc2V0LgorCSAqIGNvbmYtPmJzc2lkIGNhbiBiZSBOVUxMIGlmIGNvbWluZyBmcm9tIHRoZSBpbnRlcm5hbAorCSAqIGJlYWNvbiB1cGRhdGUgcm91dGluZS4KIAkgKi8KLQlpZiAoY29uZi0+dHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCkKKwlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JTU0lEICYmIGNvbmYtPmJzc2lkKSB7CisJCXVwZGF0ZV9ic3NpZCA9IDE7CiAJCW1lbWNweSgmaW50Zi0+YnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJfQogCiAJc3Bpbl91bmxvY2soJmludGYtPmxvY2spOwogCkBAIC0zNzAsMTkgKzM5MCwxNCBAQAogCSAqIHZhbHVlcyBhcyBhcmd1bWVudHMgd2UgbWFrZSBrZWVwIGFjY2VzcyB0byBydDJ4MDBfaW50ZiB0aHJlYWQgc2FmZQogCSAqIGV2ZW4gd2l0aG91dCB0aGUgbG9jay4KIAkgKi8KLQlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLCBjb25mLT50eXBlLCBOVUxMLCBjb25mLT5ic3NpZCk7CisJcnQyeDAwbGliX2NvbmZpZ19pbnRmKHJ0MngwMGRldiwgaW50ZiwgdmlmLT50eXBlLCBOVUxMLAorCQkJICAgICAgdXBkYXRlX2Jzc2lkID8gY29uZi0+YnNzaWQgOiBOVUxMKTsKIAogCS8qCi0JICogV2Ugb25seSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGJlYWNvbiB3aGVuIG1hc3RlciBtb2RlIGlzIGVuYWJsZWQuCisJICogVXBkYXRlIHRoZSBiZWFjb24uCiAJICovCi0JaWYgKGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgfHwgIWNvbmYtPmJlYWNvbikKLQkJcmV0dXJuIDA7Ci0KLQlzdGF0dXMgPSBydDJ4MDBkZXYtPm9wcy0+aHctPmJlYWNvbl91cGRhdGUocnQyeDAwZGV2LT5odywKLQkJCQkJCSAgIGNvbmYtPmJlYWNvbiwKLQkJCQkJCSAgIGNvbmYtPmJlYWNvbl9jb250cm9sKTsKLQlpZiAoc3RhdHVzKQotCQlkZXZfa2ZyZWVfc2tiKGNvbmYtPmJlYWNvbik7CisJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pCisJCXN0YXR1cyA9IHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24ocnQyeDAwZGV2LCB2aWYpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQyOCw3ICs0NDMsNyBAQAogCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19maWx0ZXIocnQyeDAwZGV2LCAqdG90YWxfZmxhZ3MpOwogCWVsc2UKLQkJcXVldWVfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+ZmlsdGVyX3dvcmspOworCQlxdWV1ZV93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+ZmlsdGVyX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIpOwogCkBAIC00NTQsMTAgKzQ2OSwxMCBAQAogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBody0+cXVldWVzOyBpKyspIHsKLQkJc3RhdHMtPmRhdGFbaV0ubGVuID0gcnQyeDAwZGV2LT50eFtpXS5sZW5ndGg7Ci0JCXN0YXRzLT5kYXRhW2ldLmxpbWl0ID0gcnQyeDAwZGV2LT50eFtpXS5saW1pdDsKLQkJc3RhdHMtPmRhdGFbaV0uY291bnQgPSBydDJ4MDBkZXYtPnR4W2ldLmNvdW50OworCWZvciAoaSA9IDA7IGkgPCBydDJ4MDBkZXYtPm9wcy0+dHhfcXVldWVzOyBpKyspIHsKKwkJc3RhdHNbaV0ubGVuID0gcnQyeDAwZGV2LT50eFtpXS5sZW5ndGg7CisJCXN0YXRzW2ldLmxpbWl0ID0gcnQyeDAwZGV2LT50eFtpXS5saW1pdDsKKwkJc3RhdHNbaV0uY291bnQgPSBydDJ4MDBkZXYtPnR4W2ldLmNvdW50OwogCX0KIAogCXJldHVybiAwOwpAQCAtNDk4LDcgKzUxMyw3IEBACiAJICogV2hlbiB0aGUgZXJwIGluZm9ybWF0aW9uIGhhcyBjaGFuZ2VkLCB3ZSBzaG91bGQgcGVyZm9ybQogCSAqIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBzdGVwcy4gRm9yIGFsbCBvdGhlciBjaGFuZ2VzIHdlIGFyZSBkb25lLgogCSAqLwotCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7CisJaWYgKGNoYW5nZXMgJiAoQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFIHwgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKSkgewogCQlpZiAoIXRlc3RfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQkJcnQyeDAwbGliX2NvbmZpZ19lcnAocnQyeDAwZGV2LCBpbnRmLCBic3NfY29uZik7CiAJCWVsc2UKQEAgLTUwOSwxMyArNTI0LDEzIEBACiAJbWVtY3B5KCZpbnRmLT5jb25mLCBic3NfY29uZiwgc2l6ZW9mKCpic3NfY29uZikpOwogCWlmIChkZWxheWVkKSB7CiAJCWludGYtPmRlbGF5ZWRfZmxhZ3MgfD0gZGVsYXllZDsKLQkJcXVldWVfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKKwkJc2NoZWR1bGVfd29yaygmcnQyeDAwZGV2LT5pbnRmX3dvcmspOwogCX0KIAlzcGluX3VubG9jaygmaW50Zi0+bG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZCk7CiAKLWludCBydDJ4MDBtYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlX2lkeCwKK2ludCBydDJ4MDBtYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlX2lkeCwKIAkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CkBAIC01MzksMTAgKzU1NCw3IEBACiAJZWxzZQogCQlxdWV1ZS0+Y3dfbWF4ID0gMTA7IC8qIGN3X21pbjogMl4xMCA9IDEwMjQuICovCiAKLQlpZiAocGFyYW1zLT5haWZzID49IDApCi0JCXF1ZXVlLT5haWZzID0gcGFyYW1zLT5haWZzOwotCWVsc2UKLQkJcXVldWUtPmFpZnMgPSAyOworCXF1ZXVlLT5haWZzID0gcGFyYW1zLT5haWZzOwogCiAJSU5GTyhydDJ4MDBkZXYsCiAJICAgICAiQ29uZmlndXJlZCBUWCBxdWV1ZSAlZCAtIENXbWluOiAlZCwgQ1dtYXg6ICVkLCBBaWZzOiAlZC5cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKaW5kZXggNjA4OTNkZS4uYWRmMjg3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYwpAQCAtMzQsNDQgKzM0LDM0IEBACiAvKgogICogVFggZGF0YSBoYW5kbGVycy4KICAqLwotaW50IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKK2ludCBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVgpOwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eCA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CiAJdTMyIHdvcmQ7CiAKLQlpZiAocnQyeDAwcXVldWVfZnVsbChxdWV1ZSkpCi0JCXJldHVybiAtRUlOVkFMOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMCwgJndvcmQpOwogCi0JcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCAwLCAmd29yZCk7Ci0KLQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9FTlRSWV9PV05FUl9OSUMpIHx8Ci0JICAgIHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfRU5UUllfVkFMSUQpKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwKLQkJICAgICAgIkFycml2ZWQgYXQgbm9uLWZyZWUgZW50cnkgaW4gdGhlIG5vbi1mdWxsIHF1ZXVlICVkLlxuIgorCS8qCisJICogVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgd2UgYWxyZWFkeSBjaGVja2VkIHRoZSBlbnRyeQorCSAqIHdhcyBvdXJzLiBXaGVuIHRoZSBoYXJkd2FyZSBkaXNhZ3JlZXMgdGhlcmUgaGFzIGJlZW4KKwkgKiBhIHF1ZXVlIGNvcnJ1cHRpb24hCisJICovCisJaWYgKHVubGlrZWx5KHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfRU5UUllfT1dORVJfTklDKSB8fAorCQkgICAgIHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfRU5UUllfVkFMSUQpKSkgeworCQlFUlJPUihlbnRyeS0+cXVldWUtPnJ0MngwMGRldiwKKwkJICAgICAgIkNvcnJ1cHQgcXVldWUgJWQsIGFjY2Vzc2luZyBlbnRyeSB3aGljaCBpcyBub3Qgb3Vycy5cbiIKIAkJICAgICAgIlBsZWFzZSBmaWxlIGJ1ZyByZXBvcnQgdG8gJXMuXG4iLAotCQkgICAgICBjb250cm9sLT5xdWV1ZSwgRFJWX1BST0pFQ1QpOworCQkgICAgICBlbnRyeS0+cXVldWUtPnFpZCwgRFJWX1BST0pFQ1QpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKgogCSAqIEZpbGwgaW4gc2tiIGRlc2NyaXB0b3IKIAkgKi8KLQlza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7Ci0Jc2tiZGVzYy0+ZGF0YSA9IHNrYi0+ZGF0YTsKLQlza2JkZXNjLT5kYXRhX2xlbiA9IHNrYi0+bGVuOwotCXNrYmRlc2MtPmRlc2MgPSBwcml2X3R4LT5kZXNjOwotCXNrYmRlc2MtPmRlc2NfbGVuID0gcXVldWUtPmRlc2Nfc2l6ZTsKLQlza2JkZXNjLT5lbnRyeSA9IGVudHJ5OwotCi0JbWVtY3B5KCZwcml2X3R4LT5jb250cm9sLCBjb250cm9sLCBzaXplb2YocHJpdl90eC0+Y29udHJvbCkpOwotCW1lbWNweShwcml2X3R4LT5kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQlydDJ4MDBsaWJfd3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIHNrYiwgY29udHJvbCk7Ci0KLQlydDJ4MDBxdWV1ZV9pbmRleF9pbmMocXVldWUsIFFfSU5ERVgpOworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CisJc2tiZGVzYy0+ZGVzYyA9IGVudHJ5X3ByaXYtPmRlc2M7CisJc2tiZGVzYy0+ZGVzY19sZW4gPSBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZTsKIAogCXJldHVybiAwOwogfQpAQCAtODQsMTgwICs3NCw2MiBAQAogewogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IHJ0MngwMGRldi0+cng7CiAJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcnggKnByaXZfcng7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXY7CiAJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOwotCXN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyByeGRlc2M7Ci0JaW50IGhlYWRlcl9zaXplOwotCWludCBhbGlnbjsKIAl1MzIgd29yZDsKIAogCXdoaWxlICgxKSB7CiAJCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYKTsKLQkJcHJpdl9yeCA9IGVudHJ5LT5wcml2X2RhdGE7Ci0JCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQpOworCQllbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKKwkJcnQyeDAwX2Rlc2NfcmVhZChlbnRyeV9wcml2LT5kZXNjLCAwLCAmd29yZCk7CiAKIAkJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBSWERfRU5UUllfT1dORVJfTklDKSkKIAkJCWJyZWFrOwogCi0JCW1lbXNldCgmcnhkZXNjLCAwLCBzaXplb2YocnhkZXNjKSk7Ci0JCXJ0MngwMGRldi0+b3BzLT5saWItPmZpbGxfcnhkb25lKGVudHJ5LCAmcnhkZXNjKTsKLQotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwcml2X3J4LT5kYXRhOwotCQloZWFkZXJfc2l6ZSA9Ci0JCSAgICBpZWVlODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKTsKLQogCQkvKgotCQkgKiBUaGUgZGF0YSBiZWhpbmQgdGhlIGllZWU4MDIxMSBoZWFkZXIgbXVzdCBiZQotCQkgKiBhbGlnbmVkIG9uIGEgNCBieXRlIGJvdW5kYXJ5LgotCQkgKi8KLQkJYWxpZ24gPSBoZWFkZXJfc2l6ZSAlIDQ7Ci0KLQkJLyoKLQkJICogQWxsb2NhdGUgdGhlIHNrX2J1ZmZlciwgaW5pdGlhbGl6ZSBpdCBhbmQgY29weQotCQkgKiBhbGwgZGF0YSBpbnRvIGl0LgotCQkgKi8KLQkJZW50cnktPnNrYiA9IGRldl9hbGxvY19za2IocnhkZXNjLnNpemUgKyBhbGlnbik7Ci0JCWlmICghZW50cnktPnNrYikKLQkJCXJldHVybjsKLQotCQlza2JfcmVzZXJ2ZShlbnRyeS0+c2tiLCBhbGlnbik7Ci0JCW1lbWNweShza2JfcHV0KGVudHJ5LT5za2IsIHJ4ZGVzYy5zaXplKSwKLQkJICAgICAgIHByaXZfcngtPmRhdGEsIHJ4ZGVzYy5zaXplKTsKLQotCQkvKgotCQkgKiBGaWxsIGluIHNrYiBkZXNjcmlwdG9yCisJCSAqIEZpbGwgaW4gZGVzYyBmaWVsZHMgb2YgdGhlIHNrYiBkZXNjcmlwdG9yCiAJCSAqLwogCQlza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOwotCQltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7Ci0JCXNrYmRlc2MtPmRhdGEgPSBlbnRyeS0+c2tiLT5kYXRhOwotCQlza2JkZXNjLT5kYXRhX2xlbiA9IGVudHJ5LT5za2ItPmxlbjsKLQkJc2tiZGVzYy0+ZGVzYyA9IHByaXZfcngtPmRlc2M7Ci0JCXNrYmRlc2MtPmRlc2NfbGVuID0gcXVldWUtPmRlc2Nfc2l6ZTsKLQkJc2tiZGVzYy0+ZW50cnkgPSBlbnRyeTsKKwkJc2tiZGVzYy0+ZGVzYyA9IGVudHJ5X3ByaXYtPmRlc2M7CisJCXNrYmRlc2MtPmRlc2NfbGVuID0gZW50cnktPnF1ZXVlLT5kZXNjX3NpemU7CiAKIAkJLyoKIAkJICogU2VuZCB0aGUgZnJhbWUgdG8gcnQyeDAwbGliIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCiAJCSAqLwotCQlydDJ4MDBsaWJfcnhkb25lKGVudHJ5LCAmcnhkZXNjKTsKLQotCQlpZiAodGVzdF9iaXQoREVWSUNFX0VOQUJMRURfUkFESU8sICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpIHsKLQkJCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX0VOVFJZX09XTkVSX05JQywgMSk7Ci0JCQlydDJ4MDBfZGVzY193cml0ZShwcml2X3J4LT5kZXNjLCAwLCB3b3JkKTsKLQkJfQotCi0JCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhxdWV1ZSwgUV9JTkRFWCk7CisJCXJ0MngwMGxpYl9yeGRvbmUocnQyeDAwZGV2LCBlbnRyeSk7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcGNpX3J4ZG9uZSk7CiAKLXZvaWQgcnQyeDAwcGNpX3R4ZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAotCQkgICAgICBzdHJ1Y3QgdHhkb25lX2VudHJ5X2Rlc2MgKnR4ZGVzYykKLXsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHggKnByaXZfdHggPSBlbnRyeS0+cHJpdl9kYXRhOwotCXUzMiB3b3JkOwotCi0JdHhkZXNjLT5jb250cm9sID0gJnByaXZfdHgtPmNvbnRyb2w7Ci0JcnQyeDAwbGliX3R4ZG9uZShlbnRyeSwgdHhkZXNjKTsKLQotCS8qCi0JICogTWFrZSB0aGlzIGVudHJ5IGF2YWlsYWJsZSBmb3IgcmV1c2UuCi0JICovCi0JZW50cnktPmZsYWdzID0gMDsKLQotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMCwgJndvcmQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX0VOVFJZX09XTkVSX05JQywgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfRU5UUllfVkFMSUQsIDApOwotCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfdHgtPmRlc2MsIDAsIHdvcmQpOwotCi0JcnQyeDAwcXVldWVfaW5kZXhfaW5jKGVudHJ5LT5xdWV1ZSwgUV9JTkRFWF9ET05FKTsKLQotCS8qCi0JICogSWYgdGhlIGRhdGEgcXVldWUgd2FzIGZ1bGwgYmVmb3JlIHRoZSB0eGRvbmUgaGFuZGxlcgotCSAqIHdlIG11c3QgbWFrZSBzdXJlIHRoZSBwYWNrZXQgcXVldWUgaW4gdGhlIG1hYzgwMjExIHN0YWNrCi0JICogaXMgcmVlbmFibGVkIHdoZW4gdGhlIHR4ZG9uZSBoYW5kbGVyIGhhcyBmaW5pc2hlZC4KLQkgKi8KLQlpZiAoIXJ0MngwMHF1ZXVlX2Z1bGwoZW50cnktPnF1ZXVlKSkKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocnQyeDAwZGV2LT5odywgcHJpdl90eC0+Y29udHJvbC5xdWV1ZSk7Ci0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHBjaV90eGRvbmUpOwotCiAvKgogICogRGV2aWNlIGluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgogICovCi0jZGVmaW5lIGRlc2Nfc2l6ZShfX3F1ZXVlKQkJCVwKLSh7CQkJCQkJXAotCSAoKF9fcXVldWUpLT5saW1pdCAqIChfX3F1ZXVlKS0+ZGVzY19zaXplKTtcCi19KQotCi0jZGVmaW5lIGRhdGFfc2l6ZShfX3F1ZXVlKQkJCVwKLSh7CQkJCQkJXAotCSAoKF9fcXVldWUpLT5saW1pdCAqIChfX3F1ZXVlKS0+ZGF0YV9zaXplKTtcCi19KQotCi0jZGVmaW5lIGRtYV9zaXplKF9fcXVldWUpCQkJXAotKHsJCQkJCQlcCi0JZGF0YV9zaXplKF9fcXVldWUpICsgZGVzY19zaXplKF9fcXVldWUpO1wKLX0pCi0KLSNkZWZpbmUgZGVzY19vZmZzZXQoX19xdWV1ZSwgX19iYXNlLCBfX2kpCVwKLSh7CQkJCQkJXAotCShfX2Jhc2UpICsgZGF0YV9zaXplKF9fcXVldWUpICsgCVwKLQkgICAgKChfX2kpICogKF9fcXVldWUpLT5kZXNjX3NpemUpOwlcCi19KQotCi0jZGVmaW5lIGRhdGFfb2Zmc2V0KF9fcXVldWUsIF9fYmFzZSwgX19pKQlcCi0oewkJCQkJCVwKLQkoX19iYXNlKSArCQkJCVwKLQkgICAgKChfX2kpICogKF9fcXVldWUpLT5kYXRhX3NpemUpOwlcCi19KQotCiBzdGF0aWMgaW50IHJ0MngwMHBjaV9hbGxvY19xdWV1ZV9kbWEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICAgIHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHJ0MngwMGRldl9wY2kocnQyeDAwZGV2KTsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcnggKnByaXZfcng7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSAqZW50cnlfcHJpdjsKIAl2b2lkICphZGRyOwogCWRtYV9hZGRyX3QgZG1hOwotCXZvaWQgKmRlc2NfYWRkcjsKLQlkbWFfYWRkcl90IGRlc2NfZG1hOwotCXZvaWQgKmRhdGFfYWRkcjsKLQlkbWFfYWRkcl90IGRhdGFfZG1hOwogCXVuc2lnbmVkIGludCBpOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBETUEgbWVtb3J5IGZvciBkZXNjcmlwdG9yIGFuZCBidWZmZXIuCiAJICovCi0JYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIGRtYV9zaXplKHF1ZXVlKSwgJmRtYSk7CisJYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChydDJ4MDBkZXYtPmRldiwKKwkJCQkgIHF1ZXVlLT5saW1pdCAqIHF1ZXVlLT5kZXNjX3NpemUsCisJCQkJICAmZG1hLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFhZGRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChhZGRyLCAwLCBkbWFfc2l6ZShxdWV1ZSkpOworCW1lbXNldChhZGRyLCAwLCBxdWV1ZS0+bGltaXQgKiBxdWV1ZS0+ZGVzY19zaXplKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgcXVldWUgZW50cmllcyB0byBjb250YWluIHZhbGlkIGFkZHJlc3Nlcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKLQkJZGVzY19hZGRyID0gZGVzY19vZmZzZXQocXVldWUsIGFkZHIsIGkpOwotCQlkZXNjX2RtYSA9IGRlc2Nfb2Zmc2V0KHF1ZXVlLCBkbWEsIGkpOwotCQlkYXRhX2FkZHIgPSBkYXRhX29mZnNldChxdWV1ZSwgYWRkciwgaSk7Ci0JCWRhdGFfZG1hID0gZGF0YV9vZmZzZXQocXVldWUsIGRtYSwgaSk7Ci0KLQkJaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX1JYKSB7Ci0JCQlwcml2X3J4ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQkJcHJpdl9yeC0+ZGVzYyA9IGRlc2NfYWRkcjsKLQkJCXByaXZfcngtPmRlc2NfZG1hID0gZGVzY19kbWE7Ci0JCQlwcml2X3J4LT5kYXRhID0gZGF0YV9hZGRyOwotCQkJcHJpdl9yeC0+ZGF0YV9kbWEgPSBkYXRhX2RtYTsKLQkJfSBlbHNlIHsKLQkJCXByaXZfdHggPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7Ci0JCQlwcml2X3R4LT5kZXNjID0gZGVzY19hZGRyOwotCQkJcHJpdl90eC0+ZGVzY19kbWEgPSBkZXNjX2RtYTsKLQkJCXByaXZfdHgtPmRhdGEgPSBkYXRhX2FkZHI7Ci0JCQlwcml2X3R4LT5kYXRhX2RtYSA9IGRhdGFfZG1hOwotCQl9CisJCWVudHJ5X3ByaXYgPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7CisJCWVudHJ5X3ByaXYtPmRlc2MgPSBhZGRyICsgaSAqIHF1ZXVlLT5kZXNjX3NpemU7CisJCWVudHJ5X3ByaXYtPmRlc2NfZG1hID0gZG1hICsgaSAqIHF1ZXVlLT5kZXNjX3NpemU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNjYsMzQgKzEzOCwxOSBAQAogc3RhdGljIHZvaWQgcnQyeDAwcGNpX2ZyZWVfcXVldWVfZG1hKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJICAgICBzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBydDJ4MDBkZXZfcGNpKHJ0MngwMGRldik7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4ICpwcml2X3J4OwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKLQl2b2lkICpkYXRhX2FkZHI7Ci0JZG1hX2FkZHJfdCBkYXRhX2RtYTsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXYgPQorCSAgICBxdWV1ZS0+ZW50cmllc1swXS5wcml2X2RhdGE7CiAKLQlpZiAocXVldWUtPnFpZCA9PSBRSURfUlgpIHsKLQkJcHJpdl9yeCA9IHF1ZXVlLT5lbnRyaWVzWzBdLnByaXZfZGF0YTsKLQkJZGF0YV9hZGRyID0gcHJpdl9yeC0+ZGF0YTsKLQkJZGF0YV9kbWEgPSBwcml2X3J4LT5kYXRhX2RtYTsKLQotCQlwcml2X3J4LT5kYXRhID0gTlVMTDsKLQl9IGVsc2UgewotCQlwcml2X3R4ID0gcXVldWUtPmVudHJpZXNbMF0ucHJpdl9kYXRhOwotCQlkYXRhX2FkZHIgPSBwcml2X3R4LT5kYXRhOwotCQlkYXRhX2RtYSA9IHByaXZfdHgtPmRhdGFfZG1hOwotCi0JCXByaXZfdHgtPmRhdGEgPSBOVUxMOwotCX0KLQotCWlmIChkYXRhX2FkZHIpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocGNpX2RldiwgZG1hX3NpemUocXVldWUpLAotCQkJCSAgICBkYXRhX2FkZHIsIGRhdGFfZG1hKTsKKwlpZiAoZW50cnlfcHJpdi0+ZGVzYykKKwkJZG1hX2ZyZWVfY29oZXJlbnQocnQyeDAwZGV2LT5kZXYsCisJCQkJICBxdWV1ZS0+bGltaXQgKiBxdWV1ZS0+ZGVzY19zaXplLAorCQkJCSAgZW50cnlfcHJpdi0+ZGVzYywgZW50cnlfcHJpdi0+ZGVzY19kbWEpOworCWVudHJ5X3ByaXYtPmRlc2MgPSBOVUxMOwogfQogCiBpbnQgcnQyeDAwcGNpX2luaXRpYWxpemUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHJ0MngwMGRldl9wY2kocnQyeDAwZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYocnQyeDAwZGV2LT5kZXYpOwogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIAlpbnQgc3RhdHVzOwogCkBAIC0zMzQsNyArMTkxLDcgQEAKIAkvKgogCSAqIEZyZWUgaXJxIGxpbmUuCiAJICovCi0JZnJlZV9pcnEocnQyeDAwZGV2X3BjaShydDJ4MDBkZXYpLT5pcnEsIHJ0MngwMGRldik7CisJZnJlZV9pcnEodG9fcGNpX2RldihydDJ4MDBkZXYtPmRldiktPmlycSwgcnQyeDAwZGV2KTsKIAogCS8qCiAJICogRnJlZSBETUEKQEAgLTM2Myw3ICsyMjAsNyBAQAogCiBzdGF0aWMgaW50IHJ0MngwMHBjaV9hbGxvY19yZWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHJ0MngwMGRldl9wY2kocnQyeDAwZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYocnQyeDAwZGV2LT5kZXYpOwogCiAJcnQyeDAwZGV2LT5jc3IuYmFzZSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDApLAogCQkJCSAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgMCkpOwpAQCAtNDEyLDcgKzI2OSw3IEBACiAJaWYgKHBjaV9zZXRfbXdpKHBjaV9kZXYpKQogCQlFUlJPUl9QUk9CRSgiTVdJIG5vdCBhdmFpbGFibGUuXG4iKTsKIAotCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCWlmIChkbWFfc2V0X21hc2soJnBjaV9kZXYtPmRldiwgRE1BXzMyQklUX01BU0spKSB7CiAJCUVSUk9SX1BST0JFKCJQQ0kgRE1BIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBleGl0X2Rpc2FibGVfZGV2aWNlOwpAQCAtNDI4LDcgKzI4NSw3IEBACiAJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIGh3KTsKIAogCXJ0MngwMGRldiA9IGh3LT5wcml2OwotCXJ0MngwMGRldi0+ZGV2ID0gcGNpX2RldjsKKwlydDJ4MDBkZXYtPmRldiA9ICZwY2lfZGV2LT5kZXY7CiAJcnQyeDAwZGV2LT5vcHMgPSBvcHM7CiAJcnQyeDAwZGV2LT5odyA9IGh3OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKaW5kZXggYjQxOTY3ZS4uODBiZjk3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaApAQCAtODcsNDQgKzg3LDI2IEBACiAJbWVtY3B5X3RvaW8ocnQyeDAwZGV2LT5jc3IuYmFzZSArIG9mZnNldCwgdmFsdWUsIGxlbmd0aCk7CiB9CiAKLS8qCi0gKiBUWCBkYXRhIGhhbmRsZXJzLgotICovCi1pbnQgcnQyeDAwcGNpX3dyaXRlX3R4X2RhdGEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICBzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKTsKLQogLyoqCi0gKiBzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcng6IFBlciBSWCBlbnRyeSBQQ0kgc3BlY2lmaWMgaW5mb3JtYXRpb24KKyAqIHJ0MngwMHBjaV93cml0ZV90eF9kYXRhIC0gSW5pdGlhbGl6ZSBkYXRhIGZvciBUWCBvcGVyYXRpb24KKyAqIEBlbnRyeTogVGhlIGVudHJ5IHdoZXJlIHRoZSBmcmFtZSBpcyBsb2NhdGVkCiAgKgotICogQGRlc2M6IFBvaW50ZXIgdG8gZGV2aWNlIGRlc2NyaXB0b3IuCi0gKiBAZGF0YTogUG9pbnRlciB0byBkZXZpY2UncyBlbnRyeSBtZW1vcnkuCi0gKiBAZG1hOiBETUEgcG9pbnRlciB0byAmZGF0YS4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBETUEgYW5kIHNrYiBkZXNjcmlwdG9yCisgKiB0byBwcmVwYXJlIHRoZSBlbnRyeSBmb3IgdGhlIGFjdHVhbCBUWCBvcGVyYXRpb24uCiAgKi8KLXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCB7Ci0JX19sZTMyICpkZXNjOwotCWRtYV9hZGRyX3QgZGVzY19kbWE7Ci0KLQl2b2lkICpkYXRhOwotCWRtYV9hZGRyX3QgZGF0YV9kbWE7Ci19OworaW50IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpOwogCiAvKioKLSAqIHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eDogUGVyIFRYIGVudHJ5IFBDSSBzcGVjaWZpYyBpbmZvcm1hdGlvbgorICogc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpOiBQZXIgZW50cnkgUENJIHNwZWNpZmljIGluZm9ybWF0aW9uCiAgKgogICogQGRlc2M6IFBvaW50ZXIgdG8gZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBkZXNjX2RtYTogRE1BIHBvaW50ZXIgdG8gJmRlc2MuCiAgKiBAZGF0YTogUG9pbnRlciB0byBkZXZpY2UncyBlbnRyeSBtZW1vcnkuCi0gKiBAZG1hOiBETUEgcG9pbnRlciB0byAmZGF0YS4KLSAqIEBjb250cm9sOiBtYWM4MDIxMSBjb250cm9sIHN0cnVjdHVyZSB1c2VkIHRvIHRyYW5zbWl0IGRhdGEuCisgKiBAZGF0YV9kbWE6IERNQSBwb2ludGVyIHRvICZkYXRhLgogICovCi1zdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHggeworc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpIHsKIAlfX2xlMzIgKmRlc2M7CiAJZG1hX2FkZHJfdCBkZXNjX2RtYTsKLQotCXZvaWQgKmRhdGE7Ci0JZG1hX2FkZHJfdCBkYXRhX2RtYTsKLQotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBjb250cm9sOwogfTsKIAogLyoqCkBAIC0xMzMsMTUgKzExNSw2IEBACiAgKi8KIHZvaWQgcnQyeDAwcGNpX3J4ZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIAotLyoqCi0gKiBydDJ4MDBwY2lfdHhkb25lIC0gSGFuZGxlIFRYIGRvbmUgZXZlbnRzCi0gKiBAcnQyeDAwZGV2OiBEZXZpY2UgcG9pbnRlciwgc2VlICZzdHJ1Y3QgcnQyeDAwX2Rldi4KLSAqIEBlbnRyeTogRW50cnkgd2hpY2ggaGFzIGNvbXBsZXRlZCB0aGUgdHJhbnNtaXNzaW9uIG9mIGEgZnJhbWUuCi0gKiBAZGVzYzogVFggZG9uZSBkZXNjcmlwdG9yCi0gKi8KLXZvaWQgcnQyeDAwcGNpX3R4ZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAotCQkgICAgICBzdHJ1Y3QgdHhkb25lX2VudHJ5X2Rlc2MgKmRlc2MpOwotCiAvKgogICogRGV2aWNlIGluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCmluZGV4IDY1OWU5ZjQuLjdmNDQyMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCkBAIC0yNSwyNCArMjUsMzcwIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCiAjaW5jbHVkZSAicnQyeDAwbGliLmgiCiAKK3N0cnVjdCBza19idWZmICpydDJ4MDBxdWV1ZV9hbGxvY19yeHNrYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQoreworCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOworCXVuc2lnbmVkIGludCByZXNlcnZlZF9zaXplOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOworCisJLyoKKwkgKiBUaGUgZnJhbWUgc2l6ZSBpbmNsdWRlcyBkZXNjcmlwdG9yIHNpemUsIGJlY2F1c2UgdGhlCisJICogaGFyZHdhcmUgZGlyZWN0bHkgcmVjZWl2ZSB0aGUgZnJhbWUgaW50byB0aGUgc2tidWZmZXIuCisJICovCisJZnJhbWVfc2l6ZSA9IGVudHJ5LT5xdWV1ZS0+ZGF0YV9zaXplICsgZW50cnktPnF1ZXVlLT5kZXNjX3NpemU7CisKKwkvKgorCSAqIFRoZSBwYXlsb2FkIHNob3VsZCBiZSBhbGlnbmVkIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LAorCSAqIHRoaXMgbWVhbnMgd2UgbmVlZCBhdCBsZWFzdCAzIGJ5dGVzIGZvciBtb3ZpbmcgdGhlIGZyYW1lCisJICogaW50byB0aGUgY29ycmVjdCBvZmZzZXQuCisJICovCisJcmVzZXJ2ZWRfc2l6ZSA9IDQ7CisKKwkvKgorCSAqIEFsbG9jYXRlIHNrYnVmZmVyLgorCSAqLworCXNrYiA9IGRldl9hbGxvY19za2IoZnJhbWVfc2l6ZSArIHJlc2VydmVkX3NpemUpOworCWlmICghc2tiKQorCQlyZXR1cm4gTlVMTDsKKworCXNrYl9yZXNlcnZlKHNrYiwgcmVzZXJ2ZWRfc2l6ZSk7CisJc2tiX3B1dChza2IsIGZyYW1lX3NpemUpOworCisJLyoKKwkgKiBQb3B1bGF0ZSBza2JkZXNjLgorCSAqLworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7CisJc2tiZGVzYy0+ZW50cnkgPSBlbnRyeTsKKworCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCQlza2JkZXNjLT5za2JfZG1hID0gZG1hX21hcF9zaW5nbGUocnQyeDAwZGV2LT5kZXYsCisJCQkJCQkgIHNrYi0+ZGF0YSwKKwkJCQkJCSAgc2tiLT5sZW4sCisJCQkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJCXNrYmRlc2MtPmZsYWdzIHw9IFNLQkRFU0NfRE1BX01BUFBFRF9SWDsKKwl9CisKKwlyZXR1cm4gc2tiOworfQorCit2b2lkIHJ0MngwMHF1ZXVlX21hcF90eHNrYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOworCisJc2tiZGVzYy0+c2tiX2RtYSA9IGRtYV9tYXBfc2luZ2xlKHJ0MngwMGRldi0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCQkgIERNQV9UT19ERVZJQ0UpOworCXNrYmRlc2MtPmZsYWdzIHw9IFNLQkRFU0NfRE1BX01BUFBFRF9UWDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHF1ZXVlX21hcF90eHNrYik7CisKK3ZvaWQgcnQyeDAwcXVldWVfdW5tYXBfc2tiKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7CisKKwlpZiAoc2tiZGVzYy0+ZmxhZ3MgJiBTS0JERVNDX0RNQV9NQVBQRURfUlgpIHsKKwkJZG1hX3VubWFwX3NpbmdsZShydDJ4MDBkZXYtPmRldiwgc2tiZGVzYy0+c2tiX2RtYSwgc2tiLT5sZW4sCisJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCXNrYmRlc2MtPmZsYWdzICY9IH5TS0JERVNDX0RNQV9NQVBQRURfUlg7CisJfQorCisJaWYgKHNrYmRlc2MtPmZsYWdzICYgU0tCREVTQ19ETUFfTUFQUEVEX1RYKSB7CisJCWRtYV91bm1hcF9zaW5nbGUocnQyeDAwZGV2LT5kZXYsIHNrYmRlc2MtPnNrYl9kbWEsIHNrYi0+bGVuLAorCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJc2tiZGVzYy0+ZmxhZ3MgJj0gflNLQkRFU0NfRE1BX01BUFBFRF9UWDsKKwl9Cit9CisKK3ZvaWQgcnQyeDAwcXVldWVfZnJlZV9za2Ioc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJcnQyeDAwcXVldWVfdW5tYXBfc2tiKHJ0MngwMGRldiwgc2tiKTsKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJCQkgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPQorCSAgICBpZWVlODAyMTFfZ2V0X3R4X3JhdGUocnQyeDAwZGV2LT5odywgdHhfaW5mbyk7CisJY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpod3JhdGU7CisJdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoOworCXVuc2lnbmVkIGludCBkdXJhdGlvbjsKKwl1bnNpZ25lZCBpbnQgcmVzaWR1YWw7CisKKwltZW1zZXQodHhkZXNjLCAwLCBzaXplb2YoKnR4ZGVzYykpOworCisJLyoKKwkgKiBJbml0aWFsaXplIGluZm9ybWF0aW9uIGZyb20gcXVldWUKKwkgKi8KKwl0eGRlc2MtPnF1ZXVlID0gZW50cnktPnF1ZXVlLT5xaWQ7CisJdHhkZXNjLT5jd19taW4gPSBlbnRyeS0+cXVldWUtPmN3X21pbjsKKwl0eGRlc2MtPmN3X21heCA9IGVudHJ5LT5xdWV1ZS0+Y3dfbWF4OworCXR4ZGVzYy0+YWlmcyA9IGVudHJ5LT5xdWV1ZS0+YWlmczsKKworCS8qIERhdGEgbGVuZ3RoIHNob3VsZCBiZSBleHRlbmRlZCB3aXRoIDQgYnl0ZXMgZm9yIENSQyAqLworCWRhdGFfbGVuZ3RoID0gZW50cnktPnNrYi0+bGVuICsgNDsKKworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGlzIGZyYW1lIGlzIHRvIGJlIGFja2VkLgorCSAqLworCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKQorCQlfX3NldF9iaXQoRU5UUllfVFhEX0FDSywgJnR4ZGVzYy0+ZmxhZ3MpOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGlzIGlzIGEgUlRTL0NUUyBmcmFtZQorCSAqLworCWlmIChpZWVlODAyMTFfaXNfcnRzKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkgICAgaWVlZTgwMjExX2lzX2N0cyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCV9fc2V0X2JpdChFTlRSWV9UWERfQlVSU1QsICZ0eGRlc2MtPmZsYWdzKTsKKwkJaWYgKGllZWU4MDIxMV9pc19ydHMoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJCV9fc2V0X2JpdChFTlRSWV9UWERfUlRTX0ZSQU1FLCAmdHhkZXNjLT5mbGFncyk7CisJCWVsc2UKKwkJCV9fc2V0X2JpdChFTlRSWV9UWERfQ1RTX0ZSQU1FLCAmdHhkZXNjLT5mbGFncyk7CisJCWlmICh0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHggPj0gMCkKKwkJCXJhdGUgPQorCQkJICAgIGllZWU4MDIxMV9nZXRfcnRzX2N0c19yYXRlKHJ0MngwMGRldi0+aHcsIHR4X2luZm8pOworCX0KKworCS8qCisJICogRGV0ZXJtaW5lIHJldHJ5IGluZm9ybWF0aW9uLgorCSAqLworCXR4ZGVzYy0+cmV0cnlfbGltaXQgPSB0eF9pbmZvLT5jb250cm9sLnJldHJ5X2xpbWl0OworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTE9OR19SRVRSWV9MSU1JVCkKKwkJX19zZXRfYml0KEVOVFJZX1RYRF9SRVRSWV9NT0RFLCAmdHhkZXNjLT5mbGFncyk7CisKKwkvKgorCSAqIENoZWNrIGlmIG1vcmUgZnJhZ21lbnRzIGFyZSBwZW5kaW5nCisJICovCisJaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJX19zZXRfYml0KEVOVFJZX1RYRF9CVVJTVCwgJnR4ZGVzYy0+ZmxhZ3MpOworCQlfX3NldF9iaXQoRU5UUllfVFhEX01PUkVfRlJBRywgJnR4ZGVzYy0+ZmxhZ3MpOworCX0KKworCS8qCisJICogQmVhY29ucyBhbmQgcHJvYmUgcmVzcG9uc2VzIHJlcXVpcmUgdGhlIHRzZiB0aW1lc3RhbXAKKwkgKiB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBmcmFtZS4KKwkgKi8KKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgIGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCV9fc2V0X2JpdChFTlRSWV9UWERfUkVRX1RJTUVTVEFNUCwgJnR4ZGVzYy0+ZmxhZ3MpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgd2l0aCB3aGF0IElGUyBwcmlvcml0eSB0aGlzIGZyYW1lIHNob3VsZCBiZSBzZW5kLgorCSAqIFNldCBpZnMgdG8gSUZTX1NJRlMgd2hlbiB0aGUgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGZyYWdtZW50LAorCSAqIG9yIHRoaXMgZnJhZ21lbnQgY2FtZSBhZnRlciBSVFMvQ1RTLgorCSAqLworCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfUlRTX0ZSQU1FLCAmdHhkZXNjLT5mbGFncykpIHsKKwkJdHhkZXNjLT5pZnMgPSBJRlNfU0lGUzsKKwl9IGVsc2UgaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9GSVJTVF9GUkFHTUVOVCkgeworCQlfX3NldF9iaXQoRU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5ULCAmdHhkZXNjLT5mbGFncyk7CisJCXR4ZGVzYy0+aWZzID0gSUZTX0JBQ0tPRkY7CisJfSBlbHNlIHsKKwkJdHhkZXNjLT5pZnMgPSBJRlNfU0lGUzsKKwl9CisKKwkvKgorCSAqIFBMQ1Agc2V0dXAKKwkgKiBMZW5ndGggY2FsY3VsYXRpb24gZGVwZW5kcyBvbiBPRkRNL0NDSyByYXRlLgorCSAqLworCWh3cmF0ZSA9IHJ0MngwMF9nZXRfcmF0ZShyYXRlLT5od192YWx1ZSk7CisJdHhkZXNjLT5zaWduYWwgPSBod3JhdGUtPnBsY3A7CisJdHhkZXNjLT5zZXJ2aWNlID0gMHgwNDsKKworCWlmIChod3JhdGUtPmZsYWdzICYgREVWX1JBVEVfT0ZETSkgeworCQlfX3NldF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpOworCisJCXR4ZGVzYy0+bGVuZ3RoX2hpZ2ggPSAoZGF0YV9sZW5ndGggPj4gNikgJiAweDNmOworCQl0eGRlc2MtPmxlbmd0aF9sb3cgPSBkYXRhX2xlbmd0aCAmIDB4M2Y7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ29udmVydCBsZW5ndGggdG8gbWljcm9zZWNvbmRzLgorCQkgKi8KKwkJcmVzaWR1YWwgPSBnZXRfZHVyYXRpb25fcmVzKGRhdGFfbGVuZ3RoLCBod3JhdGUtPmJpdHJhdGUpOworCQlkdXJhdGlvbiA9IGdldF9kdXJhdGlvbihkYXRhX2xlbmd0aCwgaHdyYXRlLT5iaXRyYXRlKTsKKworCQlpZiAocmVzaWR1YWwgIT0gMCkgeworCQkJZHVyYXRpb24rKzsKKworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBMZW5ndGggRXh0ZW5zaW9uCisJCQkgKi8KKwkJCWlmIChod3JhdGUtPmJpdHJhdGUgPT0gMTEwICYmIHJlc2lkdWFsIDw9IDMwKQorCQkJCXR4ZGVzYy0+c2VydmljZSB8PSAweDgwOworCQl9CisKKwkJdHhkZXNjLT5sZW5ndGhfaGlnaCA9IChkdXJhdGlvbiA+PiA4KSAmIDB4ZmY7CisJCXR4ZGVzYy0+bGVuZ3RoX2xvdyA9IGR1cmF0aW9uICYgMHhmZjsKKworCQkvKgorCQkgKiBXaGVuIHByZWFtYmxlIGlzIGVuYWJsZWQgd2Ugc2hvdWxkIHNldCB0aGUKKwkJICogcHJlYW1ibGUgYml0IGZvciB0aGUgc2lnbmFsLgorCQkgKi8KKwkJaWYgKHJ0MngwMF9nZXRfcmF0ZV9wcmVhbWJsZShyYXRlLT5od192YWx1ZSkpCisJCQl0eGRlc2MtPnNpZ25hbCB8PSAweDA4OworCX0KK30KKworc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfd3JpdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQoreworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IGVudHJ5LT5xdWV1ZTsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKKworCXJ0MngwMGRldi0+b3BzLT5saWItPndyaXRlX3R4X2Rlc2MocnQyeDAwZGV2LCBlbnRyeS0+c2tiLCB0eGRlc2MpOworCisJLyoKKwkgKiBBbGwgcHJvY2Vzc2luZyBvbiB0aGUgZnJhbWUgaGFzIGJlZW4gY29tcGxldGVkLCB0aGlzIG1lYW5zCisJICogaXQgaXMgbm93IHJlYWR5IHRvIGJlIGR1bXBlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBkZWJ1Z2ZzLgorCSAqLworCXJ0MngwMGRlYnVnX2R1bXBfZnJhbWUocnQyeDAwZGV2LCBEVU1QX0ZSQU1FX1RYLCBlbnRyeS0+c2tiKTsKKworCS8qCisJICogQ2hlY2sgaWYgd2UgbmVlZCB0byBraWNrIHRoZSBxdWV1ZSwgdGhlcmUgYXJlIGhvd2V2ZXIgYSBmZXcgcnVsZXMKKwkgKgkxKSBEb24ndCBraWNrIGJlYWNvbiBxdWV1ZQorCSAqCTIpIERvbid0IGtpY2sgdW5sZXNzIHRoaXMgaXMgdGhlIGxhc3QgaW4gZnJhbWUgaW4gYSBidXJzdC4KKwkgKgkgICBXaGVuIHRoZSBidXJzdCBmbGFnIGlzIHNldCwgdGhpcyBmcmFtZSBpcyBhbHdheXMgZm9sbG93ZWQKKwkgKgkgICBieSBhbm90aGVyIGZyYW1lIHdoaWNoIGluIHNvbWUgd2F5IGFyZSByZWxhdGVkIHRvIGVhY2hvdGhlci4KKwkgKgkgICBUaGlzIGlzIHRydWUgZm9yIGZyYWdtZW50cywgUlRTIG9yIENUUy10by1zZWxmIGZyYW1lcy4KKwkgKgkzKSBSdWxlIDIgY2FuIGJlIGJyb2tlbiB3aGVuIHRoZSBhdmFpbGFibGUgZW50cmllcworCSAqCSAgIGluIHRoZSBxdWV1ZSBhcmUgbGVzcyB0aGVuIGEgY2VydGFpbiB0aHJlc2hvbGQuCisJICovCisJaWYgKGVudHJ5LT5xdWV1ZS0+cWlkID09IFFJRF9CRUFDT04pCisJCXJldHVybjsKKworCWlmIChydDJ4MDBxdWV1ZV90aHJlc2hvbGQocXVldWUpIHx8CisJICAgICF0ZXN0X2JpdChFTlRSWV9UWERfQlVSU1QsICZ0eGRlc2MtPmZsYWdzKSkKKwkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lja190eF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlLT5xaWQpOworfQorCitpbnQgcnQyeDAwcXVldWVfd3JpdGVfdHhfZnJhbWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVgpOworCXN0cnVjdCB0eGVudHJ5X2Rlc2MgdHhkZXNjOworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKKworCWlmICh1bmxpa2VseShydDJ4MDBxdWV1ZV9mdWxsKHF1ZXVlKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKF9fdGVzdF9hbmRfc2V0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpIHsKKwkJRVJST1IocXVldWUtPnJ0MngwMGRldiwKKwkJICAgICAgIkFycml2ZWQgYXQgbm9uLWZyZWUgZW50cnkgaW4gdGhlIG5vbi1mdWxsIHF1ZXVlICVkLlxuIgorCQkgICAgICAiUGxlYXNlIGZpbGUgYnVnIHJlcG9ydCB0byAlcy5cbiIsCisJCSAgICAgIHF1ZXVlLT5xaWQsIERSVl9QUk9KRUNUKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBDb3B5IGFsbCBUWCBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGludG8gdHhkZXNjLAorCSAqIGFmdGVyIHRoYXQgd2UgYXJlIGZyZWUgdG8gdXNlIHRoZSBza2ItPmNiIGFycmF5CisJICogZm9yIG91ciBpbmZvcm1hdGlvbi4KKwkgKi8KKwllbnRyeS0+c2tiID0gc2tiOworCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCAmdHhkZXNjKTsKKworCS8qCisJICogc2tiLT5jYiBhcnJheSBpcyBub3cgb3VycyBhbmQgd2UgYXJlIGZyZWUgdG8gdXNlIGl0LgorCSAqLworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CisJbWVtc2V0KHNrYmRlc2MsIDAsIHNpemVvZigqc2tiZGVzYykpOworCXNrYmRlc2MtPmVudHJ5ID0gZW50cnk7CisKKwlpZiAodW5saWtlbHkocXVldWUtPnJ0MngwMGRldi0+b3BzLT5saWItPndyaXRlX3R4X2RhdGEoZW50cnkpKSkgeworCQlfX2NsZWFyX2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncyk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCisJCXJ0MngwMHF1ZXVlX21hcF90eHNrYihxdWV1ZS0+cnQyeDAwZGV2LCBza2IpOworCisJX19zZXRfYml0KEVOVFJZX0RBVEFfUEVORElORywgJmVudHJ5LT5mbGFncyk7CisKKwlydDJ4MDBxdWV1ZV9pbmRleF9pbmMocXVldWUsIFFfSU5ERVgpOworCXJ0MngwMHF1ZXVlX3dyaXRlX3R4X2Rlc2NyaXB0b3IoZW50cnksICZ0eGRlc2MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOworCXN0cnVjdCB0eGVudHJ5X2Rlc2MgdHhkZXNjOworCV9fbGUzMiBkZXNjWzE2XTsKKworCWlmICh1bmxpa2VseSghaW50Zi0+YmVhY29uKSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJaW50Zi0+YmVhY29uLT5za2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChydDJ4MDBkZXYtPmh3LCB2aWYpOworCWlmICghaW50Zi0+YmVhY29uLT5za2IpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBDb3B5IGFsbCBUWCBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGludG8gdHhkZXNjLAorCSAqIGFmdGVyIHRoYXQgd2UgYXJlIGZyZWUgdG8gdXNlIHRoZSBza2ItPmNiIGFycmF5CisJICogZm9yIG91ciBpbmZvcm1hdGlvbi4KKwkgKi8KKwlydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcihpbnRmLT5iZWFjb24sICZ0eGRlc2MpOworCisJLyoKKwkgKiBGb3IgdGhlIGRlc2NyaXB0b3Igd2UgdXNlIGEgbG9jYWwgYXJyYXkgZnJvbSB3aGVyZSB0aGUKKwkgKiBkcml2ZXIgY2FuIG1vdmUgaXQgdG8gdGhlIGNvcnJlY3QgbG9jYXRpb24gcmVxdWlyZWQgZm9yCisJICogdGhlIGhhcmR3YXJlLgorCSAqLworCW1lbXNldChkZXNjLCAwLCBzaXplb2YoZGVzYykpOworCisJLyoKKwkgKiBGaWxsIGluIHNrYiBkZXNjcmlwdG9yCisJICovCisJc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhpbnRmLT5iZWFjb24tPnNrYik7CisJbWVtc2V0KHNrYmRlc2MsIDAsIHNpemVvZigqc2tiZGVzYykpOworCXNrYmRlc2MtPmRlc2MgPSBkZXNjOworCXNrYmRlc2MtPmRlc2NfbGVuID0gaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplOworCXNrYmRlc2MtPmVudHJ5ID0gaW50Zi0+YmVhY29uOworCisJLyoKKwkgKiBXcml0ZSBUWCBkZXNjcmlwdG9yIGludG8gcmVzZXJ2ZWQgcm9vbSBpbiBmcm9udCBvZiB0aGUgYmVhY29uLgorCSAqLworCXJ0MngwMHF1ZXVlX3dyaXRlX3R4X2Rlc2NyaXB0b3IoaW50Zi0+YmVhY29uLCAmdHhkZXNjKTsKKworCS8qCisJICogU2VuZCBiZWFjb24gdG8gaGFyZHdhcmUuCisJICogQWxzbyBlbmFibGUgYmVhY29uIGdlbmVyYXRpb24sIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbiBkaXNhYmxlZAorCSAqIGJ5IHRoZSBkcml2ZXIgZHVyaW5nIHRoZSBjb25maWdfYmVhY29uKCkgY2FsbGJhY2sgZnVuY3Rpb24uCisJICovCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+d3JpdGVfYmVhY29uKGludGYtPmJlYWNvbik7CisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lja190eF9xdWV1ZShydDJ4MDBkZXYsIFFJRF9CRUFDT04pOworCisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBkYXRhX3F1ZXVlICpydDJ4MDBxdWV1ZV9nZXRfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCBxdWV1ZSkKKwkJCQkJIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcXVldWUpCiB7CiAJaW50IGF0aW0gPSB0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKLQlpZiAocXVldWUgPCBydDJ4MDBkZXYtPmh3LT5xdWV1ZXMgJiYgcnQyeDAwZGV2LT50eCkKKwlpZiAocXVldWUgPCBydDJ4MDBkZXYtPm9wcy0+dHhfcXVldWVzICYmIHJ0MngwMGRldi0+dHgpCiAJCXJldHVybiAmcnQyeDAwZGV2LT50eFtxdWV1ZV07CiAKIAlpZiAoIXJ0MngwMGRldi0+YmNuKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChxdWV1ZSA9PSBSVDJYMDBfQkNOX1FVRVVFX0JFQUNPTikKKwlpZiAocXVldWUgPT0gUUlEX0JFQUNPTikKIAkJcmV0dXJuICZydDJ4MDBkZXYtPmJjblswXTsKLQllbHNlIGlmIChxdWV1ZSA9PSBSVDJYMDBfQkNOX1FVRVVFX0FUSU0gJiYgYXRpbSkKKwllbHNlIGlmIChxdWV1ZSA9PSBRSURfQVRJTSAmJiBhdGltKQogCQlyZXR1cm4gJnJ0MngwMGRldi0+YmNuWzFdOwogCiAJcmV0dXJuIE5VTEw7CkBAIC05Niw3ICs0NDIsNiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGlycWZsYWdzKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHF1ZXVlX2luZGV4X2luYyk7CiAKIHN0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX3Jlc2V0KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKIHsKQEAgLTE1Myw2ICs0OTgsNyBAQAogCXJ0MngwMHF1ZXVlX3Jlc2V0KHF1ZXVlKTsKIAogCXF1ZXVlLT5saW1pdCA9IHFkZXNjLT5lbnRyeV9udW07CisJcXVldWUtPnRocmVzaG9sZCA9IERJVl9ST1VORF9VUChxZGVzYy0+ZW50cnlfbnVtLCAxMCk7CiAJcXVldWUtPmRhdGFfc2l6ZSA9IHFkZXNjLT5kYXRhX3NpemU7CiAJcXVldWUtPmRlc2Nfc2l6ZSA9IHFkZXNjLT5kZXNjX3NpemU7CiAKQEAgLTE4NSwxMiArNTMxLDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX2ZyZWVfc2ticyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFxdWV1ZS0+ZW50cmllcykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKSB7CisJCWlmIChxdWV1ZS0+ZW50cmllc1tpXS5za2IpCisJCQlydDJ4MDBxdWV1ZV9mcmVlX3NrYihydDJ4MDBkZXYsIHF1ZXVlLT5lbnRyaWVzW2ldLnNrYik7CisJfQorfQorCitzdGF0aWMgaW50IHJ0MngwMHF1ZXVlX2FsbG9jX3J4c2ticyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgeworCQlza2IgPSBydDJ4MDBxdWV1ZV9hbGxvY19yeHNrYihydDJ4MDBkZXYsICZxdWV1ZS0+ZW50cmllc1tpXSk7CisJCWlmICghc2tiKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXF1ZXVlLT5lbnRyaWVzW2ldLnNrYiA9IHNrYjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHJ0MngwMHF1ZXVlX2luaXRpYWxpemUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CiAJaW50IHN0YXR1czsKIAotCiAJc3RhdHVzID0gcnQyeDAwcXVldWVfYWxsb2NfZW50cmllcyhydDJ4MDBkZXYtPnJ4LCBydDJ4MDBkZXYtPm9wcy0+cngpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gZXhpdDsKQEAgLTIwNSwxMSArNTgwLDE0IEBACiAJaWYgKHN0YXR1cykKIAkJZ290byBleGl0OwogCi0JaWYgKCF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybiAwOworCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwkJc3RhdHVzID0gcnQyeDAwcXVldWVfYWxsb2NfZW50cmllcygmcnQyeDAwZGV2LT5iY25bMV0sCisJCQkJCQkgICBydDJ4MDBkZXYtPm9wcy0+YXRpbSk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGV4aXQ7CisJfQogCi0Jc3RhdHVzID0gcnQyeDAwcXVldWVfYWxsb2NfZW50cmllcygmcnQyeDAwZGV2LT5iY25bMV0sCi0JCQkJCSAgIHJ0MngwMGRldi0+b3BzLT5hdGltKTsKKwlzdGF0dXMgPSBydDJ4MDBxdWV1ZV9hbGxvY19yeHNrYnMocnQyeDAwZGV2LCBydDJ4MDBkZXYtPnJ4KTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGV4aXQ7CiAKQEAgLTIyNyw2ICs2MDUsOCBAQAogewogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIAorCXJ0MngwMHF1ZXVlX2ZyZWVfc2ticyhydDJ4MDBkZXYsIHJ0MngwMGRldi0+cngpOworCiAJcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgewogCQlrZnJlZShxdWV1ZS0+ZW50cmllcyk7CiAJCXF1ZXVlLT5lbnRyaWVzID0gTlVMTDsKQEAgLTI1NSwxMSArNjM1LDExIEBACiAJLyoKIAkgKiBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgcXVldWVzOgogCSAqIFJYOiAxCi0JICogVFg6IGh3LT5xdWV1ZXMKKwkgKiBUWDogb3BzLT50eF9xdWV1ZXMKIAkgKiBCZWFjb246IDEKIAkgKiBBdGltOiAxIChpZiByZXF1aXJlZCkKIAkgKi8KLQlydDJ4MDBkZXYtPmRhdGFfcXVldWVzID0gMiArIHJ0MngwMGRldi0+aHctPnF1ZXVlcyArIHJlcV9hdGltOworCXJ0MngwMGRldi0+ZGF0YV9xdWV1ZXMgPSAyICsgcnQyeDAwZGV2LT5vcHMtPnR4X3F1ZXVlcyArIHJlcV9hdGltOwogCiAJcXVldWUgPSBremFsbG9jKHJ0MngwMGRldi0+ZGF0YV9xdWV1ZXMgKiBzaXplb2YoKnF1ZXVlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFxdWV1ZSkgewpAQCAtMjcyLDcgKzY1Miw3IEBACiAJICovCiAJcnQyeDAwZGV2LT5yeCA9IHF1ZXVlOwogCXJ0MngwMGRldi0+dHggPSAmcXVldWVbMV07Ci0JcnQyeDAwZGV2LT5iY24gPSAmcXVldWVbMSArIHJ0MngwMGRldi0+aHctPnF1ZXVlc107CisJcnQyeDAwZGV2LT5iY24gPSAmcXVldWVbMSArIHJ0MngwMGRldi0+b3BzLT50eF9xdWV1ZXNdOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHF1ZXVlIHBhcmFtZXRlcnMuCkBAIC0yODAsNyArNjYwLDggQEAKIAkgKiBUWDogcWlkID0gUUlEX0FDX0JFICsgaW5kZXgKIAkgKiBUWDogY3dfbWluOiAyXjUgPSAzMi4KIAkgKiBUWDogY3dfbWF4OiAyXjEwID0gMTAyNC4KLQkgKiBCQ04gJiBBdGltOiBxaWQgPSBRSURfTUdNVAorCSAqIEJDTjogcWlkID0gUUlEX0JFQUNPTgorCSAqIEFUSU06IHFpZCA9IFFJRF9BVElNCiAJICovCiAJcnQyeDAwcXVldWVfaW5pdChydDJ4MDBkZXYsIHJ0MngwMGRldi0+cngsIFFJRF9SWCk7CiAKQEAgLTI4OCw5ICs2NjksOSBAQAogCXR4X3F1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpCiAJCXJ0MngwMHF1ZXVlX2luaXQocnQyeDAwZGV2LCBxdWV1ZSwgcWlkKyspOwogCi0JcnQyeDAwcXVldWVfaW5pdChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmJjblswXSwgUUlEX01HTVQpOworCXJ0MngwMHF1ZXVlX2luaXQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5iY25bMF0sIFFJRF9CRUFDT04pOwogCWlmIChyZXFfYXRpbSkKLQkJcnQyeDAwcXVldWVfaW5pdChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmJjblsxXSwgUUlEX01HTVQpOworCQlydDJ4MDBxdWV1ZV9pbml0KHJ0MngwMGRldiwgJnJ0MngwMGRldi0+YmNuWzFdLCBRSURfQVRJTSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKaW5kZXggNzAyN2M5Zi4uODk0NTk0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKQEAgLTQyLDE4ICs0MiwzMiBAQAogLyoqCiAgKiBET0M6IE51bWJlciBvZiBlbnRyaWVzIHBlciBxdWV1ZQogICoKLSAqIEFmdGVyIHJlc2VhcmNoIGl0IHdhcyBjb25jbHVkZWQgdGhhdCAxMiBlbnRyaWVzIGluIGEgUlggYW5kIFRYCi0gKiBxdWV1ZSB3b3VsZCBiZSBzdWZmaWNpZW50LiBBbHRob3VnaCB0aGlzIGlzIGFsbW9zdCBvbmUgdGhpcmQgb2YKLSAqIHRoZSBhbW91bnQgdGhlIGxlZ2FjeSBkcml2ZXIgYWxsb2NhdGVkLCB0aGUgcXVldWVzIGFyZW4ndCBnZXR0aW5nCi0gKiBmaWxsZWQgdG8gdGhlIG1heGltdW0gZXZlbiB3aGVuIHdvcmtpbmcgd2l0aCB0aGUgbWF4aW11bSByYXRlLgorICogVW5kZXIgbm9ybWFsIGxvYWQgd2l0aG91dCBmcmFnbWVudGF0aW9uIDEyIGVudHJpZXMgYXJlIHN1ZmZpY2llbnQKKyAqIHdpdGhvdXQgdGhlIHF1ZXVlIGJlaW5nIGZpbGxlZCB1cCB0byB0aGUgbWF4aW11bS4gV2hlbiB1c2luZyBmcmFnbWVudGF0aW9uCisgKiBhbmQgdGhlIHF1ZXVlIHRocmVzaG9sZCBjb2RlIHdlIG5lZWQgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBtYXJnaW5zIHRvCisgKiBtYWtlIHN1cmUgdGhlIHF1ZXVlIHdpbGwgbmV2ZXIgKG9yIG9ubHkgdW5kZXIgZXh0cmVtZSBsb2FkKSBmaWxsIHVwCisgKiBjb21wbGV0ZWx5LgorICogU2luY2Ugd2UgZG9uJ3QgdXNlIHByZWFsbG9jYXRlZCBETUEgaGF2aW5nIGEgbGFyZ2UgbnVtYmVyIG9mIHF1ZXVlIGVudHJpZXMKKyAqIHdpbGwgaGF2ZSBvbmx5IG1pbmltYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciB0aGUgcXVldWUuCiAgKi8KLSNkZWZpbmUgUlhfRU5UUklFUwkxMgotI2RlZmluZSBUWF9FTlRSSUVTCTEyCisjZGVmaW5lIFJYX0VOVFJJRVMJMjQKKyNkZWZpbmUgVFhfRU5UUklFUwkyNAogI2RlZmluZSBCRUFDT05fRU5UUklFUwkxCi0jZGVmaW5lIEFUSU1fRU5UUklFUwkxCisjZGVmaW5lIEFUSU1fRU5UUklFUwk4CiAKIC8qKgogICogZW51bSBkYXRhX3F1ZXVlX3FpZDogUXVldWUgaWRlbnRpZmljYXRpb24KKyAqCisgKiBAUUlEX0FDX0JFOiBBQyBCRSBxdWV1ZQorICogQFFJRF9BQ19CSzogQUMgQksgcXVldWUKKyAqIEBRSURfQUNfVkk6IEFDIFZJIHF1ZXVlCisgKiBAUUlEX0FDX1ZPOiBBQyBWTyBxdWV1ZQorICogQFFJRF9IQ0NBOiBIQ0NBIHF1ZXVlCisgKiBAUUlEX01HTVQ6IE1HTVQgcXVldWUgKHByaW8gcXVldWUpCisgKiBAUUlEX1JYOiBSWCBxdWV1ZQorICogQFFJRF9PVEhFUjogTm9uZSBvZiB0aGUgYWJvdmUgKGRvbid0IHVzZSwgb25seSBwcmVzZW50IGZvciBjb21wbGV0ZW5lc3MpCisgKiBAUUlEX0JFQUNPTjogQmVhY29uIHF1ZXVlICh2YWx1ZSB1bnNwZWNpZmllZCwgZG9uJ3Qgc2VuZCBpdCB0byBkZXZpY2UpCisgKiBAUUlEX0FUSU06IEF0aW0gcXVldWUgKHZhbHVlIHVuc3BlZmljaWVkLCBkb24ndCBzZW5kIGl0IHRvIGRldmljZSkKICAqLwogZW51bSBkYXRhX3F1ZXVlX3FpZCB7CiAJUUlEX0FDX0JFID0gMCwKQEAgLTY0LDY4ICs3OCw1NSBAQAogCVFJRF9NR01UID0gMTMsCiAJUUlEX1JYID0gMTQsCiAJUUlEX09USEVSID0gMTUsCi19OwotCi0vKioKLSAqIGVudW0gcnQyeDAwX2Jjbl9xdWV1ZTogQmVhY29uIHF1ZXVlIGluZGV4Ci0gKgotICogU3RhcnQgY291bnRpbmcgd2l0aCBhIGhpZ2ggb2Zmc2V0LCB0aGlzIGJlY2F1c2UgdGhpcyBlbnVtZXJhdGlvbgotICogc3VwcGxlbWVudHMgJmVudW0gaWVlZTgwMjExX3R4X3F1ZXVlIGFuZCB3ZSBzaG91bGQgcHJldmVudCB2YWx1ZQotICogY29uZmxpY3RzLgotICoKLSAqIEBSVDJYMDBfQkNOX1FVRVVFX0JFQUNPTjogQmVhY29uIHF1ZXVlCi0gKiBAUlQyWDAwX0JDTl9RVUVVRV9BVElNOiBBdGltIHF1ZXVlIChzZW5kcyBmcmFtZSBhZnRlciBiZWFjb24pCi0gKi8KLWVudW0gcnQyeDAwX2Jjbl9xdWV1ZSB7Ci0JUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04gPSAxMDAsCi0JUlQyWDAwX0JDTl9RVUVVRV9BVElNID0gMTAxLAorCVFJRF9CRUFDT04sCisJUUlEX0FUSU0sCiB9OwogCiAvKioKICAqIGVudW0gc2tiX2ZyYW1lX2Rlc2NfZmxhZ3M6IEZsYWdzIGZvciAmc3RydWN0IHNrYl9mcmFtZV9kZXNjCiAgKgotICogQEZSQU1FX0RFU0NfRFJJVkVSX0dFTkVSQVRFRDogRnJhbWUgd2FzIGdlbmVyYXRlZCBpbnNpZGUgZHJpdmVyCi0gKglhbmQgc2hvdWxkIG5vdCBiZSByZXBvcnRlZCBiYWNrIHRvIG1hYzgwMjExIGR1cmluZyB0eGRvbmUuCisgKiBAU0tCREVTQ19ETUFfTUFQUEVEX1JYOiAmc2tiX2RtYSBmaWVsZCBoYXMgYmVlbiBtYXBwZWQgZm9yIFJYCisgKiBAU0tCREVTQ19ETUFfTUFQUEVEX1RYOiAmc2tiX2RtYSBmaWVsZCBoYXMgYmVlbiBtYXBwZWQgZm9yIFRYCiAgKi8KIGVudW0gc2tiX2ZyYW1lX2Rlc2NfZmxhZ3MgewotCUZSQU1FX0RFU0NfRFJJVkVSX0dFTkVSQVRFRCA9IDEgPDwgMCwKKwlTS0JERVNDX0RNQV9NQVBQRURfUlggPSAoMSA8PCAwKSwKKwlTS0JERVNDX0RNQV9NQVBQRURfVFggPSAoMSA8PCAxKSwKIH07CiAKIC8qKgogICogc3RydWN0IHNrYl9mcmFtZV9kZXNjOiBEZXNjcmlwdG9yIGluZm9ybWF0aW9uIGZvciB0aGUgc2tiIGJ1ZmZlcgogICoKLSAqIFRoaXMgc3RydWN0dXJlIGlzIHBsYWNlZCBvdmVyIHRoZSBza2ItPmNiIGFycmF5LCB0aGlzIG1lYW5zIHRoYXQKLSAqIHRoaXMgc3RydWN0dXJlIHNob3VsZCBub3QgZXhjZWVkIHRoZSBzaXplIG9mIHRoYXQgYXJyYXkgKDQ4IGJ5dGVzKS4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIHBsYWNlZCBvdmVyIHRoZSBkcml2ZXJfZGF0YSBhcnJheSwgdGhpcyBtZWFucyB0aGF0CisgKiB0aGlzIHN0cnVjdHVyZSBzaG91bGQgbm90IGV4Y2VlZCB0aGUgc2l6ZSBvZiB0aGF0IGFycmF5ICg0MCBieXRlcykuCiAgKgogICogQGZsYWdzOiBGcmFtZSBmbGFncywgc2VlICZlbnVtIHNrYl9mcmFtZV9kZXNjX2ZsYWdzLgotICogQGZyYW1lX3R5cGU6IEZyYW1lIHR5cGUsIHNlZSAmZW51bSBydDJ4MDBfZHVtcF90eXBlLgotICogQGRhdGE6IFBvaW50ZXIgdG8gZGF0YSBwYXJ0IG9mIGZyYW1lIChTdGFydCBvZiBpZWVlODAyMTEgaGVhZGVyKS4KKyAqIEBkZXNjX2xlbjogTGVuZ3RoIG9mIHRoZSBmcmFtZSBkZXNjcmlwdG9yLgogICogQGRlc2M6IFBvaW50ZXIgdG8gZGVzY3JpcHRvciBwYXJ0IG9mIHRoZSBmcmFtZS4KICAqCU5vdGUgdGhhdCB0aGlzIHBvaW50ZXIgY291bGQgcG9pbnQgdG8gc29tZXRoaW5nIG91dHNpZGUKICAqCW9mIHRoZSBzY29wZSBvZiB0aGUgc2tiLT5kYXRhIHBvaW50ZXIuCi0gKiBAZGF0YV9sZW46IExlbmd0aCBvZiB0aGUgZnJhbWUgZGF0YS4KLSAqIEBkZXNjX2xlbjogTGVuZ3RoIG9mIHRoZSBmcmFtZSBkZXNjcmlwdG9yLgotCisgKiBAc2tiX2RtYTogKFBDSS1vbmx5KSB0aGUgRE1BIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzayBidWZmZXIuCiAgKiBAZW50cnk6IFRoZSBlbnRyeSB0byB3aGljaCB0aGlzIHNrIGJ1ZmZlciBiZWxvbmdzLgogICovCiBzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgewogCXVuc2lnbmVkIGludCBmbGFnczsKIAotCXVuc2lnbmVkIGludCBmcmFtZV90eXBlOwotCi0Jdm9pZCAqZGF0YTsKKwl1bnNpZ25lZCBpbnQgZGVzY19sZW47CiAJdm9pZCAqZGVzYzsKIAotCXVuc2lnbmVkIGludCBkYXRhX2xlbjsKLQl1bnNpZ25lZCBpbnQgZGVzY19sZW47CisJZG1hX2FkZHJfdCBza2JfZG1hOwogCiAJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeTsKIH07CiAKKy8qKgorICogZ2V0X3NrYl9mcmFtZV9kZXNjIC0gT2J0YWluIHRoZSBydDJ4MDAgZnJhbWUgZGVzY3JpcHRvciBmcm9tIGEgc2tfYnVmZi4KKyAqIEBza2I6ICZzdHJ1Y3Qgc2tfYnVmZiBmcm9tIHdoZXJlIHdlIG9idGFpbiB0aGUgJnN0cnVjdCBza2JfZnJhbWVfZGVzYworICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza2JfZnJhbWVfZGVzYyogZ2V0X3NrYl9mcmFtZV9kZXNjKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MpID4gc2l6ZW9mKHNrYi0+Y2IpKTsKLQlyZXR1cm4gKHN0cnVjdCBza2JfZnJhbWVfZGVzYyAqKSZza2ItPmNiWzBdOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNrYl9mcmFtZV9kZXNjKSA+CisJCSAgICAgSUVFRTgwMjExX1RYX0lORk9fRFJJVkVSX0RBVEFfU0laRSk7CisJcmV0dXJuIChzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKikmSUVFRTgwMjExX1NLQl9DQihza2IpLT5kcml2ZXJfZGF0YTsKIH0KIAogLyoqCkBAIC0xNDUsNiArMTQ2LDcgQEAKICAqCiAgKiBTdW1tYXJ5IG9mIGluZm9ybWF0aW9uIHRoYXQgaGFzIGJlZW4gcmVhZCBmcm9tIHRoZSBSWCBmcmFtZSBkZXNjcmlwdG9yLgogICoKKyAqIEB0aW1lc3RhbXA6IFJYIFRpbWVzdGFtcAogICogQHNpZ25hbDogU2lnbmFsIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KICAqIEByc3NpOiBSU1NJIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KICAqIEBzaXplOiBEYXRhIHNpemUgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgpAQCAtMTUzLDYgKzE1NSw3IEBACiAKICAqLwogc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjIHsKKwl1NjQgdGltZXN0YW1wOwogCWludCBzaWduYWw7CiAJaW50IHJzc2k7CiAJaW50IHNpemU7CkBAIC0xNjEsMTggKzE2NCwzMiBAQAogfTsKIAogLyoqCisgKiBlbnVtIHR4ZG9uZV9lbnRyeV9kZXNjX2ZsYWdzOiBGbGFncyBmb3IgJnN0cnVjdCB0eGRvbmVfZW50cnlfZGVzYworICoKKyAqIEBUWERPTkVfVU5LTk9XTjogSGFyZHdhcmUgY291bGQgbm90IGRldGVybWluZSBzdWNjZXNzIG9mIHRyYW5zbWlzc2lvbi4KKyAqIEBUWERPTkVfU1VDQ0VTUzogRnJhbWUgd2FzIHN1Y2Nlc3NmdWxseSBzZW5kCisgKiBAVFhET05FX0ZBSUxVUkU6IEZyYW1lIHdhcyBub3Qgc3VjY2Vzc2Z1bGx5IHNlbmQKKyAqIEBUWERPTkVfRVhDRVNTSVZFX1JFVFJZOiBJbiBhZGRpdGlvbiB0byAmVFhET05FX0ZBSUxVUkUsIHRoZQorICoJZnJhbWUgdHJhbnNtaXNzaW9uIGZhaWxlZCBkdWUgdG8gZXhjZXNzaXZlIHJldHJpZXMuCisgKi8KK2VudW0gdHhkb25lX2VudHJ5X2Rlc2NfZmxhZ3MgeworCVRYRE9ORV9VTktOT1dOID0gMSA8PCAwLAorCVRYRE9ORV9TVUNDRVNTID0gMSA8PCAxLAorCVRYRE9ORV9GQUlMVVJFID0gMSA8PCAyLAorCVRYRE9ORV9FWENFU1NJVkVfUkVUUlkgPSAxIDw8IDMsCit9OworCisvKioKICAqIHN0cnVjdCB0eGRvbmVfZW50cnlfZGVzYzogVFggZG9uZSBlbnRyeSBkZXNjcmlwdG9yCiAgKgogICogU3VtbWFyeSBvZiBpbmZvcm1hdGlvbiB0aGF0IGhhcyBiZWVuIHJlYWQgZnJvbSB0aGUgVFggZnJhbWUgZGVzY3JpcHRvcgogICogYWZ0ZXIgdGhlIGRldmljZSBpcyBkb25lIHdpdGggdHJhbnNtaXNzaW9uLgogICoKLSAqIEBjb250cm9sOiBDb250cm9sIHN0cnVjdHVyZSB3aGljaCB3YXMgdXNlZCB0byB0cmFuc21pdCB0aGUgZnJhbWUuCi0gKiBAc3RhdHVzOiBUWCBzdGF0dXMgKFNlZSAmZW51bSB0eF9zdGF0dXMpLgorICogQGZsYWdzOiBUWCBkb25lIGZsYWdzIChTZWUgJmVudW0gdHhkb25lX2VudHJ5X2Rlc2NfZmxhZ3MpLgogICogQHJldHJ5OiBSZXRyeSBjb3VudC4KICAqLwogc3RydWN0IHR4ZG9uZV9lbnRyeV9kZXNjIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2w7Ci0JaW50IHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXRyeTsKIH07CiAKQEAgLTE4MCwxOSArMTk3LDI1IEBACiAgKiBlbnVtIHR4ZW50cnlfZGVzY19mbGFnczogU3RhdHVzIGZsYWdzIGZvciBUWCBlbnRyeSBkZXNjcmlwdG9yCiAgKgogICogQEVOVFJZX1RYRF9SVFNfRlJBTUU6IFRoaXMgZnJhbWUgaXMgYSBSVFMgZnJhbWUuCisgKiBARU5UUllfVFhEX0NUU19GUkFNRTogVGhpcyBmcmFtZSBpcyBhIENUUy10by1zZWxmIGZyYW1lLgogICogQEVOVFJZX1RYRF9PRkRNX1JBVEU6IFRoaXMgZnJhbWUgaXMgc2VuZCBvdXQgd2l0aCBhbiBPRkRNIHJhdGUuCisgKiBARU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5UOiBUaGlzIGlzIHRoZSBmaXJzdCBmcmFtZS4KICAqIEBFTlRSWV9UWERfTU9SRV9GUkFHOiBUaGlzIGZyYW1lIGlzIGZvbGxvd2VkIGJ5IGFub3RoZXIgZnJhZ21lbnQuCiAgKiBARU5UUllfVFhEX1JFUV9USU1FU1RBTVA6IFJlcXVpcmUgdGltZXN0YW1wIHRvIGJlIGluc2VydGVkLgogICogQEVOVFJZX1RYRF9CVVJTVDogVGhpcyBmcmFtZSBiZWxvbmdzIHRvIHRoZSBzYW1lIGJ1cnN0IGV2ZW50LgogICogQEVOVFJZX1RYRF9BQ0s6IEFuIEFDSyBpcyByZXF1aXJlZCBmb3IgdGhpcyBmcmFtZS4KKyAqIEBFTlRSWV9UWERfUkVUUllfTU9ERTogV2hlbiBzZXQsIHRoZSBsb25nIHJldHJ5IGNvdW50IGlzIHVzZWQuCiAgKi8KIGVudW0gdHhlbnRyeV9kZXNjX2ZsYWdzIHsKIAlFTlRSWV9UWERfUlRTX0ZSQU1FLAorCUVOVFJZX1RYRF9DVFNfRlJBTUUsCiAJRU5UUllfVFhEX09GRE1fUkFURSwKKwlFTlRSWV9UWERfRklSU1RfRlJBR01FTlQsCiAJRU5UUllfVFhEX01PUkVfRlJBRywKIAlFTlRSWV9UWERfUkVRX1RJTUVTVEFNUCwKIAlFTlRSWV9UWERfQlVSU1QsCiAJRU5UUllfVFhEX0FDSywKKwlFTlRSWV9UWERfUkVUUllfTU9ERSwKIH07CiAKIC8qKgpAQCAtMjA2LDYgKzIyOSw3IEBACiAgKiBAbGVuZ3RoX2xvdzogUExDUCBsZW5ndGggbG93IHdvcmQuCiAgKiBAc2lnbmFsOiBQTENQIHNpZ25hbC4KICAqIEBzZXJ2aWNlOiBQTENQIHNlcnZpY2UuCisgKiBAcmV0cnlfbGltaXQ6IE1heCBudW1iZXIgb2YgcmV0cmllcy4KICAqIEBhaWZzOiBBSUZTIHZhbHVlLgogICogQGlmczogSUZTIHZhbHVlLgogICogQGN3X21pbjogY3dtaW4gdmFsdWUuCkBAIC0yMjEsMTAgKzI0NSwxMSBAQAogCXUxNiBzaWduYWw7CiAJdTE2IHNlcnZpY2U7CiAKLQlpbnQgYWlmczsKLQlpbnQgaWZzOwotCWludCBjd19taW47Ci0JaW50IGN3X21heDsKKwlzaG9ydCByZXRyeV9saW1pdDsKKwlzaG9ydCBhaWZzOworCXNob3J0IGlmczsKKwlzaG9ydCBjd19taW47CisJc2hvcnQgY3dfbWF4OwogfTsKIAogLyoqCkBAIC0yMzksMTIgKzI2NCwxNCBAQAogICogQEVOVFJZX09XTkVSX0RFVklDRV9DUllQVE86IFRoaXMgZW50cnkgaXMgb3duZWQgYnkgdGhlIGRldmljZSBmb3IgZGF0YQogICoJZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLiBUaGUgZW50cnkgc2hvdWxkIG9ubHkgYmUgdG91Y2hlZCBhZnRlcgogICoJdGhlIGRldmljZSBoYXMgc2lnbmFsZWQgaXQgaXMgZG9uZSB3aXRoIGl0LgorICogQEVOVFJZX0RBVEFfUEVORElORzogVGhpcyBlbnRyeSBjb250YWlucyBhIHZhbGlkIGZyYW1lIGFuZCBpcyB3YWl0aW5nCisgKglmb3IgdGhlIHNpZ25hbCB0byBzdGFydCBzZW5kaW5nLgogICovCi0KIGVudW0gcXVldWVfZW50cnlfZmxhZ3MgewogCUVOVFJZX0JDTl9BU1NJR05FRCwKIAlFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwKIAlFTlRSWV9PV05FUl9ERVZJQ0VfQ1JZUFRPLAorCUVOVFJZX0RBVEFfUEVORElORywKIH07CiAKIC8qKgpAQCAtMzAyLDYgKzMyOSw3IEBACiAgKglpbmRleCBjb3JydXB0aW9uIGR1ZSB0byBjb25jdXJyZW5jeS4KICAqIEBjb3VudDogTnVtYmVyIG9mIGZyYW1lcyBoYW5kbGVkIGluIHRoZSBxdWV1ZS4KICAqIEBsaW1pdDogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcXVldWUuCisgKiBAdGhyZXNob2xkOiBNaW5pbXVtIG51bWJlciBvZiBmcmVlIGVudHJpZXMgYmVmb3JlIHF1ZXVlIGlzIGtpY2tlZCBieSBmb3JjZS4KICAqIEBsZW5ndGg6IE51bWJlciBvZiBmcmFtZXMgaW4gcXVldWUuCiAgKiBAaW5kZXg6IEluZGV4IHBvaW50ZXJzIHRvIGVudHJ5IHBvc2l0aW9ucyBpbiB0aGUgcXVldWUsCiAgKgl1c2UgJmVudW0gcXVldWVfaW5kZXggdG8gZ2V0IGEgc3BlY2lmaWMgaW5kZXggZmllbGQuCkBAIC0zMjAsNiArMzQ4LDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgaW50IGNvdW50OwogCXVuc2lnbmVkIHNob3J0IGxpbWl0OworCXVuc2lnbmVkIHNob3J0IHRocmVzaG9sZDsKIAl1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAJdW5zaWduZWQgc2hvcnQgaW5kZXhbUV9JTkRFWF9NQVhdOwogCkBAIC0zNjksNyArMzk4LDcgQEAKICAqIHRoZSBlbmQgb2YgdGhlIFRYIHF1ZXVlIGFycmF5LgogICovCiAjZGVmaW5lIHR4X3F1ZXVlX2VuZChfX2RldikgXAotCSYoX19kZXYpLT50eFsoX19kZXYpLT5ody0+cXVldWVzXQorCSYoX19kZXYpLT50eFsoX19kZXYpLT5vcHMtPnR4X3F1ZXVlc10KIAogLyoqCiAgKiBxdWV1ZV9sb29wIC0gTG9vcCB0aHJvdWdoIHRoZSBxdWV1ZXMgd2l0aGluIGEgc3BlY2lmaWMgcmFuZ2UgKEhFTFBFUiBNQUNSTykuCkBAIC00NDQsNiArNDczLDE1IEBACiB9CiAKIC8qKgorICogcnQyeDAwcXVldWVfdGhyZXNob2xkIC0gQ2hlY2sgaWYgdGhlIHF1ZXVlIGlzIGJlbG93IHRocmVzaG9sZAorICogQHF1ZXVlOiBRdWV1ZSB0byBjaGVjay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcXVldWVfdGhyZXNob2xkKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlyZXR1cm4gcnQyeDAwcXVldWVfYXZhaWxhYmxlKHF1ZXVlKSA8IHF1ZXVlLT50aHJlc2hvbGQ7Cit9CisKKy8qKgogICogcnQyeDAwX2Rlc2NfcmVhZCAtIFJlYWQgYSB3b3JkIGZyb20gdGhlIGhhcmR3YXJlIGRlc2NyaXB0b3IuCiAgKiBAZGVzYzogQmFzZSBkZXNjcmlwdG9yIGFkZHJlc3MKICAqIEB3b3JkOiBXb3JkIGluZGV4IGZyb20gd2hlcmUgdGhlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlYWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKaW5kZXggMDMyNWJlZC4uN2U4OGNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaApAQCAtMjcsMTcgKzI3LDYgQEAKICNkZWZpbmUgUlQyWDAwUkVHX0gKIAogLyoKLSAqIFRYIHJlc3VsdCBmbGFncy4KLSAqLwotZW51bSB0eF9zdGF0dXMgewotCVRYX1NVQ0NFU1MgPSAwLAotCVRYX1NVQ0NFU1NfUkVUUlkgPSAxLAotCVRYX0ZBSUxfUkVUUlkgPSAyLAotCVRYX0ZBSUxfSU5WQUxJRCA9IDMsCi0JVFhfRkFJTF9PVEhFUiA9IDQsCi19OwotCi0vKgogICogQW50ZW5uYSB2YWx1ZXMKICAqLwogZW51bSBhbnRlbm5hIHsKQEAgLTE0MSw4MyArMTMwLDEwNyBAQAogCiAvKgogICogUG93ZXIgb2YgdHdvIGNoZWNrLCB0aGlzIHdpbGwgY2hlY2sKLSAqIGlmIHRoZSBtYXNrIHRoYXQgaGFzIGJlZW4gZ2l2ZW4gY29udGFpbnMKLSAqIGFuZCBjb250aWd1b3VzIHNldCBvZiBiaXRzLgorICogaWYgdGhlIG1hc2sgdGhhdCBoYXMgYmVlbiBnaXZlbiBjb250YWlucyBhbmQgY29udGlndW91cyBzZXQgb2YgYml0cy4KKyAqIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlIHRoZSBpc19wb3dlcl9vZl8yKCkgZnVuY3Rpb24gc2luY2UgdGhpcworICogY2hlY2sgbXVzdCBiZSBkb25lIGF0IGNvbXBpbGUtdGltZS4KICAqLwogI2RlZmluZSBpc19wb3dlcl9vZl90d28oeCkJKCAhKCh4KSAmICgoeCktMSkpICkKICNkZWZpbmUgbG93X2JpdF9tYXNrKHgpCQkoICgoeCktMSkgJiB+KHgpICkKICNkZWZpbmUgaXNfdmFsaWRfbWFzayh4KQlpc19wb3dlcl9vZl90d28oMSArICh4KSArIGxvd19iaXRfbWFzayh4KSkKIAorLyoKKyAqIE1hY3JvJ3MgdG8gZmluZCBmaXJzdCBzZXQgYml0IGluIGEgdmFyaWFibGUuCisgKiBUaGVzZSBtYWNybydzIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlIF9fZmZzKCkgZnVuY3Rpb24gd2l0aAorICogdGhlIG1vc3QgaW1wb3J0YW50IGRpZmZlcmVuY2UgdGhhdCB0aGlzIGlzIGRvbmUgZHVyaW5nCisgKiBjb21waWxlLXRpbWUgcmF0aGVyIHRoZW4gcnVuLXRpbWUuCisgKi8KKyNkZWZpbmUgY29tcGlsZV9mZnMyKF9feCkgXAorCV9fYnVpbHRpbl9jaG9vc2VfZXhwcigoKF9feCkgJiAweDEpLCAwLCAxKQorCisjZGVmaW5lIGNvbXBpbGVfZmZzNChfX3gpIFwKKwlfX2J1aWx0aW5fY2hvb3NlX2V4cHIoKChfX3gpICYgMHgzKSwgXAorCQkJICAgICAgKGNvbXBpbGVfZmZzMigoX194KSkpLCBcCisJCQkgICAgICAoY29tcGlsZV9mZnMyKChfX3gpID4+IDIpICsgMikpCisKKyNkZWZpbmUgY29tcGlsZV9mZnM4KF9feCkgXAorCV9fYnVpbHRpbl9jaG9vc2VfZXhwcigoKF9feCkgJiAweGYpLCBcCisJCQkgICAgICAoY29tcGlsZV9mZnM0KChfX3gpKSksIFwKKwkJCSAgICAgIChjb21waWxlX2ZmczQoKF9feCkgPj4gNCkgKyA0KSkKKworI2RlZmluZSBjb21waWxlX2ZmczE2KF9feCkgXAorCV9fYnVpbHRpbl9jaG9vc2VfZXhwcigoKF9feCkgJiAweGZmKSwgXAorCQkJICAgICAgKGNvbXBpbGVfZmZzOCgoX194KSkpLCBcCisJCQkgICAgICAoY29tcGlsZV9mZnM4KChfX3gpID4+IDgpICsgOCkpCisKKyNkZWZpbmUgY29tcGlsZV9mZnMzMihfX3gpIFwKKwlfX2J1aWx0aW5fY2hvb3NlX2V4cHIoKChfX3gpICYgMHhmZmZmKSwgXAorCQkJICAgICAgKGNvbXBpbGVfZmZzMTYoKF9feCkpKSwgXAorCQkJICAgICAgKGNvbXBpbGVfZmZzMTYoKF9feCkgPj4gMTYpICsgMTYpKQorCisvKgorICogVGhpcyBtYWNybyB3aWxsIGNoZWNrIHRoZSByZXF1aXJlbWVudHMgZm9yIHRoZSBGSUVMRHs4LDE2LDMyfSBtYWNyb3MKKyAqIFRoZSBtYXNrIHNob3VsZCBiZSBhIGNvbnN0YW50IG5vbi16ZXJvIGNvbnRpZ3VvdXMgc2V0IG9mIGJpdHMgd2hpY2gKKyAqIGRvZXMgbm90IGV4Y2VlZCB0aGUgZ2l2ZW4gdHlwZWxpbWl0LgorICovCisjZGVmaW5lIEZJRUxEX0NIRUNLKF9fbWFzaywgX190eXBlKQkJCVwKKwlCVUlMRF9CVUdfT04oIV9fYnVpbHRpbl9jb25zdGFudF9wKF9fbWFzaykgfHwJXAorCQkgICAgICEoX19tYXNrKSB8fAkJCVwKKwkJICAgICAhaXNfdmFsaWRfbWFzayhfX21hc2spIHx8CQlcCisJCSAgICAgKF9fbWFzaykgIT0gKF9fdHlwZSkoX19tYXNrKSkJXAorCiAjZGVmaW5lIEZJRUxEOChfX21hc2spCQkJCVwKICh7CQkJCQkJXAotCUJVSUxEX0JVR19PTighKF9fbWFzaykgfHwJCVwKLQkJICAgICAhaXNfdmFsaWRfbWFzayhfX21hc2spIHx8CVwKLQkJICAgICAoX19tYXNrKSAhPSAodTgpKF9fbWFzaykpOwlcCisJRklFTERfQ0hFQ0soX19tYXNrLCB1OCk7CQlcCiAJKHN0cnVjdCBydDJ4MDBfZmllbGQ4KSB7CQlcCi0JCV9fZmZzKF9fbWFzayksIChfX21hc2spCQlcCisJCWNvbXBpbGVfZmZzOChfX21hc2spLCAoX19tYXNrKQlcCiAJfTsJCQkJCVwKIH0pCiAKICNkZWZpbmUgRklFTEQxNihfX21hc2spCQkJCVwKICh7CQkJCQkJXAotCUJVSUxEX0JVR19PTighKF9fbWFzaykgfHwJCVwKLQkJICAgICAhaXNfdmFsaWRfbWFzayhfX21hc2spIHx8CVwKLQkJICAgICAoX19tYXNrKSAhPSAodTE2KShfX21hc2spKTtcCisJRklFTERfQ0hFQ0soX19tYXNrLCB1MTYpOwkJXAogCShzdHJ1Y3QgcnQyeDAwX2ZpZWxkMTYpIHsJCVwKLQkJX19mZnMoX19tYXNrKSwgKF9fbWFzaykJCVwKKwkJY29tcGlsZV9mZnMxNihfX21hc2spLCAoX19tYXNrKQlcCiAJfTsJCQkJCVwKIH0pCiAKICNkZWZpbmUgRklFTEQzMihfX21hc2spCQkJCVwKICh7CQkJCQkJXAotCUJVSUxEX0JVR19PTighKF9fbWFzaykgfHwJCVwKLQkJICAgICAhaXNfdmFsaWRfbWFzayhfX21hc2spIHx8CVwKLQkJICAgICAoX19tYXNrKSAhPSAodTMyKShfX21hc2spKTtcCisJRklFTERfQ0hFQ0soX19tYXNrLCB1MzIpOwkJXAogCShzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIpIHsJCVwKLQkJX19mZnMoX19tYXNrKSwgKF9fbWFzaykJCVwKKwkJY29tcGlsZV9mZnMzMihfX21hc2spLCAoX19tYXNrKQlcCiAJfTsJCQkJCVwKIH0pCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBfc2V0X2ZpZWxkMzIodTMyICpyZWcsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IHJ0MngwMF9maWVsZDMyIGZpZWxkLAotCQkJCSAgICAgIGNvbnN0IHUzMiB2YWx1ZSkKLXsKLQkqcmVnICY9IH4oZmllbGQuYml0X21hc2spOwotCSpyZWcgfD0gKHZhbHVlIDw8IGZpZWxkLmJpdF9vZmZzZXQpICYgZmllbGQuYml0X21hc2s7Ci19CisjZGVmaW5lIFNFVF9GSUVMRChfX3JlZywgX190eXBlLCBfX2ZpZWxkLCBfX3ZhbHVlKVwKKyh7CQkJCQkJXAorCXR5cGVjaGVjayhfX3R5cGUsIF9fZmllbGQpOwkJXAorCSooX19yZWcpICY9IH4oKF9fZmllbGQpLmJpdF9tYXNrKTsJXAorCSooX19yZWcpIHw9ICgoX192YWx1ZSkgPDwJCVwKKwkgICAgKChfX2ZpZWxkKS5iaXRfb2Zmc2V0KSkgJgkJXAorCSAgICAoKF9fZmllbGQpLmJpdF9tYXNrKTsJCVwKK30pCiAKLXN0YXRpYyBpbmxpbmUgdTMyIHJ0MngwMF9nZXRfZmllbGQzMihjb25zdCB1MzIgcmVnLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IHJ0MngwMF9maWVsZDMyIGZpZWxkKQotewotCXJldHVybiAocmVnICYgZmllbGQuYml0X21hc2spID4+IGZpZWxkLmJpdF9vZmZzZXQ7Ci19CisjZGVmaW5lIEdFVF9GSUVMRChfX3JlZywgX190eXBlLCBfX2ZpZWxkKQlcCisoewkJCQkJCVwKKwl0eXBlY2hlY2soX190eXBlLCBfX2ZpZWxkKTsJCVwKKwkoKF9fcmVnKSAmICgoX19maWVsZCkuYml0X21hc2spKSA+PglcCisJICAgICgoX19maWVsZCkuYml0X29mZnNldCk7CQlcCit9KQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3NldF9maWVsZDE2KHUxNiAqcmVnLAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBydDJ4MDBfZmllbGQxNiBmaWVsZCwKLQkJCQkgICAgICBjb25zdCB1MTYgdmFsdWUpCi17Ci0JKnJlZyAmPSB+KGZpZWxkLmJpdF9tYXNrKTsKLQkqcmVnIHw9ICh2YWx1ZSA8PCBmaWVsZC5iaXRfb2Zmc2V0KSAmIGZpZWxkLmJpdF9tYXNrOwotfQorI2RlZmluZSBydDJ4MDBfc2V0X2ZpZWxkMzIoX19yZWcsIF9fZmllbGQsIF9fdmFsdWUpIFwKKwlTRVRfRklFTEQoX19yZWcsIHN0cnVjdCBydDJ4MDBfZmllbGQzMiwgX19maWVsZCwgX192YWx1ZSkKKyNkZWZpbmUgcnQyeDAwX2dldF9maWVsZDMyKF9fcmVnLCBfX2ZpZWxkKSBcCisJR0VUX0ZJRUxEKF9fcmVnLCBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIsIF9fZmllbGQpCiAKLXN0YXRpYyBpbmxpbmUgdTE2IHJ0MngwMF9nZXRfZmllbGQxNihjb25zdCB1MTYgcmVnLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IHJ0MngwMF9maWVsZDE2IGZpZWxkKQotewotCXJldHVybiAocmVnICYgZmllbGQuYml0X21hc2spID4+IGZpZWxkLmJpdF9vZmZzZXQ7Ci19CisjZGVmaW5lIHJ0MngwMF9zZXRfZmllbGQxNihfX3JlZywgX19maWVsZCwgX192YWx1ZSkgXAorCVNFVF9GSUVMRChfX3JlZywgc3RydWN0IHJ0MngwMF9maWVsZDE2LCBfX2ZpZWxkLCBfX3ZhbHVlKQorI2RlZmluZSBydDJ4MDBfZ2V0X2ZpZWxkMTYoX19yZWcsIF9fZmllbGQpIFwKKwlHRVRfRklFTEQoX19yZWcsIHN0cnVjdCBydDJ4MDBfZmllbGQxNiwgX19maWVsZCkKIAotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMF9zZXRfZmllbGQ4KHU4ICpyZWcsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgcnQyeDAwX2ZpZWxkOCBmaWVsZCwKLQkJCQkgICAgIGNvbnN0IHU4IHZhbHVlKQotewotCSpyZWcgJj0gfihmaWVsZC5iaXRfbWFzayk7Ci0JKnJlZyB8PSAodmFsdWUgPDwgZmllbGQuYml0X29mZnNldCkgJiBmaWVsZC5iaXRfbWFzazsKLX0KLQotc3RhdGljIGlubGluZSB1OCBydDJ4MDBfZ2V0X2ZpZWxkOChjb25zdCB1OCByZWcsCi0JCQkJICAgY29uc3Qgc3RydWN0IHJ0MngwMF9maWVsZDggZmllbGQpCi17Ci0JcmV0dXJuIChyZWcgJiBmaWVsZC5iaXRfbWFzaykgPj4gZmllbGQuYml0X29mZnNldDsKLX0KKyNkZWZpbmUgcnQyeDAwX3NldF9maWVsZDgoX19yZWcsIF9fZmllbGQsIF9fdmFsdWUpIFwKKwlTRVRfRklFTEQoX19yZWcsIHN0cnVjdCBydDJ4MDBfZmllbGQ4LCBfX2ZpZWxkLCBfX3ZhbHVlKQorI2RlZmluZSBydDJ4MDBfZ2V0X2ZpZWxkOChfX3JlZywgX19maWVsZCkgXAorCUdFVF9GSUVMRChfX3JlZywgc3RydWN0IHJ0MngwMF9maWVsZDgsIF9fZmllbGQpCiAKICNlbmRpZiAvKiBSVDJYMDBSRUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jCmluZGV4IGZjZWY5ODguLjA0YjI5NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMKQEAgLTIzLDcgKzIzLDYgQEAKIAlBYnN0cmFjdDogcnQyeDAwIHJma2lsbCByb3V0aW5lcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5wdXQtcG9sbGRldi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgpAQCAtNDUsMjggKzQ0LDUxIEBACiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBUlRFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAotCWlmIChzdGF0ZSA9PSBSRktJTExfU1RBVEVfT04pIHsKKwlpZiAoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCkgewogCQlJTkZPKHJ0MngwMGRldiwgIkhhcmR3YXJlIGJ1dHRvbiBwcmVzc2VkLCBlbmFibGluZyByYWRpby5cbiIpOwogCQlfX2NsZWFyX2JpdChERVZJQ0VfRElTQUJMRURfUkFESU9fSFcsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAkJcmV0dmFsID0gcnQyeDAwbGliX2VuYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwotCX0gZWxzZSBpZiAoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX09GRikgeworCX0gZWxzZSBpZiAoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCkgewogCQlJTkZPKHJ0MngwMGRldiwgIkhhcmR3YXJlIGJ1dHRvbiBwcmVzc2VkLCBkaXNhYmxpbmcgcmFkaW8uXG4iKTsKIAkJX19zZXRfYml0KERFVklDRV9ESVNBQkxFRF9SQURJT19IVywgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCQlydDJ4MDBsaWJfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOworCX0gZWxzZSB7CisJCVdBUk5JTkcocnQyeDAwZGV2LCAiUmVjZWl2ZWQgdW5leHBlY3RlZCByZmtpbGwgc3RhdGUgJWQuXG4iLAorCQkJc3RhdGUpOwogCX0KIAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MngwMHJma2lsbF9wb2xsKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldikKK3N0YXRpYyBpbnQgcnQyeDAwcmZraWxsX2dldF9zdGF0ZSh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHBvbGxfZGV2LT5wcml2YXRlOwotCWludCBzdGF0ZSA9IHJ0MngwMGRldi0+b3BzLT5saWItPnJma2lsbF9wb2xsKHJ0MngwMGRldik7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRhdGE7CiAKLQlpZiAocnQyeDAwZGV2LT5yZmtpbGwtPnN0YXRlICE9IHN0YXRlKSB7Ci0JCWlucHV0X3JlcG9ydF9rZXkocG9sbF9kZXYtPmlucHV0LCBLRVlfV0xBTiwgMSk7Ci0JCWlucHV0X3JlcG9ydF9rZXkocG9sbF9kZXYtPmlucHV0LCBLRVlfV0xBTiwgMCk7Ci0JfQorCSpzdGF0ZSA9IHJ0MngwMGRldi0+cmZraWxsLT5zdGF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDByZmtpbGxfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgcmZraWxsX3dvcmsud29yayk7CisJaW50IHN0YXRlOworCisJaWYgKCF0ZXN0X2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiByZmtpbGxfcG9sbCByZXBvcnRzIDEgd2hlbiB0aGUga2V5IGhhcyBiZWVuIHByZXNzZWQgYW5kIHRoZQorCSAqIHJhZGlvIHNob3VsZCBiZSBibG9ja2VkLgorCSAqLworCXN0YXRlID0gIXJ0MngwMGRldi0+b3BzLT5saWItPnJma2lsbF9wb2xsKHJ0MngwMGRldikgPworCSAgICBSRktJTExfU1RBVEVfVU5CTE9DS0VEIDogUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDsKKworCXJma2lsbF9mb3JjZV9zdGF0ZShydDJ4MDBkZXYtPnJma2lsbCwgc3RhdGUpOworCisJcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKKwkJCSAgICZydDJ4MDBkZXYtPnJma2lsbF93b3JrLCBSRktJTExfUE9MTF9JTlRFUlZBTCk7CiB9CiAKIHZvaWQgcnQyeDAwcmZraWxsX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC04MCwxMiArMTAyLDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cG9sbF9kZXYpKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBwb2xsZWQgZGV2aWNlLlxuIik7Ci0JCXJma2lsbF91bnJlZ2lzdGVyKHJ0MngwMGRldi0+cmZraWxsKTsKLQkJcmV0dXJuOwotCX0KLQogCV9fc2V0X2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKTsKIAogCS8qCkBAIC05Myw3ICsxMDksNyBAQAogCSAqIGFuZCBjb3JyZWN0bHkgc2VuZHMgdGhlIHNpZ25hbCB0byB0aGUgcmZraWxsIGxheWVyIGFib3V0IHRoaXMKIAkgKiBzdGF0ZS4KIAkgKi8KLQlydDJ4MDByZmtpbGxfcG9sbChydDJ4MDBkZXYtPnBvbGxfZGV2KTsKKwlydDJ4MDByZmtpbGxfcG9sbCgmcnQyeDAwZGV2LT5yZmtpbGxfd29yay53b3JrKTsKIH0KIAogdm9pZCBydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTAyLDM4ICsxMTgsMTMgQEAKIAkgICAgIXRlc3RfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKLQlpbnB1dF91bnJlZ2lzdGVyX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5wb2xsX2Rldik7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrKTsKKwogCXJma2lsbF91bnJlZ2lzdGVyKHJ0MngwMGRldi0+cmZraWxsKTsKIAogCV9fY2xlYXJfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKgotcnQyeDAwcmZraWxsX2FsbG9jYXRlX3BvbGxkZXYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqcG9sbF9kZXY7Ci0KLQlwb2xsX2RldiA9IGlucHV0X2FsbG9jYXRlX3BvbGxlZF9kZXZpY2UoKTsKLQlpZiAoIXBvbGxfZGV2KQotCQlyZXR1cm4gTlVMTDsKLQotCXBvbGxfZGV2LT5wcml2YXRlID0gcnQyeDAwZGV2OwotCXBvbGxfZGV2LT5wb2xsID0gcnQyeDAwcmZraWxsX3BvbGw7Ci0JcG9sbF9kZXYtPnBvbGxfaW50ZXJ2YWwgPSBSRktJTExfUE9MTF9JTlRFUlZBTDsKLQotCXBvbGxfZGV2LT5pbnB1dC0+bmFtZSA9IHJ0MngwMGRldi0+b3BzLT5uYW1lOwotCXBvbGxfZGV2LT5pbnB1dC0+cGh5cyA9IHdpcGh5X25hbWUocnQyeDAwZGV2LT5ody0+d2lwaHkpOwotCXBvbGxfZGV2LT5pbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCXBvbGxfZGV2LT5pbnB1dC0+aWQudmVuZG9yID0gMHgxODE0OwotCXBvbGxfZGV2LT5pbnB1dC0+aWQucHJvZHVjdCA9IHJ0MngwMGRldi0+Y2hpcC5ydDsKLQlwb2xsX2Rldi0+aW5wdXQtPmlkLnZlcnNpb24gPSBydDJ4MDBkZXYtPmNoaXAucmV2OwotCXBvbGxfZGV2LT5pbnB1dC0+ZGV2LnBhcmVudCA9IHdpcGh5X2RldihydDJ4MDBkZXYtPmh3LT53aXBoeSk7Ci0JcG9sbF9kZXYtPmlucHV0LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOwotCXNldF9iaXQoS0VZX1dMQU4sIHBvbGxfZGV2LT5pbnB1dC0+a2V5Yml0KTsKLQotCXJldHVybiBwb2xsX2RldjsKLX0KLQogdm9pZCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQpAQCAtMTUwLDE0ICsxNDEsOSBAQAogCXJ0MngwMGRldi0+cmZraWxsLT5kYXRhID0gcnQyeDAwZGV2OwogCXJ0MngwMGRldi0+cmZraWxsLT5zdGF0ZSA9IC0xOwogCXJ0MngwMGRldi0+cmZraWxsLT50b2dnbGVfcmFkaW8gPSBydDJ4MDByZmtpbGxfdG9nZ2xlX3JhZGlvOworCXJ0MngwMGRldi0+cmZraWxsLT5nZXRfc3RhdGUgPSBydDJ4MDByZmtpbGxfZ2V0X3N0YXRlOwogCi0JcnQyeDAwZGV2LT5wb2xsX2RldiA9IHJ0MngwMHJma2lsbF9hbGxvY2F0ZV9wb2xsZGV2KHJ0MngwMGRldik7Ci0JaWYgKCFydDJ4MDBkZXYtPnBvbGxfZGV2KSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2xsZWQgZGV2aWNlLlxuIik7Ci0JCXJma2lsbF9mcmVlKHJ0MngwMGRldi0+cmZraWxsKTsKLQkJcnQyeDAwZGV2LT5yZmtpbGwgPSBOVUxMOwotCQlyZXR1cm47Ci0JfQorCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrLCBydDJ4MDByZmtpbGxfcG9sbCk7CiAKIAlyZXR1cm47CiB9CkBAIC0xNjgsMzIgKzE1NCw4IEBACiAJICAgICF0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKLQlpbnB1dF9mcmVlX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5wb2xsX2Rldik7Ci0JcnQyeDAwZGV2LT5wb2xsX2RldiA9IE5VTEw7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrKTsKIAogCXJma2lsbF9mcmVlKHJ0MngwMGRldi0+cmZraWxsKTsKIAlydDJ4MDBkZXYtPnJma2lsbCA9IE5VTEw7CiB9Ci0KLXZvaWQgcnQyeDAwcmZraWxsX3N1c3BlbmQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8Ci0JICAgICF0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQotCQlyZXR1cm47Ci0KLQlpbnB1dF9mcmVlX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5wb2xsX2Rldik7Ci0JcnQyeDAwZGV2LT5wb2xsX2RldiA9IE5VTEw7Ci19Ci0KLXZvaWQgcnQyeDAwcmZraWxsX3Jlc3VtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKLQkgICAgIXRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCi0JCXJldHVybjsKLQotCXJ0MngwMGRldi0+cG9sbF9kZXYgPSBydDJ4MDByZmtpbGxfYWxsb2NhdGVfcG9sbGRldihydDJ4MDBkZXYpOwotCWlmICghcnQyeDAwZGV2LT5wb2xsX2RldikgewotCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcG9sbGVkIGRldmljZS5cbiIpOwotCQlyZXR1cm47Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCmluZGV4IGU1Y2VhZTguLjgzODYyZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAkJCSAgICAgdm9pZCAqYnVmZmVyLCBjb25zdCB1MTYgYnVmZmVyX2xlbmd0aCwKIAkJCSAgICAgY29uc3QgaW50IHRpbWVvdXQpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBydDJ4MDBkZXZfdXNiX2RldihydDJ4MDBkZXYpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdG9fdXNiX2RldmljZV9pbnRmKHJ0MngwMGRldi0+ZGV2KTsKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCBwaXBlID0KQEAgLTEyOSwxNyArMTI5LDEyIEBACiB7CiAJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSA9IChzdHJ1Y3QgcXVldWVfZW50cnkgKil1cmItPmNvbnRleHQ7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eCAqcHJpdl90eCA9IGVudHJ5LT5wcml2X2RhdGE7CiAJc3RydWN0IHR4ZG9uZV9lbnRyeV9kZXNjIHR4ZGVzYzsKLQlfX2xlMzIgKnR4ZCA9IChfX2xlMzIgKillbnRyeS0+c2tiLT5kYXRhOwotCXUzMiB3b3JkOwogCiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8Ci0JICAgICFfX3Rlc3RfYW5kX2NsZWFyX2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCisJICAgICF0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCiAJCXJldHVybjsKIAotCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAwLCAmd29yZCk7Ci0KIAkvKgogCSAqIFJlbW92ZSB0aGUgZGVzY3JpcHRvciBkYXRhIGZyb20gdGhlIGJ1ZmZlci4KIAkgKi8KQEAgLTE0NywxMjggKzE0MiwxMTYgQEAKIAogCS8qCiAJICogT2J0YWluIHRoZSBzdGF0dXMgYWJvdXQgdGhpcyBwYWNrZXQuCisJICogTm90ZSB0aGF0IHdoZW4gdGhlIHN0YXR1cyBpcyAwIGl0IGRvZXMgbm90IG1lYW4gdGhlCisJICogZnJhbWUgd2FzIHNlbmQgb3V0IGNvcnJlY3RseS4gSXQgb25seSBtZWFucyB0aGUgZnJhbWUKKwkgKiB3YXMgc3VjY2VzZnVsbHkgcHVzaGVkIHRvIHRoZSBoYXJkd2FyZSwgd2UgaGF2ZSBubworCSAqIHdheSB0byBkZXRlcm1pbmUgdGhlIHRyYW5zbWlzc2lvbiBzdGF0dXMgcmlnaHQgbm93LgorCSAqIChPbmx5IGluZGlyZWN0bHkgYnkgbG9va2luZyBhdCB0aGUgZmFpbGVkIFRYIGNvdW50ZXJzCisJICogaW4gdGhlIHJlZ2lzdGVyKS4KIAkgKi8KLQl0eGRlc2Muc3RhdHVzID0gIXVyYi0+c3RhdHVzID8gVFhfU1VDQ0VTUyA6IFRYX0ZBSUxfUkVUUlk7CisJaWYgKCF1cmItPnN0YXR1cykKKwkJX19zZXRfYml0KFRYRE9ORV9VTktOT1dOLCAmdHhkZXNjLmZsYWdzKTsKKwllbHNlCisJCV9fc2V0X2JpdChUWERPTkVfRkFJTFVSRSwgJnR4ZGVzYy5mbGFncyk7CiAJdHhkZXNjLnJldHJ5ID0gMDsKLQl0eGRlc2MuY29udHJvbCA9ICZwcml2X3R4LT5jb250cm9sOwogCiAJcnQyeDAwbGliX3R4ZG9uZShlbnRyeSwgJnR4ZGVzYyk7Ci0KLQkvKgotCSAqIE1ha2UgdGhpcyBlbnRyeSBhdmFpbGFibGUgZm9yIHJldXNlLgotCSAqLwotCWVudHJ5LT5mbGFncyA9IDA7Ci0JcnQyeDAwcXVldWVfaW5kZXhfaW5jKGVudHJ5LT5xdWV1ZSwgUV9JTkRFWF9ET05FKTsKLQotCS8qCi0JICogSWYgdGhlIGRhdGEgcXVldWUgd2FzIGZ1bGwgYmVmb3JlIHRoZSB0eGRvbmUgaGFuZGxlcgotCSAqIHdlIG11c3QgbWFrZSBzdXJlIHRoZSBwYWNrZXQgcXVldWUgaW4gdGhlIG1hYzgwMjExIHN0YWNrCi0JICogaXMgcmVlbmFibGVkIHdoZW4gdGhlIHR4ZG9uZSBoYW5kbGVyIGhhcyBmaW5pc2hlZC4KLQkgKi8KLQlpZiAoIXJ0MngwMHF1ZXVlX2Z1bGwoZW50cnktPnF1ZXVlKSkKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocnQyeDAwZGV2LT5odywgcHJpdl90eC0+Y29udHJvbC5xdWV1ZSk7CiB9CiAKLWludCBydDJ4MDB1c2Jfd3JpdGVfdHhfZGF0YShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgIHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCitpbnQgcnQyeDAwdXNiX3dyaXRlX3R4X2RhdGEoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHJ0MngwMGRldl91c2JfZGV2KHJ0MngwMGRldik7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWCk7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4ICpwcml2X3R4ID0gZW50cnktPnByaXZfZGF0YTsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB0b191c2JfZGV2aWNlX2ludGYocnQyeDAwZGV2LT5kZXYpOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7CiAJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOwogCXUzMiBsZW5ndGg7CiAKLQlpZiAocnQyeDAwcXVldWVfZnVsbChxdWV1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHRlc3RfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSkgewotCQlFUlJPUihydDJ4MDBkZXYsCi0JCSAgICAgICJBcnJpdmVkIGF0IG5vbi1mcmVlIGVudHJ5IGluIHRoZSBub24tZnVsbCBxdWV1ZSAlZC5cbiIKLQkJICAgICAgIlBsZWFzZSBmaWxlIGJ1ZyByZXBvcnQgdG8gJXMuXG4iLAotCQkgICAgICBjb250cm9sLT5xdWV1ZSwgRFJWX1BST0pFQ1QpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAkvKgogCSAqIEFkZCB0aGUgZGVzY3JpcHRvciBpbiBmcm9udCBvZiB0aGUgc2tiLgogCSAqLwotCXNrYl9wdXNoKHNrYiwgcXVldWUtPmRlc2Nfc2l6ZSk7Ci0JbWVtc2V0KHNrYi0+ZGF0YSwgMCwgcXVldWUtPmRlc2Nfc2l6ZSk7CisJc2tiX3B1c2goZW50cnktPnNrYiwgZW50cnktPnF1ZXVlLT5kZXNjX3NpemUpOworCW1lbXNldChlbnRyeS0+c2tiLT5kYXRhLCAwLCBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZSk7CiAKIAkvKgogCSAqIEZpbGwgaW4gc2tiIGRlc2NyaXB0b3IKIAkgKi8KLQlza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7Ci0Jc2tiZGVzYy0+ZGF0YSA9IHNrYi0+ZGF0YSArIHF1ZXVlLT5kZXNjX3NpemU7Ci0Jc2tiZGVzYy0+ZGF0YV9sZW4gPSBza2ItPmxlbiAtIHF1ZXVlLT5kZXNjX3NpemU7Ci0Jc2tiZGVzYy0+ZGVzYyA9IHNrYi0+ZGF0YTsKLQlza2JkZXNjLT5kZXNjX2xlbiA9IHF1ZXVlLT5kZXNjX3NpemU7Ci0Jc2tiZGVzYy0+ZW50cnkgPSBlbnRyeTsKLQotCW1lbWNweSgmcHJpdl90eC0+Y29udHJvbCwgY29udHJvbCwgc2l6ZW9mKHByaXZfdHgtPmNvbnRyb2wpKTsKLQlydDJ4MDBsaWJfd3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIHNrYiwgY29udHJvbCk7CisJc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhlbnRyeS0+c2tiKTsKKwlza2JkZXNjLT5kZXNjID0gZW50cnktPnNrYi0+ZGF0YTsKKwlza2JkZXNjLT5kZXNjX2xlbiA9IGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplOwogCiAJLyoKIAkgKiBVU0IgZGV2aWNlcyBjYW5ub3QgYmxpbmRseSBwYXNzIHRoZSBza2ItPmxlbiBhcyB0aGUKIAkgKiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gdXNiX2ZpbGxfYnVsa191cmIuIFBhc3MgdGhlIHNrYgogCSAqIHRvIHRoZSBkcml2ZXIgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGxlbmd0aCBzaG91bGQgYmUuCiAJICovCi0JbGVuZ3RoID0gcnQyeDAwZGV2LT5vcHMtPmxpYi0+Z2V0X3R4X2RhdGFfbGVuKHJ0MngwMGRldiwgc2tiKTsKKwlsZW5ndGggPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5nZXRfdHhfZGF0YV9sZW4ocnQyeDAwZGV2LCBlbnRyeS0+c2tiKTsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSBVUkIgYW5kIHNlbmQgdGhlIGZyYW1lIHRvIHRoZSBkZXZpY2UuCi0JICovCi0JX19zZXRfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKTsKLQl1c2JfZmlsbF9idWxrX3VyYihwcml2X3R4LT51cmIsIHVzYl9kZXYsIHVzYl9zbmRidWxrcGlwZSh1c2JfZGV2LCAxKSwKLQkJCSAgc2tiLT5kYXRhLCBsZW5ndGgsIHJ0MngwMHVzYl9pbnRlcnJ1cHRfdHhkb25lLCBlbnRyeSk7Ci0JdXNiX3N1Ym1pdF91cmIocHJpdl90eC0+dXJiLCBHRlBfQVRPTUlDKTsKLQotCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhxdWV1ZSwgUV9JTkRFWCk7CisJdXNiX2ZpbGxfYnVsa191cmIoZW50cnlfcHJpdi0+dXJiLCB1c2JfZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgMSksCisJCQkgIGVudHJ5LT5za2ItPmRhdGEsIGxlbmd0aCwKKwkJCSAgcnQyeDAwdXNiX2ludGVycnVwdF90eGRvbmUsIGVudHJ5KTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX3dyaXRlX3R4X2RhdGEpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwdXNiX2tpY2tfdHhfZW50cnkoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgKmVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOworCisJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KEVOVFJZX0RBVEFfUEVORElORywgJmVudHJ5LT5mbGFncykpCisJCXVzYl9zdWJtaXRfdXJiKGVudHJ5X3ByaXYtPnVyYiwgR0ZQX0FUT01JQyk7Cit9CisKK3ZvaWQgcnQyeDAwdXNiX2tpY2tfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpCit7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgcWlkKTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXVuc2lnbmVkIGludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgaW5kZXhfZG9uZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qCisJICogT25seSBwcm90ZWN0IHRoZSByYW5nZSB3ZSBhcmUgZ29pbmcgdG8gbG9vcCBvdmVyLAorCSAqIGlmIGR1cmluZyBvdXIgbG9vcCBhIGV4dHJhIGVudHJ5IGlzIHNldCB0byBwZW5kaW5nCisJICogaXQgc2hvdWxkIG5vdCBiZSBraWNrZWQgZHVyaW5nIHRoaXMgcnVuLCBzaW5jZSBpdAorCSAqIGlzIHBhcnQgb2YgYW5vdGhlciBUWCBvcGVyYXRpb24uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5sb2NrLCBpcnFmbGFncyk7CisJaW5kZXggPSBxdWV1ZS0+aW5kZXhbUV9JTkRFWF07CisJaW5kZXhfZG9uZSA9IHF1ZXVlLT5pbmRleFtRX0lOREVYX0RPTkVdOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBpcnFmbGFncyk7CisKKwkvKgorCSAqIFN0YXJ0IGZyb20gdGhlIFRYIGRvbmUgcG9pbnRlciwgdGhpcyBndWFyZW50ZWVzIHRoYXQgd2Ugd2lsbAorCSAqIHNlbmQgb3V0IGFsbCBmcmFtZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisJICovCisJaWYgKGluZGV4X2RvbmUgPCBpbmRleCkgeworCQlmb3IgKGkgPSBpbmRleF9kb25lOyBpIDwgaW5kZXg7IGkrKykKKwkJCXJ0MngwMHVzYl9raWNrX3R4X2VudHJ5KCZxdWV1ZS0+ZW50cmllc1tpXSk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gaW5kZXhfZG9uZTsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKQorCQkJcnQyeDAwdXNiX2tpY2tfdHhfZW50cnkoJnF1ZXVlLT5lbnRyaWVzW2ldKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgaW5kZXg7IGkrKykKKwkJCXJ0MngwMHVzYl9raWNrX3R4X2VudHJ5KCZxdWV1ZS0+ZW50cmllc1tpXSk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2tpY2tfdHhfcXVldWUpOworCiAvKgogICogUlggZGF0YSBoYW5kbGVycy4KICAqLwotc3RhdGljIHN0cnVjdCBza19idWZmKiBydDJ4MDB1c2JfYWxsb2Nfcnhza2Ioc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGZyYW1lX3NpemU7Ci0KLQkvKgotCSAqIEFzIGFsaWdubWVudCB3ZSB1c2UgMiBhbmQgbm90IE5FVF9JUF9BTElHTiBiZWNhdXNlIHdlIG5lZWQKLQkgKiB0byBiZSBzdXJlIHdlIGhhdmUgMiBieXRlcyByb29tIGluIHRoZSBoZWFkLiAoTkVUX0lQX0FMSUdOCi0JICogY2FuIGJlIDAgb24gc29tZSBoYXJkd2FyZSkuIFdlIHVzZSB0aGVzZSAyIGJ5dGVzIGZvciBmcmFtZQotCSAqIGFsaWdubWVudCBsYXRlciwgd2UgYXNzdW1lIHRoYXQgdGhlIGNoYW5jZSB0aGF0Ci0JICogaGVhZGVyX3NpemUgJSA0ID09IDIgaXMgYmlnZ2VyIHRoZW4gaGVhZGVyX3NpemUgJSAyID09IDAKLQkgKiBhbmQgdGh1cyBvcHRpbWl6ZSBhbGlnbm1lbnQgYnkgcmVzZXJ2aW5nIHRoZSAyIGJ5dGVzIGluCi0JICogYWR2YW5jZS4KLQkgKi8KLQlmcmFtZV9zaXplID0gcXVldWUtPmRhdGFfc2l6ZSArIHF1ZXVlLT5kZXNjX3NpemU7Ci0Jc2tiID0gZGV2X2FsbG9jX3NrYihxdWV1ZS0+ZGVzY19zaXplICsgZnJhbWVfc2l6ZSArIDIpOwotCWlmICghc2tiKQotCQlyZXR1cm4gTlVMTDsKLQotCXNrYl9yZXNlcnZlKHNrYiwgcXVldWUtPmRlc2Nfc2l6ZSArIDIpOwotCXNrYl9wdXQoc2tiLCBmcmFtZV9zaXplKTsKLQotCXJldHVybiBza2I7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0MngwMHVzYl9pbnRlcnJ1cHRfcnhkb25lKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBxdWV1ZV9lbnRyeSAqKXVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7Ci0Jc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjIHJ4ZGVzYzsKLQlpbnQgaGVhZGVyX3NpemU7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOworCXU4IHJ4ZFszMl07CiAKIAlpZiAoIXRlc3RfYml0KERFVklDRV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKLQkgICAgIXRlc3RfYW5kX2NsZWFyX2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCisJICAgICF0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCiAJCXJldHVybjsKIAogCS8qCkBAIC0yNzYsNjEgKzI1OSwyMiBAQAogCSAqIHRvIGJlIGFjdHVhbGx5IHZhbGlkLCBvciBpZiB0aGUgdXJiIGlzIHNpZ25hbGluZwogCSAqIGEgcHJvYmxlbS4KIAkgKi8KLQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgZW50cnktPnF1ZXVlLT5kZXNjX3NpemUgfHwgdXJiLT5zdGF0dXMpCi0JCWdvdG8gc2tpcF9lbnRyeTsKLQotCS8qCi0JICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgotCSAqLwotCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7Ci0JbWVtc2V0KHNrYmRlc2MsIDAsIHNpemVvZigqc2tiZGVzYykpOwotCXNrYmRlc2MtPmVudHJ5ID0gZW50cnk7Ci0KLQltZW1zZXQoJnJ4ZGVzYywgMCwgc2l6ZW9mKHJ4ZGVzYykpOwotCXJ0MngwMGRldi0+b3BzLT5saWItPmZpbGxfcnhkb25lKGVudHJ5LCAmcnhkZXNjKTsKLQotCS8qCi0JICogVGhlIGRhdGEgYmVoaW5kIHRoZSBpZWVlODAyMTEgaGVhZGVyIG11c3QgYmUKLQkgKiBhbGlnbmVkIG9uIGEgNCBieXRlIGJvdW5kYXJ5LgotCSAqLwotCWhlYWRlcl9zaXplID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2IoZW50cnktPnNrYik7Ci0JaWYgKGhlYWRlcl9zaXplICUgNCA9PSAwKSB7Ci0JCXNrYl9wdXNoKGVudHJ5LT5za2IsIDIpOwotCQltZW1tb3ZlKGVudHJ5LT5za2ItPmRhdGEsIGVudHJ5LT5za2ItPmRhdGEgKyAyLAotCQkJZW50cnktPnNrYi0+bGVuIC0gMik7Ci0JCXNrYmRlc2MtPmRhdGEgPSBlbnRyeS0+c2tiLT5kYXRhOwotCQlza2JfdHJpbShlbnRyeS0+c2tiLGVudHJ5LT5za2ItPmxlbiAtIDIpOworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZSB8fCB1cmItPnN0YXR1cykgeworCQlfX3NldF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpOworCQl1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlyZXR1cm47CiAJfQogCiAJLyoKLQkgKiBBbGxvY2F0ZSBhIG5ldyBzayBidWZmZXIgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBvbmUuCi0JICogSWYgYWxsb2NhdGlvbiBmYWlscywgd2Ugc2hvdWxkIGRyb3AgdGhlIGN1cnJlbnQgZnJhbWUKLQkgKiBzbyB3ZSBjYW4gcmVjeWNsZSB0aGUgZXhpc3Rpbmcgc2sgYnVmZmVyIGZvciB0aGUgbmV3IGZyYW1lLgorCSAqIEZpbGwgaW4gZGVzYyBmaWVsZHMgb2YgdGhlIHNrYiBkZXNjcmlwdG9yCiAJICovCi0Jc2tiID0gcnQyeDAwdXNiX2FsbG9jX3J4c2tiKGVudHJ5LT5xdWV1ZSk7Ci0JaWYgKCFza2IpCi0JCWdvdG8gc2tpcF9lbnRyeTsKKwlza2JkZXNjLT5kZXNjID0gcnhkOworCXNrYmRlc2MtPmRlc2NfbGVuID0gZW50cnktPnF1ZXVlLT5kZXNjX3NpemU7CiAKIAkvKgogCSAqIFNlbmQgdGhlIGZyYW1lIHRvIHJ0MngwMGxpYiBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgogCSAqLwotCXJ0MngwMGxpYl9yeGRvbmUoZW50cnksICZyeGRlc2MpOwotCi0JLyoKLQkgKiBSZXBsYWNlIGN1cnJlbnQgZW50cnkncyBza2Igd2l0aCB0aGUgbmV3bHkgYWxsb2NhdGVkIG9uZSwKLQkgKiBhbmQgcmVpbml0aWFsaXplIHRoZSB1cmIuCi0JICovCi0JZW50cnktPnNrYiA9IHNrYjsKLQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGVudHJ5LT5za2ItPmRhdGE7Ci0JdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gZW50cnktPnNrYi0+bGVuOwotCi1za2lwX2VudHJ5OgotCWlmICh0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJmVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpIHsKLQkJX19zZXRfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKTsKLQkJdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQl9Ci0KLQlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnktPnF1ZXVlLCBRX0lOREVYKTsKKwlydDJ4MDBsaWJfcnhkb25lKHJ0MngwMGRldiwgZW50cnkpOwogfQogCiAvKgpAQCAtMzM4LDI3ICsyODIsMjEgQEAKICAqLwogdm9pZCBydDJ4MDB1c2JfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9yeCAqcHJpdl9yeDsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfdHggKnByaXZfdHg7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqcHJpdl9iY247CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiICplbnRyeV9wcml2OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9iY24gKmJjbl9wcml2OwogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9SWF9DT05UUk9MLCAweDAwMDAsIDB4MDAwMCwKKwlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfUlhfQ09OVFJPTCwgMCwgMCwKIAkJCQkgICAgUkVHSVNURVJfVElNRU9VVCk7CiAKIAkvKgogCSAqIENhbmNlbCBhbGwgcXVldWVzLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBydDJ4MDBkZXYtPnJ4LT5saW1pdDsgaSsrKSB7Ci0JCXByaXZfcnggPSBydDJ4MDBkZXYtPnJ4LT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKLQkJdXNiX2tpbGxfdXJiKHByaXZfcngtPnVyYik7Ci0JfQotCi0JdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgeworCXF1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpIHsKIAkJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKSB7Ci0JCQlwcml2X3R4ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQkJdXNiX2tpbGxfdXJiKHByaXZfdHgtPnVyYik7CisJCQllbnRyeV9wcml2ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQkJdXNiX2tpbGxfdXJiKGVudHJ5X3ByaXYtPnVyYik7CiAJCX0KIAl9CiAKQEAgLTM2OSwxOSArMzA3LDkgQEAKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+YmNuLT5saW1pdDsgaSsrKSB7Ci0JCXByaXZfYmNuID0gcnQyeDAwZGV2LT5iY24tPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQl1c2Jfa2lsbF91cmIocHJpdl9iY24tPnVyYik7Ci0KLQkJaWYgKHByaXZfYmNuLT5ndWFyZGlhbl91cmIpCi0JCQl1c2Jfa2lsbF91cmIocHJpdl9iY24tPmd1YXJkaWFuX3VyYik7Ci0JfQotCi0JaWYgKCF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBydDJ4MDBkZXYtPmJjblsxXS5saW1pdDsgaSsrKSB7Ci0JCXByaXZfdHggPSBydDJ4MDBkZXYtPmJjblsxXS5lbnRyaWVzW2ldLnByaXZfZGF0YTsKLQkJdXNiX2tpbGxfdXJiKHByaXZfdHgtPnVyYik7CisJCWJjbl9wcml2ID0gcnQyeDAwZGV2LT5iY24tPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQlpZiAoYmNuX3ByaXYtPmd1YXJkaWFuX3VyYikKKwkJCXVzYl9raWxsX3VyYihiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2JfZGlzYWJsZV9yYWRpbyk7CkBAIC0zOTIsMTYgKzMyMCwxNiBAQAogdm9pZCBydDJ4MDB1c2JfaW5pdF9yeGVudHJ5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHJ0MngwMGRldl91c2JfZGV2KHJ0MngwMGRldik7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3J4ICpwcml2X3J4ID0gZW50cnktPnByaXZfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHRvX3VzYl9kZXZpY2VfaW50ZihydDJ4MDBkZXYtPmRldik7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIAotCXVzYl9maWxsX2J1bGtfdXJiKHByaXZfcngtPnVyYiwgdXNiX2RldiwKKwl1c2JfZmlsbF9idWxrX3VyYihlbnRyeV9wcml2LT51cmIsIHVzYl9kZXYsCiAJCQkgIHVzYl9yY3ZidWxrcGlwZSh1c2JfZGV2LCAxKSwKIAkJCSAgZW50cnktPnNrYi0+ZGF0YSwgZW50cnktPnNrYi0+bGVuLAogCQkJICBydDJ4MDB1c2JfaW50ZXJydXB0X3J4ZG9uZSwgZW50cnkpOwogCiAJX19zZXRfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKTsKLQl1c2Jfc3VibWl0X3VyYihwcml2X3J4LT51cmIsIEdGUF9BVE9NSUMpOworCXVzYl9zdWJtaXRfdXJiKGVudHJ5X3ByaXYtPnVyYiwgR0ZQX0FUT01JQyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2JfaW5pdF9yeGVudHJ5KTsKIApAQCAtNDE1LDM4ICszNDMsMzEgQEAKIHN0YXRpYyBpbnQgcnQyeDAwdXNiX2FsbG9jX3VyYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICAgIHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKIHsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfcnggKnByaXZfcng7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4ICpwcml2X3R4OwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9iY24gKnByaXZfYmNuOwotCXN0cnVjdCB1cmIgKnVyYjsKLQl1bnNpZ25lZCBpbnQgZ3VhcmRpYW4gPQotCSAgICB0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgKmVudHJ5X3ByaXY7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqYmNuX3ByaXY7CiAJdW5zaWduZWQgaW50IGk7CiAKLQkvKgotCSAqIEFsbG9jYXRlIHRoZSBVUkIncwotCSAqLwogCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgewotCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCQlpZiAoIXVyYikKKwkJZW50cnlfcHJpdiA9IHF1ZXVlLT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKKwkJZW50cnlfcHJpdi0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlbnRyeV9wcml2LT51cmIpCiAJCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLQkJaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX1JYKSB7Ci0JCQlwcml2X3J4ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQkJcHJpdl9yeC0+dXJiID0gdXJiOwotCQl9IGVsc2UgaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX01HTVQgJiYgZ3VhcmRpYW4pIHsKLQkJCXByaXZfYmNuID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQkJcHJpdl9iY24tPnVyYiA9IHVyYjsKKwkvKgorCSAqIElmIHRoaXMgaXMgbm90IHRoZSBiZWFjb24gcXVldWUgb3IKKwkgKiBubyBndWFyZGlhbiBieXRlIHdhcyByZXF1aXJlZCBmb3IgdGhlIGJlYWNvbiwKKwkgKiB0aGVuIHdlIGFyZSBkb25lLgorCSAqLworCWlmIChydDJ4MDBkZXYtPmJjbiAhPSBxdWV1ZSB8fAorCSAgICAhdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybiAwOwogCi0JCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCQkJaWYgKCF1cmIpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCXByaXZfYmNuLT5ndWFyZGlhbl91cmIgPSB1cmI7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2X3R4ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQkJcHJpdl90eC0+dXJiID0gdXJiOwotCQl9CisJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKSB7CisJCWJjbl9wcml2ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQliY25fcHJpdi0+Z3VhcmRpYW5fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKQorCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NTUsNDcgKzM3NiwzOSBAQAogc3RhdGljIHZvaWQgcnQyeDAwdXNiX2ZyZWVfdXJiKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgICAgc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9yeCAqcHJpdl9yeDsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfdHggKnByaXZfdHg7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqcHJpdl9iY247Ci0Jc3RydWN0IHVyYiAqdXJiOwotCXVuc2lnbmVkIGludCBndWFyZGlhbiA9Ci0JICAgIHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdjsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuICpiY25fcHJpdjsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWlmICghcXVldWUtPmVudHJpZXMpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgewotCQlpZiAocXVldWUtPnFpZCA9PSBRSURfUlgpIHsKLQkJCXByaXZfcnggPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7Ci0JCQl1cmIgPSBwcml2X3J4LT51cmI7Ci0JCX0gZWxzZSBpZiAocXVldWUtPnFpZCA9PSBRSURfTUdNVCAmJiBndWFyZGlhbikgewotCQkJcHJpdl9iY24gPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7CisJCWVudHJ5X3ByaXYgPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7CisJCXVzYl9raWxsX3VyYihlbnRyeV9wcml2LT51cmIpOworCQl1c2JfZnJlZV91cmIoZW50cnlfcHJpdi0+dXJiKTsKKwl9CiAKLQkJCXVzYl9raWxsX3VyYihwcml2X2Jjbi0+Z3VhcmRpYW5fdXJiKTsKLQkJCXVzYl9mcmVlX3VyYihwcml2X2Jjbi0+Z3VhcmRpYW5fdXJiKTsKKwkvKgorCSAqIElmIHRoaXMgaXMgbm90IHRoZSBiZWFjb24gcXVldWUgb3IKKwkgKiBubyBndWFyZGlhbiBieXRlIHdhcyByZXF1aXJlZCBmb3IgdGhlIGJlYWNvbiwKKwkgKiB0aGVuIHdlIGFyZSBkb25lLgorCSAqLworCWlmIChydDJ4MDBkZXYtPmJjbiAhPSBxdWV1ZSB8fAorCSAgICAhdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybjsKIAotCQkJdXJiID0gcHJpdl9iY24tPnVyYjsKLQkJfSBlbHNlIHsKLQkJCXByaXZfdHggPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7Ci0JCQl1cmIgPSBwcml2X3R4LT51cmI7Ci0JCX0KLQotCQl1c2Jfa2lsbF91cmIodXJiKTsKLQkJdXNiX2ZyZWVfdXJiKHVyYik7Ci0JCWlmIChxdWV1ZS0+ZW50cmllc1tpXS5za2IpCi0JCQlrZnJlZV9za2IocXVldWUtPmVudHJpZXNbaV0uc2tiKTsKKwlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKKwkJYmNuX3ByaXYgPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7CisJCXVzYl9raWxsX3VyYihiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGJjbl9wcml2LT5ndWFyZGlhbl91cmIpOwogCX0KIH0KIAogaW50IHJ0MngwMHVzYl9pbml0aWFsaXplKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGVudHJ5X3NpemU7Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IHVuaW5pdGlhbGl6ZWRfdmFyKHN0YXR1cyk7CisJaW50IHN0YXR1czsKIAogCS8qCiAJICogQWxsb2NhdGUgRE1BCkBAIC01MDYsMTggKzQxOSw2IEBACiAJCQlnb3RvIGV4aXQ7CiAJfQogCi0JLyoKLQkgKiBGb3IgdGhlIFJYIHF1ZXVlLCBza2IncyBzaG91bGQgYmUgYWxsb2NhdGVkLgotCSAqLwotCWVudHJ5X3NpemUgPSBydDJ4MDBkZXYtPnJ4LT5kYXRhX3NpemUgKyBydDJ4MDBkZXYtPnJ4LT5kZXNjX3NpemU7Ci0JZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+cngtPmxpbWl0OyBpKyspIHsKLQkJc2tiID0gcnQyeDAwdXNiX2FsbG9jX3J4c2tiKHJ0MngwMGRldi0+cngpOwotCQlpZiAoIXNrYikKLQkJCWdvdG8gZXhpdDsKLQotCQlydDJ4MDBkZXYtPnJ4LT5lbnRyaWVzW2ldLnNrYiA9IHNrYjsKLQl9Ci0KIAlyZXR1cm4gMDsKIAogZXhpdDoKQEAgLTU5Niw3ICs0OTcsNyBAQAogCXVzYl9zZXRfaW50ZmRhdGEodXNiX2ludGYsIGh3KTsKIAogCXJ0MngwMGRldiA9IGh3LT5wcml2OwotCXJ0MngwMGRldi0+ZGV2ID0gdXNiX2ludGY7CisJcnQyeDAwZGV2LT5kZXYgPSAmdXNiX2ludGYtPmRldjsKIAlydDJ4MDBkZXYtPm9wcyA9IG9wczsKIAlydDJ4MDBkZXYtPmh3ID0gaHc7CiAJbXV0ZXhfaW5pdCgmcnQyeDAwZGV2LT51c2JfY2FjaGVfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCmluZGV4IDExZTU1MTguLmFhZDc5NGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCkBAIC0yNiw2ICsyNiwxMiBAQAogI2lmbmRlZiBSVDJYMDBVU0JfSAogI2RlZmluZSBSVDJYMDBVU0JfSAogCisjZGVmaW5lIHRvX3VzYl9kZXZpY2VfaW50ZihkKSBcCisoeyBcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGQpOyBcCisJaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsgXAorfSkKKwogLyoKICAqIFRoaXMgdmFyaWFibGUgc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUKICAqIHVzYl9kcml2ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLgpAQCAtNDcsNiArNTMsMjAgQEAKICNkZWZpbmUgUkVHSVNURVJfVElNRU9VVAkJNTAwCiAjZGVmaW5lIFJFR0lTVEVSX1RJTUVPVVRfRklSTVdBUkUJMTAwMAogCisvKioKKyAqIFJFR0lTVEVSX1RJTUVPVVQxNiAtIERldGVybWluZSB0aGUgdGltZW91dCBmb3IgMTZiaXQgcmVnaXN0ZXIgYWNjZXNzCisgKiBAX19kYXRhbGVuOiBEYXRhIGxlbmd0aAorICovCisjZGVmaW5lIFJFR0lTVEVSX1RJTUVPVVQxNihfX2RhdGFsZW4pCVwKKwkoIFJFR0lTVEVSX1RJTUVPVVQgKiAoKF9fZGF0YWxlbikgLyBzaXplb2YodTE2KSkgKQorCisvKioKKyAqIFJFR0lTVEVSX1RJTUVPVVQzMiAtIERldGVybWluZSB0aGUgdGltZW91dCBmb3IgMzJiaXQgcmVnaXN0ZXIgYWNjZXNzCisgKiBAX19kYXRhbGVuOiBEYXRhIGxlbmd0aAorICovCisjZGVmaW5lIFJFR0lTVEVSX1RJTUVPVVQzMihfX2RhdGFsZW4pCVwKKwkoIFJFR0lTVEVSX1RJTUVPVVQgKiAoKF9fZGF0YWxlbikgLyBzaXplb2YodTMyKSkgKQorCiAvKgogICogQ2FjaGUgc2l6ZQogICovCkBAIC0xODUsMTMgKzIwNSwxMiBAQAogICoga21hbGxvYyBmb3IgY29ycmVjdCBoYW5kbGluZyBpbnNpZGUgdGhlIGtlcm5lbCBVU0IgbGF5ZXIuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMHVzYl9lZXByb21fcmVhZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCQlfX2xlMTYgKmVlcHJvbSwgY29uc3QgdTE2IGxlbmdodCkKKwkJCQkJX19sZTE2ICplZXByb20sIGNvbnN0IHUxNiBsZW5ndGgpCiB7Ci0JaW50IHRpbWVvdXQgPSBSRUdJU1RFUl9USU1FT1VUICogKGxlbmdodCAvIHNpemVvZih1MTYpKTsKLQogCXJldHVybiBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3QocnQyeDAwZGV2LCBVU0JfRUVQUk9NX1JFQUQsCiAJCQkJCVVTQl9WRU5ET1JfUkVRVUVTVF9JTiwgMCwgMCwKLQkJCQkJZWVwcm9tLCBsZW5naHQsIHRpbWVvdXQpOworCQkJCQllZXByb20sIGxlbmd0aCwKKwkJCQkJUkVHSVNURVJfVElNRU9VVDE2KGxlbmd0aCkpOwogfQogCiAvKgpAQCAtMTk5LDU1ICsyMTgsNTMgQEAKICAqLwogdm9pZCBydDJ4MDB1c2JfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIAotLyoKLSAqIFRYIGRhdGEgaGFuZGxlcnMuCisvKioKKyAqIHJ0MngwMHVzYl93cml0ZV90eF9kYXRhIC0gSW5pdGlhbGl6ZSBVUkIgZm9yIFRYIG9wZXJhdGlvbgorICogQGVudHJ5OiBUaGUgZW50cnkgd2hlcmUgdGhlIGZyYW1lIGlzIGxvY2F0ZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5pdGlhbGl6ZSB0aGUgVVJCIGFuZCBza2IgZGVzY3JpcHRvcgorICogdG8gcHJlcGFyZSB0aGUgZW50cnkgZm9yIHRoZSBhY3R1YWwgVFggb3BlcmF0aW9uLgogICovCi1pbnQgcnQyeDAwdXNiX3dyaXRlX3R4X2RhdGEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICBzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKTsKK2ludCBydDJ4MDB1c2Jfd3JpdGVfdHhfZGF0YShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KTsKIAogLyoqCi0gKiBzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2Jfcng6IFBlciBSWCBlbnRyeSBVU0Igc3BlY2lmaWMgaW5mb3JtYXRpb24KKyAqIHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYjogUGVyIGVudHJ5IFVTQiBzcGVjaWZpYyBpbmZvcm1hdGlvbgogICoKICAqIEB1cmI6IFVyYiBzdHJ1Y3R1cmUgdXNlZCBmb3IgZGV2aWNlIGNvbW11bmljYXRpb24uCiAgKi8KLXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9yeCB7CitzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgewogCXN0cnVjdCB1cmIgKnVyYjsKIH07CiAKIC8qKgotICogc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4OiBQZXIgVFggZW50cnkgVVNCIHNwZWNpZmljIGluZm9ybWF0aW9uCisgKiBzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuOiBQZXIgVFggZW50cnkgVVNCIHNwZWNpZmljIGluZm9ybWF0aW9uCiAgKgotICogQHVyYjogVXJiIHN0cnVjdHVyZSB1c2VkIGZvciBkZXZpY2UgY29tbXVuaWNhdGlvbi4KLSAqIEBjb250cm9sOiBtYWM4MDIxMSBjb250cm9sIHN0cnVjdHVyZSB1c2VkIHRvIHRyYW5zbWl0IGRhdGEuCi0gKi8KLXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eCB7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCi0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIGNvbnRyb2w7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eDogUGVyIFRYIGVudHJ5IFVTQiBzcGVjaWZpYyBpbmZvcm1hdGlvbgotICoKLSAqIFRoZSBmaXJzdCBzZWN0aW9uIHNob3VsZCBtYXRjaCAmc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4IGV4YWN0bHkuCisgKiBUaGUgZmlyc3Qgc2VjdGlvbiBzaG91bGQgbWF0Y2ggJnN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiBleGFjdGx5LgogICogcnQyNTAwdXNiIGNhbiB1c2UgdGhpcyBzdHJ1Y3R1cmUgdG8gc2VuZCBhIGd1YXJkaWFuIGJ5dGUgd2hlbiB3b3JraW5nCiAgKiB3aXRoIGJlYWNvbnMuCiAgKgogICogQHVyYjogVXJiIHN0cnVjdHVyZSB1c2VkIGZvciBkZXZpY2UgY29tbXVuaWNhdGlvbi4KLSAqIEBjb250cm9sOiBtYWM4MDIxMSBjb250cm9sIHN0cnVjdHVyZSB1c2VkIHRvIHRyYW5zbWl0IGRhdGEuCiAgKiBAZ3VhcmRpYW5fZGF0YTogU2V0IHRvIDAsIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGd1YXJkaWFuIGRhdGEuCiAgKiBAZ3VhcmRpYW5fdXJiOiBVcmIgc3RydWN0dXJlIHVzZWQgdG8gc2VuZCB0aGUgZ3VhcmRpYW4gZGF0YS4KICAqLwogc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiB7CiAJc3RydWN0IHVyYiAqdXJiOwogCi0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIGNvbnRyb2w7Ci0KIAl1bnNpZ25lZCBpbnQgZ3VhcmRpYW5fZGF0YTsKIAlzdHJ1Y3QgdXJiICpndWFyZGlhbl91cmI7CiB9OwogCisvKioKKyAqIHJ0MngwMHVzYl9raWNrX3R4X3F1ZXVlIC0gS2ljayBkYXRhIHF1ZXVlCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2RldgorICogQHFpZDogRGF0YSBxdWV1ZSB0byBraWNrCisgKgorICogVGhpcyB3aWxsIHdhbGsgdGhyb3VnaCBhbGwgZW50cmllcyBvZiB0aGUgcXVldWUgYW5kIHB1c2ggYWxsIHBlbmRpbmcKKyAqIGZyYW1lcyB0byB0aGUgaGFyZHdhcmUgYXMgYSBzaW5nbGUgYnVyc3QuCisgKi8KK3ZvaWQgcnQyeDAwdXNiX2tpY2tfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpOworCiAvKgogICogRGV2aWNlIGluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwppbmRleCA1ODBmOTBiLi5mN2MxZjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKQEAgLTMzMCw2ICszMzAsMTcgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgdm9pZCBydDYxcGNpX2luaXRfbGVkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgIHN0cnVjdCBydDJ4MDBfbGVkICpsZWQsCisJCQkgICAgIGVudW0gbGVkX3R5cGUgdHlwZSkKK3sKKwlsZWQtPnJ0MngwMGRldiA9IHJ0MngwMGRldjsKKwlsZWQtPnR5cGUgPSB0eXBlOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IHJ0NjFwY2lfYnJpZ2h0bmVzc19zZXQ7CisJbGVkLT5sZWRfZGV2LmJsaW5rX3NldCA9IHJ0NjFwY2lfYmxpbmtfc2V0OworCWxlZC0+ZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7Cit9CiAjZW5kaWYgLyogQ09ORklHX1JUNjFQQ0lfTEVEUyAqLwogCiAvKgpAQCAtMTAxOCw0OSArMTAyOSwzNSBAQAogc3RhdGljIHZvaWQgcnQ2MXBjaV9pbml0X3J4ZW50cnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKIHsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcnggKnByaXZfcnggPSBlbnRyeS0+cHJpdl9kYXRhOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOwogCXUzMiB3b3JkOwogCi0JcnQyeDAwX2Rlc2NfcmVhZChwcml2X3J4LT5kZXNjLCA1LCAmd29yZCk7CisJcnQyeDAwX2Rlc2NfcmVhZChlbnRyeV9wcml2LT5kZXNjLCA1LCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBSWERfVzVfQlVGRkVSX1BIWVNJQ0FMX0FERFJFU1MsCi0JCQkgICBwcml2X3J4LT5kYXRhX2RtYSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl9yeC0+ZGVzYywgNSwgd29yZCk7CisJCQkgICBza2JkZXNjLT5za2JfZG1hKTsKKwlydDJ4MDBfZGVzY193cml0ZShlbnRyeV9wcml2LT5kZXNjLCA1LCB3b3JkKTsKIAotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cwX09XTkVSX05JQywgMSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl9yeC0+ZGVzYywgMCwgd29yZCk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUoZW50cnlfcHJpdi0+ZGVzYywgMCwgd29yZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0NjFwY2lfaW5pdF90eGVudHJ5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJIHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCiB7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4ID0gZW50cnktPnByaXZfZGF0YTsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwogCXUzMiB3b3JkOwogCi0JcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCAxLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQlVGRkVSX0NPVU5ULCAxKTsKLQlydDJ4MDBfZGVzY193cml0ZShwcml2X3R4LT5kZXNjLCAxLCB3b3JkKTsKLQotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgNSwgJndvcmQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1c1X1BJRF9UWVBFLCBlbnRyeS0+cXVldWUtPnFpZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzVfUElEX1NVQlRZUEUsIGVudHJ5LT5lbnRyeV9pZHgpOwotCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfdHgtPmRlc2MsIDUsIHdvcmQpOwotCi0JcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCA2LCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzZfQlVGRkVSX1BIWVNJQ0FMX0FERFJFU1MsCi0JCQkgICBwcml2X3R4LT5kYXRhX2RtYSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgNiwgd29yZCk7Ci0KLQlydDJ4MDBfZGVzY19yZWFkKHByaXZfdHgtPmRlc2MsIDAsICZ3b3JkKTsKKwlydDJ4MDBfZGVzY19yZWFkKGVudHJ5X3ByaXYtPmRlc2MsIDAsICZ3b3JkKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9WQUxJRCwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT1dORVJfTklDLCAwKTsKLQlydDJ4MDBfZGVzY193cml0ZShwcml2X3R4LT5kZXNjLCAwLCB3b3JkKTsKKwlydDJ4MDBfZGVzY193cml0ZShlbnRyeV9wcml2LT5kZXNjLCAwLCB3b3JkKTsKIH0KIAogc3RhdGljIGludCBydDYxcGNpX2luaXRfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4ICpwcml2X3J4OwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXY7CiAJdTMyIHJlZzsKIAogCS8qCkBAIC0xMDgyLDI4ICsxMDc5LDI4IEBACiAJCQkgICBydDJ4MDBkZXYtPnR4WzBdLmRlc2Nfc2l6ZSAvIDQpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1JJTkdfQ1NSMSwgcmVnKTsKIAotCXByaXZfdHggPSBydDJ4MDBkZXYtPnR4WzBdLmVudHJpZXNbMF0ucHJpdl9kYXRhOworCWVudHJ5X3ByaXYgPSBydDJ4MDBkZXYtPnR4WzBdLmVudHJpZXNbMF0ucHJpdl9kYXRhOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQUMwX0JBU0VfQ1NSLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQUMwX0JBU0VfQ1NSX1JJTkdfUkVHSVNURVIsCi0JCQkgICBwcml2X3R4LT5kZXNjX2RtYSk7CisJCQkgICBlbnRyeV9wcml2LT5kZXNjX2RtYSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUMwX0JBU0VfQ1NSLCByZWcpOwogCi0JcHJpdl90eCA9IHJ0MngwMGRldi0+dHhbMV0uZW50cmllc1swXS5wcml2X2RhdGE7CisJZW50cnlfcHJpdiA9IHJ0MngwMGRldi0+dHhbMV0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQzFfQkFTRV9DU1IsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBBQzFfQkFTRV9DU1JfUklOR19SRUdJU1RFUiwKLQkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKKwkJCSAgIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQzFfQkFTRV9DU1IsIHJlZyk7CiAKLQlwcml2X3R4ID0gcnQyeDAwZGV2LT50eFsyXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKKwllbnRyeV9wcml2ID0gcnQyeDAwZGV2LT50eFsyXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDMl9CQVNFX0NTUiwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEFDMl9CQVNFX0NTUl9SSU5HX1JFR0lTVEVSLAotCQkJICAgcHJpdl90eC0+ZGVzY19kbWEpOworCQkJICAgZW50cnlfcHJpdi0+ZGVzY19kbWEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFDMl9CQVNFX0NTUiwgcmVnKTsKIAotCXByaXZfdHggPSBydDJ4MDBkZXYtPnR4WzNdLmVudHJpZXNbMF0ucHJpdl9kYXRhOworCWVudHJ5X3ByaXYgPSBydDJ4MDBkZXYtPnR4WzNdLmVudHJpZXNbMF0ucHJpdl9kYXRhOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQUMzX0JBU0VfQ1NSLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQUMzX0JBU0VfQ1NSX1JJTkdfUkVHSVNURVIsCi0JCQkgICBwcml2X3R4LT5kZXNjX2RtYSk7CisJCQkgICBlbnRyeV9wcml2LT5kZXNjX2RtYSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUMzX0JBU0VfQ1NSLCByZWcpOwogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWF9SSU5HX0NTUiwgJnJlZyk7CkBAIC0xMTEzLDEwICsxMTEwLDEwIEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYX1JJTkdfQ1NSX1JYRF9XUklURUJBQ0tfU0laRSwgNCk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhfUklOR19DU1IsIHJlZyk7CiAKLQlwcml2X3J4ID0gcnQyeDAwZGV2LT5yeC0+ZW50cmllc1swXS5wcml2X2RhdGE7CisJZW50cnlfcHJpdiA9IHJ0MngwMGRldi0+cngtPmVudHJpZXNbMF0ucHJpdl9kYXRhOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUlhfQkFTRV9DU1IsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWF9CQVNFX0NTUl9SSU5HX1JFR0lTVEVSLAotCQkJICAgcHJpdl9yeC0+ZGVzY19kbWEpOworCQkJICAgZW50cnlfcHJpdi0+ZGVzY19kbWEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYX0JBU0VfQ1NSLCByZWcpOwogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9ETUFfRFNUX0NTUiwgJnJlZyk7CkBAIC0xMjk0LDYgKzEyOTEsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBydDYxcGNpX3dhaXRfYmJwX3JlYWR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisJdTggdmFsdWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7CisJCXJ0NjFwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAwLCAmdmFsdWUpOworCQlpZiAoKHZhbHVlICE9IDB4ZmYpICYmICh2YWx1ZSAhPSAweDAwKSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoUkVHSVNURVJfQlVTWV9ERUxBWSk7CisJfQorCisJRVJST1IocnQyeDAwZGV2LCAiQkJQIHJlZ2lzdGVyIGFjY2VzcyBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJcmV0dXJuIC1FQUNDRVM7Cit9CisKIHN0YXRpYyBpbnQgcnQ2MXBjaV9pbml0X2JicChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTMwMSwxOCArMTMxNCw5IEBACiAJdTggcmVnX2lkOwogCXU4IHZhbHVlOwogCi0JZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewotCQlydDYxcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMCwgJnZhbHVlKTsKLQkJaWYgKCh2YWx1ZSAhPSAweGZmKSAmJiAodmFsdWUgIT0gMHgwMCkpCi0JCQlnb3RvIGNvbnRpbnVlX2Nzcl9pbml0OwotCQlOT1RJQ0UocnQyeDAwZGV2LCAiV2FpdGluZyBmb3IgQkJQIHJlZ2lzdGVyLlxuIik7Ci0JCXVkZWxheShSRUdJU1RFUl9CVVNZX0RFTEFZKTsKLQl9CisJaWYgKHVubGlrZWx5KHJ0NjFwY2lfd2FpdF9iYnBfcmVhZHkocnQyeDAwZGV2KSkpCisJCXJldHVybiAtRUFDQ0VTOwogCi0JRVJST1IocnQyeDAwZGV2LCAiQkJQIHJlZ2lzdGVyIGFjY2VzcyBmYWlsZWQsIGFib3J0aW5nLlxuIik7Ci0JcmV0dXJuIC1FQUNDRVM7Ci0KLWNvbnRpbnVlX2Nzcl9pbml0OgogCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMywgMHgwMCk7CiAJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNSwgMHgzMCk7CiAJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAyMSwgMHhjOCk7CkBAIC0xMzYxLDcgKzEzNjUsOCBAQAogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjAsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRElTQUJMRV9SWCwKLQkJCSAgIHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRik7CisJCQkgICAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT0ZGKSB8fAorCQkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRl9MSU5LKSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IwLCByZWcpOwogfQogCkBAIC0xNDEzLDE3ICsxNDE4LDEwIEBACiAJLyoKIAkgKiBJbml0aWFsaXplIGFsbCByZWdpc3RlcnMuCiAJICovCi0JaWYgKHJ0NjFwY2lfaW5pdF9xdWV1ZXMocnQyeDAwZGV2KSB8fAotCSAgICBydDYxcGNpX2luaXRfcmVnaXN0ZXJzKHJ0MngwMGRldikgfHwKLQkgICAgcnQ2MXBjaV9pbml0X2JicChydDJ4MDBkZXYpKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIlJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCWlmICh1bmxpa2VseShydDYxcGNpX2luaXRfcXVldWVzKHJ0MngwMGRldikgfHwKKwkJICAgICBydDYxcGNpX2luaXRfcmVnaXN0ZXJzKHJ0MngwMGRldikgfHwKKwkJICAgICBydDYxcGNpX2luaXRfYmJwKHJ0MngwMGRldikpKQogCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKgotCSAqIEVuYWJsZSBpbnRlcnJ1cHRzLgotCSAqLwotCXJ0NjFwY2lfdG9nZ2xlX2lycShydDJ4MDBkZXYsIFNUQVRFX1JBRElPX0lSUV9PTik7CiAKIAkvKgogCSAqIEVuYWJsZSBSWC4KQEAgLTE0NTUsMTEgKzE0NTMsNiBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzIsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzMsIDEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCByZWcpOwotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMuCi0JICovCi0JcnQ2MXBjaV90b2dnbGVfaXJxKHJ0MngwMGRldiwgU1RBVEVfUkFESU9fSVJRX09GRik7CiB9CiAKIHN0YXRpYyBpbnQgcnQ2MXBjaV9zZXRfc3RhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgZW51bSBkZXZfc3RhdGUgc3RhdGUpCkBAIC0xNDY3LDcgKzE0NjAsNiBAQAogCXUzMiByZWc7CiAJdW5zaWduZWQgaW50IGk7CiAJY2hhciBwdXRfdG9fc2xlZXA7Ci0JY2hhciBjdXJyZW50X3N0YXRlOwogCiAJcHV0X3RvX3NsZWVwID0gKHN0YXRlICE9IFNUQVRFX0FXQUtFKTsKIApAQCAtMTQ4MywxNiArMTQ3NSwxMiBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKIAkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTIsICZyZWcpOwotCQljdXJyZW50X3N0YXRlID0KLQkJICAgIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IxMl9CQlBfQ1VSUkVOVF9TVEFURSk7Ci0JCWlmIChjdXJyZW50X3N0YXRlID09ICFwdXRfdG9fc2xlZXApCisJCXN0YXRlID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjEyX0JCUF9DVVJSRU5UX1NUQVRFKTsKKwkJaWYgKHN0YXRlID09ICFwdXRfdG9fc2xlZXApCiAJCQlyZXR1cm4gMDsKIAkJbXNsZWVwKDEwKTsKIAl9CiAKLQlOT1RJQ0UocnQyeDAwZGV2LCAiRGV2aWNlIGZhaWxlZCB0byBlbnRlciBzdGF0ZSAlZCwgIgotCSAgICAgICAiY3VycmVudCBkZXZpY2Ugc3RhdGUgJWQuXG4iLCAhcHV0X3RvX3NsZWVwLCBjdXJyZW50X3N0YXRlKTsKLQogCXJldHVybiAtRUJVU1k7CiB9CiAKQEAgLTE1MTAsMTEgKzE0OTgsMTMgQEAKIAkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19SWF9PTjoKIAljYXNlIFNUQVRFX1JBRElPX1JYX09OX0xJTks6Ci0JCXJ0NjFwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT04pOwotCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX1JYX09GRjoKIAljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgotCQlydDYxcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CisJCXJ0NjFwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOworCQlicmVhazsKKwljYXNlIFNUQVRFX1JBRElPX0lSUV9PTjoKKwljYXNlIFNUQVRFX1JBRElPX0lSUV9PRkY6CisJCXJ0NjFwY2lfdG9nZ2xlX2lycShydDJ4MDBkZXYsIHN0YXRlKTsKIAkJYnJlYWs7CiAJY2FzZSBTVEFURV9ERUVQX1NMRUVQOgogCWNhc2UgU1RBVEVfU0xFRVA6CkBAIC0xNTI3LDYgKzE1MTcsMTAgQEAKIAkJYnJlYWs7CiAJfQogCisJaWYgKHVubGlrZWx5KHJldHZhbCkpCisJCUVSUk9SKHJ0MngwMGRldiwgIkRldmljZSBmYWlsZWQgdG8gZW50ZXIgc3RhdGUgJWQgKCVkKS5cbiIsCisJCSAgICAgIHN0YXRlLCByZXR2YWwpOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTUzNSw4ICsxNTI5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcnQ2MXBjaV93cml0ZV90eF9kZXNjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYywKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorCQkJCSAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCiB7CiAJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7CiAJX19sZTMyICp0eGQgPSBza2JkZXNjLT5kZXNjOwpAQCAtMTU1Miw2ICsxNTQ1LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9DV01BWCwgdHhkZXNjLT5jd19tYXgpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0lWX09GRlNFVCwgSUVFRTgwMjExX0hFQURFUik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSFdfU0VRVUVOQ0UsIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0JVRkZFUl9DT1VOVCwgMSk7CiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCAxLCB3b3JkKTsKIAogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAyLCAmd29yZCk7CkBAIC0xNTYyLDE0ICsxNTU2LDIyIEBACiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCAyLCB3b3JkKTsKIAogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCA1LCAmd29yZCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzVfUElEX1RZUEUsIHNrYmRlc2MtPmVudHJ5LT5xdWV1ZS0+cWlkKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XNV9QSURfU1VCVFlQRSwKKwkJCSAgIHNrYmRlc2MtPmVudHJ5LT5lbnRyeV9pZHgpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1c1X1RYX1BPV0VSLAogCQkJICAgVFhQT1dFUl9UT19ERVYocnQyeDAwZGV2LT50eF9wb3dlcikpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1c1X1dBSVRJTkdfRE1BX0RPTkVfSU5ULCAxKTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDUsIHdvcmQpOwogCisJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDYsICZ3b3JkKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XNl9CVUZGRVJfUEhZU0lDQUxfQUREUkVTUywKKwkJCSAgIHNrYmRlc2MtPnNrYl9kbWEpOworCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgNiwgd29yZCk7CisKIAlpZiAoc2tiZGVzYy0+ZGVzY19sZW4gPiBUWElORk9fU0laRSkgewogCQlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMTEsICZ3b3JkKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzExX0JVRkZFUl9MRU5HVEgwLCBza2JkZXNjLT5kYXRhX2xlbik7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxMV9CVUZGRVJfTEVOR1RIMCwgc2tiLT5sZW4pOwogCQlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDExLCB3b3JkKTsKIAl9CiAKQEAgLTE1ODYsMTAgKzE1ODgsOSBAQAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLAotCQkJICAgISEoY29udHJvbC0+ZmxhZ3MgJgotCQkJICAgICAgSUVFRTgwMjExX1RYQ1RMX0xPTkdfUkVUUllfTElNSVQpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVRSWV9NT0RFLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RLSVBfTUlDLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9EQVRBQllURV9DT1VOVCwgc2tiZGVzYy0+ZGF0YV9sZW4pOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0RBVEFCWVRFX0NPVU5ULCBza2ItPmxlbik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQlVSU1QsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfQlVSU1QsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQ0lQSEVSX0FMRywgQ0lQSEVSX05PTkUpOwpAQCAtMTU5OSwxMiArMTYwMCw0NyBAQAogLyoKICAqIFRYIGRhdGEgaW5pdGlhbGl6YXRpb24KICAqLworc3RhdGljIHZvaWQgcnQ2MXBjaV93cml0ZV9iZWFjb24oc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOworCXVuc2lnbmVkIGludCBiZWFjb25fYmFzZTsKKwl1MzIgcmVnOworCisJLyoKKwkgKiBEaXNhYmxlIGJlYWNvbmluZyB3aGlsZSB3ZSBhcmUgcmVsb2FkaW5nIHRoZSBiZWFjb24gZGF0YSwKKwkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgorCSAqLworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RTRl9USUNLSU5HLCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RCVFRfRU5BQkxFLCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X0JFQUNPTl9HRU4sIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgcmVnKTsKKworCS8qCisJICogV3JpdGUgZW50aXJlIGJlYWNvbiB3aXRoIGRlc2NyaXB0b3IgdG8gcmVnaXN0ZXIuCisJICovCisJYmVhY29uX2Jhc2UgPSBIV19CRUFDT05fT0ZGU0VUKGVudHJ5LT5lbnRyeV9pZHgpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwKKwkJCQkgICAgICBiZWFjb25fYmFzZSwKKwkJCQkgICAgICBza2JkZXNjLT5kZXNjLCBza2JkZXNjLT5kZXNjX2xlbik7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LAorCQkJCSAgICAgIGJlYWNvbl9iYXNlICsgc2tiZGVzYy0+ZGVzY19sZW4sCisJCQkJICAgICAgZW50cnktPnNrYi0+ZGF0YSwgZW50cnktPnNrYi0+bGVuKTsKKworCS8qCisJICogQ2xlYW4gdXAgYmVhY29uIHNrYi4KKwkgKi8KKwlkZXZfa2ZyZWVfc2tiX2FueShlbnRyeS0+c2tiKTsKKwllbnRyeS0+c2tiID0gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgcnQ2MXBjaV9raWNrX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICBjb25zdCB1bnNpZ25lZCBpbnQgcXVldWUpCisJCQkJICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHF1ZXVlKQogewogCXUzMiByZWc7CiAKLQlpZiAocXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04pIHsKKwlpZiAocXVldWUgPT0gUUlEX0JFQUNPTikgewogCQkvKgogCQkgKiBGb3IgV2ktRmkgZmFpbHkgZ2VuZXJhdGVkIGJlYWNvbnMgYmV0d2VlbiBwYXJ0aWNpcGF0aW5nCiAJCSAqIHN0YXRpb25zLiBTZXQgVEJUVCBwaGFzZSBhZGFwdGl2ZSBhZGp1c3RtZW50IHN0ZXAgdG8gOHVzLgpAQCAtMTYyMiwxNCArMTY1OCwxMCBAQAogCX0KIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9LSUNLX1RYX0FDMCwKLQkJCSAgIChxdWV1ZSA9PSBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTApKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfS0lDS19UWF9BQzEsCi0JCQkgICAocXVldWUgPT0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEExKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0tJQ0tfVFhfQUMyLAotCQkJICAgKHF1ZXVlID09IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMikpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9LSUNLX1RYX0FDMywKLQkJCSAgIChxdWV1ZSA9PSBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTMpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfS0lDS19UWF9BQzAsIChxdWV1ZSA9PSBRSURfQUNfQkUpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfS0lDS19UWF9BQzEsIChxdWV1ZSA9PSBRSURfQUNfQkspKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfS0lDS19UWF9BQzIsIChxdWV1ZSA9PSBRSURfQUNfVkkpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfS0lDS19UWF9BQzMsIChxdWV1ZSA9PSBRSURfQUNfVk8pKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgcmVnKTsKIH0KIApAQCAtMTY4MCwxNCArMTcxMiwxMyBAQAogc3RhdGljIHZvaWQgcnQ2MXBjaV9maWxsX3J4ZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkJICAgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcnggKnByaXZfcnggPSBlbnRyeS0+cHJpdl9kYXRhOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7CiAJdTMyIHdvcmQwOwogCXUzMiB3b3JkMTsKIAotCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQwKTsKLQlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDEsICZ3b3JkMSk7CisJcnQyeDAwX2Rlc2NfcmVhZChlbnRyeV9wcml2LT5kZXNjLCAwLCAmd29yZDApOworCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMSwgJndvcmQxKTsKIAotCXJ4ZGVzYy0+ZmxhZ3MgPSAwOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9DUkNfRVJST1IpKQogCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CiAKQEAgLTE3MDEsNyArMTczMiw2IEBACiAJcnhkZXNjLT5yc3NpID0gcnQ2MXBjaV9hZ2NfdG9fcnNzaShlbnRyeS0+cXVldWUtPnJ0MngwMGRldiwgd29yZDEpOwogCXJ4ZGVzYy0+c2l6ZSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX0RBVEFCWVRFX0NPVU5UKTsKIAotCXJ4ZGVzYy0+ZGV2X2ZsYWdzID0gMDsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfT0ZETSkpCiAJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9TSUdOQUxfUExDUDsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfTVlfQlNTKSkKQEAgLTE3MTYsNyArMTc0Niw3IEBACiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnk7CiAJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeV9kb25lOwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXY7CiAJc3RydWN0IHR4ZG9uZV9lbnRyeV9kZXNjIHR4ZGVzYzsKIAl1MzIgd29yZDsKIAl1MzIgcmVnOwpAQCAtMTc2MSw4ICsxNzkxLDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWVudHJ5ID0gJnF1ZXVlLT5lbnRyaWVzW2luZGV4XTsKLQkJcHJpdl90eCA9IGVudHJ5LT5wcml2X2RhdGE7Ci0JCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMCwgJndvcmQpOworCQllbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKKwkJcnQyeDAwX2Rlc2NfcmVhZChlbnRyeV9wcml2LT5kZXNjLCAwLCAmd29yZCk7CiAKIAkJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfT1dORVJfTklDKSB8fAogCQkgICAgIXJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfVkFMSUQpKQpAQCAtMTc3NywyMCArMTgwNywzMSBAQAogCQkJCSJUWCBzdGF0dXMgcmVwb3J0IG1pc3NlZCBmb3IgZW50cnkgJWRcbiIsCiAJCQkJZW50cnlfZG9uZS0+ZW50cnlfaWR4KTsKIAotCQkJdHhkZXNjLnN0YXR1cyA9IFRYX0ZBSUxfT1RIRVI7CisJCQl0eGRlc2MuZmxhZ3MgPSAwOworCQkJX19zZXRfYml0KFRYRE9ORV9VTktOT1dOLCAmdHhkZXNjLmZsYWdzKTsKIAkJCXR4ZGVzYy5yZXRyeSA9IDA7CiAKLQkJCXJ0MngwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBlbnRyeV9kb25lLCAmdHhkZXNjKTsKKwkJCXJ0MngwMGxpYl90eGRvbmUoZW50cnlfZG9uZSwgJnR4ZGVzYyk7CiAJCQllbnRyeV9kb25lID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUpOwogCQl9CiAKIAkJLyoKIAkJICogT2J0YWluIHRoZSBzdGF0dXMgYWJvdXQgdGhpcyBwYWNrZXQuCiAJCSAqLwotCQl0eGRlc2Muc3RhdHVzID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgU1RBX0NTUjRfVFhfUkVTVUxUKTsKKwkJdHhkZXNjLmZsYWdzID0gMDsKKwkJc3dpdGNoIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSNF9UWF9SRVNVTFQpKSB7CisJCWNhc2UgMDogLyogU3VjY2VzcywgbWF5YmUgd2l0aCByZXRyeSAqLworCQkJX19zZXRfYml0KFRYRE9ORV9TVUNDRVNTLCAmdHhkZXNjLmZsYWdzKTsKKwkJCWJyZWFrOworCQljYXNlIDY6IC8qIEZhaWx1cmUsIGV4Y2Vzc2l2ZSByZXRyaWVzICovCisJCQlfX3NldF9iaXQoVFhET05FX0VYQ0VTU0lWRV9SRVRSWSwgJnR4ZGVzYy5mbGFncyk7CisJCQkvKiBEb24ndCBicmVhaywgdGhpcyBpcyBhIGZhaWxlZCBmcmFtZSEgKi8KKwkJZGVmYXVsdDogLyogRmFpbHVyZSAqLworCQkJX19zZXRfYml0KFRYRE9ORV9GQUlMVVJFLCAmdHhkZXNjLmZsYWdzKTsKKwkJfQogCQl0eGRlc2MucmV0cnkgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSNF9SRVRSWV9DT1VOVCk7CiAKLQkJcnQyeDAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIGVudHJ5LCAmdHhkZXNjKTsKKwkJcnQyeDAwbGliX3R4ZG9uZShlbnRyeSwgJnR4ZGVzYyk7CiAJfQogfQogCkBAIC0xOTc2LDcgKzIwMTcsNyBAQAogCSAqIFRvIGRldGVybWluZSB0aGUgUlQgY2hpcCB3ZSBoYXZlIHRvIHJlYWQgdGhlCiAJICogUENJIGhlYWRlciBvZiB0aGUgZGV2aWNlLgogCSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJ0MngwMGRldl9wY2kocnQyeDAwZGV2KSwKKwlwY2lfcmVhZF9jb25maWdfd29yZCh0b19wY2lfZGV2KHJ0MngwMGRldi0+ZGV2KSwKIAkJCSAgICAgUENJX0NPTkZJR19IRUFERVJfREVWSUNFLCAmZGV2aWNlKTsKIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1JGX1RZUEUpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjAsICZyZWcpOwpAQCAtMjA3OCwzMSArMjExOSwxMSBAQAogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9MRUQsICZlZXByb20pOwogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0xFRF9MRURfTU9ERSk7CiAKLQlydDJ4MDBkZXYtPmxlZF9yYWRpby5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7Ci0JcnQyeDAwZGV2LT5sZWRfcmFkaW8udHlwZSA9IExFRF9UWVBFX1JBRElPOwotCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQotCSAgICBydDYxcGNpX2JyaWdodG5lc3Nfc2V0OwotCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYmxpbmtfc2V0ID0KLQkgICAgcnQ2MXBjaV9ibGlua19zZXQ7Ci0JcnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7Ci0KLQlydDJ4MDBkZXYtPmxlZF9hc3NvYy5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7Ci0JcnQyeDAwZGV2LT5sZWRfYXNzb2MudHlwZSA9IExFRF9UWVBFX0FTU09DOwotCXJ0MngwMGRldi0+bGVkX2Fzc29jLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQotCSAgICBydDYxcGNpX2JyaWdodG5lc3Nfc2V0OwotCXJ0MngwMGRldi0+bGVkX2Fzc29jLmxlZF9kZXYuYmxpbmtfc2V0ID0KLQkgICAgcnQ2MXBjaV9ibGlua19zZXQ7Ci0JcnQyeDAwZGV2LT5sZWRfYXNzb2MuZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7Ci0KLQlpZiAodmFsdWUgPT0gTEVEX01PREVfU0lHTkFMX1NUUkVOR1RIKSB7Ci0JCXJ0MngwMGRldi0+bGVkX3F1YWwucnQyeDAwZGV2ID0gcnQyeDAwZGV2OwotCQlydDJ4MDBkZXYtPmxlZF9xdWFsLnR5cGUgPSBMRURfVFlQRV9RVUFMSVRZOwotCQlydDJ4MDBkZXYtPmxlZF9xdWFsLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQotCQkgICAgcnQ2MXBjaV9icmlnaHRuZXNzX3NldDsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC5sZWRfZGV2LmJsaW5rX3NldCA9Ci0JCSAgICBydDYxcGNpX2JsaW5rX3NldDsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC5mbGFncyA9IExFRF9JTklUSUFMSVpFRDsKLQl9CisJcnQ2MXBjaV9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9yYWRpbywgTEVEX1RZUEVfUkFESU8pOworCXJ0NjFwY2lfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfYXNzb2MsIExFRF9UWVBFX0FTU09DKTsKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfU0lHTkFMX1NUUkVOR1RIKQorCQlydDYxcGNpX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3F1YWwsCisJCQkJIExFRF9UWVBFX1FVQUxJVFkpOwogCiAJcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLCBNQ1VfTEVEQ1NfTEVEX01PREUsIHZhbHVlKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX21jdV9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9HUElPXzAsCkBAIC0yMjU4LDEzICsyMjc5LDExIEBACiAJICovCiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPQogCSAgICBJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFIHwKLQkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORzsKKwkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOwogCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gMDsKLQlydDJ4MDBkZXYtPmh3LT5tYXhfc2lnbmFsID0gTUFYX1NJR05BTDsKLQlydDJ4MDBkZXYtPmh3LT5tYXhfcnNzaSA9IE1BWF9SWF9TU0k7Ci0JcnQyeDAwZGV2LT5ody0+cXVldWVzID0gNDsKIAotCVNFVF9JRUVFODAyMTFfREVWKHJ0MngwMGRldi0+aHcsICZydDJ4MDBkZXZfcGNpKHJ0MngwMGRldiktPmRldik7CisJU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgcnQyeDAwZGV2LT5kZXYpOwogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHJ0MngwMGRldi0+aHcsCiAJCQkJcnQyeDAwX2VlcHJvbV9hZGRyKHJ0MngwMGRldiwKIAkJCQkJCSAgIEVFUFJPTV9NQUNfQUREUl8wKSk7CkBAIC0yMzI3LDkgKzIzNDYsMTAgQEAKIAlydDYxcGNpX3Byb2JlX2h3X21vZGUocnQyeDAwZGV2KTsKIAogCS8qCi0JICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgZmlybXdhcmUuCisJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgZmlybXdhcmUgYW5kIERNQSBtYXBwZWQgc2ticy4KIAkgKi8KIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfRklSTVdBUkUsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC0yMzcwLDY3ICsyMzkwLDYgQEAKIAlyZXR1cm4gdHNmOwogfQogCi1zdGF0aWMgaW50IHJ0NjFwY2lfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb250cm9sLT52aWYpOwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7Ci0JdW5zaWduZWQgaW50IGJlYWNvbl9iYXNlOwotCXUzMiByZWc7Ci0KLQlpZiAodW5saWtlbHkoIWludGYtPmJlYWNvbikpCi0JCXJldHVybiAtRU5PQlVGUzsKLQotCXByaXZfdHggPSBpbnRmLT5iZWFjb24tPnByaXZfZGF0YTsKLQltZW1zZXQocHJpdl90eC0+ZGVzYywgMCwgaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplKTsKLQotCS8qCi0JICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgotCSAqLwotCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKLQltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7Ci0Jc2tiZGVzYy0+ZmxhZ3MgfD0gRlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEOwotCXNrYmRlc2MtPmRhdGEgPSBza2ItPmRhdGE7Ci0Jc2tiZGVzYy0+ZGF0YV9sZW4gPSBza2ItPmxlbjsKLQlza2JkZXNjLT5kZXNjID0gcHJpdl90eC0+ZGVzYzsKLQlza2JkZXNjLT5kZXNjX2xlbiA9IGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZTsKLQlza2JkZXNjLT5lbnRyeSA9IGludGYtPmJlYWNvbjsKLQotCS8qCi0JICogRGlzYWJsZSBiZWFjb25pbmcgd2hpbGUgd2UgYXJlIHJlbG9hZGluZyB0aGUgYmVhY29uIGRhdGEsCi0JICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UU0ZfVElDS0lORywgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UQlRUX0VOQUJMRSwgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9CRUFDT05fR0VOLCAwKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7Ci0KLQkvKgotCSAqIG1hYzgwMjExIGRvZXNuJ3QgcHJvdmlkZSB0aGUgY29udHJvbC0+cXVldWUgdmFyaWFibGUKLQkgKiBmb3IgYmVhY29ucy4gU2V0IG91ciBvd24gcXVldWUgaWRlbnRpZmljYXRpb24gc28KLQkgKiBpdCBjYW4gYmUgdXNlZCBkdXJpbmcgZGVzY3JpcHRvciBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQljb250cm9sLT5xdWV1ZSA9IFJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OOwotCXJ0MngwMGxpYl93cml0ZV90eF9kZXNjKHJ0MngwMGRldiwgc2tiLCBjb250cm9sKTsKLQotCS8qCi0JICogV3JpdGUgZW50aXJlIGJlYWNvbiB3aXRoIGRlc2NyaXB0b3IgdG8gcmVnaXN0ZXIsCi0JICogYW5kIGtpY2sgdGhlIGJlYWNvbiBnZW5lcmF0b3IuCi0JICovCi0JYmVhY29uX2Jhc2UgPSBIV19CRUFDT05fT0ZGU0VUKGludGYtPmJlYWNvbi0+ZW50cnlfaWR4KTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIGJlYWNvbl9iYXNlLAotCQkJCSAgICAgIHNrYmRlc2MtPmRlc2MsIHNrYmRlc2MtPmRlc2NfbGVuKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsCi0JCQkJICAgICAgYmVhY29uX2Jhc2UgKyBza2JkZXNjLT5kZXNjX2xlbiwKLQkJCQkgICAgICBza2JkZXNjLT5kYXRhLCBza2JkZXNjLT5kYXRhX2xlbik7Ci0JcnQ2MXBjaV9raWNrX3R4X3F1ZXVlKHJ0MngwMGRldiwgY29udHJvbC0+cXVldWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBydDYxcGNpX21hYzgwMjExX29wcyA9IHsKIAkudHgJCQk9IHJ0MngwMG1hY190eCwKIAkuc3RhcnQJCQk9IHJ0MngwMG1hY19zdGFydCwKQEAgLTI0NDYsNyArMjQwNSw2IEBACiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0NjFwY2lfZ2V0X3RzZiwKLQkuYmVhY29uX3VwZGF0ZQkJPSBydDYxcGNpX2JlYWNvbl91cGRhdGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQ2MXBjaV9ydDJ4MDBfb3BzID0gewpAQCAtMjQ2Niw2ICsyNDI0LDcgQEAKIAkubGlua190dW5lcgkJPSBydDYxcGNpX2xpbmtfdHVuZXIsCiAJLndyaXRlX3R4X2Rlc2MJCT0gcnQ2MXBjaV93cml0ZV90eF9kZXNjLAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAorCS53cml0ZV9iZWFjb24JCT0gcnQ2MXBjaV93cml0ZV9iZWFjb24sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQ2MXBjaV9raWNrX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDYxcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfZmlsdGVyCQk9IHJ0NjFwY2lfY29uZmlnX2ZpbHRlciwKQEAgLTI0NzgsMjEgKzI0MzcsMjEgQEAKIAkuZW50cnlfbnVtCQk9IFJYX0VOVFJJRVMsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBSWERfREVTQ19TSVpFLAotCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCksCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0NjFwY2lfcXVldWVfdHggPSB7CiAJLmVudHJ5X251bQkJPSBUWF9FTlRSSUVTLAogCS5kYXRhX3NpemUJCT0gREFUQV9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKLQkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHgpLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDYxcGNpX3F1ZXVlX2JjbiA9IHsKIAkuZW50cnlfbnVtCQk9IDQgKiBCRUFDT05fRU5UUklFUywKIAkuZGF0YV9zaXplCQk9IDAsIC8qIE5vIERNQSByZXF1aXJlZCBmb3IgYmVhY29ucyAqLwogCS5kZXNjX3NpemUJCT0gVFhJTkZPX1NJWkUsCi0JLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4KSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzIHJ0NjFwY2lfb3BzID0gewpAQCAtMjUwMSw2ICsyNDYwLDcgQEAKIAkubWF4X2FwX2ludGYJPSA0LAogCS5lZXByb21fc2l6ZQk9IEVFUFJPTV9TSVpFLAogCS5yZl9zaXplCT0gUkZfU0laRSwKKwkudHhfcXVldWVzCT0gTlVNX1RYX1FVRVVFUywKIAkucngJCT0gJnJ0NjFwY2lfcXVldWVfcngsCiAJLnR4CQk9ICZydDYxcGNpX3F1ZXVlX3R4LAogCS5iY24JCT0gJnJ0NjFwY2lfcXVldWVfYmNuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKaW5kZXggMzUxMWJiYTcuLjEwMDRkNWI4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaApAQCAtMzksOCArMzksNiBAQAogICogU2lnbmFsIGluZm9ybWF0aW9uLgogICogRGVmYXVsIG9mZnNldCBpcyByZXF1aXJlZCBmb3IgUlNTSSA8LT4gZEJtIGNvbnZlcnNpb24uCiAgKi8KLSNkZWZpbmUgTUFYX1NJR05BTAkJCTEwMAotI2RlZmluZSBNQVhfUlhfU1NJCQkJLTEKICNkZWZpbmUgREVGQVVMVF9SU1NJX09GRlNFVAkJMTIwCiAKIC8qCkBAIC01NCw2ICs1MiwxMSBAQAogI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAogCiAvKgorICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KKyAqLworI2RlZmluZSBOVU1fVFhfUVVFVUVTCQkJNAorCisvKgogICogUENJIHJlZ2lzdGVycy4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCA2YTYyZDZiLi5kMzgzNzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTc0LDEwICs3NCwxMCBAQAogCQkJCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogCQkJCQkgICAgICB2b2lkICp2YWx1ZSwgY29uc3QgdTMyIGxlbmd0aCkKIHsKLQlpbnQgdGltZW91dCA9IFJFR0lTVEVSX1RJTUVPVVQgKiAobGVuZ3RoIC8gc2l6ZW9mKHUzMikpOwogCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9idWZmKHJ0MngwMGRldiwgVVNCX01VTFRJX1JFQUQsCiAJCQkJICAgICAgVVNCX1ZFTkRPUl9SRVFVRVNUX0lOLCBvZmZzZXQsCi0JCQkJICAgICAgdmFsdWUsIGxlbmd0aCwgdGltZW91dCk7CisJCQkJICAgICAgdmFsdWUsIGxlbmd0aCwKKwkJCQkgICAgICBSRUdJU1RFUl9USU1FT1VUMzIobGVuZ3RoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC0xMDIsMTAgKzEwMiwxMCBAQAogCQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldCwKIAkJCQkJICAgICAgIHZvaWQgKnZhbHVlLCBjb25zdCB1MzIgbGVuZ3RoKQogewotCWludCB0aW1lb3V0ID0gUkVHSVNURVJfVElNRU9VVCAqIChsZW5ndGggLyBzaXplb2YodTMyKSk7CiAJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X2J1ZmYocnQyeDAwZGV2LCBVU0JfTVVMVElfV1JJVEUsCiAJCQkJICAgICAgVVNCX1ZFTkRPUl9SRVFVRVNUX09VVCwgb2Zmc2V0LAotCQkJCSAgICAgIHZhbHVlLCBsZW5ndGgsIHRpbWVvdXQpOworCQkJCSAgICAgIHZhbHVlLCBsZW5ndGgsCisJCQkJICAgICAgUkVHSVNURVJfVElNRU9VVDMyKGxlbmd0aCkpOwogfQogCiBzdGF0aWMgdTMyIHJ0NzN1c2JfYmJwX2NoZWNrKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC0zNDEsNiArMzQxLDE3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIHZvaWQgcnQ3M3VzYl9pbml0X2xlZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICBzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkLAorCQkJICAgICBlbnVtIGxlZF90eXBlIHR5cGUpCit7CisJbGVkLT5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CisJbGVkLT50eXBlID0gdHlwZTsKKwlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBydDczdXNiX2JyaWdodG5lc3Nfc2V0OworCWxlZC0+bGVkX2Rldi5ibGlua19zZXQgPSBydDczdXNiX2JsaW5rX3NldDsKKwlsZWQtPmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOworfQogI2VuZGlmIC8qIENPTkZJR19SVDczVVNCX0xFRFMgKi8KIAogLyoKQEAgLTg4Miw3ICs4OTMsNiBAQAogCWNvbnN0IGNoYXIgKnB0ciA9IGRhdGE7CiAJY2hhciAqY2FjaGU7CiAJaW50IGJ1ZmxlbjsKLQlpbnQgdGltZW91dDsKIAogCS8qCiAJICogV2FpdCBmb3Igc3RhYmxlIGhhcmR3YXJlLgpAQCAtOTEzLDE0ICs5MjMsMTQgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gQ1NSX0NBQ0hFX1NJWkVfRklSTVdBUkUpIHsKIAkJYnVmbGVuID0gbWluX3QoaW50LCBsZW4gLSBpLCBDU1JfQ0FDSEVfU0laRV9GSVJNV0FSRSk7Ci0JCXRpbWVvdXQgPSBSRUdJU1RFUl9USU1FT1VUICogKGJ1ZmxlbiAvIHNpemVvZih1MzIpKTsKIAogCQltZW1jcHkoY2FjaGUsIHB0ciwgYnVmbGVuKTsKIAogCQlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3QocnQyeDAwZGV2LCBVU0JfTVVMVElfV1JJVEUsCiAJCQkJCSBVU0JfVkVORE9SX1JFUVVFU1RfT1VULAogCQkJCQkgRklSTVdBUkVfSU1BR0VfQkFTRSArIGksIDAsCi0JCQkJCSBjYWNoZSwgYnVmbGVuLCB0aW1lb3V0KTsKKwkJCQkJIGNhY2hlLCBidWZsZW4sCisJCQkJCSBSRUdJU1RFUl9USU1FT1VUMzIoYnVmbGVuKSk7CiAKIAkJcHRyICs9IGJ1ZmxlbjsKIAl9CkBAIC0xMTAwLDYgKzExMTAsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBydDczdXNiX3dhaXRfYmJwX3JlYWR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisJdTggdmFsdWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7CisJCXJ0NzN1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAwLCAmdmFsdWUpOworCQlpZiAoKHZhbHVlICE9IDB4ZmYpICYmICh2YWx1ZSAhPSAweDAwKSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoUkVHSVNURVJfQlVTWV9ERUxBWSk7CisJfQorCisJRVJST1IocnQyeDAwZGV2LCAiQkJQIHJlZ2lzdGVyIGFjY2VzcyBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJcmV0dXJuIC1FQUNDRVM7Cit9CisKIHN0YXRpYyBpbnQgcnQ3M3VzYl9pbml0X2JicChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTEwNywxOCArMTEzMyw5IEBACiAJdTggcmVnX2lkOwogCXU4IHZhbHVlOwogCi0JZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewotCQlydDczdXNiX2JicF9yZWFkKHJ0MngwMGRldiwgMCwgJnZhbHVlKTsKLQkJaWYgKCh2YWx1ZSAhPSAweGZmKSAmJiAodmFsdWUgIT0gMHgwMCkpCi0JCQlnb3RvIGNvbnRpbnVlX2Nzcl9pbml0OwotCQlOT1RJQ0UocnQyeDAwZGV2LCAiV2FpdGluZyBmb3IgQkJQIHJlZ2lzdGVyLlxuIik7Ci0JCXVkZWxheShSRUdJU1RFUl9CVVNZX0RFTEFZKTsKLQl9CisJaWYgKHVubGlrZWx5KHJ0NzN1c2Jfd2FpdF9iYnBfcmVhZHkocnQyeDAwZGV2KSkpCisJCXJldHVybiAtRUFDQ0VTOwogCi0JRVJST1IocnQyeDAwZGV2LCAiQkJQIHJlZ2lzdGVyIGFjY2VzcyBmYWlsZWQsIGFib3J0aW5nLlxuIik7Ci0JcmV0dXJuIC1FQUNDRVM7Ci0KLWNvbnRpbnVlX2Nzcl9pbml0OgogCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMywgMHg4MCk7CiAJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNSwgMHgzMCk7CiAJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAyMSwgMHhjOCk7CkBAIC0xMTY4LDcgKzExODUsOCBAQAogCiAJcnQ3M3VzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IwLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RJU0FCTEVfUlgsCi0JCQkgICBzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkYpOworCQkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRikgfHwKKwkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkZfTElOSykpOwogCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjAsIHJlZyk7CiB9CiAKQEAgLTExNzcsMTEgKzExOTUsOSBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgcmVnaXN0ZXJzLgogCSAqLwotCWlmIChydDczdXNiX2luaXRfcmVnaXN0ZXJzKHJ0MngwMGRldikgfHwKLQkgICAgcnQ3M3VzYl9pbml0X2JicChydDJ4MDBkZXYpKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIlJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCWlmICh1bmxpa2VseShydDczdXNiX2luaXRfcmVnaXN0ZXJzKHJ0MngwMGRldikgfHwKKwkJICAgICBydDczdXNiX2luaXRfYmJwKHJ0MngwMGRldikpKQogCQlyZXR1cm4gLUVJTzsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMDMsNyArMTIxOSw2IEBACiAJdTMyIHJlZzsKIAl1bnNpZ25lZCBpbnQgaTsKIAljaGFyIHB1dF90b19zbGVlcDsKLQljaGFyIGN1cnJlbnRfc3RhdGU7CiAKIAlwdXRfdG9fc2xlZXAgPSAoc3RhdGUgIT0gU1RBVEVfQVdBS0UpOwogCkBAIC0xMjE5LDE2ICsxMjM0LDEyIEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewogCQlydDczdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTIsICZyZWcpOwotCQljdXJyZW50X3N0YXRlID0KLQkJICAgIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IxMl9CQlBfQ1VSUkVOVF9TVEFURSk7Ci0JCWlmIChjdXJyZW50X3N0YXRlID09ICFwdXRfdG9fc2xlZXApCisJCXN0YXRlID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjEyX0JCUF9DVVJSRU5UX1NUQVRFKTsKKwkJaWYgKHN0YXRlID09ICFwdXRfdG9fc2xlZXApCiAJCQlyZXR1cm4gMDsKIAkJbXNsZWVwKDEwKTsKIAl9CiAKLQlOT1RJQ0UocnQyeDAwZGV2LCAiRGV2aWNlIGZhaWxlZCB0byBlbnRlciBzdGF0ZSAlZCwgIgotCSAgICAgICAiY3VycmVudCBkZXZpY2Ugc3RhdGUgJWQuXG4iLCAhcHV0X3RvX3NsZWVwLCBjdXJyZW50X3N0YXRlKTsKLQogCXJldHVybiAtRUJVU1k7CiB9CiAKQEAgLTEyNDYsMTEgKzEyNTcsMTMgQEAKIAkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19SWF9PTjoKIAljYXNlIFNUQVRFX1JBRElPX1JYX09OX0xJTks6Ci0JCXJ0NzN1c2JfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT04pOwotCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX1JYX09GRjoKIAljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgotCQlydDczdXNiX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CisJCXJ0NzN1c2JfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOworCQlicmVhazsKKwljYXNlIFNUQVRFX1JBRElPX0lSUV9PTjoKKwljYXNlIFNUQVRFX1JBRElPX0lSUV9PRkY6CisJCS8qIE5vIHN1cHBvcnQsIGJ1dCBubyBlcnJvciBlaXRoZXIgKi8KIAkJYnJlYWs7CiAJY2FzZSBTVEFURV9ERUVQX1NMRUVQOgogCWNhc2UgU1RBVEVfU0xFRVA6CkBAIC0xMjYzLDYgKzEyNzYsMTAgQEAKIAkJYnJlYWs7CiAJfQogCisJaWYgKHVubGlrZWx5KHJldHZhbCkpCisJCUVSUk9SKHJ0MngwMGRldiwgIkRldmljZSBmYWlsZWQgdG8gZW50ZXIgc3RhdGUgJWQgKCVkKS5cbiIsCisJCSAgICAgIHN0YXRlLCByZXR2YWwpOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTI3MSw4ICsxMjg4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcnQ3M3VzYl93cml0ZV90eF9kZXNjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYywKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorCQkJCSAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCiB7CiAJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7CiAJX19sZTMyICp0eGQgPSBza2JkZXNjLT5kZXNjOwpAQCAtMTMxNywxNiArMTMzMyw1OSBAQAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLAotCQkJICAgISEoY29udHJvbC0+ZmxhZ3MgJgotCQkJICAgICAgSUVFRTgwMjExX1RYQ1RMX0xPTkdfUkVUUllfTElNSVQpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVRSWV9NT0RFLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RLSVBfTUlDLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9EQVRBQllURV9DT1VOVCwgc2tiZGVzYy0+ZGF0YV9sZW4pOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0RBVEFCWVRFX0NPVU5ULAorCQkJICAgc2tiLT5sZW4gLSBza2JkZXNjLT5kZXNjX2xlbik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQlVSU1QyLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX0JVUlNULCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0NJUEhFUl9BTEcsIENJUEhFUl9OT05FKTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDAsIHdvcmQpOwogfQogCisvKgorICogVFggZGF0YSBpbml0aWFsaXphdGlvbgorICovCitzdGF0aWMgdm9pZCBydDczdXNiX3dyaXRlX2JlYWNvbihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CisJdW5zaWduZWQgaW50IGJlYWNvbl9iYXNlOworCXUzMiByZWc7CisKKwkvKgorCSAqIEFkZCB0aGUgZGVzY3JpcHRvciBpbiBmcm9udCBvZiB0aGUgc2tiLgorCSAqLworCXNrYl9wdXNoKGVudHJ5LT5za2IsIGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplKTsKKwltZW1jcHkoZW50cnktPnNrYi0+ZGF0YSwgc2tiZGVzYy0+ZGVzYywgc2tiZGVzYy0+ZGVzY19sZW4pOworCXNrYmRlc2MtPmRlc2MgPSBlbnRyeS0+c2tiLT5kYXRhOworCisJLyoKKwkgKiBEaXNhYmxlIGJlYWNvbmluZyB3aGlsZSB3ZSBhcmUgcmVsb2FkaW5nIHRoZSBiZWFjb24gZGF0YSwKKwkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgorCSAqLworCXJ0NzN1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UU0ZfVElDS0lORywgMCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UQlRUX0VOQUJMRSwgMCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9CRUFDT05fR0VOLCAwKTsKKwlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOworCisJLyoKKwkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggZGVzY3JpcHRvciB0byByZWdpc3Rlci4KKwkgKi8KKwliZWFjb25fYmFzZSA9IEhXX0JFQUNPTl9PRkZTRVQoZW50cnktPmVudHJ5X2lkeCk7CisJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0KHJ0MngwMGRldiwgVVNCX01VTFRJX1dSSVRFLAorCQkJCSBVU0JfVkVORE9SX1JFUVVFU1RfT1VULCBiZWFjb25fYmFzZSwgMCwKKwkJCQkgZW50cnktPnNrYi0+ZGF0YSwgZW50cnktPnNrYi0+bGVuLAorCQkJCSBSRUdJU1RFUl9USU1FT1VUMzIoZW50cnktPnNrYi0+bGVuKSk7CisKKwkvKgorCSAqIENsZWFuIHVwIHRoZSBiZWFjb24gc2tiLgorCSAqLworCWRldl9rZnJlZV9za2IoZW50cnktPnNrYik7CisJZW50cnktPnNrYiA9IE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgcnQ3M3VzYl9nZXRfdHhfZGF0YV9sZW4oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTM0MiwxNiArMTQwMSwxNSBAQAogCXJldHVybiBsZW5ndGg7CiB9CiAKLS8qCi0gKiBUWCBkYXRhIGluaXRpYWxpemF0aW9uCi0gKi8KIHN0YXRpYyB2b2lkIHJ0NzN1c2Jfa2lja190eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IHF1ZXVlKQorCQkJCSAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxdWV1ZSkKIHsKIAl1MzIgcmVnOwogCi0JaWYgKHF1ZXVlICE9IFJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OKQorCWlmIChxdWV1ZSAhPSBRSURfQkVBQ09OKSB7CisJCXJ0MngwMHVzYl9raWNrX3R4X3F1ZXVlKHJ0MngwMGRldiwgcXVldWUpOwogCQlyZXR1cm47CisJfQogCiAJLyoKIAkgKiBGb3IgV2ktRmkgZmFpbHkgZ2VuZXJhdGVkIGJlYWNvbnMgYmV0d2VlbiBwYXJ0aWNpcGF0aW5nIHN0YXRpb25zLgpAQCAtMTQyMSwyNSArMTQ3OSwyMiBAQAogewogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhlbnRyeS0+c2tiKTsKIAlfX2xlMzIgKnJ4ZCA9IChfX2xlMzIgKillbnRyeS0+c2tiLT5kYXRhOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZSArIDI7CiAJdTMyIHdvcmQwOwogCXUzMiB3b3JkMTsKIAogCS8qCi0JICogQ29weSBkZXNjcmlwdG9yIHRvIHRoZSBhdmFpbGFibGUgaGVhZHJvb20gaW5zaWRlIHRoZSBza2J1ZmZlci4KKwkgKiBDb3B5IGRlc2NyaXB0b3IgdG8gdGhlIHNrYmRlc2MtPmRlc2MgYnVmZmVyLCBtYWtpbmcgaXQgc2FmZSBmcm9tIG1vdmluZyBvZgorCSAqIGZyYW1lIGRhdGEgaW4gcnQyeDAwdXNiLgogCSAqLwotCXNrYl9wdXNoKGVudHJ5LT5za2IsIG9mZnNldCk7Ci0JbWVtY3B5KGVudHJ5LT5za2ItPmRhdGEsIHJ4ZCwgZW50cnktPnF1ZXVlLT5kZXNjX3NpemUpOwotCXJ4ZCA9IChfX2xlMzIgKillbnRyeS0+c2tiLT5kYXRhOworCW1lbWNweShza2JkZXNjLT5kZXNjLCByeGQsIHNrYmRlc2MtPmRlc2NfbGVuKTsKKwlyeGQgPSAoX19sZTMyICopc2tiZGVzYy0+ZGVzYzsKIAogCS8qCi0JICogVGhlIGRlc2NyaXB0b3IgaXMgbm93IGFsaWduZWQgdG8gNCBieXRlcyBhbmQgdGh1cyBpdCBpcwotCSAqIG5vdyBzYWZlIHRvIHJlYWQgaXQgb24gYWxsIGFyY2hpdGVjdHVyZXMuCisJICogSXQgaXMgbm93IHNhZmUgdG8gcmVhZCB0aGUgZGVzY3JpcHRvciBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4KIAkgKi8KIAlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMCwgJndvcmQwKTsKIAlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMSwgJndvcmQxKTsKIAotCXJ4ZGVzYy0+ZmxhZ3MgPSAwOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9DUkNfRVJST1IpKQogCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CiAKQEAgLTE0NTMsMjUgKzE1MDgsMTYgQEAKIAlyeGRlc2MtPnJzc2kgPSBydDczdXNiX2FnY190b19yc3NpKGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LCB3b3JkMSk7CiAJcnhkZXNjLT5zaXplID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfREFUQUJZVEVfQ09VTlQpOwogCi0JcnhkZXNjLT5kZXZfZmxhZ3MgPSAwOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9PRkRNKSkKIAkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX1NJR05BTF9QTENQOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9NWV9CU1MpKQogCQlyeGRlc2MtPmRldl9mbGFncyB8PSBSWERPTkVfTVlfQlNTOwogCiAJLyoKLQkgKiBBZGp1c3QgdGhlIHNrYiBtZW1vcnkgd2luZG93IHRvIHRoZSBmcmFtZSBib3VuZGFyaWVzLgorCSAqIFNldCBza2IgcG9pbnRlcnMsIGFuZCB1cGRhdGUgZnJhbWUgaW5mb3JtYXRpb24uCiAJICovCi0Jc2tiX3B1bGwoZW50cnktPnNrYiwgb2Zmc2V0ICsgZW50cnktPnF1ZXVlLT5kZXNjX3NpemUpOworCXNrYl9wdWxsKGVudHJ5LT5za2IsIGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplKTsKIAlza2JfdHJpbShlbnRyeS0+c2tiLCByeGRlc2MtPnNpemUpOwotCi0JLyoKLQkgKiBTZXQgZGVzY3JpcHRvciBhbmQgZGF0YSBwb2ludGVyLgotCSAqLwotCXNrYmRlc2MtPmRhdGEgPSBlbnRyeS0+c2tiLT5kYXRhOwotCXNrYmRlc2MtPmRhdGFfbGVuID0gcnhkZXNjLT5zaXplOwotCXNrYmRlc2MtPmRlc2MgPSByeGQ7Ci0Jc2tiZGVzYy0+ZGVzY19sZW4gPSBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZTsKIH0KIAogLyoKQEAgLTE2NDQsMzEgKzE2OTAsMTEgQEAKICNpZmRlZiBDT05GSUdfUlQ3M1VTQl9MRURTCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0xFRCwgJmVlcHJvbSk7CiAKLQlydDJ4MDBkZXYtPmxlZF9yYWRpby5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7Ci0JcnQyeDAwZGV2LT5sZWRfcmFkaW8udHlwZSA9IExFRF9UWVBFX1JBRElPOwotCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQotCSAgICBydDczdXNiX2JyaWdodG5lc3Nfc2V0OwotCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYmxpbmtfc2V0ID0KLQkgICAgcnQ3M3VzYl9ibGlua19zZXQ7Ci0JcnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7Ci0KLQlydDJ4MDBkZXYtPmxlZF9hc3NvYy5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7Ci0JcnQyeDAwZGV2LT5sZWRfYXNzb2MudHlwZSA9IExFRF9UWVBFX0FTU09DOwotCXJ0MngwMGRldi0+bGVkX2Fzc29jLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQotCSAgICBydDczdXNiX2JyaWdodG5lc3Nfc2V0OwotCXJ0MngwMGRldi0+bGVkX2Fzc29jLmxlZF9kZXYuYmxpbmtfc2V0ID0KLQkgICAgcnQ3M3VzYl9ibGlua19zZXQ7Ci0JcnQyeDAwZGV2LT5sZWRfYXNzb2MuZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7Ci0KLQlpZiAodmFsdWUgPT0gTEVEX01PREVfU0lHTkFMX1NUUkVOR1RIKSB7Ci0JCXJ0MngwMGRldi0+bGVkX3F1YWwucnQyeDAwZGV2ID0gcnQyeDAwZGV2OwotCQlydDJ4MDBkZXYtPmxlZF9xdWFsLnR5cGUgPSBMRURfVFlQRV9RVUFMSVRZOwotCQlydDJ4MDBkZXYtPmxlZF9xdWFsLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQotCQkgICAgcnQ3M3VzYl9icmlnaHRuZXNzX3NldDsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC5sZWRfZGV2LmJsaW5rX3NldCA9Ci0JCSAgICBydDczdXNiX2JsaW5rX3NldDsKLQkJcnQyeDAwZGV2LT5sZWRfcXVhbC5mbGFncyA9IExFRF9JTklUSUFMSVpFRDsKLQl9CisJcnQ3M3VzYl9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9yYWRpbywgTEVEX1RZUEVfUkFESU8pOworCXJ0NzN1c2JfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfYXNzb2MsIExFRF9UWVBFX0FTU09DKTsKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfU0lHTkFMX1NUUkVOR1RIKQorCQlydDczdXNiX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3F1YWwsCisJCQkJIExFRF9UWVBFX1FVQUxJVFkpOwogCiAJcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLCBNQ1VfTEVEQ1NfTEVEX01PREUsIHZhbHVlKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX21jdV9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9HUElPXzAsCkBAIC0xODQ2LDEzICsxODcyLDExIEBACiAJICovCiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPQogCSAgICBJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFIHwKLQkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORzsKKwkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOwogCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gVFhEX0RFU0NfU0laRTsKLQlydDJ4MDBkZXYtPmh3LT5tYXhfc2lnbmFsID0gTUFYX1NJR05BTDsKLQlydDJ4MDBkZXYtPmh3LT5tYXhfcnNzaSA9IE1BWF9SWF9TU0k7Ci0JcnQyeDAwZGV2LT5ody0+cXVldWVzID0gNDsKIAotCVNFVF9JRUVFODAyMTFfREVWKHJ0MngwMGRldi0+aHcsICZydDJ4MDBkZXZfdXNiKHJ0MngwMGRldiktPmRldik7CisJU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgcnQyeDAwZGV2LT5kZXYpOwogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHJ0MngwMGRldi0+aHcsCiAJCQkJcnQyeDAwX2VlcHJvbV9hZGRyKHJ0MngwMGRldiwKIAkJCQkJCSAgIEVFUFJPTV9NQUNfQUREUl8wKSk7CkBAIC0xOTc0LDY5ICsxOTk4LDYgQEAKICNkZWZpbmUgcnQ3M3VzYl9nZXRfdHNmCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IHJ0NzN1c2JfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb250cm9sLT52aWYpOwotCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKLQl1bnNpZ25lZCBpbnQgYmVhY29uX2Jhc2U7Ci0JdW5zaWduZWQgaW50IHRpbWVvdXQ7Ci0JdTMyIHJlZzsKLQotCWlmICh1bmxpa2VseSghaW50Zi0+YmVhY29uKSkKLQkJcmV0dXJuIC1FTk9CVUZTOwotCi0JLyoKLQkgKiBBZGQgdGhlIGRlc2NyaXB0b3IgaW4gZnJvbnQgb2YgdGhlIHNrYi4KLQkgKi8KLQlza2JfcHVzaChza2IsIGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZSk7Ci0JbWVtc2V0KHNrYi0+ZGF0YSwgMCwgaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplKTsKLQotCS8qCi0JICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgotCSAqLwotCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKLQltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7Ci0Jc2tiZGVzYy0+ZmxhZ3MgfD0gRlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEOwotCXNrYmRlc2MtPmRhdGEgPSBza2ItPmRhdGEgKyBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemU7Ci0Jc2tiZGVzYy0+ZGF0YV9sZW4gPSBza2ItPmxlbiAtIGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZTsKLQlza2JkZXNjLT5kZXNjID0gc2tiLT5kYXRhOwotCXNrYmRlc2MtPmRlc2NfbGVuID0gaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplOwotCXNrYmRlc2MtPmVudHJ5ID0gaW50Zi0+YmVhY29uOwotCi0JLyoKLQkgKiBEaXNhYmxlIGJlYWNvbmluZyB3aGlsZSB3ZSBhcmUgcmVsb2FkaW5nIHRoZSBiZWFjb24gZGF0YSwKLQkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgotCSAqLwotCXJ0NzN1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UU0ZfVElDS0lORywgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UQlRUX0VOQUJMRSwgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9CRUFDT05fR0VOLCAwKTsKLQlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOwotCi0JLyoKLQkgKiBtYWM4MDIxMSBkb2Vzbid0IHByb3ZpZGUgdGhlIGNvbnRyb2wtPnF1ZXVlIHZhcmlhYmxlCi0JICogZm9yIGJlYWNvbnMuIFNldCBvdXIgb3duIHF1ZXVlIGlkZW50aWZpY2F0aW9uIHNvCi0JICogaXQgY2FuIGJlIHVzZWQgZHVyaW5nIGRlc2NyaXB0b3IgaW5pdGlhbGl6YXRpb24uCi0JICovCi0JY29udHJvbC0+cXVldWUgPSBSVDJYMDBfQkNOX1FVRVVFX0JFQUNPTjsKLQlydDJ4MDBsaWJfd3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIHNrYiwgY29udHJvbCk7Ci0KLQkvKgotCSAqIFdyaXRlIGVudGlyZSBiZWFjb24gd2l0aCBkZXNjcmlwdG9yIHRvIHJlZ2lzdGVyLAotCSAqIGFuZCBraWNrIHRoZSBiZWFjb24gZ2VuZXJhdG9yLgotCSAqLwotCWJlYWNvbl9iYXNlID0gSFdfQkVBQ09OX09GRlNFVChpbnRmLT5iZWFjb24tPmVudHJ5X2lkeCk7Ci0JdGltZW91dCA9IFJFR0lTVEVSX1RJTUVPVVQgKiAoc2tiLT5sZW4gLyBzaXplb2YodTMyKSk7Ci0JcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0KHJ0MngwMGRldiwgVVNCX01VTFRJX1dSSVRFLAotCQkJCSBVU0JfVkVORE9SX1JFUVVFU1RfT1VULCBiZWFjb25fYmFzZSwgMCwKLQkJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwgdGltZW91dCk7Ci0JcnQ3M3VzYl9raWNrX3R4X3F1ZXVlKHJ0MngwMGRldiwgY29udHJvbC0+cXVldWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBydDczdXNiX21hYzgwMjExX29wcyA9IHsKIAkudHgJCQk9IHJ0MngwMG1hY190eCwKIAkuc3RhcnQJCQk9IHJ0MngwMG1hY19zdGFydCwKQEAgLTIwNTIsNyArMjAxMyw2IEBACiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0NzN1c2JfZ2V0X3RzZiwKLQkuYmVhY29uX3VwZGF0ZQkJPSBydDczdXNiX2JlYWNvbl91cGRhdGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQ3M3VzYl9ydDJ4MDBfb3BzID0gewpAQCAtMjA3MCw2ICsyMDMwLDcgQEAKIAkubGlua190dW5lcgkJPSBydDczdXNiX2xpbmtfdHVuZXIsCiAJLndyaXRlX3R4X2Rlc2MJCT0gcnQ3M3VzYl93cml0ZV90eF9kZXNjLAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHVzYl93cml0ZV90eF9kYXRhLAorCS53cml0ZV9iZWFjb24JCT0gcnQ3M3VzYl93cml0ZV9iZWFjb24sCiAJLmdldF90eF9kYXRhX2xlbgk9IHJ0NzN1c2JfZ2V0X3R4X2RhdGFfbGVuLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0NzN1c2Jfa2lja190eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQ3M3VzYl9maWxsX3J4ZG9uZSwKQEAgLTIwODMsMjEgKzIwNDQsMjEgQEAKIAkuZW50cnlfbnVtCQk9IFJYX0VOVFJJRVMsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBSWERfREVTQ19TSVpFLAotCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9yeCksCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0NzN1c2JfcXVldWVfdHggPSB7CiAJLmVudHJ5X251bQkJPSBUWF9FTlRSSUVTLAogCS5kYXRhX3NpemUJCT0gREFUQV9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKLQkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfdHgpLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDczdXNiX3F1ZXVlX2JjbiA9IHsKIAkuZW50cnlfbnVtCQk9IDQgKiBCRUFDT05fRU5UUklFUywKIAkuZGF0YV9zaXplCQk9IE1HTVRfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFRYSU5GT19TSVpFLAotCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eCksCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyBydDczdXNiX29wcyA9IHsKQEAgLTIxMDYsNiArMjA2Nyw3IEBACiAJLm1heF9hcF9pbnRmCT0gNCwKIAkuZWVwcm9tX3NpemUJPSBFRVBST01fU0laRSwKIAkucmZfc2l6ZQk9IFJGX1NJWkUsCisJLnR4X3F1ZXVlcwk9IE5VTV9UWF9RVUVVRVMsCiAJLnJ4CQk9ICZydDczdXNiX3F1ZXVlX3J4LAogCS50eAkJPSAmcnQ3M3VzYl9xdWV1ZV90eCwKIAkuYmNuCQk9ICZydDczdXNiX3F1ZXVlX2JjbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCmluZGV4IDA2ZDY4NzQuLjE0ODQ5MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaApAQCAtMzksOCArMzksNiBAQAogICogU2lnbmFsIGluZm9ybWF0aW9uLgogICogRGVmYXVsIG9mZnNldCBpcyByZXF1aXJlZCBmb3IgUlNTSSA8LT4gZEJtIGNvbnZlcnNpb24uCiAgKi8KLSNkZWZpbmUgTUFYX1NJR05BTAkJCTEwMAotI2RlZmluZSBNQVhfUlhfU1NJCQkJLTEKICNkZWZpbmUgREVGQVVMVF9SU1NJX09GRlNFVAkJMTIwCiAKIC8qCkBAIC01NCw2ICs1MiwxMSBAQAogI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAogCiAvKgorICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KKyAqLworI2RlZmluZSBOVU1fVFhfUVVFVUVTCQkJNAorCisvKgogICogVVNCIHJlZ2lzdGVycy4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4MF9kZXYuYwppbmRleCBjMTgxZjIzLi5iNzE3MmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODBfZGV2LmMKQEAgLTEzMiw4ICsxMzIsOCBAQAogCiAJCQlyeF9zdGF0dXMuYW50ZW5uYSA9IChmbGFnczIgPj4gMTUpICYgMTsKIAkJCS8qIFRPRE86IGltcHJvdmUgc2lnbmFsL3Jzc2kgcmVwb3J0aW5nICovCi0JCQlyeF9zdGF0dXMuc2lnbmFsID0gZmxhZ3MyICYgMHhGRjsKLQkJCXJ4X3N0YXR1cy5zc2kgPSAoZmxhZ3MyID4+IDgpICYgMHg3RjsKKwkJCXJ4X3N0YXR1cy5xdWFsID0gZmxhZ3MyICYgMHhGRjsKKwkJCXJ4X3N0YXR1cy5zaWduYWwgPSAoZmxhZ3MyID4+IDgpICYgMHg3RjsKIAkJCS8qIFhYWDogaXMgdGhpcyBjb3JyZWN0PyAqLwogCQkJcnhfc3RhdHVzLnJhdGVfaWR4ID0gKGZsYWdzID4+IDIwKSAmIDB4RjsKIAkJCXJ4X3N0YXR1cy5mcmVxID0gZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOwpAQCAtMTcwLDM0ICsxNzAsMjkgQEAKIAl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSB7CiAJCXN0cnVjdCBydGw4MTgwX3R4X2Rlc2MgKmVudHJ5ID0gJnJpbmctPmRlc2NbcmluZy0+aWR4XTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgc3RhdHVzOwotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2w7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAkJdTMyIGZsYWdzID0gbGUzMl90b19jcHUoZW50cnktPmZsYWdzKTsKIAogCQlpZiAoZmxhZ3MgJiBSVEw4MTgwX1RYX0RFU0NfRkxBR19PV04pCiAJCQlyZXR1cm47CiAKLQkJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKLQogCQlyaW5nLT5pZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOwogCQlza2IgPSBfX3NrYl9kZXF1ZXVlKCZyaW5nLT5xdWV1ZSk7CiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgbGUzMl90b19jcHUoZW50cnktPnR4X2J1ZiksCiAJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAotCQljb250cm9sID0gKigoc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICoqKXNrYi0+Y2IpOwotCQlpZiAoY29udHJvbCkKLQkJCW1lbWNweSgmc3RhdHVzLmNvbnRyb2wsIGNvbnRyb2wsIHNpemVvZigqY29udHJvbCkpOwotCQlrZnJlZShjb250cm9sKTsKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKIAotCQlpZiAoIShzdGF0dXMuY29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spKSB7CisJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSB7CiAJCQlpZiAoZmxhZ3MgJiBSVEw4MTgwX1RYX0RFU0NfRkxBR19UWF9PSykKLQkJCQlzdGF0dXMuZmxhZ3MgPSBJRUVFODAyMTFfVFhfU1RBVFVTX0FDSzsKKwkJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CiAJCQllbHNlCi0JCQkJc3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMTsKKwkJCQlpbmZvLT5zdGF0dXMuZXhjZXNzaXZlX3JldHJpZXMgPSAxOwogCQl9Ci0JCXN0YXR1cy5yZXRyeV9jb3VudCA9IGZsYWdzICYgMHhGRjsKKwkJaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50ID0gZmxhZ3MgJiAweEZGOwogCi0JCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYsIHNrYiwgJnN0YXR1cyk7CisJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYsIHNrYik7CiAJCWlmIChyaW5nLT5lbnRyaWVzIC0gc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpID09IDIpCiAJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShkZXYsIHByaW8pOwogCX0KQEAgLTIzOCw5ICsyMzMsOSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBydGw4MTgwX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorc3RhdGljIGludCBydGw4MTgwX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgcnRsODE4MF90eF9yaW5nICpyaW5nOwogCXN0cnVjdCBydGw4MTgwX3R4X2Rlc2MgKmVudHJ5OwpAQCAtMjUxLDQ2ICsyNDYsNDAgQEAKIAl1MTYgcGxjcF9sZW4gPSAwOwogCV9fbGUxNiBydHNfZHVyYXRpb24gPSAwOwogCi0JcHJpbyA9IGNvbnRyb2wtPnF1ZXVlOworCXByaW8gPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlyaW5nID0gJnByaXYtPnR4X3JpbmdbcHJpb107CiAKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLAogCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAKLQlCVUdfT04oIWNvbnRyb2wtPnR4X3JhdGUpOwotCiAJdHhfZmxhZ3MgPSBSVEw4MTgwX1RYX0RFU0NfRkxBR19PV04gfCBSVEw4MTgwX1RYX0RFU0NfRkxBR19GUyB8CiAJCSAgIFJUTDgxODBfVFhfREVTQ19GTEFHX0xTIHwKLQkJICAgKGNvbnRyb2wtPnR4X3JhdGUtPmh3X3ZhbHVlIDw8IDI0KSB8IHNrYi0+bGVuOworCQkgICAoaWVlZTgwMjExX2dldF90eF9yYXRlKGRldiwgaW5mbyktPmh3X3ZhbHVlIDw8IDI0KSB8CisJCSAgIHNrYi0+bGVuOwogCiAJaWYgKHByaXYtPnI4MTg1KQogCQl0eF9mbGFncyB8PSBSVEw4MTgwX1RYX0RFU0NfRkxBR19ETUEgfAogCQkJICAgIFJUTDgxODBfVFhfREVTQ19GTEFHX05PX0VOQzsKIAotCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykgewotCQlCVUdfT04oIWNvbnRyb2wtPnJ0c19jdHNfcmF0ZSk7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfUlRTX0NUUykgewogCQl0eF9mbGFncyB8PSBSVEw4MTgwX1RYX0RFU0NfRkxBR19SVFM7Ci0JCXR4X2ZsYWdzIHw9IGNvbnRyb2wtPnJ0c19jdHNfcmF0ZS0+aHdfdmFsdWUgPDwgMTk7Ci0JfSBlbHNlIGlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QpIHsKLQkJQlVHX09OKCFjb250cm9sLT5ydHNfY3RzX3JhdGUpOworCQl0eF9mbGFncyB8PSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShkZXYsIGluZm8pLT5od192YWx1ZSA8PCAxOTsKKwl9IGVsc2UgaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfQ1RTX1BST1RFQ1QpIHsKIAkJdHhfZmxhZ3MgfD0gUlRMODE4MF9UWF9ERVNDX0ZMQUdfQ1RTOwotCQl0eF9mbGFncyB8PSBjb250cm9sLT5ydHNfY3RzX3JhdGUtPmh3X3ZhbHVlIDw8IDE5OworCQl0eF9mbGFncyB8PSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShkZXYsIGluZm8pLT5od192YWx1ZSA8PCAxOTsKIAl9CiAKLQkqKChzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKiopIHNrYi0+Y2IpID0KLQkJa21lbWR1cChjb250cm9sLCBzaXplb2YoKmNvbnRyb2wpLCBHRlBfQVRPTUlDKTsKLQotCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9SVFNfQ1RTKQogCQlydHNfZHVyYXRpb24gPSBpZWVlODAyMTFfcnRzX2R1cmF0aW9uKGRldiwgcHJpdi0+dmlmLCBza2ItPmxlbiwKLQkJCQkJCSAgICAgIGNvbnRyb2wpOworCQkJCQkJICAgICAgaW5mbyk7CiAKIAlpZiAoIXByaXYtPnI4MTg1KSB7CiAJCXVuc2lnbmVkIGludCByZW1haW5kZXI7CiAKIAkJcGxjcF9sZW4gPSBESVZfUk9VTkRfVVAoMTYgKiAoc2tiLT5sZW4gKyA0KSwKLQkJCQkJKGNvbnRyb2wtPnR4X3JhdGUtPmJpdHJhdGUgKiAyKSAvIDEwKTsKKwkJCQkoaWVlZTgwMjExX2dldF90eF9yYXRlKGRldiwgaW5mbyktPmJpdHJhdGUgKiAyKSAvIDEwKTsKIAkJcmVtYWluZGVyID0gKDE2ICogKHNrYi0+bGVuICsgNCkpICUKLQkJCSAgICAoKGNvbnRyb2wtPnR4X3JhdGUtPmJpdHJhdGUgKiAyKSAvIDEwKTsKKwkJCSAgICAoKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShkZXYsIGluZm8pLT5iaXRyYXRlICogMikgLyAxMCk7CiAJCWlmIChyZW1haW5kZXIgPiAwICYmIHJlbWFpbmRlciA8PSA2KQogCQkJcGxjcF9sZW4gfD0gMSA8PCAxNTsKIAl9CkBAIC0zMDMsMTMgKzI5MiwxMyBAQAogCWVudHJ5LT5wbGNwX2xlbiA9IGNwdV90b19sZTE2KHBsY3BfbGVuKTsKIAllbnRyeS0+dHhfYnVmID0gY3B1X3RvX2xlMzIobWFwcGluZyk7CiAJZW50cnktPmZyYW1lX2xlbiA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKLQllbnRyeS0+ZmxhZ3MyID0gY29udHJvbC0+YWx0X3JldHJ5X3JhdGUgIT0gTlVMTCA/Ci0JCQljb250cm9sLT5hbHRfcmV0cnlfcmF0ZS0+Yml0cmF0ZSA8PCA0IDogMDsKLQllbnRyeS0+cmV0cnlfbGltaXQgPSBjb250cm9sLT5yZXRyeV9saW1pdDsKKwllbnRyeS0+ZmxhZ3MyID0gaW5mby0+Y29udHJvbC5hbHRfcmV0cnlfcmF0ZV9pZHggPj0gMCA/CisJCWllZWU4MDIxMV9nZXRfYWx0X3JldHJ5X3JhdGUoZGV2LCBpbmZvKS0+Yml0cmF0ZSA8PCA0IDogMDsKKwllbnRyeS0+cmV0cnlfbGltaXQgPSBpbmZvLT5jb250cm9sLnJldHJ5X2xpbWl0OwogCWVudHJ5LT5mbGFncyA9IGNwdV90b19sZTMyKHR4X2ZsYWdzKTsKIAlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgc2tiKTsKIAlpZiAocmluZy0+ZW50cmllcyAtIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSA8IDIpCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldiwgY29udHJvbC0+cXVldWUpOworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShkZXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0RNQV9QT0xMSU5HLCAoMSA8PCAocHJpbyArIDQpKSk7CkBAIC01MjUsNyArNTE0LDYgQEAKIAogCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGxlMzJfdG9fY3B1KGVudHJ5LT50eF9idWYpLAogCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWtmcmVlKCooKHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqKikgc2tiLT5jYikpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmluZy0+aWR4ID0gKHJpbmctPmlkeCArIDEpICUgcmluZy0+ZW50cmllczsKIAl9CkBAIC04OTQsOSArODgyLDEwIEBACiAJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKIAogCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkJICAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOworCQkgICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDOwogCWRldi0+cXVldWVzID0gMTsKLQlkZXYtPm1heF9yc3NpID0gNjU7CisJZGV2LT5tYXhfc2lnbmFsID0gNjU7CiAKIAlyZWcgPSBydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlRYX0NPTkYpOwogCXJlZyAmPSBSVEw4MThYX1RYX0NPTkZfSFdWRVJfTUFTSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODcuaAppbmRleCAwNzZkODhiLi4zYWZiNDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4Ny5oCkBAIC00NCwyMyArNDQsNDggQEAKIAlfX2xlNjQgbWFjX3RpbWU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdHJ1Y3QgcnRsODE4N190eF9pbmZvIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKLX07Ci0KLXN0cnVjdCBydGw4MTg3X3R4X2hkciB7CitzdHJ1Y3QgcnRsODE4N2JfcnhfaGRyIHsKIAlfX2xlMzIgZmxhZ3M7CisJX19sZTY0IG1hY190aW1lOworCXU4IG5vaXNlOworCXU4IHNpZ25hbDsKKwl1OCBhZ2M7CisJdTggcmVzZXJ2ZWQ7CisJX19sZTMyIHVudXNlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIHtydGw4MTg3LHJ0bDgxODdifV90eF9pbmZvIGlzIGluIHNrYiAqLworCisvKiBUeCBmbGFncyBhcmUgY29tbW9uIGJldHdlZW4gcnRsODE4NyBhbmQgcnRsODE4N2IgKi8KICNkZWZpbmUgUlRMODE4N19UWF9GTEFHX05PX0VOQ1JZUFQJKDEgPDwgMTUpCiAjZGVmaW5lIFJUTDgxODdfVFhfRkxBR19NT1JFX0ZSQUcJKDEgPDwgMTcpCiAjZGVmaW5lIFJUTDgxODdfVFhfRkxBR19DVFMJCSgxIDw8IDE4KQogI2RlZmluZSBSVEw4MTg3X1RYX0ZMQUdfUlRTCQkoMSA8PCAyMykKKworc3RydWN0IHJ0bDgxODdfdHhfaGRyIHsKKwlfX2xlMzIgZmxhZ3M7CiAJX19sZTE2IHJ0c19kdXJhdGlvbjsKIAlfX2xlMTYgbGVuOwogCV9fbGUzMiByZXRyeTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCBydGw4MTg3Yl90eF9oZHIgeworCV9fbGUzMiBmbGFnczsKKwlfX2xlMTYgcnRzX2R1cmF0aW9uOworCV9fbGUxNiBsZW47CisJX19sZTMyIHVudXNlZF8xOworCV9fbGUxNiB1bnVzZWRfMjsKKwlfX2xlMTYgdHhfZHVyYXRpb247CisJX19sZTMyIHVudXNlZF8zOworCV9fbGUzMiByZXRyeTsKKwlfX2xlMzIgdW51c2VkXzRbMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIHsKKwlERVZJQ0VfUlRMODE4NywKKwlERVZJQ0VfUlRMODE4N0IKK307CisKIHN0cnVjdCBydGw4MTg3X3ByaXYgewogCS8qIGNvbW1vbiBiZXR3ZWVuIHJ0bDgxOHggZHJpdmVycyAqLwogCXN0cnVjdCBydGw4MTh4X2NzciAqbWFwOwpAQCAtNzYsNzAgKzEwMSwxMjAgQEAKIAl1MzIgcnhfY29uZjsKIAl1MTYgdHhwd3JfYmFzZTsKIAl1OCBhc2ljX3JldjsKKwl1OCBpc19ydGw4MTg3YjsKKwllbnVtIHsKKwkJUlRMODE4N0J2QiwKKwkJUlRMODE4N0J2RCwKKwkJUlRMODE4N0J2RQorCX0gaHdfcmV2OwogCXN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7CisJdTggc2lnbmFsOworCXU4IHF1YWxpdHk7CisJdTggbm9pc2U7CiB9OwogCiB2b2lkIHJ0bDgxODdfd3JpdGVfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpOwogCi1zdGF0aWMgaW5saW5lIHU4IHJ0bDgxOHhfaW9yZWFkOChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LCB1OCAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdTggcnRsODE4eF9pb3JlYWQ4X2lkeChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LAorCQkJCSAgICAgdTggKmFkZHIsIHU4IGlkeCkKIHsKIAl1OCB2YWw7CiAKIAl1c2JfY29udHJvbF9tc2cocHJpdi0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHByaXYtPnVkZXYsIDApLAogCQkJUlRMODE4N19SRVFfR0VUX1JFRywgUlRMODE4N19SRVFUX1JFQUQsCi0JCQkodW5zaWduZWQgbG9uZylhZGRyLCAwLCAmdmFsLCBzaXplb2YodmFsKSwgSFogLyAyKTsKKwkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGlkeCAmIDB4MDMsICZ2YWwsCisJCQlzaXplb2YodmFsKSwgSFogLyAyKTsKIAogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IHJ0bDgxOHhfaW9yZWFkMTYoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwgX19sZTE2ICphZGRyKQorc3RhdGljIGlubGluZSB1OCBydGw4MTh4X2lvcmVhZDgoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwgdTggKmFkZHIpCit7CisJcmV0dXJuIHJ0bDgxOHhfaW9yZWFkOF9pZHgocHJpdiwgYWRkciwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHJ0bDgxOHhfaW9yZWFkMTZfaWR4KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsCisJCQkJICAgICAgIF9fbGUxNiAqYWRkciwgdTggaWR4KQogewogCV9fbGUxNiB2YWw7CiAKIAl1c2JfY29udHJvbF9tc2cocHJpdi0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHByaXYtPnVkZXYsIDApLAogCQkJUlRMODE4N19SRVFfR0VUX1JFRywgUlRMODE4N19SRVFUX1JFQUQsCi0JCQkodW5zaWduZWQgbG9uZylhZGRyLCAwLCAmdmFsLCBzaXplb2YodmFsKSwgSFogLyAyKTsKKwkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGlkeCAmIDB4MDMsICZ2YWwsCisJCQlzaXplb2YodmFsKSwgSFogLyAyKTsKIAogCXJldHVybiBsZTE2X3RvX2NwdSh2YWwpOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBydGw4MTh4X2lvcmVhZDMyKHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIF9fbGUzMiAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdTE2IHJ0bDgxOHhfaW9yZWFkMTYoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwgX19sZTE2ICphZGRyKQoreworCXJldHVybiBydGw4MTh4X2lvcmVhZDE2X2lkeChwcml2LCBhZGRyLCAwKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcnRsODE4eF9pb3JlYWQzMl9pZHgoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgX19sZTMyICphZGRyLCB1OCBpZHgpCiB7CiAJX19sZTMyIHZhbDsKIAogCXVzYl9jb250cm9sX21zZyhwcml2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUocHJpdi0+dWRldiwgMCksCiAJCQlSVEw4MTg3X1JFUV9HRVRfUkVHLCBSVEw4MTg3X1JFUVRfUkVBRCwKLQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIDAsICZ2YWwsIHNpemVvZih2YWwpLCBIWiAvIDIpOworCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgaWR4ICYgMHgwMywgJnZhbCwKKwkJCXNpemVvZih2YWwpLCBIWiAvIDIpOwogCiAJcmV0dXJuIGxlMzJfdG9fY3B1KHZhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGU4KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsCi0JCQkJICAgIHU4ICphZGRyLCB1OCB2YWwpCitzdGF0aWMgaW5saW5lIHUzMiBydGw4MTh4X2lvcmVhZDMyKHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIF9fbGUzMiAqYWRkcikKK3sKKwlyZXR1cm4gcnRsODE4eF9pb3JlYWQzMl9pZHgocHJpdiwgYWRkciwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGU4X2lkeChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LAorCQkJCQl1OCAqYWRkciwgdTggdmFsLCB1OCBpZHgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKHByaXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShwcml2LT51ZGV2LCAwKSwKIAkJCVJUTDgxODdfUkVRX1NFVF9SRUcsIFJUTDgxODdfUkVRVF9XUklURSwKLQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIDAsICZ2YWwsIHNpemVvZih2YWwpLCBIWiAvIDIpOworCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgaWR4ICYgMHgwMywgJnZhbCwKKwkJCXNpemVvZih2YWwpLCBIWiAvIDIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE4eF9pb3dyaXRlMTYoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwKLQkJCQkgICAgIF9fbGUxNiAqYWRkciwgdTE2IHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGU4KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIHU4ICphZGRyLCB1OCB2YWwpCit7CisJcnRsODE4eF9pb3dyaXRlOF9pZHgocHJpdiwgYWRkciwgdmFsLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxOHhfaW93cml0ZTE2X2lkeChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LAorCQkJCQkgX19sZTE2ICphZGRyLCB1MTYgdmFsLCB1OCBpZHgpCiB7CiAJX19sZTE2IGJ1ZiA9IGNwdV90b19sZTE2KHZhbCk7CiAKIAl1c2JfY29udHJvbF9tc2cocHJpdi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHByaXYtPnVkZXYsIDApLAogCQkJUlRMODE4N19SRVFfU0VUX1JFRywgUlRMODE4N19SRVFUX1dSSVRFLAotCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgMCwgJmJ1Ziwgc2l6ZW9mKGJ1ZiksIEhaIC8gMik7CisJCQkodW5zaWduZWQgbG9uZylhZGRyLCBpZHggJiAweDAzLCAmYnVmLCBzaXplb2YoYnVmKSwKKwkJCUhaIC8gMik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGUzMihzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LAotCQkJCSAgICAgX19sZTMyICphZGRyLCB1MzIgdmFsKQorc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxOHhfaW93cml0ZTE2KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIF9fbGUxNiAqYWRkciwKKwkJCQkgICAgIHUxNiB2YWwpCit7CisJcnRsODE4eF9pb3dyaXRlMTZfaWR4KHByaXYsIGFkZHIsIHZhbCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGUzMl9pZHgoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwKKwkJCQkJIF9fbGUzMiAqYWRkciwgdTMyIHZhbCwgdTggaWR4KQogewogCV9fbGUzMiBidWYgPSBjcHVfdG9fbGUzMih2YWwpOwogCiAJdXNiX2NvbnRyb2xfbXNnKHByaXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShwcml2LT51ZGV2LCAwKSwKIAkJCVJUTDgxODdfUkVRX1NFVF9SRUcsIFJUTDgxODdfUkVRVF9XUklURSwKLQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIDAsICZidWYsIHNpemVvZihidWYpLCBIWiAvIDIpOworCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgaWR4ICYgMHgwMywgJmJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQlIWiAvIDIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE4eF9pb3dyaXRlMzIoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwgX19sZTMyICphZGRyLAorCQkJCSAgICAgdTMyIHZhbCkKK3sKKwlydGw4MTh4X2lvd3JpdGUzMl9pZHgocHJpdiwgYWRkciwgdmFsLCAwKTsKIH0KIAogI2VuZGlmIC8qIFJUTDgxODdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODdfZGV2LmMKaW5kZXggOTIyM2FkYS4uZDMwNjdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jCkBAIC0yNywxOSArMjcsMjEgQEAKIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Iik7CiBNT0RVTEVfQVVUSE9SKCJBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJUTDgxODcgVVNCIHdpcmVsZXNzIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSVEw4MTg3L1JUTDgxODdCIFVTQiB3aXJlbGVzcyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJ0bDgxODdfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewogCS8qIFJlYWx0ZWsgKi8KLQl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE4Nyl9LAorCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTg3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAorCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTg5KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKKwl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE5NyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCiAJLyogTmV0Z2VhciAqLwotCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg2MTAwKX0sCi0Je1VTQl9ERVZJQ0UoMHgwODQ2LCAweDZhMDApfSwKKwl7VVNCX0RFVklDRSgweDA4NDYsIDB4NjEwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKKwl7VVNCX0RFVklDRSgweDA4NDYsIDB4NmEwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKIAkvKiBIUCAqLwotCXtVU0JfREVWSUNFKDB4MDNmMCwgMHhjYTAyKX0sCisJe1VTQl9ERVZJQ0UoMHgwM2YwLCAweGNhMDIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCiAJLyogU2l0ZWNvbSAqLwotCXtVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDBkKX0sCisJe1VTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMGQpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCiAJe30KIH07CiAKQEAgLTE1MCwyNyArMTUyLDI1IEBACiAKIHN0YXRpYyB2b2lkIHJ0bDgxODdfdHhfY2Ioc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopdXJiLT5jb250ZXh0OwotCXN0cnVjdCBydGw4MTg3X3R4X2luZm8gKmluZm8gPSAoc3RydWN0IHJ0bDgxODdfdHhfaW5mbyAqKXNrYi0+Y2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gaW5mby0+ZHJpdmVyX2RhdGFbMF07CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKLQotCXVzYl9mcmVlX3VyYihpbmZvLT51cmIpOwotCWlmIChpbmZvLT5jb250cm9sKQotCQltZW1jcHkoJnN0YXR1cy5jb250cm9sLCBpbmZvLT5jb250cm9sLCBzaXplb2Yoc3RhdHVzLmNvbnRyb2wpKTsKLQlrZnJlZShpbmZvLT5jb250cm9sKTsKLQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgcnRsODE4N190eF9oZHIpKTsKLQlzdGF0dXMuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7Ci0JaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGluZm8tPmRldiwgc2tiLCAmc3RhdHVzKTsKKwl1c2JfZnJlZV91cmIoaW5mby0+ZHJpdmVyX2RhdGFbMV0pOworCXNrYl9wdWxsKHNrYiwgcHJpdi0+aXNfcnRsODE4N2IgPyBzaXplb2Yoc3RydWN0IHJ0bDgxODdiX3R4X2hkcikgOgorCQkJCQkgIHNpemVvZihzdHJ1Y3QgcnRsODE4N190eF9oZHIpKTsKKwltZW1zZXQoJmluZm8tPnN0YXR1cywgMCwgc2l6ZW9mKGluZm8tPnN0YXR1cykpOworCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CiB9CiAKLXN0YXRpYyBpbnQgcnRsODE4N190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKK3N0YXRpYyBpbnQgcnRsODE4N190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcnRsODE4N190eF9oZHIgKmhkcjsKLQlzdHJ1Y3QgcnRsODE4N190eF9pbmZvICppbmZvOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwl1bnNpZ25lZCBpbnQgZXA7CisJdm9pZCAqYnVmOwogCXN0cnVjdCB1cmIgKnVyYjsKIAlfX2xlMTYgcnRzX2R1ciA9IDA7CiAJdTMyIGZsYWdzOwpAQCAtMTg1LDM1ICsxODUsNjAgQEAKIAlmbGFncyA9IHNrYi0+bGVuOwogCWZsYWdzIHw9IFJUTDgxODdfVFhfRkxBR19OT19FTkNSWVBUOwogCi0JQlVHX09OKCFjb250cm9sLT50eF9yYXRlKTsKLQotCWZsYWdzIHw9IGNvbnRyb2wtPnR4X3JhdGUtPmh3X3ZhbHVlIDw8IDI0OwotCWlmIChpZWVlODAyMTFfZ2V0X21vcmVmcmFnKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSkpCisJZmxhZ3MgfD0gaWVlZTgwMjExX2dldF90eF9yYXRlKGRldiwgaW5mbyktPmh3X3ZhbHVlIDw8IDI0OworCWlmIChpZWVlODAyMTFfaGFzX21vcmVmcmFncygoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhKS0+ZnJhbWVfY29udHJvbCkpCiAJCWZsYWdzIHw9IFJUTDgxODdfVFhfRkxBR19NT1JFX0ZSQUc7Ci0JaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKSB7Ci0JCUJVR19PTighY29udHJvbC0+cnRzX2N0c19yYXRlKTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9SVFNfQ1RTKSB7CiAJCWZsYWdzIHw9IFJUTDgxODdfVFhfRkxBR19SVFM7Ci0JCWZsYWdzIHw9IGNvbnRyb2wtPnJ0c19jdHNfcmF0ZS0+aHdfdmFsdWUgPDwgMTk7CisJCWZsYWdzIHw9IGllZWU4MDIxMV9nZXRfcnRzX2N0c19yYXRlKGRldiwgaW5mbyktPmh3X3ZhbHVlIDw8IDE5OwogCQlydHNfZHVyID0gaWVlZTgwMjExX3J0c19kdXJhdGlvbihkZXYsIHByaXYtPnZpZiwKLQkJCQkJCSBza2ItPmxlbiwgY29udHJvbCk7Ci0JfSBlbHNlIGlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QpIHsKLQkJQlVHX09OKCFjb250cm9sLT5ydHNfY3RzX3JhdGUpOworCQkJCQkJIHNrYi0+bGVuLCBpbmZvKTsKKwl9IGVsc2UgaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfQ1RTX1BST1RFQ1QpIHsKIAkJZmxhZ3MgfD0gUlRMODE4N19UWF9GTEFHX0NUUzsKLQkJZmxhZ3MgfD0gY29udHJvbC0+cnRzX2N0c19yYXRlLT5od192YWx1ZSA8PCAxOTsKKwkJZmxhZ3MgfD0gaWVlZTgwMjExX2dldF9ydHNfY3RzX3JhdGUoZGV2LCBpbmZvKS0+aHdfdmFsdWUgPDwgMTk7CiAJfQogCi0JaGRyID0gKHN0cnVjdCBydGw4MTg3X3R4X2hkciAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQloZHItPmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwotCWhkci0+bGVuID0gMDsKLQloZHItPnJ0c19kdXJhdGlvbiA9IHJ0c19kdXI7Ci0JaGRyLT5yZXRyeSA9IGNwdV90b19sZTMyKGNvbnRyb2wtPnJldHJ5X2xpbWl0IDw8IDgpOworCWlmICghcHJpdi0+aXNfcnRsODE4N2IpIHsKKwkJc3RydWN0IHJ0bDgxODdfdHhfaGRyICpoZHIgPQorCQkJKHN0cnVjdCBydGw4MTg3X3R4X2hkciAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKKwkJaGRyLT5mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKKwkJaGRyLT5sZW4gPSAwOworCQloZHItPnJ0c19kdXJhdGlvbiA9IHJ0c19kdXI7CisJCWhkci0+cmV0cnkgPSBjcHVfdG9fbGUzMihpbmZvLT5jb250cm9sLnJldHJ5X2xpbWl0IDw8IDgpOworCQlidWYgPSBoZHI7CiAKLQlpbmZvID0gKHN0cnVjdCBydGw4MTg3X3R4X2luZm8gKilza2ItPmNiOwotCWluZm8tPmNvbnRyb2wgPSBrbWVtZHVwKGNvbnRyb2wsIHNpemVvZigqY29udHJvbCksIEdGUF9BVE9NSUMpOwotCWluZm8tPnVyYiA9IHVyYjsKLQlpbmZvLT5kZXYgPSBkZXY7Ci0JdXNiX2ZpbGxfYnVsa191cmIodXJiLCBwcml2LT51ZGV2LCB1c2Jfc25kYnVsa3BpcGUocHJpdi0+dWRldiwgMiksCi0JCQkgIGhkciwgc2tiLT5sZW4sIHJ0bDgxODdfdHhfY2IsIHNrYik7CisJCWVwID0gMjsKKwl9IGVsc2UgeworCQkvKiBmYyBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJlZm9yZSBza2JfcHVzaCgpICovCisJCXVuc2lnbmVkIGludCBlcG1hcFs0XSA9IHsgNiwgNywgNSwgNCB9OworCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqdHhfaGRyID0KKwkJCShzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOworCQl1MTYgZmMgPSBsZTE2X3RvX2NwdSh0eF9oZHItPmZyYW1lX2NvbnRyb2wpOworCisJCXN0cnVjdCBydGw4MTg3Yl90eF9oZHIgKmhkciA9CisJCQkoc3RydWN0IHJ0bDgxODdiX3R4X2hkciAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKKwkJc3RydWN0IGllZWU4MDIxMV9yYXRlICp0eHJhdGUgPQorCQkJaWVlZTgwMjExX2dldF90eF9yYXRlKGRldiwgaW5mbyk7CisJCW1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7CisJCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CisJCWhkci0+cnRzX2R1cmF0aW9uID0gcnRzX2R1cjsKKwkJaGRyLT5yZXRyeSA9IGNwdV90b19sZTMyKGluZm8tPmNvbnRyb2wucmV0cnlfbGltaXQgPDwgOCk7CisJCWhkci0+dHhfZHVyYXRpb24gPQorCQkJaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oZGV2LCBwcml2LT52aWYsCisJCQkJCQkJIHNrYi0+bGVuLCB0eHJhdGUpOworCQlidWYgPSBoZHI7CisKKwkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkKKwkJCWVwID0gMTI7CisJCWVsc2UKKwkJCWVwID0gZXBtYXBbc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYildOworCX0KKworCWluZm8tPmRyaXZlcl9kYXRhWzBdID0gZGV2OworCWluZm8tPmRyaXZlcl9kYXRhWzFdID0gdXJiOworCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBwcml2LT51ZGV2LCB1c2Jfc25kYnVsa3BpcGUocHJpdi0+dWRldiwgZXApLAorCQkJICBidWYsIHNrYi0+bGVuLCBydGw4MTg3X3R4X2NiLCBza2IpOwogCXJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmMgPCAwKSB7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwpAQCAtMjI5LDcgKzI1NCw2IEBACiAJc3RydWN0IHJ0bDgxODdfcnhfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgcnRsODE4N19yeF9pbmZvICopc2tiLT5jYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBpbmZvLT5kZXY7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcnRsODE4N19yeF9oZHIgKmhkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXMgPSB7IDAgfTsKIAlpbnQgcmF0ZSwgc2lnbmFsOwogCXUzMiBmbGFnczsKQEAgLTI1MCwxMSArMjc0LDMzIEBACiAJfQogCiAJc2tiX3B1dChza2IsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JaGRyID0gKHN0cnVjdCBydGw4MTg3X3J4X2hkciAqKShza2JfdGFpbF9wb2ludGVyKHNrYikgLSBzaXplb2YoKmhkcikpOwotCWZsYWdzID0gbGUzMl90b19jcHUoaGRyLT5mbGFncyk7Ci0Jc2tiX3RyaW0oc2tiLCBmbGFncyAmIDB4MEZGRik7CisJaWYgKCFwcml2LT5pc19ydGw4MTg3YikgeworCQlzdHJ1Y3QgcnRsODE4N19yeF9oZHIgKmhkciA9CisJCQkodHlwZW9mKGhkcikpKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIHNpemVvZigqaGRyKSk7CisJCWZsYWdzID0gbGUzMl90b19jcHUoaGRyLT5mbGFncyk7CisJCXNpZ25hbCA9IGhkci0+c2lnbmFsICYgMHg3ZjsKKwkJcnhfc3RhdHVzLmFudGVubmEgPSAoaGRyLT5zaWduYWwgPj4gNykgJiAxOworCQlyeF9zdGF0dXMuc2lnbmFsID0gc2lnbmFsOworCQlyeF9zdGF0dXMubm9pc2UgPSBoZHItPm5vaXNlOworCQlyeF9zdGF0dXMubWFjdGltZSA9IGxlNjRfdG9fY3B1KGhkci0+bWFjX3RpbWUpOworCQlwcml2LT5zaWduYWwgPSBzaWduYWw7CisJCXByaXYtPnF1YWxpdHkgPSBzaWduYWw7CisJCXByaXYtPm5vaXNlID0gaGRyLT5ub2lzZTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcnRsODE4N2JfcnhfaGRyICpoZHIgPQorCQkJKHR5cGVvZihoZHIpKShza2JfdGFpbF9wb2ludGVyKHNrYikgLSBzaXplb2YoKmhkcikpOworCQlmbGFncyA9IGxlMzJfdG9fY3B1KGhkci0+ZmxhZ3MpOworCQlzaWduYWwgPSBoZHItPmFnYyA+PiAxOworCQlyeF9zdGF0dXMuYW50ZW5uYSA9IChoZHItPnNpZ25hbCA+PiA3KSAmIDE7CisJCXJ4X3N0YXR1cy5zaWduYWwgPSA2NCAtIG1pbihoZHItPm5vaXNlLCAodTgpNjQpOworCQlyeF9zdGF0dXMubm9pc2UgPSBoZHItPm5vaXNlOworCQlyeF9zdGF0dXMubWFjdGltZSA9IGxlNjRfdG9fY3B1KGhkci0+bWFjX3RpbWUpOworCQlwcml2LT5zaWduYWwgPSBoZHItPnNpZ25hbDsKKwkJcHJpdi0+cXVhbGl0eSA9IGhkci0+YWdjID4+IDE7CisJCXByaXYtPm5vaXNlID0gaGRyLT5ub2lzZTsKKwl9CiAKLQlzaWduYWwgPSBoZHItPmFnYyA+PiAxOworCXNrYl90cmltKHNrYiwgZmxhZ3MgJiAweDBGRkYpOwogCXJhdGUgPSAoZmxhZ3MgPj4gMjApICYgMHhGOwogCWlmIChyYXRlID4gMykgewkvKiBPRkRNIHJhdGUgKi8KIAkJaWYgKHNpZ25hbCA+IDkwKQpAQCAtMjcwLDEzICszMTYsMTEgQEAKIAkJc2lnbmFsID0gOTUgLSBzaWduYWw7CiAJfQogCi0Jcnhfc3RhdHVzLmFudGVubmEgPSAoaGRyLT5zaWduYWwgPj4gNykgJiAxOwotCXJ4X3N0YXR1cy5zaWduYWwgPSA2NCAtIG1pbihoZHItPm5vaXNlLCAodTgpNjQpOwotCXJ4X3N0YXR1cy5zc2kgPSBzaWduYWw7CisJcnhfc3RhdHVzLnF1YWwgPSBwcml2LT5xdWFsaXR5OworCXJ4X3N0YXR1cy5zaWduYWwgPSBzaWduYWw7CiAJcnhfc3RhdHVzLnJhdGVfaWR4ID0gcmF0ZTsKIAlyeF9zdGF0dXMuZnJlcSA9IGRldi0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKIAlyeF9zdGF0dXMuYmFuZCA9IGRldi0+Y29uZi5jaGFubmVsLT5iYW5kOwotCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUoaGRyLT5tYWNfdGltZSk7CiAJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19UU0ZUOwogCWlmIChmbGFncyAmICgxIDw8IDEzKSkKIAkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKQEAgLTMxNiw3ICszNjAsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJdXNiX2ZpbGxfYnVsa191cmIoZW50cnksIHByaXYtPnVkZXYsCi0JCQkJICB1c2JfcmN2YnVsa3BpcGUocHJpdi0+dWRldiwgMSksCisJCQkJICB1c2JfcmN2YnVsa3BpcGUocHJpdi0+dWRldiwKKwkJCQkgIHByaXYtPmlzX3J0bDgxODdiID8gMyA6IDEpLAogCQkJCSAgc2tiX3RhaWxfcG9pbnRlcihza2IpLAogCQkJCSAgUlRMODE4N19NQVhfUlgsIHJ0bDgxODdfcnhfY2IsIHNrYik7CiAJCWluZm8gPSAoc3RydWN0IHJ0bDgxODdfcnhfaW5mbyAqKXNrYi0+Y2I7CkBAIC0zMjksMjkgKzM3NCwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0bDgxODdfaW5pdF9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCitzdGF0aWMgaW50IHJ0bDgxODdfY21kX3Jlc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCXU4IHJlZzsKIAlpbnQgaTsKIAotCS8qIHJlc2V0ICovCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcgfCBSVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNLCBSVEw4MjI1X0FOQVBBUkFNX09OKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsIFJUTDgyMjVfQU5BUEFSQU0yX09OKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMCk7Ci0KLQltc2xlZXAoMjAwKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkUxOCwgMHgxMCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFMTgsIDB4MTEpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTE4LCAweDAwKTsKLQltc2xlZXAoMjAwKTsKLQogCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpOwogCXJlZyAmPSAoMSA8PCAxKTsKIAlyZWcgfD0gUlRMODE4WF9DTURfUkVTRVQ7CkBAIC0zODcsMTIgKzQxNSw1MiBAQAogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MTg3X2luaXRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTggcmVnOworCWludCByZXM7CisKKwkvKiByZXNldCAqLworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcgfAorCQkJIFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0sCisJCQkgIFJUTDgxODdfUlRMODIyNV9BTkFQQVJBTV9PTik7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLAorCQkJICBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU0yX09OKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyAmCisJCQkgflJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELAorCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOworCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+SU5UX01BU0ssIDApOworCisJbXNsZWVwKDIwMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFMTgsIDB4MTApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTE4LCAweDExKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkUxOCwgMHgwMCk7CisJbXNsZWVwKDIwMCk7CisKKwlyZXMgPSBydGw4MTg3X2NtZF9yZXNldChkZXYpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwogCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyB8IFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0sIFJUTDgyMjVfQU5BUEFSQU1fT04pOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNMiwgUlRMODIyNV9BTkFQQVJBTTJfT04pOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnICYgflJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLAorCQkJcmVnIHwgUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTSwKKwkJCSAgUlRMODE4N19SVEw4MjI1X0FOQVBBUkFNX09OKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsCisJCQkgIFJUTDgxODdfUlRMODIyNV9BTkFQQVJBTTJfT04pOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywKKwkJCXJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CiAKIAkvKiBzZXR1cCBjYXJkICovCkBAIC00MzcsOSArNTA1LDExIEBACiAJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkZfVElNSU5HLCAweDAwMGE4MDA4KTsKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSLCAweEZGRkYpOwogCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJGX1BBUkEsIDB4MDAxMDAwNDQpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELAorCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgMHg0NCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsCisJCQkgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CiAJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlLCAweDFGRjcpOwogCW1zbGVlcCgxMDApOwogCkBAIC00NTYsMTYgKzUyNiwyMDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHU4IHJ0bDgxODdiX3JlZ190YWJsZVtdWzNdID0geworCXsweEYwLCAweDMyLCAwfSwgezB4RjEsIDB4MzIsIDB9LCB7MHhGMiwgMHgwMCwgMH0sIHsweEYzLCAweDAwLCAwfSwKKwl7MHhGNCwgMHgzMiwgMH0sIHsweEY1LCAweDQzLCAwfSwgezB4RjYsIDB4MDAsIDB9LCB7MHhGNywgMHgwMCwgMH0sCisJezB4RjgsIDB4NDYsIDB9LCB7MHhGOSwgMHhBNCwgMH0sIHsweEZBLCAweDAwLCAwfSwgezB4RkIsIDB4MDAsIDB9LAorCXsweEZDLCAweDk2LCAwfSwgezB4RkQsIDB4QTQsIDB9LCB7MHhGRSwgMHgwMCwgMH0sIHsweEZGLCAweDAwLCAwfSwKKworCXsweDU4LCAweDRCLCAxfSwgezB4NTksIDB4MDAsIDF9LCB7MHg1QSwgMHg0QiwgMX0sIHsweDVCLCAweDAwLCAxfSwKKwl7MHg2MCwgMHg0QiwgMX0sIHsweDYxLCAweDA5LCAxfSwgezB4NjIsIDB4NEIsIDF9LCB7MHg2MywgMHgwOSwgMX0sCisJezB4Q0UsIDB4MEYsIDF9LCB7MHhDRiwgMHgwMCwgMX0sIHsweEUwLCAweEZGLCAxfSwgezB4RTEsIDB4MEYsIDF9LAorCXsweEUyLCAweDAwLCAxfSwgezB4RjAsIDB4NEUsIDF9LCB7MHhGMSwgMHgwMSwgMX0sIHsweEYyLCAweDAyLCAxfSwKKwl7MHhGMywgMHgwMywgMX0sIHsweEY0LCAweDA0LCAxfSwgezB4RjUsIDB4MDUsIDF9LCB7MHhGNiwgMHgwNiwgMX0sCisJezB4RjcsIDB4MDcsIDF9LCB7MHhGOCwgMHgwOCwgMX0sCisKKwl7MHg0RSwgMHgwMCwgMn0sIHsweDBDLCAweDA0LCAyfSwgezB4MjEsIDB4NjEsIDJ9LCB7MHgyMiwgMHg2OCwgMn0sCisJezB4MjMsIDB4NkYsIDJ9LCB7MHgyNCwgMHg3NiwgMn0sIHsweDI1LCAweDdELCAyfSwgezB4MjYsIDB4ODQsIDJ9LAorCXsweDI3LCAweDhELCAyfSwgezB4NEQsIDB4MDgsIDJ9LCB7MHg1MCwgMHgwNSwgMn0sIHsweDUxLCAweEY1LCAyfSwKKwl7MHg1MiwgMHgwNCwgMn0sIHsweDUzLCAweEEwLCAyfSwgezB4NTQsIDB4MUYsIDJ9LCB7MHg1NSwgMHgyMywgMn0sCisJezB4NTYsIDB4NDUsIDJ9LCB7MHg1NywgMHg2NywgMn0sIHsweDU4LCAweDA4LCAyfSwgezB4NTksIDB4MDgsIDJ9LAorCXsweDVBLCAweDA4LCAyfSwgezB4NUIsIDB4MDgsIDJ9LCB7MHg2MCwgMHgwOCwgMn0sIHsweDYxLCAweDA4LCAyfSwKKwl7MHg2MiwgMHgwOCwgMn0sIHsweDYzLCAweDA4LCAyfSwgezB4NjQsIDB4Q0YsIDJ9LCB7MHg3MiwgMHg1NiwgMn0sCisJezB4NzMsIDB4OUEsIDJ9LAorCisJezB4MzQsIDB4RjAsIDB9LCB7MHgzNSwgMHgwRiwgMH0sIHsweDVCLCAweDQwLCAwfSwgezB4ODQsIDB4ODgsIDB9LAorCXsweDg1LCAweDI0LCAwfSwgezB4ODgsIDB4NTQsIDB9LCB7MHg4QiwgMHhCOCwgMH0sIHsweDhDLCAweDA3LCAwfSwKKwl7MHg4RCwgMHgwMCwgMH0sIHsweDk0LCAweDFCLCAwfSwgezB4OTUsIDB4MTIsIDB9LCB7MHg5NiwgMHgwMCwgMH0sCisJezB4OTcsIDB4MDYsIDB9LCB7MHg5RCwgMHgxQSwgMH0sIHsweDlGLCAweDEwLCAwfSwgezB4QjQsIDB4MjIsIDB9LAorCXsweEJFLCAweDgwLCAwfSwgezB4REIsIDB4MDAsIDB9LCB7MHhFRSwgMHgwMCwgMH0sIHsweDkxLCAweDAzLCAwfSwKKworCXsweDRDLCAweDAwLCAyfSwgezB4OUYsIDB4MDAsIDN9LCB7MHg4QywgMHgwMSwgMH0sIHsweDhELCAweDEwLCAwfSwKKwl7MHg4RSwgMHgwOCwgMH0sIHsweDhGLCAweDAwLCAwfQorfTsKKworc3RhdGljIGludCBydGw4MTg3Yl9pbml0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCByZXMsIGk7CisJdTggcmVnOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELAorCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOworCisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOworCXJlZyB8PSBSVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUgfCBSVEw4MThYX0NPTkZJRzNfR05UX1NFTEVDVDsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLAorCQkJICBSVEw4MTg3Ql9SVEw4MjI1X0FOQVBBUkFNMl9PTik7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0sCisJCQkgIFJUTDgxODdCX1JUTDgyMjVfQU5BUEFSQU1fT04pOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0zLAorCQkJIFJUTDgxODdCX1JUTDgyMjVfQU5BUEFSQU0zX09OKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRjYxLCAweDEwKTsKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgKHU4ICopMHhGRjYyKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkY2MiwgcmVnICYgfigxIDw8IDUpKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkY2MiwgcmVnIHwgKDEgPDwgNSkpOworCisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOworCXJlZyAmPSB+UlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKworCXJlcyA9IHJ0bDgxODdfY21kX3Jlc2V0KGRldik7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIChfX2xlMTYgKikweEZGMkQsIDB4MEZGRik7CisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNXX0NPTkYpOworCXJlZyB8PSBSVEw4MThYX0NXX0NPTkZfUEVSUEFDS0VUX1JFVFJZX1NISUZUOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q1dfQ09ORiwgcmVnKTsKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCk7CisJcmVnIHw9IFJUTDgxOFhfVFhfQUdDX0NUTF9QRVJQQUNLRVRfR0FJTl9TSElGVCB8CisJICAgICAgIFJUTDgxOFhfVFhfQUdDX0NUTF9QRVJQQUNLRVRfQU5UU0VMX1NISUZUOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCwgcmVnKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRkUwLCAweDBGRkYsIDEpOworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLKTsKKwlyZWcgfD0gUlRMODE4WF9SQVRFX0ZBTExCQUNLX0VOQUJMRTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0ssIHJlZyk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CRUFDT05fSU5URVJWQUwsIDEwMCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QVRJTV9XTkQsIDIpOworCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRkQ0LCAweEZGRkYsIDEpOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELAorCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcxKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzEsIChyZWcgJiAweDNGKSB8IDB4ODApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+V1BBX0NPTkYsIDApOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgxODdiX3JlZ190YWJsZSk7IGkrKykgeworCQlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LAorCQkJCSAgICAgKHU4ICopKHVpbnRwdHJfdCkKKwkJCQkgICAgIChydGw4MTg3Yl9yZWdfdGFibGVbaV1bMF0gfCAweEZGMDApLAorCQkJCSAgICAgcnRsODE4N2JfcmVnX3RhYmxlW2ldWzFdLAorCQkJCSAgICAgcnRsODE4N2JfcmVnX3RhYmxlW2ldWzJdKTsKKwl9CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5USURfQUNfTUFQLCAweEZBNTApOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NSUcsIDApOworCisJcnRsODE4eF9pb3dyaXRlMzJfaWR4KHByaXYsIChfX2xlMzIgKikweEZGRjAsIDAsIDEpOworCXJ0bDgxOHhfaW93cml0ZTMyX2lkeChwcml2LCAoX19sZTMyICopMHhGRkY0LCAwLCAxKTsKKwlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LCAodTggKikweEZGRjgsIDAsIDEpOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkZfVElNSU5HLCAweDAwMDA0MDAxKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRjcyLCAweDU2OUEsIDIpOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELAorCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKKwlyZWcgfD0gUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsCisJCQkgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIDB4MDQ4MCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAweDI0ODgpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKKwltc2xlZXAoMTEwMCk7CisKKwlwcml2LT5yZi0+aW5pdChkZXYpOworCisJcmVnID0gUlRMODE4WF9DTURfVFhfRU5BQkxFIHwgUlRMODE4WF9DTURfUlhfRU5BQkxFOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NQVNLLCAweEZGRkYpOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFNDEsIDB4RjQpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTQwLCAweDAwKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkU0MiwgMHgwMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFNDIsIDB4MDEpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTQwLCAweDBGKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkU0MiwgMHgwMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFNDIsIDB4MDEpOworCisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICh1OCAqKTB4RkZEQik7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZGREIsIHJlZyB8ICgxIDw8IDIpKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3MiwgMHg1OUZBLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3NCwgMHg1OUQyLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3NiwgMHg1OUQyLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3OCwgMHgxOUZBLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3QSwgMHgxOUZBLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3QywgMHgwMEQwLCAzKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkY2MSwgMCk7CisJcnRsODE4eF9pb3dyaXRlOF9pZHgocHJpdiwgKHU4ICopMHhGRjgwLCAweDBGLCAxKTsKKwlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LCAodTggKikweEZGODMsIDB4MDMsIDEpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRkRBLCAweDEwKTsKKwlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LCAodTggKikweEZGNEQsIDB4MDgsIDIpOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+SFNTSV9QQVJBLCAweDA2MDAzMjFCKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRkVDLCAweDA4MDAsIDEpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcnRsODE4N19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAl1MzIgcmVnOwogCWludCByZXQ7CiAKLQlyZXQgPSBydGw4MTg3X2luaXRfaHcoZGV2KTsKKwlyZXQgPSAoIXByaXYtPmlzX3J0bDgxODdiKSA/IHJ0bDgxODdfaW5pdF9odyhkZXYpIDoKKwkJCQkgICAgIHJ0bDgxODdiX2luaXRfaHcoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJaWYgKHByaXYtPmlzX3J0bDgxODdiKSB7CisJCXJlZyA9IFJUTDgxOFhfUlhfQ09ORl9NR01UIHwKKwkJICAgICAgUlRMODE4WF9SWF9DT05GX0RBVEEgfAorCQkgICAgICBSVEw4MThYX1JYX0NPTkZfQlJPQURDQVNUIHwKKwkJICAgICAgUlRMODE4WF9SWF9DT05GX05JQ01BQyB8CisJCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9CU1NJRCB8CisJCSAgICAgICg3IDw8IDEzIC8qIFJYIEZJRk8gdGhyZXNob2xkIE5PTkUgKi8pIHwKKwkJICAgICAgKDcgPDwgMTAgLyogTUFYIFJYIERNQSAqLykgfAorCQkgICAgICBSVEw4MThYX1JYX0NPTkZfUlhfQVVUT1JFU0VUUEhZIHwKKwkJICAgICAgUlRMODE4WF9SWF9DT05GX09OTFlFUkxQS1QgfAorCQkgICAgICBSVEw4MThYX1JYX0NPTkZfTVVMVElDQVNUOworCQlwcml2LT5yeF9jb25mID0gcmVnOworCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GLCByZWcpOworCisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRYX0NPTkYsCisJCQkJICBSVEw4MThYX1RYX0NPTkZfSFdfU0VRTlVNIHwKKwkJCQkgIFJUTDgxOFhfVFhfQ09ORl9ESVNSRVFRU0laRSB8CisJCQkJICAoNyA8PCA4ICAvKiBzaG9ydCByZXRyeSBsaW1pdCAqLykgfAorCQkJCSAgKDcgPDwgMCAgLyogbG9uZyByZXRyeSBsaW1pdCAqLykgfAorCQkJCSAgKDcgPDwgMjEgLyogTUFYIFRYIERNQSAqLykpOworCQlydGw4MTg3X2luaXRfdXJicyhkZXYpOworCQlyZXR1cm4gMDsKKwl9CisKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMHhGRkZGKTsKIAogCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPk1BUlswXSwgfjApOwpAQCAtNTkyLDE4ICs4NDcsMjAgQEAKIAltc2xlZXAoMTApOwogCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRYX0NPTkYsIHJlZyk7CiAKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlNJRlMsIDB4MjIpOworCWlmICghcHJpdi0+aXNfcnRsODE4N2IpIHsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TSUZTLCAweDIyKTsKIAotCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1NIT1JUX1NMT1RfVElNRSkgewotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlNMT1QsIDB4OSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RElGUywgMHgxNCk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUlGUywgOTEgLSAweDE0KTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DV19WQUwsIDB4NzMpOwotCX0gZWxzZSB7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0xPVCwgMHgxNCk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RElGUywgMHgyNCk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUlGUywgOTEgLSAweDI0KTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DV19WQUwsIDB4YTUpOworCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9TSE9SVF9TTE9UX1RJTUUpIHsKKwkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0xPVCwgMHg5KTsKKwkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RElGUywgMHgxNCk7CisJCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVJRlMsIDkxIC0gMHgxNCk7CisJCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNXX1ZBTCwgMHg3Myk7CisJCX0gZWxzZSB7CisJCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlNMT1QsIDB4MTQpOworCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5ESUZTLCAweDI0KTsKKwkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUlGUywgOTEgLSAweDI0KTsKKwkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q1dfVkFMLCAweGE1KTsKKwkJfQogCX0KIAogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkFUSU1fV05ELCAyKTsKQEAgLTYxOSwxNCArODc2LDIwIEBACiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlpbnQgaTsKKwl1OCByZWc7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKIAkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5CU1NJRFtpXSwgY29uZi0+YnNzaWRbaV0pOwogCi0JaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoY29uZi0+YnNzaWQpKQotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPk1TUiwgUlRMODE4WF9NU1JfSU5GUkEpOwotCWVsc2UKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5NU1IsIFJUTDgxOFhfTVNSX05PX0xJTkspOworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGNvbmYtPmJzc2lkKSkgeworCQlyZWcgPSBSVEw4MThYX01TUl9JTkZSQTsKKwkJaWYgKHByaXYtPmlzX3J0bDgxODdiKQorCQkJcmVnIHw9IFJUTDgxOFhfTVNSX0VORURDQTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5NU1IsIHJlZyk7CisJfSBlbHNlIHsKKwkJcmVnID0gUlRMODE4WF9NU1JfTk9fTElOSzsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5NU1IsIHJlZyk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC03MTMsNiArOTc2LDcgQEAKIAlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2OwogCXN0cnVjdCBlZXByb21fOTNjeDYgZWVwcm9tOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwljb25zdCBjaGFyICpjaGlwX25hbWU7CiAJdTE2IHR4cHdyLCByZWc7CiAJaW50IGVyciwgaTsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKQEAgLTcyNCw2ICs5ODgsNyBAQAogCX0KIAogCXByaXYgPSBkZXYtPnByaXY7CisJcHJpdi0+aXNfcnRsODE4N2IgPSAoaWQtPmRyaXZlcl9pbmZvID09IERFVklDRV9SVEw4MTg3Qik7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihkZXYsICZpbnRmLT5kZXYpOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTsKQEAgLTc1MCwxMSArMTAxNSw5IEBACiAKIAlwcml2LT5tb2RlID0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUjsKIAlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JCSAgICAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsKLQlkZXYtPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBydGw4MTg3X3R4X2hkcik7Ci0JZGV2LT5xdWV1ZXMgPSAxOwotCWRldi0+bWF4X3Jzc2kgPSA2NTsKLQlkZXYtPm1heF9zaWduYWwgPSA2NDsKKwkJICAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQzsKKwlkZXYtPm1heF9zaWduYWwgPSA2NTsKIAogCWVlcHJvbS5kYXRhID0gZGV2OwogCWVlcHJvbS5yZWdpc3Rlcl9yZWFkID0gcnRsODE4N19lZXByb21fcmVnaXN0ZXJfcmVhZDsKQEAgLTc4OCwxMiArMTA1MSw2IEBACiAJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKIAkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKIAl9Ci0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzYgKyBpLAotCQkJCSAgJnR4cHdyKTsKLQkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgJiAweEZGOwotCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciA+PiA4OwotCX0KIAogCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIFJUTDgxODdfRUVQUk9NX1RYUFdSX0JBU0UsCiAJCQkgICZwcml2LT50eHB3cl9iYXNlKTsKQEAgLTgwNyw3ICsxMDY0LDkwIEBACiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCwgcmVnKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwogCisJaWYgKCFwcml2LT5pc19ydGw4MTg3YikgeworCQl1MzIgcmVnMzI7CisJCXJlZzMyID0gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GKTsKKwkJcmVnMzIgJj0gUlRMODE4WF9UWF9DT05GX0hXVkVSX01BU0s7CisJCXN3aXRjaCAocmVnMzIpIHsKKwkJY2FzZSBSVEw4MThYX1RYX0NPTkZfUjgxODd2RF9COgorCQkJLyogU29tZSBSVEw4MTg3QiBkZXZpY2VzIGhhdmUgYSBVU0IgSUQgb2YgMHg4MTg3CisJCQkgKiBkZXRlY3QgdGhlbSBoZXJlICovCisJCQljaGlwX25hbWUgPSAiUlRMODE4N0J2QihlYXJseSkiOworCQkJcHJpdi0+aXNfcnRsODE4N2IgPSAxOworCQkJcHJpdi0+aHdfcmV2ID0gUlRMODE4N0J2QjsKKwkJCWJyZWFrOworCQljYXNlIFJUTDgxOFhfVFhfQ09ORl9SODE4N3ZEOgorCQkJY2hpcF9uYW1lID0gIlJUTDgxODd2RCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNoaXBfbmFtZSA9ICJSVEw4MTg3dkIgKGRlZmF1bHQpIjsKKwkJfQorICAgICAgIH0gZWxzZSB7CisJCS8qCisJCSAqIEZvcmNlIFVTQiByZXF1ZXN0IHRvIHdyaXRlIHJhZGlvIHJlZ2lzdGVycyBmb3IgODE4N0IsIFJlYWx0ZWsKKwkJICogb25seSB1c2VzIGl0IGluIHRoZWlyIHNvdXJjZXMKKwkJICovCisJCS8qaWYgKHByaXYtPmFzaWNfcmV2ID09IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInJ0bDgxODc6IEZvcmNpbmcgdXNlIG9mIFVTQiAiCisJCQkgICAgICAgInJlcXVlc3RzIHRvIHdyaXRlIHRvIHJhZGlvIHJlZ2lzdGVyc1xuIik7CisJCQlwcml2LT5hc2ljX3JldiA9IDE7CisJCX0qLworCQlzd2l0Y2ggKHJ0bDgxOHhfaW9yZWFkOChwcml2LCAodTggKikweEZGRTEpKSB7CisJCWNhc2UgUlRMODE4WF9SODE4N0JfQjoKKwkJCWNoaXBfbmFtZSA9ICJSVEw4MTg3QnZCIjsKKwkJCXByaXYtPmh3X3JldiA9IFJUTDgxODdCdkI7CisJCQlicmVhazsKKwkJY2FzZSBSVEw4MThYX1I4MTg3Ql9EOgorCQkJY2hpcF9uYW1lID0gIlJUTDgxODdCdkQiOworCQkJcHJpdi0+aHdfcmV2ID0gUlRMODE4N0J2RDsKKwkJCWJyZWFrOworCQljYXNlIFJUTDgxOFhfUjgxODdCX0U6CisJCQljaGlwX25hbWUgPSAiUlRMODE4N0J2RSI7CisJCQlwcml2LT5od19yZXYgPSBSVEw4MTg3QnZFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljaGlwX25hbWUgPSAiUlRMODE4N0J2QiAoZGVmYXVsdCkiOworCQkJcHJpdi0+aHdfcmV2ID0gUlRMODE4N0J2QjsKKwkJfQorCX0KKworCWlmICghcHJpdi0+aXNfcnRsODE4N2IpIHsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwKKwkJCQkJICBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzYgKyBpLAorCQkJCQkgICZ0eHB3cik7CisJCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciAmIDB4RkY7CisJCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciA+PiA4OworCQl9CisJfSBlbHNlIHsKKwkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgUlRMODE4N19FRVBST01fVFhQV1JfQ0hBTl82LAorCQkJCSAgJnR4cHdyKTsKKwkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgJiAweEZGOworCisJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4MEEsICZ0eHB3cik7CisJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKKworCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCAweDFDLCAmdHhwd3IpOworCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciAmIDB4RkY7CisJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyID4+IDg7CisJfQorCisJaWYgKHByaXYtPmlzX3J0bDgxODdiKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJydGw4MTg3OiA4MTg3QiBjaGlwIGRldGVjdGVkLiBTdXBwb3J0ICIKKwkJCSJpcyBFWFBFUklNRU5UQUwsIGFuZCBjb3VsZCBkYW1hZ2UgeW91clxuIgorCQkJIiAgICAgICAgIGhhcmR3YXJlLCB1c2UgYXQgeW91ciBvd24gcmlza1xuIik7CisJaWYgKChpZC0+ZHJpdmVyX2luZm8gPT0gREVWSUNFX1JUTDgxODcpICYmIHByaXYtPmlzX3J0bDgxODdiKQorCQlwcmludGsoS0VSTl9JTkZPICJydGw4MTg3OiBpbmNvbnNpc3RlbmN5IGJldHdlZW4gaWQgd2l0aCBPRU0iCisJCSAgICAgICAiIGluZm8hXG4iKTsKKwogCXByaXYtPnJmID0gcnRsODE4N19kZXRlY3RfcmYoZGV2KTsKKwlkZXYtPmV4dHJhX3R4X2hlYWRyb29tID0gKCFwcml2LT5pc19ydGw4MTg3YikgPworCQkJCSAgc2l6ZW9mKHN0cnVjdCBydGw4MTg3X3R4X2hkcikgOgorCQkJCSAgc2l6ZW9mKHN0cnVjdCBydGw4MTg3Yl90eF9oZHIpOworCWlmICghcHJpdi0+aXNfcnRsODE4N2IpCisJCWRldi0+cXVldWVzID0gMTsKKwllbHNlCisJCWRldi0+cXVldWVzID0gNDsKIAogCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwogCWlmIChlcnIpIHsKQEAgLTgxNSw5ICsxMTU1LDkgQEAKIAkJZ290byBlcnJfZnJlZV9kZXY7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGh3YWRkciAlcywgcnRsODE4NyBWJWQgKyAlc1xuIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczogaHdhZGRyICVzLCAlcyBWJWQgKyAlc1xuIiwKIAkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgcHJpbnRfbWFjKG1hYywgZGV2LT53aXBoeS0+cGVybV9hZGRyKSwKLQkgICAgICAgcHJpdi0+YXNpY19yZXYsIHByaXYtPnJmLT5uYW1lKTsKKwkgICAgICAgY2hpcF9uYW1lLCBwcml2LT5hc2ljX3JldiwgcHJpdi0+cmYtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTg0Nyw3ICsxMTg3LDcgQEAKIAkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKIAkuaWRfdGFibGUJPSBydGw4MTg3X3RhYmxlLAogCS5wcm9iZQkJPSBydGw4MTg3X3Byb2JlLAotCS5kaXNjb25uZWN0CT0gcnRsODE4N19kaXNjb25uZWN0LAorCS5kaXNjb25uZWN0CT0gX19kZXZleGl0X3AocnRsODE4N19kaXNjb25uZWN0KSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJ0bDgxODdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19ydGw4MjI1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X3J0bDgyMjUuYwppbmRleCA5MTQ2Mzg3Li4xYmFlODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X3J0bDgyMjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X3J0bDgyMjUuYwpAQCAtMzA1LDkgKzMwNSwxMiBAQAogCS8qIGFuYXBhcmFtMiBvbiAqLwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CiAJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnIHwgUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsIFJUTDgyMjVfQU5BUEFSQU0yX09OKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywKKwkJCXJlZyB8IFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLAorCQkJICBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU0yX09OKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsCisJCQlyZWcgJiB+UlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwogCiAJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDIsIDB4NDIpOwpAQCAtNDcxLDEyICs0NzQsNDIgQEAKIAlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQxLCBydGw4MjI1X3RocmVzaG9sZFsyXSk7CiB9CiAKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfYWdjW10gPSB7CisJMHg1ZSwgMHg1ZSwgMHg1ZSwgMHg1ZSwgMHg1ZCwgMHg1YiwgMHg1OSwgMHg1NywgMHg1NSwgMHg1MywgMHg1MSwgMHg0ZiwKKwkweDRkLCAweDRiLCAweDQ5LCAweDQ3LCAweDQ1LCAweDQzLCAweDQxLCAweDNmLCAweDNkLCAweDNiLCAweDM5LCAweDM3LAorCTB4MzUsIDB4MzMsIDB4MzEsIDB4MmYsIDB4MmQsIDB4MmIsIDB4MjksIDB4MjcsIDB4MjUsIDB4MjMsIDB4MjEsIDB4MWYsCisJMHgxZCwgMHgxYiwgMHgxOSwgMHgxNywgMHgxNSwgMHgxMywgMHgxMSwgMHgwZiwgMHgwZCwgMHgwYiwgMHgwOSwgMHgwNywKKwkweDA1LCAweDAzLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorCTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MTksIDB4MTksIDB4MTksIDB4MTksIDB4MTksIDB4MTksIDB4MTksIDB4MTksCisJMHgxOSwgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNiwgMHgyNywgMHgyNywgMHgyOCwKKwkweDI4LCAweDI5LCAweDJhLCAweDJhLCAweDJhLCAweDJiLCAweDJiLCAweDJiLCAweDJjLCAweDJjLCAweDJjLCAweDJkLAorCTB4MmQsIDB4MmQsIDB4MmQsIDB4MmUsIDB4MmUsIDB4MmUsIDB4MmUsIDB4MmYsIDB4MmYsIDB4MmYsIDB4MzAsIDB4MzAsCisJMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwKKwkweDMxLCAweDMxLCAweDMxLCAweDMxLCAweDMxLCAweDMxLCAweDMxLCAweDMxCit9Oworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml9vZmRtW10gPSB7CisJMHgxMCwgMHgwZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHhmYiwgMHhmYiwgMHg2MCwKKwkweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjYsCisJMHgzMiwgMHgzMywgMHgwNywgMHhhNSwgMHg2ZiwgMHg1NSwgMHhjOCwgMHhiMywKKwkweDBhLCAweGUxLCAweDJDLCAweDhhLCAweDg2LCAweDgzLCAweDM0LCAweDBmLAorCTB4NGYsIDB4MjQsIDB4NmYsIDB4YzIsIDB4NmIsIDB4NDAsIDB4ODAsIDB4MDAsCisJMHhjMCwgMHhjMSwgMHg1OCwgMHhmMSwgMHgwMCwgMHhlNCwgMHg5MCwgMHgzZSwKKwkweDZkLCAweDNjLCAweGZiLCAweDA3Cit9OworCiBzdGF0aWMgY29uc3QgdTggcnRsODIyNXoyX3R4X3Bvd2VyX2Nja19jaDE0W10gPSB7Ci0JMHgzNiwgMHgzNSwgMHgyZSwgMHgxYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorCTB4MzYsIDB4MzUsIDB4MmUsIDB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgyZiwgMHgyOSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDJmLCAweDI5LCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MmYsIDB4MjksIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKIH07CiAKIHN0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfdHhfcG93ZXJfY2NrW10gPSB7Ci0JMHgzNiwgMHgzNSwgMHgyZSwgMHgyNSwgMHgxYywgMHgxMiwgMHgwOSwgMHgwNAorCTB4MzYsIDB4MzUsIDB4MmUsIDB4MjUsIDB4MWMsIDB4MTIsIDB4MDksIDB4MDQsCisJMHgzMCwgMHgyZiwgMHgyOSwgMHgyMSwgMHgxOSwgMHgxMCwgMHgwOCwgMHgwMywKKwkweDJiLCAweDJhLCAweDI1LCAweDFlLCAweDE2LCAweDBlLCAweDA3LCAweDAzLAorCTB4MjYsIDB4MjUsIDB4MjEsIDB4MWIsIDB4MTQsIDB4MGQsIDB4MDYsIDB4MDMKIH07CiAKIHN0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfdHhfcG93ZXJfb2ZkbVtdID0gewpAQCAtNTI2LDkgKzU1OSwxMiBAQAogCS8qIGFuYXBhcmFtMiBvbiAqLwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CiAJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnIHwgUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsIFJUTDgyMjVfQU5BUEFSQU0yX09OKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywKKwkJCXJlZyB8IFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLAorCQkJICBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU0yX09OKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsCisJCQlyZWcgJiB+UlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwogCiAJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDIsIDB4NDIpOwpAQCAtNTQyLDYgKzU3OCw4NSBAQAogCW1zbGVlcCgxKTsKIH0KIAorc3RhdGljIHZvaWQgcnRsODIyNXoyX2JfcmZfc2V0X3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1OCBjY2tfcG93ZXIsIG9mZG1fcG93ZXI7CisJY29uc3QgdTggKnRtcDsKKwlpbnQgaTsKKworCWNja19wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RjsKKwlvZmRtX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlID4+IDQ7CisKKwlpZiAoY2NrX3Bvd2VyID4gMTUpCisJCWNja19wb3dlciA9IChwcml2LT5od19yZXYgPT0gUlRMODE4N0J2QikgPyAxNSA6IDIyOworCWVsc2UKKwkJY2NrX3Bvd2VyICs9IChwcml2LT5od19yZXYgPT0gUlRMODE4N0J2QikgPyAwIDogNzsKKwljY2tfcG93ZXIgKz0gcHJpdi0+dHhwd3JfYmFzZSAmIDB4RjsKKwljY2tfcG93ZXIgPSBtaW4oY2NrX3Bvd2VyLCAodTgpMzUpOworCisJaWYgKG9mZG1fcG93ZXIgPiAxNSkKKwkJb2ZkbV9wb3dlciA9IChwcml2LT5od19yZXYgPT0gUlRMODE4N0J2QikgPyAxNyA6IDI1OworCWVsc2UKKwkJb2ZkbV9wb3dlciArPSAocHJpdi0+aHdfcmV2ID09IFJUTDgxODdCdkIpID8gMiA6IDEwOworCW9mZG1fcG93ZXIgKz0gKHByaXYtPnR4cHdyX2Jhc2UgPj4gNCkgJiAweEY7CisJb2ZkbV9wb3dlciA9IG1pbihvZmRtX3Bvd2VyLCAodTgpMzUpOworCisJaWYgKGNoYW5uZWwgPT0gMTQpCisJCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNDsKKwllbHNlCisJCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2s7CisKKwlpZiAocHJpdi0+aHdfcmV2ID09IFJUTDgxODdCdkIpIHsKKwkJaWYgKGNja19wb3dlciA8PSA2KQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCWVsc2UgaWYgKGNja19wb3dlciA8PSAxMSkKKwkJCXRtcCArPSA4OworCQllbHNlCisJCQl0bXAgKz0gMTY7CisJfSBlbHNlIHsKKwkJaWYgKGNja19wb3dlciA8PSA1KQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCWVsc2UgaWYgKGNja19wb3dlciA8PSAxMSkKKwkJCXRtcCArPSA4OworCQllbHNlIGlmIChjY2tfcG93ZXIgPD0gMTcpCisJCQl0bXAgKz0gMTY7CisJCWVsc2UKKwkJCXRtcCArPSAyNDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0ICsgaSwgKnRtcCsrKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0ssCisJCQkgcnRsODIyNXoyX3R4X2dhaW5fY2NrX29mZG1bY2NrX3Bvd2VyXSk7CisJbXNsZWVwKDEpOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9HQUlOX09GRE0sCisJCQkgcnRsODIyNXoyX3R4X2dhaW5fY2NrX29mZG1bb2ZkbV9wb3dlcl0gPDwgMSk7CisJaWYgKHByaXYtPmh3X3JldiA9PSBSVEw4MTg3QnZCKSB7CisJCWlmIChvZmRtX3Bvd2VyIDw9IDExKSB7CisJCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4NywgMHg2MCk7CisJCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4OSwgMHg2MCk7CisJCX0gZWxzZSB7CisJCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4NywgMHg1Yyk7CisJCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4OSwgMHg1Yyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAob2ZkbV9wb3dlciA8PSAxMSkgeworCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODcsIDB4NWMpOworCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODksIDB4NWMpOworCQl9IGVsc2UgaWYgKG9mZG1fcG93ZXIgPD0gMTcpIHsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg3LCAweDU0KTsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg5LCAweDU0KTsKKwkJfSBlbHNlIHsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg3LCAweDUwKTsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg5LCAweDUwKTsKKwkJfQorCX0KKwltc2xlZXAoMSk7Cit9CisKIHN0YXRpYyBjb25zdCB1MTYgcnRsODIyNXoyX3J4Z2FpbltdID0gewogCTB4MDQwMCwgMHgwNDAxLCAweDA0MDIsIDB4MDQwMywgMHgwNDA0LCAweDA0MDUsIDB4MDQwOCwgMHgwNDA5LAogCTB4MDQwYSwgMHgwNDBiLCAweDA1MDIsIDB4MDUwMywgMHgwNTA0LCAweDA1MDUsIDB4MDU0MCwgMHgwNTQxLApAQCAtNzE1LDYgKzgzMCw4MSBAQAogCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsIChfX2xlMzIgKikweEZGOTQsIDB4M2RjMDAwMDIpOwogfQogCitzdGF0aWMgdm9pZCBydGw4MjI1ejJfYl9yZl9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCBpOworCisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgwQjcpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MSwgMHhFRTApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHg0NEQpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MywgMHg0NDEpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NCwgMHg4QzMpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NSwgMHhDNzIpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NiwgMHgwRTYpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NywgMHg4MkEpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4OCwgMHgwM0YpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4OSwgMHgzMzUpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4YSwgMHg5RDQpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4YiwgMHg3QkIpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4YywgMHg4NTApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4ZCwgMHhDREYpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4ZSwgMHgwMkIpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4ZiwgMHgxMTQpOyBtc2xlZXAoMSk7CisKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgwLCAweDFCNyk7IG1zbGVlcCgxKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgyMjV6Ml9yeGdhaW4pOyBpKyspIHsKKwkJcnRsODIyNV93cml0ZShkZXYsIDB4MSwgaSArIDEpOyBtc2xlZXAoMSk7CisJCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIHJ0bDgyMjV6Ml9yeGdhaW5baV0pOyBtc2xlZXAoMSk7CisJfQorCisJcnRsODIyNV93cml0ZShkZXYsIDB4MywgMHgwODApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NSwgMHgwMDQpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgwQjcpOyBtc2xlZXAoMSk7CisJbXNsZWVwKDMwMDApOworCisJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHhDNEQpOyBtc2xlZXAoMSk7CisJbXNsZWVwKDIwMDApOworCisJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHg0NEQpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgyQkYpOyBtc2xlZXAoMSk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fQ0NLLCAweDAzKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fT0ZETSwgMHgwNyk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BTlRFTk5BLCAweDAzKTsKKworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDgwLCAweDEyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydGw4MjI1ejJfYWdjKTsgaSsrKSB7CisJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEYsIHJ0bDgyMjV6Ml9hZ2NbaV0pOworCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhFLCAweDgwICsgaSk7CisJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEUsIDApOworCX0KKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4MCwgMHgxMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydGw4MjI1ejJfb2ZkbSk7IGkrKykKKwkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIGksIHJ0bDgyMjV6Ml9vZmRtW2ldKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0lGUywgMHgyMik7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TTE9ULCA5KTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkZGMCwgMjgpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRkY0LCAyOCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZGRjgsIDI4KTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkZGQywgMjgpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRjJELCAweDVCKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkY3OSwgMHg1Qik7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgKF9fbGUzMiAqKTB4RkZGMCwgKDcgPDwgMTIpIHwgKDMgPDwgOCkgfCAyOCk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgKF9fbGUzMiAqKTB4RkZGNCwgKDcgPDwgMTIpIHwgKDMgPDwgOCkgfCAyOCk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgKF9fbGUzMiAqKTB4RkZGOCwgKDcgPDwgMTIpIHwgKDMgPDwgOCkgfCAyOCk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgKF9fbGUzMiAqKTB4RkZGQywgKDcgPDwgMTIpIHwgKDMgPDwgOCkgfCAyOCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5BQ01fQ09OVFJPTCwgMCk7CisKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg5NywgMHg0Nik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhhNCwgMHhiNik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4NSwgMHhmYyk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweGMxLCAweDg4KTsgbXNsZWVwKDEpOworfQorCiBzdGF0aWMgdm9pZCBydGw4MjI1X3JmX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewogCXU4IHJlZzsKQEAgLTcyNSw4ICs5MTUsMTkgQEAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwogCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyB8IFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLCBSVEw4MjI1X0FOQVBBUkFNMl9PRkYpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNLCBSVEw4MjI1X0FOQVBBUkFNX09GRik7CisJaWYgKCFwcml2LT5pc19ydGw4MTg3YikgeworCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsCisJCQkJICBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU0yX09GRik7CisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNLAorCQkJCSAgUlRMODE4N19SVEw4MjI1X0FOQVBBUkFNX09GRik7CisJfSBlbHNlIHsKKwkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLAorCQkJCSAgUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTTJfT0ZGKTsKKwkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0sCisJCQkJICBSVEw4MTg3Ql9SVEw4MjI1X0FOQVBBUkFNX09GRik7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0zLAorCQkJCSAgUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTTNfT0ZGKTsKKwl9CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcgJiB+UlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwogfQpAQCAtNzM5LDggKzk0MCwxMCBAQAogCiAJaWYgKHByaXYtPnJmLT5pbml0ID09IHJ0bDgyMjVfcmZfaW5pdCkKIAkJcnRsODIyNV9yZl9zZXRfdHhfcG93ZXIoZGV2LCBjaGFuKTsKLQllbHNlCisJZWxzZSBpZiAocHJpdi0+cmYtPmluaXQgPT0gcnRsODIyNXoyX3JmX2luaXQpCiAJCXJ0bDgyMjV6Ml9yZl9zZXRfdHhfcG93ZXIoZGV2LCBjaGFuKTsKKwllbHNlCisJCXJ0bDgyMjV6Ml9iX3JmX3NldF90eF9wb3dlcihkZXYsIGNoYW4pOwogCiAJcnRsODIyNV93cml0ZShkZXYsIDB4NywgcnRsODIyNV9jaGFuW2NoYW4gLSAxXSk7CiAJbXNsZWVwKDEwKTsKQEAgLTc2MCwxOSArOTYzLDMwIEBACiAJLnNldF9jaGFuCT0gcnRsODIyNV9yZl9zZXRfY2hhbm5lbAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyBydGw4MjI1ejJfYl9vcHMgPSB7CisJLm5hbWUJCT0gInJ0bDgyMjV6MiIsCisJLmluaXQJCT0gcnRsODIyNXoyX2JfcmZfaW5pdCwKKwkuc3RvcAkJPSBydGw4MjI1X3JmX3N0b3AsCisJLnNldF9jaGFuCT0gcnRsODIyNV9yZl9zZXRfY2hhbm5lbAorfTsKKwogY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzICogcnRsODE4N19kZXRlY3RfcmYoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewogCXUxNiByZWc4LCByZWc5OworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAKLQlydGw4MjI1X3dyaXRlKGRldiwgMCwgMHgxQjcpOworCWlmICghcHJpdi0+aXNfcnRsODE4N2IpIHsKKwkJcnRsODIyNV93cml0ZShkZXYsIDAsIDB4MUI3KTsKIAotCXJlZzggPSBydGw4MjI1X3JlYWQoZGV2LCA4KTsKLQlyZWc5ID0gcnRsODIyNV9yZWFkKGRldiwgOSk7CisJCXJlZzggPSBydGw4MjI1X3JlYWQoZGV2LCA4KTsKKwkJcmVnOSA9IHJ0bDgyMjVfcmVhZChkZXYsIDkpOwogCi0JcnRsODIyNV93cml0ZShkZXYsIDAsIDB4MEI3KTsKKwkJcnRsODIyNV93cml0ZShkZXYsIDAsIDB4MEI3KTsKIAotCWlmIChyZWc4ICE9IDB4NTg4IHx8IHJlZzkgIT0gMHg3MDApCi0JCXJldHVybiAmcnRsODIyNV9vcHM7CisJCWlmIChyZWc4ICE9IDB4NTg4IHx8IHJlZzkgIT0gMHg3MDApCisJCQlyZXR1cm4gJnJ0bDgyMjVfb3BzOwogCi0JcmV0dXJuICZydGw4MjI1ejJfb3BzOworCQlyZXR1cm4gJnJ0bDgyMjV6Ml9vcHM7CisJfSBlbHNlCisJCXJldHVybiAmcnRsODIyNXoyX2Jfb3BzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19ydGw4MjI1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X3J0bDgyMjUuaAppbmRleCBkMzllZDAyLi4yMGM1YjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X3J0bDgyMjUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X3J0bDgyMjUuaApAQCAtMTUsMTAgKzE1LDE3IEBACiAjaWZuZGVmIFJUTDgxODdfUlRMODIyNV9ICiAjZGVmaW5lIFJUTDgxODdfUlRMODIyNV9ICiAKLSNkZWZpbmUgUlRMODIyNV9BTkFQQVJBTV9PTgkweGEwMDAwYTU5Ci0jZGVmaW5lIFJUTDgyMjVfQU5BUEFSQU0yX09OCTB4ODYwYzczMTIKLSNkZWZpbmUgUlRMODIyNV9BTkFQQVJBTV9PRkYJMHhhMDBiZWI1OQotI2RlZmluZSBSVEw4MjI1X0FOQVBBUkFNMl9PRkYJMHg4NDBkZWMxMQorI2RlZmluZSBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU1fT04JMHhhMDAwMGE1OQorI2RlZmluZSBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU0yX09OCTB4ODYwYzczMTIKKyNkZWZpbmUgUlRMODE4N19SVEw4MjI1X0FOQVBBUkFNX09GRgkweGEwMGJlYjU5CisjZGVmaW5lIFJUTDgxODdfUlRMODIyNV9BTkFQQVJBTTJfT0ZGCTB4ODQwZGVjMTEKKworI2RlZmluZSBSVEw4MTg3Ql9SVEw4MjI1X0FOQVBBUkFNX09OCTB4NDUwOTA2NTgKKyNkZWZpbmUgUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTTJfT04JMHg3MjdmM2Y1MgorI2RlZmluZSBSVEw4MTg3Ql9SVEw4MjI1X0FOQVBBUkFNM19PTgkweDAwCisjZGVmaW5lIFJUTDgxODdCX1JUTDgyMjVfQU5BUEFSQU1fT0ZGCTB4NTU0ODA2NTgKKyNkZWZpbmUgUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTTJfT0ZGCTB4NzIwMDNmNTAKKyNkZWZpbmUgUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTTNfT0ZGCTB4MDAKIAogY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzICogcnRsODE4N19kZXRlY3RfcmYoc3RydWN0IGllZWU4MDIxMV9odyAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC5oCmluZGV4IDRmN2QzOGYuLjAwOTAwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4LmgKQEAgLTY2LDcgKzY2LDEwIEBACiAjZGVmaW5lIFJUTDgxOFhfVFhfQ09ORl9SODE4MF9GCQkoMyA8PCAyNSkKICNkZWZpbmUgUlRMODE4WF9UWF9DT05GX1I4MTg1X0FCQwkoNCA8PCAyNSkKICNkZWZpbmUgUlRMODE4WF9UWF9DT05GX1I4MTg1X0QJCSg1IDw8IDI1KQorI2RlZmluZSBSVEw4MThYX1RYX0NPTkZfUjgxODd2RAkJKDUgPDwgMjUpCisjZGVmaW5lIFJUTDgxOFhfVFhfQ09ORl9SODE4N3ZEX0IJKDYgPDwgMjUpCiAjZGVmaW5lIFJUTDgxOFhfVFhfQ09ORl9IV1ZFUl9NQVNLCSg3IDw8IDI1KQorI2RlZmluZSBSVEw4MThYX1RYX0NPTkZfRElTUkVRUVNJWkUJKDEgPDwgMjgpCiAjZGVmaW5lIFJUTDgxOFhfVFhfQ09ORl9QUk9CRV9EVFMJKDEgPDwgMjkpCiAjZGVmaW5lIFJUTDgxOFhfVFhfQ09ORl9IV19TRVFOVU0JKDEgPDwgMzApCiAjZGVmaW5lIFJUTDgxOFhfVFhfQ09ORl9DV19NSU4JCSgxIDw8IDMxKQpAQCAtMTA2LDggKzEwOSwxMSBAQAogI2RlZmluZSBSVEw4MThYX01TUl9OT19MSU5LCQkoMCA8PCAyKQogI2RlZmluZSBSVEw4MThYX01TUl9BREhPQwkJKDEgPDwgMikKICNkZWZpbmUgUlRMODE4WF9NU1JfSU5GUkEJCSgyIDw8IDIpCisjZGVmaW5lIFJUTDgxOFhfTVNSX01BU1RFUgkJKDMgPDwgMikKKyNkZWZpbmUgUlRMODE4WF9NU1JfRU5FRENBCQkoNCA8PCAyKQogCXU4CUNPTkZJRzM7CiAjZGVmaW5lIFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURQkoMSA8PCA2KQorI2RlZmluZSBSVEw4MThYX0NPTkZJRzNfR05UX1NFTEVDVAkoMSA8PCA3KQogCXU4CUNPTkZJRzQ7CiAjZGVmaW5lIFJUTDgxOFhfQ09ORklHNF9QT1dFUk9GRgkoMSA8PCA2KQogI2RlZmluZSBSVEw4MThYX0NPTkZJRzRfVkNPT0ZGCQkoMSA8PCA3KQpAQCAtMTMzLDcgKzEzOSw5IEBACiAJX19sZTMyCVJGX1RJTUlORzsKIAl1OAlHUF9FTkFCTEU7CiAJdTgJR1BJTzsKLQl1OAlyZXNlcnZlZF8xMlsxMF07CisJdTgJcmVzZXJ2ZWRfMTJbMl07CisJX19sZTMyCUhTU0lfUEFSQTsKKwl1OAlyZXNlcnZlZF8xM1s0XTsKIAl1OAlUWF9BR0NfQ1RMOwogI2RlZmluZSBSVEw4MThYX1RYX0FHQ19DVExfUEVSUEFDS0VUX0dBSU5fU0hJRlQJCSgxIDw8IDApCiAjZGVmaW5lIFJUTDgxOFhfVFhfQUdDX0NUTF9QRVJQQUNLRVRfQU5UU0VMX1NISUZUCSgxIDw8IDEpCkBAIC0xNDEsMjkgKzE0OSwzOSBAQAogCXU4CVRYX0dBSU5fQ0NLOwogCXU4CVRYX0dBSU5fT0ZETTsKIAl1OAlUWF9BTlRFTk5BOwotCXU4CXJlc2VydmVkXzEzWzE2XTsKKwl1OAlyZXNlcnZlZF8xNFsxNl07CiAJdTgJV1BBX0NPTkY7Ci0JdTgJcmVzZXJ2ZWRfMTRbM107CisJdTgJcmVzZXJ2ZWRfMTVbM107CiAJdTgJU0lGUzsKIAl1OAlESUZTOwogCXU4CVNMT1Q7Ci0JdTgJcmVzZXJ2ZWRfMTVbNV07CisJdTgJcmVzZXJ2ZWRfMTZbNV07CiAJdTgJQ1dfQ09ORjsKICNkZWZpbmUgUlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9DV19TSElGVAkoMSA8PCAwKQogI2RlZmluZSBSVEw4MThYX0NXX0NPTkZfUEVSUEFDS0VUX1JFVFJZX1NISUZUCSgxIDw8IDEpCiAJdTgJQ1dfVkFMOwogCXU4CVJBVEVfRkFMTEJBQ0s7Ci0JdTgJcmVzZXJ2ZWRfMTZbMjVdOworI2RlZmluZSBSVEw4MThYX1JBVEVfRkFMTEJBQ0tfRU5BQkxFCSgxIDw8IDcpCisJdTgJQUNNX0NPTlRST0w7CisJdTgJcmVzZXJ2ZWRfMTdbMjRdOwogCXU4CUNPTkZJRzU7CiAJdTgJVFhfRE1BX1BPTExJTkc7Ci0JdTgJcmVzZXJ2ZWRfMTdbMl07CisJdTgJcmVzZXJ2ZWRfMThbMl07CiAJX19sZTE2CUNXUjsKIAl1OAlSRVRSWV9DVFI7Ci0JdTgJcmVzZXJ2ZWRfMThbNV07CisJdTgJcmVzZXJ2ZWRfMTlbM107CisJX19sZTE2CUlOVF9NSUc7CisvKiBSVEw4MThYX1I4MTg3Ql8qOiBtYWdpYyBudW1iZXJzIGZyb20gaW9yZWdpc3RlcnMgKi8KKyNkZWZpbmUgUlRMODE4WF9SODE4N0JfQgkwCisjZGVmaW5lIFJUTDgxOFhfUjgxODdCX0QJMQorI2RlZmluZSBSVEw4MThYX1I4MTg3Ql9FCTIKIAlfX2xlMzIJUkRTQVI7Ci0JdTgJcmVzZXJ2ZWRfMTlbMTJdOwotCV9fbGUxNglGRU1SOworCV9fbGUxNglUSURfQUNfTUFQOwogCXU4CXJlc2VydmVkXzIwWzRdOworCXU4CUFOQVBBUkFNMzsKKwl1OAlyZXNlcnZlZF8yMVs1XTsKKwlfX2xlMTYJRkVNUjsKKwl1OAlyZXNlcnZlZF8yMls0XTsKIAlfX2xlMTYJVEFMTFlfQ05UOwogCXU4CVRBTExZX1NFTDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCA4ODNhZjg5Li40MTdlOWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTI3MjgsNyArMjcyOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogSW5pdGlhbGl6YXRpb24JCQkJCQkJKi8KIAotc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Mgc3RyaXBfbGRpc2MgPSB7CitzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc3RyaXBfbGRpc2MgPSB7CiAJLm1hZ2ljID0gVFRZX0xESVNDX01BR0lDLAogCS5uYW1lID0gInN0cmlwIiwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggNDJhMzZiMy4uMzc3MTQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTE2MjQsMjUgKzE2MjQsMjUgQEAKIAkJaXdlLmNtZAkJCT0gU0lPQ0dJV0FQOwogCQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAkJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgdGhpcy0+YnNzX3NldFtpXS5ic3NpZCwgRVRIX0FMRU4pOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsCiAJCQkJCQkgIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwKIAkJCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwogCQlpd2UuY21kCQkgID0gU0lPQ0dJV0VTU0lEOwogCQlpd2UudS5kYXRhLmZsYWdzICA9IDE7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gdGhpcy0+YnNzX3NldFtpXS5zc2lkLmVsLmxlbjsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAogCQkJCQkJICBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsCiAJCQkJCQkgICZpd2UsCiAJCQkJCQkgIHRoaXMtPmJzc19zZXRbaV0uc3NpZC5lc3NpZCk7CiAJCWl3ZS5jbWQJICAgPSBTSU9DR0lXTU9ERTsKIAkJaXdlLnUubW9kZSA9IHRoaXMtPmJzc19zZXRbaV0uYnNzX3R5cGU7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LAorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwKIAkJCQkJCSAgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLAogCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7CiAJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKIAkJaXdlLnUuZnJlcS5tID0gdGhpcy0+YnNzX3NldFtpXS5kc19wc2V0LmNoYW47CiAJCWl3ZS51LmZyZXEuZSA9IDA7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LAorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwKIAkJCQkJCSAgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLAogCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CiAJCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwpAQCAtMTY1MSw3ICsxNjUxLDcgQEAKIAkJZWxzZQogCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCiAJCQkJCQkgIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwKIAkJCQkJCSAgJml3ZSwgTlVMTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCA3OGJhYTBmLi5iMTZlYzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpAQCAtMTE1MiwzMiArMTE1MiwzNiBAQAogCQlpd2UuY21kID0gU0lPQ0dJV0FQOwogCQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAkJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgemQtPnJ4ZGF0YStpKzYsIDYpOwotCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKwkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY2V2LCBlbmRfYnVmLAorCQkJCQkgICAmaXdlLCBJV19FVl9BRERSX0xFTik7CiAKIAkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSB6ZC0+cnhkYXRhW2krMTZdOwogCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCB6ZC0+cnhkYXRhK2krMTgpOworCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjZXYsIGVuZF9idWYsCisJCQkJCSAgICZpd2UsIHpkLT5yeGRhdGEraSsxOCk7CiAKIAkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwogCQlpZiAoemQtPnJ4ZGF0YVtpKzE0XSYweDAxKQogCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwogCQllbHNlCiAJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGNldiwgZW5kX2J1ZiwKKwkJCQkJICAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwogCQkKIAkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwogCQlpd2UudS5mcmVxLm0gPSB6ZC0+cnhkYXRhW2krMF07CiAJCWl3ZS51LmZyZXEuZSA9IDA7Ci0JCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjZXYsIGVuZF9idWYsCisJCQkJCSAgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKIAkJCiAJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKIAkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IDA7CiAJCWl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwogCQlmb3IgKGo9MDsgajwxMDsgaisrKSBpZiAoemQtPnJ4ZGF0YVtpKzUwK2pdKSB7CiAJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKHpkLT5yeGRhdGFbaSs1MCtqXSYweDdmKSo1MDAwMDA7Ci0JCQljZXY9aXdlX3N0cmVhbV9hZGRfZXZlbnQoY2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJICAgIElXX0VWX1BBUkFNX0xFTik7CisJCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjZXYsIGVuZF9idWYsCisJCQkJCQkgICAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwogCQl9CiAJCQogCQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKQEAgLTExODYsMTQgKzExOTAsMTUgQEAKIAkJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRDsKIAkJZWxzZQogCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBOVUxMKTsKKwkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY2V2LCBlbmRfYnVmLCAmaXdlLCBOVUxMKTsKIAkJCiAJCWl3ZS5jbWQgPSBJV0VWUVVBTDsKIAkJaXdlLnUucXVhbC5xdWFsID0gemQtPnJ4ZGF0YVtpKzRdOwogCQlpd2UudS5xdWFsLm5vaXNlPSB6ZC0+cnhkYXRhW2krMl0vMTAtMTAwOwogCQlpd2UudS5xdWFsLmxldmVsID0gKDI1Nit6ZC0+cnhkYXRhW2krNF0qMTAwKS8yNTUtMTAwOwogCQlpd2UudS5xdWFsLnVwZGF0ZWQgPSA3OwotCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKwkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY2V2LCBlbmRfYnVmLAorCQkJCQkgICAmaXdlLCBJV19FVl9RVUFMX0xFTik7CiAJfQogCiAJaWYgKCFlbmFibGVkX3NhdmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IDY5NGU5NWQuLmZjYzUzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC0yMjQsMzYgKzIyNCw2IEBACiAJcmV0dXJuIHI7CiB9CiAKLS8qKgotICogY2xlYXJfdHhfc2tiX2NvbnRyb2xfYmxvY2sgLSBjbGVhcnMgdGhlIGNvbnRyb2wgYmxvY2sgb2YgdHggc2tidWZmcwotICogQHNrYjogYSAmc3RydWN0IHNrX2J1ZmYgcG9pbnRlcgotICoKLSAqIFRoaXMgY2xlYXJzIHRoZSBjb250cm9sIGJsb2NrIG9mIHNrYnVmZiBidWZmZXJzLCB3aGljaCB3ZXJlIHRyYW5zbWl0dGVkIHRvCi0gKiB0aGUgZGV2aWNlLiBOb3RpZnkgdGhhdCB0aGUgZnVuY3Rpb24gaXMgbm90IHRocmVhZC1zYWZlLCBzbyBwcmV2ZW50Ci0gKiBtdWx0aXBsZSBjYWxscy4KLSAqLwotc3RhdGljIHZvaWQgY2xlYXJfdHhfc2tiX2NvbnRyb2xfYmxvY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgemRfdHhfc2tiX2NvbnRyb2xfYmxvY2sgKmNiID0KLQkJKHN0cnVjdCB6ZF90eF9za2JfY29udHJvbF9ibG9jayAqKXNrYi0+Y2I7Ci0KLQlrZnJlZShjYi0+Y29udHJvbCk7Ci0JY2ItPmNvbnRyb2wgPSBOVUxMOwotfQotCi0vKioKLSAqIGtmcmVlX3R4X3NrYiAtIGZyZWVzIGEgdHggc2tidWZmCi0gKiBAc2tiOiBhICZzdHJ1Y3Qgc2tfYnVmZiBwb2ludGVyCi0gKgotICogRnJlZXMgdGhlIHR4IHNrYnVmZi4gRnJlZXMgYWxzbyB0aGUgYWxsb2NhdGVkIGNvbnRyb2wgc3RydWN0dXJlIGluIHRoZQotICogY29udHJvbCBibG9jayBpZiBuZWNlc3NhcnkuCi0gKi8KLXN0YXRpYyB2b2lkIGtmcmVlX3R4X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWNsZWFyX3R4X3NrYl9jb250cm9sX2Jsb2NrKHNrYik7Ci0JZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLX0KLQogc3RhdGljIHZvaWQgemRfb3Bfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9od19tYWMoaHcpOwpAQCAtMjc2LDQwICsyNDYsMTUgQEAKIAogCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShhY2tfd2FpdF9xdWV1ZSkpKQotCQlrZnJlZV90eF9za2Ioc2tiKTsKLX0KLQotLyoqCi0gKiBpbml0X3R4X3NrYl9jb250cm9sX2Jsb2NrIC0gaW5pdGlhbGl6ZXMgc2tiIGNvbnRyb2wgYmxvY2sKLSAqIEBza2I6IGEgJnNrX2J1ZmYgcG9pbnRlcgotICogQGRldjogcG9pbnRlciB0byB0aGUgbWFjODAyMjEgZGV2aWNlCi0gKiBAY29udHJvbDogbWFjODAyMTEgdHggY29udHJvbCBhcHBseWluZyBmb3IgdGhlIGZyYW1lIGluIEBza2IKLSAqCi0gKiBJbml0aWFsaXplcyB0aGUgY29udHJvbCBibG9jayBvZiB0aGUgc2tidWZmIHRvIGJlIHRyYW5zbWl0dGVkLgotICovCi1zdGF0aWMgaW50IGluaXRfdHhfc2tiX2NvbnRyb2xfYmxvY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQotewotCXN0cnVjdCB6ZF90eF9za2JfY29udHJvbF9ibG9jayAqY2IgPQotCQkoc3RydWN0IHpkX3R4X3NrYl9jb250cm9sX2Jsb2NrICopc2tiLT5jYjsKLQotCVpEX0FTU0VSVChzaXplb2YoKmNiKSA8PSBzaXplb2Yoc2tiLT5jYikpOwotCW1lbXNldChjYiwgMCwgc2l6ZW9mKCpjYikpOwotCWNiLT5odz0gaHc7Ci0JY2ItPmNvbnRyb2wgPSBrbWFsbG9jKHNpemVvZigqY29udHJvbCksIEdGUF9BVE9NSUMpOwotCWlmIChjYi0+Y29udHJvbCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoY2ItPmNvbnRyb2wsIGNvbnRyb2wsIHNpemVvZigqY29udHJvbCkpOwotCi0JcmV0dXJuIDA7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKIC8qKgogICogdHhfc3RhdHVzIC0gcmVwb3J0cyB0eCBzdGF0dXMgb2YgYSBwYWNrZXQgaWYgcmVxdWlyZWQKICAqIEBodyAtIGEgJnN0cnVjdCBpZWVlODAyMTFfaHcgcG9pbnRlcgogICogQHNrYiAtIGEgc2stYnVmZmVyCi0gKiBAc3RhdHVzIC0gdGhlIHR4IHN0YXR1cyBvZiB0aGUgcGFja2V0IHdpdGhvdXQgY29udHJvbCBpbmZvcm1hdGlvbgorICogQGZsYWdzOiBleHRyYSBmbGFncyB0byBzZXQgaW4gdGhlIFRYIHN0YXR1cyBpbmZvCisgKiBAYWNrc3NpOiBBQ0sgc2lnbmFsIHN0cmVuZ3RoCiAgKiBAc3VjY2VzcyAtIFRydWUgZm9yIHN1Y2Nlc3NmdWxsIHRyYW5zbWlzc2lvbiBvZiB0aGUgZnJhbWUKICAqCiAgKiBUaGlzIGluZm9ybWF0aW9uIGNhbGxzIGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZSgpIGlmIHJlcXVpcmVkIGJ5IHRoZQpAQCAtMzE5LDE4ICsyNjQsMTcgQEAKICAqIElmIG5vIHN0YXR1cyBpbmZvcm1hdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQsIHRoZSBza2IgaXMgZnJlZWQuCiAgKi8KIHN0YXRpYyB2b2lkIHR4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgICAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzdGF0dXMsCi0JCSAgICAgIGJvb2wgc3VjY2VzcykKKwkJICAgICAgdTMyIGZsYWdzLCBpbnQgYWNrc3NpLCBib29sIHN1Y2Nlc3MpCiB7Ci0Jc3RydWN0IHpkX3R4X3NrYl9jb250cm9sX2Jsb2NrICpjYiA9IChzdHJ1Y3QgemRfdHhfc2tiX2NvbnRyb2xfYmxvY2sgKikKLQkJc2tiLT5jYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKLQlaRF9BU1NFUlQoY2ItPmNvbnRyb2wgIT0gTlVMTCk7Ci0JbWVtY3B5KCZzdGF0dXMtPmNvbnRyb2wsIGNiLT5jb250cm9sLCBzaXplb2Yoc3RhdHVzLT5jb250cm9sKSk7CisJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKwogCWlmICghc3VjY2VzcykKLQkJc3RhdHVzLT5leGNlc3NpdmVfcmV0cmllcyA9IDE7Ci0JY2xlYXJfdHhfc2tiX2NvbnRyb2xfYmxvY2soc2tiKTsKLQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYiwgc3RhdHVzKTsKKwkJaW5mby0+c3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMTsKKwlpbmZvLT5mbGFncyB8PSBmbGFnczsKKwlpbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IGFja3NzaTsKKwlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CiB9CiAKIC8qKgpAQCAtMzQ1LDE1ICsyODksMTIgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxID0gJnpkX2h3X21hYyhodyktPmFja193YWl0X3F1ZXVlOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgc3RhdHVzOwogCiAJc2tiID0gc2tiX2RlcXVldWUocSk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQltZW1zZXQoJnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpOwotCi0JdHhfc3RhdHVzKGh3LCBza2IsICZzdGF0dXMsIDApOworCXR4X3N0YXR1cyhodywgc2tiLCAwLCAwLCAwKTsKIH0KIAogLyoqCkBAIC0zNjgsMjggKzMwOSwyMCBAQAogICovCiB2b2lkIHpkX21hY190eF90b19kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycm9yKQogewotCXN0cnVjdCB6ZF90eF9za2JfY29udHJvbF9ibG9jayAqY2IgPQotCQkoc3RydWN0IHpkX3R4X3NrYl9jb250cm9sX2Jsb2NrICopc2tiLT5jYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGNiLT5odzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBpbmZvLT5kcml2ZXJfZGF0YVswXTsKIAotCWlmIChsaWtlbHkoY2ItPmNvbnRyb2wpKSB7Ci0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB6ZF9jdHJsc2V0KSk7Ci0JCWlmICh1bmxpa2VseShlcnJvciB8fAotCQkgICAgKGNiLT5jb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spKSkKLQkJewotCQkJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgc3RhdHVzOwotCQkJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKLQkJCXR4X3N0YXR1cyhodywgc2tiLCAmc3RhdHVzLCAhZXJyb3IpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSA9Ci0JCQkJJnpkX2h3X21hYyhodyktPmFja193YWl0X3F1ZXVlOwotCi0JCQlza2JfcXVldWVfdGFpbChxLCBza2IpOwotCQkJd2hpbGUgKHNrYl9xdWV1ZV9sZW4ocSkgPiBaRF9NQUNfTUFYX0FDS19XQUlURVJTKQotCQkJCXpkX21hY190eF9mYWlsZWQoaHcpOwotCQl9CisJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHpkX2N0cmxzZXQpKTsKKwlpZiAodW5saWtlbHkoZXJyb3IgfHwKKwkgICAgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSkgeworCQl0eF9zdGF0dXMoaHcsIHNrYiwgMCwgMCwgIWVycm9yKTsKIAl9IGVsc2UgewotCQlrZnJlZV90eF9za2Ioc2tiKTsKKwkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSA9CisJCQkmemRfaHdfbWFjKGh3KS0+YWNrX3dhaXRfcXVldWU7CisKKwkJc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTsKKwkJd2hpbGUgKHNrYl9xdWV1ZV9sZW4ocSkgPiBaRF9NQUNfTUFYX0FDS19XQUlURVJTKQorCQkJemRfbWFjX3R4X2ZhaWxlZChodyk7CiAJfQogfQogCkBAIC00NDMsOCArMzc2LDYgQEAKIHN0YXRpYyB2b2lkIGNzX3NldF9jb250cm9sKHN0cnVjdCB6ZF9tYWMgKm1hYywgc3RydWN0IHpkX2N0cmxzZXQgKmNzLAogCSAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCB1MzIgZmxhZ3MpCiB7Ci0JdTE2IGZjdGwgPSBsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2NvbnRyb2wpOwotCiAJLyoKIAkgKiBDT05UUk9MIFRPRE86CiAJICogLSBpZiBiYWNrb2ZmIG5lZWRlZCwgZW5hYmxlIGJpdCAwCkBAIC00NTQsNyArMzg1LDcgQEAKIAljcy0+Y29udHJvbCA9IDA7CiAKIAkvKiBGaXJzdCBmcmFnbWVudCAqLwotCWlmIChmbGFncyAmIElFRUU4MDIxMV9UWENUTF9GSVJTVF9GUkFHTUVOVCkKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKQogCQljcy0+Y29udHJvbCB8PSBaRF9DU19ORUVEX1JBTkRPTV9CQUNLT0ZGOwogCiAJLyogTXVsdGljYXN0ICovCkBAIC00NjIsNzkgKzM5MywxMDQgQEAKIAkJY3MtPmNvbnRyb2wgfD0gWkRfQ1NfTVVMVElDQVNUOwogCiAJLyogUFMtUE9MTCAqLwotCWlmICgoZmN0bCAmIChJRUVFODAyMTFfRkNUTF9GVFlQRXxJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09Ci0JICAgIChJRUVFODAyMTFfRlRZUEVfQ1RMfElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpKQorCWlmIChpZWVlODAyMTFfaXNfcHNwb2xsKGhlYWRlci0+ZnJhbWVfY29udHJvbCkpCiAJCWNzLT5jb250cm9sIHw9IFpEX0NTX1BTX1BPTExfRlJBTUU7CiAKLQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX1JUU19DVFMpCisJaWYgKGZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfUlRTX0NUUykKIAkJY3MtPmNvbnRyb2wgfD0gWkRfQ1NfUlRTOwogCi0JaWYgKGZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1VTRV9DVFNfUFJPVEVDVCkKIAkJY3MtPmNvbnRyb2wgfD0gWkRfQ1NfU0VMRl9DVFM7CiAKIAkvKiBGSVhNRTogTWFuYWdlbWVudCBmcmFtZT8gKi8KIH0KIAotdm9pZCB6ZF9tYWNfY29uZmlnX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKmJlYWNvbikKK3N0YXRpYyBpbnQgemRfbWFjX2NvbmZpZ19iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpiZWFjb24pCiB7CiAJc3RydWN0IHpkX21hYyAqbWFjID0gemRfaHdfbWFjKGh3KTsKKwlpbnQgcjsKIAl1MzIgdG1wLCBqID0gMDsKIAkvKiA0IG1vcmUgYnl0ZXMgZm9yIHRhaWwgQ1JDICovCiAJdTMyIGZ1bGxfbGVuID0gYmVhY29uLT5sZW4gKyA0OwotCXpkX2lvd3JpdGUzMigmbWFjLT5jaGlwLCBDUl9CQ05fRklGT19TRU1BUEhPUkUsIDApOwotCXpkX2lvcmVhZDMyKCZtYWMtPmNoaXAsIENSX0JDTl9GSUZPX1NFTUFQSE9SRSwgJnRtcCk7CisKKwlyID0gemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9GSUZPX1NFTUFQSE9SRSwgMCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyID0gemRfaW9yZWFkMzIoJm1hYy0+Y2hpcCwgQ1JfQkNOX0ZJRk9fU0VNQVBIT1JFLCAmdG1wKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCiAJd2hpbGUgKHRtcCAmIDB4MikgewotCQl6ZF9pb3JlYWQzMigmbWFjLT5jaGlwLCBDUl9CQ05fRklGT19TRU1BUEhPUkUsICZ0bXApOworCQlyID0gemRfaW9yZWFkMzIoJm1hYy0+Y2hpcCwgQ1JfQkNOX0ZJRk9fU0VNQVBIT1JFLCAmdG1wKTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIHI7CiAJCWlmICgoKytqICUgMTAwKSA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkNSX0JDTl9GSUZPX1NFTUFQSE9SRSBub3QgcmVhZHlcbiIpOwogCQkJaWYgKGogPj0gNTAwKSAgewogCQkJCXByaW50ayhLRVJOX0VSUiAiR2l2aW5nIHVwIGJlYWNvbiBjb25maWcuXG4iKTsKLQkJCQlyZXR1cm47CisJCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCQl9CiAJCX0KIAkJbXNsZWVwKDEpOwogCX0KIAotCXpkX2lvd3JpdGUzMigmbWFjLT5jaGlwLCBDUl9CQ05fRklGTywgZnVsbF9sZW4gLSAxKTsKLQlpZiAoemRfY2hpcF9pc196ZDEyMTFiKCZtYWMtPmNoaXApKQotCQl6ZF9pb3dyaXRlMzIoJm1hYy0+Y2hpcCwgQ1JfQkNOX0xFTkdUSCwgZnVsbF9sZW4gLSAxKTsKKwlyID0gemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9GSUZPLCBmdWxsX2xlbiAtIDEpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJaWYgKHpkX2NoaXBfaXNfemQxMjExYigmbWFjLT5jaGlwKSkgeworCQlyID0gemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9MRU5HVEgsIGZ1bGxfbGVuIC0gMSk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCX0KIAotCWZvciAoaiA9IDAgOyBqIDwgYmVhY29uLT5sZW47IGorKykKLQkJemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9GSUZPLAorCWZvciAoaiA9IDAgOyBqIDwgYmVhY29uLT5sZW47IGorKykgeworCQlyID0gemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9GSUZPLAogCQkJCSooKHU4ICopKGJlYWNvbi0+ZGF0YSArIGopKSk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCX0KIAotCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCi0JCXpkX2lvd3JpdGUzMigmbWFjLT5jaGlwLCBDUl9CQ05fRklGTywgMHgwKTsKKwlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisJCXIgPSB6ZF9pb3dyaXRlMzIoJm1hYy0+Y2hpcCwgQ1JfQkNOX0ZJRk8sIDB4MCk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCX0KIAotCXpkX2lvd3JpdGUzMigmbWFjLT5jaGlwLCBDUl9CQ05fRklGT19TRU1BUEhPUkUsIDEpOworCXIgPSB6ZF9pb3dyaXRlMzIoJm1hYy0+Y2hpcCwgQ1JfQkNOX0ZJRk9fU0VNQVBIT1JFLCAxKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCiAJLyogODAyLjExYi9nIDIuNEcgQ0NLIDFNYgogCSAqIDgwMi4xMWEsIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHVzZXMgZGlmZmVyZW50IHZhbHVlcyAoc2VlIEdQTCB2ZW5kb3IKIAkgKiBkcml2ZXIpCiAJICovCi0JemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9QTENQX0NGRywgMHgwMDAwMDQwMCB8CisJcmV0dXJuIHpkX2lvd3JpdGUzMigmbWFjLT5jaGlwLCBDUl9CQ05fUExDUF9DRkcsIDB4MDAwMDA0MDAgfAogCQkJKGZ1bGxfbGVuIDw8IDE5KSk7CiB9CiAKIHN0YXRpYyBpbnQgZmlsbF9jdHJsc2V0KHN0cnVjdCB6ZF9tYWMgKm1hYywKLQkJCXN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCXVuc2lnbmVkIGludCBmcmFnX2xlbiA9IHNrYi0+bGVuICsgRkNTX0xFTjsKIAl1bnNpZ25lZCBpbnQgcGFja2V0X2xlbmd0aDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnR4cmF0ZTsKIAlzdHJ1Y3QgemRfY3RybHNldCAqY3MgPSAoc3RydWN0IHpkX2N0cmxzZXQgKikKIAkJc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IHpkX2N0cmxzZXQpKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKIAlaRF9BU1NFUlQoZnJhZ19sZW4gPD0gMHhmZmZmKTsKIAotCWNzLT5tb2R1bGF0aW9uID0gY29udHJvbC0+dHhfcmF0ZS0+aHdfdmFsdWU7Ci0JaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1NIT1JUX1BSRUFNQkxFKQotCQljcy0+bW9kdWxhdGlvbiA9IGNvbnRyb2wtPnR4X3JhdGUtPmh3X3ZhbHVlX3Nob3J0OworCXR4cmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZShtYWMtPmh3LCBpbmZvKTsKKworCWNzLT5tb2R1bGF0aW9uID0gdHhyYXRlLT5od192YWx1ZTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NIT1JUX1BSRUFNQkxFKQorCQljcy0+bW9kdWxhdGlvbiA9IHR4cmF0ZS0+aHdfdmFsdWVfc2hvcnQ7CiAKIAljcy0+dHhfbGVuZ3RoID0gY3B1X3RvX2xlMTYoZnJhZ19sZW4pOwogCi0JY3Nfc2V0X2NvbnRyb2wobWFjLCBjcywgaGRyLCBjb250cm9sLT5mbGFncyk7CisJY3Nfc2V0X2NvbnRyb2wobWFjLCBjcywgaGRyLCBpbmZvLT5mbGFncyk7CiAKIAlwYWNrZXRfbGVuZ3RoID0gZnJhZ19sZW4gKyBzaXplb2Yoc3RydWN0IHpkX2N0cmxzZXQpICsgMTA7CiAJWkRfQVNTRVJUKHBhY2tldF9sZW5ndGggPD0gMHhmZmZmKTsKQEAgLTU3OSwyNCArNTM1LDIxIEBACiAgKiBjb250cm9sIGJsb2NrIG9mIHRoZSBza2J1ZmYgd2lsbCBiZSBpbml0aWFsaXplZC4gSWYgbmVjZXNzYXJ5IHRoZSBpbmNvbWluZwogICogbWFjODAyMTEgcXVldWVzIHdpbGwgYmUgc3RvcHBlZC4KICAqLwotc3RhdGljIGludCB6ZF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCitzdGF0aWMgaW50IHpkX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX2h3X21hYyhodyk7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCByOwogCi0JciA9IGZpbGxfY3RybHNldChtYWMsIHNrYiwgY29udHJvbCk7CisJciA9IGZpbGxfY3RybHNldChtYWMsIHNrYik7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0JciA9IGluaXRfdHhfc2tiX2NvbnRyb2xfYmxvY2soc2tiLCBodywgY29udHJvbCk7CisJaW5mby0+ZHJpdmVyX2RhdGFbMF0gPSBodzsKKworCXIgPSB6ZF91c2JfdHgoJm1hYy0+Y2hpcC51c2IsIHNrYik7CiAJaWYgKHIpCiAJCXJldHVybiByOwotCXIgPSB6ZF91c2JfdHgoJm1hYy0+Y2hpcC51c2IsIHNrYik7Ci0JaWYgKHIpIHsKLQkJY2xlYXJfdHhfc2tiX2NvbnRyb2xfYmxvY2soc2tiKTsKLQkJcmV0dXJuIHI7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC02MTcsMTMgKzU3MCwxMSBAQAogc3RhdGljIGludCBmaWx0ZXJfYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcnhfaGRyLAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCiB7Ci0JdTE2IGZjID0gbGUxNl90b19jcHUocnhfaGRyLT5mcmFtZV9jb250cm9sKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBza19idWZmX2hlYWQgKnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICgoZmMgJiAoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpICE9Ci0JICAgIChJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX0FDSykpCisJaWYgKCFpZWVlODAyMTFfaXNfYWNrKHJ4X2hkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybiAwOwogCiAJcSA9ICZ6ZF9od19tYWMoaHcpLT5hY2tfd2FpdF9xdWV1ZTsKQEAgLTYzNCwxMyArNTg1LDggQEAKIAkJdHhfaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCQlpZiAobGlrZWx5KCFjb21wYXJlX2V0aGVyX2FkZHIodHhfaGRyLT5hZGRyMiwgcnhfaGRyLT5hZGRyMSkpKQogCQl7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXM7Ci0KLQkJCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7Ci0JCQlzdGF0dXMuZmxhZ3MgPSBJRUVFODAyMTFfVFhfU1RBVFVTX0FDSzsKLQkJCXN0YXR1cy5hY2tfc2lnbmFsID0gc3RhdHMtPnNzaTsKIAkJCV9fc2tiX3VubGluayhza2IsIHEpOwotCQkJdHhfc3RhdHVzKGh3LCBza2IsICZzdGF0dXMsIDEpOworCQkJdHhfc3RhdHVzKGh3LCBza2IsIElFRUU4MDIxMV9UWF9TVEFUX0FDSywgc3RhdHMtPnNpZ25hbCwgMSk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTY1Niw4ICs2MDIsOCBAQAogCWNvbnN0IHN0cnVjdCByeF9zdGF0dXMgKnN0YXR1czsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBiYWRfZnJhbWUgPSAwOwotCXUxNiBmYzsKLQlib29sIGlzX3FvcywgaXNfNGFkZHIsIG5lZWRfcGFkZGluZzsKKwlfX2xlMTYgZmM7CisJaW50IG5lZWRfcGFkZGluZzsKIAlpbnQgaTsKIAl1OCByYXRlOwogCkBAIC02OTEsOCArNjM3LDggQEAKIAogCXN0YXRzLmZyZXEgPSB6ZF9jaGFubmVsc1tfemRfY2hpcF9nZXRfY2hhbm5lbCgmbWFjLT5jaGlwKSAtIDFdLmNlbnRlcl9mcmVxOwogCXN0YXRzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCXN0YXRzLnNzaSA9IHN0YXR1cy0+c2lnbmFsX3N0cmVuZ3RoOwotCXN0YXRzLnNpZ25hbCA9IHpkX3J4X3F1YWxfcGVyY2VudChidWZmZXIsCisJc3RhdHMuc2lnbmFsID0gc3RhdHVzLT5zaWduYWxfc3RyZW5ndGg7CisJc3RhdHMucXVhbCA9IHpkX3J4X3F1YWxfcGVyY2VudChidWZmZXIsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CiAKQEAgLTcxNiwxMyArNjYyLDggQEAKIAkJCSYmICFtYWMtPnBhc3NfY3RybCkKIAkJcmV0dXJuIDA7CiAKLQlmYyA9IGxlMTZfdG9fY3B1KCooKF9fbGUxNiAqKSBidWZmZXIpKTsKLQotCWlzX3FvcyA9ICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpICYmCi0JCSAoZmMgJiBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEpOwotCWlzXzRhZGRyID0gKGZjICYgKElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSA9PQotCQkgICAoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUyk7Ci0JbmVlZF9wYWRkaW5nID0gaXNfcW9zIF4gaXNfNGFkZHI7CisJZmMgPSAqKF9fbGUxNiAqKWJ1ZmZlcjsKKwluZWVkX3BhZGRpbmcgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYyk7CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCArIChuZWVkX3BhZGRpbmcgPyAyIDogMCkpOwogCWlmIChza2IgPT0gTlVMTCkKQEAgLTc1MSw2ICs2OTIsNyBAQAogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTU5UUjoKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQ6CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOgogCQltYWMtPnR5cGUgPSBjb25mLT50eXBlOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNzgxLDE0ICs3MjMsMjQgQEAKIHsKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9od19tYWMoaHcpOwogCWludCBhc3NvY2lhdGVkOworCWludCByOwogCi0JaWYgKG1hYy0+dHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UKSB7CisJaWYgKG1hYy0+dHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UIHx8CisJICAgIG1hYy0+dHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7CiAJCWFzc29jaWF0ZWQgPSB0cnVlOwotCQlpZiAoY29uZi0+YmVhY29uKSB7Ci0JCQl6ZF9tYWNfY29uZmlnX2JlYWNvbihodywgY29uZi0+YmVhY29uKTsKLQkJCWtmcmVlX3NrYihjb25mLT5iZWFjb24pOwotCQkJemRfc2V0X2JlYWNvbl9pbnRlcnZhbCgmbWFjLT5jaGlwLCBCQ05fTU9ERV9JQlNTIHwKKwkJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pIHsKKwkJCXN0cnVjdCBza19idWZmICpiZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKKworCQkJaWYgKCFiZWFjb24pCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyID0gemRfbWFjX2NvbmZpZ19iZWFjb24oaHcsIGJlYWNvbik7CisJCQlpZiAociA8IDApCisJCQkJcmV0dXJuIHI7CisJCQlyID0gemRfc2V0X2JlYWNvbl9pbnRlcnZhbCgmbWFjLT5jaGlwLCBCQ05fTU9ERV9JQlNTIHwKIAkJCQkJaHctPmNvbmYuYmVhY29uX2ludCk7CisJCQlpZiAociA8IDApCisJCQkJcmV0dXJuIHI7CisJCQlrZnJlZV9za2IoYmVhY29uKTsKIAkJfQogCX0gZWxzZQogCQlhc3NvY2lhdGVkID0gaXNfdmFsaWRfZXRoZXJfYWRkcihjb25mLT5ic3NpZCk7CkBAIC05ODMsMTAgKzkzNSwxMCBAQAogCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmbWFjLT5iYW5kOwogCiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCSAgICBJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFOwotCWh3LT5tYXhfcnNzaSA9IDEwMDsKLQlody0+bWF4X3NpZ25hbCA9IDEwMDsKKwkJICAgIElFRUU4MDIxMV9IV19IT1NUX0dFTl9CRUFDT05fVEVNUExBVEUgfAorCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQjsKIAorCWh3LT5tYXhfc2lnbmFsID0gMTAwOwogCWh3LT5xdWV1ZXMgPSAxOwogCWh3LT5leHRyYV90eF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgemRfY3RybHNldCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmgKaW5kZXggNzExNzAyNC4uMThjMWQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmgKQEAgLTE0OSwyMiArMTQ5LDYgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGxpbmtfbGVkX3dvcms7CiB9OwogCi0vKioKLSAqIHN0cnVjdCB6ZF90eF9za2JfY29udHJvbF9ibG9jayAtIGNvbnRyb2wgYmxvY2sgZm9yIHR4IHNrYnVmZnMKLSAqIEBjb250cm9sOiAmc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIHBvaW50ZXIKLSAqIEBjb250ZXh0OiBjb250ZXh0IHBvaW50ZXIKLSAqCi0gKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGZpbGwgdGhlIGNiIGZpZWxkIGluIGFuICZza19idWZmIHRvIHRyYW5zbWl0LgotICogVGhlIGNvbnRyb2wgZmllbGQgaXMgTlVMTCwgaWYgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgZnJvbSB0aGUgbWFjODAyMTEKLSAqIHN0YWNrIHRvIHJlcG9ydCBhYm91dCB0aGUgcGFja2V0IEFDSy4gVGhpcyBpcyB0aGUgY2FzZSBpZiB0aGUgZmxhZwotICogSUVFRTgwMjExX1RYQ1RMX05PX0FDSyBpcyBub3Qgc2V0IGluICZzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wuCi0gKi8KLXN0cnVjdCB6ZF90eF9za2JfY29udHJvbF9ibG9jayB7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCXZvaWQgKmNvbnRleHQ7Ci19OwotCiAjZGVmaW5lIFpEX01BQ19TVEFUU19CVUZGRVJfU0laRSAxNgogCiAjZGVmaW5lIFpEX01BQ19NQVhfQUNLX1dBSVRFUlMgMTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKaW5kZXggNmNkYWQ5Ny4uZGE4Yjc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKQEAgLTE3MCwxMCArMTcwLDExIEBACiAJaWYgKGZsYWdzICYgUkVCT09UKSB7CiAJCXU4IHJldDsKIAorCQkvKiBVc2UgIkRNQS1hd2FyZSIgYnVmZmVyLiAqLwogCQlyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKIAkJCVVTQl9SRVFfRklSTVdBUkVfQ09ORklSTSwKIAkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IsCi0JCQkwLCAwLCAmcmV0LCBzaXplb2YocmV0KSwgNTAwMCAvKiBtcyAqLyk7CisJCQkwLCAwLCBwLCBzaXplb2YocmV0KSwgNTAwMCAvKiBtcyAqLyk7CiAJCWlmIChyICE9IHNpemVvZihyZXQpKSB7CiAJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsCiAJCQkJImNvbnRyb2wgcmVxdWVzdCBmaXJtZXdhcmUgY29uZmlybWF0aW9uIGZhaWxlZC4iCkBAIC0xODIsNiArMTgzLDcgQEAKIAkJCQlyID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KKwkJcmV0ID0gcFswXTsKIAkJaWYgKHJldCAmIDB4ODApIHsKIAkJCWRldl9lcnIoJnVkZXYtPmRldiwKIAkJCQkiSW50ZXJuYWwgZXJyb3Igd2hpbGUgZG93bmxvYWRpbmcuIgpAQCAtMzEzLDIyICszMTUsMzEgQEAKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHpkX3VzYl90b191c2JkZXYodXNiKTsKKwl1OCAqYnVmOwogCisJLyogVXNlICJETUEtYXdhcmUiIGJ1ZmZlci4gKi8KKwlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAogCQlVU0JfUkVRX0ZJUk1XQVJFX1JFQURfREFUQSwgVVNCX0RJUl9JTiB8IDB4NDAsIGFkZHIsIDAsCi0JCWRhdGEsIGxlbiwgNTAwMCk7CisJCWJ1ZiwgbGVuLCA1MDAwKTsKIAlpZiAociA8IDApIHsKIAkJZGV2X2VycigmdWRldi0+ZGV2LAogCQkJInJlYWQgb3ZlciBmaXJtd2FyZSBpbnRlcmZhY2UgZmFpbGVkOiAlZFxuIiwgcik7Ci0JCXJldHVybiByOworCQlnb3RvIGV4aXQ7CiAJfSBlbHNlIGlmIChyICE9IGxlbikgewogCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsCiAJCQkiaW5jb21wbGV0ZSByZWFkIG92ZXIgZmlybXdhcmUgaW50ZXJmYWNlOiAlZC8lZFxuIiwKIAkJCXIsIGxlbik7Ci0JCXJldHVybiAtRUlPOworCQlyID0gLUVJTzsKKwkJZ290byBleGl0OwogCX0KLQotCXJldHVybiAwOworCXIgPSAwOworCW1lbWNweShkYXRhLCBidWYsIGxlbik7CitleGl0OgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHI7CiB9CiAKICNkZWZpbmUgdXJiX2Rldih1cmIpICgmKHVyYiktPmRldi0+ZGV2KQpAQCAtODcwLDcgKzg4MSw3IEBACiB7CiAJaW50IHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgemRfdHhfc2tiX2NvbnRyb2xfYmxvY2sgKmNiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgemRfdXNiICp1c2I7CiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CkBAIC04OTQsOCArOTA1LDggQEAKIAkgKiBncmFiICd1c2InIHBvaW50ZXIgYmVmb3JlIGhhbmRpbmcgb2ZmIHRoZSBza2IgKHNpbmNlCiAJICogaXQgbWlnaHQgYmUgZnJlZWQgYnkgemRfbWFjX3R4X3RvX2RldiBvciBtYWM4MDIxMSkKIAkgKi8KLQljYiA9IChzdHJ1Y3QgemRfdHhfc2tiX2NvbnRyb2xfYmxvY2sgKilza2ItPmNiOwotCXVzYiA9ICZ6ZF9od19tYWMoY2ItPmh3KS0+Y2hpcC51c2I7CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwl1c2IgPSAmemRfaHdfbWFjKGluZm8tPmRyaXZlcl9kYXRhWzBdKS0+Y2hpcC51c2I7CiAJemRfbWFjX3R4X3RvX2Rldihza2IsIHVyYi0+c3RhdHVzKTsKIAlmcmVlX3R4X3VyYih1c2IsIHVyYik7CiAJdHhfZGVjX3N1Ym1pdHRlZF91cmJzKHVzYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCmluZGV4IGVmNjcxZDEuLjkwMmJiZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCisrKyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCkBAIC05Miw3ICs5Miw3IEBACiAJICovCiAJdW5pb24gc2tiX2VudHJ5IHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJdW5zaWduZWQgbGluazsKKwkJdW5zaWduZWQgbG9uZyBsaW5rOwogCX0gdHhfc2tic1tORVRfVFhfUklOR19TSVpFXTsKIAlncmFudF9yZWZfdCBncmVmX3R4X2hlYWQ7CiAJZ3JhbnRfcmVmX3QgZ3JhbnRfdHhfcmVmW05FVF9UWF9SSU5HX1NJWkVdOwpAQCAtMTI1LDYgKzEyNSwxNyBAQAogCXN0cnVjdCB4ZW5fbmV0aWZfZXh0cmFfaW5mbyBleHRyYXNbWEVOX05FVElGX0VYVFJBX1RZUEVfTUFYIC0gMV07CiB9OwogCitzdGF0aWMgdm9pZCBza2JfZW50cnlfc2V0X2xpbmsodW5pb24gc2tiX2VudHJ5ICpsaXN0LCB1bnNpZ25lZCBzaG9ydCBpZCkKK3sKKwlsaXN0LT5saW5rID0gaWQ7Cit9CisKK3N0YXRpYyBpbnQgc2tiX2VudHJ5X2lzX2xpbmsoY29uc3QgdW5pb24gc2tiX2VudHJ5ICpsaXN0KQoreworCUJVSUxEX0JVR19PTihzaXplb2YobGlzdC0+c2tiKSAhPSBzaXplb2YobGlzdC0+bGluaykpOworCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpbGlzdC0+c2tiIDwgUEFHRV9PRkZTRVQpOworfQorCiAvKgogICogQWNjZXNzIG1hY3JvcyBmb3IgYWNxdWlyaW5nIGZyZWVpbmcgc2xvdHMgaW4gdHhfc2tic1tdLgogICovCkBAIC0xMzIsNyArMTQzLDcgQEAKIHN0YXRpYyB2b2lkIGFkZF9pZF90b19mcmVlbGlzdCh1bnNpZ25lZCAqaGVhZCwgdW5pb24gc2tiX2VudHJ5ICpsaXN0LAogCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IGlkKQogewotCWxpc3RbaWRdLmxpbmsgPSAqaGVhZDsKKwlza2JfZW50cnlfc2V0X2xpbmsoJmxpc3RbaWRdLCAqaGVhZCk7CiAJKmhlYWQgPSBpZDsKIH0KIApAQCAtOTkzLDcgKzEwMDQsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IE5FVF9UWF9SSU5HX1NJWkU7IGkrKykgewogCQkvKiBTa2lwIG92ZXIgZW50cmllcyB3aGljaCBhcmUgYWN0dWFsbHkgZnJlZWxpc3QgcmVmZXJlbmNlcyAqLwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpbnAtPnR4X3NrYnNbaV0uc2tiIDwgUEFHRV9PRkZTRVQpCisJCWlmIChza2JfZW50cnlfaXNfbGluaygmbnAtPnR4X3NrYnNbaV0pKQogCQkJY29udGludWU7CiAKIAkJc2tiID0gbnAtPnR4X3NrYnNbaV0uc2tiOwpAQCAtMTEyMyw3ICsxMTM0LDcgQEAKIAkvKiBJbml0aWFsaXNlIHR4X3NrYnMgYXMgYSBmcmVlIGNoYWluIGNvbnRhaW5pbmcgZXZlcnkgZW50cnkuICovCiAJbnAtPnR4X3NrYl9mcmVlbGlzdCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE5FVF9UWF9SSU5HX1NJWkU7IGkrKykgewotCQlucC0+dHhfc2tic1tpXS5saW5rID0gaSsxOworCQlza2JfZW50cnlfc2V0X2xpbmsoJm5wLT50eF9za2JzW2ldLCBpKzEpOwogCQlucC0+Z3JhbnRfdHhfcmVmW2ldID0gR1JBTlRfSU5WQUxJRF9SRUY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocC5oCmluZGV4IGVlY2Y3Y2IuLjVhNThiMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocC5oCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIF9BQ1BJUEhQX0gKIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CS8qIGZvciBLT0JKX05BTUVfTEVOICovCisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpX2hvdHBsdWcuaD4KIApAQCAtNTEsNyArNTEsNyBAQAogI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpCiAKIC8qIG5hbWUgc2l6ZSB3aGljaCBpcyB1c2VkIGZvciBlbnRyaWVzIGluIHBjaWhwZnMgKi8KLSNkZWZpbmUgU0xPVF9OQU1FX1NJWkUJS09CSl9OQU1FX0xFTgkJLyoge19TVU59ICovCisjZGVmaW5lIFNMT1RfTkFNRV9TSVpFCTIwCQkvKiB7X1NVTn0gKi8KIAogc3RydWN0IGFjcGlwaHBfYnJpZGdlOwogc3RydWN0IGFjcGlwaHBfc2xvdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IDNmN2I4MWMuLjhkMGU2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgImludGVsLWlvbW11LmgiCiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+IC8qIGZvcmNlX2lvbW11IGluIHRoaXMgaGVhZGVyIGluIHg4Ni02NCovCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vZ2FydC5oPgorI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgInBjaS5oIgogCiAjZGVmaW5lIElTX0dGWF9ERVZJQ0UocGRldikgKChwZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggNDRhNDZjOS4uZDAwZjBlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTExMjMsOCArMTEyMyw3IEBACiB9CiAKIC8qKgotICogcGNpX3ByZXBhcmVfdG9fc2xlZXAgLSBwcmVwYXJlIFBDSSBkZXZpY2UgZm9yIHN5c3RlbS13aWRlIHRyYW5zaXRpb24gaW50bwotICogICAgICAgICAgICAgICAgICAgICAgICBhIHNsZWVwIHN0YXRlCisgKiBwY2lfcHJlcGFyZV90b19zbGVlcCAtIHByZXBhcmUgUENJIGRldmljZSBmb3Igc3lzdGVtLXdpZGUgdHJhbnNpdGlvbiBpbnRvIGEgc2xlZXAgc3RhdGUKICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKgogICogQ2hvb3NlIHRoZSBwb3dlciBzdGF0ZSBhcHByb3ByaWF0ZSBmb3IgdGhlIGRldmljZSBkZXBlbmRpbmcgb24gd2hldGhlcgpAQCAtMTE4MSw4ICsxMTgwLDcgQEAKIH0KIAogLyoqCi0gKiBwY2lfYmFja19mcm9tX3NsZWVwIC0gdHVybiBQQ0kgZGV2aWNlIG9uIGR1cmluZyBzeXN0ZW0td2lkZSB0cmFuc2l0aW9uIGludG8KLSAqICAgICAgICAgICAgICAgICAgICAgICB0aGUgd29ya2luZyBzdGF0ZSBhIHNsZWVwIHN0YXRlCisgKiBwY2lfYmFja19mcm9tX3NsZWVwIC0gdHVybiBQQ0kgZGV2aWNlIG9uIGR1cmluZyBzeXN0ZW0td2lkZSB0cmFuc2l0aW9uIGludG8gd29ya2luZyBzdGF0ZQogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KICAqCiAgKiBEaXNhYmxlIGRldmljZSdzIHN5dGVtIHdha2UtdXAgY2FwYWJpbGl0eSBhbmQgcHV0IGl0IGludG8gRDAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCBlNDU0MDJhLi5lMGY4ODQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTIxOSw3ICsyMTksOCBAQAogY29uZmlnIFBDTUNJQV9QWEEyWFgKIAl0cmlzdGF0ZSAiUFhBMnh4IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk0gJiYgQVJDSF9QWEEgJiYgUENNQ0lBCi0JZGVwZW5kcyBvbiBBUkNIX0xVQkJPQ0sgfHwgTUFDSF9NQUlOU1RPTkUgfHwgUFhBX1NIQVJQU0wgfHwgTUFDSF9BUk1DT1JFCisJZGVwZW5kcyBvbiAoQVJDSF9MVUJCT0NLIHx8IE1BQ0hfTUFJTlNUT05FIHx8IFBYQV9TSEFSUFNMIFwKKwkJICAgIHx8IE1BQ0hfQVJNQ09SRSB8fCBBUkNIX1BYQV9QQUxNKQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUFhBMnh4IFBDTUNJQSBjb250cm9sbGVyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKaW5kZXggODVjNmNjOS4uMjY5YTllOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKQEAgLTcyLDQgKzcyLDUgQEAKIHB4YTJ4eF9jcy0kKENPTkZJR19NQUNIX01BSU5TVE9ORSkJCSs9IHB4YTJ4eF9tYWluc3RvbmUubwogcHhhMnh4X2NzLSQoQ09ORklHX1BYQV9TSEFSUFNMKQkJCSs9IHB4YTJ4eF9zaGFycHNsLm8KIHB4YTJ4eF9jcy0kKENPTkZJR19NQUNIX0FSTUNPUkUpCQkrPSBweGEyeHhfY21feDI3MC5vCitweGEyeHhfY3MtJChDT05GSUdfTUFDSF9QQUxNVFgpCQkrPSBweGEyeHhfcGFsbXR4Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjcwLmMKaW5kZXggZjEyM2ZjZS4uYmI5NWRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI3MC5jCkBAIC01LDgzICs1LDYwIEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogQ29tcHVsYWIgTHRkLiwgMjAwMywgMjAwNworICogQ29tcHVsYWIgTHRkLiwgMjAwMywgMjAwNywgMjAwOAogICogTWlrZSBSYXBvcG9ydCA8bWlrZUBjb21wdWxhYi5jby5pbD4KICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvc3MuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2NtLXgyNzAuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKIAorI2RlZmluZSBHUElPX1BDTUNJQV9TMF9DRF9WQUxJRAkoODQpCisjZGVmaW5lIEdQSU9fUENNQ0lBX1MwX1JEWUlOVAkoODIpCisjZGVmaW5lIEdQSU9fUENNQ0lBX1JFU0VUCSg1MykKKworI2RlZmluZSBQQ01DSUFfUzBfQ0RfVkFMSUQJSVJRX0dQSU8oR1BJT19QQ01DSUFfUzBfQ0RfVkFMSUQpCisjZGVmaW5lIFBDTUNJQV9TMF9SRFlJTlQJSVJRX0dQSU8oR1BJT19QQ01DSUFfUzBfUkRZSU5UKQorCisKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2lycXMgaXJxc1tdID0gewogCXsgMCwgUENNQ0lBX1MwX0NEX1ZBTElELCAiUENNQ0lBMCBDRCIgfSwKLQl7IDEsIFBDTUNJQV9TMV9DRF9WQUxJRCwgIlBDTUNJQTEgQ0QiIH0sCiB9OwogCiBzdGF0aWMgaW50IGNteDI3MF9wY21jaWFfaHdfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlHUFNSKEdQSU80OF9uUE9FKSA9IEdQSU9fYml0KEdQSU80OF9uUE9FKSB8Ci0JCUdQSU9fYml0KEdQSU80OV9uUFdFKSB8Ci0JCUdQSU9fYml0KEdQSU81MF9uUElPUikgfAotCQlHUElPX2JpdChHUElPNTFfblBJT1cpIHwKLQkJR1BJT19iaXQoR1BJTzg1X25QQ0VfMSkgfAotCQlHUElPX2JpdChHUElPNTRfblBDRV8yKTsKKwlpbnQgcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fUENNQ0lBX1JFU0VULCAiUENDYXJkIHJlc2V0Iik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QQ01DSUFfUkVTRVQsIDApOwogCi0JcHhhX2dwaW9fbW9kZShHUElPNDhfblBPRV9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNDlfblBXRV9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTBfblBJT1JfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzUxX25QSU9XX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU84NV9uUENFXzFfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU0X25QQ0VfMl9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTVfblBSRUdfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU2X25QV0FJVF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTdfbklPSVMxNl9NRCk7CisJc2t0LT5pcnEgPSBQQ01DSUFfUzBfUkRZSU5UOworCXJldCA9IHNvY19wY21jaWFfcmVxdWVzdF9pcnFzKHNrdCwgaXJxcywgQVJSQVlfU0laRShpcnFzKSk7CisJaWYgKCFyZXQpCisJCWdwaW9fZnJlZShHUElPX1BDTUNJQV9SRVNFVCk7CiAKLQkvKiBSZXNldCBzaWduYWwgKi8KLQlweGFfZ3Bpb19tb2RlKEdQSU81M19uUENFXzIgfCBHUElPX09VVCk7Ci0JR1BDUihHUElPNTNfblBDRV8yKSA9IEdQSU9fYml0KEdQSU81M19uUENFXzIpOwotCi0Jc2V0X2lycV90eXBlKFBDTUNJQV9TMF9DRF9WQUxJRCwgSVJRX1RZUEVfRURHRV9CT1RIKTsKLQlzZXRfaXJxX3R5cGUoUENNQ0lBX1MxX0NEX1ZBTElELCBJUlFfVFlQRV9FREdFX0JPVEgpOwotCi0JLyogaXJxJ3MgZm9yIHNsb3RzOiAqLwotCXNldF9pcnFfdHlwZShQQ01DSUFfUzBfUkRZSU5ULCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOwotCXNldF9pcnFfdHlwZShQQ01DSUFfUzFfUkRZSU5ULCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOwotCi0Jc2t0LT5pcnEgPSAoc2t0LT5uciA9PSAwKSA/IFBDTUNJQV9TMF9SRFlJTlQgOiBQQ01DSUFfUzFfUkRZSU5UOwotCXJldHVybiBzb2NfcGNtY2lhX3JlcXVlc3RfaXJxcyhza3QsIGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNteDI3MF9wY21jaWFfc2h1dGRvd24oc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7CiAJc29jX3BjbWNpYV9mcmVlX2lycXMoc2t0LCBpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKLQotCXNldF9pcnFfdHlwZShJUlFfVE9fR1BJTyhQQ01DSUFfUzBfQ0RfVkFMSUQpLCBJUlFfVFlQRV9OT05FKTsKLQlzZXRfaXJxX3R5cGUoSVJRX1RPX0dQSU8oUENNQ0lBX1MxX0NEX1ZBTElEKSwgSVJRX1RZUEVfTk9ORSk7Ci0KLQlzZXRfaXJxX3R5cGUoSVJRX1RPX0dQSU8oUENNQ0lBX1MwX1JEWUlOVCksIElSUV9UWVBFX05PTkUpOwotCXNldF9pcnFfdHlwZShJUlFfVE9fR1BJTyhQQ01DSUFfUzFfUkRZSU5UKSwgSVJRX1RZUEVfTk9ORSk7CisJZ3Bpb19mcmVlKEdQSU9fUENNQ0lBX1JFU0VUKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBjbXgyNzBfcGNtY2lhX3NvY2tldF9zdGF0ZShzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwKIAkJCQkgICAgICAgc3RydWN0IHBjbWNpYV9zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RhdGUtPmRldGVjdCA9IChQQ0NfREVURUNUKHNrdC0+bnIpID09IDApID8gMSA6IDA7Ci0Jc3RhdGUtPnJlYWR5ICA9IChQQ0NfUkVBRFkoc2t0LT5ucikgPT0gMCkgPyAwIDogMTsKKwlzdGF0ZS0+ZGV0ZWN0ID0gKGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUENNQ0lBX1MwX0NEX1ZBTElEKSA9PSAwKSA/IDEgOiAwOworCXN0YXRlLT5yZWFkeSAgPSAoZ3Bpb19nZXRfdmFsdWUoR1BJT19QQ01DSUFfUzBfUkRZSU5UKSA9PSAwKSA/IDAgOiAxOwogCXN0YXRlLT5idmQxICAgPSAxOwogCXN0YXRlLT5idmQyICAgPSAxOwogCXN0YXRlLT52c18zdiAgPSAwOwpAQCAtOTMsMzIgKzcwLDE2IEBACiBzdGF0aWMgaW50IGNteDI3MF9wY21jaWFfY29uZmlndXJlX3NvY2tldChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwKIAkJCQkJICBjb25zdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCiB7Ci0JR1BTUihHUElPNDlfblBXRSkgPSBHUElPX2JpdChHUElPNDlfblBXRSk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNDlfblBXRSB8IEdQSU9fT1VUKTsKLQogCXN3aXRjaCAoc2t0LT5ucikgewogCWNhc2UgMDoKIAkJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSB7Ci0JCQlHUENSKEdQSU80OV9uUFdFKSA9IEdQSU9fYml0KEdQSU80OV9uUFdFKTsKLQkJCUdQU1IoR1BJTzUzX25QQ0VfMikgPSBHUElPX2JpdChHUElPNTNfblBDRV8yKTsKKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUENNQ0lBX1JFU0VULCAxKTsKIAkJCXVkZWxheSgxMCk7Ci0JCQlHUENSKEdQSU81M19uUENFXzIpID0gR1BJT19iaXQoR1BJTzUzX25QQ0VfMik7Ci0JCQlHUFNSKEdQSU80OV9uUFdFKSA9IEdQSU9fYml0KEdQSU80OV9uUFdFKTsKLQkJfQotCQlicmVhazsKLQljYXNlIDE6Ci0JCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkgewotCQkJR1BDUihHUElPNDlfblBXRSkgPSBHUElPX2JpdChHUElPNDlfblBXRSk7Ci0JCQlHUFNSKEdQSU81M19uUENFXzIpID0gR1BJT19iaXQoR1BJTzUzX25QQ0VfMik7Ci0JCQl1ZGVsYXkoMTApOwotCQkJR1BDUihHUElPNTNfblBDRV8yKSA9IEdQSU9fYml0KEdQSU81M19uUENFXzIpOwotCQkJR1BTUihHUElPNDlfblBXRSkgPSBHUElPX2JpdChHUElPNDlfblBXRSk7CisJCQlncGlvX3NldF92YWx1ZShHUElPX1BDTUNJQV9SRVNFVCwgMCk7CiAJCX0KIAkJYnJlYWs7CiAJfQogCi0JcHhhX2dwaW9fbW9kZShHUElPNDlfblBXRV9NRCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM5LDcgKzEwMCw3IEBACiAJLmNvbmZpZ3VyZV9zb2NrZXQJPSBjbXgyNzBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCiAJLnNvY2tldF9pbml0CQk9IGNteDI3MF9wY21jaWFfc29ja2V0X2luaXQsCiAJLnNvY2tldF9zdXNwZW5kCQk9IGNteDI3MF9wY21jaWFfc29ja2V0X3N1c3BlbmQsCi0JLm5yCQkJPSAyLAorCS5ucgkJCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjbXgyNzBfcGNtY2lhX2RldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdHguYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWJkZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10eC5jCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogbGludXgvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10eC5jCisgKgorICogRHJpdmVyIGZvciBQYWxtIFR8WCBQQ01DSUEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcGFsbXR4Lmg+CisKKyNpbmNsdWRlICJzb2NfY29tbW9uLmgiCisKK3N0YXRpYyBpbnQgcGFsbXR4X3BjbWNpYV9od19pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXNrdC0+aXJxID0gSVJRX0dQSU8oR1BJT19OUl9QQUxNVFhfUENNQ0lBX1JFQURZKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFsbXR4X3BjbWNpYV9od19zaHV0ZG93bihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKK30KKworc3RhdGljIHZvaWQgcGFsbXR4X3BjbWNpYV9zb2NrZXRfc3RhdGUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsCisJCQkJCXN0cnVjdCBwY21jaWFfc3RhdGUgKnN0YXRlKQoreworCXN0YXRlLT5kZXRlY3QgPSAxOyAvKiBhbHdheXMgaW5zZXJ0ZWQgKi8KKwlzdGF0ZS0+cmVhZHkgID0gISFncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UWF9QQ01DSUFfUkVBRFkpOworCXN0YXRlLT5idmQxICAgPSAxOworCXN0YXRlLT5idmQyICAgPSAxOworCXN0YXRlLT53cnByb3QgPSAwOworCXN0YXRlLT52c18zdiAgPSAxOworCXN0YXRlLT52c19YdiAgPSAwOworfQorCitzdGF0aWMgaW50CitwYWxtdHhfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsCisJCQkJY29uc3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX1BDTUNJQV9QT1dFUjEsIDEpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX1BDTUNJQV9QT1dFUjIsIDEpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX1BDTUNJQV9SRVNFVCwKKwkJCSEhKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFsbXR4X3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKK30KKworc3RhdGljIHZvaWQgcGFsbXR4X3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKK30KKworc3RhdGljIHN0cnVjdCBwY21jaWFfbG93X2xldmVsIHBhbG10eF9wY21jaWFfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisKKwkuZmlyc3QJCQk9IDAsCisJLm5yCQkJPSAxLAorCisJLmh3X2luaXQJCT0gcGFsbXR4X3BjbWNpYV9od19pbml0LAorCS5od19zaHV0ZG93bgkJPSBwYWxtdHhfcGNtY2lhX2h3X3NodXRkb3duLAorCisJLnNvY2tldF9zdGF0ZQkJPSBwYWxtdHhfcGNtY2lhX3NvY2tldF9zdGF0ZSwKKwkuY29uZmlndXJlX3NvY2tldAk9IHBhbG10eF9wY21jaWFfY29uZmlndXJlX3NvY2tldCwKKworCS5zb2NrZXRfaW5pdAkJPSBwYWxtdHhfcGNtY2lhX3NvY2tldF9pbml0LAorCS5zb2NrZXRfc3VzcGVuZAkJPSBwYWxtdHhfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBhbG10eF9wY21jaWFfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBwYWxtdHhfcGNtY2lhX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX3BhbG10eCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBhbG10eF9wY21jaWFfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJweGEyeHgtcGNtY2lhIiwgLTEpOworCWlmICghcGFsbXR4X3BjbWNpYV9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBhbG10eF9wY21jaWFfZGV2aWNlLCAmcGFsbXR4X3BjbWNpYV9vcHMsCisJCQkJCXNpemVvZihwYWxtdHhfcGNtY2lhX29wcykpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGFsbXR4X3BjbWNpYV9kZXZpY2UpOworCisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwYWxtdHhfcGNtY2lhX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFsbXR4X3BjbWNpYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGFsbXR4X3BjbWNpYV9kZXZpY2UpOworfQorCitmc19pbml0Y2FsbChwYWxtdHhfcGNtY2lhX2luaXQpOworbW9kdWxlX2V4aXQocGFsbXR4X3BjbWNpYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENNQ0lBIHN1cHBvcnQgZm9yIFBhbG0gVHxYIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnB4YTJ4eC1wY21jaWEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwppbmRleCA1OGM4MDZlLi40ZDE3ZDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9LY29uZmlnCkBAIC00OSw0ICs0OSwxMCBAQAogCWhlbHAKIAkgIFNheSBZIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYmF0dGVyeSBvbiB0aGUgT0xQQyBsYXB0b3AuCiAKK2NvbmZpZyBCQVRURVJZX1BBTE1UWAorCXRyaXN0YXRlICJQYWxtIFR8WCBiYXR0ZXJ5IgorCWRlcGVuZHMgb24gTUFDSF9QQUxNVFgKKwloZWxwCisJICBTYXkgWSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIGJhdHRlcnkgaW4gUGFsbSBUfFguCisKIGVuZGlmICMgUE9XRVJfU1VQUExZCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQppbmRleCA2NDEzZGVkLi42ZjQzYTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKQEAgLTIwLDMgKzIwLDQgQEAKIG9iai0kKENPTkZJR19CQVRURVJZX0RTMjc2MCkJKz0gZHMyNzYwX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfUE1VKQkrPSBwbXVfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQkFUVEVSWV9PTFBDKQkrPSBvbHBjX2JhdHRlcnkubworb2JqLSQoQ09ORklHX0JBVFRFUllfUEFMTVRYKQkrPSBwYWxtdHhfYmF0dGVyeS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL2FwbV9wb3dlci5jIGIvZHJpdmVycy9wb3dlci9hcG1fcG93ZXIuYwppbmRleCBhNDg5MjI3Li45MzZiYWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL2FwbV9wb3dlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvYXBtX3Bvd2VyLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAltYWluX2JhdHRlcnkgPSBOVUxMOwogCWJwLm1haW4gPSBtYWluX2JhdHRlcnk7CiAKLQllcnJvciA9IGNsYXNzX2Zvcl9lYWNoX2RldmljZShwb3dlcl9zdXBwbHlfY2xhc3MsICZicCwKKwllcnJvciA9IGNsYXNzX2Zvcl9lYWNoX2RldmljZShwb3dlcl9zdXBwbHlfY2xhc3MsIE5VTEwsICZicCwKIAkJCQkgICAgICBfX2ZpbmRfbWFpbl9iYXR0ZXJ5KTsKIAlpZiAoZXJyb3IpIHsKIAkJbWFpbl9iYXR0ZXJ5ID0gYnAubWFpbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcGFsbXR4X2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvcGFsbXR4X2JhdHRlcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDRiYjI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9wYWxtdHhfYmF0dGVyeS5jCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogbGludXgvZHJpdmVycy9wb3dlci9wYWxtdHhfYmF0dGVyeS5jCisgKgorICogQmF0dGVyeSBtZWFzdXJlbWVudCBjb2RlIGZvciBQYWxtIFR8WCBIYW5kaGVsZCBjb21wdXRlcgorICoKKyAqIGJhc2VkIG9uIHRvc2FfYmF0dGVyeS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKyNpbmNsdWRlIDxsaW51eC93bTk3eHguaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wYWxtdHguaD4KKworc3RhdGljIERFRklORV9NVVRFWChiYXRfbG9jayk7CitzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGJhdF93b3JrOworc3RydWN0IG11dGV4IHdvcmtfbG9jazsKK2ludCBiYXRfc3RhdHVzID0gUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFsbXR4X3JlYWRfYmF0KHN0cnVjdCBwb3dlcl9zdXBwbHkgKmJhdF9wcykKK3sKKwlyZXR1cm4gd205N3h4X3JlYWRfYXV4X2FkYyhiYXRfcHMtPmRldi0+cGFyZW50LT5kcml2ZXJfZGF0YSwKKwkJCQkgICAgV005N1hYX0FVWF9JRDMpICogMTAwMCAvIDQxNDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFsbXR4X3JlYWRfdGVtcChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpiYXRfcHMpCit7CisJcmV0dXJuIHdtOTd4eF9yZWFkX2F1eF9hZGMoYmF0X3BzLT5kZXYtPnBhcmVudC0+ZHJpdmVyX2RhdGEsCisJCQkJICAgIFdNOTdYWF9BVVhfSUQyKTsKK30KKworc3RhdGljIGludCBwYWxtdHhfYmF0X2dldF9wcm9wZXJ0eShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpiYXRfcHMsCisJCQkgICAgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJICAgIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUzoKKwkJdmFsLT5pbnR2YWwgPSBiYXRfc3RhdHVzOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1k6CisJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElQTzsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBwYWxtdHhfcmVhZF9iYXQoYmF0X3BzKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01BWDoKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUFYX0RFU0lHTjoKKwkJdmFsLT5pbnR2YWwgPSBQQUxNVFhfQkFUX01BWF9WT0xUQUdFOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTjoKKwkJdmFsLT5pbnR2YWwgPSBQQUxNVFhfQkFUX01JTl9WT0xUQUdFOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVA6CisJCXZhbC0+aW50dmFsID0gcGFsbXR4X3JlYWRfdGVtcChiYXRfcHMpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJCXZhbC0+aW50dmFsID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwYWxtdHhfYmF0X2V4dGVybmFsX3Bvd2VyX2NoYW5nZWQoc3RydWN0IHBvd2VyX3N1cHBseSAqYmF0X3BzKQoreworCXNjaGVkdWxlX3dvcmsoJmJhdF93b3JrKTsKK30KKworc3RhdGljIGNoYXIgKnN0YXR1c190ZXh0W10gPSB7CisJW1BPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTl0gPQkJIlVua25vd24iLAorCVtQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HXSA9CSJDaGFyZ2luZyIsCisJW1BPV0VSX1NVUFBMWV9TVEFUVVNfRElTQ0hBUkdJTkddID0JIkRpc2NoYXJnaW5nIiwKK307CisKK3N0YXRpYyB2b2lkIHBhbG10eF9iYXRfdXBkYXRlKHN0cnVjdCBwb3dlcl9zdXBwbHkgKmJhdF9wcykKK3sKKwlpbnQgb2xkX3N0YXR1cyA9IGJhdF9zdGF0dXM7CisKKwltdXRleF9sb2NrKCZ3b3JrX2xvY2spOworCisJYmF0X3N0YXR1cyA9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX1BPV0VSX0RFVEVDVCkgPworCQkJCSAgICBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HIDoKKwkJCQkgICAgUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsKKworCWlmIChvbGRfc3RhdHVzICE9IGJhdF9zdGF0dXMpIHsKKwkJcHJfZGVidWcoIiVzICVzIC0+ICVzXG4iLCBiYXRfcHMtPm5hbWUsCisJCQkJc3RhdHVzX3RleHRbb2xkX3N0YXR1c10sCisJCQkJc3RhdHVzX3RleHRbYmF0X3N0YXR1c10pOworCQlwb3dlcl9zdXBwbHlfY2hhbmdlZChiYXRfcHMpOworCX0KKworCW11dGV4X3VubG9jaygmd29ya19sb2NrKTsKK30KKworc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBhbG10eF9iYXRfbWFpbl9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKKwlQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUFYLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTiwKKwlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorCVBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQsCit9OworCitzdHJ1Y3QgcG93ZXJfc3VwcGx5IGJhdF9wcyA9IHsKKwkubmFtZQkJCT0gIm1haW4tYmF0dGVyeSIsCisJLnR5cGUJCQk9IFBPV0VSX1NVUFBMWV9UWVBFX0JBVFRFUlksCisJLnByb3BlcnRpZXMJCT0gcGFsbXR4X2JhdF9tYWluX3Byb3BzLAorCS5udW1fcHJvcGVydGllcwkJPSBBUlJBWV9TSVpFKHBhbG10eF9iYXRfbWFpbl9wcm9wcyksCisJLmdldF9wcm9wZXJ0eQkJPSBwYWxtdHhfYmF0X2dldF9wcm9wZXJ0eSwKKwkuZXh0ZXJuYWxfcG93ZXJfY2hhbmdlZCA9IHBhbG10eF9iYXRfZXh0ZXJuYWxfcG93ZXJfY2hhbmdlZCwKKwkudXNlX2Zvcl9hcG0JCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIHBhbG10eF9iYXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJcGFsbXR4X2JhdF91cGRhdGUoJmJhdF9wcyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcGFsbXR4X2JhdF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXR4X2JhdF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXNjaGVkdWxlX3dvcmsoJmJhdF93b3JrKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHBhbG10eF9iYXRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHBhbG10eF9iYXRfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYWxtdHhfYmF0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghbWFjaGluZV9pc19wYWxtdHgoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9pbml0KCZ3b3JrX2xvY2spOworCisJSU5JVF9XT1JLKCZiYXRfd29yaywgcGFsbXR4X2JhdF93b3JrKTsKKworCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmZGV2LT5kZXYsICZiYXRfcHMpOworCWlmICghcmV0KQorCQlzY2hlZHVsZV93b3JrKCZiYXRfd29yayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwYWxtdHhfYmF0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmJhdF9wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBhbG10eF9iYXRfZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9ICJ3bTk3eHgtYmF0dGVyeSIsCisJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAorCS5wcm9iZQkJPSBwYWxtdHhfYmF0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocGFsbXR4X2JhdF9yZW1vdmUpLAorCS5zdXNwZW5kCT0gcGFsbXR4X2JhdF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcGFsbXR4X2JhdF9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwYWxtdHhfYmF0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwYWxtdHhfYmF0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwYWxtdHhfYmF0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGFsbXR4X2JhdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwYWxtdHhfYmF0X2luaXQpOworbW9kdWxlX2V4aXQocGFsbXR4X2JhdF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUGFsbSBUfFggYmF0dGVyeSBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYwppbmRleCBhZjE2MzNlLi5jYjFjY2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9jb3JlLmMKKysrIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jCkBAIC00MSw3ICs0MSw3IEBACiAKIAlkZXZfZGJnKHBzeS0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCWNsYXNzX2Zvcl9lYWNoX2RldmljZShwb3dlcl9zdXBwbHlfY2xhc3MsIHBzeSwKKwljbGFzc19mb3JfZWFjaF9kZXZpY2UocG93ZXJfc3VwcGx5X2NsYXNzLCBOVUxMLCBwc3ksCiAJCQkgICAgICBfX3Bvd2VyX3N1cHBseV9jaGFuZ2VkX3dvcmspOwogCiAJcG93ZXJfc3VwcGx5X3VwZGF0ZV9sZWRzKHBzeSk7CkBAIC03OSw3ICs3OSw3IEBACiB7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBjbGFzc19mb3JfZWFjaF9kZXZpY2UocG93ZXJfc3VwcGx5X2NsYXNzLCBwc3ksCisJZXJyb3IgPSBjbGFzc19mb3JfZWFjaF9kZXZpY2UocG93ZXJfc3VwcGx5X2NsYXNzLCBOVUxMLCBwc3ksCiAJCQkJICAgICAgX19wb3dlcl9zdXBwbHlfYW1faV9zdXBwbGllZCk7CiAKIAlkZXZfZGJnKHBzeS0+ZGV2LCAiJXMgJWRcbiIsIF9fZnVuY19fLCBlcnJvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCmluZGV4IDU4YjczMzYuLmQzOTdmYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IE5VTEw7CiAKLQlkZXYgPSBjbGFzc19maW5kX2RldmljZShydGNfY2xhc3MsIG5hbWUsIF9fcnRjX21hdGNoKTsKKwlkZXYgPSBjbGFzc19maW5kX2RldmljZShydGNfY2xhc3MsIE5VTEwsIG5hbWUsIF9fcnRjX21hdGNoKTsKIAlpZiAoZGV2KQogCQlydGMgPSB0b19ydGNfZGV2aWNlKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwppbmRleCA4MWE5NmUwLi5jM2RlZTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCkBAIC0xMTY4LDE3ICsxMTY4LDE5IEBACiAJaWYgKHJjKQogCQlnb3RvIG91dDsKIAotCXJwLT5jbHR0eWRldiA9IGRldmljZV9jcmVhdGUoY2xhc3MzMjcwLCAmcnAtPmNkZXYtPmRldiwKLQkJCQkgICAgIE1LREVWKElCTV9UVFkzMjcwX01BSk9SLCBycC0+bWlub3IpLAotCQkJCSAgICAgInR0eSVzIiwgcnAtPmNkZXYtPmRldi5idXNfaWQpOworCXJwLT5jbHR0eWRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShjbGFzczMyNzAsICZycC0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIE1LREVWKElCTV9UVFkzMjcwX01BSk9SLCBycC0+bWlub3IpLAorCQkJCQkgICAgIE5VTEwsCisJCQkJCSAgICAgInR0eSVzIiwgcnAtPmNkZXYtPmRldi5idXNfaWQpOwogCWlmIChJU19FUlIocnAtPmNsdHR5ZGV2KSkgewogCQlyYyA9IFBUUl9FUlIocnAtPmNsdHR5ZGV2KTsKIAkJZ290byBvdXRfdHR5ZGV2OwogCX0KIAotCXJwLT5jbHR1YmRldiA9IGRldmljZV9jcmVhdGUoY2xhc3MzMjcwLCAmcnAtPmNkZXYtPmRldiwKLQkJCQkgICAgIE1LREVWKElCTV9GUzMyNzBfTUFKT1IsIHJwLT5taW5vciksCi0JCQkJICAgICAidHViJXMiLCBycC0+Y2Rldi0+ZGV2LmJ1c19pZCk7CisJcnAtPmNsdHViZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNsYXNzMzI3MCwgJnJwLT5jZGV2LT5kZXYsCisJCQkJCSAgICAgTUtERVYoSUJNX0ZTMzI3MF9NQUpPUiwgcnAtPm1pbm9yKSwKKwkJCQkJICAgICBOVUxMLAorCQkJCQkgICAgICJ0dWIlcyIsIHJwLT5jZGV2LT5kZXYuYnVzX2lkKTsKIAlpZiAoIUlTX0VSUihycC0+Y2x0dWJkZXYpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCmluZGV4IDZkZmRiN2MuLjEyYzJhNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2xhc3MuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKQEAgLTY5LDEwICs2OSw5IEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWxfd2l0aF9jZGV2OwogCi0JdGNkLT5jbGFzc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKHRhcGVfY2xhc3MsIGRldmljZSwKLQkJCQkJICB0Y2QtPmNoYXJfZGV2aWNlLT5kZXYsCi0JCQkJCSAgIiVzIiwgdGNkLT5kZXZpY2VfbmFtZQotCQkJKTsKKwl0Y2QtPmNsYXNzX2RldmljZSA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh0YXBlX2NsYXNzLCBkZXZpY2UsCisJCQkJCQkgIHRjZC0+Y2hhcl9kZXZpY2UtPmRldiwKKwkJCQkJCSAgTlVMTCwgIiVzIiwgdGNkLT5kZXZpY2VfbmFtZSk7CiAJcmMgPSBJU19FUlIodGNkLT5jbGFzc19kZXZpY2UpID8gUFRSX0VSUih0Y2QtPmNsYXNzX2RldmljZSkgOiAwOwogCWlmIChyYykKIAkJZ290byBmYWlsX3dpdGhfY2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYwppbmRleCBiMGFjNDRiLi5jMWYzNTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jCkBAIC04OTYsOCArODk2LDkgQEAKIAkJZ290byBmYWlsX2ZyZWVfY2RldjsKIAl9CiAKLQl1cmQtPmRldmljZSA9IGRldmljZV9jcmVhdGUodm11cl9jbGFzcywgTlVMTCwgdXJkLT5jaGFyX2RldmljZS0+ZGV2LAotCQkJCQkiJXMiLCBub2RlX2lkKTsKKwl1cmQtPmRldmljZSA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2bXVyX2NsYXNzLCBOVUxMLAorCQkJCQkgICAgdXJkLT5jaGFyX2RldmljZS0+ZGV2LCBOVUxMLAorCQkJCQkgICAgIiVzIiwgbm9kZV9pZCk7CiAJaWYgKElTX0VSUih1cmQtPmRldmljZSkpIHsKIAkJcmMgPSBQVFJfRVJSKHVyZC0+ZGV2aWNlKTsKIAkJVFJBQ0UoInVyX3NldF9vbmxpbmU6IGRldmljZV9jcmVhdGUgcmM9JWRcbiIsIHJjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKaW5kZXggYzY0NDY2OS4uYTA4YjE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKQEAgLTU4LDEzICs1OCwxMyBAQAogICogICAgMS4xMCAgQ2hhbmdlcyBmb3IgQnVmZmVyIGFsbG9jYXRpb24KICAqICAgIDEuMTUgIENoYW5nZWQgZm9yIDIuNiBLZXJuZWwgIE5vIGxvbmdlciBjb21waWxlcyBvbiAyLjQgb3IgbG93ZXIKICAqICAgIDEuMjUgIEFkZGVkIFBhY2tpbmcgc3VwcG9ydAorICogICAgMS41CiAgKi8KICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC05MCwzNiArOTAsMTAgQEAKICNpbmNsdWRlICJjdTMwODguaCIKICNpbmNsdWRlICJjbGF3LmgiCiAKLU1PRFVMRV9BVVRIT1IoIkFuZHkgUmljaHRlciA8cmljaHRlcmFAdXMuaWJtLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTGludXggZm9yIHpTZXJpZXMgQ0xBVyBEcml2ZXJcbiIgXAotCQkJIkNvcHlyaWdodCAyMDAwLDIwMDUgSUJNIENvcnBvcmF0aW9uXG4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyogRGVidWdnaW5nIGlzIGJhc2VkIG9uIERFQlVHTVNHLCBJT1RSQUNFLCBvciBGVU5DVFJBQ0UgIG9wdGlvbnM6Ci0gICBERUJVR01TRyAgLSBFbmFibGVzIG91dHB1dCBvZiB2YXJpb3VzIGRlYnVnIG1lc3NhZ2VzIGluIHRoZSBjb2RlCi0gICBJT1RSQUNFICAgLSBFbmFibGVzIG91dHB1dCBvZiBDQ1cgYW5kIG90aGVyIElPIHJlbGF0ZWQgdHJhY2VzCi0gICBGVU5DVFJBQ0UgLSBFbmFibGVzIG91dHB1dCBvZiBmdW5jdGlvbiBlbnRyeS9leGl0IHRyYWNlCi0gICBEZWZpbmUgYW55IGNvbWJpbmF0aW9uIG9mIGFib3ZlIG9wdGlvbnMgdG8gZW5hYmxlIHRyYWNpbmcKLQotICAgQ0xBVyBhbHNvIHVzZXMgdGhlIHMzOTBkYmYgZmlsZSBzeXN0ZW0gIHNlZSBjbGF3X3RyYWNlIGFuZCBjbGF3X3NldHVwCisvKgorICAgQ0xBVyB1c2VzIHRoZSBzMzkwZGJmIGZpbGUgc3lzdGVtICBzZWUgY2xhd190cmFjZSBhbmQgY2xhd19zZXR1cAogKi8KIAotLyogZm9sbG93aW5nIGVuYWJsZXMgdHJhY2luZyAqLwotLy8jZGVmaW5lIERFQlVHTVNHCi0vLyNkZWZpbmUgSU9UUkFDRQotLy8jZGVmaW5lIEZVTkNUUkFDRQotCi0jaWZkZWYgREVCVUdNU0cKLSNkZWZpbmUgREVCVUcKLSNlbmRpZgotCi0jaWZkZWYgSU9UUkFDRQotI2RlZmluZSBERUJVRwotI2VuZGlmCi0KLSNpZmRlZiBGVU5DVFJBQ0UKLSNkZWZpbmUgREVCVUcKLSNlbmRpZgogCiBzdGF0aWMgY2hhciBkZWJ1Z19idWZmZXJbMjU1XTsKIC8qKgpAQCAtMTQ2LDcgKzEyMCw2IEBACiAJY2xhd19kYmZfc2V0dXAgPSBkZWJ1Z19yZWdpc3RlcigiY2xhd19zZXR1cCIsIDIsIDEsIDgpOwogCWNsYXdfZGJmX3RyYWNlID0gZGVidWdfcmVnaXN0ZXIoImNsYXdfdHJhY2UiLCAyLCAyLCA4KTsKIAlpZiAoY2xhd19kYmZfc2V0dXAgPT0gTlVMTCB8fCBjbGF3X2RiZl90cmFjZSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBkZWJ1ZyBmYWNpbGl0eS5cbiIpOwogCQljbGF3X3VucmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMjMyLDkgKzIwNSw2IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNsYXdfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHBhZ2VzX3RvX29yZGVyX29mX21hZyhpbnQgbnVtX29mX3BhZ2VzKTsKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2xhd19wYWNrX3NrYihzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXZwdHIpOwotI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBkdW1waXQgKGNoYXIgKmJ1ZiwgaW50IGxlbik7Ci0jZW5kaWYKIC8qIHN5c2ZzIEZ1bmN0aW9ucyAqLwogc3RhdGljIHNzaXplX3QgY2xhd19obmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiBzdGF0aWMgc3NpemVfdCBjbGF3X2huYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yNjMsMTIgKzIzMywxMiBAQAogc3RhdGljIGludCBjbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgICAgICAgIHN0cnVjdCBjbGF3Y3RsICogcF9jdGwsIF9fdTMyIHJldHVybl9jb2RlKTsKIHN0YXRpYyBpbnQgY2xhd19zdHJ0X2Nvbm5fcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKTsKLXN0YXRpYyB2b2lkIGNsYXdfc3RydF9yZWFkICggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxvY2sgKTsKLXN0YXRpYyB2b2lkIGNsYXdfc3RydF9vdXRfSU8oIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKTsKLXN0YXRpYyB2b2lkIGNsYXdfZnJlZV93cnRfYnVmKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICk7CitzdGF0aWMgdm9pZCBjbGF3X3N0cnRfcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbG9jayk7CitzdGF0aWMgdm9pZCBjbGF3X3N0cnRfb3V0X0lPKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgY2xhd19mcmVlX3dydF9idWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIEZ1bmN0aW9ucyBmb3IgdW5wYWNrIHJlYWRzICAgKi8KLXN0YXRpYyB2b2lkIHVucGFja19yZWFkIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICk7CitzdGF0aWMgdm9pZCB1bnBhY2tfcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogY2N3Z3JvdXAgdGFibGUgICovCiAKQEAgLTI4NCw3ICsyNTQsNiBAQAogfTsKIAogLyoKLSoKICogICAgICAgS2V5IGZ1bmN0aW9ucwogKi8KIApAQCAtMjk4LDIzICsyNjcsMTQgQEAKIAlpbnQgIAkJcmM7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyPU5VTEw7CiAKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlcyBFbnRlclxuIixfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDIsc2V0dXAsInByb2JlIik7CisJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgInByb2JlIik7CiAJaWYgKCFnZXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogdmFyaWFibGUgY2dkZXYgPVxuIik7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKWNnZGV2LCBzaXplb2Yoc3RydWN0IGNjd2dyb3VwX2RldmljZSkpOwotI2VuZGlmCiAJcHJpdnB0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGF3X3ByaXZiayksIEdGUF9LRVJORUwpOwogCWlmIChwcml2cHRyID09IE5VTEwpIHsKIAkJcHJvYmVfZXJyb3IoY2dkZXYpOwogCQlwdXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3V0IG9mIG1lbW9yeSAlcyAlcyBFeGl0IExpbmUgJWQgXG4iLAotCQkJY2dkZXYtPmNkZXZbMF0tPmRldi5idXNfaWQsX19mdW5jX18sX19MSU5FX18pOwotCQlDTEFXX0RCRl9URVhUXygyLHNldHVwLCJwcm9iZXglZCIsLUVOT01FTSk7CisJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAicHJvYmV4JWQiLCAtRU5PTUVNKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXByaXZwdHItPnBfbXRjX2VudmVsb3BlPSBremFsbG9jKCBNQVhfRU5WRUxPUEVfU0laRSwgR0ZQX0tFUk5FTCk7CkBAIC0zMjIsOSArMjgyLDcgQEAKICAgICAgICAgaWYgKChwcml2cHRyLT5wX210Y19lbnZlbG9wZT09TlVMTCkgfHwgKHByaXZwdHItPnBfZW52PT1OVUxMKSkgewogICAgICAgICAgICAgICAgIHByb2JlX2Vycm9yKGNnZGV2KTsKIAkJcHV0X2RldmljZSgmY2dkZXYtPmRldik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk91dCBvZiBtZW1vcnkgJXMgJXMgRXhpdCBMaW5lICVkIFxuIiwKLQkJCWNnZGV2LT5jZGV2WzBdLT5kZXYuYnVzX2lkLF9fZnVuY19fLF9fTElORV9fKTsKLQkJQ0xBV19EQkZfVEVYVF8oMixzZXR1cCwicHJvYmV4JWQiLC1FTk9NRU0pOworCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgInByb2JleCVkIiwgLUVOT01FTSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgICAgIH0KIAltZW1jcHkocHJpdnB0ci0+cF9lbnYtPmFkYXB0ZXJfbmFtZSxXU19OQU1FX05PVF9ERUYsOCk7CkBAIC0zNDEsMTkgKzI5OSwxNCBAQAogCQlwdXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWRkX2ZpbGVzIGZhaWxlZCAlcyAlcyBFeGl0IExpbmUgJWQgXG4iLAogCQkJY2dkZXYtPmNkZXZbMF0tPmRldi5idXNfaWQsX19mdW5jX18sX19MSU5FX18pOwotCQlDTEFXX0RCRl9URVhUXygyLHNldHVwLCJwcm9iZXglZCIscmMpOworCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgInByb2JleCVkIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQotCXByaW50ayhLRVJOX0lORk8gImNsYXc6IHN5c2ZzIGZpbGVzIGFkZGVkIGZvciAlc1xuIixjZ2Rldi0+Y2RldlswXS0+ZGV2LmJ1c19pZCk7CiAJcHJpdnB0ci0+cF9lbnYtPnBfcHJpdiA9IHByaXZwdHI7CiAgICAgICAgIGNnZGV2LT5jZGV2WzBdLT5oYW5kbGVyID0gY2xhd19pcnFfaGFuZGxlcjsKIAljZ2Rldi0+Y2RldlsxXS0+aGFuZGxlciA9IGNsYXdfaXJxX2hhbmRsZXI7CiAJY2dkZXYtPmRldi5kcml2ZXJfZGF0YSA9IHByaXZwdHI7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gImNsYXc6JXMgZXhpdCBvbiBsaW5lICVkLCAiCi0JCSJyYyA9IDBcbiIsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJwcmJleHQgMCIpOworCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJwcmJleHQgMCIpOwogCiAgICAgICAgIHJldHVybiAwOwogfSAgLyogIGVuZCBvZiBjbGF3X3Byb2JlICAgICAgICovCkBAIC0zNzAsMzcgKzMyMywxOCBAQAogCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOwogICAgICAgICBzdHJ1Y3QgY2hiayAqcF9jaDsKIAotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIGVudGVyXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsImNsYXdfdHgiKTsKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2xhd190eCIpOwogICAgICAgICBwX2NoPSZwcml2cHRyLT5jaGFubmVsW1dSSVRFXTsKICAgICAgICAgaWYgKHNrYiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG51bGwgcG9pbnRlciBwYXNzZWQgYXMgc2tfYnVmZmVyXG4iLAotCQkJZGV2LT5uYW1lKTsKICAgICAgICAgICAgICAgICBwcml2cHRyLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgZXhpdCBvbiBsaW5lICVkLCByYyA9IEVJT1xuIiwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXywgX19MSU5FX18pOwotI2VuZGlmCi0JCUNMQVdfREJGX1RFWFRfKDIsdHJhY2UsImNsYXd0eCVkIiwtRUlPKTsKKwkJcHJpdnB0ci0+c3RhdHMudHhfZXJyb3JzKys7CisJCUNMQVdfREJGX1RFWFRfKDIsIHRyYWNlLCAiY2xhd3R4JWQiLCAtRUlPKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKICAgICAgICAgfQotCi0jaWZkZWYgSU9UUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgc2tfYnVmZj1cbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIHNrYiwgc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBkZXY9XG4iLGRldi0+bmFtZSk7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKSBkZXYsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSkpOwotI2VuZGlmCiAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhwX2NoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKICAgICAgICAgcmM9Y2xhd19od190eCggc2tiLCBkZXYsIDEgKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2socF9jaC0+Y2RldiksIHNhdmVmbGFncyk7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIGV4aXQgb24gbGluZSAlZCwgcmMgPSAlZFxuIiwKLQkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sIHJjKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFRfKDQsdHJhY2UsImNsYXd0eCVkIixyYyk7CisJQ0xBV19EQkZfVEVYVF8oNCwgdHJhY2UsICJjbGF3dHglZCIsIHJjKTsKICAgICAgICAgcmV0dXJuIHJjOwogfSAgIC8qICBlbmQgb2YgY2xhd190eCAqLwogCkBAIC00MTksNyArMzUzLDcgQEAKIAogCW5ld19za2IgPSBOVUxMOwkJLyogYXNzdW1lIG5vIGRpY2UgKi8KIAlwa3RfY250ID0gMDsKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIlBhY2tTS0JlIik7CisJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIlBhY2tTS0JlIik7CiAJaWYgKCFza2JfcXVldWVfZW1wdHkoJnBfY2gtPmNvbGxlY3RfcXVldWUpKSB7CiAJLyogc29tZSBkYXRhICovCiAJCWhlbGRfc2tiID0gc2tiX2RlcXVldWUoJnBfY2gtPmNvbGxlY3RfcXVldWUpOwpAQCAtNDU3LDEzICszOTEsOCBAQAogCQkJCXNrYl9xdWV1ZV9oZWFkKCZwX2NoLT5jb2xsZWN0X3F1ZXVlLGhlbGRfc2tiKTsKIAkJCX0KIAkJfQotI2lmZGVmIElPVFJBQ0UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgUGFja2VkICVkIGxlbiAlZFxuIiwKLQkJCXBfZW52LT5uZGV2LT5uYW1lLAotCQkJX19mdW5jX18scGt0X2NudCxuZXdfc2tiLT5sZW4pOwotI2VuZGlmCiAJfQotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiUGFja1NLQngiKTsKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiUGFja1NLQngiKTsKIAlyZXR1cm4gbmV3X3NrYjsKIH0KIApAQCAtNDc3LDI5ICs0MDYsMTIgQEAKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgICpwcml2cHRyPWRldi0+cHJpdjsKIAlpbnQgYnVmZl9zaXplOwotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInZhcmlhYmxlIGRldiA9XG4iKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIGRldiwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInZhcmlhYmxlIG5ld19tdHUgPSAlZFxuIiwgbmV3X210dSk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsInNldG10dSIpOworCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJzZXRtdHUiKTsKIAlidWZmX3NpemUgPSBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKICAgICAgICAgaWYgKChuZXdfbXR1IDwgNjApIHx8IChuZXdfbXR1ID4gYnVmZl9zaXplKSkgewotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZCwgcmM9RUlOVkFMXG4iLAotCQlkZXYtPm5hbWUsCi0JCV9fZnVuY19fLCBfX0xJTkVfXyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICAgICAgfQogICAgICAgICBkZXYtPm10dSA9IG5ld19tdHU7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIixkZXYtPm5hbWUsCi0JX19mdW5jX18sIF9fTElORV9fKTsKLSNlbmRpZgogICAgICAgICByZXR1cm4gMDsKIH0gIC8qICAgZW5kIG9mIGNsYXdfY2hhbmdlX210dSAqLwogCkBAIC01MjEsMjQgKzQzMywxMyBAQAogICAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgdGltZXI7CiAgICAgICAgIHN0cnVjdCBjY3diayAqcF9idWY7CiAKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlciAgXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIm9wZW4iKTsKLQlpZiAoIWRldiB8fCAoZGV2LT5uYW1lWzBdID09IDB4MDApKSB7Ci0JCUNMQVdfREJGX1RFWFQoMix0cmFjZSwiQmFkRGV2Iik7Ci0JIAlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiBCYWQgZGV2aWNlIGF0IG9wZW4gZmFpbGluZyBcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIm9wZW4iKTsKIAlwcml2cHRyID0gKHN0cnVjdCBjbGF3X3ByaXZiayAqKWRldi0+cHJpdjsKICAgICAgICAgLyogICBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBDQ1cgYmxvY2tzICovCiAJaWYgKHByaXZwdHItPmJ1ZmZzX2FsbG9jID09IDApIHsKIAkgICAgICAgIHJjPWluaXRfY2N3X2JrKGRldik7CiAgICAgICAgIAlpZiAocmMpIHsKLSAgICAgICAgICAgICAgICAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkLCByYz1FTk9NRU1cbiIsCi0JCQlkZXYtPm5hbWUsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQkJQ0xBV19EQkZfVEVYVCgyLHRyYWNlLCJvcGVubWVtIik7CisJCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAib3Blbm1lbSIpOwogICAgICAgICAgICAgICAgIAlyZXR1cm4gLUVOT01FTTsKICAgICAgICAgCX0KIAl9CkBAIC01NTcsNyArNDU4LDcgQEAKIAl0YXNrbGV0X2luaXQoJnByaXZwdHItPmNoYW5uZWxbUkVBRF0udGFza2xldCwgY2xhd19pcnFfdGFza2xldCwKICAgICAgICAgCSh1bnNpZ25lZCBsb25nKSAmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXSk7CiAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgMjsgIGkrKykgewotCQlDTEFXX0RCRl9URVhUXygyLHRyYWNlLCJvcG5fY2glZCIsaSk7CisJCUNMQVdfREJGX1RFWFRfKDIsIHRyYWNlLCAib3BuX2NoJWQiLCBpKTsKICAgICAgICAgICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2cHRyLT5jaGFubmVsW2ldLndhaXQpOwogCQkvKiBza2JfcXVldWVfaGVhZF9pbml0KCZwX2NoLT5pb19xdWV1ZSk7ICovCiAJCWlmIChpID09IFdSSVRFKQpAQCAtNTk1LDE1ICs0OTYsOCBAQAogICAgICAgICAgICB+KERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSkgIT0gMHgwMCkgfHwKICAgICAgICAgICAgKCgocHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5mbGFnIHwKIAkgICAJcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0uZmxhZykgJiBDTEFXX1RJTUVSKSAhPSAweDAwKSkgewotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNoYW5uZWwgcHJvYmxlbXMgZHVyaW5nIG9wZW4gLSByZWFkOiIKLQkJCSIgJTAyeCAtICB3cml0ZTogJTAyeFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwKLQkJCXByaXZwdHItPmNoYW5uZWxbUkVBRF0ubGFzdF9kc3RhdCwKLQkJCXByaXZwdHItPmNoYW5uZWxbV1JJVEVdLmxhc3RfZHN0YXQpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW90ZSBzaWRlIGlzIG5vdCByZWFkeVxuIiwgZGV2LT5uYW1lKTsKLQkJQ0xBV19EQkZfVEVYVCgyLHRyYWNlLCJub3RyZHkiKTsKKwkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgIm5vdHJkeSIpOwogCiAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCAyOyAgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgKQEAgLTY1OSwyMyArNTUzLDE0IEBACiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9idWZmX3JlYWQ9TlVMTDsKICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX2J1ZmZfd3JpdGU9TlVMTDsKICAgICAgICAgICAgICAgICBjbGF3X2NsZWFyX2J1c3koZGV2KTsKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWQsIHJjPUVJT1xuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCQlDTEFXX0RCRl9URVhUKDIsdHJhY2UsIm9wZW4gRUlPIik7CisJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJvcGVuIEVJTyIpOwogICAgICAgICAgICAgICAgIHJldHVybiAtRUlPOwogICAgICAgICB9CiAKICAgICAgICAgLyogICBTZW5kIFN5c3RlbVZhbGlkYXRlIGNvbW1hbmQgKi8KIAogICAgICAgICBjbGF3X2NsZWFyX2J1c3koZGV2KTsKLQotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWQsIHJjPTBcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIm9wZW5vayIpOworCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJvcGVub2siKTsKICAgICAgICAgcmV0dXJuIDA7CiB9ICAgIC8qICAgICBlbmQgb2YgY2xhd19vcGVuICAgICovCiAKQEAgLTY5NCwyMiArNTc5LDE0IEBACiAgICAgICAgIHN0cnVjdCBjbGF3X2VudiAgKnBfZW52OwogICAgICAgICBzdHJ1Y3QgY2hiayAqcF9jaF9yPU5VTEw7CiAKLQotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzIGVudGVyICBcbiIsX19mdW5jX18pOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJjbGF3aXJxIik7CisJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImNsYXdpcnEiKTsKICAgICAgICAgLyogQnlwYXNzIGFsbCAndW5zb2xpY2l0ZWQgaW50ZXJydXB0cycgKi8KIAlpZiAoIWNkZXYtPmRldi5kcml2ZXJfZGF0YSkgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6IHVuc29saWNpdGVkIGludGVycnVwdCBmb3IgZGV2aWNlOiIKIAkJIAkiJXMgcmVjZWl2ZWQgYy0lMDJ4IGQtJTAyeFxuIiwKIAkJICAgICAgIGNkZXYtPmRldi5idXNfaWQsIGlyYi0+c2Nzdy5jbWQuY3N0YXQsCiAJCSAgICAgICBpcmItPnNjc3cuY21kLmRzdGF0KTsKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJjbGF3OiAlcygpICIKLQkJCSJleGl0IG9uIGxpbmUgJWRcbiIsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCi0JCUNMQVdfREJGX1RFWFQoMix0cmFjZSwiYmFkaXJxIik7CisJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJiYWRpcnEiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAlwcml2cHRyID0gKHN0cnVjdCBjbGF3X3ByaXZiayAqKWNkZXYtPmRldi5kcml2ZXJfZGF0YTsKQEAgLTcyMiw0MSArNTk5LDI1IEBACiAJZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6IENhbid0IGRldGVybWluZSBjaGFubmVsIGZvciAiCiAJCQkiaW50ZXJydXB0LCBkZXZpY2UgJXNcbiIsIGNkZXYtPmRldi5idXNfaWQpOwotCQlDTEFXX0RCRl9URVhUKDIsdHJhY2UsImJhZGNoYW4iKTsKKwkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgImJhZGNoYW4iKTsKIAkJcmV0dXJuOwogCX0KLQlDTEFXX0RCRl9URVhUXyg0LHRyYWNlLCJJUlFDSD0lZCIscF9jaC0+ZmxhZyk7CisJQ0xBV19EQkZfVEVYVF8oNCwgdHJhY2UsICJJUlFDSD0lZCIsIHBfY2gtPmZsYWcpOwogCiAJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIChwX2NoLT5uZGV2KTsKICAgICAgICAgcF9lbnY9cHJpdnB0ci0+cF9lbnY7CiAKLSNpZmRlZiBJT1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRlcnJ1cHQgZm9yIGRldmljZTogJTA0eCAiCi0JCSJyZWNlaXZlZCBjLSUwMnggZC0lMDJ4IHN0YXRlLSUwMnhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcF9jaC0+ZGV2bm8sIGlyYi0+c2Nzdy5jbWQuY3N0YXQsCi0JICAgICAgIGlyYi0+c2Nzdy5jbWQuZHN0YXQsIHBfY2gtPmNsYXdfc3RhdGUpOwotI2VuZGlmCi0KIAkvKiBDb3B5IGludGVycnVwdGlvbiByZXNwb25zZSBibG9jay4gKi8KIAltZW1jcHkocF9jaC0+aXJiLCBpcmIsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CiAKLSAgICAgICAgLyogQ2hlY2sgZm9yIGdvb2Qgc3ViY2hhbm5lbCByZXR1cm4gY29kZSwgb3RoZXJ3aXNlIGVycm9yIG1lc3NhZ2UgKi8KKwkvKiBDaGVjayBmb3IgZ29vZCBzdWJjaGFubmVsIHJldHVybiBjb2RlLCBvdGhlcndpc2UgaW5mbyBtZXNzYWdlICovCiAJaWYgKGlyYi0+c2Nzdy5jbWQuY3N0YXQgJiYgIShpcmItPnNjc3cuY21kLmNzdGF0ICYgU0NITl9TVEFUX1BDSSkpIHsKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogc3ViY2hhbm5lbCBjaGVjayBmb3IgZGV2aWNlOiAlMDR4IC0iCiAJCQkiIFNjaCBTdGF0ICUwMnggIERldiBTdGF0ICUwMnggQ1BBIC0gJTA0eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF9jaC0+ZGV2bm8sCiAJCQlpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmRzdGF0LAogCQkJaXJiLT5zY3N3LmNtZC5jcGEpOwotI2lmZGVmIElPVFJBQ0UKLQkJZHVtcGl0KChjaGFyICopaXJiLHNpemVvZihzdHJ1Y3QgaXJiKSk7Ci0JCWR1bXBpdCgoY2hhciAqKSh1bnNpZ25lZCBsb25nKWlyYi0+c2Nzdy5jbWQuY3BhLAotCQkJc2l6ZW9mKHN0cnVjdCBjY3cxKSk7Ci0jZW5kaWYKLSNpZmRlZiBGVU5DVFJBQ0UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCi0JCUNMQVdfREJGX1RFWFQoMix0cmFjZSwiY2hhbmNoayIpOworCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAiY2hhbmNoayIpOwogICAgICAgICAgICAgICAgIC8qIHJldHVybjsgKi8KICAgICAgICAgfQogCkBAIC03NjgsMjMzICs2MjksMTM4IEBACiAJcF9jaC0+bGFzdF9kc3RhdCA9IGlyYi0+c2Nzdy5jbWQuZHN0YXQ7CiAKICAgICAgICAgc3dpdGNoIChwX2NoLT5jbGF3X3N0YXRlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTEFXX1NUT1A6LyogSEFMVF9JTyBieSBjbGF3X3JlbGVhc2UgKGhhbHQgc2VxdWVuY2UpICovCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXX1NUT1AgZW50ZXJcbiIsIGRldi0+bmFtZSk7Ci0jZW5kaWYKLQkJCWlmICghKChwX2NoLT5pcmItPnNjc3cuY21kLnN0Y3RsICYKLQkJCSAgICAgICBTQ1NXX1NUQ1RMX1NFQ19TVEFUVVMpIHx8Ci0JCQkgICAgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0KLQkJCQlTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSB8fAotCQkJICAgIChwX2NoLT5pcmItPnNjc3cuY21kLnN0Y3RsID09Ci0JCQkJKFNDU1dfU1RDVExfQUxFUlRfU1RBVFVTIHwKLQkJCQkgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSkgewotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgd2FrZV91cCgmcF9jaC0+d2FpdCk7ICAgLyogd2FrZSB1cCBjbGF3X3JlbGVhc2UgKi8KLQotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ0xBV19TVE9QIGV4aXRcbiIsIGRldi0+bmFtZSk7Ci0jZW5kaWYKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCi0JCQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsInN0b3AiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIGNhc2UgQ0xBV19TVEFSVF9IQUxUX0lPOiAvKiBIQUxUX0lPIGlzc3VlZCBieSBjbGF3X29wZW4gICovCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBwcm9jZXNzIENMQVdfU1RBVF9IQUxUX0lPXG4iLAotCQkJCWRldi0+bmFtZSk7Ci0jZW5kaWYKLQkJCWlmICghKChwX2NoLT5pcmItPnNjc3cuY21kLnN0Y3RsICYKLQkJCSAgICAgICBTQ1NXX1NUQ1RMX1NFQ19TVEFUVVMpIHx8Ci0JCQkgICAgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0KLQkJCSAgICAgU0NTV19TVENUTF9TVEFUVVNfUEVORCkgfHwKLQkJCSAgICAocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCA9PQotCQkJICAgICAoU0NTV19TVENUTF9BTEVSVF9TVEFUVVMgfAotCQkJICAgICAgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSkgewotI2lmZGVmIEZVTkNUUkFDRQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCQkJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiaGFsdGlvIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwX2NoLT5mbGFnID09IENMQVdfUkVBRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2NoLT5jbGF3X3N0YXRlID0gQ0xBV19TVEFSVF9SRUFEOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWtlX3VwKCZwX2NoLT53YWl0KTsgLyogd2FrZSBjbGF3X29wZW4gKFJFQUQpKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwljYXNlIENMQVdfU1RPUDovKiBIQUxUX0lPIGJ5IGNsYXdfcmVsZWFzZSAoaGFsdCBzZXF1ZW5jZSkgKi8KKwkJaWYgKCEoKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NFQ19TVEFUVVMpIHx8CisJCShwX2NoLT5pcmItPnNjc3cuY21kLnN0Y3RsID09IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpIHx8CisJCShwX2NoLT5pcmItPnNjc3cuY21kLnN0Y3RsID09CisJCShTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUyB8IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkpCisJCQlyZXR1cm47CisJCXdha2VfdXAoJnBfY2gtPndhaXQpOyAgIC8qIHdha2UgdXAgY2xhd19yZWxlYXNlICovCisJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJzdG9wIik7CisJCXJldHVybjsKKwljYXNlIENMQVdfU1RBUlRfSEFMVF9JTzogLyogSEFMVF9JTyBpc3N1ZWQgYnkgY2xhd19vcGVuICAqLworCQlpZiAoISgocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU0VDX1NUQVRVUykgfHwKKwkJKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0gU0NTV19TVENUTF9TVEFUVVNfUEVORCkgfHwKKwkJKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0KKwkJKFNDU1dfU1RDVExfQUxFUlRfU1RBVFVTIHwgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSkgeworCQkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImhhbHRpbyIpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChwX2NoLT5mbGFnID09IENMQVdfUkVBRCkgeworCQkJcF9jaC0+Y2xhd19zdGF0ZSA9IENMQVdfU1RBUlRfUkVBRDsKKwkJCXdha2VfdXAoJnBfY2gtPndhaXQpOyAvKiB3YWtlIGNsYXdfb3BlbiAoUkVBRCkqLworCQl9IGVsc2UgaWYgKHBfY2gtPmZsYWcgPT0gQ0xBV19XUklURSkgeworCQkJcF9jaC0+Y2xhd19zdGF0ZSA9IENMQVdfU1RBUlRfV1JJVEU7CisJCQkvKglzZW5kIFNZU1RFTV9WQUxJREFURQkJCSovCisJCQljbGF3X3N0cnRfcmVhZChkZXYsIExPQ0tfTk8pOworCQkJY2xhd19zZW5kX2NvbnRyb2woZGV2LAorCQkJCVNZU1RFTV9WQUxJREFURV9SRVFVRVNULAorCQkJCTAsIDAsIDAsCisJCQkJcF9lbnYtPmhvc3RfbmFtZSwKKwkJCQlwX2Vudi0+YWRhcHRlcl9uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6IHVuc29saWNpdGVkICIKKwkJCQkiaW50ZXJydXB0IGZvciBkZXZpY2U6IgorCQkJCSIlcyByZWNlaXZlZCBjLSUwMnggZC0lMDJ4XG4iLAorCQkJCWNkZXYtPmRldi5idXNfaWQsCisJCQkJaXJiLT5zY3N3LmNtZC5jc3RhdCwKKwkJCQlpcmItPnNjc3cuY21kLmRzdGF0KTsKKwkJCXJldHVybjsKKwkJCX0KKwkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImhhbHRpbyIpOworCQlyZXR1cm47CisJY2FzZSBDTEFXX1NUQVJUX1JFQUQ6CisJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJSZWFkSVJRIik7CisJCWlmIChwX2NoLT5pcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfVU5JVF9DSEVDSykgeworCQkJY2xlYXJfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSk7CisJCQlpZiAoKHBfY2gtPmlyYi0+ZWN3WzBdICYgMHg0MSkgPT0gMHg0MSB8fAorCQkJICAgIChwX2NoLT5pcmItPmVjd1swXSAmIDB4NDApID09IDB4NDAgfHwKKwkJCSAgICAocF9jaC0+aXJiLT5lY3dbMF0pICAgICAgICA9PSAwKSB7CisJCQkJcHJpdnB0ci0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlc3RhcnQgaXMgIgorCQkJCQkicmVxdWlyZWQgYWZ0ZXIgcmVtb3RlICIKKwkJCQkJInNpZGUgcmVjb3ZlcnMgXG4iLAorCQkJCQlkZXYtPm5hbWUpOworCQkJfQorCQkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIm5vdHJkeSIpOworCQkJcmV0dXJuOworCQl9CisJCWlmICgocF9jaC0+aXJiLT5zY3N3LmNtZC5jc3RhdCAmIFNDSE5fU1RBVF9QQ0kpICYmCisJCQkocF9jaC0+aXJiLT5zY3N3LmNtZC5kc3RhdCA9PSAwKSkgeworCQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoQ0xBV19CSF9BQ1RJVkUsCisJCQkJKHZvaWQgKikmcF9jaC0+ZmxhZ19hKSA9PSAwKQorCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnBfY2gtPnRhc2tsZXQpOwogCQkJZWxzZQotCQkJICAgaWYgKHBfY2gtPmZsYWcgPT0gQ0xBV19XUklURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2NoLT5jbGF3X3N0YXRlID0gQ0xBV19TVEFSVF9XUklURTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICBzZW5kIFNZU1RFTV9WQUxJREFURSAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19zdHJ0X3JlYWQoZGV2LCBMT0NLX05PKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJY2xhd19zZW5kX2NvbnRyb2woZGV2LAotCQkJCQlTWVNURU1fVkFMSURBVEVfUkVRVUVTVCwKLQkJCQkJMCwgMCwgMCwKLQkJCQkJcF9lbnYtPmhvc3RfbmFtZSwKLQkJCQkJcF9lbnYtPmFkYXB0ZXJfbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiB1bnNvbGljaXRlZCAiCi0JCQkJCSJpbnRlcnJ1cHQgZm9yIGRldmljZToiCi0JCQkJIAkiJXMgcmVjZWl2ZWQgYy0lMDJ4IGQtJTAyeFxuIiwKLSAgICAgICAgICAgICAgICAJCSAgICAgICAgY2Rldi0+ZGV2LmJ1c19pZCwKLQkJCQkJaXJiLT5zY3N3LmNtZC5jc3RhdCwKLQkJCQkJaXJiLT5zY3N3LmNtZC5kc3RhdCk7Ci0JCQkJcmV0dXJuOwotCQkJCX0KLSNpZmRlZiBERUJVR01TRwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHByb2Nlc3MgQ0xBV19TVEFUX0hBTFRfSU8gZXhpdFxuIiwKLQkJCQlkZXYtPm5hbWUpOwotI2VuZGlmCi0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJoYWx0aW8iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjYXNlIENMQVdfU1RBUlRfUkVBRDoKLQkJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiUmVhZElSUSIpOwotCQkJaWYgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyX2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHBfY2gtPmlyYi0+ZWN3WzBdICYgMHg0MSkgPT0gMHg0MSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBfY2gtPmlyYi0+ZWN3WzBdICYgMHg0MCkgPT0gMHg0MCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBfY2gtPmlyYi0+ZWN3WzBdKSAgICAgICAgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnN0YXRzLnJ4X2Vycm9ycysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSZXN0YXJ0IGlzICIKLQkJCQkJCSJyZXF1aXJlZCBhZnRlciByZW1vdGUgIgotCQkJCQkJInNpZGUgcmVjb3ZlcnMgXG4iLAotCQkJCQkJZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIEZVTkNUUkFDRQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCQkJCQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIm5vdHJkeSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkJCWlmICgocF9jaC0+aXJiLT5zY3N3LmNtZC5jc3RhdCAmIFNDSE5fU1RBVF9QQ0kpICYmCi0JCQkgICAgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuZHN0YXQgPT0gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoQ0xBV19CSF9BQ1RJVkUsCi0JCQkJCSh2b2lkICopJnBfY2gtPmZsYWdfYSkgPT0gMCkgewotCQkJCQl0YXNrbGV0X3NjaGVkdWxlKCZwX2NoLT50YXNrbGV0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCQkJCWVsc2UgewotCQkJCQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIlBDSU5vQkgiKTsKLQkJCQl9Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQkJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCi0JCQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJQQ0lfcmVhZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQlpZiAoISgocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCAmCi0JCQkgICAgICAgU0NTV19TVENUTF9TRUNfU1RBVFVTKSB8fAotCQkJICAgICAocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCA9PQotCQkJICAgICAgU0NTV19TVENUTF9TVEFUVVNfUEVORCkgfHwKLQkJCSAgICAgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0KLQkJCSAgICAgIChTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUyB8Ci0JCQkgICAgICAgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSkgewotI2lmZGVmIEZVTkNUUkFDRQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCQkJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiU1BlbmRfcmQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGF3X2NsZWFyYml0X2J1c3koVEJfUkVUUlksZGV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KENMQVdfQkhfQUNUSVZFLAotICAgIAkJCQkodm9pZCAqKSZwX2NoLT5mbGFnX2EpID09IDApIHsKLSAgICAJCQkJdGFza2xldF9zY2hlZHVsZSgmcF9jaC0+dGFza2xldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIAkJCWVsc2UgewotICAgIAkJCQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIlJkQkhBY3QiKTsKLSAgICAJCQl9Ci0KLSNpZmRlZiBERUJVR01TRwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHByb2Nlc3MgQ0xBV19TVEFSVF9SRUFEIGV4aXRcbiIsCi0JCQkJZGV2LT5uYW1lKTsKLSNlbmRpZgotI2lmZGVmIEZVTkNUUkFDRQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0jZW5kaWYKLQkJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiUmRJUlFYaXQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjYXNlIENMQVdfU1RBUlRfV1JJVEU6Ci0JCQlpZiAocF9jaC0+aXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuaXQgQ2hlY2sgT2NjdXJlZCBpbiAiCi0JCQkJCSJ3cml0ZSBjaGFubmVsXG4iLGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyX2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocF9jaC0+aXJiLT5lY3dbMF0gJiAweDgwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSZXNldHRpbmcgRXZlbnQgIgotCQkJCQkJIm9jY3VycmVkOlxuIixkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfdGltZXIoJnBfY2gtPnRpbWVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2NoLT50aW1lci5mdW5jdGlvbiA9Ci0JCQkJCQkodm9pZCAqKWNsYXdfd3JpdGVfcmV0cnk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9jaC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBfY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9jaC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAxMCpIWjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfdGltZXIoJnBfY2gtPnRpbWVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogd3JpdGUgY29ubmVjdGlvbiAiCi0JCQkJCQkicmVzdGFydGluZ1xuIixkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQkJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCi0JCQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJyc3RydHdydCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQlpZiAocF9jaC0+aXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfRVhDRVApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcl9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogVW5pdCBFeGNlcHRpb24gIgotCQkJCQkJIk9jY3VyZWQgaW4gd3JpdGUgY2hhbm5lbFxuIiwKLQkJCQkJCWRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQlpZiAoISgocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCAmCi0JCQkgICAgICAgU0NTV19TVENUTF9TRUNfU1RBVFVTKSB8fAotCQkJICAgICAocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCA9PQotCQkJICAgICAgU0NTV19TVENUTF9TVEFUVVNfUEVORCkgfHwKLQkJCSAgICAgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0KLQkJCSAgICAgIChTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUyB8Ci0JCQkgICAgICAgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSkgewotI2lmZGVmIEZVTkNUUkFDRQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCQkJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwid3JpdGVVRSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGVhcl9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGF3X3Rlc3RfYW5kX3NldGJpdF9idXN5KFRCX1RYLGRldik9PTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd193cml0ZV9uZXh0KHBfY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGF3X2NsZWFyYml0X2J1c3koVEJfVFgsZGV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19jbGVhcl9idXN5KGRldik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwX2NoX3I9KHN0cnVjdCBjaGJrICopJnByaXZwdHItPmNoYW5uZWxbUkVBRF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdF9hbmRfc2V0X2JpdChDTEFXX0JIX0FDVElWRSwKLSAJCQkJCSh2b2lkICopJnBfY2hfci0+ZmxhZ19hKSA9PSAwKSB7Ci0JCQkgCXRhc2tsZXRfc2NoZWR1bGUoJnBfY2hfci0+dGFza2xldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSNpZmRlZiBERUJVR01TRwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHByb2Nlc3MgQ0xBV19TVEFSVF9XUklURSBleGl0XG4iLAotCQkJCSBkZXYtPm5hbWUpOwotI2VuZGlmCi0jaWZkZWYgRlVOQ1RSQUNFCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJTdFd0RXhpdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogd3Jvbmcgc2VsZWN0aW9uIGNvZGUgLSBpcnEgIgotCQkJCSJzdGF0ZT0lZFxuIixkZXYtPm5hbWUscF9jaC0+Y2xhd19zdGF0ZSk7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCQkJQ0xBV19EQkZfVEVYVCgyLHRyYWNlLCJiYWRJUlEiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwkJCQlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiUENJTm9CSCIpOworCQkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIlBDSV9yZWFkIik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKCEoKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NFQ19TVEFUVVMpIHx8CisJCSAocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCA9PSBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSB8fAorCQkgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0KKwkJIChTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUyB8IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkpIHsKKwkJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJTUGVuZF9yZCIpOworCQkJcmV0dXJuOworCQl9CisJCWNsZWFyX2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpOworCQljbGF3X2NsZWFyYml0X2J1c3koVEJfUkVUUlksIGRldik7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KENMQVdfQkhfQUNUSVZFLAorCQkJKHZvaWQgKikmcF9jaC0+ZmxhZ19hKSA9PSAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmcF9jaC0+dGFza2xldCk7CisJCWVsc2UKKwkJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJSZEJIQWN0Iik7CisJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJSZElSUVhpdCIpOworCQlyZXR1cm47CisJY2FzZSBDTEFXX1NUQVJUX1dSSVRFOgorCQlpZiAocF9jaC0+aXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbml0IENoZWNrIE9jY3VyZWQgaW4gIgorCQkJCSJ3cml0ZSBjaGFubmVsXG4iLCBkZXYtPm5hbWUpOworCQkJY2xlYXJfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSk7CisJCQlpZiAocF9jaC0+aXJiLT5lY3dbMF0gJiAweDgwKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlc2V0dGluZyBFdmVudCAiCisJCQkJCSJvY2N1cnJlZDpcbiIsIGRldi0+bmFtZSk7CisJCQkJaW5pdF90aW1lcigmcF9jaC0+dGltZXIpOworCQkJCXBfY2gtPnRpbWVyLmZ1bmN0aW9uID0KKwkJCQkJKHZvaWQgKiljbGF3X3dyaXRlX3JldHJ5OworCQkJCXBfY2gtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylwX2NoOworCQkJCXBfY2gtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTAqSFo7CisJCQkJYWRkX3RpbWVyKCZwX2NoLT50aW1lcik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHdyaXRlIGNvbm5lY3Rpb24gIgorCQkJCQkicmVzdGFydGluZ1xuIiwgZGV2LT5uYW1lKTsKKwkJCX0KKwkJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJyc3RydHdydCIpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChwX2NoLT5pcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfVU5JVF9FWENFUCkgeworCQkJY2xlYXJfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5pdCBFeGNlcHRpb24gIgorCQkJICAgICAgICJPY2N1cmVkIGluIHdyaXRlIGNoYW5uZWxcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJfQorCQlpZiAoISgocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU0VDX1NUQVRVUykgfHwKKwkJKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0gU0NTV19TVENUTF9TVEFUVVNfUEVORCkgfHwKKwkJKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0KKwkJKFNDU1dfU1RDVExfQUxFUlRfU1RBVFVTIHwgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSkgeworCQkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIndyaXRlVUUiKTsKKwkJCXJldHVybjsKKwkJfQorCQljbGVhcl9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKTsKKwkJaWYgKGNsYXdfdGVzdF9hbmRfc2V0Yml0X2J1c3koVEJfVFgsIGRldikgPT0gMCkgeworCQkJY2xhd193cml0ZV9uZXh0KHBfY2gpOworCQkJY2xhd19jbGVhcmJpdF9idXN5KFRCX1RYLCBkZXYpOworCQkJY2xhd19jbGVhcl9idXN5KGRldik7CisJCX0KKwkJcF9jaF9yID0gKHN0cnVjdCBjaGJrICopJnByaXZwdHItPmNoYW5uZWxbUkVBRF07CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KENMQVdfQkhfQUNUSVZFLAorCQkJKHZvaWQgKikmcF9jaF9yLT5mbGFnX2EpID09IDApCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZwX2NoX3ItPnRhc2tsZXQpOworCQlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiU3RXdEV4aXQiKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB3cm9uZyBzZWxlY3Rpb24gY29kZSAtIGlycSAiCisJCQkic3RhdGU9JWRcbiIsIGRldi0+bmFtZSwgcF9jaC0+Y2xhd19zdGF0ZSk7CisJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJiYWRJUlEiKTsKKwkJcmV0dXJuOwogICAgICAgICB9CiAKIH0gICAgICAgLyogICBlbmQgb2YgY2xhd19pcnFfaGFuZGxlciAgICAqLwpAQCAtMTAxMywyOSArNzc5LDExIEBACiAKIAlwX2NoID0gKHN0cnVjdCBjaGJrICopIGRhdGE7CiAgICAgICAgIGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXBfY2gtPm5kZXY7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXIgIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwotI2VuZGlmCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZhcmlhYmxlIHBfY2ggPVxuIixkZXYtPm5hbWUpOwotICAgICAgICBkdW1waXQoKGNoYXIgKikgcF9jaCwgc2l6ZW9mKHN0cnVjdCBjaGJrKSk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIklSUXRhc2siKTsKLQorCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJJUlF0YXNrIik7CiAgICAgICAgIHByaXZwdHIgPSAoc3RydWN0IGNsYXdfcHJpdmJrICopIGRldi0+cHJpdjsKLQotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBiaCByb3V0aW5lIC0gc3RhdGUtJTAyeFxuIiAsCi0JCWRldi0+bmFtZSwgcF9jaC0+Y2xhd19zdGF0ZSk7Ci0jZW5kaWYKLQogICAgICAgICB1bnBhY2tfcmVhZChkZXYpOwogICAgICAgICBjbGVhcl9iaXQoQ0xBV19CSF9BQ1RJVkUsICh2b2lkICopJnBfY2gtPmZsYWdfYSk7Ci0JQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJUc2tsZXRYdCIpOwotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgorCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJUc2tsZXRYdCIpOwogICAgICAgICByZXR1cm47CiB9ICAgICAgIC8qICAgIGVuZCBvZiBjbGF3X2lycV9iaCAgICAqLwogCkBAIC0xMDYwLDE2ICs4MDgsNyBAQAogICAgICAgICBwcml2cHRyID0gKHN0cnVjdCBjbGF3X3ByaXZiayAqKSBkZXYtPnByaXY7CiAgICAgICAgIGlmICghcHJpdnB0cikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlciAgXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsInJlbGVhc2UiKTsKLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgZGV2ID1cbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIGRldiwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUHJpdiBCdWZmYWxsb2MgJWRcbiIscHJpdnB0ci0+YnVmZnNfYWxsb2MpOwotCXByaW50ayhLRVJOX0lORk8gIlByaXYgcF9idWZmX2NjdyA9ICVwXG4iLCZwcml2cHRyLT5wX2J1ZmZfY2N3KTsKLSNlbmRpZgorCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJyZWxlYXNlIik7CiAgICAgICAgIHByaXZwdHItPnJlbGVhc2VfcGVuZD0xOwogICAgICAgICBjbGF3X3NldGJpdF9idXN5KFRCX1NUT1AsZGV2KTsKICAgICAgICAgZm9yICggaSA9IDE7IGkgPj0wIDsgIGktLSkgewpAQCAtMTEwMSwxOSArODQwLDE1IEBACiAJCXByaXZwdHItPnBrX3NrYiA9IE5VTEw7CiAJfQogCWlmKHByaXZwdHItPmJ1ZmZzX2FsbG9jICE9IDEpIHsKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0jZW5kaWYKLQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJub25lMmZyZSIpOworCQlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAibm9uZTJmcmUiKTsKIAkJcmV0dXJuIDA7CiAJfQotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiZnJlZWJ1ZnMiKTsKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiZnJlZWJ1ZnMiKTsKIAlpZiAocHJpdnB0ci0+cF9idWZmX2NjdyAhPSBOVUxMKSB7CiAgICAgICAgIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXByaXZwdHItPnBfYnVmZl9jY3csCiAJICAgICAgICAJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcocHJpdnB0ci0+cF9idWZmX2Njd19udW0pKTsKIAl9Ci0JQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJmcmVlcmVhZCIpOworCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJmcmVlcmVhZCIpOwogICAgICAgICBpZiAocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSA8IFBBR0VfU0laRSkgewogCSAgICBpZiAocHJpdnB0ci0+cF9idWZmX3JlYWQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHJpdnB0ci0+cF9idWZmX3JlYWQsCkBAIC0xMTI5LDcgKzg2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQkgQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJmcmVld3JpdCIpOworCSBDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiZnJlZXdyaXQiKTsKICAgICAgICAgaWYgKHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplIDwgUEFHRV9TSVpFICkgewogICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHJpdnB0ci0+cF9idWZmX3dyaXRlLAogCQkgICAgICAoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhwcml2cHRyLT5wX2J1ZmZfd3JpdGVfbnVtKSk7CkBAIC0xMTQzLDcgKzg3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQkgQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJjbGVhcnB0ciIpOworCSBDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2xlYXJwdHIiKTsKIAlwcml2cHRyLT5idWZmc19hbGxvYyA9IDA7CiAgICAgICAgIHByaXZwdHItPnBfYnVmZl9jY3c9TlVMTDsKICAgICAgICAgcHJpdnB0ci0+cF9idWZmX3JlYWQ9TlVMTDsKQEAgLTExODAsMTggKzkxNSwxMiBAQAogICAgICAgICAgICAgICAgIGRldi0+bmFtZSwKIAkJcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5sYXN0X2RzdGF0LAogCQlwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5sYXN0X2RzdGF0KTsKLQkJIENMQVdfREJGX1RFWFQoMix0cmFjZSwiYmFkY2xvc2UiKTsKKwkJIENMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJiYWRjbG9zZSIpOwogICAgICAgICB9Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJybHNleGl0Iik7CisJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgInJsc2V4aXQiKTsKICAgICAgICAgcmV0dXJuIDA7CiB9ICAgICAgLyogZW5kIG9mIGNsYXdfcmVsZWFzZSAgICAgKi8KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICogICAgICAgY2xhd193cml0ZV9yZXRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTEyMDMsMzIgKzkzMiwxMiBAQAogCiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2PXBfY2gtPm5kZXY7CiAKLQotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gImNsYXc6IHZhcmlhYmxlIHBfY2ggPVxuIik7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKSBwX2NoLCBzaXplb2Yoc3RydWN0IGNoYmspKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwid19yZXRyeSIpOworCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJ3X3JldHJ5Iik7CiAgICAgICAgIGlmIChwX2NoLT5jbGF3X3N0YXRlID09IENMQVdfU1RPUCkgewotI2lmZGVmIEZVTkNUUkFDRQotCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCiAgICAgICAgIAlyZXR1cm47CiAgICAgICAgIH0KLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoIEtFUk5fSU5GTyAiJXM6JXMgIHN0YXRlLSUwMnhcbiIgLAotCQlkZXYtPm5hbWUsCi0JCV9fZnVuY19fLAotCQlwX2NoLT5jbGF3X3N0YXRlKTsKLSNlbmRpZgogCWNsYXdfc3RydF9vdXRfSU8oIGRldiApOwotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwicnRyeV94aXQiKTsKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAicnRyeV94aXQiKTsKICAgICAgICAgcmV0dXJuOwogfSAgICAgIC8qIGVuZCBvZiBjbGF3X3dyaXRlX3JldHJ5ICAgICAgKi8KIApAQCAtMTI0NywxMiArOTU2LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqcGtfc2tiOwogCWludAlyYzsKIAotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIscF9jaC0+bmRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBwX2NoID1cbiIscF9jaC0+bmRldi0+bmFtZSk7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKSBwX2NoLCBzaXplb2Yoc3RydWN0IGNoYmspKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiY2xhd193cnQiKTsKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2xhd193cnQiKTsKICAgICAgICAgaWYgKHBfY2gtPmNsYXdfc3RhdGUgPT0gQ0xBV19TVE9QKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIHBfY2gtPm5kZXY7CkBAIC0xMjcyLDExICs5NzYsNiBAQAogICAgICAgICBpZiAocHJpdnB0ci0+cF93cml0ZV9hY3RpdmVfZmlyc3QhPU5VTEwpIHsKICAgICAgICAgICAgICAgICBjbGF3X3N0cnRfb3V0X0lPKGRldik7CiAgICAgICAgIH0KLQotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgogICAgICAgICByZXR1cm47CiB9ICAgICAgLyogZW5kIG9mIGNsYXdfd3JpdGVfbmV4dCAgICAgICovCiAKQEAgLTEyODgsMjIgKzk4NywxMiBAQAogc3RhdGljIHZvaWQKIGNsYXdfdGltZXIgKCBzdHJ1Y3QgY2hiayAqIHBfY2ggKQogewotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudHJ5XG4iLHBfY2gtPm5kZXYtPm5hbWUsX19mdW5jX18pOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgcF9jaCA9XG4iLHBfY2gtPm5kZXYtPm5hbWUpOwotICAgICAgICBkdW1waXQoKGNoYXIgKikgcF9jaCwgc2l6ZW9mKHN0cnVjdCBjaGJrKSk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsInRpbWVyIik7CisJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgInRpbWVyIik7CiAgICAgICAgIHBfY2gtPmZsYWcgfD0gQ0xBV19USU1FUjsKICAgICAgICAgd2FrZV91cCgmcF9jaC0+d2FpdCk7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlwX2NoLT5uZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgogICAgICAgICByZXR1cm47CiB9ICAgICAgLyogZW5kIG9mIGNsYXdfdGltZXIgICovCiAKLQogLyoKICoKICogICAgICAgZnVuY3Rpb25zCkBAIC0xMzI0LDEwICsxMDEzLDggQEAKIHsKIAlpbnQJb3JkZXJfb2ZfbWFnPTE7CQkvKiBhc3N1bWUgMiBwYWdlcyAqLwogCWludAludW1wPTI7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgRW50ZXIgcGFnZXMgPSAlZCBcbiIsX19mdW5jX18sbnVtX29mX3BhZ2VzKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFRfKDUsdHJhY2UsInBhZ2VzJWQiLG51bV9vZl9wYWdlcyk7CisKKwlDTEFXX0RCRl9URVhUXyg1LCB0cmFjZSwgInBhZ2VzJWQiLCBudW1fb2ZfcGFnZXMpOwogCWlmIChudW1fb2ZfcGFnZXMgPT0gMSkgICB7cmV0dXJuIDA7IH0gIC8qIG1hZ25pdHVkZSBvZiAwID0gMSBwYWdlICovCiAJLyogNTEyIHBhZ2VzID0gMk1lZyBvbiA0ayBwYWdlIHN5c3RlbXMgKi8KIAlpZiAobnVtX29mX3BhZ2VzID49IDUxMikge3JldHVybiA5OyB9CkBAIC0xMzM4LDExICsxMDI1LDcgQEAKIAkgIG9yZGVyX29mX21hZyArPTE7CiAJfQogCWlmIChvcmRlcl9vZl9tYWcgPiA5KSB7IG9yZGVyX29mX21hZyA9IDk7IH0gIC8qIEkga25vdyBpdCdzIHBhcmFub2lkICovCi0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzIEV4aXQgb24gbGluZSAlZCwgb3JkZXIgPSAlZFxuIiwKLQlfX2Z1bmNfXyxfX0xJTkVfXywgb3JkZXJfb2ZfbWFnKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFRfKDUsdHJhY2UsIm1hZyVkIixvcmRlcl9vZl9tYWcpOworCUNMQVdfREJGX1RFWFRfKDUsIHRyYWNlLCAibWFnJWQiLCBvcmRlcl9vZl9tYWcpOwogCXJldHVybiBvcmRlcl9vZl9tYWc7CiB9CiAKQEAgLTEzNTgsMjEgKzEwNDEsNyBAQAogICAgICAgICBzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXZwdHI7CiAgICAgICAgIHN0cnVjdCBjY3cxICB0ZW1wX2NjdzsKICAgICAgICAgc3RydWN0IGVuZGNjdyAqIHBfZW5kOwotI2lmZGVmIElPVFJBQ0UKLSAgICAgICAgc3RydWN0IGNjd2JrKiAgcF9idWY7Ci0jZW5kaWYKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlciAgXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJkZXZcbiIpOwotICAgICAgICBkdW1waXQoKGNoYXIgKikgZGV2LCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAicF9maXJzdFxuIik7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKSBwX2ZpcnN0LCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInBfbGFzdFxuIik7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKSBwX2xhc3QsIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiYWRkcmVhZHMiKTsKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiYWRkcmVhZHMiKTsKICAgICAgICAgcHJpdnB0ciA9IGRldi0+cHJpdjsKICAgICAgICAgcF9lbmQgPSBwcml2cHRyLT5wX2VuZF9jY3c7CiAKQEAgLTEzODAsMTEgKzEwNDksNyBAQAogICAgICAgICAqICAgICAgIHRvIGFwZW5kIHRoZSBydW5uaW5nIGNoYW5uZWwgcHJvZ3JhbXMKICAgICAgICAgKi8KICAgICAgICAgaWYgKCBwX2ZpcnN0PT1OVUxMKSB7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0jZW5kaWYKLQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJhZGRleGl0Iik7CisJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJhZGRleGl0Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIApAQCAtMTQxMSwyMSArMTA3NiwxMSBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9maXJzdCA9PU5VTEwgKSB7Ci0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBwX3JlYWRfYWN0aXZlX2ZpcnN0ID09IE5VTEwgXG4iLAotCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBSZWFkIGFjdGl2ZSBmaXJzdC9sYXN0IGNoYW5nZWQgXG4iLAotCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2ZpcnN0PSBwX2ZpcnN0OyAgLyogICAgc2V0IG5ldyBmaXJzdCAqLwogICAgICAgICAgICAgICAgIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2xhc3QgPSBwX2xhc3Q7ICAgLyogICAgc2V0IG5ldyBsYXN0ICAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBSZWFkIGluIHByb2dyZXNzIFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIC8qIHNldCB1cCBUSUMgY2N3ICAqLwogICAgICAgICAgICAgICAgIHRlbXBfY2N3LmNkYT0gKF9fdTMyKV9fcGEoJnBfZmlyc3QtPnJlYWQpOwogICAgICAgICAgICAgICAgIHRlbXBfY2N3LmNvdW50PTA7CkBAIC0xNDYyLDI3ICsxMTE3LDcgQEAKICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2xhc3QtPm5leHQgPSBwX2ZpcnN0OwogICAgICAgICAgICAgICAgIHByaXZwdHItPnBfcmVhZF9hY3RpdmVfbGFzdD1wX2xhc3Q7CiAgICAgICAgIH0gLyogZW5kIG9mIGlmICggcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfZmlyc3QgPT1OVUxMKSAgKi8KLSNpZmRlZiBJT1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgIGR1bXAgcF9sYXN0IENDVyBCSyBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopcF9sYXN0LCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgIGR1bXAgcF9lbmQgQ0NXIEJLIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwotICAgICAgICBkdW1waXQoKGNoYXIgKilwX2VuZCwgc2l6ZW9mKHN0cnVjdCBlbmRjY3cpKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIGR1bXAgcF9maXJzdCBDQ1cgQksgXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKXBfZmlyc3QsIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRHVtcCBBY3RpdmUgQ0NXIGNoYWluIFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLSAgICAgICAgcF9idWY9cHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9maXJzdDsKLSAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopcF9idWYsIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKLSAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKLSAgICAgICAgfQotI2VuZGlmCi0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJhZGRleGl0Iik7CisJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImFkZGV4aXQiKTsKICAgICAgICAgcmV0dXJuIDA7CiB9ICAgIC8qICAgICBlbmQgb2YgYWRkX2NsYXdfcmVhZHMgICAqLwogCkBAIC0xNDk0LDQ0ICsxMTI5LDI5IEBACiBzdGF0aWMgdm9pZAogY2N3X2NoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgcmV0dXJuX2NvZGUpCiB7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gZW50ZXIgIFxuIiwKLQkJY2Rldi0+ZGV2LmJ1c19pZCxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsImNjd3JldCIpOwotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInZhcmlhYmxlIGNkZXYgPVxuIik7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKSBjZGV2LCBzaXplb2Yoc3RydWN0IGNjd19kZXZpY2UpKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAidmFyaWFibGUgcmV0dXJuX2NvZGUgPSAlZFxuIixyZXR1cm5fY29kZSk7Ci0jZW5kaWYKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2N3cmV0Iik7CiAgICAgICAgIGlmIChyZXR1cm5fY29kZSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChyZXR1cm5fY29kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtRUJVU1k6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBCdXN5ICFcbiIsCi0JCQkJCWNkZXYtPmRldi5idXNfaWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLUVOT0RFVjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBNaXNzaW5nIGRldmljZSBjYWxsZWQgIgotCQkJCQkiZm9yIElPIEVOT0RFVlxuIiwgY2Rldi0+ZGV2LmJ1c19pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtRUlPOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FTUVSRyAiJXM6IFN0YXR1cyBwZW5kaW5nLi4uIEVJTyBcbiIsCi0JCQkJCWNkZXYtPmRldi5idXNfaWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJCWNhc2UgLUVJTlZBTDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBJbnZhbGlkIERldiBTdGF0ZSBFSU5WQUwgXG4iLAotCQkJCQljZGV2LT5kZXYuYnVzX2lkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FTUVSRyAiJXM6IFVua25vd24gZXJyb3IgaW4gIgorCQljYXNlIC1FQlVTWTogLyogQlVTWSBpcyBhIHRyYW5zaWVudCBzdGF0ZSBubyBhY3Rpb24gbmVlZGVkICovCisJCQlicmVhazsKKwkJY2FzZSAtRU5PREVWOgorCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBNaXNzaW5nIGRldmljZSBjYWxsZWQgIgorCQkJCSJmb3IgSU8gRU5PREVWXG4iLCBjZGV2LT5kZXYuYnVzX2lkKTsKKwkJCWJyZWFrOworCQljYXNlIC1FSU86CisJCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IFN0YXR1cyBwZW5kaW5nLi4uIEVJTyBcbiIsCisJCQkJY2Rldi0+ZGV2LmJ1c19pZCk7CisJCQlicmVhazsKKwkJY2FzZSAtRUlOVkFMOgorCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBJbnZhbGlkIERldiBTdGF0ZSBFSU5WQUwgXG4iLAorCQkJCWNkZXYtPmRldi5idXNfaWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IFVua25vd24gZXJyb3IgaW4gIgogCQkJCSAiRG9fSU8gJWRcbiIsY2Rldi0+ZGV2LmJ1c19pZCwgcmV0dXJuX2NvZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+IGV4aXQgb24gbGluZSAlZFxuIiwKLQkJY2Rldi0+ZGV2LmJ1c19pZCxfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsImNjd3JldCIpOworCQl9CisJfQorCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJjY3dyZXQiKTsKIH0gICAgLyogICAgZW5kIG9mIGNjd19jaGVja19yZXR1cm5fY29kZSAgICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKQEAgLTE1NDEsMTczICsxMTYxLDQ2IEBACiBzdGF0aWMgdm9pZAogY2N3X2NoZWNrX3VuaXRfY2hlY2soc3RydWN0IGNoYmsgKiBwX2NoLCB1bnNpZ25lZCBjaGFyIHNlbnNlICkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcF9jaC0+bmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBfY2gtPm5kZXY7CiAKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+IGVudGVyXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgZGV2ID1cbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopZGV2LCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZhcmlhYmxlIHNlbnNlID1cbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopJnNlbnNlLCAyKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwidW5pdGNoZWsiKTsKLQorCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJ1bml0Y2hlayIpOwogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogVW5pdCBDaGVjayB3aXRoIHNlbnNlIGJ5dGU6MHglMDR4XG4iLAotICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgc2Vuc2UpOworCSAgICAgICBuZGV2LT5uYW1lLCBzZW5zZSk7CiAKICAgICAgICAgaWYgKHNlbnNlICYgMHg0MCkgewogICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnRlcmZhY2UgZGlzY29ubmVjdCBvciAiCiAJCQkJIlNlbGVjdGl2ZSByZXNldCAiCi0JCQkgICAgICAgCSJvY2N1cnJlZCAocmVtb3RlIHNpZGUpXG4iLCBkZXYtPm5hbWUpOworCQkJCSJvY2N1cnJlZCAocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogU3lzdGVtIHJlc2V0IG9jY3VyZWQiCi0JCQkJIiAocmVtb3RlIHNpZGUpXG4iLCBkZXYtPm5hbWUpOworCQkJCSIgKHJlbW90ZSBzaWRlKVxuIiwgbmRldi0+bmFtZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNlbnNlICYgMHgyMCkgewogICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEYXRhLXN0cmVhbWluZyAiCi0JCQkJInRpbWVvdXQpXG4iLCBkZXYtPm5hbWUpOworCQkJCSJ0aW1lb3V0KVxuIiwgbmRldi0+bmFtZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEYXRhLXRyYW5zZmVyIHBhcml0eSIKLQkJCQkiIGVycm9yXG4iLCBkZXYtPm5hbWUpOworCQkJCSIgZXJyb3JcbiIsIG5kZXYtPm5hbWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChzZW5zZSAmIDB4MTApIHsKICAgICAgICAgICAgICAgICBpZiAoc2Vuc2UgJiAweDIwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogSGFyZHdhcmUgbWFsZnVuY3Rpb24gIgotCQkJCSIocmVtb3RlIHNpZGUpXG4iLCBkZXYtPm5hbWUpOworCQkJCSIocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVhZC1kYXRhIHBhcml0eSBlcnJvciAiCi0JCQkJIihyZW1vdGUgc2lkZSlcbiIsIGRldi0+bmFtZSk7CisJCQkJIihyZW1vdGUgc2lkZSlcbiIsIG5kZXYtPm5hbWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIGV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgogfSAgIC8qICAgIGVuZCBvZiBjY3dfY2hlY2tfdW5pdF9jaGVjayAgICAqLwogCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgotKiBEdW1wIGJ1ZmZlciBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQKLWR1bXBpdChjaGFyKiBidWYsIGludCBsZW4pCi17Ci0KLSAgICAgICAgX191MzIgICAgICBjdCwgc3csIHJtLCBkdXA7Ci0gICAgICAgIGNoYXIgICAgICAgKnB0ciwgKnJwdHI7Ci0gICAgICAgIGNoYXIgICAgICAgdGJ1Zls4Ml0sIHRkdXBbODJdOwotI2lmIChDT05GSUdfNjRCSVQpCi0gICAgICAgIGNoYXIgICAgICAgYWRkclsyMl07Ci0jZWxzZQotICAgICAgICBjaGFyICAgICAgIGFkZHJbMTJdOwotI2VuZGlmCi0gICAgICAgIGNoYXIgICAgICAgYm9mZlsxMl07Ci0gICAgICAgIGNoYXIgICAgICAgYmhleFs4Ml0sIGR1cGhleFs4Ml07Ci0gICAgICAgIGNoYXIgICAgICAgYmFzY1s0MF07Ci0KLSAgICAgICAgc3cgID0gMDsKLSAgICAgICAgcnB0ciA9cHRyPWJ1ZjsKLSAgICAgICAgcm0gID0gMTY7Ci0gICAgICAgIGR1cGhleFswXSAgPSAweDAwOwotICAgICAgICBkdXAgPSAwOwotICAgICAgICBmb3IgKCBjdD0wOyBjdCA8IGxlbjsgY3QrKywgcHRyKyssIHJwdHIrKyApICB7Ci0gICAgICAgICAgICAgICAgaWYgKHN3ID09IDApIHsKLSNpZiAoQ09ORklHXzY0QklUKQotICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhZGRyLCAiJTE2LjE2bFgiLCh1bnNpZ25lZCBsb25nKXJwdHIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYWRkciwgIiU4LjhYIiwoX191MzIpcnB0cik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYm9mZiwgIiU0LjRYIiwgKF9fdTMyKWN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJoZXhbMF0gPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICAgICAgYmFzY1swXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoc3cgPT0gNCkgfHwgKHN3ID09IDEyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0KGJoZXgsICIgIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdyA9PSA4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXQoYmhleCwgIiAgIik7Ci0gICAgICAgICAgICAgICAgfQotI2lmIChDT05GSUdfNjRCSVQpCi0gICAgICAgICAgICAgICAgc3ByaW50Zih0YnVmLCIlMi4ybFgiLCAodW5zaWduZWQgbG9uZykqcHRyKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3ByaW50Zih0YnVmLCIlMi4yWCIsIChfX3UzMikqcHRyKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHRidWZbMl0gPSAnXDAnOwotICAgICAgICAgICAgICAgIHN0cmNhdChiaGV4LCB0YnVmKTsKLSAgICAgICAgICAgICAgICBpZiAoKDAhPWlzcHJpbnQoKnB0cikpICYmICgqcHRyID49IDB4MjApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYXNjW3N3XSA9ICpwdHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYmFzY1tzd10gPSAnLic7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJhc2Nbc3crMV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIHN3Kys7Ci0gICAgICAgICAgICAgICAgcm0tLTsKLSAgICAgICAgICAgICAgICBpZiAoc3c9PTE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0cmNtcChkdXBoZXgsIGJoZXgpKSAhPTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR1cCAhPTApIHsKLQkJCQkJc3ByaW50Zih0ZHVwLCJEdXBsaWNhdGUgYXMgYWJvdmUgdG8iCi0JCQkJCQkiICVzIiwgYWRkcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCBLRVJOX0lORk8gIiAgICAgICAgICAgICAgICAgIgotCQkJCQkJIiAgIC0tLSAlcyAtLS1cbiIsdGR1cCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCBLRVJOX0lORk8gIiAgICVzICgrJXMpIDogJXMgIFslc11cbiIsCi0JCQkJCSBhZGRyLCBib2ZmLCBiaGV4LCBiYXNjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVwID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGR1cGhleCwgYmhleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVwKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBybSA9IDE2OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgLyogZW5kZm9yICovCi0KLSAgICAgICAgaWYgKHN3ICE9IDApIHsKLSAgICAgICAgICAgICAgICBmb3IgKCA7IHJtID4gMDsgcm0tLSwgc3crKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3c9PTQpIHx8IChzdz09MTIpKSBzdHJjYXQoYmhleCwgIiAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdz09OCkgICAgICAgICAgICAgICBzdHJjYXQoYmhleCwgIiAgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXQoYmhleCwgIiAgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXQoYmFzYywgIiAiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGR1cCAhPTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYodGR1cCwiRHVwbGljYXRlIGFzIGFib3ZlIHRvICVzIiwgYWRkcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIEtFUk5fSU5GTyAiICAgICAgICAgICAgICAgICAgICAtLS0gJXMgLS0tXG4iLAotCQkJCXRkdXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGsoIEtFUk5fSU5GTyAiICAgJXMgKCslcykgOiAlcyAgWyVzXVxuIiwKLQkJCWFkZHIsIGJvZmYsIGJoZXgsIGJhc2MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChkdXAgPj0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHRkdXAsIkR1cGxpY2F0ZSBhcyBhYm92ZSB0byAlcyIsIGFkZHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCBLRVJOX0lORk8gIiAgICAgICAgICAgICAgICAgICAgLS0tICVzIC0tLVxuIiwKLQkJCQl0ZHVwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGR1cCAhPTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayggS0VSTl9JTkZPICIgICAlcyAoKyVzKSA6ICVzICBbJXNdXG4iLAotCQkJCWFkZHIsIGJvZmYsIGJoZXgsIGJhc2MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLX0gICAvKiAgIGVuZCBvZiBkdW1waXQgICovCi0jZW5kaWYKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogKiAgICAgICAgICAgICAgIGZpbmRfbGluayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE3MTgsMTYgKzEyMTEsNyBAQAogCXN0cnVjdCBjbGF3X2VudiAqcF9lbnY7CiAJaW50ICAgIHJjPTA7CiAKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczolcyA+IGVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiZmluZGxpbmsiKTsKLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgZGV2ID0gXG4iLGRldi0+bmFtZSk7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKSBkZXYsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSkpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgaG9zdF9uYW1lID0gJXNcbiIsZGV2LT5uYW1lLCBob3N0X25hbWUpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgd3NfbmFtZSA9ICVzXG4iLGRldi0+bmFtZSwgd3NfbmFtZSk7Ci0jZW5kaWYKKwlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiZmluZGxpbmsiKTsKICAgICAgICAgcHJpdnB0cj1kZXYtPnByaXY7CiAgICAgICAgIHBfZW52PXByaXZwdHItPnBfZW52OwogCXN3aXRjaCAocF9lbnYtPnBhY2tpbmcpCkBAIC0xNzUwLDEwICsxMjM0LDYgQEAKIAkJCWJyZWFrOwogCX0KIAotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuIDA7CiB9ICAgIC8qICAgIGVuZCBvZiBmaW5kX2xpbmsgICAgKi8KIApAQCAtMTc4MiwyNyArMTI2MiwxMSBAQAogICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2s7CiAJc3RydWN0IGNsYXdwaAkJCSpwa19oZWFkOwogCXN0cnVjdCBjaGJrCQkJKmNoOwotI2lmZGVmIElPVFJBQ0UKLSAgICAgICAgc3RydWN0IGNjd2JrICAgICAgICAgICAgICAgICAgICpwX2J1ZjsKLSNlbmRpZgotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gZW50ZXJcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiaHdfdHgiKTsKLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgZGV2IHNrYiA9XG4iLGRldi0+bmFtZSk7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKSBza2IsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgZGV2ID1cbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIGRldiwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBsaW5raWQgPSAlbGRcbiIsZGV2LT5uYW1lLGxpbmtpZCk7Ci0jZW5kaWYKKworCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJod190eCIpOwogICAgICAgICBwcml2cHRyID0gKHN0cnVjdCBjbGF3X3ByaXZiayAqKSAoZGV2LT5wcml2KTsKICAgICAgICAgcF9jaD0oc3RydWN0IGNoYmsgKikmcHJpdnB0ci0+Y2hhbm5lbFtXUklURV07CiAJcF9lbnYgPXByaXZwdHItPnBfZW52OwotI2lmZGVmIElPVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBkdW1wIHNrX2J1ZmYgIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwotICAgICAgICBkdW1waXQoKGNoYXIgKilza2IgLHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpOwotI2VuZGlmCiAJY2xhd19mcmVlX3dydF9idWYoZGV2KTsJLyogQ2xlYW4gdXAgZnJlZSBjaGFpbiBpZiBwb3NpYmxlICovCiAgICAgICAgIC8qICBzY2FuIHRoZSB3cml0ZSBxdWV1ZSB0byBmcmVlIGFueSBjb21wbGV0ZWQgd3JpdGUgcGFja2V0cyAgICovCiAgICAgICAgIHBfZmlyc3RfY2N3PU5VTEw7CkBAIC0xODM0LDExICsxMjk4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19zdHJ0X291dF9JTyhkZXYgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19mcmVlX3dydF9idWYoIGRldiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpdnB0ci0+d3JpdGVfZnJlZV9jb3VudD09MCkgewotI2lmZGVmIElPVFJBQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCXByaW50ayhLRVJOX0lORk8gIiVzOiAiCi0JCQkJCSAgICIoY2xhd19jaGVja19idXN5KSBubyBmcmVlIHdyaXRlICIKLQkJCQkJICAgImJ1ZmZlcnNcbiIsIGRldi0+bmFtZSk7Ci0jZW5kaWYKIAkJCQkJY2ggPSAmcHJpdnB0ci0+Y2hhbm5lbFtXUklURV07CiAJCQkJCWF0b21pY19pbmMoJnNrYi0+dXNlcnMpOwogCQkJCQlza2JfcXVldWVfdGFpbCgmY2gtPmNvbGxlY3RfcXVldWUsIHNrYik7CkBAIC0xODUxLDEwICsxMzEwLDYgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLyogIHR4IGxvY2sgICovCiAgICAgICAgICAgICAgICAgaWYgKGNsYXdfdGVzdF9hbmRfc2V0Yml0X2J1c3koVEJfVFgsZGV2KSkgeyAvKiBzZXQgdG8gYnVzeSAqLwotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogIGJ1c3kgIChjbGF3X3Rlc3RfYW5kX3NldGJpdF8iCi0JCQkJImJ1c3kpXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmCiAJCQljaCA9ICZwcml2cHRyLT5jaGFubmVsW1dSSVRFXTsKIAkJCWF0b21pY19pbmMoJnNrYi0+dXNlcnMpOwogCQkJc2tiX3F1ZXVlX3RhaWwoJmNoLT5jb2xsZWN0X3F1ZXVlLCBza2IpOwpAQCAtMTg3MSwyOCArMTMyNiwxNiBAQAogICAgICAgICAgICAgcHJpdnB0ci0+cF93cml0ZV9mcmVlX2NoYWluID09IE5VTEwgKSB7CiAKICAgICAgICAgICAgICAgICBjbGF3X3NldGJpdF9idXN5KFRCX05PQlVGRkVSLGRldik7Ci0KLSNpZmRlZiBERUJVR01TRwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAgYnVzeSAgKGNsYXdfc2V0Yml0X2J1c3kiCi0JCQkiKFRCX05PQlVGRkVSKSlcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgIGZyZWVfY291bnQ6ICVkLCBudW1CdWZmZXJzIDogJWRcbiIsCi0JCQkoaW50KXByaXZwdHItPndyaXRlX2ZyZWVfY291bnQsKGludCkgbnVtQnVmZmVycyApOwotI2VuZGlmCiAJCWNoID0gJnByaXZwdHItPmNoYW5uZWxbV1JJVEVdOwogCQlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKIAkJc2tiX3F1ZXVlX3RhaWwoJmNoLT5jb2xsZWN0X3F1ZXVlLCBza2IpOwotCQlDTEFXX0RCRl9URVhUKDIsdHJhY2UsImNsYXdidXN5Iik7CisJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJjbGF3YnVzeSIpOwogICAgICAgICAgICAgICAgIGdvdG8gRG9uZTI7CiAgICAgICAgIH0KICAgICAgICAgcERhdGFBZGRyZXNzPXNrYi0+ZGF0YTsKICAgICAgICAgbGVuX29mX2RhdGE9c2tiLT5sZW47CiAKICAgICAgICAgd2hpbGUgKGxlbl9vZl9kYXRhID4gMCkgewotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgbGVuZ3RoLW9mLWRhdGEgaXMgJWxkIFxuIiwKLQkJCWRldi0+bmFtZSAsX19mdW5jX18sbGVuX29mX2RhdGEpOwotICAgICAgICAgICAgICAgIGR1bXBpdCgoY2hhciAqKXBEYXRhQWRkcmVzcyAsNjQpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgcF90aGlzX2Njdz1wcml2cHRyLT5wX3dyaXRlX2ZyZWVfY2hhaW47ICAvKiBnZXQgYSBibG9jayAqLwogCQlpZiAocF90aGlzX2NjdyA9PSBOVUxMKSB7IC8qIGxvc3QgdGhlIHJhY2UgKi8KIAkJCWNoID0gJnByaXZwdHItPmNoYW5uZWxbV1JJVEVdOwpAQCAtMTkyNCwxMiArMTM2Nyw2IEBACiAJCQkJKF9fdTMyKV9fcGEoJnBfdGhpc19jY3ctPndyaXRlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcF9sYXN0X2Njdz1wX3RoaXNfY2N3OyAgICAgIC8qIHNhdmUgbmV3IGxhc3QgYmxvY2sgKi8KLSNpZmRlZiBJT1RSQUNFCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gQ0NXIGFuZCBCdWZmZXIgJWxkIGJ5dGVzIGxvbmcgXG4iLAotCQkJZGV2LT5uYW1lLF9fZnVuY19fLGJ5dGVzSW5UaGlzQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBkdW1waXQoKGNoYXIgKilwX3RoaXNfY2N3LCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7Ci0gICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopcF90aGlzX2Njdy0+cF9idWZmZXIsIDY0KTsKLSNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgLyogICAgICBGaXJzdENDVyBhbmQgTGFzdENDVyBub3cgY29udGFpbiBhIG5ldyBzZXQgb2Ygd3JpdGUgY2hhbm5lbApAQCAtMTk2MiwxMyArMTM5OSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcEVuZC0+d3JpdGUxX25vcDIuY291bnQ9MTsKICAgICAgICAgICAgICAgICB9ICAvKiBlbmQgaWYgaWYgKHBFbmQtPndyaXRlMSkgKi8KIAotCiAgICAgICAgICAgICAgICAgaWYgKHByaXZwdHItPnBfd3JpdGVfYWN0aXZlX2ZpcnN0PT1OVUxMICkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF93cml0ZV9hY3RpdmVfZmlyc3Q9cF9maXJzdF9jY3c7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3dyaXRlX2FjdGl2ZV9sYXN0PXBfbGFzdF9jY3c7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIHNldCB1cCBUaWMgQ0NXcyAgICAgICAgICovCiAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDQ1cuY2RhPShfX3UzMilfX3BhKCZwX2ZpcnN0X2Njdy0+d3JpdGUpOwpAQCAtMjAwNywxOSArMTQ0Miw2IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgIH0gLyogZW5kaWYgKHBfZmlyc3RfY2N3IT1OVUxMKSAgKi8KLQotCi0jaWZkZWYgSU9UUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+ICBEdW1wIEFjdGl2ZSBDQ1cgY2hhaW4gXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18pOwotICAgICAgICBwX2J1Zj1wcml2cHRyLT5wX3dyaXRlX2FjdGl2ZV9maXJzdDsKLSAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopcF9idWYsIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKLSAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICBwX2J1Zj0oc3RydWN0IGNjd2JrKilwcml2cHRyLT5wX2VuZF9jY3c7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKXBfYnVmLCBzaXplb2Yoc3RydWN0IGVuZGNjdykpOwotI2VuZGlmCiAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJaWYgKGxpbmtpZD09MCkgewogICAgICAgICAJbG9jaz1MT0NLX05POwpAQCAtMjAyOSwyMSArMTQ1MSwxMiBAQAogICAgICAgICB9CiAgICAgICAgIGNsYXdfc3RydF9vdXRfSU8oZGV2ICk7CiAgICAgICAgIC8qICAgICAgaWYgd3JpdGUgZnJlZSBjb3VudCBpcyB6ZXJvICwgc2V0IE5PQlVGRkVSICAgICAgICovCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiBmcmVlX2NvdW50IGlzICVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sCi0JCShpbnQpIHByaXZwdHItPndyaXRlX2ZyZWVfY291bnQgKTsKLSNlbmRpZgogCWlmIChwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50PT0wKSB7CiAJCWNsYXdfc2V0Yml0X2J1c3koVEJfTk9CVUZGRVIsZGV2KTsKICAgICAgICAgfQogRG9uZTI6CiAJY2xhd19jbGVhcmJpdF9idXN5KFRCX1RYLGRldik7CiBEb25lOgotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+IGV4aXQgb24gbGluZSAlZCwgcmMgPSAlZCBcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXywgcmMpOwotI2VuZGlmCiAJcmV0dXJuKHJjKTsKIH0gICAgLyogICAgZW5kIG9mIGNsYXdfaHdfdHggICAgKi8KIApAQCAtMjA3NSwxNCArMTQ4OCw3IEBACiAgICAgICAgIHN0cnVjdCBjbGF3aCAqcENsYXdIPU5VTEw7CiAgICAgICAgIGFkZHJfdCAgIHJlYWxfVElDX2FkZHJlc3M7CiAgICAgICAgIGludCBpLGo7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgZW50ZXIgIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJpbml0X2NjdyIpOwotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBkZXYgPVxuIixkZXYtPm5hbWUpOwotICAgICAgICBkdW1waXQoKGNoYXIgKikgZGV2LCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpKTsKLSNlbmRpZgorCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJpbml0X2NjdyIpOwogCiAgICAgICAgIC8qICBpbml0aWFsaXplICBzdGF0aXN0aWNzIGZpZWxkICovCiAgICAgICAgIHByaXZwdHItPmFjdGl2ZV9saW5rX0lEPTA7CkBAIC0yMTA3LDIwICsxNTEzLDYgQEAKICAgICAgICAgKi8KICAgICAgICAgY2N3X2Jsb2Nrc19yZXF1aXJlZCA9CiAJCXByaXZwdHItPnBfZW52LT5yZWFkX2J1ZmZlcnMrcHJpdnB0ci0+cF9lbnYtPndyaXRlX2J1ZmZlcnMrMTsKLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSAiCi0JCSJjY3dfYmxvY2tzX3JlcXVpcmVkPSVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sCi0JCWNjd19ibG9ja3NfcmVxdWlyZWQpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSAiCi0JCSJQQUdFX1NJWkU9MHgleFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLAotCQkodW5zaWduZWQgaW50KVBBR0VfU0laRSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gIgotCQkiUEFHRV9NQVNLPTB4JXhcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXywKLQkJKHVuc2lnbmVkIGludClQQUdFX01BU0spOwotI2VuZGlmCiAgICAgICAgIC8qCiAgICAgICAgICogY29tcHV0ZSBudW1iZXIgb2YgQ0NXIGJsb2NrcyB0aGF0IHdpbGwgZml0IGluIGEgcGFnZQogICAgICAgICAqLwpAQCAtMjEyOCwxNCArMTUyMCw2IEBACiAgICAgICAgIGNjd19wYWdlc19yZXF1aXJlZD0KIAkJRElWX1JPVU5EX1VQKGNjd19ibG9ja3NfcmVxdWlyZWQsIGNjd19ibG9ja3NfcGVycGFnZSk7CiAKLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+IGNjd19ibG9ja3NfcGVycGFnZT0lZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLAotCQljY3dfYmxvY2tzX3BlcnBhZ2UpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+IGNjd19wYWdlc19yZXF1aXJlZD0lZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLAotCQljY3dfcGFnZXNfcmVxdWlyZWQpOwotI2VuZGlmCiAgICAgICAgIC8qCiAgICAgICAgICAqICByZWFkIGFuZCB3cml0ZSBzaXplcyBhcmUgc2V0IGJ5IDIgY29uc3RhbnRzIGluIGNsYXcuaAogCSAqICA0ayBhbmQgMzJrLiAgVW5wYWNrZWQgdmFsdWVzIG90aGVyIHRoYW4gNGsgYXJlIG5vdCBnb2luZyB0bwpAQCAtMjE2NiwzNiArMTU1MCw2IEBACiAJCWNsYXdfd3JpdGVfcGFnZXMgPSBwcml2cHRyLT5wX2Vudi0+d3JpdGVfYnVmZmVycyAqCiAJCQkJCXByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJ3cml0ZTsKICAgICAgICAgfQotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgIGlmIChwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplIDwgUEFHRV9TSVpFKSB7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSByZWFkc19wZXJwYWdlPSVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sCi0JCWNsYXdfcmVhZHNfcGVycGFnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBwYWdlc19wZXJyZWFkPSVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sCi0JCXByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSByZWFkX3BhZ2VzPSVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sCi0JCWNsYXdfcmVhZF9wYWdlcyk7Ci0gICAgICAgIGlmIChwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSA8IFBBR0VfU0laRSkgewotICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgd3JpdGVzX3BlcnBhZ2U9JWRcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXywKLQkJY2xhd193cml0ZXNfcGVycGFnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBwYWdlc19wZXJ3cml0ZT0lZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLAotCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGUpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIHdyaXRlX3BhZ2VzPSVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sCi0JCWNsYXdfd3JpdGVfcGFnZXMpOwotI2VuZGlmCi0KLQogICAgICAgICAvKgogICAgICAgICAqICAgICAgICAgICAgICAgYWxsb2NhdGUgY2N3X3BhZ2VzX3JlcXVpcmVkCiAgICAgICAgICovCkBAIC0yMjA0LDE3ICsxNTU4LDYgQEAKIAkJCSh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhfX0dGUF9ETUEsCiAJCSAgICAgICAgKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoY2N3X3BhZ2VzX3JlcXVpcmVkICkpOwogICAgICAgICAgICAgICAgIGlmIChwcml2cHRyLT5wX2J1ZmZfY2N3PT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSAgIgotCQkJCSJfX2dldF9mcmVlX3BhZ2VzIGZvciBDQ1dzIGZhaWxlZCA6ICIKLQkJCQkicGFnZXMgaXMgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLF9fZnVuY19fLAotCQkJCWNjd19wYWdlc19yZXF1aXJlZCApOwotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiAiCi0JCQkJImV4aXQgb24gbGluZSAlZCwgcmMgPSBFTk9NRU1cbiIsCi0JCQkJZGV2LT5uYW1lLF9fZnVuY19fLAotCQkJCSBfX0xJTkVfXyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX2J1ZmZfY2N3X251bT1jY3dfcGFnZXNfcmVxdWlyZWQ7CkBAIC0yMjI5LDExICsxNTcyLDYgQEAKICAgICAgICAgcHJpdnB0ci0+cF9lbmRfY2N3ID0gKHN0cnVjdCBlbmRjY3cgKikmcHJpdnB0ci0+ZW5kX2NjdzsKICAgICAgICAgcmVhbF9hZGRyZXNzICA9IChfX3UzMilfX3BhKHByaXZwdHItPnBfZW5kX2Njdyk7CiAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6ZSBlbmRpbmcgQ0NXIGJsb2NrICAgICAgICovCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgYmVnaW4gaW5pdGlhbGl6ZSBlbmRpbmcgQ0NXIGJsb2Nrc1xuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgotCiAgICAgICAgIHBfZW5kY2N3PXByaXZwdHItPnBfZW5kX2NjdzsKICAgICAgICAgcF9lbmRjY3ctPnJlYWw9cmVhbF9hZGRyZXNzOwogICAgICAgICBwX2VuZGNjdy0+d3JpdGUxPTB4MDA7CkBAIC0yMjg3LDIxICsxNjI1LDEwIEBACiAgICAgICAgIHBfZW5kY2N3LT5yZWFkMl9ub3AyLmNvdW50ICAgICAgICA9IDE7CiAgICAgICAgIHBfZW5kY2N3LT5yZWFkMl9ub3AyLmNkYSAgICAgICAgICA9IDA7CiAKLSNpZmRlZiBJT1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIGR1bXAgY2xhdyBlbmRpbmcgQ0NXIEJLIFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopcF9lbmRjY3csIHNpemVvZihzdHJ1Y3QgZW5kY2N3KSk7Ci0jZW5kaWYKLQogICAgICAgICAvKgogICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIGEgY2hhaW4gb2YgQ0NXcwogICAgICAgICAqCiAgICAgICAgICovCi0KLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSAgQmVnaW4gYnVpbGQgYSBjaGFpbiBvZiBDQ1cgYnVmZmVyIFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgogICAgICAgICBwX2J1ZmY9cHJpdnB0ci0+cF9idWZmX2NjdzsKIAogICAgICAgICBwX2ZyZWVfY2hhaW49TlVMTDsKQEAgLTIzMTYsMjYgKzE2NDMsMTAgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcF9idWZmKz1QQUdFX1NJWkU7CiAgICAgICAgIH0KLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSAiCi0JCSJFbmQgYnVpbGQgYSBjaGFpbiBvZiBDQ1cgYnVmZmVyIFxuIiwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0gICAgICAgIHBfYnVmPXBfZnJlZV9jaGFpbjsKLSAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopcF9idWYsIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKLSAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICAgICAgLyoKICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXplIENsYXdTaWduYWxCbG9jawogICAgICAgICAqCiAgICAgICAgICovCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgIgotCQkiQmVnaW4gaW5pdGlhbGl6ZSBDbGF3U2lnbmFsQmxvY2sgXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18pOwotI2VuZGlmCiAgICAgICAgIGlmIChwcml2cHRyLT5wX2NsYXdfc2lnbmFsX2Jsaz09TlVMTCkgewogICAgICAgICAgICAgICAgIHByaXZwdHItPnBfY2xhd19zaWduYWxfYmxrPXBfZnJlZV9jaGFpbjsKICAgICAgICAgICAgICAgICBwX2ZyZWVfY2hhaW49cF9mcmVlX2NoYWluLT5uZXh0OwpAQCAtMjM0NCwxMiArMTY1NSw2IEBACiAgICAgICAgICAgICAgICAgcENsYXdILT5vcGNvZGU9MHhmZjsKICAgICAgICAgICAgICAgICBwQ2xhd0gtPmZsYWc9Q0xBV19CVVNZOwogICAgICAgICB9Ci0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiAgRW5kIGluaXRpYWxpemUgIgotCSAJIkNsYXdTaWduYWxCbG9ja1xuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopcHJpdnB0ci0+cF9jbGF3X3NpZ25hbF9ibGssIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKLSNlbmRpZgogCiAgICAgICAgIC8qCiAgICAgICAgICogICAgICAgICAgICAgICBhbGxvY2F0ZSB3cml0ZV9wYWdlc19yZXF1aXJlZCBhbmQgYWRkIHRvIGZyZWUgY2hhaW4KQEAgLTIzNjAsMTcgKzE2NjUsNyBAQAogCQkJKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKF9fR0ZQX0RNQSwKIAkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKGNsYXdfd3JpdGVfcGFnZXMgKSk7CiAgICAgICAgICAgICAgICAgaWYgKHByaXZwdHItPnBfYnVmZl93cml0ZT09TlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgX19nZXRfZnJlZV9wYWdlcyBmb3Igd3JpdGUiCi0JCQkJIiBidWZzIGZhaWxlZCA6IGdldCBpcyBmb3IgJWQgcGFnZXNcbiIsCi0JCQkJZGV2LT5uYW1lLF9fZnVuY19fLGNsYXdfd3JpdGVfcGFnZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHJpdnB0ci0+cF9idWZmX2NjdywKLQkJCSAgIChpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKHByaXZwdHItPnBfYnVmZl9jY3dfbnVtKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX2J1ZmZfY2N3PU5VTEw7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+IGV4aXQgb24gbGluZSAlZCwiCi0JCQkgCSJyYyA9IEVOT01FTVxuIiwKLQkJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLyoKQEAgLTIzODAsMTAgKzE2NzUsNiBAQAogCiAgICAgICAgICAgICAgICAgbWVtc2V0KHByaXZwdHItPnBfYnVmZl93cml0ZSwgMHgwMCwKIAkJCWNjd19wYWdlc19yZXF1aXJlZCAqIFBBR0VfU0laRSk7Ci0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBCZWdpbiBidWlsZCBjbGF3IHdyaXRlIGZyZWUgIgotCQkJImNoYWluIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF93cml0ZV9mcmVlX2NoYWluPU5VTEw7CiAKICAgICAgICAgICAgICAgICBwX2J1ZmY9cHJpdnB0ci0+cF9idWZmX3dyaXRlOwpAQCAtMjQxOSwxOCArMTcxMCw3IEBACiAgICAgICAgICAgICAgICAgICAgcF9idWZmPSh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhfX0dGUF9ETUEsCiAJCSAgICAgICAgKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCiAJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGUpICk7Ci0jaWZkZWYgSU9UUkFDRQotICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIF9fZ2V0X2ZyZWVfcGFnZXMgIgotCQkgICAgImZvciB3cml0ZXMgYnVmOiBnZXQgZm9yICVkIHBhZ2VzXG4iLAotCQkgICAgZGV2LT5uYW1lLF9fZnVuY19fLAotCQkgICAgcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcndyaXRlKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgIGlmIChwX2J1ZmY9PU5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIF9fZ2V0X2ZyZWVfcGFnZXMgIgotCQkJIAkiZm9yIHdyaXRlcyBidWYgZmFpbGVkIDogZ2V0IGlzIGZvciAlZCBwYWdlc1xuIiwKLQkJCQlkZXYtPm5hbWUsCi0JCQkJX19mdW5jX18sCi0JCQkJcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcndyaXRlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXByaXZwdHItPnBfYnVmZl9jY3csCiAJCQkgICAgICAoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKIAkJCSAgICAgIAkJcHJpdnB0ci0+cF9idWZmX2Njd19udW0pKTsKQEAgLTI0NDMsMTIgKzE3MjMsNiBAQAogCQkJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9idWY9cF9idWYtPm5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMgZXhpdCBvbiBsaW5lICVkLCByYyA9IEVOT01FTVxuIiwKLQkJCWRldi0+bmFtZSwKLQkJCV9fZnVuY19fLAotCQkJX19MSU5FX18pOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKICAgICAgICAgICAgICAgICAgICB9ICAvKiBFcnJvciBvbiBnZXRfcGFnZXMgICAqLwogICAgICAgICAgICAgICAgICAgIG1lbXNldChwX2J1ZmYsIDB4MDAsIHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplICk7CkBAIC0yNDc3LDE1ICsxNzUxLDYgQEAKICAgICAgICAgcHJpdnB0ci0+d3JpdGVfZnJlZV9jb3VudD1wcml2cHRyLT5wX2Vudi0+d3JpdGVfYnVmZmVyczsKIAogCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgIEVuZCBidWlsZCBjbGF3IHdyaXRlIGZyZWUgY2hhaW4gXG4iLAotCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0gICAgICAgIHBfYnVmPXByaXZwdHItPnBfd3JpdGVfZnJlZV9jaGFpbjsKLSAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopcF9idWYsIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKLSAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIC8qCiAgICAgICAgICogICAgICAgICAgICAgICBhbGxvY2F0ZSByZWFkX3BhZ2VzX3JlcXVpcmVkIGFuZCBjaGFpbiB0byBmcmVlIGNoYWluCiAgICAgICAgICovCkBAIC0yNDk1LDEwICsxNzYwLDYgQEAKIAkJCSh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhfX0dGUF9ETUEsCiAJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhjbGF3X3JlYWRfcGFnZXMpICk7CiAgICAgICAgICAgICAgICAgaWYgKHByaXZwdHItPnBfYnVmZl9yZWFkPT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSAiCi0JCQkgCSJfX2dldF9mcmVlX3BhZ2VzIGZvciByZWFkIGJ1ZiBmYWlsZWQgOiAiCi0JCQkgCSJnZXQgaXMgZm9yICVkIHBhZ2VzXG4iLAotCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyxjbGF3X3JlYWRfcGFnZXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHJpdnB0ci0+cF9idWZmX2NjdywKIAkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKIAkJCQkJcHJpdnB0ci0+cF9idWZmX2Njd19udW0pKTsKQEAgLTI1MDgsMTAgKzE3NjksNiBAQAogCQkJCXByaXZwdHItPnBfYnVmZl93cml0ZV9udW0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnBfYnVmZl9jY3c9TlVMTDsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnBfYnVmZl93cml0ZT1OVUxMOwotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiBleGl0IG9uIGxpbmUgJWQsIHJjID0iCi0JCQkJIiBFTk9NRU1cbiIsZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1lbXNldChwcml2cHRyLT5wX2J1ZmZfcmVhZCwgMHgwMCwgY2xhd19yZWFkX3BhZ2VzICogUEFHRV9TSVpFKTsKQEAgLTI1MjAsMTAgKzE3NzcsNiBAQAogICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgQ0xBVyByZWFkIGZyZWUgY2hhaW4KICAgICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBERUJVR01TRwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIEJlZ2luIGJ1aWxkIGNsYXcgcmVhZCBmcmVlIGNoYWluIFxuIiwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBwX2J1ZmY9cHJpdnB0ci0+cF9idWZmX3JlYWQ7CiAgICAgICAgICAgICAgICAgZm9yIChpPTAgOyBpPCBwcml2cHRyLT5wX2Vudi0+cmVhZF9idWZmZXJzIDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZiAgICAgICAgPSBwX2ZyZWVfY2hhaW47CkBAIC0yNjAwLDE5ICsxODUzLDEwIEBACiAgICAgICAgICAgICAgICAgfSAgIC8qIGZvciByZWFkX2J1ZmZlcnMgICAqLwogICAgICAgICAgIH0gICAgICAgICAvKiByZWFkX3NpemUgPCBQQUdFX1NJWkUgICovCiAgICAgICAgICAgZWxzZSB7ICAvKiByZWFkIFNpemUgPj0gUEFHRV9TSVpFICAqLwotCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgQmVnaW4gYnVpbGQgY2xhdyByZWFkIGZyZWUgY2hhaW4gXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18pOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgZm9yIChpPTAgOyBpPCBwcml2cHRyLT5wX2Vudi0+cmVhZF9idWZmZXJzIDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZmYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoX19HRlBfRE1BLAogCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKHByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBfYnVmZj09TlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBfX2dldF9mcmVlX3BhZ2VzIGZvciByZWFkICIKLQkJCQkJImJ1ZiBmYWlsZWQgOiBnZXQgaXMgZm9yICVkIHBhZ2VzXG4iLAotCQkJCQlkZXYtPm5hbWUsX19mdW5jX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwcml2cHRyLT5wX2J1ZmZfY2N3LAogCQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhwcml2cHRyLT5wX2J1ZmZfY2N3X251bSkpOwogCQkJCS8qIGZyZWUgdGhlIHdyaXRlIHBhZ2VzICAqLwpAQCAtMjYzMywxMSArMTg3Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9idWZmX2Njdz1OVUxMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX2J1ZmZfd3JpdGU9TlVMTDsKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgZXhpdCBvbiBsaW5lICVkLCByYyA9IEVOT01FTVxuIiwKLQkJCQkJZGV2LT5uYW1lLF9fZnVuY19fLAotCQkJCQlfX0xJTkVfXyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQocF9idWZmLCAweDAwLCBwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKTsKQEAgLTI3MDYsMjIgKzE5NDUsOSBAQAogICAgICAgICAgICAgICAgIH0gICAgLyogRm9yIHJlYWRfYnVmZmVycyAgICovCiAgICAgICAgICAgfSAgICAgLyogIHJlYWRfc2l6ZSA+PSBQQUdFX1NJWkUgICAqLwogICAgICAgICB9ICAgICAgIC8qICBwQnVmZnJlYWQgPSBOVUxMICovCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiAgRW5kIGJ1aWxkIGNsYXcgcmVhZCBmcmVlIGNoYWluIFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLSAgICAgICAgcF9idWY9cF9maXJzdF9DQ1dCOwotICAgICAgICB3aGlsZSAocF9idWYhPU5VTEwpIHsKLSAgICAgICAgICAgICAgICBkdW1waXQoKGNoYXIgKilwX2J1Ziwgc2l6ZW9mKHN0cnVjdCBjY3diaykpOwotICAgICAgICAgICAgICAgIHBfYnVmPXBfYnVmLT5uZXh0OwotICAgICAgICB9Ci0KLSNlbmRpZgogICAgICAgICBhZGRfY2xhd19yZWFkcyggZGV2ICAscF9maXJzdF9DQ1dCICwgcF9sYXN0X0NDV0IpOwogCXByaXZwdHItPmJ1ZmZzX2FsbG9jID0gMTsKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgZXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCisKICAgICAgICAgcmV0dXJuIDA7CiB9ICAgIC8qICAgIGVuZCBvZiBpbml0X2Njd19iayAqLwogCkBAIC0yNzM1LDE0ICsxOTYxLDggQEAKIHByb2JlX2Vycm9yKCBzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjZ2RldikKIHsKICAgc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyOwotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzIGVudGVyICBcbiIsX19mdW5jX18pOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJwcm9iZXJyIik7Ci0jaWZkZWYgREVCVUdNU0cKLQlwcmludGsoS0VSTl9JTkZPICIlcyB2YXJpYWJsZSBjZ2RldiA9XG4iLF9fZnVuY19fKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIGNnZGV2LCBzaXplb2Yoc3RydWN0IGNjd2dyb3VwX2RldmljZSkpOwotI2VuZGlmCisKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAicHJvYmVyciIpOwogICAgICAgICBwcml2cHRyPShzdHJ1Y3QgY2xhd19wcml2YmsgKiljZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCWlmIChwcml2cHRyIT1OVUxMKSB7CiAJCWtmcmVlKHByaXZwdHItPnBfZW52KTsKQEAgLTI3NTIsMTYgKzE5NzIsOSBAQAogICAgICAgICAgICAgICAgIGtmcmVlKHByaXZwdHIpOwogICAgICAgICAgICAgICAgIHByaXZwdHI9TlVMTDsKICAgICAgICAgfQotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlcyA+IGV4aXQgb24gbGluZSAlZFxuIiwKLQkJIF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCiAgICAgICAgIHJldHVybjsKIH0gICAgLyogICAgcHJvYmVfZXJyb3IgICAgKi8KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICogICAgY2xhd19wcm9jZXNzX2NvbnRyb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTI3ODMsMzIgKzE5OTYsMTkgQEAKICAgICAgICAgc3RydWN0IGNvbm5jbWQgKnBfY29ubmVjdD1OVUxMOwogICAgICAgICBpbnQgcmM7CiAgICAgICAgIHN0cnVjdCBjaGJrICpwX2NoID0gTlVMTDsKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiBlbnRlciAgXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18pOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJjbHdfY250bCIpOwotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBkZXYgPVxuIixkZXYtPm5hbWUpOwotICAgICAgICBkdW1waXQoKGNoYXIgKikgZGV2LCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZhcmlhYmxlIHBfY2N3ID1cbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIHBfY2N3LCBzaXplb2Yoc3RydWN0IGNjd2JrICopKTsKLSNlbmRpZgorCXN0cnVjdCBkZXZpY2UgKnRkZXY7CisJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImNsd19jbnRsIik7CiAgICAgICAgIHVkZWxheSgxMDAwKTsgIC8qIFdhaXQgYSBtcyBmb3IgdGhlIGNvbnRyb2wgcGFja2V0cyB0bwogCQkJKmNhdGNoIHVwIHRvIGVhY2ggb3RoZXIgKi8KICAgICAgICAgcHJpdnB0cj1kZXYtPnByaXY7CiAgICAgICAgIHBfZW52PXByaXZwdHItPnBfZW52OworCXRkZXYgPSAmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXY7CiAJbWVtY3B5KCAmdGVtcF9ob3N0X25hbWUsIHBfZW52LT5ob3N0X25hbWUsIDgpOwogICAgICAgICBtZW1jcHkoICZ0ZW1wX3dzX25hbWUsIHBfZW52LT5hZGFwdGVyX25hbWUgLCA4KTsKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICUuOHM6ICIKIAkJIlJlY2VpdmVkIENvbnRyb2wgUGFja2V0XG4iLAogCQlkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7CiAgICAgICAgIGlmIChwcml2cHRyLT5yZWxlYXNlX3BlbmQ9PTEpIHsKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+ICIKLQkJCSJleGl0IG9uIGxpbmUgJWQsIHJjPTBcbiIsCi0JCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgcF9idWY9cF9jY3ctPnBfYnVmZmVyOwpAQCAtMjgxOCwyNjEgKzIwMTgsMjQ2IEBACiAJfSBlbHNlIHsKIAkJbWVtY3B5KHBfY3RsYmssIHBfYnVmLCBzaXplb2Yoc3RydWN0IGNsYXdjdGwpKTsKIAl9Ci0jaWZkZWYgSU9UUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogZHVtcCBjbGF3IGNvbnRyb2wgZGF0YSBpbmJvdW5kXG4iLGRldi0+bmFtZSk7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKXBfY3RsYmssIHNpemVvZihzdHJ1Y3QgY2xhd2N0bCkpOwotI2VuZGlmCiAgICAgICAgIHN3aXRjaCAocF9jdGxiay0+Y29tbWFuZCkKICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgU1lTVEVNX1ZBTElEQVRFX1JFUVVFU1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocF9jdGxiay0+dmVyc2lvbiE9Q0xBV19WRVJTSU9OX0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAotCQkJCQlDTEFXX1JDX1dST05HX1ZFUlNJT04gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIlczogJWQgaXMgd3JvbmcgdmVyc2lvbiBpZC4gIgotCQkJCQkiRXhwZWN0ZWQgJWRcbiIsCi0JCQkJCWRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEFXX1ZFUlNJT05fSUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcF9zeXN2YWw9KHN0cnVjdCBzeXN2YWwgKikmKHBfY3RsYmstPmRhdGEpOwotCQkJcHJpbnRrKCAiJXM6IFJlY3YgU3lzIFZhbGlkYXRlIFJlcXVlc3Q6ICIKLQkJCQkiVmVycz0lZCxsaW5rX2lkPSVkLENvcnI9JWQsV1MgbmFtZT0lLiIKLQkJCQkiOHMsSG9zdCBuYW1lPSUuOHNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKLQkJCQlwX2N0bGJrLT5saW5raWQsCi0JCQkJcF9jdGxiay0+Y29ycmVsYXRvciwKLQkJCQlwX3N5c3ZhbC0+V1NfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9zeXN2YWwtPmhvc3RfbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCE9bWVtY21wKHRlbXBfaG9zdF9uYW1lLHBfc3lzdmFsLT5ob3N0X25hbWUsOCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCi0JCQkJCUNMQVdfUkNfTkFNRV9NSVNNQVRDSCApOwotCQkJCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiSFNUQkFEIik7Ci0JCQkJQ0xBV19EQkZfVEVYVF8oMixzZXR1cCwiJXMiLHBfc3lzdmFsLT5ob3N0X25hbWUpOwotCQkJCUNMQVdfREJGX1RFWFRfKDIsc2V0dXAsIiVzIix0ZW1wX2hvc3RfbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAgSG9zdCBuYW1lIG1pc21hdGNoXG4iLAotCQkJCQlkZXYtPm5hbWUpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCA6JXM6ICIKLQkJCQkJImV4cGVjdGVkIDolczogXG4iLAotCQkJCQlkZXYtPm5hbWUsCi0JCQkJCXBfc3lzdmFsLT5ob3N0X25hbWUsCi0JCQkJCXRlbXBfaG9zdF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwIT1tZW1jbXAodGVtcF93c19uYW1lLHBfc3lzdmFsLT5XU19uYW1lLDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAotCQkJCQlDTEFXX1JDX05BTUVfTUlTTUFUQ0ggKTsKLQkJCQlDTEFXX0RCRl9URVhUKDIsc2V0dXAsIldTTkJBRCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEFXX0RCRl9URVhUXygyLHNldHVwLCIlcyIscF9zeXN2YWwtPldTX25hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEFXX0RCRl9URVhUXygyLHNldHVwLCIlcyIsdGVtcF93c19uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdTIG5hbWUgbWlzbWF0Y2hcbiIsCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQkJIHByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCA6JXM6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgOiVzOiBcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc3lzdmFsLT5XU19uYW1lLAotCQkJCQl0ZW1wX3dzX25hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCggcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUgPCBwX2Vudi0+d3JpdGVfc2l6ZSkgJiYKLQkJCSAgICggcF9lbnYtPnBhY2tpbmcgPT0gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCi0JCQkJCUNMQVdfUkNfSE9TVF9SQ1ZfVE9PX1NNQUxMICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBob3N0IHdyaXRlIHNpemUgaXMgdG9vICIKLQkJCQkJInNtYWxsXG4iLCBkZXYtPm5hbWUpOwotCQkJCUNMQVdfREJGX1RFWFQoMixzZXR1cCwid3J0c3piYWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIHBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUgPCBwX2Vudi0+cmVhZF9zaXplKSAmJgotCQkJICAgKCBwX2Vudi0+cGFja2luZyA9PSAwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKLQkJCQkJQ0xBV19SQ19IT1NUX1JDVl9UT09fU01BTEwgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhvc3QgcmVhZCBzaXplIGlzIHRvbyAiCi0JCQkJCSJzbWFsbFxuIiwgZGV2LT5uYW1lKTsKLQkJCQlDTEFXX0RCRl9URVhUKDIsc2V0dXAsInJkc2l6YmFkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywgMCApOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIlczogQ0xBVyBkZXZpY2UgJS44czogU3lzdGVtIHZhbGlkYXRlIgotCQkJCSIgY29tcGxldGVkLlxuIixkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7Ci0JCQlwcmludGsoIiVzOiBzeXMgVmFsaWRhdGUgUnNpemU6JWQgV3NpemU6JWRcbiIsZGV2LT5uYW1lLAotCQkJCXBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUscF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXA9MTsKLSAgICAgICAgICAgICAgICAJaWYoc3RybmNtcChwX2Vudi0+YXBpX3R5cGUsV1NfQVBQTF9OQU1FX1BBQ0tFRCw2KSA9PSAwKSB7Ci0JCQkJcF9lbnYtPnBhY2tpbmcgPSBQQUNLSU5HX0FTSzsKLQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXdfc3RydF9jb25uX3JlcShkZXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBTWVNURU1fVkFMSURBVEVfUkVRVUVTVDoKKwkJaWYgKHBfY3RsYmstPnZlcnNpb24gIT0gQ0xBV19WRVJTSU9OX0lEKSB7CisJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKKwkJCQlDTEFXX1JDX1dST05HX1ZFUlNJT04pOworCQkJcHJpbnRrKCIlczogJWQgaXMgd3JvbmcgdmVyc2lvbiBpZC4gIgorCQkJICAgICAgICJFeHBlY3RlZCAlZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCisJCQkgICAgICAgQ0xBV19WRVJTSU9OX0lEKTsKKwkJfQorCQlwX3N5c3ZhbCA9IChzdHJ1Y3Qgc3lzdmFsICopJihwX2N0bGJrLT5kYXRhKTsKKwkJcHJpbnRrKCIlczogUmVjdiBTeXMgVmFsaWRhdGUgUmVxdWVzdDogIgorCQkgICAgICAgIlZlcnM9JWQsbGlua19pZD0lZCxDb3JyPSVkLFdTIG5hbWU9JS4iCisJCSAgICAgICAiOHMsSG9zdCBuYW1lPSUuOHNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCisJCSAgICAgICBwX2N0bGJrLT5saW5raWQsCisJCSAgICAgICBwX2N0bGJrLT5jb3JyZWxhdG9yLAorCQkgICAgICAgcF9zeXN2YWwtPldTX25hbWUsCisJCSAgICAgICBwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKKwkJaWYgKG1lbWNtcCh0ZW1wX2hvc3RfbmFtZSwgcF9zeXN2YWwtPmhvc3RfbmFtZSwgOCkpIHsKKwkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAorCQkJCUNMQVdfUkNfTkFNRV9NSVNNQVRDSCk7CisJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiSFNUQkFEIik7CisJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgcF9zeXN2YWwtPmhvc3RfbmFtZSk7CisJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgdGVtcF9ob3N0X25hbWUpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICBIb3N0IG5hbWUgbWlzbWF0Y2hcbiIsCisJCQkJZGV2LT5uYW1lKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCA6JXM6ICIKKwkJCQkiZXhwZWN0ZWQgOiVzOiBcbiIsCisJCQkJZGV2LT5uYW1lLAorCQkJCXBfc3lzdmFsLT5ob3N0X25hbWUsCisJCQkJdGVtcF9ob3N0X25hbWUpOworCQl9CisJCWlmIChtZW1jbXAodGVtcF93c19uYW1lLCBwX3N5c3ZhbC0+V1NfbmFtZSwgOCkpIHsKKwkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAorCQkJCUNMQVdfUkNfTkFNRV9NSVNNQVRDSCk7CisJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiV1NOQkFEIik7CisJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgcF9zeXN2YWwtPldTX25hbWUpOworCQkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIHRlbXBfd3NfbmFtZSk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogV1MgbmFtZSBtaXNtYXRjaFxuIiwKKwkJCQlkZXYtPm5hbWUpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIDolczogIgorCQkJICAgICAgICJleHBlY3RlZCA6JXM6IFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsCisJCQkgICAgICAgcF9zeXN2YWwtPldTX25hbWUsCisJCQkgICAgICAgdGVtcF93c19uYW1lKTsKKwkJfQorCQlpZiAoKHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplIDwgcF9lbnYtPndyaXRlX3NpemUpICYmCisJCSAgICAocF9lbnYtPnBhY2tpbmcgPT0gMCkpIHsKKwkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAorCQkJCUNMQVdfUkNfSE9TVF9SQ1ZfVE9PX1NNQUxMKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBob3N0IHdyaXRlIHNpemUgaXMgdG9vICIKKwkJCQkic21hbGxcbiIsIGRldi0+bmFtZSk7CisJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAid3J0c3piYWQiKTsKKwkJfQorCQlpZiAoKHBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUgPCBwX2Vudi0+cmVhZF9zaXplKSAmJgorCQkgICAgKHBfZW52LT5wYWNraW5nID09IDApKSB7CisJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKKwkJCQlDTEFXX1JDX0hPU1RfUkNWX1RPT19TTUFMTCk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogaG9zdCByZWFkIHNpemUgaXMgdG9vICIKKwkJCQkic21hbGxcbiIsIGRldi0+bmFtZSk7CisJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAicmRzaXpiYWQiKTsKKwkJfQorCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywgMCk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAlLjhzOiBTeXN0ZW0gdmFsaWRhdGUgIgorCQkJImNvbXBsZXRlZC5cbiIsIGRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKKwkJcHJpbnRrKCIlczogc3lzIFZhbGlkYXRlIFJzaXplOiVkIFdzaXplOiVkXG4iLCBkZXYtPm5hbWUsCisJCQlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplLCBwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSk7CisJCXByaXZwdHItPnN5c3RlbV92YWxpZGF0ZV9jb21wID0gMTsKKwkJaWYgKHN0cm5jbXAocF9lbnYtPmFwaV90eXBlLCBXU19BUFBMX05BTUVfUEFDS0VELCA2KSA9PSAwKQorCQkJcF9lbnYtPnBhY2tpbmcgPSBQQUNLSU5HX0FTSzsKKwkJY2xhd19zdHJ0X2Nvbm5fcmVxKGRldik7CisJCWJyZWFrOworCWNhc2UgU1lTVEVNX1ZBTElEQVRFX1JFU1BPTlNFOgorCQlwX3N5c3ZhbCA9IChzdHJ1Y3Qgc3lzdmFsICopJihwX2N0bGJrLT5kYXRhKTsKKwkJcHJpbnRrKCIlczogUmVjdiBTeXMgVmFsaWRhdGUgUmVzcDogVmVycz0lZCxDb3JyPSVkLFJDPSVkLCIKKwkJCSJXUyBuYW1lPSUuOHMsSG9zdCBuYW1lPSUuOHNcbiIsCisJCQlkZXYtPm5hbWUsCisJCQlwX2N0bGJrLT52ZXJzaW9uLAorCQkJcF9jdGxiay0+Y29ycmVsYXRvciwKKwkJCXBfY3RsYmstPnJjLAorCQkJcF9zeXN2YWwtPldTX25hbWUsCisJCQlwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKKwkJc3dpdGNoIChwX2N0bGJrLT5yYykgeworCQljYXNlIDA6CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgIgorCQkJCSIlLjhzOiBTeXN0ZW0gdmFsaWRhdGUgIgorCQkJCSJjb21wbGV0ZWQuXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKKwkJCWlmIChwcml2cHRyLT5zeXN0ZW1fdmFsaWRhdGVfY29tcCA9PSAwKQorCQkJCWNsYXdfc3RydF9jb25uX3JlcShkZXYpOworCQkJcHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXAgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgQ0xBV19SQ19OQU1FX01JU01BVENIOgorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCisJCQkJIlJlc3AgOiBIb3N0LCBXUyBuYW1lIGlzICIKKwkJCQkibWlzbWF0Y2hcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIENMQVdfUkNfV1JPTkdfVkVSU0lPTjoKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgorCQkJCSJSZXNwIDogV3JvbmcgdmVyc2lvblxuIiwKKwkJCQlkZXYtPm5hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgQ0xBV19SQ19IT1NUX1JDVl9UT09fU01BTEw6CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogU3lzIFZhbGlkYXRlICIKKwkJCQkiUmVzcCA6IGJhZCBmcmFtZSBzaXplXG4iLAorCQkJCWRldi0+bmFtZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgorCQkJCSJlcnJvciBjb2RlPSVkIFxuIiwKKwkJCQkgZGV2LT5uYW1lLCBwX2N0bGJrLT5yYyk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAotICAgICAgICAgICAgICAgIGNhc2UgU1lTVEVNX1ZBTElEQVRFX1JFU1BPTlNFOgotCQkJcF9zeXN2YWw9KHN0cnVjdCBzeXN2YWwgKikmKHBfY3RsYmstPmRhdGEpOwotCQkJcHJpbnRrKCIlczogUmVjdiBTeXMgVmFsaWRhdGUgUmVzcDogVmVycz0lZCxDb3JyPSVkLFJDPSVkLCIKLQkJCQkiV1MgbmFtZT0lLjhzLEhvc3QgbmFtZT0lLjhzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgCWRldi0+bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIAlwX2N0bGJrLT52ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgCXBfY3RsYmstPmNvcnJlbGF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAJcF9jdGxiay0+cmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAJcF9zeXN2YWwtPldTX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAJcF9zeXN2YWwtPmhvc3RfbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBfY3RsYmstPnJjKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICIKLQkJCQkJCSIlLjhzOiBTeXN0ZW0gdmFsaWRhdGUgIgotCQkJCQkJImNvbXBsZXRlZC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7Ci0JCQkJCWlmIChwcml2cHRyLT5zeXN0ZW1fdmFsaWRhdGVfY29tcCA9PSAwKQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGF3X3N0cnRfY29ubl9yZXEoZGV2KTsKLQkJCQkJcHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXA9MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDTEFXX1JDX05BTUVfTUlTTUFUQ0g6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJCQkiUmVzcCA6IEhvc3QsIFdTIG5hbWUgaXMgIgotCQkJCQkJIm1pc21hdGNoXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDTEFXX1JDX1dST05HX1ZFUlNJT046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJCQkiUmVzcCA6IFdyb25nIHZlcnNpb25cbiIsCi0JCQkJCQlkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENMQVdfUkNfSE9TVF9SQ1ZfVE9PX1NNQUxMOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgotCQkJCQkJIlJlc3AgOiBiYWQgZnJhbWUgc2l6ZVxuIiwKLQkJCQkJCWRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJCQkiZXJyb3IgY29kZT0lZCBcbiIsCi0JCQkJCQkgZGV2LT5uYW1lLCBwX2N0bGJrLT5yYyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBDT05ORUNUSU9OX1JFUVVFU1Q6CisJCXBfY29ubmVjdCA9IChzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWN2IENvbm4gUmVxOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgorCQkJIkNvcnI9JWQsSE9TVCBhcHBsPSUuOHMsV1MgYXBwbD0lLjhzXG4iLAorCQkJZGV2LT5uYW1lLAorCQkJcF9jdGxiay0+dmVyc2lvbiwKKwkJCXBfY3RsYmstPmxpbmtpZCwKKwkJCXBfY3RsYmstPmNvcnJlbGF0b3IsCisJCQlwX2Nvbm5lY3QtPmhvc3RfbmFtZSwKKwkJCXBfY29ubmVjdC0+V1NfbmFtZSk7CisJCWlmIChwcml2cHRyLT5hY3RpdmVfbGlua19JRCAhPSAwKSB7CisJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXEgZXJyb3IgOiAiCisJCQkJImFscmVhZHkgbG9naWNhbCBsaW5rIGlzIGFjdGl2ZSBcbiIsCisJCQkJZGV2LT5uYW1lKTsKKwkJfQorCQlpZiAocF9jdGxiay0+bGlua2lkICE9IDEpIHsKKwkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlcSBlcnJvciA6ICIKKwkJCQkicmVxIGxvZ2ljYWwgbGluayBpZCBpcyBub3QgMVxuIiwKKwkJCQlkZXYtPm5hbWUpOworCQl9CisJCXJjID0gZmluZF9saW5rKGRldiwgcF9jb25uZWN0LT5ob3N0X25hbWUsIHBfY29ubmVjdC0+V1NfbmFtZSk7CisJCWlmIChyYyAhPSAwKSB7CisJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXNwIGVycm9yOiAiCisJCQkJInJlcSBhcHBsIG5hbWUgZG9lcyBub3QgbWF0Y2hcbiIsCisJCQkJZGV2LT5uYW1lKTsKKwkJfQorCQljbGF3X3NlbmRfY29udHJvbChkZXYsCisJCQlDT05ORUNUSU9OX0NPTkZJUk0sIHBfY3RsYmstPmxpbmtpZCwKKwkJCXBfY3RsYmstPmNvcnJlbGF0b3IsCisJCQkwLCBwX2Nvbm5lY3QtPmhvc3RfbmFtZSwKKwkJCXBfY29ubmVjdC0+V1NfbmFtZSk7CisJCWlmIChwX2Vudi0+cGFja2luZyA9PSBQQUNLSU5HX0FTSykgeworCQkJcF9lbnYtPnBhY2tpbmcgPSBQQUNLX1NFTkQ7CisJCQljbGF3X3NuZF9jb25uX3JlcShkZXYsIDApOworCQl9CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAlLjhzOiBDb25uZWN0aW9uICIKKwkJCSJjb21wbGV0ZWQgbGlua19pZD0lZC5cbiIsCisJCQlkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSwKKwkJCXBfY3RsYmstPmxpbmtpZCk7CisJCQlwcml2cHRyLT5hY3RpdmVfbGlua19JRCA9IHBfY3RsYmstPmxpbmtpZDsKKwkJCXBfY2ggPSAmcHJpdnB0ci0+Y2hhbm5lbFtXUklURV07CisJCQl3YWtlX3VwKCZwX2NoLT53YWl0KTsgIC8qIHdha2UgdXAgY2xhd19vcGVuICggV1JJVEUpICovCisJCWJyZWFrOworCWNhc2UgQ09OTkVDVElPTl9SRVNQT05TRToKKwkJcF9jb25uZWN0ID0gKHN0cnVjdCBjb25uY21kICopJihwX2N0bGJrLT5kYXRhKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJldmMgQ29ubiBSZXNwOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgorCQkJIkNvcnI9JWQsUkM9JWQsSG9zdCBhcHBsPSUuOHMsIFdTIGFwcGw9JS44c1xuIiwKKwkJCWRldi0+bmFtZSwKKwkJCXBfY3RsYmstPnZlcnNpb24sCisJCQlwX2N0bGJrLT5saW5raWQsCisJCQlwX2N0bGJrLT5jb3JyZWxhdG9yLAorCQkJcF9jdGxiay0+cmMsCisJCQlwX2Nvbm5lY3QtPmhvc3RfbmFtZSwKKwkJCXBfY29ubmVjdC0+V1NfbmFtZSk7CiAKLSAgICAgICAgICAgICAgICBjYXNlIENPTk5FQ1RJT05fUkVRVUVTVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHBfY29ubmVjdD0oc3RydWN0IGNvbm5jbWQgKikmKHBfY3RsYmstPmRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY3YgQ29ubiBSZXE6IFZlcnM9JWQsbGlua19pZD0lZCwiCi0JCQkJIkNvcnI9JWQsSE9TVCBhcHBsPSUuOHMsV1MgYXBwbD0lLjhzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgCWRldi0+bmFtZSwKLQkgICAgICAgICAgICAgICAgICAgICAgICBwX2N0bGJrLT52ZXJzaW9uLAotICAgICAgICAJICAgICAgICAgICAgICAgIHBfY3RsYmstPmxpbmtpZCwKLSAgICAgICAgICAgICAgICAJICAgICAgICBwX2N0bGJrLT5jb3JyZWxhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgCXBfY29ubmVjdC0+aG9zdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIAkJcF9jb25uZWN0LT5XU19uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcml2cHRyLT5hY3RpdmVfbGlua19JRCE9MCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXEgZXJyb3IgOiAiCi0JCQkJCSJhbHJlYWR5IGxvZ2ljYWwgbGluayBpcyBhY3RpdmUgXG4iLAorCQlpZiAocF9jdGxiay0+cmMgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVzcCBlcnJvcjogcmM9JWQgXG4iLAorCQkJCWRldi0+bmFtZSwgcF9jdGxiay0+cmMpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmMgPSBmaW5kX2xpbmsoZGV2LAorCQkJcF9jb25uZWN0LT5ob3N0X25hbWUsIHBfY29ubmVjdC0+V1NfbmFtZSk7CisJCWlmIChyYyAhPSAwKSB7CisJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXNwIGVycm9yOiAiCisJCQkJInJlcSBhcHBsIG5hbWUgZG9lcyBub3QgbWF0Y2hcbiIsCisJCQkJIGRldi0+bmFtZSk7CisJCX0KKwkJLyogc2hvdWxkIGJlIHVudGlsIENPTk5FQ1RJT05fQ09ORklSTSAqLworCQlwcml2cHRyLT5hY3RpdmVfbGlua19JRCA9IC0ocF9jdGxiay0+bGlua2lkKTsKKwkJYnJlYWs7CisJY2FzZSBDT05ORUNUSU9OX0NPTkZJUk06CisJCXBfY29ubmVjdCA9IChzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWN2IENvbm4gQ29uZmlybTpWZXJzPSVkLGxpbmtfaWQ9JWQsIgorCQkJIkNvcnI9JWQsSG9zdCBhcHBsPSUuOHMsV1MgYXBwbD0lLjhzXG4iLAorCQkJZGV2LT5uYW1lLAorCQkJcF9jdGxiay0+dmVyc2lvbiwKKwkJCXBfY3RsYmstPmxpbmtpZCwKKwkJCXBfY3RsYmstPmNvcnJlbGF0b3IsCisJCQlwX2Nvbm5lY3QtPmhvc3RfbmFtZSwKKwkJCXBfY29ubmVjdC0+V1NfbmFtZSk7CisJCWlmIChwX2N0bGJrLT5saW5raWQgPT0gLShwcml2cHRyLT5hY3RpdmVfbGlua19JRCkpIHsKKwkJCXByaXZwdHItPmFjdGl2ZV9saW5rX0lEID0gcF9jdGxiay0+bGlua2lkOworCQkJaWYgKHBfZW52LT5wYWNraW5nID4gUEFDS0lOR19BU0spIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29uZmlybWVkIE5vdyBwYWNraW5nXG4iLAogCQkJCQlkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBfY3RsYmstPmxpbmtpZCE9MSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXEgZXJyb3IgOiAiCi0JCQkJCSJyZXEgbG9naWNhbCBsaW5rIGlkIGlzIG5vdCAxXG4iLAotCQkJCQlkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmM9ZmluZF9saW5rKGRldiwKLQkJCQlwX2Nvbm5lY3QtPmhvc3RfbmFtZSwgcF9jb25uZWN0LT5XU19uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYyE9MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlcSBlcnJvciA6ICIKLQkJCQkJInJlcSBhcHBsIG5hbWUgZG9lcyBub3QgbWF0Y2hcbiIsCi0JCQkJCSBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19zZW5kX2NvbnRyb2woZGV2LAotCQkJCUNPTk5FQ1RJT05fQ09ORklSTSwgcF9jdGxiay0+bGlua2lkLAotCQkJCXBfY3RsYmstPmNvcnJlbGF0b3IsCi0JCQkJMCwgcF9jb25uZWN0LT5ob3N0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfY29ubmVjdC0+V1NfbmFtZSk7Ci0JCQlpZiAocF9lbnYtPnBhY2tpbmcgPT0gUEFDS0lOR19BU0spIHsKLQkJCQlwcmludGsoIiVzOiBOb3cgUGFjayBhc2tcbiIsZGV2LT5uYW1lKTsKLQkJCQlwX2Vudi0+cGFja2luZyA9IFBBQ0tfU0VORDsKLQkJCQljbGF3X3NuZF9jb25uX3JlcShkZXYsMCk7Ci0JCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgJS44czogQ29ubmVjdGlvbiAiCi0JCQkJImNvbXBsZXRlZCBsaW5rX2lkPSVkLlxuIiwKLQkJCQlkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9jdGxiay0+bGlua2lkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPmFjdGl2ZV9saW5rX0lEPXBfY3RsYmstPmxpbmtpZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBfY2g9JnByaXZwdHItPmNoYW5uZWxbV1JJVEVdOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FrZV91cCgmcF9jaC0+d2FpdCk7ICAvKiB3YWtlIHVwIGNsYXdfb3BlbiAoIFdSSVRFKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDT05ORUNUSU9OX1JFU1BPTlNFOgotICAgICAgICAgICAgICAgICAgICAgICAgcF9jb25uZWN0PShzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmV2YyBDb25uIFJlc3A6IFZlcnM9JWQsbGlua19pZD0lZCwiCi0JCQkJIkNvcnI9JWQsUkM9JWQsSG9zdCBhcHBsPSUuOHMsIFdTIGFwcGw9JS44c1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLAotCQkJCXBfY3RsYmstPnZlcnNpb24sCi0JCQkJcF9jdGxiay0+bGlua2lkLAotCQkJCXBfY3RsYmstPmNvcnJlbGF0b3IsCi0JCQkJcF9jdGxiay0+cmMsCi0JCQkJcF9jb25uZWN0LT5ob3N0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfY29ubmVjdC0+V1NfbmFtZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwX2N0bGJrLT5yYyAhPTAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlc3AgZXJyb3I6IHJjPSVkIFxuIiwKLQkJCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT5yYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmM9ZmluZF9saW5rKGRldiwKLQkJCQlwX2Nvbm5lY3QtPmhvc3RfbmFtZSwgcF9jb25uZWN0LT5XU19uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYyE9MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlc3AgZXJyb3I6ICIKLQkJCQkJInJlcSBhcHBsIG5hbWUgZG9lcyBub3QgbWF0Y2hcbiIsCi0JCQkJCSBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCQkJLyogc2hvdWxkIGJlIHVudGlsIENPTk5FQ1RJT05fQ09ORklSTSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQgPSAgLSAocF9jdGxiay0+bGlua2lkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ09OTkVDVElPTl9DT05GSVJNOgotICAgICAgICAgICAgICAgICAgICAgICAgcF9jb25uZWN0PShzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmVjdiBDb25uIENvbmZpcm06VmVycz0lZCxsaW5rX2lkPSVkLCIKLQkJCQkiQ29ycj0lZCxIb3N0IGFwcGw9JS44cyxXUyBhcHBsPSUuOHNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBwX2N0bGJrLT52ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgcF9jdGxiay0+bGlua2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgcF9jdGxiay0+Y29ycmVsYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBfY29ubmVjdC0+aG9zdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgcF9jb25uZWN0LT5XU19uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwX2N0bGJrLT5saW5raWQ9PSAtKHByaXZwdHItPmFjdGl2ZV9saW5rX0lEKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5hY3RpdmVfbGlua19JRD1wX2N0bGJrLT5saW5raWQ7Ci0JCQkJaWYgKHBfZW52LT5wYWNraW5nID4gUEFDS0lOR19BU0spIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbmZpcm1lZCBOb3cgcGFja2luZ1xuIixkZXYtPm5hbWUpOwotCQkJCQlwX2Vudi0+cGFja2luZyA9IERPX1BBQ0tFRDsKLQkJCQkJfQotCQkJCXBfY2g9JnByaXZwdHItPmNoYW5uZWxbV1JJVEVdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWtlX3VwKCZwX2NoLT53YWl0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBjb25maXJtOiAiCi0JCQkJCSJ1bmV4cGVjdGVkIGxpbmtpZD0lZCBcbiIsCi0JCQkJCWRldi0+bmFtZSwgcF9jdGxiay0+bGlua2lkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBESVNDT05ORUNUOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERpc2Nvbm5lY3Q6ICIKLQkJCQkiVmVycz0lZCxsaW5rX2lkPSVkLENvcnI9JWRcbiIsCi0JCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2N0bGJrLT5saW5raWQsIHBfY3RsYmstPmNvcnJlbGF0b3IpOwotCQkJaWYgKChwX2N0bGJrLT5saW5raWQgPT0gMikgJiYKLQkJCSAgICAocF9lbnYtPnBhY2tpbmcgPT0gUEFDS19TRU5EKSkgewotCQkJCXByaXZwdHItPmFjdGl2ZV9saW5rX0lEID0gMTsKIAkJCQlwX2Vudi0+cGFja2luZyA9IERPX1BBQ0tFRDsKIAkJCX0KLQkJCWVsc2UKLQkgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5hY3RpdmVfbGlua19JRD0wOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTEFXX0VSUk9SOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgRVJST1IgZGV0ZWN0ZWRcbiIsCi0JCQkJZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogIFVuZXhwZWN0ZWQgY29tbWFuZCBjb2RlPSVkIFxuIiwKLQkJCQlkZXYtPm5hbWUsICBwX2N0bGJrLT5jb21tYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkJcF9jaCA9ICZwcml2cHRyLT5jaGFubmVsW1dSSVRFXTsKKwkJCXdha2VfdXAoJnBfY2gtPndhaXQpOworCQl9IGVsc2UgeworCQkgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gY29uZmlybTogIgorCQkJCSJ1bmV4cGVjdGVkIGxpbmtpZD0lZCBcbiIsCisJCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT5saW5raWQpOworCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOworCQl9CisJCWJyZWFrOworCWNhc2UgRElTQ09OTkVDVDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERpc2Nvbm5lY3Q6ICIKKwkJCSJWZXJzPSVkLGxpbmtfaWQ9JWQsQ29ycj0lZFxuIiwKKwkJCWRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKKwkJCXBfY3RsYmstPmxpbmtpZCwgcF9jdGxiay0+Y29ycmVsYXRvcik7CisJCWlmICgocF9jdGxiay0+bGlua2lkID09IDIpICYmCisJCSAgICAocF9lbnYtPnBhY2tpbmcgPT0gUEFDS19TRU5EKSkgeworCQkJcHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQgPSAxOworCQkJcF9lbnYtPnBhY2tpbmcgPSBET19QQUNLRUQ7CisJCX0gZWxzZQorCQkJcHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQgPSAwOworCQlicmVhazsKKwljYXNlIENMQVdfRVJST1I6CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIEVSUk9SIGRldGVjdGVkXG4iLAorCQkJZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICBVbmV4cGVjdGVkIGNvbW1hbmQgY29kZT0lZCBcbiIsCisJCQlkZXYtPm5hbWUsICBwX2N0bGJrLT5jb21tYW5kKTsKKwkJYnJlYWs7CiAgICAgICAgIH0KIAotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBleGl0IG9uIGxpbmUgJWQsIHJjID0gMFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCiAgICAgICAgIHJldHVybiAwOwogfSAgIC8qICAgIGVuZCBvZiBjbGF3X3Byb2Nlc3NfY29udHJvbCAgICAqLwogCkBAIC0zMDkyLDE4ICsyMjc3LDcgQEAKICAgICAgICAgc3RydWN0IGNvbm5jbWQgICAgICAgICAgICAgICAgICAqcF9jb25uZWN0OwogICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAJCQkqc2tiOwogCi0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgPiBlbnRlciAgXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDIsc2V0dXAsInNuZGNudGwiKTsKLSNpZmRlZiBERUJVR01TRwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZW5kaW5nIENvbnRyb2wgUGFja2V0IFxuIixkZXYtPm5hbWUpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgdHlwZSA9IDB4JVgsIGxpbmsgPSAiCi0JCSIlZCwgY29ycmVsYXRvciA9ICVkLCByYyA9ICVkXG4iLAotICAgICAgICAgICAgICAgIGRldi0+bmFtZSx0eXBlLCBsaW5rLCBjb3JyZWxhdG9yLCByYyk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBsb2NhbF9uYW1lID0gJXMsICIKLQkJInJlbW90ZV9uYW1lID0gJXNcbiIsZGV2LT5uYW1lLCBsb2NhbF9uYW1lLCByZW1vdGVfbmFtZSk7Ci0jZW5kaWYKKwlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAic25kY250bCIpOwogICAgICAgICBwcml2cHRyPWRldi0+cHJpdjsKICAgICAgICAgcF9jdGw9KHN0cnVjdCBjbGF3Y3RsICopJnByaXZwdHItPmN0bF9iazsKIApAQCAtMzEyNSw3ICsyMjk5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIAlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplPURFRl9QQUNLX0JVRlNJWkU7CiAJICAgICAgICAgICAgICAgICAgICAgICAgcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemU9REVGX1BBQ0tfQlVGU0laRTsKIAkJCX0gZWxzZSB7Ci0JCQkJLyogaG93IGJpZyBpcyB0aGUgcGlnZ2VzdCBncm91cCBvZiBwYWNrZXRzICovCisJCQkJLyogaG93IGJpZyBpcyB0aGUgYmlnZ2VzdCBncm91cCBvZiBwYWNrZXRzICovCiAJCQkJcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZT1wcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplOwogCSAgICAgICAgICAgICAgICAgICAgICAgIHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplPXByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOwogCQkJfQpAQCAtMzE1NSwyOSArMjMyOSwxNCBAQAogCiAgICAgICAgIHNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBjbGF3Y3RsKSk7CiAgICAgICAgIGlmICghc2tiKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCAgIiVzOiVzIGxvdyBvbiBtZW0sIHJldHVybmluZy4uLlxuIiwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0LCByYyA9IEVOT01FTVxuIiwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKICAgICAgICAgfQogCW1lbWNweShza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBjbGF3Y3RsKSksCiAJCXBfY3RsLCBzaXplb2Yoc3RydWN0IGNsYXdjdGwpKTsKLSNpZmRlZiBJT1RSQUNFCi0JIHByaW50ayhLRVJOX0lORk8gIiVzOiBvdXRibmQgY2xhdyBjbnRsIGRhdGEgXG4iLGRldi0+bmFtZSk7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKXBfY3RsLHNpemVvZihzdHJ1Y3QgY2xhd2N0bCkpOwotI2VuZGlmCiAJaWYgKHByaXZwdHItPnBfZW52LT5wYWNraW5nID49IFBBQ0tfU0VORCkKIAkJY2xhd19od190eChza2IsIGRldiwgMSk7CiAJZWxzZQogICAgICAgICAJY2xhd19od190eChza2IsIGRldiwgMCk7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCiAgICAgICAgIHJldHVybiAwOwogfSAgLyogICBlbmQgb2YgY2xhd19zZW5kX2NvbnRyb2wgICovCiAKQEAgLTMxOTIsMjIgKzIzNTEsMTEgQEAKICAgICAgICAgc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyPWRldi0+cHJpdjsKICAgICAgICAgc3RydWN0IGNsYXdjdGwgCSAgICpwX2N0bDsKIAotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoMixzZXR1cCwic25kX2Nvbm4iKTsKLSNpZmRlZiAgREVCVUdNU0cKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZhcmlhYmxlIGxpbmsgPSAlWCwgZGV2ID1cbiIsZGV2LT5uYW1lLCBsaW5rKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIGRldiwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSk7Ci0jZW5kaWYKKwlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAic25kX2Nvbm4iKTsKIAlyYyA9IDE7CiAgICAgICAgIHBfY3RsPShzdHJ1Y3QgY2xhd2N0bCAqKSZwcml2cHRyLT5jdGxfYms7CiAJcF9jdGwtPmxpbmtpZCA9IGxpbms7CiAgICAgICAgIGlmICggcHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXA9PTB4MDAgKSB7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkLCByYyA9IDFcbiIsCi0JCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJjOwogICAgICAgICB9CiAJaWYgKHByaXZwdHItPnBfZW52LT5wYWNraW5nID09IFBBQ0tJTkdfQVNLICkKQEAgLTMyMjAsMTAgKzIzNjgsNiBAQAogCWlmIChwcml2cHRyLT5wX2Vudi0+cGFja2luZyA9PSAwKQogICAgICAgICAJcmM9Y2xhd19zZW5kX2NvbnRyb2woZGV2LCBDT05ORUNUSU9OX1JFUVVFU1QsMCwwLDAsCiAgICAgICAgCQkJSE9TVF9BUFBMX05BTUUsIHByaXZwdHItPnBfZW52LT5hcGlfdHlwZSk7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZCwgcmMgPSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fLCByYyk7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuIHJjOwogCiB9ICAvKiAgZW5kIG9mIGNsYXdfc25kX2Nvbm5fcmVxICovCkBAIC0zMjQwLDI1ICsyMzg0LDEyIEBACiAgICAgICAgIGludCByYzsKICAgICAgICAgc3RydWN0IGNvbm5jbWQgKiAgcF9jb25uZWN0OwogCi0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoMixzZXR1cCwic25kX2RzYyIpOwotI2lmZGVmICBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgZGV2ID1cbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIGRldiwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBwX2N0bCIsZGV2LT5uYW1lKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIHBfY3RsLCBzaXplb2Yoc3RydWN0IGNsYXdjdGwpKTsKLSNlbmRpZgorCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJzbmRfZHNjIik7CiAgICAgICAgIHBfY29ubmVjdD0oc3RydWN0IGNvbm5jbWQgKikmcF9jdGwtPmRhdGE7CiAKICAgICAgICAgcmM9Y2xhd19zZW5kX2NvbnRyb2woZGV2LCBESVNDT05ORUNULCBwX2N0bC0+bGlua2lkLAogCQlwX2N0bC0+Y29ycmVsYXRvciwgMCwKICAgICAgICAgICAgICAgICBwX2Nvbm5lY3QtPmhvc3RfbmFtZSwgcF9jb25uZWN0LT5XU19uYW1lKTsKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkLCByYyA9ICVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sIF9fTElORV9fLCByYyk7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuIHJjOwogfSAgICAgLyogICBlbmQgb2YgY2xhd19zbmRfZGlzYyAgICAqLwogCkBAIC0zMjc2LDE4ICsyNDA3LDcgQEAKICAgICAgICAgc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyOwogICAgICAgICBpbnQgICAgcmM7CiAKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDIsc2V0dXAsImNoa3Jlc3AiKTsKLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdmFyaWFibGUgcmV0dXJuX2NvZGUgPSAlZCwgZGV2ID1cbiIsCi0JCWRldi0+bmFtZSwgcmV0dXJuX2NvZGUpOwotICAgICAgICBkdW1waXQoKGNoYXIgKikgZGV2LCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZhcmlhYmxlIHBfY3RsID1cbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIHBfY3RsLCBzaXplb2Yoc3RydWN0IGNsYXdjdGwpKTsKLSNlbmRpZgorCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJjaGtyZXNwIik7CiAgICAgICAgIHByaXZwdHIgPSBkZXYtPnByaXY7CiAgICAgICAgIHBfZW52PXByaXZwdHItPnBfZW52OwogICAgICAgICByYz1jbGF3X3NlbmRfY29udHJvbChkZXYsIFNZU1RFTV9WQUxJREFURV9SRVNQT05TRSwKQEAgLTMyOTYsMTAgKzI0MTYsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybl9jb2RlLAogCQlwX2Vudi0+aG9zdF9uYW1lLAogCQlwX2Vudi0+YWRhcHRlcl9uYW1lICApOwotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWQsIHJjID0gJWRcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXywgcmMpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiByYzsKIH0gICAgIC8qICAgIGVuZCBvZiBjbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwICAgICovCiAKQEAgLTMzMTMsMTkgKzI0MjksOCBAQAogewogICAgICAgICBpbnQgcmM7CiAKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19mdW5jX18pOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJjb25uX3JlcSIpOwotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBkZXYgPVxuIixkZXYtPm5hbWUpOwotICAgICAgICBkdW1waXQoKGNoYXIgKikgZGV2LCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpKTsKLSNlbmRpZgorCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJjb25uX3JlcSIpOwogICAgICAgICByYz1jbGF3X3NuZF9jb25uX3JlcShkZXYsIDEpOwotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWQsIHJjID0gJWRcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXywgcmMpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiByYzsKIH0gICAgLyogICBlbmQgb2YgY2xhd19zdHJ0X2Nvbm5fcmVxICAgKi8KIApAQCAtMzMzOSwxNSArMjQ0NCw5IEBACiBuZXRfZGV2aWNlX3N0YXRzICpjbGF3X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgICAgIHN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdnB0cjsKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19mdW5jX18pOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJzdGF0cyIpOworCisJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgInN0YXRzIik7CiAgICAgICAgIHByaXZwdHIgPSBkZXYtPnByaXY7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgogICAgICAgICByZXR1cm4gJnByaXZwdHItPnN0YXRzOwogfSAgICAgLyogICBlbmQgb2YgY2xhd19zdGF0cyAgICovCiAKQEAgLTMzNjgsMzYgKzI0NjcsMjggQEAKIAlzdHJ1Y3QgY2xhd3BoIAkqcF9wYWNraDsKIAl2b2lkCQkqcF9wYWNrZDsKIAlzdHJ1Y3QgY2xhd2N0bCAJKnBfY3RscmVjPU5VTEw7CisJc3RydWN0IGRldmljZQkqcF9kZXY7CiAKICAgICAgICAgX191MzIJbGVuX29mX2RhdGE7CiAJX191MzIJcGFja19vZmY7CiAgICAgICAgIF9fdTgJbGlua19udW07CiAgICAgICAgIF9fdTggCW10Y190aGlzX2ZybT0wOwogICAgICAgICBfX3UzMglieXRlc190b19tb3Y7Ci0gICAgICAgIHN0cnVjdCBjaGJrICpwX2NoID0gTlVMTDsKICAgICAgICAgaW50CWk9MDsKIAlpbnQgICAgIHA9MDsKIAotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIGVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwidW5wa3JlYWQiKTsKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAidW5wa3JlYWQiKTsKICAgICAgICAgcF9maXJzdF9jY3c9TlVMTDsKICAgICAgICAgcF9sYXN0X2Njdz1OVUxMOwogCXBfcGFja2g9TlVMTDsKIAlwX3BhY2tkPU5VTEw7CiAgICAgICAgIHByaXZwdHI9ZGV2LT5wcml2OworCisJcF9kZXYgPSAmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXY7CiAJcF9lbnYgPSBwcml2cHRyLT5wX2VudjsKICAgICAgICAgcF90aGlzX2Njdz1wcml2cHRyLT5wX3JlYWRfYWN0aXZlX2ZpcnN0OwogICAgICAgICBpPTA7CiAJd2hpbGUgKHBfdGhpc19jY3chPU5VTEwgJiYgcF90aGlzX2Njdy0+aGVhZGVyLmZsYWchPUNMQVdfUEVORElORykgewotI2lmZGVmIElPVFJBQ0UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgcF90aGlzX2NjdyBcbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICBkdW1waXQoKGNoYXIqKXBfdGhpc19jY3csIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlcyBJbmJvdW5kIHBfdGhpc19jY3ctPnBfYnVmZmVyKDY0KSIKLQkJCSIgcGs9JWQgXG4iLGRldi0+bmFtZSxwX2Vudi0+cGFja2luZyk7Ci0gICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopcF90aGlzX2Njdy0+cF9idWZmZXIsIDY0ICk7Ci0jZW5kaWYKIAkJcGFja19vZmYgPSAwOwogCQlwID0gMDsKIAkJcF90aGlzX2Njdy0+aGVhZGVyLmZsYWc9Q0xBV19QRU5ESU5HOwpAQCAtMzQxOSwxMCArMjUxMCw2IEBACiAJCWVsc2UKIAkgICAgICAgICAgICAgICAgbGlua19udW09cF90aGlzX2Njdy0+aGVhZGVyLm9wY29kZSAvIDg7CiAgICAgICAgICAgICAgICAgaWYgKChwX3RoaXNfY2N3LT5oZWFkZXIub3Bjb2RlICYgTU9SRV90b19DT01FX0ZMQUcpIT0wKSB7Ci0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcyA+IE1vcmVfdG9fY29tZSBpcyBPTlxuIiwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIG10Y190aGlzX2ZybT0xOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBfdGhpc19jY3ctPmhlYWRlci5sZW5ndGghPQogCQkJCXByaXZwdHItPnBfZW52LT5yZWFkX3NpemUgKSB7CkBAIC0zNDQ1LDIyICsyNTMyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPm10Y19za2lwcGluZz0wOyAvKiBPaywgdGhlIGVuZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5tdGNfbG9naWNhbF9saW5rPS0xOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBnb3RvIG5leHQgIgotCQkJCSJmcmFtZSBmcm9tIE1vcmV0b0NvbWVTa2lwIFxuIiwKLQkJCQlkZXYtPm5hbWUsX19mdW5jX18pOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIE5leHRGcmFtZTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAobGlua19udW09PTApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXdfcHJvY2Vzc19jb250cm9sKGRldiwgcF90aGlzX2Njdyk7Ci0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIGdvdG8gbmV4dCAiCi0JCQkJImZyYW1lIGZyb20gY2xhd19wcm9jZXNzX2NvbnRyb2wgXG4iLAotCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQkJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiVW5wa0NudGwiKTsKKwkJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJVbnBrQ250bCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBOZXh0RnJhbWU7CiAgICAgICAgICAgICAgICAgfQogdW5wYWNrX25leHQ6CkBAIC0zNDc5LDEwICsyNTU2LDYgQEAKICAgICAgICAgICAgICAgICAJYnl0ZXNfdG9fbW92PXBfdGhpc19jY3ctPmhlYWRlci5sZW5ndGg7CiAJCX0KICAgICAgICAgICAgICAgICBpZiAocHJpdnB0ci0+bXRjX2xvZ2ljYWxfbGluazwwKSB7Ci0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMgbXRjX2xvZ2ljYWxfbGluayA8IDAgIFxuIiwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKIAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgKiAgaWYgTW9yZS1Uby1Db21lIGlzIHNldCBpbiB0aGlzIGZyYW1lIHRoZW4gd2UgZG9uJ3Qga25vdwpAQCAtMzQ5NiwxNSArMjU2OSw2IEBACiAKICAgICAgICAgICAgICAgICBpZiAoYnl0ZXNfdG9fbW92ID4gKE1BWF9FTlZFTE9QRV9TSVpFLSBwcml2cHRyLT5tdGNfb2Zmc2V0KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgZXJyb3IgICAgICovCi0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcyA+IGdvdG8gbmV4dCAiCi0JCQkJImZyYW1lIGZyb20gTW9yZXRvQ29tZVNraXAgXG4iLAotCQkJCWRldi0+bmFtZSwKLQkJCQlfX2Z1bmNfXyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIgICAgICBieXRlc190b19tb3YgJWQgPiAoTUFYX0VOVkVMT1BFXyIKLQkJCQkiU0laRS1wcml2cHRyLT5tdGNfb2Zmc2V0ICVkKVxuIiwKLQkJCQlieXRlc190b19tb3YsKE1BWF9FTlZFTE9QRV9TSVpFLSBwcml2cHRyLT5tdGNfb2Zmc2V0KSk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBOZXh0RnJhbWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUxNiwxNiArMjU4MCw2IEBACiAgICAgICAgICAgICAgICAgCW1lbWNweSggcHJpdnB0ci0+cF9tdGNfZW52ZWxvcGUrIHByaXZwdHItPm10Y19vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAJcF90aGlzX2Njdy0+cF9idWZmZXIsIGJ5dGVzX3RvX21vdik7CiAJCX0KLSNpZmRlZiBERUJVR01TRwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIHJlY2VpdmVkIGRhdGEgXG4iLAotCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKLQkJaWYgKHBfZW52LT5wYWNraW5nID09IERPX1BBQ0tFRCkKLQkJCWR1bXBpdCgoY2hhciAqKXBfcGFja2Qrc2l6ZW9mKHN0cnVjdCBjbGF3cGgpLDMyKTsKLQkJZWxzZQotCSAgICAgICAgICAgICAgICBkdW1waXQoKGNoYXIgKilwX3RoaXNfY2N3LT5wX2J1ZmZlciwgMzIpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBieXRlbGVuZ3RoICVkIFxuIiwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyxieXRlc190b19tb3YpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKG10Y190aGlzX2ZybT09MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbGVuX29mX2RhdGE9cHJpdnB0ci0+bXRjX29mZnNldCtieXRlc190b19tb3Y7CiAgICAgICAgICAgICAgICAgICAgICAgICBza2I9ZGV2X2FsbG9jX3NrYihsZW5fb2ZfZGF0YSk7CkBAIC0zNTQwLDExICsyNTk0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJCXByaXZwdHItPnN0YXRzLnJ4X2J5dGVzKz1sZW5fb2ZfZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfcngoc2tiKTsKLSNpZmRlZiBERUJVR01TRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBuZXRpZl8iCi0JCQkJCSJyeChza2IpIGNvbXBsZXRlZCBcbiIsCi0JCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5zdGF0cy5yeF9kcm9wcGVkKys7CkBAIC0zNTgxLDI4ICsyNjMwLDE0IEBACiAgICAgICAgICAgICAgICAgKiAgICAgICBjaGFpbiB0byBuZXh0IGJsb2NrIG9uIGFjdGl2ZSByZWFkIHF1ZXVlCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBwX3RoaXNfY2N3ID0gcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9maXJzdDsKLQkJQ0xBV19EQkZfVEVYVF8oNCx0cmFjZSwicnhwa3QgJWQiLHApOworCQlDTEFXX0RCRl9URVhUXyg0LCB0cmFjZSwgInJ4cGt0ICVkIiwgcCk7CiAgICAgICAgIH0gLyogZW5kIG9mIHdoaWxlICovCiAKICAgICAgICAgLyogICAgICBjaGVjayB2YWxpZGl0eSAgICAgICAgICAgICAgICAgICovCiAKLSNpZmRlZiBJT1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIHByb2Nlc3NlZCBmcmFtZSBpcyAlZCBcbiIsCi0JCWRldi0+bmFtZSxfX2Z1bmNfXyxpKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgIEY6JWx4IEw6JWx4XG4iLAotCQlkZXYtPm5hbWUsCi0JCV9fZnVuY19fLAotCQkodW5zaWduZWQgbG9uZylwX2ZpcnN0X2NjdywKLQkJKHVuc2lnbmVkIGxvbmcpcF9sYXN0X2Njdyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUXyg0LHRyYWNlLCJyeGZybSAlZCIsaSk7CisJQ0xBV19EQkZfVEVYVF8oNCwgdHJhY2UsICJyeGZybSAlZCIsIGkpOwogICAgICAgICBhZGRfY2xhd19yZWFkcyhkZXYsIHBfZmlyc3RfY2N3LCBwX2xhc3RfY2N3KTsKLSAgICAgICAgcF9jaD0mcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXTsKICAgICAgICAgY2xhd19zdHJ0X3JlYWQoZGV2LCBMT0NLX1lFUyk7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBleGl0IG9uIGxpbmUgJWRcbiIsCi0JCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKLSNlbmRpZgogICAgICAgICByZXR1cm47CiB9ICAgICAvKiAgZW5kIG9mIHVucGFja19yZWFkICAgKi8KIApAQCAtMzYyMiwxMiArMjY1Nyw3IEBACiAgICAgICAgIHN0cnVjdCBjbGF3aCAqcF9jbGF3aDsKICAgICAgICAgcF9jaD0mcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXTsKIAotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZhcmlhYmxlIGxvY2sgPSAlZCwgZGV2ID1cbiIsZGV2LT5uYW1lLCBsb2NrKTsKLSAgICAgICAgZHVtcGl0KChjaGFyICopIGRldiwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIlN0UmROdGVyIik7CisJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIlN0UmROdGVyIik7CiAgICAgICAgIHBfY2xhd2g9KHN0cnVjdCBjbGF3aCAqKXByaXZwdHItPnBfY2xhd19zaWduYWxfYmxrOwogICAgICAgICBwX2NsYXdoLT5mbGFnPUNMQVdfSURMRTsgICAgLyogMHgwMCAqLwogCkBAIC0zNjM3LDIxICsyNjY3LDExIEBACiAgICAgICAgICAgICAgcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9maXJzdC0+aGVhZGVyLmZsYWchPUNMQVdfUEVORElORyApKSB7CiAgICAgICAgICAgICAgICAgcF9jbGF3aC0+ZmxhZz1DTEFXX0JVU1k7ICAgIC8qIDB4ZmYgKi8KICAgICAgICAgfQotI2lmZGVmIERFQlVHTVNHCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIHN0YXRlLSUwMnhcbiIgLAotCQlkZXYtPm5hbWUsX19mdW5jX18sIHBfY2gtPmNsYXdfc3RhdGUpOwotI2VuZGlmCiAgICAgICAgIGlmIChsb2NrPT1MT0NLX1lFUykgewogICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhwX2NoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKICAgICAgICAgfQogICAgICAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpID09IDApIHsKLSNpZmRlZiBERUJVR01TRwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBIT1QgUkVBRCBzdGFydGVkIGluICVzXG4iICwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0gICAgICAgICAgICAgICAgcF9jbGF3aD0oc3RydWN0IGNsYXdoICopcHJpdnB0ci0+cF9jbGF3X3NpZ25hbF9ibGs7Ci0gICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopJnBfY2xhd2gtPmZsYWcgLCAxKTsKLSNlbmRpZgotCQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIkhvdFJlYWQiKTsKKwkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIkhvdFJlYWQiKTsKICAgICAgICAgICAgICAgICBwX2Njd2JrPXByaXZwdHItPnBfcmVhZF9hY3RpdmVfZmlyc3Q7CiAgICAgICAgICAgICAgICAgcGFybSA9ICh1bnNpZ25lZCBsb25nKSBwX2NoOwogICAgICAgICAgICAgICAgIHJjID0gY2N3X2RldmljZV9zdGFydCAocF9jaC0+Y2RldiwgJnBfY2N3YmstPnJlYWQsIHBhcm0sCkBAIC0zNjYxLDIxICsyNjgxLDEzIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CiAJZWxzZSB7Ci0jaWZkZWYgREVCVUdNU0cKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIFJFQUQgc3RhcnRlZCBieSAlcygpIEluIHByb2dyZXNzXG4iICwKLQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQkJQ0xBV19EQkZfVEVYVCgyLHRyYWNlLCJSZWFkQWN0Iik7CisJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJSZWFkQWN0Iik7CiAJfQogCiAgICAgICAgIGlmIChsb2NrPT1MT0NLX1lFUykgewogICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKHBfY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwogICAgICAgICB9Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiU3RSZEV4aXQiKTsKKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiU3RSZEV4aXQiKTsKICAgICAgICAgcmV0dXJuOwogfSAgICAgICAvKiAgICBlbmQgb2YgY2xhd19zdHJ0X3JlYWQgICAgKi8KIApAQCAtMzY5MywzOCArMjcwNSwyMyBAQAogICAgICAgICBzdHJ1Y3QgY2hiayAgICAgCSpwX2NoOwogICAgICAgICBzdHJ1Y3QgY2N3YmsgICAJKnBfZmlyc3RfY2N3OwogCi0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgogCWlmICghZGV2KSB7CiAJCXJldHVybjsKIAl9CiAgICAgICAgIHByaXZwdHI9KHN0cnVjdCBjbGF3X3ByaXZiayAqKWRldi0+cHJpdjsKICAgICAgICAgcF9jaD0mcHJpdnB0ci0+Y2hhbm5lbFtXUklURV07CiAKLSNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBzdGF0ZS0lMDJ4XG4iICwKLQkJZGV2LT5uYW1lLF9fZnVuY19fLHBfY2gtPmNsYXdfc3RhdGUpOwotI2VuZGlmCi0gICAgICAgIENMQVdfREJGX1RFWFQoNCx0cmFjZSwic3RydF9pbyIpOworCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJzdHJ0X2lvIik7CiAgICAgICAgIHBfZmlyc3RfY2N3PXByaXZwdHItPnBfd3JpdGVfYWN0aXZlX2ZpcnN0OwogCiAgICAgICAgIGlmIChwX2NoLT5jbGF3X3N0YXRlID09IENMQVdfU1RPUCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwX2ZpcnN0X2NjdyA9PSBOVUxMKSB7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpID09IDApIHsKICAgICAgICAgICAgICAgICBwYXJtID0gKHVuc2lnbmVkIGxvbmcpIHBfY2g7Ci0jaWZkZWYgREVCVUdNU0cKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgZG9faW8gXG4iICxkZXYtPm5hbWUsX19mdW5jX18pOwotICAgICAgICAgICAgICAgIGR1bXBpdCgoY2hhciAqKXBfZmlyc3RfY2N3LCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7Ci0jZW5kaWYKLQkJQ0xBV19EQkZfVEVYVCgyLHRyYWNlLCJTdFdydElPIik7CisJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJTdFdydElPIik7CiAgICAgICAgICAgICAgICAgcmMgPSBjY3dfZGV2aWNlX3N0YXJ0IChwX2NoLT5jZGV2LCZwX2ZpcnN0X2Njdy0+d3JpdGUsIHBhcm0sCiAJCQkJICAgICAgIDB4ZmYsIDApOwogICAgICAgICAgICAgICAgIGlmIChyYyAhPSAwKSB7CkBAIC0zNzMyLDExICsyNzI5LDYgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwotI2VuZGlmCi0KICAgICAgICAgcmV0dXJuOwogfSAgICAgICAvKiAgICBlbmQgb2YgY2xhd19zdHJ0X291dF9JTyAgICAqLwogCkBAIC0zNzU0LDMyICsyNzQ2LDExIEBACiAJc3RydWN0IGNjd2JrKnBfbGFzdF9jY3c7CiAJc3RydWN0IGNjd2JrKnBfdGhpc19jY3c7CiAJc3RydWN0IGNjd2JrKnBfbmV4dF9jY3c7Ci0jaWZkZWYgSU9UUkFDRQotICAgICAgICBzdHJ1Y3QgY2N3YmsqcF9idWY7Ci0jZW5kaWYKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19mdW5jX18pOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogZnJlZSBjb3VudCA9ICVkICB2YXJpYWJsZSBkZXYgPVxuIiwKLQkJZGV2LT5uYW1lLHByaXZwdHItPndyaXRlX2ZyZWVfY291bnQpOwotI2VuZGlmCi0JQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJmcmVld3J0YiIpOworCisJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImZyZWV3cnRiIik7CiAgICAgICAgIC8qICBzY2FuIHRoZSB3cml0ZSBxdWV1ZSB0byBmcmVlIGFueSBjb21wbGV0ZWQgd3JpdGUgcGFja2V0cyAgICovCiAgICAgICAgIHBfZmlyc3RfY2N3PU5VTEw7CiAgICAgICAgIHBfbGFzdF9jY3c9TlVMTDsKLSNpZmRlZiBJT1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAgRHVtcCBjdXJyZW50IENDVyBjaGFpbiBcbiIsZGV2LT5uYW1lICApOwotICAgICAgICBwX2J1Zj1wcml2cHRyLT5wX3dyaXRlX2FjdGl2ZV9maXJzdDsKLSAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopcF9idWYsIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKLSAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICBpZiAocF9idWY9PU5VTEwpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogcHJpdnB0ci0+cF93cml0ZV8iCi0JCQkiYWN0aXZlX2ZpcnN0PT1OVUxMXG4iLGRldi0+bmFtZSAgKTsKLSAgICAgICAgfQotICAgICAgICBwX2J1Zj0oc3RydWN0IGNjd2JrKilwcml2cHRyLT5wX2VuZF9jY3c7Ci0gICAgICAgIGR1bXBpdCgoY2hhciAqKXBfYnVmLCBzaXplb2Yoc3RydWN0IGVuZGNjdykpOwotI2VuZGlmCiAgICAgICAgIHBfdGhpc19jY3c9cHJpdnB0ci0+cF93cml0ZV9hY3RpdmVfZmlyc3Q7CiAgICAgICAgIHdoaWxlICggKHBfdGhpc19jY3chPU5VTEwpICYmIChwX3RoaXNfY2N3LT5oZWFkZXIuZmxhZyE9Q0xBV19QRU5ESU5HKSkKICAgICAgICAgewpAQCAtMzgwOSwzMSArMjc4MCw4IEBACiAgICAgICAgIC8qICAgd2hvbGUgY2hhaW4gcmVtb3ZlZD8gICAqLwogICAgICAgICBpZiAocHJpdnB0ci0+cF93cml0ZV9hY3RpdmVfZmlyc3Q9PU5VTEwpIHsKICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3dyaXRlX2FjdGl2ZV9sYXN0PU5VTEw7Ci0jaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBwX3dyaXRlXyIKLQkJCSJhY3RpdmVfZmlyc3Q9PU5VTExcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgogICAgICAgICB9Ci0jaWZkZWYgSU9UUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRHVtcCBhcnJhbmdlZCBDQ1cgY2hhaW4gXG4iLGRldi0+bmFtZSAgKTsKLSAgICAgICAgcF9idWY9cHJpdnB0ci0+cF93cml0ZV9hY3RpdmVfZmlyc3Q7Ci0gICAgICAgIHdoaWxlIChwX2J1ZiE9TlVMTCkgewotICAgICAgICAgICAgICAgIGR1bXBpdCgoY2hhciAqKXBfYnVmLCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7Ci0gICAgICAgICAgICAgICAgcF9idWY9cF9idWYtPm5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBfYnVmPT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHByaXZwdHItPnBfd3JpdGVfYWN0aXZlXyIKLQkJCSJmaXJzdD09TlVMTFxuIixkZXYtPm5hbWUgICk7Ci0gICAgICAgIH0KLSAgICAgICAgcF9idWY9KHN0cnVjdCBjY3diayopcHJpdnB0ci0+cF9lbmRfY2N3OwotICAgICAgICBkdW1waXQoKGNoYXIgKilwX2J1Ziwgc2l6ZW9mKHN0cnVjdCBlbmRjY3cpKTsKLSNlbmRpZgotCi0JQ0xBV19EQkZfVEVYVF8oNCx0cmFjZSwiRldDPSVkIixwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50KTsKLSNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkIGZyZWVfY291bnQgPSVkXG4iLAotCQlkZXYtPm5hbWUsX19mdW5jX18sIF9fTElORV9fLHByaXZwdHItPndyaXRlX2ZyZWVfY291bnQpOwotI2VuZGlmCisJQ0xBV19EQkZfVEVYVF8oNCwgdHJhY2UsICJGV0M9JWQiLCBwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50KTsKICAgICAgICAgcmV0dXJuOwogfQogCkBAIC0zODQ1LDE0ICsyNzkzLDExIEBACiBjbGF3X2ZyZWVfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgZnJlZV9kZXYpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyOwotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUKDIsc2V0dXAsImZyZWVfZGV2Iik7CiAKKwlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiZnJlZV9kZXYiKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuOwotCUNMQVdfREJGX1RFWFRfKDIsc2V0dXAsIiVzIixkZXYtPm5hbWUpOworCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBkZXYtPm5hbWUpOwogCXByaXZwdHIgPSBkZXYtPnByaXY7CiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUlVOTklORykKIAkJY2xhd19yZWxlYXNlKGRldik7CkBAIC0zODY1LDEwICsyODEwLDcgQEAKIAkJZnJlZV9uZXRkZXYoZGV2KTsKIAl9CiAjZW5kaWYKLQlDTEFXX0RCRl9URVhUKDIsc2V0dXAsImZlZWVfb2siKTsKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0XG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7Ci0jZW5kaWYKKwlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiZnJlZV9vayIpOwogfQogCiAvKioKQEAgLTM4NzksMTcgKzI4MjEsOCBAQAogc3RhdGljIHZvaWQKIGNsYXdfaW5pdF9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCiB7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiaW5pdF9kZXYiKTsKLQlDTEFXX0RCRl9URVhUXygyLHNldHVwLCIlcyIsZGV2LT5uYW1lKTsKLQlpZiAoIWRldikgewotICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiVzIEJBRCBEZXZpY2UgZXhpdCBsaW5lICVkXG4iLAotCQlfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0JCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiYmFkZGV2Iik7Ci0JCXJldHVybjsKLQl9CisJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRfZGV2Iik7CisJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIGRldi0+bmFtZSk7CiAJZGV2LT5tdHUgPSBDTEFXX0RFRkFVTFRfTVRVX1NJWkU7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjbGF3X3R4OwogCWRldi0+b3BlbiA9IGNsYXdfb3BlbjsKQEAgLTM5MDEsMTAgKzI4MzQsNyBAQAogCWRldi0+dHlwZSA9IEFSUEhSRF9TTElQOwogCWRldi0+dHhfcXVldWVfbGVuID0gMTMwMDsKIAlkZXYtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOwotI2lmZGVmIEZVTkNUUkFDRQotCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXRcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKLSNlbmRpZgotCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiaW5pdG9rIik7CisJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRvayIpOwogCXJldHVybjsKIH0KIApAQCAtMzkyMSwxMCArMjg1MSw3IEBACiAJc3RydWN0IGNoYmsgKnBfY2g7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCi0jaWZkZWYgRlVOQ1RSQUNFCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsY2Rldi0+ZGV2LmJ1c19pZCxfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlDTEFXX0RCRl9URVhUXygyLHNldHVwLCIlcyIsY2Rldi0+ZGV2LmJ1c19pZCk7CisJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIGNkZXYtPmRldi5idXNfaWQpOwogCXByaXZwdHItPmNoYW5uZWxbaV0uZmxhZyAgPSBpKzE7ICAgLyogUmVhZCBpcyAxIFdyaXRlIGlzIDIgKi8KIAlwX2NoID0gJnByaXZwdHItPmNoYW5uZWxbaV07CiAJcF9jaC0+Y2RldiA9IGNkZXY7CkBAIC0zOTMyLDE4ICsyODU5LDggQEAKIAljY3dfZGV2aWNlX2dldF9pZChjZGV2LCAmZGV2X2lkKTsKIAlwX2NoLT5kZXZubyA9IGRldl9pZC5kZXZubzsKIAlpZiAoKHBfY2gtPmlyYiA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgaXJiKSxHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBPdXQgb2YgbWVtb3J5IGluICVzIGZvciBpcmJcbiIsCi0JCQlwX2NoLT5pZCxfX2Z1bmNfXyk7Ci0jaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIAlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQlwX2NoLT5pZCxfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0jZW5kaWYKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQkJY2Rldi0+ZGV2LmJ1c19pZCxfX2Z1bmNfXyxfX0xJTkVfXyk7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzk2NSw5ICsyODgyLDggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKIAotCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19mdW5jX18pOwogCXByaW50ayhLRVJOX0lORk8gImNsYXc6IGFkZCBmb3IgJXNcbiIsY2dkZXYtPmNkZXZbUkVBRF0tPmRldi5idXNfaWQpOwotCUNMQVdfREJGX1RFWFQoMixzZXR1cCwibmV3X2RldiIpOworCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJuZXdfZGV2Iik7CiAJcHJpdnB0ciA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJY2dkZXYtPmNkZXZbUkVBRF0tPmRldi5kcml2ZXJfZGF0YSA9IHByaXZwdHI7CiAJY2dkZXYtPmNkZXZbV1JJVEVdLT5kZXYuZHJpdmVyX2RhdGEgPSBwcml2cHRyOwpAQCAtMzk4MiwyMiArMjg5OCwyMSBAQAogCWlmIChyZXQgPT0gMCkKIAkJcmV0ID0gYWRkX2NoYW5uZWwoY2dkZXYtPmNkZXZbMV0sMSxwcml2cHRyKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJIAkiYWRkIGNoYW5uZWwgZmFpbGVkICIKLQkJCQkid2l0aCByZXQgPSAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gb3V0OworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiYWRkIGNoYW5uZWwgZmFpbGVkIHdpdGggcmV0ID0gJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2dkZXYtPmNkZXZbUkVBRF0pOwogCWlmIChyZXQgIT0gMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAiY2xhdzogY2N3X2RldmljZV9zZXRfb25saW5lICVzIFJFQUQgZmFpbGVkICIKKwkJCSJjbGF3OiBjY3dfZGV2aWNlX3NldF9vbmxpbmUgJXMgUkVBRCBmYWlsZWQgIgogCQkJIndpdGggcmV0ID0gJWRcbiIsY2dkZXYtPmNkZXZbUkVBRF0tPmRldi5idXNfaWQscmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZ2Rldi0+Y2RldltXUklURV0pOwogCWlmIChyZXQgIT0gMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAiY2xhdzogY2N3X2RldmljZV9zZXRfb25saW5lICVzIFdSSVRFIGZhaWxlZCAiCisJCQkiY2xhdzogY2N3X2RldmljZV9zZXRfb25saW5lICVzIFdSSVRFIGZhaWxlZCAiCiAJCQkid2l0aCByZXQgPSAlZFxuIixjZ2Rldi0+Y2RldltXUklURV0tPmRldi5idXNfaWQsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQwMTQsMTggKzI5MjksMTYgQEAKICAgICAgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmY2dkZXYtPmRldik7CiAJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAkJY2xhd19mcmVlX25ldGRldmljZShkZXYsIDEpOwotCQlDTEFXX0RCRl9URVhUKDIsdHJhY2UsInJlZ2ZhaWwiKTsKKwkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgInJlZ2ZhaWwiKTsKIAkJZ290byBvdXQ7CiAJfQogCWRldi0+ZmxhZ3MgJj1+SUZGX1JVTk5JTkc7CiAJaWYgKHByaXZwdHItPmJ1ZmZzX2FsbG9jID09IDApIHsKIAkgICAgICAgIHJldD1pbml0X2Njd19iayhkZXYpOwogCQlpZiAocmV0ICE9MCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICJjbGF3OiBpbml0X2Njd19iayBmYWlsZWQgd2l0aCByZXQ9JWRcbiIsIHJldCk7CiAJCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQkJY2xhd19mcmVlX25ldGRldmljZShkZXYsMSk7Ci0JCQlDTEFXX0RCRl9URVhUKDIsdHJhY2UsImNjd21lbSIpOworCQkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgImNjd21lbSIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC00MDQ3LDcgKzI5NjAsNiBAQAogb3V0OgogCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2dkZXYtPmNkZXZbMV0pOwogCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2dkZXYtPmNkZXZbMF0pOwotCiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTQwNTYsOCArMjk2OCw3IEBACiB7CiAgICAgICAgIHN0cnVjdCBza19idWZmICpza2I7CiAKLSAgICAgICAgQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJwdXJncXVlIik7Ci0KKwlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAicHVyZ3F1ZSIpOwogICAgICAgICB3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKHEpKSkgewogICAgICAgICAgICAgICAgIGF0b21pY19kZWMoJnNrYi0+dXNlcnMpOwogICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC00MDc4LDggKzI5ODksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCWludAlyZXQ7CiAKLQlwcl9kZWJ1ZygiJXMoKSBjYWxsZWRcbiIsIF9fZnVuY19fKTsKLQlDTEFXX0RCRl9URVhUXygyLHNldHVwLCIlcyIsY2dkZXYtPmRldi5idXNfaWQpOworCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBjZ2Rldi0+ZGV2LmJ1c19pZCk7CiAJcHJpdiA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQxMDgsMTMgKzMwMTgsMTAgQEAKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAKLQlwcl9kZWJ1ZygiJXMoKSBjYWxsZWRcbiIsIF9fZnVuY19fKTsKLQlDTEFXX0RCRl9URVhUXygyLHNldHVwLCIlcyIsY2dkZXYtPmRldi5idXNfaWQpOworCUJVR19PTighY2dkZXYpOworCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBjZ2Rldi0+ZGV2LmJ1c19pZCk7CiAJcHJpdiA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7Ci0JaWYgKCFwcml2KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6ICVzKCkgbm8gUHJpdiBleGl0aW5nXG4iLF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KKwlCVUdfT04oIXByaXYpOwogCXByaW50ayhLRVJOX0lORk8gImNsYXc6ICVzKCkgY2FsbGVkICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIsCiAJCQlfX2Z1bmNfXyxjZ2Rldi0+Y2RldlswXS0+ZGV2LmJ1c19pZCk7CiAJaWYgKGNnZGV2LT5zdGF0ZSA9PSBDQ1dHUk9VUF9PTkxJTkUpCkBAIC00MTMzLDYgKzMwNDAsOCBAQAogCWNnZGV2LT5jZGV2W1JFQURdLT5kZXYuZHJpdmVyX2RhdGEgPSBOVUxMOwogCWNnZGV2LT5jZGV2W1dSSVRFXS0+ZGV2LmRyaXZlcl9kYXRhID0gTlVMTDsKIAlwdXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KTsKKworCXJldHVybjsKIH0KIAogCkBAIC00MTY4LDggKzMwNzcsOCBAQAogCXN0cm5jcHkocF9lbnYtPmhvc3RfbmFtZSxidWYsIGNvdW50KTsKIAlwX2Vudi0+aG9zdF9uYW1lW2NvdW50LTFdID0gMHgyMDsgIC8qIGNsZWFyIGV4dHJhIDB4MGEgKi8KIAlwX2Vudi0+aG9zdF9uYW1lW01BWF9OQU1FX0xFTl0gPSAweDAwOwotCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiSHN0blNldCIpOwotICAgICAgICBDTEFXX0RCRl9URVhUXygyLHNldHVwLCIlcyIscF9lbnYtPmhvc3RfbmFtZSk7CisJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIkhzdG5TZXQiKTsKKwlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgcF9lbnYtPmhvc3RfbmFtZSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC00MTg2LDcgKzMwOTUsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcF9lbnYgPSBwcml2LT5wX2VudjsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIixwX2Vudi0+YWRhcHRlcl9uYW1lKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcF9lbnYtPmFkYXB0ZXJfbmFtZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC00MjA1LDggKzMxMTQsOCBAQAogCXN0cm5jcHkocF9lbnYtPmFkYXB0ZXJfbmFtZSxidWYsIGNvdW50KTsKIAlwX2Vudi0+YWRhcHRlcl9uYW1lW2NvdW50LTFdID0gMHgyMDsgLyogY2xlYXIgZXh0cmEgMHgwYSAqLwogCXBfZW52LT5hZGFwdGVyX25hbWVbTUFYX05BTUVfTEVOXSA9IDB4MDA7Ci0JQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJBZG5TZXQiKTsKLQlDTEFXX0RCRl9URVhUXygyLHNldHVwLCIlcyIscF9lbnYtPmFkYXB0ZXJfbmFtZSk7CisJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIkFkblNldCIpOworCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBwX2Vudi0+YWRhcHRlcl9uYW1lKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTQyNDcsMTUgKzMxNTYsMTUgQEAKIAkJcF9lbnYtPnJlYWRfc2l6ZT1ERUZfUEFDS19CVUZTSVpFOwogCQlwX2Vudi0+d3JpdGVfc2l6ZT1ERUZfUEFDS19CVUZTSVpFOwogCQlwX2Vudi0+cGFja2luZz1QQUNLSU5HX0FTSzsKLQkJQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJQQUNLSU5HIik7CisJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJQQUNLSU5HIik7CiAJfQogCWVsc2UgewogCQlwX2Vudi0+cGFja2luZz0wOwogCQlwX2Vudi0+cmVhZF9zaXplPUNMQVdfRlJBTUVfU0laRTsKIAkJcF9lbnYtPndyaXRlX3NpemU9Q0xBV19GUkFNRV9TSVpFOwotCQlDTEFXX0RCRl9URVhUKDIsc2V0dXAsIkFwaVNldCIpOworCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiQXBpU2V0Iik7CiAJfQotCUNMQVdfREJGX1RFWFRfKDIsc2V0dXAsIiVzIixwX2Vudi0+YXBpX3R5cGUpOworCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBwX2Vudi0+YXBpX3R5cGUpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDI5NSw4ICszMjA0LDggQEAKIAlpZiAoKG5ubiA+IG1heCApIHx8IChubm4gPCAyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcF9lbnYtPndyaXRlX2J1ZmZlcnMgPSBubm47Ci0JQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJXYnVmc2V0Iik7Ci0gICAgICAgIENMQVdfREJGX1RFWFRfKDIsc2V0dXAsIldCPSVkIixwX2Vudi0+d3JpdGVfYnVmZmVycyk7CisJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIldidWZzZXQiKTsKKwlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIldCPSVkIiwgcF9lbnYtPndyaXRlX2J1ZmZlcnMpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDMzNiw4ICszMjQ1LDggQEAKIAlpZiAoKG5ubiA+IG1heCApIHx8IChubm4gPCAyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcF9lbnYtPnJlYWRfYnVmZmVycyA9IG5ubjsKLQlDTEFXX0RCRl9URVhUKDIsc2V0dXAsIlJidWZzZXQiKTsKLQlDTEFXX0RCRl9URVhUXygyLHNldHVwLCJSQj0lZCIscF9lbnYtPnJlYWRfYnVmZmVycyk7CisJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIlJidWZzZXQiKTsKKwlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIlJCPSVkIiwgcF9lbnYtPnJlYWRfYnVmZmVycyk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00MzU5LDE2ICszMjY4LDE0IEBACiBzdGF0aWMgaW50CiBjbGF3X2FkZF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJhZGRfZmlsZSIpOworCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJhZGRfZmlsZSIpOwogCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmNsYXdfYXR0cl9ncm91cCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBjbGF3X3JlbW92ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJyZW1fZmlsZSIpOworCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJyZW1fZmlsZSIpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmY2xhd19hdHRyX2dyb3VwKTsKIH0KIApAQCAtNDM5NywzNSArMzMwNCwyNyBAQAogCWludCByZXQgPSAwOwogCXByaW50ayhLRVJOX0lORk8gImNsYXc6IHN0YXJ0aW5nIGRyaXZlclxuIik7CiAKLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiAlcygpIGVudGVyIFxuIixfX2Z1bmNfXyk7Ci0jZW5kaWYKIAlyZXQgPSBjbGF3X3JlZ2lzdGVyX2RlYnVnX2ZhY2lsaXR5KCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiAlcygpIGRlYnVnX3JlZ2lzdGVyIGZhaWxlZCAlZFxuIiwKIAkJCV9fZnVuY19fLHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiaW5pdF9tb2QiKTsKKwlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdF9tb2QiKTsKIAlyZXQgPSByZWdpc3Rlcl9jdTMwODhfZGlzY2lwbGluZSgmY2xhd19ncm91cF9kcml2ZXIpOwogCWlmIChyZXQpIHsKKwkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRfYmFkIik7CiAJCWNsYXdfdW5yZWdpc3Rlcl9kZWJ1Z19mYWNpbGl0eSgpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OyAlcygpIGN1MzA4OCByZWdpc3RlciBmYWlsZWQgJWRcbiIsCiAJCQlfX2Z1bmNfXyxyZXQpOwogCX0KLSNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiAlcygpIGV4aXQgXG4iLF9fZnVuY19fKTsKLSNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKIG1vZHVsZV9pbml0KGNsYXdfaW5pdCk7CiBtb2R1bGVfZXhpdChjbGF3X2NsZWFudXApOwogCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKLSogICAgRW5kIG9mIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCitNT0RVTEVfQVVUSE9SKCJBbmR5IFJpY2h0ZXIgPHJpY2h0ZXJhQHVzLmlibS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxpbnV4IGZvciBTeXN0ZW0geiBDTEFXIERyaXZlclxuIiBcCisJCQkiQ29weXJpZ2h0IDIwMDAsMjAwOCBJQk0gQ29ycG9yYXRpb25cbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2RidWcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9kYnVnLmMKaW5kZXggOGViMjVkMC4uMWNhNThmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2RidWcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZGJ1Zy5jCkBAIC03LDYgKzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTIyLDE1ICsyMywxMyBAQAogICogRGVidWcgRmFjaWxpdHkgU3R1ZmYKICAqLwogCi1ERUZJTkVfUEVSX0NQVShjaGFyWzI1Nl0sIGN0Y21fZGJmX3R4dF9idWYpOwotCiBzdHJ1Y3QgY3RjbV9kYmZfaW5mbyBjdGNtX2RiZltDVENNX0RCRl9JTkZPU10gPSB7Ci0JW0NUQ01fREJGX1NFVFVQXQk9IHsiY3RjX3NldHVwIiwgOCwgMSwgNjQsIDUsIE5VTEx9LAotCVtDVENNX0RCRl9FUlJPUl0JPSB7ImN0Y19lcnJvciIsIDgsIDEsIDY0LCAzLCBOVUxMfSwKLQlbQ1RDTV9EQkZfVFJBQ0VdCT0geyJjdGNfdHJhY2UiLCA4LCAxLCA2NCwgMywgTlVMTH0sCi0JW0NUQ01fREJGX01QQ19TRVRVUF0JPSB7Im1wY19zZXR1cCIsIDgsIDEsIDY0LCA1LCBOVUxMfSwKLQlbQ1RDTV9EQkZfTVBDX0VSUk9SXQk9IHsibXBjX2Vycm9yIiwgOCwgMSwgNjQsIDMsIE5VTEx9LAotCVtDVENNX0RCRl9NUENfVFJBQ0VdCT0geyJtcGNfdHJhY2UiLCA4LCAxLCA2NCwgMywgTlVMTH0sCisJW0NUQ01fREJGX1NFVFVQXSAgICAgPSB7ImN0Y19zZXR1cCIsIDgsIDEsIDY0LCBDVENfREJGX0lORk8sIE5VTEx9LAorCVtDVENNX0RCRl9FUlJPUl0gICAgID0geyJjdGNfZXJyb3IiLCA4LCAxLCA2NCwgQ1RDX0RCRl9FUlJPUiwgTlVMTH0sCisJW0NUQ01fREJGX1RSQUNFXSAgICAgPSB7ImN0Y190cmFjZSIsIDgsIDEsIDY0LCBDVENfREJGX0VSUk9SLCBOVUxMfSwKKwlbQ1RDTV9EQkZfTVBDX1NFVFVQXSA9IHsibXBjX3NldHVwIiwgOCwgMSwgODAsIENUQ19EQkZfSU5GTywgTlVMTH0sCisJW0NUQ01fREJGX01QQ19FUlJPUl0gPSB7Im1wY19lcnJvciIsIDgsIDEsIDgwLCBDVENfREJGX0VSUk9SLCBOVUxMfSwKKwlbQ1RDTV9EQkZfTVBDX1RSQUNFXSA9IHsibXBjX3RyYWNlIiwgOCwgMSwgODAsIENUQ19EQkZfRVJST1IsIE5VTEx9LAogfTsKIAogdm9pZCBjdGNtX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKHZvaWQpCkBAIC02NSwzICs2NCwxNyBAQAogCXJldHVybiAwOwogfQogCit2b2lkIGN0Y21fZGJmX2xvbmd0ZXh0KGVudW0gY3RjbV9kYmZfbmFtZXMgZGJmX25peCwgaW50IGxldmVsLCBjaGFyICpmbXQsIC4uLikKK3sKKwljaGFyIGRiZl90eHRfYnVmWzY0XTsKKwl2YV9saXN0IGFyZ3M7CisKKwlpZiAobGV2ZWwgPiAoY3RjbV9kYmZbZGJmX25peF0uaWQpLT5sZXZlbCkKKwkJcmV0dXJuOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdnNucHJpbnRmKGRiZl90eHRfYnVmLCBzaXplb2YoZGJmX3R4dF9idWYpLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCWRlYnVnX3RleHRfZXZlbnQoY3RjbV9kYmZbZGJmX25peF0uaWQsIGxldmVsLCBkYmZfdHh0X2J1Zik7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9kYnVnLmggYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZGJ1Zy5oCmluZGV4IGZkZmYzNGYuLjI2OTY2ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9kYnVnLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2RidWcuaApAQCAtMjAsMTYgKzIwLDE3IEBACiAjZWxzZQogICNkZWZpbmUgZG9fZGVidWcgMAogI2VuZGlmCisjaWZkZWYgREVCVUdDQ1cKKyAjZGVmaW5lIGRvX2RlYnVnX2NjdyAxCisgI2RlZmluZSBERUJVR0RBVEEgMQorI2Vsc2UKKyAjZGVmaW5lIGRvX2RlYnVnX2NjdyAwCisjZW5kaWYKICNpZmRlZiBERUJVR0RBVEEKICAjZGVmaW5lIGRvX2RlYnVnX2RhdGEgMQogI2Vsc2UKICAjZGVmaW5lIGRvX2RlYnVnX2RhdGEgMAogI2VuZGlmCi0jaWZkZWYgREVCVUdDQ1cKLSAjZGVmaW5lIGRvX2RlYnVnX2NjdyAxCi0jZWxzZQotICNkZWZpbmUgZG9fZGVidWdfY2N3IDAKLSNlbmRpZgogCiAvKiBkZWZpbmUgZGJmIGRlYnVnIGxldmVscyBzaW1pbGFyIHRvIGtlcm5lbCBtc2cgbGV2ZWxzICovCiAjZGVmaW5lCUNUQ19EQkZfQUxXQVlTCTAJLyogYWx3YXlzIHByaW50IHRoaXMgCQkJKi8KQEAgLTQyLDggKzQzLDYgQEAKICNkZWZpbmUJQ1RDX0RCRl9JTkZPCTUJLyogaW5mb3JtYXRpb25hbAkJCSovCiAjZGVmaW5lCUNUQ19EQkZfREVCVUcJNgkvKiBkZWJ1Zy1sZXZlbCBtZXNzYWdlcwkJCSovCiAKLURFQ0xBUkVfUEVSX0NQVShjaGFyWzI1Nl0sIGN0Y21fZGJmX3R4dF9idWYpOwotCiBlbnVtIGN0Y21fZGJmX25hbWVzIHsKIAlDVENNX0RCRl9TRVRVUCwKIAlDVENNX0RCRl9FUlJPUiwKQEAgLTY3LDYgKzY2LDcgQEAKIAogaW50IGN0Y21fcmVnaXN0ZXJfZGJmX3ZpZXdzKHZvaWQpOwogdm9pZCBjdGNtX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKHZvaWQpOwordm9pZCBjdGNtX2RiZl9sb25ndGV4dChlbnVtIGN0Y21fZGJmX25hbWVzIGRiZl9uaXgsIGludCBsZXZlbCwgY2hhciAqdGV4dCwgLi4uKTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpzdHJ0YWlsKGNvbnN0IGNoYXIgKnMsIGludCBuKQogewpAQCAtNzQsMTIgKzc0LDYgQEAKIAlyZXR1cm4gKGwgPiBuKSA/IHMgKyAobCAtIG4pIDogczsKIH0KIAotLyogc29ydCBvdXQgbGV2ZWxzIGVhcmx5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHNwcmludGZzICovCi1zdGF0aWMgaW5saW5lIGludCBjdGNtX2RiZl9wYXNzZXMoZGVidWdfaW5mb190ICpkYmZfZ3JwLCBpbnQgbGV2ZWwpCi17Ci0JcmV0dXJuIChkYmZfZ3JwLT5sZXZlbCA+PSBsZXZlbCk7Ci19Ci0KICNkZWZpbmUgQ1RDTV9GVU5UQUlMIHN0cnRhaWwoKGNoYXIgKilfX2Z1bmNfXywgMTYpCiAKICNkZWZpbmUgQ1RDTV9EQkZfVEVYVChuYW1lLCBsZXZlbCwgdGV4dCkgXApAQCAtOTQsMTYgKzg4LDcgQEAKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIENUQ01fREJGX1RFWFRfKG5hbWUsIGxldmVsLCB0ZXh0Li4uKSBcCi0JZG8geyBcCi0JCWlmIChjdGNtX2RiZl9wYXNzZXMoY3RjbV9kYmZbQ1RDTV9EQkZfIyNuYW1lXS5pZCwgbGV2ZWwpKSB7IFwKLQkJCWNoYXIgKmN0Y21fZGJmX3R4dF9idWYgPSBcCi0JCQkJCSBnZXRfY3B1X3ZhcihjdGNtX2RiZl90eHRfYnVmKTsgXAotCQkJc3ByaW50ZihjdGNtX2RiZl90eHRfYnVmLCB0ZXh0KTsgXAotCQkJZGVidWdfdGV4dF9ldmVudChjdGNtX2RiZltDVENNX0RCRl8jI25hbWVdLmlkLCBcCi0JCQkJCWxldmVsLCBjdGNtX2RiZl90eHRfYnVmKTsgXAotCQkJcHV0X2NwdV92YXIoY3RjbV9kYmZfdHh0X2J1Zik7IFwKLQkJfSBcCi0JfSB3aGlsZSAoMCkKKwljdGNtX2RiZl9sb25ndGV4dChDVENNX0RCRl8jI25hbWUsIGxldmVsLCB0ZXh0KQogCiAvKgogICogY2F0IDogb25lIG9mIHtzZXR1cCwgbXBjX3NldHVwLCB0cmFjZSwgbXBjX3RyYWNlLCBlcnJvciwgbXBjX2Vycm9yfS4KQEAgLTExMiwxMyArOTcsMTMgQEAKICAqLwogI2RlZmluZSBDVENNX0RCRl9ERVZfTkFNRShjYXQsIGRldiwgdGV4dCkgXAogCWRvIHsgXAotCQlDVENNX0RCRl9URVhUXyhjYXQsIENUQ19EQkZfSU5GTywgIiVzKCVzKSA6ICVzIiwgXAorCQlDVENNX0RCRl9URVhUXyhjYXQsIENUQ19EQkZfSU5GTywgIiVzKCVzKSA6LSAlcyIsIFwKIAkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCB0ZXh0KTsgXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgTVBDX0RCRl9ERVZfTkFNRShjYXQsIGRldiwgdGV4dCkgXAogCWRvIHsgXAotCQlDVENNX0RCRl9URVhUXyhNUENfIyNjYXQsIENUQ19EQkZfSU5GTywgIiVzKCVzKSA6ICVzIiwgXAorCQlDVENNX0RCRl9URVhUXyhNUENfIyNjYXQsIENUQ19EQkZfSU5GTywgIiVzKCVzKSA6PSAlcyIsIFwKIAkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCB0ZXh0KTsgXAogCX0gd2hpbGUgKDApCiAKQEAgLTEzNywxMyArMTIyLDEzIEBACiAgKi8KICNkZWZpbmUgQ1RDTV9EQkZfREVWKGNhdCwgZGV2LCB0ZXh0KSBcCiAJZG8geyBcCi0JCUNUQ01fREJGX1RFWFRfKGNhdCwgQ1RDX0RCRl9JTkZPLCAiJXMoJXApIDogJXMiLCBcCisJCUNUQ01fREJGX1RFWFRfKGNhdCwgQ1RDX0RCRl9JTkZPLCAiJXMoJXApIDotOiAlcyIsIFwKIAkJCUNUQ01fRlVOVEFJTCwgZGV2LCB0ZXh0KTsgXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgTVBDX0RCRl9ERVYoY2F0LCBkZXYsIHRleHQpIFwKIAlkbyB7IFwKLQkJQ1RDTV9EQkZfVEVYVF8oTVBDXyMjY2F0LCBDVENfREJGX0lORk8sICIlcyglcCkgOiAlcyIsIFwKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDXyMjY2F0LCBDVENfREJGX0lORk8sICIlcyglcCkgOj06ICVzIiwgXAogCQkJQ1RDTV9GVU5UQUlMLCBkZXYsIHRleHQpOyBcCiAJfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKaW5kZXggN2U2YmQzOC4uMGI0ZTYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCkBAIC0xOTAsNyArMTkwLDggQEAKIHZvaWQgY3RjbV9jY3dfY2hlY2tfcmMoc3RydWN0IGNoYW5uZWwgKmNoLCBpbnQgcmMsIGNoYXIgKm1zZykKIHsKIAlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKLQkJCSJjY3cgZXJyb3IgJXMgKCVzKTogJTA0eFxuIiwgY2gtPmlkLCBtc2csIHJjKTsKKwkJCSIlcyglcyk6ICVzOiAlMDR4XG4iLAorCQkJCUNUQ01fRlVOVEFJTCwgY2gtPmlkLCBtc2csIHJjKTsKIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAtRUJVU1k6CiAJCWN0Y21fcHJfd2FybigiJXMgKCVzKTogQnVzeSAhXG4iLCBjaC0+aWQsIG1zZyk7CkBAIC0yMTIsNyArMjEzLDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JQ1RDTV9EQkZfVEVYVChUUkFDRSwgMywgX19GVU5DVElPTl9fKTsKKwlDVENNX0RCRl9URVhUKFRSQUNFLCBDVENfREJGX0RFQlVHLCBfX2Z1bmNfXyk7CiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKHEpKSkgewogCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKQEAgLTI1MSw2ICsyNTIsOCBAQAogCXVuc2lnbmVkIGxvbmcgZHVyYXRpb247CiAJc3RydWN0IHRpbWVzcGVjIGRvbmVfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7IC8qIHh0aW1lICovCiAKKwlDVENNX1BSX0RFQlVHKCIlcyglcyk6ICVzXG4iLCBfX2Z1bmNfXywgY2gtPmlkLCBkZXYtPm5hbWUpOworCiAJZHVyYXRpb24gPQogCSAgICAoZG9uZV9zdGFtcC50dl9zZWMgLSBjaC0+cHJvZi5zZW5kX3N0YW1wLnR2X3NlYykgKiAxMDAwMDAwICsKIAkgICAgKGRvbmVfc3RhbXAudHZfbnNlYyAtIGNoLT5wcm9mLnNlbmRfc3RhbXAudHZfbnNlYykgLyAxMDAwOwpAQCAtMjU4LDggKzI2MSw5IEBACiAJCWNoLT5wcm9mLnR4X3RpbWUgPSBkdXJhdGlvbjsKIAogCWlmIChjaC0+aXJiLT5zY3N3LmNtZC5jb3VudCAhPSAwKQotCQljdGNtX3ByX2RlYnVnKCIlczogVFggbm90IGNvbXBsZXRlLCByZW1haW5pbmcgJWQgYnl0ZXNcbiIsCi0JCQkgICAgIGRldi0+bmFtZSwgY2gtPmlyYi0+c2Nzdy5jbWQuY291bnQpOworCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9ERUJVRywKKwkJCSIlcyglcyk6IFRYIG5vdCBjb21wbGV0ZSwgcmVtYWluaW5nICVkIGJ5dGVzIiwKKwkJCSAgICAgQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIGNoLT5pcmItPnNjc3cuY21kLmNvdW50KTsKIAlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmY2gtPmlvX3F1ZXVlKSkpIHsKIAkJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwpAQCAtMzM0LDcgKzMzOCw4IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CiAJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAotCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDYsIF9fRlVOQ1RJT05fXyk7CisJQ1RDTV9QUl9ERUJVRygiJXMoJXMpOiAlc1xuIiwgX19mdW5jX18sIGNoLT5pZCwgZGV2LT5uYW1lKTsKKwogCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKIAlmc21fbmV3c3RhdGUoZmksIENUQ19TVEFURV9UWElETEUpOwogCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWFVQLCBjaC0+bmV0ZGV2KTsKQEAgLTM2MSwxNSArMzY2LDE3IEBACiAKIAlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CiAJaWYgKGxlbiA8IDgpIHsKLQkJY3RjbV9wcl9kZWJ1ZygiJXM6IGdvdCBwYWNrZXQgd2l0aCBsZW5ndGggJWQgPCA4XG4iLAotCQkJICAgICBkZXYtPm5hbWUsIGxlbik7CisJCUNUQ01fREJGX1RFWFRfKFRSQUNFLCBDVENfREJGX05PVElDRSwKKwkJCSIlcyglcyk6IGdvdCBwYWNrZXQgd2l0aCBsZW5ndGggJWQgPCA4XG4iLAorCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSwgbGVuKTsKIAkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJCQlnb3RvIGFnYWluOwogCX0KIAlpZiAobGVuID4gY2gtPm1heF9idWZzaXplKSB7Ci0JCWN0Y21fcHJfZGVidWcoIiVzOiBnb3QgcGFja2V0IHdpdGggbGVuZ3RoICVkID4gJWRcbiIsCi0JCQkgICAgIGRldi0+bmFtZSwgbGVuLCBjaC0+bWF4X2J1ZnNpemUpOworCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9OT1RJQ0UsCisJCQkiJXMoJXMpOiBnb3QgcGFja2V0IHdpdGggbGVuZ3RoICVkID4gJWRcbiIsCisJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIGxlbiwgY2gtPm1heF9idWZzaXplKTsKIAkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJCQlnb3RvIGFnYWluOwpAQCAtMzg4LDggKzM5NSw5IEBACiAJCWJyZWFrOwogCX0KIAlpZiAoKGxlbiA8IGJsb2NrX2xlbikgfHwgKGxlbiA+IGNoZWNrX2xlbikpIHsKLQkJY3RjbV9wcl9kZWJ1ZygiJXM6IGdvdCBibG9jayBsZW5ndGggJWQgIT0gcnggbGVuZ3RoICVkXG4iLAotCQkJICAgICBkZXYtPm5hbWUsIGJsb2NrX2xlbiwgbGVuKTsKKwkJQ1RDTV9EQkZfVEVYVF8oVFJBQ0UsIENUQ19EQkZfTk9USUNFLAorCQkJIiVzKCVzKTogZ290IGJsb2NrIGxlbmd0aCAlZCAhPSByeCBsZW5ndGggJWRcbiIsCisJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIGJsb2NrX2xlbiwgbGVuKTsKIAkJaWYgKGRvX2RlYnVnKQogCQkJY3RjbXBjX2R1bXBfc2tiKHNrYiwgMCk7CiAKQEAgLTQyNSwxNyArNDMzLDIzIEBACiAgKi8KIHN0YXRpYyB2b2lkIGNoeF9maXJzdGlvKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBjaGFubmVsICpjaCA9IGFyZzsKIAlpbnQgcmM7CisJc3RydWN0IGNoYW5uZWwgKmNoID0gYXJnOworCWludCBmc21zdGF0ZSA9IGZzbV9nZXRzdGF0ZShmaSk7CiAKLQlDVENNX0RCRl9URVhUKFRSQUNFLCA2LCBfX0ZVTkNUSU9OX18pOworCUNUQ01fREJGX1RFWFRfKFRSQUNFLCBDVENfREJGX05PVElDRSwKKwkJIiVzKCVzKSA6ICUwMngiLAorCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCwgZnNtc3RhdGUpOwogCi0JaWYgKGZzbV9nZXRzdGF0ZShmaSkgPT0gQ1RDX1NUQVRFX1RYSURMRSkKLQkJY3RjbV9wcl9kZWJ1ZygiJXM6IHJlbW90ZSBzaWRlIGlzc3VlZCBSRUFEPywgaW5pdC5cbiIsIGNoLT5pZCk7CisJY2gtPnNlbnNlX3JjID0gMDsJLyogcmVzZXQgdW5pdCBjaGVjayByZXBvcnQgY29udHJvbCAqLworCWlmIChmc21zdGF0ZSA9PSBDVENfU1RBVEVfVFhJRExFKQorCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9ERUJVRywKKwkJCSIlcyglcyk6IHJlbW90ZSBzaWRlIGlzc3VlZCBSRUFEPywgaW5pdC5cbiIsCisJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQpOwogCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKIAlpZiAoY3RjbV9jaGVja2FsbG9jX2J1ZmZlcihjaCkpCiAJCXJldHVybjsKLQlpZiAoKGZzbV9nZXRzdGF0ZShmaSkgPT0gQ1RDX1NUQVRFX1NFVFVQV0FJVCkgJiYKKwlpZiAoKGZzbXN0YXRlID09IENUQ19TVEFURV9TRVRVUFdBSVQpICYmCiAJICAgIChjaC0+cHJvdG9jb2wgPT0gQ1RDTV9QUk9UT19PUzM5MCkpIHsKIAkJLyogT1MvMzkwIHJlc3AuIHovT1MgKi8KIAkJaWYgKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgewpAQCAtNDUxLDcgKzQ2NSw2IEBACiAJCX0KIAkJcmV0dXJuOwogCX0KLQogCS8qCiAJICogRG9uJ3Qgc2V0dXAgYSB0aW1lciBmb3IgcmVjZWl2aW5nIHRoZSBpbml0aWFsIFJYIGZyYW1lCiAJICogaWYgaW4gY29tcGF0aWJpbGl0eSBtb2RlLCBzaW5jZSBWTSBUQ1AgZGVsYXlzIHRoZSBpbml0aWFsCkBAIC01MDUsMTEgKzUxOCwxMCBAQAogCV9fdTE2IGJ1ZmxlbjsKIAlpbnQgcmM7CiAKLQlDVENNX0RCRl9URVhUKFRSQUNFLCA2LCBfX0ZVTkNUSU9OX18pOwogCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKIAlidWZsZW4gPSAqKChfX3UxNiAqKWNoLT50cmFuc19za2ItPmRhdGEpOwotCWlmIChkb19kZWJ1ZykKLQkJY3RjbV9wcl9kZWJ1ZygiJXM6IEluaXRpYWwgUlggY291bnQgJWRcbiIsIGRldi0+bmFtZSwgYnVmbGVuKTsKKwlDVENNX1BSX0RFQlVHKCIlczogJXM6IEluaXRpYWwgUlggY291bnQgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGJ1Zmxlbik7CiAKIAlpZiAoYnVmbGVuID49IENUQ01fSU5JVElBTF9CTE9DS0xFTikgewogCQlpZiAoY3RjbV9jaGVja2FsbG9jX2J1ZmZlcihjaCkpCkBAIC01MjQsOSArNTM2LDkgQEAKIAkJfSBlbHNlCiAJCQlmc21fZXZlbnQocHJpdi0+ZnNtLCBERVZfRVZFTlRfUlhVUCwgZGV2KTsKIAl9IGVsc2UgewotCQlpZiAoZG9fZGVidWcpCi0JCQljdGNtX3ByX2RlYnVnKCIlczogSW5pdGlhbCBSWCBjb3VudCAlZCBub3QgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLCBidWZsZW4sIENUQ01fSU5JVElBTF9CTE9DS0xFTik7CisJCUNUQ01fUFJfREVCVUcoIiVzOiAlczogSW5pdGlhbCBSWCBjb3VudCAlZCBub3QgJWRcbiIsCisJCQkJX19mdW5jX18sIGRldi0+bmFtZSwKKwkJCQkJYnVmbGVuLCBDVENNX0lOSVRJQUxfQkxPQ0tMRU4pOwogCQljaHhfZmlyc3RpbyhmaSwgZXZlbnQsIGFyZyk7CiAJfQogfQpAQCAtNTQ4LDE0ICs1NjAsMTIgQEAKIAlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CiAJaWYgKElTX01QQyhjaCkpIHsKIAkJdGltZW91dCA9IDE1MDA7Ci0JCWlmIChkb19kZWJ1ZykKLQkJCWN0Y21fcHJfZGVidWcoImN0Y20gZW50ZXI6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLCBjaC0+aWQpOworCQlDVENNX1BSX0RFQlVHKCJlbnRlciAlczogY3A9JWkgY2g9MHglcCBpZD0lc1xuIiwKKwkJCQlfX2Z1bmNfXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjaCwgY2gtPmlkKTsKIAl9CiAJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIHRpbWVvdXQsIENUQ19FVkVOVF9USU1FUiwgY2gpOwogCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1NFVFVQV0FJVCk7Ci0JaWYgKGRvX2RlYnVnX2NjdyAmJiBJU19NUEMoY2gpKQotCQljdGNtcGNfZHVtcGl0KChjaGFyICopJmNoLT5jY3dbNl0sIHNpemVvZihzdHJ1Y3QgY2N3MSkgKiAyKTsKKwlDVENNX0NDV19EVU1QKChjaGFyICopJmNoLT5jY3dbNl0sIHNpemVvZihzdHJ1Y3QgY2N3MSkgKiAyKTsKIAogCWlmIChldmVudCA9PSBDVENfRVZFTlRfVElNRVIpCS8qIG9ubHkgZm9yIHRpbWVyIG5vdCB5ZXQgbG9ja2VkICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7CkBAIC01ODMsMjQgKzU5MywxMiBAQAogICovCiBzdGF0aWMgdm9pZCBjdGNtX2NoeF9zdGFydChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7Ci0JaW50IHJjOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGNoYW5uZWwgKmNoCT0gYXJnOwogCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOworCWludCByYzsKIAotCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDUsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKGNoID09IE5VTEwpIHsKLQkJY3RjbV9wcl93YXJuKCJjaHhfc3RhcnQgY2g9TlVMTFxuIik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGNoLT5uZXRkZXYgPT0gTlVMTCkgewotCQljdGNtX3ByX3dhcm4oImNoeF9zdGFydCBkZXY9TlVMTCwgaWQ9JXNcbiIsIGNoLT5pZCk7Ci0JCXJldHVybjsKLQl9Ci0JZGV2ID0gY2gtPm5ldGRldjsKLQotCWlmIChkb19kZWJ1ZykKLQkJY3RjbV9wcl9kZWJ1ZygiJXM6ICVzIGNoYW5uZWwgc3RhcnRcbiIsIGRldi0+bmFtZSwKKwlDVENNX0RCRl9URVhUXyhTRVRVUCwgQ1RDX0RCRl9JTkZPLCAiJXMoJXMpOiAlcyIsCisJCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCwKIAkJCShDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8gIlJYIiA6ICJUWCIpOwogCiAJaWYgKGNoLT50cmFuc19za2IgIT0gTlVMTCkgewpAQCAtNjE4LDExICs2MTYsMTIgQEAKIAkJY2gtPmNjd1sxXS5jb3VudCA9IDA7CiAJfQogCWlmIChjdGNtX2NoZWNrYWxsb2NfYnVmZmVyKGNoKSkgewotCQljdGNtX3ByX25vdGljZSgiJXM6ICVzIHRyYW5zX3NrYiBhbGxvY2F0aW9uIGRlbGF5ZWQgIgotCQkJCSJ1bnRpbCBmaXJzdCB0cmFuc2ZlclxuIiwgZGV2LT5uYW1lLAorCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9ERUJVRywKKwkJCSIlcyglcyk6ICVzIHRyYW5zX3NrYiBhbGxvYyBkZWxheWVkICIKKwkJCSJ1bnRpbCBmaXJzdCB0cmFuc2ZlciIsCisJCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCwKIAkJCShDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8gIlJYIiA6ICJUWCIpOwogCX0KLQogCWNoLT5jY3dbMF0uY21kX2NvZGUgPSBDQ1dfQ01EX1BSRVBBUkU7CiAJY2gtPmNjd1swXS5mbGFncyA9IENDV19GTEFHX1NMSSB8IENDV19GTEFHX0NDOwogCWNoLT5jY3dbMF0uY291bnQgPSAwOwpAQCAtNjYxLDcgKzY2MCw2IEBACiAJaW50IHJjOwogCWludCBvbGRzdGF0ZTsKIAotCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDIsIF9fRlVOQ1RJT05fXyk7CiAJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwogCWlmIChJU19NUEMoY2gpKQogCQlmc21fZGVsdGltZXIoJmNoLT5zd2VlcF90aW1lcik7CkBAIC02ODQsNyArNjgyLDcgQEAKIAkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwogCQlpZiAoZXZlbnQgIT0gQ1RDX0VWRU5UX1NUT1ApIHsKIAkJCWZzbV9uZXdzdGF0ZShmaSwgb2xkc3RhdGUpOwotCQkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLCAoY2hhciAqKV9fRlVOQ1RJT05fXyk7CisJCQljdGNtX2Njd19jaGVja19yYyhjaCwgcmMsIChjaGFyICopX19mdW5jX18pOwogCQl9CiAJfQogfQpAQCAtNzAzLDcgKzcwMSw5IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CiAJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAotCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDMsIF9fRlVOQ1RJT05fXyk7CisJQ1RDTV9EQkZfVEVYVF8oU0VUVVAsIENUQ19EQkZfTk9USUNFLAorCQkJIiVzKCVzKTogJXNbJWRdXG4iLAorCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIGNoLT5pZCwgc3RhdGUpOwogCiAJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwogCWlmIChJU19NUEMoY2gpKQpAQCAtNzQzLDcgKzc0Myw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGN0Y21fY2h4X3N0b3BwZWQoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7Ci0JQ1RDTV9EQkZfVEVYVChUUkFDRSwgMywgX19GVU5DVElPTl9fKTsKIAljdGNtX2NoeF9jbGVhbnVwKGZpLCBDVENfU1RBVEVfU1RPUFBFRCwgYXJnKTsKIH0KIApAQCAtNzcxLDcgKzc3MCw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGN0Y21fY2h4X2ZhaWwoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7Ci0JQ1RDTV9EQkZfVEVYVChUUkFDRSwgMywgX19GVU5DVElPTl9fKTsKIAljdGNtX2NoeF9jbGVhbnVwKGZpLCBDVENfU1RBVEVfTk9UT1AsIGFyZyk7CiB9CiAKQEAgLTgwOSw4ICs4MDcsOCBAQAogCX0KIAogCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0NSSVQsCi0JCSIlcyA6ICVzIGVycm9yIGR1cmluZyAlcyBjaGFubmVsIHNldHVwIHN0YXRlPSVzXG4iLAotCQlkZXYtPm5hbWUsIGN0Y19jaF9ldmVudF9uYW1lc1tldmVudF0sCisJCSIlcyglcykgOiAlcyBlcnJvciBkdXJpbmcgJXMgY2hhbm5lbCBzZXR1cCBzdGF0ZT0lc1xuIiwKKwkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIGN0Y19jaF9ldmVudF9uYW1lc1tldmVudF0sCiAJCShDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8gIlJYIiA6ICJUWCIsCiAJCWZzbV9nZXRzdGF0ZV9zdHIoZmkpKTsKIApAQCAtODM4LDEwICs4MzYsMTIgQEAKIAlpbnQgb2xkc3RhdGU7CiAJaW50IHJjOwogCi0JQ1RDTV9EQkZfVEVYVChUUkFDRSwgQ1RDX0RCRl9OT1RJQ0UsIF9fRlVOQ1RJT05fXyk7CisJQ1RDTV9EQkZfVEVYVF8oVFJBQ0UsIENUQ19EQkZfTk9USUNFLAorCQkiJXM6ICVzWyVkXSBvZiAlc1xuIiwKKwkJCUNUQ01fRlVOVEFJTCwgY2gtPmlkLCBldmVudCwgZGV2LT5uYW1lKTsKKwogCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKLQljdGNtX3ByX2RlYnVnKCIlczogJXMgY2hhbm5lbCByZXN0YXJ0XG4iLCBkZXYtPm5hbWUsCi0JCSAgICAgKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgPyAiUlgiIDogIlRYIik7CisKIAlmc21fYWRkdGltZXIoJmNoLT50aW1lciwgQ1RDTV9USU1FXzVfU0VDLCBDVENfRVZFTlRfVElNRVIsIGNoKTsKIAlvbGRzdGF0ZSA9IGZzbV9nZXRzdGF0ZShmaSk7CiAJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfU1RBUlRXQUlUKTsKQEAgLTg3NiwxMyArODc2LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CiAJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAotCUNUQ01fREJGX1RFWFQoU0VUVVAsIDMsIF9fRlVOQ1RJT05fXyk7CiAJaWYgKGV2ZW50ID09IENUQ19FVkVOVF9USU1FUikgewogCQlpZiAoIUlTX01QQ0RFVihkZXYpKQogCQkJLyogVE9ETyA6IGNoZWNrIGlmIE1QQyBkZWxldGVzIHRpbWVyIHNvbWV3aGVyZSAqLwogCQkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCQljdGNtX3ByX2RlYnVnKCIlczogVGltZW91dCBkdXJpbmcgUlggaW5pdCBoYW5kc2hha2VcbiIsCi0JCQkJZGV2LT5uYW1lKTsKIAkJaWYgKGNoLT5yZXRyeSsrIDwgMykKIAkJCWN0Y21fY2h4X3Jlc3RhcnQoZmksIGV2ZW50LCBhcmcpOwogCQllbHNlIHsKQEAgLTkwNyw5ICs5MDQsMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2gtPm5ldGRldjsKIAlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCi0JQ1RDTV9EQkZfVEVYVChTRVRVUCwgMywgX19GVU5DVElPTl9fKTsKKwlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlcyglcyk6IFJYICVzIGJ1c3ksIGluaXQuIGZhaWwiLAorCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCBjaC0+aWQpOwogCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1JYRVJSKTsKLQljdGNtX3ByX3dhcm4oIiVzOiBSWCBidXN5LiBJbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJZnNtX2V2ZW50KHByaXYtPmZzbSwgREVWX0VWRU5UX1JYRE9XTiwgZGV2KTsKIH0KIApAQCAtOTI3LDExICs5MjUsMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2gtPm5ldGRldjsKIAlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCi0JQ1RDTV9EQkZfREVWX05BTUUoVFJBQ0UsIGRldiwgIkdvdCByZW1vdGUgZGlzY29ubmVjdCwgcmUtaW5pdGlhbGl6aW5nIik7CisJQ1RDTV9EQkZfVEVYVF8oVFJBQ0UsIENUQ19EQkZfTk9USUNFLAorCQkJIiVzOiAlczogcmVtb3RlIGRpc2Nvbm5lY3QgLSByZS1pbml0IC4uLiIsCisJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOwogCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoIiVzOiBHb3QgcmVtb3RlIGRpc2Nvbm5lY3QsICIKLQkJCQkicmUtaW5pdGlhbGl6aW5nIC4uLlxuIiwgZGV2LT5uYW1lKTsKIAkvKgogCSAqIE5vdGlmeSBkZXZpY2Ugc3RhdGVtYWNoaW5lCiAJICovCkBAIC05NjEsOCArOTU4LDYgQEAKIAogCWlmIChldmVudCA9PSBDVENfRVZFTlRfVElNRVIpIHsKIAkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCQlDVENNX0RCRl9ERVZfTkFNRShFUlJPUiwgZGV2LAotCQkJCSJUaW1lb3V0IGR1cmluZyBUWCBpbml0IGhhbmRzaGFrZSIpOwogCQlpZiAoY2gtPnJldHJ5KysgPCAzKQogCQkJY3RjbV9jaHhfcmVzdGFydChmaSwgZXZlbnQsIGFyZyk7CiAJCWVsc2UgewpAQCAtOTcxLDkgKzk2Niw4IEBACiAJCX0KIAl9IGVsc2UgewogCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKLQkJCSIlcyA6ICVzIGVycm9yIGR1cmluZyBjaGFubmVsIHNldHVwIHN0YXRlPSVzIiwKLQkJCWRldi0+bmFtZSwgY3RjX2NoX2V2ZW50X25hbWVzW2V2ZW50XSwKLQkJCWZzbV9nZXRzdGF0ZV9zdHIoZmkpKTsKKwkJCSIlcyglcyk6ICVzIGluICVzIiwgQ1RDTV9GVU5UQUlMLCBjaC0+aWQsCisJCQljdGNfY2hfZXZlbnRfbmFtZXNbZXZlbnRdLCBmc21fZ2V0c3RhdGVfc3RyKGZpKSk7CiAKIAkJY3RjbV9wcl93YXJuKCIlczogRXJyb3IgZHVyaW5nIFRYIGluaXQgaGFuZHNoYWtlXG4iLCBkZXYtPm5hbWUpOwogCX0KQEAgLTk5MywxNSArOTg3LDE1IEBACiAJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JaWYgKGRvX2RlYnVnKQotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gsIGNoLT5pZCk7CisJQ1RDTV9QUl9ERUJVRygiRW50ZXI6ICVzOiBjcD0laSBjaD0weCVwIGlkPSVzXG4iLAorCQkJX19mdW5jX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gsIGNoLT5pZCk7CiAKIAlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CiAJaWYgKGNoLT5yZXRyeSsrID4gMykgewogCQlzdHJ1Y3QgbXBjX2dyb3VwICpncHRyID0gcHJpdi0+bXBjZzsKLQkJY3RjbV9wcl9kZWJ1ZygiJXM6IFRYIHJldHJ5IGZhaWxlZCwgcmVzdGFydGluZyBjaGFubmVsXG4iLAotCQkJICAgICBkZXYtPm5hbWUpOworCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9JTkZPLAorCQkJCSIlczogJXM6IHJldHJpZXMgZXhjZWVkZWQiLAorCQkJCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCk7CiAJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWERPV04sIGRldik7CiAJCS8qIGNhbGwgcmVzdGFydCBpZiBub3QgTVBDIG9yIGlmIE1QQyBhbmQgbXBjZyBmc20gaXMgcmVhZHkuCiAJCQl1c2UgZ3B0ciBhcyBtcGMgaW5kaWNhdG9yICovCkBAIC0xMDEwLDcgKzEwMDQsOSBAQAogCQkJCWdvdG8gZG9uZTsKIAl9CiAKLQljdGNtX3ByX2RlYnVnKCIlczogVFggcmV0cnkgJWRcbiIsIGRldi0+bmFtZSwgY2gtPnJldHJ5KTsKKwlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9ERUJVRywKKwkJCSIlcyA6ICVzOiByZXRyeSAlZCIsCisJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQsIGNoLT5yZXRyeSk7CiAJc2tiID0gc2tiX3BlZWsoJmNoLT5pb19xdWV1ZSk7CiAJaWYgKHNrYikgewogCQlpbnQgcmMgPSAwOwpAQCAtMTAxOCw4ICsxMDE0LDkgQEAKIAkJY2xlYXJfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbNF0pOwogCQljaC0+Y2N3WzRdLmNvdW50ID0gc2tiLT5sZW47CiAJCWlmIChzZXRfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbNF0sIHNrYi0+ZGF0YSkpIHsKLQkJCWN0Y21fcHJfZGVidWcoIiVzOiBJREFMIGFsbG9jIGZhaWxlZCwgY2hhbiByZXN0YXJ0XG4iLAotCQkJCQkJZGV2LT5uYW1lKTsKKwkJCUNUQ01fREJGX1RFWFRfKFRSQUNFLCBDVENfREJGX0lORk8sCisJCQkJIiVzOiAlczogSURBTCBhbGxvYyBmYWlsZWQiLAorCQkJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQpOwogCQkJZnNtX2V2ZW50KHByaXYtPmZzbSwgREVWX0VWRU5UX1RYRE9XTiwgZGV2KTsKIAkJCWN0Y21fY2h4X3Jlc3RhcnQoZmksIGV2ZW50LCBhcmcpOwogCQkJCWdvdG8gZG9uZTsKQEAgLTEwNjEsMjIgKzEwNTgsMjEgQEAKIAlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CiAJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgcmQgPSBDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpOwogCi0JQ1RDTV9EQkZfVEVYVChUUkFDRSwgMywgX19GVU5DVElPTl9fKTsKIAlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7Ci0JY3RjbV9wcl93YXJuKCIlcyAlcyA6IHVucmVjb3ZlcmFibGUgY2hhbm5lbCBlcnJvclxuIiwKLQkJCUNUQ19EUklWRVJfTkFNRSwgZGV2LT5uYW1lKTsKKwlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJIiVzOiAlczogJXMgdW5yZWNvdmVyYWJsZSBjaGFubmVsIGVycm9yIiwKKwkJCUNUQ01fRlVOVEFJTCwgY2gtPmlkLCByZCA9PSBSRUFEID8gIlJYIiA6ICJUWCIpOworCiAJaWYgKElTX01QQyhjaCkpIHsKIAkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAl9Ci0KLQlpZiAoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSB7Ci0JCWN0Y21fcHJfZGVidWcoIiVzOiBSWCBJL08gZXJyb3JcbiIsIGRldi0+bmFtZSk7CisJaWYgKHJkID09IFJFQUQpIHsKIAkJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfUlhFUlIpOwogCQlmc21fZXZlbnQocHJpdi0+ZnNtLCBERVZfRVZFTlRfUlhET1dOLCBkZXYpOwogCX0gZWxzZSB7Ci0JCWN0Y21fcHJfZGVidWcoIiVzOiBUWCBJL08gZXJyb3JcbiIsIGRldi0+bmFtZSk7CiAJCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1RYRVJSKTsKIAkJZnNtX2V2ZW50KHByaXYtPmZzbSwgREVWX0VWRU5UX1RYRE9XTiwgZGV2KTsKIAl9CkBAIC0xMjE2LDI3ICsxMjEyLDI3IEBACiAJc3RydWN0IHNrX2J1ZmYJCSpza2I7CiAJaW50CQlmaXJzdCA9IDE7CiAJaW50CQlpOwotCXN0cnVjdCB0aW1lc3BlYyBkb25lX3N0YW1wOwogCV9fdTMyCQlkYXRhX3NwYWNlOwogCXVuc2lnbmVkIGxvbmcJZHVyYXRpb247CiAJc3RydWN0IHNrX2J1ZmYJKnBlZWtza2I7CiAJaW50CQlyYzsKIAlzdHJ1Y3QgdGhfaGVhZGVyICpoZWFkZXI7CiAJc3RydWN0IHBkdQkqcF9oZWFkZXI7CisJc3RydWN0IHRpbWVzcGVjIGRvbmVfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7IC8qIHh0aW1lICovCiAKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoIiVzIGNwOiVpIGVudGVyOiAgJXMoKVxuIiwKLQkJCWRldi0+bmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX0ZVTkNUSU9OX18pOworCUNUQ01fUFJfREVCVUcoIkVudGVyICVzOiAlcyBjcDolaVxuIiwKKwkJCV9fZnVuY19fLCBkZXYtPm5hbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQlkb25lX3N0YW1wID0gY3VycmVudF9rZXJuZWxfdGltZSgpOyAvKiB4dGltZSAqLwotCWR1cmF0aW9uID0gKGRvbmVfc3RhbXAudHZfc2VjIC0gY2gtPnByb2Yuc2VuZF9zdGFtcC50dl9zZWMpICogMTAwMDAwMAotCQkrIChkb25lX3N0YW1wLnR2X25zZWMgLSBjaC0+cHJvZi5zZW5kX3N0YW1wLnR2X25zZWMpIC8gMTAwMDsKKwlkdXJhdGlvbiA9CisJCShkb25lX3N0YW1wLnR2X3NlYyAtIGNoLT5wcm9mLnNlbmRfc3RhbXAudHZfc2VjKSAqIDEwMDAwMDAgKworCQkoZG9uZV9zdGFtcC50dl9uc2VjIC0gY2gtPnByb2Yuc2VuZF9zdGFtcC50dl9uc2VjKSAvIDEwMDA7CiAJaWYgKGR1cmF0aW9uID4gY2gtPnByb2YudHhfdGltZSkKIAkJY2gtPnByb2YudHhfdGltZSA9IGR1cmF0aW9uOwogCiAJaWYgKGNoLT5pcmItPnNjc3cuY21kLmNvdW50ICE9IDApCi0JCWN0Y21fcHJfZGVidWcoIiVzOiBUWCBub3QgY29tcGxldGUsIHJlbWFpbmluZyAlZCBieXRlc1xuIiwKLQkJCQlkZXYtPm5hbWUsIGNoLT5pcmItPnNjc3cuY21kLmNvdW50KTsKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX1RSQUNFLCBDVENfREJGX0RFQlVHLAorCQkJIiVzKCVzKTogVFggbm90IGNvbXBsZXRlLCByZW1haW5pbmcgJWQgYnl0ZXMiLAorCQkJICAgICBDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSwgY2gtPmlyYi0+c2Nzdy5jbWQuY291bnQpOwogCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjaC0+aW9fcXVldWUpKSkgewogCQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC0xMjUwLDcgKzEyNDYsNiBAQAogCX0KIAlzcGluX2xvY2soJmNoLT5jb2xsZWN0X2xvY2spOwogCWNsZWFyX25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzRdKTsKLQogCWlmICgoY2gtPmNvbGxlY3RfbGVuIDw9IDApIHx8IChncnAtPmluX3N3ZWVwICE9IDApKSB7CiAJCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKIAkJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfVFhJRExFKTsKQEAgLTEyNjksMTcgKzEyNjQsMTMgQEAKIAlpZiAoY2gtPnByb2YubWF4Y3F1ZXVlIDwgc2tiX3F1ZXVlX2xlbigmY2gtPmNvbGxlY3RfcXVldWUpKQogCQljaC0+cHJvZi5tYXhjcXVldWUgPSBza2JfcXVldWVfbGVuKCZjaC0+Y29sbGVjdF9xdWV1ZSk7CiAJaSA9IDA7Ci0KLQlpZiAoZG9fZGVidWdfZGF0YSkKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIGJ1aWxkaW5nICIKLQkJCSAgICAgICAidHJhbnNfc2tiIGZyb20gY29sbGVjdF9xIFxuIiwgX19GVU5DVElPTl9fKTsKLQorCXBfaGVhZGVyID0gTlVMTDsKIAlkYXRhX3NwYWNlID0gZ3JwLT5ncm91cF9tYXhfYnVmbGVuIC0gVEhfSEVBREVSX0xFTkdUSDsKIAotCWlmIChkb19kZWJ1Z19kYXRhKQotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgYnVpbGRpbmcgdHJhbnNfc2tiIGZyb20gY29sbGVjdF9xIgotCQkgICAgICAgIiBkYXRhX3NwYWNlOiUwNHhcbiIsIF9fRlVOQ1RJT05fXywgZGF0YV9zcGFjZSk7Ci0JcF9oZWFkZXIgPSBOVUxMOworCUNUQ01fUFJfREJHREFUQSgiJXM6IGJ1aWxkaW5nIHRyYW5zX3NrYiBmcm9tIGNvbGxlY3RfcSIKKwkJICAgICAgICIgZGF0YV9zcGFjZTolMDR4XG4iLAorCQkgICAgICAgX19mdW5jX18sIGRhdGFfc3BhY2UpOworCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmY2gtPmNvbGxlY3RfcXVldWUpKSkgewogCQltZW1jcHkoc2tiX3B1dChjaC0+dHJhbnNfc2tiLCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCQlwX2hlYWRlciA9IChzdHJ1Y3QgcGR1ICopCkBAIC0xMjkwLDE1ICsxMjgxLDEyIEBACiAJCWVsc2UKIAkJCXBfaGVhZGVyLT5wZHVfZmxhZyB8PSAweDIwOwogCi0JCWlmIChkb19kZWJ1Z19kYXRhKSB7Ci0JCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCl0cmFuc19za2IgbGVuOiUwNHggXG4iLAotCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoLT50cmFuc19za2ItPmxlbik7Ci0JCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgcGR1IGhlYWRlciBhbmQgZGF0YSIKLQkJCQkgICAgICAgIiBmb3IgdXAgdG8gMzIgYnl0ZXMgc2VudCB0byB2dGFtXG4iLAotCQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwotCQkJY3RjbXBjX2R1bXBpdCgoY2hhciAqKXBfaGVhZGVyLAotCQkJCQkJbWluX3QoaW50LCBza2ItPmxlbiwgMzIpKTsKLQkJfQorCQlDVENNX1BSX0RCR0RBVEEoIiVzOiB0cmFuc19za2IgbGVuOiUwNHggXG4iLAorCQkJCV9fZnVuY19fLCBjaC0+dHJhbnNfc2tiLT5sZW4pOworCQlDVENNX1BSX0RCR0RBVEEoIiVzOiBwZHUgaGVhZGVyIGFuZCBkYXRhIGZvciB1cCIKKwkJCQkiIHRvIDMyIGJ5dGVzIHNlbnQgdG8gdnRhbVxuIiwgX19mdW5jX18pOworCQlDVENNX0QzX0RVTVAoKGNoYXIgKilwX2hlYWRlciwgbWluX3QoaW50LCBza2ItPmxlbiwgMzIpKTsKKwogCQljaC0+Y29sbGVjdF9sZW4gLT0gc2tiLT5sZW47CiAJCWRhdGFfc3BhY2UgLT0gc2tiLT5sZW47CiAJCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKQEAgLTEzMTQsNDYgKzEzMDIsMzggQEAKIAlpZiAocF9oZWFkZXIpCiAJCXBfaGVhZGVyLT5wZHVfZmxhZyB8PSBQRFVfTEFTVDsJLypTYXkgaXQncyB0aGUgbGFzdCBvbmUqLwogCWhlYWRlciA9IGt6YWxsb2MoVEhfSEVBREVSX0xFTkdUSCwgZ2ZwX3R5cGUoKSk7Ci0KIAlpZiAoIWhlYWRlcikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdGNtcGM6IE9VVCBPRiBNRU1PUlkgSU4gJXMoKSIKLQkJICAgICAgICI6IERhdGEgTG9zdCBcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKIAkJZnNtX2V2ZW50KHByaXYtPm1wY2ctPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwotCQlnb3RvIGRvbmU7CisJCQkJZ290byBkb25lOwogCX0KLQogCWhlYWRlci0+dGhfY2hfZmxhZyA9IFRIX0hBU19QRFU7ICAvKiBOb3JtYWwgZGF0YSAqLwogCWNoLT50aF9zZXFfbnVtKys7CiAJaGVhZGVyLT50aF9zZXFfbnVtID0gY2gtPnRoX3NlcV9udW07CiAKLQlpZiAoZG9fZGVidWdfZGF0YSkKLQkJY3RjbV9wcl9kZWJ1ZygiJXM6IFRvVlRBTV90aF9zZXE9ICUwOHhcbiIgLAotCQkJCQlfX0ZVTkNUSU9OX18sIGNoLT50aF9zZXFfbnVtKTsKKwlDVENNX1BSX0RCR0RBVEEoIiVzOiBUb1ZUQU1fdGhfc2VxPSAlMDh4XG4iICwKKwkJCQkJX19mdW5jX18sIGNoLT50aF9zZXFfbnVtKTsKIAogCW1lbWNweShza2JfcHVzaChjaC0+dHJhbnNfc2tiLCBUSF9IRUFERVJfTEVOR1RIKSwgaGVhZGVyLAogCQlUSF9IRUFERVJfTEVOR1RIKTsJLyogcHV0IHRoZSBUSCBvbiB0aGUgcGFja2V0ICovCiAKIAlrZnJlZShoZWFkZXIpOwogCi0JaWYgKGRvX2RlYnVnX2RhdGEpIHsKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpdHJhbnNfc2tiIGxlbjolMDR4IFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgY2gtPnRyYW5zX3NrYi0+bGVuKTsKLQotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgdXAtdG8tNTAgYnl0ZXMgb2YgdHJhbnNfc2tiICIKLQkJCSJkYXRhIHRvIHZ0YW0gZnJvbSBjb2xsZWN0X3FcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCWN0Y21wY19kdW1waXQoKGNoYXIgKiljaC0+dHJhbnNfc2tiLT5kYXRhLAorCUNUQ01fUFJfREJHREFUQSgiJXM6IHRyYW5zX3NrYiBsZW46JTA0eCBcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgY2gtPnRyYW5zX3NrYi0+bGVuKTsKKwlDVENNX1BSX0RCR0RBVEEoIiVzOiB1cC10by01MCBieXRlcyBvZiB0cmFuc19za2IgIgorCQkJImRhdGEgdG8gdnRhbSBmcm9tIGNvbGxlY3RfcVxuIiwgX19mdW5jX18pOworCUNUQ01fRDNfRFVNUCgoY2hhciAqKWNoLT50cmFuc19za2ItPmRhdGEsCiAJCQkJbWluX3QoaW50LCBjaC0+dHJhbnNfc2tiLT5sZW4sIDUwKSk7Ci0JfQogCiAJc3Bpbl91bmxvY2soJmNoLT5jb2xsZWN0X2xvY2spOwogCWNsZWFyX25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzFdKTsKIAlpZiAoc2V0X25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzFdLCBjaC0+dHJhbnNfc2tiLT5kYXRhKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShjaC0+dHJhbnNfc2tiKTsKIAkJY2gtPnRyYW5zX3NrYiA9IE5VTEw7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjdGNtcGM6ICVzKClDQ1cgZmFpbHVyZSAtIGRhdGEgbG9zdFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCUNUQ01fREJGX1RFWFRfKE1QQ19UUkFDRSwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlczogJXM6IElEQUwgYWxsb2MgZmFpbGVkIiwKKwkJCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCk7CiAJCWZzbV9ldmVudChwcml2LT5tcGNnLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKIAkJcmV0dXJuOwogCX0KQEAgLTEzNzMsNyArMTM1Myw2IEBACiAJfQogZG9uZToKIAljdGNtX2NsZWFyX2J1c3koZGV2KTsKLQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDogJXMgICVzKClcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKIAlyZXR1cm47CiB9CiAKQEAgLTEzOTMsMjYgKzEzNzIsMjUgQEAKIAlzdHJ1Y3QgbXBjX2dyb3VwCSpncnAgPSBwcml2LT5tcGNnOwogCXN0cnVjdCBza19idWZmCQkqc2tiID0gY2gtPnRyYW5zX3NrYjsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKm5ld19za2I7Ci0JdW5zaWduZWQgbG9uZwlzYXZlZmxhZ3MgPSAwOwkvKiBhdm9pZHMgY29tcGlsZXIgd2FybmluZyAqLworCXVuc2lnbmVkIGxvbmcJCXNhdmVmbGFncyA9IDA7CS8qIGF2b2lkcyBjb21waWxlciB3YXJuaW5nICovCiAJaW50IGxlbgk9IGNoLT5tYXhfYnVmc2l6ZSAtIGNoLT5pcmItPnNjc3cuY21kLmNvdW50OwogCi0JaWYgKGRvX2RlYnVnX2RhdGEpIHsKLQkJQ1RDTV9EQkZfVEVYVF8oVFJBQ0UsIENUQ19EQkZfREVCVUcsICJtcGNfY2hfcnggJXMgY3A6JWkgJXNcbiIsCi0JCQkJZGV2LT5uYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLT5pZCk7Ci0JCUNUQ01fREJGX1RFWFRfKFRSQUNFLCBDVENfREJGX0RFQlVHLCAibXBjX2NoX3J4OiBtYXhidWY6ICUwNHggIgotCQkJCSJsZW46ICUwNHhcbiIsIGNoLT5tYXhfYnVmc2l6ZSwgbGVuKTsKLQl9CisJQ1RDTV9QUl9ERUJVRygiJXM6ICVzOiBjcDolaSAlcyBtYXhidWYgOiAlMDR4LCBsZW46ICUwNHhcbiIsCisJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJCWNoLT5pZCwgY2gtPm1heF9idWZzaXplLCBsZW4pOwogCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKIAogCWlmIChza2IgPT0gTlVMTCkgewotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDogICVzKCkgVFJBTlNfU0tCID0gTlVMTCBcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fKTsKLQkJCQkJZ290byBhZ2FpbjsKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJIiVzKCVzKTogVFJBTlNfU0tCID0gTlVMTCIsCisJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOworCQkJZ290byBhZ2FpbjsKIAl9CiAKIAlpZiAobGVuIDwgVEhfSEVBREVSX0xFTkdUSCkgewotCQljdGNtX3ByX2luZm8oIiVzOiBnb3QgcGFja2V0IHdpdGggaW52YWxpZCBsZW5ndGggJWRcbiIsCi0JCQkJZGV2LT5uYW1lLCBsZW4pOworCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkJIiVzKCVzKTogcGFja2V0IGxlbmd0aCAlZCB0byBzaG9ydCIsCisJCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCBsZW4pOwogCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAl9IGVsc2UgewpAQCAtMTQyMiwxMSArMTQwMCw5IEBACiAJCW5ld19za2IgPSBfX2Rldl9hbGxvY19za2IoY2gtPm1heF9idWZzaXplLCBHRlBfQVRPTUlDKTsKIAogCQlpZiAobmV3X3NrYiA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJjdGNtcGM6JXMoKSBORVdfU0tCID0gTlVMTFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbXBjOiAlcygpIE1FTU9SWSBBTExPQyBGQUlMRUQiCi0JCQkgICAgICAgIiAtIERBVEEgTE9TVCAtIE1QQyBGQUlMRURcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkiJXMoJWQpOiBza2IgYWxsb2NhdGlvbiBmYWlsZWQiLAorCQkJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOwogCQkJZnNtX2V2ZW50KHByaXYtPm1wY2ctPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCQkJCQlnb3RvIGFnYWluOwogCQl9CkBAIC0xNDc5LDkgKzE0NTUsOCBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0IDogJXMgJXMoKTogY2g9MHglcCBpZD0lc1xuIiwKLQkJCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXywgY2gsIGNoLT5pZCk7CisJQ1RDTV9QUl9ERUJVRygiRXhpdCAlczogJXMsIGNoPTB4JXAsIGlkPSVzXG4iLAorCQkJX19mdW5jX18sIGRldi0+bmFtZSwgY2gsIGNoLT5pZCk7CiAKIH0KIApAQCAtMTQ5NywxNSArMTQ3MiwxNiBAQAogCXN0cnVjdCBjaGFubmVsCQkqY2ggPSBhcmc7CiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldiA9IGNoLT5uZXRkZXY7CiAJc3RydWN0IGN0Y21fcHJpdgkqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwCSpncHRyID0gcHJpdi0+bXBjZzsKIAotCWlmIChkb19kZWJ1ZykgewotCQlzdHJ1Y3QgbXBjX2dyb3VwICpncHRyID0gcHJpdi0+bXBjZzsKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcygpOiBjaD0weCVwIGlkPSVzXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgY2gsIGNoLT5pZCk7Ci0JCWN0Y21fcHJfZGVidWcoIiVzKCkgJXMgY2hzdGF0ZTolaSBncnBzdGF0ZTolaSBjaHByb3RvY29sOiVpXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgY2gtPmlkLCBmc21fZ2V0c3RhdGUoZmkpLAotCQkJCWZzbV9nZXRzdGF0ZShncHRyLT5mc20pLCBjaC0+cHJvdG9jb2wpOwotCX0KKwlDVENNX1BSX0RFQlVHKCJFbnRlciAlczogaWQ9JXMsIGNoPTB4JXBcbiIsCisJCQkJX19mdW5jX18sIGNoLT5pZCwgY2gpOworCisJQ1RDTV9EQkZfVEVYVF8oTVBDX1RSQUNFLCBDVENfREJGX0lORk8sCisJCQkiJXM6ICVzOiBjaHN0YXRlOiVpLCBncnBzdGF0ZTolaSwgcHJvdDolaVxuIiwKKwkJCUNUQ01fRlVOVEFJTCwgY2gtPmlkLCBmc21fZ2V0c3RhdGUoZmkpLAorCQkJZnNtX2dldHN0YXRlKGdwdHItPmZzbSksIGNoLT5wcm90b2NvbCk7CisKIAlpZiAoZnNtX2dldHN0YXRlKGZpKSA9PSBDVENfU1RBVEVfVFhJRExFKQogCQlNUENfREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsICJyZW1vdGUgc2lkZSBpc3N1ZWQgUkVBRD8gIik7CiAKQEAgLTE1MzEsOSArMTUwNyw4IEBACiAJCSAgICAgPyBDVENfU1RBVEVfUlhJTklUIDogQ1RDX1NUQVRFX1RYSU5JVCk7CiAKIGRvbmU6Ci0JaWYgKGRvX2RlYnVnKQotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdCA6ICVzKCk6IGNoPTB4JXAgaWQ9JXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGNoLCBjaC0+aWQpOworCUNUQ01fUFJfREVCVUcoIkV4aXQgJXM6IGlkPSVzLCBjaD0weCVwXG4iLAorCQkJCV9fZnVuY19fLCBjaC0+aWQsIGNoKTsKIAlyZXR1cm47CiB9CiAKQEAgLTE1NTYsMTIgKzE1MzEsOSBAQAogCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgKi8KIAogCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKLQljdGNtX3ByX2RlYnVnKCIlcyBjcDolaSBlbnRlcjogICVzKClcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19GVU5DVElPTl9fKTsKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoIiVzKCkgJXMgY2hzdGF0ZTolaSBncnBzdGF0ZTolaVxuIiwKLQkJCV9fRlVOQ1RJT05fXywgY2gtPmlkLAotCQkJZnNtX2dldHN0YXRlKGZpKSwgZnNtX2dldHN0YXRlKGdycC0+ZnNtKSk7CisJQ1RDTV9QUl9ERUJVRygiJXM6ICVzOiAlczogY3A6JWksIGNoc3RhdGU6JWkgZ3Jwc3RhdGU6JWlcbiIsCisJCQlfX2Z1bmNfXywgY2gtPmlkLCBkZXYtPm5hbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSwKKwkJCQlmc21fZ2V0c3RhdGUoZmkpLCBmc21fZ2V0c3RhdGUoZ3JwLT5mc20pKTsKIAogCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1JYSURMRSk7CiAJLyogWElEIHByb2Nlc3NpbmcgY29tcGxldGUgKi8KQEAgLTE1NzUsOSArMTU0Nyw3IEBACiAJCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoY2gtPnRyYW5zX3NrYik7CiAJCWNoLT50cmFuc19za2ItPmxlbiA9IDA7CiAJCWNoLT5jY3dbMV0uY291bnQgPSBjaC0+bWF4X2J1ZnNpemU7Ci0JCWlmIChkb19kZWJ1Z19jY3cpCi0JCQljdGNtcGNfZHVtcGl0KChjaGFyICopJmNoLT5jY3dbMF0sCi0JCQkJCQlzaXplb2Yoc3RydWN0IGNjdzEpICogMyk7CisJCUNUQ01fQ0NXX0RVTVAoKGNoYXIgKikmY2gtPmNjd1swXSwgc2l6ZW9mKHN0cnVjdCBjY3cxKSAqIDMpOwogCQlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1NUQVJUKQogCQkJLyogc2VlIHJlbWFyayBhYm91dCBjb25kaXRpb25hbCBsb2NraW5nICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwpAQCAtMTU5OCw5ICsxNTY4LDYgQEAKIAogCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9SWFVQLCBkZXYpOwogZG9uZToKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0OiAlcyAgJXMoKVxuIiwKLQkJCQkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybjsKIH0KIApAQCAtMTYxNiwxMyArMTU4Myw5IEBACiAJc3RydWN0IGN0Y21fcHJpdiAgKnByaXYgICA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgbXBjX2dyb3VwICAqZ3JwID0gcHJpdi0+bXBjZzsKIAotCWlmIChkb19kZWJ1ZykgewotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXMiCi0JCQkJIkdycFN0YXRlOiVzIENoU3RhdGU6JXNcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLCBjaC0+aWQsCi0JCWZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pLAotCQlmc21fZ2V0c3RhdGVfc3RyKGNoLT5mc20pKTsKLQl9CisJQ1RDTV9QUl9ERUJVRygiJXMoJXMpOiAlcyhjaD0weCVwKSwgY3A9JWksIENoU3RhdDolcywgR3JwU3RhdDolc1xuIiwKKwkJX19mdW5jX18sIGRldi0+bmFtZSwgY2gtPmlkLCBjaCwgc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJZnNtX2dldHN0YXRlX3N0cihjaC0+ZnNtKSwgZnNtX2dldHN0YXRlX3N0cihncnAtPmZzbSkpOwogCiAJc3dpdGNoIChmc21fZ2V0c3RhdGUoZ3JwLT5mc20pKSB7CiAJY2FzZSBNUENHX1NUQVRFX1hJRDJJTklUVzoKQEAgLTE2NjQsMTEgKzE2MjcsNyBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0IDogJXMoKTogY3A9JWkgY2g9MHglcCBpZD0lc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjaCwgY2gtPmlkKTsKIAlyZXR1cm47Ci0KIH0KIAogLyoKQEAgLTE2ODMsMTEgKzE2NDIsOSBAQAogCXN0cnVjdCBjdGNtX3ByaXYgICpwcml2ICAgPSBkZXYtPnByaXY7CiAJc3RydWN0IG1wY19ncm91cCAgKmdycCAgICA9IHByaXYtPm1wY2c7CiAKLQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzICAlcygpICVzICBcbkdycFN0YXRlOiVzIENoU3RhdGU6JXNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoLT5pZCwKLQkJICAgICAgIGZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pLAotCQkgICAgICAgZnNtX2dldHN0YXRlX3N0cihjaC0+ZnNtKSk7CisJQ1RDTV9QUl9ERUJVRygiJXMoJXMpOiAlc1xuICBDaFN0YXRlOiVzIEdycFN0YXRlOiVzXG4iLAorCQkJX19mdW5jX18sIGRldi0+bmFtZSwgY2gtPmlkLAorCQkJZnNtX2dldHN0YXRlX3N0cihjaC0+ZnNtKSwgZnNtX2dldHN0YXRlX3N0cihncnAtPmZzbSkpOwogCiAJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwogCkBAIC0xNzUwLDE2ICsxNzA3LDEyIEBACiAJaWYgKGNoLT5pbl9tcGNncm91cCkKIAkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX1hJRDBETywgY2gpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbXBjOiAlcygpIE5vdCBhbGwgY2hhbm5lbHMgaGF2ZSIKLQkJCSIgYmVlbiBhZGRlZCB0byBncm91cFxuIiwgX19GVU5DVElPTl9fKTsKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJIiVzKCVzKTogY2hhbm5lbCAlcyBub3QgYWRkZWQgdG8gZ3JvdXAiLAorCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCBjaC0+aWQpOwogCiBkb25lOgotCWlmIChkb19kZWJ1ZykKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQgOiAlcygpJXMgY2g9MHglcCBpZD0lc1xuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSwgY2gsIGNoLT5pZCk7Ci0KIAlyZXR1cm47Ci0KIH0KIAogLyoKQEAgLTE3NzQsMTMgKzE3MjcsNyBAQAogCXN0cnVjdCBjdGNtX3ByaXYgICAqcHJpdiAgID0gZGV2LT5wcml2OwogCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwICAgID0gcHJpdi0+bXBjZzsKIAotCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMgICVzKCkgJXMgIFxuR3JwU3RhdGU6JXMgQ2hTdGF0ZTolc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgX19GVU5DVElPTl9fLCBjaC0+aWQsCi0JCSAgICAgICBmc21fZ2V0c3RhdGVfc3RyKGdycC0+ZnNtKSwKLQkJICAgICAgIGZzbV9nZXRzdGF0ZV9zdHIoY2gtPmZzbSkpOwotCiAJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX1hJRDBETywgY2gpOwotCiAJcmV0dXJuOwogfQogCkBAIC0xODAyLDE5ICsxNzQ5LDE2IEBACiAJaW50IHJjID0gMDsKIAl1bnNpZ25lZCBsb25nIHNhdmVmbGFncyA9IDA7CiAKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMoKTogY3A9JWkgY2g9MHglcCBpZD0lc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBhY2gsIGFjaC0+aWQpOworCUNUQ01fUFJfREVCVUcoImN0Y21wYyBlbnRlcjogJXMoKTogY3A9JWkgY2g9MHglcCBpZD0lc1xuIiwKKwkJCV9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGFjaCwgYWNoLT5pZCk7CiAKIAlpZiAoZ3JwLT5pbl9zd2VlcCA9PSAwKQogCQkJCWdvdG8gZG9uZTsKIAotCWlmIChkb19kZWJ1Z19kYXRhKSB7Ci0JCWN0Y21fcHJfZGVidWcoImN0Y21wYzogJXMoKSAxOiBUb1ZUQU1fdGhfc2VxPSAlMDh4XG4iICwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHdjaC0+dGhfc2VxX251bSk7Ci0JCWN0Y21fcHJfZGVidWcoImN0Y21wYzogJXMoKSAxOiBGcm9tVlRBTV90aF9zZXE9ICUwOHhcbiIgLAotCQkJCV9fRlVOQ1RJT05fXywgcmNoLT50aF9zZXFfbnVtKTsKLQl9CisJQ1RDTV9QUl9EQkdEQVRBKCIlczogMTogVG9WVEFNX3RoX3NlcT0gJTA4eFxuIiAsCisJCQkJX19mdW5jX18sIHdjaC0+dGhfc2VxX251bSk7CisJQ1RDTV9QUl9EQkdEQVRBKCIlczogMTogRnJvbVZUQU1fdGhfc2VxPSAlMDh4XG4iICwKKwkJCQlfX2Z1bmNfXywgcmNoLT50aF9zZXFfbnVtKTsKIAogCWlmIChmc21fZ2V0c3RhdGUod2NoLT5mc20pICE9IENUQ19TVEFURV9UWElETEUpIHsKIAkJLyogZ2l2ZSB0aGUgcHJldmlvdXMgSU8gdGltZSB0byBjb21wbGV0ZSAqLwpAQCAtMTg1MywxMSArMTc5Nyw5IEBACiAKIAloZWFkZXItPnN3LnRoX2xhc3Rfc2VxID0gd2NoLT50aF9zZXFfbnVtOwogCi0JaWYgKGRvX2RlYnVnX2NjdykKLQkJY3RjbXBjX2R1bXBpdCgoY2hhciAqKSZ3Y2gtPmNjd1szXSwgc2l6ZW9mKHN0cnVjdCBjY3cxKSAqIDMpOwotCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIHN3ZWVwIHBhY2tldFxuIiwgX19GVU5DVElPTl9fKTsKLQljdGNtcGNfZHVtcGl0KChjaGFyICopaGVhZGVyLCBUSF9TV0VFUF9MRU5HVEgpOworCUNUQ01fQ0NXX0RVTVAoKGNoYXIgKikmd2NoLT5jY3dbM10sIHNpemVvZihzdHJ1Y3QgY2N3MSkgKiAzKTsKKwlDVENNX1BSX0RCR0RBVEEoIiVzOiBzd2VlcCBwYWNrZXRcbiIsIF9fZnVuY19fKTsKKwlDVENNX0QzX0RVTVAoKGNoYXIgKiloZWFkZXIsIFRIX1NXRUVQX0xFTkdUSCk7CiAKIAlmc21fYWRkdGltZXIoJndjaC0+dGltZXIsIENUQ01fVElNRV81X1NFQywgQ1RDX0VWRU5UX1RJTUVSLCB3Y2gpOwogCWZzbV9uZXdzdGF0ZSh3Y2gtPmZzbSwgQ1RDX1NUQVRFX1RYKTsKQEAgLTE4NzYsMTkgKzE4MTgsMTMgQEAKIAkJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7CiAJfQogCi0JaWYgKGRvX2RlYnVnX2RhdGEpIHsKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpMjogVG9WVEFNX3RoX3NlcT0gJTA4eFxuIiAsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCB3Y2gtPnRoX3NlcV9udW0pOwotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkyOiBGcm9tVlRBTV90aF9zZXE9ICUwOHhcbiIgLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXywgcmNoLT50aF9zZXFfbnVtKTsKLQl9CisJQ1RDTV9QUl9EQkdEQVRBKCIlczogVG8tL0Zyb20tVlRBTV90aF9zZXEgPSAlMDh4LyUwOHhcbiIgLAorCQkJX19mdW5jX18sIHdjaC0+dGhfc2VxX251bSwgcmNoLT50aF9zZXFfbnVtKTsKIAogCWlmIChyYyAhPSAwKQogCQljdGNtX2Njd19jaGVja19yYyh3Y2gsIHJjLCAic2VuZCBzd2VlcCIpOwogCiBkb25lOgotCWlmIChkb19kZWJ1ZykKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICAlcygpICVzXG4iLCBfX0ZVTkNUSU9OX18sIGFjaC0+aWQpOwogCXJldHVybjsKIH0KIApAQCAtMjE0OSw5ICsyMDg1LDggQEAKIAkJc3RydWN0IGNoYW5uZWwgKmNoID0gcHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dOwogCQlmc21fZXZlbnQoY2gtPmZzbSwgQ1RDX0VWRU5UX1NUT1AsIGNoKTsKIAkJY2gtPnRoX3NlcV9udW0gPSAweDAwOwotCWlmIChkb19kZWJ1ZykKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbTogJXMoKSBDSF90aF9zZXE9ICUwOHhcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBjaC0+dGhfc2VxX251bSk7CisJCUNUQ01fUFJfREVCVUcoIiVzOiBDSF90aF9zZXE9ICUwOHhcbiIsCisJCQkJX19mdW5jX18sIGNoLT50aF9zZXFfbnVtKTsKIAl9CiAJaWYgKElTX01QQyhwcml2KSkKIAkJZnNtX25ld3N0YXRlKHByaXYtPm1wY2ctPmZzbSwgTVBDR19TVEFURV9SRVNFVCk7CkBAIC0yMTk5LDggKzIxMzQsMTEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOwogCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGRldl9zdGF0ID0gZnNtX2dldHN0YXRlKGZpKTsKIAotCUNUQ01ZX0RCRl9ERVZfTkFNRShTRVRVUCwgZGV2LCAiIik7CisJQ1RDTV9EQkZfVEVYVF8oU0VUVVAsIENUQ19EQkZfTk9USUNFLAorCQkJIiVzKCVzKTogcHJpdiA9ICVwIFslZCwlZF1cbiAiLAlDVENNX0ZVTlRBSUwsCisJCQkJZGV2LT5uYW1lLCBkZXYtPnByaXYsIGRldl9zdGF0LCBldmVudCk7CiAKIAlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShmaSkpIHsKIAljYXNlIERFVl9TVEFURV9TVEFSVFdBSVRfUlhUWDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCmluZGV4IDZiMTNjMWMuLjEyNmEzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwpAQCAtODQsMjAgKzg0LDE5IEBACiAJCXNrYl9wdWxsKHBza2IsIExMX0hFQURFUl9MRU5HVEgpOwogCQlpZiAoKGNoLT5wcm90b2NvbCA9PSBDVENNX1BST1RPX1MzOTApICYmCiAJCSAgICAoaGVhZGVyLT50eXBlICE9IEVUSF9QX0lQKSkgewotCiAJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19JTExFR0FMUEtUKSkgeworCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19JTExFR0FMUEtUOwogCQkJCS8qCiAJCQkJICogQ2hlY2sgcGFja2V0IHR5cGUgb25seSBpZiB3ZSBzdGljayBzdHJpY3RseQogCQkJCSAqIHRvIFMvMzkwJ3MgcHJvdG9jb2wgb2YgT1MzOTAuIFRoaXMgb25seQogCQkJCSAqIHN1cHBvcnRzIElQLiBPdGhlcndpc2UgYWxsb3cgYW55IHBhY2tldAogCQkJCSAqIHR5cGUuCiAJCQkJICovCi0JCQkJY3RjbV9wcl93YXJuKCIlcyBJbGxlZ2FsIHBhY2tldCB0eXBlIDB4JTA0eCAiCi0JCQkJCQkicmVjZWl2ZWQsIGRyb3BwaW5nXG4iLAotCQkJCQkJZGV2LT5uYW1lLCBoZWFkZXItPnR5cGUpOwotCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19JTExFR0FMUEtUOworCQkJCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCQkiJXMoJXMpOiBJbGxlZ2FsIHBhY2tldCB0eXBlIDB4JTA0eCIKKwkJCQkJIiAtIGRyb3BwaW5nIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIGhlYWRlci0+dHlwZSk7CiAJCQl9Ci0KIAkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCXByaXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJcmV0dXJuOwpAQCAtMTA1LDExICsxMDQsMTEgQEAKIAkJcHNrYi0+cHJvdG9jb2wgPSBudG9ocyhoZWFkZXItPnR5cGUpOwogCQlpZiAoaGVhZGVyLT5sZW5ndGggPD0gTExfSEVBREVSX0xFTkdUSCkgewogCQkJaWYgKCEoY2gtPmxvZ2ZsYWdzICYgTE9HX0ZMQUdfSUxMRUdBTFNJWkUpKSB7Ci0JCQkJY3RjbV9wcl93YXJuKAotCQkJCQkiJXMgSWxsZWdhbCBwYWNrZXQgc2l6ZSAlZCAiCi0JCQkJCSJyZWNlaXZlZCAoTVRVPSVkIGJsb2NrbGVuPSVkKSwgIgotCQkJCQkiZHJvcHBpbmdcbiIsIGRldi0+bmFtZSwgaGVhZGVyLT5sZW5ndGgsCi0JCQkJCWRldi0+bXR1LCBsZW4pOworCQkJCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCQkiJXMoJXMpOiBJbGxlZ2FsIHBhY2tldCBzaXplICVkKCVkLCVkKSIKKwkJCQkJIi0gZHJvcHBpbmciLAorCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSwKKwkJCQkJaGVhZGVyLT5sZW5ndGgsIGRldi0+bXR1LCBsZW4pOwogCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19JTExFR0FMU0laRTsKIAkJCX0KIApAQCAtMTIyLDEwICsxMjEsMTAgQEAKIAkJaWYgKChoZWFkZXItPmxlbmd0aCA+IHNrYl90YWlscm9vbShwc2tiKSkgfHwKIAkJCShoZWFkZXItPmxlbmd0aCA+IGxlbikpIHsKIAkJCWlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX09WRVJSVU4pKSB7Ci0JCQkJY3RjbV9wcl93YXJuKAotCQkJCQkiJXMgSWxsZWdhbCBwYWNrZXQgc2l6ZSAlZCAoYmV5b25kIHRoZSIKLQkJCQkJIiBlbmQgb2YgcmVjZWl2ZWQgZGF0YSksIGRyb3BwaW5nXG4iLAotCQkJCQlkZXYtPm5hbWUsIGhlYWRlci0+bGVuZ3RoKTsKKwkJCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkJIiVzKCVzKTogUGFja2V0IHNpemUgJWQgKG92ZXJydW4pIgorCQkJCQkiIC0gZHJvcHBpbmciLCBDVENNX0ZVTlRBSUwsCisJCQkJCQlkZXYtPm5hbWUsIGhlYWRlci0+bGVuZ3RoKTsKIAkJCQljaC0+bG9nZmxhZ3MgfD0gTE9HX0ZMQUdfT1ZFUlJVTjsKIAkJCX0KIApAQCAtMTM5LDkgKzEzOCw5IEBACiAJCXNrYiA9IGRldl9hbGxvY19za2IocHNrYi0+bGVuKTsKIAkJaWYgKCFza2IpIHsKIAkJCWlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX05PTUVNKSkgewotCQkJCWN0Y21fcHJfd2FybigKLQkJCQkJIiVzIE91dCBvZiBtZW1vcnkgaW4gY3RjbV91bnBhY2tfc2tiXG4iLAotCQkJCQlkZXYtPm5hbWUpOworCQkJCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCQkiJXMoJXMpOiBNRU1PUlkgYWxsb2NhdGlvbiBlcnJvciIsCisJCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX05PTUVNOwogCQkJfQogCQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOwpAQCAtMTg0LDcgKzE4Myw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNoYW5uZWxfZnJlZShzdHJ1Y3QgY2hhbm5lbCAqY2gpCiB7Ci0JQ1RDTV9EQkZfVEVYVChUUkFDRSwgMiwgX19GVU5DVElPTl9fKTsKKwlDVENNX0RCRl9URVhUXyhTRVRVUCwgQ1RDX0RCRl9JTkZPLCAiJXMoJXMpIiwgQ1RDTV9GVU5UQUlMLCBjaC0+aWQpOwogCWNoLT5mbGFncyAmPSB+Q0hBTk5FTF9GTEFHU19JTlVTRTsKIAlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ1RDX1NUQVRFX0lETEUpOwogfQpAQCAtMjUxLDE5ICsyNTAsMTIgQEAKIHsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBjaGFubmVsczsKIAotCWlmIChkb19kZWJ1ZykgewotCQljaGFyIGJ1Zls2NF07Ci0JCXNwcmludGYoYnVmLCAiJXMoJWQsICVzLCAlZClcbiIsCi0JCQkJQ1RDTV9GVU5UQUlMLCB0eXBlLCBpZCwgZGlyZWN0aW9uKTsKLQkJQ1RDTV9EQkZfVEVYVChUUkFDRSwgQ1RDX0RCRl9JTkZPLCBidWYpOwotCX0KIAl3aGlsZSAoY2ggJiYgKHN0cm5jbXAoY2gtPmlkLCBpZCwgQ1RDTV9JRF9TSVpFKSB8fCAoY2gtPnR5cGUgIT0gdHlwZSkpKQogCQljaCA9IGNoLT5uZXh0OwogCWlmICghY2gpIHsKLQkJY2hhciBidWZbNjRdOwotCQlzcHJpbnRmKGJ1ZiwgIiVzKCVkLCAlcywgJWQpIG5vdCBmb3VuZCBpbiBjaGFubmVsIGxpc3RcbiIsCisJCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCSIlcyglZCwgJXMsICVkKSBub3QgZm91bmQgaW4gY2hhbm5lbCBsaXN0XG4iLAogCQkJCUNUQ01fRlVOVEFJTCwgdHlwZSwgaWQsIGRpcmVjdGlvbik7Ci0JCUNUQ01fREJGX1RFWFQoRVJST1IsIENUQ19EQkZfRVJST1IsIGJ1Zik7CiAJfSBlbHNlIHsKIAkJaWYgKGNoLT5mbGFncyAmIENIQU5ORUxfRkxBR1NfSU5VU0UpCiAJCQljaCA9IE5VTEw7CkBAIC0yODMsOCArMjc1LDkgQEAKIAlpZiAoIUlTX0VSUihpcmIpKQogCQlyZXR1cm4gMDsKIAotCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX1dBUk4sICJpcmIgZXJyb3IgJWxkIG9uIGRldmljZSAlc1xuIiwKLQkJCVBUUl9FUlIoaXJiKSwgY2Rldi0+ZGV2LmJ1c19pZCk7CisJQ1RDTV9EQkZfVEVYVF8oRVJST1IsIENUQ19EQkZfV0FSTiwKKwkJCSJpcmIgZXJyb3IgJWxkIG9uIGRldmljZSAlc1xuIiwKKwkJCQlQVFJfRVJSKGlyYiksIGNkZXYtPmRldi5idXNfaWQpOwogCiAJc3dpdGNoIChQVFJfRVJSKGlyYikpIHsKIAljYXNlIC1FSU86CkBAIC0zMDcsNTggKzMwMCw4NSBAQAogICogIGNoCQlUaGUgY2hhbm5lbCwgdGhlIHNlbnNlIGNvZGUgYmVsb25ncyB0by4KICAqICBzZW5zZQlUaGUgc2Vuc2UgY29kZSB0byBpbnNwZWN0LgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY2N3X3VuaXRfY2hlY2soc3RydWN0IGNoYW5uZWwgKmNoLCB1bnNpZ25lZCBjaGFyIHNlbnNlKQorc3RhdGljIGlubGluZSB2b2lkIGNjd191bml0X2NoZWNrKHN0cnVjdCBjaGFubmVsICpjaCwgX191OCBzZW5zZSkKIHsKLQlDVENNX0RCRl9URVhUKFRSQUNFLCA1LCBfX0ZVTkNUSU9OX18pOworCUNUQ01fREJGX1RFWFRfKFRSQUNFLCBDVENfREJGX0RFQlVHLAorCQkJIiVzKCVzKTogJTAyeCIsCisJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQsIHNlbnNlKTsKKwogCWlmIChzZW5zZSAmIFNOUzBfSU5URVJWRU5USU9OX1JFUSkgewogCQlpZiAoc2Vuc2UgJiAweDAxKSB7Ci0JCQljdGNtX3ByX2RlYnVnKCIlczogSW50ZXJmYWNlIGRpc2MuIG9yIFNlbC4gcmVzZXQgIgotCQkJCQkiKHJlbW90ZSlcbiIsIGNoLT5pZCk7CisJCQlpZiAoY2gtPnNlbnNlX3JjICE9IDB4MDEpIHsKKwkJCQljdGNtX3ByX2RlYnVnKCIlczogSW50ZXJmYWNlIGRpc2MuIG9yIFNlbC4gIgorCQkJCQkgICAgICAicmVzZXQgKHJlbW90ZSlcbiIsIGNoLT5pZCk7CisJCQkJY2gtPnNlbnNlX3JjID0gMHgwMTsKKwkJCX0KIAkJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfVUNfUkNSRVNFVCwgY2gpOwogCQl9IGVsc2UgewotCQkJY3RjbV9wcl9kZWJ1ZygiJXM6IFN5c3RlbSByZXNldCAocmVtb3RlKVxuIiwgY2gtPmlkKTsKKwkJCWlmIChjaC0+c2Vuc2VfcmMgIT0gU05TMF9JTlRFUlZFTlRJT05fUkVRKSB7CisJCQkJY3RjbV9wcl9kZWJ1ZygiJXM6IFN5c3RlbSByZXNldCAocmVtb3RlKVxuIiwKKwkJCQkJICAgICAgY2gtPmlkKTsKKwkJCQljaC0+c2Vuc2VfcmMgPSBTTlMwX0lOVEVSVkVOVElPTl9SRVE7CisJCQl9CiAJCQlmc21fZXZlbnQoY2gtPmZzbSwgQ1RDX0VWRU5UX1VDX1JTUkVTRVQsIGNoKTsKIAkJfQogCX0gZWxzZSBpZiAoc2Vuc2UgJiBTTlMwX0VRVUlQTUVOVF9DSEVDSykgewogCQlpZiAoc2Vuc2UgJiBTTlMwX0JVU19PVVRfQ0hFQ0spIHsKLQkJCWN0Y21fcHJfd2FybigiJXM6IEhhcmR3YXJlIG1hbGZ1bmN0aW9uIChyZW1vdGUpXG4iLAotCQkJCWNoLT5pZCk7CisJCQlpZiAoY2gtPnNlbnNlX3JjICE9IFNOUzBfQlVTX09VVF9DSEVDSykgeworCQkJCUNUQ01fREJGX1RFWFRfKFRSQUNFLCBDVENfREJGX1dBUk4sCisJCQkJCSIlcyglcyk6IHJlbW90ZSBIVyBlcnJvciAlMDJ4IiwKKwkJCQkJCUNUQ01fRlVOVEFJTCwgY2gtPmlkLCBzZW5zZSk7CisJCQkJY2gtPnNlbnNlX3JjID0gU05TMF9CVVNfT1VUX0NIRUNLOworCQkJfQogCQkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9VQ19IV0ZBSUwsIGNoKTsKIAkJfSBlbHNlIHsKLQkJCWN0Y21fcHJfd2FybigiJXM6IFJlYWQtZGF0YSBwYXJpdHkgZXJyb3IgKHJlbW90ZSlcbiIsCi0JCQkJY2gtPmlkKTsKKwkJCWlmIChjaC0+c2Vuc2VfcmMgIT0gU05TMF9FUVVJUE1FTlRfQ0hFQ0spIHsKKwkJCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9XQVJOLAorCQkJCQkiJXMoJXMpOiByZW1vdGUgcmVhZCBwYXJpdHkgZXJyb3IgJTAyeCIsCisJCQkJCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCwgc2Vuc2UpOworCQkJCWNoLT5zZW5zZV9yYyA9IFNOUzBfRVFVSVBNRU5UX0NIRUNLOworCQkJfQogCQkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9VQ19SWFBBUklUWSwgY2gpOwogCQl9CiAJfSBlbHNlIGlmIChzZW5zZSAmIFNOUzBfQlVTX09VVF9DSEVDSykgewotCQlpZiAoc2Vuc2UgJiAweDA0KSB7Ci0JCQljdGNtX3ByX3dhcm4oIiVzOiBEYXRhLXN0cmVhbWluZyB0aW1lb3V0KVxuIiwgY2gtPmlkKTsKLQkJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfVUNfVFhUSU1FT1VULCBjaCk7Ci0JCX0gZWxzZSB7Ci0JCQljdGNtX3ByX3dhcm4oIiVzOiBEYXRhLXRyYW5zZmVyIHBhcml0eSBlcnJvclxuIiwKLQkJCQkJY2gtPmlkKTsKLQkJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfVUNfVFhQQVJJVFksIGNoKTsKKwkJaWYgKGNoLT5zZW5zZV9yYyAhPSBTTlMwX0JVU19PVVRfQ0hFQ0spIHsKKwkJCUNUQ01fREJGX1RFWFRfKFRSQUNFLCBDVENfREJGX1dBUk4sCisJCQkJIiVzKCVzKTogQlVTIE9VVCBlcnJvciAlMDJ4IiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQsIHNlbnNlKTsKKwkJCWNoLT5zZW5zZV9yYyA9IFNOUzBfQlVTX09VVF9DSEVDSzsKIAkJfQorCQlpZiAoc2Vuc2UgJiAweDA0KQkvKiBkYXRhLXN0cmVhbWluZyB0aW1lb3V0ICovCisJCQlmc21fZXZlbnQoY2gtPmZzbSwgQ1RDX0VWRU5UX1VDX1RYVElNRU9VVCwgY2gpOworCQllbHNlCQkJLyogRGF0YS10cmFuc2ZlciBwYXJpdHkgZXJyb3IgKi8KKwkJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfVUNfVFhQQVJJVFksIGNoKTsKIAl9IGVsc2UgaWYgKHNlbnNlICYgU05TMF9DTURfUkVKRUNUKSB7Ci0JCWN0Y21fcHJfd2FybigiJXM6IENvbW1hbmQgcmVqZWN0XG4iLCBjaC0+aWQpOworCQlpZiAoY2gtPnNlbnNlX3JjICE9IFNOUzBfQ01EX1JFSkVDVCkgeworCQkJQ1RDTV9EQkZfVEVYVF8oVFJBQ0UsIENUQ19EQkZfV0FSTiwKKwkJCQkiJXMoJXMpOiBDb21tYW5kIHJlamVjdGVkIiwKKwkJCQkJCUNUQ01fRlVOVEFJTCwgY2gtPmlkKTsKKwkJCWNoLT5zZW5zZV9yYyA9IFNOUzBfQ01EX1JFSkVDVDsKKwkJfQogCX0gZWxzZSBpZiAoc2Vuc2UgPT0gMCkgewotCQljdGNtX3ByX2RlYnVnKCIlczogVW5pdCBjaGVjayBaRVJPXG4iLCBjaC0+aWQpOworCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9XQVJOLAorCQkJIiVzKCVzKTogVW5pdCBjaGVjayBaRVJPIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQpOwogCQlmc21fZXZlbnQoY2gtPmZzbSwgQ1RDX0VWRU5UX1VDX1pFUk8sIGNoKTsKIAl9IGVsc2UgewotCQljdGNtX3ByX3dhcm4oIiVzOiBVbml0IENoZWNrIHdpdGggc2Vuc2UgY29kZTogJTAyeFxuIiwKLQkJCSAgICBjaC0+aWQsIHNlbnNlKTsKKwkJQ1RDTV9EQkZfVEVYVF8oVFJBQ0UsIENUQ19EQkZfV0FSTiwKKwkJCSIlcyglcyk6IFVuaXQgY2hlY2sgY29kZSAlMDJ4IHVua25vd24iLAorCQkJCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCwgc2Vuc2UpOwogCQlmc21fZXZlbnQoY2gtPmZzbSwgQ1RDX0VWRU5UX1VDX1VOS05PV04sIGNoKTsKIAl9CiB9CiAKIGludCBjdGNtX2NoX2FsbG9jX2J1ZmZlcihzdHJ1Y3QgY2hhbm5lbCAqY2gpCiB7Ci0JQ1RDTV9EQkZfVEVYVChUUkFDRSwgNSwgX19GVU5DVElPTl9fKTsKLQogCWNsZWFyX25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzFdKTsKIAljaC0+dHJhbnNfc2tiID0gX19kZXZfYWxsb2Nfc2tiKGNoLT5tYXhfYnVmc2l6ZSwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCWlmIChjaC0+dHJhbnNfc2tiID09IE5VTEwpIHsKLQkJY3RjbV9wcl93YXJuKCIlczogQ291bGRuJ3QgYWxsb2MgJXMgdHJhbnNfc2tiXG4iLAotCQkJY2gtPmlkLAorCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlcyglcyk6ICVzIHRyYW5zX3NrYiBhbGxvY2F0aW9uIGVycm9yIiwKKwkJCUNUQ01fRlVOVEFJTCwgY2gtPmlkLAogCQkJKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgPyAiUlgiIDogIlRYIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTM2Nyw5ICszODcsOSBAQAogCWlmIChzZXRfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbMV0sIGNoLT50cmFuc19za2ItPmRhdGEpKSB7CiAJCWRldl9rZnJlZV9za2IoY2gtPnRyYW5zX3NrYik7CiAJCWNoLT50cmFuc19za2IgPSBOVUxMOwotCQljdGNtX3ByX3dhcm4oIiVzOiBzZXRfbm9ybWFsaXplZF9jZGEgZm9yICVzICIKLQkJCSJ0cmFuc19za2IgZmFpbGVkLCBkcm9wcGluZyBwYWNrZXRzXG4iLAotCQkJY2gtPmlkLAorCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlcyglcyk6ICVzIHNldCBub3JtX2NkYSBmYWlsZWQiLAorCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQsCiAJCQkoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSA/ICJSWCIgOiAiVFgiKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNTE2LDcgKzUzNiw3IEBACiAJCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKIAkJCXNrYl9wdWxsKHNrYiwgTExfSEVBREVSX0xFTkdUSCArIDIpOwogCQkJY3RjbV9jbGVhcl9idXN5KGNoLT5uZXRkZXYpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKIAkJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihjaC0+dHJhbnNfc2tiKTsKQEAgLTU3MCwxNSArNTkwLDEyIEBACiAJc3RydWN0IHRoX3N3ZWVwICpoZWFkZXI7CiAJc3RydWN0IHNrX2J1ZmYgKnN3ZWVwX3NrYjsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2g7Ci0JaW50IHJjID0gMDsKKwkvKiBpbnQgcmMgPSAwOyAqLwogCiAJcHJpdiA9IGRldi0+cHJpdjsKIAlncnAgPSBwcml2LT5tcGNnOwogCWNoID0gcHJpdi0+Y2hhbm5lbFtXUklURV07CiAKLQlpZiAoZG9fZGVidWcpCi0JCU1QQ19EQkZfREVWX05BTUUoVFJBQ0UsIGRldiwgY2gtPmlkKTsKLQogCS8qIHN3ZWVwIHByb2Nlc3NpbmcgaXMgbm90IGNvbXBsZXRlIHVudGlsIHJlc3BvbnNlIGFuZCByZXF1ZXN0ICovCiAJLyogaGFzIGNvbXBsZXRlZCBmb3IgYWxsIHJlYWQgY2hhbm5lbHMgaW4gZ3JvdXAJCSAgICAgICAqLwogCWlmIChncnAtPmluX3N3ZWVwID09IDApIHsKQEAgLTU5MCwxNyArNjA3LDE2IEBACiAJc3dlZXBfc2tiID0gX19kZXZfYWxsb2Nfc2tiKE1QQ19CVUZTSVpFX0RFRkFVTFQsIEdGUF9BVE9NSUN8R0ZQX0RNQSk7CiAKIAlpZiAoc3dlZXBfc2tiID09IE5VTEwpCXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGRuJ3QgYWxsb2Mgc3dlZXBfc2tiXG4iKTsKLQkJcmMgPSAtRU5PTUVNOwotCQkJCQlnb3RvIGRvbmU7CisJCS8qIHJjID0gLUVOT01FTTsgKi8KKwkJCQlnb3RvIG5vbWVtOwogCX0KIAogCWhlYWRlciA9IGttYWxsb2MoVEhfU1dFRVBfTEVOR1RILCBnZnBfdHlwZSgpKTsKIAogCWlmICghaGVhZGVyKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHN3ZWVwX3NrYik7Ci0JCXJjID0gLUVOT01FTTsKLQkJCQkJZ290byBkb25lOworCQkvKiByYyA9IC1FTk9NRU07ICovCisJCQkJZ290byBub21lbTsKIAl9CiAKIAloZWFkZXItPnRoLnRoX3NlZwk9IDB4MDAgOwpAQCAtNjIxLDEyICs2MzcsMTAgQEAKIAogCXJldHVybjsKIAotZG9uZToKLQlpZiAocmMgIT0gMCkgewotCQlncnAtPmluX3N3ZWVwID0gMDsKLQkJY3RjbV9jbGVhcl9idXN5KGRldik7Ci0JCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwotCX0KK25vbWVtOgorCWdycC0+aW5fc3dlZXAgPSAwOworCWN0Y21fY2xlYXJfYnVzeShkZXYpOworCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCiAJcmV0dXJuOwogfQpAQCAtNjQ4LDExICs2NjIsOSBAQAogCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgKi8KIAlfX3UxNiBibG9ja19sZW47CiAKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoCi0JCQkiY3RjbSBlbnRlcjogJXMoKTogJXMgY3A9JWkgY2g9MHglcCBpZD0lcyBzdGF0ZT0lc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgZGV2LT5uYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLAotCQkJY2gtPmlkLCBmc21fZ2V0c3RhdGVfc3RyKGNoLT5mc20pKTsKKwlDVENNX1BSX0RFQlVHKCJFbnRlciAlczogJXMsIGNwPSVpIGNoPTB4JXAgaWQ9JXMgc3RhdGU9JXNcbiIsCisJCQlfX2Z1bmNfXywgZGV2LT5uYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLAorCQkJCQljaC0+aWQsIGZzbV9nZXRzdGF0ZV9zdHIoY2gtPmZzbSkpOwogCiAJaWYgKChmc21fZ2V0c3RhdGUoY2gtPmZzbSkgIT0gQ1RDX1NUQVRFX1RYSURMRSkgfHwgZ3JwLT5pbl9zd2VlcCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmNvbGxlY3RfbG9jaywgc2F2ZWZsYWdzKTsKQEAgLTY2MCwxNCArNjcyLDggQEAKIAkJcF9oZWFkZXIgPSBrbWFsbG9jKFBEVV9IRUFERVJfTEVOR1RILCBnZnBfdHlwZSgpKTsKIAogCQlpZiAoIXBfaGVhZGVyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdGNtOiBPVVQgT0YgTUVNT1JZIElOICVzKCk6IgotCQkJICAgICAgICIgRGF0YSBMb3N0IFxuIiwgX19GVU5DVElPTl9fKTsKLQotCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNvbGxlY3RfbG9jaywgc2F2ZWZsYWdzKTsKLQkJCWZzbV9ldmVudChwcml2LT5tcGNnLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKLQkJCQkJZ290byBkb25lOworCQkJCWdvdG8gbm9tZW1fZXhpdDsKIAkJfQogCiAJCXBfaGVhZGVyLT5wZHVfb2Zmc2V0ID0gc2tiLT5sZW47CkBAIC02ODIsMTMgKzY4OCwxMCBAQAogCQltZW1jcHkoc2tiX3B1c2goc2tiLCBQRFVfSEVBREVSX0xFTkdUSCksIHBfaGVhZGVyLAogCQkgICAgICAgUERVX0hFQURFUl9MRU5HVEgpOwogCi0JCWlmIChkb19kZWJ1Z19kYXRhKSB7Ci0JCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpIFB1dHRpbmcgb24gY29sbGVjdF9xIgotCQkJICAgICAgICIgLSBza2IgbGVuOiAlMDR4IFxuIiwgX19GVU5DVElPTl9fLCBza2ItPmxlbik7Ci0JCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpIHBkdSBoZWFkZXIgYW5kIGRhdGEiCi0JCQkgICAgICAgIiBmb3IgdXAgdG8gMzIgYnl0ZXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQljdGNtcGNfZHVtcDMyKChjaGFyICopc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JCX0KKwkJQ1RDTV9QUl9ERUJVRygiJXMoJXMpOiBQdXQgb24gY29sbGVjdF9xIC0gc2tiIGxlbjogJTA0eCBcbiIKKwkJCQkicGR1IGhlYWRlciBhbmQgZGF0YSBmb3IgdXAgdG8gMzIgYnl0ZXM6XG4iLAorCQkJCV9fZnVuY19fLCBkZXYtPm5hbWUsIHNrYi0+bGVuKTsKKwkJQ1RDTV9EM19EVU1QKChjaGFyICopc2tiLT5kYXRhLCBtaW5fdChpbnQsIDMyLCBza2ItPmxlbikpOwogCiAJCXNrYl9xdWV1ZV90YWlsKCZjaC0+Y29sbGVjdF9xdWV1ZSwgc2tiKTsKIAkJY2gtPmNvbGxlY3RfbGVuICs9IHNrYi0+bGVuOwpAQCAtNzEzLDEyICs3MTYsNyBAQAogCWlmIChoaSkgewogCQluc2tiID0gX19kZXZfYWxsb2Nfc2tiKHNrYi0+bGVuLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CiAJCWlmICghbnNrYikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbTogJXMoKSBPVVQgT0YgTUVNT1JZIgotCQkJCSItICBEYXRhIExvc3QgXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJZnNtX2V2ZW50KHByaXYtPm1wY2ctPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwotCQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gbm9tZW1fZXhpdDsKIAkJfSBlbHNlIHsKIAkJCW1lbWNweShza2JfcHV0KG5za2IsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJCQlhdG9taWNfaW5jKCZuc2tiLT51c2Vycyk7CkBAIC03MzAsMTUgKzcyOCw4IEBACiAKIAlwX2hlYWRlciA9IGttYWxsb2MoUERVX0hFQURFUl9MRU5HVEgsIGdmcF90eXBlKCkpOwogCi0JaWYgKCFwX2hlYWRlcikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdGNtOiAlcygpIE9VVCBPRiBNRU1PUlkiCi0JCSAgICAgICAiOiBEYXRhIExvc3QgXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlmc21fZXZlbnQocHJpdi0+bXBjZy0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7Ci0JCQkJZ290byBkb25lOwotCX0KKwlpZiAoIXBfaGVhZGVyKQorCQlnb3RvIG5vbWVtX2V4aXQ7CiAKIAlwX2hlYWRlci0+cGR1X29mZnNldCA9IHNrYi0+bGVuOwogCXBfaGVhZGVyLT5wZHVfcHJvdG8gPSAweDAxOwpAQCAtNzY4LDE1ICs3NTksOCBAQAogCWNoLT5wcm9mLnR4bGVuICs9IHNrYi0+bGVuIC0gUERVX0hFQURFUl9MRU5HVEg7CiAKIAloZWFkZXIgPSBrbWFsbG9jKFRIX0hFQURFUl9MRU5HVEgsIGdmcF90eXBlKCkpOwotCi0JaWYgKCFoZWFkZXIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbTogJXMoKSBPVVQgT0YgTUVNT1JZOiBEYXRhIExvc3QgXG4iLAotCQkJCV9fRlVOQ1RJT05fXyk7Ci0JCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlmc21fZXZlbnQocHJpdi0+bXBjZy0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7Ci0JCQkJZ290byBkb25lOwotCX0KKwlpZiAoIWhlYWRlcikKKwkJZ290byBub21lbV9leGl0OwogCiAJaGVhZGVyLT50aF9zZWcgPSAweDAwOwogCWhlYWRlci0+dGhfY2hfZmxhZyA9IFRIX0hBU19QRFU7ICAvKiBOb3JtYWwgZGF0YSAqLwpAQCAtNzg1LDQxICs3NjksMzEgQEAKIAljaC0+dGhfc2VxX251bSsrOwogCWhlYWRlci0+dGhfc2VxX251bSA9IGNoLT50aF9zZXFfbnVtOwogCi0JaWYgKGRvX2RlYnVnX2RhdGEpCi0JCWN0Y21fcHJfZGVidWcoImN0Y206ICVzKCkgVG9WVEFNX3RoX3NlcT0gJTA4eFxuIiAsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoLT50aF9zZXFfbnVtKTsKKwlDVENNX1BSX0RCR0RBVEEoIiVzKCVzKSBUb1ZUQU1fdGhfc2VxPSAlMDh4XG4iICwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPm5hbWUsIGNoLT50aF9zZXFfbnVtKTsKIAogCS8qIHB1dCB0aGUgVEggb24gdGhlIHBhY2tldCAqLwogCW1lbWNweShza2JfcHVzaChza2IsIFRIX0hFQURFUl9MRU5HVEgpLCBoZWFkZXIsIFRIX0hFQURFUl9MRU5HVEgpOwogCiAJa2ZyZWUoaGVhZGVyKTsKIAotCWlmIChkb19kZWJ1Z19kYXRhKSB7Ci0JCWN0Y21fcHJfZGVidWcoImN0Y206ICVzKCk6IHNrYiBsZW46ICUwNHggXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgc2tiLT5sZW4pOwotCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpOiBwZHUgaGVhZGVyIGFuZCBkYXRhIGZvciB1cCB0byAzMiAiCi0JCQkJImJ5dGVzIHNlbnQgdG8gdnRhbVxuIiwgX19GVU5DVElPTl9fKTsKLQkJY3RjbXBjX2R1bXAzMigoY2hhciAqKXNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCX0KKwlDVENNX1BSX0RCR0RBVEEoIiVzKCVzKTogc2tiIGxlbjogJTA0eFxuIC0gcGR1IGhlYWRlciBhbmQgZGF0YSBmb3IgIgorCQkJInVwIHRvIDMyIGJ5dGVzIHNlbnQgdG8gdnRhbTpcbiIsCisJCQkJX19mdW5jX18sIGRldi0+bmFtZSwgc2tiLT5sZW4pOworCUNUQ01fRDNfRFVNUCgoY2hhciAqKXNrYi0+ZGF0YSwgbWluX3QoaW50LCAzMiwgc2tiLT5sZW4pKTsKIAogCWNoLT5jY3dbNF0uY291bnQgPSBza2ItPmxlbjsKIAlpZiAoc2V0X25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzRdLCBza2ItPmRhdGEpKSB7CiAJCS8qCi0JCSAqIGlkYWwgYWxsb2NhdGlvbiBmYWlsZWQsIHRyeSB2aWEgY29weWluZyB0bwotCQkgKiB0cmFuc19za2IuIHRyYW5zX3NrYiB1c3VhbGx5IGhhcyBhIHByZS1hbGxvY2F0ZWQKLQkJICogaWRhbC4KKwkJICogaWRhbCBhbGxvY2F0aW9uIGZhaWxlZCwgdHJ5IHZpYSBjb3B5aW5nIHRvIHRyYW5zX3NrYi4KKwkJICogdHJhbnNfc2tiIHVzdWFsbHkgaGFzIGEgcHJlLWFsbG9jYXRlZCBpZGFsLgogCQkgKi8KIAkJaWYgKGN0Y21fY2hlY2thbGxvY19idWZmZXIoY2gpKSB7CiAJCQkvKgotCQkJICogUmVtb3ZlIG91ciBoZWFkZXIuIEl0IGdldHMgYWRkZWQKLQkJCSAqIGFnYWluIG9uIHJldHJhbnNtaXQuCisJCQkgKiBSZW1vdmUgb3VyIGhlYWRlci4KKwkJCSAqIEl0IGdldHMgYWRkZWQgYWdhaW4gb24gcmV0cmFuc21pdC4KIAkJCSAqLwotCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbTogJXMoKU9VVCBPRiBNRU1PUlk6IgotCQkJCQkiIERhdGEgTG9zdCBcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQlmc21fZXZlbnQocHJpdi0+bXBjZy0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7Ci0JCQkJZ290byBkb25lOworCQkJCWdvdG8gbm9tZW1fZXhpdDsKIAkJfQogCiAJCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoY2gtPnRyYW5zX3NrYik7CkBAIC04MjksMTQgKzgwMywxMSBAQAogCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJY2N3X2lkeCA9IDA7Ci0JCWlmIChkb19kZWJ1Z19kYXRhKSB7Ci0JCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpIFRSQU5TIHNrYiBsZW46ICVkIFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoLT50cmFuc19za2ItPmxlbik7Ci0JCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcyB1cCB0byAzMiBieXRlcyBvZiBkYXRhIgotCQkJCSIgc2VudCB0byB2dGFtXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJY3RjbXBjX2R1bXAzMigoY2hhciAqKWNoLT50cmFuc19za2ItPmRhdGEsCi0JCQkJCWNoLT50cmFuc19za2ItPmxlbik7Ci0JCX0KKwkJQ1RDTV9QUl9EQkdEQVRBKCIlcyglcyk6IHRyYW5zX3NrYiBsZW46ICUwNHhcbiIKKwkJCQkidXAgdG8gMzIgYnl0ZXMgc2VudCB0byB2dGFtOlxuIiwKKwkJCQlfX2Z1bmNfXywgZGV2LT5uYW1lLCBjaC0+dHJhbnNfc2tiLT5sZW4pOworCQlDVENNX0QzX0RVTVAoKGNoYXIgKiljaC0+dHJhbnNfc2tiLT5kYXRhLAorCQkJCW1pbl90KGludCwgMzIsIGNoLT50cmFuc19za2ItPmxlbikpOwogCX0gZWxzZSB7CiAJCXNrYl9xdWV1ZV90YWlsKCZjaC0+aW9fcXVldWUsIHNrYik7CiAJCWNjd19pZHggPSAzOwpAQCAtODY1LDEzICs4MzYsMjEgQEAKIAkJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwogCQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbiAtIFRIX0hFQURFUl9MRU5HVEg7CiAJfQotCWlmIChjaC0+dGhfc2VxX251bSA+IDB4ZjAwMDAwMDApCS8qIENob3NlIDRCaWxsaW9uIGF0IHJhbmRvbS4gKi8KKwlpZiAoY2gtPnRoX3NlcV9udW0gPiAweGYwMDAwMDAwKQkvKiBDaG9zZSBhdCByYW5kb20uICovCiAJCWN0Y21wY19zZW5kX3N3ZWVwX3JlcShjaCk7CiAKKwlnb3RvIGRvbmU7Citub21lbV9leGl0OgorCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9DUklULAorCQkJIiVzKCVzKTogTUVNT1JZIGFsbG9jYXRpb24gRVJST1JcbiIsCisJCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCk7CisJcmMgPSAtRU5PTUVNOworCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJZnNtX2V2ZW50KHByaXYtPm1wY2ctPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogZG9uZToKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y20gZXhpdDogJXMgICVzKClcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKLQlyZXR1cm4gMDsKKwlDVENNX1BSX0RFQlVHKCJFeGl0ICVzKCVzKVxuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7CisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTg4OCwyMCArODY3LDE5IEBACiAvKiBmaXJzdCBtZXJnZSB2ZXJzaW9uIC0gbGVhdmluZyBib3RoIGZ1bmN0aW9ucyBzZXBhcmF0ZWQgKi8KIHN0YXRpYyBpbnQgY3RjbV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKLQotCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDUsIF9fRlVOQ1RJT05fXyk7Ci0JcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCiAJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCWN0Y21fcHJfd2FybigiJXM6IE5VTEwgc2tfYnVmZiBwYXNzZWRcbiIsIGRldi0+bmFtZSk7CisJCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCSIlcyglcyk6IE5VTEwgc2tfYnVmZiBwYXNzZWQiLAorCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IChMTF9IRUFERVJfTEVOR1RIICsgMikpIHsKLQkJY3RjbV9wcl93YXJuKCIlczogR290IHNrX2J1ZmYgd2l0aCBoZWFkIHJvb20gPCAlbGQgYnl0ZXNcbiIsCi0JCQkgICAgZGV2LT5uYW1lLCBMTF9IRUFERVJfTEVOR1RIICsgMik7CisJCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJIiVzKCVzKTogR290IHNrX2J1ZmYgd2l0aCBoZWFkIHJvb20gPCAlbGQgYnl0ZXMiLAorCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIExMX0hFQURFUl9MRU5HVEggKyAyKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybiAwOwpAQCAtOTI1LDUxICs5MDMsNDMgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWlmIChjdGNtX3RyYW5zbWl0X3NrYihwcml2LT5jaGFubmVsW1dSSVRFXSwgc2tiKSAhPSAwKQotCQlyYyA9IDE7Ci0JcmV0dXJuIHJjOworCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogLyogdW5tZXJnZWQgTVBDIHZhcmlhbnQgb2YgY3RjbV90eCAqLwogc3RhdGljIGludCBjdGNtcGNfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgbGVuID0gMDsKLQlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gTlVMTDsKLQlzdHJ1Y3QgbXBjX2dyb3VwICpncnAgID0gTlVMTDsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgKmdycCAgPSBwcml2LT5tcGNnOwogCXN0cnVjdCBza19idWZmICpuZXdza2IgPSBOVUxMOwogCi0JaWYgKGRvX2RlYnVnKQotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IHNrYjolMGx4XG4iLAotCQkJX19GVU5DVElPTl9fLCAodW5zaWduZWQgbG9uZylza2IpOwotCi0JQ1RDTV9EQkZfVEVYVF8oTVBDX1RSQUNFLCBDVENfREJGX0RFQlVHLAotCQkJImN0Y21wYyBlbnRlcjogJXMoKTogc2tiOiUwbHhcbiIsCi0JCQlfX0ZVTkNUSU9OX18sICh1bnNpZ25lZCBsb25nKXNrYik7Ci0KLQlwcml2ID0gZGV2LT5wcml2OwotCWdycCAgPSBwcml2LT5tcGNnOwogCS8qCiAJICogU29tZSBzYW5pdHkgY2hlY2tzIC4uLgogCSAqLwogCWlmIChza2IgPT0gTlVMTCkgewotCQljdGNtX3ByX3dhcm4oImN0Y21wYzogJXM6IE5VTEwgc2tfYnVmZiBwYXNzZWRcbiIsIGRldi0+bmFtZSk7CisJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlcyglcyk6IE5VTEwgc2tfYnVmZiBwYXNzZWQiLAorCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQkJZ290byBkb25lOwogCX0KIAlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCAoVEhfSEVBREVSX0xFTkdUSCArIFBEVV9IRUFERVJfTEVOR1RIKSkgewotCQlDVENNX0RCRl9URVhUXyhNUENfVFJBQ0UsIENUQ19EQkZfV0FSTiwKLQkJCSIlczogR290IHNrX2J1ZmYgd2l0aCBoZWFkIHJvb20gPCAlbGQgYnl0ZXNcbiIsCi0JCQlkZXYtPm5hbWUsIFRIX0hFQURFUl9MRU5HVEggKyBQRFVfSEVBREVSX0xFTkdUSCk7CisJCUNUQ01fREJGX1RFWFRfKE1QQ19UUkFDRSwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlcyglcyk6IEdvdCBza19idWZmIHdpdGggaGVhZCByb29tIDwgJWxkIGJ5dGVzIiwKKwkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLAorCQkJCVRIX0hFQURFUl9MRU5HVEggKyBQRFVfSEVBREVSX0xFTkdUSCk7CiAKLQkJaWYgKGRvX2RlYnVnX2RhdGEpCi0JCQljdGNtcGNfZHVtcDMyKChjaGFyICopc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCUNUQ01fRDNfRFVNUCgoY2hhciAqKXNrYi0+ZGF0YSwgbWluX3QoaW50LCAzMiwgc2tiLT5sZW4pKTsKIAogCQlsZW4gPSAgc2tiLT5sZW4gKyBUSF9IRUFERVJfTEVOR1RIICsgUERVX0hFQURFUl9MRU5HVEg7CiAJCW5ld3NrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4sIGdmcF90eXBlKCkgfCBHRlBfRE1BKTsKIAogCQlpZiAoIW5ld3NrYikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbXBjOiAlcygpIE9VVCBPRiBNRU1PUlktIgotCQkJICAgICAgICJEYXRhIExvc3RcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCUNUQ01fREJGX1RFWFRfKE1QQ19UUkFDRSwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkiJXM6ICVzOiBfX2Rldl9hbGxvY19za2IgZmFpbGVkIiwKKwkJCQkJCV9fZnVuY19fLCBkZXYtPm5hbWUpOwogCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOwpAQCAtOTkzLDkgKzk2Myw5IEBACiAJaWYgKChmc21fZ2V0c3RhdGUocHJpdi0+ZnNtKSAhPSBERVZfU1RBVEVfUlVOTklORykgfHwKIAkgICAoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSA8ICBNUENHX1NUQVRFX1hJRDJJTklUVykpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjbXBjOiAlcygpIERBVEEgUkNWRCAtIE1QQyBHUk9VUCAiCi0JCSAgICAgICAiTk9UIEFDVElWRSAtIERST1BQRURcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkiJXMoJXMpOiBpbmFjdGl2ZSBNUENHUk9VUCAtIGRyb3BwZWQiLAorCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCXByaXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CkBAIC0xMDAzLDggKzk3Myw5IEBACiAJfQogCiAJaWYgKGN0Y21fdGVzdF9hbmRfc2V0X2J1c3koZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczpERVZJQ0UgRVJSIC0gVU5SRUNPVkVSQUJMRSBEQVRBIExPU1NcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkiJXMoJXMpOiBkZXZpY2UgYnVzeSAtIGRyb3BwZWQiLAorCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CkBAIC0xMDE1LDEyICs5ODYsOSBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJaWYgKGN0Y21wY190cmFuc21pdF9za2IocHJpdi0+Y2hhbm5lbFtXUklURV0sIHNrYikgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdGNtcGM6ICVzKCkgREVWSUNFIEVSUk9SIgotCQkgICAgICAgIjogRGF0YSBMb3N0IFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImN0Y21wYzogJXMoKSBERVZJQ0UgRVJST1IiCi0JCSAgICAgICAiIC0gVU5SRUNPVkVSQUJMRSBEQVRBIExPU1NcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkiJXMoJXMpOiBkZXZpY2UgZXJyb3IgLSBkcm9wcGVkIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtMTA1NCw4ICsxMDIyLDYgQEAKIAlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OwogCWludCBtYXhfYnVmc2l6ZTsKIAotCUNUQ01fREJGX1RFWFQoU0VUVVAsIENUQ19EQkZfSU5GTywgX19GVU5DVElPTl9fKTsKLQogCWlmIChuZXdfbXR1IDwgNTc2IHx8IG5ld19tdHUgPiA2NTUyNykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEwODcsMzAgKzEwNTMsMTMgQEAKIAlyZXR1cm4gJigoc3RydWN0IGN0Y21fcHJpdiAqKWRldi0+cHJpdiktPnN0YXRzOwogfQogCi0KLXN0YXRpYyB2b2lkIGN0Y21fbmV0ZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlDVENNX0RCRl9URVhUKFNFVFVQLCBDVENfREJGX0lORk8sIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotfQotCi1zdGF0aWMgaW50IGN0Y21fbmV0ZGV2X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JQ1RDTV9EQkZfVEVYVChTRVRVUCwgQ1RDX0RCRl9JTkZPLCBfX0ZVTkNUSU9OX18pOwotCXJldHVybiByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLX0KLQogc3RhdGljIHZvaWQgY3RjbV9mcmVlX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjdGNtX3ByaXYgKnByaXY7CiAJc3RydWN0IG1wY19ncm91cCAqZ3JwOwogCi0JQ1RDTV9EQkZfVEVYVChTRVRVUCwgQ1RDX0RCRl9JTkZPLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKKwlDVENNX0RCRl9URVhUXyhTRVRVUCwgQ1RDX0RCRl9JTkZPLAorCQkJIiVzKCVzKSIsIENUQ01fRlVOVEFJTCwgZGV2LT5uYW1lKTsKIAlwcml2ID0gZGV2LT5wcml2OwogCWlmIChwcml2KSB7CiAJCWdycCA9IHByaXYtPm1wY2c7CkBAIC0xMTcxLDcgKzExMjAsOSBAQAogCQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgQ1RDX0RFVklDRV9HRU5FLCBjdGNtX2Rldl9zZXR1cCk7CiAKIAlpZiAoIWRldikgewotCQljdGNtX3ByX2VycigiJXM6IE91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0NSSVQsCisJCQkiJXM6IE1FTU9SWSBhbGxvY2F0aW9uIEVSUk9SIiwKKwkJCUNUQ01fRlVOVEFJTCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlkZXYtPnByaXYgPSBwcml2OwpAQCAtMTIwOSw2ICsxMTYwLDcgQEAKIAl9CiAKIAlDVENNWV9EQkZfREVWKFNFVFVQLCBkZXYsICJmaW5pc2hlZCIpOworCiAJcmV0dXJuIGRldjsKIH0KIApAQCAtMTIyNiwxOCArMTE3OCwyNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAJc3RydWN0IGN0Y21fcHJpdgkqcHJpdjsKIAlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlCSpjZ2RldjsKKwlpbnQgY3N0YXQ7CisJaW50IGRzdGF0OwogCi0JQ1RDTV9EQkZfVEVYVChUUkFDRSwgQ1RDX0RCRl9ERUJVRywgX19GVU5DVElPTl9fKTsKKwlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9ERUJVRywKKwkJIkVudGVyICVzKCVzKSIsIENUQ01fRlVOVEFJTCwgJmNkZXYtPmRldi5idXNfaWQpOworCiAJaWYgKGN0Y21fY2hlY2tfaXJiX2Vycm9yKGNkZXYsIGlyYikpCiAJCXJldHVybjsKIAogCWNnZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOwogCisJY3N0YXQgPSBpcmItPnNjc3cuY21kLmNzdGF0OworCWRzdGF0ID0gaXJiLT5zY3N3LmNtZC5kc3RhdDsKKwogCS8qIENoZWNrIGZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzLiAqLwogCWlmIChjZ2RldiA9PSBOVUxMKSB7Ci0JCWN0Y21fcHJfd2FybigiY3RjbTogR290IHVuc29saWNpdGVkIGlycTogJXMgYy0lMDJ4IGQtJTAyeFxuIiwKLQkJCSAgICBjZGV2LT5kZXYuYnVzX2lkLCBpcmItPnNjc3cuY21kLmNzdGF0LAotCQkJICAgIGlyYi0+c2Nzdy5jbWQuZHN0YXQpOworCQljdGNtX3ByX3dhcm4oImN0Y206IEdvdCB1bnNvbGljaXRlZCBpcnE6IGMtJTAyeCBkLSUwMnhcbiIsCisJCQkgICAgIGNzdGF0LCBkc3RhdCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyNTQsMjYgKzEyMTIsMjIgQEAKIAkJcmV0dXJuOwogCX0KIAotCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKShjaC0+bmV0ZGV2KTsKKwlkZXYgPSBjaC0+bmV0ZGV2OwogCWlmIChkZXYgPT0gTlVMTCkgewogCQljdGNtX3ByX2NyaXQoImN0Y206ICVzIGRldj1OVUxMIGJ1c19pZD0lcywgY2g9MHglcFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGNkZXYtPmRldi5idXNfaWQsIGNoKTsKKwkJCQlfX2Z1bmNfXywgY2Rldi0+ZGV2LmJ1c19pZCwgY2gpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGRvX2RlYnVnKQotCQljdGNtX3ByX2RlYnVnKCIlczogaW50ZXJydXB0IGZvciBkZXZpY2U6ICVzICIKLQkJCQkicmVjZWl2ZWQgYy0lMDJ4IGQtJTAyeFxuIiwKLQkJCQlkZXYtPm5hbWUsCi0JCQkJY2gtPmlkLAotCQkJCWlyYi0+c2Nzdy5jbWQuY3N0YXQsCi0JCQkJaXJiLT5zY3N3LmNtZC5kc3RhdCk7CisJQ1RDTV9EQkZfVEVYVF8oVFJBQ0UsIENUQ19EQkZfREVCVUcsCisJCSIlcyglcyk6IGludC4gZm9yICVzOiBjc3RhdD0lMDJ4IGRzdGF0PSUwMngiLAorCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIGNoLT5pZCwgY3N0YXQsIGRzdGF0KTsKIAogCS8qIENvcHkgaW50ZXJydXB0aW9uIHJlc3BvbnNlIGJsb2NrLiAqLwogCW1lbWNweShjaC0+aXJiLCBpcmIsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CiAKLQkvKiBDaGVjayBmb3IgZ29vZCBzdWJjaGFubmVsIHJldHVybiBjb2RlLCBvdGhlcndpc2UgZXJyb3IgbWVzc2FnZSAqLwogCWlmIChpcmItPnNjc3cuY21kLmNzdGF0KSB7CisJLyogQ2hlY2sgZm9yIGdvb2Qgc3ViY2hhbm5lbCByZXR1cm4gY29kZSwgb3RoZXJ3aXNlIGVycm9yIG1lc3NhZ2UgKi8KIAkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9TQ19VTktOT1dOLCBjaCk7CiAJCWN0Y21fcHJfd2FybigiJXM6IHN1YmNoYW5uZWwgY2hlY2sgZm9yIGRldjogJXMgLSAlMDJ4ICUwMnhcbiIsCiAJCQkgICAgZGV2LT5uYW1lLCBjaC0+aWQsIGlyYi0+c2Nzdy5jbWQuY3N0YXQsCkBAIC0xMjgzLDYgKzEyMzcsMTEgQEAKIAogCS8qIENoZWNrIHRoZSByZWFzb24tY29kZSBvZiBhIHVuaXQgY2hlY2sgKi8KIAlpZiAoaXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spIHsKKwkJaWYgKChpcmItPmVjd1swXSAmIGNoLT5zZW5zZV9yYykgPT0gMCkKKwkJCS8qIHByaW50IGl0IG9ubHkgb25jZSAqLworCQkJQ1RDTV9EQkZfVEVYVF8oVFJBQ0UsIENUQ19EQkZfSU5GTywKKwkJCQkiJXMoJXMpOiBzZW5zZT0lMDJ4LCBkcz0lMDJ4IiwKKwkJCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCwgaXJiLT5lY3dbMF0sIGRzdGF0KTsKIAkJY2N3X3VuaXRfY2hlY2soY2gsIGlyYi0+ZWN3WzBdKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEzMjAsMTQgKzEyNzksMTggQEAKIAlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OwogCWludCByYzsKIAotCUNUQ01fREJGX1RFWFRfKFNFVFVQLCBDVENfREJGX0lORk8sICIlcyAlcCIsIF9fRlVOQ1RJT05fXywgY2dkZXYpOworCUNUQ01fREJGX1RFWFRfKFNFVFVQLCBDVENfREJGX0lORk8sCisJCQkiJXMgJXAiLAorCQkJX19mdW5jX18sIGNnZGV2KTsKIAogCWlmICghZ2V0X2RldmljZSgmY2dkZXYtPmRldikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjdGNtX3ByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpIHsKLQkJY3RjbV9wcl9lcnIoIiVzOiBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlczogbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIsCisJCQlDVENNX0ZVTlRBSUwpOwogCQlwdXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTM2NCwxMCArMTMyNywxMyBAQAogCWludCBjY3dfbnVtOwogCWludCByYyA9IDA7CiAKLQlDVENNX0RCRl9URVhUKFRSQUNFLCAyLCBfX0ZVTkNUSU9OX18pOworCUNUQ01fREJGX1RFWFRfKFNFVFVQLCBDVENfREJGX0lORk8sCisJCSIlcyglcyksIHR5cGUgJWQsIHByb3RvICVkIiwKKwkJCV9fZnVuY19fLCBjZGV2LT5kZXYuYnVzX2lkLAl0eXBlLCBwcml2LT5wcm90b2NvbCk7CisKIAljaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGFubmVsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoID09IE5VTEwpCi0JCQkJCWdvdG8gbm9tZW1fcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWNoLT5wcm90b2NvbCA9IHByaXYtPnByb3RvY29sOwogCWlmIChJU19NUEMocHJpdikpIHsKQEAgLTE0NzgsNyArMTQ0NCw3IEBACiAJaWYgKCpjICYmICghc3RybmNtcCgoKmMpLT5pZCwgY2gtPmlkLCBDVENNX0lEX1NJWkUpKSkgewogCQlDVENNX0RCRl9URVhUXyhTRVRVUCwgQ1RDX0RCRl9JTkZPLAogCQkJCSIlcyAoJXMpIGFscmVhZHkgaW4gbGlzdCwgdXNpbmcgb2xkIGVudHJ5IiwKLQkJCQlfX0ZVTkNUSU9OX18sICgqYyktPmlkKTsKKwkJCQlfX2Z1bmNfXywgKCpjKS0+aWQpOwogCiAJCQkJZ290byBmcmVlX3JldHVybjsKIAl9CkBAIC0xNDk4LDExICsxNDY0LDEwIEBACiAJcmV0dXJuIDA7CiAKIG5vbWVtX3JldHVybjoKLQljdGNtX3ByX3dhcm4oImN0Y206IE91dCBvZiBtZW1vcnkgaW4gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmMgPSAtRU5PTUVNOwogCiBmcmVlX3JldHVybjoJLyogbm90ZSB0aGF0IGFsbCBjaGFubmVsIHBvaW50ZXJzIGFyZSAwIG9yIHZhbGlkICovCi0Ja2ZyZWUoY2gtPmNjdyk7CQkvKiBUT0RPOiBjaGVjayB0aGF0IGFnYWluICovCisJa2ZyZWUoY2gtPmNjdyk7CiAJa2ZyZWUoY2gtPmRpc2NvbnRhY3RfdGgpOwogCWtmcmVlX2ZzbShjaC0+ZnNtKTsKIAlrZnJlZShjaC0+aXJiKTsKQEAgLTE1NDAsNDggKzE1MDUsNDggQEAKIAllbnVtIGNoYW5uZWxfdHlwZXMgdHlwZTsKIAlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYwOworCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2MTsKIAlpbnQgcmV0OwogCi0JQ1RDTV9EQkZfVEVYVChTRVRVUCwgQ1RDX0RCRl9JTkZPLCBfX0ZVTkNUSU9OX18pOwotCiAJcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmY2dkZXYtPmRldik7CiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXR5cGUgPSBnZXRfY2hhbm5lbF90eXBlKCZjZ2Rldi0+Y2RldlswXS0+aWQpOworCWNkZXYwID0gY2dkZXYtPmNkZXZbMF07CisJY2RldjEgPSBjZ2Rldi0+Y2RldlsxXTsKIAotCXNucHJpbnRmKHJlYWRfaWQsIENUQ01fSURfU0laRSwgImNoLSVzIiwgY2dkZXYtPmNkZXZbMF0tPmRldi5idXNfaWQpOwotCXNucHJpbnRmKHdyaXRlX2lkLCBDVENNX0lEX1NJWkUsICJjaC0lcyIsIGNnZGV2LT5jZGV2WzFdLT5kZXYuYnVzX2lkKTsKKwl0eXBlID0gZ2V0X2NoYW5uZWxfdHlwZSgmY2RldjAtPmlkKTsKIAotCXJldCA9IGFkZF9jaGFubmVsKGNnZGV2LT5jZGV2WzBdLCB0eXBlLCBwcml2KTsKKwlzbnByaW50ZihyZWFkX2lkLCBDVENNX0lEX1NJWkUsICJjaC0lcyIsIGNkZXYwLT5kZXYuYnVzX2lkKTsKKwlzbnByaW50Zih3cml0ZV9pZCwgQ1RDTV9JRF9TSVpFLCAiY2gtJXMiLCBjZGV2MS0+ZGV2LmJ1c19pZCk7CisKKwlyZXQgPSBhZGRfY2hhbm5lbChjZGV2MCwgdHlwZSwgcHJpdik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQlyZXQgPSBhZGRfY2hhbm5lbChjZ2Rldi0+Y2RldlsxXSwgdHlwZSwgcHJpdik7CisJcmV0ID0gYWRkX2NoYW5uZWwoY2RldjEsIHR5cGUsIHByaXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2dkZXYtPmNkZXZbMF0pOworCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZGV2MCk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCUNUQ01fREJGX1RFWFQoU0VUVVAsIENUQ19EQkZfV0FSTiwKLQkJCQkiY2N3X2RldmljZV9zZXRfb25saW5lIChjZGV2WzBdKSBmYWlsZWQgIik7Ci0JCWN0Y21fcHJfd2FybigiY2N3X2RldmljZV9zZXRfb25saW5lIChjZGV2WzBdKSBmYWlsZWQgIgotCQkJCSJ3aXRoIHJldCA9ICVkXG4iLCByZXQpOworCQkvKiBtYXkgYmUgb2sgdG8gZmFpbCBub3cgLSBjYW4gYmUgZG9uZSBsYXRlciAqLworCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9OT1RJQ0UsCisJCQkiJXMoJXMpIHNldF9vbmxpbmUgcmM9JWQiLAorCQkJCUNUQ01fRlVOVEFJTCwgcmVhZF9pZCwgcmV0KTsKIAl9CiAKLQlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2dkZXYtPmNkZXZbMV0pOworCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZGV2MSk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCUNUQ01fREJGX1RFWFQoU0VUVVAsIENUQ19EQkZfV0FSTiwKLQkJCQkiY2N3X2RldmljZV9zZXRfb25saW5lIChjZGV2WzFdKSBmYWlsZWQgIik7Ci0JCWN0Y21fcHJfd2FybigiY2N3X2RldmljZV9zZXRfb25saW5lIChjZGV2WzFdKSBmYWlsZWQgIgotCQkJCSJ3aXRoIHJldCA9ICVkXG4iLCByZXQpOworCQkvKiBtYXkgYmUgb2sgdG8gZmFpbCBub3cgLSBjYW4gYmUgZG9uZSBsYXRlciAqLworCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9OT1RJQ0UsCisJCQkiJXMoJXMpIHNldF9vbmxpbmUgcmM9JWQiLAorCQkJCUNUQ01fRlVOVEFJTCwgd3JpdGVfaWQsIHJldCk7CiAJfQogCiAJZGV2ID0gY3RjbV9pbml0X25ldGRldmljZShwcml2KTsKLQotCWlmIChkZXYgPT0gTlVMTCkgewotCQljdGNtX3ByX3dhcm4oImN0Y21faW5pdF9uZXRkZXZpY2UgZmFpbGVkXG4iKTsKLQkJCQkJZ290byBvdXQ7Ci0JfQorCWlmIChkZXYgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OwogCiAJZm9yIChkaXJlY3Rpb24gPSBSRUFEOyBkaXJlY3Rpb24gPD0gV1JJVEU7IGRpcmVjdGlvbisrKSB7CiAJCXByaXYtPmNoYW5uZWxbZGlyZWN0aW9uXSA9CkBAIC0xNTkwLDggKzE1NTUsNyBAQAogCQlpZiAocHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dID09IE5VTEwpIHsKIAkJCWlmIChkaXJlY3Rpb24gPT0gV1JJVEUpCiAJCQkJY2hhbm5lbF9mcmVlKHByaXYtPmNoYW5uZWxbUkVBRF0pOwotCQkJY3RjbV9mcmVlX25ldGRldmljZShkZXYpOwotCQkJCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X2RldjsKIAkJfQogCQlwcml2LT5jaGFubmVsW2RpcmVjdGlvbl0tPm5ldGRldiA9IGRldjsKIAkJcHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dLT5wcm90b2NvbCA9IHByaXYtPnByb3RvY29sOwpAQCAtMTYwMCwyNiArMTU2NCwyNCBAQAogCS8qIHN5c2ZzIG1hZ2ljICovCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmY2dkZXYtPmRldik7CiAKLQlpZiAoY3RjbV9uZXRkZXZfcmVnaXN0ZXIoZGV2KSAhPSAwKSB7Ci0JCWN0Y21fZnJlZV9uZXRkZXZpY2UoZGV2KTsKLQkJCQkJZ290byBvdXQ7Ci0JfQorCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkKKwkJCWdvdG8gb3V0X2RldjsKIAogCWlmIChjdGNtX2FkZF9hdHRyaWJ1dGVzKCZjZ2Rldi0+ZGV2KSkgewotCQljdGNtX25ldGRldl91bnJlZ2lzdGVyKGRldik7Ci0vKgkJZGV2LT5wcml2ID0gTlVMTDsJd2h5IHRoYXQgPz8/PwkqLwotCQljdGNtX2ZyZWVfbmV0ZGV2aWNlKGRldik7Ci0JCQkJCWdvdG8gb3V0OworCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQkJZ290byBvdXRfZGV2OwogCX0KIAogCXN0cmxjcHkocHJpdi0+ZnNtLT5uYW1lLCBkZXYtPm5hbWUsIHNpemVvZihwcml2LT5mc20tPm5hbWUpKTsKIAogCUNUQ01fREJGX1RFWFRfKFNFVFVQLCBDVENfREJGX0lORk8sCi0JCQkic2V0dXAoJXMpIG9rIDogci93ID0gJXMgLyAlcywgcHJvdG8gOiAlZCIsCi0JCQlkZXYtPm5hbWUsIHByaXYtPmNoYW5uZWxbUkVBRF0tPmlkLAorCQkic2V0dXAoJXMpIE9LIDogci93ID0gJXMvJXMsIHByb3RvY29sIDogJWQiLCBkZXYtPm5hbWUsCisJCQlwcml2LT5jaGFubmVsW1JFQURdLT5pZCwKIAkJCXByaXYtPmNoYW5uZWxbV1JJVEVdLT5pZCwgcHJpdi0+cHJvdG9jb2wpOwogCiAJcmV0dXJuIDA7CitvdXRfZGV2OgorCWN0Y21fZnJlZV9uZXRkZXZpY2UoZGV2KTsKIG91dDoKIAljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNnZGV2LT5jZGV2WzFdKTsKIAljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNnZGV2LT5jZGV2WzBdKTsKQEAgLTE2NTgsOCArMTYyMCw3IEBACiAJCWNoYW5uZWxfZnJlZShwcml2LT5jaGFubmVsW1dSSVRFXSk7CiAKIAlpZiAoZGV2KSB7Ci0JCWN0Y21fbmV0ZGV2X3VucmVnaXN0ZXIoZGV2KTsKLS8qCQlkZXYtPnByaXYgPSBOVUxMOwl3aHkgdGhhdCA/Pz8JKi8KKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJY3RjbV9mcmVlX25ldGRldmljZShkZXYpOwogCX0KIApAQCAtMTY4MiwxMyArMTY0MywxNiBAQAogCiBzdGF0aWMgdm9pZCBjdGNtX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2dkZXYpCiB7Ci0Jc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZjZ2Rldi0+ZGV2KTsKIAotCUNUQ01fREJGX1RFWFQoU0VUVVAsIENUQ19EQkZfRVJST1IsIF9fRlVOQ1RJT05fXyk7CisJQlVHX09OKHByaXYgPT0gTlVMTCk7CiAKLQlwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZjZ2Rldi0+ZGV2KTsKLQlpZiAoIXByaXYpCi0JCXJldHVybjsKKwlDVENNX0RCRl9URVhUXyhTRVRVUCwgQ1RDX0RCRl9JTkZPLAorCQkJInJlbW92aW5nIGRldmljZSAlcywgci93ID0gJXMvJXMsIHByb3RvIDogJWQiLAorCQkJcHJpdi0+Y2hhbm5lbFtSRUFEXS0+bmV0ZGV2LT5uYW1lLAorCQkJcHJpdi0+Y2hhbm5lbFtSRUFEXS0+aWQsIHByaXYtPmNoYW5uZWxbV1JJVEVdLT5pZCwKKwkJCXByaXYtPnByb3RvY29sKTsKKwogCWlmIChjZ2Rldi0+c3RhdGUgPT0gQ0NXR1JPVVBfT05MSU5FKQogCQljdGNtX3NodXRkb3duX2RldmljZShjZ2Rldik7CiAJY3RjbV9yZW1vdmVfZmlsZXMoJmNnZGV2LT5kZXYpOwpAQCAtMTc0OCw4ICsxNzEyLDYgQEAKIAogCXJldCA9IGN0Y21fcmVnaXN0ZXJfZGJmX3ZpZXdzKCk7CiAJaWYgKHJldCkgewotCQljdGNtX3ByX2NyaXQoImN0Y21faW5pdCBmYWlsZWQgd2l0aCBjdGNtX3JlZ2lzdGVyX2RiZl92aWV3cyAiCi0JCQkJInJjID0gJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCXJldCA9IHJlZ2lzdGVyX2N1MzA4OF9kaXNjaXBsaW5lKCZjdGNtX2dyb3VwX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5oIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uaAppbmRleCA5NWIwYzBiLi5hNzJlMGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmgKQEAgLTIyLDkgKzIyLDkgQEAKIAogI2RlZmluZSBDVENfRFJJVkVSX05BTUUJImN0Y20iCiAjZGVmaW5lIENUQ19ERVZJQ0VfTkFNRQkiY3RjIgotI2RlZmluZSBDVENfREVWSUNFX0dFTkUJImN0YyVkIgogI2RlZmluZSBNUENfREVWSUNFX05BTUUJIm1wYyIKLSNkZWZpbmUgTVBDX0RFVklDRV9HRU5FCSJtcGMlZCIKKyNkZWZpbmUgQ1RDX0RFVklDRV9HRU5FIENUQ19ERVZJQ0VfTkFNRSAiJWQiCisjZGVmaW5lIE1QQ19ERVZJQ0VfR0VORQlNUENfREVWSUNFX05BTUUgIiVkIgogCiAjZGVmaW5lIENIQU5ORUxfRkxBR1NfUkVBRAkwCiAjZGVmaW5lIENIQU5ORUxfRkxBR1NfV1JJVEUJMQpAQCAtNDgsNiArNDgsMzAgQEAKICNkZWZpbmUgY3RjbV9wcl9lcnIoZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBmbXQsICMjYXJnKQogI2RlZmluZSBjdGNtX3ByX2NyaXQoZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX0NSSVQgZm10LCAjI2FyZykKIAorI2RlZmluZSBDVENNX1BSX0RFQlVHKGZtdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChkb19kZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgZm10LCAjI2FyZyk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lCUNUQ01fUFJfREJHREFUQShmbXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAoZG9fZGVidWdfZGF0YSkgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgZm10LCAjI2FyZyk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lCUNUQ01fRDNfRFVNUChidWYsIGxlbikgXAorCWRvIHsgXAorCQlpZiAoZG9fZGVidWdfZGF0YSkgXAorCQkJY3RjbXBjX2R1bXBpdChidWYsIGxlbik7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lCUNUQ01fQ0NXX0RVTVAoYnVmLCBsZW4pIFwKKwlkbyB7IFwKKwkJaWYgKGRvX2RlYnVnX2NjdykgXAorCQkJY3RjbXBjX2R1bXBpdChidWYsIGxlbik7IFwKKwl9IHdoaWxlICgwKQorCiAvKgogICogQ0NXIGNvbW1hbmRzLCB1c2VkIGluIHRoaXMgZHJpdmVyLgogICovCkBAIC0xNjEsOCArMTg1LDkgQEAKIAlmc21faW5zdGFuY2UgKmZzbTsJLyogZmluaXRlIHN0YXRlIG1hY2hpbmUgb2YgdGhpcyBjaGFubmVsICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsJLyogY29ycmVzcG9uZGluZyBuZXRfZGV2aWNlICovCiAJc3RydWN0IGN0Y21fcHJvZmlsZSBwcm9mOwotCXVuc2lnbmVkIGNoYXIgKnRyYW5zX3NrYl9kYXRhOworCV9fdTggKnRyYW5zX3NrYl9kYXRhOwogCV9fdTE2IGxvZ2ZsYWdzOworCV9fdTggIHNlbnNlX3JjOyAvKiBsYXN0IHVuaXQgY2hlY2sgc2Vuc2UgY29kZSByZXBvcnQgY29udHJvbCAqLwogfTsKIAogc3RydWN0IGN0Y21fcHJpdiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKaW5kZXggMDQ0YWRkZS4uNDlhZTFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJZm9yIChjdCA9IDA7IGN0IDwgbGVuOyBjdCsrLCBwdHIrKywgcnB0cisrKSB7CiAJCWlmIChzdyA9PSAwKSB7CiAJCQkjaWYgKFVUU19NQUNISU5FID09IHMzOTB4KQotCQkJc3ByaW50ZihhZGRyLCAiJTE2LjE2bHgiLCAodW5zaWduZWQgbG9uZylycHRyKTsKKwkJCXNwcmludGYoYWRkciwgIiUxNi4xNmx4IiwgKF9fdTY0KXJwdHIpOwogCQkJI2Vsc2UKIAkJCXNwcmludGYoYWRkciwgIiU4LjhYIiwgKF9fdTMyKXJwdHIpOwogCQkJI2VuZGlmCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkJCXN0cmNhdChiaGV4LCAiCSIpOwogCiAJCSNpZiAoVVRTX01BQ0hJTkUgPT0gczM5MHgpCi0JCXNwcmludGYodGJ1ZiwgIiUyLjJsWCIsICh1bnNpZ25lZCBsb25nKSpwdHIpOworCQlzcHJpbnRmKHRidWYsICIlMi4ybFgiLCAoX191NjQpKnB0cik7CiAJCSNlbHNlCiAJCXNwcmludGYodGJ1ZiwgIiUyLjJYIiwgKF9fdTMyKSpwdHIpOwogCQkjZW5kaWYKQEAgLTE3OSwyNCArMTc5LDI0IEBACiAJCWJhc2Nbc3crMV0gPSAnXDAnOwogCQlzdysrOwogCQlybS0tOwotCQlpZiAoc3cgPT0gMTYpIHsKLQkJCWlmICgoc3RyY21wKGR1cGhleCwgYmhleCkpICE9IDApIHsKLQkJCQlpZiAoZHVwICE9IDApIHsKLQkJCQkJc3ByaW50Zih0ZHVwLCAiRHVwbGljYXRlIGFzIGFib3ZlICIKLQkJCQkJCSJ0byAlcyIsIGFkZHIpOwotCQkJCQlwcmludGsoS0VSTl9JTkZPICIJCSAgIgotCQkJCQkJIiAgICAgLS0tICVzIC0tLVxuIiwgdGR1cCk7Ci0JCQkJfQotCQkJCXByaW50ayhLRVJOX0lORk8gIiAgICVzICgrJXMpIDogJXMgIFslc11cbiIsCisJCWlmIChzdyAhPSAxNikKKwkJCWNvbnRpbnVlOworCQlpZiAoKHN0cmNtcChkdXBoZXgsIGJoZXgpKSAhPSAwKSB7CisJCQlpZiAoZHVwICE9IDApIHsKKwkJCQlzcHJpbnRmKHRkdXAsCisJCQkJCSJEdXBsaWNhdGUgYXMgYWJvdmUgdG8gJXMiLCBhZGRyKTsKKwkJCQljdGNtX3ByX2RlYnVnKCIJCSAgICAgICAtLS0gJXMgLS0tXG4iLAorCQkJCQkJdGR1cCk7CisJCQl9CisJCQljdGNtX3ByX2RlYnVnKCIgICAlcyAoKyVzKSA6ICVzICBbJXNdXG4iLAogCQkJCQlhZGRyLCBib2ZmLCBiaGV4LCBiYXNjKTsKLQkJCQlkdXAgPSAwOwotCQkJCXN0cmNweShkdXBoZXgsIGJoZXgpOwotCQkJfSBlbHNlCi0JCQkJZHVwKys7CisJCQlkdXAgPSAwOworCQkJc3RyY3B5KGR1cGhleCwgYmhleCk7CisJCX0gZWxzZQorCQkJZHVwKys7CiAKLQkJCXN3ID0gMDsKLQkJCXJtID0gMTY7Ci0JCX0KKwkJc3cgPSAwOworCQlybSA9IDE2OwogCX0gIC8qIGVuZGZvciAqLwogCiAJaWYgKHN3ICE9IDApIHsKQEAgLTIxMCwxOSArMjEwLDE3IEBACiAJCX0KIAkJaWYgKGR1cCAhPSAwKSB7CiAJCQlzcHJpbnRmKHRkdXAsICJEdXBsaWNhdGUgYXMgYWJvdmUgdG8gJXMiLCBhZGRyKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIgkJICAiCi0JCQkJIiAgICAgLS0tICVzIC0tLVxuIiwgdGR1cCk7CisJCQljdGNtX3ByX2RlYnVnKCIJCSAgICAgICAtLS0gJXMgLS0tXG4iLCB0ZHVwKTsKIAkJfQotCQlwcmludGsoS0VSTl9JTkZPICIgICAlcyAoKyVzKSA6ICVzICBbJXNdXG4iLAotCQkJYWRkciwgYm9mZiwgYmhleCwgYmFzYyk7CisJCWN0Y21fcHJfZGVidWcoIiAgICVzICgrJXMpIDogJXMgIFslc11cbiIsCisJCQkJCWFkZHIsIGJvZmYsIGJoZXgsIGJhc2MpOwogCX0gZWxzZSB7CiAJCWlmIChkdXAgPj0gMSkgewogCQkJc3ByaW50Zih0ZHVwLCAiRHVwbGljYXRlIGFzIGFib3ZlIHRvICVzIiwgYWRkcik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIJCSAgIgotCQkJCSIgICAgIC0tLSAlcyAtLS1cbiIsIHRkdXApOworCQkJY3RjbV9wcl9kZWJ1ZygiCQkgICAgICAgLS0tICVzIC0tLVxuIiwgdGR1cCk7CiAJCX0KIAkJaWYgKGR1cCAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIgICAlcyAoKyVzKSA6ICVzICBbJXNdXG4iLAorCQkJY3RjbV9wcl9kZWJ1ZygiICAgJXMgKCslcykgOiAlcyAgWyVzXVxuIiwKIAkJCQlhZGRyLCBib2ZmLCBiaGV4LCBiYXNjKTsKIAkJfQogCX0KQEAgLTI0MSw3ICsyMzksNyBAQAogICovCiB2b2lkIGN0Y21wY19kdW1wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KQogewotCXVuc2lnbmVkIGNoYXIgKnAgPSBza2ItPmRhdGE7CisJX191OCAqcCA9IHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgdGhfaGVhZGVyICpoZWFkZXI7CiAJc3RydWN0IHBkdSAqcGhlYWRlcjsKIAlpbnQgYmwgPSBza2ItPmxlbjsKQEAgLTI1Myw4ICsyNTEsOCBAQAogCXAgKz0gb2Zmc2V0OwogCWhlYWRlciA9IChzdHJ1Y3QgdGhfaGVhZGVyICopcDsKIAotCXByaW50ayhLRVJOX0lORk8gImR1bXA6XG4iKTsKLQlwcmludGsoS0VSTl9JTkZPICJza2IgbGVuPSVkIFxuIiwgc2tiLT5sZW4pOworCWN0Y21fcHJfZGVidWcoImR1bXA6XG4iKTsKKwljdGNtX3ByX2RlYnVnKCJza2IgbGVuPSVkIFxuIiwgc2tiLT5sZW4pOwogCWlmIChza2ItPmxlbiA+IDIpIHsKIAkJc3dpdGNoIChoZWFkZXItPnRoX2NoX2ZsYWcpIHsKIAkJY2FzZSBUSF9IQVNfUERVOgpAQCAtMjczLDMyICsyNzEsNjQgQEAKIAkJfQogCiAJCXBoZWFkZXIgPSAoc3RydWN0IHBkdSAqKXA7Ci0JCXByaW50ayhLRVJOX0lORk8gInBkdS0+b2Zmc2V0OiAlZCBoZXg6ICUwNHhcbiIsCi0JCSAgICAgICBwaGVhZGVyLT5wZHVfb2Zmc2V0LCBwaGVhZGVyLT5wZHVfb2Zmc2V0KTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGR1LT5mbGFnICA6ICUwMnhcbiIsIHBoZWFkZXItPnBkdV9mbGFnKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGR1LT5wcm90byA6ICUwMnhcbiIsIHBoZWFkZXItPnBkdV9wcm90byk7Ci0JCXByaW50ayhLRVJOX0lORk8gInBkdS0+c2VxICAgOiAlMDJ4XG4iLCBwaGVhZGVyLT5wZHVfc2VxKTsKKwkJY3RjbV9wcl9kZWJ1ZygicGR1LT5vZmZzZXQ6ICVkIGhleDogJTA0eFxuIiwKKwkJCSAgICAgICBwaGVhZGVyLT5wZHVfb2Zmc2V0LCBwaGVhZGVyLT5wZHVfb2Zmc2V0KTsKKwkJY3RjbV9wcl9kZWJ1ZygicGR1LT5mbGFnICA6ICUwMnhcbiIsIHBoZWFkZXItPnBkdV9mbGFnKTsKKwkJY3RjbV9wcl9kZWJ1ZygicGR1LT5wcm90byA6ICUwMnhcbiIsIHBoZWFkZXItPnBkdV9wcm90byk7CisJCWN0Y21fcHJfZGVidWcoInBkdS0+c2VxICAgOiAlMDJ4XG4iLCBwaGVhZGVyLT5wZHVfc2VxKTsKIAkJCQkJZ290byBkdW1wZGF0YTsKIAogZHVtcHRoOgotCQlwcmludGsoS0VSTl9JTkZPICJ0aC0+c2VnICAgICA6ICUwMnhcbiIsIGhlYWRlci0+dGhfc2VnKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAidGgtPmNoICAgICAgOiAlMDJ4XG4iLCBoZWFkZXItPnRoX2NoX2ZsYWcpOwotCQlwcmludGsoS0VSTl9JTkZPICJ0aC0+YmxrX2ZsYWc6ICUwMnhcbiIsIGhlYWRlci0+dGhfYmxrX2ZsYWcpOwotCQlwcmludGsoS0VSTl9JTkZPICJ0aC0+dHlwZSAgICA6ICVzXG4iLAotCQkgICAgICAgKGhlYWRlci0+dGhfaXNfeGlkKSA/ICJEQVRBIiA6ICJYSUQiKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAidGgtPnNlcW51bSAgOiAlMDR4XG4iLCBoZWFkZXItPnRoX3NlcV9udW0pOworCQljdGNtX3ByX2RlYnVnKCJ0aC0+c2VnICAgICA6ICUwMnhcbiIsIGhlYWRlci0+dGhfc2VnKTsKKwkJY3RjbV9wcl9kZWJ1ZygidGgtPmNoICAgICAgOiAlMDJ4XG4iLCBoZWFkZXItPnRoX2NoX2ZsYWcpOworCQljdGNtX3ByX2RlYnVnKCJ0aC0+YmxrX2ZsYWc6ICUwMnhcbiIsIGhlYWRlci0+dGhfYmxrX2ZsYWcpOworCQljdGNtX3ByX2RlYnVnKCJ0aC0+dHlwZSAgICA6ICVzXG4iLAorCQkJICAgICAgIChoZWFkZXItPnRoX2lzX3hpZCkgPyAiREFUQSIgOiAiWElEIik7CisJCWN0Y21fcHJfZGVidWcoInRoLT5zZXFudW0gIDogJTA0eFxuIiwgaGVhZGVyLT50aF9zZXFfbnVtKTsKIAogCX0KIGR1bXBkYXRhOgogCWlmIChibCA+IDMyKQogCQlibCA9IDMyOwotCXByaW50ayhLRVJOX0lORk8gImRhdGE6ICIpOworCWN0Y21fcHJfZGVidWcoImRhdGE6ICIpOwogCWZvciAoaSA9IDA7IGkgPCBibDsgaSsrKQotCQlwcmludGsoS0VSTl9JTkZPICIlMDJ4JXMiLCAqcCsrLCAoaSAlIDE2KSA/ICIgIiA6ICJcbjw3PiIpOwotCXByaW50ayhLRVJOX0lORk8gIlxuIik7CisJCWN0Y21fcHJfZGVidWcoIiUwMnglcyIsICpwKyssIChpICUgMTYpID8gIiAiIDogIlxuIik7CisJY3RjbV9wcl9kZWJ1ZygiXG4iKTsKIH0KICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmN0Y21wY19nZXRfZGV2KGludCBwb3J0X251bSkKK3sKKwljaGFyIGRldmljZVsyMF07CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OworCisJc3ByaW50ZihkZXZpY2UsICIlcyVpIiwgTVBDX0RFVklDRV9OQU1FLCBwb3J0X251bSk7CisKKwlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIGRldmljZSk7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJIiVzOiBEZXZpY2Ugbm90IGZvdW5kIGJ5IG5hbWU6ICVzIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBkZXZpY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcHJpdiA9IGRldi0+cHJpdjsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlcyglcyk6IGRldi0+cHJpdiBpcyBOVUxMIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBkZXZpY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKHByaXYtPm1wY2cgPT0gTlVMTCkgeworCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkiJXMoJXMpOiBwcml2LT5tcGNnIGlzIE5VTEwiLAorCQkJCQlDVENNX0ZVTlRBSUwsIGRldmljZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gZGV2OworfQorCiAvKgogICogY3RjX21wY19hbGxvY19jaGFubmVsCiAgKgkoZXhwb3J0ZWQgaW50ZXJmYWNlKQpAQCAtMzA4LDM0ICszMzgsMjMgQEAKICAqLwogaW50IGN0Y19tcGNfYWxsb2NfY2hhbm5lbChpbnQgcG9ydF9udW0sIHZvaWQgKCpjYWxsYmFjaykoaW50LCBpbnQpKQogewotCWNoYXIgZGV2aWNlWzIwXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKIAlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OwogCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOgklcygpXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0Jc3ByaW50ZihkZXZpY2UsICIlcyVpIiwgTVBDX0RFVklDRV9OQU1FLCBwb3J0X251bSk7Ci0JZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBkZXZpY2UpOwotCi0JaWYgKGRldiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImN0Y19tcGNfYWxsb2NfY2hhbm5lbCAlcyBkZXY9TlVMTFxuIiwgZGV2aWNlKTsKKwlkZXYgPSBjdGNtcGNfZ2V0X2Rldihwb3J0X251bSk7CisJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gMTsKLQl9Ci0KIAlwcml2ID0gZGV2LT5wcml2OwogCWdycCA9IHByaXYtPm1wY2c7Ci0JaWYgKCFncnApCi0JCXJldHVybiAxOwogCiAJZ3JwLT5hbGxvY2hhbmZ1bmMgPSBjYWxsYmFjazsKIAlncnAtPnBvcnRfbnVtID0gcG9ydF9udW07CiAJZ3JwLT5wb3J0X3BlcnNpc3QgPSAxOwogCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcyBjYWxsZWQgZm9yIGRldmljZSAlcyBzdGF0ZT0lc1xuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywKLQkJICAgICAgIGRldi0+bmFtZSwKLQkJICAgICAgIGZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pKTsKKwlDVENNX0RCRl9URVhUXyhNUENfU0VUVVAsIENUQ19EQkZfSU5GTywKKwkJCSIlcyglcyk6IHN0YXRlPSVzIiwKKwkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCBmc21fZ2V0c3RhdGVfc3RyKGdycC0+ZnNtKSk7CiAKIAlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShncnAtPmZzbSkpIHsKIAljYXNlIE1QQ0dfU1RBVEVfSU5PUDoKQEAgLTM3NywxMiArMzk2LDggQEAKIAkJCWdycC0+YWxsb2NjaGFuX2NhbGxiYWNrX3JldHJpZXMgPSAwOwogCQl9CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCiAJfQogCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChjdGNfbXBjX2FsbG9jX2NoYW5uZWwpOwpAQCAtMzk0LDMxICs0MDksMjIgQEAKIHZvaWQgY3RjX21wY19lc3RhYmxpc2hfY29ubmVjdGl2aXR5KGludCBwb3J0X251bSwKIAkJCQl2b2lkICgqY2FsbGJhY2spKGludCwgaW50LCBpbnQpKQogewotCWNoYXIgZGV2aWNlWzIwXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKIAlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OwogCXN0cnVjdCBjaGFubmVsICpyY2gsICp3Y2g7CiAKLQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6CSVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlzcHJpbnRmKGRldmljZSwgIiVzJWkiLCBNUENfREVWSUNFX05BTUUsIHBvcnRfbnVtKTsKLQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIGRldmljZSk7Ci0KLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjX21wY19lc3RhYmxpc2hfY29ubmVjdGl2aXR5ICIKLQkJCQkiJXMgZGV2PU5VTExcbiIsIGRldmljZSk7CisJZGV2ID0gY3RjbXBjX2dldF9kZXYocG9ydF9udW0pOworCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuOwotCX0KIAlwcml2ID0gZGV2LT5wcml2OworCWdycCA9IHByaXYtPm1wY2c7CiAJcmNoID0gcHJpdi0+Y2hhbm5lbFtSRUFEXTsKIAl3Y2ggPSBwcml2LT5jaGFubmVsW1dSSVRFXTsKIAotCWdycCA9IHByaXYtPm1wY2c7Ci0KLQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgY2FsbGVkIGZvciBkZXZpY2UgJXMgc3RhdGU9JXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSwKLQkJCWZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pKTsKKwlDVENNX0RCRl9URVhUXyhNUENfU0VUVVAsIENUQ19EQkZfSU5GTywKKwkJCSIlcyglcyk6IHN0YXRlPSVzIiwKKwkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCBmc21fZ2V0c3RhdGVfc3RyKGdycC0+ZnNtKSk7CiAKIAlncnAtPmVzdGNvbm5mdW5jID0gY2FsbGJhY2s7CiAJZ3JwLT5wb3J0X251bSA9IHBvcnRfbnVtOwpAQCAtNDQ2LDggKzQ1MiwxMCBAQAogCWNhc2UgTVBDR19TVEFURV9SRVNFVDoKIAkJLyogTVBDIEdyb3VwIGlzIG5vdCByZWFkeSB0byBzdGFydCBYSUQgLSBtaW4gbnVtIG9mICovCiAJCS8qIDEgcmVhZCBhbmQgMSB3cml0ZSBjaGFubmVsIGhhdmUgbm90IGJlZW4gYWNxdWlyZWQqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdGNtcGM6ICVzKCkgUkVKRUNURUQgQUNUSVZFIFhJRCBSZXEiCi0JCQkidWVzdCAtIENoYW5uZWwgUGFpciBpcyBub3QgQWN0aXZlXG4iLCBfX0ZVTkNUSU9OX18pOworCisJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlcyglcyk6IFJFSkVDVEVEIC0gaW5hY3RpdmUgY2hhbm5lbHMiLAorCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJCWlmIChncnAtPmVzdGNvbm5mdW5jKSB7CiAJCQlncnAtPmVzdGNvbm5mdW5jKGdycC0+cG9ydF9udW0sIC0xLCAwKTsKIAkJCWdycC0+ZXN0Y29ubmZ1bmMgPSBOVUxMOwpAQCAtNDU3LDExICs0NjUsMTIgQEAKIAkJLyogYWxsb2MgY2hhbm5lbCB3YXMgY2FsbGVkIGJ1dCBubyBYSUQgZXhjaGFuZ2UgICAgKi8KIAkJLyogaGFzIG9jY3VycmVkLiBpbml0aWF0ZSB4c2lkZSBYSUQgZXhjaGFuZ2UJICAgKi8KIAkJLyogbWFrZSBzdXJlIHlzaWRlIFhJRDAgcHJvY2Vzc2luZyBoYXMgbm90IHN0YXJ0ZWQgKi8KKwogCQlpZiAoKGZzbV9nZXRzdGF0ZShyY2gtPmZzbSkgPiBDSF9YSUQwX1BFTkRJTkcpIHx8CiAJCQkoZnNtX2dldHN0YXRlKHdjaC0+ZnNtKSA+IENIX1hJRDBfUEVORElORykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1wYzogJXMoKSBBQk9SVCBBQ1RJVkUgWElEIgotCQkJICAgICAgICIgUmVxdWVzdC0gUEFTU0lWRSBYSUQgaW4gcHJvY2Vzc1xuIgotCQkJICAgICAgICwgX19GVU5DVElPTl9fKTsKKwkJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkiJXMoJXMpOiBBQk9SVCAtIFBBU1NJVkUgWElEIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAkJZ3JwLT5zZW5kX3FsbGNfZGlzYyA9IDE7CkBAIC00NzYsOSArNDg1LDkgQEAKIAkJCQkoZnNtX2dldHN0YXRlKHJjaC0+ZnNtKSA9PSBDSF9YSUQwX1BFTkRJTkcpKQogCQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX1hJRDBETywgcmNoKTsKIAkJZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJtcGM6ICVzKCkgVW5hYmxlIHRvIHN0YXJ0IgotCQkJICAgICAgICIgQUNUSVZFIFhJRDAgb24gcmVhZCBjaGFubmVsXG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkJIiVzKCVzKTogUlgtJXMgbm90IHJlYWR5IGZvciBBQ1RJVkUgWElEMCIsCisJCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCByY2gtPmlkKTsKIAkJCWlmIChncnAtPmVzdGNvbm5mdW5jKSB7CiAJCQkJZ3JwLT5lc3Rjb25uZnVuYyhncnAtPnBvcnRfbnVtLCAtMSwgMCk7CiAJCQkJZ3JwLT5lc3Rjb25uZnVuYyA9IE5VTEw7CkBAIC00OTAsOSArNDk5LDkgQEAKIAkJCQkoZnNtX2dldHN0YXRlKHdjaC0+ZnNtKSA9PSBDSF9YSUQwX1BFTkRJTkcpKQogCQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX1hJRDBETywgd2NoKTsKIAkJZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJtcGM6ICVzKCkgVW5hYmxlIHRvIHN0YXJ0IgotCQkJCSIgQUNUSVZFIFhJRDAgb24gd3JpdGUgY2hhbm5lbFxuIiwKLQkJCQkJX19GVU5DVElPTl9fKTsKKwkJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkiJXMoJXMpOiBXWC0lcyBub3QgcmVhZHkgZm9yIEFDVElWRSBYSUQwIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIHdjaC0+aWQpOwogCQkJaWYgKGdycC0+ZXN0Y29ubmZ1bmMpIHsKIAkJCQlncnAtPmVzdGNvbm5mdW5jKGdycC0+cG9ydF9udW0sIC0xLCAwKTsKIAkJCQlncnAtPmVzdGNvbm5mdW5jID0gTlVMTDsKQEAgLTUwOCw3ICs1MTcsNyBAQAogCX0KIAogZG9uZToKLQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDogICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJQ1RDTV9QUl9ERUJVRygiRXhpdCAlcygpXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuOwogfQogRVhQT1JUX1NZTUJPTChjdGNfbXBjX2VzdGFibGlzaF9jb25uZWN0aXZpdHkpOwpAQCAtNTIwLDQwICs1MjksMjIgQEAKIHZvaWQgY3RjX21wY19kZWFsbG9jX2NoKGludCBwb3J0X251bSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWNoYXIgZGV2aWNlWzIwXTsKIAlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OwogCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKIAotCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjoJJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQlzcHJpbnRmKGRldmljZSwgIiVzJWkiLCBNUENfREVWSUNFX05BTUUsIHBvcnRfbnVtKTsKLQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIGRldmljZSk7Ci0KLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSAlcyBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fLCBkZXZpY2UpOwotCQkJCQlnb3RvIGRvbmU7Ci0JfQotCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiVzICVzKCkgY2FsbGVkIGZvciBkZXZpY2UgJXMgcmVmY291bnQ9JWRcbiIsCi0JCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXywKLQkJCWRldi0+bmFtZSwgYXRvbWljX3JlYWQoJmRldi0+cmVmY250KSk7Ci0KKwlkZXYgPSBjdGNtcGNfZ2V0X2Rldihwb3J0X251bSk7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm47CiAJcHJpdiA9IGRldi0+cHJpdjsKLQlpZiAocHJpdiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzKCkgJXMgcHJpdj1OVUxMXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgZGV2aWNlKTsKLQkJCQkJZ290byBkb25lOwotCX0KLQlmc21fZGVsdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIpOwotCiAJZ3JwID0gcHJpdi0+bXBjZzsKLQlpZiAoZ3JwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSAlcyBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fLCBkZXZpY2UpOwotCQkJCQlnb3RvIGRvbmU7Ci0JfQorCisJQ1RDTV9EQkZfVEVYVF8oTVBDX1NFVFVQLCBDVENfREJGX0RFQlVHLAorCQkJIiVzOiAlczogcmVmY291bnQgPSAlZFxuIiwKKwkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCBhdG9taWNfcmVhZCgmZGV2LT5yZWZjbnQpKTsKKworCWZzbV9kZWx0aW1lcigmcHJpdi0+cmVzdGFydF90aW1lcik7CiAJZ3JwLT5jaGFubmVsc190ZXJtaW5hdGluZyA9IDA7Ci0KIAlmc21fZGVsdGltZXIoJmdycC0+dGltZXIpOwotCiAJZ3JwLT5hbGxvY2hhbmZ1bmMgPSBOVUxMOwogCWdycC0+ZXN0Y29ubmZ1bmMgPSBOVUxMOwogCWdycC0+cG9ydF9wZXJzaXN0ID0gMDsKQEAgLTU2MSw4ICs1NTIsNiBAQAogCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCiAJY3RjbV9jbG9zZShkZXYpOwotZG9uZToKLQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDogICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuOwogfQogRVhQT1JUX1NZTUJPTChjdGNfbXBjX2RlYWxsb2NfY2gpOwpAQCAtNTczLDMyICs1NjIsMjIgQEAKICAqLwogdm9pZCBjdGNfbXBjX2Zsb3dfY29udHJvbChpbnQgcG9ydF9udW0sIGludCBmbG93YykKIHsKLQljaGFyIGRldmljZVsyMF07CiAJc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgbXBjX2dyb3VwICpncnA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgY2hhbm5lbCAqcmNoOwogCWludCBtcGNnX3N0YXRlOwogCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOgklcygpICVpXG4iLCBfX0ZVTkNUSU9OX18sIGZsb3djKTsKLQotCXNwcmludGYoZGV2aWNlLCAiJXMlaSIsIE1QQ19ERVZJQ0VfTkFNRSwgcG9ydF9udW0pOwotCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgZGV2aWNlKTsKLQotCWlmIChkZXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICJjdGNfbXBjX2Zsb3dfY29udHJvbCAlcyBkZXY9TlVMTFxuIiwgZGV2aWNlKTsKKwlkZXYgPSBjdGNtcGNfZ2V0X2Rldihwb3J0X251bSk7CisJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQotCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcyAlcyBjYWxsZWQgXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7Ci0KLQlwcml2ICA9IGRldi0+cHJpdjsKLQlpZiAocHJpdiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImN0Y21wYzolcygpICVzIHByaXY9TlVMTFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZGV2aWNlKTsKLQkJcmV0dXJuOwotCX0KKwlwcml2ID0gZGV2LT5wcml2OwogCWdycCA9IHByaXYtPm1wY2c7CisKKwlDVENNX0RCRl9URVhUXyhNUENfVFJBQ0UsIENUQ19EQkZfREVCVUcsCisJCQkiJXM6ICVzOiBmbG93YyA9ICVkIiwKKwkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSwgZmxvd2MpOworCiAJcmNoID0gcHJpdi0+Y2hhbm5lbFtSRUFEXTsKIAogCW1wY2dfc3RhdGUgPSBmc21fZ2V0c3RhdGUoZ3JwLT5mc20pOwpAQCAtNjI5LDcgKzYwOCw2IEBACiAJCWJyZWFrOwogCX0KIAotCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0OiAgJXMoKSAlaVxuIiwgX19GVU5DVElPTl9fLCBmbG93Yyk7CiB9CiBFWFBPUlRfU1lNQk9MKGN0Y19tcGNfZmxvd19jb250cm9sKTsKIApAQCAtNjQ2LDEyICs2MjQsOCBAQAogCXN0cnVjdCBtcGNfZ3JvdXAgICpncnAgPSBwcml2LT5tcGNnOwogCXN0cnVjdCBjaGFubmVsCSAgKmNoID0gcHJpdi0+Y2hhbm5lbFtXUklURV07CiAKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMoKTogY2g9MHglcCBpZD0lc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgY2gsIGNoLT5pZCk7Ci0KLQlpZiAoZG9fZGVidWdfZGF0YSkKLQkJY3RjbXBjX2R1bXBpdCgoY2hhciAqKW1wY2dpbmZvLT5zd2VlcCwgVEhfU1dFRVBfTEVOR1RIKTsKKwlDVENNX1BSX0RFQlVHKCIlczogY2g9MHglcCBpZD0lc1xuIiwgX19mdW5jX18sIGNoLCBjaC0+aWQpOworCUNUQ01fRDNfRFVNUCgoY2hhciAqKW1wY2dpbmZvLT5zd2VlcCwgVEhfU1dFRVBfTEVOR1RIKTsKIAogCWdycC0+c3dlZXBfcnNwX3BlbmRfbnVtLS07CiAKQEAgLTY4NCwxNCArNjU4LDEzIEBACiAJc3RydWN0IHNrX2J1ZmYgKnN3ZWVwX3NrYjsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2ggID0gcHJpdi0+Y2hhbm5lbFtXUklURV07CiAKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0IDogJXMoKTogY2g9MHglcCBpZD0lc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgcmNoLCByY2gtPmlkKTsKKwlDVENNX1BSX0RFQlVHKCIlczogY2g9MHglcCBpZD0lc1xuIiwgX19mdW5jX18sIHJjaCwgcmNoLT5pZCk7CiAKLQlzd2VlcF9za2IgPSBfX2Rldl9hbGxvY19za2IoTVBDX0JVRlNJWkVfREVGQVVMVCwKLQkJCQkgICAgR0ZQX0FUT01JQ3xHRlBfRE1BKTsKKwlzd2VlcF9za2IgPSBfX2Rldl9hbGxvY19za2IoTVBDX0JVRlNJWkVfREVGQVVMVCwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCWlmIChzd2VlcF9za2IgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICJDb3VsZG4ndCBhbGxvYyBzd2VlcF9za2JcbiIpOworCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkiJXMoJXMpOiBzd2VlcF9za2IgYWxsb2NhdGlvbiBFUlJPUlxuIiwKKwkJCUNUQ01fRlVOVEFJTCwgcmNoLT5pZCk7CiAJCXJjID0gLUVOT01FTTsKIAkJCQlnb3RvIGRvbmU7CiAJfQpAQCAtNzQ2LDcgKzcxOSw3IEBACiAKIAlpZiAoZG9fZGVidWcpCiAJCUNUQ01fREJGX1RFWFRfKE1QQ19UUkFDRSwgQ1RDX0RCRl9ERUJVRywKLQkJCSIgJXMoKTogY2g9MHglcCBpZD0lc1xuIiwgX19GVU5DVElPTl9fLCBjaCwgY2gtPmlkKTsKKwkJCSIgJXMoKTogY2g9MHglcCBpZD0lc1xuIiwgX19mdW5jX18sIGNoLCBjaC0+aWQpOwogCiAJaWYgKGdycC0+aW5fc3dlZXAgPT0gMCkgewogCQlncnAtPmluX3N3ZWVwID0gMTsKQEAgLTc1NSw4ICs3MjgsNyBAQAogCQlncnAtPnN3ZWVwX3JzcF9wZW5kX251bSA9IGdycC0+YWN0aXZlX2NoYW5uZWxzW1JFQURdOwogCX0KIAotCWlmIChkb19kZWJ1Z19kYXRhKQotCQljdGNtcGNfZHVtcGl0KChjaGFyICopbXBjZ2luZm8tPnN3ZWVwLCBUSF9TV0VFUF9MRU5HVEgpOworCUNUQ01fRDNfRFVNUCgoY2hhciAqKW1wY2dpbmZvLT5zd2VlcCwgVEhfU1dFRVBfTEVOR1RIKTsKIAogCWdycC0+c3dlZXBfcmVxX3BlbmRfbnVtLS07CiAJY3RjbXBjX3NlbmRfc3dlZXBfcmVzcChjaCk7CkBAIC04NzUsMjUgKzg0NywxMyBAQAogc3RhdGljIHZvaWQgbXBjX2FjdGlvbl9nb19yZWFkeShmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFyZzsKLQlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gTlVMTDsKLQlzdHJ1Y3QgbXBjX2dyb3VwICpncnAgPSBOVUxMOworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAqZ3JwID0gcHJpdi0+bXBjZzsKIAotCWlmIChkZXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcygpIGRldj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm47Ci0JfQotCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcyAgJXMoKVxuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOwotCi0JcHJpdiA9IGRldi0+cHJpdjsKLQlpZiAocHJpdiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzKCkgcHJpdj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm47Ci0JfQotCi0JZ3JwID0gcHJpdi0+bXBjZzsKIAlpZiAoZ3JwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBncnA9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJIiVzKCVzKTogTm8gTVBDIGdyb3VwIiwKKwkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTkwNyw3ICs4NjcsMTIgQEAKIAkJCWdycC0+ZXN0Y29ubmZ1bmMgPSBOVUxMOwogCQl9IGVsc2UgaWYgKGdycC0+YWxsb2NoYW5mdW5jKQogCQkJZ3JwLT5zZW5kX3FsbGNfZGlzYyA9IDE7Ci0JCQkJCWdvdG8gZG9uZTsKKworCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCSIlcyglcyk6IGZhaWxzIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOworCQlyZXR1cm47CiAJfQogCiAJZ3JwLT5wb3J0X3BlcnNpc3QgPSAxOwpAQCAtOTE2LDE0ICs4ODEsNyBAQAogCiAJdGFza2xldF9oaV9zY2hlZHVsZSgmZ3JwLT5tcGNfdGFza2xldDIpOwogCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICVzICAlcygpXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuOwotCi1kb25lOgotCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwotCi0KLQljdGNtX3ByX2luZm8oImN0Y21wYzogJXMoKWZhaWx1cmUgb2NjdXJyZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiB9CiAKIC8qCkBAIC05MzMsNDIgKzg5MSwyOCBAQAogdm9pZCBtcGNfZ3JvdXBfcmVhZHkodW5zaWduZWQgbG9uZyBhZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilhZGV2OwotCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBOVUxMOwotCXN0cnVjdCBtcGNfZ3JvdXAgICpncnAgPSBOVUxMOworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAqZ3JwID0gcHJpdi0+bXBjZzsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBOVUxMOwogCi0KLQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6CSVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYgPSBkZXYtPnByaXY7Ci0JaWYgKHByaXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcygpIHByaXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuOwotCX0KLQotCWdycCA9IHByaXYtPm1wY2c7CiAJaWYgKGdycCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImN0Y21wYzolcygpIGdycD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkiJXMoJXMpOiBObyBNUEMgZ3JvdXAiLAorCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAotCXByaW50ayhLRVJOX05PVElDRSAiY3RjbXBjOiAlcyBHUk9VUCBUUkFOU0lUSU9ORUQgVE8gUkVBRFkiCi0JICAgICAgICIgIG1heGJ1ZjolZFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBncnAtPmdyb3VwX21heF9idWZsZW4pOworCUNUQ01fREJGX1RFWFRfKE1QQ19TRVRVUCwgQ1RDX0RCRl9OT1RJQ0UsCisJCSIlczogJXM6IEdST1VQIFRSQU5TSVRJT05FRCBUTyBSRUFEWSwgbWF4YnVmID0gJWRcbiIsCisJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSwgZ3JwLT5ncm91cF9tYXhfYnVmbGVuKTsKIAogCWZzbV9uZXdzdGF0ZShncnAtPmZzbSwgTVBDR19TVEFURV9SRUFEWSk7CiAKIAkvKiBQdXQgdXAgYSByZWFkIG9uIHRoZSBjaGFubmVsICovCiAJY2ggPSBwcml2LT5jaGFubmVsW1JFQURdOwogCWNoLT5wZHVfc2VxID0gMDsKLQlpZiAoZG9fZGVidWdfZGF0YSkKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIFRvRENNX3BkdV9zZXE9ICUwOHhcbiIgLAotCQkJX19GVU5DVElPTl9fLCBjaC0+cGR1X3NlcSk7CisJQ1RDTV9QUl9EQkdEQVRBKCJjdGNtcGM6ICVzKCkgVG9EQ01fcGR1X3NlcT0gJTA4eFxuIiAsCisJCQlfX2Z1bmNfXywgY2gtPnBkdV9zZXEpOwogCiAJY3RjbXBjX2NoeF9yeGlkbGUoY2gtPmZzbSwgQ1RDX0VWRU5UX1NUQVJULCBjaCk7CiAJLyogUHV0IHRoZSB3cml0ZSBjaGFubmVsIGluIGlkbGUgc3RhdGUgKi8KQEAgLTk4MCwyMiArOTI0LDE4IEBACiAJCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKIAl9CiAJY3RjbV9jaHhfdHhpZGxlKGNoLT5mc20sIENUQ19FVkVOVF9TVEFSVCwgY2gpOwotCiAJY3RjbV9jbGVhcl9idXN5KGRldik7CiAKIAlpZiAoZ3JwLT5lc3Rjb25uZnVuYykgewogCQlncnAtPmVzdGNvbm5mdW5jKGdycC0+cG9ydF9udW0sIDAsCiAJCQkJICAgIGdycC0+Z3JvdXBfbWF4X2J1Zmxlbik7CiAJCWdycC0+ZXN0Y29ubmZ1bmMgPSBOVUxMOwotCX0gZWxzZQotCQlpZiAoZ3JwLT5hbGxvY2hhbmZ1bmMpCi0JCWdycC0+YWxsb2NoYW5mdW5jKGdycC0+cG9ydF9udW0sCi0JCQkJICAgICBncnAtPmdyb3VwX21heF9idWZsZW4pOworCX0gZWxzZSAJaWYgKGdycC0+YWxsb2NoYW5mdW5jKQorCQlncnAtPmFsbG9jaGFuZnVuYyhncnAtPnBvcnRfbnVtLCBncnAtPmdyb3VwX21heF9idWZsZW4pOwogCiAJZ3JwLT5zZW5kX3FsbGNfZGlzYyA9IDE7CiAJZ3JwLT5jaGFuZ2VkX3NpZGUgPSAwOwogCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybjsKIAogfQpAQCAtMTAwNCw1MSArOTQ0LDI2IEBACiAgKiBJbmNyZW1lbnQgdGhlIE1QQyBHcm91cCBBY3RpdmUgQ2hhbm5lbCBDb3VudHMKICAqIGhlbHBlciBvZiBkZXZfYWN0aW9uIChjYWxsZWQgZnJvbSBjaGFubmVsIGZzbSkKICAqLwotaW50IG1wY19jaGFubmVsX2FjdGlvbihzdHJ1Y3QgY2hhbm5lbCAqY2gsIGludCBkaXJlY3Rpb24sIGludCBhY3Rpb24pCit2b2lkIG1wY19jaGFubmVsX2FjdGlvbihzdHJ1Y3QgY2hhbm5lbCAqY2gsIGludCBkaXJlY3Rpb24sIGludCBhY3Rpb24pCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgICAgID0gY2gtPm5ldGRldjsKLQlzdHJ1Y3QgY3RjbV9wcml2ICAgICpwcml2OwotCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwICA9IE5VTEw7Ci0JaW50CSAgICByYyA9IDA7Ci0KLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMoKTogY2g9MHglcCBpZD0lc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgY2gsIGNoLT5pZCk7Ci0KLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjbXBjX2NoYW5uZWxfYWN0aW9uICVpIGRldj1OVUxMXG4iLAotCQkgICAgICAgYWN0aW9uKTsKLQkJcmMgPSAxOwotCQkJCQlnb3RvIGRvbmU7Ci0JfQotCi0JcHJpdiA9IGRldi0+cHJpdjsKLQlpZiAocHJpdiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJjdGNtcGNfY2hhbm5lbF9hY3Rpb24laSBwcml2PU5VTEwsIGRldj0lc1xuIiwKLQkJICAgICAgIGFjdGlvbiwgZGV2LT5uYW1lKTsKLQkJcmMgPSAyOwotCQkJCQlnb3RvIGRvbmU7Ci0JfQotCi0JZ3JwID0gcHJpdi0+bXBjZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAgKmRldiAgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgICAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICAgKmdycCAgPSBwcml2LT5tcGNnOwogCiAJaWYgKGdycCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImN0Y21wYzogJXMoKSVpIG1wY2dyb3VwPU5VTEwsIGRldj0lc1xuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgYWN0aW9uLCBkZXYtPm5hbWUpOwotCQlyYyA9IDM7Ci0JCQkJCWdvdG8gZG9uZTsKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJIiVzKCVzKTogTm8gTVBDIGdyb3VwIiwKKwkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CisJCXJldHVybjsKIAl9CiAKLQljdGNtX3ByX2luZm8oCi0JCSAgICAgICJjdGNtcGM6ICVzKCkgJWkoKTogR3JwOiVzIHRvdGFsX2NoYW5uZWxfcGF0aHM9JWkgIgotCQkgICAgICAiYWN0aXZlX2NoYW5uZWxzIHJlYWQ9JWksIHdyaXRlPSVpXG4iLAotCQkgICAgICBfX0ZVTkNUSU9OX18sCi0JCSAgICAgIGFjdGlvbiwKLQkJICAgICAgZnNtX2dldHN0YXRlX3N0cihncnAtPmZzbSksCi0JCSAgICAgIGdycC0+bnVtX2NoYW5uZWxfcGF0aHMsCi0JCSAgICAgIGdycC0+YWN0aXZlX2NoYW5uZWxzW1JFQURdLAotCQkgICAgICBncnAtPmFjdGl2ZV9jaGFubmVsc1tXUklURV0pOworCUNUQ01fUFJfREVCVUcoImVudGVyICVzOiBjaD0weCVwIGlkPSVzXG4iLCBfX2Z1bmNfXywgY2gsIGNoLT5pZCk7CisKKwlDVENNX0RCRl9URVhUXyhNUENfVFJBQ0UsIENUQ19EQkZfTk9USUNFLAorCQkiJXM6ICVpIC8gR3JwOiVzIHRvdGFsX2NoYW5uZWxzPSVpLCBhY3RpdmVfY2hhbm5lbHM6ICIKKwkJInJlYWQ9JWksIHdyaXRlPSVpXG4iLCBfX2Z1bmNfXywgYWN0aW9uLAorCQlmc21fZ2V0c3RhdGVfc3RyKGdycC0+ZnNtKSwgZ3JwLT5udW1fY2hhbm5lbF9wYXRocywKKwkJZ3JwLT5hY3RpdmVfY2hhbm5lbHNbUkVBRF0sIGdycC0+YWN0aXZlX2NoYW5uZWxzW1dSSVRFXSk7CiAKIAlpZiAoKGFjdGlvbiA9PSBNUENfQ0hBTk5FTF9BREQpICYmIChjaC0+aW5fbXBjZ3JvdXAgPT0gMCkpIHsKIAkJZ3JwLT5udW1fY2hhbm5lbF9wYXRocysrOwpAQCAtMTA2MiwxMCArOTc3LDExIEBACiAJCWNoLT54aWRfc2tiID0gX19kZXZfYWxsb2Nfc2tiKE1QQ19CVUZTSVpFX0RFRkFVTFQsCiAJCQkJCUdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKIAkJaWYgKGNoLT54aWRfc2tiID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImN0Y21wYzogJXMoKSIKLQkJCSAgICAgICAiQ291bGRuJ3QgYWxsb2MgY2ggeGlkX3NrYlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkiJXMoJXMpOiBDb3VsZG4ndCBhbGxvYyBjaCB4aWRfc2tiXG4iLAorCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lKTsKIAkJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm47CiAJCX0KIAkJY2gtPnhpZF9za2JfZGF0YSA9IGNoLT54aWRfc2tiLT5kYXRhOwogCQljaC0+eGlkX3RoID0gKHN0cnVjdCB0aF9oZWFkZXIgKiljaC0+eGlkX3NrYi0+ZGF0YTsKQEAgLTEwOTcsOCArMTAxMyw5IEBACiAJCSAgICAoZ3JwLT5hY3RpdmVfY2hhbm5lbHNbV1JJVEVdID4gMCkgJiYKIAkJCShmc21fZ2V0c3RhdGUoZ3JwLT5mc20pIDwgTVBDR19TVEFURV9YSUQySU5JVFcpKSB7CiAJCQlmc21fbmV3c3RhdGUoZ3JwLT5mc20sIE1QQ0dfU1RBVEVfWElEMklOSVRXKTsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiY3RjbXBjOiAlcyBNUEMgR1JPVVAgIgotCQkJCQkiQ0hBTk5FTFMgQUNUSVZFXG4iLCBkZXYtPm5hbWUpOworCQkJQ1RDTV9EQkZfVEVYVF8oTVBDX1NFVFVQLCBDVENfREJGX05PVElDRSwKKwkJCQkiJXM6ICVzOiBNUEMgR1JPVVAgQ0hBTk5FTFMgQUNUSVZFXG4iLAorCQkJCQkJX19mdW5jX18sIGRldi0+bmFtZSk7CiAJCX0KIAl9IGVsc2UgaWYgKChhY3Rpb24gPT0gTVBDX0NIQU5ORUxfUkVNT1ZFKSAmJgogCQkJKGNoLT5pbl9tcGNncm91cCA9PSAxKSkgewpAQCAtMTExOSwyNSArMTAzNiwxNCBAQAogCQkJCQkoZ3JwLT5hY3RpdmVfY2hhbm5lbHNbUkVBRF0gPiAwKSkpCiAJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKIAl9Ci0KIGRvbmU6CisJQ1RDTV9EQkZfVEVYVF8oTVBDX1RSQUNFLCBDVENfREJGX0RFQlVHLAorCQkiZXhpdCAlczogJWkgLyBHcnA6JXMgdG90YWxfY2hhbm5lbHM9JWksIGFjdGl2ZV9jaGFubmVsczogIgorCQkicmVhZD0laSwgd3JpdGU9JWlcbiIsIF9fZnVuY19fLCBhY3Rpb24sCisJCWZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pLCBncnAtPm51bV9jaGFubmVsX3BhdGhzLAorCQlncnAtPmFjdGl2ZV9jaGFubmVsc1tSRUFEXSwgZ3JwLT5hY3RpdmVfY2hhbm5lbHNbV1JJVEVdKTsKIAotCWlmIChkb19kZWJ1ZykgewotCQljdGNtX3ByX2RlYnVnKAotCQkgICAgICAgImN0Y21wYzogJXMoKSAlaSBHcnA6JXMgdHRsX2NoYW5fcGF0aHM9JWkgIgotCQkgICAgICAgImFjdGl2ZV9jaGFucyByZWFkPSVpLCB3cml0ZT0laVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywKLQkJICAgICAgIGFjdGlvbiwKLQkJICAgICAgIGZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pLAotCQkgICAgICAgZ3JwLT5udW1fY2hhbm5lbF9wYXRocywKLQkJICAgICAgIGdycC0+YWN0aXZlX2NoYW5uZWxzW1JFQURdLAotCQkgICAgICAgZ3JwLT5hY3RpdmVfY2hhbm5lbHNbV1JJVEVdKTsKLQotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdCA6ICVzKCk6IGNoPTB4JXAgaWQ9JXNcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBjaCwgY2gtPmlkKTsKLQl9Ci0JcmV0dXJuIHJjOwotCisJQ1RDTV9QUl9ERUJVRygiZXhpdCAlczogY2g9MHglcCBpZD0lc1xuIiwgX19mdW5jX18sIGNoLCBjaC0+aWQpOwogfQogCiAvKioKQEAgLTExNjMsOSArMTA2OSw4IEBACiAJaW50IHNrYmxlbjsKIAlpbnQgc2VuZHJjID0gMDsKIAotCWlmIChkb19kZWJ1ZykKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcygpICVzIGNwOiVpIGNoOiVzXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBkZXYtPm5hbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gtPmlkKTsKKwlDVENNX1BSX0RFQlVHKCJjdGNtcGMgZW50ZXI6ICVzKCkgJXMgY3A6JWkgY2g6JXNcbiIsCisJCQlfX2Z1bmNfXywgZGV2LT5uYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLT5pZCk7CiAKIAloZWFkZXIgPSAoc3RydWN0IHRoX2hlYWRlciAqKXBza2ItPmRhdGE7CiAJaWYgKChoZWFkZXItPnRoX3NlZyA9PSAwKSAmJgpAQCAtMTE3NCwyMSArMTA3OSwxNiBAQAogCQkoaGVhZGVyLT50aF9zZXFfbnVtID09IDApKQogCQkvKiBub3RoaW5nIGZvciB1cyAqLwlnb3RvIGRvbmU7CiAKLQlpZiAoZG9fZGVidWdfZGF0YSkgewotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgdGhfaGVhZGVyXG4iLCBfX0ZVTkNUSU9OX18pOwotCQljdGNtcGNfZHVtcGl0KChjaGFyICopaGVhZGVyLCBUSF9IRUFERVJfTEVOR1RIKTsKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIHBza2IgbGVuOiAlMDR4IFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcHNrYi0+bGVuKTsKLQl9CisJQ1RDTV9QUl9EQkdEQVRBKCIlczogdGhfaGVhZGVyXG4iLCBfX2Z1bmNfXyk7CisJQ1RDTV9EM19EVU1QKChjaGFyICopaGVhZGVyLCBUSF9IRUFERVJfTEVOR1RIKTsKKwlDVENNX1BSX0RCR0RBVEEoIiVzOiBwc2tiIGxlbjogJTA0eCBcbiIsIF9fZnVuY19fLCBwc2tiLT5sZW4pOwogCiAJcHNrYi0+ZGV2ID0gZGV2OwogCXBza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCXNrYl9wdWxsKHBza2IsIFRIX0hFQURFUl9MRU5HVEgpOwogCiAJaWYgKGxpa2VseShoZWFkZXItPnRoX2NoX2ZsYWcgPT0gVEhfSEFTX1BEVSkpIHsKLQkJaWYgKGRvX2RlYnVnX2RhdGEpCi0JCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgY2FtZSBpbnRvIHRoX2hhc19wZHVcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJQ1RDTV9QUl9EQkdEQVRBKCIlczogY2FtZSBpbnRvIHRoX2hhc19wZHVcbiIsIF9fZnVuY19fKTsKIAkJaWYgKChmc21fZ2V0c3RhdGUoZ3JwLT5mc20pID09IE1QQ0dfU1RBVEVfRkxPV0MpIHx8CiAJCSAgICgoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSA9PSBNUENHX1NUQVRFX1JFQURZKSAmJgogCQkgICAgKGhlYWRlci0+dGhfc2VxX251bSAhPSBjaC0+dGhfc2VxX251bSArIDEpICYmCkBAIC0xMjAyLDMzICsxMTAyLDI5IEBACiAJCQlncnAtPm91dF9vZl9zZXF1ZW5jZSArPSAxOwogCQkJX19za2JfcHVzaChwc2tiLCBUSF9IRUFERVJfTEVOR1RIKTsKIAkJCXNrYl9xdWV1ZV90YWlsKCZjaC0+aW9fcXVldWUsIHBza2IpOwotCQkJaWYgKGRvX2RlYnVnX2RhdGEpCi0JCQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIHRoX3NlcV9udW0gIgotCQkJCSAgICAgICAiZXhwZWN0OiUwOHggZ290OiUwOHhcbiIsIF9fRlVOQ1RJT05fXywKLQkJCQkgICAgICAgY2gtPnRoX3NlcV9udW0gKyAxLCBoZWFkZXItPnRoX3NlcV9udW0pOworCQkJQ1RDTV9QUl9EQkdEQVRBKCIlczogdGhfc2VxX251bSBleHBlY3Q6JTA4eCAiCisJCQkJCSJnb3Q6JTA4eFxuIiwgX19mdW5jX18sCisJCQkJY2gtPnRoX3NlcV9udW0gKyAxLCBoZWFkZXItPnRoX3NlcV9udW0pOwogCiAJCQlyZXR1cm47CiAJCX0KIAkJZ3JwLT5vdXRfb2Zfc2VxdWVuY2UgPSAwOwogCQljaC0+dGhfc2VxX251bSA9IGhlYWRlci0+dGhfc2VxX251bTsKIAotCQlpZiAoZG9fZGVidWdfZGF0YSkKLQkJCWN0Y21fcHJfZGVidWcoImN0Y21wYzogJXMoKSBGcm9tVlRBTV90aF9zZXE9JTA4eFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoLT50aF9zZXFfbnVtKTsKKwkJQ1RDTV9QUl9EQkdEQVRBKCJjdGNtcGM6ICVzKCkgRnJvbVZUQU1fdGhfc2VxPSUwOHhcbiIsCisJCQkJCV9fZnVuY19fLCBjaC0+dGhfc2VxX251bSk7CiAKIAkJaWYgKHVubGlrZWx5KGZzbV9nZXRzdGF0ZShncnAtPmZzbSkgIT0gTVBDR19TVEFURV9SRUFEWSkpCiAJCQkJCWdvdG8gZG9uZTsKIAkJcGR1X2xhc3Rfc2VlbiA9IDA7CiAJCXdoaWxlICgocHNrYi0+bGVuID4gMCkgJiYgIXBkdV9sYXN0X3NlZW4pIHsKIAkJCWN1cnJfcGR1ID0gKHN0cnVjdCBwZHUgKilwc2tiLT5kYXRhOwotCQkJaWYgKGRvX2RlYnVnX2RhdGEpIHsKLQkJCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpIHBkdV9oZWFkZXJcbiIsCi0JCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQkJY3RjbXBjX2R1bXBpdCgoY2hhciAqKXBza2ItPmRhdGEsCi0JCQkJCQlQRFVfSEVBREVSX0xFTkdUSCk7Ci0JCQkJY3RjbV9wcl9kZWJ1ZygiY3RjbTogJXMoKSBwc2tiIGxlbjogJTA0eCBcbiIsCi0JCQkJICAgICAgIF9fRlVOQ1RJT05fXywgcHNrYi0+bGVuKTsKLQkJCX0KKworCQkJQ1RDTV9QUl9EQkdEQVRBKCIlczogcGR1X2hlYWRlclxuIiwgX19mdW5jX18pOworCQkJQ1RDTV9EM19EVU1QKChjaGFyICopcHNrYi0+ZGF0YSwgUERVX0hFQURFUl9MRU5HVEgpOworCQkJQ1RDTV9QUl9EQkdEQVRBKCIlczogcHNrYiBsZW46ICUwNHggXG4iLAorCQkJCQkJX19mdW5jX18sIHBza2ItPmxlbik7CisKIAkJCXNrYl9wdWxsKHBza2IsIFBEVV9IRUFERVJfTEVOR1RIKTsKIAogCQkJaWYgKGN1cnJfcGR1LT5wZHVfZmxhZyAmIFBEVV9MQVNUKQpAQCAtMTIzOSw0NiArMTEzNSwzOSBAQAogCQkJCXBza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfU05BX0RJWCk7CiAKIAkJCWlmICgocHNrYi0+bGVuIDw9IDApIHx8IChwc2tiLT5sZW4gPiBjaC0+bWF4X2J1ZnNpemUpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSAgICAgICAiJXMgSWxsZWdhbCBwYWNrZXQgc2l6ZSAlZCAiCi0JCQkJICAgICAgICJyZWNlaXZlZCAiCi0JCQkJICAgICAgICJkcm9wcGluZ1xuIiwgZGV2LT5uYW1lLAotCQkJCSAgICAgICBwc2tiLT5sZW4pOworCQkJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkJIiVzKCVzKTogRHJvcHBpbmcgcGFja2V0IHdpdGggIgorCQkJCQkiaWxsZWdhbCBzaWl6ZSAlZCIsCisJCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCBwc2tiLT5sZW4pOworCiAJCQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQkJZ290byBkb25lOwogCQkJfQogCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIocHNrYik7CiAJCQluZXdfbGVuID0gY3Vycl9wZHUtPnBkdV9vZmZzZXQ7Ci0JCQlpZiAoZG9fZGVidWdfZGF0YSkKLQkJCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgbmV3X2xlbjogJTA0eCBcbiIsCi0JCQkJICAgICAgIF9fRlVOQ1RJT05fXywgbmV3X2xlbik7CisJCQlDVENNX1BSX0RCR0RBVEEoIiVzOiBuZXdfbGVuOiAlMDR4IFxuIiwKKwkJCQkJCV9fZnVuY19fLCBuZXdfbGVuKTsKIAkJCWlmICgobmV3X2xlbiA9PSAwKSB8fCAobmV3X2xlbiA+IHBza2ItPmxlbikpIHsKIAkJCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuCQkgICAgKi8KIAkJCQkvKiBwc2tiIGxlbiBtdXN0IGJlIGhvc2VkLi4uYmFpbCBvdXQgKi8KLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICJjdGNtcGM6ICVzKCk6IGludmFsaWQgcGR1IgotCQkJCSAgICAgICAiIG9mZnNldCBvZiAlMDR4IC0gZGF0YSBtYXkgYmUiCi0JCQkJICAgICAgICJsb3N0XG4iLCBfX0ZVTkNUSU9OX18sIG5ld19sZW4pOwotCQkJCQkJZ290byBkb25lOworCQkJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkJIiVzKCVzKTogbm9uIHZhbGlkIHBkdV9vZmZzZXQ6ICUwNHgiLAorCQkJCQkvKiAiZGF0YSBtYXkgYmUgbG9zdCIsICovCisJCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lLCBuZXdfbGVuKTsKKwkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCQlza2IgPSBfX2Rldl9hbGxvY19za2IobmV3X2xlbis0LCBHRlBfQVRPTUlDKTsKIAogCQkJaWYgKCFza2IpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICJjdGNtOiAlcyBPdXQgb2YgbWVtb3J5IGluICIKLQkJCQkgICAgICAgIiVzKCktIHJlcXVlc3QtbGVuOiUwNHggXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsCi0JCQkJICAgICAgIF9fRlVOQ1RJT05fXywKLQkJCQkgICAgICAgbmV3X2xlbis0KTsKKwkJCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkJCSIlcyglcyk6IE1FTU9SWSBhbGxvY2F0aW9uIGVycm9yIiwKKwkJCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lKTsKIAkJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJZnNtX2V2ZW50KGdycC0+ZnNtLAotCQkJCQkgIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKIAkJCQkJCWdvdG8gZG9uZTsKIAkJCX0KLQotCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBuZXdfbGVuKSwKLQkJCQkJcHNrYi0+ZGF0YSwgbmV3X2xlbik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIG5ld19sZW4pLCBwc2tiLT5kYXRhLCBuZXdfbGVuKTsKIAogCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAkJCXNrYi0+ZGV2ID0gcHNrYi0+ZGV2OwpAQCAtMTI4NywxNyArMTE3NiwxNCBAQAogCQkJKigoX191MzIgKikgc2tiX3B1c2goc2tiLCA0KSkgPSBjaC0+cGR1X3NlcTsKIAkJCWNoLT5wZHVfc2VxKys7CiAKLQkJCWlmIChkb19kZWJ1Z19kYXRhKQotCQkJCWN0Y21fcHJfZGVidWcoIiVzOiBUb0RDTV9wZHVfc2VxPSAlMDh4XG4iLAotCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoLT5wZHVfc2VxKTsKLQotCQkJY3RjbV9wcl9kZWJ1ZygiY3RjbTogJXMoKSBza2I6JTBseCAiCi0JCQkJInNrYiBsZW46ICVkIFxuIiwgX19GVU5DVElPTl9fLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nKXNrYiwgc2tiLT5sZW4pOwogCQkJaWYgKGRvX2RlYnVnX2RhdGEpIHsKLQkJCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgdXAgdG8gMzIgYnl0ZXMiCi0JCQkJCSAgICAgICAiIG9mIHBkdV9kYXRhIHNlbnRcbiIsCi0JCQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJCWN0Y21fcHJfZGVidWcoIiVzOiBUb0RDTV9wZHVfc2VxPSAlMDh4XG4iLAorCQkJCQkJX19mdW5jX18sIGNoLT5wZHVfc2VxKTsKKwkJCQljdGNtX3ByX2RlYnVnKCIlczogc2tiOiUwbHggIgorCQkJCQkic2tiIGxlbjogJWQgXG4iLCBfX2Z1bmNfXywKKwkJCQkJKHVuc2lnbmVkIGxvbmcpc2tiLCBza2ItPmxlbik7CisJCQkJY3RjbV9wcl9kZWJ1ZygiJXM6IHVwIHRvIDMyIGJ5dGVzICIKKwkJCQkJIm9mIHBkdV9kYXRhIHNlbnRcbiIsIF9fZnVuY19fKTsKIAkJCQljdGNtcGNfZHVtcDMyKChjaGFyICopc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJCQl9CiAKQEAgLTEzMTYsOCArMTIwMiw4IEBACiAJCW1wY2dpbmZvLT5jaCA9IGNoOwogCQltcGNnaW5mby0+dGggPSBoZWFkZXI7CiAJCW1wY2dpbmZvLT5za2IgPSBwc2tiOwotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgTm90IFBEVSAtIG1heSBiZSBjb250cm9sIHBrdFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlDVENNX1BSX0RFQlVHKCIlczogTm90IFBEVSAtIG1heSBiZSBjb250cm9sIHBrdFxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkvKiAgaXQncyBhIHN3ZWVwPyAgICovCiAJCXN3ZWVwID0gKHN0cnVjdCB0aF9zd2VlcCAqKXBza2ItPmRhdGE7CiAJCW1wY2dpbmZvLT5zd2VlcCA9IHN3ZWVwOwpAQCAtMTMzMyw4ICsxMjE5LDkgQEAKIAkJfSBlbHNlIGlmIChoZWFkZXItPnRoX2Jsa19mbGFnID09IFRIX0RJU0NPTlRBQ1QpCiAJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfRElTQ09OQywgbXBjZ2luZm8pOwogCQllbHNlIGlmIChoZWFkZXItPnRoX3NlcV9udW0gIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgdW5leHBlY3RlZCBwYWNrZXQiCi0JCQkJCSIgZXhwZWN0ZWQgY29udHJvbCBwa3RcbiIsIGRldi0+bmFtZSk7CisJCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkJIiVzKCVzKTogY29udHJvbCBwa3QgZXhwZWN0ZWRcbiIsCisJCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkvKiBtcGNnaW5mbyBvbmx5IHVzZWQgZm9yIG5vbi1kYXRhIHRyYW5zZmVycyAqLwogCQkJa2ZyZWUobXBjZ2luZm8pOwpAQCAtMTM0NywxMyArMTIzNCwxMiBAQAogCWRldl9rZnJlZV9za2JfYW55KHBza2IpOwogCWlmIChzZW5kcmMgPT0gTkVUX1JYX0RST1ApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJXMoKSBORVRXT1JLIEJBQ0tMT0cgRVhDRUVERUQiCi0JCSAgICAgICAiIC0gUEFDS0VUIERST1BQRURcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKwkJICAgICAgICIgLSBQQUNLRVQgRFJPUFBFRFxuIiwgZGV2LT5uYW1lLCBfX2Z1bmNfXyk7CiAJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCX0KIAotCWlmIChkb19kZWJ1ZykKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQgOiAlcyAlcygpOiBjaD0weCVwIGlkPSVzXG4iLAotCQkJCWRldi0+bmFtZSwgX19GVU5DVElPTl9fLCBjaCwgY2gtPmlkKTsKKwlDVENNX1BSX0RFQlVHKCJleGl0ICVzOiAlczogY2g9MHglcCBpZD0lc1xuIiwKKwkJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGNoLCBjaC0+aWQpOwogfQogCiAvKioKQEAgLTEzNjYsMTUgKzEyNTIsMTQgQEAKICAqLwogdm9pZCBjdGNtcGNfYmgodW5zaWduZWQgbG9uZyB0aGlzY2hhbikKIHsKLQlzdHJ1Y3QgY2hhbm5lbAkgICpjaAkgICAgPSAoc3RydWN0IGNoYW5uZWwgKil0aGlzY2hhbjsKKwlzdHJ1Y3QgY2hhbm5lbAkgICpjaAk9IChzdHJ1Y3QgY2hhbm5lbCAqKXRoaXNjaGFuOwogCXN0cnVjdCBza19idWZmCSAgKnNrYjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CSAgICA9IGNoLT5uZXRkZXY7Ci0Jc3RydWN0IGN0Y21fcHJpdiAgKnByaXYgID0gZGV2LT5wcml2OwotCXN0cnVjdCBtcGNfZ3JvdXAgICpncnAgICA9IHByaXYtPm1wY2c7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldgk9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAgKnByaXYJPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAgKmdycAk9IHByaXYtPm1wY2c7CiAKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoIiVzIGNwOiVpIGVudGVyOiAgJXMoKSAlc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX0ZVTkNUSU9OX18sIGNoLT5pZCk7CisJQ1RDTV9QUl9ERUJVRygiJXMgY3A6JWkgZW50ZXI6ICAlcygpICVzXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGNoLT5pZCk7CiAJLyogY2FsbGVyIGhhcyByZXF1ZXN0ZWQgZHJpdmVyIHRvIHRocm90dGxlIGJhY2sgKi8KIAl3aGlsZSAoKGZzbV9nZXRzdGF0ZShncnAtPmZzbSkgIT0gTVBDR19TVEFURV9GTE9XQykgJiYKIAkJCShza2IgPSBza2JfZGVxdWV1ZSgmY2gtPmlvX3F1ZXVlKSkpIHsKQEAgLTEzOTAsOSArMTI3NSw4IEBACiAJCWlmIChza2IgPT0gc2tiX3BlZWsoJmNoLT5pb19xdWV1ZSkpCiAJCQlicmVhazsKIAl9Ci0JaWYgKGRvX2RlYnVnKQotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdCA6ICVzICVzKCk6IGNoPTB4JXAgaWQ9JXNcbiIsCi0JCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXywgY2gsICBjaC0+aWQpOworCUNUQ01fUFJfREVCVUcoImV4aXQgJXM6ICVzOiBjaD0weCVwIGlkPSVzXG4iLAorCQkJX19mdW5jX18sIGRldi0+bmFtZSwgY2gsIGNoLT5pZCk7CiAJcmV0dXJuOwogfQogCkBAIC0xNDAzLDE2ICsxMjg3LDE2IEBACiB7CiAJc3RydWN0IG1wY19ncm91cCAqZ3JwOwogCi0JQ1RDTV9EQkZfVEVYVChNUENfU0VUVVAsIDMsIF9fRlVOQ1RJT05fXyk7CisJQ1RDTV9EQkZfVEVYVF8oTVBDX1NFVFVQLCBDVENfREJGX0lORk8sCisJCQkiRW50ZXIgJXMoJXApIiwgQ1RDTV9GVU5UQUlMLCBwcml2KTsKIAogCWdycCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtcGNfZ3JvdXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoZ3JwID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JZ3JwLT5mc20gPQotCQlpbml0X2ZzbSgibXBjZyIsIG1wY2dfc3RhdGVfbmFtZXMsIG1wY2dfZXZlbnRfbmFtZXMsCi0JCQkJIE1QQ0dfTlJfU1RBVEVTLCBNUENHX05SX0VWRU5UUywgbXBjZ19mc20sCi0JCQkJIG1wY2dfZnNtX2xlbiwgR0ZQX0tFUk5FTCk7CisJZ3JwLT5mc20gPSBpbml0X2ZzbSgibXBjZyIsIG1wY2dfc3RhdGVfbmFtZXMsIG1wY2dfZXZlbnRfbmFtZXMsCisJCQlNUENHX05SX1NUQVRFUywgTVBDR19OUl9FVkVOVFMsIG1wY2dfZnNtLAorCQkJbXBjZ19mc21fbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoZ3JwLT5mc20gPT0gTlVMTCkgewogCQlrZnJlZShncnApOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE0MjQsNyArMTMwOCw2IEBACiAJZ3JwLT54aWRfc2tiID0KIAkJIF9fZGV2X2FsbG9jX3NrYihNUENfQlVGU0laRV9ERUZBVUxULCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CiAJaWYgKGdycC0+eGlkX3NrYiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNvdWxkbid0IGFsbG9jIE1QQ2dyb3VwIHhpZF9za2JcbiIpOwogCQlrZnJlZV9mc20oZ3JwLT5mc20pOwogCQlrZnJlZShncnApOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE0MzUsNyArMTMxOCw3IEBACiAJbWVtY3B5KHNrYl9wdXQoZ3JwLT54aWRfc2tiLCBUSF9IRUFERVJfTEVOR1RIKSwKIAkJCSZ0aG5vcm0sIFRIX0hFQURFUl9MRU5HVEgpOwogCi0JZ3JwLT54aWQgPSAoc3RydWN0IHhpZDIgKikgc2tiX3RhaWxfcG9pbnRlcihncnAtPnhpZF9za2IpOworCWdycC0+eGlkID0gKHN0cnVjdCB4aWQyICopc2tiX3RhaWxfcG9pbnRlcihncnAtPnhpZF9za2IpOwogCW1lbWNweShza2JfcHV0KGdycC0+eGlkX3NrYiwgWElEMl9MRU5HVEgpLCAmaW5pdF94aWQsIFhJRDJfTEVOR1RIKTsKIAlncnAtPnhpZC0+eGlkMl9hZGpfaWQgPSBqaWZmaWVzIHwgMHhmZmYwMDAwMDsKIAlncnAtPnhpZC0+eGlkMl9zZW5kZXJfaWQgPSBqaWZmaWVzOwpAQCAtMTQ0Niw3ICsxMzI5LDYgQEAKIAlncnAtPnJjdmRfeGlkX3NrYiA9CiAJCV9fZGV2X2FsbG9jX3NrYihNUENfQlVGU0laRV9ERUZBVUxULCBHRlBfQVRPTUlDfEdGUF9ETUEpOwogCWlmIChncnAtPnJjdmRfeGlkX3NrYiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNvdWxkbid0IGFsbG9jIE1QQ2dyb3VwIHJjdmRfeGlkX3NrYlxuIik7CiAJCWtmcmVlX2ZzbShncnAtPmZzbSk7CiAJCWRldl9rZnJlZV9za2IoZ3JwLT54aWRfc2tiKTsKIAkJa2ZyZWUoZ3JwKTsKQEAgLTE0OTIsMzIgKzEzNzQsMjcgQEAKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBjaGFubmVsICp3Y2gsICpyY2g7CiAKLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuOwotCX0KLQotCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMgICVzKClcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKwlCVUdfT04oZGV2ID09IE5VTEwpOworCUNUQ01fUFJfREVCVUcoIkVudGVyICVzOiAlc1xuIiwJX19mdW5jX18sIGRldi0+bmFtZSk7CiAKIAlwcml2ICA9IGRldi0+cHJpdjsKIAlncnAgPSAgcHJpdi0+bXBjZzsKIAlncnAtPmZsb3dfb2ZmX2NhbGxlZCA9IDA7Ci0KIAlmc21fZGVsdGltZXIoJmdycC0+dGltZXIpOwotCiAJaWYgKGdycC0+Y2hhbm5lbHNfdGVybWluYXRpbmcpCi0JCQkJCWdvdG8gZG9uZTsKKwkJCXJldHVybjsKIAogCWdycC0+Y2hhbm5lbHNfdGVybWluYXRpbmcgPSAxOwotCiAJZ3JwLT5zYXZlZF9zdGF0ZSA9IGZzbV9nZXRzdGF0ZShncnAtPmZzbSk7CiAJZnNtX25ld3N0YXRlKGdycC0+ZnNtLCBNUENHX1NUQVRFX0lOT1ApOwogCWlmIChncnAtPnNhdmVkX3N0YXRlID4gTVBDR19TVEFURV9YSUQ3SU5JVEYpCi0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6TVBDIEdST1VQIElOT1BFUkFUSVZFXG4iLCBkZXYtPm5hbWUpOworCQlDVENNX0RCRl9URVhUXyhNUENfVFJBQ0UsIENUQ19EQkZfTk9USUNFLAorCQkJIiVzKCVzKTogTVBDIEdST1VQIElOT1BFUkFUSVZFIiwKKwkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJaWYgKChncnAtPnNhdmVkX3N0YXRlICE9IE1QQ0dfU1RBVEVfUkVTRVQpIHx8CiAJCS8qIGRlYWxsb2NfY2hhbm5lbCBoYXMgYmVlbiBjYWxsZWQgKi8KLQkJKChncnAtPnNhdmVkX3N0YXRlID09IE1QQ0dfU1RBVEVfUkVTRVQpICYmCi0JCQkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKSkKKwkJCSgoZ3JwLT5zYXZlZF9zdGF0ZSA9PSBNUENHX1NUQVRFX1JFU0VUKSAmJgorCQkJCQkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKSkKIAkJZnNtX2RlbHRpbWVyKCZwcml2LT5yZXN0YXJ0X3RpbWVyKTsKIAogCXdjaCA9IHByaXYtPmNoYW5uZWxbV1JJVEVdOwpAQCAtMTU2NywyOSArMTQ0NCwyNCBAQAogCS8qIFRoaXMgY2FuIHJlc3VsdCBpbiBJTk9QIG9mIFZUQU0gUFUgZHVlIHRvIGhhbHRpbmcgb2YgICovCiAJLyogb3V0c3RhbmRpbmcgSU8gd2hpY2ggY2F1c2VzIGEgc2Vuc2UgdG8gYmUgcmV0dXJuZWQJICovCiAJLyogT25seSBhYm91dCAzIHNlbnNlcyBhcmUgYWxsb3dlZCBhbmQgdGhlbiBJT1MvVlRBTSB3aWxsKi8KLQkvKiBlYmNvbWUgdW5yZWFjaGFibGUgd2l0aG91dCBtYW51YWwgaW50ZXJ2ZW50aW9uCSAqLwotCWlmICgoZ3JwLT5wb3J0X3BlcnNpc3QgPT0gMSkJfHwgKGdycC0+YWxsb2NfY2FsbGVkKSkgeworCS8qIGJlY29tZSB1bnJlYWNoYWJsZSB3aXRob3V0IG1hbnVhbCBpbnRlcnZlbnRpb24JICovCisJaWYgKChncnAtPnBvcnRfcGVyc2lzdCA9PSAxKSB8fCAoZ3JwLT5hbGxvY19jYWxsZWQpKSB7CiAJCWdycC0+YWxsb2NfY2FsbGVkID0gMDsKIAkJZnNtX2RlbHRpbWVyKCZwcml2LT5yZXN0YXJ0X3RpbWVyKTsKLQkJZnNtX2FkZHRpbWVyKCZwcml2LT5yZXN0YXJ0X3RpbWVyLAotCQkJICAgICA1MDAsCi0JCQkgICAgIERFVl9FVkVOVF9SRVNUQVJULAotCQkJICAgICBkZXYpOworCQlmc21fYWRkdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIsIDUwMCwgREVWX0VWRU5UX1JFU1RBUlQsIGRldik7CiAJCWZzbV9uZXdzdGF0ZShncnAtPmZzbSwgTVBDR19TVEFURV9SRVNFVCk7CiAJCWlmIChncnAtPnNhdmVkX3N0YXRlID4gTVBDR19TVEFURV9YSUQ3SU5JVEYpCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOk1QQyBHUk9VUCBSRUNPVkVSWSBTQ0hFRFVMRURcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCUNUQ01fREJGX1RFWFRfKE1QQ19UUkFDRSwgQ1RDX0RCRl9BTFdBWVMsCisJCQkJIiVzKCVzKTogTVBDIEdST1VQIFJFQ09WRVJZIFNDSEVEVUxFRCIsCisJCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lKTsKIAl9IGVsc2UgewogCQlmc21fZGVsdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIpOwogCQlmc21fYWRkdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIsIDUwMCwgREVWX0VWRU5UX1NUT1AsIGRldik7CiAJCWZzbV9uZXdzdGF0ZShncnAtPmZzbSwgTVBDR19TVEFURV9SRVNFVCk7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6TVBDIEdST1VQIFJFQ09WRVJZIE5PVCBBVFRFTVBURURcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlDVENNX0RCRl9URVhUXyhNUENfVFJBQ0UsIENUQ19EQkZfQUxXQVlTLAorCQkJIiVzKCVzKTogTk8gTVBDIEdST1VQIFJFQ09WRVJZIEFUVEVNUFRFRCIsCisJCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJfQotCi1kb25lOgotCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0OiVzICAlcygpXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7Ci0JcmV0dXJuOwogfQogCiAvKioKQEAgLTE2MDksMTIgKzE0ODEsNyBAQAogCXN0cnVjdCBjaGFubmVsICp3Y2g7CiAJc3RydWN0IGNoYW5uZWwgKnJjaDsKIAotCUNUQ01fREJGX1RFWFQoTVBDX1RSQUNFLCA2LCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKGRldiA9PSBOVUxMKSB7Ci0JCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgNCwgIiVzOiBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuOwotCX0KKwlCVUdfT04oZGV2ID09IE5VTEwpOwogCiAJcHJpdiA9IGRldi0+cHJpdjsKIAlncnAgPSBwcml2LT5tcGNnOwpAQCAtMTYzMyw4ICsxNTAwLDkgQEAKIAkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CiAJfQogCi0JQ1RDTV9EQkZfVEVYVF8oTVBDX1RSQUNFLCA2LCAiJXM6IGRldj0lcyBleGl0IiwKLQkJCQkJX19GVU5DVElPTl9fLCBkZXYtPm5hbWUpOworCUNUQ01fREJGX1RFWFRfKE1QQ19UUkFDRSwgQ1RDX0RCRl9ERUJVRywKKwkJCSIlczogZGV2PSVzIGV4aXQiLAorCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOwogCXJldHVybjsKIH0KIApAQCAtMTY0NiwyNSArMTUxNCwyNSBAQAogewogCXN0cnVjdCBtcGNnX2luZm8gICAqbXBjZ2luZm8gICA9IGFyZzsKIAlzdHJ1Y3QgY2hhbm5lbAkgICAqY2gJICAgICAgID0gbXBjZ2luZm8tPmNoOwotCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICAgICAgICA9IGNoLT5uZXRkZXY7Ci0Jc3RydWN0IGN0Y21fcHJpdiAgICpwcml2ICAgID0gZGV2LT5wcml2OwotCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwICAgICA9IHByaXYtPm1wY2c7CisJc3RydWN0IG5ldF9kZXZpY2UgICpkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAgICpwcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwOwogCi0JaWYgKGNoID09IE5VTEwpCXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBjaD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm47Ci0JfQotCWlmIChjaC0+bmV0ZGV2ID09IE5VTEwpCXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuOworCWlmIChjaCkgeworCQlkZXYgPSBjaC0+bmV0ZGV2OworCQlpZiAoZGV2KSB7CisJCQlwcml2ID0gZGV2LT5wcml2OworCQkJaWYgKHByaXYpIHsKKwkJCQlDVENNX0RCRl9URVhUXyhNUENfVFJBQ0UsIENUQ19EQkZfTk9USUNFLAorCQkJCQkiJXM6ICVzOiAlc1xuIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIGNoLT5pZCk7CisJCQkJZ3JwID0gcHJpdi0+bXBjZzsKKwkJCQlncnAtPnNlbmRfcWxsY19kaXNjID0gMTsKKwkJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJCX0KKwkJfQogCX0KIAotCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMgICVzKClcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKLQotCWdycC0+c2VuZF9xbGxjX2Rpc2MgPSAxOwotCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwotCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICVzICAlcygpXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuOwogfQogCkBAIC0xNjc1LDI2ICsxNTQzLDkgQEAKICAqLwogdm9pZCBtcGNfYWN0aW9uX3NlbmRfZGlzY29udGFjdCh1bnNpZ25lZCBsb25nIHRoaXNjaGFuKQogewotCXN0cnVjdCBjaGFubmVsCSAgICpjaDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAgKmRldjsKLQlzdHJ1Y3QgY3RjbV9wcml2ICAgICpwcml2OwotCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwOwotCWludCByYyA9IDA7Ci0JdW5zaWduZWQgbG9uZwkgIHNhdmVmbGFnczsKLQotCWNoID0gKHN0cnVjdCBjaGFubmVsICopdGhpc2NoYW47Ci0JZGV2ID0gY2gtPm5ldGRldjsKLQlwcml2ID0gZGV2LT5wcml2OwotCWdycCA9IHByaXYtPm1wY2c7Ci0KLQljdGNtX3ByX2luZm8oImN0Y21wYzogJXMgY3A6JWkgZW50ZXI6ICVzKCkgR3JwU3RhdGU6JXMgQ2hTdGF0ZTolc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwKLQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywKLQkJICAgICAgIGZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pLAotCQkgICAgICAgZnNtX2dldHN0YXRlX3N0cihjaC0+ZnNtKSk7Ci0Jc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgd2l0aAotCQkJICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAqLworCWludCByYzsKKwlzdHJ1Y3QgY2hhbm5lbAkqY2ggPSAoc3RydWN0IGNoYW5uZWwgKil0aGlzY2hhbjsKKwl1bnNpZ25lZCBsb25nCXNhdmVmbGFncyA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwogCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbMTVdLApAQCAtMTcwMiwxNiArMTU1Myw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwogCiAJaWYgKHJjICE9IDApIHsKLQkJY3RjbV9wcl9pbmZvKCJjdGNtcGM6ICVzKCkgY2g6JXMgSU8gZmFpbGVkIFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sCi0JCQkgICAgICAgY2gtPmlkKTsKLQkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLCAic2VuZCBkaXNjb250YWN0Iik7Ci0JCS8qIE5vdCBjaGVja2luZyByZXR1cm4gY29kZSB2YWx1ZSBoZXJlICovCi0JCS8qIE1ha2luZyBiZXN0IGVmZm9ydCB0byBub3RpZnkgcGFydG5lciovCi0JCS8qIHRoYXQgTVBDIEdyb3VwIGlzIGdvaW5nIGRvd24gICAgICAgICovCisJCWN0Y21fY2N3X2NoZWNrX3JjKGNoLCByYywgKGNoYXIgKilfX2Z1bmNfXyk7CiAJfQogCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICVzICAlcygpXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuOwogfQogCkBAIC0xNzIzLDQ5ICsxNTY3LDUwIEBACiAqLwogc3RhdGljIGludCBtcGNfdmFsaWRhdGVfeGlkKHN0cnVjdCBtcGNnX2luZm8gKm1wY2dpbmZvKQogewotCXN0cnVjdCBjaGFubmVsCSAgICpjaAkgICAgPSBtcGNnaW5mby0+Y2g7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgICAgID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY2hhbm5lbAkgICAqY2gJID0gbXBjZ2luZm8tPmNoOworCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICA9IGNoLT5uZXRkZXY7CiAJc3RydWN0IGN0Y21fcHJpdiAgICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwICA9IHByaXYtPm1wY2c7Ci0Jc3RydWN0IHhpZDIJICAgKnhpZCAgICAgPSBtcGNnaW5mby0+eGlkOwotCWludAlmYWlsZWQJPSAwOwotCWludAlyYwk9IDA7Ci0JX191NjQJb3VyX2lkLCB0aGVpcl9pZCA9IDA7Ci0JaW50CWxlbjsKKwlzdHJ1Y3QgeGlkMgkgICAqeGlkICA9IG1wY2dpbmZvLT54aWQ7CisJaW50CXJjCSA9IDA7CisJX191NjQJb3VyX2lkICAgPSAwOworCV9fdTY0ICAgdGhlaXJfaWQgPSAwOworCWludAlsZW4gPSBUSF9IRUFERVJfTEVOR1RIICsgUERVX0hFQURFUl9MRU5HVEg7CiAKLQlsZW4gPSBUSF9IRUFERVJfTEVOR1RIICsgUERVX0hFQURFUl9MRU5HVEg7CisJQ1RDTV9QUl9ERUJVRygiRW50ZXIgJXM6IHhpZD0lcFxuIiwgX19mdW5jX18sIHhpZCk7CiAKLQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6CSVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlpZiAobXBjZ2luZm8tPnhpZCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzKCkgeGlkPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKHhpZCA9PSBOVUxMKSB7CiAJCXJjID0gMTsKLQkJCQkJZ290byBkb25lOworCQkvKiBYSUQgUkVKRUNURUQ6IHhpZCA9PSBOVUxMICovCisJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlcyglcyk6IHhpZCA9IE5VTEwiLAorCQkJCUNUQ01fRlVOVEFJTCwgY2gtPmlkKTsKKwkJCWdvdG8gZG9uZTsKIAl9CiAKLQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgOiAgJXMgIHhpZCByZWNlaXZlZCgpXG4iLCBfX0ZVTkNUSU9OX18pOwotCWN0Y21wY19kdW1waXQoKGNoYXIgKiltcGNnaW5mby0+eGlkLCBYSUQyX0xFTkdUSCk7CisJQ1RDTV9EM19EVU1QKChjaGFyICopeGlkLCBYSUQyX0xFTkdUSCk7CiAKIAkvKnRoZSByZWNlaXZlZCBkaXJlY3Rpb24gc2hvdWxkIGJlIHRoZSBvcHBvc2l0ZSBvZiBvdXJzICAqLwogCWlmICgoKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgPyBYSUQyX1dSSVRFX1NJREUgOgogCQkJCVhJRDJfUkVBRF9TSURFKSAhPSB4aWQtPnhpZDJfZGxjX3R5cGUpIHsKLQkJZmFpbGVkID0gMTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjbXBjOiVzKCkgWElEIFJFSkVDVEVEIC0gUkVBRC1XUklURSBDSCAiCi0JCQkiUGFpcmluZyBJbnZhbGlkIFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmMgPSAyOworCQkvKiBYSUQgUkVKRUNURUQ6IHIvdyBjaGFubmVsIHBhaXJpbmcgbWlzbWF0Y2ggKi8KKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJIiVzKCVzKTogci93IGNoYW5uZWwgcGFpcmluZyBtaXNtYXRjaCIsCisJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQpOworCQkJZ290byBkb25lOwogCX0KIAogCWlmICh4aWQtPnhpZDJfZGxjX3R5cGUgPT0gWElEMl9SRUFEX1NJREUpIHsKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpOiBncnBtYXhidWY6JWQgeGlkMmJ1ZmxlbjolZFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGdycC0+Z3JvdXBfbWF4X2J1ZmxlbiwKLQkJCQl4aWQtPnhpZDJfYnVmX2xlbik7CisJCUNUQ01fUFJfREVCVUcoIiVzOiBncnBtYXhidWY6JWQgeGlkMmJ1ZmxlbjolZFxuIiwgX19mdW5jX18sCisJCQkJZ3JwLT5ncm91cF9tYXhfYnVmbGVuLCB4aWQtPnhpZDJfYnVmX2xlbik7CiAKLQkJaWYgKGdycC0+Z3JvdXBfbWF4X2J1ZmxlbiA9PSAwIHx8Ci0JCQlncnAtPmdyb3VwX21heF9idWZsZW4gPiB4aWQtPnhpZDJfYnVmX2xlbiAtIGxlbikKKwkJaWYgKGdycC0+Z3JvdXBfbWF4X2J1ZmxlbiA9PSAwIHx8IGdycC0+Z3JvdXBfbWF4X2J1ZmxlbiA+CisJCQkJCQl4aWQtPnhpZDJfYnVmX2xlbiAtIGxlbikKIAkJCWdycC0+Z3JvdXBfbWF4X2J1ZmxlbiA9IHhpZC0+eGlkMl9idWZfbGVuIC0gbGVuOwogCX0KIAotCi0JaWYgKGdycC0+c2F2ZWRfeGlkMiA9PSBOVUxMKQl7CisJaWYgKGdycC0+c2F2ZWRfeGlkMiA9PSBOVUxMKSB7CiAJCWdycC0+c2F2ZWRfeGlkMiA9CiAJCQkoc3RydWN0IHhpZDIgKilza2JfdGFpbF9wb2ludGVyKGdycC0+cmN2ZF94aWRfc2tiKTsKIApAQCAtMTc4Niw0OSArMTYzMSw1NCBAQAogCQkvKiBsb3dlciBpZCBhc3N1bWUgdGhlIHhzaWRlIHJvbGUgKi8KIAkJaWYgKG91cl9pZCA8IHRoZWlyX2lkKSB7CiAJCQlncnAtPnJvbGwgPSBYU0lERTsKLQkJCWN0Y21fcHJfZGVidWcoImN0Y21wYyA6JXMoKSBXRSBIQVZFIExPVyBJRC0iCi0JCQkJICAgICAgICJUQUtFIFhTSURFXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJQ1RDTV9EQkZfVEVYVF8oTVBDX1RSQUNFLCBDVENfREJGX05PVElDRSwKKwkJCQkiJXMoJXMpOiBXRSBIQVZFIExPVyBJRCAtIFRBS0UgWFNJREUiLAorCQkJCQlDVENNX0ZVTlRBSUwsIGNoLT5pZCk7CiAJCX0gZWxzZSB7CiAJCQlncnAtPnJvbGwgPSBZU0lERTsKLQkJCWN0Y21fcHJfZGVidWcoImN0Y21wYyA6JXMoKSBXRSBIQVZFIEhJR0ggSUQtIgotCQkJCSAgICAgICAiVEFLRSBZU0lERVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCUNUQ01fREJGX1RFWFRfKE1QQ19UUkFDRSwgQ1RDX0RCRl9OT1RJQ0UsCisJCQkJIiVzKCVzKTogV0UgSEFWRSBISUdIIElEIC0gVEFLRSBZU0lERSIsCisJCQkJCUNUQ01fRlVOVEFJTCwgY2gtPmlkKTsKIAkJfQogCiAJfSBlbHNlIHsKIAkJaWYgKHhpZC0+eGlkMl9mbGFnNCAhPSBncnAtPnNhdmVkX3hpZDItPnhpZDJfZmxhZzQpIHsKLQkJCWZhaWxlZCA9IDE7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlcyBYSUQgUkVKRUNURUQgLSBYSUQgRmxhZyBCeXRlNFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJcmMgPSAzOworCQkJLyogWElEIFJFSkVDVEVEOiB4aWQgZmxhZyBieXRlNCBtaXNtYXRjaCAqLworCQkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCSIlcyglcyk6IHhpZCBmbGFnIGJ5dGU0IG1pc21hdGNoIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQpOwogCQl9CiAJCWlmICh4aWQtPnhpZDJfZmxhZzIgPT0gMHg0MCkgewotCQkJZmFpbGVkID0gMTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzIFhJRCBSRUpFQ1RFRCAtIFhJRCBOT0dPT0RcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCXJjID0gNDsKKwkJCS8qIFhJRCBSRUpFQ1RFRCAtIHhpZCBOT0dPT0QgKi8KKwkJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkiJXMoJXMpOiB4aWQgTk9HT09EIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQpOwogCQl9CiAJCWlmICh4aWQtPnhpZDJfYWRqX2lkICE9IGdycC0+c2F2ZWRfeGlkMi0+eGlkMl9hZGpfaWQpIHsKLQkJCWZhaWxlZCA9IDE7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlcyBYSUQgUkVKRUNURUQgLSAiCi0JCQkJIkFkamFjZW50IFN0YXRpb24gSUQgTWlzbWF0Y2hcbiIsCi0JCQkJX19GVU5DVElPTl9fKTsKKwkJCXJjID0gNTsKKwkJCS8qIFhJRCBSRUpFQ1RFRCAtIEFkamFjZW50IFN0YXRpb24gSUQgTWlzbWF0Y2ggKi8KKwkJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCQkiJXMoJXMpOiBBZGphY2VudCBTdGF0aW9uIElEIE1pc21hdGNoIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQpOwogCQl9CiAJCWlmICh4aWQtPnhpZDJfc2VuZGVyX2lkICE9IGdycC0+c2F2ZWRfeGlkMi0+eGlkMl9zZW5kZXJfaWQpIHsKLQkJCWZhaWxlZCA9IDE7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlcyBYSUQgUkVKRUNURUQgLSAiCi0JCQkJIlNlbmRlciBBZGRyZXNzIE1pc21hdGNoXG4iLCBfX0ZVTkNUSU9OX18pOwotCisJCQlyYyA9IDY7CisJCQkvKiBYSUQgUkVKRUNURUQgLSBTZW5kZXIgQWRkcmVzcyBNaXNtYXRjaCAqLworCQkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCSIlcyglcyk6IFNlbmRlciBBZGRyZXNzIE1pc21hdGNoIiwKKwkJCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQpOwogCQl9CiAJfQogCi0JaWYgKGZhaWxlZCkgewotCQljdGNtX3ByX2luZm8oImN0Y21wYwkgICA6ICAlcygpIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcHJpdi0+eGlkLT54aWQyX2ZsYWcyID0gMHg0MDsKLQkJZ3JwLT5zYXZlZF94aWQyLT54aWQyX2ZsYWcyID0gMHg0MDsKLQkJcmMgPSAxOwotCX0KLQogZG9uZToKKwlpZiAocmMpIHsKKwkJY3RjbV9wcl9pbmZvKCJjdGNtcGMJICAgOiAgJXMoKSBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaXYtPnhpZC0+eGlkMl9mbGFnMiA9IDB4NDA7CisJCWdycC0+c2F2ZWRfeGlkMi0+eGlkMl9mbGFnMiA9IDB4NDA7CisJfQogCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiByYzsKIH0KIApAQCAtMTgzOSw0NiArMTY4OSwyMCBAQAogc3RhdGljIHZvaWQgbXBjX2FjdGlvbl9zaWRlX3hpZChmc21faW5zdGFuY2UgKmZzbSwgdm9pZCAqYXJnLCBpbnQgc2lkZSkKIHsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7Ci0Jc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgbXBjX2dyb3VwICpncnAgPSBOVUxMOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCWludCByYyA9IDA7CiAJaW50IGdvdGxvY2sgPSAwOwogCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgd2l0aAotCQkJICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAqLworCQkJCQkgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICovCiAKLQlpZiAoY2ggPT0gTlVMTCkJewotCQlwcmludGsoS0VSTl9JTkZPICIlcyBjaD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKGRvX2RlYnVnKQotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gsIGNoLT5pZCk7Ci0KLQlkZXYgPSBjaC0+bmV0ZGV2OwotCWlmIChkZXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcyBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQkJZ290byBkb25lOwotCX0KLQotCXByaXYgPSBkZXYtPnByaXY7Ci0JaWYgKHByaXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcyBwcml2PU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCWdvdG8gZG9uZTsKLQl9Ci0KLQlncnAgPSBwcml2LT5tcGNnOwotCWlmIChncnAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcyBncnA9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQkJZ290byBkb25lOwotCX0KKwlDVENNX1BSX0RFQlVHKCJFbnRlciAlczogY3A9JWkgY2g9MHglcCBpZD0lc1xuIiwKKwkJCV9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLCBjaC0+aWQpOwogCiAJaWYgKGN0Y21fY2hlY2thbGxvY19idWZmZXIoY2gpKQogCQkJCQlnb3RvIGRvbmU7CiAKLQkvKiBza2IgZGF0YS1idWZmZXIgcmVmZXJlbmNpbmc6ICovCi0KKwkvKgorCSAqIHNrYiBkYXRhLWJ1ZmZlciByZWZlcmVuY2luZzoKKwkgKi8KIAljaC0+dHJhbnNfc2tiLT5kYXRhID0gY2gtPnRyYW5zX3NrYl9kYXRhOwogCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoY2gtPnRyYW5zX3NrYik7CiAJY2gtPnRyYW5zX3NrYi0+bGVuID0gMDsKQEAgLTE5MTEsMjIgKzE3MzUsMjIgQEAKIAljaC0+Y2N3WzhdLmNvdW50CT0gMDsKIAljaC0+Y2N3WzhdLmNkYQkJPSAweDAwOwogCisJaWYgKCEoY2gtPnhpZF90aCAmJiBjaC0+eGlkICYmIGNoLT54aWRfaWQpKQorCQlDVENNX0RCRl9URVhUXyhNUENfVFJBQ0UsIENUQ19EQkZfSU5GTywKKwkJCSIlcyglcyk6IHhpZF90aD0lcCwgeGlkPSVwLCB4aWRfaWQ9JXAiLAorCQkJQ1RDTV9GVU5UQUlMLCBjaC0+aWQsIGNoLT54aWRfdGgsIGNoLT54aWQsIGNoLT54aWRfaWQpOworCiAJaWYgKHNpZGUgPT0gWFNJREUpIHsKIAkJLyogbXBjX2FjdGlvbl94c2lkZV94aWQgKi8KLQkJaWYgKGNoLT54aWRfdGggPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgY2gtPnhpZF90aD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCQlnb3RvIGRvbmU7Ci0JCX0KKwkJaWYgKGNoLT54aWRfdGggPT0gTlVMTCkKKwkJCQlnb3RvIGRvbmU7CiAJCWNoLT5jY3dbOV0uY21kX2NvZGUJPSBDQ1dfQ01EX1dSSVRFOwogCQljaC0+Y2N3WzldLmZsYWdzCT0gQ0NXX0ZMQUdfU0xJIHwgQ0NXX0ZMQUdfQ0M7CiAJCWNoLT5jY3dbOV0uY291bnQJPSBUSF9IRUFERVJfTEVOR1RIOwogCQljaC0+Y2N3WzldLmNkYQkJPSB2aXJ0X3RvX3BoeXMoY2gtPnhpZF90aCk7CiAKLQkJaWYgKGNoLT54aWQgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgY2gtPnhpZD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCQlnb3RvIGRvbmU7Ci0JCX0KLQorCQlpZiAoY2gtPnhpZCA9PSBOVUxMKQorCQkJCWdvdG8gZG9uZTsKIAkJY2gtPmNjd1sxMF0uY21kX2NvZGUJPSBDQ1dfQ01EX1dSSVRFOwogCQljaC0+Y2N3WzEwXS5mbGFncwk9IENDV19GTEFHX1NMSSB8IENDV19GTEFHX0NDOwogCQljaC0+Y2N3WzEwXS5jb3VudAk9IFhJRDJfTEVOR1RIOwpAQCAtMTk1NiwyOCArMTc4MCwyMiBAQAogCQljaC0+Y2N3WzEwXS5jb3VudAk9IFhJRDJfTEVOR1RIOwogCQljaC0+Y2N3WzEwXS5jZGEJCT0gdmlydF90b19waHlzKGNoLT5yY3ZkX3hpZCk7CiAKLQkJaWYgKGNoLT54aWRfdGggPT0gTlVMTCkJewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgY2gtPnhpZF90aD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCQlnb3RvIGRvbmU7Ci0JCX0KKwkJaWYgKGNoLT54aWRfdGggPT0gTlVMTCkKKwkJCQlnb3RvIGRvbmU7CiAJCWNoLT5jY3dbMTFdLmNtZF9jb2RlCT0gQ0NXX0NNRF9XUklURTsKIAkJY2gtPmNjd1sxMV0uZmxhZ3MJPSBDQ1dfRkxBR19TTEkgfCBDQ1dfRkxBR19DQzsKIAkJY2gtPmNjd1sxMV0uY291bnQJPSBUSF9IRUFERVJfTEVOR1RIOwogCQljaC0+Y2N3WzExXS5jZGEJCT0gdmlydF90b19waHlzKGNoLT54aWRfdGgpOwogCi0JCWlmIChjaC0+eGlkID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzIGNoLT54aWQ9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQkJZ290byBkb25lOwotCQl9CisJCWlmIChjaC0+eGlkID09IE5VTEwpCisJCQkJZ290byBkb25lOwogCQljaC0+Y2N3WzEyXS5jbWRfY29kZQk9IENDV19DTURfV1JJVEU7CiAJCWNoLT5jY3dbMTJdLmZsYWdzCT0gQ0NXX0ZMQUdfU0xJIHwgQ0NXX0ZMQUdfQ0M7CiAJCWNoLT5jY3dbMTJdLmNvdW50CT0gWElEMl9MRU5HVEg7CiAJCWNoLT5jY3dbMTJdLmNkYQkJPSB2aXJ0X3RvX3BoeXMoY2gtPnhpZCk7CiAKLQkJaWYgKGNoLT54aWRfaWQgPT0gTlVMTCkJewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgY2gtPnhpZF9pZD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCQlnb3RvIGRvbmU7Ci0JCX0KKwkJaWYgKGNoLT54aWRfaWQgPT0gTlVMTCkKKwkJCQlnb3RvIGRvbmU7CiAJCWNoLT5jY3dbMTNdLmNtZF9jb2RlCT0gQ0NXX0NNRF9XUklURTsKIAkJY2gtPmNjd1sxM10uY2RhCQk9IHZpcnRfdG9fcGh5cyhjaC0+eGlkX2lkKTsKIApAQCAtMTk5MCwxMiArMTgwOCwxMSBAQAogCWNoLT5jY3dbMTRdLmNvdW50CT0gMDsKIAljaC0+Y2N3WzE0XS5jZGEJCT0gMDsKIAotCWlmIChkb19kZWJ1Z19jY3cpCi0JCWN0Y21wY19kdW1waXQoKGNoYXIgKikmY2gtPmNjd1s4XSwgc2l6ZW9mKHN0cnVjdCBjY3cxKSAqIDcpOworCUNUQ01fQ0NXX0RVTVAoKGNoYXIgKikmY2gtPmNjd1s4XSwgc2l6ZW9mKHN0cnVjdCBjY3cxKSAqIDcpOworCUNUQ01fRDNfRFVNUCgoY2hhciAqKWNoLT54aWRfdGgsIFRIX0hFQURFUl9MRU5HVEgpOworCUNUQ01fRDNfRFVNUCgoY2hhciAqKWNoLT54aWQsIFhJRDJfTEVOR1RIKTsKKwlDVENNX0QzX0RVTVAoKGNoYXIgKiljaC0+eGlkX2lkLCA0KTsKIAotCWN0Y21wY19kdW1waXQoKGNoYXIgKiljaC0+eGlkX3RoLCBUSF9IRUFERVJfTEVOR1RIKTsKLQljdGNtcGNfZHVtcGl0KChjaGFyICopY2gtPnhpZCwgWElEMl9MRU5HVEgpOwotCWN0Y21wY19kdW1waXQoKGNoYXIgKiljaC0+eGlkX2lkLCA0KTsKIAlpZiAoIWluX2lycSgpKSB7CiAJCQkgLyogU3VjaCBjb25kaXRpb25hbCBsb2NraW5nIGlzIGEga25vd24gcHJvYmxlbSBmb3IKIAkJCSAgKiBzcGFyc2UgYmVjYXVzZSBpdHMgc3RhdGljIHVuZGV0ZXJtaW5pc3RpYy4KQEAgLTIwMTIsMTYgKzE4MjksMTMgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwogCiAJaWYgKHJjICE9IDApIHsKLQkJY3RjbV9wcl9pbmZvKCJjdGNtcGM6ICVzKCkgY2g6JXMgSU8gZmFpbGVkIFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGNoLT5pZCk7CiAJCWN0Y21fY2N3X2NoZWNrX3JjKGNoLCByYywKIAkJCQkoc2lkZSA9PSBYU0lERSkgPyAieC1zaWRlIFhJRCIgOiAieS1zaWRlIFhJRCIpOwogCX0KIAogZG9uZToKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0IDogJXMoKTogY2g9MHglcCBpZD0lc1xuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGNoLCBjaC0+aWQpOworCUNUQ01fUFJfREVCVUcoIkV4aXQgJXM6IGNoPTB4JXAgaWQ9JXNcbiIsCisJCQkJX19mdW5jX18sIGNoLCBjaC0+aWQpOwogCXJldHVybjsKIAogfQpAQCAtMjA1MCw0MSArMTg2NCwxOSBAQAogICovCiBzdGF0aWMgdm9pZCBtcGNfYWN0aW9uX2RveGlkMChmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGNoYW5uZWwJICAgKmNoID0gYXJnOwotCXN0cnVjdCBjdGNtX3ByaXYgICAgKnByaXY7Ci0Jc3RydWN0IG1wY19ncm91cCAgICpncnAgICAgID0gTlVMTDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY2hhbm5lbAkgICAqY2ggICA9IGFyZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAgKmRldiAgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgICAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICAgKmdycCAgPSBwcml2LT5tcGNnOwogCi0JaWYgKGRvX2RlYnVnKQotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gsIGNoLT5pZCk7Ci0KLQlpZiAoY2ggPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBjaD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCQlnb3RvIGRvbmU7Ci0JfQotCi0JZGV2ID0gY2gtPm5ldGRldjsKLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgZGV2PU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCWdvdG8gZG9uZTsKLQl9Ci0KLQlwcml2ID0gZGV2LT5wcml2OwotCWlmIChwcml2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgcHJpdj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCQlnb3RvIGRvbmU7Ci0JfQotCi0JZ3JwID0gcHJpdi0+bXBjZzsKLQlpZiAoZ3JwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgZ3JwPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCWdvdG8gZG9uZTsKLQl9CisJQ1RDTV9QUl9ERUJVRygiRW50ZXIgJXM6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCisJCQlfX2Z1bmNfXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjaCwgY2gtPmlkKTsKIAogCWlmIChjaC0+eGlkID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgY2gteGlkPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCWdvdG8gZG9uZTsKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJIiVzKCVzKTogY2gtPnhpZCA9PSBOVUxMIiwKKwkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CisJCXJldHVybjsKIAl9CiAKIAlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ0hfWElEMF9JTlBST0dSRVNTKTsKQEAgLTIxMDQsMTIgKzE4OTYsNyBAQAogCiAJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0RPSU8sIGNoKTsKIAotZG9uZToKLQlpZiAoZG9fZGVidWcpCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0IDogJXMoKTogY2g9MHglcCBpZD0lc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgY2gsIGNoLT5pZCk7CiAJcmV0dXJuOwotCiB9CiAKIC8qCkBAIC0yMTE5LDMyICsxOTA2LDE2IEBACiBzdGF0aWMgdm9pZCBtcGNfYWN0aW9uX2RveGlkNyhmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFyZzsKLQlzdHJ1Y3QgY3RjbV9wcml2ICAgKnByaXYgPSBOVUxMOwotCXN0cnVjdCBtcGNfZ3JvdXAgICpncnAgPSBOVUxMOworCXN0cnVjdCBjdGNtX3ByaXYgICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgICpncnAgID0gTlVMTDsKIAlpbnQgZGlyZWN0aW9uOwotCWludCByYyA9IDA7CiAJaW50IHNlbmQgPSAwOwogCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOgklcygpIFxuIiwgX19GVU5DVElPTl9fKTsKLQotCWlmIChkZXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcyBkZXY9TlVMTCBcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJjID0gMTsKLQkJCQkJZ290byBkb25lOwotCX0KLQotCXByaXYgPSBkZXYtPnByaXY7Ci0JaWYgKHByaXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcyBwcml2PU5VTEwgXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyYyA9IDE7Ci0JCQkJCWdvdG8gZG9uZTsKLQl9Ci0KLQlncnAgPSBwcml2LT5tcGNnOworCWlmIChwcml2KQorCQlncnAgPSBwcml2LT5tcGNnOwogCWlmIChncnAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcyBncnA9TlVMTCBcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJjID0gMTsKLQkJCQkJZ290byBkb25lOworCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJcmV0dXJuOwogCX0KIAogCWZvciAoZGlyZWN0aW9uID0gUkVBRDsgZGlyZWN0aW9uIDw9IFdSSVRFOyBkaXJlY3Rpb24rKykJewpAQCAtMjE5OSwxMSArMTk3MCw2IEBACiAJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfRE9JTywgY2gpOwogCX0KIAotZG9uZToKLQotCWlmIChyYyAhPSAwKQotCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKLQogCXJldHVybjsKIH0KIApAQCAtMjIxNCwyNCArMTk4MCwxNSBAQAogc3RhdGljIHZvaWQgbXBjX2FjdGlvbl9yY3ZkX3hpZDAoZnNtX2luc3RhbmNlICpmc20sIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCi0Jc3RydWN0IG1wY2dfaW5mbyAgICptcGNnaW5mbyAgID0gYXJnOwotCXN0cnVjdCBjaGFubmVsCSAgICpjaAkgICAgICAgPSBtcGNnaW5mby0+Y2g7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgICAgICAgID0gY2gtPm5ldGRldjsKLQlzdHJ1Y3QgY3RjbV9wcml2ICAgKnByaXY7Ci0Jc3RydWN0IG1wY19ncm91cCAgICpncnA7CisJc3RydWN0IG1wY2dfaW5mbyAgICptcGNnaW5mbyAgPSBhcmc7CisJc3RydWN0IGNoYW5uZWwJICAgKmNoICAgPSBtcGNnaW5mby0+Y2g7CisJc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAgICpncnAgID0gcHJpdi0+bXBjZzsKIAotCWlmIChkb19kZWJ1ZykKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcygpOiBjcD0laSBjaD0weCVwIGlkPSVzXG4iLAotCQkJX19GVU5DVElPTl9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLCBjaC0+aWQpOwotCi0JcHJpdiA9IGRldi0+cHJpdjsKLQlncnAgPSBwcml2LT5tcGNnOwotCi0JY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGluOiVzKCkgJXMgeGlkMjolaSB4aWQ3OiVpIHhpZHRfcDI6JWkgXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBjaC0+aWQsCi0JCSAgICAgICBncnAtPm91dHN0YW5kaW5nX3hpZDIsCi0JCSAgICAgICBncnAtPm91dHN0YW5kaW5nX3hpZDcsCi0JCSAgICAgICBncnAtPm91dHN0YW5kaW5nX3hpZDdfcDIpOworCUNUQ01fUFJfREVCVUcoIiVzOiBjaC1pZDolcyB4aWQyOiVpIHhpZDc6JWkgeGlkdF9wMjolaSBcbiIsCisJCQlfX2Z1bmNfXywgY2gtPmlkLCBncnAtPm91dHN0YW5kaW5nX3hpZDIsCisJCQlncnAtPm91dHN0YW5kaW5nX3hpZDcsIGdycC0+b3V0c3RhbmRpbmdfeGlkN19wMik7CiAKIAlpZiAoZnNtX2dldHN0YXRlKGNoLT5mc20pIDwgQ0hfWElEN19QRU5ESU5HKQogCQlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ0hfWElEN19QRU5ESU5HKTsKQEAgLTIyNjgsMTcgKzIwMjUsMTIgQEAKIAl9CiAJa2ZyZWUobXBjZ2luZm8pOwogCi0JaWYgKGRvX2RlYnVnKSB7Ci0JCWN0Y21fcHJfZGVidWcoImN0Y21wYzolcygpICVzIHhpZDI6JWkgeGlkNzolaSB4aWR0X3AyOiVpIFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGNoLT5pZCwKLQkJCQlncnAtPm91dHN0YW5kaW5nX3hpZDIsCi0JCQkJZ3JwLT5vdXRzdGFuZGluZ194aWQ3LAotCQkJCWdycC0+b3V0c3RhbmRpbmdfeGlkN19wMik7Ci0JCWN0Y21fcHJfZGVidWcoImN0Y21wYzolcygpICVzIGdycHN0YXRlOiAlcyBjaGFuc3RhdGU6ICVzIFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGNoLT5pZCwKLQkJCQlmc21fZ2V0c3RhdGVfc3RyKGdycC0+ZnNtKSwKLQkJCQlmc21fZ2V0c3RhdGVfc3RyKGNoLT5mc20pKTsKLQl9CisJQ1RDTV9QUl9ERUJVRygiY3RjbXBjOiVzKCkgJXMgeGlkMjolaSB4aWQ3OiVpIHhpZHRfcDI6JWkgXG4iLAorCQlfX2Z1bmNfXywgY2gtPmlkLCBncnAtPm91dHN0YW5kaW5nX3hpZDIsCisJCWdycC0+b3V0c3RhbmRpbmdfeGlkNywgZ3JwLT5vdXRzdGFuZGluZ194aWQ3X3AyKTsKKwlDVENNX1BSX0RFQlVHKCJjdGNtcGM6JXMoKSAlcyBncnBzdGF0ZTogJXMgY2hhbnN0YXRlOiAlcyBcbiIsCisJCV9fZnVuY19fLCBjaC0+aWQsCisJCWZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pLCBmc21fZ2V0c3RhdGVfc3RyKGNoLT5mc20pKTsKIAlyZXR1cm47CiAKIH0KQEAgLTIyOTYsMTUgKzIwNDgsMTAgQEAKIAlzdHJ1Y3QgY3RjbV9wcml2ICAgKnByaXYgICAgPSBkZXYtPnByaXY7CiAJc3RydWN0IG1wY19ncm91cCAgICpncnAgICAgID0gcHJpdi0+bXBjZzsKIAotCWlmIChkb19kZWJ1ZykgewotCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLCBjaC0+aWQpOwotCi0JCWN0Y21fcHJfZGVidWcoImN0Y21wYzogIG91dHN0YW5kaW5nX3hpZDc6ICVpLCAiCi0JCQkJIiBvdXRzdGFuZGluZ194aWQ3X3AyOiAlaVxuIiwKLQkJCQlncnAtPm91dHN0YW5kaW5nX3hpZDcsCi0JCQkJZ3JwLT5vdXRzdGFuZGluZ194aWQ3X3AyKTsKLQl9CisJQ1RDTV9QUl9ERUJVRygiRW50ZXIgJXM6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCisJCV9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLCBjaC0+aWQpOworCUNUQ01fUFJfREVCVUcoIiVzOiBvdXRzdGFuZGluZ194aWQ3OiAlaSwgb3V0c3RhbmRpbmdfeGlkN19wMjogJWlcbiIsCisJCV9fZnVuY19fLCBncnAtPm91dHN0YW5kaW5nX3hpZDcsIGdycC0+b3V0c3RhbmRpbmdfeGlkN19wMik7CiAKIAlncnAtPm91dHN0YW5kaW5nX3hpZDctLTsKIAljaC0+eGlkX3NrYi0+ZGF0YSA9IGNoLT54aWRfc2tiX2RhdGE7CkBAIC0yMzM3LDE0ICsyMDg0LDggQEAKIAkJbXBjX3ZhbGlkYXRlX3hpZChtcGNnaW5mbyk7CiAJCWJyZWFrOwogCX0KLQogCWtmcmVlKG1wY2dpbmZvKTsKLQotCWlmIChkb19kZWJ1ZykKLQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gsIGNoLT5pZCk7CiAJcmV0dXJuOwotCiB9CiAKIC8qCkBAIC0yMzUzLDM2ICsyMDk0LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgbXBjX3NlbmRfcWxsY19kaXNjb250YWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaW50CXJjCT0gMDsKIAlfX3UzMgluZXdfbGVuCT0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAgICpza2I7CiAJc3RydWN0IHFsbGMgICAgICAqcWxsY3B0cjsKLQlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OwotCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgKmdycCA9IHByaXYtPm1wY2c7CiAKLQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6CSVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmMgPSAxOwotCQkJCQlnb3RvIGRvbmU7Ci0JfQotCi0JcHJpdiA9IGRldi0+cHJpdjsKLQlpZiAocHJpdiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzKCkgcHJpdj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyYyA9IDE7Ci0JCQkJCWdvdG8gZG9uZTsKLQl9Ci0KLQlncnAgPSBwcml2LT5tcGNnOwotCWlmIChncnAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcygpIGdycD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyYyA9IDE7Ci0JCQkJCWdvdG8gZG9uZTsKLQl9Ci0JY3RjbV9wcl9pbmZvKCJjdGNtcGM6ICVzKCkgR1JPVVAgU1RBVEU6ICVzXG4iLCBfX0ZVTkNUSU9OX18sCi0JCQltcGNnX3N0YXRlX25hbWVzW2dycC0+c2F2ZWRfc3RhdGVdKTsKKwlDVENNX1BSX0RFQlVHKCIlczogR1JPVVAgU1RBVEU6ICVzXG4iLAorCQlfX2Z1bmNfXywgbXBjZ19zdGF0ZV9uYW1lc1tncnAtPnNhdmVkX3N0YXRlXSk7CiAKIAlzd2l0Y2ggKGdycC0+c2F2ZWRfc3RhdGUpIHsKIAkvKgpAQCAtMjQwOCwxMSArMjEyNywxMCBAQAogCQluZXdfbGVuID0gc2l6ZW9mKHN0cnVjdCBxbGxjKTsKIAkJcWxsY3B0ciA9IGt6YWxsb2MobmV3X2xlbiwgZ2ZwX3R5cGUoKSB8IEdGUF9ETUEpOwogCQlpZiAocWxsY3B0ciA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgImN0Y21wYzogT3V0IG9mIG1lbW9yeSBpbiAlcygpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlyYyA9IDE7Ci0JCQkJZ290byBkb25lOworCQkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCSIlcyglcyk6IHFsbGNwdHIgYWxsb2NhdGlvbiBlcnJvciIsCisJCQkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCiAJCXFsbGNwdHItPnFsbGNfYWRkcmVzcyA9IDB4Y2M7CkBAIC0yNDIxLDMxICsyMTM5LDI5IEBACiAJCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihuZXdfbGVuLCBHRlBfQVRPTUlDKTsKIAogCQlpZiAoc2tiID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzIE91dCBvZiBtZW1vcnkgaW4gbXBjX3NlbmRfcWxsY1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJQ1RDTV9EQkZfVEVYVF8oTVBDX0VSUk9SLCBDVENfREJGX0VSUk9SLAorCQkJCSIlcyglcyk6IHNrYiBhbGxvY2F0aW9uIGVycm9yIiwKKwkJCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lKTsKIAkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJCXJjID0gMTsKIAkJCWtmcmVlKHFsbGNwdHIpOwotCQkJCWdvdG8gZG9uZTsKKwkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKIAkJbWVtY3B5KHNrYl9wdXQoc2tiLCBuZXdfbGVuKSwgcWxsY3B0ciwgbmV3X2xlbik7CiAJCWtmcmVlKHFsbGNwdHIpOwogCiAJCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IDQpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImN0Y21wYzogJXMoKSBVbmFibGUgdG8iCi0JCQkgICAgICAgIiBidWlsZCBkaXNjb250YWN0IGZvciAlc1xuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSk7Ci0JCQlyYyA9IDE7CisJCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCisJCQkJIiVzKCVzKTogc2tiX2hlYWRyb29tIGVycm9yIiwKKwkJCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJZ290byBkb25lOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAogCQkqKChfX3UzMiAqKXNrYl9wdXNoKHNrYiwgNCkpID0gcHJpdi0+Y2hhbm5lbFtSRUFEXS0+cGR1X3NlcTsKIAkJcHJpdi0+Y2hhbm5lbFtSRUFEXS0+cGR1X3NlcSsrOwotCQlpZiAoZG9fZGVidWdfZGF0YSkKLQkJCWN0Y21fcHJfZGVidWcoImN0Y21wYzogJXMgVG9EQ01fcGR1X3NlcT0gJTA4eFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIHByaXYtPmNoYW5uZWxbUkVBRF0tPnBkdV9zZXEpOworCQlDVENNX1BSX0RCR0RBVEEoImN0Y21wYzogJXMgVG9EQ01fcGR1X3NlcT0gJTA4eFxuIiwKKwkJCQlfX2Z1bmNfXywgcHJpdi0+Y2hhbm5lbFtSRUFEXS0+cGR1X3NlcSk7CiAKIAkJLyogcmVjZWlwdCBvZiBDQzAzIHJlc2V0cyBhbnRpY2lwYXRlZCBzZXF1ZW5jZSBudW1iZXIgb24KIAkJICAgICAgcmVjZWl2aW5nIHNpZGUgKi8KQEAgLTI0NTUsNyArMjE3MSw3IEBACiAJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9TTkFQKTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAotCQljdGNtcGNfZHVtcGl0KChjaGFyICopc2tiLT5kYXRhLCAoc2l6ZW9mKHN0cnVjdCBxbGxjKSArIDQpKTsKKwkJQ1RDTV9EM19EVU1QKHNrYi0+ZGF0YSwgKHNpemVvZihzdHJ1Y3QgcWxsYykgKyA0KSk7CiAKIAkJbmV0aWZfcngoc2tiKTsKIAkJYnJlYWs7CkBAIC0yNDY0LDkgKzIxODAsNyBAQAogCiAJfQogCi1kb25lOgotCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0OiAgJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAvKiAtLS0gVGhpcyBpcyB0aGUgRU5EIG15IGZyaWVuZCAtLS0gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5oIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5oCmluZGV4IGY5OTY4NjAuLjUzMzYxMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmgKQEAgLTIzMSw3ICsyMzEsNyBAQAogaW50IGN0Y21wY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwogdm9pZCBjdGNtX2Njd19jaGVja19yYyhzdHJ1Y3QgY2hhbm5lbCAqLCBpbnQsIGNoYXIgKik7CiB2b2lkIG1wY19ncm91cF9yZWFkeSh1bnNpZ25lZCBsb25nIGFkZXYpOwotaW50IG1wY19jaGFubmVsX2FjdGlvbihzdHJ1Y3QgY2hhbm5lbCAqY2gsIGludCBkaXJlY3Rpb24sIGludCBhY3Rpb24pOwordm9pZCBtcGNfY2hhbm5lbF9hY3Rpb24oc3RydWN0IGNoYW5uZWwgKmNoLCBpbnQgZGlyZWN0aW9uLCBpbnQgYWN0aW9uKTsKIHZvaWQgbXBjX2FjdGlvbl9zZW5kX2Rpc2NvbnRhY3QodW5zaWduZWQgbG9uZyB0aGlzY2hhbik7CiB2b2lkIG1wY19hY3Rpb25fZGlzY29udGFjdChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CiB2b2lkIGN0Y21wY19iaCh1bnNpZ25lZCBsb25nIHRoaXNjaGFuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCmluZGV4IDIyZjY0YWEuLjM4ZGUzMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwpAQCAtMjAxMyw3ICsyMDEzLDcgQEAKIAkJfQogCX0KIAotCWlmIChyYyAmJiAhKG5ldGRldl9wcml2KHZsYW5fZGV2X2luZm8oZGV2KS0+cmVhbF9kZXYpID09ICh2b2lkICopY2FyZCkpCisJaWYgKHJjICYmICEobmV0ZGV2X3ByaXYodmxhbl9kZXZfcmVhbF9kZXYoZGV2KSkgPT0gKHZvaWQgKiljYXJkKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gcmM7CkBAIC0yMDQ5LDcgKzIwNDksNyBAQAogCWlmIChyYyA9PSBRRVRIX1JFQUxfQ0FSRCkKIAkJY2FyZCA9IG5ldGRldl9wcml2KGRldik7CiAJZWxzZSBpZiAocmMgPT0gUUVUSF9WTEFOX0NBUkQpCi0JCWNhcmQgPSBuZXRkZXZfcHJpdih2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2KTsKKwkJY2FyZCA9IG5ldGRldl9wcml2KHZsYW5fZGV2X3JlYWxfZGV2KGRldikpOwogCWlmIChjYXJkICYmIGNhcmQtPm9wdGlvbnMubGF5ZXIyKQogCQljYXJkID0gTlVMTDsKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgIiVkIiwgcmMpOwpAQCAtMjY1MSw3ICsyNjUxLDcgQEAKIAkJCXRhZyA9ICh1MTYgKikobmV3X3NrYi0+ZGF0YSArIDEyKTsKIAkJCSp0YWcgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKTsKIAkJCSoodGFnICsgMSkgPSBodG9ucyh2bGFuX3R4X3RhZ19nZXQobmV3X3NrYikpOwotCQkJVkxBTl9UWF9TS0JfQ0IobmV3X3NrYiktPm1hZ2ljID0gMDsKKwkJCW5ld19za2ItPnZsYW5fdGNpID0gMDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvdWN0cmwuYyBiL2RyaXZlcnMvc2J1cy9jaGFyL3VjdHJsLmMKaW5kZXggNTEzYmE2MS4uNzc3NjM3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvdWN0cmwuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci91Y3RybC5jCkBAIC0xOTUsOCArMTk1LDggQEAKIAogc3RhdGljIHN0cnVjdCB1Y3RybF9kcml2ZXIgZHJ2OwogCi12b2lkIHVjdHJsX2dldF9ldmVudF9zdGF0dXModm9pZCk7Ci12b2lkIHVjdHJsX2dldF9leHRlcm5hbF9zdGF0dXModm9pZCk7CitzdGF0aWMgdm9pZCB1Y3RybF9nZXRfZXZlbnRfc3RhdHVzKHZvaWQpOworc3RhdGljIHZvaWQgdWN0cmxfZ2V0X2V4dGVybmFsX3N0YXR1cyh2b2lkKTsKIAogc3RhdGljIGludAogdWN0cmxfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0yNjYsMTIgKzI2Niw2IEBACiAgIGRyaXZlci0+cmVncy0+dWN0cmxfc3RhdCA9IFVDVFJMX1NUQVRfUlhORV9TVEE7IFwKIH0KIAotdm9pZCB1Y3RybF9zZXRfdmlkZW8oaW50IHN0YXR1cykKLXsKLQlzdHJ1Y3QgdWN0cmxfZHJpdmVyICpkcml2ZXIgPSAmZHJ2OwotCQotfQotCiBzdGF0aWMgdm9pZCB1Y3RybF9kb190eG4oc3RydWN0IHVjdHJsX3R4biAqdHhuKQogewogCXN0cnVjdCB1Y3RybF9kcml2ZXIgKmRyaXZlciA9ICZkcnY7CkBAIC0zMTEsNyArMzA1LDcgQEAKIAl9CiB9CiAKLXZvaWQgdWN0cmxfZ2V0X2V2ZW50X3N0YXR1cyh2b2lkKQorc3RhdGljIHZvaWQgdWN0cmxfZ2V0X2V2ZW50X3N0YXR1cyh2b2lkKQogewogCXN0cnVjdCB1Y3RybF9kcml2ZXIgKmRyaXZlciA9ICZkcnY7CiAJc3RydWN0IHVjdHJsX3R4biB0eG47CkBAIC0zMzEsNyArMzI1LDcgQEAKIAlkcHJpbnRrKCgiZXYgaXMgJXhcbiIsIGRyaXZlci0+c3RhdHVzLmV2ZW50X3N0YXR1cykpOwogfQogCi12b2lkIHVjdHJsX2dldF9leHRlcm5hbF9zdGF0dXModm9pZCkKK3N0YXRpYyB2b2lkIHVjdHJsX2dldF9leHRlcm5hbF9zdGF0dXModm9pZCkKIHsKIAlzdHJ1Y3QgdWN0cmxfZHJpdmVyICpkcml2ZXIgPSAmZHJ2OwogCXN0cnVjdCB1Y3RybF90eG4gdHhuOwpAQCAtMzYzLDcgKzM1Nyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCB0czEwMl91Y3RybF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHVjdHJsX2RyaXZlciAqZHJpdmVyID0gJmRydjsKLQlpbnQgbGVuLCBpOworCWludCBsZW47CiAJc3RydWN0IGxpbnV4X3Byb21faXJxcyB0bXBfaXJxWzJdOwogICAgICAgICB1bnNpZ25lZCBpbnQgdmFkZHJbMl0gPSB7IDAsIDAgfTsKIAlpbnQgdG1wbm9kZSwgdWN0cmxub2RlID0gcHJvbV9nZXRjaGlsZChwcm9tX3Jvb3Rfbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci92ZmMuaCBiL2RyaXZlcnMvc2J1cy9jaGFyL3ZmYy5oCmluZGV4IGYxYWExMzguLmE1MjQwYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL3ZmYy5oCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL3ZmYy5oCkBAIC0xMzMsOCArMTMzLDYgQEAKIAl1bnNpZ25lZCBjaGFyIHNhYTkwNTFfc3RhdGVfYXJyYXlbVkZDX1NBQTkwNTFfTlJdOwogfTsKIAotZXh0ZXJuIHN0cnVjdCB2ZmNfZGV2ICoqdmZjX2Rldl9sc3Q7Ci0KIHZvaWQgY2FwdHN0YXRfcmVzZXQoc3RydWN0IHZmY19kZXYgKik7CiB2b2lkIG1lbXB0cl9yZXNldChzdHJ1Y3QgdmZjX2RldiAqKTsKIApAQCAtMTQ1LDggKzE0Myw2IEBACiBpbnQgdmZjX2kyY19yZWN2YnVmKHN0cnVjdCB2ZmNfZGV2ICosIHVuc2lnbmVkIGNoYXIsIGNoYXIgKiwgaW50KSA7CiBpbnQgdmZjX2kyY19yZXNldF9idXMoc3RydWN0IHZmY19kZXYgKik7CiBpbnQgdmZjX2luaXRfaTJjX2J1cyhzdHJ1Y3QgdmZjX2RldiAqKTsKLXZvaWQgdmZjX2xvY2tfZGV2aWNlKHN0cnVjdCB2ZmNfZGV2ICopOwotdm9pZCB2ZmNfdW5sb2NrX2RldmljZShzdHJ1Y3QgdmZjX2RldiAqKTsKIAogI2RlZmluZSBWRkNfQ09OVFJPTF9ESUFHTU9ERSAgMHgxMDAwMDAwMAogI2RlZmluZSBWRkNfQ09OVFJPTF9NRU1QVFIgICAgMHgyMDAwMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2Rldi5jIGIvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2Rldi5jCmluZGV4IDFmNmNiOGEuLjI1MTgxYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL3ZmY19kZXYuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci92ZmNfZGV2LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlIDxhc20vdmZjX2lvY3Rscy5oPgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2ZmNfZm9wczsKLXN0cnVjdCB2ZmNfZGV2ICoqdmZjX2Rldl9sc3Q7CitzdGF0aWMgc3RydWN0IHZmY19kZXYgKip2ZmNfZGV2X2xzdDsKIHN0YXRpYyBjaGFyIHZmY3N0cltdPSJ2ZmMiOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgc2FhOTA1MV9pbml0X2FycmF5W1ZGQ19TQUE5MDUxX05SXSA9IHsKIAkweDAwLCAweDY0LCAweDcyLCAweDUyLApAQCAtNTQsMTggKzU0LDE4IEBACiAJMHgzZQogfTsKIAotdm9pZCB2ZmNfbG9ja19kZXZpY2Uoc3RydWN0IHZmY19kZXYgKmRldikKK3N0YXRpYyB2b2lkIHZmY19sb2NrX2RldmljZShzdHJ1Y3QgdmZjX2RldiAqZGV2KQogewogCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2tfbXR4KTsKIH0KIAotdm9pZCB2ZmNfdW5sb2NrX2RldmljZShzdHJ1Y3QgdmZjX2RldiAqZGV2KQorc3RhdGljIHZvaWQgdmZjX3VubG9ja19kZXZpY2Uoc3RydWN0IHZmY19kZXYgKmRldikKIHsKIAltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2tfbXR4KTsKIH0KIAogCi12b2lkIHZmY19jYXB0c3RhdF9yZXNldChzdHJ1Y3QgdmZjX2RldiAqZGV2KSAKK3N0YXRpYyB2b2lkIHZmY19jYXB0c3RhdF9yZXNldChzdHJ1Y3QgdmZjX2RldiAqZGV2KQogewogCWRldi0+Y29udHJvbF9yZWcgfD0gVkZDX0NPTlRST0xfQ0FQVFJFU0VUOwogCXNidXNfd3JpdGVsKGRldi0+Y29udHJvbF9yZWcsICZkZXYtPnJlZ3MtPmNvbnRyb2wpOwpAQCAtNzUsNyArNzUsNyBAQAogCXNidXNfd3JpdGVsKGRldi0+Y29udHJvbF9yZWcsICZkZXYtPnJlZ3MtPmNvbnRyb2wpOwogfQogCi12b2lkIHZmY19tZW1wdHJfcmVzZXQoc3RydWN0IHZmY19kZXYgKmRldikgCitzdGF0aWMgdm9pZCB2ZmNfbWVtcHRyX3Jlc2V0KHN0cnVjdCB2ZmNfZGV2ICpkZXYpCiB7CiAJZGV2LT5jb250cm9sX3JlZyB8PSBWRkNfQ09OVFJPTF9NRU1QVFI7CiAJc2J1c193cml0ZWwoZGV2LT5jb250cm9sX3JlZywgJmRldi0+cmVncy0+Y29udHJvbCk7CkBAIC04NSw3ICs4NSw3IEBACiAJc2J1c193cml0ZWwoZGV2LT5jb250cm9sX3JlZywgJmRldi0+cmVncy0+Y29udHJvbCk7CiB9CiAKLWludCB2ZmNfY3NyX2luaXQoc3RydWN0IHZmY19kZXYgKmRldikKK3N0YXRpYyBpbnQgdmZjX2Nzcl9pbml0KHN0cnVjdCB2ZmNfZGV2ICpkZXYpCiB7CiAJZGV2LT5jb250cm9sX3JlZyA9IDB4ODAwMDAwMDA7CiAJc2J1c193cml0ZWwoZGV2LT5jb250cm9sX3JlZywgJmRldi0+cmVncy0+Y29udHJvbCk7CkBAIC0xMDcsNyArMTA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHZmY19zYWE5MDUxX2luaXQoc3RydWN0IHZmY19kZXYgKmRldikKK3N0YXRpYyBpbnQgdmZjX3NhYTkwNTFfaW5pdChzdHJ1Y3QgdmZjX2RldiAqZGV2KQogewogCWludCBpOwogCkBAIC0xMTksNyArMTE5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGluaXRfdmZjX2h3KHN0cnVjdCB2ZmNfZGV2ICpkZXYpIAorc3RhdGljIGludCBpbml0X3ZmY19odyhzdHJ1Y3QgdmZjX2RldiAqZGV2KQogewogCXZmY19sb2NrX2RldmljZShkZXYpOwogCXZmY19jc3JfaW5pdChkZXYpOwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJcmV0dXJuIDA7IAogfQogCi1pbnQgaW5pdF92ZmNfZGV2c3RydWN0KHN0cnVjdCB2ZmNfZGV2ICpkZXYsIGludCBpbnN0YW5jZSkgCitzdGF0aWMgaW50IGluaXRfdmZjX2RldnN0cnVjdChzdHJ1Y3QgdmZjX2RldiAqZGV2LCBpbnQgaW5zdGFuY2UpCiB7CiAJZGV2LT5pbnN0YW5jZT1pbnN0YW5jZTsKIAltdXRleF9pbml0KCZkZXYtPmRldmljZV9sb2NrX210eCk7CkBAIC0xNDEsNyArMTQxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGluaXRfdmZjX2RldmljZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsc3RydWN0IHZmY19kZXYgKmRldiwgaW50IGluc3RhbmNlKQorc3RhdGljIGludCBpbml0X3ZmY19kZXZpY2Uoc3RydWN0IHNidXNfZGV2ICpzZGV2LHN0cnVjdCB2ZmNfZGV2ICpkZXYsCisJCQkgICBpbnQgaW5zdGFuY2UpCiB7CiAJaWYoZGV2ID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWRkM6IEJvZ3VzIHBvaW50ZXIgcGFzc2VkXG4iKTsKQEAgLTE2OCw3ICsxNjksNyBAQAogfQogCiAKLXN0cnVjdCB2ZmNfZGV2ICp2ZmNfZ2V0X2Rldl9wdHIoaW50IGluc3RhbmNlKSAKK3N0YXRpYyBzdHJ1Y3QgdmZjX2RldiAqdmZjX2dldF9kZXZfcHRyKGludCBpbnN0YW5jZSkKIHsKIAlyZXR1cm4gdmZjX2Rldl9sc3RbaW5zdGFuY2VdOwogfQpAQCAtMjkyLDcgKzI5Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB2ZmNfY2FwdHVyZV9zdGFydChzdHJ1Y3QgdmZjX2RldiAqZGV2KSAKK3N0YXRpYyBpbnQgdmZjX2NhcHR1cmVfc3RhcnQoc3RydWN0IHZmY19kZXYgKmRldikKIHsKIAl2ZmNfY2FwdHN0YXRfcmVzZXQoZGV2KTsKIAlkZXYtPmNvbnRyb2xfcmVnID0gc2J1c19yZWFkbCgmZGV2LT5yZWdzLT5jb250cm9sKTsKQEAgLTMxNCw3ICszMTUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdmZjX2NhcHR1cmVfcG9sbChzdHJ1Y3QgdmZjX2RldiAqZGV2KSAKK3N0YXRpYyBpbnQgdmZjX2NhcHR1cmVfcG9sbChzdHJ1Y3QgdmZjX2RldiAqZGV2KQogewogCWludCB0aW1lb3V0ID0gMTAwMDsKIApAQCAtMzkwLDggKzM5MSw4IEBACiB9CiAKIAotaW50IHZmY19wb3J0X2NoYW5nZV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgCi0JCQkgIHN0cnVjdCB2ZmNfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgYXJnKSAKK3N0YXRpYyBpbnQgdmZjX3BvcnRfY2hhbmdlX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSBzdHJ1Y3QgdmZjX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgY21kOwpAQCAtNDYwLDggKzQ2MSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHZmY19zZXRfdmlkZW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIAotCQkJc3RydWN0IHZmY19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBhcmcpIAorc3RhdGljIGludCB2ZmNfc2V0X3ZpZGVvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCB2ZmNfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCByZXQgPSAwOwogCWludCBjbWQ7CkBAIC01MTEsOCArNTEyLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgdmZjX2dldF92aWRlb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgCi0JCQlzdHJ1Y3QgdmZjX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGFyZykgCitzdGF0aWMgaW50IHZmY19nZXRfdmlkZW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHZmY19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IE5PX0xPQ0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci92ZmNfaTJjLmMgYi9kcml2ZXJzL3NidXMvY2hhci92ZmNfaTJjLmMKaW5kZXggOWVmZWQ3Ny4uMzJiOTg2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2kyYy5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL3ZmY19pMmMuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB2ZmNfaTJjX3dhaXRfZm9yX2J1cyhzdHJ1Y3QgdmZjX2RldiAqZGV2KSAKK3N0YXRpYyBpbnQgdmZjX2kyY193YWl0X2Zvcl9idXMoc3RydWN0IHZmY19kZXYgKmRldikKIHsKIAlpbnQgdGltZW91dCA9IDEwMDA7IAogCkBAIC0xMjYsNyArMTI2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHZmY19pMmNfd2FpdF9mb3JfcGluKHN0cnVjdCB2ZmNfZGV2ICpkZXYsIGludCBhY2spCitzdGF0aWMgaW50IHZmY19pMmNfd2FpdF9mb3JfcGluKHN0cnVjdCB2ZmNfZGV2ICpkZXYsIGludCBhY2spCiB7CiAJaW50IHRpbWVvdXQgPSAxMDAwOyAKIAlpbnQgczE7CkBAIC0xNDQsNyArMTQ0LDggQEAKIH0KIAogI2RlZmluZSBTSElGVChhKSAoKGEpIDw8IDI0KQotaW50IHZmY19pMmNfeG1pdF9hZGRyKHN0cnVjdCB2ZmNfZGV2ICpkZXYsIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciBtb2RlKSAKK3N0YXRpYyBpbnQgdmZjX2kyY194bWl0X2FkZHIoc3RydWN0IHZmY19kZXYgKmRldiwgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJICAgICBjaGFyIG1vZGUpCiB7IAogCWludCByZXQsIHJhZGRyOwogI2lmIDEKQEAgLTE5NSw3ICsxOTYsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdmZjX2kyY194bWl0X2J5dGUoc3RydWN0IHZmY19kZXYgKmRldix1bnNpZ25lZCBjaGFyICpieXRlKSAKK3N0YXRpYyBpbnQgdmZjX2kyY194bWl0X2J5dGUoc3RydWN0IHZmY19kZXYgKmRldix1bnNpZ25lZCBjaGFyICpieXRlKQogewogCWludCByZXQ7CiAJdTMyIHZhbCA9IFNISUZUKCh1bnNpZ25lZCBpbnQpKmJ5dGUpOwpAQCAtMjE4LDcgKzIxOSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHZmY19pMmNfcmVjdl9ieXRlKHN0cnVjdCB2ZmNfZGV2ICpkZXYsIHVuc2lnbmVkIGNoYXIgKmJ5dGUsIGludCBsYXN0KSAKK3N0YXRpYyBpbnQgdmZjX2kyY19yZWN2X2J5dGUoc3RydWN0IHZmY19kZXYgKmRldiwgdW5zaWduZWQgY2hhciAqYnl0ZSwKKwkJCSAgICAgaW50IGxhc3QpCiB7CiAJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2R2bWEuYyBiL2RyaXZlcnMvc2J1cy9kdm1hLmMKaW5kZXggNTdlMTUyNi4uYWIwZDJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2R2bWEuYworKysgYi9kcml2ZXJzL3NidXMvZHZtYS5jCkBAIC0xNiw3ICsxNiw3IEBACiAKIHN0cnVjdCBzYnVzX2RtYSAqZG1hX2NoYWluOwogCi12b2lkIF9faW5pdCBpbml0X29uZV9kdm1hKHN0cnVjdCBzYnVzX2RtYSAqZG1hLCBpbnQgbnVtX2RtYSkKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X29uZV9kdm1hKHN0cnVjdCBzYnVzX2RtYSAqZG1hLCBpbnQgbnVtX2RtYSkKIHsKIAlwcmludGsoImRtYSVkOiAiLCBudW1fZG1hKTsKIAkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9zYnVzLmMgYi9kcml2ZXJzL3NidXMvc2J1cy5jCmluZGV4IGMzN2Q3YzIuLjczYTg2ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9zYnVzLmMKKysrIGIvZHJpdmVycy9zYnVzL3NidXMuYwpAQCAtNzgsNyArNzgsNyBAQAogCWVsc2UKIAkJc2Rldi0+b2ZkZXYuZGV2LnBhcmVudCA9ICZzZGV2LT5idXMtPm9mZGV2LmRldjsKIAlzZGV2LT5vZmRldi5kZXYuYnVzID0gJnNidXNfYnVzX3R5cGU7Ci0Jc3ByaW50ZihzZGV2LT5vZmRldi5kZXYuYnVzX2lkLCAic2J1c1slMDh4XSIsIGRwLT5ub2RlKTsKKwlkZXZfc2V0X25hbWUoJnNkZXYtPm9mZGV2LmRldiwgInNidXNbJTA4eF0iLCBkcC0+bm9kZSk7CiAKIAlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKCZzZGV2LT5vZmRldikgIT0gMCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgInNidXM6IGRldmljZSByZWdpc3RyYXRpb24gZXJyb3IgZm9yICVzIVxuIiwKQEAgLTI1NywxMSArMjU3LDExIEBACiAJc2J1cy0+b2ZkZXYubm9kZSA9IGRwOwogCXNidXMtPm9mZGV2LmRldi5wYXJlbnQgPSBOVUxMOwogCXNidXMtPm9mZGV2LmRldi5idXMgPSAmc2J1c19idXNfdHlwZTsKLQlzcHJpbnRmKHNidXMtPm9mZGV2LmRldi5idXNfaWQsICJzYnVzJWQiLCBudW1fc2J1cyk7CisJZGV2X3NldF9uYW1lKCZzYnVzLT5vZmRldi5kZXYsICJzYnVzJWQiLCBudW1fc2J1cyk7CiAKIAlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKCZzYnVzLT5vZmRldikgIT0gMCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgInNidXM6IGRldmljZSByZWdpc3RyYXRpb24gZXJyb3IgZm9yICVzIVxuIiwKLQkJICAgICAgIHNidXMtPm9mZGV2LmRldi5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoJnNidXMtPm9mZGV2LmRldikpOwogCiAJZGV2X2RwID0gZHAtPmNoaWxkOwogCXdoaWxlIChkZXZfZHApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IDJiYzMwZTMuLjFmZTA5MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtMjcxLDggKzI3MSw4IEBACiAJCXBIYmEtPmluaXRpYWxpemVkID0gVFJVRTsKIAkJcEhiYS0+c3RhdGUgJj0gfkRQVElfU1RBVEVfUkVTRVQ7CiAJCWlmIChhZHB0X3N5c2ZzX2NsYXNzKSB7Ci0JCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZpY2VfY3JlYXRlKGFkcHRfc3lzZnNfY2xhc3MsCi0JCQkJTlVMTCwgTUtERVYoRFBUSV9JMk9fTUFKT1IsIHBIYmEtPnVuaXQpLAorCQkJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGFkcHRfc3lzZnNfY2xhc3MsCisJCQkJTlVMTCwgTUtERVYoRFBUSV9JMk9fTUFKT1IsIHBIYmEtPnVuaXQpLCBOVUxMLAogCQkJCSJkcHRpJWQiLCBwSGJhLT51bml0KTsKIAkJCWlmIChJU19FUlIoZGV2KSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkciZHB0aSVkOiB1bmFibGUgdG8gIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hvc3RzLmMgYi9kcml2ZXJzL3Njc2kvaG9zdHMuYwppbmRleCAzNWNkODkyLi5mZWQwYjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaG9zdHMuYworKysgYi9kcml2ZXJzL3Njc2kvaG9zdHMuYwpAQCAtMjMyLDggKzIzMiw4IEBACiAJfQogCiAJaWYgKHNob3N0LT50cmFuc3BvcnR0LT5jcmVhdGVfd29ya19xdWV1ZSkgewotCQlzbnByaW50ZihzaG9zdC0+d29ya19xX25hbWUsIEtPQkpfTkFNRV9MRU4sICJzY3NpX3dxXyVkIiwKLQkJCXNob3N0LT5ob3N0X25vKTsKKwkJc25wcmludGYoc2hvc3QtPndvcmtfcV9uYW1lLCBzaXplb2Yoc2hvc3QtPndvcmtfcV9uYW1lKSwKKwkJCSAic2NzaV93cV8lZCIsIHNob3N0LT5ob3N0X25vKTsKIAkJc2hvc3QtPndvcmtfcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAogCQkJCQlzaG9zdC0+d29ya19xX25hbWUpOwogCQlpZiAoIXNob3N0LT53b3JrX3EpIHsKQEAgLTQ2Niw3ICs0NjYsOCBAQAogCXN0cnVjdCBkZXZpY2UgKmNkZXY7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBFUlJfUFRSKC1FTlhJTyk7CiAKLQljZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJnNob3N0X2NsYXNzLCAmaG9zdG51bSwgX19zY3NpX2hvc3RfbWF0Y2gpOworCWNkZXYgPSBjbGFzc19maW5kX2RldmljZSgmc2hvc3RfY2xhc3MsIE5VTEwsICZob3N0bnVtLAorCQkJCSBfX3Njc2lfaG9zdF9tYXRjaCk7CiAJaWYgKGNkZXYpIHsKIAkJc2hvc3QgPSBzY3NpX2hvc3RfZ2V0KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKIAkJcHV0X2RldmljZShjZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKaW5kZXggZjg0M2MxMy4uNTM4NTUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKQEAgLTg0LDcgKzg0LDYgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0OwogCiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CQkvKiBDdXJyZW50IHBhY2tldCBjb21tYW5kICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsJCQkvKiBTdGF0dXMvQWN0aW9uIGZsYWdzICovCiAJdW5zaWduZWQgbG9uZyB0cmFuc2Zvcm07CQkvKiBTQ1NJIGNtZCB0cmFuc2xhdGlvbiBsYXllciAqLwogCXVuc2lnbmVkIGxvbmcgbG9nOwkJCS8qIGxvZyBmbGFncyAqLwogfSBpZGVzY3NpX3Njc2lfdDsKQEAgLTEyNiwyMyArMTI1LDE0IEBACiB9CiAKIC8qCi0gKglQZXIgQVRBUEkgZGV2aWNlIHN0YXR1cyBiaXRzLgotICovCi0jZGVmaW5lIElERVNDU0lfRFJRX0lOVEVSUlVQVAkJMAkvKiBEUlEgaW50ZXJydXB0IGRldmljZSAqLwotCi0vKgotICoJaWRlLXNjc2kgcmVxdWVzdHMuCi0gKi8KLSNkZWZpbmUgSURFU0NTSV9QQ19SUQkJCTkwCi0KLS8qCiAgKglQSU8gZGF0YSB0cmFuc2ZlciByb3V0aW5lIHVzaW5nIHRoZSBzY2F0dGVyIGdhdGhlciB0YWJsZS4KICAqLwogc3RhdGljIHZvaWQgaWRlX3Njc2lfaW9fYnVmZmVycyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAogCQkJCXVuc2lnbmVkIGludCBiY291bnQsIGludCB3cml0ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JeGZlcl9mdW5jX3QgKnhmID0gd3JpdGUgPyBod2lmLT5vdXRwdXRfZGF0YSA6IGh3aWYtPmlucHV0X2RhdGE7CisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKKwl4ZmVyX2Z1bmNfdCAqeGYgPSB3cml0ZSA/IHRwX29wcy0+b3V0cHV0X2RhdGEgOiB0cF9vcHMtPmlucHV0X2RhdGE7CiAJY2hhciAqYnVmOwogCWludCBjb3VudDsKIApAQCAtMjI4LDcgKzIxOCw2IEBACiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfU0VOU0U7CiAJcnEtPmNtZF9mbGFncyB8PSBSRVFfUFJFRU1QVDsKIAlwYy0+dGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1JFQURZOwotCXBjLT5jYWxsYmFjayA9IGlkZV9zY3NpX2NhbGxiYWNrOwogCS8qIE5PVEUhIFNhdmUgdGhlIGZhaWxlZCBwYWNrZXQgY29tbWFuZCBpbiAicnEtPmJ1ZmZlciIgKi8KIAlycS0+YnVmZmVyID0gKHZvaWQgKikgZmFpbGVkX2NtZC0+c3BlY2lhbDsKIAlwYy0+c2NzaV9jbWQgPSAoKHN0cnVjdCBpZGVfYXRhcGlfcGMgKikgZmFpbGVkX2NtZC0+c3BlY2lhbCktPnNjc2lfY21kOwpAQCAtMjM3LDYgKzIyNiw3IEBACiAJCWlkZV9zY3NpX2hleF9kdW1wKHBjLT5jLCA2KTsKIAl9CiAJcnEtPnJxX2Rpc2sgPSBzY3NpLT5kaXNrOworCW1lbWNweShycS0+Y21kLCBwYy0+YywgMTIpOwogCWlkZV9kb19kcml2ZV9jbWQoZHJpdmUsIHJxKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NiwxMCArMjM2LDkgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKLQlpZiAoaWRlX3JlYWRfc3RhdHVzKGRyaXZlKSAmIChCVVNZX1NUQVQgfCBEUlFfU1RBVCkpCisJaWYgKGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgJiAoQlVTWV9TVEFUIHwgRFJRX1NUQVQpKQogCQkvKiBmb3JjZSBhbiBhYm9ydCAqLwotCQlod2lmLT5PVVRCU1lOQyhod2lmLCBXSU5fSURMRUlNTUVESUFURSwKLQkJCSAgICAgICBod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOworCQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBXSU5fSURMRUlNTUVESUFURSk7CiAKIAlycS0+ZXJyb3JzKys7CiAKQEAgLTQyMSwxMCArNDEwLDYgQEAKIAogCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkgfHwgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKIAkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSAoc3RydWN0IGlkZV9hdGFwaV9wYyAqKXJxLT5zcGVjaWFsOwotCQlpZGVzY3NpX3Njc2lfdCAqc2NzaSA9IGRyaXZlX3RvX2lkZXNjc2koZHJpdmUpOwotCi0JCWlmICh0ZXN0X2JpdChJREVTQ1NJX0RSUV9JTlRFUlJVUFQsICZzY3NpLT5mbGFncykpCi0JCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19EUlFfSU5URVJSVVBUOwogCiAJCWlmIChkcml2ZS0+dXNpbmdfZG1hICYmICFpZGVzY3NpX21hcF9zZyhkcml2ZSwgcGMpKQogCQkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfRE1BX09LOwpAQCAtNDYwLDExICs0NDUsMTQgQEAKIHN0YXRpYyB2b2lkIGlkZXNjc2lfc2V0dXAgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlc2NzaV9zY3NpX3QgKnNjc2kpCiB7CiAJaWYgKGRyaXZlLT5pZCAmJiAoZHJpdmUtPmlkLT5jb25maWcgJiAweDAwNjApID09IDB4MjApCi0JCXNldF9iaXQgKElERVNDU0lfRFJRX0lOVEVSUlVQVCwgJnNjc2ktPmZsYWdzKTsKKwkJc2V0X2JpdChJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCwgJmRyaXZlLT5hdGFwaV9mbGFncyk7CiAJY2xlYXJfYml0KElERVNDU0lfU0dfVFJBTlNGT1JNLCAmc2NzaS0+dHJhbnNmb3JtKTsKICNpZiBJREVTQ1NJX0RFQlVHX0xPRwogCXNldF9iaXQoSURFU0NTSV9MT0dfQ01ELCAmc2NzaS0+bG9nKTsKICNlbmRpZiAvKiBJREVTQ1NJX0RFQlVHX0xPRyAqLworCisJZHJpdmUtPnBjX2NhbGxiYWNrID0gaWRlX3Njc2lfY2FsbGJhY2s7CisKIAlpZGVzY3NpX2FkZF9zZXR0aW5ncyhkcml2ZSk7CiB9CiAKQEAgLTYxNiw3ICs2MDQsNiBAQAogCXBjLT5zY3NpX2NtZCA9IGNtZDsKIAlwYy0+ZG9uZSA9IGRvbmU7CiAJcGMtPnRpbWVvdXQgPSBqaWZmaWVzICsgY21kLT50aW1lb3V0X3Blcl9jb21tYW5kOwotCXBjLT5jYWxsYmFjayA9IGlkZV9zY3NpX2NhbGxiYWNrOwogCiAJaWYgKHRlc3RfYml0KElERVNDU0lfTE9HX0NNRCwgJnNjc2ktPmxvZykpIHsKIAkJcHJpbnRrICgiaWRlLXNjc2k6ICVzOiBxdWUgJWx1LCBjbWQgPSAiLCBkcml2ZS0+bmFtZSwgY21kLT5zZXJpYWxfbnVtYmVyKTsKQEAgLTYzMSw2ICs2MTgsNyBAQAogCXJxLT5zcGVjaWFsID0gKGNoYXIgKikgcGM7CiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfU1BFQ0lBTDsKIAlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKKwltZW1jcHkocnEtPmNtZCwgcGMtPmMsIDEyKTsKIAlibGtfZXhlY3V0ZV9ycV9ub3dhaXQoZHJpdmUtPnF1ZXVlLCBzY3NpLT5kaXNrLCBycSwgMCwgTlVMTCk7CiAJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCA1ZmQ2NGU3Li5hMjcyYjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtNDE3LDE1ICs0MTcsMTYgQEAKIAlmY19ob3N0LT5uZXh0X3Zwb3J0X251bWJlciA9IDA7CiAJZmNfaG9zdC0+bnBpdl92cG9ydHNfaW51c2UgPSAwOwogCi0Jc25wcmludGYoZmNfaG9zdC0+d29ya19xX25hbWUsIEtPQkpfTkFNRV9MRU4sICJmY193cV8lZCIsCi0JCXNob3N0LT5ob3N0X25vKTsKKwlzbnByaW50ZihmY19ob3N0LT53b3JrX3FfbmFtZSwgc2l6ZW9mKGZjX2hvc3QtPndvcmtfcV9uYW1lKSwKKwkJICJmY193cV8lZCIsIHNob3N0LT5ob3N0X25vKTsKIAlmY19ob3N0LT53b3JrX3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKIAkJCQkJZmNfaG9zdC0+d29ya19xX25hbWUpOwogCWlmICghZmNfaG9zdC0+d29ya19xKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNucHJpbnRmKGZjX2hvc3QtPmRldmxvc3Nfd29ya19xX25hbWUsIEtPQkpfTkFNRV9MRU4sICJmY19kbF8lZCIsCi0JCXNob3N0LT5ob3N0X25vKTsKKwlzbnByaW50ZihmY19ob3N0LT5kZXZsb3NzX3dvcmtfcV9uYW1lLAorCQkgc2l6ZW9mKGZjX2hvc3QtPmRldmxvc3Nfd29ya19xX25hbWUpLAorCQkgImZjX2RsXyVkIiwgc2hvc3QtPmhvc3Rfbm8pOwogCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCiAJCQkJCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xX25hbWUpOwogCWlmICghZmNfaG9zdC0+ZGV2bG9zc193b3JrX3EpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggM2FmN2NiYy4uMDQzYzM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCWludCBlcnI7CiAKIAlmb3IgKGlkID0gMTsgaWQgPCBJU0NTSV9NQVhfRVBJRDsgaWQrKykgewotCQlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmaXNjc2lfZW5kcG9pbnRfY2xhc3MsICZpZCwKKwkJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJmlzY3NpX2VuZHBvaW50X2NsYXNzLCBOVUxMLCAmaWQsCiAJCQkJCWlzY3NpX21hdGNoX2VwaWQpOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmaXNjc2lfZW5kcG9pbnRfY2xhc3MsICZoYW5kbGUsCisJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJmlzY3NpX2VuZHBvaW50X2NsYXNzLCBOVUxMLCAmaGFuZGxlLAogCQkJCWlzY3NpX21hdGNoX2VwaWQpOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKQEAgLTI0Nyw4ICsyNDcsOCBAQAogCWF0b21pY19zZXQoJmlob3N0LT5ucl9zY2FucywgMCk7CiAJbXV0ZXhfaW5pdCgmaWhvc3QtPm11dGV4KTsKIAotCXNucHJpbnRmKGlob3N0LT5zY2FuX3dvcmtxX25hbWUsIEtPQkpfTkFNRV9MRU4sICJpc2NzaV9zY2FuXyVkIiwKLQkJc2hvc3QtPmhvc3Rfbm8pOworCXNucHJpbnRmKGlob3N0LT5zY2FuX3dvcmtxX25hbWUsIHNpemVvZihpaG9zdC0+c2Nhbl93b3JrcV9uYW1lKSwKKwkJICJpc2NzaV9zY2FuXyVkIiwgc2hvc3QtPmhvc3Rfbm8pOwogCWlob3N0LT5zY2FuX3dvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCiAJCQkJCQlpaG9zdC0+c2Nhbl93b3JrcV9uYW1lKTsKIAlpZiAoIWlob3N0LT5zY2FuX3dvcmtxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKaW5kZXggMDI3NjQ3MS4uNjU1OGE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYworKysgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCkBAIC00LDggKzQsNiBAQAogICogRHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnQgb24gdGhlIDIxMjg1IFN0cm9uZ0FybS0xMTAgY29yZSBsb2dpYyBjaGlwLgogICoKICAqIEJhc2VkIG9uIGRyaXZlcnMvY2hhci9zZXJpYWwuYwotICoKLSAqICAkSWQ6IDIxMjg1LmMsdiAxLjM3IDIwMDIvMDcvMjggMTA6MDM6Mjcgcm1rIEV4cCAkCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KQEAgLTg4LDcgKzg2LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzZXJpYWwyMTI4NV9yeF9jaGFycyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9pZDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzLCBjaCwgZmxhZywgcnhzLCBtYXhfY291bnQgPSAyNTY7CiAKIAlzdGF0dXMgPSAqQ1NSX1VBUlRGTEc7CkBAIC0yMzcsOCArMjM1LDggQEAKIAliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgcG9ydC0+dWFydGNsay8xNik7IAogCXF1b3QgPSB1YXJ0X2dldF9kaXZpc29yKHBvcnQsIGJhdWQpOwogCi0JaWYgKHBvcnQtPmluZm8gJiYgcG9ydC0+aW5mby0+dHR5KSB7Ci0JCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT50dHk7CisJaWYgKHBvcnQtPmluZm8gJiYgcG9ydC0+aW5mby0+cG9ydC50dHkpIHsKKwkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OwogCQl1bnNpZ25lZCBpbnQgYiA9IHBvcnQtPnVhcnRjbGsgLyAoMTYgKiBxdW90KTsKIAkJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiLCBiKTsKIAl9CkBAIC00OTQsNyArNDkyLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiAyMTI4NSBkcml2ZXIgJFJldmlzaW9uOiAxLjM3ICRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlNlcmlhbDogMjEyODUgZHJpdmVyXG4iKTsKIAogCXNlcmlhbDIxMjg1X3NldHVwX3BvcnRzKCk7CiAKQEAgLTUxNSw1ICs1MTMsNSBAQAogbW9kdWxlX2V4aXQoc2VyaWFsMjEyODVfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgRm9vdGJyaWRnZSAoMjEyODUpIHNlcmlhbCBkcml2ZXIgJFJldmlzaW9uOiAxLjM3ICQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgRm9vdGJyaWRnZSAoMjEyODUpIHNlcmlhbCBkcml2ZXIiKTsKIE1PRFVMRV9BTElBU19DSEFSREVWKFNFUklBTF8yMTI4NV9NQUpPUiwgU0VSSUFMXzIxMjg1X01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCmluZGV4IGJiZjViYzUuLjM4MWIxMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiB7CiAjaWYgMAogCWlmKHN0YXR1cyAmIERDRCkgewotCQlpZigoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKKwkJaWYoKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKIAkJICAgKChpbmZvLT5jdXJyZWdzWzNdICYgQVVUT19FTkFCKT09MCkpIHsKIAkJCWluZm8tPmN1cnJlZ3NbM10gfD0gQVVUT19FTkFCOwogCQkJaW5mby0+cGVuZHJlZ3NbM10gfD0gQVVUT19FTkFCOwpAQCAtMjc0LDcgKzI3NCw3IEBACiAKIHN0YXRpYyB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IG02OGtfc2VyaWFsICppbmZvLCB1bnNpZ25lZCBzaG9ydCByeCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAltNjgzMjhfdWFydCAqdWFydCA9ICZ1YXJ0X2FkZHJbaW5mby0+bGluZV07CiAJdW5zaWduZWQgY2hhciBjaCwgZmxhZzsKIApAQCAtMzQ1LDcgKzM0NSw3IEBACiAJCWdvdG8gY2xlYXJfYW5kX3JldHVybjsKIAl9CiAKLQlpZigoaW5mby0+eG1pdF9jbnQgPD0gMCkgfHwgaW5mby0+dHR5LT5zdG9wcGVkKSB7CisJaWYoKGluZm8tPnhtaXRfY250IDw9IDApIHx8IGluZm8tPnBvcnQudHR5LT5zdG9wcGVkKSB7CiAJCS8qIFRoYXQncyBwZWN1bGlhci4uLiBUWCBpbnRzIG9mZiAqLwogCQl1YXJ0LT51c3RjbnQgJj0gflVTVENOVF9UWF9JTlRSX01BU0s7CiAJCWdvdG8gY2xlYXJfYW5kX3JldHVybjsKQEAgLTQwMyw3ICs0MDMsNyBAQAogCXN0cnVjdCBtNjhrX3NlcmlhbAkqaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbTY4a19zZXJpYWwsIHRxdWV1ZSk7CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKIAkKLQl0dHkgPSBpbmZvLT50dHk7CisJdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJaWYgKCF0dHkpCiAJCXJldHVybjsKICNpZiAwCkBAIC00MjcsNyArNDI3LDcgQEAKIAlzdHJ1Y3QgbTY4a19zZXJpYWwJKmluZm8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG02OGtfc2VyaWFsLCB0cXVldWVfaGFuZ3VwKTsKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwogCQotCXR0eSA9IGluZm8tPnR0eTsKKwl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwogCkBAIC00NzEsOCArNDcxLDggQEAKIAl1YXJ0LT51c3RjbnQgPSBVU1RDTlRfVUVOIHwgVVNUQ05UX1JYRU4gfCBVU1RDTlRfUlhfSU5UUl9NQVNLOwogI2VuZGlmCiAKLQlpZiAoaW5mby0+dHR5KQotCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisJaWYgKGluZm8tPnBvcnQudHR5KQorCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKIAlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7CiAKIAkvKgpAQCAtNTA2LDggKzUwNiw4IEBACiAJCWluZm8tPnhtaXRfYnVmID0gMDsKIAl9CiAKLQlpZiAoaW5mby0+dHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCQogCWluZm8tPmZsYWdzICY9IH5TX0lOSVRJQUxJWkVEOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTU3Myw5ICs1NzMsOSBAQAogCXVuc2lnbmVkIGNmbGFnOwogCWludAlpOwogCi0JaWYgKCFpbmZvLT50dHkgfHwgIWluZm8tPnR0eS0+dGVybWlvcykKKwlpZiAoIWluZm8tPnBvcnQudHR5IHx8ICFpbmZvLT5wb3J0LnR0eS0+dGVybWlvcykKIAkJcmV0dXJuOwotCWNmbGFnID0gaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJaWYgKCEocG9ydCA9IGluZm8tPnBvcnQpKQogCQlyZXR1cm47CiAKQEAgLTExMzEsNyArMTEzMSw3IEBACiAJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJdHR5LT5jbG9zaW5nID0gMDsKIAlpbmZvLT5ldmVudCA9IDA7Ci0JaW5mby0+dHR5ID0gMDsKKwlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CiAjd2FybmluZyAiVGhpcyBpcyBub3QgYW5kIGhhcyBuZXZlciBiZWVuIHZhbGlkIHNvIGZpeCBpdCIJCiAjaWYgMAogCWlmICh0dHktPmxkaXNjLm51bSAhPSBsZGlzY3NbTl9UVFldLm51bSkgewpAQCAtMTE2OSw3ICsxMTY5LDcgQEAKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+Y291bnQgPSAwOwogCWluZm8tPmZsYWdzICY9IH5TX05PUk1BTF9BQ1RJVkU7Ci0JaW5mby0+dHR5ID0gMDsKKwlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwogfQogCkBAIC0xMjg2LDcgKzEyODYsNyBAQAogCiAJaW5mby0+Y291bnQrKzsKIAl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKLQlpbmZvLT50dHkgPSB0dHk7CisJaW5mby0+cG9ydC50dHkgPSB0dHk7CiAKIAkvKgogCSAqIFN0YXJ0IHVwIHNlcmlhbCBwb3J0CkBAIC0xMzYzLDcgKzEzNjMsNyBAQAogCSAgICBpbmZvID0gJm02OGtfc29mdFtpXTsKIAkgICAgaW5mby0+bWFnaWMgPSBTRVJJQUxfTUFHSUM7CiAJICAgIGluZm8tPnBvcnQgPSAoaW50KSAmdWFydF9hZGRyW2ldOwotCSAgICBpbmZvLT50dHkgPSAwOworCSAgICBpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CiAJICAgIGluZm8tPmlycSA9IHVhcnRfaXJxc1tpXTsKIAkgICAgaW5mby0+Y3VzdG9tX2Rpdmlzb3IgPSAxNjsKIAkgICAgaW5mby0+Y2xvc2VfZGVsYXkgPSA1MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzY4MzYwc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC82ODM2MHNlcmlhbC5jCmluZGV4IGQ5ZDRlOTUuLjI0NjYxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzY4MzYwc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAKIHN0YXRpYyBfSU5MSU5FXyB2b2lkIHJlY2VpdmVfY2hhcnMoc2VyX2luZm9fdCAqaW5mbykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBjaGFyIGNoLCBmbGFnLCAqY3A7CiAJLyppbnQJaWdub3JlZCA9IDA7Ki8KIAlpbnQJaTsKQEAgLTUxNCw3ICs1MTQsNyBAQAogCiBzdGF0aWMgX0lOTElORV8gdm9pZCByZWNlaXZlX2JyZWFrKHNlcl9pbmZvX3QgKmluZm8pCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAKIAlpbmZvLT5zdGF0ZS0+aWNvdW50LmJyaysrOwogCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyByb29tIGluIHRoZSB0dHkgYnVmZmVyIGZvcgpAQCAtNTI4LDcgKzUyOCw3IEBACiB7CiAKIAlpZiAoKGluZm8tPmZsYWdzICYgVFhfV0FLRVVQKSB8fAotCSAgICAoaW5mby0+dHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSkgeworCSAgICAoaW5mby0+cG9ydC50dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpKSB7CiAJCXNjaGVkdWxlX3dvcmsoJmluZm8tPnRxdWV1ZSk7CiAJfQogCkBAIC01ODQsMTIgKzU4NCwxMiBAQAogCQl9CiAJfQogCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSB7Ci0JCWlmIChpbmZvLT50dHktPmh3X3N0b3BwZWQpIHsKKwkJaWYgKGluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkKSB7CiAJCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfQ1RTKSB7CiAjaWYgKGRlZmluZWQoU0VSSUFMX0RFQlVHX0lOVFIpIHx8IGRlZmluZWQoU0VSSUFMX0RFQlVHX0ZMT1cpKQogCQkJCXByaW50aygiQ1RTIHR4IHN0YXJ0Li4uIik7CiAjZW5kaWYKLQkJCQlpbmZvLT50dHktPmh3X3N0b3BwZWQgPSAwOworCQkJCWluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkID0gMDsKIAkJCQlpbmZvLT5JRVIgfD0gVUFSVF9JRVJfVEhSSTsKIAkJCQlzZXJpYWxfb3V0KGluZm8sIFVBUlRfSUVSLCBpbmZvLT5JRVIpOwogCQkJCXJzX3NjaGVkX2V2ZW50KGluZm8sIFJTX0VWRU5UX1dSSVRFX1dBS0VVUCk7CkBAIC02MDAsNyArNjAwLDcgQEAKICNpZiAoZGVmaW5lZChTRVJJQUxfREVCVUdfSU5UUikgfHwgZGVmaW5lZChTRVJJQUxfREVCVUdfRkxPVykpCiAJCQkJcHJpbnRrKCJDVFMgdHggc3RvcC4uLiIpOwogI2VuZGlmCi0JCQkJaW5mby0+dHR5LT5od19zdG9wcGVkID0gMTsKKwkJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQkJaW5mby0+SUVSICY9IH5VQVJUX0lFUl9USFJJOwogCQkJCXNlcmlhbF9vdXQoaW5mbywgVUFSVF9JRVIsIGluZm8tPklFUik7CiAJCQl9CkBAIC02NzAsNyArNjcwLDcgQEAKIAlzZXJfaW5mb190CSppbmZvID0gKHNlcl9pbmZvX3QgKikgcHJpdmF0ZV87CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKIAkKLQl0dHkgPSBpbmZvLT50dHk7CisJdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJaWYgKCF0dHkpCiAJCXJldHVybjsKIApAQCAtNjkzLDcgKzY5Myw3IEBACiAJc3RydWN0IGFzeW5jX3N0cnVjdAkqaW5mbyA9IChzdHJ1Y3QgYXN5bmNfc3RydWN0ICopIHByaXZhdGVfOwogCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CiAJCi0JdHR5ID0gaW5mby0+dHR5OworCXR0eSA9IGluZm8tPnBvcnQudHR5OwogCWlmICghdHR5KQogCQlyZXR1cm47CiAKQEAgLTcyMSw4ICs3MjEsOCBAQAogCiAjaWZkZWYgbWF5YmUKIAlpZiAoIXN0YXRlLT5wb3J0IHx8ICFzdGF0ZS0+dHlwZSkgewotCQlpZiAoaW5mby0+dHR5KQotCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwkJaWYgKGluZm8tPnBvcnQudHR5KQorCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCQlnb3RvIGVycm91dDsKIAl9CiAjZW5kaWYKQEAgLTczNCwxMiArNzM0LDEyIEBACiAKICNpZmRlZiBtb2RlbV9jb250cm9sCiAJaW5mby0+TUNSID0gMDsKLQlpZiAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpCisJaWYgKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpCiAJCWluZm8tPk1DUiA9IFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUzsKICNlbmRpZgogCQotCWlmIChpbmZvLT50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCiAJLyoKIAkgKiBhbmQgc2V0IHRoZSBzcGVlZCBvZiB0aGUgc2VyaWFsIHBvcnQKQEAgLTg0Miw4ICs4NDIsOCBAQAogCQkJc21jcC0+c21jX3NtY21yICY9IH4oU01DTVJfUkVOIHwgU01DTVJfVEVOKTsKIAl9CiAJCi0JaWYgKGluZm8tPnR0eSkKLQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKIAogCWluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC04NjMsOSArODYzLDkgQEAKIAl2b2xhdGlsZSBzdHJ1Y3Qgc21jX3JlZ3MJKnNtY3A7CiAJdm9sYXRpbGUgc3RydWN0IHNjY19yZWdzCSpzY2NwOwogCi0JaWYgKCFpbmZvLT50dHkgfHwgIWluZm8tPnR0eS0+dGVybWlvcykKKwlpZiAoIWluZm8tPnBvcnQudHR5IHx8ICFpbmZvLT5wb3J0LnR0eS0+dGVybWlvcykKIAkJcmV0dXJuOwotCWNmbGFnID0gaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAKIAlzdGF0ZSA9IGluZm8tPnN0YXRlOwogCkBAIC05MzYsMjQgKzkzNiwyNCBAQAogCSAqIFNldCB1cCBwYXJpdHkgY2hlY2sgZmxhZwogCSAqLwogCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgPSAoQkRfU0NfRU1QVFkgfCBCRF9TQ19PVik7Ci0JaWYgKElfSU5QQ0soaW5mby0+dHR5KSkKKwlpZiAoSV9JTlBDSyhpbmZvLT5wb3J0LnR0eSkpCiAJCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgfD0gQkRfU0NfRlIgfCBCRF9TQ19QUjsKLQlpZiAoSV9CUktJTlQoaW5mby0+dHR5KSB8fCBJX1BBUk1SSyhpbmZvLT50dHkpKQorCWlmIChJX0JSS0lOVChpbmZvLT5wb3J0LnR0eSkgfHwgSV9QQVJNUksoaW5mby0+cG9ydC50dHkpKQogCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrIHw9IEJEX1NDX0JSOwogCQogCS8qCiAJICogQ2hhcmFjdGVycyB0byBpZ25vcmUKIAkgKi8KIAlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgPSAwOwotCWlmIChJX0lHTlBBUihpbmZvLT50dHkpKQorCWlmIChJX0lHTlBBUihpbmZvLT5wb3J0LnR0eSkpCiAJCWluZm8tPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBCRF9TQ19QUiB8IEJEX1NDX0ZSOwotCWlmIChJX0lHTkJSSyhpbmZvLT50dHkpKSB7CisJaWYgKElfSUdOQlJLKGluZm8tPnBvcnQudHR5KSkgewogCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gQkRfU0NfQlI7CiAJCS8qCiAJCSAqIElmIHdlJ3JlIGlnbm9yZSBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsIGlnbm9yZSAKIAkJICogb3ZlcnJ1bnMgdG9vLiAgKEZvciByZWFsIHJhdyBzdXBwb3J0KS4KIAkJICovCi0JCWlmIChJX0lHTlBBUihpbmZvLT50dHkpKQorCQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQogCQkJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrIHw9IEJEX1NDX09WOwogCX0KIAkvKgpAQCAtMTY1OCw3ICsxNjU4LDcgQEAKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsJCQogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+ZXZlbnQgPSAwOwotCWluZm8tPnR0eSA9IDA7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOwogCWlmIChpbmZvLT5ibG9ja2VkX29wZW4pIHsKIAkJaWYgKGluZm8tPmNsb3NlX2RlbGF5KSB7CiAJCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKGluZm8tPmNsb3NlX2RlbGF5KSk7CkBAIC0xNzU4LDcgKzE3NTgsNyBAQAogCWluZm8tPmV2ZW50ID0gMDsKIAlzdGF0ZS0+Y291bnQgPSAwOwogCWluZm8tPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwotCWluZm8tPnR0eSA9IDA7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKIH0KIApAQCAtMTkxOSw3ICsxOTE5LDcgQEAKIAlwcmludGsoInJzX29wZW4gJXMsIGNvdW50ID0gJWRcbiIsIHR0eS0+bmFtZSwgaW5mby0+c3RhdGUtPmNvdW50KTsKICNlbmRpZgogCXR0eS0+ZHJpdmVyX2RhdGEgPSBpbmZvOwotCWluZm8tPnR0eSA9IHR0eTsKKwlpbmZvLT5wb3J0LnR0eSA9IHR0eTsKIAogCS8qCiAJICogU3RhcnQgdXAgc2VyaWFsIHBvcnQKQEAgLTE5NzYsNyArMTk3Niw3IEBACiAJCWluZm8tPnBvcnQgPSBzdGF0ZS0+cG9ydDsKIAkJaW5mby0+ZmxhZ3MgPSBzdGF0ZS0+ZmxhZ3M7CiAJCWluZm8tPnF1b3QgPSAwOwotCQlpbmZvLT50dHkgPSAwOworCQlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CiAJfQogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJc3RhdHVzID0gc2VyaWFsX2luKGluZm8sIFVBUlRfTVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCBiZTk1ZTU1Li4yN2YzNGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC0xMiw4ICsxMiw2IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgJElkOiA4MjUwLmMsdiAxLjkwIDIwMDIvMDcvMjggMTA6MDM6Mjcgcm1rIEV4cCAkCi0gKgogICogQSBub3RlIGFib3V0IG1hcGJhc2UgLyBtZW1iYXNlCiAgKgogICogIG1hcGJhc2UgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIElPIHBvcnQuCkBAIC0xMjg5LDcgKzEyODcsNyBAQAogc3RhdGljIHZvaWQKIHJlY2VpdmVfY2hhcnMoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCwgdW5zaWduZWQgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaCwgbHNyID0gKnN0YXR1czsKIAlpbnQgbWF4X2NvdW50ID0gMjU2OwogCWNoYXIgZmxhZzsKQEAgLTE4NzYsNyArMTg3NCw5IEBACiAJCSAqIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4gIERlbGF5cyBhcmUgbmVjZXNzYXJ5IHRvCiAJCSAqIGFsbG93IHJlZ2lzdGVyIGNoYW5nZXMgdG8gYmVjb21lIHZpc2libGUuCiAJCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2soJnVwLT5wb3J0LmxvY2spOworCQlpZiAodXAtPnBvcnQuZmxhZ3MgJiBVUEZfU0hBUkVfSVJRKQorCQkJZGlzYWJsZV9pcnFfbm9zeW5jKHVwLT5wb3J0LmlycSk7CiAKIAkJd2FpdF9mb3JfeG1pdHIodXAsIFVBUlRfTFNSX1RIUkUpOwogCQlzZXJpYWxfb3V0X3N5bmModXAsIFVBUlRfSUVSLCBVQVJUX0lFUl9USFJJKTsKQEAgLTE4ODgsNyArMTg4OCw5IEBACiAJCWlpciA9IHNlcmlhbF9pbih1cCwgVUFSVF9JSVIpOwogCQlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgMCk7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCQlpZiAodXAtPnBvcnQuZmxhZ3MgJiBVUEZfU0hBUkVfSVJRKQorCQkJZW5hYmxlX2lycSh1cC0+cG9ydC5pcnEpOworCQlzcGluX3VubG9jaygmdXAtPnBvcnQubG9jayk7CiAKIAkJLyoKIAkJICogSWYgdGhlIGludGVycnVwdCBpcyBub3QgcmVhc3NlcnRlZCwgc2V0dXAgYSB0aW1lciB0bwpAQCAtMjkzNCw3ICsyOTM2LDcgQEAKIAlpZiAobnJfdWFydHMgPiBVQVJUX05SKQogCQlucl91YXJ0cyA9IFVBUlRfTlI7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IDgyNTAvMTY1NTAgZHJpdmVyICRSZXZpc2lvbjogMS45MCAkICIKKwlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IDgyNTAvMTY1NTAgZHJpdmVyIgogCQkiJWQgcG9ydHMsIElSUSBzaGFyaW5nICVzYWJsZWRcbiIsIG5yX3VhcnRzLAogCQlzaGFyZV9pcnFzID8gImVuIiA6ICJkaXMiKTsKIApAQCAtMjk5NSw3ICsyOTk3LDcgQEAKIEVYUE9SVF9TWU1CT0woc2VyaWFsODI1MF9yZXN1bWVfcG9ydCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyA4MjUwLzE2eDUwIHNlcmlhbCBkcml2ZXIgJFJldmlzaW9uOiAxLjkwICQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyA4MjUwLzE2eDUwIHNlcmlhbCBkcml2ZXIiKTsKIAogbW9kdWxlX3BhcmFtKHNoYXJlX2lycXMsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzaGFyZV9pcnFzLCAiU2hhcmUgSVJRcyB3aXRoIG90aGVyIG5vbi04MjUwLzE2eDUwIGRldmljZXMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmggYi9kcml2ZXJzL3NlcmlhbC84MjUwLmgKaW5kZXggOTFiZDI4Zi4uNzhjMDAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5oCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuaApAQCAtMTEsOCArMTEsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAkSWQ6IDgyNTAuaCx2IDEuOCAyMDAyLzA3LzIxIDIxOjMyOjMwIHJtayBFeHAgJAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggNzg4YzM1NTkuLjFiMzYwODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwpAQCAtMTAsOCArMTAsNiBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqICAkSWQ6IDgyNTBfcGNpLmMsdiAxLjI4IDIwMDIvMTEvMDIgMTE6MTQ6MTggcm1rIEV4cCAkCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BucC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wbnAuYwppbmRleCA2MzhiNjg2Li5mZGU3ZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BucC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcG5wLmMKQEAgLTEyLDggKzEyLDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiAgJElkOiA4MjUwX3BucC5jLHYgMS4xMCAyMDAyLzA3LzIxIDIxOjMyOjMwIHJtayBFeHAgJAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggMThjYTkwNy4uOGZjNzQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC0xLDggKzEsNiBAQAogIwogIyBTZXJpYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24KICMKLSMgJElkOiBLY29uZmlnLHYgMS4xMSAyMDA0LzAzLzExIDE4OjA4OjA0IGxldGhhbCBFeHAgJAotIwogCiBtZW51ICJTZXJpYWwgZHJpdmVycyIKIAlkZXBlbmRzIG9uIEhBU19JT01FTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQppbmRleCA3ZDg1YzFmLi4zYTBiYmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQpAQCAtMSw4ICsxLDYgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgc2VyaWFsIGRldmljZSBkcml2ZXJzLgogIwotIyAgJElkOiBNYWtlZmlsZSx2IDEuOCAyMDAyLzA3LzIxIDIxOjMyOjMwIHJtayBFeHAgJAotIwogCiBvYmotJChDT05GSUdfU0VSSUFMX0NPUkUpICs9IHNlcmlhbF9jb3JlLm8KIG9iai0kKENPTkZJR19TRVJJQUxfMjEyODUpICs9IDIxMjg1Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwppbmRleCBlODhkYTcyLi45MGI1NmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCkBAIC0yMiw4ICsyMiw2IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICoKLSAqICAkSWQ6IGFtYmEuYyx2IDEuNDEgMjAwMi8wNy8yOCAxMDowMzoyNyBybWsgRXhwICQKLSAqCiAgKiBUaGlzIGlzIGEgZ2VuZXJpYyBkcml2ZXIgZm9yIEFSTSBBTUJBLXR5cGUgc2VyaWFsIHBvcnRzLiAgVGhleQogICogaGF2ZSBhIGxvdCBvZiAxNjU1MC1saWtlIGZlYXR1cmVzLCBidXQgYXJlIG5vdCByZWdpc3RlciBjb21wYXRpYmxlLgogICogTm90ZSB0aGF0IGFsdGhvdWdoIHRoZXkgZG8gaGF2ZSBDVFMsIERDRCBhbmQgRFNSIGlucHV0cywgdGhleSBkbwpAQCAtMTE5LDcgKzExNyw3IEBACiAKIHN0YXRpYyB2b2lkIHBsMDEwX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXAtPnBvcnQuaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsYWcsIHJzciwgbWF4X2NvdW50ID0gMjU2OwogCiAJc3RhdHVzID0gcmVhZGIodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0ZSKTsKQEAgLTc5MSw3ICs3ODksNyBAQAogewogCWludCByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IEFNQkEgZHJpdmVyICRSZXZpc2lvbjogMS40MSAkXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IEFNQkEgZHJpdmVyXG4iKTsKIAogCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZhbWJhX3JlZyk7CiAJaWYgKHJldCA9PSAwKSB7CkBAIC04MTIsNSArODEwLDUgQEAKIG1vZHVsZV9leGl0KHBsMDEwX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJBUk0gTHRkL0RlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFSTSBBTUJBIHNlcmlhbCBwb3J0IGRyaXZlciAkUmV2aXNpb246IDEuNDEgJCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBUk0gQU1CQSBzZXJpYWwgcG9ydCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwppbmRleCAwOGFkYzFkLi45ZDA4ZjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCkBAIC0yMiw4ICsyMiw2IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICoKLSAqICAkSWQ6IGFtYmEuYyx2IDEuNDEgMjAwMi8wNy8yOCAxMDowMzoyNyBybWsgRXhwICQKLSAqCiAgKiBUaGlzIGlzIGEgZ2VuZXJpYyBkcml2ZXIgZm9yIEFSTSBBTUJBLXR5cGUgc2VyaWFsIHBvcnRzLiAgVGhleQogICogaGF2ZSBhIGxvdCBvZiAxNjU1MC1saWtlIGZlYXR1cmVzLCBidXQgYXJlIG5vdCByZWdpc3RlciBjb21wYXRpYmxlLgogICogTm90ZSB0aGF0IGFsdGhvdWdoIHRoZXkgZG8gaGF2ZSBDVFMsIERDRCBhbmQgRFNSIGlucHV0cywgdGhleSBkbwpAQCAtMTA5LDcgKzEwNyw3IEBACiAKIHN0YXRpYyB2b2lkIHBsMDExX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXAtPnBvcnQuaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsYWcsIG1heF9jb3VudCA9IDI1NjsKIAogCXN0YXR1cyA9IHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9GUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmluZGV4IDZhZWVmMjJiLi4xZmVlMTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwpAQCAtNjYyLDE0ICs2NjIsMTQgQEAKIAkgKiB1YXJ0X3N0YXJ0KCksIHdoaWNoIHRha2VzIHRoZSBsb2NrLgogCSAqLwogCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKLQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5pbmZvLT50dHkpOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPmluZm8tPnBvcnQudHR5KTsKIAlzcGluX2xvY2soJnBvcnQtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBhdG1lbF9yeF9mcm9tX2RtYShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSB0b19hdG1lbF91YXJ0X3BvcnQocG9ydCk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CiAJc3RydWN0IGF0bWVsX2RtYV9idWZmZXIgKnBkYzsKIAlpbnQgcnhfaWR4ID0gYXRtZWxfcG9ydC0+cGRjX3J4X2lkeDsKIAl1bnNpZ25lZCBpbnQgaGVhZDsKQEAgLTc5NCw3ICs3OTQsNyBAQAogc3RhdGljIGludCBhdG1lbF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IHRvX2F0bWVsX3VhcnRfcG9ydChwb3J0KTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKIAlpbnQgcmV0dmFsOwogCiAJLyoKQEAgLTk1Niw2ICs5NTYsMjAgQEAKIH0KIAogLyoKKyAqIEZsdXNoIGFueSBUWCBkYXRhIHN1Ym1pdHRlZCBmb3IgRE1BLiBDYWxsZWQgd2hlbiB0aGUgVFggY2lyY3VsYXIKKyAqIGJ1ZmZlciBpcyByZXNldC4KKyAqLworc3RhdGljIHZvaWQgYXRtZWxfZmx1c2hfYnVmZmVyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IHRvX2F0bWVsX3VhcnRfcG9ydChwb3J0KTsKKworCWlmIChhdG1lbF91c2VfZG1hX3R4KHBvcnQpKSB7CisJCVVBUlRfUFVUX1RDUihwb3J0LCAwKTsKKwkJYXRtZWxfcG9ydC0+cGRjX3R4Lm9mcyA9IDA7CisJfQorfQorCisvKgogICogUG93ZXIgLyBDbG9jayBtYW5hZ2VtZW50LgogICovCiBzdGF0aWMgdm9pZCBhdG1lbF9zZXJpYWxfcG0oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHN0YXRlLApAQCAtMTE4OSw2ICsxMjAzLDcgQEAKIAkuYnJlYWtfY3RsCT0gYXRtZWxfYnJlYWtfY3RsLAogCS5zdGFydHVwCT0gYXRtZWxfc3RhcnR1cCwKIAkuc2h1dGRvd24JPSBhdG1lbF9zaHV0ZG93biwKKwkuZmx1c2hfYnVmZmVyCT0gYXRtZWxfZmx1c2hfYnVmZmVyLAogCS5zZXRfdGVybWlvcwk9IGF0bWVsX3NldF90ZXJtaW9zLAogCS50eXBlCQk9IGF0bWVsX3R5cGUsCiAJLnJlbGVhc2VfcG9ydAk9IGF0bWVsX3JlbGVhc2VfcG9ydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCmluZGV4IGZkOWJiNzcuLjlkODU0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1BJTwogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfcnhfY2hhcnMoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVhcnQtPnBvcnQuaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXJ0LT5wb3J0LmluZm8tPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBmbGc7CiAJc3RhdGljIHN0cnVjdCB0aW1ldmFsIGFub21hbHlfc3RhcnQgPSB7IC50dl9zZWMgPSAwIH07CiAKQEAgLTM5Myw3ICszOTMsNyBAQAogCiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9kbWFfcnhfY2hhcnMoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVhcnQtPnBvcnQuaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXJ0LT5wb3J0LmluZm8tPnBvcnQudHR5OwogCWludCBpLCBmbGcsIHN0YXR1czsKIAogCXN0YXR1cyA9IFVBUlRfR0VUX0xTUih1YXJ0KTsKQEAgLTU1Miw3ICs1NTIsNyBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCXN0cnVjdCB1YXJ0X2luZm8gKmluZm8gPSB1YXJ0LT5wb3J0LmluZm87Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAKIAlzdGF0dXMgPSBiZmluX3NlcmlhbF9nZXRfbWN0cmwoJnVhcnQtPnBvcnQpOwogCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnVhcnQtPnBvcnQsIHN0YXR1cyAmIFRJT0NNX0NUUyk7CkBAIC04MTQsMTAgKzgxNCwxMCBAQAogCWludCBsaW5lID0gcG9ydC0+bGluZTsKIAl1bnNpZ25lZCBzaG9ydCB2YWw7CiAKLQlpZiAobGluZSA+PSBwb3J0LT5pbmZvLT50dHktPmRyaXZlci0+bnVtKQorCWlmIChsaW5lID49IHBvcnQtPmluZm8tPnBvcnQudHR5LT5kcml2ZXItPm51bSkKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChwb3J0LT5pbmZvLT50dHktPmxkaXNjLm51bSkgeworCXN3aXRjaCAocG9ydC0+aW5mby0+cG9ydC50dHktPmxkaXNjLm51bSkgewogCWNhc2UgTl9JUkRBOgogCQl2YWwgPSBVQVJUX0dFVF9HQ1RMKCZiZmluX3NlcmlhbF9wb3J0c1tsaW5lXSk7CiAJCXZhbCB8PSAoSVJFTiB8IFJQT0xDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fc3BvcnRfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmMKaW5kZXggYWNhMTI0MC4uZGQ4NTY0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogc3RhdGljIGlycXJldHVybl90IHNwb3J0X3VhcnRfcnhfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCA9IGRldl9pZDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBpbnQgY2g7CiAKIAlkbyB7CkBAIC0yMDEsNyArMjAxLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzcG9ydF91YXJ0X2Vycl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwID0gZGV2X2lkOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0ID0gU1BPUlRfR0VUX1NUQVQodXApOwogCiAJLyogT3ZlcmZsb3cgaW4gUlggRklGTyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKaW5kZXggMjM4MjcxOC4uZmMxZmE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCkBAIC0yMSw5ICsyMSw2IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKiAgJElkOiBjbHBzNzExeC5jLHYgMS40MiAyMDAyLzA3LzI4IDEwOjAzOjI4IHJtayBFeHAgJAotICoKICAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0NMUFM3MTFYX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQpAQCAtOTYsNyArOTMsNyBAQAogc3RhdGljIGlycXJldHVybl90IGNscHM3MTF4dWFydF9pbnRfcngoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsZzsKIAogCXN0YXR1cyA9IGNscHNfcmVhZGwoU1lTRkxHKHBvcnQpKTsKQEAgLTU1MSw3ICs1NDgsNyBAQAogewogCWludCByZXQsIGk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IENMUFM3MTF4IGRyaXZlciAkUmV2aXNpb246IDEuNDIgJFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBDTFBTNzExeCBkcml2ZXJcbiIpOwogCiAJcmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJmNscHM3MTF4X3JlZyk7CiAJaWYgKHJldCkKQEAgLTU3Nyw2ICs1NzQsNiBAQAogbW9kdWxlX2V4aXQoY2xwczcxMXh1YXJ0X2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJEZWVwIEJsdWUgU29sdXRpb25zIEx0ZCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDTFBTLTcxMXggZ2VuZXJpYyBzZXJpYWwgZHJpdmVyICRSZXZpc2lvbjogMS40MiAkIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNMUFMtNzExeCBnZW5lcmljIHNlcmlhbCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19DSEFSREVWKFNFUklBTF9DTFBTNzExWF9NQUpPUiwgU0VSSUFMX0NMUFM3MTFYX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCBhYmUxMjljLi4xZmY4MGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCkBAIC0yMDEsNiArMjAxLDEwIEBACiAJY3BtX3VhcnRfdHhfcHVtcChwb3J0KTsKIH0KIAorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKK3N0YXRpYyBpbnQgc2VyaWFsX3BvbGxlZDsKKyNlbmRpZgorCiAvKgogICogUmVjZWl2ZSBjaGFyYWN0ZXJzCiAgKi8KQEAgLTIwOSw3ICsyMTMsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgY2g7CiAJdTggKmNwOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OwogCXN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbyA9IChzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqKXBvcnQ7CiAJY2JkX3QgX19pb21lbSAqYmRwOwogCXUxNiBzdGF0dXM7CkBAIC0yMjIsNiArMjI2LDEyIEBACiAJICovCiAJYmRwID0gcGluZm8tPnJ4X2N1cjsKIAlmb3IgKDs7KSB7CisjaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTAorCQlpZiAodW5saWtlbHkoc2VyaWFsX3BvbGxlZCkpIHsKKwkJCXNlcmlhbF9wb2xsZWQgPSAwOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYKIAkJLyogZ2V0IHN0YXR1cyAqLwogCQlzdGF0dXMgPSBpbl9iZTE2KCZiZHAtPmNiZF9zYyk7CiAJCS8qIElmIHRoaXMgb25lIGlzIGVtcHR5LCByZXR1cm4gaGFwcHkgKi8KQEAgLTI1Myw3ICsyNjMsMTIgQEAKIAkJCQlnb3RvIGhhbmRsZV9lcnJvcjsKIAkJCWlmICh1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKHBvcnQsIGNoKSkKIAkJCQljb250aW51ZTsKLQorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKKwkJCWlmICh1bmxpa2VseShzZXJpYWxfcG9sbGVkKSkgeworCQkJCXNlcmlhbF9wb2xsZWQgPSAwOworCQkJCXJldHVybjsKKwkJCX0KKyNlbmRpZgogCQkgICAgICBlcnJvcl9yZXR1cm46CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGcpOwogCkBAIC04NjUsNiArODgwLDgwIEBACiAJCWNwbV91YXJ0X3JlcXVlc3RfcG9ydChwb3J0KTsKIAl9CiB9CisKKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCisvKiBTZXJpYWwgcG9sbGluZyByb3V0aW5lcyBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBmcm9tIHRoZSB1YXJ0IHdoaWxlCisgKiBpbiBhbiBpbnRlcnJ1cHQgb3IgZGVidWcgY29udGV4dC4KKyAqLworCisjZGVmaW5lIEdEQl9CVUZfU0laRQk1MTIJLyogcG93ZXIgb2YgMiwgcGxlYXNlICovCisKK3N0YXRpYyBjaGFyIHBvbGxfYnVmW0dEQl9CVUZfU0laRV07CitzdGF0aWMgY2hhciAqcG9sbHA7CitzdGF0aWMgaW50IHBvbGxfY2hhcnM7CisKK3N0YXRpYyBpbnQgcG9sbF93YWl0X2tleShjaGFyICpvYnVmLCBzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCit7CisJdV9jaGFyCQljLCAqY3A7CisJdm9sYXRpbGUgY2JkX3QJKmJkcDsKKwlpbnQJCWk7CisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4KKwkgKi8KKwliZHAgPSBwaW5mby0+cnhfY3VyOworCXdoaWxlIChiZHAtPmNiZF9zYyAmIEJEX1NDX0VNUFRZKQorCQk7CisKKwkvKiBJZiB0aGUgYnVmZmVyIGFkZHJlc3MgaXMgaW4gdGhlIENQTSBEUFJBTSwgZG9uJ3QKKwkgKiBjb252ZXJ0IGl0LgorCSAqLworCWNwID0gY3BtMmNwdV9hZGRyKGJkcC0+Y2JkX2J1ZmFkZHIsIHBpbmZvKTsKKworCWlmIChvYnVmKSB7CisJCWkgPSBjID0gYmRwLT5jYmRfZGF0bGVuOworCQl3aGlsZSAoaS0tID4gMCkKKwkJCSpvYnVmKysgPSAqY3ArKzsKKwl9IGVsc2UKKwkJYyA9ICpjcDsKKwliZHAtPmNiZF9zYyAmPSB+KEJEX1NDX0JSIHwgQkRfU0NfRlIgfCBCRF9TQ19QUiB8IEJEX1NDX09WIHwgQkRfU0NfSUQpOworCWJkcC0+Y2JkX3NjIHw9IEJEX1NDX0VNUFRZOworCisJaWYgKGJkcC0+Y2JkX3NjICYgQkRfU0NfV1JBUCkKKwkJYmRwID0gcGluZm8tPnJ4X2JkX2Jhc2U7CisJZWxzZQorCQliZHArKzsKKwlwaW5mby0+cnhfY3VyID0gKGNiZF90ICopYmRwOworCisJcmV0dXJuIChpbnQpYzsKK30KKworc3RhdGljIGludCBjcG1fZ2V0X3BvbGxfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbyA9IChzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqKXBvcnQ7CisKKwlpZiAoIXNlcmlhbF9wb2xsZWQpIHsKKwkJc2VyaWFsX3BvbGxlZCA9IDE7CisJCXBvbGxfY2hhcnMgPSAwOworCX0KKwlpZiAocG9sbF9jaGFycyA8PSAwKSB7CisJCXBvbGxfY2hhcnMgPSBwb2xsX3dhaXRfa2V5KHBvbGxfYnVmLCBwaW5mbyk7CisJCXBvbGxwID0gcG9sbF9idWY7CisJfQorCXBvbGxfY2hhcnMtLTsKKwlyZXR1cm4gKnBvbGxwKys7Cit9CisKK3N0YXRpYyB2b2lkIGNwbV9wdXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkgdW5zaWduZWQgY2hhciBjKQoreworCXN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbyA9IChzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqKXBvcnQ7CisJc3RhdGljIGNoYXIgY2hbMl07CisKKwljaFswXSA9IChjaGFyKWM7CisJY3BtX3VhcnRfZWFybHlfd3JpdGUocGluZm8tPnBvcnQubGluZSwgY2gsIDEpOworfQorI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgKi8KKwogc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBjcG1fdWFydF9wb3BzID0gewogCS50eF9lbXB0eQk9IGNwbV91YXJ0X3R4X2VtcHR5LAogCS5zZXRfbWN0cmwJPSBjcG1fdWFydF9zZXRfbWN0cmwsCkBAIC04ODIsNiArOTcxLDEwIEBACiAJLnJlcXVlc3RfcG9ydAk9IGNwbV91YXJ0X3JlcXVlc3RfcG9ydCwKIAkuY29uZmlnX3BvcnQJPSBjcG1fdWFydF9jb25maWdfcG9ydCwKIAkudmVyaWZ5X3BvcnQJPSBjcG1fdWFydF92ZXJpZnlfcG9ydCwKKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCisJLnBvbGxfZ2V0X2NoYXIgPSBjcG1fZ2V0X3BvbGxfY2hhciwKKwkucG9sbF9wdXRfY2hhciA9IGNwbV9wdXRfcG9sbF9jaGFyLAorI2VuZGlmCiB9OwogCiBzdHJ1Y3QgdWFydF9jcG1fcG9ydCBjcG1fdWFydF9wb3J0c1tVQVJUX05SXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYyBiL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYwppbmRleCAzZTAzNjZlLi44MjQ5YWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCkBAIC05NjgsNyArOTY4LDcgQEAKIC8qIENhbGN1bGF0ZSB0aGUgY2hhcnRpbWUgZGVwZW5kaW5nIG9uIGJhdWRyYXRlLCBudW1ib3Igb2YgYml0cyBldGMuICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfY2hhcl90aW1lKHN0cnVjdCBlMTAwX3NlcmlhbCAqIGluZm8pCiB7Ci0JdGNmbGFnX3QgY2ZsYWdzID0gaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCXRjZmxhZ190IGNmbGFncyA9IGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCWludCBiaXRzOwogCiAJLyogY2FsYy4gbnVtYmVyIG9mIGJpdHMgLyBkYXRhIGJ5dGUgKi8KQEAgLTE0ODMsNyArMTQ4Myw4IEBACiAJCQkJQ0lSQ19DTlQoaW5mby0+eG1pdC5oZWFkLAogCQkJCQkgaW5mby0+eG1pdC50YWlsLFNFUklBTF9YTUlUX1NJWkUpKSk7CiAKLQkJeG9mZiA9IElPX0ZJRUxEKFJfU0VSSUFMMF9YT0ZGLCB4b2ZmX2NoYXIsIFNUT1BfQ0hBUihpbmZvLT50dHkpKTsKKwkJeG9mZiA9IElPX0ZJRUxEKFJfU0VSSUFMMF9YT0ZGLCB4b2ZmX2NoYXIsCisJCQkJU1RPUF9DSEFSKGluZm8tPnBvcnQudHR5KSk7CiAJCXhvZmYgfD0gSU9fU1RBVEUoUl9TRVJJQUwwX1hPRkYsIHR4X3N0b3AsIHN0b3ApOwogCQlpZiAodHR5LT50ZXJtaW9zLT5jX2lmbGFnICYgSVhPTiApIHsKIAkJCXhvZmYgfD0gSU9fU1RBVEUoUl9TRVJJQUwwX1hPRkYsIGF1dG9feG9mZiwgZW5hYmxlKTsKQEAgLTE3NzIsNyArMTc3Myw3IEBACiAKIAkJaW5mby0+aWNvdW50LnJ4Kys7CiAJfSBlbHNlIHsKLQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKwkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwogCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGEsIGZsYWcpOwogCQlpbmZvLT5pY291bnQucngrKzsKIAl9CkBAIC0xODM4LDcgKzE4MzksNyBAQAogCQlkZXNjci0+c3RhdHVzID0gMDsKIAogCQlERkxPVyggIERFQlVHX0xPRyhpbmZvLT5saW5lLCAiUlggJWx1XG4iLCByZWN2bCk7Ci0JCQlpZiAoaW5mby0+dHR5LT5zdG9wcGVkKSB7CisJCQlpZiAoaW5mby0+cG9ydC50dHktPnN0b3BwZWQpIHsKIAkJCQl1bnNpZ25lZCBjaGFyICpidWYgPSBwaHlzX3RvX3ZpcnQoZGVzY3ItPmJ1Zik7CiAJCQkJREVCVUdfTE9HKGluZm8tPmxpbmUsICJyeCAweCUwMlhcbiIsIGJ1ZlswXSk7CiAJCQkJREVCVUdfTE9HKGluZm8tPmxpbmUsICJyeCAweCUwMlhcbiIsIGJ1ZlsxXSk7CkBAIC0xODcyLDcgKzE4NzMsNyBAQAogCQlJT19TVEFURShSX0RNQV9DSDZfQ0xSX0lOVFIsIGNscl9kZXNjciwgZG8pIHwKIAkJSU9fU1RBVEUoUl9ETUFfQ0g2X0NMUl9JTlRSLCBjbHJfZW9wLCBkbyk7CiAKLQl0dHkgPSBpbmZvLT50dHk7CisJdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJaWYgKCF0dHkpIC8qIFNvbWV0aGluZyB3cm9uZy4uLiAqLwogCQlyZXR1cm47CiAKQEAgLTIxMjIsNyArMjEyMyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0dHkgPSBpbmZvLT50dHk7CisJdHR5ID0gaW5mby0+cG9ydC50dHk7CiAKIAlpZiAoIXR0eSkgewogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0yMjg3LDcgKzIyODgsNyBAQAogc3RydWN0IGUxMDBfc2VyaWFsICogaGFuZGxlX3Nlcl9yeF9pbnRlcnJ1cHRfbm9fZG1hKHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGRhdGFfcmVhZDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAogCWlmICghdHR5KSB7CiAJCXByaW50aygiIU5PIFRUWSFcbiIpOwpAQCAtMjM1MCw3ICsyMzUxLDcgQEAKIAkJCQkJZGF0YV9pbiwgZGF0YV9yZWFkKTsKIAkJCQljaGFyIGZsYWcgPSBUVFlfTk9STUFMOwogCQkJCWlmIChpbmZvLT5lcnJvcmNvZGUgPT0gRVJSQ09ERV9JTlNFUlRfQlJFQUspIHsKLQkJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKKwkJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwogCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIGZsYWcpOwogCQkJCQlpbmZvLT5pY291bnQucngrKzsKIAkJCQl9CkBAIC0yMzk2LDcgKzIzOTcsNyBAQAogCQlnb3RvIG1vcmVfZGF0YTsKIAl9CiAKLQl0dHlfZmxpcF9idWZmZXJfcHVzaChpbmZvLT50dHkpOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKGluZm8tPnBvcnQudHR5KTsKIAlyZXR1cm4gaW5mbzsKIH0KIApAQCAtMjU0Nyw4ICsyNTQ4LDggQEAKIAkJcnN0YXQgPSBpbmZvLT5wb3J0W1JFR19TVEFUVVNdOwogCQlERkxPVyhERUJVR19MT0coaW5mby0+bGluZSwgInN0YXQgJXhcbiIsIHJzdGF0KSk7CiAJCWUxMDBfZGlzYWJsZV9zZXJpYWxfdHhfcmVhZHlfaXJxKGluZm8pOwotCQlpZiAoaW5mby0+dHR5LT5zdG9wcGVkKQotCQkJcnNfc3RvcChpbmZvLT50dHkpOworCQlpZiAoaW5mby0+cG9ydC50dHktPnN0b3BwZWQpCisJCQlyc19zdG9wKGluZm8tPnBvcnQudHR5KTsKIAkJLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCBhbmQgdGVsbCBpdCB0byBjb250aW51ZSAqLwogCQllMTAwX2VuYWJsZV90eGRtYV9jaGFubmVsKGluZm8pOwogCQkvKiBXYWl0IDEyIGN5Y2xlcyBiZWZvcmUgZG9pbmcgdGhlIERNQSBjb21tYW5kICovCkBAIC0yNTYxLDkgKzI1NjIsMTAgQEAKIAl9CiAJLyogTm9ybWFsIGNoYXItYnktY2hhciBpbnRlcnJ1cHQgKi8KIAlpZiAoaW5mby0+eG1pdC5oZWFkID09IGluZm8tPnhtaXQudGFpbAotCSAgICB8fCBpbmZvLT50dHktPnN0b3BwZWQKLQkgICAgfHwgaW5mby0+dHR5LT5od19zdG9wcGVkKSB7Ci0JCURGTE9XKERFQlVHX0xPRyhpbmZvLT5saW5lLCAidHhfaW50OiBzdG9wcGVkICVpXG4iLCBpbmZvLT50dHktPnN0b3BwZWQpKTsKKwkgICAgfHwgaW5mby0+cG9ydC50dHktPnN0b3BwZWQKKwkgICAgfHwgaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQpIHsKKwkJREZMT1coREVCVUdfTE9HKGluZm8tPmxpbmUsICJ0eF9pbnQ6IHN0b3BwZWQgJWlcbiIsCisJCQkJaW5mby0+cG9ydC50dHktPnN0b3BwZWQpKTsKIAkJZTEwMF9kaXNhYmxlX3NlcmlhbF90eF9yZWFkeV9pcnEoaW5mbyk7CiAJCWluZm8tPnRyX3J1bm5pbmcgPSAwOwogCQlyZXR1cm47CkBAIC0yNzI1LDcgKzI3MjcsNyBAQAogCiAJaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZTEwMF9zZXJpYWwsIHdvcmspOwogCi0JdHR5ID0gaW5mby0+dHR5OworCXR0eSA9IGluZm8tPnBvcnQudHR5OwogCWlmICghdHR5KQogCQlyZXR1cm47CiAKQEAgLTI3NjcsOCArMjc2OSw4IEBACiAJLyogQml0cyBhbmQgcGllY2VzIGNvbGxlY3RlZCBmcm9tIGJlbG93LiAgQmV0dGVyIHRvIGhhdmUgdGhlbQogCSAgIGluIG9uZSBpZmRlZjplZCBjbGF1c2UgdGhhbiB0byBtaXggaW4gYSBsb3Qgb2YgaWZkZWZzLAogCSAgIHJpZ2h0PyAqLwotCWlmIChpbmZvLT50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCiAJaW5mby0+eG1pdC5oZWFkID0gaW5mby0+eG1pdC50YWlsID0gMDsKIAlpbmZvLT5maXJzdF9yZWN2X2J1ZmZlciA9IGluZm8tPmxhc3RfcmVjdl9idWZmZXIgPSBOVUxMOwpAQCAtMjgyNSw4ICsyODI3LDggQEAKIAkJZTEwMF9kaXNhYmxlX3R4ZG1hX2NoYW5uZWwoaW5mbyk7CiAJfQogCi0JaWYgKGluZm8tPnR0eSkKLQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAKIAlpbmZvLT54bWl0LmhlYWQgPSBpbmZvLT54bWl0LnRhaWwgPSAwOwogCWluZm8tPmZpcnN0X3JlY3ZfYnVmZmVyID0gaW5mby0+bGFzdF9yZWN2X2J1ZmZlciA9IE5VTEw7CkBAIC0yOTQwLDE0ICsyOTQyLDE0IEBACiAJCQlkZXNjcltpXS5idWYgPSAwOwogCQl9CiAKLQlpZiAoIWluZm8tPnR0eSB8fCAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKSB7CisJaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpIHsKIAkJLyogaGFuZyB1cCBEVFIgYW5kIFJUUyBpZiBIVVBDTCBpcyBlbmFibGVkICovCiAJCWUxMDBfZHRyKGluZm8sIDApOwogCQllMTAwX3J0cyhpbmZvLCAwKTsgLyogY291bGQgY2hlY2sgQ1JUU0NUUyBiZWZvcmUgZG9pbmcgdGhpcyAqLwogCX0KIAotCWlmIChpbmZvLT50dHkpCi0JCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisJaWYgKGluZm8tPnBvcnQudHR5KQorCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAKIAlpbmZvLT5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMjk2NCwxMiArMjk2NiwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLyogZmlyc3Qgc29tZSBzYWZldHkgY2hlY2tzICovCiAKLQlpZiAoIWluZm8tPnR0eSB8fCAhaW5mby0+dHR5LT50ZXJtaW9zKQorCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQogCQlyZXR1cm47CiAJaWYgKCFpbmZvLT5wb3J0KQogCQlyZXR1cm47CiAKLQljZmxhZyA9IGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwljZmxhZyA9IGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCiAJLyogcG9zc2libHksIHRoZSB0eC9yeCBzaG91bGQgYmUgZGlzYWJsZWQgZmlyc3QgdG8gZG8gdGhpcyBzYWZlbHkgKi8KIApAQCAtMzA5NywxMCArMzA5OSwxMSBAQAogCiAJaW5mby0+cG9ydFtSRUdfVFJfQ1RSTF0gPSBpbmZvLT50eF9jdHJsOwogCWluZm8tPnBvcnRbUkVHX1JFQ19DVFJMXSA9IGluZm8tPnJ4X2N0cmw7Ci0JeG9mZiA9IElPX0ZJRUxEKFJfU0VSSUFMMF9YT0ZGLCB4b2ZmX2NoYXIsIFNUT1BfQ0hBUihpbmZvLT50dHkpKTsKKwl4b2ZmID0gSU9fRklFTEQoUl9TRVJJQUwwX1hPRkYsIHhvZmZfY2hhciwgU1RPUF9DSEFSKGluZm8tPnBvcnQudHR5KSk7CiAJeG9mZiB8PSBJT19TVEFURShSX1NFUklBTDBfWE9GRiwgdHhfc3RvcCwgZW5hYmxlKTsKLQlpZiAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnICYgSVhPTiApIHsKLQkJREZMT1coREVCVUdfTE9HKGluZm8tPmxpbmUsICJGTE9XIFhPRkYgZW5hYmxlZCAweCUwMlhcbiIsIFNUT1BfQ0hBUihpbmZvLT50dHkpKSk7CisJaWYgKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2lmbGFnICYgSVhPTiApIHsKKwkJREZMT1coREVCVUdfTE9HKGluZm8tPmxpbmUsICJGTE9XIFhPRkYgZW5hYmxlZCAweCUwMlhcbiIsCisJCQkJU1RPUF9DSEFSKGluZm8tPnBvcnQudHR5KSkpOwogCQl4b2ZmIHw9IElPX1NUQVRFKFJfU0VSSUFMMF9YT0ZGLCBhdXRvX3hvZmYsIGVuYWJsZSk7CiAJfQogCkBAIC0zNDc1LDcgKzM0NzgsNyBAQAogCWluZm8tPnR5cGUgPSBuZXdfc2VyaWFsLnR5cGU7CiAJaW5mby0+Y2xvc2VfZGVsYXkgPSBuZXdfc2VyaWFsLmNsb3NlX2RlbGF5OwogCWluZm8tPmNsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0OwotCWluZm8tPnR0eS0+bG93X2xhdGVuY3kgPSAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKKwlpbmZvLT5wb3J0LnR0eS0+bG93X2xhdGVuY3kgPSAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKIAogIGNoZWNrX2FuZF9leGl0OgogCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CkBAIC0zODExLDcgKzM4MTQsNyBAQAogCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+ZXZlbnQgPSAwOwotCWluZm8tPnR0eSA9IDA7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOwogCWlmIChpbmZvLT5ibG9ja2VkX29wZW4pIHsKIAkJaWYgKGluZm8tPmNsb3NlX2RlbGF5KQogCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKGluZm8tPmNsb3NlX2RlbGF5KTsKQEAgLTM5MTUsNyArMzkxOCw3IEBACiAJaW5mby0+ZXZlbnQgPSAwOwogCWluZm8tPmNvdW50ID0gMDsKIAlpbmZvLT5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQlpbmZvLT50dHkgPSAwOworCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CiB9CiAKQEAgLTQwNzcsOSArNDA4MCw5IEBACiAKIAlpbmZvLT5jb3VudCsrOwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBpbmZvOwotCWluZm8tPnR0eSA9IHR0eTsKKwlpbmZvLT5wb3J0LnR0eSA9IHR0eTsKIAotCWluZm8tPnR0eS0+bG93X2xhdGVuY3kgPSAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKKwlpbmZvLT5wb3J0LnR0eS0+bG93X2xhdGVuY3kgPSAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKIAogCWlmICghdG1wX2J1ZikgewogCQlwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwpAQCAtNDI2NywxNCArNDI3MCwxNCBAQAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5mby0+bWF4X3JlY3ZfY250KTsKIAogI2lmIDEKLQlpZiAoaW5mby0+dHR5KSB7CisJaWYgKGluZm8tPnBvcnQudHR5KSB7CiAKLQkJaWYgKGluZm8tPnR0eS0+c3RvcHBlZCkKKwkJaWYgKGluZm8tPnBvcnQudHR5LT5zdG9wcGVkKQogCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBzdG9wcGVkOiVpIiwKLQkJCQkgICAgICAgKGludClpbmZvLT50dHktPnN0b3BwZWQpOwotCQlpZiAoaW5mby0+dHR5LT5od19zdG9wcGVkKQorCQkJCSAgICAgICAoaW50KWluZm8tPnBvcnQudHR5LT5zdG9wcGVkKTsKKwkJaWYgKGluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkKQogCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBod19zdG9wcGVkOiVpIiwKLQkJCQkgICAgICAgKGludClpbmZvLT50dHktPmh3X3N0b3BwZWQpOworCQkJCSAgICAgICAoaW50KWluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkKTsKIAl9CiAKIAl7CkBAIC00NDY1LDcgKzQ0NjgsNyBAQAogCQlpbmZvLT51c2VzX2RtYV9pbiA9IDA7CiAJCWluZm8tPnVzZXNfZG1hX291dCA9IDA7CiAJCWluZm8tPmxpbmUgPSBpOwotCQlpbmZvLT50dHkgPSAwOworCQlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CiAJCWluZm8tPnR5cGUgPSBQT1JUX0VUUkFYOwogCQlpbmZvLT50cl9ydW5uaW5nID0gMDsKIAkJaW5mby0+Zm9yY2VkX2VvcCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9kei5jIGIvZHJpdmVycy9zZXJpYWwvZHouYwppbmRleCAwZGRkZDY4Li5hODFkMmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9kei5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2R6LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXdoaWxlICgoc3RhdHVzID0gZHpfaW4oZHBvcnQsIERaX1JCVUYpKSAmIERaX0RWQUwpIHsKIAkJZHBvcnQgPSAmbXV4LT5kcG9ydFtMSU5FKHN0YXR1cyldOwogCQl1cG9ydCA9ICZkcG9ydC0+cG9ydDsKLQkJdHR5ID0gdXBvcnQtPmluZm8tPnR0eTsJCS8qIHBvaW50IHRvIHRoZSBwcm9wZXIgZGV2ICovCisJCXR0eSA9IHVwb3J0LT5pbmZvLT5wb3J0LnR0eTsJLyogcG9pbnQgdG8gdGhlIHByb3BlciBkZXYgKi8KIAogCQljaCA9IFVDSEFSKHN0YXR1cyk7CQkvKiBncmFiIHRoZSBjaGFyICovCiAJCWZsYWcgPSBUVFlfTk9STUFMOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJfQogCWZvciAoaSA9IDA7IGkgPCBEWl9OQl9QT1JUOyBpKyspCiAJCWlmIChsaW5lc19yeFtpXSkKLQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKG11eC0+ZHBvcnRbaV0ucG9ydC5pbmZvLT50dHkpOworCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gobXV4LT5kcG9ydFtpXS5wb3J0LmluZm8tPnBvcnQudHR5KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2ljb20uYyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwppbmRleCA5YzJkZjVjLi4yYjc1MzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaWNvbS5jCkBAIC03MzAsNyArNzMwLDcgQEAKIHN0YXRpYyB2b2lkIHJlY3ZfaW50ZXJydXB0KHUxNiBwb3J0X2ludF9yZWcsIHN0cnVjdCBpY29tX3BvcnQgKmljb21fcG9ydCkKIHsKIAlzaG9ydCBpbnQgY291bnQsIHJjdl9idWZmOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpY29tX3BvcnQtPnVhcnRfcG9ydC5pbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGljb21fcG9ydC0+dWFydF9wb3J0LmluZm8tPnBvcnQudHR5OwogCXVuc2lnbmVkIHNob3J0IGludCBzdGF0dXM7CiAJc3RydWN0IHVhcnRfaWNvdW50ICppY291bnQ7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCmluZGV4IDY0YWNiMzkuLmUwZGE0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIHsKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gZGV2X2lkOwogCXVuc2lnbmVkIGludCByeCxmbGcsaWdub3JlZCA9IDA7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHNwb3J0LT5wb3J0LmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgdGVtcDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzcG9ydC0+cG9ydC5sb2NrLGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jCmluZGV4IDRmMWFmNzEuLjZkZDk4ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYwpAQCAtOTA1LDcgKzkwNSw3IEBACiAJCXJldHVybjsKIAogCWluZm8gPSB0aGVfcG9ydC0+aW5mbzsKLQl0dHkgPSBpbmZvLT50dHk7CisJdHR5ID0gaW5mby0+cG9ydC50dHk7CiAKIAlpZiAodWFydF9jaXJjX2VtcHR5KCZpbmZvLT54bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQodGhlX3BvcnQpKSB7CiAJCS8qIE5vdGhpbmcgdG8gZG8gb3IgaHcgc3RvcHBlZCAqLwpAQCAtOTk3LDE0ICs5OTcsMTQgQEAKIAogCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgPSBOX0FMTF9JTlBVVDsKIAotCWluZm8tPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCWluZm8tPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKLQlpZiAoSV9JR05QQVIoaW5mby0+dHR5KSkKKwlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH4oTl9QQVJJVFlfRVJST1IKIAkJCQkJCSAgfCBOX0ZSQU1JTkdfRVJST1IpOwotCWlmIChJX0lHTkJSSyhpbmZvLT50dHkpKSB7CisJaWYgKElfSUdOQlJLKGluZm8tPnBvcnQudHR5KSkgewogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH5OX0JSRUFLOwotCQlpZiAoSV9JR05QQVIoaW5mby0+dHR5KSkKKwkJaWYgKElfSUdOUEFSKGluZm8tPnBvcnQudHR5KSkKIAkJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfk5fT1ZFUlJVTl9FUlJPUjsKIAl9CiAJaWYgKCEoY2ZsYWcgJiBDUkVBRCkpIHsKQEAgLTEzOTksMTQgKzEzOTksMTQgQEAKIAkvKiBNYWtlIHN1cmUgYWxsIHRoZSBwb2ludGVycyBhcmUgImdvb2QiIG9uZXMgKi8KIAlpZiAoIWluZm8pCiAJCXJldHVybiAwOwotCWlmICghaW5mby0+dHR5KQorCWlmICghaW5mby0+cG9ydC50dHkpCiAJCXJldHVybiAwOwogCiAJaWYgKCEocG9ydC0+aXBfZmxhZ3MgJiBJTlBVVF9FTkFCTEUpKQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfcG9ydC0+bG9jaywgcGZsYWdzKTsKLQl0dHkgPSBpbmZvLT50dHk7CisJdHR5ID0gaW5mby0+cG9ydC50dHk7CiAKIAlyZWFkX2NvdW50ID0gZG9fcmVhZCh0aGVfcG9ydCwgY2gsIE1BWF9DSEFSUyk7CiAJaWYgKHJlYWRfY291bnQgPiAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwppbmRleCA0OWI4YTgyLi42YmFiNjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKQEAgLTE2MzUsNyArMTYzNSw3IEBACiAJCXJldHVybjsKIAogCWluZm8gPSB0aGVfcG9ydC0+aW5mbzsKLQl0dHkgPSBpbmZvLT50dHk7CisJdHR5ID0gaW5mby0+cG9ydC50dHk7CiAKIAlpZiAodWFydF9jaXJjX2VtcHR5KCZpbmZvLT54bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQodGhlX3BvcnQpKSB7CiAJCS8qIE5vdGhpbmcgdG8gZG8gb3IgaHcgc3RvcHBlZCAqLwpAQCAtMTczOCwxNCArMTczOCwxNCBAQAogCiAJdGhlX3BvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9IE5fQUxMX0lOUFVUOwogCi0JaW5mby0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJaW5mby0+cG9ydC50dHktPmxvd19sYXRlbmN5ID0gMTsKIAotCWlmIChJX0lHTlBBUihpbmZvLT50dHkpKQorCWlmIChJX0lHTlBBUihpbmZvLT5wb3J0LnR0eSkpCiAJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfihOX1BBUklUWV9FUlJPUgogCQkJCQkJfCBOX0ZSQU1JTkdfRVJST1IpOwotCWlmIChJX0lHTkJSSyhpbmZvLT50dHkpKSB7CisJaWYgKElfSUdOQlJLKGluZm8tPnBvcnQudHR5KSkgewogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH5OX0JSRUFLOwotCQlpZiAoSV9JR05QQVIoaW5mby0+dHR5KSkKKwkJaWYgKElfSUdOUEFSKGluZm8tPnBvcnQudHR5KSkKIAkJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfk5fT1ZFUlJVTl9FUlJPUjsKIAl9CiAJaWYgKCEoY2ZsYWcgJiBDUkVBRCkpIHsKQEAgLTE4MDEsNyArMTgwMSw4IEBACiAJaW9jNF9zZXRfcHJvdG8ocG9ydCwgdGhlX3BvcnQtPm1hcGJhc2UpOwogCiAJLyogc2V0IHRoZSBzcGVlZCBvZiB0aGUgc2VyaWFsIHBvcnQgKi8KLQlpb2M0X2NoYW5nZV9zcGVlZCh0aGVfcG9ydCwgaW5mby0+dHR5LT50ZXJtaW9zLCAoc3RydWN0IGt0ZXJtaW9zICopMCk7CisJaW9jNF9jaGFuZ2Vfc3BlZWQodGhlX3BvcnQsIGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLAorCQkJICAoc3RydWN0IGt0ZXJtaW9zICopMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNDYsMTEgKzIzNDcsMTEgQEAKIAkvKiBNYWtlIHN1cmUgYWxsIHRoZSBwb2ludGVycyBhcmUgImdvb2QiIG9uZXMgKi8KIAlpZiAoIWluZm8pCiAJCXJldHVybjsKLQlpZiAoIWluZm8tPnR0eSkKKwlpZiAoIWluZm8tPnBvcnQudHR5KQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX3BvcnQtPmxvY2ssIHBmbGFncyk7Ci0JdHR5ID0gaW5mby0+dHR5OworCXR0eSA9IGluZm8tPnBvcnQudHR5OwogCiAJcmVxdWVzdF9jb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgSU9DNF9NQVhfQ0hBUlMpOwogCkBAIC0yNDQwLDggKzI0NDEsOCBAQAogCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CiAKLQlpZiAoaW5mby0+dHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9wb3J0LT5sb2NrLCBwb3J0X2ZsYWdzKTsKIAlzZXRfbm90aWZpY2F0aW9uKHBvcnQsIE5fQUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lwMjJ6aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKaW5kZXggOWM5NWJjMC4uMGQ5YWNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKQEAgLTI1Nyw4ICsyNTcsOCBAQAogCiAJdHR5ID0gTlVMTDsKIAlpZiAodXAtPnBvcnQuaW5mbyAhPSBOVUxMICYmCi0JICAgIHVwLT5wb3J0LmluZm8tPnR0eSAhPSBOVUxMKQotCQl0dHkgPSB1cC0+cG9ydC5pbmZvLT50dHk7CisJICAgIHVwLT5wb3J0LmluZm8tPnBvcnQudHR5ICE9IE5VTEwpCisJCXR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OwogCiAJZm9yICg7OykgewogCQljaCA9IHJlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCmluZGV4IGIyZDZmNWIuLmI3NTg0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9uZW8uYwpAQCAtOTk4LDcgKzk5OCw3IEBACiAJCQl7ICAgICA1MCwgQjUwICAgICB9LAogCQl9OwogCi0JCWNmbGFnID0gQ19CQVVEKGNoLT51YXJ0X3BvcnQuaW5mby0+dHR5KTsKKwkJY2ZsYWcgPSBDX0JBVUQoY2gtPnVhcnRfcG9ydC5pbmZvLT5wb3J0LnR0eSk7CiAJCWJhdWQgPSA5NjAwOwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiYXVkX3JhdGVzKTsgaSsrKSB7CiAJCQlpZiAoYmF1ZF9yYXRlc1tpXS5jZmxhZyA9PSBjZmxhZykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKaW5kZXggOTRlYzY2My4uYTY5NzkxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYworKysgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgbG9ja19mbGFncyk7Ci0JdGVybWlvcyA9IHBvcnQtPmluZm8tPnR0eS0+dGVybWlvczsKKwl0ZXJtaW9zID0gcG9ydC0+aW5mby0+cG9ydC50dHktPnRlcm1pb3M7CiAJaWYgKGNoID09IHRlcm1pb3MtPmNfY2NbVlNUQVJUXSkKIAkJY2hhbm5lbC0+Y2hfYmQtPmJkX29wcy0+c2VuZF9zdGFydF9jaGFyYWN0ZXIoY2hhbm5lbCk7CiAKQEAgLTIzOSw3ICsyMzksNyBAQAogCWNoYW5uZWwtPmNoX2NhY2hlZF9sc3IgPSAwOwogCWNoYW5uZWwtPmNoX3N0b3BzX3NlbnQgPSAwOwogCi0JdGVybWlvcyA9IHBvcnQtPmluZm8tPnR0eS0+dGVybWlvczsKKwl0ZXJtaW9zID0gcG9ydC0+aW5mby0+cG9ydC50dHktPnRlcm1pb3M7CiAJY2hhbm5lbC0+Y2hfY19jZmxhZwk9IHRlcm1pb3MtPmNfY2ZsYWc7CiAJY2hhbm5lbC0+Y2hfY19pZmxhZwk9IHRlcm1pb3MtPmNfaWZsYWc7CiAJY2hhbm5lbC0+Y2hfY19vZmxhZwk9IHRlcm1pb3MtPmNfb2ZsYWc7CkBAIC0yNzIsNyArMjcyLDcgQEAKIAlqc21fcHJpbnRrKENMT1NFLCBJTkZPLCAmY2hhbm5lbC0+Y2hfYmQtPnBjaV9kZXYsICJzdGFydFxuIik7CiAKIAliZCA9IGNoYW5uZWwtPmNoX2JkOwotCXRzID0gY2hhbm5lbC0+dWFydF9wb3J0LmluZm8tPnR0eS0+dGVybWlvczsKKwl0cyA9IGNoYW5uZWwtPnVhcnRfcG9ydC5pbmZvLT5wb3J0LnR0eS0+dGVybWlvczsKIAogCWNoYW5uZWwtPmNoX2ZsYWdzICY9IH4oQ0hfU1RPUEkpOwogCkBAIC01MTUsNyArNTE1LDcgQEAKIAlpZiAoIWNoKQogCQlyZXR1cm47CiAKLQl0cCA9IGNoLT51YXJ0X3BvcnQuaW5mby0+dHR5OworCXRwID0gY2gtPnVhcnRfcG9ydC5pbmZvLT5wb3J0LnR0eTsKIAogCWJkID0gY2gtPmNoX2JkOwogCWlmKCFiZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCmluZGV4IGMyYmIxMWMuLjIzZDAzMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwpAQCAtMzI1LDcgKzMyNSw3IEBACiAKIHN0YXRpYyB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IHVhcnRfc2lvX3BvcnQgKnVwLCBpbnQgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBjaGFyIGNoOwogCXVuc2lnbmVkIGNoYXIgZmxhZzsKIAlpbnQgbWF4X2NvdW50ID0gMjU2OwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIHsKIAlpbnQgcmV0LCBpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBNMzJSIFNJTyBkcml2ZXIgJFJldmlzaW9uOiAxLjExICQgIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBNMzJSIFNJTyBkcml2ZXJcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKIAkJc3Bpbl9sb2NrX2luaXQoJmlycV9saXN0c1tpXS5sb2NrKTsKQEAgLTExODksNCArMTE4OSw0IEBACiBFWFBPUlRfU1lNQk9MKG0zMnJfc2lvX3Jlc3VtZV9wb3J0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIE0zMlIgU0lPIHNlcmlhbCBkcml2ZXIgJFJldmlzaW9uOiAxLjExICQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBNMzJSIFNJTyBzZXJpYWwgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tY2YuYyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCmluZGV4IDdlMTY0ZTAuLmIyMDAxYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21jZi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAkJdWFydF9pbnNlcnRfY2hhcihwb3J0LCBzdGF0dXMsIE1DRlVBUlRfVVNSX1JYT1ZFUlJVTiwgY2gsIGZsYWcpOwogCX0KIAotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPmluZm8tPnR0eSk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+aW5mby0+cG9ydC50dHkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21jZnNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMKaW5kZXggNTYwMDdjYy4uZmJlMzgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMKQEAgLTMyNyw3ICszMjcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IG1jZl9zZXJpYWwgKmluZm8pCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqdWFydHA7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eSA9IGluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhcgkJc3RhdHVzLCBjaCwgZmxhZzsKIAogCWlmICghdHR5KQpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCWluZm8tPnN0YXRzLnR4Kys7CiAJfQogCi0JaWYgKChpbmZvLT54bWl0X2NudCA8PSAwKSB8fCBpbmZvLT50dHktPnN0b3BwZWQpIHsKKwlpZiAoKGluZm8tPnhtaXRfY250IDw9IDApIHx8IGluZm8tPnBvcnQudHR5LT5zdG9wcGVkKSB7CiAJCWluZm8tPmltciAmPSB+TUNGVUFSVF9VSVJfVFhSRUFEWTsKIAkJdWFydHBbTUNGVUFSVF9VSU1SXSA9IGluZm8tPmltcjsKIAkJcmV0dXJuOwpAQCAtNDI4LDcgKzQyOCw3IEBACiBzdGF0aWMgdm9pZCBtY2Zyc19vZmZpbnRyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbWNmX3NlcmlhbCAqaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWNmX3NlcmlhbCwgdHF1ZXVlKTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAkKIAlpZiAodHR5KQogCQl0dHlfd2FrZXVwKHR0eSk7CkBAIC00OTgsNyArNDk4LDcgQEAKIHN0YXRpYyB2b2lkIGRvX3NlcmlhbF9oYW5ndXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBtY2Zfc2VyaWFsICppbmZvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtY2Zfc2VyaWFsLCB0cXVldWVfaGFuZ3VwKTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT5wb3J0LnR0eTsKIAkKIAlpZiAodHR5KQogCQl0dHlfaGFuZ3VwKHR0eSk7CkBAIC01MzIsOCArNTMyLDggQEAKIAl1YXJ0cFtNQ0ZVQVJUX1VDUl0gPSBNQ0ZVQVJUX1VDUl9DTURSRVNFVFRYOyAgLyogcmVzZXQgVFggKi8KIAltY2Zyc19zZXRzaWduYWxzKGluZm8sIDEsIDEpOwogCi0JaWYgKGluZm8tPnR0eSkKLQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAJaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwogCiAJLyoKQEAgLTU3OCw3ICs1NzgsNyBAQAogCXVhcnRwW01DRlVBUlRfVUNSXSA9IE1DRlVBUlRfVUNSX0NNRFJFU0VUUlg7ICAvKiByZXNldCBSWCAqLwogCXVhcnRwW01DRlVBUlRfVUNSXSA9IE1DRlVBUlRfVUNSX0NNRFJFU0VUVFg7ICAvKiByZXNldCBUWCAqLwogCi0JaWYgKCFpbmZvLT50dHkgfHwgKGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSkKKwlpZiAoIWluZm8tPnBvcnQudHR5IHx8IChpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSkKIAkJbWNmcnNfc2V0c2lnbmFscyhpbmZvLCAwLCAwKTsKIAogCWlmIChpbmZvLT54bWl0X2J1ZikgewpAQCAtNTg2LDggKzU4Niw4IEBACiAJCWluZm8tPnhtaXRfYnVmID0gMDsKIAl9CiAKLQlpZiAoaW5mby0+dHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCQogCWluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC02MDksOSArNjA5LDkgQEAKIAl1bnNpZ25lZCBpbnQJCWZyYWN0aW9uOwogI2VuZGlmCiAKLQlpZiAoIWluZm8tPnR0eSB8fCAhaW5mby0+dHR5LT50ZXJtaW9zKQorCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQogCQlyZXR1cm47Ci0JY2ZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJY2ZsYWcgPSBpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAlpZiAoaW5mby0+YWRkciA9PSAwKQogCQlyZXR1cm47CiAKQEAgLTYyMyw3ICs2MjMsNyBAQAogCWlmIChpICYgQ0JBVURFWCkgewogCQlpICY9IH5DQkFVREVYOwogCQlpZiAoaSA8IDEgfHwgaSA+IDQpCi0JCQlpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNCQVVERVg7CisJCQlpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q0JBVURFWDsKIAkJZWxzZQogCQkJaSArPSAxNTsKIAl9CkBAIC0xMjE2LDcgKzEyMTYsNyBAQAogCQogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+ZXZlbnQgPSAwOwotCWluZm8tPnR0eSA9IDA7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOwogI2lmIDAJCiAJaWYgKHR0eS0+bGRpc2MubnVtICE9IGxkaXNjc1tOX1RUWV0ubnVtKSB7CiAJCWlmICh0dHktPmxkaXNjLmNsb3NlKQpAQCAtMTMyNSw3ICsxMzI1LDcgQEAKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+Y291bnQgPSAwOwogCWluZm8tPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwotCWluZm8tPnR0eSA9IDA7CisJaW5mby0+cG9ydC50dHkgPSBOVUxMOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKIH0KIApAQCAtMTQ1Miw3ICsxNDUyLDcgQEAKICNlbmRpZgogCWluZm8tPmNvdW50Kys7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IGluZm87Ci0JaW5mby0+dHR5ID0gdHR5OworCWluZm8tPnBvcnQudHR5ID0gdHR5OwogCiAJLyoKIAkgKiBTdGFydCB1cCBzZXJpYWwgcG9ydApAQCAtMTc2Nyw3ICsxNzY3LDcgQEAKIAlmb3IgKGkgPSAwLCBpbmZvID0gbWNmcnNfdGFibGU7IChpIDwgTlJfUE9SVFMpOyBpKyssIGluZm8rKykgewogCQlpbmZvLT5tYWdpYyA9IFNFUklBTF9NQUdJQzsKIAkJaW5mby0+bGluZSA9IGk7Ci0JCWluZm8tPnR0eSA9IDA7CisJCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKIAkJaW5mby0+Y3VzdG9tX2Rpdmlzb3IgPSAxNjsKIAkJaW5mby0+Y2xvc2VfZGVsYXkgPSA1MDsKIAkJaW5mby0+Y2xvc2luZ193YWl0ID0gMzAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKaW5kZXggZWZjOTcxZC4uMzYxMjYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKQEAgLTczMiw3ICs3MzIsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIG1wYzUyeHhfdWFydF9pbnRfcnhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBjaGFyIGNoLCBmbGFnOwogCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBzYy5jIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCmluZGV4IGU4ODE5YzQuLjYxZDNhZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKQEAgLTkyMSw2ICs5MjEsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKK3N0YXRpYyBpbnQgc2VyaWFsX3BvbGxlZDsKKyNlbmRpZgorCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTkzMiw3ICs5MzYsNyBAQAogc3RhdGljIGludCBtcHNjX3J4X2ludHIoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkKIHsKIAlzdHJ1Y3QgbXBzY19yeF9kZXNjICpyeHJlOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwaS0+cG9ydC5pbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBpLT5wb3J0LmluZm8tPnBvcnQudHR5OwogCXUzMgljbWRzdGF0LCBieXRlc19pbiwgaTsKIAlpbnQJcmMgPSAwOwogCXU4CSpicDsKQEAgLTk1Niw3ICs5NjAsMTIgQEAKIAl3aGlsZSAoISgoY21kc3RhdCA9IGJlMzJfdG9fY3B1KHJ4cmUtPmNtZHN0YXQpKQogCQkJCSYgU0RNQV9ERVNDX0NNRFNUQVRfTykpIHsKIAkJYnl0ZXNfaW4gPSBiZTE2X3RvX2NwdShyeHJlLT5ieXRlY250KTsKLQorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKKwkJaWYgKHVubGlrZWx5KHNlcmlhbF9wb2xsZWQpKSB7CisJCQlzZXJpYWxfcG9sbGVkID0gMDsKKwkJCXJldHVybiAwOworCQl9CisjZW5kaWYKIAkJLyogRm9sbG93aW5nIHVzZSBvZiB0dHkgc3RydWN0IGRpcmVjdGx5IGlzIGRlcHJlY2F0ZWQgKi8KIAkJaWYgKHVubGlrZWx5KHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgYnl0ZXNfaW4pCiAJCQkJCTwgYnl0ZXNfaW4pKSB7CkBAIC0xMDE3LDYgKzEwMjYsMTIgQEAKIAkJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIoJnBpLT5wb3J0LCAqYnApKSB7CiAJCQlicCsrOwogCQkJYnl0ZXNfaW4tLTsKKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCisJCQlpZiAodW5saWtlbHkoc2VyaWFsX3BvbGxlZCkpIHsKKwkJCQlzZXJpYWxfcG9sbGVkID0gMDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKyNlbmRpZgogCQkJZ290byBuZXh0X2ZyYW1lOwogCQl9CiAKQEAgLTE1MTksNiArMTUzNCwxMzMgQEAKIAogCXJldHVybiByYzsKIH0KKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCisvKiBTZXJpYWwgcG9sbGluZyByb3V0aW5lcyBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBmcm9tIHRoZSB1YXJ0IHdoaWxlCisgKiBpbiBhbiBpbnRlcnJ1cHQgb3IgZGVidWcgY29udGV4dC4KKyAqLworCitzdGF0aWMgY2hhciBwb2xsX2J1ZlsyMDQ4XTsKK3N0YXRpYyBpbnQgcG9sbF9wdHI7CitzdGF0aWMgaW50IHBvbGxfY250Oworc3RhdGljIHZvaWQgbXBzY19wdXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJCQkJICAgdW5zaWduZWQgY2hhciBjKTsKKworc3RhdGljIGludCBtcHNjX2dldF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpID0gKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqKXBvcnQ7CisJc3RydWN0IG1wc2NfcnhfZGVzYyAqcnhyZTsKKwl1MzIJY21kc3RhdCwgYnl0ZXNfaW4sIGk7CisJdTgJKmJwOworCisJaWYgKCFzZXJpYWxfcG9sbGVkKQorCQlzZXJpYWxfcG9sbGVkID0gMTsKKworCXByX2RlYnVnKCJtcHNjX3J4X2ludHJbJWRdOiBIYW5kbGluZyBSeCBpbnRyXG4iLCBwaS0+cG9ydC5saW5lKTsKKworCWlmIChwb2xsX2NudCkgeworCQlwb2xsX2NudC0tOworCQlyZXR1cm4gcG9sbF9idWZbcG9sbF9wdHIrK107CisJfQorCXBvbGxfcHRyID0gMDsKKwlwb2xsX2NudCA9IDA7CisKKwl3aGlsZSAocG9sbF9jbnQgPT0gMCkgeworCQlyeHJlID0gKHN0cnVjdCBtcHNjX3J4X2Rlc2MgKikocGktPnJ4ciArCisJCSAgICAgICAocGktPnJ4cl9wb3NuKk1QU0NfUlhSRV9TSVpFKSk7CisJCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKilyeHJlLAorCQkJICAgICAgIE1QU0NfUlhSRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQorCQlpZiAocGktPmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8KKwkJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bG9uZylyeHJlLAorCQkJKHVsb25nKXJ4cmUgKyBNUFNDX1JYUkVfU0laRSk7CisjZW5kaWYKKwkJLyoKKwkJICogTG9vcCB0aHJvdWdoIFJ4IGRlc2NyaXB0b3JzIGhhbmRsaW5nIG9uZXMgdGhhdCBoYXZlCisJCSAqIGJlZW4gY29tcGxldGVkLgorCQkgKi8KKwkJd2hpbGUgKHBvbGxfY250ID09IDAgJiYKKwkJICAgICAgICEoKGNtZHN0YXQgPSBiZTMyX3RvX2NwdShyeHJlLT5jbWRzdGF0KSkgJgorCQkJIFNETUFfREVTQ19DTURTVEFUX08pKXsKKwkJCWJ5dGVzX2luID0gYmUxNl90b19jcHUocnhyZS0+Ynl0ZWNudCk7CisJCQlicCA9IHBpLT5yeGIgKyAocGktPnJ4cl9wb3NuICogTVBTQ19SWEJFX1NJWkUpOworCQkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKSBicCwKKwkJCQkgICAgICAgTVBTQ19SWEJFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpCisJCQlpZiAocGktPmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8KKwkJCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodWxvbmcpYnAsCisJCQkJCSh1bG9uZylicCArIE1QU0NfUlhCRV9TSVpFKTsKKyNlbmRpZgorCQkJaWYgKCh1bmxpa2VseShjbWRzdGF0ICYgKFNETUFfREVTQ19DTURTVEFUX0JSIHwKKwkJCSBTRE1BX0RFU0NfQ01EU1RBVF9GUiB8IFNETUFfREVTQ19DTURTVEFUX09SKSkpICYmCisJCQkJIShjbWRzdGF0ICYgcGktPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrKSkgeworCQkJCXBvbGxfYnVmW3BvbGxfY250XSA9ICpicDsKKwkJCQlwb2xsX2NudCsrOworCQkJfSBlbHNlIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgYnl0ZXNfaW47IGkrKykgeworCQkJCQlwb2xsX2J1Zltwb2xsX2NudF0gPSAqYnArKzsKKwkJCQkJcG9sbF9jbnQrKzsKKwkJCQl9CisJCQkJcGktPnBvcnQuaWNvdW50LnJ4ICs9IGJ5dGVzX2luOworCQkJfQorCQkJcnhyZS0+Ynl0ZWNudCA9IGNwdV90b19iZTE2KDApOworCQkJd21iKCk7CisJCQlyeHJlLT5jbWRzdGF0ID0gY3B1X3RvX2JlMzIoU0RNQV9ERVNDX0NNRFNUQVRfTyB8CisJCQkJCQkgICAgU0RNQV9ERVNDX0NNRFNUQVRfRUkgfAorCQkJCQkJICAgIFNETUFfREVTQ19DTURTVEFUX0YgfAorCQkJCQkJICAgIFNETUFfREVTQ19DTURTVEFUX0wpOworCQkJd21iKCk7CisJCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopcnhyZSwKKwkJCQkgICAgICAgTVBTQ19SWFJFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKKyNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkKKwkJCWlmIChwaS0+Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLworCQkJCWZsdXNoX2RjYWNoZV9yYW5nZSgodWxvbmcpcnhyZSwKKwkJCQkJICAgKHVsb25nKXJ4cmUgKyBNUFNDX1JYUkVfU0laRSk7CisjZW5kaWYKKworCQkJLyogQWR2YW5jZSB0byBuZXh0IGRlc2NyaXB0b3IgKi8KKwkJCXBpLT5yeHJfcG9zbiA9IChwaS0+cnhyX3Bvc24gKyAxKSAmCisJCQkJKE1QU0NfUlhSX0VOVFJJRVMgLSAxKTsKKwkJCXJ4cmUgPSAoc3RydWN0IG1wc2NfcnhfZGVzYyAqKShwaS0+cnhyICsKKwkJCQkgICAgICAgKHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhSRV9TSVpFKSk7CisJCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopcnhyZSwKKwkJCQkgICAgICAgTVBTQ19SWFJFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpCisJCQlpZiAocGktPmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8KKwkJCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodWxvbmcpcnhyZSwKKwkJCQkJCSh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUpOworI2VuZGlmCisJCX0KKworCQkvKiBSZXN0YXJ0IHJ4IGVuZ2luZSwgaWYgaXRzIHN0b3BwZWQgKi8KKwkJaWYgKChyZWFkbChwaS0+c2RtYV9iYXNlICsgU0RNQV9TRENNKSAmIFNETUFfU0RDTV9FUkQpID09IDApCisJCQltcHNjX3N0YXJ0X3J4KHBpKTsKKwl9CisJaWYgKHBvbGxfY250KSB7CisJCXBvbGxfY250LS07CisJCXJldHVybiBwb2xsX2J1Zltwb2xsX3B0cisrXTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBtcHNjX3B1dF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCSB1bnNpZ25lZCBjaGFyIGMpCit7CisJc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSA9IChzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKilwb3J0OworCXUzMiBkYXRhOworCisJZGF0YSA9IHJlYWRsKHBpLT5tcHNjX2Jhc2UgKyBNUFNDX01QQ1IpOworCXdyaXRlYihjLCBwaS0+bXBzY19iYXNlICsgTVBTQ19DSFJfMSk7CisJbWIoKTsKKwlkYXRhID0gcmVhZGwocGktPm1wc2NfYmFzZSArIE1QU0NfQ0hSXzIpOworCWRhdGEgfD0gTVBTQ19DSFJfMl9UVENTOworCXdyaXRlbChkYXRhLCBwaS0+bXBzY19iYXNlICsgTVBTQ19DSFJfMik7CisJbWIoKTsKKworCXdoaWxlIChyZWFkbChwaS0+bXBzY19iYXNlICsgTVBTQ19DSFJfMikgJiBNUFNDX0NIUl8yX1RUQ1MpOworfQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgbXBzY19wb3BzID0gewogCS50eF9lbXB0eQk9IG1wc2NfdHhfZW1wdHksCkBAIC0xNTM3LDYgKzE2NzksMTAgQEAKIAkucmVxdWVzdF9wb3J0CT0gbXBzY19yZXF1ZXN0X3BvcnQsCiAJLmNvbmZpZ19wb3J0CT0gbXBzY19jb25maWdfcG9ydCwKIAkudmVyaWZ5X3BvcnQJPSBtcHNjX3ZlcmlmeV9wb3J0LAorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKKwkucG9sbF9nZXRfY2hhciA9IG1wc2NfZ2V0X3BvbGxfY2hhciwKKwkucG9sbF9wdXRfY2hhciA9IG1wc2NfcHV0X3BvbGxfY2hhciwKKyNlbmRpZgogfTsKIAogLyoKQEAgLTE5NzIsNyArMjExOCw3IEBACiB7CiAJaW50CXJjOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBNUFNDIGRyaXZlciAkUmV2aXNpb246IDEuMDAgJFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBNUFNDIGRyaXZlclxuIik7CiAKIAltZW1zZXQobXBzY19wb3J0cywgMCwgc2l6ZW9mKG1wc2NfcG9ydHMpKTsKIAltZW1zZXQoJm1wc2Nfc2hhcmVkX3JlZ3MsIDAsIHNpemVvZihtcHNjX3NoYXJlZF9yZWdzKSk7CkBAIC0yMDA0LDcgKzIxNTAsNyBAQAogbW9kdWxlX2V4aXQobXBzY19kcnZfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIk1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIE1hcnZlbGwgTVBTQyBzZXJpYWwvVUFSVCBkcml2ZXIgJFJldmlzaW9uOiAxLjAwICQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBNYXJ2ZWxsIE1QU0Mgc2VyaWFsL1VBUlQgZHJpdmVyIik7CiBNT0RVTEVfVkVSU0lPTihNUFNDX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoTVBTQ19NQUpPUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tdXguYyBiL2RyaXZlcnMvc2VyaWFsL211eC5jCmluZGV4IGU5NDAzMTcuLjk1M2E1ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL211eC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL211eC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIHN0YXRpYyB2b2lkIG11eF9yZWFkKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaW50IGRhdGE7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CiAJX191MzIgc3RhcnRfY291bnQgPSBwb3J0LT5pY291bnQucng7CiAKIAl3aGlsZSgxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9uZXR4LXNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbmV0eC1zZXJpYWwuYwppbmRleCA4MWFjOWJiLi45ZjhjY2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9uZXR4LXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL25ldHgtc2VyaWFsLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogc3RhdGljIHZvaWQgbmV0eF9yeGludChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXVuc2lnbmVkIGNoYXIgcngsIGZsZywgc3RhdHVzOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OwogCiAJd2hpbGUgKCEocmVhZGwocG9ydC0+bWVtYmFzZSArIFVBUlRfRlIpICYgRlJfUlhGRSkpIHsKIAkJcnggPSByZWFkbChwb3J0LT5tZW1iYXNlICsgVUFSVF9EUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKaW5kZXggNzk0YmQwZi4uMzE3YjA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwpAQCAtMjQyLDEyICsyNDIsMTIgQEAKIAl9CiAKIAkvKiBTYW5pdHkgY2hlY2ssIG1ha2Ugc3VyZSB0aGUgb2xkIGJ1ZyBpcyBubyBsb25nZXIgaGFwcGVuaW5nICovCi0JaWYgKHVhcC0+cG9ydC5pbmZvID09IE5VTEwgfHwgdWFwLT5wb3J0LmluZm8tPnR0eSA9PSBOVUxMKSB7CisJaWYgKHVhcC0+cG9ydC5pbmZvID09IE5VTEwgfHwgdWFwLT5wb3J0LmluZm8tPnBvcnQudHR5ID09IE5VTEwpIHsKIAkJV0FSTl9PTigxKTsKIAkJKHZvaWQpcmVhZF96c2RhdGEodWFwKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXR0eSA9IHVhcC0+cG9ydC5pbmZvLT50dHk7CisJdHR5ID0gdWFwLT5wb3J0LmluZm8tPnBvcnQudHR5OwogCiAJd2hpbGUgKDEpIHsKIAkJZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG54OHh4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9wbng4eHh4X3VhcnQuYwppbmRleCBkMGU1YTc5Li4yMmUzMGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbng4eHh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9wbng4eHh4X3VhcnQuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAKIHN0YXRpYyB2b2lkIHBueDh4eHhfcnhfY2hhcnMoc3RydWN0IHBueDh4eHhfcG9ydCAqc3BvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHNwb3J0LT5wb3J0LmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsZzsKIAogCXN0YXR1cyA9IEZJRk9fVE9fU00oc2VyaWFsX2luKHNwb3J0LCBQTlg4WFhYX0ZJRk8pKSB8CkBAIC04MjQsNyArODI0LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBQTlg4WFhYIGRyaXZlciAkUmV2aXNpb246IDEuMiAkXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IFBOWDhYWFggZHJpdmVyXG4iKTsKIAogCXBueDh4eHhfaW5pdF9wb3J0cygpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCmluZGV4IGI0ZjdmZmIuLmI5YTkzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IHVhcnRfcHhhX3BvcnQgKnVwLCBpbnQgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBpbnQgY2gsIGZsYWc7CiAJaW50IG1heF9jb3VudCA9IDI1NjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwppbmRleCA2MmIzODU4Li5hNWU3NmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtMjAsOSArMjAsNiBAQAogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICogICRJZDogc2ExMTAwLmMsdiAxLjUwIDIwMDIvMDcvMjkgMTQ6NDE6MDQgcm1rIEV4cCAkCi0gKgogICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfU0ExMTAwX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQpAQCAtMTkyLDcgKzE4OSw3IEBACiBzdGF0aWMgdm9pZAogc2ExMTAwX3J4X2NoYXJzKHN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHNwb3J0LT5wb3J0LmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsZzsKIAogCXN0YXR1cyA9IFVUU1IxX1RPX1NNKFVBUlRfR0VUX1VUU1IxKHNwb3J0KSkgfApAQCAtODkyLDcgKzg4OSw3IEBACiB7CiAJaW50IHJldDsKIAotCXByaW50ayhLRVJOX0lORk8gIlNlcmlhbDogU0ExMXgwIGRyaXZlciAkUmV2aXNpb246IDEuNTAgJFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBTQTExeDAgZHJpdmVyXG4iKTsKIAogCXNhMTEwMF9pbml0X3BvcnRzKCk7CiAKQEAgLTkxNSw3ICs5MTIsNyBAQAogbW9kdWxlX2V4aXQoc2ExMTAwX3NlcmlhbF9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU0ExMTAwIGdlbmVyaWMgc2VyaWFsIHBvcnQgZHJpdmVyICRSZXZpc2lvbjogMS41MCAkIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNBMTEwMCBnZW5lcmljIHNlcmlhbCBwb3J0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0VSSUFMX1NBMTEwMF9NQUpPUik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNhMTF4MC11YXJ0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMgYi9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKaW5kZXggNGEzZWNhYS4uZDg1MmY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiB7CiAJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0ID0gZGV2X2lkOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmb3VycG9ydC0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBpbnQgdWZjb24sIGNoLCBmbGFnLCB1ZnN0YXQsIHVlcnN0YXQ7CiAJaW50IG1heF9jb3VudCA9IDY0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYjEyNTAtZHVhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL3NiMTI1MC1kdWFydC5jCmluZGV4IGY4ZTE0NDcuLmE0ZmIzNDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYjEyNTAtZHVhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYjEyNTAtZHVhcnQuYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJCXVhcnRfaW5zZXJ0X2NoYXIodXBvcnQsIHN0YXR1cywgTV9EVUFSVF9PVlJVTl9FUlIsIGNoLCBmbGFnKTsKIAl9CiAKLQl0dHlfZmxpcF9idWZmZXJfcHVzaCh1cG9ydC0+aW5mby0+dHR5KTsKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh1cG9ydC0+aW5mby0+cG9ydC50dHkpOwogfQogCiBzdGF0aWMgdm9pZCBzYmRfdHJhbnNtaXRfY2hhcnMoc3RydWN0IHNiZF9wb3J0ICpzcG9ydCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jIGIvZHJpdmVycy9zZXJpYWwvc2MyNnh4LmMKaW5kZXggYWUyYTllMi4uZTBiZTExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2MyNnh4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2MyNnh4LmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCXU4IHN0YXR1czsKIAogCWlmIChwb3J0LT5pbmZvICE9IE5VTEwpCQkvKiBVbm9wZW5lZCBzZXJpYWwgY29uc29sZSAqLwotCQl0dHkgPSBwb3J0LT5pbmZvLT50dHk7CisJCXR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OwogCiAJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CiAJCXN0YXR1cyA9IFJFQURfU0NfUE9SVChwb3J0LCBTUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCA0MmQyZTEwLi5mOTc3Yzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAogI2RlZmluZSBISUdIX0JJVFNfT0ZGU0VUCSgoc2l6ZW9mKGxvbmcpLXNpemVvZihpbnQpKSo4KQogCi0jZGVmaW5lIHVhcnRfdXNlcnMoc3RhdGUpCSgoc3RhdGUpLT5jb3VudCArICgoc3RhdGUpLT5pbmZvID8gKHN0YXRlKS0+aW5mby0+YmxvY2tlZF9vcGVuIDogMCkpCisjZGVmaW5lIHVhcnRfdXNlcnMoc3RhdGUpCSgoc3RhdGUpLT5jb3VudCArICgoc3RhdGUpLT5pbmZvID8gKHN0YXRlKS0+aW5mby0+cG9ydC5ibG9ja2VkX29wZW4gOiAwKSkKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFCiAjZGVmaW5lIHVhcnRfY29uc29sZShwb3J0KQkoKHBvcnQpLT5jb25zICYmIChwb3J0KS0+Y29ucy0+aW5kZXggPT0gKHBvcnQpLT5saW5lKQpAQCAtMTEzLDcgKzExMyw3IEBACiBzdGF0aWMgdm9pZCB1YXJ0X3Rhc2tsZXRfYWN0aW9uKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHVhcnRfc3RhdGUgKilkYXRhOwotCXR0eV93YWtldXAoc3RhdGUtPmluZm8tPnR0eSk7CisJdHR5X3dha2V1cChzdGF0ZS0+aW5mby0+cG9ydC50dHkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTEzNSw3ICsxMzUsNyBAQAogCiAvKgogICogU3RhcnR1cCB0aGUgcG9ydC4gIFRoaXMgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXIgb3Blbi4gIEFsbCBjYWxscwotICogd2lsbCBiZSBzZXJpYWxpc2VkIGJ5IHRoZSBwZXItcG9ydCBzZW1hcGhvcmUuCisgKiB3aWxsIGJlIHNlcmlhbGlzZWQgYnkgdGhlIHBlci1wb3J0IG11dGV4LgogICovCiBzdGF0aWMgaW50IHVhcnRfc3RhcnR1cChzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUsIGludCBpbml0X2h3KQogewpAQCAtMTUyLDcgKzE1Miw3IEBACiAJICogb25jZSB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBvcGVuZWQgdGhlIHBvcnQuICBBbHNvIHNldAogCSAqIHVwIHRoZSB0dHktPmFsdF9zcGVlZCBrbHVkZ2UKIAkgKi8KLQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKIAogCWlmIChwb3J0LT50eXBlID09IFBPUlRfVU5LTk9XTikKIAkJcmV0dXJuIDA7CkBAIC0xNjIsNiArMTYyLDcgQEAKIAkgKiBidWZmZXIuCiAJICovCiAJaWYgKCFpbmZvLT54bWl0LmJ1ZikgeworCQkvKiBUaGlzIGlzIHByb3RlY3RlZCBieSB0aGUgcGVyIHBvcnQgbXV0ZXggKi8KIAkJcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0xODIsMjAgKzE4MywyMCBAQAogCQkJICogU2V0dXAgdGhlIFJUUyBhbmQgRFRSIHNpZ25hbHMgb25jZSB0aGUKIAkJCSAqIHBvcnQgaXMgb3BlbiBhbmQgcmVhZHkgdG8gcmVzcG9uZC4KIAkJCSAqLwotCQkJaWYgKGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQorCQkJaWYgKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpCiAJCQkJdWFydF9zZXRfbWN0cmwocG9ydCwgVElPQ01fUlRTIHwgVElPQ01fRFRSKTsKIAkJfQogCiAJCWlmIChpbmZvLT5mbGFncyAmIFVJRl9DVFNfRkxPVykgewogCQkJc3Bpbl9sb2NrX2lycSgmcG9ydC0+bG9jayk7CiAJCQlpZiAoIShwb3J0LT5vcHMtPmdldF9tY3RybChwb3J0KSAmIFRJT0NNX0NUUykpCi0JCQkJaW5mby0+dHR5LT5od19zdG9wcGVkID0gMTsKKwkJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOwogCQl9CiAKIAkJaW5mby0+ZmxhZ3MgfD0gVUlGX0lOSVRJQUxJWkVEOwogCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CiAJfQogCiAJaWYgKHJldHZhbCAmJiBjYXBhYmxlKENBUF9TWVNfQURNSU4pKQpAQCAtMjE3LDggKzIxOCw4IEBACiAJLyoKIAkgKiBTZXQgdGhlIFRUWSBJTyBlcnJvciBtYXJrZXIKIAkgKi8KLQlpZiAoaW5mby0+dHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT5wb3J0LnR0eSkKKwkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwogCiAJaWYgKGluZm8tPmZsYWdzICYgVUlGX0lOSVRJQUxJWkVEKSB7CiAJCWluZm8tPmZsYWdzICY9IH5VSUZfSU5JVElBTElaRUQ7CkBAIC0yMjYsNyArMjI3LDcgQEAKIAkJLyoKIAkJICogVHVybiBvZmYgRFRSIGFuZCBSVFMgZWFybHkuCiAJCSAqLwotCQlpZiAoIWluZm8tPnR0eSB8fCAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKQorCQlpZiAoIWluZm8tPnBvcnQudHR5IHx8IChpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSkKIAkJCXVhcnRfY2xlYXJfbWN0cmwocG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAogCQkvKgpAQCAtNDI2LDcgKzQyNyw3IEBACiBzdGF0aWMgdm9pZAogdWFydF9jaGFuZ2Vfc3BlZWQoc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzdGF0ZS0+aW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzdGF0ZS0+aW5mby0+cG9ydC50dHk7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OwogCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvczsKIApAQCAtNTczLDYgKzU3NCw4IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCXVhcnRfY2lyY19jbGVhcigmc3RhdGUtPmluZm8tPnhtaXQpOworCWlmIChwb3J0LT5vcHMtPmZsdXNoX2J1ZmZlcikKKwkJcG9ydC0+b3BzLT5mbHVzaF9idWZmZXIocG9ydCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCXR0eV93YWtldXAodHR5KTsKIH0KQEAgLTgzNCw4ICs4MzcsOCBAQAogCXN0YXRlLT5jbG9zaW5nX3dhaXQgICAgPSBjbG9zaW5nX3dhaXQ7CiAJaWYgKG5ld19zZXJpYWwueG1pdF9maWZvX3NpemUpCiAJCXBvcnQtPmZpZm9zaXplID0gbmV3X3NlcmlhbC54bWl0X2ZpZm9fc2l6ZTsKLQlpZiAoc3RhdGUtPmluZm8tPnR0eSkKLQkJc3RhdGUtPmluZm8tPnR0eS0+bG93X2xhdGVuY3kgPQorCWlmIChzdGF0ZS0+aW5mby0+cG9ydC50dHkpCisJCXN0YXRlLT5pbmZvLT5wb3J0LnR0eS0+bG93X2xhdGVuY3kgPQogCQkJKHBvcnQtPmZsYWdzICYgVVBGX0xPV19MQVRFTkNZKSA/IDEgOiAwOwogCiAgY2hlY2tfYW5kX2V4aXQ6CkBAIC04NTUsNyArODU4LDcgQEAKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UKIAkJCQkgICAgICAgIiVzIHNldHMgY3VzdG9tIHNwZWVkIG9uICVzLiBUaGlzICIKIAkJCQkgICAgICAgImlzIGRlcHJlY2F0ZWQuXG4iLCBjdXJyZW50LT5jb21tLAotCQkJCSAgICAgICB0dHlfbmFtZShzdGF0ZS0+aW5mby0+dHR5LCBidWYpKTsKKwkJCQkgICAgICAgdHR5X25hbWUoc3RhdGUtPmluZm8tPnBvcnQudHR5LCBidWYpKTsKIAkJCX0KIAkJCXVhcnRfY2hhbmdlX3NwZWVkKHN0YXRlLCBOVUxMKTsKIAkJfQpAQCAtODg3LDcgKzg5MCw3IEBACiAJICovCiAJaWYgKHBvcnQtPnhfY2hhciB8fAogCSAgICAoKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKCZzdGF0ZS0+aW5mby0+eG1pdCkgPiAwKSAmJgotCSAgICAgIXN0YXRlLT5pbmZvLT50dHktPnN0b3BwZWQgJiYgIXN0YXRlLT5pbmZvLT50dHktPmh3X3N0b3BwZWQpKQorCSAgICAgIXN0YXRlLT5pbmZvLT5wb3J0LnR0eS0+c3RvcHBlZCAmJiAhc3RhdGUtPmluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkKSkKIAkJcmVzdWx0ICY9IH5USU9DU0VSX1RFTVQ7CiAKIAlyZXR1cm4gcHV0X3VzZXIocmVzdWx0LCB2YWx1ZSk7CkBAIC05MzEsNyArOTM0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCB1YXJ0X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCitzdGF0aWMgaW50IHVhcnRfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKQEAgLTk0Miw2ICs5NDUsNyBAQAogCQlwb3J0LT5vcHMtPmJyZWFrX2N0bChwb3J0LCBicmVha19zdGF0ZSk7CiAKIAltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdWFydF9kb19hdXRvY29uZmlnKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKQEAgLTEyMzcsNyArMTI0MSw3IEBACiAJICovCiAJaWYgKCEob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpICYmCiAJICAgICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnN0YXRlLT5pbmZvLT5vcGVuX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnN0YXRlLT5pbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAjZW5kaWYKIH0KIApAQCAtMTMxOCw5ICsxMzIyLDkgQEAKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0Jc3RhdGUtPmluZm8tPnR0eSA9IE5VTEw7CisJc3RhdGUtPmluZm8tPnBvcnQudHR5ID0gTlVMTDsKIAotCWlmIChzdGF0ZS0+aW5mby0+YmxvY2tlZF9vcGVuKSB7CisJaWYgKHN0YXRlLT5pbmZvLT5wb3J0LmJsb2NrZWRfb3BlbikgewogCQlpZiAoc3RhdGUtPmNsb3NlX2RlbGF5KQogCQkJbXNsZWVwX2ludGVycnVwdGlibGUoc3RhdGUtPmNsb3NlX2RlbGF5KTsKIAl9IGVsc2UgaWYgKCF1YXJ0X2NvbnNvbGUocG9ydCkpIHsKQEAgLTEzMzEsNyArMTMzNSw3IEBACiAJICogV2FrZSB1cCBhbnlvbmUgdHJ5aW5nIHRvIG9wZW4gdGhpcyBwb3J0LgogCSAqLwogCXN0YXRlLT5pbmZvLT5mbGFncyAmPSB+VUlGX05PUk1BTF9BQ1RJVkU7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzdGF0ZS0+aW5mby0+b3Blbl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnN0YXRlLT5pbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiAKICBkb25lOgogCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKQEAgLTE0MTUsOCArMTQxOSw4IEBACiAJCXVhcnRfc2h1dGRvd24oc3RhdGUpOwogCQlzdGF0ZS0+Y291bnQgPSAwOwogCQlzdGF0ZS0+aW5mby0+ZmxhZ3MgJj0gflVJRl9OT1JNQUxfQUNUSVZFOwotCQlzdGF0ZS0+aW5mby0+dHR5ID0gTlVMTDsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzdGF0ZS0+aW5mby0+b3Blbl93YWl0KTsKKwkJc3RhdGUtPmluZm8tPnBvcnQudHR5ID0gTlVMTDsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzdGF0ZS0+aW5mby0+cG9ydC5vcGVuX3dhaXQpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnN0YXRlLT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKQEAgLTE0MzAsNyArMTQzNCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHVhcnRfdXBkYXRlX3Rlcm1pb3Moc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzdGF0ZS0+aW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzdGF0ZS0+aW5mby0+cG9ydC50dHk7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OwogCiAJaWYgKHVhcnRfY29uc29sZShwb3J0KSAmJiBwb3J0LT5jb25zLT5jZmxhZykgewpAQCAtMTQ2OSwxNyArMTQ3MywxNyBAQAogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKIAl1bnNpZ25lZCBpbnQgbWN0cmw7CiAKLQlpbmZvLT5ibG9ja2VkX29wZW4rKzsKKwlpbmZvLT5wb3J0LmJsb2NrZWRfb3BlbisrOwogCXN0YXRlLT5jb3VudC0tOwogCi0JYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKIAkJLyoKIAkJICogSWYgd2UgaGF2ZSBiZWVuIGh1bmcgdXAsIHRlbGwgdXNlcnNwYWNlL3Jlc3RhcnQgb3Blbi4KIAkJICovCi0JCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IGluZm8tPnR0eSA9PSBOVUxMKQorCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBpbmZvLT5wb3J0LnR0eSA9PSBOVUxMKQogCQkJYnJlYWs7CiAKIAkJLyoKQEAgLTE0OTgsOCArMTUwMiw4IEBACiAJCSAqIGhhdmUgc2V0IFRUWV9JT19FUlJPUiBmb3IgYSBub24tZXhpc3RhbnQgcG9ydC4KIAkJICovCiAJCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8Ci0JCSAgICAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSB8fAotCQkgICAgKGluZm8tPnR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkKKwkJICAgIChpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgfHwKKwkJICAgIChpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkKIAkJCWJyZWFrOwogCiAJCS8qCkBAIC0xNTA3LDcgKzE1MTEsNyBAQAogCQkgKiBub3Qgc2V0IFJUUyBoZXJlIC0gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgY2F0Y2gKIAkJICogdGhlIGRhdGEgZnJvbSB0aGUgbW9kZW0uCiAJCSAqLwotCQlpZiAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpCisJCWlmIChpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQogCQkJdWFydF9zZXRfbWN0cmwocG9ydCwgVElPQ01fRFRSKTsKIAogCQkvKgpAQCAtMTUyOSwxNSArMTUzMywxNSBAQAogCQkJYnJlYWs7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwogCiAJc3RhdGUtPmNvdW50Kys7Ci0JaW5mby0+YmxvY2tlZF9vcGVuLS07CisJaW5mby0+cG9ydC5ibG9ja2VkX29wZW4tLTsKIAogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmICghaW5mby0+dHR5IHx8IHR0eV9odW5nX3VwX3AoZmlscCkpCisJaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCB0dHlfaHVuZ191cF9wKGZpbHApKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCXJldHVybiAwOwpAQCAtMTU2MCwxMCArMTU2NCwxMyBAQAogCQlnb3RvIGVycl91bmxvY2s7CiAJfQogCisJLyogQktMOiBSQUNFIEhFUkUgLSBMRUFLICovCisJLyogV2Ugc2hvdWxkIG1vdmUgdGhpcyBpbnRvIHRoZSB1YXJ0X3N0YXRlIHN0cnVjdHVyZSBhbmQga2lsbCBvZmYKKwkgICB0aGlzIHdob2xlIGNvbXBsZXhpdHkgKi8KIAlpZiAoIXN0YXRlLT5pbmZvKSB7CiAJCXN0YXRlLT5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVhcnRfaW5mbyksIEdGUF9LRVJORUwpOwogCQlpZiAoc3RhdGUtPmluZm8pIHsKLQkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0YXRlLT5pbmZvLT5vcGVuX3dhaXQpOworCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmc3RhdGUtPmluZm8tPnBvcnQub3Blbl93YWl0KTsKIAkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0YXRlLT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CiAKIAkJCS8qCkBAIC0xNjIwLDcgKzE2MjcsNyBAQAogCSAqIGJlIHJlLWVudGVyZWQgd2hpbGUgYWxsb2NhdGluZyB0aGUgaW5mbyBzdHJ1Y3R1cmUsIG9yIHdoaWxlIHdlCiAJICogcmVxdWVzdCBhbnkgSVJRcyB0aGF0IHRoZSBkcml2ZXIgbWF5IG5lZWQuICBUaGlzIGFsc28gaGFzIHRoZSBuaWNlCiAJICogc2lkZS1lZmZlY3QgdGhhdCBpdCBkZWxheXMgdGhlIGFjdGlvbiBvZiB1YXJ0X2hhbmd1cCwgc28gd2UgY2FuCi0JICogZ3VhcmFudGVlIHRoYXQgaW5mby0+dHR5IHdpbGwgYWx3YXlzIGNvbnRhaW4gc29tZXRoaW5nIHJlYXNvbmFibGUuCisJICogZ3VhcmFudGVlIHRoYXQgaW5mby0+cG9ydC50dHkgd2lsbCBhbHdheXMgY29udGFpbiBzb21ldGhpbmcgcmVhc29uYWJsZS4KIAkgKi8KIAlzdGF0ZSA9IHVhcnRfZ2V0KGRydiwgbGluZSk7CiAJaWYgKElTX0VSUihzdGF0ZSkpIHsKQEAgLTE2MzYsNyArMTY0Myw3IEBACiAJdHR5LT5kcml2ZXJfZGF0YSA9IHN0YXRlOwogCXR0eS0+bG93X2xhdGVuY3kgPSAoc3RhdGUtPnBvcnQtPmZsYWdzICYgVVBGX0xPV19MQVRFTkNZKSA/IDEgOiAwOwogCXR0eS0+YWx0X3NwZWVkID0gMDsKLQlzdGF0ZS0+aW5mby0+dHR5ID0gdHR5OworCXN0YXRlLT5pbmZvLT5wb3J0LnR0eSA9IHR0eTsKIAogCS8qCiAJICogSWYgdGhlIHBvcnQgaXMgaW4gdGhlIG1pZGRsZSBvZiBjbG9zaW5nLCBiYWlsIG91dCBub3cuCkBAIC0yMDk5LDggKzIxMDYsOCBAQAogCQkvKgogCQkgKiBJZiB0aGF0J3MgdW5zZXQsIHVzZSB0aGUgdHR5IHRlcm1pb3Mgc2V0dGluZy4KIAkJICovCi0JCWlmIChzdGF0ZS0+aW5mbyAmJiBzdGF0ZS0+aW5mby0+dHR5ICYmIHRlcm1pb3MuY19jZmxhZyA9PSAwKQotCQkJdGVybWlvcyA9ICpzdGF0ZS0+aW5mby0+dHR5LT50ZXJtaW9zOworCQlpZiAoc3RhdGUtPmluZm8gJiYgc3RhdGUtPmluZm8tPnBvcnQudHR5ICYmIHRlcm1pb3MuY19jZmxhZyA9PSAwKQorCQkJdGVybWlvcyA9ICpzdGF0ZS0+aW5mby0+cG9ydC50dHktPnRlcm1pb3M7CiAKIAkJdWFydF9jaGFuZ2VfcG0oc3RhdGUsIDApOwogCQlwb3J0LT5vcHMtPnNldF90ZXJtaW9zKHBvcnQsICZ0ZXJtaW9zLCBOVUxMKTsKQEAgLTI1MTksOCArMjUyNiw4IEBACiAJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGRydi0+dHR5X2RyaXZlciwgcG9ydC0+bGluZSk7CiAKIAlpbmZvID0gc3RhdGUtPmluZm87Ci0JaWYgKGluZm8gJiYgaW5mby0+dHR5KQotCQl0dHlfdmhhbmd1cChpbmZvLT50dHkpOworCWlmIChpbmZvICYmIGluZm8tPnBvcnQudHR5KQorCQl0dHlfdmhhbmd1cChpbmZvLT5wb3J0LnR0eSk7CiAKIAkvKgogCSAqIEFsbCB1c2VycyBvZiB0aGlzIHBvcnQgc2hvdWxkIG5vdyBiZSBkaXNjb25uZWN0ZWQgZnJvbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2tzODY5NS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2tzODY5NS5jCmluZGV4IDg3MjFhZmUuLjBlZGJjNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9rczg2OTUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogc3RhdGljIGlycXJldHVybl90IGtzODY5NXVhcnRfcnhfY2hhcnMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGxzciwgZmxnLCBtYXhfY291bnQgPSAyNTY7CiAKIAlzdGF0dXMgPSBVQVJUX0dFVF9MU1IocG9ydCk7CQkvKiBjbGVhcnMgcGVuZGluZyBMU1IgaW50ZXJydXB0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKaW5kZXggZWIxOGQ0Mi4uY2I0OWE1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAogc3RhdGljIHZvaWQgbGg3YTQweHVhcnRfcnhfY2hhcnMgKHN0cnVjdCB1YXJ0X3BvcnQqIHBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QqIHR0eSA9IHBvcnQtPmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCogdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CiAJaW50IGNiUnhNYXggPSAyNTY7CS8qIChHcm9zcykgbGltaXQgb24gcmVjZWl2ZSAqLwogCXVuc2lnbmVkIGludCBkYXRhOwkvKiBSZWNlaXZlZCBkYXRhIGFuZCBzdGF0dXMgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCmluZGV4IDdhZDIxOTIuLjhmY2I0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHJlY2VpdmVfY2hhcnMoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCwgdW5zaWduZWQgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaDsKIAl1bnNpZ25lZCBpbnQgZGlzciA9ICpzdGF0dXM7CiAJaW50IG1heF9jb3VudCA9IDI1NjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKaW5kZXggY2U2ZWU5Mi4uMjA4ZTQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHNjaV9yZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNjaV9wb3J0ICpzY2lfcG9ydCA9IChzdHJ1Y3Qgc2NpX3BvcnQgKilwb3J0OwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OwogCWludCBpLCBjb3VudCwgY29waWVkID0gMDsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAJdW5zaWduZWQgY2hhciBmbGFnOwpAQCAtNjQyLDcgKzY0Miw3IEBACiB7CiAJaW50IGNvcGllZCA9IDA7CiAJdW5zaWduZWQgc2hvcnQgc3RhdHVzID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKIAogCWlmIChzdGF0dXMgJiBTQ3hTUl9PUkVSKHBvcnQpKSB7CiAJCS8qIG92ZXJydW4gZXJyb3IgKi8KQEAgLTY5Miw3ICs2OTIsNyBAQAogewogCWludCBjb3BpZWQgPSAwOwogCXVuc2lnbmVkIHNob3J0IHN0YXR1cyA9IHNjaV9pbihwb3J0LCBTQ3hTUik7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CiAJc3RydWN0IHNjaV9wb3J0ICpzID0gJnNjaV9wb3J0c1twb3J0LT5saW5lXTsKIAogCWlmICh1YXJ0X2hhbmRsZV9icmVhayhwb3J0KSkKQEAgLTc2Miw3ICs3NjIsNyBAQAogCX0gZWxzZSB7CiAjaWYgZGVmaW5lZChTQ0lGX09SRVIpCiAJCWlmKChzY2lfaW4ocG9ydCwgU0NMU1IpICYgU0NJRl9PUkVSKSAhPSAwKSB7Ci0JCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+dHR5OworCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OwogCiAJCQlzY2lfb3V0KHBvcnQsIFNDTFNSLCAwKTsKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCmluZGV4IDAxOWRhMmUuLmI3M2UzYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTQ3MSw3ICs0NzEsNyBAQAogCiAJaWYgKHBvcnQtPnNjX3BvcnQuaW5mbykgewogCQkvKiBUaGUgc2VyaWFsX2NvcmUgc3R1ZmZzIGFyZSBpbml0aWxpemVkLCB1c2UgdGhlbSAqLwotCQl0dHkgPSBwb3J0LT5zY19wb3J0LmluZm8tPnR0eTsKKwkJdHR5ID0gcG9ydC0+c2NfcG9ydC5pbmZvLT5wb3J0LnR0eTsKIAl9CiAJZWxzZSB7CiAJCS8qIE5vdCByZWdpc3RlcmVkIHlldCAtIGNhbid0IHBhc3MgdG8gdHR5IGxheWVyLiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5odi5jCmluZGV4IDI4NDczMzYuLmFlZWVjNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3VuaHYuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IE5VTEw7CiAKIAlpZiAocG9ydC0+aW5mbyAhPSBOVUxMKQkJLyogVW5vcGVuZWQgc2VyaWFsIGNvbnNvbGUgKi8KLQkJdHR5ID0gcG9ydC0+aW5mby0+dHR5OworCQl0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKIAogCWlmIChzdW5odl9vcHMtPnJlY2VpdmVfY2hhcnMocG9ydCwgdHR5KSkKIAkJc3VuX2RvX2JyZWFrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCmluZGV4IDlmZjViMzguLjE1ZWU0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAlpbnQgaTsKIAogCWlmICh1cC0+cG9ydC5pbmZvICE9IE5VTEwpCQkvKiBVbm9wZW5lZCBzZXJpYWwgY29uc29sZSAqLwotCQl0dHkgPSB1cC0+cG9ydC5pbmZvLT50dHk7CisJCXR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OwogCiAJLyogUmVhZCBudW1iZXIgb2YgQllURVMgKENoYXJhY3RlciArIFN0YXR1cykgYXZhaWxhYmxlLiAqLwogCWlmIChzdGF0LT5zcmVnLmlzcjAgJiBTQUI4MjUzMl9JU1IwX1JQRikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKaW5kZXggMDM4MDZhOS4uZTI0ZTY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBzdS5jLHYgMS41NSAyMDAyLzAxLzA4IDE2OjAwOjE2IGRhdmVtIEV4cCAkCisvKgogICogc3UuYzogU21hbGwgc2VyaWFsIGRyaXZlciBmb3Iga2V5Ym9hcmQvbW91c2UgaW50ZXJmYWNlIG9uIHNwYXJjMzIvUENJCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk3ICBFZGRpZSBDLiBEb3N0ICAoZWNkQHNreW5ldC5iZSkKQEAgLTMxMSw3ICszMTEsNyBAQAogc3RhdGljIHN0cnVjdCB0dHlfc3RydWN0ICoKIHJlY2VpdmVfY2hhcnMoc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXAsIHVuc2lnbmVkIGNoYXIgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBjaGFyIGNoLCBmbGFnOwogCWludCBtYXhfY291bnQgPSAyNTY7CiAJaW50IHNhd19jb25zb2xlX2JyayA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYwppbmRleCA3ZTlmYTVlLi4wZjNkNjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKQEAgLTMyOSw4ICszMjksOCBAQAogCiAJdHR5ID0gTlVMTDsKIAlpZiAodXAtPnBvcnQuaW5mbyAhPSBOVUxMICYmCQkvKiBVbm9wZW5lZCBzZXJpYWwgY29uc29sZSAqLwotCSAgICB1cC0+cG9ydC5pbmZvLT50dHkgIT0gTlVMTCkJCS8qIEtleWJvYXJkIHx8IG1vdXNlICovCi0JCXR0eSA9IHVwLT5wb3J0LmluZm8tPnR0eTsKKwkgICAgdXAtPnBvcnQuaW5mby0+cG9ydC50dHkgIT0gTlVMTCkJLyogS2V5Ym9hcmQgfHwgbW91c2UgKi8KKwkJdHR5ID0gdXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CiAKIAlmb3IgKDs7KSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMgYi9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jCmluZGV4IGI1MWMyNDIuLjZhM2Y4ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYwpAQCAtNzUsNyArNzUsNyBAQAogCiBzdGF0aWMgaW50IHVsaXRlX3JlY2VpdmUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IHN0YXQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaCA9IDA7CiAJY2hhciBmbGFnID0gVFRZX05PUk1BTDsKIApAQCAtMTYyLDcgKzE2Miw3IEBACiAJCWJ1c3kgfD0gdWxpdGVfdHJhbnNtaXQocG9ydCwgc3RhdCk7CiAJfSB3aGlsZSAoYnVzeSk7CiAKLQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5pbmZvLT50dHkpOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPmluZm8tPnBvcnQudHR5KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCmluZGV4IDU2NmE4YjQuLjVjNWQxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciBjaCwgKmNwOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcWVfcG9ydC0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKIAlzdHJ1Y3QgcWVfYmQgKmJkcDsKIAl1MTYgc3RhdHVzOwogCXVuc2lnbmVkIGludCBmbGc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC92ODUwZV91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC92ODUwZV91YXJ0LmMKaW5kZXggZGQ5OGFjYS4uNWFjZjA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdjg1MGVfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3Y4NTBlX3VhcnQuYwpAQCAtMzAwLDggKzMwMCw4IEBACiAKIAlwb3J0LT5pY291bnQucngrKzsKIAotCXR0eV9pbnNlcnRfZmxpcF9jaGFyIChwb3J0LT5pbmZvLT50dHksIGNoLCBjaF9zdGF0KTsKLQl0dHlfc2NoZWR1bGVfZmxpcCAocG9ydC0+aW5mby0+dHR5KTsKKwl0dHlfaW5zZXJ0X2ZsaXBfY2hhciAocG9ydC0+aW5mby0+cG9ydC50dHksIGNoLCBjaF9zdGF0KTsKKwl0dHlfc2NoZWR1bGVfZmxpcCAocG9ydC0+aW5mby0+cG9ydC50dHkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jIGIvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCmluZGV4IGJiNmNlNmIuLjA1NzNmM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYworKysgYi9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCWNoYXIgZmxhZzsKIAlpbnQgbWF4X2NvdW50ID0gUlhfTUFYX0NPVU5UOwogCi0JdHR5ID0gcG9ydC0+aW5mby0+dHR5OworCXR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OwogCWxzciA9ICpzdGF0dXM7CiAKIAlkbyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC96cy5jIGIvZHJpdmVycy9zZXJpYWwvenMuYwppbmRleCA2NWYxMjk0Li5iZDQ1YjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC96cy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3pzLmMKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQl1YXJ0X2luc2VydF9jaGFyKHVwb3J0LCBzdGF0dXMsIFJ4X09WUiwgY2gsIGZsYWcpOwogCX0KIAotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHVwb3J0LT5pbmZvLT50dHkpOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHVwb3J0LT5pbmZvLT5wb3J0LnR0eSk7CiB9CiAKIHN0YXRpYyB2b2lkIHpzX3Jhd190cmFuc21pdF9jaGFycyhzdHJ1Y3QgenNfcG9ydCAqenBvcnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS5jCmluZGV4IDFhZDEyYWYuLjE3NzFiMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS5jCkBAIC01MDIsNyArNTAyLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXN0cnVjdCBzcGlfbWFzdGVyCSptYXN0ZXIgPSBOVUxMOwogCi0JZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJnNwaV9tYXN0ZXJfY2xhc3MsICZidXNfbnVtLAorCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZzcGlfbWFzdGVyX2NsYXNzLCBOVUxMLCAmYnVzX251bSwKIAkJCQlfX3NwaV9tYXN0ZXJfbWF0Y2gpOwogCWlmIChkZXYpCiAJCW1hc3RlciA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzcGlfbWFzdGVyLCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpZGV2LmMgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwppbmRleCBkZGJlMWE1Li4yODMzZmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlkZXYuYworKysgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwpAQCAtNTc2LDcgKzU3Niw4IEBACiAJCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCQlzcGlkZXYtPmRldnQgPSBNS0RFVihTUElERVZfTUFKT1IsIG1pbm9yKTsKLQkJZGV2ID0gZGV2aWNlX2NyZWF0ZShzcGlkZXZfY2xhc3MsICZzcGktPmRldiwgc3BpZGV2LT5kZXZ0LAorCQlkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoc3BpZGV2X2NsYXNzLCAmc3BpLT5kZXYsCisJCQkJc3BpZGV2LT5kZXZ0LCBzcGlkZXYsCiAJCQkJInNwaWRldiVkLiVkIiwKIAkJCQlzcGktPm1hc3Rlci0+YnVzX251bSwgc3BpLT5jaGlwX3NlbGVjdCk7CiAJCXN0YXR1cyA9IElTX0VSUihkZXYpID8gUFRSX0VSUihkZXYpIDogMDsKQEAgLTU4Niw3ICs1ODcsNiBAQAogCX0KIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc2V0X2JpdChtaW5vciwgbWlub3JzKTsKLQkJc3BpX3NldF9kcnZkYXRhKHNwaSwgc3BpZGV2KTsKIAkJbGlzdF9hZGQoJnNwaWRldi0+ZGV2aWNlX2VudHJ5LCAmZGV2aWNlX2xpc3QpOwogCX0KIAltdXRleF91bmxvY2soJmRldmljZV9saXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvS2NvbmZpZyBiL2RyaXZlcnMvc3NiL0tjb25maWcKaW5kZXggY2Q4NDViOC4uMzA3YjFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3NzYi9LY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogCiBjb25maWcgU1NCX1BPU1NJQkxFCiAJYm9vbAotCWRlcGVuZHMgb24gSEFTX0lPTUVNCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0gJiYgSEFTX0RNQQogCWRlZmF1bHQgeQogCiBjb25maWcgU1NCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9tYWluLmMgYi9kcml2ZXJzL3NzYi9tYWluLmMKaW5kZXggZDE4NGYyYS4uZDgzMWEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvbWFpbi5jCisrKyBiL2RyaXZlcnMvc3NiL21haW4uYwpAQCAtNDYyLDE4ICs0NjIsMTUgQEAKICNpZmRlZiBDT05GSUdfU1NCX1BDSUhPU1QKIAkJCXNkZXYtPmlycSA9IGJ1cy0+aG9zdF9wY2ktPmlycTsKIAkJCWRldi0+cGFyZW50ID0gJmJ1cy0+aG9zdF9wY2ktPmRldjsKLQkJCXNkZXYtPmRtYV9kZXYgPSAmYnVzLT5ob3N0X3BjaS0+ZGV2OwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6CiAjaWZkZWYgQ09ORklHX1NTQl9QQ01DSUFIT1NUCiAJCQlzZGV2LT5pcnEgPSBidXMtPmhvc3RfcGNtY2lhLT5pcnEuQXNzaWduZWRJUlE7CiAJCQlkZXYtPnBhcmVudCA9ICZidXMtPmhvc3RfcGNtY2lhLT5kZXY7Ci0JCQlzZGV2LT5kbWFfZGV2ID0gJmJ1cy0+aG9zdF9wY21jaWEtPmRldjsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgotCQkJc2Rldi0+ZG1hX2RldiA9IGRldjsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTExNTYsMzYgKzExNTMsODIgQEAKIHsKIAlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7CiAJY2FzZSBTU0JfQlVTVFlQRV9TU0I6Ci0JY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6CiAJCXJldHVybiAwOwogCWNhc2UgU1NCX0JVU1RZUEVfUENJOgogCQlyZXR1cm4gU1NCX1BDSV9ETUE7CisJZGVmYXVsdDoKKwkJX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woc3NiX2RtYV90cmFuc2xhdGlvbik7CiAKLWludCBzc2JfZG1hX3NldF9tYXNrKHN0cnVjdCBzc2JfZGV2aWNlICpzc2JfZGV2LCB1NjQgbWFzaykKK2ludCBzc2JfZG1hX3NldF9tYXNrKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewotCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSBzc2JfZGV2LT5kbWFfZGV2OwotCWludCBlcnIgPSAwOworCWludCBlcnI7CiAKLSNpZmRlZiBDT05GSUdfU1NCX1BDSUhPU1QKLQlpZiAoc3NiX2Rldi0+YnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDSSkgewotCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHNzYl9kZXYtPmJ1cy0+aG9zdF9wY2ksIG1hc2spOworCXN3aXRjaCAoZGV2LT5idXMtPmJ1c3R5cGUpIHsKKwljYXNlIFNTQl9CVVNUWVBFX1BDSToKKwkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhkZXYtPmJ1cy0+aG9zdF9wY2ksIG1hc2spOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHNzYl9kZXYtPmJ1cy0+aG9zdF9wY2ksIG1hc2spOworCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soZGV2LT5idXMtPmhvc3RfcGNpLCBtYXNrKTsKIAkJcmV0dXJuIGVycjsKKwljYXNlIFNTQl9CVVNUWVBFX1NTQjoKKwkJcmV0dXJuIGRtYV9zZXRfbWFzayhkZXYtPmRldiwgbWFzayk7CisJZGVmYXVsdDoKKwkJX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChkZXYpOwogCX0KLSNlbmRpZgotCWRtYV9kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gbWFzazsKLQlkbWFfZGV2LT5kbWFfbWFzayA9ICZkbWFfZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKLQotCXJldHVybiBlcnI7CisJcmV0dXJuIC1FTk9TWVM7CiB9CiBFWFBPUlRfU1lNQk9MKHNzYl9kbWFfc2V0X21hc2spOwogCit2b2lkICogc3NiX2RtYV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcF9mbGFncykKK3sKKwlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7CisJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6CisJCWlmIChnZnBfZmxhZ3MgJiBHRlBfRE1BKSB7CisJCQkvKiBXb3JrYXJvdW5kOiBUaGUgUENJIEFQSSBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpbmcKKwkJCSAqIGEgR0ZQIGZsYWcuICovCisJCQlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPmJ1cy0+aG9zdF9wY2ktPmRldiwKKwkJCQkJCSAgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwX2ZsYWdzKTsKKwkJfQorCQlyZXR1cm4gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LT5idXMtPmhvc3RfcGNpLCBzaXplLCBkbWFfaGFuZGxlKTsKKwljYXNlIFNTQl9CVVNUWVBFX1NTQjoKKwkJcmV0dXJuIGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwX2ZsYWdzKTsKKwlkZWZhdWx0OgorCQlfX3NzYl9kbWFfbm90X2ltcGxlbWVudGVkKGRldik7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzc2JfZG1hX2FsbG9jX2NvbnNpc3RlbnQpOworCit2b2lkIHNzYl9kbWFfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgICBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3dpdGNoIChkZXYtPmJ1cy0+YnVzdHlwZSkgeworCWNhc2UgU1NCX0JVU1RZUEVfUENJOgorCQlpZiAoZ2ZwX2ZsYWdzICYgR0ZQX0RNQSkgeworCQkJLyogV29ya2Fyb3VuZDogVGhlIFBDSSBBUEkgZG9lcyBub3Qgc3VwcG9ydCBwYXNzaW5nCisJCQkgKiBhIEdGUCBmbGFnLiAqLworCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+YnVzLT5ob3N0X3BjaS0+ZGV2LAorCQkJCQkgIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKKwkJCXJldHVybjsKKwkJfQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+YnVzLT5ob3N0X3BjaSwgc2l6ZSwKKwkJCQkgICAgdmFkZHIsIGRtYV9oYW5kbGUpOworCQlyZXR1cm47CisJY2FzZSBTU0JfQlVTVFlQRV9TU0I6CisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+ZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlfX3NzYl9kbWFfbm90X2ltcGxlbWVudGVkKGRldik7CisJfQorfQorRVhQT1JUX1NZTUJPTChzc2JfZG1hX2ZyZWVfY29uc2lzdGVudCk7CisKIGludCBzc2JfYnVzX21heV9wb3dlcmRvd24oc3RydWN0IHNzYl9idXMgKmJ1cykKIHsKIAlzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvcGNpLmMgYi9kcml2ZXJzL3NzYi9wY2kuYwppbmRleCA1N2M0Y2NmLi5mODgzZGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9wY2kuYworKysgYi9kcml2ZXJzL3NzYi9wY2kuYwpAQCAtNTEwLDE3ICs1MTAsMTUgQEAKIAlzcHJvbV9kb19yZWFkKGJ1cywgYnVmKTsKIAllcnIgPSBzcHJvbV9jaGVja19jcmMoYnVmLCBidXMtPnNwcm9tX3NpemUpOwogCWlmIChlcnIpIHsKLQkJLyogY2hlY2sgZm9yIHJldiA0IHNwcm9tIC0gaGFzIHNwZWNpYWwgc2lnbmF0dXJlICovCi0JCWlmIChidWZbMzJdID09IDB4NTM3MikgewotCQkJa2ZyZWUoYnVmKTsKLQkJCWJ1ZiA9IGtjYWxsb2MoU1NCX1NQUk9NU0laRV9XT1JEU19SNCwgc2l6ZW9mKHUxNiksCi0JCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWJ1ZikKLQkJCQlnb3RvIG91dDsKLQkJCWJ1cy0+c3Byb21fc2l6ZSA9IFNTQl9TUFJPTVNJWkVfV09SRFNfUjQ7Ci0JCQlzcHJvbV9kb19yZWFkKGJ1cywgYnVmKTsKLQkJCWVyciA9IHNwcm9tX2NoZWNrX2NyYyhidWYsIGJ1cy0+c3Byb21fc2l6ZSk7Ci0JCX0KKwkJLyogdHJ5IGZvciBhIDQ0MCBieXRlIFNQUk9NIC0gcmV2aXNpb24gNCBhbmQgaGlnaGVyICovCisJCWtmcmVlKGJ1Zik7CisJCWJ1ZiA9IGtjYWxsb2MoU1NCX1NQUk9NU0laRV9XT1JEU19SNCwgc2l6ZW9mKHUxNiksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYpCisJCQlnb3RvIG91dDsKKwkJYnVzLT5zcHJvbV9zaXplID0gU1NCX1NQUk9NU0laRV9XT1JEU19SNDsKKwkJc3Byb21fZG9fcmVhZChidXMsIGJ1Zik7CisJCWVyciA9IHNwcm9tX2NoZWNrX2NyYyhidWYsIGJ1cy0+c3Byb21fc2l6ZSk7CiAJCWlmIChlcnIpCiAJCQlzc2JfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldBUk5JTkc6IEludmFsaWQiCiAJCQkJICAgIiBTUFJPTSBDUkMgKGNvcnJ1cHQgU1BST00pXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL0tjb25maWcgYi9kcml2ZXJzL3Vpby9LY29uZmlnCmluZGV4IGE0YWFhYjkuLjJlOTA3OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL0tjb25maWcKKysrIGIvZHJpdmVycy91aW8vS2NvbmZpZwpAQCAtMTUsNyArMTUsNyBAQAogCiBjb25maWcgVUlPX0NJRgogCXRyaXN0YXRlICJnZW5lcmljIEhpbHNjaGVyIENJRiBDYXJkIGRyaXZlciIKLQlkZXBlbmRzIG9uIFVJTyAmJiBQQ0kKKwlkZXBlbmRzIG9uIFBDSQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIERyaXZlciBmb3IgSGlsc2NoZXIgQ0lGIERldmljZU5ldCBhbmQgUHJvZmlidXMgY2FyZHMuICBUaGlzCkBAIC0yNiw5ICsyNiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgdWlvX2NpZi4KIAorY29uZmlnIFVJT19QRFJWCisJdHJpc3RhdGUgIlVzZXJzcGFjZSBJL08gcGxhdGZvcm0gZHJpdmVyIgorCWhlbHAKKwkgIEdlbmVyaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBVc2Vyc3BhY2UgSS9PIGRldmljZXMuCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCisKIGNvbmZpZyBVSU9fU01YCiAJdHJpc3RhdGUgIlNNWCBjcnlwdGVuZ2luZSBVSU8gaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gVUlPCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVXNlcnNwYWNlIElPIGludGVyZmFjZSB0byB0aGUgQ3J5cHRvZ3JhcGh5IGVuZ2luZSBmb3VuZCBvbiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL01ha2VmaWxlIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKaW5kZXggMThjNDU2Ni4uZTAwY2UwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACiBvYmotJChDT05GSUdfVUlPKQkrPSB1aW8ubwogb2JqLSQoQ09ORklHX1VJT19DSUYpCSs9IHVpb19jaWYubworb2JqLSQoQ09ORklHX1VJT19QRFJWKQkrPSB1aW9fcGRydi5vCiBvYmotJChDT05GSUdfVUlPX1NNWCkJKz0gdWlvX3NteC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW8uYyBiL2RyaXZlcnMvdWlvL3Vpby5jCmluZGV4IDVhN2NhMmUuLjNhNjkzNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpby5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpby5jCkBAIC00MjcsNiArNDI3LDMxIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHNzaXplX3QgdWlvX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlcCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1aW9fbGlzdGVuZXIgKmxpc3RlbmVyID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdWlvX2RldmljZSAqaWRldiA9IGxpc3RlbmVyLT5kZXY7CisJc3NpemVfdCByZXR2YWw7CisJczMyIGlycV9vbjsKKworCWlmIChpZGV2LT5pbmZvLT5pcnEgPT0gVUlPX0lSUV9OT05FKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChjb3VudCAhPSBzaXplb2YoczMyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWlkZXYtPmluZm8tPmlycWNvbnRyb2wpCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpcnFfb24sIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHZhbCA9IGlkZXYtPmluZm8tPmlycWNvbnRyb2woaWRldi0+aW5mbywgaXJxX29uKTsKKworCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiBzaXplb2YoczMyKTsKK30KKwogc3RhdGljIGludCB1aW9fZmluZF9tZW1faW5kZXgoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaW50IG1pOwpAQCAtNTQ2LDYgKzU3MSw3IEBACiAJLm9wZW4JCT0gdWlvX29wZW4sCiAJLnJlbGVhc2UJPSB1aW9fcmVsZWFzZSwKIAkucmVhZAkJPSB1aW9fcmVhZCwKKwkud3JpdGUJCT0gdWlvX3dyaXRlLAogCS5tbWFwCQk9IHVpb19tbWFwLAogCS5wb2xsCQk9IHVpb19wb2xsLAogCS5mYXN5bmMJCT0gdWlvX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19wZHJ2LmMgYi9kcml2ZXJzL3Vpby91aW9fcGRydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMGQyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Vpby91aW9fcGRydi5jCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogZHJpdmVycy91aW8vdWlvX3BkcnYuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ1aW8iCisKK3N0cnVjdCB1aW9fcGxhdGRhdGEgeworCXN0cnVjdCB1aW9faW5mbyAqdWlvaW5mbzsKK307CisKK3N0YXRpYyBpbnQgdWlvX3BkcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdWlvX2luZm8gKnVpb2luZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdWlvX3BsYXRkYXRhICpwZGF0YTsKKwlzdHJ1Y3QgdWlvX21lbSAqdWlvbWVtOworCWludCByZXQgPSAtRU5PREVWOworCWludCBpOworCisJaWYgKCF1aW9pbmZvIHx8ICF1aW9pbmZvLT5uYW1lIHx8ICF1aW9pbmZvLT52ZXJzaW9uKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzOiBlcnJfdWlvaW5mb1xuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl91aW9pbmZvOworCX0KKworCXBkYXRhID0ga3phbGxvYyhzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICIlczogZXJyX2FsbG9jX3BkYXRhXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2FsbG9jX3BkYXRhOworCX0KKworCXBkYXRhLT51aW9pbmZvID0gdWlvaW5mbzsKKworCXVpb21lbSA9ICZ1aW9pbmZvLT5tZW1bMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRldi0+bnVtX3Jlc291cmNlczsgKytpKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKKworCQlpZiAoci0+ZmxhZ3MgIT0gSU9SRVNPVVJDRV9NRU0pCisJCQljb250aW51ZTsKKworCQlpZiAodWlvbWVtID49ICZ1aW9pbmZvLT5tZW1bTUFYX1VJT19NQVBTXSkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImRldmljZSBoYXMgbW9yZSB0aGFuICIKKwkJCQkJX19zdHJpbmdpZnkoTUFYX1VJT19NQVBTKQorCQkJCQkiIEkvTyBtZW1vcnkgcmVzb3VyY2VzLlxuIik7CisJCQlicmVhazsKKwkJfQorCisJCXVpb21lbS0+bWVtdHlwZSA9IFVJT19NRU1fUEhZUzsKKwkJdWlvbWVtLT5hZGRyID0gci0+c3RhcnQ7CisJCXVpb21lbS0+c2l6ZSA9IHItPmVuZCAtIHItPnN0YXJ0ICsgMTsKKwkJKyt1aW9tZW07CisJfQorCisJd2hpbGUgKHVpb21lbSA8ICZ1aW9pbmZvLT5tZW1bTUFYX1VJT19NQVBTXSkgeworCQl1aW9tZW0tPnNpemUgPSAwOworCQkrK3Vpb21lbTsKKwl9CisKKwlwZGF0YS0+dWlvaW5mby0+cHJpdiA9IHBkYXRhOworCisJcmV0ID0gdWlvX3JlZ2lzdGVyX2RldmljZSgmcGRldi0+ZGV2LCBwZGF0YS0+dWlvaW5mbyk7CisKKwlpZiAocmV0KSB7CisJCWtmcmVlKHBkYXRhKTsKK2Vycl9hbGxvY19wZGF0YToKK2Vycl91aW9pbmZvOgorCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVpb19wZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1aW9fcGxhdGRhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl1aW9fdW5yZWdpc3Rlcl9kZXZpY2UocGRhdGEtPnVpb2luZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVpb19wZHJ2ID0geworCS5wcm9iZSA9IHVpb19wZHJ2X3Byb2JlLAorCS5yZW1vdmUgPSB1aW9fcGRydl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVpb19wZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1aW9fcGRydik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1aW9fcGRydl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnVpb19wZHJ2KTsKK30KK21vZHVsZV9pbml0KHVpb19wZHJ2X2luaXQpOworbW9kdWxlX2V4aXQodWlvX3BkcnZfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlV3ZSBLbGVpbmUtS29lbmlnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlVzZXJzcGFjZSBJL08gcGxhdGZvcm0gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCmluZGV4IDkwNTgzZDYuLjUwN2E5YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYworKysgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKQEAgLTEwNTIsNyArMTA1Miw2IEBACiAKIAlpbnN0YW5jZS0+dXNiYXRtID0gdXNiYXRtX2luc3RhbmNlOwogCWluc3RhbmNlLT5tb2RlbV90eXBlID0gKHN0cnVjdCBjeGFjcnVfbW9kZW1fdHlwZSAqKSBpZC0+ZHJpdmVyX2luZm87Ci0JbWVtc2V0KGluc3RhbmNlLT5jYXJkX2luZm8sIDAsIHNpemVvZihpbnN0YW5jZS0+Y2FyZF9pbmZvKSk7CiAKIAltdXRleF9pbml0KCZpbnN0YW5jZS0+cG9sbF9zdGF0ZV9zZXJpYWxpemUpOwogCWluc3RhbmNlLT5wb2xsX3N0YXRlID0gQ1hQT0xMX1NUT1BQRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYyBiL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jCmluZGV4IDdkMjdjOWMuLjc2ZmNlNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jCkBAIC04MjksNyArODI5LDYgQEAKIAlpZiAodXNlX2lzb2MpIHsKIAkJY29uc3Qgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqZGVzYyA9IGRhdGFfaW50Zi0+Y3VyX2FsdHNldHRpbmc7CiAJCWNvbnN0IF9fdTggdGFyZ2V0X2FkZHJlc3MgPSBVU0JfRElSX0lOIHwgdXNiYXRtLT5kcml2ZXItPmlzb2NfaW47Ci0JCWludCBpOwogCiAJCXVzZV9pc29jID0gMDsgLyogZmFsbCBiYWNrIHRvIGJ1bGsgaWYgZW5kcG9pbnQgbm90IGZvdW5kICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCBjMzIwMWFmZi4uMDcyNWIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMTU5LDEyICsxNTksMzQgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWNtLT53cml0ZV9sb2NrLCBmbGFncyk7CiAJYWNtLT53cml0ZV9yZWFkeSA9IDE7CiAJd2ItPnVzZSA9IDA7CisJYWNtLT50cmFuc21pdHRpbmctLTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY20tPndyaXRlX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKICAqIFBva2Ugd3JpdGUuCisgKgorICogdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbG9ja2luZwogICovCisKK3N0YXRpYyBpbnQgYWNtX3N0YXJ0X3diKHN0cnVjdCBhY20gKmFjbSwgc3RydWN0IGFjbV93YiAqd2IpCit7CisJaW50IHJjOworCisJYWNtLT50cmFuc21pdHRpbmcrKzsKKworCXdiLT51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHdiLT5idWY7CisJd2ItPnVyYi0+dHJhbnNmZXJfZG1hID0gd2ItPmRtYWg7CisJd2ItPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHdiLT5sZW47CisJd2ItPnVyYi0+ZGV2ID0gYWNtLT5kZXY7CisKKwlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIod2ItPnVyYiwgR0ZQX0FUT01JQykpIDwgMCkgeworCQlkYmcoInVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZDogJWQiLCByYyk7CisJCWFjbV93cml0ZV9kb25lKGFjbSwgd2IpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgYWNtX3dyaXRlX3N0YXJ0KHN0cnVjdCBhY20gKmFjbSwgaW50IHdibikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTgyLDI2ICsyMDQsMzEgQEAKIAkJcmV0dXJuIDA7CS8qIEEgd2hpdGUgbGllICovCiAJfQogCisJd2IgPSAmYWNtLT53Ylt3Ym5dOworCWlmKGFjbV93Yl9pc19hdmFpbChhY20pIDw9IDEpCisJCWFjbS0+d3JpdGVfcmVhZHkgPSAwOworCisJZGJnKCIlcyBzdXNwX2NvdW50OiAlZCIsIF9fZnVuY19fLCBhY20tPnN1c3BfY291bnQpOworCWlmIChhY20tPnN1c3BfY291bnQpIHsKKwkJYWNtLT5vbGRfcmVhZHkgPSBhY20tPndyaXRlX3JlYWR5OworCQlhY20tPmRlbGF5ZWRfd2IgPSB3YjsKKwkJYWNtLT53cml0ZV9yZWFkeSA9IDA7CisJCXNjaGVkdWxlX3dvcmsoJmFjbS0+d2FrZXIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY20tPndyaXRlX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CS8qIEEgd2hpdGUgbGllICovCisJfQorCXVzYl9tYXJrX2xhc3RfYnVzeShhY20tPmRldik7CisKIAlpZiAoIWFjbV93Yl9pc191c2VkKGFjbSwgd2JuKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY20tPndyaXRlX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQotCXdiID0gJmFjbS0+d2Jbd2JuXTsKIAotCWlmKGFjbV93Yl9pc19hdmFpbChhY20pIDw9IDEpCi0JCWFjbS0+d3JpdGVfcmVhZHkgPSAwOworCXJjID0gYWNtX3N0YXJ0X3diKGFjbSwgd2IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+d3JpdGVfbG9jaywgZmxhZ3MpOwogCi0Jd2ItPnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gd2ItPmJ1ZjsKLQl3Yi0+dXJiLT50cmFuc2Zlcl9kbWEgPSB3Yi0+ZG1haDsKLQl3Yi0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gd2ItPmxlbjsKLQl3Yi0+dXJiLT5kZXYgPSBhY20tPmRldjsKLQotCWlmICgocmMgPSB1c2Jfc3VibWl0X3VyYih3Yi0+dXJiLCBHRlBfQVRPTUlDKSkgPCAwKSB7Ci0JCWRiZygidXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkOiAlZCIsIHJjKTsKLQkJYWNtX3dyaXRlX2RvbmUoYWNtLCB3Yik7Ci0JfQogCXJldHVybiByYzsKKwogfQogLyoKICAqIGF0dHJpYnV0ZXMgZXhwb3J0ZWQgdGhyb3VnaCBzeXNmcwpAQCAtMzA0LDYgKzMzMSw3IEBACiAJCQlicmVhazsKIAl9CiBleGl0OgorCXVzYl9tYXJrX2xhc3RfYnVzeShhY20tPmRldik7CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKIAkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLApAQCAtMzIwLDggKzM0OCwxMSBAQAogCiAJZGJnKCJFbnRlcmluZyBhY21fcmVhZF9idWxrIHdpdGggc3RhdHVzICVkIiwgc3RhdHVzKTsKIAotCWlmICghQUNNX1JFQURZKGFjbSkpCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkgeworCQlkZXZfZGJnKCZhY20tPmRhdGEtPmRldiwgIkFib3J0aW5nLCBhY20gbm90IHJlYWR5Iik7CiAJCXJldHVybjsKKwl9CisJdXNiX21hcmtfbGFzdF9idXN5KGFjbS0+ZGV2KTsKIAogCWlmIChzdGF0dXMpCiAJCWRldl9kYmcoJmFjbS0+ZGF0YS0+ZGV2LCAiYnVsayByeCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CkBAIC0zMzEsNiArMzYyLDcgQEAKIAogCWlmIChsaWtlbHkoc3RhdHVzID09IDApKSB7CiAJCXNwaW5fbG9jaygmYWNtLT5yZWFkX2xvY2spOworCQlhY20tPnByb2Nlc3NpbmcrKzsKIAkJbGlzdF9hZGRfdGFpbCgmcmN2LT5saXN0LCAmYWNtLT5zcGFyZV9yZWFkX3VyYnMpOwogCQlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZhY20tPmZpbGxlZF9yZWFkX2J1ZnMpOwogCQlzcGluX3VubG9jaygmYWNtLT5yZWFkX2xvY2spOwpAQCAtMzQzLDcgKzM3NSw4IEBACiAJCS8qIG5ldmVydGhlbGVzcyB0aGUgdGFza2xldCBtdXN0IGJlIGtpY2tlZCB1bmNvbmRpdGlvbmFsbHkKIAkJc28gdGhlIHF1ZXVlIGNhbm5vdCBkcnkgdXAgKi8KIAl9Ci0JdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CisJaWYgKGxpa2VseSghYWNtLT5zdXNwX2NvdW50KSkKKwkJdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGFjbV9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgX2FjbSkKQEAgLTM1NCwxNiArMzg3LDIzIEBACiAJc3RydWN0IGFjbV9ydSAqcmN2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciB0aHJvdHRsZWQ7CisKIAlkYmcoIkVudGVyaW5nIGFjbV9yeF90YXNrbGV0Iik7CiAKIAlpZiAoIUFDTV9SRUFEWShhY20pKQorCXsKKwkJZGJnKCJhY21fcnhfdGFza2xldDogQUNNIG5vdCByZWFkeSIpOwogCQlyZXR1cm47CisJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFjbS0+dGhyb3R0bGVfbG9jaywgZmxhZ3MpOwogCXRocm90dGxlZCA9IGFjbS0+dGhyb3R0bGU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT50aHJvdHRsZV9sb2NrLCBmbGFncyk7CiAJaWYgKHRocm90dGxlZCkKKwl7CisJCWRiZygiYWNtX3J4X3Rhc2tsZXQ6IHRocm90dGxlZCIpOwogCQlyZXR1cm47CisJfQogCiBuZXh0X2J1ZmZlcjoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKQEAgLTQwMyw2ICs0NDMsNyBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmYWNtLT5zcGFyZV9yZWFkX2J1ZnMpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwogCQlpZiAobGlzdF9lbXB0eSgmYWNtLT5zcGFyZV9yZWFkX3VyYnMpKSB7CisJCQlhY20tPnByb2Nlc3NpbmcgPSAwOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNDI1LDE4ICs0NjYsMjMgQEAKIAkJcmN2LT51cmItPnRyYW5zZmVyX2RtYSA9IGJ1Zi0+ZG1hOwogCQlyY3YtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CiAKLQkJZGJnKCJhY21fcnhfdGFza2xldDogc2VuZGluZyB1cmIgMHglcCwgcmN2IDB4JXAsIGJ1ZiAweCVwIiwgcmN2LT51cmIsIHJjdiwgYnVmKTsKLQogCQkvKiBUaGlzIHNob3VsZG4ndCBraWxsIHRoZSBkcml2ZXIgYXMgdW5zdWNjZXNzZnVsIFVSQnMgYXJlIHJldHVybmVkIHRvIHRoZQogCQkgICBmcmVlLXVyYnMtcG9vbCBhbmQgcmVzdWJtaXRlZCBBU0FQICovCi0JCWlmICh1c2Jfc3VibWl0X3VyYihyY3YtPnVyYiwgR0ZQX0FUT01JQykgPCAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOworCQlpZiAoYWNtLT5zdXNwX2NvdW50IHx8IHVzYl9zdWJtaXRfdXJiKHJjdi0+dXJiLCBHRlBfQVRPTUlDKSA8IDApIHsKIAkJCWxpc3RfYWRkKCZidWYtPmxpc3QsICZhY20tPnNwYXJlX3JlYWRfYnVmcyk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKIAkJCWxpc3RfYWRkKCZyY3YtPmxpc3QsICZhY20tPnNwYXJlX3JlYWRfdXJicyk7CisJCQlhY20tPnByb2Nlc3NpbmcgPSAwOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7CisJCQlkYmcoImFjbV9yeF90YXNrbGV0OiBzZW5kaW5nIHVyYiAweCVwLCByY3YgMHglcCwgYnVmIDB4JXAiLCByY3YtPnVyYiwgcmN2LCBidWYpOwogCQl9CiAJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOworCWFjbS0+cHJvY2Vzc2luZyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKIH0KIAogLyogZGF0YSBpbnRlcmZhY2Ugd3JvdGUgdGhvc2Ugb3V0Z29pbmcgYnl0ZXMgKi8KQEAgLTQ2Myw2ICs1MDksMjcgQEAKIAl0dHlfd2FrZXVwKGFjbS0+dHR5KTsKIH0KIAorc3RhdGljIHZvaWQgYWNtX3dha2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2FrZXIpCit7CisJc3RydWN0IGFjbSAqYWNtID0gY29udGFpbmVyX29mKHdha2VyLCBzdHJ1Y3QgYWNtLCB3YWtlcik7CisJbG9uZyBmbGFnczsKKwlpbnQgcnY7CisKKwlydiA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOworCWlmIChydiA8IDApIHsKKwkJZXJyKCJBdXRvcG0gZmFpbHVyZSBpbiAlcyIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoYWNtLT5kZWxheWVkX3diKSB7CisJCWFjbV9zdGFydF93YihhY20sIGFjbS0+ZGVsYXllZF93Yik7CisJCWFjbS0+ZGVsYXllZF93YiA9IE5VTEw7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPndyaXRlX2xvY2ssIGZsYWdzKTsKKwlhY20tPndyaXRlX3JlYWR5ID0gYWNtLT5vbGRfcmVhZHk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT53cml0ZV9sb2NrLCBmbGFncyk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7Cit9CisKIC8qCiAgKiBUVFkgaGFuZGxlcnMKICAqLwpAQCAtNDkyLDYgKzU1OSw4IEBACiAKIAlpZiAodXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCkgPCAwKQogCQlnb3RvIGVhcmx5X2JhaWw7CisJZWxzZQorCQlhY20tPmNvbnRyb2wtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAxOwogCiAJbXV0ZXhfbG9jaygmYWNtLT5tdXRleCk7CiAJaWYgKGFjbS0+dXNlZCsrKSB7CkBAIC01MDksNiArNTc4LDcgQEAKIAlpZiAoMCA+IGFjbV9zZXRfY29udHJvbChhY20sIGFjbS0+Y3RybG91dCA9IEFDTV9DVFJMX0RUUiB8IEFDTV9DVFJMX1JUUykgJiYKIAkgICAgKGFjbS0+Y3RybF9jYXBzICYgVVNCX0NEQ19DQVBfTElORSkpCiAJCWdvdG8gZnVsbF9iYWlsb3V0OworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFjbS0+c3BhcmVfcmVhZF91cmJzKTsKIAlJTklUX0xJU1RfSEVBRCgmYWNtLT5zcGFyZV9yZWFkX2J1ZnMpOwpAQCAtNTcwLDEyICs2NDAsMTQgQEAKIAltdXRleF9sb2NrKCZvcGVuX211dGV4KTsKIAlpZiAoIS0tYWNtLT51c2VkKSB7CiAJCWlmIChhY20tPmRldikgeworCQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7CiAJCQlhY21fc2V0X2NvbnRyb2woYWNtLCBhY20tPmN0cmxvdXQgPSAwKTsKIAkJCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOwogCQkJZm9yIChpID0gMDsgaSA8IEFDTV9OVzsgaSsrKQogCQkJCXVzYl9raWxsX3VyYihhY20tPndiW2ldLnVyYik7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKIAkJCQl1c2Jfa2lsbF91cmIoYWNtLT5ydVtpXS51cmIpOworCQkJYWNtLT5jb250cm9sLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKIAkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOwogCQl9IGVsc2UKIAkJCWFjbV90dHlfdW5yZWdpc3RlcihhY20pOwpAQCAtNjYwLDEzICs3MzIsMTYgQEAKIAl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPnVyYl90YXNrKTsKIH0KIAotc3RhdGljIHZvaWQgYWNtX3R0eV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKQorc3RhdGljIGludCBhY21fdHR5X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpCiB7CiAJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgcmV0dmFsOwogCWlmICghQUNNX1JFQURZKGFjbSkpCi0JCXJldHVybjsKLQlpZiAoYWNtX3NlbmRfYnJlYWsoYWNtLCBzdGF0ZSA/IDB4ZmZmZiA6IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR2YWwgPSBhY21fc2VuZF9icmVhayhhY20sIHN0YXRlID8gMHhmZmZmIDogMCk7CisJaWYgKHJldHZhbCA8IDApCiAJCWRiZygic2VuZCBicmVhayBmYWlsZWQiKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IGFjbV90dHlfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC03NjYsNyArODQxLDcgQEAKICAqIFVTQiBwcm9iZSBhbmQgZGlzY29ubmVjdCByb3V0aW5lcy4KICAqLwogCi0vKiBMaXR0bGUgaGVscGVyOiB3cml0ZSBidWZmZXJzIGZyZWUgKi8KKy8qIExpdHRsZSBoZWxwZXJzOiB3cml0ZS9yZWFkIGJ1ZmZlcnMgZnJlZSAqLwogc3RhdGljIHZvaWQgYWNtX3dyaXRlX2J1ZmZlcnNfZnJlZShzdHJ1Y3QgYWNtICphY20pCiB7CiAJaW50IGk7CkBAIC03NzcsNiArODUyLDE1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBhY21fcmVhZF9idWZmZXJzX2ZyZWUoc3RydWN0IGFjbSAqYWNtKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihhY20tPmNvbnRyb2wpOworCWludCBpLCBuID0gYWNtLT5yeF9idWZsaW1pdDsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBhY20tPnJlYWRzaXplLCBhY20tPnJiW2ldLmJhc2UsIGFjbS0+cmJbaV0uZG1hKTsKK30KKwogLyogTGl0dGxlIGhlbHBlcjogd3JpdGUgYnVmZmVycyBhbGxvY2F0ZSAqLwogc3RhdGljIGludCBhY21fd3JpdGVfYnVmZmVyc19hbGxvYyhzdHJ1Y3QgYWNtICphY20pCiB7CkBAIC05ODcsNiArMTA3MSw3IEBACiAJYWNtLT51cmJfdGFzay5mdW5jID0gYWNtX3J4X3Rhc2tsZXQ7CiAJYWNtLT51cmJfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjbTsKIAlJTklUX1dPUksoJmFjbS0+d29yaywgYWNtX3NvZnRpbnQpOworCUlOSVRfV09SSygmYWNtLT53YWtlciwgYWNtX3dha2VyKTsKIAlzcGluX2xvY2tfaW5pdCgmYWNtLT50aHJvdHRsZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWNtLT53cml0ZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWNtLT5yZWFkX2xvY2spOwpAQCAtMTA5OCw4ICsxMTgzLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQUNNX05XOyBpKyspCiAJCXVzYl9mcmVlX3VyYihhY20tPndiW2ldLnVyYik7CiBhbGxvY19mYWlsNzoKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3J4X2J1ZjsgaSsrKQotCQl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgYWNtLT5yZWFkc2l6ZSwgYWNtLT5yYltpXS5iYXNlLCBhY20tPnJiW2ldLmRtYSk7CisJYWNtX3JlYWRfYnVmZmVyc19mcmVlKGFjbSk7CiAJZm9yIChpID0gMDsgaSA8IG51bV9yeF9idWY7IGkrKykKIAkJdXNiX2ZyZWVfdXJiKGFjbS0+cnVbaV0udXJiKTsKIAl1c2JfZnJlZV91cmIoYWNtLT5jdHJsdXJiKTsKQEAgLTExMTYsNiArMTIwMCw3IEBACiBzdGF0aWMgdm9pZCBzdG9wX2RhdGFfdHJhZmZpYyhzdHJ1Y3QgYWNtICphY20pCiB7CiAJaW50IGk7CisJZGJnKCJFbnRlcmluZyBzdG9wX2RhdGFfdHJhZmZpYyIpOwogCiAJdGFza2xldF9kaXNhYmxlKCZhY20tPnVyYl90YXNrKTsKIApAQCAtMTEyOCwyMSArMTIxMywxNiBAQAogCXRhc2tsZXRfZW5hYmxlKCZhY20tPnVyYl90YXNrKTsKIAogCWNhbmNlbF93b3JrX3N5bmMoJmFjbS0+d29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWNtLT53YWtlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGFjbV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBhY20gKmFjbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCWludCBpOwotCi0JaWYgKCFhY20gfHwgIWFjbS0+ZGV2KSB7Ci0JCWRiZygiZGlzY29ubmVjdCBvbiBub25leGlzdGluZyBpbnRlcmZhY2UiKTsKLQkJcmV0dXJuOwotCX0KIAogCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOwotCWlmICghdXNiX2dldF9pbnRmZGF0YShpbnRmKSkgeworCWlmICghYWNtIHx8ICFhY20tPmRldikgewogCQltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtMTE2MSwxMCArMTI0MSwxMCBAQAogCiAJYWNtX3dyaXRlX2J1ZmZlcnNfZnJlZShhY20pOwogCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBhY20tPmN0cmxzaXplLCBhY20tPmN0cmxfYnVmZmVyLCBhY20tPmN0cmxfZG1hKTsKLQlmb3IgKGkgPSAwOyBpIDwgYWNtLT5yeF9idWZsaW1pdDsgaSsrKQotCQl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgYWNtLT5yZWFkc2l6ZSwgYWNtLT5yYltpXS5iYXNlLCBhY20tPnJiW2ldLmRtYSk7CisJYWNtX3JlYWRfYnVmZmVyc19mcmVlKGFjbSk7CiAKLQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZhY21fZHJpdmVyLCBpbnRmID09IGFjbS0+Y29udHJvbCA/IGFjbS0+ZGF0YSA6IGludGYpOworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmFjbV9kcml2ZXIsIGludGYgPT0gYWNtLT5jb250cm9sID8KKwkJCQkJYWNtLT5kYXRhIDogYWNtLT5jb250cm9sKTsKIAogCWlmICghYWNtLT51c2VkKSB7CiAJCWFjbV90dHlfdW5yZWdpc3RlcihhY20pOwpAQCAtMTE3OCwxMSArMTI1OCwzMSBAQAogCQl0dHlfaGFuZ3VwKGFjbS0+dHR5KTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBhY21fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJc3RydWN0IGFjbSAqYWNtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgY250OwogCi0JaWYgKGFjbS0+c3VzcF9jb3VudCsrKQorCWlmIChhY20tPmRldi0+YXV0b19wbSkgeworCQlpbnQgYjsKKworCQlzcGluX2xvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7CisJCXNwaW5fbG9jaygmYWNtLT53cml0ZV9sb2NrKTsKKwkJYiA9IGFjbS0+cHJvY2Vzc2luZyArIGFjbS0+dHJhbnNtaXR0aW5nOworCQlzcGluX3VubG9jaygmYWNtLT53cml0ZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7CisJCWlmIChiKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7CisJc3Bpbl9sb2NrKCZhY20tPndyaXRlX2xvY2spOworCWNudCA9IGFjbS0+c3VzcF9jb3VudCsrOworCXNwaW5fdW5sb2NrKCZhY20tPndyaXRlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmYWNtLT5yZWFkX2xvY2spOworCisJaWYgKGNudCkKIAkJcmV0dXJuIDA7CiAJLyoKIAl3ZSB0cmVhdCBvcGVuZWQgaW50ZXJmYWNlcyBkaWZmZXJlbnRseSwKQEAgLTEyMDEsMTUgKzEzMDEsMjEgQEAKIHsKIAlzdHJ1Y3QgYWNtICphY20gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCWludCBydiA9IDA7CisJaW50IGNudDsKIAotCWlmICgtLWFjbS0+c3VzcF9jb3VudCkKKwlzcGluX2xvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7CisJYWNtLT5zdXNwX2NvdW50IC09IDE7CisJY250ID0gYWNtLT5zdXNwX2NvdW50OworCXNwaW5fdW5sb2NrX2lycSgmYWNtLT5yZWFkX2xvY2spOworCisJaWYgKGNudCkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZhY20tPm11dGV4KTsKIAlpZiAoYWNtLT51c2VkKSB7CiAJCXJ2ID0gdXNiX3N1Ym1pdF91cmIoYWNtLT5jdHJsdXJiLCBHRlBfTk9JTyk7CiAJCWlmIChydiA8IDApCi0JCWdvdG8gZXJyX291dDsKKwkJCWdvdG8gZXJyX291dDsKIAogCQl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPnVyYl90YXNrKTsKIAl9CkBAIC0xMjE4LDYgKzEzMjQsOCBAQAogCW11dGV4X3VubG9jaygmYWNtLT5tdXRleCk7CiAJcmV0dXJuIHJ2OwogfQorCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAvKgogICogVVNCIGRyaXZlciBzdHJ1Y3R1cmUuCiAgKi8KQEAgLTEyNzMsMTAgKzEzODEsMTQgQEAKIAkubmFtZSA9CQkiY2RjX2FjbSIsCiAJLnByb2JlID0JYWNtX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JYWNtX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgPQlhY21fc3VzcGVuZCwKIAkucmVzdW1lID0JYWNtX3Jlc3VtZSwKKyNlbmRpZgogCS5pZF90YWJsZSA9CWFjbV9pZHMsCisjaWZkZWYgQ09ORklHX1BNCiAJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKKyNlbmRpZgogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaCBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaAppbmRleCAwNDZlMDY0Li44NWMzYWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCkBAIC0xMDcsMTAgKzEwNywxNCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZmlsbGVkX3JlYWRfYnVmczsKIAlpbnQgd3JpdGVfdXNlZDsJCQkJCS8qIG51bWJlciBvZiBub24tZW1wdHkgd3JpdGUgYnVmZmVycyAqLwogCWludCB3cml0ZV9yZWFkeTsJCQkJLyogd3JpdGUgdXJiIGlzIG5vdCBydW5uaW5nICovCisJaW50IG9sZF9yZWFkeTsKKwlpbnQgcHJvY2Vzc2luZzsKKwlpbnQgdHJhbnNtaXR0aW5nOwogCXNwaW5sb2NrX3Qgd3JpdGVfbG9jazsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgbGluZTsJCS8qIGJpdHMsIHN0b3AsIHBhcml0eSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwkJCS8qIHdvcmsgcXVldWUgZW50cnkgZm9yIGxpbmUgZGlzY2lwbGluZSB3YWtpbmcgdXAgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2FrZXI7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHVyYl90YXNrOyAgICAgICAgICAgICAgICAgLyogcnggcHJvY2Vzc2luZyAqLwogCXNwaW5sb2NrX3QgdGhyb3R0bGVfbG9jazsJCQkvKiBzeW5jaHJvbml6ZSB0aHJvdHRlbGluZyBhbmQgcmVhZCBjYWxsYmFjayAqLwogCXVuc2lnbmVkIGludCBjdHJsaW47CQkJCS8qIGlucHV0IGNvbnRyb2wgbGluZXMgKERDRCwgRFNSLCBSSSwgYnJlYWssIG92ZXJydW5zKSAqLwpAQCAtMTIzLDYgKzEyNyw3IEBACiAJdW5zaWduZWQgY2hhciBjbG9jYWw7CQkJCS8qIHRlcm1pb3MgQ0xPQ0FMICovCiAJdW5zaWduZWQgaW50IGN0cmxfY2FwczsJCQkJLyogY29udHJvbCBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgY2xhc3Mgc3BlY2lmaWMgaGVhZGVyICovCiAJdW5zaWduZWQgaW50IHN1c3BfY291bnQ7CQkJLyogbnVtYmVyIG9mIHN1c3BlbmRlZCBpbnRlcmZhY2VzICovCisJc3RydWN0IGFjbV93YiAqZGVsYXllZF93YjsJCQkvKiB3cml0ZSBxdWV1ZWQgZm9yIGEgZGV2aWNlIGFib3V0IHRvIGJlIHdva2VuICovCiB9OwogCiAjZGVmaW5lIENEQ19EQVRBX0lOVEVSRkFDRV9UWVBFCTB4MGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYwppbmRleCA3MzFkYjA1Li43ZThlMTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCkBAIC0yOCw4ICsyOCw5IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wMiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjAzIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJPbGl2ZXIgTmV1a3VtIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEFic3RyYWN0IENvbnRyb2wgTW9kZWwgZHJpdmVyIGZvciBVU0IgV0NNIERldmljZSBNYW5hZ2VtZW50IgogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2RtX2lkc1tdID0gewogCXsKQEAgLTg3LDYgKzg4LDcgQEAKIAlkbWFfYWRkcl90CQlpaGFuZGxlOwogCXN0cnVjdCBtdXRleAkJd2xvY2s7CiAJc3RydWN0IG11dGV4CQlybG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCXBsb2NrOwogCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CiAJc3RydWN0IHdvcmtfc3RydWN0CXJ4d29yazsKIAlpbnQJCQl3ZXJyOwpAQCAtMjA1LDcgKzIwNyw3IEBACiAJcmVxLT5iUmVxdWVzdCA9IFVTQl9DRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRTsKIAlyZXEtPndWYWx1ZSA9IDA7CiAJcmVxLT53SW5kZXggPSBkZXNjLT5pbnVtOwotCXJlcS0+d0xlbmd0aCA9IGNwdV90b19sZTE2KGRlc2MtPmJNYXhQYWNrZXRTaXplMCk7CisJcmVxLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoZGVzYy0+d01heENvbW1hbmQpOwogCiAJdXNiX2ZpbGxfY29udHJvbF91cmIoCiAJCWRlc2MtPnJlc3BvbnNlLApAQCAtMjE0LDcgKzIxNiw3IEBACiAJCXVzYl9yY3ZjdHJscGlwZShpbnRlcmZhY2VfdG9fdXNiZGV2KGRlc2MtPmludGYpLCAwKSwKIAkJKHVuc2lnbmVkIGNoYXIgKilyZXEsCiAJCWRlc2MtPmluYnVmLAotCQlkZXNjLT5iTWF4UGFja2V0U2l6ZTAsCisJCWRlc2MtPndNYXhDb21tYW5kLAogCQl3ZG1faW5fY2FsbGJhY2ssCiAJCWRlc2MKIAkpOwpAQCAtMjQ3LDYgKzI0OSw3IEBACiAKIHN0YXRpYyB2b2lkIGtpbGxfdXJicyhzdHJ1Y3Qgd2RtX2RldmljZSAqZGVzYykKIHsKKwkvKiB0aGUgb3JkZXIgaGVyZSBpcyBlc3NlbnRpYWwgKi8KIAl1c2Jfa2lsbF91cmIoZGVzYy0+Y29tbWFuZCk7CiAJdXNiX2tpbGxfdXJiKGRlc2MtPnZhbGlkaXR5KTsKIAl1c2Jfa2lsbF91cmIoZGVzYy0+cmVzcG9uc2UpOwpAQCAtMjY2LDcgKzI2OSw3IEBACiAJCQlkZXNjLT5zYnVmLAogCQkJZGVzYy0+dmFsaWRpdHktPnRyYW5zZmVyX2RtYSk7CiAJdXNiX2J1ZmZlcl9mcmVlKGludGVyZmFjZV90b191c2JkZXYoZGVzYy0+aW50ZiksCi0JCQlkZXNjLT53TWF4UGFja2V0U2l6ZSwKKwkJCWRlc2MtPndNYXhDb21tYW5kLAogCQkJZGVzYy0+aW5idWYsCiAJCQlkZXNjLT5yZXNwb25zZS0+dHJhbnNmZXJfZG1hKTsKIAlrZnJlZShkZXNjLT5vcnEpOwpAQCAtMjk5LDYgKzMwMiw5IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0bmw7CiAKKwlyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRlc2MtPmludGYpOworCWlmIChyIDwgMCkKKwkJZ290byBvdXRucDsKIAlyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRlc2MtPndhaXQsICF0ZXN0X2JpdChXRE1fSU5fVVNFLAogCQkJCQkJCSAgICZkZXNjLT5mbGFncykpOwogCWlmIChyIDwgMCkKQEAgLTM0NywxMSArMzUzLDE0IEBACiAJaWYgKHJ2IDwgMCkgewogCQlrZnJlZShidWYpOwogCQljbGVhcl9iaXQoV0RNX0lOX1VTRSwgJmRlc2MtPmZsYWdzKTsKKwkJZXJyKCJUeCBVUkIgZXJyb3I6ICVkIiwgcnYpOwogCX0gZWxzZSB7CiAJCWRldl9kYmcoJmRlc2MtPmludGYtPmRldiwgIlR4IFVSQiBoYXMgYmVlbiBzdWJtaXR0ZWQgaW5kZXg9JWQiLAogCQkJcmVxLT53SW5kZXgpOwogCX0KIG91dDoKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGVzYy0+aW50Zik7CitvdXRucDoKIAltdXRleF91bmxvY2soJmRlc2MtPndsb2NrKTsKIG91dG5sOgogCXJldHVybiBydiA8IDAgPyBydiA6IGNvdW50OwpAQCAtMzc2LDYgKzM4NSwxMSBAQAogCQlydiA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXNjLT53YWl0LAogCQkJCQkgICAgICB0ZXN0X2JpdChXRE1fUkVBRCwgJmRlc2MtPmZsYWdzKSk7CiAKKwkJaWYgKHRlc3RfYml0KFdETV9ESVNDT05ORUNUSU5HLCAmZGVzYy0+ZmxhZ3MpKSB7CisJCQlydiA9IC1FTk9ERVY7CisJCQlnb3RvIGVycjsKKwkJfQorCQl1c2JfbWFya19sYXN0X2J1c3koaW50ZXJmYWNlX3RvX3VzYmRldihkZXNjLT5pbnRmKSk7CiAJCWlmIChydiA8IDApIHsKIAkJCXJ2ID0gLUVSRVNUQVJUU1lTOwogCQkJZ290byBlcnI7CkBAIC00MTgsNiArNDMyLDkgQEAKIAkJZGVzYy0+dWJ1ZltpXSA9IGRlc2MtPnVidWZbaSArIGNudHJdOwogCiAJZGVzYy0+bGVuZ3RoIC09IGNudHI7CisJLyogaW4gY2FzZSB3ZSBoYWQgb3V0c3RhbmRpbmcgZGF0YSAqLworCWlmICghZGVzYy0+bGVuZ3RoKQorCQljbGVhcl9iaXQoV0RNX1JFQUQsICZkZXNjLT5mbGFncyk7CiAJcnYgPSBjbnRyOwogCiBlcnI6CkBAIC00ODAsMTggKzQ5NywyOCBAQAogCWlmICh0ZXN0X2JpdChXRE1fRElTQ09OTkVDVElORywgJmRlc2MtPmZsYWdzKSkKIAkJZ290byBvdXQ7CiAKLQlkZXNjLT5jb3VudCsrOworCTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXNjOwogCi0JcnYgPSB1c2Jfc3VibWl0X3VyYihkZXNjLT52YWxpZGl0eSwgR0ZQX0tFUk5FTCk7Ci0KKwlydiA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkZXNjLT5pbnRmKTsKIAlpZiAocnYgPCAwKSB7Ci0JCWRlc2MtPmNvdW50LS07Ci0JCWVycigiRXJyb3Igc3VibWl0dGluZyBpbnQgdXJiIC0gJWQiLCBydik7CisJCWVycigiRXJyb3IgYXV0b3BtIC0gJWQiLCBydik7CiAJCWdvdG8gb3V0OwogCX0KLQlydiA9IDA7CisJaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CiAKKwltdXRleF9sb2NrKCZkZXNjLT5wbG9jayk7CisJaWYgKCFkZXNjLT5jb3VudCsrKSB7CisJCXJ2ID0gdXNiX3N1Ym1pdF91cmIoZGVzYy0+dmFsaWRpdHksIEdGUF9LRVJORUwpOworCQlpZiAocnYgPCAwKSB7CisJCQlkZXNjLT5jb3VudC0tOworCQkJZXJyKCJFcnJvciBzdWJtaXR0aW5nIGludCB1cmIgLSAlZCIsIHJ2KTsKKwkJfQorCX0gZWxzZSB7CisJCXJ2ID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXNjLT5wbG9jayk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRlc2MtPmludGYpOwogb3V0OgogCW11dGV4X3VubG9jaygmd2RtX211dGV4KTsKIAlyZXR1cm4gcnY7CkBAIC01MDIsMTAgKzUyOSwxNSBAQAogCXN0cnVjdCB3ZG1fZGV2aWNlICpkZXNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJbXV0ZXhfbG9jaygmd2RtX211dGV4KTsKKwltdXRleF9sb2NrKCZkZXNjLT5wbG9jayk7CiAJZGVzYy0+Y291bnQtLTsKKwltdXRleF91bmxvY2soJmRlc2MtPnBsb2NrKTsKKwogCWlmICghZGVzYy0+Y291bnQpIHsKIAkJZGV2X2RiZygmZGVzYy0+aW50Zi0+ZGV2LCAid2RtX3JlbGVhc2U6IGNsZWFudXAiKTsKIAkJa2lsbF91cmJzKGRlc2MpOworCQlpZiAoIXRlc3RfYml0KFdETV9ESVNDT05ORUNUSU5HLCAmZGVzYy0+ZmxhZ3MpKQorCQkJZGVzYy0+aW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAJfQogCW11dGV4X3VubG9jaygmd2RtX211dGV4KTsKIAlyZXR1cm4gMDsKQEAgLTU5Nyw2ICs2MjksNyBAQAogCQlnb3RvIG91dDsKIAltdXRleF9pbml0KCZkZXNjLT53bG9jayk7CiAJbXV0ZXhfaW5pdCgmZGVzYy0+cmxvY2spOworCW11dGV4X2luaXQoJmRlc2MtPnBsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGVzYy0+aXVzcGluKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXNjLT53YWl0KTsKIAlkZXNjLT53TWF4Q29tbWFuZCA9IG1heGNvbTsKQEAgLTY5OCw2ICs3MzEsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5pdXNwaW4sIGZsYWdzKTsKIAlzZXRfYml0KFdETV9ESVNDT05ORUNUSU5HLCAmZGVzYy0+ZmxhZ3MpOwogCXNldF9iaXQoV0RNX1JFQUQsICZkZXNjLT5mbGFncyk7CisJLyogdG8gdGVybWluYXRlIHBlbmRpbmcgZmx1c2hlcyAqLwogCWNsZWFyX2JpdChXRE1fSU5fVVNFLCAmZGVzYy0+ZmxhZ3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPml1c3BpbiwgZmxhZ3MpOwogCWNhbmNlbF93b3JrX3N5bmMoJmRlc2MtPnJ4d29yayk7CkBAIC03MDgsMTEgKzc0Miw4MSBAQAogCW11dGV4X3VubG9jaygmd2RtX211dGV4KTsKIH0KIAorc3RhdGljIGludCB3ZG1fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHdkbV9kZXZpY2UgKmRlc2MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBydiA9IDA7CisKKwlkZXZfZGJnKCZkZXNjLT5pbnRmLT5kZXYsICJ3ZG0lZF9zdXNwZW5kXG4iLCBpbnRmLT5taW5vcik7CisKKwltdXRleF9sb2NrKCZkZXNjLT5wbG9jayk7CisjaWZkZWYgQ09ORklHX1BNCisJaWYgKGludGVyZmFjZV90b191c2JkZXYoZGVzYy0+aW50ZiktPmF1dG9fcG0gJiYgdGVzdF9iaXQoV0RNX0lOX1VTRSwgJmRlc2MtPmZsYWdzKSkgeworCQlydiA9IC1FQlVTWTsKKwl9IGVsc2UgeworI2VuZGlmCisJCWNhbmNlbF93b3JrX3N5bmMoJmRlc2MtPnJ4d29yayk7CisJCWtpbGxfdXJicyhkZXNjKTsKKyNpZmRlZiBDT05GSUdfUE0KKwl9CisjZW5kaWYKKwltdXRleF91bmxvY2soJmRlc2MtPnBsb2NrKTsKKworCXJldHVybiBydjsKK30KKworc3RhdGljIGludCByZWNvdmVyX2Zyb21fdXJiX2xvc3Moc3RydWN0IHdkbV9kZXZpY2UgKmRlc2MpCit7CisJaW50IHJ2ID0gMDsKKworCWlmIChkZXNjLT5jb3VudCkgeworCQlydiA9IHVzYl9zdWJtaXRfdXJiKGRlc2MtPnZhbGlkaXR5LCBHRlBfTk9JTyk7CisJCWlmIChydiA8IDApCisJCQllcnIoIkVycm9yIHJlc3VtZSBzdWJtaXR0aW5nIGludCB1cmIgLSAlZCIsIHJ2KTsKKwl9CisJcmV0dXJuIHJ2OworfQorc3RhdGljIGludCB3ZG1fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB3ZG1fZGV2aWNlICpkZXNjID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgcnY7CisKKwlkZXZfZGJnKCZkZXNjLT5pbnRmLT5kZXYsICJ3ZG0lZF9yZXN1bWVcbiIsIGludGYtPm1pbm9yKTsKKwltdXRleF9sb2NrKCZkZXNjLT5wbG9jayk7CisJcnYgPSByZWNvdmVyX2Zyb21fdXJiX2xvc3MoZGVzYyk7CisJbXV0ZXhfdW5sb2NrKCZkZXNjLT5wbG9jayk7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHdkbV9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHdkbV9kZXZpY2UgKmRlc2MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJbXV0ZXhfbG9jaygmZGVzYy0+cGxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdkbV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB3ZG1fZGV2aWNlICpkZXNjID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgcnY7CisKKwlydiA9IHJlY292ZXJfZnJvbV91cmJfbG9zcyhkZXNjKTsKKwltdXRleF91bmxvY2soJmRlc2MtPnBsb2NrKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHdkbV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJImNkY193ZG0iLAogCS5wcm9iZSA9CXdkbV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXdkbV9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0Jd2RtX3N1c3BlbmQsCisJLnJlc3VtZSA9CXdkbV9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXdkbV9yZXN1bWUsCisJLnByZV9yZXNldCA9CXdkbV9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl3ZG1fcG9zdF9yZXNldCwKIAkuaWRfdGFibGUgPQl3ZG1faWRzLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEsCiB9OwogCiAvKiAtLS0gbG93IGxldmVsIG1vZHVsZSBzdHVmZiAtLS0gKi8KQEAgLTczNSw2ICs4MzksNSBAQAogbW9kdWxlX2V4aXQod2RtX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0IgQWJzdHJhY3QgQ29udHJvbCBNb2RlbCBkcml2ZXIgZm9yICIKLQkJICAgIlVTQiBXQ00gRGV2aWNlIE1hbmFnZW1lbnQiKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCmluZGV4IDgzZDlkYzMuLjZlYzM4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCkBAIC00Niw4ICs0Niw2IEBACiAgKiAyMDAwLTA3LTA1OiBBc2hsZXkgTW9udGFuYXJvIDxhc2hsZXlAY29tcHNvYy5tYW4uYWMudWs+CiAgKiAgIENvbnZlcnRlZCBmaWxlIHJlYWRpbmcgcm91dGluZSB0byBkdW1wIHRvIGJ1ZmZlciBvbmNlCiAgKiAgIHBlciBkZXZpY2UsIG5vdCBwZXIgYnVzCi0gKgotICogJElkOiBkZXZpY2VzLmMsdiAxLjUgMjAwMC8wMS8xMSAxMzo1ODoyMSB0b20gRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTYzLDggKzYxLDYgQEAKICNpbmNsdWRlICJ1c2IuaCIKICNpbmNsdWRlICJoY2QuaCIKIAotI2RlZmluZSBNQVhfVE9QT19MRVZFTAkJNgotCiAvKiBEZWZpbmUgQUxMT1dfU0VSSUFMX05VTUJFUiBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIHNlcmlhbCBudW1iZXIgb2YgZGV2aWNlcyAqLwogI2RlZmluZSBBTExPV19TRVJJQUxfTlVNQkVSCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCA5MjE4Y2NhLi4yMDI5MGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC0xOSw4ICsxOSw2IEBACiAgKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKLSAqICAkSWQ6IGRldmlvLmMsdiAxLjcgMjAwMC8wMi8wMSAxNzoyODo0OCBmbGllZ2wgRXhwICQKLSAqCiAgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHVzYmZzL3gveSBmaWxlcywgd2hlcmUKICAqICB4IGlzIHRoZSBidXMgbnVtYmVyIGFuZCB5IHRoZSBkZXZpY2UgbnVtYmVyLgogICoKQEAgLTYxLDYgKzU5LDIyIEBACiAvKiBNdXR1YWwgZXhjbHVzaW9uIGZvciByZW1vdmFsLCBvcGVuLCBhbmQgcmVsZWFzZSAqLwogREVGSU5FX01VVEVYKHVzYmZzX211dGV4KTsKIAorc3RydWN0IGRldl9zdGF0ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAgICAgIC8qIHN0YXRlIGxpc3QgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCBmaWxlICpmaWxlOworCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAvKiBwcm90ZWN0cyB0aGUgYXN5bmMgdXJiIGxpc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBhc3luY19wZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgYXN5bmNfY29tcGxldGVkOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7ICAgICAvKiB3YWtlIHVwIGlmIGEgcmVxdWVzdCBjb21wbGV0ZWQgKi8KKwl1bnNpZ25lZCBpbnQgZGlzY3NpZ25yOworCXN0cnVjdCBwaWQgKmRpc2NfcGlkOworCXVpZF90IGRpc2NfdWlkLCBkaXNjX2V1aWQ7CisJdm9pZCBfX3VzZXIgKmRpc2Njb250ZXh0OworCXVuc2lnbmVkIGxvbmcgaWZjbGFpbWVkOworCXUzMiBzZWNpZDsKK307CisKIHN0cnVjdCBhc3luYyB7CiAJc3RydWN0IGxpc3RfaGVhZCBhc3luY2xpc3Q7CiAJc3RydWN0IGRldl9zdGF0ZSAqcHM7CkBAIC01MzYsMjMgKzU1MCwxOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19tYXRjaF9taW5vcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1hdGNoX2RldnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCWludCBtaW5vciA9ICooKGludCAqKWRhdGEpOwotCi0JaWYgKGRldi0+ZGV2dCA9PSBNS0RFVihVU0JfREVWSUNFX01BSk9SLCBtaW5vcikpCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCXJldHVybiBkZXYtPmRldnQgPT0gKGRldl90KSAodW5zaWduZWQgbG9uZykgZGF0YTsKIH0KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXZfbG9va3VwX2J5X21pbm9yKGludCBtaW5vcikKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2X2xvb2t1cF9ieV9kZXZ0KGRldl90IGRldnQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0JZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZ1c2JfYnVzX3R5cGUsIE5VTEwsICZtaW5vciwgX19tYXRjaF9taW5vcik7CisJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZ1c2JfYnVzX3R5cGUsIE5VTEwsCisJCQkgICAgICAodm9pZCAqKSAodW5zaWduZWQgbG9uZykgZGV2dCwgbWF0Y2hfZGV2dCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwotCXB1dF9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVzYl9kZXZpY2UsIGRldik7CiB9CiAKQEAgLTU3NSwyMSArNTg1LDI3IEBACiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gLUVOT0VOVDsKKwogCS8qIHVzYmRldiBkZXZpY2Utbm9kZSAqLwogCWlmIChpbWFqb3IoaW5vZGUpID09IFVTQl9ERVZJQ0VfTUFKT1IpCi0JCWRldiA9IHVzYmRldl9sb29rdXBfYnlfbWlub3IoaW1pbm9yKGlub2RlKSk7CisJCWRldiA9IHVzYmRldl9sb29rdXBfYnlfZGV2dChpbm9kZS0+aV9yZGV2KTsKICNpZmRlZiBDT05GSUdfVVNCX0RFVklDRUZTCiAJLyogcHJvY2ZzIGZpbGUgKi8KLQlpZiAoIWRldikKKwlpZiAoIWRldikgewogCQlkZXYgPSBpbm9kZS0+aV9wcml2YXRlOworCQlpZiAoZGV2ICYmIGRldi0+dXNiZnNfZGVudHJ5ICYmCisJCQkJCWRldi0+dXNiZnNfZGVudHJ5LT5kX2lub2RlID09IGlub2RlKQorCQkJdXNiX2dldF9kZXYoZGV2KTsKKwkJZWxzZQorCQkJZGV2ID0gTlVMTDsKKwl9CiAjZW5kaWYKLQlpZiAoIWRldikKKwlpZiAoIWRldiB8fCBkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKIAkJZ290byBvdXQ7CiAJcmV0ID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKGRldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQl1c2JfZ2V0X2RldihkZXYpOwogCXJldCA9IDA7CiAJcHMtPmRldiA9IGRldjsKIAlwcy0+ZmlsZSA9IGZpbGU7CkBAIC02MDksOCArNjI1LDEwIEBACiAJbGlzdF9hZGRfdGFpbCgmcHMtPmxpc3QsICZkZXYtPmZpbGVsaXN0KTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwczsKICBvdXQ6Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CiAJCWtmcmVlKHBzKTsKKwkJdXNiX3B1dF9kZXYoZGV2KTsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZ1c2Jmc19tdXRleCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CkBAIC04NzQsNyArODkyLDcgQEAKIAogc3RhdGljIGludCBwcm9jX3Jlc2V0ZGV2aWNlKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQogewotCXJldHVybiB1c2JfcmVzZXRfY29tcG9zaXRlX2RldmljZShwcy0+ZGV2LCBOVUxMKTsKKwlyZXR1cm4gdXNiX3Jlc2V0X2RldmljZShwcy0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBwcm9jX3NldGludGYoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCkBAIC0xNjgyLDI1ICsxNzAwLDQ5IEBACiAJLnJlbGVhc2UgPQl1c2JkZXZfcmVsZWFzZSwKIH07CiAKK3ZvaWQgdXNiX2ZzX2NsYXNzZGV2X2NvbW1vbl9yZW1vdmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGRldl9zdGF0ZSAqcHM7CisJc3RydWN0IHNpZ2luZm8gc2luZm87CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnVkZXYtPmZpbGVsaXN0KSkgeworCQlwcyA9IGxpc3RfZW50cnkodWRldi0+ZmlsZWxpc3QubmV4dCwgc3RydWN0IGRldl9zdGF0ZSwgbGlzdCk7CisJCWRlc3Ryb3lfYWxsX2FzeW5jKHBzKTsKKwkJd2FrZV91cF9hbGwoJnBzLT53YWl0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcHMtPmxpc3QpOworCQlpZiAocHMtPmRpc2NzaWducikgeworCQkJc2luZm8uc2lfc2lnbm8gPSBwcy0+ZGlzY3NpZ25yOworCQkJc2luZm8uc2lfZXJybm8gPSBFUElQRTsKKwkJCXNpbmZvLnNpX2NvZGUgPSBTSV9BU1lOQ0lPOworCQkJc2luZm8uc2lfYWRkciA9IHBzLT5kaXNjY29udGV4dDsKKwkJCWtpbGxfcGlkX2luZm9fYXNfdWlkKHBzLT5kaXNjc2lnbnIsICZzaW5mbywKKwkJCQkJcHMtPmRpc2NfcGlkLCBwcy0+ZGlzY191aWQsCisJCQkJCXBzLT5kaXNjX2V1aWQsIHBzLT5zZWNpZCk7CisJCX0KKwl9Cit9CisKICNpZmRlZiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUwogc3RhdGljIHN0cnVjdCBjbGFzcyAqdXNiX2NsYXNzZGV2X2NsYXNzOwogCiBzdGF0aWMgaW50IHVzYl9jbGFzc2Rldl9hZGQoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKIHsKLQlpbnQgbWlub3IgPSAoKGRldi0+YnVzLT5idXNudW0tMSkgKiAxMjgpICsgKGRldi0+ZGV2bnVtLTEpOworCXN0cnVjdCBkZXZpY2UgKmNsZGV2OwogCi0JZGV2LT51c2JfY2xhc3NkZXYgPSBkZXZpY2VfY3JlYXRlKHVzYl9jbGFzc2Rldl9jbGFzcywgJmRldi0+ZGV2LAotCQkJCU1LREVWKFVTQl9ERVZJQ0VfTUFKT1IsIG1pbm9yKSwKLQkJCQkidXNiZGV2JWQuJWQiLCBkZXYtPmJ1cy0+YnVzbnVtLCBkZXYtPmRldm51bSk7Ci0JaWYgKElTX0VSUihkZXYtPnVzYl9jbGFzc2RldikpCi0JCXJldHVybiBQVFJfRVJSKGRldi0+dXNiX2NsYXNzZGV2KTsKLQorCWNsZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHVzYl9jbGFzc2Rldl9jbGFzcywgJmRldi0+ZGV2LAorCQkJCSAgICAgIGRldi0+ZGV2LmRldnQsIE5VTEwsICJ1c2JkZXYlZC4lZCIsCisJCQkJICAgICAgZGV2LT5idXMtPmJ1c251bSwgZGV2LT5kZXZudW0pOworCWlmIChJU19FUlIoY2xkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihjbGRldik7CisJZGV2LT51c2JfY2xhc3NkZXYgPSBjbGRldjsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdXNiX2NsYXNzZGV2X3JlbW92ZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQogewotCWRldmljZV91bnJlZ2lzdGVyKGRldi0+dXNiX2NsYXNzZGV2KTsKKwlpZiAoZGV2LT51c2JfY2xhc3NkZXYpCisJCWRldmljZV91bnJlZ2lzdGVyKGRldi0+dXNiX2NsYXNzZGV2KTsKKwl1c2JfZnNfY2xhc3NkZXZfY29tbW9uX3JlbW92ZShkZXYpOwogfQogCiBzdGF0aWMgaW50IHVzYl9jbGFzc2Rldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLApAQCAtMTc1MCw2ICsxNzkyLDExIEBACiAJCXVzYl9jbGFzc2Rldl9jbGFzcyA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KKwkvKiBkZXZpY2VzIG9mIHRoaXMgY2xhc3Mgc2hhZG93IHRoZSBtYWpvcjptaW5vciBvZiB0aGVpciBwYXJlbnQKKwkgKiBkZXZpY2UsIHNvIGNsZWFyIC0+ZGV2X2tvYmogdG8gcHJldmVudCBhZGRpbmcgZHVwbGljYXRlIGVudHJpZXMKKwkgKiB0byAvc3lzL2RldgorCSAqLworCXVzYl9jbGFzc2Rldl9jbGFzcy0+ZGV2X2tvYmogPSBOVUxMOwogCiAJdXNiX3JlZ2lzdGVyX25vdGlmeSgmdXNiZGV2X25iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKaW5kZXggMWU1NmYxYy4uZGRiNTRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCkBAIC0yMDEsNiArMjAxLDcgQEAKIAogCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CiAJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJaW50Zi0+bmVlZHNfYmluZGluZyA9IDA7CiAKIAlpZiAodWRldi0+YXV0aG9yaXplZCA9PSAwKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkRldmljZSBpcyBub3QgYXV0aG9yaXplZCBmb3IgdXNhZ2VcbiIpOwpAQCAtMjU3LDE1ICsyNTgsMTYgQEAKIAl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAllcnJvciA9IHVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2KTsKIAotCS8qIHJlbGVhc2UgYWxsIHVyYnMgZm9yIHRoaXMgaW50ZXJmYWNlICovCi0JdXNiX2Rpc2FibGVfaW50ZXJmYWNlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIGludGYpOworCS8qIFRlcm1pbmF0ZSBhbGwgVVJCcyBmb3IgdGhpcyBpbnRlcmZhY2UgdW5sZXNzIHRoZSBkcml2ZXIKKwkgKiBzdXBwb3J0cyAic29mdCIgdW5iaW5kaW5nLgorCSAqLworCWlmICghZHJpdmVyLT5zb2Z0X3VuYmluZCkKKwkJdXNiX2Rpc2FibGVfaW50ZXJmYWNlKHVkZXYsIGludGYpOwogCiAJZHJpdmVyLT5kaXNjb25uZWN0KGludGYpOwogCiAJLyogcmVzZXQgb3RoZXIgaW50ZXJmYWNlIHN0YXRlICovCi0JdXNiX3NldF9pbnRlcmZhY2UoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKLQkJCWludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAotCQkJMCk7CisJdXNiX3NldF9pbnRlcmZhY2UodWRldiwgaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDApOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAKIAlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7CkBAIC0zMTAsNiArMzEyLDcgQEAKIAogCWRldi0+ZHJpdmVyID0gJmRyaXZlci0+ZHJ2d3JhcC5kcml2ZXI7CiAJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgcHJpdik7CisJaWZhY2UtPm5lZWRzX2JpbmRpbmcgPSAwOwogCiAJdXNiX3BtX2xvY2sodWRldik7CiAJaWZhY2UtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CkBAIC01ODYsNyArNTg5LDcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKIAogCS8qIGRyaXZlciBpcyBvZnRlbiBudWxsIGhlcmU7IGRldl9kYmcoKSB3b3VsZCBvb3BzICovCi0JcHJfZGVidWcoInVzYiAlczogdWV2ZW50XG4iLCBkZXYtPmJ1c19pZCk7CisJcHJfZGVidWcoInVzYiAlczogdWV2ZW50XG4iLCBkZXZfbmFtZShkZXYpKTsKIAogCWlmIChpc191c2JfZGV2aWNlKGRldikpCiAJCXVzYl9kZXYgPSB0b191c2JfZGV2aWNlKGRldik7CkBAIC01OTYsMTEgKzU5OSwxMSBAQAogCX0KIAogCWlmICh1c2JfZGV2LT5kZXZudW0gPCAwKSB7Ci0JCXByX2RlYnVnKCJ1c2IgJXM6IGFscmVhZHkgZGVsZXRlZD9cbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJfZGVidWcoInVzYiAlczogYWxyZWFkeSBkZWxldGVkP1xuIiwgZGV2X25hbWUoZGV2KSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoIXVzYl9kZXYtPmJ1cykgewotCQlwcl9kZWJ1ZygidXNiICVzOiBidXMgcmVtb3ZlZD9cbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJfZGVidWcoInVzYiAlczogYnVzIHJlbW92ZWQ/XG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03NzEsNiArNzc0LDEwNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2RlcmVnaXN0ZXIpOwogCisKKy8qIEZvcmNlZCB1bmJpbmRpbmcgb2YgYSBVU0IgaW50ZXJmYWNlIGRyaXZlciwgZWl0aGVyIGJlY2F1c2UKKyAqIGl0IGRvZXNuJ3Qgc3VwcG9ydCBwcmVfcmVzZXQvcG9zdF9yZXNldC9yZXNldF9yZXN1bWUgb3IKKyAqIGJlY2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIEBpbnRmJ3MgZGV2aWNlJ3MgbG9jaywgYnV0IG5vdCBpdHMgcG1fbXV0ZXgKKyAqIGFuZCBub3QgQGludGYtPmRldi5zZW0uCisgKi8KK3ZvaWQgdXNiX2ZvcmNlZF91bmJpbmRfaW50ZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKKworCWRldl9kYmcoJmludGYtPmRldiwgImZvcmNlZCB1bmJpbmRcbiIpOworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoZHJpdmVyLCBpbnRmKTsKKworCS8qIE1hcmsgdGhlIGludGVyZmFjZSBmb3IgbGF0ZXIgcmViaW5kaW5nICovCisJaW50Zi0+bmVlZHNfYmluZGluZyA9IDE7Cit9CisKKy8qIERlbGF5ZWQgZm9yY2VkIHVuYmluZGluZyBvZiBhIFVTQiBpbnRlcmZhY2UgZHJpdmVyIGFuZCBzY2FuCisgKiBmb3IgcmViaW5kaW5nLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIEBpbnRmJ3MgZGV2aWNlJ3MgbG9jaywgYnV0IG5vdCBpdHMgcG1fbXV0ZXgKKyAqIGFuZCBub3QgQGludGYtPmRldi5zZW0uCisgKgorICogRklYTUU6IFRoZSBjYWxsZXIgbXVzdCBibG9jayBzeXN0ZW0gc2xlZXAgdHJhbnNpdGlvbnMuCisgKi8KK3ZvaWQgdXNiX3JlYmluZF9pbnRmKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludCByYzsKKworCS8qIERlbGF5ZWQgdW5iaW5kIG9mIGFuIGV4aXN0aW5nIGRyaXZlciAqLworCWlmIChpbnRmLT5kZXYuZHJpdmVyKSB7CisJCXN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXIgPQorCQkJCXRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CisKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiZm9yY2VkIHVuYmluZFxuIik7CisJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoZHJpdmVyLCBpbnRmKTsKKwl9CisKKwkvKiBUcnkgdG8gcmViaW5kIHRoZSBpbnRlcmZhY2UgKi8KKwlpbnRmLT5uZWVkc19iaW5kaW5nID0gMDsKKwlyYyA9IGRldmljZV9hdHRhY2goJmludGYtPmRldik7CisJaWYgKHJjIDwgMCkKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgInJlYmluZCBmYWlsZWQ6ICVkXG4iLCByYyk7Cit9CisKKyNkZWZpbmUgRE9fVU5CSU5ECTAKKyNkZWZpbmUgRE9fUkVCSU5ECTEKKworLyogVW5iaW5kIGRyaXZlcnMgZm9yIEB1ZGV2J3MgaW50ZXJmYWNlcyB0aGF0IGRvbid0IHN1cHBvcnQgc3VzcGVuZC9yZXN1bWUsCisgKiBvciByZWJpbmQgaW50ZXJmYWNlcyB0aGF0IGhhdmUgYmVlbiB1bmJvdW5kLCBhY2NvcmRpbmcgdG8gQGFjdGlvbi4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBAdWRldidzIGRldmljZSBsb2NrLgorICogRklYTUU6IEZvciByZWJpbmRzLCB0aGUgY2FsbGVyIG11c3QgYmxvY2sgc3lzdGVtIHNsZWVwIHRyYW5zaXRpb25zLgorICovCitzdGF0aWMgdm9pZCBkb191bmJpbmRfcmViaW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgYWN0aW9uKQoreworCXN0cnVjdCB1c2JfaG9zdF9jb25maWcJKmNvbmZpZzsKKwlpbnQJCQlpOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRmOworCXN0cnVjdCB1c2JfZHJpdmVyCSpkcnY7CisKKwljb25maWcgPSB1ZGV2LT5hY3Rjb25maWc7CisJaWYgKGNvbmZpZykgeworCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyArK2kpIHsKKwkJCWludGYgPSBjb25maWctPmludGVyZmFjZVtpXTsKKwkJCXN3aXRjaCAoYWN0aW9uKSB7CisJCQljYXNlIERPX1VOQklORDoKKwkJCQlpZiAoaW50Zi0+ZGV2LmRyaXZlcikgeworCQkJCQlkcnYgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOworCQkJCQlpZiAoIWRydi0+c3VzcGVuZCB8fCAhZHJ2LT5yZXN1bWUpCisJCQkJCQl1c2JfZm9yY2VkX3VuYmluZF9pbnRmKGludGYpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgRE9fUkVCSU5EOgorCQkJCWlmIChpbnRmLT5uZWVkc19iaW5kaW5nKSB7CisKKwkvKiBGSVhNRTogVGhlIG5leHQgbGluZSBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gcHJvYmUKKwkgKiB0aGUgaW50ZXJmYWNlLCBidXQgYXMgZmFyIGFzIHRoZSBQTSBjb3JlIGlzIGNvbmNlcm5lZCB0aGUKKwkgKiBpbnRlcmZhY2UgaXMgc3RpbGwgc3VzcGVuZGVkLiAgVGhlIHByb2JsZW0gd291bGRuJ3QgZXhpc3QKKwkgKiBpZiB3ZSBjb3VsZCByZWJpbmQgdGhlIGludGVyZmFjZSBkdXJpbmcgdGhlIGludGVyZmFjZSdzIG93bgorCSAqIHJlc3VtZSgpIGNhbGwsIGJ1dCBhdCB0aGUgdGltZSB0aGUgdXNiX2RldmljZSBpc24ndCBsb2NrZWQhCisJICoKKwkgKiBUaGUgcmVhbCBzb2x1dGlvbiB3aWxsIGJlIHRvIGNhcnJ5IHRoaXMgb3V0IGR1cmluZyB0aGUgZGV2aWNlJ3MKKwkgKiBjb21wbGV0ZSgpIGNhbGxiYWNrLiAgVW50aWwgdGhhdCBpcyBpbXBsZW1lbnRlZCwgd2UgaGF2ZSB0bworCSAqIHVzZSB0aGlzIGhhY2suCisJICovCisvLwkJCQkJaW50Zi0+ZGV2LnBvd2VyLnNsZWVwaW5nID0gMDsKKworCQkJCQl1c2JfcmViaW5kX2ludGYoaW50Zik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCiAjaWZkZWYgQ09ORklHX1BNCiAKIC8qIENhbGxlciBoYXMgbG9ja2VkIHVkZXYncyBwbV9tdXRleCAqLwpAQCAtODA1LDggKzkwNiw2IEBACiAKIAlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQogCQlnb3RvIGRvbmU7Ci0JaWYgKHVkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9TVVNQRU5ERUQgJiYgIXVkZXYtPnJlc2V0X3Jlc3VtZSkKLQkJZ290byBkb25lOwogCiAJLyogQ2FuJ3QgcmVzdW1lIGl0IGlmIGl0IGRvZXNuJ3QgaGF2ZSBhIGRyaXZlci4gKi8KIAlpZiAodWRldi0+ZGV2LmRyaXZlciA9PSBOVUxMKSB7CkBAIC04NDIsNyArOTQxLDcgQEAKIAkJZ290byBkb25lOwogCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CiAKLQlpZiAoZHJpdmVyLT5zdXNwZW5kICYmIGRyaXZlci0+cmVzdW1lKSB7CisJaWYgKGRyaXZlci0+c3VzcGVuZCkgewogCQlzdGF0dXMgPSBkcml2ZXItPnN1c3BlbmQoaW50ZiwgbXNnKTsKIAkJaWYgKHN0YXR1cyA9PSAwKQogCQkJbWFya19xdWllc2NlZChpbnRmKTsKQEAgLTg1MCwxMiArOTQ5LDEwIEBACiAJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlcyBlcnJvciAlZFxuIiwKIAkJCQkJInN1c3BlbmQiLCBzdGF0dXMpOwogCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEZJWE1FIGVsc2UgaWYgdGhlcmUncyBubyBzdXNwZW5kIG1ldGhvZCwgZGlzY29ubmVjdC4uLgotCQkgKiBOb3QgcG9zc2libGUgaWYgYXV0b19wbSBpcyBzZXQuLi4KLQkJICovCi0JCWRldl93YXJuKCZpbnRmLT5kZXYsICJubyBzdXNwZW5kIGZvciBkcml2ZXIgJXM/XG4iLAotCQkJCWRyaXZlci0+bmFtZSk7CisJCS8qIExhdGVyIHdlIHdpbGwgdW5iaW5kIHRoZSBkcml2ZXIgYW5kIHJlcHJvYmUgKi8KKwkJaW50Zi0+bmVlZHNfYmluZGluZyA9IDE7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJubyAlcyBmb3IgZHJpdmVyICVzP1xuIiwKKwkJCQkic3VzcGVuZCIsIGRyaXZlci0+bmFtZSk7CiAJCW1hcmtfcXVpZXNjZWQoaW50Zik7CiAJfQogCkBAIC04NzksMTAgKzk3NiwxMiBAQAogCQlnb3RvIGRvbmU7CiAKIAkvKiBDYW4ndCByZXN1bWUgaXQgaWYgaXQgZG9lc24ndCBoYXZlIGEgZHJpdmVyLiAqLwotCWlmIChpbnRmLT5jb25kaXRpb24gPT0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EKSB7Ci0JCXN0YXR1cyA9IC1FTk9UQ09OTjsKKwlpZiAoaW50Zi0+Y29uZGl0aW9uID09IFVTQl9JTlRFUkZBQ0VfVU5CT1VORCkKIAkJZ290byBkb25lOwotCX0KKworCS8qIERvbid0IHJlc3VtZSBpZiB0aGUgaW50ZXJmYWNlIGlzIG1hcmtlZCBmb3IgcmViaW5kaW5nICovCisJaWYgKGludGYtPm5lZWRzX2JpbmRpbmcpCisJCWdvdG8gZG9uZTsKIAlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOwogCiAJaWYgKHJlc2V0X3Jlc3VtZSkgewpAQCAtODkyLDcgKzk5MSw3IEBACiAJCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXMgZXJyb3IgJWRcbiIsCiAJCQkJCQkicmVzZXRfcmVzdW1lIiwgc3RhdHVzKTsKIAkJfSBlbHNlIHsKLQkJCS8qIHN0YXR1cyA9IC1FT1BOT1RTVVBQOyAqLworCQkJaW50Zi0+bmVlZHNfYmluZGluZyA9IDE7CiAJCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAibm8gJXMgZm9yIGRyaXZlciAlcz9cbiIsCiAJCQkJCSJyZXNldF9yZXN1bWUiLCBkcml2ZXItPm5hbWUpOwogCQl9CkBAIC05MDMsNyArMTAwMiw3IEBACiAJCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXMgZXJyb3IgJWRcbiIsCiAJCQkJCQkicmVzdW1lIiwgc3RhdHVzKTsKIAkJfSBlbHNlIHsKLQkJCS8qIHN0YXR1cyA9IC1FT1BOT1RTVVBQOyAqLworCQkJaW50Zi0+bmVlZHNfYmluZGluZyA9IDE7CiAJCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAibm8gJXMgZm9yIGRyaXZlciAlcz9cbiIsCiAJCQkJCSJyZXN1bWUiLCBkcml2ZXItPm5hbWUpOwogCQl9CkBAIC05MTEsMTEgKzEwMTAsMTAgQEAKIAogZG9uZToKIAlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0JaWYgKHN0YXR1cyA9PSAwKQorCWlmIChzdGF0dXMgPT0gMCAmJiBpbnRmLT5jb25kaXRpb24gPT0gVVNCX0lOVEVSRkFDRV9CT1VORCkKIAkJbWFya19hY3RpdmUoaW50Zik7CiAKLQkvKiBGSVhNRTogVW5iaW5kIHRoZSBkcml2ZXIgYW5kIHJlcHJvYmUgaWYgdGhlIHJlc3VtZSBmYWlsZWQKLQkgKiAobm90IHBvc3NpYmxlIGlmIGF1dG9fcG0gaXMgc2V0KSAqLworCS8qIExhdGVyIHdlIHdpbGwgdW5iaW5kIHRoZSBkcml2ZXIgYW5kL29yIHJlcHJvYmUsIGlmIG5lY2Vzc2FyeSAqLwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTExNzMsMTEgKzEyNzEsOCBAQAogCQkJICogdGhlbiB3ZSdyZSBzdHVjay4gKi8KIAkJCXN0YXR1cyA9IHVzYl9yZXN1bWVfZGV2aWNlKHVkZXYpOwogCQl9Ci0JfSBlbHNlIHsKLQotCQkvKiBOZWVkZWQgZm9yIHJlc2V0LXJlc3VtZSAqLworCX0gZWxzZSBpZiAodWRldi0+cmVzZXRfcmVzdW1lKQogCQlzdGF0dXMgPSB1c2JfcmVzdW1lX2RldmljZSh1ZGV2KTsKLQl9CiAKIAlpZiAoc3RhdHVzID09IDAgJiYgdWRldi0+YWN0Y29uZmlnKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewpAQCAtMTQ3NCw2ICsxNTY5LDcgQEAKIHsKIAlpbnQJc3RhdHVzOwogCisJZG9fdW5iaW5kX3JlYmluZCh1ZGV2LCBET19VTkJJTkQpOwogCXVzYl9wbV9sb2NrKHVkZXYpOwogCXVkZXYtPmF1dG9fcG0gPSAwOwogCXN0YXR1cyA9IHVzYl9zdXNwZW5kX2JvdGgodWRldiwgbXNnKTsKQEAgLTE1MDEsNiArMTU5Nyw3IEBACiAJc3RhdHVzID0gdXNiX3Jlc3VtZV9ib3RoKHVkZXYpOwogCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7CiAJdXNiX3BtX3VubG9jayh1ZGV2KTsKKwlkb191bmJpbmRfcmViaW5kKHVkZXYsIERPX1JFQklORCk7CiAKIAkvKiBOb3cgdGhhdCB0aGUgZGV2aWNlIGlzIGF3YWtlLCB3ZSBjYW4gc3RhcnQgdHJ5aW5nIHRvIGF1dG9zdXNwZW5kCiAJICogaXQgYWdhaW4uICovCkBAIC0xNTQyLDE0ICsxNjM5LDExIEBACiAJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIAogCS8qIElmIHVkZXYtPnNraXBfc3lzX3Jlc3VtZSBpcyBzZXQgdGhlbiB1ZGV2IHdhcyBhbHJlYWR5IHN1c3BlbmRlZAotCSAqIHdoZW4gdGhlIHN5c3RlbSBzdXNwZW5kIHN0YXJ0ZWQsIHNvIHdlIGRvbid0IHdhbnQgdG8gcmVzdW1lCi0JICogdWRldiBkdXJpbmcgdGhpcyBzeXN0ZW0gd2FrZXVwLiAgSG93ZXZlciBhIHJlc2V0LXJlc3VtZSBjb3VudHMKLQkgKiBhcyBhIHdha2V1cCBldmVudCwgc28gYWxsb3cgYSByZXNldC1yZXN1bWUgdG8gb2NjdXIgaWYgcmVtb3RlCi0JICogd2FrZXVwIGlzIGVuYWJsZWQuICovCi0JaWYgKHVkZXYtPnNraXBfc3lzX3Jlc3VtZSkgewotCQlpZiAoISh1ZGV2LT5yZXNldF9yZXN1bWUgJiYgdWRldi0+ZG9fcmVtb3RlX3dha2V1cCkpCi0JCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKLQl9CisJICogd2hlbiB0aGUgc3lzdGVtIHNsZWVwIHN0YXJ0ZWQsIHNvIHdlIGRvbid0IHdhbnQgdG8gcmVzdW1lIGl0CisJICogZHVyaW5nIHRoaXMgc3lzdGVtIHdha2V1cC4KKwkgKi8KKwlpZiAodWRldi0+c2tpcF9zeXNfcmVzdW1lKQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gdXNiX2V4dGVybmFsX3Jlc3VtZV9kZXZpY2UodWRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwppbmRleCBmYWU1NWEzLi4yMjkxMjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCkBAIC0yOTYsNyArMjk2LDcgQEAKIAlyZXR2YWwgPSBlbmRwb2ludF9nZXRfbWlub3IoZXBfZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIocGFyZW50LCAiY2FuIG5vdCBhbGxvY2F0ZSBtaW5vciBudW1iZXIgZm9yICVzXG4iLAotCQkJZXBfZGV2LT5kZXYuYnVzX2lkKTsKKwkJCWRldl9uYW1lKCZlcF9kZXYtPmRldikpOwogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCX0KIApAQCAtMzA3LDcgKzMwNyw3IEBACiAJZXBfZGV2LT5kZXYuY2xhc3MgPSBlcF9jbGFzcy0+Y2xhc3M7CiAJZXBfZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCWVwX2Rldi0+ZGV2LnJlbGVhc2UgPSBlcF9kZXZpY2VfcmVsZWFzZTsKLQlzbnByaW50ZihlcF9kZXYtPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAidXNiZGV2JWQuJWRfZXAlMDJ4IiwKKwlkZXZfc2V0X25hbWUoJmVwX2Rldi0+ZGV2LCAidXNiZGV2JWQuJWRfZXAlMDJ4IiwKIAkJIHVkZXYtPmJ1cy0+YnVzbnVtLCB1ZGV2LT5kZXZudW0sCiAJCSBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwppbmRleCBjNmE5NTM5Li42YjFiMjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAJaW50IG1pbm9yX2Jhc2UgPSBjbGFzc19kcml2ZXItPm1pbm9yX2Jhc2U7CiAJaW50IG1pbm9yID0gMDsKLQljaGFyIG5hbWVbQlVTX0lEX1NJWkVdOworCWNoYXIgbmFtZVsyMF07CiAJY2hhciAqdGVtcDsKIAogI2lmZGVmIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMKQEAgLTE5MCwxNCArMTkwLDE1IEBACiAJaW50Zi0+bWlub3IgPSBtaW5vcjsKIAogCS8qIGNyZWF0ZSBhIHVzYiBjbGFzcyBkZXZpY2UgZm9yIHRoaXMgdXNiIGludGVyZmFjZSAqLwotCXNucHJpbnRmKG5hbWUsIEJVU19JRF9TSVpFLCBjbGFzc19kcml2ZXItPm5hbWUsIG1pbm9yIC0gbWlub3JfYmFzZSk7CisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBjbGFzc19kcml2ZXItPm5hbWUsIG1pbm9yIC0gbWlub3JfYmFzZSk7CiAJdGVtcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKLQlpZiAodGVtcCAmJiAodGVtcFsxXSAhPSAweDAwKSkKKwlpZiAodGVtcCAmJiAodGVtcFsxXSAhPSAnXDAnKSkKIAkJKyt0ZW1wOwogCWVsc2UKIAkJdGVtcCA9IG5hbWU7Ci0JaW50Zi0+dXNiX2RldiA9IGRldmljZV9jcmVhdGUodXNiX2NsYXNzLT5jbGFzcywgJmludGYtPmRldiwKLQkJCQkgICAgICBNS0RFVihVU0JfTUFKT1IsIG1pbm9yKSwgIiVzIiwgdGVtcCk7CisJaW50Zi0+dXNiX2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh1c2JfY2xhc3MtPmNsYXNzLCAmaW50Zi0+ZGV2LAorCQkJCQkgICAgICBNS0RFVihVU0JfTUFKT1IsIG1pbm9yKSwgTlVMTCwKKwkJCQkJICAgICAgIiVzIiwgdGVtcCk7CiAJaWYgKElTX0VSUihpbnRmLT51c2JfZGV2KSkgewogCQlkb3duX3dyaXRlKCZtaW5vcl9yd3NlbSk7CiAJCXVzYl9taW5vcnNbaW50Zi0+bWlub3JdID0gTlVMTDsKQEAgLTIyNyw3ICsyMjgsNyBAQAogCQkJc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgKmNsYXNzX2RyaXZlcikKIHsKIAlpbnQgbWlub3JfYmFzZSA9IGNsYXNzX2RyaXZlci0+bWlub3JfYmFzZTsKLQljaGFyIG5hbWVbQlVTX0lEX1NJWkVdOworCWNoYXIgbmFtZVsyMF07CiAKICNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCiAJbWlub3JfYmFzZSA9IDA7CkBAIC0yNDIsNyArMjQzLDcgQEAKIAl1c2JfbWlub3JzW2ludGYtPm1pbm9yXSA9IE5VTEw7CiAJdXBfd3JpdGUoJm1pbm9yX3J3c2VtKTsKIAotCXNucHJpbnRmKG5hbWUsIEJVU19JRF9TSVpFLCBjbGFzc19kcml2ZXItPm5hbWUsIGludGYtPm1pbm9yIC0gbWlub3JfYmFzZSk7CisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBjbGFzc19kcml2ZXItPm5hbWUsIGludGYtPm1pbm9yIC0gbWlub3JfYmFzZSk7CiAJZGV2aWNlX2Rlc3Ryb3kodXNiX2NsYXNzLT5jbGFzcywgTUtERVYoVVNCX01BSk9SLCBpbnRmLT5taW5vcikpOwogCWludGYtPnVzYl9kZXYgPSBOVUxMOwogCWludGYtPm1pbm9yID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCA0MmE0MzY0Li5mN2JmZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTkwMCwxNCArOTAwLDE0IEBACiAJaWYgKHJldHZhbCAhPSBzaXplb2YgdXNiX2Rldi0+ZGVzY3JpcHRvcikgewogCQltdXRleF91bmxvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAkJZGV2X2RiZyAocGFyZW50X2RldiwgImNhbid0IHJlYWQgJXMgZGV2aWNlIGRlc2NyaXB0b3IgJWRcbiIsCi0JCQkJdXNiX2Rldi0+ZGV2LmJ1c19pZCwgcmV0dmFsKTsKKwkJCQlkZXZfbmFtZSgmdXNiX2Rldi0+ZGV2KSwgcmV0dmFsKTsKIAkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FTVNHU0laRTsKIAl9CiAKIAlyZXR2YWwgPSB1c2JfbmV3X2RldmljZSAodXNiX2Rldik7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyIChwYXJlbnRfZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgcm9vdCBodWIgZm9yICVzLCAlZFxuIiwKLQkJCQl1c2JfZGV2LT5kZXYuYnVzX2lkLCByZXR2YWwpOworCQkJCWRldl9uYW1lKCZ1c2JfZGV2LT5kZXYpLCByZXR2YWwpOwogCX0KIAltdXRleF91bmxvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIApAQCAtMTc2NCw3ICsxNzY0LDcgQEAKICAqIElmIG1lbW9yeSBpcyB1bmF2YWlsYWJsZSwgcmV0dXJucyBOVUxMLgogICovCiBzdHJ1Y3QgdXNiX2hjZCAqdXNiX2NyZWF0ZV9oY2QgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKLQkJc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidXNfbmFtZSkKKwkJc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNfbmFtZSkKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oIGIvZHJpdmVycy91c2IvY29yZS9oY2QuaAppbmRleCBiOWRlMTU2Li41YjBiNTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKQEAgLTIxLDYgKzIxLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAKKyNkZWZpbmUgTUFYX1RPUE9fTEVWRUwJCTYKKwogLyogVGhpcyBmaWxlIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBvZiB1c2Jjb3JlIGludGVybmFscyB0aGF0IGFyZSBtb3N0bHkKICAqIHVzZWQgb3IgZXhwb3NlZCBieSBIb3N0IENvbnRyb2xsZXIgRHJpdmVycy4KICAqLwpAQCAtMjM1LDcgKzIzNyw3IEBACiBleHRlcm4gaW50IHVzYl9oY2RfZ2V0X2ZyYW1lX251bWJlcihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiAKIGV4dGVybiBzdHJ1Y3QgdXNiX2hjZCAqdXNiX2NyZWF0ZV9oY2QoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAotCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1c19uYW1lKTsKKwkJc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNfbmFtZSk7CiBleHRlcm4gc3RydWN0IHVzYl9oY2QgKnVzYl9nZXRfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QpOwogZXh0ZXJuIHZvaWQgdXNiX3B1dF9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiBleHRlcm4gaW50IHVzYl9hZGRfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA0Y2ZlMzJhLi4xMDdlMWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTcyLDcgKzcyLDYgQEAKIAogCXVuc2lnbmVkCQlsaW1pdGVkX3Bvd2VyOjE7CiAJdW5zaWduZWQJCXF1aWVzY2luZzoxOwotCXVuc2lnbmVkCQlhY3RpdmF0aW5nOjE7CiAJdW5zaWduZWQJCWRpc2Nvbm5lY3RlZDoxOwogCiAJdW5zaWduZWQJCWhhc19pbmRpY2F0b3JzOjE7CkBAIC0xMzEsNiArMTMwLDEyIEBACiBERUNMQVJFX1JXU0VNKGVoY2lfY2ZfcG9ydF9yZXNldF9yd3NlbSk7CiBFWFBPUlRfU1lNQk9MX0dQTChlaGNpX2NmX3BvcnRfcmVzZXRfcndzZW0pOwogCisjZGVmaW5lIEhVQl9ERUJPVU5DRV9USU1FT1VUCTE1MDAKKyNkZWZpbmUgSFVCX0RFQk9VTkNFX1NURVAJICAyNQorI2RlZmluZSBIVUJfREVCT1VOQ0VfU1RBQkxFCSAxMDAKKworCitzdGF0aWMgaW50IHVzYl9yZXNldF9hbmRfdmVyaWZ5X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqcG9ydHNwZWVkKGludCBwb3J0c3RhdHVzKQogewpAQCAtNTM1LDM3ICs1NDAsNiBAQAogCW1zbGVlcChtYXgocGdvb2RfZGVsYXksICh1bnNpZ25lZCkgMTAwKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGh1Yl9xdWllc2NlKHN0cnVjdCB1c2JfaHViICpodWIpCi17Ci0JLyogKG5vbmJsb2NraW5nKSBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSB3b24ndCByZS10cmlnZ2VyICovCi0JaHViLT5xdWllc2NpbmcgPSAxOwotCWh1Yi0+YWN0aXZhdGluZyA9IDA7Ci0KLQkvKiAoYmxvY2tpbmcpIHN0b3Aga2h1YmQgYW5kIHJlbGF0ZWQgYWN0aXZpdHkgKi8KLQl1c2Jfa2lsbF91cmIoaHViLT51cmIpOwotCWlmIChodWItPmhhc19pbmRpY2F0b3JzKQotCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmh1Yi0+bGVkcyk7Ci0JaWYgKGh1Yi0+dHQuaHViKQotCQljYW5jZWxfd29ya19zeW5jKCZodWItPnR0LmtldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGh1Yl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2h1YiAqaHViKQotewotCWludAlzdGF0dXM7Ci0KLQlodWItPnF1aWVzY2luZyA9IDA7Ci0JaHViLT5hY3RpdmF0aW5nID0gMTsKLQotCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGh1Yi0+dXJiLCBHRlBfTk9JTyk7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCWRldl9lcnIoaHViLT5pbnRmZGV2LCAiYWN0aXZhdGUgLS0+ICVkXG4iLCBzdGF0dXMpOwotCWlmIChodWItPmhhc19pbmRpY2F0b3JzICYmIGJsaW5rZW5saWdodHMpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaHViLT5sZWRzLCBMRURfQ1lDTEVfUEVSSU9EKTsKLQotCS8qIHNjYW4gYWxsIHBvcnRzIEFTQVAgKi8KLQlraWNrX2todWJkKGh1Yik7Ci19Ci0KIHN0YXRpYyBpbnQgaHViX2h1Yl9zdGF0dXMoc3RydWN0IHVzYl9odWIgKmh1YiwKIAkJdTE2ICpzdGF0dXMsIHUxNiAqY2hhbmdlKQogewpAQCAtNjI0LDEzNiArNTk4LDE0OSBAQAogIAlraWNrX2todWJkKGh1Yik7CiB9CiAKLS8qIGNhbGxlciBoYXMgbG9ja2VkIHRoZSBodWIgZGV2aWNlICovCi1zdGF0aWMgdm9pZCBodWJfc3RvcChzdHJ1Y3QgdXNiX2h1YiAqaHViKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OwotCWludCBpOworZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHsKKwlIVUJfSU5JVCwgSFVCX1BPU1RfUkVTRVQsIEhVQl9SRVNVTUUsIEhVQl9SRVNFVF9SRVNVTUUKK307CiAKLQkvKiBEaXNjb25uZWN0IGFsbCB0aGUgY2hpbGRyZW4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgaGRldi0+bWF4Y2hpbGQ7ICsraSkgewotCQlpZiAoaGRldi0+Y2hpbGRyZW5baV0pCi0JCQl1c2JfZGlzY29ubmVjdCgmaGRldi0+Y2hpbGRyZW5baV0pOwotCX0KLQlodWJfcXVpZXNjZShodWIpOwotfQotCi0jZGVmaW5lIEhVQl9SRVNFVAkJMQotI2RlZmluZSBIVUJfUkVTVU1FCQkyCi0jZGVmaW5lIEhVQl9SRVNFVF9SRVNVTUUJMwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLS8qIFRyeSB0byBpZGVudGlmeSB3aGljaCBkZXZpY2VzIG5lZWQgVVNCLVBFUlNJU1QgaGFuZGxpbmcgKi8KLXN0YXRpYyBpbnQgcGVyc2lzdGVudF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCi17Ci0JaW50IGk7Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICphY3Rjb25maWc7Ci0KLQkvKiBFeHBsaWNpdGx5IG5vdCBtYXJrZWQgcGVyc2lzdGVudD8gKi8KLQlpZiAoIXVkZXYtPnBlcnNpc3RfZW5hYmxlZCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBObyBhY3RpdmUgY29uZmlnPyAqLwotCWFjdGNvbmZpZyA9IHVkZXYtPmFjdGNvbmZpZzsKLQlpZiAoIWFjdGNvbmZpZykKLQkJcmV0dXJuIDA7Ci0KLQkvKiBGSVhNRSEgV2Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIgaXQncyBvcGVuIGhlcmUgb3Igbm90ISAqLwotCi0JLyoKLQkgKiBDaGVjayB0aGF0IGFsbCB0aGUgaW50ZXJmYWNlIGRyaXZlcnMgaGF2ZSBhCi0JICogJ3Jlc2V0X3Jlc3VtZScgZW50cnlwb2ludAotCSAqLwotCXJldHZhbCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7Ci0JCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwotCQlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyOwotCi0JCWludGYgPSBhY3Rjb25maWctPmludGVyZmFjZVtpXTsKLQkJaWYgKCFpbnRmLT5kZXYuZHJpdmVyKQotCQkJY29udGludWU7Ci0JCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7Ci0JCWlmICghZHJpdmVyLT5yZXNldF9yZXN1bWUpCi0JCQlyZXR1cm4gMDsKLQkJLyoKLQkJICogV2UgaGF2ZSBhdCBsZWFzdCBvbmUgZHJpdmVyLCBhbmQgdGhhdCBvbmUKLQkJICogaGFzIGEgcmVzZXRfcmVzdW1lIG1ldGhvZC4KLQkJICovCi0JCXJldHZhbCA9IDE7Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIGh1Yl9yZXN0YXJ0KHN0cnVjdCB1c2JfaHViICpodWIsIGludCB0eXBlKQorc3RhdGljIHZvaWQgaHViX2FjdGl2YXRlKHN0cnVjdCB1c2JfaHViICpodWIsIGVudW0gaHViX2FjdGl2YXRpb25fdHlwZSB0eXBlKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OwogCWludCBwb3J0MTsKKwlpbnQgc3RhdHVzOworCWJvb2wgbmVlZF9kZWJvdW5jZV9kZWxheSA9IGZhbHNlOwogCi0JLyogQ2hlY2sgZWFjaCBvZiB0aGUgY2hpbGRyZW4gdG8gc2VlIGlmIHRoZXkgcmVxdWlyZQotCSAqIFVTQi1QRVJTSVNUIGhhbmRsaW5nIG9yIGRpc2Nvbm5lY3Rpb24uICBBbHNvIGNoZWNrCi0JICogZWFjaCB1bm9jY3VwaWVkIHBvcnQgdG8gbWFrZSBzdXJlIGl0IGlzIHN0aWxsIGRpc2FibGVkLgorCS8qIEFmdGVyIGEgcmVzdW1lLCBwb3J0IHBvd2VyIHNob3VsZCBzdGlsbCBiZSBvbi4KKwkgKiBGb3IgYW55IG90aGVyIHR5cGUgb2YgYWN0aXZhdGlvbiwgdHVybiBpdCBvbi4KKwkgKi8KKwlpZiAodHlwZSAhPSBIVUJfUkVTVU1FKQorCQlodWJfcG93ZXJfb24oaHViKTsKKworCS8qIENoZWNrIGVhY2ggcG9ydCBhbmQgc2V0IGh1Yi0+Y2hhbmdlX2JpdHMgdG8gbGV0IGtodWJkIGtub3cKKwkgKiB3aGljaCBwb3J0cyBuZWVkIGF0dGVudGlvbi4KIAkgKi8KIAlmb3IgKHBvcnQxID0gMTsgcG9ydDEgPD0gaGRldi0+bWF4Y2hpbGQ7ICsrcG9ydDEpIHsKIAkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBoZGV2LT5jaGlsZHJlbltwb3J0MS0xXTsKLQkJaW50IHN0YXR1cyA9IDA7CiAJCXUxNiBwb3J0c3RhdHVzLCBwb3J0Y2hhbmdlOwogCi0JCWlmICghdWRldiB8fCB1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHsKLQkJCWlmICh0eXBlICE9IEhVQl9SRVNFVCkgewotCQkJCXN0YXR1cyA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQxLAotCQkJCQkJJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKLQkJCQlpZiAoc3RhdHVzID09IDAgJiYgKHBvcnRzdGF0dXMgJgotCQkJCQkJVVNCX1BPUlRfU1RBVF9FTkFCTEUpKQotCQkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgcG9ydDEsCi0JCQkJCQkJVVNCX1BPUlRfRkVBVF9FTkFCTEUpOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBXYXMgdGhlIHBvd2VyIHNlc3Npb24gbG9zdCB3aGlsZSB3ZSB3ZXJlIHN1c3BlbmRlZD8gKi8KKwkJcG9ydHN0YXR1cyA9IHBvcnRjaGFuZ2UgPSAwOwogCQlzdGF0dXMgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBwb3J0MSwgJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKKwkJaWYgKHVkZXYgfHwgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pKQorCQkJZGV2X2RiZyhodWItPmludGZkZXYsCisJCQkJCSJwb3J0ICVkOiBzdGF0dXMgJTA0eCBjaGFuZ2UgJTA0eFxuIiwKKwkJCQkJcG9ydDEsIHBvcnRzdGF0dXMsIHBvcnRjaGFuZ2UpOwogCi0JCS8qIElmIHRoZSBkZXZpY2UgaXMgZ29uZSwga2h1YmQgd2lsbCBoYW5kbGUgaXQgbGF0ZXIgKi8KLQkJaWYgKHN0YXR1cyA9PSAwICYmICEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikpCi0JCQljb250aW51ZTsKLQotCQkvKiBGb3IgIlVTQl9QRVJTSVNUIi1lbmFibGVkIGNoaWxkcmVuIHdlIG11c3QKLQkJICogbWFyayB0aGUgY2hpbGQgZGV2aWNlIGZvciByZXNldC1yZXN1bWUgYW5kCi0JCSAqIHR1cm4gb2ZmIHRoZSB2YXJpb3VzIHN0YXR1cyBjaGFuZ2VzIHRvIHByZXZlbnQKLQkJICoga2h1YmQgZnJvbSBkaXNjb25uZWN0aW5nIGl0IGxhdGVyLgorCQkvKiBBZnRlciBhbnl0aGluZyBvdGhlciB0aGFuIEhVQl9SRVNVTUUgKGkuZS4sIGluaXRpYWxpemF0aW9uCisJCSAqIG9yIGFueSBzb3J0IG9mIHJlc2V0KSwgZXZlcnkgcG9ydCBzaG91bGQgYmUgZGlzYWJsZWQuCisJCSAqIFVuY29ubmVjdGVkIHBvcnRzIHNob3VsZCBsaWtld2lzZSBiZSBkaXNhYmxlZCAocGFyYW5vaWEpLAorCQkgKiBhbmQgc28gc2hvdWxkIHBvcnRzIGZvciB3aGljaCB3ZSBoYXZlIG5vIHVzYl9kZXZpY2UuCiAJCSAqLwotCQlpZiAoc3RhdHVzID09IDAgJiYgIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpICYmCi0JCQkJcGVyc2lzdGVudF9kZXZpY2UodWRldikpIHsKLQkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRSkKLQkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKLQkJCQkJCVVTQl9QT1JUX0ZFQVRfQ19FTkFCTEUpOwotCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTikKLQkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKLQkJCQkJCVVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKLQkJCXVkZXYtPnJlc2V0X3Jlc3VtZSA9IDE7CisJCWlmICgocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKSAmJiAoCisJCQkJdHlwZSAhPSBIVUJfUkVTVU1FIHx8CisJCQkJIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSB8fAorCQkJCSF1ZGV2IHx8CisJCQkJdWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSkgeworCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX0VOQUJMRSk7CisJCQlwb3J0c3RhdHVzICY9IH5VU0JfUE9SVF9TVEFUX0VOQUJMRTsKIAkJfQogCi0JCS8qIE90aGVyd2lzZSBmb3IgYSByZXNldF9yZXN1bWUgd2UgbXVzdCBkaXNjb25uZWN0IHRoZSBjaGlsZCwKLQkJICogYnV0IGFzIHdlIG1heSBub3QgbG9jayB0aGUgY2hpbGQgZGV2aWNlIGhlcmUKLQkJICogd2UgaGF2ZSB0byBkbyBhICJsb2dpY2FsIiBkaXNjb25uZWN0LgotCQkgKi8KLQkJZWxzZSBpZiAodHlwZSA9PSBIVUJfUkVTRVRfUkVTVU1FKQotCQkJaHViX3BvcnRfbG9naWNhbF9kaXNjb25uZWN0KGh1YiwgcG9ydDEpOworCQkvKiBDbGVhciBzdGF0dXMtY2hhbmdlIGZsYWdzOyB3ZSdsbCBkZWJvdW5jZSBsYXRlciAqLworCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKSB7CisJCQluZWVkX2RlYm91bmNlX2RlbGF5ID0gdHJ1ZTsKKwkJCWNsZWFyX3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLAorCQkJCQlVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTik7CisJCX0KKwkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFKSB7CisJCQluZWVkX2RlYm91bmNlX2RlbGF5ID0gdHJ1ZTsKKwkJCWNsZWFyX3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLAorCQkJCQlVU0JfUE9SVF9GRUFUX0NfRU5BQkxFKTsKKwkJfQorCisJCWlmICghdWRldiB8fCB1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHsKKwkJCS8qIFRlbGwga2h1YmQgdG8gZGlzY29ubmVjdCB0aGUgZGV2aWNlIG9yCisJCQkgKiBjaGVjayBmb3IgYSBuZXcgY29ubmVjdGlvbgorCQkJICovCisJCQlpZiAodWRldiB8fCAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikpCisJCQkJc2V0X2JpdChwb3J0MSwgaHViLT5jaGFuZ2VfYml0cyk7CisKKwkJfSBlbHNlIGlmIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpIHsKKwkJCS8qIFRoZSBwb3dlciBzZXNzaW9uIGFwcGFyZW50bHkgc3Vydml2ZWQgdGhlIHJlc3VtZS4KKwkJCSAqIElmIHRoZXJlIHdhcyBhbiBvdmVyY3VycmVudCBvciBzdXNwZW5kIGNoYW5nZQorCQkJICogKGkuZS4sIHJlbW90ZSB3YWtldXAgcmVxdWVzdCksIGhhdmUga2h1YmQKKwkJCSAqIHRha2UgY2FyZSBvZiBpdC4KKwkJCSAqLworCQkJaWYgKHBvcnRjaGFuZ2UpCisJCQkJc2V0X2JpdChwb3J0MSwgaHViLT5jaGFuZ2VfYml0cyk7CisKKwkJfSBlbHNlIGlmICh1ZGV2LT5wZXJzaXN0X2VuYWJsZWQpIHsKKyNpZmRlZiBDT05GSUdfUE0KKwkJCXVkZXYtPnJlc2V0X3Jlc3VtZSA9IDE7CisjZW5kaWYKKwkJCXNldF9iaXQocG9ydDEsIGh1Yi0+Y2hhbmdlX2JpdHMpOworCisJCX0gZWxzZSB7CisJCQkvKiBUaGUgcG93ZXIgc2Vzc2lvbiBpcyBnb25lOyB0ZWxsIGtodWJkICovCisJCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOworCQkJc2V0X2JpdChwb3J0MSwgaHViLT5jaGFuZ2VfYml0cyk7CisJCX0KIAl9CiAKLQlodWJfYWN0aXZhdGUoaHViKTsKKwkvKiBJZiBubyBwb3J0LXN0YXR1cy1jaGFuZ2UgZmxhZ3Mgd2VyZSBzZXQsIHdlIGRvbid0IG5lZWQgYW55CisJICogZGVib3VuY2luZy4gIElmIGZsYWdzIHdlcmUgc2V0IHdlIGNhbiB0cnkgdG8gZGVib3VuY2UgdGhlCisJICogcG9ydHMgYWxsIGF0IG9uY2UgcmlnaHQgbm93LCBpbnN0ZWFkIG9mIGxldHRpbmcga2h1YmQgZG8gdGhlbQorCSAqIG9uZSBhdCBhIHRpbWUgbGF0ZXIgb24uCisJICoKKwkgKiBJZiBhbnkgcG9ydC1zdGF0dXMgY2hhbmdlcyBkbyBvY2N1ciBkdXJpbmcgdGhpcyBkZWxheSwga2h1YmQKKwkgKiB3aWxsIHNlZSB0aGVtIGxhdGVyIGFuZCBoYW5kbGUgdGhlbSBub3JtYWxseS4KKwkgKi8KKwlpZiAobmVlZF9kZWJvdW5jZV9kZWxheSkKKwkJbXNsZWVwKEhVQl9ERUJPVU5DRV9TVEFCTEUpOworCisJaHViLT5xdWllc2NpbmcgPSAwOworCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoaHViLT51cmIsIEdGUF9OT0lPKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZGV2X2VycihodWItPmludGZkZXYsICJhY3RpdmF0ZSAtLT4gJWRcbiIsIHN0YXR1cyk7CisJaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMgJiYgYmxpbmtlbmxpZ2h0cykKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZodWItPmxlZHMsIExFRF9DWUNMRV9QRVJJT0QpOworCisJLyogU2NhbiBhbGwgcG9ydHMgdGhhdCBuZWVkIGF0dGVudGlvbiAqLworCWtpY2tfa2h1YmQoaHViKTsKIH0KIAotI2VuZGlmCS8qIENPTkZJR19QTSAqLworZW51bSBodWJfcXVpZXNjaW5nX3R5cGUgeworCUhVQl9ESVNDT05ORUNULCBIVUJfUFJFX1JFU0VULCBIVUJfU1VTUEVORAorfTsKKworc3RhdGljIHZvaWQgaHViX3F1aWVzY2Uoc3RydWN0IHVzYl9odWIgKmh1YiwgZW51bSBodWJfcXVpZXNjaW5nX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwlpbnQgaTsKKworCS8qIGtodWJkIGFuZCByZWxhdGVkIGFjdGl2aXR5IHdvbid0IHJlLXRyaWdnZXIgKi8KKwlodWItPnF1aWVzY2luZyA9IDE7CisKKwlpZiAodHlwZSAhPSBIVUJfU1VTUEVORCkgeworCQkvKiBEaXNjb25uZWN0IGFsbCB0aGUgY2hpbGRyZW4gKi8KKwkJZm9yIChpID0gMDsgaSA8IGhkZXYtPm1heGNoaWxkOyArK2kpIHsKKwkJCWlmIChoZGV2LT5jaGlsZHJlbltpXSkKKwkJCQl1c2JfZGlzY29ubmVjdCgmaGRldi0+Y2hpbGRyZW5baV0pOworCQl9CisJfQorCisJLyogU3RvcCBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSAqLworCXVzYl9raWxsX3VyYihodWItPnVyYik7CisJaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMpCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaHViLT5sZWRzKTsKKwlpZiAoaHViLT50dC5odWIpCisJCWNhbmNlbF93b3JrX3N5bmMoJmh1Yi0+dHQua2V2ZW50KTsKK30KIAogLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIGh1YiBkZXZpY2UgKi8KIHN0YXRpYyBpbnQgaHViX3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNiX2h1YiAqaHViID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAotCWh1Yl9zdG9wKGh1Yik7CisJaHViX3F1aWVzY2UoaHViLCBIVUJfUFJFX1JFU0VUKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzYyLDggKzc0OSw3IEBACiB7CiAJc3RydWN0IHVzYl9odWIgKmh1YiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLQlodWJfcG93ZXJfb24oaHViKTsKLQlodWJfYWN0aXZhdGUoaHViKTsKKwlodWJfYWN0aXZhdGUoaHViLCBIVUJfUE9TVF9SRVNFVCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDksOCArOTk1LDcgQEAKIAlpZiAoaHViLT5oYXNfaW5kaWNhdG9ycyAmJiBibGlua2VubGlnaHRzKQogCQlodWItPmluZGljYXRvciBbMF0gPSBJTkRJQ0FUT1JfQ1lDTEU7CiAKLQlodWJfcG93ZXJfb24oaHViKTsKLQlodWJfYWN0aXZhdGUoaHViKTsKKwlodWJfYWN0aXZhdGUoaHViLCBIVUJfSU5JVCk7CiAJcmV0dXJuIDA7CiAKIGZhaWw6CkBAIC0xMDQyLDcgKzEwMjcsNyBAQAogCiAJLyogRGlzY29ubmVjdCBhbGwgY2hpbGRyZW4gYW5kIHF1aWVzY2UgdGhlIGh1YiAqLwogCWh1Yi0+ZXJyb3IgPSAwOwotCWh1Yl9zdG9wKGh1Yik7CisJaHViX3F1aWVzY2UoaHViLCBIVUJfRElTQ09OTkVDVCk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKIApAQCAtMTA2OCw2ICsxMDUzLDEyIEBACiAJZGVzYyA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwogCWhkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCisJaWYgKGhkZXYtPmxldmVsID09IE1BWF9UT1BPX0xFVkVMKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgIlVuc3VwcG9ydGVkIGJ1cyB0b3BvbG9neTogIgorCQkJCSJodWIgbmVzdGVkIHRvbyBkZWVwXG4iKTsKKwkJcmV0dXJuIC1FMkJJRzsKKwl9CisKICNpZmRlZglDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCCiAJaWYgKGhkZXYtPnBhcmVudCkgewogCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiaWdub3JpbmcgZXh0ZXJuYWwgaHViXG4iKTsKQEAgLTE4MTQsNiArMTgwNSw1MSBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAKKyNkZWZpbmUgTUFTS19CSVRTCShVU0JfUE9SVF9TVEFUX1BPV0VSIHwgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OIHwgXAorCQkJCVVTQl9QT1JUX1NUQVRfU1VTUEVORCkKKyNkZWZpbmUgV0FOVF9CSVRTCShVU0JfUE9SVF9TVEFUX1BPV0VSIHwgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKQorCisvKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGV2aWNlIG9uIGEgcG9ydCBpcyByZWFkeSBmb3IgYSBub3JtYWwgcmVzdW1lLAorICogaXMgcmVhZHkgZm9yIGEgcmVzZXQtcmVzdW1lLCBvciBzaG91bGQgYmUgZGlzY29ubmVjdGVkLgorICovCitzdGF0aWMgaW50IGNoZWNrX3BvcnRfcmVzdW1lX3R5cGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSwKKwkJaW50IHN0YXR1cywgdW5zaWduZWQgcG9ydGNoYW5nZSwgdW5zaWduZWQgcG9ydHN0YXR1cykKK3sKKwkvKiBJcyB0aGUgZGV2aWNlIHN0aWxsIHByZXNlbnQ/ICovCisJaWYgKHN0YXR1cyB8fCAocG9ydHN0YXR1cyAmIE1BU0tfQklUUykgIT0gV0FOVF9CSVRTKSB7CisJCWlmIChzdGF0dXMgPj0gMCkKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJfQorCisJLyogQ2FuJ3QgZG8gYSBub3JtYWwgcmVzdW1lIGlmIHRoZSBwb3J0IGlzbid0IGVuYWJsZWQsCisJICogc28gdHJ5IGEgcmVzZXQtcmVzdW1lIGluc3RlYWQuCisJICovCisJZWxzZSBpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpICYmICF1ZGV2LT5yZXNldF9yZXN1bWUpIHsKKwkJaWYgKHVkZXYtPnBlcnNpc3RfZW5hYmxlZCkKKwkJCXVkZXYtPnJlc2V0X3Jlc3VtZSA9IDE7CisJCWVsc2UKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJfQorCisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwKKwkJCQkicG9ydCAlZCBzdGF0dXMgJTA0eC4lMDR4IGFmdGVyIHJlc3VtZSwgJWRcbiIsCisJCQkJcG9ydDEsIHBvcnRjaGFuZ2UsIHBvcnRzdGF0dXMsIHN0YXR1cyk7CisJfSBlbHNlIGlmICh1ZGV2LT5yZXNldF9yZXN1bWUpIHsKKworCQkvKiBMYXRlIHBvcnQgaGFuZG9mZiBjYW4gc2V0IHN0YXR1cy1jaGFuZ2UgYml0cyAqLworCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKQorCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKKwkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFKQorCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19FTkFCTEUpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKICNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKIAogLyoKQEAgLTE5NDMsNyArMTk3OSw4IEBACiAJICogcmVzdW1lZC4KIAkgKi8KIAlpZiAodWRldi0+cmVzZXRfcmVzdW1lKQotCQlzdGF0dXMgPSB1c2JfcmVzZXRfZGV2aWNlKHVkZXYpOworIHJldHJ5X3Jlc2V0X3Jlc3VtZToKKwkJc3RhdHVzID0gdXNiX3Jlc2V0X2FuZF92ZXJpZnlfZGV2aWNlKHVkZXYpOwogCiAgCS8qIDEwLjUuNC41IHNheXMgYmUgc3VyZSBkZXZpY2VzIGluIHRoZSB0cmVlIGFyZSBzdGlsbCB0aGVyZS4KICAJICogRm9yIG5vdyBsZXQncyBhc3N1bWUgdGhlIGRldmljZSBkaWRuJ3QgZ28gY3Jhenkgb24gcmVzdW1lLApAQCAtMTk1NCw2ICsxOTkxLDEzIEBACiAJCXN0YXR1cyA9IHVzYl9nZXRfc3RhdHVzKHVkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsICZkZXZzdGF0dXMpOwogCQlpZiAoc3RhdHVzID49IDApCiAJCQlzdGF0dXMgPSAoc3RhdHVzID4gMCA/IDAgOiAtRU5PREVWKTsKKworCQkvKiBJZiBhIG5vcm1hbCByZXN1bWUgZmFpbGVkLCB0cnkgZG9pbmcgYSByZXNldC1yZXN1bWUgKi8KKwkJaWYgKHN0YXR1cyAmJiAhdWRldi0+cmVzZXRfcmVzdW1lICYmIHVkZXYtPnBlcnNpc3RfZW5hYmxlZCkgeworCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAicmV0cnkgd2l0aCByZXNldC1yZXN1bWVcbiIpOworCQkJdWRldi0+cmVzZXRfcmVzdW1lID0gMTsKKwkJCWdvdG8gcmV0cnlfcmVzZXRfcmVzdW1lOworCQl9CiAJfQogCiAJaWYgKHN0YXR1cykgewpAQCAtMjAwMiw3ICsyMDQ2LDcgQEAKICAqIHRvIGl0IHdpbGwgYmUgbG9zdC4gIFVzaW5nIHRoZSBVU0JfUEVSU0lTVCBmYWNpbGl0eSwgdGhlIGRldmljZSBjYW4gYmUKICAqIG1hZGUgdG8gYXBwZWFyIGFzIGlmIGl0IGhhZCBub3QgZGlzY29ubmVjdGVkLgogICoKLSAqIFRoaXMgZmFjaWxpdHkgY2FuIGJlIGRhbmdlcm91cy4gIEFsdGhvdWdoIHVzYl9yZXNldF9kZXZpY2UoKSBtYWtlcworICogVGhpcyBmYWNpbGl0eSBjYW4gYmUgZGFuZ2Vyb3VzLiAgQWx0aG91Z2ggdXNiX3Jlc2V0X2FuZF92ZXJpZnlfZGV2aWNlKCkgbWFrZXMKICAqIGV2ZXJ5IGVmZm9ydCB0byBpbnN1cmUgdGhhdCB0aGUgc2FtZSBkZXZpY2UgaXMgcHJlc2VudCBhZnRlciB0aGUKICAqIHJlc2V0IGFzIGJlZm9yZSwgaXQgY2Fubm90IHByb3ZpZGUgYSAxMDAlIGd1YXJhbnRlZS4gIEZ1cnRoZXJtb3JlIGl0J3MKICAqIHF1aXRlIHBvc3NpYmxlIGZvciBhIGRldmljZSB0byByZW1haW4gdW5hbHRlcmVkIGJ1dCBpdHMgbWVkaWEgdG8gYmUKQEAgLTIwMTgsNyArMjA2Miw2IEBACiAJaW50CQlwb3J0MSA9IHVkZXYtPnBvcnRudW07CiAJaW50CQlzdGF0dXM7CiAJdTE2CQlwb3J0Y2hhbmdlLCBwb3J0c3RhdHVzOwotCXVuc2lnbmVkCW1hc2tfZmxhZ3MsIHdhbnRfZmxhZ3M7CiAKIAkvKiBTa2lwIHRoZSBpbml0aWFsIENsZWFyLVN1c3BlbmQgc3RlcCBmb3IgYSByZW1vdGUgd2FrZXVwICovCiAJc3RhdHVzID0gaHViX3BvcnRfc3RhdHVzKGh1YiwgcG9ydDEsICZwb3J0c3RhdHVzLCAmcG9ydGNoYW5nZSk7CkBAIC0yMDQ3LDM1ICsyMDkwLDIzIEBACiAJCSAqLwogCQlzdGF0dXMgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBwb3J0MSwgJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKIAotIFN1c3BlbmRDbGVhcmVkOgotCQlpZiAodWRldi0+cmVzZXRfcmVzdW1lKQotCQkJd2FudF9mbGFncyA9IFVTQl9QT1JUX1NUQVRfUE9XRVIKLQkJCQkJfCBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT047Ci0JCWVsc2UKLQkJCXdhbnRfZmxhZ3MgPSBVU0JfUE9SVF9TVEFUX1BPV0VSCi0JCQkJCXwgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OCi0JCQkJCXwgVVNCX1BPUlRfU1RBVF9FTkFCTEU7Ci0JCW1hc2tfZmxhZ3MgPSB3YW50X2ZsYWdzIHwgVVNCX1BPUlRfU1RBVF9TVVNQRU5EOworCQkvKiBUUlNNUkNZID0gMTAgbXNlYyAqLworCQltc2xlZXAoMTApOworCX0KIAotCQlpZiAoc3RhdHVzIDwgMCB8fCAocG9ydHN0YXR1cyAmIG1hc2tfZmxhZ3MpICE9IHdhbnRfZmxhZ3MpIHsKLQkJCWRldl9kYmcoaHViLT5pbnRmZGV2LAotCQkJCSJwb3J0ICVkIHN0YXR1cyAlMDR4LiUwNHggYWZ0ZXIgcmVzdW1lLCAlZFxuIiwKLQkJCQlwb3J0MSwgcG9ydGNoYW5nZSwgcG9ydHN0YXR1cywgc3RhdHVzKTsKLQkJCWlmIChzdGF0dXMgPj0gMCkKLQkJCQlzdGF0dXMgPSAtRU5PREVWOwotCQl9IGVsc2UgewotCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORCkKLQkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKLQkJCQkJCVVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EKTsKLQkJCS8qIFRSU01SQ1kgPSAxMCBtc2VjICovCi0JCQltc2xlZXAoMTApOwotCQl9CisgU3VzcGVuZENsZWFyZWQ6CisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQpCisJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKKwkJCQkJVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQpOwogCX0KIAogCWNsZWFyX2JpdChwb3J0MSwgaHViLT5idXN5X2JpdHMpOwogCWlmICghaHViLT5oZGV2LT5wYXJlbnQgJiYgIWh1Yi0+YnVzeV9iaXRzWzBdKQogCQl1c2JfZW5hYmxlX3Jvb3RfaHViX2lycShodWItPmhkZXYtPmJ1cyk7CiAKKwlzdGF0dXMgPSBjaGVja19wb3J0X3Jlc3VtZV90eXBlKHVkZXYsCisJCQlodWIsIHBvcnQxLCBzdGF0dXMsIHBvcnRjaGFuZ2UsIHBvcnRzdGF0dXMpOwogCWlmIChzdGF0dXMgPT0gMCkKIAkJc3RhdHVzID0gZmluaXNoX3BvcnRfcmVzdW1lKHVkZXYpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0yMDg1LDE3ICsyMTE2LDE2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyogY2FsbGVyIGhhcyBsb2NrZWQgdWRldiAqLwogc3RhdGljIGludCByZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludAlzdGF0dXMgPSAwOwogCi0JdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwogCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKSB7CiAJCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiAlc3Jlc3VtZVxuIiwgIndha2V1cC0iKTsKIAkJdXNiX21hcmtfbGFzdF9idXN5KHVkZXYpOwogCQlzdGF0dXMgPSB1c2JfZXh0ZXJuYWxfcmVzdW1lX2RldmljZSh1ZGV2KTsKIAl9Ci0JdXNiX3VubG9ja19kZXZpY2UodWRldik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMjEwOCwxNCArMjEzOCwyNSBAQAogCXJldHVybiAwOwogfQogCisvKiBIb3dldmVyIHdlIG1heSBuZWVkIHRvIGRvIGEgcmVzZXQtcmVzdW1lICovCisKIGludCB1c2JfcG9ydF9yZXN1bWUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0JaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHVzYl9odWIJKmh1YiA9IGhkZXZfdG9faHViKHVkZXYtPnBhcmVudCk7CisJaW50CQlwb3J0MSA9IHVkZXYtPnBvcnRudW07CisJaW50CQlzdGF0dXM7CisJdTE2CQlwb3J0Y2hhbmdlLCBwb3J0c3RhdHVzOwogCi0JLyogSG93ZXZlciB3ZSBtYXkgbmVlZCB0byBkbyBhIHJlc2V0LXJlc3VtZSAqLwotCWlmICh1ZGV2LT5yZXNldF9yZXN1bWUpIHsKKwlzdGF0dXMgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBwb3J0MSwgJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKKwlzdGF0dXMgPSBjaGVja19wb3J0X3Jlc3VtZV90eXBlKHVkZXYsCisJCQlodWIsIHBvcnQxLCBzdGF0dXMsIHBvcnRjaGFuZ2UsIHBvcnRzdGF0dXMpOworCisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJjYW4ndCByZXN1bWUsIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJaHViX3BvcnRfbG9naWNhbF9kaXNjb25uZWN0KGh1YiwgcG9ydDEpOworCX0gZWxzZSBpZiAodWRldi0+cmVzZXRfcmVzdW1lKSB7CiAJCWRldl9kYmcoJnVkZXYtPmRldiwgInJlc2V0LXJlc3VtZVxuIik7Ci0JCXN0YXR1cyA9IHVzYl9yZXNldF9kZXZpY2UodWRldik7CisJCXN0YXR1cyA9IHVzYl9yZXNldF9hbmRfdmVyaWZ5X2RldmljZSh1ZGV2KTsKIAl9CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTIxNDksNyArMjE5MCw3IEBACiAJZGV2X2RiZygmaW50Zi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIHN0b3Aga2h1YmQgYW5kIHJlbGF0ZWQgYWN0aXZpdHkgKi8KLQlodWJfcXVpZXNjZShodWIpOworCWh1Yl9xdWllc2NlKGh1YiwgSFVCX1NVU1BFTkQpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTU4LDcgKzIxOTksNyBAQAogCXN0cnVjdCB1c2JfaHViICpodWIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJZGV2X2RiZygmaW50Zi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQlodWJfcmVzdGFydChodWIsIEhVQl9SRVNVTUUpOworCWh1Yl9hY3RpdmF0ZShodWIsIEhVQl9SRVNVTUUpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTY3LDggKzIyMDgsNyBAQAogCXN0cnVjdCB1c2JfaHViICpodWIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJZGV2X2RiZygmaW50Zi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQlodWJfcG93ZXJfb24oaHViKTsKLQlodWJfcmVzdGFydChodWIsIEhVQl9SRVNFVF9SRVNVTUUpOworCWh1Yl9hY3RpdmF0ZShodWIsIEhVQl9SRVNFVF9SRVNVTUUpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjE4LDExICsyMjU4LDYgQEAKICAqIGV2ZXJ5IDI1bXMgZm9yIHRyYW5zaWVudCBkaXNjb25uZWN0cy4gIFdoZW4gdGhlIHBvcnQgc3RhdHVzIGhhcyBiZWVuCiAgKiB1bmNoYW5nZWQgZm9yIDEwMG1zIGl0IHJldHVybnMgdGhlIHBvcnQgc3RhdHVzLgogICovCi0KLSNkZWZpbmUgSFVCX0RFQk9VTkNFX1RJTUVPVVQJMTUwMAotI2RlZmluZSBIVUJfREVCT1VOQ0VfU1RFUAkgIDI1Ci0jZGVmaW5lIEhVQl9ERUJPVU5DRV9TVEFCTEUJIDEwMAotCiBzdGF0aWMgaW50IGh1Yl9wb3J0X2RlYm91bmNlKHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSkKIHsKIAlpbnQgcmV0OwpAQCAtMjMwMiw3ICsyMzM3LDcgQEAKICAqIFJldHVybnMgZGV2aWNlIGluIFVTQl9TVEFURV9BRERSRVNTLCBleGNlcHQgb24gZXJyb3IuCiAgKgogICogSWYgdGhpcyBpcyBjYWxsZWQgZm9yIGFuIGFscmVhZHktZXhpc3RpbmcgZGV2aWNlIChhcyBwYXJ0IG9mCi0gKiB1c2JfcmVzZXRfZGV2aWNlKSwgdGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2suICBGb3IgYQorICogdXNiX3Jlc2V0X2FuZF92ZXJpZnlfZGV2aWNlKSwgdGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2suICBGb3IgYQogICogbmV3bHkgZGV0ZWN0ZWQgZGV2aWNlIHRoYXQgaXMgbm90IGFjY2Vzc2libGUgdGhyb3VnaCBhbnkgZ2xvYmFsCiAgKiBwb2ludGVycywgaXQncyBub3QgbmVjZXNzYXJ5IHRvIGxvY2sgdGhlIGRldmljZS4KICAqLwpAQCAtMjYxOSw3ICsyNjU0LDcgQEAKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbjoKICAqIAlhIHBvcnQgY29ubmVjdGlvbi1jaGFuZ2Ugb2NjdXJzOwogICoJYSBwb3J0IGVuYWJsZS1jaGFuZ2Ugb2NjdXJzIChvZnRlbiBjYXVzZWQgYnkgRU1JKTsKLSAqCXVzYl9yZXNldF9kZXZpY2UoKSBlbmNvdW50ZXJzIGNoYW5nZWQgZGVzY3JpcHRvcnMgKGFzIGZyb20KKyAqCXVzYl9yZXNldF9hbmRfdmVyaWZ5X2RldmljZSgpIGVuY291bnRlcnMgY2hhbmdlZCBkZXNjcmlwdG9ycyAoYXMgZnJvbQogICoJCWEgZmlybXdhcmUgZG93bmxvYWQpCiAgKiBjYWxsZXIgYWxyZWFkeSBsb2NrZWQgdGhlIGh1YgogICovCkBAIC0yNjI5LDkgKzI2NjQsMTEgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlzdHJ1Y3QgZGV2aWNlICpodWJfZGV2ID0gaHViLT5pbnRmZGV2OwogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBidXNfdG9faGNkKGhkZXYtPmJ1cyk7Ci0JdTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3MgPSBsZTE2X3RvX2NwdShodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MpOworCXVuc2lnbmVkIHdIdWJDaGFyYWN0ZXJpc3RpY3MgPQorCQkJbGUxNl90b19jcHUoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlpbnQgc3RhdHVzLCBpOwotIAorCiAJZGV2X2RiZyAoaHViX2RldiwKIAkJInBvcnQgJWQsIHN0YXR1cyAlMDR4LCBjaGFuZ2UgJTA0eCwgJXNcbiIsCiAJCXBvcnQxLCBwb3J0c3RhdHVzLCBwb3J0Y2hhbmdlLCBwb3J0c3BlZWQgKHBvcnRzdGF0dXMpKTsKQEAgLTI2NDAsMzAgKzI2NzcsNzMgQEAKIAkJc2V0X3BvcnRfbGVkKGh1YiwgcG9ydDEsIEhVQl9MRURfQVVUTyk7CiAJCWh1Yi0+aW5kaWNhdG9yW3BvcnQxLTFdID0gSU5ESUNBVE9SX0FVVE87CiAJfQotIAotCS8qIERpc2Nvbm5lY3QgYW55IGV4aXN0aW5nIGRldmljZXMgdW5kZXIgdGhpcyBwb3J0ICovCi0JaWYgKGhkZXYtPmNoaWxkcmVuW3BvcnQxLTFdKQotCQl1c2JfZGlzY29ubmVjdCgmaGRldi0+Y2hpbGRyZW5bcG9ydDEtMV0pOwotCWNsZWFyX2JpdChwb3J0MSwgaHViLT5jaGFuZ2VfYml0cyk7CiAKICNpZmRlZglDT05GSUdfVVNCX09URwogCS8qIGR1cmluZyBITlAsIGRvbid0IHJlcGVhdCB0aGUgZGVib3VuY2UgKi8KIAlpZiAoaGRldi0+YnVzLT5pc19iX2hvc3QpCi0JCXBvcnRjaGFuZ2UgJj0gflVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OOworCQlwb3J0Y2hhbmdlICY9IH4oVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04gfAorCQkJCVVTQl9QT1JUX1NUQVRfQ19FTkFCTEUpOwogI2VuZGlmCiAKLQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKSB7CisJLyogVHJ5IHRvIHVzZSB0aGUgZGVib3VuY2UgZGVsYXkgZm9yIHByb3RlY3Rpb24gYWdhaW5zdAorCSAqIHBvcnQtZW5hYmxlIGNoYW5nZXMgY2F1c2VkLCBmb3IgZXhhbXBsZSwgYnkgRU1JLgorCSAqLworCWlmIChwb3J0Y2hhbmdlICYgKFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OIHwKKwkJCQlVU0JfUE9SVF9TVEFUX0NfRU5BQkxFKSkgewogCQlzdGF0dXMgPSBodWJfcG9ydF9kZWJvdW5jZShodWIsIHBvcnQxKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQkJZGV2X2VyciAoaHViX2RldiwgImNvbm5lY3QtZGVib3VuY2UgZmFpbGVkLCAiCiAJCQkJCQkicG9ydCAlZCBkaXNhYmxlZFxuIiwgcG9ydDEpOwotCQkJZ290byBkb25lOworCQkJcG9ydHN0YXR1cyAmPSB+VVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OOworCQl9IGVsc2UgeworCQkJcG9ydHN0YXR1cyA9IHN0YXR1czsKIAkJfQotCQlwb3J0c3RhdHVzID0gc3RhdHVzOwogCX0KIAotCS8qIFJldHVybiBub3cgaWYgbm90aGluZyBpcyBjb25uZWN0ZWQgKi8KKwkvKiBUcnkgdG8gcmVzdXNjaXRhdGUgYW4gZXhpc3RpbmcgZGV2aWNlICovCisJdWRldiA9IGhkZXYtPmNoaWxkcmVuW3BvcnQxLTFdOworCWlmICgocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikgJiYgdWRldiAmJgorCQkJdWRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7CisKKwkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCQlpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKSB7CisJCQlzdGF0dXMgPSAwOwkJLyogTm90aGluZyB0byBkbyAqLworCQl9IGVsc2UgaWYgKCF1ZGV2LT5wZXJzaXN0X2VuYWJsZWQpIHsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CS8qIE11c3RuJ3QgcmVzdXNjaXRhdGUgKi8KKworI2lmZGVmIENPTkZJR19VU0JfU1VTUEVORAorCQl9IGVsc2UgaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKKwkJCS8qIEZvciBhIHN1c3BlbmRlZCBkZXZpY2UsIHRyZWF0IHRoaXMgYXMgYQorCQkJICogcmVtb3RlIHdha2V1cCBldmVudC4KKwkJCSAqLworCQkJaWYgKHVkZXYtPmRvX3JlbW90ZV93YWtldXApCisJCQkJc3RhdHVzID0gcmVtb3RlX3dha2V1cCh1ZGV2KTsKKworCQkJLyogT3RoZXJ3aXNlIGxlYXZlIGl0IGJlOyBkZXZpY2VzIGNhbid0IHRlbGwgdGhlCisJCQkgKiBkaWZmZXJlbmNlIGJldHdlZW4gc3VzcGVuZGVkIGFuZCBkaXNhYmxlZC4KKwkJCSAqLworCQkJZWxzZQorCQkJCXN0YXR1cyA9IDA7CisjZW5kaWYKKworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKwkJfQorCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCWNsZWFyX2JpdChwb3J0MSwgaHViLT5jaGFuZ2VfYml0cyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBEaXNjb25uZWN0IGFueSBleGlzdGluZyBkZXZpY2VzIHVuZGVyIHRoaXMgcG9ydCAqLworCWlmICh1ZGV2KQorCQl1c2JfZGlzY29ubmVjdCgmaGRldi0+Y2hpbGRyZW5bcG9ydDEtMV0pOworCWNsZWFyX2JpdChwb3J0MSwgaHViLT5jaGFuZ2VfYml0cyk7CisKKwkvKiBSZXR1cm4gbm93IGlmIGRlYm91bmNpbmcgZmFpbGVkIG9yIG5vdGhpbmcgaXMgY29ubmVjdGVkICovCiAJaWYgKCEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikpIHsKIAogCQkvKiBtYXliZSBzd2l0Y2ggcG93ZXIgYmFjayBvbiAoZS5nLiByb290IGh1YiB3YXMgcmVzZXQpICovCkBAIC0yNjc3LDcgKzI3NTcsNiBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBTRVRfQ09ORklHX1RSSUVTOyBpKyspIHsKLQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAKIAkJLyogcmVhbGxvY2F0ZSBmb3IgZWFjaCBhdHRlbXB0LCBzaW5jZSByZWZlcmVuY2VzCiAJCSAqIHRvIHRoZSBwcmV2aW91cyBvbmUgY2FuIGVzY2FwZSBpbiB2YXJpb3VzIHdheXMKQEAgLTI4NTgsNyArMjkzNyw3IEBACiAJCS8qIElmIHRoZSBodWIgaGFzIGRpZWQsIGNsZWFuIHVwIGFmdGVyIGl0ICovCiAJCWlmIChoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHsKIAkJCWh1Yi0+ZXJyb3IgPSAtRU5PREVWOwotCQkJaHViX3N0b3AoaHViKTsKKwkJCWh1Yl9xdWllc2NlKGh1YiwgSFVCX0RJU0NPTk5FQ1QpOwogCQkJZ290byBsb29wOwogCQl9CiAKQEAgLTI4NzcsNyArMjk1Niw3IEBACiAJCQlkZXZfZGJnIChodWJfZGV2LCAicmVzZXR0aW5nIGZvciBlcnJvciAlZFxuIiwKIAkJCQlodWItPmVycm9yKTsKIAotCQkJcmV0ID0gdXNiX3Jlc2V0X2NvbXBvc2l0ZV9kZXZpY2UoaGRldiwgaW50Zik7CisJCQlyZXQgPSB1c2JfcmVzZXRfZGV2aWNlKGhkZXYpOwogCQkJaWYgKHJldCkgewogCQkJCWRldl9kYmcgKGh1Yl9kZXYsCiAJCQkJCSJlcnJvciByZXNldHRpbmcgaHViOiAlZFxuIiwgcmV0KTsKQEAgLTI4OTQsNyArMjk3Myw3IEBACiAJCQkJY29udGludWU7CiAJCQljb25uZWN0X2NoYW5nZSA9IHRlc3RfYml0KGksIGh1Yi0+Y2hhbmdlX2JpdHMpOwogCQkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgaHViLT5ldmVudF9iaXRzKSAmJgotCQkJCQkhY29ubmVjdF9jaGFuZ2UgJiYgIWh1Yi0+YWN0aXZhdGluZykKKwkJCQkJIWNvbm5lY3RfY2hhbmdlKQogCQkJCWNvbnRpbnVlOwogCiAJCQlyZXQgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBpLApAQCAtMjkwMiwxMSArMjk4MSw2IEBACiAJCQlpZiAocmV0IDwgMCkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGh1Yi0+YWN0aXZhdGluZyAmJiAhaGRldi0+Y2hpbGRyZW5baS0xXSAmJgotCQkJCQkocG9ydHN0YXR1cyAmCi0JCQkJCQlVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pKQotCQkJCWNvbm5lY3RfY2hhbmdlID0gMTsKLQogCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTikgewogCQkJCWNsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBpLAogCQkJCQlVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTik7CkBAIC0yOTQxLDExICszMDE1LDE2IEBACiAJCQl9CiAKIAkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQpIHsKKwkJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwogCQkJCWNsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBpLAogCQkJCQlVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7Ci0JCQkJaWYgKGhkZXYtPmNoaWxkcmVuW2ktMV0pIHsKKwkJCQl1ZGV2ID0gaGRldi0+Y2hpbGRyZW5baS0xXTsKKwkJCQlpZiAodWRldikgeworCQkJCQl1c2JfbG9ja19kZXZpY2UodWRldik7CiAJCQkJCXJldCA9IHJlbW90ZV93YWtldXAoaGRldi0+CiAJCQkJCQkJY2hpbGRyZW5baS0xXSk7CisJCQkJCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogCQkJCQlpZiAocmV0IDwgMCkKIAkJCQkJCWNvbm5lY3RfY2hhbmdlID0gMTsKIAkJCQl9IGVsc2UgewpAQCAtMzAwMiw4ICszMDgxLDYgQEAKIAkJCX0KIAkJfQogCi0JCWh1Yi0+YWN0aXZhdGluZyA9IDA7Ci0KIAkJLyogSWYgdGhpcyBpcyBhIHJvb3QgaHViLCB0ZWxsIHRoZSBIQ0QgaXQncyBva2F5IHRvCiAJCSAqIHJlLWVuYWJsZSBwb3J0LWNoYW5nZSBpbnRlcnJ1cHRzIG5vdy4gKi8KIAkJaWYgKCFoZGV2LT5wYXJlbnQgJiYgIWh1Yi0+YnVzeV9iaXRzWzBdKQpAQCAtMzE3MiwxMiArMzI0OSwxMiBAQAogfQogCiAvKioKLSAqIHVzYl9yZXNldF9kZXZpY2UgLSBwZXJmb3JtIGEgVVNCIHBvcnQgcmVzZXQgdG8gcmVpbml0aWFsaXplIGEgZGV2aWNlCisgKiB1c2JfcmVzZXRfYW5kX3ZlcmlmeV9kZXZpY2UgLSBwZXJmb3JtIGEgVVNCIHBvcnQgcmVzZXQgdG8gcmVpbml0aWFsaXplIGEgZGV2aWNlCiAgKiBAdWRldjogZGV2aWNlIHRvIHJlc2V0IChub3QgaW4gU1VTUEVOREVEIG9yIE5PVEFUVEFDSEVEIHN0YXRlKQogICoKICAqIFdBUk5JTkcgLSBkb24ndCB1c2UgdGhpcyByb3V0aW5lIHRvIHJlc2V0IGEgY29tcG9zaXRlIGRldmljZQogICogKG9uZSB3aXRoIG11bHRpcGxlIGludGVyZmFjZXMgb3duZWQgYnkgc2VwYXJhdGUgZHJpdmVycykhCi0gKiBVc2UgdXNiX3Jlc2V0X2NvbXBvc2l0ZV9kZXZpY2UoKSBpbnN0ZWFkLgorICogVXNlIHVzYl9yZXNldF9kZXZpY2UoKSBpbnN0ZWFkLgogICoKICAqIERvIGEgcG9ydCByZXNldCwgcmVhc3NpZ24gdGhlIGRldmljZSdzIGFkZHJlc3MsIGFuZCBlc3RhYmxpc2ggaXRzCiAgKiBmb3JtZXIgb3BlcmF0aW5nIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgcmVzZXQgZmFpbHMsIG9yIHRoZSBkZXZpY2UncwpAQCAtMzIwMSw3ICszMjc4LDcgQEAKICAqIGhvbGRpbmcgdGhlIGRldmljZSBsb2NrIGJlY2F1c2UgdGhlc2UgdGFza3Mgc2hvdWxkIGFsd2F5cyBjYWxsCiAgKiB1c2JfYXV0b3BtX3Jlc3VtZV9kZXZpY2UoKSwgdGhlcmVieSBwcmV2ZW50aW5nIGFueSB1bndhbnRlZCBhdXRvcmVzdW1lLgogICovCi1pbnQgdXNiX3Jlc2V0X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3N0YXRpYyBpbnQgdXNiX3Jlc2V0X2FuZF92ZXJpZnlfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlCQkqcGFyZW50X2hkZXYgPSB1ZGV2LT5wYXJlbnQ7CiAJc3RydWN0IHVzYl9odWIJCQkqcGFyZW50X2h1YjsKQEAgLTMyODksMjYgKzMzNjYsMjggQEAKIAlodWJfcG9ydF9sb2dpY2FsX2Rpc2Nvbm5lY3QocGFyZW50X2h1YiwgcG9ydDEpOwogCXJldHVybiAtRU5PREVWOwogfQotRVhQT1JUX1NZTUJPTF9HUEwodXNiX3Jlc2V0X2RldmljZSk7CiAKIC8qKgotICogdXNiX3Jlc2V0X2NvbXBvc2l0ZV9kZXZpY2UgLSB3YXJuIGludGVyZmFjZSBkcml2ZXJzIGFuZCBwZXJmb3JtIGEgVVNCIHBvcnQgcmVzZXQKKyAqIHVzYl9yZXNldF9kZXZpY2UgLSB3YXJuIGludGVyZmFjZSBkcml2ZXJzIGFuZCBwZXJmb3JtIGEgVVNCIHBvcnQgcmVzZXQKICAqIEB1ZGV2OiBkZXZpY2UgdG8gcmVzZXQgKG5vdCBpbiBTVVNQRU5ERUQgb3IgTk9UQVRUQUNIRUQgc3RhdGUpCi0gKiBAaWZhY2U6IGludGVyZmFjZSBib3VuZCB0byB0aGUgZHJpdmVyIG1ha2luZyB0aGUgcmVxdWVzdCAob3B0aW9uYWwpCiAgKgogICogV2FybnMgYWxsIGRyaXZlcnMgYm91bmQgdG8gcmVnaXN0ZXJlZCBpbnRlcmZhY2VzICh1c2luZyB0aGVpciBwcmVfcmVzZXQKICAqIG1ldGhvZCksIHBlcmZvcm1zIHRoZSBwb3J0IHJlc2V0LCBhbmQgdGhlbiBsZXRzIHRoZSBkcml2ZXJzIGtub3cgdGhhdAogICogdGhlIHJlc2V0IGlzIG92ZXIgKHVzaW5nIHRoZWlyIHBvc3RfcmVzZXQgbWV0aG9kKS4KICAqCi0gKiBSZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgZm9yIHVzYl9yZXNldF9kZXZpY2UoKS4KKyAqIFJldHVybiB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBmb3IgdXNiX3Jlc2V0X2FuZF92ZXJpZnlfZGV2aWNlKCkuCiAgKgogICogVGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2suICBGb3IgZXhhbXBsZSwgaXQncyBzYWZlIHRvIHVzZQogICogdGhpcyBmcm9tIGEgZHJpdmVyIHByb2JlKCkgcm91dGluZSBhZnRlciBkb3dubG9hZGluZyBuZXcgZmlybXdhcmUuCiAgKiBGb3IgY2FsbHMgdGhhdCBtaWdodCBub3Qgb2NjdXIgZHVyaW5nIHByb2JlKCksIGRyaXZlcnMgc2hvdWxkIGxvY2sKICAqIHRoZSBkZXZpY2UgdXNpbmcgdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCgpLgorICoKKyAqIElmIGFuIGludGVyZmFjZSBpcyBjdXJyZW50bHkgYmVpbmcgcHJvYmVkIG9yIGRpc2Nvbm5lY3RlZCwgd2UgYXNzdW1lCisgKiBpdHMgZHJpdmVyIGtub3dzIGhvdyB0byBoYW5kbGUgcmVzZXRzLiAgRm9yIGFsbCBvdGhlciBpbnRlcmZhY2VzLAorICogaWYgdGhlIGRyaXZlciBkb2Vzbid0IGhhdmUgcHJlX3Jlc2V0IGFuZCBwb3N0X3Jlc2V0IG1ldGhvZHMgdGhlbgorICogd2UgYXR0ZW1wdCB0byB1bmJpbmQgaXQgYW5kIHJlYmluZCBhZnRlcndhcmQuCiAgKi8KLWludCB1c2JfcmVzZXRfY29tcG9zaXRlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKLQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9yZXNldF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJaW50IHJldDsKIAlpbnQgaTsKQEAgLTMzMjQsNDAgKzM0MDMsNDcgQEAKIAkvKiBQcmV2ZW50IGF1dG9zdXNwZW5kIGR1cmluZyB0aGUgcmVzZXQgKi8KIAl1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodWRldik7CiAKLQlpZiAoaWZhY2UgJiYgaWZhY2UtPmNvbmRpdGlvbiAhPSBVU0JfSU5URVJGQUNFX0JJTkRJTkcpCi0JCWlmYWNlID0gTlVMTDsKLQogCWlmIChjb25maWcpIHsKIAkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgKytpKSB7CiAJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqY2ludGYgPSBjb25maWctPmludGVyZmFjZVtpXTsKIAkJCXN0cnVjdCB1c2JfZHJpdmVyICpkcnY7CisJCQlpbnQgdW5iaW5kID0gMDsKIAogCQkJaWYgKGNpbnRmLT5kZXYuZHJpdmVyKSB7CiAJCQkJZHJ2ID0gdG9fdXNiX2RyaXZlcihjaW50Zi0+ZGV2LmRyaXZlcik7Ci0JCQkJaWYgKGRydi0+cHJlX3Jlc2V0KQotCQkJCQkoZHJ2LT5wcmVfcmVzZXQpKGNpbnRmKTsKLQkvKiBGSVhNRTogVW5iaW5kIGlmIHByZV9yZXNldCByZXR1cm5zIGFuIGVycm9yIG9yIGlzbid0IGRlZmluZWQgKi8KKwkJCQlpZiAoZHJ2LT5wcmVfcmVzZXQgJiYgZHJ2LT5wb3N0X3Jlc2V0KQorCQkJCQl1bmJpbmQgPSAoZHJ2LT5wcmVfcmVzZXQpKGNpbnRmKTsKKwkJCQllbHNlIGlmIChjaW50Zi0+Y29uZGl0aW9uID09CisJCQkJCQlVU0JfSU5URVJGQUNFX0JPVU5EKQorCQkJCQl1bmJpbmQgPSAxOworCQkJCWlmICh1bmJpbmQpCisJCQkJCXVzYl9mb3JjZWRfdW5iaW5kX2ludGYoY2ludGYpOwogCQkJfQogCQl9CiAJfQogCi0JcmV0ID0gdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKwlyZXQgPSB1c2JfcmVzZXRfYW5kX3ZlcmlmeV9kZXZpY2UodWRldik7CiAKIAlpZiAoY29uZmlnKSB7CiAJCWZvciAoaSA9IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlcyAtIDE7IGkgPj0gMDsgLS1pKSB7CiAJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqY2ludGYgPSBjb25maWctPmludGVyZmFjZVtpXTsKIAkJCXN0cnVjdCB1c2JfZHJpdmVyICpkcnY7CisJCQlpbnQgcmViaW5kID0gY2ludGYtPm5lZWRzX2JpbmRpbmc7CiAKLQkJCWlmIChjaW50Zi0+ZGV2LmRyaXZlcikgeworCQkJaWYgKCFyZWJpbmQgJiYgY2ludGYtPmRldi5kcml2ZXIpIHsKIAkJCQlkcnYgPSB0b191c2JfZHJpdmVyKGNpbnRmLT5kZXYuZHJpdmVyKTsKIAkJCQlpZiAoZHJ2LT5wb3N0X3Jlc2V0KQotCQkJCQkoZHJ2LT5wb3N0X3Jlc2V0KShjaW50Zik7Ci0JLyogRklYTUU6IFVuYmluZCBpZiBwb3N0X3Jlc2V0IHJldHVybnMgYW4gZXJyb3Igb3IgaXNuJ3QgZGVmaW5lZCAqLworCQkJCQlyZWJpbmQgPSAoZHJ2LT5wb3N0X3Jlc2V0KShjaW50Zik7CisJCQkJZWxzZSBpZiAoY2ludGYtPmNvbmRpdGlvbiA9PQorCQkJCQkJVVNCX0lOVEVSRkFDRV9CT1VORCkKKwkJCQkJcmViaW5kID0gMTsKIAkJCX0KKwkJCWlmIChyZWJpbmQpCisJCQkJdXNiX3JlYmluZF9pbnRmKGNpbnRmKTsKIAkJfQogCX0KIAogCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UodWRldik7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9yZXNldF9jb21wb3NpdGVfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9yZXNldF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IDFkMjUzZGQuLmRiNDEwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTcxMiwyNSArNzEyLDExIEBACiAKIHN0YXRpYyB2b2lkIHVzYmZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGV2X3N0YXRlICpkczsKLQlzdHJ1Y3Qgc2lnaW5mbyBzaW5mbzsKLQogCWlmIChkZXYtPnVzYmZzX2RlbnRyeSkgewogCQlmc19yZW1vdmVfZmlsZSAoZGV2LT51c2Jmc19kZW50cnkpOwogCQlkZXYtPnVzYmZzX2RlbnRyeSA9IE5VTEw7CiAJfQotCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2LT5maWxlbGlzdCkpIHsKLQkJZHMgPSBsaXN0X2VudHJ5KGRldi0+ZmlsZWxpc3QubmV4dCwgc3RydWN0IGRldl9zdGF0ZSwgbGlzdCk7Ci0JCXdha2VfdXBfYWxsKCZkcy0+d2FpdCk7Ci0JCWxpc3RfZGVsX2luaXQoJmRzLT5saXN0KTsKLQkJaWYgKGRzLT5kaXNjc2lnbnIpIHsKLQkJCXNpbmZvLnNpX3NpZ25vID0gZHMtPmRpc2NzaWducjsKLQkJCXNpbmZvLnNpX2Vycm5vID0gRVBJUEU7Ci0JCQlzaW5mby5zaV9jb2RlID0gU0lfQVNZTkNJTzsKLQkJCXNpbmZvLnNpX2FkZHIgPSBkcy0+ZGlzY2NvbnRleHQ7Ci0JCQlraWxsX3BpZF9pbmZvX2FzX3VpZChkcy0+ZGlzY3NpZ25yLCAmc2luZm8sIGRzLT5kaXNjX3BpZCwgZHMtPmRpc2NfdWlkLCBkcy0+ZGlzY19ldWlkLCBkcy0+c2VjaWQpOwotCQl9Ci0JfQorCXVzYl9mc19jbGFzc2Rldl9jb21tb25fcmVtb3ZlKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgdXNiZnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggZmU0N2QxNC4uMmZjYzA2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTQwMCw3ICs0MDAsNyBAQAogCWlmICh1c2JfcGlwZWluKHBpcGUpKQogCQl1cmJfZmxhZ3MgfD0gVVJCX1NIT1JUX05PVF9PSzsKIAotCWZvciAoaSA9IDA7IGkgPCBpby0+ZW50cmllczsgaSsrKSB7CisJZm9yX2VhY2hfc2coc2csIHNnLCBpby0+ZW50cmllcywgaSkgewogCQl1bnNpZ25lZCBsZW47CiAKIAkJaW8tPnVyYnNbaV0gPSB1c2JfYWxsb2NfdXJiKDAsIG1lbV9mbGFncyk7CkBAIC00MzQsMTcgKzQzNCwxNyBAQAogCQkgKiB0byBwcmV2ZW50IHN0YWxlIHBvaW50ZXJzIGFuZCB0byBoZWxwIHNwb3QgYnVncy4KIAkJICovCiAJCWlmIChkbWEpIHsKLQkJCWlvLT51cmJzW2ldLT50cmFuc2Zlcl9kbWEgPSBzZ19kbWFfYWRkcmVzcyhzZyArIGkpOwotCQkJbGVuID0gc2dfZG1hX2xlbihzZyArIGkpOworCQkJaW8tPnVyYnNbaV0tPnRyYW5zZmVyX2RtYSA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCWxlbiA9IHNnX2RtYV9sZW4oc2cpOwogI2lmIGRlZmluZWQoQ09ORklHX0hJR0hNRU0pIHx8IGRlZmluZWQoQ09ORklHX0dBUlRfSU9NTVUpCiAJCQlpby0+dXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKICNlbHNlCi0JCQlpby0+dXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0gc2dfdmlydCgmc2dbaV0pOworCQkJaW8tPnVyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciA9IHNnX3ZpcnQoc2cpOwogI2VuZGlmCiAJCX0gZWxzZSB7CiAJCQkvKiBoYyBtYXkgdXNlIF9vbmx5XyB0cmFuc2Zlcl9idWZmZXIgKi8KLQkJCWlvLT51cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPSBzZ192aXJ0KCZzZ1tpXSk7Ci0JCQlsZW4gPSBzZ1tpXS5sZW5ndGg7CisJCQlpby0+dXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0gc2dfdmlydChzZyk7CisJCQlsZW4gPSBzZy0+bGVuZ3RoOwogCQl9CiAKIAkJaWYgKGxlbmd0aCkgewpAQCAtMTA5MCw3ICsxMDkwLDcgQEAKIAkJCWlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoJmludGVyZmFjZS0+ZGV2KSkKIAkJCQljb250aW51ZTsKIAkJCWRldl9kYmcoJmRldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBpbnRlcmZhY2UgJXNcbiIsCi0JCQkJaW50ZXJmYWNlLT5kZXYuYnVzX2lkKTsKKwkJCQlkZXZfbmFtZSgmaW50ZXJmYWNlLT5kZXYpKTsKIAkJCWRldmljZV9kZWwoJmludGVyZmFjZS0+ZGV2KTsKIAkJCXVzYl9yZW1vdmVfc3lzZnNfaW50Zl9maWxlcyhpbnRlcmZhY2UpOwogCQl9CkBAIC0xNDc2LDcgKzE0NzYsNyBAQAogICoKICAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cy4gVGhlIGNhbGxpbmcgY29udGV4dCBtdXN0IGJlIGFibGUgdG8gc2xlZXAsCiAgKiBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2ssIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBkcml2ZXIgbW9kZWwncyBVU0IKLSAqIGJ1cyBtdXRleDsgdXNiIGRldmljZSBkcml2ZXIgcHJvYmUoKSBtZXRob2RzIGNhbm5vdCB1c2UgdGhpcyByb3V0aW5lLgorICogYnVzIG11dGV4OyB1c2IgaW50ZXJmYWNlIGRyaXZlciBwcm9iZSgpIG1ldGhvZHMgY2Fubm90IHVzZSB0aGlzIHJvdXRpbmUuCiAgKgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGVsc2UgdGhlIHN0YXR1cyBjb2RlIHJldHVybmVkIGJ5IHRoZQogICogdW5kZXJseWluZyBjYWxsIHRoYXQgZmFpbGVkLiAgT24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCBlYWNoIGludGVyZmFjZQpAQCAtMTYxMSw3ICsxNjExLDcgQEAKIAkJaW50Zi0+ZGV2LmRtYV9tYXNrID0gZGV2LT5kZXYuZG1hX21hc2s7CiAJCWRldmljZV9pbml0aWFsaXplKCZpbnRmLT5kZXYpOwogCQltYXJrX3F1aWVzY2VkKGludGYpOwotCQlzcHJpbnRmKCZpbnRmLT5kZXYuYnVzX2lkWzBdLCAiJWQtJXM6JWQuJWQiLAorCQlkZXZfc2V0X25hbWUoJmludGYtPmRldiwgIiVkLSVzOiVkLiVkIiwKIAkJCWRldi0+YnVzLT5idXNudW0sIGRldi0+ZGV2cGF0aCwKIAkJCWNvbmZpZ3VyYXRpb24sIGFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIAl9CkBAIC0xNjMxLDEyICsxNjMxLDEyIEBACiAKIAkJZGV2X2RiZygmZGV2LT5kZXYsCiAJCQkiYWRkaW5nICVzIChjb25maWcgIyVkLCBpbnRlcmZhY2UgJWQpXG4iLAotCQkJaW50Zi0+ZGV2LmJ1c19pZCwgY29uZmlndXJhdGlvbiwKKwkJCWRldl9uYW1lKCZpbnRmLT5kZXYpLCBjb25maWd1cmF0aW9uLAogCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAJCXJldCA9IGRldmljZV9hZGQoJmludGYtPmRldik7CiAJCWlmIChyZXQgIT0gMCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJkZXZpY2VfYWRkKCVzKSAtLT4gJWRcbiIsCi0JCQkJaW50Zi0+ZGV2LmJ1c19pZCwgcmV0KTsKKwkJCQlkZXZfbmFtZSgmaW50Zi0+ZGV2KSwgcmV0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXVzYl9jcmVhdGVfc3lzZnNfaW50Zl9maWxlcyhpbnRmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IDMyNTc3NDMuLjg0ZmNhYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtMzA4LDcgKzMwOCw3IEBACiAJICogYnkgbG9jYXRpb24gZm9yIGRpYWdub3N0aWNzLCB0b29scywgZHJpdmVyIG1vZGVsLCBldGMuICBUaGUKIAkgKiBzdHJpbmcgaXMgYSBwYXRoIGFsb25nIGh1YiBwb3J0cywgZnJvbSB0aGUgcm9vdC4gIEVhY2ggZGV2aWNlJ3MKIAkgKiBkZXYtPmRldnBhdGggd2lsbCBiZSBzdGFibGUgdW50aWwgVVNCIGlzIHJlLWNhYmxlZCwgYW5kIGh1YnMKLQkgKiBhcmUgb2Z0ZW4gbGFiZWxlZCB3aXRoIHRoZXNlIHBvcnQgbnVtYmVycy4gIFRoZSBidXNfaWQgaXNuJ3QKKwkgKiBhcmUgb2Z0ZW4gbGFiZWxlZCB3aXRoIHRoZXNlIHBvcnQgbnVtYmVycy4gIFRoZSBuYW1lIGlzbid0CiAJICogYXMgc3RhYmxlOiAgYnVzLT5idXNudW0gY2hhbmdlcyBlYXNpbHkgZnJvbSBtb2Rwcm9iZSBvcmRlciwKIAkgKiBjYXJkYnVzIG9yIHBjaSBob3RwbHVnZ2luZywgYW5kIHNvIG9uLgogCSAqLwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJCWRldi0+ZGV2cGF0aFswXSA9ICcwJzsKIAogCQlkZXYtPmRldi5wYXJlbnQgPSBidXMtPmNvbnRyb2xsZXI7Ci0JCXNwcmludGYoJmRldi0+ZGV2LmJ1c19pZFswXSwgInVzYiVkIiwgYnVzLT5idXNudW0pOworCQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAidXNiJWQiLCBidXMtPmJ1c251bSk7CiAJCXJvb3RfaHViID0gMTsKIAl9IGVsc2UgewogCQkvKiBtYXRjaCBhbnkgbGFiZWxpbmcgb24gdGhlIGh1YnM7IGl0J3Mgb25lLWJhc2VkICovCkBAIC0zMjgsOCArMzI4LDcgQEAKIAkJCQkiJXMuJWQiLCBwYXJlbnQtPmRldnBhdGgsIHBvcnQxKTsKIAogCQlkZXYtPmRldi5wYXJlbnQgPSAmcGFyZW50LT5kZXY7Ci0JCXNwcmludGYoJmRldi0+ZGV2LmJ1c19pZFswXSwgIiVkLSVzIiwKLQkJCWJ1cy0+YnVzbnVtLCBkZXYtPmRldnBhdGgpOworCQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJWQtJXMiLCBidXMtPmJ1c251bSwgZGV2LT5kZXZwYXRoKTsKIAogCQkvKiBodWIgZHJpdmVyIHNldHMgdXAgVFQgcmVjb3JkcyAqLwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmggYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCmluZGV4IDFhOGJjMjEuLmQ5YTZlMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApAQCAtMjksNiArMjksOCBAQAogZXh0ZXJuIHZvaWQgdXNiX2tpY2tfa2h1YmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHVzYl9tYXRjaF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworZXh0ZXJuIHZvaWQgdXNiX2ZvcmNlZF91bmJpbmRfaW50ZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitleHRlcm4gdm9pZCB1c2JfcmViaW5kX2ludGYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogCiBleHRlcm4gaW50ICB1c2JfaHViX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB1c2JfaHViX2NsZWFudXAodm9pZCk7CkBAIC0xNDAsMjYgKzE0MiwxMSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlc19mb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZGV2X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiB2b2lkIHVzYmZzX2Nvbm5fZGlzY19ldmVudCh2b2lkKTsKK2V4dGVybiB2b2lkIHVzYl9mc19jbGFzc2Rldl9jb21tb25fcmVtb3ZlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKIAogZXh0ZXJuIGludCB1c2JfZGV2aW9faW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHVzYl9kZXZpb19jbGVhbnVwKHZvaWQpOwogCi1zdHJ1Y3QgZGV2X3N0YXRlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7ICAgICAgLyogc3RhdGUgbGlzdCAqLwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGZpbGUgKmZpbGU7Ci0Jc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgICAgIC8qIHByb3RlY3RzIHRoZSBhc3luYyB1cmIgbGlzdHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGFzeW5jX3BlbmRpbmc7Ci0Jc3RydWN0IGxpc3RfaGVhZCBhc3luY19jb21wbGV0ZWQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsgICAgIC8qIHdha2UgdXAgaWYgYSByZXF1ZXN0IGNvbXBsZXRlZCAqLwotCXVuc2lnbmVkIGludCBkaXNjc2lnbnI7Ci0Jc3RydWN0IHBpZCAqZGlzY19waWQ7Ci0JdWlkX3QgZGlzY191aWQsIGRpc2NfZXVpZDsKLQl2b2lkIF9fdXNlciAqZGlzY2NvbnRleHQ7Ci0JdW5zaWduZWQgbG9uZyBpZmNsYWltZWQ7Ci0JdTMyIHNlY2lkOwotfTsKLQogLyogaW50ZXJuYWwgbm90aWZ5IHN0dWZmICovCiBleHRlcm4gdm9pZCB1c2Jfbm90aWZ5X2FkZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogZXh0ZXJuIHZvaWQgdXNiX25vdGlmeV9yZW1vdmVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggZDZiYWIwZC4uYzZhOGM2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTU4Niw2ICs1ODYsMjAgQEAKIAkgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X3ByaW50ZXIudHh0CiAJICB3aGljaCBpbmNsdWRlcyBzYW1wbGUgY29kZSBmb3IgYWNjZXNzaW5nIHRoZSBkZXZpY2UgZmlsZS4KIAorY29uZmlnIFVTQl9DRENfQ09NUE9TSVRFCisJdHJpc3RhdGUgIkNEQyBDb21wb3NpdGUgRGV2aWNlIChFdGhlcm5ldCBhbmQgQUNNKSIKKwlkZXBlbmRzIG9uIE5FVAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHR3byBmdW5jdGlvbnMgaW4gb25lIGNvbmZpZ3VyYXRpb246CisJICBhIENEQyBFdGhlcm5ldCAoRUNNKSBsaW5rLCBhbmQgYSBDREMgQUNNIChzZXJpYWwgcG9ydCkgbGluay4KKworCSAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgZm91ciBidWxrIGFuZCB0d28gaW50ZXJydXB0IGVuZHBvaW50cywKKwkgIHBsdXMgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIGFsdHNldHRpbmdzLiAgTm90IGFsbCBwZXJpcGhlcmFsCisJICBjb250cm9sbGVycyBhcmUgdGhhdCBjYXBhYmxlLgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZS4KKwogIyBwdXQgZHJpdmVycyB0aGF0IG5lZWQgaXNvY2hyb25vdXMgdHJhbnNmZXIgc3VwcG9ydCAoZm9yIGF1ZGlvCiAjIG9yIHZpZGVvIGNsYXNzIGdhZGdldCBkcml2ZXJzKSwgb3Igc3BlY2lmaWMgaGFyZHdhcmUsIGhlcmUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQppbmRleCBlMjU4YWZkLi5mY2I1Y2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCkBAIC0yMiwxOCArMjIsMjIgQEAKICMKICMgVVNCIGdhZGdldCBkcml2ZXJzCiAjCi1nX3plcm8tb2JqcwkJCTo9IHplcm8ubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KLWdfZXRoZXItb2JqcwkJCTo9IGV0aGVyLm8gdXNic3RyaW5nLm8gY29uZmlnLm8gZXBhdXRvY29uZi5vCi1nX3NlcmlhbC1vYmpzCQkJOj0gc2VyaWFsLm8gdXNic3RyaW5nLm8gY29uZmlnLm8gZXBhdXRvY29uZi5vCitDX1VUSUxTID0JY29tcG9zaXRlLm8gdXNic3RyaW5nLm8gY29uZmlnLm8gZXBhdXRvY29uZi5vCisKK2dfemVyby1vYmpzCQkJOj0gemVyby5vIGZfc291cmNlc2luay5vIGZfbG9vcGJhY2subyAkKENfVVRJTFMpCitnX2V0aGVyLW9ianMJCQk6PSBldGhlci5vIHVfZXRoZXIubyBmX3N1YnNldC5vIGZfZWNtLm8gJChDX1VUSUxTKQorZ19zZXJpYWwtb2JqcwkJCTo9IHNlcmlhbC5vIHVfc2VyaWFsLm8gZl9hY20ubyBmX3NlcmlhbC5vICQoQ19VVElMUykKIGdfbWlkaS1vYmpzCQkJOj0gZ21pZGkubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KIGdhZGdldGZzLW9ianMJCQk6PSBpbm9kZS5vCiBnX2ZpbGVfc3RvcmFnZS1vYmpzCQk6PSBmaWxlX3N0b3JhZ2UubyB1c2JzdHJpbmcubyBjb25maWcubyBcCiAJCQkJCWVwYXV0b2NvbmYubwogZ19wcmludGVyLW9ianMJCQk6PSBwcmludGVyLm8gdXNic3RyaW5nLm8gY29uZmlnLm8gXAogCQkJCQllcGF1dG9jb25mLm8KK2dfY2RjLW9ianMJCQk6PSBjZGMyLm8gdV9ldGhlci5vIGZfZWNtLm8gXAorCQkJCQl1X3NlcmlhbC5vIGZfYWNtLm8gJChDX1VUSUxTKQogCiBpZmVxICgkKENPTkZJR19VU0JfRVRIX1JORElTKSx5KQotCWdfZXRoZXItb2JqcwkJKz0gcm5kaXMubworCWdfZXRoZXItb2JqcwkJKz0gZl9ybmRpcy5vIHJuZGlzLm8KIGVuZGlmCiAgCiBvYmotJChDT05GSUdfVVNCX1pFUk8pCQkrPSBnX3plcm8ubwpAQCAtNDMsNCArNDcsNSBAQAogb2JqLSQoQ09ORklHX1VTQl9HX1NFUklBTCkJKz0gZ19zZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9HX1BSSU5URVIpCSs9IGdfcHJpbnRlci5vCiBvYmotJChDT05GSUdfVVNCX01JRElfR0FER0VUKQkrPSBnX21pZGkubworb2JqLSQoQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFKSArPSBnX2NkYy5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCmluZGV4IGYyNjFkMmEuLjE1MDBlMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYwpAQCAtMzM0Miw3ICszMzQyLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKIAlkZXYtPmdhZGdldC5vcHMgPSAmdWRjX29wczsKIAotCXN0cmNweShkZXYtPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2X3NldF9uYW1lKCZkZXYtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKIAlkZXYtPmdhZGdldC5kZXYucmVsZWFzZSA9IGdhZGdldF9yZWxlYXNlOwogCWRldi0+Z2FkZ2V0Lm5hbWUgPSBuYW1lOwogCWRldi0+Z2FkZ2V0Lm5hbWUgPSBuYW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwppbmRleCBiNmIyYTBhLi5lMmQ4YTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwpAQCAtMTY4Nyw2ICsxNjg3LDE5IEBACiAJCQkJdWRjLT5ib2FyZC5wdWxsdXBfYWN0aXZlX2xvdyk7CiAJfQogCisJLyogbmV3ZXIgY2hpcHMgaGF2ZSBtb3JlIEZJRk8gbWVtb3J5IHRoYW4gcm05MjAwICovCisJaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpKSB7CisJCXVkYy0+ZXBbMF0ubWF4cGFja2V0ID0gNjQ7CisJCXVkYy0+ZXBbM10ubWF4cGFja2V0ID0gNjQ7CisJCXVkYy0+ZXBbNF0ubWF4cGFja2V0ID0gNTEyOworCQl1ZGMtPmVwWzVdLm1heHBhY2tldCA9IDUxMjsKKwl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MSgpKSB7CisJCXVkYy0+ZXBbM10ubWF4cGFja2V0ID0gNjQ7CisJfSBlbHNlIGlmIChjcHVfaXNfYXQ5MXNhbTkyNjMoKSkgeworCQl1ZGMtPmVwWzBdLm1heHBhY2tldCA9IDY0OworCQl1ZGMtPmVwWzNdLm1heHBhY2tldCA9IDY0OworCX0KKwogCXVkYy0+dWRwX2Jhc2VhZGRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlpZiAoIXVkYy0+dWRwX2Jhc2VhZGRyKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDkwZDAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIGNkYzIuYyAtLSBDREMgQ29tcG9zaXRlIGRyaXZlciwgd2l0aCBFQ00gYW5kIEFDTSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKworI2luY2x1ZGUgInVfZXRoZXIuaCIKKyNpbmNsdWRlICJ1X3NlcmlhbC5oIgorCisKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSJDREMgQ29tcG9zaXRlIEdhZGdldCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSJLaW5nIEthbWVoYW1laGEgRGF5IDIwMDgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERPIE5PVCBSRVVTRSBUSEVTRSBJRHMgd2l0aCBhIHByb3RvY29sLWluY29tcGF0aWJsZSBkcml2ZXIhISAgRXZlciEhCisgKiBJbnN0ZWFkOiAgYWxsb2NhdGUgeW91ciBvd24sIHVzaW5nIG5vcm1hbCBVU0ItSUYgcHJvY2VkdXJlcy4KKyAqLworCisvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KKyAqIEl0J3MgZm9yIGRldmljZXMgd2l0aCBvbmx5IHRoaXMgY29tcG9zaXRlIENEQyBjb25maWd1cmF0aW9uLgorICovCisjZGVmaW5lIENEQ19WRU5ET1JfTlVNCQkweDA1MjUJLyogTmV0Q2hpcCAqLworI2RlZmluZSBDRENfUFJPRFVDVF9OVU0JCTB4YTRhYQkvKiBDREMgQ29tcG9zaXRlOiBFQ00gKyBBQ00gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAorCisJLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisKKwkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAorCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAorCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAorCS8qIC5iTWF4UGFja2V0U2l6ZTAgPSBmKGhhcmR3YXJlKSAqLworCisJLyogVmVuZG9yIGFuZCBwcm9kdWN0IGlkIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzLiAgKi8KKwkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihDRENfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KENEQ19QUk9EVUNUX05VTSksCisJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCisJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCisJLyogLmlQcm9kdWN0ID0gRFlOQU1JQyAqLworCS8qIE5PIFNFUklBTCBOVU1CRVIgKi8KKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yIG90Z19kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBvdGdfZGVzY3JpcHRvciwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKKworCS8qIFJFVklTSVQgU1JQLW9ubHkgaGFyZHdhcmUgaXMgcG9zc2libGUsIGFsdGhvdWdoCisJICogaXQgd291bGQgbm90IGJlIGNhbGxlZCAiT1RHIiAuLi4KKwkgKi8KKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9PVEdfU1JQIHwgVVNCX09UR19ITlAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqb3RnX2Rlc2NbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJTlVMTCwKK307CisKKworLyogc3RyaW5nIElEcyBhcmUgYXNzaWduZWQgZHluYW1pY2FsbHkgKi8KKworI2RlZmluZSBTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWAkJMAorI2RlZmluZSBTVFJJTkdfUFJPRFVDVF9JRFgJCTEKKworc3RhdGljIGNoYXIgbWFudWZhY3R1cmVyWzUwXTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nIHN0cmluZ3NfZGV2W10gPSB7CisJW1NUUklOR19NQU5VRkFDVFVSRVJfSURYXS5zID0gbWFudWZhY3R1cmVyLAorCVtTVFJJTkdfUFJPRFVDVF9JRFhdLnMgPSBEUklWRVJfREVTQywKKwl7ICB9IC8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBzdHJpbmd0YWJfZGV2ID0geworCS5sYW5ndWFnZQk9IDB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncwk9IHN0cmluZ3NfZGV2LAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKmRldl9zdHJpbmdzW10gPSB7CisJJnN0cmluZ3RhYl9kZXYsCisJTlVMTCwKK307CisKK3N0YXRpYyB1OCBob3N0YWRkcltFVEhfQUxFTl07CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBXZSBfYWx3YXlzXyBoYXZlIGJvdGggQ0RDIEVDTSBhbmQgQ0RDIEFDTSBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNkY19kb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQoreworCWludAlzdGF0dXM7CisKKwlpZiAoZ2FkZ2V0X2lzX290ZyhjLT5jZGV2LT5nYWRnZXQpKSB7CisJCWMtPmRlc2NyaXB0b3JzID0gb3RnX2Rlc2M7CisJCWMtPmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJfQorCisJc3RhdHVzID0gZWNtX2JpbmRfY29uZmlnKGMsIGhvc3RhZGRyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXN0YXR1cyA9IGFjbV9iaW5kX2NvbmZpZyhjLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIGNkY19jb25maWdfZHJpdmVyID0geworCS5sYWJlbAkJCT0gIkNEQyBDb21wb3NpdGUgKEVDTSArIEFDTSkiLAorCS5iaW5kCQkJPSBjZGNfZG9fY29uZmlnLAorCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gMSwKKwkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJLmJNYXhQb3dlcgkJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCBjZGNfYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJaW50CQkJZ2NudW07CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGNkZXYtPmdhZGdldDsKKwlpbnQJCQlzdGF0dXM7CisKKwlpZiAoIWNhbl9zdXBwb3J0X2VjbShjZGV2LT5nYWRnZXQpKSB7CisJCUVSUk9SKGNkZXYsICJjb250cm9sbGVyICclcycgbm90IHVzYWJsZVxuIiwgZ2FkZ2V0LT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogc2V0IHVwIG5ldHdvcmsgbGluayBsYXllciAqLworCXN0YXR1cyA9IGdldGhlcl9zZXR1cChjZGV2LT5nYWRnZXQsIGhvc3RhZGRyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIHNldCB1cCBzZXJpYWwgbGluayBsYXllciAqLworCXN0YXR1cyA9IGdzZXJpYWxfc2V0dXAoY2Rldi0+Z2FkZ2V0LCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsMDsKKworCWdjbnVtID0gdXNiX2dhZGdldF9jb250cm9sbGVyX251bWJlcihnYWRnZXQpOworCWlmIChnY251bSA+PSAwKQorCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNigweDAzMDAgfCBnY251bSk7CisJZWxzZSB7CisJCS8qIFdlIGFzc3VtZSB0aGF0IGNhbl9zdXBwb3J0X2VjbSgpIHRlbGxzIHRoZSB0cnV0aDsKKwkJICogYnV0IGlmIHRoZSBjb250cm9sbGVyIGlzbid0IHJlY29nbml6ZWQgYXQgYWxsIHRoZW4KKwkJICogdGhhdCBhc3N1bXB0aW9uIGlzIGEgYml0IG1vcmUgbGlrZWx5IHRvIGJlIHdyb25nLgorCQkgKi8KKwkJV0FSTihjZGV2LCAiY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkOyB0cnlpbmcgJXNcbiIsCisJCQkJZ2FkZ2V0LT5uYW1lLAorCQkJCWNkY19jb25maWdfZHJpdmVyLmxhYmVsKTsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKKwl9CisKKworCS8qIEFsbG9jYXRlIHN0cmluZyBkZXNjcmlwdG9yIG51bWJlcnMgLi4uIG5vdGUgdGhhdCBzdHJpbmcKKwkgKiBjb250ZW50cyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY29tcG9zaXRlX2RldiBnbHVlLgorCSAqLworCisJLyogZGV2aWNlIGRlc2NyaXB0b3Igc3RyaW5nczogbWFudWZhY3R1cmVyLCBwcm9kdWN0ICovCisJc25wcmludGYobWFudWZhY3R1cmVyLCBzaXplb2YgbWFudWZhY3R1cmVyLCAiJXMgJXMgd2l0aCAlcyIsCisJCWluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKKwkJZ2FkZ2V0LT5uYW1lKTsKKwlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWwxOworCXN0cmluZ3NfZGV2W1NUUklOR19NQU5VRkFDVFVSRVJfSURYXS5pZCA9IHN0YXR1czsKKwlkZXZpY2VfZGVzYy5pTWFudWZhY3R1cmVyID0gc3RhdHVzOworCisJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsMTsKKwlzdHJpbmdzX2RldltTVFJJTkdfUFJPRFVDVF9JRFhdLmlkID0gc3RhdHVzOworCWRldmljZV9kZXNjLmlQcm9kdWN0ID0gc3RhdHVzOworCisJLyogcmVnaXN0ZXIgb3VyIGNvbmZpZ3VyYXRpb24gKi8KKwlzdGF0dXMgPSB1c2JfYWRkX2NvbmZpZyhjZGV2LCAmY2RjX2NvbmZpZ19kcml2ZXIpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWwxOworCisJSU5GTyhjZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7CisKK2ZhaWwxOgorCWdzZXJpYWxfY2xlYW51cCgpOworZmFpbDA6CisJZ2V0aGVyX2NsZWFudXAoKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBjZGNfdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlnc2VyaWFsX2NsZWFudXAoKTsKKwlnZXRoZXJfY2xlYW51cCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyIGNkY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gImdfY2RjIiwKKwkuZGV2CQk9ICZkZXZpY2VfZGVzYywKKwkuc3RyaW5ncwk9IGRldl9zdHJpbmdzLAorCS5iaW5kCQk9IGNkY19iaW5kLAorCS51bmJpbmQJCT0gX19leGl0X3AoY2RjX3VuYmluZCksCit9OworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfY29tcG9zaXRlX3JlZ2lzdGVyKCZjZGNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCh2b2lkKQoreworCXVzYl9jb21wb3NpdGVfdW5yZWdpc3RlcigmY2RjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChjbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWM4NzZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC0wLDAgKzEsMTA0MSBAQAorLyoKKyAqIGNvbXBvc2l0ZS5jIC0gaW5mcmFzdHJ1Y3R1cmUgZm9yIENvbXBvc2l0ZSBVU0IgR2FkZ2V0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qICNkZWZpbmUgVkVSQk9TRV9ERUJVRyAqLworCisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IvY29tcG9zaXRlLmg+CisKKworLyoKKyAqIFRoZSBjb2RlIGluIHRoaXMgZmlsZSBpcyB1dGlsaXR5IGNvZGUsIHVzZWQgdG8gYnVpbGQgYSBnYWRnZXQgZHJpdmVyCisgKiBmcm9tIG9uZSBvciBtb3JlICJmdW5jdGlvbiIgZHJpdmVycywgb25lIG9yIG1vcmUgImNvbmZpZ3VyYXRpb24iCisgKiBvYmplY3RzLCBhbmQgYSAidXNiX2NvbXBvc2l0ZV9kcml2ZXIiIGJ5IGdsdWluZyB0aGVtIHRvZ2V0aGVyIGFsb25nCisgKiB3aXRoIHRoZSByZWxldmFudCBkZXZpY2Utd2lkZSBkYXRhLgorICovCisKKy8qIGJpZyBlbm91Z2ggdG8gaG9sZCBvdXIgYmlnZ2VzdCBkZXNjcmlwdG9yICovCisjZGVmaW5lIFVTQl9CVUZTSVoJNTEyCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgKmNvbXBvc2l0ZTsKKworLyogU29tZSBzeXN0ZW1zIHdpbGwgbmVlZCBydW50aW1lIG92ZXJyaWRlcyBmb3IgdGhlICBwcm9kdWN0IGlkZW50aWZlcnMKKyAqIHB1Ymxpc2hlZCBpbiB0aGUgZGV2aWNlIGRlc2NyaXB0b3IsIGVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3Mgb3IgYm90aC4KKyAqIFN0cmluZyBwYXJhbWV0ZXJzIGFyZSBpbiBVVEYtOCAoc3VwZXJzZXQgb2YgQVNDSUkncyA3IGJpdCBjaGFyYWN0ZXJzKS4KKyAqLworCitzdGF0aWMgdXNob3J0IGlkVmVuZG9yOworbW9kdWxlX3BhcmFtKGlkVmVuZG9yLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpZFZlbmRvciwgIlVTQiBWZW5kb3IgSUQiKTsKKworc3RhdGljIHVzaG9ydCBpZFByb2R1Y3Q7Cittb2R1bGVfcGFyYW0oaWRQcm9kdWN0LCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpZFByb2R1Y3QsICJVU0IgUHJvZHVjdCBJRCIpOworCitzdGF0aWMgdXNob3J0IGJjZERldmljZTsKK21vZHVsZV9wYXJhbShiY2REZXZpY2UsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGJjZERldmljZSwgIlVTQiBEZXZpY2UgdmVyc2lvbiAoQkNEKSIpOworCitzdGF0aWMgY2hhciAqaU1hbnVmYWN0dXJlcjsKK21vZHVsZV9wYXJhbShpTWFudWZhY3R1cmVyLCBjaGFycCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlNYW51ZmFjdHVyZXIsICJVU0IgTWFudWZhY3R1cmVyIHN0cmluZyIpOworCitzdGF0aWMgY2hhciAqaVByb2R1Y3Q7Cittb2R1bGVfcGFyYW0oaVByb2R1Y3QsIGNoYXJwLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaVByb2R1Y3QsICJVU0IgUHJvZHVjdCBzdHJpbmciKTsKKworc3RhdGljIGNoYXIgKmlTZXJpYWxOdW1iZXI7Cittb2R1bGVfcGFyYW0oaVNlcmlhbE51bWJlciwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyhpU2VyaWFsTnVtYmVyLCAiU2VyaWFsTnVtYmVyIHN0cmluZyIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9hZGRfZnVuY3Rpb24oKSAtIGFkZCBhIGZ1bmN0aW9uIHRvIGEgY29uZmlndXJhdGlvbgorICogQGNvbmZpZzogdGhlIGNvbmZpZ3VyYXRpb24KKyAqIEBmdW5jdGlvbjogdGhlIGZ1bmN0aW9uIGJlaW5nIGFkZGVkCisgKiBDb250ZXh0OiBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGdhZGdldCBzZXR1cAorICoKKyAqIEFmdGVyIGluaXRpYWxpemF0aW9uLCBlYWNoIGNvbmZpZ3VyYXRpb24gbXVzdCBoYXZlIG9uZSBvciBtb3JlCisgKiBmdW5jdGlvbnMgYWRkZWQgdG8gaXQuICBBZGRpbmcgYSBmdW5jdGlvbiBpbnZvbHZlcyBjYWxsaW5nIGl0cyBAYmluZCgpCisgKiBtZXRob2QgdG8gYWxsb2NhdGUgcmVzb3VyY2VzIHN1Y2ggYXMgaW50ZXJmYWNlIGFuZCBzdHJpbmcgaWRlbnRpZmllcnMKKyAqIGFuZCBlbmRwb2ludHMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24ncyBiaW5kKCksIHdoaWNoIGlzCisgKiB6ZXJvIGZvciBzdWNjZXNzIGVsc2UgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZS4KKyAqLworaW50IF9faW5pdCB1c2JfYWRkX2Z1bmN0aW9uKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqY29uZmlnLAorCQlzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmdW5jdGlvbikKK3sKKwlpbnQJdmFsdWUgPSAtRUlOVkFMOworCisJREJHKGNvbmZpZy0+Y2RldiwgImFkZGluZyAnJXMnLyVwIHRvIGNvbmZpZyAnJXMnLyVwXG4iLAorCQkJZnVuY3Rpb24tPm5hbWUsIGZ1bmN0aW9uLAorCQkJY29uZmlnLT5sYWJlbCwgY29uZmlnKTsKKworCWlmICghZnVuY3Rpb24tPnNldF9hbHQgfHwgIWZ1bmN0aW9uLT5kaXNhYmxlKQorCQlnb3RvIGRvbmU7CisKKwlmdW5jdGlvbi0+Y29uZmlnID0gY29uZmlnOworCWxpc3RfYWRkX3RhaWwoJmZ1bmN0aW9uLT5saXN0LCAmY29uZmlnLT5mdW5jdGlvbnMpOworCisJLyogUkVWSVNJVCAqcmVxdWlyZSogZnVuY3Rpb24tPmJpbmQ/ICovCisJaWYgKGZ1bmN0aW9uLT5iaW5kKSB7CisJCXZhbHVlID0gZnVuY3Rpb24tPmJpbmQoY29uZmlnLCBmdW5jdGlvbik7CisJCWlmICh2YWx1ZSA8IDApIHsKKwkJCWxpc3RfZGVsKCZmdW5jdGlvbi0+bGlzdCk7CisJCQlmdW5jdGlvbi0+Y29uZmlnID0gTlVMTDsKKwkJfQorCX0gZWxzZQorCQl2YWx1ZSA9IDA7CisKKwkvKiBXZSBhbGxvdyBjb25maWd1cmF0aW9ucyB0aGF0IGRvbid0IHdvcmsgYXQgYm90aCBzcGVlZHMuCisJICogSWYgd2UgcnVuIGludG8gYSBsb3dzcGVlZCBMaW51eCBzeXN0ZW0sIHRyZWF0IGl0IHRoZSBzYW1lCisJICogYXMgZnVsbCBzcGVlZCAuLi4gaXQncyB0aGUgZnVuY3Rpb24gZHJpdmVycyB0aGF0IHdpbGwgbmVlZAorCSAqIHRvIGF2b2lkIGJ1bGsgYW5kIElTTyB0cmFuc2ZlcnMuCisJICovCisJaWYgKCFjb25maWctPmZ1bGxzcGVlZCAmJiBmdW5jdGlvbi0+ZGVzY3JpcHRvcnMpCisJCWNvbmZpZy0+ZnVsbHNwZWVkID0gdHJ1ZTsKKwlpZiAoIWNvbmZpZy0+aGlnaHNwZWVkICYmIGZ1bmN0aW9uLT5oc19kZXNjcmlwdG9ycykKKwkJY29uZmlnLT5oaWdoc3BlZWQgPSB0cnVlOworCitkb25lOgorCWlmICh2YWx1ZSkKKwkJREJHKGNvbmZpZy0+Y2RldiwgImFkZGluZyAnJXMnLyVwIC0tPiAlZFxuIiwKKwkJCQlmdW5jdGlvbi0+bmFtZSwgZnVuY3Rpb24sIHZhbHVlKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qKgorICogdXNiX2ludGVyZmFjZV9pZCgpIC0gYWxsb2NhdGUgYW4gdW51c2VkIGludGVyZmFjZSBJRAorICogQGNvbmZpZzogY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVyZmFjZQorICogQGZ1bmN0aW9uOiBmdW5jdGlvbiBoYW5kbGluZyB0aGUgaW50ZXJmYWNlCisgKiBDb250ZXh0OiBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGdhZGdldCBzZXR1cAorICoKKyAqIHVzYl9pbnRlcmZhY2VfaWQoKSBpcyBjYWxsZWQgZnJvbSB1c2JfZnVuY3Rpb24uYmluZCgpIGNhbGxiYWNrcyB0bworICogYWxsb2NhdGUgbmV3IGludGVyZmFjZSBJRHMuICBUaGUgZnVuY3Rpb24gZHJpdmVyIHdpbGwgdGhlbiBzdG9yZSB0aGF0CisgKiBJRCBpbiBpbnRlcmZhY2UsIGFzc29jaWF0aW9uLCBDREMgdW5pb24sIGFuZCBvdGhlciBkZXNjcmlwdG9ycy4gIEl0CisgKiB3aWxsIGFsc28gaGFuZGxlIGFueSBjb250cm9sIHJlcXVlc3RzIHRhcmdldHRlZCBhdCB0aGF0IGludGVyZmFjZSwKKyAqIHBhcnRpY3VsYXJseSBjaGFuZ2luZyBpdHMgYWx0c2V0dGluZyB2aWEgc2V0X2FsdCgpLiAgVGhlcmUgbWF5CisgKiBhbHNvIGJlIGNsYXNzLXNwZWNpZmljIG9yIHZlbmRvci1zcGVjaWZpYyByZXF1ZXN0cyB0byBoYW5kbGUuCisgKgorICogQWxsIGludGVyZmFjZSBpZGVudGlmaWVyIHNob3VsZCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhpcyByb3V0aW5lLCB0bworICogZW5zdXJlIHRoYXQgZm9yIGV4YW1wbGUgZGlmZmVyZW50IGZ1bmN0aW9ucyBkb24ndCB3cm9uZ2x5IGFzc2lnbgorICogZGlmZmVyZW50IG1lYW5pbmdzIHRvIHRoZSBzYW1lIGlkZW50aWZpZXIuICBOb3RlIHRoYXQgc2luY2UgaW50ZXJmYWNlCisgKiBpZGVudGlmZXJzIGFyZSBjb25maWd1cmF0aW9uLXNwZWNpZmljLCBmdW5jdGlvbnMgdXNlZCBpbiBtb3JlIHRoYW4KKyAqIG9uZSBjb25maWd1cmF0aW9uIChvciBtb3JlIHRoYW4gb25jZSBpbiBhIGdpdmVuIGNvbmZpZ3VyYXRpb24pIG5lZWQKKyAqIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSByZWxldmFudCBkZXNjcmlwdG9ycy4KKyAqCisgKiBSZXR1cm5zIHRoZSBpbnRlcmZhY2UgSUQgd2hpY2ggd2FzIGFsbG9jYXRlZDsgb3IgLUVOT0RFViBpZiBubworICogbW9yZSBpbnRlcmZhY2UgSURzIGNhbiBiZSBhbGxvY2F0ZWQuCisgKi8KK2ludCBfX2luaXQgdXNiX2ludGVyZmFjZV9pZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmNvbmZpZywKKwkJc3RydWN0IHVzYl9mdW5jdGlvbiAqZnVuY3Rpb24pCit7CisJdW5zaWduZWQgaWQgPSBjb25maWctPm5leHRfaW50ZXJmYWNlX2lkOworCisJaWYgKGlkIDwgTUFYX0NPTkZJR19JTlRFUkZBQ0VTKSB7CisJCWNvbmZpZy0+aW50ZXJmYWNlW2lkXSA9IGZ1bmN0aW9uOworCQljb25maWctPm5leHRfaW50ZXJmYWNlX2lkID0gaWQgKyAxOworCQlyZXR1cm4gaWQ7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IGNvbmZpZ19idWYoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjb25maWcsCisJCWVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCwgdm9pZCAqYnVmLCB1OCB0eXBlKQoreworCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJKmMgPSBidWY7CisJdm9pZAkJCQkqbmV4dCA9IGJ1ZiArIFVTQl9EVF9DT05GSUdfU0laRTsKKwlpbnQJCQkJbGVuID0gVVNCX0JVRlNJWiAtIFVTQl9EVF9DT05GSUdfU0laRTsKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQkqZjsKKwlpbnQJCQkJc3RhdHVzOworCisJLyogd3JpdGUgdGhlIGNvbmZpZyBkZXNjcmlwdG9yICovCisJYyA9IGJ1ZjsKKwljLT5iTGVuZ3RoID0gVVNCX0RUX0NPTkZJR19TSVpFOworCWMtPmJEZXNjcmlwdG9yVHlwZSA9IHR5cGU7CisJLyogd1RvdGFsTGVuZ3RoIGlzIHdyaXR0ZW4gbGF0ZXIgKi8KKwljLT5iTnVtSW50ZXJmYWNlcyA9IGNvbmZpZy0+bmV4dF9pbnRlcmZhY2VfaWQ7CisJYy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSA9IGNvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZTsKKwljLT5pQ29uZmlndXJhdGlvbiA9IGNvbmZpZy0+aUNvbmZpZ3VyYXRpb247CisJYy0+Ym1BdHRyaWJ1dGVzID0gVVNCX0NPTkZJR19BVFRfT05FIHwgY29uZmlnLT5ibUF0dHJpYnV0ZXM7CisJYy0+Yk1heFBvd2VyID0gY29uZmlnLT5iTWF4UG93ZXI7CisKKwkvKiBUaGVyZSBtYXkgYmUgZS5nLiBPVEcgZGVzY3JpcHRvcnMgKi8KKwlpZiAoY29uZmlnLT5kZXNjcmlwdG9ycykgeworCQlzdGF0dXMgPSB1c2JfZGVzY3JpcHRvcl9maWxsYnVmKG5leHQsIGxlbiwKKwkJCQljb25maWctPmRlc2NyaXB0b3JzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQlsZW4gLT0gc3RhdHVzOworCQluZXh0ICs9IHN0YXR1czsKKwl9CisKKwkvKiBhZGQgZWFjaCBmdW5jdGlvbidzIGRlc2NyaXB0b3JzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmY29uZmlnLT5mdW5jdGlvbnMsIGxpc3QpIHsKKwkJc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKmRlc2NyaXB0b3JzOworCisJCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCWRlc2NyaXB0b3JzID0gZi0+aHNfZGVzY3JpcHRvcnM7CisJCWVsc2UKKwkJCWRlc2NyaXB0b3JzID0gZi0+ZGVzY3JpcHRvcnM7CisJCWlmICghZGVzY3JpcHRvcnMpCisJCQljb250aW51ZTsKKwkJc3RhdHVzID0gdXNiX2Rlc2NyaXB0b3JfZmlsbGJ1ZihuZXh0LCBsZW4sCisJCQkoY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKikgZGVzY3JpcHRvcnMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisJCWxlbiAtPSBzdGF0dXM7CisJCW5leHQgKz0gc3RhdHVzOworCX0KKworCWxlbiA9IG5leHQgLSBidWY7CisJYy0+d1RvdGFsTGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGNvbmZpZ19kZXNjKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgdW5zaWduZWQgd192YWx1ZSkKK3sKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJKmdhZGdldCA9IGNkZXYtPmdhZGdldDsKKwlzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24JKmM7CisJdTgJCQkJdHlwZSA9IHdfdmFsdWUgPj4gODsKKwllbnVtIHVzYl9kZXZpY2Vfc3BlZWQJCXNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisKKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChnYWRnZXQpKSB7CisJCWludAkJCWhzID0gMDsKKworCQlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCWhzID0gMTsKKwkJaWYgKHR5cGUgPT0gVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRykKKwkJCWhzID0gIWhzOworCQlpZiAoaHMpCisJCQlzcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworCisJfQorCisJLyogVGhpcyBpcyBhIGxvb2t1cCBieSBjb25maWcgKklOREVYKiAqLworCXdfdmFsdWUgJj0gMHhmZjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjZGV2LT5jb25maWdzLCBsaXN0KSB7CisJCS8qIGlnbm9yZSBjb25maWdzIHRoYXQgd29uJ3Qgd29yayBhdCB0aGlzIHNwZWVkICovCisJCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQkJaWYgKCFjLT5oaWdoc3BlZWQpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAoIWMtPmZ1bGxzcGVlZCkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAod192YWx1ZSA9PSAwKQorCQkJcmV0dXJuIGNvbmZpZ19idWYoYywgc3BlZWQsIGNkZXYtPnJlcS0+YnVmLCB0eXBlKTsKKwkJd192YWx1ZS0tOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBjb3VudF9jb25maWdzKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgdW5zaWduZWQgdHlwZSkKK3sKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJKmdhZGdldCA9IGNkZXYtPmdhZGdldDsKKwlzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24JKmM7CisJdW5zaWduZWQJCQljb3VudCA9IDA7CisJaW50CQkJCWhzID0gMDsKKworCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGdhZGdldCkpIHsKKwkJaWYgKGdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCQlocyA9IDE7CisJCWlmICh0eXBlID09IFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSKQorCQkJaHMgPSAhaHM7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmNkZXYtPmNvbmZpZ3MsIGxpc3QpIHsKKwkJLyogaWdub3JlIGNvbmZpZ3MgdGhhdCB3b24ndCB3b3JrIGF0IHRoaXMgc3BlZWQgKi8KKwkJaWYgKGhzKSB7CisJCQlpZiAoIWMtPmhpZ2hzcGVlZCkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICghYy0+ZnVsbHNwZWVkKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWNvdW50Kys7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgZGV2aWNlX3F1YWwoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCXN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IJKnF1YWwgPSBjZGV2LT5yZXEtPmJ1ZjsKKworCXF1YWwtPmJMZW5ndGggPSBzaXplb2YoKnF1YWwpOworCXF1YWwtPmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOworCS8qIFBPTElDWTogc2FtZSBiY2RVU0IgYW5kIGRldmljZSB0eXBlIGluZm8gYXQgYm90aCBzcGVlZHMgKi8KKwlxdWFsLT5iY2RVU0IgPSBjZGV2LT5kZXNjLmJjZFVTQjsKKwlxdWFsLT5iRGV2aWNlQ2xhc3MgPSBjZGV2LT5kZXNjLmJEZXZpY2VDbGFzczsKKwlxdWFsLT5iRGV2aWNlU3ViQ2xhc3MgPSBjZGV2LT5kZXNjLmJEZXZpY2VTdWJDbGFzczsKKwlxdWFsLT5iRGV2aWNlUHJvdG9jb2wgPSBjZGV2LT5kZXNjLmJEZXZpY2VQcm90b2NvbDsKKwkvKiBBU1NVTUUgc2FtZSBFUDAgZmlmbyBzaXplIGF0IGJvdGggc3BlZWRzICovCisJcXVhbC0+Yk1heFBhY2tldFNpemUwID0gY2Rldi0+ZGVzYy5iTWF4UGFja2V0U2l6ZTA7CisJcXVhbC0+Yk51bUNvbmZpZ3VyYXRpb25zID0gY291bnRfY29uZmlncyhjZGV2LCBVU0JfRFRfREVWSUNFX1FVQUxJRklFUik7CisJcXVhbC0+YlJFU0VSVkVEID0gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcmVzZXRfY29uZmlnKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQkqZjsKKworCURCRyhjZGV2LCAicmVzZXQgY29uZmlnXG4iKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmNkZXYtPmNvbmZpZy0+ZnVuY3Rpb25zLCBsaXN0KSB7CisJCWlmIChmLT5kaXNhYmxlKQorCQkJZi0+ZGlzYWJsZShmKTsKKwl9CisJY2Rldi0+Y29uZmlnID0gTlVMTDsKK30KKworc3RhdGljIGludCBzZXRfY29uZmlnKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwKKwkJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCwgdW5zaWduZWQgbnVtYmVyKQoreworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBjZGV2LT5nYWRnZXQ7CisJc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjID0gTlVMTDsKKwlpbnQJCQlyZXN1bHQgPSAtRUlOVkFMOworCXVuc2lnbmVkCQlwb3dlciA9IGdhZGdldF9pc19vdGcoZ2FkZ2V0KSA/IDggOiAxMDA7CisJaW50CQkJdG1wOworCisJaWYgKGNkZXYtPmNvbmZpZykKKwkJcmVzZXRfY29uZmlnKGNkZXYpOworCisJaWYgKG51bWJlcikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjZGV2LT5jb25maWdzLCBsaXN0KSB7CisJCQlpZiAoYy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSA9PSBudW1iZXIpIHsKKwkJCQlyZXN1bHQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZ290byBkb25lOworCX0gZWxzZQorCQlyZXN1bHQgPSAwOworCisJSU5GTyhjZGV2LCAiJXMgc3BlZWQgY29uZmlnICMlZDogJXNcbiIsCisJCSh7IGNoYXIgKnNwZWVkOworCQlzd2l0Y2ggKGdhZGdldC0+c3BlZWQpIHsKKwkJY2FzZSBVU0JfU1BFRURfTE9XOglzcGVlZCA9ICJsb3ciOyBicmVhazsKKwkJY2FzZSBVU0JfU1BFRURfRlVMTDoJc3BlZWQgPSAiZnVsbCI7IGJyZWFrOworCQljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsgYnJlYWs7CisJCWRlZmF1bHQ6CQlzcGVlZCA9ICI/IjsgYnJlYWs7CisJCX0gOyBzcGVlZDsgfSksIG51bWJlciwgYyA/IGMtPmxhYmVsIDogInVuY29uZmlndXJlZCIpOworCisJaWYgKCFjKQorCQlnb3RvIGRvbmU7CisKKwljZGV2LT5jb25maWcgPSBjOworCisJLyogSW5pdGlhbGl6ZSBhbGwgaW50ZXJmYWNlcyBieSBzZXR0aW5nIHRoZW0gdG8gYWx0c2V0dGluZyB6ZXJvLiAqLworCWZvciAodG1wID0gMDsgdG1wIDwgTUFYX0NPTkZJR19JTlRFUkZBQ0VTOyB0bXArKykgeworCQlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCSpmID0gYy0+aW50ZXJmYWNlW3RtcF07CisKKwkJaWYgKCFmKQorCQkJYnJlYWs7CisKKwkJcmVzdWx0ID0gZi0+c2V0X2FsdChmLCB0bXAsIDApOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJREJHKGNkZXYsICJpbnRlcmZhY2UgJWQgKCVzLyVwKSBhbHQgMCAtLT4gJWRcbiIsCisJCQkJCXRtcCwgZi0+bmFtZSwgZiwgcmVzdWx0KTsKKworCQkJcmVzZXRfY29uZmlnKGNkZXYpOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJLyogd2hlbiB3ZSByZXR1cm4sIGJlIHN1cmUgb3VyIHBvd2VyIHVzYWdlIGlzIHZhbGlkICovCisJcG93ZXIgPSAyICogYy0+Yk1heFBvd2VyOworZG9uZToKKwl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhnYWRnZXQsIHBvd2VyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIHVzYl9hZGRfY29uZmlnKCkgLSBhZGQgYSBjb25maWd1cmF0aW9uIHRvIGEgZGV2aWNlLgorICogQGNkZXY6IHdyYXBzIHRoZSBVU0IgZ2FkZ2V0CisgKiBAY29uZmlnOiB0aGUgY29uZmlndXJhdGlvbiwgd2l0aCBiQ29uZmlndXJhdGlvblZhbHVlIGFzc2lnbmVkCisgKiBDb250ZXh0OiBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGdhZGdldCBzZXR1cAorICoKKyAqIE9uZSBvZiB0aGUgbWFpbiB0YXNrcyBvZiBhIGNvbXBvc2l0ZSBkcml2ZXIncyBiaW5kKCkgcm91dGluZSBpcyB0bworICogYWRkIGVhY2ggb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGl0IHN1cHBvcnRzLCB1c2luZyB0aGlzIHJvdXRpbmUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgY29uZmlndXJhdGlvbidzIGJpbmQoKSwgd2hpY2gKKyAqIGlzIHplcm8gZm9yIHN1Y2Nlc3MgZWxzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgQmluZGluZyBjb25maWd1cmF0aW9ucworICogYXNzaWducyBnbG9iYWwgcmVzb3VyY2VzIGluY2x1ZGluZyBzdHJpbmcgSURzLCBhbmQgcGVyLWNvbmZpZ3VyYXRpb24KKyAqIHJlc291cmNlcyBzdWNoIGFzIGludGVyZmFjZSBJRHMgYW5kIGVuZHBvaW50cy4KKyAqLworaW50IF9faW5pdCB1c2JfYWRkX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsCisJCXN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqY29uZmlnKQoreworCWludAkJCQlzdGF0dXMgPSAtRUlOVkFMOworCXN0cnVjdCB1c2JfY29uZmlndXJhdGlvbgkqYzsKKworCURCRyhjZGV2LCAiYWRkaW5nIGNvbmZpZyAjJXUgJyVzJy8lcFxuIiwKKwkJCWNvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSwKKwkJCWNvbmZpZy0+bGFiZWwsIGNvbmZpZyk7CisKKwlpZiAoIWNvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSB8fCAhY29uZmlnLT5iaW5kKQorCQlnb3RvIGRvbmU7CisKKwkvKiBQcmV2ZW50IGR1cGxpY2F0ZSBjb25maWd1cmF0aW9uIGlkZW50aWZpZXJzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2Rldi0+Y29uZmlncywgbGlzdCkgeworCQlpZiAoYy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSA9PSBjb25maWctPmJDb25maWd1cmF0aW9uVmFsdWUpIHsKKwkJCXN0YXR1cyA9IC1FQlVTWTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCWNvbmZpZy0+Y2RldiA9IGNkZXY7CisJbGlzdF9hZGRfdGFpbCgmY29uZmlnLT5saXN0LCAmY2Rldi0+Y29uZmlncyk7CisKKwlJTklUX0xJU1RfSEVBRCgmY29uZmlnLT5mdW5jdGlvbnMpOworCWNvbmZpZy0+bmV4dF9pbnRlcmZhY2VfaWQgPSAwOworCisJc3RhdHVzID0gY29uZmlnLT5iaW5kKGNvbmZpZyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbGlzdF9kZWwoJmNvbmZpZy0+bGlzdCk7CisJCWNvbmZpZy0+Y2RldiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQJaTsKKworCQlEQkcoY2RldiwgImNmZyAlZC8lcCBzcGVlZHM6JXMlc1xuIiwKKwkJCWNvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSwgY29uZmlnLAorCQkJY29uZmlnLT5oaWdoc3BlZWQgPyAiIGhpZ2giIDogIiIsCisJCQljb25maWctPmZ1bGxzcGVlZAorCQkJCT8gKGdhZGdldF9pc19kdWFsc3BlZWQoY2Rldi0+Z2FkZ2V0KQorCQkJCQk/ICIgZnVsbCIKKwkJCQkJOiAiIGZ1bGwvbG93IikKKwkJCQk6ICIiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTkZJR19JTlRFUkZBQ0VTOyBpKyspIHsKKwkJCXN0cnVjdCB1c2JfZnVuY3Rpb24JKmYgPSBjb25maWctPmludGVyZmFjZVtpXTsKKworCQkJaWYgKCFmKQorCQkJCWNvbnRpbnVlOworCQkJREJHKGNkZXYsICIgIGludGVyZmFjZSAlZCA9ICVzLyVwXG4iLAorCQkJCWksIGYtPm5hbWUsIGYpOworCQl9CisJfQorCisJLyogc2V0X2FsdCgpLCBvciBuZXh0IGNvbmZpZy0+YmluZCgpLCBzZXRzIHVwCisJICogZXAtPmRyaXZlcl9kYXRhIGFzIG5lZWRlZC4KKwkgKi8KKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldChjZGV2LT5nYWRnZXQpOworCitkb25lOgorCWlmIChzdGF0dXMpCisJCURCRyhjZGV2LCAiYWRkZWQgY29uZmlnICclcycvJXUgLS0+ICVkXG4iLCBjb25maWctPmxhYmVsLAorCQkJCWNvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBXZSBzdXBwb3J0IHN0cmluZ3MgaW4gbXVsdGlwbGUgbGFuZ3VhZ2VzIC4uLiBzdHJpbmcgZGVzY3JpcHRvciB6ZXJvCisgKiBzYXlzIHdoaWNoIGxhbmd1YWdlcyBhcmUgc3VwcG9ydGVkLiAgVGhlIHR5cGljYWwgY2FzZSB3aWxsIGJlIHRoYXQKKyAqIG9ubHkgb25lIGxhbmd1YWdlIChwcm9iYWJseSBFbmdsaXNoKSBpcyB1c2VkLCB3aXRoIEkxOE4gaGFuZGxlZCBvbgorICogdGhlIGhvc3Qgc2lkZS4KKyAqLworCitzdGF0aWMgdm9pZCBjb2xsZWN0X2xhbmdzKHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKipzcCwgX19sZTE2ICpidWYpCit7CisJY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncwkqczsKKwl1MTYJCQkJbGFuZ3VhZ2U7CisJX19sZTE2CQkJCSp0bXA7CisKKwl3aGlsZSAoKnNwKSB7CisJCXMgPSAqc3A7CisJCWxhbmd1YWdlID0gY3B1X3RvX2xlMTYocy0+bGFuZ3VhZ2UpOworCQlmb3IgKHRtcCA9IGJ1ZjsgKnRtcCAmJiB0bXAgPCAmYnVmWzEyNl07IHRtcCsrKSB7CisJCQlpZiAoKnRtcCA9PSBsYW5ndWFnZSkKKwkJCQlnb3RvIHJlcGVhdDsKKwkJfQorCQkqdG1wKysgPSBsYW5ndWFnZTsKK3JlcGVhdDoKKwkJc3ArKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbG9va3VwX3N0cmluZygKKwlzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzCSoqc3AsCisJdm9pZAkJCQkqYnVmLAorCXUxNgkJCQlsYW5ndWFnZSwKKwlpbnQJCQkJaWQKKykKK3sKKwlzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzCSpzOworCWludAkJCQl2YWx1ZTsKKworCXdoaWxlICgqc3ApIHsKKwkJcyA9ICpzcCsrOworCQlpZiAocy0+bGFuZ3VhZ2UgIT0gbGFuZ3VhZ2UpCisJCQljb250aW51ZTsKKwkJdmFsdWUgPSB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcocywgaWQsIGJ1Zik7CisJCWlmICh2YWx1ZSA+IDApCisJCQlyZXR1cm4gdmFsdWU7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGdldF9zdHJpbmcoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LAorCQl2b2lkICpidWYsIHUxNiBsYW5ndWFnZSwgaW50IGlkKQoreworCXN0cnVjdCB1c2JfY29uZmlndXJhdGlvbgkqYzsKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQkqZjsKKwlpbnQJCQkJbGVuOworCisJLyogWWVzLCBub3Qgb25seSBpcyBVU0IncyBJMThOIHN1cHBvcnQgcHJvYmFibHkgbW9yZSB0aGFuIG1vc3QKKwkgKiBmb2xrIHdpbGwgZXZlciBjYXJlIGFib3V0IC4uLiBhbHNvLCBpdCdzIGFsbCBzdXBwb3J0ZWQgaGVyZS4KKwkgKiAoRXhjZXB0IGZvciBVVEY4IHN1cHBvcnQgZm9yIFVuaWNvZGUncyAiQXN0cmFsIFBsYW5lcyIuKQorCSAqLworCisJLyogMCA9PSByZXBvcnQgYWxsIGF2YWlsYWJsZSBsYW5ndWFnZSBjb2RlcyAqLworCWlmIChpZCA9PSAwKSB7CisJCXN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IJKnMgPSBidWY7CisJCXN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MJKipzcDsKKworCQltZW1zZXQocywgMCwgMjU2KTsKKwkJcy0+YkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX1NUUklORzsKKworCQlzcCA9IGNvbXBvc2l0ZS0+c3RyaW5nczsKKwkJaWYgKHNwKQorCQkJY29sbGVjdF9sYW5ncyhzcCwgcy0+d0RhdGEpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmNkZXYtPmNvbmZpZ3MsIGxpc3QpIHsKKwkJCXNwID0gYy0+c3RyaW5nczsKKwkJCWlmIChzcCkKKwkJCQljb2xsZWN0X2xhbmdzKHNwLCBzLT53RGF0YSk7CisKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmMtPmZ1bmN0aW9ucywgbGlzdCkgeworCQkJCXNwID0gZi0+c3RyaW5nczsKKwkJCQlpZiAoc3ApCisJCQkJCWNvbGxlY3RfbGFuZ3Moc3AsIHMtPndEYXRhKTsKKwkJCX0KKwkJfQorCisJCWZvciAobGVuID0gMDsgcy0+d0RhdGFbbGVuXSAmJiBsZW4gPD0gMTI2OyBsZW4rKykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWxlbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXMtPmJMZW5ndGggPSAyICogKGxlbiArIDEpOworCQlyZXR1cm4gcy0+Ykxlbmd0aDsKKwl9CisKKwkvKiBPdGhlcndpc2UsIGxvb2sgdXAgYW5kIHJldHVybiBhIHNwZWNpZmllZCBzdHJpbmcuICBTdHJpbmcgSURzCisJICogYXJlIGRldmljZS1zY29wZWQsIHNvIHdlIGxvb2sgdXAgZWFjaCBzdHJpbmcgdGFibGUgd2UncmUgdG9sZAorCSAqIGFib3V0LiAgVGhlc2UgbG9va3VwcyBhcmUgaW5mcmVxdWVudDsgc2ltcGxlci1pcy1iZXR0ZXIgaGVyZS4KKwkgKi8KKwlpZiAoY29tcG9zaXRlLT5zdHJpbmdzKSB7CisJCWxlbiA9IGxvb2t1cF9zdHJpbmcoY29tcG9zaXRlLT5zdHJpbmdzLCBidWYsIGxhbmd1YWdlLCBpZCk7CisJCWlmIChsZW4gPiAwKQorCQkJcmV0dXJuIGxlbjsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2Rldi0+Y29uZmlncywgbGlzdCkgeworCQlpZiAoYy0+c3RyaW5ncykgeworCQkJbGVuID0gbG9va3VwX3N0cmluZyhjLT5zdHJpbmdzLCBidWYsIGxhbmd1YWdlLCBpZCk7CisJCQlpZiAobGVuID4gMCkKKwkJCQlyZXR1cm4gbGVuOworCQl9CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmMtPmZ1bmN0aW9ucywgbGlzdCkgeworCQkJaWYgKCFmLT5zdHJpbmdzKQorCQkJCWNvbnRpbnVlOworCQkJbGVuID0gbG9va3VwX3N0cmluZyhmLT5zdHJpbmdzLCBidWYsIGxhbmd1YWdlLCBpZCk7CisJCQlpZiAobGVuID4gMCkKKwkJCQlyZXR1cm4gbGVuOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHVzYl9zdHJpbmdfaWQoKSAtIGFsbG9jYXRlIGFuIHVudXNlZCBzdHJpbmcgSUQKKyAqIEBjZGV2OiB0aGUgZGV2aWNlIHdob3NlIHN0cmluZyBkZXNjcmlwdG9yIElEcyBhcmUgYmVpbmcgYWxsb2NhdGVkCisgKiBDb250ZXh0OiBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGdhZGdldCBzZXR1cAorICoKKyAqIEB1c2Jfc3RyaW5nX2lkKCkgaXMgY2FsbGVkIGZyb20gYmluZCgpIGNhbGxiYWNrcyB0byBhbGxvY2F0ZQorICogc3RyaW5nIElEcy4gIERyaXZlcnMgZm9yIGZ1bmN0aW9ucywgY29uZmlndXJhdGlvbnMsIG9yIGdhZGdldHMgd2lsbAorICogdGhlbiBzdG9yZSB0aGF0IElEIGluIHRoZSBhcHByb3ByaWF0ZSBkZXNjcmlwdG9ycyBhbmQgc3RyaW5nIHRhYmxlLgorICoKKyAqIEFsbCBzdHJpbmcgaWRlbnRpZmllciBzaG91bGQgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMgcm91dGluZSwgdG8KKyAqIGVuc3VyZSB0aGF0IGZvciBleGFtcGxlIGRpZmZlcmVudCBmdW5jdGlvbnMgZG9uJ3Qgd3JvbmdseSBhc3NpZ24KKyAqIGRpZmZlcmVudCBtZWFuaW5ncyB0byB0aGUgc2FtZSBpZGVudGlmaWVyLgorICovCitpbnQgX19pbml0IHVzYl9zdHJpbmdfaWQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCWlmIChjZGV2LT5uZXh0X3N0cmluZ19pZCA8IDI1NCkgeworCQkvKiBzdHJpbmcgaWQgMCBpcyByZXNlcnZlZCAqLworCQljZGV2LT5uZXh0X3N0cmluZ19pZCsrOworCQlyZXR1cm4gY2Rldi0+bmV4dF9zdHJpbmdfaWQ7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBjb21wb3NpdGVfc2V0dXBfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKKwkJREJHKChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKikgZXAtPmRyaXZlcl9kYXRhLAorCQkJCSJzZXR1cCBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworfQorCisvKgorICogVGhlIHNldHVwKCkgY2FsbGJhY2sgaW1wbGVtZW50cyBhbGwgdGhlIGVwMCBmdW5jdGlvbmFsaXR5IHRoYXQncworICogbm90IGhhbmRsZWQgbG93ZXIgZG93biwgaW4gaGFyZHdhcmUgb3IgdGhlIGhhcmR3YXJlIGRyaXZlcihsaWtlCisgKiBkZXZpY2UgYW5kIGVuZHBvaW50IGZlYXR1cmUgZmxhZ3MsIGFuZCB0aGVpciBzdGF0dXMpLiAgSXQncyBhbGwKKyAqIGhvdXNla2VlcGluZyBmb3IgdGhlIGdhZGdldCBmdW5jdGlvbiB3ZSdyZSBpbXBsZW1lbnRpbmcuICBNb3N0IG9mCisgKiB0aGUgd29yayBpcyBpbiBjb25maWcgYW5kIGZ1bmN0aW9uIHNwZWNpZmljIHNldHVwLgorICovCitzdGF0aWMgaW50Citjb21wb3NpdGVfc2V0dXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpyZXEgPSBjZGV2LT5yZXE7CisJaW50CQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJCXdfaW5kZXggPSBsZTE2X3RvX2NwdShjdHJsLT53SW5kZXgpOworCXUxNgkJCQl3X3ZhbHVlID0gbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKTsKKwl1MTYJCQkJd19sZW5ndGggPSBsZTE2X3RvX2NwdShjdHJsLT53TGVuZ3RoKTsKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQkqZiA9IE5VTEw7CisKKwkvKiBwYXJ0aWFsIHJlLWluaXQgb2YgdGhlIHJlc3BvbnNlIG1lc3NhZ2U7IHRoZSBmdW5jdGlvbiBvciB0aGUKKwkgKiBnYWRnZXQgbWlnaHQgbmVlZCB0byBpbnRlcmNlcHQgZS5nLiBhIGNvbnRyb2wtT1VUIGNvbXBsZXRpb24KKwkgKiB3aGVuIHdlIGRlbGVnYXRlIHRvIGl0LgorCSAqLworCXJlcS0+emVybyA9IDA7CisJcmVxLT5jb21wbGV0ZSA9IGNvbXBvc2l0ZV9zZXR1cF9jb21wbGV0ZTsKKwlyZXEtPmxlbmd0aCA9IFVTQl9CVUZTSVo7CisJZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gY2RldjsKKworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKworCS8qIHdlIGhhbmRsZSBhbGwgc3RhbmRhcmQgVVNCIGRlc2NyaXB0b3JzICovCisJY2FzZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlnb3RvIHVua25vd247CisJCXN3aXRjaCAod192YWx1ZSA+PiA4KSB7CisKKwkJY2FzZSBVU0JfRFRfREVWSUNFOgorCQkJY2Rldi0+ZGVzYy5iTnVtQ29uZmlndXJhdGlvbnMgPQorCQkJCWNvdW50X2NvbmZpZ3MoY2RldiwgVVNCX0RUX0RFVklDRSk7CisJCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgc2l6ZW9mIGNkZXYtPmRlc2MpOworCQkJbWVtY3B5KHJlcS0+YnVmLCAmY2Rldi0+ZGVzYywgdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI6CisJCQlpZiAoIWdhZGdldF9pc19kdWFsc3BlZWQoZ2FkZ2V0KSkKKwkJCQlicmVhazsKKwkJCWRldmljZV9xdWFsKGNkZXYpOworCQkJdmFsdWUgPSBtaW5fdChpbnQsIHdfbGVuZ3RoLAorCQkJCXNpemVvZihzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yKSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHOgorCQkJaWYgKCFnYWRnZXRfaXNfZHVhbHNwZWVkKGdhZGdldCkpCisJCQkJYnJlYWs7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlIFVTQl9EVF9DT05GSUc6CisJCQl2YWx1ZSA9IGNvbmZpZ19kZXNjKGNkZXYsIHdfdmFsdWUpOworCQkJaWYgKHZhbHVlID49IDApCisJCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIHZhbHVlKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9EVF9TVFJJTkc6CisJCQl2YWx1ZSA9IGdldF9zdHJpbmcoY2RldiwgcmVxLT5idWYsCisJCQkJCXdfaW5kZXgsIHdfdmFsdWUgJiAweGZmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSB2YWx1ZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCS8qIGFueSBudW1iZXIgb2YgY29uZmlncyBjYW4gd29yayAqLworCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAwKQorCQkJZ290byB1bmtub3duOworCQlpZiAoZ2FkZ2V0X2lzX290ZyhnYWRnZXQpKSB7CisJCQlpZiAoZ2FkZ2V0LT5hX2hucF9zdXBwb3J0KQorCQkJCURCRyhjZGV2LCAiSE5QIGF2YWlsYWJsZVxuIik7CisJCQllbHNlIGlmIChnYWRnZXQtPmFfYWx0X2hucF9zdXBwb3J0KQorCQkJCURCRyhjZGV2LCAiSE5QIG9uIGFub3RoZXIgcG9ydFxuIik7CisJCQllbHNlCisJCQkJVkRCRyhjZGV2LCAiSE5QIGluYWN0aXZlXG4iKTsKKwkJfQorCQlzcGluX2xvY2soJmNkZXYtPmxvY2spOworCQl2YWx1ZSA9IHNldF9jb25maWcoY2RldiwgY3RybCwgd192YWx1ZSk7CisJCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlnb3RvIHVua25vd247CisJCWlmIChjZGV2LT5jb25maWcpCisJCQkqKHU4ICopcmVxLT5idWYgPSBjZGV2LT5jb25maWctPmJDb25maWd1cmF0aW9uVmFsdWU7CisJCWVsc2UKKwkJCSoodTggKilyZXEtPmJ1ZiA9IDA7CisJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSAxKTsKKwkJYnJlYWs7CisKKwkvKiBmdW5jdGlvbiBkcml2ZXJzIG11c3QgaGFuZGxlIGdldC9zZXQgYWx0c2V0dGluZzsgaWYgdGhlcmUncworCSAqIG5vIGdldCgpIG1ldGhvZCwgd2Uga25vdyBvbmx5IGFsdHNldHRpbmcgemVybyB3b3Jrcy4KKwkgKi8KKwljYXNlIFVTQl9SRVFfU0VUX0lOVEVSRkFDRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfUkVDSVBfSU5URVJGQUNFKQorCQkJZ290byB1bmtub3duOworCQlpZiAoIWNkZXYtPmNvbmZpZyB8fCB3X2luZGV4ID49IE1BWF9DT05GSUdfSU5URVJGQUNFUykKKwkJCWJyZWFrOworCQlmID0gY2Rldi0+Y29uZmlnLT5pbnRlcmZhY2Vbd19pbmRleF07CisJCWlmICghZikKKwkJCWJyZWFrOworCQlpZiAod192YWx1ZSAmJiAhZi0+Z2V0X2FsdCkKKwkJCWJyZWFrOworCQl2YWx1ZSA9IGYtPnNldF9hbHQoZiwgd19pbmRleCwgd192YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFUV9HRVRfSU5URVJGQUNFOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOfFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJZ290byB1bmtub3duOworCQlpZiAoIWNkZXYtPmNvbmZpZyB8fCB3X2luZGV4ID49IE1BWF9DT05GSUdfSU5URVJGQUNFUykKKwkJCWJyZWFrOworCQlmID0gY2Rldi0+Y29uZmlnLT5pbnRlcmZhY2Vbd19pbmRleF07CisJCWlmICghZikKKwkJCWJyZWFrOworCQkvKiBsb3RzIG9mIGludGVyZmFjZXMgb25seSBuZWVkIGFsdHNldHRpbmcgemVyby4uLiAqLworCQl2YWx1ZSA9IGYtPmdldF9hbHQgPyBmLT5nZXRfYWx0KGYsIHdfaW5kZXgpIDogMDsKKwkJaWYgKHZhbHVlIDwgMCkKKwkJCWJyZWFrOworCQkqKCh1OCAqKXJlcS0+YnVmKSA9IHZhbHVlOworCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6Cit1bmtub3duOgorCQlWREJHKGNkZXYsCisJCQkibm9uLWNvcmUgY29udHJvbCByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKworCQkvKiBmdW5jdGlvbnMgYWx3YXlzIGhhbmRsZSB0aGVpciBpbnRlcmZhY2VzIC4uLiBwdW50IG90aGVyCisJCSAqIHJlY2lwaWVudHMgKGVuZHBvaW50LCBvdGhlciwgV1VTQiwgLi4uKSB0byB0aGUgY3VycmVudAorCQkgKiBjb25maWd1cmF0aW9uIGNvZGUuCisJCSAqCisJCSAqIFJFVklTSVQgaXQgY291bGQgbWFrZSBzZW5zZSB0byBsZXQgdGhlIGNvbXBvc2l0ZSBkZXZpY2UKKwkJICogdGFrZSBzdWNoIHJlcXVlc3RzIHRvbywgaWYgdGhhdCdzIGV2ZXIgbmVlZGVkOiAgdG8gd29yaworCQkgKiBpbiBjb25maWcgMCwgZXRjLgorCQkgKi8KKwkJaWYgKChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykKKwkJCQk9PSBVU0JfUkVDSVBfSU5URVJGQUNFKSB7CisJCQlmID0gY2Rldi0+Y29uZmlnLT5pbnRlcmZhY2Vbd19pbmRleF07CisJCQlpZiAoZiAmJiBmLT5zZXR1cCkKKwkJCQl2YWx1ZSA9IGYtPnNldHVwKGYsIGN0cmwpOworCQkJZWxzZQorCQkJCWYgPSBOVUxMOworCQl9CisJCWlmICh2YWx1ZSA8IDAgJiYgIWYpIHsKKwkJCXN0cnVjdCB1c2JfY29uZmlndXJhdGlvbgkqYzsKKworCQkJYyA9IGNkZXYtPmNvbmZpZzsKKwkJCWlmIChjICYmIGMtPnNldHVwKQorCQkJCXZhbHVlID0gYy0+c2V0dXAoYywgY3RybCk7CisJCX0KKworCQlnb3RvIGRvbmU7CisJfQorCisJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KKwlpZiAodmFsdWUgPj0gMCkgeworCQlyZXEtPmxlbmd0aCA9IHZhbHVlOworCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdfbGVuZ3RoOworCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZShnYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHZhbHVlIDwgMCkgeworCQkJREJHKGNkZXYsICJlcF9xdWV1ZSAtLT4gJWRcbiIsIHZhbHVlKTsKKwkJCXJlcS0+c3RhdHVzID0gMDsKKwkJCWNvbXBvc2l0ZV9zZXR1cF9jb21wbGV0ZShnYWRnZXQtPmVwMCwgcmVxKTsKKwkJfQorCX0KKworZG9uZToKKwkvKiBkZXZpY2UgZWl0aGVyIHN0YWxscyAodmFsdWUgPCAwKSBvciByZXBvcnRzIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBvc2l0ZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworCisJLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBhbmQgZGV2aWNlIGxldmVsCisJICogZGlzY29ubmVjdCBjYWxsYmFja3M/CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoY2Rldi0+Y29uZmlnKQorCQlyZXNldF9jb25maWcoY2Rldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2Rldi0+bG9jaywgZmxhZ3MpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCAvKiBfX2luaXRfb3JfZXhpdCAqLworY29tcG9zaXRlX3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCisJLyogY29tcG9zaXRlX2Rpc2Nvbm5lY3QoKSBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIGNhbGxlZAorCSAqIGJ5IHRoZSB1bmRlcmx5aW5nIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXIhCisJICogc28gdGhlcmUncyBubyBpL28gY29uY3VycmVuY3kgdGhhdCBjb3VsZCBhZmZlY3QgdGhlCisJICogc3RhdGUgcHJvdGVjdGVkIGJ5IGNkZXYtPmxvY2suCisJICovCisJV0FSTl9PTihjZGV2LT5jb25maWcpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjZGV2LT5jb25maWdzKSkgeworCQlzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24JKmM7CisKKwkJYyA9IGxpc3RfZmlyc3RfZW50cnkoJmNkZXYtPmNvbmZpZ3MsCisJCQkJc3RydWN0IHVzYl9jb25maWd1cmF0aW9uLCBsaXN0KTsKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZjLT5mdW5jdGlvbnMpKSB7CisJCQlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQkqZjsKKworCQkJZiA9IGxpc3RfZmlyc3RfZW50cnkoJmMtPmZ1bmN0aW9ucywKKwkJCQkJc3RydWN0IHVzYl9mdW5jdGlvbiwgbGlzdCk7CisJCQlsaXN0X2RlbCgmZi0+bGlzdCk7CisJCQlpZiAoZi0+dW5iaW5kKSB7CisJCQkJREJHKGNkZXYsICJ1bmJpbmQgZnVuY3Rpb24gJyVzJy8lcFxuIiwKKwkJCQkJCWYtPm5hbWUsIGYpOworCQkJCWYtPnVuYmluZChjLCBmKTsKKwkJCQkvKiBtYXkgZnJlZSBtZW1vcnkgZm9yICJmIiAqLworCQkJfQorCQl9CisJCWxpc3RfZGVsKCZjLT5saXN0KTsKKwkJaWYgKGMtPnVuYmluZCkgeworCQkJREJHKGNkZXYsICJ1bmJpbmQgY29uZmlnICclcycvJXBcbiIsIGMtPmxhYmVsLCBjKTsKKwkJCWMtPnVuYmluZChjKTsKKwkJCS8qIG1heSBmcmVlIG1lbW9yeSBmb3IgImMiICovCisJCX0KKwl9CisJaWYgKGNvbXBvc2l0ZS0+dW5iaW5kKQorCQljb21wb3NpdGUtPnVuYmluZChjZGV2KTsKKworCWlmIChjZGV2LT5yZXEpIHsKKwkJa2ZyZWUoY2Rldi0+cmVxLT5idWYpOworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC0+ZXAwLCBjZGV2LT5yZXEpOworCX0KKwlrZnJlZShjZGV2KTsKKwlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTsKKwljb21wb3NpdGUgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3N0cmluZ19vdmVycmlkZV9vbmUoc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqdGFiLCB1OCBpZCwgY29uc3QgY2hhciAqcykKK3sKKwlzdHJ1Y3QgdXNiX3N0cmluZwkJKnN0ciA9IHRhYi0+c3RyaW5nczsKKworCWZvciAoc3RyID0gdGFiLT5zdHJpbmdzOyBzdHItPnM7IHN0cisrKSB7CisJCWlmIChzdHItPmlkID09IGlkKSB7CisJCQlzdHItPnMgPSBzOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3N0cmluZ19vdmVycmlkZShzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzICoqdGFiLCB1OCBpZCwgY29uc3QgY2hhciAqcykKK3sKKwl3aGlsZSAoKnRhYikgeworCQlzdHJpbmdfb3ZlcnJpZGVfb25lKCp0YWIsIGlkLCBzKTsKKwkJdGFiKys7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBjb21wb3NpdGVfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldjsKKwlpbnQJCQkJc3RhdHVzID0gLUVOT01FTTsKKworCWNkZXYgPSBremFsbG9jKHNpemVvZiAqY2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZGV2KQorCQlyZXR1cm4gc3RhdHVzOworCisJc3Bpbl9sb2NrX2luaXQoJmNkZXYtPmxvY2spOworCWNkZXYtPmdhZGdldCA9IGdhZGdldDsKKwlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBjZGV2KTsKKwlJTklUX0xJU1RfSEVBRCgmY2Rldi0+Y29uZmlncyk7CisKKwkvKiBwcmVhbGxvY2F0ZSBjb250cm9sIHJlc3BvbnNlIGFuZCBidWZmZXIgKi8KKwljZGV2LT5yZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChnYWRnZXQtPmVwMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZGV2LT5yZXEpCisJCWdvdG8gZmFpbDsKKwljZGV2LT5yZXEtPmJ1ZiA9IGttYWxsb2MoVVNCX0JVRlNJWiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZGV2LT5yZXEtPmJ1ZikKKwkJZ290byBmYWlsOworCWNkZXYtPnJlcS0+Y29tcGxldGUgPSBjb21wb3NpdGVfc2V0dXBfY29tcGxldGU7CisJZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gY2RldjsKKworCWNkZXYtPmJ1ZnNpeiA9IFVTQl9CVUZTSVo7CisJY2Rldi0+ZHJpdmVyID0gY29tcG9zaXRlOworCisJdXNiX2dhZGdldF9zZXRfc2VsZnBvd2VyZWQoZ2FkZ2V0KTsKKworCS8qIGludGVyZmFjZSBhbmQgc3RyaW5nIElEcyBzdGFydCBhdCB6ZXJvIHZpYSBremFsbG9jLgorCSAqIHdlIGZvcmNlIGVuZHBvaW50cyB0byBzdGFydCB1bmFzc2lnbmVkOyBmZXcgY29udHJvbGxlcgorCSAqIGRyaXZlcnMgd2lsbCB6ZXJvIGVwLT5kcml2ZXJfZGF0YS4KKwkgKi8KKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldChjZGV2LT5nYWRnZXQpOworCisJLyogY29tcG9zaXRlIGdhZGdldCBuZWVkcyB0byBhc3NpZ24gc3RyaW5ncyBmb3Igd2hvbGUgZGV2aWNlIChsaWtlCisJICogc2VyaWFsIG51bWJlciksIHJlZ2lzdGVyIGZ1bmN0aW9uIGRyaXZlcnMsIHBvdGVudGlhbGx5IHVwZGF0ZQorCSAqIHBvd2VyIHN0YXRlIGFuZCBjb25zdW1wdGlvbiwgZXRjCisJICovCisJc3RhdHVzID0gY29tcG9zaXRlLT5iaW5kKGNkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWw7CisKKwljZGV2LT5kZXNjID0gKmNvbXBvc2l0ZS0+ZGV2OworCWNkZXYtPmRlc2MuYk1heFBhY2tldFNpemUwID0gZ2FkZ2V0LT5lcDAtPm1heHBhY2tldDsKKworCS8qIHN0YW5kYXJkaXplZCBydW50aW1lIG92ZXJyaWRlcyBmb3IgZGV2aWNlIElEIGRhdGEgKi8KKwlpZiAoaWRWZW5kb3IpCisJCWNkZXYtPmRlc2MuaWRWZW5kb3IgPSBjcHVfdG9fbGUxNihpZFZlbmRvcik7CisJaWYgKGlkUHJvZHVjdCkKKwkJY2Rldi0+ZGVzYy5pZFByb2R1Y3QgPSBjcHVfdG9fbGUxNihpZFByb2R1Y3QpOworCWlmIChiY2REZXZpY2UpCisJCWNkZXYtPmRlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoYmNkRGV2aWNlKTsKKworCS8qIHN0cmluZ3MgY2FuJ3QgYmUgYXNzaWduZWQgYmVmb3JlIGJpbmQoKSBhbGxvY2F0ZXMgdGhlCisJICogcmVsZWF2bnQgaWRlbnRpZmllcnMKKwkgKi8KKwlpZiAoY2Rldi0+ZGVzYy5pTWFudWZhY3R1cmVyICYmIGlNYW51ZmFjdHVyZXIpCisJCXN0cmluZ19vdmVycmlkZShjb21wb3NpdGUtPnN0cmluZ3MsCisJCQljZGV2LT5kZXNjLmlNYW51ZmFjdHVyZXIsIGlNYW51ZmFjdHVyZXIpOworCWlmIChjZGV2LT5kZXNjLmlQcm9kdWN0ICYmIGlQcm9kdWN0KQorCQlzdHJpbmdfb3ZlcnJpZGUoY29tcG9zaXRlLT5zdHJpbmdzLAorCQkJY2Rldi0+ZGVzYy5pUHJvZHVjdCwgaVByb2R1Y3QpOworCWlmIChjZGV2LT5kZXNjLmlTZXJpYWxOdW1iZXIgJiYgaVNlcmlhbE51bWJlcikKKwkJc3RyaW5nX292ZXJyaWRlKGNvbXBvc2l0ZS0+c3RyaW5ncywKKwkJCWNkZXYtPmRlc2MuaVNlcmlhbE51bWJlciwgaVNlcmlhbE51bWJlcik7CisKKwlJTkZPKGNkZXYsICIlcyByZWFkeVxuIiwgY29tcG9zaXRlLT5uYW1lKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwljb21wb3NpdGVfdW5iaW5kKGdhZGdldCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK2NvbXBvc2l0ZV9zdXNwZW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJc3RydWN0IHVzYl9mdW5jdGlvbgkJKmY7CisKKwkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGFuZCBkZXZpY2UgbGV2ZWwKKwkgKiBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3M/CisJICovCisJREJHKGNkZXYsICJzdXNwZW5kXG4iKTsKKwlpZiAoY2Rldi0+Y29uZmlnKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmNkZXYtPmNvbmZpZy0+ZnVuY3Rpb25zLCBsaXN0KSB7CisJCQlpZiAoZi0+c3VzcGVuZCkKKwkJCQlmLT5zdXNwZW5kKGYpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorY29tcG9zaXRlX3Jlc3VtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCXN0cnVjdCB1c2JfZnVuY3Rpb24JCSpmOworCisJLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBhbmQgZGV2aWNlIGxldmVsCisJICogc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzPworCSAqLworCURCRyhjZGV2LCAicmVzdW1lXG4iKTsKKwlpZiAoY2Rldi0+Y29uZmlnKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmNkZXYtPmNvbmZpZy0+ZnVuY3Rpb25zLCBsaXN0KSB7CisJCQlpZiAoZi0+cmVzdW1lKQorCQkJCWYtPnJlc3VtZShmKTsKKwkJfQorCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBjb21wb3NpdGVfZHJpdmVyID0geworCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKKworCS5iaW5kCQk9IGNvbXBvc2l0ZV9iaW5kLAorCS51bmJpbmQJCT0gX19leGl0X3AoY29tcG9zaXRlX3VuYmluZCksCisKKwkuc2V0dXAJCT0gY29tcG9zaXRlX3NldHVwLAorCS5kaXNjb25uZWN0CT0gY29tcG9zaXRlX2Rpc2Nvbm5lY3QsCisKKwkuc3VzcGVuZAk9IGNvbXBvc2l0ZV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gY29tcG9zaXRlX3Jlc3VtZSwKKworCS5kcml2ZXIJPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworLyoqCisgKiB1c2JfY29tcG9zaXRlX3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIGNvbXBvc2l0ZSBkcml2ZXIKKyAqIEBkcml2ZXI6IHRoZSBkcml2ZXIgdG8gcmVnaXN0ZXIKKyAqIENvbnRleHQ6IHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgZ2FkZ2V0IHNldHVwCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlZ2lzdGVyIGRyaXZlcnMgdXNpbmcgdGhlIGNvbXBvc2l0ZSBkcml2ZXIKKyAqIGZyYW1ld29yay4gIFRoZSByZXR1cm4gdmFsdWUgaXMgemVybywgb3IgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZS4KKyAqIFRob3NlIHZhbHVlcyBub3JtYWxseSBjb21lIGZyb20gdGhlIGRyaXZlcidzIEBiaW5kIG1ldGhvZCwgd2hpY2ggZG9lcworICogYWxsIHRoZSB3b3JrIG9mIHNldHRpbmcgdXAgdGhlIGRyaXZlciB0byBtYXRjaCB0aGUgaGFyZHdhcmUuCisgKgorICogT24gc3VjY2Vzc2Z1bCByZXR1cm4sIHRoZSBnYWRnZXQgaXMgcmVhZHkgdG8gcmVzcG9uZCB0byByZXF1ZXN0cyBmcm9tCisgKiB0aGUgaG9zdCwgdW5sZXNzIG9uZSBvZiBpdHMgY29tcG9uZW50cyBpbnZva2VzIHVzYl9nYWRnZXRfZGlzY29ubmVjdCgpCisgKiB3aGlsZSBpdCB3YXMgYmluZGluZy4gIFRoYXQgd291bGQgdXN1YWxseSBiZSBkb25lIGluIG9yZGVyIHRvIHdhaXQgZm9yCisgKiBzb21lIHVzZXJzcGFjZSBwYXJ0aWNpcGF0aW9uLgorICovCitpbnQgX19pbml0IHVzYl9jb21wb3NpdGVfcmVnaXN0ZXIoc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyICpkcml2ZXIpCit7CisJaWYgKCFkcml2ZXIgfHwgIWRyaXZlci0+ZGV2IHx8ICFkcml2ZXItPmJpbmQgfHwgY29tcG9zaXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZHJpdmVyLT5uYW1lKQorCQlkcml2ZXItPm5hbWUgPSAiY29tcG9zaXRlIjsKKwljb21wb3NpdGVfZHJpdmVyLmZ1bmN0aW9uID0gIChjaGFyICopIGRyaXZlci0+bmFtZTsKKwljb21wb3NpdGVfZHJpdmVyLmRyaXZlci5uYW1lID0gZHJpdmVyLT5uYW1lOworCWNvbXBvc2l0ZSA9IGRyaXZlcjsKKworCXJldHVybiB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcigmY29tcG9zaXRlX2RyaXZlcik7Cit9CisKKy8qKgorICogdXNiX2NvbXBvc2l0ZV91bnJlZ2lzdGVyKCkgLSB1bnJlZ2lzdGVyIGEgY29tcG9zaXRlIGRyaXZlcgorICogQGRyaXZlcjogdGhlIGRyaXZlciB0byB1bnJlZ2lzdGVyCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHVucmVnaXN0ZXIgZHJpdmVycyB1c2luZyB0aGUgY29tcG9zaXRlCisgKiBkcml2ZXIgZnJhbWV3b3JrLgorICovCit2b2lkIF9fZXhpdCB1c2JfY29tcG9zaXRlX3VucmVnaXN0ZXIoc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyICpkcml2ZXIpCit7CisJaWYgKGNvbXBvc2l0ZSAhPSBkcml2ZXIpCisJCXJldHVybjsKKwl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKCZjb21wb3NpdGVfZHJpdmVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb25maWcuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb25maWcuYwppbmRleCBhNGU1NGIyLi4xY2ExYzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29uZmlnLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZy5jCkBAIC05Niw3ICs5Niw3IEBACiAJLyogY29uZmlnIGRlc2NyaXB0b3IgZmlyc3QgKi8KIAlpZiAobGVuZ3RoIDwgVVNCX0RUX0NPTkZJR19TSVpFIHx8ICFkZXNjKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkqY3AgPSAqY29uZmlnOyAKKwkqY3AgPSAqY29uZmlnOwogCiAJLyogdGhlbiBpbnRlcmZhY2UvZW5kcG9pbnQvY2xhc3MvdmVuZG9yLy4uLiAqLwogCWxlbiA9IHVzYl9kZXNjcmlwdG9yX2ZpbGxidWYoVVNCX0RUX0NPTkZJR19TSVpFICsgKHU4KilidWYsCkBAIC0xMTUsMyArMTE1LDc3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorLyoqCisgKiB1c2JfY29weV9kZXNjcmlwdG9ycyAtIGNvcHkgYSB2ZWN0b3Igb2YgVVNCIGRlc2NyaXB0b3JzCisgKiBAc3JjOiBudWxsLXRlcm1pbmF0ZWQgdmVjdG9yIHRvIGNvcHkKKyAqIENvbnRleHQ6IGluaXRpYWxpemF0aW9uIGNvZGUsIHdoaWNoIG1heSBzbGVlcAorICoKKyAqIFRoaXMgbWFrZXMgYSBjb3B5IG9mIGEgdmVjdG9yIG9mIFVTQiBkZXNjcmlwdG9ycy4gIEl0cyBwcmltYXJ5IHVzZQorICogaXMgdG8gc3VwcG9ydCB1c2JfZnVuY3Rpb24gb2JqZWN0cyB3aGljaCBjYW4gaGF2ZSBtdWx0aXBsZSBjb3BpZXMsCisgKiBlYWNoIG5lZWRpbmcgZGlmZmVyZW50IGRlc2NyaXB0b3JzLiAgRnVuY3Rpb25zIG1heSBoYXZlIHN0YXRpYworICogdGFibGVzIG9mIGRlc2NyaXB0b3JzLCB3aGljaCBhcmUgdXNlZCBhcyB0ZW1wbGF0ZXMgYW5kIGN1c3RvbWl6ZWQKKyAqIHdpdGggaWRlbnRpZmllcnMgKGZvciBpbnRlcmZhY2VzLCBzdHJpbmdzLCBlbmRwb2ludHMsIGFuZCBtb3JlKQorICogYXMgbmVlZGVkIGJ5IGEgZ2l2ZW4gZnVuY3Rpb24gaW5zdGFuY2UuCisgKi8KK3N0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipfX2luaXQKK3VzYl9jb3B5X2Rlc2NyaXB0b3JzKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipzcmMpCit7CisJc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKnRtcDsKKwl1bnNpZ25lZCBieXRlczsKKwl1bnNpZ25lZCBuX2Rlc2M7CisJdm9pZCAqbWVtOworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipyZXQ7CisKKwkvKiBjb3VudCBkZXNjcmlwdG9ycyBhbmQgdGhlaXIgc2l6ZXM7IHRoZW4gYWRkIHZlY3RvciBzaXplICovCisJZm9yIChieXRlcyA9IDAsIG5fZGVzYyA9IDAsIHRtcCA9IHNyYzsgKnRtcDsgdG1wKyssIG5fZGVzYysrKQorCQlieXRlcyArPSAoKnRtcCktPmJMZW5ndGg7CisJYnl0ZXMgKz0gKG5fZGVzYyArIDEpICogc2l6ZW9mKCp0bXApOworCisJbWVtID0ga21hbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCisJLyogZmlsbCBpbiBwb2ludGVycyBzdGFydGluZyBhdCAidG1wIiwKKwkgKiB0byBkZXNjcmlwdG9ycyBjb3BpZWQgc3RhcnRpbmcgYXQgIm1lbSI7CisJICogYW5kIHJldHVybiAicmV0IgorCSAqLworCXRtcCA9IG1lbTsKKwlyZXQgPSBtZW07CisJbWVtICs9IChuX2Rlc2MgKyAxKSAqIHNpemVvZigqdG1wKTsKKwl3aGlsZSAoKnNyYykgeworCQltZW1jcHkobWVtLCAqc3JjLCAoKnNyYyktPmJMZW5ndGgpOworCQkqdG1wID0gbWVtOworCQl0bXArKzsKKwkJbWVtICs9ICgqc3JjKS0+Ykxlbmd0aDsKKwkJc3JjKys7CisJfQorCSp0bXAgPSBOVUxMOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB1c2JfZmluZF9lbmRwb2ludCAtIGZpbmQgYSBjb3B5IG9mIGFuIGVuZHBvaW50IGRlc2NyaXB0b3IKKyAqIEBzcmM6IG9yaWdpbmFsIHZlY3RvciBvZiBkZXNjcmlwdG9ycworICogQGNvcHk6IGNvcHkgb2YgQHNyYworICogQGVwOiBlbmRwb2ludCBkZXNjcmlwdG9yIGZvdW5kIGluIEBzcmMKKyAqCisgKiBUaGlzIHJldHVybnMgdGhlIGNvcHkgb2YgdGhlIEBtYXRjaCBkZXNjcmlwdG9yIG1hZGUgZm9yIEBjb3B5LiAgSXRzCisgKiBpbnRlbmRlZCB1c2UgaXMgdG8gaGVscCByZW1lbWJlcmluZyB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvciB0byB1c2UKKyAqIHdoZW4gZW5hYmxpbmcgYSBnaXZlbiBlbmRwb2ludC4KKyAqLworc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpfX2luaXQKK3VzYl9maW5kX2VuZHBvaW50KAorCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipzcmMsCisJc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKmNvcHksCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICptYXRjaAorKQoreworCXdoaWxlICgqc3JjKSB7CisJCWlmICgqc3JjID09ICh2b2lkICopIG1hdGNoKQorCQkJcmV0dXJuICh2b2lkICopKmNvcHk7CisJCXNyYysrOworCQljb3B5Kys7CisJfQorCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDQyMDM2MTkuLjIxZDE0MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTg2Miw3ICs4NjIsNyBAQAogCS8qIG1heWJlIGNsYWltIE9URyBzdXBwb3J0LCB0aG91Z2ggd2Ugd29uJ3QgY29tcGxldGUgSE5QICovCiAJZHVtLT5nYWRnZXQuaXNfb3RnID0gKGR1bW15X3RvX2hjZChkdW0pLT5zZWxmLm90Z19wb3J0ICE9IDApOwogCi0Jc3RyY3B5IChkdW0tPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2X3NldF9uYW1lKCZkdW0tPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKIAlkdW0tPmdhZGdldC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAlkdW0tPmdhZGdldC5kZXYucmVsZWFzZSA9IGR1bW15X2dhZGdldF9yZWxlYXNlOwogCXJjID0gZGV2aWNlX3JlZ2lzdGVyICgmZHVtLT5nYWRnZXQuZGV2KTsKQEAgLTE4NjUsNyArMTg2NSw3IEBACiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMsIGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICJcbiIsIGRyaXZlcl9kZXNjKTsKIAotCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZkdW1teV9oY2QsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZkdW1teV9oY2QsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAlpZiAoIWhjZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdGhlX2NvbnRyb2xsZXIgPSBoY2RfdG9fZHVtbXkgKGhjZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwppbmRleCA4YmRhZDIyLi45NDYyZTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKQEAgLTE1OSw2ICsxNTksNyBAQAogCS8qIE1BVENIISEgKi8KIAogCS8qIHJlcG9ydCBhZGRyZXNzICovCisJZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmPSBVU0JfRElSX0lOOwogCWlmIChpc2RpZ2l0IChlcC0+bmFtZSBbMl0pKSB7CiAJCXU4CW51bSA9IHNpbXBsZV9zdHJ0b2wgKCZlcC0+bmFtZSBbMl0sIE5VTEwsIDEwKTsKIAkJZGVzYy0+YkVuZHBvaW50QWRkcmVzcyB8PSBudW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IDRjZTM5NTAuLmQ3YWFhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC0xLDggKzEsOSBAQAogLyoKICAqIGV0aGVyLmMgLS0gRXRoZXJuZXQgZ2FkZ2V0IGRyaXZlciwgd2l0aCBDREMgYW5kIG5vbi1DREMgb3B0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSwyMDA4IERhdmlkIEJyb3duZWxsCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBSb2JlcnQgU2Nod2ViZWwsIEJlbmVkaWt0IFNwcmFuZ2VyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzLDE4ICsyNCw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgInVfZXRoZXIuaCIKIAotI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgogICogRXRoZXJuZXQgZ2FkZ2V0IGRyaXZlciAtLSB3aXRoIENEQyBhbmQgbm9uLUNEQyBvcHRpb25zCkBAIC00Niw3ICszOCwxMSBAQAogICogdGhpcyBVU0ItSUYgc3RhbmRhcmQgYXMgaXRzIG9wZW4tc3lzdGVtcyBpbnRlcm9wZXJhYmlsaXR5IHNvbHV0aW9uOwogICogbW9zdCBob3N0IHNpZGUgVVNCIHN0YWNrcyAoZXhjZXB0IGZyb20gTWljcm9zb2Z0KSBzdXBwb3J0IGl0LgogICoKLSAqIFRoZXJlJ3Mgc29tZSBoYXJkd2FyZSB0aGF0IGNhbid0IHRhbGsgQ0RDLiAgV2UgbWFrZSB0aGF0IGhhcmR3YXJlCisgKiBUaGlzIGlzIHNvbWV0aW1lcyBjYWxsZWQgIkNEQyBFQ00iIChFdGhlcm5ldCBDb250cm9sIE1vZGVsKSB0byBzdXBwb3J0CisgKiBUTEEtc291cC4gICJDREMgQUNNIiAoQWJzdHJhY3QgQ29udHJvbCBNb2RlbCkgaXMgZm9yIG1vZGVtcywgYW5kIGEgbmV3CisgKiAiQ0RDIEVFTSIgKEV0aGVybmV0IEVtdWxhdGlvbiBNb2RlbCkgaXMgc3RhcnRpbmcgdG8gc3ByZWFkLgorICoKKyAqIFRoZXJlJ3Mgc29tZSBoYXJkd2FyZSB0aGF0IGNhbid0IHRhbGsgQ0RDIEVDTS4gIFdlIG1ha2UgdGhhdCBoYXJkd2FyZQogICogaW1wbGVtZW50IGEgIm1pbmltYWxpc3QiIHZlbmRvci1hZ25vc3RpYyBDREMgY29yZTogIHNhbWUgZnJhbWluZywgYnV0CiAgKiBsaW5rLWxldmVsIHNldHVwIG9ubHkgcmVxdWlyZXMgYWN0aXZhdGluZyB0aGUgY29uZmlndXJhdGlvbi4gIE9ubHkgdGhlCiAgKiBlbmRwb2ludCBkZXNjcmlwdG9ycywgYW5kIHByb2R1Y3QvdmVuZG9yIElEcywgYXJlIHJlbGV2YW50OyBubyBjb250cm9sCkBAIC02NCw3MCArNjAsNDAgQEAKICAqIEEgdGhpcmQgb3B0aW9uIGlzIGFsc28gaW4gdXNlLiAgUmF0aGVyIHRoYW4gQ0RDIEV0aGVybmV0LCBvciBzb21ldGhpbmcKICAqIHNpbXBsZXIsIE1pY3Jvc29mdCBwdXNoZXMgdGhlaXIgb3duIGFwcHJvYWNoOiBSTkRJUy4gIFRoZSBwdWJsaXNoZWQKICAqIFJORElTIHNwZWNzIGFyZSBhbWJpZ3VvdXMgYW5kIGFwcGVhciB0byBiZSBpbmNvbXBsZXRlLCBhbmQgYXJlIGFsc28KLSAqIG5lZWRsZXNzbHkgY29tcGxleC4KKyAqIG5lZWRsZXNzbHkgY29tcGxleC4gIFRoZXkgYm9ycm93IG1vcmUgZnJvbSBDREMgQUNNIHRoYW4gQ0RDIEVDTS4KICAqLwogCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiRXRoZXJuZXQgR2FkZ2V0IgotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIk1heSBEYXkgMjAwNSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSJNZW1vcmlhbCBEYXkgMjAwOCIKIAotc3RhdGljIGNvbnN0IGNoYXIgc2hvcnRuYW1lIFtdID0gImV0aGVyIjsKLXN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjIFtdID0gRFJJVkVSX0RFU0M7Ci0KLSNkZWZpbmUgUlhfRVhUUkEJMjAJCS8qIGd1YXJkIGFnYWluc3Qgcnggb3ZlcmZsb3dzICovCi0KLSNpbmNsdWRlICJybmRpcy5oIgotCi0jaWZuZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCi0jZGVmaW5lIHJuZGlzX3VuaW5pdCh4KQkJZG97fXdoaWxlKDApCi0jZGVmaW5lIHJuZGlzX2RlcmVnaXN0ZXIoYykJZG97fXdoaWxlKDApCi0jZGVmaW5lIHJuZGlzX2V4aXQoKQkJZG97fXdoaWxlKDApCisjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKKyNkZWZpbmUgUFJFRklYCQkJIlJORElTLyIKKyNlbHNlCisjZGVmaW5lIFBSRUZJWAkJCSIiCiAjZW5kaWYKIAotLyogQ0RDIGFuZCBSTkRJUyBzdXBwb3J0IHRoZSBzYW1lIGhvc3QtY2hvc2VuIG91dGdvaW5nIHBhY2tldCBmaWx0ZXJzLiAqLwotI2RlZmluZQlERUZBVUxUX0ZJTFRFUgkoVVNCX0NEQ19QQUNLRVRfVFlQRV9CUk9BRENBU1QgXAotCQkJfFVTQl9DRENfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCBcCi0JCQl8VVNCX0NEQ19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUyBcCi0JCQl8VVNCX0NEQ19QQUNLRVRfVFlQRV9ESVJFQ1RFRCkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdHJ1Y3QgZXRoX2RldiB7Ci0Jc3BpbmxvY2tfdAkJbG9jazsKLQlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OwotCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwkJLyogZm9yIGNvbnRyb2wgcmVzcG9uc2VzICovCi0Jc3RydWN0IHVzYl9yZXF1ZXN0CSpzdGF0X3JlcTsJLyogZm9yIGNkYyAmIHJuZGlzIHN0YXR1cyAqLwotCi0JdTgJCQljb25maWc7Ci0Jc3RydWN0IHVzYl9lcAkJKmluX2VwLCAqb3V0X2VwLCAqc3RhdHVzX2VwOwotCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgotCQkJCSppbiwgKm91dCwgKnN0YXR1czsKLQotCXNwaW5sb2NrX3QJCXJlcV9sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQJdHhfcmVxcywgcnhfcmVxczsKLQotCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7Ci0JYXRvbWljX3QJCXR4X3FsZW47Ci0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKLQl1bnNpZ25lZAkJemxwOjE7Ci0JdW5zaWduZWQJCWNkYzoxOwotCXVuc2lnbmVkCQlybmRpczoxOwotCXVuc2lnbmVkCQlzdXNwZW5kZWQ6MTsKLQl1MTYJCQljZGNfZmlsdGVyOwotCXVuc2lnbmVkIGxvbmcJCXRvZG87Ci0jZGVmaW5lCVdPUktfUlhfTUVNT1JZCQkwCi0JaW50CQkJcm5kaXNfY29uZmlnOwotCXU4CQkJaG9zdF9tYWMgW0VUSF9BTEVOXTsKLX07Ci0KLS8qIFRoaXMgdmVyc2lvbiBhdXRvY29uZmlndXJlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGF0IHJ1bi10aW1lLgorLyoKKyAqIFRoaXMgZHJpdmVyIGFpbXMgZm9yIGludGVyb3BlcmFiaWxpdHkgYnkgdXNpbmcgQ0RDIEVDTSB1bmxlc3MKICAqCi0gKiBJdCBhbHNvIEFTU1VNRVMgYSBzZWxmLXBvd2VyZWQgZGV2aWNlLCB3aXRob3V0IHJlbW90ZSB3YWtldXAsCi0gKiBhbHRob3VnaCByZW1vdGUgd2FrZXVwIHN1cHBvcnQgd291bGQgbWFrZSBzZW5zZS4KKyAqCQljYW5fc3VwcG9ydF9lY20oKQorICoKKyAqIHJldHVybnMgZmFsc2UsIGluIHdoaWNoIGNhc2UgaXQgc3VwcG9ydHMgdGhlIENEQyBTdWJzZXQuICBCeSBkZWZhdWx0LAorICogdGhhdCByZXR1cm5zIHRydWU7IG1vc3QgaGFyZHdhcmUgaGFzIG5vIHByb2JsZW1zIHdpdGggQ0RDIEVDTSwgdGhhdCdzCisgKiBhIGdvb2QgZGVmYXVsdC4gIFByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyIGhhZCBubyBkZWZhdWx0OyB0aGlzCisgKiB2ZXJzaW9uIGNoYW5nZXMgdGhhdCwgcmVtb3Zpbmcgb3ZlcmhlYWQgZm9yIG5ldyBjb250cm9sbGVyIHN1cHBvcnQuCisgKgorICoJSUYgWU9VUiBIQVJEV0FSRSBDQU4nVCBTVVBQT1JUIENEQyBFQ00sIFVQREFURSBUSEFUIFJPVVRJTkUhCiAgKi8KIAorc3RhdGljIGlubGluZSBib29sIGhhc19ybmRpcyh2b2lkKQoreworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBETyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYSBwcm90b2NvbC1pbmNvbXBhdGlibGUgZHJpdmVyISEgIEV2ZXIhIQpAQCAtMTM3LDggKzEwMyw4IEBACiAvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KICAqIEl0J3MgZm9yIGRldmljZXMgd2l0aCBvbmx5IENEQyBFdGhlcm5ldCBjb25maWd1cmF0aW9ucy4KICAqLwotI2RlZmluZSBDRENfVkVORE9SX05VTQkweDA1MjUJCS8qIE5ldENoaXAgKi8KLSNkZWZpbmUgQ0RDX1BST0RVQ1RfTlVNCTB4YTRhMQkJLyogTGludXgtVVNCIEV0aGVybmV0IEdhZGdldCAqLworI2RlZmluZSBDRENfVkVORE9SX05VTQkJMHgwNTI1CS8qIE5ldENoaXAgKi8KKyNkZWZpbmUgQ0RDX1BST0RVQ1RfTlVNCQkweGE0YTEJLyogTGludXgtVVNCIEV0aGVybmV0IEdhZGdldCAqLwogCiAvKiBGb3IgaGFyZHdhcmUgdGhhdCBjYW4ndCB0YWxrIENEQywgd2UgdXNlIHRoZSBzYW1lIHZlbmRvciBJRCB0aGF0CiAgKiBBUk0gTGludXggaGFzIHVzZWQgZm9yIGV0aGVybmV0LW92ZXItdXNiLCBib3RoIHdpdGggc2ExMTAwIGFuZApAQCAtMTYyLDI3NCArMTI4LDkgQEAKICNkZWZpbmUgUk5ESVNfVkVORE9SX05VTQkweDA1MjUJLyogTmV0Q2hpcCAqLwogI2RlZmluZSBSTkRJU19QUk9EVUNUX05VTQkweGE0YTIJLyogRXRoZXJuZXQvUk5ESVMgR2FkZ2V0ICovCiAKLQotLyogU29tZSBzeXN0ZW1zIHdpbGwgd2FudCBkaWZmZXJlbnQgcHJvZHVjdCBpZGVudGlmZXJzIHB1Ymxpc2hlZCBpbiB0aGUKLSAqIGRldmljZSBkZXNjcmlwdG9yLCBlaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIG9yIGJvdGguICBUaGVzZSBzdHJpbmcKLSAqIHBhcmFtZXRlcnMgYXJlIGluIFVURi04IChzdXBlcnNldCBvZiBBU0NJSSdzIDcgYml0IGNoYXJhY3RlcnMpLgotICovCi0KLXN0YXRpYyB1c2hvcnQgaWRWZW5kb3I7Ci1tb2R1bGVfcGFyYW0oaWRWZW5kb3IsIHVzaG9ydCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlkVmVuZG9yLCAiVVNCIFZlbmRvciBJRCIpOwotCi1zdGF0aWMgdXNob3J0IGlkUHJvZHVjdDsKLW1vZHVsZV9wYXJhbShpZFByb2R1Y3QsIHVzaG9ydCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlkUHJvZHVjdCwgIlVTQiBQcm9kdWN0IElEIik7Ci0KLXN0YXRpYyB1c2hvcnQgYmNkRGV2aWNlOwotbW9kdWxlX3BhcmFtKGJjZERldmljZSwgdXNob3J0LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoYmNkRGV2aWNlLCAiVVNCIERldmljZSB2ZXJzaW9uIChCQ0QpIik7Ci0KLXN0YXRpYyBjaGFyICppTWFudWZhY3R1cmVyOwotbW9kdWxlX3BhcmFtKGlNYW51ZmFjdHVyZXIsIGNoYXJwLCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoaU1hbnVmYWN0dXJlciwgIlVTQiBNYW51ZmFjdHVyZXIgc3RyaW5nIik7Ci0KLXN0YXRpYyBjaGFyICppUHJvZHVjdDsKLW1vZHVsZV9wYXJhbShpUHJvZHVjdCwgY2hhcnAsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhpUHJvZHVjdCwgIlVTQiBQcm9kdWN0IHN0cmluZyIpOwotCi1zdGF0aWMgY2hhciAqaVNlcmlhbE51bWJlcjsKLW1vZHVsZV9wYXJhbShpU2VyaWFsTnVtYmVyLCBjaGFycCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlTZXJpYWxOdW1iZXIsICJTZXJpYWxOdW1iZXIiKTsKLQotLyogaW5pdGlhbCB2YWx1ZSwgY2hhbmdlZCBieSAiaWZjb25maWcgdXNiMCBodyBldGhlciB4eDp4eDp4eDp4eDp4eDp4eCIgKi8KLXN0YXRpYyBjaGFyICpkZXZfYWRkcjsKLW1vZHVsZV9wYXJhbShkZXZfYWRkciwgY2hhcnAsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhkZXZfYWRkciwgIkRldmljZSBFdGhlcm5ldCBBZGRyZXNzIik7Ci0KLS8qIHRoaXMgYWRkcmVzcyBpcyBpbnZpc2libGUgdG8gaWZjb25maWcgKi8KLXN0YXRpYyBjaGFyICpob3N0X2FkZHI7Ci1tb2R1bGVfcGFyYW0oaG9zdF9hZGRyLCBjaGFycCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhvc3RfYWRkciwgIkhvc3QgRXRoZXJuZXQgQWRkcmVzcyIpOwotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEluY2x1ZGUgQ0RDIHN1cHBvcnQgaWYgd2UgY291bGQgcnVuIG9uIENEQy1jYXBhYmxlIGhhcmR3YXJlLiAqLwotCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MAotI2RlZmluZQlERVZfQ09ORklHX0NEQwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QKLSNkZWZpbmUJREVWX0NPTkZJR19DREMKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfR09LVQotI2RlZmluZQlERVZfQ09ORklHX0NEQwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYCi0jZGVmaW5lIERFVl9DT05GSUdfQ0RDCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01RMTFYWAotI2RlZmluZQlERVZfQ09ORklHX0NEQwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9PTUFQCi0jZGVmaW5lCURFVl9DT05GSUdfQ0RDCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX045NjA0Ci0jZGVmaW5lCURFVl9DT05GSUdfQ0RDCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAKLSNkZWZpbmUgREVWX0NPTkZJR19DREMKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQVQ5MQotI2RlZmluZSBERVZfQ09ORklHX0NEQwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCSFNGQwotI2RlZmluZSBERVZfQ09ORklHX0NEQwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKLSNkZWZpbmUgREVWX0NPTkZJR19DREMKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQQotI2RlZmluZSBERVZfQ09ORklHX0NEQwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMgotI2RlZmluZSBERVZfQ09ORklHX0NEQwotI2VuZGlmCi0KLS8qIEZvciBDREMtaW5jYXBhYmxlIGhhcmR3YXJlLCBjaG9vc2UgdGhlIHNpbXBsZSBjZGMgc3Vic2V0LgotICogQW55dGhpbmcgdGhhdCB0YWxrcyBidWxrICh3aXRob3V0IG5vdGFibGUgYnVncykgY2FuIGRvIHRoaXMuCi0gKi8KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVgKLSNkZWZpbmUJREVWX0NPTkZJR19TVUJTRVQKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYCi0jZGVmaW5lCURFVl9DT05GSUdfU1VCU0VUCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1NVUEVSSAotI2RlZmluZQlERVZfQ09ORklHX1NVQlNFVAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9TQTExMDAKLS8qIHVzZSBub24tQ0RDIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZQlERVZfQ09ORklHX1NVQlNFVAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIKLSNkZWZpbmUgREVWX0NPTkZJR19DREMKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQwotI2RlZmluZQlERVZfQ09ORklHX0NEQwotI2VuZGlmCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogIm1haW4iIGNvbmZpZyBpcyBlaXRoZXIgQ0RDLCBvciBpdHMgc2ltcGxlIHN1YnNldCAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfY2RjKHN0cnVjdCBldGhfZGV2ICpkZXYpCi17Ci0jaWYJIWRlZmluZWQoREVWX0NPTkZJR19TVUJTRVQpCi0JcmV0dXJuIDE7CQkvKiBvbmx5IGNkYyBwb3NzaWJsZSAqLwotI2VsaWYJIWRlZmluZWQgKERFVl9DT05GSUdfQ0RDKQotCXJldHVybiAwOwkJLyogb25seSBzdWJzZXQgcG9zc2libGUgKi8KLSNlbHNlCi0JcmV0dXJuIGRldi0+Y2RjOwkvKiBkZXBlbmRzIG9uIHdoYXQgaGFyZHdhcmUgd2UgZm91bmQgKi8KLSNlbmRpZgotfQotCi0vKiAic2Vjb25kYXJ5IiBSTkRJUyBjb25maWcgbWF5IHNvbWV0aW1lcyBiZSBhY3RpdmF0ZWQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJuZGlzX2FjdGl2ZShzdHJ1Y3QgZXRoX2RldiAqZGV2KQotewotI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCi0JcmV0dXJuIGRldi0+cm5kaXM7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KLSNkZWZpbmUJc3Vic2V0X2FjdGl2ZShkZXYpCSghaXNfY2RjKGRldikgJiYgIXJuZGlzX2FjdGl2ZShkZXYpKQotI2RlZmluZQljZGNfYWN0aXZlKGRldikJCSggaXNfY2RjKGRldikgJiYgIXJuZGlzX2FjdGl2ZShkZXYpKQotCi0KLQotI2RlZmluZSBERUZBVUxUX1FMRU4JMgkvKiBkb3VibGUgYnVmZmVyaW5nIGJ5IGRlZmF1bHQgKi8KLQotLyogcGVhayBidWxrIHRyYW5zZmVyIGJpdHMtcGVyLXNlY29uZCAqLwotI2RlZmluZQlIU19CUFMJCSgxMyAqIDUxMiAqIDggKiAxMDAwICogOCkKLSNkZWZpbmUJRlNfQlBTCQkoMTkgKiAgNjQgKiAxICogMTAwMCAqIDgpCi0KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKLSNkZWZpbmUJREVWU1BFRUQJVVNCX1NQRUVEX0hJR0gKLQotc3RhdGljIHVuc2lnbmVkIHFtdWx0ID0gNTsKLW1vZHVsZV9wYXJhbSAocW11bHQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7Ci0KLQotLyogZm9yIGR1YWwtc3BlZWQgaGFyZHdhcmUsIHVzZSBkZWVwZXIgcXVldWVzIGF0IGhpZ2hzcGVlZCAqLwotI2RlZmluZSBxbGVuKGdhZGdldCkgXAotCShERUZBVUxUX1FMRU4qKChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IHFtdWx0IDogMSkpCi0KLXN0YXRpYyBpbmxpbmUgaW50IEJJVFJBVEUoc3RydWN0IHVzYl9nYWRnZXQgKmcpCi17Ci0JcmV0dXJuIChnLT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyBIU19CUFMgOiBGU19CUFM7Ci19Ci0KLSNlbHNlCS8qIGZ1bGwgc3BlZWQgKGxvdyBzcGVlZCBkb2Vzbid0IGRvIGJ1bGspICovCi0KLSNkZWZpbmUgcW11bHQJCTEKLQotI2RlZmluZQlERVZTUEVFRAlVU0JfU1BFRURfRlVMTAotCi0jZGVmaW5lIHFsZW4oZ2FkZ2V0KSBERUZBVUxUX1FMRU4KLQotc3RhdGljIGlubGluZSBpbnQgQklUUkFURShzdHJ1Y3QgdXNiX2dhZGdldCAqZykKLXsKLQlyZXR1cm4gRlNfQlBTOwotfQotI2VuZGlmCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSB4cHJpbnRrKGQsbGV2ZWwsZm10LGFyZ3MuLi4pIFwKLQlwcmludGsobGV2ZWwgIiVzOiAiIGZtdCAsIChkKS0+bmV0LT5uYW1lICwgIyMgYXJncykKLQotI2lmZGVmIERFQlVHCi0jdW5kZWYgREVCVUcKLSNkZWZpbmUgREVCVUcoZGV2LGZtdCxhcmdzLi4uKSBcCi0JeHByaW50ayhkZXYgLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIERFQlVHKGRldixmbXQsYXJncy4uLikgXAotCWRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgVkVSQk9TRV9ERUJVRwotI2RlZmluZSBWREVCVUcJREVCVUcKLSNlbHNlCi0jZGVmaW5lIFZERUJVRyhkZXYsZm10LGFyZ3MuLi4pIFwKLQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYgLyogREVCVUcgKi8KLQotI2RlZmluZSBFUlJPUihkZXYsZm10LGFyZ3MuLi4pIFwKLQl4cHJpbnRrKGRldiAsIEtFUk5fRVJSICwgZm10ICwgIyMgYXJncykKLSNkZWZpbmUgV0FSTihkZXYsZm10LGFyZ3MuLi4pIFwKLQl4cHJpbnRrKGRldiAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCi0jZGVmaW5lIElORk8oZGV2LGZtdCxhcmdzLi4uKSBcCi0JeHByaW50ayhkZXYgLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBVU0IgRFJJVkVSIEhPT0tVUCAodG8gdGhlIGhhcmR3YXJlIGRyaXZlciwgYmVsb3cgdXMpLCBtb3N0bHkKLSAqIGVwMCBpbXBsZW1lbnRhdGlvbjogIGRlc2NyaXB0b3JzLCBjb25maWcgbWFuYWdlbWVudCwgc2V0dXAoKS4KLSAqIGFsc28gb3B0aW9uYWwgY2xhc3Mtc3BlY2lmaWMgbm90aWZpY2F0aW9uIGludGVycnVwdCB0cmFuc2Zlci4KLSAqLwotCi0vKgotICogREVTQ1JJUFRPUlMgLi4uIG1vc3QgYXJlIHN0YXRpYywgYnV0IHN0cmluZ3MgYW5kIChmdWxsKSBjb25maWd1cmF0aW9uCi0gKiBkZXNjcmlwdG9ycyBhcmUgYnVpbHQgb24gZGVtYW5kLiAgRm9yIG5vdyB3ZSBkbyBlaXRoZXIgZnVsbCBDREMsIG9yCi0gKiBvdXIgc2ltcGxlIHN1YnNldCwgd2l0aCBSTkRJUyBhcyBhbiBvcHRpb25hbCBzZWNvbmQgY29uZmlndXJhdGlvbi4KLSAqCi0gKiBSTkRJUyBpbmNsdWRlcyBzb21lIENEQyBBQ00gZGVzY3JpcHRvcnMgLi4uIGxpa2UgQ0RDIEV0aGVybmV0LiAgQnV0Ci0gKiB0aGUgY2xhc3MgZGVzY3JpcHRvcnMgbWF0Y2ggYSBtb2RlbSAodGhleSdyZSBpZ25vcmVkOyBpdCdzIHJlYWxseSBqdXN0Ci0gKiBFdGhlcm5ldCBmdW5jdGlvbmFsaXR5KSwgdGhleSBkb24ndCBuZWVkIHRoZSBOT1AgYWx0c2V0dGluZywgYW5kIHRoZQotICogc3RhdHVzIHRyYW5zZmVyIGVuZHBvaW50IGlzbid0IG9wdGlvbmFsLgotICovCi0KLSNkZWZpbmUgU1RSSU5HX01BTlVGQUNUVVJFUgkJMQotI2RlZmluZSBTVFJJTkdfUFJPRFVDVAkJCTIKLSNkZWZpbmUgU1RSSU5HX0VUSEFERFIJCQkzCi0jZGVmaW5lIFNUUklOR19EQVRBCQkJNAotI2RlZmluZSBTVFJJTkdfQ09OVFJPTAkJCTUKLSNkZWZpbmUgU1RSSU5HX1JORElTX0NPTlRST0wJCTYKLSNkZWZpbmUgU1RSSU5HX0NEQwkJCTcKLSNkZWZpbmUgU1RSSU5HX1NVQlNFVAkJCTgKLSNkZWZpbmUgU1RSSU5HX1JORElTCQkJOQotI2RlZmluZSBTVFJJTkdfU0VSSUFMTlVNQkVSCQkxMAotCi0vKiBob2xkcyBvdXIgYmlnZ2VzdCBkZXNjcmlwdG9yIChvciBSTkRJUyByZXNwb25zZSkgKi8KLSNkZWZpbmUgVVNCX0JVRlNJWgkyNTYKLQotLyoKLSAqIFRoaXMgZGV2aWNlIGFkdmVydGlzZXMgb25lIGNvbmZpZ3VyYXRpb24sIGV0aF9jb25maWcsIHVubGVzcyBSTkRJUwotICogaXMgZW5hYmxlZCAocm5kaXNfY29uZmlnKSBvbiBoYXJkd2FyZSBzdXBwb3J0aW5nIGF0IGxlYXN0IHR3byBjb25maWdzLgotICoKLSAqIE5PVEU6ICBDb250cm9sbGVycyBsaWtlIHN1cGVyaF91ZGMgc2hvdWxkIHByb2JhYmx5IGJlIGFibGUgdG8gdXNlCi0gKiBhbiBSTkRJUy1vbmx5IGNvbmZpZ3VyYXRpb24uCi0gKgotICogRklYTUUgZGVmaW5lIHNvbWUgaGlnaGVyLXBvd2VyZWQgY29uZmlndXJhdGlvbnMgdG8gbWFrZSBpdCBlYXNpZXIKLSAqIHRvIHJlY2hhcmdlIGJhdHRlcmllcyAuLi4KLSAqLwotCi0jZGVmaW5lIERFVl9DT05GSUdfVkFMVUUJMQkvKiBjZGMgb3Igc3Vic2V0ICovCi0jZGVmaW5lIERFVl9STkRJU19DT05GSUdfVkFMVUUJMgkvKiBybmRpczsgb3B0aW9uYWwgKi8KLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IKLWRldmljZV9kZXNjID0geworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAogCkBAIC00MzgsMjIyMCArMTM5LDIzNCBAQAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX0NPTU0sCiAJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCiAJLmJEZXZpY2VQcm90b2NvbCA9CTAsCisJLyogLmJNYXhQYWNrZXRTaXplMCA9IGYoaGFyZHdhcmUpICovCiAKKwkvKiBWZW5kb3IgYW5kIHByb2R1Y3QgaWQgZGVmYXVsdHMgY2hhbmdlIGFjY29yZGluZyB0byB3aGF0IGNvbmZpZ3MKKwkgKiB3ZSBzdXBwb3J0LiAgKEFzIGRvZXMgYk51bUNvbmZpZ3VyYXRpb25zLikgIFRoZXNlIHZhbHVlcyBjYW4KKwkgKiBhbHNvIGJlIG92ZXJyaWRkZW4gYnkgbW9kdWxlIHBhcmFtZXRlcnMuCisJICovCiAJLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19WRU5ET1JfTlVNKSwKIAkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19QUk9EVUNUX05VTSksCi0JLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAotCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKKwkvKiAuYmNkRGV2aWNlID0gZihoYXJkd2FyZSkgKi8KKwkvKiAuaU1hbnVmYWN0dXJlciA9IERZTkFNSUMgKi8KKwkvKiAuaVByb2R1Y3QgPSBEWU5BTUlDICovCisJLyogTk8gU0VSSUFMIE5VTUJFUiAqLwogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IKLW90Z19kZXNjcmlwdG9yID0geworc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3Igb3RnX2Rlc2NyaXB0b3IgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIG90Z19kZXNjcmlwdG9yLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfT1RHLAogCi0JLmJtQXR0cmlidXRlcyA9CQlVU0JfT1RHX1NSUCwKKwkvKiBSRVZJU0lUIFNSUC1vbmx5IGhhcmR3YXJlIGlzIHBvc3NpYmxlLCBhbHRob3VnaAorCSAqIGl0IHdvdWxkIG5vdCBiZSBjYWxsZWQgIk9URyIgLi4uCisJICovCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfT1RHX1NSUCB8IFVTQl9PVEdfSE5QLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IKLWV0aF9jb25maWcgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mIGV0aF9jb25maWcsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCi0KLQkvKiBjb21wdXRlIHdUb3RhbExlbmd0aCBvbiB0aGUgZmx5ICovCi0JLmJOdW1JbnRlcmZhY2VzID0JMiwKLQkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CURFVl9DT05GSUdfVkFMVUUsCi0JLmlDb25maWd1cmF0aW9uID0JU1RSSU5HX0NEQywKLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyID0JCTUwLAotfTsKLQotI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCi1zdGF0aWMgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcgotcm5kaXNfY29uZmlnID0gewotCS5iTGVuZ3RoID0gICAgICAgICAgICAgIHNpemVvZiBybmRpc19jb25maWcsCi0JLmJEZXNjcmlwdG9yVHlwZSA9ICAgICAgVVNCX0RUX0NPTkZJRywKLQotCS8qIGNvbXB1dGUgd1RvdGFsTGVuZ3RoIG9uIHRoZSBmbHkgKi8KLQkuYk51bUludGVyZmFjZXMgPSAgICAgICAyLAotCS5iQ29uZmlndXJhdGlvblZhbHVlID0gIERFVl9STkRJU19DT05GSUdfVkFMVUUsCi0JLmlDb25maWd1cmF0aW9uID0gICAgICAgU1RSSU5HX1JORElTLAotCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIgPSAgICAgICAgICAgIDUwLAotfTsKLSNlbmRpZgotCi0vKgotICogQ29tcGFyZWQgdG8gdGhlIHNpbXBsZSBDREMgc3Vic2V0LCB0aGUgZnVsbCBDREMgRXRoZXJuZXQgbW9kZWwgYWRkcwotICogdGhyZWUgY2xhc3MgZGVzY3JpcHRvcnMsIHR3byBpbnRlcmZhY2UgZGVzY3JpcHRvcnMsIG9wdGlvbmFsIHN0YXR1cwotICogZW5kcG9pbnQuICBCb3RoIGhhdmUgYSAiZGF0YSIgaW50ZXJmYWNlIGFuZCB0d28gYnVsayBlbmRwb2ludHMuCi0gKiBUaGVyZSBhcmUgYWxzbyBkaWZmZXJlbmNlcyBpbiBob3cgY29udHJvbCByZXF1ZXN0cyBhcmUgaGFuZGxlZC4KLSAqCi0gKiBSTkRJUyBzaGFyZXMgYSBsb3Qgd2l0aCBDREMtRXRoZXJuZXQsIHNpbmNlIGl0J3MgYSB2YXJpYW50IG9mIHRoZQotICogQ0RDLUFDTSAobW9kZW0pIHNwZWMuICBVbmZvcnR1bmF0ZWx5IE1TRlQncyBSTkRJUyBkcml2ZXIgaXMgYnVnZ3k7IGl0Ci0gKiBtYXkgaGFuZyBvciBvb3BzLiAgU2luY2UgYnVnZml4ZXMgKG9yIGFjY3VyYXRlIHNwZWNzLCBsZXR0aW5nIExpbnV4Ci0gKiB3b3JrIGFyb3VuZCB0aG9zZSBidWdzKSBhcmUgdW5saWtlbHkgdG8gZXZlciBjb21lIGZyb20gTVNGVCwgeW91IG1heQotICogd2lzaCB0byBhdm9pZCB1c2luZyBSTkRJUy4KLSAqCi0gKiBNQ0NJIG9mZmVycyBhbiBhbHRlcm5hdGl2ZSB0byBSTkRJUyBpZiB5b3UgbmVlZCB0byBjb25uZWN0IHRvIFdpbmRvd3MKLSAqIGJ1dCBoYXZlIGhhcmR3YXJlIHRoYXQgY2FuJ3Qgc3VwcG9ydCBDREMgRXRoZXJuZXQuICAgV2UgYWRkIGRlc2NyaXB0b3JzCi0gKiB0byBwcmVzZW50IHRoZSBDREMgU3Vic2V0IGFzIGEgKG5vbmNvbmZvcm1hbnQpIENEQyBNRExNIHZhcmlhbnQgY2FsbGVkCi0gKiAiU0FGRSIuICBUaGF0IGJvcnJvd3MgZnJvbSBib3RoIENEQyBFdGhlcm5ldCBhbmQgQ0RDIE1ETE0uICBZb3UgY2FuCi0gKiBnZXQgdGhvc2UgZHJpdmVycyBmcm9tIE1DQ0ksIG9yIGJ1bmRsZWQgd2l0aCB2YXJpb3VzIHByb2R1Y3RzLgotICovCi0KLSNpZmRlZglERVZfQ09ORklHX0NEQwotc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IKLWNvbnRyb2xfaW50ZiA9IHsKLQkuYkxlbmd0aCA9CQlzaXplb2YgY29udHJvbF9pbnRmLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAotCi0JLmJJbnRlcmZhY2VOdW1iZXIgPQkwLAotCS8qIHN0YXR1cyBlbmRwb2ludCBpcyBvcHRpb25hbDsgdGhpcyBtYXkgYmUgcGF0Y2hlZCBsYXRlciAqLwotCS5iTnVtRW5kcG9pbnRzID0JMSwKLQkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NPTU0sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsCi0JLmJJbnRlcmZhY2VQcm90b2NvbCA9CVVTQl9DRENfUFJPVE9fTk9ORSwKLQkuaUludGVyZmFjZSA9CQlTVFJJTkdfQ09OVFJPTCwKLX07Ci0jZW5kaWYKLQotI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgotcm5kaXNfY29udHJvbF9pbnRmID0gewotCS5iTGVuZ3RoID0gICAgICAgICAgICAgIHNpemVvZiBybmRpc19jb250cm9sX2ludGYsCi0JLmJEZXNjcmlwdG9yVHlwZSA9ICAgICAgVVNCX0RUX0lOVEVSRkFDRSwKLQotCS5iSW50ZXJmYWNlTnVtYmVyID0gICAgIDAsCi0JLmJOdW1FbmRwb2ludHMgPSAgICAgICAgMSwKLQkuYkludGVyZmFjZUNsYXNzID0gICAgICBVU0JfQ0xBU1NfQ09NTSwKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gICBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKLQkuYkludGVyZmFjZVByb3RvY29sID0gICBVU0JfQ0RDX0FDTV9QUk9UT19WRU5ET1IsCi0JLmlJbnRlcmZhY2UgPSAgICAgICAgICAgU1RSSU5HX1JORElTX0NPTlRST0wsCi19OwotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2NkY19oZWFkZXJfZGVzYyBoZWFkZXJfZGVzYyA9IHsKLQkuYkxlbmd0aCA9CQlzaXplb2YgaGVhZGVyX2Rlc2MsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCi0JLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCi0KLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDExMCksCi19OwotCi0jaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgdW5pb25fZGVzYyA9IHsKLQkuYkxlbmd0aCA9CQlzaXplb2YgdW5pb25fZGVzYywKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19VTklPTl9UWVBFLAotCi0JLmJNYXN0ZXJJbnRlcmZhY2UwID0JMCwJLyogaW5kZXggb2YgY29udHJvbCBpbnRlcmZhY2UgKi8KLQkuYlNsYXZlSW50ZXJmYWNlMCA9CTEsCS8qIGluZGV4IG9mIERBVEEgaW50ZXJmYWNlICovCi19OwotCi0jZW5kaWYJLyogQ0RDIHx8IFJORElTICovCi0KLSNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IgY2FsbF9tZ210X2Rlc2NyaXB0b3IgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mIGNhbGxfbWdtdF9kZXNjcmlwdG9yLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0NBTExfTUFOQUdFTUVOVF9UWVBFLAotCi0JLmJtQ2FwYWJpbGl0aWVzID0JMHgwMCwKLQkuYkRhdGFJbnRlcmZhY2UgPQkweDAxLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2FjbV9kZXNjcmlwdG9yIGFjbV9kZXNjcmlwdG9yID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBhY21fZGVzY3JpcHRvciwKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19BQ01fVFlQRSwKLQotCS5ibUNhcGFiaWxpdGllcyA9CTB4MDAsCi19OwotCi0jZW5kaWYKLQotI2lmbmRlZiBERVZfQ09ORklHX0NEQwotCi0vKiAiU0FGRSIgbG9vc2VseSBmb2xsb3dzIENEQyBXTUMgTURMTSwgdmlvbGF0aW5nIHRoZSBzcGVjIGluIHZhcmlvdXMKLSAqIHdheXM6ICBkYXRhIGVuZHBvaW50cyBsaXZlIGluIHRoZSBjb250cm9sIGludGVyZmFjZSwgdGhlcmUncyBubyBkYXRhCi0gKiBpbnRlcmZhY2UsIGFuZCBpdCdzIG5vdCB1c2VkIHRvIHRhbGsgdG8gYSBjZWxsIHBob25lIHJhZGlvLgotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2NkY19tZGxtX2Rlc2MgbWRsbV9kZXNjID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBtZGxtX2Rlc2MsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCi0JLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfTURMTV9UWVBFLAotCi0JLmJjZFZlcnNpb24gPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAotCS5iR1VJRCA9IHsKLQkJMHg1ZCwgMHgzNCwgMHhjZiwgMHg2NiwgMHgxMSwgMHgxOCwgMHgxMSwgMHhkNiwKLQkJMHhhMiwgMHgxYSwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYSwgMHg5YSwgMHg3ZiwKLQl9LAotfTsKLQotLyogc2luY2UgInVzYl9jZGNfbWRsbV9kZXRhaWxfZGVzYyIgaXMgYSB2YXJpYWJsZSBsZW5ndGggc3RydWN0dXJlLCB3ZQotICogY2FuJ3QgcmVhbGx5IHVzZSBpdHMgc3RydWN0LiAgQWxsIHdlIGRvIGhlcmUgaXMgc2F5IHRoYXQgd2UncmUgdXNpbmcKLSAqIHRoZSBzdWJtb2RlIG9mICJTQUZFIiB3aGljaCBkaXJlY3RseSBtYXRjaGVzIHRoZSBDREMgU3Vic2V0LgotICovCi1zdGF0aWMgY29uc3QgdTggbWRsbV9kZXRhaWxfZGVzY1tdID0gewotCTYsCi0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQlVU0JfQ0RDX01ETE1fREVUQUlMX1RZUEUsCi0KLQkwLAkvKiAiU0FGRSIgKi8KLQkwLAkvKiBuZXR3b3JrIGNvbnRyb2wgY2FwYWJpbGl0aWVzIChub25lKSAqLwotCTAsCS8qIG5ldHdvcmsgZGF0YSBjYXBhYmlsaXRpZXMgKCJyYXciIGVuY2Fwc3VsYXRpb24pICovCi19OwotCi0jZW5kaWYKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZXRoZXJfZGVzYyA9IHsKLQkuYkxlbmd0aCA9CQlzaXplb2YgZXRoZXJfZGVzYywKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19FVEhFUk5FVF9UWVBFLAotCi0JLyogdGhpcyBkZXNjcmlwdG9yIGFjdHVhbGx5IGFkZHMgdmFsdWUsIHN1cnByaXNlISAqLwotCS5pTUFDQWRkcmVzcyA9CQlTVFJJTkdfRVRIQUREUiwKLQkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQlfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKSwgLyogbm8gc3RhdGlzdGljcyAqLwotCS53TWF4U2VnbWVudFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChFVEhfRlJBTUVfTEVOKSwKLQkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDApLAotCS5iTnVtYmVyUG93ZXJGaWx0ZXJzID0JMCwKLX07Ci0KLQotI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCi0KLS8qIGluY2x1ZGUgdGhlIHN0YXR1cyBlbmRwb2ludCBpZiB3ZSBjYW4sIGV2ZW4gd2hlcmUgaXQncyBvcHRpb25hbC4KLSAqIHVzZSB3TWF4UGFja2V0U2l6ZSBiaWcgZW5vdWdoIHRvIGZpdCBDRENfTk9USUZZX1NQRUVEX0NIQU5HRSBpbiBvbmUKLSAqIHBhY2tldCwgdG8gc2ltcGxpZnkgY2FuY2VsbGF0aW9uOyBhbmQgYSBiaWcgdHJhbnNmZXIgaW50ZXJ2YWwsIHRvCi0gKiB3YXN0ZSBsZXNzIGJhbmR3aWR0aC4KLSAqCi0gKiBzb21lIGRyaXZlcnMgKGxpa2UgTGludXggMi40IGNkYy1ldGhlciEpICJuZWVkIiBpdCB0byBleGlzdCBldmVuCi0gKiBpZiB0aGV5IGlnbm9yZSB0aGUgY29ubmVjdC9kaXNjb25uZWN0IG5vdGlmaWNhdGlvbnMgdGhhdCByZWFsIGFldGhlcgotICogY2FuIHByb3ZpZGUuICBtb3JlIGFkdmFuY2VkIGNkYyBjb25maWd1cmF0aW9ucyBtaWdodCB3YW50IHRvIHN1cHBvcnQKLSAqIGVuY2Fwc3VsYXRlZCBjb21tYW5kcyAodmVuZG9yLXNwZWNpZmljLCB1c2luZyBjb250cm9sLU9VVCkuCi0gKgotICogUk5ESVMgcmVxdWlyZXMgdGhlIHN0YXR1cyBlbmRwb2ludCwgc2luY2UgaXQgdXNlcyB0aGF0IGVuY2Fwc3VsYXRpb24KLSAqIG1lY2hhbmlzbSBmb3IgaXRzIGZ1bmt5IFJQQyBzY2hlbWUuCi0gKi8KLQotI2RlZmluZSBMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDCTUJLyogMSA8PCA1ID09IDMyIG1zZWMgKi8KLSNkZWZpbmUgU1RBVFVTX0JZVEVDT1VOVAkJMTYJLyogOCBieXRlIGhlYWRlciArIGRhdGEgKi8KLQotc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgotZnNfc3RhdHVzX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKLQotCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChTVEFUVVNfQllURUNPVU5UKSwKLQkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKLX07Ci0jZW5kaWYKLQotI2lmZGVmCURFVl9DT05GSUdfQ0RDCi0KLS8qIHRoZSBkZWZhdWx0IGRhdGEgaW50ZXJmYWNlIGhhcyBubyBlbmRwb2ludHMgLi4uICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCi1kYXRhX25vcF9pbnRmID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBkYXRhX25vcF9pbnRmLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAotCi0JLmJJbnRlcmZhY2VOdW1iZXIgPQkxLAotCS5iQWx0ZXJuYXRlU2V0dGluZyA9CTAsCi0JLmJOdW1FbmRwb2ludHMgPQkwLAotCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ0RDX0RBVEEsCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCi0JLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCi19OwotCi0vKiAuLi4gYnV0IHRoZSAicmVhbCIgZGF0YSBpbnRlcmZhY2UgaGFzIHR3byBidWxrIGVuZHBvaW50cyAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgotZGF0YV9pbnRmID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBkYXRhX2ludGYsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCi0KLQkuYkludGVyZmFjZU51bWJlciA9CTEsCi0JLmJBbHRlcm5hdGVTZXR0aW5nID0JMSwKLQkuYk51bUVuZHBvaW50cyA9CTIsCi0JLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DRENfREFUQSwKLQkuYkludGVyZmFjZVN1YkNsYXNzID0JMCwKLQkuYkludGVyZmFjZVByb3RvY29sID0JMCwKLQkuaUludGVyZmFjZSA9CQlTVFJJTkdfREFUQSwKLX07Ci0KLSNlbmRpZgotCi0jaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKLQotLyogUk5ESVMgZG9lc24ndCBhY3RpdmF0ZSBieSBjaGFuZ2luZyB0byB0aGUgInJlYWwiIGFsdHNldHRpbmcgKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IKLXJuZGlzX2RhdGFfaW50ZiA9IHsKLQkuYkxlbmd0aCA9CQlzaXplb2Ygcm5kaXNfZGF0YV9pbnRmLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAotCi0JLmJJbnRlcmZhY2VOdW1iZXIgPQkxLAotCS5iQWx0ZXJuYXRlU2V0dGluZyA9CTAsCi0JLmJOdW1FbmRwb2ludHMgPQkyLAotCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ0RDX0RBVEEsCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCi0JLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCi0JLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0RBVEEsCi19OwotCi0jZW5kaWYKLQotI2lmZGVmIERFVl9DT05GSUdfU1VCU0VUCi0KLS8qCi0gKiAiU2ltcGxlIiBDREMtc3Vic2V0IG9wdGlvbiBpcyBhIHNpbXBsZSB2ZW5kb3ItbmV1dHJhbCBtb2RlbCB0aGF0IG1vc3QKLSAqIGZ1bGwgc3BlZWQgY29udHJvbGxlcnMgY2FuIGhhbmRsZTogIG9uZSBpbnRlcmZhY2UsIHR3byBidWxrIGVuZHBvaW50cy4KLSAqCi0gKiBUbyBhc3Npc3QgaG9zdCBzaWRlIGRyaXZlcnMsIHdlIGZhbmN5IGl0IHVwIGEgYml0LCBhbmQgYWRkIGRlc2NyaXB0b3JzCi0gKiBzbyBzb21lIGhvc3Qgc2lkZSBkcml2ZXJzIHdpbGwgdW5kZXJzdGFuZCBpdCBhcyBhICJTQUZFIiB2YXJpYW50LgotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCi1zdWJzZXRfZGF0YV9pbnRmID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBzdWJzZXRfZGF0YV9pbnRmLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAotCi0JLmJJbnRlcmZhY2VOdW1iZXIgPQkwLAotCS5iQWx0ZXJuYXRlU2V0dGluZyA9CTAsCi0JLmJOdW1FbmRwb2ludHMgPQkyLAotCS5iSW50ZXJmYWNlQ2xhc3MgPSAgICAgIFVTQl9DTEFTU19DT01NLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sCi0JLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCi0JLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0RBVEEsCi19OwotCi0jZW5kaWYJLyogU1VCU0VUICovCi0KLQotc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgotZnNfc291cmNlX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKLQotCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCi1mc19zaW5rX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKLQotCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCi0JLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2V0aF9mdW5jdGlvbiBbMTFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKm90Z19kZXNjW10gPSB7CiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm90Z19kZXNjcmlwdG9yLAotI2lmZGVmIERFVl9DT05GSUdfQ0RDCi0JLyogImNkYyIgbW9kZSBkZXNjcmlwdG9ycyAqLwotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZjb250cm9sX2ludGYsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhlYWRlcl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZ1bmlvbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjLAotCS8qIE5PVEU6IHN0YXR1cyBlbmRwb2ludCBtYXkgbmVlZCB0byBiZSByZW1vdmVkICovCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3N0YXR1c19kZXNjLAotCS8qIGRhdGEgaW50ZXJmYWNlLCB3aXRoIGFsdHNldHRpbmcgKi8KLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZGF0YV9ub3BfaW50ZiwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zb3VyY2VfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc2lua19kZXNjLAotCU5VTEwsCi0jZW5kaWYgLyogREVWX0NPTkZJR19DREMgKi8KLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgZnNfc3Vic2V0X2Rlc2NyaXB0b3JzKHZvaWQpCi17Ci0jaWZkZWYgREVWX0NPTkZJR19TVUJTRVQKLQkvKiBiZWhhdmlvciBpcyAiQ0RDIFN1YnNldCI7IGV4dHJhIGRlc2NyaXB0b3JzIHNheSAiU0FGRSIgKi8KLQlmc19ldGhfZnVuY3Rpb25bMV0gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmc3Vic2V0X2RhdGFfaW50ZjsKLQlmc19ldGhfZnVuY3Rpb25bMl0gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2M7Ci0JZnNfZXRoX2Z1bmN0aW9uWzNdID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm1kbG1fZGVzYzsKLQlmc19ldGhfZnVuY3Rpb25bNF0gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXRhaWxfZGVzYzsKLQlmc19ldGhfZnVuY3Rpb25bNV0gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYzsKLQlmc19ldGhfZnVuY3Rpb25bNl0gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2M7Ci0JZnNfZXRoX2Z1bmN0aW9uWzddID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYzsKLQlmc19ldGhfZnVuY3Rpb25bOF0gPSBOVUxMOwotI2Vsc2UKLQlmc19ldGhfZnVuY3Rpb25bMV0gPSBOVUxMOwotI2VuZGlmCi19Ci0KLSNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX3JuZGlzX2Z1bmN0aW9uIFtdID0gewotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKLQkvKiBjb250cm9sIGludGVyZmFjZSBtYXRjaGVzIEFDTSwgbm90IEV0aGVybmV0ICovCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnJuZGlzX2NvbnRyb2xfaW50ZiwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNhbGxfbWdtdF9kZXNjcmlwdG9yLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZhY21fZGVzY3JpcHRvciwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmdW5pb25fZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc3RhdHVzX2Rlc2MsCi0JLyogZGF0YSBpbnRlcmZhY2UgaGFzIG5vIGFsdHNldHRpbmcgKi8KLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmcm5kaXNfZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zb3VyY2VfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc2lua19kZXNjLAogCU5VTEwsCiB9OwotI2VuZGlmCiAKLS8qCi0gKiB1c2IgMi4wIGRldmljZXMgbmVlZCB0byBleHBvc2UgYm90aCBoaWdoIHNwZWVkIGFuZCBmdWxsIHNwZWVkCi0gKiBkZXNjcmlwdG9ycywgdW5sZXNzIHRoZXkgb25seSBydW4gYXQgZnVsbCBzcGVlZC4KLSAqLwogCi0jaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKLWhzX3N0YXR1c19kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisvKiBzdHJpbmcgSURzIGFyZSBhc3NpZ25lZCBkeW5hbWljYWxseSAqLwogCi0JLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNiAoU1RBVFVTX0JZVEVDT1VOVCksCi0JLmJJbnRlcnZhbCA9CQlMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDICsgNCwKLX07Ci0jZW5kaWYgLyogREVWX0NPTkZJR19DREMgKi8KKyNkZWZpbmUgU1RSSU5HX01BTlVGQUNUVVJFUl9JRFgJCTAKKyNkZWZpbmUgU1RSSU5HX1BST0RVQ1RfSURYCQkxCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKLWhzX3NvdXJjZV9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCitzdGF0aWMgY2hhciBtYW51ZmFjdHVyZXJbNTBdOwogCi0JLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDUxMiksCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgc3RyaW5nc19kZXZbXSA9IHsKKwlbU1RSSU5HX01BTlVGQUNUVVJFUl9JRFhdLnMgPSBtYW51ZmFjdHVyZXIsCisJW1NUUklOR19QUk9EVUNUX0lEWF0ucyA9IFBSRUZJWCBEUklWRVJfREVTQywKKwl7ICB9IC8qIGVuZCBvZiBsaXN0ICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCi1oc19zaW5rX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKLQotCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICg1MTIpLAotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IKLWRldl9xdWFsaWZpZXIgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAotCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApLAotCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX0NPTU0sCi0KLQkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19ldGhfZnVuY3Rpb24gWzExXSA9IHsKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCi0jaWZkZWYgREVWX0NPTkZJR19DREMKLQkvKiAiY2RjIiBtb2RlIGRlc2NyaXB0b3JzICovCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNvbnRyb2xfaW50ZiwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnVuaW9uX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmV0aGVyX2Rlc2MsCi0JLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1heSBuZWVkIHRvIGJlIHJlbW92ZWQgKi8KLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc3RhdHVzX2Rlc2MsCi0JLyogZGF0YSBpbnRlcmZhY2UsIHdpdGggYWx0c2V0dGluZyAqLwotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZkYXRhX25vcF9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZkYXRhX2ludGYsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCi0JTlVMTCwKLSNlbmRpZiAvKiBERVZfQ09ORklHX0NEQyAqLwotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBoc19zdWJzZXRfZGVzY3JpcHRvcnModm9pZCkKLXsKLSNpZmRlZiBERVZfQ09ORklHX1NVQlNFVAotCS8qIGJlaGF2aW9yIGlzICJDREMgU3Vic2V0IjsgZXh0cmEgZGVzY3JpcHRvcnMgc2F5ICJTQUZFIiAqLwotCWhzX2V0aF9mdW5jdGlvblsxXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmOwotCWhzX2V0aF9mdW5jdGlvblsyXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYzsKLQloc19ldGhfZnVuY3Rpb25bM10gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXNjOwotCWhzX2V0aF9mdW5jdGlvbls0XSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZtZGxtX2RldGFpbF9kZXNjOwotCWhzX2V0aF9mdW5jdGlvbls1XSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjOwotCWhzX2V0aF9mdW5jdGlvbls2XSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zb3VyY2VfZGVzYzsKLQloc19ldGhfZnVuY3Rpb25bN10gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc2lua19kZXNjOwotCWhzX2V0aF9mdW5jdGlvbls4XSA9IE5VTEw7Ci0jZWxzZQotCWhzX2V0aF9mdW5jdGlvblsxXSA9IE5VTEw7Ci0jZW5kaWYKLX0KLQotI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfcm5kaXNfZnVuY3Rpb24gW10gPSB7Ci0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm90Z19kZXNjcmlwdG9yLAotCS8qIGNvbnRyb2wgaW50ZXJmYWNlIG1hdGNoZXMgQUNNLCBub3QgRXRoZXJuZXQgKi8KLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmcm5kaXNfY29udHJvbF9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY2FsbF9tZ210X2Rlc2NyaXB0b3IsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9kZXNjcmlwdG9yLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZ1bmlvbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zdGF0dXNfZGVzYywKLQkvKiBkYXRhIGludGVyZmFjZSBoYXMgbm8gYWx0c2V0dGluZyAqLwotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc19kYXRhX2ludGYsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCi0JTlVMTCwKLX07Ci0jZW5kaWYKLQotCi0vKiBtYXhwYWNrZXQgYW5kIG90aGVyIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljcyB2YXJ5IGJ5IHNwZWVkLiAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKgotZXBfZGVzYyhzdHJ1Y3QgdXNiX2dhZGdldCAqZywgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpocywKLQkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpmcykKLXsKLQlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChnKSAmJiBnLT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKLQkJcmV0dXJuIGhzOwotCXJldHVybiBmczsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBkZXNjcmlwdG9ycyB0aGF0IGFyZSBidWlsdCBvbi1kZW1hbmQgKi8KLQotc3RhdGljIGNoYXIJCQkJbWFudWZhY3R1cmVyIFs1MF07Ci1zdGF0aWMgY2hhcgkJCQlwcm9kdWN0X2Rlc2MgWzQwXSA9IERSSVZFUl9ERVNDOwotc3RhdGljIGNoYXIJCQkJc2VyaWFsX251bWJlciBbMjBdOwotCi0vKiBhZGRyZXNzIHRoYXQgdGhlIGhvc3Qgd2lsbCB1c2UgLi4uIHVzdWFsbHkgYXNzaWduZWQgYXQgcmFuZG9tICovCi1zdGF0aWMgY2hhcgkJCQlldGhhZGRyIFsyICogRVRIX0FMRU4gKyAxXTsKLQotLyogc3RhdGljIHN0cmluZ3MsIGluIFVURi04ICovCi1zdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcJCXN0cmluZ3MgW10gPSB7Ci0JeyBTVFJJTkdfTUFOVUZBQ1RVUkVSLAltYW51ZmFjdHVyZXIsIH0sCi0JeyBTVFJJTkdfUFJPRFVDVCwJcHJvZHVjdF9kZXNjLCB9LAotCXsgU1RSSU5HX1NFUklBTE5VTUJFUiwJc2VyaWFsX251bWJlciwgfSwKLQl7IFNUUklOR19EQVRBLAkJIkV0aGVybmV0IERhdGEiLCB9LAotCXsgU1RSSU5HX0VUSEFERFIsCWV0aGFkZHIsIH0sCi0jaWZkZWYJREVWX0NPTkZJR19DREMKLQl7IFNUUklOR19DREMsCQkiQ0RDIEV0aGVybmV0IiwgfSwKLQl7IFNUUklOR19DT05UUk9MLAkiQ0RDIENvbW11bmljYXRpb25zIENvbnRyb2wiLCB9LAotI2VuZGlmCi0jaWZkZWYJREVWX0NPTkZJR19TVUJTRVQKLQl7IFNUUklOR19TVUJTRVQsCSJDREMgRXRoZXJuZXQgU3Vic2V0IiwgfSwKLSNlbmRpZgotI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCi0JeyBTVFJJTkdfUk5ESVMsCQkiUk5ESVMiLCB9LAotCXsgU1RSSU5HX1JORElTX0NPTlRST0wsCSJSTkRJUyBDb21tdW5pY2F0aW9ucyBDb250cm9sIiwgfSwKLSNlbmRpZgotCXsgIH0JCS8qIGVuZCBvZiBsaXN0ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncwlzdHJpbmd0YWIgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBzdHJpbmd0YWJfZGV2ID0gewogCS5sYW5ndWFnZQk9IDB4MDQwOSwJLyogZW4tdXMgKi8KLQkuc3RyaW5ncwk9IHN0cmluZ3MsCisJLnN0cmluZ3MJPSBzdHJpbmdzX2RldiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzICpkZXZfc3RyaW5nc1tdID0geworCSZzdHJpbmd0YWJfZGV2LAorCU5VTEwsCit9OworCitzdGF0aWMgdTggaG9zdGFkZHJbRVRIX0FMRU5dOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKgotICogb25lIGNvbmZpZywgdHdvIGludGVyZmFjZXM6ICBjb250cm9sLCBkYXRhLgotICogY29tcGxpY2F0aW9uczogY2xhc3MgZGVzY3JpcHRvcnMsIGFuZCBhbiBhbHRzZXR0aW5nLgorICogV2UgbWF5IG5vdCBoYXZlIGFuIFJORElTIGNvbmZpZ3VyYXRpb24sIGJ1dCBpZiB3ZSBkbyBpdCBuZWVkcyB0byBiZQorICogdGhlIGZpcnN0IG9uZSBwcmVzZW50LiAgVGhhdCdzIHRvIG1ha2UgTWljcm9zb2Z0J3MgZHJpdmVycyBoYXBweSwKKyAqIGFuZCB0byBmb2xsb3cgRE9DU0lTIDEuMCAoY2FibGUgbW9kZW0gc3RhbmRhcmQpLgogICovCi1zdGF0aWMgaW50Ci1jb25maWdfYnVmKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnLCB1OCAqYnVmLCB1OCB0eXBlLCB1bnNpZ25lZCBpbmRleCwgaW50IGlzX290ZykKK3N0YXRpYyBpbnQgX19pbml0IHJuZGlzX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7Ci0JaW50CQkJCQlsZW47Ci0JY29uc3Qgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcgkqY29uZmlnOwotCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIJKipmdW5jdGlvbjsKLQlpbnQJCQkJCWhzID0gMDsKKwkvKiBGSVhNRSBhbGxvYyBpQ29uZmlndXJhdGlvbiBzdHJpbmcsIHNldCBpdCBpbiBjLT5zdHJpbmdzICovCiAKLQlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChnKSkgewotCQlocyA9IChnLT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCk7Ci0JCWlmICh0eXBlID09IFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcpCi0JCQlocyA9ICFoczsKLQl9Ci0jZGVmaW5lIHdoaWNoX2ZuKHQpCShocyA/IGhzXyAjIyB0ICMjIF9mdW5jdGlvbiA6IGZzXyAjIyB0ICMjIF9mdW5jdGlvbikKLQotCWlmIChpbmRleCA+PSBkZXZpY2VfZGVzYy5iTnVtQ29uZmlndXJhdGlvbnMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0jaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKLQkvKiBsaXN0IHRoZSBSTkRJUyBjb25maWcgZmlyc3QsIHRvIG1ha2UgTWljcm9zb2Z0J3MgZHJpdmVycwotCSAqIGhhcHB5LiBET0NTSVMgMS4wIG5lZWRzIHRoaXMgdG9vLgotCSAqLwotCWlmIChkZXZpY2VfZGVzYy5iTnVtQ29uZmlndXJhdGlvbnMgPT0gMiAmJiBpbmRleCA9PSAwKSB7Ci0JCWNvbmZpZyA9ICZybmRpc19jb25maWc7Ci0JCWZ1bmN0aW9uID0gd2hpY2hfZm4gKHJuZGlzKTsKLQl9IGVsc2UKLSNlbmRpZgotCXsKLQkJY29uZmlnID0gJmV0aF9jb25maWc7Ci0JCWZ1bmN0aW9uID0gd2hpY2hfZm4gKGV0aCk7CisJaWYgKGdhZGdldF9pc19vdGcoYy0+Y2Rldi0+Z2FkZ2V0KSkgeworCQljLT5kZXNjcmlwdG9ycyA9IG90Z19kZXNjOworCQljLT5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOwogCX0KIAotCS8qIGZvciBub3csIGRvbid0IGFkdmVydGlzZSBzcnAtb25seSBkZXZpY2VzICovCi0JaWYgKCFpc19vdGcpCi0JCWZ1bmN0aW9uKys7Ci0KLQlsZW4gPSB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYgKGNvbmZpZywgYnVmLCBVU0JfQlVGU0laLCBmdW5jdGlvbik7Ci0JaWYgKGxlbiA8IDApCi0JCXJldHVybiBsZW47Ci0JKChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopIGJ1ZiktPmJEZXNjcmlwdG9yVHlwZSA9IHR5cGU7Ci0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gcm5kaXNfYmluZF9jb25maWcoYywgaG9zdGFkZHIpOwogfQogCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIHJuZGlzX2NvbmZpZ19kcml2ZXIgPSB7CisJLmxhYmVsCQkJPSAiUk5ESVMiLAorCS5iaW5kCQkJPSBybmRpc19kb19jb25maWcsCisJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAyLAorCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KKwkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyCQk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KK307CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIGV0aF9zdGFydCAoc3RydWN0IGV0aF9kZXYgKmRldiwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKLXN0YXRpYyBpbnQgYWxsb2NfcmVxdWVzdHMgKHN0cnVjdCBldGhfZGV2ICpkZXYsIHVuc2lnbmVkIG4sIGdmcF90IGdmcF9mbGFncyk7Ci0KLXN0YXRpYyBpbnQKLXNldF9ldGhlcl9jb25maWcgKHN0cnVjdCBldGhfZGV2ICpkZXYsIGdmcF90IGdmcF9mbGFncykKLXsKLQlpbnQJCQkJCXJlc3VsdCA9IDA7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJCQkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7Ci0KLSNpZiBkZWZpbmVkKERFVl9DT05GSUdfQ0RDKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfRVRIX1JORElTKQotCS8qIHN0YXR1cyBlbmRwb2ludCB1c2VkIGZvciBSTkRJUyBhbmQgKG9wdGlvbmFsbHkpIENEQyAqLwotCWlmICghc3Vic2V0X2FjdGl2ZShkZXYpICYmIGRldi0+c3RhdHVzX2VwKSB7Ci0JCWRldi0+c3RhdHVzID0gZXBfZGVzYyAoZ2FkZ2V0LCAmaHNfc3RhdHVzX2Rlc2MsCi0JCQkJCQkmZnNfc3RhdHVzX2Rlc2MpOwotCQlkZXYtPnN0YXR1c19lcC0+ZHJpdmVyX2RhdGEgPSBkZXY7Ci0KLQkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZGV2LT5zdGF0dXNfZXAsIGRldi0+c3RhdHVzKTsKLQkJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCQlERUJVRyAoZGV2LCAiZW5hYmxlICVzIC0tPiAlZFxuIiwKLQkJCQlkZXYtPnN0YXR1c19lcC0+bmFtZSwgcmVzdWx0KTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLSNlbmRpZgotCi0JZGV2LT5pbiA9IGVwX2Rlc2MoZ2FkZ2V0LCAmaHNfc291cmNlX2Rlc2MsICZmc19zb3VyY2VfZGVzYyk7Ci0JZGV2LT5pbl9lcC0+ZHJpdmVyX2RhdGEgPSBkZXY7Ci0KLQlkZXYtPm91dCA9IGVwX2Rlc2MoZ2FkZ2V0LCAmaHNfc2lua19kZXNjLCAmZnNfc2lua19kZXNjKTsKLQlkZXYtPm91dF9lcC0+ZHJpdmVyX2RhdGEgPSBkZXY7Ci0KLQkvKiBXaXRoIENEQywgIHRoZSBob3N0IGlzbid0IGFsbG93ZWQgdG8gdXNlIHRoZXNlIHR3byBkYXRhCi0JICogZW5kcG9pbnRzIGluIHRoZSBkZWZhdWx0IGFsdHNldHRpbmcgZm9yIHRoZSBpbnRlcmZhY2UuCi0JICogc28gd2UgZG9uJ3QgYWN0aXZhdGUgdGhlbSB5ZXQuICBSZXNldCBmcm9tIFNFVF9JTlRFUkZBQ0UuCi0JICoKLQkgKiBTdHJpY3RseSBzcGVha2luZyBSTkRJUyBzaG91bGQgd29yayB0aGUgc2FtZTogYWN0aXZhdGlvbiBpcwotCSAqIGEgc2lkZSBlZmZlY3Qgb2Ygc2V0dGluZyBhIHBhY2tldCBmaWx0ZXIuICBEZWFjdGl2YXRpb24gaXMKLQkgKiBmcm9tIFJFTU9URV9ORElTX0hBTFRfTVNHLCByZXNldCBmcm9tIFJFTU9URV9ORElTX1JFU0VUX01TRy4KLQkgKi8KLQlpZiAoIWNkY19hY3RpdmUoZGV2KSkgewotCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlIChkZXYtPmluX2VwLCBkZXYtPmluKTsKLQkJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCQlERUJVRyhkZXYsICJlbmFibGUgJXMgLS0+ICVkXG4iLAotCQkJCWRldi0+aW5fZXAtPm5hbWUsIHJlc3VsdCk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQotCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlIChkZXYtPm91dF9lcCwgZGV2LT5vdXQpOwotCQlpZiAocmVzdWx0ICE9IDApIHsKLQkJCURFQlVHIChkZXYsICJlbmFibGUgJXMgLS0+ICVkXG4iLAotCQkJCWRldi0+b3V0X2VwLT5uYW1lLCByZXN1bHQpOwotCQkJZ290byBkb25lOwotCQl9Ci0JfQotCi1kb25lOgotCWlmIChyZXN1bHQgPT0gMCkKLQkJcmVzdWx0ID0gYWxsb2NfcmVxdWVzdHMgKGRldiwgcWxlbiAoZ2FkZ2V0KSwgZ2ZwX2ZsYWdzKTsKLQotCS8qIG9uIGVycm9yLCBkaXNhYmxlIGFueSBlbmRwb2ludHMgICovCi0JaWYgKHJlc3VsdCA8IDApIHsKLQkJaWYgKCFzdWJzZXRfYWN0aXZlKGRldikgJiYgZGV2LT5zdGF0dXNfZXApCi0JCQkodm9pZCkgdXNiX2VwX2Rpc2FibGUgKGRldi0+c3RhdHVzX2VwKTsKLQkJZGV2LT5zdGF0dXMgPSBOVUxMOwotCQkodm9pZCkgdXNiX2VwX2Rpc2FibGUgKGRldi0+aW5fZXApOwotCQkodm9pZCkgdXNiX2VwX2Rpc2FibGUgKGRldi0+b3V0X2VwKTsKLQkJZGV2LT5pbiA9IE5VTEw7Ci0JCWRldi0+b3V0ID0gTlVMTDsKLQl9Ci0KLQkvKiBhY3RpdmF0ZSBub24tQ0RDIGNvbmZpZ3MgcmlnaHQgYXdheQotCSAqIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgYWNjb3JkaW5nIHRvIHRoZSBSTkRJUyBzcGVjCi0JICovCi0JZWxzZSBpZiAoIWNkY19hY3RpdmUgKGRldikpIHsKLQkJbmV0aWZfY2Fycmllcl9vbiAoZGV2LT5uZXQpOwotCQlpZiAobmV0aWZfcnVubmluZyAoZGV2LT5uZXQpKSB7Ci0JCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7Ci0JCQlldGhfc3RhcnQgKGRldiwgR0ZQX0FUT01JQyk7Ci0JCQlzcGluX2xvY2sgKCZkZXYtPmxvY2spOwotCQl9Ci0JfQotCi0JaWYgKHJlc3VsdCA9PSAwKQotCQlERUJVRyAoZGV2LCAicWxlbiAlZFxuIiwgcWxlbiAoZ2FkZ2V0KSk7Ci0KLQkvKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFudXAgb24gZXJyb3IgKi8KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBldGhfcmVzZXRfY29uZmlnIChzdHJ1Y3QgZXRoX2RldiAqZGV2KQotewotCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwotCi0JaWYgKGRldi0+Y29uZmlnID09IDApCi0JCXJldHVybjsKLQotCURFQlVHIChkZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0JbmV0aWZfc3RvcF9xdWV1ZSAoZGV2LT5uZXQpOwotCW5ldGlmX2NhcnJpZXJfb2ZmIChkZXYtPm5ldCk7Ci0Jcm5kaXNfdW5pbml0KGRldi0+cm5kaXNfY29uZmlnKTsKLQotCS8qIGRpc2FibGUgZW5kcG9pbnRzLCBmb3JjaW5nIChzeW5jaHJvbm91cykgY29tcGxldGlvbiBvZgotCSAqIHBlbmRpbmcgaS9vLiAgdGhlbiBmcmVlIHRoZSByZXF1ZXN0cy4KLQkgKi8KLQlpZiAoZGV2LT5pbikgewotCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5pbl9lcCk7Ci0JCXNwaW5fbG9jaygmZGV2LT5yZXFfbG9jayk7Ci0JCXdoaWxlIChsaWtlbHkgKCFsaXN0X2VtcHR5ICgmZGV2LT50eF9yZXFzKSkpIHsKLQkJCXJlcSA9IGNvbnRhaW5lcl9vZiAoZGV2LT50eF9yZXFzLm5leHQsCi0JCQkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOwotCQkJbGlzdF9kZWwgKCZyZXEtPmxpc3QpOwotCi0JCQlzcGluX3VubG9jaygmZGV2LT5yZXFfbG9jayk7Ci0JCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChkZXYtPmluX2VwLCByZXEpOwotCQkJc3Bpbl9sb2NrKCZkZXYtPnJlcV9sb2NrKTsKLQkJfQotCQlzcGluX3VubG9jaygmZGV2LT5yZXFfbG9jayk7Ci0JfQotCWlmIChkZXYtPm91dCkgewotCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5vdXRfZXApOwotCQlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOwotCQl3aGlsZSAobGlrZWx5ICghbGlzdF9lbXB0eSAoJmRldi0+cnhfcmVxcykpKSB7Ci0JCQlyZXEgPSBjb250YWluZXJfb2YgKGRldi0+cnhfcmVxcy5uZXh0LAotCQkJCQkJc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKLQkJCWxpc3RfZGVsICgmcmVxLT5saXN0KTsKLQotCQkJc3Bpbl91bmxvY2soJmRldi0+cmVxX2xvY2spOwotCQkJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZGV2LT5vdXRfZXAsIHJlcSk7Ci0JCQlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKLQl9Ci0KLQlpZiAoZGV2LT5zdGF0dXMpIHsKLQkJdXNiX2VwX2Rpc2FibGUgKGRldi0+c3RhdHVzX2VwKTsKLQl9Ci0JZGV2LT5ybmRpcyA9IDA7Ci0JZGV2LT5jZGNfZmlsdGVyID0gMDsKLQlkZXYtPmNvbmZpZyA9IDA7Ci19Ci0KLS8qIGNoYW5nZSBvdXIgb3BlcmF0aW9uYWwgY29uZmlnLiAgbXVzdCBhZ3JlZSB3aXRoIHRoZSBjb2RlCi0gKiB0aGF0IHJldHVybnMgY29uZmlnIGRlc2NyaXB0b3JzLCBhbmQgYWx0c2V0dGluZyBjb2RlLgorLyoKKyAqIFdlIF9hbHdheXNfIGhhdmUgYW4gRUNNIG9yIENEQyBTdWJzZXQgY29uZmlndXJhdGlvbi4KICAqLwotc3RhdGljIGludAotZXRoX3NldF9jb25maWcgKHN0cnVjdCBldGhfZGV2ICpkZXYsIHVuc2lnbmVkIG51bWJlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKQorc3RhdGljIGludCBfX2luaXQgZXRoX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7Ci0JaW50CQkJcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7CisJLyogRklYTUUgYWxsb2MgaUNvbmZpZ3VyYXRpb24gc3RyaW5nLCBzZXQgaXQgaW4gYy0+c3RyaW5ncyAqLwogCi0JaWYgKGdhZGdldF9pc19zYTExMDAgKGdhZGdldCkKLQkJCSYmIGRldi0+Y29uZmlnCi0JCQkmJiBhdG9taWNfcmVhZCAoJmRldi0+dHhfcWxlbikgIT0gMCkgewotCQkvKiB0eCBmaWZvIGlzIGZ1bGwsIGJ1dCB3ZSBjYW4ndCBjbGVhciBpdC4uLiovCi0JCUlORk8gKGRldiwgImNhbid0IGNoYW5nZSBjb25maWd1cmF0aW9uc1xuIik7Ci0JCXJldHVybiAtRVNQSVBFOwotCX0KLQlldGhfcmVzZXRfY29uZmlnIChkZXYpOwotCi0Jc3dpdGNoIChudW1iZXIpIHsKLQljYXNlIERFVl9DT05GSUdfVkFMVUU6Ci0JCXJlc3VsdCA9IHNldF9ldGhlcl9jb25maWcgKGRldiwgZ2ZwX2ZsYWdzKTsKLQkJYnJlYWs7Ci0jaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKLQljYXNlIERFVl9STkRJU19DT05GSUdfVkFMVUU6Ci0JCWRldi0+cm5kaXMgPSAxOwotCQlyZXN1bHQgPSBzZXRfZXRoZXJfY29uZmlnIChkZXYsIGdmcF9mbGFncyk7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmVzdWx0ID0gLUVJTlZBTDsKLQkJLyogRkFMTCBUSFJPVUdIICovCi0JY2FzZSAwOgotCQlicmVhazsKKwlpZiAoZ2FkZ2V0X2lzX290ZyhjLT5jZGV2LT5nYWRnZXQpKSB7CisJCWMtPmRlc2NyaXB0b3JzID0gb3RnX2Rlc2M7CisJCWMtPmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CiAJfQogCi0JaWYgKHJlc3VsdCkgewotCQlpZiAobnVtYmVyKQotCQkJZXRoX3Jlc2V0X2NvbmZpZyAoZGV2KTsKLQkJdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LT5nYWRnZXQsCi0JCQkJZ2FkZ2V0X2lzX290ZyhkZXYtPmdhZGdldCkgPyA4IDogMTAwKTsKLQl9IGVsc2UgewotCQljaGFyICpzcGVlZDsKLQkJdW5zaWduZWQgcG93ZXI7Ci0KLQkJcG93ZXIgPSAyICogZXRoX2NvbmZpZy5iTWF4UG93ZXI7Ci0JCXVzYl9nYWRnZXRfdmJ1c19kcmF3KGRldi0+Z2FkZ2V0LCBwb3dlcik7Ci0KLQkJc3dpdGNoIChnYWRnZXQtPnNwZWVkKSB7Ci0JCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CXNwZWVkID0gImZ1bGwiOyBicmVhazsKLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKLQkJY2FzZSBVU0JfU1BFRURfSElHSDoJc3BlZWQgPSAiaGlnaCI7IGJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6CQlzcGVlZCA9ICI/IjsgYnJlYWs7Ci0JCX0KLQotCQlkZXYtPmNvbmZpZyA9IG51bWJlcjsKLQkJSU5GTyAoZGV2LCAiJXMgc3BlZWQgY29uZmlnICMlZDogJWQgbUEsICVzLCB1c2luZyAlc1xuIiwKLQkJCQlzcGVlZCwgbnVtYmVyLCBwb3dlciwgZHJpdmVyX2Rlc2MsCi0JCQkJcm5kaXNfYWN0aXZlKGRldikKLQkJCQkJPyAiUk5ESVMiCi0JCQkJCTogKGNkY19hY3RpdmUoZGV2KQotCQkJCQkJPyAiQ0RDIEV0aGVybmV0IgotCQkJCQkJOiAiQ0RDIEV0aGVybmV0IFN1YnNldCIpKTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKKwlpZiAoY2FuX3N1cHBvcnRfZWNtKGMtPmNkZXYtPmdhZGdldCkpCisJCXJldHVybiBlY21fYmluZF9jb25maWcoYywgaG9zdGFkZHIpOworCWVsc2UKKwkJcmV0dXJuIGdldGhfYmluZF9jb25maWcoYywgaG9zdGFkZHIpOwogfQogCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIGV0aF9jb25maWdfZHJpdmVyID0geworCS8qIC5sYWJlbCA9IGYoaGFyZHdhcmUpICovCisJLmJpbmQJCQk9IGV0aF9kb19jb25maWcsCisJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAorCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KKwkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyCQk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KK307CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZmRlZglERVZfQ09ORklHX0NEQwotCi0vKiBUaGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgaW4gQ0RDIG5ldHdvcmtpbmcgbW9kZWxzIChFdGhlcm5ldCwgQVRNKQotICogb25seSB0byBub3RpZnkgdGhlIGhvc3QgYWJvdXQgbGluayBzdGF0dXMgY2hhbmdlcyAod2hpY2ggd2Ugc3VwcG9ydCkgb3IKLSAqIHJlcG9ydCBjb21wbGV0aW9uIG9mIHNvbWUgZW5jYXBzdWxhdGVkIGNvbW1hbmQgKGFzIHVzZWQgaW4gUk5ESVMpLiAgU2luY2UKLSAqIHdlIHdhbnQgdGhpcyBDREMgRXRoZXJuZXQgY29kZSB0byBiZSB2ZW5kb3ItbmV1dHJhbCwgd2UgZG9uJ3QgdXNlIHRoYXQKLSAqIGNvbW1hbmQgbWVjaGFuaXNtOyBhbmQgb25seSBvbmUgc3RhdHVzIHJlcXVlc3QgaXMgZXZlciBxdWV1ZWQuCi0gKi8KLQotc3RhdGljIHZvaWQgZXRoX3N0YXR1c19jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBfX2luaXQgZXRoX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewotCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbgkqZXZlbnQgPSByZXEtPmJ1ZjsKLQlpbnQJCQkJdmFsdWUgPSByZXEtPnN0YXR1czsKLQlzdHJ1Y3QgZXRoX2RldgkJCSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7Ci0KLQkvKiBpc3N1ZSB0aGUgc2Vjb25kIG5vdGlmaWNhdGlvbiBpZiBob3N0IHJlYWRzIHRoZSBmaXJzdCAqLwotCWlmIChldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUgPT0gVVNCX0NEQ19OT1RJRllfTkVUV09SS19DT05ORUNUSU9OCi0JCQkmJiB2YWx1ZSA9PSAwKSB7Ci0JCV9fbGUzMgkqZGF0YSA9IHJlcS0+YnVmICsgc2l6ZW9mICpldmVudDsKLQotCQlldmVudC0+Ym1SZXF1ZXN0VHlwZSA9IDB4QTE7Ci0JCWV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfTk9USUZZX1NQRUVEX0NIQU5HRTsKLQkJZXZlbnQtPndWYWx1ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDApOwotCQlldmVudC0+d0luZGV4ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMSk7Ci0JCWV2ZW50LT53TGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoOCk7Ci0KLQkJLyogU1BFRURfQ0hBTkdFIGRhdGEgaXMgdXAvZG93biBzcGVlZHMgaW4gYml0cy9zZWMgKi8KLQkJZGF0YSBbMF0gPSBkYXRhIFsxXSA9IGNwdV90b19sZTMyIChCSVRSQVRFIChkZXYtPmdhZGdldCkpOwotCi0JCXJlcS0+bGVuZ3RoID0gU1RBVFVTX0JZVEVDT1VOVDsKLQkJdmFsdWUgPSB1c2JfZXBfcXVldWUgKGVwLCByZXEsIEdGUF9BVE9NSUMpOwotCQlERUJVRyAoZGV2LCAic2VuZCBTUEVFRF9DSEFOR0UgLS0+ICVkXG4iLCB2YWx1ZSk7Ci0JCWlmICh2YWx1ZSA9PSAwKQotCQkJcmV0dXJuOwotCX0gZWxzZSBpZiAodmFsdWUgIT0gLUVDT05OUkVTRVQpCi0JCURFQlVHIChkZXYsICJldmVudCAlMDJ4IC0tPiAlZFxuIiwKLQkJCWV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSwgdmFsdWUpOwotCXJlcS0+Y29udGV4dCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGlzc3VlX3N0YXJ0X3N0YXR1cyAoc3RydWN0IGV0aF9kZXYgKmRldikKLXsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpyZXEgPSBkZXYtPnN0YXRfcmVxOwotCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbgkqZXZlbnQ7Ci0JaW50CQkJCXZhbHVlOwotCi0JREVCVUcgKGRldiwgIiVzLCBmbHVzaCBvbGQgc3RhdHVzIGZpcnN0XG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBmbHVzaCBvbGQgc3RhdHVzCi0JICoKLQkgKiBGSVhNRSB1Z2x5IGlkaW9tLCBtYXliZSB3ZSdkIGJlIGJldHRlciB3aXRoIGp1c3QKLQkgKiBhICJjYW5jZWwgdGhlIHdob2xlIHF1ZXVlIiBwcmltaXRpdmUgc2luY2UgYW55Ci0JICogdW5saW5rLW9uZSBwcmltaXRpdmUgaGFzIHdheSB0b28gbWFueSBlcnJvciBtb2Rlcy4KLQkgKiBoZXJlLCB3ZSAia25vdyIgdG9nZ2xlIGlzIGFscmVhZHkgY2xlYXIuLi4KLQkgKgotCSAqIEZJWE1FIGlmZiByZXEtPmNvbnRleHQgIT0gbnVsbCBqdXN0IGRlcXVldWUgaXQKLQkgKi8KLQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5zdGF0dXNfZXApOwotCXVzYl9lcF9lbmFibGUgKGRldi0+c3RhdHVzX2VwLCBkZXYtPnN0YXR1cyk7Ci0KLQkvKiAzLjguMSBzYXlzIHRvIGlzc3VlIGZpcnN0IE5FVFdPUktfQ09OTkVDVElPTiwgdGhlbgotCSAqIGEgU1BFRURfQ0hBTkdFLiAgY291bGQgYmUgdXNlZnVsIGluIHNvbWUgY29uZmlncy4KLQkgKi8KLQlldmVudCA9IHJlcS0+YnVmOwotCWV2ZW50LT5ibVJlcXVlc3RUeXBlID0gMHhBMTsKLQlldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT047Ci0JZXZlbnQtPndWYWx1ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDEpOwkvKiBjb25uZWN0ZWQgKi8KLQlldmVudC0+d0luZGV4ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMSk7Ci0JZXZlbnQtPndMZW5ndGggPSAwOwotCi0JcmVxLT5sZW5ndGggPSBzaXplb2YgKmV2ZW50OwotCXJlcS0+Y29tcGxldGUgPSBldGhfc3RhdHVzX2NvbXBsZXRlOwotCXJlcS0+Y29udGV4dCA9IGRldjsKLQotCXZhbHVlID0gdXNiX2VwX3F1ZXVlIChkZXYtPnN0YXR1c19lcCwgcmVxLCBHRlBfQVRPTUlDKTsKLQlpZiAodmFsdWUgPCAwKQotCQlERUJVRyAoZGV2LCAic3RhdHVzIGJ1ZiBxdWV1ZSAtLT4gJWRcbiIsIHZhbHVlKTsKLX0KLQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB2b2lkIGV0aF9zZXR1cF9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQotewotCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKLQkJREVCVUcgKChzdHJ1Y3QgZXRoX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGEsCi0JCQkJInNldHVwIGNvbXBsZXRlIC0tPiAlZCwgJWQvJWRcbiIsCi0JCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUwotCi1zdGF0aWMgdm9pZCBybmRpc19yZXNwb25zZV9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQotewotCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKLQkJREVCVUcgKChzdHJ1Y3QgZXRoX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGEsCi0JCQkicm5kaXMgcmVzcG9uc2UgY29tcGxldGUgLS0+ICVkLCAlZC8lZFxuIiwKLQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOwotCi0JLyogZG9uZSBzZW5kaW5nIGFmdGVyIFVTQl9DRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRSAqLwotfQotCi1zdGF0aWMgdm9pZCBybmRpc19jb21tYW5kX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCi17Ci0Jc3RydWN0IGV0aF9kZXYgICAgICAgICAgKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKwlpbnQJCQlnY251bTsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gY2Rldi0+Z2FkZ2V0OwogCWludAkJCXN0YXR1czsKIAotCS8qIHJlY2VpdmVkIFJORElTIGNvbW1hbmQgZnJvbSBVU0JfQ0RDX1NFTkRfRU5DQVBTVUxBVEVEX0NPTU1BTkQgKi8KLQlzcGluX2xvY2soJmRldi0+bG9jayk7Ci0Jc3RhdHVzID0gcm5kaXNfbXNnX3BhcnNlciAoZGV2LT5ybmRpc19jb25maWcsICh1OCAqKSByZXEtPmJ1Zik7CisJLyogc2V0IHVwIG5ldHdvcmsgbGluayBsYXllciAqLworCXN0YXR1cyA9IGdldGhlcl9zZXR1cChjZGV2LT5nYWRnZXQsIGhvc3RhZGRyKTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJRVJST1IoZGV2LCAiJXM6IHJuZGlzIHBhcnNlIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKLX0KKwkJcmV0dXJuIHN0YXR1czsKIAotI2VuZGlmCS8qIFJORElTICovCisJLyogc2V0IHVwIG1haW4gY29uZmlnIGxhYmVsIGFuZCBkZXZpY2UgZGVzY3JpcHRvciAqLworCWlmIChjYW5fc3VwcG9ydF9lY20oY2Rldi0+Z2FkZ2V0KSkgeworCQkvKiBFQ00gKi8KKwkJZXRoX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiQ0RDIEV0aGVybmV0IChFQ00pIjsKKwl9IGVsc2UgeworCQkvKiBDREMgU3Vic2V0ICovCisJCWV0aF9jb25maWdfZHJpdmVyLmxhYmVsID0gIkNEQyBTdWJzZXQvU0FGRSI7CiAKLS8qCi0gKiBUaGUgc2V0dXAoKSBjYWxsYmFjayBpbXBsZW1lbnRzIGFsbCB0aGUgZXAwIGZ1bmN0aW9uYWxpdHkgdGhhdCdzIG5vdAotICogaGFuZGxlZCBsb3dlciBkb3duLiAgQ0RDIGhhcyBhIG51bWJlciBvZiBsZXNzLWNvbW1vbiBmZWF0dXJlczoKLSAqCi0gKiAgLSB0d28gaW50ZXJmYWNlczogIGNvbnRyb2wsIGFuZCBldGhlcm5ldCBkYXRhCi0gKiAgLSBFdGhlcm5ldCBkYXRhIGludGVyZmFjZSBoYXMgdHdvIGFsdHNldHRpbmdzOiAgZGVmYXVsdCwgYW5kIGFjdGl2ZQotICogIC0gY2xhc3Mtc3BlY2lmaWMgZGVzY3JpcHRvcnMgZm9yIHRoZSBjb250cm9sIGludGVyZmFjZQotICogIC0gY2xhc3Mtc3BlY2lmaWMgY29udHJvbCByZXF1ZXN0cwotICovCi1zdGF0aWMgaW50Ci1ldGhfc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCi17Ci0Jc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7Ci0Jc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBkZXYtPnJlcTsKLQlpbnQJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOwotCXUxNgkJCXdJbmRleCA9IGxlMTZfdG9fY3B1KGN0cmwtPndJbmRleCk7Ci0JdTE2CQkJd1ZhbHVlID0gbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKTsKLQl1MTYJCQl3TGVuZ3RoID0gbGUxNl90b19jcHUoY3RybC0+d0xlbmd0aCk7Ci0KLQkvKiBkZXNjcmlwdG9ycyBqdXN0IGdvIGludG8gdGhlIHByZS1hbGxvY2F0ZWQgZXAwIGJ1ZmZlciwKLQkgKiB3aGlsZSBjb25maWcgY2hhbmdlIGV2ZW50cyBtYXkgZW5hYmxlIG5ldHdvcmsgdHJhZmZpYy4KLQkgKi8KLQlyZXEtPmNvbXBsZXRlID0gZXRoX3NldHVwX2NvbXBsZXRlOwotCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKLQotCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKLQkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfRElSX0lOKQotCQkJYnJlYWs7Ci0JCXN3aXRjaCAod1ZhbHVlID4+IDgpIHsKLQotCQljYXNlIFVTQl9EVF9ERVZJQ0U6Ci0JCQl2YWx1ZSA9IG1pbiAod0xlbmd0aCwgKHUxNikgc2l6ZW9mIGRldmljZV9kZXNjKTsKLQkJCW1lbWNweSAocmVxLT5idWYsICZkZXZpY2VfZGVzYywgdmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI6Ci0JCQlpZiAoIWdhZGdldF9pc19kdWFsc3BlZWQoZ2FkZ2V0KSkKLQkJCQlicmVhazsKLQkJCXZhbHVlID0gbWluICh3TGVuZ3RoLCAodTE2KSBzaXplb2YgZGV2X3F1YWxpZmllcik7Ci0JCQltZW1jcHkgKHJlcS0+YnVmLCAmZGV2X3F1YWxpZmllciwgdmFsdWUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHOgotCQkJaWYgKCFnYWRnZXRfaXNfZHVhbHNwZWVkKGdhZGdldCkpCi0JCQkJYnJlYWs7Ci0JCQkvLyBGQUxMVEhST1VHSAotCQljYXNlIFVTQl9EVF9DT05GSUc6Ci0JCQl2YWx1ZSA9IGNvbmZpZ19idWYoZ2FkZ2V0LCByZXEtPmJ1ZiwKLQkJCQkJd1ZhbHVlID4+IDgsCi0JCQkJCXdWYWx1ZSAmIDB4ZmYsCi0JCQkJCWdhZGdldF9pc19vdGcoZ2FkZ2V0KSk7Ci0JCQlpZiAodmFsdWUgPj0gMCkKLQkJCQl2YWx1ZSA9IG1pbiAod0xlbmd0aCwgKHUxNikgdmFsdWUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBVU0JfRFRfU1RSSU5HOgotCQkJdmFsdWUgPSB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcgKCZzdHJpbmd0YWIsCi0JCQkJCXdWYWx1ZSAmIDB4ZmYsIHJlcS0+YnVmKTsKLQkJCWlmICh2YWx1ZSA+PSAwKQotCQkJCXZhbHVlID0gbWluICh3TGVuZ3RoLCAodTE2KSB2YWx1ZSk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKLQkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAwKQotCQkJYnJlYWs7Ci0JCWlmIChnYWRnZXQtPmFfaG5wX3N1cHBvcnQpCi0JCQlERUJVRyAoZGV2LCAiSE5QIGF2YWlsYWJsZVxuIik7Ci0JCWVsc2UgaWYgKGdhZGdldC0+YV9hbHRfaG5wX3N1cHBvcnQpCi0JCQlERUJVRyAoZGV2LCAiSE5QIG5lZWRzIGEgZGlmZmVyZW50IHJvb3QgcG9ydFxuIik7Ci0JCXNwaW5fbG9jayAoJmRldi0+bG9jayk7Ci0JCXZhbHVlID0gZXRoX3NldF9jb25maWcgKGRldiwgd1ZhbHVlLCBHRlBfQVRPTUlDKTsKLQkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOwotCQlicmVhazsKLQljYXNlIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046Ci0JCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX0RJUl9JTikKLQkJCWJyZWFrOwotCQkqKHU4ICopcmVxLT5idWYgPSBkZXYtPmNvbmZpZzsKLQkJdmFsdWUgPSBtaW4gKHdMZW5ndGgsICh1MTYpIDEpOwotCQlicmVhazsKLQotCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9JTlRFUkZBQ0UKLQkJCQl8fCAhZGV2LT5jb25maWcKLQkJCQl8fCB3SW5kZXggPiAxKQotCQkJYnJlYWs7Ci0JCWlmICghY2RjX2FjdGl2ZShkZXYpICYmIHdJbmRleCAhPSAwKQotCQkJYnJlYWs7Ci0JCXNwaW5fbG9jayAoJmRldi0+bG9jayk7Ci0KLQkJLyogUFhBIGhhcmR3YXJlIHBhcnRpYWxseSBoYW5kbGVzIFNFVF9JTlRFUkZBQ0U7Ci0JCSAqIHdlIG5lZWQgdG8ga2x1Z2UgYXJvdW5kIHRoYXQgaW50ZXJmZXJlbmNlLgotCQkgKi8KLQkJaWYgKGdhZGdldF9pc19weGEgKGdhZGdldCkpIHsKLQkJCXZhbHVlID0gZXRoX3NldF9jb25maWcgKGRldiwgREVWX0NPTkZJR19WQUxVRSwKLQkJCQkJCUdGUF9BVE9NSUMpOwotCQkJZ290byBkb25lX3NldF9pbnRmOwotCQl9Ci0KLSNpZmRlZiBERVZfQ09ORklHX0NEQwotCQlzd2l0Y2ggKHdJbmRleCkgewotCQljYXNlIDA6CQkvKiBjb250cm9sL21hc3RlciBpbnRmICovCi0JCQlpZiAod1ZhbHVlICE9IDApCi0JCQkJYnJlYWs7Ci0JCQlpZiAoZGV2LT5zdGF0dXMpIHsKLQkJCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5zdGF0dXNfZXApOwotCQkJCXVzYl9lcF9lbmFibGUgKGRldi0+c3RhdHVzX2VwLCBkZXYtPnN0YXR1cyk7Ci0JCQl9Ci0JCQl2YWx1ZSA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgkJLyogZGF0YSBpbnRmICovCi0JCQlpZiAod1ZhbHVlID4gMSkKLQkJCQlicmVhazsKLQkJCXVzYl9lcF9kaXNhYmxlIChkZXYtPmluX2VwKTsKLQkJCXVzYl9lcF9kaXNhYmxlIChkZXYtPm91dF9lcCk7Ci0KLQkJCS8qIENEQyByZXF1aXJlcyB0aGUgZGF0YSB0cmFuc2ZlcnMgbm90IGJlIGRvbmUgZnJvbQotCQkJICogdGhlIGRlZmF1bHQgaW50ZXJmYWNlIHNldHRpbmcgLi4uIGFsc28sIHNldHRpbmcKLQkJCSAqIHRoZSBub24tZGVmYXVsdCBpbnRlcmZhY2UgcmVzZXRzIGZpbHRlcnMgZXRjLgotCQkJICovCi0JCQlpZiAod1ZhbHVlID09IDEpIHsKLQkJCQlpZiAoIWNkY19hY3RpdmUgKGRldikpCi0JCQkJCWJyZWFrOwotCQkJCXVzYl9lcF9lbmFibGUgKGRldi0+aW5fZXAsIGRldi0+aW4pOwotCQkJCXVzYl9lcF9lbmFibGUgKGRldi0+b3V0X2VwLCBkZXYtPm91dCk7Ci0JCQkJZGV2LT5jZGNfZmlsdGVyID0gREVGQVVMVF9GSUxURVI7Ci0JCQkJbmV0aWZfY2Fycmllcl9vbiAoZGV2LT5uZXQpOwotCQkJCWlmIChkZXYtPnN0YXR1cykKLQkJCQkJaXNzdWVfc3RhcnRfc3RhdHVzIChkZXYpOwotCQkJCWlmIChuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpIHsKLQkJCQkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOwotCQkJCQlldGhfc3RhcnQgKGRldiwgR0ZQX0FUT01JQyk7Ci0JCQkJCXNwaW5fbG9jayAoJmRldi0+bG9jayk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQluZXRpZl9zdG9wX3F1ZXVlIChkZXYtPm5ldCk7Ci0JCQkJbmV0aWZfY2Fycmllcl9vZmYgKGRldi0+bmV0KTsKLQkJCX0KLQkJCXZhbHVlID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0jZWxzZQotCQkvKiBGSVhNRSB0aGlzIGlzIHdyb25nLCBhcyBpcyB0aGUgYXNzdW1wdGlvbiB0aGF0Ci0JCSAqIGFsbCBub24tUFhBIGhhcmR3YXJlIHRhbGtzIHJlYWwgQ0RDIC4uLgotCQkgKi8KLQkJZGV2X3dhcm4gKCZnYWRnZXQtPmRldiwgInNldF9pbnRlcmZhY2UgaWdub3JlZCFcbiIpOwotI2VuZGlmIC8qIERFVl9DT05GSUdfQ0RDICovCi0KLWRvbmVfc2V0X2ludGY6Ci0JCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKLQkJYnJlYWs7Ci0JY2FzZSBVU0JfUkVRX0dFVF9JTlRFUkZBQ0U6Ci0JCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU58VVNCX1JFQ0lQX0lOVEVSRkFDRSkKLQkJCQl8fCAhZGV2LT5jb25maWcKLQkJCQl8fCB3SW5kZXggPiAxKQotCQkJYnJlYWs7Ci0JCWlmICghKGNkY19hY3RpdmUoZGV2KSB8fCBybmRpc19hY3RpdmUoZGV2KSkgJiYgd0luZGV4ICE9IDApCi0JCQlicmVhazsKLQotCQkvKiBmb3IgQ0RDLCBpZmYgY2FycmllciBpcyBvbiwgZGF0YSBpbnRlcmZhY2UgaXMgYWN0aXZlLiAqLwotCQlpZiAocm5kaXNfYWN0aXZlKGRldikgfHwgd0luZGV4ICE9IDEpCi0JCQkqKHU4ICopcmVxLT5idWYgPSAwOwotCQllbHNlCi0JCQkqKHU4ICopcmVxLT5idWYgPSBuZXRpZl9jYXJyaWVyX29rIChkZXYtPm5ldCkgPyAxIDogMDsKLQkJdmFsdWUgPSBtaW4gKHdMZW5ndGgsICh1MTYpIDEpOwotCQlicmVhazsKLQotI2lmZGVmIERFVl9DT05GSUdfQ0RDCi0JY2FzZSBVU0JfQ0RDX1NFVF9FVEhFUk5FVF9QQUNLRVRfRklMVEVSOgotCQkvKiBzZWUgNi4yLjMwOiBubyBkYXRhLCB3SW5kZXggPSBpbnRlcmZhY2UsCi0JCSAqIHdWYWx1ZSA9IHBhY2tldCBmaWx0ZXIgYml0bWFwCi0JCSAqLwotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfSU5URVJGQUNFKQotCQkJCXx8ICFjZGNfYWN0aXZlKGRldikKLQkJCQl8fCB3TGVuZ3RoICE9IDAKLQkJCQl8fCB3SW5kZXggPiAxKQotCQkJYnJlYWs7Ci0JCURFQlVHIChkZXYsICJwYWNrZXQgZmlsdGVyICUwMnhcbiIsIHdWYWx1ZSk7Ci0JCWRldi0+Y2RjX2ZpbHRlciA9IHdWYWx1ZTsKLQkJdmFsdWUgPSAwOwotCQlicmVhazsKLQotCS8qIGFuZCBwb3RlbnRpYWxseToKLQkgKiBjYXNlIFVTQl9DRENfU0VUX0VUSEVSTkVUX01VTFRJQ0FTVF9GSUxURVJTOgotCSAqIGNhc2UgVVNCX0NEQ19TRVRfRVRIRVJORVRfUE1fUEFUVEVSTl9GSUxURVI6Ci0JICogY2FzZSBVU0JfQ0RDX0dFVF9FVEhFUk5FVF9QTV9QQVRURVJOX0ZJTFRFUjoKLQkgKiBjYXNlIFVTQl9DRENfR0VUX0VUSEVSTkVUX1NUQVRJU1RJQzoKLQkgKi8KLQotI2VuZGlmIC8qIERFVl9DT05GSUdfQ0RDICovCi0KLSNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUwotCS8qIFJORElTIHVzZXMgdGhlIENEQyBjb21tYW5kIGVuY2Fwc3VsYXRpb24gbWVjaGFuaXNtIHRvIGltcGxlbWVudAotCSAqIGFuIFJQQyBzY2hlbWUsIHdpdGggbXVjaCBnZXR0aW5nL3NldHRpbmcgb2YgYXR0cmlidXRlcyBieSBPSUQuCi0JICovCi0JY2FzZSBVU0JfQ0RDX1NFTkRfRU5DQVBTVUxBVEVEX0NPTU1BTkQ6Ci0JCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9JTlRFUkZBQ0UpCi0JCQkJfHwgIXJuZGlzX2FjdGl2ZShkZXYpCi0JCQkJfHwgd0xlbmd0aCA+IFVTQl9CVUZTSVoKLQkJCQl8fCB3VmFsdWUKLQkJCQl8fCBybmRpc19jb250cm9sX2ludGYuYkludGVyZmFjZU51bWJlcgotCQkJCQkhPSB3SW5kZXgpCi0JCQlicmVhazsKLQkJLyogcmVhZCB0aGUgcmVxdWVzdCwgdGhlbiBwcm9jZXNzIGl0ICovCi0JCXZhbHVlID0gd0xlbmd0aDsKLQkJcmVxLT5jb21wbGV0ZSA9IHJuZGlzX2NvbW1hbmRfY29tcGxldGU7Ci0JCS8qIGxhdGVyLCBybmRpc19jb250cm9sX2FjayAoKSBzZW5kcyBhIG5vdGlmaWNhdGlvbiAqLwotCQlicmVhazsKLQotCWNhc2UgVVNCX0NEQ19HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFOgotCQlpZiAoKFVTQl9ESVJfSU58VVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0lOVEVSRkFDRSkKLQkJCQkJPT0gY3RybC0+YlJlcXVlc3RUeXBlCi0JCQkJJiYgcm5kaXNfYWN0aXZlKGRldikKLQkJCQkvLyAmJiB3TGVuZ3RoID49IDB4MDQwMAotCQkJCSYmICF3VmFsdWUKLQkJCQkmJiBybmRpc19jb250cm9sX2ludGYuYkludGVyZmFjZU51bWJlcgotCQkJCQk9PSB3SW5kZXgpIHsKLQkJCXU4ICpidWY7Ci0JCQl1MzIgbjsKLQotCQkJLyogcmV0dXJuIHRoZSByZXN1bHQgKi8KLQkJCWJ1ZiA9IHJuZGlzX2dldF9uZXh0X3Jlc3BvbnNlKGRldi0+cm5kaXNfY29uZmlnLCAmbik7Ci0JCQlpZiAoYnVmKSB7Ci0JCQkJbWVtY3B5KHJlcS0+YnVmLCBidWYsIG4pOwotCQkJCXJlcS0+Y29tcGxldGUgPSBybmRpc19yZXNwb25zZV9jb21wbGV0ZTsKLQkJCQlybmRpc19mcmVlX3Jlc3BvbnNlKGRldi0+cm5kaXNfY29uZmlnLCBidWYpOwotCQkJCXZhbHVlID0gbjsKLQkJCX0KLQkJCS8qIGVsc2Ugc3RhbGxzIC4uLiBzcGVjIHNheXMgdG8gYXZvaWQgdGhhdCAqLwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCS8qIFJORElTICovCi0KLQlkZWZhdWx0OgotCQlWREVCVUcgKGRldiwKLQkJCSJ1bmtub3duIGNvbnRyb2wgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKLQkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCi0JCQl3VmFsdWUsIHdJbmRleCwgd0xlbmd0aCk7CisJCWRldmljZV9kZXNjLmlkVmVuZG9yID0gY3B1X3RvX2xlMTYoU0lNUExFX1ZFTkRPUl9OVU0pLAorCQlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPSBjcHVfdG9fbGUxNihTSU1QTEVfUFJPRFVDVF9OVU0pLAorCQlkZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUM7CiAJfQogCi0JLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KLQlpZiAodmFsdWUgPj0gMCkgewotCQlyZXEtPmxlbmd0aCA9IHZhbHVlOwotCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdMZW5ndGgKLQkJCQkmJiAodmFsdWUgJSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0KSA9PSAwOwotCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZSAoZ2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7Ci0JCWlmICh2YWx1ZSA8IDApIHsKLQkJCURFQlVHIChkZXYsICJlcF9xdWV1ZSAtLT4gJWRcbiIsIHZhbHVlKTsKLQkJCXJlcS0+c3RhdHVzID0gMDsKLQkJCWV0aF9zZXR1cF9jb21wbGV0ZSAoZ2FkZ2V0LT5lcDAsIHJlcSk7Ci0JCX0KKwlpZiAoaGFzX3JuZGlzKCkpIHsKKwkJLyogUk5ESVMgcGx1cyBFQ00tb3ItU3Vic2V0ICovCisJCWRldmljZV9kZXNjLmlkVmVuZG9yID0gY3B1X3RvX2xlMTYoUk5ESVNfVkVORE9SX05VTSksCisJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9IGNwdV90b19sZTE2KFJORElTX1BST0RVQ1RfTlVNKSwKKwkJZGV2aWNlX2Rlc2MuYk51bUNvbmZpZ3VyYXRpb25zID0gMjsKIAl9CiAKLQkvKiBob3N0IGVpdGhlciBzdGFsbHMgKHZhbHVlIDwgMCkgb3IgcmVwb3J0cyBzdWNjZXNzICovCi0JcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgdm9pZAotZXRoX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCi17Ci0Jc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOwotCW5ldGlmX3N0b3BfcXVldWUgKGRldi0+bmV0KTsKLQluZXRpZl9jYXJyaWVyX29mZiAoZGV2LT5uZXQpOwotCWV0aF9yZXNldF9jb25maWcgKGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOwotCi0JLyogRklYTUUgUk5ESVMgc2hvdWxkIGVudGVyIFJORElTX1VOSU5JVElBTElaRUQgKi8KLQotCS8qIG5leHQgd2UgbWF5IGdldCBzZXR1cCgpIGNhbGxzIHRvIGVudW1lcmF0ZSBuZXcgY29ubmVjdGlvbnM7Ci0JICogb3IgYW4gdW5iaW5kKCkgZHVyaW5nIHNodXRkb3duIChpbmNsdWRpbmcgcmVtb3ZpbmcgbW9kdWxlKS4KLQkgKi8KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogTkVUV09SSyBEUklWRVIgSE9PS1VQICh0byB0aGUgbGF5ZXIgYWJvdmUgdGhpcyBkcml2ZXIpICovCi0KLXN0YXRpYyBpbnQgZXRoX2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KQotewotCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCi0JaWYgKGRldi0+cm5kaXMpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAobmV3X210dSA8PSBFVEhfSExFTiB8fCBuZXdfbXR1ID4gRVRIX0ZSQU1FX0xFTikKLQkJcmV0dXJuIC1FUkFOR0U7Ci0JLyogbm8gemVyby1sZW5ndGggcGFja2V0IHJlYWQgd2FudGVkIGFmdGVyIG10dS1zaXplZCBwYWNrZXRzICovCi0JaWYgKCgobmV3X210dSArIHNpemVvZiAoc3RydWN0IGV0aGhkcikpICUgZGV2LT5pbl9lcC0+bWF4cGFja2V0KSA9PSAwKQotCQlyZXR1cm4gLUVET007Ci0JbmV0LT5tdHUgPSBuZXdfbXR1OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmV0aF9nZXRfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCi17Ci0JcmV0dXJuICYoKHN0cnVjdCBldGhfZGV2ICopbmV0ZGV2X3ByaXYobmV0KSktPnN0YXRzOwotfQotCi1zdGF0aWMgdm9pZCBldGhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqcCkKLXsKLQlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKLQlzdHJsY3B5KHAtPmRyaXZlciwgc2hvcnRuYW1lLCBzaXplb2YgcC0+ZHJpdmVyKTsKLQlzdHJsY3B5KHAtPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YgcC0+dmVyc2lvbik7Ci0Jc3RybGNweShwLT5md192ZXJzaW9uLCBkZXYtPmdhZGdldC0+bmFtZSwgc2l6ZW9mIHAtPmZ3X3ZlcnNpb24pOwotCXN0cmxjcHkgKHAtPmJ1c19pbmZvLCBkZXYtPmdhZGdldC0+ZGV2LmJ1c19pZCwgc2l6ZW9mIHAtPmJ1c19pbmZvKTsKLX0KLQotc3RhdGljIHUzMiBldGhfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKLXsKLQlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKLQlyZXR1cm4gZGV2LT5nYWRnZXQtPnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOOwotfQotCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKLQkuZ2V0X2RydmluZm8gPSBldGhfZ2V0X2RydmluZm8sCi0JLmdldF9saW5rID0gZXRoX2dldF9saW5rCi19OwotCi1zdGF0aWMgdm9pZCBkZWZlcl9rZXZlbnQgKHN0cnVjdCBldGhfZGV2ICpkZXYsIGludCBmbGFnKQotewotCWlmICh0ZXN0X2FuZF9zZXRfYml0IChmbGFnLCAmZGV2LT50b2RvKSkKLQkJcmV0dXJuOwotCWlmICghc2NoZWR1bGVfd29yayAoJmRldi0+d29yaykpCi0JCUVSUk9SIChkZXYsICJrZXZlbnQgJWQgbWF5IGhhdmUgYmVlbiBkcm9wcGVkXG4iLCBmbGFnKTsKLQllbHNlCi0JCURFQlVHIChkZXYsICJrZXZlbnQgJWQgc2NoZWR1bGVkXG4iLCBmbGFnKTsKLX0KLQotc3RhdGljIHZvaWQgcnhfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSk7Ci0KLXN0YXRpYyBpbnQKLXJ4X3N1Ym1pdCAoc3RydWN0IGV0aF9kZXYgKmRldiwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsIGdmcF90IGdmcF9mbGFncykKLXsKLQlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKLQlpbnQJCQlyZXR2YWwgPSAtRU5PTUVNOwotCXNpemVfdAkJCXNpemU7Ci0KLQkvKiBQYWRkaW5nIHVwIHRvIFJYX0VYVFJBIGhhbmRsZXMgbWlub3IgZGlzYWdyZWVtZW50cyB3aXRoIGhvc3QuCi0JICogTm9ybWFsbHkgd2UgdXNlIHRoZSBVU0IgInRlcm1pbmF0ZSBvbiBzaG9ydCByZWFkIiBjb252ZW50aW9uOwotCSAqIHNvIGFsbG93IHVwIHRvIChOKm1heHBhY2tldCksIHNpbmNlIHRoYXQgbWVtb3J5IGlzIG5vcm1hbGx5Ci0JICogYWxyZWFkeSBhbGxvY2F0ZWQuICBTb21lIGhhcmR3YXJlIGRvZXNuJ3QgZGVhbCB3ZWxsIHdpdGggc2hvcnQKLQkgKiByZWFkcyAoZS5nLiBETUEgbXVzdCBiZSBOKm1heHBhY2tldCksIHNvIGZvciBub3cgZG9uJ3QgdHJpbSBhCi0JICogYnl0ZSBvZmYgdGhlIGVuZCAodG8gZm9yY2UgaGFyZHdhcmUgZXJyb3JzIG9uIG92ZXJmbG93KS4KLQkgKgotCSAqIFJORElTIHVzZXMgaW50ZXJuYWwgZnJhbWluZywgYW5kIGV4cGxpY2l0bHkgYWxsb3dzIHNlbmRlcnMgdG8KLQkgKiBwYWQgdG8gZW5kLW9mLXBhY2tldC4gIFRoYXQncyBwb3RlbnRpYWxseSBuaWNlIGZvciBzcGVlZCwKLQkgKiBidXQgbWVhbnMgcmVjZWl2ZXJzIGNhbid0IHJlY292ZXIgc3luY2ggb24gdGhlaXIgb3duLgotCSAqLwotCXNpemUgPSAoc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSArIGRldi0+bmV0LT5tdHUgKyBSWF9FWFRSQSk7Ci0Jc2l6ZSArPSBkZXYtPm91dF9lcC0+bWF4cGFja2V0IC0gMTsKLQlpZiAocm5kaXNfYWN0aXZlKGRldikpCi0JCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlKTsKLQlzaXplIC09IHNpemUgJSBkZXYtPm91dF9lcC0+bWF4cGFja2V0OwotCi0Jc2tiID0gYWxsb2Nfc2tiKHNpemUgKyBORVRfSVBfQUxJR04sIGdmcF9mbGFncyk7Ci0JaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCURFQlVHIChkZXYsICJubyByeCBza2JcbiIpOwotCQlnb3RvIGVub21lbTsKLQl9Ci0KLQkvKiBTb21lIHBsYXRmb3JtcyBwZXJmb3JtIGJldHRlciB3aGVuIElQIHBhY2tldHMgYXJlIGFsaWduZWQsCi0JICogYnV0IG9uIGF0IGxlYXN0IG9uZSwgY2hlY2tzdW1taW5nIGZhaWxzIG90aGVyd2lzZS4gIE5vdGU6Ci0JICogUk5ESVMgaGVhZGVycyBpbnZvbHZlIHZhcmlhYmxlIG51bWJlcnMgb2YgTEUzMiB2YWx1ZXMuCi0JICovCi0Jc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwotCi0JcmVxLT5idWYgPSBza2ItPmRhdGE7Ci0JcmVxLT5sZW5ndGggPSBzaXplOwotCXJlcS0+Y29tcGxldGUgPSByeF9jb21wbGV0ZTsKLQlyZXEtPmNvbnRleHQgPSBza2I7Ci0KLQlyZXR2YWwgPSB1c2JfZXBfcXVldWUgKGRldi0+b3V0X2VwLCByZXEsIGdmcF9mbGFncyk7Ci0JaWYgKHJldHZhbCA9PSAtRU5PTUVNKQotZW5vbWVtOgotCQlkZWZlcl9rZXZlbnQgKGRldiwgV09SS19SWF9NRU1PUlkpOwotCWlmIChyZXR2YWwpIHsKLQkJREVCVUcgKGRldiwgInJ4IHN1Ym1pdCAtLT4gJWRcbiIsIHJldHZhbCk7Ci0JCWlmIChza2IpCi0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOwotCQlsaXN0X2FkZCAoJnJlcS0+bGlzdCwgJmRldi0+cnhfcmVxcyk7Ci0JCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgcnhfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiID0gcmVxLT5jb250ZXh0OwotCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7Ci0JaW50CQlzdGF0dXMgPSByZXEtPnN0YXR1czsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0KLQkvKiBub3JtYWwgY29tcGxldGlvbiAqLwotCWNhc2UgMDoKLQkJc2tiX3B1dCAoc2tiLCByZXEtPmFjdHVhbCk7Ci0JCS8qIHdlIGtub3cgTWF4UGFja2V0c1BlclRyYW5zZmVyID09IDEgaGVyZSAqLwotCQlpZiAocm5kaXNfYWN0aXZlKGRldikpCi0JCQlzdGF0dXMgPSBybmRpc19ybV9oZHIgKHNrYik7Ci0JCWlmIChzdGF0dXMgPCAwCi0JCQkJfHwgRVRIX0hMRU4gPiBza2ItPmxlbgotCQkJCXx8IHNrYi0+bGVuID4gRVRIX0ZSQU1FX0xFTikgewotCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJREVCVUcgKGRldiwgInJ4IGxlbmd0aCAlZFxuIiwgc2tiLT5sZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMgKHNrYiwgZGV2LT5uZXQpOwotCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQotCQkvKiBubyBidWZmZXIgY29waWVzIG5lZWRlZCwgdW5sZXNzIGhhcmR3YXJlIGNhbid0Ci0JCSAqIHVzZSBza2IgYnVmZmVycy4KLQkJICovCi0JCXN0YXR1cyA9IG5ldGlmX3J4IChza2IpOwotCQlza2IgPSBOVUxMOwotCQlicmVhazsKLQotCS8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi8KLQljYXNlIC1FQ09OTlJFU0VUOgkJLy8gdW5saW5rCi0JY2FzZSAtRVNIVVRET1dOOgkJLy8gZGlzY29ubmVjdCBldGMKLQkJVkRFQlVHIChkZXYsICJyeCBzaHV0ZG93biwgY29kZSAlZFxuIiwgc3RhdHVzKTsKLQkJZ290byBxdWllc2NlOwotCi0JLyogZm9yIGhhcmR3YXJlIGF1dG9tYWdpYyAoc3VjaCBhcyBweGEpICovCi0JY2FzZSAtRUNPTk5BQk9SVEVEOgkJLy8gZW5kcG9pbnQgcmVzZXQKLQkJREVCVUcgKGRldiwgInJ4ICVzIHJlc2V0XG4iLCBlcC0+bmFtZSk7Ci0JCWRlZmVyX2tldmVudCAoZGV2LCBXT1JLX1JYX01FTU9SWSk7Ci1xdWllc2NlOgotCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKLQkJZ290byBjbGVhbjsKLQotCS8qIGRhdGEgb3ZlcnJ1biAqLwotCWNhc2UgLUVPVkVSRkxPVzoKLQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkvLyBGQUxMVEhST1VHSAotCi0JZGVmYXVsdDoKLQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJREVCVUcgKGRldiwgInJ4IHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHNrYikKLQkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7Ci0JaWYgKCFuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpIHsKLWNsZWFuOgotCQlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOwotCQlsaXN0X2FkZCAoJnJlcS0+bGlzdCwgJmRldi0+cnhfcmVxcyk7Ci0JCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKLQkJcmVxID0gTlVMTDsKLQl9Ci0JaWYgKHJlcSkKLQkJcnhfc3VibWl0IChkZXYsIHJlcSwgR0ZQX0FUT01JQyk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJlYWxsb2MgKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCB1c2JfZXAgKmVwLAotCQkJdW5zaWduZWQgbiwgZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCXVuc2lnbmVkCQlpOwotCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwotCi0JaWYgKCFuKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIHF1ZXVlL3JlY3ljbGUgdXAgdG8gTiByZXF1ZXN0cyAqLwotCWkgPSBuOwotCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgbGlzdCwgbGlzdCkgewotCQlpZiAoaS0tID09IDApCi0JCQlnb3RvIGV4dHJhOwotCX0KLQl3aGlsZSAoaS0tKSB7Ci0JCXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0IChlcCwgZ2ZwX2ZsYWdzKTsKLQkJaWYgKCFyZXEpCi0JCQlyZXR1cm4gbGlzdF9lbXB0eSAobGlzdCkgPyAtRU5PTUVNIDogMDsKLQkJbGlzdF9hZGQgKCZyZXEtPmxpc3QsIGxpc3QpOwotCX0KLQlyZXR1cm4gMDsKLQotZXh0cmE6Ci0JLyogZnJlZSBleHRyYXMgKi8KLQlmb3IgKDs7KSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQJKm5leHQ7Ci0KLQkJbmV4dCA9IHJlcS0+bGlzdC5uZXh0OwotCQlsaXN0X2RlbCAoJnJlcS0+bGlzdCk7Ci0JCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGVwLCByZXEpOwotCi0JCWlmIChuZXh0ID09IGxpc3QpCi0JCQlicmVhazsKLQotCQlyZXEgPSBjb250YWluZXJfb2YgKG5leHQsIHN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFsbG9jX3JlcXVlc3RzIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCB1bnNpZ25lZCBuLCBnZnBfdCBnZnBfZmxhZ3MpCi17Ci0JaW50IHN0YXR1czsKLQotCXNwaW5fbG9jaygmZGV2LT5yZXFfbG9jayk7Ci0Jc3RhdHVzID0gcHJlYWxsb2MgKCZkZXYtPnR4X3JlcXMsIGRldi0+aW5fZXAsIG4sIGdmcF9mbGFncyk7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCWdvdG8gZmFpbDsKLQlzdGF0dXMgPSBwcmVhbGxvYyAoJmRldi0+cnhfcmVxcywgZGV2LT5vdXRfZXAsIG4sIGdmcF9mbGFncyk7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCWdvdG8gZmFpbDsKLQlnb3RvIGRvbmU7Ci1mYWlsOgotCURFQlVHIChkZXYsICJjYW4ndCBhbGxvYyByZXF1ZXN0c1xuIik7Ci1kb25lOgotCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCByeF9maWxsIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBnZnBfdCBnZnBfZmxhZ3MpCi17Ci0Jc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0KLQkvKiBmaWxsIHVudXNlZCByeHEgc2xvdHMgd2l0aCBzb21lIHNrYiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5ICgmZGV2LT5yeF9yZXFzKSkgewotCQlyZXEgPSBjb250YWluZXJfb2YgKGRldi0+cnhfcmVxcy5uZXh0LAotCQkJCXN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7Ci0JCWxpc3RfZGVsX2luaXQgKCZyZXEtPmxpc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKHJ4X3N1Ym1pdCAoZGV2LCByZXEsIGdmcF9mbGFncykgPCAwKSB7Ci0JCQlkZWZlcl9rZXZlbnQgKGRldiwgV09SS19SWF9NRU1PUlkpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cmVxX2xvY2ssIGZsYWdzKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yZXFfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBldGhfd29yayAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGV0aF9kZXYsIHdvcmspOwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCAoV09SS19SWF9NRU1PUlksICZkZXYtPnRvZG8pKSB7Ci0JCWlmIChuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpCi0JCQlyeF9maWxsIChkZXYsIEdGUF9LRVJORUwpOwotCX0KLQotCWlmIChkZXYtPnRvZG8pCi0JCURFQlVHIChkZXYsICJ3b3JrIGRvbmUsIGZsYWdzID0gMHglbHhcbiIsIGRldi0+dG9kbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCi17Ci0Jc3RydWN0IHNrX2J1ZmYJKnNrYiA9IHJlcS0+Y29udGV4dDsKLQlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOwotCi0Jc3dpdGNoIChyZXEtPnN0YXR1cykgewotCWRlZmF1bHQ6Ci0JCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCVZERUJVRyAoZGV2LCAidHggZXJyICVkXG4iLCByZXEtPnN0YXR1cyk7Ci0JCS8qIEZBTExUSFJPVUdIICovCi0JY2FzZSAtRUNPTk5SRVNFVDoJCS8vIHVubGluawotCWNhc2UgLUVTSFVURE9XTjoJCS8vIGRpc2Nvbm5lY3QgZXRjCi0JCWJyZWFrOwotCWNhc2UgMDoKLQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQl9Ci0JZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0KLQlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOwotCWxpc3RfYWRkICgmcmVxLT5saXN0LCAmZGV2LT50eF9yZXFzKTsKLQlzcGluX3VubG9jaygmZGV2LT5yZXFfbG9jayk7Ci0JZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7Ci0KLQlhdG9taWNfZGVjICgmZGV2LT50eF9xbGVuKTsKLQlpZiAobmV0aWZfY2Fycmllcl9vayAoZGV2LT5uZXQpKQotCQluZXRpZl93YWtlX3F1ZXVlIChkZXYtPm5ldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGV0aF9pc19wcm9taXNjIChzdHJ1Y3QgZXRoX2RldiAqZGV2KQotewotCS8qIG5vIGZpbHRlcnMgZm9yIHRoZSBDREMgc3Vic2V0OyBhbHdheXMgcHJvbWlzYyAqLwotCWlmIChzdWJzZXRfYWN0aXZlIChkZXYpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gZGV2LT5jZGNfZmlsdGVyICYgVVNCX0NEQ19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUzsKLX0KLQotc3RhdGljIGludCBldGhfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKLXsKLQlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0JaW50CQkJbGVuZ3RoID0gc2tiLT5sZW47Ci0JaW50CQkJcmV0dmFsOwotCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQotCS8qIGFwcGx5IG91dGdvaW5nIENEQyBvciBSTkRJUyBmaWx0ZXJzICovCi0JaWYgKCFldGhfaXNfcHJvbWlzYyAoZGV2KSkgewotCQl1OAkJKmRlc3QgPSBza2ItPmRhdGE7Ci0KLQkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRlc3QpKSB7Ci0JCQl1MTYJdHlwZTsKLQotCQkJLyogaWdub3JlcyBVU0JfQ0RDX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCBhbmQgaG9zdAotCQkJICogU0VUX0VUSEVSTkVUX01VTFRJQ0FTVF9GSUxURVJTIHJlcXVlc3RzCi0JCQkgKi8KLQkJCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihkZXN0KSkKLQkJCQl0eXBlID0gVVNCX0NEQ19QQUNLRVRfVFlQRV9CUk9BRENBU1Q7Ci0JCQllbHNlCi0JCQkJdHlwZSA9IFVTQl9DRENfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKLQkJCWlmICghKGRldi0+Y2RjX2ZpbHRlciAmIHR5cGUpKSB7Ci0JCQkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KLQkJLyogaWdub3JlcyBVU0JfQ0RDX1BBQ0tFVF9UWVBFX0RJUkVDVEVEICovCi0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cmVxX2xvY2ssIGZsYWdzKTsKLQkvKgotCSAqIHRoaXMgZnJlZWxpc3QgY2FuIGJlIGVtcHR5IGlmIGFuIGludGVycnVwdCB0cmlnZ2VyZWQgZGlzY29ubmVjdCgpCi0JICogYW5kIHJlY29uZmlndXJlZCB0aGUgZ2FkZ2V0IChzaHV0dGluZyBkb3duIHRoaXMgcXVldWUpIGFmdGVyIHRoZQotCSAqIG5ldHdvcmsgc3RhY2sgZGVjaWRlZCB0byB4bWl0IGJ1dCBiZWZvcmUgd2UgZ290IHRoZSBzcGlubG9jay4KLQkgKi8KLQlpZiAobGlzdF9lbXB0eSgmZGV2LT50eF9yZXFzKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAxOwotCX0KLQotCXJlcSA9IGNvbnRhaW5lcl9vZiAoZGV2LT50eF9yZXFzLm5leHQsIHN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7Ci0JbGlzdF9kZWwgKCZyZXEtPmxpc3QpOwotCi0JLyogdGVtcG9yYXJpbHkgc3RvcCBUWCBxdWV1ZSB3aGVuIHRoZSBmcmVlbGlzdCBlbXB0aWVzICovCi0JaWYgKGxpc3RfZW1wdHkgKCZkZXYtPnR4X3JlcXMpKQotCQluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cmVxX2xvY2ssIGZsYWdzKTsKLQotCS8qIG5vIGJ1ZmZlciBjb3BpZXMgbmVlZGVkLCB1bmxlc3MgdGhlIG5ldHdvcmsgc3RhY2sgZGlkIGl0Ci0JICogb3IgdGhlIGhhcmR3YXJlIGNhbid0IHVzZSBza2IgYnVmZmVycy4KLQkgKiBvciB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFueSBSTkRJUyBoZWFkZXJzIHdlIG5lZWQKLQkgKi8KLQlpZiAocm5kaXNfYWN0aXZlKGRldikpIHsKLQkJc3RydWN0IHNrX2J1ZmYJKnNrYl9ybmRpczsKLQotCQlza2Jfcm5kaXMgPSBza2JfcmVhbGxvY19oZWFkcm9vbSAoc2tiLAotCQkJCXNpemVvZiAoc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZSkpOwotCQlpZiAoIXNrYl9ybmRpcykKLQkJCWdvdG8gZHJvcDsKLQotCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKLQkJc2tiID0gc2tiX3JuZGlzOwotCQlybmRpc19hZGRfaGRyIChza2IpOwotCQlsZW5ndGggPSBza2ItPmxlbjsKLQl9Ci0JcmVxLT5idWYgPSBza2ItPmRhdGE7Ci0JcmVxLT5jb250ZXh0ID0gc2tiOwotCXJlcS0+Y29tcGxldGUgPSB0eF9jb21wbGV0ZTsKLQotCS8qIHVzZSB6bHAgZnJhbWluZyBvbiB0eCBmb3Igc3RyaWN0IENEQy1FdGhlciBjb25mb3JtYW5jZSwKLQkgKiB0aG91Z2ggYW55IHJvYnVzdCBuZXR3b3JrIHJ4IHBhdGggaWdub3JlcyBleHRyYSBwYWRkaW5nLgotCSAqIGFuZCBzb21lIGhhcmR3YXJlIGRvZXNuJ3QgbGlrZSB0byB3cml0ZSB6bHBzLgotCSAqLwotCXJlcS0+emVybyA9IDE7Ci0JaWYgKCFkZXYtPnpscCAmJiAobGVuZ3RoICUgZGV2LT5pbl9lcC0+bWF4cGFja2V0KSA9PSAwKQotCQlsZW5ndGgrKzsKLQotCXJlcS0+bGVuZ3RoID0gbGVuZ3RoOwotCi0JLyogdGhyb3R0bGUgaGlnaHNwZWVkIElSUSByYXRlIGJhY2sgc2xpZ2h0bHkgKi8KLQlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChkZXYtPmdhZGdldCkpCi0JCXJlcS0+bm9faW50ZXJydXB0ID0gKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKLQkJCT8gKChhdG9taWNfcmVhZCgmZGV2LT50eF9xbGVuKSAlIHFtdWx0KSAhPSAwKQotCQkJOiAwOwotCi0JcmV0dmFsID0gdXNiX2VwX3F1ZXVlIChkZXYtPmluX2VwLCByZXEsIEdGUF9BVE9NSUMpOwotCXN3aXRjaCAocmV0dmFsKSB7Ci0JZGVmYXVsdDoKLQkJREVCVUcgKGRldiwgInR4IHF1ZXVlIGVyciAlZFxuIiwgcmV0dmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSAwOgotCQluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJYXRvbWljX2luYyAoJmRldi0+dHhfcWxlbik7Ci0JfQotCi0JaWYgKHJldHZhbCkgewotZHJvcDoKLQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCWRldl9rZnJlZV9za2JfYW55IChza2IpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yZXFfbG9jaywgZmxhZ3MpOwotCQlpZiAobGlzdF9lbXB0eSAoJmRldi0+dHhfcmVxcykpCi0JCQluZXRpZl9zdGFydF9xdWV1ZSAobmV0KTsKLQkJbGlzdF9hZGQgKCZyZXEtPmxpc3QsICZkZXYtPnR4X3JlcXMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKLQotLyogVGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIGluIFJORElTIHRvIG5vdGlmeSB0aGUgaG9zdCB3aGVuIG1lc3NhZ2VzCi0gKiBvdGhlciB0aGFuIGRhdGEgcGFja2V0cyBhcmUgYXZhaWxhYmxlIC4uLiBub3RhYmx5IHRoZSBSRU1PVEVfTkRJU18qX0NNUExUCi0gKiBtZXNzYWdlcywgYnV0IGFsc28gUkVNT1RFX05ESVNfSU5ESUNBVEVfU1RBVFVTX01TRyBhbmQgcG90ZW50aWFsbHkgZXZlbgotICogUkVNT1RFX05ESVNfS0VFUEFMSVZFX01TRy4KLSAqCi0gKiBUaGUgUk5ESVMgY29udHJvbCBxdWV1ZSBpcyBwcm9jZXNzZWQgYnkgR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRSwgYW5kCi0gKiBub3JtYWxseSBqdXN0IG9uZSBub3RpZmljYXRpb24gd2lsbCBiZSBxdWV1ZWQuCi0gKi8KLQotc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqZXRoX3JlcV9hbGxvYyAoc3RydWN0IHVzYl9lcCAqLCB1bnNpZ25lZCwgZ2ZwX3QpOwotc3RhdGljIHZvaWQgZXRoX3JlcV9mcmVlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOwotCi1zdGF0aWMgdm9pZAotcm5kaXNfY29udHJvbF9hY2tfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKLXsKLQlzdHJ1Y3QgZXRoX2RldiAgICAgICAgICAqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOwotCi0JaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQotCQlERUJVRyAoZGV2LAotCQkJInJuZGlzIGNvbnRyb2wgYWNrIGNvbXBsZXRlIC0tPiAlZCwgJWQvJWRcbiIsCi0JCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKLQlyZXEtPmNvbnRleHQgPSBOVUxMOwotCi0JaWYgKHJlcSAhPSBkZXYtPnN0YXRfcmVxKQotCQlldGhfcmVxX2ZyZWUoZXAsIHJlcSk7Ci19Ci0KLXN0YXRpYyBpbnQgcm5kaXNfY29udHJvbF9hY2sgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCi17Ci0Jc3RydWN0IGV0aF9kZXYgICAgICAgICAgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOwotCXN0cnVjdCB1c2JfcmVxdWVzdCAgICAgICpyZXNwID0gZGV2LT5zdGF0X3JlcTsKLQotCS8qIGluIGNhc2UgUk5ESVMgY2FsbHMgdGhpcyBhZnRlciBkaXNjb25uZWN0ICovCi0JaWYgKCFkZXYtPnN0YXR1cykgewotCQlERUJVRyAoZGV2LCAic3RhdHVzIEVOT0RFVlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qIGluIGNhc2UgcXVldWUgbGVuZ3RoID4gMSAqLwotCWlmIChyZXNwLT5jb250ZXh0KSB7Ci0JCXJlc3AgPSBldGhfcmVxX2FsbG9jIChkZXYtPnN0YXR1c19lcCwgOCwgR0ZQX0FUT01JQyk7Ci0JCWlmICghcmVzcCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIFNlbmQgUk5ESVMgUkVTUE9OU0VfQVZBSUxBQkxFIG5vdGlmaWNhdGlvbjsKLQkgKiBVU0JfQ0RDX05PVElGWV9SRVNQT05TRV9BVkFJTEFCTEUgc2hvdWxkIHdvcmsgdG9vCi0JICovCi0JcmVzcC0+bGVuZ3RoID0gODsKLQlyZXNwLT5jb21wbGV0ZSA9IHJuZGlzX2NvbnRyb2xfYWNrX2NvbXBsZXRlOwotCXJlc3AtPmNvbnRleHQgPSBkZXY7Ci0KLQkqKChfX2xlMzIgKikgcmVzcC0+YnVmKSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOwotCSooKF9fbGUzMiAqKSByZXNwLT5idWYgKyAxKSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCi0JbGVuZ3RoID0gdXNiX2VwX3F1ZXVlIChkZXYtPnN0YXR1c19lcCwgcmVzcCwgR0ZQX0FUT01JQyk7Ci0JaWYgKGxlbmd0aCA8IDApIHsKLQkJcmVzcC0+c3RhdHVzID0gMDsKLQkJcm5kaXNfY29udHJvbF9hY2tfY29tcGxldGUgKGRldi0+c3RhdHVzX2VwLCByZXNwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLQotI2RlZmluZQlybmRpc19jb250cm9sX2FjawlOVUxMCi0KLSNlbmRpZgkvKiBSTkRJUyAqLwotCi1zdGF0aWMgdm9pZCBldGhfc3RhcnQgKHN0cnVjdCBldGhfZGV2ICpkZXYsIGdmcF90IGdmcF9mbGFncykKLXsKLQlERUJVRyAoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qIGZpbGwgdGhlIHJ4IHF1ZXVlICovCi0JcnhfZmlsbCAoZGV2LCBnZnBfZmxhZ3MpOwotCi0JLyogYW5kIG9wZW4gdGhlIHR4IGZsb29kZ2F0ZXMgKi8KLQlhdG9taWNfc2V0ICgmZGV2LT50eF9xbGVuLCAwKTsKLQluZXRpZl93YWtlX3F1ZXVlIChkZXYtPm5ldCk7Ci0JaWYgKHJuZGlzX2FjdGl2ZShkZXYpKSB7Ci0JCXJuZGlzX3NldF9wYXJhbV9tZWRpdW0gKGRldi0+cm5kaXNfY29uZmlnLAotCQkJCQlORElTX01FRElVTV84MDJfMywKLQkJCQkJQklUUkFURShkZXYtPmdhZGdldCkvMTAwKTsKLQkJKHZvaWQpIHJuZGlzX3NpZ25hbF9jb25uZWN0IChkZXYtPnJuZGlzX2NvbmZpZyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGV0aF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQotewotCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKLQotCURFQlVHIChkZXYsICIlc1xuIiwgX19mdW5jX18pOwotCWlmIChuZXRpZl9jYXJyaWVyX29rIChkZXYtPm5ldCkpCi0JCWV0aF9zdGFydCAoZGV2LCBHRlBfS0VSTkVMKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBldGhfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKLXsKLQlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0KLQlWREVCVUcgKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JbmV0aWZfc3RvcF9xdWV1ZSAobmV0KTsKLQotCURFQlVHIChkZXYsICJzdG9wIHN0YXRzOiByeC90eCAlbGQvJWxkLCBlcnJzICVsZC8lbGRcbiIsCi0JCWRldi0+c3RhdHMucnhfcGFja2V0cywgZGV2LT5zdGF0cy50eF9wYWNrZXRzLAotCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycywgZGV2LT5zdGF0cy50eF9lcnJvcnMKLQkJKTsKLQotCS8qIGVuc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgcmVxdWVzdHMgKi8KLQlpZiAoZGV2LT5jb25maWcpIHsKLQkJdXNiX2VwX2Rpc2FibGUgKGRldi0+aW5fZXApOwotCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5vdXRfZXApOwotCQlpZiAobmV0aWZfY2Fycmllcl9vayAoZGV2LT5uZXQpKSB7Ci0JCQlERUJVRyAoZGV2LCAiaG9zdCBzdGlsbCB1c2luZyBpbi9vdXQgZW5kcG9pbnRzXG4iKTsKLQkJCS8vIEZJWE1FIGlkaW9tIG1heSBsZWF2ZSB0b2dnbGUgd3JvbmcgaGVyZQotCQkJdXNiX2VwX2VuYWJsZSAoZGV2LT5pbl9lcCwgZGV2LT5pbik7Ci0JCQl1c2JfZXBfZW5hYmxlIChkZXYtPm91dF9lcCwgZGV2LT5vdXQpOwotCQl9Ci0JCWlmIChkZXYtPnN0YXR1c19lcCkgewotCQkJdXNiX2VwX2Rpc2FibGUgKGRldi0+c3RhdHVzX2VwKTsKLQkJCXVzYl9lcF9lbmFibGUgKGRldi0+c3RhdHVzX2VwLCBkZXYtPnN0YXR1cyk7Ci0JCX0KLQl9Ci0KLQlpZiAocm5kaXNfYWN0aXZlKGRldikpIHsKLQkJcm5kaXNfc2V0X3BhcmFtX21lZGl1bShkZXYtPnJuZGlzX2NvbmZpZywgTkRJU19NRURJVU1fODAyXzMsIDApOwotCQkodm9pZCkgcm5kaXNfc2lnbmFsX2Rpc2Nvbm5lY3QgKGRldi0+cm5kaXNfY29uZmlnKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqCi1ldGhfcmVxX2FsbG9jIChzdHJ1Y3QgdXNiX2VwICplcCwgdW5zaWduZWQgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwotCi0JcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QgKGVwLCBnZnBfZmxhZ3MpOwotCWlmICghcmVxKQotCQlyZXR1cm4gTlVMTDsKLQotCXJlcS0+YnVmID0ga21hbGxvYyAoc2l6ZSwgZ2ZwX2ZsYWdzKTsKLQlpZiAoIXJlcS0+YnVmKSB7Ci0JCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGVwLCByZXEpOwotCQlyZXEgPSBOVUxMOwotCX0KLQlyZXR1cm4gcmVxOwotfQotCi1zdGF0aWMgdm9pZAotZXRoX3JlcV9mcmVlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCi17Ci0Ja2ZyZWUgKHJlcS0+YnVmKTsKLQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChlcCwgcmVxKTsKLX0KLQotCi1zdGF0aWMgdm9pZCAvKiBfX2luaXRfb3JfZXhpdCAqLwotZXRoX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKLXsKLQlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKLQotCURFQlVHIChkZXYsICJ1bmJpbmRcbiIpOwotCXJuZGlzX2RlcmVnaXN0ZXIgKGRldi0+cm5kaXNfY29uZmlnKTsKLQlybmRpc19leGl0ICgpOwotCi0JLyogd2UndmUgYWxyZWFkeSBiZWVuIGRpc2Nvbm5lY3RlZCAuLi4gbm8gaS9vIGlzIGFjdGl2ZSAqLwotCWlmIChkZXYtPnJlcSkgewotCQlldGhfcmVxX2ZyZWUgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7Ci0JCWRldi0+cmVxID0gTlVMTDsKLQl9Ci0JaWYgKGRldi0+c3RhdF9yZXEpIHsKLQkJZXRoX3JlcV9mcmVlIChkZXYtPnN0YXR1c19lcCwgZGV2LT5zdGF0X3JlcSk7Ci0JCWRldi0+c3RhdF9yZXEgPSBOVUxMOwotCX0KLQotCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYtPm5ldCk7Ci0JZnJlZV9uZXRkZXYoZGV2LT5uZXQpOwotCi0JLyogYXNzdW1pbmcgd2UgdXNlZCBrZXZlbnRkLCBpdCBtdXN0IHF1aWVzY2UgdG9vICovCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsgKCk7Ci0Jc2V0X2dhZGdldF9kYXRhIChnYWRnZXQsIE5VTEwpOwotfQotCi1zdGF0aWMgdTggX19pbml0IG5pYmJsZSAodW5zaWduZWQgY2hhciBjKQotewotCWlmIChsaWtlbHkgKGlzZGlnaXQgKGMpKSkKLQkJcmV0dXJuIGMgLSAnMCc7Ci0JYyA9IHRvdXBwZXIgKGMpOwotCWlmIChsaWtlbHkgKGlzeGRpZ2l0IChjKSkpCi0JCXJldHVybiAxMCArIGMgLSAnQSc7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGdldF9ldGhlcl9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdTggKmRldl9hZGRyKQotewotCWlmIChzdHIpIHsKLQkJdW5zaWduZWQJaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBjaGFyIG51bTsKLQotCQkJaWYoKCpzdHIgPT0gJy4nKSB8fCAoKnN0ciA9PSAnOicpKQotCQkJCXN0cisrOwotCQkJbnVtID0gbmliYmxlKCpzdHIrKykgPDwgNDsKLQkJCW51bSB8PSAobmliYmxlKCpzdHIrKykpOwotCQkJZGV2X2FkZHIgW2ldID0gbnVtOwotCQl9Ci0JCWlmIChpc192YWxpZF9ldGhlcl9hZGRyIChkZXZfYWRkcikpCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmFuZG9tX2V0aGVyX2FkZHIoZGV2X2FkZHIpOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdAotZXRoX2JpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCi17Ci0Jc3RydWN0IGV0aF9kZXYJCSpkZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKLQl1OAkJCWNkYyA9IDEsIHpscCA9IDEsIHJuZGlzID0gMTsKLQlzdHJ1Y3QgdXNiX2VwCQkqaW5fZXAsICpvdXRfZXAsICpzdGF0dXNfZXAgPSBOVUxMOwotCWludAkJCXN0YXR1cyA9IC1FTk9NRU07Ci0JaW50CQkJZ2NudW07Ci0KLQkvKiB0aGVzZSBmbGFncyBhcmUgb25seSBldmVyIGNsZWFyZWQ7IGNvbXBpbGVyIHRha2Ugbm90ZSAqLwotI2lmbmRlZglERVZfQ09ORklHX0NEQwotCWNkYyA9IDA7Ci0jZW5kaWYKLSNpZm5kZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKLQlybmRpcyA9IDA7Ci0jZW5kaWYKLQotCS8qIEJlY2F1c2UgbW9zdCBob3N0IHNpZGUgVVNCIHN0YWNrcyBoYW5kbGUgQ0RDIEV0aGVybmV0LCB0aGF0Ci0JICogc3RhbmRhcmQgcHJvdG9jb2wgaXMgX3N0cm9uZ2x5XyBwcmVmZXJyZWQgZm9yIGludGVyb3AgcHVycG9zZXMuCi0JICogKEJ5IGV2ZXJ5b25lIGV4Y2VwdCBNaWNyb3NvZnQuKQotCSAqLwotCWlmIChnYWRnZXRfaXNfcHhhIChnYWRnZXQpKSB7Ci0JCS8qIHB4YSBkb2Vzbid0IHN1cHBvcnQgYWx0c2V0dGluZ3MgKi8KLQkJY2RjID0gMDsKLQl9IGVsc2UgaWYgKGdhZGdldF9pc19tdXNiaGRyYyhnYWRnZXQpKSB7Ci0JCS8qIHJlZHVjZSB0eCBkbWEgb3ZlcmhlYWQgYnkgYXZvaWRpbmcgc3BlY2lhbCBjYXNlcyAqLwotCQl6bHAgPSAwOwotCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NoKGdhZGdldCkpIHsKLQkJLyogc2ggZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGludGVyZmFjZXMgb3IgY29uZmlncyAqLwotCQljZGMgPSAwOwotCQlybmRpcyA9IDA7Ci0JfSBlbHNlIGlmIChnYWRnZXRfaXNfc2ExMTAwIChnYWRnZXQpKSB7Ci0JCS8qIGhhcmR3YXJlIGNhbid0IHdyaXRlIHpscHMgKi8KLQkJemxwID0gMDsKLQkJLyogc2ExMTAwIENBTiBkbyBDREMsIHdpdGhvdXQgc3RhdHVzIGVuZHBvaW50IC4uLiB3ZSB1c2UKLQkJICogbm9uLUNEQyB0byBiZSBjb21wYXRpYmxlIHdpdGggQVJNIExpbnV4LTIuNCAidXNiLWV0aCIuCi0JCSAqLwotCQljZGMgPSAwOwotCX0KLQotCWdjbnVtID0gdXNiX2dhZGdldF9jb250cm9sbGVyX251bWJlciAoZ2FkZ2V0KTsKKwlnY251bSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZ2FkZ2V0KTsKIAlpZiAoZ2NudW0gPj0gMCkKLQkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYgKDB4MDIwMCArIGdjbnVtKTsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoMHgwMzAwIHwgZ2NudW0pOwogCWVsc2UgewotCQkvKiBjYW4ndCBhc3N1bWUgQ0RDIHdvcmtzLiAgZG9uJ3Qgd2FudCB0byBkZWZhdWx0IHRvCi0JCSAqIGFueXRoaW5nIGxlc3MgZnVuY3Rpb25hbCBvbiBDREMtY2FwYWJsZSBoYXJkd2FyZSwKLQkJICogc28gd2UgZmFpbCBpbiB0aGlzIGNhc2UuCisJCS8qIFdlIGFzc3VtZSB0aGF0IGNhbl9zdXBwb3J0X2VjbSgpIHRlbGxzIHRoZSB0cnV0aDsKKwkJICogYnV0IGlmIHRoZSBjb250cm9sbGVyIGlzbid0IHJlY29nbml6ZWQgYXQgYWxsIHRoZW4KKwkJICogdGhhdCBhc3N1bXB0aW9uIGlzIGEgYml0IG1vcmUgbGlrZWx5IHRvIGJlIHdyb25nLgogCQkgKi8KLQkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LAotCQkJImNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKLQkJCWdhZGdldC0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOworCQlXQVJOKGNkZXYsICJjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWQ7IHRyeWluZyAlc1xuIiwKKwkJCQlnYWRnZXQtPm5hbWUsCisJCQkJZXRoX2NvbmZpZ19kcml2ZXIubGFiZWwpOworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOwogCX0KLQlzbnByaW50ZiAobWFudWZhY3R1cmVyLCBzaXplb2YgbWFudWZhY3R1cmVyLCAiJXMgJXMvJXMiLAorCisKKwkvKiBBbGxvY2F0ZSBzdHJpbmcgZGVzY3JpcHRvciBudW1iZXJzIC4uLiBub3RlIHRoYXQgc3RyaW5nCisJICogY29udGVudHMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNvbXBvc2l0ZV9kZXYgZ2x1ZS4KKwkgKi8KKworCS8qIGRldmljZSBkZXNjcmlwdG9yIHN0cmluZ3M6IG1hbnVmYWN0dXJlciwgcHJvZHVjdCAqLworCXNucHJpbnRmKG1hbnVmYWN0dXJlciwgc2l6ZW9mIG1hbnVmYWN0dXJlciwgIiVzICVzIHdpdGggJXMiLAogCQlpbml0X3V0c25hbWUoKS0+c3lzbmFtZSwgaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCWdhZGdldC0+bmFtZSk7Ci0KLQkvKiBJZiB0aGVyZSdzIGFuIFJORElTIGNvbmZpZ3VyYXRpb24sIHRoYXQncyB3aGF0IFdpbmRvd3Mgd2FudHMgdG8KLQkgKiBiZSB1c2luZyAuLi4gc28gdXNlIHRoZXNlIHByb2R1Y3QgSURzIGhlcmUgYW5kIGluIHRoZSAibGludXguaW5mIgotCSAqIG5lZWRlZCB0byBpbnN0YWxsIE1TRlQgZHJpdmVycy4gIEN1cnJlbnQgTGludXgga2VybmVscyB3aWxsIHVzZQotCSAqIHRoZSBzZWNvbmQgY29uZmlndXJhdGlvbiBpZiBpdCdzIENEQyBFdGhlcm5ldCwgYW5kIG5lZWQgc29tZSBoZWxwCi0JICogdG8gY2hvb3NlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG90aGVyd2lzZS4KLQkgKi8KLQlpZiAocm5kaXMpIHsKLQkJZGV2aWNlX2Rlc2MuaWRWZW5kb3IgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihSTkRJU19WRU5ET1JfTlVNKTsKLQkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUk5ESVNfUFJPRFVDVF9OVU0pOwotCQlzbnByaW50ZiAocHJvZHVjdF9kZXNjLCBzaXplb2YgcHJvZHVjdF9kZXNjLAotCQkJIlJORElTLyVzIiwgZHJpdmVyX2Rlc2MpOwotCi0JLyogQ0RDIHN1YnNldCAuLi4gcmVjb2duaXplZCBieSBMaW51eCBzaW5jZSAyLjQuMTAsIGJ1dCBXaW5kb3dzCi0JICogZHJpdmVycyBhcmVuJ3Qgd2lkZWx5IGF2YWlsYWJsZS4gIChUaGF0IG1heSBiZSBpbXByb3ZlZCBieQotCSAqIHN1cHBvcnRpbmcgb25lIHN1Ym1vZGUgb2YgdGhlICJTQUZFIiB2YXJpYW50IG9mIE1ETE0uKQotCSAqLwotCX0gZWxzZSBpZiAoIWNkYykgewotCQlkZXZpY2VfZGVzYy5pZFZlbmRvciA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNJTVBMRV9WRU5ET1JfTlVNKTsKLQkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoU0lNUExFX1BST0RVQ1RfTlVNKTsKLQl9Ci0KLQkvKiBzdXBwb3J0IG9wdGlvbmFsIHZlbmRvci9kaXN0cm8gY3VzdG9taXphdGlvbiAqLwotCWlmIChpZFZlbmRvcikgewotCQlpZiAoIWlkUHJvZHVjdCkgewotCQkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LCAiaWRWZW5kb3IgbmVlZHMgaWRQcm9kdWN0IVxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCQlkZXZpY2VfZGVzYy5pZFZlbmRvciA9IGNwdV90b19sZTE2KGlkVmVuZG9yKTsKLQkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0gY3B1X3RvX2xlMTYoaWRQcm9kdWN0KTsKLQkJaWYgKGJjZERldmljZSkKLQkJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KGJjZERldmljZSk7Ci0JfQotCWlmIChpTWFudWZhY3R1cmVyKQotCQlzdHJsY3B5IChtYW51ZmFjdHVyZXIsIGlNYW51ZmFjdHVyZXIsIHNpemVvZiBtYW51ZmFjdHVyZXIpOwotCWlmIChpUHJvZHVjdCkKLQkJc3RybGNweSAocHJvZHVjdF9kZXNjLCBpUHJvZHVjdCwgc2l6ZW9mIHByb2R1Y3RfZGVzYyk7Ci0JaWYgKGlTZXJpYWxOdW1iZXIpIHsKLQkJZGV2aWNlX2Rlc2MuaVNlcmlhbE51bWJlciA9IFNUUklOR19TRVJJQUxOVU1CRVIsCi0JCXN0cmxjcHkoc2VyaWFsX251bWJlciwgaVNlcmlhbE51bWJlciwgc2l6ZW9mIHNlcmlhbF9udW1iZXIpOwotCX0KLQotCS8qIGFsbCB3ZSByZWFsbHkgbmVlZCBpcyBidWxrIElOL09VVCAqLwotCXVzYl9lcF9hdXRvY29uZmlnX3Jlc2V0IChnYWRnZXQpOwotCWluX2VwID0gdXNiX2VwX2F1dG9jb25maWcgKGdhZGdldCwgJmZzX3NvdXJjZV9kZXNjKTsKLQlpZiAoIWluX2VwKSB7Ci1hdXRvY29uZl9mYWlsOgotCQlkZXZfZXJyICgmZ2FkZ2V0LT5kZXYsCi0JCQkiY2FuJ3QgYXV0b2NvbmZpZ3VyZSBvbiAlc1xuIiwKLQkJCWdhZGdldC0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlpbl9lcC0+ZHJpdmVyX2RhdGEgPSBpbl9lcDsJLyogY2xhaW0gKi8KLQotCW91dF9lcCA9IHVzYl9lcF9hdXRvY29uZmlnIChnYWRnZXQsICZmc19zaW5rX2Rlc2MpOwotCWlmICghb3V0X2VwKQotCQlnb3RvIGF1dG9jb25mX2ZhaWw7Ci0Jb3V0X2VwLT5kcml2ZXJfZGF0YSA9IG91dF9lcDsJLyogY2xhaW0gKi8KLQotI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCi0JLyogQ0RDIEV0aGVybmV0IGNvbnRyb2wgaW50ZXJmYWNlIGRvZXNuJ3QgcmVxdWlyZSBhIHN0YXR1cyBlbmRwb2ludC4KLQkgKiBTaW5jZSBzb21lIGhvc3RzIGV4cGVjdCBvbmUsIHRyeSB0byBhbGxvY2F0ZSBvbmUgYW55d2F5LgotCSAqLwotCWlmIChjZGMgfHwgcm5kaXMpIHsKLQkJc3RhdHVzX2VwID0gdXNiX2VwX2F1dG9jb25maWcgKGdhZGdldCwgJmZzX3N0YXR1c19kZXNjKTsKLQkJaWYgKHN0YXR1c19lcCkgewotCQkJc3RhdHVzX2VwLT5kcml2ZXJfZGF0YSA9IHN0YXR1c19lcDsJLyogY2xhaW0gKi8KLQkJfSBlbHNlIGlmIChybmRpcykgewotCQkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LAotCQkJCSJjYW4ndCBydW4gUk5ESVMgb24gJXNcbiIsCi0JCQkJZ2FkZ2V0LT5uYW1lKTsKLQkJCXJldHVybiAtRU5PREVWOwotI2lmZGVmIERFVl9DT05GSUdfQ0RDCi0JCS8qIHB4YTI1eCBvbmx5IGRvZXMgQ0RDIHN1YnNldDsgb2Z0ZW4gdXNlZCB3aXRoIFJORElTICovCi0JCX0gZWxzZSBpZiAoY2RjKSB7Ci0JCQljb250cm9sX2ludGYuYk51bUVuZHBvaW50cyA9IDA7Ci0JCQkvKiBGSVhNRSByZW1vdmUgZW5kcG9pbnQgZnJvbSBkZXNjcmlwdG9yIGxpc3QgKi8KLSNlbmRpZgotCQl9Ci0JfQotI2VuZGlmCi0KLQkvKiBvbmUgY29uZmlnOiAgY2RjLCBlbHNlIG1pbmltYWwgc3Vic2V0ICovCi0JaWYgKCFjZGMpIHsKLQkJZXRoX2NvbmZpZy5iTnVtSW50ZXJmYWNlcyA9IDE7Ci0JCWV0aF9jb25maWcuaUNvbmZpZ3VyYXRpb24gPSBTVFJJTkdfU1VCU0VUOwotCi0JCS8qIHVzZSBmdW5jdGlvbnMgdG8gc2V0IHRoZXNlIHVwLCBpbiBjYXNlIHdlJ3JlIGJ1aWx0IHRvIHdvcmsKLQkJICogd2l0aCBtdWx0aXBsZSBjb250cm9sbGVycyBhbmQgbXVzdCBvdmVycmlkZSBDREMgRXRoZXJuZXQuCi0JCSAqLwotCQlmc19zdWJzZXRfZGVzY3JpcHRvcnMoKTsKLQkJaHNfc3Vic2V0X2Rlc2NyaXB0b3JzKCk7Ci0JfQotCi0JZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwID0gZ2FkZ2V0LT5lcDAtPm1heHBhY2tldDsKLQl1c2JfZ2FkZ2V0X3NldF9zZWxmcG93ZXJlZCAoZ2FkZ2V0KTsKLQotCS8qIEZvciBub3cgUk5ESVMgaXMgYWx3YXlzIGEgc2Vjb25kIGNvbmZpZyAqLwotCWlmIChybmRpcykKLQkJZGV2aWNlX2Rlc2MuYk51bUNvbmZpZ3VyYXRpb25zID0gMjsKLQotCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGdhZGdldCkpIHsKLQkJaWYgKHJuZGlzKQotCQkJZGV2X3F1YWxpZmllci5iTnVtQ29uZmlndXJhdGlvbnMgPSAyOwotCQllbHNlIGlmICghY2RjKQotCQkJZGV2X3F1YWxpZmllci5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUM7Ci0KLQkJLyogYXNzdW1lcyBlcDAgdXNlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgYm90aCBzcGVlZHMgLi4uICovCi0JCWRldl9xdWFsaWZpZXIuYk1heFBhY2tldFNpemUwID0gZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwOwotCi0JCS8qIGFuZCB0aGF0IGFsbCBlbmRwb2ludHMgYXJlIGR1YWwtc3BlZWQgKi8KLQkJaHNfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQkJZnNfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKLQkJaHNfc2lua19kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQotCQkJCWZzX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCi0JCWlmIChzdGF0dXNfZXApCi0JCQloc19zdGF0dXNfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQkJZnNfc3RhdHVzX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKLSNlbmRpZgotCX0KLQotCWlmIChnYWRnZXRfaXNfb3RnKGdhZGdldCkpIHsKLQkJb3RnX2Rlc2NyaXB0b3IuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAotCQlldGhfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7Ci0JCWV0aF9jb25maWcuYk1heFBvd2VyID0gNDsKLSNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUwotCQlybmRpc19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKLQkJcm5kaXNfY29uZmlnLmJNYXhQb3dlciA9IDQ7Ci0jZW5kaWYKLQl9Ci0KLQluZXQgPSBhbGxvY19ldGhlcmRldiAoc2l6ZW9mICpkZXYpOwotCWlmICghbmV0KQotCQlyZXR1cm4gc3RhdHVzOwotCWRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0Jc3Bpbl9sb2NrX2luaXQgKCZkZXYtPmxvY2spOwotCXNwaW5fbG9ja19pbml0ICgmZGV2LT5yZXFfbG9jayk7Ci0JSU5JVF9XT1JLICgmZGV2LT53b3JrLCBldGhfd29yayk7Ci0JSU5JVF9MSVNUX0hFQUQgKCZkZXYtPnR4X3JlcXMpOwotCUlOSVRfTElTVF9IRUFEICgmZGV2LT5yeF9yZXFzKTsKLQotCS8qIG5ldHdvcmsgZGV2aWNlIHNldHVwICovCi0JZGV2LT5uZXQgPSBuZXQ7Ci0Jc3RyY3B5IChuZXQtPm5hbWUsICJ1c2IlZCIpOwotCWRldi0+Y2RjID0gY2RjOwotCWRldi0+emxwID0gemxwOwotCi0JZGV2LT5pbl9lcCA9IGluX2VwOwotCWRldi0+b3V0X2VwID0gb3V0X2VwOwotCWRldi0+c3RhdHVzX2VwID0gc3RhdHVzX2VwOwotCi0JLyogTW9kdWxlIHBhcmFtcyBmb3IgdGhlc2UgYWRkcmVzc2VzIHNob3VsZCBjb21lIGZyb20gSUQgcHJvbXMuCi0JICogVGhlIGhvc3Qgc2lkZSBhZGRyZXNzIGlzIHVzZWQgd2l0aCBDREMgYW5kIFJORElTLCBhbmQgY29tbW9ubHkKLQkgKiBlbmRzIHVwIGluIGEgcGVyc2lzdGVudCBjb25maWcgZGF0YWJhc2UuICBJdCdzIG5vdCBjbGVhciBpZgotCSAqIGhvc3Qgc2lkZSBjb2RlIGZvciB0aGUgU0FGRSB0aGluZyBjYXJlcyAtLSBpdHMgb3JpZ2luYWwgQkxBTgotCSAqIHRoaW5nIGRpZG4ndCwgU2hhcnAgbmV2ZXIgYXNzaWduZWQgdGhvc2UgYWRkcmVzc2VzIG9uIFphdXJpaS4KLQkgKi8KLQlpZiAoZ2V0X2V0aGVyX2FkZHIoZGV2X2FkZHIsIG5ldC0+ZGV2X2FkZHIpKQotCQlkZXZfd2FybigmZ2FkZ2V0LT5kZXYsCi0JCQkidXNpbmcgcmFuZG9tICVzIGV0aGVybmV0IGFkZHJlc3NcbiIsICJzZWxmIik7Ci0JaWYgKGdldF9ldGhlcl9hZGRyKGhvc3RfYWRkciwgZGV2LT5ob3N0X21hYykpCi0JCWRldl93YXJuKCZnYWRnZXQtPmRldiwKLQkJCSJ1c2luZyByYW5kb20gJXMgZXRoZXJuZXQgYWRkcmVzc1xuIiwgImhvc3QiKTsKLQlzbnByaW50ZiAoZXRoYWRkciwgc2l6ZW9mIGV0aGFkZHIsICIlMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgiLAotCQlkZXYtPmhvc3RfbWFjIFswXSwgZGV2LT5ob3N0X21hYyBbMV0sCi0JCWRldi0+aG9zdF9tYWMgWzJdLCBkZXYtPmhvc3RfbWFjIFszXSwKLQkJZGV2LT5ob3N0X21hYyBbNF0sIGRldi0+aG9zdF9tYWMgWzVdKTsKLQotCWlmIChybmRpcykgewotCQlzdGF0dXMgPSBybmRpc19pbml0KCk7Ci0JCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQlkZXZfZXJyICgmZ2FkZ2V0LT5kZXYsICJjYW4ndCBpbml0IFJORElTLCAlZFxuIiwKLQkJCQlzdGF0dXMpOwotCQkJZ290byBmYWlsOwotCQl9Ci0JfQotCi0JbmV0LT5jaGFuZ2VfbXR1ID0gZXRoX2NoYW5nZV9tdHU7Ci0JbmV0LT5nZXRfc3RhdHMgPSBldGhfZ2V0X3N0YXRzOwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0gZXRoX3N0YXJ0X3htaXQ7Ci0JbmV0LT5vcGVuID0gZXRoX29wZW47Ci0JbmV0LT5zdG9wID0gZXRoX3N0b3A7Ci0JLy8gd2F0Y2hkb2dfdGltZW8sIHR4X3RpbWVvdXQgLi4uCi0JLy8gc2V0X211bHRpY2FzdF9saXN0Ci0JU0VUX0VUSFRPT0xfT1BTKG5ldCwgJm9wcyk7Ci0KLQkvKiBwcmVhbGxvY2F0ZSBjb250cm9sIG1lc3NhZ2UgZGF0YSBhbmQgYnVmZmVyICovCi0JZGV2LT5yZXEgPSBldGhfcmVxX2FsbG9jIChnYWRnZXQtPmVwMCwgVVNCX0JVRlNJWiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPnJlcSkKLQkJZ290byBmYWlsOwotCWRldi0+cmVxLT5jb21wbGV0ZSA9IGV0aF9zZXR1cF9jb21wbGV0ZTsKLQotCS8qIC4uLiBhbmQgbWF5YmUgbGlrZXdpc2UgZm9yIHN0YXR1cyB0cmFuc2ZlciAqLwotI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCi0JaWYgKGRldi0+c3RhdHVzX2VwKSB7Ci0JCWRldi0+c3RhdF9yZXEgPSBldGhfcmVxX2FsbG9jIChkZXYtPnN0YXR1c19lcCwKLQkJCQkJU1RBVFVTX0JZVEVDT1VOVCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZGV2LT5zdGF0X3JlcSkgewotCQkJZXRoX3JlcV9mcmVlIChnYWRnZXQtPmVwMCwgZGV2LT5yZXEpOwotCQkJZ290byBmYWlsOwotCQl9Ci0JCWRldi0+c3RhdF9yZXEtPmNvbnRleHQgPSBOVUxMOwotCX0KLSNlbmRpZgotCi0JLyogZmluaXNoIGhvb2t1cCB0byBsb3dlciBsYXllciAuLi4gKi8KLQlkZXYtPmdhZGdldCA9IGdhZGdldDsKLQlzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgZGV2KTsKLQlnYWRnZXQtPmVwMC0+ZHJpdmVyX2RhdGEgPSBkZXY7Ci0KLQkvKiB0d28ga2luZHMgb2YgaG9zdC1pbml0aWF0ZWQgc3RhdGUgY2hhbmdlczoKLQkgKiAgLSBpZmYgREFUQSB0cmFuc2ZlciBpcyBhY3RpdmUsIGNhcnJpZXIgaXMgIm9uIgotCSAqICAtIHR4IHF1ZXVlaW5nIGVuYWJsZWQgaWYgb3BlbiAqYW5kKiBjYXJyaWVyIGlzICJvbiIKLQkgKi8KLQluZXRpZl9zdG9wX3F1ZXVlIChkZXYtPm5ldCk7Ci0JbmV0aWZfY2Fycmllcl9vZmYgKGRldi0+bmV0KTsKLQotCVNFVF9ORVRERVZfREVWIChkZXYtPm5ldCwgJmdhZGdldC0+ZGV2KTsKLQlzdGF0dXMgPSByZWdpc3Rlcl9uZXRkZXYgKGRldi0+bmV0KTsKKwlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOwogCWlmIChzdGF0dXMgPCAwKQotCQlnb3RvIGZhaWwxOworCQlnb3RvIGZhaWw7CisJc3RyaW5nc19kZXZbU1RSSU5HX01BTlVGQUNUVVJFUl9JRFhdLmlkID0gc3RhdHVzOworCWRldmljZV9kZXNjLmlNYW51ZmFjdHVyZXIgPSBzdGF0dXM7CiAKLQlJTkZPIChkZXYsICIlcywgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBkcml2ZXJfZGVzYyk7Ci0JSU5GTyAoZGV2LCAidXNpbmcgJXMsIE9VVCAlcyBJTiAlcyVzJXNcbiIsIGdhZGdldC0+bmFtZSwKLQkJb3V0X2VwLT5uYW1lLCBpbl9lcC0+bmFtZSwKLQkJc3RhdHVzX2VwID8gIiBTVEFUVVMgIiA6ICIiLAotCQlzdGF0dXNfZXAgPyBzdGF0dXNfZXAtPm5hbWUgOiAiIgotCQkpOwotCUlORk8gKGRldiwgIk1BQyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJbmV0LT5kZXZfYWRkciBbMF0sIG5ldC0+ZGV2X2FkZHIgWzFdLAotCQluZXQtPmRldl9hZGRyIFsyXSwgbmV0LT5kZXZfYWRkciBbM10sCi0JCW5ldC0+ZGV2X2FkZHIgWzRdLCBuZXQtPmRldl9hZGRyIFs1XSk7CisJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCXN0cmluZ3NfZGV2W1NUUklOR19QUk9EVUNUX0lEWF0uaWQgPSBzdGF0dXM7CisJZGV2aWNlX2Rlc2MuaVByb2R1Y3QgPSBzdGF0dXM7CiAKLQlpZiAoY2RjIHx8IHJuZGlzKQotCQlJTkZPIChkZXYsICJIT1NUIE1BQyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCWRldi0+aG9zdF9tYWMgWzBdLCBkZXYtPmhvc3RfbWFjIFsxXSwKLQkJCWRldi0+aG9zdF9tYWMgWzJdLCBkZXYtPmhvc3RfbWFjIFszXSwKLQkJCWRldi0+aG9zdF9tYWMgWzRdLCBkZXYtPmhvc3RfbWFjIFs1XSk7Ci0KLQlpZiAocm5kaXMpIHsKLQkJdTMyCXZlbmRvcklEID0gMDsKLQotCQkvKiBGSVhNRSBSTkRJUyB2ZW5kb3IgaWQgPT0gInZlbmRvciBOSUMgY29kZSIgPT0gPyAqLwotCi0JCWRldi0+cm5kaXNfY29uZmlnID0gcm5kaXNfcmVnaXN0ZXIgKHJuZGlzX2NvbnRyb2xfYWNrKTsKLQkJaWYgKGRldi0+cm5kaXNfY29uZmlnIDwgMCkgewotZmFpbDA6Ci0JCQl1bnJlZ2lzdGVyX25ldGRldiAoZGV2LT5uZXQpOwotCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkvKiByZWdpc3RlciBvdXIgY29uZmlndXJhdGlvbihzKTsgUk5ESVMgZmlyc3QsIGlmIGl0J3MgdXNlZCAqLworCWlmIChoYXNfcm5kaXMoKSkgeworCQlzdGF0dXMgPSB1c2JfYWRkX2NvbmZpZyhjZGV2LCAmcm5kaXNfY29uZmlnX2RyaXZlcik7CisJCWlmIChzdGF0dXMgPCAwKQogCQkJZ290byBmYWlsOwotCQl9Ci0KLQkJLyogdGhlc2Ugc2V0IHVwIGEgbG90IG9mIHRoZSBPSURzIHRoYXQgUk5ESVMgbmVlZHMgKi8KLQkJcm5kaXNfc2V0X2hvc3RfbWFjIChkZXYtPnJuZGlzX2NvbmZpZywgZGV2LT5ob3N0X21hYyk7Ci0JCWlmIChybmRpc19zZXRfcGFyYW1fZGV2IChkZXYtPnJuZGlzX2NvbmZpZywgZGV2LT5uZXQsCi0JCQkJCSAmZGV2LT5zdGF0cywgJmRldi0+Y2RjX2ZpbHRlcikpCi0JCQlnb3RvIGZhaWwwOwotCQlpZiAocm5kaXNfc2V0X3BhcmFtX3ZlbmRvcihkZXYtPnJuZGlzX2NvbmZpZywgdmVuZG9ySUQsCi0JCQkJCW1hbnVmYWN0dXJlcikpCi0JCQlnb3RvIGZhaWwwOwotCQlpZiAocm5kaXNfc2V0X3BhcmFtX21lZGl1bShkZXYtPnJuZGlzX2NvbmZpZywKLQkJCQkJTkRJU19NRURJVU1fODAyXzMsIDApKQotCQkJZ290byBmYWlsMDsKLQkJSU5GTyAoZGV2LCAiUk5ESVMgcmVhZHlcbiIpOwogCX0KIAotCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gdXNiX2FkZF9jb25maWcoY2RldiwgJmV0aF9jb25maWdfZHJpdmVyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOwogCi1mYWlsMToKLQlkZXZfZGJnKCZnYWRnZXQtPmRldiwgInJlZ2lzdGVyX25ldGRldiBmYWlsZWQsICVkXG4iLCBzdGF0dXMpOworCUlORk8oY2RldiwgIiVzLCB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OICJcbiIsIERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOworCiBmYWlsOgotCWV0aF91bmJpbmQgKGdhZGdldCk7CisJZ2V0aGVyX2NsZWFudXAoKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZAotZXRoX3N1c3BlbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCitzdGF0aWMgaW50IF9fZXhpdCBldGhfdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKLQlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKLQotCURFQlVHIChkZXYsICJzdXNwZW5kXG4iKTsKLQlkZXYtPnN1c3BlbmRlZCA9IDE7CisJZ2V0aGVyX2NsZWFudXAoKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLWV0aF9yZXN1bWUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCi17Ci0Jc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7Ci0KLQlERUJVRyAoZGV2LCAicmVzdW1lXG4iKTsKLQlkZXYtPnN1c3BlbmRlZCA9IDA7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZXRoX2RyaXZlciA9IHsKLQkuc3BlZWQJCT0gREVWU1BFRUQsCi0KLQkuZnVuY3Rpb24JPSAoY2hhciAqKSBkcml2ZXJfZGVzYywKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgZXRoX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiZ19ldGhlciIsCisJLmRldgkJPSAmZGV2aWNlX2Rlc2MsCisJLnN0cmluZ3MJPSBkZXZfc3RyaW5ncywKIAkuYmluZAkJPSBldGhfYmluZCwKLQkudW5iaW5kCQk9IGV0aF91bmJpbmQsCi0KLQkuc2V0dXAJCT0gZXRoX3NldHVwLAotCS5kaXNjb25uZWN0CT0gZXRoX2Rpc2Nvbm5lY3QsCi0KLQkuc3VzcGVuZAk9IGV0aF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gZXRoX3Jlc3VtZSwKLQotCS5kcml2ZXIJPSB7Ci0JCS5uYW1lCQk9IChjaGFyICopIHNob3J0bmFtZSwKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCX0sCisJLnVuYmluZAkJPSBfX2V4aXRfcChldGhfdW5iaW5kKSwKIH07CiAKLU1PRFVMRV9ERVNDUklQVElPTiAoRFJJVkVSX0RFU0MpOwotTU9EVUxFX0FVVEhPUiAoIkRhdmlkIEJyb3duZWxsLCBCZW5lZGlrdCBTcGFuZ2VyIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKFBSRUZJWCBEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBCcm93bmVsbCwgQmVuZWRpa3QgU3BhbmdlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0KLXN0YXRpYyBpbnQgX19pbml0IGluaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyICgmZXRoX2RyaXZlcik7CisJcmV0dXJuIHVzYl9jb21wb3NpdGVfcmVnaXN0ZXIoJmV0aF9kcml2ZXIpOwogfQotbW9kdWxlX2luaXQgKGluaXQpOworbW9kdWxlX2luaXQoaW5pdCk7CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXAodm9pZCkKIHsKLQl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyICgmZXRoX2RyaXZlcik7CisJdXNiX2NvbXBvc2l0ZV91bnJlZ2lzdGVyKCZldGhfZHJpdmVyKTsKIH0KLW1vZHVsZV9leGl0IChjbGVhbnVwKTsKLQorbW9kdWxlX2V4aXQoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZmFjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYwpAQCAtMCwwICsxLDU4OSBAQAorLyoKKyAqIGZfYWNtLmMgLS0gVVNCIENEQyBzZXJpYWwgKEFDTSkgZnVuY3Rpb24gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIEFsIEJvcmNoZXJzIChhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgInVfc2VyaWFsLmgiCisjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCisKKworLyoKKyAqIFRoaXMgQ0RDIEFDTSBmdW5jdGlvbiBzdXBwb3J0IGp1c3Qgd3JhcHMgY29udHJvbCBmdW5jdGlvbnMgYW5kCisgKiBub3RpZmljYXRpb25zIGFyb3VuZCB0aGUgZ2VuZXJpYyBzZXJpYWwtb3Zlci11c2IgY29kZS4KKyAqCisgKiBCZWNhdXNlIENEQyBBQ00gaXMgc3RhbmRhcmRpemVkIGJ5IHRoZSBVU0ItSUYsIG1hbnkgaG9zdCBvcGVyYXRpbmcKKyAqIHN5c3RlbXMgaGF2ZSBkcml2ZXJzIGZvciBpdC4gIEFjY29yZGluZ2x5LCBBQ00gaXMgdGhlIHByZWZlcnJlZAorICogaW50ZXJvcCBzb2x1dGlvbiBmb3Igc2VyaWFsLXBvcnQgdHlwZSBjb25uZWN0aW9ucy4gIFRoZSBjb250cm9sCisgKiBtb2RlbHMgYXJlIG9mdGVuIG5vdCBuZWNlc3NhcnksIGFuZCBpbiBhbnkgY2FzZSBkb24ndCBkbyBtdWNoIGluCisgKiB0aGlzIGJhcmUtYm9uZXMgaW1wbGVtZW50YXRpb24uCisgKgorICogTm90ZSB0aGF0IGV2ZW4gTVMtV2luZG93cyBoYXMgc29tZSBzdXBwb3J0IGZvciBBQ00uICBIb3dldmVyLCB0aGF0CisgKiBzdXBwb3J0IGlzIHNvbWV3aGF0IGJyb2tlbiBiZWNhdXNlIHdoZW4geW91IHVzZSBBQ00gaW4gYSBjb21wb3NpdGUKKyAqIGRldmljZSwgaGF2aW5nIG11bHRpcGxlIGludGVyZmFjZXMgY29uZnVzZXMgdGhlIHBvb3IgT1MuICBJdCBkb2Vzbid0CisgKiBzZWVtIHRvIHVuZGVyc3RhbmQgQ0RDIFVuaW9uIGRlc2NyaXB0b3JzLiAgVGhlIG5ldyAiYXNzb2NpYXRpb24iCisgKiBkZXNjcmlwdG9ycyAocm91Z2hseSBlcXVpdmFsZW50IHRvIENEQyBVbmlvbnMpIG1heSBzb21ldGltZXMgaGVscC4KKyAqLworCitzdHJ1Y3QgYWNtX2VwX2Rlc2NzIHsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmluOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqb3V0OworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqbm90aWZ5OworfTsKKworc3RydWN0IGZfYWNtIHsKKwlzdHJ1Y3QgZ3NlcmlhbAkJCXBvcnQ7CisJdTgJCQkJY3RybF9pZCwgZGF0YV9pZDsKKwl1OAkJCQlwb3J0X251bTsKKworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIJKipmc19mdW5jdGlvbjsKKwlzdHJ1Y3QgYWNtX2VwX2Rlc2NzCQlmczsKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyCSoqaHNfZnVuY3Rpb247CisJc3RydWN0IGFjbV9lcF9kZXNjcwkJaHM7CisKKwlzdHJ1Y3QgdXNiX2VwCQkJKm5vdGlmeTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm5vdGlmeV9kZXNjOworCisJc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcJcG9ydF9saW5lX2NvZGluZzsJLyogOC1OLTEgZXRjICovCisJdTE2CQkJCXBvcnRfaGFuZHNoYWtlX2JpdHM7CisjZGVmaW5lIFJTMjMyX1JUUwkoMSA8PCAxKQkvKiB1bnVzZWQgd2l0aCBmdWxsIGR1cGxleCAqLworI2RlZmluZSBSUzIzMl9EVFIJKDEgPDwgMCkJLyogaG9zdCBpcyByZWFkeSBmb3IgZGF0YSByL3cgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZfYWNtICpmdW5jX3RvX2FjbShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXJldHVybiBjb250YWluZXJfb2YoZiwgc3RydWN0IGZfYWNtLCBwb3J0LmZ1bmMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBub3RpZmljYXRpb24gZW5kcG9pbnQgdXNlcyBzbWFsbGlzaCBhbmQgaW5mcmVxdWVudCBmaXhlZC1zaXplIG1lc3NhZ2VzICovCisKKyNkZWZpbmUgR1NfTE9HMl9OT1RJRllfSU5URVJWQUwJCTUJLyogMSA8PCA1ID09IDMyIG1zZWMgKi8KKyNkZWZpbmUgR1NfTk9USUZZX01BWFBBQ0tFVAkJOAorCisvKiBpbnRlcmZhY2UgYW5kIGNsYXNzIGRlc2NyaXB0b3JzOiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBhY21fY29udHJvbF9pbnRlcmZhY2VfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKwkvKiAuYkludGVyZmFjZU51bWJlciA9IERZTkFNSUMgKi8KKwkuYk51bUVuZHBvaW50cyA9CTEsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DT01NLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQlVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKKwkuYkludGVyZmFjZVByb3RvY29sID0JVVNCX0NEQ19BQ01fUFJPVE9fQVRfVjI1VEVSLAorCS8qIC5pSW50ZXJmYWNlID0gRFlOQU1JQyAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgYWNtX2RhdGFfaW50ZXJmYWNlX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfSU5URVJGQUNFX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisJLyogLmJJbnRlcmZhY2VOdW1iZXIgPSBEWU5BTUlDICovCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ0RDX0RBVEEsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCisJLyogLmlJbnRlcmZhY2UgPSBEWU5BTUlDICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgYWNtX2hlYWRlcl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKGFjbV9oZWFkZXJfZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCisJLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IKK2FjbV9jYWxsX21nbXRfZGVzY3JpcHRvciBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZihhY21fY2FsbF9tZ210X2Rlc2NyaXB0b3IpLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0NBTExfTUFOQUdFTUVOVF9UWVBFLAorCS5ibUNhcGFiaWxpdGllcyA9CTAsCisJLyogLmJEYXRhSW50ZXJmYWNlID0gRFlOQU1JQyAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2FjbV9kZXNjcmlwdG9yIGFjbV9kZXNjcmlwdG9yIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKGFjbV9kZXNjcmlwdG9yKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19BQ01fVFlQRSwKKwkuYm1DYXBhYmlsaXRpZXMgPQkoMSA8PCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIGFjbV91bmlvbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKGFjbV91bmlvbl9kZXNjKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19VTklPTl9UWVBFLAorCS8qIC5iTWFzdGVySW50ZXJmYWNlMCA9CURZTkFNSUMgKi8KKwkvKiAuYlNsYXZlSW50ZXJmYWNlMCA9CURZTkFNSUMgKi8KK307CisKKy8qIGZ1bGwgc3BlZWQgc3VwcG9ydDogKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBhY21fZnNfbm90aWZ5X2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAorCS5iSW50ZXJ2YWwgPQkJMSA8PCBHU19MT0cyX05PVElGWV9JTlRFUlZBTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgYWNtX2ZzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGFjbV9mc19vdXRfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqYWNtX2ZzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmYWNtX2NvbnRyb2xfaW50ZXJmYWNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9oZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmYWNtX2NhbGxfbWdtdF9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZhY21fZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmYWNtX3VuaW9uX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9mc19ub3RpZnlfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmYWNtX2RhdGFfaW50ZXJmYWNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9mc19pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZhY21fZnNfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIGhpZ2ggc3BlZWQgc3VwcG9ydDogKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBhY21faHNfbm90aWZ5X2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAorCS5iSW50ZXJ2YWwgPQkJR1NfTE9HMl9OT1RJRllfSU5URVJWQUwrNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgYWNtX2hzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGFjbV9oc19vdXRfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICphY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZhY21fY29udHJvbF9pbnRlcmZhY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmYWNtX2hlYWRlcl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZhY21fY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZhY21fdW5pb25fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmYWNtX2hzX25vdGlmeV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZhY21fZGF0YV9pbnRlcmZhY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmYWNtX2hzX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9oc19vdXRfZGVzYywKKwlOVUxMLAorfTsKKworLyogc3RyaW5nIGRlc2NyaXB0b3JzOiAqLworCisjZGVmaW5lIEFDTV9DVFJMX0lEWAkwCisjZGVmaW5lIEFDTV9EQVRBX0lEWAkxCisKKy8qIHN0YXRpYyBzdHJpbmdzLCBpbiBVVEYtOCAqLworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nIGFjbV9zdHJpbmdfZGVmc1tdID0geworCVtBQ01fQ1RSTF9JRFhdLnMgPSAiQ0RDIEFic3RyYWN0IENvbnRyb2wgTW9kZWwgKEFDTSkiLAorCVtBQ01fREFUQV9JRFhdLnMgPSAiQ0RDIEFDTSBEYXRhIiwKKwl7ICAvKiBaRVJPRVMgRU5EIExJU1QgKi8gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzIGFjbV9zdHJpbmdfdGFibGUgPSB7CisJLmxhbmd1YWdlID0JCTB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncyA9CQlhY21fc3RyaW5nX2RlZnMsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqYWNtX3N0cmluZ3NbXSA9IHsKKwkmYWNtX3N0cmluZ190YWJsZSwKKwlOVUxMLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQUNNIGNvbnRyb2wgLi4uIGRhdGEgaGFuZGxpbmcgaXMgZGVsZWdhdGVkIHRvIHR0eSBsaWJyYXJ5IGNvZGUuCisgKiBUaGUgbWFpbiB0YXNrIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gYWN0aXZhdGUgYW5kIGRlYWN0aXZhdGUKKyAqIHRoYXQgY29kZSBiYXNlZCBvbiBkZXZpY2Ugc3RhdGU7IHRyYWNrIHBhcmFtZXRlcnMgbGlrZSBsaW5lCisgKiBzcGVlZCwgaGFuZHNoYWtlIHN0YXRlLCBhbmQgc28gb247IGFuZCBpc3N1ZSBub3RpZmljYXRpb25zLgorICovCisKK3N0YXRpYyB2b2lkIGFjbV9jb21wbGV0ZV9zZXRfbGluZV9jb2Rpbmcoc3RydWN0IHVzYl9lcCAqZXAsCisJCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmX2FjbQkqYWNtID0gZXAtPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGFjbS0+cG9ydC5mdW5jLmNvbmZpZy0+Y2RldjsKKworCWlmIChyZXEtPnN0YXR1cyAhPSAwKSB7CisJCURCRyhjZGV2LCAiYWNtIHR0eUdTJWQgY29tcGxldGlvbiwgZXJyICVkXG4iLAorCQkJCWFjbS0+cG9ydF9udW0sIHJlcS0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCisJaWYgKHJlcS0+YWN0dWFsICE9IHNpemVvZihhY20tPnBvcnRfbGluZV9jb2RpbmcpKSB7CisJCURCRyhjZGV2LCAiYWNtIHR0eUdTJWQgc2hvcnQgcmVzcCwgbGVuICVkXG4iLAorCQkJCWFjbS0+cG9ydF9udW0sIHJlcS0+YWN0dWFsKTsKKwkJdXNiX2VwX3NldF9oYWx0KGVwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZwkqdmFsdWUgPSByZXEtPmJ1ZjsKKworCQkvKiBSRVZJU0lUOiAgd2UgY3VycmVudGx5IGp1c3QgcmVtZW1iZXIgdGhpcyBkYXRhLgorCQkgKiBJZiB3ZSBjaGFuZ2UgdGhhdCwgKGEpIHZhbGlkYXRlIGl0IGZpcnN0LCB0aGVuCisJCSAqIChiKSB1cGRhdGUgd2hhdGV2ZXIgaGFyZHdhcmUgbmVlZHMgdXBkYXRpbmcsCisJCSAqIChjKSB3b3JyeSBhYm91dCBsb2NraW5nLiAgVGhpcyBpcyBpbmZvcm1hdGlvbiBvbgorCQkgKiB0aGUgb3JkZXIgb2YgOTYwMC04LU4tMSAuLi4gbW9zdCBvZiB3aGljaCBtZWFucworCQkgKiBub3RoaW5nIHVubGVzcyB3ZSBjb250cm9sIGEgcmVhbCBSUzIzMiBsaW5lLgorCQkgKi8KKwkJYWNtLT5wb3J0X2xpbmVfY29kaW5nID0gKnZhbHVlOworCX0KK30KKworc3RhdGljIGludCBhY21fc2V0dXAoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwgY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgZl9hY20JCSphY20gPSBmdW5jX3RvX2FjbShmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBjZGV2LT5yZXE7CisJaW50CQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKKwl1MTYJCQl3X2luZGV4ID0gbGUxNl90b19jcHUoY3RybC0+d0luZGV4KTsKKwl1MTYJCQl3X3ZhbHVlID0gbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKTsKKwl1MTYJCQl3X2xlbmd0aCA9IGxlMTZfdG9fY3B1KGN0cmwtPndMZW5ndGgpOworCisJLyogY29tcG9zaXRlIGRyaXZlciBpbmZyYXN0cnVjdHVyZSBoYW5kbGVzIGV2ZXJ5dGhpbmcgZXhjZXB0CisJICogQ0RDIGNsYXNzIG1lc3NhZ2VzOyBpbnRlcmZhY2UgYWN0aXZhdGlvbiB1c2VzIHNldF9hbHQoKS4KKwkgKi8KKwlzd2l0Y2ggKChjdHJsLT5iUmVxdWVzdFR5cGUgPDwgOCkgfCBjdHJsLT5iUmVxdWVzdCkgeworCisJLyogU0VUX0xJTkVfQ09ESU5HIC4uLiBqdXN0IHJlYWQgYW5kIHNhdmUgd2hhdCB0aGUgaG9zdCBzZW5kcyAqLworCWNhc2UgKChVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkgPDwgOCkKKwkJCXwgVVNCX0NEQ19SRVFfU0VUX0xJTkVfQ09ESU5HOgorCQlpZiAod19sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nKQorCQkJCXx8IHdfaW5kZXggIT0gYWNtLT5jdHJsX2lkKQorCQkJZ290byBpbnZhbGlkOworCisJCXZhbHVlID0gd19sZW5ndGg7CisJCWNkZXYtPmdhZGdldC0+ZXAwLT5kcml2ZXJfZGF0YSA9IGFjbTsKKwkJcmVxLT5jb21wbGV0ZSA9IGFjbV9jb21wbGV0ZV9zZXRfbGluZV9jb2Rpbmc7CisJCWJyZWFrOworCisJLyogR0VUX0xJTkVfQ09ESU5HIC4uLiByZXR1cm4gd2hhdCBob3N0IHNlbnQsIG9yIGluaXRpYWwgdmFsdWUgKi8KKwljYXNlICgoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkgPDwgOCkKKwkJCXwgVVNCX0NEQ19SRVFfR0VUX0xJTkVfQ09ESU5HOgorCQlpZiAod19pbmRleCAhPSBhY20tPmN0cmxfaWQpCisJCQlnb3RvIGludmFsaWQ7CisKKwkJdmFsdWUgPSBtaW5fdCh1bnNpZ25lZCwgd19sZW5ndGgsCisJCQkJc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nKSk7CisJCW1lbWNweShyZXEtPmJ1ZiwgJmFjbS0+cG9ydF9saW5lX2NvZGluZywgdmFsdWUpOworCQlicmVhazsKKworCS8qIFNFVF9DT05UUk9MX0xJTkVfU1RBVEUgLi4uIHNhdmUgd2hhdCB0aGUgaG9zdCBzZW50ICovCisJY2FzZSAoKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFKSA8PCA4KQorCQkJfCBVU0JfQ0RDX1JFUV9TRVRfQ09OVFJPTF9MSU5FX1NUQVRFOgorCQlpZiAod19pbmRleCAhPSBhY20tPmN0cmxfaWQpCisJCQlnb3RvIGludmFsaWQ7CisKKwkJdmFsdWUgPSAwOworCisJCS8qIEZJWE1FIHdlIHNob3VsZCBub3QgYWxsb3cgZGF0YSB0byBmbG93IHVudGlsIHRoZQorCQkgKiBob3N0IHNldHMgdGhlIFJTMjMyX0RUUiBiaXQ7IGFuZCB3aGVuIGl0IGNsZWFycworCQkgKiB0aGF0IGJpdCwgd2Ugc2hvdWxkIHJldHVybiB0byB0aGF0IG5vLWZsb3cgc3RhdGUuCisJCSAqLworCQlhY20tPnBvcnRfaGFuZHNoYWtlX2JpdHMgPSB3X3ZhbHVlOworCQlicmVhazsKKworCWRlZmF1bHQ6CitpbnZhbGlkOgorCQlWREJHKGNkZXYsICJpbnZhbGlkIGNvbnRyb2wgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3X3ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7CisJfQorCisJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgb3Igc3RhdHVzIHBoYXNlPyAqLworCWlmICh2YWx1ZSA+PSAwKSB7CisJCURCRyhjZGV2LCAiYWNtIHR0eUdTJWQgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCWFjbS0+cG9ydF9udW0sIGN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3X3ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7CisJCXJlcS0+emVybyA9IDA7CisJCXJlcS0+bGVuZ3RoID0gdmFsdWU7CisJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGNkZXYtPmdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAodmFsdWUgPCAwKQorCQkJRVJST1IoY2RldiwgImFjbSByZXNwb25zZSBvbiB0dHlHUyVkLCBlcnIgJWRcbiIsCisJCQkJCWFjbS0+cG9ydF9udW0sIHZhbHVlKTsKKwl9CisKKwkvKiBkZXZpY2UgZWl0aGVyIHN0YWxscyAodmFsdWUgPCAwKSBvciByZXBvcnRzIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgYWNtX3NldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwgdW5zaWduZWQgaW50ZiwgdW5zaWduZWQgYWx0KQoreworCXN0cnVjdCBmX2FjbQkJKmFjbSA9IGZ1bmNfdG9fYWNtKGYpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKKworCS8qIHdlIGtub3cgYWx0ID09IDAsIHNvIHRoaXMgaXMgYW4gYWN0aXZhdGlvbiBvciBhIHJlc2V0ICovCisKKwlpZiAoaW50ZiA9PSBhY20tPmN0cmxfaWQpIHsKKwkJLyogUkVWSVNJVCB0aGlzIG1heSBuZWVkIG1vcmUgd29yayB3aGVuIHdlIHN0YXJ0IHRvCisJCSAqIHNlbmQgbm90aWZpY2F0aW9ucyAuLi4KKwkJICovCisJCWlmIChhY20tPm5vdGlmeS0+ZHJpdmVyX2RhdGEpIHsKKwkJCVZEQkcoY2RldiwgInJlc2V0IGFjbSBjb250cm9sIGludGVyZmFjZSAlZFxuIiwgaW50Zik7CisJCQl1c2JfZXBfZGlzYWJsZShhY20tPm5vdGlmeSk7CisJCX0gZWxzZSB7CisJCQlWREJHKGNkZXYsICJpbml0IGFjbSBjdHJsIGludGVyZmFjZSAlZFxuIiwgaW50Zik7CisJCQlhY20tPm5vdGlmeV9kZXNjID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwKKwkJCQkJYWNtLT5ocy5ub3RpZnksCisJCQkJCWFjbS0+ZnMubm90aWZ5KTsKKwkJfQorCQl1c2JfZXBfZW5hYmxlKGFjbS0+bm90aWZ5LCBhY20tPm5vdGlmeV9kZXNjKTsKKwkJYWNtLT5ub3RpZnktPmRyaXZlcl9kYXRhID0gYWNtOworCisJfSBlbHNlIGlmIChpbnRmID09IGFjbS0+ZGF0YV9pZCkgeworCQlpZiAoYWNtLT5wb3J0LmluLT5kcml2ZXJfZGF0YSkgeworCQkJREJHKGNkZXYsICJyZXNldCBhY20gdHR5R1MlZFxuIiwgYWNtLT5wb3J0X251bSk7CisJCQlnc2VyaWFsX2Rpc2Nvbm5lY3QoJmFjbS0+cG9ydCk7CisJCX0gZWxzZSB7CisJCQlEQkcoY2RldiwgImFjdGl2YXRlIGFjbSB0dHlHUyVkXG4iLCBhY20tPnBvcnRfbnVtKTsKKwkJCWFjbS0+cG9ydC5pbl9kZXNjID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwKKwkJCQkJYWNtLT5ocy5pbiwgYWNtLT5mcy5pbik7CisJCQlhY20tPnBvcnQub3V0X2Rlc2MgPSBlcF9jaG9vc2UoY2Rldi0+Z2FkZ2V0LAorCQkJCQlhY20tPmhzLm91dCwgYWNtLT5mcy5vdXQpOworCQl9CisJCWdzZXJpYWxfY29ubmVjdCgmYWNtLT5wb3J0LCBhY20tPnBvcnRfbnVtKTsKKworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhY21fZGlzYWJsZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCBmX2FjbQkqYWNtID0gZnVuY190b19hY20oZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJREJHKGNkZXYsICJhY20gdHR5R1MlZCBkZWFjdGl2YXRlZFxuIiwgYWNtLT5wb3J0X251bSk7CisJZ3NlcmlhbF9kaXNjb25uZWN0KCZhY20tPnBvcnQpOworCXVzYl9lcF9kaXNhYmxlKGFjbS0+bm90aWZ5KTsKKwlhY20tPm5vdGlmeS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBBQ00gZnVuY3Rpb24gZHJpdmVyIHNldHVwL2JpbmRpbmcgKi8KK3N0YXRpYyBpbnQgX19pbml0CithY21fYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gYy0+Y2RldjsKKwlzdHJ1Y3QgZl9hY20JCSphY20gPSBmdW5jX3RvX2FjbShmKTsKKwlpbnQJCQlzdGF0dXM7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgaW50ZXJmYWNlIElEcywgYW5kIHBhdGNoIGRlc2NyaXB0b3JzICovCisJc3RhdHVzID0gdXNiX2ludGVyZmFjZV9pZChjLCBmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCWFjbS0+Y3RybF9pZCA9IHN0YXR1czsKKworCWFjbV9jb250cm9sX2ludGVyZmFjZV9kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPSBzdGF0dXM7CisJYWNtX3VuaW9uX2Rlc2MgLmJNYXN0ZXJJbnRlcmZhY2UwID0gc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2ludGVyZmFjZV9pZChjLCBmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCWFjbS0+ZGF0YV9pZCA9IHN0YXR1czsKKworCWFjbV9kYXRhX2ludGVyZmFjZV9kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPSBzdGF0dXM7CisJYWNtX3VuaW9uX2Rlc2MuYlNsYXZlSW50ZXJmYWNlMCA9IHN0YXR1czsKKwlhY21fY2FsbF9tZ210X2Rlc2NyaXB0b3IuYkRhdGFJbnRlcmZhY2UgPSBzdGF0dXM7CisKKwlzdGF0dXMgPSAtRU5PREVWOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZhY21fZnNfaW5fZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBmYWlsOworCWFjbS0+cG9ydC5pbiA9IGVwOworCWVwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCisKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmFjbV9mc19vdXRfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBmYWlsOworCWFjbS0+cG9ydC5vdXQgPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZhY21fZnNfbm90aWZ5X2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwlhY20tPm5vdGlmeSA9IGVwOworCWVwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCisKKwkvKiBjb3B5IGRlc2NyaXB0b3JzLCBhbmQgdHJhY2sgZW5kcG9pbnQgY29waWVzICovCisJZi0+ZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhhY21fZnNfZnVuY3Rpb24pOworCisJYWNtLT5mcy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGFjbV9mc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmYWNtX2ZzX2luX2Rlc2MpOworCWFjbS0+ZnMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoYWNtX2ZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZhY21fZnNfb3V0X2Rlc2MpOworCWFjbS0+ZnMubm90aWZ5ID0gdXNiX2ZpbmRfZW5kcG9pbnQoYWNtX2ZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZhY21fZnNfbm90aWZ5X2Rlc2MpOworCisJLyogc3VwcG9ydCBhbGwgcmVsZXZhbnQgaGFyZHdhcmUgc3BlZWRzLi4uIHdlIGV4cGVjdCB0aGF0IHdoZW4KKwkgKiBoYXJkd2FyZSBpcyBkdWFsIHNwZWVkLCBhbGwgYnVsay1jYXBhYmxlIGVuZHBvaW50cyB3b3JrIGF0CisJICogYm90aCBzcGVlZHMKKwkgKi8KKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7CisJCWFjbV9oc19pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWFjbV9mc19pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWFjbV9oc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlhY21fZnNfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJYWNtX2hzX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWFjbV9mc19ub3RpZnlfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCisJCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KKwkJZi0+aHNfZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhhY21faHNfZnVuY3Rpb24pOworCisJCWFjbS0+aHMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChhY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZhY21faHNfaW5fZGVzYyk7CisJCWFjbS0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoYWNtX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmYWNtX2hzX291dF9kZXNjKTsKKwkJYWNtLT5ocy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChhY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZhY21faHNfbm90aWZ5X2Rlc2MpOworCX0KKworCS8qIEZJWE1FIHByb3ZpZGUgYSBjYWxsYmFjayBmb3IgdHJpZ2dlcmluZyBub3RpZmljYXRpb25zICovCisKKwlEQkcoY2RldiwgImFjbSB0dHlHUyVkOiAlcyBzcGVlZCBJTi8lcyBPVVQvJXMgTk9USUZZLyVzXG4iLAorCQkJYWNtLT5wb3J0X251bSwKKwkJCWdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSA/ICJkdWFsIiA6ICJmdWxsIiwKKwkJCWFjbS0+cG9ydC5pbi0+bmFtZSwgYWNtLT5wb3J0Lm91dC0+bmFtZSwKKwkJCWFjbS0+bm90aWZ5LT5uYW1lKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwkvKiB3ZSBtaWdodCBhcyB3ZWxsIHJlbGVhc2Ugb3VyIGNsYWltcyBvbiBlbmRwb2ludHMgKi8KKwlpZiAoYWNtLT5ub3RpZnkpCisJCWFjbS0+bm90aWZ5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJaWYgKGFjbS0+cG9ydC5vdXQpCisJCWFjbS0+cG9ydC5vdXQtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlpZiAoYWNtLT5wb3J0LmluKQorCQlhY20tPnBvcnQuaW4tPmRyaXZlcl9kYXRhID0gTlVMTDsKKworCUVSUk9SKGNkZXYsICIlcy8lcDogY2FuJ3QgYmluZCwgZXJyICVkXG4iLCBmLT5uYW1lLCBmLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQKK2FjbV91bmJpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpCisJCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmhzX2Rlc2NyaXB0b3JzKTsKKwl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5kZXNjcmlwdG9ycyk7CisJa2ZyZWUoZnVuY190b19hY20oZikpOworfQorCisvKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IHN1cHBvcnQgQ0RDIEFDTSAuLi4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3VwcG9ydF9jZGMoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQoreworCS8qIFNIMyBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJmYWNlcyAqLworCWlmIChnYWRnZXRfaXNfc2goYy0+Y2Rldi0+Z2FkZ2V0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogc2ExMTAwIGRvZXNuJ3QgaGF2ZSBhIHRoaXJkIGludGVycnVwdCBlbmRwb2ludCAqLworCWlmIChnYWRnZXRfaXNfc2ExMTAwKGMtPmNkZXYtPmdhZGdldCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyAqcHJvYmFibHkqIGZpbmUgLi4uICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogYWNtX2JpbmRfY29uZmlnIC0gYWRkIGEgQ0RDIEFDTSBmdW5jdGlvbiB0byBhIGNvbmZpZ3VyYXRpb24KKyAqIEBjOiB0aGUgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0IHRoZSBDREMgQUNNIGluc3RhbmNlCisgKiBAcG9ydF9udW06IC9kZXYvdHR5R1MqIHBvcnQgdGhpcyBpbnRlcmZhY2Ugd2lsbCB1c2UKKyAqIENvbnRleHQ6IHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgZ2FkZ2V0IHNldHVwCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBjYWxsZWQgQGdzZXJpYWxfc2V0dXAoKSB3aXRoIGVub3VnaCBwb3J0cyB0bworICogaGFuZGxlIGFsbCB0aGUgb25lcyBpdCBiaW5kcy4gIENhbGxlciBpcyBhbHNvIHJlc3BvbnNpYmxlCisgKiBmb3IgY2FsbGluZyBAZ3NlcmlhbF9jbGVhbnVwKCkgYmVmb3JlIG1vZHVsZSB1bmxvYWQuCisgKi8KK2ludCBfX2luaXQgYWNtX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggcG9ydF9udW0pCit7CisJc3RydWN0IGZfYWNtCSphY207CisJaW50CQlzdGF0dXM7CisKKwlpZiAoIWNhbl9zdXBwb3J0X2NkYyhjKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBSRVZJU0lUIG1pZ2h0IHdhbnQgaW5zdGFuY2Utc3BlY2lmaWMgc3RyaW5ncyB0byBoZWxwCisJICogZGlzdGluZ3Vpc2ggaW5zdGFuY2VzIC4uLgorCSAqLworCisJLyogbWF5YmUgYWxsb2NhdGUgZGV2aWNlLWdsb2JhbCBzdHJpbmcgSURzLCBhbmQgcGF0Y2ggZGVzY3JpcHRvcnMgKi8KKwlpZiAoYWNtX3N0cmluZ19kZWZzW0FDTV9DVFJMX0lEWF0uaWQgPT0gMCkgeworCQlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGMtPmNkZXYpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisJCWFjbV9zdHJpbmdfZGVmc1tBQ01fQ1RSTF9JRFhdLmlkID0gc3RhdHVzOworCisJCWFjbV9jb250cm9sX2ludGVyZmFjZV9kZXNjLmlJbnRlcmZhY2UgPSBzdGF0dXM7CisKKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQlhY21fc3RyaW5nX2RlZnNbQUNNX0RBVEFfSURYXS5pZCA9IHN0YXR1czsKKworCQlhY21fZGF0YV9pbnRlcmZhY2VfZGVzYy5pSW50ZXJmYWNlID0gc3RhdHVzOworCX0KKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSBuZXcgaW5zdGFuY2UgKi8KKwlhY20gPSBremFsbG9jKHNpemVvZiAqYWNtLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhY20tPnBvcnRfbnVtID0gcG9ydF9udW07CisKKwlhY20tPnBvcnQuZnVuYy5uYW1lID0gImFjbSI7CisJYWNtLT5wb3J0LmZ1bmMuc3RyaW5ncyA9IGFjbV9zdHJpbmdzOworCS8qIGRlc2NyaXB0b3JzIGFyZSBwZXItaW5zdGFuY2UgY29waWVzICovCisJYWNtLT5wb3J0LmZ1bmMuYmluZCA9IGFjbV9iaW5kOworCWFjbS0+cG9ydC5mdW5jLnVuYmluZCA9IGFjbV91bmJpbmQ7CisJYWNtLT5wb3J0LmZ1bmMuc2V0X2FsdCA9IGFjbV9zZXRfYWx0OworCWFjbS0+cG9ydC5mdW5jLnNldHVwID0gYWNtX3NldHVwOworCWFjbS0+cG9ydC5mdW5jLmRpc2FibGUgPSBhY21fZGlzYWJsZTsKKworCXN0YXR1cyA9IHVzYl9hZGRfZnVuY3Rpb24oYywgJmFjbS0+cG9ydC5mdW5jKTsKKwlpZiAoc3RhdHVzKQorCQlrZnJlZShhY20pOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjJlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYwpAQCAtMCwwICsxLDgzMyBAQAorLyoKKyAqIGZfZWNtLmMgLS0gVVNCIENEQyBFdGhlcm5ldCAoRUNNKSBsaW5rIGZ1bmN0aW9uIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1LDIwMDggRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKiAjZGVmaW5lIFZFUkJPU0VfREVCVUcgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ1X2V0aGVyLmgiCisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSAiQ0RDIEV0aGVybmV0IE5ldHdvcmtpbmcgQ29udHJvbCBNb2RlbCIgKENEQyBFQ00pCisgKiBFdGhlcm5ldCBsaW5rLiAgVGhlIGRhdGEgdHJhbnNmZXIgbW9kZWwgaXMgc2ltcGxlIChwYWNrZXRzIHNlbnQgYW5kCisgKiByZWNlaXZlZCBvdmVyIGJ1bGsgZW5kcG9pbnRzIHVzaW5nIG5vcm1hbCBzaG9ydCBwYWNrZXQgdGVybWluYXRpb24pLAorICogYW5kIHRoZSBjb250cm9sIG1vZGVsIGV4cG9zZXMgdmFyaW91cyBkYXRhIGFuZCBvcHRpb25hbCBub3RpZmljYXRpb25zLgorICoKKyAqIEVDTSBpcyB3ZWxsIHN0YW5kYXJkaXplZCBhbmQgKGV4Y2VwdCBmb3IgTWljcm9zb2Z0KSBzdXBwb3J0ZWQgYnkgbW9zdAorICogb3BlcmF0aW5nIHN5c3RlbXMgd2l0aCBVU0IgaG9zdCBzdXBwb3J0LiAgSXQncyB0aGUgcHJlZmVycmVkIGludGVyb3AKKyAqIHNvbHV0aW9uIGZvciBFdGhlcm5ldCBvdmVyIFVTQiwgYXQgbGVhc3QgZm9yIGZpcm13YXJlIGJhc2VkIHNvbHV0aW9ucy4KKyAqIChIYXJkd2FyZSBzb2x1dGlvbnMgdGVuZCB0byBiZSBtb3JlIG1pbmltYWxpc3QuKSAgQSBuZXdlciBhbmQgc2ltcGxlcgorICogIkV0aGVybmV0IEVtdWxhdGlvbiBNb2RlbCIgKENEQyBFRU0pIGhhc24ndCB5ZXQgY2F1Z2h0IG9uLgorICoKKyAqIE5vdGUgdGhhdCBFQ00gcmVxdWlyZXMgdGhlIHVzZSBvZiAiYWx0ZXJuYXRlIHNldHRpbmdzIiBmb3IgaXRzIGRhdGEKKyAqIGludGVyZmFjZS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgc2V0X2FsdCgpIG1ldGhvZCBoYXMgcmVhbCB3b3JrIHRvIGRvLAorICogYW5kIGFsc28gbWVhbnMgdGhhdCBhIGdldF9hbHQoKSBtZXRob2QgaXMgcmVxdWlyZWQuCisgKi8KKworc3RydWN0IGVjbV9lcF9kZXNjcyB7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSppbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm91dDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm5vdGlmeTsKK307CisKK2VudW0gZWNtX25vdGlmeV9zdGF0ZSB7CisJRUNNX05PVElGWV9OT05FLAkJLyogZG9uJ3Qgbm90aWZ5ICovCisJRUNNX05PVElGWV9DT05ORUNULAkJLyogaXNzdWUgQ09OTkVDVCBuZXh0ICovCisJRUNNX05PVElGWV9TUEVFRCwJCS8qIGlzc3VlIFNQRUVEX0NIQU5HRSBuZXh0ICovCit9OworCitzdHJ1Y3QgZl9lY20geworCXN0cnVjdCBnZXRoZXIJCQlwb3J0OworCXU4CQkJCWN0cmxfaWQsIGRhdGFfaWQ7CisKKwljaGFyCQkJCWV0aGFkZHJbMTRdOworCisJc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcgkqKmZzX2Z1bmN0aW9uOworCXN0cnVjdCBlY21fZXBfZGVzY3MJCWZzOworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIJKipoc19mdW5jdGlvbjsKKwlzdHJ1Y3QgZWNtX2VwX2Rlc2NzCQloczsKKworCXN0cnVjdCB1c2JfZXAJCQkqbm90aWZ5OworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqbm90aWZ5X2Rlc2M7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkqbm90aWZ5X3JlcTsKKwl1OAkJCQlub3RpZnlfc3RhdGU7CisJYm9vbAkJCQlpc19vcGVuOworCisJLyogRklYTUUgaXNfb3BlbiBuZWVkcyBzb21lIGlycS1pc2ggbG9ja2luZworCSAqIC4uLiBwb3NzaWJseSB0aGUgc2FtZSBhcyBwb3J0LmlvcG9ydAorCSAqLworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9lY20gKmZ1bmNfdG9fZWNtKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmLCBzdHJ1Y3QgZl9lY20sIHBvcnQuZnVuYyk7Cit9CisKKy8qIHBlYWsgKHRoZW9yZXRpY2FsKSBidWxrIHRyYW5zZmVyIHJhdGUgaW4gYml0cy1wZXItc2Vjb25kICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJpdHJhdGUoc3RydWN0IHVzYl9nYWRnZXQgKmcpCit7CisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoZykgJiYgZy0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCXJldHVybiAxMyAqIDUxMiAqIDggKiAxMDAwICogODsKKwllbHNlCisJCXJldHVybiAxOSAqICA2NCAqIDEgKiAxMDAwICogODsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEluY2x1ZGUgdGhlIHN0YXR1cyBlbmRwb2ludCBpZiB3ZSBjYW4sIGV2ZW4gdGhvdWdoIGl0J3Mgb3B0aW9uYWwuCisgKgorICogVXNlIHdNYXhQYWNrZXRTaXplIGJpZyBlbm91Z2ggdG8gZml0IENEQ19OT1RJRllfU1BFRURfQ0hBTkdFIGluIG9uZQorICogcGFja2V0LCB0byBzaW1wbGlmeSBjYW5jZWxsYXRpb247IGFuZCBhIGJpZyB0cmFuc2ZlciBpbnRlcnZhbCwgdG8KKyAqIHdhc3RlIGxlc3MgYmFuZHdpZHRoLgorICoKKyAqIFNvbWUgZHJpdmVycyAobGlrZSBMaW51eCAyLjQgY2RjLWV0aGVyISkgIm5lZWQiIGl0IHRvIGV4aXN0IGV2ZW4KKyAqIGlmIHRoZXkgaWdub3JlIHRoZSBjb25uZWN0L2Rpc2Nvbm5lY3Qgbm90aWZpY2F0aW9ucyB0aGF0IHJlYWwgYWV0aGVyCisgKiBjYW4gcHJvdmlkZS4gIE1vcmUgYWR2YW5jZWQgY2RjIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydAorICogZW5jYXBzdWxhdGVkIGNvbW1hbmRzICh2ZW5kb3Itc3BlY2lmaWMsIHVzaW5nIGNvbnRyb2wtT1VUKS4KKyAqLworCisjZGVmaW5lIExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMJNQkvKiAxIDw8IDUgPT0gMzIgbXNlYyAqLworI2RlZmluZSBTVEFUVVNfQllURUNPVU5UCQkxNgkvKiA4IGJ5dGUgaGVhZGVyICsgZGF0YSAqLworCisKKy8qIGludGVyZmFjZSBkZXNjcmlwdG9yOiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBlY21fY29udHJvbF9pbnRmIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGVjbV9jb250cm9sX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkvKiAuYkludGVyZmFjZU51bWJlciA9IERZTkFNSUMgKi8KKwkvKiBzdGF0dXMgZW5kcG9pbnQgaXMgb3B0aW9uYWw7IHRoaXMgY291bGQgYmUgcGF0Y2hlZCBsYXRlciAqLworCS5iTnVtRW5kcG9pbnRzID0JMSwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CVVTQl9DRENfUFJPVE9fTk9ORSwKKwkvKiAuaUludGVyZmFjZSA9IERZTkFNSUMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY19oZWFkZXJfZGVzYyBoZWFkZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBoZWFkZXJfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKKworCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgZWNtX3VuaW9uX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YoZWNtX3VuaW9uX2Rlc2MpLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX1VOSU9OX1RZUEUsCisJLyogLmJNYXN0ZXJJbnRlcmZhY2UwID0JRFlOQU1JQyAqLworCS8qIC5iU2xhdmVJbnRlcmZhY2UwID0JRFlOQU1JQyAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZXRoZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBldGhlcl9kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0VUSEVSTkVUX1RZUEUsCisKKwkvKiB0aGlzIGRlc2NyaXB0b3IgYWN0dWFsbHkgYWRkcyB2YWx1ZSwgc3VycHJpc2UhICovCisJLyogLmlNQUNBZGRyZXNzID0gRFlOQU1JQyAqLworCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KKwkud01heFNlZ21lbnRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKKwkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksCisJLmJOdW1iZXJQb3dlckZpbHRlcnMgPQkwLAorfTsKKworLyogdGhlIGRlZmF1bHQgZGF0YSBpbnRlcmZhY2UgaGFzIG5vIGVuZHBvaW50cyAuLi4gKi8KKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgZWNtX2RhdGFfbm9wX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZWNtX2RhdGFfbm9wX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkuYkludGVyZmFjZU51bWJlciA9CTEsCisJLmJBbHRlcm5hdGVTZXR0aW5nID0JMCwKKwkuYk51bUVuZHBvaW50cyA9CTAsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DRENfREFUQSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JMCwKKwkuYkludGVyZmFjZVByb3RvY29sID0JMCwKKwkvKiAuaUludGVyZmFjZSA9IERZTkFNSUMgKi8KK307CisKKy8qIC4uLiBidXQgdGhlICJyZWFsIiBkYXRhIGludGVyZmFjZSBoYXMgdHdvIGJ1bGsgZW5kcG9pbnRzICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGVjbV9kYXRhX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZWNtX2RhdGFfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iSW50ZXJmYWNlTnVtYmVyID0JMSwKKwkuYkFsdGVybmF0ZVNldHRpbmcgPQkxLAorCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NEQ19EQVRBLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQkwLAorCS8qIC5pSW50ZXJmYWNlID0gRFlOQU1JQyAqLworfTsKKworLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAorCS5iSW50ZXJ2YWwgPQkJMSA8PCBMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmV0aF9mc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CisJLyogQ0RDIEVDTSBjb250cm9sIGRlc2NyaXB0b3JzICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9jb250cm9sX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhlYWRlcl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fdW5pb25fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkvKiBOT1RFOiBzdGF0dXMgZW5kcG9pbnQgbWlnaHQgbmVlZCB0byBiZSByZW1vdmVkICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX25vdGlmeV9kZXNjLAorCS8qIGRhdGEgaW50ZXJmYWNlLCBhbHRzZXR0aW5ncyAwIGFuZCAxICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9kYXRhX25vcF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fZGF0YV9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19vdXRfZGVzYywKKwlOVUxMLAorfTsKKworLyogaGlnaCBzcGVlZCBzdXBwb3J0OiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAorCS5iSW50ZXJ2YWwgPQkJTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQyArIDQsCit9Oworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19vdXRfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZXRoX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkvKiBDREMgRUNNIGNvbnRyb2wgZGVzY3JpcHRvcnMgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2NvbnRyb2xfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV91bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjLAorCS8qIE5PVEU6IHN0YXR1cyBlbmRwb2ludCBtaWdodCBuZWVkIHRvIGJlIHJlbW92ZWQgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfbm90aWZ5X2Rlc2MsCisJLyogZGF0YSBpbnRlcmZhY2UsIGFsdHNldHRpbmdzIDAgYW5kIDEgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2RhdGFfbm9wX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9kYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKiBzdHJpbmcgZGVzY3JpcHRvcnM6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZyBlY21fc3RyaW5nX2RlZnNbXSA9IHsKKwlbMF0ucyA9ICJDREMgRXRoZXJuZXQgQ29udHJvbCBNb2RlbCAoRUNNKSIsCisJWzFdLnMgPSBOVUxMIC8qIERZTkFNSUMgKi8sCisJWzJdLnMgPSAiQ0RDIEV0aGVybmV0IERhdGEiLAorCXsgIH0gLyogZW5kIG9mIGxpc3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzIGVjbV9zdHJpbmdfdGFibGUgPSB7CisJLmxhbmd1YWdlID0JCTB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncyA9CQllY21fc3RyaW5nX2RlZnMsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqZWNtX3N0cmluZ3NbXSA9IHsKKwkmZWNtX3N0cmluZ190YWJsZSwKKwlOVUxMLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZWNtX2RvX25vdGlmeShzdHJ1Y3QgZl9lY20gKmVjbSkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpyZXEgPSBlY20tPm5vdGlmeV9yZXE7CisJc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uCSpldmVudDsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBlY20tPnBvcnQuZnVuYy5jb25maWctPmNkZXY7CisJX19sZTMyCQkJCSpkYXRhOworCWludAkJCQlzdGF0dXM7CisKKwkvKiBub3RpZmljYXRpb24gYWxyZWFkeSBpbiBmbGlnaHQ/ICovCisJaWYgKCFyZXEpCisJCXJldHVybjsKKworCWV2ZW50ID0gcmVxLT5idWY7CisJc3dpdGNoIChlY20tPm5vdGlmeV9zdGF0ZSkgeworCWNhc2UgRUNNX05PVElGWV9OT05FOgorCQlyZXR1cm47CisKKwljYXNlIEVDTV9OT1RJRllfQ09OTkVDVDoKKwkJZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19OT1RJRllfTkVUV09SS19DT05ORUNUSU9OOworCQlpZiAoZWNtLT5pc19vcGVuKQorCQkJZXZlbnQtPndWYWx1ZSA9IGNwdV90b19sZTE2KDEpOworCQllbHNlCisJCQlldmVudC0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoMCk7CisJCWV2ZW50LT53TGVuZ3RoID0gMDsKKwkJcmVxLT5sZW5ndGggPSBzaXplb2YgKmV2ZW50OworCisJCURCRyhjZGV2LCAibm90aWZ5IGNvbm5lY3QgJXNcbiIsCisJCQkJZWNtLT5pc19vcGVuID8gInRydWUiIDogImZhbHNlIik7CisJCWVjbS0+bm90aWZ5X3N0YXRlID0gRUNNX05PVElGWV9TUEVFRDsKKwkJYnJlYWs7CisKKwljYXNlIEVDTV9OT1RJRllfU1BFRUQ6CisJCWV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfTk9USUZZX1NQRUVEX0NIQU5HRTsKKwkJZXZlbnQtPndWYWx1ZSA9IGNwdV90b19sZTE2KDApOworCQlldmVudC0+d0xlbmd0aCA9IGNwdV90b19sZTE2KDgpOworCQlyZXEtPmxlbmd0aCA9IFNUQVRVU19CWVRFQ09VTlQ7CisKKwkJLyogU1BFRURfQ0hBTkdFIGRhdGEgaXMgdXAvZG93biBzcGVlZHMgaW4gYml0cy9zZWMgKi8KKwkJZGF0YSA9IHJlcS0+YnVmICsgc2l6ZW9mICpldmVudDsKKwkJZGF0YVswXSA9IGNwdV90b19sZTMyKGJpdHJhdGUoY2Rldi0+Z2FkZ2V0KSk7CisJCWRhdGFbMV0gPSBkYXRhWzBdOworCisJCURCRyhjZGV2LCAibm90aWZ5IHNwZWVkICVkXG4iLCBiaXRyYXRlKGNkZXYtPmdhZGdldCkpOworCQllY20tPm5vdGlmeV9zdGF0ZSA9IEVDTV9OT1RJRllfTk9ORTsKKwkJYnJlYWs7CisJfQorCWV2ZW50LT5ibVJlcXVlc3RUeXBlID0gMHhBMTsKKwlldmVudC0+d0luZGV4ID0gY3B1X3RvX2xlMTYoZWNtLT5jdHJsX2lkKTsKKworCWVjbS0+bm90aWZ5X3JlcSA9IE5VTEw7CisJc3RhdHVzID0gdXNiX2VwX3F1ZXVlKGVjbS0+bm90aWZ5LCByZXEsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWVjbS0+bm90aWZ5X3JlcSA9IHJlcTsKKwkJREJHKGNkZXYsICJub3RpZnkgLS0+ICVkXG4iLCBzdGF0dXMpOworCX0KK30KKworc3RhdGljIHZvaWQgZWNtX25vdGlmeShzdHJ1Y3QgZl9lY20gKmVjbSkKK3sKKwkvKiBOT1RFIG9uIG1vc3QgdmVyc2lvbnMgb2YgTGludXgsIGhvc3Qgc2lkZSBjZGMtZXRoZXJuZXQKKwkgKiB3b24ndCBsaXN0ZW4gZm9yIG5vdGlmaWNhdGlvbnMgdW50aWwgaXRzIG5ldGRldmljZSBvcGVucy4KKwkgKiBUaGUgZmlyc3Qgbm90aWZpY2F0aW9uIHRoZW4gc2l0cyBpbiB0aGUgRklGTyBmb3IgYSBsb25nCisJICogdGltZSwgYW5kIHRoZSBzZWNvbmQgb25lIGlzIHF1ZXVlZC4KKwkgKi8KKwllY20tPm5vdGlmeV9zdGF0ZSA9IEVDTV9OT1RJRllfQ09OTkVDVDsKKwllY21fZG9fbm90aWZ5KGVjbSk7Cit9CisKK3N0YXRpYyB2b2lkIGVjbV9ub3RpZnlfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmX2VjbQkJCSplY20gPSByZXEtPmNvbnRleHQ7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZWNtLT5wb3J0LmZ1bmMuY29uZmlnLT5jZGV2OworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbgkqZXZlbnQgPSByZXEtPmJ1ZjsKKworCXN3aXRjaCAocmVxLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIG5vIGZhdWx0ICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQllY20tPm5vdGlmeV9zdGF0ZSA9IEVDTV9OT1RJRllfTk9ORTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJHKGNkZXYsICJldmVudCAlMDJ4IC0tPiAlZFxuIiwKKwkJCWV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSwgcmVxLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisJZWNtLT5ub3RpZnlfcmVxID0gcmVxOworCWVjbV9kb19ub3RpZnkoZWNtKTsKK30KKworc3RhdGljIGludCBlY21fc2V0dXAoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwgY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgZl9lY20JCSplY20gPSBmdW5jX3RvX2VjbShmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBjZGV2LT5yZXE7CisJaW50CQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKKwl1MTYJCQl3X2luZGV4ID0gbGUxNl90b19jcHUoY3RybC0+d0luZGV4KTsKKwl1MTYJCQl3X3ZhbHVlID0gbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKTsKKwl1MTYJCQl3X2xlbmd0aCA9IGxlMTZfdG9fY3B1KGN0cmwtPndMZW5ndGgpOworCisJLyogY29tcG9zaXRlIGRyaXZlciBpbmZyYXN0cnVjdHVyZSBoYW5kbGVzIGV2ZXJ5dGhpbmcgZXhjZXB0CisJICogQ0RDIGNsYXNzIG1lc3NhZ2VzOyBpbnRlcmZhY2UgYWN0aXZhdGlvbiB1c2VzIHNldF9hbHQoKS4KKwkgKi8KKwlzd2l0Y2ggKChjdHJsLT5iUmVxdWVzdFR5cGUgPDwgOCkgfCBjdHJsLT5iUmVxdWVzdCkgeworCWNhc2UgKChVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkgPDwgOCkKKwkJCXwgVVNCX0NEQ19TRVRfRVRIRVJORVRfUEFDS0VUX0ZJTFRFUjoKKwkJLyogc2VlIDYuMi4zMDogbm8gZGF0YSwgd0luZGV4ID0gaW50ZXJmYWNlLAorCQkgKiB3VmFsdWUgPSBwYWNrZXQgZmlsdGVyIGJpdG1hcAorCQkgKi8KKwkJaWYgKHdfbGVuZ3RoICE9IDAgfHwgd19pbmRleCAhPSBlY20tPmN0cmxfaWQpCisJCQlnb3RvIGludmFsaWQ7CisJCURCRyhjZGV2LCAicGFja2V0IGZpbHRlciAlMDJ4XG4iLCB3X3ZhbHVlKTsKKwkJLyogUkVWSVNJVCBsb2NraW5nIG9mIGNkY19maWx0ZXIuICBUaGlzIGFzc3VtZXMgdGhlIFVEQworCQkgKiBkcml2ZXIgd29uJ3QgaGF2ZSBhIGNvbmN1cnJlbnQgcGFja2V0IFRYIGlycSBydW5uaW5nIG9uCisJCSAqIGFub3RoZXIgQ1BVOyBvciB0aGF0IGlmIGl0IGRvZXMsIHRoaXMgd3JpdGUgaXMgYXRvbWljLi4uCisJCSAqLworCQllY20tPnBvcnQuY2RjX2ZpbHRlciA9IHdfdmFsdWU7CisJCXZhbHVlID0gMDsKKwkJYnJlYWs7CisKKwkvKiBhbmQgb3B0aW9uYWxseToKKwkgKiBjYXNlIFVTQl9DRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORDoKKwkgKiBjYXNlIFVTQl9DRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRToKKwkgKiBjYXNlIFVTQl9DRENfU0VUX0VUSEVSTkVUX01VTFRJQ0FTVF9GSUxURVJTOgorCSAqIGNhc2UgVVNCX0NEQ19TRVRfRVRIRVJORVRfUE1fUEFUVEVSTl9GSUxURVI6CisJICogY2FzZSBVU0JfQ0RDX0dFVF9FVEhFUk5FVF9QTV9QQVRURVJOX0ZJTFRFUjoKKwkgKiBjYXNlIFVTQl9DRENfR0VUX0VUSEVSTkVUX1NUQVRJU1RJQzoKKwkgKi8KKworCWRlZmF1bHQ6CitpbnZhbGlkOgorCQlEQkcoY2RldiwgImludmFsaWQgY29udHJvbCByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKwl9CisKKwkvKiByZXNwb25kIHdpdGggZGF0YSB0cmFuc2ZlciBvciBzdGF0dXMgcGhhc2U/ICovCisJaWYgKHZhbHVlID49IDApIHsKKwkJREJHKGNkZXYsICJlY20gcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3X3ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7CisJCXJlcS0+emVybyA9IDA7CisJCXJlcS0+bGVuZ3RoID0gdmFsdWU7CisJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGNkZXYtPmdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAodmFsdWUgPCAwKQorCQkJRVJST1IoY2RldiwgImVjbSByZXEgJTAyeC4lMDJ4IHJlc3BvbnNlIGVyciAlZFxuIiwKKwkJCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCQkJdmFsdWUpOworCX0KKworCS8qIGRldmljZSBlaXRoZXIgc3RhbGxzICh2YWx1ZSA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiB2YWx1ZTsKK30KKworCitzdGF0aWMgaW50IGVjbV9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIHVuc2lnbmVkIGludGYsIHVuc2lnbmVkIGFsdCkKK3sKKwlzdHJ1Y3QgZl9lY20JCSplY20gPSBmdW5jX3RvX2VjbShmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwkvKiBDb250cm9sIGludGVyZmFjZSBoYXMgb25seSBhbHRzZXR0aW5nIDAgKi8KKwlpZiAoaW50ZiA9PSBlY20tPmN0cmxfaWQpIHsKKwkJaWYgKGFsdCAhPSAwKQorCQkJZ290byBmYWlsOworCisJCWlmIChlY20tPm5vdGlmeS0+ZHJpdmVyX2RhdGEpIHsKKwkJCVZEQkcoY2RldiwgInJlc2V0IGVjbSBjb250cm9sICVkXG4iLCBpbnRmKTsKKwkJCXVzYl9lcF9kaXNhYmxlKGVjbS0+bm90aWZ5KTsKKwkJfSBlbHNlIHsKKwkJCVZEQkcoY2RldiwgImluaXQgZWNtIGN0cmwgJWRcbiIsIGludGYpOworCQkJZWNtLT5ub3RpZnlfZGVzYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCWVjbS0+aHMubm90aWZ5LAorCQkJCQllY20tPmZzLm5vdGlmeSk7CisJCX0KKwkJdXNiX2VwX2VuYWJsZShlY20tPm5vdGlmeSwgZWNtLT5ub3RpZnlfZGVzYyk7CisJCWVjbS0+bm90aWZ5LT5kcml2ZXJfZGF0YSA9IGVjbTsKKworCS8qIERhdGEgaW50ZXJmYWNlIGhhcyB0d28gYWx0c2V0dGluZ3MsIDAgYW5kIDEgKi8KKwl9IGVsc2UgaWYgKGludGYgPT0gZWNtLT5kYXRhX2lkKSB7CisJCWlmIChhbHQgPiAxKQorCQkJZ290byBmYWlsOworCisJCWlmIChlY20tPnBvcnQuaW5fZXAtPmRyaXZlcl9kYXRhKSB7CisJCQlEQkcoY2RldiwgInJlc2V0IGVjbVxuIik7CisJCQlnZXRoZXJfZGlzY29ubmVjdCgmZWNtLT5wb3J0KTsKKwkJfQorCisJCWlmICghZWNtLT5wb3J0LmluKSB7CisJCQlEQkcoY2RldiwgImluaXQgZWNtXG4iKTsKKwkJCWVjbS0+cG9ydC5pbiA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCWVjbS0+aHMuaW4sIGVjbS0+ZnMuaW4pOworCQkJZWNtLT5wb3J0Lm91dCA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCWVjbS0+aHMub3V0LCBlY20tPmZzLm91dCk7CisJCX0KKworCQkvKiBDREMgRXRoZXJuZXQgb25seSBzZW5kcyBkYXRhIGluIG5vbi1kZWZhdWx0IGFsdHNldHRpbmdzLgorCQkgKiBDaGFuZ2luZyBhbHRzZXR0aW5ncyByZXNldHMgZmlsdGVycywgc3RhdGlzdGljcywgZXRjLgorCQkgKi8KKwkJaWYgKGFsdCA9PSAxKSB7CisJCQlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCisJCQkvKiBFbmFibGUgemxwcyBieSBkZWZhdWx0IGZvciBFQ00gY29uZm9ybWFuY2U7CisJCQkgKiBvdmVycmlkZSBmb3IgbXVzYl9oZHJjIChhdm9pZHMgdHhkbWEgb3ZoZWFkKQorCQkJICogYW5kIHNhMTEwMCAoY2FuJ3QpLgorCQkJICovCisJCQllY20tPnBvcnQuaXNfemxwX29rID0gISgKKwkJCQkgICBnYWRnZXRfaXNfc2ExMTAwKGNkZXYtPmdhZGdldCkKKwkJCQl8fCBnYWRnZXRfaXNfbXVzYmhkcmMoY2Rldi0+Z2FkZ2V0KQorCQkJCSk7CisJCQllY20tPnBvcnQuY2RjX2ZpbHRlciA9IERFRkFVTFRfRklMVEVSOworCQkJREJHKGNkZXYsICJhY3RpdmF0ZSBlY21cbiIpOworCQkJbmV0ID0gZ2V0aGVyX2Nvbm5lY3QoJmVjbS0+cG9ydCk7CisJCQlpZiAoSVNfRVJSKG5ldCkpCisJCQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKKwkJfQorCisJCS8qIE5PVEUgdGhpcyBjYW4gYmUgYSBtaW5vciBkaXNhZ3JlZW1lbnQgd2l0aCB0aGUgRUNNIHNwZWMsCisJCSAqIHdoaWNoIHNheXMgc3BlZWQgbm90aWZpY2F0aW9ucyB3aWxsICJhbHdheXMiIGZvbGxvdworCQkgKiBjb25uZWN0aW9uIG5vdGlmaWNhdGlvbnMuICBCdXQgd2UgYWxsb3cgb25lIGNvbm5lY3QgdG8KKwkJICogZm9sbG93IGFub3RoZXIgKGlmIHRoZSBmaXJzdCBpcyBpbiBmbGlnaHQpLCBhbmQgaW5zdGVhZAorCQkgKiBqdXN0IGd1YXJhbnRlZSB0aGF0IGEgc3BlZWQgbm90aWZpY2F0aW9uIGlzIGFsd2F5cyBzZW50LgorCQkgKi8KKwkJZWNtX25vdGlmeShlY20pOworCX0gZWxzZQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm4gMDsKK2ZhaWw6CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIEJlY2F1c2UgdGhlIGRhdGEgaW50ZXJmYWNlIHN1cHBvcnRzIG11bHRpcGxlIGFsdHNldHRpbmdzLAorICogdGhpcyBFQ00gZnVuY3Rpb24gKk1VU1QqIGltcGxlbWVudCBhIGdldF9hbHQoKSBtZXRob2QuCisgKi8KK3N0YXRpYyBpbnQgZWNtX2dldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwgdW5zaWduZWQgaW50ZikKK3sKKwlzdHJ1Y3QgZl9lY20JCSplY20gPSBmdW5jX3RvX2VjbShmKTsKKworCWlmIChpbnRmID09IGVjbS0+Y3RybF9pZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGVjbS0+cG9ydC5pbl9lcC0+ZHJpdmVyX2RhdGEgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgZWNtX2Rpc2FibGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9lY20JCSplY20gPSBmdW5jX3RvX2VjbShmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwlEQkcoY2RldiwgImVjbSBkZWFjdGl2YXRlZFxuIik7CisKKwlpZiAoZWNtLT5wb3J0LmluX2VwLT5kcml2ZXJfZGF0YSkKKwkJZ2V0aGVyX2Rpc2Nvbm5lY3QoJmVjbS0+cG9ydCk7CisKKwlpZiAoZWNtLT5ub3RpZnktPmRyaXZlcl9kYXRhKSB7CisJCXVzYl9lcF9kaXNhYmxlKGVjbS0+bm90aWZ5KTsKKwkJZWNtLT5ub3RpZnktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJZWNtLT5ub3RpZnlfZGVzYyA9IE5VTEw7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQ2FsbGJhY2tzIGxldCB1cyBub3RpZnkgdGhlIGhvc3QgYWJvdXQgY29ubmVjdC9kaXNjb25uZWN0IHdoZW4gdGhlCisgKiBuZXQgZGV2aWNlIGlzIG9wZW5lZCBvciBjbG9zZWQuCisgKgorICogRm9yIHRlc3RpbmcsIG5vdGUgdGhhdCBsaW5rIHN0YXRlcyBvbiB0aGlzIHNpZGUgaW5jbHVkZSBib3RoIG9wZW5lZAorICogYW5kIGNsb3NlZCB2YXJpYW50cyBvZjoKKyAqCisgKiAgIC0gZGlzY29ubmVjdGVkL3VuY29uZmlndXJlZAorICogICAtIGNvbmZpZ3VyZWQgYnV0IGluYWN0aXZlIChkYXRhIGFsdCAwKQorICogICAtIGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZSAoZGF0YSBhbHQgMSkKKyAqCisgKiBFYWNoIG5lZWRzIHRvIGJlIHRlc3RlZCB3aXRoIHVucGx1Zywgcm1tb2QsIFNFVF9DT05GSUdVUkFUSU9OLCBhbmQKKyAqIFNFVF9JTlRFUkZBQ0UgKGFsdHNldHRpbmcpLiAgUmVtZW1iZXIgYWxzbyB0aGF0ICJjb25maWd1cmVkIiBkb2Vzbid0CisgKiBpbXBseSB0aGUgaG9zdCBpcyBhY3R1YWxseSBwb2xsaW5nIHRoZSBub3RpZmljYXRpb24gZW5kcG9pbnQsIGFuZAorICogbGlrZXdpc2UgdGhhdCAiYWN0aXZlIiBkb2Vzbid0IGltcGx5IGl0J3MgYWN0dWFsbHkgdXNpbmcgdGhlIGRhdGEKKyAqIGVuZHBvaW50cyBmb3IgdHJhZmZpYy4KKyAqLworCitzdGF0aWMgdm9pZCBlY21fb3BlbihzdHJ1Y3QgZ2V0aGVyICpnZXRoKQoreworCXN0cnVjdCBmX2VjbQkJKmVjbSA9IGZ1bmNfdG9fZWNtKCZnZXRoLT5mdW5jKTsKKworCURCRyhlY20tPnBvcnQuZnVuYy5jb25maWctPmNkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJZWNtLT5pc19vcGVuID0gdHJ1ZTsKKwllY21fbm90aWZ5KGVjbSk7Cit9CisKK3N0YXRpYyB2b2lkIGVjbV9jbG9zZShzdHJ1Y3QgZ2V0aGVyICpnZXRoKQoreworCXN0cnVjdCBmX2VjbQkJKmVjbSA9IGZ1bmNfdG9fZWNtKCZnZXRoLT5mdW5jKTsKKworCURCRyhlY20tPnBvcnQuZnVuYy5jb25maWctPmNkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJZWNtLT5pc19vcGVuID0gZmFsc2U7CisJZWNtX25vdGlmeShlY20pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBldGhlcm5ldCBmdW5jdGlvbiBkcml2ZXIgc2V0dXAvYmluZGluZyAqLworCitzdGF0aWMgaW50IF9faW5pdAorZWNtX2JpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGMtPmNkZXY7CisJc3RydWN0IGZfZWNtCQkqZWNtID0gZnVuY190b19lY20oZik7CisJaW50CQkJc3RhdHVzOworCXN0cnVjdCB1c2JfZXAJCSplcDsKKworCS8qIGFsbG9jYXRlIGluc3RhbmNlLXNwZWNpZmljIGludGVyZmFjZSBJRHMgKi8KKwlzdGF0dXMgPSB1c2JfaW50ZXJmYWNlX2lkKGMsIGYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWw7CisJZWNtLT5jdHJsX2lkID0gc3RhdHVzOworCisJZWNtX2NvbnRyb2xfaW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCWVjbV91bmlvbl9kZXNjLmJNYXN0ZXJJbnRlcmZhY2UwID0gc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2ludGVyZmFjZV9pZChjLCBmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCWVjbS0+ZGF0YV9pZCA9IHN0YXR1czsKKworCWVjbV9kYXRhX25vcF9pbnRmLmJJbnRlcmZhY2VOdW1iZXIgPSBzdGF0dXM7CisJZWNtX2RhdGFfaW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCWVjbV91bmlvbl9kZXNjLmJTbGF2ZUludGVyZmFjZTAgPSBzdGF0dXM7CisKKwlzdGF0dXMgPSAtRU5PREVWOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19pbl9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGZhaWw7CisJZWNtLT5wb3J0LmluX2VwID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfb3V0X2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwllY20tPnBvcnQub3V0X2VwID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCS8qIE5PVEU6ICBhIHN0YXR1cy9ub3RpZmljYXRpb24gZW5kcG9pbnQgaXMgKk9QVElPTkFMKiBidXQgd2UKKwkgKiBkb24ndCB0cmVhdCBpdCB0aGF0IHdheS4gIEl0J3Mgc2ltcGxlciwgYW5kIHNvbWUgbmV3ZXIgQ0RDCisJICogcHJvZmlsZXMgKHdpcmVsZXNzIGhhbmRzZXRzKSBubyBsb25nZXIgdHJlYXQgaXQgYXMgb3B0aW9uYWwuCisJICovCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19ub3RpZnlfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBmYWlsOworCWVjbS0+bm90aWZ5ID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCXN0YXR1cyA9IC1FTk9NRU07CisKKwkvKiBhbGxvY2F0ZSBub3RpZmljYXRpb24gcmVxdWVzdCBhbmQgYnVmZmVyICovCisJZWNtLT5ub3RpZnlfcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIEdGUF9LRVJORUwpOworCWlmICghZWNtLT5ub3RpZnlfcmVxKQorCQlnb3RvIGZhaWw7CisJZWNtLT5ub3RpZnlfcmVxLT5idWYgPSBrbWFsbG9jKFNUQVRVU19CWVRFQ09VTlQsIEdGUF9LRVJORUwpOworCWlmICghZWNtLT5ub3RpZnlfcmVxLT5idWYpCisJCWdvdG8gZmFpbDsKKwllY20tPm5vdGlmeV9yZXEtPmNvbnRleHQgPSBlY207CisJZWNtLT5ub3RpZnlfcmVxLT5jb21wbGV0ZSA9IGVjbV9ub3RpZnlfY29tcGxldGU7CisKKwkvKiBjb3B5IGRlc2NyaXB0b3JzLCBhbmQgdHJhY2sgZW5kcG9pbnQgY29waWVzICovCisJZi0+ZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhldGhfZnNfZnVuY3Rpb24pOworCWlmICghZi0+ZGVzY3JpcHRvcnMpCisJCWdvdG8gZmFpbDsKKworCWVjbS0+ZnMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChldGhfZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX2luX2Rlc2MpOworCWVjbS0+ZnMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZXRoX2ZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZmc19vdXRfZGVzYyk7CisJZWNtLT5mcy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChldGhfZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX25vdGlmeV9kZXNjKTsKKworCS8qIHN1cHBvcnQgYWxsIHJlbGV2YW50IGhhcmR3YXJlIHNwZWVkcy4uLiB3ZSBleHBlY3QgdGhhdCB3aGVuCisJICogaGFyZHdhcmUgaXMgZHVhbCBzcGVlZCwgYWxsIGJ1bGstY2FwYWJsZSBlbmRwb2ludHMgd29yayBhdAorCSAqIGJvdGggc3BlZWRzCisJICovCisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgeworCQloc19pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJaHNfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJaHNfbm90aWZ5X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfbm90aWZ5X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKworCQkvKiBjb3B5IGRlc2NyaXB0b3JzLCBhbmQgdHJhY2sgZW5kcG9pbnQgY29waWVzICovCisJCWYtPmhzX2Rlc2NyaXB0b3JzID0gdXNiX2NvcHlfZGVzY3JpcHRvcnMoZXRoX2hzX2Z1bmN0aW9uKTsKKwkJaWYgKCFmLT5oc19kZXNjcmlwdG9ycykKKwkJCWdvdG8gZmFpbDsKKworCQllY20tPmhzLmluID0gdXNiX2ZpbmRfZW5kcG9pbnQoZXRoX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfaW5fZGVzYyk7CisJCWVjbS0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZXRoX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfb3V0X2Rlc2MpOworCQllY20tPmhzLm5vdGlmeSA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9oc19mdW5jdGlvbiwKKwkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX25vdGlmeV9kZXNjKTsKKwl9CisKKwkvKiBOT1RFOiAgYWxsIHRoYXQgaXMgZG9uZSB3aXRob3V0IGtub3dpbmcgb3IgY2FyaW5nIGFib3V0CisJICogdGhlIG5ldHdvcmsgbGluayAuLi4gd2hpY2ggaXMgdW5hdmFpbGFibGUgdG8gdGhpcyBjb2RlCisJICogdW50aWwgd2UncmUgYWN0aXZhdGVkIHZpYSBzZXRfYWx0KCkuCisJICovCisKKwllY20tPnBvcnQub3BlbiA9IGVjbV9vcGVuOworCWVjbS0+cG9ydC5jbG9zZSA9IGVjbV9jbG9zZTsKKworCURCRyhjZGV2LCAiQ0RDIEV0aGVybmV0OiAlcyBzcGVlZCBJTi8lcyBPVVQvJXMgTk9USUZZLyVzXG4iLAorCQkJZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpID8gImR1YWwiIDogImZ1bGwiLAorCQkJZWNtLT5wb3J0LmluX2VwLT5uYW1lLCBlY20tPnBvcnQub3V0X2VwLT5uYW1lLAorCQkJZWNtLT5ub3RpZnktPm5hbWUpOworCXJldHVybiAwOworCitmYWlsOgorCWlmIChmLT5kZXNjcmlwdG9ycykKKwkJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+ZGVzY3JpcHRvcnMpOworCisJaWYgKGVjbS0+bm90aWZ5X3JlcSkgeworCQlrZnJlZShlY20tPm5vdGlmeV9yZXEtPmJ1Zik7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZWNtLT5ub3RpZnksIGVjbS0+bm90aWZ5X3JlcSk7CisJfQorCisJLyogd2UgbWlnaHQgYXMgd2VsbCByZWxlYXNlIG91ciBjbGFpbXMgb24gZW5kcG9pbnRzICovCisJaWYgKGVjbS0+bm90aWZ5KQorCQllY20tPm5vdGlmeS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWlmIChlY20tPnBvcnQub3V0KQorCQllY20tPnBvcnQub3V0X2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJaWYgKGVjbS0+cG9ydC5pbikKKwkJZWNtLT5wb3J0LmluX2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlFUlJPUihjZGV2LCAiJXM6IGNhbid0IGJpbmQsIGVyciAlZFxuIiwgZi0+bmFtZSwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkCitlY21fdW5iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9lY20JCSplY20gPSBmdW5jX3RvX2VjbShmKTsKKworCURCRyhjLT5jZGV2LCAiZWNtIHVuYmluZFxuIik7CisKKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKQorCQl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5oc19kZXNjcmlwdG9ycyk7CisJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+ZGVzY3JpcHRvcnMpOworCisJa2ZyZWUoZWNtLT5ub3RpZnlfcmVxLT5idWYpOworCXVzYl9lcF9mcmVlX3JlcXVlc3QoZWNtLT5ub3RpZnksIGVjbS0+bm90aWZ5X3JlcSk7CisKKwllY21fc3RyaW5nX2RlZnNbMV0ucyA9IE5VTEw7CisJa2ZyZWUoZWNtKTsKK30KKworLyoqCisgKiBlY21fYmluZF9jb25maWcgLSBhZGQgQ0RDIEV0aGVybmV0IG5ldHdvcmsgbGluayB0byBhIGNvbmZpZ3VyYXRpb24KKyAqIEBjOiB0aGUgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0IHRoZSBuZXR3b3JrIGxpbmsKKyAqIEBldGhhZGRyOiBhIGJ1ZmZlciBpbiB3aGljaCB0aGUgZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgaG9zdCBzaWRlCisgKglzaWRlIG9mIHRoZSBsaW5rIHdhcyByZWNvcmRlZAorICogQ29udGV4dDogc2luZ2xlIHRocmVhZGVkIGR1cmluZyBnYWRnZXQgc2V0dXAKKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIGNhbGxlZCBAZ2V0aGVyX3NldHVwKCkuICBDYWxsZXIgaXMgYWxzbyByZXNwb25zaWJsZQorICogZm9yIGNhbGxpbmcgQGdldGhlcl9jbGVhbnVwKCkgYmVmb3JlIG1vZHVsZSB1bmxvYWQuCisgKi8KK2ludCBfX2luaXQgZWNtX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggZXRoYWRkcltFVEhfQUxFTl0pCit7CisJc3RydWN0IGZfZWNtCSplY207CisJaW50CQlzdGF0dXM7CisKKwlpZiAoIWNhbl9zdXBwb3J0X2VjbShjLT5jZGV2LT5nYWRnZXQpIHx8ICFldGhhZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG1heWJlIGFsbG9jYXRlIGRldmljZS1nbG9iYWwgc3RyaW5nIElEcyAqLworCWlmIChlY21fc3RyaW5nX2RlZnNbMF0uaWQgPT0gMCkgeworCisJCS8qIGNvbnRyb2wgaW50ZXJmYWNlIGxhYmVsICovCisJCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoYy0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJZWNtX3N0cmluZ19kZWZzWzBdLmlkID0gc3RhdHVzOworCQllY21fY29udHJvbF9pbnRmLmlJbnRlcmZhY2UgPSBzdGF0dXM7CisKKwkJLyogZGF0YSBpbnRlcmZhY2UgbGFiZWwgKi8KKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQllY21fc3RyaW5nX2RlZnNbMl0uaWQgPSBzdGF0dXM7CisJCWVjbV9kYXRhX2ludGYuaUludGVyZmFjZSA9IHN0YXR1czsKKworCQkvKiBNQUMgYWRkcmVzcyAqLworCQlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGMtPmNkZXYpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisJCWVjbV9zdHJpbmdfZGVmc1sxXS5pZCA9IHN0YXR1czsKKwkJZXRoZXJfZGVzYy5pTUFDQWRkcmVzcyA9IHN0YXR1czsKKwl9CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBvbmUgbmV3IGluc3RhbmNlICovCisJZWNtID0ga3phbGxvYyhzaXplb2YgKmVjbSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlY20pCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZXhwb3J0IGhvc3QncyBFdGhlcm5ldCBhZGRyZXNzIGluIENEQyBmb3JtYXQgKi8KKwlzbnByaW50ZihlY20tPmV0aGFkZHIsIHNpemVvZiBlY20tPmV0aGFkZHIsCisJCSIlMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgiLAorCQlldGhhZGRyWzBdLCBldGhhZGRyWzFdLCBldGhhZGRyWzJdLAorCQlldGhhZGRyWzNdLCBldGhhZGRyWzRdLCBldGhhZGRyWzVdKTsKKwllY21fc3RyaW5nX2RlZnNbMV0ucyA9IGVjbS0+ZXRoYWRkcjsKKworCWVjbS0+cG9ydC5jZGNfZmlsdGVyID0gREVGQVVMVF9GSUxURVI7CisKKwllY20tPnBvcnQuZnVuYy5uYW1lID0gImNkY19ldGhlcm5ldCI7CisJZWNtLT5wb3J0LmZ1bmMuc3RyaW5ncyA9IGVjbV9zdHJpbmdzOworCS8qIGRlc2NyaXB0b3JzIGFyZSBwZXItaW5zdGFuY2UgY29waWVzICovCisJZWNtLT5wb3J0LmZ1bmMuYmluZCA9IGVjbV9iaW5kOworCWVjbS0+cG9ydC5mdW5jLnVuYmluZCA9IGVjbV91bmJpbmQ7CisJZWNtLT5wb3J0LmZ1bmMuc2V0X2FsdCA9IGVjbV9zZXRfYWx0OworCWVjbS0+cG9ydC5mdW5jLmdldF9hbHQgPSBlY21fZ2V0X2FsdDsKKwllY20tPnBvcnQuZnVuYy5zZXR1cCA9IGVjbV9zZXR1cDsKKwllY20tPnBvcnQuZnVuYy5kaXNhYmxlID0gZWNtX2Rpc2FibGU7CisKKwlzdGF0dXMgPSB1c2JfYWRkX2Z1bmN0aW9uKGMsICZlY20tPnBvcnQuZnVuYyk7CisJaWYgKHN0YXR1cykgeworCQllY21fc3RyaW5nX2RlZnNbMV0ucyA9IE5VTEw7CisJCWtmcmVlKGVjbSk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGE0Y2RlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBmX2xvb3BiYWNrLmMgLSBVU0IgcGVyaXBoZXJhbCBsb29wYmFjayBjb25maWd1cmF0aW9uIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJnX3plcm8uaCIKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworCisvKgorICogTE9PUEJBQ0sgRlVOQ1RJT04gLi4uIGEgdGVzdGluZyB2ZWhpY2xlIGZvciBVU0IgcGVyaXBoZXJhbHMsCisgKgorICogVGhpcyB0YWtlcyBtZXNzYWdlcyBvZiB2YXJpb3VzIHNpemVzIHdyaXR0ZW4gT1VUIHRvIGEgZGV2aWNlLCBhbmQgbG9vcHMKKyAqIHRoZW0gYmFjayBzbyB0aGV5IGNhbiBiZSByZWFkIElOIGZyb20gaXQuICBJdCBoYXMgYmVlbiB1c2VkIGJ5IGNlcnRhaW4KKyAqIHRlc3QgYXBwbGljYXRpb25zLiAgSXQgc3VwcG9ydHMgbGltaXRlZCB0ZXN0aW5nIG9mIGRhdGEgcXVldWVpbmcgbG9naWMuCisgKgorICoKKyAqIFRoaXMgaXMgY3VycmVudGx5IHBhY2thZ2VkIGFzIGEgY29uZmlndXJhdGlvbiBkcml2ZXIsIHdoaWNoIGNhbid0IGJlCisgKiBjb21iaW5lZCB3aXRoIG90aGVyIGZ1bmN0aW9ucyB0byBtYWtlIGNvbXBvc2l0ZSBkZXZpY2VzLiAgSG93ZXZlciwgaXQKKyAqIGNhbiBiZSBjb21iaW5lZCB3aXRoIG90aGVyIGluZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zLgorICovCitzdHJ1Y3QgZl9sb29wYmFjayB7CisJc3RydWN0IHVzYl9mdW5jdGlvbglmdW5jdGlvbjsKKworCXN0cnVjdCB1c2JfZXAJCSppbl9lcDsKKwlzdHJ1Y3QgdXNiX2VwCQkqb3V0X2VwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9sb29wYmFjayAqZnVuY190b19sb29wKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmLCBzdHJ1Y3QgZl9sb29wYmFjaywgZnVuY3Rpb24pOworfQorCitzdGF0aWMgdW5zaWduZWQgcWxlbiA9IDMyOworbW9kdWxlX3BhcmFtKHFsZW4sIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhxbGVubiwgImRlcHRoIG9mIGxvb3BiYWNrIHF1ZXVlIik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGxvb3BiYWNrX2ludGYgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGxvb3BiYWNrX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkuYk51bUVuZHBvaW50cyA9CTIsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19WRU5ET1JfU1BFQywKKwkvKiAuaUludGVyZmFjZSA9IERZTkFNSUMgKi8KK307CisKKy8qIGZ1bGwgc3BlZWQgc3VwcG9ydDogKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19zb3VyY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc2lua19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19sb29wYmFja19kZXNjc1tdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZsb29wYmFja19pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zaW5rX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NvdXJjZV9kZXNjLAorCU5VTEwsCit9OworCisvKiBoaWdoIHNwZWVkIHN1cHBvcnQ6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc291cmNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3NpbmtfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19sb29wYmFja19kZXNjc1tdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZsb29wYmFja19pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zb3VyY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc2lua19kZXNjLAorCU5VTEwsCit9OworCisvKiBmdW5jdGlvbi1zcGVjaWZpYyBzdHJpbmdzOiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgc3RyaW5nc19sb29wYmFja1tdID0geworCVswXS5zID0gImxvb3AgaW5wdXQgdG8gb3V0cHV0IiwKKwl7ICB9CQkJLyogZW5kIG9mIGxpc3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzIHN0cmluZ3RhYl9sb29wID0geworCS5sYW5ndWFnZQk9IDB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncwk9IHN0cmluZ3NfbG9vcGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqbG9vcGJhY2tfc3RyaW5nc1tdID0geworCSZzdHJpbmd0YWJfbG9vcCwKKwlOVUxMLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQKK2xvb3BiYWNrX2JpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGMtPmNkZXY7CisJc3RydWN0IGZfbG9vcGJhY2sJKmxvb3AgPSBmdW5jX3RvX2xvb3AoZik7CisJaW50CQkJaWQ7CisKKwkvKiBhbGxvY2F0ZSBpbnRlcmZhY2UgSUQocykgKi8KKwlpZCA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKGlkIDwgMCkKKwkJcmV0dXJuIGlkOworCWxvb3BiYWNrX2ludGYuYkludGVyZmFjZU51bWJlciA9IGlkOworCisJLyogYWxsb2NhdGUgZW5kcG9pbnRzICovCisKKwlsb29wLT5pbl9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3NvdXJjZV9kZXNjKTsKKwlpZiAoIWxvb3AtPmluX2VwKSB7CithdXRvY29uZl9mYWlsOgorCQlFUlJPUihjZGV2LCAiJXM6IGNhbid0IGF1dG9jb25maWd1cmUgb24gJXNcbiIsCisJCQlmLT5uYW1lLCBjZGV2LT5nYWRnZXQtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJbG9vcC0+aW5fZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCWxvb3AtPm91dF9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3NpbmtfZGVzYyk7CisJaWYgKCFsb29wLT5vdXRfZXApCisJCWdvdG8gYXV0b2NvbmZfZmFpbDsKKwlsb29wLT5vdXRfZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCS8qIHN1cHBvcnQgaGlnaCBzcGVlZCBoYXJkd2FyZSAqLworCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpIHsKKwkJaHNfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJaHNfc2lua19kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQlmLT5oc19kZXNjcmlwdG9ycyA9IGhzX2xvb3BiYWNrX2Rlc2NzOworCX0KKworCURCRyhjZGV2LCAiJXMgc3BlZWQgJXM6IElOLyVzLCBPVVQvJXNcbiIsCisJCQlnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkgPyAiZHVhbCIgOiAiZnVsbCIsCisJCQlmLT5uYW1lLCBsb29wLT5pbl9lcC0+bmFtZSwgbG9vcC0+b3V0X2VwLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2xvb3BiYWNrX3VuYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJa2ZyZWUoZnVuY190b19sb29wKGYpKTsKK30KKworc3RhdGljIHZvaWQgbG9vcGJhY2tfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmX2xvb3BiYWNrCSpsb29wID0gZXAtPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGxvb3AtPmZ1bmN0aW9uLmNvbmZpZy0+Y2RldjsKKwlpbnQJCQlzdGF0dXMgPSByZXEtPnN0YXR1czsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisKKwljYXNlIDA6CQkJCS8qIG5vcm1hbCBjb21wbGV0aW9uPyAqLworCQlpZiAoZXAgPT0gbG9vcC0+b3V0X2VwKSB7CisJCQkvKiBsb29wIHRoaXMgT1VUIHBhY2tldCBiYWNrIElOIHRvIHRoZSBob3N0ICovCisJCQlyZXEtPnplcm8gPSAocmVxLT5hY3R1YWwgPCByZXEtPmxlbmd0aCk7CisJCQlyZXEtPmxlbmd0aCA9IHJlcS0+YWN0dWFsOworCQkJc3RhdHVzID0gdXNiX2VwX3F1ZXVlKGxvb3AtPmluX2VwLCByZXEsIEdGUF9BVE9NSUMpOworCQkJaWYgKHN0YXR1cyA9PSAwKQorCQkJCXJldHVybjsKKworCQkJLyogInNob3VsZCBuZXZlciBnZXQgaGVyZSIgKi8KKwkJCUVSUk9SKGNkZXYsICJjYW4ndCBsb29wICVzIHRvICVzOiAlZFxuIiwKKwkJCQllcC0+bmFtZSwgbG9vcC0+aW5fZXAtPm5hbWUsCisJCQkJc3RhdHVzKTsKKwkJfQorCisJCS8qIHF1ZXVlIHRoZSBidWZmZXIgZm9yIHNvbWUgbGF0ZXIgT1VUIHBhY2tldCAqLworCQlyZXEtPmxlbmd0aCA9IGJ1ZmxlbjsKKwkJc3RhdHVzID0gdXNiX2VwX3F1ZXVlKGxvb3AtPm91dF9lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJcmV0dXJuOworCisJCS8qICJzaG91bGQgbmV2ZXIgZ2V0IGhlcmUiICovCisJCS8qIEZBTExUSFJPVUdIICovCisKKwlkZWZhdWx0OgorCQlFUlJPUihjZGV2LCAiJXMgbG9vcCBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLCBlcC0+bmFtZSwKKwkJCQlzdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisJCS8qIEZBTExUSFJPVUdIICovCisKKwkvKiBOT1RFOiAgc2luY2UgdGhpcyBkcml2ZXIgZG9lc24ndCBtYWludGFpbiBhbiBleHBsaWNpdCByZWNvcmQKKwkgKiBvZiByZXF1ZXN0cyBpdCBzdWJtaXR0ZWQgKGp1c3QgbWFpbnRhaW5zIHFsZW4gY291bnQpLCB3ZQorCSAqIHJlbHkgb24gdGhlIGhhcmR3YXJlIGRyaXZlciB0byBjbGVhbiB1cCBvbiBkaXNjb25uZWN0IG9yCisJICogZW5kcG9pbnQgZGlzYWJsZS4KKwkgKi8KKwljYXNlIC1FQ09OTkFCT1JURUQ6CQkvKiBoYXJkd2FyZSBmb3JjZWQgZXAgcmVzZXQgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkJLyogcmVxdWVzdCBkZXF1ZXVlZCAqLworCWNhc2UgLUVTSFVURE9XTjoJCS8qIGRpc2Nvbm5lY3QgZnJvbSBob3N0ICovCisJCWZyZWVfZXBfcmVxKGVwLCByZXEpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX2xvb3BiYWNrKHN0cnVjdCBmX2xvb3BiYWNrICpsb29wKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldjsKKworCWNkZXYgPSBsb29wLT5mdW5jdGlvbi5jb25maWctPmNkZXY7CisJZGlzYWJsZV9lbmRwb2ludHMoY2RldiwgbG9vcC0+aW5fZXAsIGxvb3AtPm91dF9lcCk7CisJVkRCRyhjZGV2LCAiJXMgZGlzYWJsZWRcbiIsIGxvb3AtPmZ1bmN0aW9uLm5hbWUpOworfQorCitzdGF0aWMgaW50CitlbmFibGVfbG9vcGJhY2soc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBzdHJ1Y3QgZl9sb29wYmFjayAqbG9vcCkKK3sKKwlpbnQJCQkJCXJlc3VsdCA9IDA7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpzcmMsICpzaW5rOworCXN0cnVjdCB1c2JfZXAJCQkJKmVwOworCXN0cnVjdCB1c2JfcmVxdWVzdAkJCSpyZXE7CisJdW5zaWduZWQJCQkJaTsKKworCXNyYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKKwlzaW5rID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwgJmhzX3NpbmtfZGVzYywgJmZzX3NpbmtfZGVzYyk7CisKKwkvKiBvbmUgZW5kcG9pbnQgd3JpdGVzIGRhdGEgYmFjayBJTiB0byB0aGUgaG9zdCAqLworCWVwID0gbG9vcC0+aW5fZXA7CisJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZShlcCwgc3JjKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBsb29wOworCisJLyogb25lIGVuZHBvaW50IGp1c3QgcmVhZHMgT1VUIHBhY2tldHMgKi8KKwllcCA9IGxvb3AtPm91dF9lcDsKKwlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlKGVwLCBzaW5rKTsKKwlpZiAocmVzdWx0IDwgMCkgeworZmFpbDA6CisJCWVwID0gbG9vcC0+aW5fZXA7CisJCXVzYl9lcF9kaXNhYmxlKGVwKTsKKwkJZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJZXAtPmRyaXZlcl9kYXRhID0gbG9vcDsKKworCS8qIGFsbG9jYXRlIGEgYnVuY2ggb2YgcmVhZCBidWZmZXJzIGFuZCBxdWV1ZSB0aGVtIGFsbCBhdCBvbmNlLgorCSAqIHdlIGJ1ZmZlciBhdCBtb3N0ICdxbGVuJyB0cmFuc2ZlcnM7IGZld2VyIGlmIGFueSBuZWVkIG1vcmUKKwkgKiB0aGFuICdidWZsZW4nIGJ5dGVzIGVhY2guCisJICovCisJZm9yIChpID0gMDsgaSA8IHFsZW4gJiYgcmVzdWx0ID09IDA7IGkrKykgeworCQlyZXEgPSBhbGxvY19lcF9yZXEoZXApOworCQlpZiAocmVxKSB7CisJCQlyZXEtPmNvbXBsZXRlID0gbG9vcGJhY2tfY29tcGxldGU7CisJCQlyZXN1bHQgPSB1c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCQlpZiAocmVzdWx0KQorCQkJCUVSUk9SKGNkZXYsICIlcyBxdWV1ZSByZXEgLS0+ICVkXG4iLAorCQkJCQkJZXAtPm5hbWUsIHJlc3VsdCk7CisJCX0gZWxzZSB7CisJCQl1c2JfZXBfZGlzYWJsZShlcCk7CisJCQllcC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJCWdvdG8gZmFpbDA7CisJCX0KKwl9CisKKwlEQkcoY2RldiwgIiVzIGVuYWJsZWRcbiIsIGxvb3AtPmZ1bmN0aW9uLm5hbWUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgbG9vcGJhY2tfc2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLAorCQl1bnNpZ25lZCBpbnRmLCB1bnNpZ25lZCBhbHQpCit7CisJc3RydWN0IGZfbG9vcGJhY2sJKmxvb3AgPSBmdW5jX3RvX2xvb3AoZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJLyogd2Uga25vdyBhbHQgaXMgemVybyAqLworCWlmIChsb29wLT5pbl9lcC0+ZHJpdmVyX2RhdGEpCisJCWRpc2FibGVfbG9vcGJhY2sobG9vcCk7CisJcmV0dXJuIGVuYWJsZV9sb29wYmFjayhjZGV2LCBsb29wKTsKK30KKworc3RhdGljIHZvaWQgbG9vcGJhY2tfZGlzYWJsZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCBmX2xvb3BiYWNrCSpsb29wID0gZnVuY190b19sb29wKGYpOworCisJZGlzYWJsZV9sb29wYmFjayhsb29wKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgbG9vcGJhY2tfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQoreworCXN0cnVjdCBmX2xvb3BiYWNrCSpsb29wOworCWludAkJCXN0YXR1czsKKworCWxvb3AgPSBremFsbG9jKHNpemVvZiAqbG9vcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb29wKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxvb3AtPmZ1bmN0aW9uLm5hbWUgPSAibG9vcGJhY2siOworCWxvb3AtPmZ1bmN0aW9uLmRlc2NyaXB0b3JzID0gZnNfbG9vcGJhY2tfZGVzY3M7CisJbG9vcC0+ZnVuY3Rpb24uYmluZCA9IGxvb3BiYWNrX2JpbmQ7CisJbG9vcC0+ZnVuY3Rpb24udW5iaW5kID0gbG9vcGJhY2tfdW5iaW5kOworCWxvb3AtPmZ1bmN0aW9uLnNldF9hbHQgPSBsb29wYmFja19zZXRfYWx0OworCWxvb3AtPmZ1bmN0aW9uLmRpc2FibGUgPSBsb29wYmFja19kaXNhYmxlOworCisJc3RhdHVzID0gdXNiX2FkZF9mdW5jdGlvbihjLCAmbG9vcC0+ZnVuY3Rpb24pOworCWlmIChzdGF0dXMpCisJCWtmcmVlKGxvb3ApOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gbG9vcGJhY2tfZHJpdmVyID0geworCS5sYWJlbAkJPSAibG9vcGJhY2siLAorCS5zdHJpbmdzCT0gbG9vcGJhY2tfc3RyaW5ncywKKwkuYmluZAkJPSBsb29wYmFja19iaW5kX2NvbmZpZywKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDIsCisJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyCT0gMSwJLyogMiBtQSwgbWluaW1hbCAqLworCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KK307CisKKy8qKgorICogbG9vcGJhY2tfYWRkIC0gYWRkIGEgbG9vcGJhY2sgdGVzdGluZyBjb25maWd1cmF0aW9uIHRvIGEgZGV2aWNlCisgKiBAY2RldjogdGhlIGRldmljZSB0byBzdXBwb3J0IHRoZSBsb29wYmFjayBjb25maWd1cmF0aW9uCisgKi8KK2ludCBfX2luaXQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlpbnQgaWQ7CisKKwkvKiBhbGxvY2F0ZSBzdHJpbmcgSUQocykgKi8KKwlpZCA9IHVzYl9zdHJpbmdfaWQoY2Rldik7CisJaWYgKGlkIDwgMCkKKwkJcmV0dXJuIGlkOworCXN0cmluZ3NfbG9vcGJhY2tbMF0uaWQgPSBpZDsKKworCWxvb3BiYWNrX2ludGYuaUludGVyZmFjZSA9IGlkOworCWxvb3BiYWNrX2RyaXZlci5pQ29uZmlndXJhdGlvbiA9IGlkOworCisJLyogc3VwcG9ydCBPVEcgc3lzdGVtcyAqLworCWlmIChnYWRnZXRfaXNfb3RnKGNkZXYtPmdhZGdldCkpIHsKKwkJbG9vcGJhY2tfZHJpdmVyLmRlc2NyaXB0b3JzID0gb3RnX2Rlc2M7CisJCWxvb3BiYWNrX2RyaXZlci5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCX0KKworCXJldHVybiB1c2JfYWRkX2NvbmZpZyhjZGV2LCAmbG9vcGJhY2tfZHJpdmVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjUyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCkBAIC0wLDAgKzEsODI3IEBACisvKgorICogZl9ybmRpcy5jIC0tIFJORElTIGxpbmsgZnVuY3Rpb24gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUsMjAwOCBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgUm9iZXJ0IFNjaHdlYmVsLCBCZW5lZGlrdCBTcHJhbmdlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qICNkZWZpbmUgVkVSQk9TRV9ERUJVRyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2luY2x1ZGUgInVfZXRoZXIuaCIKKyNpbmNsdWRlICJybmRpcy5oIgorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFuIFJORElTIEV0aGVybmV0IHBvcnQgLS0gYSBNaWNyb3NvZnQgcHJvdG9jb2wgdGhhdCdzCisgKiBiZWVuIHByb21vdGVkIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIENEQyBFdGhlcm5ldC4gIFRoZSBwdWJsaXNoZWQgUk5ESVMKKyAqIHNwZWMgaXMgYW1iaWd1b3VzLCBpbmNvbXBsZXRlLCBhbmQgbmVlZGxlc3NseSBjb21wbGV4LiAgVmFyaWFudHMgc3VjaCBhcworICogQWN0aXZlU3luYyBoYXZlIGV2ZW4gd29yc2Ugc3RhdHVzIGluIHRlcm1zIG9mIHNwZWNpZmljYXRpb24uCisgKgorICogSW4gc2hvcnQ6ICBpdCdzIGEgcHJvdG9jb2wgY29udHJvbGxlZCBieSAoYW5kIGZvcikgTWljcm9zb2Z0LCBub3QgZm9yIGFuCisgKiBPcGVuIGVjb3N5c3RlbSBvciBtYXJrZXRzLiAgTGludXggc3VwcG9ydHMgaXQgKm9ubHkqIGJlY2F1c2UgTWljcm9zb2Z0CisgKiBkb2Vzbid0IHN1cHBvcnQgdGhlIENEQyBFdGhlcm5ldCBzdGFuZGFyZC4KKyAqCisgKiBUaGUgUk5ESVMgZGF0YSB0cmFuc2ZlciBtb2RlbCBpcyBjb21wbGV4LCB3aXRoIG11bHRpcGxlIEV0aGVybmV0IHBhY2tldHMKKyAqIHBlciBVU0IgbWVzc2FnZSwgYW5kIG91dCBvZiBiYW5kIGRhdGEuICBUaGUgY29udHJvbCBtb2RlbCBpcyBidWlsdCBhcm91bmQKKyAqIHdoYXQncyBlc3NlbnRpYWxseSBhbiAiUk5ESVMgUlBDIiBwcm90b2NvbC4gIEl0J3MgYWxsIHdyYXBwZWQgaW4gYSBDREMgQUNNCisgKiAobW9kZW0sIG5vdCBFdGhlcm5ldCkgdmVuZWVyLCB3aXRoIHRob3NlIEFDTSBkZXNjcmlwdG9ycyBiZWluZyBlbnRpcmVseQorICogdXNlbGVzcyAodGhleSdyZSBpZ25vcmVkKS4gIFJORElTIGV4cGVjdHMgdG8gYmUgdGhlIG9ubHkgZnVuY3Rpb24gaW4gaXRzCisgKiBjb25maWd1cmF0aW9uLCBzbyBpdCdzIG5vIHJlYWwgaGVscCBpZiB5b3UgbmVlZCBjb21wb3NpdGUgZGV2aWNlczsgYW5kCisgKiBpdCBleHBlY3RzIHRvIGJlIHRoZSBmaXJzdCBjb25maWd1cmF0aW9uIHRvby4KKyAqCisgKiBUaGVyZSBpcyBhIHNpbmdsZSB0ZWNobmljYWwgYWR2YW50YWdlIG9mIFJORElTIG92ZXIgQ0RDIEV0aGVybmV0LCBpZiB5b3UKKyAqIGRpc2NvdW50IHRoZSBmbHVmZiB0aGF0IGl0cyBSUEMgY2FuIGJlIG1hZGUgdG8gZGVsaXZlcjogaXQgZG9lc24ndCBuZWVkCisgKiBhIE5PUCBhbHRzZXR0aW5nIGZvciB0aGUgZGF0YSBpbnRlcmZhY2UuICBUaGF0IGxldHMgaXQgd29yayBvbiBzb21lIG9mIHRoZQorICogInNvIHNtYXJ0IGl0J3Mgc3R1cGlkIiBoYXJkd2FyZSB3aGljaCB0YWtlcyBvdmVyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcworICogZnJvbSB0aGUgc29mdHdhcmUsIGFuZCBhZGRzIHJlc3RyaWN0aW9ucyBsaWtlICJubyBhbHRzZXR0aW5ncyIuCisgKgorICogVW5mb3J0dW5hdGVseSBNU0ZUJ3MgUk5ESVMgZHJpdmVycyBhcmUgYnVnZ3kuICBUaGV5IGhhbmcgb3Igb29wcywgYW5kCisgKiBoYXZlIGFsbCBzb3J0cyBvZiBjb250cmFyeS10by1zcGVjaWZpY2F0aW9uIG9kZGl0aWVzIHRoYXQgY2FuIHByZXZlbnQKKyAqIHRoZW0gZnJvbSB3b3JraW5nIHNhbmVseS4gIFNpbmNlIGJ1Z2ZpeGVzIChvciBhY2N1cmF0ZSBzcGVjcywgbGV0dGluZworICogTGludXggd29yayBhcm91bmQgdGhvc2UgYnVncykgYXJlIHVubGlrZWx5IHRvIGV2ZXIgY29tZSBmcm9tIE1TRlQsIHlvdQorICogbWF5IHdhbnQgdG8gYXZvaWQgdXNpbmcgUk5ESVMgb24gcHVyZWx5IG9wZXJhdGlvbmFsIGdyb3VuZHMuCisgKgorICogT21pc3Npb25zIGZyb20gdGhlIFJORElTIDEuMCBzcGVjaWZpY2F0aW9uIGluY2x1ZGU6CisgKgorICogICAtIFBvd2VyIG1hbmFnZW1lbnQgLi4uIHJlZmVyZW5jZXMgZGF0YSB0aGF0J3Mgc2NhdHRlcmVkIGFyb3VuZCBsb3RzCisgKiAgICAgb2Ygb3RoZXIgZG9jdW1lbnRhdGlvbiwgd2hpY2ggaXMgaW5jb3JyZWN0L2luY29tcGxldGUgdGhlcmUgdG9vLgorICoKKyAqICAgLSBUaGVyZSBhcmUgdmFyaW91cyB1bmRvY3VtZW50ZWQgcHJvdG9jb2wgcmVxdWlyZW1lbnRzLCBsaWtlIHRoZSBuZWVkCisgKiAgICAgdG8gc2VuZCBnYXJiYWdlIGluIHNvbWUgY29udHJvbC1PVVQgbWVzc2FnZXMuCisgKgorICogICAtIE1TLVdpbmRvd3MgZHJpdmVycyBzb21ldGltZXMgZW1pdCB1bmRvY3VtZW50ZWQgcmVxdWVzdHMuCisgKi8KKworc3RydWN0IHJuZGlzX2VwX2Rlc2NzIHsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmluOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqb3V0OworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqbm90aWZ5OworfTsKKworc3RydWN0IGZfcm5kaXMgeworCXN0cnVjdCBnZXRoZXIJCQlwb3J0OworCXU4CQkJCWN0cmxfaWQsIGRhdGFfaWQ7CisJdTgJCQkJZXRoYWRkcltFVEhfQUxFTl07CisJaW50CQkJCWNvbmZpZzsKKworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIJKipmc19mdW5jdGlvbjsKKwlzdHJ1Y3Qgcm5kaXNfZXBfZGVzY3MJCWZzOworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIJKipoc19mdW5jdGlvbjsKKwlzdHJ1Y3Qgcm5kaXNfZXBfZGVzY3MJCWhzOworCisJc3RydWN0IHVzYl9lcAkJCSpub3RpZnk7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpub3RpZnlfZGVzYzsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpub3RpZnlfcmVxOworCWF0b21pY190CQkJbm90aWZ5X2NvdW50OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9ybmRpcyAqZnVuY190b19ybmRpcyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXJldHVybiBjb250YWluZXJfb2YoZiwgc3RydWN0IGZfcm5kaXMsIHBvcnQuZnVuYyk7Cit9CisKKy8qIHBlYWsgKHRoZW9yZXRpY2FsKSBidWxrIHRyYW5zZmVyIHJhdGUgaW4gYml0cy1wZXItc2Vjb25kICovCitzdGF0aWMgdW5zaWduZWQgaW50IGJpdHJhdGUoc3RydWN0IHVzYl9nYWRnZXQgKmcpCit7CisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoZykgJiYgZy0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCXJldHVybiAxMyAqIDUxMiAqIDggKiAxMDAwICogODsKKwllbHNlCisJCXJldHVybiAxOSAqICA2NCAqIDEgKiAxMDAwICogODsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqLworCisjZGVmaW5lIExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMJNQkvKiAxIDw8IDUgPT0gMzIgbXNlYyAqLworI2RlZmluZSBTVEFUVVNfQllURUNPVU5UCQk4CS8qIDggYnl0ZXMgZGF0YSAqLworCisKKy8qIGludGVyZmFjZSBkZXNjcmlwdG9yOiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBybmRpc19jb250cm9sX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygcm5kaXNfY29udHJvbF9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLyogLmJJbnRlcmZhY2VOdW1iZXIgPSBEWU5BTUlDICovCisJLyogc3RhdHVzIGVuZHBvaW50IGlzIG9wdGlvbmFsOyB0aGlzIGNvdWxkIGJlIHBhdGNoZWQgbGF0ZXIgKi8KKwkuYk51bUVuZHBvaW50cyA9CTEsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DT01NLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAgIFVTQl9DRENfU1VCQ0xBU1NfQUNNLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPSAgIFVTQl9DRENfQUNNX1BST1RPX1ZFTkRPUiwKKwkvKiAuaUludGVyZmFjZSA9IERZTkFNSUMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY19oZWFkZXJfZGVzYyBoZWFkZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBoZWFkZXJfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKKworCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2NhbGxfbWdtdF9kZXNjcmlwdG9yIGNhbGxfbWdtdF9kZXNjcmlwdG9yIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGNhbGxfbWdtdF9kZXNjcmlwdG9yLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0NBTExfTUFOQUdFTUVOVF9UWVBFLAorCisJLmJtQ2FwYWJpbGl0aWVzID0JMHgwMCwKKwkuYkRhdGFJbnRlcmZhY2UgPQkweDAxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2FjbV9kZXNjcmlwdG9yIGFjbV9kZXNjcmlwdG9yIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGFjbV9kZXNjcmlwdG9yLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0FDTV9UWVBFLAorCisJLmJtQ2FwYWJpbGl0aWVzID0JMHgwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIHJuZGlzX3VuaW9uX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Yocm5kaXNfdW5pb25fZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfVU5JT05fVFlQRSwKKwkvKiAuYk1hc3RlckludGVyZmFjZTAgPQlEWU5BTUlDICovCisJLyogLmJTbGF2ZUludGVyZmFjZTAgPQlEWU5BTUlDICovCit9OworCisvKiB0aGUgZGF0YSBpbnRlcmZhY2UgaGFzIHR3byBidWxrIGVuZHBvaW50cyAqLworCitzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBybmRpc19kYXRhX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygcm5kaXNfZGF0YV9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLyogLmJJbnRlcmZhY2VOdW1iZXIgPSBEWU5BTUlDICovCisJLmJBbHRlcm5hdGVTZXR0aW5nID0JMSwKKwkuYk51bUVuZHBvaW50cyA9CTIsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DRENfREFUQSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JMCwKKwkuYkludGVyZmFjZVByb3RvY29sID0JMCwKKwkvKiAuaUludGVyZmFjZSA9IERZTkFNSUMgKi8KK307CisKKy8qIGZ1bGwgc3BlZWQgc3VwcG9ydDogKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19ub3RpZnlfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfaW5fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19vdXRfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpldGhfZnNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCS8qIGNvbnRyb2wgaW50ZXJmYWNlIG1hdGNoZXMgQUNNLCBub3QgRXRoZXJuZXQgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmcm5kaXNfY29udHJvbF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc191bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19ub3RpZnlfZGVzYywKKwkvKiBkYXRhIGludGVyZmFjZSBoYXMgbm8gYWx0c2V0dGluZyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc19kYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKiBoaWdoIHNwZWVkIHN1cHBvcnQ6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfbm90aWZ5X2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCisJLmJJbnRlcnZhbCA9CQlMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDICsgNCwKK307CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpldGhfaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCS8qIGNvbnRyb2wgaW50ZXJmYWNlIG1hdGNoZXMgQUNNLCBub3QgRXRoZXJuZXQgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmcm5kaXNfY29udHJvbF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc191bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19ub3RpZnlfZGVzYywKKwkvKiBkYXRhIGludGVyZmFjZSBoYXMgbm8gYWx0c2V0dGluZyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc19kYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKiBzdHJpbmcgZGVzY3JpcHRvcnM6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZyBybmRpc19zdHJpbmdfZGVmc1tdID0geworCVswXS5zID0gIlJORElTIENvbW11bmljYXRpb25zIENvbnRyb2wiLAorCVsxXS5zID0gIlJORElTIEV0aGVybmV0IERhdGEiLAorCXsgIH0gLyogZW5kIG9mIGxpc3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzIHJuZGlzX3N0cmluZ190YWJsZSA9IHsKKwkubGFuZ3VhZ2UgPQkJMHgwNDA5LAkvKiBlbi11cyAqLworCS5zdHJpbmdzID0JCXJuZGlzX3N0cmluZ19kZWZzLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKnJuZGlzX3N0cmluZ3NbXSA9IHsKKwkmcm5kaXNfc3RyaW5nX3RhYmxlLAorCU5VTEwsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJuZGlzX2FkZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIHNpemVvZihzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlKSk7CisJaWYgKHNrYikKKwkJcm5kaXNfYWRkX2hkcihza2IpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyB2b2lkIHJuZGlzX3Jlc3BvbnNlX2F2YWlsYWJsZSh2b2lkICpfcm5kaXMpCit7CisJc3RydWN0IGZfcm5kaXMJCQkqcm5kaXMgPSBfcm5kaXM7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkqcmVxID0gcm5kaXMtPm5vdGlmeV9yZXE7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gcm5kaXMtPnBvcnQuZnVuYy5jb25maWctPmNkZXY7CisJX19sZTMyCQkJCSpkYXRhID0gcmVxLT5idWY7CisJaW50CQkJCXN0YXR1czsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmcm5kaXMtPm5vdGlmeV9jb3VudCkpCisJCXJldHVybjsKKworCS8qIFNlbmQgUk5ESVMgUkVTUE9OU0VfQVZBSUxBQkxFIG5vdGlmaWNhdGlvbjsgYQorCSAqIFVTQl9DRENfTk9USUZZX1JFU1BPTlNFX0FWQUlMQUJMRSAic2hvdWxkIiB3b3JrIHRvbworCSAqCisJICogVGhpcyBpcyB0aGUgb25seSBub3RpZmljYXRpb24gZGVmaW5lZCBieSBSTkRJUy4KKwkgKi8KKwlkYXRhWzBdID0gY3B1X3RvX2xlMzIoMSk7CisJZGF0YVsxXSA9IGNwdV90b19sZTMyKDApOworCisJc3RhdHVzID0gdXNiX2VwX3F1ZXVlKHJuZGlzLT5ub3RpZnksIHJlcSwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQlhdG9taWNfZGVjKCZybmRpcy0+bm90aWZ5X2NvdW50KTsKKwkJREJHKGNkZXYsICJub3RpZnkvMCAtLT4gJWRcbiIsIHN0YXR1cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBybmRpc19yZXNwb25zZV9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGZfcm5kaXMJCQkqcm5kaXMgPSByZXEtPmNvbnRleHQ7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gcm5kaXMtPnBvcnQuZnVuYy5jb25maWctPmNkZXY7CisJaW50CQkJCXN0YXR1cyA9IHJlcS0+c3RhdHVzOworCisJLyogYWZ0ZXIgVFg6CisJICogIC0gVVNCX0NEQ19HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFIChlcDAvY29udHJvbCkKKwkgKiAgLSBSTkRJU19SRVNQT05TRV9BVkFJTEFCTEUgKHN0YXR1cy9pcnEpCisJICovCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogY29ubmVjdGlvbiBnb25lICovCisJCWF0b21pY19zZXQoJnJuZGlzLT5ub3RpZnlfY291bnQsIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkcoY2RldiwgIlJORElTICVzIHJlc3BvbnNlIGVycm9yICVkLCAlZC8lZFxuIiwKKwkJCWVwLT5uYW1lLCBzdGF0dXMsCisJCQlyZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgMDoKKwkJaWYgKGVwICE9IHJuZGlzLT5ub3RpZnkpCisJCQlicmVhazsKKworCQkvKiBoYW5kbGUgbXVsdGlwbGUgcGVuZGluZyBSTkRJU19SRVNQT05TRV9BVkFJTEFCTEUKKwkJICogbm90aWZpY2F0aW9ucyBieSByZXNlbmRpbmcgdW50aWwgd2UncmUgZG9uZQorCQkgKi8KKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJuZGlzLT5ub3RpZnlfY291bnQpKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IHVzYl9lcF9xdWV1ZShybmRpcy0+bm90aWZ5LCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKSB7CisJCQlhdG9taWNfZGVjKCZybmRpcy0+bm90aWZ5X2NvdW50KTsKKwkJCURCRyhjZGV2LCAibm90aWZ5LzEgLS0+ICVkXG4iLCBzdGF0dXMpOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcm5kaXNfY29tbWFuZF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGZfcm5kaXMJCQkqcm5kaXMgPSByZXEtPmNvbnRleHQ7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gcm5kaXMtPnBvcnQuZnVuYy5jb25maWctPmNkZXY7CisJaW50CQkJCXN0YXR1czsKKworCS8qIHJlY2VpdmVkIFJORElTIGNvbW1hbmQgZnJvbSBVU0JfQ0RDX1NFTkRfRU5DQVBTVUxBVEVEX0NPTU1BTkQgKi8KKy8vCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwlzdGF0dXMgPSBybmRpc19tc2dfcGFyc2VyKHJuZGlzLT5jb25maWcsICh1OCAqKSByZXEtPmJ1Zik7CisJaWYgKHN0YXR1cyA8IDApCisJCUVSUk9SKGNkZXYsICJSTkRJUyBjb21tYW5kIGVycm9yICVkLCAlZC8lZFxuIiwKKwkJCXN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKy8vCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworfQorCitzdGF0aWMgaW50CitybmRpc19zZXR1cChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCBjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCBmX3JuZGlzCQkqcm5kaXMgPSBmdW5jX3RvX3JuZGlzKGYpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGNkZXYtPnJlcTsKKwlpbnQJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCXUxNgkJCXdfaW5kZXggPSBsZTE2X3RvX2NwdShjdHJsLT53SW5kZXgpOworCXUxNgkJCXdfdmFsdWUgPSBsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpOworCXUxNgkJCXdfbGVuZ3RoID0gbGUxNl90b19jcHUoY3RybC0+d0xlbmd0aCk7CisKKwkvKiBjb21wb3NpdGUgZHJpdmVyIGluZnJhc3RydWN0dXJlIGhhbmRsZXMgZXZlcnl0aGluZyBleGNlcHQKKwkgKiBDREMgY2xhc3MgbWVzc2FnZXM7IGludGVyZmFjZSBhY3RpdmF0aW9uIHVzZXMgc2V0X2FsdCgpLgorCSAqLworCXN3aXRjaCAoKGN0cmwtPmJSZXF1ZXN0VHlwZSA8PCA4KSB8IGN0cmwtPmJSZXF1ZXN0KSB7CisKKwkvKiBSTkRJUyB1c2VzIHRoZSBDREMgY29tbWFuZCBlbmNhcHN1bGF0aW9uIG1lY2hhbmlzbSB0byBpbXBsZW1lbnQKKwkgKiBhbiBSUEMgc2NoZW1lLCB3aXRoIG11Y2ggZ2V0dGluZy9zZXR0aW5nIG9mIGF0dHJpYnV0ZXMgYnkgT0lELgorCSAqLworCWNhc2UgKChVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkgPDwgOCkKKwkJCXwgVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EOgorCQlpZiAod19sZW5ndGggPiByZXEtPmxlbmd0aCB8fCB3X3ZhbHVlCisJCQkJfHwgd19pbmRleCAhPSBybmRpcy0+Y3RybF9pZCkKKwkJCWdvdG8gaW52YWxpZDsKKwkJLyogcmVhZCB0aGUgcmVxdWVzdDsgcHJvY2VzcyBpdCBsYXRlciAqLworCQl2YWx1ZSA9IHdfbGVuZ3RoOworCQlyZXEtPmNvbXBsZXRlID0gcm5kaXNfY29tbWFuZF9jb21wbGV0ZTsKKwkJcmVxLT5jb250ZXh0ID0gcm5kaXM7CisJCS8qIGxhdGVyLCBybmRpc19yZXNwb25zZV9hdmFpbGFibGUoKSBzZW5kcyBhIG5vdGlmaWNhdGlvbiAqLworCQlicmVhazsKKworCWNhc2UgKChVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFKSA8PCA4KQorCQkJfCBVU0JfQ0RDX0dFVF9FTkNBUFNVTEFURURfUkVTUE9OU0U6CisJCWlmICh3X3ZhbHVlIHx8IHdfaW5kZXggIT0gcm5kaXMtPmN0cmxfaWQpCisJCQlnb3RvIGludmFsaWQ7CisJCWVsc2UgeworCQkJdTggKmJ1ZjsKKwkJCXUzMiBuOworCisJCQkvKiByZXR1cm4gdGhlIHJlc3VsdCAqLworCQkJYnVmID0gcm5kaXNfZ2V0X25leHRfcmVzcG9uc2Uocm5kaXMtPmNvbmZpZywgJm4pOworCQkJaWYgKGJ1ZikgeworCQkJCW1lbWNweShyZXEtPmJ1ZiwgYnVmLCBuKTsKKwkJCQlyZXEtPmNvbXBsZXRlID0gcm5kaXNfcmVzcG9uc2VfY29tcGxldGU7CisJCQkJcm5kaXNfZnJlZV9yZXNwb25zZShybmRpcy0+Y29uZmlnLCBidWYpOworCQkJCXZhbHVlID0gbjsKKwkJCX0KKwkJCS8qIGVsc2Ugc3RhbGxzIC4uLiBzcGVjIHNheXMgdG8gYXZvaWQgdGhhdCAqLworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKK2ludmFsaWQ6CisJCVZEQkcoY2RldiwgImludmFsaWQgY29udHJvbCByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKwl9CisKKwkvKiByZXNwb25kIHdpdGggZGF0YSB0cmFuc2ZlciBvciBzdGF0dXMgcGhhc2U/ICovCisJaWYgKHZhbHVlID49IDApIHsKKwkJREJHKGNkZXYsICJybmRpcyByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKwkJcmVxLT56ZXJvID0gMDsKKwkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKKwkJdmFsdWUgPSB1c2JfZXBfcXVldWUoY2Rldi0+Z2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCWlmICh2YWx1ZSA8IDApCisJCQlFUlJPUihjZGV2LCAicm5kaXMgcmVzcG9uc2Ugb24gZXJyICVkXG4iLCB2YWx1ZSk7CisJfQorCisJLyogZGV2aWNlIGVpdGhlciBzdGFsbHMgKHZhbHVlIDwgMCkgb3IgcmVwb3J0cyBzdWNjZXNzICovCisJcmV0dXJuIHZhbHVlOworfQorCisKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmLCB1bnNpZ25lZCBhbHQpCit7CisJc3RydWN0IGZfcm5kaXMJCSpybmRpcyA9IGZ1bmNfdG9fcm5kaXMoZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJLyogd2Uga25vdyBhbHQgPT0gMCAqLworCisJaWYgKGludGYgPT0gcm5kaXMtPmN0cmxfaWQpIHsKKwkJaWYgKHJuZGlzLT5ub3RpZnktPmRyaXZlcl9kYXRhKSB7CisJCQlWREJHKGNkZXYsICJyZXNldCBybmRpcyBjb250cm9sICVkXG4iLCBpbnRmKTsKKwkJCXVzYl9lcF9kaXNhYmxlKHJuZGlzLT5ub3RpZnkpOworCQl9IGVsc2UgeworCQkJVkRCRyhjZGV2LCAiaW5pdCBybmRpcyBjdHJsICVkXG4iLCBpbnRmKTsKKwkJCXJuZGlzLT5ub3RpZnlfZGVzYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCXJuZGlzLT5ocy5ub3RpZnksCisJCQkJCXJuZGlzLT5mcy5ub3RpZnkpOworCQl9CisJCXVzYl9lcF9lbmFibGUocm5kaXMtPm5vdGlmeSwgcm5kaXMtPm5vdGlmeV9kZXNjKTsKKwkJcm5kaXMtPm5vdGlmeS0+ZHJpdmVyX2RhdGEgPSBybmRpczsKKworCX0gZWxzZSBpZiAoaW50ZiA9PSBybmRpcy0+ZGF0YV9pZCkgeworCQlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCisJCWlmIChybmRpcy0+cG9ydC5pbl9lcC0+ZHJpdmVyX2RhdGEpIHsKKwkJCURCRyhjZGV2LCAicmVzZXQgcm5kaXNcbiIpOworCQkJZ2V0aGVyX2Rpc2Nvbm5lY3QoJnJuZGlzLT5wb3J0KTsKKwkJfSBlbHNlIHsKKwkJCURCRyhjZGV2LCAiaW5pdCBybmRpc1xuIik7CisJCQlybmRpcy0+cG9ydC5pbiA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCXJuZGlzLT5ocy5pbiwgcm5kaXMtPmZzLmluKTsKKwkJCXJuZGlzLT5wb3J0Lm91dCA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCXJuZGlzLT5ocy5vdXQsIHJuZGlzLT5mcy5vdXQpOworCQl9CisKKwkJLyogQXZvaWQgWkxQczsgdGhleSBjYW4gYmUgdHJvdWJsZXNvbWUuICovCisJCXJuZGlzLT5wb3J0LmlzX3pscF9vayA9IGZhbHNlOworCisJCS8qIFJORElTIHNob3VsZCBiZSBpbiB0aGUgIlJORElTIHVuaW5pdGlhbGl6ZWQiIHN0YXRlLAorCQkgKiBlaXRoZXIgbmV2ZXIgYWN0aXZhdGVkIG9yIGFmdGVyIHJuZGlzX3VuaW5pdCgpLgorCQkgKgorCQkgKiBXZSBkb24ndCB3YW50IGRhdGEgdG8gZmxvdyBoZXJlIHVudGlsIGEgbm9uemVybyBwYWNrZXQKKwkJICogZmlsdGVyIGlzIHNldCwgYXQgd2hpY2ggcG9pbnQgaXQgZW50ZXJzICJSTkRJUyBkYXRhCisJCSAqIGluaXRpYWxpemVkIiBzdGF0ZSAuLi4gYnV0IHdlIGRvIHdhbnQgdGhlIGVuZHBvaW50cworCQkgKiB0byBiZSBhY3RpdmF0ZWQuICBJdCdzIGEgc3RyYW5nZSBsaXR0bGUgc3RhdGUuCisJCSAqCisJCSAqIFJFVklTSVQgdGhlIFJORElTIGdhZGdldCBjb2RlIGhhcyBkb25lIHRoaXMgd3JvbmcgZm9yIGEKKwkJICogdmVyeSBsb25nIHRpbWUuICBXZSBuZWVkIGFub3RoZXIgY2FsbCB0byB0aGUgbGluayBsYXllcgorCQkgKiBjb2RlIC0tIGdldGhlcl91cGRvd24oLi4uYm9vbCkgbWF5YmUgLS0gdG8gZG8gaXQgcmlnaHQuCisJCSAqLworCQlybmRpcy0+cG9ydC5jZGNfZmlsdGVyID0gMDsKKworCQlEQkcoY2RldiwgIlJORElTIFJYL1RYIGVhcmx5IGFjdGl2YXRpb24gLi4uIFxuIik7CisJCW5ldCA9IGdldGhlcl9jb25uZWN0KCZybmRpcy0+cG9ydCk7CisJCWlmIChJU19FUlIobmV0KSkKKwkJCXJldHVybiBQVFJfRVJSKG5ldCk7CisKKwkJcm5kaXNfc2V0X3BhcmFtX2RldihybmRpcy0+Y29uZmlnLCBuZXQsCisJCQkJJnJuZGlzLT5wb3J0LmNkY19maWx0ZXIpOworCX0gZWxzZQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm4gMDsKK2ZhaWw6CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIHJuZGlzX2Rpc2FibGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9ybmRpcwkJKnJuZGlzID0gZnVuY190b19ybmRpcyhmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwlpZiAoIXJuZGlzLT5ub3RpZnktPmRyaXZlcl9kYXRhKQorCQlyZXR1cm47CisKKwlEQkcoY2RldiwgInJuZGlzIGRlYWN0aXZhdGVkXG4iKTsKKworCXJuZGlzX3VuaW5pdChybmRpcy0+Y29uZmlnKTsKKwlnZXRoZXJfZGlzY29ubmVjdCgmcm5kaXMtPnBvcnQpOworCisJdXNiX2VwX2Rpc2FibGUocm5kaXMtPm5vdGlmeSk7CisJcm5kaXMtPm5vdGlmeS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVGhpcyBpc24ndCBxdWl0ZSB0aGUgc2FtZSBtZWNoYW5pc20gYXMgQ0RDIEV0aGVybmV0LCBzaW5jZSB0aGUKKyAqIG5vdGlmaWNhdGlvbiBzY2hlbWUgcGFzc2VzIGxlc3MgZGF0YSwgYnV0IHRoZSBzYW1lIHNldCBvZiBsaW5rCisgKiBzdGF0ZXMgbXVzdCBiZSB0ZXN0ZWQuICBBIGtleSBkaWZmZXJlbmNlIGlzIHRoYXQgYWx0c2V0dGluZ3MgYXJlCisgKiBub3QgdXNlZCB0byB0ZWxsIHdoZXRoZXIgdGhlIGxpbmsgc2hvdWxkIHNlbmQgcGFja2V0cyBvciBub3QuCisgKi8KKworc3RhdGljIHZvaWQgcm5kaXNfb3BlbihzdHJ1Y3QgZ2V0aGVyICpnZXRoKQoreworCXN0cnVjdCBmX3JuZGlzCQkqcm5kaXMgPSBmdW5jX3RvX3JuZGlzKCZnZXRoLT5mdW5jKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBnZXRoLT5mdW5jLmNvbmZpZy0+Y2RldjsKKworCURCRyhjZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXJuZGlzX3NldF9wYXJhbV9tZWRpdW0ocm5kaXMtPmNvbmZpZywgTkRJU19NRURJVU1fODAyXzMsCisJCQkJYml0cmF0ZShjZGV2LT5nYWRnZXQpIC8gMTAwKTsKKwlybmRpc19zaWduYWxfY29ubmVjdChybmRpcy0+Y29uZmlnKTsKK30KKworc3RhdGljIHZvaWQgcm5kaXNfY2xvc2Uoc3RydWN0IGdldGhlciAqZ2V0aCkKK3sKKwlzdHJ1Y3QgZl9ybmRpcwkJKnJuZGlzID0gZnVuY190b19ybmRpcygmZ2V0aC0+ZnVuYyk7CisKKwlEQkcoZ2V0aC0+ZnVuYy5jb25maWctPmNkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJcm5kaXNfc2V0X3BhcmFtX21lZGl1bShybmRpcy0+Y29uZmlnLCBORElTX01FRElVTV84MDJfMywgMCk7CisJcm5kaXNfc2lnbmFsX2Rpc2Nvbm5lY3Qocm5kaXMtPmNvbmZpZyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGV0aGVybmV0IGZ1bmN0aW9uIGRyaXZlciBzZXR1cC9iaW5kaW5nICovCisKK3N0YXRpYyBpbnQgX19pbml0CitybmRpc19iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBjLT5jZGV2OworCXN0cnVjdCBmX3JuZGlzCQkqcm5kaXMgPSBmdW5jX3RvX3JuZGlzKGYpOworCWludAkJCXN0YXR1czsKKwlzdHJ1Y3QgdXNiX2VwCQkqZXA7CisKKwkvKiBhbGxvY2F0ZSBpbnN0YW5jZS1zcGVjaWZpYyBpbnRlcmZhY2UgSURzICovCisJc3RhdHVzID0gdXNiX2ludGVyZmFjZV9pZChjLCBmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCXJuZGlzLT5jdHJsX2lkID0gc3RhdHVzOworCisJcm5kaXNfY29udHJvbF9pbnRmLmJJbnRlcmZhY2VOdW1iZXIgPSBzdGF0dXM7CisJcm5kaXNfdW5pb25fZGVzYy5iTWFzdGVySW50ZXJmYWNlMCA9IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlybmRpcy0+ZGF0YV9pZCA9IHN0YXR1czsKKworCXJuZGlzX2RhdGFfaW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCXJuZGlzX3VuaW9uX2Rlc2MuYlNsYXZlSW50ZXJmYWNlMCA9IHN0YXR1czsKKworCXN0YXR1cyA9IC1FTk9ERVY7CisKKwkvKiBhbGxvY2F0ZSBpbnN0YW5jZS1zcGVjaWZpYyBlbmRwb2ludHMgKi8KKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2luX2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwlybmRpcy0+cG9ydC5pbl9lcCA9IGVwOworCWVwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCisKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX291dF9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGZhaWw7CisJcm5kaXMtPnBvcnQub3V0X2VwID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCS8qIE5PVEU6ICBhIHN0YXR1cy9ub3RpZmljYXRpb24gZW5kcG9pbnQgaXMsIHN0cmljdGx5IHNwZWFraW5nLAorCSAqIG9wdGlvbmFsLiAgV2UgZG9uJ3QgdHJlYXQgaXQgdGhhdCB3YXkgdGhvdWdoISAgSXQncyBzaW1wbGVyLAorCSAqIGFuZCBzb21lIG5ld2VyIHByb2ZpbGVzIGRvbid0IHRyZWF0IGl0IGFzIG9wdGlvbmFsLgorCSAqLworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfbm90aWZ5X2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwlybmRpcy0+bm90aWZ5ID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCXN0YXR1cyA9IC1FTk9NRU07CisKKwkvKiBhbGxvY2F0ZSBub3RpZmljYXRpb24gcmVxdWVzdCBhbmQgYnVmZmVyICovCisJcm5kaXMtPm5vdGlmeV9yZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFybmRpcy0+bm90aWZ5X3JlcSkKKwkJZ290byBmYWlsOworCXJuZGlzLT5ub3RpZnlfcmVxLT5idWYgPSBrbWFsbG9jKFNUQVRVU19CWVRFQ09VTlQsIEdGUF9LRVJORUwpOworCWlmICghcm5kaXMtPm5vdGlmeV9yZXEtPmJ1ZikKKwkJZ290byBmYWlsOworCXJuZGlzLT5ub3RpZnlfcmVxLT5sZW5ndGggPSBTVEFUVVNfQllURUNPVU5UOworCXJuZGlzLT5ub3RpZnlfcmVxLT5jb250ZXh0ID0gcm5kaXM7CisJcm5kaXMtPm5vdGlmeV9yZXEtPmNvbXBsZXRlID0gcm5kaXNfcmVzcG9uc2VfY29tcGxldGU7CisKKwkvKiBjb3B5IGRlc2NyaXB0b3JzLCBhbmQgdHJhY2sgZW5kcG9pbnQgY29waWVzICovCisJZi0+ZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhldGhfZnNfZnVuY3Rpb24pOworCWlmICghZi0+ZGVzY3JpcHRvcnMpCisJCWdvdG8gZmFpbDsKKworCXJuZGlzLT5mcy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9mc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfaW5fZGVzYyk7CisJcm5kaXMtPmZzLm91dCA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9mc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfb3V0X2Rlc2MpOworCXJuZGlzLT5mcy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChldGhfZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX25vdGlmeV9kZXNjKTsKKworCS8qIHN1cHBvcnQgYWxsIHJlbGV2YW50IGhhcmR3YXJlIHNwZWVkcy4uLiB3ZSBleHBlY3QgdGhhdCB3aGVuCisJICogaGFyZHdhcmUgaXMgZHVhbCBzcGVlZCwgYWxsIGJ1bGstY2FwYWJsZSBlbmRwb2ludHMgd29yayBhdAorCSAqIGJvdGggc3BlZWRzCisJICovCisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgeworCQloc19pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJaHNfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKworCQkvKiBjb3B5IGRlc2NyaXB0b3JzLCBhbmQgdHJhY2sgZW5kcG9pbnQgY29waWVzICovCisJCWYtPmhzX2Rlc2NyaXB0b3JzID0gdXNiX2NvcHlfZGVzY3JpcHRvcnMoZXRoX2hzX2Z1bmN0aW9uKTsKKworCQlpZiAoIWYtPmhzX2Rlc2NyaXB0b3JzKQorCQkJZ290byBmYWlsOworCisJCXJuZGlzLT5ocy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9oc19mdW5jdGlvbiwKKwkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX2luX2Rlc2MpOworCQlybmRpcy0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZXRoX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfb3V0X2Rlc2MpOworCX0KKworCXJuZGlzLT5wb3J0Lm9wZW4gPSBybmRpc19vcGVuOworCXJuZGlzLT5wb3J0LmNsb3NlID0gcm5kaXNfY2xvc2U7CisKKwlzdGF0dXMgPSBybmRpc19yZWdpc3RlcihybmRpc19yZXNwb25zZV9hdmFpbGFibGUsIHJuZGlzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCXJuZGlzLT5jb25maWcgPSBzdGF0dXM7CisKKwlybmRpc19zZXRfcGFyYW1fbWVkaXVtKHJuZGlzLT5jb25maWcsIE5ESVNfTUVESVVNXzgwMl8zLCAwKTsKKwlybmRpc19zZXRfaG9zdF9tYWMocm5kaXMtPmNvbmZpZywgcm5kaXMtPmV0aGFkZHIpOworCisjaWYgMAorLy8gRklYTUUKKwlpZiAocm5kaXNfc2V0X3BhcmFtX3ZlbmRvcihybmRpcy0+Y29uZmlnLCB2ZW5kb3JJRCwKKwkJCQltYW51ZmFjdHVyZXIpKQorCQlnb3RvIGZhaWwwOworI2VuZGlmCisKKwkvKiBOT1RFOiAgYWxsIHRoYXQgaXMgZG9uZSB3aXRob3V0IGtub3dpbmcgb3IgY2FyaW5nIGFib3V0CisJICogdGhlIG5ldHdvcmsgbGluayAuLi4gd2hpY2ggaXMgdW5hdmFpbGFibGUgdG8gdGhpcyBjb2RlCisJICogdW50aWwgd2UncmUgYWN0aXZhdGVkIHZpYSBzZXRfYWx0KCkuCisJICovCisKKwlEQkcoY2RldiwgIlJORElTOiAlcyBzcGVlZCBJTi8lcyBPVVQvJXMgTk9USUZZLyVzXG4iLAorCQkJZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpID8gImR1YWwiIDogImZ1bGwiLAorCQkJcm5kaXMtPnBvcnQuaW5fZXAtPm5hbWUsIHJuZGlzLT5wb3J0Lm91dF9lcC0+bmFtZSwKKwkJCXJuZGlzLT5ub3RpZnktPm5hbWUpOworCXJldHVybiAwOworCitmYWlsOgorCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkgJiYgZi0+aHNfZGVzY3JpcHRvcnMpCisJCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmhzX2Rlc2NyaXB0b3JzKTsKKwlpZiAoZi0+ZGVzY3JpcHRvcnMpCisJCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmRlc2NyaXB0b3JzKTsKKworCWlmIChybmRpcy0+bm90aWZ5X3JlcSkgeworCQlrZnJlZShybmRpcy0+bm90aWZ5X3JlcS0+YnVmKTsKKwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChybmRpcy0+bm90aWZ5LCBybmRpcy0+bm90aWZ5X3JlcSk7CisJfQorCisJLyogd2UgbWlnaHQgYXMgd2VsbCByZWxlYXNlIG91ciBjbGFpbXMgb24gZW5kcG9pbnRzICovCisJaWYgKHJuZGlzLT5ub3RpZnkpCisJCXJuZGlzLT5ub3RpZnktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlpZiAocm5kaXMtPnBvcnQub3V0KQorCQlybmRpcy0+cG9ydC5vdXRfZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlpZiAocm5kaXMtPnBvcnQuaW4pCisJCXJuZGlzLT5wb3J0LmluX2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlFUlJPUihjZGV2LCAiJXM6IGNhbid0IGJpbmQsIGVyciAlZFxuIiwgZi0+bmFtZSwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkCitybmRpc191bmJpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCBmX3JuZGlzCQkqcm5kaXMgPSBmdW5jX3RvX3JuZGlzKGYpOworCisJcm5kaXNfZGVyZWdpc3RlcihybmRpcy0+Y29uZmlnKTsKKwlybmRpc19leGl0KCk7CisKKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKQorCQl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5oc19kZXNjcmlwdG9ycyk7CisJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+ZGVzY3JpcHRvcnMpOworCisJa2ZyZWUocm5kaXMtPm5vdGlmeV9yZXEtPmJ1Zik7CisJdXNiX2VwX2ZyZWVfcmVxdWVzdChybmRpcy0+bm90aWZ5LCBybmRpcy0+bm90aWZ5X3JlcSk7CisKKwlrZnJlZShybmRpcyk7Cit9CisKKy8qIFNvbWUgY29udHJvbGxlcnMgY2FuJ3Qgc3VwcG9ydCBSTkRJUyAuLi4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3VwcG9ydF9ybmRpcyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCit7CisJLyogb25seSB0d28gZW5kcG9pbnRzIG9uIHNhMTEwMCAqLworCWlmIChnYWRnZXRfaXNfc2ExMTAwKGMtPmNkZXYtPmdhZGdldCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyAqcHJlc3VtYWJseSogZmluZSAqLworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHJuZGlzX2JpbmRfY29uZmlnIC0gYWRkIFJORElTIG5ldHdvcmsgbGluayB0byBhIGNvbmZpZ3VyYXRpb24KKyAqIEBjOiB0aGUgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0IHRoZSBuZXR3b3JrIGxpbmsKKyAqIEBldGhhZGRyOiBhIGJ1ZmZlciBpbiB3aGljaCB0aGUgZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgaG9zdCBzaWRlCisgKglzaWRlIG9mIHRoZSBsaW5rIHdhcyByZWNvcmRlZAorICogQ29udGV4dDogc2luZ2xlIHRocmVhZGVkIGR1cmluZyBnYWRnZXQgc2V0dXAKKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIGNhbGxlZCBAZ2V0aGVyX3NldHVwKCkuICBDYWxsZXIgaXMgYWxzbyByZXNwb25zaWJsZQorICogZm9yIGNhbGxpbmcgQGdldGhlcl9jbGVhbnVwKCkgYmVmb3JlIG1vZHVsZSB1bmxvYWQuCisgKi8KK2ludCBfX2luaXQgcm5kaXNfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBldGhhZGRyW0VUSF9BTEVOXSkKK3sKKwlzdHJ1Y3QgZl9ybmRpcwkqcm5kaXM7CisJaW50CQlzdGF0dXM7CisKKwlpZiAoIWNhbl9zdXBwb3J0X3JuZGlzKGMpIHx8ICFldGhhZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG1heWJlIGFsbG9jYXRlIGRldmljZS1nbG9iYWwgc3RyaW5nIElEcyAqLworCWlmIChybmRpc19zdHJpbmdfZGVmc1swXS5pZCA9PSAwKSB7CisKKwkJLyogLi4uIGFuZCBzZXR1cCBSTkRJUyBpdHNlbGYgKi8KKwkJc3RhdHVzID0gcm5kaXNfaW5pdCgpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisKKwkJLyogY29udHJvbCBpbnRlcmZhY2UgbGFiZWwgKi8KKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQlybmRpc19zdHJpbmdfZGVmc1swXS5pZCA9IHN0YXR1czsKKwkJcm5kaXNfY29udHJvbF9pbnRmLmlJbnRlcmZhY2UgPSBzdGF0dXM7CisKKwkJLyogZGF0YSBpbnRlcmZhY2UgbGFiZWwgKi8KKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQlybmRpc19zdHJpbmdfZGVmc1sxXS5pZCA9IHN0YXR1czsKKwkJcm5kaXNfZGF0YV9pbnRmLmlJbnRlcmZhY2UgPSBzdGF0dXM7CisJfQorCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIG5ldyBpbnN0YW5jZSAqLworCXN0YXR1cyA9IC1FTk9NRU07CisJcm5kaXMgPSBremFsbG9jKHNpemVvZiAqcm5kaXMsIEdGUF9LRVJORUwpOworCWlmICghcm5kaXMpCisJCWdvdG8gZmFpbDsKKworCW1lbWNweShybmRpcy0+ZXRoYWRkciwgZXRoYWRkciwgRVRIX0FMRU4pOworCisJLyogUk5ESVMgYWN0aXZhdGVzIHdoZW4gdGhlIGhvc3QgY2hhbmdlcyB0aGlzIGZpbHRlciAqLworCXJuZGlzLT5wb3J0LmNkY19maWx0ZXIgPSAwOworCisJLyogUk5ESVMgaGFzIHNwZWNpYWwgKGFuZCBjb21wbGV4KSBmcmFtaW5nICovCisJcm5kaXMtPnBvcnQuaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlKTsKKwlybmRpcy0+cG9ydC53cmFwID0gcm5kaXNfYWRkX2hlYWRlcjsKKwlybmRpcy0+cG9ydC51bndyYXAgPSBybmRpc19ybV9oZHI7CisKKwlybmRpcy0+cG9ydC5mdW5jLm5hbWUgPSAicm5kaXMiOworCXJuZGlzLT5wb3J0LmZ1bmMuc3RyaW5ncyA9IHJuZGlzX3N0cmluZ3M7CisJLyogZGVzY3JpcHRvcnMgYXJlIHBlci1pbnN0YW5jZSBjb3BpZXMgKi8KKwlybmRpcy0+cG9ydC5mdW5jLmJpbmQgPSBybmRpc19iaW5kOworCXJuZGlzLT5wb3J0LmZ1bmMudW5iaW5kID0gcm5kaXNfdW5iaW5kOworCXJuZGlzLT5wb3J0LmZ1bmMuc2V0X2FsdCA9IHJuZGlzX3NldF9hbHQ7CisJcm5kaXMtPnBvcnQuZnVuYy5zZXR1cCA9IHJuZGlzX3NldHVwOworCXJuZGlzLT5wb3J0LmZ1bmMuZGlzYWJsZSA9IHJuZGlzX2Rpc2FibGU7CisKKwlzdGF0dXMgPSB1c2JfYWRkX2Z1bmN0aW9uKGMsICZybmRpcy0+cG9ydC5mdW5jKTsKKwlpZiAoc3RhdHVzKSB7CisJCWtmcmVlKHJuZGlzKTsKK2ZhaWw6CisJCXJuZGlzX2V4aXQoKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2YmRlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogZl9zZXJpYWwuYyAtIGdlbmVyaWMgVVNCIHNlcmlhbCBmdW5jdGlvbiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogZWl0aGVyIHZlcnNpb24gMiBvZiB0aGF0IExpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ1X3NlcmlhbC5oIgorI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHBhY2thZ2VzIGEgc2ltcGxlICJnZW5lcmljIHNlcmlhbCIgcG9ydCB3aXRoIG5vIHJlYWwKKyAqIGNvbnRyb2wgbWVjaGFuaXNtcywganVzdCByYXcgZGF0YSB0cmFuc2ZlciBvdmVyIHR3byBidWxrIGVuZHBvaW50cy4KKyAqCisgKiBCZWNhdXNlIGl0J3Mgbm90IHN0YW5kYXJkaXplZCwgdGhpcyBpc24ndCBhcyBpbnRlcm9wZXJhYmxlIGFzIHRoZQorICogQ0RDIEFDTSBkcml2ZXIuICBIb3dldmVyLCBmb3IgbWFueSBwdXJwb3NlcyBpdCdzIGp1c3QgYXMgZnVuY3Rpb25hbAorICogaWYgeW91IGNhbiBhcnJhbmdlIGFwcHJvcHJpYXRlIGhvc3Qgc2lkZSBkcml2ZXJzLgorICovCisKK3N0cnVjdCBnc2VyX2Rlc2NzIHsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmluOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqb3V0OworfTsKKworc3RydWN0IGZfZ3NlciB7CisJc3RydWN0IGdzZXJpYWwJCQlwb3J0OworCXU4CQkJCWRhdGFfaWQ7CisJdTgJCQkJcG9ydF9udW07CisKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyCSoqZnNfZnVuY3Rpb247CisJc3RydWN0IGdzZXJfZGVzY3MJCWZzOworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIJKipoc19mdW5jdGlvbjsKKwlzdHJ1Y3QgZ3Nlcl9kZXNjcwkJaHM7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmX2dzZXIgKmZ1bmNfdG9fZ3NlcihzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXJldHVybiBjb250YWluZXJfb2YoZiwgc3RydWN0IGZfZ3NlciwgcG9ydC5mdW5jKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaW50ZXJmYWNlIGRlc2NyaXB0b3I6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGdzZXJfaW50ZXJmYWNlX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfSU5URVJGQUNFX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisJLyogLmJJbnRlcmZhY2VOdW1iZXIgPSBEWU5BTUlDICovCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCisJLyogLmlJbnRlcmZhY2UgPSBEWU5BTUlDICovCit9OworCisvKiBmdWxsIHNwZWVkIHN1cHBvcnQ6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3Nlcl9mc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc2VyX2ZzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpnc2VyX2ZzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3Nlcl9pbnRlcmZhY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3Nlcl9mc19pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc2VyX2ZzX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKiBoaWdoIHNwZWVkIHN1cHBvcnQ6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3Nlcl9oc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc2VyX2hzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzZXJfaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc2VyX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc2VyX2hzX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzZXJfaHNfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIHN0cmluZyBkZXNjcmlwdG9yczogKi8KKworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nIGdzZXJfc3RyaW5nX2RlZnNbXSA9IHsKKwlbMF0ucyA9ICJHZW5lcmljIFNlcmlhbCIsCisJeyAgfSAvKiBlbmQgb2YgbGlzdCAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgZ3Nlcl9zdHJpbmdfdGFibGUgPSB7CisJLmxhbmd1YWdlID0JCTB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncyA9CQlnc2VyX3N0cmluZ19kZWZzLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKmdzZXJfc3RyaW5nc1tdID0geworCSZnc2VyX3N0cmluZ190YWJsZSwKKwlOVUxMLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBnc2VyX3NldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwgdW5zaWduZWQgaW50ZiwgdW5zaWduZWQgYWx0KQoreworCXN0cnVjdCBmX2dzZXIJCSpnc2VyID0gZnVuY190b19nc2VyKGYpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKKworCS8qIHdlIGtub3cgYWx0ID09IDAsIHNvIHRoaXMgaXMgYW4gYWN0aXZhdGlvbiBvciBhIHJlc2V0ICovCisKKwlpZiAoZ3Nlci0+cG9ydC5pbi0+ZHJpdmVyX2RhdGEpIHsKKwkJREJHKGNkZXYsICJyZXNldCBnZW5lcmljIHR0eUdTJWRcbiIsIGdzZXItPnBvcnRfbnVtKTsKKwkJZ3NlcmlhbF9kaXNjb25uZWN0KCZnc2VyLT5wb3J0KTsKKwl9IGVsc2UgeworCQlEQkcoY2RldiwgImFjdGl2YXRlIGdlbmVyaWMgdHR5R1MlZFxuIiwgZ3Nlci0+cG9ydF9udW0pOworCQlnc2VyLT5wb3J0LmluX2Rlc2MgPSBlcF9jaG9vc2UoY2Rldi0+Z2FkZ2V0LAorCQkJCWdzZXItPmhzLmluLCBnc2VyLT5mcy5pbik7CisJCWdzZXItPnBvcnQub3V0X2Rlc2MgPSBlcF9jaG9vc2UoY2Rldi0+Z2FkZ2V0LAorCQkJCWdzZXItPmhzLm91dCwgZ3Nlci0+ZnMub3V0KTsKKwl9CisJZ3NlcmlhbF9jb25uZWN0KCZnc2VyLT5wb3J0LCBnc2VyLT5wb3J0X251bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdzZXJfZGlzYWJsZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCBmX2dzZXIJKmdzZXIgPSBmdW5jX3RvX2dzZXIoZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJREJHKGNkZXYsICJnZW5lcmljIHR0eUdTJWQgZGVhY3RpdmF0ZWRcbiIsIGdzZXItPnBvcnRfbnVtKTsKKwlnc2VyaWFsX2Rpc2Nvbm5lY3QoJmdzZXItPnBvcnQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBzZXJpYWwgZnVuY3Rpb24gZHJpdmVyIHNldHVwL2JpbmRpbmcgKi8KKworc3RhdGljIGludCBfX2luaXQKK2dzZXJfYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gYy0+Y2RldjsKKwlzdHJ1Y3QgZl9nc2VyCQkqZ3NlciA9IGZ1bmNfdG9fZ3NlcihmKTsKKwlpbnQJCQlzdGF0dXM7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgaW50ZXJmYWNlIElEcyAqLworCXN0YXR1cyA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlnc2VyLT5kYXRhX2lkID0gc3RhdHVzOworCWdzZXJfaW50ZXJmYWNlX2Rlc2MuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKworCXN0YXR1cyA9IC1FTk9ERVY7CisKKwkvKiBhbGxvY2F0ZSBpbnN0YW5jZS1zcGVjaWZpYyBlbmRwb2ludHMgKi8KKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmdzZXJfZnNfaW5fZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBmYWlsOworCWdzZXItPnBvcnQuaW4gPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZnc2VyX2ZzX291dF9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGZhaWw7CisJZ3Nlci0+cG9ydC5vdXQgPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLworCisJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLworCWYtPmRlc2NyaXB0b3JzID0gdXNiX2NvcHlfZGVzY3JpcHRvcnMoZ3Nlcl9mc19mdW5jdGlvbik7CisKKwlnc2VyLT5mcy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGdzZXJfZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmdzZXJfZnNfaW5fZGVzYyk7CisJZ3Nlci0+ZnMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZ3Nlcl9mc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmZ3Nlcl9mc19vdXRfZGVzYyk7CisKKworCS8qIHN1cHBvcnQgYWxsIHJlbGV2YW50IGhhcmR3YXJlIHNwZWVkcy4uLiB3ZSBleHBlY3QgdGhhdCB3aGVuCisJICogaGFyZHdhcmUgaXMgZHVhbCBzcGVlZCwgYWxsIGJ1bGstY2FwYWJsZSBlbmRwb2ludHMgd29yayBhdAorCSAqIGJvdGggc3BlZWRzCisJICovCisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgeworCQlnc2VyX2hzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZ3Nlcl9mc19pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWdzZXJfaHNfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZ3Nlcl9mc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCisJCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KKwkJZi0+aHNfZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhnc2VyX2hzX2Z1bmN0aW9uKTsKKworCQlnc2VyLT5ocy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGdzZXJfaHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZnc2VyX2hzX2luX2Rlc2MpOworCQlnc2VyLT5ocy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChnc2VyX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmZ3Nlcl9oc19vdXRfZGVzYyk7CisJfQorCisJREJHKGNkZXYsICJnZW5lcmljIHR0eUdTJWQ6ICVzIHNwZWVkIElOLyVzIE9VVC8lc1xuIiwKKwkJCWdzZXItPnBvcnRfbnVtLAorCQkJZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpID8gImR1YWwiIDogImZ1bGwiLAorCQkJZ3Nlci0+cG9ydC5pbi0+bmFtZSwgZ3Nlci0+cG9ydC5vdXQtPm5hbWUpOworCXJldHVybiAwOworCitmYWlsOgorCS8qIHdlIG1pZ2h0IGFzIHdlbGwgcmVsZWFzZSBvdXIgY2xhaW1zIG9uIGVuZHBvaW50cyAqLworCWlmIChnc2VyLT5wb3J0Lm91dCkKKwkJZ3Nlci0+cG9ydC5vdXQtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlpZiAoZ3Nlci0+cG9ydC5pbikKKwkJZ3Nlci0+cG9ydC5pbi0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCisJRVJST1IoY2RldiwgIiVzOiBjYW4ndCBiaW5kLCBlcnIgJWRcbiIsIGYtPm5hbWUsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZAorZ3Nlcl91bmJpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpCisJCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmhzX2Rlc2NyaXB0b3JzKTsKKwl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5kZXNjcmlwdG9ycyk7CisJa2ZyZWUoZnVuY190b19nc2VyKGYpKTsKK30KKworLyoqCisgKiBnc2VyX2JpbmRfY29uZmlnIC0gYWRkIGEgZ2VuZXJpYyBzZXJpYWwgZnVuY3Rpb24gdG8gYSBjb25maWd1cmF0aW9uCisgKiBAYzogdGhlIGNvbmZpZ3VyYXRpb24gdG8gc3VwcG9ydCB0aGUgc2VyaWFsIGluc3RhbmNlCisgKiBAcG9ydF9udW06IC9kZXYvdHR5R1MqIHBvcnQgdGhpcyBpbnRlcmZhY2Ugd2lsbCB1c2UKKyAqIENvbnRleHQ6IHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgZ2FkZ2V0IHNldHVwCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBjYWxsZWQgQGdzZXJpYWxfc2V0dXAoKSB3aXRoIGVub3VnaCBwb3J0cyB0bworICogaGFuZGxlIGFsbCB0aGUgb25lcyBpdCBiaW5kcy4gIENhbGxlciBpcyBhbHNvIHJlc3BvbnNpYmxlCisgKiBmb3IgY2FsbGluZyBAZ3NlcmlhbF9jbGVhbnVwKCkgYmVmb3JlIG1vZHVsZSB1bmxvYWQuCisgKi8KK2ludCBfX2luaXQgZ3Nlcl9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKQoreworCXN0cnVjdCBmX2dzZXIJKmdzZXI7CisJaW50CQlzdGF0dXM7CisKKwkvKiBSRVZJU0lUIG1pZ2h0IHdhbnQgaW5zdGFuY2Utc3BlY2lmaWMgc3RyaW5ncyB0byBoZWxwCisJICogZGlzdGluZ3Vpc2ggaW5zdGFuY2VzIC4uLgorCSAqLworCisJLyogbWF5YmUgYWxsb2NhdGUgZGV2aWNlLWdsb2JhbCBzdHJpbmcgSUQgKi8KKwlpZiAoZ3Nlcl9zdHJpbmdfZGVmc1swXS5pZCA9PSAwKSB7CisJCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoYy0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJZ3Nlcl9zdHJpbmdfZGVmc1swXS5pZCA9IHN0YXR1czsKKwl9CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBvbmUgbmV3IGluc3RhbmNlICovCisJZ3NlciA9IGt6YWxsb2Moc2l6ZW9mICpnc2VyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdzZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJZ3Nlci0+cG9ydF9udW0gPSBwb3J0X251bTsKKworCWdzZXItPnBvcnQuZnVuYy5uYW1lID0gImdzZXIiOworCWdzZXItPnBvcnQuZnVuYy5zdHJpbmdzID0gZ3Nlcl9zdHJpbmdzOworCWdzZXItPnBvcnQuZnVuYy5iaW5kID0gZ3Nlcl9iaW5kOworCWdzZXItPnBvcnQuZnVuYy51bmJpbmQgPSBnc2VyX3VuYmluZDsKKwlnc2VyLT5wb3J0LmZ1bmMuc2V0X2FsdCA9IGdzZXJfc2V0X2FsdDsKKwlnc2VyLT5wb3J0LmZ1bmMuZGlzYWJsZSA9IGdzZXJfZGlzYWJsZTsKKworCXN0YXR1cyA9IHVzYl9hZGRfZnVuY3Rpb24oYywgJmdzZXItPnBvcnQuZnVuYyk7CisJaWYgKHN0YXR1cykKKwkJa2ZyZWUoZ3Nlcik7CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMThjM2ExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCkBAIC0wLDAgKzEsNTg3IEBACisvKgorICogZl9zb3VyY2VzaW5rLmMgLSBVU0IgcGVyaXBoZXJhbCBzb3VyY2Uvc2luayBjb25maWd1cmF0aW9uIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJnX3plcm8uaCIKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworCisvKgorICogU09VUkNFL1NJTksgRlVOQ1RJT04gLi4uIGEgcHJpbWFyeSB0ZXN0aW5nIHZlaGljbGUgZm9yIFVTQiBwZXJpcGhlcmFsCisgKiBjb250cm9sbGVyIGRyaXZlcnMuCisgKgorICogVGhpcyBqdXN0IHNpbmtzIGJ1bGsgcGFja2V0cyBPVVQgdG8gdGhlIHBlcmlwaGVyYWwgYW5kIHNvdXJjZXMgdGhlbSBJTgorICogdG8gdGhlIGhvc3QsIG9wdGlvbmFsbHkgd2l0aCBzcGVjaWZpYyBkYXRhIHBhdHRlcm5zIGZvciBpbnRlZ3JpdHkgdGVzdHMuCisgKiBBcyBzdWNoIGl0IHN1cHBvcnRzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgYW5kIGxvYWQgdGVzdHMuCisgKgorICogSW4gdGVybXMgb2YgY29udHJvbCBtZXNzYWdpbmcsIHRoaXMgc3VwcG9ydHMgYWxsIHRoZSBzdGFuZGFyZCByZXF1ZXN0cworICogcGx1cyB0d28gdGhhdCBzdXBwb3J0IGNvbnRyb2wtT1VUIHRlc3RzLiAgSWYgdGhlIG9wdGlvbmFsICJhdXRvcmVzdW1lIgorICogbW9kZSBpcyBlbmFibGVkLCBpdCBwcm92aWRlcyBnb29kIGZ1bmN0aW9uYWwgY292ZXJhZ2UgZm9yIHRoZSAiVVNCQ1YiCisgKiB0ZXN0IGhhcm5lc3MgZnJvbSBVU0ItSUYuCisgKgorICogTm90ZSB0aGF0IGJlY2F1c2UgdGhpcyBkb2Vzbid0IHF1ZXVlIG1vcmUgdGhhbiBvbmUgcmVxdWVzdCBhdCBhIHRpbWUsCisgKiBzb21lIG90aGVyIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCB0byB0ZXN0IHF1ZXVlaW5nIGxvZ2ljLiAgVGhlIG5ldHdvcmsKKyAqIGxpbmsgKGdfZXRoZXIpIGlzIHRoZSBiZXN0IG92ZXJhbGwgb3B0aW9uIGZvciB0aGF0LCBzaW5jZSBpdHMgVFggYW5kIFJYCisgKiBxdWV1ZXMgYXJlIHJlbGF0aXZlbHkgaW5kZXBlbmRlbnQsIHdpbGwgcmVjZWl2ZSBhIHJhbmdlIG9mIHBhY2tldCBzaXplcywKKyAqIGFuZCBjYW4gb2Z0ZW4gYmUgbWFkZSB0byBydW4gb3V0IGNvbXBsZXRlbHkuICBUaG9zZSBpc3N1ZXMgYXJlIGltcG9ydGFudAorICogd2hlbiBzdHJlc3MgdGVzdGluZyBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVycy4KKyAqCisgKgorICogVGhpcyBpcyBjdXJyZW50bHkgcGFja2FnZWQgYXMgYSBjb25maWd1cmF0aW9uIGRyaXZlciwgd2hpY2ggY2FuJ3QgYmUKKyAqIGNvbWJpbmVkIHdpdGggb3RoZXIgZnVuY3Rpb25zIHRvIG1ha2UgY29tcG9zaXRlIGRldmljZXMuICBIb3dldmVyLCBpdAorICogY2FuIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgaW5kZXBlbmRlbnQgY29uZmlndXJhdGlvbnMuCisgKi8KK3N0cnVjdCBmX3NvdXJjZXNpbmsgeworCXN0cnVjdCB1c2JfZnVuY3Rpb24JZnVuY3Rpb247CisKKwlzdHJ1Y3QgdXNiX2VwCQkqaW5fZXA7CisJc3RydWN0IHVzYl9lcAkJKm91dF9lcDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlyZXN1bWU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmX3NvdXJjZXNpbmsgKmZ1bmNfdG9fc3Moc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX3NvdXJjZXNpbmssIGZ1bmN0aW9uKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGF1dG9yZXN1bWU7Cittb2R1bGVfcGFyYW0oYXV0b3Jlc3VtZSwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9yZXN1bWUsICJ6ZXJvLCBvciBzZWNvbmRzIGJlZm9yZSByZW1vdGUgd2FrZXVwIik7CisKK3N0YXRpYyB1bnNpZ25lZCBwYXR0ZXJuOworbW9kdWxlX3BhcmFtKHBhdHRlcm4sIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwYXR0ZXJuLCAiMCA9IGFsbCB6ZXJvZXMsIDEgPSBtb2Q2MyAiKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igc291cmNlX3NpbmtfaW50ZiA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygc291cmNlX3NpbmtfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAorCS8qIC5pSW50ZXJmYWNlID0gRFlOQU1JQyAqLworfTsKKworLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX3NvdXJjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19zaW5rX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX3NvdXJjZV9zaW5rX2Rlc2NzW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnNvdXJjZV9zaW5rX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJTlVMTCwKK307CisKKy8qIGhpZ2ggc3BlZWQgc3VwcG9ydDogKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zb3VyY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc2lua19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX3NvdXJjZV9zaW5rX2Rlc2NzW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnNvdXJjZV9zaW5rX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCisJTlVMTCwKK307CisKKy8qIGZ1bmN0aW9uLXNwZWNpZmljIHN0cmluZ3M6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZyBzdHJpbmdzX3NvdXJjZXNpbmtbXSA9IHsKKwlbMF0ucyA9ICJzb3VyY2UgYW5kIHNpbmsgZGF0YSIsCisJeyAgfQkJCS8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBzdHJpbmd0YWJfc291cmNlc2luayA9IHsKKwkubGFuZ3VhZ2UJPSAweDA0MDksCS8qIGVuLXVzICovCisJLnN0cmluZ3MJPSBzdHJpbmdzX3NvdXJjZXNpbmssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqc291cmNlc2lua19zdHJpbmdzW10gPSB7CisJJnN0cmluZ3RhYl9zb3VyY2VzaW5rLAorCU5VTEwsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBzb3VyY2VzaW5rX2F1dG9yZXN1bWUodW5zaWduZWQgbG9uZyBfYykKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSAodm9pZCAqKV9jOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnID0gY2Rldi0+Z2FkZ2V0OworCisJLyogTm9ybWFsbHkgdGhlIGhvc3Qgd291bGQgYmUgd29rZW4gdXAgZm9yIHNvbWV0aGluZworCSAqIG1vcmUgc2lnbmlmaWNhbnQgdGhhbiBqdXN0IGEgdGltZXIgZmlyaW5nOyBsaWtlbHkKKwkgKiBiZWNhdXNlIG9mIHNvbWUgZGlyZWN0IHVzZXIgcmVxdWVzdC4KKwkgKi8KKwlpZiAoZy0+c3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJaW50IHN0YXR1cyA9IHVzYl9nYWRnZXRfd2FrZXVwKGcpOworCQlEQkcoY2RldiwgIiVzIC0tPiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdAorc291cmNlc2lua19iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBjLT5jZGV2OworCXN0cnVjdCBmX3NvdXJjZXNpbmsJKnNzID0gZnVuY190b19zcyhmKTsKKwlpbnQJaWQ7CisKKwkvKiBhbGxvY2F0ZSBpbnRlcmZhY2UgSUQocykgKi8KKwlpZCA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKGlkIDwgMCkKKwkJcmV0dXJuIGlkOworCXNvdXJjZV9zaW5rX2ludGYuYkludGVyZmFjZU51bWJlciA9IGlkOworCisJLyogYWxsb2NhdGUgZW5kcG9pbnRzICovCisJc3MtPmluX2VwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfc291cmNlX2Rlc2MpOworCWlmICghc3MtPmluX2VwKSB7CithdXRvY29uZl9mYWlsOgorCQlFUlJPUihjZGV2LCAiJXM6IGNhbid0IGF1dG9jb25maWd1cmUgb24gJXNcbiIsCisJCQlmLT5uYW1lLCBjZGV2LT5nYWRnZXQtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJc3MtPmluX2VwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCisKKwlzcy0+b3V0X2VwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfc2lua19kZXNjKTsKKwlpZiAoIXNzLT5vdXRfZXApCisJCWdvdG8gYXV0b2NvbmZfZmFpbDsKKwlzcy0+b3V0X2VwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCisKKwlzZXR1cF90aW1lcigmc3MtPnJlc3VtZSwgc291cmNlc2lua19hdXRvcmVzdW1lLAorCQkJKHVuc2lnbmVkIGxvbmcpIGMtPmNkZXYpOworCisJLyogc3VwcG9ydCBoaWdoIHNwZWVkIGhhcmR3YXJlICovCisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgeworCQloc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19zaW5rX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfc2lua19kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWYtPmhzX2Rlc2NyaXB0b3JzID0gaHNfc291cmNlX3NpbmtfZGVzY3M7CisJfQorCisJREJHKGNkZXYsICIlcyBzcGVlZCAlczogSU4vJXMsIE9VVC8lc1xuIiwKKwkJCWdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSA/ICJkdWFsIiA6ICJmdWxsIiwKKwkJCWYtPm5hbWUsIHNzLT5pbl9lcC0+bmFtZSwgc3MtPm91dF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VyY2VzaW5rX3VuYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJa2ZyZWUoZnVuY190b19zcyhmKSk7Cit9CisKKy8qIG9wdGlvbmFsbHkgcmVxdWlyZSBzcGVjaWZpYyBzb3VyY2Uvc2luayBkYXRhIHBhdHRlcm5zICAqLworc3RhdGljIGludCBjaGVja19yZWFkX2RhdGEoc3RydWN0IGZfc291cmNlc2luayAqc3MsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkCQlpOworCXU4CQkJKmJ1ZiA9IHJlcS0+YnVmOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IHNzLT5mdW5jdGlvbi5jb25maWctPmNkZXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT5hY3R1YWw7IGkrKywgYnVmKyspIHsKKwkJc3dpdGNoIChwYXR0ZXJuKSB7CisKKwkJLyogYWxsLXplcm9lcyBoYXMgbm8gc3luY2hyb25pemF0aW9uIGlzc3VlcyAqLworCQljYXNlIDA6CisJCQlpZiAoKmJ1ZiA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CisKKwkJLyogIm1vZDYzIiBzdGF5cyBpbiBzeW5jIHdpdGggc2hvcnQtdGVybWluYXRlZCB0cmFuc2ZlcnMsCisJCSAqIE9SIG90aGVyd2lzZSB3aGVuIGhvc3QgYW5kIGdhZGdldCBhZ3JlZSBvbiBob3cgbGFyZ2UKKwkJICogZWFjaCB1c2IgdHJhbnNmZXIgcmVxdWVzdCBzaG91bGQgYmUuICBSZXN5bmMgaXMgZG9uZQorCQkgKiB3aXRoIHNldF9pbnRlcmZhY2Ugb3Igc2V0X2NvbmZpZy4gIChXZSAqV0FOVCogaXQgdG8KKwkJICogZ2V0IHF1aWNrbHkgb3V0IG9mIHN5bmMgaWYgY29udHJvbGxlcnMgb3IgdGhlaXIgZHJpdmVycworCQkgKiBzdHV0dGVyIGZvciBhbnkgcmVhc29uLCBpbmNsdWRpbmcgYnVmZmVyIGR1cGxjYXRpb24uLi4pCisJCSAqLworCQljYXNlIDE6CisJCQlpZiAoKmJ1ZiA9PSAodTgpKGkgJSA2MykpCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCQlFUlJPUihjZGV2LCAiYmFkIE9VVCBieXRlLCBidWZbJWRdID0gJWRcbiIsIGksICpidWYpOworCQl1c2JfZXBfc2V0X2hhbHQoc3MtPm91dF9lcCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVpbml0X3dyaXRlX2RhdGEoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkCWk7CisJdTgJCSpidWYgPSByZXEtPmJ1ZjsKKworCXN3aXRjaCAocGF0dGVybikgeworCWNhc2UgMDoKKwkJbWVtc2V0KHJlcS0+YnVmLCAwLCByZXEtPmxlbmd0aCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZm9yICAoaSA9IDA7IGkgPCByZXEtPmxlbmd0aDsgaSsrKQorCQkJKmJ1ZisrID0gKHU4KSAoaSAlIDYzKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzb3VyY2Vfc2lua19jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGZfc291cmNlc2luawkqc3MgPSBlcC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gc3MtPmZ1bmN0aW9uLmNvbmZpZy0+Y2RldjsKKwlpbnQJCQlzdGF0dXMgPSByZXEtPnN0YXR1czsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisKKwljYXNlIDA6CQkJCS8qIG5vcm1hbCBjb21wbGV0aW9uPyAqLworCQlpZiAoZXAgPT0gc3MtPm91dF9lcCkgeworCQkJY2hlY2tfcmVhZF9kYXRhKHNzLCByZXEpOworCQkJbWVtc2V0KHJlcS0+YnVmLCAweDU1LCByZXEtPmxlbmd0aCk7CisJCX0gZWxzZQorCQkJcmVpbml0X3dyaXRlX2RhdGEoZXAsIHJlcSk7CisJCWJyZWFrOworCisJLyogdGhpcyBlbmRwb2ludCBpcyBub3JtYWxseSBhY3RpdmUgd2hpbGUgd2UncmUgY29uZmlndXJlZCAqLworCWNhc2UgLUVDT05OQUJPUlRFRDoJCS8qIGhhcmR3YXJlIGZvcmNlZCBlcCByZXNldCAqLworCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiByZXF1ZXN0IGRlcXVldWVkICovCisJY2FzZSAtRVNIVVRET1dOOgkJLyogZGlzY29ubmVjdCBmcm9tIGhvc3QgKi8KKwkJVkRCRyhjZGV2LCAiJXMgZ29uZSAoJWQpLCAlZC8lZFxuIiwgZXAtPm5hbWUsIHN0YXR1cywKKwkJCQlyZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCQlpZiAoZXAgPT0gc3MtPm91dF9lcCkKKwkJCWNoZWNrX3JlYWRfZGF0YShzcywgcmVxKTsKKwkJZnJlZV9lcF9yZXEoZXAsIHJlcSk7CisJCXJldHVybjsKKworCWNhc2UgLUVPVkVSRkxPVzoJCS8qIGJ1ZmZlciBvdmVycnVuIG9uIHJlYWQgbWVhbnMgdGhhdAorCQkJCQkgKiB3ZSBkaWRuJ3QgcHJvdmlkZSBhIGJpZyBlbm91Z2gKKwkJCQkJICogYnVmZmVyLgorCQkJCQkgKi8KKwlkZWZhdWx0OgorI2lmIDEKKwkJREJHKGNkZXYsICIlcyBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLCBlcC0+bmFtZSwKKwkJCQlzdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisjZW5kaWYKKwljYXNlIC1FUkVNT1RFSU86CQkvKiBzaG9ydCByZWFkICovCisJCWJyZWFrOworCX0KKworCXN0YXR1cyA9IHVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKSB7CisJCUVSUk9SKGNkZXYsICJraWxsICVzOiAgcmVzdWJtaXQgJWQgYnl0ZXMgLS0+ICVkXG4iLAorCQkJCWVwLT5uYW1lLCByZXEtPmxlbmd0aCwgc3RhdHVzKTsKKwkJdXNiX2VwX3NldF9oYWx0KGVwKTsKKwkJLyogRklYTUUgcmVjb3ZlciBsYXRlciAuLi4gc29tZWhvdyAqLworCX0KK30KKworc3RhdGljIGludCBzb3VyY2Vfc2lua19zdGFydF9lcChzdHJ1Y3QgZl9zb3VyY2VzaW5rICpzcywgYm9vbCBpc19pbikKK3sKKwlzdHJ1Y3QgdXNiX2VwCQkqZXA7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJaW50CQkJc3RhdHVzOworCisJZXAgPSBpc19pbiA/IHNzLT5pbl9lcCA6IHNzLT5vdXRfZXA7CisJcmVxID0gYWxsb2NfZXBfcmVxKGVwKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXEtPmNvbXBsZXRlID0gc291cmNlX3NpbmtfY29tcGxldGU7CisJaWYgKGlzX2luKQorCQlyZWluaXRfd3JpdGVfZGF0YShlcCwgcmVxKTsKKwllbHNlCisJCW1lbXNldChyZXEtPmJ1ZiwgMHg1NSwgcmVxLT5sZW5ndGgpOworCisJc3RhdHVzID0gdXNiX2VwX3F1ZXVlKGVwLCByZXEsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2OworCisJCWNkZXYgPSBzcy0+ZnVuY3Rpb24uY29uZmlnLT5jZGV2OworCQlFUlJPUihjZGV2LCAic3RhcnQgJXMgJXMgLS0+ICVkXG4iLAorCQkJCWlzX2luID8gIklOIiA6ICJPVVQiLAorCQkJCWVwLT5uYW1lLCBzdGF0dXMpOworCQlmcmVlX2VwX3JlcShlcCwgcmVxKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3NvdXJjZV9zaW5rKHN0cnVjdCBmX3NvdXJjZXNpbmsgKnNzKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldjsKKworCWNkZXYgPSBzcy0+ZnVuY3Rpb24uY29uZmlnLT5jZGV2OworCWRpc2FibGVfZW5kcG9pbnRzKGNkZXYsIHNzLT5pbl9lcCwgc3MtPm91dF9lcCk7CisJZGVsX3RpbWVyKCZzcy0+cmVzdW1lKTsKKwlWREJHKGNkZXYsICIlcyBkaXNhYmxlZFxuIiwgc3MtPmZ1bmN0aW9uLm5hbWUpOworfQorCitzdGF0aWMgaW50CitlbmFibGVfc291cmNlX3Npbmsoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBzdHJ1Y3QgZl9zb3VyY2VzaW5rICpzcykKK3sKKwlpbnQJCQkJCXJlc3VsdCA9IDA7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpzcmMsICpzaW5rOworCXN0cnVjdCB1c2JfZXAJCQkJKmVwOworCisJc3JjID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwgJmhzX3NvdXJjZV9kZXNjLCAmZnNfc291cmNlX2Rlc2MpOworCXNpbmsgPSBlcF9jaG9vc2UoY2Rldi0+Z2FkZ2V0LCAmaHNfc2lua19kZXNjLCAmZnNfc2lua19kZXNjKTsKKworCS8qIG9uZSBlbmRwb2ludCB3cml0ZXMgKHNvdXJjZXMpIHplcm9lcyBJTiAodG8gdGhlIGhvc3QpICovCisJZXAgPSBzcy0+aW5fZXA7CisJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZShlcCwgc3JjKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBzczsKKworCXJlc3VsdCA9IHNvdXJjZV9zaW5rX3N0YXJ0X2VwKHNzLCB0cnVlKTsKKwlpZiAocmVzdWx0IDwgMCkgeworZmFpbDoKKwkJZXAgPSBzcy0+aW5fZXA7CisJCXVzYl9lcF9kaXNhYmxlKGVwKTsKKwkJZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBvbmUgZW5kcG9pbnQgcmVhZHMgKHNpbmtzKSBhbnl0aGluZyBPVVQgKGZyb20gdGhlIGhvc3QpICovCisJZXAgPSBzcy0+b3V0X2VwOworCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUoZXAsIHNpbmspOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGZhaWw7CisJZXAtPmRyaXZlcl9kYXRhID0gc3M7CisKKwlyZXN1bHQgPSBzb3VyY2Vfc2lua19zdGFydF9lcChzcywgZmFsc2UpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXVzYl9lcF9kaXNhYmxlKGVwKTsKKwkJZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJZ290byBmYWlsOworCX0KKworCURCRyhjZGV2LCAiJXMgZW5hYmxlZFxuIiwgc3MtPmZ1bmN0aW9uLm5hbWUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc291cmNlc2lua19zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsCisJCXVuc2lnbmVkIGludGYsIHVuc2lnbmVkIGFsdCkKK3sKKwlzdHJ1Y3QgZl9zb3VyY2VzaW5rCSpzcyA9IGZ1bmNfdG9fc3MoZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJLyogd2Uga25vdyBhbHQgaXMgemVybyAqLworCWlmIChzcy0+aW5fZXAtPmRyaXZlcl9kYXRhKQorCQlkaXNhYmxlX3NvdXJjZV9zaW5rKHNzKTsKKwlyZXR1cm4gZW5hYmxlX3NvdXJjZV9zaW5rKGNkZXYsIHNzKTsKK30KKworc3RhdGljIHZvaWQgc291cmNlc2lua19kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IGZfc291cmNlc2luawkqc3MgPSBmdW5jX3RvX3NzKGYpOworCisJZGlzYWJsZV9zb3VyY2Vfc2luayhzcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNvdXJjZXNpbmtfc3VzcGVuZChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCBmX3NvdXJjZXNpbmsJKnNzID0gZnVuY190b19zcyhmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwlpZiAoY2Rldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuOworCisJaWYgKGF1dG9yZXN1bWUpIHsKKwkJbW9kX3RpbWVyKCZzcy0+cmVzdW1lLCBqaWZmaWVzICsgKEhaICogYXV0b3Jlc3VtZSkpOworCQlEQkcoY2RldiwgInN1c3BlbmQsIHdha2V1cCBpbiAlZCBzZWNvbmRzXG4iLCBhdXRvcmVzdW1lKTsKKwl9IGVsc2UKKwkJREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBzb3VyY2VzaW5rX3Jlc3VtZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCBmX3NvdXJjZXNpbmsJKnNzID0gZnVuY190b19zcyhmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZGVsX3RpbWVyKCZzcy0+cmVzdW1lKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgc291cmNlc2lua19iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCit7CisJc3RydWN0IGZfc291cmNlc2luawkqc3M7CisJaW50CQkJc3RhdHVzOworCisJc3MgPSBremFsbG9jKHNpemVvZiAqc3MsIEdGUF9LRVJORUwpOworCWlmICghc3MpCisJCXJldHVybiAtRU5PTUVNOworCisJc3MtPmZ1bmN0aW9uLm5hbWUgPSAic291cmNlL3NpbmsiOworCXNzLT5mdW5jdGlvbi5kZXNjcmlwdG9ycyA9IGZzX3NvdXJjZV9zaW5rX2Rlc2NzOworCXNzLT5mdW5jdGlvbi5iaW5kID0gc291cmNlc2lua19iaW5kOworCXNzLT5mdW5jdGlvbi51bmJpbmQgPSBzb3VyY2VzaW5rX3VuYmluZDsKKwlzcy0+ZnVuY3Rpb24uc2V0X2FsdCA9IHNvdXJjZXNpbmtfc2V0X2FsdDsKKwlzcy0+ZnVuY3Rpb24uZGlzYWJsZSA9IHNvdXJjZXNpbmtfZGlzYWJsZTsKKwlzcy0+ZnVuY3Rpb24uc3VzcGVuZCA9IHNvdXJjZXNpbmtfc3VzcGVuZDsKKwlzcy0+ZnVuY3Rpb24ucmVzdW1lID0gc291cmNlc2lua19yZXN1bWU7CisKKwlzdGF0dXMgPSB1c2JfYWRkX2Z1bmN0aW9uKGMsICZzcy0+ZnVuY3Rpb24pOworCWlmIChzdGF0dXMpCisJCWtmcmVlKHNzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHNvdXJjZXNpbmtfc2V0dXAoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLAorCQljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gYy0+Y2Rldi0+cmVxOworCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJd19pbmRleCA9IGxlMTZfdG9fY3B1KGN0cmwtPndJbmRleCk7CisJdTE2CQkJd192YWx1ZSA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CisJdTE2CQkJd19sZW5ndGggPSBsZTE2X3RvX2NwdShjdHJsLT53TGVuZ3RoKTsKKworCS8qIGNvbXBvc2l0ZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUgaGFuZGxlcyBldmVyeXRoaW5nIGV4Y2VwdAorCSAqIHRoZSB0d28gY29udHJvbCB0ZXN0IHJlcXVlc3RzLgorCSAqLworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKworCS8qCisJICogVGhlc2UgYXJlIHRoZSBzYW1lIHZlbmRvci1zcGVjaWZpYyByZXF1ZXN0cyBzdXBwb3J0ZWQgYnkKKwkgKiBJbnRlbCdzIFVTQiAyLjAgY29tcGxpYW5jZSB0ZXN0IGRldmljZXMuICBXZSBleGNlZWQgdGhhdAorCSAqIGRldmljZSBzcGVjIGJ5IGFsbG93aW5nIG11bHRpcGxlLXBhY2tldCByZXF1ZXN0cy4KKwkgKgorCSAqIE5PVEU6ICB0aGUgQ29udHJvbC1PVVQgZGF0YSBzdGF5cyBpbiByZXEtPmJ1ZiAuLi4gYmV0dGVyCisJICogd291bGQgYmUgY29weWluZyBpdCBpbnRvIGEgc2NyYXRjaCBidWZmZXIsIHNvIHRoYXQgb3RoZXIKKwkgKiByZXF1ZXN0cyBtYXkgc2FmZWx5IGludGVydmVuZS4KKwkgKi8KKwljYXNlIDB4NWI6CS8qIGNvbnRyb2wgV1JJVEUgdGVzdCAtLSBmaWxsIHRoZSBidWZmZXIgKi8KKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVR8VVNCX1RZUEVfVkVORE9SKSkKKwkJCWdvdG8gdW5rbm93bjsKKwkJaWYgKHdfdmFsdWUgfHwgd19pbmRleCkKKwkJCWJyZWFrOworCQkvKiBqdXN0IHJlYWQgdGhhdCBtYW55IGJ5dGVzIGludG8gdGhlIGJ1ZmZlciAqLworCQlpZiAod19sZW5ndGggPiByZXEtPmxlbmd0aCkKKwkJCWJyZWFrOworCQl2YWx1ZSA9IHdfbGVuZ3RoOworCQlicmVhazsKKwljYXNlIDB4NWM6CS8qIGNvbnRyb2wgUkVBRCB0ZXN0IC0tIHJldHVybiB0aGUgYnVmZmVyICovCisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU58VVNCX1RZUEVfVkVORE9SKSkKKwkJCWdvdG8gdW5rbm93bjsKKwkJaWYgKHdfdmFsdWUgfHwgd19pbmRleCkKKwkJCWJyZWFrOworCQkvKiBleHBlY3QgdGhvc2UgYnl0ZXMgYXJlIHN0aWxsIGluIHRoZSBidWZmZXI7IHNlbmQgYmFjayAqLworCQlpZiAod19sZW5ndGggPiByZXEtPmxlbmd0aCkKKwkJCWJyZWFrOworCQl2YWx1ZSA9IHdfbGVuZ3RoOworCQlicmVhazsKKworCWRlZmF1bHQ6Cit1bmtub3duOgorCQlWREJHKGMtPmNkZXYsCisJCQkidW5rbm93biBjb250cm9sIHJlcSUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJWRcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd192YWx1ZSwgd19pbmRleCwgd19sZW5ndGgpOworCX0KKworCS8qIHJlc3BvbmQgd2l0aCBkYXRhIHRyYW5zZmVyIG9yIHN0YXR1cyBwaGFzZT8gKi8KKwlpZiAodmFsdWUgPj0gMCkgeworCQlWREJHKGMtPmNkZXYsICJzb3VyY2Uvc2luayByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKwkJcmVxLT56ZXJvID0gMDsKKwkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKKwkJdmFsdWUgPSB1c2JfZXBfcXVldWUoYy0+Y2Rldi0+Z2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCWlmICh2YWx1ZSA8IDApCisJCQlFUlJPUihjLT5jZGV2LCAic291cmNlL3NpbmtjIHJlc3BvbnNlLCBlcnIgJWRcbiIsCisJCQkJCXZhbHVlKTsKKwl9CisKKwkvKiBkZXZpY2UgZWl0aGVyIHN0YWxscyAodmFsdWUgPCAwKSBvciByZXBvcnRzIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gc291cmNlc2lua19kcml2ZXIgPSB7CisJLmxhYmVsCQk9ICJzb3VyY2Uvc2luayIsCisJLnN0cmluZ3MJPSBzb3VyY2VzaW5rX3N0cmluZ3MsCisJLmJpbmQJCT0gc291cmNlc2lua19iaW5kX2NvbmZpZywKKwkuc2V0dXAJCT0gc291cmNlc2lua19zZXR1cCwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDMsCisJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyCT0gMSwJLyogMiBtQSwgbWluaW1hbCAqLworCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KK307CisKKy8qKgorICogc291cmNlc2lua19hZGQgLSBhZGQgYSBzb3VyY2Uvc2luayB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gdG8gYSBkZXZpY2UKKyAqIEBjZGV2OiB0aGUgZGV2aWNlIHRvIHN1cHBvcnQgdGhlIGNvbmZpZ3VyYXRpb24KKyAqLworaW50IF9faW5pdCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJaW50IGlkOworCisJLyogYWxsb2NhdGUgc3RyaW5nIElEKHMpICovCisJaWQgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOworCWlmIChpZCA8IDApCisJCXJldHVybiBpZDsKKwlzdHJpbmdzX3NvdXJjZXNpbmtbMF0uaWQgPSBpZDsKKworCXNvdXJjZV9zaW5rX2ludGYuaUludGVyZmFjZSA9IGlkOworCXNvdXJjZXNpbmtfZHJpdmVyLmlDb25maWd1cmF0aW9uID0gaWQ7CisKKwkvKiBzdXBwb3J0IGF1dG9yZXN1bWUgZm9yIHJlbW90ZSB3YWtldXAgdGVzdGluZyAqLworCWlmIChhdXRvcmVzdW1lKQorCQlzb3VyY2VzaW5rX2RyaXZlci5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCisJLyogc3VwcG9ydCBPVEcgc3lzdGVtcyAqLworCWlmIChnYWRnZXRfaXNfb3RnKGNkZXYtPmdhZGdldCkpIHsKKwkJc291cmNlc2lua19kcml2ZXIuZGVzY3JpcHRvcnMgPSBvdGdfZGVzYzsKKwkJc291cmNlc2lua19kcml2ZXIuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwl9CisKKwlyZXR1cm4gdXNiX2FkZF9jb25maWcoY2RldiwgJnNvdXJjZXNpbmtfZHJpdmVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlYWI5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCkBAIC0wLDAgKzEsNDIzIEBACisvKgorICogZl9zdWJzZXQuYyAtLSAiQ0RDIFN1YnNldCIgRXRoZXJuZXQgbGluayBmdW5jdGlvbiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSwyMDA4IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ1X2V0aGVyLmgiCisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcGFja2FnZXMgYSBzaW1wbGUgIkNEQyBTdWJzZXQiIEV0aGVybmV0IHBvcnQgd2l0aCBubyByZWFsCisgKiBjb250cm9sIG1lY2hhbmlzbXM7IGp1c3QgcmF3IGRhdGEgdHJhbnNmZXIgb3ZlciB0d28gYnVsayBlbmRwb2ludHMuCisgKiBUaGUgZGF0YSB0cmFuc2ZlciBtb2RlbCBpcyBleGFjdGx5IHRoYXQgb2YgQ0RDIEV0aGVybmV0LCB3aGljaCBpcworICogd2h5IHdlIGNhbGwgaXQgdGhlICJDREMgU3Vic2V0Ii4KKyAqCisgKiBCZWNhdXNlIGl0J3Mgbm90IHN0YW5kYXJkaXplZCwgdGhpcyBoYXMgc29tZSBpbnRlcm9wZXJhYmlsaXR5IGlzc3Vlcy4KKyAqIFRoZXkgbW9zdGx5IHJlbGF0ZSB0byBkcml2ZXIgYmluZGluZywgc2luY2UgdGhlIGRhdGEgdHJhbnNmZXIgbW9kZWwgaXMKKyAqIHNvIHNpbXBsZSAoQ0RDIEV0aGVybmV0KS4gIFRoZSBvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGlzIHByb3RvY29sIHVzZWQKKyAqIHNwZWNpZmljIHByb2R1Y3QvdmVuZG9yIElEczogIGJ5dGVzd2FwcGVkIElEcyBmb3IgRGlnaXRhbCBFcXVpcG1lbnQncworICogU0EtMTEwMCAiSXRzeSIgYm9hcmQsIHdoaWNoIGNvdWxkIHJ1biBMaW51eCAyLjQga2VybmVscyBhbmQgc3VwcG9ydGVkCisgKiBkYXVnaHRlcmNhcmRzIHdpdGggVVNCIHBlcmlwaGVyYWwgY29ubmVjdG9ycy4gIChJdCB3YXMgdXNlZCBtb3JlIG9mdGVuCisgKiB3aXRoIG90aGVyIGJvYXJkcywgdXNpbmcgdGhlIEl0c3kgaWRlbnRpZmllcnMuKSAgTGludXggaG9zdHMgcmVjb2duaXplZAorICogdGhpcyB3aXRoIENPTkZJR19VU0JfQVJNTElOVVg7IHRoZXNlIGRldmljZXMgaGF2ZSBvbmx5IG9uZSBjb25maWd1cmF0aW9uCisgKiBhbmQgb25lIGludGVyZmFjZS4KKyAqCisgKiBBdCBzb21lIHBvaW50LCBNQ0NJIGRlZmluZWQgYSAobm9uY29uZm9ybWFudCkgQ0RDIE1ETE0gdmFyaWFudCBjYWxsZWQKKyAqICJTQUZFIiwgd2hpY2ggaGFwcGVucyB0byBoYXZlIGEgbW9kZSB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlICJDREMKKyAqIFN1YnNldCIgaW4gdGVybXMgb2YgZGF0YSB0cmFuc2ZlciBhbmQgbGFjayBvZiBjb250cm9sIG1vZGVsLiAgVGhpcyB3YXMKKyAqIGFkb3B0ZWQgYnkgbGF0ZXIgU2hhcnAgWmF1cnVzIG1vZGVscywgYW5kIGJ5IHNvbWUgb3RoZXIgc29mdHdhcmUgd2hpY2gKKyAqIExpbnV4IGhvc3RzIHJlY29nbml6ZSB3aXRoIENPTkZJR19VU0JfTkVUX1pBVVJVUy4KKyAqCisgKiBCZWNhdXNlIE1pY3Jvc29mdCdzIFJORElTIGRyaXZlcnMgYXJlIGZhciBmcm9tIHJvYnVzdCwgd2UgYWRkZWQgYSBmZXcKKyAqIGRlc2NyaXB0b3JzIHRvIHRoZSBDREMgU3Vic2V0IGNvZGUsIG1ha2luZyB0aGlzIGNvZGUgbG9vayBsaWtlIGEgU0FGRQorICogaW1wbGVtZW50YXRpb24uICBUaGlzIGxldHMgeW91IHVzZSBNQ0NJJ3MgaG9zdCBzaWRlIE1TLVdpbmRvd3MgZHJpdmVycworICogaWYgeW91IGdldCBmZWQgdXAgd2l0aCBSTkRJUy4gIEl0IGFsc28gbWFrZXMgaXQgZWFzaWVyIGZvciBjb21wb3NpdGUKKyAqIGRyaXZlcnMgdG8gd29yaywgc2luY2UgdGhleSBjYW4gdXNlIGNsYXNzIGJhc2VkIGJpbmRpbmcgaW5zdGVhZCBvZgorICogY2FyaW5nIGFib3V0IHNwZWNpZmljIHByb2R1Y3QgYW5kIHZlbmRvciBJRHMuCisgKi8KKworc3RydWN0IGdldGhfZGVzY3MgeworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqaW47CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpvdXQ7Cit9OworCitzdHJ1Y3QgZl9nZXRoZXIgeworCXN0cnVjdCBnZXRoZXIJCQlwb3J0OworCisJY2hhcgkJCQlldGhhZGRyWzE0XTsKKworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIJKipmc19mdW5jdGlvbjsKKwlzdHJ1Y3QgZ2V0aF9kZXNjcwkJZnM7CisJc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcgkqKmhzX2Z1bmN0aW9uOworCXN0cnVjdCBnZXRoX2Rlc2NzCQloczsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZfZ2V0aGVyICpmdW5jX3RvX2dldGgoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX2dldGhlciwgcG9ydC5mdW5jKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqICJTaW1wbGUiIENEQy1zdWJzZXQgb3B0aW9uIGlzIGEgc2ltcGxlIHZlbmRvci1uZXV0cmFsIG1vZGVsIHRoYXQgbW9zdAorICogZnVsbCBzcGVlZCBjb250cm9sbGVycyBjYW4gaGFuZGxlOiAgb25lIGludGVyZmFjZSwgdHdvIGJ1bGsgZW5kcG9pbnRzLgorICogVG8gYXNzaXN0IGhvc3Qgc2lkZSBkcml2ZXJzLCB3ZSBmYW5jeSBpdCB1cCBhIGJpdCwgYW5kIGFkZCBkZXNjcmlwdG9ycyBzbworICogc29tZSBob3N0IHNpZGUgZHJpdmVycyB3aWxsIHVuZGVyc3RhbmQgaXQgYXMgYSAiU0FGRSIgdmFyaWFudC4KKyAqCisgKiAiU0FGRSIgbG9vc2VseSBmb2xsb3dzIENEQyBXTUMgTURMTSwgdmlvbGF0aW5nIHRoZSBzcGVjIGluIHZhcmlvdXMgd2F5cy4KKyAqIERhdGEgZW5kcG9pbnRzIGxpdmUgaW4gdGhlIGNvbnRyb2wgaW50ZXJmYWNlLCB0aGVyZSdzIG5vIGRhdGEgaW50ZXJmYWNlLgorICogQW5kIGl0J3Mgbm90IHVzZWQgdG8gdGFsayB0byBhIGNlbGwgcGhvbmUgcmFkaW8uCisgKi8KKworLyogaW50ZXJmYWNlIGRlc2NyaXB0b3I6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIHN1YnNldF9kYXRhX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygc3Vic2V0X2RhdGFfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS8qIC5iSW50ZXJmYWNlTnVtYmVyID0gRFlOQU1JQyAqLworCS5iQWx0ZXJuYXRlU2V0dGluZyA9CTAsCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSAgICAgIFVTQl9DTEFTU19DT01NLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCisJLyogLmlJbnRlcmZhY2UgPSBEWU5BTUlDICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgaGVhZGVyX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgaGVhZGVyX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCisKKwkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY19tZGxtX2Rlc2MgbWRsbV9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIG1kbG1fZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19NRExNX1RZUEUsCisKKwkuYmNkVmVyc2lvbiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCisJLmJHVUlEID0geworCQkweDVkLCAweDM0LCAweGNmLCAweDY2LCAweDExLCAweDE4LCAweDExLCAweGQ2LAorCQkweGEyLCAweDFhLCAweDAwLCAweDAxLCAweDAyLCAweGNhLCAweDlhLCAweDdmLAorCX0sCit9OworCisvKiBzaW5jZSAidXNiX2NkY19tZGxtX2RldGFpbF9kZXNjIiBpcyBhIHZhcmlhYmxlIGxlbmd0aCBzdHJ1Y3R1cmUsIHdlCisgKiBjYW4ndCByZWFsbHkgdXNlIGl0cyBzdHJ1Y3QuICBBbGwgd2UgZG8gaGVyZSBpcyBzYXkgdGhhdCB3ZSdyZSB1c2luZworICogdGhlIHN1Ym1vZGUgb2YgIlNBRkUiIHdoaWNoIGRpcmVjdGx5IG1hdGNoZXMgdGhlIENEQyBTdWJzZXQuCisgKi8KK3N0YXRpYyB1OCBtZGxtX2RldGFpbF9kZXNjW10gX19pbml0ZGF0YSA9IHsKKwk2LAorCVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJVVNCX0NEQ19NRExNX0RFVEFJTF9UWVBFLAorCisJMCwJLyogIlNBRkUiICovCisJMCwJLyogbmV0d29yayBjb250cm9sIGNhcGFiaWxpdGllcyAobm9uZSkgKi8KKwkwLAkvKiBuZXR3b3JrIGRhdGEgY2FwYWJpbGl0aWVzICgicmF3IiBlbmNhcHN1bGF0aW9uKSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZXRoZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBldGhlcl9kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0VUSEVSTkVUX1RZUEUsCisKKwkvKiB0aGlzIGRlc2NyaXB0b3IgYWN0dWFsbHkgYWRkcyB2YWx1ZSwgc3VycHJpc2UhICovCisJLyogLmlNQUNBZGRyZXNzID0gRFlOQU1JQyAqLworCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KKwkud01heFNlZ21lbnRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKKwkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksCisJLmJOdW1iZXJQb3dlckZpbHRlcnMgPQkwLAorfTsKKworLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNfZXRoX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmc3Vic2V0X2RhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm1kbG1fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXRhaWxfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIGhpZ2ggc3BlZWQgc3VwcG9ydDogKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZXRoX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmc3Vic2V0X2RhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm1kbG1fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXRhaWxfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIHN0cmluZyBkZXNjcmlwdG9yczogKi8KKworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nIGdldGhfc3RyaW5nX2RlZnNbXSA9IHsKKwlbMF0ucyA9ICJDREMgRXRoZXJuZXQgU3Vic2V0L1NBRkUiLAorCVsxXS5zID0gTlVMTCAvKiBEWU5BTUlDICovLAorCXsgIH0gLyogZW5kIG9mIGxpc3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzIGdldGhfc3RyaW5nX3RhYmxlID0geworCS5sYW5ndWFnZSA9CQkweDA0MDksCS8qIGVuLXVzICovCisJLnN0cmluZ3MgPQkJZ2V0aF9zdHJpbmdfZGVmcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzICpnZXRoX3N0cmluZ3NbXSA9IHsKKwkmZ2V0aF9zdHJpbmdfdGFibGUsCisJTlVMTCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZ2V0aF9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIHVuc2lnbmVkIGludGYsIHVuc2lnbmVkIGFsdCkKK3sKKwlzdHJ1Y3QgZl9nZXRoZXIJCSpnZXRoID0gZnVuY190b19nZXRoKGYpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCisJLyogd2Uga25vdyBhbHQgPT0gMCwgc28gdGhpcyBpcyBhbiBhY3RpdmF0aW9uIG9yIGEgcmVzZXQgKi8KKworCWlmIChnZXRoLT5wb3J0LmluX2VwLT5kcml2ZXJfZGF0YSkgeworCQlEQkcoY2RldiwgInJlc2V0IGNkYyBzdWJzZXRcbiIpOworCQlnZXRoZXJfZGlzY29ubmVjdCgmZ2V0aC0+cG9ydCk7CisJfQorCisJREJHKGNkZXYsICJpbml0ICsgYWN0aXZhdGUgY2RjIHN1YnNldFxuIik7CisJZ2V0aC0+cG9ydC5pbiA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQlnZXRoLT5ocy5pbiwgZ2V0aC0+ZnMuaW4pOworCWdldGgtPnBvcnQub3V0ID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwKKwkJCWdldGgtPmhzLm91dCwgZ2V0aC0+ZnMub3V0KTsKKworCW5ldCA9IGdldGhlcl9jb25uZWN0KCZnZXRoLT5wb3J0KTsKKwlyZXR1cm4gSVNfRVJSKG5ldCkgPyBQVFJfRVJSKG5ldCkgOiAwOworfQorCitzdGF0aWMgdm9pZCBnZXRoX2Rpc2FibGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9nZXRoZXIJKmdldGggPSBmdW5jX3RvX2dldGgoZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJREJHKGNkZXYsICJuZXQgZGVhY3RpdmF0ZWRcbiIpOworCWdldGhlcl9kaXNjb25uZWN0KCZnZXRoLT5wb3J0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogc2VyaWFsIGZ1bmN0aW9uIGRyaXZlciBzZXR1cC9iaW5kaW5nICovCisKK3N0YXRpYyBpbnQgX19pbml0CitnZXRoX2JpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGMtPmNkZXY7CisJc3RydWN0IGZfZ2V0aGVyCQkqZ2V0aCA9IGZ1bmNfdG9fZ2V0aChmKTsKKwlpbnQJCQlzdGF0dXM7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgaW50ZXJmYWNlIElEcyAqLworCXN0YXR1cyA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlzdWJzZXRfZGF0YV9pbnRmLmJJbnRlcmZhY2VOdW1iZXIgPSBzdGF0dXM7CisKKwlzdGF0dXMgPSAtRU5PREVWOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19pbl9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGZhaWw7CisJZ2V0aC0+cG9ydC5pbl9lcCA9IGVwOworCWVwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCisKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX291dF9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGZhaWw7CisJZ2V0aC0+cG9ydC5vdXRfZXAgPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLworCisJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLworCWYtPmRlc2NyaXB0b3JzID0gdXNiX2NvcHlfZGVzY3JpcHRvcnMoZnNfZXRoX2Z1bmN0aW9uKTsKKworCWdldGgtPmZzLmluID0gdXNiX2ZpbmRfZW5kcG9pbnQoZnNfZXRoX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZmc19pbl9kZXNjKTsKKwlnZXRoLT5mcy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChmc19ldGhfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX291dF9kZXNjKTsKKworCisJLyogc3VwcG9ydCBhbGwgcmVsZXZhbnQgaGFyZHdhcmUgc3BlZWRzLi4uIHdlIGV4cGVjdCB0aGF0IHdoZW4KKwkgKiBoYXJkd2FyZSBpcyBkdWFsIHNwZWVkLCBhbGwgYnVsay1jYXBhYmxlIGVuZHBvaW50cyB3b3JrIGF0CisJICogYm90aCBzcGVlZHMKKwkgKi8KKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7CisJCWhzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCisJCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KKwkJZi0+aHNfZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhoc19ldGhfZnVuY3Rpb24pOworCisJCWdldGgtPmhzLmluID0gdXNiX2ZpbmRfZW5kcG9pbnQoaHNfZXRoX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfaW5fZGVzYyk7CisJCWdldGgtPmhzLm91dCA9IHVzYl9maW5kX2VuZHBvaW50KGhzX2V0aF9mdW5jdGlvbiwKKwkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX291dF9kZXNjKTsKKwl9CisKKwkvKiBOT1RFOiAgYWxsIHRoYXQgaXMgZG9uZSB3aXRob3V0IGtub3dpbmcgb3IgY2FyaW5nIGFib3V0CisJICogdGhlIG5ldHdvcmsgbGluayAuLi4gd2hpY2ggaXMgdW5hdmFpbGFibGUgdG8gdGhpcyBjb2RlCisJICogdW50aWwgd2UncmUgYWN0aXZhdGVkIHZpYSBzZXRfYWx0KCkuCisJICovCisKKwlEQkcoY2RldiwgIkNEQyBTdWJzZXQ6ICVzIHNwZWVkIElOLyVzIE9VVC8lc1xuIiwKKwkJCWdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSA/ICJkdWFsIiA6ICJmdWxsIiwKKwkJCWdldGgtPnBvcnQuaW5fZXAtPm5hbWUsIGdldGgtPnBvcnQub3V0X2VwLT5uYW1lKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwkvKiB3ZSBtaWdodCBhcyB3ZWxsIHJlbGVhc2Ugb3VyIGNsYWltcyBvbiBlbmRwb2ludHMgKi8KKwlpZiAoZ2V0aC0+cG9ydC5vdXQpCisJCWdldGgtPnBvcnQub3V0X2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJaWYgKGdldGgtPnBvcnQuaW4pCisJCWdldGgtPnBvcnQuaW5fZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKworCUVSUk9SKGNkZXYsICIlczogY2FuJ3QgYmluZCwgZXJyICVkXG4iLCBmLT5uYW1lLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQKK2dldGhfdW5iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKQorCQl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5oc19kZXNjcmlwdG9ycyk7CisJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+ZGVzY3JpcHRvcnMpOworCWdldGhfc3RyaW5nX2RlZnNbMV0ucyA9IE5VTEw7CisJa2ZyZWUoZnVuY190b19nZXRoKGYpKTsKK30KKworLyoqCisgKiBnZXRoX2JpbmRfY29uZmlnIC0gYWRkIENEQyBTdWJzZXQgbmV0d29yayBsaW5rIHRvIGEgY29uZmlndXJhdGlvbgorICogQGM6IHRoZSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQgdGhlIG5ldHdvcmsgbGluaworICogQGV0aGFkZHI6IGEgYnVmZmVyIGluIHdoaWNoIHRoZSBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSBob3N0IHNpZGUKKyAqCXNpZGUgb2YgdGhlIGxpbmsgd2FzIHJlY29yZGVkCisgKiBDb250ZXh0OiBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGdhZGdldCBzZXR1cAorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgY2FsbGVkIEBnZXRoZXJfc2V0dXAoKS4gIENhbGxlciBpcyBhbHNvIHJlc3BvbnNpYmxlCisgKiBmb3IgY2FsbGluZyBAZ2V0aGVyX2NsZWFudXAoKSBiZWZvcmUgbW9kdWxlIHVubG9hZC4KKyAqLworaW50IF9faW5pdCBnZXRoX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggZXRoYWRkcltFVEhfQUxFTl0pCit7CisJc3RydWN0IGZfZ2V0aGVyCSpnZXRoOworCWludAkJc3RhdHVzOworCisJaWYgKCFldGhhZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG1heWJlIGFsbG9jYXRlIGRldmljZS1nbG9iYWwgc3RyaW5nIElEcyAqLworCWlmIChnZXRoX3N0cmluZ19kZWZzWzBdLmlkID09IDApIHsKKworCQkvKiBpbnRlcmZhY2UgbGFiZWwgKi8KKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQlnZXRoX3N0cmluZ19kZWZzWzBdLmlkID0gc3RhdHVzOworCQlzdWJzZXRfZGF0YV9pbnRmLmlJbnRlcmZhY2UgPSBzdGF0dXM7CisKKwkJLyogTUFDIGFkZHJlc3MgKi8KKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQlnZXRoX3N0cmluZ19kZWZzWzFdLmlkID0gc3RhdHVzOworCQlldGhlcl9kZXNjLmlNQUNBZGRyZXNzID0gc3RhdHVzOworCX0KKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSBuZXcgaW5zdGFuY2UgKi8KKwlnZXRoID0ga3phbGxvYyhzaXplb2YgKmdldGgsIEdGUF9LRVJORUwpOworCWlmICghZ2V0aCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBleHBvcnQgaG9zdCdzIEV0aGVybmV0IGFkZHJlc3MgaW4gQ0RDIGZvcm1hdCAqLworCXNucHJpbnRmKGdldGgtPmV0aGFkZHIsIHNpemVvZiBnZXRoLT5ldGhhZGRyLAorCQkiJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKKwkJZXRoYWRkclswXSwgZXRoYWRkclsxXSwgZXRoYWRkclsyXSwKKwkJZXRoYWRkclszXSwgZXRoYWRkcls0XSwgZXRoYWRkcls1XSk7CisJZ2V0aF9zdHJpbmdfZGVmc1sxXS5zID0gZ2V0aC0+ZXRoYWRkcjsKKworCWdldGgtPnBvcnQuY2RjX2ZpbHRlciA9IERFRkFVTFRfRklMVEVSOworCisJZ2V0aC0+cG9ydC5mdW5jLm5hbWUgPSAiY2RjX3N1YnNldCI7CisJZ2V0aC0+cG9ydC5mdW5jLnN0cmluZ3MgPSBnZXRoX3N0cmluZ3M7CisJZ2V0aC0+cG9ydC5mdW5jLmJpbmQgPSBnZXRoX2JpbmQ7CisJZ2V0aC0+cG9ydC5mdW5jLnVuYmluZCA9IGdldGhfdW5iaW5kOworCWdldGgtPnBvcnQuZnVuYy5zZXRfYWx0ID0gZ2V0aF9zZXRfYWx0OworCWdldGgtPnBvcnQuZnVuYy5kaXNhYmxlID0gZ2V0aF9kaXNhYmxlOworCisJc3RhdHVzID0gdXNiX2FkZF9mdW5jdGlvbihjLCAmZ2V0aC0+cG9ydC5mdW5jKTsKKwlpZiAoc3RhdHVzKSB7CisJCWdldGhfc3RyaW5nX2RlZnNbMV0ucyA9IE5VTEw7CisJCWtmcmVlKGdldGgpOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCmluZGV4IDQ3YmI5ZjAuLjE1YzI0ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKQEAgLTM4NjcsOCArMzg2Nyw4IEBACiAJCWN1cmx1bi0+ZGV2LnBhcmVudCA9ICZnYWRnZXQtPmRldjsKIAkJY3VybHVuLT5kZXYuZHJpdmVyID0gJmZzZ19kcml2ZXIuZHJpdmVyOwogCQlkZXZfc2V0X2RydmRhdGEoJmN1cmx1bi0+ZGV2LCBmc2cpOwotCQlzbnByaW50ZihjdXJsdW4tPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLAotCQkJCSIlcy1sdW4lZCIsIGdhZGdldC0+ZGV2LmJ1c19pZCwgaSk7CisJCWRldl9zZXRfbmFtZSgmY3VybHVuLT5kZXYsIiVzLWx1biVkIiwKKwkJCSAgICAgZGV2X25hbWUoJmdhZGdldC0+ZGV2KSwgaSk7CiAKIAkJaWYgKChyYyA9IGRldmljZV9yZWdpc3RlcigmY3VybHVuLT5kZXYpKSAhPSAwKSB7CiAJCQlJTkZPKGZzZywgImZhaWxlZCB0byByZWdpc3RlciBMVU4lZDogJWRcbiIsIGksIHJjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwppbmRleCAxODY4NzU0Li4xNjk1MzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCkBAIC0yMzMxLDcgKzIzMzEsNyBAQAogCXVkY19jb250cm9sbGVyLT5nYWRnZXQubmFtZSA9IGRyaXZlcl9uYW1lOwogCiAJLyogU2V0dXAgZ2FkZ2V0LmRldiBhbmQgcmVnaXN0ZXIgd2l0aCBrZXJuZWwgKi8KLQlzdHJjcHkodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2X3NldF9uYW1lKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldiwgImdhZGdldCIpOwogCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBmc2xfdWRjX3JlbGVhc2U7CiAJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDJmMTZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBUaGlzIGhlYWRlciBkZWNsYXJlcyB0aGUgdXRpbGl0eSBmdW5jdGlvbnMgdXNlZCBieSAiR2FkZ2V0IFplcm8iLCBwbHVzCisgKiBpbnRlcmZhY2VzIHRvIGl0cyB0d28gc2luZ2xlLWNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gZHJpdmVycy4KKyAqLworCisjaWZuZGVmIF9fR19aRVJPX0gKKyNkZWZpbmUgX19HX1pFUk9fSAorCisjaW5jbHVkZSA8bGludXgvdXNiL2NvbXBvc2l0ZS5oPgorCisvKiBnbG9iYWwgc3RhdGUgKi8KK2V4dGVybiB1bnNpZ25lZCBidWZsZW47CitleHRlcm4gY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqb3RnX2Rlc2NbXTsKKworLyogY29tbW9uIHV0aWxpdGllcyAqLworc3RydWN0IHVzYl9yZXF1ZXN0ICphbGxvY19lcF9yZXEoc3RydWN0IHVzYl9lcCAqZXApOwordm9pZCBmcmVlX2VwX3JlcShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOwordm9pZCBkaXNhYmxlX2VuZHBvaW50cyhzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsCisJCXN0cnVjdCB1c2JfZXAgKmluLCBzdHJ1Y3QgdXNiX2VwICpvdXQpOworCisvKiBjb25maWd1cmF0aW9uLXNwZWNpZmljIGxpbmt1cCAqLworaW50IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldik7CitpbnQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldik7CisKKyNlbmRpZiAvKiBfX0dfWkVST19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKaW5kZXggY2E1MTQ5ZS4uNTI0NmU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaApAQCAtMjE0LDMgKzIxNCwyNiBAQAogCQlyZXR1cm4gMHgyMTsKIAlyZXR1cm4gLUVOT0VOVDsKIH0KKworCisvKioKKyAqIGdhZGdldF9zdXBwb3J0c19hbHRzZXR0aW5ncyAtIHJldHVybiB0cnVlIGlmIGFsdHNldHRpbmdzIHdvcmsKKyAqIEBnYWRnZXQ6IHRoZSBnYWRnZXQgaW4gcXVlc3Rpb24KKyAqLworc3RhdGljIGlubGluZSBib29sIGdhZGdldF9zdXBwb3J0c19hbHRzZXR0aW5ncyhzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCS8qIFBYQSAyMXgvMjV4LzI2eCBoYXMgbm8gYWx0c2V0dGluZ3MgYXQgYWxsICovCisJaWYgKGdhZGdldF9pc19weGEoZ2FkZ2V0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogUFhBIDI3eCBhbmQgM3h4IGhhdmUgKmJyb2tlbiogYWx0c2V0dGluZyBzdXBwb3J0ICovCisJaWYgKGdhZGdldF9pc19weGEyN3goZ2FkZ2V0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogU0gzIGhhcmR3YXJlIGp1c3QgZG9lc24ndCBkbyBhbHRzZXR0aW5ncyAqLworCWlmIChnYWRnZXRfaXNfc2goZ2FkZ2V0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogRXZlcnl0aGluZyBlbHNlIGlzICpwcmVzdW1hYmx5KiBmaW5lIC4uLiAqLworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwppbmRleCBiZTY2MTNhLi40OGYxYzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMTc5MCw3ICsxNzkwLDcgQEAKIAlkZXYtPmdhZGdldC5vcHMgPSAmZ29rdV9vcHM7CiAKIAkvKiB0aGUgImdhZGdldCIgYWJzdHJhY3RzL3ZpcnR1YWxpemVzIHRoZSBjb250cm9sbGVyICovCi0Jc3RyY3B5KGRldi0+Z2FkZ2V0LmRldi5idXNfaWQsICJnYWRnZXQiKTsKKwlkZXZfc2V0X25hbWUoJmRldi0+Z2FkZ2V0LmRldiwgImdhZGdldCIpOwogCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IHBkZXYtPmRldi5kbWFfbWFzazsKIAlkZXYtPmdhZGdldC5kZXYucmVsZWFzZSA9IGdhZGdldF9yZWxlYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCBmMTMyYTkyLi4wNDY5MmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTQ4Myw4ICs0ODQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVwX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQsCi0JCXVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCitzdGF0aWMgbG9uZyBlcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7CiAJc3RydWN0IGVwX2RhdGEJCSpkYXRhID0gZmQtPnByaXZhdGVfZGF0YTsKIAlpbnQJCQlzdGF0dXM7CkBAIC03NDAsNyArNzQwLDcgQEAKIAogCS5yZWFkID0JCWVwX3JlYWQsCiAJLndyaXRlID0JZXBfd3JpdGUsCi0JLmlvY3RsID0JZXBfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gZXBfaW9jdGwsCiAJLnJlbGVhc2UgPQllcF9yZWxlYXNlLAogCiAJLmFpb19yZWFkID0JZXBfYWlvX3JlYWQsCkBAIC0xMjk0LDE1ICsxMjk0LDE4IEBACiAgICAgICAgcmV0dXJuIG1hc2s7CiB9CiAKLXN0YXRpYyBpbnQgZGV2X2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQsCi0JCXVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCitzdGF0aWMgbG9uZyBkZXZfaW9jdGwgKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKIAlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBmZC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBkZXYtPmdhZGdldDsKKwlsb25nIHJldCA9IC1FTk9UVFk7CiAKLQlpZiAoZ2FkZ2V0LT5vcHMtPmlvY3RsKQotCQlyZXR1cm4gZ2FkZ2V0LT5vcHMtPmlvY3RsIChnYWRnZXQsIGNvZGUsIHZhbHVlKTsKLQlyZXR1cm4gLUVOT1RUWTsKKwlpZiAoZ2FkZ2V0LT5vcHMtPmlvY3RsKSB7CisJCWxvY2tfa2VybmVsKCk7CisJCXJldCA9IGdhZGdldC0+b3BzLT5pb2N0bCAoZ2FkZ2V0LCBjb2RlLCB2YWx1ZSk7CisJCXVubG9ja19rZXJuZWwoKTsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogLyogdXNlZCBhZnRlciBkZXZpY2UgY29uZmlndXJhdGlvbiAqLwpAQCAtMTMxNCw3ICsxMzE3LDcgQEAKIAkud3JpdGUgPQllcDBfd3JpdGUsCiAJLmZhc3luYyA9CWVwMF9mYXN5bmMsCiAJLnBvbGwgPQkJZXAwX3BvbGwsCi0JLmlvY3RsID0JZGV2X2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9CWRldl9pb2N0bCwKIAkucmVsZWFzZSA9CWRldl9yZWxlYXNlLAogfTsKIApAQCAtMTk2NCw3ICsxOTY3LDcgQEAKIAkub3BlbiA9CQlkZXZfb3BlbiwKIAkud3JpdGUgPQlkZXZfY29uZmlnLAogCS5mYXN5bmMgPQllcDBfZmFzeW5jLAotCS5pb2N0bCA9CWRldl9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSBkZXZfaW9jdGwsCiAJLnJlbGVhc2UgPQlkZXZfcmVsZWFzZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKaW5kZXggODI1YWJkMi4uYzZlN2RmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKQEAgLTE5NzAsNyArMTk3MCw3IEBACiAKIHN0YXRpYyB2b2lkIG5vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlERUJVRygiJXMgJXNcbiIsIF9fZnVuY19fLCBkZXYtPmJ1c19pZCk7CisJREVCVUcoIiVzICVzXG4iLCBfX2Z1bmNfXywgZGV2X25hbWUoZGV2KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGg3YTQweF91ZGMgbWVtb3J5ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L202NjU5Mi11ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tNjY1OTItdWRjLmMKaW5kZXggZWU2YjM1Zi4uOGRhNzUzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L202NjU5Mi11ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbTY2NTkyLXVkYy5jCkBAIC0xNTkzLDcgKzE1OTMsNyBAQAogCiAJbTY2NTkyLT5nYWRnZXQub3BzID0gJm02NjU5Ml9nYWRnZXRfb3BzOwogCWRldmljZV9pbml0aWFsaXplKCZtNjY1OTItPmdhZGdldC5kZXYpOwotCXN0cmNweShtNjY1OTItPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2X3NldF9uYW1lKCZtNjY1OTItPmdhZGdldCwgImdhZGdldCIpOwogCW02NjU5Mi0+Z2FkZ2V0LmlzX2R1YWxzcGVlZCA9IDE7CiAJbTY2NTkyLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJbTY2NTkyLT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gcGRldi0+ZGV2LmRtYV9tYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25kaXMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZGlzLmgKaW5kZXggMDllM2VlNC4uZGY4ODZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25kaXMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmRpcy5oCkBAIC0xLDExICsxLDExIEBACiAvKgotICogbmRpcy5oIAotICogCisgKiBuZGlzLmgKKyAqCiAgKiBudGRkbmRpcy5oIG1vZGlmaWVkIGJ5IEJlbmVkaWt0IFNwcmFuZ2VyIDxiLnNwcmFuZ2VyQHBlbmd1dHJvbml4LmRlPgotICogCi0gKiBUaGFua3MgdG8gdGhlIGN5Z3dpbiBkZXZlbG9wbWVudCB0ZWFtLCAKKyAqCisgKiBUaGFua3MgdG8gdGhlIGN5Z3dpbiBkZXZlbG9wbWVudCB0ZWFtLAogICogZXNwYWNpYWxseSB0byBDYXNwZXIgUy4gSG9ybnN0cnVwIDxjaG9ybnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBOT1QgQ09QWVJJR0hURUQKICAqCiAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIG9mZmVyZWQgZm9yIHVzZSBpbiB0aGUgcHVibGljIGRvbWFpbi4gWW91IG1heQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggZTAxODYyMy4uYjY3YWI2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0yNzY4LDcgKzI3NjgsNyBAQAogCWRldi0+Z2FkZ2V0LmlzX2R1YWxzcGVlZCA9IDE7CiAKIAkvKiB0aGUgImdhZGdldCIgYWJzdHJhY3RzL3ZpcnR1YWxpemVzIHRoZSBjb250cm9sbGVyICovCi0Jc3RyY3B5IChkZXYtPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2X3NldF9uYW1lKCZkZXYtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKIAlkZXYtPmdhZGdldC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAlkZXYtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBwZGV2LT5kZXYuZG1hX21hc2s7CiAJZGV2LT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBnYWRnZXRfcmVsZWFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKaW5kZXggMDNhN2Y0OS4uNGI3OWE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKQEAgLTI2ODYsNyArMjY4Niw3IEBACiAJdWRjLT5nYWRnZXQubmFtZSA9IGRyaXZlcl9uYW1lOwogCiAJZGV2aWNlX2luaXRpYWxpemUoJnVkYy0+Z2FkZ2V0LmRldik7Ci0Jc3RyY3B5ICh1ZGMtPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2X3NldF9uYW1lKCZ1ZGMtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKIAl1ZGMtPmdhZGdldC5kZXYucmVsZWFzZSA9IG9tYXBfdWRjX3JlbGVhc2U7CiAJdWRjLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZvZGV2LT5kZXY7CiAJaWYgKHVzZV9kbWEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCBlYzhmMmViLi40OWNkOWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTgyOCw5ICs4MjgsOCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQKLXByaW50ZXJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBpbnQgY29kZSwKLQkJdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZworcHJpbnRlcl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgcHJpbnRlcl9kZXYJKmRldiA9IGZkLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CkBAIC04NjksNyArODY4LDcgQEAKIAkud3JpdGUgPQlwcmludGVyX3dyaXRlLAogCS5mc3luYyA9CXByaW50ZXJfZnN5bmMsCiAJLnBvbGwgPQkJcHJpbnRlcl9wb2xsLAotCS5pb2N0bCA9CXByaW50ZXJfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gcHJpbnRlcl9pb2N0bCwKIAkucmVsZWFzZSA9CXByaW50ZXJfY2xvc2UKIH07CiAKQEAgLTEzNjEsOCArMTM2MCw4IEBACiAKIAogCS8qIFNldHVwIHRoZSBzeXNmcyBmaWxlcyBmb3IgdGhlIHByaW50ZXIgZ2FkZ2V0LiAqLwotCWRldi0+cGRldiA9IGRldmljZV9jcmVhdGUodXNiX2dhZGdldF9jbGFzcywgTlVMTCwgZ19wcmludGVyX2Rldm5vLAotCQkJImdfcHJpbnRlciIpOworCWRldi0+cGRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh1c2JfZ2FkZ2V0X2NsYXNzLCBOVUxMLAorCQkJCQkgIGdfcHJpbnRlcl9kZXZubywgTlVMTCwgImdfcHJpbnRlciIpOwogCWlmIChJU19FUlIoZGV2LT5wZGV2KSkgewogCQlFUlJPUihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIGRldmljZTogZ19wcmludGVyXG4iKTsKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKaW5kZXggMDMxZGNlYi4uOGZiMDA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCkBAIC0xNTIsOSArMTUyLDEwIEBACiBzdGF0aWMgdm9pZCBwdWxsdXBfb2ZmKHZvaWQpCiB7CiAJc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvCQkqbWFjaCA9IHRoZV9jb250cm9sbGVyLT5tYWNoOworCWludCBvZmZfbGV2ZWwgPSBtYWNoLT5ncGlvX3B1bGx1cF9pbnZlcnRlZDsKIAogCWlmIChtYWNoLT5ncGlvX3B1bGx1cCkKLQkJZ3Bpb19zZXRfdmFsdWUobWFjaC0+Z3Bpb19wdWxsdXAsIDApOworCQlncGlvX3NldF92YWx1ZShtYWNoLT5ncGlvX3B1bGx1cCwgb2ZmX2xldmVsKTsKIAllbHNlIGlmIChtYWNoLT51ZGNfY29tbWFuZCkKIAkJbWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVCk7CiB9CkBAIC0xNjIsOSArMTYzLDEwIEBACiBzdGF0aWMgdm9pZCBwdWxsdXBfb24odm9pZCkKIHsKIAlzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8JCSptYWNoID0gdGhlX2NvbnRyb2xsZXItPm1hY2g7CisJaW50IG9uX2xldmVsID0gIW1hY2gtPmdwaW9fcHVsbHVwX2ludmVydGVkOwogCiAJaWYgKG1hY2gtPmdwaW9fcHVsbHVwKQotCQlncGlvX3NldF92YWx1ZShtYWNoLT5ncGlvX3B1bGx1cCwgMSk7CisJCWdwaW9fc2V0X3ZhbHVlKG1hY2gtPmdwaW9fcHVsbHVwLCBvbl9sZXZlbCk7CiAJZWxzZSBpZiAobWFjaC0+dWRjX2NvbW1hbmQpCiAJCW1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0NPTk5FQ1QpOwogfQpAQCAtMTgxOCw3ICsxODIwLDcgQEAKIAogc3RhdGljIHZvaWQgbm9wX3JlbGVhc2UgKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlETVNHKCIlcyAlc1xuIiwgX19mdW5jX18sIGRldi0+YnVzX2lkKTsKKwlETVNHKCIlcyAlc1xuIiwgX19mdW5jX18sIGRldl9uYW1lKGRldikpOwogfQogCiAvKiB0aGlzIHVzZXMgbG9hZC10aW1lIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIChpbnN0ZWFkIG9mCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwppbmRleCA5YzBlODJlLi45ZDQ0N2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKQEAgLTE1NzUsNyArMTU3NSw2IEBACiB7CiAJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lDUjAsIDApOwogCXVkY193cml0ZWwodWRjLCBVRENJQ1IxLCAwKTsKLQl1ZGNfd3JpdGVsKHVkYywgVVAyT0NSLCBVUDJPQ1JfSFhPRSk7CiAJdWRjX2NsZWFyX21hc2tfVURDQ1IodWRjLCBVRENDUl9VREUpOwogCiAJY2xrX2VuYWJsZSh1ZGMtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCmluZGV4IGQwNjc3ZjUuLjcyMjhlODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCkBAIC0xLDggKzEsNiBAQAogLyoKICAqIFJORElTIE1TRyBwYXJzZXIKICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBybmRpcy5jLHYgMS4xOSAyMDA0LzAzLzI1IDIxOjMzOjQ2IHJvYmVydCBFeHAgJAotICoKICAqIEF1dGhvcnM6CUJlbmVkaWt0IFNwcmFuZ2VyLCBQZW5ndXRyb25peAogICoJCVJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgKICAqCkBAIC0zMCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMzgsOSArMzcsNyBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogCi0jdW5kZWYJUk5ESVNfUE0KLSN1bmRlZglSTkRJU19XQUtFVVAKLSN1bmRlZglWRVJCT1NFCisjdW5kZWYJVkVSQk9TRV9ERUJVRwogCiAjaW5jbHVkZSAicm5kaXMuaCIKIApAQCAtOTYsOSArOTMsNiBAQAogCU9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFLAogCU9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVMsCiAJT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0sCi0jaWYgMAotCU9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUiwKLSNlbmRpZgogCiAJLyogdGhlIHN0YXRpc3RpY2FsIHN0dWZmICovCiAJT0lEX0dFTl9YTUlUX09LLApAQCAtMTQ2LDcgKzE0MCwxNCBAQAogI2VuZGlmCS8qIFJORElTX09QVElPTkFMX1NUQVRTICovCiAKICNpZmRlZglSTkRJU19QTQotCS8qIFBNIGFuZCB3YWtldXAgYXJlIG1hbmRhdG9yeSBmb3IgVVNCOiAqLworCS8qIFBNIGFuZCB3YWtldXAgYXJlICJtYW5kYXRvcnkiIGZvciBVU0IsIGJ1dCB0aGUgUk5ESVMgc3BlY3MKKwkgKiBkb24ndCBzYXkgd2hhdCB0aGV5IG1lYW4gLi4uIGFuZCB0aGUgTkRJUyBzcGVjcyBhcmUgb2Z0ZW4KKwkgKiBjb25mdXNpbmcgYW5kL29yIGFtYmlndW91cyBpbiB0aGlzIGNvbnRleHQuICAoVGhhdCBpcywgbW9yZQorCSAqIHNvIHRoYW4gdGhlaXIgc3BlY3MgZm9yIHRoZSBvdGhlciBPSURzLikKKwkgKgorCSAqIEZJWE1FIHNvbWVvbmUgd2hvIGtub3dzIHdoYXQgdGhlc2Ugc2hvdWxkIGRvLCBwbGVhc2UKKwkgKiBpbXBsZW1lbnQgdGhlbSEKKwkgKi8KIAogCS8qIHBvd2VyIG1hbmFnZW1lbnQgKi8KIAlPSURfUE5QX0NBUEFCSUxJVElFUywKQEAgLTE3Myw2ICsxNzQsOCBAQAogCV9fbGUzMgkJCSpvdXRidWY7CiAJaW50CQkJaSwgY291bnQ7CiAJcm5kaXNfcXVlcnlfY21wbHRfdHlwZQkqcmVzcDsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCSpzdGF0czsKIAogCWlmICghcikgcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19xdWVyeV9jbXBsdF90eXBlICopIHItPmJ1ZjsKQEAgLTE5NCw2ICsxOTcsMTIgQEAKIAlvdXRidWYgPSAoX19sZTMyICopICZyZXNwWzFdOwogCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOwogCisJbmV0ID0gcm5kaXNfcGVyX2Rldl9wYXJhbXNbY29uZmlnTnJdLmRldjsKKwlpZiAobmV0LT5nZXRfc3RhdHMpCisJCXN0YXRzID0gbmV0LT5nZXRfc3RhdHMobmV0KTsKKwllbHNlCisJCXN0YXRzID0gTlVMTDsKKwogCXN3aXRjaCAoT0lEKSB7CiAKIAkvKiBnZW5lcmFsIG9pZHMgKHRhYmxlIDQtMSkgKi8KQEAgLTM1MCwxMSArMzU5LDkgQEAKIAljYXNlIE9JRF9HRU5fWE1JVF9PSzoKIAkJaWYgKHJuZGlzX2RlYnVnID4gMSkKIAkJCURCRygiJXM6IE9JRF9HRU5fWE1JVF9PS1xuIiwgX19mdW5jX18pOwotCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgewotCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgKLQkJCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzLT50eF9wYWNrZXRzIC0KLQkJCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzLT50eF9lcnJvcnMgLQotCQkJICAgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMtPnR4X2Ryb3BwZWQpOworCQlpZiAoc3RhdHMpIHsKKwkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMihzdGF0cy0+dHhfcGFja2V0cworCQkJCS0gc3RhdHMtPnR4X2Vycm9ycyAtIHN0YXRzLT50eF9kcm9wcGVkKTsKIAkJCXJldHZhbCA9IDA7CiAJCX0KIAkJYnJlYWs7CkBAIC0zNjMsMTEgKzM3MCw5IEBACiAJY2FzZSBPSURfR0VOX1JDVl9PSzoKIAkJaWYgKHJuZGlzX2RlYnVnID4gMSkKIAkJCURCRygiJXM6IE9JRF9HRU5fUkNWX09LXG4iLCBfX2Z1bmNfXyk7Ci0JCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7Ci0JCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKAotCQkJICAgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMtPnJ4X3BhY2tldHMgLQotCQkJICAgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMtPnJ4X2Vycm9ycyAtCi0JCQkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cy0+cnhfZHJvcHBlZCk7CisJCWlmIChzdGF0cykgeworCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT5yeF9wYWNrZXRzCisJCQkJLSBzdGF0cy0+cnhfZXJyb3JzIC0gc3RhdHMtPnJ4X2Ryb3BwZWQpOwogCQkJcmV0dmFsID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTM3Niw5ICszODEsOCBAQAogCWNhc2UgT0lEX0dFTl9YTUlUX0VSUk9SOgogCQlpZiAocm5kaXNfZGVidWcgPiAxKQogCQkJREJHKCIlczogT0lEX0dFTl9YTUlUX0VSUk9SXG4iLCBfX2Z1bmNfXyk7Ci0JCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7Ci0JCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KLQkJCQkJLnN0YXRzLT50eF9lcnJvcnMpOworCQlpZiAoc3RhdHMpIHsKKwkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMihzdGF0cy0+dHhfZXJyb3JzKTsKIAkJCXJldHZhbCA9IDA7CiAJCX0KIAkJYnJlYWs7CkBAIC0zODcsOSArMzkxLDggQEAKIAljYXNlIE9JRF9HRU5fUkNWX0VSUk9SOgogCQlpZiAocm5kaXNfZGVidWcgPiAxKQogCQkJREJHKCIlczogT0lEX0dFTl9SQ1ZfRVJST1JcbiIsIF9fZnVuY19fKTsKLQkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKLQkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQotCQkJCQkuc3RhdHMtPnJ4X2Vycm9ycyk7CisJCWlmIChzdGF0cykgeworCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT5yeF9lcnJvcnMpOwogCQkJcmV0dmFsID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTM5NywxNTAgKzQwMCwxMiBAQAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSOgogCQlEQkcoIiVzOiBPSURfR0VOX1JDVl9OT19CVUZGRVJcbiIsIF9fZnVuY19fKTsKLQkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKLQkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQotCQkJCQkuc3RhdHMtPnJ4X2Ryb3BwZWQpOworCQlpZiAoc3RhdHMpIHsKKwkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMihzdGF0cy0+cnhfZHJvcHBlZCk7CiAJCQlyZXR2YWwgPSAwOwogCQl9CiAJCWJyZWFrOwogCi0jaWZkZWYJUk5ESVNfT1BUSU9OQUxfU1RBVFMKLQljYXNlIE9JRF9HRU5fRElSRUNURURfQllURVNfWE1JVDoKLQkJREJHKCIlczogT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlUXG4iLCBfX2Z1bmNfXyk7Ci0JCS8qCi0JCSAqIEF1bnQgVGlsbHkncyBzaXplIG9mIHNob2VzCi0JCSAqIG1pbnVzIGFudGFyY3RpY2EgY291bnQgb2YgcGVuZ3VpbnMKLQkJICogZGl2aWRlZCBieSB3ZWlnaHQgb2YgQWxwaGEgQ2VudGF1cmkKLQkJICovCi0JCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7Ci0JCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKAotCQkJCShybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCi0JCQkJCS5zdGF0cy0+dHhfcGFja2V0cyAtCi0JCQkJIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KLQkJCQkJIC5zdGF0cy0+dHhfZXJyb3JzIC0KLQkJCQkgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQotCQkJCQkgLnN0YXRzLT50eF9kcm9wcGVkKQotCQkJCSogMTIzKTsKLQkJCXJldHZhbCA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1hNSVQ6Ci0JCURCRygiJXM6IE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1hNSVRcbiIsIF9fZnVuY19fKTsKLQkJLyogZGl0byAqLwotCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgewotCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgKLQkJCQkocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQotCQkJCQkuc3RhdHMtPnR4X3BhY2tldHMgLQotCQkJCSBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCi0JCQkJCSAuc3RhdHMtPnR4X2Vycm9ycyAtCi0JCQkJIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KLQkJCQkJIC5zdGF0cy0+dHhfZHJvcHBlZCkKLQkJCQkvIDEyMyk7Ci0JCQlyZXR2YWwgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUOgotCQlEQkcoIiVzOiBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUXG4iLCBfX2Z1bmNfXyk7Ci0JCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7Ci0JCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KLQkJCQkJLnN0YXRzLT5tdWx0aWNhc3QqMTIzNCk7Ci0JCQlyZXR2YWwgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfWE1JVDoKLQkJREJHKCIlczogT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1hNSVRcbiIsIF9fZnVuY19fKTsKLQkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKLQkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQotCQkJCQkuc3RhdHMtPm11bHRpY2FzdCk7Ci0JCQlyZXR2YWwgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUOgotCQlEQkcoIiVzOiBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUXG4iLCBfX2Z1bmNfXyk7Ci0JCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7Ci0JCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KLQkJCQkJLnN0YXRzLT50eF9wYWNrZXRzLzQyKjI1NSk7Ci0JCQlyZXR2YWwgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfWE1JVDoKLQkJREJHKCIlczogT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1hNSVRcbiIsIF9fZnVuY19fKTsKLQkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKLQkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQotCQkJCQkuc3RhdHMtPnR4X3BhY2tldHMvNDIpOwotCQkJcmV0dmFsID0gMDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1Y6Ci0JCURCRygiJXM6IE9JRF9HRU5fRElSRUNURURfQllURVNfUkNWXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKLQkJcmV0dmFsID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDVjoKLQkJREJHKCIlczogT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKLQkJcmV0dmFsID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDVjoKLQkJREJHKCIlczogT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfUkNWXG4iLCBfX2Z1bmNfXyk7Ci0JCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7Ci0JCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KLQkJCQkJLnN0YXRzLT5tdWx0aWNhc3QgKiAxMTExKTsKLQkJCXJldHZhbCA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19SQ1Y6Ci0JCURCRygiJXM6IE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19SQ1ZcbiIsIF9fZnVuY19fKTsKLQkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKLQkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQotCQkJCQkuc3RhdHMtPm11bHRpY2FzdCk7Ci0JCQlyZXR2YWwgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1Y6Ci0JCURCRygiJXM6IE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1JDVlxuIiwgX19mdW5jX18pOwotCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgewotCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCi0JCQkJCS5zdGF0cy0+cnhfcGFja2V0cy80MioyNTUpOwotCQkJcmV0dmFsID0gMDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDVjoKLQkJREJHKCIlczogT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDVlxuIiwgX19mdW5jX18pOwotCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgewotCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCi0JCQkJCS5zdGF0cy0+cnhfcGFja2V0cy80Mik7Ci0JCQlyZXR2YWwgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfR0VOX1JDVl9DUkNfRVJST1I6Ci0JCURCRygiJXM6IE9JRF9HRU5fUkNWX0NSQ19FUlJPUlxuIiwgX19mdW5jX18pOwotCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgewotCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCi0JCQkJCS5zdGF0cy0+cnhfY3JjX2Vycm9ycyk7Ci0JCQlyZXR2YWwgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSDoKLQkJREJHKCIlczogT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEhcbiIsIF9fZnVuY19fKTsKLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCQlyZXR2YWwgPSAwOwotCQlicmVhazsKLSNlbmRpZgkvKiBSTkRJU19PUFRJT05BTF9TVEFUUyAqLwotCiAJLyogaWVlZTgwMi4zIE9JRHMgKHRhYmxlIDQtMykgKi8KIAogCS8qIG1hbmRhdG9yeSAqLwpAQCAtNTkyLDkgKzQ1Nyw4IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfUkNWX0VSUk9SX0FMSUdOTUVOVDoKIAkJREJHKCIlczogT0lEXzgwMl8zX1JDVl9FUlJPUl9BTElHTk1FTlRcbiIsIF9fZnVuY19fKTsKLQkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKLQkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQotCQkJCQkuc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyk7CisJCWlmIChzdGF0cykgeworCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT5yeF9mcmFtZV9lcnJvcnMpOwogCQkJcmV0dmFsID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTYxMyw2NCArNDc3LDYgQEAKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKLSNpZmRlZglSTkRJU19PUFRJT05BTF9TVEFUUwotCWNhc2UgT0lEXzgwMl8zX1hNSVRfREVGRVJSRUQ6Ci0JCURCRygiJXM6IE9JRF84MDJfM19YTUlUX0RFRkVSUkVEXG4iLCBfX2Z1bmNfXyk7Ci0JCS8qIFRPRE8gKi8KLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF84MDJfM19YTUlUX01BWF9DT0xMSVNJT05TOgotCQlEQkcoIiVzOiBPSURfODAyXzNfWE1JVF9NQVhfQ09MTElTSU9OU1xuIiwgX19mdW5jX18pOwotCQkvKiBUT0RPICovCi0JCWJyZWFrOwotCi0JY2FzZSBPSURfODAyXzNfUkNWX09WRVJSVU46Ci0JCURCRygiJXM6IE9JRF84MDJfM19SQ1ZfT1ZFUlJVTlxuIiwgX19mdW5jX18pOwotCQkvKiBUT0RPICovCi0JCWJyZWFrOwotCi0JY2FzZSBPSURfODAyXzNfWE1JVF9VTkRFUlJVTjoKLQkJREJHKCIlczogT0lEXzgwMl8zX1hNSVRfVU5ERVJSVU5cbiIsIF9fZnVuY19fKTsKLQkJLyogVE9ETyAqLwotCQlicmVhazsKLQotCWNhc2UgT0lEXzgwMl8zX1hNSVRfSEVBUlRCRUFUX0ZBSUxVUkU6Ci0JCURCRygiJXM6IE9JRF84MDJfM19YTUlUX0hFQVJUQkVBVF9GQUlMVVJFXG4iLCBfX2Z1bmNfXyk7Ci0JCS8qIFRPRE8gKi8KLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF84MDJfM19YTUlUX1RJTUVTX0NSU19MT1NUOgotCQlEQkcoIiVzOiBPSURfODAyXzNfWE1JVF9USU1FU19DUlNfTE9TVFxuIiwgX19mdW5jX18pOwotCQkvKiBUT0RPICovCi0JCWJyZWFrOwotCi0JY2FzZSBPSURfODAyXzNfWE1JVF9MQVRFX0NPTExJU0lPTlM6Ci0JCURCRygiJXM6IE9JRF84MDJfM19YTUlUX0xBVEVfQ09MTElTSU9OU1xuIiwgX19mdW5jX18pOwotCQkvKiBUT0RPICovCi0JCWJyZWFrOwotI2VuZGlmCS8qIFJORElTX09QVElPTkFMX1NUQVRTICovCi0KLSNpZmRlZglSTkRJU19QTQotCS8qIHBvd2VyIG1hbmFnZW1lbnQgT0lEcyAodGFibGUgNC01KSAqLwotCWNhc2UgT0lEX1BOUF9DQVBBQklMSVRJRVM6Ci0JCURCRygiJXM6IE9JRF9QTlBfQ0FQQUJJTElUSUVTXG4iLCBfX2Z1bmNfXyk7Ci0KLQkJLyogZm9yIG5vdywgbm8gd2FrZXVwIGNhcGFiaWxpdGllcyAqLwotCQlsZW5ndGggPSBzaXplb2YgKHN0cnVjdCBORElTX1BOUF9DQVBBQklMSVRJRVMpOwotCQltZW1zZXQob3V0YnVmLCAwLCBsZW5ndGgpOwotCQlyZXR2YWwgPSAwOwotCQlicmVhazsKLQljYXNlIE9JRF9QTlBfUVVFUllfUE9XRVI6Ci0JCURCRygiJXM6IE9JRF9QTlBfUVVFUllfUE9XRVIgRCVkXG4iLCBfX2Z1bmNfXywKLQkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoYnVmKSAtIDEpOwotCQkvKiBvbmx5IHN1c3BlbmQgaXMgYSByZWFsIHBvd2VyIHN0YXRlLCBhbmQKLQkJICogaXQgY2FuJ3QgYmUgZW50ZXJlZCBieSBPSURfUE5QX1NFVF9QT1dFUi4uLgotCQkgKi8KLQkJbGVuZ3RoID0gMDsKLQkJcmV0dmFsID0gMDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQogCWRlZmF1bHQ6CiAJCXByX3dhcm5pbmcoIiVzOiBxdWVyeSB1bmtub3duIE9JRCAweCUwOFhcbiIsCiAJCQkgX19mdW5jX18sIE9JRCk7CkBAIC03MjYsOSArNTMyLDYgQEAKIAkJICogd2hhdCBtYWtlcyB0aGUgcGFja2V0IGZsb3cgc3RhcnQgYW5kIHN0b3AsIGxpa2UKIAkJICogYWN0aXZhdGluZyB0aGUgQ0RDIEV0aGVybmV0IGFsdHNldHRpbmcuCiAJCSAqLwotI2lmZGVmCVJORElTX1BNCi11cGRhdGVfbGlua3N0YXRlOgotI2VuZGlmCiAJCXJldHZhbCA9IDA7CiAJCWlmICgqcGFyYW1zLT5maWx0ZXIpIHsKIAkJCXBhcmFtcy0+c3RhdGUgPSBSTkRJU19EQVRBX0lOSVRJQUxJWkVEOwpAQCAtNzQ3LDQ5ICs1NTAsNiBAQAogCQlEQkcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7Ci0jaWYgMAotCWNhc2UgT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSOgotCQl7Ci0JCXN0cnVjdCBybmRpc19jb25maWdfcGFyYW1ldGVyCSpwYXJhbTsKLQkJcGFyYW0gPSAoc3RydWN0IHJuZGlzX2NvbmZpZ19wYXJhbWV0ZXIgKikgYnVmOwotCQlEQkcoIiVzOiBPSURfR0VOX1JORElTX0NPTkZJR19QQVJBTUVURVIgJyUqcydcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCW1pbihjcHVfdG9fbGUzMihwYXJhbS0+UGFyYW1ldGVyTmFtZUxlbmd0aCksODApLAotCQkJYnVmICsgcGFyYW0tPlBhcmFtZXRlck5hbWVPZmZzZXQpOwotCQlyZXR2YWwgPSAwOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZglSTkRJU19QTQotCWNhc2UgT0lEX1BOUF9TRVRfUE9XRVI6Ci0JCS8qIFRoZSBvbmx5IHJlYWwgcG93ZXIgc3RhdGUgaXMgVVNCIHN1c3BlbmQsIGFuZCBSTkRJUyByZXF1ZXN0cwotCQkgKiBjYW4ndCBlbnRlciBpdDsgdGhpcyBvbmUgaXNuJ3QgcmVhbGx5IGFib3V0IHBvd2VyLiAgQWZ0ZXIKLQkJICogcmVzdW1pbmcsIFdpbmRvd3MgZm9yY2VzIGEgcmVzZXQsIGFuZCB0aGVuIFNFVF9QT1dFUiBEMC4KLQkJICogRklYTUUgLi4uIHRoZW4gdGhpbmdzIGdvIGJhdHR5OyBXaW5kb3dzIHdlZGdlcyBpdHNlbGYuCi0JCSAqLwotCQlpID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJ1Zik7Ci0JCURCRygiJXM6IE9JRF9QTlBfU0VUX1BPV0VSIEQlZFxuIiwgX19mdW5jX18sIGkgLSAxKTsKLQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgTmRpc0RldmljZVN0YXRlRDA6Ci0JCQkqcGFyYW1zLT5maWx0ZXIgPSBwYXJhbXMtPnNhdmVkX2ZpbHRlcjsKLQkJCWdvdG8gdXBkYXRlX2xpbmtzdGF0ZTsKLQkJY2FzZSBOZGlzRGV2aWNlU3RhdGVEMzoKLQkJY2FzZSBOZGlzRGV2aWNlU3RhdGVEMjoKLQkJY2FzZSBOZGlzRGV2aWNlU3RhdGVEMToKLQkJCXBhcmFtcy0+c2F2ZWRfZmlsdGVyID0gKnBhcmFtcy0+ZmlsdGVyOwotCQkJcmV0dmFsID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0jaWZkZWYJUk5ESVNfV0FLRVVQCi0JLy8gbm8gd2FrZXVwIHN1cHBvcnQgYWR2ZXJ0aXNlZCwgc28gd2FrZXVwIE9JRHMgYWx3YXlzIGZhaWw6Ci0JLy8gIC0gT0lEX1BOUF9FTkFCTEVfV0FLRV9VUAotCS8vICAtIE9JRF9QTlBfe0FERCxSRU1PVkV9X1dBS0VfVVBfUEFUVEVSTgotI2VuZGlmCi0KLSNlbmRpZgkvKiBSTkRJU19QTSAqLwogCiAJZGVmYXVsdDoKIAkJcHJfd2FybmluZygiJXM6IHNldCB1bmtub3duIE9JRCAweCUwOFgsIHNpemUgJWRcbiIsCkBAIC04MDcsOCArNTY3LDEwIEBACiB7CiAJcm5kaXNfaW5pdF9jbXBsdF90eXBlCSpyZXNwOwogCXJuZGlzX3Jlc3BfdCAgICAgICAgICAgICpyOworCXN0cnVjdCBybmRpc19wYXJhbXMJKnBhcmFtcyA9IHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgY29uZmlnTnI7CiAKLQlpZiAoIXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSByZXR1cm4gLUVOT1RTVVBQOworCWlmICghcGFyYW1zLT5kZXYpCisJCXJldHVybiAtRU5PVFNVUFA7CiAKIAlyID0gcm5kaXNfYWRkX3Jlc3BvbnNlIChjb25maWdOciwgc2l6ZW9mIChybmRpc19pbml0X2NtcGx0X3R5cGUpKTsKIAlpZiAoIXIpCkBAIC04MjYsNyArNTg4LDcgQEAKIAlyZXNwLT5NZWRpdW0gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NRURJVU1fODAyXzMpOwogCXJlc3AtPk1heFBhY2tldHNQZXJUcmFuc2ZlciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOwogCXJlc3AtPk1heFRyYW5zZmVyU2l6ZSA9IGNwdV90b19sZTMyICgKLQkJICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldi0+bXR1CisJCSAgcGFyYW1zLT5kZXYtPm10dQogCQkrIHNpemVvZiAoc3RydWN0IGV0aGhkcikKIAkJKyBzaXplb2YgKHN0cnVjdCBybmRpc19wYWNrZXRfbXNnX3R5cGUpCiAJCSsgMjIpOwpAQCAtODM0LDEwICs1OTYsNyBAQAogCXJlc3AtPkFGTGlzdE9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwogCXJlc3AtPkFGTGlzdFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKIAotCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKLQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAotCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpOwotCisJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg0NSw5ICs2MDQsMTEgQEAKIHsKIAlybmRpc19xdWVyeV9jbXBsdF90eXBlICpyZXNwOwogCXJuZGlzX3Jlc3BfdCAgICAgICAgICAgICpyOworCXN0cnVjdCBybmRpc19wYXJhbXMJKnBhcmFtcyA9IHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgY29uZmlnTnI7CiAKIAkvLyBEQkcoIiVzOiBPSUQgPSAlMDhYXG4iLCBfX2Z1bmNfXywgY3B1X3RvX2xlMzIoYnVmLT5PSUQpKTsKLQlpZiAoIXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSByZXR1cm4gLUVOT1RTVVBQOworCWlmICghcGFyYW1zLT5kZXYpCisJCXJldHVybiAtRU5PVFNVUFA7CiAKIAkvKgogCSAqIHdlIG5lZWQgbW9yZSBtZW1vcnk6CkBAIC04NzgsOSArNjM5LDcgQEAKIAl9IGVsc2UKIAkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwogCi0JaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrKQotCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjayAoCi0JCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldik7CisJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4OSw2ICs2NDgsNyBAQAogCXUzMgkJCUJ1Zkxlbmd0aCwgQnVmT2Zmc2V0OwogCXJuZGlzX3NldF9jbXBsdF90eXBlCSpyZXNwOwogCXJuZGlzX3Jlc3BfdAkJKnI7CisJc3RydWN0IHJuZGlzX3BhcmFtcwkqcGFyYW1zID0gcm5kaXNfcGVyX2Rldl9wYXJhbXMgKyBjb25maWdOcjsKIAogCXIgPSBybmRpc19hZGRfcmVzcG9uc2UgKGNvbmZpZ05yLCBzaXplb2YgKHJuZGlzX3NldF9jbXBsdF90eXBlKSk7CiAJaWYgKCFyKQpAQCAtODk4LDcgKzY1OCw3IEBACiAJQnVmTGVuZ3RoID0gbGUzMl90b19jcHUgKGJ1Zi0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOwogCUJ1Zk9mZnNldCA9IGxlMzJfdG9fY3B1IChidWYtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0KTsKIAotI2lmZGVmCVZFUkJPU0UKKyNpZmRlZglWRVJCT1NFX0RFQlVHCiAJREJHKCIlczogTGVuZ3RoOiAlZFxuIiwgX19mdW5jX18sIEJ1Zkxlbmd0aCk7CiAJREJHKCIlczogT2Zmc2V0OiAlZFxuIiwgX19mdW5jX18sIEJ1Zk9mZnNldCk7CiAJREJHKCIlczogSW5mb0J1ZmZlcjogIiwgX19mdW5jX18pOwpAQCAtOTE5LDEwICs2NzksNyBAQAogCWVsc2UKIAkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwogCi0JaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrKQotCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjayAoCi0JCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldik7Ci0KKwlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTMwLDYgKzY4Nyw3IEBACiB7CiAJcm5kaXNfcmVzZXRfY21wbHRfdHlwZQkqcmVzcDsKIAlybmRpc19yZXNwX3QJCSpyOworCXN0cnVjdCBybmRpc19wYXJhbXMJKnBhcmFtcyA9IHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgY29uZmlnTnI7CiAKIAlyID0gcm5kaXNfYWRkX3Jlc3BvbnNlIChjb25maWdOciwgc2l6ZW9mIChybmRpc19yZXNldF9jbXBsdF90eXBlKSk7CiAJaWYgKCFyKQpAQCAtOTQyLDEwICs3MDAsNyBAQAogCS8qIHJlc2VudCBpbmZvcm1hdGlvbiAqLwogCXJlc3AtPkFkZHJlc3NpbmdSZXNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOwogCi0JaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrKQotCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjayAoCi0JCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldik7Ci0KKwlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTU0LDYgKzcwOSw3IEBACiB7CiAJcm5kaXNfa2VlcGFsaXZlX2NtcGx0X3R5cGUJKnJlc3A7CiAJcm5kaXNfcmVzcF90CQkJKnI7CisJc3RydWN0IHJuZGlzX3BhcmFtcwkqcGFyYW1zID0gcm5kaXNfcGVyX2Rldl9wYXJhbXMgKyBjb25maWdOcjsKIAogCS8qIGhvc3QgInNob3VsZCIgY2hlY2sgb25seSBpbiBSTkRJU19EQVRBX0lOSVRJQUxJWkVEIHN0YXRlICovCiAKQEAgLTk2OCwxMCArNzI0LDcgQEAKIAlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLwogCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKIAotCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKLQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAotCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpOwotCisJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk4Myw4ICs3MzYsOSBAQAogewogCXJuZGlzX2luZGljYXRlX3N0YXR1c19tc2dfdHlwZQkqcmVzcDsKIAlybmRpc19yZXNwX3QJCQkqcjsKKwlzdHJ1Y3Qgcm5kaXNfcGFyYW1zCSpwYXJhbXMgPSBybmRpc19wZXJfZGV2X3BhcmFtcyArIGNvbmZpZ05yOwogCi0JaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdGUgPT0gUk5ESVNfVU5JTklUSUFMSVpFRCkKKwlpZiAocGFyYW1zLT5zdGF0ZSA9PSBSTkRJU19VTklOSVRJQUxJWkVEKQogCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJciA9IHJuZGlzX2FkZF9yZXNwb25zZSAoY29uZmlnTnIsCkBAIC0xMDAwLDkgKzc1NCw3IEBACiAJcmVzcC0+U3RhdHVzQnVmZmVyTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CiAJcmVzcC0+U3RhdHVzQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CiAKLQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2spCi0JCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrICgKLQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAyOSw3ICs3ODEsNiBAQAogCiAJaWYgKGNvbmZpZ05yID49IFJORElTX01BWF9DT05GSUdTKQogCQlyZXR1cm47Ci0Jcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS51c2VkID0gMDsKIAlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRlID0gUk5ESVNfVU5JTklUSUFMSVpFRDsKIAogCS8qIGRyYWluIHRoZSByZXNwb25zZSBxdWV1ZSAqLwpAQCAtMTE0MiwyMSArODkzLDI1IEBACiAJcmV0dXJuIC1FTk9UU1VQUDsKIH0KIAotaW50IHJuZGlzX3JlZ2lzdGVyIChpbnQgKCogcm5kaXNfY29udHJvbF9hY2spIChzdHJ1Y3QgbmV0X2RldmljZSAqKSkKK2ludCBybmRpc19yZWdpc3Rlcih2b2lkICgqcmVzcF9hdmFpbCkodm9pZCAqdiksIHZvaWQgKnYpCiB7CiAJdTggaTsKIAorCWlmICghcmVzcF9hdmFpbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlmb3IgKGkgPSAwOyBpIDwgUk5ESVNfTUFYX0NPTkZJR1M7IGkrKykgewogCQlpZiAoIXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS51c2VkKSB7CiAJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0udXNlZCA9IDE7Ci0JCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0uYWNrID0gcm5kaXNfY29udHJvbF9hY2s7CisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0ucmVzcF9hdmFpbCA9IHJlc3BfYXZhaWw7CisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0udiA9IHY7CiAJCQlEQkcoIiVzOiBjb25maWdOciA9ICVkXG4iLCBfX2Z1bmNfXywgaSk7CiAJCQlyZXR1cm4gaTsKIAkJfQogCX0KIAlEQkcoImZhaWxlZFxuIik7CiAKLQlyZXR1cm4gLTE7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHZvaWQgcm5kaXNfZGVyZWdpc3RlciAoaW50IGNvbmZpZ05yKQpAQCAtMTE2OSwxNiArOTI0LDE0IEBACiAJcmV0dXJuOwogfQogCi1pbnQgcm5kaXNfc2V0X3BhcmFtX2RldiAodTggY29uZmlnTnIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzLAotCQkJIHUxNiAqY2RjX2ZpbHRlcikKK2ludCBybmRpc19zZXRfcGFyYW1fZGV2KHU4IGNvbmZpZ05yLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgKmNkY19maWx0ZXIpCiB7CiAJREJHKCIlczpcbiIsIF9fZnVuY19fICk7Ci0JaWYgKCFkZXYgfHwgIXN0YXRzKSByZXR1cm4gLTE7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRUlOVkFMOwogCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykgcmV0dXJuIC0xOwogCiAJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYgPSBkZXY7Ci0Jcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cyA9IHN0YXRzOwogCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZmlsdGVyID0gY2RjX2ZpbHRlcjsKIAogCXJldHVybiAwOwpAQCAtMTI5NiwxNCArMTA0OSwxMSBAQAogCiAjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKIAotc3RhdGljIGludCBybmRpc19wcm9jX3JlYWQgKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCQl2b2lkICpkYXRhKQorc3RhdGljIGludCBybmRpc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWNoYXIgKm91dCA9IHBhZ2U7Ci0JaW50IGxlbjsKLQlybmRpc19wYXJhbXMgKnBhcmFtID0gKHJuZGlzX3BhcmFtcyAqKSBkYXRhOworCXJuZGlzX3BhcmFtcyAqcGFyYW0gPSBtLT5wcml2YXRlOwogCi0Jb3V0ICs9IHNucHJpbnRmIChvdXQsIGNvdW50LAorCXNlcV9wcmludGYobSwKIAkJCSAiQ29uZmlnIE5yLiAlZFxuIgogCQkJICJ1c2VkICAgICAgOiAlc1xuIgogCQkJICJzdGF0ZSAgICAgOiAlc1xuIgpAQCAtMTMyNiwyNSArMTA3NiwxMyBAQAogCQkJIChwYXJhbS0+bWVkaWFfc3RhdGUpID8gMCA6IHBhcmFtLT5zcGVlZCoxMDAsCiAJCQkgKHBhcmFtLT5tZWRpYV9zdGF0ZSkgPyAiZGlzY29ubmVjdGVkIiA6ICJjb25uZWN0ZWQiLAogCQkJIHBhcmFtLT52ZW5kb3JJRCwgcGFyYW0tPnZlbmRvckRlc2NyKTsKLQotCWxlbiA9IG91dCAtIHBhZ2U7Ci0JbGVuIC09IG9mZjsKLQotCWlmIChsZW4gPCBjb3VudCkgewotCQkqZW9mID0gMTsKLQkJaWYgKGxlbiA8PSAwKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlCi0JCWxlbiA9IGNvdW50OwotCi0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gbGVuOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJuZGlzX3Byb2Nfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3Qgcm5kaXNfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jcm5kaXNfcGFyYW1zICpwID0gZGF0YTsKKwlybmRpc19wYXJhbXMgKnAgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJdTMyIHNwZWVkID0gMDsKIAlpbnQgaSwgZmxfc3BlZWQgPSAwOwogCkBAIC0xMzg2LDYgKzExMjQsMjAgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBpbnQgcm5kaXNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBybmRpc19wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBybmRpc19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHJuZGlzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBybmRpc19wcm9jX3dyaXRlLAorfTsKKwogI2RlZmluZQlOQU1FX1RFTVBMQVRFCSJkcml2ZXIvcm5kaXMtJTAzZCIKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm5kaXNfY29ubmVjdF9zdGF0ZSBbUk5ESVNfTUFYX0NPTkZJR1NdOwpAQCAtMTQwMyw3ICsxMTU1LDkgQEAKIAogCQlzcHJpbnRmIChuYW1lLCBOQU1FX1RFTVBMQVRFLCBpKTsKIAkJaWYgKCEocm5kaXNfY29ubmVjdF9zdGF0ZSBbaV0KLQkJCQk9IGNyZWF0ZV9wcm9jX2VudHJ5IChuYW1lLCAwNjYwLCBOVUxMKSkpCisJCQkJPSBwcm9jX2NyZWF0ZV9kYXRhKG5hbWUsIDA2NjAsIE5VTEwsCisJCQkJCSZybmRpc19wcm9jX2ZvcHMsCisJCQkJCSh2b2lkICopKHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgaSkpKSkKIAkJewogCQkJREJHKCIlcyA6cmVtb3ZlIGVudHJpZXMiLCBfX2Z1bmNfXyk7CiAJCQl3aGlsZSAoaSkgewpAQCAtMTQxMywxMSArMTE2Nyw2IEBACiAJCQlEQkcoIlxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCi0JCXJuZGlzX2Nvbm5lY3Rfc3RhdGUgW2ldLT53cml0ZV9wcm9jID0gcm5kaXNfcHJvY193cml0ZTsKLQkJcm5kaXNfY29ubmVjdF9zdGF0ZSBbaV0tPnJlYWRfcHJvYyA9IHJuZGlzX3Byb2NfcmVhZDsKLQkJcm5kaXNfY29ubmVjdF9zdGF0ZSBbaV0tPmRhdGEgPSAodm9pZCAqKQotCQkJCShybmRpc19wZXJfZGV2X3BhcmFtcyArIGkpOwogI2VuZGlmCiAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS5jb25maWduciA9IGk7CiAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS51c2VkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmgKaW5kZXggMzk3YjE0OS4uYWFjNjFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmgKQEAgLTEsOCArMSw2IEBACiAvKgogICogUk5ESVMJRGVmaW5pdGlvbnMgZm9yIFJlbW90ZSBORElTCiAgKgotICogVmVyc2lvbjoJJElkOiBybmRpcy5oLHYgMS4xNSAyMDA0LzAzLzI1IDIxOjMzOjQ2IHJvYmVydCBFeHAgJAotICoKICAqIEF1dGhvcnM6CUJlbmVkaWt0IFNwcmFuZ2VyLCBQZW5ndXRyb25peAogICoJCVJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgKICAqCkBAIC0yMzUsMjAgKzIzMywxOSBAQAogCWNvbnN0IHU4CQkqaG9zdF9tYWM7CiAJdTE2CQkJKmZpbHRlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAogCXUzMgkJCXZlbmRvcklEOwogCWNvbnN0IGNoYXIJCSp2ZW5kb3JEZXNjcjsKLQlpbnQJCQkoKmFjaykgKHN0cnVjdCBuZXRfZGV2aWNlICopOworCXZvaWQJCQkoKnJlc3BfYXZhaWwpKHZvaWQgKnYpOworCXZvaWQJCQkqdjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJlc3BfcXVldWU7CiB9IHJuZGlzX3BhcmFtczsKIAogLyogUk5ESVMgTWVzc2FnZSBwYXJzZXIgYW5kIG90aGVyIHVzZWxlc3MgZnVuY3Rpb25zICovCiBpbnQgIHJuZGlzX21zZ19wYXJzZXIgKHU4IGNvbmZpZ05yLCB1OCAqYnVmKTsKLWludCAgcm5kaXNfcmVnaXN0ZXIgKGludCAoKnJuZGlzX2NvbnRyb2xfYWNrKSAoc3RydWN0IG5ldF9kZXZpY2UgKikpOworaW50ICBybmRpc19yZWdpc3Rlcih2b2lkICgqcmVzcF9hdmFpbCkodm9pZCAqdiksIHZvaWQgKnYpOwogdm9pZCBybmRpc19kZXJlZ2lzdGVyIChpbnQgY29uZmlnTnIpOwogaW50ICBybmRpc19zZXRfcGFyYW1fZGV2ICh1OCBjb25maWdOciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMsCiAJCQkgdTE2ICpjZGNfZmlsdGVyKTsKIGludCAgcm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAodTggY29uZmlnTnIsIHUzMiB2ZW5kb3JJRCwKIAkJCSAgICBjb25zdCBjaGFyICp2ZW5kb3JEZXNjcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKaW5kZXggZmEwMTlmYS4uYjM2OTlhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwpAQCAtMSwxNSArMSw5IEBACiAvKgotICogZ19zZXJpYWwuYyAtLSBVU0IgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIKKyAqIHNlcmlhbC5jIC0tIFVTQiBnYWRnZXQgc2VyaWFsIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDAzIChDKSBBbCBCb3JjaGVycyAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKQotICoKLSAqIFRoaXMgY29kZSBpcyBiYXNlZCBpbiBwYXJ0IG9uIHRoZSBHYWRnZXQgWmVybyBkcml2ZXIsIHdoaWNoCi0gKiBpcyBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgRGF2aWQgQnJvd25lbGwsIGFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGFsc28gYm9ycm93cyBmcm9tIHVzYnNlcmlhbC5jLCB3aGljaCBpcwotICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEJlcmdlciAocGJlcmdlckBicmltc29uLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMCBBbCBCb3JjaGVycyAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzIEFsIEJvcmNoZXJzIChhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKQEAgLTIyLDIyNTQgKzE2LDIzNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAKLSNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2NkYy5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KLQorI2luY2x1ZGUgInVfc2VyaWFsLmgiCiAjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCiAKIAogLyogRGVmaW5lcyAqLwogCi0jZGVmaW5lIEdTX1ZFUlNJT05fU1RSCQkJInYyLjIiCi0jZGVmaW5lIEdTX1ZFUlNJT05fTlVNCQkJMHgyMjAwCisjZGVmaW5lIEdTX1ZFUlNJT05fU1RSCQkJInYyLjQiCisjZGVmaW5lIEdTX1ZFUlNJT05fTlVNCQkJMHgyNDAwCiAKICNkZWZpbmUgR1NfTE9OR19OQU1FCQkJIkdhZGdldCBTZXJpYWwiCi0jZGVmaW5lIEdTX1NIT1JUX05BTUUJCQkiZ19zZXJpYWwiCisjZGVmaW5lIEdTX1ZFUlNJT05fTkFNRQkJCUdTX0xPTkdfTkFNRSAiICIgR1NfVkVSU0lPTl9TVFIKIAotI2RlZmluZSBHU19NQUpPUgkJCTEyNwotI2RlZmluZSBHU19NSU5PUl9TVEFSVAkJCTAKLQotLyogUkVWSVNJVCBvbmx5IG9uZSBwb3J0IGlzIHN1cHBvcnRlZCBmb3Igbm93OwotICogc2VlIGdzX3tzZW5kLHJlY3Z9X3BhY2tldCgpIC4uLiBubyBtdWx0aXBsZXhpbmcsCi0gKiBhbmQgbm8gc3VwcG9ydCBmb3IgbXVsdGlwbGUgQUNNIGRldmljZXMuCi0gKi8KLSNkZWZpbmUgR1NfTlVNX1BPUlRTCQkJMQotCi0jZGVmaW5lIEdTX05VTV9DT05GSUdTCQkJMQotI2RlZmluZSBHU19OT19DT05GSUdfSUQJCQkwCi0jZGVmaW5lIEdTX0JVTEtfQ09ORklHX0lECQkxCi0jZGVmaW5lIEdTX0FDTV9DT05GSUdfSUQJCTIKLQotI2RlZmluZSBHU19NQVhfTlVNX0lOVEVSRkFDRVMJCTIKLSNkZWZpbmUgR1NfQlVMS19JTlRFUkZBQ0VfSUQJCTAKLSNkZWZpbmUgR1NfQ09OVFJPTF9JTlRFUkZBQ0VfSUQJCTAKLSNkZWZpbmUgR1NfREFUQV9JTlRFUkZBQ0VfSUQJCTEKLQotI2RlZmluZSBHU19NQVhfREVTQ19MRU4JCQkyNTYKLQotI2RlZmluZSBHU19ERUZBVUxUX1JFQURfUV9TSVpFCQkzMgotI2RlZmluZSBHU19ERUZBVUxUX1dSSVRFX1FfU0laRQkJMzIKLQotI2RlZmluZSBHU19ERUZBVUxUX1dSSVRFX0JVRl9TSVpFCTgxOTIKLSNkZWZpbmUgR1NfVE1QX0JVRl9TSVpFCQkJODE5MgotCi0jZGVmaW5lIEdTX0NMT1NFX1RJTUVPVVQJCTE1Ci0KLSNkZWZpbmUgR1NfREVGQVVMVF9VU0VfQUNNCQkwCi0KLS8qIDk2MDAtOC1OLTEgLi4uIG1hdGNoZXMgaW5pdF90ZXJtaW9zLmNfY2ZsYWcgYW5kIGRlZmF1bHRzCi0gKiBleHBlY3RlZCBieSAidXNic2VyLnN5cyIgb24gTVMtV2luZG93cy4KLSAqLwotI2RlZmluZSBHU19ERUZBVUxUX0RURV9SQVRFCQk5NjAwCi0jZGVmaW5lIEdTX0RFRkFVTFRfREFUQV9CSVRTCQk4Ci0jZGVmaW5lIEdTX0RFRkFVTFRfUEFSSVRZCQlVU0JfQ0RDX05PX1BBUklUWQotI2RlZmluZSBHU19ERUZBVUxUX0NIQVJfRk9STUFUCQlVU0JfQ0RDXzFfU1RPUF9CSVRTCi0KLS8qIG1heHBhY2tldCBhbmQgb3RoZXIgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWNzIHZhcnkgYnkgc3BlZWQuICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqCi1jaG9vc2VfZXBfZGVzYyhzdHJ1Y3QgdXNiX2dhZGdldCAqZywgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpocywKLQkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpmcykKLXsKLQlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChnKSAmJiBnLT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKLQkJcmV0dXJuIGhzOwotCXJldHVybiBmczsKLX0KLQotCi0vKiBkZWJ1ZyBzZXR0aW5ncyAqLwotI2lmZGVmIERFQlVHCi1zdGF0aWMgaW50IGRlYnVnID0gMTsKLSNlbHNlCi0jZGVmaW5lCWRlYnVnIDAKLSNlbmRpZgotCi0jZGVmaW5lIGdzX2RlYnVnKGZvcm1hdCwgYXJnLi4uKSBcCi0JZG8geyBpZiAoZGVidWcpIHByX2RlYnVnKGZvcm1hdCwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZ3NfZGVidWdfbGV2ZWwobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCi0JZG8geyBpZiAoZGVidWcgPj0gbGV2ZWwpIHByX2RlYnVnKGZvcm1hdCwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogVGhhbmtzIHRvIE5ldENoaXAgVGVjaG5vbG9naWVzIGZvciBkb25hdGluZyB0aGlzIHByb2R1Y3QgSUQuCi0gKgotICogRE8gTk9UIFJFVVNFIFRIRVNFIElEcyB3aXRoIGEgcHJvdG9jb2wtaW5jb21wYXRpYmxlIGRyaXZlciEhICBFdmVyISEKLSAqIEluc3RlYWQ6ICBhbGxvY2F0ZSB5b3VyIG93biwgdXNpbmcgbm9ybWFsIFVTQi1JRiBwcm9jZWR1cmVzLgotICovCisqCisqIERPIE5PVCBSRVVTRSBUSEVTRSBJRHMgd2l0aCBhIHByb3RvY29sLWluY29tcGF0aWJsZSBkcml2ZXIhISAgRXZlciEhCisqIEluc3RlYWQ6ICBhbGxvY2F0ZSB5b3VyIG93biwgdXNpbmcgbm9ybWFsIFVTQi1JRiBwcm9jZWR1cmVzLgorKi8KICNkZWZpbmUgR1NfVkVORE9SX0lECQkJMHgwNTI1CS8qIE5ldENoaXAgKi8KICNkZWZpbmUgR1NfUFJPRFVDVF9JRAkJCTB4YTRhNgkvKiBMaW51eC1VU0IgU2VyaWFsIEdhZGdldCAqLwogI2RlZmluZSBHU19DRENfUFJPRFVDVF9JRAkJMHhhNGE3CS8qIC4uLiBhcyBDREMtQUNNICovCiAKLSNkZWZpbmUgR1NfTE9HMl9OT1RJRllfSU5URVJWQUwJCTUJLyogMSA8PCA1ID09IDMyIG1zZWMgKi8KLSNkZWZpbmUgR1NfTk9USUZZX01BWFBBQ0tFVAkJOAorLyogc3RyaW5nIElEcyBhcmUgYXNzaWduZWQgZHluYW1pY2FsbHkgKi8KIAorI2RlZmluZSBTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWAkJMAorI2RlZmluZSBTVFJJTkdfUFJPRFVDVF9JRFgJCTEKKyNkZWZpbmUgU1RSSU5HX0RFU0NSSVBUSU9OX0lEWAkJMgogCi0vKiBjaXJjdWxhciBidWZmZXIgKi8KLXN0cnVjdCBnc19idWYgewotCXVuc2lnbmVkIGludAkJYnVmX3NpemU7Ci0JY2hhcgkJCSpidWZfYnVmOwotCWNoYXIJCQkqYnVmX2dldDsKLQljaGFyCQkJKmJ1Zl9wdXQ7Ci19OwotCi0vKiB0aGUgcG9ydCBzdHJ1Y3R1cmUgaG9sZHMgaW5mbyBmb3IgZWFjaCBwb3J0LCBvbmUgZm9yIGVhY2ggbWlub3IgbnVtYmVyICovCi1zdHJ1Y3QgZ3NfcG9ydCB7Ci0Jc3RydWN0IGdzX2RldgkJKnBvcnRfZGV2OwkvKiBwb2ludGVyIHRvIGRldmljZSBzdHJ1Y3QgKi8KLQlzdHJ1Y3QgdHR5X3N0cnVjdAkqcG9ydF90dHk7CS8qIHBvaW50ZXIgdG8gdHR5IHN0cnVjdCAqLwotCXNwaW5sb2NrX3QJCXBvcnRfbG9jazsKLQlpbnQJCQlwb3J0X251bTsKLQlpbnQJCQlwb3J0X29wZW5fY291bnQ7Ci0JaW50CQkJcG9ydF9pbl91c2U7CS8qIG9wZW4vY2xvc2UgaW4gcHJvZ3Jlc3MgKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdAlwb3J0X3dyaXRlX3dhaXQ7Lyogd2FpdGluZyB0byB3cml0ZSAqLwotCXN0cnVjdCBnc19idWYJCSpwb3J0X3dyaXRlX2J1ZjsKLQlzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyBwb3J0X2xpbmVfY29kaW5nOwkvKiA4LU4tMSBldGMgKi8KLQl1MTYJCQlwb3J0X2hhbmRzaGFrZV9iaXRzOwotI2RlZmluZSBSUzIzMl9SVFMJKDEgPDwgMSkKLSNkZWZpbmUgUlMyMzJfRFRFCSgxIDw8IDApCi19OwotCi0vKiB0aGUgZGV2aWNlIHN0cnVjdHVyZSBob2xkcyBpbmZvIGZvciB0aGUgVVNCIGRldmljZSAqLwotc3RydWN0IGdzX2RldiB7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJKmRldl9nYWRnZXQ7CS8qIGdhZGdldCBkZXZpY2UgcG9pbnRlciAqLwotCXNwaW5sb2NrX3QJCWRldl9sb2NrOwkvKiBsb2NrIGZvciBzZXQvcmVzZXQgY29uZmlnICovCi0JaW50CQkJZGV2X2NvbmZpZzsJLyogY29uZmlndXJhdGlvbiBudW1iZXIgKi8KLQlzdHJ1Y3QgdXNiX2VwCQkqZGV2X25vdGlmeV9lcDsJLyogYWRkcmVzcyBvZiBub3RpZnkgZW5kcG9pbnQgKi8KLQlzdHJ1Y3QgdXNiX2VwCQkqZGV2X2luX2VwOwkvKiBhZGRyZXNzIG9mIGluIGVuZHBvaW50ICovCi0Jc3RydWN0IHVzYl9lcAkJKmRldl9vdXRfZXA7CS8qIGFkZHJlc3Mgb2Ygb3V0IGVuZHBvaW50ICovCi0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCQkvKiBkZXNjcmlwdG9yIG9mIG5vdGlmeSBlcCAqLwotCQkJCSpkZXZfbm90aWZ5X2VwX2Rlc2M7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCQkvKiBkZXNjcmlwdG9yIG9mIGluIGVuZHBvaW50ICovCi0JCQkJKmRldl9pbl9lcF9kZXNjOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkJLyogZGVzY3JpcHRvciBvZiBvdXQgZW5kcG9pbnQgKi8KLQkJCQkqZGV2X291dF9lcF9kZXNjOwotCXN0cnVjdCB1c2JfcmVxdWVzdAkqZGV2X2N0cmxfcmVxOwkvKiBjb250cm9sIHJlcXVlc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWRldl9yZXFfbGlzdDsJLyogbGlzdCBvZiB3cml0ZSByZXF1ZXN0cyAqLwotCWludAkJCWRldl9zY2hlZF9wb3J0OwkvKiByb3VuZCByb2JpbiBwb3J0IHNjaGVkdWxlZCAqLwotCXN0cnVjdCBnc19wb3J0CQkqZGV2X3BvcnRbR1NfTlVNX1BPUlRTXTsgLyogdGhlIHBvcnRzICovCi19OwotCi0KLS8qIEZ1bmN0aW9ucyAqLwotCi0vKiB0dHkgZHJpdmVyIGludGVybmFscyAqLwotc3RhdGljIGludCBnc19zZW5kKHN0cnVjdCBnc19kZXYgKmRldik7Ci1zdGF0aWMgaW50IGdzX3NlbmRfcGFja2V0KHN0cnVjdCBnc19kZXYgKmRldiwgY2hhciAqcGFja2V0LAotCXVuc2lnbmVkIGludCBzaXplKTsKLXN0YXRpYyBpbnQgZ3NfcmVjdl9wYWNrZXQoc3RydWN0IGdzX2RldiAqZGV2LCBjaGFyICpwYWNrZXQsCi0JdW5zaWduZWQgaW50IHNpemUpOwotc3RhdGljIHZvaWQgZ3NfcmVhZF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOwotc3RhdGljIHZvaWQgZ3Nfd3JpdGVfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKTsKLQotLyogZ2FkZ2V0IGRyaXZlciBpbnRlcm5hbHMgKi8KLXN0YXRpYyBpbnQgZ3Nfc2V0X2NvbmZpZyhzdHJ1Y3QgZ3NfZGV2ICpkZXYsIHVuc2lnbmVkIGNvbmZpZyk7Ci1zdGF0aWMgdm9pZCBnc19yZXNldF9jb25maWcoc3RydWN0IGdzX2RldiAqZGV2KTsKLXN0YXRpYyBpbnQgZ3NfYnVpbGRfY29uZmlnX2J1Zih1OCAqYnVmLCBzdHJ1Y3QgdXNiX2dhZGdldCAqZywKLQkJdTggdHlwZSwgdW5zaWduZWQgaW50IGluZGV4LCBpbnQgaXNfb3RnKTsKLQotc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqZ3NfYWxsb2NfcmVxKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBpbnQgbGVuLAotCWdmcF90IGttYWxsb2NfZmxhZ3MpOwotc3RhdGljIHZvaWQgZ3NfZnJlZV9yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKTsKLQotc3RhdGljIGludCBnc19hbGxvY19wb3J0cyhzdHJ1Y3QgZ3NfZGV2ICpkZXYsIGdmcF90IGttYWxsb2NfZmxhZ3MpOwotc3RhdGljIHZvaWQgZ3NfZnJlZV9wb3J0cyhzdHJ1Y3QgZ3NfZGV2ICpkZXYpOwotCi0vKiBjaXJjdWxhciBidWZmZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3NfYnVmICpnc19idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGttYWxsb2NfZmxhZ3MpOwotc3RhdGljIHZvaWQgZ3NfYnVmX2ZyZWUoc3RydWN0IGdzX2J1ZiAqZ2IpOwotc3RhdGljIHZvaWQgZ3NfYnVmX2NsZWFyKHN0cnVjdCBnc19idWYgKmdiKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ3NfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpOwotc3RhdGljIHVuc2lnbmVkIGludCBnc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpOwotc3RhdGljIHVuc2lnbmVkIGludCBnc19idWZfcHV0KHN0cnVjdCBnc19idWYgKmdiLCBjb25zdCBjaGFyICpidWYsCi0JdW5zaWduZWQgaW50IGNvdW50KTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ3NfYnVmX2dldChzdHJ1Y3QgZ3NfYnVmICpnYiwgY2hhciAqYnVmLAotCXVuc2lnbmVkIGludCBjb3VudCk7Ci0KLQotLyogR2xvYmFscyAqLwotCi1zdGF0aWMgc3RydWN0IGdzX2RldiAqZ3NfZGV2aWNlOwotCi1zdGF0aWMgc3RydWN0IG11dGV4IGdzX29wZW5fY2xvc2VfbG9ja1tHU19OVU1fUE9SVFNdOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFVTQiBkZXNjcmlwdG9ycyAqLwotCi0jZGVmaW5lIEdTX01BTlVGQUNUVVJFUl9TVFJfSUQJMQotI2RlZmluZSBHU19QUk9EVUNUX1NUUl9JRAkyCi0jZGVmaW5lIEdTX1NFUklBTF9TVFJfSUQJMwotI2RlZmluZSBHU19CVUxLX0NPTkZJR19TVFJfSUQJNAotI2RlZmluZSBHU19BQ01fQ09ORklHX1NUUl9JRAk1Ci0jZGVmaW5lIEdTX0NPTlRST0xfU1RSX0lECTYKLSNkZWZpbmUgR1NfREFUQV9TVFJfSUQJCTcKLQotLyogc3RhdGljIHN0cmluZ3MsIGluIFVURi04ICovCiBzdGF0aWMgY2hhciBtYW51ZmFjdHVyZXJbNTBdOwotc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nIGdzX3N0cmluZ3NbXSA9IHsKLQl7IEdTX01BTlVGQUNUVVJFUl9TVFJfSUQsIG1hbnVmYWN0dXJlciB9LAotCXsgR1NfUFJPRFVDVF9TVFJfSUQsIEdTX0xPTkdfTkFNRSB9LAotCXsgR1NfQlVMS19DT05GSUdfU1RSX0lELCAiR2FkZ2V0IFNlcmlhbCBCdWxrIiB9LAotCXsgR1NfQUNNX0NPTkZJR19TVFJfSUQsICJHYWRnZXQgU2VyaWFsIENEQyBBQ00iIH0sCi0JeyBHU19DT05UUk9MX1NUUl9JRCwgIkdhZGdldCBTZXJpYWwgQ29udHJvbCIgfSwKLQl7IEdTX0RBVEFfU1RSX0lELCAiR2FkZ2V0IFNlcmlhbCBEYXRhIiB9LAorCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgc3RyaW5nc19kZXZbXSA9IHsKKwlbU1RSSU5HX01BTlVGQUNUVVJFUl9JRFhdLnMgPSBtYW51ZmFjdHVyZXIsCisJW1NUUklOR19QUk9EVUNUX0lEWF0ucyA9IEdTX1ZFUlNJT05fTkFNRSwKKwlbU1RSSU5HX0RFU0NSSVBUSU9OX0lEWF0ucyA9IE5VTEwgLyogdXBkYXRlZDsgZih1c2VfYWNtKSAqLywKIAl7ICB9IC8qIGVuZCBvZiBsaXN0ICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBnc19zdHJpbmdfdGFibGUgPSB7Ci0JLmxhbmd1YWdlID0JCTB4MDQwOSwJLyogZW4tdXMgKi8KLQkuc3RyaW5ncyA9CQlnc19zdHJpbmdzLAorc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3Mgc3RyaW5ndGFiX2RldiA9IHsKKwkubGFuZ3VhZ2UJPSAweDA0MDksCS8qIGVuLXVzICovCisJLnN0cmluZ3MJPSBzdHJpbmdzX2RldiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGdzX2RldmljZV9kZXNjID0geworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKmRldl9zdHJpbmdzW10gPSB7CisJJnN0cmluZ3RhYl9kZXYsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9ERVZJQ0VfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkvKiAuYkRldmljZUNsYXNzID0gZih1c2VfYWNtKSAqLwogCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAogCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAorCS8qIC5iTWF4UGFja2V0U2l6ZTAgPSBmKGhhcmR3YXJlKSAqLwogCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFTkRPUl9JRCksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpLAotCS5pTWFudWZhY3R1cmVyID0JR1NfTUFOVUZBQ1RVUkVSX1NUUl9JRCwKLQkuaVByb2R1Y3QgPQkJR1NfUFJPRFVDVF9TVFJfSUQsCi0JLmJOdW1Db25maWd1cmF0aW9ucyA9CUdTX05VTV9DT05GSUdTLAorCS8qIC5pZFByb2R1Y3QgPQlmKHVzZV9hY20pICovCisJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCisJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCisJLyogLmlQcm9kdWN0ID0gRFlOQU1JQyAqLworCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IgZ3Nfb3RnX2Rlc2NyaXB0b3IgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mKGdzX290Z19kZXNjcmlwdG9yKSwKK3N0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yIG90Z19kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBvdGdfZGVzY3JpcHRvciwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9PVEdfU1JQLAorCisJLyogUkVWSVNJVCBTUlAtb25seSBoYXJkd2FyZSBpcyBwb3NzaWJsZSwgYWx0aG91Z2gKKwkgKiBpdCB3b3VsZCBub3QgYmUgY2FsbGVkICJPVEciIC4uLgorCSAqLworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX09UR19TUlAgfCBVU0JfT1RHX0hOUCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIGdzX2J1bGtfY29uZmlnX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0NPTkZJR19TSVpFLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ09ORklHLAotCS8qIC53VG90YWxMZW5ndGggY29tcHV0ZWQgZHluYW1pY2FsbHkgKi8KLQkuYk51bUludGVyZmFjZXMgPQkxLAotCS5iQ29uZmlndXJhdGlvblZhbHVlID0JR1NfQlVMS19DT05GSUdfSUQsCi0JLmlDb25maWd1cmF0aW9uID0JR1NfQlVMS19DT05GSUdfU1RSX0lELAotCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIgPQkJMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIGdzX2FjbV9jb25maWdfZGVzYyA9IHsKLQkuYkxlbmd0aCA9CQlVU0JfRFRfQ09ORklHX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCi0JLyogLndUb3RhbExlbmd0aCBjb21wdXRlZCBkeW5hbWljYWxseSAqLwotCS5iTnVtSW50ZXJmYWNlcyA9CTIsCi0JLmJDb25maWd1cmF0aW9uVmFsdWUgPQlHU19BQ01fQ09ORklHX0lELAotCS5pQ29uZmlndXJhdGlvbiA9CUdTX0FDTV9DT05GSUdfU1RSX0lELAotCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIgPQkJMSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGdzX2J1bGtfaW50ZXJmYWNlX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0lOVEVSRkFDRV9TSVpFLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAotCS5iSW50ZXJmYWNlTnVtYmVyID0JR1NfQlVMS19JTlRFUkZBQ0VfSUQsCi0JLmJOdW1FbmRwb2ludHMgPQkyLAotCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCi0JLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCi0JLmlJbnRlcmZhY2UgPQkJR1NfREFUQV9TVFJfSUQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBnc19jb250cm9sX2ludGVyZmFjZV9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKLQkuYkludGVyZmFjZU51bWJlciA9CUdTX0NPTlRST0xfSU5URVJGQUNFX0lELAotCS5iTnVtRW5kcG9pbnRzID0JMSwKLQkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NPTU0sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9DRENfU1VCQ0xBU1NfQUNNLAotCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQlVU0JfQ0RDX0FDTV9QUk9UT19BVF9WMjVURVIsCi0JLmlJbnRlcmZhY2UgPQkJR1NfQ09OVFJPTF9TVFJfSUQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBnc19kYXRhX2ludGVyZmFjZV9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKLQkuYkludGVyZmFjZU51bWJlciA9CUdTX0RBVEFfSU5URVJGQUNFX0lELAotCS5iTnVtRW5kcG9pbnRzID0JMiwKLQkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NEQ19EQVRBLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAotCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQkwLAotCS5pSW50ZXJmYWNlID0JCUdTX0RBVEFfU1RSX0lELAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGdzX2hlYWRlcl9kZXNjID0gewotCS5iTGVuZ3RoID0JCXNpemVvZihnc19oZWFkZXJfZGVzYyksCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCi0JLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IgZ3NfY2FsbF9tZ210X2Rlc2NyaXB0b3IgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mKGdzX2NhbGxfbWdtdF9kZXNjcmlwdG9yKSwKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19DQUxMX01BTkFHRU1FTlRfVFlQRSwKLQkuYm1DYXBhYmlsaXRpZXMgPQkwLAotCS5iRGF0YUludGVyZmFjZSA9CTEsCS8qIGluZGV4IG9mIGRhdGEgaW50ZXJmYWNlICovCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9jZGNfYWNtX2Rlc2NyaXB0b3IgZ3NfYWNtX2Rlc2NyaXB0b3IgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mKGdzX2FjbV9kZXNjcmlwdG9yKSwKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKLQkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19BQ01fVFlQRSwKLQkuYm1DYXBhYmlsaXRpZXMgPQkoMSA8PCAxKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIGdzX3VuaW9uX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mKGdzX3VuaW9uX2Rlc2MpLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX1VOSU9OX1RZUEUsCi0JLmJNYXN0ZXJJbnRlcmZhY2UwID0JMCwJLyogaW5kZXggb2YgY29udHJvbCBpbnRlcmZhY2UgKi8KLQkuYlNsYXZlSW50ZXJmYWNlMCA9CTEsCS8qIGluZGV4IG9mIGRhdGEgaW50ZXJmYWNlICovCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzX2Z1bGxzcGVlZF9ub3RpZnlfZGVzYyA9IHsKLQkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAotCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAotCS5iSW50ZXJ2YWwgPQkJMSA8PCBHU19MT0cyX05PVElGWV9JTlRFUlZBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3NfZnVsbHNwZWVkX2luX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKLQkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCi0JLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc19mdWxsc3BlZWRfb3V0X2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKLQkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAotCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpnc19idWxrX2Z1bGxzcGVlZF9mdW5jdGlvbltdID0gewotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19vdGdfZGVzY3JpcHRvciwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfYnVsa19pbnRlcmZhY2VfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZnVsbHNwZWVkX2luX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2Z1bGxzcGVlZF9vdXRfZGVzYywKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpvdGdfZGVzY1tdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKIAlOVUxMLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzX2FjbV9mdWxsc3BlZWRfZnVuY3Rpb25bXSA9IHsKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3Nfb3RnX2Rlc2NyaXB0b3IsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2NvbnRyb2xfaW50ZXJmYWNlX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2hlYWRlcl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19jYWxsX21nbXRfZGVzY3JpcHRvciwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfYWNtX2Rlc2NyaXB0b3IsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX3VuaW9uX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2Z1bGxzcGVlZF9ub3RpZnlfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZGF0YV9pbnRlcmZhY2VfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZnVsbHNwZWVkX2luX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2Z1bGxzcGVlZF9vdXRfZGVzYywKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc19oaWdoc3BlZWRfbm90aWZ5X2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKLQkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCi0JLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKLQkuYkludGVydmFsID0JCUdTX0xPRzJfTk9USUZZX0lOVEVSVkFMKzQsCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzX2hpZ2hzcGVlZF9pbl9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCi0JLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3NfaGlnaHNwZWVkX291dF9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCi0JLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIGdzX3F1YWxpZmllcl9kZXNjID0gewotCS5iTGVuZ3RoID0JCXNpemVvZihzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yKSwKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIsCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApLAotCS8qIGFzc3VtZXMgZXAwIHVzZXMgdGhlIHNhbWUgdmFsdWUgZm9yIGJvdGggc3BlZWRzIC4uLiAqLwotCS5iTnVtQ29uZmlndXJhdGlvbnMgPQlHU19OVU1fQ09ORklHUywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpnc19idWxrX2hpZ2hzcGVlZF9mdW5jdGlvbltdID0gewotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19vdGdfZGVzY3JpcHRvciwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfYnVsa19pbnRlcmZhY2VfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGlnaHNwZWVkX2luX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2hpZ2hzcGVlZF9vdXRfZGVzYywKLQlOVUxMLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzX2FjbV9oaWdoc3BlZWRfZnVuY3Rpb25bXSA9IHsKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3Nfb3RnX2Rlc2NyaXB0b3IsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2NvbnRyb2xfaW50ZXJmYWNlX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2hlYWRlcl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19jYWxsX21nbXRfZGVzY3JpcHRvciwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfYWNtX2Rlc2NyaXB0b3IsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX3VuaW9uX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2hpZ2hzcGVlZF9ub3RpZnlfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZGF0YV9pbnRlcmZhY2VfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGlnaHNwZWVkX2luX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2hpZ2hzcGVlZF9vdXRfZGVzYywKLQlOVUxMLAotfTsKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBNb2R1bGUgKi8KLU1PRFVMRV9ERVNDUklQVElPTihHU19MT05HX05BTUUpOworTU9EVUxFX0RFU0NSSVBUSU9OKEdTX1ZFUlNJT05fTkFNRSk7CiBNT0RVTEVfQVVUSE9SKCJBbCBCb3JjaGVycyIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2lmZGVmIERFQlVHCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nLCAwPW9mZiwgMT1vbiIpOwotI2VuZGlmCitzdGF0aWMgaW50IHVzZV9hY20gPSB0cnVlOworbW9kdWxlX3BhcmFtKHVzZV9hY20sIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyh1c2VfYWNtLCAiVXNlIENEQyBBQ00sIGRlZmF1bHQ9eWVzIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZF9xX3NpemUgPSBHU19ERUZBVUxUX1JFQURfUV9TSVpFOwotbW9kdWxlX3BhcmFtKHJlYWRfcV9zaXplLCB1aW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MocmVhZF9xX3NpemUsICJSZWFkIHJlcXVlc3QgcXVldWUgc2l6ZSwgZGVmYXVsdD0zMiIpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHdyaXRlX3Ffc2l6ZSA9IEdTX0RFRkFVTFRfV1JJVEVfUV9TSVpFOwotbW9kdWxlX3BhcmFtKHdyaXRlX3Ffc2l6ZSwgdWludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKHdyaXRlX3Ffc2l6ZSwgIldyaXRlIHJlcXVlc3QgcXVldWUgc2l6ZSwgZGVmYXVsdD0zMiIpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHdyaXRlX2J1Zl9zaXplID0gR1NfREVGQVVMVF9XUklURV9CVUZfU0laRTsKLW1vZHVsZV9wYXJhbSh3cml0ZV9idWZfc2l6ZSwgdWludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKHdyaXRlX2J1Zl9zaXplLCAiV3JpdGUgYnVmZmVyIHNpemUsIGRlZmF1bHQ9ODE5MiIpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHVzZV9hY20gPSBHU19ERUZBVUxUX1VTRV9BQ007Ci1tb2R1bGVfcGFyYW0odXNlX2FjbSwgdWludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9hY20sICJVc2UgQ0RDIEFDTSwgMD1ubywgMT15ZXMsIGRlZmF1bHQ9bm8iKTsKK3N0YXRpYyB1bnNpZ25lZCBuX3BvcnRzID0gMTsKK21vZHVsZV9wYXJhbShuX3BvcnRzLCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobl9wb3J0cywgIm51bWJlciBvZiBwb3J0cyB0byBjcmVhdGUsIGRlZmF1bHQ9MSIpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBUVFkgRHJpdmVyICovCi0KLS8qCi0gKiBnc19vcGVuCi0gKi8KLXN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgX19pbml0IHNlcmlhbF9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7Ci0JaW50IHBvcnRfbnVtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdzX3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IGdzX2RldiAqZGV2OwotCXN0cnVjdCBnc19idWYgKmJ1ZjsKLQlzdHJ1Y3QgbXV0ZXggKm10eDsKLQlpbnQgcmV0OworCXVuc2lnbmVkIGk7CisJaW50IHN0YXR1cyA9IDA7CiAKLQlwb3J0X251bSA9IHR0eS0+aW5kZXg7Ci0KLQlnc19kZWJ1ZygiZ3Nfb3BlbjogKCVkLCVwLCVwKVxuIiwgcG9ydF9udW0sIHR0eSwgZmlsZSk7Ci0KLQlpZiAocG9ydF9udW0gPCAwIHx8IHBvcnRfbnVtID49IEdTX05VTV9QT1JUUykgewotCQlwcl9lcnIoImdzX29wZW46ICglZCwlcCwlcCkgaW52YWxpZCBwb3J0IG51bWJlclxuIiwKLQkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlmb3IgKGkgPSAwOyBpIDwgbl9wb3J0cyAmJiBzdGF0dXMgPT0gMDsgaSsrKSB7CisJCWlmICh1c2VfYWNtKQorCQkJc3RhdHVzID0gYWNtX2JpbmRfY29uZmlnKGMsIGkpOworCQllbHNlCisJCQlzdGF0dXMgPSBnc2VyX2JpbmRfY29uZmlnKGMsIGkpOwogCX0KLQotCWRldiA9IGdzX2RldmljZTsKLQotCWlmIChkZXYgPT0gTlVMTCkgewotCQlwcl9lcnIoImdzX29wZW46ICglZCwlcCwlcCkgTlVMTCBkZXZpY2UgcG9pbnRlclxuIiwKLQkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQltdHggPSAmZ3Nfb3Blbl9jbG9zZV9sb2NrW3BvcnRfbnVtXTsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKG10eCkpIHsKLQkJcHJfZXJyKCJnc19vcGVuOiAoJWQsJXAsJXApIGludGVycnVwdGVkIHdhaXRpbmcgZm9yIG11dGV4XG4iLAotCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7Ci0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKLQotCWlmIChkZXYtPmRldl9jb25maWcgPT0gR1NfTk9fQ09ORklHX0lEKSB7Ci0JCXByX2VycigiZ3Nfb3BlbjogKCVkLCVwLCVwKSBkZXZpY2UgaXMgbm90IGNvbm5lY3RlZFxuIiwKLQkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGV4aXRfdW5sb2NrX2RldjsKLQl9Ci0KLQlwb3J0ID0gZGV2LT5kZXZfcG9ydFtwb3J0X251bV07Ci0KLQlpZiAocG9ydCA9PSBOVUxMKSB7Ci0JCXByX2VycigiZ3Nfb3BlbjogKCVkLCVwLCVwKSBOVUxMIHBvcnQgcG9pbnRlclxuIiwKLQkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGV4aXRfdW5sb2NrX2RldjsKLQl9Ci0KLQlzcGluX2xvY2soJnBvcnQtPnBvcnRfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmRldi0+ZGV2X2xvY2spOwotCi0JaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKLQkJcHJfZXJyKCJnc19vcGVuOiAoJWQsJXAsJXApIHBvcnQgZGlzY29ubmVjdGVkICgxKVxuIiwKLQkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGV4aXRfdW5sb2NrX3BvcnQ7Ci0JfQotCi0JaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA+IDApIHsKLQkJKytwb3J0LT5wb3J0X29wZW5fY291bnQ7Ci0JCWdzX2RlYnVnKCJnc19vcGVuOiAoJWQsJXAsJXApIGFscmVhZHkgb3BlblxuIiwKLQkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOwotCQlyZXQgPSAwOwotCQlnb3RvIGV4aXRfdW5sb2NrX3BvcnQ7Ci0JfQotCi0JdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0KLQkvKiBtYXJrIHBvcnQgYXMgaW4gdXNlLCB3ZSBjYW4gZHJvcCBwb3J0IGxvY2sgYW5kIHNsZWVwIGlmIG5lY2Vzc2FyeSAqLwotCXBvcnQtPnBvcnRfaW5fdXNlID0gMTsKLQotCS8qIGFsbG9jYXRlIHdyaXRlIGJ1ZmZlciBvbiBmaXJzdCBvcGVuICovCi0JaWYgKHBvcnQtPnBvcnRfd3JpdGVfYnVmID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Ci0JCWJ1ZiA9IGdzX2J1Zl9hbGxvYyh3cml0ZV9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKLQotCQkvKiBtaWdodCBoYXZlIGJlZW4gZGlzY29ubmVjdGVkIHdoaWxlIGFzbGVlcCwgY2hlY2sgKi8KLQkJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKLQkJCXByX2VycigiZ3Nfb3BlbjogKCVkLCVwLCVwKSBwb3J0IGRpc2Nvbm5lY3RlZCAoMilcbiIsCi0JCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7Ci0JCQlwb3J0LT5wb3J0X2luX3VzZSA9IDA7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBleGl0X3VubG9ja19wb3J0OwotCQl9Ci0KLQkJaWYgKChwb3J0LT5wb3J0X3dyaXRlX2J1Zj1idWYpID09IE5VTEwpIHsKLQkJCXByX2VycigiZ3Nfb3BlbjogKCVkLCVwLCVwKSBjYW5ub3QgYWxsb2NhdGUgIgotCQkJCSJwb3J0IHdyaXRlIGJ1ZmZlclxuIiwKLQkJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKLQkJCXBvcnQtPnBvcnRfaW5fdXNlID0gMDsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGV4aXRfdW5sb2NrX3BvcnQ7Ci0JCX0KLQotCX0KLQotCS8qIHdhaXQgZm9yIGNhcnJpZXIgZGV0ZWN0IChub3QgaW1wbGVtZW50ZWQpICovCi0KLQkvKiBtaWdodCBoYXZlIGJlZW4gZGlzY29ubmVjdGVkIHdoaWxlIGFzbGVlcCwgY2hlY2sgKi8KLQlpZiAocG9ydC0+cG9ydF9kZXYgPT0gTlVMTCkgewotCQlwcl9lcnIoImdzX29wZW46ICglZCwlcCwlcCkgcG9ydCBkaXNjb25uZWN0ZWQgKDMpXG4iLAotCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7Ci0JCXBvcnQtPnBvcnRfaW5fdXNlID0gMDsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBleGl0X3VubG9ja19wb3J0OwotCX0KLQotCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0OwotCXBvcnQtPnBvcnRfdHR5ID0gdHR5OwotCXBvcnQtPnBvcnRfb3Blbl9jb3VudCA9IDE7Ci0JcG9ydC0+cG9ydF9pbl91c2UgPSAwOwotCi0JZ3NfZGVidWcoImdzX29wZW46ICglZCwlcCwlcCkgY29tcGxldGVkXG4iLCBwb3J0X251bSwgdHR5LCBmaWxlKTsKLQotCXJldCA9IDA7Ci0KLWV4aXRfdW5sb2NrX3BvcnQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKG10eCk7Ci0JcmV0dXJuIHJldDsKLQotZXhpdF91bmxvY2tfZGV2OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2sobXR4KTsKLQlyZXR1cm4gcmV0OwotCisJcmV0dXJuIHN0YXR1czsKIH0KIAotLyoKLSAqIGdzX2Nsb3NlCi0gKi8KLQotc3RhdGljIGludCBnc193cml0ZV9maW5pc2hlZF9ldmVudF9zYWZlbHkoc3RydWN0IGdzX3BvcnQgKnApCi17Ci0JaW50IGNvbmQ7Ci0KLQlzcGluX2xvY2tfaXJxKCYocCktPnBvcnRfbG9jayk7Ci0JY29uZCA9ICEocCktPnBvcnRfZGV2IHx8ICFnc19idWZfZGF0YV9hdmFpbCgocCktPnBvcnRfd3JpdGVfYnVmKTsKLQlzcGluX3VubG9ja19pcnEoJihwKS0+cG9ydF9sb2NrKTsKLQlyZXR1cm4gY29uZDsKLX0KLQotc3RhdGljIHZvaWQgZ3NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBtdXRleCAqbXR4OwotCi0JaWYgKHBvcnQgPT0gTlVMTCkgewotCQlwcl9lcnIoImdzX2Nsb3NlOiBOVUxMIHBvcnQgcG9pbnRlclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlnc19kZWJ1ZygiZ3NfY2xvc2U6ICglZCwlcCwlcClcbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHksIGZpbGUpOwotCi0JbXR4ID0gJmdzX29wZW5fY2xvc2VfbG9ja1twb3J0LT5wb3J0X251bV07Ci0JbXV0ZXhfbG9jayhtdHgpOwotCi0Jc3Bpbl9sb2NrX2lycSgmcG9ydC0+cG9ydF9sb2NrKTsKLQotCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPT0gMCkgewotCQlwcl9lcnIoImdzX2Nsb3NlOiAoJWQsJXAsJXApIHBvcnQgaXMgYWxyZWFkeSBjbG9zZWRcbiIsCi0JCQlwb3J0LT5wb3J0X251bSwgdHR5LCBmaWxlKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPiAxKSB7Ci0JCS0tcG9ydC0+cG9ydF9vcGVuX2NvdW50OwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogZnJlZSBkaXNjb25uZWN0ZWQgcG9ydCBvbiBmaW5hbCBjbG9zZSAqLwotCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7Ci0JCWtmcmVlKHBvcnQpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogbWFyayBwb3J0IGFzIGNsb3NlZCBidXQgaW4gdXNlLCB3ZSBjYW4gZHJvcCBwb3J0IGxvY2sgKi8KLQkvKiBhbmQgc2xlZXAgaWYgbmVjZXNzYXJ5ICovCi0JcG9ydC0+cG9ydF9pbl91c2UgPSAxOwotCXBvcnQtPnBvcnRfb3Blbl9jb3VudCA9IDA7Ci0KLQkvKiB3YWl0IGZvciB3cml0ZSBidWZmZXIgdG8gZHJhaW4sIG9yICovCi0JLyogYXQgbW9zdCBHU19DTE9TRV9USU1FT1VUIHNlY29uZHMgKi8KLQlpZiAoZ3NfYnVmX2RhdGFfYXZhaWwocG9ydC0+cG9ydF93cml0ZV9idWYpID4gMCkgewotCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPnBvcnRfbG9jayk7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBvcnQtPnBvcnRfd3JpdGVfd2FpdCwKLQkJCQkJZ3Nfd3JpdGVfZmluaXNoZWRfZXZlbnRfc2FmZWx5KHBvcnQpLAotCQkJCQlHU19DTE9TRV9USU1FT1VUICogSFopOwotCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5wb3J0X2xvY2spOwotCX0KLQotCS8qIGZyZWUgZGlzY29ubmVjdGVkIHBvcnQgb24gZmluYWwgY2xvc2UgKi8KLQkvKiAobWlnaHQgaGF2ZSBoYXBwZW5lZCBkdXJpbmcgdGhlIGFib3ZlIHNsZWVwKSAqLwotCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7Ci0JCWtmcmVlKHBvcnQpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZ3NfYnVmX2NsZWFyKHBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKLQotCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCXBvcnQtPnBvcnRfdHR5ID0gTlVMTDsKLQlwb3J0LT5wb3J0X2luX3VzZSA9IDA7Ci0KLQlnc19kZWJ1ZygiZ3NfY2xvc2U6ICglZCwlcCwlcCkgY29tcGxldGVkXG4iLAotCQlwb3J0LT5wb3J0X251bSwgdHR5LCBmaWxlKTsKLQotZXhpdDoKLQlzcGluX3VubG9ja19pcnEoJnBvcnQtPnBvcnRfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKG10eCk7Ci19Ci0KLS8qCi0gKiBnc193cml0ZQotICovCi1zdGF0aWMgaW50IGdzX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCWludCByZXQ7Ci0KLQlpZiAocG9ydCA9PSBOVUxMKSB7Ci0JCXByX2VycigiZ3Nfd3JpdGU6IE5VTEwgcG9ydCBwb2ludGVyXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JZ3NfZGVidWcoImdzX3dyaXRlOiAoJWQsJXApIHdyaXRpbmcgJWQgYnl0ZXNcbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHksCi0JCWNvdW50KTsKLQotCWlmIChjb3VudCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKLQotCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7Ci0JCXByX2VycigiZ3Nfd3JpdGU6ICglZCwlcCkgcG9ydCBpcyBub3QgY29ubmVjdGVkXG4iLAotCQkJcG9ydC0+cG9ydF9udW0sIHR0eSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAocG9ydC0+cG9ydF9vcGVuX2NvdW50ID09IDApIHsKLQkJcHJfZXJyKCJnc193cml0ZTogKCVkLCVwKSBwb3J0IGlzIGNsb3NlZFxuIiwKLQkJCXBvcnQtPnBvcnRfbnVtLCB0dHkpOwotCQlyZXQgPSAtRUJBREY7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQljb3VudCA9IGdzX2J1Zl9wdXQocG9ydC0+cG9ydF93cml0ZV9idWYsIGJ1ZiwgY291bnQpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Ci0KLQlnc19zZW5kKGdzX2RldmljZSk7Ci0KLQlnc19kZWJ1ZygiZ3Nfd3JpdGU6ICglZCwlcCkgd3JvdGUgJWQgYnl0ZXNcbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHksCi0JCWNvdW50KTsKLQotCXJldHVybiBjb3VudDsKLQotZXhpdDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogZ3NfcHV0X2NoYXIKLSAqLwotc3RhdGljIGludCBnc19wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCWludCByZXQgPSAwOwotCi0JaWYgKHBvcnQgPT0gTlVMTCkgewotCQlwcl9lcnIoImdzX3B1dF9jaGFyOiBOVUxMIHBvcnQgcG9pbnRlclxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWdzX2RlYnVnKCJnc19wdXRfY2hhcjogKCVkLCVwKSBjaGFyPTB4JXgsIGNhbGxlZCBmcm9tICVwXG4iLAotCQlwb3J0LT5wb3J0X251bSwgdHR5LCBjaCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKLQotCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7Ci0JCXByX2VycigiZ3NfcHV0X2NoYXI6ICglZCwlcCkgcG9ydCBpcyBub3QgY29ubmVjdGVkXG4iLAotCQkJcG9ydC0+cG9ydF9udW0sIHR0eSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAocG9ydC0+cG9ydF9vcGVuX2NvdW50ID09IDApIHsKLQkJcHJfZXJyKCJnc19wdXRfY2hhcjogKCVkLCVwKSBwb3J0IGlzIGNsb3NlZFxuIiwKLQkJCXBvcnQtPnBvcnRfbnVtLCB0dHkpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcmV0ID0gZ3NfYnVmX3B1dChwb3J0LT5wb3J0X3dyaXRlX2J1ZiwgJmNoLCAxKTsKLQotZXhpdDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogZ3NfZmx1c2hfY2hhcnMKLSAqLwotc3RhdGljIHZvaWQgZ3NfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQotCWlmIChwb3J0ID09IE5VTEwpIHsKLQkJcHJfZXJyKCJnc19mbHVzaF9jaGFyczogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZ3NfZGVidWcoImdzX2ZsdXNoX2NoYXJzOiAoJWQsJXApXG4iLCBwb3J0LT5wb3J0X251bSwgdHR5KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKLQotCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7Ci0JCXByX2VycigiZ3NfZmx1c2hfY2hhcnM6ICglZCwlcCkgcG9ydCBpcyBub3QgY29ubmVjdGVkXG4iLAotCQkJcG9ydC0+cG9ydF9udW0sIHR0eSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAocG9ydC0+cG9ydF9vcGVuX2NvdW50ID09IDApIHsKLQkJcHJfZXJyKCJnc19mbHVzaF9jaGFyczogKCVkLCVwKSBwb3J0IGlzIGNsb3NlZFxuIiwKLQkJCXBvcnQtPnBvcnRfbnVtLCB0dHkpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Ci0KLQlnc19zZW5kKGdzX2RldmljZSk7Ci0KLQlyZXR1cm47Ci0KLWV4aXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBnc193cml0ZV9yb29tCi0gKi8KLXN0YXRpYyBpbnQgZ3Nfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCi0JaW50IHJvb20gPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCi0KLQlpZiAocG9ydCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKLQotCWlmIChwb3J0LT5wb3J0X2RldiAhPSBOVUxMICYmIHBvcnQtPnBvcnRfb3Blbl9jb3VudCA+IDAKLQkmJiBwb3J0LT5wb3J0X3dyaXRlX2J1ZiAhPSBOVUxMKQotCQlyb29tID0gZ3NfYnVmX3NwYWNlX2F2YWlsKHBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOwotCi0JZ3NfZGVidWcoImdzX3dyaXRlX3Jvb206ICglZCwlcCkgcm9vbT0lZFxuIiwKLQkJcG9ydC0+cG9ydF9udW0sIHR0eSwgcm9vbSk7Ci0KLQlyZXR1cm4gcm9vbTsKLX0KLQotLyoKLSAqIGdzX2NoYXJzX2luX2J1ZmZlcgotICovCi1zdGF0aWMgaW50IGdzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWludCBjaGFycyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAocG9ydCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKLQotCWlmIChwb3J0LT5wb3J0X2RldiAhPSBOVUxMICYmIHBvcnQtPnBvcnRfb3Blbl9jb3VudCA+IDAKLQkmJiBwb3J0LT5wb3J0X3dyaXRlX2J1ZiAhPSBOVUxMKQotCQljaGFycyA9IGdzX2J1Zl9kYXRhX2F2YWlsKHBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOwotCi0JZ3NfZGVidWcoImdzX2NoYXJzX2luX2J1ZmZlcjogKCVkLCVwKSBjaGFycz0lZFxuIiwKLQkJcG9ydC0+cG9ydF9udW0sIHR0eSwgY2hhcnMpOwotCi0JcmV0dXJuIGNoYXJzOwotfQotCi0vKgotICogZ3NfdGhyb3R0bGUKLSAqLwotc3RhdGljIHZvaWQgZ3NfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLX0KLQotLyoKLSAqIGdzX3VudGhyb3R0bGUKLSAqLwotc3RhdGljIHZvaWQgZ3NfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotfQotCi0vKgotICogZ3NfYnJlYWsKLSAqLwotc3RhdGljIHZvaWQgZ3NfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQotewotfQotCi0vKgotICogZ3NfaW9jdGwKLSAqLwotc3RhdGljIGludCBnc19pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCi0JaWYgKHBvcnQgPT0gTlVMTCkgewotCQlwcl9lcnIoImdzX2lvY3RsOiBOVUxMIHBvcnQgcG9pbnRlclxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWdzX2RlYnVnKCJnc19pb2N0bDogKCVkLCVwLCVwKSBjbWQ9MHglNC40eCwgYXJnPSVsdVxuIiwKLQkJcG9ydC0+cG9ydF9udW0sIHR0eSwgZmlsZSwgY21kLCBhcmcpOwotCi0JLyogaGFuZGxlIGlvY3RscyAqLwotCi0JLyogY291bGQgbm90IGhhbmRsZSBpb2N0bCAqLwotCXJldHVybiAtRU5PSU9DVExDTUQ7Ci19Ci0KLS8qCi0gKiBnc19zZXRfdGVybWlvcwotICovCi1zdGF0aWMgdm9pZCBnc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKLXsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0gewotCS5vcGVuID0JCQlnc19vcGVuLAotCS5jbG9zZSA9CQlnc19jbG9zZSwKLQkud3JpdGUgPQkJZ3Nfd3JpdGUsCi0JLnB1dF9jaGFyID0JCWdzX3B1dF9jaGFyLAotCS5mbHVzaF9jaGFycyA9CQlnc19mbHVzaF9jaGFycywKLQkud3JpdGVfcm9vbSA9CQlnc193cml0ZV9yb29tLAotCS5pb2N0bCA9CQlnc19pb2N0bCwKLQkuc2V0X3Rlcm1pb3MgPQkJZ3Nfc2V0X3Rlcm1pb3MsCi0JLnRocm90dGxlID0JCWdzX3Rocm90dGxlLAotCS51bnRocm90dGxlID0JCWdzX3VudGhyb3R0bGUsCi0JLmJyZWFrX2N0bCA9CQlnc19icmVhaywKLQkuY2hhcnNfaW5fYnVmZmVyID0JZ3NfY2hhcnNfaW5fYnVmZmVyLAorc3RhdGljIHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiBzZXJpYWxfY29uZmlnX2RyaXZlciA9IHsKKwkvKiAubGFiZWwgPSBmKHVzZV9hY20pICovCisJLmJpbmQJCT0gc2VyaWFsX2JpbmRfY29uZmlnLAorCS8qIC5iQ29uZmlndXJhdGlvblZhbHVlID0gZih1c2VfYWNtKSAqLworCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KKwkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAorCS5iTWF4UG93ZXIJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotKiBnc19zZW5kCi0qCi0qIFRoaXMgZnVuY3Rpb24gZmluZHMgYXZhaWxhYmxlIHdyaXRlIHJlcXVlc3RzLCBjYWxscwotKiBnc19zZW5kX3BhY2tldCB0byBmaWxsIHRoZXNlIHBhY2tldHMgd2l0aCBkYXRhLCBhbmQKLSogY29udGludWVzIHVudGlsIGVpdGhlciB0aGVyZSBhcmUgbm8gbW9yZSB3cml0ZSByZXF1ZXN0cwotKiBhdmFpbGFibGUgb3Igbm8gbW9yZSBkYXRhIHRvIHNlbmQuICBUaGlzIGZ1bmN0aW9uIGlzCi0qIHJ1biB3aGVuZXZlciBkYXRhIGFycml2ZXMgb3Igd3JpdGUgcmVxdWVzdHMgYXJlIGF2YWlsYWJsZS4KLSovCi1zdGF0aWMgaW50IGdzX3NlbmQoc3RydWN0IGdzX2RldiAqZGV2KQorc3RhdGljIGludCBfX2luaXQgZ3NfYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7Ci0JaW50IHJldCxsZW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdXNiX2VwICplcDsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcTsKKwlpbnQJCQlnY251bTsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gY2Rldi0+Z2FkZ2V0OworCWludAkJCXN0YXR1czsKIAotCWlmIChkZXYgPT0gTlVMTCkgewotCQlwcl9lcnIoImdzX3NlbmQ6IE5VTEwgZGV2aWNlIHBvaW50ZXJcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJc3RhdHVzID0gZ3NlcmlhbF9zZXR1cChjZGV2LT5nYWRnZXQsIG5fcG9ydHMpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKLQotCWVwID0gZGV2LT5kZXZfaW5fZXA7Ci0KLQl3aGlsZSghbGlzdF9lbXB0eSgmZGV2LT5kZXZfcmVxX2xpc3QpKSB7Ci0KLQkJcmVxID0gbGlzdF9lbnRyeShkZXYtPmRldl9yZXFfbGlzdC5uZXh0LAotCQkJCXN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7Ci0KLQkJbGVuID0gZ3Nfc2VuZF9wYWNrZXQoZGV2LCByZXEtPmJ1ZiwgZXAtPm1heHBhY2tldCk7Ci0KLQkJaWYgKGxlbiA+IDApIHsKLQkJCWdzX2RlYnVnX2xldmVsKDMsICJnc19zZW5kOiBsZW49JWQsIDB4JTIuMnggIgotCQkJCQkiMHglMi4yeCAweCUyLjJ4IC4uLlxuIiwgbGVuLAotCQkJCQkqKCh1bnNpZ25lZCBjaGFyICopcmVxLT5idWYpLAotCQkJCQkqKCh1bnNpZ25lZCBjaGFyICopcmVxLT5idWYrMSksCi0JCQkJCSooKHVuc2lnbmVkIGNoYXIgKilyZXEtPmJ1ZisyKSk7Ci0JCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKLQkJCXJlcS0+bGVuZ3RoID0gbGVuOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOwotCQkJaWYgKChyZXQ9dXNiX2VwX3F1ZXVlKGVwLCByZXEsIEdGUF9BVE9NSUMpKSkgewotCQkJCXByX2VycigKLQkJCQkiZ3Nfc2VuZDogY2Fubm90IHF1ZXVlIHJlYWQgcmVxdWVzdCwgcmV0PSVkXG4iLAotCQkJCQlyZXQpOwotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmRldl9sb2NrLCBmbGFncyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOwotCQl9IGVsc2UgewotCQkJYnJlYWs7Ci0JCX0KLQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogZ3Nfc2VuZF9wYWNrZXQKLSAqCi0gKiBJZiB0aGVyZSBpcyBkYXRhIHRvIHNlbmQsIGEgcGFja2V0IGlzIGJ1aWx0IGluIHRoZSBnaXZlbgotICogYnVmZmVyIGFuZCB0aGUgc2l6ZSBpcyByZXR1cm5lZC4gIElmIHRoZXJlIGlzIG5vIGRhdGEgdG8KLSAqIHNlbmQsIDAgaXMgcmV0dXJuZWQuICBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgYSBuZWdhdGl2ZQotICogZXJyb3IgbnVtYmVyIGlzIHJldHVybmVkLgotICoKLSAqIENhbGxlZCBkdXJpbmcgVVNCIGNvbXBsZXRpb24gcm91dGluZSwgb24gaW50ZXJydXB0IHRpbWUuCi0gKgotICogV2UgYXNzdW1lIHRoYXQgZGlzY29ubmVjdCB3aWxsIG5vdCBoYXBwZW4gdW50aWwgYWxsIGNvbXBsZXRpb24KLSAqIHJvdXRpbmVzIGhhdmUgY29tcGxldGVkLCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlIGRldl9wb3J0Ci0gKiBhcnJheSBkb2VzIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGlzIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW50IGdzX3NlbmRfcGFja2V0KHN0cnVjdCBnc19kZXYgKmRldiwgY2hhciAqcGFja2V0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXN0cnVjdCBnc19wb3J0ICpwb3J0OwotCi0JLyogVEVNUE9SQVJZIC0tIG9ubHkgcG9ydCAwIGlzIHN1cHBvcnRlZCByaWdodCBub3cgKi8KLQlwb3J0ID0gZGV2LT5kZXZfcG9ydFswXTsKLQotCWlmIChwb3J0ID09IE5VTEwpIHsKLQkJcHJfZXJyKCJnc19zZW5kX3BhY2tldDogcG9ydD0lZCwgTlVMTCBwb3J0IHBvaW50ZXJcbiIsIDApOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzcGluX2xvY2soJnBvcnQtPnBvcnRfbG9jayk7Ci0KLQlsZW4gPSBnc19idWZfZGF0YV9hdmFpbChwb3J0LT5wb3J0X3dyaXRlX2J1Zik7Ci0JaWYgKGxlbiA8IHNpemUpCi0JCXNpemUgPSBsZW47Ci0KLQlpZiAoc2l6ZSA9PSAwKQotCQlnb3RvIGV4aXQ7Ci0KLQlzaXplID0gZ3NfYnVmX2dldChwb3J0LT5wb3J0X3dyaXRlX2J1ZiwgcGFja2V0LCBzaXplKTsKLQotCWlmIChwb3J0LT5wb3J0X3R0eSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0X3R0eS0+d3JpdGVfd2FpdCk7Ci0KLWV4aXQ6Ci0Jc3Bpbl91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7Ci0JcmV0dXJuIHNpemU7Ci19Ci0KLS8qCi0gKiBnc19yZWN2X3BhY2tldAotICoKLSAqIENhbGxlZCBmb3IgZWFjaCBVU0IgcGFja2V0IHJlY2VpdmVkLiAgUmVhZHMgdGhlIHBhY2tldAotICogaGVhZGVyIGFuZCBzdHVmZnMgdGhlIGRhdGEgaW4gdGhlIGFwcHJvcHJpYXRlIHR0eSBidWZmZXIuCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCi0gKgotICogQ2FsbGVkIGR1cmluZyBVU0IgY29tcGxldGlvbiByb3V0aW5lLCBvbiBpbnRlcnJ1cHQgdGltZS4KLSAqCi0gKiBXZSBhc3N1bWUgdGhhdCBkaXNjb25uZWN0IHdpbGwgbm90IGhhcHBlbiB1bnRpbCBhbGwgY29tcGxldGlvbgotICogcm91dGluZXMgaGF2ZSBjb21wbGV0ZWQsIHNvIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgZGV2X3BvcnQKLSAqIGFycmF5IGRvZXMgbm90IGNoYW5nZSBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoaXMgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyBpbnQgZ3NfcmVjdl9wYWNrZXQoc3RydWN0IGdzX2RldiAqZGV2LCBjaGFyICpwYWNrZXQsIHVuc2lnbmVkIGludCBzaXplKQotewotCXVuc2lnbmVkIGludCBsZW47Ci0Jc3RydWN0IGdzX3BvcnQgKnBvcnQ7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCi0JLyogVEVNUE9SQVJZIC0tIG9ubHkgcG9ydCAwIGlzIHN1cHBvcnRlZCByaWdodCBub3cgKi8KLQlwb3J0ID0gZGV2LT5kZXZfcG9ydFswXTsKLQotCWlmIChwb3J0ID09IE5VTEwpIHsKLQkJcHJfZXJyKCJnc19yZWN2X3BhY2tldDogcG9ydD0lZCwgTlVMTCBwb3J0IHBvaW50ZXJcbiIsCi0JCQlwb3J0LT5wb3J0X251bSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKLQotCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPT0gMCkgewotCQlwcl9lcnIoImdzX3JlY3ZfcGFja2V0OiBwb3J0PSVkLCBwb3J0IGlzIGNsb3NlZFxuIiwKLQkJCXBvcnQtPnBvcnRfbnVtKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBleGl0OwotCX0KLQotCi0JdHR5ID0gcG9ydC0+cG9ydF90dHk7Ci0KLQlpZiAodHR5ID09IE5VTEwpIHsKLQkJcHJfZXJyKCJnc19yZWN2X3BhY2tldDogcG9ydD0lZCwgTlVMTCB0dHkgcG9pbnRlclxuIiwKLQkJCXBvcnQtPnBvcnRfbnVtKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChwb3J0LT5wb3J0X3R0eS0+bWFnaWMgIT0gVFRZX01BR0lDKSB7Ci0JCXByX2VycigiZ3NfcmVjdl9wYWNrZXQ6IHBvcnQ9JWQsIGJhZCB0dHkgbWFnaWNcbiIsCi0JCQlwb3J0LT5wb3J0X251bSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlsZW4gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHNpemUpOwotCWlmIChsZW4gPiAwKSB7Ci0JCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBwYWNrZXQsIGxlbik7Ci0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPnBvcnRfdHR5KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0X3R0eS0+cmVhZF93YWl0KTsKLQl9Ci0JcmV0ID0gMDsKLWV4aXQ6Ci0Jc3Bpbl91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSogZ3NfcmVhZF9jb21wbGV0ZQotKi8KLXN0YXRpYyB2b2lkIGdzX3JlYWRfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGdzX2RldiAqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOwotCi0JaWYgKGRldiA9PSBOVUxMKSB7Ci0JCXByX2VycigiZ3NfcmVhZF9jb21wbGV0ZTogTlVMTCBkZXZpY2UgcG9pbnRlclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2gocmVxLT5zdGF0dXMpIHsKLQljYXNlIDA6Ci0JCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCi0JCWdzX3JlY3ZfcGFja2V0KGRldiwgcmVxLT5idWYsIHJlcS0+YWN0dWFsKTsKLXJlcXVldWU6Ci0JCXJlcS0+bGVuZ3RoID0gZXAtPm1heHBhY2tldDsKLQkJaWYgKChyZXQ9dXNiX2VwX3F1ZXVlKGVwLCByZXEsIEdGUF9BVE9NSUMpKSkgewotCQkJcHJfZXJyKAotCQkJImdzX3JlYWRfY29tcGxldGU6IGNhbm5vdCBxdWV1ZSByZWFkIHJlcXVlc3QsIHJldD0lZFxuIiwKLQkJCQlyZXQpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSAtRVNIVVRET1dOOgotCQkvKiBkaXNjb25uZWN0ICovCi0JCWdzX2RlYnVnKCJnc19yZWFkX2NvbXBsZXRlOiBzaHV0ZG93blxuIik7Ci0JCWdzX2ZyZWVfcmVxKGVwLCByZXEpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCS8qIHVuZXhwZWN0ZWQgKi8KLQkJcHJfZXJyKAotCQkiZ3NfcmVhZF9jb21wbGV0ZTogdW5leHBlY3RlZCBzdGF0dXMgZXJyb3IsIHN0YXR1cz0lZFxuIiwKLQkJCXJlcS0+c3RhdHVzKTsKLQkJZ290byByZXF1ZXVlOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qCi0qIGdzX3dyaXRlX2NvbXBsZXRlCi0qLwotc3RhdGljIHZvaWQgZ3Nfd3JpdGVfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCBnc19kZXYgKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKLQotCWlmIChkZXYgPT0gTlVMTCkgewotCQlwcl9lcnIoImdzX3dyaXRlX2NvbXBsZXRlOiBOVUxMIGRldmljZSBwb2ludGVyXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXN3aXRjaChyZXEtPnN0YXR1cykgewotCWNhc2UgMDoKLQkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KLXJlcXVldWU6Ci0JCXNwaW5fbG9jaygmZGV2LT5kZXZfbG9jayk7Ci0JCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZkZXYtPmRldl9yZXFfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZkZXYtPmRldl9sb2NrKTsKLQotCQlnc19zZW5kKGRldik7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIC1FU0hVVERPV046Ci0JCS8qIGRpc2Nvbm5lY3QgKi8KLQkJZ3NfZGVidWcoImdzX3dyaXRlX2NvbXBsZXRlOiBzaHV0ZG93blxuIik7Ci0JCWdzX2ZyZWVfcmVxKGVwLCByZXEpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByX2VycigKLQkJImdzX3dyaXRlX2NvbXBsZXRlOiB1bmV4cGVjdGVkIHN0YXR1cyBlcnJvciwgc3RhdHVzPSVkXG4iLAotCQkJcmVxLT5zdGF0dXMpOwotCQlnb3RvIHJlcXVldWU7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogR2FkZ2V0IERyaXZlciAqLwotCi0vKgotICogZ3NfdW5iaW5kCi0gKgotICogQ2FsbGVkIG9uIG1vZHVsZSB1bmxvYWQuICBGcmVlcyB0aGUgY29udHJvbCByZXF1ZXN0IGFuZCBkZXZpY2UKLSAqIHN0cnVjdHVyZS4KLSAqLwotc3RhdGljIHZvaWQgLyogX19pbml0X29yX2V4aXQgKi8gZ3NfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCi17Ci0Jc3RydWN0IGdzX2RldiAqZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7Ci0KLQlnc19kZXZpY2UgPSBOVUxMOwotCi0JLyogcmVhZC93cml0ZSByZXF1ZXN0cyBhbHJlYWR5IGZyZWVkLCBvbmx5IGNvbnRyb2wgcmVxdWVzdCByZW1haW5zICovCi0JaWYgKGRldiAhPSBOVUxMKSB7Ci0JCWlmIChkZXYtPmRldl9jdHJsX3JlcSAhPSBOVUxMKSB7Ci0JCQlnc19mcmVlX3JlcShnYWRnZXQtPmVwMCwgZGV2LT5kZXZfY3RybF9yZXEpOwotCQkJZGV2LT5kZXZfY3RybF9yZXEgPSBOVUxMOwotCQl9Ci0JCWdzX3Jlc2V0X2NvbmZpZyhkZXYpOwotCQlnc19mcmVlX3BvcnRzKGRldik7Ci0JCWtmcmVlKGRldik7Ci0JCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIE5VTEwpOwotCX0KLQotCXByX2luZm8oImdzX3VuYmluZDogJXMgJXMgdW5ib3VuZFxuIiwgR1NfTE9OR19OQU1FLAotCQlHU19WRVJTSU9OX1NUUik7Ci19Ci0KLS8qCi0gKiBnc19iaW5kCi0gKgotICogQ2FsbGVkIG9uIG1vZHVsZSBsb2FkLiAgQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgZGV2aWNlCi0gKiBzdHJ1Y3R1cmUgYW5kIGEgY29udHJvbCByZXF1ZXN0LgotICovCi1zdGF0aWMgaW50IF9faW5pdCBnc19iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgdXNiX2VwICplcDsKLQlzdHJ1Y3QgZ3NfZGV2ICpkZXY7Ci0JaW50IGdjbnVtOwotCi0JLyogU29tZSBjb250cm9sbGVycyBjYW4ndCBzdXBwb3J0IENEQyBBQ006Ci0JICogLSBzaCBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJmYWNlcyBvciBjb25maWdzOwotCSAqIC0gc2ExMTAwIGRvZXNuJ3QgaGF2ZSBhIHRoaXJkIGludGVycnVwdCBlbmRwb2ludAorCS8qIEFsbG9jYXRlIHN0cmluZyBkZXNjcmlwdG9yIG51bWJlcnMgLi4uIG5vdGUgdGhhdCBzdHJpbmcKKwkgKiBjb250ZW50cyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY29tcG9zaXRlX2RldiBnbHVlLgogCSAqLwotCWlmIChnYWRnZXRfaXNfc2goZ2FkZ2V0KSB8fCBnYWRnZXRfaXNfc2ExMTAwKGdhZGdldCkpCi0JCXVzZV9hY20gPSAwOwogCi0JZ2NudW0gPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGdhZGdldCk7Ci0JaWYgKGdjbnVtID49IDApCi0JCWdzX2RldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQkJY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU0gfCBnY251bSk7Ci0JZWxzZSB7Ci0JCXByX3dhcm5pbmcoImdzX2JpbmQ6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKLQkJCWdhZGdldC0+bmFtZSk7Ci0JCS8qIHVucmVjb2duaXplZCwgYnV0IHNhZmUgdW5sZXNzIGJ1bGsgaXMgUkVBTExZIHF1aXJreSAqLwotCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwOTkpOwotCX0KLQotCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnc19kZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JdXNiX2VwX2F1dG9jb25maWdfcmVzZXQoZ2FkZ2V0KTsKLQotCWVwID0gdXNiX2VwX2F1dG9jb25maWcoZ2FkZ2V0LCAmZ3NfZnVsbHNwZWVkX2luX2Rlc2MpOwotCWlmICghZXApCi0JCWdvdG8gYXV0b2NvbmZfZmFpbDsKLQlkZXYtPmRldl9pbl9lcCA9IGVwOwotCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsJLyogY2xhaW0gdGhlIGVuZHBvaW50ICovCi0KLQllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmdzX2Z1bGxzcGVlZF9vdXRfZGVzYyk7Ci0JaWYgKCFlcCkKLQkJZ290byBhdXRvY29uZl9mYWlsOwotCWRldi0+ZGV2X291dF9lcCA9IGVwOwotCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsJLyogY2xhaW0gdGhlIGVuZHBvaW50ICovCi0KLQlpZiAodXNlX2FjbSkgewotCQllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmdzX2Z1bGxzcGVlZF9ub3RpZnlfZGVzYyk7Ci0JCWlmICghZXApIHsKLQkJCXByX2VycigiZ3NfYmluZDogY2Fubm90IHJ1biBBQ00gb24gJXNcbiIsIGdhZGdldC0+bmFtZSk7Ci0JCQlnb3RvIGF1dG9jb25mX2ZhaWw7Ci0JCX0KLQkJZ3NfZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigKLQkJCQkJCUdTX0NEQ19QUk9EVUNUX0lEKSwKLQkJZGV2LT5kZXZfbm90aWZ5X2VwID0gZXA7Ci0JCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsJLyogY2xhaW0gdGhlIGVuZHBvaW50ICovCi0JfQotCi0JZ3NfZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gdXNlX2FjbQotCQk/IFVTQl9DTEFTU19DT01NIDogVVNCX0NMQVNTX1ZFTkRPUl9TUEVDOwotCWdzX2RldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7Ci0KLQlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChnYWRnZXQpKSB7Ci0JCWdzX3F1YWxpZmllcl9kZXNjLmJEZXZpY2VDbGFzcyA9IHVzZV9hY20KLQkJCT8gVVNCX0NMQVNTX0NPTU0gOiBVU0JfQ0xBU1NfVkVORE9SX1NQRUM7Ci0JCS8qIGFzc3VtZSBlcDAgdXNlcyB0aGUgc2FtZSBwYWNrZXQgc2l6ZSBmb3IgYm90aCBzcGVlZHMgKi8KLQkJZ3NfcXVhbGlmaWVyX2Rlc2MuYk1heFBhY2tldFNpemUwID0KLQkJCWdzX2RldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMDsKLQkJLyogYXNzdW1lIGVuZHBvaW50cyBhcmUgZHVhbC1zcGVlZCAqLwotCQlnc19oaWdoc3BlZWRfbm90aWZ5X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQlnc19mdWxsc3BlZWRfbm90aWZ5X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKLQkJZ3NfaGlnaHNwZWVkX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQlnc19mdWxsc3BlZWRfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotCQlnc19oaWdoc3BlZWRfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQlnc19mdWxsc3BlZWRfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKLQl9Ci0KLQl1c2JfZ2FkZ2V0X3NldF9zZWxmcG93ZXJlZChnYWRnZXQpOwotCi0JaWYgKGdhZGdldF9pc19vdGcoZ2FkZ2V0KSkgewotCQlnc19vdGdfZGVzY3JpcHRvci5ibUF0dHJpYnV0ZXMgfD0gVVNCX09UR19ITlAsCi0JCWdzX2J1bGtfY29uZmlnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKLQkJZ3NfYWNtX2NvbmZpZ19kZXNjLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7Ci0JfQotCi0JZ3NfZGV2aWNlID0gZGV2OwotCi0Jc25wcmludGYobWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSwgIiVzICVzIHdpdGggJXMiLAorCS8qIGRldmljZSBkZXNjcmlwdGlvbjogbWFudWZhY3R1cmVyLCBwcm9kdWN0ICovCisJc25wcmludGYobWFudWZhY3R1cmVyLCBzaXplb2YgbWFudWZhY3R1cmVyLCAiJXMgJXMgd2l0aCAlcyIsCiAJCWluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKIAkJZ2FkZ2V0LT5uYW1lKTsKKwlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWw7CisJc3RyaW5nc19kZXZbU1RSSU5HX01BTlVGQUNUVVJFUl9JRFhdLmlkID0gc3RhdHVzOwogCi0JZGV2LT5kZXZfZ2FkZ2V0ID0gZ2FkZ2V0OwotCXNwaW5fbG9ja19pbml0KCZkZXYtPmRldl9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmZGV2LT5kZXZfcmVxX2xpc3QpOwotCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIGRldik7CisJZGV2aWNlX2Rlc2MuaU1hbnVmYWN0dXJlciA9IHN0YXR1czsKIAotCWlmICgocmV0PWdzX2FsbG9jX3BvcnRzKGRldiwgR0ZQX0tFUk5FTCkpICE9IDApIHsKLQkJcHJfZXJyKCJnc19iaW5kOiBjYW5ub3QgYWxsb2NhdGUgcG9ydHNcbiIpOwotCQlnc191bmJpbmQoZ2FkZ2V0KTsKLQkJcmV0dXJuIHJldDsKKwlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWw7CisJc3RyaW5nc19kZXZbU1RSSU5HX1BST0RVQ1RfSURYXS5pZCA9IHN0YXR1czsKKworCWRldmljZV9kZXNjLmlQcm9kdWN0ID0gc3RhdHVzOworCisJLyogY29uZmlnIGRlc2NyaXB0aW9uICovCisJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCXN0cmluZ3NfZGV2W1NUUklOR19ERVNDUklQVElPTl9JRFhdLmlkID0gc3RhdHVzOworCisJc2VyaWFsX2NvbmZpZ19kcml2ZXIuaUNvbmZpZ3VyYXRpb24gPSBzdGF0dXM7CisKKwkvKiBzZXQgdXAgb3RoZXIgZGVzY3JpcHRvcnMgKi8KKwlnY251bSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZ2FkZ2V0KTsKKwlpZiAoZ2NudW0gPj0gMCkKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU0gfCBnY251bSk7CisJZWxzZSB7CisJCS8qIHRoaXMgaXMgc28gc2ltcGxlIChmb3Igbm93LCBubyBhbHRzZXR0aW5ncykgdGhhdCBpdAorCQkgKiBTSE9VTEQgTk9UIGhhdmUgcHJvYmxlbXMgd2l0aCBidWxrLWNhcGFibGUgaGFyZHdhcmUuCisJCSAqIHNvIHdhcm4gYWJvdXQgdW5yY29nbml6ZWQgY29udHJvbGxlcnMgLS0gZG9uJ3QgcGFuaWMuCisJCSAqCisJCSAqIHRoaW5ncyBsaWtlIGNvbmZpZ3VyYXRpb24gYW5kIGFsdHNldHRpbmcgbnVtYmVyaW5nCisJCSAqIGNhbiBuZWVkIGhhcmR3YXJlLXNwZWNpZmljIGF0dGVudGlvbiB0aG91Z2guCisJCSAqLworCQlwcl93YXJuaW5nKCJnc19iaW5kOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCisJCQlnYWRnZXQtPm5hbWUpOworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTSB8IDB4MDA5OSk7CiAJfQogCi0JLyogcHJlYWxsb2NhdGUgY29udHJvbCByZXNwb25zZSBhbmQgYnVmZmVyICovCi0JZGV2LT5kZXZfY3RybF9yZXEgPSBnc19hbGxvY19yZXEoZ2FkZ2V0LT5lcDAsIEdTX01BWF9ERVNDX0xFTiwKLQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKGRldi0+ZGV2X2N0cmxfcmVxID09IE5VTEwpIHsKLQkJZ3NfdW5iaW5kKGdhZGdldCk7Ci0JCXJldHVybiAtRU5PTUVNOworCWlmIChnYWRnZXRfaXNfb3RnKGNkZXYtPmdhZGdldCkpIHsKKwkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuZGVzY3JpcHRvcnMgPSBvdGdfZGVzYzsKKwkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKIAl9Ci0JZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gZGV2OwogCi0JcHJfaW5mbygiZ3NfYmluZDogJXMgJXMgYm91bmRcbiIsCi0JCUdTX0xPTkdfTkFNRSwgR1NfVkVSU0lPTl9TVFIpOworCS8qIHJlZ2lzdGVyIG91ciBjb25maWd1cmF0aW9uICovCisJc3RhdHVzID0gdXNiX2FkZF9jb25maWcoY2RldiwgJnNlcmlhbF9jb25maWdfZHJpdmVyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCisJSU5GTyhjZGV2LCAiJXNcbiIsIEdTX1ZFUlNJT05fTkFNRSk7CiAKIAlyZXR1cm4gMDsKIAotYXV0b2NvbmZfZmFpbDoKLQlrZnJlZShkZXYpOwotCXByX2VycigiZ3NfYmluZDogY2Fubm90IGF1dG9jb25maWd1cmUgb24gJXNcbiIsIGdhZGdldC0+bmFtZSk7Ci0JcmV0dXJuIC1FTk9ERVY7CitmYWlsOgorCWdzZXJpYWxfY2xlYW51cCgpOworCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgZ3Nfc2V0dXBfc3RhbmRhcmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKLQljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQotewotCWludCByZXQgPSAtRU9QTk9UU1VQUDsKLQlzdHJ1Y3QgZ3NfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9IGRldi0+ZGV2X2N0cmxfcmVxOwotCXUxNiB3SW5kZXggPSBsZTE2X3RvX2NwdShjdHJsLT53SW5kZXgpOwotCXUxNiB3VmFsdWUgPSBsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpOwotCXUxNiB3TGVuZ3RoID0gbGUxNl90b19jcHUoY3RybC0+d0xlbmd0aCk7Ci0KLQlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7Ci0JY2FzZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCi0JCQlicmVhazsKLQotCQlzd2l0Y2ggKHdWYWx1ZSA+PiA4KSB7Ci0JCWNhc2UgVVNCX0RUX0RFVklDRToKLQkJCXJldCA9IG1pbih3TGVuZ3RoLAotCQkJCSh1MTYpc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpKTsKLQkJCW1lbWNweShyZXEtPmJ1ZiwgJmdzX2RldmljZV9kZXNjLCByZXQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKLQkJCWlmICghZ2FkZ2V0X2lzX2R1YWxzcGVlZChnYWRnZXQpKQotCQkJCWJyZWFrOwotCQkJcmV0ID0gbWluKHdMZW5ndGgsCi0JCQkJKHUxNilzaXplb2Yoc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvcikpOwotCQkJbWVtY3B5KHJlcS0+YnVmLCAmZ3NfcXVhbGlmaWVyX2Rlc2MsIHJldCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6Ci0JCQlpZiAoIWdhZGdldF9pc19kdWFsc3BlZWQoZ2FkZ2V0KSkKLQkJCQlicmVhazsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIFVTQl9EVF9DT05GSUc6Ci0JCQlyZXQgPSBnc19idWlsZF9jb25maWdfYnVmKHJlcS0+YnVmLCBnYWRnZXQsCi0JCQkJd1ZhbHVlID4+IDgsIHdWYWx1ZSAmIDB4ZmYsCi0JCQkJZ2FkZ2V0X2lzX290ZyhnYWRnZXQpKTsKLQkJCWlmIChyZXQgPj0gMCkKLQkJCQlyZXQgPSBtaW4od0xlbmd0aCwgKHUxNilyZXQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBVU0JfRFRfU1RSSU5HOgotCQkJLyogd0luZGV4ID09IGxhbmd1YWdlIGNvZGUuICovCi0JCQlyZXQgPSB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcoJmdzX3N0cmluZ190YWJsZSwKLQkJCQl3VmFsdWUgJiAweGZmLCByZXEtPmJ1Zik7Ci0JCQlpZiAocmV0ID49IDApCi0JCQkJcmV0ID0gbWluKHdMZW5ndGgsICh1MTYpcmV0KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDApCi0JCQlicmVhazsKLQkJc3Bpbl9sb2NrKCZkZXYtPmRldl9sb2NrKTsKLQkJcmV0ID0gZ3Nfc2V0X2NvbmZpZyhkZXYsIHdWYWx1ZSk7Ci0JCXNwaW5fdW5sb2NrKCZkZXYtPmRldl9sb2NrKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046Ci0JCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX0RJUl9JTikKLQkJCWJyZWFrOwotCQkqKHU4ICopcmVxLT5idWYgPSBkZXYtPmRldl9jb25maWc7Ci0JCXJldCA9IG1pbih3TGVuZ3RoLCAodTE2KTEpOwotCQlicmVhazsKLQotCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9JTlRFUkZBQ0UKLQkJCQl8fCAhZGV2LT5kZXZfY29uZmlnCi0JCQkJfHwgd0luZGV4ID49IEdTX01BWF9OVU1fSU5URVJGQUNFUykKLQkJCWJyZWFrOwotCQlpZiAoZGV2LT5kZXZfY29uZmlnID09IEdTX0JVTEtfQ09ORklHX0lECi0JCQkJJiYgd0luZGV4ICE9IEdTX0JVTEtfSU5URVJGQUNFX0lEKQotCQkJYnJlYWs7Ci0JCS8qIG5vIGFsdGVybmF0ZSBpbnRlcmZhY2Ugc2V0dGluZ3MgKi8KLQkJaWYgKHdWYWx1ZSAhPSAwKQotCQkJYnJlYWs7Ci0JCXNwaW5fbG9jaygmZGV2LT5kZXZfbG9jayk7Ci0JCS8qIFBYQSBoYXJkd2FyZSBwYXJ0aWFsbHkgaGFuZGxlcyBTRVRfSU5URVJGQUNFOwotCQkgKiB3ZSBuZWVkIHRvIGtsdWdlIGFyb3VuZCB0aGF0IGludGVyZmVyZW5jZS4gICovCi0JCWlmIChnYWRnZXRfaXNfcHhhKGdhZGdldCkpIHsKLQkJCXJldCA9IGdzX3NldF9jb25maWcoZGV2LCB1c2VfYWNtID8KLQkJCQlHU19BQ01fQ09ORklHX0lEIDogR1NfQlVMS19DT05GSUdfSUQpOwotCQkJZ290byBzZXRfaW50ZXJmYWNlX2RvbmU7Ci0JCX0KLQkJaWYgKGRldi0+ZGV2X2NvbmZpZyAhPSBHU19CVUxLX0NPTkZJR19JRAotCQkJCSYmIHdJbmRleCA9PSBHU19DT05UUk9MX0lOVEVSRkFDRV9JRCkgewotCQkJaWYgKGRldi0+ZGV2X25vdGlmeV9lcCkgewotCQkJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X25vdGlmeV9lcCk7Ci0JCQkJdXNiX2VwX2VuYWJsZShkZXYtPmRldl9ub3RpZnlfZXAsIGRldi0+ZGV2X25vdGlmeV9lcF9kZXNjKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X2luX2VwKTsKLQkJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X291dF9lcCk7Ci0JCQl1c2JfZXBfZW5hYmxlKGRldi0+ZGV2X2luX2VwLCBkZXYtPmRldl9pbl9lcF9kZXNjKTsKLQkJCXVzYl9lcF9lbmFibGUoZGV2LT5kZXZfb3V0X2VwLCBkZXYtPmRldl9vdXRfZXBfZGVzYyk7Ci0JCX0KLQkJcmV0ID0gMDsKLXNldF9pbnRlcmZhY2VfZG9uZToKLQkJc3Bpbl91bmxvY2soJmRldi0+ZGV2X2xvY2spOwotCQlicmVhazsKLQotCWNhc2UgVVNCX1JFUV9HRVRfSU5URVJGQUNFOgotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOfFVTQl9SRUNJUF9JTlRFUkZBQ0UpCi0JCXx8IGRldi0+ZGV2X2NvbmZpZyA9PSBHU19OT19DT05GSUdfSUQpCi0JCQlicmVhazsKLQkJaWYgKHdJbmRleCA+PSBHU19NQVhfTlVNX0lOVEVSRkFDRVMKLQkJCQl8fCAoZGV2LT5kZXZfY29uZmlnID09IEdTX0JVTEtfQ09ORklHX0lECi0JCQkJJiYgd0luZGV4ICE9IEdTX0JVTEtfSU5URVJGQUNFX0lEKSkgewotCQkJcmV0ID0gLUVET007Ci0JCQlicmVhazsKLQkJfQotCQkvKiBubyBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRpbmdzICovCi0JCSoodTggKilyZXEtPmJ1ZiA9IDA7Ci0JCXJldCA9IG1pbih3TGVuZ3RoLCAodTE2KTEpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByX2VycigiZ3Nfc2V0dXA6IHVua25vd24gc3RhbmRhcmQgcmVxdWVzdCwgdHlwZT0lMDJ4LCAiCi0JCQkicmVxdWVzdD0lMDJ4LCB2YWx1ZT0lMDR4LCBpbmRleD0lMDR4LCBsZW5ndGg9JWRcbiIsCi0JCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAotCQkJd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBnc19zZXR1cF9jb21wbGV0ZV9zZXRfbGluZV9jb2Rpbmcoc3RydWN0IHVzYl9lcCAqZXAsCi0JCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCBnc19kZXYgKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IGRldi0+ZGV2X3BvcnRbMF07IC8qIEFDTSBvbmx5IGhhcyBvbmUgcG9ydCAqLwotCi0Jc3dpdGNoIChyZXEtPnN0YXR1cykgewotCWNhc2UgMDoKLQkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KLQkJaWYgKHJlcS0+YWN0dWFsICE9IHNpemVvZihwb3J0LT5wb3J0X2xpbmVfY29kaW5nKSkKLQkJCXVzYl9lcF9zZXRfaGFsdChlcCk7Ci0JCWVsc2UgaWYgKHBvcnQpIHsKLQkJCXN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nCSp2YWx1ZSA9IHJlcS0+YnVmOwotCi0JCQkvKiBSRVZJU0lUOiAgd2UgY3VycmVudGx5IGp1c3QgcmVtZW1iZXIgdGhpcyBkYXRhLgotCQkJICogSWYgd2UgY2hhbmdlIHRoYXQsIChhKSB2YWxpZGF0ZSBpdCBmaXJzdCwgdGhlbgotCQkJICogKGIpIHVwZGF0ZSB3aGF0ZXZlciBoYXJkd2FyZSBuZWVkcyB1cGRhdGluZy4KLQkJCSAqLwotCQkJc3Bpbl9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwotCQkJcG9ydC0+cG9ydF9saW5lX2NvZGluZyA9ICp2YWx1ZTsKLQkJCXNwaW5fdW5sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSAtRVNIVVRET1dOOgotCQkvKiBkaXNjb25uZWN0ICovCi0JCWdzX2ZyZWVfcmVxKGVwLCByZXEpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCS8qIHVuZXhwZWN0ZWQgKi8KLQkJYnJlYWs7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBnc19zZXR1cF9jbGFzcyhzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAotCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCi17Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQOwotCXN0cnVjdCBnc19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwotCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gZGV2LT5kZXZfcG9ydFswXTsJLyogQUNNIG9ubHkgaGFzIG9uZSBwb3J0ICovCi0Jc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEgPSBkZXYtPmRldl9jdHJsX3JlcTsKLQl1MTYgd0luZGV4ID0gbGUxNl90b19jcHUoY3RybC0+d0luZGV4KTsKLQl1MTYgd1ZhbHVlID0gbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKTsKLQl1MTYgd0xlbmd0aCA9IGxlMTZfdG9fY3B1KGN0cmwtPndMZW5ndGgpOwotCi0Jc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgewotCWNhc2UgVVNCX0NEQ19SRVFfU0VUX0xJTkVfQ09ESU5HOgotCQlpZiAod0xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcpKQotCQkJYnJlYWs7Ci0JCXJldCA9IHdMZW5ndGg7Ci0JCXJlcS0+Y29tcGxldGUgPSBnc19zZXR1cF9jb21wbGV0ZV9zZXRfbGluZV9jb2Rpbmc7Ci0JCWJyZWFrOwotCi0JY2FzZSBVU0JfQ0RDX1JFUV9HRVRfTElORV9DT0RJTkc6Ci0JCXJldCA9IG1pbl90KGludCwgd0xlbmd0aCwgc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nKSk7Ci0JCWlmIChwb3J0KSB7Ci0JCQlzcGluX2xvY2soJnBvcnQtPnBvcnRfbG9jayk7Ci0JCQltZW1jcHkocmVxLT5idWYsICZwb3J0LT5wb3J0X2xpbmVfY29kaW5nLCByZXQpOwotCQkJc3Bpbl91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFVTQl9DRENfUkVRX1NFVF9DT05UUk9MX0xJTkVfU1RBVEU6Ci0JCWlmICh3TGVuZ3RoICE9IDApCi0JCQlicmVhazsKLQkJcmV0ID0gMDsKLQkJaWYgKHBvcnQpIHsKLQkJCS8qIFJFVklTSVQ6ICB3ZSBjdXJyZW50bHkganVzdCByZW1lbWJlciB0aGlzIGRhdGEuCi0JCQkgKiBJZiB3ZSBjaGFuZ2UgdGhhdCwgdXBkYXRlIHdoYXRldmVyIGhhcmR3YXJlIG5lZWRzCi0JCQkgKiB1cGRhdGluZy4KLQkJCSAqLwotCQkJc3Bpbl9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwotCQkJcG9ydC0+cG9ydF9oYW5kc2hha2VfYml0cyA9IHdWYWx1ZTsKLQkJCXNwaW5fdW5sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJLyogTk9URTogIHN0cmljdGx5IHNwZWFraW5nLCB3ZSBzaG91bGQgYWNjZXB0IEFULWNvbW1hbmRzCi0JCSAqIHVzaW5nIFNFTkRfRU5DUFNVTEFURURfQ09NTUFORC9HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFLgotCQkgKiBCdXQgb3VyIGNhbGwgbWFuYWdlbWVudCBkZXNjcmlwdG9yIHNheXMgd2UgZG9uJ3QgaGFuZGxlCi0JCSAqIGNhbGwgbWFuYWdlbWVudCwgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGJ5IHdpdGhvdXQKLQkJICogaGFuZGxpbmcgdGhvc2UgInJlcXVpcmVkIiBjb21tYW5kcyAoZXhjZXB0IGJ5IHN0YWxsaW5nKS4KLQkJICovCi0JCXByX2VycigiZ3Nfc2V0dXA6IHVua25vd24gY2xhc3MgcmVxdWVzdCwgIgotCQkJCSJ0eXBlPSUwMngsIHJlcXVlc3Q9JTAyeCwgdmFsdWU9JTA0eCwgIgotCQkJCSJpbmRleD0lMDR4LCBsZW5ndGg9JWRcbiIsCi0JCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAotCQkJd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogZ3Nfc2V0dXBfY29tcGxldGUKLSAqLwotc3RhdGljIHZvaWQgZ3Nfc2V0dXBfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQotewotCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkgewotCQlwcl9lcnIoImdzX3NldHVwX2NvbXBsZXRlOiBzdGF0dXMgZXJyb3IsIHN0YXR1cz0lZCwgIgotCQkJImFjdHVhbD0lZCwgbGVuZ3RoPSVkXG4iLAotCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7Ci0JfQotfQotCi0vKgotICogZ3Nfc2V0dXAKLSAqCi0gKiBJbXBsZW1lbnRzIGFsbCB0aGUgY29udHJvbCBlbmRwb2ludCBmdW5jdGlvbmFsaXR5IHRoYXQncyBub3QKLSAqIGhhbmRsZWQgaW4gaGFyZHdhcmUgb3IgdGhlIGhhcmR3YXJlIGRyaXZlci4KLSAqCi0gKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBkYXRhIHNlbnQgdG8gdGhlIGhvc3QsIG9yIGEgbmVnYXRpdmUKLSAqIGVycm9yIG51bWJlci4KLSAqLwotc3RhdGljIGludCBnc19zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAotCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCi17Ci0JaW50CQlyZXQgPSAtRU9QTk9UU1VQUDsKLQlzdHJ1Y3QgZ3NfZGV2CSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9IGRldi0+ZGV2X2N0cmxfcmVxOwotCXUxNgkJd0luZGV4ID0gbGUxNl90b19jcHUoY3RybC0+d0luZGV4KTsKLQl1MTYJCXdWYWx1ZSA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7Ci0JdTE2CQl3TGVuZ3RoID0gbGUxNl90b19jcHUoY3RybC0+d0xlbmd0aCk7Ci0KLQlyZXEtPmNvbXBsZXRlID0gZ3Nfc2V0dXBfY29tcGxldGU7Ci0KLQlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0VHlwZSAmIFVTQl9UWVBFX01BU0spIHsKLQljYXNlIFVTQl9UWVBFX1NUQU5EQVJEOgotCQlyZXQgPSBnc19zZXR1cF9zdGFuZGFyZChnYWRnZXQsIGN0cmwpOwotCQlicmVhazsKLQotCWNhc2UgVVNCX1RZUEVfQ0xBU1M6Ci0JCXJldCA9IGdzX3NldHVwX2NsYXNzKGdhZGdldCwgY3RybCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJfZXJyKCJnc19zZXR1cDogdW5rbm93biByZXF1ZXN0LCB0eXBlPSUwMngsIHJlcXVlc3Q9JTAyeCwgIgotCQkJInZhbHVlPSUwNHgsIGluZGV4PSUwNHgsIGxlbmd0aD0lZFxuIiwKLQkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCi0JCQl3VmFsdWUsIHdJbmRleCwgd0xlbmd0aCk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIHJlc3BvbmQgd2l0aCBkYXRhIHRyYW5zZmVyIGJlZm9yZSBzdGF0dXMgcGhhc2U/ICovCi0JaWYgKHJldCA+PSAwKSB7Ci0JCXJlcS0+bGVuZ3RoID0gcmV0OwotCQlyZXEtPnplcm8gPSByZXQgPCB3TGVuZ3RoCi0JCQkJJiYgKHJldCAlIGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQpID09IDA7Ci0JCXJldCA9IHVzYl9lcF9xdWV1ZShnYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByX2VycigiZ3Nfc2V0dXA6IGNhbm5vdCBxdWV1ZSByZXNwb25zZSwgcmV0PSVkXG4iLAotCQkJCXJldCk7Ci0JCQlyZXEtPnN0YXR1cyA9IDA7Ci0JCQlnc19zZXR1cF9jb21wbGV0ZShnYWRnZXQtPmVwMCwgcmVxKTsKLQkJfQotCX0KLQotCS8qIGRldmljZSBlaXRoZXIgc3RhbGxzIChyZXQgPCAwKSBvciByZXBvcnRzIHN1Y2Nlc3MgKi8KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogZ3NfZGlzY29ubmVjdAotICoKLSAqIENhbGxlZCB3aGVuIHRoZSBkZXZpY2UgaXMgZGlzY29ubmVjdGVkLiAgRnJlZXMgdGhlIGNsb3NlZAotICogcG9ydHMgYW5kIGRpc2Nvbm5lY3RzIG9wZW4gcG9ydHMuICBPcGVuIHBvcnRzIHdpbGwgYmUgZnJlZWQKLSAqIG9uIGNsb3NlLiAgVGhlbiByZWFsbG9jYXRlcyB0aGUgcG9ydHMgZm9yIHRoZSBuZXh0IGNvbm5lY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGdzX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBnc19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKLQotCWdzX3Jlc2V0X2NvbmZpZyhkZXYpOwotCi0JLyogZnJlZSBjbG9zZWQgcG9ydHMgYW5kIGRpc2Nvbm5lY3Qgb3BlbiBwb3J0cyAqLwotCS8qIChvcGVuIHBvcnRzIHdpbGwgYmUgZnJlZWQgd2hlbiBjbG9zZWQpICovCi0JZ3NfZnJlZV9wb3J0cyhkZXYpOwotCi0JLyogcmUtYWxsb2NhdGUgcG9ydHMgZm9yIHRoZSBuZXh0IGNvbm5lY3Rpb24gKi8KLQlpZiAoZ3NfYWxsb2NfcG9ydHMoZGV2LCBHRlBfQVRPTUlDKSAhPSAwKQotCQlwcl9lcnIoImdzX2Rpc2Nvbm5lY3Q6IGNhbm5vdCByZS1hbGxvY2F0ZSBwb3J0c1xuIik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmRldl9sb2NrLCBmbGFncyk7Ci0KLQlwcl9pbmZvKCJnc19kaXNjb25uZWN0OiAlcyBkaXNjb25uZWN0ZWRcbiIsIEdTX0xPTkdfTkFNRSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ3NfZ2FkZ2V0X2RyaXZlciA9IHsKLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKLQkuc3BlZWQgPQkJVVNCX1NQRUVEX0hJR0gsCi0jZWxzZQotCS5zcGVlZCA9CQlVU0JfU1BFRURfRlVMTCwKLSNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KLQkuZnVuY3Rpb24gPQkJR1NfTE9OR19OQU1FLAotCS5iaW5kID0JCQlnc19iaW5kLAotCS51bmJpbmQgPQkJZ3NfdW5iaW5kLAotCS5zZXR1cCA9CQlnc19zZXR1cCwKLQkuZGlzY29ubmVjdCA9CQlnc19kaXNjb25uZWN0LAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0JCUdTX1NIT1JUX05BTUUsCi0JCS5vd25lciA9CVRISVNfTU9EVUxFLAotCX0sCitzdGF0aWMgc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyIGdzZXJpYWxfZHJpdmVyID0geworCS5uYW1lCQk9ICJnX3NlcmlhbCIsCisJLmRldgkJPSAmZGV2aWNlX2Rlc2MsCisJLnN0cmluZ3MJPSBkZXZfc3RyaW5ncywKKwkuYmluZAkJPSBnc19iaW5kLAogfTsKIAotLyoKLSAqIGdzX3NldF9jb25maWcKLSAqCi0gKiBDb25maWd1cmVzIHRoZSBkZXZpY2UgYnkgZW5hYmxpbmcgZGV2aWNlIHNwZWNpZmljCi0gKiBvcHRpbWl6YXRpb25zLCBzZXR0aW5nIHVwIHRoZSBlbmRwb2ludHMsIGFsbG9jYXRpbmcKLSAqIHJlYWQgYW5kIHdyaXRlIHJlcXVlc3RzIGFuZCBxdWV1aW5nIHJlYWQgcmVxdWVzdHMuCi0gKgotICogVGhlIGRldmljZSBsb2NrIG11c3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBnc19zZXRfY29uZmlnKHN0cnVjdCBnc19kZXYgKmRldiwgdW5zaWduZWQgY29uZmlnKQorc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogewotCWludCBpOwotCWludCByZXQgPSAwOwotCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQgPSBkZXYtPmRldl9nYWRnZXQ7Ci0Jc3RydWN0IHVzYl9lcCAqZXA7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpvdXQsICppbiwgKm5vdGlmeTsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcTsKLQotCWlmIChkZXYgPT0gTlVMTCkgewotCQlwcl9lcnIoImdzX3NldF9jb25maWc6IE5VTEwgZGV2aWNlIHBvaW50ZXJcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY29uZmlnID09IGRldi0+ZGV2X2NvbmZpZykKLQkJcmV0dXJuIDA7Ci0KLQlnc19yZXNldF9jb25maWcoZGV2KTsKLQotCXN3aXRjaCAoY29uZmlnKSB7Ci0JY2FzZSBHU19OT19DT05GSUdfSUQ6Ci0JCXJldHVybiAwOwotCWNhc2UgR1NfQlVMS19DT05GSUdfSUQ6Ci0JCWlmICh1c2VfYWNtKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCWNhc2UgR1NfQUNNX0NPTkZJR19JRDoKLQkJaWYgKCF1c2VfYWNtKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWluID0gY2hvb3NlX2VwX2Rlc2MoZ2FkZ2V0LAotCQkJJmdzX2hpZ2hzcGVlZF9pbl9kZXNjLAotCQkJJmdzX2Z1bGxzcGVlZF9pbl9kZXNjKTsKLQlvdXQgPSBjaG9vc2VfZXBfZGVzYyhnYWRnZXQsCi0JCQkmZ3NfaGlnaHNwZWVkX291dF9kZXNjLAotCQkJJmdzX2Z1bGxzcGVlZF9vdXRfZGVzYyk7Ci0Jbm90aWZ5ID0gZGV2LT5kZXZfbm90aWZ5X2VwCi0JCT8gY2hvb3NlX2VwX2Rlc2MoZ2FkZ2V0LAotCQkJCSZnc19oaWdoc3BlZWRfbm90aWZ5X2Rlc2MsCi0JCQkJJmdzX2Z1bGxzcGVlZF9ub3RpZnlfZGVzYykKLQkJOiBOVUxMOwotCi0JcmV0ID0gdXNiX2VwX2VuYWJsZShkZXYtPmRldl9pbl9lcCwgaW4pOwotCWlmIChyZXQgPT0gMCkgewotCQlkZXYtPmRldl9pbl9lcF9kZXNjID0gaW47Ci0JfSBlbHNlIHsKLQkJcHJfZGVidWcoIiVzOiBjYW5ub3QgZW5hYmxlICVzICVzLCByZXQ9JWRcbiIsCi0JCQlfX2Z1bmNfXywgIklOIiwgZGV2LT5kZXZfaW5fZXAtPm5hbWUsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gdXNiX2VwX2VuYWJsZShkZXYtPmRldl9vdXRfZXAsIG91dCk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCWRldi0+ZGV2X291dF9lcF9kZXNjID0gb3V0OwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCIlczogY2Fubm90IGVuYWJsZSAlcyAlcywgcmV0PSVkXG4iLAotCQkJX19mdW5jX18sICJPVVQiLCBkZXYtPmRldl9vdXRfZXAtPm5hbWUsIHJldCk7Ci1mYWlsMDoKLQkJdXNiX2VwX2Rpc2FibGUoZGV2LT5kZXZfaW5fZXApOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChub3RpZnkpIHsKLQkJcmV0ID0gdXNiX2VwX2VuYWJsZShkZXYtPmRldl9ub3RpZnlfZXAsIG5vdGlmeSk7Ci0JCWlmIChyZXQgPT0gMCkgewotCQkJZGV2LT5kZXZfbm90aWZ5X2VwX2Rlc2MgPSBub3RpZnk7Ci0JCX0gZWxzZSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGNhbm5vdCBlbmFibGUgJXMgJXMsIHJldD0lZFxuIiwKLQkJCQlfX2Z1bmNfXywgIk5PVElGWSIsCi0JCQkJZGV2LT5kZXZfbm90aWZ5X2VwLT5uYW1lLCByZXQpOwotCQkJdXNiX2VwX2Rpc2FibGUoZGV2LT5kZXZfb3V0X2VwKTsKLQkJCWdvdG8gZmFpbDA7Ci0JCX0KLQl9Ci0KLQlkZXYtPmRldl9jb25maWcgPSBjb25maWc7Ci0KLQkvKiBhbGxvY2F0ZSBhbmQgcXVldWUgcmVhZCByZXF1ZXN0cyAqLwotCWVwID0gZGV2LT5kZXZfb3V0X2VwOwotCWZvciAoaT0wOyBpPHJlYWRfcV9zaXplICYmIHJldCA9PSAwOyBpKyspIHsKLQkJaWYgKChyZXE9Z3NfYWxsb2NfcmVxKGVwLCBlcC0+bWF4cGFja2V0LCBHRlBfQVRPTUlDKSkpIHsKLQkJCXJlcS0+Y29tcGxldGUgPSBnc19yZWFkX2NvbXBsZXRlOwotCQkJaWYgKChyZXQ9dXNiX2VwX3F1ZXVlKGVwLCByZXEsIEdGUF9BVE9NSUMpKSkgewotCQkJCXByX2VycigiZ3Nfc2V0X2NvbmZpZzogY2Fubm90IHF1ZXVlIHJlYWQgIgotCQkJCQkicmVxdWVzdCwgcmV0PSVkXG4iLCByZXQpOwotCQkJfQotCQl9IGVsc2UgewotCQkJcHJfZXJyKCJnc19zZXRfY29uZmlnOiBjYW5ub3QgYWxsb2NhdGUgIgotCQkJCQkicmVhZCByZXF1ZXN0c1xuIik7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBleGl0X3Jlc2V0X2NvbmZpZzsKLQkJfQotCX0KLQotCS8qIGFsbG9jYXRlIHdyaXRlIHJlcXVlc3RzLCBhbmQgcHV0IG9uIGZyZWUgbGlzdCAqLwotCWVwID0gZGV2LT5kZXZfaW5fZXA7Ci0JZm9yIChpPTA7IGk8d3JpdGVfcV9zaXplOyBpKyspIHsKLQkJcmVxID0gZ3NfYWxsb2NfcmVxKGVwLCBlcC0+bWF4cGFja2V0LCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlcSkgewotCQkJcmVxLT5jb21wbGV0ZSA9IGdzX3dyaXRlX2NvbXBsZXRlOwotCQkJbGlzdF9hZGQoJnJlcS0+bGlzdCwgJmRldi0+ZGV2X3JlcV9saXN0KTsKLQkJfSBlbHNlIHsKLQkJCXByX2VycigiZ3Nfc2V0X2NvbmZpZzogY2Fubm90IGFsbG9jYXRlICIKLQkJCQkJIndyaXRlIHJlcXVlc3RzXG4iKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGV4aXRfcmVzZXRfY29uZmlnOwotCQl9Ci0JfQotCi0JLyogUkVWSVNJVCB0aGUgQUNNIG1vZGUgc2hvdWxkIGJlIGFibGUgdG8gYWN0dWFsbHkgKmlzc3VlKiBzb21lCi0JICogbm90aWZpY2F0aW9ucywgZm9yIGF0IGxlYXN0IHNlcmlhbCBzdGF0ZSBjaGFuZ2UgZXZlbnRzIGlmCi0JICogbm90IGFsc28gZm9yIG5ldHdvcmsgY29ubmVjdGlvbjsgc2F5IHNvIGluIGJtQ2FwYWJpbGl0aWVzLgorCS8qIFdlICpjb3VsZCogZXhwb3J0IHR3byBjb25maWdzOyB0aGF0J2QgYmUgbXVjaCBjbGVhbmVyLi4uCisJICogYnV0IG5laXRoZXIgb2YgdGhlc2UgcHJvZHVjdCBJRHMgd2FzIGRlZmluZWQgdGhhdCB3YXkuCiAJICovCi0KLQlwcl9pbmZvKCJnc19zZXRfY29uZmlnOiAlcyBjb25maWd1cmVkLCAlcyBzcGVlZCAlcyBjb25maWdcbiIsCi0JCUdTX0xPTkdfTkFNRSwKLQkJZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCA/ICJoaWdoIiA6ICJmdWxsIiwKLQkJY29uZmlnID09IEdTX0JVTEtfQ09ORklHX0lEID8gIkJVTEsiIDogIkNEQy1BQ00iKTsKLQotCXJldHVybiAwOwotCi1leGl0X3Jlc2V0X2NvbmZpZzoKLQlnc19yZXNldF9jb25maWcoZGV2KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogZ3NfcmVzZXRfY29uZmlnCi0gKgotICogTWFyayB0aGUgZGV2aWNlIGFzIG5vdCBjb25maWd1cmVkLCBkaXNhYmxlIGFsbCBlbmRwb2ludHMsCi0gKiB3aGljaCBmb3JjZXMgY29tcGxldGlvbiBvZiBwZW5kaW5nIEkvTyBhbmQgZnJlZXMgcXVldWVkCi0gKiByZXF1ZXN0cywgYW5kIGZyZWUgdGhlIHJlbWFpbmluZyB3cml0ZSByZXF1ZXN0cyBvbiB0aGUKLSAqIGZyZWUgbGlzdC4KLSAqCi0gKiBUaGUgZGV2aWNlIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBnc19yZXNldF9jb25maWcoc3RydWN0IGdzX2RldiAqZGV2KQotewotCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOwotCi0JaWYgKGRldiA9PSBOVUxMKSB7Ci0JCXByX2VycigiZ3NfcmVzZXRfY29uZmlnOiBOVUxMIGRldmljZSBwb2ludGVyXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChkZXYtPmRldl9jb25maWcgPT0gR1NfTk9fQ09ORklHX0lEKQotCQlyZXR1cm47Ci0KLQlkZXYtPmRldl9jb25maWcgPSBHU19OT19DT05GSUdfSUQ7Ci0KLQkvKiBmcmVlIHdyaXRlIHJlcXVlc3RzIG9uIHRoZSBmcmVlIGxpc3QgKi8KLQl3aGlsZSghbGlzdF9lbXB0eSgmZGV2LT5kZXZfcmVxX2xpc3QpKSB7Ci0JCXJlcSA9IGxpc3RfZW50cnkoZGV2LT5kZXZfcmVxX2xpc3QubmV4dCwKLQkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOwotCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKLQkJZ3NfZnJlZV9yZXEoZGV2LT5kZXZfaW5fZXAsIHJlcSk7Ci0JfQotCi0JLyogZGlzYWJsZSBlbmRwb2ludHMsIGZvcmNpbmcgY29tcGxldGlvbiBvZiBwZW5kaW5nIGkvbzsgKi8KLQkvKiBjb21wbGV0aW9uIGhhbmRsZXJzIGZyZWUgdGhlaXIgcmVxdWVzdHMgaW4gdGhpcyBjYXNlICovCi0JaWYgKGRldi0+ZGV2X25vdGlmeV9lcCkKLQkJdXNiX2VwX2Rpc2FibGUoZGV2LT5kZXZfbm90aWZ5X2VwKTsKLQl1c2JfZXBfZGlzYWJsZShkZXYtPmRldl9pbl9lcCk7Ci0JdXNiX2VwX2Rpc2FibGUoZGV2LT5kZXZfb3V0X2VwKTsKLX0KLQotLyoKLSAqIGdzX2J1aWxkX2NvbmZpZ19idWYKLSAqCi0gKiBCdWlsZHMgdGhlIGNvbmZpZyBkZXNjcmlwdG9ycyBpbiB0aGUgZ2l2ZW4gYnVmZmVyIGFuZCByZXR1cm5zIHRoZQotICogbGVuZ3RoLCBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KLSAqLwotc3RhdGljIGludCBnc19idWlsZF9jb25maWdfYnVmKHU4ICpidWYsIHN0cnVjdCB1c2JfZ2FkZ2V0ICpnLAotCXU4IHR5cGUsIHVuc2lnbmVkIGludCBpbmRleCwgaW50IGlzX290ZykKLXsKLQlpbnQgbGVuOwotCWludCBoaWdoX3NwZWVkID0gMDsKLQljb25zdCBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICpjb25maWdfZGVzYzsKLQljb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICoqZnVuY3Rpb247Ci0KLQlpZiAoaW5kZXggPj0gZ3NfZGV2aWNlX2Rlc2MuYk51bUNvbmZpZ3VyYXRpb25zKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIG90aGVyIHNwZWVkIHN3aXRjaGVzIGhpZ2ggYW5kIGZ1bGwgc3BlZWQgKi8KLQlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChnKSkgewotCQloaWdoX3NwZWVkID0gKGctPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKTsKLQkJaWYgKHR5cGUgPT0gVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRykKLQkJCWhpZ2hfc3BlZWQgPSAhaGlnaF9zcGVlZDsKLQl9Ci0KIAlpZiAodXNlX2FjbSkgewotCQljb25maWdfZGVzYyA9ICZnc19hY21fY29uZmlnX2Rlc2M7Ci0JCWZ1bmN0aW9uID0gaGlnaF9zcGVlZAotCQkJPyBnc19hY21faGlnaHNwZWVkX2Z1bmN0aW9uCi0JCQk6IGdzX2FjbV9mdWxsc3BlZWRfZnVuY3Rpb247CisJCXNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsID0gIkNEQyBBQ00gY29uZmlnIjsKKwkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDI7CisJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19DT01NOworCQlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPQorCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfQ0RDX1BST0RVQ1RfSUQpOwogCX0gZWxzZSB7Ci0JCWNvbmZpZ19kZXNjID0gJmdzX2J1bGtfY29uZmlnX2Rlc2M7Ci0JCWZ1bmN0aW9uID0gaGlnaF9zcGVlZAotCQkJPyBnc19idWxrX2hpZ2hzcGVlZF9mdW5jdGlvbgotCQkJOiBnc19idWxrX2Z1bGxzcGVlZF9mdW5jdGlvbjsKKwkJc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiR2VuZXJpYyBTZXJpYWwgY29uZmlnIjsKKwkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDE7CisJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKKwkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KKwkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpOwogCX0KKwlzdHJpbmdzX2RldltTVFJJTkdfREVTQ1JJUFRJT05fSURYXS5zID0gc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWw7CiAKLQkvKiBmb3Igbm93LCBkb24ndCBhZHZlcnRpc2Ugc3JwLW9ubHkgZGV2aWNlcyAqLwotCWlmICghaXNfb3RnKQotCQlmdW5jdGlvbisrOwotCi0JbGVuID0gdXNiX2dhZGdldF9jb25maWdfYnVmKGNvbmZpZ19kZXNjLCBidWYsIEdTX01BWF9ERVNDX0xFTiwgZnVuY3Rpb24pOwotCWlmIChsZW4gPCAwKQotCQlyZXR1cm4gbGVuOwotCi0JKChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopYnVmKS0+YkRlc2NyaXB0b3JUeXBlID0gdHlwZTsKLQotCXJldHVybiBsZW47CisJcmV0dXJuIHVzYl9jb21wb3NpdGVfcmVnaXN0ZXIoJmdzZXJpYWxfZHJpdmVyKTsKIH0KK21vZHVsZV9pbml0KGluaXQpOwogCi0vKgotICogZ3NfYWxsb2NfcmVxCi0gKgotICogQWxsb2NhdGUgYSB1c2JfcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlci4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQotICogdXNiX3JlcXVlc3Qgb3IgTlVMTCBpZiB0aGVyZSBpcyBhbiBlcnJvci4KLSAqLwotc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqCi1nc19hbGxvY19yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGludCBsZW4sIGdmcF90IGttYWxsb2NfZmxhZ3MpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCh2b2lkKQogewotCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOwotCi0JaWYgKGVwID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIGttYWxsb2NfZmxhZ3MpOwotCi0JaWYgKHJlcSAhPSBOVUxMKSB7Ci0JCXJlcS0+bGVuZ3RoID0gbGVuOwotCQlyZXEtPmJ1ZiA9IGttYWxsb2MobGVuLCBrbWFsbG9jX2ZsYWdzKTsKLQkJaWYgKHJlcS0+YnVmID09IE5VTEwpIHsKLQkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXAsIHJlcSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQotCXJldHVybiByZXE7CisJdXNiX2NvbXBvc2l0ZV91bnJlZ2lzdGVyKCZnc2VyaWFsX2RyaXZlcik7CisJZ3NlcmlhbF9jbGVhbnVwKCk7CiB9Ci0KLS8qCi0gKiBnc19mcmVlX3JlcQotICoKLSAqIEZyZWUgYSB1c2JfcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlci4KLSAqLwotc3RhdGljIHZvaWQgZ3NfZnJlZV9yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQotewotCWlmIChlcCAhPSBOVUxMICYmIHJlcSAhPSBOVUxMKSB7Ci0JCWtmcmVlKHJlcS0+YnVmKTsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChlcCwgcmVxKTsKLQl9Ci19Ci0KLS8qCi0gKiBnc19hbGxvY19wb3J0cwotICoKLSAqIEFsbG9jYXRlIGFsbCBwb3J0cyBhbmQgc2V0IHRoZSBnc19kZXYgc3RydWN0IHRvIHBvaW50IHRvIHRoZW0uCi0gKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KLSAqCi0gKiBUaGUgZGV2aWNlIGxvY2sgaXMgbm9ybWFsbHkgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBnc19hbGxvY19wb3J0cyhzdHJ1Y3QgZ3NfZGV2ICpkZXYsIGdmcF90IGttYWxsb2NfZmxhZ3MpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGdzX3BvcnQgKnBvcnQ7Ci0KLQlpZiAoZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUlPOwotCi0JZm9yIChpPTA7IGk8R1NfTlVNX1BPUlRTOyBpKyspIHsKLQkJaWYgKChwb3J0PWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnc19wb3J0KSwga21hbGxvY19mbGFncykpID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlwb3J0LT5wb3J0X2RldiA9IGRldjsKLQkJcG9ydC0+cG9ydF9udW0gPSBpOwotCQlwb3J0LT5wb3J0X2xpbmVfY29kaW5nLmR3RFRFUmF0ZSA9IGNwdV90b19sZTMyKEdTX0RFRkFVTFRfRFRFX1JBVEUpOwotCQlwb3J0LT5wb3J0X2xpbmVfY29kaW5nLmJDaGFyRm9ybWF0ID0gR1NfREVGQVVMVF9DSEFSX0ZPUk1BVDsKLQkJcG9ydC0+cG9ydF9saW5lX2NvZGluZy5iUGFyaXR5VHlwZSA9IEdTX0RFRkFVTFRfUEFSSVRZOwotCQlwb3J0LT5wb3J0X2xpbmVfY29kaW5nLmJEYXRhQml0cyA9IEdTX0RFRkFVTFRfREFUQV9CSVRTOwotCQlzcGluX2xvY2tfaW5pdCgmcG9ydC0+cG9ydF9sb2NrKTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+cG9ydF93cml0ZV93YWl0KTsKLQotCQlkZXYtPmRldl9wb3J0W2ldID0gcG9ydDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGdzX2ZyZWVfcG9ydHMKLSAqCi0gKiBGcmVlIGFsbCBjbG9zZWQgcG9ydHMuICBPcGVuIHBvcnRzIGFyZSBkaXNjb25uZWN0ZWQgYnkKLSAqIGZyZWVpbmcgdGhlaXIgd3JpdGUgYnVmZmVycywgc2V0dGluZyB0aGVpciBkZXZpY2UgcG9pbnRlcnMKLSAqIGFuZCB0aGUgcG9pbnRlcnMgdG8gdGhlbSBpbiB0aGUgZGV2aWNlIHRvIE5VTEwuICBUaGVzZQotICogcG9ydHMgd2lsbCBiZSBmcmVlZCB3aGVuIGNsb3NlZC4KLSAqCi0gKiBUaGUgZGV2aWNlIGxvY2sgaXMgbm9ybWFsbHkgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgZ3NfZnJlZV9wb3J0cyhzdHJ1Y3QgZ3NfZGV2ICpkZXYpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKLQotCWlmIChkZXYgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JZm9yIChpPTA7IGk8R1NfTlVNX1BPUlRTOyBpKyspIHsKLQkJaWYgKChwb3J0PWRldi0+ZGV2X3BvcnRbaV0pICE9IE5VTEwpIHsKLQkJCWRldi0+ZGV2X3BvcnRbaV0gPSBOVUxMOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Ci0KLQkJCWlmIChwb3J0LT5wb3J0X3dyaXRlX2J1ZiAhPSBOVUxMKSB7Ci0JCQkJZ3NfYnVmX2ZyZWUocG9ydC0+cG9ydF93cml0ZV9idWYpOwotCQkJCXBvcnQtPnBvcnRfd3JpdGVfYnVmID0gTlVMTDsKLQkJCX0KLQotCQkJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA+IDAgfHwgcG9ydC0+cG9ydF9pbl91c2UpIHsKLQkJCQlwb3J0LT5wb3J0X2RldiA9IE5VTEw7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0X3dyaXRlX3dhaXQpOwotCQkJCWlmIChwb3J0LT5wb3J0X3R0eSkgewotCQkJCQl0dHlfaGFuZ3VwKHBvcnQtPnBvcnRfdHR5KTsKLQkJCQl9Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Ci0JCQl9IGVsc2UgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOwotCQkJCWtmcmVlKHBvcnQpOwotCQkJfQotCi0JCX0KLQl9Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIENpcmN1bGFyIEJ1ZmZlciAqLwotCi0vKgotICogZ3NfYnVmX2FsbG9jCi0gKgotICogQWxsb2NhdGUgYSBjaXJjdWxhciBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KLSAqLwotc3RhdGljIHN0cnVjdCBnc19idWYgKmdzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3Qga21hbGxvY19mbGFncykKLXsKLQlzdHJ1Y3QgZ3NfYnVmICpnYjsKLQotCWlmIChzaXplID09IDApCi0JCXJldHVybiBOVUxMOwotCi0JZ2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3NfYnVmKSwga21hbGxvY19mbGFncyk7Ci0JaWYgKGdiID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JZ2ItPmJ1Zl9idWYgPSBrbWFsbG9jKHNpemUsIGttYWxsb2NfZmxhZ3MpOwotCWlmIChnYi0+YnVmX2J1ZiA9PSBOVUxMKSB7Ci0JCWtmcmVlKGdiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JZ2ItPmJ1Zl9zaXplID0gc2l6ZTsKLQlnYi0+YnVmX2dldCA9IGdiLT5idWZfcHV0ID0gZ2ItPmJ1Zl9idWY7Ci0KLQlyZXR1cm4gZ2I7Ci19Ci0KLS8qCi0gKiBnc19idWZfZnJlZQotICoKLSAqIEZyZWUgdGhlIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgotICovCi1zdGF0aWMgdm9pZCBnc19idWZfZnJlZShzdHJ1Y3QgZ3NfYnVmICpnYikKLXsKLQlpZiAoZ2IpIHsKLQkJa2ZyZWUoZ2ItPmJ1Zl9idWYpOwotCQlrZnJlZShnYik7Ci0JfQotfQotCi0vKgotICogZ3NfYnVmX2NsZWFyCi0gKgotICogQ2xlYXIgb3V0IGFsbCBkYXRhIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGdzX2J1Zl9jbGVhcihzdHJ1Y3QgZ3NfYnVmICpnYikKLXsKLQlpZiAoZ2IgIT0gTlVMTCkKLQkJZ2ItPmJ1Zl9nZXQgPSBnYi0+YnVmX3B1dDsKLQkJLyogZXF1aXZhbGVudCB0byBhIGdldCBvZiBhbGwgZGF0YSBhdmFpbGFibGUgKi8KLX0KLQotLyoKLSAqIGdzX2J1Zl9kYXRhX2F2YWlsCi0gKgotICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCi0gKiBidWZmZXIuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ3NfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpCi17Ci0JaWYgKGdiICE9IE5VTEwpCi0JCXJldHVybiAoZ2ItPmJ1Zl9zaXplICsgZ2ItPmJ1Zl9wdXQgLSBnYi0+YnVmX2dldCkgJSBnYi0+YnVmX3NpemU7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGdzX2J1Zl9zcGFjZV9hdmFpbAotICoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgY2lyY3VsYXIKLSAqIGJ1ZmZlci4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBnc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpCi17Ci0JaWYgKGdiICE9IE5VTEwpCi0JCXJldHVybiAoZ2ItPmJ1Zl9zaXplICsgZ2ItPmJ1Zl9nZXQgLSBnYi0+YnVmX3B1dCAtIDEpICUgZ2ItPmJ1Zl9zaXplOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBnc19idWZfcHV0Ci0gKgotICogQ29weSBkYXRhIGRhdGEgZnJvbSBhIHVzZXIgYnVmZmVyIGFuZCBwdXQgaXQgaW50byB0aGUgY2lyY3VsYXIgYnVmZmVyLgotICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUuCi0gKgotICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1nc19idWZfcHV0KHN0cnVjdCBnc19idWYgKmdiLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCi0JaWYgKGdiID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JbGVuICA9IGdzX2J1Zl9zcGFjZV9hdmFpbChnYik7Ci0JaWYgKGNvdW50ID4gbGVuKQotCQljb3VudCA9IGxlbjsKLQotCWlmIChjb3VudCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWxlbiA9IGdiLT5idWZfYnVmICsgZ2ItPmJ1Zl9zaXplIC0gZ2ItPmJ1Zl9wdXQ7Ci0JaWYgKGNvdW50ID4gbGVuKSB7Ci0JCW1lbWNweShnYi0+YnVmX3B1dCwgYnVmLCBsZW4pOwotCQltZW1jcHkoZ2ItPmJ1Zl9idWYsIGJ1ZitsZW4sIGNvdW50IC0gbGVuKTsKLQkJZ2ItPmJ1Zl9wdXQgPSBnYi0+YnVmX2J1ZiArIGNvdW50IC0gbGVuOwotCX0gZWxzZSB7Ci0JCW1lbWNweShnYi0+YnVmX3B1dCwgYnVmLCBjb3VudCk7Ci0JCWlmIChjb3VudCA8IGxlbikKLQkJCWdiLT5idWZfcHV0ICs9IGNvdW50OwotCQllbHNlIC8qIGNvdW50ID09IGxlbiAqLwotCQkJZ2ItPmJ1Zl9wdXQgPSBnYi0+YnVmX2J1ZjsKLQl9Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qCi0gKiBnc19idWZfZ2V0Ci0gKgotICogR2V0IGRhdGEgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIGFuZCBjb3B5IHRvIHRoZSBnaXZlbiBidWZmZXIuCi0gKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIGRhdGEgYXZhaWxhYmxlLgotICoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludAotZ3NfYnVmX2dldChzdHJ1Y3QgZ3NfYnVmICpnYiwgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JdW5zaWduZWQgaW50IGxlbjsKLQotCWlmIChnYiA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCWxlbiA9IGdzX2J1Zl9kYXRhX2F2YWlsKGdiKTsKLQlpZiAoY291bnQgPiBsZW4pCi0JCWNvdW50ID0gbGVuOwotCi0JaWYgKGNvdW50ID09IDApCi0JCXJldHVybiAwOwotCi0JbGVuID0gZ2ItPmJ1Zl9idWYgKyBnYi0+YnVmX3NpemUgLSBnYi0+YnVmX2dldDsKLQlpZiAoY291bnQgPiBsZW4pIHsKLQkJbWVtY3B5KGJ1ZiwgZ2ItPmJ1Zl9nZXQsIGxlbik7Ci0JCW1lbWNweShidWYrbGVuLCBnYi0+YnVmX2J1ZiwgY291bnQgLSBsZW4pOwotCQlnYi0+YnVmX2dldCA9IGdiLT5idWZfYnVmICsgY291bnQgLSBsZW47Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KGJ1ZiwgZ2ItPmJ1Zl9nZXQsIGNvdW50KTsKLQkJaWYgKGNvdW50IDwgbGVuKQotCQkJZ2ItPmJ1Zl9nZXQgKz0gY291bnQ7Ci0JCWVsc2UgLyogY291bnQgPT0gbGVuICovCi0JCQlnYi0+YnVmX2dldCA9IGdiLT5idWZfYnVmOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpnc190dHlfZHJpdmVyOwotCi0vKgotICogIGdzX21vZHVsZV9pbml0Ci0gKgotICogIFJlZ2lzdGVyIGFzIGEgVVNCIGdhZGdldCBkcml2ZXIgYW5kIGEgdHR5IGRyaXZlci4KLSAqLwotc3RhdGljIGludCBfX2luaXQgZ3NfbW9kdWxlX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoJmdzX2dhZGdldF9kcml2ZXIpOwotCWlmIChyZXR2YWwpIHsKLQkJcHJfZXJyKCJnc19tb2R1bGVfaW5pdDogY2Fubm90IHJlZ2lzdGVyIGdhZGdldCBkcml2ZXIsICIKLQkJCSJyZXQ9JWRcbiIsIHJldHZhbCk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JZ3NfdHR5X2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoR1NfTlVNX1BPUlRTKTsKLQlpZiAoIWdzX3R0eV9kcml2ZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCWdzX3R0eV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZ3NfdHR5X2RyaXZlci0+ZHJpdmVyX25hbWUgPSBHU19TSE9SVF9OQU1FOwotCWdzX3R0eV9kcml2ZXItPm5hbWUgPSAidHR5Z3MiOwotCWdzX3R0eV9kcml2ZXItPm1ham9yID0gR1NfTUFKT1I7Ci0JZ3NfdHR5X2RyaXZlci0+bWlub3Jfc3RhcnQgPSBHU19NSU5PUl9TVEFSVDsKLQlnc190dHlfZHJpdmVyLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKLQlnc190dHlfZHJpdmVyLT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwotCWdzX3R0eV9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfRFlOQU1JQ19ERVY7Ci0JZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwotCS8qIG11c3QgbWF0Y2ggR1NfREVGQVVMVF9EVEVfUkFURSBhbmQgZnJpZW5kcyAqLwotCWdzX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0KLQkJQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCWdzX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2lzcGVlZCA9IEdTX0RFRkFVTFRfRFRFX1JBVEU7Ci0JZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gR1NfREVGQVVMVF9EVEVfUkFURTsKLQl0dHlfc2V0X29wZXJhdGlvbnMoZ3NfdHR5X2RyaXZlciwgJmdzX3R0eV9vcHMpOwotCi0JZm9yIChpID0gMDsgaSA8IEdTX05VTV9QT1JUUzsgaSsrKQotCQltdXRleF9pbml0KCZnc19vcGVuX2Nsb3NlX2xvY2tbaV0pOwotCi0JcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihnc190dHlfZHJpdmVyKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoJmdzX2dhZGdldF9kcml2ZXIpOwotCQlwdXRfdHR5X2RyaXZlcihnc190dHlfZHJpdmVyKTsKLQkJcHJfZXJyKCJnc19tb2R1bGVfaW5pdDogY2Fubm90IHJlZ2lzdGVyIHR0eSBkcml2ZXIsICIKLQkJCQkicmV0PSVkXG4iLCByZXR2YWwpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCXByX2luZm8oImdzX21vZHVsZV9pbml0OiAlcyAlcyBsb2FkZWRcbiIsCi0JCQlHU19MT05HX05BTUUsIEdTX1ZFUlNJT05fU1RSKTsKLQlyZXR1cm4gMDsKLX0KLW1vZHVsZV9pbml0KGdzX21vZHVsZV9pbml0KTsKLQotLyoKLSAqIGdzX21vZHVsZV9leGl0Ci0gKgotICogVW5yZWdpc3RlciBhcyBhIHR0eSBkcml2ZXIgYW5kIGEgVVNCIGdhZGdldCBkcml2ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBnc19tb2R1bGVfZXhpdCh2b2lkKQotewotCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihnc190dHlfZHJpdmVyKTsKLQlwdXRfdHR5X2RyaXZlcihnc190dHlfZHJpdmVyKTsKLQl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKCZnc19nYWRnZXRfZHJpdmVyKTsKLQotCXByX2luZm8oImdzX21vZHVsZV9leGl0OiAlcyAlcyB1bmxvYWRlZFxuIiwKLQkJCUdTX0xPTkdfTkFNRSwgR1NfVkVSU0lPTl9TVFIpOwotfQotbW9kdWxlX2V4aXQoZ3NfbW9kdWxlX2V4aXQpOworbW9kdWxlX2V4aXQoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDU4ZjQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwpAQCAtMCwwICsxLDk2NyBAQAorLyoKKyAqIHVfZXRoZXIuYyAtLSBFdGhlcm5ldC1vdmVyLVVTQiBsaW5rIGxheWVyIHV0aWxpdGllcyBmb3IgR2FkZ2V0IHN0YWNrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUsMjAwOCBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgUm9iZXJ0IFNjaHdlYmVsLCBCZW5lZGlrdCBTcHJhbmdlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qICNkZWZpbmUgVkVSQk9TRV9ERUJVRyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKKyNpbmNsdWRlICJ1X2V0aGVyLmgiCisKKworLyoKKyAqIFRoaXMgY29tcG9uZW50IGVuY2Fwc3VsYXRlcyB0aGUgRXRoZXJuZXQgbGluayBnbHVlIG5lZWRlZCB0byBwcm92aWRlCisgKiBvbmUgKCEpIG5ldHdvcmsgbGluayB0aHJvdWdoIHRoZSBVU0IgZ2FkZ2V0IHN0YWNrLCBub3JtYWxseSAidXNiMCIuCisgKgorICogVGhlIGNvbnRyb2wgYW5kIGRhdGEgbW9kZWxzIGFyZSBoYW5kbGVkIGJ5IHRoZSBmdW5jdGlvbiBkcml2ZXIgd2hpY2gKKyAqIGNvbm5lY3RzIHRvIHRoaXMgY29kZTsgc3VjaCBhcyBDREMgRXRoZXJuZXQsICJDREMgU3Vic2V0Iiwgb3IgUk5ESVMuCisgKiBUaGF0IGluY2x1ZGVzIGFsbCBkZXNjcmlwdG9yIGFuZCBlbmRwb2ludCBtYW5hZ2VtZW50LgorICoKKyAqIExpbmsgbGV2ZWwgYWRkcmVzc2luZyBpcyBoYW5kbGVkIGJ5IHRoaXMgY29tcG9uZW50IHVzaW5nIG1vZHVsZQorICogcGFyYW1ldGVyczsgaWYgbm8gc3VjaCBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCwgcmFuZG9tIGxpbmsgbGV2ZWwKKyAqIGFkZHJlc3NlcyBhcmUgdXNlZC4gIEVhY2ggZW5kIG9mIHRoZSBsaW5rIHVzZXMgb25lIGFkZHJlc3MuICBUaGUKKyAqIGhvc3QgZW5kIGFkZHJlc3MgaXMgZXhwb3J0ZWQgaW4gdmFyaW91cyB3YXlzLCBhbmQgaXMgb2Z0ZW4gcmVjb3JkZWQKKyAqIGluIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2VzLgorICoKKyAqIFRoZSBkcml2ZXIgd2hpY2ggYXNzZW1ibGVzIGVhY2ggY29uZmlndXJhdGlvbiB1c2luZyBzdWNoIGEgbGluayBpcworICogcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgZWFjaCBjb25maWd1cmF0aW9uIGluY2x1ZGVzIGF0IG1vc3Qgb25lCisgKiBpbnN0YW5jZSBvZiBpcyBuZXR3b3JrIGxpbmsuICAoVGhlIG5ldHdvcmsgbGF5ZXIgcHJvdmlkZXMgd2F5cyBmb3IKKyAqIHRoaXMgc2luZ2xlICJwaHlzaWNhbCIgbGluayB0byBiZSB1c2VkIGJ5IG11bHRpcGxlIHZpcnR1YWwgbGlua3MuKQorICovCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjI5LU1heS0yMDA4IgorCitzdHJ1Y3QgZXRoX2RldiB7CisJLyogbG9jayBpcyBoZWxkIHdoaWxlIGFjY2Vzc2luZyBwb3J0X3VzYgorCSAqIG9yIHVwZGF0aW5nIGl0cyBiYWNrbGluayBwb3J0X3VzYi0+aW9wb3J0CisJICovCisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgZ2V0aGVyCQkqcG9ydF91c2I7CisKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQ7CisKKwlzcGlubG9ja190CQlyZXFfbG9jazsJLyogZ3VhcmQge3J4LHR4fV9yZXFzICovCisJc3RydWN0IGxpc3RfaGVhZAl0eF9yZXFzLCByeF9yZXFzOworCWF0b21pY190CQl0eF9xbGVuOworCisJdW5zaWduZWQJCWhlYWRlcl9sZW47CisJc3RydWN0IHNrX2J1ZmYJCSooKndyYXApKHN0cnVjdCBza19idWZmICpza2IpOworCWludAkJCSgqdW53cmFwKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCisJdW5zaWduZWQgbG9uZwkJdG9kbzsKKyNkZWZpbmUJV09SS19SWF9NRU1PUlkJCTAKKworCWJvb2wJCQl6bHA7CisJdTgJCQlob3N0X21hY1tFVEhfQUxFTl07Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFJYX0VYVFJBCTIwCS8qIGJ5dGVzIGd1YXJkaW5nIGFnYWluc3Qgcnggb3ZlcmZsb3dzICovCisKKyNkZWZpbmUgREVGQVVMVF9RTEVOCTIJLyogZG91YmxlIGJ1ZmZlcmluZyBieSBkZWZhdWx0ICovCisKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCitzdGF0aWMgdW5zaWduZWQgcW11bHQgPSA1OworbW9kdWxlX3BhcmFtKHFtdWx0LCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhxbXVsdCwgInF1ZXVlIGxlbmd0aCBtdWx0aXBsaWVyIGF0IGhpZ2ggc3BlZWQiKTsKKworI2Vsc2UJLyogZnVsbCBzcGVlZCAobG93IHNwZWVkIGRvZXNuJ3QgZG8gYnVsaykgKi8KKyNkZWZpbmUgcW11bHQJCTEKKyNlbmRpZgorCisvKiBmb3IgZHVhbC1zcGVlZCBoYXJkd2FyZSwgdXNlIGRlZXBlciBxdWV1ZXMgYXQgaGlnaHNwZWVkICovCitzdGF0aWMgaW5saW5lIGludCBxbGVuKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoZ2FkZ2V0KSAmJiBnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQlyZXR1cm4gcW11bHQgKiBERUZBVUxUX1FMRU47CisJZWxzZQorCQlyZXR1cm4gREVGQVVMVF9RTEVOOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBSRVZJU0lUIHRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRoYW4gaGF2aW5nIHR3byBzZXRzCisgKiBvZiBkZWJ1ZyBjYWxscyAuLi4KKyAqLworCisjdW5kZWYgREJHCisjdW5kZWYgVkRCRworI3VuZGVmIEVSUk9SCisjdW5kZWYgV0FSTgorI3VuZGVmIElORk8KKworI2RlZmluZSB4cHJpbnRrKGQsIGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsobGV2ZWwgIiVzOiAiIGZtdCAsIChkKS0+bmV0LT5uYW1lICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjdW5kZWYgREVCVUcKKyNkZWZpbmUgREJHKGRldiwgZm10LCBhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhkZXYsIGZtdCwgYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRV9ERUJVRworI2RlZmluZSBWREJHCURCRworI2Vsc2UKKyNkZWZpbmUgVkRCRyhkZXYsIGZtdCwgYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjZGVmaW5lIEVSUk9SKGRldiwgZm10LCBhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0VSUiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIFdBUk4oZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElORk8oZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZ3MpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIE5FVFdPUksgRFJJVkVSIEhPT0tVUCAodG8gdGhlIGxheWVyIGFib3ZlIHRoaXMgZHJpdmVyKSAqLworCitzdGF0aWMgaW50IGV0aF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlzdGF0dXMgPSAwOworCisJLyogZG9uJ3QgY2hhbmdlIE1UVSBvbiAibGl2ZSIgbGluayAocGVlciB3b24ndCBrbm93KSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5wb3J0X3VzYikKKwkJc3RhdHVzID0gLUVCVVNZOworCWVsc2UgaWYgKG5ld19tdHUgPD0gRVRIX0hMRU4gfHwgbmV3X210dSA+IEVUSF9GUkFNRV9MRU4pCisJCXN0YXR1cyA9IC1FUkFOR0U7CisJZWxzZQorCQluZXQtPm10dSA9IG5ld19tdHU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBldGhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqcCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCXN0cmxjcHkocC0+ZHJpdmVyLCAiZ19ldGhlciIsIHNpemVvZiBwLT5kcml2ZXIpOworCXN0cmxjcHkocC0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZiBwLT52ZXJzaW9uKTsKKwlzdHJsY3B5KHAtPmZ3X3ZlcnNpb24sIGRldi0+Z2FkZ2V0LT5uYW1lLCBzaXplb2YgcC0+ZndfdmVyc2lvbik7CisJc3RybGNweShwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+Z2FkZ2V0LT5kZXYpLCBzaXplb2YgcC0+YnVzX2luZm8pOworfQorCitzdGF0aWMgdTMyIGV0aF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXJldHVybiBkZXYtPmdhZGdldC0+c3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV047Cit9CisKKy8qIFJFVklTSVQgY2FuIGFsc28gc3VwcG9ydDoKKyAqICAgLSBXT0wgKGJ5IHRyYWNraW5nIHN1c3BlbmRzIGFuZCBpc3N1aW5nIHJlbW90ZSB3YWtldXApCisgKiAgIC0gbXNnbGV2ZWwgKGltcGxpZXMgdXBkYXRlZCBtZXNzYWdpbmcpCisgKiAgIC0gLi4uIHByb2JhYmx5IG1vcmUgZXRodG9vbCBvcHMKKyAqLworCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBldGhfZ2V0X2RydmluZm8sCisJLmdldF9saW5rID0gZXRoX2dldF9saW5rCit9OworCitzdGF0aWMgdm9pZCBkZWZlcl9rZXZlbnQoc3RydWN0IGV0aF9kZXYgKmRldiwgaW50IGZsYWcpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoZmxhZywgJmRldi0+dG9kbykpCisJCXJldHVybjsKKwlpZiAoIXNjaGVkdWxlX3dvcmsoJmRldi0+d29yaykpCisJCUVSUk9SKGRldiwgImtldmVudCAlZCBtYXkgaGF2ZSBiZWVuIGRyb3BwZWRcbiIsIGZsYWcpOworCWVsc2UKKwkJREJHKGRldiwgImtldmVudCAlZCBzY2hlZHVsZWRcbiIsIGZsYWcpOworfQorCitzdGF0aWMgdm9pZCByeF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOworCitzdGF0aWMgaW50CityeF9zdWJtaXQoc3RydWN0IGV0aF9kZXYgKmRldiwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsIGdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOworCWludAkJcmV0dmFsID0gLUVOT01FTTsKKwlzaXplX3QJCXNpemUgPSAwOworCXN0cnVjdCB1c2JfZXAJKm91dDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWlmIChkZXYtPnBvcnRfdXNiKQorCQlvdXQgPSBkZXYtPnBvcnRfdXNiLT5vdXRfZXA7CisJZWxzZQorCQlvdXQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJaWYgKCFvdXQpCisJCXJldHVybiAtRU5PVENPTk47CisKKworCS8qIFBhZGRpbmcgdXAgdG8gUlhfRVhUUkEgaGFuZGxlcyBtaW5vciBkaXNhZ3JlZW1lbnRzIHdpdGggaG9zdC4KKwkgKiBOb3JtYWxseSB3ZSB1c2UgdGhlIFVTQiAidGVybWluYXRlIG9uIHNob3J0IHJlYWQiIGNvbnZlbnRpb247CisJICogc28gYWxsb3cgdXAgdG8gKE4qbWF4cGFja2V0KSwgc2luY2UgdGhhdCBtZW1vcnkgaXMgbm9ybWFsbHkKKwkgKiBhbHJlYWR5IGFsbG9jYXRlZC4gIFNvbWUgaGFyZHdhcmUgZG9lc24ndCBkZWFsIHdlbGwgd2l0aCBzaG9ydAorCSAqIHJlYWRzIChlLmcuIERNQSBtdXN0IGJlIE4qbWF4cGFja2V0KSwgc28gZm9yIG5vdyBkb24ndCB0cmltIGEKKwkgKiBieXRlIG9mZiB0aGUgZW5kICh0byBmb3JjZSBoYXJkd2FyZSBlcnJvcnMgb24gb3ZlcmZsb3cpLgorCSAqCisJICogUk5ESVMgdXNlcyBpbnRlcm5hbCBmcmFtaW5nLCBhbmQgZXhwbGljaXRseSBhbGxvd3Mgc2VuZGVycyB0bworCSAqIHBhZCB0byBlbmQtb2YtcGFja2V0LiAgVGhhdCdzIHBvdGVudGlhbGx5IG5pY2UgZm9yIHNwZWVkLCBidXQKKwkgKiBtZWFucyByZWNlaXZlcnMgY2FuJ3QgcmVjb3ZlciBsb3N0IHN5bmNoIG9uIHRoZWlyIG93biAoYmVjYXVzZQorCSAqIG5ldyBwYWNrZXRzIGRvbid0IG9ubHkgc3RhcnQgYWZ0ZXIgYSBzaG9ydCBSWCkuCisJICovCisJc2l6ZSArPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBkZXYtPm5ldC0+bXR1ICsgUlhfRVhUUkE7CisJc2l6ZSArPSBkZXYtPnBvcnRfdXNiLT5oZWFkZXJfbGVuOworCXNpemUgKz0gb3V0LT5tYXhwYWNrZXQgLSAxOworCXNpemUgLT0gc2l6ZSAlIG91dC0+bWF4cGFja2V0OworCisJc2tiID0gYWxsb2Nfc2tiKHNpemUgKyBORVRfSVBfQUxJR04sIGdmcF9mbGFncyk7CisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCURCRyhkZXYsICJubyByeCBza2JcbiIpOworCQlnb3RvIGVub21lbTsKKwl9CisKKwkvKiBTb21lIHBsYXRmb3JtcyBwZXJmb3JtIGJldHRlciB3aGVuIElQIHBhY2tldHMgYXJlIGFsaWduZWQsCisJICogYnV0IG9uIGF0IGxlYXN0IG9uZSwgY2hlY2tzdW1taW5nIGZhaWxzIG90aGVyd2lzZS4gIE5vdGU6CisJICogUk5ESVMgaGVhZGVycyBpbnZvbHZlIHZhcmlhYmxlIG51bWJlcnMgb2YgTEUzMiB2YWx1ZXMuCisJICovCisJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCisJcmVxLT5idWYgPSBza2ItPmRhdGE7CisJcmVxLT5sZW5ndGggPSBzaXplOworCXJlcS0+Y29tcGxldGUgPSByeF9jb21wbGV0ZTsKKwlyZXEtPmNvbnRleHQgPSBza2I7CisKKwlyZXR2YWwgPSB1c2JfZXBfcXVldWUob3V0LCByZXEsIGdmcF9mbGFncyk7CisJaWYgKHJldHZhbCA9PSAtRU5PTUVNKQorZW5vbWVtOgorCQlkZWZlcl9rZXZlbnQoZGV2LCBXT1JLX1JYX01FTU9SWSk7CisJaWYgKHJldHZhbCkgeworCQlEQkcoZGV2LCAicnggc3VibWl0IC0tPiAlZFxuIiwgcmV0dmFsKTsKKwkJaWYgKHNrYikKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZkZXYtPnJ4X3JlcXMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHJ4X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiID0gcmVxLT5jb250ZXh0OworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisJaW50CQlzdGF0dXMgPSByZXEtPnN0YXR1czsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisKKwkvKiBub3JtYWwgY29tcGxldGlvbiAqLworCWNhc2UgMDoKKwkJc2tiX3B1dChza2IsIHJlcS0+YWN0dWFsKTsKKwkJaWYgKGRldi0+dW53cmFwKQorCQkJc3RhdHVzID0gZGV2LT51bndyYXAoc2tiKTsKKwkJaWYgKHN0YXR1cyA8IDAKKwkJCQl8fCBFVEhfSExFTiA+IHNrYi0+bGVuCisJCQkJfHwgc2tiLT5sZW4gPiBFVEhfRlJBTUVfTEVOKSB7CisJCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPm5ldC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJREJHKGRldiwgInJ4IGxlbmd0aCAlZFxuIiwgc2tiLT5sZW4pOworCQkJYnJlYWs7CisJCX0KKworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtPm5ldCk7CisJCWRldi0+bmV0LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+bmV0LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKworCQkvKiBubyBidWZmZXIgY29waWVzIG5lZWRlZCwgdW5sZXNzIGhhcmR3YXJlIGNhbid0CisJCSAqIHVzZSBza2IgYnVmZmVycy4KKwkJICovCisJCXN0YXR1cyA9IG5ldGlmX3J4KHNrYik7CisJCXNrYiA9IE5VTEw7CisJCWJyZWFrOworCisJLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLworCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiB1bmxpbmsgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkaXNjb25uZWN0IGV0YyAqLworCQlWREJHKGRldiwgInJ4IHNodXRkb3duLCBjb2RlICVkXG4iLCBzdGF0dXMpOworCQlnb3RvIHF1aWVzY2U7CisKKwkvKiBmb3IgaGFyZHdhcmUgYXV0b21hZ2ljIChzdWNoIGFzIHB4YSkgKi8KKwljYXNlIC1FQ09OTkFCT1JURUQ6CQkvKiBlbmRwb2ludCByZXNldCAqLworCQlEQkcoZGV2LCAicnggJXMgcmVzZXRcbiIsIGVwLT5uYW1lKTsKKwkJZGVmZXJfa2V2ZW50KGRldiwgV09SS19SWF9NRU1PUlkpOworcXVpZXNjZToKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJZ290byBjbGVhbjsKKworCS8qIGRhdGEgb3ZlcnJ1biAqLworCWNhc2UgLUVPVkVSRkxPVzoKKwkJZGV2LT5uZXQtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCS8qIEZBTExUSFJPVUdIICovCisKKwlkZWZhdWx0OgorCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CisJCURCRyhkZXYsICJyeCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJCWJyZWFrOworCX0KKworCWlmIChza2IpCisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldi0+bmV0KSkgeworY2xlYW46CisJCXNwaW5fbG9jaygmZGV2LT5yZXFfbG9jayk7CisJCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZkZXYtPnJ4X3JlcXMpOworCQlzcGluX3VubG9jaygmZGV2LT5yZXFfbG9jayk7CisJCXJlcSA9IE5VTEw7CisJfQorCWlmIChyZXEpCisJCXJ4X3N1Ym1pdChkZXYsIHJlcSwgR0ZQX0FUT01JQyk7Cit9CisKK3N0YXRpYyBpbnQgcHJlYWxsb2Moc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIG4pCit7CisJdW5zaWduZWQJCWk7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisKKwlpZiAoIW4pCisJCXJldHVybiAtRU5PTUVNOworCisJLyogcXVldWUvcmVjeWNsZSB1cCB0byBOIHJlcXVlc3RzICovCisJaSA9IG47CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsIGxpc3QsIGxpc3QpIHsKKwkJaWYgKGktLSA9PSAwKQorCQkJZ290byBleHRyYTsKKwl9CisJd2hpbGUgKGktLSkgeworCQlyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcCwgR0ZQX0FUT01JQyk7CisJCWlmICghcmVxKQorCQkJcmV0dXJuIGxpc3RfZW1wdHkobGlzdCkgPyAtRU5PTUVNIDogMDsKKwkJbGlzdF9hZGQoJnJlcS0+bGlzdCwgbGlzdCk7CisJfQorCXJldHVybiAwOworCitleHRyYToKKwkvKiBmcmVlIGV4dHJhcyAqLworCWZvciAoOzspIHsKKwkJc3RydWN0IGxpc3RfaGVhZAkqbmV4dDsKKworCQluZXh0ID0gcmVxLT5saXN0Lm5leHQ7CisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGVwLCByZXEpOworCisJCWlmIChuZXh0ID09IGxpc3QpCisJCQlicmVhazsKKworCQlyZXEgPSBjb250YWluZXJfb2YobmV4dCwgc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfcmVxdWVzdHMoc3RydWN0IGV0aF9kZXYgKmRldiwgc3RydWN0IGdldGhlciAqbGluaywgdW5zaWduZWQgbikKK3sKKwlpbnQJc3RhdHVzOworCisJc3Bpbl9sb2NrKCZkZXYtPnJlcV9sb2NrKTsKKwlzdGF0dXMgPSBwcmVhbGxvYygmZGV2LT50eF9yZXFzLCBsaW5rLT5pbl9lcCwgbik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlzdGF0dXMgPSBwcmVhbGxvYygmZGV2LT5yeF9yZXFzLCBsaW5rLT5vdXRfZXAsIG4pOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWw7CisJZ290byBkb25lOworZmFpbDoKKwlEQkcoZGV2LCAiY2FuJ3QgYWxsb2MgcmVxdWVzdHNcbiIpOworZG9uZToKKwlzcGluX3VubG9jaygmZGV2LT5yZXFfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgcnhfZmlsbChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwkvKiBmaWxsIHVudXNlZCByeHEgc2xvdHMgd2l0aCBzb21lIHNrYiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXYtPnJ4X3JlcXMpKSB7CisJCXJlcSA9IGNvbnRhaW5lcl9vZihkZXYtPnJ4X3JlcXMubmV4dCwKKwkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZyZXEtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CisKKwkJaWYgKHJ4X3N1Ym1pdChkZXYsIHJlcSwgZ2ZwX2ZsYWdzKSA8IDApIHsKKwkJCWRlZmVyX2tldmVudChkZXYsIFdPUktfUlhfTUVNT1JZKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cmVxX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZXRoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGV0aF9kZXYsIHdvcmspOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXT1JLX1JYX01FTU9SWSwgJmRldi0+dG9kbykpIHsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2LT5uZXQpKQorCQkJcnhfZmlsbChkZXYsIEdGUF9LRVJORUwpOworCX0KKworCWlmIChkZXYtPnRvZG8pCisJCURCRyhkZXYsICJ3b3JrIGRvbmUsIGZsYWdzID0gMHglbHhcbiIsIGRldi0+dG9kbyk7Cit9CisKK3N0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiID0gcmVxLT5jb250ZXh0OworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwlzd2l0Y2ggKHJlcS0+c3RhdHVzKSB7CisJZGVmYXVsdDoKKwkJZGV2LT5uZXQtPnN0YXRzLnR4X2Vycm9ycysrOworCQlWREJHKGRldiwgInR4IGVyciAlZFxuIiwgcmVxLT5zdGF0dXMpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiB1bmxpbmsgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkaXNjb25uZWN0IGV0YyAqLworCQlicmVhazsKKwljYXNlIDA6CisJCWRldi0+bmV0LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwl9CisJZGV2LT5uZXQtPnN0YXRzLnR4X3BhY2tldHMrKzsKKworCXNwaW5fbG9jaygmZGV2LT5yZXFfbG9jayk7CisJbGlzdF9hZGQoJnJlcS0+bGlzdCwgJmRldi0+dHhfcmVxcyk7CisJc3Bpbl91bmxvY2soJmRldi0+cmVxX2xvY2spOworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKKwlhdG9taWNfZGVjKCZkZXYtPnR4X3FsZW4pOworCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldi0+bmV0KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYtPm5ldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3Byb21pc2ModTE2IGNkY19maWx0ZXIpCit7CisJcmV0dXJuIGNkY19maWx0ZXIgJiBVU0JfQ0RDX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTOworfQorCitzdGF0aWMgaW50IGV0aF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCWludAkJCWxlbmd0aCA9IHNrYi0+bGVuOworCWludAkJCXJldHZhbDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IHVzYl9lcAkJKmluOworCXUxNgkJCWNkY19maWx0ZXI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+cG9ydF91c2IpIHsKKwkJaW4gPSBkZXYtPnBvcnRfdXNiLT5pbl9lcDsKKwkJY2RjX2ZpbHRlciA9IGRldi0+cG9ydF91c2ItPmNkY19maWx0ZXI7CisJfSBlbHNlIHsKKwkJaW4gPSBOVUxMOworCQljZGNfZmlsdGVyID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWluKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiAwOworCX0KKworCS8qIGFwcGx5IG91dGdvaW5nIENEQyBvciBSTkRJUyBmaWx0ZXJzICovCisJaWYgKCFpc19wcm9taXNjKGNkY19maWx0ZXIpKSB7CisJCXU4CQkqZGVzdCA9IHNrYi0+ZGF0YTsKKworCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZGVzdCkpIHsKKwkJCXUxNgl0eXBlOworCisJCQkvKiBpZ25vcmVzIFVTQl9DRENfUEFDS0VUX1RZUEVfTVVMVElDQVNUIGFuZCBob3N0CisJCQkgKiBTRVRfRVRIRVJORVRfTVVMVElDQVNUX0ZJTFRFUlMgcmVxdWVzdHMKKwkJCSAqLworCQkJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGRlc3QpKQorCQkJCXR5cGUgPSBVU0JfQ0RDX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVDsKKwkJCWVsc2UKKwkJCQl0eXBlID0gVVNCX0NEQ19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOworCQkJaWYgKCEoY2RjX2ZpbHRlciAmIHR5cGUpKSB7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQkvKiBpZ25vcmVzIFVTQl9DRENfUEFDS0VUX1RZUEVfRElSRUNURUQgKi8KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yZXFfbG9jaywgZmxhZ3MpOworCS8qCisJICogdGhpcyBmcmVlbGlzdCBjYW4gYmUgZW1wdHkgaWYgYW4gaW50ZXJydXB0IHRyaWdnZXJlZCBkaXNjb25uZWN0KCkKKwkgKiBhbmQgcmVjb25maWd1cmVkIHRoZSBnYWRnZXQgKHNodXR0aW5nIGRvd24gdGhpcyBxdWV1ZSkgYWZ0ZXIgdGhlCisJICogbmV0d29yayBzdGFjayBkZWNpZGVkIHRvIHhtaXQgYnV0IGJlZm9yZSB3ZSBnb3QgdGhlIHNwaW5sb2NrLgorCSAqLworCWlmIChsaXN0X2VtcHR5KCZkZXYtPnR4X3JlcXMpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cmVxX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmVxID0gY29udGFpbmVyX29mKGRldi0+dHhfcmVxcy5uZXh0LCBzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOworCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCisJLyogdGVtcG9yYXJpbHkgc3RvcCBUWCBxdWV1ZSB3aGVuIHRoZSBmcmVlbGlzdCBlbXB0aWVzICovCisJaWYgKGxpc3RfZW1wdHkoJmRldi0+dHhfcmVxcykpCisJCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CisKKwkvKiBubyBidWZmZXIgY29waWVzIG5lZWRlZCwgdW5sZXNzIHRoZSBuZXR3b3JrIHN0YWNrIGRpZCBpdAorCSAqIG9yIHRoZSBoYXJkd2FyZSBjYW4ndCB1c2Ugc2tiIGJ1ZmZlcnMuCisJICogb3IgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIGZvciBleHRyYSBoZWFkZXJzIHdlIG5lZWQKKwkgKi8KKwlpZiAoZGV2LT53cmFwKSB7CisJCXN0cnVjdCBza19idWZmCSpza2JfbmV3OworCisJCXNrYl9uZXcgPSBkZXYtPndyYXAoc2tiKTsKKwkJaWYgKCFza2JfbmV3KQorCQkJZ290byBkcm9wOworCisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXNrYiA9IHNrYl9uZXc7CisJCWxlbmd0aCA9IHNrYi0+bGVuOworCX0KKwlyZXEtPmJ1ZiA9IHNrYi0+ZGF0YTsKKwlyZXEtPmNvbnRleHQgPSBza2I7CisJcmVxLT5jb21wbGV0ZSA9IHR4X2NvbXBsZXRlOworCisJLyogdXNlIHpscCBmcmFtaW5nIG9uIHR4IGZvciBzdHJpY3QgQ0RDLUV0aGVyIGNvbmZvcm1hbmNlLAorCSAqIHRob3VnaCBhbnkgcm9idXN0IG5ldHdvcmsgcnggcGF0aCBpZ25vcmVzIGV4dHJhIHBhZGRpbmcuCisJICogYW5kIHNvbWUgaGFyZHdhcmUgZG9lc24ndCBsaWtlIHRvIHdyaXRlIHpscHMuCisJICovCisJcmVxLT56ZXJvID0gMTsKKwlpZiAoIWRldi0+emxwICYmIChsZW5ndGggJSBpbi0+bWF4cGFja2V0KSA9PSAwKQorCQlsZW5ndGgrKzsKKworCXJlcS0+bGVuZ3RoID0gbGVuZ3RoOworCisJLyogdGhyb3R0bGUgaGlnaHNwZWVkIElSUSByYXRlIGJhY2sgc2xpZ2h0bHkgKi8KKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChkZXYtPmdhZGdldCkpCisJCXJlcS0+bm9faW50ZXJydXB0ID0gKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCT8gKChhdG9taWNfcmVhZCgmZGV2LT50eF9xbGVuKSAlIHFtdWx0KSAhPSAwKQorCQkJOiAwOworCisJcmV0dmFsID0gdXNiX2VwX3F1ZXVlKGluLCByZXEsIEdGUF9BVE9NSUMpOworCXN3aXRjaCAocmV0dmFsKSB7CisJZGVmYXVsdDoKKwkJREJHKGRldiwgInR4IHF1ZXVlIGVyciAlZFxuIiwgcmV0dmFsKTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJYXRvbWljX2luYygmZGV2LT50eF9xbGVuKTsKKwl9CisKKwlpZiAocmV0dmFsKSB7Citkcm9wOgorCQlkZXYtPm5ldC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yZXFfbG9jaywgZmxhZ3MpOworCQlpZiAobGlzdF9lbXB0eSgmZGV2LT50eF9yZXFzKSkKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldCk7CisJCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZkZXYtPnR4X3JlcXMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBldGhfc3RhcnQoc3RydWN0IGV0aF9kZXYgKmRldiwgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCURCRyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJLyogZmlsbCB0aGUgcnggcXVldWUgKi8KKwlyeF9maWxsKGRldiwgZ2ZwX2ZsYWdzKTsKKworCS8qIGFuZCBvcGVuIHRoZSB0eCBmbG9vZGdhdGVzICovCisJYXRvbWljX3NldCgmZGV2LT50eF9xbGVuLCAwKTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldi0+bmV0KTsKK30KKworc3RhdGljIGludCBldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXN0cnVjdCBnZXRoZXIJKmxpbms7CisKKwlEQkcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtPm5ldCkpCisJCWV0aF9zdGFydChkZXYsIEdGUF9LRVJORUwpOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5sb2NrKTsKKwlsaW5rID0gZGV2LT5wb3J0X3VzYjsKKwlpZiAobGluayAmJiBsaW5rLT5vcGVuKQorCQlsaW5rLT5vcGVuKGxpbmspOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV0aF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGV0aF9kZXYJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCVZEQkcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CisKKwlEQkcoZGV2LCAic3RvcCBzdGF0czogcngvdHggJWxkLyVsZCwgZXJycyAlbGQvJWxkXG4iLAorCQlkZXYtPm5ldC0+c3RhdHMucnhfcGFja2V0cywgZGV2LT5uZXQtPnN0YXRzLnR4X3BhY2tldHMsCisJCWRldi0+bmV0LT5zdGF0cy5yeF9lcnJvcnMsIGRldi0+bmV0LT5zdGF0cy50eF9lcnJvcnMKKwkJKTsKKworCS8qIGVuc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgcmVxdWVzdHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+cG9ydF91c2IpIHsKKwkJc3RydWN0IGdldGhlcgkqbGluayA9IGRldi0+cG9ydF91c2I7CisKKwkJaWYgKGxpbmstPmNsb3NlKQorCQkJbGluay0+Y2xvc2UobGluayk7CisKKwkJLyogTk9URTogIHdlIGhhdmUgbm8gYWJvcnQtcXVldWUgcHJpbWl0aXZlIHdlIGNvdWxkIHVzZQorCQkgKiB0byBjYW5jZWwgYWxsIHBlbmRpbmcgSS9PLiAgSW5zdGVhZCwgd2UgZGlzYWJsZSB0aGVuCisJCSAqIHJlZW5hYmxlIHRoZSBlbmRwb2ludHMgLi4uIHRoaXMgaWRpb20gbWF5IGxlYXZlIHRvZ2dsZQorCQkgKiB3cm9uZywgYnV0IHRoYXQncyBhIHNlbGYtY29ycmVjdGluZyBlcnJvci4KKwkJICoKKwkJICogUkVWSVNJVDogIHdlICpDT1VMRCoganVzdCBsZXQgdGhlIHRyYW5zZmVycyBjb21wbGV0ZSBhdAorCQkgKiB0aGVpciBvd24gcGFjZTsgdGhlIG5ldHdvcmsgc3RhY2sgY2FuIGhhbmRsZSBvbGQgcGFja2V0cy4KKwkJICogRm9yIHRoZSBtb21lbnQgd2UgbGVhdmUgdGhpcyBoZXJlLCBzaW5jZSBpdCB3b3Jrcy4KKwkJICovCisJCXVzYl9lcF9kaXNhYmxlKGxpbmstPmluX2VwKTsKKwkJdXNiX2VwX2Rpc2FibGUobGluay0+b3V0X2VwKTsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0KSkgeworCQkJREJHKGRldiwgImhvc3Qgc3RpbGwgdXNpbmcgaW4vb3V0IGVuZHBvaW50c1xuIik7CisJCQl1c2JfZXBfZW5hYmxlKGxpbmstPmluX2VwLCBsaW5rLT5pbik7CisJCQl1c2JfZXBfZW5hYmxlKGxpbmstPm91dF9lcCwgbGluay0+b3V0KTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBpbml0aWFsIHZhbHVlLCBjaGFuZ2VkIGJ5ICJpZmNvbmZpZyB1c2IwIGh3IGV0aGVyIHh4Onh4Onh4Onh4Onh4Onh4IiAqLworc3RhdGljIGNoYXIgKmRldl9hZGRyOworbW9kdWxlX3BhcmFtKGRldl9hZGRyLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGRldl9hZGRyLCAiRGV2aWNlIEV0aGVybmV0IEFkZHJlc3MiKTsKKworLyogdGhpcyBhZGRyZXNzIGlzIGludmlzaWJsZSB0byBpZmNvbmZpZyAqLworc3RhdGljIGNoYXIgKmhvc3RfYWRkcjsKK21vZHVsZV9wYXJhbShob3N0X2FkZHIsIGNoYXJwLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaG9zdF9hZGRyLCAiSG9zdCBFdGhlcm5ldCBBZGRyZXNzIik7CisKKworc3RhdGljIHU4IF9faW5pdCBuaWJibGUodW5zaWduZWQgY2hhciBjKQoreworCWlmIChpc2RpZ2l0KGMpKQorCQlyZXR1cm4gYyAtICcwJzsKKwljID0gdG91cHBlcihjKTsKKwlpZiAoaXN4ZGlnaXQoYykpCisJCXJldHVybiAxMCArIGMgLSAnQSc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGdldF9ldGhlcl9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdTggKmRldl9hZGRyKQoreworCWlmIChzdHIpIHsKKwkJdW5zaWduZWQJaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCQl1bnNpZ25lZCBjaGFyIG51bTsKKworCQkJaWYgKCgqc3RyID09ICcuJykgfHwgKCpzdHIgPT0gJzonKSkKKwkJCQlzdHIrKzsKKwkJCW51bSA9IG5pYmJsZSgqc3RyKyspIDw8IDQ7CisJCQludW0gfD0gKG5pYmJsZSgqc3RyKyspKTsKKwkJCWRldl9hZGRyIFtpXSA9IG51bTsKKwkJfQorCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXZfYWRkcikpCisJCQlyZXR1cm4gMDsKKwl9CisJcmFuZG9tX2V0aGVyX2FkZHIoZGV2X2FkZHIpOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGV0aF9kZXYgKnRoZV9kZXY7CisKKworLyoqCisgKiBnZXRoZXJfc2V0dXAgLSBpbml0aWFsaXplIG9uZSBldGhlcm5ldC1vdmVyLXVzYiBsaW5rCisgKiBAZzogZ2FkZ2V0IHRvIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBsaW5rcworICogQGV0aGFkZHI6IE5VTEwsIG9yIGEgYnVmZmVyIGluIHdoaWNoIHRoZSBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZQorICoJaG9zdCBzaWRlIG9mIHRoZSBsaW5rIGlzIHJlY29yZGVkCisgKiBDb250ZXh0OiBtYXkgc2xlZXAKKyAqCisgKiBUaGlzIHNldHMgdXAgdGhlIHNpbmdsZSBuZXR3b3JrIGxpbmsgdGhhdCBtYXkgYmUgZXhwb3J0ZWQgYnkgYQorICogZ2FkZ2V0IGRyaXZlciB1c2luZyB0aGlzIGZyYW1ld29yay4gIFRoZSBsaW5rIGxheWVyIGFkZHJlc3NlcyBhcmUKKyAqIHNldCB1cCB1c2luZyBtb2R1bGUgcGFyYW1ldGVycy4KKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vLCBvciB6ZXJvIG9uIHN1Y2Nlc3MKKyAqLworaW50IF9faW5pdCBnZXRoZXJfc2V0dXAoc3RydWN0IHVzYl9nYWRnZXQgKmcsIHU4IGV0aGFkZHJbRVRIX0FMRU5dKQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7CisJaW50CQkJc3RhdHVzOworCisJaWYgKHRoZV9kZXYpCisJCXJldHVybiAtRUJVU1k7CisKKwluZXQgPSBhbGxvY19ldGhlcmRldihzaXplb2YgKmRldik7CisJaWYgKCFuZXQpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5yZXFfbG9jayk7CisJSU5JVF9XT1JLKCZkZXYtPndvcmssIGV0aF93b3JrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT50eF9yZXFzKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5yeF9yZXFzKTsKKworCS8qIG5ldHdvcmsgZGV2aWNlIHNldHVwICovCisJZGV2LT5uZXQgPSBuZXQ7CisJc3RyY3B5KG5ldC0+bmFtZSwgInVzYiVkIik7CisKKwlpZiAoZ2V0X2V0aGVyX2FkZHIoZGV2X2FkZHIsIG5ldC0+ZGV2X2FkZHIpKQorCQlkZXZfd2FybigmZy0+ZGV2LAorCQkJInVzaW5nIHJhbmRvbSAlcyBldGhlcm5ldCBhZGRyZXNzXG4iLCAic2VsZiIpOworCWlmIChnZXRfZXRoZXJfYWRkcihob3N0X2FkZHIsIGRldi0+aG9zdF9tYWMpKQorCQlkZXZfd2FybigmZy0+ZGV2LAorCQkJInVzaW5nIHJhbmRvbSAlcyBldGhlcm5ldCBhZGRyZXNzXG4iLCAiaG9zdCIpOworCisJaWYgKGV0aGFkZHIpCisJCW1lbWNweShldGhhZGRyLCBkZXYtPmhvc3RfbWFjLCBFVEhfQUxFTik7CisKKwluZXQtPmNoYW5nZV9tdHUgPSBldGhfY2hhbmdlX210dTsKKwluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGV0aF9zdGFydF94bWl0OworCW5ldC0+b3BlbiA9IGV0aF9vcGVuOworCW5ldC0+c3RvcCA9IGV0aF9zdG9wOworCS8qIHdhdGNoZG9nX3RpbWVvLCB0eF90aW1lb3V0IC4uLiAqLworCS8qIHNldF9tdWx0aWNhc3RfbGlzdCAqLworCVNFVF9FVEhUT09MX09QUyhuZXQsICZvcHMpOworCisJLyogdHdvIGtpbmRzIG9mIGhvc3QtaW5pdGlhdGVkIHN0YXRlIGNoYW5nZXM6CisJICogIC0gaWZmIERBVEEgdHJhbnNmZXIgaXMgYWN0aXZlLCBjYXJyaWVyIGlzICJvbiIKKwkgKiAgLSB0eCBxdWV1ZWluZyBlbmFibGVkIGlmIG9wZW4gKmFuZCogY2FycmllciBpcyAib24iCisJICovCisJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7CisKKwlkZXYtPmdhZGdldCA9IGc7CisJU0VUX05FVERFVl9ERVYobmV0LCAmZy0+ZGV2KTsKKworCXN0YXR1cyA9IHJlZ2lzdGVyX25ldGRldihuZXQpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRldl9kYmcoJmctPmRldiwgInJlZ2lzdGVyX25ldGRldiBmYWlsZWQsICVkXG4iLCBzdGF0dXMpOworCQlmcmVlX25ldGRldihuZXQpOworCX0gZWxzZSB7CisJCURFQ0xBUkVfTUFDX0JVRih0bXApOworCisJCUlORk8oZGV2LCAiTUFDICVzXG4iLCBwcmludF9tYWModG1wLCBuZXQtPmRldl9hZGRyKSk7CisJCUlORk8oZGV2LCAiSE9TVCBNQUMgJXNcbiIsIHByaW50X21hYyh0bXAsIGRldi0+aG9zdF9tYWMpKTsKKworCQl0aGVfZGV2ID0gZGV2OworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZ2V0aGVyX2NsZWFudXAgLSByZW1vdmUgRXRoZXJuZXQtb3Zlci1VU0IgZGV2aWNlCisgKiBDb250ZXh0OiBtYXkgc2xlZXAKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB0byBmcmVlIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IEBnZXRoZXJfc2V0dXAoKS4KKyAqLwordm9pZCBnZXRoZXJfY2xlYW51cCh2b2lkKQoreworCWlmICghdGhlX2RldikKKwkJcmV0dXJuOworCisJdW5yZWdpc3Rlcl9uZXRkZXYodGhlX2Rldi0+bmV0KTsKKwlmcmVlX25ldGRldih0aGVfZGV2LT5uZXQpOworCisJLyogYXNzdW1pbmcgd2UgdXNlZCBrZXZlbnRkLCBpdCBtdXN0IHF1aWVzY2UgdG9vICovCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXRoZV9kZXYgPSBOVUxMOworfQorCisKKy8qKgorICogZ2V0aGVyX2Nvbm5lY3QgLSBub3RpZnkgbmV0d29yayBsYXllciB0aGF0IFVTQiBsaW5rIGlzIGFjdGl2ZQorICogQGxpbms6IHRoZSBVU0IgbGluaywgc2V0IHVwIHdpdGggZW5kcG9pbnRzLCBkZXNjcmlwdG9ycyBtYXRjaGluZworICoJY3VycmVudCBkZXZpY2Ugc3BlZWQsIGFuZCBhbnkgZnJhbWluZyB3cmFwcGVyKHMpIHNldCB1cC4KKyAqIENvbnRleHQ6IGlycXMgYmxvY2tlZAorICoKKyAqIFRoaXMgaXMgY2FsbGVkIHRvIGFjdGl2YXRlIGVuZHBvaW50cyBhbmQgbGV0IHRoZSBuZXR3b3JrIGxheWVyIGtub3cKKyAqIHRoZSBjb25uZWN0aW9uIGlzIGFjdGl2ZSAoImNhcnJpZXIgZGV0ZWN0IikuICBJdCBtYXkgY2F1c2UgdGhlIEkvTworICogcXVldWVzIHRvIG9wZW4gYW5kIHN0YXJ0IGxldHRpbmcgbmV0d29yayBwYWNrZXRzIGZsb3csIGJ1dCB3aWxsIGluCisgKiBhbnkgY2FzZSBhY3RpdmF0ZSB0aGUgZW5kcG9pbnRzIHNvIHRoYXQgdGhleSByZXNwb25kIHByb3Blcmx5IHRvIHRoZQorICogVVNCIGhvc3QuCisgKgorICogVmVyaWZ5IG5ldF9kZXZpY2UgcG9pbnRlciByZXR1cm5lZCB1c2luZyBJU19FUlIoKS4gIElmIGl0IGRvZXNuJ3QKKyAqIGluZGljYXRlIHNvbWUgZXJyb3IgY29kZSAobmVnYXRpdmUgZXJybm8pLCBlcC0+ZHJpdmVyX2RhdGEgdmFsdWVzCisgKiBoYXZlIGJlZW4gb3ZlcndyaXR0ZW4uCisgKi8KK3N0cnVjdCBuZXRfZGV2aWNlICpnZXRoZXJfY29ubmVjdChzdHJ1Y3QgZ2V0aGVyICpsaW5rKQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gdGhlX2RldjsKKwlpbnQJCQlyZXN1bHQgPSAwOworCisJaWYgKCFkZXYpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJbGluay0+aW5fZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUobGluay0+aW5fZXAsIGxpbmstPmluKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJREJHKGRldiwgImVuYWJsZSAlcyAtLT4gJWRcbiIsCisJCQlsaW5rLT5pbl9lcC0+bmFtZSwgcmVzdWx0KTsKKwkJZ290byBmYWlsMDsKKwl9CisKKwlsaW5rLT5vdXRfZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUobGluay0+b3V0X2VwLCBsaW5rLT5vdXQpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlEQkcoZGV2LCAiZW5hYmxlICVzIC0tPiAlZFxuIiwKKwkJCWxpbmstPm91dF9lcC0+bmFtZSwgcmVzdWx0KTsKKwkJZ290byBmYWlsMTsKKwl9CisKKwlpZiAocmVzdWx0ID09IDApCisJCXJlc3VsdCA9IGFsbG9jX3JlcXVlc3RzKGRldiwgbGluaywgcWxlbihkZXYtPmdhZGdldCkpOworCisJaWYgKHJlc3VsdCA9PSAwKSB7CisJCWRldi0+emxwID0gbGluay0+aXNfemxwX29rOworCQlEQkcoZGV2LCAicWxlbiAlZFxuIiwgcWxlbihkZXYtPmdhZGdldCkpOworCisJCWRldi0+aGVhZGVyX2xlbiA9IGxpbmstPmhlYWRlcl9sZW47CisJCWRldi0+dW53cmFwID0gbGluay0+dW53cmFwOworCQlkZXYtPndyYXAgPSBsaW5rLT53cmFwOworCisJCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwkJZGV2LT5wb3J0X3VzYiA9IGxpbms7CisJCWxpbmstPmlvcG9ydCA9IGRldjsKKwkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisKKwkJbmV0aWZfY2Fycmllcl9vbihkZXYtPm5ldCk7CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldi0+bmV0KSkKKwkJCWV0aF9zdGFydChkZXYsIEdGUF9BVE9NSUMpOworCisJLyogb24gZXJyb3IsIGRpc2FibGUgYW55IGVuZHBvaW50cyAgKi8KKwl9IGVsc2UgeworCQkodm9pZCkgdXNiX2VwX2Rpc2FibGUobGluay0+b3V0X2VwKTsKK2ZhaWwxOgorCQkodm9pZCkgdXNiX2VwX2Rpc2FibGUobGluay0+aW5fZXApOworCX0KK2ZhaWwwOgorCS8qIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW51cCBvbiBlcnJvciAqLworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOworCXJldHVybiBkZXYtPm5ldDsKK30KKworLyoqCisgKiBnZXRoZXJfZGlzY29ubmVjdCAtIG5vdGlmeSBuZXR3b3JrIGxheWVyIHRoYXQgVVNCIGxpbmsgaXMgaW5hY3RpdmUKKyAqIEBsaW5rOiB0aGUgVVNCIGxpbmssIG9uIHdoaWNoIGdldGhlcl9jb25uZWN0KCkgd2FzIGNhbGxlZAorICogQ29udGV4dDogaXJxcyBibG9ja2VkCisgKgorICogVGhpcyBpcyBjYWxsZWQgdG8gZGVhY3RpdmF0ZSBlbmRwb2ludHMgYW5kIGxldCB0aGUgbmV0d29yayBsYXllciBrbm93CisgKiB0aGUgY29ubmVjdGlvbiB3ZW50IGluYWN0aXZlICgibm8gY2FycmllciIpLgorICoKKyAqIE9uIHJldHVybiwgdGhlIHN0YXRlIGlzIGFzIGlmIGdldGhlcl9jb25uZWN0KCkgaGFkIG5ldmVyIGJlZW4gY2FsbGVkLgorICogVGhlIGVuZHBvaW50cyBhcmUgaW5hY3RpdmUsIGFuZCBhY2NvcmRpbmdseSB3aXRob3V0IGFjdGl2ZSBVU0IgSS9PLgorICogUG9pbnRlcnMgdG8gZW5kcG9pbnQgZGVzY3JpcHRvcnMgYW5kIGVuZHBvaW50IHByaXZhdGUgZGF0YSBhcmUgbnVsbGVkLgorICovCit2b2lkIGdldGhlcl9kaXNjb25uZWN0KHN0cnVjdCBnZXRoZXIgKmxpbmspCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBsaW5rLT5pb3BvcnQ7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisKKwlXQVJOX09OKCFkZXYpOworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlEQkcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2LT5uZXQpOworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKKworCS8qIGRpc2FibGUgZW5kcG9pbnRzLCBmb3JjaW5nIChzeW5jaHJvbm91cykgY29tcGxldGlvbgorCSAqIG9mIGFsbCBwZW5kaW5nIGkvby4gIHRoZW4gZnJlZSB0aGUgcmVxdWVzdCBvYmplY3RzCisJICogYW5kIGZvcmdldCBhYm91dCB0aGUgZW5kcG9pbnRzLgorCSAqLworCXVzYl9lcF9kaXNhYmxlKGxpbmstPmluX2VwKTsKKwlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2LT50eF9yZXFzKSkgeworCQlyZXEgPSBjb250YWluZXJfb2YoZGV2LT50eF9yZXFzLm5leHQsCisJCQkJCXN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCisJCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKKwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChsaW5rLT5pbl9lcCwgcmVxKTsKKwkJc3Bpbl9sb2NrKCZkZXYtPnJlcV9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJmRldi0+cmVxX2xvY2spOworCWxpbmstPmluX2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJbGluay0+aW4gPSBOVUxMOworCisJdXNiX2VwX2Rpc2FibGUobGluay0+b3V0X2VwKTsKKwlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2LT5yeF9yZXFzKSkgeworCQlyZXEgPSBjb250YWluZXJfb2YoZGV2LT5yeF9yZXFzLm5leHQsCisJCQkJCXN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCisJCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKKwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChsaW5rLT5vdXRfZXAsIHJlcSk7CisJCXNwaW5fbG9jaygmZGV2LT5yZXFfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKKwlsaW5rLT5vdXRfZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlsaW5rLT5vdXQgPSBOVUxMOworCisJLyogZmluaXNoIGZvcmdldHRpbmcgYWJvdXQgdGhpcyBVU0IgbGluayBlcGlzb2RlICovCisJZGV2LT5oZWFkZXJfbGVuID0gMDsKKwlkZXYtPnVud3JhcCA9IE5VTEw7CisJZGV2LT53cmFwID0gTlVMTDsKKworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwlkZXYtPnBvcnRfdXNiID0gTlVMTDsKKwlsaW5rLT5pb3BvcnQgPSBOVUxMOworCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQxZjdhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiB1X2V0aGVyLmggLS0gaW50ZXJmYWNlIHRvIFVTQiBnYWRnZXQgImV0aGVybmV0IGxpbmsiIHV0aWxpdGllcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1LDIwMDggRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IFJvYmVydCBTY2h3ZWJlbCwgQmVuZWRpa3QgU3ByYW5nZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fVV9FVEhFUl9ICisjZGVmaW5lIF9fVV9FVEhFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9jb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CisKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworCisvKgorICogVGhpcyByZXByZXNlbnRzIHRoZSBVU0Igc2lkZSBvZiBhbiAiZXRoZXJuZXQiIGxpbmssIG1hbmFnZWQgYnkgYSBVU0IKKyAqIGZ1bmN0aW9uIHdoaWNoIHByb3ZpZGVzIGNvbnRyb2wgYW5kIChtYXliZSkgZnJhbWluZy4gIFR3byBmdW5jdGlvbnMKKyAqIGluIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBjb3VsZCBzaGFyZSB0aGUgc2FtZSBldGhlcm5ldCBsaW5rL25ldGRldiwKKyAqIHVzaW5nIGRpZmZlcmVudCBob3N0IGludGVyYWN0aW9uIG1vZGVscy4KKyAqCisgKiBUaGVyZSBpcyBhIGN1cnJlbnQgbGltaXRhdGlvbiB0aGF0IG9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgbGluayBtYXkKKyAqIGJlIHByZXNlbnQgaW4gYW55IGdpdmVuIGNvbmZpZ3VyYXRpb24uICBXaGVuIHRoYXQncyBhIHByb2JsZW0sIG5ldHdvcmsKKyAqIGxheWVyIGZhY2lsaXRpZXMgY2FuIGJlIHVzZWQgdG8gcGFja2FnZSBtdWx0aXBsZSBsb2dpY2FsIGxpbmtzIG9uIHRoaXMKKyAqIHNpbmdsZSAicGh5c2ljYWwiIG9uZS4KKyAqLworc3RydWN0IGdldGhlciB7CisJc3RydWN0IHVzYl9mdW5jdGlvbgkJZnVuYzsKKworCS8qIHVwZGF0ZWQgYnkgZ2V0aGVyX3tjb25uZWN0LGRpc2Nvbm5lY3R9ICovCisJc3RydWN0IGV0aF9kZXYJCQkqaW9wb3J0OworCisJLyogZW5kcG9pbnRzIGhhbmRsZSBmdWxsIGFuZC9vciBoaWdoIHNwZWVkcyAqLworCXN0cnVjdCB1c2JfZXAJCQkqaW5fZXA7CisJc3RydWN0IHVzYl9lcAkJCSpvdXRfZXA7CisKKwkvKiBkZXNjcmlwdG9ycyBtYXRjaCBkZXZpY2Ugc3BlZWQgYXQgZ2V0aGVyX2Nvbm5lY3QoKSB0aW1lICovCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSppbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm91dDsKKworCWJvb2wJCQkJaXNfemxwX29rOworCisJdTE2CQkJCWNkY19maWx0ZXI7CisKKwkvKiBob29rcyBmb3IgYWRkZWQgZnJhbWluZywgYXMgbmVlZGVkIGZvciBSTkRJUyBhbmQgRUVNLgorCSAqIHdlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IG11bHRpcGxlIGZyYW1lcyBwZXIgU0tCLgorCSAqLworCXUzMgkJCQloZWFkZXJfbGVuOworCXN0cnVjdCBza19idWZmCQkJKigqd3JhcCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50CQkJCSgqdW53cmFwKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCS8qIGNhbGxlZCBvbiBuZXR3b3JrIG9wZW4vY2xvc2UgKi8KKwl2b2lkCQkJCSgqb3Blbikoc3RydWN0IGdldGhlciAqKTsKKwl2b2lkCQkJCSgqY2xvc2UpKHN0cnVjdCBnZXRoZXIgKik7Cit9OworCisjZGVmaW5lCURFRkFVTFRfRklMVEVSCShVU0JfQ0RDX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCBcCisJCQl8VVNCX0NEQ19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUIFwKKwkJCXxVU0JfQ0RDX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTIFwKKwkJCXxVU0JfQ0RDX1BBQ0tFVF9UWVBFX0RJUkVDVEVEKQorCisKKy8qIG5ldGRldiBzZXR1cC90ZWFyZG93biBhcyBkaXJlY3RlZCBieSB0aGUgZ2FkZ2V0IGRyaXZlciAqLworaW50IGdldGhlcl9zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZywgdTggZXRoYWRkcltFVEhfQUxFTl0pOwordm9pZCBnZXRoZXJfY2xlYW51cCh2b2lkKTsKKworLyogY29ubmVjdC9kaXNjb25uZWN0IGlzIGhhbmRsZWQgYnkgaW5kaXZpZHVhbCBmdW5jdGlvbnMgKi8KK3N0cnVjdCBuZXRfZGV2aWNlICpnZXRoZXJfY29ubmVjdChzdHJ1Y3QgZ2V0aGVyICopOwordm9pZCBnZXRoZXJfZGlzY29ubmVjdChzdHJ1Y3QgZ2V0aGVyICopOworCisvKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IHN1cHBvcnQgQ0RDIEV0aGVybmV0IChFQ00pIC4uLiAqLworc3RhdGljIGlubGluZSBib29sIGNhbl9zdXBwb3J0X2VjbShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCWlmICghZ2FkZ2V0X3N1cHBvcnRzX2FsdHNldHRpbmdzKGdhZGdldCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFNBMTEwMCBjYW4gZG8gRUNNLCAqd2l0aG91dCogc3RhdHVzIGVuZHBvaW50IC4uLiBidXQgd2UnbGwKKwkgKiBvbmx5IHVzZSBpdCBpbiBub24tRUNNIG1vZGUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisJICogKGFuZCBzaW5jZSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBhIHN0YXR1cyBlbmRwb2ludCkKKwkgKi8KKwlpZiAoZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBFdmVyeXRoaW5nIGVsc2UgaXMgKnByZXN1bWFibHkqIGZpbmUgLi4uIGJ1dCB0aGlzIGlzIGEgYml0CisJICogY2hhbmN5LCBzbyBiZSAqKkNFUlRBSU4qKiB0aGVyZSBhcmUgbm8gaGFyZHdhcmUgaXNzdWVzIHdpdGgKKwkgKiB5b3VyIGNvbnRyb2xsZXIuICBBZGQgaXQgYWJvdmUgaWYgaXQgY2FuJ3QgaGFuZGxlIENEQy4KKwkgKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogZWFjaCBjb25maWd1cmF0aW9uIG1heSBiaW5kIG9uZSBpbnN0YW5jZSBvZiBhbiBldGhlcm5ldCBsaW5rICovCitpbnQgZ2V0aF9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IGV0aGFkZHJbRVRIX0FMRU5dKTsKK2ludCBlY21fYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBldGhhZGRyW0VUSF9BTEVOXSk7CisKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworCitpbnQgcm5kaXNfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBldGhhZGRyW0VUSF9BTEVOXSk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50CitybmRpc19iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IGV0aGFkZHJbRVRIX0FMRU5dKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fVV9FVEhFUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZjk1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYwpAQCAtMCwwICsxLDEyNDYgQEAKKy8qCisgKiB1X3NlcmlhbC5jIC0gdXRpbGl0aWVzIGZvciBVU0IgZ2FkZ2V0ICJzZXJpYWwgcG9ydCIvVFRZIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBjb2RlIGFsc28gYm9ycm93cyBmcm9tIHVzYnNlcmlhbC5jLCB3aGljaCBpcworICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEJlcmdlciAocGJlcmdlckBicmltc29uLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMCBBbCBCb3JjaGVycyAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisKKyNpbmNsdWRlICJ1X3NlcmlhbC5oIgorCisKKy8qCisgKiBUaGlzIGNvbXBvbmVudCBlbmNhcHN1bGF0ZXMgdGhlIFRUWSBsYXllciBnbHVlIG5lZWRlZCB0byBwcm92aWRlIGJhc2ljCisgKiAic2VyaWFsIHBvcnQiIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCB0aGUgVVNCIGdhZGdldCBzdGFjay4gIEVhY2ggc3VjaAorICogcG9ydCBpcyBleHBvc2VkIHRocm91Z2ggYSAvZGV2L3R0eUdTKiBub2RlLgorICoKKyAqIEFmdGVyIGluaXRpYWxpemF0aW9uIChnc2VyaWFsX3NldHVwKSwgdGhlc2UgVFRZIHBvcnQgZGV2aWNlcyBzdGF5CisgKiBhdmFpbGFibGUgdW50aWwgdGhleSBhcmUgcmVtb3ZlZCAoZ3NlcmlhbF9jbGVhbnVwKS4gIEVhY2ggb25lIG1heSBiZQorICogY29ubmVjdGVkIHRvIGEgVVNCIGZ1bmN0aW9uIChnc2VyaWFsX2Nvbm5lY3QpLCBvciBkaXNjb25uZWN0ZWQgKHdpdGgKKyAqIGdzZXJpYWxfZGlzY29ubmVjdCkgd2hlbiB0aGUgVVNCIGhvc3QgaXNzdWVzIGEgY29uZmlnIGNoYW5nZSBldmVudC4KKyAqIERhdGEgY2FuIG9ubHkgZmxvdyB3aGVuIHRoZSBwb3J0IGlzIGNvbm5lY3RlZCB0byB0aGUgaG9zdC4KKyAqCisgKiBBIGdpdmVuIFRUWSBwb3J0IGNhbiBiZSBtYWRlIGF2YWlsYWJsZSBpbiBtdWx0aXBsZSBjb25maWd1cmF0aW9ucy4KKyAqIEZvciBleGFtcGxlLCBlYWNoIG9uZSBtaWdodCBleHBvc2UgYSB0dHlHUzAgbm9kZSB3aGljaCBwcm92aWRlcyBhCisgKiBsb2dpbiBhcHBsaWNhdGlvbi4gIEluIG9uZSBjYXNlIHRoYXQgbWlnaHQgdXNlIENEQyBBQ00gaW50ZXJmYWNlIDAsCisgKiB3aGlsZSBhbm90aGVyIGNvbmZpZ3VyYXRpb24gbWlnaHQgdXNlIGludGVyZmFjZSAzIGZvciB0aGF0LiAgVGhlCisgKiB3b3JrIHRvIGhhbmRsZSB0aGF0IChpbmNsdWRpbmcgZGVzY3JpcHRvciBtYW5hZ2VtZW50KSBpcyBub3QgcGFydAorICogb2YgdGhpcyBjb21wb25lbnQuCisgKgorICogQ29uZmlndXJhdGlvbnMgbWF5IGV4cG9zZSBtb3JlIHRoYW4gb25lIFRUWSBwb3J0LiAgRm9yIGV4YW1wbGUsIGlmCisgKiB0dHlHUzAgcHJvdmlkZXMgbG9naW4gc2VydmljZSwgdGhlbiB0dHlHUzEgbWlnaHQgcHJvdmlkZSBkaWFsZXIgYWNjZXNzCisgKiBmb3IgYSB0ZWxlcGhvbmUgb3IgZmF4IGxpbmsuICBBbmQgdHR5R1MyIG1pZ2h0IGJlIHNvbWV0aGluZyB0aGF0IGp1c3QKKyAqIG5lZWRzIGEgc2ltcGxlIGJ5dGUgc3RyZWFtIGludGVyZmFjZSBmb3Igc29tZSBtZXNzYWdpbmcgcHJvdG9jb2wgdGhhdAorICogaXMgbWFuYWdlZCBpbiB1c2Vyc3BhY2UgLi4uIE9CRVgsIFBUUCwgYW5kIE1UUCBoYXZlIGJlZW4gbWVudGlvbmVkLgorICovCisKKy8qCisgKiBnc2VyaWFsIGlzIHRoZSBsaWZlY3ljbGUgaW50ZXJmYWNlLCB1c2VkIGJ5IFVTQiBmdW5jdGlvbnMKKyAqIGdzX3BvcnQgaXMgdGhlIEkvTyBuZXh1cywgdXNlZCBieSB0aGUgdHR5IGRyaXZlcgorICogdHR5X3N0cnVjdCBsaW5rcyB0byB0aGUgdHR5L2ZpbGVzeXN0ZW0gZnJhbWV3b3JrCisgKgorICogZ3NlcmlhbCA8LS0tPiBnc19wb3J0IC4uLiBsaW5rcyB3aWxsIGJlIG51bGwgd2hlbiB0aGUgVVNCIGxpbmsgaXMKKyAqIGluYWN0aXZlOyBtYW5hZ2VkIGJ5IGdzZXJpYWxfe2Nvbm5lY3QsZGlzY29ubmVjdH0oKS4KKyAqCWdzZXJpYWwtPmlvcG9ydCA9PSB1c2JfZXAtPmRyaXZlcl9kYXRhIC4uLiBnc19wb3J0CisgKglnc19wb3J0LT5wb3J0X3VzYiAuLi4gZ3NlcmlhbAorICoKKyAqIGdzX3BvcnQgPC0tLT4gdHR5X3N0cnVjdCAuLi4gbGlua3Mgd2lsbCBiZSBudWxsIHdoZW4gdGhlIFRUWSBmaWxlCisgKiBpc24ndCBvcGVuZWQ7IG1hbmFnZWQgYnkgZ3Nfb3BlbigpL2dzX2Nsb3NlKCkKKyAqCWdzZXJpYWwtPnBvcnRfdHR5IC4uLiB0dHlfc3RydWN0CisgKgl0dHlfc3RydWN0LT5kcml2ZXJfZGF0YSAuLi4gZ3NlcmlhbAorICovCisKKy8qIFJYIGFuZCBUWCBxdWV1ZXMgY2FuIGJ1ZmZlciBRVUVVRV9TSVpFIHBhY2tldHMgYmVmb3JlIHRoZXkgaGl0IHRoZQorICogbmV4dCBsYXllciBvZiBidWZmZXJpbmcuICBGb3IgVFggdGhhdCdzIGEgY2lyY3VsYXIgYnVmZmVyOyBmb3IgUlgKKyAqIGNvbnNpZGVyIGl0IGEgTk9QLiAgQSB0aGlyZCBsYXllciBpcyBwcm92aWRlZCBieSB0aGUgVFRZIGNvZGUuCisgKi8KKyNkZWZpbmUgUVVFVUVfU0laRQkJMTYKKyNkZWZpbmUgV1JJVEVfQlVGX1NJWkUJCTgxOTIJCS8qIFRYIG9ubHkgKi8KKworLyogY2lyY3VsYXIgYnVmZmVyICovCitzdHJ1Y3QgZ3NfYnVmIHsKKwl1bnNpZ25lZAkJYnVmX3NpemU7CisJY2hhcgkJCSpidWZfYnVmOworCWNoYXIJCQkqYnVmX2dldDsKKwljaGFyCQkJKmJ1Zl9wdXQ7Cit9OworCisvKgorICogVGhlIHBvcnQgc3RydWN0dXJlIGhvbGRzIGluZm8gZm9yIGVhY2ggcG9ydCwgb25lIGZvciBlYWNoIG1pbm9yIG51bWJlcgorICogKGFuZCB0aHVzIGZvciBlYWNoIC9kZXYvIG5vZGUpLgorICovCitzdHJ1Y3QgZ3NfcG9ydCB7CisJc3BpbmxvY2tfdAkJcG9ydF9sb2NrOwkvKiBndWFyZCBwb3J0XyogYWNjZXNzICovCisKKwlzdHJ1Y3QgZ3NlcmlhbAkJKnBvcnRfdXNiOworCXN0cnVjdCB0dHlfc3RydWN0CSpwb3J0X3R0eTsKKworCXVuc2lnbmVkCQlvcGVuX2NvdW50OworCWJvb2wJCQlvcGVuY2xvc2U7CS8qIG9wZW4vY2xvc2UgaW4gcHJvZ3Jlc3MgKi8KKwl1OAkJCXBvcnRfbnVtOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsJLyogd2FpdCBmb3IgbGFzdCBjbG9zZSAqLworCisJc3RydWN0IGxpc3RfaGVhZAlyZWFkX3Bvb2w7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXB1c2g7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdyaXRlX3Bvb2w7CisJc3RydWN0IGdzX2J1ZgkJcG9ydF93cml0ZV9idWY7CisJd2FpdF9xdWV1ZV9oZWFkX3QJZHJhaW5fd2FpdDsJLyogd2FpdCB3aGlsZSB3cml0ZXMgZHJhaW4gKi8KKworCS8qIFJFVklTSVQgdGhpcyBzdGF0ZSAuLi4gKi8KKwlzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyBwb3J0X2xpbmVfY29kaW5nOwkvKiA4LU4tMSBldGMgKi8KK307CisKKy8qIGluY3JlYXNlIE5fUE9SVFMgaWYgeW91IG5lZWQgbW9yZSAqLworI2RlZmluZSBOX1BPUlRTCQk0CitzdGF0aWMgc3RydWN0IHBvcnRtYXN0ZXIgeworCXN0cnVjdCBtdXRleAlsb2NrOwkJCS8qIHByb3RlY3Qgb3Blbi9jbG9zZSAqLworCXN0cnVjdCBnc19wb3J0CSpwb3J0OworfSBwb3J0c1tOX1BPUlRTXTsKK3N0YXRpYyB1bnNpZ25lZAluX3BvcnRzOworCisjZGVmaW5lIEdTX0NMT1NFX1RJTUVPVVQJCTE1CQkvKiBzZWNvbmRzICovCisKKworCisjaWZkZWYgVkVSQk9TRV9ERUJVRworI2RlZmluZSBwcl92ZGVidWcoZm10LCBhcmcuLi4pIFwKKwlwcl9kZWJ1ZyhmbXQsICMjYXJnKQorI2Vsc2UKKyNkZWZpbmUgcHJfdmRlYnVnKGZtdCwgYXJnLi4uKSBcCisJKHsgaWYgKDApIHByX2RlYnVnKGZtdCwgIyNhcmcpOyB9KQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIENpcmN1bGFyIEJ1ZmZlciAqLworCisvKgorICogZ3NfYnVmX2FsbG9jCisgKgorICogQWxsb2NhdGUgYSBjaXJjdWxhciBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBnc19idWZfYWxsb2Moc3RydWN0IGdzX2J1ZiAqZ2IsIHVuc2lnbmVkIHNpemUpCit7CisJZ2ItPmJ1Zl9idWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChnYi0+YnVmX2J1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWdiLT5idWZfc2l6ZSA9IHNpemU7CisJZ2ItPmJ1Zl9wdXQgPSBnYi0+YnVmX2J1ZjsKKwlnYi0+YnVmX2dldCA9IGdiLT5idWZfYnVmOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnc19idWZfZnJlZQorICoKKyAqIEZyZWUgdGhlIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCitzdGF0aWMgdm9pZCBnc19idWZfZnJlZShzdHJ1Y3QgZ3NfYnVmICpnYikKK3sKKwlrZnJlZShnYi0+YnVmX2J1Zik7CisJZ2ItPmJ1Zl9idWYgPSBOVUxMOworfQorCisvKgorICogZ3NfYnVmX2NsZWFyCisgKgorICogQ2xlYXIgb3V0IGFsbCBkYXRhIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIGdzX2J1Zl9jbGVhcihzdHJ1Y3QgZ3NfYnVmICpnYikKK3sKKwlnYi0+YnVmX2dldCA9IGdiLT5idWZfcHV0OworCS8qIGVxdWl2YWxlbnQgdG8gYSBnZXQgb2YgYWxsIGRhdGEgYXZhaWxhYmxlICovCit9CisKKy8qCisgKiBnc19idWZfZGF0YV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCitzdGF0aWMgdW5zaWduZWQgZ3NfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpCit7CisJcmV0dXJuIChnYi0+YnVmX3NpemUgKyBnYi0+YnVmX3B1dCAtIGdiLT5idWZfZ2V0KSAlIGdiLT5idWZfc2l6ZTsKK30KKworLyoKKyAqIGdzX2J1Zl9zcGFjZV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgY2lyY3VsYXIKKyAqIGJ1ZmZlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGdzX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgZ3NfYnVmICpnYikKK3sKKwlyZXR1cm4gKGdiLT5idWZfc2l6ZSArIGdiLT5idWZfZ2V0IC0gZ2ItPmJ1Zl9wdXQgLSAxKSAlIGdiLT5idWZfc2l6ZTsKK30KKworLyoKKyAqIGdzX2J1Zl9wdXQKKyAqCisgKiBDb3B5IGRhdGEgZGF0YSBmcm9tIGEgdXNlciBidWZmZXIgYW5kIHB1dCBpdCBpbnRvIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZAorZ3NfYnVmX3B1dChzdHJ1Y3QgZ3NfYnVmICpnYiwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsZW47CisKKwlsZW4gID0gZ3NfYnVmX3NwYWNlX2F2YWlsKGdiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gZ2ItPmJ1Zl9idWYgKyBnYi0+YnVmX3NpemUgLSBnYi0+YnVmX3B1dDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGdiLT5idWZfcHV0LCBidWYsIGxlbik7CisJCW1lbWNweShnYi0+YnVmX2J1ZiwgYnVmK2xlbiwgY291bnQgLSBsZW4pOworCQlnYi0+YnVmX3B1dCA9IGdiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGdiLT5idWZfcHV0LCBidWYsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJZ2ItPmJ1Zl9wdXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQlnYi0+YnVmX3B1dCA9IGdiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIGdzX2J1Zl9nZXQKKyAqCisgKiBHZXQgZGF0YSBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIgYW5kIGNvcHkgdG8gdGhlIGdpdmVuIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2YgZGF0YSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCitzdGF0aWMgdW5zaWduZWQKK2dzX2J1Zl9nZXQoc3RydWN0IGdzX2J1ZiAqZ2IsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY291bnQpCit7CisJdW5zaWduZWQgbGVuOworCisJbGVuID0gZ3NfYnVmX2RhdGFfYXZhaWwoZ2IpOworCWlmIChjb3VudCA+IGxlbikKKwkJY291bnQgPSBsZW47CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBnYi0+YnVmX2J1ZiArIGdiLT5idWZfc2l6ZSAtIGdiLT5idWZfZ2V0OworCWlmIChjb3VudCA+IGxlbikgeworCQltZW1jcHkoYnVmLCBnYi0+YnVmX2dldCwgbGVuKTsKKwkJbWVtY3B5KGJ1ZitsZW4sIGdiLT5idWZfYnVmLCBjb3VudCAtIGxlbik7CisJCWdiLT5idWZfZ2V0ID0gZ2ItPmJ1Zl9idWYgKyBjb3VudCAtIGxlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoYnVmLCBnYi0+YnVmX2dldCwgY291bnQpOworCQlpZiAoY291bnQgPCBsZW4pCisJCQlnYi0+YnVmX2dldCArPSBjb3VudDsKKwkJZWxzZSAvKiBjb3VudCA9PSBsZW4gKi8KKwkJCWdiLT5idWZfZ2V0ID0gZ2ItPmJ1Zl9idWY7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBJL08gZ2x1ZSBiZXR3ZWVuIFRUWSAodXBwZXIpIGFuZCBVU0IgZnVuY3Rpb24gKGxvd2VyKSBkcml2ZXIgbGF5ZXJzICovCisKKy8qCisgKiBnc19hbGxvY19yZXEKKyAqCisgKiBBbGxvY2F0ZSBhIHVzYl9yZXF1ZXN0IGFuZCBpdHMgYnVmZmVyLiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCisgKiB1c2JfcmVxdWVzdCBvciBOVUxMIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK2dzX2FsbG9jX3JlcShzdHJ1Y3QgdXNiX2VwICplcCwgdW5zaWduZWQgbGVuLCBnZnBfdCBrbWFsbG9jX2ZsYWdzKQoreworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCisJcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIGttYWxsb2NfZmxhZ3MpOworCisJaWYgKHJlcSAhPSBOVUxMKSB7CisJCXJlcS0+bGVuZ3RoID0gbGVuOworCQlyZXEtPmJ1ZiA9IGttYWxsb2MobGVuLCBrbWFsbG9jX2ZsYWdzKTsKKwkJaWYgKHJlcS0+YnVmID09IE5VTEwpIHsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXAsIHJlcSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiByZXE7Cit9CisKKy8qCisgKiBnc19mcmVlX3JlcQorICoKKyAqIEZyZWUgYSB1c2JfcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgZ3NfZnJlZV9yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWtmcmVlKHJlcS0+YnVmKTsKKwl1c2JfZXBfZnJlZV9yZXF1ZXN0KGVwLCByZXEpOworfQorCisvKgorICogZ3Nfc2VuZF9wYWNrZXQKKyAqCisgKiBJZiB0aGVyZSBpcyBkYXRhIHRvIHNlbmQsIGEgcGFja2V0IGlzIGJ1aWx0IGluIHRoZSBnaXZlbgorICogYnVmZmVyIGFuZCB0aGUgc2l6ZSBpcyByZXR1cm5lZC4gIElmIHRoZXJlIGlzIG5vIGRhdGEgdG8KKyAqIHNlbmQsIDAgaXMgcmV0dXJuZWQuCisgKgorICogQ2FsbGVkIHdpdGggcG9ydF9sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZAorZ3Nfc2VuZF9wYWNrZXQoc3RydWN0IGdzX3BvcnQgKnBvcnQsIGNoYXIgKnBhY2tldCwgdW5zaWduZWQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsZW47CisKKwlsZW4gPSBnc19idWZfZGF0YV9hdmFpbCgmcG9ydC0+cG9ydF93cml0ZV9idWYpOworCWlmIChsZW4gPCBzaXplKQorCQlzaXplID0gbGVuOworCWlmIChzaXplICE9IDApCisJCXNpemUgPSBnc19idWZfZ2V0KCZwb3J0LT5wb3J0X3dyaXRlX2J1ZiwgcGFja2V0LCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIGdzX3N0YXJ0X3R4CisgKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyBhdmFpbGFibGUgd3JpdGUgcmVxdWVzdHMsIGNhbGxzCisgKiBnc19zZW5kX3BhY2tldCB0byBmaWxsIHRoZXNlIHBhY2tldHMgd2l0aCBkYXRhLCBhbmQKKyAqIGNvbnRpbnVlcyB1bnRpbCBlaXRoZXIgdGhlcmUgYXJlIG5vIG1vcmUgd3JpdGUgcmVxdWVzdHMKKyAqIGF2YWlsYWJsZSBvciBubyBtb3JlIGRhdGEgdG8gc2VuZC4gIFRoaXMgZnVuY3Rpb24gaXMKKyAqIHJ1biB3aGVuZXZlciBkYXRhIGFycml2ZXMgb3Igd3JpdGUgcmVxdWVzdHMgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBDb250ZXh0OiBjYWxsZXIgb3ducyBwb3J0X2xvY2s7IHBvcnRfdXNiIGlzIG5vbi1udWxsLgorICovCitzdGF0aWMgaW50IGdzX3N0YXJ0X3R4KHN0cnVjdCBnc19wb3J0ICpwb3J0KQorLyoKK19fcmVsZWFzZXMoJnBvcnQtPnBvcnRfbG9jaykKK19fYWNxdWlyZXMoJnBvcnQtPnBvcnRfbG9jaykKKyovCit7CisJc3RydWN0IGxpc3RfaGVhZAkqcG9vbCA9ICZwb3J0LT53cml0ZV9wb29sOworCXN0cnVjdCB1c2JfZXAJCSppbiA9IHBvcnQtPnBvcnRfdXNiLT5pbjsKKwlpbnQJCQlzdGF0dXMgPSAwOworCWJvb2wJCQlkb190dHlfd2FrZSA9IGZhbHNlOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KHBvb2wpKSB7CisJCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCQlpbnQJCQlsZW47CisKKwkJcmVxID0gbGlzdF9lbnRyeShwb29sLT5uZXh0LCBzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOworCQlsZW4gPSBnc19zZW5kX3BhY2tldChwb3J0LCByZXEtPmJ1ZiwgaW4tPm1heHBhY2tldCk7CisJCWlmIChsZW4gPT0gMCkgeworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5kcmFpbl93YWl0KTsKKwkJCWJyZWFrOworCQl9CisJCWRvX3R0eV93YWtlID0gdHJ1ZTsKKworCQlyZXEtPmxlbmd0aCA9IGxlbjsKKwkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CisKKyNpZmRlZiBWRVJCT1NFX0RFQlVHCisJCXByX2RlYnVnKCIlczogJXMsIGxlbj0lZCwgMHglMDJ4IDB4JTAyeCAweCUwMnggLi4uXG4iLAorCQkJCV9fZnVuY19fLCBpbi0+bmFtZSwgbGVuLCAqKCh1OCAqKXJlcS0+YnVmKSwKKwkJCQkqKCh1OCAqKXJlcS0+YnVmKzEpLCAqKCh1OCAqKXJlcS0+YnVmKzIpKTsKKyNlbmRpZgorCisJCS8qIERyb3AgbG9jayB3aGlsZSB3ZSBjYWxsIG91dCBvZiBkcml2ZXI7IGNvbXBsZXRpb25zCisJCSAqIGNvdWxkIGJlIGlzc3VlZCB3aGlsZSB3ZSBkbyBzby4gIERpc2Nvbm5lY3Rpb24gbWF5CisJCSAqIGhhcHBlbiB0b287IG1heWJlIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZSBxdWV1ZSB0aGlzIQorCQkgKgorCQkgKiBOT1RFIHRoYXQgd2UgbWF5IGtlZXAgc2VuZGluZyBkYXRhIGZvciBhIHdoaWxlIGFmdGVyCisJCSAqIHRoZSBUVFkgY2xvc2VkIChkZXYtPmlvcG9ydC0+cG9ydF90dHkgaXMgTlVMTCkuCisJCSAqLworCQlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJc3RhdHVzID0gdXNiX2VwX3F1ZXVlKGluLCByZXEsIEdGUF9BVE9NSUMpOworCQlzcGluX2xvY2soJnBvcnQtPnBvcnRfbG9jayk7CisKKwkJaWYgKHN0YXR1cykgeworCQkJcHJfZGVidWcoIiVzOiAlcyAlcyBlcnIgJWRcbiIsCisJCQkJCV9fZnVuY19fLCAicXVldWUiLCBpbi0+bmFtZSwgc3RhdHVzKTsKKwkJCWxpc3RfYWRkKCZyZXEtPmxpc3QsIHBvb2wpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBhYm9ydCBpbW1lZGlhdGVseSBhZnRlciBkaXNjb25uZWN0ICovCisJCWlmICghcG9ydC0+cG9ydF91c2IpCisJCQlicmVhazsKKwl9CisKKwlpZiAoZG9fdHR5X3dha2UgJiYgcG9ydC0+cG9ydF90dHkpCisJCXR0eV93YWtldXAocG9ydC0+cG9ydF90dHkpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGdzX3J4X3B1c2godW5zaWduZWQgbG9uZyBfcG9ydCkKK3sKKwlzdHJ1Y3QgZ3NfcG9ydAkJKnBvcnQgPSAodm9pZCAqKV9wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0CSp0dHkgPSBwb3J0LT5wb3J0X3R0eTsKKworCS8qIFdpdGggbG93X2xhdGVuY3ksIHR0eV9mbGlwX2J1ZmZlcl9wdXNoKCkgZG9lc24ndCBwdXQgaXRzCisJICogcmVhbCB3b3JrIHRocm91Z2ggYSB3b3JrcXVldWUsIHNvIHRoZSBsZGlzYyBoYXMgYSBiZXR0ZXIKKwkgKiBjaGFuY2UgdG8ga2VlcCB1cCB3aXRoIHBlYWsgVVNCIGRhdGEgcmF0ZXMuCisJICovCisJaWYgKHR0eSkgeworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+cmVhZF93YWl0KTsKKwl9Cit9CisKKy8qCisgKiBnc19yZWN2X3BhY2tldAorICoKKyAqIENhbGxlZCBmb3IgZWFjaCBVU0IgcGFja2V0IHJlY2VpdmVkLiAgUmVhZHMgdGhlIHBhY2tldAorICogaGVhZGVyIGFuZCBzdHVmZnMgdGhlIGRhdGEgaW4gdGhlIGFwcHJvcHJpYXRlIHR0eSBidWZmZXIuCisgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKgorICogQ2FsbGVkIGR1cmluZyBVU0IgY29tcGxldGlvbiByb3V0aW5lLCBvbiBpbnRlcnJ1cHQgdGltZS4KKyAqIFdpdGggcG9ydF9sb2NrLgorICovCitzdGF0aWMgaW50IGdzX3JlY3ZfcGFja2V0KHN0cnVjdCBnc19wb3J0ICpwb3J0LCBjaGFyICpwYWNrZXQsIHVuc2lnbmVkIHNpemUpCit7CisJdW5zaWduZWQJCWxlbjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OworCisJLyogSS9PIGNvbXBsZXRpb25zIGNhbiBjb250aW51ZSBmb3IgYSB3aGlsZSBhZnRlciBjbG9zZSgpLCB1bnRpbCB0aGUKKwkgKiByZXF1ZXN0IHF1ZXVlIGVtcHRpZXMuICBKdXN0IGRpc2NhcmQgYW55IGRhdGEgd2UgcmVjZWl2ZSwgdW50aWwKKwkgKiBzb21ldGhpbmcgcmVvcGVucyB0aGlzIFRUWSAuLi4gYXMgaWYgdGhlcmUgd2VyZSBubyBIVyBmbG93IGNvbnRyb2wuCisJICovCisJdHR5ID0gcG9ydC0+cG9ydF90dHk7CisJaWYgKHR0eSA9PSBOVUxMKSB7CisJCXByX3ZkZWJ1ZygiJXM6IHR0eUdTJWQsIGFmdGVyIGNsb3NlXG4iLAorCQkJCV9fZnVuY19fLCBwb3J0LT5wb3J0X251bSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWxlbiA9IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBwYWNrZXQsIHNpemUpOworCWlmIChsZW4gPiAwKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZwb3J0LT5wdXNoKTsKKwlpZiAobGVuIDwgc2l6ZSkKKwkJcHJfZGVidWcoIiVzOiB0dHlHUyVkLCBkcm9wICVkIGJ5dGVzXG4iLAorCQkJCV9fZnVuY19fLCBwb3J0LT5wb3J0X251bSwgc2l6ZSAtIGxlbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb250ZXh0OiBjYWxsZXIgb3ducyBwb3J0X2xvY2ssIGFuZCBwb3J0X3VzYiBpcyBzZXQKKyAqLworc3RhdGljIHVuc2lnbmVkIGdzX3N0YXJ0X3J4KHN0cnVjdCBnc19wb3J0ICpwb3J0KQorLyoKK19fcmVsZWFzZXMoJnBvcnQtPnBvcnRfbG9jaykKK19fYWNxdWlyZXMoJnBvcnQtPnBvcnRfbG9jaykKKyovCit7CisJc3RydWN0IGxpc3RfaGVhZAkqcG9vbCA9ICZwb3J0LT5yZWFkX3Bvb2w7CisJc3RydWN0IHVzYl9lcAkJKm91dCA9IHBvcnQtPnBvcnRfdXNiLT5vdXQ7CisJdW5zaWduZWQJCXN0YXJ0ZWQgPSAwOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KHBvb2wpKSB7CisJCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCQlpbnQJCQlzdGF0dXM7CisJCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CisKKwkJLyogbm8gbW9yZSByeCBpZiBjbG9zZWQgb3IgdGhyb3R0bGVkICovCisJCXR0eSA9IHBvcnQtPnBvcnRfdHR5OworCQlpZiAoIXR0eSB8fCB0ZXN0X2JpdChUVFlfVEhST1RUTEVELCAmdHR5LT5mbGFncykpCisJCQlicmVhazsKKworCQlyZXEgPSBsaXN0X2VudHJ5KHBvb2wtPm5leHQsIHN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCQlyZXEtPmxlbmd0aCA9IG91dC0+bWF4cGFja2V0OworCisJCS8qIGRyb3AgbG9jayB3aGlsZSB3ZSBjYWxsIG91dDsgdGhlIGNvbnRyb2xsZXIgZHJpdmVyCisJCSAqIG1heSBuZWVkIHRvIGNhbGwgdXMgYmFjayAoZS5nLiBmb3IgZGlzY29ubmVjdCkKKwkJICovCisJCXNwaW5fdW5sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCQlzdGF0dXMgPSB1c2JfZXBfcXVldWUob3V0LCByZXEsIEdGUF9BVE9NSUMpOworCQlzcGluX2xvY2soJnBvcnQtPnBvcnRfbG9jayk7CisKKwkJaWYgKHN0YXR1cykgeworCQkJcHJfZGVidWcoIiVzOiAlcyAlcyBlcnIgJWRcbiIsCisJCQkJCV9fZnVuY19fLCAicXVldWUiLCBvdXQtPm5hbWUsIHN0YXR1cyk7CisJCQlsaXN0X2FkZCgmcmVxLT5saXN0LCBwb29sKTsKKwkJCWJyZWFrOworCQl9CisJCXN0YXJ0ZWQrKzsKKworCQkvKiBhYm9ydCBpbW1lZGlhdGVseSBhZnRlciBkaXNjb25uZWN0ICovCisJCWlmICghcG9ydC0+cG9ydF91c2IpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHN0YXJ0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGdzX3JlYWRfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWludAkJc3RhdHVzOworCXN0cnVjdCBnc19wb3J0CSpwb3J0ID0gZXAtPmRyaXZlcl9kYXRhOworCisJc3Bpbl9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZwb3J0LT5yZWFkX3Bvb2wpOworCisJc3dpdGNoIChyZXEtPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KKwkJc3RhdHVzID0gZ3NfcmVjdl9wYWNrZXQocG9ydCwgcmVxLT5idWYsIHJlcS0+YWN0dWFsKTsKKwkJaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gLUVJTykKKwkJCXByX2RlYnVnKCIlczogJXMgJXMgZXJyICVkXG4iLAorCQkJCV9fZnVuY19fLCAicmVjdiIsIGVwLT5uYW1lLCBzdGF0dXMpOworCQlnc19zdGFydF9yeChwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIC1FU0hVVERPV046CisJCS8qIGRpc2Nvbm5lY3QgKi8KKwkJcHJfdmRlYnVnKCIlczogJXMgc2h1dGRvd25cbiIsIF9fZnVuY19fLCBlcC0+bmFtZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogcHJlc3VtYWJseSBhIHRyYW5zaWVudCBmYXVsdCAqLworCQlwcl93YXJuaW5nKCIlczogdW5leHBlY3RlZCAlcyBzdGF0dXMgJWRcbiIsCisJCQkJX19mdW5jX18sIGVwLT5uYW1lLCByZXEtPnN0YXR1cyk7CisJCWdzX3N0YXJ0X3J4KHBvcnQpOworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGdzX3dyaXRlX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZ3NfcG9ydAkqcG9ydCA9IGVwLT5kcml2ZXJfZGF0YTsKKworCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwlsaXN0X2FkZCgmcmVxLT5saXN0LCAmcG9ydC0+d3JpdGVfcG9vbCk7CisKKwlzd2l0Y2ggKHJlcS0+c3RhdHVzKSB7CisJZGVmYXVsdDoKKwkJLyogcHJlc3VtYWJseSBhIHRyYW5zaWVudCBmYXVsdCAqLworCQlwcl93YXJuaW5nKCIlczogdW5leHBlY3RlZCAlcyBzdGF0dXMgJWRcbiIsCisJCQkJX19mdW5jX18sIGVwLT5uYW1lLCByZXEtPnN0YXR1cyk7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgMDoKKwkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KKwkJZ3Nfc3RhcnRfdHgocG9ydCk7CisJCWJyZWFrOworCisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiBkaXNjb25uZWN0ICovCisJCXByX3ZkZWJ1ZygiJXM6ICVzIHNodXRkb3duXG4iLCBfX2Z1bmNfXywgZXAtPm5hbWUpOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZ3NfZnJlZV9yZXF1ZXN0cyhzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKworCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgeworCQlyZXEgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCQlnc19mcmVlX3JlcShlcCwgcmVxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3NfYWxsb2NfcmVxdWVzdHMoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCXZvaWQgKCpmbikoc3RydWN0IHVzYl9lcCAqLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKikpCit7CisJaW50CQkJaTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKworCS8qIFByZS1hbGxvY2F0ZSB1cCB0byBRVUVVRV9TSVpFIHRyYW5zZmVycywgYnV0IGlmIHdlIGNhbid0CisJICogZG8gcXVpdGUgdGhhdCBtYW55IHRoaXMgdGltZSwgZG9uJ3QgZmFpbCAuLi4gd2UganVzdCB3b24ndAorCSAqIGJlIGFzIHNwZWVkeSBhcyB3ZSBtaWdodCBvdGhlcndpc2UgYmUuCisJICovCisJZm9yIChpID0gMDsgaSA8IFFVRVVFX1NJWkU7IGkrKykgeworCQlyZXEgPSBnc19hbGxvY19yZXEoZXAsIGVwLT5tYXhwYWNrZXQsIEdGUF9BVE9NSUMpOworCQlpZiAoIXJlcSkKKwkJCXJldHVybiBsaXN0X2VtcHR5KGhlYWQpID8gLUVOT01FTSA6IDA7CisJCXJlcS0+Y29tcGxldGUgPSBmbjsKKwkJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCBoZWFkKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZ3Nfc3RhcnRfaW8gLSBzdGFydCBVU0IgSS9PIHN0cmVhbXMKKyAqIEBkZXY6IGVuY2Fwc3VsYXRlcyBlbmRwb2ludHMgdG8gdXNlCisgKiBDb250ZXh0OiBob2xkaW5nIHBvcnRfbG9jazsgcG9ydF90dHkgYW5kIHBvcnRfdXNiIGFyZSBub24tbnVsbAorICoKKyAqIFdlIG9ubHkgc3RhcnQgSS9PIHdoZW4gc29tZXRoaW5nIGlzIGNvbm5lY3RlZCB0byBib3RoIHNpZGVzIG9mCisgKiB0aGlzIHBvcnQuICBJZiBub3RoaW5nIGlzIGxpc3RlbmluZyBvbiB0aGUgaG9zdCBzaWRlLCB3ZSBtYXkKKyAqIGJlIHBvaW50bGVzc2x5IGZpbGxpbmcgdXAgb3VyIFRYIGJ1ZmZlcnMgYW5kIEZJRk8uCisgKi8KK3N0YXRpYyBpbnQgZ3Nfc3RhcnRfaW8oc3RydWN0IGdzX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGxpc3RfaGVhZAkqaGVhZCA9ICZwb3J0LT5yZWFkX3Bvb2w7CisJc3RydWN0IHVzYl9lcAkJKmVwID0gcG9ydC0+cG9ydF91c2ItPm91dDsKKwlpbnQJCQlzdGF0dXM7CisJdW5zaWduZWQJCXN0YXJ0ZWQ7CisKKwkvKiBBbGxvY2F0ZSBSWCBhbmQgVFggSS9PIGJ1ZmZlcnMuICBXZSBjYW4ndCBlYXNpbHkgZG8gdGhpcyBtdWNoCisJICogZWFybGllciAod2l0aCBHRlBfS0VSTkVMKSBiZWNhdXNlIHRoZSByZXF1ZXN0cyBhcmUgY291cGxlZCB0bworCSAqIGVuZHBvaW50cywgYXMgYXJlIHRoZSBwYWNrZXQgc2l6ZXMgd2UnbGwgYmUgdXNpbmcuICBEaWZmZXJlbnQKKwkgKiBjb25maWd1cmF0aW9ucyBtYXkgdXNlIGRpZmZlcmVudCBlbmRwb2ludHMgd2l0aCBhIGdpdmVuIHBvcnQ7CisJICogYW5kIGhpZ2ggc3BlZWQgdnMgZnVsbCBzcGVlZCBjaGFuZ2VzIHBhY2tldCBzaXplcyB0b28uCisJICovCisJc3RhdHVzID0gZ3NfYWxsb2NfcmVxdWVzdHMoZXAsIGhlYWQsIGdzX3JlYWRfY29tcGxldGUpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlzdGF0dXMgPSBnc19hbGxvY19yZXF1ZXN0cyhwb3J0LT5wb3J0X3VzYi0+aW4sICZwb3J0LT53cml0ZV9wb29sLAorCQkJZ3Nfd3JpdGVfY29tcGxldGUpOworCWlmIChzdGF0dXMpIHsKKwkJZ3NfZnJlZV9yZXF1ZXN0cyhlcCwgaGVhZCk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogcXVldWUgcmVhZCByZXF1ZXN0cyAqLworCXN0YXJ0ZWQgPSBnc19zdGFydF9yeChwb3J0KTsKKworCS8qIHVuYmxvY2sgYW55IHBlbmRpbmcgd3JpdGVzIGludG8gb3VyIGNpcmN1bGFyIGJ1ZmZlciAqLworCWlmIChzdGFydGVkKSB7CisJCXR0eV93YWtldXAocG9ydC0+cG9ydF90dHkpOworCX0gZWxzZSB7CisJCWdzX2ZyZWVfcmVxdWVzdHMoZXAsIGhlYWQpOworCQlnc19mcmVlX3JlcXVlc3RzKHBvcnQtPnBvcnRfdXNiLT5pbiwgJnBvcnQtPndyaXRlX3Bvb2wpOworCX0KKworCXJldHVybiBzdGFydGVkID8gMCA6IHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVFRZIERyaXZlciAqLworCisvKgorICogZ3Nfb3BlbiBzZXRzIHVwIHRoZSBsaW5rIGJldHdlZW4gYSBnc19wb3J0IGFuZCBpdHMgYXNzb2NpYXRlZCBUVFkuCisgKiBUaGF0IGxpbmsgaXMgYnJva2VuICpvbmx5KiBieSBUVFkgY2xvc2UoKSwgYW5kIGFsbCBkcml2ZXIgbWV0aG9kcworICoga25vdyB0aGF0LgorICovCitzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50CQlwb3J0X251bSA9IHR0eS0+aW5kZXg7CisJc3RydWN0IGdzX3BvcnQJKnBvcnQ7CisJaW50CQlzdGF0dXM7CisKKwlpZiAocG9ydF9udW0gPCAwIHx8IHBvcnRfbnVtID49IG5fcG9ydHMpCisJCXJldHVybiAtRU5YSU87CisKKwlkbyB7CisJCW11dGV4X2xvY2soJnBvcnRzW3BvcnRfbnVtXS5sb2NrKTsKKwkJcG9ydCA9IHBvcnRzW3BvcnRfbnVtXS5wb3J0OworCQlpZiAoIXBvcnQpCisJCQlzdGF0dXMgPSAtRU5PREVWOworCQllbHNlIHsKKwkJCXNwaW5fbG9ja19pcnEoJnBvcnQtPnBvcnRfbG9jayk7CisKKwkJCS8qIGFscmVhZHkgb3Blbj8gIEdyZWF0LiAqLworCQkJaWYgKHBvcnQtPm9wZW5fY291bnQpIHsKKwkJCQlzdGF0dXMgPSAwOworCQkJCXBvcnQtPm9wZW5fY291bnQrKzsKKworCQkJLyogY3VycmVudGx5IG9wZW5pbmcvY2xvc2luZz8gd2FpdCAuLi4gKi8KKwkJCX0gZWxzZSBpZiAocG9ydC0+b3BlbmNsb3NlKSB7CisJCQkJc3RhdHVzID0gLUVCVVNZOworCisJCQkvKiAuLi4gZWxzZSB3ZSBkbyB0aGUgd29yayAqLworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAtRUFHQUlOOworCQkJCXBvcnQtPm9wZW5jbG9zZSA9IHRydWU7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPnBvcnRfbG9jayk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwb3J0c1twb3J0X251bV0ubG9jayk7CisKKwkJc3dpdGNoIChzdGF0dXMpIHsKKwkJZGVmYXVsdDoKKwkJCS8qIGZ1bGx5IGhhbmRsZWQgKi8KKwkJCXJldHVybiBzdGF0dXM7CisJCWNhc2UgLUVBR0FJTjoKKwkJCS8qIG11c3QgZG8gdGhlIHdvcmsgKi8KKwkJCWJyZWFrOworCQljYXNlIC1FQlVTWToKKwkJCS8qIHdhaXQgZm9yIEVBR0FJTiB0YXNrIHRvIGZpbmlzaCAqLworCQkJbXNsZWVwKDEpOworCQkJLyogUkVWSVNJVCBjb3VsZCBoYXZlIGEgd2FpdGNoYW5uZWwgaGVyZSwgaWYKKwkJCSAqIGNvbmN1cnJlbnQgb3BlbiBwZXJmb3JtYW5jZSBpcyBpbXBvcnRhbnQKKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChzdGF0dXMgIT0gLUVBR0FJTik7CisKKwkvKiBEbyB0aGUgInJlYWwgb3BlbiIgKi8KKwlzcGluX2xvY2tfaXJxKCZwb3J0LT5wb3J0X2xvY2spOworCisJLyogYWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyIG9uIGZpcnN0IG9wZW4gKi8KKwlpZiAocG9ydC0+cG9ydF93cml0ZV9idWYuYnVmX2J1ZiA9PSBOVUxMKSB7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5wb3J0X2xvY2spOworCQlzdGF0dXMgPSBnc19idWZfYWxsb2MoJnBvcnQtPnBvcnRfd3JpdGVfYnVmLCBXUklURV9CVUZfU0laRSk7CisJCXNwaW5fbG9ja19pcnEoJnBvcnQtPnBvcnRfbG9jayk7CisKKwkJaWYgKHN0YXR1cykgeworCQkJcHJfZGVidWcoImdzX29wZW46IHR0eUdTJWQgKCVwLCVwKSBubyBidWZmZXJcbiIsCisJCQkJcG9ydC0+cG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCQlwb3J0LT5vcGVuY2xvc2UgPSBmYWxzZTsKKwkJCWdvdG8gZXhpdF91bmxvY2tfcG9ydDsKKwkJfQorCX0KKworCS8qIFJFVklTSVQgaWYgUkVNT1ZFRCAocG9ydHNbXS5wb3J0IE5VTEwpLCBhYm9ydCB0aGUgb3BlbgorCSAqIHRvIGxldCBybW1vZCB3b3JrIGZhc3RlciAoYnV0IHRoaXMgd2F5IGlzbid0IHdyb25nKS4KKwkgKi8KKworCS8qIFJFVklTSVQgbWF5YmUgd2FpdCBmb3IgImNhcnJpZXIgZGV0ZWN0IiAqLworCisJdHR5LT5kcml2ZXJfZGF0YSA9IHBvcnQ7CisJcG9ydC0+cG9ydF90dHkgPSB0dHk7CisKKwlwb3J0LT5vcGVuX2NvdW50ID0gMTsKKwlwb3J0LT5vcGVuY2xvc2UgPSBmYWxzZTsKKworCS8qIGxvd19sYXRlbmN5IG1lYW5zIGxkaXNjcyB3b3JrIGluIHRhc2tsZXQgY29udGV4dCwgd2l0aG91dAorCSAqIG5lZWRpbmcgYSB3b3JrcXVldWUgc2NoZWR1bGUgLi4uIGVhc2llciB0byBrZWVwIHVwLgorCSAqLworCXR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogaWYgY29ubmVjdGVkLCBzdGFydCB0aGUgSS9PIHN0cmVhbSAqLworCWlmIChwb3J0LT5wb3J0X3VzYikgeworCQlwcl9kZWJ1ZygiZ3Nfb3Blbjogc3RhcnQgdHR5R1MlZFxuIiwgcG9ydC0+cG9ydF9udW0pOworCQlnc19zdGFydF9pbyhwb3J0KTsKKworCQkvKiBSRVZJU0lUIGZvciBBQ00sIGlzc3VlICJuZXR3b3JrIGNvbm5lY3RlZCIgZXZlbnQgKi8KKwl9CisKKwlwcl9kZWJ1ZygiZ3Nfb3BlbjogdHR5R1MlZCAoJXAsJXApXG4iLCBwb3J0LT5wb3J0X251bSwgdHR5LCBmaWxlKTsKKworCXN0YXR1cyA9IDA7CisKK2V4aXRfdW5sb2NrX3BvcnQ6CisJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5wb3J0X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZ3Nfd3JpdGVzX2ZpbmlzaGVkKHN0cnVjdCBnc19wb3J0ICpwKQoreworCWludCBjb25kOworCisJLyogcmV0dXJuIHRydWUgb24gZGlzY29ubmVjdCBvciBlbXB0eSBidWZmZXIgKi8KKwlzcGluX2xvY2tfaXJxKCZwLT5wb3J0X2xvY2spOworCWNvbmQgPSAocC0+cG9ydF91c2IgPT0gTlVMTCkgfHwgIWdzX2J1Zl9kYXRhX2F2YWlsKCZwLT5wb3J0X3dyaXRlX2J1Zik7CisJc3Bpbl91bmxvY2tfaXJxKCZwLT5wb3J0X2xvY2spOworCisJcmV0dXJuIGNvbmQ7Cit9CisKK3N0YXRpYyB2b2lkIGdzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPnBvcnRfbG9jayk7CisKKwlpZiAocG9ydC0+b3Blbl9jb3VudCAhPSAxKSB7CisJCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDApCisJCQlXQVJOX09OKDEpOworCQllbHNlCisJCQktLXBvcnQtPm9wZW5fY291bnQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwcl9kZWJ1ZygiZ3NfY2xvc2U6IHR0eUdTJWQgKCVwLCVwKSAuLi5cbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHksIGZpbGUpOworCisJLyogbWFyayBwb3J0IGFzIGNsb3NpbmcgYnV0IGluIHVzZTsgd2UgY2FuIGRyb3AgcG9ydCBsb2NrCisJICogYW5kIHNsZWVwIGlmIG5lY2Vzc2FyeQorCSAqLworCXBvcnQtPm9wZW5jbG9zZSA9IHRydWU7CisJcG9ydC0+b3Blbl9jb3VudCA9IDA7CisKKwlpZiAocG9ydC0+cG9ydF91c2IpCisJCS8qIFJFVklTSVQgZm9yIEFDTSwgaXNzdWUgIm5ldHdvcmsgZGlzY29ubmVjdGVkIiBldmVudCAqLzsKKworCS8qIHdhaXQgZm9yIGNpcmN1bGFyIHdyaXRlIGJ1ZmZlciB0byBkcmFpbiwgZGlzY29ubmVjdCwgb3IgYXQKKwkgKiBtb3N0IEdTX0NMT1NFX1RJTUVPVVQgc2Vjb25kczsgdGhlbiBkaXNjYXJkIHRoZSByZXN0CisJICovCisJaWYgKGdzX2J1Zl9kYXRhX2F2YWlsKCZwb3J0LT5wb3J0X3dyaXRlX2J1ZikgPiAwCisJCQkmJiBwb3J0LT5wb3J0X3VzYikgeworCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPnBvcnRfbG9jayk7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBvcnQtPmRyYWluX3dhaXQsCisJCQkJCWdzX3dyaXRlc19maW5pc2hlZChwb3J0KSwKKwkJCQkJR1NfQ0xPU0VfVElNRU9VVCAqIEhaKTsKKwkJc3Bpbl9sb2NrX2lycSgmcG9ydC0+cG9ydF9sb2NrKTsKKwl9CisKKwkvKiBJZmYgd2UncmUgZGlzY29ubmVjdGVkLCB0aGVyZSBjYW4gYmUgbm8gSS9PIGluIGZsaWdodCBzbyBpdCdzCisJICogb2sgdG8gZnJlZSB0aGUgY2lyY3VsYXIgYnVmZmVyOyBlbHNlIGp1c3Qgc2NydWIgaXQuICBBbmQgZG9uJ3QKKwkgKiBsZXQgdGhlIHB1c2ggdGFza2xldCBmaXJlIGFnYWluIHVudGlsIHdlJ3JlIHJlLW9wZW5lZC4KKwkgKi8KKwlpZiAocG9ydC0+cG9ydF91c2IgPT0gTlVMTCkKKwkJZ3NfYnVmX2ZyZWUoJnBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKKwllbHNlCisJCWdzX2J1Zl9jbGVhcigmcG9ydC0+cG9ydF93cml0ZV9idWYpOworCisJdGFza2xldF9raWxsKCZwb3J0LT5wdXNoKTsKKworCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCXBvcnQtPnBvcnRfdHR5ID0gTlVMTDsKKworCXBvcnQtPm9wZW5jbG9zZSA9IGZhbHNlOworCisJcHJfZGVidWcoImdzX2Nsb3NlOiB0dHlHUyVkICglcCwlcCkgZG9uZSFcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgdHR5LCBmaWxlKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+Y2xvc2Vfd2FpdCk7CitleGl0OgorCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+cG9ydF9sb2NrKTsKK30KKworc3RhdGljIGludCBnc193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgZ3NfcG9ydAkqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQJCXN0YXR1czsKKworCXByX3ZkZWJ1ZygiZ3Nfd3JpdGU6IHR0eUdTJWQgKCVwKSB3cml0aW5nICVkIGJ5dGVzXG4iLAorCQkJcG9ydC0+cG9ydF9udW0sIHR0eSwgY291bnQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCWlmIChjb3VudCkKKwkJY291bnQgPSBnc19idWZfcHV0KCZwb3J0LT5wb3J0X3dyaXRlX2J1ZiwgYnVmLCBjb3VudCk7CisJLyogdHJlYXQgY291bnQgPT0gMCBhcyBmbHVzaF9jaGFycygpICovCisJaWYgKHBvcnQtPnBvcnRfdXNiKQorCQlzdGF0dXMgPSBnc19zdGFydF90eChwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBnc19wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQoreworCXN0cnVjdCBnc19wb3J0CSpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJc3RhdHVzOworCisJcHJfdmRlYnVnKCJnc19wdXRfY2hhcjogKCVkLCVwKSBjaGFyPTB4JXgsIGNhbGxlZCBmcm9tICVwXG4iLAorCQlwb3J0LT5wb3J0X251bSwgdHR5LCBjaCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKwlzdGF0dXMgPSBnc19idWZfcHV0KCZwb3J0LT5wb3J0X3dyaXRlX2J1ZiwgJmNoLCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGdzX2ZsdXNoX2NoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGdzX3BvcnQJKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlwcl92ZGVidWcoImdzX2ZsdXNoX2NoYXJzOiAoJWQsJXApXG4iLCBwb3J0LT5wb3J0X251bSwgdHR5KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKwlpZiAocG9ydC0+cG9ydF91c2IpCisJCWdzX3N0YXJ0X3R4KHBvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGdzX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgZ3NfcG9ydAkqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQJCXJvb20gPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCWlmIChwb3J0LT5wb3J0X3VzYikKKwkJcm9vbSA9IGdzX2J1Zl9zcGFjZV9hdmFpbCgmcG9ydC0+cG9ydF93cml0ZV9idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJcHJfdmRlYnVnKCJnc193cml0ZV9yb29tOiAoJWQsJXApIHJvb209JWRcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIHJvb20pOworCisJcmV0dXJuIHJvb207Cit9CisKK3N0YXRpYyBpbnQgZ3NfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGdzX3BvcnQJKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQljaGFycyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisJY2hhcnMgPSBnc19idWZfZGF0YV9hdmFpbCgmcG9ydC0+cG9ydF93cml0ZV9idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJcHJfdmRlYnVnKCJnc19jaGFyc19pbl9idWZmZXI6ICglZCwlcCkgY2hhcnM9JWRcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIGNoYXJzKTsKKworCXJldHVybiBjaGFyczsKK30KKworLyogdW5kbyBzaWRlIGVmZmVjdHMgb2Ygc2V0dGluZyBUVFlfVEhST1RUTEVEICovCitzdGF0aWMgdm9pZCBnc191bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGdzX3BvcnQJCSpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1bnNpZ25lZAkJc3RhcnRlZCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisJaWYgKHBvcnQtPnBvcnRfdXNiKQorCQlzdGFydGVkID0gZ3Nfc3RhcnRfcngocG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlwcl92ZGVidWcoImdzX3VudGhyb3R0bGU6IHR0eUdTJWQsICVkIHBhY2tldHNcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgc3RhcnRlZCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgZ3NfdHR5X29wcyA9IHsKKwkub3BlbiA9CQkJZ3Nfb3BlbiwKKwkuY2xvc2UgPQkJZ3NfY2xvc2UsCisJLndyaXRlID0JCWdzX3dyaXRlLAorCS5wdXRfY2hhciA9CQlnc19wdXRfY2hhciwKKwkuZmx1c2hfY2hhcnMgPQkJZ3NfZmx1c2hfY2hhcnMsCisJLndyaXRlX3Jvb20gPQkJZ3Nfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JZ3NfY2hhcnNfaW5fYnVmZmVyLAorCS51bnRocm90dGxlID0JCWdzX3VudGhyb3R0bGUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmdzX3R0eV9kcml2ZXI7CisKK3N0YXRpYyBpbnQgX19pbml0Citnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKQoreworCXN0cnVjdCBnc19wb3J0CSpwb3J0OworCisJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnc19wb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmcG9ydC0+cG9ydF9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5jbG9zZV93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5kcmFpbl93YWl0KTsKKworCXRhc2tsZXRfaW5pdCgmcG9ydC0+cHVzaCwgZ3NfcnhfcHVzaCwgKHVuc2lnbmVkIGxvbmcpIHBvcnQpOworCisJSU5JVF9MSVNUX0hFQUQoJnBvcnQtPnJlYWRfcG9vbCk7CisJSU5JVF9MSVNUX0hFQUQoJnBvcnQtPndyaXRlX3Bvb2wpOworCisJcG9ydC0+cG9ydF9udW0gPSBwb3J0X251bTsKKwlwb3J0LT5wb3J0X2xpbmVfY29kaW5nID0gKmNvZGluZzsKKworCXBvcnRzW3BvcnRfbnVtXS5wb3J0ID0gcG9ydDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGdzZXJpYWxfc2V0dXAgLSBpbml0aWFsaXplIFRUWSBkcml2ZXIgZm9yIG9uZSBvciBtb3JlIHBvcnRzCisgKiBAZzogZ2FkZ2V0IHRvIGFzc29jaWF0ZSB3aXRoIHRoZXNlIHBvcnRzCisgKiBAY291bnQ6IGhvdyBtYW55IHBvcnRzIHRvIHN1cHBvcnQKKyAqIENvbnRleHQ6IG1heSBzbGVlcAorICoKKyAqIFRoZSBUVFkgc3RhY2sgbmVlZHMgdG8ga25vdyBpbiBhZHZhbmNlIGhvdyBtYW55IGRldmljZXMgaXQgc2hvdWxkCisgKiBwbGFuIHRvIG1hbmFnZS4gIFVzZSB0aGlzIGNhbGwgdG8gc2V0IHVwIHRoZSBwb3J0cyB5b3Ugd2lsbCBiZQorICogZXhwb3J0aW5nIHRocm91Z2ggVVNCLiAgTGF0ZXIsIGNvbm5lY3QgdGhlbSB0byBmdW5jdGlvbnMgYmFzZWQKKyAqIG9uIHdoYXQgY29uZmlndXJhdGlvbiBpcyBhY3RpdmF0ZWQgYnkgdGhlIFVTQiBob3N0OyBhbmQgZGlzY29ubmVjdAorICogdGhlbSBhcyBhcHByb3ByaWF0ZS4KKyAqCisgKiBBbiBleGFtcGxlIHdvdWxkIGJlIGEgdHdvLWNvbmZpZ3VyYXRpb24gZGV2aWNlIGluIHdoaWNoIGJvdGgKKyAqIGNvbmZpZ3VyYXRpb25zIGV4cG9zZSBwb3J0IDAsIGJ1dCB0aHJvdWdoIGRpZmZlcmVudCBmdW5jdGlvbnMuCisgKiBPbmUgY29uZmlndXJhdGlvbiBjb3VsZCBldmVuIGV4cG9zZSBwb3J0IDEgd2hpbGUgdGhlIG90aGVyCisgKiBvbmUgZG9lc24ndC4KKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vIG9yIHplcm8uCisgKi8KK2ludCBfX2luaXQgZ3NlcmlhbF9zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZywgdW5zaWduZWQgY291bnQpCit7CisJdW5zaWduZWQJCQlpOworCXN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nCWNvZGluZzsKKwlpbnQJCQkJc3RhdHVzOworCisJaWYgKGNvdW50ID09IDAgfHwgY291bnQgPiBOX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdzX3R0eV9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKGNvdW50KTsKKwlpZiAoIWdzX3R0eV9kcml2ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJZ3NfdHR5X2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlnc190dHlfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJnX3NlcmlhbCI7CisJZ3NfdHR5X2RyaXZlci0+bmFtZSA9ICJ0dHlHUyI7CisJLyogdXNlcyBkeW5hbWljYWxseSBhc3NpZ25lZCBkZXZfdCB2YWx1ZXMgKi8KKworCWdzX3R0eV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOworCWdzX3R0eV9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJZ3NfdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKKwlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CisKKwkvKiA5NjAwLTgtTi0xIC4uLiBtYXRjaGVzIGRlZmF1bHRzIGV4cGVjdGVkIGJ5ICJ1c2JzZXIuc3lzIiBvbgorCSAqIE1TLVdpbmRvd3MuICBPdGhlcndpc2UsIG1vc3Qgb2YgdGhlc2UgZmxhZ3Mgc2hvdWxkbid0IGFmZmVjdAorCSAqIGFueXRoaW5nIHVubGVzcyB3ZSB3ZXJlIHRvIGFjdHVhbGx5IGhvb2sgdXAgdG8gYSBzZXJpYWwgbGluZS4KKwkgKi8KKwlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9CisJCQlCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKKwlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSA5NjAwOworCisJY29kaW5nLmR3RFRFUmF0ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoOTYwMCk7CisJY29kaW5nLmJDaGFyRm9ybWF0ID0gODsKKwljb2RpbmcuYlBhcml0eVR5cGUgPSBVU0JfQ0RDX05PX1BBUklUWTsKKwljb2RpbmcuYkRhdGFCaXRzID0gVVNCX0NEQ18xX1NUT1BfQklUUzsKKworCXR0eV9zZXRfb3BlcmF0aW9ucyhnc190dHlfZHJpdmVyLCAmZ3NfdHR5X29wcyk7CisKKwkvKiBtYWtlIGRldmljZXMgYmUgb3BlbmFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQltdXRleF9pbml0KCZwb3J0c1tpXS5sb2NrKTsKKwkJc3RhdHVzID0gZ3NfcG9ydF9hbGxvYyhpLCAmY29kaW5nKTsKKwkJaWYgKHN0YXR1cykgeworCQkJY291bnQgPSBpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCW5fcG9ydHMgPSBjb3VudDsKKworCS8qIGV4cG9ydCB0aGUgZHJpdmVyIC4uLiAqLworCXN0YXR1cyA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoZ3NfdHR5X2RyaXZlcik7CisJaWYgKHN0YXR1cykgeworCQlwdXRfdHR5X2RyaXZlcihnc190dHlfZHJpdmVyKTsKKwkJcHJfZXJyKCIlczogY2Fubm90IHJlZ2lzdGVyLCBlcnIgJWRcbiIsCisJCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiAuLi4gYW5kIHN5c2ZzIGNsYXNzIGRldmljZXMsIHNvIG1kZXYvdWRldiBtYWtlIC9kZXYvdHR5R1MqICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGRldmljZQkqdHR5X2RldjsKKworCQl0dHlfZGV2ID0gdHR5X3JlZ2lzdGVyX2RldmljZShnc190dHlfZHJpdmVyLCBpLCAmZy0+ZGV2KTsKKwkJaWYgKElTX0VSUih0dHlfZGV2KSkKKwkJCXByX3dhcm5pbmcoIiVzOiBubyBjbGFzc2RldiBmb3IgcG9ydCAlZCwgZXJyICVsZFxuIiwKKwkJCQlfX2Z1bmNfXywgaSwgUFRSX0VSUih0dHlfZGV2KSk7CisJfQorCisJcHJfZGVidWcoIiVzOiByZWdpc3RlcmVkICVkIHR0eUdTKiBkZXZpY2Ulc1xuIiwgX19mdW5jX18sCisJCQljb3VudCwgKGNvdW50ID09IDEpID8gIiIgOiAicyIpOworCisJcmV0dXJuIHN0YXR1czsKK2ZhaWw6CisJd2hpbGUgKGNvdW50LS0pCisJCWtmcmVlKHBvcnRzW2NvdW50XS5wb3J0KTsKKwlwdXRfdHR5X2RyaXZlcihnc190dHlfZHJpdmVyKTsKKwlnc190dHlfZHJpdmVyID0gTlVMTDsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGdzX2Nsb3NlZChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCkKK3sKKwlpbnQgY29uZDsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPnBvcnRfbG9jayk7CisJY29uZCA9IChwb3J0LT5vcGVuX2NvdW50ID09IDApICYmICFwb3J0LT5vcGVuY2xvc2U7CisJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5wb3J0X2xvY2spOworCXJldHVybiBjb25kOworfQorCisvKioKKyAqIGdzZXJpYWxfY2xlYW51cCAtIHJlbW92ZSBUVFktb3Zlci1VU0IgZHJpdmVyIGFuZCBkZXZpY2VzCisgKiBDb250ZXh0OiBtYXkgc2xlZXAKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB0byBmcmVlIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IEBnc2VyaWFsX3NldHVwKCkuCisgKiBBY2NvcmRpbmdseSwgaXQgbWF5IG5lZWQgdG8gd2FpdCB1bnRpbCBzb21lIG9wZW4gL2Rldi8gZmlsZXMgaGF2ZQorICogY2xvc2VkLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGlzc3VlZCBAZ3NlcmlhbF9kaXNjb25uZWN0KCkgZm9yIGFueSBwb3J0cworICogdGhhdCBoYWQgcHJldmlvdXNseSBiZWVuIGNvbm5lY3RlZCwgc28gdGhhdCB0aGVyZSBpcyBuZXZlciBhbnkKKyAqIEkvTyBwZW5kaW5nIHdoZW4gaXQncyBjYWxsZWQuCisgKi8KK3ZvaWQgZ3NlcmlhbF9jbGVhbnVwKHZvaWQpCit7CisJdW5zaWduZWQJaTsKKwlzdHJ1Y3QgZ3NfcG9ydAkqcG9ydDsKKworCWlmICghZ3NfdHR5X2RyaXZlcikKKwkJcmV0dXJuOworCisJLyogc3RhcnQgc3lzZnMgYW5kIC9kZXYvdHR5R1MqIG5vZGUgcmVtb3ZhbCAqLworCWZvciAoaSA9IDA7IGkgPCBuX3BvcnRzOyBpKyspCisJCXR0eV91bnJlZ2lzdGVyX2RldmljZShnc190dHlfZHJpdmVyLCBpKTsKKworCWZvciAoaSA9IDA7IGkgPCBuX3BvcnRzOyBpKyspIHsKKwkJLyogcHJldmVudCBuZXcgb3BlbnMgKi8KKwkJbXV0ZXhfbG9jaygmcG9ydHNbaV0ubG9jayk7CisJCXBvcnQgPSBwb3J0c1tpXS5wb3J0OworCQlwb3J0c1tpXS5wb3J0ID0gTlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZwb3J0c1tpXS5sb2NrKTsKKworCQkvKiB3YWl0IGZvciBvbGQgb3BlbnMgdG8gZmluaXNoICovCisJCXdhaXRfZXZlbnQocG9ydC0+Y2xvc2Vfd2FpdCwgZ3NfY2xvc2VkKHBvcnQpKTsKKworCQlXQVJOX09OKHBvcnQtPnBvcnRfdXNiICE9IE5VTEwpOworCisJCWtmcmVlKHBvcnQpOworCX0KKwluX3BvcnRzID0gMDsKKworCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihnc190dHlfZHJpdmVyKTsKKwlnc190dHlfZHJpdmVyID0gTlVMTDsKKworCXByX2RlYnVnKCIlczogY2xlYW5lZCB1cCB0dHlHUyogc3VwcG9ydFxuIiwgX19mdW5jX18pOworfQorCisvKioKKyAqIGdzZXJpYWxfY29ubmVjdCAtIG5vdGlmeSBUVFkgSS9PIGdsdWUgdGhhdCBVU0IgbGluayBpcyBhY3RpdmUKKyAqIEBnc2VyOiB0aGUgZnVuY3Rpb24sIHNldCB1cCB3aXRoIGVuZHBvaW50cyBhbmQgZGVzY3JpcHRvcnMKKyAqIEBwb3J0X251bTogd2hpY2ggcG9ydCBpcyBhY3RpdmUKKyAqIENvbnRleHQ6IGFueSAodXN1YWxseSBmcm9tIGlycSkKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBhY3RpdmF0ZSBlbmRwb2ludHMgYW5kIGxldCB0aGUgVFRZIGxheWVyIGtub3cgdGhhdAorICogdGhlIGNvbm5lY3Rpb24gaXMgYWN0aXZlIC4uLiBub3QgdW5saWtlICJjYXJyaWVyIGRldGVjdCIuICBJdCB3b24ndAorICogbmVjZXNzYXJpbHkgc3RhcnQgSS9PIHF1ZXVlczsgdW5sZXNzIHRoZSBUVFkgaXMgaGVsZCBvcGVuIGJ5IGFueQorICogdGFzaywgdGhlcmUgd291bGQgYmUgbm8gcG9pbnQuICBIb3dldmVyLCB0aGUgZW5kcG9pbnRzIHdpbGwgYmUKKyAqIGFjdGl2YXRlZCBzbyB0aGUgVVNCIGhvc3QgY2FuIHBlcmZvcm0gSS9PLCBzdWJqZWN0IHRvIGJhc2ljIFVTQgorICogaGFyZHdhcmUgZmxvdyBjb250cm9sLgorICoKKyAqIENhbGxlciBuZWVkcyB0byBoYXZlIHNldCB1cCB0aGUgZW5kcG9pbnRzIGFuZCBVU0IgZnVuY3Rpb24gaW4gQGRldgorICogYmVmb3JlIGNhbGxpbmcgdGhpcywgYXMgd2VsbCBhcyB0aGUgYXBwcm9wcmlhdGUgKHNwZWVkLXNwZWNpZmljKQorICogZW5kcG9pbnQgZGVzY3JpcHRvcnMsIGFuZCBhbHNvIGhhdmUgc2V0IHVwIHRoZSBUVFkgZHJpdmVyIGJ5IGNhbGxpbmcKKyAqIEBnc2VyaWFsX3NldHVwKCkuCisgKgorICogUmV0dXJucyBuZWdhdGl2ZSBlcnJubyBvciB6ZXJvLgorICogT24gc3VjY2VzcywgZXAtPmRyaXZlcl9kYXRhIHdpbGwgYmUgb3ZlcndyaXR0ZW4uCisgKi8KK2ludCBnc2VyaWFsX2Nvbm5lY3Qoc3RydWN0IGdzZXJpYWwgKmdzZXIsIHU4IHBvcnRfbnVtKQoreworCXN0cnVjdCBnc19wb3J0CSpwb3J0OworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlzdGF0dXM7CisKKwlpZiAoIWdzX3R0eV9kcml2ZXIgfHwgcG9ydF9udW0gPj0gbl9wb3J0cykKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIHdlICJrbm93IiBnc2VyaWFsX2NsZWFudXAoKSBoYXNuJ3QgYmVlbiBjYWxsZWQgKi8KKwlwb3J0ID0gcG9ydHNbcG9ydF9udW1dLnBvcnQ7CisKKwkvKiBhY3RpdmF0ZSB0aGUgZW5kcG9pbnRzICovCisJc3RhdHVzID0gdXNiX2VwX2VuYWJsZShnc2VyLT5pbiwgZ3Nlci0+aW5fZGVzYyk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisJZ3Nlci0+aW4tPmRyaXZlcl9kYXRhID0gcG9ydDsKKworCXN0YXR1cyA9IHVzYl9lcF9lbmFibGUoZ3Nlci0+b3V0LCBnc2VyLT5vdXRfZGVzYyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbF9vdXQ7CisJZ3Nlci0+b3V0LT5kcml2ZXJfZGF0YSA9IHBvcnQ7CisKKwkvKiB0aGVuIHRlbGwgdGhlIHR0eSBnbHVlIHRoYXQgSS9PIGNhbiB3b3JrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCWdzZXItPmlvcG9ydCA9IHBvcnQ7CisJcG9ydC0+cG9ydF91c2IgPSBnc2VyOworCisJLyogUkVWSVNJVCB1bmNsZWFyIGhvdyBiZXN0IHRvIGhhbmRsZSB0aGlzIHN0YXRlLi4uCisJICogd2UgZG9uJ3QgcmVhbGx5IGNvdXBsZSBpdCB3aXRoIHRoZSBMaW51eCBUVFkuCisJICovCisJZ3Nlci0+cG9ydF9saW5lX2NvZGluZyA9IHBvcnQtPnBvcnRfbGluZV9jb2Rpbmc7CisKKwkvKiBSRVZJU0lUIGlmIHdhaXRpbmcgb24gImNhcnJpZXIgZGV0ZWN0Iiwgc2lnbmFsLiAqLworCisJLyogUkVWSVNJVCBmb3IgQUNNLCBpc3N1ZSAibmV0d29yayBjb25uZWN0aW9uIiBzdGF0dXMgbm90aWZpY2F0aW9uOgorCSAqIGNvbm5lY3RlZCBpZiBvcGVuX2NvdW50LCBlbHNlIGRpc2Nvbm5lY3RlZC4KKwkgKi8KKworCS8qIGlmIGl0J3MgYWxyZWFkeSBvcGVuLCBzdGFydCBJL08gKi8KKwlpZiAocG9ydC0+b3Blbl9jb3VudCkgeworCQlwcl9kZWJ1ZygiZ3NlcmlhbF9jb25uZWN0OiBzdGFydCB0dHlHUyVkXG4iLCBwb3J0LT5wb3J0X251bSk7CisJCWdzX3N0YXJ0X2lvKHBvcnQpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0YXR1czsKKworZmFpbF9vdXQ6CisJdXNiX2VwX2Rpc2FibGUoZ3Nlci0+aW4pOworCWdzZXItPmluLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBnc2VyaWFsX2Rpc2Nvbm5lY3QgLSBub3RpZnkgVFRZIEkvTyBnbHVlIHRoYXQgVVNCIGxpbmsgaXMgaW5hY3RpdmUKKyAqIEBnc2VyOiB0aGUgZnVuY3Rpb24sIG9uIHdoaWNoIGdzZXJpYWxfY29ubmVjdCgpIHdhcyBjYWxsZWQKKyAqIENvbnRleHQ6IGFueSAodXN1YWxseSBmcm9tIGlycSkKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB0byBkZWFjdGl2YXRlIGVuZHBvaW50cyBhbmQgbGV0IHRoZSBUVFkgbGF5ZXIga25vdworICogdGhhdCB0aGUgY29ubmVjdGlvbiB3ZW50IGluYWN0aXZlIC4uLiBub3QgdW5saWtlICJoYW5ndXAiLgorICoKKyAqIE9uIHJldHVybiwgdGhlIHN0YXRlIGlzIGFzIGlmIGdzZXJpYWxfY29ubmVjdCgpIGhhZCBuZXZlciBiZWVuIGNhbGxlZDsKKyAqIHRoZXJlIGlzIG5vIGFjdGl2ZSBVU0IgSS9PIG9uIHRoZXNlIGVuZHBvaW50cy4KKyAqLwordm9pZCBnc2VyaWFsX2Rpc2Nvbm5lY3Qoc3RydWN0IGdzZXJpYWwgKmdzZXIpCit7CisJc3RydWN0IGdzX3BvcnQJKnBvcnQgPSBnc2VyLT5pb3BvcnQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJLyogdGVsbCB0aGUgVFRZIGdsdWUgbm90IHRvIGRvIEkvTyBoZXJlIGFueSBtb3JlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJLyogUkVWSVNJVCBhcyBhYm92ZTogaG93IGJlc3QgdG8gdHJhY2sgdGhpcz8gKi8KKwlwb3J0LT5wb3J0X2xpbmVfY29kaW5nID0gZ3Nlci0+cG9ydF9saW5lX2NvZGluZzsKKworCXBvcnQtPnBvcnRfdXNiID0gTlVMTDsKKwlnc2VyLT5pb3BvcnQgPSBOVUxMOworCWlmIChwb3J0LT5vcGVuX2NvdW50ID4gMCB8fCBwb3J0LT5vcGVuY2xvc2UpIHsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5kcmFpbl93YWl0KTsKKwkJaWYgKHBvcnQtPnBvcnRfdHR5KQorCQkJdHR5X2hhbmd1cChwb3J0LT5wb3J0X3R0eSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJLyogZGlzYWJsZSBlbmRwb2ludHMsIGFib3J0aW5nIGRvd24gYW55IGFjdGl2ZSBJL08gKi8KKwl1c2JfZXBfZGlzYWJsZShnc2VyLT5vdXQpOworCWdzZXItPm91dC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCisJdXNiX2VwX2Rpc2FibGUoZ3Nlci0+aW4pOworCWdzZXItPmluLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwkvKiBmaW5hbGx5LCBmcmVlIGFueSB1bnVzZWQvdW51c2FibGUgSS9PIGJ1ZmZlcnMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisJaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCAmJiAhcG9ydC0+b3BlbmNsb3NlKQorCQlnc19idWZfZnJlZSgmcG9ydC0+cG9ydF93cml0ZV9idWYpOworCWdzX2ZyZWVfcmVxdWVzdHMoZ3Nlci0+b3V0LCAmcG9ydC0+cmVhZF9wb29sKTsKKwlnc19mcmVlX3JlcXVlc3RzKGdzZXItPmluLCAmcG9ydC0+d3JpdGVfcG9vbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNTYxMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIHVfc2VyaWFsLmggLSBpbnRlcmZhY2UgdG8gVVNCIGdhZGdldCAic2VyaWFsIHBvcnQiL1RUWSB1dGlsaXRpZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX1VfU0VSSUFMX0gKKyNkZWZpbmUgX19VX1NFUklBTF9ICisKKyNpbmNsdWRlIDxsaW51eC91c2IvY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NkYy5oPgorCisvKgorICogT25lIG5vbi1tdWx0aXBsZXhlZCAic2VyaWFsIiBJL08gcG9ydCAuLi4gdGhlcmUgY2FuIGJlIHNldmVyYWwgb2YgdGhlc2UKKyAqIG9uIGFueSBnaXZlbiBVU0IgcGVyaXBoZXJhbCBkZXZpY2UsIGlmIGl0IHByb3ZpZGVzIGVub3VnaCBlbmRwb2ludHMuCisgKgorICogVGhlICJ1X3NlcmlhbCIgdXRpbGl0eSBjb21wb25lbnQgZXhpc3RzIHRvIGRvIG9uZSB0aGluZzogIG1hbmFnZSBUVFkKKyAqIHN0eWxlIEkvTyB1c2luZyB0aGUgVVNCIHBlcmlwaGVyYWwgZW5kcG9pbnRzIGxpc3RlZCBoZXJlLCBpbmNsdWRpbmcKKyAqIGhvb2t1cHMgdG8gc3lzZnMgYW5kIC9kZXYgZm9yIGVhY2ggbG9naWNhbCAidHR5IiBkZXZpY2UuCisgKgorICogUkVWSVNJVCBuZWVkIFRUWSAtLT4gVVNCIGV2ZW50IGZsb3cgdG9vLCBzbyBBQ00gY2FuIHJlcG9ydCBvcGVuL2Nsb3NlCisgKiBhcyBjYXJyaWVyIGRldGVjdCBldmVudHMuICBNb2RlbCBhZnRlciBFQ00uICBUaGVyZSdzIG1vcmUgQUNNIHN0YXRlIHRvby4KKyAqCisgKiBSRVZJU0lUIHNvbWVkYXksIGFsbG93IG11bHRpcGxleGluZyBzZXZlcmFsIFRUWXMgb3ZlciB0aGVzZSBlbmRwb2ludHMuCisgKi8KK3N0cnVjdCBnc2VyaWFsIHsKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQlmdW5jOworCisJLyogcG9ydCBpcyBtYW5hZ2VkIGJ5IGdzZXJpYWxfe2Nvbm5lY3QsZGlzY29ubmVjdH0gKi8KKwlzdHJ1Y3QgZ3NfcG9ydAkJCSppb3BvcnQ7CisKKwlzdHJ1Y3QgdXNiX2VwCQkJKmluOworCXN0cnVjdCB1c2JfZXAJCQkqb3V0OworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqaW5fZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm91dF9kZXNjOworCisJLyogUkVWSVNJVCBhdm9pZCB0aGlzIENEQy1BQ00gc3VwcG9ydCBoYXJkZXIgLi4uICovCisJc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgcG9ydF9saW5lX2NvZGluZzsJLyogOTYwMC04LU4tMSBldGMgKi8KK307CisKKy8qIHBvcnQgc2V0dXAvdGVhcmRvd24gaXMgaGFuZGxlZCBieSBnYWRnZXQgZHJpdmVyICovCitpbnQgZ3NlcmlhbF9zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZywgdW5zaWduZWQgbl9wb3J0cyk7Cit2b2lkIGdzZXJpYWxfY2xlYW51cCh2b2lkKTsKKworLyogY29ubmVjdC9kaXNjb25uZWN0IGlzIGhhbmRsZWQgYnkgaW5kaXZpZHVhbCBmdW5jdGlvbnMgKi8KK2ludCBnc2VyaWFsX2Nvbm5lY3Qoc3RydWN0IGdzZXJpYWwgKiwgdTggcG9ydF9udW0pOwordm9pZCBnc2VyaWFsX2Rpc2Nvbm5lY3Qoc3RydWN0IGdzZXJpYWwgKik7CisKKy8qIGZ1bmN0aW9ucyBhcmUgYm91bmQgdG8gY29uZmlndXJhdGlvbnMgYnkgYSBjb25maWcgb3IgZ2FkZ2V0IGRyaXZlciAqLworaW50IGFjbV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKTsKK2ludCBnc2VyX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggcG9ydF9udW0pOworCisjZW5kaWYgLyogX19VX1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwppbmRleCBmY2U0OTI0Li5hYTBiZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKQEAgLTEsOCArMSw4IEBACiAvKgogICogemVyby5jIC0tIEdhZGdldCBaZXJvLCBmb3IgVVNCIGRldmVsb3BtZW50CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcgRGF2aWQgQnJvd25lbGwKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zMCwxMiArMzAsNyBAQAogICoKICAqIEl0IHN1cHBvcnRzIHR3byBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zLiAgT25lIHNpbmtzIHdoYXRldmVyIHRoZSB1c2IgaG9zdAogICogd3JpdGVzLCBhbmQgaW4gcmV0dXJuIHNvdXJjZXMgemVyb2VzLiAgVGhlIG90aGVyIGxvb3BzIHdoYXRldmVyIHRoZSBob3N0Ci0gKiB3cml0ZXMgYmFjaywgc28gdGhlIGhvc3QgY2FuIHJlYWQgaXQuICBNb2R1bGUgb3B0aW9ucyBpbmNsdWRlOgotICoKLSAqICAgYnVmbGVuPU4JCWRlZmF1bHQgTj00MDk2LCBidWZmZXIgc2l6ZSB1c2VkCi0gKiAgIHFsZW49TgkJZGVmYXVsdCBOPTMyLCBob3cgbWFueSBidWZmZXJzIGluIHRoZSBsb29wYmFjayBxdWV1ZQotICogICBsb29wZGVmYXVsdAlkZWZhdWx0IGZhbHNlLCBsaXN0IGxvb3BiYWNrIGNvbmZpZyBmaXJzdAotICogICBhdXRvcmVzdW1lPU4JZGVmYXVsdCBOPTAsIHNlY29uZHMgYmVmb3JlIHRyaWdnZXJpbmcgcmVtb3RlIHdha2V1cAorICogd3JpdGVzIGJhY2ssIHNvIHRoZSBob3N0IGNhbiByZWFkIGl0LgogICoKICAqIE1hbnkgZHJpdmVycyB3aWxsIG9ubHkgaGF2ZSBvbmUgY29uZmlndXJhdGlvbiwgbGV0dGluZyB0aGVtIGJlIG11Y2gKICAqIHNpbXBsZXIgaWYgdGhleSBhbHNvIGRvbid0IHN1cHBvcnQgaGlnaCBzcGVlZCBvcGVyYXRpb24gKGxpa2UgdGhpcwpAQCAtNDcsOTQgKzQyLDM1IEBACiAgKiB3b3JrIHdpdGggbG93IGNhcGFiaWxpdHkgVVNCIGNvbnRyb2xsZXJzIHdpdGhvdXQgZm91ciBidWxrIGVuZHBvaW50cy4KICAqLwogCisvKgorICogZHJpdmVyIGFzc3VtZXMgc2VsZi1wb3dlcmVkIGhhcmR3YXJlLCBhbmQKKyAqIGhhcyBubyB3YXkgZm9yIHVzZXJzIHRvIHRyaWdnZXIgcmVtb3RlIHdha2V1cC4KKyAqLworCiAvKiAjZGVmaW5lIFZFUkJPU0VfREVCVUcgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+Ci0KKyNpbmNsdWRlICJnX3plcm8uaCIKICNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiRWFydGggRGF5IDIwMDgiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiQ2luY28gZGUgTWF5byAyMDA4IgogCi1zdGF0aWMgY29uc3QgY2hhciBzaG9ydG5hbWVbXSA9ICJ6ZXJvIjsKIHN0YXRpYyBjb25zdCBjaGFyIGxvbmduYW1lW10gPSAiR2FkZ2V0IFplcm8iOwogCi1zdGF0aWMgY29uc3QgY2hhciBzb3VyY2Vfc2lua1tdID0gInNvdXJjZSBhbmQgc2luayBkYXRhIjsKLXN0YXRpYyBjb25zdCBjaGFyIGxvb3BiYWNrW10gPSAibG9vcCBpbnB1dCB0byBvdXRwdXQiOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogZHJpdmVyIGFzc3VtZXMgc2VsZi1wb3dlcmVkIGhhcmR3YXJlLCBhbmQKLSAqIGhhcyBubyB3YXkgZm9yIHVzZXJzIHRvIHRyaWdnZXIgcmVtb3RlIHdha2V1cC4KLSAqCi0gKiB0aGlzIHZlcnNpb24gYXV0b2NvbmZpZ3VyZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSwKLSAqIHdoaWNoIGlzIHJlYXNvbmFibGUgZm9yIG1vc3QgImJ1bGstb25seSIgZHJpdmVycy4KLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKkVQX0lOX05BTUU7CQkvKiBzb3VyY2UgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpFUF9PVVRfTkFNRTsJCS8qIHNpbmsgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogYmlnIGVub3VnaCB0byBob2xkIG91ciBiaWdnZXN0IGRlc2NyaXB0b3IgKi8KLSNkZWZpbmUgVVNCX0JVRlNJWgkyNTYKLQotc3RydWN0IHplcm9fZGV2IHsKLQlzcGlubG9ja190CQlsb2NrOwotCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQ7Ci0Jc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CQkvKiBmb3IgY29udHJvbCByZXNwb25zZXMgKi8KLQotCS8qIHdoZW4gY29uZmlndXJlZCwgd2UgaGF2ZSBvbmUgb2YgdHdvIGNvbmZpZ3M6Ci0JICogLSBzb3VyY2UgZGF0YSAoaW4gdG8gaG9zdCkgYW5kIHNpbmsgaXQgKG91dCBmcm9tIGhvc3QpCi0JICogLSBvciBsb29wIGl0IGJhY2sgKG91dCBmcm9tIGhvc3QgYmFjayBpbiB0byBob3N0KQotCSAqLwotCXU4CQkJY29uZmlnOwotCXN0cnVjdCB1c2JfZXAJCSppbl9lcCwgKm91dF9lcDsKLQotCS8qIGF1dG9yZXN1bWUgdGltZXIgKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdAlyZXN1bWU7Ci19OwotCi0jZGVmaW5lIERCRyhkLCBmbXQsIGFyZ3MuLi4pIFwKLQlkZXZfZGJnKCYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKLSNkZWZpbmUgVkRCRyhkLCBmbXQsIGFyZ3MuLi4pIFwKLQlkZXZfdmRiZygmKGQpLT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpCi0jZGVmaW5lIEVSUk9SKGQsIGZtdCwgYXJncy4uLikgXAotCWRldl9lcnIoJihkKS0+Z2FkZ2V0LT5kZXYgLCBmbXQgLCAjIyBhcmdzKQotI2RlZmluZSBXQVJOKGQsIGZtdCwgYXJncy4uLikgXAotCWRldl93YXJuKCYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKLSNkZWZpbmUgSU5GTyhkLCBmbXQsIGFyZ3MuLi4pIFwKLQlkZXZfaW5mbygmKGQpLT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB1bnNpZ25lZCBidWZsZW4gPSA0MDk2Owotc3RhdGljIHVuc2lnbmVkIHFsZW4gPSAzMjsKLXN0YXRpYyB1bnNpZ25lZCBwYXR0ZXJuID0gMDsKLQotbW9kdWxlX3BhcmFtKGJ1ZmxlbiwgdWludCwgU19JUlVHTyk7Ci1tb2R1bGVfcGFyYW0ocWxlbiwgdWludCwgU19JUlVHTyk7Ci1tb2R1bGVfcGFyYW0ocGF0dGVybiwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKLQotLyoKLSAqIGlmIGl0J3Mgbm9uemVybywgYXV0b3Jlc3VtZSBzYXlzIGhvdyBtYW55IHNlY29uZHMgdG8gd2FpdAotICogYmVmb3JlIHRyeWluZyB0byB3YWtlIHVwIHRoZSBob3N0IGFmdGVyIHN1c3BlbmQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBhdXRvcmVzdW1lID0gMDsKLW1vZHVsZV9wYXJhbShhdXRvcmVzdW1lLCB1aW50LCAwKTsKK3Vuc2lnbmVkIGJ1ZmxlbiA9IDQwOTY7Cittb2R1bGVfcGFyYW0oYnVmbGVuLCB1aW50LCAwKTsKIAogLyoKICAqIE5vcm1hbGx5IHRoZSAibG9vcGJhY2siIGNvbmZpZ3VyYXRpb24gaXMgc2Vjb25kIChpbmRleCAxKSBzbwogICogaXQncyBub3QgdGhlIGRlZmF1bHQuICBIZXJlJ3Mgd2hlcmUgdG8gY2hhbmdlIHRoYXQgb3JkZXIsIHRvCi0gKiB3b3JrIGJldHRlciB3aXRoIGhvc3RzIHdoZXJlIGNvbmZpZyBjaGFuZ2VzIGFyZSBwcm9ibGVtYXRpYy4KLSAqIE9yIGNvbnRyb2xsZXJzIChsaWtlIHN1cGVyaCkgdGhhdCBvbmx5IHN1cHBvcnQgb25lIGNvbmZpZy4KKyAqIHdvcmsgYmV0dGVyIHdpdGggaG9zdHMgd2hlcmUgY29uZmlnIGNoYW5nZXMgYXJlIHByb2JsZW1hdGljIG9yCisgKiBjb250cm9sbGVycyAobGlrZSBvcmlnaW5hbCBzdXBlcmgpIHRoYXQgb25seSBzdXBwb3J0IG9uZSBjb25maWcuCiAgKi8KIHN0YXRpYyBpbnQgbG9vcGRlZmF1bHQgPSAwOwogbW9kdWxlX3BhcmFtKGxvb3BkZWZhdWx0LCBib29sLCBTX0lSVUdPfFNfSVdVU1IpOwpAQCAtMTU2LDI0ICs5Miw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qCi0gKiBERVNDUklQVE9SUyAuLi4gbW9zdCBhcmUgc3RhdGljLCBidXQgc3RyaW5ncyBhbmQgKGZ1bGwpCi0gKiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzIGFyZSBidWlsdCBvbiBkZW1hbmQuCi0gKi8KLQotI2RlZmluZSBTVFJJTkdfTUFOVUZBQ1RVUkVSCQkyNQotI2RlZmluZSBTVFJJTkdfUFJPRFVDVAkJCTQyCi0jZGVmaW5lIFNUUklOR19TRVJJQUwJCQkxMDEKLSNkZWZpbmUgU1RSSU5HX1NPVVJDRV9TSU5LCQkyNTAKLSNkZWZpbmUgU1RSSU5HX0xPT1BCQUNLCQkJMjUxCi0KLS8qCi0gKiBUaGlzIGRldmljZSBhZHZlcnRpc2VzIHR3byBjb25maWd1cmF0aW9uczsgdGhlc2UgbnVtYmVycyB3b3JrCi0gKiBvbiBhIHB4YTI1MCBhcyB3ZWxsIGFzIG1vcmUgZmxleGlibGUgaGFyZHdhcmUuCi0gKi8KLSNkZWZpbmUJQ09ORklHX1NPVVJDRV9TSU5LCTMKLSNkZWZpbmUJQ09ORklHX0xPT1BCQUNLCQkyCi0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKQEAgLTE4MywyNDggKzEwMSw2NCBAQAogCiAJLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAogCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9OVU0pLAotCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKLQkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCi0JLmlTZXJpYWxOdW1iZXIgPQlTVFJJTkdfU0VSSUFMLAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkyLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3Igc291cmNlX3NpbmtfY29uZmlnID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBzb3VyY2Vfc2lua19jb25maWcsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCi0KLQkvKiBjb21wdXRlIHdUb3RhbExlbmd0aCBvbiB0aGUgZmx5ICovCi0JLmJOdW1JbnRlcmZhY2VzID0JMSwKLQkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUNPTkZJR19TT1VSQ0VfU0lOSywKLQkuaUNvbmZpZ3VyYXRpb24gPQlTVFJJTkdfU09VUkNFX1NJTkssCi0JLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlciA9CQkxLAkvKiBzZWxmLXBvd2VyZWQgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIGxvb3BiYWNrX2NvbmZpZyA9IHsKLQkuYkxlbmd0aCA9CQlzaXplb2YgbG9vcGJhY2tfY29uZmlnLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ09ORklHLAotCi0JLyogY29tcHV0ZSB3VG90YWxMZW5ndGggb24gdGhlIGZseSAqLwotCS5iTnVtSW50ZXJmYWNlcyA9CTEsCi0JLmJDb25maWd1cmF0aW9uVmFsdWUgPQlDT05GSUdfTE9PUEJBQ0ssCi0JLmlDb25maWd1cmF0aW9uID0JU1RSSU5HX0xPT1BCQUNLLAotCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIgPQkJMSwJLyogc2VsZi1wb3dlcmVkICovCi19OwotCisjaWZkZWYgQ09ORklHX1VTQl9PVEcKIHN0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yIG90Z19kZXNjcmlwdG9yID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBvdGdfZGVzY3JpcHRvciwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKIAotCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX09UR19TUlAsCisJLyogUkVWSVNJVCBTUlAtb25seSBoYXJkd2FyZSBpcyBwb3NzaWJsZSwgYWx0aG91Z2gKKwkgKiBpdCB3b3VsZCBub3QgYmUgY2FsbGVkICJPVEciIC4uLgorCSAqLworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX09UR19TUlAgfCBVU0JfT1RHX0hOUCwKIH07CiAKLS8qIG9uZSBpbnRlcmZhY2UgaW4gZWFjaCBjb25maWd1cmF0aW9uICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIHNvdXJjZV9zaW5rX2ludGYgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mIHNvdXJjZV9zaW5rX2ludGYsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCi0KLQkuYk51bUVuZHBvaW50cyA9CTIsCi0JLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19WRU5ET1JfU1BFQywKLQkuaUludGVyZmFjZSA9CQlTVFJJTkdfU09VUkNFX1NJTkssCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBsb29wYmFja19pbnRmID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBsb29wYmFja19pbnRmLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAotCi0JLmJOdW1FbmRwb2ludHMgPQkyLAotCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCi0JLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0xPT1BCQUNLLAotfTsKLQotLyogdHdvIGZ1bGwgc3BlZWQgYnVsayBlbmRwb2ludHM7IHRoZWlyIHVzZSBpcyBjb25maWctZGVwZW5kZW50ICovCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc291cmNlX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKLQotCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX3NpbmtfZGVzYyA9IHsKLQkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAotCi0JLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNfc291cmNlX3NpbmtfZnVuY3Rpb25bXSA9IHsKK2NvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKm90Z19kZXNjW10gPSB7CiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm90Z19kZXNjcmlwdG9yLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzb3VyY2Vfc2lua19pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zaW5rX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NvdXJjZV9kZXNjLAogCU5VTEwsCiB9OworI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19sb29wYmFja19mdW5jdGlvbltdID0gewotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbG9vcGJhY2tfaW50ZiwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc2lua19kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zb3VyY2VfZGVzYywKLQlOVUxMLAotfTsKKy8qIHN0cmluZyBJRHMgYXJlIGFzc2lnbmVkIGR5bmFtaWNhbGx5ICovCiAKLS8qCi0gKiB1c2IgMi4wIGRldmljZXMgbmVlZCB0byBleHBvc2UgYm90aCBoaWdoIHNwZWVkIGFuZCBmdWxsIHNwZWVkCi0gKiBkZXNjcmlwdG9ycywgdW5sZXNzIHRoZXkgb25seSBydW4gYXQgZnVsbCBzcGVlZC4KLSAqCi0gKiB0aGF0IG1lYW5zIGFsdGVybmF0ZSBlbmRwb2ludCBkZXNjcmlwdG9ycyAoYmlnZ2VyIHBhY2tldHMpCi0gKiBhbmQgYSAiZGV2aWNlIHF1YWxpZmllciIgLi4uIHBsdXMgbW9yZSBjb25zdHJ1Y3Rpb24gb3B0aW9ucwotICogZm9yIHRoZSBjb25maWcgZGVzY3JpcHRvci4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3NvdXJjZV9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCi0KLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zaW5rX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCi0JLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKLQotCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvciBkZXZfcXVhbGlmaWVyID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZfcXVhbGlmaWVyLAotCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKLQotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAotCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAotCi0JLmJOdW1Db25maWd1cmF0aW9ucyA9CTIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfc291cmNlX3NpbmtfZnVuY3Rpb25bXSA9IHsKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnNvdXJjZV9zaW5rX2ludGYsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19sb29wYmFja19mdW5jdGlvbltdID0gewotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbG9vcGJhY2tfaW50ZiwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc291cmNlX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NpbmtfZGVzYywKLQlOVUxMLAotfTsKLQotLyogbWF4cGFja2V0IGFuZCBvdGhlciB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpY3MgdmFyeSBieSBzcGVlZC4gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICoKLWVwX2Rlc2Moc3RydWN0IHVzYl9nYWRnZXQgKmcsIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqaHMsCi0JCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZnMpCi17Ci0JaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoZykgJiYgZy0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCi0JCXJldHVybiBoczsKLQlyZXR1cm4gZnM7Ci19CisjZGVmaW5lIFNUUklOR19NQU5VRkFDVFVSRVJfSURYCQkwCisjZGVmaW5lIFNUUklOR19QUk9EVUNUX0lEWAkJMQorI2RlZmluZSBTVFJJTkdfU0VSSUFMX0lEWAkJMgogCiBzdGF0aWMgY2hhciBtYW51ZmFjdHVyZXJbNTBdOwogCiAvKiBkZWZhdWx0IHNlcmlhbCBudW1iZXIgdGFrZXMgYXQgbGVhc3QgdHdvIHBhY2tldHMgKi8KIHN0YXRpYyBjaGFyIHNlcmlhbFtdID0gIjAxMjM0NTY3ODkuMDEyMzQ1Njc4OS4wMTIzNDU2Nzg5IjsKIAotCi0vKiBzdGF0aWMgc3RyaW5ncywgaW4gVVRGLTggKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZyBzdHJpbmdzW10gPSB7Ci0JeyBTVFJJTkdfTUFOVUZBQ1RVUkVSLCBtYW51ZmFjdHVyZXIsIH0sCi0JeyBTVFJJTkdfUFJPRFVDVCwgbG9uZ25hbWUsIH0sCi0JeyBTVFJJTkdfU0VSSUFMLCBzZXJpYWwsIH0sCi0JeyBTVFJJTkdfTE9PUEJBQ0ssIGxvb3BiYWNrLCB9LAotCXsgU1RSSU5HX1NPVVJDRV9TSU5LLCBzb3VyY2Vfc2luaywgfSwKK3N0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZyBzdHJpbmdzX2RldltdID0geworCVtTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWF0ucyA9IG1hbnVmYWN0dXJlciwKKwlbU1RSSU5HX1BST0RVQ1RfSURYXS5zID0gbG9uZ25hbWUsCisJW1NUUklOR19TRVJJQUxfSURYXS5zID0gc2VyaWFsLAogCXsgIH0JCQkvKiBlbmQgb2YgbGlzdCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3Mgc3RyaW5ndGFiID0geworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3Mgc3RyaW5ndGFiX2RldiA9IHsKIAkubGFuZ3VhZ2UJPSAweDA0MDksCS8qIGVuLXVzICovCi0JLnN0cmluZ3MJPSBzdHJpbmdzLAorCS5zdHJpbmdzCT0gc3RyaW5nc19kZXYsCiB9OwogCi0vKgotICogY29uZmlnIGRlc2NyaXB0b3JzIGFyZSBhbHNvIGhhbmRjcmFmdGVkLiAgdGhlc2UgbXVzdCBhZ3JlZSB3aXRoIGNvZGUKLSAqIHRoYXQgc2V0cyBjb25maWd1cmF0aW9ucywgYW5kIHdpdGggY29kZSBtYW5hZ2luZyBpbnRlcmZhY2VzIGFuZCB0aGVpcgotICogYWx0c2V0dGluZ3MuICBvdGhlciBjb21wbGV4aXR5IG1heSBjb21lIGZyb206Ci0gKgotICogIC0gaGlnaCBzcGVlZCBzdXBwb3J0LCBpbmNsdWRpbmcgIm90aGVyIHNwZWVkIGNvbmZpZyIgcnVsZXMKLSAqICAtIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zCi0gKiAgLSBpbnRlcmZhY2VzIHdpdGggYWx0ZXJuYXRlIHNldHRpbmdzCi0gKiAgLSBlbWJlZGRlZCBjbGFzcyBvciB2ZW5kb3Itc3BlY2lmaWMgZGVzY3JpcHRvcnMKLSAqCi0gKiB0aGlzIGhhbmRsZXMgaGlnaCBzcGVlZCwgYW5kIGhhcyBhIHNlY29uZCBjb25maWcgdGhhdCBjb3VsZCBhcyBlYXNpbHkKLSAqIGhhdmUgYmVlbiBhbiBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRpbmcgKG9uIG1vc3QgaGFyZHdhcmUpLgotICoKLSAqIE5PVEU6ICB0byBkZW1vbnN0cmF0ZSAoYW5kIHRlc3QpIG1vcmUgVVNCIGNhcGFiaWxpdGllcywgdGhpcyBkcml2ZXIKLSAqIHNob3VsZCBpbmNsdWRlIGFuIGFsdHNldHRpbmcgdG8gdGVzdCBpbnRlcnJ1cHQgdHJhbnNmZXJzLCBpbmNsdWRpbmcKLSAqIGhpZ2ggYmFuZHdpZHRoIG1vZGVzIGF0IGhpZ2ggc3BlZWQuICAoTWF5YmUgd29yayBsaWtlIEludGVsJ3MgdGVzdAotICogZGV2aWNlPykKLSAqLwotc3RhdGljIGludCBjb25maWdfYnVmKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCi0JCXU4ICpidWYsIHU4IHR5cGUsIHVuc2lnbmVkIGluZGV4KQotewotCWludAkJCQlpc19zb3VyY2Vfc2luazsKLQlpbnQJCQkJbGVuOwotCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipmdW5jdGlvbjsKLQlpbnQJCQkJaHMgPSAwOwotCi0JLyogdHdvIGNvbmZpZ3VyYXRpb25zIHdpbGwgYWx3YXlzIGJlIGluZGV4IDAgYW5kIGluZGV4IDEgKi8KLQlpZiAoaW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpc19zb3VyY2Vfc2luayA9IGxvb3BkZWZhdWx0ID8gKGluZGV4ID09IDEpIDogKGluZGV4ID09IDApOwotCi0JaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoZ2FkZ2V0KSkgewotCQlocyA9IChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKTsKLQkJaWYgKHR5cGUgPT0gVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRykKLQkJCWhzID0gIWhzOwotCX0KLQlpZiAoaHMpCi0JCWZ1bmN0aW9uID0gaXNfc291cmNlX3NpbmsKLQkJCT8gaHNfc291cmNlX3NpbmtfZnVuY3Rpb24KLQkJCTogaHNfbG9vcGJhY2tfZnVuY3Rpb247Ci0JZWxzZQotCQlmdW5jdGlvbiA9IGlzX3NvdXJjZV9zaW5rCi0JCQk/IGZzX3NvdXJjZV9zaW5rX2Z1bmN0aW9uCi0JCQk6IGZzX2xvb3BiYWNrX2Z1bmN0aW9uOwotCi0JLyogZm9yIG5vdywgZG9uJ3QgYWR2ZXJ0aXNlIHNycC1vbmx5IGRldmljZXMgKi8KLQlpZiAoIWdhZGdldF9pc19vdGcoZ2FkZ2V0KSkKLQkJZnVuY3Rpb24rKzsKLQotCWxlbiA9IHVzYl9nYWRnZXRfY29uZmlnX2J1Zihpc19zb3VyY2Vfc2luawotCQkJCQk/ICZzb3VyY2Vfc2lua19jb25maWcKLQkJCQkJOiAmbG9vcGJhY2tfY29uZmlnLAotCQkJYnVmLCBVU0JfQlVGU0laLCBmdW5jdGlvbik7Ci0JaWYgKGxlbiA8IDApCi0JCXJldHVybiBsZW47Ci0JKChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopIGJ1ZiktPmJEZXNjcmlwdG9yVHlwZSA9IHR5cGU7Ci0JcmV0dXJuIGxlbjsKLX0KK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzICpkZXZfc3RyaW5nc1tdID0geworCSZzdHJpbmd0YWJfZGV2LAorCU5VTEwsCit9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICphbGxvY19lcF9yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGxlbmd0aCkKK3N0cnVjdCB1c2JfcmVxdWVzdCAqYWxsb2NfZXBfcmVxKHN0cnVjdCB1c2JfZXAgKmVwKQogewogCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwogCiAJcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIEdGUF9BVE9NSUMpOwogCWlmIChyZXEpIHsKLQkJcmVxLT5sZW5ndGggPSBsZW5ndGg7Ci0JCXJlcS0+YnVmID0ga21hbGxvYyhsZW5ndGgsIEdGUF9BVE9NSUMpOworCQlyZXEtPmxlbmd0aCA9IGJ1ZmxlbjsKKwkJcmVxLT5idWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghcmVxLT5idWYpIHsKIAkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXAsIHJlcSk7CiAJCQlyZXEgPSBOVUxMOwpAQCAtNDMzLDY4MSArMTY3LDczIEBACiAJcmV0dXJuIHJlcTsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9lcF9yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQordm9pZCBmcmVlX2VwX3JlcShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCiB7CiAJa2ZyZWUocmVxLT5idWYpOwogCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXAsIHJlcSk7CiB9CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qCi0gKiBTT1VSQ0UvU0lOSyBGVU5DVElPTiAuLi4gYSBwcmltYXJ5IHRlc3RpbmcgdmVoaWNsZSBmb3IgVVNCIHBlcmlwaGVyYWxzLAotICogdGhpcyBqdXN0IHNpbmtzIGJ1bGsgcGFja2V0cyBPVVQgdG8gdGhlIHBlcmlwaGVyYWwgYW5kIHNvdXJjZXMgdGhlbSBJTgotICogdG8gdGhlIGhvc3QsIG9wdGlvbmFsbHkgd2l0aCBzcGVjaWZpYyBkYXRhIHBhdHRlcm5zLgotICoKLSAqIEluIHRlcm1zIG9mIGNvbnRyb2wgbWVzc2FnaW5nLCB0aGlzIHN1cHBvcnRzIGFsbCB0aGUgc3RhbmRhcmQgcmVxdWVzdHMKLSAqIHBsdXMgdHdvIHRoYXQgc3VwcG9ydCBjb250cm9sLU9VVCB0ZXN0cy4KLSAqCi0gKiBOb3RlIHRoYXQgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgcXVldWUgbW9yZSB0aGFuIG9uZSByZXF1ZXN0IGF0IGEgdGltZSwKLSAqIHNvbWUgb3RoZXIgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHRvIHRlc3QgcXVldWVpbmcgbG9naWMuICBUaGUgbmV0d29yawotICogbGluayAoZ19ldGhlcikgaXMgcHJvYmFibHkgdGhlIGJlc3Qgb3B0aW9uIGZvciB0aGF0LgotICovCi0KLS8qIG9wdGlvbmFsbHkgcmVxdWlyZSBzcGVjaWZpYyBzb3VyY2Uvc2luayBkYXRhIHBhdHRlcm5zICAqLwotCi1zdGF0aWMgaW50Ci1jaGVja19yZWFkX2RhdGEoCi0Jc3RydWN0IHplcm9fZGV2CQkqZGV2LAotCXN0cnVjdCB1c2JfZXAJCSplcCwKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcQotKQorc3RhdGljIHZvaWQgZGlzYWJsZV9lcChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIHN0cnVjdCB1c2JfZXAgKmVwKQogewotCXVuc2lnbmVkCWk7Ci0JdTgJCSpidWYgPSByZXEtPmJ1ZjsKKwlpbnQJCQl2YWx1ZTsKIAotCWZvciAoaSA9IDA7IGkgPCByZXEtPmFjdHVhbDsgaSsrLCBidWYrKykgewotCQlzd2l0Y2ggKHBhdHRlcm4pIHsKLQkJLyogYWxsLXplcm9lcyBoYXMgbm8gc3luY2hyb25pemF0aW9uIGlzc3VlcyAqLwotCQljYXNlIDA6Ci0JCQlpZiAoKmJ1ZiA9PSAwKQotCQkJCWNvbnRpbnVlOwotCQkJYnJlYWs7Ci0JCS8qIG1vZDYzIHN0YXlzIGluIHN5bmMgd2l0aCBzaG9ydC10ZXJtaW5hdGVkIHRyYW5zZmVycywKLQkJICogb3Igb3RoZXJ3aXNlIHdoZW4gaG9zdCBhbmQgZ2FkZ2V0IGFncmVlIG9uIGhvdyBsYXJnZQotCQkgKiBlYWNoIHVzYiB0cmFuc2ZlciByZXF1ZXN0IHNob3VsZCBiZS4gIHJlc3luYyBpcyBkb25lCi0JCSAqIHdpdGggc2V0X2ludGVyZmFjZSBvciBzZXRfY29uZmlnLgotCQkgKi8KLQkJY2FzZSAxOgotCQkJaWYgKCpidWYgPT0gKHU4KShpICUgNjMpKQotCQkJCWNvbnRpbnVlOwotCQkJYnJlYWs7Ci0JCX0KLQkJRVJST1IoZGV2LCAiYmFkIE9VVCBieXRlLCBidWZbJWRdID0gJWRcbiIsIGksICpidWYpOwotCQl1c2JfZXBfc2V0X2hhbHQoZXApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlaW5pdF93cml0ZV9kYXRhKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKLXsKLQl1bnNpZ25lZAlpOwotCXU4CQkqYnVmID0gcmVxLT5idWY7Ci0KLQlzd2l0Y2ggKHBhdHRlcm4pIHsKLQljYXNlIDA6Ci0JCW1lbXNldChyZXEtPmJ1ZiwgMCwgcmVxLT5sZW5ndGgpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWZvciAgKGkgPSAwOyBpIDwgcmVxLT5sZW5ndGg7IGkrKykKLQkJCSpidWYrKyA9ICh1OCkgKGkgJSA2Myk7Ci0JCWJyZWFrOworCWlmIChlcC0+ZHJpdmVyX2RhdGEpIHsKKwkJdmFsdWUgPSB1c2JfZXBfZGlzYWJsZShlcCk7CisJCWlmICh2YWx1ZSA8IDApCisJCQlEQkcoY2RldiwgImRpc2FibGUgJXMgLS0+ICVkXG4iLAorCQkJCQllcC0+bmFtZSwgdmFsdWUpOworCQllcC0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCX0KIH0KIAotLyogaWYgdGhlcmUgaXMgb25seSBvbmUgcmVxdWVzdCBpbiB0aGUgcXVldWUsIHRoZXJlJ2xsIGFsd2F5cyBiZSBhbgotICogaXJxIGRlbGF5IGJldHdlZW4gZW5kIG9mIG9uZSByZXF1ZXN0IGFuZCBzdGFydCBvZiB0aGUgbmV4dC4KLSAqIHRoYXQgcHJldmVudHMgdXNpbmcgaGFyZHdhcmUgZG1hIHF1ZXVlcy4KLSAqLwotc3RhdGljIHZvaWQgc291cmNlX3NpbmtfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQordm9pZCBkaXNhYmxlX2VuZHBvaW50cyhzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsCisJCXN0cnVjdCB1c2JfZXAgKmluLCBzdHJ1Y3QgdXNiX2VwICpvdXQpCiB7Ci0Jc3RydWN0IHplcm9fZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7Ci0JaW50CQlzdGF0dXMgPSByZXEtPnN0YXR1czsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0KLQljYXNlIDA6CQkJCS8qIG5vcm1hbCBjb21wbGV0aW9uPyAqLwotCQlpZiAoZXAgPT0gZGV2LT5vdXRfZXApIHsKLQkJCWNoZWNrX3JlYWRfZGF0YShkZXYsIGVwLCByZXEpOwotCQkJbWVtc2V0KHJlcS0+YnVmLCAweDU1LCByZXEtPmxlbmd0aCk7Ci0JCX0gZWxzZQotCQkJcmVpbml0X3dyaXRlX2RhdGEoZXAsIHJlcSk7Ci0JCWJyZWFrOwotCi0JLyogdGhpcyBlbmRwb2ludCBpcyBub3JtYWxseSBhY3RpdmUgd2hpbGUgd2UncmUgY29uZmlndXJlZCAqLwotCWNhc2UgLUVDT05OQUJPUlRFRDoJCS8qIGhhcmR3YXJlIGZvcmNlZCBlcCByZXNldCAqLwotCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiByZXF1ZXN0IGRlcXVldWVkICovCi0JY2FzZSAtRVNIVVRET1dOOgkJLyogZGlzY29ubmVjdCBmcm9tIGhvc3QgKi8KLQkJVkRCRyhkZXYsICIlcyBnb25lICglZCksICVkLyVkXG4iLCBlcC0+bmFtZSwgc3RhdHVzLAotCQkJCXJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7Ci0JCWlmIChlcCA9PSBkZXYtPm91dF9lcCkKLQkJCWNoZWNrX3JlYWRfZGF0YShkZXYsIGVwLCByZXEpOwotCQlmcmVlX2VwX3JlcShlcCwgcmVxKTsKLQkJcmV0dXJuOwotCi0JY2FzZSAtRU9WRVJGTE9XOgkJLyogYnVmZmVyIG92ZXJydW4gb24gcmVhZCBtZWFucyB0aGF0Ci0JCQkJCSAqIHdlIGRpZG4ndCBwcm92aWRlIGEgYmlnIGVub3VnaAotCQkJCQkgKiBidWZmZXIuCi0JCQkJCSAqLwotCWRlZmF1bHQ6Ci0jaWYgMQotCQlEQkcoZGV2LCAiJXMgY29tcGxldGUgLS0+ICVkLCAlZC8lZFxuIiwgZXAtPm5hbWUsCi0JCQkJc3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOwotI2VuZGlmCi0JY2FzZSAtRVJFTU9URUlPOgkJLyogc2hvcnQgcmVhZCAqLwotCQlicmVhazsKLQl9Ci0KLQlzdGF0dXMgPSB1c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHN0YXR1cykgewotCQlFUlJPUihkZXYsICJraWxsICVzOiAgcmVzdWJtaXQgJWQgYnl0ZXMgLS0+ICVkXG4iLAotCQkJCWVwLT5uYW1lLCByZXEtPmxlbmd0aCwgc3RhdHVzKTsKLQkJdXNiX2VwX3NldF9oYWx0KGVwKTsKLQkJLyogRklYTUUgcmVjb3ZlciBsYXRlciAuLi4gc29tZWhvdyAqLwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqc291cmNlX3Npbmtfc3RhcnRfZXAoc3RydWN0IHVzYl9lcCAqZXApCi17Ci0Jc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7Ci0JaW50CQkJc3RhdHVzOwotCi0JcmVxID0gYWxsb2NfZXBfcmVxKGVwLCBidWZsZW4pOwotCWlmICghcmVxKQotCQlyZXR1cm4gTlVMTDsKLQotCW1lbXNldChyZXEtPmJ1ZiwgMCwgcmVxLT5sZW5ndGgpOwotCXJlcS0+Y29tcGxldGUgPSBzb3VyY2Vfc2lua19jb21wbGV0ZTsKLQotCWlmIChzdHJjbXAoZXAtPm5hbWUsIEVQX0lOX05BTUUpID09IDApCi0JCXJlaW5pdF93cml0ZV9kYXRhKGVwLCByZXEpOwotCWVsc2UKLQkJbWVtc2V0KHJlcS0+YnVmLCAweDU1LCByZXEtPmxlbmd0aCk7Ci0KLQlzdGF0dXMgPSB1c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHN0YXR1cykgewotCQlzdHJ1Y3QgemVyb19kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKLQotCQlFUlJPUihkZXYsICJzdGFydCAlcyAtLT4gJWRcbiIsIGVwLT5uYW1lLCBzdGF0dXMpOwotCQlmcmVlX2VwX3JlcShlcCwgcmVxKTsKLQkJcmVxID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gcmVxOwotfQotCi1zdGF0aWMgaW50IHNldF9zb3VyY2Vfc2lua19jb25maWcoc3RydWN0IHplcm9fZGV2ICpkZXYpCi17Ci0JaW50CQkJcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgdXNiX2VwCQkqZXA7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0+Z2FkZ2V0OwotCi0JZ2FkZ2V0X2Zvcl9lYWNoX2VwKGVwLCBnYWRnZXQpIHsKLQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOwotCi0JCS8qIG9uZSBlbmRwb2ludCB3cml0ZXMgKHNvdXJjZXMpIHplcm9lcyBpbiAodG8gdGhlIGhvc3QpICovCi0JCWlmIChzdHJjbXAoZXAtPm5hbWUsIEVQX0lOX05BTUUpID09IDApIHsKLQkJCWQgPSBlcF9kZXNjKGdhZGdldCwgJmhzX3NvdXJjZV9kZXNjLCAmZnNfc291cmNlX2Rlc2MpOwotCQkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZShlcCwgZCk7Ci0JCQlpZiAocmVzdWx0ID09IDApIHsKLQkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7Ci0JCQkJaWYgKHNvdXJjZV9zaW5rX3N0YXJ0X2VwKGVwKSAhPSBOVUxMKSB7Ci0JCQkJCWRldi0+aW5fZXAgPSBlcDsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCXVzYl9lcF9kaXNhYmxlKGVwKTsKLQkJCQlyZXN1bHQgPSAtRUlPOwotCQkJfQotCi0JCS8qIG9uZSBlbmRwb2ludCByZWFkcyAoc2lua3MpIGFueXRoaW5nIG91dCAoZnJvbSB0aGUgaG9zdCkgKi8KLQkJfSBlbHNlIGlmIChzdHJjbXAoZXAtPm5hbWUsIEVQX09VVF9OQU1FKSA9PSAwKSB7Ci0JCQlkID0gZXBfZGVzYyhnYWRnZXQsICZoc19zaW5rX2Rlc2MsICZmc19zaW5rX2Rlc2MpOwotCQkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZShlcCwgZCk7Ci0JCQlpZiAocmVzdWx0ID09IDApIHsKLQkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7Ci0JCQkJaWYgKHNvdXJjZV9zaW5rX3N0YXJ0X2VwKGVwKSAhPSBOVUxMKSB7Ci0JCQkJCWRldi0+b3V0X2VwID0gZXA7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQl1c2JfZXBfZGlzYWJsZShlcCk7Ci0JCQkJcmVzdWx0ID0gLUVJTzsKLQkJCX0KLQotCQkvKiBpZ25vcmUgYW55IG90aGVyIGVuZHBvaW50cyAqLwotCQl9IGVsc2UKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHN0b3Agb24gZXJyb3IgKi8KLQkJRVJST1IoZGV2LCAiY2FuJ3Qgc3RhcnQgJXMsIHJlc3VsdCAlZFxuIiwgZXAtPm5hbWUsIHJlc3VsdCk7Ci0JCWJyZWFrOwotCX0KLQlpZiAocmVzdWx0ID09IDApCi0JCURCRyhkZXYsICJidWZsZW4gJWRcbiIsIGJ1Zmxlbik7Ci0KLQkvKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFudXAgb24gZXJyb3IgKi8KLQlyZXR1cm4gcmVzdWx0OworCWRpc2FibGVfZXAoY2RldiwgaW4pOworCWRpc2FibGVfZXAoY2Rldiwgb3V0KTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgbG9vcGJhY2tfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBfX2luaXQgemVyb19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKLQlzdHJ1Y3QgemVyb19kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKLQlpbnQJCXN0YXR1cyA9IHJlcS0+c3RhdHVzOwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQotCWNhc2UgMDoJCQkJLyogbm9ybWFsIGNvbXBsZXRpb24/ICovCi0JCWlmIChlcCA9PSBkZXYtPm91dF9lcCkgewotCQkJLyogbG9vcCB0aGlzIE9VVCBwYWNrZXQgYmFjayBJTiB0byB0aGUgaG9zdCAqLwotCQkJcmVxLT56ZXJvID0gKHJlcS0+YWN0dWFsIDwgcmVxLT5sZW5ndGgpOwotCQkJcmVxLT5sZW5ndGggPSByZXEtPmFjdHVhbDsKLQkJCXN0YXR1cyA9IHVzYl9lcF9xdWV1ZShkZXYtPmluX2VwLCByZXEsIEdGUF9BVE9NSUMpOwotCQkJaWYgKHN0YXR1cyA9PSAwKQotCQkJCXJldHVybjsKLQotCQkJLyogInNob3VsZCBuZXZlciBnZXQgaGVyZSIgKi8KLQkJCUVSUk9SKGRldiwgImNhbid0IGxvb3AgJXMgdG8gJXM6ICVkXG4iLAotCQkJCWVwLT5uYW1lLCBkZXYtPmluX2VwLT5uYW1lLAotCQkJCXN0YXR1cyk7Ci0JCX0KLQotCQkvKiBxdWV1ZSB0aGUgYnVmZmVyIGZvciBzb21lIGxhdGVyIE9VVCBwYWNrZXQgKi8KLQkJcmVxLT5sZW5ndGggPSBidWZsZW47Ci0JCXN0YXR1cyA9IHVzYl9lcF9xdWV1ZShkZXYtPm91dF9lcCwgcmVxLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHN0YXR1cyA9PSAwKQotCQkJcmV0dXJuOwotCi0JCS8qICJzaG91bGQgbmV2ZXIgZ2V0IGhlcmUiICovCi0JCS8qIEZBTExUSFJPVUdIICovCi0KLQlkZWZhdWx0OgotCQlFUlJPUihkZXYsICIlcyBsb29wIGNvbXBsZXRlIC0tPiAlZCwgJWQvJWRcbiIsIGVwLT5uYW1lLAotCQkJCXN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKLQkJLyogRkFMTFRIUk9VR0ggKi8KLQotCS8qIE5PVEU6ICBzaW5jZSB0aGlzIGRyaXZlciBkb2Vzbid0IG1haW50YWluIGFuIGV4cGxpY2l0IHJlY29yZAotCSAqIG9mIHJlcXVlc3RzIGl0IHN1Ym1pdHRlZCAoanVzdCBtYWludGFpbnMgcWxlbiBjb3VudCksIHdlCi0JICogcmVseSBvbiB0aGUgaGFyZHdhcmUgZHJpdmVyIHRvIGNsZWFuIHVwIG9uIGRpc2Nvbm5lY3Qgb3IKLQkgKiBlbmRwb2ludCBkaXNhYmxlLgotCSAqLwotCWNhc2UgLUVDT05OQUJPUlRFRDoJCS8qIGhhcmR3YXJlIGZvcmNlZCBlcCByZXNldCAqLwotCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiByZXF1ZXN0IGRlcXVldWVkICovCi0JY2FzZSAtRVNIVVRET1dOOgkJLyogZGlzY29ubmVjdCBmcm9tIGhvc3QgKi8KLQkJZnJlZV9lcF9yZXEoZXAsIHJlcSk7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2xvb3BiYWNrX2NvbmZpZyhzdHJ1Y3QgemVyb19kZXYgKmRldikKLXsKLQlpbnQJCQlyZXN1bHQgPSAwOwotCXN0cnVjdCB1c2JfZXAJCSplcDsKLQlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7Ci0KLQlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewotCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmQ7Ci0KLQkJLyogb25lIGVuZHBvaW50IHdyaXRlcyBkYXRhIGJhY2sgSU4gdG8gdGhlIGhvc3QgKi8KLQkJaWYgKHN0cmNtcChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkgewotCQkJZCA9IGVwX2Rlc2MoZ2FkZ2V0LCAmaHNfc291cmNlX2Rlc2MsICZmc19zb3VyY2VfZGVzYyk7Ci0JCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlKGVwLCBkKTsKLQkJCWlmIChyZXN1bHQgPT0gMCkgewotCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKLQkJCQlkZXYtPmluX2VwID0gZXA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJLyogb25lIGVuZHBvaW50IGp1c3QgcmVhZHMgT1VUIHBhY2tldHMgKi8KLQkJfSBlbHNlIGlmIChzdHJjbXAoZXAtPm5hbWUsIEVQX09VVF9OQU1FKSA9PSAwKSB7Ci0JCQlkID0gZXBfZGVzYyhnYWRnZXQsICZoc19zaW5rX2Rlc2MsICZmc19zaW5rX2Rlc2MpOwotCQkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZShlcCwgZCk7Ci0JCQlpZiAocmVzdWx0ID09IDApIHsKLQkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7Ci0JCQkJZGV2LT5vdXRfZXAgPSBlcDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkvKiBpZ25vcmUgYW55IG90aGVyIGVuZHBvaW50cyAqLwotCQl9IGVsc2UKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHN0b3Agb24gZXJyb3IgKi8KLQkJRVJST1IoZGV2LCAiY2FuJ3QgZW5hYmxlICVzLCByZXN1bHQgJWRcbiIsIGVwLT5uYW1lLCByZXN1bHQpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBhbGxvY2F0ZSBhIGJ1bmNoIG9mIHJlYWQgYnVmZmVycyBhbmQgcXVldWUgdGhlbSBhbGwgYXQgb25jZS4KLQkgKiB3ZSBidWZmZXIgYXQgbW9zdCAncWxlbicgdHJhbnNmZXJzOyBmZXdlciBpZiBhbnkgbmVlZCBtb3JlCi0JICogdGhhbiAnYnVmbGVuJyBieXRlcyBlYWNoLgotCSAqLwotCWlmIChyZXN1bHQgPT0gMCkgewotCQlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKLQkJdW5zaWduZWQJCWk7Ci0KLQkJZXAgPSBkZXYtPm91dF9lcDsKLQkJZm9yIChpID0gMDsgaSA8IHFsZW4gJiYgcmVzdWx0ID09IDA7IGkrKykgewotCQkJcmVxID0gYWxsb2NfZXBfcmVxKGVwLCBidWZsZW4pOwotCQkJaWYgKHJlcSkgewotCQkJCXJlcS0+Y29tcGxldGUgPSBsb29wYmFja19jb21wbGV0ZTsKLQkJCQlyZXN1bHQgPSB1c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQyk7Ci0JCQkJaWYgKHJlc3VsdCkKLQkJCQkJREJHKGRldiwgIiVzIHF1ZXVlIHJlcSAtLT4gJWRcbiIsCi0JCQkJCQkJZXAtPm5hbWUsIHJlc3VsdCk7Ci0JCQl9IGVsc2UKLQkJCQlyZXN1bHQgPSAtRU5PTUVNOwotCQl9Ci0JfQotCWlmIChyZXN1bHQgPT0gMCkKLQkJREJHKGRldiwgInFsZW4gJWQsIGJ1ZmxlbiAlZFxuIiwgcWxlbiwgYnVmbGVuKTsKLQotCS8qIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW51cCBvbiBlcnJvciAqLwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB2b2lkIHplcm9fcmVzZXRfY29uZmlnKHN0cnVjdCB6ZXJvX2RldiAqZGV2KQotewotCWlmIChkZXYtPmNvbmZpZyA9PSAwKQotCQlyZXR1cm47Ci0KLQlEQkcoZGV2LCAicmVzZXQgY29uZmlnXG4iKTsKLQotCS8qIGp1c3QgZGlzYWJsZSBlbmRwb2ludHMsIGZvcmNpbmcgY29tcGxldGlvbiBvZiBwZW5kaW5nIGkvby4KLQkgKiBhbGwgb3VyIGNvbXBsZXRpb24gaGFuZGxlcnMgZnJlZSB0aGVpciByZXF1ZXN0cyBpbiB0aGlzIGNhc2UuCi0JICovCi0JaWYgKGRldi0+aW5fZXApIHsKLQkJdXNiX2VwX2Rpc2FibGUoZGV2LT5pbl9lcCk7Ci0JCWRldi0+aW5fZXAgPSBOVUxMOwotCX0KLQlpZiAoZGV2LT5vdXRfZXApIHsKLQkJdXNiX2VwX2Rpc2FibGUoZGV2LT5vdXRfZXApOwotCQlkZXYtPm91dF9lcCA9IE5VTEw7Ci0JfQotCWRldi0+Y29uZmlnID0gMDsKLQlkZWxfdGltZXIoJmRldi0+cmVzdW1lKTsKLX0KLQotLyogY2hhbmdlIG91ciBvcGVyYXRpb25hbCBjb25maWcuICB0aGlzIGNvZGUgbXVzdCBhZ3JlZSB3aXRoIHRoZSBjb2RlCi0gKiB0aGF0IHJldHVybnMgY29uZmlnIGRlc2NyaXB0b3JzLCBhbmQgYWx0c2V0dGluZyBjb2RlLgotICoKLSAqIGl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgcG93ZXIgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnMuIHNvbWUKLSAqIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IG5vdCB3b3JrIHdpdGggb3VyIGN1cnJlbnQgcG93ZXIgc291cmNlcy4KLSAqCi0gKiBub3RlIHRoYXQgc29tZSBkZXZpY2UgY29udHJvbGxlciBoYXJkd2FyZSB3aWxsIGNvbnN0cmFpbiB3aGF0IHRoaXMKLSAqIGNvZGUgY2FuIGRvLCBwZXJoYXBzIGJ5IGRpc2FsbG93aW5nIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBvcgotICogYnkgbGltaXRpbmcgY29uZmlndXJhdGlvbiBjaG9pY2VzIChsaWtlIHRoZSBweGEyeHgpLgotICovCi1zdGF0aWMgaW50IHplcm9fc2V0X2NvbmZpZyhzdHJ1Y3QgemVyb19kZXYgKmRldiwgdW5zaWduZWQgbnVtYmVyKQotewotCWludAkJCXJlc3VsdCA9IDA7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0+Z2FkZ2V0OwotCi0JaWYgKG51bWJlciA9PSBkZXYtPmNvbmZpZykKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpICYmIGRldi0+Y29uZmlnKSB7Ci0JCS8qIHR4IGZpZm8gaXMgZnVsbCwgYnV0IHdlIGNhbid0IGNsZWFyIGl0Li4uKi8KLQkJRVJST1IoZGV2LCAiY2FuJ3QgY2hhbmdlIGNvbmZpZ3VyYXRpb25zXG4iKTsKLQkJcmV0dXJuIC1FU1BJUEU7Ci0JfQotCXplcm9fcmVzZXRfY29uZmlnKGRldik7Ci0KLQlzd2l0Y2ggKG51bWJlcikgewotCWNhc2UgQ09ORklHX1NPVVJDRV9TSU5LOgotCQlyZXN1bHQgPSBzZXRfc291cmNlX3NpbmtfY29uZmlnKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgQ09ORklHX0xPT1BCQUNLOgotCQlyZXN1bHQgPSBzZXRfbG9vcGJhY2tfY29uZmlnKGRldik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCS8qIEZBTEwgVEhST1VHSCAqLwotCWNhc2UgMDoKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlpZiAoIXJlc3VsdCAmJiAoIWRldi0+aW5fZXAgfHwgIWRldi0+b3V0X2VwKSkKLQkJcmVzdWx0ID0gLUVOT0RFVjsKLQlpZiAocmVzdWx0KQotCQl6ZXJvX3Jlc2V0X2NvbmZpZyhkZXYpOwotCWVsc2UgewotCQljaGFyICpzcGVlZDsKLQotCQlzd2l0Y2ggKGdhZGdldC0+c3BlZWQpIHsKLQkJY2FzZSBVU0JfU1BFRURfTE9XOglzcGVlZCA9ICJsb3ciOyBicmVhazsKLQkJY2FzZSBVU0JfU1BFRURfRlVMTDoJc3BlZWQgPSAiZnVsbCI7IGJyZWFrOwotCQljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsgYnJlYWs7Ci0JCWRlZmF1bHQ6CQlzcGVlZCA9ICI/IjsgYnJlYWs7Ci0JCX0KLQotCQlkZXYtPmNvbmZpZyA9IG51bWJlcjsKLQkJSU5GTyhkZXYsICIlcyBzcGVlZCBjb25maWcgIyVkOiAlc1xuIiwgc3BlZWQsIG51bWJlciwKLQkJCQkobnVtYmVyID09IENPTkZJR19TT1VSQ0VfU0lOSykKLQkJCQkJPyBzb3VyY2Vfc2luayA6IGxvb3BiYWNrKTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHZvaWQgemVyb19zZXR1cF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCi17Ci0JaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQotCQlEQkcoKHN0cnVjdCB6ZXJvX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGEsCi0JCQkJInNldHVwIGNvbXBsZXRlIC0tPiAlZCwgJWQvJWRcbiIsCi0JCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7Ci19Ci0KLS8qCi0gKiBUaGUgc2V0dXAoKSBjYWxsYmFjayBpbXBsZW1lbnRzIGFsbCB0aGUgZXAwIGZ1bmN0aW9uYWxpdHkgdGhhdCdzCi0gKiBub3QgaGFuZGxlZCBsb3dlciBkb3duLCBpbiBoYXJkd2FyZSBvciB0aGUgaGFyZHdhcmUgZHJpdmVyIChsaWtlCi0gKiBkZXZpY2UgYW5kIGVuZHBvaW50IGZlYXR1cmUgZmxhZ3MsIGFuZCB0aGVpciBzdGF0dXMpLiAgSXQncyBhbGwKLSAqIGhvdXNla2VlcGluZyBmb3IgdGhlIGdhZGdldCBmdW5jdGlvbiB3ZSdyZSBpbXBsZW1lbnRpbmcuICBNb3N0IG9mCi0gKiB0aGUgd29yayBpcyBpbiBjb25maWctc3BlY2lmaWMgc2V0dXAuCi0gKi8KLXN0YXRpYyBpbnQKLXplcm9fc2V0dXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKLXsKLQlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGRldi0+cmVxOwotCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7Ci0JdTE2CQkJd19pbmRleCA9IGxlMTZfdG9fY3B1KGN0cmwtPndJbmRleCk7Ci0JdTE2CQkJd192YWx1ZSA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7Ci0JdTE2CQkJd19sZW5ndGggPSBsZTE2X3RvX2NwdShjdHJsLT53TGVuZ3RoKTsKLQotCS8qIHVzdWFsbHkgdGhpcyBzdG9yZXMgcmVwbHkgZGF0YSBpbiB0aGUgcHJlLWFsbG9jYXRlZCBlcDAgYnVmZmVyLAotCSAqIGJ1dCBjb25maWcgY2hhbmdlIGV2ZW50cyB3aWxsIHJlY29uZmlndXJlIGhhcmR3YXJlLgotCSAqLwotCXJlcS0+emVybyA9IDA7Ci0Jc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgewotCi0JY2FzZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCi0JCQlnb3RvIHVua25vd247Ci0JCXN3aXRjaCAod192YWx1ZSA+PiA4KSB7Ci0KLQkJY2FzZSBVU0JfRFRfREVWSUNFOgotCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIHNpemVvZiBkZXZpY2VfZGVzYyk7Ci0JCQltZW1jcHkocmVxLT5idWYsICZkZXZpY2VfZGVzYywgdmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI6Ci0JCQlpZiAoIWdhZGdldF9pc19kdWFsc3BlZWQoZ2FkZ2V0KSkKLQkJCQlicmVhazsKLQkJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSBzaXplb2YgZGV2X3F1YWxpZmllcik7Ci0JCQltZW1jcHkocmVxLT5idWYsICZkZXZfcXVhbGlmaWVyLCB2YWx1ZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6Ci0JCQlpZiAoIWdhZGdldF9pc19kdWFsc3BlZWQoZ2FkZ2V0KSkKLQkJCQlicmVhazsKLQkJCS8vIEZBTExUSFJPVUdICi0JCWNhc2UgVVNCX0RUX0NPTkZJRzoKLQkJCXZhbHVlID0gY29uZmlnX2J1ZihnYWRnZXQsIHJlcS0+YnVmLAotCQkJCQl3X3ZhbHVlID4+IDgsCi0JCQkJCXdfdmFsdWUgJiAweGZmKTsKLQkJCWlmICh2YWx1ZSA+PSAwKQotCQkJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSB2YWx1ZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFVTQl9EVF9TVFJJTkc6Ci0JCQkvKiB3SW5kZXggPT0gbGFuZ3VhZ2UgY29kZS4KLQkJCSAqIHRoaXMgZHJpdmVyIG9ubHkgaGFuZGxlcyBvbmUgbGFuZ3VhZ2UsIHlvdSBjYW4KLQkJCSAqIGFkZCBzdHJpbmcgdGFibGVzIGZvciBvdGhlciBsYW5ndWFnZXMsIHVzaW5nCi0JCQkgKiBhbnkgVVRGLTggY2hhcmFjdGVycwotCQkJICovCi0JCQl2YWx1ZSA9IHVzYl9nYWRnZXRfZ2V0X3N0cmluZygmc3RyaW5ndGFiLAotCQkJCQl3X3ZhbHVlICYgMHhmZiwgcmVxLT5idWYpOwotCQkJaWYgKHZhbHVlID49IDApCi0JCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIHZhbHVlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JLyogY3VycmVudGx5IHR3byBjb25maWdzLCB0d28gc3BlZWRzICovCi0JY2FzZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDApCi0JCQlnb3RvIHVua25vd247Ci0JCWlmIChnYWRnZXQtPmFfaG5wX3N1cHBvcnQpCi0JCQlEQkcoZGV2LCAiSE5QIGF2YWlsYWJsZVxuIik7Ci0JCWVsc2UgaWYgKGdhZGdldC0+YV9hbHRfaG5wX3N1cHBvcnQpCi0JCQlEQkcoZGV2LCAiSE5QIG5lZWRzIGEgZGlmZmVyZW50IHJvb3QgcG9ydFxuIik7Ci0JCWVsc2UKLQkJCVZEQkcoZGV2LCAiSE5QIGluYWN0aXZlXG4iKTsKLQkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOwotCQl2YWx1ZSA9IHplcm9fc2V0X2NvbmZpZyhkZXYsIHdfdmFsdWUpOwotCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKLQkJYnJlYWs7Ci0JY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCi0JCQlnb3RvIHVua25vd247Ci0JCSoodTggKilyZXEtPmJ1ZiA9IGRldi0+Y29uZmlnOwotCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgMSk7Ci0JCWJyZWFrOwotCi0JLyogdW50aWwgd2UgYWRkIGFsdHNldHRpbmcgc3VwcG9ydCwgb3Igb3RoZXIgaW50ZXJmYWNlcywKLQkgKiBvbmx5IDAvMCBhcmUgcG9zc2libGUuICBweGEyeHggb25seSBzdXBwb3J0cyAwLzAgKHBvb3JseSkKLQkgKiBhbmQgYWxyZWFkeSBraWxsZWQgcGVuZGluZyBlbmRwb2ludCBJL08uCi0JICovCi0JY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6Ci0JCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0lOVEVSRkFDRSkKLQkJCWdvdG8gdW5rbm93bjsKLQkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOwotCQlpZiAoZGV2LT5jb25maWcgJiYgd19pbmRleCA9PSAwICYmIHdfdmFsdWUgPT0gMCkgewotCQkJdTgJCWNvbmZpZyA9IGRldi0+Y29uZmlnOwotCi0JCQkvKiByZXNldHMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24sIGZvcmdldHMgYWJvdXQKLQkJCSAqIHByZXZpb3VzIHRyYW5zYWN0aW9uIHN0YXRlIChxdWV1ZWQgYnVmcywgZXRjKQotCQkJICogYW5kIHJlLWluaXRzIGVuZHBvaW50IHN0YXRlICh0b2dnbGUgZXRjKQotCQkJICogbm8gcmVzcG9uc2UgcXVldWVkLCBqdXN0IHplcm8gc3RhdHVzID09IHN1Y2Nlc3MuCi0JCQkgKiBpZiB3ZSBoYWQgbW9yZSB0aGFuIG9uZSBpbnRlcmZhY2Ugd2UgY291bGRuJ3QKLQkJCSAqIHVzZSB0aGlzICJyZXNldCB0aGUgY29uZmlnIiBzaG9ydGN1dC4KLQkJCSAqLwotCQkJemVyb19yZXNldF9jb25maWcoZGV2KTsKLQkJCXplcm9fc2V0X2NvbmZpZyhkZXYsIGNvbmZpZyk7Ci0JCQl2YWx1ZSA9IDA7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7Ci0JCWJyZWFrOwotCWNhc2UgVVNCX1JFUV9HRVRfSU5URVJGQUNFOgotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOfFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQotCQkJZ290byB1bmtub3duOwotCQlpZiAoIWRldi0+Y29uZmlnKQotCQkJYnJlYWs7Ci0JCWlmICh3X2luZGV4ICE9IDApIHsKLQkJCXZhbHVlID0gLUVET007Ci0JCQlicmVhazsKLQkJfQotCQkqKHU4ICopcmVxLT5idWYgPSAwOwotCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgMSk7Ci0JCWJyZWFrOwotCi0JLyoKLQkgKiBUaGVzZSBhcmUgdGhlIHNhbWUgdmVuZG9yLXNwZWNpZmljIHJlcXVlc3RzIHN1cHBvcnRlZCBieQotCSAqIEludGVsJ3MgVVNCIDIuMCBjb21wbGlhbmNlIHRlc3QgZGV2aWNlcy4gIFdlIGV4Y2VlZCB0aGF0Ci0JICogZGV2aWNlIHNwZWMgYnkgYWxsb3dpbmcgbXVsdGlwbGUtcGFja2V0IHJlcXVlc3RzLgotCSAqLwotCWNhc2UgMHg1YjoJLyogY29udHJvbCBXUklURSB0ZXN0IC0tIGZpbGwgdGhlIGJ1ZmZlciAqLwotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX09VVHxVU0JfVFlQRV9WRU5ET1IpKQotCQkJZ290byB1bmtub3duOwotCQlpZiAod192YWx1ZSB8fCB3X2luZGV4KQotCQkJYnJlYWs7Ci0JCS8qIGp1c3QgcmVhZCB0aGF0IG1hbnkgYnl0ZXMgaW50byB0aGUgYnVmZmVyICovCi0JCWlmICh3X2xlbmd0aCA+IFVTQl9CVUZTSVopCi0JCQlicmVhazsKLQkJdmFsdWUgPSB3X2xlbmd0aDsKLQkJYnJlYWs7Ci0JY2FzZSAweDVjOgkvKiBjb250cm9sIFJFQUQgdGVzdCAtLSByZXR1cm4gdGhlIGJ1ZmZlciAqLwotCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOfFVTQl9UWVBFX1ZFTkRPUikpCi0JCQlnb3RvIHVua25vd247Ci0JCWlmICh3X3ZhbHVlIHx8IHdfaW5kZXgpCi0JCQlicmVhazsKLQkJLyogZXhwZWN0IHRob3NlIGJ5dGVzIGFyZSBzdGlsbCBpbiB0aGUgYnVmZmVyOyBzZW5kIGJhY2sgKi8KLQkJaWYgKHdfbGVuZ3RoID4gVVNCX0JVRlNJWgotCQkJCXx8IHdfbGVuZ3RoICE9IHJlcS0+bGVuZ3RoKQotCQkJYnJlYWs7Ci0JCXZhbHVlID0gd19sZW5ndGg7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLXVua25vd246Ci0JCVZEQkcoZGV2LAotCQkJInVua25vd24gY29udHJvbCByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAotCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKLQkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKLQl9Ci0KLQkvKiByZXNwb25kIHdpdGggZGF0YSB0cmFuc2ZlciBiZWZvcmUgc3RhdHVzIHBoYXNlPyAqLwotCWlmICh2YWx1ZSA+PSAwKSB7Ci0JCXJlcS0+bGVuZ3RoID0gdmFsdWU7Ci0JCXJlcS0+emVybyA9IHZhbHVlIDwgd19sZW5ndGg7Ci0JCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOwotCQlpZiAodmFsdWUgPCAwKSB7Ci0JCQlEQkcoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7Ci0JCQlyZXEtPnN0YXR1cyA9IDA7Ci0JCQl6ZXJvX3NldHVwX2NvbXBsZXRlKGdhZGdldC0+ZXAwLCByZXEpOwotCQl9Ci0JfQotCi0JLyogZGV2aWNlIGVpdGhlciBzdGFsbHMgKHZhbHVlIDwgMCkgb3IgcmVwb3J0cyBzdWNjZXNzICovCi0JcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgdm9pZCB6ZXJvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKLXsKLQlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKLQl6ZXJvX3Jlc2V0X2NvbmZpZyhkZXYpOwotCi0JLyogYSBtb3JlIHNpZ25pZmljYW50IGFwcGxpY2F0aW9uIG1pZ2h0IGhhdmUgc29tZSBub24tdXNiCi0JICogYWN0aXZpdGllcyB0byBxdWllc2NlIGhlcmUsIHNhdmluZyByZXNvdXJjZXMgbGlrZSBwb3dlcgotCSAqIG9yIHB1c2hpbmcgdGhlIG5vdGlmaWNhdGlvbiB1cCBhIG5ldHdvcmsgc3RhY2suCi0JICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBuZXh0IHdlIG1heSBnZXQgc2V0dXAoKSBjYWxscyB0byBlbnVtZXJhdGUgbmV3IGNvbm5lY3Rpb25zOwotCSAqIG9yIGFuIHVuYmluZCgpIGR1cmluZyBzaHV0ZG93biAoaW5jbHVkaW5nIHJlbW92aW5nIG1vZHVsZSkuCi0JICovCi19Ci0KLXN0YXRpYyB2b2lkIHplcm9fYXV0b3Jlc3VtZSh1bnNpZ25lZCBsb25nIF9kZXYpCi17Ci0Jc3RydWN0IHplcm9fZGV2CSpkZXYgPSAoc3RydWN0IHplcm9fZGV2ICopIF9kZXY7Ci0JaW50CQlzdGF0dXM7Ci0KLQkvKiBub3JtYWxseSB0aGUgaG9zdCB3b3VsZCBiZSB3b2tlbiB1cCBmb3Igc29tZXRoaW5nCi0JICogbW9yZSBzaWduaWZpY2FudCB0aGFuIGp1c3QgYSB0aW1lciBmaXJpbmcuLi4KLQkgKi8KLQlpZiAoZGV2LT5nYWRnZXQtPnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7Ci0JCXN0YXR1cyA9IHVzYl9nYWRnZXRfd2FrZXVwKGRldi0+Z2FkZ2V0KTsKLQkJREJHKGRldiwgIndha2V1cCAtLT4gJWRcbiIsIHN0YXR1cyk7Ci0JfQotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZCB6ZXJvX3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQotewotCXN0cnVjdCB6ZXJvX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwotCi0JREJHKGRldiwgInVuYmluZFxuIik7Ci0KLQkvKiB3ZSd2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovCi0JaWYgKGRldi0+cmVxKSB7Ci0JCWRldi0+cmVxLT5sZW5ndGggPSBVU0JfQlVGU0laOwotCQlmcmVlX2VwX3JlcShnYWRnZXQtPmVwMCwgZGV2LT5yZXEpOwotCX0KLQlkZWxfdGltZXJfc3luYygmZGV2LT5yZXN1bWUpOwotCWtmcmVlKGRldik7Ci0Jc2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHplcm9fYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQotewotCXN0cnVjdCB6ZXJvX2RldgkJKmRldjsKLQlzdHJ1Y3QgdXNiX2VwCQkqZXA7CiAJaW50CQkJZ2NudW07CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGNkZXYtPmdhZGdldDsKKwlpbnQJCQlpZDsKIAotCS8qIEZJWE1FIHRoaXMgY2FuJ3QgeWV0IHdvcmsgcmlnaHQgd2l0aCBTSCAuLi4gaXQgaGFzIG9ubHkKLQkgKiBvbmUgY29uZmlndXJhdGlvbiwgbnVtYmVyZWQgb25lLgorCS8qIEFsbG9jYXRlIHN0cmluZyBkZXNjcmlwdG9yIG51bWJlcnMgLi4uIG5vdGUgdGhhdCBzdHJpbmcKKwkgKiBjb250ZW50cyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY29tcG9zaXRlX2RldiBnbHVlLgogCSAqLwotCWlmIChnYWRnZXRfaXNfc2goZ2FkZ2V0KSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWQgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOworCWlmIChpZCA8IDApCisJCXJldHVybiBpZDsKKwlzdHJpbmdzX2RldltTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWF0uaWQgPSBpZDsKKwlkZXZpY2VfZGVzYy5pTWFudWZhY3R1cmVyID0gaWQ7CiAKLQkvKiBCdWxrLW9ubHkgZHJpdmVycyBsaWtlIHRoaXMgb25lIFNIT1VMRCBiZSBhYmxlIHRvCi0JICogYXV0b2NvbmZpZ3VyZSBvbiBhbnkgc2FuZSB1c2IgY29udHJvbGxlciBkcml2ZXIsCi0JICogYnV0IHRoZXJlIG1heSBhbHNvIGJlIGltcG9ydGFudCBxdWlya3MgdG8gYWRkcmVzcy4KKwlpZCA9IHVzYl9zdHJpbmdfaWQoY2Rldik7CisJaWYgKGlkIDwgMCkKKwkJcmV0dXJuIGlkOworCXN0cmluZ3NfZGV2W1NUUklOR19QUk9EVUNUX0lEWF0uaWQgPSBpZDsKKwlkZXZpY2VfZGVzYy5pUHJvZHVjdCA9IGlkOworCisJaWQgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOworCWlmIChpZCA8IDApCisJCXJldHVybiBpZDsKKwlzdHJpbmdzX2RldltTVFJJTkdfU0VSSUFMX0lEWF0uaWQgPSBpZDsKKwlkZXZpY2VfZGVzYy5pU2VyaWFsTnVtYmVyID0gaWQ7CisKKwkvKiBSZWdpc3RlciBwcmltYXJ5LCB0aGVuIHNlY29uZGFyeSBjb25maWd1cmF0aW9uLiAgTm90ZSB0aGF0CisJICogU0gzIG9ubHkgYWxsb3dzIG9uZSBjb25maWcuLi4KIAkgKi8KLQl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldChnYWRnZXQpOwotCWVwID0gdXNiX2VwX2F1dG9jb25maWcoZ2FkZ2V0LCAmZnNfc291cmNlX2Rlc2MpOwotCWlmICghZXApIHsKLWF1dG9jb25mX2ZhaWw6Ci0JCXByX2VycigiJXM6IGNhbid0IGF1dG9jb25maWd1cmUgb24gJXNcbiIsCi0JCQlzaG9ydG5hbWUsIGdhZGdldC0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOworCWlmIChsb29wZGVmYXVsdCkgeworCQlsb29wYmFja19hZGQoY2Rldik7CisJCWlmICghZ2FkZ2V0X2lzX3NoKGdhZGdldCkpCisJCQlzb3VyY2VzaW5rX2FkZChjZGV2KTsKKwl9IGVsc2UgeworCQlzb3VyY2VzaW5rX2FkZChjZGV2KTsKKwkJaWYgKCFnYWRnZXRfaXNfc2goZ2FkZ2V0KSkKKwkJCWxvb3BiYWNrX2FkZChjZGV2KTsKIAl9Ci0JRVBfSU5fTkFNRSA9IGVwLT5uYW1lOwotCWVwLT5kcml2ZXJfZGF0YSA9IGVwOwkvKiBjbGFpbSAqLwotCi0JZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhnYWRnZXQsICZmc19zaW5rX2Rlc2MpOwotCWlmICghZXApCi0JCWdvdG8gYXV0b2NvbmZfZmFpbDsKLQlFUF9PVVRfTkFNRSA9IGVwLT5uYW1lOwotCWVwLT5kcml2ZXJfZGF0YSA9IGVwOwkvKiBjbGFpbSAqLwogCiAJZ2NudW0gPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGdhZGdldCk7CiAJaWYgKGdjbnVtID49IDApCkBAIC0xMTE1LDE0NCArMjQxLDQ0IEBACiAJZWxzZSB7CiAJCS8qIGdhZGdldCB6ZXJvIGlzIHNvIHNpbXBsZSAoZm9yIG5vdywgbm8gYWx0c2V0dGluZ3MpIHRoYXQKIAkJICogaXQgU0hPVUxEIE5PVCBoYXZlIHByb2JsZW1zIHdpdGggYnVsay1jYXBhYmxlIGhhcmR3YXJlLgotCQkgKiBzbyB3YXJuIGFib3V0IHVucmNvZ25pemVkIGNvbnRyb2xsZXJzLCBkb24ndCBwYW5pYy4KKwkJICogc28ganVzdCB3YXJuIGFib3V0IHVucmNvZ25pemVkIGNvbnRyb2xsZXJzIC0tIGRvbid0IHBhbmljLgogCQkgKgogCQkgKiB0aGluZ3MgbGlrZSBjb25maWd1cmF0aW9uIGFuZCBhbHRzZXR0aW5nIG51bWJlcmluZwogCQkgKiBjYW4gbmVlZCBoYXJkd2FyZS1zcGVjaWZpYyBhdHRlbnRpb24gdGhvdWdoLgogCQkgKi8KIAkJcHJfd2FybmluZygiJXM6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKLQkJCXNob3J0bmFtZSwgZ2FkZ2V0LT5uYW1lKTsKKwkJCWxvbmduYW1lLCBnYWRnZXQtPm5hbWUpOwogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4OTk5OSk7CiAJfQogCiAKLQkvKiBvaywgd2UgbWFkZSBzZW5zZSBvZiB0aGUgaGFyZHdhcmUgLi4uICovCi0JZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKLQlkZXYtPmdhZGdldCA9IGdhZGdldDsKLQlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBkZXYpOwotCi0JaW5pdF90aW1lcigmZGV2LT5yZXN1bWUpOwotCWRldi0+cmVzdW1lLmZ1bmN0aW9uID0gemVyb19hdXRvcmVzdW1lOwotCWRldi0+cmVzdW1lLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwotCi0JLyogcHJlYWxsb2NhdGUgY29udHJvbCByZXNwb25zZSBhbmQgYnVmZmVyICovCi0JZGV2LT5yZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChnYWRnZXQtPmVwMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPnJlcSkKLQkJZ290byBlbm9tZW07Ci0JZGV2LT5yZXEtPmJ1ZiA9IGttYWxsb2MoVVNCX0JVRlNJWiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPnJlcS0+YnVmKQotCQlnb3RvIGVub21lbTsKLQotCWRldi0+cmVxLT5jb21wbGV0ZSA9IHplcm9fc2V0dXBfY29tcGxldGU7Ci0KLQlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OwotCi0JaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoZ2FkZ2V0KSkgewotCQkvKiBhc3N1bWUgZXAwIHVzZXMgdGhlIHNhbWUgdmFsdWUgZm9yIGJvdGggc3BlZWRzIC4uLiAqLwotCQlkZXZfcXVhbGlmaWVyLmJNYXhQYWNrZXRTaXplMCA9IGRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMDsKLQotCQkvKiBhbmQgdGhhdCBhbGwgZW5kcG9pbnRzIGFyZSBkdWFsLXNwZWVkICovCi0JCWhzX3NvdXJjZV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQotCQkJCWZzX3NvdXJjZV9kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0JCWhzX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19zaW5rX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKLQl9Ci0KLQlpZiAoZ2FkZ2V0X2lzX290ZyhnYWRnZXQpKSB7Ci0JCW90Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKLQkJc291cmNlX3NpbmtfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7Ci0JCWxvb3BiYWNrX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOwotCX0KLQotCXVzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkKGdhZGdldCk7Ci0KLQlpZiAoYXV0b3Jlc3VtZSkgewotCQlzb3VyY2Vfc2lua19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKLQkJbG9vcGJhY2tfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7Ci0JfQotCi0JZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gZGV2OwotCi0JSU5GTyhkZXYsICIlcywgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBsb25nbmFtZSk7Ci0JSU5GTyhkZXYsICJ1c2luZyAlcywgT1VUICVzIElOICVzXG4iLCBnYWRnZXQtPm5hbWUsCi0JCUVQX09VVF9OQU1FLCBFUF9JTl9OQU1FKTsKKwlJTkZPKGNkZXYsICIlcywgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBsb25nbmFtZSk7CiAKIAlzbnByaW50ZihtYW51ZmFjdHVyZXIsIHNpemVvZiBtYW51ZmFjdHVyZXIsICIlcyAlcyB3aXRoICVzIiwKIAkJaW5pdF91dHNuYW1lKCktPnN5c25hbWUsIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAogCQlnYWRnZXQtPm5hbWUpOwogCiAJcmV0dXJuIDA7Ci0KLWVub21lbToKLQl6ZXJvX3VuYmluZChnYWRnZXQpOwotCXJldHVybiAtRU5PTUVNOwogfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZCB6ZXJvX3N1c3BlbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKLXsKLQlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKLQotCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQotCQlyZXR1cm47Ci0KLQlpZiAoYXV0b3Jlc3VtZSkgewotCQltb2RfdGltZXIoJmRldi0+cmVzdW1lLCBqaWZmaWVzICsgKEhaICogYXV0b3Jlc3VtZSkpOwotCQlEQkcoZGV2LCAic3VzcGVuZCwgd2FrZXVwIGluICVkIHNlY29uZHNcbiIsIGF1dG9yZXN1bWUpOwotCX0gZWxzZQotCQlEQkcoZGV2LCAic3VzcGVuZFxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHplcm9fcmVzdW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCi17Ci0Jc3RydWN0IHplcm9fZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7Ci0KLQlEQkcoZGV2LCAicmVzdW1lXG4iKTsKLQlkZWxfdGltZXIoJmRldi0+cmVzdW1lKTsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIHplcm9fZHJpdmVyID0gewotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAotCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKLSNlbHNlCi0JLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLAotI2VuZGlmCi0JLmZ1bmN0aW9uCT0gKGNoYXIgKikgbG9uZ25hbWUsCitzdGF0aWMgc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyIHplcm9fZHJpdmVyID0geworCS5uYW1lCQk9ICJ6ZXJvIiwKKwkuZGV2CQk9ICZkZXZpY2VfZGVzYywKKwkuc3RyaW5ncwk9IGRldl9zdHJpbmdzLAogCS5iaW5kCQk9IHplcm9fYmluZCwKLQkudW5iaW5kCQk9IF9fZXhpdF9wKHplcm9fdW5iaW5kKSwKLQotCS5zZXR1cAkJPSB6ZXJvX3NldHVwLAotCS5kaXNjb25uZWN0CT0gemVyb19kaXNjb25uZWN0LAotCi0JLnN1c3BlbmQJPSB6ZXJvX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSB6ZXJvX3Jlc3VtZSwKLQotCS5kcml2ZXIJCT0gewotCQkubmFtZQkJPSAoY2hhciAqKSBzaG9ydG5hbWUsCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQl9LAogfTsKIAogTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKCZ6ZXJvX2RyaXZlcik7CisJcmV0dXJuIHVzYl9jb21wb3NpdGVfcmVnaXN0ZXIoJnplcm9fZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KGluaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCh2b2lkKQogewotCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoJnplcm9fZHJpdmVyKTsKKwl1c2JfY29tcG9zaXRlX3VucmVnaXN0ZXIoJnplcm9fZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KGNsZWFudXApOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKaW5kZXggMDhhNDMzNS4uYmY2OWY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwpAQCAtMTksMTc4ICsxOSw2NiBAQAogI2RlZmluZSBVU0JfTUNGR19SRENPTUIgICAoMTw8MzApCiAjZGVmaW5lIFVTQl9NQ0ZHX1NTREVOICAgICgxPDwyMykKICNkZWZpbmUgVVNCX01DRkdfUEhZUExMRU4gKDE8PDE5KQorI2RlZmluZSBVU0JfTUNGR19VQ0VDTEtFTiAoMTw8MTgpCiAjZGVmaW5lIFVTQl9NQ0ZHX0VIQ0NMS0VOICgxPDwxNykKKyNpZmRlZiBDT05GSUdfRE1BX0NPSEVSRU5UCiAjZGVmaW5lIFVTQl9NQ0ZHX1VDQU0gICAgICgxPDw3KQorI2Vsc2UKKyNkZWZpbmUgVVNCX01DRkdfVUNBTSAgICAgKDApCisjZW5kaWYKICNkZWZpbmUgVVNCX01DRkdfRUJNRU4gICAgKDE8PDMpCiAjZGVmaW5lIFVTQl9NQ0ZHX0VNRU1FTiAgICgxPDwyKQogCi0jZGVmaW5lIFVTQkhfRU5BQkxFX0NFICAgIChVU0JfTUNGR19QSFlQTExFTiB8IFVTQl9NQ0ZHX0VIQ0NMS0VOKQorI2RlZmluZSBVU0JIX0VOQUJMRV9DRQkoVVNCX01DRkdfUEhZUExMRU4gfCBVU0JfTUNGR19FSENDTEtFTikKKyNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAoVVNCX01DRkdfUEZFTiAgfCBVU0JfTUNGR19SRENPTUIgfAlcCisJCQkgIFVTQkhfRU5BQkxFX0NFIHwgVVNCX01DRkdfU1NERU4gIHwJXAorCQkJICBVU0JfTUNGR19VQ0FNICB8IFVTQl9NQ0ZHX0VCTUVOICB8CVwKKwkJCSAgVVNCX01DRkdfRU1FTUVOKQogCi0jaWZkZWYgQ09ORklHX0RNQV9DT0hFUkVOVAotI2RlZmluZSBVU0JIX0VOQUJMRV9JTklUICAoVVNCSF9FTkFCTEVfQ0UgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfUEZFTiB8IFVTQl9NQ0ZHX1JEQ09NQiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgfCBVU0JfTUNGR19TU0RFTiB8IFVTQl9NQ0ZHX1VDQU0gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfRUJNRU4gfCBVU0JfTUNGR19FTUVNRU4pCi0jZWxzZQotI2RlZmluZSBVU0JIX0VOQUJMRV9JTklUICAoVVNCSF9FTkFCTEVfQ0UgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfUEZFTiB8IFVTQl9NQ0ZHX1JEQ09NQiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgfCBVU0JfTUNGR19TU0RFTiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgfCBVU0JfTUNGR19FQk1FTiB8IFVTQl9NQ0ZHX0VNRU1FTikKLSNlbmRpZgogI2RlZmluZSBVU0JIX0RJU0FCTEUgICAgICAoVVNCX01DRkdfRUJNRU4gfCBVU0JfTUNGR19FTUVNRU4pCiAKIGV4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZCBhdTF4eHhfc3RhcnRfZWhjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGF1MXh4eF9zdGFydF9laGModm9pZCkKIHsKLQlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBzdGFydGluZyBBdTF4eHggRUhDSSBVU0IgQ29udHJvbGxlclxuIik7Ci0KLQkvKiB3cml0ZSBIVyBkZWZhdWx0cyBhZ2FpbiBpbiBjYXNlIFlhbW9uIGNsZWFyZWQgdGhlbSAqLwotCWlmIChhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpID09IDApIHsKLQkJYXVfd3JpdGVsKDB4MDBkMDIwMDAsIFVTQl9IT1NUX0NPTkZJRyk7Ci0JCWF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyk7Ci0JCXVkZWxheSgxMDAwKTsKLQl9Ci0JLyogZW5hYmxlIGhvc3QgY29udHJvbGxlciAqLwotCWF1X3dyaXRlbChVU0JIX0VOQUJMRV9DRSB8IGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyksIFVTQl9IT1NUX0NPTkZJRyk7Ci0JYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKTsKLQl1ZGVsYXkoMTAwMCk7Ci0JYXVfd3JpdGVsKFVTQkhfRU5BQkxFX0lOSVQgfCBhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpLAotCQkgIFVTQl9IT1NUX0NPTkZJRyk7Ci0JYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKTsKKwkvKiBlbmFibGUgY2xvY2sgdG8gRUhDSSBibG9jayBhbmQgSFMgUEhZIFBMTCovCisJYXVfd3JpdGVsKGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRykgfCBVU0JIX0VOQUJMRV9DRSwgVVNCX0hPU1RfQ09ORklHKTsKKwlhdV9zeW5jKCk7CiAJdWRlbGF5KDEwMDApOwogCi0JcHJfZGVidWcoX19GSUxFX18gIjogQ2xvY2sgdG8gVVNCIGhvc3QgaGFzIGJlZW4gZW5hYmxlZFxuIik7CisJLyogZW5hYmxlIEVIQ0kgbW1pbyAqLworCWF1X3dyaXRlbChhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpIHwgVVNCSF9FTkFCTEVfSU5JVCwgVVNCX0hPU1RfQ09ORklHKTsKKwlhdV9zeW5jKCk7CisJdWRlbGF5KDEwMDApOwogfQogCi1zdGF0aWMgdm9pZCBhdTF4eHhfc3RvcF9laGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgYXUxeHh4X3N0b3BfZWhjKHZvaWQpCiB7Ci0JcHJfZGVidWcoX19GSUxFX18gIjogc3RvcHBpbmcgQXUxeHh4IEVIQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCXVuc2lnbmVkIGxvbmcgYzsKIAogCS8qIERpc2FibGUgbWVtICovCi0JYXVfd3JpdGVsKH5VU0JIX0RJU0FCTEUgJiBhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpLCBVU0JfSE9TVF9DT05GSUcpOworCWF1X3dyaXRlbChhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpICYgflVTQkhfRElTQUJMRSwgVVNCX0hPU1RfQ09ORklHKTsKKwlhdV9zeW5jKCk7CiAJdWRlbGF5KDEwMDApOwotCS8qIERpc2FibGUgY2xvY2sgKi8KLQlhdV93cml0ZWwoflVTQl9NQ0ZHX0VIQ0NMS0VOICYgYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSwKLQkJICBVU0JfSE9TVF9DT05GSUcpOwotCWF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyk7CisKKwkvKiBEaXNhYmxlIEVIQyBjbG9jay4gSWYgdGhlIEhTIFBIWSBpcyB1bnVzZWQgZGlzYWJsZSBpdCB0b28uICovCisJYyA9IGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRykgJiB+VVNCX01DRkdfRUhDQ0xLRU47CisJaWYgKCEoYyAmIFVTQl9NQ0ZHX1VDRUNMS0VOKSkJCS8qIFVEQyBkaXNhYmxlZD8gKi8KKwkJYyAmPSB+VVNCX01DRkdfUEhZUExMRU47CS8qIHllczogZGlzYWJsZSBIUyBQSFkgUExMICovCisJYXVfd3JpdGVsKGMsIFVTQl9IT1NUX0NPTkZJRyk7CisJYXVfc3luYygpOwogfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCi0vKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLwotCi0vKioKLSAqIHVzYl9laGNpX2F1MXh4eF9wcm9iZSAtIGluaXRpYWxpemUgQXUxeHh4LWJhc2VkIEhDRHMKLSAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQotICoKLSAqIEFsbG9jYXRlcyBiYXNpYyByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCi0gKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAotICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgotICoKLSAqLwotaW50IHVzYl9laGNpX2F1MXh4eF9wcm9iZShjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCi0JCQkgIHN0cnVjdCB1c2JfaGNkICoqaGNkX291dCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCWludCByZXR2YWw7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZDsKLQlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2k7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKSAmJiBkZWZpbmVkKENPTkZJR19ETUFfQ09IRVJFTlQpCi0KLQkvKiBBdTEyMDAgQUIgVVNCIGRvZXMgbm90IHN1cHBvcnQgY29oZXJlbnQgbWVtb3J5ICovCi0JaWYgKCEocmVhZF9jMF9wcmlkKCkgJiAweGZmKSkgewotCQlwcl9pbmZvKCIlczogdGhpcyBpcyBjaGlwIHJldmlzaW9uIEFCIVxuIiwgZGV2LT5uYW1lKTsKLQkJcHJfaW5mbygiJXM6IHVwZGF0ZSB5b3VyIGJvYXJkIG9yIHJlLWNvbmZpZ3VyZSB0aGUga2VybmVsXG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotI2VuZGlmCi0KLQlhdTF4eHhfc3RhcnRfZWhjKGRldik7Ci0KLQlpZiAoZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgewotCQlwcl9kZWJ1ZygicmVzb3VyY2VbMV0gaXMgbm90IElPUkVTT1VSQ0VfSVJRIik7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JfQotCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJmRldi0+ZGV2LCAiQXUxeHh4Iik7Ci0JaWYgKCFoY2QpCi0JCXJldHVybiAtRU5PTUVNOwotCWhjZC0+cnNyY19zdGFydCA9IGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7Ci0JaGNkLT5yc3JjX2xlbiA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgewotCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOwotCQlyZXR2YWwgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KLQloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7Ci0JaWYgKCFoY2QtPnJlZ3MpIHsKLQkJcHJfZGVidWcoImlvcmVtYXAgZmFpbGVkIik7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKLQllaGNpLT5jYXBzID0gaGNkLT5yZWdzOwotCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyBIQ19MRU5HVEgocmVhZGwoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKLQkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KLQllaGNpLT5oY3NfcGFyYW1zID0gcmVhZGwoJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOwotCi0JLyogZWhjaV9oY2RfaW5pdChoY2RfdG9fZWhjaShoY2QpKTsgKi8KLQotCXJldHZhbCA9Ci0JICAgIHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKLQlpZiAocmV0dmFsID09IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlhdTF4eHhfc3RvcF9laGMoZGV2KTsKLQlpb3VubWFwKGhjZC0+cmVncyk7Ci1lcnIyOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotZXJyMToKLQl1c2JfcHV0X2hjZChoY2QpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCi0vKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KLQotLyoqCi0gKiB1c2JfZWhjaV9oY2RfYXUxeHh4X3JlbW92ZSAtIHNodXRkb3duIHByb2Nlc3NpbmcgZm9yIEF1MXh4eC1iYXNlZCBIQ0RzCi0gKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlbW92ZWQKLSAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQotICoKLSAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2VoY2lfaGNkX2F1MXh4eF9wcm9iZSgpLCBmaXJzdCBpbnZva2luZwotICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKLSAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCi0gKgotICovCi12b2lkIHVzYl9laGNpX2F1MXh4eF9yZW1vdmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXVzYl9yZW1vdmVfaGNkKGhjZCk7Ci0JaW91bm1hcChoY2QtPnJlZ3MpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotCXVzYl9wdXRfaGNkKGhjZCk7Ci0JYXUxeHh4X3N0b3BfZWhjKGRldik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGVoY2lfYXUxeHh4X2hjX2RyaXZlciA9IHsKLQkuZGVzY3JpcHRpb24gPSBoY2RfbmFtZSwKLQkucHJvZHVjdF9kZXNjID0gIkF1MXh4eCBFSENJIiwKLQkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAorCS5kZXNjcmlwdGlvbgkJPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjCQk9ICJBdTF4eHggRUhDSSIsCisJLmhjZF9wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBlaGNpX2hjZCksCiAKIAkvKgogCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQogCSAqLwotCS5pcnEgPSBlaGNpX2lycSwKLQkuZmxhZ3MgPSBIQ0RfTUVNT1JZIHwgSENEX1VTQjIsCisJLmlycQkJCT0gZWhjaV9pcnEsCisJLmZsYWdzCQkJPSBIQ0RfTUVNT1JZIHwgSENEX1VTQjIsCiAKIAkvKgogCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCkBAIC0xOTgsNDggKzg2LDk4IEBACiAJICogRklYTUUgLS0gZWhjaV9pbml0KCkgZG9lc24ndCBkbyBlbm91Z2ggaGVyZS4KIAkgKiBTZWUgZWhjaS1wcGMtc29jIGZvciBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uLgogCSAqLwotCS5yZXNldCA9IGVoY2lfaW5pdCwKLQkuc3RhcnQgPSBlaGNpX3J1biwKLQkuc3RvcCA9IGVoY2lfc3RvcCwKLQkuc2h1dGRvd24gPSBlaGNpX3NodXRkb3duLAorCS5yZXNldAkJCT0gZWhjaV9pbml0LAorCS5zdGFydAkJCT0gZWhjaV9ydW4sCisJLnN0b3AJCQk9IGVoY2lfc3RvcCwKKwkuc2h1dGRvd24JCT0gZWhjaV9zaHV0ZG93biwKIAogCS8qCiAJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKIAkgKi8KLQkudXJiX2VucXVldWUgPSBlaGNpX3VyYl9lbnF1ZXVlLAotCS51cmJfZGVxdWV1ZSA9IGVoY2lfdXJiX2RlcXVldWUsCi0JLmVuZHBvaW50X2Rpc2FibGUgPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCisJLnVyYl9lbnF1ZXVlCQk9IGVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlCQk9IGVoY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUJPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCiAKIAkvKgogCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAogCSAqLwotCS5nZXRfZnJhbWVfbnVtYmVyID0gZWhjaV9nZXRfZnJhbWUsCisJLmdldF9mcmFtZV9udW1iZXIJPSBlaGNpX2dldF9mcmFtZSwKIAogCS8qCiAJICogcm9vdCBodWIgc3VwcG9ydAogCSAqLwotCS5odWJfc3RhdHVzX2RhdGEgPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKLQkuaHViX2NvbnRyb2wgPSBlaGNpX2h1Yl9jb250cm9sLAotCS5idXNfc3VzcGVuZCA9IGVoY2lfYnVzX3N1c3BlbmQsCi0JLmJ1c19yZXN1bWUgPSBlaGNpX2J1c19yZXN1bWUsCi0JLnJlbGlucXVpc2hfcG9ydCA9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAotCS5wb3J0X2hhbmRlZF9vdmVyID0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAorCS5odWJfc3RhdHVzX2RhdGEJPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wJCT0gZWhjaV9odWJfY29udHJvbCwKKwkuYnVzX3N1c3BlbmQJCT0gZWhjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZQkJPSBlaGNpX2J1c19yZXN1bWUsCisJLnJlbGlucXVpc2hfcG9ydAk9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAorCS5wb3J0X2hhbmRlZF9vdmVyCT0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAogfTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogc3RhdGljIGludCBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IE5VTEw7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2k7CiAJaW50IHJldDsKIAotCXByX2RlYnVnKCJJbiBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlXG4iKTsKLQogCWlmICh1c2JfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBGSVhNRSB3ZSBvbmx5IHdhbnQgb25lIG9uZSBwcm9iZSgpIG5vdCB0d28gKi8KLQlyZXQgPSB1c2JfZWhjaV9hdTF4eHhfcHJvYmUoJmVoY2lfYXUxeHh4X2hjX2RyaXZlciwgJmhjZCwgcGRldik7CisjaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkgJiYgZGVmaW5lZChDT05GSUdfRE1BX0NPSEVSRU5UKQorCS8qIEF1MTIwMCBBQiBVU0IgZG9lcyBub3Qgc3VwcG9ydCBjb2hlcmVudCBtZW1vcnkgKi8KKwlpZiAoIShyZWFkX2MwX3ByaWQoKSAmIDB4ZmYpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0aGlzIGlzIGNoaXAgcmV2aXNpb24gQUIhXG4iLCBwZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVwZGF0ZSB5b3VyIGJvYXJkIG9yIHJlLWNvbmZpZ3VyZSIKKwkJCQkgIiB0aGUga2VybmVsXG4iLCBwZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorI2VuZGlmCisKKwlpZiAocGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKKwkJcHJfZGVidWcoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmVoY2lfYXUxeHh4X2hjX2RyaXZlciwgJnBkZXYtPmRldiwgIkF1MXh4eCIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhjZC0+cnNyY19zdGFydCA9IHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSBwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgeworCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJfZGVidWcoImlvcmVtYXAgZmFpbGVkIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwlhdTF4eHhfc3RhcnRfZWhjKCk7CisKKwllaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwllaGNpLT5jYXBzID0gaGNkLT5yZWdzOworCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyBIQ19MRU5HVEgocmVhZGwoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KKwllaGNpLT5oY3NfcGFyYW1zID0gcmVhZGwoJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOworCisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwKKwkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaGNkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhdTF4eHhfc3RvcF9laGMoKTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CitlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworZXJyMToKKwl1c2JfcHV0X2hjZChoY2QpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NywzNSArMTg1LDEzOCBAQAogewogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCS8qIEZJWE1FIHdlIG9ubHkgd2FudCBvbmUgb25lIHJlbW92ZSgpIG5vdCB0d28gKi8KLQl1c2JfZWhjaV9hdTF4eHhfcmVtb3ZlKGhjZCwgcGRldik7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlhdTF4eHhfc3RvcF9laGMoKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwogCXJldHVybiAwOwogfQogCi0gLypUQkQqLwotLypzdGF0aWMgaW50IGVoY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGVoY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCQlwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjOwogCiAJcmV0dXJuIDA7CisJcmMgPSAwOworCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVoY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAoMTApOworCisJLyogUm9vdCBodWIgd2FzIGFscmVhZHkgc3VzcGVuZGVkLiBEaXNhYmxlIGlycSBlbWlzc2lvbiBhbmQKKwkgKiBtYXJrIEhXIHVuYWNjZXNzaWJsZSwgYmFpbCBvdXQgaWYgUkggaGFzIGJlZW4gcmVzdW1lZC4gVXNlCisJICogdGhlIHNwaW5sb2NrIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIHdpdGggcG9zc2libGUgcGVuZGluZworCSAqIFJIIHN1c3BlbmQgb3IgcmVzdW1lIGFjdGl2aXR5LgorCSAqCisJICogVGhpcyBpcyBzdGlsbCByYWN5IGFzIGhjZC0+c3RhdGUgaXMgbWFuaXB1bGF0ZWQgb3V0c2lkZSBvZgorCSAqIGFueSBsb2NrcyA9UCBCdXQgdGhhdCB3aWxsIGJlIGEgZGlmZmVyZW50IGZpeC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjaS0+bG9jaywgZmxhZ3MpOworCWlmIChoY2QtPnN0YXRlICE9IEhDX1NUQVRFX1NVU1BFTkRFRCkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisJZWhjaV93cml0ZWwoZWhjaSwgMCwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKKwkodm9pZCllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CisKKwkvKiBtYWtlIHN1cmUgc25hcHNob3QgYmVpbmcgcmVzdW1lZCByZS1lbnVtZXJhdGVzIGV2ZXJ5dGhpbmcgKi8KKwlpZiAobWVzc2FnZS5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKSB7CisJCWVoY2lfaGFsdChlaGNpKTsKKwkJZWhjaV9yZXNldChlaGNpKTsKKwl9CisKKwljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCisJYXUxeHh4X3N0b3BfZWhjKCk7CisKK2JhaWw6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjaS0+bG9jaywgZmxhZ3MpOworCisJLy8gY291bGQgc2F2ZSBGTEFESiBpbiBjYXNlIG9mIFZhdXggcG93ZXIgbG9zcworCS8vIC4uLiB3ZSdkIG9ubHkgdXNlIGl0IHRvIGhhbmRsZSBjbG9jayBza2V3CisKKwlyZXR1cm4gcmM7CiB9Ci1zdGF0aWMgaW50IGVoY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKKworCitzdGF0aWMgaW50IGVoY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKworCWF1MXh4eF9zdGFydF9laGMoKTsKKworCS8vIG1heWJlIHJlc3RvcmUgRkxBREoKKworCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDEwMCk7CisKKwkvKiBNYXJrIGhhcmR3YXJlIGFjY2Vzc2libGUgYWdhaW4gYXMgd2UgYXJlIG91dCBvZiBEMyBzdGF0ZSBieSBub3cgKi8KKwlzZXRfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKKworCS8qIElmIENGIGlzIHN0aWxsIHNldCwgd2UgbWFpbnRhaW5lZCBQQ0kgVmF1eCBwb3dlci4KKwkgKiBKdXN0IHVuZG8gdGhlIGVmZmVjdCBvZiBlaGNpX3BjaV9zdXNwZW5kKCkuCisJICovCisJaWYgKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbmZpZ3VyZWRfZmxhZykgPT0gRkxBR19DRikgeworCQlpbnQJbWFzayA9IElOVFJfTUFTSzsKKworCQlpZiAoIWhjZC0+c2VsZi5yb290X2h1Yi0+ZG9fcmVtb3RlX3dha2V1cCkKKwkJCW1hc2sgJj0gflNUU19QQ0Q7CisJCWVoY2lfd3JpdGVsKGVoY2ksIG1hc2ssICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CisJCWVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZWhjaV9kYmcoZWhjaSwgImxvc3QgcG93ZXIsIHJlc3RhcnRpbmdcbiIpOworCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKGhjZC0+c2VsZi5yb290X2h1Yik7CisKKwkvKiBFbHNlIHJlc2V0LCB0byBjb3BlIHdpdGggcG93ZXIgbG9zcyBvciBmbHVzaC10by1zdG9yYWdlCisJICogc3R5bGUgInJlc3VtZSIgaGF2aW5nIGxldCBCSU9TIGtpY2sgaW4gZHVyaW5nIHJlYm9vdC4KKwkgKi8KKwkodm9pZCkgZWhjaV9oYWx0KGVoY2kpOworCSh2b2lkKSBlaGNpX3Jlc2V0KGVoY2kpOworCisJLyogZW1wdHlpbmcgdGhlIHNjaGVkdWxlIGFib3J0cyBhbnkgdXJicyAqLworCXNwaW5fbG9ja19pcnEoJmVoY2ktPmxvY2spOworCWlmIChlaGNpLT5yZWNsYWltKQorCQllbmRfdW5saW5rX2FzeW5jKGVoY2kpOworCWVoY2lfd29yayhlaGNpKTsKKwlzcGluX3VubG9ja19pcnEoJmVoY2ktPmxvY2spOworCisJZWhjaV93cml0ZWwoZWhjaSwgZWhjaS0+Y29tbWFuZCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCWVoY2lfd3JpdGVsKGVoY2ksIEZMQUdfQ0YsICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOworCWVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwkvKiB1bmJsb2NrIHBvc3RlZCB3cml0ZXMgKi8KKworCS8qIGhlcmUgd2UgImtub3ciIHJvb3QgcG9ydHMgc2hvdWxkIGFsd2F5cyBzdGF5IHBvd2VyZWQgKi8KKwllaGNpX3BvcnRfcG93ZXIoZWhjaSwgMSk7CisKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwogCiAJcmV0dXJuIDA7CiB9Ci0qLwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdTF4eHgtZWhjaSIpOworCisjZWxzZQorI2RlZmluZSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQgTlVMTAorI2RlZmluZSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZWhjaV9oY2RfYXUxeHh4X2RyaXZlciA9IHsKLQkucHJvYmUgPSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlLAotCS5yZW1vdmUgPSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3JlbW92ZSwKLQkuc2h1dGRvd24gPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAotCS8qLnN1c3BlbmQgICAgICA9IGVoY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwgKi8KLQkvKi5yZXN1bWUgICAgICAgPSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwgKi8KKwkucHJvYmUJCT0gZWhjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKKwkucmVtb3ZlCQk9IGVoY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAorCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCisJLnN1c3BlbmQJPSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJhdTF4eHgtZWhjaSIsCisJCS5uYW1lCT0gImF1MXh4eC1laGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfQogfTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdTF4eHgtZWhjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCmluZGV4IDBmODJmZGMuLmIwZjhlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKQEAgLTY3Niw3ICs2NzYsNyBAQAogCQkJIiVzXG4iCiAJCQkiU1VTUEVOREVEIChubyByZWdpc3RlciBhY2Nlc3MpXG4iLAogCQkJaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cy0+bmFtZSwKLQkJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXNfaWQsCisJCQlkZXZfbmFtZShoY2QtPnNlbGYuY29udHJvbGxlciksCiAJCQloY2QtPnByb2R1Y3RfZGVzYyk7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC02ODgsNyArNjg4LDcgQEAKIAkJIiVzXG4iCiAJCSJFSENJICV4LiUwMngsIGhjZCBzdGF0ZSAlZFxuIiwKIAkJaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cy0+bmFtZSwKLQkJaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1c19pZCwKKwkJZGV2X25hbWUoaGNkLT5zZWxmLmNvbnRyb2xsZXIpLAogCQloY2QtPnByb2R1Y3RfZGVzYywKIAkJaSA+PiA4LCBpICYgMHgwZmYsIGhjZC0+c3RhdGUpOwogCXNpemUgLT0gdGVtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwppbmRleCA3MzcwZDYxLi4wMWMzZGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCkBAIC01Niw3ICs1Niw3IEBACiAJcGRhdGEgPSAoc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJObyBwbGF0Zm9ybSBkYXRhIGZvciAlcy5cbiIsIHBkZXYtPmRldi5idXNfaWQpOworCQkJIk5vIHBsYXRmb3JtIGRhdGEgZm9yICVzLlxuIiwgZGV2X25hbWUoJnBkZXYtPmRldikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTY5LDcgKzY5LDcgQEAKIAkgICAgICAocGRhdGEtPm9wZXJhdGluZ19tb2RlID09IEZTTF9VU0IyX0RSX09URykpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJOb24gSG9zdCBNb2RlIGNvbmZpZ3VyZWQgZm9yICVzLiBXcm9uZyBkcml2ZXIgbGlua2VkLlxuIiwKLQkJCXBkZXYtPmRldi5idXNfaWQpOworCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTc3LDEyICs3NywxMiBAQAogCWlmICghcmVzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJGb3VuZCBIQyB3aXRoIG5vIElSUS4gQ2hlY2sgJXMgc2V0dXAhXG4iLAotCQkJcGRldi0+ZGV2LmJ1c19pZCk7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpcnEgPSByZXMtPnN0YXJ0OwogCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmcGRldi0+ZGV2LCBwZGV2LT5kZXYuYnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAlpZiAoIWhjZCkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycjE7CkBAIC05Miw3ICs5Miw3IEBACiAJaWYgKCFyZXMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIkZvdW5kIEhDIHdpdGggbm8gcmVnaXN0ZXIgYWRkci4gQ2hlY2sgJXMgc2V0dXAhXG4iLAotCQkJcGRldi0+ZGV2LmJ1c19pZCk7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMjsKIAl9CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICAgIGVycjI6CiAJdXNiX3B1dF9oY2QoaGNkKTsKICAgICAgIGVycjE6Ci0JZGV2X2VycigmcGRldi0+ZGV2LCAiaW5pdCAlcyBmYWlsLCAlZFxuIiwgcGRldi0+ZGV2LmJ1c19pZCwgcmV0dmFsKTsKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0ICVzIGZhaWwsICVkXG4iLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yMzAsOCArMjMwLDEzIEBACiAKIAkvKiBwdXQgY29udHJvbGxlciBpbiBob3N0IG1vZGUuICovCiAJZWhjaV93cml0ZWwoZWhjaSwgMHgwMDAwMDAwMywgbm9uX2VoY2kgKyBGU0xfU09DX1VTQl9VU0JNT0RFKTsKKyNpZmRlZiBDT05GSUdfUFBDXzg1eHgKKwlvdXRfYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX1BSSUNUUkwsIDB4MDAwMDAwMDgpOworCW91dF9iZTMyKG5vbl9laGNpICsgRlNMX1NPQ19VU0JfQUdFQ05UVEhSU0gsIDB4MDAwMDAwODApOworI2Vsc2UKIAlvdXRfYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX1BSSUNUUkwsIDB4MDAwMDAwMGMpOwogCW91dF9iZTMyKG5vbl9laGNpICsgRlNMX1NPQ19VU0JfQUdFQ05UVEhSU0gsIDB4MDAwMDAwNDApOworI2VuZGlmCiAJb3V0X2JlMzIobm9uX2VoY2kgKyBGU0xfU09DX1VTQl9TSUNUUkwsIDB4MDAwMDAwMDEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggMzY5YThhNS4uZDlkNTNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtODQsNyArODQsNyBAQAogI2RlZmluZSBFSENJX0lBQV9NU0VDUwkJMTAJCS8qIGFyYml0cmFyeSAqLwogI2RlZmluZSBFSENJX0lPX0pJRkZJRVMJCShIWi8xMCkJCS8qIGlvIHdhdGNoZG9nID4gaXJxX3RocmVzaCAqLwogI2RlZmluZSBFSENJX0FTWU5DX0pJRkZJRVMJKEhaLzIwKQkJLyogYXN5bmMgaWRsZSB0aW1lb3V0ICovCi0jZGVmaW5lIEVIQ0lfU0hSSU5LX0pJRkZJRVMJKEhaLzIwMCkJLyogYXN5bmMgcWggdW5saW5rIGRlbGF5ICovCisjZGVmaW5lIEVIQ0lfU0hSSU5LX0ZSQU1FUwk1CQkvKiBhc3luYyBxaCB1bmxpbmsgZGVsYXkgKi8KIAogLyogSW5pdGlhbCBJUlEgbGF0ZW5jeTogIGZhc3RlciB0aGFuIGh3IGRlZmF1bHQgKi8KIHN0YXRpYyBpbnQgbG9nMl9pcnFfdGhyZXNoID0gMDsJCS8vIDAgdG8gNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWl4cDR4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWl4cDR4eC5jCmluZGV4IDlkMDQyZjIuLmY5NTc1YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1peHA0eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaXhwNHh4LmMKQEAgLTc3LDEyICs3NywxMiBAQAogCWlmICghcmVzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJGb3VuZCBIQyB3aXRoIG5vIElSUS4gQ2hlY2sgJXMgc2V0dXAhXG4iLAotCQkJcGRldi0+ZGV2LmJ1c19pZCk7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpcnEgPSByZXMtPnN0YXJ0OwogCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmcGRldi0+ZGV2LCBwZGV2LT5kZXYuYnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAlpZiAoIWhjZCkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfY3JlYXRlX2hjZDsKQEAgLTkyLDcgKzkyLDcgQEAKIAlpZiAoIXJlcykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiRm91bmQgSEMgd2l0aCBubyByZWdpc3RlciBhZGRyLiBDaGVjayAlcyBzZXR1cCFcbiIsCi0JCQlwZGV2LT5kZXYuYnVzX2lkKTsKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBmYWlsX3JlcXVlc3RfcmVzb3VyY2U7CiAJfQpAQCAtMTI2LDcgKzEyNiw3IEBACiBmYWlsX3JlcXVlc3RfcmVzb3VyY2U6CiAJdXNiX3B1dF9oY2QoaGNkKTsKIGZhaWxfY3JlYXRlX2hjZDoKLQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0ICVzIGZhaWwsICVkXG4iLCBwZGV2LT5kZXYuYnVzX2lkLCByZXR2YWwpOworCWRldl9lcnIoJnBkZXYtPmRldiwgImluaXQgJXMgZmFpbCwgJWRcbiIsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vcmlvbi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMKaW5kZXggYWI2MjVmMC4uNWZiZGMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogCWlmIChpcnEgPD0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiRm91bmQgSEMgd2l0aCBubyBJUlEuIENoZWNrICVzIHNldHVwIVxuIiwKLQkJCXBkZXYtPmRldi5idXNfaWQpOworCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycjE7CiAJfQpAQCAtMjEzLDcgKzIxMyw3IEBACiAJaWYgKCFyZXMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIkZvdW5kIEhDIHdpdGggbm8gcmVnaXN0ZXIgYWRkci4gQ2hlY2sgJXMgc2V0dXAhXG4iLAotCQkJcGRldi0+ZGV2LmJ1c19pZCk7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMTsKIAl9CkBAIC0yMzMsNyArMjMzLDcgQEAKIAl9CiAKIAloY2QgPSB1c2JfY3JlYXRlX2hjZCgmZWhjaV9vcmlvbl9oY19kcml2ZXIsCi0JCQkmcGRldi0+ZGV2LCBwZGV2LT5kZXYuYnVzX2lkKTsKKwkJCSZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAlpZiAoIWhjZCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycjM7CkBAIC0yNzYsNyArMjc2LDcgQEAKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiBlcnIxOgogCWRldl9lcnIoJnBkZXYtPmRldiwgImluaXQgJXMgZmFpbCwgJWRcbiIsCi0JCXBkZXYtPmRldi5idXNfaWQsIGVycik7CisJCWRldl9uYW1lKCZwZGV2LT5kZXYpLCBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wczMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wczMuYwppbmRleCAzN2U2YWJlLi4wZWJhODk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHMzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBzMy5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAogCWRldi0+Y29yZS5kbWFfbWFzayA9ICZkdW1teV9tYXNrOyAvKiBGSVhNRTogZm9yIGltcHJvcGVyIHVzYiBjb2RlICovCiAKLQloY2QgPSB1c2JfY3JlYXRlX2hjZCgmcHMzX2VoY2lfaGNfZHJpdmVyLCAmZGV2LT5jb3JlLCBkZXYtPmNvcmUuYnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmcHMzX2VoY2lfaGNfZHJpdmVyLCAmZGV2LT5jb3JlLCBkZXZfbmFtZSgmZGV2LT5jb3JlKSk7CiAKIAlpZiAoIWhjZCkgewogCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogdXNiX2NyZWF0ZV9oY2QgZmFpbGVkXG4iLCBfX2Z1bmNfXywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCmluZGV4IGI4NWI1NDEuLjI2MjJiNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwpAQCAtMTExNiw4ICsxMTE2LDcgQEAKIAlzdHJ1Y3QgZWhjaV9xaAkJKnFoOwogCWVudW0gZWhjaV90aW1lcl9hY3Rpb24JYWN0aW9uID0gVElNRVJfSU9fV0FUQ0hET0c7CiAKLQlpZiAoISsrKGVoY2ktPnN0YW1wKSkKLQkJZWhjaS0+c3RhbXArKzsKKwllaGNpLT5zdGFtcCA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KTsKIAl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfQVNZTkNfU0hSSU5LKTsKIHJlc2NhbjoKIAlxaCA9IGVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoOwpAQCAtMTE0MiwxOCArMTE0MSwyMCBAQAogCQkJCX0KIAkJCX0KIAotCQkJLyogdW5saW5rIGlkbGUgZW50cmllcywgcmVkdWNpbmcgSEMgUENJIHVzYWdlIGFzIHdlbGwKKwkJCS8qIHVubGluayBpZGxlIGVudHJpZXMsIHJlZHVjaW5nIERNQSB1c2FnZSBhcyB3ZWxsCiAJCQkgKiBhcyBIQ0Qgc2NoZWR1bGUtc2Nhbm5pbmcgY29zdHMuICBkZWxheSBmb3IgYW55IHFoCiAJCQkgKiB3ZSBqdXN0IHNjYW5uZWQsIHRoZXJlJ3MgYSBub3QtdW51c3VhbCBjYXNlIHRoYXQgaXQKIAkJCSAqIGRvZXNuJ3Qgc3RheSBpZGxlIGZvciBsb25nLgogCQkJICogKHBsdXMsIGF2b2lkcyBzb21lIGtpbmQgb2YgcmUtYWN0aXZhdGlvbiByYWNlLikKIAkJCSAqLwotCQkJaWYgKGxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpKSB7Ci0JCQkJaWYgKHFoLT5zdGFtcCA9PSBlaGNpLT5zdGFtcCkKKwkJCWlmIChsaXN0X2VtcHR5KCZxaC0+cXRkX2xpc3QpCisJCQkJCSYmIHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9MSU5LRUQpIHsKKwkJCQlpZiAoIWVoY2ktPnJlY2xhaW0KKwkJCQkJJiYgKChlaGNpLT5zdGFtcCAtIHFoLT5zdGFtcCkgJiAweDFmZmYpCisJCQkJCQk+PSAoRUhDSV9TSFJJTktfRlJBTUVTICogOCkpCisJCQkJCXN0YXJ0X3VubGlua19hc3luYyhlaGNpLCBxaCk7CisJCQkJZWxzZQogCQkJCQlhY3Rpb24gPSBUSU1FUl9BU1lOQ19TSFJJTks7Ci0JCQkJZWxzZSBpZiAoIWVoY2ktPnJlY2xhaW0KLQkJCQkJICAgICYmIHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9MSU5LRUQpCi0JCQkJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgcWgpOwogCQkJfQogCiAJCQlxaCA9IHFoLT5xaF9uZXh0LnFoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAppbmRleCA5MDI0NWZkLi41Nzk5Mjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaApAQCAtMTk4LDcgKzE5OCwxMCBAQAogCQkJYnJlYWs7CiAJCS8vIGNhc2UgVElNRVJfQVNZTkNfU0hSSU5LOgogCQlkZWZhdWx0OgotCQkJdCA9IEVIQ0lfU0hSSU5LX0pJRkZJRVM7CisJCQkvKiBhZGQgYSBqaWZmaWUgc2luY2Ugd2Ugc3luY2ggYWdhaW5zdCB0aGUKKwkJCSAqIDggS0h6IHVmcmFtZSBjb3VudGVyLgorCQkJICovCisJCQl0ID0gRElWX1JPVU5EX1VQKEVIQ0lfU0hSSU5LX0ZSQU1FUyAqIEhaLCAxMDAwKSArIDE7CiAJCQlicmVhazsKIAkJfQogCQltb2RfdGltZXIoJmVoY2ktPndhdGNoZG9nLCB0ICsgamlmZmllcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKaW5kZXggMjBiOWEwZC4uMzExNzhlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwpAQCAtOTQsNiArOTQsMTAgQEAKIAl1MTYgdzsKIAlpbnQgcXVvdCA9IGxlbiAlIDQ7CiAKKwkvKiBidWZmZXIgaXMgYWxyZWFkeSBpbiAndXNiIGRhdGEgb3JkZXInLCB3aGljaCBpcyBMRS4gKi8KKwkvKiBXaGVuIHJlYWRpbmcgYnVmZmVyIGFzIHUxNiwgd2UgaGF2ZSB0byB0YWtlIGNhcmUgYnl0ZSBvcmRlciAqLworCS8qIGRvZXNuJ3QgZ2V0IG1peGVkIHVwICovCisKIAlpZiAoKHVuc2lnbmVkIGxvbmcpZHAyICYgMSkgewogCQkvKiBub3QgYWxpZ25lZCAqLwogCQlmb3IgKDsgbGVuID4gMTsgbGVuIC09IDIpIHsKQEAgLTEwNSw4ICsxMDksMTEgQEAKIAkJCWlzcDExNnhfd3JpdGVfZGF0YTE2KGlzcDExNngsICh1MTYpICogZHApOwogCX0gZWxzZSB7CiAJCS8qIGFsaWduZWQgKi8KLQkJZm9yICg7IGxlbiA+IDE7IGxlbiAtPSAyKQotCQkJaXNwMTE2eF9yYXdfd3JpdGVfZGF0YTE2KGlzcDExNngsICpkcDIrKyk7CisJCWZvciAoOyBsZW4gPiAxOyBsZW4gLT0gMikgeworCQkJLyogS2VlcCBieXRlIG9yZGVyICEgKi8KKwkJCWlzcDExNnhfcmF3X3dyaXRlX2RhdGExNihpc3AxMTZ4LCBjcHVfdG9fbGUxNigqZHAyKyspKTsKKwkJfQorCiAJCWlmIChsZW4pCiAJCQlpc3AxMTZ4X3dyaXRlX2RhdGExNihpc3AxMTZ4LCAweGZmICYgKigodTggKikgZHAyKSk7CiAJfQpAQCAtMTI0LDYgKzEzMSwxMCBAQAogCXUxNiB3OwogCWludCBxdW90ID0gbGVuICUgNDsKIAorCS8qIGJ1ZmZlciBpcyBhbHJlYWR5IGluICd1c2IgZGF0YSBvcmRlcicsIHdoaWNoIGlzIExFLiAqLworCS8qIFdoZW4gcmVhZGluZyBidWZmZXIgYXMgdTE2LCB3ZSBoYXZlIHRvIHRha2UgY2FyZSBieXRlIG9yZGVyICovCisJLyogZG9lc24ndCBnZXQgbWl4ZWQgdXAgKi8KKwogCWlmICgodW5zaWduZWQgbG9uZylkcDIgJiAxKSB7CiAJCS8qIG5vdCBhbGlnbmVkICovCiAJCWZvciAoOyBsZW4gPiAxOyBsZW4gLT0gMikgewpAQCAtMTMxLDEyICsxNDIsMTYgQEAKIAkJCSpkcCsrID0gdyAmIDB4ZmY7CiAJCQkqZHArKyA9ICh3ID4+IDgpICYgMHhmZjsKIAkJfQorCiAJCWlmIChsZW4pCiAJCQkqZHAgPSAweGZmICYgaXNwMTE2eF9yZWFkX2RhdGExNihpc3AxMTZ4KTsKIAl9IGVsc2UgewogCQkvKiBhbGlnbmVkICovCi0JCWZvciAoOyBsZW4gPiAxOyBsZW4gLT0gMikKLQkJCSpkcDIrKyA9IGlzcDExNnhfcmF3X3JlYWRfZGF0YTE2KGlzcDExNngpOworCQlmb3IgKDsgbGVuID4gMTsgbGVuIC09IDIpIHsKKwkJCS8qIEtlZXAgYnl0ZSBvcmRlciEgKi8KKwkJCSpkcDIrKyA9IGxlMTZfdG9fY3B1KGlzcDExNnhfcmF3X3JlYWRfZGF0YTE2KGlzcDExNngpKTsKKwkJfQorCiAJCWlmIChsZW4pCiAJCQkqKHU4ICopIGRwMiA9IDB4ZmYgJiBpc3AxMTZ4X3JlYWRfZGF0YTE2KGlzcDExNngpOwogCX0KQEAgLTE1OTIsNyArMTYwNyw3IEBACiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaGNkICovCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmlzcDExNnhfaGNfZHJpdmVyLCAmcGRldi0+ZGV2LCBwZGV2LT5kZXYuYnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmaXNwMTE2eF9oY19kcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAlpZiAoIWhjZCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKaW5kZXggNjVhYTVlYy4uYzg1OGYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwpAQCAtMzgsNiArMzgsNyBAQAogCXVuc2lnbmVkCQlpX3RocmVzaDsKIAl1bnNpZ25lZCBsb25nCQlyZXNldF9kb25lOwogCXVuc2lnbmVkIGxvbmcJCW5leHRfc3RhdGVjaGFuZ2U7CisJdW5zaWduZWQgaW50CQlkZXZmbGFnczsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlzcDE3NjBfaGNkICpoY2RfdG9fcHJpdihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQpAQCAtMzc4LDkgKzM3OSwzMSBAQAogewogCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7CiAJaW50IHJlc3VsdDsKLQl1MzIgc2NyYXRjaDsKKwl1MzIgc2NyYXRjaCwgaHdtb2RlOworCisJLyogU2V0dXAgSFcgTW9kZSBDb250cm9sOiBUaGlzIGFzc3VtZXMgYSBsZXZlbCBhY3RpdmUtbG93IGludGVycnVwdCAqLworCWh3bW9kZSA9IEhXX0RBVEFfQlVTXzMyQklUOworCisJaWYgKHByaXYtPmRldmZsYWdzICYgSVNQMTc2MF9GTEFHX0JVU19XSURUSF8xNikKKwkJaHdtb2RlICY9IH5IV19EQVRBX0JVU18zMkJJVDsKKwlpZiAocHJpdi0+ZGV2ZmxhZ3MgJiBJU1AxNzYwX0ZMQUdfQU5BTE9HX09DKQorCQlod21vZGUgfD0gSFdfQU5BX0RJR0lfT0M7CisJaWYgKHByaXYtPmRldmZsYWdzICYgSVNQMTc2MF9GTEFHX0RBQ0tfUE9MX0hJR0gpCisJCWh3bW9kZSB8PSBIV19EQUNLX1BPTF9ISUdIOworCWlmIChwcml2LT5kZXZmbGFncyAmIElTUDE3NjBfRkxBR19EUkVRX1BPTF9ISUdIKQorCQlod21vZGUgfD0gSFdfRFJFUV9QT0xfSElHSDsKKworCS8qCisJICogV2UgaGF2ZSB0byBzZXQgdGhpcyBmaXJzdCBpbiBjYXNlIHdlJ3JlIGluIDE2LWJpdCBtb2RlLgorCSAqIFdyaXRlIGl0IHR3aWNlIHRvIGVuc3VyZSBjb3JyZWN0IHVwcGVyIGJpdHMgaWYgc3dpdGNoaW5nCisJICogdG8gMTYtYml0IG1vZGUuCisJICovCisJaXNwMTc2MF93cml0ZWwoaHdtb2RlLCBoY2QtPnJlZ3MgKyBIQ19IV19NT0RFX0NUUkwpOworCWlzcDE3NjBfd3JpdGVsKGh3bW9kZSwgaGNkLT5yZWdzICsgSENfSFdfTU9ERV9DVFJMKTsKIAogCWlzcDE3NjBfd3JpdGVsKDB4ZGVhZGJhYmUsIGhjZC0+cmVncyArIEhDX1NDUkFUQ0hfUkVHKTsKKwkvKiBDaGFuZ2UgYnVzIHBhdHRlcm4gKi8KKwlzY3JhdGNoID0gaXNwMTc2MF9yZWFkbChoY2QtPnJlZ3MgKyBIQ19DSElQX0lEX1JFRyk7CiAJc2NyYXRjaCA9IGlzcDE3NjBfcmVhZGwoaGNkLT5yZWdzICsgSENfU0NSQVRDSF9SRUcpOwogCWlmIChzY3JhdGNoICE9IDB4ZGVhZGJhYmUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJU1AxNzYwOiBTY3JhdGNoIHRlc3QgZmFpbGVkLlxuIik7CkBAIC00MDMsMTcgKzQyNiwyOSBAQAogCiAJLyogU3RlcCAxMSBwYXNzZWQgKi8KIAorCWlzcDE3NjBfaW5mbyhwcml2LCAiYnVzIHdpZHRoOiAlZCwgb2M6ICVzXG4iLAorCQkJICAgKHByaXYtPmRldmZsYWdzICYgSVNQMTc2MF9GTEFHX0JVU19XSURUSF8xNikgPworCQkJICAgMTYgOiAzMiwgKHByaXYtPmRldmZsYWdzICYgSVNQMTc2MF9GTEFHX0FOQUxPR19PQykgPworCQkJICAgImFuYWxvZyIgOiAiZGlnaXRhbCIpOworCisJLyogQVRMIHJlc2V0ICovCisJaXNwMTc2MF93cml0ZWwoaHdtb2RlIHwgQUxMX0FUWF9SRVNFVCwgaGNkLT5yZWdzICsgSENfSFdfTU9ERV9DVFJMKTsKKwltZGVsYXkoMTApOworCWlzcDE3NjBfd3JpdGVsKGh3bW9kZSwgaGNkLT5yZWdzICsgSENfSFdfTU9ERV9DVFJMKTsKKwogCWlzcDE3NjBfd3JpdGVsKElOVEVSUlVQVF9FTkFCTEVfTUFTSywgaGNkLT5yZWdzICsgSENfSU5URVJSVVBUX1JFRyk7CiAJaXNwMTc2MF93cml0ZWwoSU5URVJSVVBUX0VOQUJMRV9NQVNLLCBoY2QtPnJlZ3MgKyBIQ19JTlRFUlJVUFRfRU5BQkxFKTsKIAotCS8qIEFUTCByZXNldCAqLwotCXNjcmF0Y2ggPSBpc3AxNzYwX3JlYWRsKGhjZC0+cmVncyArIEhDX0hXX01PREVfQ1RSTCk7Ci0JaXNwMTc2MF93cml0ZWwoc2NyYXRjaCB8IEFMTF9BVFhfUkVTRVQsIGhjZC0+cmVncyArIEhDX0hXX01PREVfQ1RSTCk7Ci0JbWRlbGF5KDEwKTsKLQlpc3AxNzYwX3dyaXRlbChzY3JhdGNoLCBoY2QtPnJlZ3MgKyBIQ19IV19NT0RFX0NUUkwpOwotCi0JaXNwMTc2MF93cml0ZWwoUE9SVDFfUE9XRVIgfCBQT1JUMV9JTklUMiwgaGNkLT5yZWdzICsgSENfUE9SVDFfQ1RSTCk7Ci0JbWRlbGF5KDEwKTsKKwkvKgorCSAqIFBPUlQgMSBDb250cm9sIHJlZ2lzdGVyIG9mIHRoZSBJU1AxNzYwIGlzIHRoZSBPVEcgY29udHJvbAorCSAqIHJlZ2lzdGVyIG9uIElTUDE3NjEuCisJICovCisJaWYgKCEocHJpdi0+ZGV2ZmxhZ3MgJiBJU1AxNzYwX0ZMQUdfSVNQMTc2MSkgJiYKKwkgICAgIShwcml2LT5kZXZmbGFncyAmIElTUDE3NjBfRkxBR19QT1JUMV9ESVMpKSB7CisJCWlzcDE3NjBfd3JpdGVsKFBPUlQxX1BPV0VSIHwgUE9SVDFfSU5JVDIsCisJCQkgICAgICAgaGNkLT5yZWdzICsgSENfUE9SVDFfQ1RSTCk7CisJCW1kZWxheSgxMCk7CisJfQogCiAJcHJpdi0+aGNzX3BhcmFtcyA9IGlzcDE3NjBfcmVhZGwoaGNkLT5yZWdzICsgSENfSENTUEFSQU1TKTsKIApAQCAtNDUzLDggKzQ4OCw3IEBACiAJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CiAJaXNwMTc2MF9lbmFibGVfaW50ZXJydXB0cyhoY2QpOwogCXRlbXAgPSBpc3AxNzYwX3JlYWRsKGhjZC0+cmVncyArIEhDX0hXX01PREVfQ1RSTCk7Ci0JdGVtcCB8PSBGSU5BTF9IV19DT05GSUc7Ci0JaXNwMTc2MF93cml0ZWwodGVtcCwgaGNkLT5yZWdzICsgSENfSFdfTU9ERV9DVFJMKTsKKwlpc3AxNzYwX3dyaXRlbCh0ZW1wIHwgSFdfR0xPQkFMX0lOVFJfRU4sIGhjZC0+cmVncyArIEhDX0hXX01PREVfQ1RSTCk7CiAKIAljb21tYW5kID0gaXNwMTc2MF9yZWFkbChoY2QtPnJlZ3MgKyBIQ19VU0JDTUQpOwogCWNvbW1hbmQgJj0gfihDTURfTFJFU0VUfENNRF9SRVNFVCk7CkBAIC03ODIsOCArODE2LDggQEAKIAlxdGQtPnN0YXR1cyB8PSBzbG90IDw8IDE2OwogfQogCi12b2lkIGVucXVldWVfYW5fQVRMX3BhY2tldChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgaXNwMTc2MF9xaCAqcWgsCi0JCXN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkKQorc3RhdGljIHZvaWQgZW5xdWV1ZV9hbl9BVExfcGFja2V0KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBpc3AxNzYwX3FoICpxaCwKKwkJCQkgIHN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkKQogewogCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7CiAJdTMyIHNraXBfbWFwLCBvcl9tYXA7CkBAIC04MTYsOCArODUwLDggQEAKIAlpc3AxNzYwX3dyaXRlbChidWZmc3RhdHVzLCBoY2QtPnJlZ3MgKyBIQ19CVUZGRVJfU1RBVFVTX1JFRyk7CiB9CiAKLXZvaWQgZW5xdWV1ZV9hbl9JTlRfcGFja2V0KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBpc3AxNzYwX3FoICpxaCwKLQkJc3RydWN0IGlzcDE3NjBfcXRkICpxdGQpCitzdGF0aWMgdm9pZCBlbnF1ZXVlX2FuX0lOVF9wYWNrZXQoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IGlzcDE3NjBfcWggKnFoLAorCQkJCSAgc3RydWN0IGlzcDE3NjBfcXRkICpxdGQpCiB7CiAJc3RydWN0IGlzcDE3NjBfaGNkICpwcml2ID0gaGNkX3RvX3ByaXYoaGNkKTsKIAl1MzIgc2tpcF9tYXAsIG9yX21hcDsKQEAgLTE1OTIsNyArMTYyNiw3IEBACiAJc3RydWN0IGludGVyX3BhY2tldF9pbmZvICppbnRzOwogCXUzMiBpOwogCXUzMiByZWdfYmFzZSwgb3JfcmVnLCBza2lwX3JlZzsKLQlpbnQgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcHRkIHB0ZDsKIAogCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKQEAgLTIwNjEsNyArMjA5NSw3IEBACiAJc3RydWN0IGlzcDE3NjBfaGNkICpwcml2ID0gaGNkX3RvX3ByaXYodXNiX2hjZCk7CiAJc3RydWN0IGlzcDE3NjBfcWggKnFoOwogCXN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkOwotCXUzMiBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlxaCA9IGVwLT5oY3ByaXY7CkBAIC0yMTEyLDYgKzIxNDYsNyBAQAogc3RhdGljIHZvaWQgaXNwMTc2MF9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IGlzcDE3NjBfaGNkICpwcml2ID0gaGNkX3RvX3ByaXYoaGNkKTsKKwl1MzIgdGVtcDsKIAogCWlzcDE3NjBfaHViX2NvbnRyb2woaGNkLCBDbGVhclBvcnRGZWF0dXJlLCBVU0JfUE9SVF9GRUFUX1BPV0VSLAkxLAogCQkJTlVMTCwgMCk7CkBAIC0yMTIwLDcgKzIxNTUsOCBAQAogCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCWVoY2lfcmVzZXQocHJpdik7CiAJLyogRGlzYWJsZSBJUlEgKi8KLQlpc3AxNzYwX3dyaXRlbChIV19EQVRBX0JVU18zMkJJVCwgaGNkLT5yZWdzICsgSENfSFdfTU9ERV9DVFJMKTsKKwl0ZW1wID0gaXNwMTc2MF9yZWFkbChoY2QtPnJlZ3MgKyBIQ19IV19NT0RFX0NUUkwpOworCWlzcDE3NjBfd3JpdGVsKHRlbXAgJj0gfkhXX0dMT0JBTF9JTlRSX0VOLCBoY2QtPnJlZ3MgKyBIQ19IV19NT0RFX0NUUkwpOwogCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAKIAlpc3AxNzYwX3dyaXRlbCgwLCBoY2QtPnJlZ3MgKyBIQ19DT05GSUdGTEFHKTsKQEAgLTIxMjgsMTAgKzIxNjQsMTEgQEAKIAogc3RhdGljIHZvaWQgaXNwMTc2MF9zaHV0ZG93bihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewotCXUzMiBjb21tYW5kOworCXUzMiBjb21tYW5kLCB0ZW1wOwogCiAJaXNwMTc2MF9zdG9wKGhjZCk7Ci0JaXNwMTc2MF93cml0ZWwoSFdfREFUQV9CVVNfMzJCSVQsIGhjZC0+cmVncyArIEhDX0hXX01PREVfQ1RSTCk7CisJdGVtcCA9IGlzcDE3NjBfcmVhZGwoaGNkLT5yZWdzICsgSENfSFdfTU9ERV9DVFJMKTsKKwlpc3AxNzYwX3dyaXRlbCh0ZW1wICY9IH5IV19HTE9CQUxfSU5UUl9FTiwgaGNkLT5yZWdzICsgSENfSFdfTU9ERV9DVFJMKTsKIAogCWNvbW1hbmQgPSBpc3AxNzYwX3JlYWRsKGhjZC0+cmVncyArIEhDX1VTQkNNRCk7CiAJY29tbWFuZCAmPSB+Q01EX1JVTjsKQEAgLTIxODMsNyArMjIyMCw4IEBACiB9CiAKIHN0cnVjdCB1c2JfaGNkICppc3AxNzYwX3JlZ2lzdGVyKHU2NCByZXNfc3RhcnQsIHU2NCByZXNfbGVuLCBpbnQgaXJxLAotCQl1NjQgaXJxZmxhZ3MsIHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVzbmFtZSkKKwkJdTY0IGlycWZsYWdzLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c25hbWUsCisJCXVuc2lnbmVkIGludCBkZXZmbGFncykKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdjsKQEAgLTIxOTUsMTEgKzIyMzMsMTIgQEAKIAkvKiBwcmV2ZW50IHVzYi1jb3JlIGFsbG9jYXRpbmcgRE1BIHBhZ2VzICovCiAJZGV2LT5kbWFfbWFzayA9IE5VTEw7CiAKLQloY2QgPSB1c2JfY3JlYXRlX2hjZCgmaXNwMTc2MF9oY19kcml2ZXIsIGRldiwgZGV2LT5idXNfaWQpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZpc3AxNzYwX2hjX2RyaXZlciwgZGV2LCBkZXZfbmFtZShkZXYpKTsKIAlpZiAoIWhjZCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlwcml2ID0gaGNkX3RvX3ByaXYoaGNkKTsKKwlwcml2LT5kZXZmbGFncyA9IGRldmZsYWdzOwogCWluaXRfbWVtb3J5KHByaXYpOwogCWhjZC0+cmVncyA9IGlvcmVtYXAocmVzX3N0YXJ0LCByZXNfbGVuKTsKIAlpZiAoIWhjZC0+cmVncykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCmluZGV4IDNkODZkMGYuLjY0NzNkZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKQEAgLTMsNyArMyw4IEBACiAKIC8qIGV4cG9ydHMgZm9yIGlmICovCiBzdHJ1Y3QgdXNiX2hjZCAqaXNwMTc2MF9yZWdpc3Rlcih1NjQgcmVzX3N0YXJ0LCB1NjQgcmVzX2xlbiwgaW50IGlycSwKLQkJdTY0IGlycWZsYWdzLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c25hbWUpOworCQl1NjQgaXJxZmxhZ3MsIHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVzbmFtZSwKKwkJdW5zaWduZWQgaW50IGRldmZsYWdzKTsKIGludCBpbml0X2ttZW1fb25jZSh2b2lkKTsKIHZvaWQgZGVpbml0X2ttZW1fY2FjaGUodm9pZCk7CiAKQEAgLTMxLDYgKzMyLDcgQEAKIC8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KICNkZWZpbmUgSENfSFdfTU9ERV9DVFJMCQkweDMwMAogI2RlZmluZSBBTExfQVRYX1JFU0VUCQkoMSA8PCAzMSkKKyNkZWZpbmUgSFdfQU5BX0RJR0lfT0MJCSgxIDw8IDE1KQogI2RlZmluZSBIV19EQVRBX0JVU18zMkJJVAkoMSA8PCA4KQogI2RlZmluZSBIV19EQUNLX1BPTF9ISUdICSgxIDw8IDYpCiAjZGVmaW5lIEhXX0RSRVFfUE9MX0hJR0gJKDEgPDwgNSkKQEAgLTU2LDEzICs1OCwxNCBAQAogI2RlZmluZSBQT1JUMV9QT1dFUgkJKDMgPDwgMykKICNkZWZpbmUgUE9SVDFfSU5JVDEJCSgxIDw8IDcpCiAjZGVmaW5lIFBPUlQxX0lOSVQyCQkoMSA8PCAyMykKKyNkZWZpbmUgSFdfT1RHX0NUUkxfU0VUCQkweDM3NAorI2RlZmluZSBIV19PVEdfQ1RSTF9DTFIJCTB4Mzc2CiAKIC8qIEludGVycnVwdCBSZWdpc3RlciAqLwogI2RlZmluZSBIQ19JTlRFUlJVUFRfUkVHCTB4MzEwCiAKICNkZWZpbmUgSENfSU5URVJSVVBUX0VOQUJMRQkweDMxNAogI2RlZmluZSBJTlRFUlJVUFRfRU5BQkxFX01BU0sJKEhDX0lOVExfSU5UIHwgSENfQVRMX0lOVCB8IEhDX0VPVF9JTlQpCi0jZGVmaW5lIEZJTkFMX0hXX0NPTkZJRwkoSFdfR0xPQkFMX0lOVFJfRU4gfCBIV19EQVRBX0JVU18zMkJJVCkKIAogI2RlZmluZSBIQ19JU09fSU5UCQkoMSA8PCA5KQogI2RlZmluZSBIQ19BVExfSU5UCQkoMSA8PCA4KQpAQCAtMTIyLDYgKzEyNSwxOSBAQAogI2RlZmluZSBpc3AxNzYwX2Vycihwcml2LCBmbXQsIGFyZ3MuLi4pIFwKIAlkZXZfZXJyKHByaXZfdG9faGNkKHByaXYpLT5zZWxmLmNvbnRyb2xsZXIsIGZtdCwgIyNhcmdzKQogCisvKgorICogRGV2aWNlIGZsYWdzIHRoYXQgY2FuIHZhcnkgZnJvbSBib2FyZCB0byBib2FyZC4gIEFsbCBvZiB0aGVzZQorICogaW5kaWNhdGUgdGhlIG1vc3QgImF0eXBpY2FsIiBjYXNlLCBzbyB0aGF0IGEgZGV2ZmxhZ3Mgb2YgMCBpcworICogYSBzYW5lIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAqLworI2RlZmluZSBJU1AxNzYwX0ZMQUdfUE9SVDFfRElTCQkweDAwMDAwMDAxIC8qIFBvcnQgMSBkaXNhYmxlZCAqLworI2RlZmluZSBJU1AxNzYwX0ZMQUdfQlVTX1dJRFRIXzE2CTB4MDAwMDAwMDIgLyogMTYtYml0IGRhdGEgYnVzIHdpZHRoICovCisjZGVmaW5lIElTUDE3NjBfRkxBR19PVEdfRU4JCTB4MDAwMDAwMDQgLyogUG9ydCAxIHN1cHBvcnRzIE9URyAqLworI2RlZmluZSBJU1AxNzYwX0ZMQUdfQU5BTE9HX09DCQkweDAwMDAwMDA4IC8qIEFuYWxvZyBvdmVyY3VycmVudCAqLworI2RlZmluZSBJU1AxNzYwX0ZMQUdfREFDS19QT0xfSElHSAkweDAwMDAwMDEwIC8qIERBQ0sgYWN0aXZlIGhpZ2ggKi8KKyNkZWZpbmUgSVNQMTc2MF9GTEFHX0RSRVFfUE9MX0hJR0gJMHgwMDAwMDAyMCAvKiBEUkVRIGFjdGl2ZSBoaWdoICovCisjZGVmaW5lIElTUDE3NjBfRkxBR19JU1AxNzYxCQkweDAwMDAwMDQwIC8qIENoaXAgaXMgSVNQMTc2MSAqLworCiAvKiBjaGlwIG1lbW9yeSBtYW5hZ2VtZW50ICovCiBzdHJ1Y3QgbWVtb3J5X2NodW5rIHsKIAl1bnNpZ25lZCBpbnQgc3RhcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCmluZGV4IGM5ZGIzZmUuLjA1MWVmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCkBAIC0zNSwxMyArMzUsMTUgQEAKIAlpbnQgdmlycTsKIAl1NjQgcmVzX2xlbjsKIAlpbnQgcmV0OworCWNvbnN0IHVuc2lnbmVkIGludCAqcHJvcDsKKwl1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MgPSAwOwogCiAJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShkcCwgMCwgJm1lbW9yeSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FTlhJTzsKIAogCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihtZW1vcnkuc3RhcnQsIG1lbW9yeS5lbmQgLSBtZW1vcnkuc3RhcnQgKyAxLAotCQkJZGV2LT5kZXYuYnVzX2lkKTsKKwkJCWRldl9uYW1lKCZkZXYtPmRldikpOwogCWlmICghcmVzKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC01NSw4ICs1NywzMiBAQAogCXZpcnEgPSBpcnFfY3JlYXRlX29mX21hcHBpbmcob2lycS5jb250cm9sbGVyLCBvaXJxLnNwZWNpZmllciwKIAkJCW9pcnEuc2l6ZSk7CiAKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZHAsICJueHAsdXNiLWlzcDE3NjEiKSkKKwkJZGV2ZmxhZ3MgfD0gSVNQMTc2MF9GTEFHX0lTUDE3NjE7CisKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KGRwLCAicG9ydDEtZGlzYWJsZSIsIE5VTEwpICE9IE5VTEwpCisJCWRldmZsYWdzIHw9IElTUDE3NjBfRkxBR19QT1JUMV9ESVM7CisKKwkvKiBTb21lIHN5c3RlbXMgd2lyZSB1cCBvbmx5IDE2IG9mIHRoZSAzMiBkYXRhIGxpbmVzICovCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImJ1cy13aWR0aCIsIE5VTEwpOworCWlmIChwcm9wICYmICpwcm9wID09IDE2KQorCQlkZXZmbGFncyB8PSBJU1AxNzYwX0ZMQUdfQlVTX1dJRFRIXzE2OworCisJaWYgKG9mX2dldF9wcm9wZXJ0eShkcCwgInBvcnQxLW90ZyIsIE5VTEwpICE9IE5VTEwpCisJCWRldmZsYWdzIHw9IElTUDE3NjBfRkxBR19PVEdfRU47CisKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KGRwLCAiYW5hbG9nLW9jIiwgTlVMTCkgIT0gTlVMTCkKKwkJZGV2ZmxhZ3MgfD0gSVNQMTc2MF9GTEFHX0FOQUxPR19PQzsKKworCWlmIChvZl9nZXRfcHJvcGVydHkoZHAsICJkYWNrLXBvbGFyaXR5IiwgTlVMTCkgIT0gTlVMTCkKKwkJZGV2ZmxhZ3MgfD0gSVNQMTc2MF9GTEFHX0RBQ0tfUE9MX0hJR0g7CisKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KGRwLCAiZHJlcS1wb2xhcml0eSIsIE5VTEwpICE9IE5VTEwpCisJCWRldmZsYWdzIHw9IElTUDE3NjBfRkxBR19EUkVRX1BPTF9ISUdIOworCiAJaGNkID0gaXNwMTc2MF9yZWdpc3RlcihtZW1vcnkuc3RhcnQsIHJlc19sZW4sIHZpcnEsCi0JCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgJmRldi0+ZGV2LCBkZXYtPmRldi5idXNfaWQpOworCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICZkZXYtPmRldiwgZGV2X25hbWUoJmRldi0+ZGV2KSwKKwkJZGV2ZmxhZ3MpOwogCWlmIChJU19FUlIoaGNkKSkgewogCQlyZXQgPSBQVFJfRVJSKGhjZCk7CiAJCWdvdG8gcmVsZWFzZV9yZWc7CkBAIC04Nyw2ICsxMTMsOSBAQAogCXsKIAkJLmNvbXBhdGlibGUgPSAibnhwLHVzYi1pc3AxNzYwIiwKIAl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAibnhwLHVzYi1pc3AxNzYxIiwKKwl9LAogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9pc3AxNzYwX21hdGNoKTsKQEAgLTExNiw2ICsxNDUsNyBAQAogCWludCBsZW5ndGg7CiAJaW50IHN0YXR1cyA9IDE7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwl1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MgPSAwOwogCiAJaWYgKHVzYl9kaXNhYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTIwMCw3ICsyMzAsOCBAQAogCiAJZGV2LT5kZXYuZG1hX21hc2sgPSBOVUxMOwogCWhjZCA9IGlzcDE3NjBfcmVnaXN0ZXIocGNpX21lbV9waHkwLCBsZW5ndGgsIGRldi0+aXJxLAotCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICZkZXYtPmRldiwgZGV2LT5kZXYuYnVzX2lkKTsKKwkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAmZGV2LT5kZXYsIGRldl9uYW1lKCZkZXYtPmRldiksCisJCWRldmZsYWdzKTsKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBoY2QpOwogCWlmICghaGNkKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCmluZGV4IGU1MzRmOWQuLmE1ZDhlNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYwpAQCAtOTEsNyArOTEsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHVzYl9oY2RfYXQ5MV9yZW1vdmUgKHN0cnVjdCB1c2JfaGNkICosIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCB1c2JfaGNkX2F0OTFfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCiAvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCiAvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLwpAQCAtMTg0LDEzICsxODQsMTQgQEAKICAqIGNvbnRleHQsICJybW1vZCIgb3Igc29tZXRoaW5nIHNpbWlsYXIuCiAgKgogICovCi1zdGF0aWMgaW50IHVzYl9oY2RfYXQ5MV9yZW1vdmUoc3RydWN0IHVzYl9oY2QgKmhjZCwKK3N0YXRpYyB2b2lkIHVzYl9oY2RfYXQ5MV9yZW1vdmUoc3RydWN0IHVzYl9oY2QgKmhjZCwKIAkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAJYXQ5MV9zdG9wX2hjKHBkZXYpOwogCWlvdW5tYXAoaGNkLT5yZWdzKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOwogCiAJaWYgKGNwdV9pc19hdDkxc2FtOTI2MSgpKQogCQljbGtfcHV0KGhjbGspOwpAQCAtMTk5LDcgKzIwMCw2IEBACiAJZmNsayA9IGljbGsgPSBoY2xrID0gTlVMTDsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBOVUxMKTsKLQlyZXR1cm4gMDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTMwOSw3ICszMDksOCBAQAogCX0KIAogCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAwKTsKLQlyZXR1cm4gdXNiX2hjZF9hdDkxX3JlbW92ZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSwgcGRldik7CisJdXNiX2hjZF9hdDkxX3JlbW92ZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSwgcGRldik7CisJcmV0dXJuIDA7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwppbmRleCA2OGMxN2Y1Li5jMDk0ODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCkBAIC0zNCw3ICszNCw4IEBACiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOCiAjZGVmaW5lIFVTQkhfRU5BQkxFX0lOSVQgKFVTQkhfRU5BQkxFX0NFIHwgVVNCSF9FTkFCTEVfRSB8IFVTQkhfRU5BQkxFX0MpCiAjZWxpZiBfX0JJR19FTkRJQU4KLSNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAoVVNCSF9FTkFCTEVfQ0UgfCBVU0JIX0VOQUJMRV9FIHwgVVNCSF9FTkFCTEVfQyB8IFVTQkhfRU5BQkxFX0JFKQorI2RlZmluZSBVU0JIX0VOQUJMRV9JTklUIChVU0JIX0VOQUJMRV9DRSB8IFVTQkhfRU5BQkxFX0UgfCBVU0JIX0VOQUJMRV9DIHwgXAorCQkJICBVU0JIX0VOQUJMRV9CRSkKICNlbHNlCiAjZXJyb3Igbm90IGJ5dGUgb3JkZXIgZGVmaW5lZAogI2VuZGlmCkBAIC00NiwyMTMgKzQ3LDg3IEBACiAjZGVmaW5lIFVTQl9NQ0ZHX1JEQ09NQiAgICgxPDwzMCkKICNkZWZpbmUgVVNCX01DRkdfU1NERU4gICAgKDE8PDIzKQogI2RlZmluZSBVU0JfTUNGR19PSENDTEtFTiAoMTw8MTYpCisjaWZkZWYgQ09ORklHX0RNQV9DT0hFUkVOVAogI2RlZmluZSBVU0JfTUNGR19VQ0FNICAgICAoMTw8NykKKyNlbHNlCisjZGVmaW5lIFVTQl9NQ0ZHX1VDQU0gICAgICgwKQorI2VuZGlmCiAjZGVmaW5lIFVTQl9NQ0ZHX09CTUVOICAgICgxPDwxKQogI2RlZmluZSBVU0JfTUNGR19PTUVNRU4gICAoMTw8MCkKIAogI2RlZmluZSBVU0JIX0VOQUJMRV9DRSAgICBVU0JfTUNGR19PSENDTEtFTgotI2lmZGVmIENPTkZJR19ETUFfQ09IRVJFTlQKLSNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAgKFVTQl9NQ0ZHX09IQ0NMS0VOIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8IFVTQl9NQ0ZHX1BGRU4gfCBVU0JfTUNGR19SRENPTUIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfU1NERU4gfCBVU0JfTUNGR19VQ0FNIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8IFVTQl9NQ0ZHX09CTUVOIHwgVVNCX01DRkdfT01FTUVOKQotI2Vsc2UKLSNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAgKFVTQl9NQ0ZHX09IQ0NMS0VOIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8IFVTQl9NQ0ZHX1BGRU4gfCBVU0JfTUNGR19SRENPTUIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfU1NERU4gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfT0JNRU4gfCBVU0JfTUNGR19PTUVNRU4pCi0jZW5kaWYKKworI2RlZmluZSBVU0JIX0VOQUJMRV9JTklUICAoVVNCX01DRkdfUEZFTiAgfCBVU0JfTUNGR19SRENPTUIgCXwJXAorCQkJICAgVVNCSF9FTkFCTEVfQ0UgfCBVU0JfTUNGR19TU0RFTgl8CVwKKwkJCSAgIFVTQl9NQ0ZHX1VDQU0gIHwJCQkJXAorCQkJICAgVVNCX01DRkdfT0JNRU4gfCBVU0JfTUNGR19PTUVNRU4pCisKICNkZWZpbmUgVVNCSF9ESVNBQkxFICAgICAgKFVTQl9NQ0ZHX09CTUVOIHwgVVNCX01DRkdfT01FTUVOKQogCiAjZW5kaWYgIC8qIEF1MTIwMCAqLwogCiBleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHZvaWQgYXUxeHh4X3N0YXJ0X29oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBhdTF4eHhfc3RhcnRfb2hjKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KLQkJIjogc3RhcnRpbmcgQXUxeHh4IE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOwotCiAJLyogZW5hYmxlIGhvc3QgY29udHJvbGxlciAqLwotCiAjaWZuZGVmIENPTkZJR19TT0NfQVUxMjAwCi0KIAlhdV93cml0ZWwoVVNCSF9FTkFCTEVfQ0UsIFVTQl9IT1NUX0NPTkZJRyk7Ci0JdWRlbGF5KDEwMDApOwotCWF1X3dyaXRlbChVU0JIX0VOQUJMRV9JTklULCBVU0JfSE9TVF9DT05GSUcpOworCWF1X3N5bmMoKTsKIAl1ZGVsYXkoMTAwMCk7CiAKLSNlbHNlICAgLyogQXUxMjAwICovCi0KLQkvKiB3cml0ZSBIVyBkZWZhdWx0cyBhZ2FpbiBpbiBjYXNlIFlhbW9uIGNsZWFyZWQgdGhlbSAqLwotCWlmIChhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpID09IDApIHsKLQkJYXVfd3JpdGVsKDB4MDBkMDIwMDAsIFVTQl9IT1NUX0NPTkZJRyk7Ci0JCWF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyk7Ci0JCXVkZWxheSgxMDAwKTsKLQl9Ci0JYXVfd3JpdGVsKFVTQkhfRU5BQkxFX0NFIHwgYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSwgVVNCX0hPU1RfQ09ORklHKTsKLQlhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpOwotCXVkZWxheSgxMDAwKTsKLQlhdV93cml0ZWwoVVNCSF9FTkFCTEVfSU5JVCB8IGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyksIFVTQl9IT1NUX0NPTkZJRyk7Ci0JYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKTsKKwlhdV93cml0ZWwoYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSB8IFVTQkhfRU5BQkxFX0lOSVQsIFVTQl9IT1NUX0NPTkZJRyk7CisJYXVfc3luYygpOwogCXVkZWxheSgxMDAwKTsKIAotI2VuZGlmICAvKiBBdTEyMDAgKi8KLQotI2lmbmRlZiBDT05GSUdfU09DX0FVMTIwMAogCS8qIHdhaXQgZm9yIHJlc2V0IGNvbXBsZXRlIChyZWFkIHJlZ2lzdGVyIHR3aWNlOyBzZWUgYXUxNTAwIGVycmF0YSkgKi8KIAl3aGlsZSAoYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSwKIAkJIShhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpICYgVVNCSF9FTkFCTEVfUkQpKQotI2VuZGlmCiAJCXVkZWxheSgxMDAwKTsKIAotCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fCi0JIjogQ2xvY2sgdG8gVVNCIGhvc3QgaGFzIGJlZW4gZW5hYmxlZCBcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBhdTF4eHhfc3RvcF9vaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fCi0JICAgICAgICI6IHN0b3BwaW5nIEF1MXh4eCBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKLQotI2lmbmRlZiBDT05GSUdfU09DX0FVMTIwMAotCi0JLyogRGlzYWJsZSBjbG9jayAqLwotCWF1X3dyaXRlbChhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpICYgflVTQkhfRU5BQkxFX0NFLCBVU0JfSE9TVF9DT05GSUcpOwotCiAjZWxzZSAgIC8qIEF1MTIwMCAqLwotCi0JLyogRGlzYWJsZSBtZW0gKi8KLQlhdV93cml0ZWwoflVTQkhfRElTQUJMRSAmIGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyksIFVTQl9IT1NUX0NPTkZJRyk7CisJYXVfd3JpdGVsKGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRykgfCBVU0JIX0VOQUJMRV9DRSwgVVNCX0hPU1RfQ09ORklHKTsKKwlhdV9zeW5jKCk7CiAJdWRlbGF5KDEwMDApOwotCS8qIERpc2FibGUgY2xvY2sgKi8KLQlhdV93cml0ZWwoflVTQkhfRU5BQkxFX0NFICYgYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSwgVVNCX0hPU1RfQ09ORklHKTsKLQlhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpOworCisJYXVfd3JpdGVsKGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRykgfCBVU0JIX0VOQUJMRV9JTklULCBVU0JfSE9TVF9DT05GSUcpOworCWF1X3N5bmMoKTsKKwl1ZGVsYXkoMjAwMCk7CiAjZW5kaWYgIC8qIEF1MTIwMCAqLwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIGNvbmZpZ3VyZSBzbyBhbiBIQyBkZXZpY2UgYW5kIGlkIGFyZSBhbHdheXMgcHJvdmlkZWQgKi8KLS8qIGFsd2F5cyBjYWxsZWQgd2l0aCBwcm9jZXNzIGNvbnRleHQ7IHNsZWVwaW5nIGlzIE9LICovCi0KLQotLyoqCi0gKiB1c2Jfb2hjaV9hdTF4eHhfcHJvYmUgLSBpbml0aWFsaXplIEF1MXh4eC1iYXNlZCBIQ0RzCi0gKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKLSAqCi0gKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAotICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKLSAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgdXNiX29oY2lfYXUxeHh4X3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKLQkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgYXUxeHh4X3N0b3Bfb2hjKHZvaWQpCiB7Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwotCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkgJiYgZGVmaW5lZChDT05GSUdfRE1BX0NPSEVSRU5UKQotCS8qIEF1MTIwMCBBQiBVU0IgZG9lcyBub3Qgc3VwcG9ydCBjb2hlcmVudCBtZW1vcnkgKi8KLQlpZiAoIShyZWFkX2MwX3ByaWQoKSAmIDB4ZmYpKSB7Ci0JCXByX2luZm8oIiVzOiB0aGlzIGlzIGNoaXAgcmV2aXNpb24gQUIgISFcbiIsCi0JCQlkZXYtPm5hbWUpOwotCQlwcl9pbmZvKCIlczogdXBkYXRlIHlvdXIgYm9hcmQgb3IgcmUtY29uZmlndXJlIHRoZSBrZXJuZWxcbiIsCi0JCQlkZXYtPm5hbWUpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisjaWZkZWYgQ09ORklHX1NPQ19BVTEyMDAKKwkvKiBEaXNhYmxlIG1lbSAqLworCWF1X3dyaXRlbChhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpICYgflVTQkhfRElTQUJMRSwgVVNCX0hPU1RfQ09ORklHKTsKKwlhdV9zeW5jKCk7CisJdWRlbGF5KDEwMDApOwogI2VuZGlmCi0KLQlpZiAoZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgewotCQlwcl9kZWJ1ZygicmVzb3VyY2VbMV0gaXMgbm90IElPUkVTT1VSQ0VfSVJRXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmZGV2LT5kZXYsICJhdTF4eHgiKTsKLQlpZiAoIWhjZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaGNkLT5yc3JjX3N0YXJ0ID0gZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKLQloY2QtPnJzcmNfbGVuID0gZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMTsKLQotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7Ci0JCXByX2RlYnVnKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKLQkJcmV0dmFsID0gLUVCVVNZOwotCQlnb3RvIGVycjE7Ci0JfQotCi0JaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotCWlmICghaGNkLT5yZWdzKSB7Ci0JCXByX2RlYnVnKCJpb3JlbWFwIGZhaWxlZFxuIik7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQlhdTF4eHhfc3RhcnRfb2hjKGRldik7Ci0Jb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKLQotCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKLQlpZiAocmV0dmFsID09IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlhdTF4eHhfc3RvcF9vaGMoZGV2KTsKLQlpb3VubWFwKGhjZC0+cmVncyk7Ci0gZXJyMjoKLQlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKLSBlcnIxOgotCXVzYl9wdXRfaGNkKGhjZCk7Ci0JcmV0dXJuIHJldHZhbDsKKwkvKiBEaXNhYmxlIGNsb2NrICovCisJYXVfd3JpdGVsKGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRykgJiB+VVNCSF9FTkFCTEVfQ0UsIFVTQl9IT1NUX0NPTkZJRyk7CisJYXVfc3luYygpOwogfQogCi0KLS8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCi0vKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KLQotLyoqCi0gKiB1c2JfaGNkX2F1MXh4eF9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBBdTF4eHgtYmFzZWQgSENEcwotICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCi0gKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKLSAqCi0gKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfYXUxeHh4X3Byb2JlKCksIGZpcnN0IGludm9raW5nCi0gKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAotICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIHVzYl9vaGNpX2F1MXh4eF9yZW1vdmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgb2hjaV9hdTF4eHhfc3RhcnQoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKLQl1c2JfcmVtb3ZlX2hjZChoY2QpOwotCWF1MXh4eF9zdG9wX29oYyhkZXYpOwotCWlvdW5tYXAoaGNkLT5yZWdzKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKLQl1c2JfcHV0X2hjZChoY2QpOwotfQorCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJaW50IHJldDsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlvaGNpX2RiZyhvaGNpLCAib2hjaV9hdTF4eHhfc3RhcnQsIG9oY2k6JXAiLCBvaGNpKTsKIAotc3RhdGljIGludCBfX2RldmluaXQKLW9oY2lfYXUxeHh4X3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQotewotCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOwotCWludAkJcmV0OwotCi0Jb2hjaV9kYmcgKG9oY2ksICJvaGNpX2F1MXh4eF9zdGFydCwgb2hjaTolcCIsIG9oY2kpOwotCi0JaWYgKChyZXQgPSBvaGNpX2luaXQgKG9oY2kpKSA8IDApCisJaWYgKChyZXQgPSBvaGNpX2luaXQob2hjaSkpIDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwlpZiAoKHJldCA9IG9oY2lfcnVuKG9oY2kpKSA8IDApIHsKIAkJZXJyICgiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOwotCQlvaGNpX3N0b3AgKGhjZCk7CisJCW9oY2lfc3RvcChoY2QpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwogfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBvaGNpX2F1MXh4eF9oY19kcml2ZXIgPSB7CiAJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAogCS5wcm9kdWN0X2Rlc2MgPQkJIkF1MXh4eCBPSENJIiwKQEAgLTI5NiwxOCArMTcxLDY2IEBACiAJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCiB9OwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0OwotCi0JcHJfZGVidWcgKCJJbiBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlIik7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAogCWlmICh1c2JfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSB1c2Jfb2hjaV9hdTF4eHhfcHJvYmUoJm9oY2lfYXUxeHh4X2hjX2RyaXZlciwgcGRldik7CisjaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkgJiYgZGVmaW5lZChDT05GSUdfRE1BX0NPSEVSRU5UKQorCS8qIEF1MTIwMCBBQiBVU0IgZG9lcyBub3Qgc3VwcG9ydCBjb2hlcmVudCBtZW1vcnkgKi8KKwlpZiAoIShyZWFkX2MwX3ByaWQoKSAmIDB4ZmYpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0aGlzIGlzIGNoaXAgcmV2aXNpb24gQUIgISFcbiIsCisJCQlwZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVwZGF0ZSB5b3VyIGJvYXJkIG9yIHJlLWNvbmZpZ3VyZSAiCisJCQkJICJ0aGUga2VybmVsXG4iLCBwZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorI2VuZGlmCisKKwlpZiAocGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKKwkJcHJfZGVidWcoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZvaGNpX2F1MXh4eF9oY19kcml2ZXIsICZwZGV2LT5kZXYsICJhdTF4eHgiKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloY2QtPnJzcmNfc3RhcnQgPSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJfZGVidWcoImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnIyOworCX0KKworCWF1MXh4eF9zdGFydF9vaGMoKTsKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwKKwkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaGNkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhdTF4eHhfc3RvcF9vaGMoKTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CitlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworZXJyMToKKwl1c2JfcHV0X2hjZChoY2QpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxNSwzMCArMjM4LDc4IEBACiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JdXNiX29oY2lfYXUxeHh4X3JlbW92ZShoY2QsIHBkZXYpOwotCXJldHVybiAwOwotfQotCS8qVEJEKi8KLS8qc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJYXUxeHh4X3N0b3Bfb2hjKCk7CisJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCQlwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKworCXJjID0gMDsKKworCS8qIFJvb3QgaHViIHdhcyBhbHJlYWR5IHN1c3BlbmRlZC4gRGlzYWJsZSBpcnEgZW1pc3Npb24gYW5kCisJICogbWFyayBIVyB1bmFjY2Vzc2libGUsIGJhaWwgb3V0IGlmIFJIIGhhcyBiZWVuIHJlc3VtZWQuIFVzZQorCSAqIHRoZSBzcGlubG9jayB0byBwcm9wZXJseSBzeW5jaHJvbml6ZSB3aXRoIHBvc3NpYmxlIHBlbmRpbmcKKwkgKiBSSCBzdXNwZW5kIG9yIHJlc3VtZSBhY3Rpdml0eS4KKwkgKgorCSAqIFRoaXMgaXMgc3RpbGwgcmFjeSBhcyBoY2QtPnN0YXRlIGlzIG1hbmlwdWxhdGVkIG91dHNpZGUgb2YKKwkgKiBhbnkgbG9ja3MgPVAgQnV0IHRoYXQgd2lsbCBiZSBhIGRpZmZlcmVudCBmaXguCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwlpZiAoaGNkLT5zdGF0ZSAhPSBIQ19TVEFURV9TVVNQRU5ERUQpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCW9oY2lfd3JpdGVsKG9oY2ksIE9IQ0lfSU5UUl9NSUUsICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7CisJKHZvaWQpb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+aW50cmRpc2FibGUpOworCisJLyogbWFrZSBzdXJlIHNuYXBzaG90IGJlaW5nIHJlc3VtZWQgcmUtZW51bWVyYXRlcyBldmVyeXRoaW5nICovCisJaWYgKG1lc3NhZ2UuZXZlbnQgPT0gUE1fRVZFTlRfUFJFVEhBVykKKwkJb2hjaV91c2JfcmVzZXQob2hjaSk7CisKKwljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCisJYXUxeHh4X3N0b3Bfb2hjKCk7CitiYWlsOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWF1MXh4eF9zdGFydF9vaGMoKTsKKworCXNldF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCW9oY2lfZmluaXNoX2NvbnRyb2xsZXJfcmVzdW1lKGhjZCk7CiAKIAlyZXR1cm4gMDsKIH0KLSovCisjZWxzZQorI2RlZmluZSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQgTlVMTAorI2RlZmluZSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSBOVUxMCisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfYXUxeHh4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCi0JLyouc3VzcGVuZAk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwgKi8KLQkvKi5yZXN1bWUJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwgKi8KKwkuc3VzcGVuZAk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJhdTF4eHgtb2hjaSIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCmluZGV4IGUwNmJmYWUuLjdjZWYxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKQEAgLTY1MSw3ICs2NTEsNyBAQAogCQkiJXNcbiIKIAkJIiVzIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiXG4iLAogCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLAotCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzX2lkLAorCQlkZXZfbmFtZShoY2QtPnNlbGYuY29udHJvbGxlciksCiAJCWhjZC0+cHJvZHVjdF9kZXNjLAogCQloY2RfbmFtZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCBhODE2MGQ2Li4yNmJjNDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC05NzQsNyArOTc0LDcgQEAKICNkZWZpbmUgUENJX0RSSVZFUgkJb2hjaV9wY2lfZHJpdmVyCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TQTExMTEKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX1NBMTEwMCkgJiYgZGVmaW5lZChDT05GSUdfU0ExMTExKQogI2luY2x1ZGUgIm9oY2ktc2ExMTExLmMiCiAjZGVmaW5lIFNBMTExMV9EUklWRVIJCW9oY2lfaGNkX3NhMTExMV9kcml2ZXIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKaW5kZXggYTE5YTRmOC4uNmU1ZTVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCkBAIC0zMjksNyArMzI5LDcgQEAKIAl9CiAKIAotCWhjZCA9IHVzYl9jcmVhdGVfaGNkIChkcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkIChkcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAlpZiAoIWhjZCkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycjA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYwppbmRleCAyOGI0NThmLi42YWQ4ZjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKQEAgLTEwOSw4ICsxMDksNiBAQAogCiBzdGF0aWMgaW50IGlzcDEzMDFfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKTsKIHN0YXRpYyBpbnQgaXNwMTMwMV9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IGlzcDEzMDFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgdm9pZCAqYXJnKTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9CiAgICAgeyBJU1AxMzAxX0kyQ19BRERSLCBJU1AxMzAxX0kyQ19BRERSICsgMSwgSTJDX0NMSUVOVF9FTkQgfTsKQEAgLTEyMywzMCArMTIxLDM3IEBACiB9OwogCiBzdHJ1Y3QgaTJjX2RyaXZlciBpc3AxMzAxX2RyaXZlciA9IHsKLQkuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiaXNwMTMwMV9wbngiLAorCX0sCiAJLmF0dGFjaF9hZGFwdGVyID0gaXNwMTMwMV9wcm9iZSwKIAkuZGV0YWNoX2NsaWVudCA9IGlzcDEzMDFfZGV0YWNoLAotCS5jb21tYW5kID0gaXNwMTMwMV9jb21tYW5kCiB9OwogCiBzdGF0aWMgaW50IGlzcDEzMDFfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjOworCWludCBlcnI7CiAKIAljID0ga3phbGxvYyhzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKLQogCWlmICghYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzdHJjcHkoYy0+bmFtZSwgImlzcDEzMDEiKTsKKwlzdHJsY3B5KGMtPm5hbWUsICJpc3AxMzAxX3BueCIsIEkyQ19OQU1FX1NJWkUpOwogCWMtPmZsYWdzID0gMDsKIAljLT5hZGRyID0gYWRkcjsKIAljLT5hZGFwdGVyID0gYWRhcDsKIAljLT5kcml2ZXIgPSAmaXNwMTMwMV9kcml2ZXI7CiAKKwllcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjKTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlzcDEzMDFfaTJjX2NsaWVudCA9IGM7CiAKLQlyZXR1cm4gaTJjX2F0dGFjaF9jbGllbnQoYyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXNwMTMwMV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCkBAIC0xNjEsMTMgKzE2Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIE5vIGNvbW1hbmRzIGRlZmluZWQgKi8KLXN0YXRpYyBpbnQgaXNwMTMwMV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICB2b2lkICphcmcpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGkyY193cml0ZSh1OCBidWYsIHU4IHN1YmFkZHIpCiB7CiAJY2hhciB0bXBidWZbMl07CkBAIC0zODksNyArMzg3LDcgQEAKIAl3aGlsZSAoKF9fcmF3X3JlYWRsKFVTQl9PVEdfQ0xLX1NUQVQpICYgVVNCX0NMT0NLX01BU0spICE9CiAJICAgICAgIFVTQl9DTE9DS19NQVNLKSA7CiAKLQloY2QgPSB1c2JfY3JlYXRlX2hjZCAoZHJpdmVyLCAmcGRldi0+ZGV2LCBwZGV2LT5kZXYuYnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCAoZHJpdmVyLCAmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpIHsKIAkJZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgSEMgYnVmZmVyIik7CiAJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLW9mLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLW9mLmMKaW5kZXggYTY3MjUyNy4uOTFlNmUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtb2YuYwpAQCAtMTQsOCArMTQsOCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogCi0jaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHMzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHMzLmMKaW5kZXggYzE5MzVhZS4uNTVjOTU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBzMy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wczMuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAKIAlkZXYtPmNvcmUuZG1hX21hc2sgPSAmZHVtbXlfbWFzazsgLyogRklYTUU6IGZvciBpbXByb3BlciB1c2IgY29kZSAqLwogCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnBzM19vaGNpX2hjX2RyaXZlciwgJmRldi0+Y29yZSwgZGV2LT5jb3JlLmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnBzM19vaGNpX2hjX2RyaXZlciwgJmRldi0+Y29yZSwgZGV2X25hbWUoJmRldi0+Y29yZSkpOwogCiAJaWYgKCFoY2QpIHsKIAkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHVzYl9jcmVhdGVfaGNkIGZhaWxlZFxuIiwgX19mdW5jX18sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwppbmRleCA5YjU0NzQwLi42YTliNGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKQEAgLTE1OSw5ICsxNTksNiBAQAogewogCWludAlicmFuY2g7CiAKLQlpZiAob2hjaV90b19oY2Qob2hjaSktPnN0YXRlID09IEhDX1NUQVRFX1FVSUVTQ0lORykKLQkJcmV0dXJuIC1FQUdBSU47Ci0KIAllZC0+c3RhdGUgPSBFRF9PUEVSOwogCWVkLT5lZF9wcmV2ID0gTlVMTDsKIAllZC0+ZWRfbmV4dCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc201MDEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zbTUwMS5jCmluZGV4IGU2MTA2OTguLjIxYjE2NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zbTUwMS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zbTUwMS5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJZ290byBlcnIyOwogCX0KIAotCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJnBkZXYtPmRldiwgcGRldi0+ZGV2LmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnIyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNzYi5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNzYi5jCmluZGV4IDcyNzUxODYuLjM2NjBjODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zc2IuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc3NiLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXNzYl9kZXZpY2VfZW5hYmxlKGRldiwgZmxhZ3MpOwogCiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnNzYl9vaGNpX2hjX2RyaXZlciwgZGV2LT5kZXYsCi0JCQlkZXYtPmRldi0+YnVzX2lkKTsKKwkJCWRldl9uYW1lKGRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpCiAJCWdvdG8gZXJyX2Rldl9kaXNhYmxlOwogCW9oY2lkZXYgPSBoY2RfdG9fc3NiX29oY2koaGNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCmluZGV4IDE2NjY3MzQuLmQ1ZjAyZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwpAQCAtMzEyLDkgKzMxMiw5IEBACiBzdGF0aWMgdm9pZCBzZXRfcGlwZV9yZWdfYWRkcihzdHJ1Y3QgcjhhNjY1OTdfcGlwZSAqcGlwZSwgdTggZG1hX2NoKQogewogCXUxNiBwaXBlbnVtID0gcGlwZS0+aW5mby5waXBlbnVtOwotCXVuc2lnbmVkIGxvbmcgZmlmb2FkZHJbXSA9IHtEMEZJRk8sIEQxRklGTywgQ0ZJRk99OwotCXVuc2lnbmVkIGxvbmcgZmlmb3NlbFtdID0ge0QwRklGT1NFTCwgRDFGSUZPU0VMLCBDRklGT1NFTH07Ci0JdW5zaWduZWQgbG9uZyBmaWZvY3RyW10gPSB7RDBGSUZPQ1RSLCBEMUZJRk9DVFIsIENGSUZPQ1RSfTsKKwljb25zdCB1bnNpZ25lZCBsb25nIGZpZm9hZGRyW10gPSB7RDBGSUZPLCBEMUZJRk8sIENGSUZPfTsKKwljb25zdCB1bnNpZ25lZCBsb25nIGZpZm9zZWxbXSA9IHtEMEZJRk9TRUwsIEQxRklGT1NFTCwgQ0ZJRk9TRUx9OworCWNvbnN0IHVuc2lnbmVkIGxvbmcgZmlmb2N0cltdID0ge0QwRklGT0NUUiwgRDFGSUZPQ1RSLCBDRklGT0NUUn07CiAKIAlpZiAoZG1hX2NoID4gUjhBNjY1OTdfUElQRV9OT19ETUEpCS8qIGRtYSBmaWZvIG5vdCB1c2U/ICovCiAJCWRtYV9jaCA9IFI4QTY2NTk3X1BJUEVfTk9fRE1BOwpAQCAtODYzLDYgKzg2MywzMiBAQAogCWRldi0+ZG1hX21hcCA9IDA7CiB9CiAKK3N0YXRpYyB1MTYgZ2V0X2ludGVydmFsKHN0cnVjdCB1cmIgKnVyYiwgX191OCBpbnRlcnZhbCkKK3sKKwl1MTYgdGltZSA9IDE7CisJaW50IGk7CisKKwlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCWlmIChpbnRlcnZhbCA+IElJVFYpCisJCQl0aW1lID0gSUlUVjsKKwkJZWxzZQorCQkJdGltZSA9IGludGVydmFsID8gaW50ZXJ2YWwgLSAxIDogMDsKKwl9IGVsc2UgeworCQlpZiAoaW50ZXJ2YWwgPiAxMjgpIHsKKwkJCXRpbWUgPSBJSVRWOworCQl9IGVsc2UgeworCQkJLyogY2FsY3VsYXRlIHRoZSBuZWFyZXN0IHZhbHVlIGZvciBQSVBFUEVSSSAqLworCQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQkJCWlmICgoMSA8PCBpKSA8IGludGVydmFsICYmCisJCQkJICAgICgxIDw8IChpICsgMSkgPiBpbnRlcnZhbCkpCisJCQkJCXRpbWUgPSAxIDw8IGk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdGltZTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3RpbWVyX2ludGVydmFsKHN0cnVjdCB1cmIgKnVyYiwgX191OCBpbnRlcnZhbCkKIHsKIAlfX3U4IGk7CkBAIC05MDEsMTAgKzkyNyw3IEBACiAJCWluZm8uaW50ZXJ2YWwgPSAwOwogCQlpbmZvLnRpbWVyX2ludGVydmFsID0gMDsKIAl9IGVsc2UgewotCQlpZiAoZXAtPmJJbnRlcnZhbCA+IElJVFYpCi0JCQlpbmZvLmludGVydmFsID0gSUlUVjsKLQkJZWxzZQotCQkJaW5mby5pbnRlcnZhbCA9IGVwLT5iSW50ZXJ2YWwgPyBlcC0+YkludGVydmFsIC0gMSA6IDA7CisJCWluZm8uaW50ZXJ2YWwgPSBnZXRfaW50ZXJ2YWwodXJiLCBlcC0+YkludGVydmFsKTsKIAkJaW5mby50aW1lcl9pbnRlcnZhbCA9IGdldF90aW1lcl9pbnRlcnZhbCh1cmIsIGVwLT5iSW50ZXJ2YWwpOwogCX0KIAlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCkBAIC0yMjQ0LDYgKzIyNjcsNyBAQAogCXN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTc7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CisJdW5zaWduZWQgbG9uZyBpcnFfdHJpZ2dlcjsKIAogCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTIzMDIsNyArMjMyNiwxMSBAQAogCUlOSVRfTElTVF9IRUFEKCZyOGE2NjU5Ny0+Y2hpbGRfZGV2aWNlKTsKIAogCWhjZC0+cnNyY19zdGFydCA9IHJlcy0+c3RhcnQ7Ci0JcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQpOworCWlmIChpcnFfc2Vuc2UgPT0gSU5UTCkKKwkJaXJxX3RyaWdnZXIgPSBJUlFGX1RSSUdHRVJfTE9XOworCWVsc2UKKwkJaXJxX3RyaWdnZXIgPSBJUlFGX1RSSUdHRVJfRkFMTElORzsKKwlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCB8IGlycV90cmlnZ2VyKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZXJyKCJGYWlsZWQgdG8gYWRkIGhjZCIpOwogCQlnb3RvIGNsZWFuX3VwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggNDI2NTc1Mi4uMzQwZDcyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0xNjc0LDcgKzE2NzQsNyBAQAogCX0KIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGhjZCAqLwotCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZzbDgxMWhfaGNfZHJpdmVyLCAmZGV2LT5kZXYsIGRldi0+ZGV2LmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnNsODExaF9oY19kcml2ZXIsICZkZXYtPmRldiwgZGV2X25hbWUoJmRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnI1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jCmluZGV4IDliNjMyM2YuLjIwYWQzYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdTEzMi1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3UxMzItaGNkLmMKQEAgLTMxMjQsNyArMzEyNCw3IEBACiAJaWYgKHBkZXYtPmRldi5kbWFfbWFzaykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQloY2QgPSB1c2JfY3JlYXRlX2hjZCgmdTEzMl9oY19kcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZ1MTMyX2hjX2RyaXZlciwgJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldikpOwogCWlmICghaGNkKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgdXNiIGhjZCBzdHJ1Y3QgZm9yIFUxMzJcbiIKIAkJCSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKaW5kZXggOGU0NDI3YS4uODg1YjU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYwpAQCAtMTIsNyArMTIsNyBAQAogICogKEMpIENvcHlyaWdodCAyMDA0IEFsYW4gU3Rlcm4sIHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUKICAqLwogCi1zdGF0aWMgX191OCByb290X2h1Yl9odWJfZGVzW10gPQorc3RhdGljIGNvbnN0IF9fdTggcm9vdF9odWJfaHViX2Rlc1tdID0KIHsKIAkweDA5LAkJCS8qICBfX3U4ICBiTGVuZ3RoOyAqLwogCTB4MjksCQkJLyogIF9fdTggIGJEZXNjcmlwdG9yVHlwZTsgSHViLWRlc2NyaXB0b3IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMgYi9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jCmluZGV4IDA5MzkzODYuLmQyZjYxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwpAQCAtMTQyMSw3ICsxNDIxLDggQEAKIAogCiAvKiBJT0NUTCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgYXVlcmNoYXJfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGF1ZXJjaGFyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewogCXBhdWVyY2hhcl90IGNjcCA9IChwYXVlcmNoYXJfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwOwpAQCAtMTQ1Miw3ICsxNDUzLDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZjY3AtPm11dGV4KTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKIAl9Ci0KKwlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAoY21kKSB7CiAKIAkvKiByZXR1cm4gIT0gMCBpZiBUcmFuc21pdHQgY2hhbm5lbCByZWFkeSB0byBzZW5kICovCkBAIC0xNTQ3LDkgKzE1NDgsMTAgQEAKIAogCWRlZmF1bHQ6CiAJCWRiZyAoIklPQ1RMX0FVX1VOS05PV04iKTsKLQkJcmV0ID0gLUVOT0lPQ1RMQ01EOworCQlyZXQgPSAtRU5PVFRZOwogCQlicmVhazsKICAgICAgICAgfQorICAgICAgICB1bmxvY2tfa2VybmVsKCk7CiAJLyogcmVsZWFzZSB0aGUgbXV0ZXhlcyAqLwogCW11dGV4X3VubG9jaygmY3AtPm11dGV4KTsKIAltdXRleF91bmxvY2soJmNjcC0+bXV0ZXgpOwpAQCAtMTg2MCw3ICsxODYyLDcgQEAKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCS5yZWFkID0JCWF1ZXJjaGFyX3JlYWQsCiAJLndyaXRlID0gICAgICAgIGF1ZXJjaGFyX3dyaXRlLAotCS5pb2N0bCA9CWF1ZXJjaGFyX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGF1ZXJjaGFyX2lvY3RsLAogCS5vcGVuID0JCWF1ZXJjaGFyX29wZW4sCiAJLnJlbGVhc2UgPQlhdWVyY2hhcl9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwppbmRleCAyMDg4NmMyLi41ZDg1OWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCkBAIC02LDggKzYsNiBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgotICogCi0gKiAkSWQ6IGVtaTYyLmMsdiAxLjE1IDIwMDIvMDQvMjMgMDY6MTM6NTkgdGFwaW8gRXhwICQKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jIGIvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYwppbmRleCBlYzg4YjNiLi45N2MyODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKQEAgLTY1NiwyOSArNjU2LDYgQEAKIH0KIAogCi0jZGVmaW5lIEZURElfRUxBTl9JT0NfTUFHSUMgMHhBMQotI2RlZmluZSBGVERJX0VMQU5fSU9DREVCVUcgX0lPQyhfSU9DX1dSSVRFLCBGVERJX0VMQU5fSU9DX01BR0lDLCAxLCAxMzIpCi1zdGF0aWMgaW50IGZ0ZGlfZWxhbl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLSAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0gICAgICAgIHN3aXRjaCAoY21kKSB7Ci0gICAgICAgIGNhc2UgRlRESV9FTEFOX0lPQ0RFQlVHOnsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgbGluZVsxMzJdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUgPSBzdHJuY3B5X2Zyb21fdXNlcihsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciBfX3VzZXIgKilhcmcsIHNpemVvZihsaW5lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlRPRE86IGlvY3RsICVzXG4iLCBsaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICB9Ci19Ci0KLQogLyoKICoKICogYmxvY2tpbmcgYnVsayByZWFkcyBhcmUgdXNlZCB0byBnZXQgZGF0YSBmcm9tIHRoZSBkZXZpY2UKQEAgLTEyMjIsNyArMTE5OSw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdGRpX2VsYW5fZm9wcyA9IHsKICAgICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAgIC5sbHNlZWsgPSBub19sbHNlZWssCi0gICAgICAgIC5pb2N0bCA9IGZ0ZGlfZWxhbl9pb2N0bCwKICAgICAgICAgLnJlYWQgPSBmdGRpX2VsYW5fcmVhZCwKICAgICAgICAgLndyaXRlID0gZnRkaV9lbGFuX3dyaXRlLAogICAgICAgICAub3BlbiA9IGZ0ZGlfZWxhbl9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYyBiL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKaW5kZXggMWNiNTRhMi4uZTZjYTk5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCkBAIC00NzQsOCArNDc0LDggQEAKIC8qKgogICoJaW93YXJyaW9yX2lvY3RsCiAgKi8KLXN0YXRpYyBpbnQgaW93YXJyaW9yX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBpb3dhcnJpb3JfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGlvd2FycmlvciAqZGV2ID0gTlVMTDsKIAlfX3U4ICpidWZmZXI7CkBAIC00OTMsNiArNDkzLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAogCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwpAQCAtNTg0LDYgKzU4NSw3IEBACiBlcnJvcl9vdXQ6CiAJLyogdW5sb2NrIHRoZSBkZXZpY2UgKi8KIAltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAlrZnJlZShidWZmZXIpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC03MTksNyArNzIxLDcgQEAKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkud3JpdGUgPSBpb3dhcnJpb3Jfd3JpdGUsCiAJLnJlYWQgPSBpb3dhcnJpb3JfcmVhZCwKLQkuaW9jdGwgPSBpb3dhcnJpb3JfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gaW93YXJyaW9yX2lvY3RsLAogCS5vcGVuID0gaW93YXJyaW9yX29wZW4sCiAJLnJlbGVhc2UgPSBpb3dhcnJpb3JfcmVsZWFzZSwKIAkucG9sbCA9IGlvd2Fycmlvcl9wb2xsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKaW5kZXggMzMwYzE4ZS4uMjQ4YTEyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCkBAIC0xMDQsOSArMTA0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotaW9jdGxfcmlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCSAgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBpb2N0bF9yaW8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBSaW9Db21tYW5kIHJpb19jbWQ7CiAJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKQEAgLTExNiw2ICsxMTQsNyBAQAogCWludCByZXRyaWVzOwogCWludCByZXR2YWw9MDsKIAorCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmKHJpby0+bG9jaykpOwogICAgICAgICAvKiBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHJpbyBpcyBjb25uZWN0ZWQsIHBvd2VyZWQsIGV0YyAqLwogICAgICAgICBpZiAocmlvLT5wcmVzZW50ID09IDAgfHwgcmlvLT5yaW9fZGV2ID09IE5VTEwpIHsKQEAgLTI1NCw2ICsyNTMsNyBAQAogCiBlcnJfb3V0OgogCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC00MzMsNyArNDMzLDcgQEAKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVhZCA9CQlyZWFkX3JpbywKIAkud3JpdGUgPQl3cml0ZV9yaW8sCi0JLmlvY3RsID0JaW9jdGxfcmlvLAorCS51bmxvY2tlZF9pb2N0bCA9IGlvY3RsX3JpbywKIAkub3BlbiA9CQlvcGVuX3JpbywKIAkucmVsZWFzZSA9CWNsb3NlX3JpbywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCmluZGV4IDMzMTgyZjQuLmZiYWNlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCkBAIC0yOTgyLDkgKzI5ODIsOCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQKLXNpc3VzYl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKLQkJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nCitzaXN1c2JfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKIAlzdHJ1Y3Qgc2lzdXNiX2luZm8geDsKQEAgLTI5OTUsNiArMjk5NCw3IEBACiAJaWYgKCEoc2lzdXNiID0gKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGEpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmc2lzdXNiLT5sb2NrKTsKIAogCS8qIFNhbml0eSBjaGVjayAqLwpAQCAtMzA1Myw2ICszMDUzLDcgQEAKIAogZXJyX291dDoKIAltdXRleF91bmxvY2soJnNpc3VzYi0+bG9jayk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTMwNjYsOSArMzA2Nyw3IEBACiAJCWNhc2UgU0lTVVNCX0dFVF9DT05GSUdfU0laRToKIAkJY2FzZSBTSVNVU0JfR0VUX0NPTkZJRzoKIAkJY2FzZSBTSVNVU0JfQ09NTUFORDoKLQkJCWxvY2tfa2VybmVsKCk7Ci0JCQlyZXR2YWwgPSBzaXN1c2JfaW9jdGwoZi0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZiwgY21kLCBhcmcpOwotCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJcmV0dmFsID0gc2lzdXNiX2lvY3RsKGYsIGNtZCwgYXJnKTsKIAkJCXJldHVybiByZXR2YWw7CiAKIAkJZGVmYXVsdDoKQEAgLTMwODcsNyArMzA4Niw3IEBACiAjaWZkZWYgU0lTVVNCX05FV19DT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCA9IHNpc3VzYl9jb21wYXRfaW9jdGwsCiAjZW5kaWYKLQkuaW9jdGwgPQlzaXN1c2JfaW9jdGwKKwkudW5sb2NrZWRfaW9jdGwgPSBzaXN1c2JfaW9jdGwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2Jfc2lzdXNiX2NsYXNzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKaW5kZXggN2Y3MDIxZS4uMmRiNDIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGxjZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBsY2RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCB1c2JfbGNkICpkZXY7CiAJdTE2IGJjZERldmljZTsKQEAgLTE1OCwxMiArMTU4LDE0IEBACiAJCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIElPQ1RMX0dFVF9IQVJEX1ZFUlNJT046CisJCWxvY2tfa2VybmVsKCk7CiAJCWJjZERldmljZSA9IGxlMTZfdG9fY3B1KChkZXYtPnVkZXYpLT5kZXNjcmlwdG9yLmJjZERldmljZSk7CiAJCXNwcmludGYoYnVmLCIlMWQlMWQuJTFkJTFkIiwKIAkJCShiY2REZXZpY2UgJiAweEYwMDApPj4xMiwKIAkJCShiY2REZXZpY2UgJiAweEYwMCk+PjgsCiAJCQkoYmNkRGV2aWNlICYgMHhGMCk+PjQsCiAJCQkoYmNkRGV2aWNlICYgMHhGKSk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsYnVmLHN0cmxlbihidWYpKSE9MCkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKQEAgLTI3Miw3ICsyNzQsNyBAQAogICAgICAgICAucmVhZCA9ICAgICAgICAgbGNkX3JlYWQsCiAgICAgICAgIC53cml0ZSA9ICAgICAgICBsY2Rfd3JpdGUsCiAgICAgICAgIC5vcGVuID0gICAgICAgICBsY2Rfb3BlbiwKLQkuaW9jdGwgPSAgICAgICAgbGNkX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGxjZF9pb2N0bCwKICAgICAgICAgLnJlbGVhc2UgPSAgICAgIGxjZF9yZWxlYXNlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKaW5kZXggMjkzYTQ2Mi4uNjU2NmZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCkBAIC0xMTYyLDggKzExNjIsOSBAQAogCWlmIChtaW5vciA+PSBNT05fQklOX01BWF9NSU5PUikKIAkJcmV0dXJuIDA7CiAKLQlkZXYgPSBkZXZpY2VfY3JlYXRlKG1vbl9iaW5fY2xhc3MsIHVidXM/IHVidXMtPmNvbnRyb2xsZXI6IE5VTEwsCi0JCQlNS0RFVihNQUpPUihtb25fYmluX2RldjApLCBtaW5vciksICJ1c2Jtb24lZCIsIG1pbm9yKTsKKwlkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEobW9uX2Jpbl9jbGFzcywgdWJ1cz8gdWJ1cy0+Y29udHJvbGxlcjogTlVMTCwKKwkJCQkgICAgTUtERVYoTUFKT1IobW9uX2Jpbl9kZXYwKSwgbWlub3IpLCBOVUxMLAorCQkJCSAgICAidXNibW9uJWQiLCBtaW5vcik7CiAJaWYgKElTX0VSUihkZXYpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9zdGF0LmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3N0YXQuYwppbmRleCBjN2E1OTVjLi5hYzhiMGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX3N0YXQuYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3N0YXQuYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInVzYl9tb24uaCIKQEAgLTQyLDE5ICs0Myw4IEBACiAJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBzbmFwICpzcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlsb2ZmX3QgcG9zID0gKnBwb3M7Ci0JaW50IGNudDsKIAotCWlmIChwb3MgPCAwIHx8IHBvcyA+PSBzcC0+c2xlbikKLQkJcmV0dXJuIDA7Ci0JaWYgKG5ieXRlcyA9PSAwKQotCQlyZXR1cm4gMDsKLQlpZiAoKGNudCA9IHNwLT5zbGVuIC0gcG9zKSA+IG5ieXRlcykKLQkJY250ID0gbmJ5dGVzOwotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBzcC0+c3RyICsgcG9zLCBjbnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkqcHBvcyA9IHBvcyArIGNudDsKLQlyZXR1cm4gY250OworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgc3AtPnN0ciwgc3AtPnNsZW4pOwogfQogCiBzdGF0aWMgaW50IG1vbl9zdGF0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCmluZGV4IDlhNzY4MWIuLjg4NzhjMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCkBAIC02NCwxNCArNjQsNiBAQAogCSAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICAgIHdpbGwgYmUgY2FsbGVkIGFpcmNhYmxlLgogCi1jb25maWcgVVNCX1NFUklBTF9BSVJQUklNRQotCXRyaXN0YXRlICJVU0IgQWlyUHJpbWUgQ0RNQSBXaXJlbGVzcyBEcml2ZXIiCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBBaXJQcmltZSBDRE1BIFdpcmVsZXNzIFBDIGNhcmQuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFpcnByaW1lLgotCiBjb25maWcgVVNCX1NFUklBTF9BUkszMTE2CiAJdHJpc3RhdGUgIlVTQiBBUksgTWljcm8gMzExNiBVU0IgU2VyaWFsIERyaXZlciIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKaW5kZXggMTdhNzYyYS4uNjA0N2Y4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNiBAQAogdXNic2VyaWFsLW9ianMJOj0gdXNiLXNlcmlhbC5vIGdlbmVyaWMubyBidXMubyAkKHVzYnNlcmlhbC1vYmoteSkKIAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUpCQkrPSBhaXJjYWJsZS5vCi1vYmotJChDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSkJCSs9IGFpcnByaW1lLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYpCQkrPSBhcmszMTE2Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTikJCQkrPSBiZWxraW5fc2Eubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEpCQkJKz0gY2gzNDEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYwppbmRleCBkYjZmOTdhLi43OWVhOThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJICogNjQgYnl0ZXMsIHRvIGVuc3VyZSBJIGRvIG5vdCBnZXQgdGhyb3R0bGVkLgogCSAqIEFzayBVU0IgbWFpbGluZyBsaXN0IGZvciBiZXR0ZXIgYXByb2FjaC4KIAkgKi8KLQl0dHkgPSBwb3J0LT50dHk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAKIAlpZiAoIXR0eSkgewogCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yeF93b3JrKTsKQEAgLTM3OCwxMyArMzc4LDE0IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGFpcmNhYmxlX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgYWlyY2FibGVfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBhaXJjYWJsZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXJldHVybiBzZXJpYWxfYnVmX2RhdGFfYXZhaWwocHJpdi0+dHhfYnVmKTsKIH0KIAotc3RhdGljIGludCBhaXJjYWJsZV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorc3RhdGljIGludCBhaXJjYWJsZV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTQ2Niw3ICs0NjcsNyBAQAogCiAJaWYgKHN0YXR1cykgewogCQlkYmcoIiVzIC0gdXJiIHN0YXR1cyA9ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0JCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlpZiAoIXBvcnQtPnBvcnQuY291bnQpIHsKIAkJCWRiZygiJXMgLSBwb3J0IGlzIGNsb3NlZCwgZXhpdGluZy4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTQ5NCw3ICs0OTUsNyBAQAogCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCiAJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKLQl0dHkgPSBwb3J0LT50dHk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8PSAyKSB7CiAJCQkvKiBUaGlzIGlzIGFuIGluY29tcGxldGUgcGFja2FnZSAqLwpAQCAtNTI4LDcgKzUyOSw3IEBACiAJfQogCiAJLyogU2NoZWR1bGUgdGhlIG5leHQgcmVhZCBfaWZfIHdlIGFyZSBzdGlsbCBvcGVuICovCi0JaWYgKHBvcnQtPm9wZW5fY291bnQpIHsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCkgewogCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkJICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkJCSAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLApAQCAtNTQ3LDggKzU0OCw5IEBACiB9CiAKIC8qIEJhc2VkIG9uIGZ0ZGlfc2lvLmMgdGhyb3R0bGUgKi8KLXN0YXRpYyB2b2lkIGFpcmNhYmxlX3Rocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBhaXJjYWJsZV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBhaXJjYWJsZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTU2MCw4ICs1NjIsOSBAQAogfQogCiAvKiBCYXNlZCBvbiBmdGRpX3Npby5jIHVudGhyb3R0bGUgKi8KLXN0YXRpYyB2b2lkIGFpcmNhYmxlX3VudGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGFpcmNhYmxlX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgYWN0dWFsbHlfdGhyb3R0bGVkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlycHJpbWUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk4YzE0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUzICswLDAgQEAKLS8qCi0gKiBBaXJQcmltZSBDRE1BIFdpcmVsZXNzIFNlcmlhbCBVU0IgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCi0gKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoMHgwYzg4LCAweDE3ZGEpIH0sIC8qIEt5b2NlcmEgV2lyZWxlc3MgS1BDNjUwL1Bhc3Nwb3J0ICovCi0JeyB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLSNkZWZpbmUgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFCTQwOTYKLSNkZWZpbmUgTlVNX1JFQURfVVJCUwkJCTQKLSNkZWZpbmUgTlVNX1dSSVRFX1VSQlMJCQk0Ci0jZGVmaW5lIE5VTV9CVUxLX0VQUwkJCTMKLSNkZWZpbmUgTUFYX0JVTEtfRVBTCQkJNgotCi0vKiBpZiBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyLCB0aGVuIHVzZSB0aGVpciB2YWx1ZSBmb3IgdGhlIHNpemUgb2YgdGhlCi0gKiByZWFkIGFuZCB3cml0ZSB1cmJzLCBhbmQgdGhlIG51bWJlciBvZiBlbmRwb2ludHMgKi8KLXN0YXRpYyBpbnQgYnVmZmVyX3NpemUgPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7Ci1zdGF0aWMgaW50IGVuZHBvaW50cyA9IE5VTV9CVUxLX0VQUzsKLXN0YXRpYyBpbnQgZGVidWc7Ci1zdHJ1Y3QgYWlycHJpbWVfcHJpdmF0ZSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCWludCBvdXRzdGFuZGluZ191cmJzOwotCWludCB0aHJvdHRsZWQ7Ci0Jc3RydWN0IHVyYiAqcmVhZF91cmJwW05VTV9SRUFEX1VSQlNdOwotCi0JLyogU2V0dGluZ3MgZm9yIHRoZSBwb3J0ICovCi0JaW50IHJ0c19zdGF0ZTsJLyogSGFuZHNoYWtpbmcgcGlucyAob3V0cHV0cykgKi8KLQlpbnQgZHRyX3N0YXRlOwotCWludCBjdHNfc3RhdGU7CS8qIEhhbmRzaGFraW5nIHBpbnMgKGlucHV0cykgKi8KLQlpbnQgZHNyX3N0YXRlOwotCWludCBkY2Rfc3RhdGU7Ci0JaW50IHJpX3N0YXRlOwotfTsKLQotc3RhdGljIGludCBhaXJwcmltZV9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlzdHJ1Y3QgYWlycHJpbWVfcHJpdmF0ZSAqcHJpdjsKLQotCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlpZiAocG9ydC0+bnVtYmVyICE9IDApCi0JCXJldHVybiAwOwotCi0JcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQotCWlmIChwb3J0LT50dHkpIHsKLQkJaW50IHZhbCA9IDA7Ci0JCWlmIChwcml2LT5kdHJfc3RhdGUpCi0JCQl2YWwgfD0gMHgwMTsKLQkJaWYgKHByaXYtPnJ0c19zdGF0ZSkKLQkJCXZhbCB8PSAweDAyOwotCi0JCXJldHVybiB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCi0JCQkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkJCTB4MjIsIDB4MjEsIHZhbCwgMCwgTlVMTCwgMCwKLQkJCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhaXJwcmltZV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7Ci0JdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0JaW50IHJlc3VsdDsKLQlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7Ci0KLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCi0JaWYgKHN0YXR1cykgewotCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKLQkJcmV0dXJuOwotCX0KLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAotCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKLQotCXR0eSA9IHBvcnQtPnR0eTsKLQlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQl9Ci0KLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAotCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBhaXJwcmltZV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCBhaXJwcmltZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLwotCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQotCWlmIChzdGF0dXMpCi0JCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCS0tcHJpdi0+b3V0c3RhbmRpbmdfdXJiczsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQl1c2Jfc2VyaWFsX3BvcnRfc29mdGludChwb3J0KTsKLX0KLQotc3RhdGljIGludCBhaXJwcmltZV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBhaXJwcmltZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCWNoYXIgKmJ1ZmZlciA9IE5VTEw7Ci0JaW50IGk7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCi0JLyogaW5pdGlhbGl6ZSBvdXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBpZiBpdCBpc24ndCBhbHJlYWR5IGNyZWF0ZWQgKi8KLQlpZiAoIXByaXYpIHsKLQkJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcHJpdikgewotCQkJcmVzdWx0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpOwotCX0KLQotCS8qIFNldCBzb21lIHNhbmUgZGVmYXVsdHMgKi8KLQlwcml2LT5ydHNfc3RhdGUgPSAxOwotCXByaXYtPmR0cl9zdGF0ZSA9IDE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JFQURfVVJCUzsgKytpKSB7Ci0JCWJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWJ1ZmZlcikgewotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCQlyZXN1bHQgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvdXQ7Ci0JCX0KLQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF1cmIpIHsKLQkJCWtmcmVlKGJ1ZmZlcik7Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG5vIG1vcmUgdXJicz9cbiIsCi0JCQkJX19mdW5jX18pOwotCQkJcmVzdWx0ID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyb3V0OwotCQl9Ci0JCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCi0JCQkJICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCi0JCQkJCSAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKLQkJCQkgIGJ1ZmZlciwgYnVmZmVyX3NpemUsCi0JCQkJICBhaXJwcmltZV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJCWtmcmVlKGJ1ZmZlcik7Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsCi0JCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIgJWQgZm9yIHBvcnQgJWQsIGVycm9yICVkXG4iLAotCQkJCV9fZnVuY19fLCBpLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7Ci0JCQlnb3RvIGVycm91dDsKLQkJfQotCQkvKiByZW1lbWJlciB0aGlzIHVyYiBzbyB3ZSBjYW4ga2lsbCBpdCB3aGVuIHRoZQotCQkgICBwb3J0IGlzIGNsb3NlZCAqLwotCQlwcml2LT5yZWFkX3VyYnBbaV0gPSB1cmI7Ci0JfQotCi0JYWlycHJpbWVfc2VuZF9zZXR1cChwb3J0KTsKLQotCWdvdG8gb3V0OwotCi0gZXJyb3V0OgotCS8qIHNvbWUgZXJyb3IgaGFwcGVuZWQsIGNhbmNlbCBhbnkgc3VibWl0dGVkIHVyYnMgYW5kIGNsZWFuIHVwCi0JICAgYW55dGhpbmcgdGhhdCBnb3QgYWxsb2NhdGVkIHN1Y2Nlc3NmdWxseSAqLwotCi0Jd2hpbGUgKGktLSAhPSAwKSB7Ci0JCXVyYiA9IHByaXYtPnJlYWRfdXJicFtpXTsKLQkJYnVmZmVyID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JCXVzYl9raWxsX3VyYih1cmIpOwotCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJa2ZyZWUoYnVmZmVyKTsKLQl9Ci0KLSBvdXQ6Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgYWlycHJpbWVfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGFpcnByaW1lX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JaW50IGk7Ci0KLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCi0JcHJpdi0+cnRzX3N0YXRlID0gMDsKLQlwcml2LT5kdHJfc3RhdGUgPSAwOwotCi0JbXV0ZXhfbG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKLQlpZiAoIXBvcnQtPnNlcmlhbC0+ZGlzY29ubmVjdGVkKQotCQlhaXJwcmltZV9zZW5kX3NldHVwKHBvcnQpOwotCW11dGV4X3VubG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVBRF9VUkJTOyArK2kpIHsKLQkJdXNiX2tpbGxfdXJiKHByaXYtPnJlYWRfdXJicFtpXSk7Ci0JCWtmcmVlKHByaXYtPnJlYWRfdXJicFtpXS0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJdXNiX2ZyZWVfdXJiKHByaXYtPnJlYWRfdXJicFtpXSk7Ci0JfQotCi0JLyogZnJlZSB1cCBwcml2YXRlIHN0cnVjdHVyZSAqLwotCWtmcmVlKHByaXYpOwotCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKLX0KLQotc3RhdGljIGludCBhaXJwcmltZV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKLXsKLQlzdHJ1Y3QgYWlycHJpbWVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCXN0cnVjdCB1cmIgKnVyYjsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc3RhdHVzOwotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmIChwcml2LT5vdXRzdGFuZGluZ191cmJzID4gTlVNX1dSSVRFX1VSQlMpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAwOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JYnVmZmVyID0ga21hbGxvYyhjb3VudCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwotCWlmICghdXJiKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIm5vIG1vcmUgZnJlZSB1cmJzXG4iKTsKLQkJa2ZyZWUoYnVmZmVyKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCW1lbWNweShidWZmZXIsIGJ1ZiwgY291bnQpOwotCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIGJ1ZmZlcik7Ci0KLQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LAotCQkJICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCi0JCQkJCSAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKLQkJCSAgYnVmZmVyLCBjb3VudCwKLQkJCSAgYWlycHJpbWVfd3JpdGVfYnVsa19jYWxsYmFjaywgcG9ydCk7Ci0KLQkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KLQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChzdGF0dXMpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWRcbiIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzKTsKLQkJY291bnQgPSBzdGF0dXM7Ci0JCWtmcmVlKGJ1ZmZlcik7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJKytwcml2LT5vdXRzdGFuZGluZ191cmJzOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JfQotCS8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyB1cmIsIHNvIGxldCB0aGUgaG9zdCBkcml2ZXIKLQkgKiByZWFsbHkgZnJlZSBpdCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggaXQgKi8KLQl1c2JfZnJlZV91cmIodXJiKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhaXJwcmltZV9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJImFpcnByaW1lIiwKLQkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAotCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CWlkX3RhYmxlLAotCS5ub19keW5hbWljX2lkID0JMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgYWlycHJpbWVfZGV2aWNlID0gewotCS5kcml2ZXIgPSB7Ci0JCS5vd25lciA9CVRISVNfTU9EVUxFLAotCQkubmFtZSA9CQkiYWlycHJpbWUiLAotCX0sCi0JLnVzYl9kcml2ZXIgPQkJJmFpcnByaW1lX2RyaXZlciwKLQkuaWRfdGFibGUgPQkJaWRfdGFibGUsCi0JLm9wZW4gPQkJCWFpcnByaW1lX29wZW4sCi0JLmNsb3NlID0JCWFpcnByaW1lX2Nsb3NlLAotCS53cml0ZSA9CQlhaXJwcmltZV93cml0ZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFpcnByaW1lX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0dmFsOwotCi0JYWlycHJpbWVfZGV2aWNlLm51bV9wb3J0cyA9IGVuZHBvaW50czsKLQlpZiAoZW5kcG9pbnRzIDwgMCB8fCBlbmRwb2ludHMgPj0gTUFYX0JVTEtfRVBTKQotCQlhaXJwcmltZV9kZXZpY2UubnVtX3BvcnRzID0gTlVNX0JVTEtfRVBTOwotCi0JcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmYWlycHJpbWVfZGV2aWNlKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmYWlycHJpbWVfZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmFpcnByaW1lX2RldmljZSk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFpcnByaW1lX2V4aXQodm9pZCkKLXsKLQlkYmcoIiVzIiwgX19mdW5jX18pOwotCi0JdXNiX2RlcmVnaXN0ZXIoJmFpcnByaW1lX2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZhaXJwcmltZV9kZXZpY2UpOwotfQotCi1tb2R1bGVfaW5pdChhaXJwcmltZV9pbml0KTsKLW1vZHVsZV9leGl0KGFpcnByaW1lX2V4aXQpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIik7Ci1tb2R1bGVfcGFyYW0oYnVmZmVyX3NpemUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGJ1ZmZlcl9zaXplLAotCQkiU2l6ZSBvZiB0aGUgdHJhbnNmZXIgYnVmZmVycyBpbiBieXRlcyAoZGVmYXVsdCA0MDk2KSIpOwotbW9kdWxlX3BhcmFtKGVuZHBvaW50cywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5kcG9pbnRzLCAiTnVtYmVyIG9mIGJ1bGsgRVBzIHRvIGNvbmZpZ3VyZSAoZGVmYXVsdCAzKSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKaW5kZXggNzc4OTVjOC4uYWVjNjE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jCkBAIC0xNTgsMTIgKzE1OCwxMyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgdm9pZCBhcmszMTE2X3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCitzdGF0aWMgdm9pZCBhcmszMTE2X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IGFyazMxMTZfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MgPSBwb3J0LT50dHktPnRlcm1pb3M7CisJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zID0gdHR5LT50ZXJtaW9zOwogCXVuc2lnbmVkIGludCBjZmxhZyA9IHRlcm1pb3MtPmNfY2ZsYWc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYmF1ZDsKQEAgLTE3Nyw4ICsxNzgsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQpIHsKLQkJKihwb3J0LT50dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOwotCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCOTYwMCB8IENTOAorCQkqdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKKwkJdGVybWlvcy0+Y19jZmxhZyA9IEI5NjAwIHwgQ1M4CiAJCQkJCSAgICAgIHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKIAkJdGVybWlvcy0+Y19pc3BlZWQgPSA5NjAwOwogCQl0ZXJtaW9zLT5jX29zcGVlZCA9IDk2MDA7CkBAIC0xOTIsNyArMTkzLDcgQEAKIAlidWYgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCWRiZygiZXJyb3Iga21hbGxvYyIpOwotCQkqcG9ydC0+dHR5LT50ZXJtaW9zID0gKm9sZF90ZXJtaW9zOworCQkqdGVybWlvcyA9ICpvbGRfdGVybWlvczsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQzLDcgKzI0NCw3IEBACiAJfQogCiAJLyogc2V0IGJhdWRyYXRlICovCi0JYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAKIAlzd2l0Y2ggKGJhdWQpIHsKIAljYXNlIDc1OgpAQCAtMjYyLDExICsyNjMsMTEgQEAKIAljYXNlIDIzMDQwMDoKIAljYXNlIDQ2MDgwMDoKIAkJLyogUmVwb3J0IHRoZSByZXN1bHRpbmcgcmF0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgKi8KLQkJdHR5X2VuY29kZV9iYXVkX3JhdGUocG9ydC0+dHR5LCBiYXVkLCBiYXVkKTsKKwkJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKIAkJYnJlYWs7CiAJLyogc2V0IDk2MDAgYXMgZGVmYXVsdCAoaWYgZ2l2ZW4gYmF1ZHJhdGUgaXMgaW52YWxpZCBmb3IgZXhhbXBsZSkgKi8KIAlkZWZhdWx0OgotCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShwb3J0LT50dHksIDk2MDAsIDk2MDApOworCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIDk2MDAsIDk2MDApOwogCWNhc2UgMDoKIAkJYmF1ZCA9IDk2MDA7CiAJfQpAQCAtMzE3LDcgKzMxOCw4IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGFyazMxMTZfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgYXJrMzExNl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBrdGVybWlvcyB0bXBfdGVybWlvczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtMzMyLDcgKzMzNCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXJlc3VsdCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHBvcnQsIGZpbHApOworCXJlc3VsdCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHR0eSwgcG9ydCwgZmlscCk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBlcnJfb3V0OwogCkBAIC0zNjIsOCArMzY0LDggQEAKIAlBUkszMTE2X1JDVihzZXJpYWwsIDEyNCwgMHhGRSwgMHhDMCwgMHgwMDAwLCAweDAwMDYsIDB4RkYsIGJ1Zik7CiAKIAkvKiBpbml0aWFsaXNlIHRlcm1pb3MgKi8KLQlpZiAocG9ydC0+dHR5KQotCQlhcmszMTE2X3NldF90ZXJtaW9zKHBvcnQsICZ0bXBfdGVybWlvcyk7CisJaWYgKHR0eSkKKwkJYXJrMzExNl9zZXRfdGVybWlvcyh0dHksIHBvcnQsICZ0bXBfdGVybWlvcyk7CiAKIGVycl9vdXQ6CiAJa2ZyZWUoYnVmKTsKQEAgLTM3MSw5ICszNzMsMTAgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGFyazMxMTZfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGFyazMxMTZfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3Qgc2Vyc3RydWN0OwogCXZvaWQgX191c2VyICp1c2VyX2FyZyA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIApAQCAtNDAzLDggKzQwNiw5IEBACiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAotc3RhdGljIGludCBhcmszMTE2X3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBhcmszMTE2X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJY2hhciAqYnVmOwogCWNoYXIgdGVtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYwppbmRleCAwYTMyMmZjLi4yZWJlMDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCkBAIC03LDEzICs3LDE0IEBACiAgKiAgVGhpcyBwcm9ncmFtIGlzIGxhcmdlbHkgZGVyaXZlZCBmcm9tIHdvcmsgYnkgdGhlIGxpbnV4LXVzYiBncm91cAogICogIGFuZCBhc3NvY2lhdGVkIHNvdXJjZSBmaWxlcy4gIFBsZWFzZSBzZWUgdGhlIHVzYi9zZXJpYWwgZmlsZXMgZm9yCiAgKiAgaW5kaXZpZHVhbCBjcmVkaXRzIGFuZCBjb3B5cmlnaHRzLgotICogIAorICoKICAqIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIAkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMKKyAqIGRyaXZlcgogICoKICAqIFRPRE86CiAgKiAtLSBBZGQgdHJ1ZSBtb2RlbSBjb250b2wgbGluZSBxdWVyeSBjYXBhYmlsaXR5LiAgQ3VycmVudGx5IHdlIHRyYWNrIHRoZQpAQCAtMjgsNyArMjksOCBAQAogICogCWNvbXByZXNzZWQgYWxsIHRoZSBkaWZmZXJuZW50IGRldmljZSBlbnRyaWVzIGludG8gMS4KICAqCiAgKiAzMC1NYXktMjAwMSBna2gKLSAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mCisgKglwcm9ibGVtcy4KICAqCiAgKiAwOC1BcHItMjAwMSBnYgogICoJLSBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgpAQCAtNDEsNyArNDMsNyBAQAogICoJLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgb2xkIEJlbGtpbiBhbmQgUGVyYWNvbSBkZXZpY2VzLgogICoJLSBNYWRlIHRoZSBwb3J0IGFibGUgdG8gYmUgb3BlbmVkIG11bHRpcGxlIHRpbWVzLgogICoJLSBBZGRlZCBzb21lIGRlZmF1bHRzIGluY2FzZSB0aGUgbGluZSBzZXR0aW5ncyBhcmUgdGhpbmdzIHRoZXNlIGRldmljZXMKLSAqCSAgY2FuJ3Qgc3VwcG9ydC4gCisgKgkgIGNhbid0IHN1cHBvcnQuCiAgKgogICogMTgtT2N0LTIwMDAgV2lsbGlhbSBHcmVhdGhvdXNlCiAgKiAgICBSZWxlYXNlZCBpbnRvIHRoZSB3aWxkIChsaW51eC11c2ItZGV2ZWwpCkBAIC03Miw3ICs3NCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlICJiZWxraW5fc2EuaCIKQEAgLTg3LDE2ICs4OSwxOSBAQAogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEJlbGtpbiBTZXJpYWwgY29udmVydGVyIGRyaXZlciIKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYSBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIEY1VTEwMyAqLwotc3RhdGljIGludCAgYmVsa2luX3NhX3N0YXJ0dXAJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyB2b2lkIGJlbGtpbl9zYV9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCAgYmVsa2luX3NhX29wZW4JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBiZWxraW5fc2FfY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBiZWxraW5fc2FfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2V0X3Rlcm1pb3MJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqIG9sZCk7Ci1zdGF0aWMgaW50ICBiZWxraW5fc2FfaW9jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyB2b2lkIGJlbGtpbl9zYV9icmVha19jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKTsKLXN0YXRpYyBpbnQgIGJlbGtpbl9zYV90aW9jbWdldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBpbnQgIGJlbGtpbl9zYV90aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIGludCAgYmVsa2luX3NhX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBiZWxraW5fc2Ffb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgYmVsa2luX3NhX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBiZWxraW5fc2FfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICogb2xkKTsKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgIGJlbGtpbl9zYV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBiZWxraW5fc2FfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CiAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0gewpAQCAtMTA2LDEwICsxMTEsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoR09IVUJTX1ZJRCwgR09IVUJTX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoR09IVUJTX1ZJRCwgSEFORFlMSU5LX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkVMS0lOX0RPQ0tTVEFUSU9OX1ZJRCwgQkVMS0lOX0RPQ0tTVEFUSU9OX1BJRCkgfSwKLQl7IH0JCQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KKwl7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJlbGtpbl9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJImJlbGtpbiIsCkBAIC0xMzEsOCArMTM2LDggQEAKIAkubnVtX3BvcnRzID0JCTEsCiAJLm9wZW4gPQkJCWJlbGtpbl9zYV9vcGVuLAogCS5jbG9zZSA9CQliZWxraW5fc2FfY2xvc2UsCi0JLnJlYWRfaW50X2NhbGxiYWNrID0JYmVsa2luX3NhX3JlYWRfaW50X2NhbGxiYWNrLAkvKiBIb3cgd2UgZ2V0IHRoZSBzdGF0dXMgaW5mbyAqLwotCS5pb2N0bCA9CQliZWxraW5fc2FfaW9jdGwsCisJLnJlYWRfaW50X2NhbGxiYWNrID0JYmVsa2luX3NhX3JlYWRfaW50X2NhbGxiYWNrLAorCQkJCQkvKiBIb3cgd2UgZ2V0IHRoZSBzdGF0dXMgaW5mbyAqLwogCS5zZXRfdGVybWlvcyA9CQliZWxraW5fc2Ffc2V0X3Rlcm1pb3MsCiAJLmJyZWFrX2N0bCA9CQliZWxraW5fc2FfYnJlYWtfY3RsLAogCS50aW9jbWdldCA9CQliZWxraW5fc2FfdGlvY21nZXQsCkBAIC0xNjAsMTIgKzE2NSwxMiBAQAogI2RlZmluZSBXRFJfVElNRU9VVCA1MDAwIC8qIGRlZmF1bHQgdXJiIHRpbWVvdXQgKi8KIAogLyogYXNzdW1lcyB0aGF0IHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgaXMgYXZhaWxhYmxlICovCi0jZGVmaW5lIEJTQV9VU0JfQ01EKGMsdikgdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCBcCisjZGVmaW5lIEJTQV9VU0JfQ01EKGMsIHYpIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgXAogCQkJCQkgICAgKGMpLCBCRUxLSU5fU0FfU0VUX1JFUVVFU1RfVFlQRSwgXAogCQkJCQkgICAgKHYpLCAwLCBOVUxMLCAwLCBXRFJfVElNRU9VVCkKIAogLyogZG8gc29tZSBzdGFydHVwIGFsbG9jYXRpb25zIG5vdCBjdXJyZW50bHkgcGVyZm9ybWVkIGJ5IHVzYl9zZXJpYWxfcHJvYmUoKSAqLwotc3RhdGljIGludCBiZWxraW5fc2Ffc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQgYmVsa2luX3NhX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gc2VyaWFsLT5kZXY7CiAJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2OwpAQCAtMTczLDMyICsxNzgsMzUgQEAKIAkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLwogCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCi0JCXJldHVybiAoLTEpOyAvKiBlcnJvciAqLworCQlyZXR1cm4gLTE7IC8qIGVycm9yICovCiAJLyogc2V0IGluaXRpYWwgdmFsdWVzIGZvciBjb250cm9sIHN0cnVjdHVyZXMgKi8KIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAJcHJpdi0+Y29udHJvbF9zdGF0ZSA9IDA7CiAJcHJpdi0+bGFzdF9sc3IgPSAwOwogCXByaXYtPmxhc3RfbXNyID0gMDsKIAkvKiBzZWUgY29tbWVudHMgYXQgdG9wIG9mIGZpbGUgKi8KLQlwcml2LT5iYWRfZmxvd19jb250cm9sID0gKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpIDw9IDB4MDIwNikgPyAxIDogMDsKLQlpbmZvKCJiY2REZXZpY2U6ICUwNHgsIGJmYzogJWQiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwgcHJpdi0+YmFkX2Zsb3dfY29udHJvbCk7CisJcHJpdi0+YmFkX2Zsb3dfY29udHJvbCA9CisJCShsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA8PSAweDAyMDYpID8gMSA6IDA7CisJaW5mbygiYmNkRGV2aWNlOiAlMDR4LCBiZmM6ICVkIiwKKwkJCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCisJCQkJCXByaXYtPmJhZF9mbG93X2NvbnRyb2wpOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0WzBdLT53cml0ZV93YWl0KTsKIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKLQkKLQlyZXR1cm4gKDApOworCisJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIHZvaWQgYmVsa2luX3NhX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgYmVsa2luX3NhX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2OwogCWludCBpOwotCQotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCS8qIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgKi8KLQlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQkvKiBNeSBzcGVjaWFsIGl0ZW1zLCB0aGUgc3RhbmRhcmQgcm91dGluZXMgZnJlZSBteSB1cmJzICovCiAJCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKIAkJa2ZyZWUocHJpdik7CkBAIC0yMDYsNyArMjE0LDggQEAKIH0KIAogCi1zdGF0aWMgaW50ICBiZWxraW5fc2Ffb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50ICBiZWxraW5fc2Ffb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaW50IHJldHZhbCA9IDA7CiAKQEAgLTIzNSw3ICsyNDQsOCBAQAogfSAvKiBiZWxraW5fc2Ffb3BlbiAqLwogCiAKLXN0YXRpYyB2b2lkIGJlbGtpbl9zYV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBiZWxraW5fc2FfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWRiZygiJXMgcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCkBAIC0yNDYsNyArMjU2LDcgQEAKIH0gLyogYmVsa2luX3NhX2Nsb3NlICovCiAKIAotc3RhdGljIHZvaWQgYmVsa2luX3NhX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCBiZWxraW5fc2FfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2OwpAQCAtMjcyLDcgKzI4Miw4IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCisJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CiAKIAkvKiBIYW5kbGUga25vd24gaW50ZXJydXB0IGRhdGEgKi8KIAkvKiBpZ25vcmUgZGF0YVswXSBhbmQgZGF0YVsxXSAqLwpAQCAtMjgwLDcgKzI5MSw3IEBACiAJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPmxhc3RfbXNyID0gZGF0YVtCRUxLSU5fU0FfTVNSX0lOREVYXTsKLQkKKwogCS8qIFJlY29yZCBDb250cm9sIExpbmUgc3RhdGVzICovCiAJaWYgKHByaXYtPmxhc3RfbXNyICYgQkVMS0lOX1NBX01TUl9EU1IpCiAJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFNSOwpAQCAtMzExLDcgKzMyMiw3IEBACiAJICogdG8gbG9vayBpbiB0byB0aGlzIGJlZm9yZSBjb21taXR0aW5nIGFueSBjb2RlLgogCSAqLwogCWlmIChwcml2LT5sYXN0X2xzciAmIEJFTEtJTl9TQV9MU1JfRVJSKSB7Ci0JCXR0eSA9IHBvcnQtPnR0eTsKKwkJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJCS8qIE92ZXJydW4gRXJyb3IgKi8KIAkJaWYgKHByaXYtPmxhc3RfbHNyICYgQkVMS0lOX1NBX0xTUl9PRSkgewogCQl9CkBAIC0zMjgsMTMgKzMzOSwxNCBAQAogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogZXhpdDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCiAJCSAgICAgX19mdW5jX18sIHJldHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJlbGtpbl9zYV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtMzQ3LDggKzM1OSw4IEBACiAJdW5zaWduZWQgbG9uZyBjb250cm9sX3N0YXRlOwogCWludCBiYWRfZmxvd19jb250cm9sOwogCXNwZWVkX3QgYmF1ZDsKLQlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MgPSBwb3J0LT50dHktPnRlcm1pb3M7Ci0JCisJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zID0gdHR5LT50ZXJtaW9zOworCiAJaWZsYWcgPSB0ZXJtaW9zLT5jX2lmbGFnOwogCWNmbGFnID0gdGVybWlvcy0+Y19jZmxhZzsKIApAQCAtMzU5LDI1ICszNzEsMjYgQEAKIAljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKIAliYWRfZmxvd19jb250cm9sID0gcHJpdi0+YmFkX2Zsb3dfY29udHJvbDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCisKIAlvbGRfaWZsYWcgPSBvbGRfdGVybWlvcy0+Y19pZmxhZzsKIAlvbGRfY2ZsYWcgPSBvbGRfdGVybWlvcy0+Y19jZmxhZzsKIAogCS8qIFNldCB0aGUgYmF1ZCByYXRlICovCiAJaWYgKChjZmxhZyAmIENCQVVEKSAhPSAob2xkX2NmbGFnICYgQ0JBVUQpKSB7CiAJCS8qIHJlYXNzZXJ0IERUUiBhbmQgKG1heWJlKSBSVFMgb24gdHJhbnNpdGlvbiBmcm9tIEIwICovCi0JCWlmKCAob2xkX2NmbGFnJkNCQVVEKSA9PSBCMCApIHsKKwkJaWYgKChvbGRfY2ZsYWcgJiBDQkFVRCkgPT0gQjApIHsKIAkJCWNvbnRyb2xfc3RhdGUgfD0gKFRJT0NNX0RUUnxUSU9DTV9SVFMpOwogCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRFRSX1JFUVVFU1QsIDEpIDwgMCkKIAkJCQllcnIoIlNldCBEVFIgZXJyb3IiKTsKIAkJCS8qIGRvbid0IHNldCBSVFMgaWYgdXNpbmcgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCiAJCQlpZiAoIShvbGRfY2ZsYWcgJiBDUlRTQ1RTKSkKLQkJCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9SVFNfUkVRVUVTVCwgMSkgPCAwKQorCQkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNUCisJCQkJCQkJCSwgMSkgPCAwKQogCQkJCQllcnIoIlNldCBSVFMgZXJyb3IiKTsKIAkJfQogCX0KIAotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCWlmIChiYXVkKSB7CiAJCXVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKGJhdWQpOwogCQkvKiBDbGlwIHRvIG1heGltdW0gc3BlZWQgKi8KQEAgLTM4NywxMiArNDAwLDEzIEBACiAJCWJhdWQgPSBCRUxLSU5fU0FfQkFVRCh1cmJfdmFsdWUpOwogCiAJCS8qIFJlcG9ydCB0aGUgYWN0dWFsIGJhdWQgcmF0ZSBiYWNrIHRvIHRoZSBjYWxsZXIgKi8KLQkJdHR5X2VuY29kZV9iYXVkX3JhdGUocG9ydC0+dHR5LCBiYXVkLCBiYXVkKTsKKwkJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKIAkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfQkFVRFJBVEVfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCiAJCQllcnIoIlNldCBiYXVkcmF0ZSBlcnJvciIpOwogCX0gZWxzZSB7CiAJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCi0JCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCBCRUxLSU5fU0FfRkxPV19OT05FKSA8IDApCisJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAorCQkJCQkJQkVMS0lOX1NBX0ZMT1dfTk9ORSkgPCAwKQogCQkJZXJyKCJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yIik7CiAJCS8qIERyb3AgUlRTIGFuZCBEVFIgKi8KIAkJY29udHJvbF9zdGF0ZSAmPSB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CkBAIC00MDMsOSArNDE3LDEwIEBACiAJfQogCiAJLyogc2V0IHRoZSBwYXJpdHkgKi8KLQlpZiggKGNmbGFnJihQQVJFTkJ8UEFST0REKSkgIT0gKG9sZF9jZmxhZyYoUEFSRU5CfFBBUk9ERCkpICkgeworCWlmICgoY2ZsYWcgXiBvbGRfY2ZsYWcpICYgKFBBUkVOQiB8IFBBUk9ERCkpIHsKIAkJaWYgKGNmbGFnICYgUEFSRU5CKQotCQkJdXJiX3ZhbHVlID0gKGNmbGFnICYgUEFST0REKSA/ICBCRUxLSU5fU0FfUEFSSVRZX09ERCA6IEJFTEtJTl9TQV9QQVJJVFlfRVZFTjsKKwkJCXVyYl92YWx1ZSA9IChjZmxhZyAmIFBBUk9ERCkgPyAgQkVMS0lOX1NBX1BBUklUWV9PREQKKwkJCQkJCTogQkVMS0lOX1NBX1BBUklUWV9FVkVOOwogCQllbHNlCiAJCQl1cmJfdmFsdWUgPSBCRUxLSU5fU0FfUEFSSVRZX05PTkU7CiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1BBUklUWV9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKQEAgLTQxMywzMSArNDI4LDQwIEBACiAJfQogCiAJLyogc2V0IHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzICovCi0JaWYoIChjZmxhZyZDU0laRSkgIT0gKG9sZF9jZmxhZyZDU0laRSkgKSB7CisJaWYgKChjZmxhZyAmIENTSVpFKSAhPSAob2xkX2NmbGFnICYgQ1NJWkUpKSB7CiAJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewotCQkJY2FzZSBDUzU6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoNSk7IGJyZWFrOwotCQkJY2FzZSBDUzY6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoNik7IGJyZWFrOwotCQkJY2FzZSBDUzc6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoNyk7IGJyZWFrOwotCQkJY2FzZSBDUzg6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoOCk7IGJyZWFrOwotCQkJZGVmYXVsdDogZGJnKCJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOCIpOwotCQkJCXVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoOCk7Ci0JCQkJYnJlYWs7CisJCWNhc2UgQ1M1OgorCQkJdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0RBVEFfQklUUyg1KTsKKwkJCWJyZWFrOworCQljYXNlIENTNjoKKwkJCXVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoNik7CisJCQlicmVhazsKKwkJY2FzZSBDUzc6CisJCQl1cmJfdmFsdWUgPSBCRUxLSU5fU0FfREFUQV9CSVRTKDcpOworCQkJYnJlYWs7CisJCWNhc2UgQ1M4OgorCQkJdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0RBVEFfQklUUyg4KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiBkYmcoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCQl1cmJfdmFsdWUgPSBCRUxLSU5fU0FfREFUQV9CSVRTKDgpOworCQkJYnJlYWs7CiAJCX0KIAkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfREFUQV9CSVRTX1JFUVVFU1QsIHVyYl92YWx1ZSkgPCAwKQogCQkJZXJyKCJTZXQgZGF0YSBiaXRzIGVycm9yIik7CiAJfQogCiAJLyogc2V0IHRoZSBudW1iZXIgb2Ygc3RvcCBiaXRzICovCi0JaWYoIChjZmxhZyZDU1RPUEIpICE9IChvbGRfY2ZsYWcmQ1NUT1BCKSApIHsKLQkJdXJiX3ZhbHVlID0gKGNmbGFnICYgQ1NUT1BCKSA/IEJFTEtJTl9TQV9TVE9QX0JJVFMoMikgOiBCRUxLSU5fU0FfU1RPUF9CSVRTKDEpOwotCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9TVE9QX0JJVFNfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCisJaWYgKChjZmxhZyAmIENTVE9QQikgIT0gKG9sZF9jZmxhZyAmIENTVE9QQikpIHsKKwkJdXJiX3ZhbHVlID0gKGNmbGFnICYgQ1NUT1BCKSA/IEJFTEtJTl9TQV9TVE9QX0JJVFMoMikKKwkJCQkJCTogQkVMS0lOX1NBX1NUT1BfQklUUygxKTsKKwkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfU1RPUF9CSVRTX1JFUVVFU1QsCisJCQkJCQkJdXJiX3ZhbHVlKSA8IDApCiAJCQllcnIoIlNldCBzdG9wIGJpdHMgZXJyb3IiKTsKIAl9CiAKIAkvKiBTZXQgZmxvdyBjb250cm9sICovCi0JaWYoIChpZmxhZyZJWE9GRikgICAhPSAob2xkX2lmbGFnJklYT0ZGKQotCXx8CShpZmxhZyZJWE9OKSAgICAhPSAob2xkX2lmbGFnJklYT04pCi0JfHwgIChjZmxhZyZDUlRTQ1RTKSAhPSAob2xkX2NmbGFnJkNSVFNDVFMpICkgeworCWlmICgoKGlmbGFnIF4gb2xkX2lmbGFnKSAmIChJWE9GRiB8IElYT04pKSB8fAorCQkoKGNmbGFnIF4gb2xkX2NmbGFnKSAmIENSVFNDVFMpKSB7CiAJCXVyYl92YWx1ZSA9IDA7CiAJCWlmICgoaWZsYWcgJiBJWE9GRikgfHwgKGlmbGFnICYgSVhPTikpCiAJCQl1cmJfdmFsdWUgfD0gKEJFTEtJTl9TQV9GTE9XX09YT04gfCBCRUxLSU5fU0FfRkxPV19JWE9OKTsKQEAgLTQ2Myw4ICs0ODcsOSBAQAogfSAvKiBiZWxraW5fc2Ffc2V0X3Rlcm1pb3MgKi8KIAogCi1zdGF0aWMgdm9pZCBiZWxraW5fc2FfYnJlYWtfY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKQorc3RhdGljIHZvaWQgYmVsa2luX3NhX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAogCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0JSRUFLX1JFUVVFU1QsIGJyZWFrX3N0YXRlID8gMSA6IDApIDwgMCkKQEAgLTQ3MiwxMiArNDk3LDEzIEBACiB9CiAKIAotc3RhdGljIGludCBiZWxraW5fc2FfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBiZWxraW5fc2FfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgY29udHJvbF9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQorCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC00ODgsOSArNTE0LDEwIEBACiB9CiAKIAotc3RhdGljIGludCBiZWxraW5fc2FfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBiZWxraW5fc2FfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgY29udHJvbF9zdGF0ZTsKQEAgLTQ5OCw3ICs1MjUsNyBAQAogCWludCByZXR2YWw7CiAJaW50IHJ0cyA9IDA7CiAJaW50IGR0ciA9IDA7Ci0JCisKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTU0MCwyOSArNTY3LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGJlbGtpbl9zYV9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVElPQ01JV0FJVDoKLQkJLyogd2FpdCBmb3IgYW55IG9mIHRoZSA0IG1vZGVtIGlucHV0cyAoRENELFJJLERTUixDVFMpKi8KLQkJLyogVE9ETyAqLwotCQlyZXR1cm4oIDAgKTsKLQotCWNhc2UgVElPQ0dJQ09VTlQ6Ci0JCS8qIHJldHVybiBjb3VudCBvZiBtb2RlbWxpbmUgdHJhbnNpdGlvbnMgKi8KLQkJLyogVE9ETyAqLwotCQlyZXR1cm4gMDsKLQotCWRlZmF1bHQ6Ci0JCWRiZygiYmVsa2luX3NhX2lvY3RsIGFyZyBub3Qgc3VwcG9ydGVkIC0gMHglMDR4IixjbWQpOwotCQlyZXR1cm4oLUVOT0lPQ1RMQ01EKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfSAvKiBiZWxraW5fc2FfaW9jdGwgKi8KLQotCi1zdGF0aWMgaW50IF9faW5pdCBiZWxraW5fc2FfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGJlbGtpbl9zYV9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZiZWxraW5fZGV2aWNlKTsKQEAgLTU4MiwxNyArNTg3LDE3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBiZWxraW5fc2FfZXhpdCAodm9pZCkKIHsKLQl1c2JfZGVyZWdpc3RlciAoJmJlbGtpbl9kcml2ZXIpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmJlbGtpbl9kZXZpY2UpOworCXVzYl9kZXJlZ2lzdGVyKCZiZWxraW5fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmJlbGtpbl9kZXZpY2UpOwogfQogCiAKLW1vZHVsZV9pbml0IChiZWxraW5fc2FfaW5pdCk7Ci1tb2R1bGVfZXhpdCAoYmVsa2luX3NhX2V4aXQpOworbW9kdWxlX2luaXQoYmVsa2luX3NhX2luaXQpOworbW9kdWxlX2V4aXQoYmVsa2luX3NhX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7Ci1NT0RVTEVfVkVSU0lPTiggRFJJVkVSX1ZFUlNJT04gKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuaAppbmRleCA5MTE2YjkyLi5jNjZhNjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5oCkBAIC03LDEzICs3LDE0IEBACiAgKiAgVGhpcyBwcm9ncmFtIGlzIGxhcmdlbHkgZGVyaXZlZCBmcm9tIHdvcmsgYnkgdGhlIGxpbnV4LXVzYiBncm91cAogICogIGFuZCBhc3NvY2lhdGVkIHNvdXJjZSBmaWxlcy4gIFBsZWFzZSBzZWUgdGhlIHVzYi9zZXJpYWwgZmlsZXMgZm9yCiAgKiAgaW5kaXZpZHVhbCBjcmVkaXRzIGFuZCBjb3B5cmlnaHRzLgotICogIAorICoKICAqIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIAkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMKKyAqIGRyaXZlcgogICoKICAqIDEyLU1hci0yMDAxIGdraAogICoJQWRkZWQgR29IdWJzIEdPLUNPTTIzMiBkZXZpY2UgaWQuCkBAIC0yNyw3ICsyOCw3IEBACiAgKiAgICBhZGFwdGVyLCBzbyBwYXJkb24gYW55IHN0dXBpZCBtaXN0YWtlcy4gIEFsbCBvZiB0aGUgaW5mb3JtYXRpb24KICAqICAgIEkgYW0gdXNpbmcgdG8gd3JpdGUgdGhpcyBkcml2ZXIgd2FzIGFjcXVpcmVkIGJ5IHVzaW5nIGEgbW9kaWZpZWQKICAqICAgIFVzYlNub29wIG9uIFdpbmRvd3MyMDAwLgotICogICAgCisgKgogICovCiAKICNpZm5kZWYgX19MSU5VWF9VU0JfU0VSSUFMX0JTQV9ICkBAIC05NiwyMCArOTcsMjAgQEAKIAogLyoKICAqIEl0IHNlZW1zIHRoYXQgdGhlIGludGVycnVwdCBwaXBlIGlzIGNsb3NlbHkgbW9kZWxsZWQgYWZ0ZXIgdGhlCi0gKiAxNjU1MCByZWdpc3RlciBsYXlvdXQuICBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhlIGFkYXB0ZXIgY2FuIAorICogMTY1NTAgcmVnaXN0ZXIgbGF5b3V0LiAgVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZSBhZGFwdGVyIGNhbgogICogYmUgdXNlZCBpbiBhICJET1MiIGVudmlyb25tZW50IHRvIHNpbXVsYXRlIGEgc3RhbmRhcmQgaGFyZHdhcmUgcG9ydC4KICAqLwotI2RlZmluZSBCRUxLSU5fU0FfTFNSX0lOREVYCQkyCQkvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX0lOREVYCQkyCS8qICAgICBMaW5lIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBCRUxLSU5fU0FfTFNSX1JEUgkJMHgwMQkvKiByZWNlaXZlIGRhdGEgcmVhZHkgKi8KICNkZWZpbmUgQkVMS0lOX1NBX0xTUl9PRQkJMHgwMgkvKiBvdmVycnVuIGVycm9yICovCiAjZGVmaW5lIEJFTEtJTl9TQV9MU1JfUEUJCTB4MDQJLyogcGFyaXR5IGVycm9yICovCiAjZGVmaW5lIEJFTEtJTl9TQV9MU1JfRkUJCTB4MDgJLyogZnJhbWluZyBlcnJvciAqLwogI2RlZmluZSBCRUxLSU5fU0FfTFNSX0JJCQkweDEwCS8qIGJyZWFrIGluZGljYXRvciAqLwotI2RlZmluZSBCRUxLSU5fU0FfTFNSX1RIRQkJMHgyMAkvKiB0cmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfVEhFCQkweDIwCS8qIHR4IGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KICNkZWZpbmUgQkVMS0lOX1NBX0xTUl9URQkJMHg0MAkvKiB0cmFuc21pdCByZWdpc3RlciBlbXB0eSAqLwogI2RlZmluZSBCRUxLSU5fU0FfTFNSX0VSUgkJMHg4MAkvKiBPRSB8IFBFIHwgRkUgfCBCSSAqLwogCi0jZGVmaW5lIEJFTEtJTl9TQV9NU1JfSU5ERVgJCTMJCS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBCRUxLSU5fU0FfTVNSX0lOREVYCQkzCS8qICAgICBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQkVMS0lOX1NBX01TUl9EQ1RTCQkweDAxCS8qIERlbHRhIENUUyAqLwogI2RlZmluZSBCRUxLSU5fU0FfTVNSX0REU1IJCTB4MDIJLyogRGVsdGEgRFNSICovCiAjZGVmaW5lIEJFTEtJTl9TQV9NU1JfRFJJCQkweDA0CS8qIERlbHRhIFJJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYnVzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYnVzLmMKaW5kZXggMGIxNGFlYS4uODNiYmI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2J1cy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9idXMuYwpAQCAtMTUsNyArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KIAotc3RhdGljIGludCB1c2Jfc2VyaWFsX2RldmljZV9tYXRjaCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQorc3RhdGljIGludCB1c2Jfc2VyaWFsX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyOwogCWNvbnN0IHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CkBAIC00Niw3ICs0Nyw3IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihwb3J0X251bWJlciwgU19JUlVHTywgc2hvd19wb3J0X251bWJlciwgTlVMTCk7CiAKLXN0YXRpYyBpbnQgdXNiX3NlcmlhbF9kZXZpY2VfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdXNiX3NlcmlhbF9kZXZpY2VfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CkBAIC02Niw3ICs2Nyw3IEBACiAJCQlyZXR2YWwgPSAtRUlPOwogCQkJZ290byBleGl0OwogCQl9Ci0JCXJldHZhbCA9IGRyaXZlci0+cG9ydF9wcm9iZSAocG9ydCk7CisJCXJldHZhbCA9IGRyaXZlci0+cG9ydF9wcm9iZShwb3J0KTsKIAkJbW9kdWxlX3B1dChkcml2ZXItPmRyaXZlci5vd25lcik7CiAJCWlmIChyZXR2YWwpCiAJCQlnb3RvIGV4aXQ7CkBAIC03Nyw4ICs3OCw4IEBACiAJCWdvdG8gZXhpdDsKIAogCW1pbm9yID0gcG9ydC0+bnVtYmVyOwotCXR0eV9yZWdpc3Rlcl9kZXZpY2UgKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgbWlub3IsIGRldik7Ci0JZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsIAorCXR0eV9yZWdpc3Rlcl9kZXZpY2UodXNiX3NlcmlhbF90dHlfZHJpdmVyLCBtaW5vciwgZGV2KTsKKwlkZXZfaW5mbygmcG9ydC0+c2VyaWFsLT5kZXYtPmRldiwKIAkJICIlcyBjb252ZXJ0ZXIgbm93IGF0dGFjaGVkIHRvIHR0eVVTQiVkXG4iLAogCQkgZHJpdmVyLT5kZXNjcmlwdGlvbiwgbWlub3IpOwogCkBAIC04Niw3ICs4Nyw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCB1c2Jfc2VyaWFsX2RldmljZV9yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdXNiX3NlcmlhbF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRyaXZlcjsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwpAQCAtOTQsOSArOTUsOCBAQAogCWludCBtaW5vcjsKIAogCXBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKLQlpZiAoIXBvcnQpIHsKKwlpZiAoIXBvcnQpCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCWRldmljZV9yZW1vdmVfZmlsZSgmcG9ydC0+ZGV2LCAmZGV2X2F0dHJfcG9ydF9udW1iZXIpOwogCkBAIC0xMDcsMTIgKzEwNywxMiBAQAogCQkJcmV0dmFsID0gLUVJTzsKIAkJCWdvdG8gZXhpdDsKIAkJfQotCQlyZXR2YWwgPSBkcml2ZXItPnBvcnRfcmVtb3ZlIChwb3J0KTsKKwkJcmV0dmFsID0gZHJpdmVyLT5wb3J0X3JlbW92ZShwb3J0KTsKIAkJbW9kdWxlX3B1dChkcml2ZXItPmRyaXZlci5vd25lcik7CiAJfQogZXhpdDoKIAltaW5vciA9IHBvcnQtPm51bWJlcjsKLQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UgKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgbWlub3IpOworCXR0eV91bnJlZ2lzdGVyX2RldmljZSh1c2Jfc2VyaWFsX3R0eV9kcml2ZXIsIG1pbm9yKTsKIAlkZXZfaW5mbyhkZXYsICIlcyBjb252ZXJ0ZXIgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHR0eVVTQiVkXG4iLAogCQkgZHJpdmVyLT5kZXNjcmlwdGlvbiwgbWlub3IpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCmluZGV4IDFmN2M4NmIuLmY2MWUzY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCkBAIC0yMzIsNyArMjMyLDggQEAKIH0KIAogLyogb3BlbiB0aGlzIGRldmljZSwgc2V0IGRlZmF1bHQgcGFyYW1ldGVycyAqLwotc3RhdGljIGludCBjaDM0MV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBjaDM0MV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOwpAQCAtMjU2LDcgKzI1Nyw3IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JciA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHBvcnQsIGZpbHApOworCXIgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfb3Blbih0dHksIHBvcnQsIGZpbHApOwogCiBvdXQ6CXJldHVybiByOwogfQpAQCAtMjY0LDExICsyNjUsMTAgQEAKIC8qIE9sZF90ZXJtaW9zIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCB0ZXJtaW9zIHNldHRpbmdzIGFuZAogICogdHR5LT50ZXJtaW9zIGNvbnRhaW5zIHRoZSBuZXcgc2V0dGluZyB0byBiZSB1c2VkLgogICovCi1zdGF0aWMgdm9pZCBjaDM0MV9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIGNoMzQxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKIAl1bnNpZ25lZCBiYXVkX3JhdGU7CiAKIAlkYmcoImNoMzQxX3NldF90ZXJtaW9zKCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCmluZGV4IDIwMTE4NGMuLjdiNzQyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KICAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKiAKKyAqCiAgKiBUaGFua3MgdG8gUmFuZHkgRHVubGFwIGZvciB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIGNvZGUuCiAgKgogICovCkBAIC02Nyw3ICs2Nyw3IEBACiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IE5VTEw7CiAJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zID0gTlVMTCwgZHVtbXk7CiAKLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKKwlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJaWYgKG9wdGlvbnMpIHsKIAkJYmF1ZCA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMsIE5VTEwsIDEwKTsKQEAgLTgxLDU1ICs4MSwyNyBAQAogCQlpZiAoKnMpCiAJCQlkb2Zsb3cgPSAoKnMrKyA9PSAncicpOwogCX0KKwkKKwkvKiBTYW5lIGRlZmF1bHQgKi8KKwlpZiAoYmF1ZCA9PSAwKQorCQliYXVkID0gOTYwMDsKIAotCS8qIGJ1aWxkIGEgY2ZsYWcgc2V0dGluZyAqLwotCXN3aXRjaCAoYmF1ZCkgewotCQljYXNlIDEyMDA6Ci0JCQljZmxhZyB8PSBCMTIwMDsKLQkJCWJyZWFrOwotCQljYXNlIDI0MDA6Ci0JCQljZmxhZyB8PSBCMjQwMDsKLQkJCWJyZWFrOwotCQljYXNlIDQ4MDA6Ci0JCQljZmxhZyB8PSBCNDgwMDsKLQkJCWJyZWFrOwotCQljYXNlIDE5MjAwOgotCQkJY2ZsYWcgfD0gQjE5MjAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzg0MDA6Ci0JCQljZmxhZyB8PSBCMzg0MDA7Ci0JCQlicmVhazsKLQkJY2FzZSA1NzYwMDoKLQkJCWNmbGFnIHw9IEI1NzYwMDsKLQkJCWJyZWFrOwotCQljYXNlIDExNTIwMDoKLQkJCWNmbGFnIHw9IEIxMTUyMDA7Ci0JCQlicmVhazsKLQkJY2FzZSA5NjAwOgotCQlkZWZhdWx0OgotCQkJY2ZsYWcgfD0gQjk2MDA7Ci0JCQkvKgotCQkJICogU2V0IHRoaXMgdG8gYSBzYW5lIHZhbHVlIHRvIHByZXZlbnQgYSBkaXZpZGUgZXJyb3IKLQkJCSAqLwotCQkJYmF1ZCAgPSA5NjAwOwotCQkJYnJlYWs7Ci0JfQogCXN3aXRjaCAoYml0cykgewotCQljYXNlIDc6Ci0JCQljZmxhZyB8PSBDUzc7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJY2FzZSA4OgotCQkJY2ZsYWcgfD0gQ1M4OwotCQkJYnJlYWs7CisJY2FzZSA3OgorCQljZmxhZyB8PSBDUzc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSA4OgorCQljZmxhZyB8PSBDUzg7CisJCWJyZWFrOwogCX0KIAlzd2l0Y2ggKHBhcml0eSkgewotCQljYXNlICdvJzogY2FzZSAnTyc6Ci0JCQljZmxhZyB8PSBQQVJPREQ7Ci0JCQlicmVhazsKLQkJY2FzZSAnZSc6IGNhc2UgJ0UnOgotCQkJY2ZsYWcgfD0gUEFSRU5COwotCQkJYnJlYWs7CisJY2FzZSAnbyc6IGNhc2UgJ08nOgorCQljZmxhZyB8PSBQQVJPREQ7CisJCWJyZWFrOworCWNhc2UgJ2UnOiBjYXNlICdFJzoKKwkJY2ZsYWcgfD0gUEFSRU5COworCQlicmVhazsKIAl9CiAJY28tPmNmbGFnID0gY2ZsYWc7CiAKQEAgLTE0MCwxNyArMTEyLDE3IEBACiAJc2VyaWFsID0gdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgoY28tPmluZGV4KTsKIAlpZiAoc2VyaWFsID09IE5VTEwpIHsKIAkJLyogbm8gZGV2aWNlIGlzIGNvbm5lY3RlZCB5ZXQsIHNvcnJ5IDooICovCi0JCWVyciAoIk5vIFVTQiBkZXZpY2UgY29ubmVjdGVkIHRvIHR0eVVTQiVpIiwgY28tPmluZGV4KTsKKwkJZXJyKCJObyBVU0IgZGV2aWNlIGNvbm5lY3RlZCB0byB0dHlVU0IlaSIsIGNvLT5pbmRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXBvcnQgPSBzZXJpYWwtPnBvcnRbMF07Ci0JcG9ydC0+dHR5ID0gTlVMTDsKKwlwb3J0LT5wb3J0LnR0eSA9IE5VTEw7CiAKIAlpbmZvLT5wb3J0ID0gcG9ydDsKLQkgCi0JKytwb3J0LT5vcGVuX2NvdW50OwotCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDEpIHsKKworCSsrcG9ydC0+cG9ydC5jb3VudDsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCA9PSAxKSB7CiAJCWlmIChzZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKSB7CiAJCQkvKgogCQkJICogYWxsb2NhdGUgYSBmYWtlIHR0eSBzbyB0aGUgZHJpdmVyIGNhbiBpbml0aWFsaXplCkBAIC0xNzEsMTUgKzE0MywxNSBAQAogCQkJfQogCQkJbWVtc2V0KCZkdW1teSwgMCwgc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpOwogCQkJdHR5LT50ZXJtaW9zID0gdGVybWlvczsKLQkJCXBvcnQtPnR0eSA9IHR0eTsKKwkJCXBvcnQtPnBvcnQudHR5ID0gdHR5OwogCQl9CiAKLQkJLyogb25seSBjYWxsIHRoZSBkZXZpY2Ugc3BlY2lmaWMgb3BlbiBpZiB0aGlzIAorCQkvKiBvbmx5IGNhbGwgdGhlIGRldmljZSBzcGVjaWZpYyBvcGVuIGlmIHRoaXMKIAkJICogaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHBvcnQgaXMgb3BlbmVkICovCiAJCWlmIChzZXJpYWwtPnR5cGUtPm9wZW4pCi0JCQlyZXR2YWwgPSBzZXJpYWwtPnR5cGUtPm9wZW4ocG9ydCwgTlVMTCk7CisJCQlyZXR2YWwgPSBzZXJpYWwtPnR5cGUtPm9wZW4oTlVMTCwgcG9ydCwgTlVMTCk7CiAJCWVsc2UKLQkJCXJldHZhbCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHBvcnQsIE5VTEwpOworCQkJcmV0dmFsID0gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4oTlVMTCwgcG9ydCwgTlVMTCk7CiAKIAkJaWYgKHJldHZhbCkgewogCQkJZXJyKCJjb3VsZCBub3Qgb3BlbiBVU0IgY29uc29sZSBwb3J0Iik7CkBAIC0xODgsOSArMTYwLDEwIEBACiAKIAkJaWYgKHNlcmlhbC0+dHlwZS0+c2V0X3Rlcm1pb3MpIHsKIAkJCXRlcm1pb3MtPmNfY2ZsYWcgPSBjZmxhZzsKLQkJCXNlcmlhbC0+dHlwZS0+c2V0X3Rlcm1pb3MocG9ydCwgJmR1bW15KTsKKwkJCXR0eV90ZXJtaW9zX2VuY29kZV9iYXVkX3JhdGUodGVybWlvcywgYmF1ZCwgYmF1ZCk7CisJCQlzZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKE5VTEwsIHBvcnQsICZkdW1teSk7CiAKLQkJCXBvcnQtPnR0eSA9IE5VTEw7CisJCQlwb3J0LT5wb3J0LnR0eSA9IE5VTEw7CiAJCQlrZnJlZSh0ZXJtaW9zKTsKIAkJCWtmcmVlKHR0eSk7CiAJCX0KQEAgLTIwMywxNSArMTc2LDE2IEBACiAJcmV0dXJuIHJldHZhbDsKIGZyZWVfdGVybWlvczoKIAlrZnJlZSh0ZXJtaW9zKTsKLQlwb3J0LT50dHkgPSBOVUxMOworCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsKIGZyZWVfdHR5OgogCWtmcmVlKHR0eSk7CiByZXNldF9vcGVuX2NvdW50OgotCXBvcnQtPm9wZW5fY291bnQgPSAwOworCXBvcnQtPnBvcnQuY291bnQgPSAwOwogZ290byBvdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHVzYl9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBjb3VudCkKK3N0YXRpYyB2b2lkIHVzYl9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywKKwkJCQkJY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBjb3VudCkKIHsKIAlzdGF0aWMgc3RydWN0IHVzYmNvbnNfaW5mbyAqaW5mbyA9ICZ1c2Jjb25zX2luZm87CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IGluZm8tPnBvcnQ7CkBAIC0yMjcsOCArMjAxLDggQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlKHMpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY291bnQpOwogCi0JaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7Ci0JCWRiZyAoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19mdW5jX18pOworCWlmICghcG9ydC0+cG9ydC5jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMzYsMjYgKzIxMCwyOSBAQAogCQl1bnNpZ25lZCBpbnQgaTsKIAkJdW5zaWduZWQgaW50IGxmOwogCQkvKiBzZWFyY2ggZm9yIExGIHNvIHdlIGNhbiBpbnNlcnQgQ1IgaWYgbmVjZXNzYXJ5ICovCi0JCWZvciAoaT0wLCBsZj0wIDsgaSA8IGNvdW50IDsgaSsrKSB7CisJCWZvciAoaSA9IDAsIGxmID0gMCA7IGkgPCBjb3VudCA7IGkrKykgewogCQkJaWYgKCooYnVmICsgaSkgPT0gMTApIHsKIAkJCQlsZiA9IDE7CiAJCQkJaSsrOwogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMgYXZhaWxhYmxlICovCisJCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYKKwkJICAgaXQgaXMgYXZhaWxhYmxlICovCiAJCWlmIChzZXJpYWwtPnR5cGUtPndyaXRlKQotCQkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT53cml0ZShwb3J0LCBidWYsIGkpOworCQkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT53cml0ZShOVUxMLCBwb3J0LCBidWYsIGkpOwogCQllbHNlCi0JCQlyZXR2YWwgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUocG9ydCwgYnVmLCBpKTsKKwkJCXJldHZhbCA9IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZShOVUxMLCBwb3J0LCBidWYsIGkpOwogCQlkYmcoIiVzIC0gcmV0dXJuIHZhbHVlIDogJWQiLCBfX2Z1bmNfXywgcmV0dmFsKTsKIAkJaWYgKGxmKSB7CiAJCQkvKiBhcHBlbmQgQ1IgYWZ0ZXIgTEYgKi8KIAkJCXVuc2lnbmVkIGNoYXIgY3IgPSAxMzsKIAkJCWlmIChzZXJpYWwtPnR5cGUtPndyaXRlKQotCQkJCXJldHZhbCA9IHNlcmlhbC0+dHlwZS0+d3JpdGUocG9ydCwgJmNyLCAxKTsKKwkJCQlyZXR2YWwgPSBzZXJpYWwtPnR5cGUtPndyaXRlKE5VTEwsCisJCQkJCQkJCXBvcnQsICZjciwgMSk7CiAJCQllbHNlCi0JCQkJcmV0dmFsID0gdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlKHBvcnQsICZjciwgMSk7CisJCQkJcmV0dmFsID0gdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlKE5VTEwsCisJCQkJCQkJCXBvcnQsICZjciwgMSk7CiAJCQlkYmcoIiVzIC0gcmV0dXJuIHZhbHVlIDogJWQiLCBfX2Z1bmNfXywgcmV0dmFsKTsKIAkJfQogCQlidWYgKz0gaTsKQEAgLTI3MywxOCArMjUwLDE5IEBACiAKIHZvaWQgdXNiX3NlcmlhbF9jb25zb2xlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKLQlpZiAoc2VyaWFsICYmIHNlcmlhbC0+cG9ydCAmJiBzZXJpYWwtPnBvcnRbMF0gJiYgc2VyaWFsLT5wb3J0WzBdID09IHVzYmNvbnNfaW5mby5wb3J0KSB7CisJaWYgKHNlcmlhbCAmJiBzZXJpYWwtPnBvcnQgJiYgc2VyaWFsLT5wb3J0WzBdCisJCQkJJiYgc2VyaWFsLT5wb3J0WzBdID09IHVzYmNvbnNfaW5mby5wb3J0KSB7CiAJCXVzYl9zZXJpYWxfY29uc29sZV9leGl0KCk7CiAJCXVzYl9zZXJpYWxfcHV0KHNlcmlhbCk7CiAJfQogfQogCi12b2lkIHVzYl9zZXJpYWxfY29uc29sZV9pbml0IChpbnQgc2VyaWFsX2RlYnVnLCBpbnQgbWlub3IpCit2b2lkIHVzYl9zZXJpYWxfY29uc29sZV9pbml0KGludCBzZXJpYWxfZGVidWcsIGludCBtaW5vcikKIHsKIAlkZWJ1ZyA9IHNlcmlhbF9kZWJ1ZzsKIAogCWlmIChtaW5vciA9PSAwKSB7Ci0JCS8qIAorCQkvKgogCQkgKiBDYWxsIHJlZ2lzdGVyX2NvbnNvbGUoKSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBkZXZpY2UgcGx1Z2dlZAogCQkgKiBpbi4gIElmIHdlIGNhbGwgaXQgZWFybGllciwgdGhlbiB0aGUgY2FsbGJhY2sgdG8KIAkJICogY29uc29sZV9zZXR1cCgpIHdpbGwgZmFpbCwgYXMgdGhlcmUgaXMgbm90IGEgZGV2aWNlIHNlZW4gYnkKQEAgLTI5MywyMSArMjcxLDIxIEBACiAJCS8qCiAJCSAqIFJlZ2lzdGVyIGNvbnNvbGUuCiAJCSAqIE5PVEVTOgotCQkgKiBjb25zb2xlX3NldHVwKCkgaXMgY2FsbGVkIChiYWNrKSBpbW1lZGlhdGVseSAoZnJvbSByZWdpc3Rlcl9jb25zb2xlKS4KLQkJICogY29uc29sZV93cml0ZSgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmcm9tIHJlZ2lzdGVyX2NvbnNvbGUgaWZmCi0JCSAqIENPTl9QUklOVEJVRkZFUiBpcyBzZXQgaW4gZmxhZ3MuCisJCSAqIGNvbnNvbGVfc2V0dXAoKSBpcyBjYWxsZWQgKGJhY2spIGltbWVkaWF0ZWx5IChmcm9tCisJCSAqIHJlZ2lzdGVyX2NvbnNvbGUpLiBjb25zb2xlX3dyaXRlKCkgaXMgY2FsbGVkIGltbWVkaWF0ZWx5CisJCSAqIGZyb20gcmVnaXN0ZXJfY29uc29sZSBpZmYgQ09OX1BSSU5UQlVGRkVSIGlzIHNldCBpbiBmbGFncy4KIAkJICovCi0JCWRiZyAoInJlZ2lzdGVyaW5nIHRoZSBVU0Igc2VyaWFsIGNvbnNvbGUuIik7CisJCWRiZygicmVnaXN0ZXJpbmcgdGhlIFVTQiBzZXJpYWwgY29uc29sZS4iKTsKIAkJcmVnaXN0ZXJfY29uc29sZSgmdXNiY29ucyk7CiAJfQogfQogCi12b2lkIHVzYl9zZXJpYWxfY29uc29sZV9leGl0ICh2b2lkKQordm9pZCB1c2Jfc2VyaWFsX2NvbnNvbGVfZXhpdCh2b2lkKQogewogCWlmICh1c2Jjb25zX2luZm8ucG9ydCkgewogCQl1bnJlZ2lzdGVyX2NvbnNvbGUoJnVzYmNvbnMpOwotCQlpZiAodXNiY29uc19pbmZvLnBvcnQtPm9wZW5fY291bnQpCi0JCQl1c2Jjb25zX2luZm8ucG9ydC0+b3Blbl9jb3VudC0tOworCQlpZiAodXNiY29uc19pbmZvLnBvcnQtPnBvcnQuY291bnQpCisJCQl1c2Jjb25zX2luZm8ucG9ydC0+cG9ydC5jb3VudC0tOwogCQl1c2Jjb25zX2luZm8ucG9ydCA9IE5VTEw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCmluZGV4IGY1YjU3YjEuLjQ0MmNiYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KIAogLyoKQEAgLTM3LDE3ICszNywyMCBAQAogLyoKICAqIEZ1bmN0aW9uIFByb3RvdHlwZXMKICAqLwotc3RhdGljIGludCBjcDIxMDFfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kiwgc3RydWN0IGZpbGUqKTsKLXN0YXRpYyB2b2lkIGNwMjEwMV9jbGVhbnVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqKTsKLXN0YXRpYyB2b2lkIGNwMjEwMV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kiwgc3RydWN0IGZpbGUqKTsKLXN0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kik7Ci1zdGF0aWMgdm9pZCBjcDIxMDFfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCosIHN0cnVjdCBrdGVybWlvcyopOwotc3RhdGljIGludCBjcDIxMDFfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwgc3RydWN0IGZpbGUgKik7Ci1zdGF0aWMgaW50IGNwMjEwMV90aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqLCBzdHJ1Y3QgZmlsZSAqLAorc3RhdGljIGludCBjcDIxMDFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosCisJCQkJCQkJc3RydWN0IGZpbGUgKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfY2xlYW51cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopOworc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKKwkJCQkJCQlzdHJ1Y3QgZmlsZSopOworc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICopOworc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKKwkJCQkJCQlzdHJ1Y3Qga3Rlcm1pb3MqKTsKK3N0YXRpYyBpbnQgY3AyMTAxX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKIAkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIHZvaWQgY3AyMTAxX2JyZWFrX2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0KiwgaW50KTsKLXN0YXRpYyBpbnQgY3AyMTAxX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICopOwotc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICosIGludCk7CitzdGF0aWMgaW50IGNwMjEwMV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICopOworc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICopOwogCiAKIHN0YXRpYyBpbnQgZGVidWc7CkBAIC05Myw3ICs5Niw3IEBACiAJeyB9IC8qIFRlcm1pbmF0aW5nIEVudHJ5ICovCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjcDIxMDFfZHJpdmVyID0gewogCS5uYW1lCQk9ICJjcDIxMDEiLApAQCAtMTgyLDcgKzE4NSw3IEBACiAgKiAnZGF0YScgaXMgYSBwb2ludGVyIHRvIGEgcHJlLWFsbG9jYXRlZCBhcnJheSBvZiBpbnRlZ2VycyBsYXJnZQogICogZW5vdWdoIHRvIGhvbGQgJ3NpemUnIGJ5dGVzICh3aXRoIDQgYnl0ZXMgdG8gZWFjaCBpbnRlZ2VyKQogICovCi1zdGF0aWMgaW50IGNwMjEwMV9nZXRfY29uZmlnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqIHBvcnQsIHU4IHJlcXVlc3QsCitzdGF0aWMgaW50IGNwMjEwMV9nZXRfY29uZmlnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHU4IHJlcXVlc3QsCiAJCXVuc2lnbmVkIGludCAqZGF0YSwgaW50IHNpemUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKQEAgLTIwMiwxMiArMjA1LDEyIEBACiAJcmVxdWVzdCsrOwogCiAJLyogSXNzdWUgdGhlIHJlcXVlc3QsIGF0dGVtcHRpbmcgdG8gcmVhZCAnc2l6ZScgYnl0ZXMgKi8KLQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LHVzYl9yY3ZjdHJscGlwZSAoc2VyaWFsLT5kZXYsIDApLAorCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCQlyZXF1ZXN0LCBSRVFUWVBFX0RFVklDRV9UT19IT1NULCAweDAwMDAsCiAJCQkJMCwgYnVmLCBzaXplLCAzMDApOwogCiAJLyogQ29udmVydCBkYXRhIGludG8gYW4gYXJyYXkgb2YgaW50ZWdlcnMgKi8KLQlmb3IgKGk9MDsgaTxsZW5ndGg7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAJCWRhdGFbaV0gPSBsZTMyX3RvX2NwdShidWZbaV0pOwogCiAJa2ZyZWUoYnVmKTsKQEAgLTIyOCw3ICsyMzEsNyBAQAogICogVmFsdWVzIGxlc3MgdGhhbiAxNiBiaXRzIHdpZGUgYXJlIHNlbnQgZGlyZWN0bHkKICAqICdzaXplJyBpcyBzcGVjaWZpZWQgaW4gYnl0ZXMuCiAgKi8KLXN0YXRpYyBpbnQgY3AyMTAxX3NldF9jb25maWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCogcG9ydCwgdTggcmVxdWVzdCwKK3N0YXRpYyBpbnQgY3AyMTAxX3NldF9jb25maWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdTggcmVxdWVzdCwKIAkJdW5zaWduZWQgaW50ICpkYXRhLCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtMjUwLDEyICsyNTMsMTIgQEAKIAkJYnVmW2ldID0gY3B1X3RvX2xlMzIoZGF0YVtpXSk7CiAKIAlpZiAoc2l6ZSA+IDIpIHsKLQkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAogCQkJCXVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQkJcmVxdWVzdCwgUkVRVFlQRV9IT1NUX1RPX0RFVklDRSwgMHgwMDAwLAogCQkJCTAsIGJ1Ziwgc2l6ZSwgMzAwKTsKIAl9IGVsc2UgewotCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LAorCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCiAJCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCQlyZXF1ZXN0LCBSRVFUWVBFX0hPU1RfVE9fREVWSUNFLCBkYXRhWzBdLAogCQkJCTAsIE5VTEwsIDAsIDMwMCk7CkBAIC0yNzEsNyArMjc0LDcgQEAKIAl9CiAKIAkvKiBTaW5nbGUgZGF0YSB2YWx1ZSAqLwotCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCXJlcXVlc3QsIFJFUVRZUEVfSE9TVF9UT19ERVZJQ0UsIGRhdGFbMF0sCiAJCQkwLCBOVUxMLCAwLCAzMDApOwpAQCAtMjgzLDEzICsyODYsMTQgQEAKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjYWxsaW5nIGNwMjEwMV9zZXRfY29uZmlnIG9uIHNpbmdsZSBkYXRhIHZhbHVlcwogICogd2l0aG91dCByZXF1aXJpbmcgYW4gaW50ZWdlciBwb2ludGVyCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0KiBwb3J0LAorc3RhdGljIGlubGluZSBpbnQgY3AyMTAxX3NldF9jb25maWdfc2luZ2xlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCXU4IHJlcXVlc3QsIHVuc2lnbmVkIGludCBkYXRhKQogewogCXJldHVybiBjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCByZXF1ZXN0LCAmZGF0YSwgMik7CiB9CiAKLXN0YXRpYyBpbnQgY3AyMTAxX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBjcDIxMDFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJlc3VsdDsKQEAgLTMwMyw3ICszMDcsNyBAQAogCX0KIAogCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCi0JdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCiAJCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCiAJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCiAJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLApAQCAtMzE4LDE1ICszMjIsMTUgQEAKIAl9CiAKIAkvKiBDb25maWd1cmUgdGhlIHRlcm1pb3Mgc3RydWN0dXJlICovCi0JY3AyMTAxX2dldF90ZXJtaW9zKHBvcnQpOworCWNwMjEwMV9nZXRfdGVybWlvcyh0dHkpOwogCiAJLyogU2V0IHRoZSBEVFIgYW5kIFJUUyBwaW5zIGxvdyAqLwotCWNwMjEwMV90aW9jbXNldChwb3J0LCBOVUxMLCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMsIDApOworCWNwMjEwMV90aW9jbXNldCh0dHksIE5VTEwsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUywgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY3AyMTAxX2NsZWFudXAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBjcDIxMDFfY2xlYW51cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAKQEAgLTM0MSw3ICszNDUsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgdm9pZCBjcDIxMDFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtMzYyLDE5ICszNjcsMTUgQEAKICAqIGZyb20gdGhlIGRldmljZSwgY29ycmVjdHMgYW55IHVuc3VwcG9ydGVkIHZhbHVlcywgYW5kIGNvbmZpZ3VyZXMgdGhlCiAgKiB0ZXJtaW9zIHN0cnVjdHVyZSB0byByZWZsZWN0IHRoZSBzdGF0ZSBvZiB0aGUgZGV2aWNlCiAgKi8KLXN0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY2ZsYWcsIG1vZGVtX2N0bFs0XTsKLQlpbnQgYmF1ZDsKLQlpbnQgYml0czsKKwl1bnNpZ25lZCBpbnQgYmF1ZDsKKwl1bnNpZ25lZCBpbnQgYml0czsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlpZiAoIXBvcnQtPnR0eSB8fCAhcG9ydC0+dHR5LT50ZXJtaW9zKSB7Ci0JCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQogCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CQVVEUkFURSwgJmJhdWQsIDIpOwogCS8qIENvbnZlcnQgdG8gYmF1ZHJhdGUgKi8KIAlpZiAoYmF1ZCkKQEAgLTM4MiwxMDQgKzM4MywxMDIgQEAKIAogCWRiZygiJXMgLSBiYXVkIHJhdGUgPSAlZCIsIF9fZnVuY19fLCBiYXVkKTsKIAotCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHBvcnQtPnR0eSwgYmF1ZCwgYmF1ZCk7Ci0JY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAogCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CiAJY2ZsYWcgJj0gfkNTSVpFOwotCXN3aXRjaChiaXRzICYgQklUU19EQVRBX01BU0spIHsKLQkJY2FzZSBCSVRTX0RBVEFfNToKLQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19mdW5jX18pOwotCQkJY2ZsYWcgfD0gQ1M1OwotCQkJYnJlYWs7Ci0JCWNhc2UgQklUU19EQVRBXzY6Ci0JCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNiIsIF9fZnVuY19fKTsKLQkJCWNmbGFnIHw9IENTNjsKLQkJCWJyZWFrOwotCQljYXNlIEJJVFNfREFUQV83OgotCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX2Z1bmNfXyk7Ci0JCQljZmxhZyB8PSBDUzc7Ci0JCQlicmVhazsKLQkJY2FzZSBCSVRTX0RBVEFfODoKLQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19mdW5jX18pOwotCQkJY2ZsYWcgfD0gQ1M4OwotCQkJYnJlYWs7Ci0JCWNhc2UgQklUU19EQVRBXzk6Ci0JCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOSAobm90IHN1cHBvcnRlZCwgIgotCQkJCQkidXNpbmcgOCBkYXRhIGJpdHMpIiwgX19mdW5jX18pOwotCQkJY2ZsYWcgfD0gQ1M4OwotCQkJYml0cyAmPSB+QklUU19EQVRBX01BU0s7Ci0JCQliaXRzIHw9IEJJVFNfREFUQV84OwotCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZGJnKCIlcyAtIFVua25vd24gbnVtYmVyIG9mIGRhdGEgYml0cywgIgotCQkJCQkidXNpbmcgOCIsIF9fZnVuY19fKTsKLQkJCWNmbGFnIHw9IENTODsKLQkJCWJpdHMgJj0gfkJJVFNfREFUQV9NQVNLOwotCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKLQkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7Ci0JCQlicmVhazsKKwlzd2l0Y2ggKGJpdHMgJiBCSVRTX0RBVEFfTUFTSykgeworCWNhc2UgQklUU19EQVRBXzU6CisJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19mdW5jX18pOworCQljZmxhZyB8PSBDUzU7CisJCWJyZWFrOworCWNhc2UgQklUU19EQVRBXzY6CisJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19mdW5jX18pOworCQljZmxhZyB8PSBDUzY7CisJCWJyZWFrOworCWNhc2UgQklUU19EQVRBXzc6CisJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19mdW5jX18pOworCQljZmxhZyB8PSBDUzc7CisJCWJyZWFrOworCWNhc2UgQklUU19EQVRBXzg6CisJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19mdW5jX18pOworCQljZmxhZyB8PSBDUzg7CisJCWJyZWFrOworCWNhc2UgQklUU19EQVRBXzk6CisJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA5IChub3Qgc3VwcG9ydGVkLCB1c2luZyA4IGRhdGEgYml0cykiLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJCWNmbGFnIHw9IENTODsKKwkJYml0cyAmPSB+QklUU19EQVRBX01BU0s7CisJCWJpdHMgfD0gQklUU19EQVRBXzg7CisJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBVbmtub3duIG51bWJlciBvZiBkYXRhIGJpdHMsIHVzaW5nIDgiLCBfX2Z1bmNfXyk7CisJCWNmbGFnIHw9IENTODsKKwkJYml0cyAmPSB+QklUU19EQVRBX01BU0s7CisJCWJpdHMgfD0gQklUU19EQVRBXzg7CisJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CisJCWJyZWFrOwogCX0KIAotCXN3aXRjaChiaXRzICYgQklUU19QQVJJVFlfTUFTSykgewotCQljYXNlIEJJVFNfUEFSSVRZX05PTkU6Ci0JCQlkYmcoIiVzIC0gcGFyaXR5ID0gTk9ORSIsIF9fZnVuY19fKTsKLQkJCWNmbGFnICY9IH5QQVJFTkI7Ci0JCQlicmVhazsKLQkJY2FzZSBCSVRTX1BBUklUWV9PREQ6Ci0JCQlkYmcoIiVzIC0gcGFyaXR5ID0gT0REIiwgX19mdW5jX18pOwotCQkJY2ZsYWcgfD0gKFBBUkVOQnxQQVJPREQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQklUU19QQVJJVFlfRVZFTjoKLQkJCWRiZygiJXMgLSBwYXJpdHkgPSBFVkVOIiwgX19mdW5jX18pOwotCQkJY2ZsYWcgJj0gflBBUk9ERDsKLQkJCWNmbGFnIHw9IFBBUkVOQjsKLQkJCWJyZWFrOwotCQljYXNlIEJJVFNfUEFSSVRZX01BUks6Ci0JCQlkYmcoIiVzIC0gcGFyaXR5ID0gTUFSSyAobm90IHN1cHBvcnRlZCwgIgotCQkJCQkiZGlzYWJsaW5nIHBhcml0eSkiLCBfX2Z1bmNfXyk7Ci0JCQljZmxhZyAmPSB+UEFSRU5COwotCQkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKLQkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7Ci0JCQlicmVhazsKLQkJY2FzZSBCSVRTX1BBUklUWV9TUEFDRToKLQkJCWRiZygiJXMgLSBwYXJpdHkgPSBTUEFDRSAobm90IHN1cHBvcnRlZCwgIgotCQkJCQkiZGlzYWJsaW5nIHBhcml0eSkiLCBfX2Z1bmNfXyk7Ci0JCQljZmxhZyAmPSB+UEFSRU5COwotCQkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKLQkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRiZygiJXMgLSBVbmtub3duIHBhcml0eSBtb2RlLCAiCi0JCQkJCSJkaXNhYmxpbmcgcGFyaXR5IiwgX19mdW5jX18pOwotCQkJY2ZsYWcgJj0gflBBUkVOQjsKLQkJCWJpdHMgJj0gfkJJVFNfUEFSSVRZX01BU0s7Ci0JCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQkJYnJlYWs7CisJc3dpdGNoIChiaXRzICYgQklUU19QQVJJVFlfTUFTSykgeworCWNhc2UgQklUU19QQVJJVFlfTk9ORToKKwkJZGJnKCIlcyAtIHBhcml0eSA9IE5PTkUiLCBfX2Z1bmNfXyk7CisJCWNmbGFnICY9IH5QQVJFTkI7CisJCWJyZWFrOworCWNhc2UgQklUU19QQVJJVFlfT0REOgorCQlkYmcoIiVzIC0gcGFyaXR5ID0gT0REIiwgX19mdW5jX18pOworCQljZmxhZyB8PSAoUEFSRU5CfFBBUk9ERCk7CisJCWJyZWFrOworCWNhc2UgQklUU19QQVJJVFlfRVZFTjoKKwkJZGJnKCIlcyAtIHBhcml0eSA9IEVWRU4iLCBfX2Z1bmNfXyk7CisJCWNmbGFnICY9IH5QQVJPREQ7CisJCWNmbGFnIHw9IFBBUkVOQjsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX1BBUklUWV9NQVJLOgorCQlkYmcoIiVzIC0gcGFyaXR5ID0gTUFSSyAobm90IHN1cHBvcnRlZCwgZGlzYWJsaW5nIHBhcml0eSkiLAorCQkJCV9fZnVuY19fKTsKKwkJY2ZsYWcgJj0gflBBUkVOQjsKKwkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX1BBUklUWV9TUEFDRToKKwkJZGJnKCIlcyAtIHBhcml0eSA9IFNQQUNFIChub3Qgc3VwcG9ydGVkLCBkaXNhYmxpbmcgcGFyaXR5KSIsCisJCQkJX19mdW5jX18pOworCQljZmxhZyAmPSB+UEFSRU5COworCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOworCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gVW5rbm93biBwYXJpdHkgbW9kZSwgZGlzYWJsaW5nIHBhcml0eSIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgJj0gflBBUkVOQjsKKwkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYnJlYWs7CiAJfQogCiAJY2ZsYWcgJj0gfkNTVE9QQjsKLQlzd2l0Y2goYml0cyAmIEJJVFNfU1RPUF9NQVNLKSB7Ci0JCWNhc2UgQklUU19TVE9QXzE6Ci0JCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fZnVuY19fKTsKLQkJCWJyZWFrOwotCQljYXNlIEJJVFNfU1RPUF8xXzU6Ci0JCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMS41IChub3Qgc3VwcG9ydGVkLCAiCi0JCQkJCSJ1c2luZyAxIHN0b3AgYml0KSIsIF9fZnVuY19fKTsKLQkJCWJpdHMgJj0gfkJJVFNfU1RPUF9NQVNLOwotCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJCWJyZWFrOwotCQljYXNlIEJJVFNfU1RPUF8yOgotCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX2Z1bmNfXyk7Ci0JCQljZmxhZyB8PSBDU1RPUEI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRiZygiJXMgLSBVbmtub3duIG51bWJlciBvZiBzdG9wIGJpdHMsICIKLQkJCQkJInVzaW5nIDEgc3RvcCBiaXQiLCBfX2Z1bmNfXyk7Ci0JCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKLQkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7Ci0JCQlicmVhazsKKwlzd2l0Y2ggKGJpdHMgJiBCSVRTX1NUT1BfTUFTSykgeworCWNhc2UgQklUU19TVE9QXzE6CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19mdW5jX18pOworCQlicmVhazsKKwljYXNlIEJJVFNfU1RPUF8xXzU6CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxLjUgKG5vdCBzdXBwb3J0ZWQsIHVzaW5nIDEgc3RvcCBiaXQpIiwKKwkJCQkJCQkJX19mdW5jX18pOworCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX1NUT1BfMjoKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX2Z1bmNfXyk7CisJCWNmbGFnIHw9IENTVE9QQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIFVua25vd24gbnVtYmVyIG9mIHN0b3AgYml0cywgdXNpbmcgMSBzdG9wIGJpdCIsCisJCQkJCQkJCV9fZnVuY19fKTsKKwkJYml0cyAmPSB+QklUU19TVE9QX01BU0s7CisJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CisJCWJyZWFrOwogCX0KIAogCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9NT0RFTUNUTCwgbW9kZW1fY3RsLCAxNik7CkBAIC00OTEsNTUgKzQ5MCw1MyBAQAogCQljZmxhZyAmPSB+Q1JUU0NUUzsKIAl9CiAKLQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBjZmxhZzsKKwl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBjZmxhZzsKIH0KIAotc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJdW5zaWduZWQgaW50IGNmbGFnLCBvbGRfY2ZsYWc7Ci0JaW50IGJhdWQ9MCwgYml0czsKKwl1bnNpZ25lZCBpbnQgYmF1ZCA9IDAsIGJpdHM7CiAJdW5zaWduZWQgaW50IG1vZGVtX2N0bFs0XTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlpZiAoIXBvcnQtPnR0eSB8fCAhcG9ydC0+dHR5LT50ZXJtaW9zKSB7Ci0JCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fZnVuY19fKTsKKwlpZiAoIXR0eSkKIAkJcmV0dXJuOwotCX0KLQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNNU1BBUjsKIAotCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCXR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCW9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOwotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCiAJLyogSWYgdGhlIGJhdWQgcmF0ZSBpcyB0byBiZSB1cGRhdGVkKi8KIAlpZiAoYmF1ZCAhPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpKSB7CiAJCXN3aXRjaCAoYmF1ZCkgewotCQkJY2FzZSAwOgotCQkJY2FzZSA2MDA6Ci0JCQljYXNlIDEyMDA6Ci0JCQljYXNlIDE4MDA6Ci0JCQljYXNlIDI0MDA6Ci0JCQljYXNlIDQ4MDA6Ci0JCQljYXNlIDcyMDA6Ci0JCQljYXNlIDk2MDA6Ci0JCQljYXNlIDE0NDAwOgotCQkJY2FzZSAxOTIwMDoKLQkJCWNhc2UgMjg4MDA6Ci0JCQljYXNlIDM4NDAwOgotCQkJY2FzZSA1NTg1NDoKLQkJCWNhc2UgNTc2MDA6Ci0JCQljYXNlIDExNTIwMDoKLQkJCWNhc2UgMTI3MTE3OgotCQkJY2FzZSAyMzA0MDA6Ci0JCQljYXNlIDQ2MDgwMDoKLQkJCWNhc2UgOTIxNjAwOgotCQkJY2FzZSAzNjg2NDAwOgotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQliYXVkID0gOTYwMDsKLQkJCQlicmVhazsKKwkJY2FzZSAwOgorCQljYXNlIDYwMDoKKwkJY2FzZSAxMjAwOgorCQljYXNlIDE4MDA6CisJCWNhc2UgMjQwMDoKKwkJY2FzZSA0ODAwOgorCQljYXNlIDcyMDA6CisJCWNhc2UgOTYwMDoKKwkJY2FzZSAxNDQwMDoKKwkJY2FzZSAxOTIwMDoKKwkJY2FzZSAyODgwMDoKKwkJY2FzZSAzODQwMDoKKwkJY2FzZSA1NTg1NDoKKwkJY2FzZSA1NzYwMDoKKwkJY2FzZSAxMTUyMDA6CisJCWNhc2UgMTI3MTE3OgorCQljYXNlIDIzMDQwMDoKKwkJY2FzZSA0NjA4MDA6CisJCWNhc2UgOTIxNjAwOgorCQljYXNlIDM2ODY0MDA6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJhdWQgPSA5NjAwOworCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoYmF1ZCkgewpAQCAtNTU0LDM1ICs1NTEsMzUgQEAKIAkJfQogCX0KIAkvKiBSZXBvcnQgYmFjayB0aGUgcmVzdWx0aW5nIGJhdWQgcmF0ZSAqLwotCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHBvcnQtPnR0eSwgYmF1ZCwgYmF1ZCk7CisJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKIAogCS8qIElmIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIGlzIHRvIGJlIHVwZGF0ZWQgKi8KIAlpZiAoKGNmbGFnICYgQ1NJWkUpICE9IChvbGRfY2ZsYWcgJiBDU0laRSkpIHsKIAkJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKIAkJYml0cyAmPSB+QklUU19EQVRBX01BU0s7CiAJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewotCQkJY2FzZSBDUzU6Ci0JCQkJYml0cyB8PSBCSVRTX0RBVEFfNTsKLQkJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNSIsIF9fZnVuY19fKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ1M2OgotCQkJCWJpdHMgfD0gQklUU19EQVRBXzY7Ci0JCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX2Z1bmNfXyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENTNzoKLQkJCQliaXRzIHw9IEJJVFNfREFUQV83OwotCQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19mdW5jX18pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDUzg6Ci0JCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKLQkJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOCIsIF9fZnVuY19fKTsKLQkJCQlicmVhazsKLQkJCS8qY2FzZSBDUzk6Ci0JCQkgCWJpdHMgfD0gQklUU19EQVRBXzk7Ci0JCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDkiLCBfX2Z1bmNfXyk7Ci0JCQkJYnJlYWs7Ki8KLQkJCWRlZmF1bHQ6Ci0JCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiY3AyMTAxIGRyaXZlciBkb2VzIG5vdCAiCisJCWNhc2UgQ1M1OgorCQkJYml0cyB8PSBCSVRTX0RBVEFfNTsKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCWNhc2UgQ1M2OgorCQkJYml0cyB8PSBCSVRTX0RBVEFfNjsKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCWNhc2UgQ1M3OgorCQkJYml0cyB8PSBCSVRTX0RBVEFfNzsKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCWNhc2UgQ1M4OgorCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCS8qY2FzZSBDUzk6CisJCQliaXRzIHw9IEJJVFNfREFUQV85OworCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDkiLCBfX2Z1bmNfXyk7CisJCQlicmVhazsqLworCQlkZWZhdWx0OgorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiY3AyMTAxIGRyaXZlciBkb2VzIG5vdCAiCiAJCQkJCSJzdXBwb3J0IHRoZSBudW1iZXIgb2YgYml0cyByZXF1ZXN0ZWQsIgogCQkJCQkiIHVzaW5nIDggYml0IG1vZGVcbiIpOwogCQkJCWJpdHMgfD0gQklUU19EQVRBXzg7CkBAIC02NTEsMTAgKzY0OCwxMSBAQAogCiB9CiAKLXN0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0IChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewotCWludCBjb250cm9sID0gMDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY29udHJvbCA9IDA7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCkBAIC02ODEsOSArNjc5LDExIEBACiAKIH0KIAotc3RhdGljIGludCBjcDIxMDFfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBjcDIxMDFfdGlvY21nZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBjb250cm9sLCByZXN1bHQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgaW50IGNvbnRyb2w7CisJaW50IHJlc3VsdDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKQEAgLTcwMSw5ICs3MDEsMTAgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBjcDIxMDFfYnJlYWtfY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCitzdGF0aWMgdm9pZCBjcDIxMDFfYnJlYWtfY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7Ci0JaW50IHN0YXRlOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBzdGF0ZTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAJaWYgKGJyZWFrX3N0YXRlID09IDApCkBAIC03MTEsMzAgKzcxMiwyOSBAQAogCWVsc2UKIAkJc3RhdGUgPSBCUkVBS19PTjsKIAlkYmcoIiVzIC0gdHVybmluZyBicmVhayAlcyIsIF9fZnVuY19fLAotCQkJc3RhdGU9PUJSRUFLX09GRiA/ICJvZmYiIDogIm9uIik7CisJCQlzdGF0ZSA9PSBCUkVBS19PRkYgPyAib2ZmIiA6ICJvbiIpOwogCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CUkVBSywgJnN0YXRlLCAyKTsKIH0KIAotc3RhdGljIGludCBjcDIxMDFfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQgY3AyMTAxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAkvKiBDUDIxMDEgYnVmZmVycyBiZWhhdmUgc3RyYW5nZWx5IHVubGVzcyBkZXZpY2UgaXMgcmVzZXQgKi8KIAl1c2JfcmVzZXRfZGV2aWNlKHNlcmlhbC0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IGk7CiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJLyogU3RvcCByZWFkcyBhbmQgd3JpdGVzIG9uIGFsbCBwb3J0cyAqLwotCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQogCQljcDIxMDFfY2xlYW51cChzZXJpYWwtPnBvcnRbaV0pOwotCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgY3AyMTAxX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjcDIxMDFfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAKQEAgLTc1NCwxMCArNzU0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBjcDIxMDFfZXhpdCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcDIxMDFfZXhpdCh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgmY3AyMTAxX2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmY3AyMTAxX2RldmljZSk7CisJdXNiX2RlcmVnaXN0ZXIoJmNwMjEwMV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3AyMTAxX2RldmljZSk7CiB9CiAKIG1vZHVsZV9pbml0KGNwMjEwMV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwppbmRleCBjMTY0ZTJjLi5iNGQ3MjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KIApAQCAtNTcsMjIgKzU3LDI1IEBACiAjZGVmaW5lIENZQkVSSkFDS19QUk9EVUNUX0lECTB4MDEwMAogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IGN5YmVyamFja19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyB2b2lkIGN5YmVyamFja19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICBjeWJlcmphY2tfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIHZvaWQgY3liZXJqYWNrX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgaW50IGN5YmVyamFja193cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwotc3RhdGljIGludCBjeWJlcmphY2tfd3JpdGVfcm9vbSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApOwotc3RhdGljIHZvaWQgY3liZXJqYWNrX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgY3liZXJqYWNrX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkIGN5YmVyamFja193cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCBjeWJlcmphY2tfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGN5YmVyamFja19zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGN5YmVyamFja19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBjeWJlcmphY2tfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgY3liZXJqYWNrX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCBjeWJlcmphY2tfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgY3liZXJqYWNrX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgY3liZXJqYWNrX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0gewogCXsgVVNCX0RFVklDRShDWUJFUkpBQ0tfVkVORE9SX0lELCBDWUJFUkpBQ0tfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3liZXJqYWNrX2RyaXZlciA9IHsKIAkubmFtZSA9CQkiY3liZXJqYWNrIiwKQEAgLTExMSw3ICsxMTQsNyBAQAogfTsKIAogLyogZG8gc29tZSBzdGFydHVwIGFsbG9jYXRpb25zIG5vdCBjdXJyZW50bHkgcGVyZm9ybWVkIGJ5IHVzYl9zZXJpYWxfcHJvYmUoKSAqLwotc3RhdGljIGludCBjeWJlcmphY2tfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQgY3liZXJqYWNrX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgKnByaXY7CiAJaW50IGk7CkBAIC0xMzUsMjAgKzEzOCwyMCBAQAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCWludCByZXN1bHQ7CiAJCXNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7Ci0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX3VyYiwgCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX3VyYiwKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXN1bHQpCiAJCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CiAJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihpbnQgdXJiKSIsIF9fZnVuY19fKTsKIAl9CiAKLQlyZXR1cm4oIDAgKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY3liZXJqYWNrX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgY3liZXJqYWNrX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IGk7Ci0JCisKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKQEAgLTE1OCw4ICsxNjEsOSBAQAogCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKIAl9CiB9Ci0JCi1zdGF0aWMgaW50ICBjeWJlcmphY2tfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCisKK3N0YXRpYyBpbnQgIGN5YmVyamFja19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgKnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE2NywxNCArMTcxLDE1IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JZGJnKCIlcyAtIHVzYl9jbGVhcl9oYWx0IiwgX19mdW5jX18gKTsKKwlkYmcoIiVzIC0gdXNiX2NsZWFyX2hhbHQiLCBfX2Z1bmNfXyk7CiAJdXNiX2NsZWFyX2hhbHQocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CiAKIAkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMKIAkgKiB0aGUgZGF0YSB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoCiAJICogZGF0YSByYXRlcyAobGlrZSB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgogCSAqLwotCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCWlmICh0dHkpCisJCXR0eS0+bG93X2xhdGVuY3kgPSAxOwogCiAJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMTg2LDcgKzE5MSw4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgY3liZXJqYWNrX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIGN5YmVyamFja19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtMTk3LDcgKzIwMyw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGN5YmVyamFja193cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGN5YmVyamFja193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IGN5YmVyamFja19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtMjIzLDcgKzIzMCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaWYoIChjb3VudCtwcml2LT53cmZpbGxlZCkgPiBzaXplb2YocHJpdi0+d3JidWYpICkgeworCWlmIChjb3VudCtwcml2LT53cmZpbGxlZCA+IHNpemVvZihwcml2LT53cmJ1ZikpIHsKIAkJLyogVG8gbXVjaCBkYXRhIGZvciBidWZmZXIuIFJlc2V0IGJ1ZmZlci4gKi8KIAkJcHJpdi0+d3JmaWxsZWQgPSAwOwogCQlwb3J0LT53cml0ZV91cmJfYnVzeSA9IDA7CkBAIC0yMzIsNDIgKzIzOSw0MyBAQAogCX0KIAogCS8qIENvcHkgZGF0YSAqLwotCW1lbWNweSAocHJpdi0+d3JidWYrcHJpdi0+d3JmaWxsZWQsIGJ1ZiwgY291bnQpOworCW1lbWNweShwcml2LT53cmJ1ZiArIHByaXYtPndyZmlsbGVkLCBidWYsIGNvdW50KTsKIAogCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIGNvdW50LAotCQlwcml2LT53cmJ1Zitwcml2LT53cmZpbGxlZCk7CisJCXByaXYtPndyYnVmICsgcHJpdi0+d3JmaWxsZWQpOwogCXByaXYtPndyZmlsbGVkICs9IGNvdW50OwogCi0JaWYoIHByaXYtPndyZmlsbGVkID49IDMgKSB7CisJaWYgKHByaXYtPndyZmlsbGVkID49IDMpIHsKIAkJd3JleHBlY3RlZCA9ICgoaW50KXByaXYtPndyYnVmWzJdPDw4KStwcml2LT53cmJ1ZlsxXSszOwogCQlkYmcoIiVzIC0gZXhwZWN0ZWQgZGF0YTogJWQiLCBfX2Z1bmNfXywgd3JleHBlY3RlZCk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJd3JleHBlY3RlZCA9IHNpemVvZihwcml2LT53cmJ1Zik7Ci0JfQogCi0JaWYoIHByaXYtPndyZmlsbGVkID49IHdyZXhwZWN0ZWQgKSB7CisJaWYgKHByaXYtPndyZmlsbGVkID49IHdyZXhwZWN0ZWQpIHsKIAkJLyogV2UgaGF2ZSBlbm91Z2ggZGF0YSB0byBiZWdpbiB0cmFuc21pc3Npb24gKi8KIAkJaW50IGxlbmd0aDsKIAogCQlkYmcoIiVzIC0gdHJhbnNtaXR0aW5nIGRhdGEgKGZyYW1lIDEpIiwgX19mdW5jX18pOwotCQlsZW5ndGggPSAod3JleHBlY3RlZCA+IHBvcnQtPmJ1bGtfb3V0X3NpemUpID8gcG9ydC0+YnVsa19vdXRfc2l6ZSA6IHdyZXhwZWN0ZWQ7CisJCWxlbmd0aCA9ICh3cmV4cGVjdGVkID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPworCQkJCQlwb3J0LT5idWxrX291dF9zaXplIDogd3JleHBlY3RlZDsKIAotCQltZW1jcHkgKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwcml2LT53cmJ1ZiwgbGVuZ3RoICk7Ci0JCXByaXYtPndyc2VudD1sZW5ndGg7CisJCW1lbWNweShwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgcHJpdi0+d3JidWYsIGxlbmd0aCk7CisJCXByaXYtPndyc2VudCA9IGxlbmd0aDsKIAogCQkvKiBzZXQgdXAgb3VyIHVyYiAqLwotCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIHNlcmlhbC0+ZGV2LCAKKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBzZXJpYWwtPmRldiwKIAkJCSAgICAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKIAkJCSAgICAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsCi0JCQkgICAgICAoKHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjaykgPyAKLQkJCSAgICAgICBzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2sgOiAKLQkJCSAgICAgICBjeWJlcmphY2tfd3JpdGVfYnVsa19jYWxsYmFjayksIAorCQkJICAgICAgKChzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2spID8KKwkJCSAgICAgICBzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2sgOgorCQkJICAgICAgIGN5YmVyamFja193cml0ZV9idWxrX2NhbGxiYWNrKSwKIAkJCSAgICAgIHBvcnQpOwogCiAJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJCS8qIFRocm93IGF3YXkgZGF0YS4gTm8gYmV0dGVyIGlkZWEgd2hhdCB0byBkbyB3aXRoIGl0LiAqLwogCQkJcHJpdi0+d3JmaWxsZWQgPSAwOwogCQkJcHJpdi0+d3JzZW50ID0gMDsKQEAgLTI3NiwxMiArMjg0LDEyIEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCWRiZygiJXMgLSBwcml2LT53cnNlbnQ9JWQiLCBfX2Z1bmNfXyxwcml2LT53cnNlbnQpOwotCQlkYmcoIiVzIC0gcHJpdi0+d3JmaWxsZWQ9JWQiLCBfX2Z1bmNfXyxwcml2LT53cmZpbGxlZCk7CisJCWRiZygiJXMgLSBwcml2LT53cnNlbnQ9JWQiLCBfX2Z1bmNfXywgcHJpdi0+d3JzZW50KTsKKwkJZGJnKCIlcyAtIHByaXYtPndyZmlsbGVkPSVkIiwgX19mdW5jX18sIHByaXYtPndyZmlsbGVkKTsKIAotCQlpZiggcHJpdi0+d3JzZW50Pj1wcml2LT53cmZpbGxlZCApIHsKKwkJaWYgKHByaXYtPndyc2VudCA+PSBwcml2LT53cmZpbGxlZCkgewogCQkJZGJnKCIlcyAtIGJ1ZmZlciBjbGVhbmVkIiwgX19mdW5jX18pOwotCQkJbWVtc2V0KCBwcml2LT53cmJ1ZiwgMCwgc2l6ZW9mKHByaXYtPndyYnVmKSApOworCQkJbWVtc2V0KHByaXYtPndyYnVmLCAwLCBzaXplb2YocHJpdi0+d3JidWYpKTsKIAkJCXByaXYtPndyZmlsbGVkID0gMDsKIAkJCXByaXYtPndyc2VudCA9IDA7CiAJCX0KQEAgLTI4OSwxNiArMjk3LDE2IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gKGNvdW50KTsKLX0gCisJcmV0dXJuIGNvdW50OworfQogCi1zdGF0aWMgaW50IGN5YmVyamFja193cml0ZV9yb29tKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3N0YXRpYyBpbnQgY3liZXJqYWNrX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAkvKiBGSVhNRTogLi4uLiAqLwogCXJldHVybiBDWUJFUkpBQ0tfTE9DQUxfQlVGX1NJWkU7CiB9CiAKLXN0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2ludF9jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiICkKK3N0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC0zMTIsMTAgKzMyMCwxMSBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybjsKIAotCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKKwkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CiAKIAkvKiBSZWFjdCBvbmx5IHRvIGludGVycnVwdHMgc2lnbmFsaW5nIGEgYnVsa19pbiB0cmFuc2ZlciAqLwotCWlmKCAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDQpICYmIChkYXRhWzBdID09IDB4MDEpICkgeworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gNCAmJiBkYXRhWzBdID09IDB4MDEpIHsKIAkJc2hvcnQgb2xkX3JkdG9kbzsKIAogCQkvKiBUaGlzIGlzIGEgYW5ub3VuY2VtZW50IG9mIGNvbWluZyBidWxrX2lucy4gKi8KQEAgLTMyNSw4ICszMzQsOCBAQAogCiAJCW9sZF9yZHRvZG8gPSBwcml2LT5yZHRvZG87CiAKLQkJaWYoIChvbGRfcmR0b2RvK3NpemUpPChvbGRfcmR0b2RvKSApIHsKLQkJCWRiZyggIlRvIG1hbnkgYnVsa19pbiB1cmJzIHRvIGRvLiIgKTsKKwkJaWYgKG9sZF9yZHRvZG8gKyBzaXplIDwgb2xkX3JkdG9kbykgeworCQkJZGJnKCJUbyBtYW55IGJ1bGtfaW4gdXJicyB0byBkby4iKTsKIAkJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAkJCWdvdG8gcmVzdWJtaXQ7CiAJCX0KQEAgLTMzOCwxMCArMzQ3LDEwIEBACiAKIAkJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogCi0JCWlmKCAhb2xkX3JkdG9kbyApIHsKKwkJaWYgKCFvbGRfcmR0b2RvKSB7CiAJCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiggcmVzdWx0ICkKKwkJCWlmIChyZXN1bHQpCiAJCQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CiAJCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCB1cmIpIiwgX19mdW5jX18pOwogCQl9CkBAIC0zNTUsNyArMzY0LDcgQEAKIAlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoaW50IHVyYikiLCBfX2Z1bmNfXyk7CiB9CiAKLXN0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IGN5YmVyamFja19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtMzY3LDE0ICszNzYsMTUgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCisJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOwogCWlmIChzdGF0dXMpIHsKIAkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAogCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKLQl0dHkgPSBwb3J0LT50dHk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJaWYgKCF0dHkpIHsKIAkJZGJnKCIlcyAtIGlnbm9yaW5nIHNpbmNlIGRldmljZSBub3Qgb3BlblxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CkBAIC0zODIsMTUgKzM5MiwxNiBAQAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkgIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KIAogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKIAkvKiBSZWR1Y2UgdXJicyB0byBkbyBieSBvbmUuICovCi0JcHJpdi0+cmR0b2RvLT11cmItPmFjdHVhbF9sZW5ndGg7CisJcHJpdi0+cmR0b2RvIC09IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAkvKiBKdXN0IHRvIGJlIHN1cmUgKi8KLQlpZiAoIHByaXYtPnJkdG9kbzwwICkgcHJpdi0+cmR0b2RvID0gMDsKKwlpZiAocHJpdi0+cmR0b2RvIDwgMCkKKwkJcHJpdi0+cmR0b2RvID0gMDsKIAl0b2RvID0gcHJpdi0+cmR0b2RvOwogCiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwpAQCAtMzk4LDE2ICs0MDksMTcgQEAKIAlkYmcoIiVzIC0gcmR0b2RvOiAlZCIsIF9fZnVuY19fLCB0b2RvKTsKIAogCS8qIENvbnRpbnVlIHRvIHJlYWQgaWYgd2UgaGF2ZSBzdGlsbCB1cmJzIHRvIGRvLiAqLwotCWlmKCB0b2RvIC8qIHx8ICh1cmItPmFjdHVhbF9sZW5ndGg9PXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSovICkgeworCWlmICh0b2RvIC8qIHx8ICh1cmItPmFjdHVhbF9sZW5ndGg9PXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSovKSB7CiAJCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KQotCQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCB1cmIpIiwgX19mdW5jX18pOwogCX0KIH0KIAotc3RhdGljIHZvaWQgY3liZXJqYWNrX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIGN5YmVyamFja193cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTQyNSw3ICs0MzcsNyBAQAogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKIAkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIG1vcmUgZGF0YSB0byBzZW5kICovCi0JaWYoIHByaXYtPndyZmlsbGVkICkgeworCWlmIChwcml2LT53cmZpbGxlZCkgewogCQlpbnQgbGVuZ3RoLCBibGtzaXplLCByZXN1bHQ7CiAKIAkJZGJnKCIlcyAtIHRyYW5zbWl0dGluZyBkYXRhIChmcmFtZSBuKSIsIF9fZnVuY19fKTsKQEAgLTQzMywzNyArNDQ1LDM5IEBACiAJCWxlbmd0aCA9ICgocHJpdi0+d3JmaWxsZWQgLSBwcml2LT53cnNlbnQpID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPwogCQkJcG9ydC0+YnVsa19vdXRfc2l6ZSA6IChwcml2LT53cmZpbGxlZCAtIHByaXYtPndyc2VudCk7CiAKLQkJbWVtY3B5IChwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgcHJpdi0+d3JidWYgKyBwcml2LT53cnNlbnQsCi0JCQlsZW5ndGggKTsKLQkJcHJpdi0+d3JzZW50Kz1sZW5ndGg7CisJCW1lbWNweShwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJcHJpdi0+d3JidWYgKyBwcml2LT53cnNlbnQsIGxlbmd0aCk7CisJCXByaXYtPndyc2VudCArPSBsZW5ndGg7CiAKIAkJLyogc2V0IHVwIG91ciB1cmIgKi8KLQkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkgICAgICB1c2Jfc25kYnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCiAJCQkgICAgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoLAotCQkJICAgICAgKChwb3J0LT5zZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2spID8gCi0JCQkgICAgICAgcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrIDogCi0JCQkgICAgICAgY3liZXJqYWNrX3dyaXRlX2J1bGtfY2FsbGJhY2spLCAKKwkJCSAgICAgICgocG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrKSA/CisJCQkgICAgICAgcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrIDoKKwkJCSAgICAgICBjeWJlcmphY2tfd3JpdGVfYnVsa19jYWxsYmFjayksCiAJCQkgICAgICBwb3J0KTsKIAogCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCisJCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJLyogVGhyb3cgYXdheSBkYXRhLiBObyBiZXR0ZXIgaWRlYSB3aGF0IHRvIGRvIHdpdGggaXQuICovCiAJCQlwcml2LT53cmZpbGxlZCA9IDA7CiAJCQlwcml2LT53cnNlbnQgPSAwOwogCQkJZ290byBleGl0OwogCQl9CiAKLQkJZGJnKCIlcyAtIHByaXYtPndyc2VudD0lZCIsIF9fZnVuY19fLHByaXYtPndyc2VudCk7Ci0JCWRiZygiJXMgLSBwcml2LT53cmZpbGxlZD0lZCIsIF9fZnVuY19fLHByaXYtPndyZmlsbGVkKTsKKwkJZGJnKCIlcyAtIHByaXYtPndyc2VudD0lZCIsIF9fZnVuY19fLCBwcml2LT53cnNlbnQpOworCQlkYmcoIiVzIC0gcHJpdi0+d3JmaWxsZWQ9JWQiLCBfX2Z1bmNfXywgcHJpdi0+d3JmaWxsZWQpOwogCiAJCWJsa3NpemUgPSAoKGludClwcml2LT53cmJ1ZlsyXTw8OCkrcHJpdi0+d3JidWZbMV0rMzsKIAotCQlpZiggKHByaXYtPndyc2VudD49cHJpdi0+d3JmaWxsZWQpIHx8IChwcml2LT53cnNlbnQ+PWJsa3NpemUpICkgeworCQlpZiAocHJpdi0+d3JzZW50ID49IHByaXYtPndyZmlsbGVkIHx8CisJCQkJCXByaXYtPndyc2VudCA+PSBibGtzaXplKSB7CiAJCQlkYmcoIiVzIC0gYnVmZmVyIGNsZWFuZWQiLCBfX2Z1bmNfXyk7Ci0JCQltZW1zZXQoIHByaXYtPndyYnVmLCAwLCBzaXplb2YocHJpdi0+d3JidWYpICk7CisJCQltZW1zZXQocHJpdi0+d3JidWYsIDAsIHNpemVvZihwcml2LT53cmJ1ZikpOwogCQkJcHJpdi0+d3JmaWxsZWQgPSAwOwogCQkJcHJpdi0+d3JzZW50ID0gMDsKIAkJfQpAQCAtNDc0LDE0ICs0ODgsMTQgQEAKIAl1c2Jfc2VyaWFsX3BvcnRfc29mdGludChwb3J0KTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgY3liZXJqYWNrX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjeWJlcmphY2tfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAJcmV0dmFsICA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmN5YmVyamFja19kZXZpY2UpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZjeWJlcmphY2tfZHJpdmVyKTsKLQlpZiAocmV0dmFsKSAKKwlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKIAlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKQEAgLTQ5NCwxOCArNTA4LDE4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGN5YmVyamFja19leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGN5YmVyamFja19leGl0KHZvaWQpCiB7Ci0JdXNiX2RlcmVnaXN0ZXIgKCZjeWJlcmphY2tfZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjeWJlcmphY2tfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3RlcigmY3liZXJqYWNrX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjeWJlcmphY2tfZGV2aWNlKTsKIH0KIAogbW9kdWxlX2luaXQoY3liZXJqYWNrX2luaXQpOwogbW9kdWxlX2V4aXQoY3liZXJqYWNrX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7Ci1NT0RVTEVfVkVSU0lPTiggRFJJVkVSX1ZFUlNJT04gKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCmluZGV4IDAyMzBkM2MuLjIyODM3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwpAQCAtMiw3ICsyLDcgQEAKICAqIFVTQiBDeXByZXNzIE04IGRyaXZlcgogICoKICAqIAlDb3B5cmlnaHQgKEMpIDIwMDQKLSAqIAkgICAgTG9ubmllIE1lbmRleiAoZGlnbm9tZUBnbWFpbC5jb20pIAorICogCSAgICBMb25uaWUgTWVuZGV6IChkaWdub21lQGdtYWlsLmNvbSkKICAqCUNvcHlyaWdodCAoQykgMjAwMywyMDA0CiAgKgkgICAgTmVpbCBXaGVsY2hlbCAoa295YW1hQGZpcnN0bGlnaHQubmV0KQogICoKQEAgLTExLDE5ICsxMSwyMSBAQAogICogCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzCisgKiBkcml2ZXIKICAqCiAgKiBTZWUgaHR0cDovL2dlb2NpdGllcy5jb20vaTB4b3gwaSBmb3IgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgYW5kIHRoZQogICogZWFydGhtYXRlIHVzYiBkZXZpY2UuCiAgKgogICogIExvbm5pZSBNZW5kZXogPGRpZ25vbWVAZ21haWwuY29tPgogICogIDQtMjktMjAwNQotICoJRml4ZWQgcHJvYmxlbSB3aGVyZSBzZXR0aW5nIG9yIHJldHJlaXZpbmcgdGhlIHNlcmlhbCBjb25maWcgd291bGQgZmFpbCB3aXRoCi0gKiAJRVBJUEUuICBSZW1vdmVkIENSVFMgdG9nZ2xpbmcgc28gdGhlIGRyaXZlciBiZWhhdmVzIG1vcmUgbGlrZSBvdGhlciB1c2JzZXJpYWwKLSAqIAlhZGFwdGVycy4gIElzc3VlZCBuZXcgaW50ZXJ2YWwgb2YgMW1zIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgMTBtcy4gIEFzIGEKLSAqIAlyZXN1bHQsIHRyYW5zZmVyIHNwZWVkIGhhcyBiZWVuIHN1YnN0YW50aWFsbHkgaW5jcmVhc2VkLiAgRnJvbSBhdmcuIDg1MGJwcyB0bwotICogCWF2Zy4gMzMwMGJwcy4gIGluaXRpYWwgdGVybWlvcyBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiAgQ2xlYW5lZCB1cCBjb2RlIGFuZAotICogCWZvcm1hdHRpbmcgaXNzdWVzIHNvIGl0IGlzIG1vcmUgcmVhZGFibGUuICBSZXBsYWNlZCB0aGUgQysrIHN0eWxlIGNvbW1lbnRzLgorICoJRml4ZWQgcHJvYmxlbSB3aGVyZSBzZXR0aW5nIG9yIHJldHJlaXZpbmcgdGhlIHNlcmlhbCBjb25maWcgd291bGQgZmFpbAorICoJd2l0aCBFUElQRS4gIFJlbW92ZWQgQ1JUUyB0b2dnbGluZyBzbyB0aGUgZHJpdmVyIGJlaGF2ZXMgbW9yZSBsaWtlCisgKglvdGhlciB1c2JzZXJpYWwgYWRhcHRlcnMuICBJc3N1ZWQgbmV3IGludGVydmFsIG9mIDFtcyBpbnN0ZWFkIG9mIHRoZQorICoJZGVmYXVsdCAxMG1zLiAgQXMgYSByZXN1bHQsIHRyYW5zZmVyIHNwZWVkIGhhcyBiZWVuIHN1YnN0YW50aWFsbHkKKyAqCWluY3JlYXNlZCBmcm9tIGF2Zy4gODUwYnBzIHRvIGF2Zy4gMzMwMGJwcy4gIGluaXRpYWwgdGVybWlvcyBoYXMgYWxzbworICoJYmVlbiBtb2RpZmllZC4gIENsZWFuZWQgdXAgY29kZSBhbmQgZm9ybWF0dGluZyBpc3N1ZXMgc28gaXQgaXMgbW9yZQorICoJcmVhZGFibGUuICBSZXBsYWNlZCB0aGUgQysrIHN0eWxlIGNvbW1lbnRzLgogICoKICAqICBMb25uaWUgTWVuZGV6IDxkaWdub21lQGdtYWlsLmNvbT4KICAqICAxMi0xNS0yMDA0CkBAIC00MiwxMCArNDQsMTEgQEAKICAqCiAgKi8KIAotLyogVGhhbmtzIHRvIE5laWwgV2hlbGNoZWwgZm9yIHdyaXRpbmcgdGhlIGZpcnN0IGN5cHJlc3MgbTggaW1wbGVtZW50YXRpb24gZm9yIGxpbnV4LiAqLworLyogVGhhbmtzIHRvIE5laWwgV2hlbGNoZWwgZm9yIHdyaXRpbmcgdGhlIGZpcnN0IGN5cHJlc3MgbTggaW1wbGVtZW50YXRpb24KKyAgIGZvciBsaW51eC4gKi8KIC8qIFRoYW5rcyB0byBjeXByZXNzIGZvciBwcm92aWRpbmcgcmVmZXJlbmNlcyBmb3IgdGhlIGhpZCByZXBvcnRzLiAqLwogLyogVGhhbmtzIHRvIEppYW5nIFpoYW5nIGZvciBwcm92aWRpbmcgbGlua3MgYW5kIGZvciBnZW5lcmFsIGhlbHAuICovCi0vKiBDb2RlIG9yaWdpbmF0ZXMgYW5kIHdhcyBidWlsdCB1cCBmcm9tIGZ0ZGlfc2lvLCBiZWxraW4sIHBsMjMwMyBhbmQgb3RoZXJzLiAqLworLyogQ29kZSBvcmlnaW5hdGVzIGFuZCB3YXMgYnVpbHQgdXAgZnJvbSBmdGRpX3NpbywgYmVsa2luLCBwbDIzMDMgYW5kIG90aGVycy4qLwogCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTYyLDcgKzY1LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImN5cHJlc3NfbTguaCIKIApAQCAtMTEyLDcgKzExNSw3IEBACiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN5cHJlc3NfZHJpdmVyID0gewogCS5uYW1lID0JCSJjeXByZXNzIiwKQEAgLTE0NiwxMSArMTQ5LDEzIEBACiAJX191OCByeF9mbGFnczsJCQkgICAvKiB0aHJvdHRsaW5nIC0gdXNlZCBmcm9tIHdoaXRlaGVhdC9mdGRpX3NpbyAqLwogCWVudW0gcGFja2V0X2Zvcm1hdCBwa3RfZm10OwkgICAvKiBmb3JtYXQgdG8gdXNlIGZvciBwYWNrZXQgc2VuZCAvIHJlY2VpdmUgKi8KIAlpbnQgZ2V0X2NmZ191bnNhZmU7CQkgICAvKiBJZiB0cnVlLCB0aGUgQ1lQUkVTU19HRVRfQ09ORklHIGlzIHVuc2FmZSAqLwotCWludCBiYXVkX3JhdGU7CQkJICAgLyogc3RvcmVzIGN1cnJlbnQgYmF1ZCByYXRlIGluIGludGVnZXIgZm9ybSAqLworCWludCBiYXVkX3JhdGU7CQkJICAgLyogc3RvcmVzIGN1cnJlbnQgYmF1ZCByYXRlIGluCisJCQkJCSAgICAgIGludGVnZXIgZm9ybSAqLwogCWludCBpc3Rocm90dGxlZDsJCSAgIC8qIGlmIHRocm90dGxlZCwgZGlzY2FyZCByZWFkcyAqLwogCXdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OyAgLyogdXNlZCBmb3IgVElPQ01JV0FJVCAqLwogCWNoYXIgcHJldl9zdGF0dXMsIGRpZmZfc3RhdHVzOwkgICAvKiB1c2VkIGZvciBUSU9DTUlXQUlUICovCi0JLyogd2UgcGFzcyBhIHBvaW50ZXIgdG8gdGhpcyBhcyB0aGUgYXJndWVtZW50IHNlbnQgdG8gY3lwcmVzc19zZXRfdGVybWlvcyBvbGRfdGVybWlvcyAqLworCS8qIHdlIHBhc3MgYSBwb2ludGVyIHRvIHRoaXMgYXMgdGhlIGFyZ3VlbWVudCBzZW50IHRvCisJICAgY3lwcmVzc19zZXRfdGVybWlvcyBvbGRfdGVybWlvcyAqLwogCXN0cnVjdCBrdGVybWlvcyB0bXBfdGVybWlvczsgCSAgIC8qIHN0b3JlcyB0aGUgb2xkIHRlcm1pb3Mgc2V0dGluZ3MgKi8KIH07CiAKQEAgLTE2MywzMyArMTY4LDQxIEBACiB9OwogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgQ3lwcmVzcyBVU0IgdG8gc2VyaWFsIGRldmljZSAqLwotc3RhdGljIGludCAgY3lwcmVzc19lYXJ0aG1hdGVfc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICBjeXByZXNzX2hpZGNvbV9zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBpbnQgIGN5cHJlc3NfY2E0MnYyX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIHZvaWQgY3lwcmVzc19zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCAgY3lwcmVzc19vcGVuCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIHZvaWQgY3lwcmVzc19jbG9zZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyBpbnQgIGN5cHJlc3Nfd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7Ci1zdGF0aWMgdm9pZCBjeXByZXNzX3NlbmQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgIGN5cHJlc3Nfd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCAgY3lwcmVzc19pb2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQgY3lwcmVzc19zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqIG9sZCk7Ci1zdGF0aWMgaW50ICBjeXByZXNzX3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIGludCAgY3lwcmVzc190aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwotc3RhdGljIGludCAgY3lwcmVzc19jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgY3lwcmVzc190aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgY3lwcmVzc191bnRocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCBjeXByZXNzX3NldF9kZWFkCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCBjeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgY3lwcmVzc193cml0ZV9pbnRfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50ICBjeXByZXNzX2VhcnRobWF0ZV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgY3lwcmVzc19oaWRjb21fc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGN5cHJlc3NfY2E0MnYyX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgY3lwcmVzc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBjeXByZXNzX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBjeXByZXNzX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50ICBjeXByZXNzX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgY3lwcmVzc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGQpOworc3RhdGljIGludCAgY3lwcmVzc190aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBjeXByZXNzX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKK3N0YXRpYyBpbnQgIGN5cHJlc3NfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQgY3lwcmVzc190aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGN5cHJlc3NfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfc2V0X2RlYWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBjeXByZXNzX3dyaXRlX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogLyogd3JpdGUgYnVmZmVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIHN0cnVjdCBjeXByZXNzX2J1ZiAqY3lwcmVzc19idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUpOwotc3RhdGljIHZvaWQgCQkgIGN5cHJlc3NfYnVmX2ZyZWUoc3RydWN0IGN5cHJlc3NfYnVmICpjYik7Ci1zdGF0aWMgdm9pZAkJICBjeXByZXNzX2J1Zl9jbGVhcihzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQJICBjeXByZXNzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpOwotc3RhdGljIHVuc2lnbmVkIGludAkgIGN5cHJlc3NfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpOwotc3RhdGljIHVuc2lnbmVkIGludAkgIGN5cHJlc3NfYnVmX3B1dChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCk7Ci1zdGF0aWMgdW5zaWduZWQgaW50CSAgY3lwcmVzc19idWZfZ2V0KHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIGN5cHJlc3NfYnVmX2ZyZWUoc3RydWN0IGN5cHJlc3NfYnVmICpjYik7CitzdGF0aWMgdm9pZCBjeXByZXNzX2J1Zl9jbGVhcihzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3lwcmVzc19idWZfZGF0YV9hdmFpbChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3lwcmVzc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGN5cHJlc3NfYnVmICpjYik7CitzdGF0aWMgdW5zaWduZWQgaW50IGN5cHJlc3NfYnVmX3B1dChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiLAorCQkJCQljb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCk7CitzdGF0aWMgdW5zaWduZWQgaW50IGN5cHJlc3NfYnVmX2dldChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiLAorCQkJCQljaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCk7CiAKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBjeXByZXNzX2VhcnRobWF0ZV9kZXZpY2UgPSB7CkBAIC0yNDcsNyArMjYwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgY3lwcmVzc19jYTQydjJfZGV2aWNlID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lciA9CQlUSElTX01PRFVMRSwKLSAgICAgICAgICAgICAgICAubmFtZSA9CQkJIm5va2lhY2E0MnYyIiwKKwkJLm5hbWUgPQkJCSJub2tpYWNhNDJ2MiIsCiAJfSwKIAkuZGVzY3JpcHRpb24gPQkJCSJOb2tpYSBDQS00MiBWMiBBZGFwdGVyIiwKIAkudXNiX2RyaXZlciA9IAkJCSZjeXByZXNzX2RyaXZlciwKQEAgLTMyMiw4ICszMzUsMTAgQEAKIAogCiAvKiBUaGlzIGZ1bmN0aW9uIGNhbiBlaXRoZXIgc2V0IG9yIHJldHJpZXZlIHRoZSBjdXJyZW50IHNlcmlhbCBsaW5lIHNldHRpbmdzICovCi1zdGF0aWMgaW50IGN5cHJlc3Nfc2VyaWFsX2NvbnRyb2wgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHNwZWVkX3QgYmF1ZF9yYXRlLCBpbnQgZGF0YV9iaXRzLCBpbnQgc3RvcF9iaXRzLAotCQkJCSAgIGludCBwYXJpdHlfZW5hYmxlLCBpbnQgcGFyaXR5X3R5cGUsIGludCByZXNldCwgaW50IGN5cHJlc3NfcmVxdWVzdF90eXBlKQorc3RhdGljIGludCBjeXByZXNzX3NlcmlhbF9jb250cm9sKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3BlZWRfdCBiYXVkX3JhdGUsIGludCBkYXRhX2JpdHMsCisJaW50IHN0b3BfYml0cywgaW50IHBhcml0eV9lbmFibGUsIGludCBwYXJpdHlfdHlwZSwgaW50IHJlc2V0LAorCWludCBjeXByZXNzX3JlcXVlc3RfdHlwZSkKIHsKIAlpbnQgbmV3X2JhdWRyYXRlID0gMCwgcmV0dmFsID0gMCwgdHJpZXMgPSAwOwogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CkBAIC0zMzEsMTExICszNDYsMTE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci0JCisKIAlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJaWYgKCFwcml2LT5jb21tX2lzX29rKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN3aXRjaChjeXByZXNzX3JlcXVlc3RfdHlwZSkgewotCQljYXNlIENZUFJFU1NfU0VUX0NPTkZJRzoKKwlzd2l0Y2ggKGN5cHJlc3NfcmVxdWVzdF90eXBlKSB7CisJY2FzZSBDWVBSRVNTX1NFVF9DT05GSUc6CisJCW5ld19iYXVkcmF0ZSA9IHByaXYtPmJhdWRfcmF0ZTsKKwkJLyogMCBtZWFucyAnSGFuZyB1cCcgc28gZG9lc24ndCBjaGFuZ2UgdGhlIHRydWUgYml0IHJhdGUgKi8KKwkJaWYgKGJhdWRfcmF0ZSA9PSAwKQogCQkJbmV3X2JhdWRyYXRlID0gcHJpdi0+YmF1ZF9yYXRlOwotCQkJLyogMCBtZWFucyAnSGFuZyB1cCcgc28gZG9lc24ndCBjaGFuZ2UgdGhlIHRydWUgYml0IHJhdGUgKi8KLQkJCWlmIChiYXVkX3JhdGUgPT0gMCkKLQkJCQluZXdfYmF1ZHJhdGUgPSBwcml2LT5iYXVkX3JhdGU7Ci0JCQkvKiBDaGFuZ2Ugb2Ygc3BlZWQgPyAqLwotCQkJZWxzZSBpZiAoYmF1ZF9yYXRlICE9IHByaXYtPmJhdWRfcmF0ZSkgewotCQkJCWRiZygiJXMgLSBiYXVkIHJhdGUgaXMgY2hhbmdpbmciLCBfX2Z1bmNfXyk7Ci0JCQkJcmV0dmFsID0gYW5hbHl6ZV9iYXVkX3JhdGUocG9ydCwgYmF1ZF9yYXRlKTsKLQkJCQlpZiAocmV0dmFsID49ICAwKSB7Ci0JCQkJCW5ld19iYXVkcmF0ZSA9IHJldHZhbDsKLQkJCQkJZGJnKCIlcyAtIE5ldyBiYXVkIHJhdGUgc2V0IHRvICVkIiwKLQkJCQkJICAgIF9fZnVuY19fLCBuZXdfYmF1ZHJhdGUpOwotCQkJCX0KKwkJLyogQ2hhbmdlIG9mIHNwZWVkID8gKi8KKwkJZWxzZSBpZiAoYmF1ZF9yYXRlICE9IHByaXYtPmJhdWRfcmF0ZSkgeworCQkJZGJnKCIlcyAtIGJhdWQgcmF0ZSBpcyBjaGFuZ2luZyIsIF9fZnVuY19fKTsKKwkJCXJldHZhbCA9IGFuYWx5emVfYmF1ZF9yYXRlKHBvcnQsIGJhdWRfcmF0ZSk7CisJCQlpZiAocmV0dmFsID49ICAwKSB7CisJCQkJbmV3X2JhdWRyYXRlID0gcmV0dmFsOworCQkJCWRiZygiJXMgLSBOZXcgYmF1ZCByYXRlIHNldCB0byAlZCIsCisJCQkJICAgIF9fZnVuY19fLCBuZXdfYmF1ZHJhdGUpOwogCQkJfQotCQkJZGJnKCIlcyAtIGJhdWQgcmF0ZSBpcyBiZWluZyBzZW50IGFzICVkIiwgX19mdW5jX18sIG5ld19iYXVkcmF0ZSk7Ci0JCQkKLQkJCW1lbXNldChmZWF0dXJlX2J1ZmZlciwgMCwgc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSk7Ci0JCQkvKiBmaWxsIHRoZSBmZWF0dXJlX2J1ZmZlciB3aXRoIG5ldyBjb25maWd1cmF0aW9uICovCi0JCQkqKCh1X2ludDMyX3QgKilmZWF0dXJlX2J1ZmZlcikgPSBuZXdfYmF1ZHJhdGU7CisJCX0KKwkJZGJnKCIlcyAtIGJhdWQgcmF0ZSBpcyBiZWluZyBzZW50IGFzICVkIiwKKwkJCQkJX19mdW5jX18sIG5ld19iYXVkcmF0ZSk7CiAKLQkJCWZlYXR1cmVfYnVmZmVyWzRdIHw9IGRhdGFfYml0czsgICAvKiBhc3NpZ24gZGF0YSBiaXRzIGluIDIgYml0IHNwYWNlICggbWF4IDMgKSAqLwotCQkJLyogMSBiaXQgZ2FwICovCi0JCQlmZWF0dXJlX2J1ZmZlcls0XSB8PSAoc3RvcF9iaXRzIDw8IDMpOyAgIC8qIGFzc2lnbiBzdG9wIGJpdHMgaW4gMSBiaXQgc3BhY2UgKi8KLQkJCWZlYXR1cmVfYnVmZmVyWzRdIHw9IChwYXJpdHlfZW5hYmxlIDw8IDQpOyAgIC8qIGFzc2lnbiBwYXJpdHkgZmxhZyBpbiAxIGJpdCBzcGFjZSAqLwotCQkJZmVhdHVyZV9idWZmZXJbNF0gfD0gKHBhcml0eV90eXBlIDw8IDUpOyAgIC8qIGFzc2lnbiBwYXJpdHkgdHlwZSBpbiAxIGJpdCBzcGFjZSAqLwotCQkJLyogMSBiaXQgZ2FwICovCi0JCQlmZWF0dXJlX2J1ZmZlcls0XSB8PSAocmVzZXQgPDwgNyk7ICAgLyogYXNzaWduIHJlc2V0IGF0IGVuZCBvZiBieXRlLCAxIGJpdCBzcGFjZSAqLwotCQkJCQotCQkJZGJnKCIlcyAtIGRldmljZSBpcyBiZWluZyBzZW50IHRoaXMgZmVhdHVyZSByZXBvcnQ6IiwgX19mdW5jX18pOwotCQkJZGJnKCIlcyAtICUwMlggLSAlMDJYIC0gJTAyWCAtICUwMlggLSAlMDJYIiwgX19mdW5jX18sIGZlYXR1cmVfYnVmZmVyWzBdLCBmZWF0dXJlX2J1ZmZlclsxXSwKLQkJICAgICAgICAgICAgZmVhdHVyZV9idWZmZXJbMl0sIGZlYXR1cmVfYnVmZmVyWzNdLCBmZWF0dXJlX2J1ZmZlcls0XSk7Ci0JCQkKLQkJCWRvIHsKLQkJCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCi0JCQkJCQl1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAotCQkJCQkJSElEX1JFUV9TRVRfUkVQT1JULAotCQkJCQkJVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MsCi0JCQkJCQkweDAzMDAsIDAsIGZlYXR1cmVfYnVmZmVyLAotCQkJCQkJc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSwgNTAwKTsKKwkJbWVtc2V0KGZlYXR1cmVfYnVmZmVyLCAwLCBzaXplb2YoZmVhdHVyZV9idWZmZXIpKTsKKwkJLyogZmlsbCB0aGUgZmVhdHVyZV9idWZmZXIgd2l0aCBuZXcgY29uZmlndXJhdGlvbiAqLworCQkqKCh1X2ludDMyX3QgKilmZWF0dXJlX2J1ZmZlcikgPSBuZXdfYmF1ZHJhdGU7CisJCWZlYXR1cmVfYnVmZmVyWzRdIHw9IGRhdGFfYml0czsgICAvKiBhc3NpZ24gZGF0YSBiaXRzIGluIDIgYml0IHNwYWNlICggbWF4IDMgKSAqLworCQkvKiAxIGJpdCBnYXAgKi8KKwkJZmVhdHVyZV9idWZmZXJbNF0gfD0gKHN0b3BfYml0cyA8PCAzKTsgICAvKiBhc3NpZ24gc3RvcCBiaXRzIGluIDEgYml0IHNwYWNlICovCisJCWZlYXR1cmVfYnVmZmVyWzRdIHw9IChwYXJpdHlfZW5hYmxlIDw8IDQpOyAgIC8qIGFzc2lnbiBwYXJpdHkgZmxhZyBpbiAxIGJpdCBzcGFjZSAqLworCQlmZWF0dXJlX2J1ZmZlcls0XSB8PSAocGFyaXR5X3R5cGUgPDwgNSk7ICAgLyogYXNzaWduIHBhcml0eSB0eXBlIGluIDEgYml0IHNwYWNlICovCisJCS8qIDEgYml0IGdhcCAqLworCQlmZWF0dXJlX2J1ZmZlcls0XSB8PSAocmVzZXQgPDwgNyk7ICAgLyogYXNzaWduIHJlc2V0IGF0IGVuZCBvZiBieXRlLCAxIGJpdCBzcGFjZSAqLwogCi0JCQkJaWYgKHRyaWVzKysgPj0gMykKLQkJCQkJYnJlYWs7CisJCWRiZygiJXMgLSBkZXZpY2UgaXMgYmVpbmcgc2VudCB0aGlzIGZlYXR1cmUgcmVwb3J0OiIsCisJCQkJCQkJCV9fZnVuY19fKTsKKwkJZGJnKCIlcyAtICUwMlggLSAlMDJYIC0gJTAyWCAtICUwMlggLSAlMDJYIiwgX19mdW5jX18sCisJCQlmZWF0dXJlX2J1ZmZlclswXSwgZmVhdHVyZV9idWZmZXJbMV0sCisJCQlmZWF0dXJlX2J1ZmZlclsyXSwgZmVhdHVyZV9idWZmZXJbM10sCisJCQlmZWF0dXJlX2J1ZmZlcls0XSk7CiAKLQkJCX0gd2hpbGUgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpICYmCi0JCQkJIHJldHZhbCAhPSAtRU5PREVWKTsKKwkJZG8geworCQkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQl1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJCQlISURfUkVRX1NFVF9SRVBPUlQsCisJCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTLAorCQkJCQkweDAzMDAsIDAsIGZlYXR1cmVfYnVmZmVyLAorCQkJCQlzaXplb2YoZmVhdHVyZV9idWZmZXIpLCA1MDApOwogCi0JCQlpZiAocmV0dmFsICE9IHNpemVvZihmZWF0dXJlX2J1ZmZlcikpIHsKLQkJCQllcnIoIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsIF9fZnVuY19fLCByZXR2YWwpOwotCQkJCWN5cHJlc3Nfc2V0X2RlYWQocG9ydCk7Ci0JCQl9IGVsc2UgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQkJcHJpdi0+YmF1ZF9yYXRlID0gbmV3X2JhdWRyYXRlOwotCQkJCXByaXYtPmN1cnJlbnRfY29uZmlnID0gZmVhdHVyZV9idWZmZXJbNF07Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQkJCS8qIElmIHdlIGFza2VkIGZvciBhIHNwZWVkIGNoYW5nZSBlbmNvZGUgaXQgKi8KLQkJCQlpZiAoYmF1ZF9yYXRlKQotCQkJCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShwb3J0LT50dHksCi0JCQkJCQkJbmV3X2JhdWRyYXRlLCBuZXdfYmF1ZHJhdGUpOwotCQkJfQotCQlicmVhazsKLQkJY2FzZSBDWVBSRVNTX0dFVF9DT05GSUc6Ci0JCQlpZiAocHJpdi0+Z2V0X2NmZ191bnNhZmUpIHsKLQkJCQkvKiBOb3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZGV2aWNlLAotCQkJCSAgIGFuZCBpZiB3ZSB0cnkgdG8gZG8gaXQgd2UncmUgbGlrZWx5Ci0JCQkJICAgdG8gY3Jhc2ggdGhlIGhhcmR3YXJlLiAqLwotCQkJCXJldHVybiAtRU5PVFRZOwotCQkJfQotCQkJZGJnKCIlcyAtIHJldHJlaXZpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MiLCBfX2Z1bmNfXyk7Ci0JCQkvKiBzZXQgaW5pdGlhbCB2YWx1ZXMgaW4gZmVhdHVyZSBidWZmZXIgKi8KLQkJCW1lbXNldChmZWF0dXJlX2J1ZmZlciwgMCwgc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSk7CisJCQlpZiAodHJpZXMrKyA+PSAzKQorCQkJCWJyZWFrOwogCi0JCQlkbyB7Ci0JCQkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCQkJdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKLQkJCQkJCUhJRF9SRVFfR0VUX1JFUE9SVCwKLQkJCQkJCVVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MsCi0JCQkJCQkweDAzMDAsIDAsIGZlYXR1cmVfYnVmZmVyLAotCQkJCQkJc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSwgNTAwKTsKKwkJfSB3aGlsZSAocmV0dmFsICE9IHNpemVvZihmZWF0dXJlX2J1ZmZlcikgJiYKKwkJCSByZXR2YWwgIT0gLUVOT0RFVik7CiAKLQkJCQlpZiAodHJpZXMrKyA+PSAzKQotCQkJCQlicmVhazsKKwkJaWYgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpKSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsCisJCQkJCQkJX19mdW5jX18sIHJldHZhbCk7CisJCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOworCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXByaXYtPmJhdWRfcmF0ZSA9IG5ld19iYXVkcmF0ZTsKKwkJCXByaXYtPmN1cnJlbnRfY29uZmlnID0gZmVhdHVyZV9idWZmZXJbNF07CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQkvKiBJZiB3ZSBhc2tlZCBmb3IgYSBzcGVlZCBjaGFuZ2UgZW5jb2RlIGl0ICovCisJCQlpZiAoYmF1ZF9yYXRlKQorCQkJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwKKwkJCQkJbmV3X2JhdWRyYXRlLCBuZXdfYmF1ZHJhdGUpOworCQl9CisJYnJlYWs7CisJY2FzZSBDWVBSRVNTX0dFVF9DT05GSUc6CisJCWlmIChwcml2LT5nZXRfY2ZnX3Vuc2FmZSkgeworCQkJLyogTm90IGltcGxlbWVudGVkIGZvciB0aGlzIGRldmljZSwKKwkJCSAgIGFuZCBpZiB3ZSB0cnkgdG8gZG8gaXQgd2UncmUgbGlrZWx5CisJCQkgICB0byBjcmFzaCB0aGUgaGFyZHdhcmUuICovCisJCQlyZXR1cm4gLUVOT1RUWTsKKwkJfQorCQlkYmcoIiVzIC0gcmV0cmVpdmluZyBzZXJpYWwgbGluZSBzZXR0aW5ncyIsIF9fZnVuY19fKTsKKwkJLyogc2V0IGluaXRpYWwgdmFsdWVzIGluIGZlYXR1cmUgYnVmZmVyICovCisJCW1lbXNldChmZWF0dXJlX2J1ZmZlciwgMCwgc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSk7CiAKLQkJCX0gd2hpbGUgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpICYmCi0JCQkJIHJldHZhbCAhPSAtRU5PREVWKTsKKwkJZG8geworCQkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQl1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJCQlISURfUkVRX0dFVF9SRVBPUlQsCisJCQkJCVVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MsCisJCQkJCTB4MDMwMCwgMCwgZmVhdHVyZV9idWZmZXIsCisJCQkJCXNpemVvZihmZWF0dXJlX2J1ZmZlciksIDUwMCk7CiAKLQkJCWlmIChyZXR2YWwgIT0gc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSkgewotCQkJCWVycigiJXMgLSBmYWlsZWQgdG8gcmV0cmlldmUgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsIF9fZnVuY19fLCByZXR2YWwpOwotCQkJCWN5cHJlc3Nfc2V0X2RlYWQocG9ydCk7Ci0JCQkJcmV0dXJuIHJldHZhbDsKLQkJCX0gZWxzZSB7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCWlmICh0cmllcysrID49IDMpCisJCQkJYnJlYWs7CisJCX0gd2hpbGUgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpCisJCQkJCQkmJiByZXR2YWwgIT0gLUVOT0RFVik7CiAKLQkJCQkvKiBzdG9yZSB0aGUgY29uZmlnIGluIG9uZSBieXRlLCBhbmQgbGF0ZXIgdXNlIGJpdCBtYXNrcyB0byBjaGVjayB2YWx1ZXMgKi8KLQkJCQlwcml2LT5jdXJyZW50X2NvbmZpZyA9IGZlYXR1cmVfYnVmZmVyWzRdOwotCQkJCXByaXYtPmJhdWRfcmF0ZSA9ICooKHVfaW50MzJfdCAqKWZlYXR1cmVfYnVmZmVyKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQl9CisJCWlmIChyZXR2YWwgIT0gc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSkgeworCQkJZXJyKCIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgbGluZSBzZXR0aW5ncyAtICVkIiwgX19mdW5jX18sIHJldHZhbCk7CisJCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQkvKiBzdG9yZSB0aGUgY29uZmlnIGluIG9uZSBieXRlLCBhbmQgbGF0ZXIKKwkJCSAgIHVzZSBiaXQgbWFza3MgdG8gY2hlY2sgdmFsdWVzICovCisJCQlwcml2LT5jdXJyZW50X2NvbmZpZyA9IGZlYXR1cmVfYnVmZmVyWzRdOworCQkJcHJpdi0+YmF1ZF9yYXRlID0gKigodV9pbnQzMl90ICopZmVhdHVyZV9idWZmZXIpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQl9CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJKytwcml2LT5jbWRfY291bnQ7CkBAIC00NjgsMTQgKzQ4NiwxNCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLXN0YXRpYyBpbnQgZ2VuZXJpY19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBnZW5lcmljX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2OwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JcHJpdiA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY3lwcmVzc19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeXByZXNzX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC00ODcsOSArNTA1LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKLQkKLQl1c2JfcmVzZXRfY29uZmlndXJhdGlvbiAoc2VyaWFsLT5kZXYpOwotCQorCisJdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24oc2VyaWFsLT5kZXYpOworCiAJcHJpdi0+Y21kX2N0cmwgPSAwOwogCXByaXYtPmxpbmVfY29udHJvbCA9IDA7CiAJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDA7CkBAIC01MDAsMzAgKzUxOCwzMCBAQAogCSAgIHNtYWxsLiAgT3RoZXJ3aXNlIHdlIGNhbiB1c2UgdGhlIHNsaWdodGx5IG1vcmUgY29tcGFjdAogCSAgIGZvcm1hdC4gIFRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjeXByZXNzX204IHNlcmlhbAogCSAgIGNvbnZlcnRlciBhcHAgbm90ZS4gKi8KLQlpZiAocG9ydC0+aW50ZXJydXB0X291dF9zaXplID4gOSkgeworCWlmIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUgPiA5KQogCQlwcml2LT5wa3RfZm10ID0gcGFja2V0X2Zvcm1hdF8xOwotCX0gZWxzZSB7CisJZWxzZQogCQlwcml2LT5wa3RfZm10ID0gcGFja2V0X2Zvcm1hdF8yOwotCX0KKwogCWlmIChpbnRlcnZhbCA+IDApIHsKIAkJcHJpdi0+d3JpdGVfdXJiX2ludGVydmFsID0gaW50ZXJ2YWw7CiAJCXByaXYtPnJlYWRfdXJiX2ludGVydmFsID0gaW50ZXJ2YWw7CiAJCWRiZygiJXMgLSBwb3J0ICVkIHJlYWQgJiB3cml0ZSBpbnRlcnZhbHMgZm9yY2VkIHRvICVkIiwKLQkJICAgIF9fZnVuY19fLHBvcnQtPm51bWJlcixpbnRlcnZhbCk7CisJCSAgICBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBpbnRlcnZhbCk7CiAJfSBlbHNlIHsKIAkJcHJpdi0+d3JpdGVfdXJiX2ludGVydmFsID0gcG9ydC0+aW50ZXJydXB0X291dF91cmItPmludGVydmFsOwogCQlwcml2LT5yZWFkX3VyYl9pbnRlcnZhbCA9IHBvcnQtPmludGVycnVwdF9pbl91cmItPmludGVydmFsOwogCQlkYmcoIiVzIC0gcG9ydCAlZCBpbnRlcnZhbHM6IHJlYWQ9JWQgd3JpdGU9JWQiLAotCQkgICAgX19mdW5jX18scG9ydC0+bnVtYmVyLAotCQkgICAgcHJpdi0+cmVhZF91cmJfaW50ZXJ2YWwscHJpdi0+d3JpdGVfdXJiX2ludGVydmFsKTsKKwkJICAgIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsCisJCSAgICBwcml2LT5yZWFkX3VyYl9pbnRlcnZhbCwgcHJpdi0+d3JpdGVfdXJiX2ludGVydmFsKTsKIAl9CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCBjeXByZXNzX2VhcnRobWF0ZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBjeXByZXNzX2VhcnRobWF0ZV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOwpAQCAtNTQxLDcgKzU1OSw4IEBACiAJLyogQWxsIEVhcnRobWF0ZSBkZXZpY2VzIHVzZSB0aGUgc2VwYXJhdGVkLWNvdW50IHBhY2tldAogCSAgIGZvcm1hdCEgIElkaW90aWMuICovCiAJcHJpdi0+cGt0X2ZtdCA9IHBhY2tldF9mb3JtYXRfMTsKLQlpZiAoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICE9IGNwdV90b19sZTE2KFBST0RVQ1RfSURfRUFSVEhNQVRFVVNCKSkgeworCWlmIChzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgIT0KKwkJCQljcHVfdG9fbGUxNihQUk9EVUNUX0lEX0VBUlRITUFURVVTQikpIHsKIAkJLyogVGhlIG9sZCBvcmlnaW5hbCBVU0IgRWFydGhtYXRlIHNlZW1lZCBhYmxlIHRvCiAJCSAgIGhhbmRsZSBHRVRfQ09ORklHIHJlcXVlc3RzOyBldmVyeXRoaW5nIHRoZXkndmUKIAkJICAgcHJvZHVjZWQgc2luY2UgdGhhdCB0aW1lIGNyYXNoZXMgaWYgdGhpcyBjb21tYW5kIGlzCkBAIC01NTUsNyArNTc0LDcgQEAKIH0gLyogY3lwcmVzc19lYXJ0aG1hdGVfc3RhcnR1cCAqLwogCiAKLXN0YXRpYyBpbnQgY3lwcmVzc19oaWRjb21fc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQgY3lwcmVzc19oaWRjb21fc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CiAKQEAgLTU2OSwxMiArNTg4LDEyIEBACiAKIAlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CiAJcHJpdi0+Y2hpcHR5cGUgPSBDVF9DWVBISURDT007Ci0JCisKIAlyZXR1cm4gMDsKIH0gLyogY3lwcmVzc19oaWRjb21fc3RhcnR1cCAqLwogCiAKLXN0YXRpYyBpbnQgY3lwcmVzc19jYTQydjJfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQgY3lwcmVzc19jYTQydjJfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CiAKQEAgLTU5MywxMSArNjEyLDExIEBACiB9IC8qIGN5cHJlc3NfY2E0MnYyX3N0YXJ0dXAgKi8KIAogCi1zdGF0aWMgdm9pZCBjeXByZXNzX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgY3lwcmVzc19zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CiAKLQlkYmcgKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgc2VyaWFsLT5wb3J0WzBdLT5udW1iZXIpOworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKIAogCS8qIGFsbCBvcGVuIHBvcnRzIGFyZSBjbG9zZWQgYXQgdGhpcyBwb2ludCAqLwogCkBAIC02MTEsNyArNjMwLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGN5cHJlc3Nfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGN5cHJlc3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtNjM2LDM3ICs2NTYsNDQgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBzZXR0aW5nIHRvIHplcm8gY291bGQgY2F1c2UgZGF0YSBsb3NzICovCi0JcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKIAkvKiByYWlzZSBib3RoIGxpbmVzIGFuZCBzZXQgdGVybWlvcyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcHJpdi0+bGluZV9jb250cm9sID0gQ09OVFJPTF9EVFIgfCBDT05UUk9MX1JUUzsKIAlwcml2LT5jbWRfY3RybCA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJlc3VsdCA9IGN5cHJlc3Nfd3JpdGUocG9ydCwgTlVMTCwgMCk7CisJcmVzdWx0ID0gY3lwcmVzc193cml0ZSh0dHksIHBvcnQsIE5VTEwsIDApOwogCiAJaWYgKHJlc3VsdCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzZXR0aW5nIHRoZSBjb250cm9sIGxpbmVzIC0gZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc2V0dGluZyB0aGUgY29udHJvbCBsaW5lcyAtIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0gZWxzZQogCQlkYmcoIiVzIC0gc3VjY2VzcyBzZXR0aW5nIHRoZSBjb250cm9sIGxpbmVzIiwgX19mdW5jX18pOwogCi0JY3lwcmVzc19zZXRfdGVybWlvcyhwb3J0LCAmcHJpdi0+dG1wX3Rlcm1pb3MpOworCWlmICh0dHkpCisJCWN5cHJlc3Nfc2V0X3Rlcm1pb3ModHR5LCBwb3J0LCAmcHJpdi0+dG1wX3Rlcm1pb3MpOwogCiAJLyogc2V0dXAgdGhlIHBvcnQgYW5kIHN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCi0JaWYoIXBvcnQtPmludGVycnVwdF9pbl91cmIpeworCWlmICghcG9ydC0+aW50ZXJydXB0X2luX3VyYikgewogCQllcnIoIiVzIC0gaW50ZXJydXB0X2luX3VyYiBpcyBlbXB0eSEiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybigtMSk7CisJCXJldHVybiAtMTsKIAl9CiAKIAl1c2JfZmlsbF9pbnRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIHNlcmlhbC0+ZGV2LAogCQl1c2JfcmN2aW50cGlwZShzZXJpYWwtPmRldiwgcG9ydC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyksCi0JCXBvcnQtPmludGVycnVwdF9pbl91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAogCQljeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrLCBwb3J0LCBwcml2LT5yZWFkX3VyYl9pbnRlcnZhbCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAocmVzdWx0KXsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOwogCX0KIApAQCAtNjc0LDcgKzcwMSw4IEBACiB9IC8qIGN5cHJlc3Nfb3BlbiAqLwogCiAKLXN0YXRpYyB2b2lkIGN5cHJlc3NfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIHZvaWQgY3lwcmVzc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBpbnQgY19jZmxhZzsKQEAgLTY4OCw3ICs3MTYsNyBAQAogCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXRpbWVvdXQgPSBDWVBSRVNTX0NMT1NJTkdfV0FJVDsKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7Ci0JYWRkX3dhaXRfcXVldWUoJnBvcnQtPnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKIAlmb3IgKDs7KSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmIChjeXByZXNzX2J1Zl9kYXRhX2F2YWlsKHByaXYtPmJ1ZikgPT0gMApAQCAtNzAxLDcgKzcyOSw3IEBACiAJCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT50dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAJLyogY2xlYXIgb3V0IGFueSByZW1haW5pbmcgZGF0YSBpbiB0aGUgYnVmZmVyICovCiAJY3lwcmVzc19idWZfY2xlYXIocHJpdi0+YnVmKTsKIAlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwpAQCAtNzEzLDE5ICs3NDEsMjEgQEAKIAkJcmV0dXJuOwogCX0KIAkvKiB3YWl0IGZvciBjaGFyYWN0ZXJzIHRvIGRyYWluIGZyb20gZGV2aWNlICovCi0JYnBzID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KTsKLQlpZiAoYnBzID4gMTIwMCkKLQkJdGltZW91dCA9IG1heCgoSFoqMjU2MCkvYnBzLEhaLzEwKTsKLQllbHNlCi0JCXRpbWVvdXQgPSAyKkhaOwotCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lb3V0KTsKKwlpZiAodHR5KSB7CisJCWJwcyA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJCWlmIChicHMgPiAxMjAwKQorCQkJdGltZW91dCA9IG1heCgoSFogKiAyNTYwKSAvIGJwcywgSFogLyAxMCk7CisJCWVsc2UKKwkJCXRpbWVvdXQgPSAyICogSFo7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lb3V0KTsKKwl9CiAKIAlkYmcoIiVzIC0gc3RvcHBpbmcgdXJicyIsIF9fZnVuY19fKTsKLQl1c2Jfa2lsbF91cmIgKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwotCXVzYl9raWxsX3VyYiAocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIpOwogCi0JaWYgKHBvcnQtPnR0eSkgewotCQljX2NmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWlmICh0dHkpIHsKKwkJY19jZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAkJaWYgKGNfY2ZsYWcgJiBIVVBDTCkgewogCQkJLyogZHJvcCBkdHIgYW5kIHJ0cyAqLwogCQkJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTczMywyMiArNzYzLDIzIEBACiAJCQlwcml2LT5saW5lX2NvbnRyb2wgPSAwOwogCQkJcHJpdi0+Y21kX2N0cmwgPSAxOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQkJCWN5cHJlc3Nfd3JpdGUocG9ydCwgTlVMTCwgMCk7CisJCQljeXByZXNzX3dyaXRlKHR0eSwgcG9ydCwgTlVMTCwgMCk7CiAJCX0KIAl9CiAKIAlpZiAoc3RhdHMpCi0JCWRldl9pbmZvICgmcG9ydC0+ZGV2LCAiU3RhdGlzdGljczogJWQgQnl0ZXMgSW4gfCAlZCBCeXRlcyBPdXQgfCAlZCBDb21tYW5kcyBJc3N1ZWRcbiIsCi0JCSAgICAgICAgICBwcml2LT5ieXRlc19pbiwgcHJpdi0+Ynl0ZXNfb3V0LCBwcml2LT5jbWRfY291bnQpOworCQlkZXZfaW5mbygmcG9ydC0+ZGV2LCAiU3RhdGlzdGljczogJWQgQnl0ZXMgSW4gfCAlZCBCeXRlcyBPdXQgfCAlZCBDb21tYW5kcyBJc3N1ZWRcbiIsCisJCQlwcml2LT5ieXRlc19pbiwgcHJpdi0+Ynl0ZXNfb3V0LCBwcml2LT5jbWRfY291bnQpOwogCW11dGV4X3VubG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKIH0gLyogY3lwcmVzc19jbG9zZSAqLwogCiAKLXN0YXRpYyBpbnQgY3lwcmVzc193cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgY3lwcmVzc193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlkYmcoIiVzIC0gcG9ydCAlZCwgJWQgYnl0ZXMiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjb3VudCk7CiAKIAkvKiBsaW5lIGNvbnRyb2wgY29tbWFuZHMsIHdoaWNoIG5lZWQgdG8gYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHksCkBAIC03NTgsMTAgKzc4OSwxMCBAQAogCQljb3VudCA9IDA7CiAJCWdvdG8gZmluaXNoOwogCX0KLQkKKwogCWlmICghY291bnQpCiAJCXJldHVybiBjb3VudDsKLQkKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJY291bnQgPSBjeXByZXNzX2J1Zl9wdXQocHJpdi0+YnVmLCBidWYsIGNvdW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC03NzgsMTMgKzgwOSwxNCBAQAogCWludCBjb3VudCA9IDAsIHJlc3VsdCwgb2Zmc2V0LCBhY3R1YWxfc2l6ZTsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlpZiAoIXByaXYtPmNvbW1faXNfb2spCiAJCXJldHVybjsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JZGJnKCIlcyAtIGludGVycnVwdCBvdXQgc2l6ZSBpcyAlZCIsIF9fZnVuY19fLCBwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUpOwotCQorCWRiZygiJXMgLSBpbnRlcnJ1cHQgb3V0IHNpemUgaXMgJWQiLCBfX2Z1bmNfXywKKwkJCQkJCXBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWlmIChwcml2LT53cml0ZV91cmJfaW5fdXNlKSB7CiAJCWRiZygiJXMgLSBjYW4ndCB3cml0ZSwgdXJiIGluIHVzZSIsIF9fZnVuY19fKTsKQEAgLTc5NCw3ICs4MjYsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIGNsZWFyIGJ1ZmZlciAqLwotCW1lbXNldChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLCBwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUpOworCW1lbXNldChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLAorCQkJCQkJcG9ydC0+aW50ZXJydXB0X291dF9zaXplKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJc3dpdGNoIChwcml2LT5wa3RfZm10KSB7CkBAIC04MjUsOSArODU4LDggQEAKIAljb3VudCA9IGN5cHJlc3NfYnVmX2dldChwcml2LT5idWYsICZwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcltvZmZzZXRdLAogCQkJCXBvcnQtPmludGVycnVwdF9vdXRfc2l6ZS1vZmZzZXQpOwogCi0JaWYgKGNvdW50ID09IDApIHsKKwlpZiAoY291bnQgPT0gMCkKIAkJcmV0dXJuOwotCX0KIAogCXN3aXRjaCAocHJpdi0+cGt0X2ZtdCkgewogCWRlZmF1bHQ6CkBAIC04NTEsMjYgKzg4MywyOSBAQAogCQlhY3R1YWxfc2l6ZSA9IGNvdW50ICsKIAkJCSAgICAgIChwcml2LT5wa3RfZm10ID09IHBhY2tldF9mb3JtYXRfMSA/IDIgOiAxKTsKIAotCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIHBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSwKLQkJCSAgICAgIHBvcnQtPmludGVycnVwdF9vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCisJCXBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSwKKwkJcG9ydC0+aW50ZXJydXB0X291dF91cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKIAl1c2JfZmlsbF9pbnRfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKIAkJdXNiX3NuZGludHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmludGVycnVwdF9vdXRfZW5kcG9pbnRBZGRyZXNzKSwKIAkJcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIsIHBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSwKIAkJY3lwcmVzc193cml0ZV9pbnRfY2FsbGJhY2ssIHBvcnQsIHByaXYtPndyaXRlX3VyYl9pbnRlcnZhbCk7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPmludGVycnVwdF9vdXRfdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLAotCQkJcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCXByaXYtPndyaXRlX3VyYl9pbl91c2UgPSAwOwogCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKHByaXYtPmNtZF9jdHJsKSB7CisJaWYgKHByaXYtPmNtZF9jdHJsKQogCQlwcml2LT5jbWRfY3RybCA9IDA7Ci0JfQotCXByaXYtPmJ5dGVzX291dCArPSBjb3VudDsgLyogZG8gbm90IGNvdW50IHRoZSBsaW5lIGNvbnRyb2wgYW5kIHNpemUgYnl0ZXMgKi8KKworCS8qIGRvIG5vdCBjb3VudCB0aGUgbGluZSBjb250cm9sIGFuZCBzaXplIGJ5dGVzICovCisJcHJpdi0+Ynl0ZXNfb3V0ICs9IGNvdW50OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwpAQCAtODc4LDggKzkxMyw5IEBACiAKIAogLyogcmV0dXJucyBob3cgbXVjaCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIHNvZnQgYnVmZmVyICovCi1zdGF0aWMgaW50IGN5cHJlc3Nfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBjeXByZXNzX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCByb29tID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODk1LDEzICs5MzEsMTQgQEAKIH0KIAogCi1zdGF0aWMgaW50IGN5cHJlc3NfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBjeXByZXNzX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJX191OCBzdGF0dXMsIGNvbnRyb2w7CiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKKwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtOTIyLDEyICs5NTksMTMgQEAKIH0KIAogCi1zdGF0aWMgaW50IGN5cHJlc3NfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBjeXByZXNzX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTk0Miw2MyArOTgwLDYwIEBACiAJcHJpdi0+Y21kX2N0cmwgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiBjeXByZXNzX3dyaXRlKHBvcnQsIE5VTEwsIDApOworCXJldHVybiBjeXByZXNzX3dyaXRlKHR0eSwgcG9ydCwgTlVMTCwgMCk7CiB9CiAKIAotc3RhdGljIGludCBjeXByZXNzX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBjeXByZXNzX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCAweCUuNHgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQkJLyogVGhpcyBjb2RlIGNvbWVzIGZyb20gZHJpdmVycy9jaGFyL3NlcmlhbC5jIGFuZCBmdGRpX3Npby5jICovCi0JCWNhc2UgVElPQ01JV0FJVDoKLQkJCXdoaWxlIChwcml2ICE9IE5VTEwpIHsKLQkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7Ci0JCQkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLwotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJCQllbHNlIHsKLQkJCQkJY2hhciBkaWZmID0gcHJpdi0+ZGlmZl9zdGF0dXM7CisJLyogVGhpcyBjb2RlIGNvbWVzIGZyb20gZHJpdmVycy9jaGFyL3NlcmlhbC5jIGFuZCBmdGRpX3Npby5jICovCisJY2FzZSBUSU9DTUlXQUlUOgorCQl3aGlsZSAocHJpdiAhPSBOVUxMKSB7CisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCWVsc2UgeworCQkJCWNoYXIgZGlmZiA9IHByaXYtPmRpZmZfc3RhdHVzOworCQkJCWlmIChkaWZmID09IDApCisJCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KIAotCQkJCQlpZiAoZGlmZiA9PSAwKSB7Ci0JCQkJCQlyZXR1cm4gLUVJTzsgLyogbm8gY2hhbmdlID0+IGVycm9yICovCi0JCQkJCX0KLQkJCQkJCi0JCQkJCS8qIGNvbnN1bWUgYWxsIGV2ZW50cyAqLwotCQkJCQlwcml2LT5kaWZmX3N0YXR1cyA9IDA7CisJCQkJLyogY29uc3VtZSBhbGwgZXZlbnRzICovCisJCQkJcHJpdi0+ZGlmZl9zdGF0dXMgPSAwOwogCi0JCQkJCS8qIHJldHVybiAwIGlmIGNhbGxlciB3YW50ZWQgdG8ga25vdyBhYm91dCB0aGVzZSBiaXRzICovCi0JCQkJCWlmICggKChhcmcgJiBUSU9DTV9STkcpICYmIChkaWZmICYgVUFSVF9SSSkpIHx8Ci0JCQkJCSAgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChkaWZmICYgVUFSVF9EU1IpKSB8fAotCQkJCQkgICAgICgoYXJnICYgVElPQ01fQ0QpICYmIChkaWZmICYgVUFSVF9DRCkpIHx8Ci0JCQkJCSAgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChkaWZmICYgVUFSVF9DVFMpKSApIHsKLQkJCQkJCXJldHVybiAwOwotCQkJCQl9Ci0JCQkJCS8qIG90aGVyd2lzZSBjYWxsZXIgY2FuJ3QgY2FyZSBsZXNzIGFib3V0IHdoYXQgaGFwcGVuZWQsCi0JCQkJCSAqIGFuZCBzbyB3ZSBjb250aW51ZSB0byB3YWl0IGZvciBtb3JlIGV2ZW50cy4KLQkJCQkJICovCi0JCQkJfQorCQkJCS8qIHJldHVybiAwIGlmIGNhbGxlciB3YW50ZWQgdG8ga25vdyBhYm91dAorCQkJCSAgIHRoZXNlIGJpdHMgKi8KKwkJCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChkaWZmICYgVUFSVF9SSSkpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoZGlmZiAmIFVBUlRfRFNSKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgJiYgKGRpZmYgJiBVQVJUX0NEKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChkaWZmICYgVUFSVF9DVFMpKSkKKwkJCQkJcmV0dXJuIDA7CisJCQkJLyogb3RoZXJ3aXNlIGNhbGxlciBjYW4ndCBjYXJlIGxlc3MgYWJvdXQgd2hhdAorCQkJCSAqIGhhcHBlbmVkLCBhbmQgc28gd2UgY29udGludWUgdG8gd2FpdCBmb3IKKwkJCQkgKiBtb3JlIGV2ZW50cy4KKwkJCQkgKi8KIAkJCX0KLQkJCXJldHVybiAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9Ci0KIAlkYmcoIiVzIC0gYXJnIG5vdCBzdXBwb3J0ZWQgLSBpdCB3YXMgMHglMDR4IC0gY2hlY2sgaW5jbHVkZS9hc20vaW9jdGxzLmgiLCBfX2Z1bmNfXywgY21kKTsKLQogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9IC8qIGN5cHJlc3NfaW9jdGwgKi8KIAogCi1zdGF0aWMgdm9pZCBjeXByZXNzX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgY3lwcmVzc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBkYXRhX2JpdHMsIHN0b3BfYml0cywgcGFyaXR5X3R5cGUsIHBhcml0eV9lbmFibGU7CiAJdW5zaWduZWQgY2ZsYWcsIGlmbGFnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDA3LDggKzEwNDIsNiBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXR0eSA9IHBvcnQtPnR0eTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKCFwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkKSB7CiAJCWlmIChwcml2LT5jaGlwdHlwZSA9PSBDVF9FQVJUSE1BVEUpIHsKQEAgLTEwNjAsMjggKzEwOTMsMjQgQEAKIAl9IGVsc2UKIAkJcGFyaXR5X2VuYWJsZSA9IHBhcml0eV90eXBlID0gMDsKIAotCWlmIChjZmxhZyAmIENTSVpFKSB7Ci0JCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewotCQkJY2FzZSBDUzU6Ci0JCQkJZGF0YV9iaXRzID0gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ1M2OgotCQkJCWRhdGFfYml0cyA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENTNzoKLQkJCQlkYXRhX2JpdHMgPSAyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDUzg6Ci0JCQkJZGF0YV9iaXRzID0gMzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZXJyKCIlcyAtIENTSVpFIHdhcyBzZXQsIGJ1dCBub3QgQ1M1LUNTOCIsCi0JCQkJCQlfX2Z1bmNfXyk7Ci0JCQkJZGF0YV9iaXRzID0gMzsKLQkJfQotCX0gZWxzZQorCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M1OgorCQlkYXRhX2JpdHMgPSAwOworCQlicmVhazsKKwljYXNlIENTNjoKKwkJZGF0YV9iaXRzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCWRhdGFfYml0cyA9IDI7CisJCWJyZWFrOworCWNhc2UgQ1M4OgogCQlkYXRhX2JpdHMgPSAzOwotCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiJXMgLSBDU0laRSB3YXMgc2V0LCBidXQgbm90IENTNS1DUzgiLAorCQkJCV9fZnVuY19fKTsKKwkJZGF0YV9iaXRzID0gMzsKKwl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlvbGRsaW5lcyA9IHByaXYtPmxpbmVfY29udHJvbDsKIAlpZiAoKGNmbGFnICYgQ0JBVUQpID09IEIwKSB7CkBAIC0xMDk2LDE5ICsxMTI1LDIxIEBACiAJCQkiJWQgZGF0YV9iaXRzICgrNSkiLCBfX2Z1bmNfXywgc3RvcF9iaXRzLAogCQkJcGFyaXR5X2VuYWJsZSwgcGFyaXR5X3R5cGUsIGRhdGFfYml0cyk7CiAKLQljeXByZXNzX3NlcmlhbF9jb250cm9sKHBvcnQsIHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSksIGRhdGFfYml0cywgc3RvcF9iaXRzLAotCQkJcGFyaXR5X2VuYWJsZSwgcGFyaXR5X3R5cGUsIDAsIENZUFJFU1NfU0VUX0NPTkZJRyk7CisJY3lwcmVzc19zZXJpYWxfY29udHJvbCh0dHksIHBvcnQsIHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSksCisJCQlkYXRhX2JpdHMsIHN0b3BfYml0cywKKwkJCXBhcml0eV9lbmFibGUsIHBhcml0eV90eXBlLAorCQkJMCwgQ1lQUkVTU19TRVRfQ09ORklHKTsKIAogCS8qIHdlIHBlcmZvcm0gYSBDWVBSRVNTX0dFVF9DT05GSUcgc28gdGhhdCB0aGUgY3VycmVudCBzZXR0aW5ncyBhcmUKIAkgKiBmaWxsZWQgaW50byB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgdGhpcyBzaG91bGQgY29uZmlybSB0aGF0IGFsbCBpcwogCSAqIHdvcmtpbmcgaWYgaXQgcmV0dXJucyB3aGF0IHdlIGp1c3Qgc2V0ICovCi0JY3lwcmVzc19zZXJpYWxfY29udHJvbChwb3J0LCAwLCAwLCAwLCAwLCAwLCAwLCBDWVBSRVNTX0dFVF9DT05GSUcpOworCWN5cHJlc3Nfc2VyaWFsX2NvbnRyb2wodHR5LCBwb3J0LCAwLCAwLCAwLCAwLCAwLCAwLCBDWVBSRVNTX0dFVF9DT05GSUcpOwogCiAJLyogSGVyZSB3ZSBjYW4gZGVmaW5lIGN1c3RvbSB0dHkgc2V0dGluZ3MgZm9yIGRldmljZXM7IHRoZSBtYWluIHR0eQogCSAqIHRlcm1pb3MgZmxhZyBiYXNlIGNvbWVzIGZyb20gZW1wZWcuYyAqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIChwcml2LT5jaGlwdHlwZSA9PSBDVF9FQVJUSE1BVEUpICYmIChwcml2LT5iYXVkX3JhdGUgPT0gNDgwMCkgKSB7CisJaWYgKHByaXYtPmNoaXB0eXBlID09IENUX0VBUlRITUFURSAmJiBwcml2LT5iYXVkX3JhdGUgPT0gNDgwMCkgewogCQlkYmcoIlVzaW5nIGN1c3RvbSB0ZXJtaW9zIHNldHRpbmdzIGZvciBhIGJhdWQgcmF0ZSBvZiAiCiAJCQkJIjQ4MDBicHMuIik7CiAJCS8qIGRlZmluZSBjdXN0b20gdGVybWlvcyBzZXR0aW5ncyBmb3IgTk1FQSBwcm90b2NvbCAqLwpAQCAtMTE0MiwyMCArMTE3MywyMSBAQAogCS8qIGlmIG5lY2Vzc2FyeSwgc2V0IGxpbmVzICovCiAJaWYgKGxpbmVjaGFuZ2UpIHsKIAkJcHJpdi0+Y21kX2N0cmwgPSAxOwotCQljeXByZXNzX3dyaXRlKHBvcnQsIE5VTEwsIDApOworCQljeXByZXNzX3dyaXRlKHR0eSwgcG9ydCwgTlVMTCwgMCk7CiAJfQogfSAvKiBjeXByZXNzX3NldF90ZXJtaW9zICovCiAKIAogLyogcmV0dXJucyBhbW91bnQgb2YgZGF0YSBzdGlsbCBsZWZ0IGluIHNvZnQgYnVmZmVyICovCi1zdGF0aWMgaW50IGN5cHJlc3NfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IGN5cHJlc3NfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgY2hhcnMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAljaGFycyA9IGN5cHJlc3NfYnVmX2RhdGFfYXZhaWwocHJpdi0+YnVmKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0xMTY1LDggKzExOTcsOSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGN5cHJlc3NfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBjeXByZXNzX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMTc4LDggKzEyMTEsOSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGN5cHJlc3NfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGN5cHJlc3NfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IGFjdHVhbGx5X3Rocm90dGxlZCwgcmVzdWx0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMjMyLDEyICsxMjY2LDEzIEBACiAJCS8qIHByZWN1cnNvciB0byBkaXNjb25uZWN0IHNvIGp1c3QgZ28gYXdheSAqLwogCQlyZXR1cm47CiAJY2FzZSAtRVBJUEU6Ci0JCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LDB4ODEpOworCQl1c2JfY2xlYXJfaGFsdChwb3J0LT5zZXJpYWwtPmRldiwgMHg4MSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIHNvbWV0aGluZyB1Z2x5IGlzIGdvaW5nIG9uLi4uICovCi0JCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsIiVzIC0gdW5leHBlY3RlZCBub256ZXJvIHJlYWQgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIC0gdW5leHBlY3RlZCBub256ZXJvIHJlYWQgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKIAkJcmV0dXJuOwogCX0KQEAgLTEyNTEsNyArMTI4Niw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAoIXR0eSkgewogCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwpAQCAtMTI4NSw4ICsxMzIwLDggQEAKIAkJZ290byBjb250aW51ZV9yZWFkOwogCX0KIAotCXVzYl9zZXJpYWxfZGVidWdfZGF0YSAoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAotCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAorCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJLyogY2hlY2sgdG8gc2VlIGlmIHN0YXR1cyBoYXMgY2hhbmdlZCAqLwpAQCAtMTMyNyw3ICsxMzYyLDcgQEAKIAkJCQkJZGF0YVtpXSk7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIHR0eV9mbGFnKTsKIAkJfQotCQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT50dHkpOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5wb3J0LnR0eSk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTEzMzksMTMgKzEzNzQsMTQgQEAKIAogCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZC4uLiB1bmxlc3MgdGhlIHBvcnQgaGFzIGNsb3NlZC4gKi8KIAotCWlmIChwb3J0LT5vcGVuX2NvdW50ID4gMCAmJiBwcml2LT5jb21tX2lzX29rKSB7CisJaWYgKHBvcnQtPnBvcnQuY291bnQgPiAwICYmIHByaXYtPmNvbW1faXNfb2spIHsKIAkJdXNiX2ZpbGxfaW50X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKIAkJCQl1c2JfcmN2aW50cGlwZShwb3J0LT5zZXJpYWwtPmRldiwKIAkJCQkJcG9ydC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyksCiAJCQkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAogCQkJCXBvcnQtPmludGVycnVwdF9pbl91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjaywgcG9ydCwgcHJpdi0+cmVhZF91cmJfaW50ZXJ2YWwpOworCQkJCWN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsCisJCQkJcHJpdi0+cmVhZF91cmJfaW50ZXJ2YWwpOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewogCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyAiCkBAIC0xMzY5LDQyICsxNDA1LDQzIEBACiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXN3aXRjaCAoc3RhdHVzKSB7Ci0JCWNhc2UgMDoKLQkJCS8qIHN1Y2Nlc3MgKi8KKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKwkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKKwkJcmV0dXJuOworCWNhc2UgLUVQSVBFOiAvKiBubyBicmVhayBuZWVkZWQ7IGNsZWFyIGhhbHQgYW5kIHJlc3VibWl0ICovCisJCWlmICghcHJpdi0+Y29tbV9pc19vaykKIAkJCWJyZWFrOwotCQljYXNlIC1FQ09OTlJFU0VUOgotCQljYXNlIC1FTk9FTlQ6Ci0JCWNhc2UgLUVTSFVURE9XTjoKLQkJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKLQkJCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKLQkJCXByaXYtPndyaXRlX3VyYl9pbl91c2UgPSAwOworCQl1c2JfY2xlYXJfaGFsdChwb3J0LT5zZXJpYWwtPmRldiwgMHgwMik7CisJCS8qIGVycm9yIGluIHRoZSB1cmIsIHNvIHdlIGhhdmUgdG8gcmVzdWJtaXQgaXQgKi8KKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOworCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDE7CisJCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoIXJlc3VsdCkKIAkJCXJldHVybjsKLQkJY2FzZSAtRVBJUEU6IC8qIG5vIGJyZWFrIG5lZWRlZDsgY2xlYXIgaGFsdCBhbmQgcmVzdWJtaXQgKi8KLQkJCWlmICghcHJpdi0+Y29tbV9pc19vaykKLQkJCQlicmVhazsKLQkJCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LCAweDAyKTsKLQkJCS8qIGVycm9yIGluIHRoZSB1cmIsIHNvIHdlIGhhdmUgdG8gcmVzdWJtaXQgaXQgKi8KLQkJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCQkgICAgX19mdW5jX18sIHN0YXR1cyk7Ci0JCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDE7Ci0JCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIXJlc3VsdCkKLQkJCQlyZXR1cm47Ci0JCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCIlcyAtIHVuZXhwZWN0ZWQgbm9uemVybyB3cml0ZSBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAotCQkJCV9fZnVuY19fLCBzdGF0dXMpOwotCQkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKLQkJCWJyZWFrOworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJICIlcyAtIHVuZXhwZWN0ZWQgbm9uemVybyB3cml0ZSBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOworCQlicmVhazsKIAl9Ci0JCiAJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7Ci0JCisKIAkvKiBzZW5kIGFueSBidWZmZXJlZCBkYXRhICovCiAJY3lwcmVzc19zZW5kKHBvcnQpOwogfQpAQCAtMTQ4Niw3ICsxNTIzLDggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3lwcmVzc19idWZfZGF0YV9hdmFpbChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKQogewogCWlmIChjYiAhPSBOVUxMKQotCQlyZXR1cm4gKChjYi0+YnVmX3NpemUgKyBjYi0+YnVmX3B1dCAtIGNiLT5idWZfZ2V0KSAlIGNiLT5idWZfc2l6ZSk7CisJCXJldHVybiAoY2ItPmJ1Zl9zaXplICsgY2ItPmJ1Zl9wdXQgLSBjYi0+YnVmX2dldCkKKwkJCQkJCQklIGNiLT5idWZfc2l6ZTsKIAllbHNlCiAJCXJldHVybiAwOwogfQpAQCAtMTUwMiw3ICsxNTQwLDggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3lwcmVzc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGN5cHJlc3NfYnVmICpjYikKIHsKIAlpZiAoY2IgIT0gTlVMTCkKLQkJcmV0dXJuICgoY2ItPmJ1Zl9zaXplICsgY2ItPmJ1Zl9nZXQgLSBjYi0+YnVmX3B1dCAtIDEpICUgY2ItPmJ1Zl9zaXplKTsKKwkJcmV0dXJuIChjYi0+YnVmX3NpemUgKyBjYi0+YnVmX2dldCAtIGNiLT5idWZfcHV0IC0gMSkKKwkJCQkJCQklIGNiLT5idWZfc2l6ZTsKIAllbHNlCiAJCXJldHVybiAwOwogfQpAQCAtMTYwMiw5ICsxNjQxLDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IGN5cHJlc3NfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7Ci0JCisKIAlkYmcoIiVzIiwgX19mdW5jX18pOwotCQorCiAJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmY3lwcmVzc19lYXJ0aG1hdGVfZGV2aWNlKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF9lbV9yZWdpc3RlcjsKQEAgLTE2MzIsMjMgKzE2NzEsMjMgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBfX2V4aXQgY3lwcmVzc19leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGN5cHJlc3NfZXhpdCh2b2lkKQogewogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKLQl1c2JfZGVyZWdpc3RlciAoJmN5cHJlc3NfZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjeXByZXNzX2VhcnRobWF0ZV9kZXZpY2UpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmN5cHJlc3NfaGlkY29tX2RldmljZSk7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmY3lwcmVzc19jYTQydjJfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3lwcmVzc19lYXJ0aG1hdGVfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmN5cHJlc3NfaGlkY29tX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjeXByZXNzX2NhNDJ2Ml9kZXZpY2UpOwogfQogCiAKIG1vZHVsZV9pbml0KGN5cHJlc3NfaW5pdCk7CiBtb2R1bGVfZXhpdChjeXByZXNzX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7Ci1NT0RVTEVfVkVSU0lPTiggRFJJVkVSX1ZFUlNJT04gKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5oCmluZGV4IDAzODgwNjUuLmU3NzJiMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguaApAQCAtNTQsNyArNTQsNyBAQAogI2RlZmluZSBVQVJUX0RTUgkweDIwCS8qIGRhdGEgc2V0IHJlYWR5IC0gZmxvdyBjb250cm9sIC0gZGV2aWNlIHRvIGhvc3QgKi8KICNkZWZpbmUgQ09OVFJPTF9SVFMgCTB4MTAJLyogcmVxdWVzdCB0byBzZW5kIC0gZmxvdyBjb250cm9sIC0gaG9zdCB0byBkZXZpY2UgKi8KICNkZWZpbmUgVUFSVF9DVFMJMHgxMAkvKiBjbGVhciB0byBzZW5kIC0gZmxvdyBjb250cm9sIC0gZGV2aWNlIHRvIGhvc3QgKi8KLSNkZWZpbmUJVUFSVF9SSQkJMHgxMAkvKiByaW5nIGluZGljYXRvciAtIG1vZGVtIC0gZGV2aWNlIHRvIGhvc3QgKi8gCisjZGVmaW5lCVVBUlRfUkkJCTB4MTAJLyogcmluZyBpbmRpY2F0b3IgLSBtb2RlbSAtIGRldmljZSB0byBob3N0ICovCiAjZGVmaW5lIFVBUlRfQ0QJCTB4NDAJLyogY2FycmllciBkZXRlY3QgLSBtb2RlbSAtIGRldmljZSB0byBob3N0ICovCiAjZGVmaW5lIENZUF9FUlJPUiAJMHgwOAkvKiByZWNlaXZlZCBmcm9tIGlucHV0IHJlcG9ydCAtIGRldmljZSB0byBob3N0ICovCiAvKiBOb3RlIC0gdGhlIGJlbG93IGhhcyBub3RoaW5nIHRvIHRvIHdpdGggdGhlICJmZWF0dXJlIHJlcG9ydCIgcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwppbmRleCAwNGE1NmYzLi4yNDBhYWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC0xNSw3ICsxNSw3IEBACiAqICBBbCBCb3JjaGVycyAoYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKICogCiAqICgxMi8wMy8yMDAxKSBna2gKLSoJc3dpdGNoZWQgdG8gdXNpbmcgcG9ydC0+b3Blbl9jb3VudCBpbnN0ZWFkIG9mIHByaXZhdGUgdmVyc2lvbi4KKyoJc3dpdGNoZWQgdG8gdXNpbmcgcG9ydC0+cG9ydC5jb3VudCBpbnN0ZWFkIG9mIHByaXZhdGUgdmVyc2lvbi4KICoJUmVtb3ZlZCBwb3J0LT5hY3RpdmUKICoKICogKDA0LzA4LzIwMDEpIGdiCkBAIC0yMjksOCArMjI5LDYgQEAKICogICAgaW4gY2FzZSBhIHdha2UgdXAgaXMgbG9zdC4KICogIC0gRm9sbG93aW5nIERvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy5wZGYgbm8gc3BpbiBsb2NrcwogKiAgICBhcmUgaGVsZCB3aGVuIGNhbGxpbmcgY29weV90by9mcm9tX3VzZXIgb3IgcHJpbnRrLgotKiAgICAKLSogICRJZDogZGlnaV9hY2NlbGVwb3J0LmMsdiAxLjgwLjEuMiAyMDAwLzExLzAyIDA1OjQ1OjA4IHJvb3QgRXhwICQKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI0Myw3ICsyNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KQEAgLTQ0MywyMiArNDQxLDIzIEBACiAJdW5zaWduZWQgaW50IG1vZGVtX3NpZ25hbHMsIGludCBpbnRlcnJ1cHRpYmxlKTsKIHN0YXRpYyBpbnQgZGlnaV90cmFuc21pdF9pZGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKLXN0YXRpYyB2b2lkIGRpZ2lfcnhfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgZGlnaV9yeF91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIGRpZ2lfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKTsKLXN0YXRpYyB2b2lkIGRpZ2lfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSk7Ci1zdGF0aWMgaW50IGRpZ2lfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCi0JdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIGludCBkaWdpX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBpbnQgZGlnaV90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyB2b2lkIGRpZ2lfcnhfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBkaWdpX3J4X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBkaWdpX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgZGlnaV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgZGlnaV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IGRpZ2lfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKLXN0YXRpYyBpbnQgZGlnaV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50IGRpZ2lfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CiBzdGF0aWMgdm9pZCBkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyBpbnQgZGlnaV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCBkaWdpX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgZGlnaV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyB2b2lkIGRpZ2lfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBkaWdpX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50IGRpZ2lfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwlzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBkaWdpX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIGludCBkaWdpX3N0YXJ0dXBfZGV2aWNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCBkaWdpX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBkaWdpX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwpAQCAtNDg3LDcgKzQ4Niw3IEBACiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRpZ2lfZHJpdmVyID0gewogCS5uYW1lID0JCSJkaWdpX2FjY2VsZXBvcnQiLApAQCAtNTE4LDcgKzUxNyw2IEBACiAJLmNoYXJzX2luX2J1ZmZlciA9CQlkaWdpX2NoYXJzX2luX2J1ZmZlciwKIAkudGhyb3R0bGUgPQkJCWRpZ2lfcnhfdGhyb3R0bGUsCiAJLnVudGhyb3R0bGUgPQkJCWRpZ2lfcnhfdW50aHJvdHRsZSwKLQkuaW9jdGwgPQkJCWRpZ2lfaW9jdGwsCiAJLnNldF90ZXJtaW9zID0JCQlkaWdpX3NldF90ZXJtaW9zLAogCS5icmVha19jdGwgPQkJCWRpZ2lfYnJlYWtfY3RsLAogCS50aW9jbWdldCA9CQkJZGlnaV90aW9jbWdldCwKQEAgLTU0NSw3ICs1NDMsNiBAQAogCS5jaGFyc19pbl9idWZmZXIgPQkJZGlnaV9jaGFyc19pbl9idWZmZXIsCiAJLnRocm90dGxlID0JCQlkaWdpX3J4X3Rocm90dGxlLAogCS51bnRocm90dGxlID0JCQlkaWdpX3J4X3VudGhyb3R0bGUsCi0JLmlvY3RsID0JCQlkaWdpX2lvY3RsLAogCS5zZXRfdGVybWlvcyA9CQkJZGlnaV9zZXRfdGVybWlvcywKIAkuYnJlYWtfY3RsID0JCQlkaWdpX2JyZWFrX2N0bCwKIAkudGlvY21nZXQgPQkJCWRpZ2lfdGlvY21nZXQsCkBAIC01NTgsMjEgKzU1NSwyMiBAQAogLyogRnVuY3Rpb25zICovCiAKIC8qCi0qICBDb25kIFdhaXQgSW50ZXJydXB0aWJsZSBUaW1lb3V0IElycXJlc3RvcmUKLSoKLSogIERvIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgYW5kIGludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dAotKiAgc28gdGhhdCB3YWtlIHVwcyBhcmUgbm90IGxvc3QgaWYgdGhleSBvY2N1ciBiZXR3ZWVuIHRoZSB1bmxvY2sKLSogIGFuZCB0aGUgc2xlZXAuICBJbiBvdGhlciB3b3Jkcywgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSBhbmQKLSogIGludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCBhcmUgImF0b21pYyIgd2l0aCByZXNwZWN0IHRvCi0qICB3YWtlIHVwcy4gIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgY29uZGl0aW9uIHZhcmlhYmxlcy4KLSoKLSogIGludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCBpcyBkZXByZWNhdGVkIGFuZCBoYXMgYmVlbiByZXBsYWNlZAotKiAgd2l0aCB0aGUgZXF1aXZhbGVudCBjb2RlLgotKi8KKyAqICBDb25kIFdhaXQgSW50ZXJydXB0aWJsZSBUaW1lb3V0IElycXJlc3RvcmUKKyAqCisgKiAgRG8gc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSBhbmQgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0CisgKiAgc28gdGhhdCB3YWtlIHVwcyBhcmUgbm90IGxvc3QgaWYgdGhleSBvY2N1ciBiZXR3ZWVuIHRoZSB1bmxvY2sKKyAqICBhbmQgdGhlIHNsZWVwLiAgSW4gb3RoZXIgd29yZHMsIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgYW5kCisgKiAgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0IGFyZSAiYXRvbWljIiB3aXRoIHJlc3BlY3QgdG8KKyAqICB3YWtlIHVwcy4gIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgY29uZGl0aW9uIHZhcmlhYmxlcy4KKyAqCisgKiAgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0IGlzIGRlcHJlY2F0ZWQgYW5kIGhhcyBiZWVuIHJlcGxhY2VkCisgKiAgd2l0aCB0aGUgZXF1aXZhbGVudCBjb2RlLgorICovCiAKIHN0YXRpYyBsb25nIGNvbmRfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfaXJxcmVzdG9yZSgKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgbG9uZyB0aW1lb3V0LAogCXNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitfX3JlbGVhc2VzKGxvY2spCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAKQEAgLTU4NiwxNSArNTg0LDE2IEBACiAKIAogLyoKLSogIERpZ2kgV2FrZXVwIFdyaXRlCi0qCi0qICBXYWtlIHVwIHBvcnQsIGxpbmUgZGlzY2lwbGluZSwgYW5kIHR0eSBwcm9jZXNzZXMgc2xlZXBpbmcKLSogIG9uIHdyaXRlcy4KLSovCisgKiAgRGlnaSBXYWtldXAgV3JpdGUKKyAqCisgKiAgV2FrZSB1cCBwb3J0LCBsaW5lIGRpc2NpcGxpbmUsIGFuZCB0dHkgcHJvY2Vzc2VzIHNsZWVwaW5nCisgKiAgb24gd3JpdGVzLgorICovCiAKIHN0YXRpYyB2b2lkIGRpZ2lfd2FrZXVwX3dyaXRlX2xvY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRpZ2lfcG9ydCwgZHBfd2FrZXVwX3dvcmspOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPQorCQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkaWdpX3BvcnQsIGRwX3dha2V1cF93b3JrKTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gcHJpdi0+ZHBfcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC02MDUsMjAgKzYwNCwyMCBAQAogCiBzdGF0aWMgdm9pZCBkaWdpX3dha2V1cF93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewotCXR0eV93YWtldXAocG9ydC0+dHR5KTsKKwl0dHlfd2FrZXVwKHBvcnQtPnBvcnQudHR5KTsKIH0KIAogCiAvKgotKiAgRGlnaSBXcml0ZSBPT0IgQ29tbWFuZAotKgotKiAgV3JpdGUgY29tbWFuZHMgb24gdGhlIG91dCBvZiBiYW5kIHBvcnQuICBDb21tYW5kcyBhcmUgNAotKiAgYnl0ZXMgZWFjaCwgbXVsdGlwbGUgY29tbWFuZHMgY2FuIGJlIHNlbnQgYXQgb25jZSwgYW5kCi0qICBubyBjb21tYW5kIHdpbGwgYmUgc3BsaXQgYWNyb3NzIFVTQiBwYWNrZXRzLiAgUmV0dXJucyAwCi0qICBpZiBzdWNjZXNzZnVsLCAtRUlOVFIgaWYgaW50ZXJydXB0ZWQgd2hpbGUgc2xlZXBpbmcgYW5kCi0qICB0aGUgaW50ZXJydXB0aWJsZSBmbGFnIGlzIHRydWUsIG9yIGEgbmVnYXRpdmUgZXJyb3IKLSogIHJldHVybmVkIGJ5IHVzYl9zdWJtaXRfdXJiLgotKi8KKyAqICBEaWdpIFdyaXRlIE9PQiBDb21tYW5kCisgKgorICogIFdyaXRlIGNvbW1hbmRzIG9uIHRoZSBvdXQgb2YgYmFuZCBwb3J0LiAgQ29tbWFuZHMgYXJlIDQKKyAqICBieXRlcyBlYWNoLCBtdWx0aXBsZSBjb21tYW5kcyBjYW4gYmUgc2VudCBhdCBvbmNlLCBhbmQKKyAqICBubyBjb21tYW5kIHdpbGwgYmUgc3BsaXQgYWNyb3NzIFVTQiBwYWNrZXRzLiAgUmV0dXJucyAwCisgKiAgaWYgc3VjY2Vzc2Z1bCwgLUVJTlRSIGlmIGludGVycnVwdGVkIHdoaWxlIHNsZWVwaW5nIGFuZAorICogIHRoZSBpbnRlcnJ1cHRpYmxlIGZsYWcgaXMgdHJ1ZSwgb3IgYSBuZWdhdGl2ZSBlcnJvcgorICogIHJldHVybmVkIGJ5IHVzYl9zdWJtaXRfdXJiLgorICovCiAKIHN0YXRpYyBpbnQgZGlnaV93cml0ZV9vb2JfY29tbWFuZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50LCBpbnQgaW50ZXJydXB0aWJsZSkKQEAgLTYzMyw4ICs2MzIsOCBAQAogCWRiZygiZGlnaV93cml0ZV9vb2JfY29tbWFuZDogVE9QOiBwb3J0PSVkLCBjb3VudD0lZCIsIG9vYl9wcml2LT5kcF9wb3J0X251bSwgY291bnQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKLQl3aGlsZShjb3VudCA+IDApIHsKLQkJd2hpbGUob29iX3BvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJd2hpbGUgKG9vYl9wb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MKIAkJCXx8IG9vYl9wcml2LT5kcF93cml0ZV91cmJfaW5fdXNlKSB7CiAJCQljb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUoCiAJCQkJJm9vYl9wb3J0LT53cml0ZV93YWl0LCBESUdJX1JFVFJZX1RJTUVPVVQsCkBAIC02NTEsNyArNjUwLDggQEAKIAkJbWVtY3B5KG9vYl9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBsZW4pOwogCQlvb2JfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuOwogCQlvb2JfcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQkJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihvb2JfcG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihvb2JfcG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJldCA9PSAwKSB7CiAJCQlvb2JfcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDE7CiAJCQljb3VudCAtPSBsZW47CiAJCQlidWYgKz0gbGVuOwpAQCAtNjY2LDE2ICs2NjYsMTYgQEAKIAogCiAvKgotKiAgRGlnaSBXcml0ZSBJbiBCYW5kIENvbW1hbmQKLSoKLSogIFdyaXRlIGNvbW1hbmRzIG9uIHRoZSBnaXZlbiBwb3J0LiAgQ29tbWFuZHMgYXJlIDQKLSogIGJ5dGVzIGVhY2gsIG11bHRpcGxlIGNvbW1hbmRzIGNhbiBiZSBzZW50IGF0IG9uY2UsIGFuZAotKiAgbm8gY29tbWFuZCB3aWxsIGJlIHNwbGl0IGFjcm9zcyBVU0IgcGFja2V0cy4gIElmIHRpbWVvdXQKLSogIGlzIG5vbi16ZXJvLCB3cml0ZSBpbiBiYW5kIGNvbW1hbmQgd2lsbCByZXR1cm4gYWZ0ZXIKLSogIHdhaXRpbmcgdW5zdWNjZXNzZnVsbHkgZm9yIHRoZSBVUkIgc3RhdHVzIHRvIGNsZWFyIGZvcgotKiAgdGltZW91dCB0aWNrcy4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlCi0qICBlcnJvciByZXR1cm5lZCBieSBkaWdpX3dyaXRlLgotKi8KKyAqICBEaWdpIFdyaXRlIEluIEJhbmQgQ29tbWFuZAorICoKKyAqICBXcml0ZSBjb21tYW5kcyBvbiB0aGUgZ2l2ZW4gcG9ydC4gIENvbW1hbmRzIGFyZSA0CisgKiAgYnl0ZXMgZWFjaCwgbXVsdGlwbGUgY29tbWFuZHMgY2FuIGJlIHNlbnQgYXQgb25jZSwgYW5kCisgKiAgbm8gY29tbWFuZCB3aWxsIGJlIHNwbGl0IGFjcm9zcyBVU0IgcGFja2V0cy4gIElmIHRpbWVvdXQKKyAqICBpcyBub24temVybywgd3JpdGUgaW4gYmFuZCBjb21tYW5kIHdpbGwgcmV0dXJuIGFmdGVyCisgKiAgd2FpdGluZyB1bnN1Y2Nlc3NmdWxseSBmb3IgdGhlIFVSQiBzdGF0dXMgdG8gY2xlYXIgZm9yCisgKiAgdGltZW91dCB0aWNrcy4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlCisgKiAgZXJyb3IgcmV0dXJuZWQgYnkgZGlnaV93cml0ZS4KKyAqLwogCiBzdGF0aWMgaW50IGRpZ2lfd3JpdGVfaW5iX2NvbW1hbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAl1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQpAQCAtNjk1LDkgKzY5NSwxMCBAQAogCQl0aW1lb3V0ID0gVUxPTkdfTUFYOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwotCXdoaWxlKGNvdW50ID4gMCAmJiByZXQgPT0gMCkgewotCQl3aGlsZSgocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTCi0JCQl8fCBwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlKSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCXdoaWxlIChjb3VudCA+IDAgJiYgcmV0ID09IDApIHsKKwkJd2hpbGUgKChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MKKwkJCQl8fCBwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlKQorCQkJCQkmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJY29uZF93YWl0X2ludGVycnVwdGlibGVfdGltZW91dF9pcnFyZXN0b3JlKAogCQkJCSZwb3J0LT53cml0ZV93YWl0LCBESUdJX1JFVFJZX1RJTUVPVVQsCiAJCQkJJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwpAQCAtNzI4LDcgKzcyOSw4IEBACiAJCX0KIAkJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAotCQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJldCA9PSAwKSB7CiAJCQlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMTsKIAkJCXByaXYtPmRwX291dF9idWZfbGVuID0gMDsKIAkJCWNvdW50IC09IGxlbjsKQEAgLTc0NiwxNCArNzQ4LDE0IEBACiAKIAogLyoKLSogIERpZ2kgU2V0IE1vZGVtIFNpZ25hbHMKLSoKLSogIFNldHMgb3IgY2xlYXJzIERUUiBhbmQgUlRTIG9uIHRoZSBwb3J0LCBhY2NvcmRpbmcgdG8gdGhlCi0qICBtb2RlbV9zaWduYWxzIGFyZ3VtZW50LiAgVXNlIFRJT0NNX0RUUiBhbmQgVElPQ01fUlRTIGZsYWdzCi0qICBmb3IgdGhlIG1vZGVtX3NpZ25hbHMgYXJndW1lbnQuICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwKLSogIC1FSU5UUiBpZiBpbnRlcnJ1cHRlZCB3aGlsZSBzbGVlcGluZywgb3IgYSBub24temVybyBlcnJvcgotKiAgcmV0dXJuZWQgYnkgdXNiX3N1Ym1pdF91cmIuCi0qLworICogIERpZ2kgU2V0IE1vZGVtIFNpZ25hbHMKKyAqCisgKiAgU2V0cyBvciBjbGVhcnMgRFRSIGFuZCBSVFMgb24gdGhlIHBvcnQsIGFjY29yZGluZyB0byB0aGUKKyAqICBtb2RlbV9zaWduYWxzIGFyZ3VtZW50LiAgVXNlIFRJT0NNX0RUUiBhbmQgVElPQ01fUlRTIGZsYWdzCisgKiAgZm9yIHRoZSBtb2RlbV9zaWduYWxzIGFyZ3VtZW50LiAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgLUVJTlRSIGlmIGludGVycnVwdGVkIHdoaWxlIHNsZWVwaW5nLCBvciBhIG5vbi16ZXJvIGVycm9yCisgKiAgcmV0dXJuZWQgYnkgdXNiX3N1Ym1pdF91cmIuCisgKi8KIAogc3RhdGljIGludCBkaWdpX3NldF9tb2RlbV9zaWduYWxzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJdW5zaWduZWQgaW50IG1vZGVtX3NpZ25hbHMsIGludCBpbnRlcnJ1cHRpYmxlKQpAQCAtNzYxLDcgKzc2Myw3IEBACiAKIAlpbnQgcmV0OwogCXN0cnVjdCBkaWdpX3BvcnQgKnBvcnRfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpvb2JfcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopKChzdHJ1Y3QgZGlnaV9zZXJpYWwgKikodXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpKSktPmRzX29vYl9wb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKm9vYl9wb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgKChzdHJ1Y3QgZGlnaV9zZXJpYWwgKikodXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpKSktPmRzX29vYl9wb3J0OwogCXN0cnVjdCBkaWdpX3BvcnQgKm9vYl9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKG9vYl9wb3J0KTsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gb29iX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwpAQCAtNzczLDcgKzc3NSw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAlzcGluX2xvY2soJnBvcnRfcHJpdi0+ZHBfcG9ydF9sb2NrKTsKIAotCXdoaWxlKG9vYl9wb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgfHwgb29iX3ByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UpIHsKKwl3aGlsZSAob29iX3BvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUyB8fAorCQkJCQlvb2JfcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSkgewogCQlzcGluX3VubG9jaygmcG9ydF9wcml2LT5kcF9wb3J0X2xvY2spOwogCQljb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUoCiAJCQkmb29iX3BvcnQtPndyaXRlX3dhaXQsIERJR0lfUkVUUllfVElNRU9VVCwKQEAgLTc4NSwxNyArNzg4LDIwIEBACiAJfQogCWRhdGFbMF0gPSBESUdJX0NNRF9TRVRfRFRSX1NJR05BTDsKIAlkYXRhWzFdID0gcG9ydF9wcml2LT5kcF9wb3J0X251bTsKLQlkYXRhWzJdID0gKG1vZGVtX3NpZ25hbHMmVElPQ01fRFRSKSA/IERJR0lfRFRSX0FDVElWRSA6IERJR0lfRFRSX0lOQUNUSVZFOworCWRhdGFbMl0gPSAobW9kZW1fc2lnbmFscyAmIFRJT0NNX0RUUikgPworCQkJCQlESUdJX0RUUl9BQ1RJVkUgOiBESUdJX0RUUl9JTkFDVElWRTsKIAlkYXRhWzNdID0gMDsKIAlkYXRhWzRdID0gRElHSV9DTURfU0VUX1JUU19TSUdOQUw7CiAJZGF0YVs1XSA9IHBvcnRfcHJpdi0+ZHBfcG9ydF9udW07Ci0JZGF0YVs2XSA9IChtb2RlbV9zaWduYWxzJlRJT0NNX1JUUykgPyBESUdJX1JUU19BQ1RJVkUgOiBESUdJX1JUU19JTkFDVElWRTsKKwlkYXRhWzZdID0gKG1vZGVtX3NpZ25hbHMgJiBUSU9DTV9SVFMpID8KKwkJCQkJRElHSV9SVFNfQUNUSVZFIDogRElHSV9SVFNfSU5BQ1RJVkU7CiAJZGF0YVs3XSA9IDA7CiAKIAlvb2JfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gODsKIAlvb2JfcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAotCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIob29iX3BvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihvb2JfcG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0ID09IDApIHsKIAkJb29iX3ByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAxOwogCQlwb3J0X3ByaXYtPmRwX21vZGVtX3NpZ25hbHMgPQogCQkJKHBvcnRfcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyZ+KFRJT0NNX0RUUnxUSU9DTV9SVFMpKQpAQCAtODA5LDE2ICs4MTUsMTYgQEAKIH0KIAogLyoKLSogIERpZ2kgVHJhbnNtaXQgSWRsZQotKgotKiAgRGlnaSB0cmFuc21pdCBpZGxlIHdhaXRzLCB1cCB0byB0aW1lb3V0IHRpY2tzLCBmb3IgdGhlIHRyYW5zbWl0dGVyCi0qICB0byBnbyBpZGxlLiAgSXQgcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBuZWdhdGl2ZSBlcnJvci4KLSoKLSogIFRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgaGVyZSBpZiBtb3JlIHRoYW4gb25lIHByb2Nlc3MgaXMgY2FsbGluZwotKiAgZGlnaV90cmFuc21pdF9pZGxlIG9uIHRoZSBzYW1lIHBvcnQgYXQgdGhlIHNhbWUgdGltZS4gIEhvd2V2ZXIsIHRoaXMKLSogIGlzIG9ubHkgY2FsbGVkIGZyb20gY2xvc2UsIGFuZCBvbmx5IG9uZSBwcm9jZXNzIGNhbiBiZSBpbiBjbG9zZSBvbiBhCi0qICBwb3J0IGF0IGEgdGltZSwgc28gaXRzIG9rLgotKi8KKyAqICBEaWdpIFRyYW5zbWl0IElkbGUKKyAqCisgKiAgRGlnaSB0cmFuc21pdCBpZGxlIHdhaXRzLCB1cCB0byB0aW1lb3V0IHRpY2tzLCBmb3IgdGhlIHRyYW5zbWl0dGVyCisgKiAgdG8gZ28gaWRsZS4gIEl0IHJldHVybnMgMCBpZiBzdWNjZXNzZnVsIG9yIGEgbmVnYXRpdmUgZXJyb3IuCisgKgorICogIFRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgaGVyZSBpZiBtb3JlIHRoYW4gb25lIHByb2Nlc3MgaXMgY2FsbGluZworICogIGRpZ2lfdHJhbnNtaXRfaWRsZSBvbiB0aGUgc2FtZSBwb3J0IGF0IHRoZSBzYW1lIHRpbWUuICBIb3dldmVyLCB0aGlzCisgKiAgaXMgb25seSBjYWxsZWQgZnJvbSBjbG9zZSwgYW5kIG9ubHkgb25lIHByb2Nlc3MgY2FuIGJlIGluIGNsb3NlIG9uIGEKKyAqICBwb3J0IGF0IGEgdGltZSwgc28gaXRzIG9rLgorICovCiAKIHN0YXRpYyBpbnQgZGlnaV90cmFuc21pdF9pZGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0KQpAQCAtODM3LDEyICs4NDMsMTMgQEAKIAogCXRpbWVvdXQgKz0gamlmZmllczsKIAotCWlmICgocmV0ID0gZGlnaV93cml0ZV9pbmJfY29tbWFuZChwb3J0LCBidWYsIDIsIHRpbWVvdXQgLSBqaWZmaWVzKSkgIT0gMCkKKwlyZXQgPSBkaWdpX3dyaXRlX2luYl9jb21tYW5kKHBvcnQsIGJ1ZiwgMiwgdGltZW91dCAtIGppZmZpZXMpOworCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAotCXdoaWxlKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmICFwcml2LT5kcF90cmFuc21pdF9pZGxlKSB7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmICFwcml2LT5kcF90cmFuc21pdF9pZGxlKSB7CiAJCWNvbmRfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfaXJxcmVzdG9yZSgKIAkJCSZwcml2LT5kcF90cmFuc21pdF9pZGxlX3dhaXQsIERJR0lfUkVUUllfVElNRU9VVCwKIAkJCSZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKQEAgLTg1Nyw5ICs4NjQsMTAgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBkaWdpX3J4X3Rocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBkaWdpX3J4X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAKQEAgLTg3MywxMCArODgxLDExIEBACiB9CiAKIAotc3RhdGljIHZvaWQgZGlnaV9yeF91bnRocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBkaWdpX3J4X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlkYmcoImRpZ2lfcnhfdW50aHJvdHRsZTogVE9QOiBwb3J0PSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0pOwpAQCAtOTAxLDI2ICs5MTAsMjUgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBkaWdpX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBkaWdpX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0KIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CiAJdW5zaWduZWQgaW50IGlmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOwogCXVuc2lnbmVkIGludCBjZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAl1bnNpZ25lZCBpbnQgb2xkX2lmbGFnID0gb2xkX3Rlcm1pb3MtPmNfaWZsYWc7CiAJdW5zaWduZWQgaW50IG9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOwogCXVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKIAl1bnNpZ25lZCBpbnQgbW9kZW1fc2lnbmFsczsKLQlpbnQgYXJnLHJldDsKKwlpbnQgYXJnLCByZXQ7CiAJaW50IGkgPSAwOwogCXNwZWVkX3QgYmF1ZDsKIAogCWRiZygiZGlnaV9zZXRfdGVybWlvczogVE9QOiBwb3J0PSVkLCBpZmxhZz0weCV4LCBvbGRfaWZsYWc9MHgleCwgY2ZsYWc9MHgleCwgb2xkX2NmbGFnPTB4JXgiLCBwcml2LT5kcF9wb3J0X251bSwgaWZsYWcsIG9sZF9pZmxhZywgY2ZsYWcsIG9sZF9jZmxhZyk7CiAKIAkvKiBzZXQgYmF1ZCByYXRlICovCi0JaWYgKChiYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KSkgIT0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKSkgeworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWlmIChiYXVkICE9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcykpIHsKIAkJYXJnID0gLTE7CiAKIAkJLyogcmVhc3NlcnQgRFRSIGFuZCAobWF5YmUpIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KQEAgLTkzNCwzMCArOTQyLDMwIEBACiAJCQlkaWdpX3NldF9tb2RlbV9zaWduYWxzKHBvcnQsIG1vZGVtX3NpZ25hbHMsIDEpOwogCQl9CiAJCXN3aXRjaCAoYmF1ZCkgewotCQkJLyogZHJvcCBEVFIgYW5kIFJUUyBvbiB0cmFuc2l0aW9uIHRvIEIwICovCi0JCQljYXNlIDA6IGRpZ2lfc2V0X21vZGVtX3NpZ25hbHMocG9ydCwgMCwgMSk7IGJyZWFrOwotCQkJY2FzZSA1MDogYXJnID0gRElHSV9CQVVEXzUwOyBicmVhazsKLQkJCWNhc2UgNzU6IGFyZyA9IERJR0lfQkFVRF83NTsgYnJlYWs7Ci0JCQljYXNlIDExMDogYXJnID0gRElHSV9CQVVEXzExMDsgYnJlYWs7Ci0JCQljYXNlIDE1MDogYXJnID0gRElHSV9CQVVEXzE1MDsgYnJlYWs7Ci0JCQljYXNlIDIwMDogYXJnID0gRElHSV9CQVVEXzIwMDsgYnJlYWs7Ci0JCQljYXNlIDMwMDogYXJnID0gRElHSV9CQVVEXzMwMDsgYnJlYWs7Ci0JCQljYXNlIDYwMDogYXJnID0gRElHSV9CQVVEXzYwMDsgYnJlYWs7Ci0JCQljYXNlIDEyMDA6IGFyZyA9IERJR0lfQkFVRF8xMjAwOyBicmVhazsKLQkJCWNhc2UgMTgwMDogYXJnID0gRElHSV9CQVVEXzE4MDA7IGJyZWFrOwotCQkJY2FzZSAyNDAwOiBhcmcgPSBESUdJX0JBVURfMjQwMDsgYnJlYWs7Ci0JCQljYXNlIDQ4MDA6IGFyZyA9IERJR0lfQkFVRF80ODAwOyBicmVhazsKLQkJCWNhc2UgOTYwMDogYXJnID0gRElHSV9CQVVEXzk2MDA7IGJyZWFrOwotCQkJY2FzZSAxOTIwMDogYXJnID0gRElHSV9CQVVEXzE5MjAwOyBicmVhazsKLQkJCWNhc2UgMzg0MDA6IGFyZyA9IERJR0lfQkFVRF8zODQwMDsgYnJlYWs7Ci0JCQljYXNlIDU3NjAwOiBhcmcgPSBESUdJX0JBVURfNTc2MDA7IGJyZWFrOwotCQkJY2FzZSAxMTUyMDA6IGFyZyA9IERJR0lfQkFVRF8xMTUyMDA7IGJyZWFrOwotCQkJY2FzZSAyMzA0MDA6IGFyZyA9IERJR0lfQkFVRF8yMzA0MDA7IGJyZWFrOwotCQkJY2FzZSA0NjA4MDA6IGFyZyA9IERJR0lfQkFVRF80NjA4MDA7IGJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlhcmcgPSBESUdJX0JBVURfOTYwMDsKLQkJCQliYXVkID0gOTYwMDsKLQkJCQlicmVhazsKKwkJLyogZHJvcCBEVFIgYW5kIFJUUyBvbiB0cmFuc2l0aW9uIHRvIEIwICovCisJCWNhc2UgMDogZGlnaV9zZXRfbW9kZW1fc2lnbmFscyhwb3J0LCAwLCAxKTsgYnJlYWs7CisJCWNhc2UgNTA6IGFyZyA9IERJR0lfQkFVRF81MDsgYnJlYWs7CisJCWNhc2UgNzU6IGFyZyA9IERJR0lfQkFVRF83NTsgYnJlYWs7CisJCWNhc2UgMTEwOiBhcmcgPSBESUdJX0JBVURfMTEwOyBicmVhazsKKwkJY2FzZSAxNTA6IGFyZyA9IERJR0lfQkFVRF8xNTA7IGJyZWFrOworCQljYXNlIDIwMDogYXJnID0gRElHSV9CQVVEXzIwMDsgYnJlYWs7CisJCWNhc2UgMzAwOiBhcmcgPSBESUdJX0JBVURfMzAwOyBicmVhazsKKwkJY2FzZSA2MDA6IGFyZyA9IERJR0lfQkFVRF82MDA7IGJyZWFrOworCQljYXNlIDEyMDA6IGFyZyA9IERJR0lfQkFVRF8xMjAwOyBicmVhazsKKwkJY2FzZSAxODAwOiBhcmcgPSBESUdJX0JBVURfMTgwMDsgYnJlYWs7CisJCWNhc2UgMjQwMDogYXJnID0gRElHSV9CQVVEXzI0MDA7IGJyZWFrOworCQljYXNlIDQ4MDA6IGFyZyA9IERJR0lfQkFVRF80ODAwOyBicmVhazsKKwkJY2FzZSA5NjAwOiBhcmcgPSBESUdJX0JBVURfOTYwMDsgYnJlYWs7CisJCWNhc2UgMTkyMDA6IGFyZyA9IERJR0lfQkFVRF8xOTIwMDsgYnJlYWs7CisJCWNhc2UgMzg0MDA6IGFyZyA9IERJR0lfQkFVRF8zODQwMDsgYnJlYWs7CisJCWNhc2UgNTc2MDA6IGFyZyA9IERJR0lfQkFVRF81NzYwMDsgYnJlYWs7CisJCWNhc2UgMTE1MjAwOiBhcmcgPSBESUdJX0JBVURfMTE1MjAwOyBicmVhazsKKwkJY2FzZSAyMzA0MDA6IGFyZyA9IERJR0lfQkFVRF8yMzA0MDA7IGJyZWFrOworCQljYXNlIDQ2MDgwMDogYXJnID0gRElHSV9CQVVEXzQ2MDgwMDsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhcmcgPSBESUdJX0JBVURfOTYwMDsKKwkJCWJhdWQgPSA5NjAwOworCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGFyZyAhPSAtMSkgewogCQkJYnVmW2krK10gPSBESUdJX0NNRF9TRVRfQkFVRF9SQVRFOwpAQCAtMTA4MywxNCArMTA5MSwxNiBAQAogCQlidWZbaSsrXSA9IGFyZzsKIAkJYnVmW2krK10gPSAwOwogCX0KLQlpZiAoKHJldCA9IGRpZ2lfd3JpdGVfb29iX2NvbW1hbmQocG9ydCwgYnVmLCBpLCAxKSkgIT0gMCkKKwlyZXQgPSBkaWdpX3dyaXRlX29vYl9jb21tYW5kKHBvcnQsIGJ1ZiwgaSwgMSk7CisJaWYgKHJldCAhPSAwKQogCQlkYmcoImRpZ2lfc2V0X3Rlcm1pb3M6IHdyaXRlIG9vYiBmYWlsZWQsIHJldD0lZCIsIHJldCk7CiAJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBkaWdpX2JyZWFrX2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCitzdGF0aWMgdm9pZCBkaWdpX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgY2hhciBidWZbNF07CiAKIAlidWZbMF0gPSBESUdJX0NNRF9CUkVBS19DT05UUk9MOwpAQCAtMTEwMSw4ICsxMTExLDkgQEAKIH0KIAogCi1zdGF0aWMgaW50IGRpZ2lfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGRpZ2lfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTE2LDkgKzExMjcsMTAgQEAKIH0KIAogCi1zdGF0aWMgaW50IGRpZ2lfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGRpZ2lfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgaW50IHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTEzMiwzMCArMTE0NCwxMSBAQAogfQogCiAKLXN0YXRpYyBpbnQgZGlnaV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWRiZygiZGlnaV9pb2N0bDogVE9QOiBwb3J0PSVkLCBjbWQ9MHgleCIsIHByaXYtPmRwX3BvcnRfbnVtLCBjbWQpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFRJT0NNSVdBSVQ6Ci0JCS8qIHdhaXQgZm9yIGFueSBvZiB0aGUgNCBtb2RlbSBpbnB1dHMgKERDRCxSSSxEU1IsQ1RTKSovCi0JCS8qIFRPRE8gKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSBUSU9DR0lDT1VOVDoKLQkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLwotCQkvKiBUT0RPICovCi0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCi19Ci0KLXN0YXRpYyBpbnQgZGlnaV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgZGlnaV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAotCWludCByZXQsZGF0YV9sZW4sbmV3X2xlbjsKKwlpbnQgcmV0LCBkYXRhX2xlbiwgbmV3X2xlbjsKIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKQEAgLTExNzMsNyArMTE2Niw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCiAJLyogd2FpdCBmb3IgdXJiIHN0YXR1cyBjbGVhciB0byBzdWJtaXQgYW5vdGhlciB1cmIgKi8KLQlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTIHx8IHByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UpIHsKKwlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTIHx8CisJCQkJCXByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UpIHsKIAkJLyogYnVmZmVyIGRhdGEgaWYgY291bnQgaXMgMSAocHJvYmFibHkgcHV0X2NoYXIpIGlmIHBvc3NpYmxlICovCiAJCWlmIChjb3VudCA9PSAxICYmIHByaXYtPmRwX291dF9idWZfbGVuIDwgRElHSV9PVVRfQlVGX1NJWkUpIHsKIAkJCXByaXYtPmRwX291dF9idWZbcHJpdi0+ZHBfb3V0X2J1Zl9sZW4rK10gPSAqYnVmOwpAQCAtMTIwOCw3ICsxMjAyLDggQEAKIAkvKiBjb3B5IGluIG5ldyBkYXRhICovCiAJbWVtY3B5KGRhdGEsIGJ1ZiwgbmV3X2xlbik7CiAKLQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgPT0gMCkgewogCQlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMTsKIAkJcmV0ID0gbmV3X2xlbjsKIAkJcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPSAwOwpAQCAtMTIyMiw3ICsxMjE3LDcgQEAKIAlkYmcoImRpZ2lfd3JpdGU6IHJldHVybmluZyAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIAotfSAKK30KIAogc3RhdGljIHZvaWQgZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKQEAgLTEyMzcsMTMgKzEyMzIsMTMgQEAKIAlkYmcoImRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjazogVE9QLCB1cmItPnN0YXR1cz0lZCIsIHN0YXR1cyk7CiAKIAkvKiBwb3J0IGFuZCBzZXJpYWwgc2FuaXR5IGNoZWNrICovCi0JaWYgKHBvcnQgPT0gTlVMTCB8fCAocHJpdj11c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCkpID09IE5VTEwpIHsKKwlpZiAocG9ydCA9PSBOVUxMIHx8IChwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMKSB7CiAJCWVycigiJXM6IHBvcnQgb3IgcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLAogCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAJc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCWlmIChzZXJpYWwgPT0gTlVMTCB8fCAoc2VyaWFsX3ByaXY9dXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpKSA9PSBOVUxMKSB7CisJaWYgKHNlcmlhbCA9PSBOVUxMIHx8IChzZXJpYWxfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKSkgPT0gTlVMTCkgewogCQllcnIoIiVzOiBzZXJpYWwgb3Igc2VyaWFsLT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsCiAJCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuOwpAQCAtMTI2MiwxNyArMTI1NywxOSBAQAogCS8qIHRyeSB0byBzZW5kIGFueSBidWZmZXJlZCBkYXRhIG9uIHRoaXMgcG9ydCwgaWYgaXQgaXMgb3BlbiAqLwogCXNwaW5fbG9jaygmcHJpdi0+ZHBfcG9ydF9sb2NrKTsKIAlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMDsKLQlpZiAocG9ydC0+b3Blbl9jb3VudCAmJiBwb3J0LT53cml0ZV91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MKKwlpZiAocG9ydC0+cG9ydC5jb3VudCAmJiBwb3J0LT53cml0ZV91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MKIAkgICAgJiYgcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPiAwKSB7CiAJCSooKHVuc2lnbmVkIGNoYXIgKikocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpKQogCQkJPSAodW5zaWduZWQgY2hhcilESUdJX0NNRF9TRU5EX0RBVEE7Ci0JCSooKHVuc2lnbmVkIGNoYXIgKikocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpKzEpCisJCSooKHVuc2lnbmVkIGNoYXIgKikocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpICsgMSkKIAkJCT0gKHVuc2lnbmVkIGNoYXIpcHJpdi0+ZHBfb3V0X2J1Zl9sZW47Ci0JCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHByaXYtPmRwX291dF9idWZfbGVuKzI7CisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9CisJCQkJCQlwcml2LT5kcF9vdXRfYnVmX2xlbiArIDI7CiAJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7Ci0JCW1lbWNweShwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcisyLCBwcml2LT5kcF9vdXRfYnVmLAorCQltZW1jcHkocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgKyAyLCBwcml2LT5kcF9vdXRfYnVmLAogCQkJcHJpdi0+ZHBfb3V0X2J1Zl9sZW4pOwotCQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJldCA9PSAwKSB7CiAJCQlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMTsKIAkJCXByaXYtPmRwX291dF9idWZfbGVuID0gMDsKIAkJfQpAQCAtMTI4OSwxNiArMTI4NiwxNyBAQAogCQkJX19mdW5jX18sIHJldCwgcHJpdi0+ZHBfcG9ydF9udW0pOwogfQogCi1zdGF0aWMgaW50IGRpZ2lfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBkaWdpX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQotCWludCByb29tOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJvb207CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyk7CiAKLQlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTIHx8IHByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UpCisJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUyB8fAorCQkJCQlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlKQogCQlyb29tID0gMDsKIAllbHNlCiAJCXJvb20gPSBwb3J0LT5idWxrX291dF9zaXplIC0gMiAtIHByaXYtPmRwX291dF9idWZfbGVuOwpAQCAtMTMwOSwxMiArMTMwNywxMSBAQAogCiB9CiAKLXN0YXRpYyBpbnQgZGlnaV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgZGlnaV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQogCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MKIAkgICAgfHwgcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSkgewogCQlkYmcoImRpZ2lfY2hhcnNfaW5fYnVmZmVyOiBwb3J0PSVkLCBjaGFycz0lZCIsCkBAIC0xMzMwLDcgKzEzMjcsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgZGlnaV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKQEAgLTEzMzksNyArMTMzNyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKIAlkYmcoImRpZ2lfb3BlbjogVE9QOiBwb3J0PSVkLCBvcGVuX2NvdW50PSVkIiwKLQkJcHJpdi0+ZHBfcG9ydF9udW0sIHBvcnQtPm9wZW5fY291bnQpOworCQlwcml2LT5kcF9wb3J0X251bSwgcG9ydC0+cG9ydC5jb3VudCk7CiAKIAkvKiBiZSBzdXJlIHRoZSBkZXZpY2UgaXMgc3RhcnRlZCB1cCAqLwogCWlmIChkaWdpX3N0YXJ0dXBfZGV2aWNlKHBvcnQtPnNlcmlhbCkgIT0gMCkKQEAgLTEzNTQsNyArMTM1Miw3IEBACiAJfQogCiAJLyogd2FpdCBmb3IgYSBjbG9zZSBpbiBwcm9ncmVzcyB0byBmaW5pc2ggKi8KLQl3aGlsZShwcml2LT5kcF9pbl9jbG9zZSkgeworCXdoaWxlIChwcml2LT5kcF9pbl9jbG9zZSkgewogCQljb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUoCiAJCQkmcHJpdi0+ZHBfY2xvc2Vfd2FpdCwgRElHSV9SRVRSWV9USU1FT1VULAogCQkJJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwpAQCAtMTM2NCw3ICsxMzYyLDcgQEAKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKLSAKKwogCS8qIHJlYWQgbW9kZW0gc2lnbmFscyBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRoZXkgY2hhbmdlICovCiAJYnVmWzBdID0gRElHSV9DTURfUkVBRF9JTlBVVF9TSUdOQUxTOwogCWJ1ZlsxXSA9IHByaXYtPmRwX3BvcnRfbnVtOwpAQCAtMTM3NywxMyArMTM3NSwxNiBAQAogCWJ1Zls2XSA9IERJR0lfRkxVU0hfVFggfCBESUdJX0ZMVVNIX1JYOwogCWJ1Zls3XSA9IDA7CiAKLQlpZiAoKHJldCA9IGRpZ2lfd3JpdGVfb29iX2NvbW1hbmQocG9ydCwgYnVmLCA4LCAxKSkgIT0gMCkKKwlyZXQgPSBkaWdpX3dyaXRlX29vYl9jb21tYW5kKHBvcnQsIGJ1ZiwgOCwgMSk7CisJaWYgKHJldCAhPSAwKQogCQlkYmcoImRpZ2lfb3Blbjogd3JpdGUgb29iIGZhaWxlZCwgcmV0PSVkIiwgcmV0KTsKIAogCS8qIHNldCB0ZXJtaW9zIHNldHRpbmdzICovCi0Jbm90X3Rlcm1pb3MuY19jZmxhZyA9IH5wb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0Jbm90X3Rlcm1pb3MuY19pZmxhZyA9IH5wb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7Ci0JZGlnaV9zZXRfdGVybWlvcyhwb3J0LCAmbm90X3Rlcm1pb3MpOworCWlmICh0dHkpIHsKKwkJbm90X3Rlcm1pb3MuY19jZmxhZyA9IH50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJCW5vdF90ZXJtaW9zLmNfaWZsYWcgPSB+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCQlkaWdpX3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgJm5vdF90ZXJtaW9zKTsKKwl9CiAKIAkvKiBzZXQgRFRSIGFuZCBSVFMgKi8KIAlkaWdpX3NldF9tb2RlbV9zaWduYWxzKHBvcnQsIFRJT0NNX0RUUnxUSU9DTV9SVFMsIDEpOwpAQCAtMTM5MiwxNiArMTM5MywxNiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGRpZ2lfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBkaWdpX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlszMl07Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJZGJnKCJkaWdpX2Nsb3NlOiBUT1A6IHBvcnQ9JWQsIG9wZW5fY291bnQ9JWQiLAotCQlwcml2LT5kcF9wb3J0X251bSwgcG9ydC0+b3Blbl9jb3VudCk7CisJCXByaXYtPmRwX3BvcnRfbnVtLCBwb3J0LT5wb3J0LmNvdW50KTsKIAogCW11dGV4X2xvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7CiAJLyogaWYgZGlzY29ubmVjdGVkLCBqdXN0IGNsZWFyIGZsYWdzICovCkBAIC0xNDI2LDkgKzE0MjcsOCBAQAogCiAJaWYgKHBvcnQtPnNlcmlhbC0+ZGV2KSB7CiAJCS8qIHdhaXQgZm9yIHRyYW5zbWl0IGlkbGUgKi8KLQkJaWYgKChmaWxwLT5mX2ZsYWdzJihPX05ERUxBWXxPX05PTkJMT0NLKSkgPT0gMCkgeworCQlpZiAoKGZpbHAtPmZfZmxhZ3MmKE9fTkRFTEFZfE9fTk9OQkxPQ0spKSA9PSAwKQogCQkJZGlnaV90cmFuc21pdF9pZGxlKHBvcnQsIERJR0lfQ0xPU0VfVElNRU9VVCk7Ci0JCX0KIAkJLyogZHJvcCBEVFIgYW5kIFJUUyAqLwogCQlkaWdpX3NldF9tb2RlbV9zaWduYWxzKHBvcnQsIDAsIDApOwogCkBAIC0xNDYyLDExICsxNDYyLDEzIEBACiAJCWJ1ZlsxOF0gPSBESUdJX0ZMVVNIX1RYIHwgRElHSV9GTFVTSF9SWDsKIAkJYnVmWzE5XSA9IDA7CiAKLQkJaWYgKChyZXQgPSBkaWdpX3dyaXRlX29vYl9jb21tYW5kKHBvcnQsIGJ1ZiwgMjAsIDApKSAhPSAwKQorCQlyZXQgPSBkaWdpX3dyaXRlX29vYl9jb21tYW5kKHBvcnQsIGJ1ZiwgMjAsIDApOworCQlpZiAocmV0ICE9IDApCiAJCQlkYmcoImRpZ2lfY2xvc2U6IHdyaXRlIG9vYiBmYWlsZWQsIHJldD0lZCIsIHJldCk7CiAKIAkJLyogd2FpdCBmb3IgZmluYWwgY29tbWFuZHMgb24gb29iIHBvcnQgdG8gY29tcGxldGUgKi8KLQkJcHJlcGFyZV90b193YWl0KCZwcml2LT5kcF9mbHVzaF93YWl0LCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJcHJlcGFyZV90b193YWl0KCZwcml2LT5kcF9mbHVzaF93YWl0LCAmd2FpdCwKKwkJCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlzY2hlZHVsZV90aW1lb3V0KERJR0lfQ0xPU0VfVElNRU9VVCk7CiAJCWZpbmlzaF93YWl0KCZwcml2LT5kcF9mbHVzaF93YWl0LCAmd2FpdCk7CiAKQEAgLTE0ODYsMTUgKzE0ODgsMTUgQEAKIAogCiAvKgotKiAgRGlnaSBTdGFydHVwIERldmljZQotKgotKiAgU3RhcnRzIHJlYWRzIG9uIGFsbCBwb3J0cy4gIE11c3QgYmUgY2FsbGVkIEFGVEVSIHN0YXJ0dXAsIHdpdGgKLSogIHVyYnMgaW5pdGlhbGl6ZWQuICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgbm9uLXplcm8gZXJyb3Igb3RoZXJ3aXNlLgotKi8KKyAqICBEaWdpIFN0YXJ0dXAgRGV2aWNlCisgKgorICogIFN0YXJ0cyByZWFkcyBvbiBhbGwgcG9ydHMuICBNdXN0IGJlIGNhbGxlZCBBRlRFUiBzdGFydHVwLCB3aXRoCisgKiAgdXJicyBpbml0aWFsaXplZC4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBub24temVybyBlcnJvciBvdGhlcndpc2UuCisgKi8KIAogc3RhdGljIGludCBkaWdpX3N0YXJ0dXBfZGV2aWNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7Ci0JaW50IGkscmV0ID0gMDsKKwlpbnQgaSwgcmV0ID0gMDsKIAlzdHJ1Y3QgZGlnaV9zZXJpYWwgKnNlcmlhbF9wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAKQEAgLTE1MTIsNyArMTUxNCw4IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzICsgMTsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpKSAhPSAwKSB7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCAhPSAwKSB7CiAJCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsCiAJCQkJCV9fZnVuY19fLCByZXQsIGkpOwogCQkJYnJlYWs7CkBAIC0xNTMzLDcgKzE1MzYsNyBAQAogCiAJLyogYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhbGwgcG9ydHMgKi8KIAkvKiBudW1iZXIgb2YgcmVndWxhciBwb3J0cyArIDEgZm9yIHRoZSBvdXQtb2YtYmFuZCBwb3J0ICovCi0JZm9yKGkgPSAwOyBpIDwgc2VyaWFsLT50eXBlLT5udW1fcG9ydHMgKyAxOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT50eXBlLT5udW1fcG9ydHMgKyAxOyBpKyspIHsKIAkJLyogYWxsb2NhdGUgcG9ydCBwcml2YXRlIHN0cnVjdHVyZSAqLwogCQlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRpZ2lfcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAocHJpdiA9PSBOVUxMKSB7CkBAIC0xNTk2LDcgKzE1OTksNyBAQAogCiAJLyogZnJlZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGFsbCBwb3J0cyAqLwogCS8qIG51bWJlciBvZiByZWd1bGFyIHBvcnRzICsgMSBmb3IgdGhlIG91dC1vZi1iYW5kIHBvcnQgKi8KLQlmb3IoaSA9IDA7IGkgPCBzZXJpYWwtPnR5cGUtPm51bV9wb3J0cyArIDE7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT50eXBlLT5udW1fcG9ydHMgKyAxOyBpKyspCiAJCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pKTsKIAlrZnJlZSh1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCkpOwogfQpAQCAtMTYxOSw3ICsxNjIyLDcgQEAKIAkJcmV0dXJuOwogCX0KIAlpZiAocG9ydC0+c2VyaWFsID09IE5VTEwgfHwKLQkJKHNlcmlhbF9wcml2PXVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKSkgPT0gTlVMTCkgeworCQkoc2VyaWFsX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCkpID09IE5VTEwpIHsKIAkJZXJyKCIlczogc2VyaWFsIGlzIGJhZCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkIiwKIAkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CkBAIC0xNjQzLDQ1ICsxNjQ2LDQ2IEBACiAKIAkvKiBjb250aW51ZSByZWFkICovCiAJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgIT0gMCkgewogCQllcnIoIiVzOiBmYWlsZWQgcmVzdWJtaXR0aW5nIHVyYiwgcmV0PSVkLCBwb3J0PSVkIiwKIAkJICAgIF9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIAl9CiAKIH0KIAotLyogCi0qICBEaWdpIFJlYWQgSU5CIENhbGxiYWNrCi0qCi0qICBEaWdpIFJlYWQgSU5CIENhbGxiYWNrIGhhbmRsZXMgcmVhZHMgb24gdGhlIGluIGJhbmQgcG9ydHMsIHNlbmRpbmcKLSogIHRoZSBkYXRhIG9uIHRvIHRoZSB0dHkgc3Vic3lzdGVtLiAgV2hlbiBjYWxsZWQgd2Uga25vdyBwb3J0IGFuZAotKiAgcG9ydC0+cHJpdmF0ZSBhcmUgbm90IE5VTEwgYW5kIHBvcnQtPnNlcmlhbCBoYXMgYmVlbiB2YWxpZGF0ZWQuCi0qICBJdCByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgMSBpZiBzdWNjZXNzZnVsIGJ1dCB0aGUgcG9ydCBpcwotKiAgdGhyb3R0bGVkLCBhbmQgLTEgaWYgdGhlIHNhbml0eSBjaGVja3MgZmFpbGVkLgotKi8KKy8qCisgKiAgRGlnaSBSZWFkIElOQiBDYWxsYmFjaworICoKKyAqICBEaWdpIFJlYWQgSU5CIENhbGxiYWNrIGhhbmRsZXMgcmVhZHMgb24gdGhlIGluIGJhbmQgcG9ydHMsIHNlbmRpbmcKKyAqICB0aGUgZGF0YSBvbiB0byB0aGUgdHR5IHN1YnN5c3RlbS4gIFdoZW4gY2FsbGVkIHdlIGtub3cgcG9ydCBhbmQKKyAqICBwb3J0LT5wcml2YXRlIGFyZSBub3QgTlVMTCBhbmQgcG9ydC0+c2VyaWFsIGhhcyBiZWVuIHZhbGlkYXRlZC4KKyAqICBJdCByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgMSBpZiBzdWNjZXNzZnVsIGJ1dCB0aGUgcG9ydCBpcworICogIHRocm90dGxlZCwgYW5kIC0xIGlmIHRoZSBzYW5pdHkgY2hlY2tzIGZhaWxlZC4KKyAqLwogCiBzdGF0aWMgaW50IGRpZ2lfcmVhZF9pbmJfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBvcGNvZGUgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMF07CiAJaW50IGxlbiA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVsxXTsKIAlpbnQgcG9ydF9zdGF0dXMgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMl07Ci0JdW5zaWduZWQgY2hhciAqZGF0YSA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKSszOwotCWludCBmbGFnLHRocm90dGxlZDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpICsgMzsKKwlpbnQgZmxhZywgdGhyb3R0bGVkOwogCWludCBpOwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAogCS8qIGRvIG5vdCBwcm9jZXNzIGNhbGxiYWNrcyBvbiBjbG9zZWQgcG9ydHMgKi8KIAkvKiBidXQgZG8gY29udGludWUgdGhlIHJlYWQgY2hhaW4gKi8KLQlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAwKQorCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDApCiAJCXJldHVybiAwOwogCiAJLyogc2hvcnQvbXVsdGlwbGUgcGFja2V0IGNoZWNrICovCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSBsZW4gKyAyKSB7Ci0gICAgIAkJZXJyKCIlczogSU5DT01QTEVURSBPUiBNVUxUSVBMRSBQQUNLRVQsIHVyYi0+c3RhdHVzPSVkLCAiCisJCWVycigiJXM6IElOQ09NUExFVEUgT1IgTVVMVElQTEUgUEFDS0VULCB1cmItPnN0YXR1cz0lZCwgIgogCQkgICAgInBvcnQ9JWQsIG9wY29kZT0lZCwgbGVuPSVkLCBhY3R1YWxfbGVuZ3RoPSVkLCAiCiAJCSAgICAic3RhdHVzPSVkIiwgX19mdW5jX18sIHN0YXR1cywgcHJpdi0+ZHBfcG9ydF9udW0sCiAJCSAgICBvcGNvZGUsIGxlbiwgdXJiLT5hY3R1YWxfbGVuZ3RoLCBwb3J0X3N0YXR1cyk7CkBAIC0xNzIzLDggKzE3MjcsOSBAQAogCQkJaWYgKGZsYWcgPT0gVFRZX05PUk1BTCkKIAkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgbGVuKTsKIAkJCWVsc2UgewotCQkJCWZvcihpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIGZsYWcpOworCQkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAorCQkJCQkJCQlkYXRhW2ldLCBmbGFnKTsKIAkJCX0KIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCX0KQEAgLTE3MzYsMTkgKzE3NDEsMTkgQEAKIAllbHNlIGlmIChvcGNvZGUgIT0gRElHSV9DTURfUkVDRUlWRV9EQVRBKQogCQlkYmcoIiVzOiB1bmtub3duIG9wY29kZTogJWQiLCBfX2Z1bmNfXywgb3Bjb2RlKTsKIAotCXJldHVybih0aHJvdHRsZWQgPyAxIDogMCk7CisJcmV0dXJuIHRocm90dGxlZCA/IDEgOiAwOwogCiB9CiAKIAotLyogCi0qICBEaWdpIFJlYWQgT09CIENhbGxiYWNrCi0qCi0qICBEaWdpIFJlYWQgT09CIENhbGxiYWNrIGhhbmRsZXMgcmVhZHMgb24gdGhlIG91dCBvZiBiYW5kIHBvcnQuCi0qICBXaGVuIGNhbGxlZCB3ZSBrbm93IHBvcnQgYW5kIHBvcnQtPnByaXZhdGUgYXJlIG5vdCBOVUxMIGFuZAotKiAgdGhlIHBvcnQtPnNlcmlhbCBpcyB2YWxpZC4gIEl0IHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBhbmQKLSogIC0xIGlmIHRoZSBzYW5pdHkgY2hlY2tzIGZhaWxlZC4KLSovCisvKgorICogIERpZ2kgUmVhZCBPT0IgQ2FsbGJhY2sKKyAqCisgKiAgRGlnaSBSZWFkIE9PQiBDYWxsYmFjayBoYW5kbGVzIHJlYWRzIG9uIHRoZSBvdXQgb2YgYmFuZCBwb3J0LgorICogIFdoZW4gY2FsbGVkIHdlIGtub3cgcG9ydCBhbmQgcG9ydC0+cHJpdmF0ZSBhcmUgbm90IE5VTEwgYW5kCisgKiAgdGhlIHBvcnQtPnNlcmlhbCBpcyB2YWxpZC4gIEl0IHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBhbmQKKyAqICAtMSBpZiB0aGUgc2FuaXR5IGNoZWNrcyBmYWlsZWQuCisgKi8KIAogc3RhdGljIGludCBkaWdpX3JlYWRfb29iX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKQEAgLTE3NTgsMTIgKzE3NjMsMTMgQEAKIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBvcGNvZGUsIGxpbmUsIHN0YXR1cywgdmFsOwogCWludCBpOworCXVuc2lnbmVkIGludCBydHM7CiAKIAlkYmcoImRpZ2lfcmVhZF9vb2JfY2FsbGJhY2s6IHBvcnQ9JWQsIGxlbj0lZCIsCiAJCQlwcml2LT5kcF9wb3J0X251bSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAogCS8qIGhhbmRsZSBlYWNoIG9vYiBjb21tYW5kICovCi0JZm9yKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMzspIHsKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMzspIHsKIAkJb3Bjb2RlID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpW2krK107CiAJCWxpbmUgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbaSsrXTsKIAkJc3RhdHVzID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpW2krK107CkBAIC0xNzc3LDI3ICsxNzgzLDI5IEBACiAKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtsaW5lXTsKIAotCQlpZiAoKHByaXY9dXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMKQorCQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQlpZiAocHJpdiA9PSBOVUxMKQogCQkJcmV0dXJuIC0xOwogCisJCXJ0cyA9IDA7CisJCWlmIChwb3J0LT5wb3J0LmNvdW50KQorCQkJcnRzID0gcG9ydC0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTOworCiAJCWlmIChvcGNvZGUgPT0gRElHSV9DTURfUkVBRF9JTlBVVF9TSUdOQUxTKSB7CiAJCQlzcGluX2xvY2soJnByaXYtPmRwX3BvcnRfbG9jayk7CiAJCQkvKiBjb252ZXJ0IGZyb20gZGlnaSBmbGFncyB0byB0ZXJtaW94IGZsYWdzICovCiAJCQlpZiAodmFsICYgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfQ1RTKSB7CiAJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyB8PSBUSU9DTV9DVFM7CiAJCQkJLyogcG9ydCBtdXN0IGJlIG9wZW4gdG8gdXNlIHR0eSBzdHJ1Y3QgKi8KLQkJCQlpZiAocG9ydC0+b3Blbl9jb3VudAotCQkJCQkmJiBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0JCQkJCXBvcnQtPnR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQkJaWYgKHJ0cykgeworCQkJCQlwb3J0LT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDA7CiAJCQkJCWRpZ2lfd2FrZXVwX3dyaXRlKHBvcnQpOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmPSB+VElPQ01fQ1RTOwogCQkJCS8qIHBvcnQgbXVzdCBiZSBvcGVuIHRvIHVzZSB0dHkgc3RydWN0ICovCi0JCQkJaWYgKHBvcnQtPm9wZW5fY291bnQKLQkJCQkJJiYgcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgewotCQkJCQlwb3J0LT50dHktPmh3X3N0b3BwZWQgPSAxOwotCQkJCX0KKwkJCQlpZiAocnRzKQorCQkJCQlwb3J0LT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQl9CiAJCQlpZiAodmFsICYgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfRFNSKQogCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgfD0gVElPQ01fRFNSOwpAQCAtMTgzNCw3ICsxODQyLDcgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF9hY2NlbGVwb3J0XzJfZGV2aWNlOwogCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmRpZ2lfYWNjZWxlcG9ydF80X2RldmljZSk7Ci0JaWYgKHJldHZhbCkgCisJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfYWNjZWxlcG9ydF80X2RldmljZTsKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmRpZ2lfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYwppbmRleCBjNWVjMzA5Li5hNmFiNWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYwpAQCAtMTEsMzYgKzExLDM5IEBACiAgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkKICAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KICAqCi0gKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKLSAqIAorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMKKyAqIGRyaXZlcgorICoKICAqICgwNy8xNi8yMDAxKSBnYgotICoJcmVtb3ZlIHVudXNlZCBjb2RlIGluIGVtcGVnX2Nsb3NlKCkgKHRoYW5rcyB0byBPbGl2ZXIgTmV1a3VtIGZvciBwb2ludGluZyB0aGlzCi0gKglvdXQpIGFuZCByZXdyb3RlIGVtcGVnX3NldF90ZXJtaW9zKCkuCi0gKiAKKyAqCXJlbW92ZSB1bnVzZWQgY29kZSBpbiBlbXBlZ19jbG9zZSgpICh0aGFua3MgdG8gT2xpdmVyIE5ldWt1bSBmb3IKKyAqCXBvaW50aW5nIHRoaXMgb3V0KSBhbmQgcmV3cm90ZSBlbXBlZ19zZXRfdGVybWlvcygpLgorICoKICAqICgwNS8zMC8yMDAxKSBna2gKLSAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mCisgKiBwcm9ibGVtcy4KICAqCiAgKiAoMDQvMDgvMjAwMSkgZ2IKICAqICAgICAgSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KLSAqIAorICoKICAqICgwMS8yMi8yMDAxKSBnYgotICoJQWRkZWQgd3JpdGVfcm9vbSgpIGFuZCBjaGFyc19pbl9idWZmZXIoKSBzdXBwb3J0LiAKLSAqIAorICoJQWRkZWQgd3JpdGVfcm9vbSgpIGFuZCBjaGFyc19pbl9idWZmZXIoKSBzdXBwb3J0LgorICoKICAqICgxMi8yMS8yMDAwKSBnYgogICoJTW92ZWQgdGVybWlvIHN0dWZmIGluc2lkZSB0aGUgcG9ydC0+YWN0aXZlIGNoZWNrLgogICoJTW92ZWQgTU9EX0RFQ19VU0VfQ09VTlQgdG8gZW5kIG9mIGVtcGVnX2Nsb3NlKCkuCi0gKiAKKyAqCiAgKiAoMTIvMDMvMjAwMCkgZ2IKLSAqCUFkZGVkIHBvcnQtPnR0eS0+bGRpc2Muc2V0X3Rlcm1pb3MocG9ydC0+dHR5LCBOVUxMKSB0byBlbXBlZ19vcGVuKCkKLSAqCVRoaXMgbm90aWZpZXMgdGhlIHR0eSBkcml2ZXIgdGhhdCB0aGUgdGVybWlvcyBoYXZlIGNoYW5nZWQuCi0gKiAKKyAqCUFkZGVkIHBvcnQtPnBvcnQudHR5LT5sZGlzYy5zZXRfdGVybWlvcyhwb3J0LT5wb3J0LnR0eSwgTlVMTCkgdG8KKyAqCWVtcGVnX29wZW4oKS4gVGhpcyBub3RpZmllcyB0aGUgdHR5IGRyaXZlciB0aGF0IHRoZSB0ZXJtaW9zIGhhdmUKKyAqCWNoYW5nZWQuCisgKgogICogKDExLzEzLzIwMDApIGdiCi0gKglNb3ZlZCB0dHktPmxvd19sYXRlbmN5ID0gMSBmcm9tIGVtcGVnX3JlYWRfYnVsa19jYWxsYmFjaygpIHRvIGVtcGVnX29wZW4oKQotICoJKEl0IG9ubHkgbmVlZHMgdG8gYmUgc2V0IG9uY2UgLSBEb2ghKQotICogCisgKglNb3ZlZCB0dHktPmxvd19sYXRlbmN5ID0gMSBmcm9tIGVtcGVnX3JlYWRfYnVsa19jYWxsYmFjaygpIHRvCisgKgllbXBlZ19vcGVuKCkgKEl0IG9ubHkgbmVlZHMgdG8gYmUgc2V0IG9uY2UgLSBEb2ghKQorICoKICAqICgxMS8xMS8yMDAwKSBnYgogICoJVXBkYXRlZCB0byB3b3JrIHdpdGggaWRfdGFibGUgc3RydWN0dXJlLgotICogCisgKgogICogKDExLzA0LzIwMDApIGdiCiAgKglGb3JrZWQgdGhpcyBmcm9tIHZpc29yLmMsIGFuZCBoYWNrZWQgaXQgdXAgdG8gd29yayB3aXRoIGFuCiAgKglFbXBlZyBsdGQuIGVtcGVnLWNhciBwbGF5ZXIuICBDb25zdHJ1Y3RpdmUgY3JpdGljaXNtIHdlbGNvbWVkLgpAQCAtNDgsNyArNTEsNyBAQAogICoJdXNlIG9mIGhpcyBjb2RlLCBhbmQgZm9yIGhpcyBndWlkYW5jZSwgYWR2aWNlIGFuZCBwYXRpZW5jZS4gOikKICAqCUEgJ1RoYW5rIFlvdScgaXMgaW4gb3JkZXIgZm9yIEpvaG4gUmlwbGV5IG9mIEVtcGVnIGx0ZCBmb3IgaGlzCiAgKglhZHZpY2UsIGFuZCBwYXRpZW5jZSB0b28uCi0gKiAKKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNjAsNyArNjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAKQEAgLTc3LDMxICs4MCwzMCBAQAogI2RlZmluZSBFTVBFR19QUk9EVUNUX0lECQkweDAwMDEKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYW4gZW1wZWctY2FyIHBsYXllciAqLwotc3RhdGljIGludCAgZW1wZWdfb3BlbgkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBlbXBlZ19jbG9zZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgaW50ICBlbXBlZ193cml0ZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCi0JCQkJCWludCBjb3VudCk7Ci1zdGF0aWMgaW50ICBlbXBlZ193cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgaW50ICBlbXBlZ19jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgZW1wZWdfdGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIGVtcGVnX3VudGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgIGVtcGVnX3N0YXJ0dXAJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyB2b2lkIGVtcGVnX3NodXRkb3duCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICBlbXBlZ19pb2N0bAkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQlzdHJ1Y3QgZmlsZSAqIGZpbGUsCi0JCQkJCXVuc2lnbmVkIGludCBjbWQsCi0JCQkJCXVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyB2b2lkIGVtcGVnX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7Ci1zdGF0aWMgdm9pZCBlbXBlZ193cml0ZV9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCAgZW1wZWdfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkJc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgZW1wZWdfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGVtcGVnX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJCQlpbnQgY291bnQpOworc3RhdGljIGludCAgZW1wZWdfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgIGVtcGVnX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGVtcGVnX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQgZW1wZWdfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgIGVtcGVnX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBlbXBlZ19zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGVtcGVnX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgZW1wZWdfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoRU1QRUdfVkVORE9SX0lELCBFTVBFR19QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtcGVnX2RyaXZlciA9IHsKIAkubmFtZSA9CQkiZW1wZWciLApAQCAtMTI1LDcgKzEyNyw2IEBACiAJLnVudGhyb3R0bGUgPQkJZW1wZWdfdW50aHJvdHRsZSwKIAkuYXR0YWNoID0JCWVtcGVnX3N0YXJ0dXAsCiAJLnNodXRkb3duID0JCWVtcGVnX3NodXRkb3duLAotCS5pb2N0bCA9CQllbXBlZ19pb2N0bCwKIAkuc2V0X3Rlcm1pb3MgPQkJZW1wZWdfc2V0X3Rlcm1pb3MsCiAJLndyaXRlID0JCWVtcGVnX3dyaXRlLAogCS53cml0ZV9yb29tID0JCWVtcGVnX3dyaXRlX3Jvb20sCkBAIC0xNDUsNyArMTQ2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEVtcGVnIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGVtcGVnX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBlbXBlZ19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTE1Myw3ICsxNTUsNyBAQAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAkvKiBGb3JjZSBkZWZhdWx0IHRlcm1pbyBzZXR0aW5ncyAqLwotCWVtcGVnX3NldF90ZXJtaW9zIChwb3J0LCBOVUxMKSA7CisJZW1wZWdfc2V0X3Rlcm1pb3ModHR5LCBwb3J0LCBOVUxMKSA7CiAKIAlieXRlc19pbiA9IDA7CiAJYnl0ZXNfb3V0ID0gMDsKQEAgLTE2MSw3ICsxNjMsNyBAQAogCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCiAJdXNiX2ZpbGxfYnVsa191cmIoCiAJCXBvcnQtPnJlYWRfdXJiLAotCQlzZXJpYWwtPmRldiwgCisJCXNlcmlhbC0+ZGV2LAogCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCiAJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCiAJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCkBAIC0xNzIsMTMgKzE3NCwxNiBAQAogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAogCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogCi1zdGF0aWMgdm9pZCBlbXBlZ19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIHZvaWQgZW1wZWdfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCkBAIC0xODksNyArMTk0LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGVtcGVnX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgZW1wZWdfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgdXJiICp1cmI7CkBAIC0yMDMsMTEgKzIwOSwxMCBAQAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAl3aGlsZSAoY291bnQgPiAwKSB7Ci0KIAkJLyogdHJ5IHRvIGZpbmQgYSBmcmVlIHVyYiBpbiBvdXIgbGlzdCBvZiB0aGVtICovCiAJCXVyYiA9IE5VTEw7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CiAKIAkJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKIAkJCWlmICh3cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgewpAQCAtMjE2LDcgKzIyMSw3IEBACiAJCQl9CiAJCX0KIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKHVyYiA9PSBOVUxMKSB7CiAJCQlkYmcoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX2Z1bmNfXyk7CkBAIC0yMjQsMjUgKzIyOSwyNyBAQAogCQl9CiAKIAkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyAoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfQVRPTUlDKTsKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi5cbiIsIF9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi5cbiIsCisJCQkJCQkJCV9fZnVuY19fKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CiAJCX0KIAotCQl0cmFuc2Zlcl9zaXplID0gbWluIChjb3VudCwgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFKTsKKwkJdHJhbnNmZXJfc2l6ZSA9IG1pbihjb3VudCwgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFKTsKIAotCQltZW1jcHkgKHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBjdXJyZW50X3Bvc2l0aW9uLCB0cmFuc2Zlcl9zaXplKTsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBjdXJyZW50X3Bvc2l0aW9uLCB0cmFuc2Zlcl9zaXplKTsKIAogCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCB0cmFuc2Zlcl9zaXplLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKIAkJLyogYnVpbGQgdXAgb3VyIHVyYiAqLwotCQl1c2JfZmlsbF9idWxrX3VyYiAoCisJCXVzYl9maWxsX2J1bGtfdXJiKAogCQkJdXJiLAogCQkJc2VyaWFsLT5kZXYsCiAJCQl1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCi0JCQkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwgCisJCQkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCXRyYW5zZmVyX3NpemUsCiAJCQllbXBlZ193cml0ZV9idWxrX2NhbGxiYWNrLApAQCAtMjYyLDY2ICsyNjksNTcgQEAKIAkJYnl0ZXNfb3V0ICs9IHRyYW5zZmVyX3NpemU7CiAKIAl9Ci0KIGV4aXQ6CiAJcmV0dXJuIGJ5dGVzX3NlbnQ7Ci0KLX0gCit9CiAKIAotc3RhdGljIGludCBlbXBlZ193cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBlbXBlZ193cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAlpbnQgcm9vbSA9IDA7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7Ci0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOwogCS8qIHRhbGx5IHVwIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKLQkJaWYgKHdyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCWlmICh3cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKIAkJCXJvb20gKz0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOwotCQl9Ci0JfSAKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7Ci0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOwogCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIHJvb20pOwotCi0JcmV0dXJuIChyb29tKTsKKwlyZXR1cm4gcm9vbTsKIAogfQogCiAKLXN0YXRpYyBpbnQgZW1wZWdfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBlbXBlZ19jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCWludCBjaGFycyA9IDA7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKIAogCS8qIHRhbGx5IHVwIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2FpdGluZyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7Ci0JCWlmICh3cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlpZiAod3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCiAJCQljaGFycyArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7Ci0JCX0KIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOwotCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOwogCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIGNoYXJzKTsKLQotCXJldHVybiAoY2hhcnMpOwotCisJcmV0dXJuIGNoYXJzOwogfQogCiAKLXN0YXRpYyB2b2lkIGVtcGVnX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIGVtcGVnX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwpAQCAtMzM4LDcgKzMzNiw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCBlbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKQEAgLTM1NCw5ICszNTIsOSBAQAogCQlyZXR1cm47CiAJfQogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKLQotCXR0eSA9IHBvcnQtPnR0eTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAorCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtMzY4LDcgKzM2Niw3IEBACiAJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwogCXVzYl9maWxsX2J1bGtfdXJiKAogCQlwb3J0LT5yZWFkX3VyYiwKLQkJcG9ydC0+c2VyaWFsLT5kZXYsIAorCQlwb3J0LT5zZXJpYWwtPmRldiwKIAkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAogCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLApAQCAtMzc5LDM4ICszNzcsMzkgQEAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAKIAlpZiAocmVzdWx0KQotCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAogCXJldHVybjsKIAogfQogCiAKLXN0YXRpYyB2b2lkIGVtcGVnX3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgZW1wZWdfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CiB9CiAKIAotc3RhdGljIHZvaWQgZW1wZWdfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGVtcGVnX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcmVzdWx0OwotCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKLQogCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKLQotCXJldHVybjsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogfQogCiAKLXN0YXRpYyBpbnQgIGVtcGVnX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgaW50ICBlbXBlZ19zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IHI7CiAKQEAgLTQyMiw3ICs0MjEsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJZGJnKCIlcyAtIHJlc2V0IGNvbmZpZyIsIF9fZnVuY19fKTsKLQlyID0gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHNlcmlhbC0+ZGV2KTsKKwlyID0gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24oc2VyaWFsLT5kZXYpOwogCiAJLyogY29udGludWUgb24gd2l0aCBpbml0aWFsaXphdGlvbiAqLwogCXJldHVybiByOwpAQCAtNDMwLDM0ICs0MjksMjcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBlbXBlZ19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyB2b2lkIGVtcGVnX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7Ci0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIH0KIAogCi1zdGF0aWMgaW50IGVtcGVnX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIHZvaWQgZW1wZWdfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKLQlkYmcoIiVzIC0gcG9ydCAlZCwgY21kIDB4JS40eCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7Ci0KLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi0KLXN0YXRpYyB2b2lkIGVtcGVnX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQotewotCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcyA9IHBvcnQtPnR0eS0+dGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MgPSB0dHktPnRlcm1pb3M7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCS8qCi0gICAgICAgICAqIFRoZSBlbXBlZy1jYXIgcGxheWVyIHdhbnRzIHRoZXNlIHBhcnRpY3VsYXIgdHR5IHNldHRpbmdzLgotICAgICAgICAgKiBZb3UgY291bGQsIGZvciBleGFtcGxlLCBjaGFuZ2UgdGhlIGJhdWQgcmF0ZSwgaG93ZXZlciB0aGUKLSAgICAgICAgICogcGxheWVyIG9ubHkgc3VwcG9ydHMgMTE1MjAwIChjdXJyZW50bHkpLCBzbyB0aGVyZSBpcyByZWFsbHkKLSAgICAgICAgICogbm8gcG9pbnQgaW4gc3VwcG9ydCBmb3IgY2hhbmdlcyB0byB0aGUgdHR5IHNldHRpbmdzLgotICAgICAgICAgKiAoYXQgbGVhc3QgZm9yIG5vdykKLSAgICAgICAgICoKLSAgICAgICAgICogVGhlIGRlZmF1bHQgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGRldmljZSBhcmU6Ci0gICAgICAgICAqLworCSAqIFRoZSBlbXBlZy1jYXIgcGxheWVyIHdhbnRzIHRoZXNlIHBhcnRpY3VsYXIgdHR5IHNldHRpbmdzLgorCSAqIFlvdSBjb3VsZCwgZm9yIGV4YW1wbGUsIGNoYW5nZSB0aGUgYmF1ZCByYXRlLCBob3dldmVyIHRoZQorCSAqIHBsYXllciBvbmx5IHN1cHBvcnRzIDExNTIwMCAoY3VycmVudGx5KSwgc28gdGhlcmUgaXMgcmVhbGx5CisJICogbm8gcG9pbnQgaW4gc3VwcG9ydCBmb3IgY2hhbmdlcyB0byB0aGUgdHR5IHNldHRpbmdzLgorCSAqIChhdCBsZWFzdCBmb3Igbm93KQorCSAqCisJICogVGhlIGRlZmF1bHQgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGRldmljZSBhcmU6CisJICovCiAJdGVybWlvcy0+Y19pZmxhZwogCQkmPSB+KElHTkJSSwkvKiBkaXNhYmxlIGlnbm9yZSBicmVhayAqLwogCQl8IEJSS0lOVAkvKiBkaXNhYmxlIGJyZWFrIGNhdXNlcyBpbnRlcnJ1cHQgKi8KQEAgLTQ5MSwxOCArNDgzLDE4IEBACiAJICogdGhpcyBpcyBiYWQgYXMgaXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIGRyb3BwaW5nIGJ5dGVzCiAJICogb24gdGhlIGZsb29yLiAgV2UgZG9uJ3Qgd2FudCB0byBkcm9wIGJ5dGVzIG9uIHRoZSBmbG9vci4gOikKIAkgKi8KLQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKLQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShwb3J0LT50dHksIDExNTIwMCwgMTE1MjAwKTsKKwl0dHktPmxvd19sYXRlbmN5ID0gMTsKKwl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIDExNTIwMCwgMTE1MjAwKTsKIH0KIAogCi1zdGF0aWMgaW50IF9faW5pdCBlbXBlZ19pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZW1wZWdfaW5pdCh2b2lkKQogewogCXN0cnVjdCB1cmIgKnVyYjsKIAlpbnQgaSwgcmV0dmFsOwogCi0JLyogY3JlYXRlIG91ciB3cml0ZSB1cmIgcG9vbCBhbmQgdHJhbnNmZXIgYnVmZmVycyAqLyAKLQlzcGluX2xvY2tfaW5pdCAoJndyaXRlX3VyYl9wb29sX2xvY2spOworCS8qIGNyZWF0ZSBvdXIgd3JpdGUgdXJiIHBvb2wgYW5kIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KKwlzcGluX2xvY2tfaW5pdCgmd3JpdGVfdXJiX3Bvb2xfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKIAkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJd3JpdGVfdXJiX3Bvb2xbaV0gPSB1cmI7CkBAIC01MTEsOSArNTAzLDEwIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyAoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCWVycigiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLCAKKwkJCWVycigiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLAogCQkJICAgIF9fZnVuY19fKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC01NDIsMzYgKzUzNSwzNiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBlbXBlZ19leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGVtcGVnX2V4aXQodm9pZCkKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdXNiX2RlcmVnaXN0ZXIoJmVtcGVnX2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZW1wZWdfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVtcGVnX2RldmljZSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKIAkJaWYgKHdyaXRlX3VyYl9wb29sW2ldKSB7Ci0JCQkvKiBGSVhNRSAtIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIHVzYl9raWxsX3VyYiBjYWxsIHdoZW4KLQkJCSAqIHRoZSBob3N0IGNvbnRyb2xsZXJzIGdldCBmaXhlZCB0byBzZXQgdXJiLT5kZXYgPSBOVUxMIGFmdGVyCi0JCQkgKiB0aGUgdXJiIGlzIGZpbmlzaGVkLiAgT3RoZXJ3aXNlIHRoaXMgY2FsbCBvb3BzZXMuICovCisJCQkvKiBGSVhNRSAtIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIHVzYl9raWxsX3VyYiBjYWxsCisJCQkgKiB3aGVuIHRoZSBob3N0IGNvbnRyb2xsZXJzIGdldCBmaXhlZCB0byBzZXQgdXJiLT5kZXYKKwkJCSAqID0gTlVMTCBhZnRlciB0aGUgdXJiIGlzIGZpbmlzaGVkLiAgT3RoZXJ3aXNlIHRoaXMKKwkJCSAqIGNhbGwgb29wc2VzLiAqLwogCQkJLyogdXNiX2tpbGxfdXJiKHdyaXRlX3VyYl9wb29sW2ldKTsgKi8KIAkJCWtmcmVlKHdyaXRlX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpOwotCQkJdXNiX2ZyZWVfdXJiICh3cml0ZV91cmJfcG9vbFtpXSk7CisJCQl1c2JfZnJlZV91cmIod3JpdGVfdXJiX3Bvb2xbaV0pOwogCQl9CiAJfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CiB9CiAKIAogbW9kdWxlX2luaXQoZW1wZWdfaW5pdCk7CiBtb2R1bGVfZXhpdChlbXBlZ19leGl0KTsKIAotTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOwotTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwppbmRleCBjYzRmYmQ5Li43MTFlODRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwpAQCAtMjAsNyArMjAsOCBAQAogLyogRVotVVNCIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlci4gIEJpdCAwIGNvbnRyb2xzIDgwNTEgcmVzZXQgKi8KICNkZWZpbmUgQ1BVQ1NfUkVHICAgIDB4N0Y5MgogCi1pbnQgZXp1c2Jfd3JpdGVtZW1vcnkgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoLCBfX3U4IGJSZXF1ZXN0KQoraW50IGV6dXNiX3dyaXRlbWVtb3J5KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBhZGRyZXNzLAorCQkJCXVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgsIF9fdTggcmVxdWVzdCkKIHsKIAlpbnQgcmVzdWx0OwogCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKQEAgLTMzLDI2ICszNCwyNyBAQAogCiAJdHJhbnNmZXJfYnVmZmVyID0ga21lbWR1cChkYXRhLCBsZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7Ci0JCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fZnVuY19fLCBsZW5ndGgpOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLAorCQkJCQkJCV9fZnVuY19fLCBsZW5ndGgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgYlJlcXVlc3QsIDB4NDAsIGFkZHJlc3MsIDAsIHRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoLCAzMDAwKTsKLQlrZnJlZSAodHJhbnNmZXJfYnVmZmVyKTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCSAgICAgcmVxdWVzdCwgMHg0MCwgYWRkcmVzcywgMCwgdHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsIDMwMDApOworCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGV6dXNiX3dyaXRlbWVtb3J5KTsKIAotaW50IGV6dXNiX3NldF9yZXNldCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgY2hhciByZXNldF9iaXQpCitpbnQgZXp1c2Jfc2V0X3Jlc2V0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KQogewogCWludCByZXNwb25zZTsKIAogCS8qIGRiZygiJXMgLSAlZCIsIF9fZnVuY19fLCByZXNldF9iaXQpOyAqLwotCXJlc3BvbnNlID0gZXp1c2Jfd3JpdGVtZW1vcnkgKHNlcmlhbCwgQ1BVQ1NfUkVHLCAmcmVzZXRfYml0LCAxLCAweGEwKTsKKwlyZXNwb25zZSA9IGV6dXNiX3dyaXRlbWVtb3J5KHNlcmlhbCwgQ1BVQ1NfUkVHLCAmcmVzZXRfYml0LCAxLCAweGEwKTsKIAlpZiAocmVzcG9uc2UgPCAwKQotCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMtICVkIGZhaWxlZFxuIiwgX19mdW5jX18sIHJlc2V0X2JpdCk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcy0gJWQgZmFpbGVkXG4iLAorCQkJCQkJX19mdW5jX18sIHJlc2V0X2JpdCk7CiAJcmV0dXJuIHJlc3BvbnNlOwogfQotCi0KLUVYUE9SVF9TWU1CT0xfR1BMKGV6dXNiX3dyaXRlbWVtb3J5KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGV6dXNiX3NldF9yZXNldCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggMGZmNGEzOS4uODM4NzE3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTEyLDcgKzEyLDggQEAKICAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMKKyAqIGRyaXZlcgogICoKICAqIFNlZSBodHRwOi8vZnRkaS11c2Itc2lvLnNvdXJjZWZvcmdlLm5ldCBmb3IgdXB0byBkYXRlIHRlc3RpbmcgaW5mbwogICoJYW5kIGV4dHJhIGRvY3VtZW50YXRpb24KQEAgLTI1LDcgKzI2LDggQEAKIC8qIEJpbGwgUnlkZXIgLSBicnlkZXJAc2dpLmNvbSAtIHdyb3RlIHRoZSBGVERJX1NJTyBpbXBsZW1lbnRhdGlvbiAqLwogLyogVGhhbnggdG8gRlRESSBmb3Igc28ga2luZGx5IHByb3ZpZGluZyBkZXRhaWxzIG9mIHRoZSBwcm90b2NvbCByZXF1aXJlZCAqLwogLyogICB0byB0YWxrIHRvIHRoZSBkZXZpY2UgKi8KLS8qIFRoYW54IHRvIGdraCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHVzYiBkZXYgZ3JvdXAgZm9yIGFsbCBjb2RlIEkgaGF2ZSBhc3NpbWlsYXRlZCA6LSkgKi8KKy8qIFRoYW54IHRvIGdraCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHVzYiBkZXYgZ3JvdXAgZm9yIGFsbCBjb2RlIEkgaGF2ZQorICAgYXNzaW1pbGF0ZWQgOi0pICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMzYsNyArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CkBAIC01NSwxNyArNTcsMjIgQEAKIAogc3RydWN0IGZ0ZGlfcHJpdmF0ZSB7CiAJZnRkaV9jaGlwX3R5cGVfdCBjaGlwX3R5cGU7Ci0JCQkJLyogdHlwZSBvZiB0aGUgZGV2aWNlLCBlaXRoZXIgU0lPIG9yIEZUOFUyMzJBTSAqLworCQkJCS8qIHR5cGUgb2YgZGV2aWNlLCBlaXRoZXIgU0lPIG9yIEZUOFUyMzJBTSAqLwogCWludCBiYXVkX2Jhc2U7CQkvKiBiYXVkIGJhc2UgY2xvY2sgZm9yIGRpdmlzb3Igc2V0dGluZyAqLwotCWludCBjdXN0b21fZGl2aXNvcjsJLyogY3VzdG9tX2Rpdmlzb3Iga2x1ZGdlLCB0aGlzIGlzIGZvciBiYXVkX2Jhc2UgKGRpZmZlcmVudCBmcm9tIHdoYXQgZ29lcyB0byB0aGUgY2hpcCEpICovCisJaW50IGN1c3RvbV9kaXZpc29yOwkvKiBjdXN0b21fZGl2aXNvciBrbHVkZ2UsIHRoaXMgaXMgZm9yCisJCQkJICAgYmF1ZF9iYXNlIChkaWZmZXJlbnQgZnJvbSB3aGF0IGdvZXMgdG8gdGhlCisJCQkJICAgY2hpcCEpICovCiAJX191MTYgbGFzdF9zZXRfZGF0YV91cmJfdmFsdWUgOwotCQkJCS8qIHRoZSBsYXN0IGRhdGEgc3RhdGUgc2V0IC0gbmVlZGVkIGZvciBkb2luZyBhIGJyZWFrICovCi0gICAgICAgIGludCB3cml0ZV9vZmZzZXQ7ICAgICAgIC8qIFRoaXMgaXMgdGhlIG9mZnNldCBpbiB0aGUgdXNiIGRhdGEgYmxvY2sgdG8gd3JpdGUgdGhlIHNlcmlhbCBkYXRhIC0KLQkJCQkgKiBpdCBpcyBkaWZmZXJlbnQgYmV0d2VlbiBkZXZpY2VzCisJCQkJLyogdGhlIGxhc3QgZGF0YSBzdGF0ZSBzZXQgLSBuZWVkZWQgZm9yIGRvaW5nCisJCQkJICogYSBicmVhaworCQkJCSAqLworCWludCB3cml0ZV9vZmZzZXQ7ICAgICAgIC8qIFRoaXMgaXMgdGhlIG9mZnNldCBpbiB0aGUgdXNiIGRhdGEgYmxvY2sgdG8KKwkJCQkgKiB3cml0ZSB0aGUgc2VyaWFsIGRhdGEgLSBpdCB2YXJpZXMgYmV0d2VlbgorCQkJCSAqIGRldmljZXMKIAkJCQkgKi8KIAlpbnQgZmxhZ3M7CQkvKiBzb21lIEFTWU5DX3h4eHggZmxhZ3MgYXJlIHN1cHBvcnRlZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF9kdHJfcnRzOwkvKiBzYXZlZCBtb2RlbSBjb250cm9sIG91dHB1dHMgKi8KLSAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7IC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsgLyogVXNlZCBmb3IgVElPQ01JV0FJVCAqLwogCWNoYXIgcHJldl9zdGF0dXMsIGRpZmZfc3RhdHVzOyAgICAgICAgLyogVXNlZCBmb3IgVElPQ01JV0FJVCAqLwogCV9fdTggcnhfZmxhZ3M7CQkvKiByZWNlaXZlIHN0YXRlIGZsYWdzICh0aHJvdHRsaW5nKSAqLwogCXNwaW5sb2NrX3QgcnhfbG9jazsJLyogc3BpbmxvY2sgZm9yIHJlY2VpdmUgc3RhdGUgKi8KQEAgLTc2LDggKzgzLDEwIEBACiAKIAlfX3UxNiBpbnRlcmZhY2U7CS8qIEZUMjIzMkMgcG9ydCBpbnRlcmZhY2UgKDAgZm9yIEZUMjMyLzI0NSkgKi8KIAotCXNwZWVkX3QgZm9yY2VfYmF1ZDsJLyogaWYgbm9uLXplcm8sIGZvcmNlIHRoZSBiYXVkIHJhdGUgdG8gdGhpcyB2YWx1ZSAqLwotCWludCBmb3JjZV9ydHNjdHM7CS8qIGlmIG5vbi16ZXJvLCBmb3JjZSBSVFMtQ1RTIHRvIGFsd2F5cyBiZSBlbmFibGVkICovCisJc3BlZWRfdCBmb3JjZV9iYXVkOwkvKiBpZiBub24temVybywgZm9yY2UgdGhlIGJhdWQgcmF0ZSB0bworCQkJCSAgIHRoaXMgdmFsdWUgKi8KKwlpbnQgZm9yY2VfcnRzY3RzOwkvKiBpZiBub24temVybywgZm9yY2UgUlRTLUNUUyB0byBhbHdheXMKKwkJCQkgICBiZSBlbmFibGVkICovCiAKIAlzcGlubG9ja190IHR4X2xvY2s7CS8qIHNwaW5sb2NrIGZvciB0cmFuc21pdCBzdGF0ZSAqLwogCXVuc2lnbmVkIGxvbmcgdHhfYnl0ZXM7CkBAIC04OCwxMyArOTcsMTQgQEAKIC8qIHN0cnVjdCBmdGRpX3Npb19xdWlyayBpcyB1c2VkIGJ5IGRldmljZXMgcmVxdWlyaW5nIHNwZWNpYWwgYXR0ZW50aW9uLiAqLwogc3RydWN0IGZ0ZGlfc2lvX3F1aXJrIHsKIAlpbnQgKCpwcm9iZSkoc3RydWN0IHVzYl9zZXJpYWwgKik7Ci0Jdm9pZCAoKnBvcnRfcHJvYmUpKHN0cnVjdCBmdGRpX3ByaXZhdGUgKik7IC8qIFNwZWNpYWwgc2V0dGluZ3MgZm9yIHByb2JlZCBwb3J0cy4gKi8KKwkvKiBTcGVjaWFsIHNldHRpbmdzIGZvciBwcm9iZWQgcG9ydHMuICovCisJdm9pZCAoKnBvcnRfcHJvYmUpKHN0cnVjdCBmdGRpX3ByaXZhdGUgKik7CiB9OwogCi1zdGF0aWMgaW50ICAgZnRkaV9qdGFnX3Byb2JlCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICAgZnRkaV9tdHhvcmJfaGFja19zZXR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgdm9pZCAgZnRkaV9VU0JfVUlSVF9zZXR1cAkoc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdik7Ci1zdGF0aWMgdm9pZCAgZnRkaV9IRV9USVJBMV9zZXR1cAkoc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdik7CitzdGF0aWMgaW50ICAgZnRkaV9qdGFnX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgIGZ0ZGlfbXR4b3JiX2hhY2tfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCAgZnRkaV9VU0JfVUlSVF9zZXR1cChzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2KTsKK3N0YXRpYyB2b2lkICBmdGRpX0hFX1RJUkExX3NldHVwKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpOwogCiBzdGF0aWMgc3RydWN0IGZ0ZGlfc2lvX3F1aXJrIGZ0ZGlfanRhZ19xdWlyayA9IHsKIAkucHJvYmUJPSBmdGRpX2p0YWdfcHJvYmUsCkBAIC0xNzQsMjcwICsxODQsMjcwIEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX01UWE9SQl80X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfTVRYT1JCXzVfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NVFhPUkJfNl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwMF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwMV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwMl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwM19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwNF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwNV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwNl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwN19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwOF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwOV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwQV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwQl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwQ19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwRF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwRV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEwRl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExMF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExMV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExMl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExM19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExNF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExNV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExNl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExN19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExOF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExOV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExQV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExQl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExQ19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExRF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExRV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDExRl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyMF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyMV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyMl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyM19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyNF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyNV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyNl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyN19QSUQpLAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTAwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEwMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMDJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTAzX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEwNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMDVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTA2X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEwN19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMDhfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTA5X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEwQV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMEJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTBDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEwRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMEVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTBGX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDExMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMTFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTEyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDExM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMTRfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTE1X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDExNl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMTdfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTE4X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDExOV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMUFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTFCX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDExQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMURfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTFFX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDExRl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMjBfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTIxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEyMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMjNfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTI0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEyNV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMjZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTI3X1BJRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9tdHhvcmJfaGFja19xdWlyayB9LAotCXsgVVNCX0RFVklDRShNVFhPUkJfVklELE1UWE9SQl9GVERJX1JBTkdFXzAxMjhfUElEKSB9LAotCXsgVVNCX0RFVklDRShNVFhPUkJfVklELE1UWE9SQl9GVERJX1JBTkdFXzAxMjlfUElEKSB9LAotCXsgVVNCX0RFVklDRShNVFhPUkJfVklELE1UWE9SQl9GVERJX1JBTkdFXzAxMkFfUElEKSB9LAotCXsgVVNCX0RFVklDRShNVFhPUkJfVklELE1UWE9SQl9GVERJX1JBTkdFXzAxMkJfUElEKSB9LAotCXsgVVNCX0RFVklDRShNVFhPUkJfVklELE1UWE9SQl9GVERJX1JBTkdFXzAxMkNfUElEKSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEyOF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMjlfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTJBX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEyQl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMkNfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX210eG9yYl9oYWNrX3F1aXJrIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyRF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyRV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEyRl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzMF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzMV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzMl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzM19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzNF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzNV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzNl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzN19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzOF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzOV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzQV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzQl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzQ19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzRF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzRV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDEzRl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0MF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0MV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0Ml9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0M19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0NF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0NV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0Nl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0N19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0OF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0OV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0QV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0Ql9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0Q19QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0RF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0RV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE0Rl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE1MF9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE1MV9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE1Ml9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE1M19QSUQpLAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEyRV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMkZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTMwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEzMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTMzX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEzNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMzVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTM2X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEzN19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxMzhfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTM5X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEzQV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxM0JfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTNDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDEzRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxM0VfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTNGX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE0MF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNDFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTQyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE0M19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNDRfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTQ1X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE0Nl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNDdfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTQ4X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE0OV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNEFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTRCX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE0Q19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNERfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTRFX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE0Rl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNTBfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTUxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE1Ml9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNTNfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX210eG9yYl9oYWNrX3F1aXJrIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE1NF9QSUQpLAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTU0X1BJRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9tdHhvcmJfaGFja19xdWlyayB9LAotCXsgVVNCX0RFVklDRShNVFhPUkJfVklELE1UWE9SQl9GVERJX1JBTkdFXzAxNTVfUElEKSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE1NV9QSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfbXR4b3JiX2hhY2tfcXVpcmsgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTU2X1BJRCksCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNTZfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX210eG9yYl9oYWNrX3F1aXJrIH0sCi0JeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsTVRYT1JCX0ZURElfUkFOR0VfMDE1N19QSUQpLAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTU3X1BJRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9tdHhvcmJfaGFja19xdWlyayB9LAotCXsgVVNCX0RFVklDRShNVFhPUkJfVklELE1UWE9SQl9GVERJX1JBTkdFXzAxNThfUElEKSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE1OF9QSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfbXR4b3JiX2hhY2tfcXVpcmsgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTU5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTVBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTVCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTVDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTVEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTVFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTVGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTYwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTYxX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTYyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTYzX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTY0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTY1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTY2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTY3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTY4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTY5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTZBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTZCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTZDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTZEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTZFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTZGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTcwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTcxX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTcyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTczX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTc0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTc1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTc2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTc3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTc4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTc5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTdBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTdCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTdDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTdEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTdFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTdGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTgwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTgxX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTgyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTgzX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTg0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTg1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTg2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTg3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTg4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTg5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMThBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMThCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMThDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMThEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMThFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMThGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTkwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTkxX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTkyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTkzX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTk0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTk1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTk2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTk3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTk4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTk5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTlBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTlCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTlDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTlEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTlFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMTlGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUEwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUExX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUEyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUEzX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUE0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUE1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUE2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUE3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUE4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUE5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUFBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUFCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUFDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUFEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUFFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUFGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUIwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUIxX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUIyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUIzX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUI0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUI1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUI2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUI3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUI4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUI5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUJBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUJCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUJDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUJEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUJFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUJGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUMwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUMxX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUMyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUMzX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUM0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUM1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUM2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUM3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUM4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUM5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUNBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUNCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUNDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUNEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUNFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUNGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQxX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQzX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQ0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQ1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQ2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQ3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQ4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUQ5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMURBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMURCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMURDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUREX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMURFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMURGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUUwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUUxX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUUyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUUzX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUU0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUU1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUU2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUU3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUU4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUU5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUVBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUVCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUVDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUVEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUVFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUVGX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUYwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUYxX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUYyX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUYzX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUY0X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUY1X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUY2X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUY3X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUY4X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUY5X1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUZBX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUZCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUZDX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUZEX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUZFX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCxNVFhPUkJfRlRESV9SQU5HRV8wMUZGX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE1OV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNUFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTVCX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE1Q19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNURfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTVFX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE1Rl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNjBfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTYxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE2Ml9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNjNfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTY0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE2NV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNjZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTY3X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE2OF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNjlfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTZBX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE2Ql9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNkNfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTZEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE2RV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNkZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTcwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE3MV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTczX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE3NF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNzVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTc2X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE3N19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxNzhfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTc5X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE3QV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxN0JfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTdDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE3RF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxN0VfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTdGX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE4MF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxODFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTgyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE4M19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxODRfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTg1X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE4Nl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxODdfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTg4X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE4OV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxOEFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMThCX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE4Q19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxOERfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMThFX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE4Rl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxOTBfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTkxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE5Ml9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxOTNfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTk0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE5NV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxOTZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTk3X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE5OF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxOTlfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTlBX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE5Ql9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxOUNfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMTlEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDE5RV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxOUZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUEwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFBMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQTJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUEzX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFBNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQTVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUE2X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFBN19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQThfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUE5X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFBQV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQUJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUFDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFBRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQUVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUFGX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFCMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQjFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUIyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFCM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQjRfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUI1X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFCNl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQjdfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUI4X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFCOV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQkFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUJCX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFCQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQkRfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUJFX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFCRl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQzBfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUMxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFDMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQzNfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUM0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFDNV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQzZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUM3X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFDOF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQzlfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUNBX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFDQl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0NfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUNEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFDRV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0ZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUQwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFEMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRDJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUQzX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFENF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRDVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUQ2X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFEN19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRDhfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUQ5X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFEQV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxREJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMURDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFERF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxREVfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMURGX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFFMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRTFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUUyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFFM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRTRfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUU1X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFFNl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRTdfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUU4X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFFOV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRUFfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUVCX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFFQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRURfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUVFX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFFRl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRjBfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUYxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFGMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRjNfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUY0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFGNV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRjZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUY3X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFGOF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRjlfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUZBX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFGQl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRkNfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVklELCBNVFhPUkJfRlRESV9SQU5HRV8wMUZEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTVRYT1JCX1ZJRCwgTVRYT1JCX0ZURElfUkFOR0VfMDFGRV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1UWE9SQl9WSUQsIE1UWE9SQl9GVERJX1JBTkdFXzAxRkZfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9QSUVHUk9VUF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1ROQ19YX1BJRCkgfSwKQEAgLTY0Miw3ICs2NTIsNyBAQAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGZ0ZGlfZHJpdmVyID0gewogCS5uYW1lID0JCSJmdGRpX3NpbyIsCkBAIC02NzgsMzAgKzY4OCwzNyBAQAogIHwgQVNZTkNfU1BEX0NVU1QgfCBBU1lOQ19TUERfU0hJIHwgQVNZTkNfU1BEX1dBUlApCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgRlRESSBzZXJpYWwgY29udmVydGVyICovCi1zdGF0aWMgaW50ICBmdGRpX3Npb19wcm9iZQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyB2b2lkIGZ0ZGlfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBpbnQgIGZ0ZGlfc2lvX3BvcnRfcHJvYmUJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCAgZnRkaV9zaW9fcG9ydF9yZW1vdmUJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCAgZnRkaV9vcGVuCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyB2b2lkIGZ0ZGlfY2xvc2UJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIGludCAgZnRkaV93cml0ZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7Ci1zdGF0aWMgaW50ICBmdGRpX3dyaXRlX3Jvb20JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgIGZ0ZGlfY2hhcnNfaW5fYnVmZmVyCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIGZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQJCShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHZvaWQgZnRkaV9zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqIG9sZCk7Ci1zdGF0aWMgaW50ICBmdGRpX3Rpb2NtZ2V0ICAgICAgICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBpbnQgIGZ0ZGlfdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7Ci1zdGF0aWMgaW50ICBmdGRpX2lvY3RsCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQgZnRkaV9icmVha19jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKTsKLXN0YXRpYyB2b2lkIGZ0ZGlfdGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIGZ0ZGlfdW50aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgZnRkaV9zaW9fcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBmdGRpX3Npb19wb3J0X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgZnRkaV9zaW9fcG9ydF9yZW1vdmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBmdGRpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIGZ0ZGlfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgIGZ0ZGlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQgZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAgZnRkaV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgaW50ICBmdGRpX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgZnRkaV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBmdGRpX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgZnRkaV8yMzJhbV9iYXVkX2Jhc2VfdG9fZGl2aXNvciAoaW50IGJhdWQsIGludCBiYXNlKTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgZnRkaV8yMzJhbV9iYXVkX3RvX2Rpdmlzb3IgKGludCBiYXVkKTsKLXN0YXRpYyBfX3UzMiBmdGRpXzIzMmJtX2JhdWRfYmFzZV90b19kaXZpc29yIChpbnQgYmF1ZCwgaW50IGJhc2UpOwotc3RhdGljIF9fdTMyIGZ0ZGlfMjMyYm1fYmF1ZF90b19kaXZpc29yIChpbnQgYmF1ZCk7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW50IGZ0ZGlfMjMyYW1fYmF1ZF9iYXNlX3RvX2Rpdmlzb3IoaW50IGJhdWQsIGludCBiYXNlKTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgZnRkaV8yMzJhbV9iYXVkX3RvX2Rpdmlzb3IoaW50IGJhdWQpOworc3RhdGljIF9fdTMyIGZ0ZGlfMjMyYm1fYmF1ZF9iYXNlX3RvX2Rpdmlzb3IoaW50IGJhdWQsIGludCBiYXNlKTsKK3N0YXRpYyBfX3UzMiBmdGRpXzIzMmJtX2JhdWRfdG9fZGl2aXNvcihpbnQgYmF1ZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgZnRkaV9zaW9fZGV2aWNlID0gewogCS5kcml2ZXIgPSB7CkBAIC03NTIsNDQgKzc2OSw1NCBAQAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBmdGRpXzIzMmFtX2JhdWRfYmFzZV90b19kaXZpc29yKGludCBiYXVkLCBpbnQgYmFzZSkKIHsKIAl1bnNpZ25lZCBzaG9ydCBpbnQgZGl2aXNvcjsKLQlpbnQgZGl2aXNvcjMgPSBiYXNlIC8gMiAvIGJhdWQ7IC8vIGRpdmlzb3Igc2hpZnRlZCAzIGJpdHMgdG8gdGhlIGxlZnQKLQlpZiAoKGRpdmlzb3IzICYgMHg3KSA9PSA3KSBkaXZpc29yMyArKzsgLy8gcm91bmQgeC43LzggdXAgdG8geCsxCisJLyogZGl2aXNvciBzaGlmdGVkIDMgYml0cyB0byB0aGUgbGVmdCAqLworCWludCBkaXZpc29yMyA9IGJhc2UgLyAyIC8gYmF1ZDsKKwlpZiAoKGRpdmlzb3IzICYgMHg3KSA9PSA3KQorCQlkaXZpc29yMysrOyAvKiByb3VuZCB4LjcvOCB1cCB0byB4KzEgKi8KIAlkaXZpc29yID0gZGl2aXNvcjMgPj4gMzsKIAlkaXZpc29yMyAmPSAweDc7Ci0JaWYgKGRpdmlzb3IzID09IDEpIGRpdmlzb3IgfD0gMHhjMDAwOyBlbHNlIC8vIDAuMTI1Ci0JaWYgKGRpdmlzb3IzID49IDQpIGRpdmlzb3IgfD0gMHg0MDAwOyBlbHNlIC8vIDAuNQotCWlmIChkaXZpc29yMyAhPSAwKSBkaXZpc29yIHw9IDB4ODAwMDsgICAgICAvLyAwLjI1Ci0JaWYgKGRpdmlzb3IgPT0gMSkgZGl2aXNvciA9IDA7CS8qIHNwZWNpYWwgY2FzZSBmb3IgbWF4aW11bSBiYXVkIHJhdGUgKi8KKwlpZiAoZGl2aXNvcjMgPT0gMSkKKwkJZGl2aXNvciB8PSAweGMwMDA7CisJZWxzZSBpZiAoZGl2aXNvcjMgPj0gNCkKKwkJZGl2aXNvciB8PSAweDQwMDA7CisJZWxzZSBpZiAoZGl2aXNvcjMgIT0gMCkKKwkJZGl2aXNvciB8PSAweDgwMDA7CisJZWxzZSBpZiAoZGl2aXNvciA9PSAxKQorCQlkaXZpc29yID0gMDsJLyogc3BlY2lhbCBjYXNlIGZvciBtYXhpbXVtIGJhdWQgcmF0ZSAqLwogCXJldHVybiBkaXZpc29yOwogfQogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW50IGZ0ZGlfMjMyYW1fYmF1ZF90b19kaXZpc29yKGludCBiYXVkKQogewotCSByZXR1cm4oZnRkaV8yMzJhbV9iYXVkX2Jhc2VfdG9fZGl2aXNvcihiYXVkLCA0ODAwMDAwMCkpOworCSByZXR1cm4gZnRkaV8yMzJhbV9iYXVkX2Jhc2VfdG9fZGl2aXNvcihiYXVkLCA0ODAwMDAwMCk7CiB9CiAKIHN0YXRpYyBfX3UzMiBmdGRpXzIzMmJtX2JhdWRfYmFzZV90b19kaXZpc29yKGludCBiYXVkLCBpbnQgYmFzZSkKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaXZmcmFjWzhdID0geyAwLCAzLCAyLCA0LCAxLCA1LCA2LCA3IH07CiAJX191MzIgZGl2aXNvcjsKLQlpbnQgZGl2aXNvcjMgPSBiYXNlIC8gMiAvIGJhdWQ7IC8vIGRpdmlzb3Igc2hpZnRlZCAzIGJpdHMgdG8gdGhlIGxlZnQKKwkvKiBkaXZpc29yIHNoaWZ0ZWQgMyBiaXRzIHRvIHRoZSBsZWZ0ICovCisJaW50IGRpdmlzb3IzID0gYmFzZSAvIDIgLyBiYXVkOwogCWRpdmlzb3IgPSBkaXZpc29yMyA+PiAzOwogCWRpdmlzb3IgfD0gKF9fdTMyKWRpdmZyYWNbZGl2aXNvcjMgJiAweDddIDw8IDE0OwogCS8qIERlYWwgd2l0aCBzcGVjaWFsIGNhc2VzIGZvciBoaWdoZXN0IGJhdWQgcmF0ZXMuICovCi0JaWYgKGRpdmlzb3IgPT0gMSkgZGl2aXNvciA9IDA7IGVsc2UJLy8gMS4wCi0JaWYgKGRpdmlzb3IgPT0gMHg0MDAxKSBkaXZpc29yID0gMTsJLy8gMS41CisJaWYgKGRpdmlzb3IgPT0gMSkKKwkJZGl2aXNvciA9IDA7CisJZWxzZSBpZiAoZGl2aXNvciA9PSAweDQwMDEpCisJCWRpdmlzb3IgPSAxOwogCXJldHVybiBkaXZpc29yOwogfQogCiBzdGF0aWMgX191MzIgZnRkaV8yMzJibV9iYXVkX3RvX2Rpdmlzb3IoaW50IGJhdWQpCiB7Ci0JIHJldHVybihmdGRpXzIzMmJtX2JhdWRfYmFzZV90b19kaXZpc29yKGJhdWQsIDQ4MDAwMDAwKSk7CisJIHJldHVybiBmdGRpXzIzMmJtX2JhdWRfYmFzZV90b19kaXZpc29yKGJhdWQsIDQ4MDAwMDAwKTsKIH0KIAogI2RlZmluZSBzZXRfbWN0cmwocG9ydCwgc2V0KQkJdXBkYXRlX21jdHJsKChwb3J0KSwgKHNldCksIDApCiAjZGVmaW5lIGNsZWFyX21jdHJsKHBvcnQsIGNsZWFyKQl1cGRhdGVfbWN0cmwoKHBvcnQpLCAwLCAoY2xlYXIpKQogCi1zdGF0aWMgaW50IHVwZGF0ZV9tY3RybChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCitzdGF0aWMgaW50IHVwZGF0ZV9tY3RybChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgc2V0LAorCQkJCQkJCXVuc2lnbmVkIGludCBjbGVhcikKIHsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWNoYXIgKmJ1ZjsKQEAgLTg0MywxNCArODcwLDEyMyBAQAogfQogCiAKLXN0YXRpYyBfX3UzMiBnZXRfZnRkaV9kaXZpc29yKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiBwb3J0KTsKK3N0YXRpYyBfX3UzMiBnZXRfZnRkaV9kaXZpc29yKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreyAvKiBnZXRfZnRkaV9kaXZpc29yICovCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlfX3UzMiBkaXZfdmFsdWUgPSAwOworCWludCBkaXZfb2theSA9IDE7CisJaW50IGJhdWQ7CiAKKwkvKgorCSAqIFRoZSBsb2dpYyBpbnZvbHZlZCBpbiBzZXR0aW5nIHRoZSBiYXVkcmF0ZSBjYW4gYmUgY2xlYW5seSBzcGxpdCBpbnRvCisJICogMyBzdGVwcy4KKwkgKiAxLiBTdGFuZGFyZCBiYXVkIHJhdGVzIGFyZSBzZXQgaW4gdHR5LT50ZXJtaW9zLT5jX2NmbGFnCisJICogMi4gSWYgdGhlc2UgYXJlIG5vdCBlbm91Z2gsIHlvdSBjYW4gc2V0IGFueSBzcGVlZCB1c2luZyBhbHRfc3BlZWQgYXMKKwkgKiBmb2xsb3dzOgorCSAqICAgIC0gc2V0IHR0eS0+dGVybWlvcy0+Y19jZmxhZyBzcGVlZCB0byBCMzg0MDAKKwkgKiAgICAtIHNldCB5b3VyIHJlYWwgc3BlZWQgaW4gdHR5LT5hbHRfc3BlZWQ7IGl0IGdldHMgaWdub3JlZCB3aGVuCisJICogICAgICBhbHRfc3BlZWQ9PTAsIChvcikKKwkgKiAgICAtIGNhbGwgVElPQ1NTRVJJQUwgaW9jdGwgd2l0aCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpIHNldCBhcworCSAqCWZvbGxvd3M6CisJICogICAgICBmbGFncyAmIEFTWU5DX1NQRF9NQVNLID09IEFTWU5DX1NQRF9bSEksIFZISSwgU0hJLCBXQVJQXSwKKwkgKgl0aGlzIGp1c3Qgc2V0cyBhbHRfc3BlZWQgdG8gKEhJOiA1NzYwMCwgVkhJOiAxMTUyMDAsCisJICoJU0hJOiAyMzA0MDAsIFdBUlA6IDQ2MDgwMCkKKwkgKiAqKiBTdGVwcyAxLCAyIGFyZSBkb25lIGNvdXJ0ZXN5IG9mIHR0eV9nZXRfYmF1ZF9yYXRlCisJICogMy4gWW91IGNhbiBhbHNvIHNldCBiYXVkIHJhdGUgYnkgc2V0dGluZyBjdXN0b20gZGl2aXNvciBhcyBmb2xsb3dzCisJICogICAgLSBzZXQgdHR5LT50ZXJtaW9zLT5jX2NmbGFnIHNwZWVkIHRvIEIzODQwMAorCSAqICAgIC0gY2FsbCBUSU9DU1NFUklBTCBpb2N0bCB3aXRoIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkgc2V0IGFzCisJICoJZm9sbG93czoKKwkgKiAgICAgIG8gZmxhZ3MgJiBBU1lOQ19TUERfTUFTSyA9PSBBU1lOQ19TUERfQ1VTVAorCSAqICAgICAgbyBjdXN0b21fZGl2aXNvciBzZXQgdG8gYmF1ZF9iYXNlIC8geW91cl9uZXdfYmF1ZHJhdGUKKwkgKiAqKiBTdGVwIDMgaXMgZG9uZSBjb3VydGVzeSBvZiBjb2RlIGJvcnJvd2VkIGZyb20gc2VyaWFsLmMKKwkgKiAgICBJIHNob3VsZCByZWFsbHkgc3BlbmQgc29tZSB0aW1lIGFuZCBzZXBhcmF0ZSArIG1vdmUgdGhpcyBjb21tb24KKwkgKiAgICBjb2RlIHRvIHNlcmlhbC5jLCBpdCBpcyByZXBsaWNhdGVkIGluIG5lYXJseSBldmVyeSBzZXJpYWwgZHJpdmVyCisJICogICAgeW91IHNlZS4KKwkgKi8KIAotc3RhdGljIGludCBjaGFuZ2Vfc3BlZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKKwkvKiAxLiBHZXQgdGhlIGJhdWQgcmF0ZSBmcm9tIHRoZSB0dHkgc2V0dGluZ3MsIHRoaXMgb2JzZXJ2ZXMKKwkgICAgICBhbHRfc3BlZWQgaGFjayAqLworCisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJZGJnKCIlcyAtIHR0eV9nZXRfYmF1ZF9yYXRlIHJlcG9ydHMgc3BlZWQgJWQiLCBfX2Z1bmNfXywgYmF1ZCk7CisKKwkvKiAyLiBPYnNlcnZlIGFzeW5jLWNvbXBhdGlibGUgY3VzdG9tX2Rpdmlzb3IgaGFjaywgdXBkYXRlIGJhdWRyYXRlCisJICAgaWYgbmVlZGVkICovCisKKwlpZiAoYmF1ZCA9PSAzODQwMCAmJgorCSAgICAoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9DVVNUKSAmJgorCSAgICAgKHByaXYtPmN1c3RvbV9kaXZpc29yKSkgeworCQliYXVkID0gcHJpdi0+YmF1ZF9iYXNlIC8gcHJpdi0+Y3VzdG9tX2Rpdmlzb3I7CisJCWRiZygiJXMgLSBjdXN0b20gZGl2aXNvciAlZCBzZXRzIGJhdWQgcmF0ZSB0byAlZCIsCisJCQkJX19mdW5jX18sIHByaXYtPmN1c3RvbV9kaXZpc29yLCBiYXVkKTsKKwl9CisKKwkvKiAzLiBDb252ZXJ0IGJhdWRyYXRlIHRvIGRldmljZS1zcGVjaWZpYyBkaXZpc29yICovCisKKwlpZiAoIWJhdWQpCisJCWJhdWQgPSA5NjAwOworCXN3aXRjaCAocHJpdi0+Y2hpcF90eXBlKSB7CisJY2FzZSBTSU86IC8qIFNJTyBjaGlwICovCisJCXN3aXRjaCAoYmF1ZCkgeworCQljYXNlIDMwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjMwMDsgYnJlYWs7CisJCWNhc2UgNjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iNjAwOyBicmVhazsKKwkJY2FzZSAxMjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iMTIwMDsgYnJlYWs7CisJCWNhc2UgMjQwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjI0MDA7IGJyZWFrOworCQljYXNlIDQ4MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2I0ODAwOyBicmVhazsKKwkJY2FzZSA5NjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iOTYwMDsgYnJlYWs7CisJCWNhc2UgMTkyMDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IxOTIwMDsgYnJlYWs7CisJCWNhc2UgMzg0MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IzODQwMDsgYnJlYWs7CisJCWNhc2UgNTc2MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2I1NzYwMDsgIGJyZWFrOworCQljYXNlIDExNTIwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjExNTIwMDsgYnJlYWs7CisJCX0gLyogYmF1ZCAqLworCQlpZiAoZGl2X3ZhbHVlID09IDApIHsKKwkJCWRiZygiJXMgLSBCYXVkcmF0ZSAoJWQpIHJlcXVlc3RlZCBpcyBub3Qgc3VwcG9ydGVkIiwKKwkJCQkJCQlfX2Z1bmNfXywgIGJhdWQpOworCQkJZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjk2MDA7CisJCQliYXVkID0gOTYwMDsKKwkJCWRpdl9va2F5ID0gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIEZUOFUyMzJBTTogLyogOFUyMzJBTSBjaGlwICovCisJCWlmIChiYXVkIDw9IDMwMDAwMDApIHsKKwkJCWRpdl92YWx1ZSA9IGZ0ZGlfMjMyYW1fYmF1ZF90b19kaXZpc29yKGJhdWQpOworCQl9IGVsc2UgeworCQkJZGJnKCIlcyAtIEJhdWQgcmF0ZSB0b28gaGlnaCEiLCBfX2Z1bmNfXyk7CisJCQliYXVkID0gOTYwMDsKKwkJCWRpdl92YWx1ZSA9IGZ0ZGlfMjMyYW1fYmF1ZF90b19kaXZpc29yKDk2MDApOworCQkJZGl2X29rYXkgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgRlQyMzJCTTogLyogRlQyMzJCTSBjaGlwICovCisJY2FzZSBGVDIyMzJDOiAvKiBGVDIyMzJDIGNoaXAgKi8KKwljYXNlIEZUMjMyUkw6CisJCWlmIChiYXVkIDw9IDMwMDAwMDApIHsKKwkJCWRpdl92YWx1ZSA9IGZ0ZGlfMjMyYm1fYmF1ZF90b19kaXZpc29yKGJhdWQpOworCQl9IGVsc2UgeworCQkJZGJnKCIlcyAtIEJhdWQgcmF0ZSB0b28gaGlnaCEiLCBfX2Z1bmNfXyk7CisJCQlkaXZfdmFsdWUgPSBmdGRpXzIzMmJtX2JhdWRfdG9fZGl2aXNvcig5NjAwKTsKKwkJCWRpdl9va2F5ID0gMDsKKwkJCWJhdWQgPSA5NjAwOworCQl9CisJCWJyZWFrOworCX0gLyogcHJpdi0+Y2hpcF90eXBlICovCisKKwlpZiAoZGl2X29rYXkpIHsKKwkJZGJnKCIlcyAtIEJhdWQgcmF0ZSBzZXQgdG8gJWQgKGRpdmlzb3IgMHglbFgpIG9uIGNoaXAgJXMiLAorCQkJX19mdW5jX18sIGJhdWQsICh1bnNpZ25lZCBsb25nKWRpdl92YWx1ZSwKKwkJCWZ0ZGlfY2hpcF9uYW1lW3ByaXYtPmNoaXBfdHlwZV0pOworCX0KKworCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYmF1ZCwgYmF1ZCk7CisJcmV0dXJuIGRpdl92YWx1ZTsKK30KKworc3RhdGljIGludCBjaGFuZ2Vfc3BlZWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWNoYXIgKmJ1ZjsKLSAgICAgICAgX191MTYgdXJiX3ZhbHVlOworCV9fdTE2IHVyYl92YWx1ZTsKIAlfX3UxNiB1cmJfaW5kZXg7CiAJX191MzIgdXJiX2luZGV4X3ZhbHVlOwogCWludCBydjsKQEAgLTg1OSw3ICs5OTUsNyBAQAogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXVyYl9pbmRleF92YWx1ZSA9IGdldF9mdGRpX2Rpdmlzb3IocG9ydCk7CisJdXJiX2luZGV4X3ZhbHVlID0gZ2V0X2Z0ZGlfZGl2aXNvcih0dHksIHBvcnQpOwogCXVyYl92YWx1ZSA9IChfX3UxNil1cmJfaW5kZXhfdmFsdWU7CiAJdXJiX2luZGV4ID0gKF9fdTE2KSh1cmJfaW5kZXhfdmFsdWUgPj4gMTYpOwogCWlmIChwcml2LT5pbnRlcmZhY2UpIHsJLyogRlQyMjMyQyAqLwpAQCAtODc4LDExMCArMTAxNCw5IEBACiB9CiAKIAotc3RhdGljIF9fdTMyIGdldF9mdGRpX2Rpdmlzb3Ioc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqIHBvcnQpCi17IC8qIGdldF9mdGRpX2Rpdmlzb3IgKi8KLQlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCV9fdTMyIGRpdl92YWx1ZSA9IDA7Ci0JaW50IGRpdl9va2F5ID0gMTsKLQlpbnQgYmF1ZDsKIAotCS8qCi0JICogVGhlIGxvZ2ljIGludm9sdmVkIGluIHNldHRpbmcgdGhlIGJhdWRyYXRlIGNhbiBiZSBjbGVhbmx5IHNwbGl0IGluIDMgc3RlcHMuCi0JICogT2J0YWluaW5nIHRoZSBhY3R1YWwgYmF1ZCByYXRlIGlzIGEgbGl0dGxlIHRyaWNreSBzaW5jZSB1bml4IHRyYWRpdGlvbmFsbHkKLQkgKiBzb21laG93IGlnbm9yZWQgdGhlIHBvc3NpYmlsaXR5IHRvIHNldCBub24tc3RhbmRhcmQgYmF1ZCByYXRlcy4KLQkgKiAxLiBTdGFuZGFyZCBiYXVkIHJhdGVzIGFyZSBzZXQgaW4gdHR5LT50ZXJtaW9zLT5jX2NmbGFnCi0JICogMi4gSWYgdGhlc2UgYXJlIG5vdCBlbm91Z2gsIHlvdSBjYW4gc2V0IGFueSBzcGVlZCB1c2luZyBhbHRfc3BlZWQgYXMgZm9sbG93czoKLQkgKiAgICAtIHNldCB0dHktPnRlcm1pb3MtPmNfY2ZsYWcgc3BlZWQgdG8gQjM4NDAwCi0JICogICAgLSBzZXQgeW91ciByZWFsIHNwZWVkIGluIHR0eS0+YWx0X3NwZWVkOyBpdCBnZXRzIGlnbm9yZWQgd2hlbgotCSAqICAgICAgYWx0X3NwZWVkPT0wLCAob3IpCi0JICogICAgLSBjYWxsIFRJT0NTU0VSSUFMIGlvY3RsIHdpdGggKHN0cnVjdCBzZXJpYWxfc3RydWN0KSBzZXQgYXMgZm9sbG93czoKLQkgKiAgICAgIGZsYWdzICYgQVNZTkNfU1BEX01BU0sgPT0gQVNZTkNfU1BEX1tISSwgVkhJLCBTSEksIFdBUlBdLCB0aGlzIGp1c3QKLQkgKiAgICAgIHNldHMgYWx0X3NwZWVkIHRvIChISTogNTc2MDAsIFZISTogMTE1MjAwLCBTSEk6IDIzMDQwMCwgV0FSUDogNDYwODAwKQotCSAqICoqIFN0ZXBzIDEsIDIgYXJlIGRvbmUgY291cnRlc3kgb2YgdHR5X2dldF9iYXVkX3JhdGUKLQkgKiAzLiBZb3UgY2FuIGFsc28gc2V0IGJhdWQgcmF0ZSBieSBzZXR0aW5nIGN1c3RvbSBkaXZpc29yIGFzIGZvbGxvd3MKLQkgKiAgICAtIHNldCB0dHktPnRlcm1pb3MtPmNfY2ZsYWcgc3BlZWQgdG8gQjM4NDAwCi0JICogICAgLSBjYWxsIFRJT0NTU0VSSUFMIGlvY3RsIHdpdGggKHN0cnVjdCBzZXJpYWxfc3RydWN0KSBzZXQgYXMgZm9sbG93czoKLQkgKiAgICAgIG8gZmxhZ3MgJiBBU1lOQ19TUERfTUFTSyA9PSBBU1lOQ19TUERfQ1VTVAotCSAqICAgICAgbyBjdXN0b21fZGl2aXNvciBzZXQgdG8gYmF1ZF9iYXNlIC8geW91cl9uZXdfYmF1ZHJhdGUKLQkgKiAqKiBTdGVwIDMgaXMgZG9uZSBjb3VydGVzeSBvZiBjb2RlIGJvcnJvd2VkIGZyb20gc2VyaWFsLmMgLSBJIHNob3VsZCByZWFsbHkKLQkgKiAgICBzcGVuZCBzb21lIHRpbWUgYW5kIHNlcGFyYXRlK21vdmUgdGhpcyBjb21tb24gY29kZSB0byBzZXJpYWwuYywgaXQgaXMKLQkgKiAgICByZXBsaWNhdGVkIGluIG5lYXJseSBldmVyeSBzZXJpYWwgZHJpdmVyIHlvdSBzZWUuCi0JICovCi0KLQkvKiAxLiBHZXQgdGhlIGJhdWQgcmF0ZSBmcm9tIHRoZSB0dHkgc2V0dGluZ3MsIHRoaXMgb2JzZXJ2ZXMgYWx0X3NwZWVkIGhhY2sgKi8KLQotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOwotCWRiZygiJXMgLSB0dHlfZ2V0X2JhdWRfcmF0ZSByZXBvcnRzIHNwZWVkICVkIiwgX19mdW5jX18sIGJhdWQpOwotCi0JLyogMi4gT2JzZXJ2ZSBhc3luYy1jb21wYXRpYmxlIGN1c3RvbV9kaXZpc29yIGhhY2ssIHVwZGF0ZSBiYXVkcmF0ZSBpZiBuZWVkZWQgKi8KLQotCWlmIChiYXVkID09IDM4NDAwICYmCi0JICAgICgocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpICYmCi0JICAgICAocHJpdi0+Y3VzdG9tX2Rpdmlzb3IpKSB7Ci0JCWJhdWQgPSBwcml2LT5iYXVkX2Jhc2UgLyBwcml2LT5jdXN0b21fZGl2aXNvcjsKLQkJZGJnKCIlcyAtIGN1c3RvbSBkaXZpc29yICVkIHNldHMgYmF1ZCByYXRlIHRvICVkIiwgX19mdW5jX18sIHByaXYtPmN1c3RvbV9kaXZpc29yLCBiYXVkKTsKLQl9Ci0KLQkvKiAzLiBDb252ZXJ0IGJhdWRyYXRlIHRvIGRldmljZS1zcGVjaWZpYyBkaXZpc29yICovCi0KLQlpZiAoIWJhdWQpIGJhdWQgPSA5NjAwOwotCXN3aXRjaChwcml2LT5jaGlwX3R5cGUpIHsKLQljYXNlIFNJTzogLyogU0lPIGNoaXAgKi8KLQkJc3dpdGNoKGJhdWQpIHsKLQkJY2FzZSAzMDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IzMDA7IGJyZWFrOwotCQljYXNlIDYwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjYwMDsgYnJlYWs7Ci0JCWNhc2UgMTIwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjEyMDA7IGJyZWFrOwotCQljYXNlIDI0MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IyNDAwOyBicmVhazsKLQkJY2FzZSA0ODAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iNDgwMDsgYnJlYWs7Ci0JCWNhc2UgOTYwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjk2MDA7IGJyZWFrOwotCQljYXNlIDE5MjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iMTkyMDA7IGJyZWFrOwotCQljYXNlIDM4NDAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iMzg0MDA7IGJyZWFrOwotCQljYXNlIDU3NjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iNTc2MDA7ICBicmVhazsKLQkJY2FzZSAxMTUyMDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IxMTUyMDA7IGJyZWFrOwotCQl9IC8qIGJhdWQgKi8KLQkJaWYgKGRpdl92YWx1ZSA9PSAwKSB7Ci0JCQlkYmcoIiVzIC0gQmF1ZHJhdGUgKCVkKSByZXF1ZXN0ZWQgaXMgbm90IHN1cHBvcnRlZCIsIF9fZnVuY19fLCAgYmF1ZCk7Ci0JCQlkaXZfdmFsdWUgPSBmdGRpX3Npb19iOTYwMDsKLQkJCWJhdWQgPSA5NjAwOwotCQkJZGl2X29rYXkgPSAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRlQ4VTIzMkFNOiAvKiA4VTIzMkFNIGNoaXAgKi8KLQkJaWYgKGJhdWQgPD0gMzAwMDAwMCkgewotCQkJZGl2X3ZhbHVlID0gZnRkaV8yMzJhbV9iYXVkX3RvX2Rpdmlzb3IoYmF1ZCk7Ci0JCX0gZWxzZSB7Ci0JICAgICAgICAgICAgICAgIGRiZygiJXMgLSBCYXVkIHJhdGUgdG9vIGhpZ2ghIiwgX19mdW5jX18pOwotCQkJYmF1ZCA9IDk2MDA7Ci0JCQlkaXZfdmFsdWUgPSBmdGRpXzIzMmFtX2JhdWRfdG9fZGl2aXNvcig5NjAwKTsKLQkJCWRpdl9va2F5ID0gMDsKLQkJfQotCQlicmVhazsKLQljYXNlIEZUMjMyQk06IC8qIEZUMjMyQk0gY2hpcCAqLwotCWNhc2UgRlQyMjMyQzogLyogRlQyMjMyQyBjaGlwICovCi0JY2FzZSBGVDIzMlJMOgotCQlpZiAoYmF1ZCA8PSAzMDAwMDAwKSB7Ci0JCQlkaXZfdmFsdWUgPSBmdGRpXzIzMmJtX2JhdWRfdG9fZGl2aXNvcihiYXVkKTsKLQkJfSBlbHNlIHsKLQkgICAgICAgICAgICAgICAgZGJnKCIlcyAtIEJhdWQgcmF0ZSB0b28gaGlnaCEiLCBfX2Z1bmNfXyk7Ci0JCQlkaXZfdmFsdWUgPSBmdGRpXzIzMmJtX2JhdWRfdG9fZGl2aXNvcig5NjAwKTsKLQkJCWRpdl9va2F5ID0gMDsKLQkJCWJhdWQgPSA5NjAwOwotCQl9Ci0JCWJyZWFrOwotCX0gLyogcHJpdi0+Y2hpcF90eXBlICovCi0KLQlpZiAoZGl2X29rYXkpIHsKLQkJZGJnKCIlcyAtIEJhdWQgcmF0ZSBzZXQgdG8gJWQgKGRpdmlzb3IgMHglbFgpIG9uIGNoaXAgJXMiLAotCQkJX19mdW5jX18sIGJhdWQsICh1bnNpZ25lZCBsb25nKWRpdl92YWx1ZSwKLQkJCWZ0ZGlfY2hpcF9uYW1lW3ByaXYtPmNoaXBfdHlwZV0pOwotCX0KLQotCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHBvcnQtPnR0eSwgYmF1ZCwgYmF1ZCk7Ci0JcmV0dXJuKGRpdl92YWx1ZSk7Ci19Ci0KLQotc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqIHBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqIHJldGluZm8pCitzdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKIHsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKQEAgLTk5OCw3ICsxMDMzLDggQEAKIH0gLyogZ2V0X3NlcmlhbF9pbmZvICovCiAKIAotc3RhdGljIGludCBzZXRfc2VyaWFsX2luZm8oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqIHBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqIG5ld2luZm8pCitzdGF0aWMgaW50IHNldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqbmV3aW5mbykKIHsgLyogc2V0X3NlcmlhbF9pbmZvICovCiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBuZXdfc2VyaWFsOwpAQCAtMTAwNiw3ICsxMDQyLDcgQEAKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3NlcmlhbCwgbmV3aW5mbywgc2l6ZW9mKG5ld19zZXJpYWwpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0Jb2xkX3ByaXYgPSAqIHByaXY7CisJb2xkX3ByaXYgPSAqcHJpdjsKIAogCS8qIERvIGVycm9yIGNoZWNraW5nIGFuZCBwZXJtaXNzaW9uIGNoZWNraW5nICovCiAKQEAgLTEwMjcsMzMgKzEwNjMsMzIgQEAKIAkvKiBNYWtlIHRoZSBjaGFuZ2VzIC0gdGhlc2UgYXJlIHByaXZpbGVnZWQgY2hhbmdlcyEgKi8KIAogCXByaXYtPmZsYWdzID0gKChwcml2LT5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAotCSAgICAgICAgICAgICAgIChuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfRkxBR1MpKTsKKwkJCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19GTEFHUykpOwogCXByaXYtPmN1c3RvbV9kaXZpc29yID0gbmV3X3NlcmlhbC5jdXN0b21fZGl2aXNvcjsKIAotCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKKwl0dHktPmxvd19sYXRlbmN5ID0gKHByaXYtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CiAKIGNoZWNrX2FuZF9leGl0OgogCWlmICgob2xkX3ByaXYuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgIT0KIAkgICAgIChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSkgewogCQlpZiAoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKLQkJCXBvcnQtPnR0eS0+YWx0X3NwZWVkID0gNTc2MDA7CisJCQl0dHktPmFsdF9zcGVlZCA9IDU3NjAwOwogCQllbHNlIGlmICgocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKLQkJCXBvcnQtPnR0eS0+YWx0X3NwZWVkID0gMTE1MjAwOworCQkJdHR5LT5hbHRfc3BlZWQgPSAxMTUyMDA7CiAJCWVsc2UgaWYgKChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQotCQkJcG9ydC0+dHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7CisJCQl0dHktPmFsdF9zcGVlZCA9IDIzMDQwMDsKIAkJZWxzZSBpZiAoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9XQVJQKQotCQkJcG9ydC0+dHR5LT5hbHRfc3BlZWQgPSA0NjA4MDA7CisJCQl0dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKIAkJZWxzZQotCQkJcG9ydC0+dHR5LT5hbHRfc3BlZWQgPSAwOworCQkJdHR5LT5hbHRfc3BlZWQgPSAwOwogCX0KIAlpZiAoKChvbGRfcHJpdi5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSAhPQogCSAgICAgKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spKSB8fAogCSAgICAoKChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfQ1VTVCkgJiYKIAkgICAgIChvbGRfcHJpdi5jdXN0b21fZGl2aXNvciAhPSBwcml2LT5jdXN0b21fZGl2aXNvcikpKSB7Ci0JCWNoYW5nZV9zcGVlZChwb3J0KTsKKwkJY2hhbmdlX3NwZWVkKHR0eSwgcG9ydCk7CiAJfQotCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIAogfSAvKiBzZXRfc2VyaWFsX2luZm8gKi8KIApAQCAtMTA4MiwxMSArMTExNywxMCBAQAogCQlwcml2LT5jaGlwX3R5cGUgPSBGVDIyMzJDOwogCQkvKiBEZXRlcm1pbmUgaW50ZXJmYWNlIGNvZGUuICovCiAJCWludGVyID0gc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQkJaWYgKGludGVyID09IDApIHsKKwkJaWYgKGludGVyID09IDApCiAJCQlwcml2LT5pbnRlcmZhY2UgPSBQSVRfU0lPQTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcHJpdi0+aW50ZXJmYWNlID0gUElUX1NJT0I7Ci0JCX0KIAkJLyogQk0tdHlwZSBkZXZpY2VzIGhhdmUgYSBidWcgd2hlcmUgYmNkRGV2aWNlIGdldHMgc2V0CiAJCSAqIHRvIDB4MjAwIHdoZW4gaVNlcmlhbE51bWJlciBpcyAwLiAgKi8KIAkJaWYgKHZlcnNpb24gPCAweDUwMCkgewpAQCAtMTEyMCw3ICsxMTU0LDggQEAKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfbGF0ZW5jeV90aW1lcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2xhdGVuY3lfdGltZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC0xMTI5LDE0ICsxMTY0LDE0IEBACiAJaW50IHJ2ID0gMDsKIAogCi0JZGJnKCIlcyIsX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlydiA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAogCQkJICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCiAJCQkgICAgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QsCiAJCQkgICAgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1RfVFlQRSwKIAkJCSAgICAgMCwgcHJpdi0+aW50ZXJmYWNlLAotCQkJICAgICAoY2hhciopICZsYXRlbmN5LCAxLCBXRFJfVElNRU9VVCk7CisJCQkgICAgIChjaGFyICopICZsYXRlbmN5LCAxLCBXRFJfVElNRU9VVCk7CiAKIAlpZiAocnYgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlYWQgbGF0ZW5jeSB0aW1lcjogJWlcbiIsIHJ2KTsKQEAgLTExNDYsOCArMTE4MSw5IEBACiB9CiAKIC8qIFdyaXRlIGEgbmV3IHZhbHVlIG9mIHRoZSBsYXRlbmN5IHRpbWVyLCBpbiB1bml0cyBvZiBtaWxsaXNlY29uZHMuICovCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9sYXRlbmN5X3RpbWVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKnZhbGJ1ZiwKLQkJCQkgICBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzdG9yZV9sYXRlbmN5X3RpbWVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICp2YWxidWYsCisJCQlzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC0xMTc1LDggKzEyMTEsOCBAQAogCiAvKiBXcml0ZSBhbiBldmVudCBjaGFyYWN0ZXIgZGlyZWN0bHkgdG8gdGhlIEZUREkgcmVnaXN0ZXIuICBUaGUgQVNDSUkKICAgIHZhbHVlIGlzIGluIHRoZSBsb3cgOCBiaXRzLCB3aXRoIHRoZSBlbmFibGUgYml0IGluIHRoZSA5dGggYml0LiAqLwotc3RhdGljIHNzaXplX3Qgc3RvcmVfZXZlbnRfY2hhcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICp2YWxidWYsCi0JCQkJc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc3RvcmVfZXZlbnRfY2hhcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKnZhbGJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtMTIwMiw3ICsxMjM4LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihsYXRlbmN5X3RpbWVyLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19sYXRlbmN5X3RpbWVyLCBzdG9yZV9sYXRlbmN5X3RpbWVyKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihsYXRlbmN5X3RpbWVyLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19sYXRlbmN5X3RpbWVyLAorCQkJCQkJCXN0b3JlX2xhdGVuY3lfdGltZXIpOwogc3RhdGljIERFVklDRV9BVFRSKGV2ZW50X2NoYXIsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2V2ZW50X2NoYXIpOwogCiBzdGF0aWMgaW50IGNyZWF0ZV9zeXNmc19hdHRycyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQpAQCAtMTIxMCw3ICsxMjQ3LDcgQEAKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCByZXR2YWwgPSAwOwogCi0JZGJnKCIlcyIsX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAkvKiBYWFggSSd2ZSBubyBpZGVhIGlmIHRoZSBvcmlnaW5hbCBTSU8gc3VwcG9ydHMgdGhlIGV2ZW50X2NoYXIKIAkgKiBzeXNmcyBwYXJhbWV0ZXIsIHNvIEknbSBwbGF5aW5nIGl0IHNhZmUuICAqLwpAQCAtMTIzMiw3ICsxMjY5LDcgQEAKIHsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JZGJnKCIlcyIsX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAkvKiBYWFggc2VlIGNyZWF0ZV9zeXNmc19hdHRycyAqLwogCWlmIChwcml2LT5jaGlwX3R5cGUgIT0gU0lPKSB7CkBAIC0xMjUzLDkgKzEyOTAsMTEgQEAKICAqLwogCiAvKiBQcm9iZSBmdW5jdGlvbiB0byBjaGVjayBmb3Igc3BlY2lhbCBkZXZpY2VzICovCi1zdGF0aWMgaW50IGZ0ZGlfc2lvX3Byb2JlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IGZ0ZGlfc2lvX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgZnRkaV9zaW9fcXVpcmsgKnF1aXJrID0gKHN0cnVjdCBmdGRpX3Npb19xdWlyayAqKWlkLT5kcml2ZXJfaW5mbzsKKwlzdHJ1Y3QgZnRkaV9zaW9fcXVpcmsgKnF1aXJrID0KKwkJCQkoc3RydWN0IGZ0ZGlfc2lvX3F1aXJrICopaWQtPmRyaXZlcl9pbmZvOwogCiAJaWYgKHF1aXJrICYmIHF1aXJrLT5wcm9iZSkgewogCQlpbnQgcmV0ID0gcXVpcmstPnByb2JlKHNlcmlhbCk7CkBAIC0xMjc0LDE3ICsxMzEzLDE4IEBACiAJc3RydWN0IGZ0ZGlfc2lvX3F1aXJrICpxdWlyayA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAogCi0JZGJnKCIlcyIsX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwotCWlmICghcHJpdil7Ci0JCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19mdW5jX18sIHNpemVvZihzdHJ1Y3QgZnRkaV9wcml2YXRlKSk7CisJaWYgKCFwcml2KSB7CisJCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19mdW5jX18sCisJCQkJCXNpemVvZihzdHJ1Y3QgZnRkaV9wcml2YXRlKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5yeF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfbG9jayk7Ci0gICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJLyogVGhpcyB3aWxsIHB1c2ggdGhlIGNoYXJhY3RlcnMgdGhyb3VnaCBpbW1lZGlhdGVseSByYXRoZXIKIAkgICB0aGFuIHF1ZXVlIGEgdGFzayB0byBkZWxpdmVyIHRoZW0gKi8KIAlwcml2LT5mbGFncyA9IEFTWU5DX0xPV19MQVRFTkNZOwpAQCAtMTI5NCw5ICsxMzM0LDkgQEAKIAogCS8qIEluY3JlYXNlIHRoZSBzaXplIG9mIHJlYWQgYnVmZmVycyAqLwogCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKLQlwb3J0LT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MgKEJVRlNaLCBHRlBfS0VSTkVMKTsKKwlwb3J0LT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MoQlVGU1osIEdGUF9LRVJORUwpOwogCWlmICghcG9ydC0+YnVsa19pbl9idWZmZXIpIHsKLQkJa2ZyZWUgKHByaXYpOworCQlrZnJlZShwcml2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmIChwb3J0LT5yZWFkX3VyYikgewpAQCAtMTMwOSw3ICsxMzQ5LDcgQEAKIAogCS8qIEZyZWUgcG9ydCdzIGV4aXN0aW5nIHdyaXRlIHVyYiBhbmQgdHJhbnNmZXIgYnVmZmVyLiAqLwogCWlmIChwb3J0LT53cml0ZV91cmIpIHsKLQkJdXNiX2ZyZWVfdXJiIChwb3J0LT53cml0ZV91cmIpOworCQl1c2JfZnJlZV91cmIocG9ydC0+d3JpdGVfdXJiKTsKIAkJcG9ydC0+d3JpdGVfdXJiID0gTlVMTDsKIAl9CiAJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKQEAgLTEzMTcsNyArMTM1Nyw3IEBACiAKIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcHJpdik7CiAKLQlmdGRpX2RldGVybWluZV90eXBlIChwb3J0KTsKKwlmdGRpX2RldGVybWluZV90eXBlKHBvcnQpOwogCWNyZWF0ZV9zeXNmc19hdHRycyhwb3J0KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMjUsOSArMTM2NSw5IEBACiAvKiBTZXR1cCBmb3IgdGhlIFVTQi1VSVJUIGRldmljZSwgd2hpY2ggcmVxdWlyZXMgaGFyZHdpcmVkCiAgKiBiYXVkcmF0ZSAoMzg0MDAgZ2V0cyBtYXBwZWQgdG8gMzEyNTAwKSAqLwogLyogQ2FsbGVkIGZyb20gdXNic2VyaWFsOnNlcmlhbF9wcm9iZSAqLwotc3RhdGljIHZvaWQgZnRkaV9VU0JfVUlSVF9zZXR1cCAoc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdikKK3N0YXRpYyB2b2lkIGZ0ZGlfVVNCX1VJUlRfc2V0dXAoc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdikKIHsKLQlkYmcoIiVzIixfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXByaXYtPmZsYWdzIHw9IEFTWU5DX1NQRF9DVVNUOwogCXByaXYtPmN1c3RvbV9kaXZpc29yID0gNzc7CkBAIC0xMzM2LDkgKzEzNzYsMTAgQEAKIAogLyogU2V0dXAgZm9yIHRoZSBIRS1USVJBMSBkZXZpY2UsIHdoaWNoIHJlcXVpcmVzIGhhcmR3aXJlZAogICogYmF1ZHJhdGUgKDM4NDAwIGdldHMgbWFwcGVkIHRvIDEwMDAwMCkgYW5kIFJUUy1DVFMgZW5hYmxlZC4gICovCi1zdGF0aWMgdm9pZCBmdGRpX0hFX1RJUkExX3NldHVwIChzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2KQorCitzdGF0aWMgdm9pZCBmdGRpX0hFX1RJUkExX3NldHVwKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpCiB7Ci0JZGJnKCIlcyIsX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlwcml2LT5mbGFncyB8PSBBU1lOQ19TUERfQ1VTVDsKIAlwcml2LT5jdXN0b21fZGl2aXNvciA9IDI0MDsKQEAgLTEzNTYsNyArMTM5Nyw3IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZXJpYWwtPmRldjsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gc2VyaWFsLT5pbnRlcmZhY2U7CiAKLQlkYmcoIiVzIixfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCWlmIChpbnRlcmZhY2UgPT0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF0pIHsKIAkJaW5mbygiSWdub3Jpbmcgc2VyaWFsIHBvcnQgcmVzZXJ2ZWQgZm9yIEpUQUciKTsKQEAgLTEzOTAsNyArMTQzMSw3IEBACiAgKiAgICAgIGNhbGxzIF9fc2VyaWFsX2Nsb3NlIGZvciBlYWNoIG9wZW4gb2YgdGhlIHBvcnQKICAqICAgICAgc2h1dGRvd24gaXMgY2FsbGVkIHRoZW4gKGllIGZ0ZGlfc2h1dGRvd24pCiAgKi8KLXN0YXRpYyB2b2lkIGZ0ZGlfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBmdGRpX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIH0KQEAgLTE0MDQsNyArMTQ0NSw3IEBACiAJcmVtb3ZlX3N5c2ZzX2F0dHJzKHBvcnQpOwogCiAJLyogYWxsIG9wZW4gcG9ydHMgYXJlIGNsb3NlZCBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAqICAgIChieSB1c2JzZXJpYWwuYzpfX3NlcmlhbF9jbG9zZSwgd2hpY2ggY2FsbHMgZnRkaV9jbG9zZSkKKwkgKiAgICAoYnkgdXNic2VyaWFsLmM6X19zZXJpYWxfY2xvc2UsIHdoaWNoIGNhbGxzIGZ0ZGlfY2xvc2UpCiAJICovCiAKIAlpZiAocHJpdikgewpAQCAtMTQxNSw3ICsxNDU2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCAgZnRkaV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZnRkaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsgLyogZnRkaV9vcGVuICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC0xNDMzLDggKzE0NzUsOCBAQAogCXByaXYtPnJ4X2J5dGVzID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CiAKLQlpZiAocG9ydC0+dHR5KQotCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gKHByaXYtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IChwcml2LT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOwogCiAJLyogTm8gZXJyb3IgY2hlY2tpbmcgZm9yIHRoaXMgKHdpbGwgZ2V0IGVycm9ycyBsYXRlciBhbnl3YXkpICovCiAJLyogU2VlIGZ0ZGlfc2lvLmggZm9yIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXMgcmVzZXQgKi8KQEAgLTE0NDgsOCArMTQ5MCw4IEBACiAJICAgVGhpcyBpcyBzYW1lIGJlaGF2aW91ciBhcyBzZXJpYWwuYy9yc19vcGVuKCkgLSBLdWJhICovCiAKIAkvKiBmdGRpX3NldF90ZXJtaW9zICB3aWxsIHNlbmQgdXNiIGNvbnRyb2wgbWVzc2FnZXMgKi8KLQlpZiAocG9ydC0+dHR5KQotCQlmdGRpX3NldF90ZXJtaW9zKHBvcnQsIHBvcnQtPnR0eS0+dGVybWlvcyk7CisJaWYgKHR0eSkKKwkJZnRkaV9zZXRfdGVybWlvcyh0dHksIHBvcnQsIHR0eS0+dGVybWlvcyk7CiAKIAkvKiBGSVhNRTogRmxvdyBjb250cm9sIG1pZ2h0IGJlIGVuYWJsZWQsIHNvIGl0IHNob3VsZCBiZSBjaGVja2VkIC0KIAkgICB3ZSBoYXZlIG5vIGNvbnRyb2wgb2YgZGVmYXVsdHMhICovCkBAIC0xNDY0LDEyICsxNTA2LDE0IEBACiAJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAlwcml2LT5yeF9wcm9jZXNzZWQgPSAwOwogCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBkZXYsCi0JCSAgICAgIHVzYl9yY3ZidWxrcGlwZShkZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCSAgICAgIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwkJCXVzYl9yY3ZidWxrcGlwZShkZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpCi0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAKIAogCXJldHVybiByZXN1bHQ7CkBAIC0xNDg1LDE2ICsxNTI5LDE3IEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkIGZ0ZGlfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgZnRkaV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7IC8qIGZ0ZGlfY2xvc2UgKi8KLQl1bnNpZ25lZCBpbnQgY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwl1bnNpZ25lZCBpbnQgY19jZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWNoYXIgYnVmWzFdOwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCW11dGV4X2xvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7Ci0JaWYgKGNfY2ZsYWcgJiBIVVBDTCAmJiAhcG9ydC0+c2VyaWFsLT5kaXNjb25uZWN0ZWQpeworCWlmIChjX2NmbGFnICYgSFVQQ0wgJiYgIXBvcnQtPnNlcmlhbC0+ZGlzY29ubmVjdGVkKSB7CiAJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCiAJCWlmICh1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkJICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCkBAIC0xNTI3LDcgKzE1NzIsNyBAQAogICoKICAqIFRoZSBuZXcgZGV2aWNlcyBkbyBub3QgcmVxdWlyZSB0aGlzIGJ5dGUKICAqLwotc3RhdGljIGludCBmdGRpX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorc3RhdGljIGludCBmdGRpX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsgLyogZnRkaV93cml0ZSAqLwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC0xNTU0LDcgKzE1OTksNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKTsKIAogCWRhdGFfb2Zmc2V0ID0gcHJpdi0+d3JpdGVfb2Zmc2V0OwotICAgICAgICBkYmcoImRhdGFfb2Zmc2V0IHNldCB0byAlZCIsZGF0YV9vZmZzZXQpOworCWRiZygiZGF0YV9vZmZzZXQgc2V0IHRvICVkIiwgZGF0YV9vZmZzZXQpOwogCiAJLyogRGV0ZXJtaW5lIHRvdGFsIHRyYW5zZmVyIHNpemUgKi8KIAl0cmFuc2Zlcl9zaXplID0gY291bnQ7CkBAIC0xNTY1LDcgKzE2MTAsNyBAQAogCQkJCSAoUEtUU1ogLSBkYXRhX29mZnNldCkpKTsKIAl9CiAKLQlidWZmZXIgPSBrbWFsbG9jICh0cmFuc2Zlcl9zaXplLCBHRlBfQVRPTUlDKTsKKwlidWZmZXIgPSBrbWFsbG9jKHRyYW5zZmVyX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZmVyKSB7CiAJCWVycigiJXMgcmFuIG91dCBvZiBrZXJuZWwgbWVtb3J5IGZvciB1cmIgLi4uIiwgX19mdW5jX18pOwogCQljb3VudCA9IC1FTk9NRU07CkBAIC0xNTgxLDIwICsxNjI2LDIwIEBACiAKIAkvKiBDb3B5IGRhdGEgKi8KIAlpZiAoZGF0YV9vZmZzZXQgPiAwKSB7Ci0JCS8qIE9yaWdpbmFsIHNpbyByZXF1aXJlcyBjb250cm9sIGJ5dGUgYXQgc3RhcnQgb2YgZWFjaCBwYWNrZXQuICovCisJCS8qIE9yaWdpbmFsIHNpbyByZXF1aXJlcyBjb250cm9sIGJ5dGUgYXQgc3RhcnQgb2YKKwkJICAgZWFjaCBwYWNrZXQuICovCiAJCWludCB1c2VyX3BrdHN6ID0gUEtUU1ogLSBkYXRhX29mZnNldDsKIAkJaW50IHRvZG8gPSBjb3VudDsKIAkJdW5zaWduZWQgY2hhciAqZmlyc3RfYnl0ZSA9IGJ1ZmZlcjsKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqY3VycmVudF9wb3NpdGlvbiA9IGJ1ZjsKIAogCQl3aGlsZSAodG9kbyA+IDApIHsKLQkJCWlmICh1c2VyX3BrdHN6ID4gdG9kbykgeworCQkJaWYgKHVzZXJfcGt0c3ogPiB0b2RvKQogCQkJCXVzZXJfcGt0c3ogPSB0b2RvOwotCQkJfQogCQkJLyogV3JpdGUgdGhlIGNvbnRyb2wgYnl0ZSBhdCB0aGUgZnJvbnQgb2YgdGhlIHBhY2tldCovCiAJCQkqZmlyc3RfYnl0ZSA9IDEgfCAoKHVzZXJfcGt0c3opIDw8IDIpOwogCQkJLyogQ29weSBkYXRhIGZvciBwYWNrZXQgKi8KLQkJCW1lbWNweSAoZmlyc3RfYnl0ZSArIGRhdGFfb2Zmc2V0LAorCQkJbWVtY3B5KGZpcnN0X2J5dGUgKyBkYXRhX29mZnNldCwKIAkJCQljdXJyZW50X3Bvc2l0aW9uLCB1c2VyX3BrdHN6KTsKIAkJCWZpcnN0X2J5dGUgKz0gdXNlcl9wa3RzeiArIGRhdGFfb2Zmc2V0OwogCQkJY3VycmVudF9wb3NpdGlvbiArPSB1c2VyX3BrdHN6OwpAQCAtMTYwMywyMCArMTY0OCwyMyBAQAogCX0gZWxzZSB7CiAJCS8qIE5vIGNvbnRyb2wgYnl0ZSByZXF1aXJlZC4gKi8KIAkJLyogQ29weSBpbiB0aGUgZGF0YSB0byBzZW5kICovCi0JCW1lbWNweSAoYnVmZmVyLCBidWYsIGNvdW50KTsKKwkJbWVtY3B5KGJ1ZmZlciwgYnVmLCBjb3VudCk7CiAJfQogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgdHJhbnNmZXJfc2l6ZSwgYnVmZmVyKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAorCQkJCQkJdHJhbnNmZXJfc2l6ZSwgYnVmZmVyKTsKIAogCS8qIGZpbGwgdGhlIGJ1ZmZlciBhbmQgc2VuZCBpdCAqLwogCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCi0JCSAgICAgIHVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKLQkJICAgICAgYnVmZmVyLCB0cmFuc2Zlcl9zaXplLAotCQkgICAgICBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCQkJdXNiX3NuZGJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJYnVmZmVyLCB0cmFuc2Zlcl9zaXplLAorCQkJZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHN0YXR1cykgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCisJCQkJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCWNvdW50ID0gc3RhdHVzOwogCQlnb3RvIGVycm9yOwogCX0gZWxzZSB7CkBAIC0xNjM1LDcgKzE2ODMsNyBAQAogZXJyb3I6CiAJdXNiX2ZyZWVfdXJiKHVyYik7CiBlcnJvcl9ub191cmI6Ci0Ja2ZyZWUgKGJ1ZmZlcik7CisJa2ZyZWUoYnVmZmVyKTsKIGVycm9yX25vX2J1ZmZlcjoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCXByaXYtPnR4X291dHN0YW5kaW5nX3VyYnMtLTsKQEAgLTE2NDYsNyArMTY5NCw3IEBACiAKIC8qIFRoaXMgZnVuY3Rpb24gbWF5IGdldCBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGNsb3NlZCAqLwogCi1zdGF0aWMgdm9pZCBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIGZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwpAQCAtMTY1Niw3ICsxNzA0LDcgQEAKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKIAkvKiBmcmVlIHVwIHRoZSB0cmFuc2ZlciBidWZmZXIsIGFzIHVzYl9mcmVlX3VyYigpIGRvZXMgbm90IGRvIHRoaXMgKi8KLQlrZnJlZSAodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKQEAgLTE2ODYsOCArMTczNCw5IEBACiB9IC8qIGZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjayAqLwogCiAKLXN0YXRpYyBpbnQgZnRkaV93cml0ZV9yb29tKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3N0YXRpYyBpbnQgZnRkaV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgcm9vbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTcwNywxMSArMTc1NiwxMSBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJvb207Ci19IC8qIGZ0ZGlfd3JpdGVfcm9vbSAqLworfQogCi0KLXN0YXRpYyBpbnQgZnRkaV9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17IC8qIGZ0ZGlfY2hhcnNfaW5fYnVmZmVyICovCitzdGF0aWMgaW50IGZ0ZGlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgYnVmZmVyZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE3MjYsMTIgKzE3NzUsMTAgQEAKIAkJYnVmZmVyZWQgPSAwOwogCX0KIAlyZXR1cm4gYnVmZmVyZWQ7Ci19IC8qIGZ0ZGlfY2hhcnNfaW5fYnVmZmVyICovCit9CiAKLQotCi1zdGF0aWMgdm9pZCBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQoteyAvKiBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayAqLworc3RhdGljIHZvaWQgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQorewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OwpAQCAtMTc0MCwxOSArMTc4NywyMSBAQAogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAogCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID4gMCkgewotCQllcnIoIiVzIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJWQgYWN0dWFsX2xlbmd0aCAlZCBudW1iZXIgb2YgcGFja2V0cyAlZCIsX19mdW5jX18sCi0JCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyApOwotCQllcnIoIiVzIHRyYW5zZmVyX2ZsYWdzICV4ICIsIF9fZnVuY19fLHVyYi0+dHJhbnNmZXJfZmxhZ3MgKTsKKwkJZXJyKCIlcyB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICVkIGFjdHVhbF9sZW5ndGggJWQgbnVtYmVyIG9mIHBhY2tldHMgJWQiLAorCQkJCV9fZnVuY19fLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCQllcnIoIiVzIHRyYW5zZmVyX2ZsYWdzICV4ICIsIF9fZnVuY19fLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKIAl9CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JaWYgKHBvcnQtPm9wZW5fY291bnQgPD0gMCkKKwlpZiAocG9ydC0+cG9ydC5jb3VudCA8PSAwKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT50dHk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJaWYgKCF0dHkpIHsKLQkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE3NjIsMTQgKzE4MTEsMTMgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1cmIgIT0gcG9ydC0+cmVhZF91cmIpIHsKKwlpZiAodXJiICE9IHBvcnQtPnJlYWRfdXJiKQogCQllcnIoIiVzIC0gTm90IG15IHVyYiEiLCBfX2Z1bmNfXyk7Ci0JfQogCiAJaWYgKHN0YXR1cykgewotCQkvKiBUaGlzIHdpbGwgaGFwcGVuIGF0IGNsb3NlIGV2ZXJ5IHRpbWUgc28gaXQgaXMgYSBkYmcgbm90IGFuIGVyciAqLwotCQlkYmcoIih0aGlzIGlzIG9rIG9uIGNsb3NlKSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICIKLQkJICAgICIlZCIsIHN0YXR1cyk7CisJCS8qIFRoaXMgd2lsbCBoYXBwZW4gYXQgY2xvc2UgZXZlcnkgdGltZSBzbyBpdCBpcyBhIGRiZyBub3QgYW4KKwkJICAgZXJyICovCisJCWRiZygiKHRoaXMgaXMgb2sgb24gY2xvc2UpIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNzg1LDcgKzE4MzMsNyBAQAogfSAvKiBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayAqLwogCiAKLXN0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7IC8qIGZ0ZGlfcHJvY2Vzc19yZWFkICovCiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnRkaV9wcml2YXRlLCByeF93b3JrLndvcmspOwpAQCAtMTgwMywxMiArMTg1MSwxMiBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCWlmIChwb3J0LT5vcGVuX2NvdW50IDw9IDApCisJaWYgKHBvcnQtPnBvcnQuY291bnQgPD0gMCkKIAkJcmV0dXJuOwogCi0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCWlmICghdHR5KSB7Ci0JCWRiZygiJXMgLSBiYWQgdHR5IHBvaW50ZXIgLSBleGl0aW5nIixfX2Z1bmNfXyk7CisJCWRiZygiJXMgLSBiYWQgdHR5IHBvaW50ZXIgLSBleGl0aW5nIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC0xODMyLDExICsxODgwLDExIEBACiAJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoIC0gcHJpdi0+cnhfcHJvY2Vzc2VkKTsKIAl9IGVsc2UgewogCQkvKiBUaGUgZmlyc3QgdHdvIGJ5dGVzIG9mIGV2ZXJ5IHJlYWQgcGFja2V0IGFyZSBzdGF0dXMgKi8KLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDIpIHsKLQkJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQlkYmcoIlN0YXR1cyBvbmx5OiAlMDNvbyAlMDNvbyIsZGF0YVswXSxkYXRhWzFdKTsKLQkJfQorCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMikKKwkJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCisJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCQllbHNlCisJCQlkYmcoIlN0YXR1cyBvbmx5OiAlMDNvbyAlMDNvbyIsIGRhdGFbMF0sIGRhdGFbMV0pOwogCX0KIAogCkBAIC0xODQ2LDE2ICsxODk0LDE5IEBACiAJLyogaWYgQ0QgaXMgZHJvcHBlZCBhbmQgdGhlIGxpbmUgaXMgbm90IENMT0NBTCB0aGVuIHdlIHNob3VsZCBoYW5ndXAgKi8KIAogCW5lZWRfZmxpcCA9IDA7Ci0JZm9yIChwYWNrZXRfb2Zmc2V0ID0gcHJpdi0+cnhfcHJvY2Vzc2VkOyBwYWNrZXRfb2Zmc2V0IDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBwYWNrZXRfb2Zmc2V0ICs9IFBLVFNaKSB7CisJZm9yIChwYWNrZXRfb2Zmc2V0ID0gcHJpdi0+cnhfcHJvY2Vzc2VkOworCQlwYWNrZXRfb2Zmc2V0IDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBwYWNrZXRfb2Zmc2V0ICs9IFBLVFNaKSB7CiAJCWludCBsZW5ndGg7CiAKLQkJLyogQ29tcGFyZSBuZXcgbGluZSBzdGF0dXMgdG8gdGhlIG9sZCBvbmUsIHNpZ25hbCBpZiBkaWZmZXJlbnQgKi8KLQkJLyogTi5CLiBwYWNrZXQgbWF5IGJlIHByb2Nlc3NlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGRpZmZlcmVuY2VzCi0JCSAqIGFyZSBvbmx5IHByb2Nlc3NlZCBvbmNlLiAgKi8KKwkJLyogQ29tcGFyZSBuZXcgbGluZSBzdGF0dXMgdG8gdGhlIG9sZCBvbmUsIHNpZ25hbCBpZiBkaWZmZXJlbnQvCisJCSAgIE4uQi4gcGFja2V0IG1heSBiZSBwcm9jZXNzZWQgbW9yZSB0aGFuIG9uY2UsIGJ1dCBkaWZmZXJlbmNlcworCQkgICBhcmUgb25seSBwcm9jZXNzZWQgb25jZS4gICovCiAJCWlmIChwcml2ICE9IE5VTEwpIHsKLQkJCWNoYXIgbmV3X3N0YXR1cyA9IGRhdGFbcGFja2V0X29mZnNldCswXSAmIEZURElfU1RBVFVTX0IwX01BU0s7CisJCQljaGFyIG5ld19zdGF0dXMgPSBkYXRhW3BhY2tldF9vZmZzZXQgKyAwXSAmCisJCQkJCQkJRlRESV9TVEFUVVNfQjBfTUFTSzsKIAkJCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7Ci0JCQkJcHJpdi0+ZGlmZl9zdGF0dXMgfD0gbmV3X3N0YXR1cyBeIHByaXYtPnByZXZfc3RhdHVzOworCQkJCXByaXYtPmRpZmZfc3RhdHVzIHw9CisJCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKIAkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKIAkJCQlwcml2LT5wcmV2X3N0YXR1cyA9IG5ld19zdGF0dXM7CiAJCQl9CkBAIC0xODcyLDMwICsxOTIzLDMxIEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW5ndGgpIDwgbGVuZ3RoKSB7Ci0JCQkvKiBicmVhayBvdXQgJiB3YWl0IGZvciB0aHJvdHRsaW5nL3VudGhyb3R0bGluZyB0byBoYXBwZW4gKi8KKwkJCS8qIGJyZWFrIG91dCAmIHdhaXQgZm9yIHRocm90dGxpbmcvdW50aHJvdHRsaW5nIHRvCisJCQkgICBoYXBwZW4gKi8KIAkJCWRiZygiJXMgLSByZWNlaXZlIHJvb20gbG93IiwgX19mdW5jX18pOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBIYW5kbGUgZXJyb3JzIGFuZCBicmVhayAqLwogCQllcnJvcl9mbGFnID0gVFRZX05PUk1BTDsKLQkJLyogQWx0aG91Z2ggdGhlIGRldmljZSB1c2VzIGEgYml0bWFzayBhbmQgaGVuY2UgY2FuIGhhdmUgbXVsdGlwbGUgKi8KLQkJLyogZXJyb3JzIG9uIGEgcGFja2V0IC0gdGhlIG9yZGVyIGhlcmUgc2V0cyB0aGUgcHJpb3JpdHkgdGhlICovCi0JCS8qIGVycm9yIGlzIHJldHVybmVkIHRvIHRoZSB0dHkgbGF5ZXIgICovCisJCS8qIEFsdGhvdWdoIHRoZSBkZXZpY2UgdXNlcyBhIGJpdG1hc2sgYW5kIGhlbmNlIGNhbiBoYXZlCisJCSAgIG11bHRpcGxlIGVycm9ycyBvbiBhIHBhY2tldCAtIHRoZSBvcmRlciBoZXJlIHNldHMgdGhlCisJCSAgIHByaW9yaXR5IHRoZSBlcnJvciBpcyByZXR1cm5lZCB0byB0aGUgdHR5IGxheWVyICAqLwogCi0JCWlmICggZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19PRSApIHsKKwkJaWYgKGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfT0UpIHsKIAkJCWVycm9yX2ZsYWcgPSBUVFlfT1ZFUlJVTjsKIAkJCWRiZygiT1ZFUlJSVU4gZXJyb3IiKTsKIAkJfQotCQlpZiAoIGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfQkkgKSB7CisJCWlmIChkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX0JJKSB7CiAJCQllcnJvcl9mbGFnID0gVFRZX0JSRUFLOwogCQkJZGJnKCJCUkVBSyByZWNlaXZlZCIpOwogCQl9Ci0JCWlmICggZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19QRSApIHsKKwkJaWYgKGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfUEUpIHsKIAkJCWVycm9yX2ZsYWcgPSBUVFlfUEFSSVRZOwogCQkJZGJnKCJQQVJJVFkgZXJyb3IiKTsKIAkJfQotCQlpZiAoIGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfRkUgKSB7CisJCWlmIChkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX0ZFKSB7CiAJCQllcnJvcl9mbGFnID0gVFRZX0ZSQU1FOwogCQkJZGJnKCJGUkFNSU5HIGVycm9yIik7CiAJCX0KQEAgLTE5MDQsNyArMTk1Niw4IEBACiAJCQkJLyogTm90ZSB0aGF0IHRoZSBlcnJvciBmbGFnIGlzIGR1cGxpY2F0ZWQgZm9yCiAJCQkJICAgZXZlcnkgY2hhcmFjdGVyIHJlY2VpdmVkIHNpbmNlIHdlIGRvbid0IGtub3cKIAkJCQkgICB3aGljaCBjaGFyYWN0ZXIgaXQgYXBwbGllZCB0byAqLwotCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtwYWNrZXRfb2Zmc2V0K2ldLCBlcnJvcl9mbGFnKTsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksCisJCQkJCWRhdGFbcGFja2V0X29mZnNldCArIGldLCBlcnJvcl9mbGFnKTsKIAkJCX0KIAkJCW5lZWRfZmxpcCA9IDE7CiAJCX0KQEAgLTE5MTIsMTkgKzE5NjUsMTkgQEAKICNpZmRlZiBOT1RfQ09SUkVDVF9CVVRfS0VFUElOR19JVF9GT1JfTk9XCiAJCS8qIGlmIGEgcGFyaXR5IGVycm9yIGlzIGRldGVjdGVkIHlvdSBnZXQgc3RhdHVzIHBhY2tldHMgZm9yZXZlcgogCQkgICB1bnRpbCBhIGNoYXJhY3RlciBpcyBzZW50IHdpdGhvdXQgYSBwYXJpdHkgZXJyb3IuCi0JCSAgIFRoaXMgZG9lc24ndCB3b3JrIHdlbGwgc2luY2UgdGhlIGFwcGxpY2F0aW9uIHJlY2VpdmVzIGEgbmV2ZXIKLQkJICAgZW5kaW5nIHN0cmVhbSBvZiBiYWQgZGF0YSAtIGV2ZW4gdGhvdWdoIG5ldyBkYXRhIGhhc24ndCBiZWVuIHNlbnQuCi0JCSAgIFRoZXJlZm9yZSBJIChiaWxsKSBoYXZlIHRha2VuIHRoaXMgb3V0LgorCQkgICBUaGlzIGRvZXNuJ3Qgd29yayB3ZWxsIHNpbmNlIHRoZSBhcHBsaWNhdGlvbiByZWNlaXZlcyBhCisJCSAgIG5ldmVyIGVuZGluZyBzdHJlYW0gb2YgYmFkIGRhdGEgLSBldmVuIHRob3VnaCBuZXcgZGF0YQorCQkgICBoYXNuJ3QgYmVlbiBzZW50LiBUaGVyZWZvcmUgSSAoYmlsbCkgaGF2ZSB0YWtlbiB0aGlzIG91dC4KIAkJICAgSG93ZXZlciAtIHRoaXMgbWlnaHQgbWFrZSBzZW5zZSBmb3IgZnJhbWluZyBlcnJvcnMgYW5kIHNvIG9uCiAJCSAgIHNvIEkgYW0gbGVhdmluZyB0aGUgY29kZSBpbiBmb3Igbm93LgogCQkqLwogCQllbHNlIHsKLQkJCWlmIChlcnJvcl9mbGFnICE9IFRUWV9OT1JNQUwpeworCQkJaWYgKGVycm9yX2ZsYWcgIT0gVFRZX05PUk1BTCkgewogCQkJCWRiZygiZXJyb3JfZmxhZyBpcyBub3Qgbm9ybWFsIik7Ci0JCQkJLyogSW4gdGhpcyBjYXNlIGl0IGlzIGp1c3Qgc3RhdHVzIC0gaWYgdGhhdCBpcyBhbiBlcnJvciBzZW5kIGEgYmFkIGNoYXJhY3RlciAqLwotCQkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJLyogSW4gdGhpcyBjYXNlIGl0IGlzIGp1c3Qgc3RhdHVzIC0gaWYgdGhhdCBpcworCQkJCSAgIGFuIGVycm9yIHNlbmQgYSBiYWQgY2hhcmFjdGVyICovCisJCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKQogCQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQkJCX0KIAkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDB4ZmYsIGVycm9yX2ZsYWcpOwogCQkJCW5lZWRfZmxpcCA9IDE7CiAJCQl9CkBAIC0xOTMzLDkgKzE5ODYsOCBAQAogCX0gLyogImZvcihwYWNrZXRfb2Zmc2V0PTAuLi4iICovCiAKIAkvKiBMb3cgbGF0ZW5jeSAqLwotCWlmIChuZWVkX2ZsaXApIHsKKwlpZiAobmVlZF9mbGlwKQogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCX0KIAogCWlmIChwYWNrZXRfb2Zmc2V0IDwgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCS8qIG5vdCBjb21wbGV0ZWx5IHByb2Nlc3NlZCAtIHJlY29yZCBwcm9ncmVzcyAqLwpAQCAtMTk1NCwxMiArMjAwNiwxMSBAQAogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKIAkJLyogaWYgdGhlIHBvcnQgaXMgY2xvc2VkIHN0b3AgdHJ5aW5nIHRvIHJlYWQgKi8KLQkJaWYgKHBvcnQtPm9wZW5fY291bnQgPiAwKXsKKwkJaWYgKHBvcnQtPnBvcnQuY291bnQgPiAwKQogCQkJLyogZGVsYXkgcHJvY2Vzc2luZyBvZiByZW1haW5kZXIgKi8KIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+cnhfd29yaywgMSk7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWRiZygiJXMgLSBwb3J0IGlzIGNsb3NlZCIsIF9fZnVuY19fKTsKLQkJfQogCQlyZXR1cm47CiAJfQogCkBAIC0xOTY3LDI0ICsyMDE4LDI2IEBACiAJcHJpdi0+cnhfcHJvY2Vzc2VkID0gMDsKIAogCS8qIGlmIHRoZSBwb3J0IGlzIGNsb3NlZCBzdG9wIHRyeWluZyB0byByZWFkICovCi0JaWYgKHBvcnQtPm9wZW5fY291bnQgPiAwKXsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCA+IDApIHsKIAkJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwogCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCi0JCQkgICAgICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJICAgICAgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCQkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KQotCQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCX0KLQotCXJldHVybjsKIH0gLyogZnRkaV9wcm9jZXNzX3JlYWQgKi8KIAogCi1zdGF0aWMgdm9pZCBmdGRpX2JyZWFrX2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICkKK3N0YXRpYyB2b2lkIGZ0ZGlfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCV9fdTE2IHVyYl92YWx1ZSA9IDA7CiAJY2hhciBidWZbMV07CkBAIC0xOTkzLDIyICsyMDQ2LDIzIEBACiAJLyogc2VlIGRyaXZlcnMvY2hhci90dHlfaW8uYyB0byBzZWUgaXQgdXNlZCAqLwogCS8qIGxhc3Rfc2V0X2RhdGFfdXJiX3ZhbHVlIE5FVkVSIGhhcyB0aGUgYnJlYWsgYml0IHNldCBpbiBpdCAqLwogCi0JaWYgKGJyZWFrX3N0YXRlKSB7CisJaWYgKGJyZWFrX3N0YXRlKQogCQl1cmJfdmFsdWUgPSBwcml2LT5sYXN0X3NldF9kYXRhX3VyYl92YWx1ZSB8IEZURElfU0lPX1NFVF9CUkVBSzsKLQl9IGVsc2UgeworCWVsc2UKIAkJdXJiX3ZhbHVlID0gcHJpdi0+bGFzdF9zZXRfZGF0YV91cmJfdmFsdWU7CisKKwlpZiAodXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCUZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1QsCisJCQlGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUX1RZUEUsCisJCQl1cmJfdmFsdWUgLCBwcml2LT5pbnRlcmZhY2UsCisJCQlidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJZXJyKCIlcyBGQUlMRUQgdG8gZW5hYmxlL2Rpc2FibGUgYnJlYWsgc3RhdGUgKHN0YXRlIHdhcyAlZCkiLAorCQkJCQkJCV9fZnVuY19fLCBicmVha19zdGF0ZSk7CiAJfQogCi0KLQlpZiAodXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAotCQkJICAgIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1QsCi0JCQkgICAgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFLAotCQkJICAgIHVyYl92YWx1ZSAsIHByaXYtPmludGVyZmFjZSwKLQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJZXJyKCIlcyBGQUlMRUQgdG8gZW5hYmxlL2Rpc2FibGUgYnJlYWsgc3RhdGUgKHN0YXRlIHdhcyAlZCkiLCBfX2Z1bmNfXyxicmVha19zdGF0ZSk7Ci0JfQotCi0JZGJnKCIlcyBicmVhayBzdGF0ZSBpcyAlZCAtIHVyYiBpcyAlZCIsIF9fZnVuY19fLGJyZWFrX3N0YXRlLCB1cmJfdmFsdWUpOworCWRiZygiJXMgYnJlYWsgc3RhdGUgaXMgJWQgLSB1cmIgaXMgJWQiLCBfX2Z1bmNfXywKKwkJCQkJCWJyZWFrX3N0YXRlLCB1cmJfdmFsdWUpOwogCiB9CiAKQEAgLTIwMTgsMjYgKzIwNzIsMjggQEAKICAqIFdBUk5JTkc6IHNldF90ZXJtaW9zIGNhbGxzIHRoaXMgd2l0aCBvbGRfdGVybWlvcyBpbiBrZXJuZWwgc3BhY2UKICAqLwogCi1zdGF0aWMgdm9pZCBmdGRpX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgZnRkaV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogeyAvKiBmdGRpX3Rlcm1pb3MgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MgPSBwb3J0LT50dHktPnRlcm1pb3M7CisJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zID0gdHR5LT50ZXJtaW9zOwogCXVuc2lnbmVkIGludCBjZmxhZyA9IHRlcm1pb3MtPmNfY2ZsYWc7CiAJX191MTYgdXJiX3ZhbHVlOyAvKiB3aWxsIGhvbGQgdGhlIG5ldyBmbGFncyAqLwogCWNoYXIgYnVmWzFdOyAvKiBQZXJoYXBzIEkgc2hvdWxkIGR5bmFtaWNhbGx5IGFsbG9jIHRoaXM/ICovCiAKLQkvLyBBZGRlZCBmb3IgeG9uL3hvZmYgc3VwcG9ydAorCS8qIEFkZGVkIGZvciB4b24veG9mZiBzdXBwb3J0ICovCiAJdW5zaWduZWQgaW50IGlmbGFnID0gdGVybWlvcy0+Y19pZmxhZzsKIAl1bnNpZ25lZCBjaGFyIHZzdG9wOwogCXVuc2lnbmVkIGNoYXIgdnN0YXJ0OwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAotCS8qIEZvcmNlIGJhdWQgcmF0ZSBpZiB0aGlzIGRldmljZSByZXF1aXJlcyBpdCwgdW5sZXNzIGl0IGlzIHNldCB0byBCMC4gKi8KKwkvKiBGb3JjZSBiYXVkIHJhdGUgaWYgdGhpcyBkZXZpY2UgcmVxdWlyZXMgaXQsIHVubGVzcyBpdCBpcyBzZXQgdG8KKwkgICBCMC4gKi8KIAlpZiAocHJpdi0+Zm9yY2VfYmF1ZCAmJiAoKHRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgIT0gQjApKSB7CiAJCWRiZygiJXM6IGZvcmNpbmcgYmF1ZCByYXRlIGZvciB0aGlzIGRldmljZSIsIF9fZnVuY19fKTsKLQkJdHR5X2VuY29kZV9iYXVkX3JhdGUocG9ydC0+dHR5LCBwcml2LT5mb3JjZV9iYXVkLAorCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIHByaXYtPmZvcmNlX2JhdWQsCiAJCQkJCXByaXYtPmZvcmNlX2JhdWQpOwogCX0KIApAQCAtMjA1Myw4ICsyMTA5LDggQEAKIAkgICBub3QgIC0gc28ganVzdCBkbyB0aGUgY2hhbmdlIHJlZ2FyZGxlc3MgIC0gc2hvdWxkIGJlIGFibGUgdG8KIAkgICBjb21wYXJlIG9sZF90ZXJtaW9zIGFuZCB0dHktPnRlcm1pb3MgKi8KIAkvKiBOT1RFIFRoZXNlIHJvdXRpbmVzIGNhbiBnZXQgaW50ZXJydXB0ZWQgYnkKLQkgICBmdGRpX3Npb19yZWFkX2J1bGtfY2FsbGJhY2sgIC0gbmVlZCB0byBleGFtaW5lIHdoYXQgdGhpcwotICAgICAgICAgICBtZWFucyAtIGRvbid0IHNlZSBhbnkgcHJvYmxlbXMgeWV0ICovCisJICAgZnRkaV9zaW9fcmVhZF9idWxrX2NhbGxiYWNrICAtIG5lZWQgdG8gZXhhbWluZSB3aGF0IHRoaXMgbWVhbnMgLQorCSAgIGRvbid0IHNlZSBhbnkgcHJvYmxlbXMgeWV0ICovCiAKIAkvKiBTZXQgbnVtYmVyIG9mIGRhdGEgYml0cywgcGFyaXR5LCBzdG9wIGJpdHMgKi8KIApAQCAtMjA3OCw4ICsyMTM0LDggQEAKIAkJfQogCX0KIAotCS8qIFRoaXMgaXMgbmVlZGVkIGJ5IHRoZSBicmVhayBjb21tYW5kIHNpbmNlIGl0IHVzZXMgdGhlIHNhbWUgY29tbWFuZCAtIGJ1dCBpcwotCSAqICBvcidlZCB3aXRoIHRoaXMgdmFsdWUgICovCisJLyogVGhpcyBpcyBuZWVkZWQgYnkgdGhlIGJyZWFrIGNvbW1hbmQgc2luY2UgaXQgdXNlcyB0aGUgc2FtZSBjb21tYW5kCisJICAgLSBidXQgaXMgb3InZWQgd2l0aCB0aGlzIHZhbHVlICAqLwogCXByaXYtPmxhc3Rfc2V0X2RhdGFfdXJiX3ZhbHVlID0gdXJiX3ZhbHVlOwogCiAJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLApAQCAtMjA5MSw3ICsyMTQ3LDcgQEAKIAl9CiAKIAkvKiBOb3cgZG8gdGhlIGJhdWRyYXRlICovCi0JaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCApIHsKKwlpZiAoKGNmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCiAJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULApAQCAtMjEwNCwxMyArMjE2MCwxMSBAQAogCQljbGVhcl9tY3RybChwb3J0LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwogCX0gZWxzZSB7CiAJCS8qIHNldCB0aGUgYmF1ZHJhdGUgZGV0ZXJtaW5lZCBiZWZvcmUgKi8KLQkJaWYgKGNoYW5nZV9zcGVlZChwb3J0KSkgeworCQlpZiAoY2hhbmdlX3NwZWVkKHR0eSwgcG9ydCkpCiAJCQllcnIoIiVzIHVyYiBmYWlsZWQgdG8gc2V0IGJhdWRyYXRlIiwgX19mdW5jX18pOwotCQl9CiAJCS8qIEVuc3VyZSBSVFMgYW5kIERUUiBhcmUgcmFpc2VkIHdoZW4gYmF1ZHJhdGUgY2hhbmdlZCBmcm9tIDAgKi8KLQkJaWYgKCFvbGRfdGVybWlvcyB8fCAob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgPT0gQjApIHsKKwkJaWYgKCFvbGRfdGVybWlvcyB8fCAob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgPT0gQjApCiAJCQlzZXRfbWN0cmwocG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKLQkJfQogCX0KIAogCS8qIFNldCBmbG93IGNvbnRyb2wgKi8KQEAgLTIxMzAsMTggKzIxODQsMjIgQEAKIAkJLyoKIAkJICogWG9uL1hvZmYgY29kZQogCQkgKgotCQkgKiBDaGVjayB0aGUgSVhPRkYgc3RhdHVzIGluIHRoZSBpZmxhZyBjb21wb25lbnQgb2YgdGhlIHRlcm1pb3Mgc3RydWN0dXJlCi0JCSAqIGlmIElYT0ZGIGlzIG5vdCBzZXQsIHRoZSBwcmUteG9uL3hvZmYgY29kZSBpcyBleGVjdXRlZC4KLQkJKi8KKwkJICogQ2hlY2sgdGhlIElYT0ZGIHN0YXR1cyBpbiB0aGUgaWZsYWcgY29tcG9uZW50IG9mIHRoZQorCQkgKiB0ZXJtaW9zIHN0cnVjdHVyZS4gSWYgSVhPRkYgaXMgbm90IHNldCwgdGhlIHByZS14b24veG9mZgorCQkgKiBjb2RlIGlzIGV4ZWN1dGVkLgorCQkgKi8KIAkJaWYgKGlmbGFnICYgSVhPRkYpIHsKLQkJCWRiZygiJXMgIHJlcXVlc3QgdG8gZW5hYmxlIHhvbnhvZmYgaWZsYWc9JTA0eCIsX19mdW5jX18saWZsYWcpOwotCQkJLy8gVHJ5IHRvIGVuYWJsZSB0aGUgWE9OL1hPRkYgb24gdGhlIGZ0ZGlfc2lvCi0JCQkvLyBTZXQgdGhlIHZzdGFydCBhbmQgdnN0b3AgLS0gY291bGQgaGF2ZSBiZWVuIGRvbmUgdXAgYWJvdmUgd2hlcmUKLQkJCS8vIGEgbG90IG9mIG90aGVyIGRlcmVmZXJlbmNpbmcgaXMgZG9uZSBidXQgdGhhdCB3b3VsZCBiZSB2ZXJ5Ci0JCQkvLyBpbmVmZmljaWVudCBhcyB2c3RhcnQgYW5kIHZzdG9wIGFyZSBub3QgYWx3YXlzIG5lZWRlZAorCQkJZGJnKCIlcyAgcmVxdWVzdCB0byBlbmFibGUgeG9ueG9mZiBpZmxhZz0lMDR4IiwKKwkJCQkJCQlfX2Z1bmNfXywgaWZsYWcpOworCQkJLyogVHJ5IHRvIGVuYWJsZSB0aGUgWE9OL1hPRkYgb24gdGhlIGZ0ZGlfc2lvCisJCQkgKiBTZXQgdGhlIHZzdGFydCBhbmQgdnN0b3AgLS0gY291bGQgaGF2ZSBiZWVuIGRvbmUgdXAKKwkJCSAqIGFib3ZlIHdoZXJlIGEgbG90IG9mIG90aGVyIGRlcmVmZXJlbmNpbmcgaXMgZG9uZSBidXQKKwkJCSAqIHRoYXQgd291bGQgYmUgdmVyeSBpbmVmZmljaWVudCBhcyB2c3RhcnQgYW5kIHZzdG9wCisJCQkgKiBhcmUgbm90IGFsd2F5cyBuZWVkZWQuCisJCQkgKi8KIAkJCXZzdGFydCA9IHRlcm1pb3MtPmNfY2NbVlNUQVJUXTsKIAkJCXZzdG9wID0gdGVybWlvcy0+Y19jY1tWU1RPUF07Ci0JCQl1cmJfdmFsdWU9KHZzdG9wIDw8IDgpIHwgKHZzdGFydCk7CisJCQl1cmJfdmFsdWUgPSAodnN0b3AgPDwgOCkgfCAodnN0YXJ0KTsKIAogCQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsCiAJCQkJCSAgICB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKQEAgLTIxNTMsOCArMjIxMSw5IEBACiAJCQkJZXJyKCJ1cmIgZmFpbGVkIHRvIHNldCB0byB4b24veG9mZiBmbG93IGNvbnRyb2wiKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCS8qIGVsc2UgY2xhdXNlIHRvIG9ubHkgcnVuIGlmIGNmYWcgISBDUlRTQ1RTIGFuZCBpZmxhZyAhIFhPRkYgKi8KLQkJCS8qIENIRUNLTUUgQXNzdW1pbmcgWE9OL1hPRkYgaGFuZGxlZCBieSB0dHkgc3RhY2sgLSBub3QgYnkgZGV2aWNlICovCisJCQkvKiBlbHNlIGNsYXVzZSB0byBvbmx5IHJ1biBpZiBjZmxhZyAhIENSVFNDVFMgYW5kIGlmbGFnCisJCQkgKiAhIFhPRkYuIENIRUNLTUUgQXNzdW1pbmcgWE9OL1hPRkYgaGFuZGxlZCBieSB0dHkKKwkJCSAqIHN0YWNrIC0gbm90IGJ5IGRldmljZSAqLwogCQkJZGJnKCIlcyBUdXJuaW5nIG9mZiBoYXJkd2FyZSBmbG93IGNvbnRyb2wiLCBfX2Z1bmNfXyk7CiAJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwKIAkJCQkJICAgIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLApAQCAtMjE2OCwxMSArMjIyNywxMSBAQAogCiAJfQogCXJldHVybjsKLX0gLyogZnRkaV90ZXJtaW9zICovCit9CiAKLQotc3RhdGljIGludCBmdGRpX3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZnRkaV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGNoYXIgYnVmWzJdOwogCWludCByZXQ7CkBAIC0yMTgxLDMyICsyMjQwLDM1IEBACiAJc3dpdGNoIChwcml2LT5jaGlwX3R5cGUpIHsKIAljYXNlIFNJTzoKIAkJLyogUmVxdWVzdCB0aGUgc3RhdHVzIGZyb20gdGhlIGRldmljZSAqLwotCQlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKLQkJCQkJICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKLQkJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNULAotCQkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKLQkJCQkJICAgMCwgMCwKLQkJCQkJICAgYnVmLCAxLCBXRFJfVElNRU9VVCkpIDwgMCApIHsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVCwKKwkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFLAorCQkJICAgMCwgMCwKKwkJCSAgIGJ1ZiwgMSwgV0RSX1RJTUVPVVQpOworCQlpZiAocmV0IDwgMCkgewogCQkJZXJyKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19mdW5jX18sCiAJCQkgICAgcmV0KTsKLQkJCXJldHVybihyZXQpOworCQkJcmV0dXJuIHJldDsKIAkJfQogCQlicmVhazsKIAljYXNlIEZUOFUyMzJBTToKIAljYXNlIEZUMjMyQk06CiAJY2FzZSBGVDIyMzJDOgogCWNhc2UgRlQyMzJSTDoKLQkJLyogdGhlIDhVMjMyQU0gcmV0dXJucyBhIHR3byBieXRlIHZhbHVlICh0aGUgc2lvIGlzIGEgMSBieXRlIHZhbHVlKSAtIGluIHRoZSBzYW1lCi0JCSAgIGZvcm1hdCBhcyB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBpbiBwb2ludCAqLwotCQlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKLQkJCQkJICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKLQkJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNULAotCQkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKLQkJCQkJICAgMCwgcHJpdi0+aW50ZXJmYWNlLAotCQkJCQkgICBidWYsIDIsIFdEUl9USU1FT1VUKSkgPCAwICkgeworCQkvKiB0aGUgOFUyMzJBTSByZXR1cm5zIGEgdHdvIGJ5dGUgdmFsdWUgKHRoZSBzaW8gaXMgYSAxIGJ5dGUKKwkJICAgdmFsdWUpIC0gaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIGluCisJCSAgIHBvaW50ICovCisJCXJldCA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkgICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVCwKKwkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKKwkJCQkgICAwLCBwcml2LT5pbnRlcmZhY2UsCisJCQkJICAgYnVmLCAyLCBXRFJfVElNRU9VVCk7CisJCWlmIChyZXQgPCAwKSB7CiAJCQllcnIoIiVzIENvdWxkIG5vdCBnZXQgbW9kZW0gc3RhdHVzIG9mIGRldmljZSAtIGVycjogJWQiLCBfX2Z1bmNfXywKIAkJCSAgICByZXQpOwotCQkJcmV0dXJuKHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMjIxLDE1ICsyMjgzLDE5IEBACiAJCXByaXYtPmxhc3RfZHRyX3J0czsKIH0KIAotc3RhdGljIGludCBmdGRpX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQorc3RhdGljIGludCBmdGRpX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWRiZygiJXMgVElPQ01TRVQiLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIHVwZGF0ZV9tY3RybChwb3J0LCBzZXQsIGNsZWFyKTsKIH0KIAogCi1zdGF0aWMgaW50IGZ0ZGlfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGZ0ZGlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlkYmcoIiVzIGNtZCAweCUwNHgiLCBfX2Z1bmNfXywgY21kKTsKQEAgLTIyMzgsMTAgKzIzMDQsMTIgQEAKIAlzd2l0Y2ggKGNtZCkgewogCiAJY2FzZSBUSU9DR1NFUklBTDogLyogZ2V0cyBzZXJpYWwgcG9ydCBkYXRhICovCi0JCXJldHVybiBnZXRfc2VyaWFsX2luZm8ocG9ydCwgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKSBhcmcpOworCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKHBvcnQsCisJCQkJCShzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKikgYXJnKTsKIAogCWNhc2UgVElPQ1NTRVJJQUw6IC8qIHNldHMgc2VyaWFsIHBvcnQgZGF0YSAqLwotCQlyZXR1cm4gc2V0X3NlcmlhbF9pbmZvKHBvcnQsIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKikgYXJnKTsKKwkJcmV0dXJuIHNldF9zZXJpYWxfaW5mbyh0dHksIHBvcnQsCisJCQkJCShzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKikgYXJnKTsKIAogCS8qCiAJICogV2FpdCBmb3IgYW55IG9mIHRoZSA0IG1vZGVtIGlucHV0cyAoRENELFJJLERTUixDVFMpIHRvIGNoYW5nZQpAQCAtMjI2MCw0NSArMjMyOCw0MSBAQAogCQkJZWxzZSB7CiAJCQkJY2hhciBkaWZmID0gcHJpdi0+ZGlmZl9zdGF0dXM7CiAKLQkJCQlpZiAoZGlmZiA9PSAwKSB7CisJCQkJaWYgKGRpZmYgPT0gMCkKIAkJCQkJcmV0dXJuIC1FSU87IC8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLwotCQkJCX0KIAogCQkJCS8qIENvbnN1bWUgYWxsIGV2ZW50cyAqLwogCQkJCXByaXYtPmRpZmZfc3RhdHVzID0gMDsKIAotCQkJCS8qIFJldHVybiAwIGlmIGNhbGxlciB3YW50ZWQgdG8ga25vdyBhYm91dCB0aGVzZSBiaXRzICovCi0JCQkJaWYgKCAoKGFyZyAmIFRJT0NNX1JORykgJiYgKGRpZmYgJiBGVERJX1JTMF9SSSkpIHx8Ci0JCQkJICAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGRpZmYgJiBGVERJX1JTMF9EU1IpKSB8fAotCQkJCSAgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChkaWZmICYgRlRESV9SUzBfUkxTRCkpIHx8Ci0JCQkJICAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGRpZmYgJiBGVERJX1JTMF9DVFMpKSApIHsKKwkJCQkvKiBSZXR1cm4gMCBpZiBjYWxsZXIgd2FudGVkIHRvIGtub3cgYWJvdXQKKwkJCQkgICB0aGVzZSBiaXRzICovCisJCQkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoZGlmZiAmIEZURElfUlMwX1JJKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChkaWZmICYgRlRESV9SUzBfRFNSKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChkaWZmICYgRlRESV9SUzBfUkxTRCkpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoZGlmZiAmIEZURElfUlMwX0NUUykpKSB7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCQkvKgotCQkJCSAqIE90aGVyd2lzZSBjYWxsZXIgY2FuJ3QgY2FyZSBsZXNzIGFib3V0IHdoYXQgaGFwcGVuZWQsCi0JCQkJICogYW5kIHNvIHdlIGNvbnRpbnVlIHRvIHdhaXQgZm9yIG1vcmUgZXZlbnRzLgorCQkJCSAqIE90aGVyd2lzZSBjYWxsZXIgY2FuJ3QgY2FyZSBsZXNzIGFib3V0IHdoYXQKKwkJCQkgKiBoYXBwZW5lZCxhbmQgc28gd2UgY29udGludWUgdG8gd2FpdCBmb3IgbW9yZQorCQkJCSAqIGV2ZW50cy4KIAkJCQkgKi8KIAkJCX0KIAkJfQotCQlyZXR1cm4oMCk7Ci0JCWJyZWFrOworCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlicmVhazsKLQogCX0KLQotCi0JLyogVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3IgLSB0dXJucyBvdXQgdGhlIGhpZ2hlciBsYXllcnMgd2lsbCBkbwotCSAqICBzb21lIGlvY3RscyBpdHNlbGYgKHNlZSBjb21tZW50IGFib3ZlKQorCS8qIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIGVycm9yIC0gdHVybnMgb3V0IHRoZSBoaWdoZXIgbGF5ZXJzCisJICogd2lsbCBkbyBzb21lIGlvY3RscyB0aGVtc2VsdmVzIChzZWUgY29tbWVudCBhYm92ZSkKIAkgKi8KIAlkYmcoIiVzIGFyZyBub3Qgc3VwcG9ydGVkIC0gaXQgd2FzIDB4JTA0eCAtIGNoZWNrIC91c3IvaW5jbHVkZS9hc20vaW9jdGxzLmgiLCBfX2Z1bmNfXywgY21kKTsKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQogCi0JcmV0dXJuKC1FTk9JT0NUTENNRCk7Ci19IC8qIGZ0ZGlfaW9jdGwgKi8KLQotCi1zdGF0aWMgdm9pZCBmdGRpX3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgZnRkaV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjMxMCw4ICsyMzc0LDkgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBmdGRpX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBmdGRpX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBhY3R1YWxseV90aHJvdHRsZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIzMjcsNyArMjM5Miw3IEBACiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+cnhfd29yaywgMCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGZ0ZGlfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGZ0ZGlfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAKQEAgLTIzNTcsMTMgKzI0MjIsMTMgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZnRkaV9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGZ0ZGlfZXhpdCh2b2lkKQogewogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAotCXVzYl9kZXJlZ2lzdGVyICgmZnRkaV9kcml2ZXIpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmZ0ZGlfc2lvX2RldmljZSk7CisJdXNiX2RlcmVnaXN0ZXIoJmZ0ZGlfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmZ0ZGlfc2lvX2RldmljZSk7CiAKIH0KIApAQCAtMjM3MSw4ICsyNDM2LDggQEAKIG1vZHVsZV9pbml0KGZ0ZGlfaW5pdCk7CiBtb2R1bGVfZXhpdChmdGRpX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IDgzMDJlY2EuLmE1NzdlYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC0xLDIwICsxLDIwIEBACiAvKgotICogRGVmaW5pdGlvbnMgZm9yIHRoZSBGVERJIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQ29udmVydGVyIC0gCi0gKiBrbm93biBhcyBGVERJX1NJTyAoU2VyaWFsIElucHV0L091dHB1dCBhcHBsaWNhdGlvbiBvZiB0aGUgY2hpcHNldCkgCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIEZUREkgVVNCIFNpbmdsZSBQb3J0IFNlcmlhbCBDb252ZXJ0ZXIgLQorICoga25vd24gYXMgRlRESV9TSU8gKFNlcmlhbCBJbnB1dC9PdXRwdXQgYXBwbGljYXRpb24gb2YgdGhlIGNoaXBzZXQpCiAgKgogICogVGhlIGV4YW1wbGUgSSBoYXZlIGlzIGtub3duIGFzIHRoZSBVU0MtMTAwMCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbQogICogaHR0cDovL3d3dy5kc2UuY28ubnogLSBjYXQgbm8gWEg0MjE0IEl0IGxvb2tzIHNpbWlsYXIgdG8gdGhpczoKICAqIGh0dHA6Ly93d3cuZGFuc2RhdGEuY29tL3VzYnNlci5odG0gYnV0IEkgY2FuJ3QgYmUgc3VyZSBUaGVyZSBhcmUgb3RoZXIKICAqIFVTQy0xMDAwcyB3aGljaCBkb24ndCBsb29rIGxpa2UgbXkgZGV2aWNlIHRob3VnaCBzbyBiZXdhcmUhCiAgKgotICogVGhlIGRldmljZSBpcyBiYXNlZCBvbiB0aGUgRlRESSBGVDhVMTAwQVggY2hpcC4gSXQgaGFzIGEgREIyNSBvbiBvbmUgc2lkZSwgCisgKiBUaGUgZGV2aWNlIGlzIGJhc2VkIG9uIHRoZSBGVERJIEZUOFUxMDBBWCBjaGlwLiBJdCBoYXMgYSBEQjI1IG9uIG9uZSBzaWRlLAogICogVVNCIG9uIHRoZSBvdGhlci4KICAqCiAgKiBUaGFueCB0byBGVERJIChodHRwOi8vd3d3LmZ0ZGkuY28udWspIGZvciBzbyBraW5kbHkgcHJvdmlkaW5nIGRldGFpbHMKICAqIG9mIHRoZSBwcm90b2NvbCByZXF1aXJlZCB0byB0YWxrIHRvIHRoZSBkZXZpY2UgYW5kIG9uZ29pbmcgYXNzaXN0ZW5jZQogICogZHVyaW5nIGRldmVsb3BtZW50LgogICoKLSAqIEJpbGwgUnlkZXIgLSBicnlkZXJAc2dpLmNvbSBmb3JtZXJseSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLSB3cm90ZSB0aGUgCisgKiBCaWxsIFJ5ZGVyIC0gYnJ5ZGVyQHNnaS5jb20gZm9ybWVybHkgb2YgU2lsaWNvbiBHcmFwaGljcywgSW5jLi0gd3JvdGUgdGhlCiAgKiBGVERJX1NJTyBpbXBsZW1lbnRhdGlvbi4KICAqCiAgKiBQaGlsaXBwIEfDvGhyaW5nIC0gcGdAZnV0dXJld2FyZS5hdCAtIGFkZGVkIHRoZSBEZXZpY2UgSUQgb2YgdGhlIFVTQiByZWxhaXMKQEAgLTQ3Miw3ICs0NzIsNyBAQAogLyoKICAqIERTUy0yMCBTeW5jIFN0YXRpb24gZm9yIFNvbnkgRXJpY3Nzb24gUDgwMAogICovCi0jZGVmaW5lIEZURElfRFNTMjBfUElEICAgICAgICAgIDB4RkM4MiAgCisjZGVmaW5lIEZURElfRFNTMjBfUElEICAgICAgICAgIDB4RkM4MgogCiAvKgogICogSG9tZSBFbGVjdHJvbmljcyAod3d3LmhvbWUtZWxlY3Ryby5jb20pIFVTQiBnYWRnZXRzCkBAIC04ODQsNyArODg0LDcgQEAKIC8qCiAgKiBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwQgogICogYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1JFU0VUCi0gKiB3VmFsdWU6ICAgICAgICAgQ29udHJvbCBWYWx1ZSAKKyAqIHdWYWx1ZTogICAgICAgICBDb250cm9sIFZhbHVlCiAgKiAgICAgICAgICAgICAgICAgICAwID0gUmVzZXQgU0lPCiAgKiAgICAgICAgICAgICAgICAgICAxID0gUHVyZ2UgUlggYnVmZmVyCiAgKiAgICAgICAgICAgICAgICAgICAyID0gUHVyZ2UgVFggYnVmZmVyCkBAIC05NTIsNyArOTUyLDcgQEAKICAqICAgMTAxIC0gYWRkIC42MjUgdG8gZGl2aXNvcgogICogICAxMTAgLSBhZGQgLjc1MCB0byBkaXZpc29yCiAgKiAgIDExMSAtIGFkZCAuODc1IHRvIGRpdmlzb3IKLSAqIEJpdHMgMTUgdG8gMCBvZiB0aGUgMTctYml0IGRpdmlzb3IgYXJlIHBsYWNlZCBpbiB0aGUgdXJiIHZhbHVlLiAgQml0IDE2IGlzIAorICogQml0cyAxNSB0byAwIG9mIHRoZSAxNy1iaXQgZGl2aXNvciBhcmUgcGxhY2VkIGluIHRoZSB1cmIgdmFsdWUuICBCaXQgMTYgaXMKICAqIHBsYWNlZCBpbiBiaXQgMCBvZiB0aGUgdXJiIGluZGV4LgogICoKICAqIE5vdGUgdGhhdCB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygc3BlY2lhbCBjYXNlcyB0byBzdXBwb3J0IHRoZSBoaWdoZXN0IGJhdWQKQEAgLTk3MSw4ICs5NzEsOCBAQAogfSBmdGRpX2NoaXBfdHlwZV90OwogCiB0eXBlZGVmIGVudW0gewotIGZ0ZGlfc2lvX2IzMDAgPSAwLCAKLSBmdGRpX3Npb19iNjAwID0gMSwgCisgZnRkaV9zaW9fYjMwMCA9IDAsCisgZnRkaV9zaW9fYjYwMCA9IDEsCiAgZnRkaV9zaW9fYjEyMDAgPSAyLAogIGZ0ZGlfc2lvX2IyNDAwID0gMywKICBmdGRpX3Npb19iNDgwMCA9IDQsCkBAIC05ODEsNyArOTgxLDcgQEAKICBmdGRpX3Npb19iMzg0MDAgPSA3LAogIGZ0ZGlfc2lvX2I1NzYwMCA9IDgsCiAgZnRkaV9zaW9fYjExNTIwMCA9IDkKLX0gRlRESV9TSU9fYmF1ZHJhdGVfdCA7Cit9IEZURElfU0lPX2JhdWRyYXRlX3Q7CiAKIC8qCiAgKiBUaGUgZnRkaV84VTIzMkFNX3h4TUh6X2J5eXkgY29uc3RhbnRzIGhhdmUgYmVlbiByZW1vdmVkLiBUaGUgZW5jb2RlZCBkaXZpc29yIHZhbHVlcwpAQCAtOTkwLDE5ICs5OTAsMTkgQEAKIAogI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUIEZURElfU0lPX1NFVF9EQVRBCiAjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1RfVFlQRSAweDQwCi0jZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9OT05FICgweDAgPDwgOCApCi0jZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9PREQgKDB4MSA8PCA4ICkKLSNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX0VWRU4gKDB4MiA8PCA4ICkKLSNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX01BUksgKDB4MyA8PCA4ICkKLSNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX1NQQUNFICgweDQgPDwgOCApCi0jZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18xICgweDAgPDwgMTEgKQotI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9TVE9QX0JJVFNfMTUgKDB4MSA8PCAxMSApCi0jZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18yICgweDIgPDwgMTEgKQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfTk9ORSAoMHgwIDw8IDgpCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9PREQgKDB4MSA8PCA4KQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfRVZFTiAoMHgyIDw8IDgpCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9NQVJLICgweDMgPDwgOCkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX1NQQUNFICgweDQgPDwgOCkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzEgKDB4MCA8PCAxMSkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzE1ICgweDEgPDwgMTEpCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18yICgweDIgPDwgMTEpCiAjZGVmaW5lIEZURElfU0lPX1NFVF9CUkVBSyAoMHgxIDw8IDE0KQogLyogRlRESV9TSU9fU0VUX0RBVEEgKi8KIAogLyoKLSAqIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBCIAorICogQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMEIKICAqIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19TRVRfREFUQQogICogd1ZhbHVlOiAgICAgICAgIERhdGEgY2hhcmFjdGVyaXN0aWNzIChzZWUgYmVsb3cpCiAgKiB3SW5kZXg6ICAgICAgICAgUG9ydApAQCAtMTAzNSw3ICsxMDM1LDcgQEAKICNkZWZpbmUgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVF9UWVBFIDB4NDAKICNkZWZpbmUgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVCBGVERJX1NJT19NT0RFTV9DVFJMCiAKLS8qIAorLyoKICAqIEJtUmVxdWVzdFR5cGU6ICAgMDEwMCAwMDAwQgogICogYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19NT0RFTV9DVFJMCiAgKiB3VmFsdWU6ICAgICAgICAgIENvbnRyb2xWYWx1ZSAoc2VlIGJlbG93KQpAQCAtMTA0OSwxMSArMTA0OSwxMSBAQAogICovCiAKICNkZWZpbmUgRlRESV9TSU9fU0VUX0RUUl9NQVNLIDB4MQotI2RlZmluZSBGVERJX1NJT19TRVRfRFRSX0hJR0ggKCAxIHwgKCBGVERJX1NJT19TRVRfRFRSX01BU0sgIDw8IDgpKQotI2RlZmluZSBGVERJX1NJT19TRVRfRFRSX0xPVyAgKCAwIHwgKCBGVERJX1NJT19TRVRfRFRSX01BU0sgIDw8IDgpKQorI2RlZmluZSBGVERJX1NJT19TRVRfRFRSX0hJR0ggKDEgfCAoRlRESV9TSU9fU0VUX0RUUl9NQVNLICA8PCA4KSkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RUUl9MT1cgICgwIHwgKEZURElfU0lPX1NFVF9EVFJfTUFTSyAgPDwgOCkpCiAjZGVmaW5lIEZURElfU0lPX1NFVF9SVFNfTUFTSyAweDIKLSNkZWZpbmUgRlRESV9TSU9fU0VUX1JUU19ISUdIICggMiB8ICggRlRESV9TSU9fU0VUX1JUU19NQVNLIDw8IDggKSkKLSNkZWZpbmUgRlRESV9TSU9fU0VUX1JUU19MT1cgKCAwIHwgKCBGVERJX1NJT19TRVRfUlRTX01BU0sgPDwgOCApKQorI2RlZmluZSBGVERJX1NJT19TRVRfUlRTX0hJR0ggKDIgfCAoRlRESV9TSU9fU0VUX1JUU19NQVNLIDw8IDgpKQorI2RlZmluZSBGVERJX1NJT19TRVRfUlRTX0xPVyAoMCB8IChGVERJX1NJT19TRVRfUlRTX01BU0sgPDwgOCkpCiAKIC8qCiAgKiBDb250cm9sVmFsdWUKQEAgLTEwNzYsNyArMTA3Niw3IEBACiAvKiBGVERJX1NJT19TRVRfRkxPV19DVFJMICovCiAjZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFIDB4NDAKICNkZWZpbmUgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUIEZURElfU0lPX1NFVF9GTE9XX0NUUkwKLSNkZWZpbmUgRlRESV9TSU9fRElTQUJMRV9GTE9XX0NUUkwgMHgwIAorI2RlZmluZSBGVERJX1NJT19ESVNBQkxFX0ZMT1dfQ1RSTCAweDAKICNkZWZpbmUgRlRESV9TSU9fUlRTX0NUU19IUyAoMHgxIDw8IDgpCiAjZGVmaW5lIEZURElfU0lPX0RUUl9EU1JfSFMgKDB4MiA8PCA4KQogI2RlZmluZSBGVERJX1NJT19YT05fWE9GRl9IUyAoMHg0IDw8IDgpCkBAIC0xMDg1LDcgKzEwODUsNyBAQAogICogICBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTAogICogICB3VmFsdWU6ICAgICAgICAgWG9mZi9Yb24KICAqICAgd0luZGV4OiAgICAgICAgIFByb3RvY29sL1BvcnQgLSBoSW5kZXggaXMgcHJvdG9jbCAvIGxJbmRleCBpcyBwb3J0Ci0gKiAgIHdMZW5ndGg6ICAgICAgICAwIAorICogICB3TGVuZ3RoOiAgICAgICAgMAogICogICBEYXRhOiAgICAgICAgICAgTm9uZQogICoKICAqIGhJbmRleCBwcm90b2NvbCBpczoKQEAgLTExMDEsMTAgKzExMDEsMTAgQEAKICAqCiAgKiBBIHZhbHVlIG9mIHplcm8gaW4gdGhlIGhJbmRleCBmaWVsZCBkaXNhYmxlcyBoYW5kc2hha2luZwogICoKLSAqIElmIFhvbi9Yb2ZmIGhhbmRzaGFraW5nIGlzIHNwZWNpZmllZCwgdGhlIGhWYWx1ZSBmaWVsZCBzaG91bGQgY29udGFpbiB0aGUgWE9GRiBjaGFyYWN0ZXIgCisgKiBJZiBYb24vWG9mZiBoYW5kc2hha2luZyBpcyBzcGVjaWZpZWQsIHRoZSBoVmFsdWUgZmllbGQgc2hvdWxkIGNvbnRhaW4gdGhlIFhPRkYgY2hhcmFjdGVyCiAgKiBhbmQgdGhlIGxWYWx1ZSBmaWVsZCBjb250YWlucyB0aGUgWE9OIGNoYXJhY3Rlci4KLSAqLyAgCi0gCisgKi8KKwogLyoKICAqIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCiAgKgpAQCAtMTExOCw3ICsxMTE4LDcgQEAKICNkZWZpbmUgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIKICNkZWZpbmUgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1RfVFlQRSAweEMwCiAKLS8qIAorLyoKICAqICBCbVJlcXVlc3RUeXBlOiAgIDExMDAgMDAwMGIKICAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCiAgKiAgd1ZhbHVlOiAgICAgICAgICAwCkBAIC0xMTI3LDcgKzExMjcsNyBAQAogICogIERhdGE6ICAgICAgICAgICAgbGF0ZW5jeSAob24gcmV0dXJuKQogICovCiAKLS8qIAorLyoKICAqIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSCiAgKgogICogU2V0IHRoZSB0aW1lb3V0IGludGVydmFsLiBUaGUgRlRESSBjb2xsZWN0cyBkYXRhIGZyb20gdGhlIHNsYXZlCkBAIC0xMTQwLDcgKzExNDAsNyBAQAogI2RlZmluZSAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgogI2RlZmluZSAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVF9UWVBFIDB4NDAKIAotLyogCisvKgogICogIEJtUmVxdWVzdFR5cGU6ICAgMDEwMCAwMDAwYgogICogIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIKICAqICB3VmFsdWU6ICAgICAgICAgIExhdGVuY3kgKG1pbGxpc2Vjb25kcykKQEAgLTExNTUsNyArMTE1NSw3IEBACiAgKi8KIAogLyoKLSAqIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSIAorICogRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIKICAqCiAgKiBTZXQgdGhlIHNwZWNpYWwgZXZlbnQgY2hhcmFjdGVyIGZvciB0aGUgc3BlY2lmaWVkIGNvbW11bmljYXRpb25zIHBvcnQuCiAgKiBJZiB0aGUgZGV2aWNlIHNlZXMgdGhpcyBjaGFyYWN0ZXIgaXQgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gdGhlCkBAIC0xMTY4LDcgKzExNjgsNyBAQAogI2RlZmluZSAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVF9UWVBFIDB4NDAKIAogCi0vKiAKKy8qCiAgKiAgQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBiCiAgKiAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUgogICogIHdWYWx1ZTogICAgICAgICAgRXZlbnRDaGFyCkBAIC0xMTg0LDEyICsxMTg0LDEyIEBACiAgKiAgIEI5Li4xNSAgUmVzZXJ2ZWQKICAqCiAgKi8KLSAgICAgICAgICAKKwogLyogRlRESV9TSU9fU0VUX0VSUk9SX0NIQVIgKi8KIAogLyogU2V0IHRoZSBwYXJpdHkgZXJyb3IgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGZvciB0aGUgc3BlY2lmaWVkIGNvbW11bmljYXRpb25zIHBvcnQgKi8KIAotLyogCisvKgogICogIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBiCiAgKiAgYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSCiAgKiAgd1ZhbHVlOiAgICAgICAgIEVycm9yIENoYXIKQEAgLTEyMTUsMTUgKzEyMTUsMTUgQEAKICNkZWZpbmUgRlRESV9TSU9fRFNSX01BU0sgMHgyMAogI2RlZmluZSBGVERJX1NJT19SSV9NQVNLICAweDQwCiAjZGVmaW5lIEZURElfU0lPX1JMU0RfTUFTSyAweDgwCi0vKiAKKy8qCiAgKiAgIEJtUmVxdWVzdFR5cGU6ICAgMTEwMCAwMDAwYgogICogICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVMKICAqICAgd1ZhbHVlOiAgICAgICAgICB6ZXJvCiAgKiAgIHdJbmRleDogICAgICAgICAgUG9ydAogICogICB3TGVuZ3RoOiAgICAgICAgIDEKICAqICAgRGF0YTogICAgICAgICAgICBTdGF0dXMKLSAqIAotICogT25lIGJ5dGUgb2YgZGF0YSBpcyByZXR1cm5lZCAKKyAqCisgKiBPbmUgYnl0ZSBvZiBkYXRhIGlzIHJldHVybmVkCiAgKiBCMC4uMyAwCiAgKiBCNCAgICBDVFMKICAqICAgICAgICAgMCA9IGluYWN0aXZlCkBAIC0xMjM2LDE1ICsxMjM2LDE1IEBACiAgKiAgICAgICAgIDEgPSBhY3RpdmUKICAqIEI3ICAgIFJlY2VpdmUgTGluZSBTaWduYWwgRGV0ZWN0IChSTFNEKQogICogICAgICAgICAwID0gaW5hY3RpdmUKLSAqICAgICAgICAgMSA9IGFjdGl2ZSAKKyAqICAgICAgICAgMSA9IGFjdGl2ZQogICovCiAKIAogCi0vKiBEZXNjcmlwdG9ycyByZXR1cm5lZCBieSB0aGUgZGV2aWNlIAotICogCisvKiBEZXNjcmlwdG9ycyByZXR1cm5lZCBieSB0aGUgZGV2aWNlCisgKgogICogIERldmljZSBEZXNjcmlwdG9yCi0gKiAKKyAqCiAgKiBPZmZzZXQJRmllbGQJCVNpemUJVmFsdWUJRGVzY3JpcHRpb24KICAqIDAJYkxlbmd0aAkJMQkweDEyCVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcwogICogMQliRGVzY3JpcHRvclR5cGUJMQkweDAxCURFVklDRSBEZXNjcmlwdG9yIFR5cGUKQEAgLTEyNjAsOSArMTI2MCw5IEBACiAgKiAxNQlpUHJvZHVjdAkxCTB4MDIJSW5kZXggb2YgcHJvZCBzdHJpbmcgZGVzYwogICogMTYJaVNlcmlhbE51bWJlcgkxCTB4MDIJSW5kZXggb2Ygc2VyaWFsIG5tciBzdHJpbmcgZGVzYwogICogMTcJYk51bUNvbmZpZ3VyYXRpb25zIDEgICAgMHgwMQlOdW1iZXIgb2YgcG9zc2libGUgY29uZmlndXJhdGlvbnMKLSAqIAorICoKICAqIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvcgotICogCisgKgogICogT2Zmc2V0CUZpZWxkCQkJU2l6ZQlWYWx1ZQogICogMAliTGVuZ3RoCQkJMQkweDA5CVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcwogICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwMglDT05GSUdVUkFUSU9OIERlc2NyaXB0b3IgVHlwZQpAQCAtMTI3Miw5ICsxMjcyLDkgQEAKICAqIDYJaUNvbmZpZ3VyYXRpb24JCTEJMHgwMglJbmRleCBvZiBjb25maWcgc3RyaW5nIGRlc2NyaXB0b3IKICAqIDcJYm1BdHRyaWJ1dGVzCQkxCTB4MjAJQ29uZmlnIGNoYXJhY3RlcmlzdGljcyBSZW1vdGUgV2FrZXVwCiAgKiA4CU1heFBvd2VyCQkxCTB4MUUJTWF4IHBvd2VyIGNvbnN1bXB0aW9uCi0gKiAKKyAqCiAgKiBJbnRlcmZhY2UgRGVzY3JpcHRvcgotICogCisgKgogICogT2Zmc2V0CUZpZWxkCQkJU2l6ZQlWYWx1ZQogICogMAliTGVuZ3RoCQkJMQkweDA5CVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcwogICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwNAlJTlRFUkZBQ0UgRGVzY3JpcHRvciBUeXBlCkBAIC0xMjg1LDkgKzEyODUsOSBAQAogICogNgliSW50ZXJmYWNlU3ViQ2xhc3MJMQkweEZGCVN1YmNsYXNzIENvZGUKICAqIDcJYkludGVyZmFjZVByb3RvY29sCTEJMHhGRglQcm90b2NvbCBDb2RlCiAgKiA4CWlJbnRlcmZhY2UJCTEJMHgwMglJbmRleCBvZiBpbnRlcmZhY2Ugc3RyaW5nIGRlc2NyaXB0aW9uCi0gKiAKKyAqCiAgKiBJTiBFbmRwb2ludCBEZXNjcmlwdG9yCi0gKiAKKyAqCiAgKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCiAgKiAwCWJMZW5ndGgJCQkxCTB4MDcJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCiAgKiAxCWJEZXNjcmlwdG9yVHlwZQkJMQkweDA1CUVORFBPSU5UIGRlc2NyaXB0b3IgdHlwZQpAQCAtMTI5NSw5ICsxMjk1LDkgQEAKICAqIDMJYm1BdHRyaWJ1dGVzCQkxCTB4MDIJRW5kcG9pbnQgYXR0cmlidXRlcyAtIEJ1bGsKICAqIDQJYk51bUVuZHBvaW50cwkJMgkweDAwNDAJbWF4aW11bSBwYWNrZXQgc2l6ZQogICogNQliSW50ZXJ2YWwJCTEJMHgwMAlJbnRlcnZhbCBmb3IgcG9sbGluZyBlbmRwb2ludAotICogCisgKgogICogT1VUIEVuZHBvaW50IERlc2NyaXB0b3IKLSAqIAorICoKICAqIE9mZnNldAlGaWVsZAkJCVNpemUJVmFsdWUKICAqIDAJYkxlbmd0aAkJCTEJMHgwNwlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKICAqIDEJYkRlc2NyaXB0b3JUeXBlCQkxCTB4MDUJRU5EUE9JTlQgZGVzY3JpcHRvciB0eXBlCkBAIC0xMzA1LDE3ICsxMzA1LDE3IEBACiAgKiAzCWJtQXR0cmlidXRlcwkJMQkweDAyCUVuZHBvaW50IGF0dHJpYnV0ZXMgLSBCdWxrCiAgKiA0CWJOdW1FbmRwb2ludHMJCTIJMHgwMDQwCW1heGltdW0gcGFja2V0IHNpemUKICAqIDUJYkludGVydmFsCQkxCTB4MDAJSW50ZXJ2YWwgZm9yIHBvbGxpbmcgZW5kcG9pbnQKLSAqICAgICAKKyAqCiAgKiBEQVRBIEZPUk1BVAotICogCisgKgogICogSU4gRW5kcG9pbnQKLSAqIAorICoKICAqIFRoZSBkZXZpY2UgcmVzZXJ2ZXMgdGhlIGZpcnN0IHR3byBieXRlcyBvZiBkYXRhIG9uIHRoaXMgZW5kcG9pbnQgdG8gY29udGFpbiB0aGUgY3VycmVudAogICogdmFsdWVzIG9mIHRoZSBtb2RlbSBhbmQgbGluZSBzdGF0dXMgcmVnaXN0ZXJzLiBJbiB0aGUgYWJzZW5jZSBvZiBkYXRhLCB0aGUgZGV2aWNlIAogICogZ2VuZXJhdGVzIGEgbWVzc2FnZSBjb25zaXN0aW5nIG9mIHRoZXNlIHR3byBzdGF0dXMgYnl0ZXMgZXZlcnkgNDAgbXMKLSAqIAorICoKICAqIEJ5dGUgMDogTW9kZW0gU3RhdHVzCi0gKiAKKyAqCiAgKiBPZmZzZXQJRGVzY3JpcHRpb24KICAqIEIwCVJlc2VydmVkIC0gbXVzdCBiZSAxCiAgKiBCMQlSZXNlcnZlZCAtIG11c3QgYmUgMApAQCAtMTMyNSw5ICsxMzI1LDkgQEAKICAqIEI1CURhdGEgU2V0IFJlYWR5IChEU1IpCiAgKiBCNglSaW5nIEluZGljYXRvciAoUkkpCiAgKiBCNwlSZWNlaXZlIExpbmUgU2lnbmFsIERldGVjdCAoUkxTRCkKLSAqIAorICoKICAqIEJ5dGUgMTogTGluZSBTdGF0dXMKLSAqIAorICoKICAqIE9mZnNldAlEZXNjcmlwdGlvbgogICogQjAJRGF0YSBSZWFkeSAoRFIpCiAgKiBCMQlPdmVycnVuIEVycm9yIChPRSkKQEAgLTEzMzcsNyArMTMzNyw3IEBACiAgKiBCNQlUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyIChUSFJFKQogICogQjYJVHJhbnNtaXR0ZXIgRW1wdHkgKFRFTVQpCiAgKiBCNwlFcnJvciBpbiBSQ1ZSIEZJRk8KLSAqIAorICoKICAqLwogI2RlZmluZSBGVERJX1JTMF9DVFMJKDEgPDwgNCkKICNkZWZpbmUgRlRESV9SUzBfRFNSCSgxIDw8IDUpCkBAIC0xMzU1LDE3ICsxMzU1LDE3IEBACiAKIC8qCiAgKiBPVVQgRW5kcG9pbnQKLSAqIAorICoKICAqIFRoaXMgZGV2aWNlIHJlc2VydmVzIHRoZSBmaXJzdCBieXRlcyBvZiBkYXRhIG9uIHRoaXMgZW5kcG9pbnQgY29udGFpbiB0aGUgbGVuZ3RoCiAgKiBhbmQgcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBtZXNzYWdlLiBGb3IgdGhlIEZUREkgVVNCIFNlcmlhbCBjb252ZXJ0ZXIgdGhlIHBvcnQgCiAgKiBpZGVudGlmaWVyIGlzIGFsd2F5cyAxLgotICogCisgKgogICogQnl0ZSAwOiBMaW5lIFN0YXR1cwotICogCisgKgogICogT2Zmc2V0CURlc2NyaXB0aW9uCiAgKiBCMAlSZXNlcnZlZCAtIG11c3QgYmUgMQogICogQjEJUmVzZXJ2ZWQgLSBtdXN0IGJlIDAKICAqIEIyLi43CUxlbmd0aCBvZiBtZXNzYWdlIC0gKG5vdCBpbmNsdWRpbmcgQnl0ZSAwKQotICogCisgKgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnVuc29mdC5jCmluZGV4IGU4YmEyY2IuLmQzMGY3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z1bnNvZnQuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogc3RhdGljIGludCBkZWJ1ZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKaW5kZXggOGNlNWE1Ni4uMmU2NjNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CkBAIC00NCw3ICs0NCw3IEBACiBzdGF0aWMgaW50IGluaXRpYWxfbW9kZSA9IDE7CiAKIC8qIGRlYnVnIGZsYWcgKi8KLXN0YXRpYyBpbnQgZGVidWcgPSAwOworc3RhdGljIGludCBkZWJ1ZzsKIAogI2RlZmluZSBHQVJNSU5fVkVORE9SX0lEICAgICAgICAgICAgIDB4MDkxRQogCkBAIC01Niw3ICs1Niw3IEBACiAjZGVmaW5lIFZFUlNJT05fTUlOT1IJMzEKIAogI2RlZmluZSBfU1RSKHMpICNzCi0jZGVmaW5lIF9EUklWRVJfVkVSU0lPTihhLGIpICJ2IiBfU1RSKGEpICIuIiBfU1RSKGIpCisjZGVmaW5lIF9EUklWRVJfVkVSU0lPTihhLCBiKSAidiIgX1NUUihhKSAiLiIgX1NUUihiKQogI2RlZmluZSBEUklWRVJfVkVSU0lPTiBfRFJJVkVSX1ZFUlNJT04oVkVSU0lPTl9NQUpPUiwgVkVSU0lPTl9NSU5PUikKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiaGVybWFubiBrbmVpc3NlbCIKICNkZWZpbmUgRFJJVkVSX0RFU0MgImdhcm1pbiBncHMgZHJpdmVyIgpAQCAtNjUsMzcgKzY1LDM3IEBACiAjZGVmaW5lIEVJTlZQS1QJMTAwMAkvKiBpbnZhbGlkIHBhY2tldCBzdHJ1Y3R1cmUgKi8KIAogCi0vLyBzaXplIG9mIHRoZSBoZWFkZXIgb2YgYSBwYWNrZXQgdXNpbmcgdGhlIHVzYiBwcm90b2NvbAorLyogc2l6ZSBvZiB0aGUgaGVhZGVyIG9mIGEgcGFja2V0IHVzaW5nIHRoZSB1c2IgcHJvdG9jb2wgKi8KICNkZWZpbmUgR0FSTUlOX1BLVEhEUl9MRU5HVEgJMTIKIAotLy8gbWF4LiBwb3NzaWJsZSBzaXplIG9mIGEgcGFja2V0IHVzaW5nIHRoZSBzZXJpYWwgcHJvdG9jb2wgCi0jZGVmaW5lIE1BWF9TRVJJQUxfUEtUX1NJWiAoMysyNTUrMykKKy8qIG1heC4gcG9zc2libGUgc2l6ZSBvZiBhIHBhY2tldCB1c2luZyB0aGUgc2VyaWFsIHByb3RvY29sICovCisjZGVmaW5lIE1BWF9TRVJJQUxfUEtUX1NJWiAoMyArIDI1NSArIDMpCiAKLS8vIG1heC4gcG9zc2libGUgc2l6ZSBvZiBhIHBhY2tldCB3aXRoIHdvcnN0IGNhc2Ugc3R1ZmZpbmcKLSNkZWZpbmUgTUFYX1NFUklBTF9QS1RfU0laX1NUVUZGRUQgTUFYX1NFUklBTF9QS1RfU0laKzI1NgorLyogIG1heC4gcG9zc2libGUgc2l6ZSBvZiBhIHBhY2tldCB3aXRoIHdvcnN0IGNhc2Ugc3R1ZmZpbmcgKi8KKyNkZWZpbmUgTUFYX1NFUklBTF9QS1RfU0laX1NUVUZGRUQgKE1BWF9TRVJJQUxfUEtUX1NJWiArIDI1NikKIAotLy8gc2l6ZSBvZiBhIGJ1ZmZlciBhYmxlIHRvIGhvbGQgYSBjb21wbGV0ZSAobm8gc3R1ZmZpbmcpIHBhY2tldAotLy8gKHRoZSBkb2N1bWVudCBwcm90b2NvbCBkb2VzIG5vdCBjb250YWluIHBhY2tldHMgd2l0aCBhIGxhcmdlcgotLy8gIHNpemUsIGJ1dCBpbiB0aGVvcnkgYSBwYWNrZXQgbWF5IGJlIDY0aysxMiBieXRlcyAtIGlmIGluCi0vLyAgbGF0ZXIgcHJvdG9jb2wgdmVyc2lvbnMgbGFyZ2VyIHBhY2tldCBzaXplcyBvY2N1ciwgdGhpcyB2YWx1ZQotLy8gIHNob3VsZCBiZSBpbmNyZWFzZWQgYWNjb3JkaW5nbHksIHNvIHRoZSBpbnB1dCBidWZmZXIgaXMgYWx3YXlzIAotLy8gIGxhcmdlIGVub3VnaCB0aGUgc3RvcmUgYSBjb21wbGV0ZSBwYWNrZXQgaW5jbHVzaXZlIGhlYWRlcikKLSNkZWZpbmUgR1BTX0lOX0JVRlNJWiAgKEdBUk1JTl9QS1RIRFJfTEVOR1RIK01BWF9TRVJJQUxfUEtUX1NJWikgCisvKiBzaXplIG9mIGEgYnVmZmVyIGFibGUgdG8gaG9sZCBhIGNvbXBsZXRlIChubyBzdHVmZmluZykgcGFja2V0CisgKiAodGhlIGRvY3VtZW50IHByb3RvY29sIGRvZXMgbm90IGNvbnRhaW4gcGFja2V0cyB3aXRoIGEgbGFyZ2VyCisgKiAgc2l6ZSwgYnV0IGluIHRoZW9yeSBhIHBhY2tldCBtYXkgYmUgNjRrKzEyIGJ5dGVzIC0gaWYgaW4KKyAqICBsYXRlciBwcm90b2NvbCB2ZXJzaW9ucyBsYXJnZXIgcGFja2V0IHNpemVzIG9jY3VyLCB0aGlzIHZhbHVlCisgKiAgc2hvdWxkIGJlIGluY3JlYXNlZCBhY2NvcmRpbmdseSwgc28gdGhlIGlucHV0IGJ1ZmZlciBpcyBhbHdheXMKKyAqICBsYXJnZSBlbm91Z2ggdGhlIHN0b3JlIGEgY29tcGxldGUgcGFja2V0IGluY2x1c2l2ZSBoZWFkZXIpICovCisjZGVmaW5lIEdQU19JTl9CVUZTSVogIChHQVJNSU5fUEtUSERSX0xFTkdUSCtNQVhfU0VSSUFMX1BLVF9TSVopCiAKLS8vIHNpemUgb2YgYSBidWZmZXIgYWJsZSB0byBob2xkIGEgY29tcGxldGUgKGluY2wuIHN0dWZmaW5nKSBwYWNrZXQKLSNkZWZpbmUgR1BTX09VVF9CVUZTSVogKEdBUk1JTl9QS1RIRFJfTEVOR1RIK01BWF9TRVJJQUxfUEtUX1NJWl9TVFVGRkVEKSAKKy8qIHNpemUgb2YgYSBidWZmZXIgYWJsZSB0byBob2xkIGEgY29tcGxldGUgKGluY2wuIHN0dWZmaW5nKSBwYWNrZXQgKi8KKyNkZWZpbmUgR1BTX09VVF9CVUZTSVogKEdBUk1JTl9QS1RIRFJfTEVOR1RIK01BWF9TRVJJQUxfUEtUX1NJWl9TVFVGRkVEKQogCi0vLyB3aGVyZSB0byBwbGFjZSB0aGUgcGFja2V0IGlkIG9mIGEgc2VyaWFsIHBhY2tldCwgc28gd2UgY2FuCi0vLyBwcmVwZW5kIHRoZSB1c2ItcGFja2V0IGhlYWRlciB3aXRob3V0IHRoZSBuZWVkIHRvIG1vdmUgdGhlCi0vLyBwYWNrZXRzIGRhdGEKKy8qIHdoZXJlIHRvIHBsYWNlIHRoZSBwYWNrZXQgaWQgb2YgYSBzZXJpYWwgcGFja2V0LCBzbyB3ZSBjYW4KKyAqIHByZXBlbmQgdGhlIHVzYi1wYWNrZXQgaGVhZGVyIHdpdGhvdXQgdGhlIG5lZWQgdG8gbW92ZSB0aGUKKyAqIHBhY2tldHMgZGF0YSAqLwogI2RlZmluZSBHU1BfSU5JVElBTF9PRkZTRVQgKEdBUk1JTl9QS1RIRFJfTEVOR1RILTIpCiAKLS8vIG1heC4gc2l6ZSBvZiBpbmNvbWluZyBwcml2YXRlIHBhY2tldHMgKGhlYWRlcisxIHBhcmFtKQorLyogbWF4LiBzaXplIG9mIGluY29taW5nIHByaXZhdGUgcGFja2V0cyAoaGVhZGVyKzEgcGFyYW0pICovCiAjZGVmaW5lIFBSSVZQS1RTSVogKEdBUk1JTl9QS1RIRFJfTEVOR1RIKzQpCiAKICNkZWZpbmUgR0FSTUlOX0xBWUVSSURfVFJBTlNQT1JUICAwCiAjZGVmaW5lIEdBUk1JTl9MQVlFUklEX0FQUEwgICAgICAyMAotLy8gb3VyIG93biBsYXllci1pZCB0byB1c2UgZm9yIHNvbWUgY29udHJvbCBtZWNoYW5pc21zCisvKiBvdXIgb3duIGxheWVyLWlkIHRvIHVzZSBmb3Igc29tZSBjb250cm9sIG1lY2hhbmlzbXMgKi8KICNkZWZpbmUgR0FSTUlOX0xBWUVSSURfUFJJVkFURQkweDAxMTA2RTRCCiAKICNkZWZpbmUgR0FSTUlOX1BLVElEX1BWVF9EQVRBCTUxCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogI2RlZmluZSBDTU5EX0FCT1JUX1RSQU5TRkVSIDAKIAotLy8gcGFja2V0IGlkcyB1c2VkIGluIHByaXZhdGUgbGF5ZXIKKy8qIHBhY2tldCBpZHMgdXNlZCBpbiBwcml2YXRlIGxheWVyICovCiAjZGVmaW5lIFBSSVZfUEtUSURfU0VUX0RFQlVHCTEKICNkZWZpbmUgUFJJVl9QS1RJRF9TRVRfTU9ERQkyCiAjZGVmaW5lIFBSSVZfUEtUSURfSU5GT19SRVEJMwpAQCAtMTIxLDcgKzEyMSw4IEBACiBzdHJ1Y3QgZ2FybWluX3BhY2tldCB7CiAJc3RydWN0IGxpc3RfaGVhZCAgbGlzdDsKIAlpbnQgICAgICAgICAgICAgICBzZXE7Ci0JaW50ICAgICAgICAgICAgICAgc2l6ZTsgLy8gdGhlIHJlYWwgc2l6ZSBvZiB0aGUgZGF0YSBhcnJheSwgYWx3YXlzID4gMAorCS8qIHRoZSByZWFsIHNpemUgb2YgdGhlIGRhdGEgYXJyYXksIGFsd2F5cyA+IDAgKi8KKwlpbnQgICAgICAgICAgICAgICBzaXplOwogCV9fdTggICAgICAgICAgICAgIGRhdGFbMV07CiB9OwogCkBAIC0xNjQsNyArMTY1LDcgQEAKICNkZWZpbmUgTU9ERV9OQVRJVkUgICAgICAgICAgMAogI2RlZmluZSBNT0RFX0dBUk1JTl9TRVJJQUwgICAxCiAKLS8vIEZsYWdzIHVzZWQgaW4gZ2FybWluX2RhdGEuZmxhZ3M6CisvKiBGbGFncyB1c2VkIGluIGdhcm1pbl9kYXRhLmZsYWdzOiAqLwogI2RlZmluZSBGTEFHU19TRVNTSU9OX1JFUExZX01BU0sgIDB4MDBDMAogI2RlZmluZSBGTEFHU19TRVNTSU9OX1JFUExZMV9TRUVOIDB4MDA4MAogI2RlZmluZSBGTEFHU19TRVNTSU9OX1JFUExZMl9TRUVOIDB4MDA0MApAQCAtMTg1LDcgKzE4Niw3IEBACiAKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQgZ3NwX25leHRfcGFja2V0KHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApOworc3RhdGljIHZvaWQgZ3NwX25leHRfcGFja2V0KHN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCk7CiBzdGF0aWMgaW50ICBnYXJtaW5fd3JpdGVfYnVsayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCwKIAkJCSAgICAgaW50IGRpc21pc3NfYWNrKTsKQEAgLTIxNywxMiArMjE4LDEzIEBACiAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0gewotCS8qIHRoZSBzYW1lIGRldmljZSBpZCBzZWVtcyB0byBiZSB1c2VkIGJ5IGFsbCB1c2IgZW5hYmxlZCBncHMgZGV2aWNlcyAqLwotCXsgVVNCX0RFVklDRShHQVJNSU5fVkVORE9SX0lELCAzICkgfSwKKwkvKiB0aGUgc2FtZSBkZXZpY2UgaWQgc2VlbXMgdG8gYmUgdXNlZCBieSBhbGwKKwkgICB1c2IgZW5hYmxlZCBHUFMgZGV2aWNlcyAqLworCXsgVVNCX0RFVklDRShHQVJNSU5fVkVORE9SX0lELCAzKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGdhcm1pbl9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJImdhcm1pbl9ncHMiLApAQCAtMjMzLDkgKzIzNSwxMCBAQAogfTsKIAogCi1zdGF0aWMgaW5saW5lIGludCBub1Jlc3BvbnNlRnJvbUFwcExheWVyKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCitzdGF0aWMgaW5saW5lIGludCBub1Jlc3BvbnNlRnJvbUFwcExheWVyKHN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCkKIHsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJmdhcm1pbl9kYXRhX3AtPnJlcV9jb3VudCkgPT0gYXRvbWljX3JlYWQoJmdhcm1pbl9kYXRhX3AtPnJlc3BfY291bnQpOworCXJldHVybiBhdG9taWNfcmVhZCgmZ2FybWluX2RhdGFfcC0+cmVxX2NvdW50KSA9PQorCQkJCWF0b21pY19yZWFkKCZnYXJtaW5fZGF0YV9wLT5yZXNwX2NvdW50KTsKIH0KIAogCkBAIC0yNjEsMTAgKzI2NCwxMCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBpc0Fib3J0VHJmQ21uZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCiB7Ci0JaWYgKDAgPT0gbWVtY21wKGJ1ZiwgR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRLCAKLQkgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUSkpIHx8Ci0JICAgIDAgPT0gbWVtY21wKGJ1ZiwgR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRX1YyLCAKLQkgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUV9WMikpKQorCWlmICgwID09IG1lbWNtcChidWYsIEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUSwKKwkJCQkJc2l6ZW9mKEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUSkpIHx8CisJICAgIDAgPT0gbWVtY21wKGJ1ZiwgR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRX1YyLAorCQkJCQlzaXplb2YoR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRX1YyKSkpCiAJCXJldHVybiAxOwogCWVsc2UKIAkJcmV0dXJuIDA7CkBAIC0yNzUsMTEgKzI3OCwxMSBAQAogc3RhdGljIHZvaWQgc2VuZF90b190dHkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCWNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnBvcnQudHR5OwogCiAJaWYgKHR0eSAmJiBhY3R1YWxfbGVuZ3RoKSB7CiAKLQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCAKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LAogCQkJCQlfX2Z1bmNfXywgYWN0dWFsX2xlbmd0aCwgZGF0YSk7CiAKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBhY3R1YWxfbGVuZ3RoKTsKQEAgLTI5Niw3ICsyOTksNyBAQAogLyoKICAqIHF1ZXVlIGEgcmVjZWl2ZWQgKHVzYi0pcGFja2V0IGZvciBsYXRlciBwcm9jZXNzaW5nCiAgKi8KLXN0YXRpYyBpbnQgcGt0X2FkZChzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLAorc3RhdGljIGludCBwa3RfYWRkKHN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCwKIAkJICAgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoKQogewogCWludCBzdGF0ZSA9IDA7CkBAIC0zMDcsNyArMzEwLDcgQEAKIAkvKiBwcm9jZXNzIG9ubHkgcGFja2V0cyBjb250YWluZyBkYXRhIC4uLiAqLwogCWlmIChkYXRhX2xlbmd0aCkgewogCQlwa3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2FybWluX3BhY2tldCkrZGF0YV9sZW5ndGgsCi0JCSAgICAgICAgICAgICAgR0ZQX0FUT01JQyk7CisJCQkJCQkJCUdGUF9BVE9NSUMpOwogCQlpZiAocGt0ID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJmdhcm1pbl9kYXRhX3AtPnBvcnQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJcmV0dXJuIDA7CkBAIC0zMjUsMTYgKzMyOCwxNSBAQAogCiAJCS8qIGluIHNlcmlhbCBtb2RlLCBpZiBzb21lb25lIGlzIHdhaXRpbmcgZm9yIGRhdGEgZnJvbQogCQkgICB0aGUgZGV2aWNlLCBpY29udmVydCBhbmQgc2VuZCB0aGUgbmV4dCBwYWNrZXQgdG8gdHR5LiAqLwotCQlpZiAocmVzdWx0ICYmIChzdGF0ZSA9PSBTVEFURV9HU1BfV0FJVF9EQVRBKSkgeworCQlpZiAocmVzdWx0ICYmIChzdGF0ZSA9PSBTVEFURV9HU1BfV0FJVF9EQVRBKSkKIAkJCWdzcF9uZXh0X3BhY2tldChnYXJtaW5fZGF0YV9wKTsKLQkJfQogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQogCiAKIC8qIGdldCB0aGUgbmV4dCBwZW5kaW5nIHBhY2tldCAqLwotc3RhdGljIHN0cnVjdCBnYXJtaW5fcGFja2V0ICpwa3RfcG9wKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCitzdGF0aWMgc3RydWN0IGdhcm1pbl9wYWNrZXQgKnBrdF9wb3Aoc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGdhcm1pbl9wYWNrZXQgKnJlc3VsdCA9IE5VTEw7CkBAIC0zNTAsNyArMzUyLDcgQEAKIAogCiAvKiBmcmVlIHVwIGFsbCBxdWV1ZWQgZGF0YSAqLwotc3RhdGljIHZvaWQgcGt0X2NsZWFyKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCitzdGF0aWMgdm9pZCBwa3RfY2xlYXIoc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGdhcm1pbl9wYWNrZXQgKnJlc3VsdCA9IE5VTEw7CkBAIC0zNzIsNyArMzc0LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHNlbmQgYW4gYWNrIHBhY2tldCBiYWNrIHRvIHRoZSB0dHkgKi8KLXN0YXRpYyBpbnQgZ3NwX3NlbmRfYWNrKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsIF9fdTggcGt0X2lkKQorc3RhdGljIGludCBnc3Bfc2VuZF9hY2soc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wLCBfX3U4IHBrdF9pZCkKIHsKIAlfX3U4IHBrdFsxMF07CiAJX191OCBja3N1bSA9IDA7CkBAIC0zOTEsOSArMzkzLDggQEAKIAkqcHRyKysgPSBwa3RfaWQ7CiAJY2tzdW0gKz0gcGt0X2lkOwogCi0JaWYgKHBrdF9pZCA9PSBETEUpIHsKKwlpZiAocGt0X2lkID09IERMRSkKIAkJKnB0cisrID0gRExFOwotCX0KIAogCSpwdHIrKyA9IDA7CiAJKnB0cisrID0gMHhGRiAmICgtY2tzdW0pOwpAQCAtNDE1LDEyICs0MTYsMTIgQEAKICAqIGF0IEdTUF9JTklUSUFMX09GRlNFVC4KICAqCiAgKiBjb3VudCAtIG51bWJlciBvZiBieXRlcyBpbiB0aGUgaW5wdXQgYnVmZmVyIGluY2x1ZGluZyBzcGFjZSByZXNlcnZlZCBmb3IKLSAqICAgICAgICAgdGhlIHVzYiBoZWFkZXI6IEdTUF9JTklUSUFMX09GRlNFVCArIG51bWJlciBvZiBieXRlcyBpbiBwYWNrZXQgCisgKiAgICAgICAgIHRoZSB1c2IgaGVhZGVyOiBHU1BfSU5JVElBTF9PRkZTRVQgKyBudW1iZXIgb2YgYnl0ZXMgaW4gcGFja2V0CiAgKiAgICAgICAgIChpbmNsdWRpbmcgcGt0LWlkLCBkYXRhLWxlbmd0aCBhLiBja3N1bSkKICAqLwotc3RhdGljIGludCBnc3BfcmVjX3BhY2tldChzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGdzcF9yZWNfcGFja2V0KHN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCwgaW50IGNvdW50KQogewotCWNvbnN0IF9fdTgqIHJlY3BrdCA9IGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyK0dTUF9JTklUSUFMX09GRlNFVDsKKwljb25zdCBfX3U4ICpyZWNwa3QgPSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcitHU1BfSU5JVElBTF9PRkZTRVQ7CiAJX19sZTMyICp1c2JkYXRhID0gKF9fbGUzMiAqKSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcjsKIAogCWludCBja3N1bSA9IDA7CkBAIC00NDAsOCArNDQxLDggQEAKIAlja3N1bSArPSAqcmVjcGt0Kys7CiAJY2tzdW0gKz0gKnJlY3BrdCsrOwogCi0JLy8gc2FuaXR5IGNoZWNrLCByZW1vdmUgYWZ0ZXIgdGVzdCAuLi4KLQlpZiAoKF9fdTgqKSYodXNiZGF0YVszXSkgIT0gcmVjcGt0KSB7CisJLyogc2FuaXR5IGNoZWNrLCByZW1vdmUgYWZ0ZXIgdGVzdCAuLi4gKi8KKwlpZiAoKF9fdTggKikmKHVzYmRhdGFbM10pICE9IHJlY3BrdCkgewogCQlkYmcoIiVzIC0gcHRyIG1pc21hdGNoICVwIC0gJXAiLAogCQkJX19mdW5jX18sICYodXNiZGF0YVs0XSksIHJlY3BrdCk7CiAJCXJldHVybiAtRUlOVlBLVDsKQEAgLTQ2Miw3ICs0NjMsNyBAQAogCXVzYmRhdGFbMV0gPSBfX2NwdV90b19sZTMyKHBrdGlkKTsKIAl1c2JkYXRhWzJdID0gX19jcHVfdG9fbGUzMihzaXplKTsKIAotCWdhcm1pbl93cml0ZV9idWxrIChnYXJtaW5fZGF0YV9wLT5wb3J0LCBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlciwKKwlnYXJtaW5fd3JpdGVfYnVsayhnYXJtaW5fZGF0YV9wLT5wb3J0LCBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlciwKIAkJCSAgIEdBUk1JTl9QS1RIRFJfTEVOR1RIK3NpemUsIDApOwogCiAJLyogaWYgdGhpcyB3YXMgYW4gYWJvcnQtdHJhbnNmZXIgY29tbWFuZCwgZmx1c2ggYWxsCkBAIC00OTUsNyArNDk2LDcgQEAKICAqIGlmIHRoZSBpbnB1dCBpcyBhbiBhYm9ydCBjb21tYW5kLCBkcm9wIGFsbCBxdWV1ZWQgZGF0YS4KICAqLwogCi1zdGF0aWMgaW50IGdzcF9yZWNlaXZlKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsCitzdGF0aWMgaW50IGdzcF9yZWNlaXZlKHN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCwKIAkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MDQsMTAgKzUwNSwxMSBAQAogCWludCBpID0gMDsKIAlfX3U4ICpkZXN0OwogCWludCBzaXplOwotCS8vIGRsZVNlZW46IHNldCBpZiBsYXN0IGJ5dGUgcmVhZCB3YXMgYSBETEUKKwkvKiBkbGVTZWVuOiBzZXQgaWYgbGFzdCBieXRlIHJlYWQgd2FzIGEgRExFICovCiAJaW50IGRsZVNlZW47Ci0JLy8gc2tpcDogaWYgc2V0LCBza2lwIGluY29taW5nIGRhdGEgdW50aWwgcG9zc2libGUgc3RhcnQgb2YKLQkvLyAgICAgICBuZXcgcGFja2V0CisJLyogc2tpcDogaWYgc2V0LCBza2lwIGluY29taW5nIGRhdGEgdW50aWwgcG9zc2libGUgc3RhcnQgb2YKKwkgKiAgICAgICBuZXcgcGFja2V0CisJICovCiAJaW50IHNraXA7CiAJX191OCBkYXRhOwogCkBAIC01MjEsMTQgKzUyMywxMyBAQAogCWRiZygiJXMgLSBkbGU9JWQgc2tpcD0lZCBzaXplPSVkIGNvdW50PSVkIiwKIAkJX19mdW5jX18sIGRsZVNlZW4sIHNraXAsIHNpemUsIGNvdW50KTsKIAotCWlmIChzaXplID09IDApIHsKKwlpZiAoc2l6ZSA9PSAwKQogCQlzaXplID0gR1NQX0lOSVRJQUxfT0ZGU0VUOwotCX0KIAogCXdoaWxlIChvZmZzIDwgY291bnQpIHsKIAogCQlkYXRhID0gKihidWYrb2Zmcyk7Ci0JCW9mZnMgKys7CisJCW9mZnMrKzsKIAogCQlpZiAoZGF0YSA9PSBETEUpIHsKIAkJCWlmIChza2lwKSB7IC8qIHN0YXJ0IG9mIGEgbmV3IHBrdCAqLwpAQCAtNTU0LDkgKzU1NSw4IEBACiAJCQkJCWFja19vcl9uYWtfc2VlbiA9IE5BSzsKIAkJCQkJZGJnKCJOQUsgcGFja2V0IGNvbXBsZXRlLiIpOwogCQkJCX0gZWxzZSB7Ci0JCQkJCWRiZygicGFja2V0IGNvbXBsZXRlICIKLQkJCQkJCSAgICAgICAgIi0gaWQ9MHglWC4iLAotCQkJCQkJICAgICAgICAweEZGICYgZGF0YSk7CisJCQkJCWRiZygicGFja2V0IGNvbXBsZXRlIC0gaWQ9MHglWC4iLAorCQkJCQkJMHhGRiAmIGRhdGEpOwogCQkJCQlnc3BfcmVjX3BhY2tldChnYXJtaW5fZGF0YV9wLCBzaXplKTsKIAkJCQl9CiAKQEAgLTU4OSw3ICs1ODksNyBAQAogCiAJZ2FybWluX2RhdGFfcC0+aW5zaXplID0gc2l6ZTsKIAotCS8vIGNvcHkgZmxhZ3MgYmFjayB0byBzdHJ1Y3R1cmUKKwkvKiBjb3B5IGZsYWdzIGJhY2sgdG8gc3RydWN0dXJlICovCiAJaWYgKHNraXApCiAJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0dTUF9TS0lQOwogCWVsc2UKQEAgLTYwMCwxNiArNjAwLDEzIEBACiAJZWxzZQogCQlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+RkxBR1NfR1NQX0RMRVNFRU47CiAKLQlpZiAoYWNrX29yX25ha19zZWVuKSB7CisJaWYgKGFja19vcl9uYWtfc2VlbikKIAkJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSBTVEFURV9HU1BfV0FJVF9EQVRBOwotCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChhY2tfb3JfbmFrX3NlZW4pIHsKKwlpZiAoYWNrX29yX25ha19zZWVuKQogCQlnc3BfbmV4dF9wYWNrZXQoZ2FybWluX2RhdGFfcCk7Ci0JfQotCiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC02MjMsNyArNjIwLDcgQEAKICAqCiAgKiByZXR1cm4gPDAgb24gZXJyb3IsIDAgaWYgcGFja2V0IGlzIGluY29tcGxldGUgb3IgPiAwIGlmIHBhY2tldCB3YXMgc2VudAogICovCi1zdGF0aWMgaW50IGdzcF9zZW5kKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsCitzdGF0aWMgaW50IGdzcF9zZW5kKHN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYzsKQEAgLTYzMSwxMSArNjI4LDExIEBACiAJaW50IHBrdGlkID0gMDsKIAlpbnQgZGF0YWxlbiA9IDA7CiAJaW50IGNrc3VtID0gMDsKLQlpbnQgaT0wOworCWludCBpID0gMDsKIAlpbnQgazsKIAogCWRiZygiJXMgLSBzdGF0ZSAlZCAtICVkIGJ5dGVzLiIsIF9fZnVuY19fLAotCSAgICAgICAgIGdhcm1pbl9kYXRhX3AtPnN0YXRlLCBjb3VudCk7CisJCQkJCWdhcm1pbl9kYXRhX3AtPnN0YXRlLCBjb3VudCk7CiAKIAlrID0gZ2FybWluX2RhdGFfcC0+b3V0c2l6ZTsKIAlpZiAoKGsrY291bnQpID4gR1BTX09VVF9CVUZTSVopIHsKQEAgLTY1MCw3ICs2NDcsNyBAQAogCiAJaWYgKGsgPj0gR0FSTUlOX1BLVEhEUl9MRU5HVEgpIHsKIAkJcGt0aWQgID0gZ2V0UGFja2V0SWQoZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyKTsKLQkJZGF0YWxlbj0gZ2V0RGF0YUxlbmd0aChnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIpOworCQlkYXRhbGVuID0gZ2V0RGF0YUxlbmd0aChnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIpOwogCQlpID0gR0FSTUlOX1BLVEhEUl9MRU5HVEggKyBkYXRhbGVuOwogCQlpZiAoayA8IGkpCiAJCQlyZXR1cm4gMDsKQEAgLTY1OCwxOSArNjU1LDE4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWRiZygiJXMgLSAlZCBieXRlcyBpbiBidWZmZXIsICVkIGJ5dGVzIGluIHBrdC4iLCBfX2Z1bmNfXywKLQkgICAgICAgICBrLCBpKTsKKwlkYmcoIiVzIC0gJWQgYnl0ZXMgaW4gYnVmZmVyLCAlZCBieXRlcyBpbiBwa3QuIiwgX19mdW5jX18sIGssIGkpOwogCiAJLyogZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyIG5vdyBjb250YWlucyBhIGNvbXBsZXRlIHBhY2tldCAqLwogCiAJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZ2FybWluX2RhdGFfcC0+cG9ydC0+ZGV2LAotCQkgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGssIGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcik7CisJCQkJX19mdW5jX18sIGssIGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcik7CiAKIAlnYXJtaW5fZGF0YV9wLT5vdXRzaXplID0gMDsKIAogCWlmIChHQVJNSU5fTEFZRVJJRF9BUFBMICE9IGdldExheWVySWQoZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyKSkgewotCQlkYmcoIm5vdCBhbiBhcHBsaWNhdGlvbiBwYWNrZXQgKCVkKSIsIAotCQkgICAgICAgIGdldExheWVySWQoZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyKSk7CisJCWRiZygibm90IGFuIGFwcGxpY2F0aW9uIHBhY2tldCAoJWQpIiwKKwkJCQlnZXRMYXllcklkKGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcikpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC02ODgsMTQgKzY4NCwxNCBAQAogCiAJayA9IDA7CiAJc3JjID0gZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyK0dBUk1JTl9QS1RIRFJfTEVOR1RIOwotCWZvciAoaT0wOyBpPGRhdGFsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkYXRhbGVuOyBpKyspIHsKIAkJaWYgKCpzcmMrKyA9PSBETEUpCiAJCQlrKys7CiAJfQogCiAJc3JjID0gZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyK0dBUk1JTl9QS1RIRFJfTEVOR1RIOwogCWlmIChrID4gKEdBUk1JTl9QS1RIRFJfTEVOR1RILTIpKSB7Ci0JCS8qIGNhbid0IGFkZCBzdHVmZmluZyBETEVzIGluIHBsYWNlLCBtb3ZlIGRhdGEgdG8gZW5kIAorCQkvKiBjYW4ndCBhZGQgc3R1ZmZpbmcgRExFcyBpbiBwbGFjZSwgbW92ZSBkYXRhIHRvIGVuZAogCQkgICBvZiBidWZmZXIgLi4uICovCiAJCWRzdCA9IGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcitHUFNfT1VUX0JVRlNJWi1kYXRhbGVuOwogCQltZW1jcHkoZHN0LCBzcmMsIGRhdGFsZW4pOwpAQCAtNzEyLDE0ICs3MDgsMTQgQEAKIAlpZiAoZGF0YWxlbiA9PSBETEUpCiAJCSpkc3QrKyA9IERMRTsKIAotCWZvciAoaT0wOyBpPGRhdGFsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkYXRhbGVuOyBpKyspIHsKIAkJX191OCBjID0gKnNyYysrOwogCQkqZHN0KysgPSBjOwogCQlja3N1bSArPSBjOwogCQlpZiAoYyA9PSBETEUpCiAJCQkqZHN0KysgPSBETEU7CiAJfQotCQkKKwogCWNrc3VtID0gMHhGRiAmIC1ja3N1bTsKIAkqZHN0KysgPSBja3N1bTsKIAlpZiAoY2tzdW0gPT0gRExFKQpAQCAtNzQ0LDcgKzc0MCw3IEBACiAvKgogICogUHJvY2VzcyB0aGUgbmV4dCBwZW5kaW5nIGRhdGEgcGFja2V0IC0gaWYgdGhlcmUgaXMgb25lCiAgKi8KLXN0YXRpYyB2b2lkIGdzcF9uZXh0X3BhY2tldChzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKQorc3RhdGljIHZvaWQgZ3NwX25leHRfcGFja2V0KHN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCkKIHsKIAlzdHJ1Y3QgZ2FybWluX3BhY2tldCAqcGt0ID0gTlVMTDsKIApAQCAtNzc0LDE3ICs3NzAsMTcgQEAKICAqIGJ1ZiBjb250YWlucyB0aGUgZGF0YSByZWFkLCBpdCBtYXkgc3BhbiBtb3JlIHRoYW4gb25lIHBhY2tldAogICogb3IgZXZlbiBpbmNvbXBsZXRlIHBhY2tldHMKICAqLwotc3RhdGljIGludCBuYXRfcmVjZWl2ZShzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLAorc3RhdGljIGludCBuYXRfcmVjZWl2ZShzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AsCiAJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCV9fdTggKiBkZXN0OworCV9fdTggKmRlc3Q7CiAJaW50IG9mZnMgPSAwOwogCWludCByZXN1bHQgPSBjb3VudDsKIAlpbnQgbGVuOwogCiAJd2hpbGUgKG9mZnMgPCBjb3VudCkgewotCQkvLyBpZiBidWZmZXIgY29udGFpbnMgaGVhZGVyLCBjb3B5IHJlc3Qgb2YgZGF0YQorCQkvKiBpZiBidWZmZXIgY29udGFpbnMgaGVhZGVyLCBjb3B5IHJlc3Qgb2YgZGF0YSAqLwogCQlpZiAoZ2FybWluX2RhdGFfcC0+aW5zaXplID49IEdBUk1JTl9QS1RIRFJfTEVOR1RIKQogCQkJbGVuID0gR0FSTUlOX1BLVEhEUl9MRU5HVEgKIAkJCSAgICAgICtnZXREYXRhTGVuZ3RoKGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyKTsKQEAgLTc5Miw5ICs3ODgsOSBAQAogCQkJbGVuID0gR0FSTUlOX1BLVEhEUl9MRU5HVEg7CiAKIAkJaWYgKGxlbiA+PSBHUFNfSU5fQlVGU0laKSB7Ci0JCQkvKiBzZWVtIHRvIGJlIGFuIGludmFsaWQgcGFja2V0LCBpZ25vcmUgcmVzdCBvZiBpbnB1dCAqLwotCQkJZGJnKCIlcyAtIHBhY2tldCBzaXplIHRvbyBsYXJnZTogJWQiLAotCQkJICAgICAgICBfX2Z1bmNfXywgbGVuKTsKKwkJCS8qIHNlZW1zIHRvIGJlIGFuIGludmFsaWQgcGFja2V0LCBpZ25vcmUgcmVzdAorCQkJICAgb2YgaW5wdXQgKi8KKwkJCWRiZygiJXMgLSBwYWNrZXQgc2l6ZSB0b28gbGFyZ2U6ICVkIiwgX19mdW5jX18sIGxlbik7CiAJCQlnYXJtaW5fZGF0YV9wLT5pbnNpemUgPSAwOwogCQkJY291bnQgPSAwOwogCQkJcmVzdWx0ID0gLUVJTlZQS1Q7CkBAIC04MDQsNyArODAwLDcgQEAKIAkJCQlsZW4gPSAoY291bnQtb2Zmcyk7CiAJCQlpZiAobGVuID4gMCkgewogCQkJCWRlc3QgPSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcgotCQkJCSAgICAgICAJK2dhcm1pbl9kYXRhX3AtPmluc2l6ZTsKKwkJCQkJCSsgZ2FybWluX2RhdGFfcC0+aW5zaXplOwogCQkJCW1lbWNweShkZXN0LCBidWYrb2ZmcywgbGVuKTsKIAkJCQlnYXJtaW5fZGF0YV9wLT5pbnNpemUgKz0gbGVuOwogCQkJCW9mZnMgKz0gbGVuOwpAQCAtODE2LDE3ICs4MTIsMTkgQEAKIAkJCWxlbiA9IEdBUk1JTl9QS1RIRFJfTEVOR1RIKwogCQkJICAgZ2V0RGF0YUxlbmd0aChnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcik7CiAJCQlpZiAoZ2FybWluX2RhdGFfcC0+aW5zaXplID49IGxlbikgewotCQkJCWdhcm1pbl93cml0ZV9idWxrIChnYXJtaW5fZGF0YV9wLT5wb3J0LAotCQkJCSAgICAgICAgICAgICAgICAgICBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlciwKLQkJCQkgICAgICAgICAgICAgICAgICAgbGVuLCAwKTsKKwkJCQlnYXJtaW5fd3JpdGVfYnVsayhnYXJtaW5fZGF0YV9wLT5wb3J0LAorCQkJCQkJICAgZ2FybWluX2RhdGFfcC0+aW5idWZmZXIsCisJCQkJCQkgICBsZW4sIDApOwogCQkJCWdhcm1pbl9kYXRhX3AtPmluc2l6ZSA9IDA7CiAKIAkJCQkvKiBpZiB0aGlzIHdhcyBhbiBhYm9ydC10cmFuc2ZlciBjb21tYW5kLAogCQkJCSAgIGZsdXNoIGFsbCBxdWV1ZWQgZGF0YS4gKi8KIAkJCQlpZiAoaXNBYm9ydFRyZkNtbmQoZ2FybWluX2RhdGFfcC0+aW5idWZmZXIpKSB7Ci0JCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLAorCQkJCQkJCQkJZmxhZ3MpOwogCQkJCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19EUk9QX0RBVEE7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCQkJCSZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCQkJCXBrdF9jbGVhcihnYXJtaW5fZGF0YV9wKTsKIAkJCQl9CiAJCQl9CkBAIC04NDIsNyArODQwLDcgQEAKIAogc3RhdGljIHZvaWQgcHJpdl9zdGF0dXNfcmVzcChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCV9fbGUzMiAqcGt0ID0gKF9fbGUzMiAqKWdhcm1pbl9kYXRhX3AtPnByaXZwa3Q7CiAKIAlwa3RbMF0gPSBfX2NwdV90b19sZTMyKEdBUk1JTl9MQVlFUklEX1BSSVZBVEUpOwpAQCAtODUyLDcgKzg1MCw3IEBACiAJcGt0WzRdID0gX19jcHVfdG9fbGUzMihnYXJtaW5fZGF0YV9wLT5tb2RlKTsKIAlwa3RbNV0gPSBfX2NwdV90b19sZTMyKGdhcm1pbl9kYXRhX3AtPnNlcmlhbF9udW0pOwogCi0Jc2VuZF90b190dHkocG9ydCwgKF9fdTgqKXBrdCwgNio0KTsKKwlzZW5kX3RvX3R0eShwb3J0LCAoX191OCAqKXBrdCwgNiAqIDQpOwogfQogCiAKQEAgLTg2NCw3ICs4NjIsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1czsKLQlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfihDTEVBUl9IQUxUX1JFUVVJUkVEKTsKQEAgLTg3Miw4ICs4NzAsOCBAQAogCWdhcm1pbl9kYXRhX3AtPnNlcmlhbF9udW0gPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAotCXVzYl9raWxsX3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Ci0JZGJnKCIlcyAtIHVzYl9yZXNldF9kZXZpY2UiLCBfX2Z1bmNfXyApOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwlkYmcoIiVzIC0gdXNiX3Jlc2V0X2RldmljZSIsIF9fZnVuY19fKTsKIAlzdGF0dXMgPSB1c2JfcmVzZXRfZGV2aWNlKHBvcnQtPnNlcmlhbC0+ZGV2KTsKIAlpZiAoc3RhdHVzKQogCQlkYmcoIiVzIC0gdXNiX3Jlc2V0X2RldmljZSBmYWlsZWQ6ICVkIiwKQEAgLTg4Niw3ICs4ODQsNyBAQAogLyoKICAqIGNsZWFyIGFsbCBjYWNoZWQgZGF0YQogICovCi1zdGF0aWMgaW50IGdhcm1pbl9jbGVhcihzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKQorc3RhdGljIGludCBnYXJtaW5fY2xlYXIoc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1cyA9IDA7CkBAIC04OTYsOCArODk0LDcgQEAKIAlpZiAocG9ydCAhPSBOVUxMICYmIGF0b21pY19yZWFkKCZnYXJtaW5fZGF0YV9wLT5yZXNwX2NvdW50KSkgewogCQkvKiBzZW5kIGEgdGVybWluYXRlIGNvbW1hbmQgKi8KIAkJc3RhdHVzID0gZ2FybWluX3dyaXRlX2J1bGsocG9ydCwgR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRKSwKLQkJCQkJICAgMSk7CisJCQkJCXNpemVvZihHQVJNSU5fU1RPUF9UUkFOU0ZFUl9SRVEpLCAxKTsKIAl9CiAKIAkvKiBmbHVzaCBhbGwgcXVldWVkIGRhdGEgKi8KQEAgLTkyMCwyOCArOTE3LDI2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBzdGF0dXMgPSAwOwogCiAJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCXVzYl9raWxsX3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKIAogCQlkYmcoIiVzIC0gYWRkaW5nIGludGVycnVwdCBpbnB1dCIsIF9fZnVuY19fKTsKIAkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAoc3RhdHVzKQogCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKLQkJCSAgICAgICAgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiwiCi0JCQkJIiBlcnJvciAlZFxuIiwKLQkJCSAgICAgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCQkgICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCX0KIAogCWlmIChzdGF0dXMgPT0gMCkgewogCQlkYmcoIiVzIC0gc3RhcnRpbmcgc2Vzc2lvbiAuLi4iLCBfX2Z1bmNfXyk7CiAJCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfQUNUSVZFOwogCQlzdGF0dXMgPSBnYXJtaW5fd3JpdGVfYnVsayhwb3J0LCBHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVEsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVEpLAotCQkJCQkgICAwKTsKKwkJCQkJc2l6ZW9mKEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUSksIDApOwogCiAJCWlmIChzdGF0dXMgPj0gMCkgewogCkBAIC05NTEsMTQgKzk0NiwxNCBAQAogCiAJCQkvKiBub3QgbmVlZGVkLCBidXQgdGhlIHdpbjMyIGRyaXZlciBkb2VzIGl0IHRvbyAuLi4gKi8KIAkJCXN0YXR1cyA9IGdhcm1pbl93cml0ZV9idWxrKHBvcnQsCi0JCQkJCQkgICBHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVEyLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUTIpLAotCQkJCQkJICAgMCk7CisJCQkJCUdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUTIsCisJCQkJCXNpemVvZihHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVEyKSwgMCk7CiAJCQlpZiAoc3RhdHVzID49IDApIHsKIAkJCQlzdGF0dXMgPSAwOwogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCQkJZ2FybWluX2RhdGFfcC0+aWdub3JlUGt0cysrOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLAorCQkJCQkJCQkJZmxhZ3MpOwogCQkJfQogCQl9CiAJfQpAQCAtOTcwLDExICs5NjUsMTIgQEAKIAogCiAKLXN0YXRpYyBpbnQgZ2FybWluX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBnYXJtaW5fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKQEAgLTk4Myw4ICs5NzksOCBAQAogCSAqIHRocm91Z2gsIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2ggZGF0YSByYXRlcyAobGlrZQogCSAqIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuCiAJICovCi0JaWYgKHBvcnQtPnR0eSkKLQkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCWdhcm1pbl9kYXRhX3AtPm1vZGUgID0gaW5pdGlhbF9tb2RlOwpAQCAtOTk1LDIzICs5OTEsMjIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBzaHV0ZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uICovCi0JdXNiX2tpbGxfdXJiIChwb3J0LT53cml0ZV91cmIpOwotCXVzYl9raWxsX3VyYiAocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CiAKLQlpZiAoZ2FybWluX2RhdGFfcC0+c3RhdGUgPT0gU1RBVEVfUkVTRVQpIHsKKwlpZiAoZ2FybWluX2RhdGFfcC0+c3RhdGUgPT0gU1RBVEVfUkVTRVQpCiAJCXN0YXR1cyA9IGdhcm1pbl9pbml0X3Nlc3Npb24ocG9ydCk7Ci0JfQogCiAJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSBTVEFURV9BQ1RJVkU7Ci0KIAlyZXR1cm4gc3RhdHVzOwogfQogCiAKLXN0YXRpYyB2b2lkIGdhcm1pbl9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIHZvaWQgZ2FybWluX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQgLSBtb2RlPSVkIHN0YXRlPSVkIGZsYWdzPTB4JVgiLCBfX2Z1bmNfXywKIAkJcG9ydC0+bnVtYmVyLCBnYXJtaW5fZGF0YV9wLT5tb2RlLApAQCAtMTAyNSw4ICsxMDIwLDggQEAKIAkJZ2FybWluX2NsZWFyKGdhcm1pbl9kYXRhX3ApOwogCiAJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KLQl1c2Jfa2lsbF91cmIgKHBvcnQtPnJlYWRfdXJiKTsKLQl1c2Jfa2lsbF91cmIgKHBvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKIAogCWlmICghcG9ydC0+c2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKIAkJaWYgKG5vUmVzcG9uc2VGcm9tQXBwTGF5ZXIoZ2FybWluX2RhdGFfcCkgfHwKQEAgLTEwNDIsMjEgKzEwMzcsMjIgQEAKIAltdXRleF91bmxvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7CiB9CiAKLQotc3RhdGljIHZvaWQgZ2FybWluX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIGdhcm1pbl93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCiAJaWYgKHBvcnQpIHsKLQkJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0KKwkJCQkJdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAkJaWYgKEdBUk1JTl9MQVlFUklEX0FQUEwgPT0gZ2V0TGF5ZXJJZCh1cmItPnRyYW5zZmVyX2J1ZmZlcikKIAkJICAgICYmIChnYXJtaW5fZGF0YV9wLT5tb2RlID09IE1PREVfR0FSTUlOX1NFUklBTCkpICB7Ci0JCQlnc3Bfc2VuZF9hY2soZ2FybWluX2RhdGFfcCwgKChfX3U4ICopdXJiLT50cmFuc2Zlcl9idWZmZXIpWzRdKTsKKwkJCWdzcF9zZW5kX2FjayhnYXJtaW5fZGF0YV9wLAorCQkJCQkoKF9fdTggKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbNF0pOwogCQl9CiAKIAkJaWYgKHN0YXR1cykgewpAQCAtMTA3MCwyMCArMTA2NiwyMSBAQAogCQl1c2Jfc2VyaWFsX3BvcnRfc29mdGludChwb3J0KTsKIAl9CiAKLQkvKiBJZ25vcmUgZXJyb3JzIHRoYXQgcmVzdWx0ZWQgZnJvbSBnYXJtaW5fd3JpdGVfYnVsayB3aXRoIGRpc21pc3NfYWNrPTEgKi8KKwkvKiBJZ25vcmUgZXJyb3JzIHRoYXQgcmVzdWx0ZWQgZnJvbSBnYXJtaW5fd3JpdGVfYnVsayB3aXRoCisJICAgZGlzbWlzc19hY2sgPSAxICovCiAKIAkvKiBmcmVlIHVwIHRoZSB0cmFuc2ZlciBidWZmZXIsIGFzIHVzYl9mcmVlX3VyYigpIGRvZXMgbm90IGRvIHRoaXMgKi8KLQlrZnJlZSAodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIH0KIAogCi1zdGF0aWMgaW50IGdhcm1pbl93cml0ZV9idWxrIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorc3RhdGljIGludCBnYXJtaW5fd3JpdGVfYnVsayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQsCiAJCQkgICAgICBpbnQgZGlzbWlzc19hY2spCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB1cmIgKnVyYjsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAJaW50IHN0YXR1czsKQEAgLTEwOTUsNyArMTA5Miw3IEBACiAJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfkZMQUdTX0RST1BfREFUQTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAKLQlidWZmZXIgPSBrbWFsbG9jIChjb3VudCwgR0ZQX0FUT01JQyk7CisJYnVmZmVyID0ga21hbGxvYyhjb3VudCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFidWZmZXIpIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTEwNCwxNyArMTEwMSwxNyBAQAogCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CiAJaWYgKCF1cmIpIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAibm8gbW9yZSBmcmVlIHVyYnNcbiIpOwotCQlrZnJlZSAoYnVmZmVyKTsKKwkJa2ZyZWUoYnVmZmVyKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbWVtY3B5IChidWZmZXIsIGJ1ZiwgY291bnQpOworCW1lbWNweShidWZmZXIsIGJ1ZiwgY291bnQpOwogCiAJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIGJ1ZmZlcik7CiAKLQl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBzZXJpYWwtPmRldiwKLQkJCSAJdXNiX3NuZGJ1bGtwaXBlIChzZXJpYWwtPmRldiwKLQkJCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkJdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAogCQkJCWJ1ZmZlciwgY291bnQsCiAJCQkJZ2FybWluX3dyaXRlX2J1bGtfY2FsbGJhY2ssCiAJCQkJZGlzbWlzc19hY2sgPyBOVUxMIDogcG9ydCk7CkBAIC0xMTMyLDMzICsxMTI5LDI5IEBACiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJICAgICAgICAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSAiCi0JCSAgICAgICAgImZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkXG4iLAorCQkgICAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJY291bnQgPSBzdGF0dXM7CiAJfQogCiAJLyogd2UgYXJlIGRvbmUgd2l0aCB0aGlzIHVyYiwgc28gbGV0IHRoZSBob3N0IGRyaXZlcgogCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLwotCXVzYl9mcmVlX3VyYiAodXJiKTsKKwl1c2JfZnJlZV91cmIodXJiKTsKIAogCXJldHVybiBjb3VudDsKIH0KIAotCi0KLXN0YXRpYyBpbnQgZ2FybWluX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorc3RhdGljIGludCBnYXJtaW5fd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCWludCBwa3RpZCwgcGt0c2l6LCBsZW47Ci0Jc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJX19sZTMyICpwcml2cGt0ID0gKF9fbGUzMiAqKWdhcm1pbl9kYXRhX3AtPnByaXZwa3Q7CiAKIAl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwgYnVmKTsKIAogCS8qIGNoZWNrIGZvciBvdXIgcHJpdmF0ZSBwYWNrZXRzICovCiAJaWYgKGNvdW50ID49IEdBUk1JTl9QS1RIRFJfTEVOR1RIKSB7Ci0KIAkJbGVuID0gUFJJVlBLVFNJWjsKIAkJaWYgKGNvdW50IDwgbGVuKQogCQkJbGVuID0gY291bnQ7CkBAIC0xMTY5LDE1ICsxMTYyLDE2IEBACiAJCXBrdGlkICA9IGdldFBhY2tldElkKGdhcm1pbl9kYXRhX3AtPnByaXZwa3QpOwogCiAJCWlmIChjb3VudCA9PSAoR0FSTUlOX1BLVEhEUl9MRU5HVEgrcGt0c2l6KQotCQkgICAgJiYgR0FSTUlOX0xBWUVSSURfUFJJVkFURSA9PSBnZXRMYXllcklkKGdhcm1pbl9kYXRhX3AtPnByaXZwa3QpKSB7CisJCSAgICAmJiBHQVJNSU5fTEFZRVJJRF9QUklWQVRFID09CisJCQkJZ2V0TGF5ZXJJZChnYXJtaW5fZGF0YV9wLT5wcml2cGt0KSkgewogCiAJCQlkYmcoIiVzIC0gcHJvY2Vzc2luZyBwcml2YXRlIHJlcXVlc3QgJWQiLAogCQkJCV9fZnVuY19fLCBwa3RpZCk7CiAKLQkJCS8vIGRyb3AgYWxsIHVuZmluaXNoZWQgdHJhbnNmZXJzCisJCQkvKiBkcm9wIGFsbCB1bmZpbmlzaGVkIHRyYW5zZmVycyAqLwogCQkJZ2FybWluX2NsZWFyKGdhcm1pbl9kYXRhX3ApOwogCi0JCQlzd2l0Y2gocGt0aWQpIHsKKwkJCXN3aXRjaCAocGt0aWQpIHsKIAogCQkJY2FzZSBQUklWX1BLVElEX1NFVF9ERUJVRzoKIAkJCQlpZiAocGt0c2l6ICE9IDQpCkBAIC0xMjI2LDQ0ICsxMjIwLDMxIEBACiB9CiAKIAotc3RhdGljIGludCBnYXJtaW5fd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgZ2FybWluX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAkvKgogCSAqIFJlcG9ydCBiYWNrIHRoZSBieXRlcyBjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZSBvdXRwdXQgYnVmZmVyLgogCSAqLwotCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXJldHVybiBHUFNfT1VUX0JVRlNJWi1nYXJtaW5fZGF0YV9wLT5vdXRzaXplOwogfQogCiAKLXN0YXRpYyBpbnQgZ2FybWluX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKLXsKLQkvKgotCSAqIFJlcG9ydCBiYWNrIHRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGluIG91ciBpbnB1dCBidWZmZXIuCi0JICogV2lsbCB0aGlzIGxvY2sgdXAgdGhlIGRyaXZlciAtIHRoZSBidWZmZXIgY29udGFpbnMgYW4gaW5jb21wbGV0ZQotCSAqIHBhY2thZ2Ugd2hpY2ggd2lsbCBub3QgYmUgd3JpdHRlbiB0byB0aGUgZGV2aWNlIHVudGlsIGl0Ci0JICogaGFzIGJlZW4gY29tcGxldGVkID8KLQkgKi8KLQkvL3N0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JLy9yZXR1cm4gZ2FybWluX2RhdGFfcC0+aW5zaXplOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGdhcm1pbl9yZWFkX3Byb2Nlc3Moc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwKK3N0YXRpYyB2b2lkIGdhcm1pbl9yZWFkX3Byb2Nlc3Moc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wLAogCQkJCSB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBkYXRhX2xlbmd0aCkKIHsKIAlpZiAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19EUk9QX0RBVEEpIHsKIAkJLyogYWJvcnQtdHJhbnNmZXIgY21kIGlzIGFjdGljZSAqLwogCQlkYmcoIiVzIC0gcGt0IGRyb3BwZWQiLCBfX2Z1bmNfXyk7CiAJfSBlbHNlIGlmIChnYXJtaW5fZGF0YV9wLT5zdGF0ZSAhPSBTVEFURV9ESVNDT05ORUNURUQgJiYKLQkgICAgICAgICAgIGdhcm1pbl9kYXRhX3AtPnN0YXRlICE9IFNUQVRFX1JFU0VUICkgeworCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSAhPSBTVEFURV9SRVNFVCkgewogCiAJCS8qIHJlbWVtYmVyIGFueSBhcHBsLmxheWVyIHBhY2tldHMsIHNvIHdlIGtub3cKIAkJICAgaWYgYSByZXNldCBpcyByZXF1aXJlZCBvciBub3Qgd2hlbiBjbG9zaW5nCiAJCSAgIHRoZSBkZXZpY2UgKi8KIAkJaWYgKDAgPT0gbWVtY21wKGRhdGEsIEdBUk1JTl9BUFBfTEFZRVJfUkVQTFksCi0JCSAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX0FQUF9MQVlFUl9SRVBMWSkpKSB7CisJCQkJc2l6ZW9mKEdBUk1JTl9BUFBfTEFZRVJfUkVQTFkpKSkgewogCQkJYXRvbWljX2luYygmZ2FybWluX2RhdGFfcC0+cmVzcF9jb3VudCk7CiAJCX0KIApAQCAtMTI3Myw5ICsxMjU0LDggQEAKIAkJaWYgKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfUVVFVUlORykgewogCQkJcGt0X2FkZChnYXJtaW5fZGF0YV9wLCBkYXRhLCBkYXRhX2xlbmd0aCk7CiAJCX0gZWxzZSBpZiAoZ2FybWluX2RhdGFfcC0+bW9kZSA9PSBNT0RFX0dBUk1JTl9TRVJJQUwpIHsKLQkJCWlmIChnZXRMYXllcklkKGRhdGEpID09IEdBUk1JTl9MQVlFUklEX0FQUEwpIHsKKwkJCWlmIChnZXRMYXllcklkKGRhdGEpID09IEdBUk1JTl9MQVlFUklEX0FQUEwpCiAJCQkJcGt0X2FkZChnYXJtaW5fZGF0YV9wLCBkYXRhLCBkYXRhX2xlbmd0aCk7Ci0JCQl9CiAJCX0gZWxzZSB7CiAJCQlzZW5kX3RvX3R0eShnYXJtaW5fZGF0YV9wLT5wb3J0LCBkYXRhLCBkYXRhX2xlbmd0aCk7CiAJCX0KQEAgLTEyODMsMTIgKzEyNjMsMTIgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBnYXJtaW5fcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCBnYXJtaW5fcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9ICBwb3J0LT5zZXJpYWw7Ci0Jc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAlpbnQgcmV0dmFsOwpAQCAtMTMwNiw3ICsxMjg2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LAogCQkJCV9fZnVuY19fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOwogCiAJZ2FybWluX3JlYWRfcHJvY2VzcyhnYXJtaW5fZGF0YV9wLCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtMTM0MCwxMyArMTMyMCwxMyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGdhcm1pbl9yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgZ2FybWluX3JlYWRfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXR2YWw7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKQEAgLTEzNzIsMzAgKzEzNTIsMzEgQEAKIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gc2l6ZW9mKEdBUk1JTl9CVUxLX0lOX0FWQUlMX1JFUExZKSAmJgogCSAgICAwID09IG1lbWNtcChkYXRhLCBHQVJNSU5fQlVMS19JTl9BVkFJTF9SRVBMWSwKLQkJICAgICAgICBzaXplb2YoR0FSTUlOX0JVTEtfSU5fQVZBSUxfUkVQTFkpKSkgeworCQkJCXNpemVvZihHQVJNSU5fQlVMS19JTl9BVkFJTF9SRVBMWSkpKSB7CiAKIAkJZGJnKCIlcyAtIGJ1bGsgZGF0YSBhdmFpbGFibGUuIiwgX19mdW5jX18pOwogCiAJCWlmICgwID09IChnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0JVTEtfSU5fQUNUSVZFKSkgewogCiAJCQkvKiBidWxrIGRhdGEgYXZhaWxhYmxlICovCi0JCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAotCQkJCQl1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAotCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkJCXVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKIAkJCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCiAJCQkJCWdhcm1pbl9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCQkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHJldHZhbCkgewogCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAotCQkJCV9fZnVuY19fLCByZXR2YWwpOworCQkJCSAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJldHZhbCk7CiAJCQl9IGVsc2UgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCQkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfQlVMS19JTl9BQ1RJVkU7CiAJCQkJLyogZG8gbm90IHNlbmQgdGhpcyBwYWNrZXQgdG8gdGhlIHVzZXIgKi8KIAkJCQlnYXJtaW5fZGF0YV9wLT5pZ25vcmVQa3RzID0gMTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywKKwkJCQkJCQkJCWZsYWdzKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIGJ1bGstaW4gdHJhbnNmZXIgc3RpbGwgYWN0aXZlICovCkBAIC0xNDA2LDE1ICsxMzg3LDE1IEBACiAKIAl9IGVsc2UgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAoNCtzaXplb2YoR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVQTFkpKQogCQkJICYmIDAgPT0gbWVtY21wKGRhdGEsIEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUExZLAotCQkJICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVBMWSkpKSB7CisJCQkJCXNpemVvZihHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVBMWSkpKSB7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfU0VTU0lPTl9SRVBMWTFfU0VFTjsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCiAJCS8qIHNhdmUgdGhlIHNlcmlhbCBudW1iZXIgKi8KLQkJZ2FybWluX2RhdGFfcC0+c2VyaWFsX251bSAKLQkJCT0gX19sZTMyX3RvX2NwdXAoKF9fbGUzMiopKGRhdGErR0FSTUlOX1BLVEhEUl9MRU5HVEgpKTsKKwkJZ2FybWluX2RhdGFfcC0+c2VyaWFsX251bSA9IF9fbGUzMl90b19jcHVwKAorCQkJCQkoX19sZTMyICopKGRhdGErR0FSTUlOX1BLVEhEUl9MRU5HVEgpKTsKIAogCQlkYmcoIiVzIC0gc3RhcnQtb2Ytc2Vzc2lvbiByZXBseSBzZWVuIC0gc2VyaWFsICV1LiIsCiAJCQlfX2Z1bmNfXywgZ2FybWluX2RhdGFfcC0+c2VyaWFsX251bSk7CkBAIC0xNDMzLDcgKzE0MTQsNyBAQAogCX0KIAogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKIAkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKIAkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYlxuIiwKQEAgLTE0NDYsNyArMTQyNyw3IEBACiAgKiBhbmQgdGhlbiBzZXRzIGEgdGltZXIgdG8gY2FsbCBpdHNlbGYgYWdhaW4gdW50aWwgYWxsIHF1ZXVlZCBkYXRhCiAgKiBpcyBzZW50LgogICovCi1zdGF0aWMgaW50IGdhcm1pbl9mbHVzaF9xdWV1ZShzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKQorc3RhdGljIGludCBnYXJtaW5fZmx1c2hfcXVldWUoc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGdhcm1pbl9wYWNrZXQgKnBrdDsKQEAgLTE0NjgsMTAgKzE0NDksMTEgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBnYXJtaW5fdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBnYXJtaW5fdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAkvKiBzZXQgZmxhZywgZGF0YSByZWNlaXZlZCB3aWxsIGJlIHB1dCBpbnRvIGEgcXVldWUKQEAgLTE0ODIsMTAgKzE0NjQsMTEgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBnYXJtaW5fdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGdhcm1pbl91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgc3RhdHVzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTE1MDcsOCArMTQ5MCw2IEBACiAJfQogfQogCi0KLQogLyoKICAqIFRoZSB0aW1lciBpcyBjdXJyZW50bHkgb25seSB1c2VkIHRvIHNlbmQgcXVldWVkIHBhY2tldHMgdG8KICAqIHRoZSB0dHkgaW4gY2FzZXMgd2hlcmUgdGhlIHByb3RvY29sIHByb3ZpZGVzIG5vIG93biBoYW5kc2hha2luZwpAQCAtMTUyNiwxMSArMTUwNywxMSBAQAogCiAKIAotc3RhdGljIGludCBnYXJtaW5fYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBnYXJtaW5fYXR0YWNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKLQlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gTlVMTDsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSBOVUxMOwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIApAQCAtMTU0Miw3ICsxNTIzLDcgQEAKIAlpbml0X3RpbWVyKCZnYXJtaW5fZGF0YV9wLT50aW1lcik7CiAJc3Bpbl9sb2NrX2luaXQoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZnYXJtaW5fZGF0YV9wLT5wa3RsaXN0KTsKLQkvL2dhcm1pbl9kYXRhX3AtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgc2Vzc2lvbl90aW1lb3V0OworCS8qIGdhcm1pbl9kYXRhX3AtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgc2Vzc2lvbl90aW1lb3V0OyAqLwogCWdhcm1pbl9kYXRhX3AtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylnYXJtaW5fZGF0YV9wOwogCWdhcm1pbl9kYXRhX3AtPnRpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9oYW5kbGVyOwogCWdhcm1pbl9kYXRhX3AtPnBvcnQgPSBwb3J0OwpAQCAtMTU1NiwxNiArMTUzNywxNiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGdhcm1pbl9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyB2b2lkIGdhcm1pbl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07Ci0Jc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCi0JdXNiX2tpbGxfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CiAJZGVsX3RpbWVyX3N5bmMoJmdhcm1pbl9kYXRhX3AtPnRpbWVyKTsKLQlrZnJlZSAoZ2FybWluX2RhdGFfcCk7CisJa2ZyZWUoZ2FybWluX2RhdGFfcCk7CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIE5VTEwpOwogfQogCkBAIC0xNTg4LDcgKzE1NjksNiBAQAogCS5zaHV0ZG93biAgICAgICAgICAgID0gZ2FybWluX3NodXRkb3duLAogCS53cml0ZSAgICAgICAgICAgICAgID0gZ2FybWluX3dyaXRlLAogCS53cml0ZV9yb29tICAgICAgICAgID0gZ2FybWluX3dyaXRlX3Jvb20sCi0JLmNoYXJzX2luX2J1ZmZlciAgICAgPSBnYXJtaW5fY2hhcnNfaW5fYnVmZmVyLAogCS53cml0ZV9idWxrX2NhbGxiYWNrID0gZ2FybWluX3dyaXRlX2J1bGtfY2FsbGJhY2ssCiAJLnJlYWRfYnVsa19jYWxsYmFjayAgPSBnYXJtaW5fcmVhZF9idWxrX2NhbGxiYWNrLAogCS5yZWFkX2ludF9jYWxsYmFjayAgID0gZ2FybWluX3JlYWRfaW50X2NhbGxiYWNrLApAQCAtMTU5Niw3ICsxNTc2LDcgQEAKIAogCiAKLXN0YXRpYyBpbnQgX19pbml0IGdhcm1pbl9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZ2FybWluX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCkBAIC0xNjE2LDEwICsxNTk2LDEwIEBACiB9CiAKIAotc3RhdGljIHZvaWQgX19leGl0IGdhcm1pbl9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGdhcm1pbl9leGl0KHZvaWQpCiB7Ci0JdXNiX2RlcmVnaXN0ZXIgKCZnYXJtaW5fZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZnYXJtaW5fZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3RlcigmZ2FybWluX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZnYXJtaW5fZGV2aWNlKTsKIH0KIAogCkBAIC0xNjI4LDggKzE2MDgsOCBAQAogbW9kdWxlX2luaXQoZ2FybWluX2luaXQpOwogbW9kdWxlX2V4aXQoZ2FybWluX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lXVVNSIHwgU19JUlVHTyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCA1MzdmMTJhLi5mZTg0Yzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogCiBzdGF0aWMgaW50IGRlYnVnOwpAQCAtODEsNyArODEsNyBAQAogfQogI2VuZGlmCiAKLWludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVnaXN0ZXIgKGludCBfZGVidWcpCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3JlZ2lzdGVyKGludCBfZGVidWcpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAKQEAgLTg5LDEwICs4OSwxMSBAQAogI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMKIAlnZW5lcmljX2RldmljZV9pZHNbMF0uaWRWZW5kb3IgPSB2ZW5kb3I7CiAJZ2VuZXJpY19kZXZpY2VfaWRzWzBdLmlkUHJvZHVjdCA9IHByb2R1Y3Q7Ci0JZ2VuZXJpY19kZXZpY2VfaWRzWzBdLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgfCBVU0JfREVWSUNFX0lEX01BVENIX1BST0RVQ1Q7CisJZ2VuZXJpY19kZXZpY2VfaWRzWzBdLm1hdGNoX2ZsYWdzID0KKwkJVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgfCBVU0JfREVWSUNFX0lEX01BVENIX1BST0RVQ1Q7CiAKIAkvKiByZWdpc3RlciBvdXIgZ2VuZXJpYyBkcml2ZXIgd2l0aCBvdXJzZWx2ZXMgKi8KLQlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyICgmdXNiX3NlcmlhbF9nZW5lcmljX2RldmljZSk7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmdXNiX3NlcmlhbF9nZW5lcmljX2RldmljZSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBleGl0OwogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmZ2VuZXJpY19kcml2ZXIpOwpAQCAtMTAzLDE2ICsxMDQsMTcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi12b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19kZXJlZ2lzdGVyICh2b2lkKQordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfZGVyZWdpc3Rlcih2b2lkKQogewogI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMKIAkvKiByZW1vdmUgb3VyIGdlbmVyaWMgZHJpdmVyICovCiAJdXNiX2RlcmVnaXN0ZXIoJmdlbmVyaWNfZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZ1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnVzYl9zZXJpYWxfZ2VuZXJpY19kZXZpY2UpOwogI2VuZGlmCiB9CiAKLWludCB1c2Jfc2VyaWFsX2dlbmVyaWNfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJlc3VsdCA9IDA7CkBAIC0xMjAsMTEgKzEyMiwxMSBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YSB0aHJvdWdoLCAKLQkgICBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2Ugd2l0aCBPSENJKSBkYXRhCi0JICAgY2FuIGdldCBsb3N0LiAqLwotCWlmIChwb3J0LT50dHkpCi0JCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YQorCSAgIHRocm91Z2gsIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2ggZGF0YSByYXRlcyAobGlrZQorCSAgIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuICovCisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKIAkvKiBjbGVhciB0aGUgdGhyb3R0bGUgZmxhZ3MgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtMTM1LDggKzEzNyw5IEBACiAJLyogaWYgd2UgaGF2ZSBhIGJ1bGsgZW5kcG9pbnQsIHN0YXJ0IHJlYWRpbmcgZnJvbSBpdCAqLwogCWlmIChzZXJpYWwtPm51bV9idWxrX2luKSB7CiAJCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCi0JCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCi0JCQkJICAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCiAJCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCQkgICAoKHNlcmlhbC0+dHlwZS0+cmVhZF9idWxrX2NhbGxiYWNrKSA/CkBAIC0xNDUsMTQgKzE0OCwxNiBAQAogCQkJCSAgIHBvcnQpOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXN1bHQpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSAgICAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9nZW5lcmljX29wZW4pOwogCi1zdGF0aWMgdm9pZCBnZW5lcmljX2NsZWFudXAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBnZW5lcmljX2NsZWFudXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCkBAIC0xODIsNyArMTg3LDcgQEAKICNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmIChwb3J0LT5vcGVuX2NvdW50ICYmIHBvcnQtPnJlYWRfdXJiKSB7CisJCWlmIChwb3J0LT5wb3J0LmNvdW50ICYmIHBvcnQtPnJlYWRfdXJiKSB7CiAJCQlyID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9OT0lPKTsKIAkJCWlmIChyIDwgMCkKIAkJCQljKys7CkBAIC0xOTIsMTMgKzE5NywxNSBAQAogCXJldHVybiBjID8gLUVJTyA6IDA7CiB9CiAKLXZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlnZW5lcmljX2NsZWFudXAgKHBvcnQpOworCWdlbmVyaWNfY2xlYW51cChwb3J0KTsKIH0KIAotaW50IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK2ludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCWludCByZXN1bHQ7CkBAIC0yMDgsNyArMjE1LDcgQEAKIAogCWlmIChjb3VudCA9PSAwKSB7CiAJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCX0KIAogCS8qIG9ubHkgZG8gc29tZXRoaW5nIGlmIHdlIGhhdmUgYSBidWxrIG91dCBlbmRwb2ludCAqLwpAQCAtMjIzLDI3ICsyMzAsMzIgQEAKIAkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAxOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKLQkJY291bnQgPSAoY291bnQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/IHBvcnQtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKKwkJY291bnQgPSAoY291bnQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/CisJCQkJCXBvcnQtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKIAotCQltZW1jcHkgKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYsIGNvdW50KTsKKwkJbWVtY3B5KHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYsIGNvdW50KTsKIAkJZGF0YSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOwogCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwgZGF0YSk7CiAKIAkJLyogc2V0IHVwIG91ciB1cmIgKi8KLQkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsCi0JCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChzZXJpYWwtPmRldiwKLQkJCQkJCSAgICBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCSAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKIAkJCQkgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsCi0JCQkJICAgKChzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2spID8gCisJCQkJICAgKChzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2spID8KIAkJCQkgICAgIHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjayA6Ci0JCQkJICAgICB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayksIHBvcnQpOworCQkJCSAgICAgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2spLAorCQkJCSAgIHBvcnQpOwogCiAJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KIAkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAxOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwotCQkJLyogZG9uJ3QgaGF2ZSB0byBncmFiIHRoZSBsb2NrIGhlcmUsIGFzIHdlIHdpbGwgcmV0cnkgaWYgIT0gMCAqLworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCQkvKiBkb24ndCBoYXZlIHRvIGdyYWIgdGhlIGxvY2sgaGVyZSwgYXMgd2Ugd2lsbAorCQkJICAgcmV0cnkgaWYgIT0gMCAqLwogCQkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOwogCQl9IGVsc2UKIAkJCXJlc3VsdCA9IGNvdW50OwpAQCAtMjU1LDggKzI2Nyw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK2ludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJvb20gPSAwOwogCkBAIC0yNzIsOCArMjg1LDkgQEAKIAlyZXR1cm4gcm9vbTsKIH0KIAotaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IGNoYXJzID0gMDsKIApAQCAtMjg2LDcgKzMwMCw3IEBACiAJfQogCiAJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgY2hhcnMpOwotCXJldHVybiAoY2hhcnMpOworCXJldHVybiBjaGFyczsKIH0KIAogCkBAIC0yOTcsMjQgKzMxMSwyNiBAQAogCWludCByZXN1bHQ7CiAKIAkvKiBDb250aW51ZSByZWFkaW5nIGZyb20gZGV2aWNlICovCi0JdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgc2VyaWFsLT5kZXYsCi0JCQkgICB1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAotCQkJCSAgIAkgICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKIAkJCSAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAogCQkJICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJICAgKChzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjaykgPyAKLQkJCSAgICAgc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2sgOiAKKwkJCSAgICgoc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2spID8KKwkJCSAgICAgc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2sgOgogCQkJICAgICB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVhZF9idWxrX2NhbGxiYWNrKSwgcG9ydCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBtZW1fZmxhZ3MpOwogCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIH0KIAogLyogUHVzaCBkYXRhIHRvIHR0eSBsYXllciBhbmQgcmVzdWJtaXQgdGhlIGJ1bGsgcmVhZCBVUkIgKi8KLXN0YXRpYyB2b2lkIGZsdXNoX2FuZF9yZXN1Ym1pdF9yZWFkX3VyYiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGZsdXNoX2FuZF9yZXN1Ym1pdF9yZWFkX3VyYihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1cmIgKnVyYiA9IHBvcnQtPnJlYWRfdXJiOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnBvcnQudHR5OwogCWludCByb29tOwogCiAJLyogUHVzaCBkYXRhIHRvIHR0eSAqLwpAQCAtMzI5LDcgKzM0NSw3IEBACiAJcmVzdWJtaXRfcmVhZF91cmIocG9ydCwgR0ZQX0FUT01JQyk7CiB9CiAKLXZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKQEAgLTM0NCwyMCArMzYwLDIxIEBACiAJCXJldHVybjsKIAl9CiAKLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCisJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOwogCiAJLyogVGhyb3R0bGUgdGhlIGRldmljZSBpZiByZXF1ZXN0ZWQgYnkgdHR5ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIShwb3J0LT50aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZV9yZXEpKSB7CisJcG9ydC0+dGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVfcmVxOworCWlmICghcG9ydC0+dGhyb3R0bGVkKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAkJZmx1c2hfYW5kX3Jlc3VibWl0X3JlYWRfdXJiKHBvcnQpOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2dlbmVyaWNfcmVhZF9idWxrX2NhbGxiYWNrKTsKIAotdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CkBAIC0zNzQsOCArMzkxLDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrKTsKIAotdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY190aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwpAQCAtMzg3LDggKzQwNSw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCi12b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY191bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCB3YXNfdGhyb3R0bGVkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQwNiwxNSArNDI1LDE0IEBACiAJfQogfQogCi12b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3ZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IGk7CiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJLyogc3RvcCByZWFkcyBhbmQgd3JpdGVzIG9uIGFsbCBwb3J0cyAqLwotCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQogCQlnZW5lcmljX2NsZWFudXAoc2VyaWFsLT5wb3J0W2ldKTsKLQl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCmluZGV4IDc1Yjg4YjMuLmFiOTA1ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwpAQCAtOSw3ICs5LDggQEAKICAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMKKyAqIGRyaXZlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggMmZkNDQ5Yi4uYmZhNTA4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9paGV4Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogI2luY2x1ZGUgImlvX2VkZ2Vwb3J0LmgiCkBAIC02NiwxNiArNjYsMTYgQEAKIAogLyogcmVjZWl2ZSBwb3J0IHN0YXRlICovCiBlbnVtIFJYU1RBVEUgewotCUVYUEVDVF9IRFIxID0gMCwJLyogRXhwZWN0IGhlYWRlciBieXRlIDEgKi8KLQlFWFBFQ1RfSERSMiA9IDEsCS8qIEV4cGVjdCBoZWFkZXIgYnl0ZSAyICovCi0JRVhQRUNUX0RBVEEgPSAyLAkvKiBFeHBlY3QgJ1J4Qnl0ZXNSZW1haW5pbmcnIGRhdGEgKi8KLQlFWFBFQ1RfSERSMyA9IDMsCS8qIEV4cGVjdCBoZWFkZXIgYnl0ZSAzIChmb3Igc3RhdHVzIGhkcnMgb25seSkgKi8KKwlFWFBFQ1RfSERSMSA9IDAsICAgIC8qIEV4cGVjdCBoZWFkZXIgYnl0ZSAxICovCisJRVhQRUNUX0hEUjIgPSAxLCAgICAvKiBFeHBlY3QgaGVhZGVyIGJ5dGUgMiAqLworCUVYUEVDVF9EQVRBID0gMiwgICAgLyogRXhwZWN0ICdSeEJ5dGVzUmVtYWluaW5nJyBkYXRhICovCisJRVhQRUNUX0hEUjMgPSAzLCAgICAvKiBFeHBlY3QgaGVhZGVyIGJ5dGUgMyAoZm9yIHN0YXR1cyBoZHJzIG9ubHkpICovCiB9OwogCiAKLS8qIFRyYW5zbWl0IEZpZm8gCi0gKiBUaGlzIFRyYW5zbWl0IHF1ZXVlIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgZWRnZXBvcnQgUnggYnVmZmVyLiAKLSAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIGluIGJvdGggdGhlIGVkZ2Vwb3J0IAorLyogVHJhbnNtaXQgRmlmbworICogVGhpcyBUcmFuc21pdCBxdWV1ZSBpcyBhbiBleHRlbnNpb24gb2YgdGhlIGVkZ2Vwb3J0IFJ4IGJ1ZmZlci4KKyAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIGluIGJvdGggdGhlIGVkZ2Vwb3J0CiAgKiBSeCBidWZmZXIgKG1heFR4Q3JlZGl0cykgYW5kIHRoaXMgYnVmZmVyIHdpbGwgbmV2ZXIgZXhjZWVkIG1heFR4Q3JlZGl0cy4KICAqLwogc3RydWN0IFR4RmlmbyB7CkBAIC0xMzIsMTIgKzEzMiwxMiBAQAogCWludAkJCWlzX2VwaWM7CQkJLyogZmxhZyBpZiBFUGlDIGRldmljZSBvciBub3QgKi8KIAogCV9fdTgJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnQ7CQkvKiB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGhhbmRsZSAqLwotCXVuc2lnbmVkIGNoYXIgKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsJCS8qIHRoZSBidWZmZXIgd2UgdXNlIGZvciB0aGUgaW50ZXJydXB0IGVuZHBvaW50ICovCi0Jc3RydWN0IHVyYiAqCQlpbnRlcnJ1cHRfcmVhZF91cmI7CQkvKiBvdXIgaW50ZXJydXB0IHVyYiAqLworCXVuc2lnbmVkIGNoYXIJCSppbnRlcnJ1cHRfaW5fYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB3ZSB1c2UgZm9yIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXJiCQkqaW50ZXJydXB0X3JlYWRfdXJiOwkJLyogb3VyIGludGVycnVwdCB1cmIgKi8KIAogCV9fdTgJCQlidWxrX2luX2VuZHBvaW50OwkJLyogdGhlIGJ1bGsgaW4gZW5kcG9pbnQgaGFuZGxlICovCi0JdW5zaWduZWQgY2hhciAqCQlidWxrX2luX2J1ZmZlcjsJCQkvKiB0aGUgYnVmZmVyIHdlIHVzZSBmb3IgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KLQlzdHJ1Y3QgdXJiICoJCXJlYWRfdXJiOwkJCS8qIG91ciBidWxrIHJlYWQgdXJiICovCisJdW5zaWduZWQgY2hhcgkJKmJ1bGtfaW5fYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB3ZSB1c2UgZm9yIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJc3RydWN0IHVyYgkJKnJlYWRfdXJiOwkJCS8qIG91ciBidWxrIHJlYWQgdXJiICovCiAJYm9vbAkJCXJlYWRfaW5fcHJvZ3Jlc3M7CiAJc3BpbmxvY2tfdAkJZXNfbG9jazsKIApAQCAtMTYyLDE2ICsxNjIsMTcgQEAKIAlfX3UxNiAgRGl2aXNvcjsKIH07CiAKLS8vCi0vLyBEZWZpbmUgdGFibGUgb2YgZGl2aXNvcnMgZm9yIFJldiBBIEVkZ2VQb3J0LzQgaGFyZHdhcmUKLS8vIFRoZXNlIGFzc3VtZSBhIDMuNjg2NE1IeiBjcnlzdGFsLCB0aGUgc3RhbmRhcmQgLzE2LCBhbmQKLS8vIE1DUi43ID0gMC4KLS8vCisvKgorICogRGVmaW5lIHRhYmxlIG9mIGRpdmlzb3JzIGZvciBSZXYgQSBFZGdlUG9ydC80IGhhcmR3YXJlCisgKiBUaGVzZSBhc3N1bWUgYSAzLjY4NjRNSHogY3J5c3RhbCwgdGhlIHN0YW5kYXJkIC8xNiwgYW5kCisgKiBNQ1IuNyA9IDAuCisgKi8KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkaXZpc29yX3RhYmxlX2VudHJ5IGRpdmlzb3JfdGFibGVbXSA9IHsKLQl7ICAgNTAsCQk0NjA4fSwgIAotCXsgICA3NSwJCTMwNzJ9LCAgCi0JeyAgIDExMCwJMjA5NX0sCQkvKiAyMDk0LjU0NTQ1NSA9PiAyMzA0NTAgICA9PiAuMDIxNyAlIG92ZXIgKi8KLQl7ICAgMTM0LAkxNzEzfSwJCS8qIDE3MTMuMDExMTUyID0+IDIzMDM5OC41ID0+IC4wMDA2NSUgdW5kZXIgKi8KKwl7ICAgNTAsCQk0NjA4fSwKKwl7ICAgNzUsCQkzMDcyfSwKKwl7ICAgMTEwLAkyMDk1fSwJLyogMjA5NC41NDU0NTUgPT4gMjMwNDUwICAgPT4gLjAyMTcgJSBvdmVyICovCisJeyAgIDEzNCwJMTcxM30sCS8qIDE3MTMuMDExMTUyID0+IDIzMDM5OC41ID0+IC4wMDA2NSUgdW5kZXIgKi8KIAl7ICAgMTUwLAkxNTM2fSwKIAl7ICAgMzAwLAk3Njh9LAogCXsgICA2MDAsCTM4NH0sCkBAIC0xOTQsNjQgKzE5NSw4NiBAQAogCiBzdGF0aWMgaW50IGxvd19sYXRlbmN5ID0gMTsJLyogdHR5IGxvdyBsYXRlbmN5IGZsYWcsIG9uIGJ5IGRlZmF1bHQgKi8KIAotc3RhdGljIGF0b21pY190IENtZFVyYnM7CQkvKiBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgQ29tbWFuZCBXcml0ZSBVcmJzICovCitzdGF0aWMgYXRvbWljX3QgQ21kVXJiczsJLyogTnVtYmVyIG9mIG91dHN0YW5kaW5nIENvbW1hbmQgV3JpdGUgVXJicyAqLwogCiAKIC8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYWxsIFVSQiBjYWxsYmFja3MgKi8KLXN0YXRpYyB2b2lkIGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgZWRnZV9idWxrX2luX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9jbWRfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBlZGdlX2ludGVycnVwdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgZWRnZV9idWxrX2luX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIGVkZ2VfYnVsa19vdXRfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSB1c2JzZXJpYWwgY2FsbGJhY2tzICovCi1zdGF0aWMgaW50ICBlZGdlX29wZW4JCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIHZvaWQgZWRnZV9jbG9zZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgaW50ICBlZGdlX3dyaXRlCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgIGVkZ2Vfd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCAgZWRnZV9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgZWRnZV90aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgZWRnZV91bnRocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCBlZGdlX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7Ci1zdGF0aWMgaW50ICBlZGdlX2lvY3RsCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1zdGF0aWMgdm9pZCBlZGdlX2JyZWFrCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSk7Ci1zdGF0aWMgaW50ICBlZGdlX3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIGludCAgZWRnZV90aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwotc3RhdGljIGludCAgZWRnZV9zdGFydHVwCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgdm9pZCBlZGdlX3NodXRkb3duCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci0KK3N0YXRpYyBpbnQgZWRnZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGVkZ2VfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBlZGdlX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgZWRnZV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIGludCBlZGdlX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGVkZ2VfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBlZGdlX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBlZGdlX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIGludCAgZWRnZV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgZWRnZV9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpOworc3RhdGljIGludCAgZWRnZV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBlZGdlX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIGludCAgZWRnZV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgZWRnZV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIAogI2luY2x1ZGUgImlvX3RhYmxlcy5oIgkvKiBhbGwgb2YgdGhlIGRldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLwogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhbGwgb2Ygb3VyIGxvY2FsIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgIHByb2Nlc3NfcmN2ZF9kYXRhCQkoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgX191MTYgYnVmZmVyTGVuZ3RoKTsKLXN0YXRpYyB2b2lkIHByb2Nlc3NfcmN2ZF9zdGF0dXMJCShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCwgX191OCBieXRlMiwgX191OCBieXRlMyk7Ci1zdGF0aWMgdm9pZCBlZGdlX3R0eV9yZWN2CQkJKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCk7Ci1zdGF0aWMgdm9pZCBoYW5kbGVfbmV3X21zcgkJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggbmV3TXNyKTsKLXN0YXRpYyB2b2lkIGhhbmRsZV9uZXdfbHNyCQkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBsc3JEYXRhLCBfX3U4IGxzciwgX191OCBkYXRhKTsKLXN0YXRpYyBpbnQgIHNlbmRfaW9zcF9leHRfY21kCQkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBjb21tYW5kLCBfX3U4IHBhcmFtKTsKLXN0YXRpYyBpbnQgIGNhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IJKGludCBiYXVkX3JhdGUsIGludCAqZGl2aXNvcik7Ci1zdGF0aWMgaW50ICBzZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIGludCBiYXVkUmF0ZSk7Ci1zdGF0aWMgdm9pZCBjaGFuZ2VfcG9ydF9zZXR0aW5ncwkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7Ci1zdGF0aWMgaW50ICBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IHJlZ051bSwgX191OCByZWdWYWx1ZSk7Ci1zdGF0aWMgaW50ICB3cml0ZV9jbWRfdXNiCQkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgd3JpdGVMZW5ndGgpOwotc3RhdGljIHZvaWQgc2VuZF9tb3JlX3BvcnRfZGF0YQkJKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLCBzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0KTsKIAotc3RhdGljIGludCAgc3JhbV93cml0ZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLCBfX3UxNiBsZW5ndGgsIGNvbnN0IF9fdTggKmRhdGEpOwotc3RhdGljIGludCAgcm9tX3JlYWQJCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgZXh0QWRkciwgX191MTYgYWRkciwgX191MTYgbGVuZ3RoLCBfX3U4ICpkYXRhKTsKLXN0YXRpYyBpbnQgIHJvbV93cml0ZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLCBfX3UxNiBsZW5ndGgsIGNvbnN0IF9fdTggKmRhdGEpOwotc3RhdGljIHZvaWQgZ2V0X21hbnVmYWN0dXJpbmdfZGVzYwkoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpOwotc3RhdGljIHZvaWQgZ2V0X2Jvb3RfZGVzYwkJKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKTsKLXN0YXRpYyB2b2lkIGxvYWRfYXBwbGljYXRpb25fZmlybXdhcmUJKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKTsKK3N0YXRpYyB2b2lkICBwcm9jZXNzX3JjdmRfZGF0YShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCwKKwkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIF9fdTE2IGJ1ZmZlckxlbmd0aCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzX3JjdmRfc3RhdHVzKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLAorCQkJCV9fdTggYnl0ZTIsIF9fdTggYnl0ZTMpOworc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCk7CitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X21zcihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IG5ld01zcik7CitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X2xzcihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IGxzckRhdGEsCisJCQkJX191OCBsc3IsIF9fdTggZGF0YSk7CitzdGF0aWMgaW50ICBzZW5kX2lvc3BfZXh0X2NtZChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IGNvbW1hbmQsCisJCQkJX191OCBwYXJhbSk7CitzdGF0aWMgaW50ICBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yKGludCBiYXVkX3JhdGUsIGludCAqZGl2aXNvcik7CitzdGF0aWMgaW50ICBzZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwKKwkJCQlpbnQgYmF1ZFJhdGUpOworc3RhdGljIHZvaWQgY2hhbmdlX3BvcnRfc2V0dGluZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LAorCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIGludCAgc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LAorCQkJCV9fdTggcmVnTnVtLCBfX3U4IHJlZ1ZhbHVlKTsKK3N0YXRpYyBpbnQgIHdyaXRlX2NtZF91c2Ioc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwKKwkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCB3cml0ZUxlbmd0aCk7CitzdGF0aWMgdm9pZCBzZW5kX21vcmVfcG9ydF9kYXRhKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLAorCQkJCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpOwogCi1zdGF0aWMgdm9pZCB1bmljb2RlX3RvX2FzY2lpKGNoYXIgKnN0cmluZywgaW50IGJ1ZmxlbiwgX19sZTE2ICp1bmljb2RlLCBpbnQgdW5pY29kZV9zaXplKTsKK3N0YXRpYyBpbnQgc3JhbV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLAorCQkJCQlfX3UxNiBsZW5ndGgsIGNvbnN0IF9fdTggKmRhdGEpOworc3RhdGljIGludCByb21fcmVhZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLAorCQkJCQkJX191MTYgbGVuZ3RoLCBfX3U4ICpkYXRhKTsKK3N0YXRpYyBpbnQgcm9tX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IGV4dEFkZHIsIF9fdTE2IGFkZHIsCisJCQkJCV9fdTE2IGxlbmd0aCwgY29uc3QgX191OCAqZGF0YSk7CitzdGF0aWMgdm9pZCBnZXRfbWFudWZhY3R1cmluZ19kZXNjKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGdldF9ib290X2Rlc2Moc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpOworc3RhdGljIHZvaWQgbG9hZF9hcHBsaWNhdGlvbl9maXJtd2FyZShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCk7CisKK3N0YXRpYyB2b2lkIHVuaWNvZGVfdG9fYXNjaWkoY2hhciAqc3RyaW5nLCBpbnQgYnVmbGVuLAorCQkJCV9fbGUxNiAqdW5pY29kZSwgaW50IHVuaWNvZGVfc2l6ZSk7CiAKIAotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCQkJCQkqCkBAIC0yNjEsNyArMjg0LDcgQEAKICAqCQkJCWVtYmVkZGVkIGluIHRoaXMgZHJpdmVyCQkJKgogICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgdXBkYXRlX2VkZ2Vwb3J0X0UyUFJPTSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpCitzdGF0aWMgdm9pZCB1cGRhdGVfZWRnZXBvcnRfRTJQUk9NKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKQogewogCV9fdTMyIEJvb3RDdXJWZXI7CiAJX191MzIgQm9vdE5ld1ZlcjsKQEAgLTI3NSwxNiArMjk4LDE0IEBACiAJaW50IHJlc3BvbnNlOwogCiAJc3dpdGNoIChlZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLmlEb3dubG9hZEZpbGUpIHsKLQkJY2FzZSBFREdFX0RPV05MT0FEX0ZJTEVfSTkzMDoKLQkJCWZ3X25hbWUJPSAiZWRnZXBvcnQvYm9vdC5mdyI7Ci0JCQlicmVhazsKLQotCQljYXNlIEVER0VfRE9XTkxPQURfRklMRV84MDI1MToKLQkJCWZ3X25hbWUJPSAiZWRnZXBvcnQvYm9vdDIuZnciOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKKwljYXNlIEVER0VfRE9XTkxPQURfRklMRV9JOTMwOgorCQlmd19uYW1lCT0gImVkZ2Vwb3J0L2Jvb3QuZnciOworCQlicmVhazsKKwljYXNlIEVER0VfRE9XTkxPQURfRklMRV84MDI1MToKKwkJZndfbmFtZQk9ICJlZGdlcG9ydC9ib290Mi5mdyI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKIAl9CiAKIAlyZXNwb25zZSA9IHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsIGZ3X25hbWUsCkBAIC0zMDAsNyArMzIxLDcgQEAKIAlCb290TWlub3JWZXJzaW9uID0gcmVjLT5kYXRhWzFdOwogCUJvb3RCdWlsZE51bWJlciA9IChyZWMtPmRhdGFbMl0gPDwgOCkgfCByZWMtPmRhdGFbM107CiAKLQkvLyBDaGVjayBCb290IEltYWdlIFZlcnNpb24KKwkvKiBDaGVjayBCb290IEltYWdlIFZlcnNpb24gKi8KIAlCb290Q3VyVmVyID0gKGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWFqb3JWZXJzaW9uIDw8IDI0KSArCiAJCSAgICAgKGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWlub3JWZXJzaW9uIDw8IDE2KSArCiAJCSAgICAgIGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuQnVpbGROdW1iZXIpOwpAQCAtMzUyLDI5ICszNzMsMjkgQEAKICAqICBHZXQgc3RyaW5nIGRlc2NyaXB0b3IgZnJvbSBkZXZpY2UJCQkJCSoKICAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZ2V0X3N0cmluZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IElkLCBjaGFyICpzdHJpbmcsIGludCBidWZsZW4pCitzdGF0aWMgaW50IGdldF9zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IElkLCBjaGFyICpzdHJpbmcsIGludCBidWZsZW4pCiB7CiAJc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciBTdHJpbmdEZXNjOwogCXN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgKnBTdHJpbmdEZXNjOwogCi0JZGJnKCIlcyAtIFVTQiBTdHJpbmcgSUQgPSAlZCIsIF9fZnVuY19fLCBJZCApOworCWRiZygiJXMgLSBVU0IgU3RyaW5nIElEID0gJWQiLCBfX2Z1bmNfXywgSWQpOwogCi0JaWYgKCF1c2JfZ2V0X2Rlc2NyaXB0b3IoZGV2LCBVU0JfRFRfU1RSSU5HLCBJZCwgJlN0cmluZ0Rlc2MsIHNpemVvZihTdHJpbmdEZXNjKSkpIHsKKwlpZiAoIXVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9TVFJJTkcsIElkLAorCQkJCQkmU3RyaW5nRGVzYywgc2l6ZW9mKFN0cmluZ0Rlc2MpKSkKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcFN0cmluZ0Rlc2MgPSBrbWFsbG9jIChTdHJpbmdEZXNjLmJMZW5ndGgsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFwU3RyaW5nRGVzYykgeworCXBTdHJpbmdEZXNjID0ga21hbGxvYyhTdHJpbmdEZXNjLmJMZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghcFN0cmluZ0Rlc2MpCiAJCXJldHVybiAwOwotCX0KIAotCWlmICghdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX1NUUklORywgSWQsIHBTdHJpbmdEZXNjLCBTdHJpbmdEZXNjLmJMZW5ndGggKSkgeworCWlmICghdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX1NUUklORywgSWQsCisJCQkJCXBTdHJpbmdEZXNjLCBTdHJpbmdEZXNjLmJMZW5ndGgpKSB7CiAJCWtmcmVlKHBTdHJpbmdEZXNjKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JdW5pY29kZV90b19hc2NpaShzdHJpbmcsIGJ1ZmxlbiwgcFN0cmluZ0Rlc2MtPndEYXRhLCBwU3RyaW5nRGVzYy0+Ykxlbmd0aC8yKTsKKwl1bmljb2RlX3RvX2FzY2lpKHN0cmluZywgYnVmbGVuLAorCQkJCXBTdHJpbmdEZXNjLT53RGF0YSwgcFN0cmluZ0Rlc2MtPmJMZW5ndGgvMik7CiAKIAlrZnJlZShwU3RyaW5nRGVzYyk7CiAJZGJnKCIlcyAtIFVTQiBTdHJpbmcgJXMiLCBfX2Z1bmNfXywgc3RyaW5nKTsKQEAgLTM4OCwyNCArNDA5LDI0IEBACiAgKiAgR2V0IHN0cmluZyBkZXNjcmlwdG9yIGZyb20gZGV2aWNlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZ2V0X3N0cmluZ19kZXNjIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgSWQsIHN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgKipwUmV0RGVzYykKK3N0YXRpYyBpbnQgZ2V0X3N0cmluZ19kZXNjKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBJZCwKKwkJCQlzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yICoqcFJldERlc2MpCiB7CiAJc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciBTdHJpbmdEZXNjOwogCXN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgKnBTdHJpbmdEZXNjOwogCi0JZGJnKCIlcyAtIFVTQiBTdHJpbmcgSUQgPSAlZCIsIF9fZnVuY19fLCBJZCApOworCWRiZygiJXMgLSBVU0IgU3RyaW5nIElEID0gJWQiLCBfX2Z1bmNfXywgSWQpOwogCi0JaWYgKCF1c2JfZ2V0X2Rlc2NyaXB0b3IoZGV2LCBVU0JfRFRfU1RSSU5HLCBJZCwgJlN0cmluZ0Rlc2MsIHNpemVvZihTdHJpbmdEZXNjKSkpIHsKKwlpZiAoIXVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9TVFJJTkcsIElkLCAmU3RyaW5nRGVzYywKKwkJCQkJCXNpemVvZihTdHJpbmdEZXNjKSkpCiAJCXJldHVybiAwOwotCX0KIAotCXBTdHJpbmdEZXNjID0ga21hbGxvYyAoU3RyaW5nRGVzYy5iTGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQotCWlmICghcFN0cmluZ0Rlc2MpIHsKKwlwU3RyaW5nRGVzYyA9IGttYWxsb2MoU3RyaW5nRGVzYy5iTGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBTdHJpbmdEZXNjKQogCQlyZXR1cm4gLTE7Ci0JfQogCi0JaWYgKCF1c2JfZ2V0X2Rlc2NyaXB0b3IoZGV2LCBVU0JfRFRfU1RSSU5HLCBJZCwgcFN0cmluZ0Rlc2MsIFN0cmluZ0Rlc2MuYkxlbmd0aCApKSB7CisJaWYgKCF1c2JfZ2V0X2Rlc2NyaXB0b3IoZGV2LCBVU0JfRFRfU1RSSU5HLCBJZCwgcFN0cmluZ0Rlc2MsCisJCQkJCQkJU3RyaW5nRGVzYy5iTGVuZ3RoKSkgewogCQlrZnJlZShwU3RyaW5nRGVzYyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC00MTcsMjUgKzQzOCwzMCBAQAogCiBzdGF0aWMgdm9pZCBkdW1wX3Byb2R1Y3RfaW5mbyhzdHJ1Y3QgZWRnZXBvcnRfcHJvZHVjdF9pbmZvICpwcm9kdWN0X2luZm8pCiB7Ci0JLy8gRHVtcCBQcm9kdWN0IEluZm8gc3RydWN0dXJlCisJLyogRHVtcCBQcm9kdWN0IEluZm8gc3RydWN0dXJlICovCiAJZGJnKCIqKlByb2R1Y3QgSW5mb3JtYXRpb246Iik7Ci0JZGJnKCIgIFByb2R1Y3RJZCAgICAgICAgICAgICAleCIsIHByb2R1Y3RfaW5mby0+UHJvZHVjdElkICk7Ci0JZGJnKCIgIE51bVBvcnRzICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+TnVtUG9ydHMgKTsKLQlkYmcoIiAgUHJvZEluZm9WZXIgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5Qcm9kSW5mb1ZlciApOworCWRiZygiICBQcm9kdWN0SWQgICAgICAgICAgICAgJXgiLCBwcm9kdWN0X2luZm8tPlByb2R1Y3RJZCk7CisJZGJnKCIgIE51bVBvcnRzICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+TnVtUG9ydHMpOworCWRiZygiICBQcm9kSW5mb1ZlciAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPlByb2RJbmZvVmVyKTsKIAlkYmcoIiAgSXNTZXJ2ZXIgICAgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5Jc1NlcnZlcik7Ci0JZGJnKCIgIElzUlMyMzIgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+SXNSUzIzMiApOwotCWRiZygiICBJc1JTNDIyICAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPklzUlM0MjIgKTsKLQlkYmcoIiAgSXNSUzQ4NSAgICAgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5Jc1JTNDg1ICk7Ci0JZGJnKCIgIFJvbVNpemUgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+Um9tU2l6ZSApOwotCWRiZygiICBSYW1TaXplICAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPlJhbVNpemUgKTsKLQlkYmcoIiAgQ3B1UmV2ICAgICAgICAgICAgICAgICV4IiwgcHJvZHVjdF9pbmZvLT5DcHVSZXYgICk7CisJZGJnKCIgIElzUlMyMzIgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+SXNSUzIzMik7CisJZGJnKCIgIElzUlM0MjIgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+SXNSUzQyMik7CisJZGJnKCIgIElzUlM0ODUgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+SXNSUzQ4NSk7CisJZGJnKCIgIFJvbVNpemUgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+Um9tU2l6ZSk7CisJZGJnKCIgIFJhbVNpemUgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+UmFtU2l6ZSk7CisJZGJnKCIgIENwdVJldiAgICAgICAgICAgICAgICAleCIsIHByb2R1Y3RfaW5mby0+Q3B1UmV2KTsKIAlkYmcoIiAgQm9hcmRSZXYgICAgICAgICAgICAgICV4IiwgcHJvZHVjdF9pbmZvLT5Cb2FyZFJldik7CiAJZGJnKCIgIEJvb3RNYWpvclZlcnNpb24gICAgICAlZC4lZC4lZCIsIHByb2R1Y3RfaW5mby0+Qm9vdE1ham9yVmVyc2lvbiwKIAkgICAgcHJvZHVjdF9pbmZvLT5Cb290TWlub3JWZXJzaW9uLAogCSAgICBsZTE2X3RvX2NwdShwcm9kdWN0X2luZm8tPkJvb3RCdWlsZE51bWJlcikpOwotCWRiZygiICBNYW51ZmFjdHVyZURlc2NEYXRlICAgJWQvJWQvJWQiLCBwcm9kdWN0X2luZm8tPk1hbnVmYWN0dXJlRGVzY0RhdGVbMF0sCi0JICAgIHByb2R1Y3RfaW5mby0+TWFudWZhY3R1cmVEZXNjRGF0ZVsxXSwKLQkgICAgcHJvZHVjdF9pbmZvLT5NYW51ZmFjdHVyZURlc2NEYXRlWzJdKzE5MDApOworCWRiZygiICBGaXJtd2FyZU1ham9yVmVyc2lvbiAgJWQuJWQuJWQiLAorCQkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZU1ham9yVmVyc2lvbiwKKwkJCXByb2R1Y3RfaW5mby0+RmlybXdhcmVNaW5vclZlcnNpb24sCisJCQlsZTE2X3RvX2NwdShwcm9kdWN0X2luZm8tPkZpcm13YXJlQnVpbGROdW1iZXIpKTsKKwlkYmcoIiAgTWFudWZhY3R1cmVEZXNjRGF0ZSAgICVkLyVkLyVkIiwKKwkJCXByb2R1Y3RfaW5mby0+TWFudWZhY3R1cmVEZXNjRGF0ZVswXSwKKwkJCXByb2R1Y3RfaW5mby0+TWFudWZhY3R1cmVEZXNjRGF0ZVsxXSwKKwkJCXByb2R1Y3RfaW5mby0+TWFudWZhY3R1cmVEZXNjRGF0ZVsyXSsxOTAwKTsKIAlkYmcoIiAgaURvd25sb2FkRmlsZSAgICAgICAgIDB4JXgiLCBwcm9kdWN0X2luZm8tPmlEb3dubG9hZEZpbGUpOwogCWRiZygiICBFcGljVmVyICAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPkVwaWNWZXIpOwogfQpAQCAtNDQ0LDU1ICs0NzAsNjAgQEAKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfcHJvZHVjdF9pbmZvICpwcm9kdWN0X2luZm8gPSAmZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mbzsKIAotCW1lbXNldCAocHJvZHVjdF9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3Byb2R1Y3RfaW5mbykpOworCW1lbXNldChwcm9kdWN0X2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfcHJvZHVjdF9pbmZvKSk7CiAKLQlwcm9kdWN0X2luZm8tPlByb2R1Y3RJZAkJPSAoX191MTYpKGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICYgfklPTl9ERVZJQ0VfSURfODAyNTFfTkVUQ0hJUCk7Ci0JcHJvZHVjdF9pbmZvLT5OdW1Qb3J0cwkJPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5OdW1Qb3J0czsKLQlwcm9kdWN0X2luZm8tPlByb2RJbmZvVmVyCT0gMDsKKwlwcm9kdWN0X2luZm8tPlByb2R1Y3RJZCA9IChfX3UxNikobGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgJiB+SU9OX0RFVklDRV9JRF84MDI1MV9ORVRDSElQKTsKKwlwcm9kdWN0X2luZm8tPk51bVBvcnRzID0gZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuTnVtUG9ydHM7CisJcHJvZHVjdF9pbmZvLT5Qcm9kSW5mb1ZlciA9IDA7CiAKLQlwcm9kdWN0X2luZm8tPlJvbVNpemUJCT0gZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuUm9tU2l6ZTsKLQlwcm9kdWN0X2luZm8tPlJhbVNpemUJCT0gZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuUmFtU2l6ZTsKLQlwcm9kdWN0X2luZm8tPkNwdVJldgkJPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5DcHVSZXY7Ci0JcHJvZHVjdF9pbmZvLT5Cb2FyZFJldgkJPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Cb2FyZFJldjsKKwlwcm9kdWN0X2luZm8tPlJvbVNpemUgPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Sb21TaXplOworCXByb2R1Y3RfaW5mby0+UmFtU2l6ZSA9IGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlJhbVNpemU7CisJcHJvZHVjdF9pbmZvLT5DcHVSZXYgPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5DcHVSZXY7CisJcHJvZHVjdF9pbmZvLT5Cb2FyZFJldiA9IGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkJvYXJkUmV2OwogCi0JcHJvZHVjdF9pbmZvLT5Cb290TWFqb3JWZXJzaW9uCT0gZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NYWpvclZlcnNpb247Ci0JcHJvZHVjdF9pbmZvLT5Cb290TWlub3JWZXJzaW9uCT0gZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NaW5vclZlcnNpb247Ci0JcHJvZHVjdF9pbmZvLT5Cb290QnVpbGROdW1iZXIJPSBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkJ1aWxkTnVtYmVyOworCXByb2R1Y3RfaW5mby0+Qm9vdE1ham9yVmVyc2lvbiA9CisJCQkJZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NYWpvclZlcnNpb247CisJcHJvZHVjdF9pbmZvLT5Cb290TWlub3JWZXJzaW9uID0KKwkJCQllZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1pbm9yVmVyc2lvbjsKKwlwcm9kdWN0X2luZm8tPkJvb3RCdWlsZE51bWJlciA9CisJCQkJZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5CdWlsZE51bWJlcjsKIAotCW1lbWNweShwcm9kdWN0X2luZm8tPk1hbnVmYWN0dXJlRGVzY0RhdGUsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkRlc2NEYXRlLCBzaXplb2YoZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGUpKTsKKwltZW1jcHkocHJvZHVjdF9pbmZvLT5NYW51ZmFjdHVyZURlc2NEYXRlLAorCQkJZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGUsCisJCQlzaXplb2YoZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGUpKTsKIAotCS8vIGNoZWNrIGlmIHRoaXMgaXMgMm5kIGdlbmVyYXRpb24gaGFyZHdhcmUKLQlpZiAobGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgJiBJT05fREVWSUNFX0lEXzgwMjUxX05FVENISVApIHsKLQkJcHJvZHVjdF9pbmZvLT5pRG93bmxvYWRGaWxlCQk9IEVER0VfRE9XTkxPQURfRklMRV84MDI1MTsKLQl9IGVsc2UgewotCQlwcm9kdWN0X2luZm8tPmlEb3dubG9hZEZpbGUJCT0gRURHRV9ET1dOTE9BRF9GSUxFX0k5MzA7Ci0JfQotCi0JLy8gRGV0ZXJtaW5lIFByb2R1Y3QgdHlwZSBhbmQgc2V0IGFwcHJvcHJpYXRlIGZsYWdzCisJLyogY2hlY2sgaWYgdGhpcyBpcyAybmQgZ2VuZXJhdGlvbiBoYXJkd2FyZSAqLworCWlmIChsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KQorCQkJCQkgICAgJiBJT05fREVWSUNFX0lEXzgwMjUxX05FVENISVApCisJCXByb2R1Y3RfaW5mby0+aURvd25sb2FkRmlsZSA9IEVER0VfRE9XTkxPQURfRklMRV84MDI1MTsKKwllbHNlCisJCXByb2R1Y3RfaW5mby0+aURvd25sb2FkRmlsZSA9IEVER0VfRE9XTkxPQURfRklMRV9JOTMwOworIAorCS8qIERldGVybWluZSBQcm9kdWN0IHR5cGUgYW5kIHNldCBhcHByb3ByaWF0ZSBmbGFncyAqLwogCXN3aXRjaCAoREVWSUNFX0lEX0ZST01fVVNCX1BST0RVQ1RfSUQocHJvZHVjdF9pbmZvLT5Qcm9kdWN0SWQpKSB7Ci0JCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF9DT01QQVRJQkxFOgotCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFQ6Ci0JCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80OgotCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjoKLQkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhfRFVBTF9DUFU6Ci0JCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84OgotCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDIxOgotCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjE6Ci0JCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yX0RJTjoKLQkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRfRElOOgotCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMTZfRFVBTF9DUFU6Ci0JCQlwcm9kdWN0X2luZm8tPklzUlMyMzIgPSAxOwotCQkJYnJlYWs7CisJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUX0NPTVBBVElCTEU6CisJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRUOgorCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80OgorCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yOgorCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84X0RVQUxfQ1BVOgorCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84OgorCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MjE6CisJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIxOgorCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yX0RJTjoKKwljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNF9ESU46CisJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzE2X0RVQUxfQ1BVOgorCQlwcm9kdWN0X2luZm8tPklzUlMyMzIgPSAxOworCQlicmVhazsKIAotCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMkk6CQkJCSAgIC8vIEVkZ2Vwb3J0LzIgUlM0MjIvUlM0ODUKLQkJCXByb2R1Y3RfaW5mby0+SXNSUzQyMiA9IDE7Ci0JCQlwcm9kdWN0X2luZm8tPklzUlM0ODUgPSAxOwotCQkJYnJlYWs7CisJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJJOgkvKiBFZGdlcG9ydC8yIFJTNDIyL1JTNDg1ICovCisJCXByb2R1Y3RfaW5mby0+SXNSUzQyMiA9IDE7CisJCXByb2R1Y3RfaW5mby0+SXNSUzQ4NSA9IDE7CisJCWJyZWFrOwogCi0JCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84SToJCQkJICAgLy8gRWRnZXBvcnQvNCBSUzQyMgotCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNEk6CQkJCSAgIC8vIEVkZ2Vwb3J0LzQgUlM0MjIKLQkJCXByb2R1Y3RfaW5mby0+SXNSUzQyMiA9IDE7Ci0JCQlicmVhazsKKwljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOEk6CS8qIEVkZ2Vwb3J0LzQgUlM0MjIgKi8KKwljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNEk6CS8qIEVkZ2Vwb3J0LzQgUlM0MjIgKi8KKwkJcHJvZHVjdF9pbmZvLT5Jc1JTNDIyID0gMTsKKwkJYnJlYWs7CiAJfQogCiAJZHVtcF9wcm9kdWN0X2luZm8ocHJvZHVjdF9pbmZvKTsKQEAgLTUyMCwzMiArNTUxLDMyIEBACiAJCWVwLT5pc19lcGljID0gMTsKIAkJbWVtc2V0KHByb2R1Y3RfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9wcm9kdWN0X2luZm8pKTsKIAotCQlwcm9kdWN0X2luZm8tPk51bVBvcnRzCQkJPSBlcGljLT5OdW1Qb3J0czsKLQkJcHJvZHVjdF9pbmZvLT5Qcm9kSW5mb1ZlcgkJPSAwOwotCQlwcm9kdWN0X2luZm8tPkZpcm13YXJlTWFqb3JWZXJzaW9uCT0gZXBpYy0+TWFqb3JWZXJzaW9uOwotCQlwcm9kdWN0X2luZm8tPkZpcm13YXJlTWlub3JWZXJzaW9uCT0gZXBpYy0+TWlub3JWZXJzaW9uOwotCQlwcm9kdWN0X2luZm8tPkZpcm13YXJlQnVpbGROdW1iZXIJPSBlcGljLT5CdWlsZE51bWJlcjsKLQkJcHJvZHVjdF9pbmZvLT5pRG93bmxvYWRGaWxlCQk9IGVwaWMtPmlEb3dubG9hZEZpbGU7Ci0JCXByb2R1Y3RfaW5mby0+RXBpY1ZlcgkJCT0gZXBpYy0+RXBpY1ZlcjsKLQkJcHJvZHVjdF9pbmZvLT5FcGljCQkJPSBlcGljLT5TdXBwb3J0czsKLQkJcHJvZHVjdF9pbmZvLT5Qcm9kdWN0SWQJCQk9IElPTl9ERVZJQ0VfSURfRURHRVBPUlRfQ09NUEFUSUJMRTsKKwkJcHJvZHVjdF9pbmZvLT5OdW1Qb3J0cyA9IGVwaWMtPk51bVBvcnRzOworCQlwcm9kdWN0X2luZm8tPlByb2RJbmZvVmVyID0gMDsKKwkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZU1ham9yVmVyc2lvbiA9IGVwaWMtPk1ham9yVmVyc2lvbjsKKwkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZU1pbm9yVmVyc2lvbiA9IGVwaWMtPk1pbm9yVmVyc2lvbjsKKwkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZUJ1aWxkTnVtYmVyID0gZXBpYy0+QnVpbGROdW1iZXI7CisJCXByb2R1Y3RfaW5mby0+aURvd25sb2FkRmlsZSA9IGVwaWMtPmlEb3dubG9hZEZpbGU7CisJCXByb2R1Y3RfaW5mby0+RXBpY1ZlciA9IGVwaWMtPkVwaWNWZXI7CisJCXByb2R1Y3RfaW5mby0+RXBpYyA9IGVwaWMtPlN1cHBvcnRzOworCQlwcm9kdWN0X2luZm8tPlByb2R1Y3RJZCA9IElPTl9ERVZJQ0VfSURfRURHRVBPUlRfQ09NUEFUSUJMRTsKIAkJZHVtcF9wcm9kdWN0X2luZm8ocHJvZHVjdF9pbmZvKTsKIAogCQliaXRzID0gJmVwLT5lcGljX2Rlc2NyaXB0b3IuU3VwcG9ydHM7CiAJCWRiZygiKipFUElDIGRlc2NyaXB0b3I6Iik7CiAJCWRiZygiICBWZW5kRW5hYmxlU3VzcGVuZDogJXMiLCBiaXRzLT5WZW5kRW5hYmxlU3VzcGVuZAk/ICJUUlVFIjogIkZBTFNFIik7Ci0JCWRiZygiICBJT1NQT3BlbiAgICAgICAgIDogJXMiLCBiaXRzLT5JT1NQT3BlbgkJPyAiVFJVRSI6ICJGQUxTRSIgKTsKLQkJZGJnKCIgIElPU1BDbG9zZSAgICAgICAgOiAlcyIsIGJpdHMtPklPU1BDbG9zZQkJPyAiVFJVRSI6ICJGQUxTRSIgKTsKLQkJZGJnKCIgIElPU1BDaGFzZSAgICAgICAgOiAlcyIsIGJpdHMtPklPU1BDaGFzZQkJPyAiVFJVRSI6ICJGQUxTRSIgKTsKLQkJZGJnKCIgIElPU1BTZXRSeEZsb3cgICAgOiAlcyIsIGJpdHMtPklPU1BTZXRSeEZsb3cJPyAiVFJVRSI6ICJGQUxTRSIgKTsKLQkJZGJnKCIgIElPU1BTZXRUeEZsb3cgICAgOiAlcyIsIGJpdHMtPklPU1BTZXRUeEZsb3cJPyAiVFJVRSI6ICJGQUxTRSIgKTsKLQkJZGJnKCIgIElPU1BTZXRYQ2hhciAgICAgOiAlcyIsIGJpdHMtPklPU1BTZXRYQ2hhcgk/ICJUUlVFIjogIkZBTFNFIiApOwotCQlkYmcoIiAgSU9TUFJ4Q2hlY2sgICAgICA6ICVzIiwgYml0cy0+SU9TUFJ4Q2hlY2sJPyAiVFJVRSI6ICJGQUxTRSIgKTsKLQkJZGJnKCIgIElPU1BTZXRDbHJCcmVhayAgOiAlcyIsIGJpdHMtPklPU1BTZXRDbHJCcmVhawk/ICJUUlVFIjogIkZBTFNFIiApOwotCQlkYmcoIiAgSU9TUFdyaXRlTUNSICAgICA6ICVzIiwgYml0cy0+SU9TUFdyaXRlTUNSCT8gIlRSVUUiOiAiRkFMU0UiICk7Ci0JCWRiZygiICBJT1NQV3JpdGVMQ1IgICAgIDogJXMiLCBiaXRzLT5JT1NQV3JpdGVMQ1IJPyAiVFJVRSI6ICJGQUxTRSIgKTsKLQkJZGJnKCIgIElPU1BTZXRCYXVkUmF0ZSAgOiAlcyIsIGJpdHMtPklPU1BTZXRCYXVkUmF0ZQk/ICJUUlVFIjogIkZBTFNFIiApOwotCQlkYmcoIiAgVHJ1ZUVkZ2Vwb3J0ICAgICA6ICVzIiwgYml0cy0+VHJ1ZUVkZ2Vwb3J0CT8gIlRSVUUiOiAiRkFMU0UiICk7CisJCWRiZygiICBJT1NQT3BlbiAgICAgICAgIDogJXMiLCBiaXRzLT5JT1NQT3BlbgkJPyAiVFJVRSI6ICJGQUxTRSIpOworCQlkYmcoIiAgSU9TUENsb3NlICAgICAgICA6ICVzIiwgYml0cy0+SU9TUENsb3NlCQk/ICJUUlVFIjogIkZBTFNFIik7CisJCWRiZygiICBJT1NQQ2hhc2UgICAgICAgIDogJXMiLCBiaXRzLT5JT1NQQ2hhc2UJCT8gIlRSVUUiOiAiRkFMU0UiKTsKKwkJZGJnKCIgIElPU1BTZXRSeEZsb3cgICAgOiAlcyIsIGJpdHMtPklPU1BTZXRSeEZsb3cJPyAiVFJVRSI6ICJGQUxTRSIpOworCQlkYmcoIiAgSU9TUFNldFR4RmxvdyAgICA6ICVzIiwgYml0cy0+SU9TUFNldFR4Rmxvdwk/ICJUUlVFIjogIkZBTFNFIik7CisJCWRiZygiICBJT1NQU2V0WENoYXIgICAgIDogJXMiLCBiaXRzLT5JT1NQU2V0WENoYXIJPyAiVFJVRSI6ICJGQUxTRSIpOworCQlkYmcoIiAgSU9TUFJ4Q2hlY2sgICAgICA6ICVzIiwgYml0cy0+SU9TUFJ4Q2hlY2sJPyAiVFJVRSI6ICJGQUxTRSIpOworCQlkYmcoIiAgSU9TUFNldENsckJyZWFrICA6ICVzIiwgYml0cy0+SU9TUFNldENsckJyZWFrCT8gIlRSVUUiOiAiRkFMU0UiKTsKKwkJZGJnKCIgIElPU1BXcml0ZU1DUiAgICAgOiAlcyIsIGJpdHMtPklPU1BXcml0ZU1DUgk/ICJUUlVFIjogIkZBTFNFIik7CisJCWRiZygiICBJT1NQV3JpdGVMQ1IgICAgIDogJXMiLCBiaXRzLT5JT1NQV3JpdGVMQ1IJPyAiVFJVRSI6ICJGQUxTRSIpOworCQlkYmcoIiAgSU9TUFNldEJhdWRSYXRlICA6ICVzIiwgYml0cy0+SU9TUFNldEJhdWRSYXRlCT8gIlRSVUUiOiAiRkFMU0UiKTsKKwkJZGJnKCIgIFRydWVFZGdlcG9ydCAgICAgOiAlcyIsIGJpdHMtPlRydWVFZGdlcG9ydAk/ICJUUlVFIjogIkZBTFNFIik7CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTU2MSwxMCArNTkyLDEwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2sKLSAqCXRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGhhdmUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUgCisgKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIHJlY2VpdmVkIGRhdGEgb24gdGhlCiAgKglpbnRlcnJ1cHQgZW5kcG9pbnQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBlZGdlX2ludGVycnVwdF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwJKmVkZ2Vfc2VyaWFsID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CkBAIC01ODksMTcgKzYyMCwxNyBAQAogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KIAkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQkvLyBwcm9jZXNzIHRoaXMgaW50ZXJydXB0LXJlYWQgZXZlbiBpZiB0aGVyZSBhcmUgbm8gcG9ydHMgb3BlbgorCS8qIHByb2Nlc3MgdGhpcyBpbnRlcnJ1cHQtcmVhZCBldmVuIGlmIHRoZXJlIGFyZSBubyBwb3J0cyBvcGVuICovCiAJaWYgKGxlbmd0aCkgewotCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19mdW5jX18sIGxlbmd0aCwgZGF0YSk7CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkJX19mdW5jX18sIGxlbmd0aCwgZGF0YSk7CiAKIAkJaWYgKGxlbmd0aCA+IDEpIHsKIAkJCWJ5dGVzX2F2YWlsID0gZGF0YVswXSB8IChkYXRhWzFdIDw8IDgpOwpAQCAtNjEzLDcgKzY0NCw4IEBACiAJCQkJCWRiZygiJXMgLSBwb3N0aW5nIGEgcmVhZCIsIF9fZnVuY19fKTsKIAkJCQkJZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MgPSB0cnVlOwogCi0JCQkJCS8qIHdlIGhhdmUgcGVuZGluZyBieXRlcyBvbiB0aGUgYnVsayBpbiBwaXBlLCBzZW5kIGEgcmVxdWVzdCAqLworCQkJCQkvKiB3ZSBoYXZlIHBlbmRpbmcgYnl0ZXMgb24gdGhlCisJCQkJCSAgIGJ1bGsgaW4gcGlwZSwgc2VuZCBhIHJlcXVlc3QgKi8KIAkJCQkJZWRnZV9zZXJpYWwtPnJlYWRfdXJiLT5kZXYgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXY7CiAJCQkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCQkJCWlmIChyZXN1bHQpIHsKQEAgLTYyNyw3ICs2NTksOCBAQAogCQkvKiBncmFiIHRoZSB0eGNyZWRpdHMgZm9yIHRoZSBwb3J0cyBpZiBhdmFpbGFibGUgKi8KIAkJcG9zaXRpb24gPSAyOwogCQlwb3J0TnVtYmVyID0gMDsKLQkJd2hpbGUgKChwb3NpdGlvbiA8IGxlbmd0aCkgJiYgKHBvcnROdW1iZXIgPCBlZGdlX3NlcmlhbC0+c2VyaWFsLT5udW1fcG9ydHMpKSB7CisJCXdoaWxlICgocG9zaXRpb24gPCBsZW5ndGgpICYmCisJCQkJKHBvcnROdW1iZXIgPCBlZGdlX3NlcmlhbC0+c2VyaWFsLT5udW1fcG9ydHMpKSB7CiAJCQl0eENyZWRpdHMgPSBkYXRhW3Bvc2l0aW9uXSB8IChkYXRhW3Bvc2l0aW9uKzFdIDw8IDgpOwogCQkJaWYgKHR4Q3JlZGl0cykgewogCQkJCXBvcnQgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5wb3J0W3BvcnROdW1iZXJdOwpAQCAtNjM2LDE0ICs2NjksMTkgQEAKIAkJCQkJc3Bpbl9sb2NrKCZlZGdlX3BvcnQtPmVwX2xvY2spOwogCQkJCQllZGdlX3BvcnQtPnR4Q3JlZGl0cyArPSB0eENyZWRpdHM7CiAJCQkJCXNwaW5fdW5sb2NrKCZlZGdlX3BvcnQtPmVwX2xvY2spOwotCQkJCQlkYmcoIiVzIC0gdHhjcmVkaXRzIGZvciBwb3J0JWQgPSAlZCIsIF9fZnVuY19fLCBwb3J0TnVtYmVyLCBlZGdlX3BvcnQtPnR4Q3JlZGl0cyk7CisJCQkJCWRiZygiJXMgLSB0eGNyZWRpdHMgZm9yIHBvcnQlZCA9ICVkIiwKKwkJCQkJCQlfX2Z1bmNfXywgcG9ydE51bWJlciwKKwkJCQkJCQllZGdlX3BvcnQtPnR4Q3JlZGl0cyk7CiAKLQkJCQkJLyogdGVsbCB0aGUgdHR5IGRyaXZlciB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCAqLwotCQkJCQlpZiAoZWRnZV9wb3J0LT5wb3J0LT50dHkpCi0JCQkJCQl0dHlfd2FrZXVwKGVkZ2VfcG9ydC0+cG9ydC0+dHR5KTsKKwkJCQkJLyogdGVsbCB0aGUgdHR5IGRyaXZlciB0aGF0IHNvbWV0aGluZworCQkJCQkgICBoYXMgY2hhbmdlZCAqLworCQkJCQlpZiAoZWRnZV9wb3J0LT5wb3J0LT5wb3J0LnR0eSkKKwkJCQkJCXR0eV93YWtldXAoZWRnZV9wb3J0LT5wb3J0LT5wb3J0LnR0eSk7CiAKLQkJCQkJLy8gU2luY2Ugd2UgaGF2ZSBtb3JlIGNyZWRpdCwgY2hlY2sgaWYgbW9yZSBkYXRhIGNhbiBiZSBzZW50Ci0JCQkJCXNlbmRfbW9yZV9wb3J0X2RhdGEoZWRnZV9zZXJpYWwsIGVkZ2VfcG9ydCk7CisJCQkJCS8qIFNpbmNlIHdlIGhhdmUgbW9yZSBjcmVkaXQsIGNoZWNrCisJCQkJCSAgIGlmIG1vcmUgZGF0YSBjYW4gYmUgc2VudCAqLworCQkJCQlzZW5kX21vcmVfcG9ydF9kYXRhKGVkZ2Vfc2VyaWFsLAorCQkJCQkJCQllZGdlX3BvcnQpOwogCQkJCX0KIAkJCX0KIAkJCXBvc2l0aW9uICs9IDI7CkBAIC02NTIsMTkgKzY5MCwyMCBAQAogCX0KIAogZXhpdDoKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmVzdWx0KSB7Ci0JCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmJcbiIsIF9fZnVuY19fLCByZXN1bHQpOwotCX0KKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLAorCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBlZGdlX2J1bGtfaW5fY2FsbGJhY2sKLSAqCXRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGhhdmUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUgCisgKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIHJlY2VpdmVkIGRhdGEgb24gdGhlCiAgKglidWxrIGluIGVuZHBvaW50LgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZWRnZV9idWxrX2luX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfaW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwJKmVkZ2Vfc2VyaWFsID0gdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CkBAIC02ODksMTYgKzcyOCwxOCBAQAogCiAJcmF3X2RhdGFfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIF9fZnVuY19fLCByYXdfZGF0YV9sZW5ndGgsIGRhdGEpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LAorCQkJCQlfX2Z1bmNfXywgcmF3X2RhdGFfbGVuZ3RoLCBkYXRhKTsKIAogCXNwaW5fbG9jaygmZWRnZV9zZXJpYWwtPmVzX2xvY2spOwogCiAJLyogZGVjcmVtZW50IG91ciByeEJ5dGVzIGF2YWlsYWJsZSBieSB0aGUgbnVtYmVyIHRoYXQgd2UganVzdCBnb3QgKi8KIAllZGdlX3NlcmlhbC0+cnhCeXRlc0F2YWlsIC09IHJhd19kYXRhX2xlbmd0aDsKIAotCWRiZygiJXMgLSBSZWNlaXZlZCA9ICVkLCByeEJ5dGVzQXZhaWwgJWQiLCBfX2Z1bmNfXywgcmF3X2RhdGFfbGVuZ3RoLCBlZGdlX3NlcmlhbC0+cnhCeXRlc0F2YWlsKTsKKwlkYmcoIiVzIC0gUmVjZWl2ZWQgPSAlZCwgcnhCeXRlc0F2YWlsICVkIiwgX19mdW5jX18sCisJCQkJcmF3X2RhdGFfbGVuZ3RoLCBlZGdlX3NlcmlhbC0+cnhCeXRlc0F2YWlsKTsKIAotCXByb2Nlc3NfcmN2ZF9kYXRhIChlZGdlX3NlcmlhbCwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlwcm9jZXNzX3JjdmRfZGF0YShlZGdlX3NlcmlhbCwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAogCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBtb3JlIGRhdGEgZm9yIHVzIHRvIHJlYWQgKi8KIAlpZiAoZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNBdmFpbCA+IDApIHsKQEAgLTcyMSwxMCArNzYyLDEwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrCi0gKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIGZpbmlzaGVkIHNlbmRpbmcgc2VyaWFsIGRhdGEKLSAqCW9uIHRoZSBidWxrIG91dCBlbmRwb2ludC4KKyAqCXRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGhhdmUgZmluaXNoZWQgc2VuZGluZworICoJc2VyaWFsIGRhdGEgb24gdGhlIGJ1bGsgb3V0IGVuZHBvaW50LgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKQEAgLTczNywyNyArNzc4LDI5IEBACiAJCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKIAl9CiAKLQl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5OwogCiAJaWYgKHR0eSAmJiBlZGdlX3BvcnQtPm9wZW4pIHsKLQkJLyogbGV0IHRoZSB0dHkgZHJpdmVyIHdha2V1cCBpZiBpdCBoYXMgYSBzcGVjaWFsIHdyaXRlX3dha2V1cCBmdW5jdGlvbiAqLworCQkvKiBsZXQgdGhlIHR0eSBkcml2ZXIgd2FrZXVwIGlmIGl0IGhhcyBhIHNwZWNpYWwKKwkJICAgd3JpdGVfd2FrZXVwIGZ1bmN0aW9uICovCiAJCXR0eV93YWtldXAodHR5KTsKIAl9CiAKLQkvLyBSZWxlYXNlIHRoZSBXcml0ZSBVUkIKKwkvKiBSZWxlYXNlIHRoZSBXcml0ZSBVUkIgKi8KIAllZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzID0gZmFsc2U7CiAKLQkvLyBDaGVjayBpZiBtb3JlIGRhdGEgbmVlZHMgdG8gYmUgc2VudAotCXNlbmRfbW9yZV9wb3J0X2RhdGEoKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKikodXNiX2dldF9zZXJpYWxfZGF0YShlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbCkpLCBlZGdlX3BvcnQpOworCS8qIENoZWNrIGlmIG1vcmUgZGF0YSBuZWVkcyB0byBiZSBzZW50ICovCisJc2VuZF9tb3JlX3BvcnRfZGF0YSgoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqKQorCQkodXNiX2dldF9zZXJpYWxfZGF0YShlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbCkpLCBlZGdlX3BvcnQpOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQnVsa091dENtZENhbGxiYWNrCi0gKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIGZpbmlzaGVkIHNlbmRpbmcgYSBjb21tYW5kCi0gKglvbiB0aGUgYnVsayBvdXQgZW5kcG9pbnQuCisgKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIGZpbmlzaGVkIHNlbmRpbmcgYQorICoJY29tbWFuZAlvbiB0aGUgYnVsayBvdXQgZW5kcG9pbnQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBlZGdlX2J1bGtfb3V0X2NtZF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKQEAgLTc2NiwyMiArODA5LDI0IEBACiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCWF0b21pY19kZWMoJkNtZFVyYnMpOwotCWRiZygiJXMgLSBGUkVFIFVSQiAlcCAob3V0c3RhbmRpbmcgJWQpIiwgX19mdW5jX18sIHVyYiwgYXRvbWljX3JlYWQoJkNtZFVyYnMpKTsKKwlkYmcoIiVzIC0gRlJFRSBVUkIgJXAgKG91dHN0YW5kaW5nICVkKSIsIF9fZnVuY19fLAorCQkJCQl1cmIsIGF0b21pY19yZWFkKCZDbWRVcmJzKSk7CiAKIAogCS8qIGNsZWFuIHVwIHRoZSB0cmFuc2ZlciBidWZmZXIgKi8KIAlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKIAkvKiBGcmVlIHRoZSBjb21tYW5kIHVyYiAqLwotCXVzYl9mcmVlX3VyYiAodXJiKTsKKwl1c2JfZnJlZV91cmIodXJiKTsKIAogCWlmIChzdGF0dXMpIHsKLQkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBHZXQgcG9pbnRlciB0byB0dHkgKi8KLQl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5OwogCiAJLyogdGVsbCB0aGUgdHR5IGRyaXZlciB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCAqLwogCWlmICh0dHkgJiYgZWRnZV9wb3J0LT5vcGVuKQpAQCAtODAzLDcgKzg0OCw4IEBACiAgKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gMAogICoJT3RoZXJ3aXNlIHdlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZWRnZV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgaW50IGVkZ2Vfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwpAQCAtODE1LDU1ICs4NjEsNjIgQEAKIAlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHBvcnQtPnR0eSkKLQkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IGxvd19sYXRlbmN5OworCWlmICh0dHkpCisJCXR0eS0+bG93X2xhdGVuY3kgPSBsb3dfbGF0ZW5jeTsKIAotCS8qIHNlZSBpZiB3ZSd2ZSBzZXQgdXAgb3VyIGVuZHBvaW50IGluZm8geWV0IChjYW4ndCBzZXQgaXQgdXAgaW4gZWRnZV9zdGFydHVwCi0JICAgYXMgdGhlIHN0cnVjdHVyZXMgd2VyZSBub3Qgc2V0IHVwIGF0IHRoYXQgdGltZS4pICovCisJLyogc2VlIGlmIHdlJ3ZlIHNldCB1cCBvdXIgZW5kcG9pbnQgaW5mbyB5ZXQgKGNhbid0IHNldCBpdCB1cAorCSAgIGluIGVkZ2Vfc3RhcnR1cCBhcyB0aGUgc3RydWN0dXJlcyB3ZXJlIG5vdCBzZXQgdXAgYXQgdGhhdCB0aW1lLikgKi8KIAlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7Ci0JaWYgKGVkZ2Vfc2VyaWFsID09IE5VTEwpIHsKKwlpZiAoZWRnZV9zZXJpYWwgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCWlmIChlZGdlX3NlcmlhbC0+aW50ZXJydXB0X2luX2J1ZmZlciA9PSBOVUxMKSB7CiAJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQwID0gc2VyaWFsLT5wb3J0WzBdOwotCQkKKwogCQkvKiBub3Qgc2V0IHVwIHlldCwgc28gZG8gaXQgbm93ICovCi0JCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0gcG9ydDAtPmludGVycnVwdF9pbl9idWZmZXI7Ci0JCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQgPSBwb3J0MC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzczsKKwkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIgPQorCQkJCQlwb3J0MC0+aW50ZXJydXB0X2luX2J1ZmZlcjsKKwkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9lbmRwb2ludCA9CisJCQkJCXBvcnQwLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOwogCQllZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiID0gcG9ydDAtPmludGVycnVwdF9pbl91cmI7CiAJCWVkZ2Vfc2VyaWFsLT5idWxrX2luX2J1ZmZlciA9IHBvcnQwLT5idWxrX2luX2J1ZmZlcjsKLQkJZWRnZV9zZXJpYWwtPmJ1bGtfaW5fZW5kcG9pbnQgPSBwb3J0MC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CisJCWVkZ2Vfc2VyaWFsLT5idWxrX2luX2VuZHBvaW50ID0KKwkJCQkJcG9ydDAtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzOwogCQllZGdlX3NlcmlhbC0+cmVhZF91cmIgPSBwb3J0MC0+cmVhZF91cmI7Ci0JCWVkZ2Vfc2VyaWFsLT5idWxrX291dF9lbmRwb2ludCA9IHBvcnQwLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3M7Ci0JCisJCWVkZ2Vfc2VyaWFsLT5idWxrX291dF9lbmRwb2ludCA9CisJCQkJCXBvcnQwLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3M7CisKIAkJLyogc2V0IHVwIG91ciBpbnRlcnJ1cHQgdXJiICovCiAJCXVzYl9maWxsX2ludF91cmIoZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwKLQkJCQkgc2VyaWFsLT5kZXYsCi0JCQkJIHVzYl9yY3ZpbnRwaXBlKHNlcmlhbC0+ZGV2LAotCQkJCQkgICAgICAgIHBvcnQwLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCQkgcG9ydDAtPmludGVycnVwdF9pbl9idWZmZXIsCi0JCQkJIGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJIGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrLCBlZGdlX3NlcmlhbCwKLQkJCQkgZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYi0+aW50ZXJ2YWwpOwotCQkKKwkJICAgICAgc2VyaWFsLT5kZXYsCisJCSAgICAgIHVzYl9yY3ZpbnRwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCXBvcnQwLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgcG9ydDAtPmludGVycnVwdF9pbl9idWZmZXIsCisJCSAgICAgIGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrLCBlZGdlX3NlcmlhbCwKKwkJICAgICAgZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYi0+aW50ZXJ2YWwpOworCiAJCS8qIHNldCB1cCBvdXIgYnVsayBpbiB1cmIgKi8KIAkJdXNiX2ZpbGxfYnVsa191cmIoZWRnZV9zZXJpYWwtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKLQkJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKLQkJCQkJICAJICBwb3J0MC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJCSAgcG9ydDAtPmJ1bGtfaW5fYnVmZmVyLAotCQkJCSAgZWRnZV9zZXJpYWwtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJCSAgZWRnZV9idWxrX2luX2NhbGxiYWNrLCBlZGdlX3NlcmlhbCk7CisJCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJcG9ydDAtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCXBvcnQwLT5idWxrX2luX2J1ZmZlciwKKwkJCWVkZ2Vfc2VyaWFsLT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCWVkZ2VfYnVsa19pbl9jYWxsYmFjaywgZWRnZV9zZXJpYWwpOwogCQllZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcyA9IGZhbHNlOwogCiAJCS8qIHN0YXJ0IGludGVycnVwdCByZWFkIGZvciB0aGlzIGVkZ2Vwb3J0Ci0JCSAqIHRoaXMgaW50ZXJydXB0IHdpbGwgY29udGludWUgYXMgbG9uZyBhcyB0aGUgZWRnZXBvcnQgaXMgY29ubmVjdGVkICovCi0JCXJlc3BvbnNlID0gdXNiX3N1Ym1pdF91cmIgKGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIsIEdGUF9LRVJORUwpOworCQkgKiB0aGlzIGludGVycnVwdCB3aWxsIGNvbnRpbnVlIGFzIGxvbmcKKwkJICogYXMgdGhlIGVkZ2Vwb3J0IGlzIGNvbm5lY3RlZCAqLworCQlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiKGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIsCisJCQkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAocmVzcG9uc2UpIHsKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBjb250cm9sIHVyYlxuIiwgX19mdW5jX18sIHJlc3BvbnNlKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXNwb25zZSk7CiAJCX0KIAl9Ci0JCisKIAkvKiBpbml0aWFsaXplIG91ciB3YWl0IHF1ZXVlcyAqLwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVkZ2VfcG9ydC0+d2FpdF9vcGVuKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlZGdlX3BvcnQtPndhaXRfY2hhc2UpOwpAQCAtODcxLDI2ICs5MjQsMjkgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlZGdlX3BvcnQtPndhaXRfY29tbWFuZCk7CiAKIAkvKiBpbml0aWFsaXplIG91ciBpY291bnQgc3RydWN0dXJlICovCi0JbWVtc2V0ICgmKGVkZ2VfcG9ydC0+aWNvdW50KSwgMHgwMCwgc2l6ZW9mKGVkZ2VfcG9ydC0+aWNvdW50KSk7CisJbWVtc2V0KCYoZWRnZV9wb3J0LT5pY291bnQpLCAweDAwLCBzaXplb2YoZWRnZV9wb3J0LT5pY291bnQpKTsKIAogCS8qIGluaXRpYWxpemUgb3VyIHBvcnQgc2V0dGluZ3MgKi8KLQllZGdlX3BvcnQtPnR4Q3JlZGl0cyAgICAgICAgICAgID0gMDsJCQkvKiBDYW4ndCBzZW5kIGFueSBkYXRhIHlldCAqLwotCWVkZ2VfcG9ydC0+c2hhZG93TUNSICAgICAgICAgICAgPSBNQ1JfTUFTVEVSX0lFOwkvKiBNdXN0IGFsd2F5cyBzZXQgdGhpcyBiaXQgdG8gZW5hYmxlIGludHMhICovCisJZWRnZV9wb3J0LT50eENyZWRpdHMgPSAwOwkvKiBDYW4ndCBzZW5kIGFueSBkYXRhIHlldCAqLworCS8qIE11c3QgYWx3YXlzIHNldCB0aGlzIGJpdCB0byBlbmFibGUgaW50cyEgKi8KKwllZGdlX3BvcnQtPnNoYWRvd01DUiA9IE1DUl9NQVNURVJfSUU7CiAJZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IGZhbHNlOwogCiAJLyogc2VuZCBhIG9wZW4gcG9ydCBjb21tYW5kICovCiAJZWRnZV9wb3J0LT5vcGVuUGVuZGluZyA9IHRydWU7CiAJZWRnZV9wb3J0LT5vcGVuICAgICAgICA9IGZhbHNlOwotCXJlc3BvbnNlID0gc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfT1BFTl9QT1JULCAwKTsKKwlyZXNwb25zZSA9IHNlbmRfaW9zcF9leHRfY21kKGVkZ2VfcG9ydCwgSU9TUF9DTURfT1BFTl9QT1JULCAwKTsKIAogCWlmIChyZXNwb25zZSA8IDApIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBlcnJvciBzZW5kaW5nIG9wZW4gcG9ydCBjb21tYW5kXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZXJyb3Igc2VuZGluZyBvcGVuIHBvcnQgY29tbWFuZFxuIiwKKwkJCQkJCQkJX19mdW5jX18pOwogCQllZGdlX3BvcnQtPm9wZW5QZW5kaW5nID0gZmFsc2U7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIG5vdyB3YWl0IGZvciB0aGUgcG9ydCB0byBiZSBjb21wbGV0ZWx5IG9wZW5lZCAqLwotCXdhaXRfZXZlbnRfdGltZW91dChlZGdlX3BvcnQtPndhaXRfb3BlbiwgIWVkZ2VfcG9ydC0+b3BlblBlbmRpbmcsIE9QRU5fVElNRU9VVCk7CisJd2FpdF9ldmVudF90aW1lb3V0KGVkZ2VfcG9ydC0+d2FpdF9vcGVuLCAhZWRnZV9wb3J0LT5vcGVuUGVuZGluZywKKwkJCQkJCQkJT1BFTl9USU1FT1VUKTsKIAogCWlmICghZWRnZV9wb3J0LT5vcGVuKSB7CiAJCS8qIG9wZW4gdGltZWQgb3V0ICovCkBAIC05MDQsMjUgKzk2MCwyNiBAQAogCWVkZ2VfcG9ydC0+dHhmaWZvLnRhaWwJPSAwOwogCWVkZ2VfcG9ydC0+dHhmaWZvLmNvdW50CT0gMDsKIAllZGdlX3BvcnQtPnR4Zmlmby5zaXplCT0gZWRnZV9wb3J0LT5tYXhUeENyZWRpdHM7Ci0JZWRnZV9wb3J0LT50eGZpZm8uZmlmbwk9IGttYWxsb2MgKGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzLCBHRlBfS0VSTkVMKTsKKwllZGdlX3BvcnQtPnR4Zmlmby5maWZvCT0ga21hbGxvYyhlZGdlX3BvcnQtPm1heFR4Q3JlZGl0cywgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWVkZ2VfcG9ydC0+dHhmaWZvLmZpZm8pIHsKIAkJZGJnKCIlcyAtIG5vIG1lbW9yeSIsIF9fZnVuY19fKTsKLQkJZWRnZV9jbG9zZSAocG9ydCwgZmlscCk7CisJCWVkZ2VfY2xvc2UodHR5LCBwb3J0LCBmaWxwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogQWxsb2NhdGUgYSBVUkIgZm9yIHRoZSB3cml0ZSAqLwotCWVkZ2VfcG9ydC0+d3JpdGVfdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisJZWRnZV9wb3J0LT53cml0ZV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKIAogCWlmICghZWRnZV9wb3J0LT53cml0ZV91cmIpIHsKIAkJZGJnKCIlcyAtIG5vIG1lbW9yeSIsIF9fZnVuY19fKTsKLQkJZWRnZV9jbG9zZSAocG9ydCwgZmlscCk7CisJCWVkZ2VfY2xvc2UodHR5LCBwb3J0LCBmaWxwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZGJnKCIlcyglZCkgLSBJbml0aWFsaXplIFRYIGZpZm8gdG8gJWQgYnl0ZXMiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBlZGdlX3BvcnQtPm1heFR4Q3JlZGl0cyk7CisJZGJnKCIlcyglZCkgLSBJbml0aWFsaXplIFRYIGZpZm8gdG8gJWQgYnl0ZXMiLAorCQkJX19mdW5jX18sIHBvcnQtPm51bWJlciwgZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMpOwogCiAJZGJnKCIlcyBleGl0ZWQiLCBfX2Z1bmNfXyk7CiAKQEAgLTk0OCwyNyArMTAwNSwyOCBAQAogCWludCBsb29wID0gMTA7CiAKIAl3aGlsZSAoMSkgewotCQkvLyBTYXZlIExhc3QgY3JlZGl0cworCQkvKiBTYXZlIExhc3QgY3JlZGl0cyAqLwogCQlsYXN0Q3JlZGl0cyA9IGVkZ2VfcG9ydC0+dHhDcmVkaXRzOwogCi0JCS8vIERpZCB3ZSBnZXQgb3VyIENoYXNlIHJlc3BvbnNlCisJCS8qIERpZCB3ZSBnZXQgb3VyIENoYXNlIHJlc3BvbnNlICovCiAJCWlmICghZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZykgewogCQkJZGJnKCIlcyAtIEdvdCBDaGFzZSBSZXNwb25zZSIsIF9fZnVuY19fKTsKIAotCQkJLy8gZGlkIHdlIGdldCBhbGwgb2Ygb3VyIGNyZWRpdCBiYWNrPwotCQkJaWYgKGVkZ2VfcG9ydC0+dHhDcmVkaXRzID09IGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzICkgeworCQkJLyogZGlkIHdlIGdldCBhbGwgb2Ygb3VyIGNyZWRpdCBiYWNrPyAqLworCQkJaWYgKGVkZ2VfcG9ydC0+dHhDcmVkaXRzID09IGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzKSB7CiAJCQkJZGJnKCIlcyAtIEdvdCBhbGwgY3JlZGl0cyIsIF9fZnVuY19fKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KIAotCQkvLyBCbG9jayB0aGUgdGhyZWFkIGZvciBhIHdoaWxlCi0JCXByZXBhcmVfdG9fd2FpdCgmZWRnZV9wb3J0LT53YWl0X2NoYXNlLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkvKiBCbG9jayB0aGUgdGhyZWFkIGZvciBhIHdoaWxlICovCisJCXByZXBhcmVfdG9fd2FpdCgmZWRnZV9wb3J0LT53YWl0X2NoYXNlLCAmd2FpdCwKKwkJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKIAkJZmluaXNoX3dhaXQoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSwgJndhaXQpOwogCiAJCWlmIChsYXN0Q3JlZGl0cyA9PSBlZGdlX3BvcnQtPnR4Q3JlZGl0cykgewotCQkJLy8gTm8gYWN0aXZpdHkuLiBjb3VudCBkb3duLgorCQkJLyogTm8gYWN0aXZpdHkuLiBjb3VudCBkb3duLiAqLwogCQkJbG9vcC0tOwogCQkJaWYgKGxvb3AgPT0gMCkgewogCQkJCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBmYWxzZTsKQEAgLTk3Niw4ICsxMDM0LDkgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQkvLyBSZXNldCB0aW1lb3V0IHZhbHVlIGJhY2sgdG8gMTAgc2Vjb25kcwotCQkJZGJnKCIlcyAtIExhc3QgJWQsIEN1cnJlbnQgJWQiLCBfX2Z1bmNfXywgbGFzdENyZWRpdHMsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzKTsKKwkJCS8qIFJlc2V0IHRpbWVvdXQgdmFsdWUgYmFjayB0byAxMCBzZWNvbmRzICovCisJCQlkYmcoIiVzIC0gTGFzdCAlZCwgQ3VycmVudCAlZCIsIF9fZnVuY19fLAorCQkJCQlsYXN0Q3JlZGl0cywgZWRnZV9wb3J0LT50eENyZWRpdHMpOwogCQkJbG9vcCA9IDEwOwogCQl9CiAJfQpAQCAtOTk0LDcgKzEwNTMsNyBAQAogICoJCTMuIEEgdGltZW91dCBvZiAzIHNlY29uZHMgd2l0aG91dCBhY3Rpdml0eSBoYXMgZXhwaXJlZAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBibG9ja191bnRpbF90eF9lbXB0eSAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCkKK3N0YXRpYyB2b2lkIGJsb2NrX3VudGlsX3R4X2VtcHR5KHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAJc3RydWN0IFR4RmlmbyAqZmlmbyA9ICZlZGdlX3BvcnQtPnR4ZmlmbzsKQEAgLTEwMDMsMzEgKzEwNjIsMzIgQEAKIAlpbnQgbG9vcCA9IDMwOwogCiAJd2hpbGUgKDEpIHsKLQkJLy8gU2F2ZSBMYXN0IGNvdW50CisJCS8qIFNhdmUgTGFzdCBjb3VudCAqLwogCQlsYXN0Q291bnQgPSBmaWZvLT5jb3VudDsKIAotCQkvLyBJcyB0aGUgRWRnZXBvcnQgQnVmZmVyIGVtcHR5PworCQkvKiBJcyB0aGUgRWRnZXBvcnQgQnVmZmVyIGVtcHR5PyAqLwogCQlpZiAobGFzdENvdW50ID09IDApIHsKIAkJCWRiZygiJXMgLSBUWCBCdWZmZXIgRW1wdHkiLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQkvLyBCbG9jayB0aGUgdGhyZWFkIGZvciBhIHdoaWxlCi0JCXByZXBhcmVfdG9fd2FpdCAoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJLyogQmxvY2sgdGhlIHRocmVhZCBmb3IgYSB3aGlsZSAqLworCQlwcmVwYXJlX3RvX3dhaXQoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSwgJndhaXQsCisJCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCXNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CiAJCWZpbmlzaF93YWl0KCZlZGdlX3BvcnQtPndhaXRfY2hhc2UsICZ3YWl0KTsKIAogCQlkYmcoIiVzIHdhaXQiLCBfX2Z1bmNfXyk7CiAKIAkJaWYgKGxhc3RDb3VudCA9PSBmaWZvLT5jb3VudCkgewotCQkJLy8gTm8gYWN0aXZpdHkuLiBjb3VudCBkb3duLgorCQkJLyogTm8gYWN0aXZpdHkuLiBjb3VudCBkb3duLiAqLwogCQkJbG9vcC0tOwogCQkJaWYgKGxvb3AgPT0gMCkgewogCQkJCWRiZygiJXMgLSBUSU1FT1VUIiwgX19mdW5jX18pOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCS8vIFJlc2V0IHRpbWVvdXQgdmFsdWUgYmFjayB0byBzZWNvbmRzCisJCQkvKiBSZXNldCB0aW1lb3V0IHZhbHVlIGJhY2sgdG8gc2Vjb25kcyAqLwogCQkJbG9vcCA9IDMwOwogCQl9CiAJfQpAQCAtMTAzOCwyMCArMTA5OCwyMSBAQAogICogZWRnZV9jbG9zZQogICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBhIHBvcnQgaXMgY2xvc2VkCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBlZGdlX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgdm9pZCBlZGdlX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OwogCWludCBzdGF0dXM7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCQkJIAorCiAJZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CiAJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWlmICgoZWRnZV9zZXJpYWwgPT0gTlVMTCkgfHwgKGVkZ2VfcG9ydCA9PSBOVUxMKSkKKwlpZiAoZWRnZV9zZXJpYWwgPT0gTlVMTCB8fCBlZGdlX3BvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwotCQotCS8vIGJsb2NrIHVudGlsIHR4IGlzIGVtcHR5CisKKwkvKiBibG9jayB1bnRpbCB0eCBpcyBlbXB0eSAqLwogCWJsb2NrX3VudGlsX3R4X2VtcHR5KGVkZ2VfcG9ydCk7CiAKIAllZGdlX3BvcnQtPmNsb3NlUGVuZGluZyA9IHRydWU7CkBAIC0xMDYzLDEzICsxMTI0LDEyIEBACiAJCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSB0cnVlOwogCiAJCWRiZygiJXMgLSBTZW5kaW5nIElPU1BfQ01EX0NIQVNFX1BPUlQiLCBfX2Z1bmNfXyk7Ci0JCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX0NIQVNFX1BPUlQsIDApOwotCQlpZiAoc3RhdHVzID09IDApIHsKLQkJCS8vIGJsb2NrIHVudGlsIGNoYXNlIGZpbmlzaGVkCisJCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kKGVkZ2VfcG9ydCwgSU9TUF9DTURfQ0hBU0VfUE9SVCwgMCk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCS8qIGJsb2NrIHVudGlsIGNoYXNlIGZpbmlzaGVkICovCiAJCQlibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZShlZGdlX3BvcnQpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQllZGdlX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gZmFsc2U7Ci0JCX0KIAl9CiAKIAlpZiAoKCFlZGdlX3NlcmlhbC0+aXNfZXBpYykgfHwKQEAgLTEwNzcsMTAgKzExMzcsMTAgQEAKIAkgICAgIChlZGdlX3NlcmlhbC0+ZXBpY19kZXNjcmlwdG9yLlN1cHBvcnRzLklPU1BDbG9zZSkpKSB7CiAJICAgICAgIC8qIGNsb3NlIHRoZSBwb3J0ICovCiAJCWRiZygiJXMgLSBTZW5kaW5nIElPU1BfQ01EX0NMT1NFX1BPUlQiLCBfX2Z1bmNfXyk7Ci0JCXNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX0NMT1NFX1BPUlQsIDApOworCQlzZW5kX2lvc3BfZXh0X2NtZChlZGdlX3BvcnQsIElPU1BfQ01EX0NMT1NFX1BPUlQsIDApOwogCX0KIAotCS8vcG9ydC0+Y2xvc2UgPSB0cnVlOworCS8qIHBvcnQtPmNsb3NlID0gdHJ1ZTsgKi8KIAllZGdlX3BvcnQtPmNsb3NlUGVuZGluZyA9IGZhbHNlOwogCWVkZ2VfcG9ydC0+b3BlbiA9IGZhbHNlOwogCWVkZ2VfcG9ydC0+b3BlblBlbmRpbmcgPSBmYWxzZTsKQEAgLTEwODgsNyArMTE0OCw4IEBACiAJdXNiX2tpbGxfdXJiKGVkZ2VfcG9ydC0+d3JpdGVfdXJiKTsKIAogCWlmIChlZGdlX3BvcnQtPndyaXRlX3VyYikgewotCQkvKiBpZiB0aGlzIHVyYiBoYWQgYSB0cmFuc2ZlciBidWZmZXIgYWxyZWFkeSAob2xkIHRyYW5zZmVyKSBmcmVlIGl0ICovCisJCS8qIGlmIHRoaXMgdXJiIGhhZCBhIHRyYW5zZmVyIGJ1ZmZlciBhbHJlYWR5CisJCQkJKG9sZCB0cmFuc2ZlcikgZnJlZSBpdCAqLwogCQlrZnJlZShlZGdlX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJdXNiX2ZyZWVfdXJiKGVkZ2VfcG9ydC0+d3JpdGVfdXJiKTsKIAkJZWRnZV9wb3J0LT53cml0ZV91cmIgPSBOVUxMOwpAQCAtMTA5NywxNiArMTE1OCwxNyBAQAogCWVkZ2VfcG9ydC0+dHhmaWZvLmZpZm8gPSBOVUxMOwogCiAJZGJnKCIlcyBleGl0ZWQiLCBfX2Z1bmNfXyk7Ci19ICAgCit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU2VyaWFsV3JpdGUKLSAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gZGF0YSBzaG91bGQgYmUgd3JpdHRlbiB0bwotICoJdGhlIHBvcnQuCi0gKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvdGhlcndpc2Ugd2UgcmV0dXJuCi0gKglhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gZGF0YSBzaG91bGQgYmUgd3JpdHRlbgorICoJdG8gdGhlIHBvcnQuCisgKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvdGhlcndpc2Ugd2UKKyAqCXJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZWRnZV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KQorc3RhdGljIGludCBlZGdlX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCBUeEZpZm8gKmZpZm87CkBAIC0xMTIxLDY2ICsxMTgzLDc2IEBACiAJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIFR4IGZpZm8KKwkvKiBnZXQgYSBwb2ludGVyIHRvIHRoZSBUeCBmaWZvICovCiAJZmlmbyA9ICZlZGdlX3BvcnQtPnR4ZmlmbzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKIAotCS8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgYnl0ZXMgdG8gcHV0IGluIGZpZm8KLQljb3B5U2l6ZSA9IG1pbiAoKHVuc2lnbmVkIGludCljb3VudCwgKGVkZ2VfcG9ydC0+dHhDcmVkaXRzIC0gZmlmby0+Y291bnQpKTsKKwkvKiBjYWxjdWxhdGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHB1dCBpbiBmaWZvICovCisJY29weVNpemUgPSBtaW4oKHVuc2lnbmVkIGludCljb3VudCwKKwkJCQkoZWRnZV9wb3J0LT50eENyZWRpdHMgLSBmaWZvLT5jb3VudCkpOwogCi0JZGJnKCIlcyglZCkgb2YgJWQgYnl0ZShzKSBGaWZvIHJvb20gICVkIC0tIHdpbGwgY29weSAlZCBieXRlcyIsIF9fZnVuY19fLAotCSAgICBwb3J0LT5udW1iZXIsIGNvdW50LCBlZGdlX3BvcnQtPnR4Q3JlZGl0cyAtIGZpZm8tPmNvdW50LCBjb3B5U2l6ZSk7CisJZGJnKCIlcyglZCkgb2YgJWQgYnl0ZShzKSBGaWZvIHJvb20gICVkIC0tIHdpbGwgY29weSAlZCBieXRlcyIsCisJCQlfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjb3VudCwKKwkJCWVkZ2VfcG9ydC0+dHhDcmVkaXRzIC0gZmlmby0+Y291bnQsIGNvcHlTaXplKTsKIAotCS8qIGNhdGNoIHdyaXRlcyBvZiAwIGJ5dGVzIHdoaWNoIHRoZSB0dHkgZHJpdmVyIGxpa2VzIHRvIGdpdmUgdXMsIGFuZCB3aGVuIHR4Q3JlZGl0cyBpcyBlbXB0eSAqLworCS8qIGNhdGNoIHdyaXRlcyBvZiAwIGJ5dGVzIHdoaWNoIHRoZSB0dHkgZHJpdmVyIGxpa2VzIHRvIGdpdmUgdXMsCisJICAgYW5kIHdoZW4gdHhDcmVkaXRzIGlzIGVtcHR5ICovCiAJaWYgKGNvcHlTaXplID09IDApIHsKIAkJZGJnKCIlcyAtIGNvcHlTaXplID0gWmVybyIsIF9fZnVuY19fKTsKIAkJZ290byBmaW5pc2hfd3JpdGU7CiAJfQogCi0JLy8gcXVldWUgdGhlIGRhdGEJCi0JLy8gc2luY2Ugd2UgY2FuIG5ldmVyIG92ZXJmbG93IHRoZSBidWZmZXIgd2UgZG8gbm90IGhhdmUgdG8gY2hlY2sgZm9yIGZ1bGwgY29uZGl0aW9uCi0KLQkvLyB0aGUgY29weSBpcyBkb25lIGlzIHR3byBwYXJ0cyAtLSBmaXJzdCBmaWxsIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcgotCS8vIHRoZW4gY29weSB0aGUgcmVzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciAKLQorCS8qIHF1ZXVlIHRoZSBkYXRhCisJICogc2luY2Ugd2UgY2FuIG5ldmVyIG92ZXJmbG93IHRoZSBidWZmZXIgd2UgZG8gbm90IGhhdmUgdG8gY2hlY2sgZm9yIGEKKwkgKiBmdWxsIGNvbmRpdGlvbgorCSAqCisJICogdGhlIGNvcHkgaXMgZG9uZSBpcyB0d28gcGFydHMgLS0gZmlyc3QgZmlsbCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIKKwkgKiB0aGVuIGNvcHkgdGhlIHJlc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIKKwkgKi8KIAlieXRlc2xlZnQgPSBmaWZvLT5zaXplIC0gZmlmby0+aGVhZDsKLQlmaXJzdGhhbGYgPSBtaW4gKGJ5dGVzbGVmdCwgY29weVNpemUpOwotCWRiZygiJXMgLSBjb3B5ICVkIGJ5dGVzIG9mICVkIGludG8gZmlmbyAiLCBfX2Z1bmNfXywgZmlyc3RoYWxmLCBieXRlc2xlZnQpOworCWZpcnN0aGFsZiA9IG1pbihieXRlc2xlZnQsIGNvcHlTaXplKTsKKwlkYmcoIiVzIC0gY29weSAlZCBieXRlcyBvZiAlZCBpbnRvIGZpZm8gIiwgX19mdW5jX18sCisJCQkJCWZpcnN0aGFsZiwgYnl0ZXNsZWZ0KTsKIAogCS8qIG5vdyBjb3B5IG91ciBkYXRhICovCiAJbWVtY3B5KCZmaWZvLT5maWZvW2ZpZm8tPmhlYWRdLCBkYXRhLCBmaXJzdGhhbGYpOwotCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIGZpcnN0aGFsZiwgJmZpZm8tPmZpZm9bZmlmby0+aGVhZF0pOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCisJCQkJCWZpcnN0aGFsZiwgJmZpZm8tPmZpZm9bZmlmby0+aGVhZF0pOwogCi0JLy8gdXBkYXRlIHRoZSBpbmRleCBhbmQgc2l6ZQorCS8qIHVwZGF0ZSB0aGUgaW5kZXggYW5kIHNpemUgKi8KIAlmaWZvLT5oZWFkICArPSBmaXJzdGhhbGY7CiAJZmlmby0+Y291bnQgKz0gZmlyc3RoYWxmOwogCi0JLy8gd3JhcCB0aGUgaW5kZXgKLQlpZiAoZmlmby0+aGVhZCA9PSBmaWZvLT5zaXplKSB7CisJLyogd3JhcCB0aGUgaW5kZXggKi8KKwlpZiAoZmlmby0+aGVhZCA9PSBmaWZvLT5zaXplKQogCQlmaWZvLT5oZWFkID0gMDsKLQl9CiAKIAlzZWNvbmRoYWxmID0gY29weVNpemUtZmlyc3RoYWxmOwogCiAJaWYgKHNlY29uZGhhbGYpIHsKIAkJZGJnKCIlcyAtIGNvcHkgcmVzdCBvZiBkYXRhICVkIiwgX19mdW5jX18sIHNlY29uZGhhbGYpOwogCQltZW1jcHkoJmZpZm8tPmZpZm9bZmlmby0+aGVhZF0sICZkYXRhW2ZpcnN0aGFsZl0sIHNlY29uZGhhbGYpOwotCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBzZWNvbmRoYWxmLCAmZmlmby0+Zmlmb1tmaWZvLT5oZWFkXSk7Ci0JCS8vIHVwZGF0ZSB0aGUgaW5kZXggYW5kIHNpemUKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKKwkJCQkJc2Vjb25kaGFsZiwgJmZpZm8tPmZpZm9bZmlmby0+aGVhZF0pOworCQkvKiB1cGRhdGUgdGhlIGluZGV4IGFuZCBzaXplICovCiAJCWZpZm8tPmNvdW50ICs9IHNlY29uZGhhbGY7CiAJCWZpZm8tPmhlYWQgICs9IHNlY29uZGhhbGY7Ci0JCS8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHdyYXAgc2luY2Ugd2UgY2FuIG5vdCBnZXQgdG8gZW5kIG9mIGZpZm8gaW4gdGhpcyBwYXJ0CisJCS8qIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHdyYXAgc2luY2Ugd2UgY2FuIG5vdCBnZXQgdG8gZW5kIG9mCisJCSAqIHRoZSBmaWZvIGluIHRoaXMgcGFydAorCQkgKi8KIAl9CiAKIGZpbmlzaF93cml0ZToKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKIAotCXNlbmRfbW9yZV9wb3J0X2RhdGEoKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKil1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCksIGVkZ2VfcG9ydCk7CisJc2VuZF9tb3JlX3BvcnRfZGF0YSgoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqKQorCQkJdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpLCBlZGdlX3BvcnQpOwogCi0JZGJnKCIlcyB3cm90ZSAlZCBieXRlKHMpIFR4Q3JlZGl0cyAlZCwgRmlmbyAlZCIsIF9fZnVuY19fLCBjb3B5U2l6ZSwgZWRnZV9wb3J0LT50eENyZWRpdHMsIGZpZm8tPmNvdW50KTsKKwlkYmcoIiVzIHdyb3RlICVkIGJ5dGUocykgVHhDcmVkaXRzICVkLCBGaWZvICVkIiwgX19mdW5jX18sCisJCQkJY29weVNpemUsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzLCBmaWZvLT5jb3VudCk7CiAKLQlyZXR1cm4gY29weVNpemU7ICAgCisJcmV0dXJuIGNvcHlTaXplOwogfQogCiAKQEAgLTExOTcsNyArMTI2OSw4IEBACiAgKgljYW4gdHJhbnNtaXQgbW9yZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgc2VuZF9tb3JlX3BvcnRfZGF0YShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCwgc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCkKK3N0YXRpYyB2b2lkIHNlbmRfbW9yZV9wb3J0X2RhdGEoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsCisJCQkJCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpCiB7CiAJc3RydWN0IFR4RmlmbwkqZmlmbyA9ICZlZGdlX3BvcnQtPnR4ZmlmbzsKIAlzdHJ1Y3QgdXJiCSp1cmI7CkBAIC0xMjE2LDY3ICsxMjg5LDc4IEBACiAJaWYgKGVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MgfHwKIAkgICAgIWVkZ2VfcG9ydC0+b3BlbiAgICAgICAgICAgICB8fAogCSAgICAoZmlmby0+Y291bnQgPT0gMCkpIHsKLQkJZGJnKCIlcyglZCkgRVhJVCAtIGZpZm8gJWQsIFBlbmRpbmdXcml0ZSA9ICVkIiwgX19mdW5jX18sIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyLCBmaWZvLT5jb3VudCwgZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyk7CisJCWRiZygiJXMoJWQpIEVYSVQgLSBmaWZvICVkLCBQZW5kaW5nV3JpdGUgPSAlZCIsCisJCQkJX19mdW5jX18sIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyLAorCQkJCWZpZm8tPmNvdW50LCBlZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzKTsKIAkJZ290byBleGl0X3NlbmQ7CiAJfQogCi0JLy8gc2luY2UgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBmaWZvIHdpbGwgYWx3YXlzIGZpdCBpbnRvIHRoZQotCS8vIGVkZ2Vwb3J0IGJ1ZmZlciB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayB0aGUgd3JpdGUgbGVuZ3RoCi0KLQkvLwlEbyB3ZSBoYXZlIGVub3VnaCBjcmVkaXRzIGZvciB0aGlzIHBvcnQgdG8gbWFrZSBpdCB3b3J0aHdoaWxlCi0JLy8JdG8gYm90aGVyIHF1ZXVlaW5nIGEgd3JpdGUuIElmIGl0J3MgdG9vIHNtYWxsLCBzYXkgYSBmZXcgYnl0ZXMsCi0JLy8JaXQncyBiZXR0ZXIgdG8gd2FpdCBmb3IgbW9yZSBjcmVkaXRzIHNvIHdlIGNhbiBkbyBhIGxhcmdlcgotCS8vCXdyaXRlLgotCWlmIChlZGdlX3BvcnQtPnR4Q3JlZGl0cyA8IEVER0VfRldfR0VUX1RYX0NSRURJVFNfU0VORF9USFJFU0hPTEQoZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMsRURHRV9GV19CVUxLX01BWF9QQUNLRVRfU0laRSkpIHsKLQkJZGJnKCIlcyglZCkgTm90IGVub3VnaCBjcmVkaXQgLSBmaWZvICVkIFR4Q3JlZGl0ICVkIiwgX19mdW5jX18sIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyLCBmaWZvLT5jb3VudCwgZWRnZV9wb3J0LT50eENyZWRpdHMgKTsKKwkvKiBzaW5jZSB0aGUgYW1vdW50IG9mIGRhdGEgaW4gdGhlIGZpZm8gd2lsbCBhbHdheXMgZml0IGludG8gdGhlCisJICogZWRnZXBvcnQgYnVmZmVyIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIHRoZSB3cml0ZSBsZW5ndGgKKwkgKgorCSAqIERvIHdlIGhhdmUgZW5vdWdoIGNyZWRpdHMgZm9yIHRoaXMgcG9ydCB0byBtYWtlIGl0IHdvcnRod2hpbGUKKwkgKiB0byBib3RoZXIgcXVldWVpbmcgYSB3cml0ZS4gSWYgaXQncyB0b28gc21hbGwsIHNheSBhIGZldyBieXRlcywKKwkgKiBpdCdzIGJldHRlciB0byB3YWl0IGZvciBtb3JlIGNyZWRpdHMgc28gd2UgY2FuIGRvIGEgbGFyZ2VyIHdyaXRlLgorCSAqLworCWlmIChlZGdlX3BvcnQtPnR4Q3JlZGl0cyA8IEVER0VfRldfR0VUX1RYX0NSRURJVFNfU0VORF9USFJFU0hPTEQoZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMsIEVER0VfRldfQlVMS19NQVhfUEFDS0VUX1NJWkUpKSB7CisJCWRiZygiJXMoJWQpIE5vdCBlbm91Z2ggY3JlZGl0IC0gZmlmbyAlZCBUeENyZWRpdCAlZCIsCisJCQlfX2Z1bmNfXywgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIsIGZpZm8tPmNvdW50LAorCQkJZWRnZV9wb3J0LT50eENyZWRpdHMpOwogCQlnb3RvIGV4aXRfc2VuZDsKIAl9CiAKLQkvLyBsb2NrIHRoaXMgd3JpdGUKKwkvKiBsb2NrIHRoaXMgd3JpdGUgKi8KIAllZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzID0gdHJ1ZTsKIAotCS8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHdyaXRlX3VyYgorCS8qIGdldCBhIHBvaW50ZXIgdG8gdGhlIHdyaXRlX3VyYiAqLwogCXVyYiA9IGVkZ2VfcG9ydC0+d3JpdGVfdXJiOwogCiAJLyogbWFrZSBzdXJlIHRyYW5zZmVyIGJ1ZmZlciBpcyBmcmVlZCAqLwogCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CiAKLQkvKiBidWlsZCB0aGUgZGF0YSBoZWFkZXIgZm9yIHRoZSBidWZmZXIgYW5kIHBvcnQgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc2VuZCBvdXQgKi8KKwkvKiBidWlsZCB0aGUgZGF0YSBoZWFkZXIgZm9yIHRoZSBidWZmZXIgYW5kIHBvcnQgdGhhdCB3ZSBhcmUgYWJvdXQKKwkgICB0byBzZW5kIG91dCAqLwogCWNvdW50ID0gZmlmby0+Y291bnQ7Ci0JYnVmZmVyID0ga21hbGxvYyAoY291bnQrMiwgR0ZQX0FUT01JQyk7CisJYnVmZmVyID0ga21hbGxvYyhjb3VudCsyLCBHRlBfQVRPTUlDKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwKKwkJCQkiJXMgLSBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi5cbiIsIF9fZnVuY19fKTsKIAkJZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyA9IGZhbHNlOwogCQlnb3RvIGV4aXRfc2VuZDsKIAl9Ci0JYnVmZmVyWzBdID0gSU9TUF9CVUlMRF9EQVRBX0hEUjEgKGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yLCBjb3VudCk7Ci0JYnVmZmVyWzFdID0gSU9TUF9CVUlMRF9EQVRBX0hEUjIgKGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yLCBjb3VudCk7CisJYnVmZmVyWzBdID0gSU9TUF9CVUlMRF9EQVRBX0hEUjEoZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIKKwkJCQktIGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vciwgY291bnQpOworCWJ1ZmZlclsxXSA9IElPU1BfQlVJTERfREFUQV9IRFIyKGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyCisJCQkJLSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3IsIGNvdW50KTsKIAogCS8qIG5vdyBjb3B5IG91ciBkYXRhICovCiAJYnl0ZXNsZWZ0ID0gIGZpZm8tPnNpemUgLSBmaWZvLT50YWlsOwotCWZpcnN0aGFsZiA9IG1pbiAoYnl0ZXNsZWZ0LCBjb3VudCk7CisJZmlyc3RoYWxmID0gbWluKGJ5dGVzbGVmdCwgY291bnQpOwogCW1lbWNweSgmYnVmZmVyWzJdLCAmZmlmby0+Zmlmb1tmaWZvLT50YWlsXSwgZmlyc3RoYWxmKTsKIAlmaWZvLT50YWlsICArPSBmaXJzdGhhbGY7CiAJZmlmby0+Y291bnQgLT0gZmlyc3RoYWxmOwotCWlmIChmaWZvLT50YWlsID09IGZpZm8tPnNpemUpIHsKKwlpZiAoZmlmby0+dGFpbCA9PSBmaWZvLT5zaXplKQogCQlmaWZvLT50YWlsID0gMDsKLQl9CiAKIAlzZWNvbmRoYWxmID0gY291bnQtZmlyc3RoYWxmOwogCWlmIChzZWNvbmRoYWxmKSB7Ci0JCW1lbWNweSgmYnVmZmVyWzIrZmlyc3RoYWxmXSwgJmZpZm8tPmZpZm9bZmlmby0+dGFpbF0sIHNlY29uZGhhbGYpOworCQltZW1jcHkoJmJ1ZmZlclsyK2ZpcnN0aGFsZl0sICZmaWZvLT5maWZvW2ZpZm8tPnRhaWxdLAorCQkJCQkJCQlzZWNvbmRoYWxmKTsKIAkJZmlmby0+dGFpbCAgKz0gc2Vjb25kaGFsZjsKIAkJZmlmby0+Y291bnQgLT0gc2Vjb25kaGFsZjsKIAl9CiAKIAlpZiAoY291bnQpCi0JCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsICZidWZmZXJbMl0pOworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3BvcnQtPnBvcnQtPmRldiwKKwkJCQkJCV9fZnVuY19fLCBjb3VudCwgJmJ1ZmZlclsyXSk7CiAKIAkvKiBmaWxsIHVwIHRoZSB1cmIgd2l0aCBhbGwgb2Ygb3VyIGRhdGEgYW5kIHN1Ym1pdCBpdCAqLwotCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldiwgCi0JCSAgICAgICB1c2Jfc25kYnVsa3BpcGUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LCBlZGdlX3NlcmlhbC0+YnVsa19vdXRfZW5kcG9pbnQpLAotCQkgICAgICAgYnVmZmVyLCBjb3VudCsyLCBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssIGVkZ2VfcG9ydCk7CisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQl1c2Jfc25kYnVsa3BpcGUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQllZGdlX3NlcmlhbC0+YnVsa19vdXRfZW5kcG9pbnQpLAorCQkJYnVmZmVyLCBjb3VudCsyLAorCQkJZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrLCBlZGdlX3BvcnQpOwogCiAJLyogZGVjcmVtZW50IHRoZSBudW1iZXIgb2YgY3JlZGl0cyB3ZSBoYXZlIGJ5IHRoZSBudW1iZXIgd2UganVzdCBzZW50ICovCiAJZWRnZV9wb3J0LT50eENyZWRpdHMgLT0gY291bnQ7CkBAIC0xMjg2LDE0ICsxMzcwLDE3IEBACiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzKSB7CiAJCS8qIHNvbWV0aGluZyB3ZW50IHdyb25nICovCi0JCWRldl9lcnIoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQsIHN0YXR1cyA9ICVkLCBkYXRhIGxvc3RcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwKKwkJCSIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWQsIGRhdGEgbG9zdFxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyA9IGZhbHNlOwogCiAJCS8qIHJldmVydCB0aGUgY3JlZGl0cyBhcyBzb21ldGhpbmcgYmFkIGhhcHBlbmVkLiAqLwogCQllZGdlX3BvcnQtPnR4Q3JlZGl0cyArPSBjb3VudDsKIAkJZWRnZV9wb3J0LT5pY291bnQudHggLT0gY291bnQ7CiAJfQotCWRiZygiJXMgd3JvdGUgJWQgYnl0ZShzKSBUeENyZWRpdCAlZCwgRmlmbyAlZCIsIF9fZnVuY19fLCBjb3VudCwgZWRnZV9wb3J0LT50eENyZWRpdHMsIGZpZm8tPmNvdW50KTsKKwlkYmcoIiVzIHdyb3RlICVkIGJ5dGUocykgVHhDcmVkaXQgJWQsIEZpZm8gJWQiLAorCQkJX19mdW5jX18sIGNvdW50LCBlZGdlX3BvcnQtPnR4Q3JlZGl0cywgZmlmby0+Y291bnQpOwogCiBleGl0X3NlbmQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CkBAIC0xMzAyLDE0ICsxMzg5LDE0IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZWRnZV93cml0ZV9yb29tCi0gKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIGtub3cgaG93IG1hbnkKLSAqCWJ5dGVzIG9mIGRhdGEgd2UgY2FuIGFjY2VwdCBmb3IgYSBzcGVjaWZpYyBwb3J0LgotICoJSWYgc3VjY2Vzc2Z1bCwgd2UgcmV0dXJuIHRoZSBhbW91bnQgb2Ygcm9vbSB0aGF0IHdlIGhhdmUgZm9yIHRoaXMgcG9ydAotICoJKHRoZSB0eENyZWRpdHMpLCAKLSAqCU90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIGtub3cgaG93CisgKgltYW55IGJ5dGVzIG9mIGRhdGEgd2UgY2FuIGFjY2VwdCBmb3IgYSBzcGVjaWZpYyBwb3J0LiBJZiBzdWNjZXNzZnVsLAorICoJd2UgcmV0dXJuIHRoZSBhbW91bnQgb2Ygcm9vbSB0aGF0IHdlIGhhdmUgZm9yIHRoaXMgcG9ydAkodGhlIHR4Q3JlZGl0cykKKyAqCW90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGVkZ2Vfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgZWRnZV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgcm9vbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTMxNywxOCArMTQwNCwxOCBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gMDsKIAlpZiAoZWRnZV9wb3J0LT5jbG9zZVBlbmRpbmcpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gMDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAlpZiAoIWVkZ2VfcG9ydC0+b3BlbikgewogCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CiAJfQogCi0JLy8gdG90YWwgb2YgYm90aCBidWZmZXJzIGlzIHN0aWxsIHR4Q3JlZGl0CisJLyogdG90YWwgb2YgYm90aCBidWZmZXJzIGlzIHN0aWxsIHR4Q3JlZGl0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOwogCXJvb20gPSBlZGdlX3BvcnQtPnR4Q3JlZGl0cyAtIGVkZ2VfcG9ydC0+dHhmaWZvLmNvdW50OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOwpAQCAtMTM0MCwxNSArMTQyNywxNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGVkZ2VfY2hhcnNfaW5fYnVmZmVyCi0gKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIGtub3cgaG93IG1hbnkKLSAqCWJ5dGVzIG9mIGRhdGEgd2UgY3VycmVudGx5IGhhdmUgb3V0c3RhbmRpbmcgaW4gdGhlIHBvcnQgKGRhdGEgdGhhdCBoYXMKLSAqCWJlZW4gd3JpdHRlbiwgYnV0IGhhc24ndCBtYWRlIGl0IG91dCB0aGUgcG9ydCB5ZXQpCi0gKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIGJlIHdyaXR0ZW4gaW4gdGhlIAotICoJc3lzdGVtLCAKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8ga25vdyBob3cKKyAqCW1hbnkgYnl0ZXMgb2YgZGF0YSB3ZSBjdXJyZW50bHkgaGF2ZSBvdXRzdGFuZGluZyBpbiB0aGUgcG9ydCAoZGF0YSB0aGF0CisgKgloYXMgYmVlbiB3cml0dGVuLCBidXQgaGFzbid0IG1hZGUgaXQgb3V0IHRoZSBwb3J0IHlldCkKKyAqCUlmIHN1Y2Nlc3NmdWwsIHdlIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gYmUgd3JpdHRlbiBpbiB0aGUKKyAqCXN5c3RlbSwKICAqCU90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGVkZ2VfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBlZGdlX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IG51bV9jaGFyczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTM1NiwyMCArMTQ0NCwyMiBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gMDsKIAlpZiAoZWRnZV9wb3J0LT5jbG9zZVBlbmRpbmcpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gMDsKIAogCWlmICghZWRnZV9wb3J0LT5vcGVuKSB7CiAJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7Ci0JbnVtX2NoYXJzID0gZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMgLSBlZGdlX3BvcnQtPnR4Q3JlZGl0cyArIGVkZ2VfcG9ydC0+dHhmaWZvLmNvdW50OworCW51bV9jaGFycyA9IGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzIC0gZWRnZV9wb3J0LT50eENyZWRpdHMgKworCQkJCQkJZWRnZV9wb3J0LT50eGZpZm8uY291bnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CiAJaWYgKG51bV9jaGFycykgewotCQlkYmcoIiVzKHBvcnQgJWQpIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIG51bV9jaGFycyk7CisJCWRiZygiJXMocG9ydCAlZCkgLSByZXR1cm5zICVkIiwgX19mdW5jX18sCisJCQkJCQlwb3J0LT5udW1iZXIsIG51bV9jaGFycyk7CiAJfQogCiAJcmV0dXJuIG51bV9jaGFyczsKQEAgLTEzODEsMTAgKzE0NzEsMTAgQEAKICAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8gc3RvcCB0aGUgZGF0YQogICoJYmVpbmcgcmVhZCBmcm9tIHRoZSBwb3J0LgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZWRnZV90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGVkZ2VfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaW50IHN0YXR1czsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CkBAIC0xMzk3LDI4ICsxNDg3LDIxIEBACiAJCXJldHVybjsKIAl9CiAKLQl0dHkgPSBwb3J0LT50dHk7Ci0JaWYgKCF0dHkpIHsKLQkJZGJnICgiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCiAJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2VuZCB0aGUgc3RvcCBjaGFyYWN0ZXIgKi8KIAlpZiAoSV9JWE9GRih0dHkpKSB7CiAJCXVuc2lnbmVkIGNoYXIgc3RvcF9jaGFyID0gU1RPUF9DSEFSKHR0eSk7Ci0JCXN0YXR1cyA9IGVkZ2Vfd3JpdGUgKHBvcnQsICZzdG9wX2NoYXIsIDEpOwotCQlpZiAoc3RhdHVzIDw9IDApIHsKKwkJc3RhdHVzID0gZWRnZV93cml0ZSh0dHksIHBvcnQsICZzdG9wX2NoYXIsIDEpOworCQlpZiAoc3RhdHVzIDw9IDApCiAJCQlyZXR1cm47Ci0JCX0KIAl9CiAKIAkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHRvZ2dsZSB0aGF0IGxpbmUgKi8KIAlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgewogCQllZGdlX3BvcnQtPnNoYWRvd01DUiAmPSB+TUNSX1JUUzsKLQkJc3RhdHVzID0gc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihlZGdlX3BvcnQsIE1DUiwgZWRnZV9wb3J0LT5zaGFkb3dNQ1IpOwotCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJc3RhdHVzID0gc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihlZGdlX3BvcnQsIE1DUiwKKwkJCQkJCQllZGdlX3BvcnQtPnNoYWRvd01DUik7CisJCWlmIChzdGF0dXMgIT0gMCkKIAkJCXJldHVybjsKLQkJfQogCX0KIAogCXJldHVybjsKQEAgLTE0MjcsMTMgKzE1MTAsMTMgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBlZGdlX3VudGhyb3R0bGUKLSAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8gcmVzdW1lIHRoZSBkYXRhCi0gKgliZWluZyByZWFkIGZyb20gdGhlIHBvcnQgKGNhbGxlZCBhZnRlciBTZXJpYWxUaHJvdHRsZSBpcyBjYWxsZWQpCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIHJlc3VtZSB0aGUKKyAqCWRhdGEgYmVpbmcgcmVhZCBmcm9tIHRoZSBwb3J0IChjYWxsZWQgYWZ0ZXIgU2VyaWFsVGhyb3R0bGUgaXMgY2FsbGVkKQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZWRnZV91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgZWRnZV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBzdGF0dXM7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwpAQCAtMTQ0Niw0MyArMTUyOSwzMSBAQAogCQlyZXR1cm47CiAJfQogCi0JdHR5ID0gcG9ydC0+dHR5OwotCWlmICghdHR5KSB7Ci0JCWRiZyAoIiVzIC0gbm8gdHR5IGF2YWlsYWJsZSIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQogCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNlbmQgdGhlIHN0YXJ0IGNoYXJhY3RlciAqLwogCWlmIChJX0lYT0ZGKHR0eSkpIHsKIAkJdW5zaWduZWQgY2hhciBzdGFydF9jaGFyID0gU1RBUlRfQ0hBUih0dHkpOwotCQlzdGF0dXMgPSBlZGdlX3dyaXRlIChwb3J0LCAmc3RhcnRfY2hhciwgMSk7Ci0JCWlmIChzdGF0dXMgPD0gMCkgeworCQlzdGF0dXMgPSBlZGdlX3dyaXRlKHR0eSwgcG9ydCwgJnN0YXJ0X2NoYXIsIDEpOworCQlpZiAoc3RhdHVzIDw9IDApCiAJCQlyZXR1cm47Ci0JCX0KIAl9Ci0KIAkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHRvZ2dsZSB0aGF0IGxpbmUgKi8KIAlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgewogCQllZGdlX3BvcnQtPnNoYWRvd01DUiB8PSBNQ1JfUlRTOwotCQlzdGF0dXMgPSBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKGVkZ2VfcG9ydCwgTUNSLCBlZGdlX3BvcnQtPnNoYWRvd01DUik7Ci0JCWlmIChzdGF0dXMgIT0gMCkgewotCQkJcmV0dXJuOwotCQl9CisJCXNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIoZWRnZV9wb3J0LCBNQ1IsCisJCQkJCQllZGdlX3BvcnQtPnNoYWRvd01DUik7CiAJfQotCi0JcmV0dXJuOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU2VyaWFsU2V0VGVybWlvcwotICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byBjaGFuZ2UgdGhlIHRlcm1pb3Mgc3RydWN0dXJlCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIGNoYW5nZQorICogdGhlIHRlcm1pb3Mgc3RydWN0dXJlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBlZGdlX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0JLyogRklYTUU6IFRoaXMgZnVuY3Rpb24gYXBwZWFycyB1bnVzZWQgPz8gKi8KIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CiAJdW5zaWduZWQgaW50IGNmbGFnOwogCiAJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CkBAIC0xNTAyLDkgKzE1NzMsNyBAQAogCX0KIAogCS8qIGNoYW5nZSB0aGUgcG9ydCBzZXR0aW5ncyB0byB0aGUgbmV3IG9uZXMgc3BlY2lmaWVkICovCi0JY2hhbmdlX3BvcnRfc2V0dGluZ3MgKGVkZ2VfcG9ydCwgb2xkX3Rlcm1pb3MpOwotCi0JcmV0dXJuOworCWNoYW5nZV9wb3J0X3NldHRpbmdzKHR0eSwgZWRnZV9wb3J0LCBvbGRfdGVybWlvcyk7CiB9CiAKIApAQCAtMTUxNiw5ICsxNTg1LDEwIEBACiAgKiAJICAgIHJlbGVhc2UgdGhlIGJ1cyBhZnRlciB0cmFuc21pdHRpbmcuIFRoaXMgbXVzdCBiZSBkb25lIHdoZW4KICAqIAkgICAgdGhlIHRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGlzIGVtcHR5LCBub3QgYmUgZG9uZSB3aGVuIHRoZQogICogCSAgICB0cmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIGlzIGVtcHR5LiAgVGhpcyBmdW5jdGlvbmFsaXR5Ci0gKiAJICAgIGFsbG93cyBhbiBSUzQ4NSBkcml2ZXIgdG8gYmUgd3JpdHRlbiBpbiB1c2VyIHNwYWNlLiAKKyAqIAkgICAgYWxsb3dzIGFuIFJTNDg1IGRyaXZlciB0byBiZSB3cml0dGVuIGluIHVzZXIgc3BhY2UuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGdldF9sc3JfaW5mbyhzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2V0X2xzcl9pbmZvKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsCisJCQkJCQl1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTUzNiwyNSArMTYwNiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9udW1iZXJfYnl0ZXNfYXZhaWwoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCitzdGF0aWMgaW50IGVkZ2VfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKLQl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT50dHk7Ci0KLQlpZiAoIXR0eSkKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQotCXJlc3VsdCA9IHR0eS0+cmVhZF9jbnQ7Ci0KLQlkYmcoIiVzKCVkKSA9ICVkIiwgX19mdW5jX18sICBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciwgcmVzdWx0KTsKLQlpZiAoY29weV90b191c2VyKHZhbHVlLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCS8vcmV0dXJuIDA7Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLQotc3RhdGljIGludCBlZGdlX3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoteworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgaW50IG1jcjsKIApAQCAtMTU4Miw4ICsxNjM3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlZGdlX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBlZGdlX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAJdW5zaWduZWQgaW50IG1zcjsKQEAgLTE2MDYsNyArMTY2Miw4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQorc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwKKwkJCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnJldGluZm8pCiB7CiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOwogCkBAIC0xNjI0LDkgKzE2ODEsNiBAQAogCXRtcC5iYXVkX2Jhc2UJCT0gOTYwMDsKIAl0bXAuY2xvc2VfZGVsYXkJCT0gNSpIWjsKIAl0bXAuY2xvc2luZ193YWl0CT0gMzAqSFo7Ci0vLwl0bXAuY3VzdG9tX2Rpdmlzb3IJPSBzdGF0ZS0+Y3VzdG9tX2Rpdmlzb3I7Ci0vLwl0bXAuaHViNgkJPSBzdGF0ZS0+aHViNjsKLS8vCXRtcC5pb190eXBlCQk9IHN0YXRlLT5pb190eXBlOwogCiAJaWYgKGNvcHlfdG9fdXNlcihyZXRpbmZvLCAmdG1wLCBzaXplb2YoKnJldGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xNjM5LDggKzE2OTMsMTAgQEAKICAqIFNlcmlhbElvY3RsCiAgKgl0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYW55IGlvY3RsIGNhbGxzIHRvIHRoZSBkcml2ZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZWRnZV9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBlZGdlX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCBhc3luY19pY291bnQgY25vdzsKQEAgLTE2NTAsNzEgKzE3MDYsNjEgQEAKIAlkYmcoIiVzIC0gcG9ydCAlZCwgY21kID0gMHgleCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCQkvLyByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZQotCQljYXNlIFRJT0NJTlE6Ci0JCQlkYmcoIiVzICglZCkgVElPQ0lOUSIsIF9fZnVuY19fLCAgcG9ydC0+bnVtYmVyKTsKLQkJCXJldHVybiBnZXRfbnVtYmVyX2J5dGVzX2F2YWlsKGVkZ2VfcG9ydCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgYXJnKTsKLQkJCWJyZWFrOworCWNhc2UgVElPQ1NFUkdFVExTUjoKKwkJZGJnKCIlcyAoJWQpIFRJT0NTRVJHRVRMU1IiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBnZXRfbHNyX2luZm8oZWRnZV9wb3J0LCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBhcmcpOwogCi0JCWNhc2UgVElPQ1NFUkdFVExTUjoKLQkJCWRiZygiJXMgKCVkKSBUSU9DU0VSR0VUTFNSIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOwotCQkJcmV0dXJuIGdldF9sc3JfaW5mbyhlZGdlX3BvcnQsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGFyZyk7Ci0JCQlyZXR1cm4gMDsKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlkYmcoIiVzICglZCkgVElPQ0dTRVJJQUwiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBnZXRfc2VyaWFsX2luZm8oZWRnZV9wb3J0LCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7CiAKLQkJY2FzZSBUSU9DR1NFUklBTDoKLQkJCWRiZygiJXMgKCVkKSBUSU9DR1NFUklBTCIsIF9fZnVuY19fLCAgcG9ydC0+bnVtYmVyKTsKLQkJCXJldHVybiBnZXRfc2VyaWFsX2luZm8oZWRnZV9wb3J0LCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7Ci0KLQkJY2FzZSBUSU9DU1NFUklBTDoKLQkJCWRiZygiJXMgKCVkKSBUSU9DU1NFUklBTCIsIF9fZnVuY19fLCAgcG9ydC0+bnVtYmVyKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVElPQ01JV0FJVDoKLQkJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOwotCQkJY3ByZXYgPSBlZGdlX3BvcnQtPmljb3VudDsKLQkJCXdoaWxlICgxKSB7Ci0JCQkJcHJlcGFyZV90b193YWl0KCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0LCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCQlzY2hlZHVsZSgpOwotCQkJCWZpbmlzaF93YWl0KCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0LCAmd2FpdCk7Ci0JCQkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLwotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJCQljbm93ID0gZWRnZV9wb3J0LT5pY291bnQ7Ci0JCQkJaWYgKGNub3cucm5nID09IGNwcmV2LnJuZyAmJiBjbm93LmRzciA9PSBjcHJldi5kc3IgJiYKLQkJCQkgICAgY25vdy5kY2QgPT0gY3ByZXYuZGNkICYmIGNub3cuY3RzID09IGNwcmV2LmN0cykKLQkJCQkJcmV0dXJuIC1FSU87IC8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLwotCQkJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8Ci0JCQkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHwKLQkJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSB8fAotCQkJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNub3cuY3RzICE9IGNwcmV2LmN0cykpICkgewotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQkJY3ByZXYgPSBjbm93OwotCQkJfQotCQkJLyogTk9UUkVBQ0hFRCAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBUSU9DR0lDT1VOVDoKKwljYXNlIFRJT0NNSVdBSVQ6CisJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOworCQljcHJldiA9IGVkZ2VfcG9ydC0+aWNvdW50OworCQl3aGlsZSAoMSkgeworCQkJcHJlcGFyZV90b193YWl0KCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0LAorCQkJCQkJJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlzY2hlZHVsZSgpOworCQkJZmluaXNoX3dhaXQoJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQsICZ3YWl0KTsKKwkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQkJY25vdyA9IGVkZ2VfcG9ydC0+aWNvdW50OwotCQkJbWVtc2V0KCZpY291bnQsIDAsIHNpemVvZihpY291bnQpKTsKLQkJCWljb3VudC5jdHMgPSBjbm93LmN0czsKLQkJCWljb3VudC5kc3IgPSBjbm93LmRzcjsKLQkJCWljb3VudC5ybmcgPSBjbm93LnJuZzsKLQkJCWljb3VudC5kY2QgPSBjbm93LmRjZDsKLQkJCWljb3VudC5yeCA9IGNub3cucng7Ci0JCQlpY291bnQudHggPSBjbm93LnR4OwotCQkJaWNvdW50LmZyYW1lID0gY25vdy5mcmFtZTsKLQkJCWljb3VudC5vdmVycnVuID0gY25vdy5vdmVycnVuOwotCQkJaWNvdW50LnBhcml0eSA9IGNub3cucGFyaXR5OwotCQkJaWNvdW50LmJyayA9IGNub3cuYnJrOwotCQkJaWNvdW50LmJ1Zl9vdmVycnVuID0gY25vdy5idWZfb3ZlcnJ1bjsKKwkJCWlmIChjbm93LnJuZyA9PSBjcHJldi5ybmcgJiYgY25vdy5kc3IgPT0gY3ByZXYuZHNyICYmCisJCQkgICAgY25vdy5kY2QgPT0gY3ByZXYuZGNkICYmIGNub3cuY3RzID09IGNwcmV2LmN0cykKKwkJCQlyZXR1cm4gLUVJTzsgLyogbm8gY2hhbmdlID0+IGVycm9yICovCisJCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAorCQkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHwKKwkJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJY3ByZXYgPSBjbm93OworCQl9CisJCS8qIE5PVFJFQUNIRUQgKi8KKwkJYnJlYWs7CiAKLQkJCWRiZygiJXMgKCVkKSBUSU9DR0lDT1VOVCBSWD0lZCwgVFg9JWQiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlciwgaWNvdW50LnJ4LCBpY291bnQudHggKTsKLQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaWNvdW50LCBzaXplb2YoaWNvdW50KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKKwljYXNlIFRJT0NHSUNPVU5UOgorCQljbm93ID0gZWRnZV9wb3J0LT5pY291bnQ7CisJCW1lbXNldCgmaWNvdW50LCAwLCBzaXplb2YoaWNvdW50KSk7CisJCWljb3VudC5jdHMgPSBjbm93LmN0czsKKwkJaWNvdW50LmRzciA9IGNub3cuZHNyOworCQlpY291bnQucm5nID0gY25vdy5ybmc7CisJCWljb3VudC5kY2QgPSBjbm93LmRjZDsKKwkJaWNvdW50LnJ4ID0gY25vdy5yeDsKKwkJaWNvdW50LnR4ID0gY25vdy50eDsKKwkJaWNvdW50LmZyYW1lID0gY25vdy5mcmFtZTsKKwkJaWNvdW50Lm92ZXJydW4gPSBjbm93Lm92ZXJydW47CisJCWljb3VudC5wYXJpdHkgPSBjbm93LnBhcml0eTsKKwkJaWNvdW50LmJyayA9IGNub3cuYnJrOworCQlpY291bnQuYnVmX292ZXJydW4gPSBjbm93LmJ1Zl9vdmVycnVuOworCisJCWRiZygiJXMgKCVkKSBUSU9DR0lDT1VOVCBSWD0lZCwgVFg9JWQiLAorCQkJCV9fZnVuY19fLCAgcG9ydC0+bnVtYmVyLCBpY291bnQucngsIGljb3VudC50eCk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaWNvdW50LCBzaXplb2YoaWNvdW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIApAQCAtMTcyMyw4ICsxNzY5LDkgQEAKICAqIFNlcmlhbEJyZWFrCiAgKgl0aGlzIGZ1bmN0aW9uIHNlbmRzIGEgYnJlYWsgdG8gdGhlIHBvcnQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIGVkZ2VfYnJlYWsgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyB2b2lkIGVkZ2VfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CiAJaW50IHN0YXR1czsKQEAgLTE3MzYsOSArMTc4Myw5IEBACiAJCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSB0cnVlOwogCiAJCWRiZygiJXMgLSBTZW5kaW5nIElPU1BfQ01EX0NIQVNFX1BPUlQiLCBfX2Z1bmNfXyk7Ci0JCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX0NIQVNFX1BPUlQsIDApOworCQlzdGF0dXMgPSBzZW5kX2lvc3BfZXh0X2NtZChlZGdlX3BvcnQsIElPU1BfQ01EX0NIQVNFX1BPUlQsIDApOwogCQlpZiAoc3RhdHVzID09IDApIHsKLQkJCS8vIGJsb2NrIHVudGlsIGNoYXNlIGZpbmlzaGVkCisJCQkvKiBibG9jayB1bnRpbCBjaGFzZSBmaW5pc2hlZCAqLwogCQkJYmxvY2tfdW50aWxfY2hhc2VfcmVzcG9uc2UoZWRnZV9wb3J0KTsKIAkJfSBlbHNlIHsKIAkJCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBmYWxzZTsKQEAgLTE3NTAsMTQgKzE3OTcsMTYgQEAKIAkgICAgIChlZGdlX3NlcmlhbC0+ZXBpY19kZXNjcmlwdG9yLlN1cHBvcnRzLklPU1BTZXRDbHJCcmVhaykpKSB7CiAJCWlmIChicmVha19zdGF0ZSA9PSAtMSkgewogCQkJZGJnKCIlcyAtIFNlbmRpbmcgSU9TUF9DTURfU0VUX0JSRUFLIiwgX19mdW5jX18pOwotCQkJc3RhdHVzID0gc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfU0VUX0JSRUFLLCAwKTsKKwkJCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kKGVkZ2VfcG9ydCwKKwkJCQkJCUlPU1BfQ01EX1NFVF9CUkVBSywgMCk7CiAJCX0gZWxzZSB7CiAJCQlkYmcoIiVzIC0gU2VuZGluZyBJT1NQX0NNRF9DTEVBUl9CUkVBSyIsIF9fZnVuY19fKTsKLQkJCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX0NMRUFSX0JSRUFLLCAwKTsKKwkJCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kKGVkZ2VfcG9ydCwKKwkJCQkJCUlPU1BfQ01EX0NMRUFSX0JSRUFLLCAwKTsKIAkJfQotCQlpZiAoc3RhdHVzKSB7Ci0JCQlkYmcoIiVzIC0gZXJyb3Igc2VuZGluZyBicmVhayBzZXQvY2xlYXIgY29tbWFuZC4iLCBfX2Z1bmNfXyk7Ci0JCX0KKwkJaWYgKHN0YXR1cykKKwkJCWRiZygiJXMgLSBlcnJvciBzZW5kaW5nIGJyZWFrIHNldC9jbGVhciBjb21tYW5kLiIsCisJCQkJX19mdW5jX18pOwogCX0KIAogCXJldHVybjsKQEAgLTE3NjgsNyArMTgxNyw4IEBACiAgKiBwcm9jZXNzX3JjdmRfZGF0YQogICoJdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBkYXRhIHJlY2VpdmVkIG9uIHRoZSBidWxrIGluIHBpcGUuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3JjdmRfZGF0YSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIHVuc2lnbmVkIGNoYXIgKiBidWZmZXIsIF9fdTE2IGJ1ZmZlckxlbmd0aCkKK3N0YXRpYyB2b2lkIHByb2Nlc3NfcmN2ZF9kYXRhKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLAorCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgX191MTYgYnVmZmVyTGVuZ3RoKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydDsKQEAgLTE3ODksMTA1ICsxODM5LDEyMyBAQAogCQlsYXN0QnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoOwogCiAJCXN3aXRjaCAoZWRnZV9zZXJpYWwtPnJ4U3RhdGUpIHsKLQkJCWNhc2UgRVhQRUNUX0hEUjE6Ci0JCQkJZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSA9ICpidWZmZXI7Ci0JCQkJKytidWZmZXI7Ci0JCQkJLS1idWZmZXJMZW5ndGg7CisJCWNhc2UgRVhQRUNUX0hEUjE6CisJCQllZGdlX3NlcmlhbC0+cnhIZWFkZXIxID0gKmJ1ZmZlcjsKKwkJCSsrYnVmZmVyOworCQkJLS1idWZmZXJMZW5ndGg7CiAKLQkJCQlpZiAoYnVmZmVyTGVuZ3RoID09IDApIHsKLQkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCS8qIG90aGVyd2lzZSwgZHJvcCBvbiB0aHJvdWdoICovCi0KLQkJCWNhc2UgRVhQRUNUX0hEUjI6Ci0JCQkJZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMiA9ICpidWZmZXI7Ci0JCQkJKytidWZmZXI7Ci0JCQkJLS1idWZmZXJMZW5ndGg7Ci0KLQkJCQlkYmcoIiVzIC0gSGRyMT0lMDJYIEhkcjI9JTAyWCIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhIZWFkZXIxLCBlZGdlX3NlcmlhbC0+cnhIZWFkZXIyKTsKLQotCQkJCS8vIFByb2Nlc3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBoZWFkZXIgaXMKLQkJCQkvLyBkYXRhIG9yIHN0YXR1cwotCi0JCQkJaWYgKElTX0NNRF9TVEFUX0hEUihlZGdlX3NlcmlhbC0+cnhIZWFkZXIxKSkgewotCQkJCQkvLyBEZWNvZGUgdGhpcyBzdGF0dXMgaGVhZGVyIGFuZCBnb3RvIEVYUEVDVF9IRFIxIChpZiB3ZQotCQkJCQkvLyBjYW4gcHJvY2VzcyB0aGUgc3RhdHVzIHdpdGggb25seSAyIGJ5dGVzKSwgb3IgZ290bwotCQkJCQkvLyBFWFBFQ1RfSERSMyB0byBnZXQgdGhlIHRoaXJkIGJ5dGUuCi0KLQkJCQkJZWRnZV9zZXJpYWwtPnJ4UG9ydCAgICAgICA9IElPU1BfR0VUX0hEUl9QT1JUKGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjEpOwotCQkJCQllZGdlX3NlcmlhbC0+cnhTdGF0dXNDb2RlID0gSU9TUF9HRVRfU1RBVFVTX0NPREUoZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSk7Ci0KLQkJCQkJaWYgKCFJT1NQX1NUQVRVU19JU18yQllURShlZGdlX3NlcmlhbC0+cnhTdGF0dXNDb2RlKSkgewotCQkJCQkJLy8gVGhpcyBzdGF0dXMgbmVlZHMgYWRkaXRpb25hbCBieXRlcy4gU2F2ZSB3aGF0IHdlIGhhdmUKLQkJCQkJCS8vIGFuZCB0aGVuIHdhaXQgZm9yIG1vcmUgZGF0YS4KLQkJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXR1c1BhcmFtID0gZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMjsKLQotCQkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMzsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQkJLy8gV2UgaGF2ZSBhbGwgdGhlIGhlYWRlciBieXRlcywgcHJvY2VzcyB0aGUgc3RhdHVzIG5vdwotCQkJCQlwcm9jZXNzX3JjdmRfc3RhdHVzIChlZGdlX3NlcmlhbCwgZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMiwgMCk7Ci0JCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0hEUjE7Ci0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWVkZ2Vfc2VyaWFsLT5yeFBvcnQgPSBJT1NQX0dFVF9IRFJfUE9SVChlZGdlX3NlcmlhbC0+cnhIZWFkZXIxKTsKLQkJCQkJZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmcgPSBJT1NQX0dFVF9IRFJfREFUQV9MRU4oZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSwgZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMik7Ci0KLQkJCQkJZGJnKCIlcyAtIERhdGEgZm9yIFBvcnQgJXUgTGVuICV1IiwgX19mdW5jX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQsIGVkZ2Vfc2VyaWFsLT5yeEJ5dGVzUmVtYWluaW5nKTsKLQotCQkJCQkvL0FTU0VSVCggRGV2RXh0LT5SeFBvcnQgPCBEZXZFeHQtPk51bVBvcnRzICk7Ci0JCQkJCS8vQVNTRVJUKCBEZXZFeHQtPlJ4Qnl0ZXNSZW1haW5pbmcgPCBJT1NQX01BWF9EQVRBX0xFTkdUSCApOwotCi0JCQkJCWlmIChidWZmZXJMZW5ndGggPT0gMCApIHsKLQkJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0RBVEE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQkvLyBFbHNlLCBkcm9wIHRocm91Z2gKLQkJCQl9Ci0KLQkJCWNhc2UgRVhQRUNUX0RBVEE6CS8vIEV4cGVjdCBkYXRhCi0KLQkJCQlpZiAoYnVmZmVyTGVuZ3RoIDwgZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmcpIHsKLQkJCQkJcnhMZW4gPSBidWZmZXJMZW5ndGg7Ci0JCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0RBVEE7CS8vIEV4cGVjdCBkYXRhIHRvIHN0YXJ0IG5leHQgYnVmZmVyCi0JCQkJfSBlbHNlIHsKLQkJCQkJLy8gQnVmTGVuID49IFJ4Qnl0ZXNSZW1haW5pbmcKLQkJCQkJcnhMZW4gPSBlZGdlX3NlcmlhbC0+cnhCeXRlc1JlbWFpbmluZzsKLQkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMTsJLy8gU3RhcnQgYW5vdGhlciBoZWFkZXIgbmV4dCB0aW1lCi0JCQkJfQotCi0JCQkJYnVmZmVyTGVuZ3RoIC09IHJ4TGVuOwotCQkJCWVkZ2Vfc2VyaWFsLT5yeEJ5dGVzUmVtYWluaW5nIC09IHJ4TGVuOwotCi0JCQkJLyogc3BpdCB0aGlzIGRhdGEgYmFjayBpbnRvIHRoZSB0dHkgZHJpdmVyIGlmIHRoaXMgcG9ydCBpcyBvcGVuICovCi0JCQkJaWYgKHJ4TGVuKSB7Ci0JCQkJCXBvcnQgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5wb3J0W2VkZ2Vfc2VyaWFsLT5yeFBvcnRdOwotCQkJCQllZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JCQkJCWlmIChlZGdlX3BvcnQtPm9wZW4pIHsKLQkJCQkJCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OwotCQkJCQkJaWYgKHR0eSkgewotCQkJCQkJCWRiZygiJXMgLSBTZW5kaW5nICVkIGJ5dGVzIHRvIFRUWSBmb3IgcG9ydCAlZCIsIF9fZnVuY19fLCByeExlbiwgZWRnZV9zZXJpYWwtPnJ4UG9ydCk7Ci0JCQkJCQkJZWRnZV90dHlfcmVjdigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIHR0eSwgYnVmZmVyLCByeExlbik7Ci0JCQkJCQl9Ci0JCQkJCQllZGdlX3BvcnQtPmljb3VudC5yeCArPSByeExlbjsKLQkJCQkJfQotCQkJCQlidWZmZXIgKz0gcnhMZW47Ci0JCQkJfQotCisJCQlpZiAoYnVmZmVyTGVuZ3RoID09IDApIHsKKwkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9IRFIyOwogCQkJCWJyZWFrOworCQkJfQorCQkJLyogb3RoZXJ3aXNlLCBkcm9wIG9uIHRocm91Z2ggKi8KKwkJY2FzZSBFWFBFQ1RfSERSMjoKKwkJCWVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjIgPSAqYnVmZmVyOworCQkJKytidWZmZXI7CisJCQktLWJ1ZmZlckxlbmd0aDsKIAotCQkJY2FzZSBFWFBFQ1RfSERSMzoJCQkvLyBFeHBlY3QgM3JkIGJ5dGUgb2Ygc3RhdHVzIGhlYWRlcgotCQkJCWVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjMgPSAqYnVmZmVyOwotCQkJCSsrYnVmZmVyOwotCQkJCS0tYnVmZmVyTGVuZ3RoOworCQkJZGJnKCIlcyAtIEhkcjE9JTAyWCBIZHIyPSUwMlgiLCBfX2Z1bmNfXywKKwkJCSAgICBlZGdlX3NlcmlhbC0+cnhIZWFkZXIxLCBlZGdlX3NlcmlhbC0+cnhIZWFkZXIyKTsKKwkJCS8qIFByb2Nlc3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBoZWFkZXIgaXMKKwkJCSAqIGRhdGEgb3Igc3RhdHVzICovCiAKLQkJCQkvLyBXZSBoYXZlIGFsbCB0aGUgaGVhZGVyIGJ5dGVzLCBwcm9jZXNzIHRoZSBzdGF0dXMgbm93Ci0JCQkJcHJvY2Vzc19yY3ZkX3N0YXR1cyAoZWRnZV9zZXJpYWwsIGVkZ2Vfc2VyaWFsLT5yeFN0YXR1c1BhcmFtLCBlZGdlX3NlcmlhbC0+cnhIZWFkZXIzKTsKKwkJCWlmIChJU19DTURfU1RBVF9IRFIoZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSkpIHsKKwkJCQkvKiBEZWNvZGUgdGhpcyBzdGF0dXMgaGVhZGVyIGFuZCBnbyB0bworCQkJCSAqIEVYUEVDVF9IRFIxIChpZiB3ZSBjYW4gcHJvY2VzcyB0aGUgc3RhdHVzCisJCQkJICogd2l0aCBvbmx5IDIgYnl0ZXMpLCBvciBnbyB0byBFWFBFQ1RfSERSMyB0bworCQkJCSAqIGdldCB0aGUgdGhpcmQgYnl0ZS4gKi8KKwkJCQllZGdlX3NlcmlhbC0+cnhQb3J0ID0KKwkJCQkgICAgSU9TUF9HRVRfSERSX1BPUlQoZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSk7CisJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdHVzQ29kZSA9CisJCQkJICAgIElPU1BfR0VUX1NUQVRVU19DT0RFKAorCQkJCQkJZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSk7CisKKwkJCQlpZiAoIUlPU1BfU1RBVFVTX0lTXzJCWVRFKAorCQkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdHVzQ29kZSkpIHsKKwkJCQkJLyogVGhpcyBzdGF0dXMgbmVlZHMgYWRkaXRpb25hbCBieXRlcy4KKwkJCQkJICogU2F2ZSB3aGF0IHdlIGhhdmUgYW5kIHRoZW4gd2FpdCBmb3IKKwkJCQkJICogbW9yZSBkYXRhLgorCQkJCQkgKi8KKwkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdHVzUGFyYW0KKwkJCQkJCT0gZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMjsKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIFdlIGhhdmUgYWxsIHRoZSBoZWFkZXIgYnl0ZXMsIHByb2Nlc3MgdGhlCisJCQkJICAgc3RhdHVzIG5vdyAqLworCQkJCXByb2Nlc3NfcmN2ZF9zdGF0dXMoZWRnZV9zZXJpYWwsCisJCQkJCQllZGdlX3NlcmlhbC0+cnhIZWFkZXIyLCAwKTsKIAkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9IRFIxOwogCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQllZGdlX3NlcmlhbC0+cnhQb3J0ID0KKwkJCQkgICAgSU9TUF9HRVRfSERSX1BPUlQoZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSk7CisJCQkJZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmcgPQorCQkJCSAgICBJT1NQX0dFVF9IRFJfREFUQV9MRU4oCisJCQkJCQllZGdlX3NlcmlhbC0+cnhIZWFkZXIxLAorCQkJCQkJZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMik7CisJCQkJZGJnKCIlcyAtIERhdGEgZm9yIFBvcnQgJXUgTGVuICV1IiwKKwkJCQkJCV9fZnVuY19fLAorCQkJCQkJZWRnZV9zZXJpYWwtPnJ4UG9ydCwKKwkJCQkJCWVkZ2Vfc2VyaWFsLT5yeEJ5dGVzUmVtYWluaW5nKTsKIAorCQkJCS8qIEFTU0VSVChEZXZFeHQtPlJ4UG9ydCA8IERldkV4dC0+TnVtUG9ydHMpOworCQkJCSAqIEFTU0VSVChEZXZFeHQtPlJ4Qnl0ZXNSZW1haW5pbmcgPAorCQkJCSAqCQlJT1NQX01BWF9EQVRBX0xFTkdUSCk7CisJCQkJICovCisKKwkJCQlpZiAoYnVmZmVyTGVuZ3RoID09IDApIHsKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfREFUQTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIEVsc2UsIGRyb3AgdGhyb3VnaCAqLworCQkJfQorCQljYXNlIEVYUEVDVF9EQVRBOiAvKiBFeHBlY3QgZGF0YSAqLworCQkJaWYgKGJ1ZmZlckxlbmd0aCA8IGVkZ2Vfc2VyaWFsLT5yeEJ5dGVzUmVtYWluaW5nKSB7CisJCQkJcnhMZW4gPSBidWZmZXJMZW5ndGg7CisJCQkJLyogRXhwZWN0IGRhdGEgdG8gc3RhcnQgbmV4dCBidWZmZXIgKi8KKwkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9EQVRBOworCQkJfSBlbHNlIHsKKwkJCQkvKiBCdWZMZW4gPj0gUnhCeXRlc1JlbWFpbmluZyAqLworCQkJCXJ4TGVuID0gZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmc7CisJCQkJLyogU3RhcnQgYW5vdGhlciBoZWFkZXIgbmV4dCB0aW1lICovCisJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMTsKKwkJCX0KKworCQkJYnVmZmVyTGVuZ3RoIC09IHJ4TGVuOworCQkJZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmcgLT0gcnhMZW47CisKKwkJCS8qIHNwaXQgdGhpcyBkYXRhIGJhY2sgaW50byB0aGUgdHR5IGRyaXZlciBpZiB0aGlzCisJCQkgICBwb3J0IGlzIG9wZW4gKi8KKwkJCWlmIChyeExlbikgeworCQkJCXBvcnQgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5wb3J0WworCQkJCQkJCWVkZ2Vfc2VyaWFsLT5yeFBvcnRdOworCQkJCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJCQlpZiAoZWRnZV9wb3J0LT5vcGVuKSB7CisJCQkJCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+cG9ydC50dHk7CisJCQkJCWlmICh0dHkpIHsKKwkJCQkJCWRiZygiJXMgLSBTZW5kaW5nICVkIGJ5dGVzIHRvIFRUWSBmb3IgcG9ydCAlZCIsCisJCQkJCQkJX19mdW5jX18sIHJ4TGVuLCBlZGdlX3NlcmlhbC0+cnhQb3J0KTsKKwkJCQkJCWVkZ2VfdHR5X3JlY3YoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCB0dHksIGJ1ZmZlciwgcnhMZW4pOworCQkJCQl9CisJCQkJCWVkZ2VfcG9ydC0+aWNvdW50LnJ4ICs9IHJ4TGVuOworCQkJCX0KKwkJCQlidWZmZXIgKz0gcnhMZW47CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEVYUEVDVF9IRFIzOgkvKiBFeHBlY3QgM3JkIGJ5dGUgb2Ygc3RhdHVzIGhlYWRlciAqLworCQkJZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMyA9ICpidWZmZXI7CisJCQkrK2J1ZmZlcjsKKwkJCS0tYnVmZmVyTGVuZ3RoOworCisJCQkvKiBXZSBoYXZlIGFsbCB0aGUgaGVhZGVyIGJ5dGVzLCBwcm9jZXNzIHRoZQorCQkJICAgc3RhdHVzIG5vdyAqLworCQkJcHJvY2Vzc19yY3ZkX3N0YXR1cyhlZGdlX3NlcmlhbCwKKwkJCQllZGdlX3NlcmlhbC0+cnhTdGF0dXNQYXJhbSwKKwkJCQllZGdlX3NlcmlhbC0+cnhIZWFkZXIzKTsKKwkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0hEUjE7CisJCQlicmVhazsKIAkJfQogCX0KIH0KQEAgLTE4OTUsOSArMTk2MywxMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHByb2Nlc3NfcmN2ZF9zdGF0dXMKLSAqCXRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYW55IHN0YXR1cyBtZXNzYWdlcyByZWNlaXZlZCBvbiB0aGUgYnVsayBpbiBwaXBlLgorICoJdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBhbnkgc3RhdHVzIG1lc3NhZ2VzIHJlY2VpdmVkIG9uIHRoZQorICoJYnVsayBpbiBwaXBlLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgcHJvY2Vzc19yY3ZkX3N0YXR1cyAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIF9fdTggYnl0ZTIsIF9fdTggYnl0ZTMpCitzdGF0aWMgdm9pZCBwcm9jZXNzX3JjdmRfc3RhdHVzKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLAorCQkJCQkJX191OCBieXRlMiwgX191OCBieXRlMykKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CkBAIC0xOTA3LDcgKzE5NzcsOSBAQAogCXBvcnQgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5wb3J0W2VkZ2Vfc2VyaWFsLT5yeFBvcnRdOwogCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpZiAoZWRnZV9wb3J0ID09IE5VTEwpIHsKLQkJZGV2X2VycigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGVkZ2VfcG9ydCA9PSBOVUxMIGZvciBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCk7CisJCWRldl9lcnIoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LAorCQkJIiVzIC0gZWRnZV9wb3J0ID09IE5VTEwgZm9yIHBvcnQgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTkxNSwyMiArMTk4NywyOCBAQAogCiAJaWYgKGNvZGUgPT0gSU9TUF9FWFRfU1RBVFVTKSB7CiAJCXN3aXRjaCAoYnl0ZTIpIHsKLQkJCWNhc2UgSU9TUF9FWFRfU1RBVFVTX0NIQVNFX1JTUDoKLQkJCQkvLyB3ZSB3YW50IHRvIGRvIEVYVCBzdGF0dXMgcmVnYXJkbGVzcyBvZiBwb3J0IG9wZW4vY2xvc2VkIAotCQkJCWRiZygiJXMgLSBQb3J0ICV1IEVYVCBDSEFTRV9SU1AgRGF0YSA9ICUwMngiLCBfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTMgKTsKLQkJCQkvLyBDdXJyZW50bHksIHRoZSBvbmx5IEVYVF9TVEFUVVMgaXMgQ2hhc2UsIHNvIHByb2Nlc3MgaGVyZSBpbnN0ZWFkIG9mIG9uZSBtb3JlIGNhbGwKLQkJCQkvLyB0byBvbmUgbW9yZSBzdWJyb3V0aW5lLiBJZi93aGVuIG1vcmUgRVhUX1NUQVRVUywgdGhlcmUnbGwgYmUgbW9yZSB3b3JrIHRvIGRvLgotCQkJCS8vIEFsc28sIHdlIGN1cnJlbnRseSBjbGVhciBmbGFnIGFuZCBjbG9zZSB0aGUgcG9ydCByZWdhcmRsZXNzIG9mIGNvbnRlbnQgb2YgYWJvdmUncyBCeXRlMy4KLQkJCQkvLyBXZSBjb3VsZCBjaG9vc2UgdG8gZG8gc29tZXRoaW5nIGVsc2Ugd2hlbiBCeXRlMyBzYXlzIFRpbWVvdXQgb24gQ2hhc2UgZnJvbSBFZGdlcG9ydCwKLQkJCQkvLyBsaWtlIHdhaXQgbG9uZ2VyIGluIGJsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlLCBidXQgZm9yIG5vdyB3ZSBkb24ndC4gCi0JCQkJZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IGZhbHNlOwotCQkJCXdha2VfdXAgKCZlZGdlX3BvcnQtPndhaXRfY2hhc2UpOwotCQkJCXJldHVybjsKKwkJY2FzZSBJT1NQX0VYVF9TVEFUVVNfQ0hBU0VfUlNQOgorCQkJLyogd2Ugd2FudCB0byBkbyBFWFQgc3RhdHVzIHJlZ2FyZGxlc3Mgb2YgcG9ydAorCQkJICogb3Blbi9jbG9zZWQgKi8KKwkJCWRiZygiJXMgLSBQb3J0ICV1IEVYVCBDSEFTRV9SU1AgRGF0YSA9ICUwMngiLAorCQkJCQlfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTMpOworCQkJLyogQ3VycmVudGx5LCB0aGUgb25seSBFWFRfU1RBVFVTIGlzIENoYXNlLCBzbyBwcm9jZXNzCisJCQkgKiBoZXJlIGluc3RlYWQgb2Ygb25lIG1vcmUgY2FsbCB0byBvbmUgbW9yZSBzdWJyb3V0aW5lCisJCQkgKiBJZi93aGVuIG1vcmUgRVhUX1NUQVRVUywgdGhlcmUnbGwgYmUgbW9yZSB3b3JrIHRvIGRvCisJCQkgKiBBbHNvLCB3ZSBjdXJyZW50bHkgY2xlYXIgZmxhZyBhbmQgY2xvc2UgdGhlIHBvcnQKKwkJCSAqIHJlZ2FyZGxlc3Mgb2YgY29udGVudCBvZiBhYm92ZSdzIEJ5dGUzLgorCQkJICogV2UgY291bGQgY2hvb3NlIHRvIGRvIHNvbWV0aGluZyBlbHNlIHdoZW4gQnl0ZTMgc2F5cworCQkJICogVGltZW91dCBvbiBDaGFzZSBmcm9tIEVkZ2Vwb3J0LCBsaWtlIHdhaXQgbG9uZ2VyIGluCisJCQkgKiBibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZSwgYnV0IGZvciBub3cgd2UgZG9uJ3QuCisJCQkgKi8KKwkJCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBmYWxzZTsKKwkJCXdha2VfdXAoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSk7CisJCQlyZXR1cm47CiAKLQkJCWNhc2UgSU9TUF9FWFRfU1RBVFVTX1JYX0NIRUNLX1JTUDoKLQkJCQlkYmcoIiVzID09PT09PT09PT0gUG9ydCAldSBDSEVDS19SU1AgU2VxdWVuY2UgPSAlMDJ4ID09PT09PT09PT09PT1cbiIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMyApOwotCQkJCS8vUG9ydC0+UnhDaGVja1JzcCA9IHRydWU7Ci0JCQkJcmV0dXJuOworCQljYXNlIElPU1BfRVhUX1NUQVRVU19SWF9DSEVDS19SU1A6CisJCQlkYmcoIiVzID09PT09PT09PT0gUG9ydCAldSBDSEVDS19SU1AgU2VxdWVuY2UgPSAlMDJ4ID09PT09PT09PT09PT1cbiIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMyk7CisJCQkvKiBQb3J0LT5SeENoZWNrUnNwID0gdHJ1ZTsgKi8KKwkJCXJldHVybjsKIAkJfQogCX0KIApAQCAtMTkzOCwxMSArMjAxNiwxNCBAQAogCQllZGdlX3BvcnQtPnR4Q3JlZGl0cyA9IEdFVF9UWF9CVUZGRVJfU0laRShieXRlMyk7CiAJCWVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzID0gZWRnZV9wb3J0LT50eENyZWRpdHM7CiAJCWRiZygiJXMgLSBQb3J0ICV1IE9wZW4gUmVzcG9uc2UgSW5pdGFsIE1TUiA9ICUwMnggVHhCdWZmZXJTaXplID0gJWQiLCBfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzKTsKLQkJaGFuZGxlX25ld19tc3IgKGVkZ2VfcG9ydCwgYnl0ZTIpOworCQloYW5kbGVfbmV3X21zcihlZGdlX3BvcnQsIGJ5dGUyKTsKIAotCQkvKiBzZW5kIHRoZSBjdXJyZW50IGxpbmUgc2V0dGluZ3MgdG8gdGhlIHBvcnQgc28gd2UgYXJlIGluIHN5bmMgd2l0aCBhbnkgZnVydGhlciB0ZXJtaW9zIGNhbGxzICovCi0JCWlmIChlZGdlX3BvcnQtPnBvcnQtPnR0eSkKLQkJCWNoYW5nZV9wb3J0X3NldHRpbmdzIChlZGdlX3BvcnQsIGVkZ2VfcG9ydC0+cG9ydC0+dHR5LT50ZXJtaW9zKTsKKwkJLyogc2VuZCB0aGUgY3VycmVudCBsaW5lIHNldHRpbmdzIHRvIHRoZSBwb3J0IHNvIHdlIGFyZQorCQkgICBpbiBzeW5jIHdpdGggYW55IGZ1cnRoZXIgdGVybWlvcyBjYWxscyAqLworCQkvKiBGSVhNRTogbG9ja2luZyBvbiB0dHkgKi8KKwkJaWYgKGVkZ2VfcG9ydC0+cG9ydC0+cG9ydC50dHkpCisJCQljaGFuZ2VfcG9ydF9zZXR0aW5ncyhlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5LAorCQkJCWVkZ2VfcG9ydCwgZWRnZV9wb3J0LT5wb3J0LT5wb3J0LnR0eS0+dGVybWlvcyk7CiAKIAkJLyogd2UgaGF2ZSBjb21wbGV0ZWQgdGhlIG9wZW4gKi8KIAkJZWRnZV9wb3J0LT5vcGVuUGVuZGluZyA9IGZhbHNlOwpAQCAtMTk1MSw0NSArMjAzMiw0OSBAQAogCQlyZXR1cm47CiAJfQogCi0JLy8gSWYgcG9ydCBpcyBjbG9zZWQsIHNpbGVudGx5IGRpc2NhcmQgYWxsIHJjdmQgc3RhdHVzLiBXZSBjYW4KLQkvLyBoYXZlIGNhc2VzIHdoZXJlIGJ1ZmZlcmVkIHN0YXR1cyBpcyByZWNlaXZlZCBBRlRFUiB0aGUgY2xvc2UKLQkvLyBwb3J0IGNvbW1hbmQgaXMgc2VudCB0byB0aGUgRWRnZXBvcnQuCi0JaWYgKCFlZGdlX3BvcnQtPm9wZW4gfHwgZWRnZV9wb3J0LT5jbG9zZVBlbmRpbmcpIHsKKwkvKiBJZiBwb3J0IGlzIGNsb3NlZCwgc2lsZW50bHkgZGlzY2FyZCBhbGwgcmN2ZCBzdGF0dXMuIFdlIGNhbgorCSAqIGhhdmUgY2FzZXMgd2hlcmUgYnVmZmVyZWQgc3RhdHVzIGlzIHJlY2VpdmVkIEFGVEVSIHRoZSBjbG9zZQorCSAqIHBvcnQgY29tbWFuZCBpcyBzZW50IHRvIHRoZSBFZGdlcG9ydC4KKwkgKi8KKwlpZiAoIWVkZ2VfcG9ydC0+b3BlbiB8fCBlZGdlX3BvcnQtPmNsb3NlUGVuZGluZykKIAkJcmV0dXJuOwotCX0KIAogCXN3aXRjaCAoY29kZSkgewotCQkvLyBOb3QgY3VycmVudGx5IHNlbnQgYnkgRWRnZXBvcnQKLQkJY2FzZSBJT1NQX1NUQVRVU19MU1I6Ci0JCQlkYmcoIiVzIC0gUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMik7Ci0JCQloYW5kbGVfbmV3X2xzcihlZGdlX3BvcnQsIGZhbHNlLCBieXRlMiwgMCk7Ci0JCQlicmVhazsKKwkvKiBOb3QgY3VycmVudGx5IHNlbnQgYnkgRWRnZXBvcnQgKi8KKwljYXNlIElPU1BfU1RBVFVTX0xTUjoKKwkJZGJnKCIlcyAtIFBvcnQgJXUgTFNSIFN0YXR1cyA9ICUwMngiLAorCQkJCQlfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIpOworCQloYW5kbGVfbmV3X2xzcihlZGdlX3BvcnQsIGZhbHNlLCBieXRlMiwgMCk7CisJCWJyZWFrOwogCi0JCWNhc2UgSU9TUF9TVEFUVVNfTFNSX0RBVEE6Ci0JCQlkYmcoIiVzIC0gUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCwgRGF0YSA9ICUwMngiLCBfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIsIGJ5dGUzKTsKLQkJCS8vIGJ5dGUyIGlzIExTUiBSZWdpc3RlcgotCQkJLy8gYnl0ZTMgaXMgYnJva2VuIGRhdGEgYnl0ZQotCQkJaGFuZGxlX25ld19sc3IoZWRnZV9wb3J0LCB0cnVlLCBieXRlMiwgYnl0ZTMpOwotCQkJYnJlYWs7Ci0JCQkvLwotCQkJLy8JY2FzZSBJT1NQX0VYVF80X1NUQVRVUzoKLQkJCS8vCQlkYmcoIiVzIC0gUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCBEYXRhID0gJTAyeCIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMiwgYnl0ZTMpOwotCQkJLy8JCWJyZWFrOwotCQkJLy8KLQkJY2FzZSBJT1NQX1NUQVRVU19NU1I6Ci0JCQlkYmcoIiVzIC0gUG9ydCAldSBNU1IgU3RhdHVzID0gJTAyeCIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMik7CisJY2FzZSBJT1NQX1NUQVRVU19MU1JfREFUQToKKwkJZGJnKCIlcyAtIFBvcnQgJXUgTFNSIFN0YXR1cyA9ICUwMngsIERhdGEgPSAlMDJ4IiwKKwkJCQlfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIsIGJ5dGUzKTsKKwkJLyogYnl0ZTIgaXMgTFNSIFJlZ2lzdGVyICovCisJCS8qIGJ5dGUzIGlzIGJyb2tlbiBkYXRhIGJ5dGUgKi8KKwkJaGFuZGxlX25ld19sc3IoZWRnZV9wb3J0LCB0cnVlLCBieXRlMiwgYnl0ZTMpOworCQlicmVhazsKKwkvKgorCSAqCWNhc2UgSU9TUF9FWFRfNF9TVEFUVVM6CisJICoJCWRiZygiJXMgLSBQb3J0ICV1IExTUiBTdGF0dXMgPSAlMDJ4IERhdGEgPSAlMDJ4IiwKKwkgKgkJCV9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMiwgYnl0ZTMpOworCSAqCQlicmVhazsKKwkgKi8KKwljYXNlIElPU1BfU1RBVFVTX01TUjoKKwkJZGJnKCIlcyAtIFBvcnQgJXUgTVNSIFN0YXR1cyA9ICUwMngiLAorCQkJCQlfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIpOworCQkvKgorCQkgKiBQcm9jZXNzIHRoaXMgbmV3IG1vZGVtIHN0YXR1cyBhbmQgZ2VuZXJhdGUgYXBwcm9wcmlhdGUKKwkJICogZXZlbnRzLCBldGMsIGJhc2VkIG9uIHRoZSBuZXcgc3RhdHVzLiBUaGlzIHJvdXRpbmUKKwkJICogYWxzbyBzYXZlcyB0aGUgTVNSIGluIFBvcnQtPlNoYWRvd01zci4KKwkJICovCisJCWhhbmRsZV9uZXdfbXNyKGVkZ2VfcG9ydCwgYnl0ZTIpOworCQlicmVhazsKIAotCQkJLy8gUHJvY2VzcyB0aGlzIG5ldyBtb2RlbSBzdGF0dXMgYW5kIGdlbmVyYXRlIGFwcHJvcHJpYXRlCi0JCQkvLyBldmVudHMsIGV0YywgYmFzZWQgb24gdGhlIG5ldyBzdGF0dXMuIFRoaXMgcm91dGluZQotCQkJLy8gYWxzbyBzYXZlcyB0aGUgTVNSIGluIFBvcnQtPlNoYWRvd01zci4KLQkJCWhhbmRsZV9uZXdfbXNyKGVkZ2VfcG9ydCwgYnl0ZTIpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRiZygiJXMgLSBVbnJlY29nbml6ZWQgSU9TUCBzdGF0dXMgY29kZSAldVxuIiwgX19mdW5jX18sIGNvZGUpOwotCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIFVucmVjb2duaXplZCBJT1NQIHN0YXR1cyBjb2RlICV1XG4iLCBfX2Z1bmNfXywgY29kZSk7CisJCWJyZWFrOwogCX0KLQogCXJldHVybjsKIH0KIApAQCAtMTk5OCw3ICsyMDgzLDggQEAKICAqIGVkZ2VfdHR5X3JlY3YKICAqCXRoaXMgZnVuY3Rpb24gcGFzc2VzIGRhdGEgb24gdG8gdGhlIHR0eSBmbGlwIGJ1ZmZlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCitzdGF0aWMgdm9pZCBlZGdlX3R0eV9yZWN2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKIHsKIAlpbnQgY250OwogCkBAIC0yMDA3LDcgKzIwOTMsNyBAQAogCQlpZiAoY250IDwgbGVuZ3RoKSB7CiAJCQlkZXZfZXJyKGRldiwgIiVzIC0gZHJvcHBpbmcgZGF0YSwgJWQgYnl0ZXMgbG9zdFxuIiwKIAkJCQkJX19mdW5jX18sIGxlbmd0aCAtIGNudCk7Ci0JCQlpZihjbnQgPT0gMCkKKwkJCWlmIChjbnQgPT0gMCkKIAkJCQlicmVhazsKIAkJfQogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgY250KTsKQEAgLTIwMjksMjIgKzIxMTUsMTkgQEAKIAogCWRiZygiJXMgJTAyeCIsIF9fZnVuY19fLCBuZXdNc3IpOwogCi0JaWYgKG5ld01zciAmIChFREdFUE9SVF9NU1JfREVMVEFfQ1RTIHwgRURHRVBPUlRfTVNSX0RFTFRBX0RTUiB8IEVER0VQT1JUX01TUl9ERUxUQV9SSSB8IEVER0VQT1JUX01TUl9ERUxUQV9DRCkpIHsKKwlpZiAobmV3TXNyICYgKEVER0VQT1JUX01TUl9ERUxUQV9DVFMgfCBFREdFUE9SVF9NU1JfREVMVEFfRFNSIHwKKwkJCUVER0VQT1JUX01TUl9ERUxUQV9SSSB8IEVER0VQT1JUX01TUl9ERUxUQV9DRCkpIHsKIAkJaWNvdW50ID0gJmVkZ2VfcG9ydC0+aWNvdW50OwogCiAJCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCi0JCWlmIChuZXdNc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfQ1RTKSB7CisJCWlmIChuZXdNc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfQ1RTKQogCQkJaWNvdW50LT5jdHMrKzsKLQkJfQotCQlpZiAobmV3TXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX0RTUikgeworCQlpZiAobmV3TXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX0RTUikKIAkJCWljb3VudC0+ZHNyKys7Ci0JCX0KLQkJaWYgKG5ld01zciAmIEVER0VQT1JUX01TUl9ERUxUQV9DRCkgeworCQlpZiAobmV3TXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX0NEKQogCQkJaWNvdW50LT5kY2QrKzsKLQkJfQotCQlpZiAobmV3TXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX1JJKSB7CisJCWlmIChuZXdNc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfUkkpCiAJCQlpY291bnQtPnJuZysrOwotCQl9CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCkBAIC0yMDU5LDQyICsyMTQyLDQxIEBACiAgKiBoYW5kbGVfbmV3X2xzcgogICoJdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFueSBjaGFuZ2UgdG8gdGhlIGxzciByZWdpc3RlciBmb3IgYSBwb3J0LgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgaGFuZGxlX25ld19sc3Ioc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBsc3JEYXRhLCBfX3U4IGxzciwgX191OCBkYXRhKQorc3RhdGljIHZvaWQgaGFuZGxlX25ld19sc3Ioc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBsc3JEYXRhLAorCQkJCQkJCV9fdTggbHNyLCBfX3U4IGRhdGEpCiB7Ci0JX191OCAgICBuZXdMc3IgPSAoX191OCkobHNyICYgKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9QQVJfRVJSIHwgTFNSX0ZSTV9FUlIgfCBMU1JfQlJFQUspKTsKLQlzdHJ1Y3QgIGFzeW5jX2ljb3VudCAqaWNvdW50OworCV9fdTggbmV3THNyID0gKF9fdTgpIChsc3IgJiAoX191OCkKKwkJKExTUl9PVkVSX0VSUiB8IExTUl9QQVJfRVJSIHwgTFNSX0ZSTV9FUlIgfCBMU1JfQlJFQUspKTsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50ICppY291bnQ7CiAKIAlkYmcoIiVzIC0gJTAyeCIsIF9fZnVuY19fLCBuZXdMc3IpOwogCiAJZWRnZV9wb3J0LT5zaGFkb3dMU1IgPSBsc3I7CiAKIAlpZiAobmV3THNyICYgTFNSX0JSRUFLKSB7Ci0JCS8vCi0JCS8vIFBhcml0eSBhbmQgRnJhbWluZyBlcnJvcnMgb25seSBjb3VudCBpZiB0aGV5Ci0JCS8vIG9jY3VyIGV4Y2x1c2l2ZSBvZiBhIGJyZWFrIGJlaW5nCi0JCS8vIHJlY2VpdmVkLgotCQkvLworCQkvKgorCQkgKiBQYXJpdHkgYW5kIEZyYW1pbmcgZXJyb3JzIG9ubHkgY291bnQgaWYgdGhleQorCQkgKiBvY2N1ciBleGNsdXNpdmUgb2YgYSBicmVhayBiZWluZworCQkgKiByZWNlaXZlZC4KKwkJICovCiAJCW5ld0xzciAmPSAoX191OCkoTFNSX09WRVJfRVJSIHwgTFNSX0JSRUFLKTsKIAl9CiAKIAkvKiBQbGFjZSBMU1IgZGF0YSBieXRlIGludG8gUnggYnVmZmVyICovCi0JaWYgKGxzckRhdGEgJiYgZWRnZV9wb3J0LT5wb3J0LT50dHkpCi0JCWVkZ2VfdHR5X3JlY3YoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCBlZGdlX3BvcnQtPnBvcnQtPnR0eSwgJmRhdGEsIDEpOworCWlmIChsc3JEYXRhICYmIGVkZ2VfcG9ydC0+cG9ydC0+cG9ydC50dHkpCisJCWVkZ2VfdHR5X3JlY3YoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LAorCQkJCQllZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5LCAmZGF0YSwgMSk7CiAKIAkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLwogCWljb3VudCA9ICZlZGdlX3BvcnQtPmljb3VudDsKLQlpZiAobmV3THNyICYgTFNSX0JSRUFLKSB7CisJaWYgKG5ld0xzciAmIExTUl9CUkVBSykKIAkJaWNvdW50LT5icmsrKzsKLQl9Ci0JaWYgKG5ld0xzciAmIExTUl9PVkVSX0VSUikgeworCWlmIChuZXdMc3IgJiBMU1JfT1ZFUl9FUlIpCiAJCWljb3VudC0+b3ZlcnJ1bisrOwotCX0KLQlpZiAobmV3THNyICYgTFNSX1BBUl9FUlIpIHsKKwlpZiAobmV3THNyICYgTFNSX1BBUl9FUlIpCiAJCWljb3VudC0+cGFyaXR5Kys7Ci0JfQotCWlmIChuZXdMc3IgJiBMU1JfRlJNX0VSUikgeworCWlmIChuZXdMc3IgJiBMU1JfRlJNX0VSUikKIAkJaWNvdW50LT5mcmFtZSsrOwotCX0KIAogCXJldHVybjsKIH0KQEAgLTIxMDIsMTIgKzIxODQsMTMgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHNyYW1fd3JpdGUKLSAqCXdyaXRlcyBhIG51bWJlciBvZiBieXRlcyB0byB0aGUgRWRnZXBvcnQgZGV2aWNlJ3Mgc3JhbSBzdGFydGluZyBhdCB0aGUgCisgKgl3cml0ZXMgYSBudW1iZXIgb2YgYnl0ZXMgdG8gdGhlIEVkZ2Vwb3J0IGRldmljZSdzIHNyYW0gc3RhcnRpbmcgYXQgdGhlCiAgKglnaXZlbiBhZGRyZXNzLgogICoJSWYgc3VjY2Vzc2Z1bCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3RoZXJ3aXNlIGl0IHJldHVybnMKICAqCWEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG9mIHRoZSBwcm9ibGVtLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHNyYW1fd3JpdGUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgZXh0QWRkciwgX191MTYgYWRkciwgX191MTYgbGVuZ3RoLCBjb25zdCBfX3U4ICpkYXRhKQorc3RhdGljIGludCBzcmFtX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IGV4dEFkZHIsIF9fdTE2IGFkZHIsCisJCQkJCV9fdTE2IGxlbmd0aCwgY29uc3QgX191OCAqZGF0YSkKIHsKIAlpbnQgcmVzdWx0OwogCV9fdTE2IGN1cnJlbnRfbGVuZ3RoOwpAQCAtMjExNSwzMiArMjE5OCwzNyBAQAogCiAJZGJnKCIlcyAtICV4LCAleCwgJWQiLCBfX2Z1bmNfXywgZXh0QWRkciwgYWRkciwgbGVuZ3RoKTsKIAotCXRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jICg2NCwgR0ZQX0tFUk5FTCk7CisJdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MoNjQsIEdGUF9LRVJORUwpOwogCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7Ci0JCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fZnVuY19fLCA2NCk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsCisJCQkJCQkJX19mdW5jX18sIDY0KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogbmVlZCB0byBzcGxpdCB0aGVzZSB3cml0ZXMgdXAgaW50byA2NCBieXRlIGNodW5rcyAqLwogCXJlc3VsdCA9IDA7CiAJd2hpbGUgKGxlbmd0aCA+IDApIHsKLQkJaWYgKGxlbmd0aCA+IDY0KSB7CisJCWlmIChsZW5ndGggPiA2NCkKIAkJCWN1cnJlbnRfbGVuZ3RoID0gNjQ7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWN1cnJlbnRfbGVuZ3RoID0gbGVuZ3RoOwotCQl9Ci0vLwkJZGJnKCIlcyAtIHdyaXRpbmcgJXgsICV4LCAlZCIsIF9fZnVuY19fLCBleHRBZGRyLCBhZGRyLCBjdXJyZW50X2xlbmd0aCk7Ci0JCW1lbWNweSAodHJhbnNmZXJfYnVmZmVyLCBkYXRhLCBjdXJyZW50X2xlbmd0aCk7Ci0JCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIFVTQl9SRVFVRVNUX0lPTl9XUklURV9SQU0sIAotCQkJCQkgIDB4NDAsIGFkZHIsIGV4dEFkZHIsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgsIDMwMCk7CisKKy8qCQlkYmcoIiVzIC0gd3JpdGluZyAleCwgJXgsICVkIiwgX19mdW5jX18sCisJCQkJCWV4dEFkZHIsIGFkZHIsIGN1cnJlbnRfbGVuZ3RoKTsgKi8KKwkJbWVtY3B5KHRyYW5zZmVyX2J1ZmZlciwgZGF0YSwgY3VycmVudF9sZW5ndGgpOworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCisJCQkJCXVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJCVVTQl9SRVFVRVNUX0lPTl9XUklURV9SQU0sCisJCQkJCTB4NDAsIGFkZHIsIGV4dEFkZHIsIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJY3VycmVudF9sZW5ndGgsIDMwMCk7CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJYnJlYWs7CiAJCWxlbmd0aCAtPSBjdXJyZW50X2xlbmd0aDsKIAkJYWRkciArPSBjdXJyZW50X2xlbmd0aDsKIAkJZGF0YSArPSBjdXJyZW50X2xlbmd0aDsKLQl9ICAgICAgIAorCX0KIAotCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjE1Miw0MCArMjI0MCw0NSBAQAogICoJSWYgc3VjY2Vzc2Z1bCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3RoZXJ3aXNlIGl0IHJldHVybnMKICAqCWEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG9mIHRoZSBwcm9ibGVtLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHJvbV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLCBfX3UxNiBsZW5ndGgsIGNvbnN0IF9fdTggKmRhdGEpCitzdGF0aWMgaW50IHJvbV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLAorCQkJCQlfX3UxNiBsZW5ndGgsIGNvbnN0IF9fdTggKmRhdGEpCiB7CiAJaW50IHJlc3VsdDsKIAlfX3UxNiBjdXJyZW50X2xlbmd0aDsKIAl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CiAKLS8vCWRiZygiJXMgLSAleCwgJXgsICVkIiwgX19mdW5jX18sIGV4dEFkZHIsIGFkZHIsIGxlbmd0aCk7CisvKglkYmcoIiVzIC0gJXgsICV4LCAlZCIsIF9fZnVuY19fLCBleHRBZGRyLCBhZGRyLCBsZW5ndGgpOyAqLwogCi0JdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MgKDY0LCBHRlBfS0VSTkVMKTsKKwl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyg2NCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKLQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sIDY0KTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwKKwkJCQkJCQkJX19mdW5jX18sIDY0KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogbmVlZCB0byBzcGxpdCB0aGVzZSB3cml0ZXMgdXAgaW50byA2NCBieXRlIGNodW5rcyAqLwogCXJlc3VsdCA9IDA7CiAJd2hpbGUgKGxlbmd0aCA+IDApIHsKLQkJaWYgKGxlbmd0aCA+IDY0KSB7CisJCWlmIChsZW5ndGggPiA2NCkKIAkJCWN1cnJlbnRfbGVuZ3RoID0gNjQ7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWN1cnJlbnRfbGVuZ3RoID0gbGVuZ3RoOwotCQl9Ci0vLwkJZGJnKCIlcyAtIHdyaXRpbmcgJXgsICV4LCAlZCIsIF9fZnVuY19fLCBleHRBZGRyLCBhZGRyLCBjdXJyZW50X2xlbmd0aCk7Ci0JCW1lbWNweSAodHJhbnNmZXJfYnVmZmVyLCBkYXRhLCBjdXJyZW50X2xlbmd0aCk7Ci0JCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIFVTQl9SRVFVRVNUX0lPTl9XUklURV9ST00sIAotCQkJCQkgIDB4NDAsIGFkZHIsIGV4dEFkZHIsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgsIDMwMCk7CisvKgkJZGJnKCIlcyAtIHdyaXRpbmcgJXgsICV4LCAlZCIsIF9fZnVuY19fLAorCQkJCQlleHRBZGRyLCBhZGRyLCBjdXJyZW50X2xlbmd0aCk7ICovCisJCW1lbWNweSh0cmFuc2Zlcl9idWZmZXIsIGRhdGEsIGN1cnJlbnRfbGVuZ3RoKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAorCQkJCQl1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCQlVU0JfUkVRVUVTVF9JT05fV1JJVEVfUk9NLCAweDQwLAorCQkJCQlhZGRyLCBleHRBZGRyLAorCQkJCQl0cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfbGVuZ3RoLCAzMDApOwogCQlpZiAocmVzdWx0IDwgMCkKIAkJCWJyZWFrOwogCQlsZW5ndGggLT0gY3VycmVudF9sZW5ndGg7CiAJCWFkZHIgKz0gY3VycmVudF9sZW5ndGg7CiAJCWRhdGEgKz0gY3VycmVudF9sZW5ndGg7Ci0JfSAgICAgICAKKwl9CiAKLQlrZnJlZSAodHJhbnNmZXJfYnVmZmVyKTsKKwlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIxOTcsNyArMjI5MCw4IEBACiAgKglJZiBzdWNjZXNzZnVsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLCBvdGhlcndpc2UgaXQgcmV0dXJucwogICoJYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb2YgdGhlIHByb2JsZW0uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcm9tX3JlYWQgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IGV4dEFkZHIsIF9fdTE2IGFkZHIsIF9fdTE2IGxlbmd0aCwgX191OCAqZGF0YSkKK3N0YXRpYyBpbnQgcm9tX3JlYWQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgZXh0QWRkciwKKwkJCQkJX191MTYgYWRkciwgX191MTYgbGVuZ3RoLCBfX3U4ICpkYXRhKQogewogCWludCByZXN1bHQ7CiAJX191MTYgY3VycmVudF9sZW5ndGg7CkBAIC0yMjA1LDMyICsyMjk5LDM2IEBACiAKIAlkYmcoIiVzIC0gJXgsICV4LCAlZCIsIF9fZnVuY19fLCBleHRBZGRyLCBhZGRyLCBsZW5ndGgpOwogCi0JdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MgKDY0LCBHRlBfS0VSTkVMKTsKKwl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyg2NCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKLQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sIDY0KTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fZnVuY19fLCA2NCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCS8qIG5lZWQgdG8gc3BsaXQgdGhlc2UgcmVhZHMgdXAgaW50byA2NCBieXRlIGNodW5rcyAqLwogCXJlc3VsdCA9IDA7CiAJd2hpbGUgKGxlbmd0aCA+IDApIHsKLQkJaWYgKGxlbmd0aCA+IDY0KSB7CisJCWlmIChsZW5ndGggPiA2NCkKIAkJCWN1cnJlbnRfbGVuZ3RoID0gNjQ7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWN1cnJlbnRfbGVuZ3RoID0gbGVuZ3RoOwotCQl9Ci0vLwkJZGJnKCIlcyAtICV4LCAleCwgJWQiLCBfX2Z1bmNfXywgZXh0QWRkciwgYWRkciwgY3VycmVudF9sZW5ndGgpOwotCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCBVU0JfUkVRVUVTVF9JT05fUkVBRF9ST00sIAotCQkJCQkgIDB4QzAsIGFkZHIsIGV4dEFkZHIsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgsIDMwMCk7CisvKgkJZGJnKCIlcyAtICV4LCAleCwgJWQiLCBfX2Z1bmNfXywKKwkJCQlleHRBZGRyLCBhZGRyLCBjdXJyZW50X2xlbmd0aCk7ICovCisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkJVVNCX1JFUVVFU1RfSU9OX1JFQURfUk9NLAorCQkJCQkweEMwLCBhZGRyLCBleHRBZGRyLCB0cmFuc2Zlcl9idWZmZXIsCisJCQkJCWN1cnJlbnRfbGVuZ3RoLCAzMDApOwogCQlpZiAocmVzdWx0IDwgMCkKIAkJCWJyZWFrOwotCQltZW1jcHkgKGRhdGEsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgpOworCQltZW1jcHkoZGF0YSwgdHJhbnNmZXJfYnVmZmVyLCBjdXJyZW50X2xlbmd0aCk7CiAJCWxlbmd0aCAtPSBjdXJyZW50X2xlbmd0aDsKIAkJYWRkciArPSBjdXJyZW50X2xlbmd0aDsKIAkJZGF0YSArPSBjdXJyZW50X2xlbmd0aDsKLQl9ICAgICAgIAorCX0KIAotCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjIzOSw3ICsyMzM3LDggQEAKICAqIHNlbmRfaW9zcF9leHRfY21kCiAgKglJcyB1c2VkIHRvIHNlbmQgYSBJT1NQIG1lc3NhZ2UgdG8gdGhlIEVkZ2Vwb3J0IGRldmljZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHNlbmRfaW9zcF9leHRfY21kIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IGNvbW1hbmQsIF9fdTggcGFyYW0pCitzdGF0aWMgaW50IHNlbmRfaW9zcF9leHRfY21kKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsCisJCQkJCQlfX3U4IGNvbW1hbmQsIF9fdTggcGFyYW0pCiB7CiAJdW5zaWduZWQgY2hhciAgICpidWZmZXI7CiAJdW5zaWduZWQgY2hhciAgICpjdXJyZW50Q29tbWFuZDsKQEAgLTIyNDgsMTkgKzIzNDcsMjAgQEAKIAogCWRiZygiJXMgLSAlZCwgJWQiLCBfX2Z1bmNfXywgY29tbWFuZCwgcGFyYW0pOwogCi0JYnVmZmVyID0gIGttYWxsb2MgKDEwLCBHRlBfQVRPTUlDKTsKKwlidWZmZXIgPSBrbWFsbG9jKDEwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZmZlcikgewotCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sIDEwKTsKKwkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsCisJCQkJIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sIDEwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJY3VycmVudENvbW1hbmQgPSBidWZmZXI7CiAKLQlNQUtFX0NNRF9FWFRfQ01EICgmY3VycmVudENvbW1hbmQsICZsZW5ndGgsCi0JCQkgIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yLAotCQkJICBjb21tYW5kLCBwYXJhbSk7CisJTUFLRV9DTURfRVhUX0NNRCgmY3VycmVudENvbW1hbmQsICZsZW5ndGgsCisJCWVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yLAorCQljb21tYW5kLCBwYXJhbSk7CiAKLQlzdGF0dXMgPSB3cml0ZV9jbWRfdXNiIChlZGdlX3BvcnQsIGJ1ZmZlciwgbGVuZ3RoKTsKKwlzdGF0dXMgPSB3cml0ZV9jbWRfdXNiKGVkZ2VfcG9ydCwgYnVmZmVyLCBsZW5ndGgpOwogCWlmIChzdGF0dXMpIHsKIAkJLyogc29tZXRoaW5nIGJhZCBoYXBwZW5lZCwgbGV0J3MgZnJlZSB1cCB0aGUgbWVtb3J5ICovCiAJCWtmcmVlKGJ1ZmZlcik7CkBAIC0yMjc0LDQzICsyMzc0LDUwIEBACiAgKiB3cml0ZV9jbWRfdXNiCiAgKgl0aGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgZ2l2ZW4gYnVmZmVyIG91dCB0byB0aGUgYnVsayB3cml0ZSBlbmRwb2ludC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgd3JpdGVfY21kX3VzYiAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoKQorc3RhdGljIGludCB3cml0ZV9jbWRfdXNiKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsCisJCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCkKIHsKLQlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwpOworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsID0KKwkJCQl1c2JfZ2V0X3NlcmlhbF9kYXRhKGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsKTsKIAlpbnQgc3RhdHVzID0gMDsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJaW50IHRpbWVvdXQ7CiAKLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3BvcnQtPnBvcnQtPmRldiwgX19mdW5jX18sIGxlbmd0aCwgYnVmZmVyKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3BvcnQtPnBvcnQtPmRldiwKKwkJCQkJCV9fZnVuY19fLCBsZW5ndGgsIGJ1ZmZlcik7CiAKIAkvKiBBbGxvY2F0ZSBvdXIgbmV4dCB1cmIgKi8KLQl1cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfQVRPTUlDKTsKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCWlmICghdXJiKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWF0b21pY19pbmMoJkNtZFVyYnMpOwotCWRiZygiJXMgLSBBTExPQ0FURSBVUkIgJXAgKG91dHN0YW5kaW5nICVkKSIsIF9fZnVuY19fLCB1cmIsIGF0b21pY19yZWFkKCZDbWRVcmJzKSk7CisJZGJnKCIlcyAtIEFMTE9DQVRFIFVSQiAlcCAob3V0c3RhbmRpbmcgJWQpIiwKKwkJCQlfX2Z1bmNfXywgdXJiLCBhdG9taWNfcmVhZCgmQ21kVXJicykpOwogCi0JdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LCAKLQkJICAgICAgIHVzYl9zbmRidWxrcGlwZShlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYsIGVkZ2Vfc2VyaWFsLT5idWxrX291dF9lbmRwb2ludCksCi0JCSAgICAgICBidWZmZXIsIGxlbmd0aCwgZWRnZV9idWxrX291dF9jbWRfY2FsbGJhY2ssIGVkZ2VfcG9ydCk7CisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQl1c2Jfc25kYnVsa3BpcGUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQllZGdlX3NlcmlhbC0+YnVsa19vdXRfZW5kcG9pbnQpLAorCQkJYnVmZmVyLCBsZW5ndGgsIGVkZ2VfYnVsa19vdXRfY21kX2NhbGxiYWNrLCBlZGdlX3BvcnQpOwogCiAJZWRnZV9wb3J0LT5jb21tYW5kUGVuZGluZyA9IHRydWU7CiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAogCWlmIChzdGF0dXMpIHsKIAkJLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KLQkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGNvbW1hbmQpIGZhaWxlZCwgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwKKwkJICAgICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGNvbW1hbmQpIGZhaWxlZCwgc3RhdHVzID0gJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXVzYl9raWxsX3VyYih1cmIpOwogCQl1c2JfZnJlZV91cmIodXJiKTsKIAkJYXRvbWljX2RlYygmQ21kVXJicyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCi0JLy8gd2FpdCBmb3IgY29tbWFuZCB0byBmaW5pc2gKKwkvKiB3YWl0IGZvciBjb21tYW5kIHRvIGZpbmlzaCAqLwogCXRpbWVvdXQgPSBDT01NQU5EX1RJTUVPVVQ7CiAjaWYgMAotCXdhaXRfZXZlbnQgKCZlZGdlX3BvcnQtPndhaXRfY29tbWFuZCwgIWVkZ2VfcG9ydC0+Y29tbWFuZFBlbmRpbmcpOworCXdhaXRfZXZlbnQoJmVkZ2VfcG9ydC0+d2FpdF9jb21tYW5kLCAhZWRnZV9wb3J0LT5jb21tYW5kUGVuZGluZyk7CiAKIAlpZiAoZWRnZV9wb3J0LT5jb21tYW5kUGVuZGluZykgewogCQkvKiBjb21tYW5kIHRpbWVkIG91dCAqLwpAQCAtMjMyNywxNSArMjQzNCwxOCBAQAogICoJdGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgcHJvcGVyIGNvbW1hbmQgdG8gY2hhbmdlIHRoZSBiYXVkIHJhdGUgb2YgdGhlCiAgKglzcGVjaWZpZWQgcG9ydC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBpbnQgYmF1ZFJhdGUpCitzdGF0aWMgaW50IHNlbmRfY21kX3dyaXRlX2JhdWRfcmF0ZShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LAorCQkJCQkJCQlpbnQgYmF1ZFJhdGUpCiB7Ci0Jc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsKTsKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCA9CisJCQkJdXNiX2dldF9zZXJpYWxfZGF0YShlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbCk7CiAJdW5zaWduZWQgY2hhciAqY21kQnVmZmVyOwogCXVuc2lnbmVkIGNoYXIgKmN1cnJDbWQ7CiAJaW50IGNtZExlbiA9IDA7CiAJaW50IGRpdmlzb3I7CiAJaW50IHN0YXR1czsKLQl1bnNpZ25lZCBjaGFyIG51bWJlciA9IGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCXVuc2lnbmVkIGNoYXIgbnVtYmVyID0KKwkJZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIgLSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CiAKIAlpZiAoZWRnZV9zZXJpYWwtPmlzX2VwaWMgJiYKIAkgICAgIWVkZ2Vfc2VyaWFsLT5lcGljX2Rlc2NyaXB0b3IuU3VwcG9ydHMuSU9TUFNldEJhdWRSYXRlKSB7CkBAIC0yMzQ0LDM2ICsyNDU0LDQwIEBACiAJCXJldHVybiAwOwogCX0KIAotCWRiZygiJXMgLSBwb3J0ID0gJWQsIGJhdWQgPSAlZCIsIF9fZnVuY19fLCBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciwgYmF1ZFJhdGUpOworCWRiZygiJXMgLSBwb3J0ID0gJWQsIGJhdWQgPSAlZCIsIF9fZnVuY19fLAorCQkJCQllZGdlX3BvcnQtPnBvcnQtPm51bWJlciwgYmF1ZFJhdGUpOwogCi0Jc3RhdHVzID0gY2FsY19iYXVkX3JhdGVfZGl2aXNvciAoYmF1ZFJhdGUsICZkaXZpc29yKTsKKwlzdGF0dXMgPSBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yKGJhdWRSYXRlLCAmZGl2aXNvcik7CiAJaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgIiVzIC0gYmFkIGJhdWQgcmF0ZVxuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgIiVzIC0gYmFkIGJhdWQgcmF0ZVxuIiwKKwkJCQkJCQkJX19mdW5jX18pOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAotCS8vIEFsbG9jIG1lbW9yeSBmb3IgdGhlIHN0cmluZyBvZiBjb21tYW5kcy4KLQljbWRCdWZmZXIgPSAga21hbGxvYyAoMHgxMDAsIEdGUF9BVE9NSUMpOworCS8qIEFsbG9jIG1lbW9yeSBmb3IgdGhlIHN0cmluZyBvZiBjb21tYW5kcy4gKi8KKwljbWRCdWZmZXIgPSAga21hbGxvYygweDEwMCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFjbWRCdWZmZXIpIHsKLQkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fZnVuY19fLCAweDEwMCk7CisJCWRldl9lcnIoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LAorCQkJIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sIDB4MTAwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWN1cnJDbWQgPSBjbWRCdWZmZXI7CiAKLQkvLyBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2gKLQlNQUtFX0NNRF9XUklURV9SRUcoICZjdXJyQ21kLCAmY21kTGVuLCBudW1iZXIsIExDUiwgTENSX0RMX0VOQUJMRSApOworCS8qIEVuYWJsZSBhY2Nlc3MgdG8gZGl2aXNvciBsYXRjaCAqLworCU1BS0VfQ01EX1dSSVRFX1JFRygmY3VyckNtZCwgJmNtZExlbiwgbnVtYmVyLCBMQ1IsIExDUl9ETF9FTkFCTEUpOwogCi0JLy8gV3JpdGUgdGhlIGRpdmlzb3IgaXRzZWxmCi0JTUFLRV9DTURfV1JJVEVfUkVHKCAmY3VyckNtZCwgJmNtZExlbiwgbnVtYmVyLCBETEwsIExPVzggKGRpdmlzb3IpICk7Ci0JTUFLRV9DTURfV1JJVEVfUkVHKCAmY3VyckNtZCwgJmNtZExlbiwgbnVtYmVyLCBETE0sIEhJR0g4KGRpdmlzb3IpICk7CisJLyogV3JpdGUgdGhlIGRpdmlzb3IgaXRzZWxmICovCisJTUFLRV9DTURfV1JJVEVfUkVHKCZjdXJyQ21kLCAmY21kTGVuLCBudW1iZXIsIERMTCwgTE9XOChkaXZpc29yKSk7CisJTUFLRV9DTURfV1JJVEVfUkVHKCZjdXJyQ21kLCAmY21kTGVuLCBudW1iZXIsIERMTSwgSElHSDgoZGl2aXNvcikpOwogCi0JLy8gUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSB0byBkaXNhYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoCi0JTUFLRV9DTURfV1JJVEVfUkVHKCAmY3VyckNtZCwgJmNtZExlbiwgbnVtYmVyLCBMQ1IsIGVkZ2VfcG9ydC0+c2hhZG93TENSKTsKKwkvKiBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlIHRvIGRpc2FibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2ggKi8KKwlNQUtFX0NNRF9XUklURV9SRUcoJmN1cnJDbWQsICZjbWRMZW4sIG51bWJlciwgTENSLAorCQkJCQkJZWRnZV9wb3J0LT5zaGFkb3dMQ1IpOwogCi0Jc3RhdHVzID0gd3JpdGVfY21kX3VzYihlZGdlX3BvcnQsIGNtZEJ1ZmZlciwgY21kTGVuICk7CisJc3RhdHVzID0gd3JpdGVfY21kX3VzYihlZGdlX3BvcnQsIGNtZEJ1ZmZlciwgY21kTGVuKTsKIAlpZiAoc3RhdHVzKSB7CiAJCS8qIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQsIGxldCdzIGZyZWUgdXAgdGhlIG1lbW9yeSAqLwotCQlrZnJlZSAoY21kQnVmZmVyKTsKKwkJa2ZyZWUoY21kQnVmZmVyKTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMjM4NSw3ICsyNDk5LDcgQEAKICAqCXRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgcHJvcGVyIGJhdWQgcmF0ZSBkaXZpc29yIGZvciB0aGUgc3BlY2lmaWVkCiAgKgliYXVkIHJhdGUuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGNhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IgKGludCBiYXVkcmF0ZSwgaW50ICpkaXZpc29yKQorc3RhdGljIGludCBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yKGludCBiYXVkcmF0ZSwgaW50ICpkaXZpc29yKQogewogCWludCBpOwogCV9fdTE2IGN1c3RvbTsKQEAgLTIzOTQsMTcgKzI1MDgsMTcgQEAKIAlkYmcoIiVzIC0gJWQiLCBfX2Z1bmNfXywgYmF1ZHJhdGUpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGl2aXNvcl90YWJsZSk7IGkrKykgewotCQlpZiAoIGRpdmlzb3JfdGFibGVbaV0uQmF1ZFJhdGUgPT0gYmF1ZHJhdGUgKSB7CisJCWlmIChkaXZpc29yX3RhYmxlW2ldLkJhdWRSYXRlID09IGJhdWRyYXRlKSB7CiAJCQkqZGl2aXNvciA9IGRpdmlzb3JfdGFibGVbaV0uRGl2aXNvcjsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JLy8gV2UgaGF2ZSB0cmllZCBhbGwgb2YgdGhlIHN0YW5kYXJkIGJhdWQgcmF0ZXMKLQkvLyBsZXRzIHRyeSB0byBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgZm9yIHRoaXMgYmF1ZCByYXRlCi0JLy8gTWFrZSBzdXJlIHRoZSBiYXVkIHJhdGUgaXMgcmVhc29uYWJsZQorCS8qIFdlIGhhdmUgdHJpZWQgYWxsIG9mIHRoZSBzdGFuZGFyZCBiYXVkIHJhdGVzCisJICogbGV0cyB0cnkgdG8gY2FsY3VsYXRlIHRoZSBkaXZpc29yIGZvciB0aGlzIGJhdWQgcmF0ZQorCSAqIE1ha2Ugc3VyZSB0aGUgYmF1ZCByYXRlIGlzIHJlYXNvbmFibGUgKi8KIAlpZiAoYmF1ZHJhdGUgPiA1MCAmJiBiYXVkcmF0ZSA8IDIzMDQwMCkgewotCQkvLyBnZXQgZGl2aXNvcgorCQkvKiBnZXQgZGl2aXNvciAqLwogCQljdXN0b20gPSAoX191MTYpKCgyMzA0MDBMICsgYmF1ZHJhdGUvMikgLyBiYXVkcmF0ZSk7CiAKIAkJKmRpdmlzb3IgPSBjdXN0b207CkBAIC0yNDE5LDE3ICsyNTMzLDIwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcgotICoJdGhpcyBmdW5jdGlvbiBidWlsZHMgdXAgYSB1YXJ0IHJlZ2lzdGVyIG1lc3NhZ2UgYW5kIHNlbmRzIHRvIHRvIHRoZSBkZXZpY2UuCisgKiAgdGhpcyBmdW5jdGlvbiBidWlsZHMgdXAgYSB1YXJ0IHJlZ2lzdGVyIG1lc3NhZ2UgYW5kIHNlbmRzIHRvIHRvIHRoZSBkZXZpY2UuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggcmVnTnVtLCBfX3U4IHJlZ1ZhbHVlKQorc3RhdGljIGludCBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsCisJCQkJCQlfX3U4IHJlZ051bSwgX191OCByZWdWYWx1ZSkKIHsKLQlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwpOworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsID0KKwkJCQl1c2JfZ2V0X3NlcmlhbF9kYXRhKGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsKTsKIAl1bnNpZ25lZCBjaGFyICpjbWRCdWZmZXI7CiAJdW5zaWduZWQgY2hhciAqY3VyckNtZDsKIAl1bnNpZ25lZCBsb25nIGNtZExlbiA9IDA7CiAJaW50IHN0YXR1czsKIAotCWRiZygiJXMgLSB3cml0ZSB0byAlcyByZWdpc3RlciAweCUwMngiLCAocmVnTnVtID09IE1DUikgPyAiTUNSIiA6ICJMQ1IiLCBfX2Z1bmNfXywgcmVnVmFsdWUpOworCWRiZygiJXMgLSB3cml0ZSB0byAlcyByZWdpc3RlciAweCUwMngiLAorCQkJKHJlZ051bSA9PSBNQ1IpID8gIk1DUiIgOiAiTENSIiwgX19mdW5jX18sIHJlZ1ZhbHVlKTsKIAogCWlmIChlZGdlX3NlcmlhbC0+aXNfZXBpYyAmJgogCSAgICAhZWRnZV9zZXJpYWwtPmVwaWNfZGVzY3JpcHRvci5TdXBwb3J0cy5JT1NQV3JpdGVNQ1IgJiYKQEAgLTI0NDEsMjcgKzI1NTgsMjYgQEAKIAlpZiAoZWRnZV9zZXJpYWwtPmlzX2VwaWMgJiYKIAkgICAgIWVkZ2Vfc2VyaWFsLT5lcGljX2Rlc2NyaXB0b3IuU3VwcG9ydHMuSU9TUFdyaXRlTENSICYmCiAJICAgIHJlZ051bSA9PSBMQ1IpIHsKLQkJZGJnICgiU2VuZENtZFdyaXRlVWFydFJlZyAtIE5vdCB3cml0aW5nIHRvIExDUiBSZWdpc3RlciIpOworCQlkYmcoIlNlbmRDbWRXcml0ZVVhcnRSZWcgLSBOb3Qgd3JpdGluZyB0byBMQ1IgUmVnaXN0ZXIiKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JLy8gQWxsb2MgbWVtb3J5IGZvciB0aGUgc3RyaW5nIG9mIGNvbW1hbmRzLgotCWNtZEJ1ZmZlciA9IGttYWxsb2MgKDB4MTAsIEdGUF9BVE9NSUMpOwotCWlmIChjbWRCdWZmZXIgPT0gTlVMTCApIHsKKwkvKiBBbGxvYyBtZW1vcnkgZm9yIHRoZSBzdHJpbmcgb2YgY29tbWFuZHMuICovCisJY21kQnVmZmVyID0ga21hbGxvYygweDEwLCBHRlBfQVRPTUlDKTsKKwlpZiAoY21kQnVmZmVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWN1cnJDbWQgPSBjbWRCdWZmZXI7CiAKLQkvLyBCdWlsZCBhIGNtZCBpbiB0aGUgYnVmZmVyIHRvIHdyaXRlIHRoZSBnaXZlbiByZWdpc3RlcgotCU1BS0VfQ01EX1dSSVRFX1JFRyAoJmN1cnJDbWQsICZjbWRMZW4sCi0JCQkgICAgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIgLSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3IsCi0JCQkgICAgcmVnTnVtLCByZWdWYWx1ZSk7CisJLyogQnVpbGQgYSBjbWQgaW4gdGhlIGJ1ZmZlciB0byB3cml0ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXIgKi8KKwlNQUtFX0NNRF9XUklURV9SRUcoJmN1cnJDbWQsICZjbWRMZW4sCisJCWVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yLAorCQlyZWdOdW0sIHJlZ1ZhbHVlKTsKIAogCXN0YXR1cyA9IHdyaXRlX2NtZF91c2IoZWRnZV9wb3J0LCBjbWRCdWZmZXIsIGNtZExlbik7CiAJaWYgKHN0YXR1cykgewogCQkvKiBzb21ldGhpbmcgYmFkIGhhcHBlbmVkLCBsZXQncyBmcmVlIHVwIHRoZSBtZW1vcnkgKi8KLQkJa2ZyZWUgKGNtZEJ1ZmZlcik7CisJCWtmcmVlKGNtZEJ1ZmZlcik7CiAJfQogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTI0NzAsMTYgKzI1ODYsMTUgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBjaGFuZ2VfcG9ydF9zZXR0aW5ncwotICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBzZXQgdGhlIFVBUlQgb24gdGhlIGRldmljZSB0byBtYXRjaCB0aGUgc3BlY2lmaWVkCi0gKgluZXcgc2V0dGluZ3MuCisgKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHNldCB0aGUgVUFSVCBvbiB0aGUgZGV2aWNlIHRvIG1hdGNoIHRoZQorICoJc3BlY2lmaWVkIG5ldyBzZXR0aW5ncy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgQ01TUEFSCi0jZGVmaW5lIENNU1BBUiAwCi0jZW5kaWYKLXN0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorCitzdGF0aWMgdm9pZCBjaGFuZ2VfcG9ydF9zZXR0aW5ncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0Jc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsKTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsID0KKwkJCXVzYl9nZXRfc2VyaWFsX2RhdGEoZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwpOwogCWludCBiYXVkOwogCXVuc2lnbmVkIGNmbGFnOwogCV9fdTggbWFzayA9IDB4ZmY7CkBAIC0yNDk4LDIxICsyNjEzLDI2IEBACiAJCXJldHVybjsKIAl9CiAKLQl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKLQlpZiAoKCF0dHkpIHx8Ci0JICAgICghdHR5LT50ZXJtaW9zKSkgewotCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAogCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewotCQljYXNlIENTNTogICBsRGF0YSA9IExDUl9CSVRTXzU7IG1hc2sgPSAweDFmOyAgICBkYmcoIiVzIC0gZGF0YSBiaXRzID0gNSIsIF9fZnVuY19fKTsgICBicmVhazsKLQkJY2FzZSBDUzY6ICAgbERhdGEgPSBMQ1JfQklUU182OyBtYXNrID0gMHgzZjsgICAgZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX2Z1bmNfXyk7ICAgYnJlYWs7Ci0JCWNhc2UgQ1M3OiAgIGxEYXRhID0gTENSX0JJVFNfNzsgbWFzayA9IDB4N2Y7ICAgIGRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19mdW5jX18pOyAgIGJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIENTODogICBsRGF0YSA9IExDUl9CSVRTXzg7ICAgICAgICAgICAgICAgICBkYmcoIiVzIC0gZGF0YSBiaXRzID0gOCIsIF9fZnVuY19fKTsgICBicmVhazsKKwljYXNlIENTNToKKwkJbERhdGEgPSBMQ1JfQklUU181OyBtYXNrID0gMHgxZjsKKwkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDUiLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCWNhc2UgQ1M2OgorCQlsRGF0YSA9IExDUl9CSVRTXzY7IG1hc2sgPSAweDNmOworCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCWxEYXRhID0gTENSX0JJVFNfNzsgbWFzayA9IDB4N2Y7CisJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19mdW5jX18pOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgQ1M4OgorCQlsRGF0YSA9IExDUl9CSVRTXzg7CisJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19mdW5jX18pOworCQlicmVhazsKIAl9CiAKIAlsUGFyaXR5ID0gTENSX1BBUl9OT05FOwpAQCAtMjU1NCw3ICsyNjc0LDggQEAKIAkJZGJnKCIlcyAtIFJUUy9DVFMgaXMgZGlzYWJsZWQiLCBfX2Z1bmNfXyk7CiAJfQogCi0JLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2V0IHRoZSBzdGFydCBhbmQgc3RvcCBjaGFyYWN0ZXIgaW4gdGhlIGRldmljZSAqLworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNldCB0aGUgc3RhcnQgYW5kIHN0b3AgY2hhcmFjdGVyCisJICAgaW4gdGhlIGRldmljZSAqLwogCWlmIChJX0lYT0ZGKHR0eSkgfHwgSV9JWE9OKHR0eSkpIHsKIAkJdW5zaWduZWQgY2hhciBzdG9wX2NoYXIgID0gU1RPUF9DSEFSKHR0eSk7CiAJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKQEAgLTI1NjIsMTQgKzI2ODMsMTcgQEAKIAkJaWYgKCghZWRnZV9zZXJpYWwtPmlzX2VwaWMpIHx8CiAJCSAgICAoKGVkZ2Vfc2VyaWFsLT5pc19lcGljKSAmJgogCQkgICAgIChlZGdlX3NlcmlhbC0+ZXBpY19kZXNjcmlwdG9yLlN1cHBvcnRzLklPU1BTZXRYQ2hhcikpKSB7Ci0JCQlzZW5kX2lvc3BfZXh0X2NtZChlZGdlX3BvcnQsIElPU1BfQ01EX1NFVF9YT05fQ0hBUiwgc3RhcnRfY2hhcik7Ci0JCQlzZW5kX2lvc3BfZXh0X2NtZChlZGdlX3BvcnQsIElPU1BfQ01EX1NFVF9YT0ZGX0NIQVIsIHN0b3BfY2hhcik7CisJCQlzZW5kX2lvc3BfZXh0X2NtZChlZGdlX3BvcnQsCisJCQkJCUlPU1BfQ01EX1NFVF9YT05fQ0hBUiwgc3RhcnRfY2hhcik7CisJCQlzZW5kX2lvc3BfZXh0X2NtZChlZGdlX3BvcnQsCisJCQkJCUlPU1BfQ01EX1NFVF9YT0ZGX0NIQVIsIHN0b3BfY2hhcik7CiAJCX0KIAogCQkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIElOQk9VTkQgWE9OL1hPRkYgKi8KIAkJaWYgKElfSVhPRkYodHR5KSkgewogCQkJcnhGbG93IHw9IElPU1BfUlhfRkxPV19YT05fWE9GRjsKLQkJCWRiZygiJXMgLSBJTkJPVU5EIFhPTi9YT0ZGIGlzIGVuYWJsZWQsIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsIF9fZnVuY19fLCBzdGFydF9jaGFyLCBzdG9wX2NoYXIpOworCQkJZGJnKCIlcyAtIElOQk9VTkQgWE9OL1hPRkYgaXMgZW5hYmxlZCwgWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwKKwkJCQkJX19mdW5jX18sIHN0YXJ0X2NoYXIsIHN0b3BfY2hhcik7CiAJCX0gZWxzZSB7CiAJCQlkYmcoIiVzIC0gSU5CT1VORCBYT04vWE9GRiBpcyBkaXNhYmxlZCIsIF9fZnVuY19fKTsKIAkJfQpAQCAtMjU3Nyw3ICsyNzAxLDggQEAKIAkJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBPVVRCT1VORCBYT04vWE9GRiAqLwogCQlpZiAoSV9JWE9OKHR0eSkpIHsKIAkJCXR4RmxvdyB8PSBJT1NQX1RYX0ZMT1dfWE9OX1hPRkY7Ci0JCQlkYmcoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZW5hYmxlZCwgWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwgX19mdW5jX18sIHN0YXJ0X2NoYXIsIHN0b3BfY2hhcik7CisJCQlkYmcoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZW5hYmxlZCwgWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwKKwkJCQkJX19mdW5jX18sIHN0YXJ0X2NoYXIsIHN0b3BfY2hhcik7CiAJCX0gZWxzZSB7CiAJCQlkYmcoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX2Z1bmNfXyk7CiAJCX0KQEAgLTI2MDAsMjAgKzI3MjUsMjAgQEAKIAllZGdlX3BvcnQtPnZhbGlkRGF0YU1hc2sgPSBtYXNrOwogCiAJLyogU2VuZCB0aGUgdXBkYXRlZCBMQ1IgdmFsdWUgdG8gdGhlIEVkZ2VQb3J0ICovCi0Jc3RhdHVzID0gc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihlZGdlX3BvcnQsIExDUiwgZWRnZV9wb3J0LT5zaGFkb3dMQ1IpOwotCWlmIChzdGF0dXMgIT0gMCkgeworCXN0YXR1cyA9IHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIoZWRnZV9wb3J0LCBMQ1IsCisJCQkJCQkJZWRnZV9wb3J0LT5zaGFkb3dMQ1IpOworCWlmIChzdGF0dXMgIT0gMCkKIAkJcmV0dXJuOwotCX0KIAogCS8qIHNldCB1cCB0aGUgTUNSIHJlZ2lzdGVyIGFuZCBzZW5kIGl0IHRvIHRoZSBFZGdlUG9ydCAqLwogCWVkZ2VfcG9ydC0+c2hhZG93TUNSID0gTUNSX01BU1RFUl9JRTsKLQlpZiAoY2ZsYWcgJiBDQkFVRCkgeworCWlmIChjZmxhZyAmIENCQVVEKQogCQllZGdlX3BvcnQtPnNoYWRvd01DUiB8PSAoTUNSX0RUUiB8IE1DUl9SVFMpOwotCX0KLQlzdGF0dXMgPSBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKGVkZ2VfcG9ydCwgTUNSLCBlZGdlX3BvcnQtPnNoYWRvd01DUik7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7CisKKwlzdGF0dXMgPSBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKGVkZ2VfcG9ydCwgTUNSLAorCQkJCQkJZWRnZV9wb3J0LT5zaGFkb3dNQ1IpOworCWlmIChzdGF0dXMgIT0gMCkKIAkJcmV0dXJuOwotCX0KIAogCS8qIERldGVybWluZSBkaXZpc29yIGJhc2VkIG9uIGJhdWQgcmF0ZSAqLwogCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwpAQCAtMjYyMyw3ICsyNzQ4LDcgQEAKIAl9CiAKIAlkYmcoIiVzIC0gYmF1ZCByYXRlID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7Ci0Jc3RhdHVzID0gc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlIChlZGdlX3BvcnQsIGJhdWQpOworCXN0YXR1cyA9IHNlbmRfY21kX3dyaXRlX2JhdWRfcmF0ZShlZGdlX3BvcnQsIGJhdWQpOwogCWlmIChzdGF0dXMgPT0gLTEpIHsKIAkJLyogU3BlZWQgY2hhbmdlIHdhcyBub3QgcG9zc2libGUgLSBwdXQgYmFjayB0aGUgb2xkIHNwZWVkICovCiAJCWJhdWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpOwpAQCAtMjY0MCw3ICsyNzY1LDggQEAKICAqCUFTQ0lJIHJhbmdlLCBidXQgaXQncyBvbmx5IGZvciBkZWJ1Z2dpbmcuLi4KICAqCU5PVEU6IGV4cGVjdHMgdGhlIHVuaWNvZGUgaW4gTEUgZm9ybWF0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIHVuaWNvZGVfdG9fYXNjaWkoY2hhciAqc3RyaW5nLCBpbnQgYnVmbGVuLCBfX2xlMTYgKnVuaWNvZGUsIGludCB1bmljb2RlX3NpemUpCitzdGF0aWMgdm9pZCB1bmljb2RlX3RvX2FzY2lpKGNoYXIgKnN0cmluZywgaW50IGJ1ZmxlbiwKKwkJCQkJX19sZTE2ICp1bmljb2RlLCBpbnQgdW5pY29kZV9zaXplKQogewogCWludCBpOwogCkBAIC0yNjU5LDc1ICsyNzg1LDk5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBnZXRfbWFudWZhY3R1cmluZ19kZXNjCi0gKglyZWFkcyBpbiB0aGUgbWFudWZhY3R1cmluZyBkZXNjcmlwdG9yIGFuZCBzdG9yZXMgaXQgaW50byB0aGUgc2VyaWFsIAorICoJcmVhZHMgaW4gdGhlIG1hbnVmYWN0dXJpbmcgZGVzY3JpcHRvciBhbmQgc3RvcmVzIGl0IGludG8gdGhlIHNlcmlhbAogICoJc3RydWN0dXJlLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBnZXRfbWFudWZhY3R1cmluZ19kZXNjIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCkKK3N0YXRpYyB2b2lkIGdldF9tYW51ZmFjdHVyaW5nX2Rlc2Moc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpCiB7CiAJaW50IHJlc3BvbnNlOwogCiAJZGJnKCJnZXR0aW5nIG1hbnVmYWN0dXJlciBkZXNjcmlwdG9yIik7CiAKLQlyZXNwb25zZSA9IHJvbV9yZWFkIChlZGdlX3NlcmlhbC0+c2VyaWFsLCAoRURHRV9NQU5VRl9ERVNDX0FERFIgJiAweGZmZmYwMDAwKSA+PiAxNiwgCi0JCQkgICAgKF9fdTE2KShFREdFX01BTlVGX0RFU0NfQUREUiAmIDB4MDAwMGZmZmYpLCBFREdFX01BTlVGX0RFU0NfTEVOLAotCQkJICAgIChfX3U4ICopKCZlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvcikpOworCXJlc3BvbnNlID0gcm9tX3JlYWQoZWRnZV9zZXJpYWwtPnNlcmlhbCwKKwkJCQkoRURHRV9NQU5VRl9ERVNDX0FERFIgJiAweGZmZmYwMDAwKSA+PiAxNiwKKwkJCQkoX191MTYpKEVER0VfTUFOVUZfREVTQ19BRERSICYgMHgwMDAwZmZmZiksCisJCQkJRURHRV9NQU5VRl9ERVNDX0xFTiwKKwkJCQkoX191OCAqKSgmZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IpKTsKIAotCWlmIChyZXNwb25zZSA8IDEpIHsKLQkJZGV2X2VycigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICJlcnJvciBpbiBnZXR0aW5nIG1hbnVmYWN0dXJlciBkZXNjcmlwdG9yXG4iKTsKLQl9IGVsc2UgeworCWlmIChyZXNwb25zZSA8IDEpCisJCWRldl9lcnIoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LAorCQkJImVycm9yIGluIGdldHRpbmcgbWFudWZhY3R1cmVyIGRlc2NyaXB0b3JcbiIpOworCWVsc2UgewogCQljaGFyIHN0cmluZ1szMF07CiAJCWRiZygiKipNYW51ZmFjdHVyZXIgRGVzY3JpcHRvciIpOwotCQlkYmcoIiAgUm9tU2l6ZTogICAgICAgICVkSyIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlJvbVNpemUpOwotCQlkYmcoIiAgUmFtU2l6ZTogICAgICAgICVkSyIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlJhbVNpemUpOwotCQlkYmcoIiAgQ3B1UmV2OiAgICAgICAgICVkIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuQ3B1UmV2KTsKLQkJZGJnKCIgIEJvYXJkUmV2OiAgICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkJvYXJkUmV2KTsKLQkJZGJnKCIgIE51bVBvcnRzOiAgICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLk51bVBvcnRzKTsKLQkJZGJnKCIgIERlc2NEYXRlOiAgICAgICAlZC8lZC8lZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkRlc2NEYXRlWzBdLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5EZXNjRGF0ZVsxXSwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGVbMl0rMTkwMCk7CisJCWRiZygiICBSb21TaXplOiAgICAgICAgJWRLIiwKKwkJCWVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlJvbVNpemUpOworCQlkYmcoIiAgUmFtU2l6ZTogICAgICAgICVkSyIsCisJCQllZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5SYW1TaXplKTsKKwkJZGJnKCIgIENwdVJldjogICAgICAgICAlZCIsCisJCQllZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5DcHVSZXYpOworCQlkYmcoIiAgQm9hcmRSZXY6ICAgICAgICVkIiwKKwkJCWVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkJvYXJkUmV2KTsKKwkJZGJnKCIgIE51bVBvcnRzOiAgICAgICAlZCIsCisJCQllZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5OdW1Qb3J0cyk7CisJCWRiZygiICBEZXNjRGF0ZTogICAgICAgJWQvJWQvJWQiLAorCQkJZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGVbMF0sCisJCQllZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5EZXNjRGF0ZVsxXSwKKwkJCWVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkRlc2NEYXRlWzJdKzE5MDApOwogCQl1bmljb2RlX3RvX2FzY2lpKHN0cmluZywgc2l6ZW9mKHN0cmluZyksCi0JCSAgICBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5TZXJpYWxOdW1iZXIsCi0JCSAgICBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5TZXJOdW1MZW5ndGgvMik7CisJCQllZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5TZXJpYWxOdW1iZXIsCisJCQllZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5TZXJOdW1MZW5ndGgvMik7CiAJCWRiZygiICBTZXJpYWxOdW1iZXI6ICVzIiwgc3RyaW5nKTsKIAkJdW5pY29kZV90b19hc2NpaShzdHJpbmcsIHNpemVvZihzdHJpbmcpLAotCQkgICAgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuQXNzZW1ibHlOdW1iZXIsCi0JCSAgICBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Bc3NlbWJseU51bUxlbmd0aC8yKTsKKwkJCWVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkFzc2VtYmx5TnVtYmVyLAorCQkJZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuQXNzZW1ibHlOdW1MZW5ndGgvMik7CiAJCWRiZygiICBBc3NlbWJseU51bWJlcjogJXMiLCBzdHJpbmcpOwogCQl1bmljb2RlX3RvX2FzY2lpKHN0cmluZywgc2l6ZW9mKHN0cmluZyksCiAJCSAgICBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5PZW1Bc3N5TnVtYmVyLAogCQkgICAgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuT2VtQXNzeU51bUxlbmd0aC8yKTsKIAkJZGJnKCIgIE9lbUFzc3lOdW1iZXI6ICAlcyIsIHN0cmluZyk7Ci0JCWRiZygiICBVYXJ0VHlwZTogICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5VYXJ0VHlwZSk7Ci0JCWRiZygiICBJb25QaWQ6ICAgICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Jb25QaWQpOwotCQlkYmcoIiAgSW9uQ29uZmlnOiAgICAgICVkIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuSW9uQ29uZmlnKTsKKwkJZGJnKCIgIFVhcnRUeXBlOiAgICAgICAlZCIsCisJCQllZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5VYXJ0VHlwZSk7CisJCWRiZygiICBJb25QaWQ6ICAgICAgICAgJWQiLAorCQkJZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuSW9uUGlkKTsKKwkJZGJnKCIgIElvbkNvbmZpZzogICAgICAlZCIsCisJCQllZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Jb25Db25maWcpOwogCX0KIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZ2V0X2Jvb3RfZGVzYwotICoJcmVhZHMgaW4gdGhlIGJvb3Rsb2FkZXIgZGVzY3JpcHRvciBhbmQgc3RvcmVzIGl0IGludG8gdGhlIHNlcmlhbCAKKyAqCXJlYWRzIGluIHRoZSBib290bG9hZGVyIGRlc2NyaXB0b3IgYW5kIHN0b3JlcyBpdCBpbnRvIHRoZSBzZXJpYWwKICAqCXN0cnVjdHVyZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZ2V0X2Jvb3RfZGVzYyAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpCitzdGF0aWMgdm9pZCBnZXRfYm9vdF9kZXNjKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKQogewogCWludCByZXNwb25zZTsKIAogCWRiZygiZ2V0dGluZyBib290IGRlc2NyaXB0b3IiKTsKIAotCXJlc3BvbnNlID0gcm9tX3JlYWQgKGVkZ2Vfc2VyaWFsLT5zZXJpYWwsIChFREdFX0JPT1RfREVTQ19BRERSICYgMHhmZmZmMDAwMCkgPj4gMTYsIAotCQkJICAgIChfX3UxNikoRURHRV9CT09UX0RFU0NfQUREUiAmIDB4MDAwMGZmZmYpLCBFREdFX0JPT1RfREVTQ19MRU4sCi0JCQkgICAgKF9fdTggKikoJmVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IpKTsKKwlyZXNwb25zZSA9IHJvbV9yZWFkKGVkZ2Vfc2VyaWFsLT5zZXJpYWwsCisJCQkJKEVER0VfQk9PVF9ERVNDX0FERFIgJiAweGZmZmYwMDAwKSA+PiAxNiwKKwkJCQkoX191MTYpKEVER0VfQk9PVF9ERVNDX0FERFIgJiAweDAwMDBmZmZmKSwKKwkJCQlFREdFX0JPT1RfREVTQ19MRU4sCisJCQkJKF9fdTggKikoJmVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IpKTsKIAotCWlmIChyZXNwb25zZSA8IDEpIHsKLQkJZGV2X2VycigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICJlcnJvciBpbiBnZXR0aW5nIGJvb3QgZGVzY3JpcHRvclxuIik7Ci0JfSBlbHNlIHsKKwlpZiAocmVzcG9uc2UgPCAxKQorCQlkZXZfZXJyKCZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwKKwkJCQkiZXJyb3IgaW4gZ2V0dGluZyBib290IGRlc2NyaXB0b3JcbiIpOworCWVsc2UgewogCQlkYmcoIioqQm9vdCBEZXNjcmlwdG9yOiIpOwotCQlkYmcoIiAgQm9vdENvZGVMZW5ndGg6ICVkIiwgbGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5Cb290Q29kZUxlbmd0aCkpOwotCQlkYmcoIiAgTWFqb3JWZXJzaW9uOiAgICVkIiwgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NYWpvclZlcnNpb24pOwotCQlkYmcoIiAgTWlub3JWZXJzaW9uOiAgICVkIiwgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NaW5vclZlcnNpb24pOwotCQlkYmcoIiAgQnVpbGROdW1iZXI6ICAgICVkIiwgbGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5CdWlsZE51bWJlcikpOwotCQlkYmcoIiAgQ2FwYWJpbGl0aWVzOiAgIDB4JXgiLCBsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkNhcGFiaWxpdGllcykpOwotCQlkYmcoIiAgVUNvbmZpZzA6ICAgICAgICVkIiwgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5VQ29uZmlnMCk7Ci0JCWRiZygiICBVQ29uZmlnMTogICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLlVDb25maWcxKTsKKwkJZGJnKCIgIEJvb3RDb2RlTGVuZ3RoOiAlZCIsCisJCSAgICBsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkJvb3RDb2RlTGVuZ3RoKSk7CisJCWRiZygiICBNYWpvclZlcnNpb246ICAgJWQiLAorCQkJZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NYWpvclZlcnNpb24pOworCQlkYmcoIiAgTWlub3JWZXJzaW9uOiAgICVkIiwKKwkJCWVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWlub3JWZXJzaW9uKTsKKwkJZGJnKCIgIEJ1aWxkTnVtYmVyOiAgICAlZCIsCisJCQlsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkJ1aWxkTnVtYmVyKSk7CisJCWRiZygiICBDYXBhYmlsaXRpZXM6ICAgMHgleCIsCisJCSAgICAgIGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuQ2FwYWJpbGl0aWVzKSk7CisJCWRiZygiICBVQ29uZmlnMDogICAgICAgJWQiLAorCQkJZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5VQ29uZmlnMCk7CisJCWRiZygiICBVQ29uZmlnMTogICAgICAgJWQiLAorCQkJZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5VQ29uZmlnMSk7CiAJfQogfQogCkBAIC0yNzM2LDcgKzI4ODYsNyBAQAogICogbG9hZF9hcHBsaWNhdGlvbl9maXJtd2FyZQogICoJVGhpcyBpcyBjYWxsZWQgdG8gbG9hZCB0aGUgYXBwbGljYXRpb24gZmlybXdhcmUgdG8gdGhlIGRldmljZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBsb2FkX2FwcGxpY2F0aW9uX2Zpcm13YXJlIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCkKK3N0YXRpYyB2b2lkIGxvYWRfYXBwbGljYXRpb25fZmlybXdhcmUoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpCiB7CiAJY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICpyZWM7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKQEAgLTI4MTMsNyArMjk2Myw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZWRnZV9zdGFydHVwCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZWRnZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBlZGdlX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OwpAQCAtMjg1NSwxMCArMzAwNSwxMCBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBlZGdlX2NvbXBhdGliaWxpdHlfYml0cykpOwogCiAJCS8qIGdldCB0aGUgbWFudWZhY3R1cmluZyBkZXNjcmlwdG9yIGZvciB0aGlzIGRldmljZSAqLwotCQlnZXRfbWFudWZhY3R1cmluZ19kZXNjIChlZGdlX3NlcmlhbCk7CisJCWdldF9tYW51ZmFjdHVyaW5nX2Rlc2MoZWRnZV9zZXJpYWwpOwogCiAJCS8qIGdldCB0aGUgYm9vdCBkZXNjcmlwdG9yICovCi0JCWdldF9ib290X2Rlc2MgKGVkZ2Vfc2VyaWFsKTsKKwkJZ2V0X2Jvb3RfZGVzYyhlZGdlX3NlcmlhbCk7CiAKIAkJZ2V0X3Byb2R1Y3RfaW5mbyhlZGdlX3NlcmlhbCk7CiAJfQpAQCAtMjg3OSw0MSArMzAyOSw0MyBAQAogCS8qIElmIG5vdCBhbiBFUGlDIGRldmljZSAqLwogCWlmICghZWRnZV9zZXJpYWwtPmlzX2VwaWMpIHsKIAkJLyogbm93IGxvYWQgdGhlIGFwcGxpY2F0aW9uIGZpcm13YXJlIGludG8gdGhpcyBkZXZpY2UgKi8KLQkJbG9hZF9hcHBsaWNhdGlvbl9maXJtd2FyZSAoZWRnZV9zZXJpYWwpOworCQlsb2FkX2FwcGxpY2F0aW9uX2Zpcm13YXJlKGVkZ2Vfc2VyaWFsKTsKIAogCQlkYmcoIiVzIC0gdGltZSAyICVsZCIsIF9fZnVuY19fLCBqaWZmaWVzKTsKIAogCQkvKiBDaGVjayBjdXJyZW50IEVkZ2Vwb3J0IEVFUFJPTSBhbmQgdXBkYXRlIGlmIG5lY2Vzc2FyeSAqLwotCQl1cGRhdGVfZWRnZXBvcnRfRTJQUk9NIChlZGdlX3NlcmlhbCk7CisJCXVwZGF0ZV9lZGdlcG9ydF9FMlBST00oZWRnZV9zZXJpYWwpOwogCiAJCWRiZygiJXMgLSB0aW1lIDMgJWxkIiwgX19mdW5jX18sIGppZmZpZXMpOwogCiAJCS8qIHNldCB0aGUgY29uZmlndXJhdGlvbiB0byB1c2UgIzEgKi8KLS8vCQlkYmcoInNldF9jb25maWd1cmF0aW9uIDEiKTsKLS8vCQl1c2Jfc2V0X2NvbmZpZ3VyYXRpb24gKGRldiwgMSk7CisvKgkJZGJnKCJzZXRfY29uZmlndXJhdGlvbiAxIik7ICovCisvKgkJdXNiX3NldF9jb25maWd1cmF0aW9uIChkZXYsIDEpOyAqLwogCX0KIAlkYmcoIiAgRmlybXdhcmVNYWpvclZlcnNpb24gICVkLiVkLiVkIiwKIAkgICAgZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5GaXJtd2FyZU1ham9yVmVyc2lvbiwKIAkgICAgZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5GaXJtd2FyZU1pbm9yVmVyc2lvbiwKIAkgICAgbGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5GaXJtd2FyZUJ1aWxkTnVtYmVyKSk7CiAKLQkvKiB3ZSBzZXQgdXAgdGhlIHBvaW50ZXJzIHRvIHRoZSBlbmRwb2ludHMgaW4gdGhlIGVkZ2Vfb3BlbiBmdW5jdGlvbiwgCisJLyogd2Ugc2V0IHVwIHRoZSBwb2ludGVycyB0byB0aGUgZW5kcG9pbnRzIGluIHRoZSBlZGdlX29wZW4gZnVuY3Rpb24sCiAJICogYXMgdGhlIHN0cnVjdHVyZXMgYXJlbid0IGNyZWF0ZWQgeWV0LiAqLwogCiAJLyogc2V0IHVwIG91ciBwb3J0IHByaXZhdGUgc3RydWN0dXJlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7Ci0JCWVkZ2VfcG9ydCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCksIEdGUF9LRVJORUwpOworCQllZGdlX3BvcnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAoZWRnZV9wb3J0ID09IE5VTEwpIHsKLQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsCisJCQkJCQkJCSAgIF9fZnVuY19fKTsKIAkJCWZvciAoaiA9IDA7IGogPCBpOyArK2opIHsKLQkJCQlrZnJlZSAodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtqXSkpOwotCQkJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbal0sICBOVUxMKTsKKwkJCQlrZnJlZSh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2pdKSk7CisJCQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtqXSwKKwkJCQkJCQkJCU5VTEwpOwogCQkJfQogCQkJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOwogCQkJa2ZyZWUoZWRnZV9zZXJpYWwpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJbWVtc2V0IChlZGdlX3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCkpOworCQltZW1zZXQoZWRnZV9wb3J0LCAwLCBzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3BvcnQpKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmVkZ2VfcG9ydC0+ZXBfbG9jayk7CiAJCWVkZ2VfcG9ydC0+cG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgZWRnZV9wb3J0KTsKQEAgLTI5MjIsMTQgKzMwNzQsMTYgQEAKIAlyZXNwb25zZSA9IDA7CiAKIAlpZiAoZWRnZV9zZXJpYWwtPmlzX2VwaWMpIHsKLQkJLyogRVBJQyB0aGluZywgc2V0IHVwIG91ciBpbnRlcnJ1cHQgcG9sbGluZyBub3cgYW5kIG91ciByZWFkIHVyYiwgc28KLQkJICogdGhhdCB0aGUgZGV2aWNlIGtub3dzIGl0IHJlYWxseSBpcyBjb25uZWN0ZWQuICovCisJCS8qIEVQSUMgdGhpbmcsIHNldCB1cCBvdXIgaW50ZXJydXB0IHBvbGxpbmcgbm93IGFuZCBvdXIgcmVhZAorCQkgKiB1cmIsIHNvIHRoYXQgdGhlIGRldmljZSBrbm93cyBpdCByZWFsbHkgaXMgY29ubmVjdGVkLiAqLwogCQlpbnRlcnJ1cHRfaW5fZm91bmQgPSBidWxrX2luX2ZvdW5kID0gYnVsa19vdXRfZm91bmQgPSBmYWxzZTsKLQkJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+aW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPmludGVyZmFjZS0+YWx0c2V0dGluZ1swXQorCQkJCQkJLmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CiAJCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwogCQkJaW50IGJ1ZmZlcl9zaXplOwogCi0JCQllbmRwb2ludCA9ICZzZXJpYWwtPmludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5lbmRwb2ludFtpXS5kZXNjOworCQkJZW5kcG9pbnQgPSAmc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uCisJCQkJCQkJZW5kcG9pbnRbaV0uZGVzYzsKIAkJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAkJCWlmICghaW50ZXJydXB0X2luX2ZvdW5kICYmCiAJCQkgICAgKHVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKSkgewpAQCAtMjkzNyw1OCArMzA5MSw2NyBAQAogCQkJCWRiZygiZm91bmQgaW50ZXJydXB0IGluIik7CiAKIAkJCQkvKiBub3Qgc2V0IHVwIHlldCwgc28gZG8gaXQgbm93ICovCi0JCQkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCQkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiA9CisJCQkJCQl1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQkJCWlmICghZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYikgewogCQkJCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQotCQkJCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIgPQorCQkJCQlrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyKSB7CiAJCQkJCWVycigib3V0IG9mIG1lbW9yeSIpOwogCQkJCQl1c2JfZnJlZV91cmIoZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KLQkJCQllZGdlX3NlcmlhbC0+aW50ZXJydXB0X2luX2VuZHBvaW50ID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCQkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9lbmRwb2ludCA9CisJCQkJCQllbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKIAogCQkJCS8qIHNldCB1cCBvdXIgaW50ZXJydXB0IHVyYiAqLwotCQkJCXVzYl9maWxsX2ludF91cmIoZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwKLQkJCQkJCSBkZXYsCi0JCQkJCQkgdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCi0JCQkJCQkgZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIsCi0JCQkJCQkgYnVmZmVyX3NpemUsCi0JCQkJCQkgZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssCi0JCQkJCQkgZWRnZV9zZXJpYWwsCi0JCQkJCQkgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJCQkJdXNiX2ZpbGxfaW50X3VyYigKKwkJCQkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwKKwkJCQkJZGV2LAorCQkJCQl1c2JfcmN2aW50cGlwZShkZXYsCisJCQkJCQllbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAorCQkJCQlidWZmZXJfc2l6ZSwKKwkJCQkJZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJCQkJCWVkZ2Vfc2VyaWFsLAorCQkJCQllbmRwb2ludC0+YkludGVydmFsKTsKIAogCQkJCWludGVycnVwdF9pbl9mb3VuZCA9IHRydWU7CiAJCQl9CiAKIAkJCWlmICghYnVsa19pbl9mb3VuZCAmJgotCQkJICAgICh1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpKSB7CisJCQkJKHVzYl9lbmRwb2ludF9pc19idWxrX2luKGVuZHBvaW50KSkpIHsKIAkJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KIAkJCQlkYmcoImZvdW5kIGJ1bGsgaW4iKTsKIAogCQkJCS8qIG5vdCBzZXQgdXAgeWV0LCBzbyBkbyBpdCBub3cgKi8KLQkJCQllZGdlX3NlcmlhbC0+cmVhZF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQkJCWVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiA9CisJCQkJCQl1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQkJCWlmICghZWRnZV9zZXJpYWwtPnJlYWRfdXJiKSB7CiAJCQkJCWVycigib3V0IG9mIG1lbW9yeSIpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9Ci0JCQkJZWRnZV9zZXJpYWwtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQkJZWRnZV9zZXJpYWwtPmJ1bGtfaW5fYnVmZmVyID0KKwkJCQkJa21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFlZGdlX3NlcmlhbC0+YnVsa19pbl9idWZmZXIpIHsKLQkJCQkJZXJyICgib3V0IG9mIG1lbW9yeSIpOworCQkJCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKIAkJCQkJdXNiX2ZyZWVfdXJiKGVkZ2Vfc2VyaWFsLT5yZWFkX3VyYik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KLQkJCQllZGdlX3NlcmlhbC0+YnVsa19pbl9lbmRwb2ludCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQkJCWVkZ2Vfc2VyaWFsLT5idWxrX2luX2VuZHBvaW50ID0KKwkJCQkJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOwogCiAJCQkJLyogc2V0IHVwIG91ciBidWxrIGluIHVyYiAqLwogCQkJCXVzYl9maWxsX2J1bGtfdXJiKGVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiwgZGV2LAotCQkJCQkJICB1c2JfcmN2YnVsa3BpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCi0JCQkJCQkgIGVkZ2Vfc2VyaWFsLT5idWxrX2luX2J1ZmZlciwKLQkJCQkJCSAgbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSwKLQkJCQkJCSAgZWRnZV9idWxrX2luX2NhbGxiYWNrLAotCQkJCQkJICBlZGdlX3NlcmlhbCk7CisJCQkJCXVzYl9yY3ZidWxrcGlwZShkZXYsCisJCQkJCQllbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCWVkZ2Vfc2VyaWFsLT5idWxrX2luX2J1ZmZlciwKKwkJCQkJbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSwKKwkJCQkJZWRnZV9idWxrX2luX2NhbGxiYWNrLAorCQkJCQllZGdlX3NlcmlhbCk7CiAJCQkJYnVsa19pbl9mb3VuZCA9IHRydWU7CiAJCQl9CiAKQEAgLTI5OTYsMjEgKzMxNTksMjQgQEAKIAkJCSAgICAodXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KGVuZHBvaW50KSkpIHsKIAkJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgb3V0IGVuZHBvaW50ICovCiAJCQkJZGJnKCJmb3VuZCBidWxrIG91dCIpOwotCQkJCWVkZ2Vfc2VyaWFsLT5idWxrX291dF9lbmRwb2ludCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQkJCWVkZ2Vfc2VyaWFsLT5idWxrX291dF9lbmRwb2ludCA9CisJCQkJCQllbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKIAkJCQlidWxrX291dF9mb3VuZCA9IHRydWU7CiAJCQl9CiAJCX0KIAogCQlpZiAoIWludGVycnVwdF9pbl9mb3VuZCB8fCAhYnVsa19pbl9mb3VuZCB8fCAhYnVsa19vdXRfZm91bmQpIHsKLQkJCWVyciAoIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgd2VyZSBub3QgZm91bmQhIik7CisJCQllcnIoIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgd2VyZSBub3QgZm91bmQhIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCS8qIHN0YXJ0IGludGVycnVwdCByZWFkIGZvciB0aGlzIGVkZ2Vwb3J0IHRoaXMgaW50ZXJydXB0IHdpbGwKIAkJICogY29udGludWUgYXMgbG9uZyBhcyB0aGUgZWRnZXBvcnQgaXMgY29ubmVjdGVkICovCi0JCXJlc3BvbnNlID0gdXNiX3N1Ym1pdF91cmIoZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJCXJlc3BvbnNlID0gdXNiX3N1Ym1pdF91cmIoZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXNwb25zZSkKLQkJCWVycigiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiIiwgX19mdW5jX18sIHJlc3BvbnNlKTsKKwkJCWVycigiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzcG9uc2UpOwogCX0KIAlyZXR1cm4gcmVzcG9uc2U7CiB9CkBAIC0zMDIwLDcgKzMxODYsNyBAQAogICogZWRnZV9zaHV0ZG93bgogICoJVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHVzYiBidXMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIGVkZ2Vfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBlZGdlX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAJaW50IGk7CkBAIC0zMDI4LDggKzMxOTQsOCBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAkvKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICovCi0JZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7Ci0JCWtmcmVlICh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKSk7CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJa2ZyZWUodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSkpOwogCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCAgTlVMTCk7CiAJfQogCS8qIGZyZWUgdXAgb3VyIGVuZHBvaW50IHN0dWZmICovCkBAIC0zMDY5LDcgKzMyMzUsNyBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX2VwaWNfZGV2aWNlX3JlZ2lzdGVyOwogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaW9fZHJpdmVyKTsKLQlpZiAocmV0dmFsKSAKKwlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAJYXRvbWljX3NldCgmQ21kVXJicywgMCk7CiAJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOwpAQCAtMzA5NCwxOSArMzI2MCwxOSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBfX2V4aXQgZWRnZXBvcnRfZXhpdCAodm9pZCkKIHsKLQl1c2JfZGVyZWdpc3RlciAoJmlvX2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZWRnZXBvcnRfMnBvcnRfZGV2aWNlKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZlZGdlcG9ydF80cG9ydF9kZXZpY2UpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmVkZ2Vwb3J0Xzhwb3J0X2RldmljZSk7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZXBpY19kZXZpY2UpOworCXVzYl9kZXJlZ2lzdGVyKCZpb19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZWRnZXBvcnRfMnBvcnRfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0XzRwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZlZGdlcG9ydF84cG9ydF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZXBpY19kZXZpY2UpOwogfQogCiBtb2R1bGVfaW5pdChlZGdlcG9ydF9pbml0KTsKIG1vZHVsZV9leGl0KGVkZ2Vwb3J0X2V4aXQpOwogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0ZJUk1XQVJFKCJlZGdlcG9ydC9ib290LmZ3Iik7CiBNT0RVTEVfRklSTVdBUkUoImVkZ2Vwb3J0L2Jvb3QyLmZ3Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKaW5kZXggMmVjODU4OS4uN2ViOWQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaApAQCAtOCw3ICs4LDcgQEAKICAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqLwogCiAjaWZuZGVmIElPX1RBQkxFU19ICkBAIC05MCwxMCArOTAsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BWElPSE0sIEFYSU9ITV9ERVZJQ0VfSURfRVBJQ19BNzU4KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FYSU9ITSwgQVhJT0hNX0RFVklDRV9JRF9FUElDX0E3OTQpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVhJT0hNLCBBWElPSE1fREVWSUNFX0lEX0VQSUNfQTIyNSkgfSwKLQl7IH0JCQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlvX2RyaXZlciA9IHsKIAkubmFtZSA9CQkiaW9fZWRnZXBvcnQiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwppbmRleCA2MWRhZWEzLi5jYjRjNTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwpAQCAtMTgsOCArMTgsOCBAQAogICoKICAqIFZlcnNpb24gaGlzdG9yeToKICAqCi0gKglKdWx5IDExLCAyMDAyIAlSZW1vdmVkIDQgcG9ydCBkZXZpY2Ugc3RydWN0dXJlIHNpbmNlIGFsbCBUSSBVTVAgCi0gKgkJCWNoaXBzIGhhdmUgb25seSAyIHBvcnRzIAorICoJSnVseSAxMSwgMjAwMiAJUmVtb3ZlZCA0IHBvcnQgZGV2aWNlIHN0cnVjdHVyZSBzaW5jZSBhbGwgVEkgVU1QCisgKgkJCWNoaXBzIGhhdmUgb25seSAyIHBvcnRzCiAgKgkJCURhdmlkIElhY292ZWxsaSAoZGF2aWRpQGlvbmV0d29ya3MuY29tKQogICoKICAqLwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAKQEAgLTU3LDE4ICs1NywxOSBAQAogCiAKIHN0cnVjdCBlZGdlcG9ydF91YXJ0X2J1Zl9kZXNjIHsKLQlfX3UzMiBjb3VudDsJCS8vIE51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gYnVmZmVyCisJX191MzIgY291bnQ7CQkvKiBOdW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGluIGJ1ZmZlciAqLwogfTsKIAogLyogZGlmZmVyZW50IGhhcmR3YXJlIHR5cGVzICovCiAjZGVmaW5lIEhBUkRXQVJFX1RZUEVfOTMwCTAKICNkZWZpbmUgSEFSRFdBUkVfVFlQRV9USVVNUAkxCiAKLS8vIElPQ1RMX1BSSVZBVEVfVElfR0VUX01PREUgRGVmaW5pdGlvbnMKLSNkZWZpbmUJVElfTU9ERV9DT05GSUdVUklORwkwICAgLy8gRGV2aWNlIGhhcyBub3QgZW50ZXJlZCBzdGFydCBkZXZpY2UgCi0jZGVmaW5lCVRJX01PREVfQk9PVAkJMSAgIC8vIFN0YXlpbmcgaW4gYm9vdCBtb2RlCi0jZGVmaW5lIFRJX01PREVfRE9XTkxPQUQJMiAgIC8vIE1hZGUgaXQgdG8gZG93bmxvYWQgbW9kZQotI2RlZmluZSBUSV9NT0RFX1RSQU5TSVRJT05JTkcJMyAgIC8vIEN1cnJlbnRseSBpbiBib290IG1vZGUgYnV0IHRyYW5zaXRpb25pbmcgdG8gZG93bmxvYWQgbW9kZQorLyogSU9DVExfUFJJVkFURV9USV9HRVRfTU9ERSBEZWZpbml0aW9ucyAqLworI2RlZmluZQlUSV9NT0RFX0NPTkZJR1VSSU5HCTAgICAvKiBEZXZpY2UgaGFzIG5vdCBlbnRlcmVkIHN0YXJ0IGRldmljZSAqLworI2RlZmluZQlUSV9NT0RFX0JPT1QJCTEgICAvKiBTdGF5aW5nIGluIGJvb3QgbW9kZQkJICAgKi8KKyNkZWZpbmUgVElfTU9ERV9ET1dOTE9BRAkyICAgLyogTWFkZSBpdCB0byBkb3dubG9hZCBtb2RlCQkgICAqLworI2RlZmluZSBUSV9NT0RFX1RSQU5TSVRJT05JTkcJMyAgIC8qIEN1cnJlbnRseSBpbiBib290IG1vZGUgYnV0CisJCQkJICAgICAgIHRyYW5zaXRpb25pbmcgdG8gZG93bmxvYWQgbW9kZQkgICAqLwogCiAvKiByZWFkIHVyYiBzdGF0ZSAqLwogI2RlZmluZSBFREdFX1JFQURfVVJCX1JVTk5JTkcJMApAQCAtODIsMTAgKzgzLDkgQEAKIAogCiAvKiBQcm9kdWN0IGluZm9ybWF0aW9uIHJlYWQgZnJvbSB0aGUgRWRnZXBvcnQgKi8KLXN0cnVjdCBwcm9kdWN0X2luZm8KLXsKLQlpbnQJVGlNb2RlOwkJCS8vIEN1cnJlbnQgVEkgTW9kZQotCV9fdTgJaGFyZHdhcmVfdHlwZTsJCS8vIFR5cGUgb2YgaGFyZHdhcmUKK3N0cnVjdCBwcm9kdWN0X2luZm8geworCWludAlUaU1vZGU7CQkJLyogQ3VycmVudCBUSSBNb2RlICAqLworCV9fdTgJaGFyZHdhcmVfdHlwZTsJCS8qIFR5cGUgb2YgaGFyZHdhcmUgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIGNpcmN1bGFyIGJ1ZmZlciAqLwpAQCAtMTE2LDcgKzExNiw3IEBACiAJCQkJCQkgICBoYXBwZW4gKi8KIAlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsCSplZGdlX3NlcmlhbDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0OwotCV9fdTggYlVhcnRNb2RlOwkJLyogUG9ydCB0eXBlLCAwOiBSUzIzMiwgZXRjLiAqLyAKKwlfX3U4IGJVYXJ0TW9kZTsJCS8qIFBvcnQgdHlwZSwgMDogUlMyMzIsIGV0Yy4gKi8KIAlzcGlubG9ja190IGVwX2xvY2s7CiAJaW50IGVwX3JlYWRfdXJiX3N0YXRlOwogCWludCBlcF93cml0ZV91cmJfaW5fdXNlOwpAQCAtMTI1LDggKzEyNSw5IEBACiAKIHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgewogCXN0cnVjdCBwcm9kdWN0X2luZm8gcHJvZHVjdF9pbmZvOwotCXU4IFRJX0kyQ19UeXBlOwkJCS8vIFR5cGUgb2YgSTJDIGluIFVNUAotCXU4IFRpUmVhZEkyQzsJCQkvLyBTZXQgdG8gVFJVRSBpZiB3ZSBoYXZlIHJlYWQgdGhlIEkyYyBpbiBCb290IE1vZGUKKwl1OCBUSV9JMkNfVHlwZTsJCQkvKiBUeXBlIG9mIEkyQyBpbiBVTVAgKi8KKwl1OCBUaVJlYWRJMkM7CQkJLyogU2V0IHRvIFRSVUUgaWYgd2UgaGF2ZSByZWFkIHRoZQorCQkJCQkgICBJMmMgaW4gQm9vdCBNb2RlICovCiAJc3RydWN0IG11dGV4IGVzX2xvY2s7CiAJaW50IG51bV9wb3J0c19vcGVuOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CkBAIC0yMTQsNyArMjE1LDcgQEAKIAl7IH0KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlvX2RyaXZlciA9IHsKIAkubmFtZSA9CQkiaW9fdGkiLApAQCAtMjMxLDIwICsyMzIsMjAgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotc3RhdGljIGludCBUSVN0YXlJbkJvb3RNb2RlID0gMDsKIHN0YXRpYyBpbnQgbG93X2xhdGVuY3kgPSBFREdFX0xPV19MQVRFTkNZOwogc3RhdGljIGludCBjbG9zaW5nX3dhaXQgPSBFREdFX0NMT1NJTkdfV0FJVDsKLXN0YXRpYyBpbnQgaWdub3JlX2NwdV9yZXYgPSAwOwotc3RhdGljIGludCBkZWZhdWx0X3VhcnRfbW9kZSA9IDA7CS8qIFJTMjMyICovCitzdGF0aWMgaW50IGlnbm9yZV9jcHVfcmV2Oworc3RhdGljIGludCBkZWZhdWx0X3VhcnRfbW9kZTsJCS8qIFJTMjMyICovCiAKLQotc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpOworc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpOwogCiBzdGF0aWMgdm9pZCBzdG9wX3JlYWQoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCk7CiBzdGF0aWMgaW50IHJlc3RhcnRfcmVhZChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0KTsKIAotc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7Ci1zdGF0aWMgdm9pZCBlZGdlX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBlZGdlX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgZWRnZV9zZW5kKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCiAvKiBzeXNmcyBhdHRyaWJ1dGVzICovCiBzdGF0aWMgaW50IGVkZ2VfY3JlYXRlX3N5c2ZzX2F0dHJzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwpAQCAtMjYyLDg3ICsyNjMsNTcgQEAKIAl1bnNpZ25lZCBpbnQgY291bnQpOwogCiAKLXN0YXRpYyBpbnQgVElSZWFkVmVuZG9yUmVxdWVzdFN5bmMgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQkJX191OAkJcmVxdWVzdCwKLQkJCQlfX3UxNgkJdmFsdWUsCi0JCQkJX191MTYJCWluZGV4LAotCQkJCXU4IAkJKmRhdGEsCi0JCQkJaW50CQlzaXplKQorc3RhdGljIGludCB0aV92cmVhZF9zeW5jKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIF9fdTggcmVxdWVzdCwKKwkJCQlfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKIHsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnIChkZXYsCi0JCQkJdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCi0JCQkJcmVxdWVzdCwKLQkJCQkoVVNCX1RZUEVfVkVORE9SIHwgCi0JCQkJIFVTQl9SRUNJUF9ERVZJQ0UgfCAKLQkJCQkgVVNCX0RJUl9JTiksCi0JCQkJdmFsdWUsCi0JCQkJaW5kZXgsCi0JCQkJZGF0YSwKLQkJCQlzaXplLAotCQkJCTEwMDApOworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCByZXF1ZXN0LAorCQkJKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOKSwKKwkJCXZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSwgMTAwMCk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAJaWYgKHN0YXR1cyAhPSBzaXplKSB7Ci0JCWRiZyAoIiVzIC0gd2FudGVkIHRvIHdyaXRlICVkLCBidXQgb25seSB3cm90ZSAlZCIsCisJCWRiZygiJXMgLSB3YW50ZWQgdG8gd3JpdGUgJWQsIGJ1dCBvbmx5IHdyb3RlICVkIiwKKwkJCQkJICAgICBfX2Z1bmNfXywgc2l6ZSwgc3RhdHVzKTsKKwkJcmV0dXJuIC1FQ09NTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlfdnNlbmRfc3luYyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBfX3U4IHJlcXVlc3QsCisJCQkJX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCByZXF1ZXN0LAorCQkJKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCksCisJCQl2YWx1ZSwgaW5kZXgsIGRhdGEsIHNpemUsIDEwMDApOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCWlmIChzdGF0dXMgIT0gc2l6ZSkgeworCQlkYmcoIiVzIC0gd2FudGVkIHRvIHdyaXRlICVkLCBidXQgb25seSB3cm90ZSAlZCIsCiAJCSAgICAgX19mdW5jX18sIHNpemUsIHN0YXR1cyk7CiAJCXJldHVybiAtRUNPTU07CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkJCV9fdTgJCXJlcXVlc3QsCi0JCQkJX191MTYJCXZhbHVlLAotCQkJCV9fdTE2CQlpbmRleCwKLQkJCQl1OCAJCSpkYXRhLAotCQkJCWludAkJc2l6ZSkKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnIChkZXYsCi0JCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCi0JCQkJcmVxdWVzdCwKLQkJCQkoVVNCX1RZUEVfVkVORE9SIHwgCi0JCQkJIFVTQl9SRUNJUF9ERVZJQ0UgfCAKLQkJCQkgVVNCX0RJUl9PVVQpLAotCQkJCXZhbHVlLAotCQkJCWluZGV4LAotCQkJCWRhdGEsCi0JCQkJc2l6ZSwKLQkJCQkxMDAwKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJcmV0dXJuIHN0YXR1czsKLQlpZiAoc3RhdHVzICE9IHNpemUpIHsKLQkJZGJnICgiJXMgLSB3YW50ZWQgdG8gd3JpdGUgJWQsIGJ1dCBvbmx5IHdyb3RlICVkIiwKLQkJICAgICBfX2Z1bmNfXywgc2l6ZSwgc3RhdHVzKTsKLQkJcmV0dXJuIC1FQ09NTTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgVElXcml0ZUNvbW1hbmRTeW5jIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBfX3U4IGNvbW1hbmQsCitzdGF0aWMgaW50IHNlbmRfY21kKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIF9fdTggY29tbWFuZCwKIAkJCQlfX3U4IG1vZHVsZWlkLCBfX3UxNiB2YWx1ZSwgdTggKmRhdGEsCiAJCQkJaW50IHNpemUpCiB7Ci0JcmV0dXJuIFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChkZXYsCi0JCQkJCSAgY29tbWFuZCwJICAJCS8vIFJlcXVlc3QKLQkJCQkJICB2YWx1ZSwJCQkvLyB3VmFsdWUgCi0JCQkJCSAgbW9kdWxlaWQsCQkJLy8gd0luZGV4Ci0JCQkJCSAgZGF0YSwJCQkJLy8gVHJhbnNmZXJCdWZmZXIKLQkJCQkJICBzaXplKTsJCQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAotCisJcmV0dXJuIHRpX3ZzZW5kX3N5bmMoZGV2LCBjb21tYW5kLCB2YWx1ZSwgbW9kdWxlaWQsIGRhdGEsIHNpemUpOwogfQogCiAvKiBjbGVhciB0eC9yeCBidWZmZXJzIGFuZCBmaWZvIGluIFRJIFVNUCAqLwotc3RhdGljIGludCBUSVB1cmdlRGF0YVN5bmMgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IG1hc2spCitzdGF0aWMgaW50IHB1cmdlX3BvcnQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191MTYgbWFzaykKIHsKIAlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwogCi0JZGJnICgiJXMgLSBwb3J0ICVkLCBtYXNrICV4IiwgX19mdW5jX18sIHBvcnRfbnVtYmVyLCBtYXNrKTsKKwlkYmcoIiVzIC0gcG9ydCAlZCwgbWFzayAleCIsIF9fZnVuY19fLCBwb3J0X251bWJlciwgbWFzayk7CiAKLQlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5zZXJpYWwtPmRldiwKKwlyZXR1cm4gc2VuZF9jbWQocG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkJCVVNUENfUFVSR0VfUE9SVCwKIAkJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKIAkJCQkJbWFzaywKQEAgLTM1MSw5MiArMzIyLDg3IEBACiB9CiAKIC8qKgotICogVElSZWFkRG93bmxvYWRNZW1vcnkgLSBSZWFkIGVkZ2Vwb3J0IG1lbW9yeSBmcm9tIFRJIGNoaXAKKyAqIHJlYWRfZG93bmxvYWRfbWVtIC0gUmVhZCBlZGdlcG9ydCBtZW1vcnkgZnJvbSBUSSBjaGlwCiAgKiBAZGV2OiB1c2IgZGV2aWNlIHBvaW50ZXIKICAqIEBzdGFydF9hZGRyZXNzOiBEZXZpY2UgQ1BVIGFkZHJlc3MgYXQgd2hpY2ggdG8gcmVhZAogICogQGxlbmd0aDogTGVuZ3RoIG9mIGFib3ZlIGRhdGEKICAqIEBhZGRyZXNzX3R5cGU6IENhbiByZWFkIGJvdGggWERBVEEgYW5kIEkyQwogICogQGJ1ZmZlcjogcG9pbnRlciB0byBpbnB1dCBkYXRhIGJ1ZmZlcgogICovCi1zdGF0aWMgaW50IFRJUmVhZERvd25sb2FkTWVtb3J5KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBzdGFydF9hZGRyZXNzLAorc3RhdGljIGludCByZWFkX2Rvd25sb2FkX21lbShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgc3RhcnRfYWRkcmVzcywKIAkJCQlpbnQgbGVuZ3RoLCBfX3U4IGFkZHJlc3NfdHlwZSwgX191OCAqYnVmZmVyKQogewogCWludCBzdGF0dXMgPSAwOwogCV9fdTggcmVhZF9sZW5ndGg7CiAJX19iZTE2IGJlX3N0YXJ0X2FkZHJlc3M7Ci0JCi0JZGJnICgiJXMgLSBAICV4IGZvciAlZCIsIF9fZnVuY19fLCBzdGFydF9hZGRyZXNzLCBsZW5ndGgpOworCisJZGJnKCIlcyAtIEAgJXggZm9yICVkIiwgX19mdW5jX18sIHN0YXJ0X2FkZHJlc3MsIGxlbmd0aCk7CiAKIAkvKiBSZWFkIGluIGJsb2NrcyBvZiA2NCBieXRlcwogCSAqIChUSSBmaXJtd2FyZSBjYW4ndCBoYW5kbGUgbW9yZSB0aGFuIDY0IGJ5dGUgcmVhZHMpCiAJICovCiAJd2hpbGUgKGxlbmd0aCkgewogCQlpZiAobGVuZ3RoID4gNjQpCi0JCQlyZWFkX2xlbmd0aD0gNjQ7CisJCQlyZWFkX2xlbmd0aCA9IDY0OwogCQllbHNlCiAJCQlyZWFkX2xlbmd0aCA9IChfX3U4KWxlbmd0aDsKIAogCQlpZiAocmVhZF9sZW5ndGggPiAxKSB7Ci0JCQlkYmcgKCIlcyAtIEAgJXggZm9yICVkIiwgX19mdW5jX18sCisJCQlkYmcoIiVzIC0gQCAleCBmb3IgJWQiLCBfX2Z1bmNfXywKIAkJCSAgICAgc3RhcnRfYWRkcmVzcywgcmVhZF9sZW5ndGgpOwogCQl9Ci0JCWJlX3N0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmUxNiAoc3RhcnRfYWRkcmVzcyk7Ci0JCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChkZXYsCi0JCQkJCQkgIFVNUENfTUVNT1JZX1JFQUQsCS8vIFJlcXVlc3QKLQkJCQkJCSAgKF9fdTE2KWFkZHJlc3NfdHlwZSwJLy8gd1ZhbHVlIChBZGRyZXNzIHR5cGUpCi0JCQkJCQkgIChfX2ZvcmNlIF9fdTE2KWJlX3N0YXJ0X2FkZHJlc3MsCS8vIHdJbmRleCAoQWRkcmVzcyB0byByZWFkKQotCQkJCQkJICBidWZmZXIsCQkvLyBUcmFuc2ZlckJ1ZmZlcgotCQkJCQkJICByZWFkX2xlbmd0aCk7CS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJCWJlX3N0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmUxNihzdGFydF9hZGRyZXNzKTsKKwkJc3RhdHVzID0gdGlfdnJlYWRfc3luYyhkZXYsIFVNUENfTUVNT1JZX1JFQUQsCisJCQkJCShfX3UxNilhZGRyZXNzX3R5cGUsCisJCQkJCShfX2ZvcmNlIF9fdTE2KWJlX3N0YXJ0X2FkZHJlc3MsCisJCQkJCWJ1ZmZlciwgcmVhZF9sZW5ndGgpOwogCiAJCWlmIChzdGF0dXMpIHsKLQkJCWRiZyAoIiVzIC0gRVJST1IgJXgiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCWRiZygiJXMgLSBFUlJPUiAleCIsIF9fZnVuY19fLCBzdGF0dXMpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCi0JCWlmIChyZWFkX2xlbmd0aCA+IDEpIHsKKwkJaWYgKHJlYWRfbGVuZ3RoID4gMSkKIAkJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmRldi0+ZGV2LCBfX2Z1bmNfXywKIAkJCQkJICAgICAgcmVhZF9sZW5ndGgsIGJ1ZmZlcik7Ci0JCX0KIAogCQkvKiBVcGRhdGUgcG9pbnRlcnMvbGVuZ3RoICovCiAJCXN0YXJ0X2FkZHJlc3MgKz0gcmVhZF9sZW5ndGg7CiAJCWJ1ZmZlciArPSByZWFkX2xlbmd0aDsKIAkJbGVuZ3RoIC09IHJlYWRfbGVuZ3RoOwogCX0KLQkKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgVElSZWFkUmFtIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQorc3RhdGljIGludCByZWFkX3JhbShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgc3RhcnRfYWRkcmVzcywKKwkJCQkJCWludCBsZW5ndGgsIF9fdTggKmJ1ZmZlcikKIHsKLQlyZXR1cm4gVElSZWFkRG93bmxvYWRNZW1vcnkgKGRldiwKLQkJCQkgICAgIHN0YXJ0X2FkZHJlc3MsCi0JCQkJICAgICBsZW5ndGgsCi0JCQkJICAgICBEVEtfQUREUl9TUEFDRV9YREFUQSwKLQkJCQkgICAgIGJ1ZmZlcik7CisJcmV0dXJuIHJlYWRfZG93bmxvYWRfbWVtKGRldiwgc3RhcnRfYWRkcmVzcywgbGVuZ3RoLAorCQkJCQlEVEtfQUREUl9TUEFDRV9YREFUQSwgYnVmZmVyKTsKIH0KIAogLyogUmVhZCBlZGdlcG9ydCBtZW1vcnkgdG8gYSBnaXZlbiBibG9jayAqLwotc3RhdGljIGludCBUSVJlYWRCb290TWVtb3J5IChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsIGludCBzdGFydF9hZGRyZXNzLCBpbnQgbGVuZ3RoLCBfX3U4ICogYnVmZmVyKQorc3RhdGljIGludCByZWFkX2Jvb3RfbWVtKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwKKwkJCQlpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQogewogCWludCBzdGF0dXMgPSAwOwogCWludCBpOwogCi0JZm9yIChpPTA7IGk8IGxlbmd0aDsgaSsrKSB7Ci0JCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAotCQkJCQlVTVBDX01FTU9SWV9SRUFELAkJLy8gUmVxdWVzdAotCQkJCQlzZXJpYWwtPlRJX0kyQ19UeXBlLAkJLy8gd1ZhbHVlIChBZGRyZXNzIHR5cGUpCi0JCQkJCShfX3UxNikoc3RhcnRfYWRkcmVzcytpKSwJLy8gd0luZGV4Ci0JCQkJCSZidWZmZXJbaV0sCQkJLy8gVHJhbnNmZXJCdWZmZXIKLQkJCQkJMHgwMSk7CQkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXN0YXR1cyA9IHRpX3ZyZWFkX3N5bmMoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX01FTU9SWV9SRUFELCBzZXJpYWwtPlRJX0kyQ19UeXBlLAorCQkJCShfX3UxNikoc3RhcnRfYWRkcmVzcytpKSwgJmJ1ZmZlcltpXSwgMHgwMSk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCWRiZyAoIiVzIC0gRVJST1IgJXgiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCWRiZygiJXMgLSBFUlJPUiAleCIsIF9fZnVuY19fLCBzdGF0dXMpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCX0KIAotCWRiZyAoIiVzIC0gc3RhcnRfYWRkcmVzcyA9ICV4LCBsZW5ndGggPSAlZCIsIF9fZnVuY19fLCBzdGFydF9hZGRyZXNzLCBsZW5ndGgpOwotCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19mdW5jX18sIGxlbmd0aCwgYnVmZmVyKTsKKwlkYmcoIiVzIC0gc3RhcnRfYWRkcmVzcyA9ICV4LCBsZW5ndGggPSAlZCIsCisJCQkJCV9fZnVuY19fLCBzdGFydF9hZGRyZXNzLCBsZW5ndGgpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwKKwkJCQkJX19mdW5jX18sIGxlbmd0aCwgYnVmZmVyKTsKIAogCXNlcmlhbC0+VGlSZWFkSTJDID0gMTsKIApAQCAtNDQ0LDcgKzQxMCw4IEBACiB9CiAKIC8qIFdyaXRlIGdpdmVuIGJsb2NrIHRvIFRJIEVQUk9NIG1lbW9yeSAqLwotc3RhdGljIGludCBUSVdyaXRlQm9vdE1lbW9yeSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQorc3RhdGljIGludCB3cml0ZV9ib290X21lbShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsCisJCQkJaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggKmJ1ZmZlcikKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgaTsKQEAgLTQ1Miw1NyArNDE5LDU4IEBACiAKIAkvKiBNdXN0IGRvIGEgcmVhZCBiZWZvcmUgd3JpdGUgKi8KIAlpZiAoIXNlcmlhbC0+VGlSZWFkSTJDKSB7Ci0JCXN0YXR1cyA9IFRJUmVhZEJvb3RNZW1vcnkoc2VyaWFsLCAwLCAxLCAmdGVtcCk7CisJCXN0YXR1cyA9IHJlYWRfYm9vdF9tZW0oc2VyaWFsLCAwLCAxLCAmdGVtcCk7CiAJCWlmIChzdGF0dXMpCiAJCQlyZXR1cm4gc3RhdHVzOwogCX0KIAotCWZvciAoaT0wOyBpIDwgbGVuZ3RoOyArK2kpIHsKLQkJc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCi0JCQkJCQlVTVBDX01FTU9SWV9XUklURSwJCS8vIFJlcXVlc3QKLQkJCQkJCWJ1ZmZlcltpXSwJCQkvLyB3VmFsdWUKLQkJCQkJCShfX3UxNikoaStzdGFydF9hZGRyZXNzKSwJLy8gd0luZGV4Ci0JCQkJCQlOVUxMLAkJCQkvLyBUcmFuc2ZlckJ1ZmZlcgotCQkJCQkJMCk7CQkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisJCXN0YXR1cyA9IHRpX3ZzZW5kX3N5bmMoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX01FTU9SWV9XUklURSwgYnVmZmVyW2ldLAorCQkJCShfX3UxNikoaSArIHN0YXJ0X2FkZHJlc3MpLCBOVUxMLCAwKTsKIAkJaWYgKHN0YXR1cykKIAkJCXJldHVybiBzdGF0dXM7CiAJfQogCi0gIAlkYmcgKCIlcyAtIHN0YXJ0X3NkZHIgPSAleCwgbGVuZ3RoID0gJWQiLCBfX2Z1bmNfXywgc3RhcnRfYWRkcmVzcywgbGVuZ3RoKTsKLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIF9fZnVuY19fLCBsZW5ndGgsIGJ1ZmZlcik7CisJZGJnKCIlcyAtIHN0YXJ0X3NkZHIgPSAleCwgbGVuZ3RoID0gJWQiLAorCQkJCQlfX2Z1bmNfXywgc3RhcnRfYWRkcmVzcywgbGVuZ3RoKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkJCV9fZnVuY19fLCBsZW5ndGgsIGJ1ZmZlcik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAKIC8qIFdyaXRlIGVkZ2Vwb3J0IEkyQyBtZW1vcnkgdG8gVEkgY2hpcAkqLwotc3RhdGljIGludCBUSVdyaXRlRG93bmxvYWRJMkMgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggYWRkcmVzc190eXBlLCBfX3U4ICpidWZmZXIpCitzdGF0aWMgaW50IHdyaXRlX2kyY19tZW0oc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLAorCQlpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCBhZGRyZXNzX3R5cGUsIF9fdTggKmJ1ZmZlcikKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgd3JpdGVfbGVuZ3RoOwogCV9fYmUxNiBiZV9zdGFydF9hZGRyZXNzOwogCiAJLyogV2UgY2FuIG9ubHkgc2VuZCBhIG1heGltdW0gb2YgMSBhbGlnbmVkIGJ5dGUgcGFnZSBhdCBhIHRpbWUgKi8KLQkKKwogCS8qIGNhbHVsYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiB0aGUgZmlyc3QgcGFnZSAqLwotCXdyaXRlX2xlbmd0aCA9IEVQUk9NX1BBR0VfU0laRSAtIChzdGFydF9hZGRyZXNzICYgKEVQUk9NX1BBR0VfU0laRSAtIDEpKTsKKwl3cml0ZV9sZW5ndGggPSBFUFJPTV9QQUdFX1NJWkUgLQorCQkJCShzdGFydF9hZGRyZXNzICYgKEVQUk9NX1BBR0VfU0laRSAtIDEpKTsKIAogCWlmICh3cml0ZV9sZW5ndGggPiBsZW5ndGgpCiAJCXdyaXRlX2xlbmd0aCA9IGxlbmd0aDsKIAotCWRiZyAoIiVzIC0gQnl0ZXNJbkZpcnN0UGFnZSBBZGRyID0gJXgsIGxlbmd0aCA9ICVkIiwgX19mdW5jX18sIHN0YXJ0X2FkZHJlc3MsIHdyaXRlX2xlbmd0aCk7Ci0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX2Z1bmNfXywgd3JpdGVfbGVuZ3RoLCBidWZmZXIpOworCWRiZygiJXMgLSBCeXRlc0luRmlyc3RQYWdlIEFkZHIgPSAleCwgbGVuZ3RoID0gJWQiLAorCQkJCQlfX2Z1bmNfXywgc3RhcnRfYWRkcmVzcywgd3JpdGVfbGVuZ3RoKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkJCQlfX2Z1bmNfXywgd3JpdGVfbGVuZ3RoLCBidWZmZXIpOwogCiAJLyogV3JpdGUgZmlyc3QgcGFnZSAqLwotCWJlX3N0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmUxNiAoc3RhcnRfYWRkcmVzcyk7Ci0Jc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCi0JCQkJCVVNUENfTUVNT1JZX1dSSVRFLAkvLyBSZXF1ZXN0Ci0JCQkJCShfX3UxNilhZGRyZXNzX3R5cGUsCS8vIHdWYWx1ZQotCQkJCQkoX19mb3JjZSBfX3UxNiliZV9zdGFydF9hZGRyZXNzLAkvLyB3SW5kZXgKLQkJCQkJYnVmZmVyLAkJCS8vIFRyYW5zZmVyQnVmZmVyCi0JCQkJCXdyaXRlX2xlbmd0aCk7CisJYmVfc3RhcnRfYWRkcmVzcyA9IGNwdV90b19iZTE2KHN0YXJ0X2FkZHJlc3MpOworCXN0YXR1cyA9IHRpX3ZzZW5kX3N5bmMoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX01FTU9SWV9XUklURSwgKF9fdTE2KWFkZHJlc3NfdHlwZSwKKwkJCQkoX19mb3JjZSBfX3UxNiliZV9zdGFydF9hZGRyZXNzLAorCQkJCWJ1ZmZlciwJd3JpdGVfbGVuZ3RoKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWRiZyAoIiVzIC0gRVJST1IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGJnKCIlcyAtIEVSUk9SICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC01MTAsMjkgKzQ3OCwzMSBAQAogCXN0YXJ0X2FkZHJlc3MJKz0gd3JpdGVfbGVuZ3RoOwogCWJ1ZmZlcgkJKz0gd3JpdGVfbGVuZ3RoOwogCi0JLyogV2Ugc2hvdWxkIGJlIGFsaWduZWQgbm93IC0tIGNhbiB3cml0ZSBtYXggcGFnZSBzaXplIGJ5dGVzIGF0IGEgdGltZSAqLworCS8qIFdlIHNob3VsZCBiZSBhbGlnbmVkIG5vdyAtLSBjYW4gd3JpdGUKKwkgICBtYXggcGFnZSBzaXplIGJ5dGVzIGF0IGEgdGltZSAqLwogCXdoaWxlIChsZW5ndGgpIHsKIAkJaWYgKGxlbmd0aCA+IEVQUk9NX1BBR0VfU0laRSkKIAkJCXdyaXRlX2xlbmd0aCA9IEVQUk9NX1BBR0VfU0laRTsKIAkJZWxzZQogCQkJd3JpdGVfbGVuZ3RoID0gbGVuZ3RoOwogCi0JCWRiZyAoIiVzIC0gUGFnZSBXcml0ZSBBZGRyID0gJXgsIGxlbmd0aCA9ICVkIiwgX19mdW5jX18sIHN0YXJ0X2FkZHJlc3MsIHdyaXRlX2xlbmd0aCk7Ci0JCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19mdW5jX18sIHdyaXRlX2xlbmd0aCwgYnVmZmVyKTsKKwkJZGJnKCIlcyAtIFBhZ2UgV3JpdGUgQWRkciA9ICV4LCBsZW5ndGggPSAlZCIsCisJCQkJCV9fZnVuY19fLCBzdGFydF9hZGRyZXNzLCB3cml0ZV9sZW5ndGgpOworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkJCV9fZnVuY19fLCB3cml0ZV9sZW5ndGgsIGJ1ZmZlcik7CiAKIAkJLyogV3JpdGUgbmV4dCBwYWdlICovCi0JCWJlX3N0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmUxNiAoc3RhcnRfYWRkcmVzcyk7Ci0JCXN0YXR1cyA9IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAotCQkJCQkJVU1QQ19NRU1PUllfV1JJVEUsCS8vIFJlcXVlc3QKLQkJCQkJCShfX3UxNilhZGRyZXNzX3R5cGUsCS8vIHdWYWx1ZQotCQkJCQkJKF9fZm9yY2UgX191MTYpYmVfc3RhcnRfYWRkcmVzcywJLy8gd0luZGV4Ci0JCQkJCQlidWZmZXIsCSAgCQkvLyBUcmFuc2ZlckJ1ZmZlcgotCQkJCQkJd3JpdGVfbGVuZ3RoKTsJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJCWJlX3N0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmUxNihzdGFydF9hZGRyZXNzKTsKKwkJc3RhdHVzID0gdGlfdnNlbmRfc3luYyhzZXJpYWwtPnNlcmlhbC0+ZGV2LCBVTVBDX01FTU9SWV9XUklURSwKKwkJCQkoX191MTYpYWRkcmVzc190eXBlLAorCQkJCShfX2ZvcmNlIF9fdTE2KWJlX3N0YXJ0X2FkZHJlc3MsCisJCQkJYnVmZmVyLCB3cml0ZV9sZW5ndGgpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZXJyICgmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBFUlJPUiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQlkZXZfZXJyKCZzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIEVSUk9SICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KLQkJCisKIAkJbGVuZ3RoCQktPSB3cml0ZV9sZW5ndGg7CiAJCXN0YXJ0X2FkZHJlc3MJKz0gd3JpdGVfbGVuZ3RoOwogCQlidWZmZXIJCSs9IHdyaXRlX2xlbmd0aDsKQEAgLTU0MSwyNSArNTExLDI1IEBACiB9CiAKIC8qIEV4YW1pbmUgdGhlIFVNUCBETUEgcmVnaXN0ZXJzIGFuZCBMU1IKLSAqIAorICoKICAqIENoZWNrIHRoZSBNU0JpdCBvZiB0aGUgWCBhbmQgWSBETUEgYnl0ZSBjb3VudCByZWdpc3RlcnMuCiAgKiBBIHplcm8gaW4gdGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIFRYIERNQSBidWZmZXJzIGFyZSBlbXB0eQogICogdGhlbiBjaGVjayB0aGUgVFggRW1wdHkgYml0IGluIHRoZSBVQVJULgogICovCi1zdGF0aWMgaW50IFRJSXNUeEFjdGl2ZSAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHR4X2FjdGl2ZShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKIHsKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBvdXRfZW5kcG9pbnRfZGVzY19ibG9jayAqb2VkYjsKIAlfX3U4ICpsc3I7CiAJaW50IGJ5dGVzX2xlZnQgPSAwOwogCi0Jb2VkYiA9IGttYWxsb2MgKHNpemVvZiAoKiBvZWRiKSwgR0ZQX0tFUk5FTCk7CisJb2VkYiA9IGttYWxsb2Moc2l6ZW9mKCpvZWRiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvZWRiKSB7Ci0JCWRldl9lcnIgKCZwb3J0LT5wb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWxzciA9IGttYWxsb2MgKDEsIEdGUF9LRVJORUwpOwkvKiBTaWdoLCB0aGF0J3MgcmlnaHQsIGp1c3Qgb25lIGJ5dGUsCisJbHNyID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsJLyogU2lnaCwgdGhhdCdzIHJpZ2h0LCBqdXN0IG9uZSBieXRlLAogCQkJCQkgICBhcyBub3QgYWxsIHBsYXRmb3JtcyBjYW4gZG8gRE1BCiAJCQkJCSAgIGZyb20gc3RhY2sgKi8KIAlpZiAoIWxzcikgewpAQCAtNTY3LDUxICs1MzcsNDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCS8qIFJlYWQgdGhlIERNQSBDb3VudCBSZWdpc3RlcnMgKi8KLQlzdGF0dXMgPSBUSVJlYWRSYW0gKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJICAgIHBvcnQtPmRtYV9hZGRyZXNzLAotCQkJICAgIHNpemVvZiggKm9lZGIpLAotCQkJICAgICh2b2lkICopb2VkYik7Ci0KKwlzdGF0dXMgPSByZWFkX3JhbShwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+ZG1hX2FkZHJlc3MsCisJCQkJCQlzaXplb2YoKm9lZGIpLCAodm9pZCAqKW9lZGIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gZXhpdF9pc190eF9hY3RpdmU7CiAKLQlkYmcgKCIlcyAtIFhCeXRlQ291bnQgICAgMHglWCIsIF9fZnVuY19fLCBvZWRiLT5YQnl0ZUNvdW50KTsKKwlkYmcoIiVzIC0gWEJ5dGVDb3VudCAgICAweCVYIiwgX19mdW5jX18sIG9lZGItPlhCeXRlQ291bnQpOwogCiAJLyogYW5kIHRoZSBMU1IgKi8KLQlzdGF0dXMgPSBUSVJlYWRSYW0gKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LCAKLQkJCSAgICBwb3J0LT51YXJ0X2Jhc2UgKyBVTVBNRU1fT0ZGU19VQVJUX0xTUiwKLQkJCSAgICAxLAotCQkJICAgIGxzcik7CisJc3RhdHVzID0gcmVhZF9yYW0ocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQlwb3J0LT51YXJ0X2Jhc2UgKyBVTVBNRU1fT0ZGU19VQVJUX0xTUiwgMSwgbHNyKTsKIAogCWlmIChzdGF0dXMpCiAJCWdvdG8gZXhpdF9pc190eF9hY3RpdmU7Ci0JZGJnICgiJXMgLSBMU1IgPSAweCVYIiwgX19mdW5jX18sICpsc3IpOwotCQorCWRiZygiJXMgLSBMU1IgPSAweCVYIiwgX19mdW5jX18sICpsc3IpOworCiAJLyogSWYgZWl0aGVyIGJ1ZmZlciBoYXMgZGF0YSBvciB3ZSBhcmUgdHJhbnNtaXR0aW5nIHRoZW4gcmV0dXJuIFRSVUUgKi8KLQlpZiAoKG9lZGItPlhCeXRlQ291bnQgJiAweDgwICkgIT0gMCApCisJaWYgKChvZWRiLT5YQnl0ZUNvdW50ICYgMHg4MCkgIT0gMCkKIAkJYnl0ZXNfbGVmdCArPSA2NDsKIAotCWlmICgoKmxzciAmIFVNUF9VQVJUX0xTUl9UWF9NQVNLICkgPT0gMCApCisJaWYgKCgqbHNyICYgVU1QX1VBUlRfTFNSX1RYX01BU0spID09IDApCiAJCWJ5dGVzX2xlZnQgKz0gMTsKIAogCS8qIFdlIHJldHVybiBOb3QgQWN0aXZlIGlmIHdlIGdldCBhbnkga2luZCBvZiBlcnJvciAqLwogZXhpdF9pc190eF9hY3RpdmU6Ci0JZGJnICgiJXMgLSByZXR1cm4gJWQiLCBfX2Z1bmNfXywgYnl0ZXNfbGVmdCApOworCWRiZygiJXMgLSByZXR1cm4gJWQiLCBfX2Z1bmNfXywgYnl0ZXNfbGVmdCk7CiAKIAlrZnJlZShsc3IpOwogCWtmcmVlKG9lZGIpOwogCXJldHVybiBieXRlc19sZWZ0OwogfQogCi1zdGF0aWMgdm9pZCBUSUNoYXNlUG9ydChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBpbnQgZmx1c2gpCitzdGF0aWMgdm9pZCBjaGFzZV9wb3J0KHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsCisJCQkJCQkJCWludCBmbHVzaCkKIHsKIAlpbnQgYmF1ZF9yYXRlOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnBvcnQtPnBvcnQudHR5OwogCXdhaXRfcXVldWVfdCB3YWl0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXRpbWVvdXQpCi0JCXRpbWVvdXQgPSAoSFoqRURHRV9DTE9TSU5HX1dBSVQpLzEwMDsKKwkJdGltZW91dCA9IChIWiAqIEVER0VfQ0xPU0lOR19XQUlUKS8xMDA7CiAKIAkvKiB3YWl0IGZvciBkYXRhIHRvIGRyYWluIGZyb20gdGhlIGJ1ZmZlciAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5lcF9sb2NrLCBmbGFncyk7CkBAIC02MjEsNyArNTg3LDggQEAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKGVkZ2VfYnVmX2RhdGFfYXZhaWwocG9ydC0+ZXBfb3V0X2J1ZikgPT0gMAogCQl8fCB0aW1lb3V0ID09IDAgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKLQkJfHwgIXVzYl9nZXRfaW50ZmRhdGEocG9ydC0+cG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpKSAgLyogZGlzY29ubmVjdCAqLworCQl8fCAhdXNiX2dldF9pbnRmZGF0YShwb3J0LT5wb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpCisJCQkvKiBkaXNjb25uZWN0ICovCiAJCQlicmVhazsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOwogCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKQEAgLTYzNiw4ICs2MDMsOSBAQAogCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSB0aGUgZGV2aWNlICovCiAJdGltZW91dCArPSBqaWZmaWVzOwogCXdoaWxlICgobG9uZykoamlmZmllcyAtIHRpbWVvdXQpIDwgMCAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKLQkmJiB1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkgeyAgLyogbm90IGRpc2Nvbm5lY3RlZCAqLwotCQlpZiAoIVRJSXNUeEFjdGl2ZShwb3J0KSkKKwkmJiB1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkgeworCQkvKiBub3QgZGlzY29ubmVjdGVkICovCisJCWlmICghdHhfYWN0aXZlKHBvcnQpKQogCQkJYnJlYWs7CiAJCW1zbGVlcCgxMCk7CiAJfQpAQCAtNjQ3LDcyICs2MTUsNzIgQEAKIAkJcmV0dXJuOwogCiAJLyogd2FpdCBvbmUgbW9yZSBjaGFyYWN0ZXIgdGltZSwgYmFzZWQgb24gYmF1ZCByYXRlICovCi0JLyogKFRJSXNUeEFjdGl2ZSBkb2Vzbid0IHNlZW0gdG8gd2FpdCBmb3IgdGhlIGxhc3QgYnl0ZSkgKi8KLQlpZiAoKGJhdWRfcmF0ZT1wb3J0LT5iYXVkX3JhdGUpID09IDApCisJLyogKHR4X2FjdGl2ZSBkb2Vzbid0IHNlZW0gdG8gd2FpdCBmb3IgdGhlIGxhc3QgYnl0ZSkgKi8KKwliYXVkX3JhdGUgPSBwb3J0LT5iYXVkX3JhdGU7CisJaWYgKGJhdWRfcmF0ZSA9PSAwKQogCQliYXVkX3JhdGUgPSA1MDsKIAltc2xlZXAobWF4KDEsIERJVl9ST1VORF9VUCgxMDAwMCwgYmF1ZF9yYXRlKSkpOwogfQogCi1zdGF0aWMgaW50IFRJQ2hvb3NlQ29uZmlndXJhdGlvbiAoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY2hvb3NlX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQogewotCS8vIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyBvbiB0aGlzIGRldmljZSwgaW4gd2hpY2ggY2FzZQotCS8vIHdlIHdvdWxkIG5lZWQgdG8gcmVhZCBhbmQgcGFyc2UgYWxsIG9mIHRoZW0gdG8gZmluZCBvdXQgd2hpY2ggb25lCi0JLy8gd2Ugd2FudC4gSG93ZXZlciwgd2UganVzdCBzdXBwb3J0IG9uZSBjb25maWcgYXQgdGhpcyBwb2ludCwKLQkvLyBjb25maWd1cmF0aW9uICMgMSwgd2hpY2ggaXMgQ29uZmlnIERlc2NyaXB0b3IgMC4KKwkvKgorCSAqIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyBvbiB0aGlzIGRldmljZSwgaW4gd2hpY2ggY2FzZQorCSAqIHdlIHdvdWxkIG5lZWQgdG8gcmVhZCBhbmQgcGFyc2UgYWxsIG9mIHRoZW0gdG8gZmluZCBvdXQgd2hpY2ggb25lCisJICogd2Ugd2FudC4gSG93ZXZlciwgd2UganVzdCBzdXBwb3J0IG9uZSBjb25maWcgYXQgdGhpcyBwb2ludCwKKwkgKiBjb25maWd1cmF0aW9uICMgMSwgd2hpY2ggaXMgQ29uZmlnIERlc2NyaXB0b3IgMC4KKwkgKi8KIAotCWRiZyAoIiVzIC0gTnVtYmVyIG9mIEludGVyZmFjZXMgPSAlZCIsIF9fZnVuY19fLCBkZXYtPmNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlcyk7Ci0JZGJnICgiJXMgLSBNQVggUG93ZXIgICAgICAgICAgICA9ICVkIiwgX19mdW5jX18sIGRldi0+Y29uZmlnLT5kZXNjLmJNYXhQb3dlcioyKTsKKwlkYmcoIiVzIC0gTnVtYmVyIG9mIEludGVyZmFjZXMgPSAlZCIsCisJCQkJX19mdW5jX18sIGRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzKTsKKwlkYmcoIiVzIC0gTUFYIFBvd2VyICAgICAgICAgICAgPSAlZCIsCisJCQkJX19mdW5jX18sIGRldi0+Y29uZmlnLT5kZXNjLmJNYXhQb3dlciAqIDIpOwogCiAJaWYgKGRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzICE9IDEpIHsKLQkJZGV2X2VyciAoJmRldi0+ZGV2LCAiJXMgLSBiTnVtSW50ZXJmYWNlcyBpcyBub3QgMSwgRVJST1IhXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBiTnVtSW50ZXJmYWNlcyBpcyBub3QgMSwgRVJST1IhXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IFRJUmVhZFJvbSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQorc3RhdGljIGludCByZWFkX3JvbShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsCisJCQkJaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggKmJ1ZmZlcikKIHsKIAlpbnQgc3RhdHVzOwogCiAJaWYgKHNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9PSBUSV9NT0RFX0RPV05MT0FEKSB7Ci0JCXN0YXR1cyA9IFRJUmVhZERvd25sb2FkTWVtb3J5IChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQlzdGF0dXMgPSByZWFkX2Rvd25sb2FkX21lbShzZXJpYWwtPnNlcmlhbC0+ZGV2LAogCQkJCQkgICAgICAgc3RhcnRfYWRkcmVzcywKIAkJCQkJICAgICAgIGxlbmd0aCwKIAkJCQkJICAgICAgIHNlcmlhbC0+VElfSTJDX1R5cGUsCiAJCQkJCSAgICAgICBidWZmZXIpOwogCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IFRJUmVhZEJvb3RNZW1vcnkgKHNlcmlhbCwKLQkJCQkJICAgc3RhcnRfYWRkcmVzcywKLQkJCQkJICAgbGVuZ3RoLAotCQkJCQkgICBidWZmZXIpOworCQlzdGF0dXMgPSByZWFkX2Jvb3RfbWVtKHNlcmlhbCwgc3RhcnRfYWRkcmVzcywgbGVuZ3RoLAorCQkJCQkJCQlidWZmZXIpOwogCX0KLQogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgVElXcml0ZVJvbSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQorc3RhdGljIGludCB3cml0ZV9yb20oc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgc3RhcnRfYWRkcmVzcywKKwkJCQkJCWludCBsZW5ndGgsIF9fdTggKmJ1ZmZlcikKIHsKIAlpZiAoc2VyaWFsLT5wcm9kdWN0X2luZm8uVGlNb2RlID09IFRJX01PREVfQk9PVCkKLQkJcmV0dXJuIFRJV3JpdGVCb290TWVtb3J5IChzZXJpYWwsCi0JCQkJCSAgc3RhcnRfYWRkcmVzcywKLQkJCQkJICBsZW5ndGgsCi0JCQkJCSAgYnVmZmVyKTsKKwkJcmV0dXJuIHdyaXRlX2Jvb3RfbWVtKHNlcmlhbCwgc3RhcnRfYWRkcmVzcywgbGVuZ3RoLAorCQkJCQkJCQlidWZmZXIpOwogCiAJaWYgKHNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9PSBUSV9NT0RFX0RPV05MT0FEKQotCQlyZXR1cm4gVElXcml0ZURvd25sb2FkSTJDIChzZXJpYWwsCi0JCQkJCSAgIHN0YXJ0X2FkZHJlc3MsCi0JCQkJCSAgIGxlbmd0aCwKLQkJCQkJICAgc2VyaWFsLT5USV9JMkNfVHlwZSwKLQkJCQkJICAgYnVmZmVyKTsKLQorCQlyZXR1cm4gd3JpdGVfaTJjX21lbShzZXJpYWwsIHN0YXJ0X2FkZHJlc3MsIGxlbmd0aCwKKwkJCQkJCXNlcmlhbC0+VElfSTJDX1R5cGUsIGJ1ZmZlcik7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIAogCiAvKiBSZWFkIGEgZGVzY3JpcHRvciBoZWFkZXIgZnJvbSBJMkMgYmFzZWQgb24gdHlwZSAqLwotc3RhdGljIGludCBUSUdldERlc2NyaXB0b3JBZGRyZXNzIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsIGludCBkZXNjX3R5cGUsIHN0cnVjdCB0aV9pMmNfZGVzYyAqcm9tX2Rlc2MpCitzdGF0aWMgaW50IGdldF9kZXNjcmlwdG9yX2FkZHIoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLAorCQkJCWludCBkZXNjX3R5cGUsIHN0cnVjdCB0aV9pMmNfZGVzYyAqcm9tX2Rlc2MpCiB7CiAJaW50IHN0YXJ0X2FkZHJlc3M7CiAJaW50IHN0YXR1czsKQEAgLTcyMCw0MSArNjg4LDQyIEBACiAJLyogU2VhcmNoIGZvciByZXF1ZXN0ZWQgZGVzY3JpcHRvciBpbiBJMkMgKi8KIAlzdGFydF9hZGRyZXNzID0gMjsKIAlkbyB7Ci0JCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQlzdGF0dXMgPSByZWFkX3JvbShzZXJpYWwsCiAJCQkJICAgc3RhcnRfYWRkcmVzcywKIAkJCQkgICBzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKLQkJCQkgICAoX191OCAqKXJvbV9kZXNjICk7CisJCQkJICAgKF9fdTggKilyb21fZGVzYyk7CiAJCWlmIChzdGF0dXMpCiAJCQlyZXR1cm4gMDsKIAogCQlpZiAocm9tX2Rlc2MtPlR5cGUgPT0gZGVzY190eXBlKQogCQkJcmV0dXJuIHN0YXJ0X2FkZHJlc3M7CiAKLQkJc3RhcnRfYWRkcmVzcyA9IHN0YXJ0X2FkZHJlc3MgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSArICByb21fZGVzYy0+U2l6ZTsKKwkJc3RhcnRfYWRkcmVzcyA9IHN0YXJ0X2FkZHJlc3MgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKQorCQkJCQkJCSsgcm9tX2Rlc2MtPlNpemU7CiAKIAl9IHdoaWxlICgoc3RhcnRfYWRkcmVzcyA8IFRJX01BWF9JMkNfU0laRSkgJiYgcm9tX2Rlc2MtPlR5cGUpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKIC8qIFZhbGlkYXRlIGRlc2NyaXB0b3IgY2hlY2tzdW0gKi8KLXN0YXRpYyBpbnQgVmFsaWRDaGVja3N1bShzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjLCBfX3U4ICpidWZmZXIpCitzdGF0aWMgaW50IHZhbGlkX2NzdW0oc3RydWN0IHRpX2kyY19kZXNjICpyb21fZGVzYywgX191OCAqYnVmZmVyKQogewogCV9fdTE2IGk7CiAJX191OCBjcyA9IDA7CiAKLQlmb3IgKGk9MDsgaSA8IHJvbV9kZXNjLT5TaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcm9tX2Rlc2MtPlNpemU7IGkrKykKIAkJY3MgPSAoX191OCkoY3MgKyBidWZmZXJbaV0pOwotCX0KKwogCWlmIChjcyAhPSByb21fZGVzYy0+Q2hlY2tTdW0pIHsKLQkJZGJnICgiJXMgLSBNaXNtYXRjaCAleCAtICV4IiwgX19mdW5jX18sIHJvbV9kZXNjLT5DaGVja1N1bSwgY3MpOworCQlkYmcoIiVzIC0gTWlzbWF0Y2ggJXggLSAleCIsIF9fZnVuY19fLCByb21fZGVzYy0+Q2hlY2tTdW0sIGNzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCiAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgSTJDIGltYWdlIGlzIGdvb2QgKi8KLXN0YXRpYyBpbnQgVGlWYWxpZGF0ZUkyY0ltYWdlIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgaW50IGNoZWNrX2kyY19pbWFnZShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldjsKIAlpbnQgc3RhdHVzID0gMDsKQEAgLTc2MywxMjAgKzczMiwxMjQgQEAKIAlfX3U4ICpidWZmZXI7CiAJX191MTYgdHR5cGU7CiAKLQlyb21fZGVzYyA9IGttYWxsb2MgKHNpemVvZiAoKnJvbV9kZXNjKSwgR0ZQX0tFUk5FTCk7CisJcm9tX2Rlc2MgPSBrbWFsbG9jKHNpemVvZigqcm9tX2Rlc2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJvbV9kZXNjKSB7Ci0JCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JYnVmZmVyID0ga21hbGxvYyAoVElfTUFYX0kyQ19TSVpFLCBHRlBfS0VSTkVMKTsKKwlidWZmZXIgPSBrbWFsbG9jKFRJX01BWF9JMkNfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXIpIHsKLQkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5IHdoZW4gYWxsb2NhdGluZyBidWZmZXJcbiIsIF9fZnVuY19fKTsKLQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJZGV2X2VycihkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkgd2hlbiBhbGxvY2F0aW5nIGJ1ZmZlclxuIiwKKwkJCQkJCQkJX19mdW5jX18pOworCQlrZnJlZShyb21fZGVzYyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCS8vIFJlYWQgdGhlIGZpcnN0IGJ5dGUgKFNpZ25hdHVyZTApIG11c3QgYmUgMHg1MiBvciAweDEwCi0Jc3RhdHVzID0gVElSZWFkUm9tIChzZXJpYWwsIDAsIDEsIGJ1ZmZlcik7CisJLyogUmVhZCB0aGUgZmlyc3QgYnl0ZSAoU2lnbmF0dXJlMCkgbXVzdCBiZSAweDUyIG9yIDB4MTAgKi8KKwlzdGF0dXMgPSByZWFkX3JvbShzZXJpYWwsIDAsIDEsIGJ1ZmZlcik7CiAJaWYgKHN0YXR1cykKLQkJZ290byBFeGl0VGlWYWxpZGF0ZUkyY0ltYWdlOyAKKwkJZ290byBvdXQ7CiAKIAlpZiAoKmJ1ZmZlciAhPSBVTVA1MTUyICYmICpidWZmZXIgIT0gVU1QMzQxMCkgewotCQlkZXZfZXJyIChkZXYsICIlcyAtIGludmFsaWQgYnVmZmVyIHNpZ25hdHVyZVxuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKGRldiwgIiVzIC0gaW52YWxpZCBidWZmZXIgc2lnbmF0dXJlXG4iLCBfX2Z1bmNfXyk7CiAJCXN0YXR1cyA9IC1FTk9ERVY7Ci0JCWdvdG8gRXhpdFRpVmFsaWRhdGVJMmNJbWFnZTsKKwkJZ290byBvdXQ7CiAJfQogCiAJZG8gewotCQkvLyBWYWxpZGF0ZSB0aGUgSTJDCi0JCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkvKiBWYWxpZGF0ZSB0aGUgSTJDICovCisJCXN0YXR1cyA9IHJlYWRfcm9tKHNlcmlhbCwKIAkJCQlzdGFydF9hZGRyZXNzLAogCQkJCXNpemVvZihzdHJ1Y3QgdGlfaTJjX2Rlc2MpLAogCQkJCShfX3U4ICopcm9tX2Rlc2MpOwogCQlpZiAoc3RhdHVzKQogCQkJYnJlYWs7CiAKLQkJaWYgKChzdGFydF9hZGRyZXNzICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKyByb21fZGVzYy0+U2l6ZSkgPiBUSV9NQVhfSTJDX1NJWkUpIHsKKwkJaWYgKChzdGFydF9hZGRyZXNzICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKworCQkJCQlyb21fZGVzYy0+U2l6ZSkgPiBUSV9NQVhfSTJDX1NJWkUpIHsKIAkJCXN0YXR1cyA9IC1FTk9ERVY7Ci0JCQlkYmcgKCIlcyAtIHN0cnVjdHVyZSB0b28gYmlnLCBlcnJvcmluZyBvdXQuIiwgX19mdW5jX18pOworCQkJZGJnKCIlcyAtIHN0cnVjdHVyZSB0b28gYmlnLCBlcnJvcmluZyBvdXQuIiwgX19mdW5jX18pOwogCQkJYnJlYWs7CiAJCX0KIAotCQlkYmcgKCIlcyBUeXBlID0gMHgleCIsIF9fZnVuY19fLCByb21fZGVzYy0+VHlwZSk7CisJCWRiZygiJXMgVHlwZSA9IDB4JXgiLCBfX2Z1bmNfXywgcm9tX2Rlc2MtPlR5cGUpOwogCi0JCS8vIFNraXAgdHlwZSAyIHJlY29yZAorCQkvKiBTa2lwIHR5cGUgMiByZWNvcmQgKi8KIAkJdHR5cGUgPSByb21fZGVzYy0+VHlwZSAmIDB4MGY7Ci0JCWlmICggdHR5cGUgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CQVNJQwotCQkJJiYgdHR5cGUgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9BVVRPICkgewotCQkJLy8gUmVhZCB0aGUgZGVzY3JpcHRvciBkYXRhCi0JCQlzdGF0dXMgPSBUSVJlYWRSb20oc2VyaWFsLAotCQkJCQkJc3RhcnRfYWRkcmVzcytzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKLQkJCQkJCXJvbV9kZXNjLT5TaXplLAotCQkJCQkJYnVmZmVyKTsKKwkJaWYgKHR0eXBlICE9IEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkFTSUMKKwkJCSYmIHR0eXBlICE9IEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQVVUTykgeworCQkJLyogUmVhZCB0aGUgZGVzY3JpcHRvciBkYXRhICovCisJCQlzdGF0dXMgPSByZWFkX3JvbShzZXJpYWwsIHN0YXJ0X2FkZHJlc3MgKworCQkJCQkJc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYyksCisJCQkJCQlyb21fZGVzYy0+U2l6ZSwgYnVmZmVyKTsKIAkJCWlmIChzdGF0dXMpCiAJCQkJYnJlYWs7CiAKLQkJCXN0YXR1cyA9IFZhbGlkQ2hlY2tzdW0ocm9tX2Rlc2MsIGJ1ZmZlcik7CisJCQlzdGF0dXMgPSB2YWxpZF9jc3VtKHJvbV9kZXNjLCBidWZmZXIpOwogCQkJaWYgKHN0YXR1cykKIAkJCQlicmVhazsKIAkJfQotCQlzdGFydF9hZGRyZXNzID0gc3RhcnRfYWRkcmVzcyArIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2Rlc2MpICsgcm9tX2Rlc2MtPlNpemU7CisJCXN0YXJ0X2FkZHJlc3MgPSBzdGFydF9hZGRyZXNzICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKworCQkJCQkJCQlyb21fZGVzYy0+U2l6ZTsKIAotCX0gd2hpbGUgKChyb21fZGVzYy0+VHlwZSAhPSBJMkNfREVTQ19UWVBFX0lPTikgJiYgKHN0YXJ0X2FkZHJlc3MgPCBUSV9NQVhfSTJDX1NJWkUpKTsKKwl9IHdoaWxlICgocm9tX2Rlc2MtPlR5cGUgIT0gSTJDX0RFU0NfVFlQRV9JT04pICYmCisJCQkJKHN0YXJ0X2FkZHJlc3MgPCBUSV9NQVhfSTJDX1NJWkUpKTsKIAotCWlmICgocm9tX2Rlc2MtPlR5cGUgIT0gSTJDX0RFU0NfVFlQRV9JT04pIHx8IChzdGFydF9hZGRyZXNzID4gVElfTUFYX0kyQ19TSVpFKSkKKwlpZiAoKHJvbV9kZXNjLT5UeXBlICE9IEkyQ19ERVNDX1RZUEVfSU9OKSB8fAorCQkJCShzdGFydF9hZGRyZXNzID4gVElfTUFYX0kyQ19TSVpFKSkKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAotRXhpdFRpVmFsaWRhdGVJMmNJbWFnZToJCi0Ja2ZyZWUgKGJ1ZmZlcik7Ci0Ja2ZyZWUgKHJvbV9kZXNjKTsKK291dDoKKwlrZnJlZShidWZmZXIpOworCWtmcmVlKHJvbV9kZXNjKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IFRJUmVhZE1hbnVmRGVzY3JpcHRvciAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBfX3U4ICpidWZmZXIpCitzdGF0aWMgaW50IGdldF9tYW51Zl9pbmZvKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgX191OCAqYnVmZmVyKQogewogCWludCBzdGF0dXM7CiAJaW50IHN0YXJ0X2FkZHJlc3M7CiAJc3RydWN0IHRpX2kyY19kZXNjICpyb21fZGVzYzsKIAlzdHJ1Y3QgZWRnZV90aV9tYW51Zl9kZXNjcmlwdG9yICpkZXNjOwogCi0Jcm9tX2Rlc2MgPSBrbWFsbG9jIChzaXplb2YgKCpyb21fZGVzYyksIEdGUF9LRVJORUwpOworCXJvbV9kZXNjID0ga21hbGxvYyhzaXplb2YoKnJvbV9kZXNjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyb21fZGVzYykgewotCQlkZXZfZXJyICgmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwKKwkJCQkJCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0Jc3RhcnRfYWRkcmVzcyA9IFRJR2V0RGVzY3JpcHRvckFkZHJlc3MgKHNlcmlhbCwgSTJDX0RFU0NfVFlQRV9JT04sIHJvbV9kZXNjKTsKKwlzdGFydF9hZGRyZXNzID0gZ2V0X2Rlc2NyaXB0b3JfYWRkcihzZXJpYWwsIEkyQ19ERVNDX1RZUEVfSU9OLAorCQkJCQkJCQlyb21fZGVzYyk7CiAKIAlpZiAoIXN0YXJ0X2FkZHJlc3MpIHsKLQkJZGJnICgiJXMgLSBFZGdlIERlc2NyaXB0b3Igbm90IGZvdW5kIGluIEkyQyIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIEVkZ2UgRGVzY3JpcHRvciBub3QgZm91bmQgaW4gSTJDIiwgX19mdW5jX18pOwogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JLy8gUmVhZCB0aGUgZGVzY3JpcHRvciBkYXRhCi0Jc3RhdHVzID0gVElSZWFkUm9tIChzZXJpYWwsCi0JCQkJc3RhcnRfYWRkcmVzcytzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKLQkJCQlyb21fZGVzYy0+U2l6ZSwKLQkJCQlidWZmZXIpOworCS8qIFJlYWQgdGhlIGRlc2NyaXB0b3IgZGF0YSAqLworCXN0YXR1cyA9IHJlYWRfcm9tKHNlcmlhbCwgc3RhcnRfYWRkcmVzcytzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKKwkJCQkJCXJvbV9kZXNjLT5TaXplLCBidWZmZXIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gZXhpdDsKLQkKLQlzdGF0dXMgPSBWYWxpZENoZWNrc3VtKHJvbV9kZXNjLCBidWZmZXIpOwotCQorCisJc3RhdHVzID0gdmFsaWRfY3N1bShyb21fZGVzYywgYnVmZmVyKTsKKwogCWRlc2MgPSAoc3RydWN0IGVkZ2VfdGlfbWFudWZfZGVzY3JpcHRvciAqKWJ1ZmZlcjsKLQlkYmcgKCAiJXMgLSBJb25Db25maWcgICAgICAweCV4IiwgX19mdW5jX18sIGRlc2MtPklvbkNvbmZpZyAJKTsKLQlkYmcgKCAiJXMgLSBWZXJzaW9uICAgICAgICAgICVkIiwgX19mdW5jX18sIGRlc2MtPlZlcnNpb24JICAJKTsKLQlkYmcgKCAiJXMgLSBDcHUvQm9hcmQgICAgICAweCV4IiwgX19mdW5jX18sIGRlc2MtPkNwdVJldl9Cb2FyZFJldgkpOwotCWRiZyAoICIlcyAtIE51bVBvcnRzICAgICAgICAgJWQiLCBfX2Z1bmNfXywgZGVzYy0+TnVtUG9ydHMgIAkpOwotCWRiZyAoICIlcyAtIE51bVZpcnR1YWxQb3J0cyAgJWQiLCBfX2Z1bmNfXywgZGVzYy0+TnVtVmlydHVhbFBvcnRzCSk7Ci0JZGJnICggIiVzIC0gVG90YWxQb3J0cyAgICAgICAlZCIsIF9fZnVuY19fLCBkZXNjLT5Ub3RhbFBvcnRzICAJKTsKKwlkYmcoIiVzIC0gSW9uQ29uZmlnICAgICAgMHgleCIsIF9fZnVuY19fLCBkZXNjLT5Jb25Db25maWcpOworCWRiZygiJXMgLSBWZXJzaW9uICAgICAgICAgICVkIiwgX19mdW5jX18sIGRlc2MtPlZlcnNpb24pOworCWRiZygiJXMgLSBDcHUvQm9hcmQgICAgICAweCV4IiwgX19mdW5jX18sIGRlc2MtPkNwdVJldl9Cb2FyZFJldik7CisJZGJnKCIlcyAtIE51bVBvcnRzICAgICAgICAgJWQiLCBfX2Z1bmNfXywgZGVzYy0+TnVtUG9ydHMpOworCWRiZygiJXMgLSBOdW1WaXJ0dWFsUG9ydHMgICVkIiwgX19mdW5jX18sIGRlc2MtPk51bVZpcnR1YWxQb3J0cyk7CisJZGJnKCIlcyAtIFRvdGFsUG9ydHMgICAgICAgJWQiLCBfX2Z1bmNfXywgZGVzYy0+VG90YWxQb3J0cyk7CiAKIGV4aXQ6Ci0Ja2ZyZWUgKHJvbV9kZXNjKTsKKwlrZnJlZShyb21fZGVzYyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyogQnVpbGQgZmlybXdhcmUgaGVhZGVyIHVzZWQgZm9yIGZpcm13YXJlIHVwZGF0ZSAqLwotc3RhdGljIGludCBCdWlsZEkyQ0Zpcm13YXJlSGVhZGVyIChfX3U4ICpoZWFkZXIsIHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYnVpbGRfaTJjX2Z3X2hkcihfX3U4ICpoZWFkZXIsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlfX3U4ICpidWZmZXI7CiAJaW50IGJ1ZmZlcl9zaXplOwpAQCAtODg5LDI0ICs4NjIsMjggQEAKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWNvbnN0IGNoYXIgKmZ3X25hbWUgPSAiZWRnZXBvcnQvZG93bjMuYmluIjsKIAotCS8vIEluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgSTJDIGZpcm13YXJlIHdlIG11c3QgY2hhbmdlIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4KLQkvLyBUaGlzIHdpbGwgZm9yY2UgdGhlIFVNUCB0byBjb21lIHVwIGluIEJvb3QgTW9kZS4gIFRoZW4gd2hpbGUgaW4gYm9vdCBtb2RlLCB0aGUgZHJpdmVyIAotCS8vIHdpbGwgZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZSAocGFkZGVkIHRvIDE1LjVrKSBpbnRvIHRoZSBVTVAgcmFtLiAKLQkvLyBBbmQgZmluYWxseSB3aGVuIHRoZSBkZXZpY2UgY29tZXMgYmFjayB1cCBpbiBkb3dubG9hZCBtb2RlIHRoZSBkcml2ZXIgd2lsbCBjYXVzZSAKLQkvLyB0aGUgbmV3IGZpcm13YXJlIHRvIGJlIGNvcGllZCBmcm9tIHRoZSBVTVAgUmFtIHRvIEkyQyBhbmQgdGhlIGZpcm13YXJlIHdpbGwgdXBkYXRlCi0JLy8gdGhlIHJlY29yZCB0eXBlIGZyb20gMHhmMiB0byAweDAyLgotCQotCS8vIEFsbG9jYXRlIGEgMTUuNWsgYnVmZmVyICsgMiBieXRlcyBmb3IgdmVyc2lvbiBudW1iZXIgKEZpcm13YXJlIFJlY29yZCkKLQlidWZmZXJfc2l6ZSA9ICgoKDEwMjQgKiAxNikgLSA1MTIgKSsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjKSk7CisJLyogSW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBJMkMgZmlybXdhcmUgd2UgbXVzdCBjaGFuZ2UgdGhlIHR5cGUgMiByZWNvcmQKKwkgKiB0byB0eXBlIDB4RjIuICBUaGlzIHdpbGwgZm9yY2UgdGhlIFVNUCB0byBjb21lIHVwIGluIEJvb3QgTW9kZS4KKwkgKiBUaGVuIHdoaWxlIGluIGJvb3QgbW9kZSwgdGhlIGRyaXZlciB3aWxsIGRvd25sb2FkIHRoZSBsYXRlc3QKKwkgKiBmaXJtd2FyZSAocGFkZGVkIHRvIDE1LjVrKSBpbnRvIHRoZSBVTVAgcmFtLiAgQW5kIGZpbmFsbHkgd2hlbiB0aGUKKwkgKiBkZXZpY2UgY29tZXMgYmFjayB1cCBpbiBkb3dubG9hZCBtb2RlIHRoZSBkcml2ZXIgd2lsbCBjYXVzZSB0aGUgbmV3CisJICogZmlybXdhcmUgdG8gYmUgY29waWVkIGZyb20gdGhlIFVNUCBSYW0gdG8gSTJDIGFuZCB0aGUgZmlybXdhcmUgd2lsbAorCSAqIHVwZGF0ZSB0aGUgcmVjb3JkIHR5cGUgZnJvbSAweGYyIHRvIDB4MDIuCisJICovCiAKLQlidWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJLyogQWxsb2NhdGUgYSAxNS41ayBidWZmZXIgKyAyIGJ5dGVzIGZvciB2ZXJzaW9uIG51bWJlcgorCSAqIChGaXJtd2FyZSBSZWNvcmQpICovCisJYnVmZmVyX3NpemUgPSAoKCgxMDI0ICogMTYpIC0gNTEyICkgKworCQkJc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjKSk7CisKKwlidWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZmZlcikgewotCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCQorCiAJLy8gU2V0IGVudGlyZSBpbWFnZSBvZiAweGZmcwotCW1lbXNldCAoYnVmZmVyLCAweGZmLCBidWZmZXJfc2l6ZSk7CisJbWVtc2V0KGJ1ZmZlciwgMHhmZiwgYnVmZmVyX3NpemUpOwogCiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsIGRldik7CiAJaWYgKGVycikgewpAQCAtOTIxLDE2ICs4OTgsMTYgQEAKIAlPcGVyYXRpb25hbE1pbm9yVmVyc2lvbiA9IGZ3LT5kYXRhWzFdOwogCU9wZXJhdGlvbmFsQnVpbGROdW1iZXIgPSBmdy0+ZGF0YVsyXSB8IChmdy0+ZGF0YVszXSA8PCA4KTsKIAotCS8vIENvcHkgdmVyc2lvbiBudW1iZXIgaW50byBmaXJtd2FyZSByZWNvcmQKKwkvKiBDb3B5IHZlcnNpb24gbnVtYmVyIGludG8gZmlybXdhcmUgcmVjb3JkICovCiAJZmlybXdhcmVfcmVjID0gKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjICopYnVmZmVyOwogCiAJZmlybXdhcmVfcmVjLT5WZXJfTWFqb3IJPSBPcGVyYXRpb25hbE1ham9yVmVyc2lvbjsKIAlmaXJtd2FyZV9yZWMtPlZlcl9NaW5vcgk9IE9wZXJhdGlvbmFsTWlub3JWZXJzaW9uOwogCi0JLy8gUG9pbnRlciB0byBmd19kb3duIG1lbW9yeSBpbWFnZQorCS8qIFBvaW50ZXIgdG8gZndfZG93biBtZW1vcnkgaW1hZ2UgKi8KIAlpbWdfaGVhZGVyID0gKHN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyICopJmZ3LT5kYXRhWzRdOwogCi0JbWVtY3B5IChidWZmZXIgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19maXJtd2FyZV9yZWMpLAorCW1lbWNweShidWZmZXIgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19maXJtd2FyZV9yZWMpLAogCQkmZnctPmRhdGFbNCArIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlcildLAogCQlsZTE2X3RvX2NwdShpbWdfaGVhZGVyLT5MZW5ndGgpKTsKIApAQCAtOTQwLDEyICs5MTcsMTIgQEAKIAkJY3MgPSAoX191OCkoY3MgKyBidWZmZXJbaV0pOwogCX0KIAotCWtmcmVlIChidWZmZXIpOworCWtmcmVlKGJ1ZmZlcik7CiAKLQkvLyBCdWlsZCBuZXcgaGVhZGVyCisJLyogQnVpbGQgbmV3IGhlYWRlciAqLwogCWkyY19oZWFkZXIgPSAgKHN0cnVjdCB0aV9pMmNfZGVzYyAqKWhlYWRlcjsKIAlmaXJtd2FyZV9yZWMgPSAgKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjKilpMmNfaGVhZGVyLT5EYXRhOwotCQorCiAJaTJjX2hlYWRlci0+VHlwZQk9IEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkxBTks7CiAJaTJjX2hlYWRlci0+U2l6ZQk9IChfX3UxNilidWZmZXJfc2l6ZTsKIAlpMmNfaGVhZGVyLT5DaGVja1N1bQk9IGNzOwpAQCAtOTU2LDEwMyArOTMzLDEwMCBAQAogfQogCiAvKiBUcnkgdG8gZmlndXJlIG91dCB3aGF0IHR5cGUgb2YgSTJjIHdlIGhhdmUgKi8KLXN0YXRpYyBpbnQgVElHZXRJMmNUeXBlSW5Cb290TW9kZSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBpMmNfdHlwZV9ib290bW9kZShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IHN0YXR1czsKIAlfX3U4IGRhdGE7Ci0JCQotCS8vIFRyeSB0byByZWFkIHR5cGUgMgotCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAotCQkJCQlVTVBDX01FTU9SWV9SRUFELAkJLy8gUmVxdWVzdAotCQkJCQlEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSSwJLy8gd1ZhbHVlIChBZGRyZXNzIHR5cGUpCi0JCQkJCTAsCQkgCQkvLyB3SW5kZXgKLQkJCQkJJmRhdGEsCQkJCS8vIFRyYW5zZmVyQnVmZmVyCi0JCQkJCTB4MDEpOwkJCQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAorCisJLyogVHJ5IHRvIHJlYWQgdHlwZSAyICovCisJc3RhdHVzID0gdGlfdnJlYWRfc3luYyhzZXJpYWwtPnNlcmlhbC0+ZGV2LCBVTVBDX01FTU9SWV9SRUFELAorCQkJCURUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJLCAwLCAmZGF0YSwgMHgwMSk7CiAJaWYgKHN0YXR1cykKLQkJZGJnICgiJXMgLSByZWFkIDIgc3RhdHVzIGVycm9yID0gJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGJnKCIlcyAtIHJlYWQgMiBzdGF0dXMgZXJyb3IgPSAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwogCWVsc2UKLQkJZGJnICgiJXMgLSByZWFkIDIgZGF0YSA9IDB4JXgiLCBfX2Z1bmNfXywgZGF0YSk7CisJCWRiZygiJXMgLSByZWFkIDIgZGF0YSA9IDB4JXgiLCBfX2Z1bmNfXywgZGF0YSk7CiAJaWYgKCghc3RhdHVzKSAmJiAoZGF0YSA9PSBVTVA1MTUyIHx8IGRhdGEgPT0gVU1QMzQxMCkpIHsKLQkJZGJnICgiJXMgLSBST01fVFlQRV9JSSIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIFJPTV9UWVBFX0lJIiwgX19mdW5jX18pOwogCQlzZXJpYWwtPlRJX0kyQ19UeXBlID0gRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUk7CiAJCXJldHVybiAwOwogCX0KIAotCS8vIFRyeSB0byByZWFkIHR5cGUgMwotCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAotCQkJCQlVTVBDX01FTU9SWV9SRUFELAkJLy8gUmVxdWVzdAotCQkJCQlEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUksCS8vIHdWYWx1ZSAoQWRkcmVzcyB0eXBlKQotCQkJCQkwLAkJCQkvLyB3SW5kZXgKLQkJCQkJJmRhdGEsCQkJCS8vIFRyYW5zZmVyQnVmZmVyCi0JCQkJCTB4MDEpOwkJCQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAorCS8qIFRyeSB0byByZWFkIHR5cGUgMyAqLworCXN0YXR1cyA9IHRpX3ZyZWFkX3N5bmMoc2VyaWFsLT5zZXJpYWwtPmRldiwgVU1QQ19NRU1PUllfUkVBRCwKKwkJCQlEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUksIDAsCSZkYXRhLCAweDAxKTsKIAlpZiAoc3RhdHVzKQotCQlkYmcgKCIlcyAtIHJlYWQgMyBzdGF0dXMgZXJyb3IgPSAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkYmcoIiVzIC0gcmVhZCAzIHN0YXR1cyBlcnJvciA9ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJZWxzZQotCQlkYmcgKCIlcyAtIHJlYWQgMiBkYXRhID0gMHgleCIsIF9fZnVuY19fLCBkYXRhKTsKKwkJZGJnKCIlcyAtIHJlYWQgMiBkYXRhID0gMHgleCIsIF9fZnVuY19fLCBkYXRhKTsKIAlpZiAoKCFzdGF0dXMpICYmIChkYXRhID09IFVNUDUxNTIgfHwgZGF0YSA9PSBVTVAzNDEwKSkgewotCQlkYmcgKCIlcyAtIFJPTV9UWVBFX0lJSSIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIFJPTV9UWVBFX0lJSSIsIF9fZnVuY19fKTsKIAkJc2VyaWFsLT5USV9JMkNfVHlwZSA9IERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJSTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGJnICgiJXMgLSBVbmtub3duIiwgX19mdW5jX18pOworCWRiZygiJXMgLSBVbmtub3duIiwgX19mdW5jX18pOwogCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBUSVNlbmRCdWxrVHJhbnNmZXJTeW5jIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB2b2lkICpidWZmZXIsIGludCBsZW5ndGgsIGludCAqbnVtX3NlbnQpCitzdGF0aWMgaW50IGJ1bGtfeGZlcihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB2b2lkICpidWZmZXIsCisJCQkJCQlpbnQgbGVuZ3RoLCBpbnQgKm51bV9zZW50KQogewogCWludCBzdGF0dXM7CiAKLQlzdGF0dXMgPSB1c2JfYnVsa19tc2cgKHNlcmlhbC0+ZGV2LAotCQkJCXVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKLQkJCQkJCXNlcmlhbC0+cG9ydFswXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKLQkJCQlidWZmZXIsCi0JCQkJbGVuZ3RoLAotCQkJCW51bV9zZW50LAotCQkJCTEwMDApOworCXN0YXR1cyA9IHVzYl9idWxrX21zZyhzZXJpYWwtPmRldiwKKwkJCXVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQlzZXJpYWwtPnBvcnRbMF0tPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQlidWZmZXIsIGxlbmd0aCwgbnVtX3NlbnQsIDEwMDApOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qIERvd25sb2FkIGdpdmVuIGZpcm13YXJlIGltYWdlIHRvIHRoZSBkZXZpY2UgKElOIEJPT1QgTU9ERSkgKi8KLXN0YXRpYyBpbnQgVElEb3dubG9hZENvZGVJbWFnZSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBfX3U4ICppbWFnZSwgaW50IGltYWdlX2xlbmd0aCkKK3N0YXRpYyBpbnQgZG93bmxvYWRfY29kZShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsIF9fdTggKmltYWdlLAorCQkJCQkJCWludCBpbWFnZV9sZW5ndGgpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJaW50IHBvczsKIAlpbnQgdHJhbnNmZXI7CiAJaW50IGRvbmU7CiAKLQkvLyBUcmFuc2ZlciBmaXJtd2FyZSBpbWFnZQorCS8qIFRyYW5zZmVyIGZpcm13YXJlIGltYWdlICovCiAJZm9yIChwb3MgPSAwOyBwb3MgPCBpbWFnZV9sZW5ndGg7ICkgewotCQkvLyBSZWFkIHRoZSBuZXh0IGJ1ZmZlciBmcm9tIGZpbGUKKwkJLyogUmVhZCB0aGUgbmV4dCBidWZmZXIgZnJvbSBmaWxlICovCiAJCXRyYW5zZmVyID0gaW1hZ2VfbGVuZ3RoIC0gcG9zOwogCQlpZiAodHJhbnNmZXIgPiBFREdFX0ZXX0JVTEtfTUFYX1BBQ0tFVF9TSVpFKQogCQkJdHJhbnNmZXIgPSBFREdFX0ZXX0JVTEtfTUFYX1BBQ0tFVF9TSVpFOwogCi0JCS8vIFRyYW5zZmVyIGRhdGEKLQkJc3RhdHVzID0gVElTZW5kQnVsa1RyYW5zZmVyU3luYyAoc2VyaWFsLT5zZXJpYWwsICZpbWFnZVtwb3NdLCB0cmFuc2ZlciwgJmRvbmUpOworCQkvKiBUcmFuc2ZlciBkYXRhICovCisJCXN0YXR1cyA9IGJ1bGtfeGZlcihzZXJpYWwtPnNlcmlhbCwgJmltYWdlW3Bvc10sCisJCQkJCQkJdHJhbnNmZXIsICZkb25lKTsKIAkJaWYgKHN0YXR1cykKIAkJCWJyZWFrOwotCQkvLyBBZHZhbmNlIGJ1ZmZlciBwb2ludGVyCisJCS8qIEFkdmFuY2UgYnVmZmVyIHBvaW50ZXIgKi8KIAkJcG9zICs9IGRvbmU7CiAJfQogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLy8gRklYTUUhISEKLXN0YXRpYyBpbnQgVElDb25maWd1cmVCb290RGV2aWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQorLyogRklYTUUhISEgKi8KK3N0YXRpYyBpbnQgY29uZmlnX2Jvb3RfZGV2KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdGlfY3B1X3JldihzdHJ1Y3QgZWRnZV90aV9tYW51Zl9kZXNjcmlwdG9yICpkZXNjKQoreworCXJldHVybiBUSV9HRVRfQ1BVX1JFVklTSU9OKGRlc2MtPkNwdVJldl9Cb2FyZFJldik7Cit9CisKIC8qKgogICogRG93bmxvYWRUSUZpcm13YXJlIC0gRG93bmxvYWQgcnVuLXRpbWUgb3BlcmF0aW5nIGZpcm13YXJlIHRvIHRoZSBUSTUwNTIKLSAqIAorICoKICAqIFRoaXMgcm91dGluZSBkb3dubG9hZHMgdGhlIG1haW4gb3BlcmF0aW5nIGNvZGUgaW50byB0aGUgVEk1MDUyLCB1c2luZyB0aGUKICAqIGJvb3QgY29kZSBhbHJlYWR5IGJ1cm5lZCBpbnRvIEUyUFJPTSBvciBST00uCiAgKi8KLXN0YXRpYyBpbnQgVElEb3dubG9hZEZpcm13YXJlIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgaW50IGRvd25sb2FkX2Z3KHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2OwogCWludCBzdGF0dXMgPSAwOwpAQCAtMTA3MSwyMiArMTA0NSwyNSBAQAogCS8qIERlZmF1bHQgdG8gdHlwZSAyIGkyYyAqLwogCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSTsKIAotCXN0YXR1cyA9IFRJQ2hvb3NlQ29uZmlndXJhdGlvbiAoc2VyaWFsLT5zZXJpYWwtPmRldik7CisJc3RhdHVzID0gY2hvb3NlX2NvbmZpZyhzZXJpYWwtPnNlcmlhbC0+ZGV2KTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCiAJaW50ZXJmYWNlID0gJnNlcmlhbC0+c2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOwogCWlmICghaW50ZXJmYWNlKSB7Ci0JCWRldl9lcnIgKGRldiwgIiVzIC0gbm8gaW50ZXJmYWNlIHNldCwgZXJyb3IhXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoZGV2LCAiJXMgLSBubyBpbnRlcmZhY2Ugc2V0LCBlcnJvciFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLy8gU2V0dXAgaW5pdGlhbCBtb2RlIC0tIHRoZSBkZWZhdWx0IG1vZGUgMCBpcyBUSV9NT0RFX0NPTkZJR1VSSU5HCi0JLy8gaWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIGVuZHBvaW50IHdlIGFyZSBkZWZpbml0ZWx5IGluIGRvd25sb2FkIG1vZGUKKwkvKgorCSAqIFNldHVwIGluaXRpYWwgbW9kZSAtLSB0aGUgZGVmYXVsdCBtb2RlIDAgaXMgVElfTU9ERV9DT05GSUdVUklORworCSAqIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBlbmRwb2ludCB3ZSBhcmUgZGVmaW5pdGVseSBpbiBkb3dubG9hZAorCSAqIG1vZGUKKwkgKi8KIAlpZiAoaW50ZXJmYWNlLT5iTnVtRW5kcG9pbnRzID4gMSkKIAkJc2VyaWFsLT5wcm9kdWN0X2luZm8uVGlNb2RlID0gVElfTU9ERV9ET1dOTE9BRDsKIAllbHNlCi0JCS8vIE90aGVyd2lzZSB3ZSB3aWxsIHJlbWFpbiBpbiBjb25maWd1cmluZyBtb2RlCisJCS8qIE90aGVyd2lzZSB3ZSB3aWxsIHJlbWFpbiBpbiBjb25maWd1cmluZyBtb2RlICovCiAJCXNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9IFRJX01PREVfQ09ORklHVVJJTkc7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDk3LDI1NiArMTA3NCwyNzMgQEAKIAogCQlkYmcoIiVzIC0gUlVOTklORyBJTiBET1dOTE9BRCBNT0RFIiwgX19mdW5jX18pOwogCi0JCXN0YXR1cyA9IFRpVmFsaWRhdGVJMmNJbWFnZSAoc2VyaWFsKTsKKwkJc3RhdHVzID0gY2hlY2tfaTJjX2ltYWdlKHNlcmlhbCk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCWRiZygiJXMgLSBET1dOTE9BRCBNT0RFIC0tIEJBRCBJMkMiLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9Ci0JCQorCiAJCS8qIFZhbGlkYXRlIEhhcmR3YXJlIHZlcnNpb24gbnVtYmVyCiAJCSAqIFJlYWQgTWFudWZhY3R1cmluZyBEZXNjcmlwdG9yIGZyb20gVEkgQmFzZWQgRWRnZXBvcnQKIAkJICovCi0JCXRpX21hbnVmX2Rlc2MgPSBrbWFsbG9jIChzaXplb2YgKCp0aV9tYW51Zl9kZXNjKSwgR0ZQX0tFUk5FTCk7CisJCXRpX21hbnVmX2Rlc2MgPSBrbWFsbG9jKHNpemVvZigqdGlfbWFudWZfZGVzYyksIEdGUF9LRVJORUwpOwogCQlpZiAoIXRpX21hbnVmX2Rlc2MpIHsKLQkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJc3RhdHVzID0gVElSZWFkTWFudWZEZXNjcmlwdG9yIChzZXJpYWwsIChfX3U4ICopdGlfbWFudWZfZGVzYyk7CisJCXN0YXR1cyA9IGdldF9tYW51Zl9pbmZvKHNlcmlhbCwgKF9fdTggKil0aV9tYW51Zl9kZXNjKTsKIAkJaWYgKHN0YXR1cykgewotCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAKLQkJLy8gQ2hlY2sgdmVyc2lvbiBudW1iZXIgb2YgSU9OIGRlc2NyaXB0b3IKLQkJaWYgKCFpZ25vcmVfY3B1X3JldiAmJiBUSV9HRVRfQ1BVX1JFVklTSU9OKHRpX21hbnVmX2Rlc2MtPkNwdVJldl9Cb2FyZFJldikgPCAyKSB7Ci0JCQlkYmcgKCAiJXMgLSBXcm9uZyBDUFUgUmV2ICVkIChNdXN0IGJlIDIpIiwgX19mdW5jX18sCi0JCQkgICAgIFRJX0dFVF9DUFVfUkVWSVNJT04odGlfbWFudWZfZGVzYy0+Q3B1UmV2X0JvYXJkUmV2KSk7Ci0JCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7Ci0JCSAgIAlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCQkvKiBDaGVjayB2ZXJzaW9uIG51bWJlciBvZiBJT04gZGVzY3JpcHRvciAqLworCQlpZiAoIWlnbm9yZV9jcHVfcmV2ICYmIHRpX2NwdV9yZXYodGlfbWFudWZfZGVzYykgPCAyKSB7CisJCQlkYmcoIiVzIC0gV3JvbmcgQ1BVIFJldiAlZCAoTXVzdCBiZSAyKSIsCisJCQkJX19mdW5jX18sIHRpX2NwdV9yZXYodGlfbWFudWZfZGVzYykpOworCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKyAgCQl9CiAKLQkJcm9tX2Rlc2MgPSBrbWFsbG9jIChzaXplb2YgKCpyb21fZGVzYyksIEdGUF9LRVJORUwpOworCQlyb21fZGVzYyA9IGttYWxsb2Moc2l6ZW9mKCpyb21fZGVzYyksIEdGUF9LRVJORUwpOwogCQlpZiAoIXJvbV9kZXNjKSB7Ci0JCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX2Z1bmNfXyk7Ci0JCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQlkZXZfZXJyKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKKwkJCWtmcmVlKHRpX21hbnVmX2Rlc2MpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQkvLyBTZWFyY2ggZm9yIHR5cGUgMiByZWNvcmQgKGZpcm13YXJlIHJlY29yZCkKLQkJaWYgKChzdGFydF9hZGRyZXNzID0gVElHZXREZXNjcmlwdG9yQWRkcmVzcyAoc2VyaWFsLCBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JBU0lDLCByb21fZGVzYykpICE9IDApIHsKKwkJLyogU2VhcmNoIGZvciB0eXBlIDIgcmVjb3JkIChmaXJtd2FyZSByZWNvcmQpICovCisJCXN0YXJ0X2FkZHJlc3MgPSBnZXRfZGVzY3JpcHRvcl9hZGRyKHNlcmlhbCwKKwkJCQlJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JBU0lDLCByb21fZGVzYyk7CisJCWlmIChzdGFydF9hZGRyZXNzICE9IDApIHsKIAkJCXN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjICpmaXJtd2FyZV92ZXJzaW9uOwogCQkJX191OCByZWNvcmQ7CiAKLQkJCWRiZyAoIiVzIC0gRm91bmQgVHlwZSBGSVJNV0FSRSAoVHlwZSAyKSByZWNvcmQiLCBfX2Z1bmNfXyk7CisJCQlkYmcoIiVzIC0gRm91bmQgVHlwZSBGSVJNV0FSRSAoVHlwZSAyKSByZWNvcmQiLAorCQkJCQkJCQlfX2Z1bmNfXyk7CiAKLQkJCWZpcm13YXJlX3ZlcnNpb24gPSBrbWFsbG9jIChzaXplb2YgKCpmaXJtd2FyZV92ZXJzaW9uKSwgR0ZQX0tFUk5FTCk7CisJCQlmaXJtd2FyZV92ZXJzaW9uID0ga21hbGxvYyhzaXplb2YoKmZpcm13YXJlX3ZlcnNpb24pLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKIAkJCWlmICghZmlybXdhcmVfdmVyc2lvbikgewotCQkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKLQkJCQlrZnJlZSAocm9tX2Rlc2MpOwotCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlkZXZfZXJyKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKKwkJCQlrZnJlZShyb21fZGVzYyk7CisJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CiAKLQkJCS8vIFZhbGlkYXRlIHZlcnNpb24gbnVtYmVyCQkJCQotCQkJLy8gUmVhZCB0aGUgZGVzY3JpcHRvciBkYXRhCi0JCQlzdGF0dXMgPSBUSVJlYWRSb20gKHNlcmlhbCwKLQkJCQkJc3RhcnRfYWRkcmVzcytzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKKwkJCS8qIFZhbGlkYXRlIHZlcnNpb24gbnVtYmVyCisJCQkgKiBSZWFkIHRoZSBkZXNjcmlwdG9yIGRhdGEKKwkJCSAqLworCQkJc3RhdHVzID0gcmVhZF9yb20oc2VyaWFsLCBzdGFydF9hZGRyZXNzICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYyksCiAJCQkJCXNpemVvZihzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYyksCiAJCQkJCShfX3U4ICopZmlybXdhcmVfdmVyc2lvbik7CiAJCQlpZiAoc3RhdHVzKSB7Ci0JCQkJa2ZyZWUgKGZpcm13YXJlX3ZlcnNpb24pOwotCQkJCWtmcmVlIChyb21fZGVzYyk7Ci0JCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCWtmcmVlKGZpcm13YXJlX3ZlcnNpb24pOworCQkJCWtmcmVlKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKIAkJCQlyZXR1cm4gc3RhdHVzOwogCQkJfQogCi0JCQkvLyBDaGVjayB2ZXJzaW9uIG51bWJlciBvZiBkb3dubG9hZCB3aXRoIGN1cnJlbnQgdmVyc2lvbiBpbiBJMmMKLQkJCWRvd25sb2FkX2N1cl92ZXIgPSAoZmlybXdhcmVfdmVyc2lvbi0+VmVyX01ham9yIDw8IDgpICsgCisJCQkvKiBDaGVjayB2ZXJzaW9uIG51bWJlciBvZiBkb3dubG9hZCB3aXRoIGN1cnJlbnQKKwkJCSAgIHZlcnNpb24gaW4gSTJjICovCisJCQlkb3dubG9hZF9jdXJfdmVyID0gKGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NYWpvciA8PCA4KSArCiAJCQkJCSAgIChmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWlub3IpOwogCQkJZG93bmxvYWRfbmV3X3ZlciA9IChPcGVyYXRpb25hbE1ham9yVmVyc2lvbiA8PCA4KSArCiAJCQkJCSAgIChPcGVyYXRpb25hbE1pbm9yVmVyc2lvbik7CiAKLQkJCWRiZyAoIiVzIC0gPj4+RmlybXdhcmUgVmVyc2lvbnMgRGV2aWNlICVkLiVkICBEcml2ZXIgJWQuJWQiLAotCQkJICAgICBfX2Z1bmNfXywKLQkJCSAgICAgZmlybXdhcmVfdmVyc2lvbi0+VmVyX01ham9yLAotCQkJICAgICBmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWlub3IsCi0JCQkgICAgIE9wZXJhdGlvbmFsTWFqb3JWZXJzaW9uLAotCQkJICAgICBPcGVyYXRpb25hbE1pbm9yVmVyc2lvbik7CisJCQlkYmcoIiVzIC0gPj4gRlcgVmVyc2lvbnMgRGV2aWNlICVkLiVkICBEcml2ZXIgJWQuJWQiLAorCQkJICAgIF9fZnVuY19fLAorCQkJICAgIGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NYWpvciwKKwkJCSAgICBmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWlub3IsCisJCQkgICAgT3BlcmF0aW9uYWxNYWpvclZlcnNpb24sCisJCQkgICAgT3BlcmF0aW9uYWxNaW5vclZlcnNpb24pOwogCi0JCQkvLyBDaGVjayBpZiB3ZSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluIHRoZSBJMkMgYW5kIHVwZGF0ZSBpZiBuZWNlc3NhcnkKKwkJCS8qIENoZWNrIGlmIHdlIGhhdmUgYW4gb2xkIHZlcnNpb24gaW4gdGhlIEkyQyBhbmQKKwkJCSAgIHVwZGF0ZSBpZiBuZWNlc3NhcnkgKi8KIAkJCWlmIChkb3dubG9hZF9jdXJfdmVyICE9IGRvd25sb2FkX25ld192ZXIpIHsKLQkJCQlkYmcgKCIlcyAtIFVwZGF0ZSBJMkMgRG93bmxvYWQgZnJvbSAlZC4lZCB0byAlZC4lZCIsCi0JCQkJICAgICBfX2Z1bmNfXywKLQkJCQkgICAgIGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NYWpvciwKLQkJCQkgICAgIGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NaW5vciwKLQkJCQkgICAgIE9wZXJhdGlvbmFsTWFqb3JWZXJzaW9uLAotCQkJCSAgICAgT3BlcmF0aW9uYWxNaW5vclZlcnNpb24pOworCQkJCWRiZygiJXMgLSBVcGRhdGUgSTJDIGRsZCBmcm9tICVkLiVkIHRvICVkLiVkIiwKKwkJCQkgICAgX19mdW5jX18sCisJCQkJICAgIGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NYWpvciwKKwkJCQkgICAgZmlybXdhcmVfdmVyc2lvbi0+VmVyX01pbm9yLAorCQkJCSAgICBPcGVyYXRpb25hbE1ham9yVmVyc2lvbiwKKwkJCQkgICAgT3BlcmF0aW9uYWxNaW5vclZlcnNpb24pOwogCi0JCQkJLy8gSW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBJMkMgZmlybXdhcmUgd2UgbXVzdCBjaGFuZ2UgdGhlIHR5cGUgMiByZWNvcmQgdG8gdHlwZSAweEYyLgotCQkJCS8vIFRoaXMgd2lsbCBmb3JjZSB0aGUgVU1QIHRvIGNvbWUgdXAgaW4gQm9vdCBNb2RlLiAgVGhlbiB3aGlsZSBpbiBib290IG1vZGUsIHRoZSBkcml2ZXIgCi0JCQkJLy8gd2lsbCBkb3dubG9hZCB0aGUgbGF0ZXN0IGZpcm13YXJlIChwYWRkZWQgdG8gMTUuNWspIGludG8gdGhlIFVNUCByYW0uIAotCQkJCS8vIEFuZCBmaW5hbGx5IHdoZW4gdGhlIGRldmljZSBjb21lcyBiYWNrIHVwIGluIGRvd25sb2FkIG1vZGUgdGhlIGRyaXZlciB3aWxsIGNhdXNlIAotCQkJCS8vIHRoZSBuZXcgZmlybXdhcmUgdG8gYmUgY29waWVkIGZyb20gdGhlIFVNUCBSYW0gdG8gSTJDIGFuZCB0aGUgZmlybXdhcmUgd2lsbCB1cGRhdGUKLQkJCQkvLyB0aGUgcmVjb3JkIHR5cGUgZnJvbSAweGYyIHRvIDB4MDIuCi0KKwkJCQkvKiBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0CisJCQkJICogY2hhbmdlIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4gVGhpcworCQkJCSAqIHdpbGwgZm9yY2UgdGhlIFVNUCB0byBjb21lIHVwIGluIEJvb3QgTW9kZS4KKwkJCQkgKiBUaGVuIHdoaWxlIGluIGJvb3QgbW9kZSwgdGhlIGRyaXZlciB3aWxsCisJCQkJICogZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZSAocGFkZGVkIHRvCisJCQkJICogMTUuNWspIGludG8gdGhlIFVNUCByYW0uIEZpbmFsbHkgd2hlbiB0aGUKKwkJCQkgKiBkZXZpY2UgY29tZXMgYmFjayB1cCBpbiBkb3dubG9hZCBtb2RlIHRoZQorCQkJCSAqIGRyaXZlciB3aWxsIGNhdXNlIHRoZSBuZXcgZmlybXdhcmUgdG8gYmUKKwkJCQkgKiBjb3BpZWQgZnJvbSB0aGUgVU1QIFJhbSB0byBJMkMgYW5kIHRoZQorCQkJCSAqIGZpcm13YXJlIHdpbGwgdXBkYXRlIHRoZSByZWNvcmQgdHlwZSBmcm9tCisJCQkJICogMHhmMiB0byAweDAyLgorCQkJCSAqLwogCQkJCXJlY29yZCA9IEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkxBTks7CiAKLQkJCQkvLyBDaGFuZ2UgdGhlIEkyQyBGaXJtd2FyZSByZWNvcmQgdHlwZSB0byAweGYyIHRvIHRyaWdnZXIgYW4gdXBkYXRlCi0JCQkJc3RhdHVzID0gVElXcml0ZVJvbSAoc2VyaWFsLAotCQkJCQkJCXN0YXJ0X2FkZHJlc3MsCi0JCQkJCQkJc2l6ZW9mKHJlY29yZCksCi0JCQkJCQkJJnJlY29yZCk7CisJCQkJLyogQ2hhbmdlIHRoZSBJMkMgRmlybXdhcmUgcmVjb3JkIHR5cGUgdG8KKwkJCQkgICAweGYyIHRvIHRyaWdnZXIgYW4gdXBkYXRlICovCisJCQkJc3RhdHVzID0gd3JpdGVfcm9tKHNlcmlhbCwgc3RhcnRfYWRkcmVzcywKKwkJCQkJCXNpemVvZihyZWNvcmQpLAkmcmVjb3JkKTsKIAkJCQlpZiAoc3RhdHVzKSB7Ci0JCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKLQkJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKLQkJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCQlrZnJlZShmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQkJa2ZyZWUocm9tX2Rlc2MpOworCQkJCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKIAkJCQkJcmV0dXJuIHN0YXR1czsKIAkJCQl9CiAKLQkJCQkvLyB2ZXJpZnkgdGhlIHdyaXRlIC0tIG11c3QgZG8gdGhpcyBpbiBvcmRlciBmb3Igd3JpdGUgdG8gCi0JCQkJLy8gY29tcGxldGUgYmVmb3JlIHdlIGRvIHRoZSBoYXJkd2FyZSByZXNldAotCQkJCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkJCS8qIHZlcmlmeSB0aGUgd3JpdGUgLS0gbXVzdCBkbyB0aGlzIGluIG9yZGVyCisJCQkJICogZm9yIHdyaXRlIHRvIGNvbXBsZXRlIGJlZm9yZSB3ZSBkbyB0aGUKKwkJCQkgKiBoYXJkd2FyZSByZXNldAorCQkJCSAqLworCQkJCXN0YXR1cyA9IHJlYWRfcm9tKHNlcmlhbCwKIAkJCQkJCQlzdGFydF9hZGRyZXNzLAogCQkJCQkJCXNpemVvZihyZWNvcmQpLAogCQkJCQkJCSZyZWNvcmQpOwotCiAJCQkJaWYgKHN0YXR1cykgewotCQkJCQlrZnJlZSAoZmlybXdhcmVfdmVyc2lvbik7Ci0JCQkJCWtmcmVlIChyb21fZGVzYyk7Ci0JCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQkJa2ZyZWUoZmlybXdhcmVfdmVyc2lvbik7CisJCQkJCWtmcmVlKHJvbV9kZXNjKTsKKwkJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CiAJCQkJCXJldHVybiBzdGF0dXM7CiAJCQkJfQogCiAJCQkJaWYgKHJlY29yZCAhPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LKSB7Ci0JCQkJCWRldl9lcnIgKGRldiwgIiVzIC0gZXJyb3IgcmVzZXR0aW5nIGRldmljZVxuIiwgX19mdW5jX18pOwotCQkJCQlrZnJlZSAoZmlybXdhcmVfdmVyc2lvbik7Ci0JCQkJCWtmcmVlIChyb21fZGVzYyk7Ci0JCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQkJZGV2X2VycihkZXYsCisJCQkJCQkiJXMgLSBlcnJvciByZXNldHRpbmcgZGV2aWNlXG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJCQlrZnJlZShmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQkJa2ZyZWUocm9tX2Rlc2MpOworCQkJCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKIAkJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQkJfQogCi0JCQkJZGJnICgiJXMgLSBIQVJEV0FSRSBSRVNFVCIsIF9fZnVuY19fKTsKKwkJCQlkYmcoIiVzIC0gSEFSRFdBUkUgUkVTRVQiLCBfX2Z1bmNfXyk7CiAKLQkJCQkvLyBSZXNldCBVTVAgLS0gQmFjayB0byBCT09UIE1PREUKLQkJCQlzdGF0dXMgPSBUSVNlbmRWZW5kb3JSZXF1ZXN0U3luYyAoc2VyaWFsLT5zZXJpYWwtPmRldiwKLQkJCQkJCQkJVU1QQ19IQVJEV0FSRV9SRVNFVCwJLy8gUmVxdWVzdAotCQkJCQkJCQkwLAkJCS8vIHdWYWx1ZQotCQkJCQkJCQkwLAkJCS8vIHdJbmRleAotCQkJCQkJCQlOVUxMLAkJCS8vIFRyYW5zZmVyQnVmZmVyCi0JCQkJCQkJCTApOwkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJCQkJLyogUmVzZXQgVU1QIC0tIEJhY2sgdG8gQk9PVCBNT0RFICovCisJCQkJc3RhdHVzID0gdGlfdnNlbmRfc3luYyhzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQkJVU1QQ19IQVJEV0FSRV9SRVNFVCwKKwkJCQkJCTAsIDAsIE5VTEwsIDApOwogCi0JCQkJZGJnICggIiVzIC0gSEFSRFdBUkUgUkVTRVQgcmV0dXJuICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQkJZGJnKCIlcyAtIEhBUkRXQVJFIFJFU0VUIHJldHVybiAlZCIsCisJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAogCQkJCS8qIHJldHVybiBhbiBlcnJvciBvbiBwdXJwb3NlLiAqLwotCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKLQkJCQlrZnJlZSAocm9tX2Rlc2MpOwotCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlrZnJlZShmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQlrZnJlZShyb21fZGVzYyk7CisJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQl9Ci0JCQlrZnJlZSAoZmlybXdhcmVfdmVyc2lvbik7CisJCQlrZnJlZShmaXJtd2FyZV92ZXJzaW9uKTsKIAkJfQotCQkvLyBTZWFyY2ggZm9yIHR5cGUgMHhGMiByZWNvcmQgKGZpcm13YXJlIGJsYW5rIHJlY29yZCkKLQkJZWxzZSBpZiAoKHN0YXJ0X2FkZHJlc3MgPSBUSUdldERlc2NyaXB0b3JBZGRyZXNzIChzZXJpYWwsIEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkxBTkssIHJvbV9kZXNjKSkgIT0gMCkgewotCQkJI2RlZmluZSBIRUFERVJfU0laRQkoc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19maXJtd2FyZV9yZWMpKQorCQkvKiBTZWFyY2ggZm9yIHR5cGUgMHhGMiByZWNvcmQgKGZpcm13YXJlIGJsYW5rIHJlY29yZCkgKi8KKwkJZWxzZSBpZiAoKHN0YXJ0X2FkZHJlc3MgPSBnZXRfZGVzY3JpcHRvcl9hZGRyKHNlcmlhbCwgSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CTEFOSywgcm9tX2Rlc2MpKSAhPSAwKSB7CisjZGVmaW5lIEhFQURFUl9TSVpFCShzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSArIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjKSkKIAkJCV9fdTggKmhlYWRlcjsKIAkJCV9fdTggKnZoZWFkZXI7CiAKLQkJCWhlYWRlciAgPSBrbWFsbG9jIChIRUFERVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCQloZWFkZXIgPSBrbWFsbG9jKEhFQURFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghaGVhZGVyKSB7Ci0JCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19mdW5jX18pOwotCQkJCWtmcmVlIChyb21fZGVzYyk7Ci0JCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCWRldl9lcnIoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19mdW5jX18pOworCQkJCWtmcmVlKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KLQkJCQkKLQkJCXZoZWFkZXIgPSBrbWFsbG9jIChIRUFERVJfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXZoZWFkZXIpIHsKLQkJCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJa2ZyZWUgKGhlYWRlcik7Ci0JCQkJa2ZyZWUgKHJvbV9kZXNjKTsKLQkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9Ci0JCQkKLQkJCWRiZyAoIiVzIC0gRm91bmQgVHlwZSBCTEFOSyBGSVJNV0FSRSAoVHlwZSBGMikgcmVjb3JkIiwgX19mdW5jX18pOwogCi0JCQkvLyBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0IGNoYW5nZSB0aGUgdHlwZSAyIHJlY29yZCB0byB0eXBlIDB4RjIuCi0JCQkvLyBUaGlzIHdpbGwgZm9yY2UgdGhlIFVNUCB0byBjb21lIHVwIGluIEJvb3QgTW9kZS4gIFRoZW4gd2hpbGUgaW4gYm9vdCBtb2RlLCB0aGUgZHJpdmVyIAotCQkJLy8gd2lsbCBkb3dubG9hZCB0aGUgbGF0ZXN0IGZpcm13YXJlIChwYWRkZWQgdG8gMTUuNWspIGludG8gdGhlIFVNUCByYW0uIAotCQkJLy8gQW5kIGZpbmFsbHkgd2hlbiB0aGUgZGV2aWNlIGNvbWVzIGJhY2sgdXAgaW4gZG93bmxvYWQgbW9kZSB0aGUgZHJpdmVyIHdpbGwgY2F1c2UgCi0JCQkvLyB0aGUgbmV3IGZpcm13YXJlIHRvIGJlIGNvcGllZCBmcm9tIHRoZSBVTVAgUmFtIHRvIEkyQyBhbmQgdGhlIGZpcm13YXJlIHdpbGwgdXBkYXRlCi0JCQkvLyB0aGUgcmVjb3JkIHR5cGUgZnJvbSAweGYyIHRvIDB4MDIuCi0JCQlzdGF0dXMgPSBCdWlsZEkyQ0Zpcm13YXJlSGVhZGVyKGhlYWRlciwgZGV2KTsKKwkJCXZoZWFkZXIgPSBrbWFsbG9jKEhFQURFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdmhlYWRlcikgeworCQkJCWRldl9lcnIoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19mdW5jX18pOworCQkJCWtmcmVlKGhlYWRlcik7CisJCQkJa2ZyZWUocm9tX2Rlc2MpOworCQkJCWtmcmVlKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCisJCQlkYmcoIiVzIC0gRm91bmQgVHlwZSBCTEFOSyBGSVJNV0FSRSAoVHlwZSBGMikgcmVjb3JkIiwKKwkJCQkJCQkJX19mdW5jX18pOworCisJCQkvKgorCQkJICogSW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBJMkMgZmlybXdhcmUgd2UgbXVzdCBjaGFuZ2UKKwkJCSAqIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4gVGhpcyB3aWxsIGZvcmNlIHRoZQorCQkJICogVU1QIHRvIGNvbWUgdXAgaW4gQm9vdCBNb2RlLiAgVGhlbiB3aGlsZSBpbiBib290CisJCQkgKiBtb2RlLCB0aGUgZHJpdmVyIHdpbGwgZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZQorCQkJICogKHBhZGRlZCB0byAxNS41aykgaW50byB0aGUgVU1QIHJhbS4gRmluYWxseSB3aGVuIHRoZQorCQkJICogZGV2aWNlIGNvbWVzIGJhY2sgdXAgaW4gZG93bmxvYWQgbW9kZSB0aGUgZHJpdmVyCisJCQkgKiB3aWxsIGNhdXNlIHRoZSBuZXcgZmlybXdhcmUgdG8gYmUgY29waWVkIGZyb20gdGhlCisJCQkgKiBVTVAgUmFtIHRvIEkyQyBhbmQgdGhlIGZpcm13YXJlIHdpbGwgdXBkYXRlIHRoZQorCQkJICogcmVjb3JkIHR5cGUgZnJvbSAweGYyIHRvIDB4MDIuCisJCQkgKi8KKwkJCXN0YXR1cyA9IGJ1aWxkX2kyY19md19oZHIoaGVhZGVyLCBkZXYpOwogCQkJaWYgKHN0YXR1cykgewotCQkJCWtmcmVlICh2aGVhZGVyKTsKLQkJCQlrZnJlZSAoaGVhZGVyKTsKLQkJCQlrZnJlZSAocm9tX2Rlc2MpOwotCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlrZnJlZSh2aGVhZGVyKTsKKwkJCQlrZnJlZShoZWFkZXIpOworCQkJCWtmcmVlKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKIAkJCQlyZXR1cm4gc3RhdHVzOwogCQkJfQogCi0JCQkvLyBVcGRhdGUgSTJDIHdpdGggdHlwZSAweGYyIHJlY29yZCB3aXRoIGNvcnJlY3Qgc2l6ZSBhbmQgY2hlY2tzdW0KLQkJCXN0YXR1cyA9IFRJV3JpdGVSb20gKHNlcmlhbCwKKwkJCS8qIFVwZGF0ZSBJMkMgd2l0aCB0eXBlIDB4ZjIgcmVjb3JkIHdpdGggY29ycmVjdAorCQkJICAgc2l6ZSBhbmQgY2hlY2tzdW0gKi8KKwkJCXN0YXR1cyA9IHdyaXRlX3JvbShzZXJpYWwsCiAJCQkJCQlzdGFydF9hZGRyZXNzLAogCQkJCQkJSEVBREVSX1NJWkUsCiAJCQkJCQloZWFkZXIpOwogCQkJaWYgKHN0YXR1cykgewotCQkJCWtmcmVlICh2aGVhZGVyKTsKLQkJCQlrZnJlZSAoaGVhZGVyKTsKLQkJCQlrZnJlZSAocm9tX2Rlc2MpOwotCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlrZnJlZSh2aGVhZGVyKTsKKwkJCQlrZnJlZShoZWFkZXIpOworCQkJCWtmcmVlKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKIAkJCQlyZXR1cm4gc3RhdHVzOwogCQkJfQogCi0JCQkvLyB2ZXJpZnkgdGhlIHdyaXRlIC0tIG11c3QgZG8gdGhpcyBpbiBvcmRlciBmb3Igd3JpdGUgdG8gCi0JCQkvLyBjb21wbGV0ZSBiZWZvcmUgd2UgZG8gdGhlIGhhcmR3YXJlIHJlc2V0Ci0JCQlzdGF0dXMgPSBUSVJlYWRSb20gKHNlcmlhbCwKLQkJCQkJCXN0YXJ0X2FkZHJlc3MsCi0JCQkJCQlIRUFERVJfU0laRSwKLQkJCQkJCXZoZWFkZXIpOworCQkJLyogdmVyaWZ5IHRoZSB3cml0ZSAtLSBtdXN0IGRvIHRoaXMgaW4gb3JkZXIgZm9yCisJCQkgICB3cml0ZSB0byBjb21wbGV0ZSBiZWZvcmUgd2UgZG8gdGhlIGhhcmR3YXJlIHJlc2V0ICovCisJCQlzdGF0dXMgPSByZWFkX3JvbShzZXJpYWwsIHN0YXJ0X2FkZHJlc3MsCisJCQkJCQkJSEVBREVSX1NJWkUsIHZoZWFkZXIpOwogCiAJCQlpZiAoc3RhdHVzKSB7Ci0JCQkJZGJnICgiJXMgLSBjYW4ndCByZWFkIGhlYWRlciBiYWNrIiwgX19mdW5jX18pOwotCQkJCWtmcmVlICh2aGVhZGVyKTsKLQkJCQlrZnJlZSAoaGVhZGVyKTsKLQkJCQlrZnJlZSAocm9tX2Rlc2MpOwotCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlkYmcoIiVzIC0gY2FuJ3QgcmVhZCBoZWFkZXIgYmFjayIsIF9fZnVuY19fKTsKKwkJCQlrZnJlZSh2aGVhZGVyKTsKKwkJCQlrZnJlZShoZWFkZXIpOworCQkJCWtmcmVlKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKIAkJCQlyZXR1cm4gc3RhdHVzOwogCQkJfQogCQkJaWYgKG1lbWNtcCh2aGVhZGVyLCBoZWFkZXIsIEhFQURFUl9TSVpFKSkgewotCQkJCWRiZyAoIiVzIC0gd3JpdGUgZG93bmxvYWQgcmVjb3JkIGZhaWxlZCIsIF9fZnVuY19fKTsKLQkJCQlrZnJlZSAodmhlYWRlcik7Ci0JCQkJa2ZyZWUgKGhlYWRlcik7Ci0JCQkJa2ZyZWUgKHJvbV9kZXNjKTsKLQkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJZGJnKCIlcyAtIHdyaXRlIGRvd25sb2FkIHJlY29yZCBmYWlsZWQiLAorCQkJCQlfX2Z1bmNfXyk7CisJCQkJa2ZyZWUodmhlYWRlcik7CisJCQkJa2ZyZWUoaGVhZGVyKTsKKwkJCQlrZnJlZShyb21fZGVzYyk7CisJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CiAJCQkJcmV0dXJuIHN0YXR1czsKIAkJCX0KIAotCQkJa2ZyZWUgKHZoZWFkZXIpOwotCQkJa2ZyZWUgKGhlYWRlcik7CisJCQlrZnJlZSh2aGVhZGVyKTsKKwkJCWtmcmVlKGhlYWRlcik7CiAKLQkJCWRiZyAoIiVzIC0gU3RhcnQgZmlybXdhcmUgdXBkYXRlIiwgX19mdW5jX18pOworCQkJZGJnKCIlcyAtIFN0YXJ0IGZpcm13YXJlIHVwZGF0ZSIsIF9fZnVuY19fKTsKIAotCQkJLy8gVGVsbCBmaXJtd2FyZSB0byBjb3B5IGRvd25sb2FkIGltYWdlIGludG8gSTJDIAotCQkJc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCi0JCQkJCQlVTVBDX0NPUFlfRE5MRF9UT19JMkMsCS8vIFJlcXVlc3QKLQkJCQkJCTAsCQkJLy8gd1ZhbHVlIAotCQkJCQkJMCwJCQkvLyB3SW5kZXgKLQkJCQkJCU5VTEwsCQkJLy8gVHJhbnNmZXJCdWZmZXIKLQkJCQkJCTApOwkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJCQkvKiBUZWxsIGZpcm13YXJlIHRvIGNvcHkgZG93bmxvYWQgaW1hZ2UgaW50byBJMkMgKi8KKwkJCXN0YXR1cyA9IHRpX3ZzZW5kX3N5bmMoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkJVU1QQ19DT1BZX0ROTERfVE9fSTJDLCAwLCAwLCBOVUxMLCAwKTsKIAotCQkgIAlkYmcgKCIlcyAtIFVwZGF0ZSBjb21wbGV0ZSAweCV4IiwgX19mdW5jX18sIHN0YXR1cyk7CisJCSAgCWRiZygiJXMgLSBVcGRhdGUgY29tcGxldGUgMHgleCIsIF9fZnVuY19fLCBzdGF0dXMpOwogCQkJaWYgKHN0YXR1cykgewotCQkJCWRldl9lcnIgKGRldiwgIiVzIC0gVU1QQ19DT1BZX0ROTERfVE9fSTJDIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQkJCWtmcmVlIChyb21fZGVzYyk7Ci0JCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCWRldl9lcnIoZGV2LAorCQkJCQkiJXMgLSBVTVBDX0NPUFlfRE5MRF9UT19JMkMgZmFpbGVkXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJCQkJa2ZyZWUocm9tX2Rlc2MpOworCQkJCWtmcmVlKHRpX21hbnVmX2Rlc2MpOwogCQkJCXJldHVybiBzdGF0dXM7CiAJCQl9CiAJCX0KIAogCQkvLyBUaGUgZGV2aWNlIGlzIHJ1bm5pbmcgdGhlIGRvd25sb2FkIGNvZGUKLQkJa2ZyZWUgKHJvbV9kZXNjKTsKLQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQlrZnJlZShyb21fZGVzYyk7CisJCWtmcmVlKHRpX21hbnVmX2Rlc2MpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEzNTUsMzIgKzEzNDksMjYgQEAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJZGJnKCIlcyAtIFJVTk5JTkcgSU4gQk9PVCBNT0RFIiwgX19mdW5jX18pOwogCi0JLy8gQ29uZmlndXJlIHRoZSBUSSBkZXZpY2Ugc28gd2UgY2FuIHVzZSB0aGUgQlVMSyBwaXBlcyBmb3IgZG93bmxvYWQKLQlzdGF0dXMgPSBUSUNvbmZpZ3VyZUJvb3REZXZpY2UgKHNlcmlhbC0+c2VyaWFsLT5kZXYpOworCS8qIENvbmZpZ3VyZSB0aGUgVEkgZGV2aWNlIHNvIHdlIGNhbiB1c2UgdGhlIEJVTEsgcGlwZXMgZm9yIGRvd25sb2FkICovCisJc3RhdHVzID0gY29uZmlnX2Jvb3RfZGV2KHNlcmlhbC0+c2VyaWFsLT5kZXYpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQlpZiAobGUxNl90b19jcHUoc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gVVNCX1ZFTkRPUl9JRF9JT04pIHsKLQkJZGJnICgiJXMgLSBWSUQgPSAweCV4IiwgX19mdW5jX18sCisJaWYgKGxlMTZfdG9fY3B1KHNlcmlhbC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpCisJCQkJCQkJIT0gVVNCX1ZFTkRPUl9JRF9JT04pIHsKKwkJZGJnKCIlcyAtIFZJRCA9IDB4JXgiLCBfX2Z1bmNfXywKIAkJICAgICBsZTE2X3RvX2NwdShzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSk7CiAJCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSTsKLQkJZ290byBTdGF5SW5Cb290TW9kZTsKKwkJZ290byBzdGF5aW5ib290bW9kZTsKIAl9CiAKLQkvLyBXZSBoYXZlIGFuIElPTiBkZXZpY2UgKEkyYyBNdXN0IGJlIHByb2dyYW1tZWQpCi0JLy8gRGV0ZXJtaW5lIEkyQyBpbWFnZSB0eXBlCi0JaWYgKFRJR2V0STJjVHlwZUluQm9vdE1vZGUoc2VyaWFsKSkgewotCQlnb3RvIFN0YXlJbkJvb3RNb2RlOwotCX0KKwkvKiBXZSBoYXZlIGFuIElPTiBkZXZpY2UgKEkyYyBNdXN0IGJlIHByb2dyYW1tZWQpCisJICAgRGV0ZXJtaW5lIEkyQyBpbWFnZSB0eXBlICovCisJaWYgKGkyY190eXBlX2Jvb3Rtb2RlKHNlcmlhbCkpCisJCWdvdG8gc3RheWluYm9vdG1vZGU7CiAKLQkvLyBSZWdpc3RyeSB2YXJpYWJsZSBzZXQ/Ci0JaWYgKFRJU3RheUluQm9vdE1vZGUpIHsKLQkJZGJnICgiJXMgLSBUSVN0YXlJbkJvb3RNb2RlIiwgX19mdW5jX18pOwotCQlnb3RvIFN0YXlJbkJvb3RNb2RlOwotCX0KLQotCS8vIENoZWNrIGZvciBJT04gVmVuZG9yIElEIGFuZCB0aGF0IHRoZSBJMkMgaXMgdmFsaWQKLQlpZiAoIVRpVmFsaWRhdGVJMmNJbWFnZShzZXJpYWwpKSB7CisJLyogQ2hlY2sgZm9yIElPTiBWZW5kb3IgSUQgYW5kIHRoYXQgdGhlIEkyQyBpcyB2YWxpZCAqLworCWlmICghY2hlY2tfaTJjX2ltYWdlKHNlcmlhbCkpIHsKIAkJc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIgKmhlYWRlcjsKIAkJaW50IGk7CiAJCV9fdTggY3MgPSAwOwpAQCAtMTM5Myw0OSArMTM4MSw1MiBAQAogCQkvKiBWYWxpZGF0ZSBIYXJkd2FyZSB2ZXJzaW9uIG51bWJlcgogCQkgKiBSZWFkIE1hbnVmYWN0dXJpbmcgRGVzY3JpcHRvciBmcm9tIFRJIEJhc2VkIEVkZ2Vwb3J0CiAJCSAqLwotCQl0aV9tYW51Zl9kZXNjID0ga21hbGxvYyAoc2l6ZW9mICgqdGlfbWFudWZfZGVzYyksIEdGUF9LRVJORUwpOworCQl0aV9tYW51Zl9kZXNjID0ga21hbGxvYyhzaXplb2YoKnRpX21hbnVmX2Rlc2MpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0aV9tYW51Zl9kZXNjKSB7Ci0JCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCXN0YXR1cyA9IFRJUmVhZE1hbnVmRGVzY3JpcHRvciAoc2VyaWFsLCAoX191OCAqKXRpX21hbnVmX2Rlc2MpOworCQlzdGF0dXMgPSBnZXRfbWFudWZfaW5mbyhzZXJpYWwsIChfX3U4ICopdGlfbWFudWZfZGVzYyk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKLQkJCWdvdG8gU3RheUluQm9vdE1vZGU7CisJCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKKwkJCWdvdG8gc3RheWluYm9vdG1vZGU7CiAJCX0KIAotCQkvLyBDaGVjayBmb3IgdmVyc2lvbiAyCi0JCWlmICghaWdub3JlX2NwdV9yZXYgJiYgVElfR0VUX0NQVV9SRVZJU0lPTih0aV9tYW51Zl9kZXNjLT5DcHVSZXZfQm9hcmRSZXYpIDwgMikgewotCQkJZGJnICgiJXMgLSBXcm9uZyBDUFUgUmV2ICVkIChNdXN0IGJlIDIpIiwgX19mdW5jX18sCi0JCQkgICAgIFRJX0dFVF9DUFVfUkVWSVNJT04odGlfbWFudWZfZGVzYy0+Q3B1UmV2X0JvYXJkUmV2KSk7Ci0JCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7Ci0JCQlnb3RvIFN0YXlJbkJvb3RNb2RlOworCQkvKiBDaGVjayBmb3IgdmVyc2lvbiAyICovCisJCWlmICghaWdub3JlX2NwdV9yZXYgJiYgdGlfY3B1X3Jldih0aV9tYW51Zl9kZXNjKSA8IDIpIHsKKwkJCWRiZygiJXMgLSBXcm9uZyBDUFUgUmV2ICVkIChNdXN0IGJlIDIpIiwKKwkJCQkJX19mdW5jX18sIHRpX2NwdV9yZXYodGlfbWFudWZfZGVzYykpOworCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CisJCQlnb3RvIHN0YXlpbmJvb3Rtb2RlOwogCQl9CiAKLQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKIAotCQkvLyBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0IGNoYW5nZSB0aGUgdHlwZSAyIHJlY29yZCB0byB0eXBlIDB4RjIuCi0JCS8vIFRoaXMgd2lsbCBmb3JjZSB0aGUgVU1QIHRvIGNvbWUgdXAgaW4gQm9vdCBNb2RlLiAgVGhlbiB3aGlsZSBpbiBib290IG1vZGUsIHRoZSBkcml2ZXIgCi0JCS8vIHdpbGwgZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZSAocGFkZGVkIHRvIDE1LjVrKSBpbnRvIHRoZSBVTVAgcmFtLiAKLQkJLy8gQW5kIGZpbmFsbHkgd2hlbiB0aGUgZGV2aWNlIGNvbWVzIGJhY2sgdXAgaW4gZG93bmxvYWQgbW9kZSB0aGUgZHJpdmVyIHdpbGwgY2F1c2UgCi0JCS8vIHRoZSBuZXcgZmlybXdhcmUgdG8gYmUgY29waWVkIGZyb20gdGhlIFVNUCBSYW0gdG8gSTJDIGFuZCB0aGUgZmlybXdhcmUgd2lsbCB1cGRhdGUKLQkJLy8gdGhlIHJlY29yZCB0eXBlIGZyb20gMHhmMiB0byAweDAyLgotCQkKIAkJLyoKKwkJICogSW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBJMkMgZmlybXdhcmUgd2UgbXVzdCBjaGFuZ2UgdGhlIHR5cGUKKwkJICogMiByZWNvcmQgdG8gdHlwZSAweEYyLiBUaGlzIHdpbGwgZm9yY2UgdGhlIFVNUCB0byBjb21lIHVwCisJCSAqIGluIEJvb3QgTW9kZS4gIFRoZW4gd2hpbGUgaW4gYm9vdCBtb2RlLCB0aGUgZHJpdmVyIHdpbGwKKwkJICogZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZSAocGFkZGVkIHRvIDE1LjVrKSBpbnRvIHRoZQorCQkgKiBVTVAgcmFtLiBGaW5hbGx5IHdoZW4gdGhlIGRldmljZSBjb21lcyBiYWNrIHVwIGluIGRvd25sb2FkCisJCSAqIG1vZGUgdGhlIGRyaXZlciB3aWxsIGNhdXNlIHRoZSBuZXcgZmlybXdhcmUgdG8gYmUgY29waWVkCisJCSAqIGZyb20gdGhlIFVNUCBSYW0gdG8gSTJDIGFuZCB0aGUgZmlybXdhcmUgd2lsbCB1cGRhdGUgdGhlCisJCSAqIHJlY29yZCB0eXBlIGZyb20gMHhmMiB0byAweDAyLgorCQkgKgogCQkgKiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb3B5IHRoZSB3aG9sZSBmaXJtd2FyZSBpbWFnZSwKIAkJICogb3IgY291bGQgd2UgZG8gdGhpcyBpbiBwbGFjZSEKIAkJICovCiAKLQkJLy8gQWxsb2NhdGUgYSAxNS41ayBidWZmZXIgKyAzIGJ5dGUgaGVhZGVyCi0JCWJ1ZmZlcl9zaXplID0gKCgoMTAyNCAqIDE2KSAtIDUxMikgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIpKTsKLQkJYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQkvKiBBbGxvY2F0ZSBhIDE1LjVrIGJ1ZmZlciArIDMgYnl0ZSBoZWFkZXIgKi8KKwkJYnVmZmVyX3NpemUgPSAoKCgxMDI0ICogMTYpIC0gNTEyKSArCisJCQkJCXNpemVvZihzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlcikpOworCQlidWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFidWZmZXIpIHsKLQkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOworCQkJZGV2X2VycihkZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCQotCQkvLyBJbml0aWFsaXplIHRoZSBidWZmZXIgdG8gMHhmZiAocGFkIHRoZSBidWZmZXIpCi0JCW1lbXNldCAoYnVmZmVyLCAweGZmLCBidWZmZXJfc2l6ZSk7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgYnVmZmVyIHRvIDB4ZmYgKHBhZCB0aGUgYnVmZmVyKSAqLworCQltZW1zZXQoYnVmZmVyLCAweGZmLCBidWZmZXJfc2l6ZSk7CiAKIAkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsIGRldik7CiAJCWlmIChlcnIpIHsKQEAgLTE0NDcsMzggKzE0MzgsNDMgQEAKIAkJbWVtY3B5KGJ1ZmZlciwgJmZ3LT5kYXRhWzRdLCBmdy0+c2l6ZSAtIDQpOwogCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAotCQlmb3IoaSA9IHNpemVvZihzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlcik7IGkgPCBidWZmZXJfc2l6ZTsgaSsrKSB7CisJCWZvciAoaSA9IHNpemVvZihzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlcik7CisJCQkJaSA8IGJ1ZmZlcl9zaXplOyBpKyspIHsKIAkJCWNzID0gKF9fdTgpKGNzICsgYnVmZmVyW2ldKTsKIAkJfQotCQkKKwogCQloZWFkZXIgPSAoc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIgKilidWZmZXI7Ci0JCQotCQkvLyB1cGRhdGUgbGVuZ3RoIGFuZCBjaGVja3N1bSBhZnRlciBwYWRkaW5nCi0JCWhlYWRlci0+TGVuZ3RoIAkgPSBjcHVfdG9fbGUxNigoX191MTYpKGJ1ZmZlcl9zaXplIC0gc2l6ZW9mKHN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyKSkpOworCisJCS8qIHVwZGF0ZSBsZW5ndGggYW5kIGNoZWNrc3VtIGFmdGVyIHBhZGRpbmcgKi8KKwkJaGVhZGVyLT5MZW5ndGggCSA9IGNwdV90b19sZTE2KChfX3UxNikoYnVmZmVyX3NpemUgLQorCQkJCQlzaXplb2Yoc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIpKSk7CiAJCWhlYWRlci0+Q2hlY2tTdW0gPSBjczsKIAotCQkvLyBEb3dubG9hZCB0aGUgb3BlcmF0aW9uYWwgY29kZSAKLQkJZGJnICgiJXMgLSBEb3dubG9hZGluZyBvcGVyYXRpb25hbCBjb2RlIGltYWdlIChUSSBVTVApIiwgX19mdW5jX18pOwotCQlzdGF0dXMgPSBUSURvd25sb2FkQ29kZUltYWdlIChzZXJpYWwsIGJ1ZmZlciwgYnVmZmVyX3NpemUpOworCQkvKiBEb3dubG9hZCB0aGUgb3BlcmF0aW9uYWwgY29kZSAgKi8KKwkJZGJnKCIlcyAtIERvd25sb2FkaW5nIG9wZXJhdGlvbmFsIGNvZGUgaW1hZ2UgKFRJIFVNUCkiLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJCXN0YXR1cyA9IGRvd25sb2FkX2NvZGUoc2VyaWFsLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIAotCQlrZnJlZSAoYnVmZmVyKTsKKwkJa2ZyZWUoYnVmZmVyKTsKIAogCQlpZiAoc3RhdHVzKSB7Ci0JICAJCWRiZyAoIiVzIC0gRXJyb3IgZG93bmxvYWRpbmcgb3BlcmF0aW9uYWwgY29kZSBpbWFnZSIsIF9fZnVuY19fKTsKKwkJCWRiZygiJXMgLSBFcnJvciBkb3dubG9hZGluZyBvcGVyYXRpb25hbCBjb2RlIGltYWdlIiwKKwkJCQkJCQkJX19mdW5jX18pOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCi0JCS8vIERldmljZSB3aWxsIHJlYm9vdAorCQkvKiBEZXZpY2Ugd2lsbCByZWJvb3QgKi8KIAkJc2VyaWFsLT5wcm9kdWN0X2luZm8uVGlNb2RlID0gVElfTU9ERV9UUkFOU0lUSU9OSU5HOwogCi0gIAkJZGJnICgiJXMgLSBEb3dubG9hZCBzdWNjZXNzZnVsIC0tIERldmljZSByZWJvb3RpbmcuLi4iLCBfX2Z1bmNfXyk7CisJCWRiZygiJXMgLSBEb3dubG9hZCBzdWNjZXNzZnVsIC0tIERldmljZSByZWJvb3RpbmcuLi4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CiAKIAkJLyogcmV0dXJuIGFuIGVycm9yIG9uIHB1cnBvc2UgKi8KIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi1TdGF5SW5Cb290TW9kZToKLQkvLyBFcHJvbSBpcyBpbnZhbGlkIG9yIGJsYW5rIHN0YXkgaW4gYm9vdCBtb2RlCitzdGF5aW5ib290bW9kZToKKwkvKiBFcHJvbSBpcyBpbnZhbGlkIG9yIGJsYW5rIHN0YXkgaW4gYm9vdCBtb2RlICovCiAJZGJnKCIlcyAtIFNUQVlJTkcgSU4gQk9PVCBNT0RFIiwgX19mdW5jX18pOwogCXNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9IFRJX01PREVfQk9PVDsKIApAQCAtMTQ4NiwxNTYgKzE0ODIsMzMgQEAKIH0KIAogCi1zdGF0aWMgaW50IFRJU2V0RHRyIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgdGlfZG9fY29uZmlnKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0LCBpbnQgZmVhdHVyZSwgaW50IG9uKQogewogCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7Ci0KLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKLQlwb3J0LT5zaGFkb3dfbWNyIHw9IE1DUl9EVFI7Ci0KLQlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKLQkJCQlVTVBDX1NFVF9DTFJfRFRSLAotCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCi0JCQkJMSwJLyogc2V0ICovCi0JCQkJTlVMTCwKLQkJCQkwKTsKKwlvbiA9ICEhb247CS8qIDEgb3IgMCBub3QgYml0bWFzayAqLworCXJldHVybiBzZW5kX2NtZChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCWZlYXR1cmUsIChfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQlvbiwgTlVMTCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgVElDbGVhckR0ciAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCi17Ci0JaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKIAotCWRiZyAoIiVzIiwgX19mdW5jX18pOwotCXBvcnQtPnNoYWRvd19tY3IgJj0gfk1DUl9EVFI7Ci0KLQlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKLQkJCQlVTVBDX1NFVF9DTFJfRFRSLAotCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCi0JCQkJMCwJLyogY2xlYXIgKi8KLQkJCQlOVUxMLAotCQkJCTApOwotfQotCi1zdGF0aWMgaW50IFRJU2V0UnRzIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKLXsKLQlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOwotCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7Ci0JcG9ydC0+c2hhZG93X21jciB8PSBNQ1JfUlRTOwotCi0JcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCi0JCQkJVU1QQ19TRVRfQ0xSX1JUUywKLQkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAotCQkJCTEsCS8qIHNldCAqLwotCQkJCU5VTEwsCi0JCQkJMCk7Ci19Ci0KLXN0YXRpYyBpbnQgVElDbGVhclJ0cyAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCi17Ci0JaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKLQotCWRiZyAoIiVzIiwgX19mdW5jX18pOwotCXBvcnQtPnNoYWRvd19tY3IgJj0gfk1DUl9SVFM7Ci0KLQlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKLQkJCQlVTVBDX1NFVF9DTFJfUlRTLAotCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCi0JCQkJMCwJLyogY2xlYXIgKi8KLQkJCQlOVUxMLAotCQkJCTApOwotfQotCi1zdGF0aWMgaW50IFRJU2V0TG9vcEJhY2sgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQotewotCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7Ci0KLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKLQotCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCVVNUENfU0VUX0NMUl9MT09QQkFDSywKLQkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAotCQkJCTEsCS8qIHNldCAqLwotCQkJCU5VTEwsCi0JCQkJMCk7Ci19Ci0KLXN0YXRpYyBpbnQgVElDbGVhckxvb3BCYWNrIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKLXsKLQlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOwotCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKLQkJCQlVTVBDX1NFVF9DTFJfTE9PUEJBQ0ssCi0JCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKLQkJCQkwLAkvKiBjbGVhciAqLwotCQkJCU5VTEwsCi0JCQkJMCk7Ci19Ci0KLXN0YXRpYyBpbnQgVElTZXRCcmVhayAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCi17Ci0JaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKLQotCWRiZyAoIiVzIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCi0JCQkJVU1QQ19TRVRfQ0xSX0JSRUFLLAotCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCi0JCQkJMSwJLyogc2V0ICovCi0JCQkJTlVMTCwKLQkJCQkwKTsKLX0KLQotc3RhdGljIGludCBUSUNsZWFyQnJlYWsgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQotewotCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7Ci0KLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKLQotCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCVVNUENfU0VUX0NMUl9CUkVBSywKLQkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAotCQkJCTAsCS8qIGNsZWFyICovCi0JCQkJTlVMTCwKLQkJCQkwKTsKLX0KLQotc3RhdGljIGludCBUSVJlc3RvcmVNQ1IgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0LCBfX3U4IG1jcikKK3N0YXRpYyBpbnQgcmVzdG9yZV9tY3Ioc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQsIF9fdTggbWNyKQogewogCWludCBzdGF0dXMgPSAwOwogCi0JZGJnICgiJXMgLSAleCIsIF9fZnVuY19fLCBtY3IpOworCWRiZygiJXMgLSAleCIsIF9fZnVuY19fLCBtY3IpOwogCi0JaWYgKG1jciAmIE1DUl9EVFIpCi0JCXN0YXR1cyA9IFRJU2V0RHRyIChwb3J0KTsKLQllbHNlCi0JCXN0YXR1cyA9IFRJQ2xlYXJEdHIgKHBvcnQpOwotCisJc3RhdHVzID0gdGlfZG9fY29uZmlnKHBvcnQsIFVNUENfU0VUX0NMUl9EVFIsIG1jciAmIE1DUl9EVFIpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7Ci0KLQlpZiAobWNyICYgTUNSX1JUUykKLQkJc3RhdHVzID0gVElTZXRSdHMgKHBvcnQpOwotCWVsc2UKLQkJc3RhdHVzID0gVElDbGVhclJ0cyAocG9ydCk7Ci0KKwlzdGF0dXMgPSB0aV9kb19jb25maWcocG9ydCwgVU1QQ19TRVRfQ0xSX1JUUywgbWNyICYgTUNSX1JUUyk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKLQotCWlmIChtY3IgJiBNQ1JfTE9PUEJBQ0spCi0JCXN0YXR1cyA9IFRJU2V0TG9vcEJhY2sgKHBvcnQpOwotCWVsc2UKLQkJc3RhdHVzID0gVElDbGVhckxvb3BCYWNrIChwb3J0KTsKLQotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRpX2RvX2NvbmZpZyhwb3J0LCBVTVBDX1NFVF9DTFJfTE9PUEJBQ0ssIG1jciAmIE1DUl9MT09QQkFDSyk7CiB9CiAKLQotCiAvKiBDb252ZXJ0IFRJIExTUiB0byBzdGFuZGFyZCBVQVJUIGZsYWdzICovCi1zdGF0aWMgX191OCBNYXBMaW5lU3RhdHVzIChfX3U4IHRpX2xzcikKK3N0YXRpYyBfX3U4IG1hcF9saW5lX3N0YXR1cyhfX3U4IHRpX2xzcikKIHsKIAlfX3U4IGxzciA9IDA7CiAKQEAgLTE2NDcsMjIgKzE1MjAsMjMgQEAKIAlNQVBfRkxBRyhVTVBfVUFSVF9MU1JfUEVfTUFTSywgTFNSX1BBUl9FUlIpCS8qIHBhcml0eSBlcnJvciAqLwogCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9GRV9NQVNLLCBMU1JfRlJNX0VSUikJLyogZnJhbWluZyBlcnJvciAqLwogCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9CUl9NQVNLLCBMU1JfQlJFQUspCS8qIGJyZWFrIGRldGVjdGVkICovCi0JTUFQX0ZMQUcoVU1QX1VBUlRfTFNSX1JYX01BU0ssIExTUl9SWF9BVkFJTCkJLyogcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSAqLwotCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9UWF9NQVNLLCBMU1JfVFhfRU1QVFkpCS8qIHRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KKwlNQVBfRkxBRyhVTVBfVUFSVF9MU1JfUlhfTUFTSywgTFNSX1JYX0FWQUlMKQkvKiByeCBkYXRhIGF2YWlsYWJsZSAqLworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9UWF9NQVNLLCBMU1JfVFhfRU1QVFkpCS8qIHR4IGhvbGQgcmVnIGVtcHR5ICovCiAKICN1bmRlZiBNQVBfRkxBRwogCiAJcmV0dXJuIGxzcjsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX25ld19tc3IgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggbXNyKQorc3RhdGljIHZvaWQgaGFuZGxlX25ld19tc3Ioc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBtc3IpCiB7CiAJc3RydWN0IGFzeW5jX2ljb3VudCAqaWNvdW50OwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKLQlkYmcgKCIlcyAtICUwMngiLCBfX2Z1bmNfXywgbXNyKTsKKwlkYmcoIiVzIC0gJTAyeCIsIF9fZnVuY19fLCBtc3IpOwogCi0JaWYgKG1zciAmIChFREdFUE9SVF9NU1JfREVMVEFfQ1RTIHwgRURHRVBPUlRfTVNSX0RFTFRBX0RTUiB8IEVER0VQT1JUX01TUl9ERUxUQV9SSSB8IEVER0VQT1JUX01TUl9ERUxUQV9DRCkpIHsKKwlpZiAobXNyICYgKEVER0VQT1JUX01TUl9ERUxUQV9DVFMgfCBFREdFUE9SVF9NU1JfREVMVEFfRFNSIHwKKwkJCUVER0VQT1JUX01TUl9ERUxUQV9SSSB8IEVER0VQT1JUX01TUl9ERUxUQV9DRCkpIHsKIAkJaWNvdW50ID0gJmVkZ2VfcG9ydC0+aWNvdW50OwogCiAJCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCkBAIC0xNjc0LDEzICsxNTQ4LDEzIEBACiAJCQlpY291bnQtPmRjZCsrOwogCQlpZiAobXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX1JJKQogCQkJaWNvdW50LT5ybmcrKzsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlICgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCiAJLyogU2F2ZSB0aGUgbmV3IG1vZGVtIHN0YXR1cyAqLwogCWVkZ2VfcG9ydC0+c2hhZG93X21zciA9IG1zciAmIDB4ZjA7CiAKLQl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5OwogCS8qIGhhbmRsZSBDVFMgZmxvdyBjb250cm9sICovCiAJaWYgKHR0eSAmJiBDX0NSVFNDVFModHR5KSkgewogCQlpZiAobXNyICYgRURHRVBPUlRfTVNSX0NUUykgewpAQCAtMTY5NCwyNiArMTU2OCwyNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX25ld19sc3IgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIGludCBsc3JfZGF0YSwgX191OCBsc3IsIF9fdTggZGF0YSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9uZXdfbHNyKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIGludCBsc3JfZGF0YSwKKwkJCQkJCQlfX3U4IGxzciwgX191OCBkYXRhKQogewogCXN0cnVjdCBhc3luY19pY291bnQgKmljb3VudDsKLQlfX3U4IG5ld19sc3IgPSAoX191OCkobHNyICYgKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9QQVJfRVJSIHwgTFNSX0ZSTV9FUlIgfCBMU1JfQlJFQUspKTsKKwlfX3U4IG5ld19sc3IgPSAoX191OCkobHNyICYgKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9QQVJfRVJSIHwKKwkJCQkJCUxTUl9GUk1fRVJSIHwgTFNSX0JSRUFLKSk7CiAKLQlkYmcgKCIlcyAtICUwMngiLCBfX2Z1bmNfXywgbmV3X2xzcik7CisJZGJnKCIlcyAtICUwMngiLCBfX2Z1bmNfXywgbmV3X2xzcik7CiAKIAllZGdlX3BvcnQtPnNoYWRvd19sc3IgPSBsc3I7CiAKLQlpZiAobmV3X2xzciAmIExTUl9CUkVBSykgeworCWlmIChuZXdfbHNyICYgTFNSX0JSRUFLKQogCQkvKgogCQkgKiBQYXJpdHkgYW5kIEZyYW1pbmcgZXJyb3JzIG9ubHkgY291bnQgaWYgdGhleQogCQkgKiBvY2N1ciBleGNsdXNpdmUgb2YgYSBicmVhayBiZWluZyByZWNlaXZlZC4KIAkJICovCiAJCW5ld19sc3IgJj0gKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9CUkVBSyk7Ci0JfQogCiAJLyogUGxhY2UgTFNSIGRhdGEgYnl0ZSBpbnRvIFJ4IGJ1ZmZlciAqLwotCWlmIChsc3JfZGF0YSAmJiBlZGdlX3BvcnQtPnBvcnQtPnR0eSkKLQkJZWRnZV90dHlfcmVjdigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIGVkZ2VfcG9ydC0+cG9ydC0+dHR5LCAmZGF0YSwgMSk7CisJaWYgKGxzcl9kYXRhICYmIGVkZ2VfcG9ydC0+cG9ydC0+cG9ydC50dHkpCisJCWVkZ2VfdHR5X3JlY3YoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCBlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5LCAmZGF0YSwgMSk7CiAKIAkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLwogCWljb3VudCA9ICZlZGdlX3BvcnQtPmljb3VudDsKQEAgLTE3MjgsNyArMTYwMyw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwpAQCAtMTc2Miw2NiArMTYzNyw3MSBAQAogCX0KIAogCWlmICghbGVuZ3RoKSB7Ci0JCWRiZyAoIiVzIC0gbm8gZGF0YSBpbiB1cmIiLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JCQotCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX2Z1bmNfXywgbGVuZ3RoLCBkYXRhKTsKLQkJCi0JaWYgKGxlbmd0aCAhPSAyKSB7Ci0JCWRiZyAoIiVzIC0gZXhwZWN0aW5nIHBhY2tldCBvZiBzaXplIDIsIGdvdCAlZCIsIF9fZnVuY19fLCBsZW5ndGgpOworCQlkYmcoIiVzIC0gbm8gZGF0YSBpbiB1cmIiLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlwb3J0X251bWJlciA9IFRJVU1QX0dFVF9QT1JUX0ZST01fQ09ERSAoZGF0YVswXSk7Ci0JZnVuY3Rpb24gICAgPSBUSVVNUF9HRVRfRlVOQ19GUk9NX0NPREUgKGRhdGFbMF0pOwotCWRiZyAoIiVzIC0gcG9ydF9udW1iZXIgJWQsIGZ1bmN0aW9uICVkLCBpbmZvIDB4JXgiLAorCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkJX19mdW5jX18sIGxlbmd0aCwgZGF0YSk7CisKKwlpZiAobGVuZ3RoICE9IDIpIHsKKwkJZGJnKCIlcyAtIGV4cGVjdGluZyBwYWNrZXQgb2Ygc2l6ZSAyLCBnb3QgJWQiLAorCQkJCQkJCV9fZnVuY19fLCBsZW5ndGgpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcG9ydF9udW1iZXIgPSBUSVVNUF9HRVRfUE9SVF9GUk9NX0NPREUoZGF0YVswXSk7CisJZnVuY3Rpb24gICAgPSBUSVVNUF9HRVRfRlVOQ19GUk9NX0NPREUoZGF0YVswXSk7CisJZGJnKCIlcyAtIHBvcnRfbnVtYmVyICVkLCBmdW5jdGlvbiAlZCwgaW5mbyAweCV4IiwKIAkgICAgIF9fZnVuY19fLCBwb3J0X251bWJlciwgZnVuY3Rpb24sIGRhdGFbMV0pOwogCXBvcnQgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5wb3J0W3BvcnRfbnVtYmVyXTsKIAllZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaWYgKCFlZGdlX3BvcnQpIHsKLQkJZGJnICgiJXMgLSBlZGdlX3BvcnQgbm90IGZvdW5kIiwgX19mdW5jX18pOworCQlkYmcoIiVzIC0gZWRnZV9wb3J0IG5vdCBmb3VuZCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAlzd2l0Y2ggKGZ1bmN0aW9uKSB7CiAJY2FzZSBUSVVNUF9JTlRFUlJVUFRfQ09ERV9MU1I6Ci0JCWxzciA9IE1hcExpbmVTdGF0dXMoZGF0YVsxXSk7CisJCWxzciA9IG1hcF9saW5lX3N0YXR1cyhkYXRhWzFdKTsKIAkJaWYgKGxzciAmIFVNUF9VQVJUX0xTUl9EQVRBX01BU0spIHsKLQkJCS8qIFNhdmUgdGhlIExTUiBldmVudCBmb3IgYnVsayByZWFkIGNvbXBsZXRpb24gcm91dGluZSAqLwotCQkJZGJnICgiJXMgLSBMU1IgRXZlbnQgUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCIsCisJCQkvKiBTYXZlIHRoZSBMU1IgZXZlbnQgZm9yIGJ1bGsgcmVhZAorCQkJICAgY29tcGxldGlvbiByb3V0aW5lICovCisJCQlkYmcoIiVzIC0gTFNSIEV2ZW50IFBvcnQgJXUgTFNSIFN0YXR1cyA9ICUwMngiLAogCQkJICAgICBfX2Z1bmNfXywgcG9ydF9udW1iZXIsIGxzcik7CiAJCQllZGdlX3BvcnQtPmxzcl9ldmVudCA9IDE7CiAJCQllZGdlX3BvcnQtPmxzcl9tYXNrID0gbHNyOwogCQl9IGVsc2UgewotCQkJZGJnICgiJXMgLSA9PT09PSBQb3J0ICVkIExTUiBTdGF0dXMgPSAlMDJ4ID09PT09PSIsCisJCQlkYmcoIiVzIC0gPT09PT0gUG9ydCAlZCBMU1IgU3RhdHVzID0gJTAyeCA9PT09PT0iLAogCQkJICAgICBfX2Z1bmNfXywgcG9ydF9udW1iZXIsIGxzcik7Ci0JCQloYW5kbGVfbmV3X2xzciAoZWRnZV9wb3J0LCAwLCBsc3IsIDApOworCQkJaGFuZGxlX25ld19sc3IoZWRnZV9wb3J0LCAwLCBsc3IsIDApOwogCQl9CiAJCWJyZWFrOwogCi0JY2FzZSBUSVVNUF9JTlRFUlJVUFRfQ09ERV9NU1I6CS8vIE1TUgorCWNhc2UgVElVTVBfSU5URVJSVVBUX0NPREVfTVNSOgkvKiBNU1IgKi8KIAkJLyogQ29weSBNU1IgZnJvbSBVTVAgKi8KIAkJbXNyID0gZGF0YVsxXTsKLQkJZGJnICgiJXMgLSA9PT09PSBQb3J0ICV1IE1TUiBTdGF0dXMgPSAlMDJ4ID09PT09PVxuIiwKKwkJZGJnKCIlcyAtID09PT09IFBvcnQgJXUgTVNSIFN0YXR1cyA9ICUwMnggPT09PT09XG4iLAogCQkgICAgIF9fZnVuY19fLCBwb3J0X251bWJlciwgbXNyKTsKLQkJaGFuZGxlX25ld19tc3IgKGVkZ2VfcG9ydCwgbXNyKTsKKwkJaGFuZGxlX25ld19tc3IoZWRnZV9wb3J0LCBtc3IpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRldl9lcnIgKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBVbmtub3duIEludGVycnVwdCBjb2RlIGZyb20gVU1QICV4XG4iLAotCQkJIF9fZnVuY19fLCBkYXRhWzFdKTsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyAtIFVua25vd24gSW50ZXJydXB0IGNvZGUgZnJvbSBVTVAgJXhcbiIsCisJCQlfX2Z1bmNfXywgZGF0YVsxXSk7CiAJCWJyZWFrOwotCQkKKwogCX0KIAogZXhpdDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWRldl9lcnIgKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCiAJCQkgX19mdW5jX18sIHJldHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGVkZ2VfYnVsa19pbl9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgZWRnZV9idWxrX2luX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKQEAgLTE4NDQsMTUgKzE3MjQsMTYgQEAKIAkJICAgIF9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJZGV2X2VyciAoJnVyYi0+ZGV2LT5kZXYsIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKLQkJICAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCisJCQkgICAgIF9fZnVuY19fLCBzdGF0dXMpOwogCX0KIAogCWlmIChzdGF0dXMgPT0gLUVQSVBFKQogCQlnb3RvIGV4aXQ7CiAKIAlpZiAoc3RhdHVzKSB7Ci0JCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsIiVzIC0gc3RvcHBpbmcgcmVhZCFcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gc3RvcHBpbmcgcmVhZCFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTg2MCwyMyArMTc0MSwyNCBAQAogCiAJaWYgKGVkZ2VfcG9ydC0+bHNyX2V2ZW50KSB7CiAJCWVkZ2VfcG9ydC0+bHNyX2V2ZW50ID0gMDsKLQkJZGJnICgiJXMgPT09PT0gUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCwgRGF0YSA9ICUwMnggPT09PT09IiwKKwkJZGJnKCIlcyA9PT09PSBQb3J0ICV1IExTUiBTdGF0dXMgPSAlMDJ4LCBEYXRhID0gJTAyeCA9PT09PT0iLAogCQkgICAgIF9fZnVuY19fLCBwb3J0X251bWJlciwgZWRnZV9wb3J0LT5sc3JfbWFzaywgKmRhdGEpOwotCQloYW5kbGVfbmV3X2xzciAoZWRnZV9wb3J0LCAxLCBlZGdlX3BvcnQtPmxzcl9tYXNrLCAqZGF0YSk7CisJCWhhbmRsZV9uZXdfbHNyKGVkZ2VfcG9ydCwgMSwgZWRnZV9wb3J0LT5sc3JfbWFzaywgKmRhdGEpOwogCQkvKiBBZGp1c3QgYnVmZmVyIGxlbmd0aC9wb2ludGVyICovCiAJCS0tdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQkrK2RhdGE7CiAJfQogCi0JdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT50dHk7CisJdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT5wb3J0LnR0eTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3BvcnQtPnBvcnQtPmRldiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7Ci0KLQkJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZykgewotCQkJZGJnICgiJXMgLSBjbG9zZSBpcyBwZW5kaW5nLCBkcm9wcGluZyBkYXRhIG9uIHRoZSBmbG9vci4iLCBfX2Z1bmNfXyk7Ci0JCX0gZWxzZSB7Ci0JCQllZGdlX3R0eV9yZWN2KCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgdHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCQl9CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LAorCQkJCQlfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwkJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZykKKwkJCWRiZygiJXMgLSBjbG9zZSBwZW5kaW5nLCBkcm9wcGluZyBkYXRhIG9uIHRoZSBmbG9vciIsCisJCQkJCQkJCV9fZnVuY19fKTsKKwkJZWxzZQorCQkJZWRnZV90dHlfcmVjdigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIHR0eSwgZGF0YSwKKwkJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOwogCQllZGdlX3BvcnQtPmljb3VudC5yeCArPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJfQogCkBAIC0xODkxLDM3ICsxNzczLDMxIEBACiAJfQogCXNwaW5fdW5sb2NrKCZlZGdlX3BvcnQtPmVwX2xvY2spOwogCWlmIChyZXR2YWwpCi0JCWRldl9lcnIgKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCiAJCQkgX19mdW5jX18sIHJldHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGVkZ2VfdHR5X3JlY3Yoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKQorc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCXVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCiB7Ci0JaW50IGNudDsKKwlpbnQgcXVldWVkOwogCi0JZG8gewotCQljbnQgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGxlbmd0aCk7Ci0JCWlmIChjbnQgPCBsZW5ndGgpIHsKLQkJCWRldl9lcnIoZGV2LCAiJXMgLSBkcm9wcGluZyBkYXRhLCAlZCBieXRlcyBsb3N0XG4iLAotCQkJCV9fZnVuY19fLCBsZW5ndGggLSBjbnQpOwotCQkJaWYoY250ID09IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIGNudCk7Ci0JCWRhdGEgKz0gY250OwotCQlsZW5ndGggLT0gY250OwotCX0gd2hpbGUgKGxlbmd0aCA+IDApOwotCisJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW5ndGgpOworCXF1ZXVlZCA9IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCBsZW5ndGgpOworCWlmIChxdWV1ZWQgPCBsZW5ndGgpCisJCWRldl9lcnIoZGV2LCAiJXMgLSBkcm9wcGluZyBkYXRhLCAlZCBieXRlcyBsb3N0XG4iLAorCQkJX19mdW5jX18sIGxlbmd0aCAtIHF1ZXVlZCk7CiAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIH0KIAotc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAotCWRiZyAoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAllZGdlX3BvcnQtPmVwX3dyaXRlX3VyYl9pbl91c2UgPSAwOwogCkBAIC0xOTQyLDEwICsxODE4LDExIEBACiAJfQogCiAJLyogc2VuZCBhbnkgYnVmZmVyZWQgZGF0YSAqLwotCWVkZ2Vfc2VuZChwb3J0KTsKKwllZGdlX3NlbmQocG9ydC0+cG9ydC50dHkpOwogfQogCi1zdGF0aWMgaW50IGVkZ2Vfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIGludCBlZGdlX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWw7CkBAIC0xOTYxLDEyMiArMTgzOCwxMjUgQEAKIAlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IGxvd19sYXRlbmN5OworCWlmICh0dHkpCisJCXR0eS0+bG93X2xhdGVuY3kgPSBsb3dfbGF0ZW5jeTsKIAogCXBvcnRfbnVtYmVyID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKIAlzd2l0Y2ggKHBvcnRfbnVtYmVyKSB7Ci0JCWNhc2UgMDoKLQkJCWVkZ2VfcG9ydC0+dWFydF9iYXNlID0gVU1QTUVNX0JBU0VfVUFSVDE7Ci0JCQllZGdlX3BvcnQtPmRtYV9hZGRyZXNzID0gVU1QRF9PRURCMV9BRERSRVNTOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWVkZ2VfcG9ydC0+dWFydF9iYXNlID0gVU1QTUVNX0JBU0VfVUFSVDI7Ci0JCQllZGdlX3BvcnQtPmRtYV9hZGRyZXNzID0gVU1QRF9PRURCMl9BRERSRVNTOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiVW5rbm93biBwb3J0IG51bWJlciEhIVxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwljYXNlIDA6CisJCWVkZ2VfcG9ydC0+dWFydF9iYXNlID0gVU1QTUVNX0JBU0VfVUFSVDE7CisJCWVkZ2VfcG9ydC0+ZG1hX2FkZHJlc3MgPSBVTVBEX09FREIxX0FERFJFU1M7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZWRnZV9wb3J0LT51YXJ0X2Jhc2UgPSBVTVBNRU1fQkFTRV9VQVJUMjsKKwkJZWRnZV9wb3J0LT5kbWFfYWRkcmVzcyA9IFVNUERfT0VEQjJfQUREUkVTUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiVW5rbm93biBwb3J0IG51bWJlciEhIVxuIik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRiZyAoIiVzIC0gcG9ydF9udW1iZXIgPSAlZCwgdWFydF9iYXNlID0gJTA0eCwgZG1hX2FkZHJlc3MgPSAlMDR4IiwKLQkgICAgIF9fZnVuY19fLCBwb3J0X251bWJlciwgZWRnZV9wb3J0LT51YXJ0X2Jhc2UsIGVkZ2VfcG9ydC0+ZG1hX2FkZHJlc3MpOworCWRiZygiJXMgLSBwb3J0X251bWJlciA9ICVkLCB1YXJ0X2Jhc2UgPSAlMDR4LCBkbWFfYWRkcmVzcyA9ICUwNHgiLAorCQkJCV9fZnVuY19fLCBwb3J0X251bWJlciwgZWRnZV9wb3J0LT51YXJ0X2Jhc2UsCisJCQkJZWRnZV9wb3J0LT5kbWFfYWRkcmVzcyk7CiAKIAlkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAotCW1lbXNldCAoJihlZGdlX3BvcnQtPmljb3VudCksIDB4MDAsIHNpemVvZihlZGdlX3BvcnQtPmljb3VudCkpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0KTsKKwltZW1zZXQoJihlZGdlX3BvcnQtPmljb3VudCksIDB4MDAsIHNpemVvZihlZGdlX3BvcnQtPmljb3VudCkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOwogCiAJLyogdHVybiBvZmYgbG9vcGJhY2sgKi8KLQlzdGF0dXMgPSBUSUNsZWFyTG9vcEJhY2sgKGVkZ2VfcG9ydCk7CisJc3RhdHVzID0gdGlfZG9fY29uZmlnKGVkZ2VfcG9ydCwgVU1QQ19TRVRfQ0xSX0xPT1BCQUNLLCAwKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwiJXMgLSBjYW5ub3Qgc2VuZCBjbGVhciBsb29wYmFjayBjb21tYW5kLCAlZFxuIiwKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGNhbm5vdCBzZW5kIGNsZWFyIGxvb3BiYWNrIGNvbW1hbmQsICVkXG4iLAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCQorCiAJLyogc2V0IHVwIHRoZSBwb3J0IHNldHRpbmdzICovCi0JZWRnZV9zZXRfdGVybWlvcyAocG9ydCwgcG9ydC0+dHR5LT50ZXJtaW9zKTsKKwlpZiAodHR5KQorCQllZGdlX3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgcG9ydC0+cG9ydC50dHktPnRlcm1pb3MpOwogCiAJLyogb3BlbiB1cCB0aGUgcG9ydCAqLwogCiAJLyogbWlsbGlzZWNvbmRzIHRvIHRpbWVvdXQgZm9yIERNQSB0cmFuc2ZlciAqLwogCXRyYW5zYWN0aW9uX3RpbWVvdXQgPSAyOwogCi0JZWRnZV9wb3J0LT51bXBfcmVhZF90aW1lb3V0ID0gbWF4ICgyMCwgKCh0cmFuc2FjdGlvbl90aW1lb3V0ICogMykgLyAyKSApOworCWVkZ2VfcG9ydC0+dW1wX3JlYWRfdGltZW91dCA9CisJCQkJbWF4KDIwLCAoKHRyYW5zYWN0aW9uX3RpbWVvdXQgKiAzKSAvIDIpKTsKIAotCS8vIG1pbGxpc2Vjb25kcyB0byB0aW1lb3V0IGZvciBETUEgdHJhbnNmZXIKLQlvcGVuX3NldHRpbmdzID0gKHU4KShVTVBfRE1BX01PREVfQ09OVElOT1VTIHwgCi0JCQkgICAgIFVNUF9QSVBFX1RSQU5TX1RJTUVPVVRfRU5BIHwgCisJLyogbWlsbGlzZWNvbmRzIHRvIHRpbWVvdXQgZm9yIERNQSB0cmFuc2ZlciAqLworCW9wZW5fc2V0dGluZ3MgPSAodTgpKFVNUF9ETUFfTU9ERV9DT05USU5PVVMgfAorCQkJICAgICBVTVBfUElQRV9UUkFOU19USU1FT1VUX0VOQSB8CiAJCQkgICAgICh0cmFuc2FjdGlvbl90aW1lb3V0IDw8IDIpKTsKIAotCWRiZyAoIiVzIC0gU2VuZGluZyBVTVBDX09QRU5fUE9SVCIsIF9fZnVuY19fKTsKKwlkYmcoIiVzIC0gU2VuZGluZyBVTVBDX09QRU5fUE9SVCIsIF9fZnVuY19fKTsKIAogCS8qIFRlbGwgVEkgdG8gb3BlbiBhbmQgc3RhcnQgdGhlIHBvcnQgKi8KLQlzdGF0dXMgPSBUSVdyaXRlQ29tbWFuZFN5bmMgKGRldiwKLQkJCQkJVU1QQ19PUEVOX1BPUlQsCi0JCQkJCSh1OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAotCQkJCQlvcGVuX3NldHRpbmdzLAotCQkJCQlOVUxMLAotCQkJCQkwKTsKKwlzdGF0dXMgPSBzZW5kX2NtZChkZXYsIFVNUENfT1BFTl9QT1JULAorCQkodTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgb3Blbl9zZXR0aW5ncywgTlVMTCwgMCk7CiAJaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsIiVzIC0gY2Fubm90IHNlbmQgb3BlbiBjb21tYW5kLCAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNlbmQgb3BlbiBjb21tYW5kLCAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAkvKiBTdGFydCB0aGUgRE1BPyAqLwotCXN0YXR1cyA9IFRJV3JpdGVDb21tYW5kU3luYyAoZGV2LAotCQkJCQlVTVBDX1NUQVJUX1BPUlQsCi0JCQkJCSh1OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAotCQkJCQkwLAotCQkJCQlOVUxMLAotCQkJCQkwKTsKKwlzdGF0dXMgPSBzZW5kX2NtZChkZXYsIFVNUENfU1RBUlRfUE9SVCwKKwkJKHU4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIDAsIE5VTEwsIDApOwogCWlmIChzdGF0dXMpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCIlcyAtIGNhbm5vdCBzZW5kIHN0YXJ0IERNQSBjb21tYW5kLCAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNlbmQgc3RhcnQgRE1BIGNvbW1hbmQsICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCS8qIENsZWFyIFRYIGFuZCBSWCBidWZmZXJzIGluIFVNUCAqLwotCXN0YXR1cyA9IFRJUHVyZ2VEYXRhU3luYyAocG9ydCwgVU1QX1BPUlRfRElSX09VVCB8IFVNUF9QT1JUX0RJUl9JTik7CisJc3RhdHVzID0gcHVyZ2VfcG9ydChwb3J0LCBVTVBfUE9SVF9ESVJfT1VUIHwgVU1QX1BPUlRfRElSX0lOKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwiJXMgLSBjYW5ub3Qgc2VuZCBjbGVhciBidWZmZXJzIGNvbW1hbmQsICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gY2Fubm90IHNlbmQgY2xlYXIgYnVmZmVycyBjb21tYW5kLCAlZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCS8qIFJlYWQgSW5pdGlhbCBNU1IgKi8KLQlzdGF0dXMgPSBUSVJlYWRWZW5kb3JSZXF1ZXN0U3luYyAoZGV2LAotCQkJCQlVTVBDX1JFQURfTVNSLAkvLyBSZXF1ZXN0Ci0JCQkJCTAsCQkvLyB3VmFsdWUKLQkJCQkJKF9fdTE2KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCS8vIHdJbmRleCAoQWRkcmVzcykKLQkJCQkJJmVkZ2VfcG9ydC0+c2hhZG93X21zciwJCQkvLyBUcmFuc2ZlckJ1ZmZlcgotCQkJCQkxKTsJCQkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJc3RhdHVzID0gdGlfdnJlYWRfc3luYyhkZXYsIFVNUENfUkVBRF9NU1IsIDAsCisJCQkJKF9fdTE2KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJJmVkZ2VfcG9ydC0+c2hhZG93X21zciwgMSk7CiAJaWYgKHN0YXR1cykgewotIAkJZGV2X2VycigmcG9ydC0+ZGV2LCIlcyAtIGNhbm5vdCBzZW5kIHJlYWQgTVNSIGNvbW1hbmQsICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCByZWFkIE1TUiBjb21tYW5kLCAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKLQlkYmcgKCJTaGFkb3dNU1IgMHglWCIsIGVkZ2VfcG9ydC0+c2hhZG93X21zcik7Ci0gCisJZGJnKCJTaGFkb3dNU1IgMHglWCIsIGVkZ2VfcG9ydC0+c2hhZG93X21zcik7CisKIAkvKiBTZXQgSW5pdGlhbCBNQ1IgKi8KIAllZGdlX3BvcnQtPnNoYWRvd19tY3IgPSBNQ1JfUlRTIHwgTUNSX0RUUjsKLQlkYmcgKCJTaGFkb3dNQ1IgMHglWCIsIGVkZ2VfcG9ydC0+c2hhZG93X21jcik7CisJZGJnKCJTaGFkb3dNQ1IgMHglWCIsIGVkZ2VfcG9ydC0+c2hhZG93X21jcik7CiAKIAllZGdlX3NlcmlhbCA9IGVkZ2VfcG9ydC0+ZWRnZV9zZXJpYWw7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZWRnZV9zZXJpYWwtPmVzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCWlmIChlZGdlX3NlcmlhbC0+bnVtX3BvcnRzX29wZW4gPT0gMCkgewotCQkvKiB3ZSBhcmUgdGhlIGZpcnN0IHBvcnQgdG8gYmUgb3BlbmVkLCBsZXQncyBwb3N0IHRoZSBpbnRlcnJ1cHQgdXJiICovCisJCS8qIHdlIGFyZSB0aGUgZmlyc3QgcG9ydCB0byBvcGVuLCBwb3N0IHRoZSBpbnRlcnJ1cHQgdXJiICovCiAJCXVyYiA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmI7CiAJCWlmICghdXJiKSB7Ci0JCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiJXMgLSBubyBpbnRlcnJ1cHQgdXJiIHByZXNlbnQsIGV4aXRpbmdcbiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBubyBpbnRlcnJ1cHQgdXJiIHByZXNlbnQsIGV4aXRpbmdcbiIsCisJCQkJX19mdW5jX18pOwogCQkJc3RhdHVzID0gLUVJTlZBTDsKIAkJCWdvdG8gcmVsZWFzZV9lc19sb2NrOwogCQl9CiAJCXVyYi0+Y29tcGxldGUgPSBlZGdlX2ludGVycnVwdF9jYWxsYmFjazsKIAkJdXJiLT5jb250ZXh0ID0gZWRnZV9zZXJpYWw7CiAJCXVyYi0+ZGV2ID0gZGV2OwotCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfS0VSTkVMKTsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHN0YXR1cykgewotCQkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggdmFsdWUgJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHZhbHVlICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJCWdvdG8gcmVsZWFzZV9lc19sb2NrOwogCQl9CiAJfQpAQCAtMjA4NSwxMyArMTk2NSwxNCBAQAogCSAqIHJlc2V0IHRoZSBkYXRhIHRvZ2dsZSBvbiB0aGUgYnVsayBlbmRwb2ludHMgdG8gd29yayBhcm91bmQgYnVnIGluCiAJICogaG9zdCBjb250cm9sbGVycyB3aGVyZSB0aGluZ3MgZ2V0IG91dCBvZiBzeW5jIHNvbWUgdGltZXMKIAkgKi8KLQl1c2JfY2xlYXJfaGFsdCAoZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOwotCXVzYl9jbGVhcl9oYWx0IChkZXYsIHBvcnQtPnJlYWRfdXJiLT5waXBlKTsKKwl1c2JfY2xlYXJfaGFsdChkZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CisJdXNiX2NsZWFyX2hhbHQoZGV2LCBwb3J0LT5yZWFkX3VyYi0+cGlwZSk7CiAKIAkvKiBzdGFydCB1cCBvdXIgYnVsayByZWFkIHVyYiAqLwogCXVyYiA9IHBvcnQtPnJlYWRfdXJiOwogCWlmICghdXJiKSB7Ci0JCWRldl9lcnIgKCZwb3J0LT5kZXYsICIlcyAtIG5vIHJlYWQgdXJiIHByZXNlbnQsIGV4aXRpbmdcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBubyByZWFkIHVyYiBwcmVzZW50LCBleGl0aW5nXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCWdvdG8gdW5saW5rX2ludF91cmI7CiAJfQpAQCAtMjA5OSw5ICsxOTgwLDExIEBACiAJdXJiLT5jb21wbGV0ZSA9IGVkZ2VfYnVsa19pbl9jYWxsYmFjazsKIAl1cmItPmNvbnRleHQgPSBlZGdlX3BvcnQ7CiAJdXJiLT5kZXYgPSBkZXY7Ci0Jc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0tFUk5FTCk7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWRldl9lcnIgKCZwb3J0LT5kZXYsICIlcyAtIHJlYWQgYnVsayB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCB2YWx1ZSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIHJlYWQgYnVsayB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCB2YWx1ZSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byB1bmxpbmtfaW50X3VyYjsKIAl9CiAKQEAgLTIxMTksNyArMjAwMiw4IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHZvaWQgZWRnZV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBlZGdlX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OwpAQCAtMjEyNywxOCArMjAxMSwxOCBAQAogCWludCBzdGF0dXM7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCQkJIAorCiAJZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CiAJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWlmICgoZWRnZV9zZXJpYWwgPT0gTlVMTCkgfHwgKGVkZ2VfcG9ydCA9PSBOVUxMKSkKKwlpZiAoZWRnZV9zZXJpYWwgPT0gTlVMTCB8fCBlZGdlX3BvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwotCQotCS8qIFRoZSBidWxrcmVhZGNvbXBsZXRpb24gcm91dGluZSB3aWxsIGNoZWNrIAorCisJLyogVGhlIGJ1bGtyZWFkY29tcGxldGlvbiByb3V0aW5lIHdpbGwgY2hlY2sKIAkgKiB0aGlzIGZsYWcgYW5kIGR1bXAgYWRkIHJlYWQgZGF0YSAqLwogCWVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZyA9IDE7CiAKIAkvKiBjaGFzZSB0aGUgcG9ydCBjbG9zZSBhbmQgZmx1c2ggKi8KLQlUSUNoYXNlUG9ydCAoZWRnZV9wb3J0LCAoSFoqY2xvc2luZ193YWl0KS8xMDAsIDEpOworCWNoYXNlX3BvcnQoZWRnZV9wb3J0LCAoSFogKiBjbG9zaW5nX3dhaXQpIC8gMTAwLCAxKTsKIAogCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CiAJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CkBAIC0yMTQ4LDcgKzIwMzIsNyBAQAogCSAqIHNlbmQgYSBjbG9zZSBwb3J0IGNvbW1hbmQgdG8gaXQgKi8KIAlkYmcoIiVzIC0gc2VuZCB1bXBjX2Nsb3NlX3BvcnQiLCBfX2Z1bmNfXyk7CiAJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwotCXN0YXR1cyA9IFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+c2VyaWFsLT5kZXYsCisJc3RhdHVzID0gc2VuZF9jbWQocG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkJICAgICBVTVBDX0NMT1NFX1BPUlQsCiAJCQkJICAgICAoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAogCQkJCSAgICAgMCwKQEAgLTIxNjcsNyArMjA1MSw4IEBACiAJZGJnKCIlcyAtIGV4aXRlZCIsIF9fZnVuY19fKTsKIH0KIAotc3RhdGljIGludCBlZGdlX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGVkZ2Vfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjE4OCwxNiArMjA3MywxNiBAQAogCWNvdW50ID0gZWRnZV9idWZfcHV0KGVkZ2VfcG9ydC0+ZXBfb3V0X2J1ZiwgZGF0YSwgY291bnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOwogCi0JZWRnZV9zZW5kKHBvcnQpOworCWVkZ2Vfc2VuZCh0dHkpOwogCiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgdm9pZCBlZGdlX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGVkZ2Vfc2VuZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCBjb3VudCwgcmVzdWx0OwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAKQEAgLTIyMjMsMTEgKzIxMDgsMTIgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOwogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwKKwkJCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKIAkvKiBzZXQgdXAgb3VyIHVyYiAqLwotCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT53cml0ZV91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChwb3J0LT5zZXJpYWwtPmRldiwKKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3NuZGJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCQkgICAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKIAkJCSAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCwKIAkJCSAgIGVkZ2VfYnVsa19vdXRfY2FsbGJhY2ssCkBAIC0yMjM2LDIzICsyMTIyLDIzIEBACiAJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQllZGdlX3BvcnQtPmVwX3dyaXRlX3VyYl9pbl91c2UgPSAwOwotCQkvLyBUT0RPOiByZXNjaGVkdWxlIGVkZ2Vfc2VuZAotCX0gZWxzZSB7CisJCS8qIFRPRE86IHJlc2NoZWR1bGUgZWRnZV9zZW5kICovCisJfSBlbHNlCiAJCWVkZ2VfcG9ydC0+aWNvdW50LnR4ICs9IGNvdW50OwotCX0KIAogCS8qIHdha2V1cCBhbnkgcHJvY2VzcyB3YWl0aW5nIGZvciB3cml0ZXMgdG8gY29tcGxldGUgKi8KIAkvKiB0aGVyZSBpcyBub3cgbW9yZSByb29tIGluIHRoZSBidWZmZXIgZm9yIG5ldyB3cml0ZXMgKi8KLQlpZiAodHR5KSB7Ci0JCS8qIGxldCB0aGUgdHR5IGRyaXZlciB3YWtldXAgaWYgaXQgaGFzIGEgc3BlY2lhbCB3cml0ZV93YWtldXAgZnVuY3Rpb24gKi8KKwlpZiAodHR5KQogCQl0dHlfd2FrZXVwKHR0eSk7Ci0JfQogfQogCi1zdGF0aWMgaW50IGVkZ2Vfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgZWRnZV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgcm9vbSA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIyNjAsOSArMjE0Niw5IEBACiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAwOwogCWlmIChlZGdlX3BvcnQtPmNsb3NlX3BlbmRpbmcgPT0gMSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOwogCXJvb20gPSBlZGdlX2J1Zl9zcGFjZV9hdmFpbChlZGdlX3BvcnQtPmVwX291dF9idWYpOwpAQCAtMjI3Miw4ICsyMTU4LDkgQEAKIAlyZXR1cm4gcm9vbTsKIH0KIAotc3RhdGljIGludCBlZGdlX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgZWRnZV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBjaGFycyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIyODEsMjIgKzIxNjgsMjIgQEAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDA7CiAJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZyA9PSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CiAJY2hhcnMgPSBlZGdlX2J1Zl9kYXRhX2F2YWlsKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1Zik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CiAKLQlkYmcgKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgY2hhcnMpOworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIGNoYXJzKTsKIAlyZXR1cm4gY2hhcnM7CiB9CiAKLXN0YXRpYyB2b2lkIGVkZ2VfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBlZGdlX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBzdGF0dXM7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwpAQCAtMjMwNCwxNiArMjE5MSwxMCBAQAogCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JdHR5ID0gcG9ydC0+dHR5OwotCWlmICghdHR5KSB7Ci0JCWRiZyAoIiVzIC0gbm8gdHR5IGF2YWlsYWJsZSIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQogCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNlbmQgdGhlIHN0b3AgY2hhcmFjdGVyICovCiAJaWYgKElfSVhPRkYodHR5KSkgewogCQl1bnNpZ25lZCBjaGFyIHN0b3BfY2hhciA9IFNUT1BfQ0hBUih0dHkpOwotCQlzdGF0dXMgPSBlZGdlX3dyaXRlIChwb3J0LCAmc3RvcF9jaGFyLCAxKTsKKwkJc3RhdHVzID0gZWRnZV93cml0ZSh0dHksIHBvcnQsICZzdG9wX2NoYXIsIDEpOwogCQlpZiAoc3RhdHVzIDw9IDApIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHRvIHdyaXRlIHN0b3AgY2hhcmFjdGVyLCAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCX0KQEAgLTIzMjYsMTAgKzIyMDcsMTAgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBlZGdlX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBlZGdlX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaW50IHN0YXR1czsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CkBAIC0yMzM3LDI3ICsyMjE4LDIyIEBACiAJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT50dHk7Ci0JaWYgKCF0dHkpIHsKLQkJZGJnICgiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCiAJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2VuZCB0aGUgc3RhcnQgY2hhcmFjdGVyICovCiAJaWYgKElfSVhPRkYodHR5KSkgewogCQl1bnNpZ25lZCBjaGFyIHN0YXJ0X2NoYXIgPSBTVEFSVF9DSEFSKHR0eSk7Ci0JCXN0YXR1cyA9IGVkZ2Vfd3JpdGUgKHBvcnQsICZzdGFydF9jaGFyLCAxKTsKKwkJc3RhdHVzID0gZWRnZV93cml0ZSh0dHksIHBvcnQsICZzdGFydF9jaGFyLCAxKTsKIAkJaWYgKHN0YXR1cyA8PSAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCB0byB3cml0ZSBzdGFydCBjaGFyYWN0ZXIsICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAkJfQogCX0KLQogCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgUlRTL0NUUywgcmVzdGFydCByZWFkcyAqLwogCS8qIGFyZSB0aGUgRWRnZXBvcnQgd2lsbCBhc3NlcnQgdGhlIFJUUyBsaW5lICovCiAJaWYgKENfQ1JUU0NUUyh0dHkpKSB7CiAJCXN0YXR1cyA9IHJlc3RhcnRfcmVhZChlZGdlX3BvcnQpOwogCQlpZiAoc3RhdHVzKQotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSByZWFkIGJ1bGsgdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggdmFsdWUgJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIHJlYWQgYnVsayB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6ICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCX0KIAogfQpAQCAtMjM5OCwyMiArMjI3NCwyMyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgY2hhbmdlX3BvcnRfc2V0dGluZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgdW1wX3VhcnRfY29uZmlnICpjb25maWc7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgYmF1ZDsKIAl1bnNpZ25lZCBjZmxhZzsKIAlpbnQgc3RhdHVzOwotCWludCBwb3J0X251bWJlciA9IGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCWludCBwb3J0X251bWJlciA9IGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0KKwkJCQkJZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIpOwogCi0JdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT50dHk7Ci0KIAljb25maWcgPSBrbWFsbG9jIChzaXplb2YgKCpjb25maWcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbmZpZykgewotCQlkZXZfZXJyICgmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJKnR0eS0+dGVybWlvcyA9ICpvbGRfdGVybWlvczsKKwkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsCisJCQkJCQkJCV9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQyNywyMiArMjMwNCwyMiBAQAogCWNvbmZpZy0+YlVhcnRNb2RlID0gKF9fdTgpKGVkZ2VfcG9ydC0+YlVhcnRNb2RlKTsKIAogCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewotCQljYXNlIENTNToKLQkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFVNUF9VQVJUX0NIQVI1QklUUzsKLQkJCSAgICBkYmcgKCIlcyAtIGRhdGEgYml0cyA9IDUiLCBfX2Z1bmNfXyk7Ci0JCQkgICAgYnJlYWs7Ci0JCWNhc2UgQ1M2OgotCQkJICAgIGNvbmZpZy0+YkRhdGFCaXRzID0gVU1QX1VBUlRfQ0hBUjZCSVRTOwotCQkJICAgIGRiZyAoIiVzIC0gZGF0YSBiaXRzID0gNiIsIF9fZnVuY19fKTsKLQkJCSAgICBicmVhazsKLQkJY2FzZSBDUzc6Ci0JCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBVTVBfVUFSVF9DSEFSN0JJVFM7Ci0JCQkgICAgZGJnICgiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19mdW5jX18pOwotCQkJICAgIGJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIENTODoKLQkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFVNUF9VQVJUX0NIQVI4QklUUzsKLQkJCSAgICBkYmcgKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX2Z1bmNfXyk7CisJY2FzZSBDUzU6CisJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFVNUF9VQVJUX0NIQVI1QklUUzsKKwkJICAgIGRiZygiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19mdW5jX18pOworCQkgICAgYnJlYWs7CisJY2FzZSBDUzY6CisJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFVNUF9VQVJUX0NIQVI2QklUUzsKKwkJICAgIGRiZygiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19mdW5jX18pOworCQkgICAgYnJlYWs7CisJY2FzZSBDUzc6CisJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFVNUF9VQVJUX0NIQVI3QklUUzsKKwkJICAgIGRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19mdW5jX18pOworCQkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIENTODoKKwkJICAgIGNvbmZpZy0+YkRhdGFCaXRzID0gVU1QX1VBUlRfQ0hBUjhCSVRTOworCQkgICAgZGJnKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX2Z1bmNfXyk7CiAJCQkgICAgYnJlYWs7CiAJfQogCkBAIC0yNDU3LDcgKzIzMzQsNyBAQAogCQkJZGJnKCIlcyAtIHBhcml0eSA9IGV2ZW4iLCBfX2Z1bmNfXyk7CiAJCX0KIAl9IGVsc2UgewotCQljb25maWctPmJQYXJpdHkgPSBVTVBfVUFSVF9OT1BBUklUWTsgCQorCQljb25maWctPmJQYXJpdHkgPSBVTVBfVUFSVF9OT1BBUklUWTsKIAkJZGJnKCIlcyAtIHBhcml0eSA9IG5vbmUiLCBfX2Z1bmNfXyk7CiAJfQogCkBAIC0yNDgwLDI5ICsyMzU3LDI2IEBACiAJCXJlc3RhcnRfcmVhZChlZGdlX3BvcnQpOwogCX0KIAotCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNldCB0aGUgc3RhcnQgYW5kIHN0b3AgY2hhcmFjdGVyIGluIHRoZSBkZXZpY2UgKi8KLQlpZiAoSV9JWE9GRih0dHkpIHx8IElfSVhPTih0dHkpKSB7Ci0JCWNvbmZpZy0+Y1hvbiAgPSBTVEFSVF9DSEFSKHR0eSk7Ci0JCWNvbmZpZy0+Y1hvZmYgPSBTVE9QX0NIQVIodHR5KTsKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZXQgdGhlIHN0YXJ0IGFuZCBzdG9wCisJICAgY2hhcmFjdGVyIGluIHRoZSBkZXZpY2UgKi8KKwljb25maWctPmNYb24gID0gU1RBUlRfQ0hBUih0dHkpOworCWNvbmZpZy0+Y1hvZmYgPSBTVE9QX0NIQVIodHR5KTsKIAotCQkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIElOQk9VTkQgWE9OL1hPRkYgKi8KLQkJaWYgKElfSVhPRkYodHR5KSkgewotCQkJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19JTl9YOwotCQkJZGJnICgiJXMgLSBJTkJPVU5EIFhPTi9YT0ZGIGlzIGVuYWJsZWQsIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsCi0JCQkgICAgIF9fZnVuY19fLCBjb25maWctPmNYb24sIGNvbmZpZy0+Y1hvZmYpOwotCQl9IGVsc2UgewotCQkJZGJnICgiJXMgLSBJTkJPVU5EIFhPTi9YT0ZGIGlzIGRpc2FibGVkIiwgX19mdW5jX18pOwotCQl9CisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBJTkJPVU5EIFhPTi9YT0ZGICovCisJaWYgKElfSVhPRkYodHR5KSkgeworCQljb25maWctPndGbGFncyB8PSBVTVBfTUFTS19VQVJUX0ZMQUdTX0lOX1g7CisJCWRiZygiJXMgLSBJTkJPVU5EIFhPTi9YT0ZGIGlzIGVuYWJsZWQsIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsCisJCSAgICAgX19mdW5jX18sIGNvbmZpZy0+Y1hvbiwgY29uZmlnLT5jWG9mZik7CisJfSBlbHNlCisJCWRiZygiJXMgLSBJTkJPVU5EIFhPTi9YT0ZGIGlzIGRpc2FibGVkIiwgX19mdW5jX18pOwogCi0JCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgT1VUQk9VTkQgWE9OL1hPRkYgKi8KLQkJaWYgKElfSVhPTih0dHkpKSB7Ci0JCQljb25maWctPndGbGFncyB8PSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YOwotCQkJZGJnICgiJXMgLSBPVVRCT1VORCBYT04vWE9GRiBpcyBlbmFibGVkLCBYT04gPSAlMngsIFhPRkYgPSAlMngiLAotCQkJICAgICBfX2Z1bmNfXywgY29uZmlnLT5jWG9uLCBjb25maWctPmNYb2ZmKTsKLQkJfSBlbHNlIHsKLQkJCWRiZyAoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX2Z1bmNfXyk7Ci0JCX0KLQl9CisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBPVVRCT1VORCBYT04vWE9GRiAqLworCWlmIChJX0lYT04odHR5KSkgeworCQljb25maWctPndGbGFncyB8PSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YOworCQlkYmcoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZW5hYmxlZCwgWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwKKwkJICAgICBfX2Z1bmNfXywgY29uZmlnLT5jWG9uLCBjb25maWctPmNYb2ZmKTsKKwl9IGVsc2UKKwkJZGJnKCIlcyAtIE9VVEJPVU5EIFhPTi9YT0ZGIGlzIGRpc2FibGVkIiwgX19mdW5jX18pOwogCiAJdHR5LT50ZXJtaW9zLT5jX2NmbGFnICY9IH5DTVNQQVI7CiAKQEAgLTI1MTksNDEgKzIzOTMsMzYgQEAKIAogCS8qIEZJWE1FOiBSZWNvbXB1dGUgYWN0dWFsIGJhdWQgZnJvbSBkaXZpc29yIGhlcmUgKi8KIAotCWRiZyAoIiVzIC0gYmF1ZCByYXRlID0gJWQsIHdCYXVkUmF0ZSA9ICVkIiwgX19mdW5jX18sIGJhdWQsIGNvbmZpZy0+d0JhdWRSYXRlKTsKKwlkYmcoIiVzIC0gYmF1ZCByYXRlID0gJWQsIHdCYXVkUmF0ZSA9ICVkIiwgX19mdW5jX18sIGJhdWQsCisJCQkJCQkJY29uZmlnLT53QmF1ZFJhdGUpOwogCi0JZGJnICgid0JhdWRSYXRlOiAgICVkIiwgKGludCkoNDYxNTUwTCAvIGNvbmZpZy0+d0JhdWRSYXRlKSk7Ci0JZGJnICgid0ZsYWdzOiAgICAweCV4IiwgY29uZmlnLT53RmxhZ3MpOwotCWRiZyAoImJEYXRhQml0czogICAlZCIsIGNvbmZpZy0+YkRhdGFCaXRzKTsKLQlkYmcgKCJiUGFyaXR5OiAgICAgJWQiLCBjb25maWctPmJQYXJpdHkpOwotCWRiZyAoImJTdG9wQml0czogICAlZCIsIGNvbmZpZy0+YlN0b3BCaXRzKTsKLQlkYmcgKCJjWG9uOiAgICAgICAgJWQiLCBjb25maWctPmNYb24pOwotCWRiZyAoImNYb2ZmOiAgICAgICAlZCIsIGNvbmZpZy0+Y1hvZmYpOwotCWRiZyAoImJVYXJ0TW9kZTogICAlZCIsIGNvbmZpZy0+YlVhcnRNb2RlKTsKKwlkYmcoIndCYXVkUmF0ZTogICAlZCIsIChpbnQpKDQ2MTU1MEwgLyBjb25maWctPndCYXVkUmF0ZSkpOworCWRiZygid0ZsYWdzOiAgICAweCV4IiwgY29uZmlnLT53RmxhZ3MpOworCWRiZygiYkRhdGFCaXRzOiAgICVkIiwgY29uZmlnLT5iRGF0YUJpdHMpOworCWRiZygiYlBhcml0eTogICAgICVkIiwgY29uZmlnLT5iUGFyaXR5KTsKKwlkYmcoImJTdG9wQml0czogICAlZCIsIGNvbmZpZy0+YlN0b3BCaXRzKTsKKwlkYmcoImNYb246ICAgICAgICAlZCIsIGNvbmZpZy0+Y1hvbik7CisJZGJnKCJjWG9mZjogICAgICAgJWQiLCBjb25maWctPmNYb2ZmKTsKKwlkYmcoImJVYXJ0TW9kZTogICAlZCIsIGNvbmZpZy0+YlVhcnRNb2RlKTsKIAogCS8qIG1vdmUgdGhlIHdvcmQgdmFsdWVzIGludG8gYmlnIGVuZGlhbiBtb2RlICovCi0JY3B1X3RvX2JlMTZzICgmY29uZmlnLT53RmxhZ3MpOwotCWNwdV90b19iZTE2cyAoJmNvbmZpZy0+d0JhdWRSYXRlKTsKKwljcHVfdG9fYmUxNnMoJmNvbmZpZy0+d0ZsYWdzKTsKKwljcHVfdG9fYmUxNnMoJmNvbmZpZy0+d0JhdWRSYXRlKTsKIAotCXN0YXR1cyA9IFRJV3JpdGVDb21tYW5kU3luYyAoZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKLQkJCQlVTVBDX1NFVF9DT05GSUcsCisJc3RhdHVzID0gc2VuZF9jbWQoZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwgVU1QQ19TRVRfQ09ORklHLAogCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCi0JCQkJMCwKLQkJCQkoX191OCAqKWNvbmZpZywKLQkJCQlzaXplb2YoKmNvbmZpZykpOwotCWlmIChzdGF0dXMpIHsKLQkJZGJnICgiJXMgLSBlcnJvciAlZCB3aGVuIHRyeWluZyB0byB3cml0ZSBjb25maWcgdG8gZGV2aWNlIiwKKwkJCQkwLCAoX191OCAqKWNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKKwlpZiAoc3RhdHVzKQorCQlkYmcoIiVzIC0gZXJyb3IgJWQgd2hlbiB0cnlpbmcgdG8gd3JpdGUgY29uZmlnIHRvIGRldmljZSIsCiAJCSAgICAgX19mdW5jX18sIHN0YXR1cyk7Ci0JfQotCi0Ja2ZyZWUgKGNvbmZpZyk7Ci0JCisJa2ZyZWUoY29uZmlnKTsKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGVkZ2Vfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBlZGdlX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OwogCXVuc2lnbmVkIGludCBjZmxhZzsKIAogCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwpAQCAtMjU2MiwyMCArMjQzMSwxOSBAQAogCSAgICB0dHktPnRlcm1pb3MtPmNfY2ZsYWcsIHR0eS0+dGVybWlvcy0+Y19pZmxhZyk7CiAJZGJnKCIlcyAtIG9sZCBjbGZhZyAlMDh4IG9sZCBpZmxhZyAlMDh4IiwgX19mdW5jX18sCiAJICAgIG9sZF90ZXJtaW9zLT5jX2NmbGFnLCBvbGRfdGVybWlvcy0+Y19pZmxhZyk7Ci0KIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQogCQlyZXR1cm47Ci0KIAkvKiBjaGFuZ2UgdGhlIHBvcnQgc2V0dGluZ3MgdG8gdGhlIG5ldyBvbmVzIHNwZWNpZmllZCAqLwotCWNoYW5nZV9wb3J0X3NldHRpbmdzIChlZGdlX3BvcnQsIG9sZF90ZXJtaW9zKTsKLQorCWNoYW5nZV9wb3J0X3NldHRpbmdzKHR0eSwgZWRnZV9wb3J0LCBvbGRfdGVybWlvcyk7CiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGVkZ2VfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCitzdGF0aWMgaW50IGVkZ2VfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGludCBtY3I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI2MDEsMTMgKzI0NjksMTMgQEAKIAllZGdlX3BvcnQtPnNoYWRvd19tY3IgPSBtY3I7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CiAKLQlUSVJlc3RvcmVNQ1IgKGVkZ2VfcG9ydCwgbWNyKTsKLQorCXJlc3RvcmVfbWNyKGVkZ2VfcG9ydCwgbWNyKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlZGdlX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBlZGdlX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAJdW5zaWduZWQgaW50IG1zcjsKQEAgLTI2MzQsNyArMjUwMiw4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8gKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKK3N0YXRpYyBpbnQgZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsCisJCQkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQogewogCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKIApAQCAtMjY1MiwxOCArMjUyMSwxNiBAQAogCXRtcC5iYXVkX2Jhc2UJCT0gOTYwMDsKIAl0bXAuY2xvc2VfZGVsYXkJCT0gNSpIWjsKIAl0bXAuY2xvc2luZ193YWl0CT0gY2xvc2luZ193YWl0OwotLy8JdG1wLmN1c3RvbV9kaXZpc29yCT0gc3RhdGUtPmN1c3RvbV9kaXZpc29yOwotLy8JdG1wLmh1YjYJCT0gc3RhdGUtPmh1YjY7Ci0vLwl0bXAuaW9fdHlwZQkJPSBzdGF0ZS0+aW9fdHlwZTsKLQogCiAJaWYgKGNvcHlfdG9fdXNlcihyZXRpbmZvLCAmdG1wLCBzaXplb2YoKnJldGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZWRnZV9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBlZGdlX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCBhc3luY19pY291bnQgY25vdzsKIAlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNwcmV2OwpAQCAtMjY3MSw4MSArMjUzOCw2NCBAQAogCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgPSAweCV4IiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY21kKTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgVElPQ0lOUToKLQkJCWRiZygiJXMgLSAoJWQpIFRJT0NJTlEiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLS8vCQkJcmV0dXJuIGdldF9udW1iZXJfYnl0ZXNfYXZhaWwoZWRnZV9wb3J0LCAodW5zaWduZWQgaW50ICopIGFyZyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFRJT0NTRVJHRVRMU1I6Ci0JCQlkYmcoIiVzIC0gKCVkKSBUSU9DU0VSR0VUTFNSIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0vLwkJCXJldHVybiBnZXRfbHNyX2luZm8oZWRnZV9wb3J0LCAodW5zaWduZWQgaW50ICopIGFyZyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFRJT0NHU0VSSUFMOgotCQkJZGJnKCIlcyAtICglZCkgVElPQ0dTRVJJQUwiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQkJCXJldHVybiBnZXRfc2VyaWFsX2luZm8oZWRnZV9wb3J0LCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFRJT0NTU0VSSUFMOgotCQkJZGJnKCIlcyAtICglZCkgVElPQ1NTRVJJQUwiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVElPQ01JV0FJVDoKLQkJCWRiZygiJXMgLSAoJWQpIFRJT0NNSVdBSVQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQkJCWNwcmV2ID0gZWRnZV9wb3J0LT5pY291bnQ7Ci0JCQl3aGlsZSAoMSkgewotCQkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOwotCQkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KLQkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCQkJY25vdyA9IGVkZ2VfcG9ydC0+aWNvdW50OwotCQkJCWlmIChjbm93LnJuZyA9PSBjcHJldi5ybmcgJiYgY25vdy5kc3IgPT0gY3ByZXYuZHNyICYmCi0JCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpCi0JCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KLQkJCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAotCQkJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8Ci0JCQkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKLQkJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSApIHsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJCWNwcmV2ID0gY25vdzsKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlkYmcoIiVzIC0gKCVkKSBUSU9DR1NFUklBTCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKGVkZ2VfcG9ydCwKKwkJCQkoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7CisJY2FzZSBUSU9DTUlXQUlUOgorCQlkYmcoIiVzIC0gKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCWNwcmV2ID0gZWRnZV9wb3J0LT5pY291bnQ7CisJCXdoaWxlICgxKSB7CisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0KTsKKwkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkJY25vdyA9IGVkZ2VfcG9ydC0+aWNvdW50OworCQkJaWYgKGNub3cucm5nID09IGNwcmV2LnJuZyAmJiBjbm93LmRzciA9PSBjcHJldi5kc3IgJiYKKwkJCSAgICBjbm93LmRjZCA9PSBjcHJldi5kY2QgJiYgY25vdy5jdHMgPT0gY3ByZXYuY3RzKQorCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KKwkJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAorCQkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKKwkJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNub3cuY3RzICE9IGNwcmV2LmN0cykpKSB7CisJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCQkvKiBub3QgcmVhY2hlZCAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBUSU9DR0lDT1VOVDoKLQkJCWRiZyAoIiVzIC0gKCVkKSBUSU9DR0lDT1VOVCBSWD0lZCwgVFg9JWQiLCBfX2Z1bmNfXywKLQkJCSAgICAgcG9ydC0+bnVtYmVyLCBlZGdlX3BvcnQtPmljb3VudC5yeCwgZWRnZV9wb3J0LT5pY291bnQudHgpOwotCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZlZGdlX3BvcnQtPmljb3VudCwgc2l6ZW9mKGVkZ2VfcG9ydC0+aWNvdW50KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKKwkJCWNwcmV2ID0gY25vdzsKKwkJfQorCQkvKiBub3QgcmVhY2hlZCAqLworCQlicmVhazsKKwljYXNlIFRJT0NHSUNPVU5UOgorCQlkYmcoIiVzIC0gKCVkKSBUSU9DR0lDT1VOVCBSWD0lZCwgVFg9JWQiLCBfX2Z1bmNfXywKKwkJICAgICBwb3J0LT5udW1iZXIsIGVkZ2VfcG9ydC0+aWNvdW50LnJ4LCBlZGdlX3BvcnQtPmljb3VudC50eCk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZWRnZV9wb3J0LT5pY291bnQsCisJCQkJc2l6ZW9mKGVkZ2VfcG9ydC0+aWNvdW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAotc3RhdGljIHZvaWQgZWRnZV9icmVhayAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQorc3RhdGljIHZvaWQgZWRnZV9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgc3RhdHVzOworCWludCBidiA9IDA7CS8qIE9mZiAqLwogCi0JZGJnICgiJXMgLSBzdGF0ZSA9ICVkIiwgX19mdW5jX18sIGJyZWFrX3N0YXRlKTsKKwlkYmcoIiVzIC0gc3RhdGUgPSAlZCIsIF9fZnVuY19fLCBicmVha19zdGF0ZSk7CiAKIAkvKiBjaGFzZSB0aGUgcG9ydCBjbG9zZSAqLwotCVRJQ2hhc2VQb3J0IChlZGdlX3BvcnQsIDAsIDApOworCWNoYXNlX3BvcnQoZWRnZV9wb3J0LCAwLCAwKTsKIAotCWlmIChicmVha19zdGF0ZSA9PSAtMSkgewotCQlzdGF0dXMgPSBUSVNldEJyZWFrIChlZGdlX3BvcnQpOwotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IFRJQ2xlYXJCcmVhayAoZWRnZV9wb3J0KTsKLQl9Ci0JaWYgKHN0YXR1cykgewotCQlkYmcgKCIlcyAtIGVycm9yICVkIHNlbmRpbmcgYnJlYWsgc2V0L2NsZWFyIGNvbW1hbmQuIiwKKwlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpCisJCWJ2ID0gMTsJLyogT24gKi8KKwlzdGF0dXMgPSB0aV9kb19jb25maWcoZWRnZV9wb3J0LCBVTVBDX1NFVF9DTFJfQlJFQUssIGJ2KTsKKwlpZiAoc3RhdHVzKQorCQlkYmcoIiVzIC0gZXJyb3IgJWQgc2VuZGluZyBicmVhayBzZXQvY2xlYXIgY29tbWFuZC4iLAogCQkgICAgIF9fZnVuY19fLCBzdGF0dXMpOwotCX0KIH0KIAotc3RhdGljIGludCBlZGdlX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgaW50IGVkZ2Vfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsOwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CkBAIC0yNzY1LDkgKzI2MTUsOSBAQAogCWVkZ2Vfc2VyaWFsLT5zZXJpYWwgPSBzZXJpYWw7CiAJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIGVkZ2Vfc2VyaWFsKTsKIAotCXN0YXR1cyA9IFRJRG93bmxvYWRGaXJtd2FyZSAoZWRnZV9zZXJpYWwpOworCXN0YXR1cyA9IGRvd25sb2FkX2Z3KGVkZ2Vfc2VyaWFsKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWtmcmVlIChlZGdlX3NlcmlhbCk7CisJCWtmcmVlKGVkZ2Vfc2VyaWFsKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTI3NzUsMTMgKzI2MjUsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQllZGdlX3BvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAoZWRnZV9wb3J0ID09IE5VTEwpIHsKLQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsCisJCQkJCQkJCV9fZnVuY19fKTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQogCQlzcGluX2xvY2tfaW5pdCgmZWRnZV9wb3J0LT5lcF9sb2NrKTsKIAkJZWRnZV9wb3J0LT5lcF9vdXRfYnVmID0gZWRnZV9idWZfYWxsb2MoRURHRV9PVVRfQlVGX1NJWkUpOwogCQlpZiAoZWRnZV9wb3J0LT5lcF9vdXRfYnVmID09IE5VTEwpIHsKLQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsCisJCQkJCQkJCV9fZnVuY19fKTsKIAkJCWtmcmVlKGVkZ2VfcG9ydCk7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KQEAgLTI3OTAsMjcgKzI2NDIsMjcgQEAKIAkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgZWRnZV9wb3J0KTsKIAkJZWRnZV9wb3J0LT5iVWFydE1vZGUgPSBkZWZhdWx0X3VhcnRfbW9kZTsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIAogY2xlYW51cDoKLQlmb3IgKC0taTsgaT49MDsgLS1pKSB7CisJZm9yICgtLWk7IGkgPj0gMDsgLS1pKSB7CiAJCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOwogCQllZGdlX2J1Zl9mcmVlKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1Zik7CiAJCWtmcmVlKGVkZ2VfcG9ydCk7CiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOwogCX0KLQlrZnJlZSAoZWRnZV9zZXJpYWwpOworCWtmcmVlKGVkZ2Vfc2VyaWFsKTsKIAl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIGVkZ2Vfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBlZGdlX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IGk7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydDsKIAotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQllZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKQEAgLTI4NTIsNyArMjcwNCw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIodWFydF9tb2RlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd191YXJ0X21vZGUsIHN0b3JlX3VhcnRfbW9kZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodWFydF9tb2RlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd191YXJ0X21vZGUsCisJCQkJCQkJc3RvcmVfdWFydF9tb2RlKTsKIAogc3RhdGljIGludCBlZGdlX2NyZWF0ZV9zeXNmc19hdHRycyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewpAQCAtMjkyMiw5ICsyNzc1LDkgQEAKIAogc3RhdGljIHZvaWQgZWRnZV9idWZfY2xlYXIoc3RydWN0IGVkZ2VfYnVmICplYikKIHsKLSAgICAgICAgaWYgKGViICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgZWItPmJ1Zl9nZXQgPSBlYi0+YnVmX3B1dDsKLSAgICAgICAgICAgICAgICAvKiBlcXVpdmFsZW50IHRvIGEgZ2V0IG9mIGFsbCBkYXRhIGF2YWlsYWJsZSAqLworCWlmIChlYiAhPSBOVUxMKQorCQllYi0+YnVmX2dldCA9IGViLT5idWZfcHV0OworCS8qIGVxdWl2YWxlbnQgdG8gYSBnZXQgb2YgYWxsIGRhdGEgYXZhaWxhYmxlICovCiB9CiAKIApAQCAtMjkzNywxMCArMjc5MCw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZWRnZV9idWZfZGF0YV9hdmFpbChzdHJ1Y3QgZWRnZV9idWYgKmViKQogewotCWlmIChlYiAhPSBOVUxMKQotCQlyZXR1cm4gKChlYi0+YnVmX3NpemUgKyBlYi0+YnVmX3B1dCAtIGViLT5idWZfZ2V0KSAlIGViLT5idWZfc2l6ZSk7Ci0JZWxzZQorCWlmIChlYiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKKwlyZXR1cm4gKChlYi0+YnVmX3NpemUgKyBlYi0+YnVmX3B1dCAtIGViLT5idWZfZ2V0KSAlIGViLT5idWZfc2l6ZSk7CiB9CiAKIApAQCAtMjk1MywxMCArMjgwNSw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZWRnZV9idWZfc3BhY2VfYXZhaWwoc3RydWN0IGVkZ2VfYnVmICplYikKIHsKLQlpZiAoZWIgIT0gTlVMTCkKLQkJcmV0dXJuICgoZWItPmJ1Zl9zaXplICsgZWItPmJ1Zl9nZXQgLSBlYi0+YnVmX3B1dCAtIDEpICUgZWItPmJ1Zl9zaXplKTsKLQllbHNlCisJaWYgKGViID09IE5VTEwpCiAJCXJldHVybiAwOworCXJldHVybiAoKGViLT5idWZfc2l6ZSArIGViLT5idWZfZ2V0IC0gZWItPmJ1Zl9wdXQgLSAxKSAlIGViLT5idWZfc2l6ZSk7CiB9CiAKIApAQCAtMzExMyw3ICsyOTY0LDcgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF8ycG9ydF9kZXZpY2VfcmVnaXN0ZXI7CiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpb19kcml2ZXIpOwotCWlmIChyZXR2YWwpIAorCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CiAJcmV0dXJuIDA7CkBAIC0zMTI1LDExICsyOTc2LDExIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGVkZ2Vwb3J0X2V4aXQgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZWRnZXBvcnRfZXhpdCh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgmaW9fZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZlZGdlcG9ydF8xcG9ydF9kZXZpY2UpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CisJdXNiX2RlcmVnaXN0ZXIoJmlvX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZlZGdlcG9ydF8xcG9ydF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZWRnZXBvcnRfMnBvcnRfZGV2aWNlKTsKIH0KIAogbW9kdWxlX2luaXQoZWRnZXBvcnRfaW5pdCk7CkBAIC0zMTUxLDggKzMwMDIsOCBAQAogTU9EVUxFX1BBUk1fREVTQyhjbG9zaW5nX3dhaXQsICJNYXhpbXVtIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4sIGluIC4wMSBzZWNzIik7CiAKIG1vZHVsZV9wYXJhbShpZ25vcmVfY3B1X3JldiwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhpZ25vcmVfY3B1X3JldiwgIklnbm9yZSB0aGUgY3B1IHJldmlzaW9uIHdoZW4gY29ubmVjdGluZyB0byBhIGRldmljZSIpOworTU9EVUxFX1BBUk1fREVTQyhpZ25vcmVfY3B1X3JldiwKKwkJCSJJZ25vcmUgdGhlIGNwdSByZXZpc2lvbiB3aGVuIGNvbm5lY3RpbmcgdG8gYSBkZXZpY2UiKTsKIAogbW9kdWxlX3BhcmFtKGRlZmF1bHRfdWFydF9tb2RlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF91YXJ0X21vZGUsICJEZWZhdWx0IHVhcnRfbW9kZSwgMD1SUzIzMiwgLi4uIik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IGQ5ZmIzNzYuLjgzMmE1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtNTMsNyArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSAiaXBhcS5oIgpAQCAtNzQsMTkgKzc0LDIxIEBACiBzdGF0aWMgaW50IGluaXRpYWxfd2FpdDsKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYW4gaXBhcSAqLwotc3RhdGljIGludCAgaXBhcV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBpcGFxX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgaW50ICBpcGFxX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50IGlwYXFfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotCQkgICAgICAgaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKLQkJCSAgIGludCBjb3VudCk7CitzdGF0aWMgaW50ICBpcGFxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGlwYXFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGlwYXFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGlwYXFfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50IGlwYXFfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogc3RhdGljIHZvaWQgaXBhcV93cml0ZV9nYXRoZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCBpcGFxX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyBpbnQgaXBhcV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgaXBhcV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIGlwYXFfZGVzdHJveV9saXN0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIAogCkBAIC01NTAsNyArNTUyLDcgQEAKIAl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlwYXFfaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlwYXFfaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaXBhcV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJImlwYXEiLApAQCAtNTkxLDcgKzU5Myw4IEBACiBzdGF0aWMgaW50CQlieXRlc19pbjsKIHN0YXRpYyBpbnQJCWJ5dGVzX291dDsKIAotc3RhdGljIGludCBpcGFxX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGlwYXFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2OwpAQCAtNjE3LDkgKzYyMCw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgVVJCREFUQV9RVUVVRV9NQVggLyBQQUNLRVRfU0laRTsgaSsrKSB7CiAJCXBrdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3BhY2tldCksIEdGUF9LRVJORUwpOwotCQlpZiAocGt0ID09IE5VTEwpIHsKKwkJaWYgKHBrdCA9PSBOVUxMKQogCQkJZ290byBlbm9tZW07Ci0JCX0KKwogCQlwa3QtPmRhdGEgPSBrbWFsbG9jKFBBQ0tFVF9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHBrdC0+ZGF0YSA9PSBOVUxMKSB7CiAJCQlrZnJlZShwa3QpOwpAQCAtNjM3LDIxICs2NDAsMjQgQEAKIAkgKiBkaXNjaXBsaW5lIGluc3RlYWQgb2YgcXVldWVpbmcuCiAJICovCiAKLQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKLQlwb3J0LT50dHktPnJhdyA9IDE7Ci0JcG9ydC0+dHR5LT5yZWFsX3JhdyA9IDE7Ci0KKwlpZiAodHR5KSB7CisJCXR0eS0+bG93X2xhdGVuY3kgPSAxOworCQkvKiBGSVhNRTogVGhlc2UgdHdvIGFyZSBib2d1cyAqLworCQl0dHktPnJhdyA9IDE7CisJCXR0eS0+cmVhbF9yYXcgPSAxOworCX0KIAkvKgogCSAqIExvc2UgdGhlIHNtYWxsIGJ1ZmZlcnMgdXNic2VyaWFsIHByb3ZpZGVzLiBNYWtlIGxhcmdlciBvbmVzLgogCSAqLwogCiAJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOwotCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CiAJcG9ydC0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKFVSQkRBVEFfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBvcnQtPmJ1bGtfaW5fYnVmZmVyID09IE5VTEwpIHsKIAkJcG9ydC0+YnVsa19vdXRfYnVmZmVyID0gTlVMTDsgLyogcHJldmVudCBkb3VibGUgZnJlZSAqLwogCQlnb3RvIGVub21lbTsKIAl9CisKKwlrZnJlZShwb3J0LT5idWxrX291dF9idWZmZXIpOwogCXBvcnQtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MoVVJCREFUQV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAocG9ydC0+YnVsa19vdXRfYnVmZmVyID09IE5VTEwpIHsKIAkJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOwpAQCAtNjYxLDggKzY2Nyw5IEBACiAJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPmJ1bGtfaW5fYnVmZmVyOwogCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gcG9ydC0+YnVsa19vdXRfYnVmZmVyOwogCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gVVJCREFUQV9TSVpFOwotCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBVUkJEQVRBX1NJWkU7Ci0JCisJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAorCQkJCQkJCT0gVVJCREFUQV9TSVpFOworCiAJbXNsZWVwKDEwMDAqaW5pdGlhbF93YWl0KTsKIAogCS8qCkBAIC02OTEsMTMgKzY5OCwxNSBAQAogCiAJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCi0JCSAgICAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJICAgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCWlwYXFfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KSB7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTcxMywxMiArNzIyLDEzIEBACiB9CiAKIAotc3RhdGljIHZvaWQgaXBhcV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIGlwYXFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCQkJIAorCiAJLyoKIAkgKiBzaHV0IGRvd24gYnVsayByZWFkIGFuZCB3cml0ZQogCSAqLwpAQCAtNzI4LDcgKzczOCw4IEBACiAJa2ZyZWUocHJpdik7CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIE5VTEwpOwogCi0JLyogVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3Ugd2FudCB0byBzZWUgc29tZSBzdGF0aXN0aWNzIGluIHlvdXIgc3lzbG9nICovCisJLyogVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3Ugd2FudCB0byBzZWUgc29tZSBzdGF0aXN0aWNzCisJICogaW4geW91ciBzeXNsb2cgKi8KIAkvKiBpbmZvICgiQnl0ZXMgSW4gPSAlZCAgQnl0ZXMgT3V0ID0gJWQiLCBieXRlc19pbiwgYnl0ZXNfb3V0KTsgKi8KIH0KIApAQCAtNzQ4LDkgKzc1OSwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAorCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtNzU5LDE4ICs3NzEsMjAgQEAKIAl9CiAKIAkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCi0JdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKLQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCi0JCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkgICAgICBpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCSAgICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJICAgIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGlwYXFfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotCQkgICAgICAgaW50IGNvdW50KQorc3RhdGljIGludCBpcGFxX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyCSpjdXJyZW50X3Bvc2l0aW9uID0gYnVmOwogCWludAkJCWJ5dGVzX3NlbnQgPSAwOwpAQCAtNzgwLDkgKzc5NCw4IEBACiAKIAl3aGlsZSAoY291bnQgPiAwKSB7CiAJCXRyYW5zZmVyX3NpemUgPSBtaW4oY291bnQsIFBBQ0tFVF9TSVpFKTsKLQkJaWYgKGlwYXFfd3JpdGVfYnVsayhwb3J0LCBjdXJyZW50X3Bvc2l0aW9uLCB0cmFuc2Zlcl9zaXplKSkgeworCQlpZiAoaXBhcV93cml0ZV9idWxrKHBvcnQsIGN1cnJlbnRfcG9zaXRpb24sIHRyYW5zZmVyX3NpemUpKQogCQkJYnJlYWs7Ci0JCX0KIAkJY3VycmVudF9wb3NpdGlvbiArPSB0cmFuc2Zlcl9zaXplOwogCQlieXRlc19zZW50ICs9IHRyYW5zZmVyX3NpemU7CiAJCWNvdW50IC09IHRyYW5zZmVyX3NpemU7CkBAIC03OTAsMTAgKzgwMywxMCBAQAogCX0KIAogCXJldHVybiBieXRlc19zZW50OwotfSAKK30KIAotc3RhdGljIGludCBpcGFxX3dyaXRlX2J1bGsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJICAgaW50IGNvdW50KQorc3RhdGljIGludCBpcGFxX3dyaXRlX2J1bGsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdCA9IE5VTEw7CkBAIC04MzAsOSArODQzLDkgQEAKIAkJaXBhcV93cml0ZV9nYXRoZXIocG9ydCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLCByZXN1bHQpOwotCQl9CisJCWlmIChyZXN1bHQpCisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CiAJfQpAQCAtODU5LDE2ICs4NzIsMTUgQEAKIAkJCWxpc3RfbW92ZSgmcGt0LT5saXN0LCAmcHJpdi0+ZnJlZWxpc3QpOwogCQkJcHJpdi0+ZnJlZV9sZW4gKz0gUEFDS0VUX1NJWkU7CiAJCX0KLQkJaWYgKHJvb20gPT0gMCkgeworCQlpZiAocm9vbSA9PSAwKQogCQkJYnJlYWs7Ci0JCX0KIAl9CiAKIAljb3VudCA9IFVSQkRBVEFfU0laRSAtIHJvb207Ci0JdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBzZXJpYWwtPmRldiwgCi0JCSAgICAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKLQkJICAgICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50LCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2ssCi0JCSAgICAgIHBvcnQpOworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsCisJCXVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50LAorCQlpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJldHVybjsKIH0KIApAQCAtODkzLDkgKzkwNSw5IEBACiAJCWlwYXFfd3JpdGVfZ2F0aGVyKHBvcnQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKLQkJfQorCQlpZiAocmVzdWx0KQorCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAorCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAl9IGVsc2UgewogCQlwcml2LT5hY3RpdmUgPSAwOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTkwNCwxNiArOTE2LDE4IEBACiAJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocG9ydCk7CiB9CiAKLXN0YXRpYyBpbnQgaXBhcV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IGlwYXFfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlkYmcoIiVzIC0gZnJlZWxlbiAlZCIsIF9fZnVuY19fLCBwcml2LT5mcmVlX2xlbik7CiAJcmV0dXJuIHByaXYtPmZyZWVfbGVuOwogfQogCi1zdGF0aWMgaW50IGlwYXFfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IGlwYXFfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCWRiZygiJXMgLSBxdWV1ZWxlbiAlZCIsIF9fZnVuY19fLCBwcml2LT5xdWV1ZV9sZW4pOwpAQCAtOTQ0LDcgKzk1OCw3IEBACiAJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcmV0dXJuIHVzYl9yZXNldF9jb25maWd1cmF0aW9uIChzZXJpYWwtPmRldik7CisJcmV0dXJuIHVzYl9yZXNldF9jb25maWd1cmF0aW9uKHNlcmlhbC0+ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQpAQCAtOTU3LDcgKzk3MSw3IEBACiAJaW50IHJldHZhbDsKIAlzcGluX2xvY2tfaW5pdCgmd3JpdGVfbGlzdF9sb2NrKTsKIAlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZpcGFxX2RldmljZSk7Ci0JaWYgKHJldHZhbCkgCisJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKIAlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CiAJaWYgKHZlbmRvcikgewpAQCAtOTY3LDcgKzk4MSw3IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpcGFxX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCQkgIAorCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwpAQCAtOTg2LDggKzEwMDAsOCBAQAogbW9kdWxlX2luaXQoaXBhcV9pbml0KTsKIG1vZHVsZV9leGl0KGlwYXFfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKQEAgLTEwMDAsNyArMTAxNCw5IEBACiBNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3QsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRQcm9kdWN0Iik7CiAKIG1vZHVsZV9wYXJhbShjb25uZWN0X3JldHJpZXMsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoY29ubmVjdF9yZXRyaWVzLCAiTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdCByZXRyaWVzIChvbmUgc2Vjb25kIGVhY2gpIik7CitNT0RVTEVfUEFSTV9ERVNDKGNvbm5lY3RfcmV0cmllcywKKwkJIk1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3QgcmV0cmllcyAob25lIHNlY29uZCBlYWNoKSIpOwogCiBtb2R1bGVfcGFyYW0oaW5pdGlhbF93YWl0LCBpbnQsIFNfSVJVR098U19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGluaXRpYWxfd2FpdCwgIlRpbWUgdG8gd2FpdCBiZWZvcmUgYXR0ZW1wdGluZyBhIGNvbm5lY3Rpb24gKGluIHNlY29uZHMpIik7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRpYWxfd2FpdCwKKwkJIlRpbWUgdG8gd2FpdCBiZWZvcmUgYXR0ZW1wdGluZyBhIGNvbm5lY3Rpb24gKGluIHNlY29uZHMpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKaW5kZXggYmM4NWNhNS4uYTg0MjAyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwpAQCAtMTAsMjcgKzEwLDI3IEBACiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogQWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2Ugd2FzIGFjcXVpcmVkIHVzaW5nIFNub29weVBybwotICogb24gTVNGVCdzIE8vUywgYW5kIGV4YW1pbmcgdGhlIE1TRlQgZHJpdmVycycgZGVidWcgb3V0cHV0IAorICogb24gTVNGVCdzIE8vUywgYW5kIGV4YW1pbmcgdGhlIE1TRlQgZHJpdmVycycgZGVidWcgb3V0cHV0CiAgKiAoaW5zYW5lbHkgbGVmdCBfb25fIGluIHRoZSBlbmR1c2VyIHZlcnNpb24pCiAgKgogICogSXQgd2FzIHdyaXR0ZW4gb3V0IG9mIGZydXN0cmF0aW9uIHdpdGggdGhlIElQV2lyZWxlc3MgVVNCIG1vZGVtCiAgKiBzdXBwbGllZCBieSBBeGl0eTNHL1NlbnRlY2ggU291dGggQWZyaWNhIG5vdCBzdXBwb3J0aW5nCiAgKiBMaW51eCB3aGF0c29ldmVyLgogICoKLSAqIE5vYm9keSBwcm92aWRlZCBhbnkgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gdGhhdCB3YXMgbm90IGFscmVhZHkgCisgKiBOb2JvZHkgcHJvdmlkZWQgYW55IHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIHRoYXQgd2FzIG5vdCBhbHJlYWR5CiAgKiBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLgotICogCi0gKiBUaGUgbW9kZW0gYWRoZXJlcyB0byB0aGUgIjNHUFAgVFMgIDI3LjAwNyBBVCBjb21tYW5kIHNldCBmb3IgM0cgCi0gKiBVc2VyIEVxdWlwbWVudCAoVUUpIiBzdGFuZGFyZCwgYXZhaWxhYmxlIGZyb20gCisgKgorICogVGhlIG1vZGVtIGFkaGVyZXMgdG8gdGhlICIzR1BQIFRTICAyNy4wMDcgQVQgY29tbWFuZCBzZXQgZm9yIDNHCisgKiBVc2VyIEVxdWlwbWVudCAoVUUpIiBzdGFuZGFyZCwgYXZhaWxhYmxlIGZyb20KICAqIGh0dHA6Ly93d3cuM2dwcC5vcmcvZnRwL1NwZWNzL2h0bWwtaW5mby8yNzAwNy5odG0KICAqCiAgKiBUaGUgY29kZSB3YXMgb25seSB0ZXN0ZWQgdGhlIElQV2lyZWxlc3MgaGFuZGhlbGQgbW9kZW0gZGlzdHJpYnV0ZWQKICAqIGluIFNvdXRoIEFmcmljYSBieSBTZW50ZWNoLgotICogCisgKgogICogSXQgbWF5IHdvcmsgZm9yIFdvb3NoIEluYyBpbiAubnogdG9vLCBhcyBpdCBhcHBlYXJzIHRoZXkgdXNlIHRoZQogICogc2FtZSBraXQuCiAgKgotICogVGhlcmUgaXMgc3RpbGwgc29tZSB3b3JrIHRvIGJlIGRvbmUgaW4gdGVybXMgb2YgaGFuZGxpbmcgCisgKiBUaGVyZSBpcyBzdGlsbCBzb21lIHdvcmsgdG8gYmUgZG9uZSBpbiB0ZXJtcyBvZiBoYW5kbGluZwogICogRENELCBEVFIsIFJUUywgQ1RTIHdoaWNoIGFyZSBjdXJyZW50bHkgZmFrZWQuCiAgKiBJdCdzIGdvb2QgZW5vdWdoIGZvciBQUFAgYXQgdGhpcyBwb2ludC4gSXQncyBiYXNlZCBvZmYgYWxsIGtpbmRzIG9mCiAgKiBjb2RlIGZvdW5kIGluIHVzYi9zZXJpYWwgYW5kIHVzYi9jbGFzcwpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgpAQCAtNjQsNyArNjQsNyBAQAogCiAvKiBNZXNzYWdlIHNpemVzICovCiAjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCTB4RkYKLSNkZWZpbmUgQ0hBUjJJTlQxNihjMSxjMCkJKCgodTMyKSgoYzEpICYgMHhmZikgPDwgOCkgKyAodTMyKSgoYzApICYgMHhmZikpCisjZGVmaW5lIENIQVIySU5UMTYoYzEsIGMwKQkoKCh1MzIpKChjMSkgJiAweGZmKSA8PCA4KSArICh1MzIpKChjMCkgJiAweGZmKSkKICNkZWZpbmUgTlVNX0JVTEtfVVJCUwkJMjQKICNkZWZpbmUgTlVNX0NPTlRST0xfVVJCUwkxNgogCkBAIC05NCwzMyArOTQsMzQgQEAKIAogLyogZGF0YSBiaXRzICovCiAjZGVmaW5lIGlwd19kdGJfNwkJMHg3MDAKLSNkZWZpbmUgaXB3X2R0Yl84CQkweDgxMAkvLyBvayBzbyB0aGUgZGVmaW5lIGlzIG1pc2xlYWRpbmcsIEkga25vdywgYnV0IGZvcmNlcyA4LG4sMQotCQkJCQkvLyBJIG1lYW4sIGlzIHRoZXJlIGEgcG9pbnQgdG8gYW55IG90aGVyIHNldHRpbmcgdGhlc2UgZGF5cz8gOikJCisjZGVmaW5lIGlwd19kdGJfOAkJMHg4MTAJLyogb2sgc28gdGhlIGRlZmluZSBpcyBtaXNsZWFkaW5nLCBJIGtub3csIGJ1dCBmb3JjZXMgOCxuLDEgKi8KKwkJCQkJLyogSSBtZWFuLCBpcyB0aGVyZSBhIHBvaW50IHRvIGFueSBvdGhlciBzZXR0aW5nIHRoZXNlIGRheXM/IDopICovCiAKIC8qIHVzYiBjb250cm9sIHJlcXVlc3QgdHlwZXMgOiAqLwotI2RlZmluZSBJUFdfU0lPX1JYQ1RMCQkweDAwCS8vIGNvbnRyb2wgYnVsayByeCBjaGFubmVsIHRyYW5zbWlzc2lvbnMsIHZhbHVlPTEvMCAob24vb2ZmKQotI2RlZmluZSBJUFdfU0lPX1NFVF9CQVVECTB4MDEJLy8gc2V0IGJhdWQsIHZhbHVlPXJlcXVlc3RlZCBpcHdfc2lvX2J4eHh4Ci0jZGVmaW5lIElQV19TSU9fU0VUX0xJTkUJMHgwMwkvLyBzZXQgZGF0YWJpdHMsIHBhcml0eS4gdmFsdWU9aXB3X2R0Yl94Ci0jZGVmaW5lIElQV19TSU9fU0VUX1BJTgkJMHgwMwkvLyBzZXQvY2xlYXIgZHRyL3J0cyB2YWx1ZT1pcHdfcGluX3h4eAotI2RlZmluZSBJUFdfU0lPX1BPTEwJCTB4MDgJLy8gZ2V0IHNlcmlhbCBwb3J0IHN0YXR1cyBieXRlLCBjYWxsIHdpdGggdmFsdWU9MAotI2RlZmluZSBJUFdfU0lPX0lOSVQJCTB4MTEJLy8gaW5pdGlhbGl6ZXMgPyB2YWx1ZT0wIChhcHBlYXJzIGFzIGZpcnN0IHRoaW5nIHRvZG8gb24gb3BlbikKLSNkZWZpbmUgSVBXX1NJT19QVVJHRQkJMHgxMgkvLyBwdXJnZSBhbGwgdHJhbnNtaXNzaW9ucz8sIGNhbGwgd2l0aCB2YWx1ZT1udW1jaGFyX3RvX3B1cmdlCi0jZGVmaW5lIElQV19TSU9fSEFOREZMT1cJMHgxMwkvLyBzZXQgeG9uL3hvZmYgbGltaXRzIHZhbHVlPTAsIGFuZCBhIGJ1ZmZlciBvZiAweDEwIGJ5dGVzCi0jZGVmaW5lIElQV19TSU9fU0VUQ0hBUlMJMHgxMwkvLyBzZXQgdGhlIGZsb3djb250cm9sIHNwZWNpYWwgY2hhcnMsIHZhbHVlPTAsIGJ1Zj02IGJ5dGVzLCAKLQkJCQkJLy8gbGFzdCAyIGJ5dGVzIGNvbnRhaW4gZmxvd2NvbnRyb2wgY2hhcnMgZS5nLiAwMCAwMCAwMCAwMCAxMSAxMworI2RlZmluZSBJUFdfU0lPX1JYQ1RMCQkweDAwCS8qIGNvbnRyb2wgYnVsayByeCBjaGFubmVsIHRyYW5zbWlzc2lvbnMsIHZhbHVlPTEvMCAob24vb2ZmKSAqLworI2RlZmluZSBJUFdfU0lPX1NFVF9CQVVECTB4MDEJLyogc2V0IGJhdWQsIHZhbHVlPXJlcXVlc3RlZCBpcHdfc2lvX2J4eHh4ICovCisjZGVmaW5lIElQV19TSU9fU0VUX0xJTkUJMHgwMwkvKiBzZXQgZGF0YWJpdHMsIHBhcml0eS4gdmFsdWU9aXB3X2R0Yl94ICovCisjZGVmaW5lIElQV19TSU9fU0VUX1BJTgkJMHgwMwkvKiBzZXQvY2xlYXIgZHRyL3J0cyB2YWx1ZT1pcHdfcGluX3h4eCAqLworI2RlZmluZSBJUFdfU0lPX1BPTEwJCTB4MDgJLyogZ2V0IHNlcmlhbCBwb3J0IHN0YXR1cyBieXRlLCBjYWxsIHdpdGggdmFsdWU9MCAqLworI2RlZmluZSBJUFdfU0lPX0lOSVQJCTB4MTEJLyogaW5pdGlhbGl6ZXMgPyB2YWx1ZT0wIChhcHBlYXJzIGFzIGZpcnN0IHRoaW5nIHRvZG8gb24gb3BlbikgKi8KKyNkZWZpbmUgSVBXX1NJT19QVVJHRQkJMHgxMgkvKiBwdXJnZSBhbGwgdHJhbnNtaXNzaW9ucz8sIGNhbGwgd2l0aCB2YWx1ZT1udW1jaGFyX3RvX3B1cmdlICovCisjZGVmaW5lIElQV19TSU9fSEFOREZMT1cJMHgxMwkvKiBzZXQgeG9uL3hvZmYgbGltaXRzIHZhbHVlPTAsIGFuZCBhIGJ1ZmZlciBvZiAweDEwIGJ5dGVzICovCisjZGVmaW5lIElQV19TSU9fU0VUQ0hBUlMJMHgxMwkvKiBzZXQgdGhlIGZsb3djb250cm9sIHNwZWNpYWwgY2hhcnMsIHZhbHVlPTAsIGJ1Zj02IGJ5dGVzLCAqLworCQkJCQkvKiBsYXN0IDIgYnl0ZXMgY29udGFpbiBmbG93Y29udHJvbCBjaGFycyBlLmcuIDAwIDAwIDAwIDAwIDExIDEzICovCiAKIC8qIHZhbHVlcyB1c2VkIGZvciByZXF1ZXN0IElQV19TSU9fU0VUX1BJTiAqLwogI2RlZmluZSBJUFdfUElOX1NFVERUUgkJMHgxMDEKICNkZWZpbmUgSVBXX1BJTl9TRVRSVFMJCTB4MjAyCiAjZGVmaW5lIElQV19QSU5fQ0xSRFRSCQkweDEwMAotI2RlZmluZSBJUFdfUElOX0NMUlJUUwkJMHgyMDAgLy8gdW5jb25maXJtZWQKKyNkZWZpbmUgSVBXX1BJTl9DTFJSVFMJCTB4MjAwIC8qIHVuY29uZmlybWVkICovCiAKIC8qIHZhbHVlcyB1c2VkIGZvciByZXF1ZXN0IElQV19TSU9fUlhDVEwgKi8KICNkZWZpbmUgSVBXX1JYQlVMS19PTgkJMQogI2RlZmluZSBJUFdfUlhCVUxLX09GRgkJMAogCiAvKiB2YXJpb3VzIDE2IGJ5dGUgaGFyZGNvZGVkIHRyYW5zZmVyYnVmZmVycyB1c2VkIGJ5IGZsb3cgY29udHJvbCAqLwotI2RlZmluZSBJUFdfQllURVNfRkxPV0lOSVQJeyAweDAxLCAwLCAwLCAwLCAweDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKyNkZWZpbmUgSVBXX0JZVEVTX0ZMT1dJTklUCXsgMHgwMSwgMCwgMCwgMCwgMHg0MCwgMCwgMCwgMCwgXAorCQkJCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KIAogLyogSW50ZXJwcmV0YXRpb24gb2YgbW9kZW0gc3RhdHVzIGxpbmVzICovCiAvKiBUaGVzZSBuZWVkIHNvcnRpbmcgb3V0IGJ5IGluZGl2aWR1YWxseSBjb25uZWN0aW5nIHBpbnMgYW5kIGNoZWNraW5nCkBAIC0xMzIsMTcgKzEzMyw2IEBACiAjZGVmaW5lIElQV19DVFMJCQkoKDE8PDUpIHwgKDE8PDQpKQogCiAjZGVmaW5lIElQV19XQU5UU19UT19TRU5ECTB4MzAKLS8vI2RlZmluZSBJUFdfRFRSCQkJLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLwotLy8jZGVmaW5lIElQV19DVFMJCQkvKiBDbGVhciBUbyBTZW5kICovCi0vLyNkZWZpbmUgSVBXX0NECQkJLyogQ2FycmllciBEZXRlY3QgKi8KLS8vI2RlZmluZSBJUFdfRFNSCQkJLyogRGF0YSBTZXQgUmVhZHkgKi8KLS8vI2RlZmluZSBJUFdfUnhECQkJLyogUmVjZWl2ZSBwaW4gKi8KLQotLy8jZGVmaW5lIElQV19MRQotLy8jZGVmaW5lIElQV19SVFMJCQotLy8jZGVmaW5lIElQV19TVAkJCi0vLyNkZWZpbmUgSVBXX1NSCQkKLS8vI2RlZmluZSBJUFdfUkkJCQkvKiBSaW5nIEluZGljYXRvciAqLwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2lwd19pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoSVBXX1ZJRCwgSVBXX1BJRCkgfSwKQEAgLTE3Nyw5ICsxNjcsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtMTg3LDE5ICsxNzgsMjIgQEAKIAl9CiAKIAkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCi0JdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKLQkJCSAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKIAkJCQkJICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJICAgaXB3X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICBpcHdfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBpcHdfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgaXB3X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAl1OCBidWZfZmxvd19zdGF0aWNbMTZdID0gSVBXX0JZVEVTX0ZMT1dJTklUOwpAQCAtMjEyLDI5ICsyMDYsMzMgQEAKIAlpZiAoIWJ1Zl9mbG93X2luaXQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHBvcnQtPnR0eSkKLQkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKLQkvKiAtLTE6IFRlbGwgdGhlIG1vZGVtIHRvIGluaXRpYWxpemUgKHdlIHRoaW5rKSBGcm9tIHNuaWZmcyB0aGlzIGlzIGFsd2F5cyB0aGUKLQkgKiBmaXJzdCB0aGluZyB0aGF0IGdldHMgc2VudCB0byB0aGUgbW9kZW0gZHVyaW5nIG9wZW5pbmcgb2YgdGhlIGRldmljZSAqLwotCWRiZygiJXM6IFNlbmRpbmcgU0lPX0lOSVQgKHdlIGd1ZXNzKSIsX19mdW5jX18pOwotCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsMCksCi0JCQkJIElQV19TSU9fSU5JVCwKLQkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAotCQkJCSAwLAotCQkJCSAwLCAvKiBpbmRleCAqLwotCQkJCSBOVUxMLAotCQkJCSAwLAotCQkJCSAxMDAwMDApOworCS8qIC0tMTogVGVsbCB0aGUgbW9kZW0gdG8gaW5pdGlhbGl6ZSAod2UgdGhpbmspIEZyb20gc25pZmZzIHRoaXMgaXMKKwkgKglhbHdheXMgdGhlIGZpcnN0IHRoaW5nIHRoYXQgZ2V0cyBzZW50IHRvIHRoZSBtb2RlbSBkdXJpbmcKKwkgKglvcGVuaW5nIG9mIHRoZSBkZXZpY2UgKi8KKwlkYmcoIiVzOiBTZW5kaW5nIFNJT19JTklUICh3ZSBndWVzcykiLCBfX2Z1bmNfXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkgSVBXX1NJT19JTklULAorCQkJIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCSAwLAorCQkJIDAsIC8qIGluZGV4ICovCisJCQkgTlVMTCwKKwkJCSAwLAorCQkJIDEwMDAwMCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgIkluaXQgb2YgbW9kZW0gZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIkluaXQgb2YgbW9kZW0gZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmVzdWx0KTsKIAogCS8qIHJlc2V0IHRoZSBidWxrIHBpcGVzICovCi0JdXNiX2NsZWFyX2hhbHQoZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcykpOwotCXVzYl9jbGVhcl9oYWx0KGRldiwgdXNiX3NuZGJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSk7CisJdXNiX2NsZWFyX2hhbHQoZGV2LAorCQkJdXNiX3JjdmJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpKTsKKwl1c2JfY2xlYXJfaGFsdChkZXYsCisJCQl1c2Jfc25kYnVsa3BpcGUoZGV2LCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpKTsKIAotCS8qLS0yOiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLwkKLQlkYmcoIiVzOiBzZXR0aW5nIHVwIGJ1bGsgcmVhZCBjYWxsYmFjayIsX19mdW5jX18pOworCS8qLS0yOiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCWRiZygiJXM6IHNldHRpbmcgdXAgYnVsayByZWFkIGNhbGxiYWNrIiwgX19mdW5jX18pOwogCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBkZXYsCiAJCQkgIHVzYl9yY3ZidWxrcGlwZShkZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKIAkJCSAgcG9ydC0+YnVsa19pbl9idWZmZXIsCkBAIC0yNDIsNjYgKzI0MCw3MiBAQAogCQkJICBpcHdfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIF9fZnVuY19fLCByZXN1bHQpOworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCiAJLyotLTM6IFRlbGwgdGhlIG1vZGVtIHRvIG9wZW4gdGhlIGZsb29kZ2F0ZXMgb24gdGhlIHJ4IGJ1bGsgY2hhbm5lbCAqLwotCWRiZygiJXM6YXNraW5nIG1vZGVtIGZvciBSeFJlYWQgKFJYQlVMS19PTikiLF9fZnVuY19fKTsKKwlkYmcoIiVzOmFza2luZyBtb2RlbSBmb3IgUnhSZWFkIChSWEJVTEtfT04pIiwgX19mdW5jX18pOwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAotCQkJCSBJUFdfU0lPX1JYQ1RMLAotCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCi0JCQkJIElQV19SWEJVTEtfT04sCi0JCQkJIDAsIC8qIGluZGV4ICovCi0JCQkJIE5VTEwsCi0JCQkJIDAsCi0JCQkJIDEwMDAwMCk7Ci0JaWYgKHJlc3VsdCA8IDApIAotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJFbmFibGluZyBidWxrIFJ4UmVhZCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByZXN1bHQpOworCQkJIElQV19TSU9fUlhDVEwsCisJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJIElQV19SWEJVTEtfT04sCisJCQkgMCwgLyogaW5kZXggKi8KKwkJCSBOVUxMLAorCQkJIDAsCisJCQkgMTAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIkVuYWJsaW5nIGJ1bGsgUnhSZWFkIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJlc3VsdCk7CiAKIAkvKi0tNDogc2V0dXAgdGhlIGluaXRpYWwgZmxvd2NvbnRyb2wgKi8KLQlkYmcoIiVzOnNldHRpbmcgaW5pdCBmbG93Y29udHJvbCAoJXMpIixfX2Z1bmNfXyxidWZfZmxvd19pbml0KTsKKwlkYmcoIiVzOnNldHRpbmcgaW5pdCBmbG93Y29udHJvbCAoJXMpIiwgX19mdW5jX18sIGJ1Zl9mbG93X2luaXQpOwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAotCQkJCSBJUFdfU0lPX0hBTkRGTE9XLAotCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCi0JCQkJIDAsCi0JCQkJIDAsCi0JCQkJIGJ1Zl9mbG93X2luaXQsCi0JCQkJIDB4MTAsCi0JCQkJIDIwMDAwMCk7CisJCQkgSVBXX1NJT19IQU5ERkxPVywKKwkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkgMCwKKwkJCSAwLAorCQkJIGJ1Zl9mbG93X2luaXQsCisJCQkgMHgxMCwKKwkJCSAyMDAwMDApOwogCWlmIChyZXN1bHQgPCAwKQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJpbml0aWFsIGZsb3djb250cm9sIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJpbml0aWFsIGZsb3djb250cm9sIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJlc3VsdCk7CiAKIAogCS8qLS01OiByYWlzZSB0aGUgZHRyICovCi0JZGJnKCIlczpyYWlzaW5nIGR0ciIsX19mdW5jX18pOworCWRiZygiJXM6cmFpc2luZyBkdHIiLCBfX2Z1bmNfXyk7CiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCi0JCQkJIElQV19TSU9fU0VUX1BJTiwKLQkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAotCQkJCSBJUFdfUElOX1NFVERUUiwKLQkJCQkgMCwKLQkJCQkgTlVMTCwKLQkJCQkgMCwKLQkJCQkgMjAwMDAwKTsKKwkJCSBJUFdfU0lPX1NFVF9QSU4sCisJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJIElQV19QSU5fU0VURFRSLAorCQkJIDAsCisJCQkgTlVMTCwKKwkJCSAwLAorCQkJIDIwMDAwMCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgInNldHRpbmcgZHRyIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkic2V0dGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmVzdWx0KTsKIAogCS8qLS02OiByYWlzZSB0aGUgcnRzICovCi0JZGJnKCIlczpyYWlzaW5nIHJ0cyIsX19mdW5jX18pOworCWRiZygiJXM6cmFpc2luZyBydHMiLCBfX2Z1bmNfXyk7CiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCi0JCQkJIElQV19TSU9fU0VUX1BJTiwKLQkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAotCQkJCSBJUFdfUElOX1NFVFJUUywKLQkJCQkgMCwKLQkJCQkgTlVMTCwKLQkJCQkgMCwKLQkJCQkgMjAwMDAwKTsKKwkJCSBJUFdfU0lPX1NFVF9QSU4sCisJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJIElQV19QSU5fU0VUUlRTLAorCQkJIDAsCisJCQkgTlVMTCwKKwkJCSAwLAorCQkJIDIwMDAwMCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgInNldHRpbmcgZHRyIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJlc3VsdCk7Ci0JCisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkic2V0dGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmVzdWx0KTsKKwogCWtmcmVlKGJ1Zl9mbG93X2luaXQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpcHdfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIHZvaWQgaXB3X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJaW50IHJlc3VsdDsKQEAgLTMxMiw1NiArMzE2LDYyIEBACiAJfQogCiAJLyotLTE6IGRyb3AgdGhlIGR0ciAqLwotCWRiZygiJXM6ZHJvcHBpbmcgZHRyIixfX2Z1bmNfXyk7CisJZGJnKCIlczpkcm9wcGluZyBkdHIiLCBfX2Z1bmNfXyk7CiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCi0JCQkJIElQV19TSU9fU0VUX1BJTiwKLQkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAotCQkJCSBJUFdfUElOX0NMUkRUUiwKLQkJCQkgMCwKLQkJCQkgTlVMTCwKLQkJCQkgMCwKLQkJCQkgMjAwMDAwKTsKKwkJCSBJUFdfU0lPX1NFVF9QSU4sCisJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJIElQV19QSU5fQ0xSRFRSLAorCQkJIDAsCisJCQkgTlVMTCwKKwkJCSAwLAorCQkJIDIwMDAwMCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgImRyb3BwaW5nIGR0ciBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJkcm9wcGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwKKwkJCQkJCQkJcmVzdWx0KTsKIAogCS8qLS0yOiBkcm9wIHRoZSBydHMgKi8KLQlkYmcoIiVzOmRyb3BwaW5nIHJ0cyIsX19mdW5jX18pOworCWRiZygiJXM6ZHJvcHBpbmcgcnRzIiwgX19mdW5jX18pOwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAotCQkJCSBJUFdfU0lPX1NFVF9QSU4sIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKLQkJCQkgSVBXX1BJTl9DTFJSVFMsCi0JCQkJIDAsCi0JCQkJIE5VTEwsCi0JCQkJIDAsCi0JCQkJIDIwMDAwMCk7CisJCQkgSVBXX1NJT19TRVRfUElOLCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJIAkJVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJIElQV19QSU5fQ0xSUlRTLAorCQkJIDAsCisJCQkgTlVMTCwKKwkJCSAwLAorCQkJIDIwMDAwMCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgImRyb3BwaW5nIHJ0cyBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJImRyb3BwaW5nIHJ0cyBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByZXN1bHQpOwogCiAKIAkvKi0tMzogcHVyZ2UgKi8KLQlkYmcoIiVzOnNlbmRpbmcgcHVyZ2UiLF9fZnVuY19fKTsKKwlkYmcoIiVzOnNlbmRpbmcgcHVyZ2UiLCBfX2Z1bmNfXyk7CiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCi0JCQkJIElQV19TSU9fUFVSR0UsIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKLQkJCQkgMHgwMywKLQkJCQkgMCwKLQkJCQkgTlVMTCwKLQkJCQkgMCwKLQkJCQkgMjAwMDAwKTsKKwkJCSBJUFdfU0lPX1BVUkdFLCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJIAkJVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJIDB4MDMsCisJCQkgMCwKKwkJCSBOVUxMLAorCQkJIDAsCisJCQkgMjAwMDAwKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAicHVyZ2UgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmVzdWx0KTsKIAogCi0JLyogc2VuZCBSWEJVTEtfb2ZmICh0ZWxsIG1vZGVtIHRvIHN0b3AgdHJhbnNtaXR0aW5nIGJ1bGsgZGF0YSBvbiByeCBjaGFuKSAqLworCS8qIHNlbmQgUlhCVUxLX29mZiAodGVsbCBtb2RlbSB0byBzdG9wIHRyYW5zbWl0dGluZyBidWxrIGRhdGEgb24KKwkgICByeCBjaGFuKSAqLwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAotCQkJCSBJUFdfU0lPX1JYQ1RMLAotCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCi0JCQkJIElQV19SWEJVTEtfT0ZGLAotCQkJCSAwLCAvKiBpbmRleCAqLwotCQkJCSBOVUxMLAotCQkJCSAwLAotCQkJCSAxMDAwMDApOworCQkJIElQV19TSU9fUlhDVEwsCisJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJIElQV19SWEJVTEtfT0ZGLAorCQkJIDAsIC8qIGluZGV4ICovCisJCQkgTlVMTCwKKwkJCSAwLAorCQkJIDEwMDAwMCk7CiAKIAlpZiAocmVzdWx0IDwgMCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRGlzYWJsaW5nIGJ1bGsgUnhSZWFkIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJEaXNhYmxpbmcgYnVsayBSeFJlYWQgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmVzdWx0KTsKIAogCS8qIHNodXRkb3duIGFueSBpbi1mbGlnaHQgdXJicyB0aGF0IHdlIGtub3cgYWJvdXQgKi8KIAl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwpAQCAtMzg0LDEzICszOTQsMTQgQEAKIAl1c2Jfc2VyaWFsX3BvcnRfc29mdGludChwb3J0KTsKIH0KIAotc3RhdGljIGludCBpcHdfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGlwd193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJaW50IHJldDsKIAogCWRiZygiJXM6IFRPUDogY291bnQ9JWQsIGluX2ludGVycnVwdD0lbGQiLCBfX2Z1bmNfXywKLQkJY291bnQsIGluX2ludGVycnVwdCgpICk7CisJCWNvdW50LCBpbl9pbnRlcnJ1cHQoKSk7CiAKIAlpZiAoY291bnQgPT0gMCkgewogCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19mdW5jX18pOwpAQCAtNDIxLDEzICs0MzIsMTQgQEAKIAlyZXQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXQgIT0gMCkgewogCQlwb3J0LT53cml0ZV91cmJfYnVzeSA9IDA7Ci0JCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBlcnJvciA9ICVkIiwgX19mdW5jX18sIHJldCk7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBlcnJvciA9ICVkIiwKKwkJCQkJCQkJX19mdW5jX18sIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJZGJnKCIlcyByZXR1cm5pbmcgJWQiLCBfX2Z1bmNfXywgY291bnQpOwogCXJldHVybiBjb3VudDsKLX0gCit9CiAKIHN0YXRpYyBpbnQgaXB3X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CkBAIC00ODYsOCArNDk4LDggQEAKIG1vZHVsZV9leGl0KHVzYl9pcHdfZXhpdCk7CiAKIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwotTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOwotTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCmluZGV4IDAwNGQ1NzMuLmU1OTE1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTE5LDcgKzE5LDEyIEBACiAgKiB3YXMgd3JpdHRlbiBieSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+LCBEYWcgQnJhdHRsaQogICogPGRhZ0BicmF0dGxpLm5ldD4sIGFuZCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CiAgKgotICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcworICogZHJpdmVyCisgKgorICogMjAwOF9KdW5fMDIgIEZlbGlwZSBCYWxiaSA8bWVAZmVsaXBlYmFsYmkuY29tPgorICoJSW50cm9kdWNlZCBjb21tb24gaGVhZGVyIHRvIGJlIHVzZWQgYWxzbyBpbiBVU0IgR2FkZ2V0IEZyYW1ld29yay4KKyAqCVN0aWxsIG5lZWRzIHNvbWUgb3RoZXIgc3R5bGUgZml4ZXMuCiAgKgogICogMjAwN19KdW5fMjEgIEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CiAgKglNaW5pbWFsIGNsZWFudXBzIGZvciBzb21lIG9mIHRoZSBkcml2ZXIgcHJvYmxlbnMgYW5kIHR0eSBsYXllciBhYnVzZS4KQEAgLTU5LDkgKzY0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvaXJkYS5oPgogCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgpAQCAtNzAsMTAwICs3Niw3NyBAQAogI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBJUiBEb25nbGUgZHJpdmVyIgogCi0vKiBVU0IgSXJEQSBjbGFzcyBzcGVjIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIFVTQl9DTEFTU19JUkRBCQkweDAyCi0jZGVmaW5lIFVTQl9EVF9JUkRBCQkweDIxCi0jZGVmaW5lIElVX1JFUV9HRVRfQ0xBU1NfREVTQwkweDA2Ci0jZGVmaW5lIFNQRUVEXzI0MDAJCTB4MDEKLSNkZWZpbmUgU1BFRURfOTYwMAkJMHgwMgotI2RlZmluZSBTUEVFRF8xOTIwMAkJMHgwMwotI2RlZmluZSBTUEVFRF8zODQwMAkJMHgwNAotI2RlZmluZSBTUEVFRF81NzYwMAkJMHgwNQotI2RlZmluZSBTUEVFRF8xMTUyMDAJCTB4MDYKLSNkZWZpbmUgU1BFRURfNTc2MDAwCQkweDA3Ci0jZGVmaW5lIFNQRUVEXzExNTIwMDAJCTB4MDgKLSNkZWZpbmUgU1BFRURfNDAwMDAwMAkJMHgwOQotCi1zdHJ1Y3QgaXJkYV9jbGFzc19kZXNjIHsKLQl1OAliTGVuZ3RoOwotCXU4CWJEZXNjcmlwdG9yVHlwZTsKLQl1MTYJYmNkU3BlY1JldmlzaW9uOwotCXU4CWJtRGF0YVNpemU7Ci0JdTgJYm1XaW5kb3dTaXplOwotCXU4CWJtTWluVHVybmFyb3VuZFRpbWU7Ci0JdTE2CXdCYXVkUmF0ZTsKLQl1OAlibUFkZGl0aW9uYWxCT0ZzOwotCXU4CWJJcmRhUmF0ZVNuaWZmOwotCXU4CWJNYXhVbmljYXN0TGlzdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiBzdGF0aWMgaW50IGRlYnVnOwogCiAvKiBpZiBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyLCB0aGVuIHVzZSB0aGVpciB2YWx1ZSBmb3IgdGhlIHNpemUgb2YgdGhlIHJlYWQgYW5kCiAgKiB3cml0ZSB1cmJzICovCiBzdGF0aWMgaW50IGJ1ZmZlcl9zaXplOworCiAvKiBpZiBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyLCB0aGVuIHVzZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBYQk9GcyAqLwogc3RhdGljIGludCB4Ym9mID0gLTE7CiAKIHN0YXRpYyBpbnQgIGlyX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCAgaXJfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGVwKTsKLXN0YXRpYyB2b2lkIGlyX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZXApOwotc3RhdGljIGludCAgaXJfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIGlyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJc3RydWN0IGZpbGUgKmZpbGVwKTsKK3N0YXRpYyB2b2lkIGlyX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCk7CitzdGF0aWMgaW50ICBpcl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CiBzdGF0aWMgdm9pZCBpcl93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpOwogc3RhdGljIHZvaWQgaXJfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgaXJfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgaXJfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7CiAKIC8qIE5vdCB0aGF0IHRoaXMgbG90IG1lYW5zIHlvdSBjYW4gb25seSBoYXZlIG9uZSBwZXIgc3lzdGVtICovCi1zdGF0aWMgdTggaXJfYmF1ZCA9IDA7Ci1zdGF0aWMgdTggaXJfeGJvZiA9IDA7Ci1zdGF0aWMgdTggaXJfYWRkX2JvZiA9IDA7CitzdGF0aWMgdTggaXJfYmF1ZDsKK3N0YXRpYyB1OCBpcl94Ym9mOworc3RhdGljIHU4IGlyX2FkZF9ib2Y7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpcl9pZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRSgweDA1MGYsIDB4MDE4MCkgfSwJCS8qIEtDIFRlY2hub2xvZ3ksIEtDLTE4MCAqLwogCXsgVVNCX0RFVklDRSgweDA4ZTksIDB4MDEwMCkgfSwJCS8qIFhUTkRBY2Nlc3MgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOWM0LCAweDAwMTEpIH0sCQkvKiBBQ1RpU3lzIEFDVC1JUjIwMDBVICovCi0JeyBVU0JfSU5URVJGQUNFX0lORk8gKFVTQl9DTEFTU19BUFBfU1BFQywgVVNCX0NMQVNTX0lSREEsIDApIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0FQUF9TUEVDLCBVU0JfU1VCQ0xBU1NfSVJEQSwgMCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpcl9pZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpcl9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJImlyLXVzYiIsCi0JLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPQlpZF90YWJsZSwKLQkubm9fZHluYW1pY19pZCA9IAkxLAorCS5uYW1lCQk9ICJpci11c2IiLAorCS5wcm9iZQkJPSB1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IGlyX2lkX3RhYmxlLAorCS5ub19keW5hbWljX2lkCT0gMSwKIH07CiAKLQogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBpcl9kZXZpY2UgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0JVEhJU19NT0RVTEUsCi0JCS5uYW1lID0JCSJpci11c2IiLAorCS5kcml2ZXIJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJpci11c2IiLAogCX0sCi0JLmRlc2NyaXB0aW9uID0JCSJJUiBEb25nbGUiLAotCS51c2JfZHJpdmVyID0gCQkmaXJfZHJpdmVyLAotCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKLQkubnVtX3BvcnRzID0JCTEsCi0JLnNldF90ZXJtaW9zID0JCWlyX3NldF90ZXJtaW9zLAotCS5hdHRhY2ggPQkJaXJfc3RhcnR1cCwKLQkub3BlbiA9CQkJaXJfb3BlbiwKLQkuY2xvc2UgPQkJaXJfY2xvc2UsCi0JLndyaXRlID0JCWlyX3dyaXRlLAotCS53cml0ZV9idWxrX2NhbGxiYWNrID0JaXJfd3JpdGVfYnVsa19jYWxsYmFjaywKLQkucmVhZF9idWxrX2NhbGxiYWNrID0JaXJfcmVhZF9idWxrX2NhbGxiYWNrLAorCS5kZXNjcmlwdGlvbgkJPSAiSVIgRG9uZ2xlIiwKKwkudXNiX2RyaXZlcgkJPSAmaXJfZHJpdmVyLAorCS5pZF90YWJsZQkJPSBpcl9pZF90YWJsZSwKKwkubnVtX3BvcnRzCQk9IDEsCisJLnNldF90ZXJtaW9zCQk9IGlyX3NldF90ZXJtaW9zLAorCS5hdHRhY2gJCQk9IGlyX3N0YXJ0dXAsCisJLm9wZW4JCQk9IGlyX29wZW4sCisJLmNsb3NlCQkJPSBpcl9jbG9zZSwKKwkud3JpdGUJCQk9IGlyX3dyaXRlLAorCS53cml0ZV9idWxrX2NhbGxiYWNrCT0gaXJfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gaXJfcmVhZF9idWxrX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGlyZGFfdXNiX2R1bXBfY2xhc3NfZGVzYyhzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjICpkZXNjKQorc3RhdGljIGlubGluZSB2b2lkIGlyZGFfdXNiX2R1bXBfY2xhc3NfZGVzYyhzdHJ1Y3QgdXNiX2lyZGFfY3NfZGVzY3JpcHRvciAqZGVzYykKIHsKIAlkYmcoImJMZW5ndGg9JXgiLCBkZXNjLT5iTGVuZ3RoKTsKIAlkYmcoImJEZXNjcmlwdG9yVHlwZT0leCIsIGRlc2MtPmJEZXNjcmlwdG9yVHlwZSk7Ci0JZGJnKCJiY2RTcGVjUmV2aXNpb249JXgiLCBkZXNjLT5iY2RTcGVjUmV2aXNpb24pOyAKKwlkYmcoImJjZFNwZWNSZXZpc2lvbj0leCIsIF9fbGUxNl90b19jcHUoZGVzYy0+YmNkU3BlY1JldmlzaW9uKSk7CiAJZGJnKCJibURhdGFTaXplPSV4IiwgZGVzYy0+Ym1EYXRhU2l6ZSk7CiAJZGJnKCJibVdpbmRvd1NpemU9JXgiLCBkZXNjLT5ibVdpbmRvd1NpemUpOwogCWRiZygiYm1NaW5UdXJuYXJvdW5kVGltZT0lZCIsIGRlc2MtPmJtTWluVHVybmFyb3VuZFRpbWUpOwotCWRiZygid0JhdWRSYXRlPSV4IiwgZGVzYy0+d0JhdWRSYXRlKTsKKwlkYmcoIndCYXVkUmF0ZT0leCIsIF9fbGUxNl90b19jcHUoZGVzYy0+d0JhdWRSYXRlKSk7CiAJZGJnKCJibUFkZGl0aW9uYWxCT0ZzPSV4IiwgZGVzYy0+Ym1BZGRpdGlvbmFsQk9Gcyk7CiAJZGJnKCJiSXJkYVJhdGVTbmlmZj0leCIsIGRlc2MtPmJJcmRhUmF0ZVNuaWZmKTsKIAlkYmcoImJNYXhVbmljYXN0TGlzdD0leCIsIGRlc2MtPmJNYXhVbmljYXN0TGlzdCk7CkBAIC0xODEsMzUgKzE2NCwzNyBAQAogICoKICAqIEJhc2VkIG9uIHRoZSBzYW1lIGZ1bmN0aW9uIGluIGRyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwogICovCi1zdGF0aWMgc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZm51bSkKK3N0YXRpYyBzdHJ1Y3QgdXNiX2lyZGFfY3NfZGVzY3JpcHRvciAqCitpcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2Moc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlmbnVtKQogewotCXN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgKmRlc2M7CisJc3RydWN0IHVzYl9pcmRhX2NzX2Rlc2NyaXB0b3IgKmRlc2M7CiAJaW50IHJldDsKLQkJCi0JZGVzYyA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlc2MgPT0gTlVMTCkgCisKKwlkZXNjID0ga3phbGxvYyhzaXplb2YoKmRlc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlc2MpCiAJCXJldHVybiBOVUxMOwotCQotCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsMCksCi0JCQlJVV9SRVFfR0VUX0NMQVNTX0RFU0MsCisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCVVTQl9SRVFfQ1NfSVJEQV9HRVRfQ0xBU1NfREVTQywKIAkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCiAJCQkwLCBpZm51bSwgZGVzYywgc2l6ZW9mKCpkZXNjKSwgMTAwMCk7Ci0JCisKIAlkYmcoIiVzIC0gIHJldD0lZCIsIF9fZnVuY19fLCByZXQpOwogCWlmIChyZXQgPCBzaXplb2YoKmRlc2MpKSB7CiAJCWRiZygiJXMgLSBjbGFzcyBkZXNjcmlwdG9yIHJlYWQgJXMgKCVkKSIsCiAJCQkJX19mdW5jX18sCi0JCQkJKHJldDwwKSA/ICJmYWlsZWQiIDogInRvbyBzaG9ydCIsCisJCQkJKHJldCA8IDApID8gImZhaWxlZCIgOiAidG9vIHNob3J0IiwKIAkJCQlyZXQpOwogCQlnb3RvIGVycm9yOwogCX0KLQlpZiAoZGVzYy0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9JUkRBKSB7CisJaWYgKGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfQ1NfSVJEQSkgewogCQlkYmcoIiVzIC0gYmFkIGNsYXNzIGRlc2NyaXB0b3IgdHlwZSIsIF9fZnVuY19fKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JCisKIAlpcmRhX3VzYl9kdW1wX2NsYXNzX2Rlc2MoZGVzYyk7CiAJcmV0dXJuIGRlc2M7CisKIGVycm9yOgogCWtmcmVlKGRlc2MpOwogCXJldHVybiBOVUxMOwpAQCAtMjE5LDY0ICsyMDQsMTAxIEBACiBzdGF0aWMgdTggaXJfeGJvZl9jaGFuZ2UodTggeGJvZikKIHsKIAl1OCByZXN1bHQ7CisKIAkvKiByZWZlcmVuY2UgaXJkYS11c2IuYyAqLwotCXN3aXRjaCh4Ym9mKSB7Ci0JCWNhc2UgNDg6IHJlc3VsdCA9IDB4MTA7IGJyZWFrOwotCQljYXNlIDI4OgotCQljYXNlIDI0OiByZXN1bHQgPSAweDIwOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJY2FzZSAxMjogcmVzdWx0ID0gMHgzMDsgYnJlYWs7Ci0JCWNhc2UgIDU6Ci0JCWNhc2UgIDY6IHJlc3VsdCA9IDB4NDA7IGJyZWFrOwotCQljYXNlICAzOiByZXN1bHQgPSAweDUwOyBicmVhazsKLQkJY2FzZSAgMjogcmVzdWx0ID0gMHg2MDsgYnJlYWs7Ci0JCWNhc2UgIDE6IHJlc3VsdCA9IDB4NzA7IGJyZWFrOwotCQljYXNlICAwOiByZXN1bHQgPSAweDgwOyBicmVhazsKKwlzd2l0Y2ggKHhib2YpIHsKKwljYXNlIDQ4OgorCQlyZXN1bHQgPSAweDEwOworCQlicmVhazsKKwljYXNlIDI4OgorCWNhc2UgMjQ6CisJCXJlc3VsdCA9IDB4MjA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSAxMjoKKwkJcmVzdWx0ID0gMHgzMDsKKwkJYnJlYWs7CisJY2FzZSAgNToKKwljYXNlICA2OgorCQlyZXN1bHQgPSAweDQwOworCQlicmVhazsKKwljYXNlICAzOgorCQlyZXN1bHQgPSAweDUwOworCQlicmVhazsKKwljYXNlICAyOgorCQlyZXN1bHQgPSAweDYwOworCQlicmVhazsKKwljYXNlICAxOgorCQlyZXN1bHQgPSAweDcwOworCQlicmVhazsKKwljYXNlICAwOgorCQlyZXN1bHQgPSAweDgwOworCQlicmVhazsKIAl9CisKIAlyZXR1cm4ocmVzdWx0KTsKIH0KIAogCi1zdGF0aWMgaW50IGlyX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgaW50IGlyX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKLQlzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjICppcmRhX2Rlc2M7CisJc3RydWN0IHVzYl9pcmRhX2NzX2Rlc2NyaXB0b3IgKmlyZGFfZGVzYzsKIAotCWlyZGFfZGVzYyA9IGlyZGFfdXNiX2ZpbmRfY2xhc3NfZGVzYyAoc2VyaWFsLT5kZXYsIDApOwotCWlmIChpcmRhX2Rlc2MgPT0gTlVMTCkgewotCQlkZXZfZXJyICgmc2VyaWFsLT5kZXYtPmRldiwgIklSREEgY2xhc3MgZGVzY3JpcHRvciBub3QgZm91bmQsIGRldmljZSBub3QgYm91bmRcbiIpOworCWlyZGFfZGVzYyA9IGlyZGFfdXNiX2ZpbmRfY2xhc3NfZGVzYyhzZXJpYWwtPmRldiwgMCk7CisJaWYgKCFpcmRhX2Rlc2MpIHsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSJJUkRBIGNsYXNzIGRlc2NyaXB0b3Igbm90IGZvdW5kLCBkZXZpY2Ugbm90IGJvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnICgiJXMgLSBCYXVkIHJhdGVzIHN1cHBvcnRlZDolcyVzJXMlcyVzJXMlcyVzJXMiLAorCWRiZygiJXMgLSBCYXVkIHJhdGVzIHN1cHBvcnRlZDolcyVzJXMlcyVzJXMlcyVzJXMiLAogCQlfX2Z1bmNfXywKLQkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDAxKSA/ICIgMjQwMCIgICAgOiAiIiwKLQkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDAyKSA/ICIgOTYwMCIgICAgOiAiIiwKLQkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDA0KSA/ICIgMTkyMDAiICAgOiAiIiwKLQkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDA4KSA/ICIgMzg0MDAiICAgOiAiIiwKLQkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDEwKSA/ICIgNTc2MDAiICAgOiAiIiwKLQkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDIwKSA/ICIgMTE1MjAwIiAgOiAiIiwKLQkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDQwKSA/ICIgNTc2MDAwIiAgOiAiIiwKLQkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDgwKSA/ICIgMTE1MjAwMCIgOiAiIiwKLQkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMTAwKSA/ICIgNDAwMDAwMCIgOiAiIik7CisJCShpcmRhX2Rlc2MtPndCYXVkUmF0ZSAmIFVTQl9JUkRBX0JSXzI0MDApID8gIiAyNDAwIiA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiBVU0JfSVJEQV9CUl85NjAwKSA/ICIgOTYwMCIgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgVVNCX0lSREFfQlJfMTkyMDApID8gIiAxOTIwMCIgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgVVNCX0lSREFfQlJfMzg0MDApID8gIiAzODQwMCIgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgVVNCX0lSREFfQlJfNTc2MDApID8gIiA1NzYwMCIgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgVVNCX0lSREFfQlJfMTE1MjAwKSA/ICIgMTE1MjAwIiA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiBVU0JfSVJEQV9CUl81NzYwMDApID8gIiA1NzYwMDAiIDogIiIsCisJCShpcmRhX2Rlc2MtPndCYXVkUmF0ZSAmIFVTQl9JUkRBX0JSXzExNTIwMDApID8gIiAxMTUyMDAwIiA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiBVU0JfSVJEQV9CUl80MDAwMDAwKSA/ICIgNDAwMDAwMCIgOiAiIik7CiAKLQlzd2l0Y2goIGlyZGFfZGVzYy0+Ym1BZGRpdGlvbmFsQk9GcyApIHsKLQkJY2FzZSAweDAxOiBpcl9hZGRfYm9mID0gNDg7IGJyZWFrOwotCQljYXNlIDB4MDI6IGlyX2FkZF9ib2YgPSAyNDsgYnJlYWs7Ci0JCWNhc2UgMHgwNDogaXJfYWRkX2JvZiA9IDEyOyBicmVhazsKLQkJY2FzZSAweDA4OiBpcl9hZGRfYm9mID0gIDY7IGJyZWFrOwotCQljYXNlIDB4MTA6IGlyX2FkZF9ib2YgPSAgMzsgYnJlYWs7Ci0JCWNhc2UgMHgyMDogaXJfYWRkX2JvZiA9ICAyOyBicmVhazsKLQkJY2FzZSAweDQwOiBpcl9hZGRfYm9mID0gIDE7IGJyZWFrOwotCQljYXNlIDB4ODA6IGlyX2FkZF9ib2YgPSAgMDsgYnJlYWs7Ci0JCWRlZmF1bHQ6OworCXN3aXRjaCAoaXJkYV9kZXNjLT5ibUFkZGl0aW9uYWxCT0ZzKSB7CisJY2FzZSBVU0JfSVJEQV9BQl80ODoKKwkJaXJfYWRkX2JvZiA9IDQ4OworCQlicmVhazsKKwljYXNlIFVTQl9JUkRBX0FCXzI0OgorCQlpcl9hZGRfYm9mID0gMjQ7CisJCWJyZWFrOworCWNhc2UgVVNCX0lSREFfQUJfMTI6CisJCWlyX2FkZF9ib2YgPSAxMjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfSVJEQV9BQl82OgorCQlpcl9hZGRfYm9mID0gNjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfSVJEQV9BQl8zOgorCQlpcl9hZGRfYm9mID0gMzsKKwkJYnJlYWs7CisJY2FzZSBVU0JfSVJEQV9BQl8yOgorCQlpcl9hZGRfYm9mID0gMjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfSVJEQV9BQl8xOgorCQlpcl9hZGRfYm9mID0gMTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfSVJEQV9BQl8wOgorCQlpcl9hZGRfYm9mID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCi0Ja2ZyZWUgKGlyZGFfZGVzYyk7CisJa2ZyZWUoaXJkYV9kZXNjKTsKIAotCXJldHVybiAwOwkJCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXJfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGlyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWNoYXIgKmJ1ZmZlcjsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTI4NSw1MSArMzA3LDU2IEBACiAKIAlpZiAoYnVmZmVyX3NpemUpIHsKIAkJLyogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYnVmZmVyIHNpemVzICovCi0JCWJ1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYnVmZmVyKSB7Ci0JCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJa2ZyZWUgKHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQlrZnJlZShwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IGJ1ZmZlcjsKIAkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZmZXJfc2l6ZTsKIAotCQlidWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWJ1ZmZlcikgewotCQkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCWtmcmVlIChwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCWtmcmVlKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBidWZmZXI7CiAJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZmZlcl9zaXplOwogCQlwb3J0LT5idWxrX291dF9zaXplID0gYnVmZmVyX3NpemU7CiAJfQogCiAJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KLQl1c2JfZmlsbF9idWxrX3VyYiAoCisJdXNiX2ZpbGxfYnVsa191cmIoCiAJCXBvcnQtPnJlYWRfdXJiLAotCQlwb3J0LT5zZXJpYWwtPmRldiwgCi0JCXVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQlwb3J0LT5zZXJpYWwtPmRldiwKKwkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAogCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAogCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJaXJfcmVhZF9idWxrX2NhbGxiYWNrLAogCQlwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlyX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgdm9pZCBpcl9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQogewogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JCQkgCisKIAkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkICovCiAJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKIH0KIAotc3RhdGljIGludCBpcl93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGlyX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKIAlpbnQgcmVzdWx0OwpAQCAtMzM3LDExICszNjQsNiBAQAogCiAJZGJnKCIlcyAtIHBvcnQgPSAlZCwgY291bnQgPSAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKIAotCWlmICghcG9ydC0+dHR5KSB7Ci0JCWRldl9lcnIgKCZwb3J0LT5kZXYsICIlcyAtIG5vIHR0eT8/P1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAoY291bnQgPT0gMCkKIAkJcmV0dXJuIDA7CiAKQEAgLTM1OSw3ICszODEsNyBAQAogCiAJLyoKIAkgKiBUaGUgZmlyc3QgYnl0ZSBvZiB0aGUgcGFja2V0IHdlIHNlbmQgdG8gdGhlIGRldmljZSBjb250YWlucyBhbgotCSAqIGluYmFuZCBoZWFkZXIgd2hpY2ggaW5kaWNhdGVzIGFuIGFkZGl0aW9uYWwgbnVtYmVyIG9mIEJPRnMgYW5kCisJICogaW5ib3VuZCBoZWFkZXIgd2hpY2ggaW5kaWNhdGVzIGFuIGFkZGl0aW9uYWwgbnVtYmVyIG9mIEJPRnMgYW5kCiAJICogYSBiYXVkIHJhdGUgY2hhbmdlLgogCSAqCiAJICogU2VlIHNlY3Rpb24gNS40LjIuMiBvZiB0aGUgVVNCIElyREEgc3BlYy4KQEAgLTM2Nyw5ICszODksOSBAQAogCSp0cmFuc2Zlcl9idWZmZXIgPSBpcl94Ym9mIHwgaXJfYmF1ZDsKIAkrK3RyYW5zZmVyX2J1ZmZlcjsKIAotCW1lbWNweSAodHJhbnNmZXJfYnVmZmVyLCBidWYsIHRyYW5zZmVyX3NpemUpOworCW1lbWNweSh0cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgdHJhbnNmZXJfc2l6ZSk7CiAKLQl1c2JfZmlsbF9idWxrX3VyYiAoCisJdXNiX2ZpbGxfYnVsa191cmIoCiAJCXBvcnQtPndyaXRlX3VyYiwKIAkJcG9ydC0+c2VyaWFsLT5kZXYsCiAJCXVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKQEAgLTM4MSwxNyArNDAzLDE5IEBACiAKIAlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX1pFUk9fUEFDS0VUOwogCi0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KSB7CiAJCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCX0gZWxzZQogCQlyZXN1bHQgPSB0cmFuc2Zlcl9zaXplOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgaXJfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgaXJfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CkBAIC00MDUsNyArNDI5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXVzYl9zZXJpYWxfZGVidWdfZGF0YSAoCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKAogCQlkZWJ1ZywKIAkJJnBvcnQtPmRldiwKIAkJX19mdW5jX18sCkBAIC00MTUsNyArNDM5LDcgQEAKIAl1c2Jfc2VyaWFsX3BvcnRfc29mdGludChwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgaXJfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCBpcl9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKQEAgLTQyNSw3NCArNDQ5LDYxIEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJaWYgKCFwb3J0LT5wb3J0LmNvdW50KSB7CiAJCWRiZygiJXMgLSBwb3J0IGNsb3NlZC4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKIAlzd2l0Y2ggKHN0YXR1cykgewotCQljYXNlIDA6IC8qIFN1Y2Nlc3NmdWwgKi8KKwljYXNlIDA6IC8qIFN1Y2Nlc3NmdWwgKi8KKwkJLyoKKwkJICogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHBhY2tldCB3ZSBnZXQgZnJvbSB0aGUgZGV2aWNlCisJCSAqIGNvbnRhaW5zIGEgYnVzeSBpbmRpY2F0b3IgYW5kIGJhdWQgcmF0ZSBjaGFuZ2UuCisJCSAqIFNlZSBzZWN0aW9uIDUuNC4xLjIgb2YgdGhlIFVTQiBJckRBIHNwZWMuCisJCSAqLworCQlpZiAoKCpkYXRhICYgMHgwZikgPiAwKQorCQkJaXJfYmF1ZCA9ICpkYXRhICYgMHgwZjsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKKwkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisgCQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwkJaWYgKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMSkpIHsKKwkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhKzEsIHVyYi0+YWN0dWFsX2xlbmd0aCAtIDEpOworCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJfQogCi0JCQkvKgotCQkJICogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHBhY2tldCB3ZSBnZXQgZnJvbSB0aGUgZGV2aWNlCi0JCQkgKiBjb250YWlucyBhIGJ1c3kgaW5kaWNhdG9yIGFuZCBiYXVkIHJhdGUgY2hhbmdlLgotCQkJICogU2VlIHNlY3Rpb24gNS40LjEuMiBvZiB0aGUgVVNCIElyREEgc3BlYy4KLQkJCSAqLwotCQkJaWYgKCgqZGF0YSAmIDB4MGYpID4gMCkKLQkJCQlpcl9iYXVkID0gKmRhdGEgJiAweDBmOworCQkvKgorCQkgKiBObyBicmVhayBoZXJlLgorCQkgKiBXZSB3YW50IHRvIHJlc3VibWl0IHRoZSB1cmIgc28gd2UgY2FuIHJlYWQKKwkJICogYWdhaW4uCisJCSAqLwogCi0JCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEgKAotCQkJCWRlYnVnLAotCQkJCSZwb3J0LT5kZXYsCi0JCQkJX19mdW5jX18sCi0JCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAotCQkJCWRhdGEpOwotCi0JCQl0dHkgPSBwb3J0LT50dHk7Ci0KLQkJCWlmICh0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCAtIDEpKSB7Ci0JCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGErMSwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMSk7Ci0JCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIE5vIGJyZWFrIGhlcmUuCi0JCQkgKiBXZSB3YW50IHRvIHJlc3VibWl0IHRoZSB1cmIgc28gd2UgY2FuIHJlYWQKLQkJCSAqIGFnYWluLgotCQkJICovCi0KLQkJY2FzZSAtRVBST1RPOiAvKiB0YWtpbmcgaW5zcGlyYXRpb24gZnJvbSBwbDIzMDMuYyAqLwotCisJY2FzZSAtRVBST1RPOiAvKiB0YWtpbmcgaW5zcGlyYXRpb24gZnJvbSBwbDIzMDMuYyAqLwogCQkJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICovCi0JCQl1c2JfZmlsbF9idWxrX3VyYiAoCi0JCQkJcG9ydC0+cmVhZF91cmIsCi0JCQkJcG9ydC0+c2VyaWFsLT5kZXYsIAotCQkJCXVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKLQkJCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJaXJfcmVhZF9idWxrX2NhbGxiYWNrLAotCQkJCXBvcnQpOworCQl1c2JfZmlsbF9idWxrX3VyYigKKwkJCXBvcnQtPnJlYWRfdXJiLAorCQkJcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCWlyX3JlYWRfYnVsa19jYWxsYmFjaywKKwkJCXBvcnQpOwogCi0JCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAocmVzdWx0KQotCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCByZXN1bHQpOwotCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQlicmVhayA7Ci0KLQkJZGVmYXVsdDoKLQkJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKLQkJCQlfX2Z1bmNfXywKLQkJCQlzdGF0dXMpOwotCQkJYnJlYWsgOwotCisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCWJyZWFrIDsKIAl9Ci0KIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgaXJfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CiAJaW50IHJlc3VsdDsKQEAgLTUwMSw3ICs1MTIsNyBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCiAJLyoKIAkgKiBGSVhNRSwgd2Ugc2hvdWxkIGNvbXBhcmUgdGhlIGJhdWQgcmVxdWVzdCBhZ2FpbnN0IHRoZQpAQCAtNTEwLDE5ICs1MjEsMzYgQEAKIAkgKi8KIAogCXN3aXRjaCAoYmF1ZCkgewotCQljYXNlIDI0MDA6CWlyX2JhdWQgPSBTUEVFRF8yNDAwOyBicmVhazsKLQkJY2FzZSA5NjAwOglpcl9iYXVkID0gU1BFRURfOTYwMDsgYnJlYWs7Ci0JCWNhc2UgMTkyMDA6CWlyX2JhdWQgPSBTUEVFRF8xOTIwMDsgYnJlYWs7Ci0JCWNhc2UgMzg0MDA6CWlyX2JhdWQgPSBTUEVFRF8zODQwMDsgYnJlYWs7Ci0JCWNhc2UgNTc2MDA6CWlyX2JhdWQgPSBTUEVFRF81NzYwMDsgYnJlYWs7Ci0JCWNhc2UgMTE1MjAwOglpcl9iYXVkID0gU1BFRURfMTE1MjAwOyBicmVhazsKLQkJY2FzZSA1NzYwMDA6CWlyX2JhdWQgPSBTUEVFRF81NzYwMDA7IGJyZWFrOwotCQljYXNlIDExNTIwMDA6CWlyX2JhdWQgPSBTUEVFRF8xMTUyMDAwOyBicmVhazsKLQkJY2FzZSA0MDAwMDAwOglpcl9iYXVkID0gU1BFRURfNDAwMDAwMDsgYnJlYWs7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlyX2JhdWQgPSBTUEVFRF85NjAwOwotCQkJYmF1ZCA9IDk2MDA7CisJY2FzZSAyNDAwOgorCQlpcl9iYXVkID0gVVNCX0lSREFfQlJfMjQwMDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwOgorCQlpcl9iYXVkID0gVVNCX0lSREFfQlJfOTYwMDsKKwkJYnJlYWs7CisJY2FzZSAxOTIwMDoKKwkJaXJfYmF1ZCA9IFVTQl9JUkRBX0JSXzE5MjAwOworCQlicmVhazsKKwljYXNlIDM4NDAwOgorCQlpcl9iYXVkID0gVVNCX0lSREFfQlJfMzg0MDA7CisJCWJyZWFrOworCWNhc2UgNTc2MDA6CisJCWlyX2JhdWQgPSBVU0JfSVJEQV9CUl81NzYwMDsKKwkJYnJlYWs7CisJY2FzZSAxMTUyMDA6CisJCWlyX2JhdWQgPSBVU0JfSVJEQV9CUl8xMTUyMDA7CisJCWJyZWFrOworCWNhc2UgNTc2MDAwOgorCQlpcl9iYXVkID0gVVNCX0lSREFfQlJfNTc2MDAwOworCQlicmVhazsKKwljYXNlIDExNTIwMDA6CisJCWlyX2JhdWQgPSBVU0JfSVJEQV9CUl8xMTUyMDAwOworCQlicmVhazsKKwljYXNlIDQwMDAwMDA6CisJCWlyX2JhdWQgPSBVU0JfSVJEQV9CUl80MDAwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpcl9iYXVkID0gVVNCX0lSREFfQlJfOTYwMDsKKwkJYmF1ZCA9IDk2MDA7CiAJfQogCiAJaWYgKHhib2YgPT0gLTEpCkBAIC01MzgsMTAgKzU2NiwxMSBAQAogCXRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOwogCSp0cmFuc2Zlcl9idWZmZXIgPSBpcl94Ym9mIHwgaXJfYmF1ZDsKIAotCXVzYl9maWxsX2J1bGtfdXJiICgKKwl1c2JfZmlsbF9idWxrX3VyYigKIAkJcG9ydC0+d3JpdGVfdXJiLAogCQlwb3J0LT5zZXJpYWwtPmRldiwKLQkJdXNiX3NuZGJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQl1c2Jfc25kYnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAogCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJMSwKIAkJaXJfd3JpdGVfYnVsa19jYWxsYmFjaywKQEAgLTU0OSwzOCArNTc4LDQ0IEBACiAKIAlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX1pFUk9fUEFDS0VUOwogCi0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAogCS8qIE9ubHkgc3BlZWQgY2hhbmdlcyBhcmUgc3VwcG9ydGVkICovCi0JdHR5X3Rlcm1pb3NfY29weV9odyhwb3J0LT50dHktPnRlcm1pb3MsIG9sZF90ZXJtaW9zKTsKLQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShwb3J0LT50dHksIGJhdWQsIGJhdWQpOworCXR0eV90ZXJtaW9zX2NvcHlfaHcodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7CisJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKIH0KIAotCi1zdGF0aWMgaW50IF9faW5pdCBpcl9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaXJfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CisKIAlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZpcl9kZXZpY2UpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlyX2RyaXZlcik7Ci0JaWYgKHJldHZhbCkgCisJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCiAJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCiAJcmV0dXJuIDA7CisKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpcl9kZXZpY2UpOworCiBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcl9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGlyX2V4aXQodm9pZCkKIHsKLQl1c2JfZGVyZWdpc3RlciAoJmlyX2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmaXJfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3RlcigmaXJfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlyX2RldmljZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwppbmRleCBhMDFlOTg3Li5kZGZmMzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwpAQCAtMTQ0LDkgKzE0NCwxMCBAQAogCX0KIH0KIAotc3RhdGljIGludCBpdXVfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGl1dV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaXV1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTcxLDggKzE3Miw5IEBACiAgKiBXaGVuIG5vIGNhcmQgLCB0aGUgcmVhZGVyIHJlc3BvbmQgd2l0aCBUSU9DTV9DRAogICogVGhpcyBpcyBrbm93biBhcyBDRCBhdXRvZGV0ZWN0IG1lY2hhbmlzbQogICovCi1zdGF0aWMgaW50IGl1dV90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgaXV1X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpdXVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKQEAgLTMxNiwxMSArMzE4LDEwIEBACiAJCQkJCSBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLCBidWYsCiAJCQkgY291bnQsICZhY3R1YWwsIEhaICogMSk7CiAKLQlpZiAoc3RhdHVzICE9IElVVV9PUEVSQVRJT05fT0spIHsKKwlpZiAoc3RhdHVzICE9IElVVV9PUEVSQVRJT05fT0spCiAJCWRiZygiJXMgLSBlcnJvciA9ICUyeCIsIF9fZnVuY19fLCBzdGF0dXMpOwotCX0gZWxzZSB7CisJZWxzZQogCQlkYmcoIiVzIC0gd3JpdGUgT0sgISIsIF9fZnVuY19fKTsKLQl9CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzQwLDEyICszNDEsMTAgQEAKIAkJCQkJIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwgYnVmLAogCQkJIGNvdW50LCAmYWN0dWFsLCBIWiAqIDEpOwogCi0JaWYgKHN0YXR1cyAhPSBJVVVfT1BFUkFUSU9OX09LKSB7CisJaWYgKHN0YXR1cyAhPSBJVVVfT1BFUkFUSU9OX09LKQogCQlkYmcoIiVzIC0gZXJyb3IgPSAlMngiLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJZGJnKCIlcyAtIHJlYWQgT0sgISIsIF9fZnVuY19fKTsKLQl9Ci0KIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC02MzAsNyArNjI5LDcgQEAKIAl9CiAKIAlkYmcoIiVzIC0gJWkgY2hhcnMgdG8gd3JpdGUiLCBfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQl0dHkgPSBwb3J0LT50dHk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZGJnKCIlcyAtIGRhdGEgaXMgTlVMTCAhISEiLCBfX2Z1bmNfXyk7CiAJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGggJiYgZGF0YSkgewpAQCAtNzUyLDExICs3NTEsMTAgQEAKIAkvKiBpZiBub3RoaW5nIHRvIHdyaXRlIGNhbGwgYWdhaW4gcnhjbWQgKi8KIAlkYmcoIiVzIC0gcnhjbWQgcmVjYWxsIiwgX19mdW5jX18pOwogCWl1dV9sZWRfYWN0aXZpdHlfb2ZmKHVyYik7Ci0JcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGl1dV91YXJ0X3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHU4ICpidWYsCi0JCQkgIGludCBjb3VudCkKK3N0YXRpYyBpbnQgaXV1X3VhcnRfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgY29uc3QgdTggKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCBpdXVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzY5LDE0ICs3NjcsMTQgQEAKIAlpZiAocHJpdi0+d3JpdGVsZW4gPiAwKSB7CiAJCS8qIGJ1ZmZlciBhbHJlYWR5IGZpbGxlZCBidXQgbm90IGNvbW1pdGVkICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCS8qIGZpbGwgdGhlIGJ1ZmZlciAqLwogCW1lbWNweShwcml2LT53cml0ZWJ1ZiwgYnVmLCBjb3VudCk7CiAJcHJpdi0+d3JpdGVsZW4gPSBjb3VudDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRfcnhjbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpAQCAtOTQ4LDcgKzk0Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl1dV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIGl1dV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJLyogaXV1X2xlZCAocG9ydCwyNTUsMCwwLDApOyAqLwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CkBAIC05NjQsOCArOTYzLDggQEAKIAogCWl1dV91YXJ0X29mZihwb3J0KTsKIAlpZiAoc2VyaWFsLT5kZXYpIHsKLQkJaWYgKHBvcnQtPnR0eSkgewotCQkJY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJaWYgKHR0eSkgeworCQkJY19jZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAkJCWlmIChjX2NmbGFnICYgSFVQQ0wpIHsKIAkJCQkvKiBkcm9wIERUUiBhbmQgUlRTICovCiAJCQkJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTk4OSw3ICs5ODgsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBpdXVfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgaXV1X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJdTggKmJ1ZjsKQEAgLTEwMzYsMTUgKzEwMzYsMTcgQEAKIAogCS8qIHNldCB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmICghcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCkgewotCQkqKHBvcnQtPnR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IENMT0NBTCB8IENSRUFEIHwgQ1M4IHwgQjk2MDAKLQkJCQkJCXwgVElPQ01fQ1RTIHwgQ1NUT1BCIHwgUEFSRU5COwotCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfbGZsYWcgPSAwOwotCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfb2ZsYWcgPSAwOwotCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcgPSAwOworCWlmICh0dHkgJiYgIXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQpIHsKKwkJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBDTE9DQUwgfCBDUkVBRCB8IENTOCB8IEI5NjAwCisJCQkJCXwgVElPQ01fQ1RTIHwgQ1NUT1BCIHwgUEFSRU5COworCQl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gOTYwMDsKKwkJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDk2MDA7CisJCXR0eS0+dGVybWlvcy0+Y19sZmxhZyA9IDA7CisJCXR0eS0+dGVybWlvcy0+Y19vZmxhZyA9IDA7CisJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyA9IDA7CiAJCXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQgPSAxOwotCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAJCXByaXYtPnBvbGwgPSAwOwogCSB9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMTE0OCw3ICsxMTUwLDcgQEAKIAlpZiAocmVzdWx0KSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIgogCQkJIiBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7Ci0JCWl1dV9jbG9zZShwb3J0LCBOVUxMKTsKKwkJaXV1X2Nsb3NlKHR0eSwgcG9ydCwgTlVMTCk7CiAJCXJldHVybiAtRVBST1RPOwogCX0gZWxzZSB7CiAJCWRiZygiJXMgLSByeGNtZCBPSyIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCmluZGV4IDExZTQzOWIuLjcwNDcxNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwpAQCAtMSwyOSArMSwyOSBAQAogLyoKICAgS2V5c3BhbiBVU0IgdG8gU2VyaWFsIENvbnZlcnRlciBkcml2ZXIKLSAKKwogICAoQykgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEJSHVnaCBCbGVtaW5ncyA8aHVnaEBibGVtaW5ncy5vcmc+CiAgIChDKSBDb3B5cmlnaHQgKEMpIDIwMDIJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KLSAgIAorCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAKICAgU2VlIGh0dHA6Ly9taXNjLm51L2h1Z2gva2V5c3Bhbi5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAKKwogICBDb2RlIGluIHRoaXMgZHJpdmVyIGluc3BpcmVkIGJ5IGFuZCBpbiBhIG51bWJlciBvZiBwbGFjZXMgdGFrZW4KICAgZnJvbSBCcmlhbiBXYXJuZXIncyBvcmlnaW5hbCBLZXlzcGFuLVBEQSBkcml2ZXIuCiAKICAgVGhpcyBkcml2ZXIgaGFzIGJlZW4gcHV0IHRvZ2V0aGVyIHdpdGggdGhlIHN1cHBvcnQgb2YgSW5ub3N5cywgSW5jLgogICBhbmQgS2V5c3BhbiwgSW5jIHRoZSBtYW51ZmFjdHVyZXJzIG9mIHRoZSBLZXlzcGFuIFVTQi1zZXJpYWwgcHJvZHVjdHMuCiAgIFRoYW5rcyBHdXlzIDopCi0gIAorCiAgIFRoYW5rcyB0byBQYXVsdXMgZm9yIG1pc2NlbGxhbmVvdXMgdGlkeSB1cHMsIHNvbWUgbGFyZ2lzaCBjaHVua3MKICAgb2YgbXVjaCBuaWNlciBhbmQvb3IgY29tcGxldGVseSBuZXcgY29kZSBhbmQgKHBlcmhhcHMgbW9zdCB1bmlxdWVseSkKICAgaGF2aW5nIHRoZSBwYXRpZW5jZSB0byBzaXQgZG93biBhbmQgZXhwbGFpbiB3aHkgYW5kIHdoZXJlIGhlJ2QgY2hhbmdlZAotICBzdHVmZi4gCi0gIAotICBUaXAgJ28gdGhlIGhhdCB0byBJQk0gKGFuZCBwcmV2aW91c2x5IExpbnV4Y2FyZSA6KSBmb3Igc3VwcG9ydGluZyAKKyAgc3R1ZmYuCisKKyAgVGlwICdvIHRoZSBoYXQgdG8gSUJNIChhbmQgcHJldmlvdXNseSBMaW51eGNhcmUgOikgZm9yIHN1cHBvcnRpbmcKICAgc3RhZmYgaW4gdGhlaXIgd29yayBvbiBvcGVuIHNvdXJjZSBwcm9qZWN0cy4KIAogICBDaGFuZ2UgSGlzdG9yeQpAQCAtNzAsMjEgKzcwLDIxIEBACiAKICAgICBUaHUgTWF5IDMxIDExOjU2OjQyIFBEVCAyMDAxIGdraAogICAgICAgc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZQotICAgCisKICAgICAoMDQvMDgvMjAwMSkgZ2IKIAlJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgotICAgCisKICAgICAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCiAJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0LgotICAgCisKICAgICBUdWUgT2N0IDEwIDIzOjE1OjMzIEVTVCAyMDAwIEh1Z2gKICAgICAgIE1lcmdlZCBQYXVsJ3MgY2hhbmdlcyB3aXRoIG15IFVTQS00OVcgbW9kcy4gIFdvcmsgaW4gcHJvZ3Jlc3MKICAgICAgIHN0aWxsLi4uCi0gIAorCiAgICAgV2VkIEp1bCAxOSAxNDowMDo0MiBFU1QgMjAwMCBna2gKICAgICAgIEFkZGVkIG1vZHVsZV9pbml0IGFuZCBtb2R1bGVfZXhpdCBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBmYWN0IHRoYXQKICAgICAgIHRoaXMgZHJpdmVyIGlzIGEgbG9hZGFibGUgbW9kdWxlIG5vdy4KLSAKKwogICAgIFR1ZSBKdWwgMTggMTY6MTQ6NTIgRVNUIDIwMDAgSHVnaAogICAgICAgQmFzaWMgY2hhcmFjdGVyIGlucHV0L291dHB1dCBmb3IgVVNBLTE5IG5vdyBtb3N0bHkgd29ya3MsCiAgICAgICBmaXhlZCBhdCA5NjAwIGJhdWQgZm9yIHRoZSBtb21lbnQuCkBAIC0xMDcsNyArMTA3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvaWhleC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlICJrZXlzcGFuLmgiCkBAIC0xMzIsMTUgKzEzMiwxNSBAQAogCXN0cnVjdCB1cmIJKmluc3RhdF91cmI7CiAJY2hhcgkJaW5zdGF0X2J1ZltJTlNUQVRfQlVGTEVOXTsKIAotCS8qIGFkZGVkIHRvIHN1cHBvcnQgNDl3Zywgd2hlcmUgZGF0YSBmcm9tIGFsbCA0IHBvcnRzIGNvbWVzIGluIG9uIDEgRVAgKi8KLQkvKiBhbmQgaGlnaC1zcGVlZCBzdXBwb3J0ZWQgKi8KKwkvKiBhZGRlZCB0byBzdXBwb3J0IDQ5d2csIHdoZXJlIGRhdGEgZnJvbSBhbGwgNCBwb3J0cyBjb21lcyBpbgorCSAgIG9uIDEgRVAgYW5kIGhpZ2gtc3BlZWQgc3VwcG9ydGVkICovCiAJc3RydWN0IHVyYgkqaW5kYXRfdXJiOwogCWNoYXIJCWluZGF0X2J1ZltJTkRBVDQ5V19CVUZMRU5dOwogCiAJLyogWFhYIHRoaXMgb25lIHByb2JhYmx5IHdpbGwgbmVlZCBhIGxvY2sgKi8KIAlzdHJ1Y3QgdXJiCSpnbG9jb250X3VyYjsKIAljaGFyCQlnbG9jb250X2J1ZltHTE9DT05UX0JVRkxFTl07Ci0JY2hhcgkJY3RybF9idWZbOF07CQkJLy8gZm9yIEVQMCBjb250cm9sIG1lc3NhZ2UKKwljaGFyCQljdHJsX2J1Zls4XTsJLyogZm9yIEVQMCBjb250cm9sIG1lc3NhZ2UgKi8KIH07CiAKIHN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSB7CkBAIC0xODYsMTkgKzE4NiwxOSBAQAogCWludAkJcmVzZW5kX2NvbnQ7CS8qIG5lZWQgdG8gcmVzZW5kIGNvbnRyb2wgcGFja2V0ICovCiB9OwogCi0JCiAvKiBJbmNsdWRlIEtleXNwYW4gbWVzc2FnZSBoZWFkZXJzLiAgQWxsIGN1cnJlbnQgS2V5c3BhbiBBZGFwdGVycwogICAgbWFrZSB1c2Ugb2Ygb25lIG9mIGZpdmUgbWVzc2FnZSBmb3JtYXRzIHdoaWNoIGFyZSByZWZlcnJlZAotICAgdG8gYXMgVVNBLTI2LCBVU0EtMjgsIFVTQS00OSwgVVNBLTkwLCBVU0EtNjcgYnkgS2V5c3BhbiBhbmQgd2l0aGluIHRoaXMgZHJpdmVyLiAqLworICAgdG8gYXMgVVNBLTI2LCBVU0EtMjgsIFVTQS00OSwgVVNBLTkwLCBVU0EtNjcgYnkgS2V5c3BhbiBhbmQKKyAgIHdpdGhpbiB0aGlzIGRyaXZlci4gKi8KICNpbmNsdWRlICJrZXlzcGFuX3VzYTI2bXNnLmgiCiAjaW5jbHVkZSAia2V5c3Bhbl91c2EyOG1zZy5oIgogI2luY2x1ZGUgImtleXNwYW5fdXNhNDltc2cuaCIKICNpbmNsdWRlICJrZXlzcGFuX3VzYTkwbXNnLmgiCiAjaW5jbHVkZSAia2V5c3Bhbl91c2E2N21zZy5oIgotCQorCiAKIC8qIEZ1bmN0aW9ucyB1c2VkIGJ5IG5ldyB1c2Itc2VyaWFsIGNvZGUuICovCi1zdGF0aWMgaW50IF9faW5pdCBrZXlzcGFuX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBrZXlzcGFuX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmtleXNwYW5fcHJlX2RldmljZSk7CkBAIC0yMTQsNyArMjE0LDcgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF80cG9ydF9kZXZpY2VfcmVnaXN0ZXI7CiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZrZXlzcGFuX2RyaXZlcik7Ci0JaWYgKHJldHZhbCkgCisJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCiAJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOwpAQCAtMjMyLDM1ICsyMzIsMjQgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQga2V5c3Bhbl9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGtleXNwYW5fZXhpdCh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgma2V5c3Bhbl9kcml2ZXIpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmtleXNwYW5fcHJlX2RldmljZSk7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma2V5c3Bhbl8xcG9ydF9kZXZpY2UpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmtleXNwYW5fMnBvcnRfZGV2aWNlKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrZXlzcGFuXzRwb3J0X2RldmljZSk7CisJdXNiX2RlcmVnaXN0ZXIoJmtleXNwYW5fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtleXNwYW5fcHJlX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuXzFwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuXzJwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuXzRwb3J0X2RldmljZSk7CiB9CiAKIG1vZHVsZV9pbml0KGtleXNwYW5faW5pdCk7CiBtb2R1bGVfZXhpdChrZXlzcGFuX2V4aXQpOwogCi1zdGF0aWMgdm9pZCBrZXlzcGFuX3J4X3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQga2V5c3Bhbl9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogewotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci19Ci0KLQotc3RhdGljIHZvaWQga2V5c3Bhbl9yeF91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQotewotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci19Ci0KLQotc3RhdGljIHZvaWQga2V5c3Bhbl9icmVha19jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKLXsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCSpwX3ByaXY7CiAKLSAJZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCkBAIC0yNzMsMTQgKzI2MiwxMyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGtleXNwYW5fc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAotCQkJCSAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIGtleXNwYW5fc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlpbnQJCQkJYmF1ZF9yYXRlLCBkZXZpY2VfcG9ydDsKIAlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCSpwX3ByaXY7CiAJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKIAl1bnNpZ25lZCBpbnQgCQkJY2ZsYWc7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QJCSp0dHkgPSBwb3J0LT50dHk7CiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCkBAIC0yOTIsNyArMjgwLDcgQEAKIAkvKiBCYXVkIHJhdGUgY2FsY3VsYXRpb24gdGFrZXMgYmF1ZCByYXRlIGFzIGFuIGludGVnZXIKIAkgICBzbyBvdGhlciByYXRlcyBjYW4gYmUgZ2VuZXJhdGVkIGlmIGRlc2lyZWQuICovCiAJYmF1ZF9yYXRlID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKLQkvKiBJZiBubyBtYXRjaCBvciBpbnZhbGlkLCBkb24ndCBjaGFuZ2UgKi8JCQorCS8qIElmIG5vIG1hdGNoIG9yIGludmFsaWQsIGRvbid0IGNoYW5nZSAqLwogCWlmIChkX2RldGFpbHMtPmNhbGN1bGF0ZV9iYXVkX3JhdGUoYmF1ZF9yYXRlLCBkX2RldGFpbHMtPmJhdWRjbGssCiAJCQkJTlVMTCwgTlVMTCwgTlVMTCwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fQkFVRF9SQVRFX09LKSB7CiAJCS8qIEZJWE1FIC0gbW9yZSB0byBkbyBoZXJlIHRvIGVuc3VyZSByYXRlIGNoYW5nZXMgY2xlYW5seSAqLwpAQCAtMzEyLDM1ICszMDAsMzIgQEAKIAlrZXlzcGFuX3NlbmRfc2V0dXAocG9ydCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQga2V5c3Bhbl90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQga2V5c3Bhbl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgKnBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBpbnQJCQl2YWx1ZTsKLQlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCSpwX3ByaXY7CiAKLQlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JCiAJdmFsdWUgPSAoKHBfcHJpdi0+cnRzX3N0YXRlKSA/IFRJT0NNX1JUUyA6IDApIHwKIAkJKChwX3ByaXYtPmR0cl9zdGF0ZSkgPyBUSU9DTV9EVFIgOiAwKSB8CiAJCSgocF9wcml2LT5jdHNfc3RhdGUpID8gVElPQ01fQ1RTIDogMCkgfAogCQkoKHBfcHJpdi0+ZHNyX3N0YXRlKSA/IFRJT0NNX0RTUiA6IDApIHwKIAkJKChwX3ByaXYtPmRjZF9zdGF0ZSkgPyBUSU9DTV9DQVIgOiAwKSB8Ci0JCSgocF9wcml2LT5yaV9zdGF0ZSkgPyBUSU9DTV9STkcgOiAwKTsgCisJCSgocF9wcml2LT5yaV9zdGF0ZSkgPyBUSU9DTV9STkcgOiAwKTsKIAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIGludCBrZXlzcGFuX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBrZXlzcGFuX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKLQlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCSpwX3ByaXY7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICpwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JCiAJaWYgKHNldCAmIFRJT0NNX1JUUykKIAkJcF9wcml2LT5ydHNfc3RhdGUgPSAxOwogCWlmIChzZXQgJiBUSU9DTV9EVFIpCiAJCXBfcHJpdi0+ZHRyX3N0YXRlID0gMTsKLQogCWlmIChjbGVhciAmIFRJT0NNX1JUUykKIAkJcF9wcml2LT5ydHNfc3RhdGUgPSAwOwogCWlmIChjbGVhciAmIFRJT0NNX0RUUikKQEAgLTM0OSwzNSArMzM0LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga2V5c3Bhbl9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLQotCS8qIFdyaXRlIGZ1bmN0aW9uIGlzIHNpbWlsYXIgZm9yIHRoZSBmb3VyIHByb3RvY29scyB1c2VkCi0JICAgd2l0aCBvbmx5IGEgbWlub3IgY2hhbmdlIGZvciB1c2E5MCAodXNhMTlocykgcmVxdWlyZWQgKi8KLXN0YXRpYyBpbnQga2V5c3Bhbl93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKLQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKKy8qIFdyaXRlIGZ1bmN0aW9uIGlzIHNpbWlsYXIgZm9yIHRoZSBmb3VyIHByb3RvY29scyB1c2VkCisgICB3aXRoIG9ubHkgYSBtaW5vciBjaGFuZ2UgZm9yIHVzYTkwICh1c2ExOWhzKSByZXF1aXJlZCAqLworc3RhdGljIGludCBrZXlzcGFuX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OwogCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CiAJaW50CQkJCWZsaXA7CiAJaW50IAkJCQlsZWZ0LCB0b2RvOwogCXN0cnVjdCB1cmIJCQkqdGhpc191cmI7Ci0gCWludCAJCQkJZXJyLCBtYXhEYXRhTGVuLCBkYXRhT2Zmc2V0OworCWludCAJCQkJZXJyLCBtYXhEYXRhTGVuLCBkYXRhT2Zmc2V0OwogCiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWRfZGV0YWlscyA9IHBfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CiAKIAlpZiAoZF9kZXRhaWxzLT5tc2dfZm9ybWF0ID09IG1zZ191c2E5MCkgewotICAgCQltYXhEYXRhTGVuID0gNjQ7CisJCW1heERhdGFMZW4gPSA2NDsKIAkJZGF0YU9mZnNldCA9IDA7CiAJfSBlbHNlIHsKIAkJbWF4RGF0YUxlbiA9IDYzOwogCQlkYXRhT2Zmc2V0ID0gMTsKIAl9Ci0JCisKIAlkYmcoIiVzIC0gZm9yIHBvcnQgJWQgKCVkIGNoYXJzKSwgZmxpcD0lZCIsCiAJICAgIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNvdW50LCBwX3ByaXYtPm91dF9mbGlwKTsKIApAQCAtMzg3LDM3ICszNjYsNDAgQEAKIAkJCXRvZG8gPSBtYXhEYXRhTGVuOwogCiAJCWZsaXAgPSBwX3ByaXYtPm91dF9mbGlwOwotCQorCiAJCS8qIENoZWNrIHdlIGhhdmUgYSB2YWxpZCB1cmIvZW5kcG9pbnQgYmVmb3JlIHdlIHVzZSBpdC4uLiAqLwotCQlpZiAoKHRoaXNfdXJiID0gcF9wcml2LT5vdXRfdXJic1tmbGlwXSkgPT0gTlVMTCkgeworCQl0aGlzX3VyYiA9IHBfcHJpdi0+b3V0X3VyYnNbZmxpcF07CisJCWlmICh0aGlzX3VyYiA9PSBOVUxMKSB7CiAJCQkvKiBubyBidWxrIG91dCwgc28gcmV0dXJuIDAgYnl0ZXMgd3JpdHRlbiAqLwogCQkJZGJnKCIlcyAtIG5vIG91dHB1dCB1cmIgOigiLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gY291bnQ7CiAJCX0KIAotCQlkYmcoIiVzIC0gZW5kcG9pbnQgJWQgZmxpcCAlZCIsIF9fZnVuY19fLCB1c2JfcGlwZWVuZHBvaW50KHRoaXNfdXJiLT5waXBlKSwgZmxpcCk7CisJCWRiZygiJXMgLSBlbmRwb2ludCAlZCBmbGlwICVkIiwKKwkJCV9fZnVuY19fLCB1c2JfcGlwZWVuZHBvaW50KHRoaXNfdXJiLT5waXBlKSwgZmxpcCk7CiAKIAkJaWYgKHRoaXNfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgcF9wcml2LT50eF9zdGFydF90aW1lW2ZsaXBdICsgMTAgKiBIWikpCisJCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKKwkJCQkJcF9wcml2LT50eF9zdGFydF90aW1lW2ZsaXBdICsgMTAgKiBIWikpCiAJCQkJYnJlYWs7CiAJCQl1c2JfdW5saW5rX3VyYih0aGlzX3VyYik7CiAJCQlicmVhazsKIAkJfQogCi0JCS8qIEZpcnN0IGJ5dGUgaW4gYnVmZmVyIGlzICJsYXN0IGZsYWciIChleGNlcHQgZm9yIHVzYTE5aHgpIC0gdW51c2VkIHNvCi0JCSAgIGZvciBub3cgc28gc2V0IHRvIHplcm8gKi8KKwkJLyogRmlyc3QgYnl0ZSBpbiBidWZmZXIgaXMgImxhc3QgZmxhZyIgKGV4Y2VwdCBmb3IgdXNhMTloeCkKKwkJICAgLSB1bnVzZWQgc28gZm9yIG5vdyBzbyBzZXQgdG8gemVybyAqLwogCQkoKGNoYXIgKil0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyKVswXSA9IDA7CiAKLQkJbWVtY3B5ICh0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyICsgZGF0YU9mZnNldCwgYnVmLCB0b2RvKTsKKwkJbWVtY3B5KHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBkYXRhT2Zmc2V0LCBidWYsIHRvZG8pOwogCQlidWYgKz0gdG9kbzsKIAogCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCiAJCXRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdG9kbyArIGRhdGFPZmZzZXQ7CiAKIAkJdGhpc191cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYih0aGlzX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChlcnIgIT0gMCkKIAkJCWRiZygidXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkICglZCkiLCBlcnIpOwotCQl9CiAJCXBfcHJpdi0+dHhfc3RhcnRfdGltZVtmbGlwXSA9IGppZmZpZXM7CiAKIAkJLyogRmxpcCBmb3IgbmV4dCB0aW1lIGlmIHVzYTI2IG9yIHVzYTI4IGludGVyZmFjZQpAQCAtNDM3LDcgKzQxOSw3IEBACiAJdW5zaWduZWQgY2hhciAJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCWVuZHBvaW50ID0gdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpOwogCkBAIC00NDgsMTcgKzQzMCwxOCBAQAogCX0KIAogCXBvcnQgPSAgdXJiLT5jb250ZXh0OwotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQkvKiAweDgwIGJpdCBpcyBlcnJvciBmbGFnICovCiAJCWlmICgoZGF0YVswXSAmIDB4ODApID09IDApIHsKLQkJCS8qIG5vIGVycm9ycyBvbiBpbmRpdmlkdWFsIGJ5dGVzLCBvbmx5IHBvc3NpYmxlIG92ZXJydW4gZXJyKi8KKwkJCS8qIG5vIGVycm9ycyBvbiBpbmRpdmlkdWFsIGJ5dGVzLCBvbmx5CisJCQkgICBwb3NzaWJsZSBvdmVycnVuIGVyciAqLwogCQkJaWYgKGRhdGFbMF0gJiBSWEVSUk9SX09WRVJSVU4pCi0JCQkJCWVyciA9IFRUWV9PVkVSUlVOOwotCQkJZWxzZSBlcnIgPSAwOwotCQkJZm9yIChpID0gMTsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJCWVyciA9IFRUWV9PVkVSUlVOOworCQkJZWxzZQorCQkJCWVyciA9IDA7CisJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKQogCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgZXJyKTsKLQkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIHNvbWUgYnl0ZXMgaGFkIGVycm9ycywgZXZlcnkgYnl0ZSBoYXMgc3RhdHVzICovCiAJCQlkYmcoIiVzIC0gUlggZXJyb3IhISEhIiwgX19mdW5jX18pOwpAQCAtNDc2LDE3ICs0NTksMTkgQEAKIAkJfQogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KLQkJCQkKLQkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCisJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JaWYgKHBvcnQtPm9wZW5fY291bnQpCi0JCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgewotCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fZnVuY19fLCBlcnIpOwotCQl9CisJaWYgKHBvcnQtPnBvcnQuY291bnQpIHsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGVyciAhPSAwKQorCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsCisJCQkJCV9fZnVuY19fLCBlcnIpOworCX0KIAlyZXR1cm47CiB9CiAKLSAJLyogT3V0ZGF0IGhhbmRsaW5nIGlzIGNvbW1vbiBmb3IgYWxsIGRldmljZXMgKi8KKy8qIE91dGRhdCBoYW5kbGluZyBpcyBjb21tb24gZm9yIGFsbCBkZXZpY2VzICovCiBzdGF0aWMgdm9pZAl1c2EyeF9vdXRkYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CkBAIC00OTQsMTYgKzQ3OSwxNiBAQAogCiAJcG9ydCA9ICB1cmItPmNvbnRleHQ7CiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWRiZyAoIiVzIC0gdXJiICVkIiwgX19mdW5jX18sIHVyYiA9PSBwX3ByaXYtPm91dF91cmJzWzFdKTsKKwlkYmcoIiVzIC0gdXJiICVkIiwgX19mdW5jX18sIHVyYiA9PSBwX3ByaXYtPm91dF91cmJzWzFdKTsKIAotCWlmIChwb3J0LT5vcGVuX2NvdW50KQorCWlmIChwb3J0LT5wb3J0LmNvdW50KQogCQl1c2Jfc2VyaWFsX3BvcnRfc29mdGludChwb3J0KTsKIH0KIAogc3RhdGljIHZvaWQJdXNhMjZfaW5hY2tfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewotCWRiZyAoIiVzIiwgX19mdW5jX18pOwotCQorCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKIH0KIAogc3RhdGljIHZvaWQJdXNhMjZfb3V0Y29udF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCkBAIC01MTUsOCArNTAwLDkgQEAKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlpZiAocF9wcml2LT5yZXNlbmRfY29udCkgewotCQlkYmcgKCIlcyAtIHNlbmRpbmcgc2V0dXAiLCBfX2Z1bmNfXyk7Ci0JCWtleXNwYW5fdXNhMjZfc2VuZF9zZXR1cChwb3J0LT5zZXJpYWwsIHBvcnQsIHBfcHJpdi0+cmVzZW5kX2NvbnQgLSAxKTsKKwkJZGJnKCIlcyAtIHNlbmRpbmcgc2V0dXAiLCBfX2Z1bmNfXyk7CisJCWtleXNwYW5fdXNhMjZfc2VuZF9zZXR1cChwb3J0LT5zZXJpYWwsIHBvcnQsCisJCQkJCQlwX3ByaXYtPnJlc2VuZF9jb250IC0gMSk7CiAJfQogfQogCkBAIC01NTIsMTQgKzUzOCwxNCBAQAogCS8qIE5vdyBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIGRhdGEgKi8KIAogCi0JLyogQ2hlY2sgcG9ydCBudW1iZXIgZnJvbSBtZXNzYWdlIGFuZCByZXRyaWV2ZSBwcml2YXRlIGRhdGEgKi8JCisJLyogQ2hlY2sgcG9ydCBudW1iZXIgZnJvbSBtZXNzYWdlIGFuZCByZXRyaWV2ZSBwcml2YXRlIGRhdGEgKi8KIAlpZiAobXNnLT5wb3J0ID49IHNlcmlhbC0+bnVtX3BvcnRzKSB7Ci0JCWRiZyAoIiVzIC0gVW5leHBlY3RlZCBwb3J0IG51bWJlciAlZCIsIF9fZnVuY19fLCBtc2ctPnBvcnQpOworCQlkYmcoIiVzIC0gVW5leHBlY3RlZCBwb3J0IG51bWJlciAlZCIsIF9fZnVuY19fLCBtc2ctPnBvcnQpOwogCQlnb3RvIGV4aXQ7CiAJfQogCXBvcnQgPSBzZXJpYWwtPnBvcnRbbXNnLT5wb3J0XTsKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JCisKIAkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCiAJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOwogCXBfcHJpdi0+Y3RzX3N0YXRlID0gKChtc2ctPmhza2lhX2N0cykgPyAxIDogMCk7CkBAIC01NjcsMzkgKzU1MywzOCBAQAogCXBfcHJpdi0+ZGNkX3N0YXRlID0gKChtc2ctPmdwaWFfZGNkKSA/IDEgOiAwKTsKIAlwX3ByaXYtPnJpX3N0YXRlID0gKChtc2ctPnJpKSA/IDEgOiAwKTsKIAotCWlmIChwb3J0LT50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnR0eSkKKwlpZiAocG9ydC0+cG9ydC50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnBvcnQudHR5KQogCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7CiAJCWlmIChvbGRfZGNkX3N0YXRlKQotCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkJdHR5X2hhbmd1cChwb3J0LT5wb3J0LnR0eSk7CiAJCS8qICBlbHNlICovCiAJCS8qCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcF9wcml2LT5vcGVuX3dhaXQpOyAqLwogCX0KLQkKKwogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OwotCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVyciAhPSAwKQogCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19mdW5jX18sIGVycik7Ci0JfQogZXhpdDogOwogfQogCiBzdGF0aWMgdm9pZAl1c2EyNl9nbG9jb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKLQkKKwlkYmcoIiVzIiwgX19mdW5jX18pOwogfQogCiAKIHN0YXRpYyB2b2lkIHVzYTI4X2luZGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBpLCBlcnI7CisJaW50ICAgICAgICAgICAgICAgICAgICAgZXJyOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgICpwb3J0OwogCXN0cnVjdCB0dHlfc3RydWN0ICAgICAgICp0dHk7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgKmRhdGE7CiAJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICAgICAgICAgICAgICpwX3ByaXY7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXBvcnQgPSAgdXJiLT5jb250ZXh0OwogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTYxOSwyMCArNjA0LDIwIEBACiAJCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAkJZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCi0JCXR0eSA9IHBvcnQtPnR0eTsKKwkJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOwotCQkJfQorCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQl9CiAKIAkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCQlpZiAocG9ydC0+b3Blbl9jb3VudCkKLQkJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgewotCQkJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX2Z1bmNfXywgZXJyKTsKLQkJCX0KKwkJaWYgKHBvcnQtPnBvcnQuY291bnQpIHsKKwkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAoZXJyICE9IDApCisJCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsCisJCQkJCQkJCV9fZnVuY19fLCBlcnIpOworCQl9CiAJCXBfcHJpdi0+aW5fZmxpcCBePSAxOwogCiAJCXVyYiA9IHBfcHJpdi0+aW5fdXJic1twX3ByaXYtPmluX2ZsaXBdOwpAQCAtNjQxLDcgKzYyNiw3IEBACiAKIHN0YXRpYyB2b2lkCXVzYTI4X2luYWNrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKKwlkYmcoIiVzIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZAl1c2EyOF9vdXRjb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKQEAgLTY1Myw4ICs2MzgsOSBAQAogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCWlmIChwX3ByaXYtPnJlc2VuZF9jb250KSB7Ci0JCWRiZyAoIiVzIC0gc2VuZGluZyBzZXR1cCIsIF9fZnVuY19fKTsKLQkJa2V5c3Bhbl91c2EyOF9zZW5kX3NldHVwKHBvcnQtPnNlcmlhbCwgcG9ydCwgcF9wcml2LT5yZXNlbmRfY29udCAtIDEpOworCQlkYmcoIiVzIC0gc2VuZGluZyBzZXR1cCIsIF9fZnVuY19fKTsKKwkJa2V5c3Bhbl91c2EyOF9zZW5kX3NldHVwKHBvcnQtPnNlcmlhbCwgcG9ydCwKKwkJCQkJCXBfcHJpdi0+cmVzZW5kX2NvbnQgLSAxKTsKIAl9CiB9CiAKQEAgLTY4NCwxOSArNjcwLDE4IEBACiAJLypkYmcoIiVzICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgX19mdW5jX18KIAkgICAgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XSwgZGF0YVs1XSwKIAkgICAgZGF0YVs2XSwgZGF0YVs3XSwgZGF0YVs4XSwgZGF0YVs5XSwgZGF0YVsxMF0sIGRhdGFbMTFdKTsqLwotCQotCQkvKiBOb3cgZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBkYXRhICovCisKKwkvKiBOb3cgZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBkYXRhICovCiAJbXNnID0gKHN0cnVjdCBrZXlzcGFuX3VzYTI4X3BvcnRTdGF0dXNNZXNzYWdlICopZGF0YTsKIAotCi0JCS8qIENoZWNrIHBvcnQgbnVtYmVyIGZyb20gbWVzc2FnZSBhbmQgcmV0cmlldmUgcHJpdmF0ZSBkYXRhICovCQorCS8qIENoZWNrIHBvcnQgbnVtYmVyIGZyb20gbWVzc2FnZSBhbmQgcmV0cmlldmUgcHJpdmF0ZSBkYXRhICovCiAJaWYgKG1zZy0+cG9ydCA+PSBzZXJpYWwtPm51bV9wb3J0cykgewotCQlkYmcgKCIlcyAtIFVuZXhwZWN0ZWQgcG9ydCBudW1iZXIgJWQiLCBfX2Z1bmNfXywgbXNnLT5wb3J0KTsKKwkJZGJnKCIlcyAtIFVuZXhwZWN0ZWQgcG9ydCBudW1iZXIgJWQiLCBfX2Z1bmNfXywgbXNnLT5wb3J0KTsKIAkJZ290byBleGl0OwogCX0KIAlwb3J0ID0gc2VyaWFsLT5wb3J0W21zZy0+cG9ydF07CiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCQorCiAJLyogVXBkYXRlIGhhbmRzaGFraW5nIHBpbiBzdGF0ZSBpbmZvcm1hdGlvbiAqLwogCW9sZF9kY2Rfc3RhdGUgPSBwX3ByaXYtPmRjZF9zdGF0ZTsKIAlwX3ByaXYtPmN0c19zdGF0ZSA9ICgobXNnLT5jdHMpID8gMSA6IDApOwpAQCAtNzA0LDI1ICs2ODksMjUgQEAKIAlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5kY2QpID8gMSA6IDApOwogCXBfcHJpdi0+cmlfc3RhdGUgPSAoKG1zZy0+cmkpID8gMSA6IDApOwogCi0JaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KQorCWlmIChwb3J0LT5wb3J0LnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+cG9ydC50dHkpCiAJICAgICYmIG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUpIHsKIAkJaWYgKG9sZF9kY2Rfc3RhdGUpCi0JCQl0dHlfaGFuZ3VwKHBvcnQtPnR0eSk7CisJCQl0dHlfaGFuZ3VwKHBvcnQtPnBvcnQudHR5KTsKIAkJLyogIGVsc2UgKi8KIAkJLyoJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwX3ByaXYtPm9wZW5fd2FpdCk7ICovCiAJfQogCiAJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OwotCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVyciAhPSAwKQogCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19mdW5jX18sIGVycik7Ci0JfQogZXhpdDogOwogfQogCiBzdGF0aWMgdm9pZAl1c2EyOF9nbG9jb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKKwlkYmcoIiVzIiwgX19mdW5jX18pOwogfQogCiAKQEAgLTczMyw3ICs3MTgsNyBAQAogCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAqcF9wcml2OwogCWludCBpOwogCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXNlcmlhbCA9ICB1cmItPmNvbnRleHQ7CiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKQEAgLTc0MSw4ICs3MjYsOSBAQAogCQlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAkJaWYgKHBfcHJpdi0+cmVzZW5kX2NvbnQpIHsKLQkJCWRiZyAoIiVzIC0gc2VuZGluZyBzZXR1cCIsIF9fZnVuY19fKTsKLQkJCWtleXNwYW5fdXNhNDlfc2VuZF9zZXR1cChzZXJpYWwsIHBvcnQsIHBfcHJpdi0+cmVzZW5kX2NvbnQgLSAxKTsKKwkJCWRiZygiJXMgLSBzZW5kaW5nIHNldHVwIiwgX19mdW5jX18pOworCQkJa2V5c3Bhbl91c2E0OV9zZW5kX3NldHVwKHNlcmlhbCwgcG9ydCwKKwkJCQkJCXBfcHJpdi0+cmVzZW5kX2NvbnQgLSAxKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNzYxLDcgKzc0Nyw3IEBACiAJaW50IG9sZF9kY2Rfc3RhdGU7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXNlcmlhbCA9ICB1cmItPmNvbnRleHQ7CiAKQEAgLTc3MCw3ICs3NTYsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IGtleXNwYW5fdXNhNDlfcG9ydFN0YXR1c01lc3NhZ2UpKSB7CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPQorCQkJc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRTdGF0dXNNZXNzYWdlKSkgewogCQlkYmcoIiVzIC0gYmFkIGxlbmd0aCAlZCIsIF9fZnVuY19fLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNzc4LDE4ICs3NjUsMTkgQEAKIAkvKmRiZygiICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgX19mdW5jX18sCiAJICAgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10sIGRhdGFbNF0sIGRhdGFbNV0sCiAJICAgIGRhdGFbNl0sIGRhdGFbN10sIGRhdGFbOF0sIGRhdGFbOV0sIGRhdGFbMTBdKTsqLwotCQotCQkvKiBOb3cgZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBkYXRhICovCisKKwkvKiBOb3cgZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBkYXRhICovCiAJbXNnID0gKHN0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRTdGF0dXNNZXNzYWdlICopZGF0YTsKIAotCQkvKiBDaGVjayBwb3J0IG51bWJlciBmcm9tIG1lc3NhZ2UgYW5kIHJldHJpZXZlIHByaXZhdGUgZGF0YSAqLwkKKwkvKiBDaGVjayBwb3J0IG51bWJlciBmcm9tIG1lc3NhZ2UgYW5kIHJldHJpZXZlIHByaXZhdGUgZGF0YSAqLwogCWlmIChtc2ctPnBvcnROdW1iZXIgPj0gc2VyaWFsLT5udW1fcG9ydHMpIHsKLQkJZGJnICgiJXMgLSBVbmV4cGVjdGVkIHBvcnQgbnVtYmVyICVkIiwgX19mdW5jX18sIG1zZy0+cG9ydE51bWJlcik7CisJCWRiZygiJXMgLSBVbmV4cGVjdGVkIHBvcnQgbnVtYmVyICVkIiwKKwkJCQkJX19mdW5jX18sIG1zZy0+cG9ydE51bWJlcik7CiAJCWdvdG8gZXhpdDsKIAl9CiAJcG9ydCA9IHNlcmlhbC0+cG9ydFttc2ctPnBvcnROdW1iZXJdOwogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQkKKwogCS8qIFVwZGF0ZSBoYW5kc2hha2luZyBwaW4gc3RhdGUgaW5mb3JtYXRpb24gKi8KIAlvbGRfZGNkX3N0YXRlID0gcF9wcml2LT5kY2Rfc3RhdGU7CiAJcF9wcml2LT5jdHNfc3RhdGUgPSAoKG1zZy0+Y3RzKSA/IDEgOiAwKTsKQEAgLTc5NywyNiArNzg1LDI2IEBACiAJcF9wcml2LT5kY2Rfc3RhdGUgPSAoKG1zZy0+ZGNkKSA/IDEgOiAwKTsKIAlwX3ByaXYtPnJpX3N0YXRlID0gKChtc2ctPnJpKSA/IDEgOiAwKTsKIAotCWlmIChwb3J0LT50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnR0eSkKKwlpZiAocG9ydC0+cG9ydC50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnBvcnQudHR5KQogCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7CiAJCWlmIChvbGRfZGNkX3N0YXRlKQotCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkJdHR5X2hhbmd1cChwb3J0LT5wb3J0LnR0eSk7CiAJCS8qICBlbHNlICovCiAJCS8qCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcF9wcml2LT5vcGVuX3dhaXQpOyAqLwogCX0KIAotCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAKLQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIgIT0gMCkKIAkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fZnVuY19fLCBlcnIpOwotCX0KIGV4aXQ6CTsKIH0KIAogc3RhdGljIHZvaWQJdXNhNDlfaW5hY2tfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkCXVzYTQ5X2luZGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKQEAgLTgyOCw3ICs4MTYsNyBAQAogCXVuc2lnbmVkIGNoYXIgCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAllbmRwb2ludCA9IHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKTsKIApAQCAtODM5LDE0ICs4MjcsMTMgQEAKIAl9CiAKIAlwb3J0ID0gIHVyYi0+Y29udGV4dDsKLQl0dHkgPSBwb3J0LT50dHk7CisJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJLyogMHg4MCBiaXQgaXMgZXJyb3IgZmxhZyAqLwogCQlpZiAoKGRhdGFbMF0gJiAweDgwKSA9PSAwKSB7CiAJCQkvKiBubyBlcnJvciBvbiBhbnkgYnl0ZSAqLwotCQkJZm9yIChpID0gMTsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgewotCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7Ci0JCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSArIDEsCisJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggLSAxKTsKIAkJfSBlbHNlIHsKIAkJCS8qIHNvbWUgYnl0ZXMgaGFkIGVycm9ycywgZXZlcnkgYnl0ZSBoYXMgc3RhdHVzICovCiAJCQlmb3IgKGkgPSAwOyBpICsgMSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSArPSAyKSB7CkBAIC04NjMsMTMgKzg1MCwxNSBAQAogCQl9CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQotCQkJCQotCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisKKwkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlpZiAocG9ydC0+b3Blbl9jb3VudCkKLQkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7Ci0JCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19mdW5jX18sIGVycik7Ci0JCX0KKwlpZiAocG9ydC0+cG9ydC5jb3VudCkgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoZXJyICE9IDApCisJCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwKKwkJCQkJCQlfX2Z1bmNfXywgZXJyKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHVzYTQ5d2dfaW5kYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpAQCAtODgxLDcgKzg3MCw3IEBACiAJdW5zaWduZWQgY2hhciAJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXNlcmlhbCA9IHVyYi0+Y29udGV4dDsKIApAQCAtODk5LDEyICs4ODgsMTIgQEAKIAogCQkJLyogQ2hlY2sgcG9ydCBudW1iZXIgZnJvbSBtZXNzYWdlKi8KIAkJCWlmIChkYXRhW2ldID49IHNlcmlhbC0+bnVtX3BvcnRzKSB7Ci0JCQkJZGJnICgiJXMgLSBVbmV4cGVjdGVkIHBvcnQgbnVtYmVyICVkIiwKKwkJCQlkYmcoIiVzIC0gVW5leHBlY3RlZCBwb3J0IG51bWJlciAlZCIsCiAJCQkJCV9fZnVuY19fLCBkYXRhW2ldKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2RhdGFbaSsrXV07Ci0JCQl0dHkgPSBwb3J0LT50dHk7CisJCQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAkJCWxlbiA9IGRhdGFbaSsrXTsKIAogCQkJLyogMHg4MCBiaXQgaXMgZXJyb3IgZmxhZyAqLwpAQCAtOTEyLDcgKzkwMSw3IEBACiAJCQkJLyogbm8gZXJyb3Igb24gYW55IGJ5dGUgKi8KIAkJCQlpKys7CiAJCQkJZm9yICh4ID0gMTsgeCA8IGxlbiA7ICsreCkKLQkJCQkJaWYgKHBvcnQtPm9wZW5fY291bnQpCisJCQkJCWlmIChwb3J0LT5wb3J0LmNvdW50KQogCQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAogCQkJCQkJCQlkYXRhW2krK10sIDApOwogCQkJCQllbHNlCkBAIC05MzAsMTMgKzkxOSwxMyBAQAogCQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfUEFSSVRZKQogCQkJCQkJZmxhZyB8PSBUVFlfUEFSSVRZOwogCQkJCQkvKiBYWFggc2hvdWxkIGhhbmRsZSBicmVhayAoMHgxMCkgKi8KLQkJCQkJaWYgKHBvcnQtPm9wZW5fY291bnQpCisJCQkJCWlmIChwb3J0LT5wb3J0LmNvdW50KQogCQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAogCQkJCQkJCWRhdGFbaSsxXSwgZmxhZyk7CiAJCQkJCWkgKz0gMjsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJCWlmIChwb3J0LT5wb3J0LmNvdW50KQogCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCX0KIAl9CkBAIC05NTIsNyArOTQxLDcgQEAKIC8qIG5vdCB1c2VkLCB1c2EtNDkgZG9lc24ndCBoYXZlIHBlci1wb3J0IGNvbnRyb2wgZW5kcG9pbnRzICovCiBzdGF0aWMgdm9pZCB1c2E0OV9vdXRjb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKKwlkYmcoIiVzIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZCB1c2E5MF9pbmRhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCkBAIC05NjUsNyArOTU0LDcgQEAKIAl1bnNpZ25lZCBjaGFyIAkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKKwlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJZW5kcG9pbnQgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CiAKQEAgLTk3OCwyOSArOTY3LDI2IEBACiAJcG9ydCA9ICB1cmItPmNvbnRleHQ7CiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkKIAkJLyogaWYgY3VycmVudCBtb2RlIGlzIERNQSwgbG9va3MgbGlrZSB1c2EyOCBmb3JtYXQKLQkgICAJCW90aGVyd2lzZSBsb29rcyBsaWtlIHVzYTI2IGRhdGEgZm9ybWF0ICovCisJCSAgIG90aGVyd2lzZSBsb29rcyBsaWtlIHVzYTI2IGRhdGEgZm9ybWF0ICovCiAKLQkJaWYgKHBfcHJpdi0+YmF1ZCA+IDU3NjAwKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSAKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOwotCQl9CisJCWlmIChwX3ByaXYtPmJhdWQgPiA1NzYwMCkKKwkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQllbHNlIHsKLQkJCQogCQkJLyogMHg4MCBiaXQgaXMgZXJyb3IgZmxhZyAqLwogCQkJaWYgKChkYXRhWzBdICYgMHg4MCkgPT0gMCkgewotCQkJCS8qIG5vIGVycm9ycyBvbiBpbmRpdmlkdWFsIGJ5dGVzLCBvbmx5IHBvc3NpYmxlIG92ZXJydW4gZXJyKi8KKwkJCQkvKiBubyBlcnJvcnMgb24gaW5kaXZpZHVhbCBieXRlcywgb25seQorCQkJCSAgIHBvc3NpYmxlIG92ZXJydW4gZXJyKi8KIAkJCQlpZiAoZGF0YVswXSAmIFJYRVJST1JfT1ZFUlJVTikKLQkJCQkJCWVyciA9IFRUWV9PVkVSUlVOOwotCQkJCWVsc2UgZXJyID0gMDsKLQkJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSAKLQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCBlcnIpOwotCQkJCi0JCQl9IAotCQkJZWxzZSB7CisJCQkJCWVyciA9IFRUWV9PVkVSUlVOOworCQkJCWVsc2UKKwkJCQkJZXJyID0gMDsKKwkJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKQorCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sCisJCQkJCQkJCQllcnIpOworCQkJfSAgZWxzZSB7CiAJCQkvKiBzb21lIGJ5dGVzIGhhZCBlcnJvcnMsIGV2ZXJ5IGJ5dGUgaGFzIHN0YXR1cyAqLwogCQkJCWRiZygiJXMgLSBSWCBlcnJvciEhISEiLCBfX2Z1bmNfXyk7CiAJCQkJZm9yIChpID0gMDsgaSArIDEgPCB1cmItPmFjdHVhbF9sZW5ndGg7IGkgKz0gMikgewpAQCAtMTAxMiwxOSArOTk4LDIyIEBACiAJCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9QQVJJVFkpCiAJCQkJCQlmbGFnIHw9IFRUWV9QQVJJVFk7CiAJCQkJCS8qIFhYWCBzaG91bGQgaGFuZGxlIGJyZWFrICgweDEwKSAqLwotCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaSsxXSwgZmxhZyk7CisJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpKzFdLAorCQkJCQkJCQkJZmxhZyk7CiAJCQkJfQogCQkJfQogCQl9CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQotCQkJCQorCiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JaWYgKHBvcnQtPm9wZW5fY291bnQpCi0JCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgewotCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fZnVuY19fLCBlcnIpOwotCQl9CisJaWYgKHBvcnQtPnBvcnQuY291bnQpIHsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGVyciAhPSAwKQorCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsCisJCQkJCQkJX19mdW5jX18sIGVycik7CisJfQogCXJldHVybjsKIH0KIApAQCAtMTA1Niw3ICsxMDQ1LDcgQEAKIAogCXBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCQorCiAJLyogVXBkYXRlIGhhbmRzaGFraW5nIHBpbiBzdGF0ZSBpbmZvcm1hdGlvbiAqLwogCW9sZF9kY2Rfc3RhdGUgPSBwX3ByaXYtPmRjZF9zdGF0ZTsKIAlwX3ByaXYtPmN0c19zdGF0ZSA9ICgobXNnLT5jdHMpID8gMSA6IDApOwpAQCAtMTA2NCwxOSArMTA1MywxOSBAQAogCXBfcHJpdi0+ZGNkX3N0YXRlID0gKChtc2ctPmRjZCkgPyAxIDogMCk7CiAJcF9wcml2LT5yaV9zdGF0ZSA9ICgobXNnLT5yaSkgPyAxIDogMCk7CiAKLQlpZiAocG9ydC0+dHR5ICYmICFDX0NMT0NBTChwb3J0LT50dHkpCisJaWYgKHBvcnQtPnBvcnQudHR5ICYmICFDX0NMT0NBTChwb3J0LT5wb3J0LnR0eSkKIAkgICAgJiYgb2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSkgewogCQlpZiAob2xkX2RjZF9zdGF0ZSkKLQkJCXR0eV9oYW5ndXAocG9ydC0+dHR5KTsKKwkJCXR0eV9oYW5ndXAocG9ydC0+cG9ydC50dHkpOwogCQkvKiAgZWxzZSAqLwogCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KIAl9Ci0JCisKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKLQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIgIT0gMCkKIAkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fZnVuY19fLCBlcnIpOwotCX0KIGV4aXQ6CiAJOwogfQpAQCAtMTA5MCw4ICsxMDc5LDkgQEAKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlpZiAocF9wcml2LT5yZXNlbmRfY29udCkgewotCQlkYmcgKCIlcyAtIHNlbmRpbmcgc2V0dXAiLCBfX2Z1bmNfXyk7Ci0JCWtleXNwYW5fdXNhOTBfc2VuZF9zZXR1cChwb3J0LT5zZXJpYWwsIHBvcnQsIHBfcHJpdi0+cmVzZW5kX2NvbnQgLSAxKTsKKwkJZGJnKCIlcyAtIHNlbmRpbmcgc2V0dXAiLCBfX2Z1bmNfXyk7CisJCWtleXNwYW5fdXNhOTBfc2VuZF9zZXR1cChwb3J0LT5zZXJpYWwsIHBvcnQsCisJCQkJCQlwX3ByaXYtPnJlc2VuZF9jb250IC0gMSk7CiAJfQogfQogCkBAIC0xMTA3LDcgKzEwOTcsNyBAQAogCWludCBvbGRfZGNkX3N0YXRlOwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlzZXJpYWwgPSB1cmItPmNvbnRleHQ7CiAKQEAgLTExMTYsNyArMTEwNiw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl91c2E2N19wb3J0U3RhdHVzTWVzc2FnZSkpIHsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9CisJCQlzaXplb2Yoc3RydWN0IGtleXNwYW5fdXNhNjdfcG9ydFN0YXR1c01lc3NhZ2UpKSB7CiAJCWRiZygiJXMgLSBiYWQgbGVuZ3RoICVkIiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXJldHVybjsKIAl9CkBAIC0xMTI3LDcgKzExMTgsNyBAQAogCiAJLyogQ2hlY2sgcG9ydCBudW1iZXIgZnJvbSBtZXNzYWdlIGFuZCByZXRyaWV2ZSBwcml2YXRlIGRhdGEgKi8KIAlpZiAobXNnLT5wb3J0ID49IHNlcmlhbC0+bnVtX3BvcnRzKSB7Ci0JCWRiZyAoIiVzIC0gVW5leHBlY3RlZCBwb3J0IG51bWJlciAlZCIsIF9fZnVuY19fLCBtc2ctPnBvcnQpOworCQlkYmcoIiVzIC0gVW5leHBlY3RlZCBwb3J0IG51bWJlciAlZCIsIF9fZnVuY19fLCBtc2ctPnBvcnQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTM5LDEwICsxMTMwLDEwIEBACiAJcF9wcml2LT5jdHNfc3RhdGUgPSAoKG1zZy0+aHNraWFfY3RzKSA/IDEgOiAwKTsKIAlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5ncGlhX2RjZCkgPyAxIDogMCk7CiAKLQlpZiAocG9ydC0+dHR5ICYmICFDX0NMT0NBTChwb3J0LT50dHkpCisJaWYgKHBvcnQtPnBvcnQudHR5ICYmICFDX0NMT0NBTChwb3J0LT5wb3J0LnR0eSkKIAkgICAgJiYgb2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSkgewogCQlpZiAob2xkX2RjZF9zdGF0ZSkKLQkJCXR0eV9oYW5ndXAocG9ydC0+dHR5KTsKKwkJCXR0eV9oYW5ndXAocG9ydC0+cG9ydC50dHkpOwogCQkvKiAgZWxzZSAqLwogCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KIAl9CkBAIC0xMTYxLDcgKzExNTIsNyBAQAogCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAqcF9wcml2OwogCWludCBpOwogCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXNlcmlhbCA9IHVyYi0+Y29udGV4dDsKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewpAQCAtMTE2OSw3ICsxMTYwLDcgQEAKIAkJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJCWlmIChwX3ByaXYtPnJlc2VuZF9jb250KSB7Ci0JCQlkYmcgKCIlcyAtIHNlbmRpbmcgc2V0dXAiLCBfX2Z1bmNfXyk7CisJCQlkYmcoIiVzIC0gc2VuZGluZyBzZXR1cCIsIF9fZnVuY19fKTsKIAkJCWtleXNwYW5fdXNhNjdfc2VuZF9zZXR1cChzZXJpYWwsIHBvcnQsCiAJCQkJCQlwX3ByaXYtPnJlc2VuZF9jb250IC0gMSk7CiAJCQlicmVhazsKQEAgLTExNzcsOCArMTE2OCw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGtleXNwYW5fd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQga2V5c3Bhbl93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlCSpwX3ByaXY7CiAJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKIAlpbnQJCQkJZmxpcDsKQEAgLTExOTEsMzIgKzExODMsMzAgQEAKIAogCS8qIEZJWE1FOiBsb2NraW5nICovCiAJaWYgKGRfZGV0YWlscy0+bXNnX2Zvcm1hdCA9PSBtc2dfdXNhOTApCi0gICAJCWRhdGFfbGVuID0gNjQ7CisJCWRhdGFfbGVuID0gNjQ7CiAJZWxzZQogCQlkYXRhX2xlbiA9IDYzOwogCiAJZmxpcCA9IHBfcHJpdi0+b3V0X2ZsaXA7CiAKIAkvKiBDaGVjayBib3RoIGVuZHBvaW50cyB0byBzZWUgaWYgYW55IGFyZSBhdmFpbGFibGUuICovCi0JaWYgKCh0aGlzX3VyYiA9IHBfcHJpdi0+b3V0X3VyYnNbZmxpcF0pICE9IE5VTEwpIHsKKwl0aGlzX3VyYiA9IHBfcHJpdi0+b3V0X3VyYnNbZmxpcF07CisJaWYgKHRoaXNfdXJiICE9IE5VTEwpIHsKIAkJaWYgKHRoaXNfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQotCQkJcmV0dXJuIChkYXRhX2xlbik7Ci0JCWZsaXAgPSAoZmxpcCArIDEpICYgZF9kZXRhaWxzLT5vdXRkYXRfZW5kcF9mbGlwOyAgICAgICAgCi0JCWlmICgodGhpc191cmIgPSBwX3ByaXYtPm91dF91cmJzW2ZsaXBdKSAhPSBOVUxMKSAKKwkJCXJldHVybiBkYXRhX2xlbjsKKwkJZmxpcCA9IChmbGlwICsgMSkgJiBkX2RldGFpbHMtPm91dGRhdF9lbmRwX2ZsaXA7CisJCXRoaXNfdXJiID0gcF9wcml2LT5vdXRfdXJic1tmbGlwXTsKKwkJaWYgKHRoaXNfdXJiICE9IE5VTEwpIHsKIAkJCWlmICh0aGlzX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKLQkJCQlyZXR1cm4gKGRhdGFfbGVuKTsKKwkJCQlyZXR1cm4gZGF0YV9sZW47CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCBrZXlzcGFuX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGtleXNwYW5fb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGtleXNwYW5fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OwogCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlIAkqc19wcml2OwpAQCAtMTIyNSw3ICsxMjE1LDcgQEAKIAlpbnQJCQkJaSwgZXJyOwogCWludAkJCQliYXVkX3JhdGUsIGRldmljZV9wb3J0OwogCXN0cnVjdCB1cmIJCQkqdXJiOwotCXVuc2lnbmVkIGludAkJCWNmbGFnOworCXVuc2lnbmVkIGludAkJCWNmbGFnID0gMDsKIAogCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC0xMjQ3LDUwICsxMjM3LDUzIEBACiAKIAkvKiBSZXNldCBsb3cgbGV2ZWwgZGF0YSB0b2dnbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZnJvbSBlbmRwb2ludHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCWlmICgodXJiID0gcF9wcml2LT5pbl91cmJzW2ldKSA9PSBOVUxMKQorCQl1cmIgPSBwX3ByaXYtPmluX3VyYnNbaV07CisJCWlmICh1cmIgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCQl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OwogCi0JCS8qIG1ha2Ugc3VyZSBlbmRwb2ludCBkYXRhIHRvZ2dsZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZGV2aWNlICovCi0KKwkJLyogbWFrZSBzdXJlIGVuZHBvaW50IGRhdGEgdG9nZ2xlIGlzIHN5bmNocm9uaXplZAorCQkgICB3aXRoIHRoZSBkZXZpY2UgKi8KIAkJdXNiX2NsZWFyX2hhbHQodXJiLT5kZXYsIHVyYi0+cGlwZSk7Ci0KLQkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpKSAhPSAwKSB7Ci0JCQlkYmcoIiVzIC0gc3VibWl0IHVyYiAlZCBmYWlsZWQgKCVkKSIsIF9fZnVuY19fLCBpLCBlcnIpOwotCQl9CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIgIT0gMCkKKwkJCWRiZygiJXMgLSBzdWJtaXQgdXJiICVkIGZhaWxlZCAoJWQpIiwKKwkJCQkJCQlfX2Z1bmNfXywgaSwgZXJyKTsKIAl9CiAKIAkvKiBSZXNldCBsb3cgbGV2ZWwgZGF0YSB0b2dnbGUgb24gb3V0IGVuZHBvaW50cyAqLwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJaWYgKCh1cmIgPSBwX3ByaXYtPm91dF91cmJzW2ldKSA9PSBOVUxMKQorCQl1cmIgPSBwX3ByaXYtPm91dF91cmJzW2ldOworCQlpZiAodXJiID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKLQkJLyogdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpLCAwKTsgKi8KKwkJLyogdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSwgMCk7ICovCiAJfQogCiAJLyogZ2V0IHRoZSB0ZXJtaW5hbCBjb25maWcgZm9yIHRoZSBzZXR1cCBtZXNzYWdlIG5vdyBzbyB3ZSBkb24ndAogCSAqIG5lZWQgdG8gc2VuZCAyIG9mIHRoZW0gKi8KIAotCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCWRldmljZV9wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKLQotCS8qIEJhdWQgcmF0ZSBjYWxjdWxhdGlvbiB0YWtlcyBiYXVkIHJhdGUgYXMgYW4gaW50ZWdlcgotCSAgIHNvIG90aGVyIHJhdGVzIGNhbiBiZSBnZW5lcmF0ZWQgaWYgZGVzaXJlZC4gKi8KLQliYXVkX3JhdGUgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOwotCS8qIElmIG5vIG1hdGNoIG9yIGludmFsaWQsIGxlYXZlIGFzIGRlZmF1bHQgKi8KLQlpZiAoYmF1ZF9yYXRlID49IDAKLQkgICAgJiYgZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlKGJhdWRfcmF0ZSwgZF9kZXRhaWxzLT5iYXVkY2xrLAotCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGRldmljZV9wb3J0KSA9PSBLRVlTUEFOX0JBVURfUkFURV9PSykgewotCQlwX3ByaXYtPmJhdWQgPSBiYXVkX3JhdGU7CisJaWYgKHR0eSkgeworCQljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJLyogQmF1ZCByYXRlIGNhbGN1bGF0aW9uIHRha2VzIGJhdWQgcmF0ZSBhcyBhbiBpbnRlZ2VyCisJCSAgIHNvIG90aGVyIHJhdGVzIGNhbiBiZSBnZW5lcmF0ZWQgaWYgZGVzaXJlZC4gKi8KKwkJYmF1ZF9yYXRlID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKKwkJLyogSWYgbm8gbWF0Y2ggb3IgaW52YWxpZCwgbGVhdmUgYXMgZGVmYXVsdCAqLworCQlpZiAoYmF1ZF9yYXRlID49IDAKKwkJICAgICYmIGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZShiYXVkX3JhdGUsIGRfZGV0YWlscy0+YmF1ZGNsaywKKwkJCQkJTlVMTCwgTlVMTCwgTlVMTCwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fQkFVRF9SQVRFX09LKSB7CisJCQlwX3ByaXYtPmJhdWQgPSBiYXVkX3JhdGU7CisJCX0KIAl9Ci0KIAkvKiBzZXQgQ1RTL1JUUyBoYW5kc2hha2UgZXRjLiAqLwogCXBfcHJpdi0+Y2ZsYWcgPSBjZmxhZzsKIAlwX3ByaXYtPmZsb3dfY29udHJvbCA9IChjZmxhZyAmIENSVFNDVFMpPyBmbG93X2N0czogZmxvd19ub25lOwogCiAJa2V5c3Bhbl9zZW5kX3NldHVwKHBvcnQsIDEpOwotCS8vbWRlbGF5KDEwMCk7Ci0JLy9rZXlzcGFuX3NldF90ZXJtaW9zKHBvcnQsIE5VTEwpOworCS8qIG1kZWxheSgxMDApOyAqLworCS8qIGtleXNwYW5fc2V0X3Rlcm1pb3MocG9ydCwgTlVMTCk7ICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMDEsNyArMTI5NCw4IEBACiAJCXVzYl9raWxsX3VyYih1cmIpOwogfQogCi1zdGF0aWMgdm9pZCBrZXlzcGFuX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQga2V5c3Bhbl9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaW50CQkJaTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtMTMxMSwxNSArMTMwNSwxNSBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOwogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQkKKwogCXBfcHJpdi0+cnRzX3N0YXRlID0gMDsKIAlwX3ByaXYtPmR0cl9zdGF0ZSA9IDA7Ci0JCisKIAlpZiAoc2VyaWFsLT5kZXYpIHsKIAkJa2V5c3Bhbl9zZW5kX3NldHVwKHBvcnQsIDIpOwogCQkvKiBwaWxvdC14ZmVyIHNlZW1zIHRvIHdvcmsgYmVzdCB3aXRoIHRoaXMgZGVsYXkgKi8KIAkJbWRlbGF5KDEwMCk7Ci0JCS8vIGtleXNwYW5fc2V0X3Rlcm1pb3MocG9ydCwgTlVMTCk7CisJCS8qIGtleXNwYW5fc2V0X3Rlcm1pb3MocG9ydCwgTlVMTCk7ICovCiAJfQogCiAJLyp3aGlsZSAocF9wcml2LT5vdXRjb250X3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgewpAQCAtMTMzOCwxMSArMTMzMiwxMSBAQAogCQkJc3RvcF91cmIocF9wcml2LT5vdXRfdXJic1tpXSk7CiAJCX0KIAl9Ci0JcG9ydC0+dHR5ID0gTlVMTDsKKwlwb3J0LT5wb3J0LnR0eSA9IE5VTEw7CiB9CiAKLQkvKiBkb3dubG9hZCB0aGUgZmlybXdhcmUgdG8gYSBwcmUtcmVudW1lcmF0aW9uIGRldmljZSAqLwotc3RhdGljIGludCBrZXlzcGFuX2Zha2Vfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKKy8qIGRvd25sb2FkIHRoZSBmaXJtd2FyZSB0byBhIHByZS1yZW51bWVyYXRpb24gZGV2aWNlICovCitzdGF0aWMgaW50IGtleXNwYW5fZmFrZV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IAkJCQlyZXNwb25zZTsKIAljb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgCSpyZWNvcmQ7CkBAIC0xMzUyLDEwICsxMzQ2LDExIEBACiAJZGJnKCJLZXlzcGFuIHN0YXJ0dXAgdmVyc2lvbiAlMDR4IHByb2R1Y3QgJTA0eCIsCiAJICAgIGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCiAJICAgIGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwotCQotCWlmICgobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSAmIDB4ODAwMCkgIT0gMHg4MDAwKSB7CisKKwlpZiAoKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgJiAweDgwMDApCisJCQkJCQkJCSE9IDB4ODAwMCkgewogCQlkYmcoIkZpcm13YXJlIGFscmVhZHkgbG9hZGVkLiAgUXVpdHRpbmcuIik7Ci0JCXJldHVybigxKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJCS8qIFNlbGVjdCBmaXJtd2FyZSBpbWFnZSBvbiB0aGUgYmFzaXMgb2YgaWRQcm9kdWN0ICovCkBAIC0xMzc5LDExICsxMzc0LDExIEBACiAJY2FzZSBrZXlzcGFuX3VzYTE5X3ByZV9wcm9kdWN0X2lkOgogCQlmd19uYW1lID0gImtleXNwYW4vdXNhMTkuZnciOwogCQlicmVhazsKLQkJCSAgICAgCisKIAljYXNlIGtleXNwYW5fdXNhMTlxaV9wcmVfcHJvZHVjdF9pZDoKIAkJZndfbmFtZSA9ICJrZXlzcGFuL3VzYTE5cWkuZnciOwogCQlicmVhazsKLQkJCSAgICAgCisKIAljYXNlIGtleXNwYW5fbXByX3ByZV9wcm9kdWN0X2lkOgogCQlmd19uYW1lID0gImtleXNwYW4vbXByLmZ3IjsKIAkJYnJlYWs7CkBAIC0xMzkxLDE1ICsxMzg2LDE1IEBACiAJY2FzZSBrZXlzcGFuX3VzYTE5cXdfcHJlX3Byb2R1Y3RfaWQ6CiAJCWZ3X25hbWUgPSAia2V5c3Bhbi91c2ExOXF3LmZ3IjsKIAkJYnJlYWs7Ci0JCQkgICAgIAorCiAJY2FzZSBrZXlzcGFuX3VzYTE4eF9wcmVfcHJvZHVjdF9pZDoKIAkJZndfbmFtZSA9ICJrZXlzcGFuL3VzYTE4eC5mdyI7CiAJCWJyZWFrOwotCQkJICAgICAKKwogCWNhc2Uga2V5c3Bhbl91c2ExOXdfcHJlX3Byb2R1Y3RfaWQ6CiAJCWZ3X25hbWUgPSAia2V5c3Bhbi91c2ExOXcuZnciOwogCQlicmVhazsKLQkJCisKIAljYXNlIGtleXNwYW5fdXNhNDl3X3ByZV9wcm9kdWN0X2lkOgogCQlmd19uYW1lID0gImtleXNwYW4vdXNhNDl3LmZ3IjsKIAkJYnJlYWs7CkBAIC0xNDMxLDggKzE0MjYsNyBAQAogCQkJCQkgICAgICh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLAogCQkJCQkgICAgIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSwgMHhhMCk7CiAJCWlmIChyZXNwb25zZSA8IDApIHsKLQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIEtleXNwYW4iCi0JCQkJImZpcm13YXJlICglZCAlMDRYICVwICVkKVxuIiwKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIEtleXNwYW4gZmlybXdhcmUgKCVkICUwNFggJXAgJWQpXG4iLAogCQkJCXJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAogCQkJCXJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKIAkJCWJyZWFrOwpAQCAtMTQ0NSw3ICsxNDM5LDcgQEAKIAlyZXNwb25zZSA9IGV6dXNiX3NldF9yZXNldChzZXJpYWwsIDApOwogCiAJLyogd2UgZG9uJ3Qgd2FudCB0aGlzIGRldmljZSB0byBoYXZlIGEgZHJpdmVyIGFzc2lnbmVkIHRvIGl0LiAqLwotCXJldHVybiAoMSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSBrZXlzcGFuX3NldHVwX3VyYnMgKi8KQEAgLTE0NjcsNyArMTQ2MSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXJiICprZXlzcGFuX3NldHVwX3VyYiAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IGVuZHBvaW50LAorc3RhdGljIHN0cnVjdCB1cmIgKmtleXNwYW5fc2V0dXBfdXJiKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBlbmRwb2ludCwKIAkJCQkgICAgICBpbnQgZGlyLCB2b2lkICpjdHgsIGNoYXIgKmJ1ZiwgaW50IGxlbiwKIAkJCQkgICAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB1cmIgKikpCiB7CkBAIC0xNDc4LDEwICsxNDcyLDEwIEBACiAJaWYgKGVuZHBvaW50ID09IC0xKQogCQlyZXR1cm4gTlVMTDsJCS8qIGVuZHBvaW50IG5vdCBuZWVkZWQgKi8KIAotCWRiZyAoIiVzIC0gYWxsb2MgZm9yIGVuZHBvaW50ICVkLiIsIF9fZnVuY19fLCBlbmRwb2ludCk7CisJZGJnKCIlcyAtIGFsbG9jIGZvciBlbmRwb2ludCAlZC4iLCBfX2Z1bmNfXywgZW5kcG9pbnQpOwogCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CQkvKiBObyBJU08gKi8KIAlpZiAodXJiID09IE5VTEwpIHsKLQkJZGJnICgiJXMgLSBhbGxvYyBmb3IgZW5kcG9pbnQgJWQgZmFpbGVkLiIsIF9fZnVuY19fLCBlbmRwb2ludCk7CisJCWRiZygiJXMgLSBhbGxvYyBmb3IgZW5kcG9pbnQgJWQgZmFpbGVkLiIsIF9fZnVuY19fLCBlbmRwb2ludCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTU1NCw3ICsxNTQ4LDcgQEAKIAl9LCB7CiAJCS8qIG1zZ191c2E5MCBjYWxsYmFja3MgKi8KIAkJLmluc3RhdF9jYWxsYmFjayA9CXVzYTkwX2luc3RhdF9jYWxsYmFjaywKLQkJLmdsb2NvbnRfY2FsbGJhY2sgPQl1c2EyOF9nbG9jb250X2NhbGxiYWNrLAkJCisJCS5nbG9jb250X2NhbGxiYWNrID0JdXNhMjhfZ2xvY29udF9jYWxsYmFjaywKIAkJLmluZGF0X2NhbGxiYWNrID0JdXNhOTBfaW5kYXRfY2FsbGJhY2ssCiAJCS5vdXRkYXRfY2FsbGJhY2sgPQl1c2EyeF9vdXRkYXRfY2FsbGJhY2ssCiAJCS5pbmFja19jYWxsYmFjayA9CXVzYTI4X2luYWNrX2NhbGxiYWNrLApAQCAtMTU4MiwxNiArMTU3NiwxNiBAQAogCXN0cnVjdCBjYWxsYmFja3MJCSpjYmFjazsKIAlpbnQJCQkJZW5kcDsKIAotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKIAotCQkvKiBTZXR1cCB2YWx1ZXMgZm9yIHRoZSB2YXJpb3VzIGNhbGxiYWNrIHJvdXRpbmVzICovCisJLyogU2V0dXAgdmFsdWVzIGZvciB0aGUgdmFyaW91cyBjYWxsYmFjayByb3V0aW5lcyAqLwogCWNiYWNrID0gJmtleXNwYW5fY2FsbGJhY2tzW2RfZGV0YWlscy0+bXNnX2Zvcm1hdF07CiAKLQkJLyogQWxsb2NhdGUgYW5kIHNldCB1cCB1cmJzIGZvciBlYWNoIG9uZSB0aGF0IGlzIGluIHVzZSwgCi0JCSAgIHN0YXJ0aW5nIHdpdGggaW5zdGF0IGVuZHBvaW50cyAqLworCS8qIEFsbG9jYXRlIGFuZCBzZXQgdXAgdXJicyBmb3IgZWFjaCBvbmUgdGhhdCBpcyBpbiB1c2UsCisJICAgc3RhcnRpbmcgd2l0aCBpbnN0YXQgZW5kcG9pbnRzICovCiAJc19wcml2LT5pbnN0YXRfdXJiID0ga2V5c3Bhbl9zZXR1cF91cmIKIAkJKHNlcmlhbCwgZF9kZXRhaWxzLT5pbnN0YXRfZW5kcG9pbnQsIFVTQl9ESVJfSU4sCiAJCSBzZXJpYWwsIHNfcHJpdi0+aW5zdGF0X2J1ZiwgSU5TVEFUX0JVRkxFTiwKQEAgLTE2MDcsOCArMTYwMSw4IEBACiAJCSBzZXJpYWwsIHNfcHJpdi0+Z2xvY29udF9idWYsIEdMT0NPTlRfQlVGTEVOLAogCQkgY2JhY2stPmdsb2NvbnRfY2FsbGJhY2spOwogCi0JCS8qIFNldHVwIGVuZHBvaW50cyBmb3IgZWFjaCBwb3J0IHNwZWNpZmljIHRoaW5nICovCi0JZm9yIChpID0gMDsgaSA8IGRfZGV0YWlscy0+bnVtX3BvcnRzOyBpICsrKSB7CisJLyogU2V0dXAgZW5kcG9pbnRzIGZvciBlYWNoIHBvcnQgc3BlY2lmaWMgdGhpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZF9kZXRhaWxzLT5udW1fcG9ydHM7IGkrKykgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKQEAgLTE2NDQsOCArMTYzOCw3IEBACiAJCQkoc2VyaWFsLCBkX2RldGFpbHMtPm91dGNvbnRfZW5kcG9pbnRzW2ldLCBVU0JfRElSX09VVCwKIAkJCSBwb3J0LCBwX3ByaXYtPm91dGNvbnRfYnVmZmVyLCA2NCwKIAkJCSBjYmFjay0+b3V0Y29udF9jYWxsYmFjayk7Ci0JfQkKLQorCX0KIH0KIAogLyogdXNhMTkgZnVuY3Rpb24gZG9lc24ndCByZXF1aXJlIHByZXNjYWxlciAqLwpAQCAtMTY1Myw0NiArMTY0NiwzOSBAQAogCQkJCSAgIHU4ICpyYXRlX2xvdywgdTggKnByZXNjYWxlciwgaW50IHBvcnRudW0pCiB7CiAJdTMyIAliMTYsCS8qIGJhdWQgcmF0ZSB0aW1lcyAxNiAoYWN0dWFsIHJhdGUgdXNlZCBpbnRlcm5hbGx5KSAqLwotCQlkaXYsCS8qIGRpdmlzb3IgKi8JCisJCWRpdiwJLyogZGl2aXNvciAqLwogCQljbnQ7CS8qIGludmVyc2Ugb2YgZGl2aXNvciAocHJvZ3JhbW1lZCBpbnRvIDgwNTEpICovCi0JCQotCWRiZyAoIiVzIC0gJWQuIiwgX19mdW5jX18sIGJhdWRfcmF0ZSk7CiAKLQkJLyogcHJldmVudCBkaXZpZGUgYnkgemVyby4uLiAgKi8KLQlpZiggKGIxNiA9IChiYXVkX3JhdGUgKiAxNkwpKSA9PSAwKSB7Ci0JCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7Ci0JfQorCWRiZygiJXMgLSAlZC4iLCBfX2Z1bmNfXywgYmF1ZF9yYXRlKTsKIAotCQkvKiBBbnkgInN0YW5kYXJkIiByYXRlIG92ZXIgNTdrNiBpcyBtYXJnaW5hbCBvbiB0aGUgVVNBLTE5Ci0JCSAgIGFzIHdlIHJ1biBvdXQgb2YgZGl2aXNvciByZXNvbHV0aW9uLiAqLwotCWlmIChiYXVkX3JhdGUgPiA1NzYwMCkgewotCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOwotCX0KKwkvKiBwcmV2ZW50IGRpdmlkZSBieSB6ZXJvLi4uICAqLworCWIxNiA9IGJhdWRfcmF0ZSAqIDE2TDsKKwlpZiAoYjE2ID09IDApCisJCXJldHVybiBLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFOworCS8qIEFueSAic3RhbmRhcmQiIHJhdGUgb3ZlciA1N2s2IGlzIG1hcmdpbmFsIG9uIHRoZSBVU0EtMTkKKwkgICBhcyB3ZSBydW4gb3V0IG9mIGRpdmlzb3IgcmVzb2x1dGlvbi4gKi8KKwlpZiAoYmF1ZF9yYXRlID4gNTc2MDApCisJCXJldHVybiBLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFOwogCi0JCS8qIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciBhbmQgdGhlIGNvdW50ZXIgKGl0cyBpbnZlcnNlKSAqLwotCWlmKCAoZGl2ID0gKGJhdWRjbGsgLyBiMTYpKSA9PSAwKSB7Ci0JCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7Ci0JfQotCWVsc2UgeworCS8qIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciBhbmQgdGhlIGNvdW50ZXIgKGl0cyBpbnZlcnNlKSAqLworCWRpdiA9IGJhdWRjbGsgLyBiMTY7CisJaWYgKGRpdiA9PSAwKQorCQlyZXR1cm4gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURTsKKwllbHNlCiAJCWNudCA9IDAgLSBkaXY7Ci0JfQogCi0JaWYoZGl2ID4gMHhmZmZmKSB7Ci0JCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7Ci0JfQorCWlmIChkaXYgPiAweGZmZmYpCisJCXJldHVybiBLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFOwogCi0JCS8qIHJldHVybiB0aGUgY291bnRlciB2YWx1ZXMgaWYgbm9uLW51bGwgKi8KLQlpZiAocmF0ZV9sb3cpIHsKKwkvKiByZXR1cm4gdGhlIGNvdW50ZXIgdmFsdWVzIGlmIG5vbi1udWxsICovCisJaWYgKHJhdGVfbG93KQogCQkqcmF0ZV9sb3cgPSAodTgpIChjbnQgJiAweGZmKTsKLQl9Ci0JaWYgKHJhdGVfaGkpIHsKKwlpZiAocmF0ZV9oaSkKIAkJKnJhdGVfaGkgPSAodTgpICgoY250ID4+IDgpICYgMHhmZik7Ci0JfQotCWlmIChyYXRlX2xvdyAmJiByYXRlX2hpKSB7Ci0JCWRiZyAoIiVzIC0gJWQgJTAyeCAlMDJ4LiIsIF9fZnVuY19fLCBiYXVkX3JhdGUsICpyYXRlX2hpLCAqcmF0ZV9sb3cpOwotCX0KLQkKLQlyZXR1cm4gKEtFWVNQQU5fQkFVRF9SQVRFX09LKTsKKwlpZiAocmF0ZV9sb3cgJiYgcmF0ZV9oaSkKKwkJZGJnKCIlcyAtICVkICUwMnggJTAyeC4iLAorCQkJCV9fZnVuY19fLCBiYXVkX3JhdGUsICpyYXRlX2hpLCAqcmF0ZV9sb3cpOworCXJldHVybiBLRVlTUEFOX0JBVURfUkFURV9PSzsKIH0KIAogLyogdXNhMTlocyBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgcHJlc2NhbGVyICovCkBAIC0xNzAwLDM0ICsxNjg2LDM1IEBACiAJCQkJICAgdTggKnJhdGVfbG93LCB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSkKIHsKIAl1MzIgCWIxNiwJLyogYmF1ZCByYXRlIHRpbWVzIDE2IChhY3R1YWwgcmF0ZSB1c2VkIGludGVybmFsbHkpICovCi0JCQlkaXY7CS8qIGRpdmlzb3IgKi8JCi0JCQotCWRiZyAoIiVzIC0gJWQuIiwgX19mdW5jX18sIGJhdWRfcmF0ZSk7CisJCQlkaXY7CS8qIGRpdmlzb3IgKi8KIAotCQkvKiBwcmV2ZW50IGRpdmlkZSBieSB6ZXJvLi4uICAqLwotCWlmKCAoYjE2ID0gKGJhdWRfcmF0ZSAqIDE2TCkpID09IDApIAotCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOwotCQorCWRiZygiJXMgLSAlZC4iLCBfX2Z1bmNfXywgYmF1ZF9yYXRlKTsKIAorCS8qIHByZXZlbnQgZGl2aWRlIGJ5IHplcm8uLi4gICovCisJYjE2ID0gYmF1ZF9yYXRlICogMTZMOworCWlmIChiMTYgPT0gMCkKKwkJcmV0dXJuIEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEU7CiAKLQkJLyogY2FsY3VsYXRlIHRoZSBkaXZpc29yICovCi0JaWYoIChkaXYgPSAoYmF1ZGNsayAvIGIxNikpID09IDApIAotCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCS8qIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciAqLworCWRpdiA9IGJhdWRjbGsgLyBiMTY7CisJaWYgKGRpdiA9PSAwKQorCQlyZXR1cm4gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURTsKIAotCWlmKGRpdiA+IDB4ZmZmZikgCi0JCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisJaWYgKGRpdiA+IDB4ZmZmZikKKwkJcmV0dXJuIEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEU7CiAKLQkJLyogcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlcyBpZiBub24tbnVsbCAqLwotCWlmIChyYXRlX2xvdykgCisJLyogcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlcyBpZiBub24tbnVsbCAqLworCWlmIChyYXRlX2xvdykKIAkJKnJhdGVfbG93ID0gKHU4KSAoZGl2ICYgMHhmZik7Ci0JCi0JaWYgKHJhdGVfaGkpIAorCisJaWYgKHJhdGVfaGkpCiAJCSpyYXRlX2hpID0gKHU4KSAoKGRpdiA+PiA4KSAmIDB4ZmYpOwotCQotCWlmIChyYXRlX2xvdyAmJiByYXRlX2hpKSAKLQkJZGJnICgiJXMgLSAlZCAlMDJ4ICUwMnguIiwgX19mdW5jX18sIGJhdWRfcmF0ZSwgKnJhdGVfaGksICpyYXRlX2xvdyk7Ci0JCi0JcmV0dXJuIChLRVlTUEFOX0JBVURfUkFURV9PSyk7CisKKwlpZiAocmF0ZV9sb3cgJiYgcmF0ZV9oaSkKKwkJZGJnKCIlcyAtICVkICUwMnggJTAyeC4iLAorCQkJX19mdW5jX18sIGJhdWRfcmF0ZSwgKnJhdGVfaGksICpyYXRlX2xvdyk7CisKKwlyZXR1cm4gS0VZU1BBTl9CQVVEX1JBVEVfT0s7CiB9CiAKIHN0YXRpYyBpbnQga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLCB1OCAqcmF0ZV9oaSwKQEAgLTE3MzUsNjQgKzE3MjIsNjEgQEAKIHsKIAl1MzIgCWIxNiwJLyogYmF1ZCByYXRlIHRpbWVzIDE2IChhY3R1YWwgcmF0ZSB1c2VkIGludGVybmFsbHkpICovCiAJCWNsaywJLyogY2xvY2sgd2l0aCAxMy84IHByZXNjYWxlciAqLwotCQlkaXYsCS8qIGRpdmlzb3IgdXNpbmcgMTMvOCBwcmVzY2FsZXIgKi8JCisJCWRpdiwJLyogZGl2aXNvciB1c2luZyAxMy84IHByZXNjYWxlciAqLwogCQlyZXMsCS8qIHJlc3VsdGluZyBiYXVkIHJhdGUgdXNpbmcgMTMvOCBwcmVzY2FsZXIgKi8KIAkJZGlmZiwJLyogZXJyb3IgdXNpbmcgMTMvOCBwcmVzY2FsZXIgKi8KIAkJc21hbGxlc3RfZGlmZjsKIAl1OAliZXN0X3ByZXNjYWxlcjsKIAlpbnQJaTsKIAotCWRiZyAoIiVzIC0gJWQuIiwgX19mdW5jX18sIGJhdWRfcmF0ZSk7CisJZGJnKCIlcyAtICVkLiIsIF9fZnVuY19fLCBiYXVkX3JhdGUpOwogCi0JCS8qIHByZXZlbnQgZGl2aWRlIGJ5IHplcm8gKi8KLQlpZiggKGIxNiA9IGJhdWRfcmF0ZSAqIDE2TCkgPT0gMCkgewotCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOwotCX0KKwkvKiBwcmV2ZW50IGRpdmlkZSBieSB6ZXJvICovCisJYjE2ID0gYmF1ZF9yYXRlICogMTZMOworCWlmIChiMTYgPT0gMCkKKwkJcmV0dXJuIEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEU7CiAKLQkJLyogQ2FsY3VsYXRlIHByZXNjYWxlciBieSB0cnlpbmcgdGhlbSBhbGwgYW5kIGxvb2tpbmcKLQkJICAgZm9yIGJlc3QgZml0ICovCi0JCQotCQkvKiBzdGFydCB3aXRoIGxhcmdlc3QgcG9zc2libGUgZGlmZmVyZW5jZSAqLworCS8qIENhbGN1bGF0ZSBwcmVzY2FsZXIgYnkgdHJ5aW5nIHRoZW0gYWxsIGFuZCBsb29raW5nCisJICAgZm9yIGJlc3QgZml0ICovCisKKwkvKiBzdGFydCB3aXRoIGxhcmdlc3QgcG9zc2libGUgZGlmZmVyZW5jZSAqLwogCXNtYWxsZXN0X2RpZmYgPSAweGZmZmZmZmZmOwogCiAJCS8qIDAgaXMgYW4gaW52YWxpZCBwcmVzY2FsZXIsIHVzZWQgYXMgYSBmbGFnICovCiAJYmVzdF9wcmVzY2FsZXIgPSAwOwogCi0JZm9yKGkgPSA4OyBpIDw9IDB4ZmY7ICsraSkgeworCWZvciAoaSA9IDg7IGkgPD0gMHhmZjsgKytpKSB7CiAJCWNsayA9IChiYXVkY2xrICogOCkgLyAodTMyKSBpOwotCQkKLQkJaWYoIChkaXYgPSBjbGsgLyBiMTYpID09IDApIHsKKworCQlkaXYgPSBjbGsgLyBiMTY7CisJCWlmIChkaXYgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQl9CiAKIAkJcmVzID0gY2xrIC8gZGl2OwotCQlkaWZmPSAocmVzID4gYjE2KSA/IChyZXMtYjE2KSA6IChiMTYtcmVzKTsKKwkJZGlmZiA9IChyZXMgPiBiMTYpID8gKHJlcy1iMTYpIDogKGIxNi1yZXMpOwogCi0JCWlmKGRpZmYgPCBzbWFsbGVzdF9kaWZmKSB7CisJCWlmIChkaWZmIDwgc21hbGxlc3RfZGlmZikgewogCQkJYmVzdF9wcmVzY2FsZXIgPSBpOwogCQkJc21hbGxlc3RfZGlmZiA9IGRpZmY7CiAJCX0KIAl9CiAKLQlpZihiZXN0X3ByZXNjYWxlciA9PSAwKSB7Ci0JCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7Ci0JfQorCWlmIChiZXN0X3ByZXNjYWxlciA9PSAwKQorCQlyZXR1cm4gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURTsKIAogCWNsayA9IChiYXVkY2xrICogOCkgLyAodTMyKSBiZXN0X3ByZXNjYWxlcjsKIAlkaXYgPSBjbGsgLyBiMTY7CiAKLQkJLyogcmV0dXJuIHRoZSBkaXZpc29yIGFuZCBwcmVzY2FsZXIgaWYgbm9uLW51bGwgKi8KLQlpZiAocmF0ZV9sb3cpIHsKKwkvKiByZXR1cm4gdGhlIGRpdmlzb3IgYW5kIHByZXNjYWxlciBpZiBub24tbnVsbCAqLworCWlmIChyYXRlX2xvdykKIAkJKnJhdGVfbG93ID0gKHU4KSAoZGl2ICYgMHhmZik7Ci0JfQotCWlmIChyYXRlX2hpKSB7CisJaWYgKHJhdGVfaGkpCiAJCSpyYXRlX2hpID0gKHU4KSAoKGRpdiA+PiA4KSAmIDB4ZmYpOwotCX0KIAlpZiAocHJlc2NhbGVyKSB7CiAJCSpwcmVzY2FsZXIgPSBiZXN0X3ByZXNjYWxlcjsKIAkJLyogIGRiZygiJXMgLSAlZCAlZCIsIF9fZnVuY19fLCAqcHJlc2NhbGVyLCBkaXYpOyAqLwogCX0KLQlyZXR1cm4gKEtFWVNQQU5fQkFVRF9SQVRFX09LKTsKKwlyZXR1cm4gS0VZU1BBTl9CQVVEX1JBVEVfT0s7CiB9CiAKIAkvKiBVU0EtMjggc3VwcG9ydHMgZGlmZmVyZW50IG1heGltdW0gYmF1ZCByYXRlcyBvbiBlYWNoIHBvcnQgKi8KQEAgLTE4MDAsNTcgKzE3ODQsNTEgQEAKIAkJCQkgICAgdTggKnJhdGVfbG93LCB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSkKIHsKIAl1MzIgCWIxNiwJLyogYmF1ZCByYXRlIHRpbWVzIDE2IChhY3R1YWwgcmF0ZSB1c2VkIGludGVybmFsbHkpICovCi0JCWRpdiwJLyogZGl2aXNvciAqLwkKKwkJZGl2LAkvKiBkaXZpc29yICovCiAJCWNudDsJLyogaW52ZXJzZSBvZiBkaXZpc29yIChwcm9ncmFtbWVkIGludG8gODA1MSkgKi8KIAotCWRiZyAoIiVzIC0gJWQuIiwgX19mdW5jX18sIGJhdWRfcmF0ZSk7CisJZGJnKCIlcyAtICVkLiIsIF9fZnVuY19fLCBiYXVkX3JhdGUpOwogCiAJCS8qIHByZXZlbnQgZGl2aWRlIGJ5IHplcm8gKi8KLQlpZiAoKGIxNiA9IGJhdWRfcmF0ZSAqIDE2TCkgPT0gMCkKLQkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwliMTYgPSBiYXVkX3JhdGUgKiAxNkw7CisJaWYgKGIxNiA9PSAwKQorCQlyZXR1cm4gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURTsKIAotCQkvKiBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgYW5kIHRoZSBjb3VudGVyIChpdHMgaW52ZXJzZSkgKi8KLQlpZiAoKGRpdiA9IChLRVlTUEFOX1VTQTI4X0JBVURDTEsgLyBiMTYpKSA9PSAwKSB7Ci0JCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7Ci0JfQotCWVsc2UgeworCS8qIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciBhbmQgdGhlIGNvdW50ZXIgKGl0cyBpbnZlcnNlKSAqLworCWRpdiA9IEtFWVNQQU5fVVNBMjhfQkFVRENMSyAvIGIxNjsKKwlpZiAoZGl2ID09IDApCisJCXJldHVybiBLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFOworCWVsc2UKIAkJY250ID0gMCAtIGRpdjsKLQl9CiAKLQkJLyogY2hlY2sgZm9yIG91dCBvZiByYW5nZSwgYmFzZWQgb24gcG9ydG51bSwgCi0JCSAgIGFuZCByZXR1cm4gcmVzdWx0ICovCi0JaWYocG9ydG51bSA9PSAwKSB7Ci0JCWlmKGRpdiA+IDB4ZmZmZikKLQkJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7Ci0JfQotCWVsc2UgewotCQlpZihwb3J0bnVtID09IDEpIHsKLQkJCWlmKGRpdiA+IDB4ZmYpIHsKLQkJCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKLQkJfQorCS8qIGNoZWNrIGZvciBvdXQgb2YgcmFuZ2UsIGJhc2VkIG9uIHBvcnRudW0sCisJICAgYW5kIHJldHVybiByZXN1bHQgKi8KKwlpZiAocG9ydG51bSA9PSAwKSB7CisJCWlmIChkaXYgPiAweGZmZmYpCisJCQlyZXR1cm4gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURTsKKwl9IGVsc2UgeworCQlpZiAocG9ydG51bSA9PSAxKSB7CisJCQlpZiAoZGl2ID4gMHhmZikKKwkJCQlyZXR1cm4gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURTsKIAl9CiAKIAkJLyogcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlcyBpZiBub3QgTlVMTAogCQkgICAocG9ydCAxIHdpbGwgaWdub3JlIHJldEhpKSAqLwotCWlmIChyYXRlX2xvdykgeworCWlmIChyYXRlX2xvdykKIAkJKnJhdGVfbG93ID0gKHU4KSAoY250ICYgMHhmZik7Ci0JfQotCWlmIChyYXRlX2hpKSB7CisJaWYgKHJhdGVfaGkpCiAJCSpyYXRlX2hpID0gKHU4KSAoKGNudCA+PiA4KSAmIDB4ZmYpOwotCX0KLQlkYmcgKCIlcyAtICVkIE9LLiIsIF9fZnVuY19fLCBiYXVkX3JhdGUpOwotCXJldHVybiAoS0VZU1BBTl9CQVVEX1JBVEVfT0spOworCWRiZygiJXMgLSAlZCBPSy4iLCBfX2Z1bmNfXywgYmF1ZF9yYXRlKTsKKwlyZXR1cm4gS0VZU1BBTl9CQVVEX1JBVEVfT0s7CiB9CiAKIHN0YXRpYyBpbnQga2V5c3Bhbl91c2EyNl9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCiAJCQkJICAgIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJICAgIGludCByZXNldF9wb3J0KQogewotCXN0cnVjdCBrZXlzcGFuX3VzYTI2X3BvcnRDb250cm9sTWVzc2FnZQltc2c7CQkKKwlzdHJ1Y3Qga2V5c3Bhbl91c2EyNl9wb3J0Q29udHJvbE1lc3NhZ2UJbXNnOwogCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlIAkJKnNfcHJpdjsKIAlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCQkqcF9wcml2OwogCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CkBAIC0xODU4LDcgKzE4MzYsNyBAQAogCXN0cnVjdCB1cmIJCQkJKnRoaXNfdXJiOwogCWludCAJCQkJCWRldmljZV9wb3J0LCBlcnI7CiAKLQlkYmcgKCIlcyByZXNldD0lZCIsIF9fZnVuY19fLCByZXNldF9wb3J0KTsKKwlkYmcoIiVzIHJlc2V0PSVkIiwgX19mdW5jX18sIHJlc2V0X3BvcnQpOwogCiAJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOwogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTE4ODEsMjIgKzE4NTksMjIgQEAKIAlpZiAoKHJlc2V0X3BvcnQgKyAxKSA+IHBfcHJpdi0+cmVzZW5kX2NvbnQpCiAJCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSByZXNldF9wb3J0ICsgMTsKIAlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJLyogIGRiZyAoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19mdW5jX18pOyAqLworCQkvKiAgZGJnKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fZnVuY19fKTsgKi8KIAkJbWRlbGF5KDUpOwotCQlyZXR1cm4oLTEpOworCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtc2V0KCZtc2csIDAsIHNpemVvZiAoc3RydWN0IGtleXNwYW5fdXNhMjZfcG9ydENvbnRyb2xNZXNzYWdlKSk7Ci0JCi0JCS8qIE9ubHkgc2V0IGJhdWQgcmF0ZSBpZiBpdCdzIGNoYW5nZWQgKi8JCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl91c2EyNl9wb3J0Q29udHJvbE1lc3NhZ2UpKTsKKworCS8qIE9ubHkgc2V0IGJhdWQgcmF0ZSBpZiBpdCdzIGNoYW5nZWQgKi8KIAlpZiAocF9wcml2LT5vbGRfYmF1ZCAhPSBwX3ByaXYtPmJhdWQpIHsKIAkJcF9wcml2LT5vbGRfYmF1ZCA9IHBfcHJpdi0+YmF1ZDsKIAkJbXNnLnNldENsb2NraW5nID0gMHhmZjsKIAkJaWYgKGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZQogCQkgICAgKHBfcHJpdi0+YmF1ZCwgZF9kZXRhaWxzLT5iYXVkY2xrLCAmbXNnLmJhdWRIaSwKLQkJICAgICAmbXNnLmJhdWRMbywgJm1zZy5wcmVzY2FsZXIsIGRldmljZV9wb3J0KSA9PSBLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFICkgewotCQkJZGJnKCIlcyAtIEludmFsaWQgYmF1ZCByYXRlICVkIHJlcXVlc3RlZCwgdXNpbmcgOTYwMC4iLCBfX2Z1bmNfXywKLQkJCSAgICBwX3ByaXYtPmJhdWQpOworCQkgICAgICZtc2cuYmF1ZExvLCAmbXNnLnByZXNjYWxlciwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpIHsKKwkJCWRiZygiJXMgLSBJbnZhbGlkIGJhdWQgcmF0ZSAlZCByZXF1ZXN0ZWQsIHVzaW5nIDk2MDAuIiwKKwkJCQkJCV9fZnVuY19fLCBwX3ByaXYtPmJhdWQpOwogCQkJbXNnLmJhdWRMbyA9IDA7CiAJCQltc2cuYmF1ZEhpID0gMTI1OwkvKiBWYWx1ZXMgZm9yIDk2MDAgYmF1ZCAqLwogCQkJbXNnLnByZXNjYWxlciA9IDEwOwpAQCAtMTkyMiw3ICsxOTAwLDcgQEAKIAlpZiAocF9wcml2LT5jZmxhZyAmIFBBUkVOQikgewogCQkvKiBub3RlIFVTQV9QQVJJVFlfTk9ORSA9PSAwICovCiAJCW1zZy5sY3IgfD0gKHBfcHJpdi0+Y2ZsYWcgJiBQQVJPREQpPwotCQkJVVNBX1BBUklUWV9PREQ6IFVTQV9QQVJJVFlfRVZFTjsKKwkJCVVTQV9QQVJJVFlfT0REIDogVVNBX1BBUklUWV9FVkVOOwogCX0KIAltc2cuc2V0TGNyID0gMHhmZjsKIApAQCAtMTk2Myw3ICsxOTQxLDcgQEAKIAogCS8qIFNlbmRpbmcgaW50ZXJtZWRpYXRlIGNvbmZpZ3MgKi8KIAllbHNlIHsKLQkJbXNnLl90eE9uID0gKCEgcF9wcml2LT5icmVha19vbik7CisJCW1zZy5fdHhPbiA9ICghcF9wcml2LT5icmVha19vbik7CiAJCW1zZy5fdHhPZmYgPSAwOwogCQltc2cudHhGbHVzaCA9IDA7CiAJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOwpAQCAtMTk3NSwyMyArMTk1MywyMyBAQAogCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHgwOwogCX0KIAotCQkvKiBEbyBoYW5kc2hha2luZyBvdXRwdXRzICovCQorCS8qIERvIGhhbmRzaGFraW5nIG91dHB1dHMgKi8KIAltc2cuc2V0VHhUcmlTdGF0ZV9zZXRSdHMgPSAweGZmOwogCW1zZy50eFRyaVN0YXRlX3J0cyA9IHBfcHJpdi0+cnRzX3N0YXRlOwogCiAJbXNnLnNldEhza29hX3NldER0ciA9IDB4ZmY7CiAJbXNnLmhza29hX2R0ciA9IHBfcHJpdi0+ZHRyX3N0YXRlOwotCQkKKwogCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSAwOwotCW1lbWNweSAodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciwgJm1zZywgc2l6ZW9mKG1zZykpOwotCQorCW1lbWNweSh0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCAmbXNnLCBzaXplb2YobXNnKSk7CisKIAkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgZGV2aWNlIG9uIGNvbnRyb2wgZW5kcG9pbnQgKi8KIAl0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemVvZihtc2cpOwogCiAJdGhpc191cmItPmRldiA9IHNlcmlhbC0+ZGV2OwotCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIgIT0gMCkKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHNldHVwKSBmYWlsZWQgKCVkKSIsIF9fZnVuY19fLCBlcnIpOwotCX0KICNpZiAwCiAJZWxzZSB7CiAJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYiglZCkgT0sgJWQgYnl0ZXMgKGVuZCAlZCkiLCBfX2Z1bmNfXwpAQCAtMjAwNywxNCArMTk4NSwxNCBAQAogCQkJCSAgICBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCSAgICBpbnQgcmVzZXRfcG9ydCkKIHsKLQlzdHJ1Y3Qga2V5c3Bhbl91c2EyOF9wb3J0Q29udHJvbE1lc3NhZ2UJbXNnOwkJCisJc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydENvbnRyb2xNZXNzYWdlCW1zZzsKIAlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZQkgCSpzX3ByaXY7CiAJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkJKnBfcHJpdjsKIAljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOwogCXN0cnVjdCB1cmIJCQkJKnRoaXNfdXJiOwogCWludCAJCQkJCWRldmljZV9wb3J0LCBlcnI7CiAKLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKKwlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOwogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTIwMjIsNyArMjAwMCw4IEBACiAJZGV2aWNlX3BvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwogCiAJLyogb25seSBkbyBzb21ldGhpbmcgaWYgd2UgaGF2ZSBhIGJ1bGsgb3V0IGVuZHBvaW50ICovCi0JaWYgKCh0aGlzX3VyYiA9IHBfcHJpdi0+b3V0Y29udF91cmIpID09IE5VTEwpIHsKKwl0aGlzX3VyYiA9IHBfcHJpdi0+b3V0Y29udF91cmI7CisJaWYgKHRoaXNfdXJiID09IE5VTEwpIHsKIAkJZGJnKCIlcyAtIG9vcHMgbm8gdXJiLiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTIwMzIsMTcgKzIwMTEsMTggQEAKIAlpZiAoKHJlc2V0X3BvcnQgKyAxKSA+IHBfcHJpdi0+cmVzZW5kX2NvbnQpCiAJCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSByZXNldF9wb3J0ICsgMTsKIAlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJZGJnICgiJXMgYWxyZWFkeSB3cml0aW5nIiwgX19mdW5jX18pOworCQlkYmcoIiVzIGFscmVhZHkgd3JpdGluZyIsIF9fZnVuY19fKTsKIAkJbWRlbGF5KDUpOwotCQlyZXR1cm4oLTEpOworCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtc2V0KCZtc2csIDAsIHNpemVvZiAoc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydENvbnRyb2xNZXNzYWdlKSk7CisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl91c2EyOF9wb3J0Q29udHJvbE1lc3NhZ2UpKTsKIAogCW1zZy5zZXRCYXVkUmF0ZSA9IDE7CiAJaWYgKGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZShwX3ByaXYtPmJhdWQsIGRfZGV0YWlscy0+YmF1ZGNsaywKLQkJJm1zZy5iYXVkSGksICZtc2cuYmF1ZExvLCBOVUxMLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSApIHsKLQkJZGJnKCIlcyAtIEludmFsaWQgYmF1ZCByYXRlIHJlcXVlc3RlZCAlZC4iLCBfX2Z1bmNfXywgcF9wcml2LT5iYXVkKTsKKwkJJm1zZy5iYXVkSGksICZtc2cuYmF1ZExvLCBOVUxMLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSkgeworCQlkYmcoIiVzIC0gSW52YWxpZCBiYXVkIHJhdGUgcmVxdWVzdGVkICVkLiIsCisJCQkJCQlfX2Z1bmNfXywgcF9wcml2LT5iYXVkKTsKIAkJbXNnLmJhdWRMbyA9IDB4ZmY7CiAJCW1zZy5iYXVkSGkgPSAweGIyOwkvKiBWYWx1ZXMgZm9yIDk2MDAgYmF1ZCAqLwogCX0KQEAgLTIwNTMsNyArMjAzMyw3IEBACiAJbXNnLmN0c0Zsb3dDb250cm9sID0gKHBfcHJpdi0+Zmxvd19jb250cm9sID09IGZsb3dfY3RzKTsKIAltc2cueG9uRmxvd0NvbnRyb2wgPSAwOwogCi0JLyogRG8gaGFuZHNoYWtpbmcgb3V0cHV0cywgRFRSIGlzIGludmVydGVkIHJlbGF0aXZlIHRvIFJUUyAqLwkKKwkvKiBEbyBoYW5kc2hha2luZyBvdXRwdXRzLCBEVFIgaXMgaW52ZXJ0ZWQgcmVsYXRpdmUgdG8gUlRTICovCiAJbXNnLnJ0cyA9IHBfcHJpdi0+cnRzX3N0YXRlOwogCW1zZy5kdHIgPSBwX3ByaXYtPmR0cl9zdGF0ZTsKIApAQCAtMjA5NSw3ICsyMDc1LDcgQEAKIAl9CiAJLyogU2VuZGluZyBpbnRlcm1lZGlhdGUgY29uZmlncyAqLwogCWVsc2UgewotCQltc2cuX3R4T24gPSAoISBwX3ByaXYtPmJyZWFrX29uKTsKKwkJbXNnLl90eE9uID0gKCFwX3ByaXYtPmJyZWFrX29uKTsKIAkJbXNnLl90eE9mZiA9IDA7CiAJCW1zZy50eEZsdXNoID0gMDsKIAkJbXNnLnR4Rm9yY2VYb2ZmID0gMDsKQEAgLTIxMDksMTUgKzIwODksMTUgQEAKIAl9CiAKIAlwX3ByaXYtPnJlc2VuZF9jb250ID0gMDsKLQltZW1jcHkgKHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsICZtc2csIHNpemVvZihtc2cpKTsKKwltZW1jcHkodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciwgJm1zZywgc2l6ZW9mKG1zZykpOwogCiAJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGRldmljZSBvbiBjb250cm9sIGVuZHBvaW50ICovCiAJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplb2YobXNnKTsKIAogCXRoaXNfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKLQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyICE9IDApCiAJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihzZXR1cCkgZmFpbGVkIiwgX19mdW5jX18pOwotCX0KICNpZiAwCiAJZWxzZSB7CiAJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihzZXR1cCkgT0sgJWQgYnl0ZXMiLCBfX2Z1bmNfXywKQEAgLTIxNDAsNyArMjEyMCw3IEBACiAJc3RydWN0IHVyYgkJCQkqdGhpc191cmI7CiAJaW50IAkJCQkJZXJyLCBkZXZpY2VfcG9ydDsKIAotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtMjE1MSw3ICsyMTMxLDkgQEAKIAkvKiBXb3JrIG91dCB3aGljaCBwb3J0IHdpdGhpbiB0aGUgZGV2aWNlIGlzIGJlaW5nIHNldHVwICovCiAJZGV2aWNlX3BvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwogCi0JZGJnKCIlcyAtIGVuZHBvaW50ICVkIHBvcnQgJWQgKCVkKSIsX19mdW5jX18sIHVzYl9waXBlZW5kcG9pbnQodGhpc191cmItPnBpcGUpLCBwb3J0LT5udW1iZXIsIGRldmljZV9wb3J0KTsKKwlkYmcoIiVzIC0gZW5kcG9pbnQgJWQgcG9ydCAlZCAoJWQpIiwKKwkJCV9fZnVuY19fLCB1c2JfcGlwZWVuZHBvaW50KHRoaXNfdXJiLT5waXBlKSwKKwkJCXBvcnQtPm51bWJlciwgZGV2aWNlX3BvcnQpOwogCiAJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVyYiB0aGVuIHNlbmQgdGhlIG1lc3NhZ2UgKi8KIAlpZiAodGhpc191cmIgPT0gTlVMTCkgewpAQCAtMjE2NSwzMCArMjE0NywzMCBAQAogCQlwX3ByaXYtPnJlc2VuZF9jb250ID0gcmVzZXRfcG9ydCArIDE7CiAKIAlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJLyogIGRiZyAoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19mdW5jX18pOyAqLworCQkvKiAgZGJnKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fZnVuY19fKTsgKi8KIAkJbWRlbGF5KDUpOwotCQlyZXR1cm4oLTEpOworCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtc2V0KCZtc2csIDAsIHNpemVvZiAoc3RydWN0IGtleXNwYW5fdXNhNDlfcG9ydENvbnRyb2xNZXNzYWdlKSk7CisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl91c2E0OV9wb3J0Q29udHJvbE1lc3NhZ2UpKTsKIAogCS8qbXNnLnBvcnROdW1iZXIgPSBwb3J0LT5udW1iZXI7Ki8KIAltc2cucG9ydE51bWJlciA9IGRldmljZV9wb3J0OwotCQotCQkvKiBPbmx5IHNldCBiYXVkIHJhdGUgaWYgaXQncyBjaGFuZ2VkICovCQorCisJLyogT25seSBzZXQgYmF1ZCByYXRlIGlmIGl0J3MgY2hhbmdlZCAqLwogCWlmIChwX3ByaXYtPm9sZF9iYXVkICE9IHBfcHJpdi0+YmF1ZCkgewogCQlwX3ByaXYtPm9sZF9iYXVkID0gcF9wcml2LT5iYXVkOwogCQltc2cuc2V0Q2xvY2tpbmcgPSAweGZmOwogCQlpZiAoZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlCiAJCSAgICAocF9wcml2LT5iYXVkLCBkX2RldGFpbHMtPmJhdWRjbGssICZtc2cuYmF1ZEhpLAotCQkgICAgICZtc2cuYmF1ZExvLCAmbXNnLnByZXNjYWxlciwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUgKSB7Ci0JCQlkYmcoIiVzIC0gSW52YWxpZCBiYXVkIHJhdGUgJWQgcmVxdWVzdGVkLCB1c2luZyA5NjAwLiIsIF9fZnVuY19fLAotCQkJICAgIHBfcHJpdi0+YmF1ZCk7CisJCSAgICAgJm1zZy5iYXVkTG8sICZtc2cucHJlc2NhbGVyLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSkgeworCQkJZGJnKCIlcyAtIEludmFsaWQgYmF1ZCByYXRlICVkIHJlcXVlc3RlZCwgdXNpbmcgOTYwMC4iLAorCQkJCQkJX19mdW5jX18sIHBfcHJpdi0+YmF1ZCk7CiAJCQltc2cuYmF1ZExvID0gMDsKIAkJCW1zZy5iYXVkSGkgPSAxMjU7CS8qIFZhbHVlcyBmb3IgOTYwMCBiYXVkICovCiAJCQltc2cucHJlc2NhbGVyID0gMTA7CiAJCX0KLQkJLy9tc2cuc2V0UHJlc2NhbGVyID0gMHhmZjsKKwkJLyogbXNnLnNldFByZXNjYWxlciA9IDB4ZmY7ICovCiAJfQogCiAJbXNnLmxjciA9IChwX3ByaXYtPmNmbGFnICYgQ1NUT1BCKT8gU1RPUEJJVFNfNjc4XzI6IFNUT1BCSVRTXzU2NzhfMTsKQEAgLTIyMDksMTkgKzIxOTEsMTkgQEAKIAlpZiAocF9wcml2LT5jZmxhZyAmIFBBUkVOQikgewogCQkvKiBub3RlIFVTQV9QQVJJVFlfTk9ORSA9PSAwICovCiAJCW1zZy5sY3IgfD0gKHBfcHJpdi0+Y2ZsYWcgJiBQQVJPREQpPwotCQkJVVNBX1BBUklUWV9PREQ6IFVTQV9QQVJJVFlfRVZFTjsKKwkJCVVTQV9QQVJJVFlfT0REIDogVVNBX1BBUklUWV9FVkVOOwogCX0KIAltc2cuc2V0TGNyID0gMHhmZjsKIAogCW1zZy5jdHNGbG93Q29udHJvbCA9IChwX3ByaXYtPmZsb3dfY29udHJvbCA9PSBmbG93X2N0cyk7CiAJbXNnLnhvbkZsb3dDb250cm9sID0gMDsKIAltc2cuc2V0Rmxvd0NvbnRyb2wgPSAweGZmOwotCQorCiAJbXNnLmZvcndhcmRpbmdMZW5ndGggPSAxNjsKIAltc2cueG9uQ2hhciA9IDE3OwogCW1zZy54b2ZmQ2hhciA9IDE5OwogCi0JLyogT3BlbmluZyBwb3J0ICovIAorCS8qIE9wZW5pbmcgcG9ydCAqLwogCWlmIChyZXNldF9wb3J0ID09IDEpIHsKIAkJbXNnLl90eE9uID0gMTsKIAkJbXNnLl90eE9mZiA9IDA7CkBAIC0yMjUzLDcgKzIyMzUsNyBAQAogCX0KIAkvKiBTZW5kaW5nIGludGVybWVkaWF0ZSBjb25maWdzICovCiAJZWxzZSB7Ci0JCW1zZy5fdHhPbiA9ICghIHBfcHJpdi0+YnJlYWtfb24pOworCQltc2cuX3R4T24gPSAoIXBfcHJpdi0+YnJlYWtfb24pOwogCQltc2cuX3R4T2ZmID0gMDsKIAkJbXNnLnR4Rmx1c2ggPSAwOwogCQltc2cudHhCcmVhayA9IChwX3ByaXYtPmJyZWFrX29uKTsKQEAgLTIyNjcsMTYgKzIyNDksMTcgQEAKIAkJbXNnLmRpc2FibGVQb3J0ID0gMDsKIAl9CiAKLQkJLyogRG8gaGFuZHNoYWtpbmcgb3V0cHV0cyAqLwkKKwkvKiBEbyBoYW5kc2hha2luZyBvdXRwdXRzICovCiAJbXNnLnNldFJ0cyA9IDB4ZmY7CiAJbXNnLnJ0cyA9IHBfcHJpdi0+cnRzX3N0YXRlOwogCiAJbXNnLnNldER0ciA9IDB4ZmY7CiAJbXNnLmR0ciA9IHBfcHJpdi0+ZHRyX3N0YXRlOwotCQkKKwogCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSAwOwogCi0JLyogaWYgdGhlIGRldmljZSBpcyBhIDQ5d2csIHdlIHNlbmQgY29udHJvbCBtZXNzYWdlIG9uIHVzYiBjb250cm9sIEVQIDAgKi8KKwkvKiBpZiB0aGUgZGV2aWNlIGlzIGEgNDl3Zywgd2Ugc2VuZCBjb250cm9sIG1lc3NhZ2Ugb24gdXNiCisJICAgY29udHJvbCBFUCAwICovCiAKIAlpZiAoZF9kZXRhaWxzLT5wcm9kdWN0X2lkID09IGtleXNwYW5fdXNhNDl3Z19wcm9kdWN0X2lkKSB7CiAJCWRyID0gKHZvaWQgKikoc19wcml2LT5jdHJsX2J1Zik7CkBAIC0yMjg2LDIzICsyMjY5LDI0IEBACiAJCWRyLT53SW5kZXggPSAwOwogCQlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihtc2cpKTsKIAotCQltZW1jcHkgKHNfcHJpdi0+Z2xvY29udF9idWYsICZtc2csIHNpemVvZihtc2cpKTsKKwkJbWVtY3B5KHNfcHJpdi0+Z2xvY29udF9idWYsICZtc2csIHNpemVvZihtc2cpKTsKIAotCQl1c2JfZmlsbF9jb250cm9sX3VyYih0aGlzX3VyYiwgc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkgICAgICh1bnNpZ25lZCBjaGFyICopZHIsIHNfcHJpdi0+Z2xvY29udF9idWYsIHNpemVvZihtc2cpLAotCQkJICAgICB1c2E0OV9nbG9jb250X2NhbGxiYWNrLCBzZXJpYWwpOworCQl1c2JfZmlsbF9jb250cm9sX3VyYih0aGlzX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkodW5zaWduZWQgY2hhciAqKWRyLCBzX3ByaXYtPmdsb2NvbnRfYnVmLAorCQkJCXNpemVvZihtc2cpLCB1c2E0OV9nbG9jb250X2NhbGxiYWNrLCBzZXJpYWwpOwogCiAJfSBlbHNlIHsKIAkJbWVtY3B5KHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsICZtc2csIHNpemVvZihtc2cpKTsKLQkKKwogCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgZGV2aWNlIG9uIGNvbnRyb2wgZW5kcG9pbnQgKi8KIAkJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplb2YobXNnKTsKIAogCQl0aGlzX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJfQotCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIgIT0gMCkKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHNldHVwKSBmYWlsZWQgKCVkKSIsIF9fZnVuY19fLCBlcnIpOwotCX0KICNpZiAwCiAJZWxzZSB7CiAJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYiglZCkgT0sgJWQgYnl0ZXMgKGVuZCAlZCkiLCBfX2Z1bmNfXywKQEAgLTIzMTgsNyArMjMwMiw3IEBACiAJCQkJICAgIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJICAgIGludCByZXNldF9wb3J0KQogewotCXN0cnVjdCBrZXlzcGFuX3VzYTkwX3BvcnRDb250cm9sTWVzc2FnZQltc2c7CQkKKwlzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0Q29udHJvbE1lc3NhZ2UJbXNnOwogCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlIAkJKnNfcHJpdjsKIAlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCQkqcF9wcml2OwogCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CkBAIC0yMzI2LDE0ICsyMzEwLDE1IEBACiAJaW50IAkJCQkJZXJyOwogCXU4CQkJCQkJcHJlc2NhbGVyOwogCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKIAogCS8qIG9ubHkgZG8gc29tZXRoaW5nIGlmIHdlIGhhdmUgYSBidWxrIG91dCBlbmRwb2ludCAqLwotCWlmICgodGhpc191cmIgPSBwX3ByaXYtPm91dGNvbnRfdXJiKSA9PSBOVUxMKSB7CisJdGhpc191cmIgPSBwX3ByaXYtPm91dGNvbnRfdXJiOworCWlmICh0aGlzX3VyYiA9PSBOVUxMKSB7CiAJCWRiZygiJXMgLSBvb3BzIG5vIHVyYi4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yMzQzLDI0ICsyMzI4LDI0IEBACiAJaWYgKChyZXNldF9wb3J0ICsgMSkgPiBwX3ByaXYtPnJlc2VuZF9jb250KQogCQlwX3ByaXYtPnJlc2VuZF9jb250ID0gcmVzZXRfcG9ydCArIDE7CiAJaWYgKHRoaXNfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCWRiZyAoIiVzIGFscmVhZHkgd3JpdGluZyIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyBhbHJlYWR5IHdyaXRpbmciLCBfX2Z1bmNfXyk7CiAJCW1kZWxheSg1KTsKLQkJcmV0dXJuKC0xKTsKKwkJcmV0dXJuIC0xOwogCX0KIAotCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKHN0cnVjdCBrZXlzcGFuX3VzYTkwX3BvcnRDb250cm9sTWVzc2FnZSkpOworCW1lbXNldCgmbXNnLCAwLCBzaXplb2Yoc3RydWN0IGtleXNwYW5fdXNhOTBfcG9ydENvbnRyb2xNZXNzYWdlKSk7CiAKLQkvKiBPbmx5IHNldCBiYXVkIHJhdGUgaWYgaXQncyBjaGFuZ2VkICovCQorCS8qIE9ubHkgc2V0IGJhdWQgcmF0ZSBpZiBpdCdzIGNoYW5nZWQgKi8KIAlpZiAocF9wcml2LT5vbGRfYmF1ZCAhPSBwX3ByaXYtPmJhdWQpIHsKIAkJcF9wcml2LT5vbGRfYmF1ZCA9IHBfcHJpdi0+YmF1ZDsKIAkJbXNnLnNldENsb2NraW5nID0gMHgwMTsKIAkJaWYgKGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZQogCQkgICAgKHBfcHJpdi0+YmF1ZCwgZF9kZXRhaWxzLT5iYXVkY2xrLCAmbXNnLmJhdWRIaSwKLQkJICAgICAmbXNnLmJhdWRMbywgJnByZXNjYWxlciwgMCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSApIHsKLQkJCWRiZygiJXMgLSBJbnZhbGlkIGJhdWQgcmF0ZSAlZCByZXF1ZXN0ZWQsIHVzaW5nIDk2MDAuIiwgX19mdW5jX18sCi0JCQkgICAgcF9wcml2LT5iYXVkKTsKKwkJICAgICAmbXNnLmJhdWRMbywgJnByZXNjYWxlciwgMCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSkgeworCQkJZGJnKCIlcyAtIEludmFsaWQgYmF1ZCByYXRlICVkIHJlcXVlc3RlZCwgdXNpbmcgOTYwMC4iLAorCQkJCQkJX19mdW5jX18sIHBfcHJpdi0+YmF1ZCk7CiAJCQlwX3ByaXYtPmJhdWQgPSA5NjAwOwotCQkJZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlIChwX3ByaXYtPmJhdWQsIGRfZGV0YWlscy0+YmF1ZGNsaywgCisJCQlkX2RldGFpbHMtPmNhbGN1bGF0ZV9iYXVkX3JhdGUocF9wcml2LT5iYXVkLCBkX2RldGFpbHMtPmJhdWRjbGssCiAJCQkJJm1zZy5iYXVkSGksICZtc2cuYmF1ZExvLCAmcHJlc2NhbGVyLCAwKTsKIAkJfQogCQltc2cuc2V0UnhNb2RlID0gMTsKQEAgLTIzNjgsMTMgKzIzNTMsMTAgQEAKIAl9CiAKIAkvKiBtb2RlcyBtdXN0IGFsd2F5cyBiZSBjb3JyZWN0bHkgc3BlY2lmaWVkICovCi0JaWYgKHBfcHJpdi0+YmF1ZCA+IDU3NjAwKQotCXsKKwlpZiAocF9wcml2LT5iYXVkID4gNTc2MDApIHsKIAkJbXNnLnJ4TW9kZSA9IFJYTU9ERV9ETUE7CiAJCW1zZy50eE1vZGUgPSBUWE1PREVfRE1BOwotCX0KLQllbHNlCi0JeworCX0gZWxzZSB7CiAJCW1zZy5yeE1vZGUgPSBSWE1PREVfQllIQU5EOwogCQltc2cudHhNb2RlID0gVFhNT0RFX0JZSEFORDsKIAl9CkBAIC0yMzk3LDcgKzIzNzksNyBAQAogCWlmIChwX3ByaXYtPmNmbGFnICYgUEFSRU5CKSB7CiAJCS8qIG5vdGUgVVNBX1BBUklUWV9OT05FID09IDAgKi8KIAkJbXNnLmxjciB8PSAocF9wcml2LT5jZmxhZyAmIFBBUk9ERCk/Ci0JCQlVU0FfUEFSSVRZX09ERDogVVNBX1BBUklUWV9FVkVOOworCQkJVVNBX1BBUklUWV9PREQgOiBVU0FfUEFSSVRZX0VWRU47CiAJfQogCWlmIChwX3ByaXYtPm9sZF9jZmxhZyAhPSBwX3ByaXYtPmNmbGFnKSB7CiAJCXBfcHJpdi0+b2xkX2NmbGFnID0gcF9wcml2LT5jZmxhZzsKQEAgLTI0MDgsNDcgKzIzOTAsNDYgQEAKIAkJbXNnLnR4Rmxvd0NvbnRyb2wgPSBUWEZMT1dfQ1RTOwogCW1zZy5zZXRUeEZsb3dDb250cm9sID0gMHgwMTsKIAltc2cuc2V0UnhGbG93Q29udHJvbCA9IDB4MDE7Ci0JCisKIAltc2cucnhGb3J3YXJkaW5nTGVuZ3RoID0gMTY7Ci0JbXNnLnJ4Rm9yd2FyZGluZ1RpbWVvdXQgPSAxNjsJCisJbXNnLnJ4Rm9yd2FyZGluZ1RpbWVvdXQgPSAxNjsKIAltc2cudHhBY2tTZXR0aW5nID0gMDsKIAltc2cueG9uQ2hhciA9IDE3OwogCW1zZy54b2ZmQ2hhciA9IDE5OwogCi0JLyogT3BlbmluZyBwb3J0ICovIAorCS8qIE9wZW5pbmcgcG9ydCAqLwogCWlmIChyZXNldF9wb3J0ID09IDEpIHsKIAkJbXNnLnBvcnRFbmFibGVkID0gMTsKIAkJbXNnLnJ4Rmx1c2ggPSAxOwogCQltc2cudHhCcmVhayA9IChwX3ByaXYtPmJyZWFrX29uKTsKIAl9CiAJLyogQ2xvc2luZyBwb3J0ICovCi0JZWxzZSBpZiAocmVzZXRfcG9ydCA9PSAyKSB7CisJZWxzZSBpZiAocmVzZXRfcG9ydCA9PSAyKQogCQltc2cucG9ydEVuYWJsZWQgPSAwOwotCX0KIAkvKiBTZW5kaW5nIGludGVybWVkaWF0ZSBjb25maWdzICovCiAJZWxzZSB7Ci0JCWlmIChwb3J0LT5vcGVuX2NvdW50KQorCQlpZiAocG9ydC0+cG9ydC5jb3VudCkKIAkJCW1zZy5wb3J0RW5hYmxlZCA9IDE7CiAJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOwogCX0KIAotCS8qIERvIGhhbmRzaGFraW5nIG91dHB1dHMgKi8JCisJLyogRG8gaGFuZHNoYWtpbmcgb3V0cHV0cyAqLwogCW1zZy5zZXRSdHMgPSAweDAxOwogCW1zZy5ydHMgPSBwX3ByaXYtPnJ0c19zdGF0ZTsKIAogCW1zZy5zZXREdHIgPSAweDAxOwogCW1zZy5kdHIgPSBwX3ByaXYtPmR0cl9zdGF0ZTsKLQkJCisKIAlwX3ByaXYtPnJlc2VuZF9jb250ID0gMDsKLQltZW1jcHkgKHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsICZtc2csIHNpemVvZihtc2cpKTsKLQkKKwltZW1jcHkodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciwgJm1zZywgc2l6ZW9mKG1zZykpOworCiAJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGRldmljZSBvbiBjb250cm9sIGVuZHBvaW50ICovCiAJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplb2YobXNnKTsKIAogCXRoaXNfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKLQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyICE9IDApCiAJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihzZXR1cCkgZmFpbGVkICglZCkiLCBfX2Z1bmNfXywgZXJyKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NjMsNyArMjQ0NCw3IEBACiAJc3RydWN0IHVyYgkJCQkqdGhpc191cmI7CiAJaW50IAkJCQkJZXJyLCBkZXZpY2VfcG9ydDsKIAotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtMjQ4Niw5ICsyNDY3LDkgQEAKIAlpZiAoKHJlc2V0X3BvcnQgKyAxKSA+IHBfcHJpdi0+cmVzZW5kX2NvbnQpCiAJCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSByZXNldF9wb3J0ICsgMTsKIAlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJLyogIGRiZyAoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19mdW5jX18pOyAqLworCQkvKiAgZGJnKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fZnVuY19fKTsgKi8KIAkJbWRlbGF5KDUpOwotCQlyZXR1cm4oLTEpOworCQlyZXR1cm4gLTE7CiAJfQogCiAJbWVtc2V0KCZtc2csIDAsIHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl91c2E2N19wb3J0Q29udHJvbE1lc3NhZ2UpKTsKQEAgLTI1MDEsOSArMjQ4Miw5IEBACiAJCW1zZy5zZXRDbG9ja2luZyA9IDB4ZmY7CiAJCWlmIChkX2RldGFpbHMtPmNhbGN1bGF0ZV9iYXVkX3JhdGUKIAkJICAgIChwX3ByaXYtPmJhdWQsIGRfZGV0YWlscy0+YmF1ZGNsaywgJm1zZy5iYXVkSGksCi0JCSAgICAgJm1zZy5iYXVkTG8sICZtc2cucHJlc2NhbGVyLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSApIHsKLQkJCWRiZygiJXMgLSBJbnZhbGlkIGJhdWQgcmF0ZSAlZCByZXF1ZXN0ZWQsIHVzaW5nIDk2MDAuIiwgX19mdW5jX18sCi0JCQkgICAgcF9wcml2LT5iYXVkKTsKKwkJICAgICAmbXNnLmJhdWRMbywgJm1zZy5wcmVzY2FsZXIsIGRldmljZV9wb3J0KSA9PSBLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKSB7CisJCQlkYmcoIiVzIC0gSW52YWxpZCBiYXVkIHJhdGUgJWQgcmVxdWVzdGVkLCB1c2luZyA5NjAwLiIsCisJCQkJCQlfX2Z1bmNfXywgcF9wcml2LT5iYXVkKTsKIAkJCW1zZy5iYXVkTG8gPSAwOwogCQkJbXNnLmJhdWRIaSA9IDEyNTsJLyogVmFsdWVzIGZvciA5NjAwIGJhdWQgKi8KIAkJCW1zZy5wcmVzY2FsZXIgPSAxMDsKQEAgLTI1MjksNyArMjUxMCw3IEBACiAJaWYgKHBfcHJpdi0+Y2ZsYWcgJiBQQVJFTkIpIHsKIAkJLyogbm90ZSBVU0FfUEFSSVRZX05PTkUgPT0gMCAqLwogCQltc2cubGNyIHw9IChwX3ByaXYtPmNmbGFnICYgUEFST0REKT8KLQkJCVVTQV9QQVJJVFlfT0REOiBVU0FfUEFSSVRZX0VWRU47CisJCQkJCVVTQV9QQVJJVFlfT0REIDogVVNBX1BBUklUWV9FVkVOOwogCX0KIAltc2cuc2V0TGNyID0gMHhmZjsKIApAQCAtMjU2Niw3ICsyNTQ3LDcgQEAKIAkJbXNnLnJlc2V0RGF0YVRvZ2dsZSA9IDA7CiAJfSBlbHNlIHsKIAkJLyogU2VuZGluZyBpbnRlcm1lZGlhdGUgY29uZmlncyAqLwotCQltc2cuX3R4T24gPSAoISBwX3ByaXYtPmJyZWFrX29uKTsKKwkJbXNnLl90eE9uID0gKCFwX3ByaXYtPmJyZWFrX29uKTsKIAkJbXNnLl90eE9mZiA9IDA7CiAJCW1zZy50eEZsdXNoID0gMDsKIAkJbXNnLnR4QnJlYWsgPSAocF9wcml2LT5icmVha19vbik7CkBAIC0yNjA2LDcgKzI1ODcsNyBAQAogCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlICpzX3ByaXY7CiAJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgKmRfZGV0YWlsczsKIAotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKQEAgLTI2MzMsNyArMjYxNCw3IEBACiAKIC8qIEdldHMgY2FsbGVkIGJ5IHRoZSAicmVhbCIgZHJpdmVyIChpZSBvbmNlIGZpcm13YXJlIGlzIGxvYWRlZAogICAgYW5kIHJlbnVtZXJhdGlvbiBoYXMgdGFrZW4gcGxhY2UuICovCi1zdGF0aWMgaW50IGtleXNwYW5fc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQga2V5c3Bhbl9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50CQkJCWksIGVycjsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CQkqcG9ydDsKQEAgLTI2NDQsMTcgKzI2MjUsMjAgQEAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJZm9yIChpID0gMDsgKGRfZGV0YWlscyA9IGtleXNwYW5fZGV2aWNlc1tpXSkgIT0gTlVMTDsgKytpKQotCQlpZiAoZF9kZXRhaWxzLT5wcm9kdWN0X2lkID09IGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpCisJCWlmIChkX2RldGFpbHMtPnByb2R1Y3RfaWQgPT0KKwkJCQlsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKQogCQkJYnJlYWs7CiAJaWYgKGRfZGV0YWlscyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIHVua25vd24gcHJvZHVjdCBpZCAleFxuIiwgX19mdW5jX18sIGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSB1bmtub3duIHByb2R1Y3QgaWQgJXhcbiIsCisJCSAgICBfX2Z1bmNfXywgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAJCXJldHVybiAxOwogCX0KIAogCS8qIFNldHVwIHByaXZhdGUgZGF0YSBmb3Igc2VyaWFsIGRyaXZlciAqLwogCXNfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzX3ByaXYpIHsKLQkJZGJnKCIlcyAtIGttYWxsb2MgZm9yIGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgZmFpbGVkLiIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIGttYWxsb2MgZm9yIGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgZmFpbGVkLiIsCisJCQkJCQkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yNjY0LDEwICsyNjQ4LDExIEBACiAJLyogTm93IHNldHVwIHBlciBwb3J0IHByaXZhdGUgZGF0YSAqLwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCXBfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCQlwX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFwX3ByaXYpIHsKIAkJCWRiZygiJXMgLSBrbWFsbG9jIGZvciBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAoJWQpIGZhaWxlZCEuIiwgX19mdW5jX18sIGkpOwotCQkJcmV0dXJuICgxKTsKKwkJCXJldHVybiAxOwogCQl9CiAJCXBfcHJpdi0+ZGV2aWNlX2RldGFpbHMgPSBkX2RldGFpbHM7CiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwX3ByaXYpOwpAQCAtMjY4OSwxMSArMjY3NCwxMSBAQAogCQkJZGJnKCIlcyAtIHN1Ym1pdCBpbmRhdCB1cmIgZmFpbGVkICVkIiwgX19mdW5jX18sCiAJCQkJZXJyKTsKIAl9Ci0JCQkKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBrZXlzcGFuX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQga2V5c3Bhbl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWludAkJCQlpLCBqOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJCSpwb3J0OwpAQCAtMjc0NSw4ICsyNzMwLDggQEAKIAl9CiB9CiAKLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBNT0RVTEVfRklSTVdBUkUoImtleXNwYW4vdXNhMjguZnciKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCmluZGV4IGI1MmZiNjUuLjM4YjQ1ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaApAQCAtMzUsMTcgKzM1LDE4IEBACiAKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgS2V5c3BhbiBzZXJpYWwgY29udmVydGVyICovCi1zdGF0aWMgaW50ICBrZXlzcGFuX29wZW4JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorc3RhdGljIGludCAga2V5c3Bhbl9vcGVuCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJCSBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBrZXlzcGFuX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKK3N0YXRpYyB2b2lkIGtleXNwYW5fY2xvc2UJCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQkJIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyBpbnQgIGtleXNwYW5fc3RhcnR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQga2V5c3Bhbl9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIHZvaWQga2V5c3Bhbl9yeF90aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQga2V5c3Bhbl9yeF91bnRocm90dGxlCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgIGtleXNwYW5fd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAga2V5c3Bhbl93cml0ZV9yb29tCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKLXN0YXRpYyBpbnQgIGtleXNwYW5fd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorc3RhdGljIGludCAga2V5c3Bhbl93cml0ZQkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCSBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJCQkgaW50IGNvdW50KTsKIApAQCAtNTMsMTggKzU0LDE0IEBACiAJCQkJCSBpbnQgcmVzZXRfcG9ydCk7CiAKIAotc3RhdGljIGludCAga2V5c3Bhbl9jaGFyc19pbl9idWZmZXIgCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgIGtleXNwYW5faW9jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCSB1bnNpZ25lZCBpbnQgY21kLAotCQkJCQkgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQga2V5c3Bhbl9zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCitzdGF0aWMgdm9pZCBrZXlzcGFuX3NldF90ZXJtaW9zCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7Ci1zdGF0aWMgdm9pZCBrZXlzcGFuX2JyZWFrX2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCitzdGF0aWMgdm9pZCBrZXlzcGFuX2JyZWFrX2N0bAkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkJCSBpbnQgYnJlYWtfc3RhdGUpOwotc3RhdGljIGludCAga2V5c3Bhbl90aW9jbWdldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCitzdGF0aWMgaW50ICBrZXlzcGFuX3Rpb2NtZ2V0CQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCQkJIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBpbnQgIGtleXNwYW5fdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorc3RhdGljIGludCAga2V5c3Bhbl90aW9jbXNldAkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwKIAkJCQkJIHVuc2lnbmVkIGludCBjbGVhcik7CiBzdGF0aWMgaW50ICBrZXlzcGFuX2Zha2Vfc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CkBAIC0xMzgsNyArMTM1LDggQEAKIAogLyogUHJvZHVjdCBJRHMgcG9zdC1yZW51bWVyYXRpb24uICBOb3RlIHRoYXQgdGhlIDI4eCBhbmQgMjh4YgogICAgaGF2ZSB0aGUgc2FtZSBpZCdzIHBvc3QtcmVudW1lcmF0aW9uIGJ1dCBiZWhhdmUgaWRlbnRpY2FsbHkKLSAgIHNvIGl0J3Mgbm90IGFuIGlzc3VlLiAqLworICAgc28gaXQncyBub3QgYW4gaXNzdWUuIEFzIHN1Y2gsIHRoZSAyOHhiIGlzIG5vdCBsaXN0ZWQgaW4gYW55CisgICBvZiB0aGUgZGV2aWNlIHRhYmxlcy4gKi8KICNkZWZpbmUJa2V5c3Bhbl91c2ExOHhfcHJvZHVjdF9pZAkJMHgwMTEyCiAjZGVmaW5lCWtleXNwYW5fdXNhMTlfcHJvZHVjdF9pZAkJMHgwMTA3CiAjZGVmaW5lCWtleXNwYW5fdXNhMTlxaV9wcm9kdWN0X2lkCQkweDAxMGMKQEAgLTQ4Miw3ICs0ODAsNiBAQAogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOF9wcm9kdWN0X2lkKSB9LAogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4YV9wcm9kdWN0X2lkKSB9LAotCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhiX3Byb2R1Y3RfaWQpIH0sCiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGdfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3X3Byb2R1Y3RfaWQpfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3bGNfcHJvZHVjdF9pZCl9LApAQCAtNTMyLDcgKzUyOSw2IEBACiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4X3Byb2R1Y3RfaWQpIH0sCiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eF9wcm9kdWN0X2lkKSB9LAogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhhX3Byb2R1Y3RfaWQpIH0sCi0JeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGJfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4Z19wcm9kdWN0X2lkKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTU2OCwxMCArNTY0LDYgQEAKIAkuY2xvc2UJCQk9IGtleXNwYW5fY2xvc2UsCiAJLndyaXRlCQkJPSBrZXlzcGFuX3dyaXRlLAogCS53cml0ZV9yb29tCQk9IGtleXNwYW5fd3JpdGVfcm9vbSwKLQkuY2hhcnNfaW5fYnVmZmVyCT0ga2V5c3Bhbl9jaGFyc19pbl9idWZmZXIsCi0JLnRocm90dGxlCQk9IGtleXNwYW5fcnhfdGhyb3R0bGUsCi0JLnVudGhyb3R0bGUJCT0ga2V5c3Bhbl9yeF91bnRocm90dGxlLAotCS5pb2N0bAkJCT0ga2V5c3Bhbl9pb2N0bCwKIAkuc2V0X3Rlcm1pb3MJCT0ga2V5c3Bhbl9zZXRfdGVybWlvcywKIAkuYnJlYWtfY3RsCQk9IGtleXNwYW5fYnJlYWtfY3RsLAogCS50aW9jbWdldAkJPSBrZXlzcGFuX3Rpb2NtZ2V0LApAQCAtNTkyLDEwICs1ODQsNiBAQAogCS5jbG9zZQkJCT0ga2V5c3Bhbl9jbG9zZSwKIAkud3JpdGUJCQk9IGtleXNwYW5fd3JpdGUsCiAJLndyaXRlX3Jvb20JCT0ga2V5c3Bhbl93cml0ZV9yb29tLAotCS5jaGFyc19pbl9idWZmZXIJPSBrZXlzcGFuX2NoYXJzX2luX2J1ZmZlciwKLQkudGhyb3R0bGUJCT0ga2V5c3Bhbl9yeF90aHJvdHRsZSwKLQkudW50aHJvdHRsZQkJPSBrZXlzcGFuX3J4X3VudGhyb3R0bGUsCi0JLmlvY3RsCQkJPSBrZXlzcGFuX2lvY3RsLAogCS5zZXRfdGVybWlvcwkJPSBrZXlzcGFuX3NldF90ZXJtaW9zLAogCS5icmVha19jdGwJCT0ga2V5c3Bhbl9icmVha19jdGwsCiAJLnRpb2NtZ2V0CQk9IGtleXNwYW5fdGlvY21nZXQsCkBAIC02MTYsMTAgKzYwNCw2IEBACiAJLmNsb3NlCQkJPSBrZXlzcGFuX2Nsb3NlLAogCS53cml0ZQkJCT0ga2V5c3Bhbl93cml0ZSwKIAkud3JpdGVfcm9vbQkJPSBrZXlzcGFuX3dyaXRlX3Jvb20sCi0JLmNoYXJzX2luX2J1ZmZlcgk9IGtleXNwYW5fY2hhcnNfaW5fYnVmZmVyLAotCS50aHJvdHRsZQkJPSBrZXlzcGFuX3J4X3Rocm90dGxlLAotCS51bnRocm90dGxlCQk9IGtleXNwYW5fcnhfdW50aHJvdHRsZSwKLQkuaW9jdGwJCQk9IGtleXNwYW5faW9jdGwsCiAJLnNldF90ZXJtaW9zCQk9IGtleXNwYW5fc2V0X3Rlcm1pb3MsCiAJLmJyZWFrX2N0bAkJPSBrZXlzcGFuX2JyZWFrX2N0bCwKIAkudGlvY21nZXQJCT0ga2V5c3Bhbl90aW9jbWdldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKaW5kZXggNjQ0YTFlYS4uMDQwMDQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTEwLDggKzEwLDkgQEAKICAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgotICogCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcworICogZHJpdmVyCisgKgogICogKDA5LzA3LzIwMDEpIGdraAogICoJY2xlYW5lZCB1cCB0aGUgWGlyY29tIHN1cHBvcnQuICBBZGRlZCBpZHMgZm9yIEVudHJlZ3JhIGRldmljZSB3aGljaCBpcwogICoJdGhlIHNhbWUgYXMgdGhlIFhpcmNvbSBkZXZpY2UuICBFbmFibGVkIHRoZSBjb2RlIHRvIGJlIGNvbXBpbGVkIGZvcgpAQCAtMjEsMjMgKzIyLDI0IEBACiAgKglzdXBwb3J0IGZvciBYaXJjb20gUEdTREI5CiAgKgogICogKDA1LzMxLzIwMDEpIGdraAotICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YKKyAqCXByb2JsZW1zLgogICoKICAqICgwNC8wOC8yMDAxKSBnYgogICoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KLSAqIAorICoKICAqICgxMS8wMS8yMDAwKSBBZGFtIEouIFJpY2h0ZXIKICAqCXVzYl9kZXZpY2VfaWQgdGFibGUgc3VwcG9ydAotICogCisgKgogICogKDEwLzA1LzIwMDApIGdraAogICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgogICoJY29yZSBuZWVkcyBpdC4KLSAqIAorICoKICAqICgwOC8yOC8yMDAwKSBna2gKICAqCUFkZGVkIGxvY2tzIGZvciBTTVAgc2FmZW5lc3MuCi0gKglGaXhlZCBNT0RfSU5DIGFuZCBNT0RfREVDIGxvZ2ljIGFuZCB0aGUgYWJpbGl0eSB0byBvcGVuIGEgcG9ydCBtb3JlIAorICoJRml4ZWQgTU9EX0lOQyBhbmQgTU9EX0RFQyBsb2dpYyBhbmQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIHBvcnQgbW9yZQogICoJdGhhbiBvbmNlLgotICogCisgKgogICogKDA3LzIwLzIwMDApIGJvcmNoZXJzCiAgKgktIGtleXNwYW5fcGRhX3dyaXRlIG5vIGxvbmdlciBzbGVlcHMgaWYgaXQgaXMgY2FsbGVkIG9uIGludGVycnVwdCB0aW1lOwogICoJICBQUFAgYW5kIHRoZSBsaW5lIGRpc2NpcGxpbmUgd2l0aCBzdHR5IGVjaG8gb24gY2FuIGNhbGwgd3JpdGUgb24KQEAgLTU1LDE0ICs1NywxNCBAQAogICoJICB0aGFuIGRvbmUgZGlyZWN0bHkgZnJvbSB0aGUgY2FsbGJhY2sgdG8gYXZvaWQgdGhlIHJhY2UgaW4gd3JpdGVfY2hhbgogICoJLSBrZXlzcGFuX3BkYV9jaGFyc19pbl9idWZmZXIgYWxzbyBpbmRpY2F0ZXMgaXRzIGJ1ZmZlciBpcyBmdWxsIGlmIHRoZQogICoJICB1cmIgc3RhdHVzIGlzIC1FSU5QUk9HUkVTUywgbWVhbmluZyBpdCBjYW5ub3Qgd3JpdGUgYXQgdGhlIG1vbWVudAotICogICAgICAKKyAqCiAgKiAoMDcvMTkvMjAwMCkgZ2toCiAgKglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKICAqCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCiAgKgogICogKDAzLzI2LzIwMDApIGdraAogICoJU3BsaXQgZHJpdmVyIHVwIGludG8gZGV2aWNlIHNwZWNpZmljIHBpZWNlcy4KLSAqIAorICoKICAqLwogCiAKQEAgLTc4LDcgKzgwLDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2loZXguaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAKQEAgLTEzNSw3ICsxMzcsNyBAQAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrZXlzcGFuX3BkYV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJImtleXNwYW5fcGRhIiwKQEAgLTE1OSw5ICsxNjEsOSBAQAogCiAjaWZkZWYgWElSQ09NCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfZmFrZV94aXJjb20gW10gPSB7Ci0gICAgICAgIHsgVVNCX0RFVklDRShYSVJDT01fVkVORE9SX0lELCBYSVJDT01fRkFLRV9JRCkgfSwKLSAgICAgICAgeyBVU0JfREVWSUNFKEVOVFJFR1JBX1ZFTkRPUl9JRCwgRU5UUkVHUkFfRkFLRV9JRCkgfSwKLSAgICAgICAgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJeyBVU0JfREVWSUNFKFhJUkNPTV9WRU5ET1JfSUQsIFhJUkNPTV9GQUtFX0lEKSB9LAorCXsgVVNCX0RFVklDRShFTlRSRUdSQV9WRU5ET1JfSUQsIEVOVFJFR1JBX0ZBS0VfSUQpIH0sCisJeyB9CiB9OwogI2VuZGlmCiAKQEAgLTE3MSw3ICsxNzMsNyBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUsIHdha2V1cF93b3JrKTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gcHJpdi0+cG9ydDsKIAotCXR0eV93YWtldXAocG9ydC0+dHR5KTsKKwl0dHlfd2FrZXVwKHBvcnQtPnBvcnQudHR5KTsKIH0KIAogc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcmVxdWVzdF91bnRocm90dGxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTE4NCw3ICsxODYsNyBAQAogCWRiZygiIHJlcXVlc3RfdW50aHJvdHRsZSIpOwogCS8qIGFzayB0aGUgZGV2aWNlIHRvIHRlbGwgdXMgd2hlbiB0aGUgdHggYnVmZmVyIGJlY29tZXMKIAkgICBzdWZmaWNpZW50bHkgZW1wdHkgKi8KLQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIAorCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKIAkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCQkgNywgLyogcmVxdWVzdF91bnRocm90dGxlICovCiAJCQkJIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UKQEAgLTE5NSwxNyArMTk3LDE2IEBACiAJCQkJIDAsCiAJCQkJIDIwMDApOwogCWlmIChyZXN1bHQgPCAwKQotCQlkYmcoIiVzIC0gZXJyb3IgJWQgZnJvbSB1c2JfY29udHJvbF9tc2ciLCAKKwkJZGJnKCIlcyAtIGVycm9yICVkIGZyb20gdXNiX2NvbnRyb2xfbXNnIiwKIAkJICAgIF9fZnVuY19fLCByZXN1bHQpOwogfQogCiAKLXN0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3J4X2ludGVycnVwdCAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcnhfaW50ZXJydXB0KHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwotICAgICAgIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JaW50IGk7CiAJaW50IHJldHZhbDsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAJc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgKnByaXY7CkBAIC0yMjgsMTQgKzIyOSwxMyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0gCS8qIHNlZSBpZiB0aGUgbWVzc2FnZSBpcyBkYXRhIG9yIGEgc3RhdHVzIGludGVycnVwdCAqLworCS8qIHNlZSBpZiB0aGUgbWVzc2FnZSBpcyBkYXRhIG9yIGEgc3RhdHVzIGludGVycnVwdCAqLwogCXN3aXRjaCAoZGF0YVswXSkgewogCWNhc2UgMDoKIAkJLyogcmVzdCBvZiBtZXNzYWdlIGlzIHJ4IGRhdGEgKi8KIAkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJZm9yIChpID0gMTsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgewotCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7Ci0JCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSArIDEsCisJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggLSAxKTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCX0KIAkJYnJlYWs7CkBAIC0yNTksMTQgKzI1OSwxNCBAQAogCX0KIAogZXhpdDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCiAJCSAgICAgX19mdW5jX18sIHJldHZhbCk7CiB9CiAKIAotc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcnhfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9yeF90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCS8qIHN0b3AgcmVjZWl2aW5nIGNoYXJhY3RlcnMuIFdlIGp1c3QgdHVybiBvZmYgdGhlIFVSQiByZXF1ZXN0LCBhbmQKIAkgICBsZXQgY2hhcnMgcGlsZSB1cCBpbiB0aGUgZGV2aWNlLiBJZiB3ZSdyZSBkb2luZyBoYXJkd2FyZQpAQCAtMjc0LDE0ICsyNzQsMTUgQEAKIAkgICBmaWxscyB1cC4gSWYgd2UncmUgZG9pbmcgWE9OL1hPRkYsIHRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8KIAkgICBzZW5kIGFuIFhPRkYsIGFsdGhvdWdoIGl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gZm9pc3QgdGhhdCBvZmYKIAkgICB1cG9uIHRoZSBkZXZpY2UgdG9vLiAqLwotCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJZGJnKCJrZXlzcGFuX3BkYV9yeF90aHJvdHRsZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKIAl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CiB9CiAKIAotc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcnhfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3J4X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAkvKiBqdXN0IHJlc3RhcnQgdGhlIHJlY2VpdmUgaW50ZXJydXB0IFVSQiAqLwogCWRiZygia2V5c3Bhbl9wZGFfcnhfdW50aHJvdHRsZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKQEAgLTI5MSwzMiArMjkyLDUyIEBACiB9CiAKIAotc3RhdGljIHNwZWVkX3Qga2V5c3Bhbl9wZGFfc2V0YmF1ZCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgc3BlZWRfdCBiYXVkKQorc3RhdGljIHNwZWVkX3Qga2V5c3Bhbl9wZGFfc2V0YmF1ZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBzcGVlZF90IGJhdWQpCiB7CiAJaW50IHJjOwogCWludCBiaW5kZXg7CiAKLQlzd2l0Y2goYmF1ZCkgewotCQljYXNlIDExMDogYmluZGV4ID0gMDsgYnJlYWs7Ci0JCWNhc2UgMzAwOiBiaW5kZXggPSAxOyBicmVhazsKLQkJY2FzZSAxMjAwOiBiaW5kZXggPSAyOyBicmVhazsKLQkJY2FzZSAyNDAwOiBiaW5kZXggPSAzOyBicmVhazsKLQkJY2FzZSA0ODAwOiBiaW5kZXggPSA0OyBicmVhazsKLQkJY2FzZSA5NjAwOiBiaW5kZXggPSA1OyBicmVhazsKLQkJY2FzZSAxOTIwMDogYmluZGV4ID0gNjsgYnJlYWs7Ci0JCWNhc2UgMzg0MDA6IGJpbmRleCA9IDc7IGJyZWFrOwotCQljYXNlIDU3NjAwOiBiaW5kZXggPSA4OyBicmVhazsKLQkJY2FzZSAxMTUyMDA6IGJpbmRleCA9IDk7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJYmluZGV4ID0gNTsJLyogRGVmYXVsdCB0byA5NjAwICovCi0JCQliYXVkID0gOTYwMDsKKwlzd2l0Y2ggKGJhdWQpIHsKKwljYXNlIDExMDoKKwkJYmluZGV4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAzMDA6CisJCWJpbmRleCA9IDE7CisJCWJyZWFrOworCWNhc2UgMTIwMDoKKwkJYmluZGV4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSAyNDAwOgorCQliaW5kZXggPSAzOworCQlicmVhazsKKwljYXNlIDQ4MDA6CisJCWJpbmRleCA9IDQ7CisJCWJyZWFrOworCWNhc2UgOTYwMDoKKwkJYmluZGV4ID0gNTsKKwkJYnJlYWs7CisJY2FzZSAxOTIwMDoKKwkJYmluZGV4ID0gNjsKKwkJYnJlYWs7CisJY2FzZSAzODQwMDoKKwkJYmluZGV4ID0gNzsKKwkJYnJlYWs7CisJY2FzZSA1NzYwMDoKKwkJYmluZGV4ID0gODsKKwkJYnJlYWs7CisJY2FzZSAxMTUyMDA6CisJCWJpbmRleCA9IDk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJpbmRleCA9IDU7CS8qIERlZmF1bHQgdG8gOTYwMCAqLworCQliYXVkID0gOTYwMDsKIAl9CiAKIAkvKiByYXRoZXIgdGhhbiBmaWd1cmUgb3V0IGhvdyB0byBzbGVlcCB3aGlsZSB3YWl0aW5nIGZvciB0aGlzCiAJICAgdG8gY29tcGxldGUsIEkganVzdCB1c2UgdGhlICJsZWdhY3kiIEFQSS4gKi8KIAlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCSAgICAgMCwgLyogc2V0IGJhdWQgKi8KLQkJCSAgICAgVVNCX1RZUEVfVkVORE9SIAorCQkJICAgICBVU0JfVFlQRV9WRU5ET1IKIAkJCSAgICAgfCBVU0JfUkVDSVBfSU5URVJGQUNFCiAJCQkgICAgIHwgVVNCX0RJUl9PVVQsIC8qIHR5cGUgKi8KIAkJCSAgICAgYmluZGV4LCAvKiB2YWx1ZSAqLwpAQCAtMzMwLDggKzM1MSw5IEBACiB9CiAKIAotc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfYnJlYWtfY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHZhbHVlOwogCWludCByZXN1bHQ7CkBAIC0zNDEsMTEgKzM2MywxMSBAQAogCWVsc2UKIAkJdmFsdWUgPSAwOyAvKiBjbGVhciBicmVhayAqLwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCQk0LCAvKiBzZXQgYnJlYWsgKi8KLQkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCi0JCQkJdmFsdWUsIDAsIE5VTEwsIDAsIDIwMDApOworCQkJNCwgLyogc2V0IGJyZWFrICovCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQl2YWx1ZSwgMCwgTlVMTCwgMCwgMjAwMCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRiZygiJXMgLSBlcnJvciAlZCBmcm9tIHVzYl9jb250cm9sX21zZyIsIAorCQlkYmcoIiVzIC0gZXJyb3IgJWQgZnJvbSB1c2JfY29udHJvbF9tc2ciLAogCQkgICAgX19mdW5jX18sIHJlc3VsdCk7CiAJLyogdGhlcmUgaXMgc29tZXRoaW5nIGZ1bmt5IGFib3V0IHRoaXMuLiB0aGUgVENTQlJLIHRoYXQgJ2N1JyBwZXJmb3JtcwogCSAgIG91Z2h0IHRvIHRyYW5zbGF0ZSBpbnRvIGEgYnJlYWtfY3RsKC0xKSxicmVha19jdGwoMCkgcGFpciBIWi80CkBAIC0zNTQsOCArMzc2LDggQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCi0JCQkJICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXNwZWVkX3Qgc3BlZWQ7CkBAIC0zODAsNyArNDAyLDcgQEAKIAogCSAgIEZvciBub3csIGp1c3QgZG8gYmF1ZC4gKi8KIAotCXNwZWVkID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KTsKKwlzcGVlZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAJc3BlZWQgPSBrZXlzcGFuX3BkYV9zZXRiYXVkKHNlcmlhbCwgc3BlZWQpOwogCiAJaWYgKHNwZWVkID09IDApIHsKQEAgLTM5MCw4ICs0MTIsOCBAQAogCX0KIAkvKiBPbmx5IHNwZWVkIGNhbiBjaGFuZ2Ugc28gY29weSB0aGUgb2xkIGgvdyBwYXJhbWV0ZXJzCiAJICAgdGhlbiBlbmNvZGUgdGhlIG5ldyBzcGVlZCAqLwotCXR0eV90ZXJtaW9zX2NvcHlfaHcocG9ydC0+dHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7Ci0JdHR5X2VuY29kZV9iYXVkX3JhdGUocG9ydC0+dHR5LCBzcGVlZCwgc3BlZWQpOworCXR0eV90ZXJtaW9zX2NvcHlfaHcodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7CisJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBzcGVlZCwgc3BlZWQpOwogfQogCiAKQEAgLTQwOCw3ICs0MzAsNyBAQAogCQkJICAgICAzLCAvKiBnZXQgcGlucyAqLwogCQkJICAgICBVU0JfVFlQRV9WRU5ET1J8VVNCX1JFQ0lQX0lOVEVSRkFDRXxVU0JfRElSX0lOLAogCQkJICAgICAwLCAwLCAmZGF0YSwgMSwgMjAwMCk7Ci0JaWYgKHJjID4gMCkKKwlpZiAocmMgPj0gMCkKIAkJKnZhbHVlID0gZGF0YTsKIAlyZXR1cm4gcmM7CiB9CkBAIC00MjUsOCArNDQ3LDkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQga2V5c3Bhbl9wZGFfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJjOwogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwpAQCAtNDQ1LDkgKzQ2OCwxMCBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIGludCBrZXlzcGFuX3BkYV90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJjOwogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwpAQCAtNDY5LDIzICs0OTMsOCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBrZXlzcGFuX3BkYV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFRJT0NNSVdBSVQ6Ci0JCS8qIHdhaXQgZm9yIGFueSBvZiB0aGUgNCBtb2RlbSBpbnB1dHMgKERDRCxSSSxEU1IsQ1RTKSovCi0JCS8qIFRPRE8gKi8KLQljYXNlIFRJT0NHSUNPVU5UOgotCQkvKiByZXR1cm4gY291bnQgb2YgbW9kZW1saW5lIHRyYW5zaXRpb25zICovCi0JCXJldHVybiAwOyAvKiBUT0RPICovCi0JfQotCQotCXJldHVybiAtRU5PSU9DVExDTUQ7Ci19Ci0KLXN0YXRpYyBpbnQga2V5c3Bhbl9wZGFfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCi0JCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorc3RhdGljIGludCBrZXlzcGFuX3BkYV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJlcXVlc3RfdW50aHJvdHRsZSA9IDA7CkBAIC01MDEsMTAgKzUxMCwxMCBAQAogCSAgIHNlbGVjdCgpIG9yIHBvbGwoKSB0b28pIHVudGlsIHdlIHJlY2VpdmUgdGhhdCB1bnRocm90dGxlIGludGVycnVwdC4KIAkgICBCbG9jayBpZiB3ZSBjYW4ndCB3cml0ZSBhbnl0aGluZyBhdCBhbGwsIG90aGVyd2lzZSB3cml0ZSBhcyBtdWNoIGFzCiAJICAgd2UgY2FuLiAqLwotCWRiZygia2V5c3Bhbl9wZGFfd3JpdGUoJWQpIixjb3VudCk7CisJZGJnKCJrZXlzcGFuX3BkYV93cml0ZSglZCkiLCBjb3VudCk7CiAJaWYgKGNvdW50ID09IDApIHsKIAkJZGJnKCIgd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIik7Ci0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCX0KIAogCS8qIHdlIG1pZ2h0IGJsb2NrIGJlY2F1c2Ugb2Y6CkBAIC01MzEsNyArNTQwLDcgQEAKIAkgICBzY2hlZHVsZXIgdGltZSwgc2luY2UgdXNiX2NvbnRyb2xfbXNnKCkgc2xlZXBzLiAqLwogCWlmIChjb3VudCA+IHByaXYtPnR4X3Jvb20gJiYgIWluX2ludGVycnVwdCgpKSB7CiAJCXVuc2lnbmVkIGNoYXIgcm9vbTsKLQkJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIAorCQlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKIAkJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQkJICAgICA2LCAvKiB3cml0ZV9yb29tICovCiAJCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFCkBAIC01NjIsNyArNTcxLDcgQEAKIAogCWlmIChjb3VudCkgewogCQkvKiBub3cgdHJhbnNmZXIgZGF0YSAqLwotCQltZW1jcHkgKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYsIGNvdW50KTsKKwkJbWVtY3B5KHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYsIGNvdW50KTsKIAkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwogCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKIApAQCAtNTc0LDggKzU4Myw3IEBACiAJCQlkYmcoIiB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQiKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQkvKiBUaGVyZSB3YXNuJ3QgYW55IHJvb20gbGVmdCwgc28gd2UgYXJlIHRocm90dGxlZCB1bnRpbAogCQkgICB0aGUgYnVmZmVyIGVtcHRpZXMgYSBiaXQgKi8KIAkJcmVxdWVzdF91bnRocm90dGxlID0gMTsKQEAgLTU5NCw3ICs2MDIsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgKnByaXY7CkBAIC02MDcsMjIgKzYxNSwyMSBAQAogfQogCiAKLXN0YXRpYyBpbnQga2V5c3Bhbl9wZGFfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OwotCiAJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQogCS8qIHVzZWQgYnkgbl90dHkuYyBmb3IgcHJvY2Vzc2luZyBvZiB0YWJzIGFuZCBzdWNoLiBHaXZpbmcgaXQgb3VyCiAJICAgY29uc2VydmF0aXZlIGd1ZXNzIGlzIHByb2JhYmx5IGdvb2QgZW5vdWdoLCBidXQgbmVlZHMgdGVzdGluZyBieQogCSAgIHJ1bm5pbmcgYSBjb25zb2xlIHRocm91Z2ggdGhlIGRldmljZS4gKi8KLQotCXJldHVybiAocHJpdi0+dHhfcm9vbSk7CisJcmV0dXJuIHByaXYtPnR4X3Jvb207CiB9CiAKIAotc3RhdGljIGludCBrZXlzcGFuX3BkYV9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CkBAIC02NDAsNyArNjQ3LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGtleXNwYW5fcGRhX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBrZXlzcGFuX3BkYV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXVuc2lnbmVkIGNoYXIgcm9vbTsKQEAgLTY3Miw4ICs2ODAsOCBAQAogCiAJLyogdGhlIG5vcm1hbCBzZXJpYWwgZGV2aWNlIHNlZW1zIHRvIGFsd2F5cyB0dXJuIG9uIERUUiBhbmQgUlRTIGhlcmUsCiAJICAgc28gZG8gdGhlIHNhbWUgKi8KLQlpZiAocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpCi0JCWtleXNwYW5fcGRhX3NldF9tb2RlbV9pbmZvKHNlcmlhbCwgKDE8PDcpIHwgKDE8PDIpICk7CisJaWYgKHR0eSAmJiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpKQorCQlrZXlzcGFuX3BkYV9zZXRfbW9kZW1faW5mbyhzZXJpYWwsICgxPDw3KSB8ICgxPDwyKSk7CiAJZWxzZQogCQlrZXlzcGFuX3BkYV9zZXRfbW9kZW1faW5mbyhzZXJpYWwsIDApOwogCkBAIC02OTAsMTMgKzY5OCwxNSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGtleXNwYW5fcGRhX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAKIAlpZiAoc2VyaWFsLT5kZXYpIHsKLQkJLyogdGhlIG5vcm1hbCBzZXJpYWwgZGV2aWNlIHNlZW1zIHRvIGFsd2F5cyBzaHV0IG9mZiBEVFIgYW5kIFJUUyBub3cgKi8KLQkJaWYgKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKQorCQkvKiB0aGUgbm9ybWFsIHNlcmlhbCBkZXZpY2Ugc2VlbXMgdG8gYWx3YXlzIHNodXQKKwkJICAgb2ZmIERUUiBhbmQgUlRTIG5vdyAqLworCQlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpCiAJCQlrZXlzcGFuX3BkYV9zZXRfbW9kZW1faW5mbyhzZXJpYWwsIDApOwogCiAJCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWRzIGFuZCB3cml0ZXMgKi8KQEAgLTcwNyw3ICs3MTcsNyBAQAogCiAKIC8qIGRvd25sb2FkIHRoZSBmaXJtd2FyZSB0byBhICJmYWtlIiBkZXZpY2UgKHByZS1yZW51bWVyYXRpb24pICovCi1zdGF0aWMgaW50IGtleXNwYW5fcGRhX2Zha2Vfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfZmFrZV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IHJlc3BvbnNlOwogCWNvbnN0IGNoYXIgKmZ3X25hbWU7CkBAIC03NTYsMTAgKzc2NiwxMCBAQAogCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0KHNlcmlhbCwgMCk7CiAKIAkvKiB3ZSB3YW50IHRoaXMgZGV2aWNlIHRvIGZhaWwgdG8gaGF2ZSBhIGRyaXZlciBhc3NpZ25lZCB0byBpdC4gKi8KLQlyZXR1cm4gKDEpOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGtleXNwYW5fcGRhX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAogCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OwpAQCAtNzY5LDIwICs3NzksMjAgQEAKIAogCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKLQkJcmV0dXJuICgxKTsgLyogZXJyb3IgKi8KKwkJcmV0dXJuIDE7IC8qIGVycm9yICovCiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0WzBdLT53cml0ZV93YWl0KTsKIAlJTklUX1dPUksoJnByaXYtPndha2V1cF93b3JrLCBrZXlzcGFuX3BkYV93YWtldXBfd3JpdGUpOwogCUlOSVRfV09SSygmcHJpdi0+dW50aHJvdHRsZV93b3JrLCBrZXlzcGFuX3BkYV9yZXF1ZXN0X3VudGhyb3R0bGUpOwogCXByaXYtPnNlcmlhbCA9IHNlcmlhbDsKIAlwcml2LT5wb3J0ID0gc2VyaWFsLT5wb3J0WzBdOwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlkYmcoIiVzIiwgX19mdW5jX18pOwotCQorCiAJa2ZyZWUodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSkpOwogfQogCkBAIC04MzIsNyArODQyLDYgQEAKIAkuY2hhcnNfaW5fYnVmZmVyID0Ja2V5c3Bhbl9wZGFfY2hhcnNfaW5fYnVmZmVyLAogCS50aHJvdHRsZSA9CQlrZXlzcGFuX3BkYV9yeF90aHJvdHRsZSwKIAkudW50aHJvdHRsZSA9CQlrZXlzcGFuX3BkYV9yeF91bnRocm90dGxlLAotCS5pb2N0bCA9CQlrZXlzcGFuX3BkYV9pb2N0bCwKIAkuc2V0X3Rlcm1pb3MgPQkJa2V5c3Bhbl9wZGFfc2V0X3Rlcm1pb3MsCiAJLmJyZWFrX2N0bCA9CQlrZXlzcGFuX3BkYV9icmVha19jdGwsCiAJLnRpb2NtZ2V0ID0JCWtleXNwYW5fcGRhX3Rpb2NtZ2V0LApAQCAtODQyLDcgKzg1MSw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgX19pbml0IGtleXNwYW5fcGRhX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBrZXlzcGFuX3BkYV9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZrZXlzcGFuX3BkYV9kZXZpY2UpOwpAQCAtODYzLDcgKzg3Miw3IEBACiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CiAJcmV0dXJuIDA7Ci1mYWlsZWRfdXNiX3JlZ2lzdGVyOgkKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CiAjaWZkZWYgWElSQ09NCiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ4aXJjb21fcGdzX2Zha2VfZGV2aWNlKTsKIGZhaWxlZF94aXJjb21fcmVnaXN0ZXI6CkBAIC04ODAsMTUgKzg4OSwxNSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBrZXlzcGFuX3BkYV9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGtleXNwYW5fcGRhX2V4aXQodm9pZCkKIHsKLQl1c2JfZGVyZWdpc3RlciAoJmtleXNwYW5fcGRhX2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma2V5c3Bhbl9wZGFfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3Rlcigma2V5c3Bhbl9wZGFfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtleXNwYW5fcGRhX2RldmljZSk7CiAjaWZkZWYgS0VZU1BBTgotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmtleXNwYW5fcGRhX2Zha2VfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtleXNwYW5fcGRhX2Zha2VfZGV2aWNlKTsKICNlbmRpZgogI2lmZGVmIFhJUkNPTQotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnhpcmNvbV9wZ3NfZmFrZV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmeGlyY29tX3Bnc19mYWtlX2RldmljZSk7CiAjZW5kaWYKIH0KIApAQCAtODk2LDggKzkwNSw4IEBACiBtb2R1bGVfaW5pdChrZXlzcGFuX3BkYV9pbml0KTsKIG1vZHVsZV9leGl0KGtleXNwYW5fcGRhX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwppbmRleCBmMzI4OTQ4Li5iODRkZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKQEAgLTE1LDEyICsxNSwxMiBAQAogICogTmVpdGhlciBQYWxtLCBub3IgdGhlaXIgY29udHJhY3RvciAoTUNDSSkgb3IgdGhlaXIgc3VwcGxpZXIgKEtMU0kpIHByb3ZpZGVkCiAgKiBpbmZvcm1hdGlvbiB0aGF0IHdhcyBub3QgYWxyZWFkeSBhdmFpbGFibGUuCiAgKgotICogSXQgc2VlbXMgdGhhdCBLTFNJIGJvdWdodCBzb21lIHNpbGljb24tZGVzaWduIGluZm9ybWF0aW9uIGZyb20gU2NhbkxvZ2ljLCAKKyAqIEl0IHNlZW1zIHRoYXQgS0xTSSBib3VnaHQgc29tZSBzaWxpY29uLWRlc2lnbiBpbmZvcm1hdGlvbiBmcm9tIFNjYW5Mb2dpYywKICAqIHdob3NlIFNMMTFSIHByb2Nlc3NvciBpcyBhdCB0aGUgY29yZSBvZiB0aGUgS0w1S1VTQiBjaGlwc2V0IGZyb20gS0xTSS4KICAqIEtMU0kgaGFzIGZpcm13YXJlIGF2YWlsYWJsZSBmb3IgdGhlaXIgZGV2aWNlczsgaXQgaXMgcHJvYmFibGUgdGhhdCB0aGUKICAqIGZpcm13YXJlIGRpZmZlcnMgZnJvbSB0aGF0IHVzZWQgYnkgS0xTSSBpbiB0aGVpciBwcm9kdWN0cy4gSWYgeW91IGhhdmUgYW4KLSAqIG9yaWdpbmFsIEtMU0kgZGV2aWNlIGFuZCBjYW4gcHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIG9uIGl0LCBJIHdvdWxkIGJlIAotICogbW9zdCBpbnRlcmVzdGVkIGluIGFkZGluZyBzdXBwb3J0IGZvciBpdCBoZXJlLiBJZiB5b3UgaGF2ZSBhbnkgaW5mb3JtYXRpb24gCisgKiBvcmlnaW5hbCBLTFNJIGRldmljZSBhbmQgY2FuIHByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBvbiBpdCwgSSB3b3VsZCBiZQorICogbW9zdCBpbnRlcmVzdGVkIGluIGFkZGluZyBzdXBwb3J0IGZvciBpdCBoZXJlLiBJZiB5b3UgaGF2ZSBhbnkgaW5mb3JtYXRpb24KICAqIG9uIHRoZSBwcm90b2NvbCB1c2VkIChvciBmaW5kIGVycm9ycyBpbiBteSByZXZlcnNlLWVuZ2luZWVyZWQgc3R1ZmYpLCBwbGVhc2UKICAqIGxldCBtZSBrbm93LgogICoKQEAgLTQwLDcgKzQwLDcgQEAKICAqICAgMC4yICAtIFRJT0NNR0VUIHdvcmtzLCBzbyBhdXRvcGlsb3QoMSkgY2FuIGJlIHVzZWQhCiAgKiAgIDAuMSAgLSBjYW4gYmUgdXNlZCB0byB0byBwaWxvdC14ZmVyIC1wIC9kZXYvdHR5VVNCMCAtbAogICoKLSAqICAgVGhlIGRyaXZlciBza2VsZXRvbiBpcyBtYWlubHkgYmFzZWQgb24gbWN0X3UyMzIuYyBhbmQgdmFyaW91cyBvdGhlciAKKyAqICAgVGhlIGRyaXZlciBza2VsZXRvbiBpcyBtYWlubHkgYmFzZWQgb24gbWN0X3UyMzIuYyBhbmQgdmFyaW91cyBvdGhlcgogICogICBwaWVjZXMgb2YgY29kZSBzaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB0aGUgZHJpdmVycy91c2Ivc2VyaWFsLyBkaXJlY3RvcnkuCiAgKi8KIApAQCAtNTMsNyArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CkBAIC03MiwzMyArNzIsMjUgQEAKIC8qCiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzCiAgKi8KLXN0YXRpYyBpbnQgIGtsc2lfMTA1X3N0YXJ0dXAJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIHZvaWQga2xzaV8xMDVfc2h1dGRvd24JICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCAga2xzaV8xMDVfb3BlbgkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBrbHNpXzEwNV9jbG9zZQkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgaW50ICBrbHNpXzEwNV93cml0ZQkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCi0JCQkJCSAgaW50IGNvdW50KTsKLXN0YXRpYyB2b2lkIGtsc2lfMTA1X3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgaW50ICBrbHNpXzEwNV9jaGFyc19pbl9idWZmZXIgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgIGtsc2lfMTA1X3dyaXRlX3Jvb20gICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotCi1zdGF0aWMgdm9pZCBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgIChzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQga2xzaV8xMDVfc2V0X3Rlcm1pb3MgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7Ci1zdGF0aWMgdm9pZCBrbHNpXzEwNV90aHJvdHRsZQkJIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIGtsc2lfMTA1X3VudGhyb3R0bGUJCSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci0vKgotc3RhdGljIHZvaWQga2xzaV8xMDVfYnJlYWtfY3RsCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkgIGludCBicmVha19zdGF0ZSApOwotICovCi1zdGF0aWMgaW50ICBrbHNpXzEwNV90aW9jbWdldAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgaW50ICBrbHNpXzEwNV90aW9jbXNldAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwKLQkJCQkJICB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIGludCAga2xzaV8xMDVfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAga2xzaV8xMDVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQga2xzaV8xMDVfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIHZvaWQga2xzaV8xMDVfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCAga2xzaV8xMDVfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIGludCAga2xzaV8xMDVfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQga2xzaV8xMDVfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQga2xzaV8xMDVfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKIAogLyoKICAqIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgS0xTSSBjb252ZXJ0ZXJzLgpAQCAtMTA5LDcgKzEwMSw3IEBACiAJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2w1a3VzYjEwNWRfZHJpdmVyID0gewogCS5uYW1lID0JCSJrbDVrdXNiMTA1ZCIsCkBAIC0xMzQsNyArMTI2LDcgQEAKIAkud3JpdGVfYnVsa19jYWxsYmFjayA9IGtsc2lfMTA1X3dyaXRlX2J1bGtfY2FsbGJhY2ssCiAJLmNoYXJzX2luX2J1ZmZlciA9ICAga2xzaV8xMDVfY2hhcnNfaW5fYnVmZmVyLAogCS53cml0ZV9yb29tID0gICAgICAgIGtsc2lfMTA1X3dyaXRlX3Jvb20sCi0JLnJlYWRfYnVsa19jYWxsYmFjayA9a2xzaV8xMDVfcmVhZF9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPSBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2ssCiAJLnNldF90ZXJtaW9zID0JICAgICBrbHNpXzEwNV9zZXRfdGVybWlvcywKIAkvKi5icmVha19jdGwgPQkgICAgIGtsc2lfMTA1X2JyZWFrX2N0bCwqLwogCS50aW9jbWdldCA9ICAgICAgICAgIGtsc2lfMTA1X3Rpb2NtZ2V0LApAQCAtMTYxLDcgKzE1Myw3IEBACiAJc3RydWN0IGt0ZXJtaW9zCQkJdGVybWlvczsKIAl1bnNpZ25lZCBsb25nCQkJbGluZV9zdGF0ZTsgLyogbW9kZW0gbGluZSBzZXR0aW5ncyAqLwogCS8qIHdyaXRlIHBvb2wgKi8KLQlzdHJ1Y3QgdXJiICoJCQl3cml0ZV91cmJfcG9vbFtOVU1fVVJCU107CisJc3RydWN0IHVyYgkJCSp3cml0ZV91cmJfcG9vbFtOVU1fVVJCU107CiAJc3BpbmxvY2tfdAkJCWxvY2s7CiAJdW5zaWduZWQgbG9uZwkJCWJ5dGVzX2luOwogCXVuc2lnbmVkIGxvbmcJCQlieXRlc19vdXQ7CkBAIC0xODAsMTUgKzE3MiwxNSBAQAogewogCWludCByYzsKIAotICAgICAgICByYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKLQkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKLQkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX1NFVF9EQVRBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCQkgICAgIDAsIC8qIHZhbHVlICovCi0JCQkgICAgIDAsIC8qIGluZGV4ICovCi0JCQkgICAgIHNldHRpbmdzLAotCQkJICAgICBzaXplb2Yoc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MpLAotCQkJICAgICBLTFNJX1RJTUVPVVQpOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCUtMNUtVU0IxMDVBX1NJT19TRVRfREFUQSwKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTAsIC8qIHZhbHVlICovCisJCQkwLCAvKiBpbmRleCAqLworCQkJc2V0dGluZ3MsCisJCQlzaXplb2Yoc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MpLAorCQkJS0xTSV9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQogCQllcnIoIkNoYW5nZSBwb3J0IHNldHRpbmdzIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CiAJaW5mbygiJXMgLSAlZCBieXRlIGJsb2NrLCBiYXVkcmF0ZSAleCwgZGF0YWJpdHMgJWQsIHUxICVkLCB1MiAlZCIsCkBAIC0xOTYsNyArMTg4LDcgQEAKIAkgICAgc2V0dGluZ3MtPnBrdGxlbiwKIAkgICAgc2V0dGluZ3MtPmJhdWRyYXRlLCBzZXR0aW5ncy0+ZGF0YWJpdHMsCiAJICAgIHNldHRpbmdzLT51bmtub3duMSwgc2V0dGluZ3MtPnVua25vd24yKTsKLSAgICAgICAgcmV0dXJuIHJjOworCXJldHVybiByYzsKIH0gLyoga2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MgKi8KIAogLyogdHJhbnNsYXRlIGEgMTYtYml0IHN0YXR1cyB2YWx1ZSBmcm9tIHRoZSBkZXZpY2UgdG8gbGludXgncyBUSU8gYml0cyAqLwpAQCAtMjEwLDkgKzIwMiw5IEBACiAKIAlyZXR1cm4gcmVzOwogfQotLyogCisvKgogICogUmVhZCBsaW5lIGNvbnRyb2wgdmlhIHZlbmRvciBjb21tYW5kIGFuZCByZXR1cm4gcmVzdWx0IHRocm91Z2gKLSAqICpsaW5lX3N0YXRlX3AgCisgKiAqbGluZV9zdGF0ZV9wCiAgKi8KIC8qIEl0IHNlZW1zIHRoYXQgdGhlIHN0YXR1cyBidWZmZXIgaGFzIGFsd2F5cyBvbmx5IDIgYnl0ZXMgbGVuZ3RoICovCiAjZGVmaW5lIEtMU0lfU1RBVFVTQlVGX0xFTgkyCkBAIC0yMjAsMTQgKzIxMiwxNCBAQAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmxpbmVfc3RhdGVfcCkKIHsKIAlpbnQgcmM7Ci0JX191OCBzdGF0dXNfYnVmW0tMU0lfU1RBVFVTQlVGX0xFTl0gPSB7IC0xLC0xfTsKKwlfX3U4IHN0YXR1c19idWZbS0xTSV9TVEFUVVNCVUZfTEVOXSA9IHsgLTEsIC0xfTsKIAlfX3UxNiBzdGF0dXM7CiAKIAlpbmZvKCIlcyAtIHNlbmRpbmcgU0lPIFBvbGwgcmVxdWVzdCIsIF9fZnVuY19fKTsKLSAgICAgICAgcmMgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJcmMgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCiAJCQkgICAgIEtMNUtVU0IxMDVBX1NJT19QT0xMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOLAorCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOLAogCQkJICAgICAwLCAvKiB2YWx1ZSAqLwogCQkJICAgICAwLCAvKiBpbmRleCAqLwogCQkJICAgICBzdGF0dXNfYnVmLCBLTFNJX1NUQVRVU0JVRl9MRU4sCkBAIC0yMzYsMTUgKzIyOCwxNCBAQAogCWlmIChyYyA8IDApCiAJCWVycigiUmVhZGluZyBsaW5lIHN0YXR1cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOwogCWVsc2UgewotCQlzdGF0dXMgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilzdGF0dXNfYnVmKSk7CisJCXN0YXR1cyA9IGdldF91bmFsaWduZWRfbGUxNihzdGF0dXNfYnVmKTsKIAogCQlpbmZvKCIlcyAtIHJlYWQgc3RhdHVzICV4ICV4IiwgX19mdW5jX18sCiAJCSAgICAgc3RhdHVzX2J1ZlswXSwgc3RhdHVzX2J1ZlsxXSk7CiAKIAkJKmxpbmVfc3RhdGVfcCA9IGtsc2lfMTA1X3N0YXR1czJsaW5lc3RhdGUoc3RhdHVzKTsKIAl9Ci0KLSAgICAgICAgcmV0dXJuIHJjOworCXJldHVybiByYzsKIH0KIAogCkBAIC0yNTIsNyArMjQzLDcgQEAKICAqIERyaXZlcidzIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIGludCBrbHNpXzEwNV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBrbHNpXzEwNV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXY7CiAJaW50IGksIGo7CkBAIC0yNjIsNyArMjUzLDcgQEAKIAkgKi8KIAogCS8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCi0JZm9yIChpPTA7IGk8c2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSksCiAJCQkJCQkgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwcml2KSB7CkBAIC0yODMsOSArMjc0LDkgQEAKIAkJcHJpdi0+Ynl0ZXNfb3V0CSAgICA9IDA7CiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIHByaXYpOwogCi0JCXNwaW5fbG9ja19pbml0ICgmcHJpdi0+bG9jayk7Ci0JCWZvciAoaj0wOyBqPE5VTV9VUkJTOyBqKyspIHsKLQkJCXN0cnVjdCB1cmIqIHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9VUkJTOyBqKyspIHsKKwkJCXN0cnVjdCB1cmIgKnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAKIAkJCXByaXYtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOwogCQkJaWYgKHVyYiA9PSBOVUxMKSB7CkBAIC0yOTMsMTAgKzI4NCwxMSBAQAogCQkJCWdvdG8gZXJyX2NsZWFudXA7CiAJCQl9CiAKLQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyAoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAotCQkJCQkJCUdGUF9LRVJORUwpOworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJCWttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCQllcnIoIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19mdW5jX18pOworCQkJCWVycigiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CiAJCQkJZ290byBlcnJfY2xlYW51cDsKIAkJCX0KIAkJfQpAQCAtMzA0LDEzICsyOTYsMTMgQEAKIAkJLyogcHJpdi0+dGVybWlvcyBpcyBsZWZ0IHVuaW5pdGFsaXplZCB1bnRpbCBwb3J0IG9wZW5pbmcgKi8KIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0W2ldLT53cml0ZV93YWl0KTsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIAogZXJyX2NsZWFudXA6CiAJZm9yICg7IGkgPj0gMDsgaS0tKSB7CiAJCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKLQkJZm9yIChqPTA7IGogPCBOVU1fVVJCUzsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBOVU1fVVJCUzsgaisrKSB7CiAJCQlpZiAocHJpdi0+d3JpdGVfdXJiX3Bvb2xbal0pIHsKIAkJCQlrZnJlZShwcml2LT53cml0ZV91cmJfcG9vbFtqXS0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJCQl1c2JfZnJlZV91cmIocHJpdi0+d3JpdGVfdXJiX3Bvb2xbal0pOwpAQCAtMzIyLDIyICszMTQsMjMgQEAKIH0gLyoga2xzaV8xMDVfc3RhcnR1cCAqLwogCiAKLXN0YXRpYyB2b2lkIGtsc2lfMTA1X3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQga2xzaV8xMDVfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlpbnQgaTsKLQkKKwogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAkvKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICovCi0JZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7Ci0JCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPQorCQkJCXVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCWlmIChwcml2KSB7CiAJCQkvKiBraWxsIG91ciB3cml0ZSB1cmIgcG9vbCAqLwogCQkJaW50IGo7CiAJCQlzdHJ1Y3QgdXJiICoqd3JpdGVfdXJicyA9IHByaXYtPndyaXRlX3VyYl9wb29sOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCQkJZm9yIChqID0gMDsgaiA8IE5VTV9VUkJTOyBqKyspIHsKIAkJCQlpZiAod3JpdGVfdXJic1tqXSkgewpAQCAtMzQ5LDE5ICszNDIsMTggQEAKIAkJCQkJICogb29wc2VzLiAqLwogCQkJCQkvKiB1c2Jfa2lsbF91cmIod3JpdGVfdXJic1tqXSk7ICovCiAJCQkJCWtmcmVlKHdyaXRlX3VyYnNbal0tPnRyYW5zZmVyX2J1ZmZlcik7Ci0JCQkJCXVzYl9mcmVlX3VyYiAod3JpdGVfdXJic1tqXSk7CisJCQkJCXVzYl9mcmVlX3VyYih3cml0ZV91cmJzW2pdKTsKIAkJCQl9CiAJCQl9Ci0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJCWtmcmVlKHByaXYpOwogCQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CiAJCX0KIAl9CiB9IC8qIGtsc2lfMTA1X3NodXRkb3duICovCiAKLXN0YXRpYyBpbnQgIGtsc2lfMTA1X29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCAga2xzaV8xMDVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IHJldHZhbCA9IDA7CkBAIC0zNzUsMTEgKzM2NywxMSBAQAogCiAJLyogZm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzCiAJICogdGhlIGRhdGEgdGhyb3VnaAotCSAqIHBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOyAqLworCSAqIHR0eS0+bG93X2xhdGVuY3kgPSAxOyAqLwogCiAJLyogRG8gYSBkZWZpbmVkIHJlc3RhcnQ6CiAJICogU2V0IHVwIHNhbmUgZGVmYXVsdCBiYXVkIHJhdGUgYW5kIHNlbmQgdGhlICdSRUFEX09OJwotCSAqIHZlbmRvciBjb21tYW5kLiAKKwkgKiB2ZW5kb3IgY29tbWFuZC4KIAkgKiBGSVhNRTogc2V0IG1vZGVtIGxpbmUgY29udHJvbCAoaG93PykKIAkgKiBUaGVuIHJlYWQgdGhlIG1vZGVtIGxpbmUgY29udHJvbCBhbmQgc3RvcmUgdmFsdWVzIGluCiAJICogcHJpdi0+bGluZV9zdGF0ZS4KQEAgLTM5MCwyNCArMzgyLDI0IEBACiAJY2ZnLnVua25vd24xID0gMDsKIAljZmcudW5rbm93bjIgPSAxOwogCWtsc2lfMTA1X2NoZ19wb3J0X3NldHRpbmdzKHBvcnQsICZjZmcpOwotCQorCiAJLyogc2V0IHVwIHRlcm1pb3Mgc3RydWN0dXJlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+dGVybWlvcy5jX2lmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOwotCXByaXYtPnRlcm1pb3MuY19vZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19vZmxhZzsKLQlwcml2LT50ZXJtaW9zLmNfY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0JcHJpdi0+dGVybWlvcy5jX2xmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2xmbGFnOwotCWZvciAoaT0wOyBpPE5DQ1M7IGkrKykKLQkJcHJpdi0+dGVybWlvcy5jX2NjW2ldID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NjW2ldOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGVybWlvcy5jX2lmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCXByaXYtPnRlcm1pb3MuY19vZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19vZmxhZzsKKwlwcml2LT50ZXJtaW9zLmNfY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJcHJpdi0+dGVybWlvcy5jX2xmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2xmbGFnOworCWZvciAoaSA9IDA7IGkgPCBOQ0NTOyBpKyspCisJCXByaXYtPnRlcm1pb3MuY19jY1tpXSA9IHR0eS0+dGVybWlvcy0+Y19jY1tpXTsKIAlwcml2LT5jZmcucGt0bGVuICAgPSBjZmcucGt0bGVuOwogCXByaXYtPmNmZy5iYXVkcmF0ZSA9IGNmZy5iYXVkcmF0ZTsKIAlwcml2LT5jZmcuZGF0YWJpdHMgPSBjZmcuZGF0YWJpdHM7CiAJcHJpdi0+Y2ZnLnVua25vd24xID0gY2ZnLnVua25vd24xOwogCXByaXYtPmNmZy51bmtub3duMiA9IGNmZy51bmtub3duMjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFJFQURfT04gYW5kIHVyYiBzdWJtaXNzaW9uICovCi0JdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCiAJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKIAkJCQkgICAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCiAJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCkBAIC00MjMsNyArNDE1LDcgQEAKIAl9CiAKIAlyYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKLQkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LDApLAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAogCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFLAogCQkJICAgICBVU0JfVFlQRV9WRU5ET1J8VVNCX0RJUl9PVVR8VVNCX1JFQ0lQX0lOVEVSRkFDRSwKIAkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRV9SRUFEX09OLApAQCAtNDM0LDE0ICs0MjYsMTQgQEAKIAlpZiAocmMgPCAwKSB7CiAJCWVycigiRW5hYmxpbmcgcmVhZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOwogCQlyZXR2YWwgPSByYzsKLQl9IGVsc2UgCisJfSBlbHNlCiAJCWRiZygiJXMgLSBlbmFibGVkIHJlYWRpbmciLCBfX2Z1bmNfXyk7CiAKIAlyYyA9IGtsc2lfMTA1X2dldF9saW5lX3N0YXRlKHBvcnQsICZsaW5lX3N0YXRlKTsKIAlpZiAocmMgPj0gMCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcHJpdi0+bGluZV9zdGF0ZSA9IGxpbmVfc3RhdGU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJZGJnKCIlcyAtIHJlYWQgbGluZSBzdGF0ZSAweCVseCIsIF9fZnVuY19fLCBsaW5lX3N0YXRlKTsKIAkJcmV0dmFsID0gMDsKIAl9IGVsc2UKQEAgLTQ1Miw3ICs0NDQsOCBAQAogfSAvKiBrbHNpXzEwNV9vcGVuICovCiAKIAotc3RhdGljIHZvaWQga2xzaV8xMDVfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQga2xzaV8xMDVfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCByYzsKQEAgLTQ2MiwxNCArNDU1LDE0IEBACiAJbXV0ZXhfbG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKIAlpZiAoIXBvcnQtPnNlcmlhbC0+ZGlzY29ubmVjdGVkKSB7CiAJCS8qIHNlbmQgUkVBRF9PRkYgKi8KLQkJcmMgPSB1c2JfY29udHJvbF9tc2cgKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCi0JCQkJICAgICAgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRSwKLQkJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCwKLQkJCQkgICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFX1JFQURfT0ZGLAotCQkJCSAgICAgIDAsIC8qIGluZGV4ICovCi0JCQkJICAgICAgTlVMTCwgMCwKLQkJCQkgICAgICBLTFNJX1RJTUVPVVQpOworCQlyYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkgICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFLAorCQkJCSAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFX1JFQURfT0ZGLAorCQkJCSAgICAgMCwgLyogaW5kZXggKi8KKwkJCQkgICAgIE5VTEwsIDAsCisJCQkJICAgICBLTFNJX1RJTUVPVVQpOwogCQlpZiAocmMgPCAwKQogCQkJZXJyKCJEaXNhYmxpbmcgcmVhZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOwogCX0KQEAgLTQ4MiwyMyArNDc1LDI0IEBACiAJLyogRklYTUUgKi8KIAkvKiB3Z2cgLSBkbyBJIG5lZWQgdGhpcz8gSSB0aGluayBzby4gKi8KIAl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Ci0JaW5mbygia2w1a3VzYjEwNSBwb3J0IHN0YXRzOiAlbGQgYnl0ZXMgaW4sICVsZCBieXRlcyBvdXQiLCBwcml2LT5ieXRlc19pbiwgcHJpdi0+Ynl0ZXNfb3V0KTsKKwlpbmZvKCJrbDVrdXNiMTA1IHBvcnQgc3RhdHM6ICVsZCBieXRlcyBpbiwgJWxkIGJ5dGVzIG91dCIsCisJCQkJCXByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOwogfSAvKiBrbHNpXzEwNV9jbG9zZSAqLwogCiAKIC8qIFdlIG5lZWQgdG8gd3JpdGUgYSBjb21wbGV0ZSA2NC1ieXRlIGRhdGEgYmxvY2sgYW5kIGVuY29kZSB0aGUKLSAqIG51bWJlciBhY3R1YWxseSBzZW50IGluIHRoZSBmaXJzdCBkb3VibGUtYnl0ZSwgTFNCLW9yZGVyLiBUaGF0IAorICogbnVtYmVyIGFjdHVhbGx5IHNlbnQgaW4gdGhlIGZpcnN0IGRvdWJsZS1ieXRlLCBMU0Itb3JkZXIuIFRoYXQKICAqIGxlYXZlcyBhdCBtb3N0IDYyIGJ5dGVzIG9mIHBheWxvYWQuCiAgKi8KICNkZWZpbmUgS0xTSV8xMDVfREFUQV9PRkZTRVQJMiAgIC8qIGluIHRoZSBidWxrIHVyYiBkYXRhIGJsb2NrICovCiAKIAotc3RhdGljIGludCBrbHNpXzEwNV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorc3RhdGljIGludCBrbHNpXzEwNV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCByZXN1bHQsIHNpemU7Ci0JaW50IGJ5dGVzX3NlbnQ9MDsKKwlpbnQgYnl0ZXNfc2VudCA9IDA7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCkBAIC01MDcsMzQgKzUwMSwzNyBAQAogCQlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlpbnQgaTsKLQkJLyogc2luY2UgdGhlIHBvb2wgaXMgcGVyLXBvcnQgd2UgbWlnaHQgbm90IG5lZWQgdGhlIHNwaW4gbG9jayAhPyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJZm9yIChpPTA7IGk8TlVNX1VSQlM7IGkrKykgeworCQkvKiBzaW5jZSB0aGUgcG9vbCBpcyBwZXItcG9ydCB3ZSBtaWdodCBub3QgbmVlZAorCQkgICB0aGUgc3BpbiBsb2NrICE/ICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgaSsrKSB7CiAJCQlpZiAocHJpdi0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKIAkJCQl1cmIgPSBwcml2LT53cml0ZV91cmJfcG9vbFtpXTsKIAkJCQlkYmcoIiVzIC0gdXNpbmcgcG9vbCBVUkIgJWQiLCBfX2Z1bmNfXywgaSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JCWlmICh1cmI9PU5VTEwpIHsKKwkJaWYgKHVyYiA9PSBOVUxMKSB7CiAJCQlkYmcoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAogCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgewotCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jIChVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9BVE9NSUMpOworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJCWttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CiAJCQkJZXJyKCIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CiAJCX0KIAotCQlzaXplID0gbWluIChjb3VudCwgcG9ydC0+YnVsa19vdXRfc2l6ZSAtIEtMU0lfMTA1X0RBVEFfT0ZGU0VUKTsKLQkJc2l6ZSA9IG1pbiAoc2l6ZSwgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFIC0gS0xTSV8xMDVfREFUQV9PRkZTRVQpOworCQlzaXplID0gbWluKGNvdW50LCBwb3J0LT5idWxrX291dF9zaXplIC0gS0xTSV8xMDVfREFUQV9PRkZTRVQpOworCQlzaXplID0gbWluKHNpemUsIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSAtCisJCQkJCQkJS0xTSV8xMDVfREFUQV9PRkZTRVQpOwogCi0JCW1lbWNweSAodXJiLT50cmFuc2Zlcl9idWZmZXIgKyBLTFNJXzEwNV9EQVRBX09GRlNFVCwgYnVmLCBzaXplKTsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgS0xTSV8xMDVfREFUQV9PRkZTRVQsIGJ1Ziwgc2l6ZSk7CiAKIAkJLyogd3JpdGUgcGF5bG9hZCBzaXplIGludG8gdHJhbnNmZXIgYnVmZmVyICovCiAJCSgoX191OCAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVswXSA9IChfX3U4KSAoc2l6ZSAmIDB4RkYpOwpAQCAtNTUyLDcgKzU0OSw4IEBACiAJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQlidWYgKz0gc2l6ZTsKQEAgLTU2MSwxMiArNTU5LDEyIEBACiAJfQogZXhpdDoKIAkvKiBsb2NrbGVzcywgYnV0IGl0J3MgZm9yIGRlYnVnIGluZm8gb25seS4uLiAqLwotCXByaXYtPmJ5dGVzX291dCs9Ynl0ZXNfc2VudDsKKwlwcml2LT5ieXRlc19vdXQgKz0gYnl0ZXNfc2VudDsKIAogCXJldHVybiBieXRlc19zZW50OwkvKiB0aGF0J3MgaG93IG11Y2ggd2Ugd3JvdGUgKi8KIH0gLyoga2xzaV8xMDVfd3JpdGUgKi8KIAotc3RhdGljIHZvaWQga2xzaV8xMDVfd3JpdGVfYnVsa19jYWxsYmFjayAoIHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwpAQCAtNTg0LDUwICs1ODIsNTAgQEAKIAogCiAvKiByZXR1cm4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgY3VycmVudGx5IGluIHRoZSB3cml0aW5nIHByb2Nlc3MgKi8KLXN0YXRpYyBpbnQga2xzaV8xMDVfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBrbHNpXzEwNV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgY2hhcnMgPSAwOwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKLQkJaWYgKHByaXYtPndyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCWlmIChwcml2LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKIAkJCWNoYXJzICs9IFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKLQkJfQogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgY2hhcnMpOwotCXJldHVybiAoY2hhcnMpOworCXJldHVybiBjaGFyczsKIH0KIAotc3RhdGljIGludCBrbHNpXzEwNV93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBrbHNpXzEwNV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAlpbnQgcm9vbSA9IDA7CiAJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7Ci0JCWlmIChwcml2LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQlpZiAocHJpdi0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCiAJCQlyb29tICs9IFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKLQkJfQogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgcm9vbSk7Ci0JcmV0dXJuIChyb29tKTsKKwlyZXR1cm4gcm9vbTsKIH0KIAogCiAKLXN0YXRpYyB2b2lkIGtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQga2xzaV8xMDVfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtNjYwLDEzICs2NTgsMTMgQEAKIAl9IGVsc2UgewogCQlpbnQgYnl0ZXNfc2VudCA9ICgoX191OCAqKSBkYXRhKVswXSArCiAJCQkJICgodW5zaWduZWQgaW50KSAoKF9fdTggKikgZGF0YSlbMV0gPDwgOCk7Ci0JCXR0eSA9IHBvcnQtPnR0eTsKKwkJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJCS8qIHdlIHNob3VsZCBpbW1lZGlhdGVseSByZXN1Ym1pdCB0aGUgVVJCLCBiZWZvcmUgYXR0ZW1wdGluZwogCQkgKiB0byBwYXNzIHRoZSBkYXRhIG9uIHRvIHRoZSB0dHkgbGF5ZXIuIEJ1dCB0aGF0IG5lZWRzIGxvY2tpbmcKIAkJICogYWdhaW5zdCByZS1lbnRyeSBhbiB0aGVuIG1peGVkLXVwIGRhdGEgYmVjYXVzZSBvZgogCQkgKiBpbnRlcm1peGVkIHR0eV9mbGlwX2J1ZmZlcl9wdXNoKClzCiAJCSAqIEZJWE1FCi0JCSAqLyAKKwkJICovCiAJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCiAJCQkJICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIApAQCAtNjg2LDcgKzY4NCw3IEBACiAJCXByaXYtPmJ5dGVzX2luICs9IGJ5dGVzX3NlbnQ7CiAJfQogCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KLQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsIAorCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKIAkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCSAgICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKIAkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKQEAgLTY5NSwxNSArNjkzLDE2IEBACiAJCSAgICAgIHBvcnQpOwogCXJjID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyYykKLQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJjKTsKKwkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmMpOwogfSAvKiBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KIAogCi1zdGF0aWMgdm9pZCBrbHNpXzEwNV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCSBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CiAJdW5zaWduZWQgaW50IGlmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOwogCXVuc2lnbmVkIGludCBvbGRfaWZsYWcgPSBvbGRfdGVybWlvcy0+Y19pZmxhZzsKIAl1bnNpZ25lZCBpbnQgY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CkBAIC03MTEsNjUgKzcxMCw2MyBAQAogCXN0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzIGNmZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwZWVkX3QgYmF1ZDsKLQkKKwogCS8qIGxvY2sgd2hpbGUgd2UgYXJlIG1vZGlmeWluZyB0aGUgc2V0dGluZ3MgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCiAJLyoKIAkgKiBVcGRhdGUgYmF1ZCByYXRlCiAJICovCiAJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAKLQlpZiggKGNmbGFnICYgQ0JBVUQpICE9IChvbGRfY2ZsYWcgJiBDQkFVRCkgKSB7Ci0JICAgICAgICAvKiByZWFzc2VydCBEVFIgYW5kIChtYXliZSkgUlRTIG9uIHRyYW5zaXRpb24gZnJvbSBCMCAqLwotCQlpZiggKG9sZF9jZmxhZyAmIENCQVVEKSA9PSBCMCApIHsKKwlpZiAoKGNmbGFnICYgQ0JBVUQpICE9IChvbGRfY2ZsYWcgJiBDQkFVRCkpIHsKKwkJLyogcmVhc3NlcnQgRFRSIGFuZCAobWF5YmUpIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KKwkJaWYgKChvbGRfY2ZsYWcgJiBDQkFVRCkgPT0gQjApIHsKIAkJCWRiZygiJXM6IGJhdWQgd2FzIEIwIiwgX19mdW5jX18pOwogI2lmIDAKIAkJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFRSOwogCQkJLyogZG9uJ3Qgc2V0IFJUUyBpZiB1c2luZyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KLQkJCWlmICghKG9sZF9jZmxhZyAmIENSVFNDVFMpKSB7CisJCQlpZiAoIShvbGRfY2ZsYWcgJiBDUlRTQ1RTKSkKIAkJCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX1JUUzsKLQkJCX0KIAkJCW1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgcHJpdi0+Y29udHJvbF9zdGF0ZSk7CiAjZW5kaWYKIAkJfQogCX0KLQlzd2l0Y2goYmF1ZCkgewotCQljYXNlIDA6IC8qIGhhbmRsZWQgYmVsb3cgKi8KLQkJCWJyZWFrOwotCQljYXNlIDEyMDA6Ci0JCQlwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjEyMDA7Ci0JCQlicmVhazsKLQkJY2FzZSAyNDAwOgotCQkJcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2IyNDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDgwMDoKLQkJCXByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iNDgwMDsKLQkJCWJyZWFrOwotCQljYXNlIDk2MDA6CisJc3dpdGNoIChiYXVkKSB7CisJY2FzZSAwOiAvKiBoYW5kbGVkIGJlbG93ICovCisJCWJyZWFrOworCWNhc2UgMTIwMDoKKwkJcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2IxMjAwOworCQlicmVhazsKKwljYXNlIDI0MDA6CisJCXByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iMjQwMDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwOgorCQlwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjQ4MDA7CisJCWJyZWFrOworCWNhc2UgOTYwMDoKKwkJcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOworCQlicmVhazsKKwljYXNlIDE5MjAwOgorCQlwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjE5MjAwOworCQlicmVhazsKKwljYXNlIDM4NDAwOgorCQlwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjM4NDAwOworCQlicmVhazsKKwljYXNlIDU3NjAwOgorCQlwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjU3NjAwOworCQlicmVhazsKKwljYXNlIDExNTIwMDoKKwkJcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2IxMTUyMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRiZygiS0xTSSBVU0ItPlNlcmlhbCBjb252ZXJ0ZXI6IgorCQkgICAgIiB1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0LCB1c2luZyBkZWZhdWx0IG9mIDk2MDAiKTsKIAkJCXByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iOTYwMDsKLQkJCWJyZWFrOwotCQljYXNlIDE5MjAwOgotCQkJcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2IxOTIwMDsKLQkJCWJyZWFrOwotCQljYXNlIDM4NDAwOgotCQkJcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2IzODQwMDsKLQkJCWJyZWFrOwotCQljYXNlIDU3NjAwOgotCQkJcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2I1NzYwMDsKLQkJCWJyZWFrOwotCQljYXNlIDExNTIwMDoKLQkJCXByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iMTE1MjAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkYmcoIktMU0kgVVNCLT5TZXJpYWwgY29udmVydGVyOiIKLQkJCSAgICAiIHVuc3VwcG9ydGVkIGJhdWRyYXRlIHJlcXVlc3QsIHVzaW5nIGRlZmF1bHQiCi0JCQkgICAgIiBvZiA5NjAwIik7Ci0JCQlwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjk2MDA7Ci0JCQliYXVkID0gOTYwMDsKLQkJCWJyZWFrOworCQliYXVkID0gOTYwMDsKKwkJYnJlYWs7CiAJfQotCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjAgKSB7CisJaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCkgewogCQlkYmcoIiVzOiBiYXVkIGlzIEIwIiwgX19mdW5jX18pOwogCQkvKiBEcm9wIFJUUyBhbmQgRFRSICovCiAJCS8qIG1heWJlIHRoaXMgc2hvdWxkIGJlIHNpbXVsYXRlZCBieSBzZW5kaW5nIHJlYWQKQEAgLTc3OCw3ICs3NzUsNyBAQAogCQk7CiAjaWYgMAogCQlwcml2LT5jb250cm9sX3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKLSAgICAgICAJCW1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgcHJpdi0+Y29udHJvbF9zdGF0ZSk7CisJCW1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgcHJpdi0+Y29udHJvbF9zdGF0ZSk7CiAjZW5kaWYKIAl9CiAJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKQEAgLTc4OCwxMSArNzg1LDExIEBACiAJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewogCQljYXNlIENTNToKIAkJCWRiZygiJXMgLSA1IGJpdHMvYnl0ZSBub3Qgc3VwcG9ydGVkIiwgX19mdW5jX18pOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybiA7CiAJCWNhc2UgQ1M2OgogCQkJZGJnKCIlcyAtIDYgYml0cy9ieXRlIG5vdCBzdXBwb3J0ZWQiLCBfX2Z1bmNfXyk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIDsKIAkJY2FzZSBDUzc6CiAJCQlwcml2LT5jZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfNzsKQEAgLTgxMSw4ICs4MDgsNyBAQAogCSAqIFVwZGF0ZSBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKExDUikKIAkgKi8KIAlpZiAoKGNmbGFnICYgKFBBUkVOQnxQQVJPREQpKSAhPSAob2xkX2NmbGFnICYgKFBBUkVOQnxQQVJPREQpKQotCSAgICB8fCAoY2ZsYWcgJiBDU1RPUEIpICE9IChvbGRfY2ZsYWcgJiBDU1RPUEIpICkgewotCQkKKwkgICAgfHwgKGNmbGFnICYgQ1NUT1BCKSAhPSAob2xkX2NmbGFnICYgQ1NUT1BCKSkgewogCQkvKiBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCAqLwogCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfihQQVJFTkJ8UEFST0REfENTVE9QQik7CiAjaWYgMApAQCAtODMzLDIwICs4MjksMTggQEAKICNlbmRpZgogCQk7CiAJfQotCQogCS8qCiAJICogU2V0IGZsb3cgY29udHJvbDogd2VsbCwgSSBkbyBub3QgcmVhbGx5IG5vdyBob3cgdG8gaGFuZGxlIERUUi9SVFMuCiAJICogSnVzdCBkbyB3aGF0IHdlIGhhdmUgc2VlbiB3aXRoIFNuaWZmVVNCIG9uIFdpbjk4LgogCSAqLwotCWlmKCAoaWZsYWcgJiBJWE9GRikgIT0gKG9sZF9pZmxhZyAmIElYT0ZGKQorCWlmICgoaWZsYWcgJiBJWE9GRikgIT0gKG9sZF9pZmxhZyAmIElYT0ZGKQogCSAgICB8fCAoaWZsYWcgJiBJWE9OKSAhPSAob2xkX2lmbGFnICYgSVhPTikKLQkgICAgfHwgIChjZmxhZyAmIENSVFNDVFMpICE9IChvbGRfY2ZsYWcgJiBDUlRTQ1RTKSApIHsKLQkJCisJICAgIHx8ICAoY2ZsYWcgJiBDUlRTQ1RTKSAhPSAob2xkX2NmbGFnICYgQ1JUU0NUUykpIHsKIAkJLyogTm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgKi8KIAkJdHR5LT50ZXJtaW9zLT5jX2NmbGFnICY9IH5DUlRTQ1RTOwogCQkvKiBEcm9wIERUUi9SVFMgaWYgbm8gZmxvdyBjb250cm9sIG90aGVyd2lzZSBhc3NlcnQgKi8KICNpZiAwCi0JCWlmICgoaWZsYWcgJiBJWE9GRikgfHwgKGlmbGFnICYgSVhPTikgfHwgKGNmbGFnICYgQ1JUU0NUUykgKQorCQlpZiAoKGlmbGFnICYgSVhPRkYpIHx8IChpZmxhZyAmIElYT04pIHx8IChjZmxhZyAmIENSVFNDVFMpKQogCQkJcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9EVFIgfCBUSU9DTV9SVFM7CiAJCWVsc2UKIAkJCXByaXYtPmNvbnRyb2xfc3RhdGUgJj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwpAQCAtODU0LDE5ICs4NDgsMjEgQEAKICNlbmRpZgogCQk7CiAJfQotCW1lbWNweSAoJmNmZywgJnByaXYtPmNmZywgc2l6ZW9mKGNmZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCisJbWVtY3B5KCZjZmcsICZwcml2LT5jZmcsIHNpemVvZihjZmcpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKIAkvKiBub3cgY29tbWl0IGNoYW5nZXMgdG8gZGV2aWNlICovCiAJa2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MocG9ydCwgJmNmZyk7CiB9IC8qIGtsc2lfMTA1X3NldF90ZXJtaW9zICovCiAKIAogI2lmIDAKLXN0YXRpYyB2b2lkIG1jdF91MjMyX2JyZWFrX2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICkKK3N0YXRpYyB2b2lkIG1jdF91MjMyX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqKXBvcnQtPnByaXZhdGU7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPQorCQkJCShzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqKXBvcnQtPnByaXZhdGU7CiAJdW5zaWduZWQgY2hhciBsY3IgPSBwcml2LT5sYXN0X2xjcjsKIAogCWRiZygiJXNzdGF0ZT0lZCIsIF9fZnVuY19fLCBicmVha19zdGF0ZSk7CkBAIC04NzgsOCArODc0LDkgQEAKIH0gLyogbWN0X3UyMzJfYnJlYWtfY3RsICovCiAjZW5kaWYKIAotc3RhdGljIGludCBrbHNpXzEwNV90aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGtsc2lfMTA1X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwpAQCAtODkzLDE4ICs4OTAsMTggQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcHJpdi0+bGluZV9zdGF0ZSA9IGxpbmVfc3RhdGU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJZGJnKCIlcyAtIHJlYWQgbGluZSBzdGF0ZSAweCVseCIsIF9fZnVuY19fLCBsaW5lX3N0YXRlKTsKIAlyZXR1cm4gKGludClsaW5lX3N0YXRlOwogfQogCi1zdGF0aWMgaW50IGtsc2lfMTA1X3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3N0YXRpYyBpbnQga2xzaV8xMDVfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKLQkKKwogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIC8qIGlmIHRoaXMgZXZlciBnZXRzIGltcGxlbWVudGVkLCBpdCBzaG91bGQgYmUgZG9uZSBzb21ldGhpbmcgbGlrZSB0aGlzOgpAQCAtOTI5LDE0ICs5MjYsMTYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBrbHNpXzEwNV90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwogfQogCi1zdGF0aWMgdm9pZCBrbHNpXzEwNV91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQga2xzaV8xMDVfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCByZXN1bHQ7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwpAQCAtOTUwLDcgKzk0OSw3IEBACiAKIAogCi1zdGF0aWMgaW50IF9faW5pdCBrbHNpXzEwNV9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQga2xzaV8xMDVfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma2w1a3VzYjEwNWRfZGV2aWNlKTsKQEAgLTk2OSwxOSArOTY4LDE5IEBACiB9CiAKIAotc3RhdGljIHZvaWQgX19leGl0IGtsc2lfMTA1X2V4aXQgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQga2xzaV8xMDVfZXhpdCh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgma2w1a3VzYjEwNWRfZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrbDVrdXNiMTA1ZF9kZXZpY2UpOworCXVzYl9kZXJlZ2lzdGVyKCZrbDVrdXNiMTA1ZF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2w1a3VzYjEwNWRfZGV2aWNlKTsKIH0KIAogCi1tb2R1bGVfaW5pdCAoa2xzaV8xMDVfaW5pdCk7Ci1tb2R1bGVfZXhpdCAoa2xzaV8xMDVfZXhpdCk7Cittb2R1bGVfaW5pdChrbHNpXzEwNV9pbml0KTsKK21vZHVsZV9leGl0KGtsc2lfMTA1X2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7IAorTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKaW5kZXggNjkzZjAwZC4uZGViYTI4ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIEtPQklMIFVTQiBTbWFydCBDYXJkIFRlcm1pbmFsIERyaXZlcgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIEtPQklMIFN5c3RlbXMgR21iSCAKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIEtPQklMIFN5c3RlbXMgR21iSAogICogIEF1dGhvcjogVGhvbWFzIFdhaHJlbmJydWNoCiAgKgogICogIENvbnRhY3Q6IGxpbnV4dXNiQGtvYmlsLmRlCkBAIC0yMCw3ICsyMCw3IEBACiAgKgogICogU3VwcG9ydGVkIHJlYWRlcnM6IFVTQiBUV0lOLCBLQUFOIFN0YW5kYXJkIFBsdXMgYW5kIFNlY09WSUQgUmVhZGVyIFBsdXMKICAqIChBZGFwdGVyIEspLCBCMSBQcm9mZXNzaW9uYWwgYW5kIEtBQU4gUHJvZmVzc2lvbmFsIChBZGFwdGVyIEIpCi0gKiAKKyAqCiAgKiAoMjEvMDUvMjAwNCkgdHcKICAqICAgICAgRml4IGJ1ZyB3aXRoIFAnbidQIHJlYWRlcnMKICAqCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgpAQCAtNjgsMjEgKzY4LDI0IEBACiAKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludCAga29iaWxfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgdm9pZCBrb2JpbF9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICBrb2JpbF9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBrb2JpbF9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIGludCAga29iaWxfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAorc3RhdGljIGludCAga29iaWxfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGtvYmlsX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAga29iaWxfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQga29iaWxfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGtvYmlsX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwotc3RhdGljIGludCAga29iaWxfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgIGtvYmlsX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCAga29iaWxfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgIGtvYmlsX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIGludCAga29iaWxfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIGludCAga29iaWxfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50ICBrb2JpbF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBrb2JpbF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7Ci1zdGF0aWMgdm9pZCBrb2JpbF9yZWFkX2ludF9jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiICk7Ci1zdGF0aWMgdm9pZCBrb2JpbF93cml0ZV9jYWxsYmFjayggc3RydWN0IHVyYiAqcHVyYiApOwotc3RhdGljIHZvaWQga29iaWxfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGQpOworc3RhdGljIHZvaWQga29iaWxfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIGtvYmlsX3dyaXRlX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnB1cmIpOworc3RhdGljIHZvaWQga29iaWxfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKIAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CkBAIC05NCw3ICs5Nyw3IEBACiB9OwogCiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGtvYmlsX2RyaXZlciA9IHsKIAkubmFtZSA9CQkia29iaWwiLApAQCAtMTMxLDE0ICsxMzQsMTQgQEAKIHN0cnVjdCBrb2JpbF9wcml2YXRlIHsKIAlpbnQgd3JpdGVfaW50X2VuZHBvaW50X2FkZHJlc3M7CiAJaW50IHJlYWRfaW50X2VuZHBvaW50X2FkZHJlc3M7Ci0JdW5zaWduZWQgY2hhciBidWZbS09CSUxfQlVGX0xFTkdUSF07IC8vIGJ1ZmZlciBmb3IgdGhlIEFQRFUgdG8gc2VuZAotCWludCBmaWxsZWQ7ICAvLyBpbmRleCBvZiB0aGUgbGFzdCBjaGFyIGluIGJ1ZgotCWludCBjdXJfcG9zOyAvLyBpbmRleCBvZiB0aGUgbmV4dCBjaGFyIHRvIHNlbmQgaW4gYnVmCisJdW5zaWduZWQgY2hhciBidWZbS09CSUxfQlVGX0xFTkdUSF07IC8qIGJ1ZmZlciBmb3IgdGhlIEFQRFUgdG8gc2VuZCAqLworCWludCBmaWxsZWQ7ICAvKiBpbmRleCBvZiB0aGUgbGFzdCBjaGFyIGluIGJ1ZiAqLworCWludCBjdXJfcG9zOyAvKiBpbmRleCBvZiB0aGUgbmV4dCBjaGFyIHRvIHNlbmQgaW4gYnVmICovCiAJX191MTYgZGV2aWNlX3R5cGU7CiB9OwogCiAKLXN0YXRpYyBpbnQga29iaWxfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQga29iaWxfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWludCBpOwogCXN0cnVjdCBrb2JpbF9wcml2YXRlICpwcml2OwpAQCAtMTQ5LDIwICsxNTIsMjAgQEAKIAlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVuZHBvaW50OwogCiAJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrb2JpbF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2KXsKKwlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXByaXYtPmZpbGxlZCA9IDA7CiAJcHJpdi0+Y3VyX3BvcyA9IDA7CiAJcHJpdi0+ZGV2aWNlX3R5cGUgPSBsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwogCi0Jc3dpdGNoIChwcml2LT5kZXZpY2VfdHlwZSl7CisJc3dpdGNoIChwcml2LT5kZXZpY2VfdHlwZSkgewogCWNhc2UgS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQ6CiAJCXByaW50ayhLRVJOX0RFQlVHICJLT0JJTCBCMSBQUk8gLyBLQUFOIFBSTyBkZXRlY3RlZFxuIik7CiAJCWJyZWFrOwogCWNhc2UgS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJLT0JJTCBLQUFOIFN0YW5kYXJkIFBsdXMgLyBTZWNPVklEIFJlYWRlciBQbHVzIGRldGVjdGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAiS09CSUwgS0FBTiBTdGFuZGFyZCBQbHVzIC8gU2VjT1ZJRCBSZWFkZXIgUGx1cyBkZXRlY3RlZFxuIik7CiAJCWJyZWFrOwogCWNhc2UgS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEOgogCQlwcmludGsoS0VSTl9ERUJVRyAiS09CSUwgVVNCVFdJTiBkZXRlY3RlZFxuIik7CkBAIC0xNzMsNDQgKzE3Niw0OCBAQAogCX0KIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKIAotCS8vIHNlYXJjaCBmb3IgdGhlIG5lY2Vzc2FyeSBlbmRwb2ludHMKKwkvKiBzZWFyY2ggZm9yIHRoZSBuZWNlc3NhcnkgZW5kcG9pbnRzICovCiAJcGRldiA9IHNlcmlhbC0+ZGV2OwotIAlhY3Rjb25maWcgPSBwZGV2LT5hY3Rjb25maWc7Ci0gCWludGVyZmFjZSA9IGFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdOworCWFjdGNvbmZpZyA9IHBkZXYtPmFjdGNvbmZpZzsKKwlpbnRlcmZhY2UgPSBhY3Rjb25maWctPmludGVyZmFjZVswXTsKIAlhbHRzZXR0aW5nID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKLSAJZW5kcG9pbnQgPSBhbHRzZXR0aW5nLT5lbmRwb2ludDsKLSAgCi0gCWZvciAoaSA9IDA7IGkgPCBhbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCWVuZHBvaW50ID0gYWx0c2V0dGluZy0+ZW5kcG9pbnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKIAkJZW5kcG9pbnQgPSAmYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV07CiAJCWlmICh1c2JfZW5kcG9pbnRfaXNfaW50X291dCgmZW5kcG9pbnQtPmRlc2MpKSB7Ci0JCSAJZGJnKCIlcyBGb3VuZCBpbnRlcnJ1cHQgb3V0IGVuZHBvaW50LiBBZGRyZXNzOiAlZCIsIF9fZnVuY19fLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKLQkJIAlwcml2LT53cml0ZV9pbnRfZW5kcG9pbnRfYWRkcmVzcyA9IGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0gCQl9CisJCQlkYmcoIiVzIEZvdW5kIGludGVycnVwdCBvdXQgZW5kcG9pbnQuIEFkZHJlc3M6ICVkIiwKKwkJCQlfX2Z1bmNfXywgZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CisJCQlwcml2LT53cml0ZV9pbnRfZW5kcG9pbnRfYWRkcmVzcyA9CisJCQkJZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJfQogCQlpZiAodXNiX2VuZHBvaW50X2lzX2ludF9pbigmZW5kcG9pbnQtPmRlc2MpKSB7Ci0JCSAJZGJnKCIlcyBGb3VuZCBpbnRlcnJ1cHQgaW4gIGVuZHBvaW50LiBBZGRyZXNzOiAlZCIsIF9fZnVuY19fLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKLQkJIAlwcml2LT5yZWFkX2ludF9lbmRwb2ludF9hZGRyZXNzID0gZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKLQkgCX0KKwkJCWRiZygiJXMgRm91bmQgaW50ZXJydXB0IGluICBlbmRwb2ludC4gQWRkcmVzczogJWQiLAorCQkJCV9fZnVuY19fLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJCXByaXYtPnJlYWRfaW50X2VuZHBvaW50X2FkZHJlc3MgPQorCQkJCWVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIHZvaWQga29iaWxfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBrb2JpbF9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWludCBpOwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKIAotCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewotCQl3aGlsZSAoc2VyaWFsLT5wb3J0W2ldLT5vcGVuX2NvdW50ID4gMCkgewotCQkJa29iaWxfY2xvc2UgKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7Ci0JCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQl3aGlsZSAoc2VyaWFsLT5wb3J0W2ldLT5wb3J0LmNvdW50ID4gMCkKKwkJCWtvYmlsX2Nsb3NlKE5VTEwsIHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CiAJCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pKTsKIAkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CiAJfQogfQogCiAKLXN0YXRpYyBpbnQga29iaWxfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGtvYmlsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBrb2JpbF9wcml2YXRlICpwcml2OwpAQCAtMjIxLDcgKzIyOCw3IEBACiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JLy8gc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZAorCS8qIHNvbWVvbmUgc2V0cyB0aGUgZGV2IHRvIDAgaWYgdGhlIGNsb3NlIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgKi8KIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAogCkBAIC0yMjksMTAwICsyMzYsMTE1IEBACiAJICogdGhlIGRhdGEgdGhyb3VnaCwgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaAogCSAqIGRhdGEgcmF0ZXMgKGxpa2Ugd2l0aCBPSENJKSBkYXRhIGNhbiBnZXQgbG9zdC4KIAkgKi8KLQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKwlpZiAodHR5KSB7CisJCXR0eS0+bG93X2xhdGVuY3kgPSAxOwogCi0JLy8gd2l0aG91dCB0aGlzLCBldmVyeSBwdXNoX3R0eV9jaGFyIGlzIGVjaG9lZCA6LSggIAotCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19sZmxhZyA9IDA7Ci0JcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2xmbGFnICY9IH4oSVNJRyB8IElDQU5PTiB8IEVDSE8gfCBJRVhURU4gfCBYQ0FTRSk7Ci0JcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnID0gSUdOQlJLIHwgSUdOUEFSIHwgSVhPRkY7Ci0JcG9ydC0+dHR5LT50ZXJtaW9zLT5jX29mbGFnICY9IH5PTkxDUjsgLy8gZG8gTk9UIHRyYW5zbGF0ZSBDUiB0byBDUi1OTCAoMHgwQSAtPiAweDBBIDB4MEQpCi0JCi0JLy8gYWxsb2NhdGUgbWVtb3J5IGZvciB0cmFuc2ZlciBidWZmZXIKLQl0cmFuc2Zlcl9idWZmZXIgPSBremFsbG9jKHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpOwotCWlmICghIHRyYW5zZmVyX2J1ZmZlcikgewotCQlyZXR1cm4gLUVOT01FTTsKKwkJLyogRGVmYXVsdCB0byBlY2hvIG9mZiBhbmQgb3RoZXIgc2FuZSBkZXZpY2Ugc2V0dGluZ3MgKi8KKwkJdHR5LT50ZXJtaW9zLT5jX2xmbGFnID0gMDsKKwkJdHR5LT50ZXJtaW9zLT5jX2xmbGFnICY9IH4oSVNJRyB8IElDQU5PTiB8IEVDSE8gfCBJRVhURU4gfAorCQkJCQkJCQkgWENBU0UpOworCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgPSBJR05CUksgfCBJR05QQVIgfCBJWE9GRjsKKwkJLyogZG8gTk9UIHRyYW5zbGF0ZSBDUiB0byBDUi1OTCAoMHgwQSAtPiAweDBBIDB4MEQpICovCisJCXR0eS0+dGVybWlvcy0+Y19vZmxhZyAmPSB+T05MQ1I7CiAJfQotCQotCS8vIGFsbG9jYXRlIHdyaXRlX3VyYgotCWlmICghcG9ydC0+d3JpdGVfdXJiKSB7IAotCQlkYmcoIiVzIC0gcG9ydCAlZCAgQWxsb2NhdGluZyBwb3J0LT53cml0ZV91cmIiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQkJcG9ydC0+d3JpdGVfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsgIAorCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyICovCisJdHJhbnNmZXJfYnVmZmVyID0ga3phbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBhbGxvY2F0ZSB3cml0ZV91cmIgKi8KKwlpZiAoIXBvcnQtPndyaXRlX3VyYikgeworCQlkYmcoIiVzIC0gcG9ydCAlZCAgQWxsb2NhdGluZyBwb3J0LT53cml0ZV91cmIiLAorCQkJCQkJX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCXBvcnQtPndyaXRlX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcG9ydC0+d3JpdGVfdXJiKSB7Ci0JCQlkYmcoIiVzIC0gcG9ydCAlZCB1c2JfYWxsb2NfdXJiIGZhaWxlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCQkJZGJnKCIlcyAtIHBvcnQgJWQgdXNiX2FsbG9jX3VyYiBmYWlsZWQiLAorCQkJCQkJX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAJCQlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9CiAKLQkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHdyaXRlX3VyYiB0cmFuc2ZlciBidWZmZXIKLQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2Mod3JpdGVfdXJiX3RyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpOwotCWlmICghIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB3cml0ZV91cmIgdHJhbnNmZXIgYnVmZmVyICovCisJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJa21hbGxvYyh3cml0ZV91cmJfdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcikgewogCQlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOwogCQl1c2JfZnJlZV91cmIocG9ydC0+d3JpdGVfdXJiKTsKIAkJcG9ydC0+d3JpdGVfdXJiID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfSAKLQotCS8vIGdldCBoYXJkd2FyZSB2ZXJzaW9uCi0JcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCi0JCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwgCi0JCQkJICBTVVNCQ1JlcXVlc3RfR2V0TWlzYywKLQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfSU4sCi0JCQkJICBTVVNCQ1JfTVNDX0dldEhXVmVyc2lvbiwKLQkJCQkgIDAsCi0JCQkJICB0cmFuc2Zlcl9idWZmZXIsCi0JCQkJICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJCSAgS09CSUxfVElNRU9VVAotCQkpOwotCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgZ2V0X0hXX3ZlcnNpb24gVVJCIHJldHVybnM6ICVpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKLQlkYmcoIkhhcndhcmUgdmVyc2lvbjogJWkuJWkuJWkiLCB0cmFuc2Zlcl9idWZmZXJbMF0sIHRyYW5zZmVyX2J1ZmZlclsxXSwgdHJhbnNmZXJfYnVmZmVyWzJdICk7Ci0JCi0JLy8gZ2V0IGZpcm13YXJlIHZlcnNpb24KLQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKLQkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKLQkJCQkgIFNVU0JDUmVxdWVzdF9HZXRNaXNjLAotCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9JTiwKLQkJCQkgIFNVU0JDUl9NU0NfR2V0RldWZXJzaW9uLAotCQkJCSAgMCwKLQkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKLQkJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJICBLT0JJTF9USU1FT1VUCi0JCSk7Ci0JZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBnZXRfRldfdmVyc2lvbiBVUkIgcmV0dXJuczogJWkiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOwotCWRiZygiRmlybXdhcmUgdmVyc2lvbjogJWkuJWkuJWkiLCB0cmFuc2Zlcl9idWZmZXJbMF0sIHRyYW5zZmVyX2J1ZmZlclsxXSwgdHJhbnNmZXJfYnVmZmVyWzJdICk7Ci0KLQlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQgfHwgcHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQpIHsKLQkJLy8gU2V0dGluZyBCYXVkcmF0ZSwgUGFyaXR5IGFuZCBTdG9wYml0cwotCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKLQkJCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwgCi0JCQkJCSAgU1VTQkNSZXF1ZXN0X1NldEJhdWRSYXRlUGFyaXR5QW5kU3RvcEJpdHMsCi0JCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCi0JCQkJCSAgU1VTQkNSX1NCUl85NjAwIHwgU1VTQkNSX1NQQVNCX0V2ZW5QYXJpdHkgfCBTVVNCQ1JfU1BBU0JfMVN0b3BCaXQsCi0JCQkJCSAgMCwKLQkJCQkJICB0cmFuc2Zlcl9idWZmZXIsCi0JCQkJCSAgMCwKLQkJCQkJICBLT0JJTF9USU1FT1VUCi0JCQkpOwotCQlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHNldF9iYXVkcmF0ZSBVUkIgcmV0dXJuczogJWkiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOwotCQkKLQkJLy8gcmVzZXQgYWxsIHF1ZXVlcwotCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKLQkJCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwgCi0JCQkJCSAgU1VTQkNSZXF1ZXN0X01pc2MsCi0JCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCi0JCQkJCSAgU1VTQkNSX01TQ19SZXNldEFsbFF1ZXVlcywKLQkJCQkJICAwLAotCQkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKLQkJCQkJICAwLAotCQkJCQkgIEtPQklMX1RJTUVPVVQKLQkJCSk7Ci0JCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgcmVzZXRfYWxsX3F1ZXVlcyBVUkIgcmV0dXJuczogJWkiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOwogCX0KLQlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEIHx8IHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEIHx8CisKKwkvKiBnZXQgaGFyZHdhcmUgdmVyc2lvbiAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgU1VTQkNSZXF1ZXN0X0dldE1pc2MsCisJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfSU4sCisJCQkgIFNVU0JDUl9NU0NfR2V0SFdWZXJzaW9uLAorCQkJICAwLAorCQkJICB0cmFuc2Zlcl9idWZmZXIsCisJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgIEtPQklMX1RJTUVPVVQKKwkpOworCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgZ2V0X0hXX3ZlcnNpb24gVVJCIHJldHVybnM6ICVpIiwKKwkJX19mdW5jX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlkYmcoIkhhcndhcmUgdmVyc2lvbjogJWkuJWkuJWkiLAorCQl0cmFuc2Zlcl9idWZmZXJbMF0sIHRyYW5zZmVyX2J1ZmZlclsxXSwgdHJhbnNmZXJfYnVmZmVyWzJdKTsKKworCS8qIGdldCBmaXJtd2FyZSB2ZXJzaW9uICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICBTVVNCQ1JlcXVlc3RfR2V0TWlzYywKKwkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9JTiwKKwkJCSAgU1VTQkNSX01TQ19HZXRGV1ZlcnNpb24sCisJCQkgIDAsCisJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCSAgS09CSUxfVElNRU9VVAorCSk7CisJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBnZXRfRldfdmVyc2lvbiBVUkIgcmV0dXJuczogJWkiLAorCQkJCQlfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCWRiZygiRmlybXdhcmUgdmVyc2lvbjogJWkuJWkuJWkiLAorCQl0cmFuc2Zlcl9idWZmZXJbMF0sIHRyYW5zZmVyX2J1ZmZlclsxXSwgdHJhbnNmZXJfYnVmZmVyWzJdKTsKKworCWlmIChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRCB8fAorCQkJcHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQpIHsKKwkJLyogU2V0dGluZyBCYXVkcmF0ZSwgUGFyaXR5IGFuZCBTdG9wYml0cyAqLworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgIFNVU0JDUmVxdWVzdF9TZXRCYXVkUmF0ZVBhcml0eUFuZFN0b3BCaXRzLAorCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCSAgU1VTQkNSX1NCUl85NjAwIHwgU1VTQkNSX1NQQVNCX0V2ZW5QYXJpdHkgfAorCQkJCQkJCVNVU0JDUl9TUEFTQl8xU3RvcEJpdCwKKwkJCSAgMCwKKwkJCSAgdHJhbnNmZXJfYnVmZmVyLAorCQkJICAwLAorCQkJICBLT0JJTF9USU1FT1VUCisJCSk7CisJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgc2V0X2JhdWRyYXRlIFVSQiByZXR1cm5zOiAlaSIsCisJCQkJCV9fZnVuY19fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisKKwkJLyogcmVzZXQgYWxsIHF1ZXVlcyAqLworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgIFNVU0JDUmVxdWVzdF9NaXNjLAorCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCSAgU1VTQkNSX01TQ19SZXNldEFsbFF1ZXVlcywKKwkJCSAgMCwKKwkJCSAgdHJhbnNmZXJfYnVmZmVyLAorCQkJICAwLAorCQkJICBLT0JJTF9USU1FT1VUCisJCSk7CisJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgcmVzZXRfYWxsX3F1ZXVlcyBVUkIgcmV0dXJuczogJWkiLAorCQkJCQlfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCX0KKwlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEIHx8CisJICAgIHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEIHx8CiAJICAgIHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0tBQU5fU0lNX1BST0RVQ1RfSUQpIHsKLQkJLy8gc3RhcnQgcmVhZGluZyAoQWRhcHRlciBCICdjYXVzZSBQTlAgc3RyaW5nKQotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiggcG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyAgKTsgCi0JCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgcmVhZCBVUkIgcmV0dXJuczogJWkiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCQkvKiBzdGFydCByZWFkaW5nIChBZGFwdGVyIEIgJ2NhdXNlIFBOUCBzdHJpbmcpICovCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOworCQlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHJlYWQgVVJCIHJldHVybnM6ICVpIiwKKwkJCQkJX19mdW5jX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKIAl9CiAKIAlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOwpAQCAtMzMwLDEzICszNTIsMTQgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBrb2JpbF9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBrb2JpbF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCWlmIChwb3J0LT53cml0ZV91cmIpIHsKIAkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7Ci0JCXVzYl9mcmVlX3VyYiggcG9ydC0+d3JpdGVfdXJiICk7CisJCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOwogCQlwb3J0LT53cml0ZV91cmIgPSBOVUxMOwogCX0KIAl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CkBAIC0zNTAsNyArMzczLDcgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7Ci0vLwljaGFyICpkYmdfZGF0YTsKKy8qCWNoYXIgKmRiZ19kYXRhOyAqLwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtMzYwLDUxICszODMsNTMgQEAKIAkJcmV0dXJuOwogCX0KIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAKLQkJLy8gQkVHSU4gREVCVUcKKwkJLyogQkVHSU4gREVCVUcgKi8KIAkJLyoKLQkJICBkYmdfZGF0YSA9IGt6YWxsb2MoKDMgKiAgcHVyYi0+YWN0dWFsX2xlbmd0aCArIDEwKSAqIHNpemVvZihjaGFyKSwgR0ZQX0tFUk5FTCk7CisJCSAgZGJnX2RhdGEgPSBremFsbG9jKCgzICogIHB1cmItPmFjdHVhbF9sZW5ndGggKyAxMCkKKwkJCQkJCSogc2l6ZW9mKGNoYXIpLCBHRlBfS0VSTkVMKTsKIAkJICBpZiAoISBkYmdfZGF0YSkgewotCQkgIHJldHVybjsKKwkJCSAgcmV0dXJuOwogCQkgIH0KLQkJICBmb3IgKGkgPSAwOyBpIDwgcHVyYi0+YWN0dWFsX2xlbmd0aDsgaSsrKSB7IAotCQkgIHNwcmludGYoZGJnX2RhdGEgKzMqaSwgIiUwMlggIiwgZGF0YVtpXSk7IAorCQkgIGZvciAoaSA9IDA7IGkgPCBwdXJiLT5hY3R1YWxfbGVuZ3RoOyBpKyspIHsKKwkJCSAgc3ByaW50ZihkYmdfZGF0YSArMyppLCAiJTAyWCAiLCBkYXRhW2ldKTsKIAkJICB9Ci0JCSAgZGJnKCIgPC0tICVzIiwgZGJnX2RhdGEgKTsKKwkJICBkYmcoIiA8LS0gJXMiLCBkYmdfZGF0YSk7CiAJCSAga2ZyZWUoZGJnX2RhdGEpOwogCQkqLwotCQkvLyBFTkQgREVCVUcKKwkJLyogRU5EIERFQlVHICovCiAKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9Ci0KLQkvLyBzb21lb25lIHNldHMgdGhlIGRldiB0byAwIGlmIHRoZSBjbG9zZSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkCisJLyogc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCAqLwogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7Ci0JZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCByZWFkIFVSQiByZXR1cm5zOiAlaSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCByZWFkIFVSQiByZXR1cm5zOiAlaSIsCisJCQlfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOwogfQogCiAKLXN0YXRpYyB2b2lkIGtvYmlsX3dyaXRlX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICpwdXJiICkKK3N0YXRpYyB2b2lkIGtvYmlsX3dyaXRlX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnB1cmIpCiB7CiB9CiAKIAotc3RhdGljIGludCBrb2JpbF93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCitzdGF0aWMgaW50IGtvYmlsX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlpbnQgbGVuZ3RoID0gMDsKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgdG9kbyA9IDA7Ci0Jc3RydWN0IGtvYmlsX3ByaXZhdGUgKiBwcml2OworCXN0cnVjdCBrb2JpbF9wcml2YXRlICpwcml2OwogCiAJaWYgKGNvdW50ID09IDApIHsKLQkJZGJnKCIlcyAtIHBvcnQgJWQgd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCWRiZygiJXMgLSBwb3J0ICVkIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsCisJCQkJCQlfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC00MTUsMTA2ICs0NDAsMTEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCS8vIENvcHkgZGF0YSB0byBidWZmZXIKLQltZW1jcHkgKHByaXYtPmJ1ZiArIHByaXYtPmZpbGxlZCwgYnVmLCBjb3VudCk7Ci0KLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwgcHJpdi0+YnVmICsgcHJpdi0+ZmlsbGVkKTsKLQorCS8qIENvcHkgZGF0YSB0byBidWZmZXIgKi8KKwltZW1jcHkocHJpdi0+YnVmICsgcHJpdi0+ZmlsbGVkLCBidWYsIGNvdW50KTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwKKwkJCQkJCXByaXYtPmJ1ZiArIHByaXYtPmZpbGxlZCk7CiAJcHJpdi0+ZmlsbGVkID0gcHJpdi0+ZmlsbGVkICsgY291bnQ7CiAKLQotCS8vIG9ubHkgc2VuZCBjb21wbGV0ZSBibG9jay4gVFdJTiwgS0FBTiBTSU0gYW5kIGFkYXB0ZXIgSyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuCi0JaWYgKCAoKHByaXYtPmRldmljZV90eXBlICE9IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSAmJiAocHJpdi0+ZmlsbGVkID4gMikgJiYgKHByaXYtPmZpbGxlZCA+PSAocHJpdi0+YnVmWzFdICsgMykpKSB8fCAKLQkgICAgICgocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpICYmIChwcml2LT5maWxsZWQgPiAzKSAmJiAocHJpdi0+ZmlsbGVkID49IChwcml2LT5idWZbMl0gKyA0KSkpICkgewotCQkKLQkJLy8gc3RvcCByZWFkaW5nIChleGNlcHQgVFdJTiBhbmQgS0FBTiBTSU0pCi0JCWlmICggKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQpICkKKwkvKiBvbmx5IHNlbmQgY29tcGxldGUgYmxvY2suIFRXSU4sIEtBQU4gU0lNIGFuZCBhZGFwdGVyIEsKKwkgICB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuICovCisJaWYgKCgocHJpdi0+ZGV2aWNlX3R5cGUgIT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpICYmIChwcml2LT5maWxsZWQgPiAyKSAmJiAocHJpdi0+ZmlsbGVkID49IChwcml2LT5idWZbMV0gKyAzKSkpIHx8CisJICAgICAoKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSAmJiAocHJpdi0+ZmlsbGVkID4gMykgJiYgKHByaXYtPmZpbGxlZCA+PSAocHJpdi0+YnVmWzJdICsgNCkpKSkgeworCQkvKiBzdG9wIHJlYWRpbmcgKGV4Y2VwdCBUV0lOIGFuZCBLQUFOIFNJTSkgKi8KKwkJaWYgKChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRCkKKwkJCXx8IChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkpCiAJCQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CiAKIAkJdG9kbyA9IHByaXYtPmZpbGxlZCAtIHByaXYtPmN1cl9wb3M7CiAKLQkJd2hpbGUodG9kbyA+IDApIHsKLQkJCS8vIG1heCA4IGJ5dGUgaW4gb25lIHVyYiAoZW5kcG9pbnQgc2l6ZSkKKwkJd2hpbGUgKHRvZG8gPiAwKSB7CisJCQkvKiBtYXggOCBieXRlIGluIG9uZSB1cmIgKGVuZHBvaW50IHNpemUpICovCiAJCQlsZW5ndGggPSAodG9kbyA8IDgpID8gdG9kbyA6IDg7Ci0JCQkvLyBjb3B5IGRhdGEgdG8gdHJhbnNmZXIgYnVmZmVyCi0JCQltZW1jcHkocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHByaXYtPmJ1ZiArIHByaXYtPmN1cl9wb3MsIGxlbmd0aCApOwotCQkJdXNiX2ZpbGxfaW50X3VyYiggcG9ydC0+d3JpdGVfdXJiLAotCQkJCQkgIHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCQkgIHVzYl9zbmRpbnRwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2LT53cml0ZV9pbnRfZW5kcG9pbnRfYWRkcmVzcyksCi0JCQkJCSAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJCSAgbGVuZ3RoLAotCQkJCQkgIGtvYmlsX3dyaXRlX2NhbGxiYWNrLAotCQkJCQkgIHBvcnQsCi0JCQkJCSAgOAotCQkJCSk7CisJCQkvKiBjb3B5IGRhdGEgdG8gdHJhbnNmZXIgYnVmZmVyICovCisJCQltZW1jcHkocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCXByaXYtPmJ1ZiArIHByaXYtPmN1cl9wb3MsIGxlbmd0aCk7CisJCQl1c2JfZmlsbF9pbnRfdXJiKHBvcnQtPndyaXRlX3VyYiwKKwkJCQkgIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3NuZGludHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJCXByaXYtPndyaXRlX2ludF9lbmRwb2ludF9hZGRyZXNzKSwKKwkJCQkgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgbGVuZ3RoLAorCQkJCSAga29iaWxfd3JpdGVfY2FsbGJhY2ssCisJCQkJICBwb3J0LAorCQkJCSAgOAorCQkJKTsKIAogCQkJcHJpdi0+Y3VyX3BvcyA9IHByaXYtPmN1cl9wb3MgKyBsZW5ndGg7Ci0JCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiggcG9ydC0+d3JpdGVfdXJiLCBHRlBfTk9JTyApOwotCQkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCB3cml0ZSBVUkIgcmV0dXJuczogJWkiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfTk9JTyk7CisJCQlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHdyaXRlIFVSQiByZXR1cm5zOiAlaSIsCisJCQkJCV9fZnVuY19fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CiAJCQl0b2RvID0gcHJpdi0+ZmlsbGVkIC0gcHJpdi0+Y3VyX3BvczsKIAotCQkJaWYgKHRvZG8gPiAwKSB7CisJCQlpZiAodG9kbyA+IDApCiAJCQkJbXNsZWVwKDI0KTsKLQkJCX0KKwkJfQogCi0JCX0gLy8gZW5kIHdoaWxlCi0JCQogCQlwcml2LT5maWxsZWQgPSAwOwogCQlwcml2LT5jdXJfcG9zID0gMDsKIAotCQkvLyBzb21lb25lIHNldHMgdGhlIGRldiB0byAwIGlmIHRoZSBjbG9zZSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkCisJCS8qIHNvbWVvbmUgc2V0cyB0aGUgZGV2IHRvIDAgaWYgdGhlIGNsb3NlIG1ldGhvZAorCQkgICBoYXMgYmVlbiBjYWxsZWQgKi8KIAkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JCQotCQkvLyBzdGFydCByZWFkaW5nIChleGNlcHQgVFdJTiBhbmQgS0FBTiBTSU0pCi0JCWlmICggKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQpICkgewotCQkJLy8gc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZAorCisJCS8qIHN0YXJ0IHJlYWRpbmcgKGV4Y2VwdCBUV0lOIGFuZCBLQUFOIFNJTSkgKi8KKwkJaWYgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEIHx8CisJCQlwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkgeworCQkJLyogc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcworCQkJICAgYmVlbiBjYWxsZWQgKi8KIAkJCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCQkJCi0JCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiggcG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX05PSU8gKTsgCi0JCQlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHJlYWQgVVJCIHJldHVybnM6ICVpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKworCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwKKwkJCQkJCQkJR0ZQX05PSU8pOworCQkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCByZWFkIFVSQiByZXR1cm5zOiAlaSIsCisJCQkJCV9fZnVuY19fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CiAJCX0KIAl9CiAJcmV0dXJuIGNvdW50OwogfQogCiAKLXN0YXRpYyBpbnQga29iaWxfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQga29iaWxfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCS8vZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkvKiBkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOyAqLworCS8qIEZJWE1FICovCiAJcmV0dXJuIDg7CiB9CiAKIAotc3RhdGljIGludCBrb2JpbF90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQga29iaWxfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGtvYmlsX3ByaXZhdGUgKiBwcml2OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBrb2JpbF9wcml2YXRlICpwcml2OwogCWludCByZXN1bHQ7CiAJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOwogCWludCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gODsKIAogCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JaWYgKChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9VU0JUV0lOX1BST0RVQ1RfSUQpIHx8IChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEKSkgewotCQkvLyBUaGlzIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgaW9jdGwgY2FsbHMKKwlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lECisJCQl8fCBwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEKSB7CisJCS8qIFRoaXMgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBpb2N0bCBjYWxscyAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyYW5zZmVyIGJ1ZmZlcgorCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyICovCiAJdHJhbnNmZXJfYnVmZmVyID0ga3phbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgeworCWlmICghdHJhbnNmZXJfYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKLQkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKLQkJCQkgIFNVU0JDUmVxdWVzdF9HZXRTdGF0dXNMaW5lU3RhdGUsCi0JCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX0lOLAotCQkJCSAgMCwKLQkJCQkgIDAsCi0JCQkJICB0cmFuc2Zlcl9idWZmZXIsCi0JCQkJICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJCSAgS09CSUxfVElNRU9VVCk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICBTVVNCQ1JlcXVlc3RfR2V0U3RhdHVzTGluZVN0YXRlLAorCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX0lOLAorCQkJICAwLAorCQkJICAwLAorCQkJICB0cmFuc2Zlcl9idWZmZXIsCisJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgIEtPQklMX1RJTUVPVVQpOwogCi0JZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBnZXRfc3RhdHVzX2xpbmVfc3RhdGUgVVJCIHJldHVybnM6ICVpLiBTdGF0dXNsaW5lOiAlMDJ4IiwgCisJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBnZXRfc3RhdHVzX2xpbmVfc3RhdGUgVVJCIHJldHVybnM6ICVpLiBTdGF0dXNsaW5lOiAlMDJ4IiwKIAkgICAgX19mdW5jX18sIHBvcnQtPm51bWJlciwgcmVzdWx0LCB0cmFuc2Zlcl9idWZmZXJbMF0pOwogCiAJcmVzdWx0ID0gMDsKQEAgLTUyNCwxMCArNTU2LDExIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCAga29iaWxfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGtvYmlsX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewotCXN0cnVjdCBrb2JpbF9wcml2YXRlICogcHJpdjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqcHJpdjsKIAlpbnQgcmVzdWx0OwogCWludCBkdHIgPSAwOwogCWludCBydHMgPSAwOwpAQCAtNTM2LDE2ICs1NjksMTYgQEAKIAogCS8qIEZJWE1FOiBsb2NraW5nID8gKi8KIAlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWlmICgocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCkpIHsKLQkJLy8gVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGlvY3RsIGNhbGxzCisJaWYgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRAorCQl8fCBwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEKSB7CisJCS8qIFRoaXMgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBpb2N0bCBjYWxscyAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyYW5zZmVyIGJ1ZmZlcgorCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyICovCiAJdHJhbnNmZXJfYnVmZmVyID0ga3phbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAoISB0cmFuc2Zlcl9idWZmZXIpIHsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJaWYgKHNldCAmIFRJT0NNX1JUUykKIAkJcnRzID0gMTsKQEAgLTU1OCw2NiArNTkxLDc3IEBACiAKIAlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpIHsKIAkJaWYgKGR0ciAhPSAwKQotCQkJZGJnKCIlcyAtIHBvcnQgJWQgU2V0dGluZyBEVFIiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJCWRiZygiJXMgLSBwb3J0ICVkIFNldHRpbmcgRFRSIiwKKwkJCQkJCV9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCQllbHNlCi0JCQlkYmcoIiVzIC0gcG9ydCAlZCBDbGVhcmluZyBEVFIiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCi0JCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAotCQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRTdGF0dXNMaW5lc09yUXVldWVzLAotCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAotCQkJCQkgICgoZHRyICE9IDApID8gU1VTQkNSX1NTTF9TRVREVFIgOiBTVVNCQ1JfU1NMX0NMUkRUUiksCi0JCQkJCSAgMCwKLQkJCQkJICB0cmFuc2Zlcl9idWZmZXIsCi0JCQkJCSAgMCwKLQkJCQkJICBLT0JJTF9USU1FT1VUKTsKKwkJCWRiZygiJXMgLSBwb3J0ICVkIENsZWFyaW5nIERUUiIsCisJCQkJCQlfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICBTVVNCQ1JlcXVlc3RfU2V0U3RhdHVzTGluZXNPclF1ZXVlcywKKwkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCisJCQkgICgoZHRyICE9IDApID8gU1VTQkNSX1NTTF9TRVREVFIgOiBTVVNCQ1JfU1NMX0NMUkRUUiksCisJCQkgIDAsCisJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgMCwKKwkJCSAgS09CSUxfVElNRU9VVCk7CiAJfSBlbHNlIHsKIAkJaWYgKHJ0cyAhPSAwKQotCQkJZGJnKCIlcyAtIHBvcnQgJWQgU2V0dGluZyBSVFMiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJCWRiZygiJXMgLSBwb3J0ICVkIFNldHRpbmcgUlRTIiwKKwkJCQkJCV9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCQllbHNlCi0JCQlkYmcoIiVzIC0gcG9ydCAlZCBDbGVhcmluZyBSVFMiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCi0JCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAotCQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRTdGF0dXNMaW5lc09yUXVldWVzLAotCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAotCQkJCQkgICgocnRzICE9IDApID8gU1VTQkNSX1NTTF9TRVRSVFMgOiBTVVNCQ1JfU1NMX0NMUlJUUyksCi0JCQkJCSAgMCwKLQkJCQkJICB0cmFuc2Zlcl9idWZmZXIsCi0JCQkJCSAgMCwKLQkJCQkJICBLT0JJTF9USU1FT1VUKTsKKwkJCWRiZygiJXMgLSBwb3J0ICVkIENsZWFyaW5nIFJUUyIsCisJCQkJCQlfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCVNVU0JDUmVxdWVzdF9TZXRTdGF0dXNMaW5lc09yUXVldWVzLAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCisJCQkoKHJ0cyAhPSAwKSA/IFNVU0JDUl9TU0xfU0VUUlRTIDogU1VTQkNSX1NTTF9DTFJSVFMpLAorCQkJMCwKKwkJCXRyYW5zZmVyX2J1ZmZlciwKKwkJCTAsCisJCQlLT0JJTF9USU1FT1VUKTsKIAl9Ci0JZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBzZXRfc3RhdHVzX2xpbmUgVVJCIHJldHVybnM6ICVpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHNldF9zdGF0dXNfbGluZSBVUkIgcmV0dXJuczogJWkiLAorCQkJCQlfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOwogCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CiAJcmV0dXJuIChyZXN1bHQgPCAwKSA/IHJlc3VsdCA6IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGtvYmlsX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkKQorc3RhdGljIHZvaWQga29iaWxfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewotCXN0cnVjdCBrb2JpbF9wcml2YXRlICogcHJpdjsKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqcHJpdjsKIAlpbnQgcmVzdWx0OwogCXVuc2lnbmVkIHNob3J0IHVyYl92YWwgPSAwOwotCWludCBjX2NmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWludCBjX2NmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCXNwZWVkX3Qgc3BlZWQ7Ci0Jdm9pZCAqIHNldHRpbmdzOworCXZvaWQgKnNldHRpbmdzOwogCiAJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEIHx8IHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0tBQU5fU0lNX1BST0RVQ1RfSUQpCi0JCS8vIFRoaXMgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBpb2N0bCBjYWxscworCWlmIChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9VU0JUV0lOX1BST0RVQ1RfSUQgfHwKKwkJCXByaXYtPmRldmljZV90eXBlID09IEtPQklMX0tBQU5fU0lNX1BST0RVQ1RfSUQpIHsKKwkJLyogVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGlvY3RsIGNhbGxzICovCisJCSp0dHktPnRlcm1pb3MgPSAqb2xkOwogCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHNwZWVkID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KSkgewotCQljYXNlIDEyMDA6Ci0JCQl1cmJfdmFsID0gU1VTQkNSX1NCUl8xMjAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzcGVlZCA9IDk2MDA7Ci0JCWNhc2UgOTYwMDoKLQkJCXVyYl92YWwgPSBTVVNCQ1JfU0JSXzk2MDA7Ci0JCQlicmVhazsKIAl9Ci0JdXJiX3ZhbCB8PSAoY19jZmxhZyAmIENTVE9QQikgPyBTVVNCQ1JfU1BBU0JfMlN0b3BCaXRzIDogU1VTQkNSX1NQQVNCXzFTdG9wQml0OworCisJc3BlZWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIDEyMDA6CisJCXVyYl92YWwgPSBTVVNCQ1JfU0JSXzEyMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwZWVkID0gOTYwMDsKKwljYXNlIDk2MDA6CisJCXVyYl92YWwgPSBTVVNCQ1JfU0JSXzk2MDA7CisJCWJyZWFrOworCX0KKwl1cmJfdmFsIHw9IChjX2NmbGFnICYgQ1NUT1BCKSA/IFNVU0JDUl9TUEFTQl8yU3RvcEJpdHMgOgorCQkJCQkJCVNVU0JDUl9TUEFTQl8xU3RvcEJpdDsKIAogCXNldHRpbmdzID0ga3phbGxvYyg1MCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEgc2V0dGluZ3MpCisJaWYgKCFzZXR0aW5ncykKIAkJcmV0dXJuOwogCiAJc3ByaW50ZihzZXR0aW5ncywgIiVkICIsIHNwZWVkKTsKQEAgLTYzNCw2NiArNjc4LDY5IEBACiAJCXVyYl92YWwgfD0gU1VTQkNSX1NQQVNCX05vUGFyaXR5OwogCQlzdHJjYXQoc2V0dGluZ3MsICJObyBQYXJpdHkiKTsKIAl9Ci0JcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICY9IH5DTVNQQVI7Ci0JdHR5X2VuY29kZV9iYXVkX3JhdGUocG9ydC0+dHR5LCBzcGVlZCwgc3BlZWQpOworCXR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOworCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgc3BlZWQsIHNwZWVkKTsKIAotCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsCi0JCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwKLQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRCYXVkUmF0ZVBhcml0eUFuZFN0b3BCaXRzLAotCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCi0JCQkJICB1cmJfdmFsLAotCQkJCSAgMCwKLQkJCQkgIHNldHRpbmdzLAotCQkJCSAgMCwKLQkJCQkgIEtPQklMX1RJTUVPVVQKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJICBTVVNCQ1JlcXVlc3RfU2V0QmF1ZFJhdGVQYXJpdHlBbmRTdG9wQml0cywKKwkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJICB1cmJfdmFsLAorCQkgIDAsCisJCSAgc2V0dGluZ3MsCisJCSAgMCwKKwkJICBLT0JJTF9USU1FT1VUCiAJCSk7CiAJa2ZyZWUoc2V0dGluZ3MpOwogfQogCi1zdGF0aWMgaW50IGtvYmlsX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGtvYmlsX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqIHByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGtvYmlsX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOwogCWludCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gODsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRCB8fCBwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEKQotCQkvLyBUaGlzIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgaW9jdGwgY2FsbHMKLQkJcmV0dXJuIDA7CisJaWYgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRCB8fAorCQkJcHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCkKKwkJLyogVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGlvY3RsIGNhbGxzICovCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVENGTFNIOiAgIC8vIDB4NTQwQgorCWNhc2UgVENGTFNIOgogCQl0cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpOwotCQlpZiAoISB0cmFuc2Zlcl9idWZmZXIpCi0JCSAJcmV0dXJuIC1FTk9CVUZTOworCQlpZiAoIXRyYW5zZmVyX2J1ZmZlcikKKwkJCXJldHVybiAtRU5PQlVGUzsKIAotCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKLQkJIAkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAotCQkJCQkgIFNVU0JDUmVxdWVzdF9NaXNjLAotCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAotCQkJCQkgIFNVU0JDUl9NU0NfUmVzZXRBbGxRdWV1ZXMsCi0JCQkJCSAgMCwKLQkJCQkJICBOVUxMLC8vdHJhbnNmZXJfYnVmZmVyLAotCQkJCQkgIDAsCi0JCQkJCSAgS09CSUxfVElNRU9VVAorCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgIFNVU0JDUmVxdWVzdF9NaXNjLAorCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCSAgU1VTQkNSX01TQ19SZXNldEFsbFF1ZXVlcywKKwkJCSAgMCwKKwkJCSAgTlVMTCwgLyogdHJhbnNmZXJfYnVmZmVyLCAqLworCQkJICAwLAorCQkJICBLT0JJTF9USU1FT1VUCiAJCQkpOwotCQkKKwogCQlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHJlc2V0X2FsbF9xdWV1ZXMgKEZMVVNIKSBVUkIgcmV0dXJuczogJWkiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOwogCQlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOwotCQlyZXR1cm4gKHJlc3VsdCA8IDApID8gLUVGQVVMVCA6IDA7CisJCXJldHVybiAocmVzdWx0IDwgMCkgPyAtRUlPOiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQogfQogCi1zdGF0aWMgaW50IF9faW5pdCBrb2JpbF9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQga29iaWxfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma29iaWxfZGV2aWNlKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOwogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma29iaWxfZHJpdmVyKTsKLQlpZiAocmV0dmFsKSAKKwlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKIAlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKQEAgLTcwNywxOCArNzU0LDE4IEBACiB9CiAKIAotc3RhdGljIHZvaWQgX19leGl0IGtvYmlsX2V4aXQgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQga29iaWxfZXhpdCh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgma29iaWxfZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrb2JpbF9kZXZpY2UpOworCXVzYl9kZXJlZ2lzdGVyKCZrb2JpbF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma29iaWxfZGV2aWNlKTsKIH0KIAogbW9kdWxlX2luaXQoa29iaWxfaW5pdCk7CiBtb2R1bGVfZXhpdChrb2JpbF9leGl0KTsKIAotTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOwotTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOwotTU9EVUxFX0xJQ0VOU0UoICJHUEwiICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKaW5kZXggNWZjMmNlZi4uMGRlZDhiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKQEAgLTMzLDEwICszMywxMSBAQAogICogICAtIEZpeGVkIGFuIGVuZGlhbmVzcyBwcm9ibGVtIHdpdGggdGhlIGJhdWRyYXRlIHNlbGVjdGlvbiBmb3IgUG93ZXJQQy4KICAqCiAgKiAwNi1EZWMtMjAwMSBNYXJ0aW4gSGFtaWx0b24gPG1hcnRpbmhAZ251Lm9yZz4KLSAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBCZWxraW4gRjVVMTA5IERCOSBhZGFwdG9yCisgKiAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEJlbGtpbiBGNVUxMDkgREI5IGFkYXB0b3IKICAqCiAgKiAzMC1NYXktMjAwMSBHcmVnIEtyb2FoLUhhcnRtYW4KLSAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKiAgIC0gc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZgorICogICAgIHByb2JsZW1zLgogICoKICAqIDA0LU1heS0yMDAxIFN0ZWxpYW4gUG9wCiAgKiAgIC0gU2V0IHRoZSBtYXhpbXVtIGJ1bGsgb3V0cHV0IHNpemUgZm9yIFNpdGVjb20gVTIzMi1QMjUgbW9kZWwgdG8gMTYgYnl0ZXMKQEAgLTQ5LDcgKzUwLDcgQEAKICAqIDA4LUFwci0yMDAxIGdiCiAgKiAgIC0gSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KICAqCi0gKiAwNi1KYW4tMjAwMSBDb3JuZWwgQ2lvY2lybGFuIAorICogMDYtSmFuLTIwMDEgQ29ybmVsIENpb2NpcmxhbgogICogICAtIEFkZGVkIHN1cHBvcnQgZm9yIFNpdGVjb20gVTIzMi1QMjUgbW9kZWwgKFByb2R1Y3QgSWQgMHgwMjMwKQogICogICAtIEFkZGVkIHN1cHBvcnQgZm9yIEQtTGluayBEVS1IM1NQIFVTQiBCQVkgKFByb2R1Y3QgSWQgMHgwMjAwKQogICoKQEAgLTU5LDggKzYwLDggQEAKICAqICAgICAobG90cyBvZiB0aGluZ3Mgd2lsbCBjaGFuZ2UgaWYvd2hlbiB0aGUgdXNiLXNlcmlhbCBjb3JlIGNoYW5nZXMgdG8KICAqICAgICBoYW5kbGUgdGhlc2UgaXNzdWVzLgogICoKLSAqIDI3LU5vdi0yMDAwIFdvbGZnYW5nIEdyYW5kZWdnZXIKLSAqICAgQSB2ZXJzaW9uIGZvciBrZXJuZWwgMi40LjAtdGVzdDEwIHJlbGVhc2VkIHRvIHRoZSBMaW51eCBjb21tdW5pdHkgCisgKiAyNy1Ob3YtMjAwMCBXb2xmZ2FuZyBHcmFuZGVnZ2UKKyAqICAgQSB2ZXJzaW9uIGZvciBrZXJuZWwgMi40LjAtdGVzdDEwIHJlbGVhc2VkIHRvIHRoZSBMaW51eCBjb21tdW5pdHkKICAqICAgKHZpYSBsaW51eC11c2ItZGV2ZWwpLgogICovCiAKQEAgLTczLDcgKzc0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogI2luY2x1ZGUgIm1jdF91MjMyLmgiCkBAIC05MCwyOCArOTEsMjEgQEAKIC8qCiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzCiAgKi8KLXN0YXRpYyBpbnQgIG1jdF91MjMyX3N0YXJ0dXAJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIHZvaWQgbWN0X3UyMzJfc2h1dGRvd24JICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCAgbWN0X3UyMzJfb3BlbgkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBtY3RfdTIzMl9jbG9zZQkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjayAgIChzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgbWN0X3UyMzJfc2V0X3Rlcm1pb3MgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpOwotc3RhdGljIGludCAgbWN0X3UyMzJfaW9jdGwJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCSAgc3RydWN0IGZpbGUgKiBmaWxlLAotCQkJCQkgIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQgbWN0X3UyMzJfYnJlYWtfY3RsCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkgIGludCBicmVha19zdGF0ZSApOwotc3RhdGljIGludCAgbWN0X3UyMzJfdGlvY21nZXQJCSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgaW50ICBtY3RfdTIzMl90aW9jbXNldAkJIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LAotCQkJCQkgIHVuc2lnbmVkIGludCBjbGVhcik7Ci1zdGF0aWMgdm9pZCBtY3RfdTIzMl90aHJvdHRsZQkJIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIG1jdF91MjMyX3VudGhyb3R0bGUJCSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgbWN0X3UyMzJfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBtY3RfdTIzMl9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgbWN0X3UyMzJfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CitzdGF0aWMgdm9pZCBtY3RfdTIzMl9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgIG1jdF91MjMyX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIG1jdF91MjMyX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQgbWN0X3UyMzJfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogCiAvKgpAQCAtMTI1LDcgKzExOSw3IEBACiAJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbWN0X3UyMzJfZHJpdmVyID0gewogCS5uYW1lID0JCSJtY3RfdTIzMiIsCkBAIC0xNDksNyArMTQzLDYgQEAKIAkudGhyb3R0bGUgPQkgICAgIG1jdF91MjMyX3Rocm90dGxlLAogCS51bnRocm90dGxlID0JICAgICBtY3RfdTIzMl91bnRocm90dGxlLAogCS5yZWFkX2ludF9jYWxsYmFjayA9IG1jdF91MjMyX3JlYWRfaW50X2NhbGxiYWNrLAotCS5pb2N0bCA9CSAgICAgbWN0X3UyMzJfaW9jdGwsCiAJLnNldF90ZXJtaW9zID0JICAgICBtY3RfdTIzMl9zZXRfdGVybWlvcywKIAkuYnJlYWtfY3RsID0JICAgICBtY3RfdTIzMl9icmVha19jdGwsCiAJLnRpb2NtZ2V0ID0JICAgICBtY3RfdTIzMl90aW9jbWdldCwKQEAgLTE4MCwyMyArMTczLDM0IEBACiAgKiBMYXRlciBkYXkgMi42LjAtdGVzdCBrZXJuZWxzIGhhdmUgbmV3IGJhdWQgcmF0ZXMgbGlrZSBCMjMwNDAwIHdoaWNoCiAgKiB3ZSBkbyBub3Qga25vdyBob3cgdG8gc3VwcG9ydC4gV2UgaWdub3JlIHRoZW0gZm9yIHRoZSBtb21lbnQuCiAgKi8KLXN0YXRpYyBpbnQgbWN0X3UyMzJfY2FsY3VsYXRlX2JhdWRfcmF0ZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBzcGVlZF90IHZhbHVlLCBzcGVlZF90ICpyZXN1bHQpCitzdGF0aWMgaW50IG1jdF91MjMyX2NhbGN1bGF0ZV9iYXVkX3JhdGUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkJc3BlZWRfdCB2YWx1ZSwgc3BlZWRfdCAqcmVzdWx0KQogewogCSpyZXN1bHQgPSB2YWx1ZTsKIAogCWlmIChsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IE1DVF9VMjMyX1NJVEVDT01fUElECi0JICB8fCBsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IE1DVF9VMjMyX0JFTEtJTl9GNVUxMDlfUElEKSB7CisJCXx8IGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gTUNUX1UyMzJfQkVMS0lOX0Y1VTEwOV9QSUQpIHsKIAkJc3dpdGNoICh2YWx1ZSkgewotCQljYXNlICAgIDMwMDogcmV0dXJuIDB4MDE7Ci0JCWNhc2UgICAgNjAwOiByZXR1cm4gMHgwMjsgLyogdGhpcyBvbmUgbm90IHRlc3RlZCAqLwotCQljYXNlICAgMTIwMDogcmV0dXJuIDB4MDM7Ci0JCWNhc2UgICAyNDAwOiByZXR1cm4gMHgwNDsKLQkJY2FzZSAgIDQ4MDA6IHJldHVybiAweDA2OwotCQljYXNlICAgOTYwMDogcmV0dXJuIDB4MDg7Ci0JCWNhc2UgIDE5MjAwOiByZXR1cm4gMHgwOTsKLQkJY2FzZSAgMzg0MDA6IHJldHVybiAweDBhOwotCQljYXNlICA1NzYwMDogcmV0dXJuIDB4MGI7Ci0JCWNhc2UgMTE1MjAwOiByZXR1cm4gMHgwYzsKKwkJY2FzZSAzMDA6CisJCQlyZXR1cm4gMHgwMTsKKwkJY2FzZSA2MDA6CisJCQlyZXR1cm4gMHgwMjsgLyogdGhpcyBvbmUgbm90IHRlc3RlZCAqLworCQljYXNlIDEyMDA6CisJCQlyZXR1cm4gMHgwMzsKKwkJY2FzZSAyNDAwOgorCQkJcmV0dXJuIDB4MDQ7CisJCWNhc2UgNDgwMDoKKwkJCXJldHVybiAweDA2OworCQljYXNlIDk2MDA6CisJCQlyZXR1cm4gMHgwODsKKwkJY2FzZSAxOTIwMDoKKwkJCXJldHVybiAweDA5OworCQljYXNlIDM4NDAwOgorCQkJcmV0dXJuIDB4MGE7CisJCWNhc2UgNTc2MDA6CisJCQlyZXR1cm4gMHgwYjsKKwkJY2FzZSAxMTUyMDA6CisJCQlyZXR1cm4gMHgwYzsKIAkJZGVmYXVsdDoKIAkJCSpyZXN1bHQgPSA5NjAwOwogCQkJcmV0dXJuIDB4MDg7CkBAIC0yMjQsMjYgKzIyOCwyNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBtY3RfdTIzMl9zZXRfYmF1ZF9yYXRlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJICBzcGVlZF90IHZhbHVlKQorc3RhdGljIGludCBtY3RfdTIzMl9zZXRfYmF1ZF9yYXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3BlZWRfdCB2YWx1ZSkKIHsKIAlfX2xlMzIgZGl2aXNvcjsKLSAgICAgICAgaW50IHJjOwotICAgICAgICB1bnNpZ25lZCBjaGFyIHplcm9fYnl0ZSA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgY3RzX2VuYWJsZV9ieXRlID0gMDsKLSAgICAgICAgc3BlZWRfdCBzcGVlZDsKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciB6ZXJvX2J5dGUgPSAwOworCXVuc2lnbmVkIGNoYXIgY3RzX2VuYWJsZV9ieXRlID0gMDsKKwlzcGVlZF90IHNwZWVkOwogCi0JZGl2aXNvciA9IGNwdV90b19sZTMyKG1jdF91MjMyX2NhbGN1bGF0ZV9iYXVkX3JhdGUoc2VyaWFsLCB2YWx1ZSwgJnNwZWVkKSk7CisJZGl2aXNvciA9IGNwdV90b19sZTMyKG1jdF91MjMyX2NhbGN1bGF0ZV9iYXVkX3JhdGUoc2VyaWFsLCB2YWx1ZSwKKwkJCQkJCQkJJnNwZWVkKSk7CiAKLSAgICAgICAgcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfUkVRVUVTVCwKLQkJCSAgICAgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgJmRpdmlzb3IsIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSwKLQkJCSAgICAgV0RSX1RJTUVPVVQpOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCU1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfUkVRVUVTVCwKKwkJCQlNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAorCQkJCTAsIDAsICZkaXZpc29yLCBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1NJWkUsCisJCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCS8qRklYTUU6IFdoYXQgdmFsdWUgc3BlZWQgcmVzdWx0cyAqLwogCQllcnIoIlNldCBCQVVEIFJBVEUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHZhbHVlLCByYyk7CiAJZWxzZQotCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShwb3J0LT50dHksIHNwZWVkLCBzcGVlZCk7CisJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgc3BlZWQsIHNwZWVkKTsKIAlkYmcoInNldF9iYXVkX3JhdGU6IHZhbHVlOiAweCV4LCBkaXZpc29yOiAweCV4IiwgdmFsdWUsIGRpdmlzb3IpOwogCiAJLyogTWltaWMgdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzIGRyaXZlciAodmVyc2lvbiAxLjIxUC4wMTA0KSwgd2hpY2gKQEAgLTI1OCw1NSArMjYzLDU1IEBACiAJICAgd2hldGhlciBkYXRhIHdpbGwgYmUgdHJhbnNtaXR0ZWQgdG8gYSBkZXZpY2Ugd2hpY2ggaXMgbm90IGFzc2VydGluZwogCSAgIHRoZSAnQ1RTJyBzaWduYWwuICBJZiB0aGUgc2Vjb25kIG1lc3NhZ2UncyBkYXRhIGJ5dGUgaXMgemVybywgZGF0YQogCSAgIHdpbGwgYmUgdHJhbnNtaXR0ZWQgZXZlbiBpZiAnQ1RTJyBpcyBub3QgYXNzZXJ0ZWQgKGkuZS4gbm8gaGFyZHdhcmUKLQkgICBmbG93IGNvbnRyb2wpLiAgaWYgdGhlIHNlY29uZCBtZXNzYWdlJ3MgZGF0YSBieXRlIGlzIG5vbnplcm8gKGEgdmFsdWUKLQkgICBvZiAxIGlzIHVzZWQgYnkgdGhpcyBkcml2ZXIpLCBkYXRhIHdpbGwgbm90IGJlIHRyYW5zbWl0dGVkIHRvIGEgZGV2aWNlCi0JICAgd2hpY2ggaXMgbm90IGFzc2VydGluZyAnQ1RTJy4KKwkgICBmbG93IGNvbnRyb2wpLiAgaWYgdGhlIHNlY29uZCBtZXNzYWdlJ3MgZGF0YSBieXRlIGlzIG5vbnplcm8gKGEKKwkgICB2YWx1ZSBvZiAxIGlzIHVzZWQgYnkgdGhpcyBkcml2ZXIpLCBkYXRhIHdpbGwgbm90IGJlIHRyYW5zbWl0dGVkIHRvCisJICAgYSBkZXZpY2Ugd2hpY2ggaXMgbm90IGFzc2VydGluZyAnQ1RTJy4KIAkqLwogCiAJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkgICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULCAKLQkJCSAgICAgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKLQkJCSAgICAgMCwgMCwgJnplcm9fYnl0ZSwgTUNUX1UyMzJfU0VUX1VOS05PV04xX1NJWkUsIAotCQkJICAgICBXRFJfVElNRU9VVCk7CisJCQkJTUNUX1UyMzJfU0VUX1VOS05PV04xX1JFUVVFU1QsCisJCQkJTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKKwkJCQkwLCAwLCAmemVyb19ieXRlLCBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfU0laRSwKKwkJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCAKKwkJZXJyKCJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLAogCQkgICAgTUNUX1UyMzJfU0VUX1VOS05PV04xX1JFUVVFU1QsIHJjKTsKIAotCWlmIChwb3J0ICYmIENfQ1JUU0NUUyhwb3J0LT50dHkpKSB7CisJaWYgKHBvcnQgJiYgQ19DUlRTQ1RTKHR0eSkpCiAJICAgY3RzX2VuYWJsZV9ieXRlID0gMTsKLQl9CiAKLSAgICAgICAgZGJnKCJzZXRfYmF1ZF9yYXRlOiBzZW5kIHNlY29uZCBjb250cm9sIG1lc3NhZ2UsIGRhdGEgPSAlMDJYIiwgY3RzX2VuYWJsZV9ieXRlKTsKKwlkYmcoInNldF9iYXVkX3JhdGU6IHNlbmQgc2Vjb25kIGNvbnRyb2wgbWVzc2FnZSwgZGF0YSA9ICUwMlgiLAorCQkJCQkJCWN0c19lbmFibGVfYnl0ZSk7CiAJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkgICAgIE1DVF9VMjMyX1NFVF9DVFNfUkVRVUVTVCwKLQkJCSAgICAgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKLQkJCSAgICAgMCwgMCwgJmN0c19lbmFibGVfYnl0ZSwgTUNUX1UyMzJfU0VUX0NUU19TSVpFLAotCQkJICAgICBXRFJfVElNRU9VVCk7CisJCQlNQ1RfVTIzMl9TRVRfQ1RTX1JFUVVFU1QsCisJCQlNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAorCQkJMCwgMCwgJmN0c19lbmFibGVfYnl0ZSwgTUNUX1UyMzJfU0VUX0NUU19TSVpFLAorCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JICBlcnIoIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsCi0JICAgICAgTUNUX1UyMzJfU0VUX0NUU19SRVFVRVNULCByYyk7CisJCWVycigiU2VuZGluZyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwKKwkJCQkJTUNUX1UyMzJfU0VUX0NUU19SRVFVRVNULCByYyk7CiAKLSAgICAgICAgcmV0dXJuIHJjOworCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfc2V0X2JhdWRfcmF0ZSAqLwogCiBzdGF0aWMgaW50IG1jdF91MjMyX3NldF9saW5lX2N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgY2hhciBsY3IpCiB7Ci0gICAgICAgIGludCByYzsKLSAgICAgICAgcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfUkVRVUVTVCwKLQkJCSAgICAgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgJmxjciwgTUNUX1UyMzJfU0VUX0xJTkVfQ1RSTF9TSVpFLAotCQkJICAgICBXRFJfVElNRU9VVCk7CisJaW50IHJjOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJTUNUX1UyMzJfU0VUX0xJTkVfQ1RSTF9SRVFVRVNULAorCQkJTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKKwkJCTAsIDAsICZsY3IsIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfU0laRSwKKwkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQogCQllcnIoIlNldCBMSU5FIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpIiwgbGNyLCByYyk7CiAJZGJnKCJzZXRfbGluZV9jdHJsOiAweCV4IiwgbGNyKTsKLSAgICAgICAgcmV0dXJuIHJjOworCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfc2V0X2xpbmVfY3RybCAqLwogCiBzdGF0aWMgaW50IG1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCiAJCQkJICAgdW5zaWduZWQgaW50IGNvbnRyb2xfc3RhdGUpCiB7Ci0gICAgICAgIGludCByYzsKKwlpbnQgcmM7CiAJdW5zaWduZWQgY2hhciBtY3IgPSBNQ1RfVTIzMl9NQ1JfTk9ORTsKIAogCWlmIChjb250cm9sX3N0YXRlICYgVElPQ01fRFRSKQpAQCAtMzE0LDM3ICszMTksMzkgQEAKIAlpZiAoY29udHJvbF9zdGF0ZSAmIFRJT0NNX1JUUykKIAkJbWNyIHw9IE1DVF9VMjMyX01DUl9SVFM7CiAKLSAgICAgICAgcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QsCi0JCQkgICAgIE1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZtY3IsIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1NJWkUsCi0JCQkgICAgIFdEUl9USU1FT1VUKTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCU1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QsCisJCQlNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAorCQkJMCwgMCwgJm1jciwgTUNUX1UyMzJfU0VUX01PREVNX0NUUkxfU0laRSwKKwkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQogCQllcnIoIlNldCBNT0RFTSBDVFJMIDB4JXggZmFpbGVkIChlcnJvciA9ICVkKSIsIG1jciwgcmMpOwogCWRiZygic2V0X21vZGVtX2N0cmw6IHN0YXRlPTB4JXggPT0+IG1jcj0weCV4IiwgY29udHJvbF9zdGF0ZSwgbWNyKTsKIAotICAgICAgICByZXR1cm4gcmM7CisJcmV0dXJuIHJjOwogfSAvKiBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybCAqLwogCi1zdGF0aWMgaW50IG1jdF91MjMyX2dldF9tb2RlbV9zdGF0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGNoYXIgKm1zcikKK3N0YXRpYyBpbnQgbWN0X3UyMzJfZ2V0X21vZGVtX3N0YXQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkJCXVuc2lnbmVkIGNoYXIgKm1zcikKIHsKLSAgICAgICAgaW50IHJjOwotICAgICAgICByYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNUX1UyMzJfR0VUX01PREVNX1NUQVRfUkVRVUVTVCwKLQkJCSAgICAgTUNUX1UyMzJfR0VUX1JFUVVFU1RfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgbXNyLCBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9TSVpFLAotCQkJICAgICBXRFJfVElNRU9VVCk7CisJaW50IHJjOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJTUNUX1UyMzJfR0VUX01PREVNX1NUQVRfUkVRVUVTVCwKKwkJCU1DVF9VMjMyX0dFVF9SRVFVRVNUX1RZUEUsCisJCQkwLCAwLCBtc3IsIE1DVF9VMjMyX0dFVF9NT0RFTV9TVEFUX1NJWkUsCisJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkgewogCQllcnIoIkdldCBNT0RFTSBTVEFUdXMgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKIAkJKm1zciA9IDA7CiAJfQogCWRiZygiZ2V0X21vZGVtX3N0YXQ6IDB4JXgiLCAqbXNyKTsKLSAgICAgICAgcmV0dXJuIHJjOworCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfZ2V0X21vZGVtX3N0YXQgKi8KIAotc3RhdGljIHZvaWQgbWN0X3UyMzJfbXNyX3RvX3N0YXRlKHVuc2lnbmVkIGludCAqY29udHJvbF9zdGF0ZSwgdW5zaWduZWQgY2hhciBtc3IpCitzdGF0aWMgdm9pZCBtY3RfdTIzMl9tc3JfdG9fc3RhdGUodW5zaWduZWQgaW50ICpjb250cm9sX3N0YXRlLAorCQkJCQkJdW5zaWduZWQgY2hhciBtc3IpCiB7Ci0gCS8qIFRyYW5zbGF0ZSBDb250cm9sIExpbmUgc3RhdGVzICovCisJLyogVHJhbnNsYXRlIENvbnRyb2wgTGluZSBzdGF0ZXMgKi8KIAlpZiAobXNyICYgTUNUX1UyMzJfTVNSX0RTUikKIAkJKmNvbnRyb2xfc3RhdGUgfD0gIFRJT0NNX0RTUjsKIAllbHNlCkBAIC0zNjEsMTQgKzM2OCwxNCBAQAogCQkqY29udHJvbF9zdGF0ZSB8PSAgVElPQ01fQ0Q7CiAJZWxzZQogCQkqY29udHJvbF9zdGF0ZSAmPSB+VElPQ01fQ0Q7Ci0gCWRiZygibXNyX3RvX3N0YXRlOiBtc3I9MHgleCA9PT4gc3RhdGU9MHgleCIsIG1zciwgKmNvbnRyb2xfc3RhdGUpOworCWRiZygibXNyX3RvX3N0YXRlOiBtc3I9MHgleCA9PT4gc3RhdGU9MHgleCIsIG1zciwgKmNvbnRyb2xfc3RhdGUpOwogfSAvKiBtY3RfdTIzMl9tc3JfdG9fc3RhdGUgKi8KIAogLyoKICAqIERyaXZlcidzIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIGludCBtY3RfdTIzMl9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBtY3RfdTIzMl9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgKnJwb3J0OwpAQCAtMzkwLDE4ICszOTcsMTggQEAKIAlycG9ydC0+aW50ZXJydXB0X2luX3VyYiA9IE5VTEw7CiAJcG9ydC0+cmVhZF91cmItPmNvbnRleHQgPSBwb3J0OwogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0gLyogbWN0X3UyMzJfc3RhcnR1cCAqLwogCiAKLXN0YXRpYyB2b2lkIG1jdF91MjMyX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgbWN0X3UyMzJfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdjsKIAlpbnQgaTsKLQkKKwogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQkvKiBNeSBzcGVjaWFsIGl0ZW1zLCB0aGUgc3RhbmRhcmQgcm91dGluZXMgZnJlZSBteSB1cmJzICovCiAJCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKIAkJaWYgKHByaXYpIHsKQEAgLTQxMSw3ICs0MTgsOCBAQAogCX0KIH0gLyogbWN0X3UyMzJfc2h1dGRvd24gKi8KIAotc3RhdGljIGludCAgbWN0X3UyMzJfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50ICBtY3RfdTIzMl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtNDI4LDIxICs0MzYsMjIgQEAKIAkgKiBpdCBzZWVtcyB0byBiZSBhYmxlIHRvIGFjY2VwdCBvbmx5IDE2IGJ5dGVzIChhbmQgdGhhdCdzIHdoYXQKIAkgKiBTbmlmZlVTQiBzYXlzIHRvby4uLikKIAkgKi8KLQlpZiAobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBNQ1RfVTIzMl9TSVRFQ09NX1BJRCkKKwlpZiAobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KQorCQkJCQkJPT0gTUNUX1UyMzJfU0lURUNPTV9QSUQpCiAJCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSAxNjsKIAotCS8qIERvIGEgZGVmaW5lZCByZXN0YXJ0OiB0aGUgbm9ybWFsIHNlcmlhbCBkZXZpY2Ugc2VlbXMgdG8gCisJLyogRG8gYSBkZWZpbmVkIHJlc3RhcnQ6IHRoZSBub3JtYWwgc2VyaWFsIGRldmljZSBzZWVtcyB0bwogCSAqIGFsd2F5cyB0dXJuIG9uIERUUiBhbmQgUlRTIGhlcmUsIHNvIGRvIHRoZSBzYW1lLiBJJ20gbm90CiAJICogc3VyZSBpZiB0aGlzIGlzIHJlYWxseSBuZWNlc3NhcnkuIEJ1dCBpdCBzaG91bGQgbm90IGhhcm0KIAkgKiBlaXRoZXIuCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpCisJaWYgKHR0eSAmJiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpKQogCQlwcml2LT5jb250cm9sX3N0YXRlID0gVElPQ01fRFRSIHwgVElPQ01fUlRTOwogCWVsc2UKIAkJcHJpdi0+Y29udHJvbF9zdGF0ZSA9IDA7Ci0JCi0JcHJpdi0+bGFzdF9sY3IgPSAoTUNUX1UyMzJfREFUQV9CSVRTXzggfCAKKworCXByaXYtPmxhc3RfbGNyID0gKE1DVF9VMjMyX0RBVEFfQklUU184IHwKIAkJCSAgTUNUX1UyMzJfUEFSSVRZX05PTkUgfAogCQkJICBNQ1RfVTIzMl9TVE9QX0JJVFNfMSk7CiAJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7CkBAIC00ODEsMTUgKzQ5MCwxNiBAQAogfSAvKiBtY3RfdTIzMl9vcGVuICovCiAKIAotc3RhdGljIHZvaWQgbWN0X3UyMzJfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgbWN0X3UyMzJfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXVuc2lnbmVkIGludCBjX2NmbGFnOwogCXVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlOwogCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWRiZygiJXMgcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0gICAJaWYgKHBvcnQtPnR0eSkgewotCQljX2NmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWlmICh0dHkpIHsKKwkJY19jZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAkJbXV0ZXhfbG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKIAkJaWYgKGNfY2ZsYWcgJiBIVVBDTCAmJiAhcG9ydC0+c2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKIAkJCS8qIGRyb3AgRFRSIGFuZCBSVFMgKi8KQEAgLTUxMiw3ICs1MjIsNyBAQAogfSAvKiBtY3RfdTIzMl9jbG9zZSAqLwogCiAKLXN0YXRpYyB2b2lkIG1jdF91MjMyX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTU0NSwzNiArNTU1LDM0IEBACiAJCXJldHVybjsKIAl9CiAKLSAgICAgICAgZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAogCS8qCiAJICogV29yay1hLXJvdW5kOiBoYW5kbGUgdGhlICd1c3VhbCcgYnVsay1pbiBwaXBlIGhlcmUKIAkgKi8KIAlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMikgewotCQlpbnQgaTsKLQkJdHR5ID0gcG9ydC0+dHR5OworCQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgewotCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7Ci0JCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCX0KIAkJZ290byBleGl0OwogCX0KLQkKKwogCS8qCiAJICogVGhlIGludGVycnVwdC1pbiBwaXBlIHNpZ25hbHMgZXhjZXB0aW9uYWwgY29uZGl0aW9ucyAobW9kZW0gbGluZQogCSAqIHNpZ25hbCBjaGFuZ2VzIGFuZCBlcnJvcnMpLiBkYXRhWzBdIGhvbGRzIE1TUiwgZGF0YVsxXSBob2xkcyBMU1IuCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlwcml2LT5sYXN0X21zciA9IGRhdGFbTUNUX1UyMzJfTVNSX0lOREVYXTsKLQkKKwogCS8qIFJlY29yZCBDb250cm9sIExpbmUgc3RhdGVzICovCiAJbWN0X3UyMzJfbXNyX3RvX3N0YXRlKCZwcml2LT5jb250cm9sX3N0YXRlLCBwcml2LT5sYXN0X21zcik7CiAKICNpZiAwCi0JLyogTm90IHlldCBoYW5kbGVkLiBTZWUgYmVsaW5fc2EuYyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiAqLworCS8qIE5vdCB5ZXQgaGFuZGxlZC4gU2VlIGJlbGtpbl9zYS5jIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uICovCiAJLyogTm93IHRvIHJlcG9ydCBhbnkgZXJyb3JzICovCiAJcHJpdi0+bGFzdF9sc3IgPSBkYXRhW01DVF9VMjMyX0xTUl9JTkRFWF07CiAJLyoKQEAgLTU4Myw3ICs1OTEsNyBAQAogCSAqIHRvIGxvb2sgaW4gdG8gdGhpcyBiZWZvcmUgY29tbWl0dGluZyBhbnkgY29kZS4KIAkgKi8KIAlpZiAocHJpdi0+bGFzdF9sc3IgJiBNQ1RfVTIzMl9MU1JfRVJSKSB7Ci0JCXR0eSA9IHBvcnQtPnR0eTsKKwkJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJCS8qIE92ZXJydW4gRXJyb3IgKi8KIAkJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX09FKSB7CiAJCX0KQEAgLTYwMCwxOCArNjA4LDE5IEBACiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiBleGl0OgotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKLQkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKIAkJICAgICBfX2Z1bmNfXywgcmV0dmFsKTsKIH0gLyogbWN0X3UyMzJfcmVhZF9pbnRfY2FsbGJhY2sgKi8KIAotc3RhdGljIHZvaWQgbWN0X3UyMzJfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgbWN0X3UyMzJfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcyA9IHBvcnQtPnR0eS0+dGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MgPSB0dHktPnRlcm1pb3M7CiAJdW5zaWduZWQgaW50IGNmbGFnID0gdGVybWlvcy0+Y19jZmxhZzsKIAl1bnNpZ25lZCBpbnQgb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYzMSwyMCArNjQwLDIwIEBACiAJICogUHJlbWF0dXJlIG9wdGltaXphdGlvbiBpcyB0aGUgcm9vdCBvZiBhbGwgZXZpbC4KIAkgKi8KIAotICAgICAgICAvKiByZWFzc2VydCBEVFIgYW5kIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KKwkvKiByZWFzc2VydCBEVFIgYW5kIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KIAlpZiAoKG9sZF9jZmxhZyAmIENCQVVEKSA9PSBCMCkgewogCQlkYmcoIiVzOiBiYXVkIHdhcyBCMCIsIF9fZnVuY19fKTsKIAkJY29udHJvbF9zdGF0ZSB8PSBUSU9DTV9EVFIgfCBUSU9DTV9SVFM7CiAJCW1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgY29udHJvbF9zdGF0ZSk7CiAJfQogCi0JbWN0X3UyMzJfc2V0X2JhdWRfcmF0ZShzZXJpYWwsIHBvcnQsIHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSkpOworCW1jdF91MjMyX3NldF9iYXVkX3JhdGUodHR5LCBzZXJpYWwsIHBvcnQsIHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSkpOwogCi0JaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCApIHsKKwlpZiAoKGNmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCWRiZygiJXM6IGJhdWQgaXMgQjAiLCBfX2Z1bmNfXyk7CiAJCS8qIERyb3AgUlRTIGFuZCBEVFIgKi8KIAkJY29udHJvbF9zdGF0ZSAmPSB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7Ci0gICAgICAgCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIGNvbnRyb2xfc3RhdGUpOworCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIGNvbnRyb2xfc3RhdGUpOwogCX0KIAogCS8qCkBAIC02ODksOCArNjk4LDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9IC8qIG1jdF91MjMyX3NldF90ZXJtaW9zICovCiAKLXN0YXRpYyB2b2lkIG1jdF91MjMyX2JyZWFrX2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICkKK3N0YXRpYyB2b2lkIG1jdF91MjMyX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBjaGFyIGxjcjsKQEAgLTcwOSwxMiArNzE5LDEzIEBACiB9IC8qIG1jdF91MjMyX2JyZWFrX2N0bCAqLwogCiAKLXN0YXRpYyBpbnQgbWN0X3UyMzJfdGlvY21nZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBtY3RfdTIzMl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQorCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC03MjQsMTQgKzczNSwxNSBAQAogCXJldHVybiBjb250cm9sX3N0YXRlOwogfQogCi1zdGF0aWMgaW50IG1jdF91MjMyX3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgbWN0X3UyMzJfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQorCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC03NTEsNzcgKzc2Myw1MCBAQAogCXJldHVybiBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIGNvbnRyb2xfc3RhdGUpOwogfQogCi1zdGF0aWMgaW50IG1jdF91MjMyX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCi0JCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JZGJnKCIlc2NtZD0weCV4IiwgX19mdW5jX18sIGNtZCk7Ci0KLQkvKiBCYXNlZCBvbiBjb2RlIGZyb20gYWNtLmMgYW5kIG90aGVycyAqLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUSU9DTUlXQUlUOgotCQkvKiB3YWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykqLwotCQkvKiBUT0RPICovCi0JCXJldHVybiggMCApOwotCi0JY2FzZSBUSU9DR0lDT1VOVDoKLQkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLwotCQkvKiBUT0RPICovCi0JCXJldHVybiAwOwotCi0JZGVmYXVsdDoKLQkJZGJnKCIlczogYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLCBfX2Z1bmNfXyxjbWQpOwotCQlyZXR1cm4oLUVOT0lPQ1RMQ01EKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfSAvKiBtY3RfdTIzMl9pb2N0bCAqLwotCi1zdGF0aWMgdm9pZCBtY3RfdTIzMl90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKLXsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKLQl0dHkgPSBwb3J0LT50dHk7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcHJpdi0+cnhfZmxhZ3MgfD0gVEhST1RUTEVEOwogCWlmIChDX0NSVFNDVFModHR5KSkgewotCSAgcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUlRTOwotCSAgY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7Ci0JICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JICAodm9pZCkgbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwocG9ydC0+c2VyaWFsLCBjb250cm9sX3N0YXRlKTsKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUlRTOworCQljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkodm9pZCkgbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwocG9ydC0+c2VyaWFsLCBjb250cm9sX3N0YXRlKTsKIAl9IGVsc2UgewotCSAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJfQogfQogCiAKLXN0YXRpYyB2b2lkIG1jdF91MjMyX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBtY3RfdTIzMl91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXR0eSA9IHBvcnQtPnR0eTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWlmICgocHJpdi0+cnhfZmxhZ3MgJiBUSFJPVFRMRUQpICYmIENfQ1JUU0NUUyh0dHkpKSB7Ci0JICBwcml2LT5yeF9mbGFncyAmPSB+VEhST1RUTEVEOwotCSAgcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9SVFM7Ci0JICBjb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKLQkgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkgICh2b2lkKSBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybChwb3J0LT5zZXJpYWwsIGNvbnRyb2xfc3RhdGUpOworCQlwcml2LT5yeF9mbGFncyAmPSB+VEhST1RUTEVEOworCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX1JUUzsKKwkJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJKHZvaWQpIG1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHBvcnQtPnNlcmlhbCwgY29udHJvbF9zdGF0ZSk7CiAJfSBlbHNlIHsKLQkgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgbWN0X3UyMzJfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG1jdF91MjMyX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJm1jdF91MjMyX2RldmljZSk7CkBAIC04MzksMTggKzgyNCwxNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBtY3RfdTIzMl9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IG1jdF91MjMyX2V4aXQodm9pZCkKIHsKLQl1c2JfZGVyZWdpc3RlciAoJm1jdF91MjMyX2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmbWN0X3UyMzJfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3RlcigmbWN0X3UyMzJfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJm1jdF91MjMyX2RldmljZSk7CiB9CiAKLQotbW9kdWxlX2luaXQgKG1jdF91MjMyX2luaXQpOworbW9kdWxlX2luaXQobWN0X3UyMzJfaW5pdCk7CiBtb2R1bGVfZXhpdChtY3RfdTIzMl9leGl0KTsKIAotTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOwotTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKaW5kZXggNTBmMWZlMi4uN2M0OTE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogCiAvKgpAQCAtNjQsOCArNjQsNyBAQAogI2RlZmluZSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUJMzIJLyogVVJCIFNpemUgKi8KIAogLyogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIG9mIHRoZSBsb2NhbCBwb3J0IGluZm9ybWF0aW9uICovCi1zdHJ1Y3QgbW9zY2hpcF9wb3J0Ci17CitzdHJ1Y3QgbW9zY2hpcF9wb3J0IHsKIAlfX3U4CXNoYWRvd0xDUjsJCS8qIGxhc3QgTENSIHZhbHVlIHJlY2VpdmVkICovCiAJX191OAlzaGFkb3dNQ1I7CQkvKiBsYXN0IE1DUiB2YWx1ZSByZWNlaXZlZCAqLwogCV9fdTgJc2hhZG93TVNSOwkJLyogbGFzdCBNU1IgdmFsdWUgcmVjZWl2ZWQgKi8KQEAgLTc2LDggKzc1LDcgQEAKIH07CiAKIC8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBzZXJpYWwgZGV2aWNlIGluZm9ybWF0aW9uICovCi1zdHJ1Y3QgbW9zY2hpcF9zZXJpYWwKLXsKK3N0cnVjdCBtb3NjaGlwX3NlcmlhbCB7CiAJaW50IGludGVycnVwdF9zdGFydGVkOwogfTsKIApAQCAtODgsNyArODYsNyBAQAogI2RlZmluZSBNT1NDSElQX0RFVklDRV9JRF83NzE1CQkweDc3MTUKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1vc2NoaXBfcG9ydF9pZF90YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NT1NDSElQLE1PU0NISVBfREVWSUNFX0lEXzc3MjApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9TQ0hJUCwgTU9TQ0hJUF9ERVZJQ0VfSURfNzcyMCkgfSwKIAl7IH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbW9zY2hpcF9wb3J0X2lkX3RhYmxlKTsKQEAgLTEwOCw3ICsxMDYsNyBAQAogCV9fdTggc3AxOwogCV9fdTggc3AyOwogCi0JZGJnKCIlcyIsIiA6IEVudGVyaW5nXG4iKTsKKwlkYmcoIiVzIiwgIiA6IEVudGVyaW5nXG4iKTsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSAwOgpAQCAtMjA4LDcgKzIwNiw3IEBACiAKIAltb3M3NzIwX3BvcnQgPSB1cmItPmNvbnRleHQ7CiAJaWYgKCFtb3M3NzIwX3BvcnQpIHsKLQkJZGJnKCIlcyIsIk5VTEwgbW9zNzcyMF9wb3J0IHBvaW50ZXIgXG4iKTsKKwkJZGJnKCIlcyIsICJOVUxMIG1vczc3MjBfcG9ydCBwb2ludGVyIFxuIik7CiAJCXJldHVybiA7CiAJfQogCkBAIC0yMTgsNyArMjE2LDcgQEAKIAogCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtMjY0LDcgKzI2Miw3IEBACiAKIAlkYmcoIkVudGVyaW5nIC4uLi4uLi4uLiIpOwogCi0JdHR5ID0gbW9zNzcyMF9wb3J0LT5wb3J0LT50dHk7CisJdHR5ID0gbW9zNzcyMF9wb3J0LT5wb3J0LT5wb3J0LnR0eTsKIAogCWlmICh0dHkgJiYgbW9zNzcyMF9wb3J0LT5vcGVuKQogCQl0dHlfd2FrZXVwKHR0eSk7CkBAIC0yODQsMTcgKzI4MiwxNiBAQAogCV9fdTE2IHNpemUgPSAweDAwMDA7CiAKIAlpZiAodmFsdWUgPCBNT1NfTUFYX1BPUlQpIHsKLQkJaWYgKHByb2R1Y3QgPT0gTU9TQ0hJUF9ERVZJQ0VfSURfNzcxNSkgeworCQlpZiAocHJvZHVjdCA9PSBNT1NDSElQX0RFVklDRV9JRF83NzE1KQogCQkJdmFsdWUgPSB2YWx1ZSoweDEwMCsweDEwMDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJdmFsdWUgPSB2YWx1ZSoweDEwMCsweDIwMDsKLQkJfQogCX0gZWxzZSB7CiAJCXZhbHVlID0gMHgwMDAwOwogCQlpZiAoKHByb2R1Y3QgPT0gTU9TQ0hJUF9ERVZJQ0VfSURfNzcxNSkgJiYKIAkJICAgIChpbmRleCAhPSAweDA4KSkgewogCQkJZGJnKCJzZXJpYWwtPnByb2R1Y3Q9PSBNT1NDSElQX0RFVklDRV9JRF83NzE1Iik7Ci0JCQkvL2luZGV4ID0gMHgwMSA7CisJCQkvKiBpbmRleCA9IDB4MDEgOyAqLwogCQl9CiAJfQogCkBAIC0zMDgsMTkgKzMwNSwyMCBAQAogCQlyZXF1ZXN0ID0gKF9fdTgpTU9TX1JFQUQ7CiAJCXJlcXVlc3R0eXBlID0gKF9fdTgpMHhDMDsKIAkJc2l6ZSA9IDB4MDE7Ci0JCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsMCk7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApOwogCX0KIAogCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgcGlwZSwgcmVxdWVzdCwgcmVxdWVzdHR5cGUsCiAJCQkJIHZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSwgTU9TX1dEUl9USU1FT1VUKTsKIAogCWlmIChzdGF0dXMgPCAwKQotCQlkYmcoIkNvbW1hbmQgV3JpdGUgZmFpbGVkIFZhbHVlICV4IGluZGV4ICV4XG4iLHZhbHVlLGluZGV4KTsKKwkJZGJnKCJDb21tYW5kIFdyaXRlIGZhaWxlZCBWYWx1ZSAleCBpbmRleCAleFxuIiwgdmFsdWUsIGluZGV4KTsKIAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgbW9zNzcyMF9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3N0YXRpYyBpbnQgbW9zNzcyMF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQwOwpAQCAtMzUxLDcgKzM0OSw3IEBACiAKIAkvKiBJbml0aWFsaXNpbmcgdGhlIHdyaXRlIHVyYiBwb29sICovCiAJZm9yIChqID0gMDsgaiA8IE5VTV9VUkJTOyArK2opIHsKLQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLEdGUF9LRVJORUwpOworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQltb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOwogCiAJCWlmICh1cmIgPT0gTlVMTCkgewpAQCAtMzg1LDcgKzM4Myw3IEBACiAJICAqLwogCXBvcnRfbnVtYmVyID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKIAlzZW5kX21vc19jbWQocG9ydC0+c2VyaWFsLCBNT1NfUkVBRCwgcG9ydF9udW1iZXIsIFVBUlRfTFNSLCAmZGF0YSk7Ci0JZGJnKCJTUzo6JXAgTFNSOiV4XG4iLG1vczc3MjBfcG9ydCwgZGF0YSk7CisJZGJnKCJTUzo6JXAgTFNSOiV4XG4iLCBtb3M3NzIwX3BvcnQsIGRhdGEpOwogCiAJZGJnKCJDaGVjazpTZW5kaW5nIENvbW1hbmQgLi4uLi4uLi4uLiIpOwogCkBAIC00MDIsMTAgKzQwMCwxMCBAQAogCWRhdGEgPSAweENGOwogCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydF9udW1iZXIsIDB4MDIsICZkYXRhKTsKIAlkYXRhID0gMHgwMzsKLSAgICAgICAgbW9zNzcyMF9wb3J0LT5zaGFkb3dMQ1IgID0gZGF0YTsKKwltb3M3NzIwX3BvcnQtPnNoYWRvd0xDUiAgPSBkYXRhOwogCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydF9udW1iZXIsIDB4MDMsICZkYXRhKTsKIAlkYXRhID0gMHgwYjsKLSAgICAgICAgbW9zNzcyMF9wb3J0LT5zaGFkb3dNQ1IgID0gZGF0YTsKKwltb3M3NzIwX3BvcnQtPnNoYWRvd01DUiAgPSBkYXRhOwogCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydF9udW1iZXIsIDB4MDQsICZkYXRhKTsKIAlkYXRhID0gMHgwYjsKIAlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDA0LCAmZGF0YSk7CkBAIC00MjAsNyArNDE4LDggQEAKIAlkYXRhID0gMHgwMzsKIAlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIE1PU19NQVhfUE9SVCwgcG9ydF9udW1iZXIgKyAxLCAmZGF0YSk7CiAJZGF0YSA9IDB4MDA7Ci0Jc2VuZF9tb3NfY21kKHBvcnQtPnNlcmlhbCwgTU9TX1dSSVRFLCBNT1NfTUFYX1BPUlQsIHBvcnRfbnVtYmVyICsgMSwgJmRhdGEpOworCXNlbmRfbW9zX2NtZChwb3J0LT5zZXJpYWwsIE1PU19XUklURSwgTU9TX01BWF9QT1JULAorCQkJCQkJcG9ydF9udW1iZXIgKyAxLCAmZGF0YSk7CiAqLwogCWRhdGEgPSAweDAwOwogCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19SRUFELCBNT1NfTUFYX1BPUlQsIDB4MDgsICZkYXRhKTsKQEAgLTQyOSwyOCArNDI4LDI2IEBACiAJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBNT1NfTUFYX1BPUlQsIDB4MDgsICZkYXRhKTsKIAogCWRhdGEgPSAweDgzOwotICAgICAgICBtb3M3NzIwX3BvcnQtPnNoYWRvd0xDUiAgPSBkYXRhOworCW1vczc3MjBfcG9ydC0+c2hhZG93TENSICA9IGRhdGE7CiAJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0X251bWJlciwgMHgwMywgJmRhdGEpOwogCWRhdGEgPSAweDBjOwogCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydF9udW1iZXIsIDB4MDAsICZkYXRhKTsKIAlkYXRhID0gMHgwMDsKIAlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDAxLCAmZGF0YSk7CiAJZGF0YSA9IDB4MDM7Ci0gICAgICAgIG1vczc3MjBfcG9ydC0+c2hhZG93TENSICA9IGRhdGE7CisJbW9zNzcyMF9wb3J0LT5zaGFkb3dMQ1IgID0gZGF0YTsKIAlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDAzLCAmZGF0YSk7CiAJZGF0YSA9IDB4MGM7CiAJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0X251bWJlciwgMHgwMSwgJmRhdGEpOwogCWRhdGEgPSAweDBjOwogCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydF9udW1iZXIsIDB4MDEsICZkYXRhKTsKIAotLy9NYXRyaXgKLQogCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyAqCiAJICogdGhlIGRhdGEgdGhyb3VnaCxvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCAgICAgICoKIAkgKiBoaWdoIGRhdGEgcmF0ZXMgKGxpa2Ugd2l0aCBPSENJKSBkYXRhIGNhbiBnZXQgbG9zdC4gICAgICAgKi8KIAotCWlmIChwb3J0LT50dHkpCi0JCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCWlmICh0dHkpCisJCXR0eS0+bG93X2xhdGVuY3kgPSAxOwogCiAJLyogc2VlIGlmIHdlJ3ZlIHNldCB1cCBvdXIgZW5kcG9pbnQgaW5mbyB5ZXQgICAqCiAJICogKGNhbid0IHNldCBpdCB1cCBpbiBtb3M3NzIwX3N0YXJ0dXAgYXMgdGhlICAqCkBAIC00NjUsMTUgKzQ2MiwxNSBAQAogCiAJCS8qIHNldCB1cCBvdXIgaW50ZXJydXB0IHVyYiAqLwogCQl1c2JfZmlsbF9pbnRfdXJiKHBvcnQwLT5pbnRlcnJ1cHRfaW5fdXJiLCBzZXJpYWwtPmRldiwKLQkJCQkgdXNiX3JjdmludHBpcGUoc2VyaWFsLT5kZXYsCi0JCQkJIAkJcG9ydC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyksCi0JCQkJIHBvcnQwLT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAotCQkJCSBwb3J0MC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCQkgbW9zNzcyMF9pbnRlcnJ1cHRfY2FsbGJhY2ssIG1vczc3MjBfcG9ydCwKLQkJCQkgcG9ydDAtPmludGVycnVwdF9pbl91cmItPmludGVydmFsKTsKKwkJCSB1c2JfcmN2aW50cGlwZShzZXJpYWwtPmRldiwKKwkJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBwb3J0MC0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJCSBwb3J0MC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCSBtb3M3NzIwX2ludGVycnVwdF9jYWxsYmFjaywgbW9zNzcyMF9wb3J0LAorCQkJIHBvcnQwLT5pbnRlcnJ1cHRfaW5fdXJiLT5pbnRlcnZhbCk7CiAKIAkJLyogc3RhcnQgaW50ZXJydXB0IHJlYWQgZm9yIHRoaXMgbW9zNzcyMCB0aGlzIGludGVycnVwdCAqCi0JICAgICAgICAgKiB3aWxsIGNvbnRpbnVlIGFzIGxvbmcgYXMgdGhlIG1vczc3MjAgaXMgY29ubmVjdGVkICAgICovCisJCSAqIHdpbGwgY29udGludWUgYXMgbG9uZyBhcyB0aGUgbW9zNzcyMCBpcyBjb25uZWN0ZWQgICAgKi8KIAkJZGJnKCJTdWJtaXQgVVJCIG92ZXIgISEhIik7CiAJCXJlc3BvbnNlID0gdXNiX3N1Ym1pdF91cmIocG9ydDAtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAocmVzcG9uc2UpCkBAIC00ODUsMTQgKzQ4MiwxNCBAQAogCS8qIHNldCB1cCBvdXIgYnVsayBpbiB1cmIgKi8KIAl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCiAJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKLQkJCSAgCQkgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCiAJCQkgIHBvcnQtPmJ1bGtfaW5fYnVmZmVyLAogCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCSAgbW9zNzcyMF9idWxrX2luX2NhbGxiYWNrLCBtb3M3NzIwX3BvcnQpOwogCXJlc3BvbnNlID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXNwb25zZSkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyByZWFkIHVyYlxuIiwgX19mdW5jX18sIHJlc3BvbnNlKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIHJlYWQgdXJiXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXNwb25zZSk7CiAKIAkvKiBpbml0aWFsaXplIG91ciBpY291bnQgc3RydWN0dXJlICovCiAJbWVtc2V0KCYobW9zNzcyMF9wb3J0LT5pY291bnQpLCAweDAwLCBzaXplb2YobW9zNzcyMF9wb3J0LT5pY291bnQpKTsKQEAgLTUxNSw4ICs1MTIsOSBAQAogICoJc3lzdGVtLAogICoJT3RoZXJ3aXNlIHdlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KICAqLwotc3RhdGljIGludCBtb3M3NzIwX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBtb3M3NzIwX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCBpOwogCWludCBjaGFycyA9IDA7CiAJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0OwpAQCAtNTMwLDE0ICs1MjgsMTYgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgewotCQlpZiAobW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtpXSAmJiBtb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQlpZiAobW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtpXSAmJgorCQkgICAgbW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKIAkJCWNoYXJzICs9IFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKIAl9CiAJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgY2hhcnMpOwogCXJldHVybiBjaGFyczsKIH0KIAotc3RhdGljIHZvaWQgbW9zNzcyMF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIG1vczc3MjBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CiAJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0OwpAQCAtNTc1LDEyICs1NzUsMTIgQEAKIAkgKiBiZWVuIGRpc2Nvbm5lY3RlZCAqLwogCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKIAkJZGF0YSA9IDB4MDA7Ci0JCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciwKLQkJCSAgICAgMHgwNCwgJmRhdGEpOworCQlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsCisJCQlwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yLCAweDA0LCAmZGF0YSk7CiAKIAkJZGF0YSA9IDB4MDA7Ci0JCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciwKLQkJCSAgICAgMHgwMSwgJmRhdGEpOworCQlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsCisJCQlwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yLCAweDAxLCAmZGF0YSk7CiAJfQogCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKIAltb3M3NzIwX3BvcnQtPm9wZW4gPSAwOwpAQCAtNTg4LDkgKzU4OCwxMCBAQAogCWRiZygiTGVhdmluZyAlcyIsIF9fZnVuY19fKTsKIH0KIAotc3RhdGljIHZvaWQgbW9zNzcyMF9icmVhayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCitzdGF0aWMgdm9pZCBtb3M3NzIwX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGNoYXIgZGF0YTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwogCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc3MjBfcG9ydDsKIApAQCAtNjIxLDggKzYyMiw5IEBACiAgKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gdGhlIGFtb3VudCBvZiByb29tIHRoYXQgd2UgaGF2ZSBmb3IgdGhpcyBwb3J0CiAgKglPdGhlcndpc2Ugd2UgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgogICovCi1zdGF0aWMgaW50IG1vczc3MjBfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBtb3M3NzIwX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQ7CiAJaW50IHJvb20gPSAwOwogCWludCBpOwpAQCAtNjM3LDcgKzYzOSw4IEBACiAKIAkvKiBGSVhNRTogTG9ja2luZyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7Ci0JCWlmIChtb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldICYmIG1vczc3MjBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCWlmIChtb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldICYmCisJCSAgICBtb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQogCQkJcm9vbSArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CiAJfQogCkBAIC02NDUsOCArNjQ4LDggQEAKIAlyZXR1cm4gcm9vbTsKIH0KIAotc3RhdGljIGludCBtb3M3NzIwX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KQorc3RhdGljIGludCBtb3M3NzIwX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjb3VudCkKIHsKIAlpbnQgc3RhdHVzOwogCWludCBpOwpAQCAtNjcyLDkgKzY3NSwxMCBAQAogCXVyYiA9IE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgewotCQlpZiAobW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtpXSAmJiBtb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCWlmIChtb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldICYmCisJCSAgICBtb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CiAJCQl1cmIgPSBtb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldOwotCQkJZGJnKCJVUkI6JWQiLGkpOworCQkJZGJnKCJVUkI6JWQiLCBpKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNjkyLDcgKzY5Niw3IEBACiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9Ci0JdHJhbnNmZXJfc2l6ZSA9IG1pbiAoY291bnQsIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSk7CisJdHJhbnNmZXJfc2l6ZSA9IG1pbihjb3VudCwgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFKTsKIAogCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9wb3NpdGlvbiwgdHJhbnNmZXJfc2l6ZSk7CiAJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgdHJhbnNmZXJfc2l6ZSwKQEAgLTcwMSwxMiArNzA1LDEyIEBACiAJLyogZmlsbCB1cmIgd2l0aCBkYXRhIGFuZCBzdWJtaXQgICovCiAJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKIAkJCSAgdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAotCQkJICAJCSAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKIAkJCSAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHRyYW5zZmVyX3NpemUsCiAJCQkgIG1vczc3MjBfYnVsa19vdXRfZGF0YV9jYWxsYmFjaywgbW9zNzcyMF9wb3J0KTsKIAogCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLwotCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYixHRlBfQVRPTUlDKTsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMpIHsKIAkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkIiwKIAkJICAgIF9fZnVuY19fLCBzdGF0dXMpOwpAQCAtNzE5LDEwICs3MjMsMTAgQEAKIAlyZXR1cm4gYnl0ZXNfc2VudDsKIH0KIAotc3RhdGljIHZvaWQgbW9zNzcyMF90aHJvdHRsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgbW9zNzcyMF90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc3MjBfcG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBzdGF0dXM7CiAKIAlkYmcoIiVzLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTczOSwxNiArNzQzLDEwIEBACiAKIAlkYmcoIiVzOiBFbnRlcmluZyAuLi4uLi4uLi4uIiwgX19mdW5jX18pOwogCi0JdHR5ID0gcG9ydC0+dHR5OwotCWlmICghdHR5KSB7Ci0JCWRiZygiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCiAJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2VuZCB0aGUgc3RvcCBjaGFyYWN0ZXIgKi8KIAlpZiAoSV9JWE9GRih0dHkpKSB7CiAJCXVuc2lnbmVkIGNoYXIgc3RvcF9jaGFyID0gU1RPUF9DSEFSKHR0eSk7Ci0JCXN0YXR1cyA9IG1vczc3MjBfd3JpdGUocG9ydCwgJnN0b3BfY2hhciwgMSk7CisJCXN0YXR1cyA9IG1vczc3MjBfd3JpdGUodHR5LCBwb3J0LCAmc3RvcF9jaGFyLCAxKTsKIAkJaWYgKHN0YXR1cyA8PSAwKQogCQkJcmV0dXJuOwogCX0KQEAgLTc2NCwxMSArNzYyLDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBtb3M3NzIwX3VudGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIG1vczc3MjBfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHN0YXR1czsKIAogCWlmIChtb3M3NzIwX3BvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtNzgwLDE2ICs3NzgsMTAgQEAKIAogCWRiZygiJXM6IEVudGVyaW5nIC4uLi4uLi4uLi4iLCBfX2Z1bmNfXyk7CiAKLQl0dHkgPSBwb3J0LT50dHk7Ci0JaWYgKCF0dHkpIHsKLQkJZGJnKCIlcyAtIG5vIHR0eSBhdmFpbGFibGUiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdGFydCBjaGFyYWN0ZXIgKi8KIAlpZiAoSV9JWE9GRih0dHkpKSB7CiAJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKLQkJc3RhdHVzID0gbW9zNzcyMF93cml0ZShwb3J0LCAmc3RhcnRfY2hhciwgMSk7CisJCXN0YXR1cyA9IG1vczc3MjBfd3JpdGUodHR5LCBwb3J0LCAmc3RhcnRfY2hhciwgMSk7CiAJCWlmIChzdGF0dXMgPD0gMCkKIAkJCXJldHVybjsKIAl9CkBAIC04MTksOSArODExLDkgQEAKIAlwb3J0ID0gbW9zNzcyMF9wb3J0LT5wb3J0OwogCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgICogICAgICBJbml0IFNlcXVlbmNlIGZvciBoaWdoZXIgcmF0ZXMKLSAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAgICAgIEluaXQgU2VxdWVuY2UgZm9yIGhpZ2hlciByYXRlcworCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAlkYmcoIlNlbmRpbmcgU2V0dGluZyBDb21tYW5kcyAuLi4uLi4uLi4uIik7CiAJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwogCkBAIC04MzIsNyArODI0LDcgQEAKIAlkYXRhID0gMHgwQ0Y7CiAJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0LT5udW1iZXIsIDB4MDIsICZkYXRhKTsKIAlkYXRhID0gMHgwMGI7Ci0gICAgICAgIG1vczc3MjBfcG9ydC0+c2hhZG93TUNSICA9IGRhdGE7CisJbW9zNzcyMF9wb3J0LT5zaGFkb3dNQ1IgID0gZGF0YTsKIAlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDA0LCAmZGF0YSk7CiAJZGF0YSA9IDB4MDBiOwogCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydF9udW1iZXIsIDB4MDQsICZkYXRhKTsKQEAgLTg0MywxMiArODM1LDEyIEBACiAJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBNT1NfTUFYX1BPUlQsIDB4MDgsICZkYXRhKTsKIAogCi0gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgKiAgICAgICAgICAgICAgU2V0IGZvciBoaWdoZXIgcmF0ZXMgICAgICAgICAgICoKLSAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqICAgICAgICAgICAgICBTZXQgZm9yIGhpZ2hlciByYXRlcyAgICAgICAgICAgKgorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCWRhdGEgPSBiYXVkICogMHgxMDsKLQlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIE1PU19NQVhfUE9SVCwgcG9ydF9udW1iZXIgKyAxLCZkYXRhKTsKKwlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIE1PU19NQVhfUE9SVCwgcG9ydF9udW1iZXIgKyAxLCAmZGF0YSk7CiAKIAlkYXRhID0gMHgwMDM7CiAJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1JFQUQsIE1PU19NQVhfUE9SVCwgMHgwOCwgJmRhdGEpOwpAQCAtODU2LDM0ICs4NDgsMzMgQEAKIAlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIE1PU19NQVhfUE9SVCwgMHgwOCwgJmRhdGEpOwogCiAJZGF0YSA9IDB4MDJiOwotICAgICAgICBtb3M3NzIwX3BvcnQtPnNoYWRvd01DUiAgPSBkYXRhOworCW1vczc3MjBfcG9ydC0+c2hhZG93TUNSICA9IGRhdGE7CiAJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0X251bWJlciwgMHgwNCwgJmRhdGEpOwogCWRhdGEgPSAweDAyYjsKIAlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDA0LCAmZGF0YSk7CiAKLSAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAgICAqICAgICAgICAgICAgICBTZXQgRExML0RMTQotICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogICAgICAgICAgICAgIFNldCBETEwvRExNCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAJZGF0YSA9IG1vczc3MjBfcG9ydC0+c2hhZG93TENSIHwgVUFSVF9MQ1JfRExBQjsKLSAgICAgICAgbW9zNzcyMF9wb3J0LT5zaGFkb3dMQ1IgID0gZGF0YTsKKwltb3M3NzIwX3BvcnQtPnNoYWRvd0xDUiAgPSBkYXRhOwogCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydF9udW1iZXIsIDB4MDMsICZkYXRhKTsKIAogCWRhdGEgPSAgMHgwMDE7IC8qIERMTCAqLwotICAgICAgICBzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDAwLCAmZGF0YSk7CisJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0X251bWJlciwgMHgwMCwgJmRhdGEpOwogCWRhdGEgPSAgMHgwMDA7IC8qIERMTSAqLwotICAgICAgICBzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDAxLCAmZGF0YSk7CisJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0X251bWJlciwgMHgwMSwgJmRhdGEpOwogCiAJZGF0YSA9IG1vczc3MjBfcG9ydC0+c2hhZG93TENSICYgflVBUlRfTENSX0RMQUI7Ci0gICAgICAgIG1vczc3MjBfcG9ydC0+c2hhZG93TENSICA9IGRhdGE7CisJbW9zNzcyMF9wb3J0LT5zaGFkb3dMQ1IgID0gZGF0YTsKIAlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDAzLCAmZGF0YSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogYmF1ZCByYXRlIGluZm9ybWF0aW9uICovCi1zdHJ1Y3QgZGl2aXNvcl90YWJsZV9lbnRyeQoteworc3RydWN0IGRpdmlzb3JfdGFibGVfZW50cnkgewogCV9fdTMyICBiYXVkcmF0ZTsKIAlfX3UxNiAgZGl2aXNvcjsKIH07CkBAIC05MzIsOCArOTIzLDggQEAKIAkJfQogCX0KIAotICAgICAgICAvKiBBZnRlciB0cnlpbmcgZm9yIGFsbCB0aGUgc3RhbmRhcmQgYmF1ZCByYXRlcyAgICAqCi0gICAgICAgICAqIFRyeSBjYWxjdWxhdGluZyB0aGUgZGl2aXNvciBmb3IgdGhpcyBiYXVkIHJhdGUgICovCisJLyogQWZ0ZXIgdHJ5aW5nIGZvciBhbGwgdGhlIHN0YW5kYXJkIGJhdWQgcmF0ZXMgICAgKgorCSAqIFRyeSBjYWxjdWxhdGluZyB0aGUgZGl2aXNvciBmb3IgdGhpcyBiYXVkIHJhdGUgICovCiAJaWYgKGJhdWRyYXRlID4gNzUgJiYgIGJhdWRyYXRlIDwgMjMwNDAwKSB7CiAJCS8qIGdldCB0aGUgZGl2aXNvciAqLwogCQljdXN0b20gPSAoX191MTYpKDIzMDQwMEwgIC8gYmF1ZHJhdGUpOwpAQCAtOTQ1LDcgKzkzNiw3IEBACiAJCQljdXN0b20rKzsKIAkJKmRpdmlzb3IgPSBjdXN0b207CiAKLQkJZGJnKCJCYXVkICVkID0gJWQiLGJhdWRyYXRlLCBjdXN0b20pOworCQlkYmcoIkJhdWQgJWQgPSAlZCIsIGJhdWRyYXRlLCBjdXN0b20pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTk3OSwyOSArOTcwLDI5IEBACiAJbnVtYmVyID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKIAlkYmcoIiVzIC0gcG9ydCA9ICVkLCBiYXVkID0gJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBiYXVkcmF0ZSk7CiAKLSAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBEaXZpc29yICovCisJLyogQ2FsY3VsYXRlIHRoZSBEaXZpc29yICovCiAJc3RhdHVzID0gY2FsY19iYXVkX3JhdGVfZGl2aXNvcihiYXVkcmF0ZSwgJmRpdmlzb3IpOwogCWlmIChzdGF0dXMpIHsKIAkJZXJyKCIlcyAtIGJhZCBiYXVkIHJhdGUiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCi0gICAgICAgIC8qIEVuYWJsZSBhY2Nlc3MgdG8gZGl2aXNvciBsYXRjaCAqLwotICAgICAgICBkYXRhID0gbW9zNzcyMF9wb3J0LT5zaGFkb3dMQ1IgfCBVQVJUX0xDUl9ETEFCOwotICAgICAgICBtb3M3NzIwX3BvcnQtPnNoYWRvd0xDUiAgPSBkYXRhOwotICAgICAgICBzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIG51bWJlciwgVUFSVF9MQ1IsICZkYXRhKTsKKwkvKiBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2ggKi8KKwlkYXRhID0gbW9zNzcyMF9wb3J0LT5zaGFkb3dMQ1IgfCBVQVJUX0xDUl9ETEFCOworCW1vczc3MjBfcG9ydC0+c2hhZG93TENSICA9IGRhdGE7CisJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBudW1iZXIsIFVBUlRfTENSLCAmZGF0YSk7CiAKIAkvKiBXcml0ZSB0aGUgZGl2aXNvciAqLwogCWRhdGEgPSAoKHVuc2lnbmVkIGNoYXIpKGRpdmlzb3IgJiAweGZmKSk7Ci0gICAgICAgIHNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgbnVtYmVyLCAweDAwLCAmZGF0YSk7CisJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBudW1iZXIsIDB4MDAsICZkYXRhKTsKIAogCWRhdGEgPSAoKHVuc2lnbmVkIGNoYXIpKChkaXZpc29yICYgMHhmZjAwKSA+PiA4KSk7Ci0gICAgICAgIHNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgbnVtYmVyLCAweDAxLCAmZGF0YSk7CisJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBudW1iZXIsIDB4MDEsICZkYXRhKTsKIAotICAgICAgICAvKiBEaXNhYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCi0gICAgICAgIGRhdGEgPSBtb3M3NzIwX3BvcnQtPnNoYWRvd0xDUiAmIH5VQVJUX0xDUl9ETEFCOwotICAgICAgICBtb3M3NzIwX3BvcnQtPnNoYWRvd0xDUiA9IGRhdGE7Ci0gICAgICAgIHNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgbnVtYmVyLCAweDAzLCAmZGF0YSk7CisJLyogRGlzYWJsZSBhY2Nlc3MgdG8gZGl2aXNvciBsYXRjaCAqLworCWRhdGEgPSBtb3M3NzIwX3BvcnQtPnNoYWRvd0xDUiAmIH5VQVJUX0xDUl9ETEFCOworCW1vczc3MjBfcG9ydC0+c2hhZG93TENSID0gZGF0YTsKKwlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIG51bWJlciwgMHgwMywgJmRhdGEpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTEwMTEsMTIgKzEwMDIsMTIgQEAKICAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gc2V0IHRoZSBVQVJUIG9uIHRoZSBkZXZpY2UgdG8gbWF0Y2gKICAqICAgICAgdGhlIHNwZWNpZmllZCBuZXcgc2V0dGluZ3MuCiAgKi8KLXN0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzKHN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc3MjBfcG9ydCwKK3N0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJIHN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc3MjBfcG9ydCwKIAkJCQkgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgYmF1ZDsKIAl1bnNpZ25lZCBjZmxhZzsKIAl1bnNpZ25lZCBpZmxhZzsKQEAgLTEwNDIsOCArMTAzMyw2IEBACiAJCXJldHVybjsKIAl9CiAKLQl0dHkgPSBtb3M3NzIwX3BvcnQtPnBvcnQtPnR0eTsKLQogCWRiZygiJXM6IEVudGVyaW5nIC4uLi4uLi4uLi4iLCBfX2Z1bmNfXyk7CiAKIAlsRGF0YSA9IFVBUlRfTENSX1dMRU44OwpAQCAtMTEwNiwyOSArMTA5NSwzMSBAQAogI2RlZmluZSBMQ1JfUEFSX01BU0sJCTB4MzgJLyogTWFzayBmb3IgcGFyaXR5IGZpZWxkICovCiAKIAkvKiBVcGRhdGUgdGhlIExDUiB3aXRoIHRoZSBjb3JyZWN0IHZhbHVlICovCi0JbW9zNzcyMF9wb3J0LT5zaGFkb3dMQ1IgJj0gfihMQ1JfQklUU19NQVNLIHwgTENSX1NUT1BfTUFTSyB8IExDUl9QQVJfTUFTSyk7CisJbW9zNzcyMF9wb3J0LT5zaGFkb3dMQ1IgJj0KKwkJCX4oTENSX0JJVFNfTUFTSyB8IExDUl9TVE9QX01BU0sgfCBMQ1JfUEFSX01BU0spOwogCW1vczc3MjBfcG9ydC0+c2hhZG93TENSIHw9IChsRGF0YSB8IGxQYXJpdHkgfCBsU3RvcCk7CiAKIAogCS8qIERpc2FibGUgSW50ZXJydXB0cyAqLwogCWRhdGEgPSAweDAwOwotICAgICAgICBzZW5kX21vc19jbWQoc2VyaWFsLE1PU19XUklURSxwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yLCBVQVJUX0lFUiwgJmRhdGEpOworCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciwKKwkJCQkJCQlVQVJUX0lFUiwgJmRhdGEpOwogCiAJZGF0YSA9IDB4MDA7Ci0gICAgICAgIHNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydF9udW1iZXIsIFVBUlRfRkNSLCAmZGF0YSk7CisJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0X251bWJlciwgVUFSVF9GQ1IsICZkYXRhKTsKIAogCWRhdGEgPSAweGNmOwotICAgICAgICBzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCBVQVJUX0ZDUiwgJmRhdGEpOworCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgcG9ydF9udW1iZXIsIFVBUlRfRkNSLCAmZGF0YSk7CiAKIAkvKiBTZW5kIHRoZSB1cGRhdGVkIExDUiB2YWx1ZSB0byB0aGUgbW9zNzcyMCAqLwogCWRhdGEgPSBtb3M3NzIwX3BvcnQtPnNoYWRvd0xDUjsKLSAgICAgICAgc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0X251bWJlciwgVUFSVF9MQ1IsICZkYXRhKTsKKwlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCBVQVJUX0xDUiwgJmRhdGEpOwogCi0gICAgICAgIGRhdGEgPSAweDAwYjsKLSAgICAgICAgbW9zNzcyMF9wb3J0LT5zaGFkb3dNQ1IgPSBkYXRhOwotICAgICAgICBzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDA0LCAmZGF0YSk7Ci0gICAgICAgIGRhdGEgPSAweDAwYjsKLSAgICAgICAgc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0X251bWJlciwgMHgwNCwgJmRhdGEpOworCWRhdGEgPSAweDAwYjsKKwltb3M3NzIwX3BvcnQtPnNoYWRvd01DUiA9IGRhdGE7CisJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1dSSVRFLCBwb3J0X251bWJlciwgMHgwNCwgJmRhdGEpOworCWRhdGEgPSAweDAwYjsKKwlzZW5kX21vc19jbWQoc2VyaWFsLCBNT1NfV1JJVEUsIHBvcnRfbnVtYmVyLCAweDA0LCAmZGF0YSk7CiAKIAkvKiBzZXQgdXAgdGhlIE1DUiByZWdpc3RlciBhbmQgc2VuZCBpdCB0byB0aGUgbW9zNzcyMCAqLwogCW1vczc3MjBfcG9ydC0+c2hhZG93TUNSID0gVUFSVF9NQ1JfT1VUMjsKQEAgLTExMzcsOSArMTEyOCw4IEBACiAKIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CiAJCW1vczc3MjBfcG9ydC0+c2hhZG93TUNSIHw9IChVQVJUX01DUl9YT05BTlkpOwotCi0gICAgICAgICAgICAgICAgLyogVG8gc2V0IGhhcmR3YXJlIGZsb3cgY29udHJvbCB0byB0aGUgc3BlY2lmaWVkICoKLSAgICAgICAgICAgICAgICAgKiBzZXJpYWwgcG9ydCwgaW4gU1AxLzJfQ09OVFJPTF9SRUcgICAgICAgICAgICAgKi8KKwkJLyogVG8gc2V0IGhhcmR3YXJlIGZsb3cgY29udHJvbCB0byB0aGUgc3BlY2lmaWVkICoKKwkJICogc2VyaWFsIHBvcnQsIGluIFNQMS8yX0NPTlRST0xfUkVHICAgICAgICAgICAgICovCiAJCWlmIChwb3J0LT5udW1iZXIpIHsKIAkJCWRhdGEgPSAweDAwMTsKIAkJCXNlbmRfbW9zX2NtZChzZXJpYWwsIE1PU19XUklURSwgTU9TX01BWF9QT1JULApAQCAtMTE5OCwxNCArMTE4OCwxMyBAQAogICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byBjaGFuZ2UgdGhlCiAgKgl0ZXJtaW9zIHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgbW9zNzcyMF9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBtb3M3NzIwX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgY2ZsYWc7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKIAlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAogCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIApAQCAtMTIxNCwxNSArMTIwMywxMiBAQAogCWlmIChtb3M3NzIwX3BvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JdHR5ID0gcG9ydC0+dHR5OwotCi0KIAlpZiAoIW1vczc3MjBfcG9ydC0+b3BlbikgewogCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JZGJnKCIlc1xuIiwic2V0dGluZyB0ZXJtaW9zIC0gQVNQSVJFIik7CisJZGJnKCIlc1xuIiwgInNldHRpbmcgdGVybWlvcyAtIEFTUElSRSIpOwogCiAJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAKQEAgLTEyMzcsMTQgKzEyMjMsMTQgQEAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJLyogY2hhbmdlIHRoZSBwb3J0IHNldHRpbmdzIHRvIHRoZSBuZXcgb25lcyBzcGVjaWZpZWQgKi8KLQljaGFuZ2VfcG9ydF9zZXR0aW5ncyhtb3M3NzIwX3BvcnQsIG9sZF90ZXJtaW9zKTsKKwljaGFuZ2VfcG9ydF9zZXR0aW5ncyh0dHksIG1vczc3MjBfcG9ydCwgb2xkX3Rlcm1pb3MpOwogCi0JaWYoIXBvcnQtPnJlYWRfdXJiKSB7Ci0JCWRiZygiJXMiLCJVUkIgS0lMTEVEICEhISEhXG4iKTsKKwlpZiAoIXBvcnQtPnJlYWRfdXJiKSB7CisJCWRiZygiJXMiLCAiVVJCIEtJTExFRCAhISEhIVxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlpZihwb3J0LT5yZWFkX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCWlmIChwb3J0LT5yZWFkX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgewogCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHN0YXR1cykKQEAgLTEyNjQsMTMgKzEyNTAsMTMgQEAKICAqIAkgICAgdHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBpcyBlbXB0eS4gIFRoaXMgZnVuY3Rpb25hbGl0eQogICogCSAgICBhbGxvd3MgYW4gUlM0ODUgZHJpdmVyIHRvIGJlIHdyaXR0ZW4gaW4gdXNlciBzcGFjZS4KICAqLwotc3RhdGljIGludCBnZXRfbHNyX2luZm8oc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0LAotCQkJdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCitzdGF0aWMgaW50IGdldF9sc3JfaW5mbyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQsIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQogewogCWludCBjb3VudDsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKIAotCWNvdW50ID0gbW9zNzcyMF9jaGFyc19pbl9idWZmZXIobW9zNzcyMF9wb3J0LT5wb3J0KTsKKwljb3VudCA9IG1vczc3MjBfY2hhcnNfaW5fYnVmZmVyKHR0eSk7CiAJaWYgKGNvdW50ID09IDApIHsKIAkJZGJnKCIlcyAtLSBFbXB0eSIsIF9fZnVuY19fKTsKIAkJcmVzdWx0ID0gVElPQ1NFUl9URU1UOwpAQCAtMTI5MCw3ICsxMjc2LDcgQEAKIAkJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQogewogCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBtb3M3NzIwX3BvcnQtPnBvcnQtPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gbW9zNzcyMF9wb3J0LT5wb3J0LT5wb3J0LnR0eTsKIAogCWlmICghdHR5KQogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwpAQCAtMTMxNiw3ICsxMzAyLDcgQEAKIAlpZiAobW9zNzcyMF9wb3J0ID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAotCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCopbW9zNzcyMF9wb3J0LT5wb3J0OworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKW1vczc3MjBfcG9ydC0+cG9ydDsKIAltY3IgPSBtb3M3NzIwX3BvcnQtPnNoYWRvd01DUjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYXJnLCB2YWx1ZSwgc2l6ZW9mKGludCkpKQpAQCAtMTM5Nyw3ICsxMzgzLDcgQEAKIAl0bXAucG9ydAkJPSBtb3M3NzIwX3BvcnQtPnBvcnQtPm51bWJlcjsKIAl0bXAuaXJxCQkJPSAwOwogCXRtcC5mbGFncwkJPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKLSAgICAgICAgdG1wLnhtaXRfZmlmb19zaXplCT0gTlVNX1VSQlMgKiBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisJdG1wLnhtaXRfZmlmb19zaXplCT0gTlVNX1VSQlMgKiBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CiAJdG1wLmJhdWRfYmFzZQkJPSA5NjAwOwogCXRtcC5jbG9zZV9kZWxheQkJPSA1KkhaOwogCXRtcC5jbG9zaW5nX3dhaXQJPSAzMCpIWjsKQEAgLTE0MDcsOSArMTM5MywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vczc3MjBfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IG1vczc3MjBfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0OwogCXN0cnVjdCBhc3luY19pY291bnQgY25vdzsKIAlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNwcmV2OwpAQCAtMTQzMSwxNCArMTQxOCwxNiBAQAogCiAJY2FzZSBUSU9DU0VSR0VUTFNSOgogCQlkYmcoIiVzICglZCkgVElPQ1NFUkdFVExTUiIsIF9fZnVuY19fLCAgcG9ydC0+bnVtYmVyKTsKLQkJcmV0dXJuIGdldF9sc3JfaW5mbyhtb3M3NzIwX3BvcnQsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKTsKKwkJcmV0dXJuIGdldF9sc3JfaW5mbyh0dHksIG1vczc3MjBfcG9ydCwKKwkJCQkJKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpOwogCQlyZXR1cm4gMDsKIAorCS8qIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgdXNpbmcgdGhlIG1vZGUgbWV0aG9kcyAqLwogCWNhc2UgVElPQ01CSVM6CiAJY2FzZSBUSU9DTUJJQzoKIAljYXNlIFRJT0NNU0VUOgotCQlkYmcoIiVzICglZCkgVElPQ01TRVQvVElPQ01CSUMvVElPQ01TRVQiLCBfX2Z1bmNfXywKLQkJICAgIHBvcnQtPm51bWJlcik7CisJCWRiZygiJXMgKCVkKSBUSU9DTVNFVC9USU9DTUJJQy9USU9DTVNFVCIsCisJCQkJCV9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCQlyZXR1cm4gc2V0X21vZGVtX2luZm8obW9zNzcyMF9wb3J0LCBjbWQsCiAJCQkJICAgICAgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpOwogCkBAIC0xNDUyLDEwICsxNDQxLDYgQEAKIAkJcmV0dXJuIGdldF9zZXJpYWxfaW5mbyhtb3M3NzIwX3BvcnQsCiAJCQkJICAgICAgIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOwogCi0JY2FzZSBUSU9DU1NFUklBTDoKLQkJZGJnKCIlcyAoJWQpIFRJT0NTU0VSSUFMIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOwotCQlicmVhazsKLQogCWNhc2UgVElPQ01JV0FJVDoKIAkJZGJnKCIlcyAoJWQpIFRJT0NNSVdBSVQiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlcik7CiAJCWNwcmV2ID0gbW9zNzcyMF9wb3J0LT5pY291bnQ7CkBAIC0xNDY5LDcgKzE0NTQsNyBAQAogCQkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwKIAkJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8CiAJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSB8fAotCQkJICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY25vdy5jdHMgIT0gY3ByZXYuY3RzKSkgKSB7CisJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSkgewogCQkJCXJldHVybiAwOwogCQkJfQogCQkJY3ByZXYgPSBjbm93OwpAQCAtMTQ5Miw3ICsxNDc3LDcgQEAKIAkJaWNvdW50LmJ1Zl9vdmVycnVuID0gY25vdy5idWZfb3ZlcnJ1bjsKIAogCQlkYmcoIiVzICglZCkgVElPQ0dJQ09VTlQgUlg9JWQsIFRYPSVkIiwgX19mdW5jX18sCi0JCSAgICBwb3J0LT5udW1iZXIsIGljb3VudC5yeCwgaWNvdW50LnR4ICk7CisJCSAgICBwb3J0LT5udW1iZXIsIGljb3VudC5yeCwgaWNvdW50LnR4KTsKIAkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpY291bnQsIHNpemVvZihpY291bnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKQEAgLTE1NDMsNyArMTUyOCw4IEBACiAJCS8qIEluaXRpYWxpemUgYWxsIHBvcnQgaW50ZXJydXB0IGVuZCBwb2ludCB0byBwb3J0IDAgaW50CiAJCSAqIGVuZHBvaW50LiAgT3VyIGRldmljZSBoYXMgb25seSBvbmUgaW50ZXJydXB0IGVuZHBvaW50CiAJCSAqIGNvbW1hbiB0byBhbGwgcG9ydHMgKi8KLQkJc2VyaWFsLT5wb3J0W2ldLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzID0gc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOworCQlzZXJpYWwtPnBvcnRbaV0tPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPQorCQkJCXNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzczsKIAogCQltb3M3NzIwX3BvcnQtPnBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIG1vczc3MjBfcG9ydCk7CkBAIC0xNTU1LDEzICsxNTQxLDE1IEBACiAKIAkvKiBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gZmVhdHVyZSB0byBvbmUgKi8KIAl1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkoX191OCkweDAzLCAweDAwLDB4MDEsMHgwMCwgTlVMTCwgMHgwMCwgNSpIWik7CisJCQkoX191OCkweDAzLCAweDAwLCAweDAxLCAweDAwLCBOVUxMLCAweDAwLCA1KkhaKTsKIAotCXNlbmRfbW9zX2NtZChzZXJpYWwsTU9TX1JFQUQsMHgwMCwgVUFSVF9MU1IsICZkYXRhKTsgIC8vIExTUiBGb3IgUG9ydCAxCi0JZGJnKCJMU1I6JXgiLGRhdGEpOworCS8qIExTUiBGb3IgUG9ydCAxICovCisJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1JFQUQsIDB4MDAsIFVBUlRfTFNSLCAmZGF0YSk7CisJZGJnKCJMU1I6JXgiLCBkYXRhKTsKIAotCXNlbmRfbW9zX2NtZChzZXJpYWwsTU9TX1JFQUQsMHgwMSwgVUFSVF9MU1IsICZkYXRhKTsgIC8vIExTUiBGb3IgUG9ydCAyCi0JZGJnKCJMU1I6JXgiLGRhdGEpOworCS8qIExTUiBGb3IgUG9ydCAyICovCisJc2VuZF9tb3NfY21kKHNlcmlhbCwgTU9TX1JFQUQsIDB4MDEsIFVBUlRfTFNSLCAmZGF0YSk7CisJZGJnKCJMU1I6JXgiLCBkYXRhKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU3MSw3ICsxNTU5LDcgQEAKIAlpbnQgaTsKIAogCS8qIGZyZWUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciBzZXJpYWwgcG9ydCAqLwotCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pKTsKIAkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CiAJfQpAQCAtMTY1MSw4ICsxNjM5LDggQEAKIG1vZHVsZV9leGl0KG1vc2NoaXA3NzIwX2V4aXQpOwogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCmluZGV4IDc4ZjJmNmQuLjA5ZDgyMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KQEAgLTgyLDggKzgyLDggQEAKICAqIERlZmluZXMgdXNlZCBmb3Igc2VuZGluZyBjb21tYW5kcyB0byBwb3J0CiAgKi8KIAotI2RlZmluZSBXQUlUX0ZPUl9FVkVSICAgKEhaICogMCApCS8qIHRpbWVvdXQgdXJiIGlzIHdhaXQgZm9yIGV2ZXIgKi8KLSNkZWZpbmUgTU9TX1dEUl9USU1FT1VUIChIWiAqIDUgKQkvKiBkZWZhdWx0IHVyYiB0aW1lb3V0ICovCisjZGVmaW5lIFdBSVRfRk9SX0VWRVIgICAoSFogKiAwKQkvKiB0aW1lb3V0IHVyYiBpcyB3YWl0IGZvciBldmVyICovCisjZGVmaW5lIE1PU19XRFJfVElNRU9VVCAoSFogKiA1KQkvKiBkZWZhdWx0IHVyYiB0aW1lb3V0ICovCiAKICNkZWZpbmUgTU9TX1BPUlQxICAgICAgIDB4MDIwMAogI2RlZmluZSBNT1NfUE9SVDIgICAgICAgMHgwMzAwCkBAIC0xMDIsOCArMTAyLDggQEAKIAogI2RlZmluZSBNQVhfTkFNRV9MRU4gICAgNjQKIAotI2RlZmluZSBaTFBfUkVHMSAgMHgzQQkJLy9aZXJvX0ZsYWdfUmVnMSAgICA1OAotI2RlZmluZSBaTFBfUkVHNSAgMHgzRQkJLy9aZXJvX0ZsYWdfUmVnNSAgICA2MgorI2RlZmluZSBaTFBfUkVHMSAgMHgzQQkJLyogWmVyb19GbGFnX1JlZzEgICAgNTggKi8KKyNkZWZpbmUgWkxQX1JFRzUgIDB4M0UJCS8qIFplcm9fRmxhZ19SZWc1ICAgIDYyICovCiAKIC8qIEZvciBoaWdoZXIgYmF1ZCBSYXRlcyB1c2UgVElPQ0VYQkFVRCAqLwogI2RlZmluZSBUSU9DRVhCQVVEICAgICAweDU0NjIKQEAgLTE0Miw3ICsxNDIsNyBAQAogI2RlZmluZSBNT1NfTVNSX0RFTFRBX1JJICAgIDB4NDAKICNkZWZpbmUgTU9TX01TUl9ERUxUQV9DRCAgICAweDgwCiAKLS8vIFNlcmlhbCBQb3J0IHJlZ2lzdGVyIEFkZHJlc3MKKy8qIFNlcmlhbCBQb3J0IHJlZ2lzdGVyIEFkZHJlc3MgKi8KICNkZWZpbmUgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiAgKChfX3UxNikoMHgwMSkpCiAjZGVmaW5lIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiAgICAgICgoX191MTYpKDB4MDIpKQogI2RlZmluZSBMSU5FX0NPTlRST0xfUkVHSVNURVIgICAgICAoKF9fdTE2KSgweDAzKSkKQEAgLTIwMSwxMSArMjAxLDExIEBACiAJc3RydWN0IGFzeW5jX2ljb3VudCBpY291bnQ7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsJLyogbG9vcCBiYWNrIHRvIHRoZSBvd25lciBvZiB0aGlzIG9iamVjdCAqLwogCi0JLypPZmZzZXRzICovCisJLyogT2Zmc2V0cyAqLwogCV9fdTggU3BSZWdPZmZzZXQ7CiAJX191OCBDb250cm9sUmVnT2Zmc2V0OwogCV9fdTggRGNyUmVnT2Zmc2V0OwotCS8vZm9yIHByb2Nlc3NpbmcgY29udHJvbCBVUkJTIGluIGludGVycnVwdCBjb250ZXh0CisJLyogZm9yIHByb2Nlc3NpbmcgY29udHJvbCBVUkJTIGluIGludGVycnVwdCBjb250ZXh0ICovCiAJc3RydWN0IHVyYiAqY29udHJvbF91cmI7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CiAJY2hhciAqY3RybF9idWY7CkBAIC0yNDQsNyArMjQ0LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IG1vczc4NDBfZ2V0X3JlZ19zeW5jKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IHJlZywKLQkJCQlfX3UxNiAqIHZhbCkKKwkJCQlfX3UxNiAqdmFsKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlpbnQgcmV0ID0gMDsKQEAgLTI2OSwxNiArMjY5LDE1IEBACiAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJdmFsID0gdmFsICYgMHgwMGZmOwotCS8vIEZvciB0aGUgVUFSVCBjb250cm9sIHJlZ2lzdGVycywgdGhlIGFwcGxpY2F0aW9uIG51bWJlciBuZWVkIHRvIGJlIE9yJ2VkCisJLyogRm9yIHRoZSBVQVJUIGNvbnRyb2wgcmVnaXN0ZXJzLCB0aGUgYXBwbGljYXRpb24gbnVtYmVyIG5lZWQKKwkgICB0byBiZSBPcidlZCAqLwogCWlmIChwb3J0LT5zZXJpYWwtPm51bV9wb3J0cyA9PSA0KSB7Ci0JCXZhbCB8PQotCQkgICAgKCgoX191MTYpIHBvcnQtPm51bWJlciAtIChfX3UxNikgKHBvcnQtPnNlcmlhbC0+bWlub3IpKSArCi0JCSAgICAgMSkgPDwgODsKKwkJdmFsIHw9ICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLQorCQkJCShfX3UxNikgKHBvcnQtPnNlcmlhbC0+bWlub3IpKSArIDEpIDw8IDg7CiAJCWRiZygibW9zNzg0MF9zZXRfdWFydF9yZWcgYXBwbGljYXRpb24gbnVtYmVyIGlzICV4XG4iLCB2YWwpOwogCX0gZWxzZSB7CiAJCWlmICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLSAoX191MTYpIChwb3J0LT5zZXJpYWwtPm1pbm9yKSkgPT0gMCkgewotCQkJdmFsIHw9Ci0JCQkgICAgKCgoX191MTYpIHBvcnQtPm51bWJlciAtCisJCQl2YWwgfD0gKCgoX191MTYpIHBvcnQtPm51bWJlciAtCiAJCQkgICAgICAoX191MTYpIChwb3J0LT5zZXJpYWwtPm1pbm9yKSkgKyAxKSA8PCA4OwogCQkJZGJnKCJtb3M3ODQwX3NldF91YXJ0X3JlZyBhcHBsaWNhdGlvbiBudW1iZXIgaXMgJXhcbiIsCiAJCQkgICAgdmFsKTsKQEAgLTMwMiwxNCArMzAxLDE1IEBACiAgKglieSBwYXNzaW5nIHVzYl9yY3ZjdHJscGlwZSBmdW5jdGlvbiBhcyBwYXJhbWV0ZXIuCiAgKi8KIHN0YXRpYyBpbnQgbW9zNzg0MF9nZXRfdWFydF9yZWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191MTYgcmVnLAotCQkJCV9fdTE2ICogdmFsKQorCQkJCV9fdTE2ICp2YWwpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCWludCByZXQgPSAwOwogCV9fdTE2IFd2YWw7CiAKLQkvL2RiZygiYXBwbGljYXRpb24gbnVtYmVyIGlzICU0eCBcbiIsKCgoX191MTYpcG9ydC0+bnVtYmVyIC0gKF9fdTE2KShwb3J0LT5zZXJpYWwtPm1pbm9yKSkrMSk8PDgpOwotCS8qV3ZhbCAgaXMgc2FtZSBhcyBhcHBsaWNhdGlvbiBudW1iZXIgKi8KKwkvKiBkYmcoImFwcGxpY2F0aW9uIG51bWJlciBpcyAlNHggXG4iLAorCSAgICAoKChfX3UxNilwb3J0LT5udW1iZXIgLSAoX191MTYpKHBvcnQtPnNlcmlhbC0+bWlub3IpKSsxKTw8OCk7ICovCisJLyogV3ZhbCAgaXMgc2FtZSBhcyBhcHBsaWNhdGlvbiBudW1iZXIgKi8KIAlpZiAocG9ydC0+c2VyaWFsLT5udW1fcG9ydHMgPT0gNCkgewogCQlXdmFsID0KIAkJICAgICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLSAoX191MTYpIChwb3J0LT5zZXJpYWwtPm1pbm9yKSkgKwpAQCAtMzE3LDE0ICszMTcsMTIgQEAKIAkJZGJnKCJtb3M3ODQwX2dldF91YXJ0X3JlZyBhcHBsaWNhdGlvbiBudW1iZXIgaXMgJXhcbiIsIFd2YWwpOwogCX0gZWxzZSB7CiAJCWlmICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLSAoX191MTYpIChwb3J0LT5zZXJpYWwtPm1pbm9yKSkgPT0gMCkgewotCQkJV3ZhbCA9Ci0JCQkgICAgKCgoX191MTYpIHBvcnQtPm51bWJlciAtCisJCQlXdmFsID0gKCgoX191MTYpIHBvcnQtPm51bWJlciAtCiAJCQkgICAgICAoX191MTYpIChwb3J0LT5zZXJpYWwtPm1pbm9yKSkgKyAxKSA8PCA4OwogCQkJZGJnKCJtb3M3ODQwX2dldF91YXJ0X3JlZyBhcHBsaWNhdGlvbiBudW1iZXIgaXMgJXhcbiIsCiAJCQkgICAgV3ZhbCk7CiAJCX0gZWxzZSB7Ci0JCQlXdmFsID0KLQkJCSAgICAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0KKwkJCVd2YWwgPSAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0KIAkJCSAgICAgIChfX3UxNikgKHBvcnQtPnNlcmlhbC0+bWlub3IpKSArIDIpIDw8IDg7CiAJCQlkYmcoIm1vczc4NDBfZ2V0X3VhcnRfcmVnIGFwcGxpY2F0aW9uIG51bWJlciBpcyAleFxuIiwKIAkJCSAgICBXdmFsKTsKQEAgLTQwNiwxMSArNDA0LDExIEBACiAJZGJnKCIlcyAtICUwMngiLCBfX2Z1bmNfXywgbmV3X2xzcik7CiAKIAlpZiAobmV3X2xzciAmIFNFUklBTF9MU1JfQkkpIHsKLQkJLy8KLQkJLy8gUGFyaXR5IGFuZCBGcmFtaW5nIGVycm9ycyBvbmx5IGNvdW50IGlmIHRoZXkKLQkJLy8gb2NjdXIgZXhjbHVzaXZlIG9mIGEgYnJlYWsgYmVpbmcKLQkJLy8gcmVjZWl2ZWQuCi0JCS8vCisJCS8qCisJCSAqIFBhcml0eSBhbmQgRnJhbWluZyBlcnJvcnMgb25seSBjb3VudCBpZiB0aGV5CisJCSAqIG9jY3VyIGV4Y2x1c2l2ZSBvZiBhIGJyZWFrIGJlaW5nCisJCSAqIHJlY2VpdmVkLgorCQkgKi8KIAkJbmV3X2xzciAmPSAoX191OCkgKFNFUklBTF9MU1JfT0UgfCBTRVJJQUxfTFNSX0JJKTsKIAl9CiAKQEAgLTQ5Miw3ICs0OTAsNyBAQAogfQogCiBzdGF0aWMgaW50IG1vczc4NDBfZ2V0X3JlZyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptY3MsIF9fdTE2IFd2YWwsIF9fdTE2IHJlZywKLQkJCSAgIF9fdTE2ICogdmFsKQorCQkJICAgX191MTYgKnZhbCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gbWNzLT5wb3J0LT5zZXJpYWwtPmRldjsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkciA9IG1jcy0+ZHI7CkBAIC01MDEsNyArNDk5LDcgQEAKIAogCWRyLT5iUmVxdWVzdFR5cGUgPSBNQ1NfUkRfUlRZUEU7CiAJZHItPmJSZXF1ZXN0ID0gTUNTX1JEUkVROwotCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNihXdmFsKTsJLy8wOworCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNihXdmFsKTsJLyogMCAqLwogCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNihyZWcpOwogCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMik7CiAKQEAgLTYwNyw3ICs2MDUsOCBAQAogCQkJfQogCQl9CiAJfQotCWlmICghKHJ2IDwgMCkpIC8qIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBjb250cm9sIHVyYiB3aWxsIHJlc3VibWl0ICovCisJaWYgKCEocnYgPCAwKSkKKwkJLyogdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIGNvbnRyb2wgdXJiIHdpbGwgcmVzdWJtaXQgKi8KIAkJcmV0dXJuOwogZXhpdDoKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwpAQCAtNjU2LDggKzY1NSw4IEBACiAJaWYgKCFwb3J0IHx8CiAJICAgIG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBmdW5jdGlvbikgfHwKIAkgICAgbW9zNzg0MF9zZXJpYWxfcGFyYW5vaWFfY2hlY2socG9ydC0+c2VyaWFsLCBmdW5jdGlvbikpIHsKLQkJLyogdGhlbiBzYXkgdGhhdCB3ZSBkb24ndCBoYXZlIGEgdmFsaWQgdXNiX3NlcmlhbCB0aGluZywgd2hpY2ggd2lsbAotCQkgKiBlbmQgdXAgZ2VucmF0aW5nIC1FTk9ERVYgcmV0dXJuIHZhbHVlcyAqLworCQkvKiB0aGVuIHNheSB0aGF0IHdlIGRvbid0IGhhdmUgYSB2YWxpZCB1c2Jfc2VyaWFsIHRoaW5nLAorCQkgKiB3aGljaCB3aWxsIGVuZCB1cCBnZW5yYXRpbmcgLUVOT0RFViByZXR1cm4gdmFsdWVzICovCiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNzEwLDcgKzcwOSw3IEBACiAJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uLiBcbiIpOwogCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQl0dHkgPSBtb3M3ODQwX3BvcnQtPnBvcnQtPnR0eTsKKwkJdHR5ID0gbW9zNzg0MF9wb3J0LT5wb3J0LT5wb3J0LnR0eTsKIAkJaWYgKHR0eSkgewogCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CkBAIC03NDEsOCArNzQwLDggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBtb3M3ODQwX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2sKLSAqCXRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGhhdmUgZmluaXNoZWQgc2VuZGluZyBzZXJpYWwgZGF0YQotICoJb24gdGhlIGJ1bGsgb3V0IGVuZHBvaW50LgorICoJdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gd2UgaGF2ZSBmaW5pc2hlZCBzZW5kaW5nCisgKglzZXJpYWwgZGF0YSBvbiB0aGUgYnVsayBvdXQgZW5kcG9pbnQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB2b2lkIG1vczc4NDBfYnVsa19vdXRfZGF0YV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCkBAIC03NzQsNyArNzczLDcgQEAKIAogCWRiZygiJXMgXG4iLCAiRW50ZXJpbmcgLi4uLi4uLi4uIik7CiAKLQl0dHkgPSBtb3M3ODQwX3BvcnQtPnBvcnQtPnR0eTsKKwl0dHkgPSBtb3M3ODQwX3BvcnQtPnBvcnQtPnBvcnQudHR5OwogCiAJaWYgKHR0eSAmJiBtb3M3ODQwX3BvcnQtPm9wZW4pCiAJCXR0eV93YWtldXAodHR5KTsKQEAgLTgwNCw3ICs4MDMsOCBAQAogICoJT3RoZXJ3aXNlIHdlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBtb3M3ODQwX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG1vczc4NDBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaW50IHJlc3BvbnNlOwogCWludCBqOwpAQCAtODQ3LDcgKzg0Nyw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgewogCQkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCQltb3M3ODQwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gTlVMTDsKQEAgLTg2OCw5ICs4NjksOCBAQAogICogMHgwOCA6IFNQMS8yIENvbnRyb2wgUmVnCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8vTkVFRCB0byBjaGVjayB0aGUgZm9sbG93aW5nIEJsb2NrCisJLyogTkVFRCB0byBjaGVjayB0aGUgZm9sbG93aW5nIEJsb2NrICovCiAKLQlzdGF0dXMgPSAwOwogCURhdGEgPSAweDA7CiAJc3RhdHVzID0gbW9zNzg0MF9nZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCwgJkRhdGEpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC04OTAsMzYgKzg5MCwzNSBAQAogCQlkYmcoIndyaXRpbmcgU3ByZWcgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLS8vRW5kIG9mIGJsb2NrIHRvIGJlIGNoZWNrZWQKKwkvKiBFbmQgb2YgYmxvY2sgdG8gYmUgY2hlY2tlZCAqLwogCi0Jc3RhdHVzID0gMDsKIAlEYXRhID0gMHgwOwotCXN0YXR1cyA9Ci0JICAgIG1vczc4NDBfZ2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgJkRhdGEpOworCXN0YXR1cyA9IG1vczc4NDBfZ2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwKKwkJCQkJCQkJCSZEYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkYmcoIlJlYWRpbmcgQ29udHJvbHJlZyBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCURhdGEgfD0gMHgwODsJCS8vRHJpdmVyIGRvbmUgYml0Ci0JRGF0YSB8PSAweDIwOwkJLy9yeF9kaXNhYmxlCi0Jc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCBEYXRhKTsKKwlEYXRhIHw9IDB4MDg7CQkvKiBEcml2ZXIgZG9uZSBiaXQgKi8KKwlEYXRhIHw9IDB4MjA7CQkvKiByeF9kaXNhYmxlICovCisJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMocG9ydCwKKwkJCQltb3M3ODQwX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsIERhdGEpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWRiZygid3JpdGluZyBDb250cm9scmVnIGZhaWxlZFxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JLy9kbyByZWdpc3RlciBzZXR0aW5ncyBoZXJlCi0JLy8gU2V0IGFsbCByZWdzIHRvIHRoZSBkZXZpY2UgZGVmYXVsdCB2YWx1ZXMuCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gRmlyc3QgRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4KLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQorCS8qIGRvIHJlZ2lzdGVyIHNldHRpbmdzIGhlcmUgKi8KKwkvKiBTZXQgYWxsIHJlZ3MgdG8gdGhlIGRldmljZSBkZWZhdWx0IHZhbHVlcy4gKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBGaXJzdCBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLgorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAlEYXRhID0gMHgwMDsKIAlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBJTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLCBEYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkYmcoImRpc2FibGVpbmcgaW50ZXJydXB0cyBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCS8vIFNldCBGSUZPX0NPTlRST0xfUkVHSVNURVIgdG8gdGhlIGRlZmF1bHQgdmFsdWUKKwkvKiBTZXQgRklGT19DT05UUk9MX1JFR0lTVEVSIHRvIHRoZSBkZWZhdWx0IHZhbHVlICovCiAJRGF0YSA9IDB4MDA7CiAJc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgRklGT19DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtOTQ2LDkwICs5NDUsNzMgQEAKIAlzdGF0dXMgPSBtb3M3ODQwX2dldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsICZEYXRhKTsKIAltb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiA9IERhdGE7CiAKLQlEYXRhIHw9IFNFUklBTF9MQ1JfRExBQjsJLy9kYXRhIGxhdGNoIGVuYWJsZSBpbiBMQ1IgMHg4MAorCURhdGEgfD0gU0VSSUFMX0xDUl9ETEFCOwkvKiBkYXRhIGxhdGNoIGVuYWJsZSBpbiBMQ1IgMHg4MCAqLwogCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CiAKIAlEYXRhID0gMHgwYzsKLQlzdGF0dXMgPSAwOwogCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIERJVklTT1JfTEFUQ0hfTFNCLCBEYXRhKTsKIAogCURhdGEgPSAweDA7Ci0Jc3RhdHVzID0gMDsKIAlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBESVZJU09SX0xBVENIX01TQiwgRGF0YSk7CiAKIAlEYXRhID0gMHgwMDsKLQlzdGF0dXMgPSAwOwogCXN0YXR1cyA9IG1vczc4NDBfZ2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgJkRhdGEpOwogCiAJRGF0YSA9IERhdGEgJiB+U0VSSUFMX0xDUl9ETEFCOwotCXN0YXR1cyA9IDA7CiAJc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKIAltb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiA9IERhdGE7CiAKLQkvL2NsZWFyaW5nIEJ1bGtpbiBhbmQgQnVsa291dCBGaWZvCisJLyogY2xlYXJpbmcgQnVsa2luIGFuZCBCdWxrb3V0IEZpZm8gKi8KIAlEYXRhID0gMHgwOwotCXN0YXR1cyA9IDA7CiAJc3RhdHVzID0gbW9zNzg0MF9nZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCwgJkRhdGEpOwogCiAJRGF0YSA9IERhdGEgfCAweDBjOwotCXN0YXR1cyA9IDA7CiAJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCwgRGF0YSk7CiAKIAlEYXRhID0gRGF0YSAmIH4weDBjOwotCXN0YXR1cyA9IDA7CiAJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCwgRGF0YSk7Ci0JLy9GaW5hbGx5IGVuYWJsZSBhbGwgaW50ZXJydXB0cwotCURhdGEgPSAweDA7CisJLyogRmluYWxseSBlbmFibGUgYWxsIGludGVycnVwdHMgKi8KIAlEYXRhID0gMHgwYzsKLQlzdGF0dXMgPSAwOwogCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIElOVEVSUlVQVF9FTkFCTEVfUkVHSVNURVIsIERhdGEpOwogCi0JLy9jbGVhcmluZyByeF9kaXNhYmxlCisJLyogY2xlYXJpbmcgcnhfZGlzYWJsZSAqLwogCURhdGEgPSAweDA7Ci0Jc3RhdHVzID0gMDsKLQlzdGF0dXMgPQotCSAgICBtb3M3ODQwX2dldF9yZWdfc3luYyhwb3J0LCBtb3M3ODQwX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwlzdGF0dXMgPSBtb3M3ODQwX2dldF9yZWdfc3luYyhwb3J0LCBtb3M3ODQwX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsCisJCQkJCQkJCQkmRGF0YSk7CiAJRGF0YSA9IERhdGEgJiB+MHgyMDsKLQlzdGF0dXMgPSAwOwotCXN0YXR1cyA9Ci0JICAgIG1vczc4NDBfc2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LAorCQkJCQkJCQkJRGF0YSk7CiAKLQkvLyByeF9uZWdhdGUKKwkvKiByeF9uZWdhdGUgKi8KIAlEYXRhID0gMHgwOwotCXN0YXR1cyA9IDA7Ci0Jc3RhdHVzID0KLQkgICAgbW9zNzg0MF9nZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCAmRGF0YSk7CisJc3RhdHVzID0gbW9zNzg0MF9nZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LAorCQkJCQkJCQkJJkRhdGEpOwogCURhdGEgPSBEYXRhIHwgMHgxMDsKLQlzdGF0dXMgPSAwOwotCXN0YXR1cyA9Ci0JICAgIG1vczc4NDBfc2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LAorCQkJCQkJCQkJRGF0YSk7CiAKIAkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgKgogCSAqIHRoZSBkYXRhIHRocm91Z2gsb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggICAgICAqCiAJICogaGlnaCBkYXRhIHJhdGVzIChsaWtlIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuICAgICAgICovCisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKLQlpZiAocG9ydC0+dHR5KQotCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKLS8qIENoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBzZXQgdXAgb3VyIGVuZHBvaW50IGluZm8geWV0ICAgICoKLSAgICAgKiAoY2FuJ3Qgc2V0IGl0IHVwIGluIG1vczc4NDBfc3RhcnR1cCBhcyB0aGUgc3RydWN0dXJlcyAqCi0gICAgICogd2VyZSBub3Qgc2V0IHVwIGF0IHRoYXQgdGltZS4pICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBDaGVjayB0byBzZWUgaWYgd2UndmUgc2V0IHVwIG91ciBlbmRwb2ludCBpbmZvIHlldCAgICAqCisJICogKGNhbid0IHNldCBpdCB1cCBpbiBtb3M3ODQwX3N0YXJ0dXAgYXMgdGhlIHN0cnVjdHVyZXMgKgorCSAqIHdlcmUgbm90IHNldCB1cCBhdCB0aGF0IHRpbWUuKSAgICAgICAgICAgICAgICAgICAgICAgICovCiAJaWYgKHBvcnQwLT5vcGVuX3BvcnRzID09IDEpIHsKIAkJaWYgKHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX2J1ZmZlciA9PSBOVUxMKSB7Ci0KIAkJCS8qIHNldCB1cCBpbnRlcnJ1cHQgdXJiICovCi0KIAkJCXVzYl9maWxsX2ludF91cmIoc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiLAotCQkJCQkgc2VyaWFsLT5kZXYsCi0JCQkJCSB1c2JfcmN2aW50cGlwZShzZXJpYWwtPmRldiwKLQkJCQkJCQlzZXJpYWwtPnBvcnRbMF0tPgotCQkJCQkJCWludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJCQkgc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAotCQkJCQkgc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiLT4KLQkJCQkJIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJCSBtb3M3ODQwX2ludGVycnVwdF9jYWxsYmFjaywKLQkJCQkJIHNlcmlhbCwKLQkJCQkJIHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYi0+Ci0JCQkJCSBpbnRlcnZhbCk7CisJCQkJc2VyaWFsLT5kZXYsCisJCQkJdXNiX3JjdmludHBpcGUoc2VyaWFsLT5kZXYsCisJCQkJc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQlzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl9idWZmZXIsCisJCQkJc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiLT4KKwkJCQl0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCW1vczc4NDBfaW50ZXJydXB0X2NhbGxiYWNrLAorCQkJCXNlcmlhbCwKKwkJCQlzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmItPmludGVydmFsKTsKIAogCQkJLyogc3RhcnQgaW50ZXJydXB0IHJlYWQgZm9yIG1vczc4NDAgICAgICAgICAgICAgICAqCiAJCQkgKiB3aWxsIGNvbnRpbnVlIGFzIGxvbmcgYXMgbW9zNzg0MCBpcyBjb25uZWN0ZWQgICovCkBAIC0xMDg0LDE0ICsxMDY2LDE2IEBACiAJbWVtc2V0KCYobW9zNzg0MF9wb3J0LT5pY291bnQpLCAweDAwLCBzaXplb2YobW9zNzg0MF9wb3J0LT5pY291bnQpKTsKIAogCS8qIGluaXRpYWxpemUgb3VyIHBvcnQgc2V0dGluZ3MgKi8KLQltb3M3ODQwX3BvcnQtPnNoYWRvd01DUiA9IE1DUl9NQVNURVJfSUU7CS8qIE11c3Qgc2V0IHRvIGVuYWJsZSBpbnRzISAqLworCS8qIE11c3Qgc2V0IHRvIGVuYWJsZSBpbnRzISAqLworCW1vczc4NDBfcG9ydC0+c2hhZG93TUNSID0gTUNSX01BU1RFUl9JRTsKIAkvKiBzZW5kIGEgb3BlbiBwb3J0IGNvbW1hbmQgKi8KIAltb3M3ODQwX3BvcnQtPm9wZW4gPSAxOwotCS8vbW9zNzg0MF9jaGFuZ2VfcG9ydF9zZXR0aW5ncyhtb3M3ODQwX3BvcnQsb2xkX3Rlcm1pb3MpOworCS8qIG1vczc4NDBfY2hhbmdlX3BvcnRfc2V0dGluZ3MobW9zNzg0MF9wb3J0LG9sZF90ZXJtaW9zKTsgKi8KIAltb3M3ODQwX3BvcnQtPmljb3VudC50eCA9IDA7CiAJbW9zNzg0MF9wb3J0LT5pY291bnQucnggPSAwOwogCi0JZGJnKCJcblxudXNiX3NlcmlhbCBzZXJpYWw6JXAgICAgICAgbW9zNzg0MF9wb3J0OiVwXG4gICAgICB1c2Jfc2VyaWFsX3BvcnQgcG9ydDolcFxuXG4iLCBzZXJpYWwsIG1vczc4NDBfcG9ydCwgcG9ydCk7CisJZGJnKCJcblxudXNiX3NlcmlhbCBzZXJpYWw6JXAgICAgICAgbW9zNzg0MF9wb3J0OiVwXG4gICAgICB1c2Jfc2VyaWFsX3BvcnQgcG9ydDolcFxuXG4iLAorCQkJCXNlcmlhbCwgbW9zNzg0MF9wb3J0LCBwb3J0KTsKIAogCXJldHVybiAwOwogCkBAIC0xMTA0LDExICsxMDg4LDEyIEBACiAgKgliZWVuIHdyaXR0ZW4sIGJ1dCBoYXNuJ3QgbWFkZSBpdCBvdXQgdGhlIHBvcnQgeWV0KQogICoJSWYgc3VjY2Vzc2Z1bCwgd2UgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byBiZSB3cml0dGVuIGluIHRoZQogICoJc3lzdGVtLAotICoJT3RoZXJ3aXNlIHdlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqCU90aGVyd2lzZSB3ZSByZXR1cm4gemVyby4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBtb3M3ODQwX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBtb3M3ODQwX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCBpOwogCWludCBjaGFycyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExMTgsMjIgKzExMDMsMjAgQEAKIAogCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19mdW5jX18pKSB7CiAJCWRiZygiJXMiLCAiSW52YWxpZCBwb3J0IFxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJbW9zNzg0MF9wb3J0ID0gbW9zNzg0MF9nZXRfcG9ydF9wcml2YXRlKHBvcnQpOwogCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkgewogCQlkYmcoIiVzIFxuIiwgIm1vczc4NDBfYnJlYWs6bGVhdmluZyAuLi4uLi4uLi4uLiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtb3M3ODQwX3BvcnQtPnBvb2xfbG9jayxmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKLQkJaWYgKG1vczc4NDBfcG9ydC0+YnVzeVtpXSkgeworCXNwaW5fbG9ja19pcnFzYXZlKCZtb3M3ODQwX3BvcnQtPnBvb2xfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKQorCQlpZiAobW9zNzg0MF9wb3J0LT5idXN5W2ldKQogCQkJY2hhcnMgKz0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1vczc4NDBfcG9ydC0+cG9vbF9sb2NrLGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtb3M3ODQwX3BvcnQtPnBvb2xfbG9jaywgZmxhZ3MpOwogCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIGNoYXJzKTsKIAlyZXR1cm4gY2hhcnM7CiAKQEAgLTExNDksNyArMTEzMiw4IEBACiAgKgkJMy4gQSB0aW1lb3V0IG9mIDMgc2Vjb25kcyB3aXRob3V0IGFjdGl2aXR5IGhhcyBleHBpcmVkCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIG1vczc4NDBfYmxvY2tfdW50aWxfdHhfZW1wdHkoc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0KQorc3RhdGljIHZvaWQgbW9zNzg0MF9ibG9ja191bnRpbF90eF9lbXB0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydCkKIHsKIAlpbnQgdGltZW91dCA9IEhaIC8gMTA7CiAJaW50IHdhaXQgPSAzMDsKQEAgLTExNTcsMTIgKzExNDEsMTEgQEAKIAogCXdoaWxlICgxKSB7CiAKLQkJY291bnQgPSBtb3M3ODQwX2NoYXJzX2luX2J1ZmZlcihtb3M3ODQwX3BvcnQtPnBvcnQpOworCQljb3VudCA9IG1vczc4NDBfY2hhcnNfaW5fYnVmZmVyKHR0eSk7CiAKIAkJLyogQ2hlY2sgZm9yIEJ1ZmZlciBzdGF0dXMgKi8KLQkJaWYgKGNvdW50IDw9IDApIHsKKwkJaWYgKGNvdW50IDw9IDApCiAJCQlyZXR1cm47Ci0JCX0KIAogCQkvKiBCbG9jayB0aGUgdGhyZWFkIGZvciBhIHdoaWxlICovCiAJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmbW9zNzg0MF9wb3J0LT53YWl0X2NoYXNlLApAQCAtMTE4NSw3ICsxMTY4LDggQEAKICAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gYSBwb3J0IGlzIGNsb3NlZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBtb3M3ODQwX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgbW9zNzg0MF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKIAlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQ7CkBAIC0xMjI2LDMyICsxMjEwLDI4IEBACiAJCX0KIAl9CiAKLQlpZiAoc2VyaWFsLT5kZXYpIHsKKwlpZiAoc2VyaWFsLT5kZXYpCiAJCS8qIGZsdXNoIGFuZCBibG9jayB1bnRpbCB0eCBpcyBlbXB0eSAqLwotCQltb3M3ODQwX2Jsb2NrX3VudGlsX3R4X2VtcHR5KG1vczc4NDBfcG9ydCk7Ci0JfQorCQltb3M3ODQwX2Jsb2NrX3VudGlsX3R4X2VtcHR5KHR0eSwgbW9zNzg0MF9wb3J0KTsKIAogCS8qIFdoaWxlIGNsb3NpbmcgcG9ydCwgc2h1dGRvd24gYWxsIGJ1bGsgcmVhZCwgd3JpdGUgICoKIAkgKiBhbmQgaW50ZXJydXB0IHJlYWQgaWYgdGhleSBleGlzdHMgICAgICAgICAgICAgICAgICAqLwogCWlmIChzZXJpYWwtPmRldikgewotCiAJCWlmIChtb3M3ODQwX3BvcnQtPndyaXRlX3VyYikgewogCQkJZGJnKCIlcyIsICJTaHV0ZG93biBidWxrIHdyaXRlXG4iKTsKIAkJCXVzYl9raWxsX3VyYihtb3M3ODQwX3BvcnQtPndyaXRlX3VyYik7CiAJCX0KLQogCQlpZiAobW9zNzg0MF9wb3J0LT5yZWFkX3VyYikgewogCQkJZGJnKCIlcyIsICJTaHV0ZG93biBidWxrIHJlYWRcbiIpOwogCQkJdXNiX2tpbGxfdXJiKG1vczc4NDBfcG9ydC0+cmVhZF91cmIpOwogCQl9CiAJCWlmICgoJm1vczc4NDBfcG9ydC0+Y29udHJvbF91cmIpKSB7CiAJCQlkYmcoIiVzIiwgIlNodXRkb3duIGNvbnRyb2wgcmVhZFxuIik7Ci0JCQkvLyAgICAgIHVzYl9raWxsX3VyYiAobW9zNzg0MF9wb3J0LT5jb250cm9sX3VyYik7Ci0KKwkJCS8qLyAgICAgIHVzYl9raWxsX3VyYiAobW9zNzg0MF9wb3J0LT5jb250cm9sX3VyYik7ICovCiAJCX0KIAl9Ci0vLyAgICAgICAgICAgICAgaWYobW9zNzg0MF9wb3J0LT5jdHJsX2J1ZiAhPSBOVUxMKQotLy8gICAgICAgICAgICAgICAgICAgICAga2ZyZWUobW9zNzg0MF9wb3J0LT5jdHJsX2J1Zik7CisvKiAgICAgIGlmKG1vczc4NDBfcG9ydC0+Y3RybF9idWYgIT0gTlVMTCkgKi8KKy8qICAgICAgICAgICAgICBrZnJlZShtb3M3ODQwX3BvcnQtPmN0cmxfYnVmKTsgKi8KIAlwb3J0MC0+b3Blbl9wb3J0cy0tOwogCWRiZygibW9zNzg0MF9udW1fb3Blbl9wb3J0cyBpbiBjbG9zZSVkOmluIHBvcnQlZFxuIiwKIAkgICAgcG9ydDAtPm9wZW5fcG9ydHMsIHBvcnQtPm51bWJlcik7CkBAIC0xMjY0LDEwICsxMjQ0LDggQEAKIAogCWlmIChtb3M3ODQwX3BvcnQtPndyaXRlX3VyYikgewogCQkvKiBpZiB0aGlzIHVyYiBoYWQgYSB0cmFuc2ZlciBidWZmZXIgYWxyZWFkeSAob2xkIHR4KSBmcmVlIGl0ICovCi0KLQkJaWYgKG1vczc4NDBfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgIT0gTlVMTCkgeworCQlpZiAobW9zNzg0MF9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciAhPSBOVUxMKQogCQkJa2ZyZWUobW9zNzg0MF9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0JCX0KIAkJdXNiX2ZyZWVfdXJiKG1vczc4NDBfcG9ydC0+d3JpdGVfdXJiKTsKIAl9CiAKQEAgLTEyOTMsMjAgKzEyNzEsMTkgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBtb3M3ODQwX2Jsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKHN0cnVjdCBtb3NjaGlwX3BvcnQKLQkJCQkJICAgICAgICptb3M3ODQwX3BvcnQpCitzdGF0aWMgdm9pZCBtb3M3ODQwX2Jsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydCkKIHsKIAlpbnQgdGltZW91dCA9IDEgKiBIWjsKIAlpbnQgd2FpdCA9IDEwOwogCWludCBjb3VudDsKIAogCXdoaWxlICgxKSB7Ci0JCWNvdW50ID0gbW9zNzg0MF9jaGFyc19pbl9idWZmZXIobW9zNzg0MF9wb3J0LT5wb3J0KTsKKwkJY291bnQgPSBtb3M3ODQwX2NoYXJzX2luX2J1ZmZlcih0dHkpOwogCiAJCS8qIENoZWNrIGZvciBCdWZmZXIgc3RhdHVzICovCi0JCWlmIChjb3VudCA8PSAwKSB7CisJCWlmIChjb3VudCA8PSAwKQogCQkJcmV0dXJuOwotCQl9CiAKIAkJLyogQmxvY2sgdGhlIHRocmVhZCBmb3IgYSB3aGlsZSAqLwogCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJm1vczc4NDBfcG9ydC0+d2FpdF9jaGFzZSwKQEAgLTEzMjgsOCArMTMwNSw5IEBACiAgKiBtb3M3ODQwX2JyZWFrCiAgKgl0aGlzIGZ1bmN0aW9uIHNlbmRzIGEgYnJlYWsgdG8gdGhlIHBvcnQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIG1vczc4NDBfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQorc3RhdGljIHZvaWQgbW9zNzg0MF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgY2hhciBkYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CiAJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0OwpAQCAtMTM1MCwyMSArMTMyOCwxNyBAQAogCiAJbW9zNzg0MF9wb3J0ID0gbW9zNzg0MF9nZXRfcG9ydF9wcml2YXRlKHBvcnQpOwogCi0JaWYgKG1vczc4NDBfcG9ydCA9PSBOVUxMKSB7CisJaWYgKG1vczc4NDBfcG9ydCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQogCi0JaWYgKHNlcmlhbC0+ZGV2KSB7Ci0KKwlpZiAoc2VyaWFsLT5kZXYpCiAJCS8qIGZsdXNoIGFuZCBibG9jayB1bnRpbCB0eCBpcyBlbXB0eSAqLwotCQltb3M3ODQwX2Jsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKG1vczc4NDBfcG9ydCk7Ci0JfQorCQltb3M3ODQwX2Jsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKHR0eSwgbW9zNzg0MF9wb3J0KTsKIAotCWlmIChicmVha19zdGF0ZSA9PSAtMSkgeworCWlmIChicmVha19zdGF0ZSA9PSAtMSkKIAkJZGF0YSA9IG1vczc4NDBfcG9ydC0+c2hhZG93TENSIHwgTENSX1NFVF9CUkVBSzsKLQl9IGVsc2UgeworCWVsc2UKIAkJZGF0YSA9IG1vczc4NDBfcG9ydC0+c2hhZG93TENSICYgfkxDUl9TRVRfQlJFQUs7Ci0JfQogCiAJbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IgPSBkYXRhOwogCWRiZygibWNzNzg0MF9icmVhayBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiBpcyAleFxuIiwKQEAgLTEzODMsOCArMTM1Nyw5IEBACiAgKglPdGhlcndpc2Ugd2UgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IG1vczc4NDBfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBtb3M3ODQwX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgaTsKIAlpbnQgcm9vbSA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0MDYsOSArMTM4MSw4IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbW9zNzg0MF9wb3J0LT5wb29sX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgewotCQlpZiAoIW1vczc4NDBfcG9ydC0+YnVzeVtpXSkgeworCQlpZiAoIW1vczc4NDBfcG9ydC0+YnVzeVtpXSkKIAkJCXJvb20gKz0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOwotCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1vczc4NDBfcG9ydC0+cG9vbF9sb2NrLCBmbGFncyk7CiAKQEAgLTE0MjYsNyArMTQwMCw3IEBACiAgKiAgICAgIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBtb3M3ODQwX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCitzdGF0aWMgaW50IG1vczc4NDBfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY291bnQpCiB7CiAJaW50IHN0YXR1czsKQEAgLTE0MzgsNDUgKzE0MTIsNDEgQEAKIAlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQ7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKIAlzdHJ1Y3QgdXJiICp1cmI7Ci0JLy9fX3UxNiBEYXRhOworCS8qIF9fdTE2IERhdGE7ICovCiAJY29uc3QgdW5zaWduZWQgY2hhciAqY3VycmVudF9wb3NpdGlvbiA9IGRhdGE7CiAJdW5zaWduZWQgY2hhciAqZGF0YTE7CiAJZGJnKCIlcyBcbiIsICJlbnRlcmluZyAuLi4uLi4uLi4uLiIpOwotCS8vZGJnKCJtb3M3ODQwX3dyaXRlOiBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiBpcyAleFxuIixtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUik7CisJLyogZGJnKCJtb3M3ODQwX3dyaXRlOiBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiBpcyAleFxuIiwKKwkJCQkJbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IpOyAqLwogCiAjaWZkZWYgTk9UTU9TNzg0MAogCURhdGEgPSAweDAwOwotCXN0YXR1cyA9IDA7CiAJc3RhdHVzID0gbW9zNzg0MF9nZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCAmRGF0YSk7CiAJbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IgPSBEYXRhOwogCWRiZygibW9zNzg0MF93cml0ZTogTElORV9DT05UUk9MX1JFR0lTVEVSIGlzICV4XG4iLCBEYXRhKTsKIAlkYmcoIm1vczc4NDBfd3JpdGU6IG1vczc4NDBfcG9ydC0+c2hhZG93TENSIGlzICV4XG4iLAogCSAgICBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUik7CiAKLQkvL0RhdGEgPSAweDAzOwotCS8vc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCxMSU5FX0NPTlRST0xfUkVHSVNURVIsRGF0YSk7Ci0JLy9tb3M3ODQwX3BvcnQtPnNoYWRvd0xDUj1EYXRhOy8vTmVlZCB0byBhZGQgbGF0ZXIKKwkvKiBEYXRhID0gMHgwMzsgKi8KKwkvKiBzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LExJTkVfQ09OVFJPTF9SRUdJU1RFUixEYXRhKTsgKi8KKwkvKiBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUj1EYXRhOy8vTmVlZCB0byBhZGQgbGF0ZXIgKi8KIAotCURhdGEgfD0gU0VSSUFMX0xDUl9ETEFCOwkvL2RhdGEgbGF0Y2ggZW5hYmxlIGluIExDUiAweDgwCi0Jc3RhdHVzID0gMDsKKwlEYXRhIHw9IFNFUklBTF9MQ1JfRExBQjsJLyogZGF0YSBsYXRjaCBlbmFibGUgaW4gTENSIDB4ODAgKi8KIAlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOwogCi0JLy9EYXRhID0gMHgwYzsKLQkvL3N0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsRElWSVNPUl9MQVRDSF9MU0IsRGF0YSk7CisJLyogRGF0YSA9IDB4MGM7ICovCisJLyogc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCxESVZJU09SX0xBVENIX0xTQixEYXRhKTsgKi8KIAlEYXRhID0gMHgwMDsKLQlzdGF0dXMgPSAwOwogCXN0YXR1cyA9IG1vczc4NDBfZ2V0X3VhcnRfcmVnKHBvcnQsIERJVklTT1JfTEFUQ0hfTFNCLCAmRGF0YSk7CiAJZGJnKCJtb3M3ODQwX3dyaXRlOkRMTCB2YWx1ZSBpcyAleFxuIiwgRGF0YSk7CiAKIAlEYXRhID0gMHgwOwotCXN0YXR1cyA9IDA7CiAJc3RhdHVzID0gbW9zNzg0MF9nZXRfdWFydF9yZWcocG9ydCwgRElWSVNPUl9MQVRDSF9NU0IsICZEYXRhKTsKIAlkYmcoIm1vczc4NDBfd3JpdGU6RExNIHZhbHVlIGlzICV4XG4iLCBEYXRhKTsKIAogCURhdGEgPSBEYXRhICYgflNFUklBTF9MQ1JfRExBQjsKIAlkYmcoIm1vczc4NDBfd3JpdGU6IG1vczc4NDBfcG9ydC0+c2hhZG93TENSIGlzICV4XG4iLAogCSAgICBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUik7Ci0Jc3RhdHVzID0gMDsKIAlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOwogI2VuZGlmCiAKQEAgLTE1NTUsOCArMTUyNSw3IEBACiAJbW9zNzg0MF9wb3J0LT5pY291bnQudHggKz0gdHJhbnNmZXJfc2l6ZTsKIAlzbXBfd21iKCk7CiAJZGJnKCJtb3M3ODQwX3BvcnQtPmljb3VudC50eCBpcyAlZDpcbiIsIG1vczc4NDBfcG9ydC0+aWNvdW50LnR4KTsKLSAgICAgIGV4aXQ6Ci0KK2V4aXQ6CiAJcmV0dXJuIGJ5dGVzX3NlbnQ7CiAKIH0KQEAgLTE1NjcsMTAgKzE1MzYsMTAgQEAKICAqCWJlaW5nIHJlYWQgZnJvbSB0aGUgcG9ydC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgbW9zNzg0MF90aHJvdHRsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgbW9zNzg0MF90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBzdGF0dXM7CiAKIAlpZiAobW9zNzg0MF9wb3J0X3BhcmFub2lhX2NoZWNrKHBvcnQsIF9fZnVuY19fKSkgewpAQCAtMTU5MiwzMiArMTU2MSwyMCBAQAogCiAJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uIFxuIik7CiAKLQl0dHkgPSBwb3J0LT50dHk7Ci0JaWYgKCF0dHkpIHsKLQkJZGJnKCIlcyAtIG5vIHR0eSBhdmFpbGFibGUiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdG9wIGNoYXJhY3RlciAqLwogCWlmIChJX0lYT0ZGKHR0eSkpIHsKIAkJdW5zaWduZWQgY2hhciBzdG9wX2NoYXIgPSBTVE9QX0NIQVIodHR5KTsKLQkJc3RhdHVzID0gbW9zNzg0MF93cml0ZShwb3J0LCAmc3RvcF9jaGFyLCAxKTsKLQkJaWYgKHN0YXR1cyA8PSAwKSB7CisJCXN0YXR1cyA9IG1vczc4NDBfd3JpdGUodHR5LCBwb3J0LCAmc3RvcF9jaGFyLCAxKTsKKwkJaWYgKHN0YXR1cyA8PSAwKQogCQkJcmV0dXJuOwotCQl9CiAJfQotCiAJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBSVFMvQ1RTLCB0b2dnbGUgdGhhdCBsaW5lICovCiAJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKIAkJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgJj0gfk1DUl9SVFM7Ci0JCXN0YXR1cyA9IDA7Ci0JCXN0YXR1cyA9Ci0JCSAgICBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLAorCQlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLAogCQkJCQkgbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IpOwotCi0JCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0dXMgPCAwKQogCQkJcmV0dXJuOwotCQl9CiAJfQogCiAJcmV0dXJuOwpAQCAtMTYyNSwxMiArMTU4MiwxMyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIG1vczc4NDBfdW50aHJvdHRsZQotICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byByZXN1bWUgdGhlIGRhdGEKLSAqCWJlaW5nIHJlYWQgZnJvbSB0aGUgcG9ydCAoY2FsbGVkIGFmdGVyIFNlcmlhbFRocm90dGxlIGlzIGNhbGxlZCkKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8gcmVzdW1lCisgKgl0aGUgZGF0YSBiZWluZyByZWFkIGZyb20gdGhlIHBvcnQgKGNhbGxlZCBhZnRlciBtb3M3ODQwX3Rocm90dGxlIGlzCisgKgljYWxsZWQpCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBtb3M3ODQwX3VudGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIG1vczc4NDBfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQgPSBtb3M3ODQwX2dldF9wb3J0X3ByaXZhdGUocG9ydCk7CiAKQEAgLTE2NDksNDMgKzE2MDcsMzIgQEAKIAogCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uLiBcbiIpOwogCi0JdHR5ID0gcG9ydC0+dHR5OwotCWlmICghdHR5KSB7Ci0JCWRiZygiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCiAJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2VuZCB0aGUgc3RhcnQgY2hhcmFjdGVyICovCiAJaWYgKElfSVhPRkYodHR5KSkgewogCQl1bnNpZ25lZCBjaGFyIHN0YXJ0X2NoYXIgPSBTVEFSVF9DSEFSKHR0eSk7Ci0JCXN0YXR1cyA9IG1vczc4NDBfd3JpdGUocG9ydCwgJnN0YXJ0X2NoYXIsIDEpOwotCQlpZiAoc3RhdHVzIDw9IDApIHsKKwkJc3RhdHVzID0gbW9zNzg0MF93cml0ZSh0dHksIHBvcnQsICZzdGFydF9jaGFyLCAxKTsKKwkJaWYgKHN0YXR1cyA8PSAwKQogCQkJcmV0dXJuOwotCQl9CiAJfQogCiAJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBSVFMvQ1RTLCB0b2dnbGUgdGhhdCBsaW5lICovCiAJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKIAkJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgfD0gTUNSX1JUUzsKLQkJc3RhdHVzID0gMDsKLQkJc3RhdHVzID0KLQkJICAgIG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCisJCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCiAJCQkJCSBtb3M3ODQwX3BvcnQtPnNoYWRvd01DUik7Ci0JCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0dXMgPCAwKQogCQkJcmV0dXJuOwotCQl9CiAJfQotCi0JcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IG1vczc4NDBfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IG1vczc4NDBfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0OwogCXVuc2lnbmVkIGludCByZXN1bHQ7CiAJX191MTYgbXNyOwogCV9fdTE2IG1jcjsKLQlpbnQgc3RhdHVzID0gMDsKKwlpbnQgc3RhdHVzOwogCW1vczc4NDBfcG9ydCA9IG1vczc4NDBfZ2V0X3BvcnRfcHJpdmF0ZShwb3J0KTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CkBAIC0xNzA4LDkgKzE2NTUsMTAgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IG1vczc4NDBfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IG1vczc4NDBfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKIAl1bnNpZ25lZCBpbnQgbWNyOwogCWludCBzdGF0dXM7CkBAIC0xNzU1LDcgKzE3MDMsNyBAQAogICoJYmF1ZCByYXRlLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBtb3M3ODQwX2NhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IoaW50IGJhdWRSYXRlLCBpbnQgKmRpdmlzb3IsCi0JCQkJCSAgX191MTYgKiBjbGtfc2VsX3ZhbCkKKwkJCQkJICBfX3UxNiAqY2xrX3NlbF92YWwpCiB7CiAKIAlkYmcoIiVzIC0gJWQiLCBfX2Z1bmNfXywgYmF1ZFJhdGUpOwpAQCAtMTgwNyw5ICsxNzU1LDggQEAKIAkJLyogQ2hlY2sgZm9yIHJvdW5kIG9mZiAqLwogCQlyb3VuZDEgPSAoX191MTYpICgyMzA0MDAwTCAvIGJhdWRyYXRlKTsKIAkJcm91bmQgPSAoX191MTYpIChyb3VuZDEgLSAoY3VzdG9tICogMTApKTsKLQkJaWYgKHJvdW5kID4gNCkgeworCQlpZiAocm91bmQgPiA0KQogCQkJY3VzdG9tKys7Ci0JCX0KIAkJKmRpdmlzb3IgPSBjdXN0b207CiAKIAkJZGJnKCIgQmF1ZCAlZCA9ICVkXG4iLCBiYXVkcmF0ZSwgY3VzdG9tKTsKQEAgLTE4NTcsMTYgKzE4MDQsMTUgQEAKIAogCWRiZygiJXMgLSBwb3J0ID0gJWQsIGJhdWQgPSAlZCIsIF9fZnVuY19fLAogCSAgICBtb3M3ODQwX3BvcnQtPnBvcnQtPm51bWJlciwgYmF1ZFJhdGUpOwotCS8vcmVzZXQgY2xrX3VhcnRfc2VsIGluIHNwcmVnT2Zmc2V0CisJLyogcmVzZXQgY2xrX3VhcnRfc2VsIGluIHNwcmVnT2Zmc2V0ICovCiAJaWYgKGJhdWRSYXRlID4gMTE1MjAwKSB7CiAjaWZkZWYgSFdfZmxvd19jb250cm9sCi0JCS8vTk9URTogbmVlZCB0byBzZWUgdGhlIHB0aGVyIHJlZ2lzdGVyIHRvIG1vZGlmeQotCQkvL3NldHRpbmcgaC93IGZsb3cgY29udHJvbCBiaXQgdG8gMTsKLQkJc3RhdHVzID0gMDsKKwkJLyogTk9URTogbmVlZCB0byBzZWUgdGhlIHB0aGVyIHJlZ2lzdGVyIHRvIG1vZGlmeSAqLworCQkvKiBzZXR0aW5nIGgvdyBmbG93IGNvbnRyb2wgYml0IHRvIDEgKi8KIAkJRGF0YSA9IDB4MmI7CiAJCW1vczc4NDBfcG9ydC0+c2hhZG93TUNSID0gRGF0YTsKLQkJc3RhdHVzID0KLQkJICAgIG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCQlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLAorCQkJCQkJCQkJRGF0YSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlkYmcoIldyaXRpbmcgc3ByZWcgZmFpbGVkIGluIHNldF9zZXJpYWxfYmF1ZFxuIik7CiAJCQlyZXR1cm4gLTE7CkBAIC0xODc1LDEyICsxODIxLDExIEBACiAKIAl9IGVsc2UgewogI2lmZGVmIEhXX2Zsb3dfY29udHJvbAotCQkvL3NldHRpbmcgaC93IGZsb3cgY29udHJvbCBiaXQgdG8gMDsKLQkJc3RhdHVzID0gMDsKKwkJLyAqc2V0dGluZyBoL3cgZmxvdyBjb250cm9sIGJpdCB0byAwICovCiAJCURhdGEgPSAweGI7CiAJCW1vczc4NDBfcG9ydC0+c2hhZG93TUNSID0gRGF0YTsKLQkJc3RhdHVzID0KLQkJICAgIG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCQlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLAorCQkJCQkJCQkJRGF0YSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlkYmcoIldyaXRpbmcgc3ByZWcgZmFpbGVkIGluIHNldF9zZXJpYWxfYmF1ZFxuIik7CiAJCQlyZXR1cm4gLTE7CkBAIC0xODg5LDI1ICsxODM0LDIwIEBACiAKIAl9CiAKLQlpZiAoMSkJCQkvL2JhdWRSYXRlIDw9IDExNTIwMCkKLQl7CisJaWYgKDEpIHsJCS8qIGJhdWRSYXRlIDw9IDExNTIwMCkgKi8KIAkJY2xrX3NlbF92YWwgPSAweDA7CiAJCURhdGEgPSAweDA7Ci0JCXN0YXR1cyA9IDA7Ci0JCXN0YXR1cyA9Ci0JCSAgICBtb3M3ODQwX2NhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IoYmF1ZFJhdGUsICZkaXZpc29yLAorCQlzdGF0dXMgPSBtb3M3ODQwX2NhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IoYmF1ZFJhdGUsICZkaXZpc29yLAogCQkJCQkJICAgJmNsa19zZWxfdmFsKTsKLQkJc3RhdHVzID0KLQkJICAgIG1vczc4NDBfZ2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+U3BSZWdPZmZzZXQsCi0JCQkJCSAmRGF0YSk7CisJCXN0YXR1cyA9IG1vczc4NDBfZ2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+U3BSZWdPZmZzZXQsCisJCQkJCQkJCSAmRGF0YSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlkYmcoInJlYWRpbmcgc3ByZWcgZmFpbGVkIGluIHNldF9zZXJpYWxfYmF1ZFxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJRGF0YSA9IChEYXRhICYgMHg4ZikgfCBjbGtfc2VsX3ZhbDsKLQkJc3RhdHVzID0gMDsKLQkJc3RhdHVzID0KLQkJICAgIG1vczc4NDBfc2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+U3BSZWdPZmZzZXQsIERhdGEpOworCQlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhwb3J0LCBtb3M3ODQwX3BvcnQtPlNwUmVnT2Zmc2V0LAorCQkJCQkJCQlEYXRhKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWRiZygiV3JpdGluZyBzcHJlZyBmYWlsZWQgaW4gc2V0X3NlcmlhbF9iYXVkXG4iKTsKIAkJCXJldHVybiAtMTsKQEAgLTE5MzksNyArMTg3OSw2IEBACiAJCW1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CiAKIAl9Ci0KIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xOTQ5LDEwICsxODg4LDkgQEAKICAqICAgICAgdGhlIHNwZWNpZmllZCBuZXcgc2V0dGluZ3MuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIG1vczc4NDBfY2hhbmdlX3BvcnRfc2V0dGluZ3Moc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0LAotCQkJCQkgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIG1vczc4NDBfY2hhbmdlX3BvcnRfc2V0dGluZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgYmF1ZDsKIAl1bnNpZ25lZCBjZmxhZzsKIAl1bnNpZ25lZCBpZmxhZzsKQEAgLTE5ODgsOCArMTkyNiw2IEBACiAJCXJldHVybjsKIAl9CiAKLQl0dHkgPSBtb3M3ODQwX3BvcnQtPnBvcnQtPnR0eTsKLQogCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uLiBcbiIpOwogCiAJbERhdGEgPSBMQ1JfQklUU184OwpAQCAtMjAzMyw5ICsxOTY5LDggQEAKIAkJZGJnKCIlcyAtIHBhcml0eSA9IG5vbmUiLCBfX2Z1bmNfXyk7CiAJfQogCi0JaWYgKGNmbGFnICYgQ01TUEFSKSB7CisJaWYgKGNmbGFnICYgQ01TUEFSKQogCQlsUGFyaXR5ID0gbFBhcml0eSB8IDB4MjA7Ci0JfQogCiAJLyogQ2hhbmdlIHRoZSBTdG9wIGJpdCAqLwogCWlmIChjZmxhZyAmIENTVE9QQikgewpAQCAtMjA3NywxNiArMjAxMiwxMyBAQAogCS8qIHNldCB1cCB0aGUgTUNSIHJlZ2lzdGVyIGFuZCBzZW5kIGl0IHRvIHRoZSBtb3M3ODQwICovCiAKIAltb3M3ODQwX3BvcnQtPnNoYWRvd01DUiA9IE1DUl9NQVNURVJfSUU7Ci0JaWYgKGNmbGFnICYgQ0JBVUQpIHsKKwlpZiAoY2ZsYWcgJiBDQkFVRCkKIAkJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgfD0gKE1DUl9EVFIgfCBNQ1JfUlRTKTsKLQl9CiAKLQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJaWYgKGNmbGFnICYgQ1JUU0NUUykKIAkJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgfD0gKE1DUl9YT05fQU5ZKTsKLQotCX0gZWxzZSB7CisJZWxzZQogCQltb3M3ODQwX3BvcnQtPnNoYWRvd01DUiAmPSB+KE1DUl9YT05fQU5ZKTsKLQl9CiAKIAlEYXRhID0gbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1I7CiAJbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CkBAIC0yMTMxLDE0ICsyMDYzLDE0IEBACiAgKgl0aGUgdGVybWlvcyBzdHJ1Y3R1cmUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgbW9zNzg0MF9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorc3RhdGljIHZvaWQgbW9zNzg0MF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGludCBjZmxhZzsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwogCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWRiZygibW9zNzg0MF9zZXRfdGVybWlvczogU1RBUlRcbiIpOwogCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19mdW5jX18pKSB7CiAJCWRiZygiJXMiLCAiSW52YWxpZCBwb3J0IFxuIik7CkBAIC0yMTU3LDggKzIwODksNiBAQAogCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JdHR5ID0gcG9ydC0+dHR5OwotCiAJaWYgKCFtb3M3ODQwX3BvcnQtPm9wZW4pIHsKIAkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwpAQCAtMjE3Niw3ICsyMTA2LDcgQEAKIAogCS8qIGNoYW5nZSB0aGUgcG9ydCBzZXR0aW5ncyB0byB0aGUgbmV3IG9uZXMgc3BlY2lmaWVkICovCiAKLQltb3M3ODQwX2NoYW5nZV9wb3J0X3NldHRpbmdzKG1vczc4NDBfcG9ydCwgb2xkX3Rlcm1pb3MpOworCW1vczc4NDBfY2hhbmdlX3BvcnRfc2V0dGluZ3ModHR5LCBtb3M3ODQwX3BvcnQsIG9sZF90ZXJtaW9zKTsKIAogCWlmICghbW9zNzg0MF9wb3J0LT5yZWFkX3VyYikgewogCQlkYmcoIiVzIiwgIlVSQiBLSUxMRUQgISEhISFcbiIpOwpAQCAtMjIwNSwxMyArMjEzNSwxMyBAQAogICogCSAgICBhbGxvd3MgYW4gUlM0ODUgZHJpdmVyIHRvIGJlIHdyaXR0ZW4gaW4gdXNlciBzcGFjZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBtb3M3ODQwX2dldF9sc3JfaW5mbyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQsCitzdGF0aWMgaW50IG1vczc4NDBfZ2V0X2xzcl9pbmZvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkJdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCiB7CiAJaW50IGNvdW50OwogCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwogCi0JY291bnQgPSBtb3M3ODQwX2NoYXJzX2luX2J1ZmZlcihtb3M3ODQwX3BvcnQtPnBvcnQpOworCWNvdW50ID0gbW9zNzg0MF9jaGFyc19pbl9idWZmZXIodHR5KTsKIAlpZiAoY291bnQgPT0gMCkgewogCQlkYmcoIiVzIC0tIEVtcHR5IiwgX19mdW5jX18pOwogCQlyZXN1bHQgPSBUSU9DU0VSX1RFTVQ7CkBAIC0yMjI3LDYgKzIxNTcsOCBAQAogICogICAgICBmdW5jdGlvbiB0byBzZXQgbW9kZW0gaW5mbwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBGSVhNRTogU2hvdWxkIGJlIHVzaW5nIHRoZSBtb2RlbCBjb250cm9sIGhvb2tzICovCisKIHN0YXRpYyBpbnQgbW9zNzg0MF9zZXRfbW9kZW1faW5mbyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQsCiAJCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKIHsKQEAgLTIyODIsNyArMjIxNCw2IEBACiAJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgPSBtY3I7CiAKIAlEYXRhID0gbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1I7Ci0Jc3RhdHVzID0gMDsKIAlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkYmcoInNldHRpbmcgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiBGYWlsZWRcbiIpOwpAQCAtMjMwMywxMCArMjIzNCw4IEBACiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAJX191MTYgbXNyOwogCXVuc2lnbmVkIGludCBtY3IgPSBtb3M3ODQwX3BvcnQtPnNoYWRvd01DUjsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdGF0dXMgPQotCSAgICBtb3M3ODQwX2dldF91YXJ0X3JlZyhtb3M3ODQwX3BvcnQtPnBvcnQsIE1PREVNX1NUQVRVU19SRUdJU1RFUiwKLQkJCQkgJm1zcik7CisgICAgICAgIG1vczc4NDBfZ2V0X3VhcnRfcmVnKG1vczc4NDBfcG9ydC0+cG9ydCwKKwkJCQkJCU1PREVNX1NUQVRVU19SRUdJU1RFUiwgJm1zcik7CiAJcmVzdWx0ID0gKChtY3IgJiBNQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCS8qIDB4MDAyICovCiAJICAgIHwoKG1jciAmIE1DUl9SVFMpID8gVElPQ01fUlRTIDogMCkJLyogMHgwMDQgKi8KIAkgICAgfCgobXNyICYgTU9TNzg0MF9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCS8qIDB4MDIwICovCkBAIC0yMzU5LDEyICsyMjg4LDEyIEBACiAgKgl0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYW55IGlvY3RsIGNhbGxzIHRvIHRoZSBkcml2ZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBtb3M3ODQwX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBtb3M3ODQwX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJc3RydWN0IGFzeW5jX2ljb3VudCBjbm93OwogCXN0cnVjdCBhc3luY19pY291bnQgY3ByZXY7CkBAIC0yMzgxLDggKzIzMTAsNiBAQAogCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JdHR5ID0gbW9zNzg0MF9wb3J0LT5wb3J0LT50dHk7Ci0KIAlkYmcoIiVzIC0gcG9ydCAlZCwgY21kID0gMHgleCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMjM5MCw5ICsyMzE3LDEwIEBACiAKIAljYXNlIFRJT0NTRVJHRVRMU1I6CiAJCWRiZygiJXMgKCVkKSBUSU9DU0VSR0VUTFNSIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JCXJldHVybiBtb3M3ODQwX2dldF9sc3JfaW5mbyhtb3M3ODQwX3BvcnQsIGFyZ3ApOworCQlyZXR1cm4gbW9zNzg0MF9nZXRfbHNyX2luZm8odHR5LCBhcmdwKTsKIAkJcmV0dXJuIDA7CiAKKwkvKiBGSVhNRTogdXNlIHRoZSBtb2RlbSBob29rcyBhbmQgcmVtb3ZlIHRoaXMgKi8KIAljYXNlIFRJT0NNQklTOgogCWNhc2UgVElPQ01CSUM6CiAJY2FzZSBUSU9DTVNFVDoKQEAgLTI0MTgsNyArMjM0Niw3IEBACiAJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAJCWNwcmV2ID0gbW9zNzg0MF9wb3J0LT5pY291bnQ7CiAJCXdoaWxlICgxKSB7Ci0JCQkvL2ludGVycnVwdGlibGVfc2xlZXBfb24oJm1vczc4NDBfcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOworCQkJLyogaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmbW9zNzg0MF9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7ICovCiAJCQltb3M3ODQwX3BvcnQtPmRlbHRhX21zcl9jb25kID0gMDsKIAkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShtb3M3ODQwX3BvcnQtPmRlbHRhX21zcl93YWl0LAogCQkJCQkJIChtb3M3ODQwX3BvcnQtPgpAQCAtMjQ2MywxMyArMjM5MSw5IEBACiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmljb3VudCwgc2l6ZW9mKGljb3VudCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwotCi0JY2FzZSBUSU9DRVhCQVVEOgotCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0KIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCkBAIC0yNTI3LDggKzI0NTEsOSBAQAogCQkJZ290byBlcnJvcjsKIAkJfQogCi0JCS8qIEluaXRpYWxpemUgYWxsIHBvcnQgaW50ZXJydXB0IGVuZCBwb2ludCB0byBwb3J0IDAgaW50IGVuZHBvaW50ICoKLQkJICogT3VyIGRldmljZSBoYXMgb25seSBvbmUgaW50ZXJydXB0IGVuZCBwb2ludCBjb21tYW4gdG8gYWxsIHBvcnQgKi8KKwkJLyogSW5pdGlhbGl6ZSBhbGwgcG9ydCBpbnRlcnJ1cHQgZW5kIHBvaW50IHRvIHBvcnQgMCBpbnQKKwkJICogZW5kcG9pbnQuIE91ciBkZXZpY2UgaGFzIG9ubHkgb25lIGludGVycnVwdCBlbmQgcG9pbnQKKwkJICogY29tbW9uIHRvIGFsbCBwb3J0ICovCiAKIAkJbW9zNzg0MF9wb3J0LT5wb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQltb3M3ODQwX3NldF9wb3J0X3ByaXZhdGUoc2VyaWFsLT5wb3J0W2ldLCBtb3M3ODQwX3BvcnQpOwpAQCAtMjU2NCwyNyArMjQ4OSwyMyBAQAogCQkJbW9zNzg0MF9wb3J0LT5EY3JSZWdPZmZzZXQgPSAweDFjOwogCQl9CiAJCW1vczc4NDBfZHVtcF9zZXJpYWxfcG9ydChtb3M3ODQwX3BvcnQpOwotCiAJCW1vczc4NDBfc2V0X3BvcnRfcHJpdmF0ZShzZXJpYWwtPnBvcnRbaV0sIG1vczc4NDBfcG9ydCk7CiAKLQkJLy9lbmFibGUgcnhfZGlzYWJsZSBiaXQgaW4gY29udHJvbCByZWdpc3RlcgotCi0JCXN0YXR1cyA9Ci0JCSAgICBtb3M3ODQwX2dldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCi0JCQkJCSBtb3M3ODQwX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwkJLyogZW5hYmxlIHJ4X2Rpc2FibGUgYml0IGluIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJc3RhdHVzID0gbW9zNzg0MF9nZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCSBtb3M3ODQwX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWRiZygiUmVhZGluZyBDb250cm9sUmVnIGZhaWxlZCBzdGF0dXMtMHgleFxuIiwgc3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9IGVsc2UKIAkJCWRiZygiQ29udHJvbFJlZyBSZWFkaW5nIHN1Y2Nlc3MgdmFsIGlzICV4LCBzdGF0dXMlZFxuIiwKIAkJCSAgICBEYXRhLCBzdGF0dXMpOwotCQlEYXRhIHw9IDB4MDg7CS8vc2V0dGluZyBkcml2ZXIgZG9uZSBiaXQKLQkJRGF0YSB8PSAweDA0OwkvL3NwMV9iaXQgdG8gaGF2ZSBjdHMgY2hhbmdlIHJlZmxlY3QgaW4gbW9kZW0gc3RhdHVzIHJlZworCQlEYXRhIHw9IDB4MDg7CS8qIHNldHRpbmcgZHJpdmVyIGRvbmUgYml0ICovCisJCURhdGEgfD0gMHgwNDsJLyogc3AxX2JpdCB0byBoYXZlIGN0cyBjaGFuZ2UgcmVmbGVjdCBpbgorCQkJCSAgIG1vZGVtIHN0YXR1cyByZWcgKi8KIAotCQkvL0RhdGEgfD0gMHgyMDsgLy9yeF9kaXNhYmxlIGJpdAotCQlzdGF0dXMgPSAwOwotCQlzdGF0dXMgPQotCQkgICAgbW9zNzg0MF9zZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkvKiBEYXRhIHw9IDB4MjA7IC8vcnhfZGlzYWJsZSBiaXQgKi8KKwkJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAogCQkJCQkgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCBEYXRhKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWRiZygiV3JpdGluZyBDb250cm9sUmVnIGZhaWxlZChyeF9kaXNhYmxlKSBzdGF0dXMtMHgleFxuIiwgc3RhdHVzKTsKQEAgLTI1OTMsMTMgKzI1MTQsMTEgQEAKIAkJCWRiZygiQ29udHJvbFJlZyBXcml0aW5nIHN1Y2Nlc3MocnhfZGlzYWJsZSkgc3RhdHVzJWRcbiIsCiAJCQkgICAgc3RhdHVzKTsKIAotCQkvL1dyaXRlIGRlZmF1bHQgdmFsdWVzIGluIERDUiAoaS5lIDB4MDEgaW4gRENSMCwgMHgwNSBpbiBEQ1IyIGFuZCAweDI0IGluIERDUjMKKwkJLyogV3JpdGUgZGVmYXVsdCB2YWx1ZXMgaW4gRENSIChpLmUgMHgwMSBpbiBEQ1IwLCAweDA1IGluIERDUjIKKwkJICAgYW5kIDB4MjQgaW4gRENSMyAqLwogCQlEYXRhID0gMHgwMTsKLQkJc3RhdHVzID0gMDsKLQkJc3RhdHVzID0KLQkJICAgIG1vczc4NDBfc2V0X3JlZ19zeW5jKHNlcmlhbC0+cG9ydFtpXSwKLQkJCQkJIChfX3UxNikgKG1vczc4NDBfcG9ydC0+RGNyUmVnT2Zmc2V0ICsKLQkJCQkJCSAgMCksIERhdGEpOworCQlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkgKF9fdTE2KSAobW9zNzg0MF9wb3J0LT5EY3JSZWdPZmZzZXQgKyAwKSwgRGF0YSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlkYmcoIldyaXRpbmcgRENSMCBmYWlsZWQgc3RhdHVzLTB4JXhcbiIsIHN0YXR1cyk7CiAJCQlicmVhazsKQEAgLTI2MDcsMTEgKzI1MjYsOCBAQAogCQkJZGJnKCJEQ1IwIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZFxuIiwgc3RhdHVzKTsKIAogCQlEYXRhID0gMHgwNTsKLQkJc3RhdHVzID0gMDsKLQkJc3RhdHVzID0KLQkJICAgIG1vczc4NDBfc2V0X3JlZ19zeW5jKHNlcmlhbC0+cG9ydFtpXSwKLQkJCQkJIChfX3UxNikgKG1vczc4NDBfcG9ydC0+RGNyUmVnT2Zmc2V0ICsKLQkJCQkJCSAgMSksIERhdGEpOworCQlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkgKF9fdTE2KSAobW9zNzg0MF9wb3J0LT5EY3JSZWdPZmZzZXQgKyAxKSwgRGF0YSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlkYmcoIldyaXRpbmcgRENSMSBmYWlsZWQgc3RhdHVzLTB4JXhcbiIsIHN0YXR1cyk7CiAJCQlicmVhazsKQEAgLTI2MTksMjIgKzI1MzUsMTcgQEAKIAkJCWRiZygiRENSMSBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWRcbiIsIHN0YXR1cyk7CiAKIAkJRGF0YSA9IDB4MjQ7Ci0JCXN0YXR1cyA9IDA7Ci0JCXN0YXR1cyA9Ci0JCSAgICBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCi0JCQkJCSAoX191MTYpIChtb3M3ODQwX3BvcnQtPkRjclJlZ09mZnNldCArCi0JCQkJCQkgIDIpLCBEYXRhKTsKKwkJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJIChfX3UxNikgKG1vczc4NDBfcG9ydC0+RGNyUmVnT2Zmc2V0ICsgMiksIERhdGEpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJZGJnKCJXcml0aW5nIERDUjIgZmFpbGVkIHN0YXR1cy0weCV4XG4iLCBzdGF0dXMpOwogCQkJYnJlYWs7CiAJCX0gZWxzZQogCQkJZGJnKCJEQ1IyIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZFxuIiwgc3RhdHVzKTsKIAotCQkvLyB3cml0ZSB2YWx1ZXMgaW4gY2xrc3RhcnQweDAgYW5kIGNsa211bHRpIDB4MjAKKwkJLyogd3JpdGUgdmFsdWVzIGluIGNsa3N0YXJ0MHgwIGFuZCBjbGttdWx0aSAweDIwICovCiAJCURhdGEgPSAweDA7Ci0JCXN0YXR1cyA9IDA7Ci0JCXN0YXR1cyA9Ci0JCSAgICBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCXN0YXR1cyA9IG1vczc4NDBfc2V0X3JlZ19zeW5jKHNlcmlhbC0+cG9ydFtpXSwKIAkJCQkJIENMS19TVEFSVF9WQUxVRV9SRUdJU1RFUiwgRGF0YSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlkYmcoIldyaXRpbmcgQ0xLX1NUQVJUX1ZBTFVFX1JFR0lTVEVSIGZhaWxlZCBzdGF0dXMtMHgleFxuIiwgc3RhdHVzKTsKQEAgLTI2NDMsOSArMjU1NCw4IEBACiAJCQlkYmcoIkNMS19TVEFSVF9WQUxVRV9SRUdJU1RFUiBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWRcbiIsIHN0YXR1cyk7CiAKIAkJRGF0YSA9IDB4MjA7Ci0JCXN0YXR1cyA9Ci0JCSAgICBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sIENMS19NVUxUSV9SRUdJU1RFUiwKLQkJCQkJIERhdGEpOworCQlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCUNMS19NVUxUSV9SRUdJU1RFUiwgRGF0YSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlkYmcoIldyaXRpbmcgQ0xLX01VTFRJX1JFR0lTVEVSIGZhaWxlZCBzdGF0dXMtMHgleFxuIiwKIAkJCSAgICBzdGF0dXMpOwpAQCAtMjY1NCwxMSArMjU2NCwxMCBAQAogCQkJZGJnKCJDTEtfTVVMVElfUkVHSVNURVIgV3JpdGluZyBzdWNjZXNzIHN0YXR1cyVkXG4iLAogCQkJICAgIHN0YXR1cyk7CiAKLQkJLy93cml0ZSB2YWx1ZSAweDAgdG8gc2NyYXRjaHBhZCByZWdpc3RlcgorCQkvKiB3cml0ZSB2YWx1ZSAweDAgdG8gc2NyYXRjaHBhZCByZWdpc3RlciAqLwogCQlEYXRhID0gMHgwMDsKLQkJc3RhdHVzID0KLQkJICAgIG1vczc4NDBfc2V0X3VhcnRfcmVnKHNlcmlhbC0+cG9ydFtpXSwgU0NSQVRDSF9QQURfUkVHSVNURVIsCi0JCQkJCSBEYXRhKTsKKwkJc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcoc2VyaWFsLT5wb3J0W2ldLAorCQkJCQkJU0NSQVRDSF9QQURfUkVHSVNURVIsIERhdGEpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJZGJnKCJXcml0aW5nIFNDUkFUQ0hfUEFEX1JFR0lTVEVSIGZhaWxlZCBzdGF0dXMtMHgleFxuIiwKIAkJCSAgICBzdGF0dXMpOwpAQCAtMjY2NywyMSArMjU3NiwxNyBAQAogCQkJZGJnKCJTQ1JBVENIX1BBRF9SRUdJU1RFUiBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWRcbiIsCiAJCQkgICAgc3RhdHVzKTsKIAotCQkvL1plcm8gTGVuZ3RoIGZsYWcgcmVnaXN0ZXIKKwkJLyogWmVybyBMZW5ndGggZmxhZyByZWdpc3RlciAqLwogCQlpZiAoKG1vczc4NDBfcG9ydC0+cG9ydF9udW0gIT0gMSkKIAkJICAgICYmIChzZXJpYWwtPm51bV9wb3J0cyA9PSAyKSkgewogCiAJCQlEYXRhID0gMHhmZjsKLQkJCXN0YXR1cyA9IDA7CiAJCQlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCi0JCQkJCQkgICAgICAoX191MTYpIChaTFBfUkVHMSArCi0JCQkJCQkJICAgICAgICgoX191MTYpCi0JCQkJCQkJCW1vczc4NDBfcG9ydC0+Ci0JCQkJCQkJCXBvcnRfbnVtKSksCi0JCQkJCQkgICAgICBEYXRhKTsKKwkJCQkgICAgICAoX191MTYpIChaTFBfUkVHMSArCisJCQkJICAgICAgKChfX3UxNiltb3M3ODQwX3BvcnQtPnBvcnRfbnVtKSksIERhdGEpOwogCQkJZGJnKCJaTElQIG9mZnNldCV4XG4iLAogCQkJICAgIChfX3UxNikgKFpMUF9SRUcxICsKLQkJCQkgICAgICgoX191MTYpIG1vczc4NDBfcG9ydC0+cG9ydF9udW0pKSk7CisJCQkJCSgoX191MTYpIG1vczc4NDBfcG9ydC0+cG9ydF9udW0pKSk7CiAJCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJCWRiZygiV3JpdGluZyBaTFBfUkVHJWQgZmFpbGVkIHN0YXR1cy0weCV4XG4iLAogCQkJCSAgICBpICsgMiwgc3RhdHVzKTsKQEAgLTI2OTEsMTMgKzI1OTYsOSBAQAogCQkJCSAgICBpICsgMiwgc3RhdHVzKTsKIAkJfSBlbHNlIHsKIAkJCURhdGEgPSAweGZmOwotCQkJc3RhdHVzID0gMDsKIAkJCXN0YXR1cyA9IG1vczc4NDBfc2V0X3JlZ19zeW5jKHNlcmlhbC0+cG9ydFtpXSwKLQkJCQkJCSAgICAgIChfX3UxNikgKFpMUF9SRUcxICsKLQkJCQkJCQkgICAgICAgKChfX3UxNikKLQkJCQkJCQkJbW9zNzg0MF9wb3J0LT4KLQkJCQkJCQkJcG9ydF9udW0pIC0KLQkJCQkJCQkgICAgICAgMHgxKSwgRGF0YSk7CisJCQkgICAgICAoX191MTYpIChaTFBfUkVHMSArCisJCQkgICAgICAoKF9fdTE2KW1vczc4NDBfcG9ydC0+cG9ydF9udW0pIC0gMHgxKSwgRGF0YSk7CiAJCQlkYmcoIlpMSVAgb2Zmc2V0JXhcbiIsCiAJCQkgICAgKF9fdTE2KSAoWkxQX1JFRzEgKwogCQkJCSAgICAgKChfX3UxNikgbW9zNzg0MF9wb3J0LT5wb3J0X251bSkgLSAweDEpKTsKQEAgLTI3MTIsMTQgKzI2MTMsMTYgQEAKIAkJfQogCQltb3M3ODQwX3BvcnQtPmNvbnRyb2xfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJbW9zNzg0MF9wb3J0LT5jdHJsX2J1ZiA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOwotCQltb3M3ODQwX3BvcnQtPmRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9LRVJORUwpOwotCQlpZiAoIW1vczc4NDBfcG9ydC0+Y29udHJvbF91cmIgfHwgIW1vczc4NDBfcG9ydC0+Y3RybF9idWYgfHwgIW1vczc4NDBfcG9ydC0+ZHIpIHsKKwkJbW9zNzg0MF9wb3J0LT5kciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFtb3M3ODQwX3BvcnQtPmNvbnRyb2xfdXJiIHx8ICFtb3M3ODQwX3BvcnQtPmN0cmxfYnVmIHx8CisJCQkJCQkJIW1vczc4NDBfcG9ydC0+ZHIpIHsKIAkJCXN0YXR1cyA9IC1FTk9NRU07CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQogCi0JLy9aZXJvIExlbmd0aCBmbGFnIGVuYWJsZQorCS8qIFplcm8gTGVuZ3RoIGZsYWcgZW5hYmxlICovCiAJRGF0YSA9IDB4MGY7CiAJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0WzBdLCBaTFBfUkVHNSwgRGF0YSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTI3NjIsNyArMjY2NSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiAgICAgIGNoZWNrIGZvciB0aGUgcG9ydHMgdG8gYmUgY2xvc2VkLGNsb3NlIHRoZSBwb3J0cyBhbmQgZGlzY29ubmVjdCAgICAgICAgICovCisJLyogY2hlY2sgZm9yIHRoZSBwb3J0cyB0byBiZSBjbG9zZWQsY2xvc2UgdGhlIHBvcnRzIGFuZCBkaXNjb25uZWN0ICovCiAKIAkvKiBmcmVlIHByaXZhdGUgc3RydWN0dXJlIGFsbG9jYXRlZCBmb3Igc2VyaWFsIHBvcnQgICoKIAkgKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICAgICAgICAgICAgICAgICovCkBAIC0yODQzLDIwICsyNzQ2LDEyIEBACiAKIAkvKiBSZWdpc3RlciB3aXRoIHRoZSB1c2IgKi8KIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlvX2RyaXZlcik7Ci0KLQlpZiAocmV0dmFsKQotCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0KIAlpZiAocmV0dmFsID09IDApIHsKIAkJZGJnKCIlc1xuIiwgIkxlYXZpbmcuLi4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCi0gICAgICBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmbW9zY2hpcDc4NDBfNHBvcnRfZGV2aWNlKTsKLQotICAgICAgZmFpbGVkX3BvcnRfZGV2aWNlX3JlZ2lzdGVyOgotCitmYWlsZWRfcG9ydF9kZXZpY2VfcmVnaXN0ZXI6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL25hdm1hbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL25hdm1hbi5jCmluZGV4IDQzYzg4OTQuLmQ2NzM2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbmF2bWFuLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAogCQkJICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtNzksNyArNzksOCBAQAogCQkJX19mdW5jX18sIHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBpbnQgbmF2bWFuX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG5hdm1hbl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIApAQCAtOTYsMTQgKzk3LDE1IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgbmF2bWFuX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgbmF2bWFuX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwogfQogCi1zdGF0aWMgaW50IG5hdm1hbl93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorc3RhdGljIGludCBuYXZtYW5fd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwppbmRleCA3Yjc0MjJmLi5hZThlMjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKQEAgLTUsMjYgKzUsMjggQEAKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KICAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcworICogZHJpdmVyCiAgKgogICogUGxlYXNlIHJlcG9ydCBib3RoIHN1Y2Nlc3NlcyBhbmQgdHJvdWJsZXMgdG8gdGhlIGF1dGhvciBhdCBvbW5pbmV0QGtyb2FoLmNvbQotICogCisgKgogICogKDA1LzMwLzIwMDEpIGdraAotICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YKKyAqCXByb2JsZW1zLgogICoKICAqICgwNC8wOC8yMDAxKSBnYgogICoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KICAqCiAgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCiAgKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKLSAqIAorICoKICAqICgxMC8wNS8yMDAwKSBna2gKICAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKICAqCWNvcmUgbmVlZHMgaXQuCi0gKiAKKyAqCiAgKiAoMDgvMjgvMjAwMCkgZ2toCiAgKglBZGRlZCBsb2NrcyBmb3IgU01QIHNhZmVuZXNzLgotICoJRml4ZWQgTU9EX0lOQyBhbmQgTU9EX0RFQyBsb2dpYyBhbmQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIHBvcnQgbW9yZSAKKyAqCUZpeGVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgbG9naWMgYW5kIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBwb3J0IG1vcmUKICAqCXRoYW4gb25jZS4KICAqCUZpeGVkIHBvdGVudGlhbCByYWNlIGluIG9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjawogICoKQEAgLTQzLDcgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogCkBAIC01OCwyNSArNjAsMjkgQEAKIAogI2RlZmluZSBaWVhFTF9WRU5ET1JfSUQJCTB4MDU4NgogI2RlZmluZSBaWVhFTF9PTU5JTkVUX0lECTB4MTAwMAotI2RlZmluZSBCVF9JR05JVElPTlBST19JRAkweDIwMDAgIC8qIFRoaXMgb25lIHNlZW1zIHRvIGJlIGEgcmUtYnJhbmRlZCBaeVhFTCBkZXZpY2UgKi8KKy8qIFRoaXMgb25lIHNlZW1zIHRvIGJlIGEgcmUtYnJhbmRlZCBaeVhFTCBkZXZpY2UgKi8KKyNkZWZpbmUgQlRfSUdOSVRJT05QUk9fSUQJMHgyMDAwCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgIG9tbmluZXRfb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyB2b2lkIG9tbmluZXRfY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkIG9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyBpbnQgIG9tbmluZXRfd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7Ci1zdGF0aWMgaW50ICBvbW5pbmV0X3dyaXRlX3Jvb20JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIG9tbmluZXRfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBpbnQgb21uaW5ldF9hdHRhY2gJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIG9tbmluZXRfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG9tbmluZXRfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgb21uaW5ldF93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50ICBvbW5pbmV0X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCAgb21uaW5ldF93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQgb21uaW5ldF9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgb21uaW5ldF9hdHRhY2goc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShaWVhFTF9WRU5ET1JfSUQsIFpZWEVMX09NTklORVRfSUQpIH0sCiAJeyBVU0JfREVWSUNFKFpZWEVMX1ZFTkRPUl9JRCwgQlRfSUdOSVRJT05QUk9fSUQpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG9tbmluZXRfZHJpdmVyID0gewogCS5uYW1lID0JCSJvbW5pbmV0IiwKQEAgLTEzMCwzNCArMTM2LDM0IEBACiAgKgogICovCiAKLXN0cnVjdCBvbW5pbmV0X2hlYWRlcgoteworc3RydWN0IG9tbmluZXRfaGVhZGVyIHsKIAlfX3U4CW9oX3NlcTsKIAlfX3U4CW9oX2xlbjsKIAlfX3U4CW9oX3h4eDsKIAlfX3U4CW9oX3BhZDsKIH07CiAKLXN0cnVjdCBvbW5pbmV0X2RhdGEKLXsKLQlfX3U4CW9kX291dHNlcTsJLy8gU2VxdWVuY2UgbnVtYmVyIGZvciBidWxrX291dCBVUkJzCitzdHJ1Y3Qgb21uaW5ldF9kYXRhIHsKKwlfX3U4CW9kX291dHNlcTsJLyogU2VxdWVuY2UgbnVtYmVyIGZvciBidWxrX291dCBVUkJzICovCiB9OwogCi1zdGF0aWMgaW50IG9tbmluZXRfYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBvbW5pbmV0X2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXN0cnVjdCBvbW5pbmV0X2RhdGEgKm9kOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CiAKLQlvZCA9IGttYWxsb2MoIHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSwgR0ZQX0tFUk5FTCApOwotCWlmKCAhb2QgKSB7Ci0JCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19mdW5jX18sIHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSk7CisJb2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvZCkgeworCQllcnIoIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLiIsCisJCQkJX19mdW5jX18sIHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgb2QpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9tbmluZXRfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG9tbmluZXRfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSp3cG9ydDsKQEAgLTE2NiwyMiArMTcyLDI0IEBACiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXdwb3J0ID0gc2VyaWFsLT5wb3J0WzFdOwotCXdwb3J0LT50dHkgPSBwb3J0LT50dHk7CisJd3BvcnQtPnBvcnQudHR5ID0gdHR5OwkJLyogRklYTUUgKi8KIAogCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCi0JdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LCAKLQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCi0JCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkgICAgICBvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCW9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7Ci0JfQotCisJaWYgKHJlc3VsdCkKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgb21uaW5ldF9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIHZvaWQgb21uaW5ldF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwpAQCAtMTkyLDE0ICsyMDAsMTQgQEAKICNkZWZpbmUgT01OSU5FVF9IRUFERVJMRU4Jc2l6ZW9mKHN0cnVjdCBvbW5pbmV0X2hlYWRlcikKICNkZWZpbmUgT01OSU5FVF9CVUxLT1VUU0laRSAJKDY0IC0gT01OSU5FVF9IRUFERVJMRU4pCiAKLXN0YXRpYyB2b2lkIG9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCBvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAJKnBvcnQgCT0gdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIgCQkqZGF0YSAJPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIgCSpoZWFkZXIgPSAoc3RydWN0IG9tbmluZXRfaGVhZGVyICopICZkYXRhWzBdOwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQlpbnQgaTsKIAlpbnQgcmVzdWx0OworCWludCBpOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtMjA5LDQyICsyMTcsNDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICgoZGVidWcpICYmIChoZWFkZXItPm9oX3h4eCAhPSAweDMwKSkgeworCWlmIChkZWJ1ZyAmJiBoZWFkZXItPm9oX3h4eCAhPSAweDMwKSB7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiBvbW5pbmV0X3JlYWQgJWQ6ICIsIGhlYWRlci0+b2hfbGVuKTsKLQkJCWZvciAoaSA9IDA7IGkgPCAoaGVhZGVyLT5vaF9sZW4gKyBPTU5JTkVUX0hFQURFUkxFTik7IGkrKykgewotCQkJCXByaW50ayAoIiUuMnggIiwgZGF0YVtpXSk7Ci0JCQl9Ci0JCQlwcmludGsgKCJcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KKwkJCQkJIjogb21uaW5ldF9yZWFkICVkOiAiLCBoZWFkZXItPm9oX2xlbik7CisJCQlmb3IgKGkgPSAwOyBpIDwgKGhlYWRlci0+b2hfbGVuICsKKwkJCQkJCU9NTklORVRfSEVBREVSTEVOKTsgaSsrKQorCQkJCXByaW50aygiJS4yeCAiLCBkYXRhW2ldKTsKKwkJCXByaW50aygiXG4iKTsKIAkJfQogCX0KIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggJiYgaGVhZGVyLT5vaF9sZW4pIHsKLQkJZm9yIChpID0gMDsgaSA8IGhlYWRlci0+b2hfbGVuOyBpKyspIHsKLQkJCSB0dHlfaW5zZXJ0X2ZsaXBfY2hhcihwb3J0LT50dHksIGRhdGFbT01OSU5FVF9EQVRBT0ZGU0VUICsgaV0sIDApOwotCSAgCX0KLQkgIAl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT50dHkpOworCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHBvcnQtPnBvcnQudHR5LAorCQkJZGF0YSArIE9NTklORVRfREFUQU9GRlNFVCwgaGVhZGVyLT5vaF9sZW4pOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5wb3J0LnR0eSk7CiAJfQogCiAJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwotCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgcG9ydC0+c2VyaWFsLT5kZXYsIAotCQkgICAgICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJICAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJICAgICAgb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCisJCQl1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQlvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKKwkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IG9tbmluZXRfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorc3RhdGljIGludCBvbW5pbmV0X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewotCXN0cnVjdCB1c2Jfc2VyaWFsIAkqc2VyaWFsCT0gcG9ydC0+c2VyaWFsOwotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgCSp3cG9ydAk9IHNlcmlhbC0+cG9ydFsxXTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKndwb3J0ID0gc2VyaWFsLT5wb3J0WzFdOwogCi0Jc3RydWN0IG9tbmluZXRfZGF0YSAJKm9kIAk9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIJKmhlYWRlciA9IChzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIgKikgd3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBvbW5pbmV0X2RhdGEgKm9kID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBvbW5pbmV0X2hlYWRlciAqaGVhZGVyID0gKHN0cnVjdCBvbW5pbmV0X2hlYWRlciAqKQorCQkJCQl3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAKIAlpbnQJCQlyZXN1bHQ7CiAKQEAgLTI1Miw3ICsyNjQsNyBAQAogCiAJaWYgKGNvdW50ID09IDApIHsKIAkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fZnVuY19fKTsKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJc3Bpbl9sb2NrX2JoKCZ3cG9ydC0+bG9jayk7CkBAIC0yNjYsOSArMjc4LDExIEBACiAKIAljb3VudCA9IChjb3VudCA+IE9NTklORVRfQlVMS09VVFNJWkUpID8gT01OSU5FVF9CVUxLT1VUU0laRSA6IGNvdW50OwogCi0JbWVtY3B5ICh3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBPTU5JTkVUX0RBVEFPRkZTRVQsIGJ1ZiwgY291bnQpOworCW1lbWNweSh3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBPTU5JTkVUX0RBVEFPRkZTRVQsCisJCQkJCQkJCWJ1ZiwgY291bnQpOwogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIHdwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsCisJCQkJCXdwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKIAloZWFkZXItPm9oX3NlcSAJPSBvZC0+b2Rfb3V0c2VxKys7CiAJaGVhZGVyLT5vaF9sZW4gCT0gY291bnQ7CkBAIC0yODIsNyArMjk2LDggQEAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih3cG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KSB7CiAJCXdwb3J0LT53cml0ZV91cmJfYnVzeSA9IDA7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAl9IGVsc2UKIAkJcmVzdWx0ID0gY291bnQ7CiAKQEAgLTI5MCw4ICszMDUsOSBAQAogfQogCiAKLXN0YXRpYyBpbnQgb21uaW5ldF93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBvbW5pbmV0X3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IAkqd3BvcnQgCT0gc2VyaWFsLT5wb3J0WzFdOwogCkBAIC0zMDMsMTIgKzMxOSwxMyBAQAogCiAJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgcm9vbSk7CiAKLQlyZXR1cm4gKHJvb20pOworCXJldHVybiByb29tOwogfQogCi1zdGF0aWMgdm9pZCBvbW5pbmV0X3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIG9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0vKglzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIJKmhlYWRlciA9IChzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIgICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOyAqLworLyoJc3RydWN0IG9tbmluZXRfaGVhZGVyCSpoZWFkZXIgPSAoc3RydWN0IG9tbmluZXRfaGVhZGVyICAqKQorCQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXI7ICovCiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAJKnBvcnQgICA9ICB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCkBAIC0zMjUsMTggKzM0MiwxOCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIG9tbmluZXRfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBvbW5pbmV0X3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqd3BvcnQgPSBzZXJpYWwtPnBvcnRbMV07CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKLQlkYmcgKCIlcyIsIF9fZnVuY19fKTsKKwlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJdXNiX2tpbGxfdXJiKHdwb3J0LT53cml0ZV91cmIpOwogCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KSk7CiB9CiAKIAotc3RhdGljIGludCBfX2luaXQgb21uaW5ldF9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21uaW5ldF9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZ6eXhlbF9vbW5pbmV0X2RldmljZSk7CkBAIC0zNTQsMTggKzM3MSwxOCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBvbW5pbmV0X2V4aXQgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgb21uaW5ldF9leGl0KHZvaWQpCiB7Ci0JdXNiX2RlcmVnaXN0ZXIgKCZvbW5pbmV0X2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmenl4ZWxfb21uaW5ldF9kZXZpY2UpOworCXVzYl9kZXJlZ2lzdGVyKCZvbW5pbmV0X2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ6eXhlbF9vbW5pbmV0X2RldmljZSk7CiB9CiAKIAogbW9kdWxlX2luaXQob21uaW5ldF9pbml0KTsKIG1vZHVsZV9leGl0KG9tbmluZXRfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCBhNzM0MjBkLi5lNGVjYTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC00MywyOSArNDMsMjUgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgIG9wdGlvbl9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyB2b2lkIG9wdGlvbl9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBvcHRpb25fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG9wdGlvbl9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyBpbnQgIG9wdGlvbl9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgb3B0aW9uX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIHZvaWQgb3B0aW9uX3J4X3Rocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgb3B0aW9uX3J4X3VudGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgaW50ICBvcHRpb25fd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIG9wdGlvbl93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCiBzdGF0aWMgdm9pZCBvcHRpb25faW5zdGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiAKLXN0YXRpYyBpbnQgb3B0aW9uX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCitzdGF0aWMgaW50IG9wdGlvbl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwotCi1zdGF0aWMgaW50ICBvcHRpb25fY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCAgb3B0aW9uX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQgb3B0aW9uX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJc3RydWN0IGt0ZXJtaW9zICpvbGQpOwotc3RhdGljIHZvaWQgb3B0aW9uX2JyZWFrX2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOwotc3RhdGljIGludCAgb3B0aW9uX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBpbnQgIG9wdGlvbl90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgIG9wdGlvbl9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBvcHRpb25fc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKK3N0YXRpYyBpbnQgIG9wdGlvbl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBvcHRpb25fdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKLXN0YXRpYyBpbnQgIG9wdGlvbl9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgb3B0aW9uX3NlbmRfc2V0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiAKIC8qIFZlbmRvciBhbmQgcHJvZHVjdCBJRHMgKi8KICNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9JRAkJCTB4MEFGMApAQCAtMTczLDYgKzE2OSw3IEBACiAjZGVmaW5lIERFTExfVkVORE9SX0lECQkJCTB4NDEzQwogCiAjZGVmaW5lIEtZT0NFUkFfVkVORE9SX0lECQkJMHgwYzg4CisjZGVmaW5lIEtZT0NFUkFfUFJPRFVDVF9LUEM2NTAJCQkweDE3ZGEKICNkZWZpbmUgS1lPQ0VSQV9QUk9EVUNUX0tQQzY4MAkJCTB4MTgwYQogCiAjZGVmaW5lIEFOWURBVEFfVkVORE9SX0lECQkJMHgxNmQ1CkBAIC0zMDUsNiArMzAyLDcgQEAKIAl7IFVTQl9ERVZJQ0UoT05EQV9WRU5ET1JfSUQsIE9OREFfUFJPRFVDVF9FVDUwMkhTKSB9LAogCXsgVVNCX0RFVklDRShCQU5EUklDSF9WRU5ET1JfSUQsIEJBTkRSSUNIX1BST0RVQ1RfQzEwMF8xKSB9LAogCXsgVVNCX0RFVklDRShCQU5EUklDSF9WRU5ET1JfSUQsIEJBTkRSSUNIX1BST0RVQ1RfQzEwMF8yKSB9LAorCXsgVVNCX0RFVklDRShLWU9DRVJBX1ZFTkRPUl9JRCwgS1lPQ0VSQV9QUk9EVUNUX0tQQzY1MCkgfSwKIAl7IFVTQl9ERVZJQ0UoS1lPQ0VSQV9WRU5ET1JfSUQsIEtZT0NFUkFfUFJPRFVDVF9LUEM2ODApIH0sCiAJeyBVU0JfREVWSUNFKFFVQUxDT01NX1ZFTkRPUl9JRCwgMHg2MDAwKX0sIC8qIFpURSBBQzg3MDAgKi8KIAl7IFVTQl9ERVZJQ0UoUVVBTENPTU1fVkVORE9SX0lELCAweDY2MTMpfSwgLyogT25kYSBINjAwL1pURSBNRjMzMCAqLwpAQCAtMzQwLDExICszMzgsNyBAQAogCS53cml0ZSAgICAgICAgICAgICA9IG9wdGlvbl93cml0ZSwKIAkud3JpdGVfcm9vbSAgICAgICAgPSBvcHRpb25fd3JpdGVfcm9vbSwKIAkuY2hhcnNfaW5fYnVmZmVyICAgPSBvcHRpb25fY2hhcnNfaW5fYnVmZmVyLAotCS50aHJvdHRsZSAgICAgICAgICA9IG9wdGlvbl9yeF90aHJvdHRsZSwKLQkudW50aHJvdHRsZSAgICAgICAgPSBvcHRpb25fcnhfdW50aHJvdHRsZSwKLQkuaW9jdGwgICAgICAgICAgICAgPSBvcHRpb25faW9jdGwsCiAJLnNldF90ZXJtaW9zICAgICAgID0gb3B0aW9uX3NldF90ZXJtaW9zLAotCS5icmVha19jdGwgICAgICAgICA9IG9wdGlvbl9icmVha19jdGwsCiAJLnRpb2NtZ2V0ICAgICAgICAgID0gb3B0aW9uX3Rpb2NtZ2V0LAogCS50aW9jbXNldCAgICAgICAgICA9IG9wdGlvbl90aW9jbXNldCwKIAkuYXR0YWNoICAgICAgICAgICAgPSBvcHRpb25fc3RhcnR1cCwKQEAgLTQwMSw0NyArMzk1LDMyIEBACiAJcmV0dXJuIDA7CiAKIGZhaWxlZF9kcml2ZXJfcmVnaXN0ZXI6Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmb3B0aW9uXzFwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZvcHRpb25fMXBvcnRfZGV2aWNlKTsKIGZhaWxlZF8xcG9ydF9kZXZpY2VfcmVnaXN0ZXI6CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9wdGlvbl9leGl0KHZvaWQpCiB7Ci0JdXNiX2RlcmVnaXN0ZXIgKCZvcHRpb25fZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZvcHRpb25fMXBvcnRfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3Rlcigmb3B0aW9uX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZvcHRpb25fMXBvcnRfZGV2aWNlKTsKIH0KIAogbW9kdWxlX2luaXQob3B0aW9uX2luaXQpOwogbW9kdWxlX2V4aXQob3B0aW9uX2V4aXQpOwogCi1zdGF0aWMgdm9pZCBvcHRpb25fcnhfdGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKLXsKLQlkYmcoIiVzIiwgX19mdW5jX18pOwotfQotCi1zdGF0aWMgdm9pZCBvcHRpb25fcnhfdW50aHJvdHRsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQotewotCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9wdGlvbl9icmVha19jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQotewotCS8qIFVuZm9ydHVuYXRlbHksIEkgZG9uJ3Qga25vdyBob3cgdG8gc2VuZCBhIGJyZWFrICovCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIHZvaWQgb3B0aW9uX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgb3B0aW9uX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAkvKiBEb2Vzbid0IHN1cHBvcnQgb3B0aW9uIHNldHRpbmcgKi8KLQl0dHlfdGVybWlvc19jb3B5X2h3KHBvcnQtPnR0eS0+dGVybWlvcywgb2xkX3Rlcm1pb3MpOwotCW9wdGlvbl9zZW5kX3NldHVwKHBvcnQpOworCXR0eV90ZXJtaW9zX2NvcHlfaHcodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7CisJb3B0aW9uX3NlbmRfc2V0dXAodHR5LCBwb3J0KTsKIH0KIAotc3RhdGljIGludCBvcHRpb25fdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IG9wdGlvbl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCkBAIC00NTcsOSArNDM2LDEwIEBACiAJcmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgaW50IG9wdGlvbl90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgb3B0aW9uX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtNDc0LDE3ICs0NTQsMTEgQEAKIAkJcG9ydGRhdGEtPnJ0c19zdGF0ZSA9IDA7CiAJaWYgKGNsZWFyICYgVElPQ01fRFRSKQogCQlwb3J0ZGF0YS0+ZHRyX3N0YXRlID0gMDsKLQlyZXR1cm4gb3B0aW9uX3NlbmRfc2V0dXAocG9ydCk7Ci19Ci0KLXN0YXRpYyBpbnQgb3B0aW9uX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKKwlyZXR1cm4gb3B0aW9uX3NlbmRfc2V0dXAodHR5LCBwb3J0KTsKIH0KIAogLyogV3JpdGUgKi8KLXN0YXRpYyBpbnQgb3B0aW9uX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCitzdGF0aWMgaW50IG9wdGlvbl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwpAQCAtNDk5LDcgKzQ3Myw3IEBACiAKIAlpID0gMDsKIAlsZWZ0ID0gY291bnQ7Ci0JZm9yIChpPTA7IGxlZnQgPiAwICYmIGkgPCBOX09VVF9VUkI7IGkrKykgeworCWZvciAoaSA9IDA7IGxlZnQgPiAwICYmIGkgPCBOX09VVF9VUkI7IGkrKykgewogCQl0b2RvID0gbGVmdDsKIAkJaWYgKHRvZG8gPiBPVVRfQlVGTEVOKQogCQkJdG9kbyA9IE9VVF9CVUZMRU47CkBAIC01MjAsNyArNDk0LDcgQEAKIAkJCXVzYl9waXBlZW5kcG9pbnQodGhpc191cmItPnBpcGUpLCBpKTsKIAogCQkvKiBzZW5kIHRoZSBkYXRhICovCi0JCW1lbWNweSAodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCB0b2RvKTsKKwkJbWVtY3B5KHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgdG9kbyk7CiAJCXRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdG9kbzsKIAogCQl0aGlzX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CkBAIC01NjAsNyArNTM0LDcgQEAKIAkJZGJnKCIlczogbm9uemVybyBzdGF0dXM6ICVkIG9uIGVuZHBvaW50ICUwMnguIiwKIAkJICAgIF9fZnVuY19fLCBzdGF0dXMsIGVuZHBvaW50KTsKIAl9IGVsc2UgewotCQl0dHkgPSBwb3J0LT50dHk7CisJCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKQEAgLTU3MCw3ICs1NDQsNyBAQAogCQl9CiAKIAkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwotCQlpZiAocG9ydC0+b3Blbl9jb3VudCAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTikgeworCQlpZiAocG9ydC0+cG9ydC5jb3VudCAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTikgewogCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChlcnIpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAiCkBAIC02MTEsNyArNTg1LDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKLQlkYmcoIiVzOiB1cmIgJXAgcG9ydCAlcCBoYXMgZGF0YSAlcCIsIF9fZnVuY19fLHVyYixwb3J0LHBvcnRkYXRhKTsKKwlkYmcoIiVzOiB1cmIgJXAgcG9ydCAlcCBoYXMgZGF0YSAlcCIsIF9fZnVuY19fLCB1cmIsIHBvcnQsIHBvcnRkYXRhKTsKIAogCWlmIChzdGF0dXMgPT0gMCkgewogCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXFfcGt0ID0KQEAgLTYzNiwxMiArNjEwLDEyIEBACiAJCQlwb3J0ZGF0YS0+ZHNyX3N0YXRlID0gKChzaWduYWxzICYgMHgwMikgPyAxIDogMCk7CiAJCQlwb3J0ZGF0YS0+cmlfc3RhdGUgPSAoKHNpZ25hbHMgJiAweDA4KSA/IDEgOiAwKTsKIAotCQkJaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KSAmJgorCQkJaWYgKHBvcnQtPnBvcnQudHR5ICYmICFDX0NMT0NBTChwb3J0LT5wb3J0LnR0eSkgJiYKIAkJCQkJb2xkX2RjZF9zdGF0ZSAmJiAhcG9ydGRhdGEtPmRjZF9zdGF0ZSkKLQkJCQl0dHlfaGFuZ3VwKHBvcnQtPnR0eSk7CisJCQkJdHR5X2hhbmd1cChwb3J0LT5wb3J0LnR0eSk7CiAJCX0gZWxzZSB7CiAJCQlkYmcoIiVzOiB0eXBlICV4IHJlcSAleCIsIF9fZnVuY19fLAotCQkJCXJlcV9wa3QtPmJSZXF1ZXN0VHlwZSxyZXFfcGt0LT5iUmVxdWVzdCk7CisJCQkJcmVxX3BrdC0+YlJlcXVlc3RUeXBlLCByZXFfcGt0LT5iUmVxdWVzdCk7CiAJCX0KIAl9IGVsc2UKIAkJZGJnKCIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKQEAgLTY1Niw4ICs2MzAsOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBvcHRpb25fd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBvcHRpb25fd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAlpbnQgaTsKIAlpbnQgZGF0YV9sZW4gPSAwOwpAQCAtNjY2LDcgKzY0MSw3IEBACiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAotCWZvciAoaT0wOyBpIDwgTl9PVVRfVVJCOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTl9PVVRfVVJCOyBpKyspIHsKIAkJdGhpc191cmIgPSBwb3J0ZGF0YS0+b3V0X3VyYnNbaV07CiAJCWlmICh0aGlzX3VyYiAmJiAhdGVzdF9iaXQoaSwgJnBvcnRkYXRhLT5vdXRfYnVzeSkpCiAJCQlkYXRhX2xlbiArPSBPVVRfQlVGTEVOOwpAQCAtNjc2LDggKzY1MSw5IEBACiAJcmV0dXJuIGRhdGFfbGVuOwogfQogCi1zdGF0aWMgaW50IG9wdGlvbl9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgb3B0aW9uX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAlpbnQgaTsKIAlpbnQgZGF0YV9sZW4gPSAwOwpAQCAtNjg1LDcgKzY2MSw3IEBACiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAotCWZvciAoaT0wOyBpIDwgTl9PVVRfVVJCOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTl9PVVRfVVJCOyBpKyspIHsKIAkJdGhpc191cmIgPSBwb3J0ZGF0YS0+b3V0X3VyYnNbaV07CiAJCS8qIEZJWE1FOiBUaGlzIGxvY2tpbmcgaXMgaW5zdWZmaWNpZW50IGFzIHRoaXNfdXJiIG1heQogCQkgICBnbyB1bnVzZWQgZHVyaW5nIHRoZSB0ZXN0ICovCkBAIC02OTYsNyArNjcyLDggQEAKIAlyZXR1cm4gZGF0YV9sZW47CiB9CiAKLXN0YXRpYyBpbnQgb3B0aW9uX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG9wdGlvbl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKQEAgLTcxNCw3ICs2OTEsNyBAQAogCS8qIFJlc2V0IGxvdyBsZXZlbCBkYXRhIHRvZ2dsZSBhbmQgc3RhcnQgcmVhZGluZyBmcm9tIGVuZHBvaW50cyAqLwogCWZvciAoaSA9IDA7IGkgPCBOX0lOX1VSQjsgaSsrKSB7CiAJCXVyYiA9IHBvcnRkYXRhLT5pbl91cmJzW2ldOwotCQlpZiAoISB1cmIpCisJCWlmICghdXJiKQogCQkJY29udGludWU7CiAJCWlmICh1cmItPmRldiAhPSBzZXJpYWwtPmRldikgewogCQkJZGJnKCIlczogZGV2ICVwICE9ICVwIiwgX19mdW5jX18sCkBAIC03MzksMjEgKzcxNiwyMyBAQAogCS8qIFJlc2V0IGxvdyBsZXZlbCBkYXRhIHRvZ2dsZSBvbiBvdXQgZW5kcG9pbnRzICovCiAJZm9yIChpID0gMDsgaSA8IE5fT1VUX1VSQjsgaSsrKSB7CiAJCXVyYiA9IHBvcnRkYXRhLT5vdXRfdXJic1tpXTsKLQkJaWYgKCEgdXJiKQorCQlpZiAoIXVyYikKIAkJCWNvbnRpbnVlOwogCQl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OwogCQkvKiB1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCiAJCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSwgMCk7ICovCiAJfQogCi0JcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKLQlvcHRpb25fc2VuZF9zZXR1cChwb3J0KTsKKwlvcHRpb25fc2VuZF9zZXR1cCh0dHksIHBvcnQpOwogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgb3B0aW9uX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgb3B0aW9uX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtNzY4LDcgKzc0Nyw3IEBACiAJaWYgKHNlcmlhbC0+ZGV2KSB7CiAJCW11dGV4X2xvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CiAJCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpCi0JCQlvcHRpb25fc2VuZF9zZXR1cChwb3J0KTsKKwkJCW9wdGlvbl9zZW5kX3NldHVwKHR0eSwgcG9ydCk7CiAJCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKIAogCQkvKiBTdG9wIHJlYWRpbmcvd3JpdGluZyB1cmJzICovCkBAIC03NzcsNyArNzU2LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IE5fT1VUX1VSQjsgaSsrKQogCQkJdXNiX2tpbGxfdXJiKHBvcnRkYXRhLT5vdXRfdXJic1tpXSk7CiAJfQotCXBvcnQtPnR0eSA9IE5VTEw7CisJcG9ydC0+cG9ydC50dHkgPSBOVUxMOwkvKiBGSVhNRSAqLwogfQogCiAvKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgb3B0aW9uX3NldHVwX3VyYnMgKi8KQEAgLTgwNyw3ICs3ODYsNyBAQAogLyogU2V0dXAgdXJicyAqLwogc3RhdGljIHZvaWQgb3B0aW9uX3NldHVwX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKLQlpbnQgaSxqOworCWludCBpLCBqOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCkBAIC04MTcsMTggKzc5NiwyMiBAQAogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAotCS8qIERvIGluZGF0IGVuZHBvaW50cyBmaXJzdCAqLworCQkvKiBEbyBpbmRhdCBlbmRwb2ludHMgZmlyc3QgKi8KIAkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyArK2opIHsKLQkJCXBvcnRkYXRhLT5pbl91cmJzW2pdID0gb3B0aW9uX3NldHVwX3VyYiAoc2VyaWFsLAotICAgICAgICAgICAgICAgICAgCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzLCBVU0JfRElSX0lOLCBwb3J0LAotICAgICAgICAgICAgICAgICAgCXBvcnRkYXRhLT5pbl9idWZmZXJbal0sIElOX0JVRkxFTiwgb3B0aW9uX2luZGF0X2NhbGxiYWNrKTsKKwkJCXBvcnRkYXRhLT5pbl91cmJzW2pdID0gb3B0aW9uX3NldHVwX3VyYihzZXJpYWwsCisJCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzLAorCQkJCQlVU0JfRElSX0lOLCBwb3J0LAorCQkJCQlwb3J0ZGF0YS0+aW5fYnVmZmVyW2pdLAorCQkJCQlJTl9CVUZMRU4sIG9wdGlvbl9pbmRhdF9jYWxsYmFjayk7CiAJCX0KIAogCQkvKiBvdXRkYXQgZW5kcG9pbnRzICovCiAJCWZvciAoaiA9IDA7IGogPCBOX09VVF9VUkI7ICsraikgewotCQkJcG9ydGRhdGEtPm91dF91cmJzW2pdID0gb3B0aW9uX3NldHVwX3VyYiAoc2VyaWFsLAotICAgICAgICAgICAgICAgICAgCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcywgVVNCX0RJUl9PVVQsIHBvcnQsCi0gICAgICAgICAgICAgICAgICAJcG9ydGRhdGEtPm91dF9idWZmZXJbal0sIE9VVF9CVUZMRU4sIG9wdGlvbl9vdXRkYXRfY2FsbGJhY2spOworCQkJcG9ydGRhdGEtPm91dF91cmJzW2pdID0gb3B0aW9uX3NldHVwX3VyYihzZXJpYWwsCisJCQkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcywKKwkJCQkJVVNCX0RJUl9PVVQsIHBvcnQsCisJCQkJCXBvcnRkYXRhLT5vdXRfYnVmZmVyW2pdLAorCQkJCQlPVVRfQlVGTEVOLCBvcHRpb25fb3V0ZGF0X2NhbGxiYWNrKTsKIAkJfQogCX0KIH0KQEAgLTgzOSw3ICs4MjIsOCBAQAogICogVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIFNFVF9DT05UUk9MX0xJTkVfU1RBVEUgZnJvbSB0aGUgUFNUTgogICogQ0RDLgogKi8KLXN0YXRpYyBpbnQgb3B0aW9uX3NlbmRfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgb3B0aW9uX3NlbmRfc2V0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CkBAIC04NDgsNyArODMyLDcgQEAKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JaWYgKHBvcnQtPnR0eSkgeworCWlmICh0dHkpIHsKIAkJaW50IHZhbCA9IDA7CiAJCWlmIChwb3J0ZGF0YS0+ZHRyX3N0YXRlKQogCQkJdmFsIHw9IDB4MDE7CkBAIC04NTYsMTAgKzg0MCw5IEBACiAJCQl2YWwgfD0gMHgwMjsKIAogCQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAotCQkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkJMHgyMiwweDIxLHZhbCxpZk51bSxOVUxMLDAsVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCTB4MjIsIDB4MjEsIHZhbCwgaWZOdW0sIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODc5LDcgKzg2Miw3IEBACiAJCWlmICghcG9ydGRhdGEpIHsKIAkJCWRiZygiJXM6IGttYWxsb2MgZm9yIG9wdGlvbl9wb3J0X3ByaXZhdGUgKCVkKSBmYWlsZWQhLiIsCiAJCQkJCV9fZnVuY19fLCBpKTsKLQkJCXJldHVybiAoMSk7CisJCQlyZXR1cm4gMTsKIAkJfQogCiAJCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgaisrKSB7CkBAIC04OTgsMTcgKzg4MSwxNSBAQAogCiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwb3J0ZGF0YSk7CiAKLQkJaWYgKCEgcG9ydC0+aW50ZXJydXB0X2luX3VyYikKKwkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKQogCQkJY29udGludWU7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAoZXJyKQogCQkJZGJnKCIlczogc3VibWl0IGlycV9pbiB1cmIgZmFpbGVkICVkIiwKIAkJCQlfX2Z1bmNfXywgZXJyKTsKIAl9Ci0KIAlvcHRpb25fc2V0dXBfdXJicyhzZXJpYWwpOwotCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIAogYmFpbF9vdXRfZXJyb3IyOgogCWZvciAoaiA9IDA7IGogPCBOX09VVF9VUkI7IGorKykKQEAgLTk0Nyw3ICs5MjgsOCBAQAogCQlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7IGorKykgewogCQkJaWYgKHBvcnRkYXRhLT5pbl91cmJzW2pdKSB7CiAJCQkJdXNiX2ZyZWVfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2pdKTsKLQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcG9ydGRhdGEtPmluX2J1ZmZlcltqXSk7CisJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKQorCQkJCQlwb3J0ZGF0YS0+aW5fYnVmZmVyW2pdKTsKIAkJCQlwb3J0ZGF0YS0+aW5fdXJic1tqXSA9IE5VTEw7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCmluZGV4IGE5NjI1YzEuLjgxZGI1NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwpAQCAtMjUsNyArMjUsOCBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCiAgKgotICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcworICogZHJpdmVyCiAgKgogICogVE9ETzoKICAqICAtIGltcGxlbWVudCBjb3JyZWN0IGZsdXNoaW5nIGZvciBpb2N0bHMgYW5kIG90aTY4NThfY2xvc2UoKQpAQCAtNDksNyArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgIm90aTY4NTguaCIKIAogI2RlZmluZSBPVEk2ODU4X0RFU0NSSVBUSU9OIFwKQEAgLTEzNSwyNyArMTM2LDI4IEBACiAKICNkZWZpbmUgT1RJNjg1OF9DVFJMX1BLVF9TSVpFCXNpemVvZihzdHJ1Y3Qgb3RpNjg1OF9jb250cm9sX3BrdCkKICNkZWZpbmUgT1RJNjg1OF9DVFJMX0VRVUFMU19QRU5ESU5HKGEsIHByaXYpIFwKLQkoICAgICgoYSktPmRpdmlzb3IgPT0gKHByaXYpLT5wZW5kaW5nX3NldHVwLmRpdmlzb3IpIFwKKwkoKChhKS0+ZGl2aXNvciA9PSAocHJpdiktPnBlbmRpbmdfc2V0dXAuZGl2aXNvcikgXAogCSAgJiYgKChhKS0+Y29udHJvbCA9PSAocHJpdiktPnBlbmRpbmdfc2V0dXAuY29udHJvbCkgXAotCSAgJiYgKChhKS0+ZnJhbWVfZm10ID09IChwcml2KS0+cGVuZGluZ19zZXR1cC5mcmFtZV9mbXQpICkKKwkgICYmICgoYSktPmZyYW1lX2ZtdCA9PSAocHJpdiktPnBlbmRpbmdfc2V0dXAuZnJhbWVfZm10KSkKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludCBvdGk2ODU4X29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIHZvaWQgb3RpNjg1OF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgdm9pZCBvdGk2ODU4X3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJc3RydWN0IGt0ZXJtaW9zICpvbGQpOwotc3RhdGljIGludCBvdGk2ODU4X2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBvdGk2ODU4X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG90aTY4NThfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG90aTY4NThfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKK3N0YXRpYyBpbnQgb3RpNjg1OF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIG90aTY4NThfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIG90aTY4NThfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBvdGk2ODU4X3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyBpbnQgb3RpNjg1OF93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorc3RhdGljIGludCBvdGk2ODU4X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7Ci1zdGF0aWMgaW50IG90aTY4NThfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIG90aTY4NThfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSk7Ci1zdGF0aWMgaW50IG90aTY4NThfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCBvdGk2ODU4X3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBpbnQgb3RpNjg1OF90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgb3RpNjg1OF93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIGludCBvdGk2ODU4X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgb3RpNjg1OF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IG90aTY4NThfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKIHN0YXRpYyBpbnQgb3RpNjg1OF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgb3RpNjg1OF9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKQEAgLTE4NCw3ICsxODYsNiBAQAogCS5jbG9zZSA9CQlvdGk2ODU4X2Nsb3NlLAogCS53cml0ZSA9CQlvdGk2ODU4X3dyaXRlLAogCS5pb2N0bCA9CQlvdGk2ODU4X2lvY3RsLAotCS5icmVha19jdGwgPQkJb3RpNjg1OF9icmVha19jdGwsCiAJLnNldF90ZXJtaW9zID0JCW90aTY4NThfc2V0X3Rlcm1pb3MsCiAJLnRpb2NtZ2V0ID0JCW90aTY4NThfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0JCW90aTY4NThfdGlvY21zZXQsCkBAIC0yMjAsNyArMjIxLDcgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGRlbGF5ZWRfc2V0dXBfd29yazsKIAogCXdhaXRfcXVldWVfaGVhZF90IGludHJfd2FpdDsKLSAgICAgICAgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsgICAvKiBVU0IgcG9ydCB3aXRoIHdoaWNoIGFzc29jaWF0ZWQgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OyAgIC8qIFVTQiBwb3J0IHdpdGggd2hpY2ggYXNzb2NpYXRlZCAqLwogfTsKIAogI3VuZGVmIGRiZwpAQCAtMjI5LDcgKzIzMCw4IEBACiAKIHN0YXRpYyB2b2lkIHNldHVwX2xpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBvdGk2ODU4X3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG90aTY4NThfcHJpdmF0ZSwgZGVsYXllZF9zZXR1cF93b3JrLndvcmspOworCXN0cnVjdCBvdGk2ODU4X3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCXN0cnVjdCBvdGk2ODU4X3ByaXZhdGUsIGRlbGF5ZWRfc2V0dXBfd29yay53b3JrKTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gcHJpdi0+cG9ydDsKIAlzdHJ1Y3Qgb3RpNjg1OF9jb250cm9sX3BrdCAqbmV3X3NldHVwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yMzcsMTAgKzIzOSwxMiBAQAogCiAJZGJnKCIlcyhwb3J0ID0gJWQpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlpZiAoKG5ld19zZXR1cCA9IGttYWxsb2MoT1RJNjg1OF9DVFJMX1BLVF9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCW5ld19zZXR1cCA9IGttYWxsb2MoT1RJNjg1OF9DVFJMX1BLVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3X3NldHVwID09IE5VTEwpIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogb3V0IG9mIG1lbW9yeSFcbiIsIF9fZnVuY19fKTsKIAkJLyogd2Ugd2lsbCB0cnkgYWdhaW4gKi8KLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kZWxheWVkX3NldHVwX3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoMikpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmRlbGF5ZWRfc2V0dXBfd29yaywKKwkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMikpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNTYsNyArMjYwLDggQEAKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogZXJyb3IgcmVhZGluZyBzdGF0dXNcbiIsIF9fZnVuY19fKTsKIAkJa2ZyZWUobmV3X3NldHVwKTsKIAkJLyogd2Ugd2lsbCB0cnkgYWdhaW4gKi8KLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kZWxheWVkX3NldHVwX3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoMikpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmRlbGF5ZWRfc2V0dXBfd29yaywKKwkJCQkJCQltc2Vjc190b19qaWZmaWVzKDIpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjk3LDcgKzMwMiw4IEBACiAKIHZvaWQgc2VuZF9kYXRhKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3Qgb3RpNjg1OF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvdGk2ODU4X3ByaXZhdGUsIGRlbGF5ZWRfd3JpdGVfd29yay53b3JrKTsKKwlzdHJ1Y3Qgb3RpNjg1OF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssCisJCQlzdHJ1Y3Qgb3RpNjg1OF9wcml2YXRlLCBkZWxheWVkX3dyaXRlX3dvcmsud29yayk7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHByaXYtPnBvcnQ7CiAJaW50IGNvdW50ID0gMCwgcmVzdWx0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMDgsNyArMzE0LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWlmIChwcml2LT5mbGFncy53cml0ZV91cmJfaW5fdXNlKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kZWxheWVkX3dyaXRlX3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoMikpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmRlbGF5ZWRfd3JpdGVfd29yaywKKwkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMikpOwogCQlyZXR1cm47CiAJfQogCXByaXYtPmZsYWdzLndyaXRlX3VyYl9pbl91c2UgPSAxOwpAQCAtMzU5LDggKzM2Niw4IEBACiAKIHN0YXRpYyBpbnQgb3RpNjg1OF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7Ci0gICAgICAgIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07Ci0gICAgICAgIHN0cnVjdCBvdGk2ODU4X3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlzdHJ1Y3Qgb3RpNjg1OF9wcml2YXRlICpwcml2OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKQEAgLTM3NSw4ICszODIsOCBAQAogCiAJCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+aW50cl93YWl0KTsKLS8vCQlJTklUX1dPUksoJnByaXYtPnNldHVwX3dvcmssIHNldHVwX2xpbmUsIHNlcmlhbC0+cG9ydFtpXSk7Ci0vLwkJSU5JVF9XT1JLKCZwcml2LT53cml0ZV93b3JrLCBzZW5kX2RhdGEsIHNlcmlhbC0+cG9ydFtpXSk7CisvKgkJSU5JVF9XT1JLKCZwcml2LT5zZXR1cF93b3JrLCBzZXR1cF9saW5lLCBzZXJpYWwtPnBvcnRbaV0pOyAqLworLyoJCUlOSVRfV09SSygmcHJpdi0+d3JpdGVfd29yaywgc2VuZF9kYXRhLCBzZXJpYWwtPnBvcnRbaV0pOyAqLwogCQlwcml2LT5wb3J0ID0gcG9ydDsKIAkJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmRlbGF5ZWRfc2V0dXBfd29yaywgc2V0dXBfbGluZSk7CiAJCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kZWxheWVkX3dyaXRlX3dvcmssIHNlbmRfZGF0YSk7CkBAIC0zOTUsNyArNDAyLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGludCBvdGk2ODU4X3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCitzdGF0aWMgaW50IG90aTY4NThfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCBvdGk2ODU4X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC00MTMsOCArNDIwLDkgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgb3RpNjg1OF93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IG90aTY4NThfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBvdGk2ODU4X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IHJvb20gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MjgsOCArNDM2LDkgQEAKIAlyZXR1cm4gcm9vbTsKIH0KIAotc3RhdGljIGludCBvdGk2ODU4X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBvdGk2ODU4X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBvdGk2ODU4X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IGNoYXJzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDQzLDggKzQ1Miw4IEBACiAJcmV0dXJuIGNoYXJzOwogfQogCi1zdGF0aWMgdm9pZCBvdGk2ODU4X3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIG90aTY4NThfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3Qgb3RpNjg1OF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NTUsMjIgKzQ2NCwyMiBAQAogCiAJZGJnKCIlcyhwb3J0ID0gJWQpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlpZiAoIXBvcnQtPnR0eSB8fCAhcG9ydC0+dHR5LT50ZXJtaW9zKSB7CisJaWYgKCF0dHkpIHsKIAkJZGJnKCIlcygpOiBubyB0dHkgc3RydWN0dXJlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKCFwcml2LT5mbGFncy50ZXJtaW9zX2luaXRpYWxpemVkKSB7Ci0JCSoocG9ydC0+dHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKLQkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjM4NDAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwkJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCMzg0MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCQl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gMzg0MDA7CisJCXR0eS0+dGVybWlvcy0+Y19vc3BlZWQgPSAzODQwMDsKIAkJcHJpdi0+ZmxhZ3MudGVybWlvc19pbml0aWFsaXplZCA9IDE7Ci0JCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19pc3BlZWQgPSAzODQwMDsKLQkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDM4NDAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJZGl2aXNvciA9IHByaXYtPnBlbmRpbmdfc2V0dXAuZGl2aXNvcjsKQEAgLTQ4MCwxOSArNDg5LDE5IEBACiAKIAlmcmFtZV9mbXQgJj0gfkZNVF9EQVRBX0JJVFNfTUFTSzsKIAlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKLQkJY2FzZSBDUzU6Ci0JCQlmcmFtZV9mbXQgfD0gRk1UX0RBVEFfQklUU181OwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1M2OgotCQkJZnJhbWVfZm10IHw9IEZNVF9EQVRBX0JJVFNfNjsKLQkJCWJyZWFrOwotCQljYXNlIENTNzoKLQkJCWZyYW1lX2ZtdCB8PSBGTVRfREFUQV9CSVRTXzc7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJY2FzZSBDUzg6Ci0JCQlmcmFtZV9mbXQgfD0gRk1UX0RBVEFfQklUU184OwotCQkJYnJlYWs7CisJY2FzZSBDUzU6CisJCWZyYW1lX2ZtdCB8PSBGTVRfREFUQV9CSVRTXzU7CisJCWJyZWFrOworCWNhc2UgQ1M2OgorCQlmcmFtZV9mbXQgfD0gRk1UX0RBVEFfQklUU182OworCQlicmVhazsKKwljYXNlIENTNzoKKwkJZnJhbWVfZm10IHw9IEZNVF9EQVRBX0JJVFNfNzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIENTODoKKwkJZnJhbWVfZm10IHw9IEZNVF9EQVRBX0JJVFNfODsKKwkJYnJlYWs7CiAJfQogCiAJLyogbWFudWZhY3R1cmVyIGNsYWltcyB0aGF0IHRoaXMgZGV2aWNlIGNhbiB3b3JrIHdpdGggYmF1ZCByYXRlcwpAQCAtNTAwLDcgKzUwOSw3IEBACiAJICogZ3VhcmFudGVlIHRoYXQgYW55IG90aGVyIGJhdWQgcmF0ZSB3aWxsIHdvcmsgKGVzcGVjaWFsbHkKIAkgKiB0aGUgaGlnaGVyIG9uZXMpCiAJICovCi0JYnIgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWJyID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKIAlpZiAoYnIgPT0gMCkgewogCQlkaXZpc29yID0gMDsKIAl9IGVsc2UgewpAQCAtNTExLDIzICs1MjAsMjEgQEAKIAkJbmV3X2Rpdmlzb3IgPSAoOTYwMDAwMDAgKyA4ICogYnIpIC8gKDE2ICogYnIpOwogCQlyZWFsX2JyID0gOTYwMDAwMDAgLyAoMTYgKiBuZXdfZGl2aXNvcik7CiAJCWRpdmlzb3IgPSBjcHVfdG9fbGUxNihuZXdfZGl2aXNvcik7Ci0JCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHBvcnQtPnR0eSwgcmVhbF9iciwgcmVhbF9icik7CisJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgcmVhbF9iciwgcmVhbF9icik7CiAJfQogCiAJZnJhbWVfZm10ICY9IH5GTVRfU1RPUF9CSVRTX01BU0s7Ci0JaWYgKChjZmxhZyAmIENTVE9QQikgIT0gMCkgeworCWlmICgoY2ZsYWcgJiBDU1RPUEIpICE9IDApCiAJCWZyYW1lX2ZtdCB8PSBGTVRfU1RPUF9CSVRTXzI7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWZyYW1lX2ZtdCB8PSBGTVRfU1RPUF9CSVRTXzE7Ci0JfQogCiAJZnJhbWVfZm10ICY9IH5GTVRfUEFSSVRZX01BU0s7CiAJaWYgKChjZmxhZyAmIFBBUkVOQikgIT0gMCkgewotCQlpZiAoKGNmbGFnICYgUEFST0REKSAhPSAwKSB7CisJCWlmICgoY2ZsYWcgJiBQQVJPREQpICE9IDApCiAJCQlmcmFtZV9mbXQgfD0gRk1UX1BBUklUWV9PREQ7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWZyYW1lX2ZtdCB8PSBGTVRfUEFSSVRZX0VWRU47Ci0JCX0KIAl9IGVsc2UgewogCQlmcmFtZV9mbXQgfD0gRk1UX1BBUklUWV9OT05FOwogCX0KQEAgLTU2NCw3ICs1NzEsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBvdGk2ODU4X29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG90aTY4NThfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IG90aTY4NThfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3Qga3Rlcm1pb3MgdG1wX3Rlcm1pb3M7CkBAIC01NzgsMTAgKzU4NiwxMSBAQAogCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOwogCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCBwb3J0LT5yZWFkX3VyYi0+cGlwZSk7CiAKLQlpZiAocG9ydC0+b3Blbl9jb3VudCAhPSAxKQorCWlmIChwb3J0LT5wb3J0LmNvdW50ICE9IDEpCiAJCXJldHVybiAwOwogCi0JaWYgKChidWYgPSBrbWFsbG9jKE9USTY4NThfQ1RSTF9QS1RfU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwlidWYgPSBrbWFsbG9jKE9USTY4NThfQ1RSTF9QS1RfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzKCk6IG91dCBvZiBtZW1vcnkhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTYxNywxOCArNjI2LDE5IEBACiAJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkIgogCQkJICAgICAgICIgd2l0aCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7Ci0JCW90aTY4NThfY2xvc2UocG9ydCwgTlVMTCk7CisJCW90aTY4NThfY2xvc2UodHR5LCBwb3J0LCBOVUxMKTsKIAkJcmV0dXJuIC1FUFJPVE87CiAJfQogCiAJLyogc2V0dXAgdGVybWlvcyAqLwotCWlmIChwb3J0LT50dHkpCi0JCW90aTY4NThfc2V0X3Rlcm1pb3MocG9ydCwgJnRtcF90ZXJtaW9zKTsKKwlpZiAodHR5KQorCQlvdGk2ODU4X3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgJnRtcF90ZXJtaW9zKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBvdGk2ODU4X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgb3RpNjg1OF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IG90aTY4NThfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjQxLDcgKzY1MSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl0aW1lb3V0ID0gMzAgKiBIWjsJLyogUEwyMzAzX0NMT1NJTkdfV0FJVCAqLwogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKLQlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+dHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOwogCWRiZygiJXMoKTogZW50ZXJpbmcgd2FpdCBsb29wIiwgX19mdW5jX18pOwogCWZvciAoOzspIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKQEAgLTY1NCw3ICs2NjQsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT50dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAJZGJnKCIlcygpOiBhZnRlciB3YWl0IGxvb3AiLCBfX2Z1bmNfXyk7CiAKIAkvKiBjbGVhciBvdXQgYW55IHJlbWFpbmluZyBkYXRhIGluIHRoZSBidWZmZXIgKi8KQEAgLTY2OSw3ICs2NzksNyBAQAogCS8qIGRhdGEgaXMgaW4gdGhlIGJ1ZmZlciB0byBjb21wdXRlIGEgZGVsYXkgKi8KIAkvKiB0aGF0IGlzIG5vdCB1bm5lY2Vzc2FyaWx5IGxvbmcpICovCiAJLyogRklYTUUKLQlicHMgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWJwcyA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAJaWYgKGJwcyA+IDEyMDApCiAJCXRpbWVvdXQgPSBtYXgoKEhaKjI1NjApL2JwcyxIWi8xMCk7CiAJZWxzZQpAQCAtNjkwLDcgKzcwMCw3IEBACiAJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwogCiAJLyoKLQlpZiAocG9ydC0+dHR5ICYmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcpICYgSFVQQ0wpIHsKKwlpZiAodHR5ICYmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcpICYgSFVQQ0wpIHsKIAkJLy8gZHJvcCBEVFIgYW5kIFJUUwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlwcml2LT5wZW5kaW5nX3NldHVwLmNvbnRyb2wgJj0gfkNPTlRST0xfTUFTSzsKQEAgLTY5OSw5ICs3MDksMTAgQEAKIAkqLwogfQogCi1zdGF0aWMgaW50IG90aTY4NThfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IG90aTY4NThfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBvdGk2ODU4X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBjb250cm9sOwpAQCAtNzI0LDE2ICs3MzUsMTYgQEAKIAlpZiAoKGNsZWFyICYgVElPQ01fRFRSKSAhPSAwKQogCQljb250cm9sICY9IH5DT05UUk9MX0RUUl9ISUdIOwogCi0JaWYgKGNvbnRyb2wgIT0gcHJpdi0+cGVuZGluZ19zZXR1cC5jb250cm9sKSB7CisJaWYgKGNvbnRyb2wgIT0gcHJpdi0+cGVuZGluZ19zZXR1cC5jb250cm9sKQogCQlwcml2LT5wZW5kaW5nX3NldHVwLmNvbnRyb2wgPSBjb250cm9sOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3RpNjg1OF90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgb3RpNjg1OF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgb3RpNjg1OF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgcGluX3N0YXRlOwpAQCAtNzc5LDcgKzc5MCw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJd2hpbGUgKDEpIHsKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHByaXYtPmludHJfd2FpdCwgcHJpdi0+c3RhdHVzLnBpbl9zdGF0ZSAhPSBwcmV2KTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHByaXYtPmludHJfd2FpdCwKKwkJCQkJcHJpdi0+c3RhdHVzLnBpbl9zdGF0ZSAhPSBwcmV2KTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIApAQCAtNzg5LDEyICs4MDEsMTEgQEAKIAogCQljaGFuZ2VkID0gcHJldiBeIHN0YXR1czsKIAkJLyogRklYTUU6IGNoZWNrIGlmIHRoaXMgaXMgY29ycmVjdCAoYWN0aXZlIGhpZ2gvbG93KSAqLwotCQlpZiAoCSgoYXJnICYgVElPQ01fUk5HKSAmJiAoY2hhbmdlZCAmIFBJTl9SSSkpIHx8Ci0JCQkoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNoYW5nZWQgJiBQSU5fRFNSKSkgfHwKLQkJCSgoYXJnICYgVElPQ01fQ0QpICAmJiAoY2hhbmdlZCAmIFBJTl9EQ0QpKSB8fAotCQkJKChhcmcgJiBUSU9DTV9DVFMpICYmIChjaGFuZ2VkICYgUElOX0NUUykpKSB7Ci0JCQkJcmV0dXJuIDA7Ci0JCX0KKwkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY2hhbmdlZCAmIFBJTl9SSSkpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNoYW5nZWQgJiBQSU5fRFNSKSkgfHwKKwkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY2hhbmdlZCAmIFBJTl9EQ0QpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjaGFuZ2VkICYgUElOX0NUUykpKQorCQkJcmV0dXJuIDA7CiAJCXByZXYgPSBzdGF0dXM7CiAJfQogCkBAIC04MDIsNTYgKzgxMywyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG90aTY4NThfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IG90aTY4NThfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKikgYXJnOwotCXVuc2lnbmVkIGludCB4OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJZGJnKCIlcyhwb3J0ID0gJWQsIGNtZCA9IDB4JTA0eCwgYXJnID0gMHglMDhseCkiLAogCQkJCV9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCwgYXJnKTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgVElPQ01CSVM6Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJngsIHVzZXJfYXJnLCBzaXplb2YoeCkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIG90aTY4NThfdGlvY21zZXQocG9ydCwgTlVMTCwgeCwgMCk7Ci0KLQkJY2FzZSBUSU9DTUJJQzoKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmeCwgdXNlcl9hcmcsIHNpemVvZih4KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gb3RpNjg1OF90aW9jbXNldChwb3J0LCBOVUxMLCAwLCB4KTsKLQotCQljYXNlIFRJT0NNSVdBSVQ6Ci0JCQlkYmcoIiVzKCk6IFRJT0NNSVdBSVQiLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gd2FpdF9tb2RlbV9pbmZvKHBvcnQsIGFyZyk7Ci0KLQkJZGVmYXVsdDoKLQkJCWRiZygiJXMoKTogMHglMDR4IG5vdCBzdXBwb3J0ZWQiLCBfX2Z1bmNfXywgY21kKTsKLQkJCWJyZWFrOworCWNhc2UgVElPQ01JV0FJVDoKKwkJZGJnKCIlcygpOiBUSU9DTUlXQUlUIiwgX19mdW5jX18pOworCQlyZXR1cm4gd2FpdF9tb2RlbV9pbmZvKHBvcnQsIGFyZyk7CisJZGVmYXVsdDoKKwkJZGJnKCIlcygpOiAweCUwNHggbm90IHN1cHBvcnRlZCIsIF9fZnVuY19fLCBjbWQpOworCQlicmVhazsKIAl9Ci0KIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCi1zdGF0aWMgdm9pZCBvdGk2ODU4X2JyZWFrX2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCi17Ci0JaW50IHN0YXRlOwotCi0JZGJnKCIlcyhwb3J0ID0gJWQpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQlzdGF0ZSA9IChicmVha19zdGF0ZSA9PSAwKSA/IDAgOiAxOwotCWRiZygiJXMoKTogdHVybmluZyBicmVhayAlcyIsIF9fZnVuY19fLCBzdGF0ZSA/ICJvbiIgOiAib2ZmIik7Ci0KLQkvKiBGSVhNRSAqLwotLyoKLQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUgKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCQkgIEJSRUFLX1JFUVVFU1QsIEJSRUFLX1JFUVVFU1RfVFlQRSwgc3RhdGUsCi0JCQkJICAwLCBOVUxMLCAwLCAxMDApOwotCWlmIChyZXN1bHQgIT0gMCkKLQkJZGJnKCIlcygpOiBlcnJvciBzZW5kaW5nIGJyZWFrIiwgX19mdW5jX18pOwotICovCi19CiAKIHN0YXRpYyB2b2lkIG90aTY4NThfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKQEAgLTk2NCw3ICs5NDQsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlpZiAocHJpdi0+ZmxhZ3Mud3JpdGVfdXJiX2luX3VzZSA9PSAwCiAJCQkJJiYgb3RpNjg1OF9idWZfZGF0YV9hdmFpbChwcml2LT5idWYpICE9IDApIHsKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZGVsYXllZF93cml0ZV93b3JrLDApOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kZWxheWVkX3dyaXRlX3dvcmssIDApOwogCQkJcmVzdWJtaXQgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTk3Myw3ICs5NTMsNyBAQAogCWlmIChyZXN1Ym1pdCkgewogCQlpbnQgcmVzdWx0OwogCi0vLwkJZGJnKCIlcygpOiBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIiLCBfX2Z1bmNfXyk7CisvKgkJZGJnKCIlcygpOiBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIiLCBfX2Z1bmNfXyk7ICovCiAJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQgIT0gMCkgewpAQCAtMTAwMiwxNCArOTgyLDE2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlpZiAoIXBvcnQtPnBvcnQuY291bnQpIHsKIAkJCWRiZygiJXMoKTogcG9ydCBpcyBjbG9zZWQsIGV4aXRpbmciLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJLyoKIAkJaWYgKHN0YXR1cyA9PSAtRVBST1RPKSB7Ci0JCQkvLyBQTDIzMDMgbXlzdGVyaW91c2x5IGZhaWxzIHdpdGggLUVQUk9UTyByZXNjaGVkdWxlIHRoZSByZWFkCi0JCQlkYmcoIiVzIC0gY2F1Z2h0IC1FUFJPVE8sIHJlc3VibWl0dGluZyB0aGUgdXJiIiwgX19mdW5jX18pOworCQkJKiBQTDIzMDMgbXlzdGVyaW91c2x5IGZhaWxzIHdpdGggLUVQUk9UTyByZXNjaGVkdWxlCisJCQkgICB0aGUgcmVhZCAqCisJCQlkYmcoIiVzIC0gY2F1Z2h0IC1FUFJPVE8sIHJlc3VibWl0dGluZyB0aGUgdXJiIiwKKwkJCQkJCQkJX19mdW5jX18pOwogCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChyZXN1bHQpCiAJCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwpAQCAtMTAyMCwxNCArMTAwMiwxNCBAQAogCQlyZXR1cm47CiAJfQogCi0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCWlmICh0dHkgIT0gTlVMTCAmJiB1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KIAotCS8vIHNjaGVkdWxlIHRoZSBpbnRlcnJ1cHQgdXJiIGlmIHdlIGFyZSBzdGlsbCBvcGVuICovCi0JaWYgKHBvcnQtPm9wZW5fY291bnQgIT0gMCkgeworCS8qIHNjaGVkdWxlIHRoZSBpbnRlcnJ1cHQgdXJiIGlmIHdlIGFyZSBzdGlsbCBvcGVuICovCisJaWYgKHBvcnQtPnBvcnQuY291bnQgIT0gMCkgewogCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQgIT0gMCkgewpAQCAtMTA3OCw3ICsxMDYwLDcgQEAKIAogCXByaXYtPmZsYWdzLndyaXRlX3VyYl9pbl91c2UgPSAwOwogCi0JLy8gc2NoZWR1bGUgdGhlIGludGVycnVwdCB1cmIgaWYgd2UgYXJlIHN0aWxsIG9wZW4gKi8KKwkvKiBzY2hlZHVsZSB0aGUgaW50ZXJydXB0IHVyYiBpZiB3ZSBhcmUgc3RpbGwgb3BlbiAqLwogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCWRiZygiJXMoKTogc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19mdW5jX18pOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOwpAQCAtMTE1Myw3ICsxMTM1LDcgQEAKIHsKIAlpZiAocGIgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuICgocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9wdXQgLSBwYi0+YnVmX2dldCkgJSBwYi0+YnVmX3NpemUpOworCXJldHVybiAocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9wdXQgLSBwYi0+YnVmX2dldCkgJSBwYi0+YnVmX3NpemU7CiB9CiAKIC8qCkBAIC0xMTY2LDcgKzExNDgsNyBAQAogewogCWlmIChwYiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gKChwYi0+YnVmX3NpemUgKyBwYi0+YnVmX2dldCAtIHBiLT5idWZfcHV0IC0gMSkgJSBwYi0+YnVmX3NpemUpOworCXJldHVybiAocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9nZXQgLSBwYi0+YnVmX3B1dCAtIDEpICUgcGItPmJ1Zl9zaXplOwogfQogCiAvKgpAQCAtMTI1MywxMyArMTIzNSwxMiBAQAogewogCWludCByZXR2YWw7CiAKLQlpZiAoKHJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJm90aTY4NThfZGV2aWNlKSkgPT0gMCkgewotCQlpZiAoKHJldHZhbCA9IHVzYl9yZWdpc3Rlcigmb3RpNjg1OF9kcml2ZXIpKSAhPSAwKQorCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJm90aTY4NThfZGV2aWNlKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZvdGk2ODU4X2RyaXZlcik7CisJCWlmIChyZXR2YWwpCiAJCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJm90aTY4NThfZGV2aWNlKTsKLQkJZWxzZQotCQkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IDJhMGRkMWIuLjJjOWM0NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTEwLDcgKzEwLDggQEAKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KICAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcworICogZHJpdmVyCiAgKgogICovCiAKQEAgLTI1LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogI2luY2x1ZGUgInBsMjMwMy5oIgpAQCAtMTE2LDcgKzExNyw3IEBACiAjZGVmaW5lIENPTlRST0xfUlRTCQkJMHgwMgogCiAjZGVmaW5lIEJSRUFLX1JFUVVFU1RfVFlQRQkJMHgyMQotI2RlZmluZSBCUkVBS19SRVFVRVNUCQkJMHgyMwkKKyNkZWZpbmUgQlJFQUtfUkVRVUVTVAkJCTB4MjMKICNkZWZpbmUgQlJFQUtfT04JCQkweGZmZmYKICNkZWZpbmUgQlJFQUtfT0ZGCQkJMHgwMDAwCiAKQEAgLTIyMiw3ICsyMjMsNyBAQAogCWlmIChwYiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiAoKHBiLT5idWZfc2l6ZSArIHBiLT5idWZfcHV0IC0gcGItPmJ1Zl9nZXQpICUgcGItPmJ1Zl9zaXplKTsKKwlyZXR1cm4gKHBiLT5idWZfc2l6ZSArIHBiLT5idWZfcHV0IC0gcGItPmJ1Zl9nZXQpICUgcGItPmJ1Zl9zaXplOwogfQogCiAvKgpAQCAtMjM2LDcgKzIzNyw3IEBACiAJaWYgKHBiID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuICgocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9nZXQgLSBwYi0+YnVmX3B1dCAtIDEpICUgcGItPmJ1Zl9zaXplKTsKKwlyZXR1cm4gKHBiLT5idWZfc2l6ZSArIHBiLT5idWZfZ2V0IC0gcGItPmJ1Zl9wdXQgLSAxKSAlIHBiLT5idWZfc2l6ZTsKIH0KIAogLyoKQEAgLTM5NSw3ICszOTYsNyBAQAogCiBjbGVhbnVwOgogCWtmcmVlKGJ1Zik7Ci0JZm9yICgtLWk7IGk+PTA7IC0taSkgeworCWZvciAoLS1pOyBpID49IDA7IC0taSkgewogCQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CiAJCXBsMjMwM19idWZfZnJlZShwcml2LT5idWYpOwogCQlrZnJlZShwcml2KTsKQEAgLTQwNyw3ICs0MDgsNyBAQAogc3RhdGljIGludCBzZXRfY29udHJvbF9saW5lcyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1OCB2YWx1ZSkKIHsKIAlpbnQgcmV0dmFsOwotCQorCiAJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCiAJCQkJIFNFVF9DT05UUk9MX1JFUVVFU1QsIFNFVF9DT05UUk9MX1JFUVVFU1RfVFlQRSwKIAkJCQkgdmFsdWUsIDAsIE5VTEwsIDAsIDEwMCk7CkBAIC00NTIsMTQgKzQ1MywxNCBAQAogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwiCiAJCQkiIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAkJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7Ci0JCS8vIFRPRE86IHJlc2NoZWR1bGUgcGwyMzAzX3NlbmQKKwkJLyogVE9ETzogcmVzY2hlZHVsZSBwbDIzMDNfc2VuZCAqLwogCX0KIAogCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwogfQogCi1zdGF0aWMgaW50IHBsMjMwM193cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCi0JCQlpbnQgY291bnQpCitzdGF0aWMgaW50IHBsMjMwM193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDc4LDggKzQ3OSw5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IHBsMjMwM193cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHBsMjMwM193cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCByb29tID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDk0LDggKzQ5Niw5IEBACiAJcmV0dXJuIHJvb207CiB9CiAKLXN0YXRpYyBpbnQgcGwyMzAzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBwbDIzMDNfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBjaGFycyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUxMCw4ICs1MTMsOCBAQAogCXJldHVybiBjaGFyczsKIH0KIAotc3RhdGljIHZvaWQgcGwyMzAzX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIHBsMjMwM19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtNTI2LDExICs1MjksMTAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKCFwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkKSB7Ci0JCSoocG9ydC0+dHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKLQkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8Ci0JCQkJCSAgICAgIEhVUENMIHwgQ0xPQ0FMOwotCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gOTYwMDsKLQkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDk2MDA7CisJCSoodHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKKwkJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCQl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gOTYwMDsKKwkJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDk2MDA7CiAJCXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQgPSAxOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC01MzksMTYgKzU0MSwxNiBAQAogCSAgIHNlcmlhbCBzZXR0aW5ncyBldmVuIHRvIHRoZSBzYW1lIHZhbHVlcyBhcyBiZWZvcmUuIFRodXMKIAkgICB3ZSBhY3R1YWxseSBuZWVkIHRvIGZpbHRlciBpbiB0aGlzIHNwZWNpZmljIGNhc2UgKi8KIAotCWlmICghdHR5X3Rlcm1pb3NfaHdfY2hhbmdlKHBvcnQtPnR0eS0+dGVybWlvcywgb2xkX3Rlcm1pb3MpKQorCWlmICghdHR5X3Rlcm1pb3NfaHdfY2hhbmdlKHR0eS0+dGVybWlvcywgb2xkX3Rlcm1pb3MpKQogCQlyZXR1cm47CiAKLQljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAogCWJ1ZiA9IGt6YWxsb2MoNywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19mdW5jX18pOwogCQkvKiBSZXBvcnQgYmFjayBubyBjaGFuZ2Ugb2NjdXJyZWQgKi8KLQkJKnBvcnQtPnR0eS0+dGVybWlvcyA9ICpvbGRfdGVybWlvczsKKwkJKnR0eS0+dGVybWlvcyA9ICpvbGRfdGVybWlvczsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTYwLDE2ICs1NjIsMjQgQEAKIAogCWlmIChjZmxhZyAmIENTSVpFKSB7CiAJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewotCQkJY2FzZSBDUzU6CWJ1Zls2XSA9IDU7CWJyZWFrOwotCQkJY2FzZSBDUzY6CWJ1Zls2XSA9IDY7CWJyZWFrOwotCQkJY2FzZSBDUzc6CWJ1Zls2XSA9IDc7CWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCWNhc2UgQ1M4OglidWZbNl0gPSA4OwlicmVhazsKKwkJY2FzZSBDUzU6CisJCQlidWZbNl0gPSA1OworCQkJYnJlYWs7CisJCWNhc2UgQ1M2OgorCQkJYnVmWzZdID0gNjsKKwkJCWJyZWFrOworCQljYXNlIENTNzoKKwkJCWJ1Zls2XSA9IDc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6CisJCQlidWZbNl0gPSA4OworCQkJYnJlYWs7CiAJCX0KIAkJZGJnKCIlcyAtIGRhdGEgYml0cyA9ICVkIiwgX19mdW5jX18sIGJ1Zls2XSk7CiAJfQogCi0JYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7OworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCWRiZygiJXMgLSBiYXVkID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7CiAJaWYgKGJhdWQpIHsKIAkJYnVmWzBdID0gYmF1ZCAmIDB4ZmY7CkBAIC02NDYsMTIgKzY1NiwxMyBAQAogCiAJLyogRklYTUU6IE5lZWQgdG8gcmVhZCBiYWNrIHJlc3VsdGluZyBiYXVkIHJhdGUgKi8KIAlpZiAoYmF1ZCkKLQkJdHR5X2VuY29kZV9iYXVkX3JhdGUocG9ydC0+dHR5LCBiYXVkLCBiYXVkKTsKKwkJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKIAogCWtmcmVlKGJ1Zik7CiB9CiAKLXN0YXRpYyB2b2lkIHBsMjMwM19jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIHBsMjMwM19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02NjYsNyArNjc3LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXRpbWVvdXQgPSBQTDIzMDNfQ0xPU0lOR19XQUlUOwogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKLQlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+dHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOwogCWZvciAoOzspIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKHBsMjMwM19idWZfZGF0YV9hdmFpbChwcml2LT5idWYpID09IDAgfHwKQEAgLTY3OCw3ICs2ODksNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT50dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAJLyogY2xlYXIgb3V0IGFueSByZW1haW5pbmcgZGF0YSBpbiB0aGUgYnVmZmVyICovCiAJcGwyMzAzX2J1Zl9jbGVhcihwcml2LT5idWYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTY5MCw5ICs3MDEsOSBAQAogCS8qIGZvciBsb3dlciByYXRlcyB3ZSBzaG91bGQgcmVhbGx5IGtub3cgaG93IG11Y2ggKi8KIAkvKiBkYXRhIGlzIGluIHRoZSBidWZmZXIgdG8gY29tcHV0ZSBhIGRlbGF5ICovCiAJLyogdGhhdCBpcyBub3QgdW5uZWNlc3NhcmlseSBsb25nKSAqLwotCWJwcyA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJYnBzID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKIAlpZiAoYnBzID4gMTIwMCkKLQkJdGltZW91dCA9IG1heCgoSFoqMjU2MCkvYnBzLEhaLzEwKTsKKwkJdGltZW91dCA9IG1heCgoSFoqMjU2MCkvYnBzLCBIWi8xMCk7CiAJZWxzZQogCQl0aW1lb3V0ID0gMipIWjsKIAlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7CkBAIC03MDMsOCArNzE0LDggQEAKIAl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwogCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKIAotCWlmIChwb3J0LT50dHkpIHsKLQkJY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlpZiAodHR5KSB7CisJCWNfY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJCWlmIChjX2NmbGFnICYgSFVQQ0wpIHsKIAkJCS8qIGRyb3AgRFRSIGFuZCBSVFMgKi8KIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC03MTUsNyArNzI2LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcGwyMzAzX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IHBsMjMwM19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3Qga3Rlcm1pb3MgdG1wX3Rlcm1pb3M7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKQEAgLTczNCwxMSArNzQ2LDEwIEBACiAJfQogCiAJLyogU2V0dXAgdGVybWlvcyAqLwotCWlmIChwb3J0LT50dHkpIHsKLQkJcGwyMzAzX3NldF90ZXJtaW9zKHBvcnQsICZ0bXBfdGVybWlvcyk7Ci0JfQorCWlmICh0dHkpCisJCXBsMjMwM19zZXRfdGVybWlvcyh0dHksIHBvcnQsICZ0bXBfdGVybWlvcyk7CiAKLQkvL0ZJWE1FOiBuZWVkIHRvIGFzc2VydCBSVFMgYW5kIERUUiBpZiBDUlRTQ1RTIG9mZgorCS8qIEZJWE1FOiBuZWVkIHRvIGFzc2VydCBSVFMgYW5kIERUUiBpZiBDUlRTQ1RTIG9mZiAqLwogCiAJZGJnKCIlcyAtIHN1Ym1pdHRpbmcgcmVhZCB1cmIiLCBfX2Z1bmNfXyk7CiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OwpAQCAtNzQ2LDcgKzc1Nyw3IEBACiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCIKIAkJCSIgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwotCQlwbDIzMDNfY2xvc2UocG9ydCwgTlVMTCk7CisJCXBsMjMwM19jbG9zZSh0dHksIHBvcnQsIE5VTEwpOwogCQlyZXR1cm4gLUVQUk9UTzsKIAl9CiAKQEAgLTc1NiwxNSArNzY3LDE2IEBACiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIgogCQkJIiBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7Ci0JCXBsMjMwM19jbG9zZShwb3J0LCBOVUxMKTsKKwkJcGwyMzAzX2Nsb3NlKHR0eSwgcG9ydCwgTlVMTCk7CiAJCXJldHVybiAtRVBST1RPOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwbDIzMDNfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IHBsMjMwM190aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBjb250cm9sOwpAQCAtNzg3LDggKzc5OSw5IEBACiAJcmV0dXJuIHNldF9jb250cm9sX2xpbmVzKHBvcnQtPnNlcmlhbC0+ZGV2LCBjb250cm9sKTsKIH0KIAotc3RhdGljIGludCBwbDIzMDNfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHBsMjMwM190aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgbWNyOwpAQCAtODM5LDEyICs4NTIsMTIgQEAKIAkJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCQljaGFuZ2VkPXByZXZzdGF0dXNec3RhdHVzOworCQljaGFuZ2VkID0gcHJldnN0YXR1cyBeIHN0YXR1czsKIAogCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjaGFuZ2VkICYgVUFSVF9SSU5HKSkgfHwKIAkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY2hhbmdlZCAmIFVBUlRfRFNSKSkgfHwKIAkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY2hhbmdlZCAmIFVBUlRfRENEKSkgfHwKLQkJICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY2hhbmdlZCAmIFVBUlRfQ1RTKSkgKSB7CisJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNoYW5nZWQgJiBVQVJUX0NUUykpKSB7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlwcmV2c3RhdHVzID0gc3RhdHVzOwpAQCAtODUzLDI2ICs4NjYsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwbDIzMDNfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IHBsMjMwM19pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWRiZygiJXMgKCVkKSBjbWQgPSAweCUwNHgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBUSU9DTUlXQUlUOgotCQkJZGJnKCIlcyAoJWQpIFRJT0NNSVdBSVQiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlcik7Ci0JCQlyZXR1cm4gd2FpdF9tb2RlbV9pbmZvKHBvcnQsIGFyZyk7Ci0KLQkJZGVmYXVsdDoKLQkJCWRiZygiJXMgbm90IHN1cHBvcnRlZCA9IDB4JTA0eCIsIF9fZnVuY19fLCBjbWQpOwotCQkJYnJlYWs7CisJY2FzZSBUSU9DTUlXQUlUOgorCQlkYmcoIiVzICglZCkgVElPQ01JV0FJVCIsIF9fZnVuY19fLCAgcG9ydC0+bnVtYmVyKTsKKwkJcmV0dXJuIHdhaXRfbW9kZW1faW5mbyhwb3J0LCBhcmcpOworCWRlZmF1bHQ6CisJCWRiZygiJXMgbm90IHN1cHBvcnRlZCA9IDB4JTA0eCIsIF9fZnVuY19fLCBjbWQpOworCQlicmVhazsKIAl9Ci0KIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCi1zdGF0aWMgdm9pZCBwbDIzMDNfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyB2b2lkIHBsMjMwM19icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJdTE2IHN0YXRlOwogCWludCByZXN1bHQ7CkBAIC04ODMsNyArODk2LDggQEAKIAkJc3RhdGUgPSBCUkVBS19PRkY7CiAJZWxzZQogCQlzdGF0ZSA9IEJSRUFLX09OOwotCWRiZygiJXMgLSB0dXJuaW5nIGJyZWFrICVzIiwgX19mdW5jX18sIHN0YXRlPT1CUkVBS19PRkYgPyAib2ZmIiA6ICJvbiIpOworCWRiZygiJXMgLSB0dXJuaW5nIGJyZWFrICVzIiwgX19mdW5jX18sCisJCQlzdGF0ZSA9PSBCUkVBS19PRkYgPyAib2ZmIiA6ICJvbiIpOwogCiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJCSBCUkVBS19SRVFVRVNULCBCUkVBS19SRVFVRVNUX1RZUEUsIHN0YXRlLApAQCAtOTM3LDcgKzk1MSw3IEBACiAJaWYgKGFjdHVhbF9sZW5ndGggPCBsZW5ndGgpCiAJCXJldHVybjsKIAotICAgICAgICAvKiBTYXZlIG9mZiB0aGUgdWFydCBzdGF0dXMgZm9yIG90aGVycyB0byBsb29rIGF0ICovCisJLyogU2F2ZSBvZmYgdGhlIHVhcnQgc3RhdHVzIGZvciBvdGhlcnMgdG8gbG9vayBhdCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcHJpdi0+bGluZV9zdGF0dXMgPSBkYXRhW3N0YXR1c19pZHhdOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTEwMDEsNyArMTAxNSw3IEBACiAKIAlpZiAoc3RhdHVzKSB7CiAJCWRiZygiJXMgLSB1cmIgc3RhdHVzID0gJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQkJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWlmICghcG9ydC0+cG9ydC5jb3VudCkgewogCQkJZGJnKCIlcyAtIHBvcnQgaXMgY2xvc2VkLCBleGl0aW5nLiIsIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTAzNiw3ICsxMDUwLDcgQEAKIAogCS8qIGJyZWFrIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBwYXJpdHksICovCiAJLyogd2hpY2ggdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGZyYW1pbmcgZXJyb3JzICovCi0JaWYgKGxpbmVfc3RhdHVzICYgVUFSVF9CUkVBS19FUlJPUiApCisJaWYgKGxpbmVfc3RhdHVzICYgVUFSVF9CUkVBS19FUlJPUikKIAkJdHR5X2ZsYWcgPSBUVFlfQlJFQUs7CiAJZWxzZSBpZiAobGluZV9zdGF0dXMgJiBVQVJUX1BBUklUWV9FUlJPUikKIAkJdHR5X2ZsYWcgPSBUVFlfUEFSSVRZOwpAQCAtMTA0NCw3ICsxMDU4LDcgQEAKIAkJdHR5X2ZsYWcgPSBUVFlfRlJBTUU7CiAJZGJnKCIlcyAtIHR0eV9mbGFnID0gJWQiLCBfX2Z1bmNfXywgdHR5X2ZsYWcpOwogCi0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoICsgMSk7CiAJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KQEAgLTEwNTYsNyArMTA3MCw3IEBACiAJfQogCiAJLyogU2NoZWR1bGUgdGhlIG5leHQgcmVhZCBfaWZfIHdlIGFyZSBzdGlsbCBvcGVuICovCi0JaWYgKHBvcnQtPm9wZW5fY291bnQpIHsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCkgewogCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYwppbmRleCA5NGJkZGYwLi5kZWY1MmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYwpAQCAtMTMsMjQgKzEzLDI1IEBACiAgKiAgICAgIFN0dWFydCBMeW5uZSA8c2xAbGluZW8uY29tPiwgVG9tIFJ1c2h3b3J0aCA8dGJyQGxpbmVvLmNvbT4KICAqLwogCi0vKiAKLSAqIFRoZSBlbmNhcHN1bHRhaW9uIGlzIGRlc2lnbmVkIHRvIG92ZXJjb21lIGRpZmZpY3VsdGllcyB3aXRoIHNvbWUgVVNCIGhhcmR3YXJlLgorLyoKKyAqIFRoZSBlbmNhcHN1bHRhaW9uIGlzIGRlc2lnbmVkIHRvIG92ZXJjb21lIGRpZmZpY3VsdGllcyB3aXRoIHNvbWUgVVNCCisgKiBoYXJkd2FyZS4KICAqCiAgKiBXaGlsZSB0aGUgVVNCIHByb3RvY29sIGhhcyBhIENSQyBvdmVyIHRoZSBkYXRhIHdoaWxlIGluIHRyYW5zaXQsIGkuZS4gd2hpbGUKLSAqIGJlaW5nIGNhcnJpZWQgb3ZlciB0aGUgYnVzLCB0aGVyZSBpcyBubyBlbmQgdG8gZW5kIHByb3RlY3Rpb24uIElmIHRoZSBoYXJkd2FyZQotICogaGFzIGFueSBwcm9ibGVtcyBnZXR0aW5nIHRoZSBkYXRhIGludG8gb3Igb3V0IG9mIHRoZSBVU0IgdHJhbnNtaXQgYW5kIHJlY2VpdmUKLSAqIEZJRk8ncyB0aGVuIGRhdGEgY2FuIGJlIGxvc3QuIAorICogYmVpbmcgY2FycmllZCBvdmVyIHRoZSBidXMsIHRoZXJlIGlzIG5vIGVuZCB0byBlbmQgcHJvdGVjdGlvbi4gSWYgdGhlCisgKiBoYXJkd2FyZSBoYXMgYW55IHByb2JsZW1zIGdldHRpbmcgdGhlIGRhdGEgaW50byBvciBvdXQgb2YgdGhlIFVTQiB0cmFuc21pdAorICogYW5kIHJlY2VpdmUgRklGTydzIHRoZW4gZGF0YSBjYW4gYmUgbG9zdC4KICAqCi0gKiBUaGlzIHByb3RvY29sIGFkZHMgYSB0d28gYnl0ZSB0cmFpbGVyIHRvIGVhY2ggVVNCIHBhY2tldCB0byBzcGVjaWZ5IHRoZSBudW1iZXIKLSAqIG9mIGJ5dGVzIG9mIHZhbGlkIGRhdGEgYW5kIGEgMTAgYml0IENSQyB0aGF0IHdpbGwgYWxsb3cgdGhlIHJlY2VpdmVyIHRvIHZlcmlmeQotICogdGhhdCB0aGUgZW50aXJlIFVTQiBwYWNrZXQgd2FzIHJlY2VpdmVkIHdpdGhvdXQgZXJyb3IuCisgKiBUaGlzIHByb3RvY29sIGFkZHMgYSB0d28gYnl0ZSB0cmFpbGVyIHRvIGVhY2ggVVNCIHBhY2tldCB0byBzcGVjaWZ5IHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIG9mIHZhbGlkIGRhdGEgYW5kIGEgMTAgYml0IENSQyB0aGF0IHdpbGwgYWxsb3cgdGhlIHJlY2VpdmVyCisgKiB0byB2ZXJpZnkgdGhhdCB0aGUgZW50aXJlIFVTQiBwYWNrZXQgd2FzIHJlY2VpdmVkIHdpdGhvdXQgZXJyb3IuCiAgKgotICogQmVjYXVzZSBpbiB0aGlzIGNhc2UgdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIgYXJlIHRoZSBjbGFzcyBhbmQgZnVuY3Rpb24gZHJpdmVycwotICogdGhlcmUgaXMgbm93IGVuZCB0byBlbmQgcHJvdGVjdGlvbi4KKyAqIEJlY2F1c2UgaW4gdGhpcyBjYXNlIHRoZSBzZW5kZXIgYW5kIHJlY2VpdmVyIGFyZSB0aGUgY2xhc3MgYW5kIGZ1bmN0aW9uCisgKiBkcml2ZXJzIHRoZXJlIGlzIG5vdyBlbmQgdG8gZW5kIHByb3RlY3Rpb24uCiAgKgotICogVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBvcHRpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmb3JjZSBhbGwgdHJhbnNtaXR0ZWQgcGFja2V0cwotICogdG8gYmUgcGFkZGVkIHRvIHRoZSBtYXhpbXVtIHBhY2tldCBzaXplLiBUaGlzIHByb3ZpZGVzIGEgd29yayBhcm91bmQgZm9yIHNvbWUKLSAqIGRldmljZXMgd2hpY2ggaGF2ZSBwcm9ibGVtcyB3aXRoIHNtYWxsIFVTQiBwYWNrZXRzLgorICogVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBvcHRpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmb3JjZSBhbGwgdHJhbnNtaXR0ZWQKKyAqIHBhY2tldHMgdG8gYmUgcGFkZGVkIHRvIHRoZSBtYXhpbXVtIHBhY2tldCBzaXplLiBUaGlzIHByb3ZpZGVzIGEgd29yaworICogYXJvdW5kIGZvciBzb21lIGRldmljZXMgd2hpY2ggaGF2ZSBwcm9ibGVtcyB3aXRoIHNtYWxsIFVTQiBwYWNrZXRzLgogICoKICAqIEFzc3VtaW5nIGEgcGFja2V0c2l6ZSBvZiBOOgogICoKQEAgLTQ0LDExICs0NSwxMiBAQAogICogICAgICB8IERhdGEgTGVuZ3RoICAgICAgIHwgMTAgYml0IENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICogICAgICArIDcgLiA2IC4gNSAuIDQgLiAzIC4gMiAuIDEgLiAwIHwgNyAuIDYgLiA1IC4gNCAuIDMgLiAyIC4gMSAuIDAgKwogICoKLSAqIFRoZSAxMCBiaXQgQ1JDIGlzIGNvbXB1dGVkIGFjcm9zcyB0aGUgc2VudCBkYXRhLCBmb2xsb3dlZCBieSB0aGUgdHJhaWxlciB3aXRoCi0gKiB0aGUgbGVuZ3RoIHNldCBhbmQgdGhlIENSQyBzZXQgdG8gemVyby4gVGhlIENSQyBpcyB0aGVuIE9SJ2QgaW50byB0aGUgdHJhaWxlci4KKyAqIFRoZSAxMCBiaXQgQ1JDIGlzIGNvbXB1dGVkIGFjcm9zcyB0aGUgc2VudCBkYXRhLCBmb2xsb3dlZCBieSB0aGUgdHJhaWxlcgorICogd2l0aCB0aGUgbGVuZ3RoIHNldCBhbmQgdGhlIENSQyBzZXQgdG8gemVyby4gVGhlIENSQyBpcyB0aGVuIE9SJ2QgaW50bworICogdGhlIHRyYWlsZXIuCiAgKgotICogV2hlbiByZWNlaXZlZCBhIDEwIGJpdCBDUkMgaXMgY29tcHV0ZWQgb3ZlciB0aGUgZW50aXJlIGZyYW1lIGluY2x1ZGluZyB0aGUgdHJhaWxlcgotICogYW5kIHNob3VsZCBiZSBlcXVhbCB0byB6ZXJvLgorICogV2hlbiByZWNlaXZlZCBhIDEwIGJpdCBDUkMgaXMgY29tcHV0ZWQgb3ZlciB0aGUgZW50aXJlIGZyYW1lIGluY2x1ZGluZworICogdGhlIHRyYWlsZXIgYW5kIHNob3VsZCBiZSBlcXVhbCB0byB6ZXJvLgogICoKICAqIFR3byBtb2R1bGUgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBlbmNhcHN1bGF0aW9uLCBpZiBib3RoIGFyZQogICogdHVybmVkIG9mIHRoZSBtb2R1bGUgd29ya3MgYXMgYSBzaW1wbGUgc2VyaWFsIGRldmljZSB3aXRoIE5PCkBAIC02OSw3ICs3MSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KIApAQCAtODYsMTIgKzg4LDEyIEBACiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgInNsQGxpbmVvLmNvbSwgdGJyQGxpbmVvLmNvbSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBTYWZlIEVuY2Fwc3VsYXRlZCBTZXJpYWwiCiAKLU1PRFVMRV9BVVRIT1IgKERSSVZFUl9BVVRIT1IpOwotTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIF9fdTE2IHZlbmRvcjsJCS8vIG5vIGRlZmF1bHQKLXN0YXRpYyBfX3UxNiBwcm9kdWN0OwkJLy8gbm8gZGVmYXVsdAorc3RhdGljIF9fdTE2IHZlbmRvcjsJCS8qIG5vIGRlZmF1bHQgKi8KK3N0YXRpYyBfX3UxNiBwcm9kdWN0OwkJLyogbm8gZGVmYXVsdCAqLwogbW9kdWxlX3BhcmFtKHZlbmRvciwgdXNob3J0LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgVVNCIGlkVmVuZG9yIChyZXF1aXJlZCkiKTsKIG1vZHVsZV9wYXJhbShwcm9kdWN0LCB1c2hvcnQsIDApOwpAQCAtMTIyLDMwICsxMjQsMzEgQEAKICNkZWZpbmUgTElORU9fU0FGRVNFUklBTF9DUkNfUEFEREVEICAgICAgICAgICAgIDB4MDIKIAogCi0jZGVmaW5lIE1ZX1VTQl9ERVZJQ0UodmVuZCxwcm9kLGRjLGljLGlzYykgXAotICAgICAgICAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTIHwgXAotICAgICAgICAgICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsIFwKLSAgICAgICAgLmlkVmVuZG9yID0gKHZlbmQpLCBcCi0gICAgICAgIC5pZFByb2R1Y3QgPSAocHJvZCksXAotICAgICAgICAuYkRldmljZUNsYXNzID0gKGRjKSxcCi0gICAgICAgIC5iSW50ZXJmYWNlQ2xhc3MgPSAoaWMpLCBcCi0gICAgICAgIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAoaXNjKSwKKyNkZWZpbmUgTVlfVVNCX0RFVklDRSh2ZW5kLCBwcm9kLCBkYywgaWMsIGlzYykgXAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwgXAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MgfCBcCisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8IFwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLCBcCisJLmlkVmVuZG9yID0gKHZlbmQpLCBcCisJLmlkUHJvZHVjdCA9IChwcm9kKSxcCisJLmJEZXZpY2VDbGFzcyA9IChkYyksXAorCS5iSW50ZXJmYWNlQ2xhc3MgPSAoaWMpLCBcCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IChpc2MpLAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKLQl7TVlfVVNCX0RFVklDRSAoMHg0OWYsIDB4ZmZmZiwgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvLyBJdHN5Ci0Je01ZX1VTQl9ERVZJQ0UgKDB4M2YwLCAweDIxMDEsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLy8gQ2FseXBzbwotCXtNWV9VU0JfREVWSUNFICgweDRkZCwgMHg4MDAxLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIElyaXMgCi0Je01ZX1VTQl9ERVZJQ0UgKDB4NGRkLCAweDgwMDIsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLy8gQ29sbGllIAotCXtNWV9VU0JfREVWSUNFICgweDRkZCwgMHg4MDAzLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIENvbGxpZSAKLQl7TVlfVVNCX0RFVklDRSAoMHg0ZGQsIDB4ODAwNCwgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvLyBDb2xsaWUgCi0Je01ZX1VTQl9ERVZJQ0UgKDB4NWY5LCAweGZmZmYsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLy8gU2hhcnAgdG1wCi0JLy8gZXh0cmEgbnVsbCBlbnRyeSBmb3IgbW9kdWxlIAotCS8vIHZlbmRvci9wcm9kdWMgcGFyYW1ldGVycwotCXtNWV9VU0JfREVWSUNFICgwLCAwLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCi0Je30JCQkvLyB0ZXJtaW5hdGluZyBlbnRyeSAKKwl7TVlfVVNCX0RFVklDRSgweDQ5ZiwgMHhmZmZmLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8qIEl0c3kgKi8KKwl7TVlfVVNCX0RFVklDRSgweDNmMCwgMHgyMTAxLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8qIENhbHlwc28gKi8KKwl7TVlfVVNCX0RFVklDRSgweDRkZCwgMHg4MDAxLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8qIElyaXMgKi8KKwl7TVlfVVNCX0RFVklDRSgweDRkZCwgMHg4MDAyLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8qIENvbGxpZSAqLworCXtNWV9VU0JfREVWSUNFKDB4NGRkLCAweDgwMDMsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLyogQ29sbGllICovCisJe01ZX1VTQl9ERVZJQ0UoMHg0ZGQsIDB4ODAwNCwgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvKiBDb2xsaWUgKi8KKwl7TVlfVVNCX0RFVklDRSgweDVmOSwgMHhmZmZmLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8qIFNoYXJwIHRtcCAqLworCS8qIGV4dHJhIG51bGwgZW50cnkgZm9yIG1vZHVsZSB2ZW5kb3IvcHJvZHVjIHBhcmFtZXRlcnMgKi8KKwl7TVlfVVNCX0RFVklDRSgwLCAwLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCisJe30JCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNhZmVfZHJpdmVyID0gewogCS5uYW1lID0JCSJzYWZlX3NlcmlhbCIsCkBAIC0xNTYsMjkgKzE1OSw0NSBAQAogfTsKIAogc3RhdGljIGNvbnN0IF9fdTE2IGNyYzEwX3RhYmxlWzI1Nl0gPSB7Ci0JMHgwMDAsIDB4MjMzLCAweDI1NSwgMHgwNjYsIDB4Mjk5LCAweDBhYSwgMHgwY2MsIDB4MmZmLCAweDMwMSwgMHgxMzIsIDB4MTU0LCAweDM2NywgMHgxOTgsIDB4M2FiLCAweDNjZCwgMHgxZmUsCi0JMHgwMzEsIDB4MjAyLCAweDI2NCwgMHgwNTcsIDB4MmE4LCAweDA5YiwgMHgwZmQsIDB4MmNlLCAweDMzMCwgMHgxMDMsIDB4MTY1LCAweDM1NiwgMHgxYTksIDB4MzlhLCAweDNmYywgMHgxY2YsCi0JMHgwNjIsIDB4MjUxLCAweDIzNywgMHgwMDQsIDB4MmZiLCAweDBjOCwgMHgwYWUsIDB4MjlkLCAweDM2MywgMHgxNTAsIDB4MTM2LCAweDMwNSwgMHgxZmEsIDB4M2M5LCAweDNhZiwgMHgxOWMsCi0JMHgwNTMsIDB4MjYwLCAweDIwNiwgMHgwMzUsIDB4MmNhLCAweDBmOSwgMHgwOWYsIDB4MmFjLCAweDM1MiwgMHgxNjEsIDB4MTA3LCAweDMzNCwgMHgxY2IsIDB4M2Y4LCAweDM5ZSwgMHgxYWQsCi0JMHgwYzQsIDB4MmY3LCAweDI5MSwgMHgwYTIsIDB4MjVkLCAweDA2ZSwgMHgwMDgsIDB4MjNiLCAweDNjNSwgMHgxZjYsIDB4MTkwLCAweDNhMywgMHgxNWMsIDB4MzZmLCAweDMwOSwgMHgxM2EsCi0JMHgwZjUsIDB4MmM2LCAweDJhMCwgMHgwOTMsIDB4MjZjLCAweDA1ZiwgMHgwMzksIDB4MjBhLCAweDNmNCwgMHgxYzcsIDB4MWExLCAweDM5MiwgMHgxNmQsIDB4MzVlLCAweDMzOCwgMHgxMGIsCi0JMHgwYTYsIDB4Mjk1LCAweDJmMywgMHgwYzAsIDB4MjNmLCAweDAwYywgMHgwNmEsIDB4MjU5LCAweDNhNywgMHgxOTQsIDB4MWYyLCAweDNjMSwgMHgxM2UsIDB4MzBkLCAweDM2YiwgMHgxNTgsCi0JMHgwOTcsIDB4MmE0LCAweDJjMiwgMHgwZjEsIDB4MjBlLCAweDAzZCwgMHgwNWIsIDB4MjY4LCAweDM5NiwgMHgxYTUsIDB4MWMzLCAweDNmMCwgMHgxMGYsIDB4MzNjLCAweDM1YSwgMHgxNjksCi0JMHgxODgsIDB4M2JiLCAweDNkZCwgMHgxZWUsIDB4MzExLCAweDEyMiwgMHgxNDQsIDB4Mzc3LCAweDI4OSwgMHgwYmEsIDB4MGRjLCAweDJlZiwgMHgwMTAsIDB4MjIzLCAweDI0NSwgMHgwNzYsCi0JMHgxYjksIDB4MzhhLCAweDNlYywgMHgxZGYsIDB4MzIwLCAweDExMywgMHgxNzUsIDB4MzQ2LCAweDJiOCwgMHgwOGIsIDB4MGVkLCAweDJkZSwgMHgwMjEsIDB4MjEyLCAweDI3NCwgMHgwNDcsCi0JMHgxZWEsIDB4M2Q5LCAweDNiZiwgMHgxOGMsIDB4MzczLCAweDE0MCwgMHgxMjYsIDB4MzE1LCAweDJlYiwgMHgwZDgsIDB4MGJlLCAweDI4ZCwgMHgwNzIsIDB4MjQxLCAweDIyNywgMHgwMTQsCi0JMHgxZGIsIDB4M2U4LCAweDM4ZSwgMHgxYmQsIDB4MzQyLCAweDE3MSwgMHgxMTcsIDB4MzI0LCAweDJkYSwgMHgwZTksIDB4MDhmLCAweDJiYywgMHgwNDMsIDB4MjcwLCAweDIxNiwgMHgwMjUsCi0JMHgxNGMsIDB4MzdmLCAweDMxOSwgMHgxMmEsIDB4M2Q1LCAweDFlNiwgMHgxODAsIDB4M2IzLCAweDI0ZCwgMHgwN2UsIDB4MDE4LCAweDIyYiwgMHgwZDQsIDB4MmU3LCAweDI4MSwgMHgwYjIsCi0JMHgxN2QsIDB4MzRlLCAweDMyOCwgMHgxMWIsIDB4M2U0LCAweDFkNywgMHgxYjEsIDB4MzgyLCAweDI3YywgMHgwNGYsIDB4MDI5LCAweDIxYSwgMHgwZTUsIDB4MmQ2LCAweDJiMCwgMHgwODMsCi0JMHgxMmUsIDB4MzFkLCAweDM3YiwgMHgxNDgsIDB4M2I3LCAweDE4NCwgMHgxZTIsIDB4M2QxLCAweDIyZiwgMHgwMWMsIDB4MDdhLCAweDI0OSwgMHgwYjYsIDB4Mjg1LCAweDJlMywgMHgwZDAsCi0JMHgxMWYsIDB4MzJjLCAweDM0YSwgMHgxNzksIDB4Mzg2LCAweDFiNSwgMHgxZDMsIDB4M2UwLCAweDIxZSwgMHgwMmQsIDB4MDRiLCAweDI3OCwgMHgwODcsIDB4MmI0LCAweDJkMiwgMHgwZTEsCisJMHgwMDAsIDB4MjMzLCAweDI1NSwgMHgwNjYsIDB4Mjk5LCAweDBhYSwgMHgwY2MsIDB4MmZmLAorCTB4MzAxLCAweDEzMiwgMHgxNTQsIDB4MzY3LCAweDE5OCwgMHgzYWIsIDB4M2NkLCAweDFmZSwKKwkweDAzMSwgMHgyMDIsIDB4MjY0LCAweDA1NywgMHgyYTgsIDB4MDliLCAweDBmZCwgMHgyY2UsCisJMHgzMzAsIDB4MTAzLCAweDE2NSwgMHgzNTYsIDB4MWE5LCAweDM5YSwgMHgzZmMsIDB4MWNmLAorCTB4MDYyLCAweDI1MSwgMHgyMzcsIDB4MDA0LCAweDJmYiwgMHgwYzgsIDB4MGFlLCAweDI5ZCwKKwkweDM2MywgMHgxNTAsIDB4MTM2LCAweDMwNSwgMHgxZmEsIDB4M2M5LCAweDNhZiwgMHgxOWMsCisJMHgwNTMsIDB4MjYwLCAweDIwNiwgMHgwMzUsIDB4MmNhLCAweDBmOSwgMHgwOWYsIDB4MmFjLAorCTB4MzUyLCAweDE2MSwgMHgxMDcsIDB4MzM0LCAweDFjYiwgMHgzZjgsIDB4MzllLCAweDFhZCwKKwkweDBjNCwgMHgyZjcsIDB4MjkxLCAweDBhMiwgMHgyNWQsIDB4MDZlLCAweDAwOCwgMHgyM2IsCisJMHgzYzUsIDB4MWY2LCAweDE5MCwgMHgzYTMsIDB4MTVjLCAweDM2ZiwgMHgzMDksIDB4MTNhLAorCTB4MGY1LCAweDJjNiwgMHgyYTAsIDB4MDkzLCAweDI2YywgMHgwNWYsIDB4MDM5LCAweDIwYSwKKwkweDNmNCwgMHgxYzcsIDB4MWExLCAweDM5MiwgMHgxNmQsIDB4MzVlLCAweDMzOCwgMHgxMGIsCisJMHgwYTYsIDB4Mjk1LCAweDJmMywgMHgwYzAsIDB4MjNmLCAweDAwYywgMHgwNmEsIDB4MjU5LAorCTB4M2E3LCAweDE5NCwgMHgxZjIsIDB4M2MxLCAweDEzZSwgMHgzMGQsIDB4MzZiLCAweDE1OCwKKwkweDA5NywgMHgyYTQsIDB4MmMyLCAweDBmMSwgMHgyMGUsIDB4MDNkLCAweDA1YiwgMHgyNjgsCisJMHgzOTYsIDB4MWE1LCAweDFjMywgMHgzZjAsIDB4MTBmLCAweDMzYywgMHgzNWEsIDB4MTY5LAorCTB4MTg4LCAweDNiYiwgMHgzZGQsIDB4MWVlLCAweDMxMSwgMHgxMjIsIDB4MTQ0LCAweDM3NywKKwkweDI4OSwgMHgwYmEsIDB4MGRjLCAweDJlZiwgMHgwMTAsIDB4MjIzLCAweDI0NSwgMHgwNzYsCisJMHgxYjksIDB4MzhhLCAweDNlYywgMHgxZGYsIDB4MzIwLCAweDExMywgMHgxNzUsIDB4MzQ2LAorCTB4MmI4LCAweDA4YiwgMHgwZWQsIDB4MmRlLCAweDAyMSwgMHgyMTIsIDB4Mjc0LCAweDA0NywKKwkweDFlYSwgMHgzZDksIDB4M2JmLCAweDE4YywgMHgzNzMsIDB4MTQwLCAweDEyNiwgMHgzMTUsCisJMHgyZWIsIDB4MGQ4LCAweDBiZSwgMHgyOGQsIDB4MDcyLCAweDI0MSwgMHgyMjcsIDB4MDE0LAorCTB4MWRiLCAweDNlOCwgMHgzOGUsIDB4MWJkLCAweDM0MiwgMHgxNzEsIDB4MTE3LCAweDMyNCwKKwkweDJkYSwgMHgwZTksIDB4MDhmLCAweDJiYywgMHgwNDMsIDB4MjcwLCAweDIxNiwgMHgwMjUsCisJMHgxNGMsIDB4MzdmLCAweDMxOSwgMHgxMmEsIDB4M2Q1LCAweDFlNiwgMHgxODAsIDB4M2IzLAorCTB4MjRkLCAweDA3ZSwgMHgwMTgsIDB4MjJiLCAweDBkNCwgMHgyZTcsIDB4MjgxLCAweDBiMiwKKwkweDE3ZCwgMHgzNGUsIDB4MzI4LCAweDExYiwgMHgzZTQsIDB4MWQ3LCAweDFiMSwgMHgzODIsCisJMHgyN2MsIDB4MDRmLCAweDAyOSwgMHgyMWEsIDB4MGU1LCAweDJkNiwgMHgyYjAsIDB4MDgzLAorCTB4MTJlLCAweDMxZCwgMHgzN2IsIDB4MTQ4LCAweDNiNywgMHgxODQsIDB4MWUyLCAweDNkMSwKKwkweDIyZiwgMHgwMWMsIDB4MDdhLCAweDI0OSwgMHgwYjYsIDB4Mjg1LCAweDJlMywgMHgwZDAsCisJMHgxMWYsIDB4MzJjLCAweDM0YSwgMHgxNzksIDB4Mzg2LCAweDFiNSwgMHgxZDMsIDB4M2UwLAorCTB4MjFlLCAweDAyZCwgMHgwNGIsIDB4Mjc4LCAweDA4NywgMHgyYjQsIDB4MmQyLCAweDBlMSwKIH07CiAKLSNkZWZpbmUgQ1JDMTBfSU5JVEZDUyAgICAgMHgwMDAJLy8gSW5pdGlhbCBGQ1MgdmFsdWUKLSNkZWZpbmUgQ1JDMTBfR09PREZDUyAgICAgMHgwMDAJLy8gR29vZCBmaW5hbCBGQ1MgdmFsdWUKLSNkZWZpbmUgQ1JDMTBfRkNTKGZjcywgYykgKCAoKChmY3MpIDw8IDgpICYgMHgzZmYpIF4gY3JjMTBfdGFibGVbKChmY3MpID4+IDIpICYgMHhmZl0gXiAoYykpCisjZGVmaW5lIENSQzEwX0lOSVRGQ1MgICAgIDB4MDAwCS8qIEluaXRpYWwgRkNTIHZhbHVlICovCisjZGVmaW5lIENSQzEwX0dPT0RGQ1MgICAgIDB4MDAwCS8qIEdvb2QgZmluYWwgRkNTIHZhbHVlICovCisjZGVmaW5lIENSQzEwX0ZDUyhmY3MsIGMpICgoKChmY3MpIDw8IDgpICYgMHgzZmYpIF4gY3JjMTBfdGFibGVbKChmY3MpID4+IDIpICYgMHhmZl0gXiAoYykpCiAKLS8qKiAgICAgCisvKioKICAqIGZjc19jb21wdXRlMTAgLSBtZW1jcHkgYW5kIGNhbGN1bGF0ZSAxMCBiaXQgQ1JDIGFjcm9zcyBidWZmZXIKICAqIEBzcDogcG9pbnRlciB0byBidWZmZXIKICAqIEBsZW46IG51bWJlciBvZiBieXRlcwpAQCAtMTg3LDEzICsyMDYsMTMgQEAKICAqIFBlcmZvcm0gYSBtZW1jcHkgYW5kIGNhbGN1bGF0ZSBmY3MgdXNpbmcgcHBwIDEwYml0IENSQyBhbGdvcml0aG0uIFJldHVybgogICogbmV3IDEwIGJpdCBGQ1MuCiAgKi8KLXN0YXRpYyBfX3UxNiBfX2lubGluZV9fIGZjc19jb21wdXRlMTAgKHVuc2lnbmVkIGNoYXIgKnNwLCBpbnQgbGVuLCBfX3UxNiBmY3MpCitzdGF0aWMgX191MTYgX19pbmxpbmVfXyBmY3NfY29tcHV0ZTEwKHVuc2lnbmVkIGNoYXIgKnNwLCBpbnQgbGVuLCBfX3UxNiBmY3MpCiB7Ci0JZm9yICg7IGxlbi0tID4gMDsgZmNzID0gQ1JDMTBfRkNTIChmY3MsICpzcCsrKSk7CisJZm9yICg7IGxlbi0tID4gMDsgZmNzID0gQ1JDMTBfRkNTKGZjcywgKnNwKyspKTsKIAlyZXR1cm4gZmNzOwogfQogCi1zdGF0aWMgdm9pZCBzYWZlX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgc2FmZV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAgdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKQEAgLTIwMSw3ICsyMjAsNyBAQAogCWludCByZXN1bHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCi0JZGJnICgiJXMiLCBfX2Z1bmNfXyk7CisJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCWlmIChzdGF0dXMpIHsKIAkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLApAQCAtMjA5LDc2ICsyMjgsODIgQEAKIAkJcmV0dXJuOwogCX0KIAotCWRiZyAoInNhZmVfcmVhZF9idWxrX2NhbGxiYWNrIGxlbmd0aDogJWQiLCBwb3J0LT5yZWFkX3VyYi0+YWN0dWFsX2xlbmd0aCk7CisJZGJnKCJzYWZlX3JlYWRfYnVsa19jYWxsYmFjayBsZW5ndGg6ICVkIiwKKwkJCQkJcG9ydC0+cmVhZF91cmItPmFjdHVhbF9sZW5ndGgpOwogI2lmZGVmIEVDSE9fUkNWCiAJewogCQlpbnQgaTsKIAkJdW5zaWduZWQgY2hhciAqY3AgPSBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyOwogCQlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+cmVhZF91cmItPmFjdHVhbF9sZW5ndGg7IGkrKykgewotCQkJaWYgKChpICUgMzIpID09IDApIHsKLQkJCQlwcmludGsgKCJcbnJ1WyUwMnhdICIsIGkpOwotCQkJfQotCQkJcHJpbnRrICgiJTAyeCAiLCAqY3ArKyk7CisJCQlpZiAoKGkgJSAzMikgPT0gMCkKKwkJCQlwcmludGsoIlxucnVbJTAyeF0gIiwgaSk7CisJCQlwcmludGsoIiUwMnggIiwgKmNwKyspOwogCQl9Ci0JCXByaW50ayAoIlxuIik7CisJCXByaW50aygiXG4iKTsKIAl9CiAjZW5kaWYKIAlpZiAoc2FmZSkgewogCQlfX3UxNiBmY3M7Ci0JCWlmICghKGZjcyA9IGZjc19jb21wdXRlMTAgKGRhdGEsIGxlbmd0aCwgQ1JDMTBfSU5JVEZDUykpKSB7CisJCWZjcyA9IGZjc19jb21wdXRlMTAoZGF0YSwgbGVuZ3RoLCBDUkMxMF9JTklURkNTKTsKKwkJaWYgKCFmY3MpIHsKIAkJCWludCBhY3R1YWxfbGVuZ3RoID0gZGF0YVtsZW5ndGggLSAyXSA+PiAyOwogCQkJaWYgKGFjdHVhbF9sZW5ndGggPD0gKGxlbmd0aCAtIDIpKSB7Ci0JCQkJaW5mbyAoIiVzIC0gYWN0dWFsOiAlZCIsIF9fZnVuY19fLCBhY3R1YWxfbGVuZ3RoKTsKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHBvcnQtPnR0eSwgZGF0YSwgYWN0dWFsX2xlbmd0aCk7Ci0JCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2ggKHBvcnQtPnR0eSk7CisJCQkJaW5mbygiJXMgLSBhY3R1YWw6ICVkIiwgX19mdW5jX18sCisJCQkJCQkJYWN0dWFsX2xlbmd0aCk7CisJCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyhwb3J0LT5wb3J0LnR0eSwKKwkJCQkJCQlkYXRhLCBhY3R1YWxfbGVuZ3RoKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5wb3J0LnR0eSk7CiAJCQl9IGVsc2UgewotCQkJCWVyciAoIiVzIC0gaW5jb25zaXN0ZW50IGxlbmd0aHMgJWQ6JWQiLCBfX2Z1bmNfXywKLQkJCQkgICAgIGFjdHVhbF9sZW5ndGgsIGxlbmd0aCk7CisJCQkJZXJyKCIlcyAtIGluY29uc2lzdGVudCBsZW5ndGhzICVkOiVkIiwKKwkJCQkJX19mdW5jX18sIGFjdHVhbF9sZW5ndGgsIGxlbmd0aCk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQllcnIgKCIlcyAtIGJhZCBDUkMgJXgiLCBfX2Z1bmNfXywgZmNzKTsKKwkJCWVycigiJXMgLSBiYWQgQ1JDICV4IiwgX19mdW5jX18sIGZjcyk7CiAJCX0KIAl9IGVsc2UgewotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHBvcnQtPnR0eSwgZGF0YSwgbGVuZ3RoKTsKLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2ggKHBvcnQtPnR0eSk7CisJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcocG9ydC0+cG9ydC50dHksIGRhdGEsIGxlbmd0aCk7CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPnBvcnQudHR5KTsKIAl9CiAKIAkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCi0JdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCi0JCSAgICAgICB1c2JfcmN2YnVsa3BpcGUgKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCi0JCSAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkgICAgICAgc2FmZV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCisJCQl1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQlzYWZlX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAKLQlpZiAoKHJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpKSkgewotCQllcnIgKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkvKiBGSVhNRTogTmVlZCBhIG1lY2hhbmlzbSB0byByZXRyeSBsYXRlciBpZiB0aGlzIGhhcHBlbnMgKi8KLQl9CiB9CiAKLXN0YXRpYyBpbnQgc2FmZV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCitzdGF0aWMgaW50IHNhZmVfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKIAlpbnQgcmVzdWx0OwogCWludCBpOwogCWludCBwYWNrZXRfbGVuZ3RoOwogCi0JZGJnICgic2FmZV93cml0ZSBwb3J0OiAlcCAlZCB1cmI6ICVwIGNvdW50OiAlZCIsIHBvcnQsIHBvcnQtPm51bWJlciwgcG9ydC0+d3JpdGVfdXJiLAotCSAgICAgY291bnQpOworCWRiZygic2FmZV93cml0ZSBwb3J0OiAlcCAlZCB1cmI6ICVwIGNvdW50OiAlZCIsCisJCQkJcG9ydCwgcG9ydC0+bnVtYmVyLCBwb3J0LT53cml0ZV91cmIsIGNvdW50KTsKIAogCWlmICghcG9ydC0+d3JpdGVfdXJiKSB7Ci0JCWRiZyAoIiVzIC0gd3JpdGUgdXJiIE5VTEwiLCBfX2Z1bmNfXyk7CisJCWRiZygiJXMgLSB3cml0ZSB1cmIgTlVMTCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGJnICgic2FmZV93cml0ZSB3cml0ZV91cmI6ICVkIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgiLAorCWRiZygic2FmZV93cml0ZSB3cml0ZV91cmI6ICVkIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgiLAogCSAgICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKIAogCWlmICghcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7Ci0JCWRiZyAoIiVzIC0gd3JpdGUgdXJiIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggemVybyIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIHdyaXRlIHVyYiB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIHplcm8iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoY291bnQgPT0gMCkgewotCQlkYmcgKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fZnVuY19fKTsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNwaW5fbG9ja19iaCgmcG9ydC0+bG9jayk7CkBAIC0yOTAsODUgKzMxNSw4NSBAQAogCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMTsKIAlzcGluX3VubG9ja19iaCgmcG9ydC0+bG9jayk7CiAKLQlwYWNrZXRfbGVuZ3RoID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsJLy8gZ2V0IG1heCBwYWNrZXRzaXplCisJcGFja2V0X2xlbmd0aCA9IHBvcnQtPmJ1bGtfb3V0X3NpemU7CS8qIGdldCBtYXggcGFja2V0c2l6ZSAqLwogCi0JaSA9IHBhY2tldF9sZW5ndGggLSAoc2FmZSA/IDIgOiAwKTsJLy8gZ2V0IGJ5dGVzIHRvIHNlbmQKKwlpID0gcGFja2V0X2xlbmd0aCAtIChzYWZlID8gMiA6IDApOwkvKiBnZXQgYnl0ZXMgdG8gc2VuZCAqLwogCWNvdW50ID0gKGNvdW50ID4gaSkgPyBpIDogY291bnQ7CiAKIAotCS8vIGdldCB0aGUgZGF0YSBpbnRvIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkvKiBnZXQgdGhlIGRhdGEgaW50byB0aGUgdHJhbnNmZXIgYnVmZmVyICovCiAJZGF0YSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOwotCW1lbXNldCAoZGF0YSwgJzAnLCBwYWNrZXRfbGVuZ3RoKTsKKwltZW1zZXQoZGF0YSwgJzAnLCBwYWNrZXRfbGVuZ3RoKTsKIAotCW1lbWNweSAoZGF0YSwgYnVmLCBjb3VudCk7CisJbWVtY3B5KGRhdGEsIGJ1ZiwgY291bnQpOwogCiAJaWYgKHNhZmUpIHsKIAkJX191MTYgZmNzOwogCi0JCS8vIHBhZCBpZiBuZWNlc3NhcnkKLQkJaWYgKCFwYWRkZWQpIHsKKwkJLyogcGFkIGlmIG5lY2Vzc2FyeSAqLworCQlpZiAoIXBhZGRlZCkKIAkJCXBhY2tldF9sZW5ndGggPSBjb3VudCArIDI7Ci0JCX0KLQkJLy8gc2V0IGNvdW50CisJCS8qIHNldCBjb3VudCAqLwogCQlkYXRhW3BhY2tldF9sZW5ndGggLSAyXSA9IGNvdW50IDw8IDI7CiAJCWRhdGFbcGFja2V0X2xlbmd0aCAtIDFdID0gMDsKIAotCQkvLyBjb21wdXRlIGZjcyBhbmQgaW5zZXJ0IGludG8gdHJhaWxlcgotCQlmY3MgPSBmY3NfY29tcHV0ZTEwIChkYXRhLCBwYWNrZXRfbGVuZ3RoLCBDUkMxMF9JTklURkNTKTsKKwkJLyogY29tcHV0ZSBmY3MgYW5kIGluc2VydCBpbnRvIHRyYWlsZXIgKi8KKwkJZmNzID0gZmNzX2NvbXB1dGUxMChkYXRhLCBwYWNrZXRfbGVuZ3RoLCBDUkMxMF9JTklURkNTKTsKIAkJZGF0YVtwYWNrZXRfbGVuZ3RoIC0gMl0gfD0gZmNzID4+IDg7CiAJCWRhdGFbcGFja2V0X2xlbmd0aCAtIDFdIHw9IGZjcyAmIDB4ZmY7CiAKLQkJLy8gc2V0IGxlbmd0aCB0byBzZW5kCisJCS8qIHNldCBsZW5ndGggdG8gc2VuZCAqLwogCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwYWNrZXRfbGVuZ3RoOwogCX0gZWxzZSB7CiAJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OwogCX0KIAotCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIGNvdW50LCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsCisJCQkJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKICNpZmRlZiBFQ0hPX1RYCiAJewogCQlpbnQgaTsKIAkJdW5zaWduZWQgY2hhciAqY3AgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAkJZm9yIChpID0gMDsgaSA8IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoKGkgJSAzMikgPT0gMCkgewotCQkJCXByaW50ayAoIlxuc3VbJTAyeF0gIiwgaSk7Ci0JCQl9Ci0JCQlwcmludGsgKCIlMDJ4ICIsICpjcCsrKTsKKwkJCWlmICgoaSAlIDMyKSA9PSAwKQorCQkJCXByaW50aygiXG5zdVslMDJ4XSAiLCBpKTsKKwkJCXByaW50aygiJTAyeCAiLCAqY3ArKyk7CiAJCX0KLQkJcHJpbnRrICgiXG4iKTsKKwkJcHJpbnRrKCJcbiIpOwogCX0KICNlbmRpZgogCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JaWYgKChyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+d3JpdGVfdXJiLCBHRlBfS0VSTkVMKSkpIHsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpIHsKIAkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOwotCQllcnIgKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQlyZXR1cm4gMDsKIAl9Ci0JZGJnICgiJXMgdXJiOiAlcCBzdWJtaXR0ZWQiLCBfX2Z1bmNfXywgcG9ydC0+d3JpdGVfdXJiKTsKKwlkYmcoIiVzIHVyYjogJXAgc3VibWl0dGVkIiwgX19mdW5jX18sIHBvcnQtPndyaXRlX3VyYik7CiAKLQlyZXR1cm4gKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgc2FmZV93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBzYWZlX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcm9vbSA9IDA7CQkvKiBEZWZhdWx0OiBubyByb29tICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCWlmIChwb3J0LT53cml0ZV91cmJfYnVzeSkKIAkJcm9vbSA9IHBvcnQtPmJ1bGtfb3V0X3NpemUgLSAoc2FmZSA/IDIgOiAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocm9vbSkgewotCQlkYmcgKCJzYWZlX3dyaXRlX3Jvb20gcmV0dXJucyAlZCIsIHJvb20pOwotCX0KLQorCWlmIChyb29tKQorCQlkYmcoInNhZmVfd3JpdGVfcm9vbSByZXR1cm5zICVkIiwgcm9vbSk7CiAJcmV0dXJuIHJvb207CiB9CiAKLXN0YXRpYyBpbnQgc2FmZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBzYWZlX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzd2l0Y2ggKHNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpIHsKIAljYXNlIExJTkVPX1NBRkVTRVJJQUxfQ1JDOgpAQCAtMzk2LDE3ICs0MjEsMTggQEAKIAkuYXR0YWNoID0JCXNhZmVfc3RhcnR1cCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHNhZmVfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNhZmVfaW5pdCh2b2lkKQogewogCWludCBpLCByZXR2YWw7CiAKLQlpbmZvIChEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0FVVEhPUik7Ci0JaW5mbyAoRFJJVkVSX0RFU0MpOwotCWluZm8gKCJ2ZW5kb3I6ICV4IHByb2R1Y3Q6ICV4IHNhZmU6ICVkIHBhZGRlZDogJWRcbiIsIHZlbmRvciwgcHJvZHVjdCwgc2FmZSwgcGFkZGVkKTsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKKwlpbmZvKERSSVZFUl9ERVNDKTsKKwlpbmZvKCJ2ZW5kb3I6ICV4IHByb2R1Y3Q6ICV4IHNhZmU6ICVkIHBhZGRlZDogJWRcbiIsCisJCQkJCXZlbmRvciwgcHJvZHVjdCwgc2FmZSwgcGFkZGVkKTsKIAotCS8vIGlmIHdlIGhhdmUgdmVuZG9yIC8gcHJvZHVjdCBwYXJhbWV0ZXJzIHBhdGNoIHRoZW0gaW50byBpZCBsaXN0CisJLyogaWYgd2UgaGF2ZSB2ZW5kb3IgLyBwcm9kdWN0IHBhcmFtZXRlcnMgcGF0Y2ggdGhlbSBpbnRvIGlkIGxpc3QgKi8KIAlpZiAodmVuZG9yIHx8IHByb2R1Y3QpIHsKLQkJaW5mbyAoInZlbmRvcjogJXggcHJvZHVjdDogJXhcbiIsIHZlbmRvciwgcHJvZHVjdCk7CisJCWluZm8oInZlbmRvcjogJXggcHJvZHVjdDogJXhcbiIsIHZlbmRvciwgcHJvZHVjdCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWRfdGFibGUpOyBpKyspIHsKIAkJCWlmICghaWRfdGFibGVbaV0uaWRWZW5kb3IgJiYgIWlkX3RhYmxlW2ldLmlkUHJvZHVjdCkgewpAQCAtNDMxLDExICs0NTcsMTEgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2FmZV9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNhZmVfZXhpdCh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgmc2FmZV9kcml2ZXIpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnNhZmVfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3Rlcigmc2FmZV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc2FmZV9kZXZpY2UpOwogfQogCi1tb2R1bGVfaW5pdCAoc2FmZV9pbml0KTsKLW1vZHVsZV9leGl0IChzYWZlX2V4aXQpOworbW9kdWxlX2luaXQoc2FmZV9pbml0KTsKK21vZHVsZV9leGl0KHNhZmVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggMjkwNzRjMS4uMmY2ZjE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtMjUwLDcgKzI1MCw4IEBACiAJaW50IHJpX3N0YXRlOwogfTsKIAotc3RhdGljIGludCBzaWVycmFfc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBzaWVycmFfc2VuZF9zZXR1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKQEAgLTI2MCw3ICsyNjEsNyBAQAogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQlpZiAocG9ydC0+dHR5KSB7CisJaWYgKHR0eSkgewogCQlpbnQgdmFsID0gMDsKIAkJaWYgKHBvcnRkYXRhLT5kdHJfc3RhdGUpCiAJCQl2YWwgfD0gMHgwMTsKQEAgLTI4NCwzMiArMjg1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNpZXJyYV9yeF90aHJvdHRsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgc2llcnJhX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKKwl0dHlfdGVybWlvc19jb3B5X2h3KHR0eS0+dGVybWlvcywgb2xkX3Rlcm1pb3MpOworCXNpZXJyYV9zZW5kX3NldHVwKHR0eSwgcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNpZXJyYV9yeF91bnRocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHNpZXJyYV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlkYmcoIiVzIiwgX19mdW5jX18pOwotfQotCi1zdGF0aWMgdm9pZCBzaWVycmFfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKLXsKLQkvKiBVbmZvcnR1bmF0ZWx5LCBJIGRvbid0IGtub3cgaG93IHRvIHNlbmQgYSBicmVhayAqLwotCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNpZXJyYV9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKLXsKLQlkYmcoIiVzIiwgX19mdW5jX18pOwotCXR0eV90ZXJtaW9zX2NvcHlfaHcocG9ydC0+dHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7Ci0Jc2llcnJhX3NlbmRfc2V0dXAocG9ydCk7Ci19Ci0KLXN0YXRpYyBpbnQgc2llcnJhX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoteworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGludCB2YWx1ZTsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKQEAgLTMyNSw5ICszMTEsMTAgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbnQgc2llcnJhX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBzaWVycmFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC0zNDEsMTMgKzMyOCw3IEBACiAJCXBvcnRkYXRhLT5ydHNfc3RhdGUgPSAwOwogCWlmIChjbGVhciAmIFRJT0NNX0RUUikKIAkJcG9ydGRhdGEtPmR0cl9zdGF0ZSA9IDA7Ci0JcmV0dXJuIHNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOwotfQotCi1zdGF0aWMgaW50IHNpZXJyYV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXJldHVybiAtRU5PSU9DVExDTUQ7CisJcmV0dXJuIHNpZXJyYV9zZW5kX3NldHVwKHR0eSwgcG9ydCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNpZXJyYV9vdXRkYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpAQCAtMzc0LDggKzM1NSw4IEBACiB9CiAKIC8qIFdyaXRlICovCi1zdGF0aWMgaW50IHNpZXJyYV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCitzdGF0aWMgaW50IHNpZXJyYV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKQEAgLTQ2Myw3ICs0NDQsNyBAQAogCQlkYmcoIiVzOiBub256ZXJvIHN0YXR1czogJWQgb24gZW5kcG9pbnQgJTAyeC4iLAogCQkgICAgX19mdW5jX18sIHN0YXR1cywgZW5kcG9pbnQpOwogCX0gZWxzZSB7Ci0JCXR0eSA9IHBvcnQtPnR0eTsKKwkJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtNDczLDcgKzQ1NCw3IEBACiAJCX0KIAogCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCi0JCWlmIChwb3J0LT5vcGVuX2NvdW50ICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CisJCWlmIChwb3J0LT5wb3J0LmNvdW50ICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CiAJCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQkJaWYgKGVycikKIAkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJyZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuIgpAQCAtNTE3LDkgKzQ5OCw5IEBACiAJCQlwb3J0ZGF0YS0+ZHNyX3N0YXRlID0gKChzaWduYWxzICYgMHgwMikgPyAxIDogMCk7CiAJCQlwb3J0ZGF0YS0+cmlfc3RhdGUgPSAoKHNpZ25hbHMgJiAweDA4KSA/IDEgOiAwKTsKIAotCQkJaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KSAmJgorCQkJaWYgKHBvcnQtPnBvcnQudHR5ICYmICFDX0NMT0NBTChwb3J0LT5wb3J0LnR0eSkgJiYKIAkJCQkJb2xkX2RjZF9zdGF0ZSAmJiAhcG9ydGRhdGEtPmRjZF9zdGF0ZSkKLQkJCQl0dHlfaGFuZ3VwKHBvcnQtPnR0eSk7CisJCQkJdHR5X2hhbmd1cChwb3J0LT5wb3J0LnR0eSk7CiAJCX0gZWxzZSB7CiAJCQlkYmcoIiVzOiB0eXBlICV4IHJlcSAleCIsIF9fZnVuY19fLAogCQkJCXJlcV9wa3QtPmJSZXF1ZXN0VHlwZSwgcmVxX3BrdC0+YlJlcXVlc3QpOwpAQCAtNTM3LDggKzUxOCw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNpZXJyYV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHNpZXJyYV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTU1NywyMiArNTM5LDggQEAKIAlyZXR1cm4gMjA0ODsKIH0KIAotc3RhdGljIGludCBzaWVycmFfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCS8qCi0JICogV2UgY2FuJ3QgcmVhbGx5IGFjY291bnQgZm9yIGhvdyBtdWNoIGRhdGEgd2UKLQkgKiBoYXZlIHNlbnQgb3V0LCBidXQgaGFzbid0IG1hZGUgaXQgdGhyb3VnaCB0byB0aGUKLQkgKiBkZXZpY2UgYXMgd2UgY2FuJ3Qgc2VlIHRoZSBiYWNrZW5kIGhlcmUsIHNvIGp1c3QKLQkgKiB0ZWxsIHRoZSB0dHkgbGF5ZXIgdGhhdCBldmVyeXRoaW5nIGlzIGZsdXNoZWQuCi0JICoKLQkgKiBGSVhNRTogc2hvdWxkIHdhbGsgdGhlIG91dHN0YW5kaW5nIHVyYnMgaW5mbwotCSAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNpZXJyYV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBzaWVycmFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CkBAIC02MTIsOSArNTgwLDEwIEBACiAJCX0KIAl9CiAKLQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKwlpZiAodHR5KQorCQl0dHktPmxvd19sYXRlbmN5ID0gMTsKIAotCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOworCXNpZXJyYV9zZW5kX3NldHVwKHR0eSwgcG9ydCk7CiAKIAkvKiBzdGFydCB1cCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlmIHdlIGhhdmUgb25lICovCiAJaWYgKHBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKQEAgLTYyNiw3ICs1OTUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzaWVycmFfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBzaWVycmFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBpOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CkBAIC02NDEsNyArNjExLDcgQEAKIAlpZiAoc2VyaWFsLT5kZXYpIHsKIAkJbXV0ZXhfbG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKIAkJaWYgKCFzZXJpYWwtPmRpc2Nvbm5lY3RlZCkKLQkJCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOworCQkJc2llcnJhX3NlbmRfc2V0dXAodHR5LCBwb3J0KTsKIAkJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwogCiAJCS8qIFN0b3AgcmVhZGluZy93cml0aW5nIHVyYnMgKi8KQEAgLTY1MSw3ICs2MjEsNyBAQAogCiAJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwogCi0JcG9ydC0+dHR5ID0gTlVMTDsKKwlwb3J0LT5wb3J0LnR0eSA9IE5VTEw7CS8qIEZJWE1FICovCiB9CiAKIHN0YXRpYyBpbnQgc2llcnJhX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKQEAgLTc1NCwxMiArNzI0LDcgQEAKIAkuY2xvc2UgICAgICAgICAgICAgPSBzaWVycmFfY2xvc2UsCiAJLndyaXRlICAgICAgICAgICAgID0gc2llcnJhX3dyaXRlLAogCS53cml0ZV9yb29tICAgICAgICA9IHNpZXJyYV93cml0ZV9yb29tLAotCS5jaGFyc19pbl9idWZmZXIgICA9IHNpZXJyYV9jaGFyc19pbl9idWZmZXIsCi0JLnRocm90dGxlICAgICAgICAgID0gc2llcnJhX3J4X3Rocm90dGxlLAotCS51bnRocm90dGxlICAgICAgICA9IHNpZXJyYV9yeF91bnRocm90dGxlLAotCS5pb2N0bCAgICAgICAgICAgICA9IHNpZXJyYV9pb2N0bCwKIAkuc2V0X3Rlcm1pb3MgICAgICAgPSBzaWVycmFfc2V0X3Rlcm1pb3MsCi0JLmJyZWFrX2N0bCAgICAgICAgID0gc2llcnJhX2JyZWFrX2N0bCwKIAkudGlvY21nZXQgICAgICAgICAgPSBzaWVycmFfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ICAgICAgICAgID0gc2llcnJhX3Rpb2Ntc2V0LAogCS5hdHRhY2ggICAgICAgICAgICA9IHNpZXJyYV9zdGFydHVwLApAQCAtNzkyLDcgKzc1Nyw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaWVycmFfZXhpdCh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgmc2llcnJhX2RyaXZlcik7CisJdXNiX2RlcmVnaXN0ZXIoJnNpZXJyYV9kcml2ZXIpOwogCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc2llcnJhX2RldmljZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCmluZGV4IDU1YjI1NzAuLjI4M2NmNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiB7CiAJaWYgKHBiID09IE5VTEwpCiAJCXJldHVybiAwOwotCXJldHVybiAoKHBiLT5idWZfc2l6ZSArIHBiLT5idWZfcHV0IC0gcGItPmJ1Zl9nZXQpICUgcGItPmJ1Zl9zaXplKTsKKwlyZXR1cm4gKHBiLT5idWZfc2l6ZSArIHBiLT5idWZfcHV0IC0gcGItPmJ1Zl9nZXQpICUgcGItPmJ1Zl9zaXplOwogfQogCiAvKiBnZXQgdGhlIG51bWJlciBvZiBzcGFjZSBpbiB0aGUgcGlwbyAqLwpAQCAtMjE2LDcgKzIxNiw3IEBACiB7CiAJaWYgKHBiID09IE5VTEwpCiAJCXJldHVybiAwOwotCXJldHVybiAoKHBiLT5idWZfc2l6ZSArIHBiLT5idWZfZ2V0IC0gcGItPmJ1Zl9wdXQgLSAxKSAlIHBiLT5idWZfc2l6ZSk7CisJcmV0dXJuIChwYi0+YnVmX3NpemUgKyBwYi0+YnVmX2dldCAtIHBiLT5idWZfcHV0IC0gMSkgJSBwYi0+YnVmX3NpemU7CiB9CiAKIC8qIHB1dCBjb3VudCBkYXRhIGludG8gcGlwbyAqLwpAQCAtNDQ4LDcgKzQ0OCw4IEBACiAKIC8qIGNsb3NlIHRoZSBzZXJpYWwgcG9ydC4gV2Ugc2hvdWxkIHdhaXQgZm9yIGRhdGEgc2VuZGluZyB0byBkZXZpY2UgMXN0IGFuZAogICogdGhlbiBraWxsIGFsbCB1cmIuICovCi1zdGF0aWMgdm9pZCBzcGNwOHg1X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgc3BjcDh4NV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHNwY3A4eDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDY0LDcgKzQ2NSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl0aW1lb3V0ID0gU1BDUDh4NV9DTE9TSU5HX1dBSVQ7CiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwotCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT50dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKKwlhZGRfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAJZm9yICg7OykgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAocmluZ2J1Zl9hdmFpbF9kYXRhKHByaXYtPmJ1ZikgPT0gMCB8fApAQCAtNDc1LDcgKzQ3Niw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnBvcnQtPnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKIAogCS8qIGNsZWFyIG91dCBhbnkgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLwogCWNsZWFyX3JpbmdidWYocHJpdi0+YnVmKTsKQEAgLTQ4Niw3ICs0ODcsNyBAQAogCSAqIGZsb3cgY29udHJvbCBmb3IgZGF0YSByYXRlcyBvZiAxMjAwIGJwcyBvciBtb3JlLCBmb3IgbG93ZXIgcmF0ZXMgd2UKIAkgKiBzaG91bGQgcmVhbGx5IGtub3cgaG93IG11Y2ggZGF0YSBpcyBpbiB0aGUgYnVmZmVyIHRvIGNvbXB1dGUgYSBkZWxheQogCSAqIHRoYXQgaXMgbm90IHVubmVjZXNzYXJpbHkgbG9uZykgKi8KLQlicHMgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWJwcyA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAJaWYgKGJwcyA+IDEyMDApCiAJCXRpbWVvdXQgPSBtYXgoKEhaKjI1NjApIC8gYnBzLCBIWi8xMCk7CiAJZWxzZQpAQCAtNDk1LDggKzQ5Niw4IEBACiAJc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKIAogCS8qIGNsZWFyIGNvbnRyb2wgbGluZXMgKi8KLQlpZiAocG9ydC0+dHR5KSB7Ci0JCWNfY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJaWYgKHR0eSkgeworCQljX2NmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCQlpZiAoY19jZmxhZyAmIEhVUENMKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJcHJpdi0+bGluZV9jb250cm9sID0gMDsKQEAgLTUxOCwxNCArNTE5LDE0IEBACiB9CiAKIC8qIHNldCB0aGUgc2VyaWFsIHBhcmFtIGZvciB0cmFuc2Zlci4gd2Ugc2hvdWxkIGNoZWNrIGlmIHdlIHJlYWxseSBuZWVkIHRvCi0gKiB0cmFuc2Zlci4gdGhlbiBpZiBiZSBzZXQgZmxvdyBjb250b3JsIHdlIHNob3VsZCBkbyB0aGlzIHRvby4gKi8KLXN0YXRpYyB2b2lkIHNwY3A4eDVfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorICogdHJhbnNmZXIuIGlmIHdlIHNldCBmbG93IGNvbnRyb2wgd2Ugc2hvdWxkIGRvIHRoaXMgdG9vLiAqLworc3RhdGljIHZvaWQgc3BjcDh4NV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IHNwY3A4eDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwl1bnNpZ25lZCBpbnQgY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJdW5zaWduZWQgaW50IG9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOwogCXVuc2lnbmVkIHNob3J0IHVhcnRkYXRhOwogCXVuc2lnbmVkIGNoYXIgYnVmWzJdID0gezAsIDB9OwpAQCAtNTMzLDIxICs1MzQsMTkgQEAKIAlpbnQgaTsKIAl1OCBjb250cm9sOwogCi0JaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpCi0JCXJldHVybjsKLQogCS8qIGZvciB0aGUgMXN0IHRpbWUgY2FsbCB0aGlzIGZ1bmN0aW9uICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQpIHsKLQkJKihwb3J0LT50dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOwotCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCMTE1MjAwIHwgQ1M4IHwgQ1JFQUQgfAotCQkJCQkgICAgICBIVVBDTCB8IENMT0NBTDsKKwkJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCMTE1MjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwkJdHR5LT50ZXJtaW9zLT5jX2lzcGVlZCA9IDExNTIwMDsKKwkJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDExNTIwMDsKIAkJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDE7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCi0JaWYgKCF0dHlfdGVybWlvc19od19jaGFuZ2UocG9ydC0+dHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcykpCisJaWYgKCF0dHlfdGVybWlvc19od19jaGFuZ2UodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcykpCiAJCXJldHVybjsKIAogCS8qIHNldCBEVFIvUlRTIGFjdGl2ZSAqLwpAQCAtNTY3LDcgKzU2Niw3IEBACiAJfQogCiAJLyogU2V0IEJhdWQgUmF0ZSAqLwotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOzsKKwliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTs7CiAJc3dpdGNoIChiYXVkKSB7CiAJY2FzZSAzMDA6CWJ1ZlswXSA9IDB4MDA7CWJyZWFrOwogCWNhc2UgNjAwOglidWZbMF0gPSAweDAxOwlicmVhazsKQEAgLTY0Myw3ICs2NDIsOCBAQAogCiAvKiBvcGVuIHRoZSBzZXJpYWwgcG9ydC4gZG8gc29tZSB1c2Igc3lzdGVtIGNhbGwuIHNldCB0ZXJtaW9zIGFuZCBnZXQgdGhlIGxpbmUKICAqIHN0YXR1cyBvZiB0aGUgZGV2aWNlLiB0aGVuIHN1Ym1pdCB0aGUgcmVhZCB1cmIgKi8KLXN0YXRpYyBpbnQgc3BjcDh4NV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBzcGNwOHg1X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBrdGVybWlvcyB0bXBfdGVybWlvczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtNjY1LDcgKzY2NSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKKwlpZiAodHR5ICYmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkpCiAJCXByaXYtPmxpbmVfY29udHJvbCA9IE1DUl9EVFIgfCBNQ1JfUlRTOwogCWVsc2UKIAkJcHJpdi0+bGluZV9jb250cm9sID0gMDsKQEAgLTY3NCw4ICs2NzQsOCBAQAogCXNwY3A4eDVfc2V0X2N0cmxMaW5lKHNlcmlhbC0+ZGV2LCBwcml2LT5saW5lX2NvbnRyb2wgLCBwcml2LT50eXBlKTsKIAogCS8qIFNldHVwIHRlcm1pb3MgKi8KLQlpZiAocG9ydC0+dHR5KQotCQlzcGNwOHg1X3NldF90ZXJtaW9zKHBvcnQsICZ0bXBfdGVybWlvcyk7CisJaWYgKHR0eSkKKwkJc3BjcDh4NV9zZXRfdGVybWlvcyh0dHksIHBvcnQsICZ0bXBfdGVybWlvcyk7CiAKIAlzcGNwOHg1X2dldF9tc3Ioc2VyaWFsLT5kZXYsICZzdGF0dXMsIHByaXYtPnR5cGUpOwogCkBAIC02OTAsNyArNjkwLDcgQEAKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXQpIHsKLQkJc3BjcDh4NV9jbG9zZShwb3J0LCBOVUxMKTsKKwkJc3BjcDh4NV9jbG9zZSh0dHksIHBvcnQsIE5VTEwpOwogCQlyZXR1cm4gLUVQUk9UTzsKIAl9CiAJcmV0dXJuIDA7CkBAIC03MTcsNyArNzE3LDcgQEAKIAogCS8qIGNoZWNrIHRoZSB1cmIgc3RhdHVzICovCiAJaWYgKHVyYi0+c3RhdHVzKSB7Ci0JCWlmICghcG9ydC0+b3Blbl9jb3VudCkKKwkJaWYgKCFwb3J0LT5wb3J0LmNvdW50KQogCQkJcmV0dXJuOwogCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVQUk9UTykgewogCQkJLyogc3BjcDh4NSBteXN0ZXJpb3VzbHkgZmFpbHMgd2l0aCAtRVBST1RPICovCkBAIC03NTUsNyArNzU1LDcgQEAKIAkJdHR5X2ZsYWcgPSBUVFlfRlJBTUU7CiAJZGV2X2RiZygmcG9ydC0+ZGV2LCAidHR5X2ZsYWcgPSAlZFxuIiwgdHR5X2ZsYWcpOwogCi0JdHR5ID0gcG9ydC0+dHR5OworCXR0eSA9IHBvcnQtPnBvcnQudHR5OwogCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoICsgMSk7CiAJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KQEAgLTc2Nyw3ICs3NjcsNyBAQAogCX0KIAogCS8qIFNjaGVkdWxlIHRoZSBuZXh0IHJlYWQgX2lmXyB3ZSBhcmUgc3RpbGwgb3BlbiAqLwotCWlmIChwb3J0LT5vcGVuX2NvdW50KSB7CisJaWYgKHBvcnQtPnBvcnQuY291bnQpIHsKIAkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiICwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCkBAIC04NjYsNyArODY2LDcgQEAKIH0KIAogLyogd3JpdGUgZGF0YSB0byByaW5nIGJ1ZmZlci4gYW5kIHRoZW4gc3RhcnQgdGhlIHdyaXRlIHRyYW5zZmVyICovCi1zdGF0aWMgaW50IHNwY3A4eDVfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKK3N0YXRpYyBpbnQgc3BjcDh4NV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCBzcGNwOHg1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC05MjUsOSArOTI1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3BjcDh4NV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgc3BjcDh4NV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlkYmcoIiVzICglZCkgY21kID0gMHglMDR4IiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY21kKTsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC05NDMsOSArOTQ0LDEwIEBACiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAotc3RhdGljIGludCBzcGNwOHg1X3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBzcGNwOHg1X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc3BjcDh4NV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggY29udHJvbDsKQEAgLTk2NSw4ICs5NjcsOSBAQAogCXJldHVybiBzcGNwOHg1X3NldF9jdHJsTGluZShwb3J0LT5zZXJpYWwtPmRldiwgY29udHJvbCAsIHByaXYtPnR5cGUpOwogfQogCi1zdGF0aWMgaW50IHNwY3A4eDVfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHNwY3A4eDVfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNwY3A4eDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBtY3I7CkBAIC05ODksOCArOTkyLDkgQEAKIH0KIAogLyogZ2V0IHRoZSBhdmFpbCBzcGFjZSByb29tIGluIHJpbmcgYnVmZmVyICovCi1zdGF0aWMgaW50IHNwY3A4eDVfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBzcGNwOHg1X3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc3BjcDh4NV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCByb29tID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTAwMyw4ICsxMDA3LDkgQEAKIH0KIAogLyogZ2V0IHRoZSBudW1iZXIgb2YgYXZhaWwgZGF0YSBpbiB3cml0ZSByaW5nIGJ1ZmZlciAqLwotc3RhdGljIGludCBzcGNwOHg1X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBzcGNwOHg1X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzcGNwOHg1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IGNoYXJzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKaW5kZXggYTI2YTYyOWQuLmUzOWM3NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwpAQCAtMTYsNyArMTYsNyBAQAogICogRm9yIHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBjb250YWN0IFRleGFzIEluc3RydW1lbnRzCiAgKiB0ZWNobmljYWwgc3VwcG9ydCwgb3IgQWwgQm9yY2hlcnMgPGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbT4sIG9yCiAgKiBQZXRlciBCZXJnZXIgPHBiZXJnZXJAYnJpbXNvbi5jb20+LgotICogCisgKgogICogVGhpcyBkcml2ZXIgbmVlZHMgdGhpcyBob3RwbHVnIHNjcmlwdCBpbiAvZXRjL2hvdHBsdWcvdXNiL3RpX3VzYl8zNDEwXzUwNTIKICAqIG9yIGluIC9ldGMvaG90cGx1Zy5kL3VzYi90aV91c2JfMzQxMF81MDUyLmhvdHBsdWcgdG8gc2V0IHRoZSBkZXZpY2UKICAqIGNvbmZpZ3VyYXRpb24uCkBAIC03MCw2ICs3MCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KQEAgLTgxLDcgKzgyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CkBAIC0xNDksMjEgKzE1MCwyNCBAQAogCiBzdGF0aWMgaW50IHRpX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCB0aV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgdm9pZCB0aV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgaW50IHRpX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0JaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgdGlfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgdGlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgdGlfdGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCB0aV91bnRocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCB0aV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQgdGlfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKTsKLXN0YXRpYyBpbnQgdGlfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIGludCB0aV90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwotc3RhdGljIHZvaWQgdGlfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQlzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdm9pZCB0aV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQlzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHRpX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjb3VudCk7CitzdGF0aWMgaW50IHRpX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50IHRpX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIHRpX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQgdGlfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgdGlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHRpX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIGludCB0aV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHRpX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIHZvaWQgdGlfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKIHN0YXRpYyB2b2lkIHRpX2ludGVycnVwdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogc3RhdGljIHZvaWQgdGlfYnVsa19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogc3RhdGljIHZvaWQgdGlfYnVsa19vdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKQEAgLTE5Miw4ICsxOTYsNyBAQAogc3RhdGljIGludCB0aV93cml0ZV9ieXRlKHN0cnVjdCB0aV9kZXZpY2UgKnRkZXYsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlfX3U4IG1hc2ssIF9fdTggYnl0ZSk7CiAKLXN0YXRpYyBpbnQgdGlfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IHRpX2RldmljZSAqdGRldiwgY2hhciAqZndfbmFtZSk7Ci0KK3N0YXRpYyBpbnQgdGlfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IHRpX2RldmljZSAqdGRldiwgaW50IHR5cGUpOwogCiAvKiBjaXJjdWxhciBidWZmZXIgKi8KIHN0YXRpYyBzdHJ1Y3QgY2lyY19idWYgKnRpX2J1Zl9hbGxvYyh2b2lkKTsKQEAgLTMyNSwxOSArMzI4LDI1IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZywgMD1ubywgMT15ZXMiKTsKIAogbW9kdWxlX3BhcmFtKGxvd19sYXRlbmN5LCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGxvd19sYXRlbmN5LCAiVFRZIGxvd19sYXRlbmN5IGZsYWcsIDA9b2ZmLCAxPW9uLCBkZWZhdWx0IGlzIG9mZiIpOworTU9EVUxFX1BBUk1fREVTQyhsb3dfbGF0ZW5jeSwKKwkJIlRUWSBsb3dfbGF0ZW5jeSBmbGFnLCAwPW9mZiwgMT1vbiwgZGVmYXVsdCBpcyBvZmYiKTsKIAogbW9kdWxlX3BhcmFtKGNsb3Npbmdfd2FpdCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGNsb3Npbmdfd2FpdCwgIk1heGltdW0gd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBpbiBjbG9zZSwgaW4gLjAxIHNlY3MsIGRlZmF1bHQgaXMgNDAwMCIpOworTU9EVUxFX1BBUk1fREVTQyhjbG9zaW5nX3dhaXQsCisgICAgIk1heGltdW0gd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBpbiBjbG9zZSwgaW4gLjAxIHNlY3MsIGRlZmF1bHQgaXMgNDAwMCIpOwogCiBtb2R1bGVfcGFyYW1fYXJyYXkodmVuZG9yXzM0MTAsIHVzaG9ydCwgJnZlbmRvcl8zNDEwX2NvdW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0ModmVuZG9yXzM0MTAsICJWZW5kb3IgaWRzIGZvciAzNDEwIGJhc2VkIGRldmljZXMsIDEtNSBzaG9ydCBpbnRlZ2VycyIpOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3JfMzQxMCwKKwkJIlZlbmRvciBpZHMgZm9yIDM0MTAgYmFzZWQgZGV2aWNlcywgMS01IHNob3J0IGludGVnZXJzIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkocHJvZHVjdF8zNDEwLCB1c2hvcnQsICZwcm9kdWN0XzM0MTBfY291bnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhwcm9kdWN0XzM0MTAsICJQcm9kdWN0IGlkcyBmb3IgMzQxMCBiYXNlZCBkZXZpY2VzLCAxLTUgc2hvcnQgaW50ZWdlcnMiKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdF8zNDEwLAorCQkiUHJvZHVjdCBpZHMgZm9yIDM0MTAgYmFzZWQgZGV2aWNlcywgMS01IHNob3J0IGludGVnZXJzIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkodmVuZG9yXzUwNTIsIHVzaG9ydCwgJnZlbmRvcl81MDUyX2NvdW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0ModmVuZG9yXzUwNTIsICJWZW5kb3IgaWRzIGZvciA1MDUyIGJhc2VkIGRldmljZXMsIDEtNSBzaG9ydCBpbnRlZ2VycyIpOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3JfNTA1MiwKKwkJIlZlbmRvciBpZHMgZm9yIDUwNTIgYmFzZWQgZGV2aWNlcywgMS01IHNob3J0IGludGVnZXJzIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkocHJvZHVjdF81MDUyLCB1c2hvcnQsICZwcm9kdWN0XzUwNTJfY291bnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhwcm9kdWN0XzUwNTIsICJQcm9kdWN0IGlkcyBmb3IgNTA1MiBiYXNlZCBkZXZpY2VzLCAxLTUgc2hvcnQgaW50ZWdlcnMiKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdF81MDUyLAorCQkiUHJvZHVjdCBpZHMgZm9yIDUwNTIgYmFzZWQgZGV2aWNlcywgMS01IHNob3J0IGludGVnZXJzIik7CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB0aV9pZF90YWJsZV9jb21iaW5lZCk7CiAKQEAgLTM0NiwxOCArMzU1LDE4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRpX2luaXQodm9pZCkKIHsKLQlpbnQgaSxqOworCWludCBpLCBqOwogCWludCByZXQ7CiAKIAkvKiBpbnNlcnQgZXh0cmEgdmVuZG9yIGFuZCBwcm9kdWN0IGlkcyAqLwogCWogPSBBUlJBWV9TSVpFKHRpX2lkX3RhYmxlXzM0MTApIC0gVElfRVhUUkFfVklEX1BJRF9DT1VOVCAtIDE7Ci0JZm9yIChpPTA7IGk8bWluKHZlbmRvcl8zNDEwX2NvdW50LHByb2R1Y3RfMzQxMF9jb3VudCk7IGkrKyxqKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWluKHZlbmRvcl8zNDEwX2NvdW50LCBwcm9kdWN0XzM0MTBfY291bnQpOyBpKyssIGorKykgewogCQl0aV9pZF90YWJsZV8zNDEwW2pdLmlkVmVuZG9yID0gdmVuZG9yXzM0MTBbaV07CiAJCXRpX2lkX3RhYmxlXzM0MTBbal0uaWRQcm9kdWN0ID0gcHJvZHVjdF8zNDEwW2ldOwogCQl0aV9pZF90YWJsZV8zNDEwW2pdLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0U7CiAJfQogCWogPSBBUlJBWV9TSVpFKHRpX2lkX3RhYmxlXzUwNTIpIC0gVElfRVhUUkFfVklEX1BJRF9DT1VOVCAtIDE7Ci0JZm9yIChpPTA7IGk8bWluKHZlbmRvcl81MDUyX2NvdW50LHByb2R1Y3RfNTA1Ml9jb3VudCk7IGkrKyxqKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWluKHZlbmRvcl81MDUyX2NvdW50LCBwcm9kdWN0XzUwNTJfY291bnQpOyBpKyssIGorKykgewogCQl0aV9pZF90YWJsZV81MDUyW2pdLmlkVmVuZG9yID0gdmVuZG9yXzUwNTJbaV07CiAJCXRpX2lkX3RhYmxlXzUwNTJbal0uaWRQcm9kdWN0ID0gcHJvZHVjdF81MDUyW2ldOwogCQl0aV9pZF90YWJsZV81MDUyW2pdLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0U7CkBAIC00MjYsMTUgKzQzNSwxNSBAQAogCS8qIGRldGVybWluZSBkZXZpY2UgdHlwZSAqLwogCWlmICh1c2JfbWF0Y2hfaWQoc2VyaWFsLT5pbnRlcmZhY2UsIHRpX2lkX3RhYmxlXzM0MTApKQogCQl0ZGV2LT50ZF9pc18zNDEwID0gMTsKLQlkYmcoIiVzIC0gZGV2aWNlIHR5cGUgaXMgJXMiLCBfX2Z1bmNfXywgdGRldi0+dGRfaXNfMzQxMCA/ICIzNDEwIiA6ICI1MDUyIik7CisJZGJnKCIlcyAtIGRldmljZSB0eXBlIGlzICVzIiwgX19mdW5jX18sCisJCQkJdGRldi0+dGRfaXNfMzQxMCA/ICIzNDEwIiA6ICI1MDUyIik7CiAKIAkvKiBpZiB3ZSBoYXZlIG9ubHkgMSBjb25maWd1cmF0aW9uLCBkb3dubG9hZCBmaXJtd2FyZSAqLwogCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zID09IDEpIHsKLQogCQlpZiAodGRldi0+dGRfaXNfMzQxMCkKLQkJCXN0YXR1cyA9IHRpX2Rvd25sb2FkX2Zpcm13YXJlKHRkZXYsICJ0aV8zNDEwLmZ3Iik7CisJCQlzdGF0dXMgPSB0aV9kb3dubG9hZF9maXJtd2FyZSh0ZGV2LCAzNDEwKTsKIAkJZWxzZQotCQkJc3RhdHVzID0gdGlfZG93bmxvYWRfZmlybXdhcmUodGRldiwgInRpXzUwNTIuZnciKTsKKwkJCXN0YXR1cyA9IHRpX2Rvd25sb2FkX2Zpcm13YXJlKHRkZXYsIDUwNTIpOwogCQlpZiAoc3RhdHVzKQogCQkJZ290byBmcmVlX3RkZXY7CiAKQEAgLTQ0Niw3ICs0NTUsNyBAQAogCiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gZnJlZV90ZGV2OwotCX0gCisJfQogCiAJLyogdGhlIHNlY29uZCBjb25maWd1cmF0aW9uIG11c3QgYmUgc2V0IChpbiBzeXNmcyBieSBob3RwbHVnIHNjcmlwdCkgKi8KIAlpZiAoZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9PSBUSV9CT09UX0NPTkZJRykgewpAQCAtNDYzLDcgKzQ3Miw4IEBACiAJCQlnb3RvIGZyZWVfdHBvcnRzOwogCQl9CiAJCXNwaW5fbG9ja19pbml0KCZ0cG9ydC0+dHBfbG9jayk7Ci0JCXRwb3J0LT50cF91YXJ0X2Jhc2VfYWRkciA9IChpID09IDAgPyBUSV9VQVJUMV9CQVNFX0FERFIgOiBUSV9VQVJUMl9CQVNFX0FERFIpOworCQl0cG9ydC0+dHBfdWFydF9iYXNlX2FkZHIgPSAoaSA9PSAwID8KKwkJCQlUSV9VQVJUMV9CQVNFX0FERFIgOiBUSV9VQVJUMl9CQVNFX0FERFIpOwogCQl0cG9ydC0+dHBfZmxhZ3MgPSBsb3dfbGF0ZW5jeSA/IEFTWU5DX0xPV19MQVRFTkNZIDogMDsKIAkJdHBvcnQtPnRwX2Nsb3Npbmdfd2FpdCA9IGNsb3Npbmdfd2FpdDsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmdHBvcnQtPnRwX21zcl93YWl0KTsKQEAgLTQ4MCwxMSArNDkwLDExIEBACiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIHRwb3J0KTsKIAkJdHBvcnQtPnRwX3VhcnRfbW9kZSA9IDA7CS8qIGRlZmF1bHQgaXMgUlMyMzIgKi8KIAl9Ci0JCisKIAlyZXR1cm4gMDsKIAogZnJlZV90cG9ydHM6Ci0JZm9yICgtLWk7IGk+PTA7IC0taSkgeworCWZvciAoLS1pOyBpID49IDA7IC0taSkgewogCQl0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOwogCQl0aV9idWZfZnJlZSh0cG9ydC0+dHBfd3JpdGVfYnVmKTsKIAkJa2ZyZWUodHBvcnQpOwpAQCAtNTA1LDcgKzUxNSw3IEBACiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCi0JZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKIAkJaWYgKHRwb3J0KSB7CiAJCQl0aV9idWZfZnJlZSh0cG9ydC0+dHBfd3JpdGVfYnVmKTsKQEAgLTUxOSw3ICs1MjksOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB0aV9kZXZpY2UgKnRkZXY7CkBAIC01MjcsOCArNTM4LDggQEAKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJaW50IHBvcnRfbnVtYmVyOwogCWludCBzdGF0dXM7Ci0JX191MTYgb3Blbl9zZXR0aW5ncyA9IChfX3U4KShUSV9QSVBFX01PREVfQ09OVElOT1VTIHwgCi0JCQkgICAgIFRJX1BJUEVfVElNRU9VVF9FTkFCTEUgfCAKKwlfX3UxNiBvcGVuX3NldHRpbmdzID0gKF9fdTgpKFRJX1BJUEVfTU9ERV9DT05USU5PVVMgfAorCQkJICAgICBUSV9QSVBFX1RJTUVPVVRfRU5BQkxFIHwKIAkJCSAgICAgKFRJX1RSQU5TRkVSX1RJTUVPVVQgPDwgMikpOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTU0Myw5ICs1NTQsOSBAQAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnRkZXYtPnRkX29wZW5fY2xvc2VfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlpZiAocG9ydC0+dHR5KQotCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gCi0JCQkodHBvcnQtPnRwX2ZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9CisJCQkJKHRwb3J0LT50cF9mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOwogCiAJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwogCkBAIC01NTksNyArNTcwLDggQEAKIAkJZGJnKCIlcyAtIHN0YXJ0IGludGVycnVwdCBpbiB1cmIiLCBfX2Z1bmNfXyk7CiAJCXVyYiA9IHRkZXYtPnRkX3NlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYjsKIAkJaWYgKCF1cmIpIHsKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gbm8gaW50ZXJydXB0IHVyYlxuIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBubyBpbnRlcnJ1cHQgdXJiXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CiAJCQlzdGF0dXMgPSAtRUlOVkFMOwogCQkJZ290byByZWxlYXNlX2xvY2s7CiAJCX0KQEAgLTU2OCwxOCArNTgwLDIyIEBACiAJCXVyYi0+ZGV2ID0gZGV2OwogCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHN1Ym1pdCBpbnRlcnJ1cHQgdXJiIGZhaWxlZCwgJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIHN1Ym1pdCBpbnRlcnJ1cHQgdXJiIGZhaWxlZCwgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQkJZ290byByZWxlYXNlX2xvY2s7CiAJCX0KIAl9CiAKLQl0aV9zZXRfdGVybWlvcyhwb3J0LCBwb3J0LT50dHktPnRlcm1pb3MpOworCWlmICh0dHkpCisJCXRpX3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgdHR5LT50ZXJtaW9zKTsKIAogCWRiZygiJXMgLSBzZW5kaW5nIFRJX09QRU5fUE9SVCIsIF9fZnVuY19fKTsKIAlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX09QRU5fUE9SVCwKIAkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIG9wZW5fc2V0dGluZ3MsIE5VTEwsIDApOwogCWlmIChzdGF0dXMpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBvcGVuIGNvbW1hbmQsICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBvcGVuIGNvbW1hbmQsICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlnb3RvIHVubGlua19pbnRfdXJiOwogCX0KIApAQCAtNTg3LDcgKzYwMyw4IEBACiAJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9TVEFSVF9QT1JULAogCQkoX191OCkoVElfVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgMCwgTlVMTCwgMCk7CiAJaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBzZW5kIHN0YXJ0IGNvbW1hbmQsICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBzdGFydCBjb21tYW5kLCAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byB1bmxpbmtfaW50X3VyYjsKIAl9CiAKQEAgLTU5NSwxMyArNjEyLDE1IEBACiAJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9QVVJHRV9QT1JULAogCQkoX191OCkoVElfVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgVElfUFVSR0VfSU5QVVQsIE5VTEwsIDApOwogCWlmIChzdGF0dXMpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3QgY2xlYXIgaW5wdXQgYnVmZmVycywgJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBjbGVhciBpbnB1dCBidWZmZXJzLCAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byB1bmxpbmtfaW50X3VyYjsKIAl9CiAJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9QVVJHRV9QT1JULAogCQkoX191OCkoVElfVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgVElfUFVSR0VfT1VUUFVULCBOVUxMLCAwKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IGNsZWFyIG91dHB1dCBidWZmZXJzLCAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IGNsZWFyIG91dHB1dCBidWZmZXJzLCAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byB1bmxpbmtfaW50X3VyYjsKIAl9CiAKQEAgLTYxMCwxMyArNjI5LDE1IEBACiAJdXNiX2NsZWFyX2hhbHQoZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOwogCXVzYl9jbGVhcl9oYWx0KGRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOwogCi0JdGlfc2V0X3Rlcm1pb3MocG9ydCwgcG9ydC0+dHR5LT50ZXJtaW9zKTsKKwlpZiAodHR5KQorCQl0aV9zZXRfdGVybWlvcyh0dHksIHBvcnQsIHR0eS0+dGVybWlvcyk7CiAKIAlkYmcoIiVzIC0gc2VuZGluZyBUSV9PUEVOX1BPUlQgKDIpIiwgX19mdW5jX18pOwogCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfT1BFTl9QT1JULAogCQkoX191OCkoVElfVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgb3Blbl9zZXR0aW5ncywgTlVMTCwgMCk7CiAJaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBzZW5kIG9wZW4gY29tbWFuZCAoMiksICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBvcGVuIGNvbW1hbmQgKDIpLCAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byB1bmxpbmtfaW50X3VyYjsKIAl9CiAKQEAgLTYyNCw3ICs2NDUsOCBAQAogCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfU1RBUlRfUE9SVCwKIAkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIDAsIE5VTEwsIDApOwogCWlmIChzdGF0dXMpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBzdGFydCBjb21tYW5kICgyKSwgJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBzZW5kIHN0YXJ0IGNvbW1hbmQgKDIpLCAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byB1bmxpbmtfaW50X3VyYjsKIAl9CiAKQEAgLTY0Miw3ICs2NjQsOCBAQAogCXVyYi0+ZGV2ID0gZGV2OwogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHN1Ym1pdCByZWFkIHVyYiBmYWlsZWQsICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLCAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byB1bmxpbmtfaW50X3VyYjsKIAl9CiAKQEAgLTY2MSw3ICs2ODQsOCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHRpX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQgdGlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2OwogCXN0cnVjdCB0aV9wb3J0ICp0cG9ydDsKQEAgLTY3MCw3ICs2OTQsNyBAQAogCWludCBkb191bmxvY2s7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCQkJIAorCiAJdGRldiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAl0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpZiAodGRldiA9PSBOVUxMIHx8IHRwb3J0ID09IE5VTEwpCkBAIC02OTAsNyArNzE0LDkgQEAKIAlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX0NMT1NFX1BPUlQsCiAJCSAgICAgKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIDAsIE5VTEwsIDApOwogCWlmIChzdGF0dXMpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNlbmQgY2xvc2UgcG9ydCBjb21tYW5kLCAlZFxuIiAsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBjYW5ub3Qgc2VuZCBjbG9zZSBwb3J0IGNvbW1hbmQsICVkXG4iCisJCQkJCQkJLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCS8qIGlmIG11dGV4X2xvY2sgaXMgaW50ZXJydXB0ZWQsIGNvbnRpbnVlIGFueXdheSAqLwogCWRvX3VubG9jayA9ICFtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnRkZXYtPnRkX29wZW5fY2xvc2VfbG9jayk7CkBAIC03MDcsOCArNzMzLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHRpX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0JaW50IGNvdW50KQorc3RhdGljIGludCB0aV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KQogewogCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzMzLDggKzc1OSw5IEBACiB9CiAKIAotc3RhdGljIGludCB0aV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHRpX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IHJvb20gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NDMsNyArNzcwLDcgQEAKIAogCWlmICh0cG9ydCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQkKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOwogCXJvb20gPSB0aV9idWZfc3BhY2VfYXZhaWwodHBvcnQtPnRwX3dyaXRlX2J1Zik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKQEAgLTc1Myw4ICs3ODAsOSBAQAogfQogCiAKLXN0YXRpYyBpbnQgdGlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHRpX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgY2hhcnMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NzMsMzIgKzgwMSwyNiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHRpX3Rocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCB0aV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCWlmICh0cG9ydCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT50dHk7Ci0JaWYgKCF0dHkpIHsKLQkJZGJnKCIlcyAtIG5vIHR0eSIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChJX0lYT0ZGKHR0eSkgfHwgQ19DUlRTQ1RTKHR0eSkpCiAJCXRpX3N0b3BfcmVhZCh0cG9ydCwgdHR5KTsKIAogfQogCiAKLXN0YXRpYyB2b2lkIHRpX3VudGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHRpX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgc3RhdHVzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTgwNiwyMyArODI4LDE5IEBACiAJaWYgKHRwb3J0ID09IE5VTEwpCiAJCXJldHVybjsKIAotCXR0eSA9IHBvcnQtPnR0eTsKLQlpZiAoIXR0eSkgewotCQlkYmcoIiVzIC0gbm8gdHR5IiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCiAJaWYgKElfSVhPRkYodHR5KSB8fCBDX0NSVFNDVFModHR5KSkgewogCQlzdGF0dXMgPSB0aV9yZXN0YXJ0X3JlYWQodHBvcnQsIHR0eSk7CiAJCWlmIChzdGF0dXMpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCByZXN0YXJ0IHJlYWQsICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHJlc3RhcnQgcmVhZCwgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJfQogfQogCiAKLXN0YXRpYyBpbnQgdGlfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IHRpX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNub3c7CiAJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldjsKQEAgLTgzMyw1NSArODUxLDUyIEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBUSU9DR1NFUklBTDoKLQkJCWRiZygiJXMgLSAoJWQpIFRJT0NHU0VSSUFMIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JCQlyZXR1cm4gdGlfZ2V0X3NlcmlhbF9pbmZvKHRwb3J0LCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopYXJnKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVElPQ1NTRVJJQUw6Ci0JCQlkYmcoIiVzIC0gKCVkKSBUSU9DU1NFUklBTCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCQkJcmV0dXJuIHRpX3NldF9zZXJpYWxfaW5mbyh0cG9ydCwgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKWFyZyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFRJT0NNSVdBSVQ6Ci0JCQlkYmcoIiVzIC0gKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JCQljcHJldiA9IHRwb3J0LT50cF9pY291bnQ7Ci0JCQl3aGlsZSAoMSkgewotCQkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnRwb3J0LT50cF9tc3Jfd2FpdCk7Ci0JCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQkJCWNub3cgPSB0cG9ydC0+dHBfaWNvdW50OwotCQkJCWlmIChjbm93LnJuZyA9PSBjcHJldi5ybmcgJiYgY25vdy5kc3IgPT0gY3ByZXYuZHNyICYmCi0JCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpCi0JCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KLQkJCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAotCQkJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8Ci0JCQkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKLQkJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSApIHsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJCWNwcmV2ID0gY25vdzsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgVElPQ0dJQ09VTlQ6Ci0JCQlkYmcoIiVzIC0gKCVkKSBUSU9DR0lDT1VOVCBSWD0lZCwgVFg9JWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCB0cG9ydC0+dHBfaWNvdW50LnJ4LCB0cG9ydC0+dHBfaWNvdW50LnR4KTsKLQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdHBvcnQtPnRwX2ljb3VudCwgc2l6ZW9mKHRwb3J0LT50cF9pY291bnQpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOworCWNhc2UgVElPQ0dTRVJJQUw6CisJCWRiZygiJXMgLSAoJWQpIFRJT0NHU0VSSUFMIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiB0aV9nZXRfc2VyaWFsX2luZm8odHBvcnQsCisJCQkJKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKWFyZyk7CisJY2FzZSBUSU9DU1NFUklBTDoKKwkJZGJnKCIlcyAtICglZCkgVElPQ1NTRVJJQUwiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJcmV0dXJuIHRpX3NldF9zZXJpYWxfaW5mbyh0cG9ydCwKKwkJCQkJKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKWFyZyk7CisJY2FzZSBUSU9DTUlXQUlUOgorCQlkYmcoIiVzIC0gKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCWNwcmV2ID0gdHBvcnQtPnRwX2ljb3VudDsKKwkJd2hpbGUgKDEpIHsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnRwb3J0LT50cF9tc3Jfd2FpdCk7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCWNub3cgPSB0cG9ydC0+dHBfaWNvdW50OworCQkJaWYgKGNub3cucm5nID09IGNwcmV2LnJuZyAmJiBjbm93LmRzciA9PSBjcHJldi5kc3IgJiYKKwkJCSAgICBjbm93LmRjZCA9PSBjcHJldi5kY2QgJiYgY25vdy5jdHMgPT0gY3ByZXYuY3RzKQorCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KKwkJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAorCQkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKKwkJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNub3cuY3RzICE9IGNwcmV2LmN0cykpKQorCQkJCXJldHVybiAwOworCQkJY3ByZXYgPSBjbm93OworCQl9CisJCWJyZWFrOworCWNhc2UgVElPQ0dJQ09VTlQ6CisJCWRiZygiJXMgLSAoJWQpIFRJT0NHSUNPVU5UIFJYPSVkLCBUWD0lZCIsCisJCQkJX19mdW5jX18sIHBvcnQtPm51bWJlciwKKwkJCQl0cG9ydC0+dHBfaWNvdW50LnJ4LCB0cG9ydC0+dHBfaWNvdW50LnR4KTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ0cG9ydC0+dHBfaWNvdW50LAorCQkJCQlzaXplb2YodHBvcnQtPnRwX2ljb3VudCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CiAKIAotc3RhdGljIHZvaWQgdGlfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgdGlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKIAlzdHJ1Y3QgdGlfdWFydF9jb25maWcgKmNvbmZpZzsKLQl0Y2ZsYWdfdCBjZmxhZyxpZmxhZzsKKwl0Y2ZsYWdfdCBjZmxhZywgaWZsYWc7CiAJaW50IGJhdWQ7CiAJaW50IHN0YXR1czsKIAlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwpAQCAtODkzLDcgKzkwOCw4IEBACiAJaWZsYWcgPSB0dHktPnRlcm1pb3MtPmNfaWZsYWc7CiAKIAlkYmcoIiVzIC0gY2ZsYWcgJTA4eCwgaWZsYWcgJTA4eCIsIF9fZnVuY19fLCBjZmxhZywgaWZsYWcpOwotCWRiZygiJXMgLSBvbGQgY2xmYWcgJTA4eCwgb2xkIGlmbGFnICUwOHgiLCBfX2Z1bmNfXywgb2xkX3Rlcm1pb3MtPmNfY2ZsYWcsIG9sZF90ZXJtaW9zLT5jX2lmbGFnKTsKKwlkYmcoIiVzIC0gb2xkIGNsZmFnICUwOHgsIG9sZCBpZmxhZyAlMDh4IiwgX19mdW5jX18sCisJCQkJb2xkX3Rlcm1pb3MtPmNfY2ZsYWcsIG9sZF90ZXJtaW9zLT5jX2lmbGFnKTsKIAogCWlmICh0cG9ydCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC05MTIsMTkgKzkyOCwxOSBAQAogCWNvbmZpZy0+YlVhcnRNb2RlID0gKF9fdTgpKHRwb3J0LT50cF91YXJ0X21vZGUpOwogCiAJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7Ci0JCWNhc2UgQ1M1OgotCQkJICAgIGNvbmZpZy0+YkRhdGFCaXRzID0gVElfVUFSVF81X0RBVEFfQklUUzsKLQkJCSAgICBicmVhazsKLQkJY2FzZSBDUzY6Ci0JCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBUSV9VQVJUXzZfREFUQV9CSVRTOwotCQkJICAgIGJyZWFrOwotCQljYXNlIENTNzoKLQkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFRJX1VBUlRfN19EQVRBX0JJVFM7Ci0JCQkgICAgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgQ1M4OgotCQkJICAgIGNvbmZpZy0+YkRhdGFCaXRzID0gVElfVUFSVF84X0RBVEFfQklUUzsKLQkJCSAgICBicmVhazsKKwljYXNlIENTNToKKwkJICAgIGNvbmZpZy0+YkRhdGFCaXRzID0gVElfVUFSVF81X0RBVEFfQklUUzsKKwkJICAgIGJyZWFrOworCWNhc2UgQ1M2OgorCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBUSV9VQVJUXzZfREFUQV9CSVRTOworCQkgICAgYnJlYWs7CisJY2FzZSBDUzc6CisJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFRJX1VBUlRfN19EQVRBX0JJVFM7CisJCSAgICBicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgQ1M4OgorCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBUSV9VQVJUXzhfREFUQV9CSVRTOworCQkgICAgYnJlYWs7CiAJfQogCiAJLyogQ01TUEFSIGlzbid0IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciAqLwpAQCAtOTQwLDcgKzk1Niw3IEBACiAJCX0KIAl9IGVsc2UgewogCQljb25maWctPndGbGFncyAmPSB+VElfVUFSVF9FTkFCTEVfUEFSSVRZX0NIRUNLSU5HOwotCQljb25maWctPmJQYXJpdHkgPSBUSV9VQVJUX05PX1BBUklUWTsgCQorCQljb25maWctPmJQYXJpdHkgPSBUSV9VQVJUX05PX1BBUklUWTsKIAl9CiAKIAlpZiAoY2ZsYWcgJiBDU1RPUEIpCkBAIC05OTMsNyArMTAwOSw4IEBACiAJCShfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCAwLCAoX191OCAqKWNvbmZpZywKIAkJc2l6ZW9mKCpjb25maWcpKTsKIAlpZiAoc3RhdHVzKQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBzZXQgY29uZmlnIG9uIHBvcnQgJWQsICVkXG4iLCBfX2Z1bmNfXywgcG9ydF9udW1iZXIsIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNldCBjb25maWcgb24gcG9ydCAlZCwgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBwb3J0X251bWJlciwgc3RhdHVzKTsKIAogCS8qIFNFVF9DT05GSUcgYXNzZXJ0cyBSVFMgYW5kIERUUiwgcmVzZXQgdGhlbSBjb3JyZWN0bHkgKi8KIAltY3IgPSB0cG9ydC0+dHBfc2hhZG93X21jcjsKQEAgLTEwMDIsMTQgKzEwMTksMTcgQEAKIAkJbWNyICY9IH4oVElfTUNSX0RUUiB8IFRJX01DUl9SVFMpOwogCXN0YXR1cyA9IHRpX3NldF9tY3IodHBvcnQsIG1jcik7CiAJaWYgKHN0YXR1cykKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2V0IG1vZGVtIGNvbnRyb2wgb24gcG9ydCAlZCwgJWRcbiIsIF9fZnVuY19fLCBwb3J0X251bWJlciwgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gY2Fubm90IHNldCBtb2RlbSBjb250cm9sIG9uIHBvcnQgJWQsICVkXG4iLAorCQkJCQkJX19mdW5jX18sIHBvcnRfbnVtYmVyLCBzdGF0dXMpOwogCiAJa2ZyZWUoY29uZmlnKTsKIH0KIAogCi1zdGF0aWMgaW50IHRpX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCB0aV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBpbnQgbXNyOwpAQCAtMTA0MCw5ICsxMDYwLDEwIEBACiB9CiAKIAotc3RhdGljIGludCB0aV90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgdGlfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBpbnQgbWNyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDc0LDggKzEwOTUsOSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHRpX2JyZWFrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyB2b2lkIHRpX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IHN0YXR1czsKIApAQCAtMTE0MSwxMCArMTE2MywxMiBAQAogCXBvcnRfbnVtYmVyID0gVElfR0VUX1BPUlRfRlJPTV9DT0RFKGRhdGFbMF0pOwogCWZ1bmN0aW9uID0gVElfR0VUX0ZVTkNfRlJPTV9DT0RFKGRhdGFbMF0pOwogCi0JZGJnKCIlcyAtIHBvcnRfbnVtYmVyICVkLCBmdW5jdGlvbiAlZCwgZGF0YSAweCUwMlgiLCBfX2Z1bmNfXywgcG9ydF9udW1iZXIsIGZ1bmN0aW9uLCBkYXRhWzFdKTsKKwlkYmcoIiVzIC0gcG9ydF9udW1iZXIgJWQsIGZ1bmN0aW9uICVkLCBkYXRhIDB4JTAyWCIsCisJCQkJX19mdW5jX18sIHBvcnRfbnVtYmVyLCBmdW5jdGlvbiwgZGF0YVsxXSk7CiAKIAlpZiAocG9ydF9udW1iZXIgPj0gc2VyaWFsLT5udW1fcG9ydHMpIHsKLQkJZGV2X2VycihkZXYsICIlcyAtIGJhZCBwb3J0IG51bWJlciwgJWRcbiIsIF9fZnVuY19fLCBwb3J0X251bWJlcik7CisJCWRldl9lcnIoZGV2LCAiJXMgLSBiYWQgcG9ydCBudW1iZXIsICVkXG4iLAorCQkJCQkJX19mdW5jX18sIHBvcnRfbnVtYmVyKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTE1Niw3ICsxMTgwLDggQEAKIAogCXN3aXRjaCAoZnVuY3Rpb24pIHsKIAljYXNlIFRJX0NPREVfREFUQV9FUlJPUjoKLQkJZGV2X2VycihkZXYsICIlcyAtIERBVEEgRVJST1IsIHBvcnQgJWQsIGRhdGEgMHglMDJYXG4iLCBfX2Z1bmNfXywgcG9ydF9udW1iZXIsIGRhdGFbMV0pOworCQlkZXZfZXJyKGRldiwgIiVzIC0gREFUQSBFUlJPUiwgcG9ydCAlZCwgZGF0YSAweCUwMlhcbiIsCisJCQkJCV9fZnVuY19fLCBwb3J0X251bWJlciwgZGF0YVsxXSk7CiAJCWJyZWFrOwogCiAJY2FzZSBUSV9DT0RFX01PREVNX1NUQVRVUzoKQEAgLTExNjYsNyArMTE5MSw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZGV2X2VycihkZXYsICIlcyAtIHVua25vd24gaW50ZXJydXB0IGNvZGUsIDB4JTAyWFxuIiwgX19mdW5jX18sIGRhdGFbMV0pOworCQlkZXZfZXJyKGRldiwgIiVzIC0gdW5rbm93biBpbnRlcnJ1cHQgY29kZSwgMHglMDJYXG4iLAorCQkJCQkJCV9fZnVuY19fLCBkYXRhWzFdKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMjAwLDcgKzEyMjYsNyBAQAogCQlyZXR1cm47CiAJZGVmYXVsdDoKIAkJZGV2X2VycihkZXYsICIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cywgJWRcbiIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzICk7CisJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJdHBvcnQtPnRwX3RkZXYtPnRkX3VyYl9lcnJvciA9IDE7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHBvcnQtPnRwX3dyaXRlX3dhaXQpOwogCX0KQEAgLTEyMTMsMTUgKzEyMzksMTYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChwb3J0LT50dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJaWYgKHBvcnQtPnBvcnQudHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsIGRldiwgX19mdW5jX18sCiAJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAogCQlpZiAoIXRwb3J0LT50cF9pc19vcGVuKQogCQkJZGJnKCIlcyAtIHBvcnQgY2xvc2VkLCBkcm9wcGluZyBkYXRhIiwgX19mdW5jX18pOwogCQllbHNlCi0JCQl0aV9yZWN2KCZ1cmItPmRldi0+ZGV2LCBwb3J0LT50dHksIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQl0aV9yZWN2KCZ1cmItPmRldi0+ZGV2LCBwb3J0LT5wb3J0LnR0eSwKKwkJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAogCQlzcGluX2xvY2soJnRwb3J0LT50cF9sb2NrKTsKIAkJdHBvcnQtPnRwX2ljb3VudC5yeCArPSB1cmItPmFjdHVhbF9sZW5ndGg7CkBAIC0xMjg1LDggKzEzMTIsOSBAQAogCWRvIHsKIAkJY250ID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW5ndGgpOwogCQlpZiAoY250IDwgbGVuZ3RoKSB7Ci0JCQlkZXZfZXJyKGRldiwgIiVzIC0gZHJvcHBpbmcgZGF0YSwgJWQgYnl0ZXMgbG9zdFxuIiwgX19mdW5jX18sIGxlbmd0aCAtIGNudCk7Ci0JCQlpZihjbnQgPT0gMCkKKwkJCWRldl9lcnIoZGV2LCAiJXMgLSBkcm9wcGluZyBkYXRhLCAlZCBieXRlcyBsb3N0XG4iLAorCQkJCQkJX19mdW5jX18sIGxlbmd0aCAtIGNudCk7CisJCQlpZiAoY250ID09IDApCiAJCQkJYnJlYWs7CiAJCX0KIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIGNudCk7CkBAIC0xMzAyLDcgKzEzMzAsNyBAQAogewogCWludCBjb3VudCwgcmVzdWx0OwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LnR0eTsJLyogRklYTUUgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAKQEAgLTEzMjgsNyArMTM1Niw4IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOwogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwKKwkJCQkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCiAJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKIAkJCSAgIHVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKQEAgLTEzMzgsOCArMTM2Nyw5IEBACiAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBzdWJtaXQgd3JpdGUgdXJiIGZhaWxlZCwgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwotCQl0cG9ydC0+dHBfd3JpdGVfdXJiX2luX3VzZSA9IDA7IAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHN1Ym1pdCB3cml0ZSB1cmIgZmFpbGVkLCAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJdHBvcnQtPnRwX3dyaXRlX3VyYl9pbl91c2UgPSAwOwogCQkvKiBUT0RPOiByZXNjaGVkdWxlIHRpX3NlbmQgKi8KIAl9IGVsc2UgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKQEAgLTEzNzQsNyArMTQwNCw3IEBACiAKIHN0YXRpYyBpbnQgdGlfZ2V0X2xzcihzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQpCiB7Ci0JaW50IHNpemUsc3RhdHVzOworCWludCBzaXplLCBzdGF0dXM7CiAJc3RydWN0IHRpX2RldmljZSAqdGRldiA9IHRwb3J0LT50cF90ZGV2OwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKIAlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwpAQCAtMTM5Miw3ICsxNDIyLDkgQEAKIAlzdGF0dXMgPSB0aV9jb21tYW5kX2luX3N5bmModGRldiwgVElfR0VUX1BPUlRfU1RBVFVTLAogCQkoX191OCkoVElfVUFSVDFfUE9SVCtwb3J0X251bWJlciksIDAsIChfX3U4ICopZGF0YSwgc2l6ZSk7CiAJaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGdldCBwb3J0IHN0YXR1cyBjb21tYW5kIGZhaWxlZCwgJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBnZXQgcG9ydCBzdGF0dXMgY29tbWFuZCBmYWlsZWQsICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlnb3RvIGZyZWVfZGF0YTsKIAl9CiAKQEAgLTE0NDIsOCArMTQ3NCw5IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJdHBvcnQtPnRwX2ZsYWdzID0gbmV3X3NlcmlhbC5mbGFncyAmIFRJX1NFVF9TRVJJQUxfRkxBR1M7Ci0JaWYgKHBvcnQtPnR0eSkKLQkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9CisJLyogRklYTUUgKi8KKwlpZiAocG9ydC0+cG9ydC50dHkpCisJCXBvcnQtPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9CiAJCQkodHBvcnQtPnRwX2ZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CiAJdHBvcnQtPnRwX2Nsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0OwogCkBAIC0xNDc3LDcgKzE1MTAsNyBAQAogCXRwb3J0LT50cF9tc3IgPSBtc3IgJiBUSV9NU1JfTUFTSzsKIAogCS8qIGhhbmRsZSBDVFMgZmxvdyBjb250cm9sICovCi0JdHR5ID0gdHBvcnQtPnRwX3BvcnQtPnR0eTsKKwl0dHkgPSB0cG9ydC0+dHBfcG9ydC0+cG9ydC50dHk7CiAJaWYgKHR0eSAmJiBDX0NSVFNDVFModHR5KSkgewogCQlpZiAobXNyICYgVElfTVNSX0NUUykgewogCQkJdHR5LT5od19zdG9wcGVkID0gMDsKQEAgLTE2MjcsNyArMTY2MCw4IEBACiAJc3RydWN0IHRpX3dyaXRlX2RhdGFfYnl0ZXMgKmRhdGE7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnRkZXYtPnRkX3NlcmlhbC0+ZGV2LT5kZXY7CiAKLQlkYmcoIiVzIC0gYWRkciAweCUwOGxYLCBtYXNrIDB4JTAyWCwgYnl0ZSAweCUwMlgiLCBfX2Z1bmNfXywgYWRkciwgbWFzaywgYnl0ZSk7CisJZGJnKCIlcyAtIGFkZHIgMHglMDhsWCwgbWFzayAweCUwMlgsIGJ5dGUgMHglMDJYIiwKKwkJCQkJX19mdW5jX18sIGFkZHIsIG1hc2ssIGJ5dGUpOwogCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGlfd3JpdGVfZGF0YV9ieXRlcykgKyAyOwogCWRhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwpAQCAtMTY1NSw2NyArMTY4OSw2OCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLQotc3RhdGljIGludCB0aV9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LAotCQkJCWNoYXIgKmZ3X25hbWUpCitzdGF0aWMgaW50IHRpX2RvX2Rvd25sb2FkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBwaXBlLAorCQkJCQkJdTggKmJ1ZmZlciwgaW50IHNpemUpCiB7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKLQlpbnQgc3RhdHVzID0gMDsKLQlpbnQgYnVmZmVyX3NpemU7CiAJaW50IHBvczsKLQlpbnQgbGVuOworCXU4IGNzID0gMDsKIAlpbnQgZG9uZTsKLQlfX3U4IGNzID0gMDsKLQlfX3U4ICpidWZmZXI7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHRkZXYtPnRkX3NlcmlhbC0+ZGV2OwogCXN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIgKmhlYWRlcjsKLQl1bnNpZ25lZCBpbnQgcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXYsCi0JCXRkZXYtPnRkX3NlcmlhbC0+cG9ydFswXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKTsKKwlpbnQgc3RhdHVzOworCWludCBsZW47CiAKLQlidWZmZXJfc2l6ZSA9IFRJX0ZJUk1XQVJFX0JVRl9TSVpFICsgc2l6ZW9mKHN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIpOwotCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19uYW1lLCAmZGV2LT5kZXYpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCi0JCQlfX2Z1bmNfXywgZndfbmFtZSk7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQlpZiAoZnctPnNpemUgPiBidWZmZXJfc2l6ZSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gZmlybXdhcmUgXCIlc1wiIGlzIHRvbyBsYXJnZVxuIiwKLQkJCV9fZnVuY19fLCBmd19uYW1lKTsKLQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1jcHkoYnVmZmVyLCBmdy0+ZGF0YSwgZnctPnNpemUpOwotCW1lbXNldChidWZmZXIrZnctPnNpemUsIDB4ZmYsIGJ1ZmZlcl9zaXplLWZ3LT5zaXplKTsKLQotCWZvcihwb3MgPSBzaXplb2Yoc3RydWN0IHRpX2Zpcm13YXJlX2hlYWRlcik7IHBvcyA8IGJ1ZmZlcl9zaXplOyBwb3MrKykKKwlmb3IgKHBvcyA9IHNpemVvZihzdHJ1Y3QgdGlfZmlybXdhcmVfaGVhZGVyKTsgcG9zIDwgc2l6ZTsgcG9zKyspCiAJCWNzID0gKF9fdTgpKGNzICsgYnVmZmVyW3Bvc10pOwogCiAJaGVhZGVyID0gKHN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIgKilidWZmZXI7Ci0JaGVhZGVyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoKF9fdTE2KShidWZmZXJfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgdGlfZmlybXdhcmVfaGVhZGVyKSkpOworCWhlYWRlci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KChfX3UxNikoc2l6ZQorCQkJCQktIHNpemVvZihzdHJ1Y3QgdGlfZmlybXdhcmVfaGVhZGVyKSkpOwogCWhlYWRlci0+YkNoZWNrU3VtID0gY3M7CiAKIAlkYmcoIiVzIC0gZG93bmxvYWRpbmcgZmlybXdhcmUiLCBfX2Z1bmNfXyk7Ci0JZm9yIChwb3MgPSAwOyBwb3MgPCBidWZmZXJfc2l6ZTsgcG9zICs9IGRvbmUpIHsKLQkJbGVuID0gbWluKGJ1ZmZlcl9zaXplIC0gcG9zLCBUSV9ET1dOTE9BRF9NQVhfUEFDS0VUX1NJWkUpOwotCQlzdGF0dXMgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCBidWZmZXIrcG9zLCBsZW4sICZkb25lLCAxMDAwKTsKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IHNpemU7IHBvcyArPSBkb25lKSB7CisJCWxlbiA9IG1pbihzaXplIC0gcG9zLCBUSV9ET1dOTE9BRF9NQVhfUEFDS0VUX1NJWkUpOworCQlzdGF0dXMgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCBidWZmZXIgKyBwb3MsIGxlbiwKKwkJCQkJCQkJJmRvbmUsIDEwMDApOwogCQlpZiAoc3RhdHVzKQogCQkJYnJlYWs7CiAJfQorCXJldHVybiBzdGF0dXM7Cit9CiAKLQlrZnJlZShidWZmZXIpOwotCXJlbGVhc2VfZmlybXdhcmUoZncpOworc3RhdGljIGludCB0aV9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCBpbnQgdHlwZSkKK3sKKwlpbnQgc3RhdHVzID0gLUVOT01FTTsKKwlpbnQgYnVmZmVyX3NpemU7CisJX191OCAqYnVmZmVyOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB0ZGV2LT50ZF9zZXJpYWwtPmRldjsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXYsCisJCXRkZXYtPnRkX3NlcmlhbC0+cG9ydFswXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X3A7CisJY2hhciBidWZbMzJdOworCXNwcmludGYoYnVmLCAidGlfdXNiLSVkLmJpbiIsIHR5cGUpOwogCisJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X3AsIGJ1ZiwgJmRldi0+ZGV2KSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gZmlybXdhcmUgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlpZiAoZndfcC0+c2l6ZSA+IFRJX0ZJUk1XQVJFX0JVRl9TSVpFKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBmaXJtd2FyZSB0b28gbGFyZ2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJYnVmZmVyX3NpemUgPSBUSV9GSVJNV0FSRV9CVUZfU0laRSArIHNpemVvZihzdHJ1Y3QgdGlfZmlybXdhcmVfaGVhZGVyKTsKKwlidWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmZmVyKSB7CisJCW1lbWNweShidWZmZXIsIGZ3X3AtPmRhdGEsIGZ3X3AtPnNpemUpOworCQltZW1zZXQoYnVmZmVyICsgZndfcC0+c2l6ZSwgMHhmZiwgYnVmZmVyX3NpemUgLSBmd19wLT5zaXplKTsKKwkJdGlfZG9fZG93bmxvYWQoZGV2LCBwaXBlLCBidWZmZXIsIGZ3X3AtPnNpemUpOworCQlrZnJlZShidWZmZXIpOworCX0KKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X3ApOwogCWlmIChzdGF0dXMpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIGVycm9yIGRvd25sb2FkaW5nIGZpcm13YXJlLCAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBlcnJvciBkb3dubG9hZGluZyBmaXJtd2FyZSwgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC0xNzg3LDcgKzE4MjIsNyBAQAogCiBzdGF0aWMgaW50IHRpX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBjaXJjX2J1ZiAqY2IpCiB7Ci0JcmV0dXJuIENJUkNfQ05UKGNiLT5oZWFkLGNiLT50YWlsLFRJX1dSSVRFX0JVRl9TSVpFKTsKKwlyZXR1cm4gQ0lSQ19DTlQoY2ItPmhlYWQsIGNiLT50YWlsLCBUSV9XUklURV9CVUZfU0laRSk7CiB9CiAKIApAQCAtMTgwMCw3ICsxODM1LDcgQEAKIAogc3RhdGljIGludCB0aV9idWZfc3BhY2VfYXZhaWwoc3RydWN0IGNpcmNfYnVmICpjYikKIHsKLQlyZXR1cm4gQ0lSQ19TUEFDRShjYi0+aGVhZCxjYi0+dGFpbCxUSV9XUklURV9CVUZfU0laRSk7CisJcmV0dXJuIENJUkNfU1BBQ0UoY2ItPmhlYWQsIGNiLT50YWlsLCBUSV9XUklURV9CVUZfU0laRSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggMGNiMGQ3Ny4uOGMyZDUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0xMiw3ICsxMiw4IEBACiAgKiBUaGlzIGRyaXZlciB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiB0aGUgQUNNIGRyaXZlciBieSBBcm1pbiBGdWVyc3QgKHdoaWNoIHdhcwogICogYmFzZWQgb24gYSBkcml2ZXIgYnkgQnJhZCBLZXJ5YW4pCiAgKgotICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcworICogZHJpdmVyCiAgKgogICovCiAKQEAgLTI4LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlICJwbDIzMDMuaCIKQEAgLTU5LDcgKzYwLDggQEAKICovCiAKIHN0YXRpYyBpbnQgZGVidWc7Ci1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbF90YWJsZVtTRVJJQUxfVFRZX01JTk9SU107CS8qIGluaXRpYWxseSBhbGwgTlVMTCAqLworLyogaW5pdGlhbGx5IGFsbCBOVUxMICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbF90YWJsZVtTRVJJQUxfVFRZX01JTk9SU107CiBzdGF0aWMgREVGSU5FX01VVEVYKHRhYmxlX2xvY2spOwogc3RhdGljIExJU1RfSEVBRCh1c2Jfc2VyaWFsX2RyaXZlcl9saXN0KTsKIApAQCAtNzYsNyArNzgsOCBAQAogCXJldHVybiBzZXJpYWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqZ2V0X2ZyZWVfc2VyaWFsIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBpbnQgbnVtX3BvcnRzLCB1bnNpZ25lZCBpbnQgKm1pbm9yKQorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpnZXRfZnJlZV9zZXJpYWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkJaW50IG51bV9wb3J0cywgdW5zaWduZWQgaW50ICptaW5vcikKIHsKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAlpbnQgZ29vZF9zcG90OwpAQCAtMTIyLDkgKzEyNSw4IEBACiAJaWYgKHNlcmlhbCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQogCQlzZXJpYWxfdGFibGVbc2VyaWFsLT5taW5vciArIGldID0gTlVMTDsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfc2VyaWFsKHN0cnVjdCBrcmVmICprcmVmKQpAQCAtMTQzLDcgKzE0NSw3IEBACiAJcmV0dXJuX3NlcmlhbChzZXJpYWwpOwogCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpCi0JCXNlcmlhbC0+cG9ydFtpXS0+b3Blbl9jb3VudCA9IDA7CisJCXNlcmlhbC0+cG9ydFtpXS0+cG9ydC5jb3VudCA9IDA7CiAKIAkvKiB0aGUgcG9ydHMgYXJlIGNsZWFuZWQgdXAgYW5kIHJlbGVhc2VkIGluIHBvcnRfcmVsZWFzZSgpICovCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpCkBAIC0xNTYsNyArMTU4LDggQEAKIAkgKiBub3QgZ2V0IGNsZWFuZWQgdXAgaW4gcG9ydF9yZWxlYXNlKCkgYXMgaXQgd2FzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aAogCSAqIHRoZSBkcml2ZXIgY29yZSAqLwogCWlmIChzZXJpYWwtPm51bV9wb3J0cyA8IHNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnMpIHsKLQkJZm9yIChpID0gc2VyaWFsLT5udW1fcG9ydHM7IGkgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzOyArK2kpIHsKKwkJZm9yIChpID0gc2VyaWFsLT5udW1fcG9ydHM7CisJCQkJCWkgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzOyArK2kpIHsKIAkJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCQlpZiAoIXBvcnQpCiAJCQkJY29udGludWU7CkBAIC0xNjcsNyArMTcwLDcgQEAKIAl1c2JfcHV0X2RldihzZXJpYWwtPmRldik7CiAKIAkvKiBmcmVlIHVwIGFueSBtZW1vcnkgdGhhdCB3ZSBhbGxvY2F0ZWQgKi8KLQlrZnJlZSAoc2VyaWFsKTsKKwlrZnJlZShzZXJpYWwpOwogfQogCiB2b2lkIHVzYl9zZXJpYWxfcHV0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCkBAIC0xODAsMTMgKzE4MywxMyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBEcml2ZXIgdHR5IGludGVyZmFjZSBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgc2VyaWFsX29wZW4gKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKK3N0YXRpYyBpbnQgc2VyaWFsX29wZW4gKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKIAl1bnNpZ25lZCBpbnQgcG9ydE51bWJlcjsKIAlpbnQgcmV0dmFsOwotCQorCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCS8qIGdldCB0aGUgc2VyaWFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dHkgcG9pbnRlciAqLwpAQCAtMjA3LDE1ICsyMTAsMTUgQEAKIAkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CiAJfQotCSAKLQkrK3BvcnQtPm9wZW5fY291bnQ7CisKKwkrK3BvcnQtPnBvcnQuY291bnQ7CiAKIAkvKiBzZXQgdXAgb3VyIHBvcnQgc3RydWN0dXJlIG1ha2luZyB0aGUgdHR5IGRyaXZlcgogCSAqIHJlbWVtYmVyIG91ciBwb3J0IG9iamVjdCwgYW5kIHVzIGl0ICovCiAJdHR5LT5kcml2ZXJfZGF0YSA9IHBvcnQ7Ci0JcG9ydC0+dHR5ID0gdHR5OworCXBvcnQtPnBvcnQudHR5ID0gdHR5OwogCi0JaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMSkgeworCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDEpIHsKIAogCQkvKiBsb2NrIHRoaXMgbW9kdWxlIGJlZm9yZSB3ZSBjYWxsIGl0CiAJCSAqIHRoaXMgbWF5IGZhaWwsIHdoaWNoIG1lYW5zIHdlIG11c3QgYmFpbCBvdXQsCkBAIC0yMjgsOSArMjMxLDkgQEAKIAkJcmV0dmFsID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKIAkJaWYgKHJldHZhbCkKIAkJCWdvdG8gYmFpbG91dF9tb2R1bGVfcHV0OwotCQkvKiBvbmx5IGNhbGwgdGhlIGRldmljZSBzcGVjaWZpYyBvcGVuIGlmIHRoaXMgCisJCS8qIG9ubHkgY2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gaWYgdGhpcwogCQkgKiBpcyB0aGUgZmlyc3QgdGltZSB0aGUgcG9ydCBpcyBvcGVuZWQgKi8KLQkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT5vcGVuKHBvcnQsIGZpbHApOworCQlyZXR2YWwgPSBzZXJpYWwtPnR5cGUtPm9wZW4odHR5LCBwb3J0LCBmaWxwKTsKIAkJaWYgKHJldHZhbCkKIAkJCWdvdG8gYmFpbG91dF9pbnRlcmZhY2VfcHV0OwogCX0KQEAgLTI0MywxNiArMjQ2LDE2IEBACiBiYWlsb3V0X21vZHVsZV9wdXQ6CiAJbW9kdWxlX3B1dChzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcik7CiBiYWlsb3V0X211dGV4X3VubG9jazoKLQlwb3J0LT5vcGVuX2NvdW50ID0gMDsKKwlwb3J0LT5wb3J0LmNvdW50ID0gMDsKIAl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKLQlwb3J0LT50dHkgPSBOVUxMOworCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsKIAltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIGJhaWxvdXRfa3JlZl9wdXQ6CiAJdXNiX3NlcmlhbF9wdXQoc2VyaWFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIHZvaWQgc2VyaWFsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCkBAIC0yNjMsMjcgKzI2NiwzMCBAQAogCiAJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCi0JaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCkgeworCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDApIHsKIAkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKLQktLXBvcnQtPm9wZW5fY291bnQ7Ci0JaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCkKLQkJLyogb25seSBjYWxsIHRoZSBkZXZpY2Ugc3BlY2lmaWMgY2xvc2UgaWYgdGhpcyAKKwktLXBvcnQtPnBvcnQuY291bnQ7CisJaWYgKHBvcnQtPnBvcnQuY291bnQgPT0gMCkKKwkJLyogb25seSBjYWxsIHRoZSBkZXZpY2Ugc3BlY2lmaWMgY2xvc2UgaWYgdGhpcwogCQkgKiBwb3J0IGlzIGJlaW5nIGNsb3NlZCBieSB0aGUgbGFzdCBvd25lciAqLwotCQlwb3J0LT5zZXJpYWwtPnR5cGUtPmNsb3NlKHBvcnQsIGZpbHApOworCQlwb3J0LT5zZXJpYWwtPnR5cGUtPmNsb3NlKHR0eSwgcG9ydCwgZmlscCk7CiAKLQlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAocG9ydC0+Y29uc29sZT8gMSA6IDApKSB7Ci0JCWlmIChwb3J0LT50dHkpIHsKLQkJCWlmIChwb3J0LT50dHktPmRyaXZlcl9kYXRhKQotCQkJCXBvcnQtPnR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCQkJcG9ydC0+dHR5ID0gTlVMTDsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCA9PSAocG9ydC0+Y29uc29sZT8gMSA6IDApKSB7CisJCWlmIChwb3J0LT5wb3J0LnR0eSkgeworCQkJaWYgKHBvcnQtPnBvcnQudHR5LT5kcml2ZXJfZGF0YSkKKwkJCQlwb3J0LT5wb3J0LnR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCQkJcG9ydC0+cG9ydC50dHkgPSBOVUxMOwogCQl9CiAJfQogCi0JaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCkgewotCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpOworCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDApIHsKKwkJbXV0ZXhfbG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKKwkJaWYgKCFwb3J0LT5zZXJpYWwtPmRpc2Nvbm5lY3RlZCkKKwkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwb3J0LT5zZXJpYWwtPmludGVyZmFjZSk7CisJCW11dGV4X3VubG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKIAkJbW9kdWxlX3B1dChwb3J0LT5zZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcik7CiAJfQogCkBAIC0yOTEsNyArMjk3LDggQEAKIAl1c2Jfc2VyaWFsX3B1dChwb3J0LT5zZXJpYWwpOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF93cml0ZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorc3RhdGljIGludCBzZXJpYWxfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQkJCQlpbnQgY291bnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaW50IHJldHZhbCA9IC1FTk9ERVY7CkBAIC0zMDEsMTA3ICszMDgsMTEyIEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCwgJWQgYnl0ZShzKSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKIAotCS8qIG9wZW5fY291bnQgaXMgbWFuYWdlZCB1bmRlciB0aGUgbXV0ZXggbG9jayBmb3IgdGhlIHR0eSBzbyBjYW5ub3QKLSAgICAgICAgICAgZHJvcCB0byB6ZXJvIHVudGlsIGFmdGVyIHRoZSBsYXN0IGNsb3NlIGNvbXBsZXRlcyAqLwotCVdBUk5fT04oIXBvcnQtPm9wZW5fY291bnQpOworCS8qIGNvdW50IGlzIG1hbmFnZWQgdW5kZXIgdGhlIG11dGV4IGxvY2sgZm9yIHRoZSB0dHkgc28gY2Fubm90CisJICAgZHJvcCB0byB6ZXJvIHVudGlsIGFmdGVyIHRoZSBsYXN0IGNsb3NlIGNvbXBsZXRlcyAqLworCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCiAJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAqLwotCXJldHZhbCA9IHBvcnQtPnNlcmlhbC0+dHlwZS0+d3JpdGUocG9ydCwgYnVmLCBjb3VudCk7CisJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZSh0dHksIHBvcnQsIGJ1ZiwgY291bnQpOwogCiBleGl0OgogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3dyaXRlX3Jvb20gKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAorc3RhdGljIGludCBzZXJpYWxfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JV0FSTl9PTighcG9ydC0+b3Blbl9jb3VudCk7CisJV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CiAJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAqLwotCXJldHVybiBwb3J0LT5zZXJpYWwtPnR5cGUtPndyaXRlX3Jvb20ocG9ydCk7CisJcmV0dXJuIHBvcnQtPnNlcmlhbC0+dHlwZS0+d3JpdGVfcm9vbSh0dHkpOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAorc3RhdGljIGludCBzZXJpYWxfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJZGJnKCIlcyA9IHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCVdBUk5fT04oIXBvcnQtPm9wZW5fY291bnQpOworCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKi8KLQlyZXR1cm4gcG9ydC0+c2VyaWFsLT50eXBlLT5jaGFyc19pbl9idWZmZXIocG9ydCk7CisJcmV0dXJuIHBvcnQtPnNlcmlhbC0+dHlwZS0+Y2hhcnNfaW5fYnVmZmVyKHR0eSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbF90aHJvdHRsZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCitzdGF0aWMgdm9pZCBzZXJpYWxfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JV0FSTl9PTighcG9ydC0+b3Blbl9jb3VudCk7CisJV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CiAJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAqLwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnRocm90dGxlKQotCQlwb3J0LT5zZXJpYWwtPnR5cGUtPnRocm90dGxlKHBvcnQpOworCQlwb3J0LT5zZXJpYWwtPnR5cGUtPnRocm90dGxlKHR0eSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbF91bnRocm90dGxlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3N0YXRpYyB2b2lkIHNlcmlhbF91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCVdBUk5fT04oIXBvcnQtPm9wZW5fY291bnQpOworCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKi8KIAlpZiAocG9ydC0+c2VyaWFsLT50eXBlLT51bnRocm90dGxlKQotCQlwb3J0LT5zZXJpYWwtPnR5cGUtPnVudGhyb3R0bGUocG9ydCk7CisJCXBvcnQtPnNlcmlhbC0+dHlwZS0+dW50aHJvdHRsZSh0dHkpOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9pb2N0bCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgc2VyaWFsX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcmV0dmFsID0gLUVOT0RFVjsKIAogCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgMHglLjR4IiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY21kKTsKIAotCVdBUk5fT04oIXBvcnQtPm9wZW5fY291bnQpOworCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCi0JLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpZiBpdCBpcyBhdmFpbGFibGUgKi8KKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uCisJICAgaWYgaXQgaXMgYXZhaWxhYmxlICovCiAJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+aW9jdGwpIHsKIAkJbG9ja19rZXJuZWwoKTsKLQkJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT5pb2N0bChwb3J0LCBmaWxlLCBjbWQsIGFyZyk7CisJCXJldHZhbCA9IHBvcnQtPnNlcmlhbC0+dHlwZS0+aW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7CiAJCXVubG9ja19rZXJuZWwoKTsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQlyZXR2YWwgPSAtRU5PSU9DVExDTUQ7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQgc2VyaWFsX3NldF90ZXJtaW9zIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpCitzdGF0aWMgdm9pZCBzZXJpYWxfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCVdBUk5fT04oIXBvcnQtPm9wZW5fY291bnQpOwotCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMgYXZhaWxhYmxlICovCisJV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbgorCSAgIGlmIGl0IGlzIGF2YWlsYWJsZSAqLwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKQotCQlwb3J0LT5zZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKHBvcnQsIG9sZCk7CisJCXBvcnQtPnNlcmlhbC0+dHlwZS0+c2V0X3Rlcm1pb3ModHR5LCBwb3J0LCBvbGQpOwogCWVsc2UKIAkJdHR5X3Rlcm1pb3NfY29weV9odyh0dHktPnRlcm1pb3MsIG9sZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbF9icmVhayAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQorc3RhdGljIGludCBzZXJpYWxfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCVdBUk5fT04oIXBvcnQtPm9wZW5fY291bnQpOwotCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMgYXZhaWxhYmxlICovCisJV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbgorCSAgIGlmIGl0IGlzIGF2YWlsYWJsZSAqLwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPmJyZWFrX2N0bCkgewogCQlsb2NrX2tlcm5lbCgpOwotCQlwb3J0LT5zZXJpYWwtPnR5cGUtPmJyZWFrX2N0bChwb3J0LCBicmVha19zdGF0ZSk7CisJCXBvcnQtPnNlcmlhbC0+dHlwZS0+YnJlYWtfY3RsKHR0eSwgYnJlYWtfc3RhdGUpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJfQorCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9yZWFkX3Byb2MgKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBzZXJpYWxfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCQkJCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKIAlpbnQgbGVuZ3RoID0gMDsKQEAgLTQxMCwyNiArNDIyLDI5IEBACiAJY2hhciB0bXBbNDBdOwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKLQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZSwgInVzYnNlcmluZm86MS4wIGRyaXZlcjoyLjBcbiIpOworCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UsICJ1c2JzZXJpbmZvOjEuMCBkcml2ZXI6Mi4wXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1RUWV9NSU5PUlMgJiYgbGVuZ3RoIDwgUEFHRV9TSVpFOyArK2kpIHsKIAkJc2VyaWFsID0gdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgoaSk7CiAJCWlmIChzZXJpYWwgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCi0JCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIiVkOiIsIGkpOworCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIiVkOiIsIGkpOwogCQlpZiAoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpCi0JCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgbW9kdWxlOiVzIiwgbW9kdWxlX25hbWUoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpKTsKLQkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIG5hbWU6XCIlc1wiIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7Ci0JCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIiB2ZW5kb3I6JTA0eCBwcm9kdWN0OiUwNHgiLCAKLQkJCQkgICBsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksIAotCQkJCSAgIGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwotCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgbnVtX3BvcnRzOiVkIiwgc2VyaWFsLT5udW1fcG9ydHMpOwotCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgcG9ydDolZCIsIGkgLSBzZXJpYWwtPm1pbm9yICsgMSk7Ci0KKwkJCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UrbGVuZ3RoLCAiIG1vZHVsZTolcyIsCisJCQkJbW9kdWxlX25hbWUoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpKTsKKwkJbGVuZ3RoICs9IHNwcmludGYocGFnZStsZW5ndGgsICIgbmFtZTpcIiVzXCIiLAorCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOworCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIiB2ZW5kb3I6JTA0eCBwcm9kdWN0OiUwNHgiLAorCQkJbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UrbGVuZ3RoLCAiIG51bV9wb3J0czolZCIsCisJCQkJCQkJc2VyaWFsLT5udW1fcG9ydHMpOworCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIiBwb3J0OiVkIiwKKwkJCQkJCQlpIC0gc2VyaWFsLT5taW5vciArIDEpOwogCQl1c2JfbWFrZV9wYXRoKHNlcmlhbC0+ZGV2LCB0bXAsIHNpemVvZih0bXApKTsKLQkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIHBhdGg6JXMiLCB0bXApOwotCQkJCi0JCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIlxuIik7CisJCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UrbGVuZ3RoLCAiIHBhdGg6JXMiLCB0bXApOworCisJCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UrbGVuZ3RoLCAiXG4iKTsKIAkJaWYgKChsZW5ndGggKyBiZWdpbikgPiAob2ZmICsgY291bnQpKSB7CiAJCQl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOwogCQkJZ290byBkb25lOwpAQCAtNDQ1LDMxICs0NjAsMzEgQEAKIAlpZiAob2ZmID49IChsZW5ndGggKyBiZWdpbikpCiAJCXJldHVybiAwOwogCSpzdGFydCA9IHBhZ2UgKyAob2ZmLWJlZ2luKTsKLQlyZXR1cm4gKChjb3VudCA8IGJlZ2luK2xlbmd0aC1vZmYpID8gY291bnQgOiBiZWdpbitsZW5ndGgtb2ZmKTsKKwlyZXR1cm4gKGNvdW50IDwgYmVnaW4rbGVuZ3RoLW9mZikgPyBjb3VudCA6IGJlZ2luK2xlbmd0aC1vZmY7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3Rpb2NtZ2V0IChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgc2VyaWFsX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCVdBUk5fT04oIXBvcnQtPm9wZW5fY291bnQpOworCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2NtZ2V0KQotCQlyZXR1cm4gcG9ydC0+c2VyaWFsLT50eXBlLT50aW9jbWdldChwb3J0LCBmaWxlKTsKKwkJcmV0dXJuIHBvcnQtPnNlcmlhbC0+dHlwZS0+dGlvY21nZXQodHR5LCBmaWxlKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfdGlvY21zZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBzZXJpYWxfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCVdBUk5fT04oIXBvcnQtPm9wZW5fY291bnQpOworCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2Ntc2V0KQotCQlyZXR1cm4gcG9ydC0+c2VyaWFsLT50eXBlLT50aW9jbXNldChwb3J0LCBmaWxlLCBzZXQsIGNsZWFyKTsKKwkJcmV0dXJuIHBvcnQtPnNlcmlhbC0+dHlwZS0+dGlvY21zZXQodHR5LCBmaWxlLCBzZXQsIGNsZWFyKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtNDgyLDYgKzQ5Nyw3IEBACiB7CiAJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX3BvcnRfc29mdGludCk7CiAKIHN0YXRpYyB2b2lkIHVzYl9zZXJpYWxfcG9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTQ5MCwxMSArNTA2LDExIEBACiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JCisKIAlpZiAoIXBvcnQpCiAJCXJldHVybjsKIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwogCkBAIC01MDUsNyArNTIxLDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CiAKLQlkYmcgKCIlcyAtICVzIiwgX19mdW5jX18sIGRldi0+YnVzX2lkKTsKKwlkYmcgKCIlcyAtICVzIiwgX19mdW5jX18sIGRldl9uYW1lKGRldikpOwogCXBvcnRfZnJlZShwb3J0KTsKIH0KIApAQCAtNTQzLDkgKzU1OSw5IEBACiAJa2ZyZWUocG9ydCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqIGNyZWF0ZV9zZXJpYWwgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIAotCQkJCQkgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCQkJCSAgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKmNyZWF0ZV9zZXJpYWwoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQkJc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKIApAQCAtNTY0LDcgKzU4MCw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqbWF0Y2hfZHluYW1pY19pZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCQkJCSAgICBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRydikKKwkJCQkJICAgIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJ2KQogewogCXN0cnVjdCB1c2JfZHluaWQgKmR5bmlkOwogCkBAIC01OTYsNyArNjEyLDggQEAKIAlyZXR1cm4gaWQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKnNlYXJjaF9zZXJpYWxfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKnNlYXJjaF9zZXJpYWxfZGV2aWNlKAorCQkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOwogCXN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJ2OwpAQCAtNjE0LDcgKzYzMSw3IEBACiBpbnQgdXNiX3NlcmlhbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBOVUxMOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKQEAgLTYyNSw3ICs2NDIsNyBAQAogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa19vdXRfZW5kcG9pbnRbTUFYX05VTV9QT1JUU107CiAJc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICp0eXBlID0gTlVMTDsKIAlpbnQgcmV0dmFsOwotCWludCBtaW5vcjsKKwl1bnNpZ25lZCBpbnQgbWlub3I7CiAJaW50IGJ1ZmZlcl9zaXplOwogCWludCBpOwogCWludCBudW1faW50ZXJydXB0X2luID0gMDsKQEAgLTY0Myw3ICs2NjAsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlzZXJpYWwgPSBjcmVhdGVfc2VyaWFsIChkZXYsIGludGVyZmFjZSwgdHlwZSk7CisJc2VyaWFsID0gY3JlYXRlX3NlcmlhbChkZXYsIGludGVyZmFjZSwgdHlwZSk7CiAJaWYgKCFzZXJpYWwpIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwpAQCAtNjU2LDggKzY3Myw5IEBACiAKIAkJaWYgKCF0cnlfbW9kdWxlX2dldCh0eXBlLT5kcml2ZXIub3duZXIpKSB7CiAJCQl1bmxvY2tfa2VybmVsKCk7Ci0JCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIm1vZHVsZSBnZXQgZmFpbGVkLCBleGl0aW5nXG4iKTsKLQkJCWtmcmVlIChzZXJpYWwpOworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsCisJCQkJIm1vZHVsZSBnZXQgZmFpbGVkLCBleGl0aW5nXG4iKTsKKwkJCWtmcmVlKHNlcmlhbCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCkBAIC02NjcsOCArNjg1LDggQEAKIAogCQlpZiAocmV0dmFsKSB7CiAJCQl1bmxvY2tfa2VybmVsKCk7Ci0JCQlkYmcgKCJzdWIgZHJpdmVyIHJlamVjdGVkIGRldmljZSIpOwotCQkJa2ZyZWUgKHNlcmlhbCk7CisJCQlkYmcoInN1YiBkcml2ZXIgcmVqZWN0ZWQgZGV2aWNlIik7CisJCQlrZnJlZShzZXJpYWwpOwogCQkJcmV0dXJuIHJldHZhbDsKIAkJfQogCX0KQEAgLTcwOSw3ICs3MjcsNyBAQAogCX0KIAogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX1BMMjMwM19NT0RVTEUpCi0JLyogQkVHSU4gSE9SUklCTEUgSEFDSyBGT1IgUEwyMzAzICovIAorCS8qIEJFR0lOIEhPUlJJQkxFIEhBQ0sgRk9SIFBMMjMwMyAqLwogCS8qIHRoaXMgaXMgbmVlZGVkIGR1ZSB0byB0aGUgbG9vbmV5IHdheSBpdHMgZW5kcG9pbnRzIGFyZSBzZXQgdXAgKi8KIAlpZiAoKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFBMMjMwM19WRU5ET1JfSUQpICYmCiAJICAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gUEwyMzAzX1BST0RVQ1RfSUQpKSB8fApAQCAtNzM4LDcgKzc1Niw3IEBACiAJCWlmIChudW1fYnVsa19pbiA9PSAwIHx8IG51bV9idWxrX291dCA9PSAwKSB7CiAJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJQTC0yMzAzIGhhY2s6IGRlc2NyaXB0b3JzIG1hdGNoZWQgYnV0IGVuZHBvaW50cyBkaWQgbm90XG4iKTsKLQkJCWtmcmVlIChzZXJpYWwpOworCQkJa2ZyZWUoc2VyaWFsKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtNzUwLDggKzc2OCw5IEBACiAJCW51bV9wb3J0cyA9IG51bV9idWxrX291dDsKIAkJaWYgKG51bV9wb3J0cyA9PSAwKSB7CiAJCQl1bmxvY2tfa2VybmVsKCk7Ci0JCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkdlbmVyaWMgZGV2aWNlIHdpdGggbm8gYnVsayBvdXQsIG5vdCBhbGxvd2VkLlxuIik7Ci0JCQlrZnJlZSAoc2VyaWFsKTsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJICAgICJHZW5lcmljIGRldmljZSB3aXRoIG5vIGJ1bGsgb3V0LCBub3QgYWxsb3dlZC5cbiIpOworCQkJa2ZyZWUoc2VyaWFsKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJfQpAQCAtNzYxLDExICs3ODAsMTIgQEAKIAkJaWYgKHR5cGUtPmNhbGNfbnVtX3BvcnRzKSB7CiAJCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPmRyaXZlci5vd25lcikpIHsKIAkJCQl1bmxvY2tfa2VybmVsKCk7Ci0JCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7Ci0JCQkJa2ZyZWUgKHNlcmlhbCk7CisJCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsCisJCQkJCSJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CisJCQkJa2ZyZWUoc2VyaWFsKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KLQkJCW51bV9wb3J0cyA9IHR5cGUtPmNhbGNfbnVtX3BvcnRzIChzZXJpYWwpOworCQkJbnVtX3BvcnRzID0gdHlwZS0+Y2FsY19udW1fcG9ydHMoc2VyaWFsKTsKIAkJCW1vZHVsZV9wdXQodHlwZS0+ZHJpdmVyLm93bmVyKTsKIAkJfQogCQlpZiAoIW51bV9wb3J0cykKQEAgLTc4Myw3ICs4MDMsOCBAQAogCQkJdHlwZS0+ZGVzY3JpcHRpb24pOwogCiAJLyogY3JlYXRlIG91ciBwb3J0cywgd2UgbmVlZCBhcyBtYW55IGFzIHRoZSBtYXggZW5kcG9pbnRzICovCi0JLyogd2UgZG9uJ3QgdXNlIG51bV9wb3J0cyBoZXJlIGNhdXogc29tZSBkZXZpY2VzIGhhdmUgbW9yZSBlbmRwb2ludCBwYWlycyB0aGFuIHBvcnRzICovCisJLyogd2UgZG9uJ3QgdXNlIG51bV9wb3J0cyBoZXJlIGJlY2F1c2Ugc29tZSBkZXZpY2VzIGhhdmUgbW9yZQorCSAgIGVuZHBvaW50IHBhaXJzIHRoYW4gcG9ydHMgKi8KIAltYXhfZW5kcG9pbnRzID0gbWF4KG51bV9idWxrX2luLCBudW1fYnVsa19vdXQpOwogCW1heF9lbmRwb2ludHMgPSBtYXgobWF4X2VuZHBvaW50cywgbnVtX2ludGVycnVwdF9pbik7CiAJbWF4X2VuZHBvaW50cyA9IG1heChtYXhfZW5kcG9pbnRzLCBudW1faW50ZXJydXB0X291dCk7CkBAIC03OTEsNyArODEyLDggQEAKIAlzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzID0gbWF4X2VuZHBvaW50czsKIAl1bmxvY2tfa2VybmVsKCk7CiAKLQlkYmcoIiVzIC0gc2V0dGluZyB1cCAlZCBwb3J0IHN0cnVjdHVyZXMgZm9yIHRoaXMgZGV2aWNlIiwgX19mdW5jX18sIG1heF9lbmRwb2ludHMpOworCWRiZygiJXMgLSBzZXR0aW5nIHVwICVkIHBvcnQgc3RydWN0dXJlcyBmb3IgdGhpcyBkZXZpY2UiLAorCQkJCQkJX19mdW5jX18sIG1heF9lbmRwb2ludHMpOwogCWZvciAoaSA9IDA7IGkgPCBtYXhfZW5kcG9pbnRzOyArK2kpIHsKIAkJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwb3J0KQpAQCAtODA3LDcgKzgyOSw3IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX2luOyArK2kpIHsKIAkJZW5kcG9pbnQgPSBidWxrX2luX2VuZHBvaW50W2ldOwogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwotCQlwb3J0LT5yZWFkX3VyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworCQlwb3J0LT5yZWFkX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcG9ydC0+cmVhZF91cmIpIHsKIAkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCQlnb3RvIHByb2JlX2Vycm9yOwpAQCAtODE1LDE3ICs4MzcsMTcgQEAKIAkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCQlwb3J0LT5idWxrX2luX3NpemUgPSBidWZmZXJfc2l6ZTsKIAkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKLQkJcG9ydC0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXBvcnQtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcG9ydC0+YnVsa19pbl9idWZmZXIpIHsKLQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgYnVsa19pbl9idWZmZXJcbiIpOworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsCisJCQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX2luX2J1ZmZlclxuIik7CiAJCQlnb3RvIHByb2JlX2Vycm9yOwogCQl9Ci0JCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT5yZWFkX3VyYiwgZGV2LAotCQkJCSAgIHVzYl9yY3ZidWxrcGlwZSAoZGV2LAotCQkJCQkgICAJICAgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKLQkJCQkgICBwb3J0LT5idWxrX2luX2J1ZmZlciwgYnVmZmVyX3NpemUsCi0JCQkJICAgc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2ssCi0JCQkJICAgcG9ydCk7CisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBkZXYsCisJCQkJdXNiX3JjdmJ1bGtwaXBlKGRldiwKKwkJCQkJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQlwb3J0LT5idWxrX2luX2J1ZmZlciwgYnVmZmVyX3NpemUsCisJCQkJc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19vdXQ7ICsraSkgewpAQCAtODM5LDE3ICs4NjEsMTcgQEAKIAkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCQlwb3J0LT5idWxrX291dF9zaXplID0gYnVmZmVyX3NpemU7CiAJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOwotCQlwb3J0LT5idWxrX291dF9idWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXBvcnQtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXBvcnQtPmJ1bGtfb3V0X2J1ZmZlcikgewotCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXJcbiIpOworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsCisJCQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXJcbiIpOwogCQkJZ290byBwcm9iZV9lcnJvcjsKIAkJfQotCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+d3JpdGVfdXJiLCBkZXYsCi0JCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChkZXYsCi0JCQkJCQkgICAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAotCQkJCSAgIHBvcnQtPmJ1bGtfb3V0X2J1ZmZlciwgYnVmZmVyX3NpemUsIAotCQkJCSAgIHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjaywKLQkJCQkgICBwb3J0KTsKKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBkZXYsCisJCQkJdXNiX3NuZGJ1bGtwaXBlKGRldiwKKwkJCQkJZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCXBvcnQtPmJ1bGtfb3V0X2J1ZmZlciwgYnVmZmVyX3NpemUsCisJCQkJc2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAl9CiAKIAlpZiAoc2VyaWFsLT50eXBlLT5yZWFkX2ludF9jYWxsYmFjaykgewpAQCAtODU4LDczICs4ODAsODIgQEAKIAkJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghcG9ydC0+aW50ZXJydXB0X2luX3VyYikgewotCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CisJCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsCisJCQkJCQkiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCQkJZ290byBwcm9iZV9lcnJvcjsKIAkJCX0KIAkJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKLQkJCXBvcnQtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKLQkJCXBvcnQtPmludGVycnVwdF9pbl9idWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzID0KKwkJCQkJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQkJcG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsCisJCQkJCQkJCUdGUF9LRVJORUwpOwogCQkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKSB7Ci0JCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfaW5fYnVmZmVyXG4iKTsKKwkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwKKwkJCQkgICAgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXJcbiIpOwogCQkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCQl9Ci0JCQl1c2JfZmlsbF9pbnRfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBkZXYsIAotCQkJCQkgIHVzYl9yY3ZpbnRwaXBlIChkZXYsCi0JCQkJCQkJICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCi0JCQkJCSAgcG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlciwgYnVmZmVyX3NpemUsIAotCQkJCQkgIHNlcmlhbC0+dHlwZS0+cmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsIAotCQkJCQkgIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCQkJdXNiX2ZpbGxfaW50X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBkZXYsCisJCQkJdXNiX3JjdmludHBpcGUoZGV2LAorCQkJCQkJZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCXBvcnQtPmludGVycnVwdF9pbl9idWZmZXIsIGJ1ZmZlcl9zaXplLAorCQkJCXNlcmlhbC0+dHlwZS0+cmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsCisJCQkJZW5kcG9pbnQtPmJJbnRlcnZhbCk7CiAJCX0KIAl9IGVsc2UgaWYgKG51bV9pbnRlcnJ1cHRfaW4pIHsKIAkJZGJnKCJ0aGUgZGV2aWNlIGNsYWltcyB0byBzdXBwb3J0IGludGVycnVwdCBpbiB0cmFuc2ZlcnMsIGJ1dCByZWFkX2ludF9jYWxsYmFjayBpcyBub3QgZGVmaW5lZCIpOwogCX0KLQkKKwogCWlmIChzZXJpYWwtPnR5cGUtPndyaXRlX2ludF9jYWxsYmFjaykgewogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludGVycnVwdF9vdXQ7ICsraSkgewogCQkJZW5kcG9pbnQgPSBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50W2ldOwogCQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJCXBvcnQtPmludGVycnVwdF9vdXRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghcG9ydC0+aW50ZXJydXB0X291dF91cmIpIHsKLQkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJCQkJIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCQl9CiAJCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CiAJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUgPSBidWZmZXJfc2l6ZTsKLQkJCXBvcnQtPmludGVycnVwdF9vdXRfZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7Ci0JCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfZW5kcG9pbnRBZGRyZXNzID0KKwkJCQkJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQkJcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKIAkJCWlmICghcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIpIHsKLQkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9vdXRfYnVmZmVyXG4iKTsKKwkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwKKwkJCQkgICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfb3V0X2J1ZmZlclxuIik7CiAJCQkJZ290byBwcm9iZV9lcnJvcjsKIAkJCX0KLQkJCXVzYl9maWxsX2ludF91cmIgKHBvcnQtPmludGVycnVwdF9vdXRfdXJiLCBkZXYsCi0JCQkJCSAgdXNiX3NuZGludHBpcGUgKGRldiwKLQkJCQkJCQkgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKLQkJCQkJICBwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciwgYnVmZmVyX3NpemUsCi0JCQkJCSAgc2VyaWFsLT50eXBlLT53cml0ZV9pbnRfY2FsbGJhY2ssIHBvcnQsCi0JCQkJCSAgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJCQl1c2JfZmlsbF9pbnRfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiLCBkZXYsCisJCQkJdXNiX3NuZGludHBpcGUoZGV2LAorCQkJCQkJICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ1ZmZlcl9zaXplLAorCQkJCXNlcmlhbC0+dHlwZS0+d3JpdGVfaW50X2NhbGxiYWNrLCBwb3J0LAorCQkJCWVuZHBvaW50LT5iSW50ZXJ2YWwpOwogCQl9CiAJfSBlbHNlIGlmIChudW1faW50ZXJydXB0X291dCkgewogCQlkYmcoInRoZSBkZXZpY2UgY2xhaW1zIHRvIHN1cHBvcnQgaW50ZXJydXB0IG91dCB0cmFuc2ZlcnMsIGJ1dCB3cml0ZV9pbnRfY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTsKIAl9Ci0JCisKIAkvKiBpZiB0aGlzIGRldmljZSB0eXBlIGhhcyBhbiBhdHRhY2ggZnVuY3Rpb24sIGNhbGwgaXQgKi8KIAlpZiAodHlwZS0+YXR0YWNoKSB7CiAJCWlmICghdHJ5X21vZHVsZV9nZXQodHlwZS0+ZHJpdmVyLm93bmVyKSkgewotCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwKKwkJCQkJIm1vZHVsZSBnZXQgZmFpbGVkLCBleGl0aW5nXG4iKTsKIAkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCX0KLQkJcmV0dmFsID0gdHlwZS0+YXR0YWNoIChzZXJpYWwpOworCQlyZXR2YWwgPSB0eXBlLT5hdHRhY2goc2VyaWFsKTsKIAkJbW9kdWxlX3B1dCh0eXBlLT5kcml2ZXIub3duZXIpOwogCQlpZiAocmV0dmFsIDwgMCkKIAkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCWlmIChyZXR2YWwgPiAwKSB7Ci0JCQkvKiBxdWlldGx5IGFjY2VwdCB0aGlzIGRldmljZSwgYnV0IGRvbid0IGJpbmQgdG8gYSBzZXJpYWwgcG9ydAotCQkJICogYXMgaXQncyBhYm91dCB0byBkaXNhcHBlYXIgKi8KKwkJCS8qIHF1aWV0bHkgYWNjZXB0IHRoaXMgZGV2aWNlLCBidXQgZG9uJ3QgYmluZCB0byBhCisJCQkgICBzZXJpYWwgcG9ydCBhcyBpdCdzIGFib3V0IHRvIGRpc2FwcGVhciAqLwogCQkJZ290byBleGl0OwogCQl9CiAJfQogCi0JaWYgKGdldF9mcmVlX3NlcmlhbCAoc2VyaWFsLCBudW1fcG9ydHMsICZtaW5vcikgPT0gTlVMTCkgeworCWlmIChnZXRfZnJlZV9zZXJpYWwoc2VyaWFsLCBudW1fcG9ydHMsICZtaW5vcikgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIG1vcmUgZnJlZSBzZXJpYWwgZGV2aWNlc1xuIik7CiAJCWdvdG8gcHJvYmVfZXJyb3I7CiAJfQpAQCAtOTM4LDE5ICs5NjksMTkgQEAKIAkJcG9ydC0+ZGV2LmJ1cyA9ICZ1c2Jfc2VyaWFsX2J1c190eXBlOwogCQlwb3J0LT5kZXYucmVsZWFzZSA9ICZwb3J0X3JlbGVhc2U7CiAKLQkJc25wcmludGYgKCZwb3J0LT5kZXYuYnVzX2lkWzBdLCBzaXplb2YocG9ydC0+ZGV2LmJ1c19pZCksICJ0dHlVU0IlZCIsIHBvcnQtPm51bWJlcik7Ci0JCWRiZyAoIiVzIC0gcmVnaXN0ZXJpbmcgJXMiLCBfX2Z1bmNfXywgcG9ydC0+ZGV2LmJ1c19pZCk7CisJCWRldl9zZXRfbmFtZSgmcG9ydC0+ZGV2LCAidHR5VVNCJWQiLCBwb3J0LT5udW1iZXIpOworCQlkYmcgKCIlcyAtIHJlZ2lzdGVyaW5nICVzIiwgX19mdW5jX18sIGRldl9uYW1lKCZwb3J0LT5kZXYpKTsKIAkJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5kZXYpOwogCQlpZiAocmV0dmFsKQogCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRXJyb3IgcmVnaXN0ZXJpbmcgcG9ydCBkZXZpY2UsICIKIAkJCQkiY29udGludWluZ1xuIik7CiAJfQogCi0JdXNiX3NlcmlhbF9jb25zb2xlX2luaXQgKGRlYnVnLCBtaW5vcik7CisJdXNiX3NlcmlhbF9jb25zb2xlX2luaXQoZGVidWcsIG1pbm9yKTsKIAogZXhpdDoKIAkvKiBzdWNjZXNzICovCi0JdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBzZXJpYWwpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBzZXJpYWwpOwogCXJldHVybiAwOwogCiBwcm9iZV9lcnJvcjoKQEAgLTk4NiwyOSArMTAxNywzMCBAQAogCS8qIGZyZWUgdXAgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCAqLwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzOyArK2kpCiAJCWtmcmVlKHNlcmlhbC0+cG9ydFtpXSk7Ci0Ja2ZyZWUgKHNlcmlhbCk7CisJa2ZyZWUoc2VyaWFsKTsKIAlyZXR1cm4gLUVJTzsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcHJvYmUpOwogCiB2b2lkIHVzYl9zZXJpYWxfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewogCWludCBpOwotCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRlcmZhY2UpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmludGVyZmFjZS0+ZGV2OwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAKIAl1c2Jfc2VyaWFsX2NvbnNvbGVfZGlzY29ubmVjdChzZXJpYWwpOwotCWRiZyAoIiVzIiwgX19mdW5jX18pOworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAltdXRleF9sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgTlVMTCk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCS8qIG11c3Qgc2V0IGEgZmxhZywgdG8gc2lnbmFsIHN1YmRyaXZlcnMgKi8KIAlzZXJpYWwtPmRpc2Nvbm5lY3RlZCA9IDE7CiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJaWYgKHBvcnQpIHsKLQkJCWlmIChwb3J0LT50dHkpCi0JCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkJaWYgKHBvcnQtPnBvcnQudHR5KQorCQkJCXR0eV9oYW5ndXAocG9ydC0+cG9ydC50dHkpOwogCQkJa2lsbF90cmFmZmljKHBvcnQpOwogCQl9CiAJfQpAQCAtMTAxOCw2ICsxMDUwLDcgQEAKIAl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOwogCWRldl9pbmZvKGRldiwgImRldmljZSBkaXNjb25uZWN0ZWRcbiIpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9kaXNjb25uZWN0KTsKIAogaW50IHVzYl9zZXJpYWxfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CkBAIC0xMDc2LDkgKzExMDksOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIEluaXRpYWxpemUgb3VyIGdsb2JhbCBkYXRhICovCi0JZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1RUWV9NSU5PUlM7ICsraSkKIAkJc2VyaWFsX3RhYmxlW2ldID0gTlVMTDsKLQl9CiAKIAlyZXN1bHQgPSBidXNfcmVnaXN0ZXIoJnVzYl9zZXJpYWxfYnVzX3R5cGUpOwogCWlmIChyZXN1bHQpIHsKQEAgLTEwOTMsOSArMTEyNSwxMSBAQAogCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwOwogCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CiAJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwotCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8CisJCQkJCQlUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwotCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQKKwkJCQkJCQl8IEhVUENMIHwgQ0xPQ0FMOwogCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKIAl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJdHR5X3NldF9vcGVyYXRpb25zKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgJnNlcmlhbF9vcHMpOwpAQCAtMTEzMyw3ICsxMTY3LDcgQEAKIAlidXNfdW5yZWdpc3RlcigmdXNiX3NlcmlhbF9idXNfdHlwZSk7CiAKIGV4aXRfYnVzOgotCWVyciAoIiVzIC0gcmV0dXJuaW5nIHdpdGggZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwllcnIoIiVzIC0gcmV0dXJuaW5nIHdpdGggZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAlwdXRfdHR5X2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOwogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0xMTYwLDcgKzExOTQsNyBAQAogCQlpZiAoIXR5cGUtPmZ1bmN0aW9uKSB7CQkJCQlcCiAJCQl0eXBlLT5mdW5jdGlvbiA9IHVzYl9zZXJpYWxfZ2VuZXJpY18jI2Z1bmN0aW9uOwlcCiAJCQlkYmcoIkhhZCB0byBvdmVycmlkZSB0aGUgIiAjZnVuY3Rpb24JCVwKLQkJCQkgIiB1c2Igc2VyaWFsIG9wZXJhdGlvbiB3aXRoIHRoZSBnZW5lcmljIG9uZS4iKTtcCisJCQkJIiB1c2Igc2VyaWFsIG9wZXJhdGlvbiB3aXRoIHRoZSBnZW5lcmljIG9uZS4iKTtcCiAJCQl9CQkJCQkJXAogCX0gd2hpbGUgKDApCiAKQEAgLTExNzcsOCArMTIxMSw5IEBACiAJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHJlc3VtZSk7CiB9CiAKLWludCB1c2Jfc2VyaWFsX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyKSAvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCitpbnQgdXNiX3NlcmlhbF9yZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRyaXZlcikKIHsKKwkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCiAJaW50IHJldHZhbDsKIAogCWZpeHVwX2dlbmVyaWMoZHJpdmVyKTsKQEAgLTExOTEsMzcgKzEyMjYsMzAgQEAKIAogCXJldHZhbCA9IHVzYl9zZXJpYWxfYnVzX3JlZ2lzdGVyKGRyaXZlcik7CiAJaWYgKHJldHZhbCkgewotCQllcnIoInByb2JsZW0gJWQgd2hlbiByZWdpc3RlcmluZyBkcml2ZXIgJXMiLCByZXR2YWwsIGRyaXZlci0+ZGVzY3JpcHRpb24pOworCQllcnIoInByb2JsZW0gJWQgd2hlbiByZWdpc3RlcmluZyBkcml2ZXIgJXMiLAorCQkJCQkJcmV0dmFsLCBkcml2ZXItPmRlc2NyaXB0aW9uKTsKIAkJbGlzdF9kZWwoJmRyaXZlci0+ZHJpdmVyX2xpc3QpOwotCX0KLQllbHNlCi0JCWluZm8oIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlcyIsIGRyaXZlci0+ZGVzY3JpcHRpb24pOworCX0gZWxzZQorCQlpbmZvKCJVU0IgU2VyaWFsIHN1cHBvcnQgcmVnaXN0ZXJlZCBmb3IgJXMiLAorCQkJCQkJZHJpdmVyLT5kZXNjcmlwdGlvbik7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9yZWdpc3Rlcik7CiAKIAotdm9pZCB1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkZXZpY2UpIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggQktMIGhlbGQgKi8KK3ZvaWQgdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZGV2aWNlKQogeworCS8qIG11c3QgYmUgY2FsbGVkIHdpdGggQktMIGhlbGQgKi8KIAlpbmZvKCJVU0IgU2VyaWFsIGRlcmVnaXN0ZXJpbmcgZHJpdmVyICVzIiwgZGV2aWNlLT5kZXNjcmlwdGlvbik7CiAJbGlzdF9kZWwoJmRldmljZS0+ZHJpdmVyX2xpc3QpOwogCXVzYl9zZXJpYWxfYnVzX2RlcmVnaXN0ZXIoZGV2aWNlKTsKIH0KLQotCi0KLS8qIElmIHRoZSB1c2Itc2VyaWFsIGNvcmUgaXMgYnVpbHQgaW50byB0aGUgY29yZSwgdGhlIHVzYi1zZXJpYWwgZHJpdmVycwotICAgbmVlZCB0aGVzZSBzeW1ib2xzIHRvIGxvYWQgcHJvcGVybHkgYXMgbW9kdWxlcy4gKi8KLUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9kZXJlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcHJvYmUpOwotRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9kaXNjb25uZWN0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KTsKLQogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYwppbmRleCBmOWZjOTI2Li5mYzVkOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogCisjZGVmaW5lIFVTQl9ERUJVR19NQVhfUEFDS0VUX1NJWkUJOAorCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MDUyNSwgMHgxMjdhKSB9LAogCXsgfSwKQEAgLTI5LDYgKzMxLDEzIEBACiAJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKK2ludCB1c2JfZGVidWdfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKQoreworCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBVU0JfREVCVUdfTUFYX1BBQ0tFVF9TSVpFOworCXJldHVybiB1c2Jfc2VyaWFsX2dlbmVyaWNfb3Blbih0dHksIHBvcnQsIGZpbHApOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGRlYnVnX2RldmljZSA9IHsKIAkuZHJpdmVyID0gewogCQkub3duZXIgPQlUSElTX01PRFVMRSwKQEAgLTM2LDYgKzQ1LDcgQEAKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKIAkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCXVzYl9kZWJ1Z19vcGVuLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZGVidWdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwppbmRleCA1ZmMyMDEyLi5jZjg5MjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwpAQCAtOSw3ICs5LDggQEAKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KICAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcworICogZHJpdmVyCiAgKgogICovCiAKQEAgLTIzLDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogI2luY2x1ZGUgInZpc29yLmgiCkBAIC0zNSwyNSArMzYsMjkgQEAKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBIYW5kU3ByaW5nIFZpc29yIC8gUGFsbSBPUyBkcml2ZXIiCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgaGFuZHNwcmluZyB2aXNvciAqLwotc3RhdGljIGludCAgdmlzb3Jfb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyB2b2lkIHZpc29yX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIGludCAgdmlzb3Jfd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7Ci1zdGF0aWMgaW50ICB2aXNvcl93cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgaW50ICB2aXNvcl9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgdmlzb3JfdGhyb3R0bGUJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgdmlzb3JfdW50aHJvdHRsZQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgaW50ICB2aXNvcl9wcm9iZQkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50ICB2aXNvcl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIHZpc29yX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIHZpc29yX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIHZpc29yX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCB2aXNvcl90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIHZpc29yX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50ICB2aXNvcl9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIGludCAgdmlzb3JfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgdm9pZCB2aXNvcl9zaHV0ZG93bgkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICB2aXNvcl9pb2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQgdmlzb3Jfd3JpdGVfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkIHZpc29yX3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkIHZpc29yX3JlYWRfaW50X2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIGludCAgY2xpZV8zXzVfc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICB0cmVvX2F0dGFjaAkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCBjbGllXzVfYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBpbnQgcGFsbV9vc18zX3Byb2JlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBwYWxtX29zXzRfcHJvYmUgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB2aXNvcl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIHZpc29yX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIHZpc29yX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgdmlzb3JfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgIGNsaWVfM181X3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICB0cmVvX2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgY2xpZV81X2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgcGFsbV9vc18zX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IHBhbG1fb3NfNF9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogCiAvKiBQYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIHBhc3NlZCBpbnRvIHRoZSBtb2R1bGUuICovCiBzdGF0aWMgaW50IGRlYnVnOwpAQCAtMTA1LDEzICsxMTAsMTMgQEAKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKIAl7IFVTQl9ERVZJQ0UoQUNFUl9WRU5ET1JfSUQsIEFDRVJfUzEwX0lEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKLQl7IFVTQl9ERVZJQ0UoU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfU0NIX0kzMzBfSUQpLCAKKwl7IFVTQl9ERVZJQ0UoU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfU0NIX0kzMzBfSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAotCXsgVVNCX0RFVklDRShTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19TUEhfSTUwMF9JRCksIAorCXsgVVNCX0RFVklDRShTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19TUEhfSTUwMF9JRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCiAJeyBVU0JfREVWSUNFKFRBUFdBVkVfVkVORE9SX0lELCBUQVBXQVZFX1pPRElBQ19JRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCi0JeyBVU0JfREVWSUNFKEdBUk1JTl9WRU5ET1JfSUQsIEdBUk1JTl9JUVVFXzM2MDBfSUQpLCAKKwl7IFVTQl9ERVZJQ0UoR0FSTUlOX1ZFTkRPUl9JRCwgR0FSTUlOX0lRVUVfMzYwMF9JRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCiAJeyBVU0JfREVWSUNFKEFDRUVDQV9WRU5ET1JfSUQsIEFDRUVDQV9NRVoxMDAwX0lEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKQEAgLTE3MCw3ICsxNzUsNyBAQAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZpc29yX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidmlzb3IiLApAQCAtMTgwLDcgKzE4NSw4IEBACiAJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKLS8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgSGFuZHNwcmluZyBWaXNvciwgYW5kIFBhbG0gNC4wIGRldmljZXMgKi8KKy8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgSGFuZHNwcmluZyBWaXNvciwKKyAgIGFuZCBQYWxtIDQuMCBkZXZpY2VzICovCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGhhbmRzcHJpbmdfZGV2aWNlID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lciA9CVRISVNfTU9EVUxFLApAQCAtMTk4LDEwICsyMDQsOCBAQAogCS5wcm9iZSA9CQl2aXNvcl9wcm9iZSwKIAkuY2FsY19udW1fcG9ydHMgPQl2aXNvcl9jYWxjX251bV9wb3J0cywKIAkuc2h1dGRvd24gPQkJdmlzb3Jfc2h1dGRvd24sCi0JLmlvY3RsID0JCXZpc29yX2lvY3RsLAogCS53cml0ZSA9CQl2aXNvcl93cml0ZSwKIAkud3JpdGVfcm9vbSA9CQl2aXNvcl93cml0ZV9yb29tLAotCS5jaGFyc19pbl9idWZmZXIgPQl2aXNvcl9jaGFyc19pbl9idWZmZXIsCiAJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQl2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrLAogCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQl2aXNvcl9yZWFkX2J1bGtfY2FsbGJhY2ssCiAJLnJlYWRfaW50X2NhbGxiYWNrID0Jdmlzb3JfcmVhZF9pbnRfY2FsbGJhY2ssCkBAIC0yMjUsMTAgKzIyOSw4IEBACiAJLnByb2JlID0JCXZpc29yX3Byb2JlLAogCS5jYWxjX251bV9wb3J0cyA9CXZpc29yX2NhbGNfbnVtX3BvcnRzLAogCS5zaHV0ZG93biA9CQl2aXNvcl9zaHV0ZG93biwKLQkuaW9jdGwgPQkJdmlzb3JfaW9jdGwsCiAJLndyaXRlID0JCXZpc29yX3dyaXRlLAogCS53cml0ZV9yb29tID0JCXZpc29yX3dyaXRlX3Jvb20sCi0JLmNoYXJzX2luX2J1ZmZlciA9CXZpc29yX2NoYXJzX2luX2J1ZmZlciwKIAkud3JpdGVfYnVsa19jYWxsYmFjayA9CXZpc29yX3dyaXRlX2J1bGtfY2FsbGJhY2ssCiAJLnJlYWRfYnVsa19jYWxsYmFjayA9CXZpc29yX3JlYWRfYnVsa19jYWxsYmFjaywKIAkucmVhZF9pbnRfY2FsbGJhY2sgPQl2aXNvcl9yZWFkX2ludF9jYWxsYmFjaywKQEAgLTI0OSwxMCArMjUxLDggQEAKIAkudGhyb3R0bGUgPQkJdmlzb3JfdGhyb3R0bGUsCiAJLnVudGhyb3R0bGUgPQkJdmlzb3JfdW50aHJvdHRsZSwKIAkuYXR0YWNoID0JCWNsaWVfM181X3N0YXJ0dXAsCi0JLmlvY3RsID0JCXZpc29yX2lvY3RsLAogCS53cml0ZSA9CQl2aXNvcl93cml0ZSwKIAkud3JpdGVfcm9vbSA9CQl2aXNvcl93cml0ZV9yb29tLAotCS5jaGFyc19pbl9idWZmZXIgPQl2aXNvcl9jaGFyc19pbl9idWZmZXIsCiAJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQl2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrLAogCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQl2aXNvcl9yZWFkX2J1bGtfY2FsbGJhY2ssCiB9OwpAQCAtMjc0LDcgKzI3NCw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBIYW5kc3ByaW5nIFZpc29yIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHZpc29yX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCB2aXNvcl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCQkJc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTMwMCw0MiArMzAxLDQ1IEBACiAJICogdGhyb3VnaCwgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIChsaWtlCiAJICogd2l0aCBPSENJKSBkYXRhIGNhbiBnZXQgbG9zdC4KIAkgKi8KLQlpZiAocG9ydC0+dHR5KQotCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKwlpZiAodHR5KQorCQl0dHktPmxvd19sYXRlbmN5ID0gMTsKIAogCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCi0JdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKLQkJCSAgIHVzYl9yY3ZidWxrcGlwZSAoc2VyaWFsLT5kZXYsIAorCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKIAkJCQkJICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKIAkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCSAgIHZpc29yX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQlnb3RvIGV4aXQ7CiAJfQotCQorCiAJaWYgKHBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKIAkJZGJnKCIlcyAtIGFkZGluZyBpbnRlcnJ1cHQgaW5wdXQgZm9yIHRyZW8iLCBfX2Z1bmNfXyk7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAocmVzdWx0KQotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiLCBlcnJvciAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSAgICAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAl9Ci1leGl0OgkKK2V4aXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogCi1zdGF0aWMgdm9pZCB2aXNvcl9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIHZvaWQgdmlzb3JfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB2aXNvcl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JCQkgCisKIAkvKiBzaHV0ZG93biBvdXIgdXJicyAqLwogCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CiAJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwpAQCAtMzQzLDE0ICszNDcsMTQgQEAKIAltdXRleF9sb2NrKCZwb3J0LT5zZXJpYWwtPmRpc2NfbXV0ZXgpOwogCWlmICghcG9ydC0+c2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKIAkJLyogVHJ5IHRvIHNlbmQgc2h1dGRvd24gbWVzc2FnZSwgdW5sZXNzIHRoZSBkZXZpY2UgaXMgZ29uZSAqLwotCQl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAoMHgxMiwgR0ZQX0tFUk5FTCk7CisJCXRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jKDB4MTIsIEdGUF9LRVJORUwpOwogCQlpZiAodHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQl1c2JfY29udHJvbF9tc2cgKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCQkgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKIAkJCQkJIFZJU09SX0NMT1NFX05PVElGSUNBVElPTiwgMHhjMiwKIAkJCQkJIDB4MDAwMCwgMHgwMDAwLAogCQkJCQkgdHJhbnNmZXJfYnVmZmVyLCAweDEyLCAzMDApOwotCQkJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJCQlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOwogCQl9CiAJfQogCW11dGV4X3VubG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKQEAgLTM2MSw3ICszNjUsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgdmlzb3Jfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorc3RhdGljIGludCB2aXNvcl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtMzgxLDcgKzM4Niw3IEBACiAJcHJpdi0+b3V0c3RhbmRpbmdfdXJicysrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWJ1ZmZlciA9IGttYWxsb2MgKGNvdW50LCBHRlBfQVRPTUlDKTsKKwlidWZmZXIgPSBrbWFsbG9jKGNvdW50LCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZmZlcikgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJY291bnQgPSAtRU5PTUVNOwpAQCAtMzk1LDIxICs0MDAsMjIgQEAKIAkJZ290byBlcnJvcl9ub191cmI7CiAJfQogCi0JbWVtY3B5IChidWZmZXIsIGJ1ZiwgY291bnQpOworCW1lbWNweShidWZmZXIsIGJ1ZiwgY291bnQpOwogCiAJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIGJ1ZmZlcik7CiAKLQl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBzZXJpYWwtPmRldiwKLQkJCSAgIHVzYl9zbmRidWxrcGlwZSAoc2VyaWFsLT5kZXYsCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKIAkJCQkJICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCi0JCQkgICBidWZmZXIsIGNvdW50LCAKKwkJCSAgIGJ1ZmZlciwgY291bnQsCiAJCQkgICB2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAogCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLwogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkXG4iLAotCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJICAgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCWNvdW50ID0gc3RhdHVzOwogCQlnb3RvIGVycm9yOwogCX0gZWxzZSB7CkBAIC00MzUsOCArNDQxLDkgQEAKIH0KIAogCi1zdGF0aWMgaW50IHZpc29yX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHZpc29yX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC00NjAsMjMgKzQ2Nyw3IEBACiB9CiAKIAotc3RhdGljIGludCB2aXNvcl9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCS8qIAotCSAqIFdlIGNhbid0IHJlYWxseSBhY2NvdW50IGZvciBob3cgbXVjaCBkYXRhIHdlCi0JICogaGF2ZSBzZW50IG91dCwgYnV0IGhhc24ndCBtYWRlIGl0IHRocm91Z2ggdG8gdGhlCi0JICogZGV2aWNlLCBzbyBqdXN0IHRlbGwgdGhlIHR0eSBsYXllciB0aGF0IGV2ZXJ5dGhpbmcKLQkgKiBpcyBmbHVzaGVkLgotCSAqCi0JICogRklYTUU6IFNob3VsZCB3YWxrIG91dHN0YW5kaW5nX3VyYnMKLQkgKi8KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCB2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCB2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCB2aXNvcl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtNDg0LDcgKzQ3NSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLwotCWtmcmVlICh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtNTAwLDcgKzQ5MSw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCB2aXNvcl9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC01MTgsMTEgKzUwOSwxMyBAQAogCQlyZXR1cm47CiAJfQogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAorCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAotCXR0eSA9IHBvcnQtPnR0eTsKKwl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQlhdmFpbGFibGVfcm9vbSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJYXZhaWxhYmxlX3Jvb20gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksCisJCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJaWYgKGF2YWlsYWJsZV9yb29tKSB7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgYXZhaWxhYmxlX3Jvb20pOwogCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKQEAgLTUzNiwyMiArNTI5LDIzIEBACiAKIAkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgaWYgd2Ugc2hvdWxkICovCiAJaWYgKCFwcml2LT50aHJvdHRsZWQpIHsKLQkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCSAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKLQkJCQkJCSAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkJICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAogCQkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCiAJCQkJICAgdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KQotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7Ci0JfSBlbHNlIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSAgICAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9IGVsc2UKIAkJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gMTsKLQl9CiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCB2aXNvcl9yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgdmlzb3JfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwpAQCAtNTg1LDE0ICs1NzksMTYgQEAKIAkJCSAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCiBleGl0OgotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiXG4iLAotCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkJIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogfQogCi1zdGF0aWMgdm9pZCB2aXNvcl90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHZpc29yX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNjAzLDggKzU5OSw5IEBACiB9CiAKIAotc3RhdGljIHZvaWQgdmlzb3JfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHZpc29yX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXN1bHQ7CkBAIC02MTgsMTAgKzYxNSwxMyBAQAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBpbnQgcGFsbV9vc18zX3Byb2JlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHBhbG1fb3NfM19wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZXJpYWwtPmRldi0+ZGV2OwogCXN0cnVjdCB2aXNvcl9jb25uZWN0aW9uX2luZm8gKmNvbm5lY3Rpb25faW5mbzsKQEAgLTYzMyw3ICs2MzMsNyBAQAogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAotCXRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKHNpemVvZiAoKmNvbm5lY3Rpb25faW5mbyksIEdGUF9LRVJORUwpOworCXRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKCpjb25uZWN0aW9uX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgewogCQlkZXZfZXJyKGRldiwgIiVzIC0ga21hbGxvYyglWmQpIGZhaWxlZC5cbiIsIF9fZnVuY19fLAogCQkJc2l6ZW9mKCpjb25uZWN0aW9uX2luZm8pKTsKQEAgLTY0MSw3ICs2NDEsNyBAQAogCX0KIAogCS8qIHNlbmQgYSBnZXQgY29ubmVjdGlvbiBpbmZvIHJlcXVlc3QgKi8KLQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LAorCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKIAkJCQkgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQkJICBWSVNPUl9HRVRfQ09OTkVDVElPTl9JTkZPUk1BVElPTiwKIAkJCQkgIDB4YzIsIDB4MDAwMCwgMHgwMDAwLCB0cmFuc2Zlcl9idWZmZXIsCkBAIC02NTMsMjkgKzY1MywzMSBAQAogCX0KIAogCWlmIChyZXR2YWwgPT0gc2l6ZW9mKCpjb25uZWN0aW9uX2luZm8pKSB7Ci0JICAgICAgICBjb25uZWN0aW9uX2luZm8gPSAoc3RydWN0IHZpc29yX2Nvbm5lY3Rpb25faW5mbyAqKXRyYW5zZmVyX2J1ZmZlcjsKKwkJCWNvbm5lY3Rpb25faW5mbyA9IChzdHJ1Y3Qgdmlzb3JfY29ubmVjdGlvbl9pbmZvICopCisJCQkJCQkJdHJhbnNmZXJfYnVmZmVyOwogCiAJCW51bV9wb3J0cyA9IGxlMTZfdG9fY3B1KGNvbm5lY3Rpb25faW5mby0+bnVtX3BvcnRzKTsKIAkJZm9yIChpID0gMDsgaSA8IG51bV9wb3J0czsgKytpKSB7Ci0JCQlzd2l0Y2ggKGNvbm5lY3Rpb25faW5mby0+Y29ubmVjdGlvbnNbaV0ucG9ydF9mdW5jdGlvbl9pZCkgewotCQkJCWNhc2UgVklTT1JfRlVOQ1RJT05fR0VORVJJQzoKLQkJCQkJc3RyaW5nID0gIkdlbmVyaWMiOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFZJU09SX0ZVTkNUSU9OX0RFQlVHR0VSOgotCQkJCQlzdHJpbmcgPSAiRGVidWdnZXIiOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFZJU09SX0ZVTkNUSU9OX0hPVFNZTkM6Ci0JCQkJCXN0cmluZyA9ICJIb3RTeW5jIjsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBWSVNPUl9GVU5DVElPTl9DT05TT0xFOgotCQkJCQlzdHJpbmcgPSAiQ29uc29sZSI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVklTT1JfRlVOQ1RJT05fUkVNT1RFX0ZJTEVfU1lTOgotCQkJCQlzdHJpbmcgPSAiUmVtb3RlIEZpbGUgU3lzdGVtIjsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJc3RyaW5nID0gInVua25vd24iOwotCQkJCQlicmVhazsKKwkJCXN3aXRjaCAoCisJCQkgICBjb25uZWN0aW9uX2luZm8tPmNvbm5lY3Rpb25zW2ldLnBvcnRfZnVuY3Rpb25faWQpIHsKKwkJCWNhc2UgVklTT1JfRlVOQ1RJT05fR0VORVJJQzoKKwkJCQlzdHJpbmcgPSAiR2VuZXJpYyI7CisJCQkJYnJlYWs7CisJCQljYXNlIFZJU09SX0ZVTkNUSU9OX0RFQlVHR0VSOgorCQkJCXN0cmluZyA9ICJEZWJ1Z2dlciI7CisJCQkJYnJlYWs7CisJCQljYXNlIFZJU09SX0ZVTkNUSU9OX0hPVFNZTkM6CisJCQkJc3RyaW5nID0gIkhvdFN5bmMiOworCQkJCWJyZWFrOworCQkJY2FzZSBWSVNPUl9GVU5DVElPTl9DT05TT0xFOgorCQkJCXN0cmluZyA9ICJDb25zb2xlIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVklTT1JfRlVOQ1RJT05fUkVNT1RFX0ZJTEVfU1lTOgorCQkJCXN0cmluZyA9ICJSZW1vdGUgRmlsZSBTeXN0ZW0iOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdHJpbmcgPSAidW5rbm93biI7CisJCQkJYnJlYWs7CiAJCQl9CiAJCQlkZXZfaW5mbyhkZXYsICIlczogcG9ydCAlZCwgaXMgZm9yICVzIHVzZVxuIiwKIAkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLApAQCAtNjg2LDExICs2ODgsMTEgQEAKIAkqIEhhbmRsZSBkZXZpY2VzIHRoYXQgcmVwb3J0IGludmFsaWQgc3R1ZmYgaGVyZS4KIAkqLwogCWlmIChudW1fcG9ydHMgPT0gMCB8fCBudW1fcG9ydHMgPiAyKSB7Ci0JCWRldl93YXJuIChkZXYsICIlczogTm8gdmFsaWQgY29ubmVjdCBpbmZvIGF2YWlsYWJsZVxuIiwKKwkJZGV2X3dhcm4oZGV2LCAiJXM6IE5vIHZhbGlkIGNvbm5lY3QgaW5mbyBhdmFpbGFibGVcbiIsCiAJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKIAkJbnVtX3BvcnRzID0gMjsKIAl9Ci0gIAorCiAJZGV2X2luZm8oZGV2LCAiJXM6IE51bWJlciBvZiBwb3J0czogJWRcbiIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sCiAJCW51bV9wb3J0cyk7CiAKQEAgLTcwMCw4ICs3MDIsOSBAQAogCSAqLwogCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKShsb25nKW51bV9wb3J0cyk7CiAKLQkvKiBhc2sgZm9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCBidXQgaWdub3JlIHRoZSByZXNwb25zZSBhcyBpdCBpcyBicm9rZW4gKi8KLQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LAorCS8qIGFzayBmb3IgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIGJ1dCBpZ25vcmUgdGhlCisJICAgcmVzcG9uc2UgYXMgaXQgaXMgYnJva2VuICovCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAogCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCQkgIFZJU09SX1JFUVVFU1RfQllURVNfQVZBSUxBQkxFLAogCQkJCSAgMHhjMiwgMHgwMDAwLCAweDAwMDUsIHRyYW5zZmVyX2J1ZmZlciwKQEAgLTcxMiwxMiArNzE1LDEzIEBACiAJcmV0dmFsID0gMDsKIAogZXhpdDoKLQlrZnJlZSAodHJhbnNmZXJfYnVmZmVyKTsKKwlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBwYWxtX29zXzRfcHJvYmUgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgcGFsbV9vc180X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+ZGV2LT5kZXY7CiAJc3RydWN0IHBhbG1fZXh0X2Nvbm5lY3Rpb25faW5mbyAqY29ubmVjdGlvbl9pbmZvOwpAQCAtNzI2LDE4ICs3MzAsMTggQEAKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKLQl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAoc2l6ZW9mICgqY29ubmVjdGlvbl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2Moc2l6ZW9mKCpjb25uZWN0aW9uX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgewogCQlkZXZfZXJyKGRldiwgIiVzIC0ga21hbGxvYyglWmQpIGZhaWxlZC5cbiIsIF9fZnVuY19fLAogCQkJc2l6ZW9mKCpjb25uZWN0aW9uX2luZm8pKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwKLQkJCQkgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIAorCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQkJICBQQUxNX0dFVF9FWFRfQ09OTkVDVElPTl9JTkZPUk1BVElPTiwKIAkJCQkgIDB4YzIsIDB4MDAwMCwgMHgwMDAwLCB0cmFuc2Zlcl9idWZmZXIsCi0JCQkJICBzaXplb2YgKCpjb25uZWN0aW9uX2luZm8pLCAzMDApOworCQkJCSAgc2l6ZW9mKCpjb25uZWN0aW9uX2luZm8pLCAzMDApOwogCWlmIChyZXR2YWwgPCAwKQogCQlkZXZfZXJyKGRldiwgIiVzIC0gZXJyb3IgJWQgZ2V0dGluZyBjb25uZWN0aW9uIGluZm9cbiIsCiAJCQlfX2Z1bmNfXywgcmV0dmFsKTsKQEAgLTc0NSwxNSArNzQ5LDE3IEBACiAJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnNlcmlhbC0+ZGV2LT5kZXYsIF9fZnVuY19fLAogCQkJCSAgICAgIHJldHZhbCwgdHJhbnNmZXJfYnVmZmVyKTsKIAotCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCB2aXNvcl9wcm9iZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCB2aXNvcl9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IHJldHZhbCA9IDA7Ci0JaW50ICgqc3RhcnR1cCkgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisJaW50ICgqc3RhcnR1cCkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKQEAgLTc3MSw3ICs3NzcsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgdmlzb3JfY2FsY19udW1fcG9ydHMgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgaW50IHZpc29yX2NhbGNfbnVtX3BvcnRzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IG51bV9wb3J0cyA9IChpbnQpKGxvbmcpKHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKSk7CiAKQEAgLTc4OCw3ICs3OTQsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKLQkJcHJpdiA9IGt6YWxsb2MgKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCQlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwcml2KSB7CiAJCQl3aGlsZSAoaS0tICE9IDApIHsKIAkJCQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnRzW2ldKTsKQEAgLTgwMyw3ICs4MDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNsaWVfM181X3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgaW50IGNsaWVfM181X3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2VyaWFsLT5kZXYtPmRldjsKIAlpbnQgcmVzdWx0OwpAQCAtODE2LDYyICs4MjIsNzIgQEAKIAkgKi8KIAogCS8qIGdldCB0aGUgY29uZmlnIG51bWJlciAqLwotCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJCSAgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTiwgVVNCX0RJUl9JTiwKIAkJCQkgIDAsIDAsICZkYXRhLCAxLCAzMDAwKTsKIAlpZiAocmVzdWx0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgIiVzOiBnZXQgY29uZmlnIG51bWJlciBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycihkZXYsICIlczogZ2V0IGNvbmZpZyBudW1iZXIgZmFpbGVkOiAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAJaWYgKHJlc3VsdCAhPSAxKSB7Ci0JCWRldl9lcnIoZGV2LCAiJXM6IGdldCBjb25maWcgbnVtYmVyIGJhZCByZXR1cm4gbGVuZ3RoOiAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoZGV2LCAiJXM6IGdldCBjb25maWcgbnVtYmVyIGJhZCByZXR1cm4gbGVuZ3RoOiAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogZ2V0IHRoZSBpbnRlcmZhY2UgbnVtYmVyICovCi0JcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCQkgIFVTQl9SRVFfR0VUX0lOVEVSRkFDRSwgCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSAgVVNCX1JFUV9HRVRfSU5URVJGQUNFLAogCQkJCSAgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCiAJCQkJICAwLCAwLCAmZGF0YSwgMSwgMzAwMCk7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJZGV2X2VycihkZXYsICIlczogZ2V0IGludGVyZmFjZSBudW1iZXIgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoZGV2LCAiJXM6IGdldCBpbnRlcmZhY2UgbnVtYmVyIGZhaWxlZDogJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCWlmIChyZXN1bHQgIT0gMSkgewotCQlkZXZfZXJyKGRldiwgIiVzOiBnZXQgaW50ZXJmYWNlIG51bWJlciBiYWQgcmV0dXJuIGxlbmd0aDogJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKGRldiwKKwkJCSIlczogZ2V0IGludGVyZmFjZSBudW1iZXIgYmFkIHJldHVybiBsZW5ndGg6ICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlyZXR1cm4gZ2VuZXJpY19zdGFydHVwKHNlcmlhbCk7CiB9Ci0gCi1zdGF0aWMgaW50IHRyZW9fYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorCitzdGF0aWMgaW50IHRyZW9fYXR0YWNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqc3dhcF9wb3J0OwogCiAJLyogT25seSBkbyB0aGlzIGVuZHBvaW50IGhhY2sgZm9yIHRoZSBIYW5kc3ByaW5nIGRldmljZXMgd2l0aAogCSAqIGludGVycnVwdCBpbiBlbmRwb2ludHMsIHdoaWNoIGZvciBub3cgYXJlIHRoZSBUcmVvIGRldmljZXMuICovCi0JaWYgKCEoKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBIQU5EU1BSSU5HX1ZFTkRPUl9JRCkgfHwKLQkgICAgICAobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IEtZT0NFUkFfVkVORE9SX0lEKSkgfHwKLQkgICAgKHNlcmlhbC0+bnVtX2ludGVycnVwdF9pbiA9PSAwKSkKKwlpZiAoISgobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpCisJCQkJCQk9PSBIQU5EU1BSSU5HX1ZFTkRPUl9JRCkgfHwKKwkJKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKQorCQkJCQkJPT0gS1lPQ0VSQV9WRU5ET1JfSUQpKSB8fAorCQkoc2VyaWFsLT5udW1faW50ZXJydXB0X2luID09IDApKQogCQlnb3RvIGdlbmVyaWNfc3RhcnR1cDsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAkvKgotCSogSXQgYXBwZWFycyB0aGF0IFRyZW9zIGFuZCBLeW9jZXJhcyB3YW50IHRvIHVzZSB0aGUgCi0JKiAxc3QgYnVsayBpbiBlbmRwb2ludCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSAybmQgYnVsayBvdXQgZW5kcG9pbnQsIAotCSogc28gbGV0J3Mgc3dhcCB0aGUgMXN0IGFuZCAybmQgYnVsayBpbiBhbmQgaW50ZXJydXB0IGVuZHBvaW50cy4gIAotCSogTm90ZSB0aGF0IHN3YXBwaW5nIHRoZSBidWxrIG91dCBlbmRwb2ludHMgd291bGQgYnJlYWsgbG90cyBvZiAKKwkqIEl0IGFwcGVhcnMgdGhhdCBUcmVvcyBhbmQgS3lvY2VyYXMgd2FudCB0byB1c2UgdGhlCisJKiAxc3QgYnVsayBpbiBlbmRwb2ludCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSAybmQgYnVsayBvdXQgZW5kcG9pbnQsCisJKiBzbyBsZXQncyBzd2FwIHRoZSAxc3QgYW5kIDJuZCBidWxrIGluIGFuZCBpbnRlcnJ1cHQgZW5kcG9pbnRzLgorCSogTm90ZSB0aGF0IHN3YXBwaW5nIHRoZSBidWxrIG91dCBlbmRwb2ludHMgd291bGQgYnJlYWsgbG90cyBvZgogCSogYXBwcyB0aGF0IHdhbnQgdG8gY29tbXVuaWNhdGUgb24gdGhlIHNlY29uZCBwb3J0LgogCSovCiAjZGVmaW5lIENPUFlfUE9SVChkZXN0LCBzcmMpCQkJCQkJXAotCWRlc3QtPnJlYWRfdXJiID0gc3JjLT5yZWFkX3VyYjsJCQkJCVwKLQlkZXN0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyA9IHNyYy0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CVwKLQlkZXN0LT5idWxrX2luX2J1ZmZlciA9IHNyYy0+YnVsa19pbl9idWZmZXI7CQkJXAotCWRlc3QtPmludGVycnVwdF9pbl91cmIgPSBzcmMtPmludGVycnVwdF9pbl91cmI7CQkJXAotCWRlc3QtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPSBzcmMtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CVwKLQlkZXN0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0gc3JjLT5pbnRlcnJ1cHRfaW5fYnVmZmVyOworCWRvIHsgXAorCQlkZXN0LT5yZWFkX3VyYiA9IHNyYy0+cmVhZF91cmI7CQkJCVwKKwkJZGVzdC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MgPSBzcmMtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzO1wKKwkJZGVzdC0+YnVsa19pbl9idWZmZXIgPSBzcmMtPmJ1bGtfaW5fYnVmZmVyOwkJXAorCQlkZXN0LT5pbnRlcnJ1cHRfaW5fdXJiID0gc3JjLT5pbnRlcnJ1cHRfaW5fdXJiOwkJXAorCQlkZXN0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzID0gXAorCQkJCQlzcmMtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7XAorCQlkZXN0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0gc3JjLT5pbnRlcnJ1cHRfaW5fYnVmZmVyOwlcCisJfSB3aGlsZSAoMCk7CiAKIAlzd2FwX3BvcnQgPSBrbWFsbG9jKHNpemVvZigqc3dhcF9wb3J0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzd2FwX3BvcnQpCkBAIC04ODUsMjggKzkwMSwzMCBAQAogCXJldHVybiBnZW5lcmljX3N0YXJ0dXAoc2VyaWFsKTsKIH0KIAotc3RhdGljIGludCBjbGllXzVfYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCBjbGllXzVfYXR0YWNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAotCS8qIFRINTUgcmVnaXN0ZXJzIDIgcG9ydHMuIAotCSAgIENvbW11bmljYXRpb24gaW4gZnJvbSB0aGUgVVg1MC9USDU1IHVzZXMgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MgZnJvbSBwb3J0IDAgCi0JICAgQ29tbXVuaWNhdGlvbiBvdXQgdG8gdGhlIFVYNTAvVEg1NSB1c2VzIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyBmcm9tIHBvcnQgMSAKLQkgICAKKwkvKiBUSDU1IHJlZ2lzdGVycyAyIHBvcnRzLgorCSAgIENvbW11bmljYXRpb24gaW4gZnJvbSB0aGUgVVg1MC9USDU1IHVzZXMgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MKKwkgICBmcm9tIHBvcnQgMC4gQ29tbXVuaWNhdGlvbiBvdXQgdG8gdGhlIFVYNTAvVEg1NSB1c2VzCisJICAgYnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzIGZyb20gcG9ydCAxCisKIAkgICBMZXRzIGRvIGEgcXVpY2sgYW5kIGRpcnR5IG1hcHBpbmcKIAkgKi8KLQkKKwogCS8qIHNvbWUgc2FuaXR5IGNoZWNrICovCiAJaWYgKHNlcmlhbC0+bnVtX3BvcnRzIDwgMikKIAkJcmV0dXJuIC0xOwotCQkKKwogCS8qIHBvcnQgMCBub3cgdXNlcyB0aGUgbW9kaWZpZWQgZW5kcG9pbnQgQWRkcmVzcyAqLwotCXNlcmlhbC0+cG9ydFswXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID0gc2VyaWFsLT5wb3J0WzFdLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3M7CisJc2VyaWFsLT5wb3J0WzBdLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MgPQorCQkJCXNlcmlhbC0+cG9ydFsxXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzOwogCiAJcmV0dXJuIGdlbmVyaWNfc3RhcnR1cChzZXJpYWwpOwogfQogCi1zdGF0aWMgdm9pZCB2aXNvcl9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyB2b2lkIHZpc29yX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXY7CiAJaW50IGk7CkBAIC05MjIsMzcgKzk0MCwzNSBAQAogCX0KIH0KIAotc3RhdGljIGludCB2aXNvcl9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlkYmcoIiVzIC0gcG9ydCAlZCwgY21kIDB4JS40eCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7Ci0KLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCB2aXNvcl9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdmlzb3JfaW5pdCh2b2lkKQogewogCWludCBpLCByZXR2YWw7CiAJLyogT25seSBpZiBwYXJhbWV0ZXJzIHdlcmUgcGFzc2VkIHRvIHVzICovCi0JaWYgKCh2ZW5kb3I+MCkgJiYgKHByb2R1Y3Q+MCkpIHsKLQkJc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2Rldl90ZW1wW109Ci0JCQl7e1VTQl9ERVZJQ0UodmVuZG9yLCBwcm9kdWN0KSwKLQkJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH19OworCWlmICh2ZW5kb3IgPiAwICYmIHByb2R1Y3QgPiAwKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9kZXZfdGVtcFtdID0geworCQkJeworCQkJCVVTQl9ERVZJQ0UodmVuZG9yLCBwcm9kdWN0KSwKKwkJCQkuZHJpdmVyX2luZm8gPQorCQkJCQkoa2VybmVsX3Vsb25nX3QpICZwYWxtX29zXzRfcHJvYmUKKwkJCX0KKwkJfTsKIAogCQkvKiBGaW5kIHRoZSBsYXN0IGVudHJ5IGluIGlkX3RhYmxlICovCi0JCWZvciAoaT0wOyA7IGkrKykgewotCQkJaWYgKGlkX3RhYmxlW2ldLmlkVmVuZG9yPT0wKSB7CisJCWZvciAoaSA9IDA7OyBpKyspIHsKKwkJCWlmIChpZF90YWJsZVtpXS5pZFZlbmRvciA9PSAwKSB7CiAJCQkJaWRfdGFibGVbaV0gPSB1c2JfZGV2X3RlbXBbMF07CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJLyogRmluZCB0aGUgbGFzdCBlbnRyeSBpbiBpZF90YWJsZV9jb21iaW5lZCAqLwotCQlmb3IgKGk9MDsgOyBpKyspIHsKLQkJCWlmIChpZF90YWJsZV9jb21iaW5lZFtpXS5pZFZlbmRvcj09MCkgeworCQlmb3IgKGkgPSAwOzsgaSsrKSB7CisJCQlpZiAoaWRfdGFibGVfY29tYmluZWRbaV0uaWRWZW5kb3IgPT0gMCkgewogCQkJCWlkX3RhYmxlX2NvbWJpbmVkW2ldID0gdXNiX2Rldl90ZW1wWzBdOwogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCWluZm8oIlVudGVzdGVkIFVTQiBkZXZpY2Ugc3BlY2lmaWVkIGF0IHRpbWUgb2YgbW9kdWxlIGluc2VydGlvbiIpOworCQlpbmZvKAorCQkgICJVbnRlc3RlZCBVU0IgZGV2aWNlIHNwZWNpZmllZCBhdCB0aW1lIG9mIG1vZHVsZSBpbnNlcnRpb24iKTsKIAkJaW5mbygiV2FybmluZzogVGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrIik7CiAJCWluZm8oIlVzaW5nIGEgbmV3ZXIga2VybmVsIGlzIHByZWZlcnJlZCB0byB0aGlzIG1ldGhvZCIpOwogCQlpbmZvKCJBZGRpbmcgUGFsbSBPUyBwcm90b2NvbCA0Lnggc3VwcG9ydCBmb3IgdW5rbm93biBkZXZpY2U6IDB4JXgvMHgleCIsCkBAIC05NjgsNyArOTg0LDcgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF9jbGllXzVfcmVnaXN0ZXI7CiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ2aXNvcl9kcml2ZXIpOwotCWlmIChyZXR2YWwpIAorCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAlpbmZvKERSSVZFUl9ERVNDKTsKIApAQCAtOTg2LDE4ICsxMDAyLDE4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2aXNvcl9leGl0ICh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgmdmlzb3JfZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZoYW5kc3ByaW5nX2RldmljZSk7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmY2xpZV8zXzVfZGV2aWNlKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjbGllXzVfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3Rlcigmdmlzb3JfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmhhbmRzcHJpbmdfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmNsaWVfM181X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjbGllXzVfZGV2aWNlKTsKIH0KIAogCiBtb2R1bGVfaW5pdCh2aXNvcl9pbml0KTsKIG1vZHVsZV9leGl0KHZpc29yX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKaW5kZXggNjY1YWE3Ny4uM2E5ZDE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpAQCAtMTIsMjkgKzEyLDMxIEBACiAgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzCisgKiBkcml2ZXIKICAqCiAgKiAoMTAvMDkvMjAwMikgU3R1YXJ0IE1hY0RvbmFsZCAoc3R1YXJ0bUBjb25uZWN0dGVjaC5jb20pCiAgKglVcGdyYWRlIHRvIGZ1bGwgd29ya2luZyBkcml2ZXIKICAqCiAgKiAoMDUvMzAvMjAwMSkgZ2toCi0gKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZgorICoJcHJvYmxlbXMuCiAgKgogICogKDA0LzA4LzIwMDEpIGdiCiAgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgotICogCisgKgogICogMjAwMV9NYXJfMTkgZ2toCi0gKglGaXhlZCBNT0RfSU5DIGFuZCBNT0RfREVDIGxvZ2ljLCB0aGUgYWJpbGl0eSB0byBvcGVuIGEgcG9ydCBtb3JlIAorICoJRml4ZWQgTU9EX0lOQyBhbmQgTU9EX0RFQyBsb2dpYywgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIHBvcnQgbW9yZQogICoJdGhhbiBvbmNlLCBhbmQgdGhlIGdvdCB0aGUgcHJvcGVyIHVzYl9kZXZpY2VfaWQgdGFibGUgZW50cmllcyBzbwogICoJdGhlIGRyaXZlciB3b3JrcyBhZ2Fpbi4KICAqCiAgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCiAgKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKLSAqIAorICoKICAqICgxMC8wNS8yMDAwKSBna2gKICAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKICAqCWNvcmUgbmVlZHMgaXQuCi0gKiAKKyAqCiAgKiAoMTAvMDMvMjAwMCkgc21kCiAgKglmaXJtd2FyZSBpcyBpbXByb3ZlZCB0byBndWFyZCBhZ2FpbnN0IGNyYXAgc2VudCB0byBkZXZpY2UKICAqCWZpcm13YXJlIG5vdyByZXBsaWVzIENNRF9GQUlMVVJFIG9uIGJhZCB0aGluZ3MKQEAgLTUyLDkgKzU0LDkgQEAKICAqCUZpeGVkIGJ1ZyB3aXRoIHBvcnQtPm1pbm9yIHRoYXQgd2FzIGZvdW5kIGJ5IEFsIEJvcmNoZXJzCiAgKgogICogKDA3LzA0LzIwMDApIGdraAotICoJQWRkZWQgc3VwcG9ydCBmb3IgcG9ydCBzZXR0aW5ncy4gQmF1ZCByYXRlIGNhbiBub3cgYmUgY2hhbmdlZC4gTGluZSBzaWduYWxzCi0gKglhcmUgbm90IHRyYW5zZmVycmVkIHRvIGFuZCBmcm9tIHRoZSB0dHkgbGF5ZXIgeWV0LCBidXQgdGhpbmdzIHNlZW0gdG8gYmUgCi0gKgl3b3JraW5nIHdlbGwgbm93LgorICoJQWRkZWQgc3VwcG9ydCBmb3IgcG9ydCBzZXR0aW5ncy4gQmF1ZCByYXRlIGNhbiBub3cgYmUgY2hhbmdlZC4gTGluZQorICoJc2lnbmFscyBhcmUgbm90IHRyYW5zZmVycmVkIHRvIGFuZCBmcm9tIHRoZSB0dHkgbGF5ZXIgeWV0LCBidXQgdGhpbmdzCisgKglzZWVtIHRvIGJlIHdvcmtpbmcgd2VsbCBub3cuCiAgKgogICogKDA1LzA0LzIwMDApIGdraAogICoJRmlyc3QgY3V0IGF0IG9wZW4gYW5kIGNsb3NlIGNvbW1hbmRzLiBEYXRhIGNhbiBmbG93IHRocm91Z2ggdGhlIHBvcnRzIGF0CkBAIC02Miw3ICs2NCw3IEBACiAgKgogICogKDAzLzI2LzIwMDApIGdraAogICoJU3BsaXQgZHJpdmVyIHVwIGludG8gZGV2aWNlIHNwZWNpZmljIHBpZWNlcy4KLSAqIAorICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03NSw3ICs3Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KQEAgLTEyNSw3ICsxMjcsNyBAQAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB3aGl0ZWhlYXRfZHJpdmVyID0gewogCS5uYW1lID0JCSJ3aGl0ZWhlYXQiLApAQCAtMTM2LDI2ICsxMzgsMzQgQEAKIH07CiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBDb25uZWN0IFRlY2ggV2hpdGVIRUFUIHByZXJlbnVtZXJhdGlvbiBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgIHdoaXRlaGVhdF9maXJtd2FyZV9kb3dubG9hZAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgIHdoaXRlaGVhdF9maXJtd2FyZV9hdHRhY2gJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgd2hpdGVoZWF0X2Zpcm13YXJlX2Rvd25sb2FkKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfZmlybXdhcmVfYXR0YWNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgQ29ubmVjdCBUZWNoIFdoaXRlSEVBVCBzZXJpYWwgY29udmVydGVyICovCi1zdGF0aWMgaW50ICB3aGl0ZWhlYXRfYXR0YWNoCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBpbnQgIHdoaXRlaGVhdF9vcGVuCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIHZvaWQgd2hpdGVoZWF0X2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIGludCAgd2hpdGVoZWF0X3dyaXRlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwotc3RhdGljIGludCAgd2hpdGVoZWF0X3dyaXRlX3Jvb20JKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCAgd2hpdGVoZWF0X2lvY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1zdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2V0X3Rlcm1pb3MJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqIG9sZCk7Ci1zdGF0aWMgaW50ICB3aGl0ZWhlYXRfdGlvY21nZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgaW50ICB3aGl0ZWhlYXRfdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKLXN0YXRpYyB2b2lkIHdoaXRlaGVhdF9icmVha19jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOwotc3RhdGljIGludCAgd2hpdGVoZWF0X2NoYXJzX2luX2J1ZmZlcgkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIHdoaXRlaGVhdF91bnRocm90dGxlCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIHdoaXRlaGVhdF9yZWFkX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgd2hpdGVoZWF0X3dyaXRlX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCAgd2hpdGVoZWF0X2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIGludCAgd2hpdGVoZWF0X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAgd2hpdGVoZWF0X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9yZWFkX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfd3JpdGVfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciB3aGl0ZWhlYXRfZmFrZV9kZXZpY2UgPSB7CiAJLmRyaXZlciA9IHsKQEAgLTIwMiw3ICsyMTIsOSBAQAogCXN0cnVjdCBtdXRleAkJbXV0ZXg7CiAJX191OAkJCXBvcnRfcnVubmluZzsKIAlfX3U4CQkJY29tbWFuZF9maW5pc2hlZDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2NvbW1hbmQ7CS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZSB3YWl0aW5nIGZvciBhIGNvbW1hbmQgdG8gZmluaXNoICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9jb21tYW5kOyAvKiBmb3IgaGFuZGxpbmcgc2xlZXBpbmcgd2hpbHN0CisJCQkJCQkgd2FpdGluZyBmb3IgYSBjb21tYW5kIHRvCisJCQkJCQkgZmluaXNoICovCiAJX191OAkJCXJlc3VsdF9idWZmZXJbNjRdOwogfTsKIApAQCAtMjM5LDE0ICsyNTEsMTYgQEAKIHN0YXRpYyB2b2lkIGNvbW1hbmRfcG9ydF9yZWFkX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiAKIHN0YXRpYyBpbnQgc3RhcnRfcG9ydF9yZWFkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKnVyYl90b193cmFwKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitzdGF0aWMgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqdXJiX3RvX3dyYXAoc3RydWN0IHVyYiAqdXJiLAorCQkJCQkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9maXJzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKIHN0YXRpYyB2b2lkIHJ4X2RhdGFfc29mdGludChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCi1zdGF0aWMgaW50IGZpcm1fc2VuZF9jb21tYW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggY29tbWFuZCwgX191OCAqZGF0YSwgX191OCBkYXRhc2l6ZSk7CitzdGF0aWMgaW50IGZpcm1fc2VuZF9jb21tYW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggY29tbWFuZCwKKwkJCQkJCV9fdTggKmRhdGEsIF9fdTggZGF0YXNpemUpOwogc3RhdGljIGludCBmaXJtX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50IGZpcm1fY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgaW50IGZpcm1fc2V0dXBfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgZmlybV9zZXR1cF9wb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCBmaXJtX3NldF9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CiBzdGF0aWMgaW50IGZpcm1fc2V0X2R0cihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKTsKIHN0YXRpYyBpbnQgZmlybV9zZXRfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CkBAIC0yNzgsNyArMjkyLDggQEAKICAtIGRldmljZSByZW51bWVyYXRlZCBpdHNlbGYgYW5kIGNvbWVzIHVwIGFzIG5ldyBkZXZpY2UgaWQgd2l0aCBhbGwKICAgIGZpcm13YXJlIGRvd25sb2FkIGNvbXBsZXRlZC4KICovCi1zdGF0aWMgaW50IHdoaXRlaGVhdF9maXJtd2FyZV9kb3dubG9hZCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCB3aGl0ZWhlYXRfZmlybXdhcmVfZG93bmxvYWQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCWludCByZXNwb25zZSwgcmV0ID0gLUVOT0VOVDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmxvYWRlcl9mdyA9IE5VTEwsICpmaXJtd2FyZV9mdyA9IE5VTEw7CkBAIC0zMTMsNyArMzI4LDcgQEAKIAkJcmVjb3JkID0gaWhleF9uZXh0X2JpbnJlYyhyZWNvcmQpOwogCX0KIAotCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0IChzZXJpYWwsIDApOworCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0KHNlcmlhbCwgMCk7CiAKIAlyZWNvcmQgPSAoY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICopZmlybXdhcmVfZnctPmRhdGE7CiAJd2hpbGUgKHJlY29yZCAmJiBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpIDwgMHgxYjQwKQpAQCAtMzMwLDggKzM0NSw4IEBACiAJCX0KIAkJKytyZWNvcmQ7CiAJfQotCQotCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0IChzZXJpYWwsIDEpOworCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQoc2VyaWFsLCAxKTsKIAogCXJlY29yZCA9IChjb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKilmaXJtd2FyZV9mdy0+ZGF0YTsKIAl3aGlsZSAocmVjb3JkICYmIGJlMzJfdG9fY3B1KHJlY29yZC0+YWRkcikgPCAweDFiNDApIHsKQEAgLTM1NSw3ICszNzAsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgd2hpdGVoZWF0X2Zpcm13YXJlX2F0dGFjaCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQgd2hpdGVoZWF0X2Zpcm13YXJlX2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCS8qIFdlIHdhbnQgdGhpcyBkZXZpY2UgdG8gZmFpbCB0byBoYXZlIGEgZHJpdmVyIGFzc2lnbmVkIHRvIGl0ICovCiAJcmV0dXJuIDE7CkBAIC0zNjUsNyArMzgwLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ29ubmVjdCBUZWNoJ3MgV2hpdGUgSGVhdCBzZXJpYWwgZHJpdmVyIGZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCB3aGl0ZWhlYXRfYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIGludCB3aGl0ZWhlYXRfYXR0YWNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqY29tbWFuZF9wb3J0OwogCXN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlICpjb21tYW5kX2luZm87CkBAIC0zODYsNDMgKzQwMSw1MiBAQAogCiAJY29tbWFuZF9wb3J0ID0gc2VyaWFsLT5wb3J0W0NPTU1BTkRfUE9SVF07CiAKLQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlIChzZXJpYWwtPmRldiwgY29tbWFuZF9wb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpOworCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQljb21tYW5kX3BvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyk7CiAJY29tbWFuZCA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjb21tYW5kKQogCQlnb3RvIG5vX2NvbW1hbmRfYnVmZmVyOwogCWNvbW1hbmRbMF0gPSBXSElURUhFQVRfR0VUX0hXX0lORk87CiAJY29tbWFuZFsxXSA9IDA7Ci0JCisKIAlyZXN1bHQgPSBrbWFsbG9jKHNpemVvZigqaHdfaW5mbykgKyAxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlc3VsdCkKIAkJZ290byBub19yZXN1bHRfYnVmZmVyOwogCS8qCiAJICogV2hlbiB0aGUgbW9kdWxlIGlzIHJlbG9hZGVkIHRoZSBmaXJtd2FyZSBpcyBzdGlsbCB0aGVyZSBhbmQKIAkgKiB0aGUgZW5kcG9pbnRzIGFyZSBzdGlsbCBpbiB0aGUgdXNiIGNvcmUgdW5jaGFuZ2VkLiBUaGlzIGlzIHRoZQotICAgICAgICAgKiB1bmxpbmtpbmcgYnVnIGluIGRpc2d1aXNlLiBTYW1lIGZvciB0aGUgY2FsbCBiZWxvdy4KLSAgICAgICAgICovCisJICogdW5saW5raW5nIGJ1ZyBpbiBkaXNndWlzZS4gU2FtZSBmb3IgdGhlIGNhbGwgYmVsb3cuCisJICovCiAJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBpcGUpOwotCXJldCA9IHVzYl9idWxrX21zZyAoc2VyaWFsLT5kZXYsIHBpcGUsIGNvbW1hbmQsIDIsICZhbGVuLCBDT01NQU5EX1RJTUVPVVRfTVMpOworCXJldCA9IHVzYl9idWxrX21zZyhzZXJpYWwtPmRldiwgcGlwZSwgY29tbWFuZCwgMiwKKwkJCQkJCSZhbGVuLCBDT01NQU5EX1RJTUVPVVRfTVMpOwogCWlmIChyZXQpIHsKLQkJZXJyKCIlczogQ291bGRuJ3Qgc2VuZCBjb21tYW5kIFslZF0iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXQpOworCQllcnIoIiVzOiBDb3VsZG4ndCBzZW5kIGNvbW1hbmQgWyVkXSIsCisJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgcmV0KTsKIAkJZ290byBub19maXJtd2FyZTsKIAl9IGVsc2UgaWYgKGFsZW4gIT0gMikgewotCQllcnIoIiVzOiBTZW5kIGNvbW1hbmQgaW5jb21wbGV0ZSBbJWRdIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgYWxlbik7CisJCWVycigiJXM6IFNlbmQgY29tbWFuZCBpbmNvbXBsZXRlIFslZF0iLAorCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIGFsZW4pOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0KIAotCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LCBjb21tYW5kX3BvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKKwlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCWNvbW1hbmRfcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpOwogCS8qIFNlZSB0aGUgY29tbWVudCBvbiB0aGUgdXNiX2NsZWFyX2hhbHQoKSBhYm92ZSAqLwogCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCBwaXBlKTsKLQlyZXQgPSB1c2JfYnVsa19tc2cgKHNlcmlhbC0+ZGV2LCBwaXBlLCByZXN1bHQsIHNpemVvZigqaHdfaW5mbykgKyAxLCAmYWxlbiwgQ09NTUFORF9USU1FT1VUX01TKTsKKwlyZXQgPSB1c2JfYnVsa19tc2coc2VyaWFsLT5kZXYsIHBpcGUsIHJlc3VsdCwKKwkJCXNpemVvZigqaHdfaW5mbykgKyAxLCAmYWxlbiwgQ09NTUFORF9USU1FT1VUX01TKTsKIAlpZiAocmV0KSB7Ci0JCWVycigiJXM6IENvdWxkbid0IGdldCByZXN1bHRzIFslZF0iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXQpOworCQllcnIoIiVzOiBDb3VsZG4ndCBnZXQgcmVzdWx0cyBbJWRdIiwKKwkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXQpOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0gZWxzZSBpZiAoYWxlbiAhPSBzaXplb2YoKmh3X2luZm8pICsgMSkgewotCQllcnIoIiVzOiBHZXQgcmVzdWx0cyBpbmNvbXBsZXRlIFslZF0iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCBhbGVuKTsKKwkJZXJyKCIlczogR2V0IHJlc3VsdHMgaW5jb21wbGV0ZSBbJWRdIiwKKwkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCBhbGVuKTsKIAkJZ290byBub19maXJtd2FyZTsKIAl9IGVsc2UgaWYgKHJlc3VsdFswXSAhPSBjb21tYW5kWzBdKSB7Ci0JCWVycigiJXM6IENvbW1hbmQgZmFpbGVkIFslZF0iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXN1bHRbMF0pOworCQllcnIoIiVzOiBDb21tYW5kIGZhaWxlZCBbJWRdIiwKKwkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXN1bHRbMF0pOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0KIApAQCAtNDM2LDcgKzQ2MCw4IEBACiAKIAkJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCQlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOworCQkJZXJyKCIlczogT3V0IG9mIG1lbW9yeSBmb3IgcG9ydCBzdHJ1Y3R1cmVzXG4iLAorCQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKIAkJCWdvdG8gbm9fcHJpdmF0ZTsKIAkJfQogCkBAIC01MDYsOSArNTMxLDExIEBACiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBpbmZvKTsKIAl9CiAKLQljb21tYW5kX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWNvbW1hbmRfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKGNvbW1hbmRfaW5mbyA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJCWVycigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwKKwkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CiAJCWdvdG8gbm9fY29tbWFuZF9wcml2YXRlOwogCX0KIApAQCAtNTI1LDkgKzU1MiwxMiBAQAogCiBub19maXJtd2FyZToKIAkvKiBGaXJtd2FyZSBsaWtlbHkgbm90IHJ1bm5pbmcgKi8KLQllcnIoIiVzOiBVbmFibGUgdG8gcmV0cmlldmUgZmlybXdhcmUgdmVyc2lvbiwgdHJ5IHJlcGx1Z2dpbmdcbiIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwotCWVycigiJXM6IElmIHRoZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyAoc3RhdHVzIGxlZCBub3QgYmxpbmtpbmcpXG4iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKLQllcnIoIiVzOiBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGNvbm5lY3R0ZWNoLmNvbVxuIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJZXJyKCIlczogVW5hYmxlIHRvIHJldHJpZXZlIGZpcm13YXJlIHZlcnNpb24sIHRyeSByZXBsdWdnaW5nXG4iLAorCQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKKwllcnIoIiVzOiBJZiB0aGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgKHN0YXR1cyBsZWQgbm90IGJsaW5raW5nKVxuIiwKKwkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJZXJyKCIlczogcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBjb25uZWN0dGVjaC5jb21cbiIsCisJCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCWtmcmVlKHJlc3VsdCk7CiAJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTU3MCw3ICs2MDAsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHdoaXRlaGVhdF9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKmNvbW1hbmRfcG9ydDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwpAQCAtNTg1LDcgKzYxNSw3IEBACiAKIAkvKiBmcmVlIHVwIG91ciBwcml2YXRlIGRhdGEgZm9yIG91ciBjb21tYW5kIHBvcnQgKi8KIAljb21tYW5kX3BvcnQgPSBzZXJpYWwtPnBvcnRbQ09NTUFORF9QT1JUXTsKLQlrZnJlZSAodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKGNvbW1hbmRfcG9ydCkpOworCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShjb21tYW5kX3BvcnQpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CkBAIC02MTIsMTEgKzY0MiwxMCBAQAogCXJldHVybjsKIH0KIAotCi1zdGF0aWMgaW50IHdoaXRlaGVhdF9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgd2hpdGVoZWF0X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludAkJcmV0dmFsID0gMDsKLQlzdHJ1Y3Qga3Rlcm1pb3MJb2xkX3Rlcm07CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCkBAIC02MjQsNyArNjUzLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGV4aXQ7CiAKLQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKwlpZiAodHR5KQorCQl0dHktPmxvd19sYXRlbmN5ID0gMTsKIAogCS8qIHNlbmQgYW4gb3BlbiBwb3J0IGNvbW1hbmQgKi8KIAlyZXR2YWwgPSBmaXJtX29wZW4ocG9ydCk7CkBAIC02NDAsOSArNjcwLDggQEAKIAkJZ290byBleGl0OwogCX0KIAotCW9sZF90ZXJtLmNfY2ZsYWcgPSB+cG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCW9sZF90ZXJtLmNfaWZsYWcgPSB+cG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOwotCXdoaXRlaGVhdF9zZXRfdGVybWlvcyhwb3J0LCAmb2xkX3Rlcm0pOworCWlmICh0dHkpCisJCWZpcm1fc2V0dXBfcG9ydCh0dHkpOwogCiAJLyogV29yayBhcm91bmQgSENEIGJ1Z3MgKi8KIAl1c2JfY2xlYXJfaGFsdChwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOwpAQCAtNjUxLDcgKzY4MCw4IEBACiAJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAlyZXR2YWwgPSBzdGFydF9wb3J0X3JlYWQocG9ydCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJldHZhbCk7CisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAorCQkJCV9fZnVuY19fLCByZXR2YWwpOwogCQlmaXJtX2Nsb3NlKHBvcnQpOwogCQlzdG9wX2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOwogCQlnb3RvIGV4aXQ7CkBAIC02NjMsNyArNjkzLDggQEAKIH0KIAogCi1zdGF0aWMgdm9pZCB3aGl0ZWhlYXRfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIHZvaWQgd2hpdGVoZWF0X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKQEAgLTY4MSw3ICs3MTIsNyBAQAogCX0KIAltdXRleF91bmxvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7CiAKLQlwb3J0LT50dHktPmNsb3NpbmcgPSAxOworCXR0eS0+Y2xvc2luZyA9IDE7CiAKIC8qCiAgKiBOb3QgY3VycmVudGx5IGluIHVzZTsgdHR5X3dhaXRfdW50aWxfc2VudCgpIGNhbGxzCkBAIC02ODksMTIgKzcyMCwxMiBAQAogICogYWNxdWlzaXRpb24uIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGF0IHNvbWUgcG9pbnQuIEdyZWcncyBiZWVuCiAgKiBub3RpZmllZC4KIAlpZiAoKGZpbHAtPmZfZmxhZ3MgJiAoT19OREVMQVkgfCBPX05PTkJMT0NLKSkgPT0gMCkgewotCQl0dHlfd2FpdF91bnRpbF9zZW50KHBvcnQtPnR0eSwgQ0xPU0lOR19ERUxBWSk7CisJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBDTE9TSU5HX0RFTEFZKTsKIAl9CiAqLwogCi0JdHR5X2RyaXZlcl9mbHVzaF9idWZmZXIocG9ydC0+dHR5KTsKLQl0dHlfbGRpc2NfZmx1c2gocG9ydC0+dHR5KTsKKwl0dHlfZHJpdmVyX2ZsdXNoX2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCiAJZmlybV9yZXBvcnRfdHhfZG9uZShwb3J0KTsKIApAQCAtNzI4LDExICs3NTksMTIgQEAKIAogCXN0b3BfY29tbWFuZF9wb3J0KHBvcnQtPnNlcmlhbCk7CiAKLQlwb3J0LT50dHktPmNsb3NpbmcgPSAwOworCXR0eS0+Y2xvc2luZyA9IDA7CiB9CiAKIAotc3RhdGljIGludCB3aGl0ZWhlYXRfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCitzdGF0aWMgaW50IHdoaXRlaGVhdF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtNzYzLDE2ICs3OTUsMTkgQEAKIAogCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOwogCQl1cmIgPSB3cmFwLT51cmI7Ci0JCWJ5dGVzID0gKGNvdW50ID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPyBwb3J0LT5idWxrX291dF9zaXplIDogY291bnQ7Ci0JCW1lbWNweSAodXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiArIHNlbnQsIGJ5dGVzKTsKKwkJYnl0ZXMgPSAoY291bnQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/CisJCQkJCXBvcnQtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYgKyBzZW50LCBieXRlcyk7CiAKLQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgYnl0ZXMsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LAorCQkJCV9fZnVuY19fLCBieXRlcywgdXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCiAJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ5dGVzOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLCByZXN1bHQpOworCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJc2VudCA9IHJlc3VsdDsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJCQlsaXN0X2FkZCh0bXAsICZpbmZvLT50eF91cmJzX2ZyZWUpOwpAQCAtNzkwLDE2ICs4MjUsMTYgQEAKIAlyZXR1cm4gc2VudDsKIH0KIAotCi1zdGF0aWMgaW50IHdoaXRlaGVhdF93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHdoaXRlaGVhdF93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAlpbnQgcm9vbSA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JCisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2godG1wLCAmaW5mby0+dHhfdXJic19mcmVlKQogCQlyb29tKys7CkBAIC04MTAsOSArODQ1LDkgQEAKIAlyZXR1cm4gKHJvb20pOwogfQogCi0KLXN0YXRpYyBpbnQgd2hpdGVoZWF0X3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgd2hpdGVoZWF0X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBpbnQgbW9kZW1fc2lnbmFscyA9IDA7CiAKQEAgLTgyNywxMCArODYyLDEwIEBACiAJcmV0dXJuIG1vZGVtX3NpZ25hbHM7CiB9CiAKLQotc3RhdGljIGludCB3aGl0ZWhlYXRfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCB3aGl0ZWhlYXRfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CkBAIC04NTEsNjUgKzg4Niw1NSBAQAogfQogCiAKLXN0YXRpYyBpbnQgd2hpdGVoZWF0X2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCB3aGl0ZWhlYXRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzZXJpYWxfc3RydWN0IHNlcnN0cnVjdDsKIAl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCwgY21kIDB4JS40eCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFRJT0NHU0VSSUFMOgotCQkJbWVtc2V0KCZzZXJzdHJ1Y3QsIDAsIHNpemVvZihzZXJzdHJ1Y3QpKTsKLQkJCXNlcnN0cnVjdC50eXBlID0gUE9SVF8xNjY1NDsKLQkJCXNlcnN0cnVjdC5saW5lID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKLQkJCXNlcnN0cnVjdC5wb3J0ID0gcG9ydC0+bnVtYmVyOwotCQkJc2Vyc3RydWN0LmZsYWdzID0gQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlE7Ci0JCQlzZXJzdHJ1Y3QueG1pdF9maWZvX3NpemUgPSBwb3J0LT5idWxrX291dF9zaXplOwotCQkJc2Vyc3RydWN0LmN1c3RvbV9kaXZpc29yID0gMDsKLQkJCXNlcnN0cnVjdC5iYXVkX2Jhc2UgPSA0NjA4MDA7Ci0JCQlzZXJzdHJ1Y3QuY2xvc2VfZGVsYXkgPSBDTE9TSU5HX0RFTEFZOwotCQkJc2Vyc3RydWN0LmNsb3Npbmdfd2FpdCA9IENMT1NJTkdfREVMQVk7CisJY2FzZSBUSU9DR1NFUklBTDoKKwkJbWVtc2V0KCZzZXJzdHJ1Y3QsIDAsIHNpemVvZihzZXJzdHJ1Y3QpKTsKKwkJc2Vyc3RydWN0LnR5cGUgPSBQT1JUXzE2NjU0OworCQlzZXJzdHJ1Y3QubGluZSA9IHBvcnQtPnNlcmlhbC0+bWlub3I7CisJCXNlcnN0cnVjdC5wb3J0ID0gcG9ydC0+bnVtYmVyOworCQlzZXJzdHJ1Y3QuZmxhZ3MgPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwkJc2Vyc3RydWN0LnhtaXRfZmlmb19zaXplID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsKKwkJc2Vyc3RydWN0LmN1c3RvbV9kaXZpc29yID0gMDsKKwkJc2Vyc3RydWN0LmJhdWRfYmFzZSA9IDQ2MDgwMDsKKwkJc2Vyc3RydWN0LmNsb3NlX2RlbGF5ID0gQ0xPU0lOR19ERUxBWTsKKwkJc2Vyc3RydWN0LmNsb3Npbmdfd2FpdCA9IENMT1NJTkdfREVMQVk7CiAKLQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZzZXJzdHJ1Y3QsIHNpemVvZihzZXJzdHJ1Y3QpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBUSU9DU1NFUklBTDoKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmc2Vyc3RydWN0LCB1c2VyX2FyZywgc2l6ZW9mKHNlcnN0cnVjdCkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCi0JCQkvKgotCQkJICogRm9yIG5vdyB0aGlzIGlzIGlnbm9yZWQuIGRpcCBzZXRzIHRoZSBBU1lOQ19bVl1ISSBmbGFncwotCQkJICogYnV0IHRoaXMgaXNuJ3QgdXNlZCBieSB1cyBhdCBhbGwuIE1heWJlIHNvbWVvbmUgc29tZXdoZXJlCi0JCQkgKiB3aWxsIG5lZWQgdGhlIGN1c3RvbV9kaXZpc29yIHNldHRpbmcuCi0JCQkgKi8KLQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmc2Vyc3RydWN0LCBzaXplb2Yoc2Vyc3RydWN0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAogCi1zdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0JZGJnKCIlcyAtcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCWZpcm1fc2V0dXBfcG9ydChwb3J0KTsKKwlmaXJtX3NldHVwX3BvcnQodHR5KTsKIH0KIAotCi1zdGF0aWMgdm9pZCB3aGl0ZWhlYXRfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkgeworc3RhdGljIHZvaWQgd2hpdGVoZWF0X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJZmlybV9zZXRfYnJlYWsocG9ydCwgYnJlYWtfc3RhdGUpOwogfQogCiAKLXN0YXRpYyBpbnQgd2hpdGVoZWF0X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIGludCB3aGl0ZWhlYXRfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOwpAQCAtOTI1LDEzICs5NTAsMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCi0JZGJnICgiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIGNoYXJzKTsKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCBjaGFycyk7CiAJcmV0dXJuIGNoYXJzOwogfQogCiAKLXN0YXRpYyB2b2lkIHdoaXRlaGVhdF90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC05NDUsOCArOTcxLDkgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBhY3R1YWxseV90aHJvdHRsZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTk5Myw3ICsxMDIwLDcgQEAKIAogCWNvbW1hbmRfaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShjb21tYW5kX3BvcnQpOwogCWlmICghY29tbWFuZF9pbmZvKSB7Ci0JCWRiZyAoIiVzIC0gY29tbWFuZF9pbmZvIGlzIE5VTEwsIGV4aXRpbmcuIiwgX19mdW5jX18pOworCQlkYmcoIiVzIC0gY29tbWFuZF9pbmZvIGlzIE5VTEwsIGV4aXRpbmcuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWlmIChzdGF0dXMpIHsKQEAgLTEwMDQsNyArMTAzMSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZjb21tYW5kX3BvcnQtPmRldiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmY29tbWFuZF9wb3J0LT5kZXYsCisJCQkJX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CiAKIAlpZiAoZGF0YVswXSA9PSBXSElURUhFQVRfQ01EX0NPTVBMRVRFKSB7CiAJCWNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9IFdISVRFSEVBVF9DTURfQ09NUExFVEU7CkBAIC0xMDEzLDIxICsxMDQxLDIzIEBACiAJCWNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9IFdISVRFSEVBVF9DTURfRkFJTFVSRTsKIAkJd2FrZV91cCgmY29tbWFuZF9pbmZvLT53YWl0X2NvbW1hbmQpOwogCX0gZWxzZSBpZiAoZGF0YVswXSA9PSBXSElURUhFQVRfRVZFTlQpIHsKLQkJLyogVGhlc2UgYXJlIHVuc29saWNpdGVkIHJlcG9ydHMgZnJvbSB0aGUgZmlybXdhcmUsIGhlbmNlIG5vIHdhaXRpbmcgY29tbWFuZCB0byB3YWtldXAgKi8KKwkJLyogVGhlc2UgYXJlIHVuc29saWNpdGVkIHJlcG9ydHMgZnJvbSB0aGUgZmlybXdhcmUsIGhlbmNlIG5vCisJCSAgIHdhaXRpbmcgY29tbWFuZCB0byB3YWtldXAgKi8KIAkJZGJnKCIlcyAtIGV2ZW50IHJlY2VpdmVkIiwgX19mdW5jX18pOwogCX0gZWxzZSBpZiAoZGF0YVswXSA9PSBXSElURUhFQVRfR0VUX0RUUl9SVFMpIHsKLQkJbWVtY3B5KGNvbW1hbmRfaW5mby0+cmVzdWx0X2J1ZmZlciwgJmRhdGFbMV0sIHVyYi0+YWN0dWFsX2xlbmd0aCAtIDEpOworCQltZW1jcHkoY29tbWFuZF9pbmZvLT5yZXN1bHRfYnVmZmVyLCAmZGF0YVsxXSwKKwkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCAtIDEpOwogCQljb21tYW5kX2luZm8tPmNvbW1hbmRfZmluaXNoZWQgPSBXSElURUhFQVRfQ01EX0NPTVBMRVRFOwogCQl3YWtlX3VwKCZjb21tYW5kX2luZm8tPndhaXRfY29tbWFuZCk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJZGJnKCIlcyAtIGJhZCByZXBseSBmcm9tIGZpcm13YXJlIiwgX19mdW5jX18pOwotCX0KLQkKKwogCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAqLwogCWNvbW1hbmRfcG9ydC0+cmVhZF91cmItPmRldiA9IGNvbW1hbmRfcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoY29tbWFuZF9wb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZGJnKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWRiZygiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIH0KIAogCkBAIC0xMDYwLDcgKzEwOTAsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsCisJCQkJX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CiAKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOwogCWxpc3RfYWRkX3RhaWwoJndyYXAtPmxpc3QsICZpbmZvLT5yeF91cmJfcSk7CkBAIC0xMTA3LDcgKzExMzgsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDb25uZWN0IFRlY2gncyBXaGl0ZSBIZWF0IGZpcm13YXJlIGludGVyZmFjZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBmaXJtX3NlbmRfY29tbWFuZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IGNvbW1hbmQsIF9fdTggKmRhdGEsIF9fdTggZGF0YXNpemUpCitzdGF0aWMgaW50IGZpcm1fc2VuZF9jb21tYW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggY29tbWFuZCwKKwkJCQkJCV9fdTggKmRhdGEsIF9fdTggZGF0YXNpemUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqY29tbWFuZF9wb3J0OwogCXN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlICpjb21tYW5kX2luZm87CkBAIC0xMTIyLDEzICsxMTU0LDEzIEBACiAJY29tbWFuZF9pbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKGNvbW1hbmRfcG9ydCk7CiAJbXV0ZXhfbG9jaygmY29tbWFuZF9pbmZvLT5tdXRleCk7CiAJY29tbWFuZF9pbmZvLT5jb21tYW5kX2ZpbmlzaGVkID0gZmFsc2U7Ci0JCisKIAl0cmFuc2Zlcl9idWZmZXIgPSAoX191OCAqKWNvbW1hbmRfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJdHJhbnNmZXJfYnVmZmVyWzBdID0gY29tbWFuZDsKLQltZW1jcHkgKCZ0cmFuc2Zlcl9idWZmZXJbMV0sIGRhdGEsIGRhdGFzaXplKTsKKwltZW1jcHkoJnRyYW5zZmVyX2J1ZmZlclsxXSwgZGF0YSwgZGF0YXNpemUpOwogCWNvbW1hbmRfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gZGF0YXNpemUgKyAxOwogCWNvbW1hbmRfcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAoY29tbWFuZF9wb3J0LT53cml0ZV91cmIsIEdGUF9OT0lPKTsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihjb21tYW5kX3BvcnQtPndyaXRlX3VyYiwgR0ZQX05PSU8pOwogCWlmIChyZXR2YWwpIHsKIAkJZGJnKCIlcyAtIHN1Ym1pdCB1cmIgZmFpbGVkIiwgX19mdW5jX18pOwogCQlnb3RvIGV4aXQ7CkBAIC0xMTU1LDUxICsxMTg3LDU3IEBACiAJaWYgKGNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9PSBXSElURUhFQVRfQ01EX0NPTVBMRVRFKSB7CiAJCWRiZygiJXMgLSBjb21tYW5kIGNvbXBsZXRlZC4iLCBfX2Z1bmNfXyk7CiAJCXN3aXRjaCAoY29tbWFuZCkgewotCQkJY2FzZSBXSElURUhFQVRfR0VUX0RUUl9SVFM6Ci0JCQkJaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQkJCQltZW1jcHkoJmluZm8tPm1jciwgY29tbWFuZF9pbmZvLT5yZXN1bHRfYnVmZmVyLCBzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9kcl9pbmZvKSk7CisJCWNhc2UgV0hJVEVIRUFUX0dFVF9EVFJfUlRTOgorCQkJaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJCW1lbWNweSgmaW5mby0+bWNyLCBjb21tYW5kX2luZm8tPnJlc3VsdF9idWZmZXIsCisJCQkJCXNpemVvZihzdHJ1Y3Qgd2hpdGVoZWF0X2RyX2luZm8pKTsKIAkJCQlicmVhazsKIAkJfQogCX0KLQogZXhpdDoKIAltdXRleF91bmxvY2soJmNvbW1hbmRfaW5mby0+bXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKIAotc3RhdGljIGludCBmaXJtX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkgeworc3RhdGljIGludCBmaXJtX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3NpbXBsZSBvcGVuX2NvbW1hbmQ7CiAKIAlvcGVuX2NvbW1hbmQucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IgKyAxOwotCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfT1BFTiwgKF9fdTggKikmb3Blbl9jb21tYW5kLCBzaXplb2Yob3Blbl9jb21tYW5kKSk7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9PUEVOLAorCQkoX191OCAqKSZvcGVuX2NvbW1hbmQsIHNpemVvZihvcGVuX2NvbW1hbmQpKTsKIH0KIAogCi1zdGF0aWMgaW50IGZpcm1fY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkgeworc3RhdGljIGludCBmaXJtX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CiAJc3RydWN0IHdoaXRlaGVhdF9zaW1wbGUgY2xvc2VfY29tbWFuZDsKIAogCWNsb3NlX2NvbW1hbmQucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IgKyAxOwotCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfQ0xPU0UsIChfX3U4ICopJmNsb3NlX2NvbW1hbmQsIHNpemVvZihjbG9zZV9jb21tYW5kKSk7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9DTE9TRSwKKwkJCShfX3U4ICopJmNsb3NlX2NvbW1hbmQsIHNpemVvZihjbG9zZV9jb21tYW5kKSk7CiB9CiAKIAotc3RhdGljIGludCBmaXJtX3NldHVwX3BvcnQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkgeworc3RhdGljIGludCBmaXJtX3NldHVwX3BvcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3BvcnRfc2V0dGluZ3MgcG9ydF9zZXR0aW5nczsKLQl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJdW5zaWduZWQgaW50IGNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCiAJcG9ydF9zZXR0aW5ncy5wb3J0ID0gcG9ydC0+bnVtYmVyICsgMTsKIAogCS8qIGdldCB0aGUgYnl0ZSBzaXplICovCiAJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7Ci0JCWNhc2UgQ1M1Oglwb3J0X3NldHRpbmdzLmJpdHMgPSA1OyAgIGJyZWFrOwotCQljYXNlIENTNjoJcG9ydF9zZXR0aW5ncy5iaXRzID0gNjsgICBicmVhazsKLQkJY2FzZSBDUzc6CXBvcnRfc2V0dGluZ3MuYml0cyA9IDc7ICAgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgQ1M4Oglwb3J0X3NldHRpbmdzLmJpdHMgPSA4OyAgIGJyZWFrOworCWNhc2UgQ1M1Oglwb3J0X3NldHRpbmdzLmJpdHMgPSA1OyAgIGJyZWFrOworCWNhc2UgQ1M2Oglwb3J0X3NldHRpbmdzLmJpdHMgPSA2OyAgIGJyZWFrOworCWNhc2UgQ1M3Oglwb3J0X3NldHRpbmdzLmJpdHMgPSA3OyAgIGJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBDUzg6CXBvcnRfc2V0dGluZ3MuYml0cyA9IDg7ICAgYnJlYWs7CiAJfQogCWRiZygiJXMgLSBkYXRhIGJpdHMgPSAlZCIsIF9fZnVuY19fLCBwb3J0X3NldHRpbmdzLmJpdHMpOwotCQorCiAJLyogZGV0ZXJtaW5lIHRoZSBwYXJpdHkgKi8KIAlpZiAoY2ZsYWcgJiBQQVJFTkIpCiAJCWlmIChjZmxhZyAmIENNU1BBUikKQEAgLTEyMjUsNyArMTI2Myw4IEBACiAKIAkvKiBmaWd1cmUgb3V0IHRoZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQotCQlwb3J0X3NldHRpbmdzLmhmbG93ID0gKFdISVRFSEVBVF9IRkxPV19DVFMgfCBXSElURUhFQVRfSEZMT1dfUlRTKTsKKwkJcG9ydF9zZXR0aW5ncy5oZmxvdyA9IChXSElURUhFQVRfSEZMT1dfQ1RTIHwKKwkJCQkJCVdISVRFSEVBVF9IRkxPV19SVFMpOwogCWVsc2UKIAkJcG9ydF9zZXR0aW5ncy5oZmxvdyA9IFdISVRFSEVBVF9IRkxPV19OT05FOwogCWRiZygiJXMgLSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgPSAlcyAlcyAlcyAlcyIsIF9fZnVuY19fLApAQCAtMTIzMyw4MSArMTI3Miw5NSBAQAogCSAgICAocG9ydF9zZXR0aW5ncy5oZmxvdyAmIFdISVRFSEVBVF9IRkxPV19SVFMpID8gIlJUUyIgOiAiIiwKIAkgICAgKHBvcnRfc2V0dGluZ3MuaGZsb3cgJiBXSElURUhFQVRfSEZMT1dfRFNSKSA/ICJEU1IiIDogIiIsCiAJICAgIChwb3J0X3NldHRpbmdzLmhmbG93ICYgV0hJVEVIRUFUX0hGTE9XX0RUUikgPyAiRFRSIiA6ICIiKTsKLQkKKwogCS8qIGRldGVybWluZSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KLQlpZiAoSV9JWE9GRihwb3J0LT50dHkpKQorCWlmIChJX0lYT0ZGKHR0eSkpCiAJCXBvcnRfc2V0dGluZ3Muc2Zsb3cgPSBXSElURUhFQVRfU0ZMT1dfUlhUWDsKIAllbHNlCiAJCXBvcnRfc2V0dGluZ3Muc2Zsb3cgPSBXSElURUhFQVRfU0ZMT1dfTk9ORTsKIAlkYmcoIiVzIC0gc29mdHdhcmUgZmxvdyBjb250cm9sID0gJWMiLCBfX2Z1bmNfXywgcG9ydF9zZXR0aW5ncy5zZmxvdyk7Ci0JCi0JcG9ydF9zZXR0aW5ncy54b24gPSBTVEFSVF9DSEFSKHBvcnQtPnR0eSk7Ci0JcG9ydF9zZXR0aW5ncy54b2ZmID0gU1RPUF9DSEFSKHBvcnQtPnR0eSk7Ci0JZGJnKCIlcyAtIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsIF9fZnVuY19fLCBwb3J0X3NldHRpbmdzLnhvbiwgcG9ydF9zZXR0aW5ncy54b2ZmKTsKKworCXBvcnRfc2V0dGluZ3MueG9uID0gU1RBUlRfQ0hBUih0dHkpOworCXBvcnRfc2V0dGluZ3MueG9mZiA9IFNUT1BfQ0hBUih0dHkpOworCWRiZygiJXMgLSBYT04gPSAlMngsIFhPRkYgPSAlMngiLAorCQkJX19mdW5jX18sIHBvcnRfc2V0dGluZ3MueG9uLCBwb3J0X3NldHRpbmdzLnhvZmYpOwogCiAJLyogZ2V0IHRoZSBiYXVkIHJhdGUgd2FudGVkICovCi0JcG9ydF9zZXR0aW5ncy5iYXVkID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KTsKKwlwb3J0X3NldHRpbmdzLmJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCWRiZygiJXMgLSBiYXVkIHJhdGUgPSAlZCIsIF9fZnVuY19fLCBwb3J0X3NldHRpbmdzLmJhdWQpOwogCiAJLyogZml4bWU6IHNob3VsZCBzZXQgdmFsaWRhdGVkIHNldHRpbmdzICovCi0JdHR5X2VuY29kZV9iYXVkX3JhdGUocG9ydC0+dHR5LCBwb3J0X3NldHRpbmdzLmJhdWQsIHBvcnRfc2V0dGluZ3MuYmF1ZCk7CisJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBwb3J0X3NldHRpbmdzLmJhdWQsIHBvcnRfc2V0dGluZ3MuYmF1ZCk7CiAJLyogaGFuZGxlIGFueSBzZXR0aW5ncyB0aGF0IGFyZW4ndCBzcGVjaWZpZWQgaW4gdGhlIHR0eSBzdHJ1Y3R1cmUgKi8KIAlwb3J0X3NldHRpbmdzLmxsb29wID0gMDsKLQkKKwogCS8qIG5vdyBzZW5kIHRoZSBtZXNzYWdlIHRvIHRoZSBkZXZpY2UgKi8KLQlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX1NFVFVQX1BPUlQsIChfX3U4ICopJnBvcnRfc2V0dGluZ3MsIHNpemVvZihwb3J0X3NldHRpbmdzKSk7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9TRVRVUF9QT1JULAorCQkJKF9fdTggKikmcG9ydF9zZXR0aW5ncywgc2l6ZW9mKHBvcnRfc2V0dGluZ3MpKTsKIH0KIAogCi1zdGF0aWMgaW50IGZpcm1fc2V0X3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKSB7CitzdGF0aWMgaW50IGZpcm1fc2V0X3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKQorewogCXN0cnVjdCB3aGl0ZWhlYXRfc2V0X3JkYiBydHNfY29tbWFuZDsKIAogCXJ0c19jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKIAlydHNfY29tbWFuZC5zdGF0ZSA9IG9ub2ZmOwotCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfU0VUX1JUUywgKF9fdTggKikmcnRzX2NvbW1hbmQsIHNpemVvZihydHNfY29tbWFuZCkpOworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfU0VUX1JUUywKKwkJCShfX3U4ICopJnJ0c19jb21tYW5kLCBzaXplb2YocnRzX2NvbW1hbmQpKTsKIH0KIAogCi1zdGF0aWMgaW50IGZpcm1fc2V0X2R0cihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKSB7CitzdGF0aWMgaW50IGZpcm1fc2V0X2R0cihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKQorewogCXN0cnVjdCB3aGl0ZWhlYXRfc2V0X3JkYiBkdHJfY29tbWFuZDsKIAogCWR0cl9jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKIAlkdHJfY29tbWFuZC5zdGF0ZSA9IG9ub2ZmOwotCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfU0VUX1JUUywgKF9fdTggKikmZHRyX2NvbW1hbmQsIHNpemVvZihkdHJfY29tbWFuZCkpOworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfU0VUX0RUUiwKKwkJCShfX3U4ICopJmR0cl9jb21tYW5kLCBzaXplb2YoZHRyX2NvbW1hbmQpKTsKIH0KIAogCi1zdGF0aWMgaW50IGZpcm1fc2V0X2JyZWFrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggb25vZmYpIHsKK3N0YXRpYyBpbnQgZmlybV9zZXRfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZikKK3sKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3NldF9yZGIgYnJlYWtfY29tbWFuZDsKIAogCWJyZWFrX2NvbW1hbmQucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IgKyAxOwogCWJyZWFrX2NvbW1hbmQuc3RhdGUgPSBvbm9mZjsKLQlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX1NFVF9SVFMsIChfX3U4ICopJmJyZWFrX2NvbW1hbmQsIHNpemVvZihicmVha19jb21tYW5kKSk7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9TRVRfQlJFQUssCisJCQkoX191OCAqKSZicmVha19jb21tYW5kLCBzaXplb2YoYnJlYWtfY29tbWFuZCkpOwogfQogCiAKLXN0YXRpYyBpbnQgZmlybV9wdXJnZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IHJ4dHgpIHsKK3N0YXRpYyBpbnQgZmlybV9wdXJnZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IHJ4dHgpCit7CiAJc3RydWN0IHdoaXRlaGVhdF9wdXJnZSBwdXJnZV9jb21tYW5kOwogCiAJcHVyZ2VfY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CiAJcHVyZ2VfY29tbWFuZC53aGF0ID0gcnh0eDsKLQlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX1BVUkdFLCAoX191OCAqKSZwdXJnZV9jb21tYW5kLCBzaXplb2YocHVyZ2VfY29tbWFuZCkpOworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfUFVSR0UsCisJCQkoX191OCAqKSZwdXJnZV9jb21tYW5kLCBzaXplb2YocHVyZ2VfY29tbWFuZCkpOwogfQogCiAKLXN0YXRpYyBpbnQgZmlybV9nZXRfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KSB7CitzdGF0aWMgaW50IGZpcm1fZ2V0X2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3NpbXBsZSBnZXRfZHJfY29tbWFuZDsKIAogCWdldF9kcl9jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKLQlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX0dFVF9EVFJfUlRTLCAoX191OCAqKSZnZXRfZHJfY29tbWFuZCwgc2l6ZW9mKGdldF9kcl9jb21tYW5kKSk7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9HRVRfRFRSX1JUUywKKwkJCShfX3U4ICopJmdldF9kcl9jb21tYW5kLCBzaXplb2YoZ2V0X2RyX2NvbW1hbmQpKTsKIH0KIAogCi1zdGF0aWMgaW50IGZpcm1fcmVwb3J0X3R4X2RvbmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkgeworc3RhdGljIGludCBmaXJtX3JlcG9ydF90eF9kb25lKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CiAJc3RydWN0IHdoaXRlaGVhdF9zaW1wbGUgY2xvc2VfY29tbWFuZDsKIAogCWNsb3NlX2NvbW1hbmQucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IgKyAxOwotCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfUkVQT1JUX1RYX0RPTkUsIChfX3U4ICopJmNsb3NlX2NvbW1hbmQsIHNpemVvZihjbG9zZV9jb21tYW5kKSk7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9SRVBPUlRfVFhfRE9ORSwKKwkJCShfX3U4ICopJmNsb3NlX2NvbW1hbmQsIHNpemVvZihjbG9zZV9jb21tYW5kKSk7CiB9CiAKIApAQCAtMTMxOSw3ICsxMzcyLDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQ7CiAJc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUgKmNvbW1hbmRfaW5mbzsKIAlpbnQgcmV0dmFsID0gMDsKLQkKKwogCWNvbW1hbmRfcG9ydCA9IHNlcmlhbC0+cG9ydFtDT01NQU5EX1BPUlRdOwogCWNvbW1hbmRfaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShjb21tYW5kX3BvcnQpOwogCW11dGV4X2xvY2soJmNvbW1hbmRfaW5mby0+bXV0ZXgpOwpAQCAtMTMzMCw3ICsxMzgzLDggQEAKIAkJY29tbWFuZF9wb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGNvbW1hbmRfcG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAocmV0dmFsKSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJldHZhbCk7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmV0dmFsKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0KQEAgLTE0MDAsNyArMTQ1NCw4IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKnVyYl90b193cmFwKHN0cnVjdCB1cmIqIHVyYiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3N0YXRpYyBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp1cmJfdG9fd3JhcChzdHJ1Y3QgdXJiICp1cmIsCisJCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwpAQCAtMTQyNiw3ICsxNDgxLDcgQEAKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlLCByeF93b3JrKTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gaW5mby0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOwogCXN0cnVjdCB1cmIgKnVyYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQ0OSw3ICsxNTA0LDggQEAKIAkJdXJiID0gd3JhcC0+dXJiOwogCiAJCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCQlpbnQgbGVuID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJaW50IGxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwKKwkJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOwogCQkJLyogVGhpcyBzdHVmZiBjYW4gZ28gYXdheSBub3cgSSBzdXNwZWN0ICovCiAJCQlpZiAodW5saWtlbHkobGVuIDwgdXJiLT5hY3R1YWxfbGVuZ3RoKSkgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CkBAIC0xNDY2LDcgKzE1MjIsOCBAQAogCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19mcmVlKTsKIAkJCWNvbnRpbnVlOwpAQCAtMTQ4NSw3ICsxNTQyLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ29ubmVjdCBUZWNoJ3MgV2hpdGUgSGVhdCBtb2R1bGUgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IF9faW5pdCB3aGl0ZWhlYXRfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHdoaXRlaGVhdF9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZ3aGl0ZWhlYXRfZmFrZV9kZXZpY2UpOwpAQCAtMTUwOCwxOSArMTU2NSwxOSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB3aGl0ZWhlYXRfZXhpdCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aGl0ZWhlYXRfZXhpdCh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgmd2hpdGVoZWF0X2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmd2hpdGVoZWF0X2Zha2VfZGV2aWNlKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZ3aGl0ZWhlYXRfZGV2aWNlKTsKKwl1c2JfZGVyZWdpc3Rlcigmd2hpdGVoZWF0X2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ3aGl0ZWhlYXRfZmFrZV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmd2hpdGVoZWF0X2RldmljZSk7CiB9CiAKIAogbW9kdWxlX2luaXQod2hpdGVoZWF0X2luaXQpOwogbW9kdWxlX2V4aXQod2hpdGVoZWF0X2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogTU9EVUxFX0ZJUk1XQVJFKCJ3aGl0ZWhlYXQuZnciKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuaAppbmRleCBmMTYwNzk3Li4zODA2NWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5oCkBAIC0yLDcgKzIsNyBAQAogICogVVNCIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBkcml2ZXIKICAqCiAgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMgotICogICAgICAgICAgQ29ubmVjdCBUZWNoIEluYy4JCisgKiAgICAgICAgICBDb25uZWN0IFRlY2ggSW5jLgogICoKICAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwCiAgKiAgICAgICAgICBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQpAQCAtMTIsNyArMTIsOCBAQAogICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMKKyAqIGRyaXZlcgogICoKICAqLwogCkBAIC0zMCwxMyArMzEsMTYgQEAKICNkZWZpbmUgV0hJVEVIRUFUX0RVTVAJCQk3CS8qIGR1bXAgbWVtb3J5ICovCiAjZGVmaW5lIFdISVRFSEVBVF9TVEFUVVMJCTgJLyogZ2V0IHN0YXR1cyAqLwogI2RlZmluZSBXSElURUhFQVRfUFVSR0UJCQk5CS8qIGNsZWFyIHRoZSBVQVJUIGZpZm9zICovCi0jZGVmaW5lIFdISVRFSEVBVF9HRVRfRFRSX1JUUwkJMTAJLyogZ2V0IHRoZSBzdGF0ZSBvZiBEVFIgYW5kIFJUUyBmb3IgYSBwb3J0ICovCi0jZGVmaW5lIFdISVRFSEVBVF9HRVRfSFdfSU5GTwkJMTEJLyogZ2V0IEVFUFJPTSBpbmZvIGFuZCBoYXJkd2FyZSBJRCAqLworI2RlZmluZSBXSElURUhFQVRfR0VUX0RUUl9SVFMJCTEwCS8qIGdldCB0aGUgc3RhdGUgb2YgRFRSIGFuZCBSVFMKKwkJCQkJCQlmb3IgYSBwb3J0ICovCisjZGVmaW5lIFdISVRFSEVBVF9HRVRfSFdfSU5GTwkJMTEJLyogZ2V0IEVFUFJPTSBpbmZvIGFuZAorCQkJCQkJCWhhcmR3YXJlIElEICovCiAjZGVmaW5lIFdISVRFSEVBVF9SRVBPUlRfVFhfRE9ORQkxMgkvKiBnZXQgdGhlIG5leHQgVFggZG9uZSAqLwogI2RlZmluZSBXSElURUhFQVRfRVZFTlQJCQkxMwkvKiB1bnNvbGljaXRlZCBzdGF0dXMgZXZlbnRzICovCi0jZGVmaW5lIFdISVRFSEVBVF9FQ0hPCQkJMTQJLyogc2VuZCBkYXRhIHRvIHRoZSBpbmRpY2F0ZWQgSU4gZW5kcG9pbnQgKi8KLSNkZWZpbmUgV0hJVEVIRUFUX0RPX1RFU1QJCTE1CS8qIHBlcmZvcm0gdGhlIHNwZWNpZmllZCB0ZXN0ICovCi0jZGVmaW5lIFdISVRFSEVBVF9DTURfQ09NUExFVEUJCTE2CS8qIHJlcGx5IGZvciBjZXJ0YWluIGNvbW1hbmRzICovCisjZGVmaW5lIFdISVRFSEVBVF9FQ0hPCQkJMTQJLyogc2VuZCBkYXRhIHRvIHRoZSBpbmRpY2F0ZWQKKwkJCQkJCSAgIElOIGVuZHBvaW50ICovCisjZGVmaW5lIFdISVRFSEVBVF9ET19URVNUCQkxNQkvKiBwZXJmb3JtIHNwZWNpZmllZCB0ZXN0ICovCisjZGVmaW5lIFdISVRFSEVBVF9DTURfQ09NUExFVEUJCTE2CS8qIHJlcGx5IGZvciBzb21lIGNvbW1hbmRzICovCiAjZGVmaW5lIFdISVRFSEVBVF9DTURfRkFJTFVSRQkJMTcJLyogcmVwbHkgZm9yIGZhaWxlZCBjb21tYW5kcyAqLwogCiAKQEAgLTY3LDIwICs3MSwyOCBAQAogI2RlZmluZSBXSElURUhFQVRfUEFSX01BUksJJzEnCS8qIG1hcmsgKGZvcmNlIDEpIHBhcml0eSAqLwogCiAjZGVmaW5lIFdISVRFSEVBVF9TRkxPV19OT05FCSduJwkvKiBubyBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgV0hJVEVIRUFUX1NGTE9XX1JYCSdyJwkvKiBYT0ZGL09OIGlzIHNlbnQgd2hlbiBSWCBmaWxscy9lbXB0aWVzICovCi0jZGVmaW5lIFdISVRFSEVBVF9TRkxPV19UWAkndCcJLyogd2hlbiByZWNlaXZlZCBYT0ZGL09OIHdpbGwgc3RvcC9zdGFydCBUWCAqLworI2RlZmluZSBXSElURUhFQVRfU0ZMT1dfUlgJJ3InCS8qIFhPRkYvT04gaXMgc2VudCB3aGVuIFJYCisJCQkJCSAgIGZpbGxzL2VtcHRpZXMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NGTE9XX1RYCSd0JwkvKiB3aGVuIHJlY2VpdmVkIFhPRkYvT04gd2lsbAorCQkJCQkgICBzdG9wL3N0YXJ0IFRYICovCiAjZGVmaW5lIFdISVRFSEVBVF9TRkxPV19SWFRYCSdiJwkvKiBib3RoIFNGTE9XX1JYIGFuZCBTRkxPV19UWCAqLwogCiAjZGVmaW5lIFdISVRFSEVBVF9IRkxPV19OT05FCQkweDAwCS8qIG5vIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwotI2RlZmluZSBXSElURUhFQVRfSEZMT1dfUlRTX1RPR0dMRQkweDAxCS8qIFJUUyBpcyBvbiBkdXJpbmcgdHJhbnNtaXQsIG9mZiBvdGhlcndpc2UgKi8KLSNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX0RUUgkJMHgwMgkvKiBEVFIgaXMgb2ZmL29uIHdoZW4gUlggZmlsbHMvZW1wdGllcyAqLwotI2RlZmluZSBXSElURUhFQVRfSEZMT1dfQ1RTCQkweDA4CS8qIHdoZW4gcmVjZWl2ZWQgQ1RTIG9mZi9vbiB3aWxsIHN0b3Avc3RhcnQgVFggKi8KLSNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX0RTUgkJMHgxMAkvKiB3aGVuIHJlY2VpdmVkIERTUiBvZmYvb24gd2lsbCBzdG9wL3N0YXJ0IFRYICovCi0jZGVmaW5lIFdISVRFSEVBVF9IRkxPV19SVFMJCTB4ODAJLyogUlRTIGlzIG9mZi9vbiB3aGVuIFJYIGZpbGxzL2VtcHRpZXMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX1JUU19UT0dHTEUJMHgwMQkvKiBSVFMgaXMgb24gZHVyaW5nIHRyYW5zbWl0LAorCQkJCQkJICAgb2ZmIG90aGVyd2lzZSAqLworI2RlZmluZSBXSElURUhFQVRfSEZMT1dfRFRSCQkweDAyCS8qIERUUiBpcyBvZmYvb24gd2hlbiBSWAorCQkJCQkJICAgZmlsbHMvZW1wdGllcyAqLworI2RlZmluZSBXSElURUhFQVRfSEZMT1dfQ1RTCQkweDA4CS8qIHdoZW4gcmVjZWl2ZWQgQ1RTIG9mZi9vbgorCQkJCQkJICAgd2lsbCBzdG9wL3N0YXJ0IFRYICovCisjZGVmaW5lIFdISVRFSEVBVF9IRkxPV19EU1IJCTB4MTAJLyogd2hlbiByZWNlaXZlZCBEU1Igb2ZmL29uCisJCQkJCQkgICB3aWxsIHN0b3Avc3RhcnQgVFggKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX1JUUwkJMHg4MAkvKiBSVFMgaXMgb2ZmL29uIHdoZW4gUlgKKwkJCQkJCSAgIGZpbGxzL2VtcHRpZXMgKi8KIAogc3RydWN0IHdoaXRlaGVhdF9wb3J0X3NldHRpbmdzIHsKIAlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLwotCV9fdTMyCWJhdWQ7CQkvKiBhbnkgdmFsdWUgNyAtIDQ2MDgwMCwgZmlybXdhcmUgY2FsY3VsYXRlcyBiZXN0IGZpdDsgYXJyaXZlcyBsaXR0bGUgZW5kaWFuICovCisJX191MzIJYmF1ZDsJCS8qIGFueSB2YWx1ZSA3IC0gNDYwODAwLCBmaXJtd2FyZSBjYWxjdWxhdGVzCisJCQkJICAgYmVzdCBmaXQ7IGFycml2ZXMgbGl0dGxlIGVuZGlhbiAqLwogCV9fdTgJYml0czsJCS8qIDUsIDYsIDcsIG9yIDggKi8KIAlfX3U4CXN0b3A7CQkvKiAxIG9yIDIsIGRlZmF1bHQgMSAoMiA9IDEuNSBpZiBiaXRzID0gNSkgKi8KIAlfX3U4CXBhcml0eTsJCS8qIHNlZSBXSElURUhFQVRfUEFSXyogYWJvdmUgKi8KQEAgLTE2NywxMiArMTc5LDE0IEBACiAgKi8KICNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfVUFSVF9SVwkJMHgwMSAgLyogcmVhZC93cml0ZSB1YXJ0IHJlZ2lzdGVycyAqLwogI2RlZmluZSBXSElURUhFQVRfVEVTVF9VQVJUX0lOVFIJMHgwMiAgLyogdWFydCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfU0VUVVBfQ09OVAkweDAzICAvKiBzZXR1cCBmb3IgUE9SVF9DT05UL1BPUlRfRElTQ09OVCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9TRVRVUF9DT05UCTB4MDMgIC8qIHNldHVwIGZvcgorCQkJCQkJUE9SVF9DT05UL1BPUlRfRElTQ09OVCAqLwogI2RlZmluZSBXSElURUhFQVRfVEVTVF9QT1JUX0NPTlQJMHgwNCAgLyogcG9ydCBjb25uZWN0ICovCiAjZGVmaW5lIFdISVRFSEVBVF9URVNUX1BPUlRfRElTQ09OVAkweDA1ICAvKiBwb3J0IGRpc2Nvbm5lY3QgKi8KICNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfVUFSVF9DTEtfU1RBUlQJMHgwNiAgLyogdWFydCBjbG9jayB0ZXN0IHN0YXJ0ICovCiAjZGVmaW5lIFdISVRFSEVBVF9URVNUX1VBUlRfQ0xLX1NUT1AJMHgwNyAgLyogdWFydCBjbG9jayB0ZXN0IHN0b3AgKi8KLSNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfTU9ERU1fRlQJCTB4MDggIC8qIG1vZGVtIHNpZ25hbHMsIHJlcXVpcmVzIGEgbG9vcGJhY2sgY2FibGUvY29ubmVjdG9yICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX01PREVNX0ZUCQkweDA4ICAvKiBtb2RlbSBzaWduYWxzLCByZXF1aXJlcyBhCisJCQkJCQlsb29wYmFjayBjYWJsZS9jb25uZWN0b3IgKi8KICNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfRVJBU0VfRUVQUk9NCTB4MDkgIC8qIGVyYXNlIGVlcHJvbSAqLwogI2RlZmluZSBXSElURUhFQVRfVEVTVF9SRUFEX0VFUFJPTQkweDBhICAvKiByZWFkIGVlcHJvbSAqLwogI2RlZmluZSBXSElURUhFQVRfVEVTVF9QUk9HUkFNX0VFUFJPTQkweDBiICAvKiBwcm9ncmFtIGVlcHJvbSAqLwpAQCAtMTk4LDE5ICsyMTIsMjcgQEAKICNkZWZpbmUgV0hJVEVIRUFUX0VWRU5UX0NPTk5FQ1QJCTB4MDgJLyogY29ubmVjdCBmaWVsZCBpcyB2YWxpZCAqLwogCiAjZGVmaW5lIFdISVRFSEVBVF9GTE9XX05PTkUJCTB4MDAJLyogbm8gZmxvdyBjb250cm9sIGFjdGl2ZSAqLwotI2RlZmluZSBXSElURUhFQVRfRkxPV19IQVJEX09VVAkJMHgwMQkvKiBUWCBpcyBzdG9wcGVkIGJ5IENUUyAod2FpdGluZyBmb3IgQ1RTIHRvIGdvIG9uKSAqLwotI2RlZmluZSBXSElURUhFQVRfRkxPV19IQVJEX0lOCQkweDAyCS8qIHJlbW90ZSBUWCBpcyBzdG9wcGVkIGJ5IFJUUyAqLwotI2RlZmluZSBXSElURUhFQVRfRkxPV19TT0ZUX09VVAkJMHgwNAkvKiBUWCBpcyBzdG9wcGVkIGJ5IFhPRkYgcmVjZWl2ZWQgKHdhaXRpbmcgZm9yIFhPTikgKi8KLSNkZWZpbmUgV0hJVEVIRUFUX0ZMT1dfU09GVF9JTgkJMHgwOAkvKiByZW1vdGUgVFggaXMgc3RvcHBlZCBieSBYT0ZGIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIFdISVRFSEVBVF9GTE9XX0hBUkRfT1VUCQkweDAxCS8qIFRYIGlzIHN0b3BwZWQgYnkgQ1RTCisJCQkJCQkgICh3YWl0aW5nIGZvciBDVFMgdG8gZ28gb24pICovCisjZGVmaW5lIFdISVRFSEVBVF9GTE9XX0hBUkRfSU4JCTB4MDIJLyogcmVtb3RlIFRYIGlzIHN0b3BwZWQKKwkJCQkJCSAgYnkgUlRTICovCisjZGVmaW5lIFdISVRFSEVBVF9GTE9XX1NPRlRfT1VUCQkweDA0CS8qIFRYIGlzIHN0b3BwZWQgYnkgWE9GRgorCQkJCQkJICByZWNlaXZlZCAod2FpdGluZyBmb3IgWE9OKSAqLworI2RlZmluZSBXSElURUhFQVRfRkxPV19TT0ZUX0lOCQkweDA4CS8qIHJlbW90ZSBUWCBpcyBzdG9wcGVkIGJ5IFhPRkYKKwkJCQkJCSAgdHJhbnNtaXR0ZWQgKi8KICNkZWZpbmUgV0hJVEVIRUFUX0ZMT1dfVFhfRE9ORQkJMHg4MAkvKiBUWCBoYXMgY29tcGxldGVkICovCiAKIHN0cnVjdCB3aGl0ZWhlYXRfc3RhdHVzX2luZm8gewogCV9fdTgJcG9ydDsJCS8qIHBvcnQgbnVtYmVyICgxIHRvIE4pICovCi0JX191OAlldmVudDsJCS8qIGluZGljYXRlcyB3aGF0IHRoZSBjdXJyZW50IGV2ZW50IGlzLCBzZWUgV0hJVEVIRUFUX0VWRU5UXyogYWJvdmUgKi8KLQlfX3U4CW1vZGVtOwkJLyogbW9kZW0gc2lnbmFsIHN0YXR1cyAoY29weSBvZiB1YXJ0J3MgTVNSIHJlZ2lzdGVyKSAqLworCV9fdTgJZXZlbnQ7CQkvKiBpbmRpY2F0ZXMgd2hhdCB0aGUgY3VycmVudCBldmVudCBpcywKKwkJCQkJc2VlIFdISVRFSEVBVF9FVkVOVF8qIGFib3ZlICovCisJX191OAltb2RlbTsJCS8qIG1vZGVtIHNpZ25hbCBzdGF0dXMgKGNvcHkgb2YgdWFydCdzCisJCQkJCU1TUiByZWdpc3RlcikgKi8KIAlfX3U4CWVycm9yOwkJLyogbGluZSBzdGF0dXMgKGNvcHkgb2YgdWFydCdzIExTUiByZWdpc3RlcikgKi8KLQlfX3U4CWZsb3c7CQkvKiBmbG93IGNvbnRyb2wgc3RhdGUsIHNlZSBXSElURUhFQVRfRkxPV18qIGFib3ZlICovCi0JX191OAljb25uZWN0OwkvKiAwIG1lYW5zIG5vdCBjb25uZWN0ZWQsIG5vbi16ZXJvIG1lYW5zIGNvbm5lY3RlZCAqLworCV9fdTgJZmxvdzsJCS8qIGZsb3cgY29udHJvbCBzdGF0ZSwgc2VlIFdISVRFSEVBVF9GTE9XXyoKKwkJCQkJYWJvdmUgKi8KKwlfX3U4CWNvbm5lY3Q7CS8qIDAgbWVhbnMgbm90IGNvbm5lY3RlZCwgbm9uLXplcm8gbWVhbnMKKwkJCQkJY29ubmVjdGVkICovCiB9OwogCiAKQEAgLTI1Niw3ICsyNzgsOCBAQAogc3RydWN0IHdoaXRlaGVhdF9ldmVudF9pbmZvIHsKIAlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLwogCV9fdTgJZXZlbnQ7CQkvKiBzZWUgd2hpdGVoZWF0X3N0YXR1c19pbmZvLmV2ZW50ICovCi0JX191OAlpbmZvOwkJLyogc2VlIHdoaXRlaGVhdF9zdGF0dXNfaW5mby5tb2RlbSwgLmVycm9yLCAuZmxvdywgLmNvbm5lY3QgKi8KKwlfX3U4CWluZm87CQkvKiBzZWUgd2hpdGVoZWF0X3N0YXR1c19pbmZvLm1vZGVtLCAuZXJyb3IsCisJCQkJCS5mbG93LCAuY29ubmVjdCAqLwogfTsKIAogCkBAIC0yNjksNyArMjkyLDggQEAKIAogc3RydWN0IHdoaXRlaGVhdF90ZXN0X2luZm8gewogCV9fdTgJcG9ydDsJCS8qIHBvcnQgbnVtYmVyICgxIHRvIE4pICovCi0JX191OAl0ZXN0OwkJLyogaW5kaWNhdGVzIHdoaWNoIHRlc3QgdGhpcyBpcyBhIHJlc3BvbnNlIGZvciwgc2VlIFdISVRFSEVBVF9ET19URVNUIGFib3ZlICovCisJX191OAl0ZXN0OwkJLyogaW5kaWNhdGVzIHdoaWNoIHRlc3QgdGhpcyBpcyBhIHJlc3BvbnNlIGZvciwKKwkJCQkgICBzZWUgV0hJVEVIRUFUX0RPX1RFU1QgYWJvdmUgKi8KIAlfX3U4CXN0YXR1czsJCS8qIHNlZSBXSElURUhFQVRfVEVTVF8qIGFib3ZlICovCiAJX191OAlyZXN1bHRzWzMyXTsJLyogdGVzdC1kZXBlbmRlbnQgcmVzdWx0cyAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKaW5kZXggNTc5ZTlmNS4uMTdmMWFlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKQEAgLTEsNyArMSw1IEBACiAvKiBEcml2ZXIgZm9yIERhdGFmYWIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCiAgKgotICogJElkOiBkYXRhZmFiLmMsdiAxLjcgMjAwMi8wMi8yNSAwMDo0MDoxMyBtZGhhcm0gRXhwICQKLSAqCiAgKiBkYXRhZmFiIGRyaXZlciB2MC4xOgogICoKICAqIEZpcnN0IHJlbGVhc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYwppbmRleCAwMWU0MzA2Li5hMmI1NTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5jCkBAIC0xLDggKzEsNiBAQAogLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCiAgKiBEZWJ1Z2dpbmcgRnVuY3Rpb25zIFNvdXJjZSBDb2RlIEZpbGUKICAqCi0gKiAkSWQ6IGRlYnVnLmMsdiAxLjkgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKLSAqCiAgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKICAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmgKaW5kZXggNzdlMjQ0YS4uZGJiOTg1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuaApAQCAtMSw4ICsxLDYgQEAKIC8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcwogICogRGVidWdnaW5nIEZ1bmN0aW9ucyBIZWFkZXIgRmlsZQogICoKLSAqICRJZDogZGVidWcuaCx2IDEuNiAyMDAxLzAxLzEyIDIzOjUxOjA0IG1kaGFybSBFeHAgJAotICoKICAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgogICogICAoYykgMTk5OS0yMDAyIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZHBjbS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmMKaW5kZXggOWE0MTBiNS4uOTM5OTIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmMKQEAgLTEsNyArMSw1IEBACiAvKiBEcml2ZXIgZm9yIE1pY3JvdGVjaCBEUENNLVVTQiBDb21wYWN0Rmxhc2gvU21hcnRNZWRpYSByZWFkZXIKICAqCi0gKiAkSWQ6IGRwY20uYyx2IDEuNCAyMDAxLzA2LzExIDAyOjU0OjI1IG1kaGFybSBFeHAgJAotICoKICAqIERQQ00gZHJpdmVyIHYwLjE6CiAgKgogICogRmlyc3QgcmVsZWFzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uaAppbmRleCA4MWI0NjRjLi5lN2I3YjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uaApAQCAtMSw3ICsxLDUgQEAKIC8qIERyaXZlciBmb3IgTWljcm90ZWNoIERQQ00tVVNCIENvbXBhY3RGbGFzaC9TbWFydE1lZGlhIHJlYWRlcgogICoKLSAqICRJZDogZHBjbS5oLHYgMS4yIDIwMDAvMDgvMjUgMDA6MTM6NTEgbWRoYXJtIEV4cCAkCi0gKgogICogRFBDTSBkcml2ZXIgdjAuMToKICAqCiAgKiBGaXJzdCByZWxlYXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCmluZGV4IGY1YTRlOGQuLjdhNGQ0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCkBAIC0xLDcgKzEsNSBAQAogLyogRHJpdmVyIGZvciBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgogICoKLSAqICRJZDogZnJlZWNvbS5jLHYgMS4yMiAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAotICoKICAqIEZyZWVjb20gdjAuMToKICAqCiAgKiBGaXJzdCByZWxlYXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oCmluZGV4IDFiMDEyZDYuLjIwZDBmZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oCkBAIC0xLDcgKzEsNSBAQAogLyogRHJpdmVyIGZvciBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgogICoKLSAqICRJZDogZnJlZWNvbS5oLHYgMS40IDIwMDAvMDgvMjkgMTQ6NDk6MTUgZGxicm93biBFeHAgJAotICoKICAqIEZyZWVjb20gdjAuMToKICAqCiAgKiBGaXJzdCByZWxlYXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYwppbmRleCAxODdkZDFlLi40OTk1YmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMKQEAgLTEsNyArMSw1IEBACiAvKiBTcGVjaWFsIEluaXRpYWxpemVycyBmb3IgY2VydGFpbiBVU0IgTWFzcyBTdG9yYWdlIGRldmljZXMKICAqCi0gKiAkSWQ6IGluaXRpYWxpemVycy5jLHYgMS4yIDIwMDAvMDkvMDYgMjI6MzU6NTcgbWRoYXJtIEV4cCAkCi0gKgogICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CiAgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oCmluZGV4IGFkM2ZmZDQuLjUyOTMyN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuaApAQCAtMSw3ICsxLDUgQEAKIC8qIEhlYWRlciBmaWxlIGZvciBTcGVjaWFsIEluaXRpYWxpemVycyBmb3IgY2VydGFpbiBVU0IgTWFzcyBTdG9yYWdlIGRldmljZXMKICAqCi0gKiAkSWQ6IGluaXRpYWxpemVycy5oLHYgMS4xIDIwMDAvMDgvMjkgMjM6MDc6MDIgbWRoYXJtIEV4cCAkCi0gKgogICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CiAgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCmluZGV4IDNhZGRjZDguLjM4M2FiZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwpAQCAtMSw3ICsxLDUgQEAKIC8qIFRyYW5zcG9ydCAmIFByb3RvY29sIERyaXZlciBmb3IgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiBJU0QyMDAgQVNJQwogICoKLSAqICRJZDogaXNkMjAwLmMsdiAxLjE2IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCi0gKgogICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2U6CiAgKiAgIChDKSAyMDAxLTIwMDIgQmrDtnJuIFN0ZW5iZXJnIChiam9ybkBoYXh4LnNlKQogICoKQEAgLTU4Niw3ICs1ODQsNyBAQAogCS8qIGlmIHRoZSBjb21tYW5kIGdldHMgYWJvcnRlZCBieSB0aGUgaGlnaGVyIGxheWVycywgd2UgbmVlZCB0bwogCSAqIHNob3J0LWNpcmN1aXQgYWxsIG90aGVyIHByb2Nlc3NpbmcKIAkgKi8KLQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZGZsYWdzKSkgewogCQlVU19ERUJVR1AoIi0tIGNvbW1hbmQgd2FzIGFib3J0ZWRcbiIpOwogCQlnb3RvIEhhbmRsZV9BYm9ydDsKIAl9CkBAIC02MzMsNyArNjMxLDcgQEAKIAogCWlmIChuZWVkX2F1dG9fc2Vuc2UpIHsKIAkJcmVzdWx0ID0gaXNkMjAwX3JlYWRfcmVncyh1cyk7Ci0JCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZGZsYWdzKSkgewogCQkJVVNfREVCVUdQKCItLSBhdXRvLXNlbnNlIGFib3J0ZWRcbiIpOwogCQkJZ290byBIYW5kbGVfQWJvcnQ7CiAJCX0KQEAgLTY2Myw3ICs2NjEsNyBAQAogCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCiAJLyogcGVybWl0IHRoZSByZXNldCB0cmFuc2ZlciB0byB0YWtlIHBsYWNlICovCi0JY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwljbGVhcl9iaXQoVVNfRkxJRFhfQUJPUlRJTkcsICZ1cy0+ZGZsYWdzKTsKIAkvKiBOZWVkIHJlc2V0IGhlcmUgKi8KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCmluZGV4IDYxMDk3Y2IuLmRmNjdmMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKQEAgLTEsNyArMSw1IEBACiAvKiBEcml2ZXIgZm9yIExleGFyICJKdW1wc2hvdCIgQ29tcGFjdCBGbGFzaCByZWFkZXIKICAqCi0gKiAkSWQ6IGp1bXBzaG90LmMsdiAxLjcgMjAwMi8wMi8yNSAwMDo0MDoxMyBtZGhhcm0gRXhwICQKLSAqCiAgKiBqdW1wc2hvdCBkcml2ZXIgdjAuMToKICAqCiAgKiBGaXJzdCByZWxlYXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKaW5kZXggYjliOGVkZS4uM2IzMzU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYwpAQCAtMSw3ICsxLDUgQEAKIC8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcwogICoKLSAqICRJZDogcHJvdG9jb2wuYyx2IDEuMTQgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKLSAqCiAgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKICAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmgKaW5kZXggODczN2EzNi4uNDg3MDU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuaApAQCAtMSw4ICsxLDYgQEAKIC8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcwogICogUHJvdG9jb2wgRnVuY3Rpb25zIEhlYWRlciBGaWxlCiAgKgotICogJElkOiBwcm90b2NvbC5oLHYgMS40IDIwMDEvMDIvMTMgMDc6MTA6MDMgbWRoYXJtIEV4cCAkCi0gKgogICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CiAgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwppbmRleCAzZmNkZTlmLi4wOTc3OWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCkBAIC0xLDggKzEsNiBAQAogLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCiAgKiBTQ1NJIGxheWVyIGdsdWUgY29kZQogICoKLSAqICRJZDogc2NzaWdsdWUuYyx2IDEuMjYgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKLSAqCiAgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKICAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKICAqCkBAIC03Myw3ICs3MSw2IEBACiBzdGF0aWMgaW50IHNsYXZlX2FsbG9jIChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gaG9zdF90b191cyhzZGV2LT5ob3N0KTsKLQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmJ1bGtfaW5fZXA7CiAKIAkvKgogCSAqIFNldCB0aGUgSU5RVUlSWSB0cmFuc2ZlciBsZW5ndGggdG8gMzYuICBXZSBkb24ndCB1c2UgYW55IG9mCkBAIC04MiwxNiArNzksMjIgQEAKIAkgKi8KIAlzZGV2LT5pbnF1aXJ5X2xlbiA9IDM2OwogCi0JLyogU2NhdHRlci1nYXRoZXIgYnVmZmVycyAoYWxsIGJ1dCB0aGUgbGFzdCkgbXVzdCBoYXZlIGEgbGVuZ3RoCi0JICogZGl2aXNpYmxlIGJ5IHRoZSBidWxrIG1heHBhY2tldCBzaXplLiAgT3RoZXJ3aXNlIGEgZGF0YSBwYWNrZXQKLQkgKiB3b3VsZCBlbmQgdXAgYmVpbmcgc2hvcnQsIGNhdXNpbmcgYSBwcmVtYXR1cmUgZW5kIHRvIHRoZSBkYXRhCi0JICogdHJhbnNmZXIuICBXZSdsbCB1c2UgdGhlIG1heHBhY2tldCB2YWx1ZSBvZiB0aGUgYnVsay1JTiBwaXBlCi0JICogdG8gc2V0IHRoZSBTQ1NJIGRldmljZSBxdWV1ZSdzIERNQSBhbGlnbm1lbnQgbWFzay4KKwkvKiBVU0IgaGFzIHVudXN1YWwgRE1BLWFsaWdubWVudCByZXF1aXJlbWVudHM6IEFsdGhvdWdoIHRoZQorCSAqIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgZWFjaCBzY2F0dGVyLWdhdGhlciBlbGVtZW50IGRvZXNuJ3QgbWF0dGVyLAorCSAqIHRoZSBsZW5ndGggb2YgZWFjaCBlbGVtZW50IGV4Y2VwdCB0aGUgbGFzdCBtdXN0IGJlIGRpdmlzaWJsZQorCSAqIGJ5IHRoZSBCdWxrIG1heHBhY2tldCB2YWx1ZS4gIFRoZXJlJ3MgY3VycmVudGx5IG5vIHdheSB0bworCSAqIGV4cHJlc3MgdGhpcyBieSBibG9jay1sYXllciBjb25zdHJhaW50cywgc28gd2UnbGwgY29wIG91dAorCSAqIGFuZCBzaW1wbHkgcmVxdWlyZSBhZGRyZXNzZXMgdG8gYmUgYWxpZ25lZCBhdCA1MTItYnl0ZQorCSAqIGJvdW5kYXJpZXMuICBUaGlzIGlzIG9rYXkgc2luY2UgbW9zdCBibG9jayBJL08gaW52b2x2ZXMKKwkgKiBoYXJkd2FyZSBzZWN0b3JzIHRoYXQgYXJlIG11bHRpcGxlcyBvZiA1MTIgYnl0ZXMgaW4gbGVuZ3RoLAorCSAqIGFuZCBzaW5jZSBob3N0IGNvbnRyb2xsZXJzIHVwIHRocm91Z2ggVVNCIDIuMCBoYXZlIG1heHBhY2tldAorCSAqIHZhbHVlcyBubyBsYXJnZXIgdGhhbiA1MTIuCisJICoKKwkgKiBCdXQgaXQgZG9lc24ndCBzdWZmaWNlIGZvciBXaXJlbGVzcyBVU0IsIHdoZXJlIEJ1bGsgbWF4cGFja2V0CisJICogdmFsdWVzIGNhbiBiZSBhcyBsYXJnZSBhcyAyMDQ4LiAgVG8gbWFrZSB0aGF0IHdvcmsgcHJvcGVybHkKKwkgKiB3aWxsIHJlcXVpcmUgY2hhbmdlcyB0byB0aGUgYmxvY2sgbGF5ZXIuCiAJICovCi0JYnVsa19pbl9lcCA9IHVzLT5wdXNiX2Rldi0+ZXBfaW5bdXNiX3BpcGVlbmRwb2ludCh1cy0+cmVjdl9idWxrX3BpcGUpXTsKLQlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKLQkJCWxlMTZfdG9fY3B1KGJ1bGtfaW5fZXAtPmRlc2Mud01heFBhY2tldFNpemUpIC0gMSk7Ci0JCQkvKiB3TWF4UGFja2V0U2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiAqLworCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAoNTEyIC0gMSkpOwogCiAJLyoKIAkgKiBUaGUgVUZJIHNwZWMgdHJlYXRlcyB0aGUgUGVyaXBoZXJhbCBRdWFsaWZpZXIgYml0cyBpbiBhbgpAQCAtMTE2LDEwICsxMTksMTAgQEAKIAkgKiB3aGlsZSBvdGhlcnMgaGF2ZSB0cm91YmxlIHdpdGggbW9yZSB0aGFuIDY0Sy4gQXQgdGhpcyB0aW1lIHdlCiAJICogYXJlIGxpbWl0aW5nIGJvdGggdG8gMzJLICg2NCBzZWN0b3JlcykuCiAJICovCi0JaWYgKHVzLT5mbGFncyAmIChVU19GTF9NQVhfU0VDVE9SU182NCB8IFVTX0ZMX01BWF9TRUNUT1JTX01JTikpIHsKKwlpZiAodXMtPmZmbGFncyAmIChVU19GTF9NQVhfU0VDVE9SU182NCB8IFVTX0ZMX01BWF9TRUNUT1JTX01JTikpIHsKIAkJdW5zaWduZWQgaW50IG1heF9zZWN0b3JzID0gNjQ7CiAKLQkJaWYgKHVzLT5mbGFncyAmIFVTX0ZMX01BWF9TRUNUT1JTX01JTikKKwkJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9NQVhfU0VDVE9SU19NSU4pCiAJCQltYXhfc2VjdG9ycyA9IFBBR0VfQ0FDSEVfU0laRSA+PiA5OwogCQlpZiAoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+bWF4X3NlY3RvcnMgPiBtYXhfc2VjdG9ycykKIAkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLApAQCAtMTQ4LDcgKzE1MSw3IEBACiAJCSAqIG1ham9yaXR5IG9mIGRldmljZXMgd29yayBmaW5lLCBidXQgYSBmZXcgc3RpbGwgY2FuJ3QKIAkJICogaGFuZGxlIGl0LiAgVGhlIHNkIGRyaXZlciB3aWxsIHNpbXBseSBhc3N1bWUgdGhvc2UKIAkJICogZGV2aWNlcyBhcmUgd3JpdGUtZW5hYmxlZC4gKi8KLQkJaWYgKHVzLT5mbGFncyAmIFVTX0ZMX05PX1dQX0RFVEVDVCkKKwkJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9OT19XUF9ERVRFQ1QpCiAJCQlzZGV2LT5za2lwX21zX3BhZ2VfM2YgPSAxOwogCiAJCS8qIEEgbnVtYmVyIG9mIGRldmljZXMgaGF2ZSBwcm9ibGVtcyB3aXRoIE1PREUgU0VOU0UgZm9yCkBAIC0xNTgsMTMgKzE2MSwxMyBAQAogCQkvKiBTb21lIGRpc2tzIHJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGJsb2NrcyBpbiByZXNwb25zZQogCQkgKiB0byBSRUFEIENBUEFDSVRZIHJhdGhlciB0aGFuIHRoZSBoaWdoZXN0IGJsb2NrIG51bWJlci4KIAkJICogSWYgdGhpcyBkZXZpY2UgbWFrZXMgdGhhdCBtaXN0YWtlLCB0ZWxsIHRoZSBzZCBkcml2ZXIuICovCi0JCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9GSVhfQ0FQQUNJVFkpCisJCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfRklYX0NBUEFDSVRZKQogCQkJc2Rldi0+Zml4X2NhcGFjaXR5ID0gMTsKIAogCQkvKiBBIGZldyBkaXNrcyBoYXZlIHR3byBpbmRpc3Rpbmd1aXNoYWJsZSB2ZXJzaW9uLCBvbmUgb2YKIAkJICogd2hpY2ggcmVwb3J0cyB0aGUgY29ycmVjdCBjYXBhY2l0eSBhbmQgdGhlIG90aGVyIGRvZXMgbm90LgogCQkgKiBUaGUgc2QgZHJpdmVyIGhhcyB0byBndWVzcyB3aGljaCBpcyB0aGUgY2FzZS4gKi8KLQkJaWYgKHVzLT5mbGFncyAmIFVTX0ZMX0NBUEFDSVRZX0hFVVJJU1RJQ1MpCisJCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfQ0FQQUNJVFlfSEVVUklTVElDUykKIAkJCXNkZXYtPmd1ZXNzX2NhcGFjaXR5ID0gMTsKIAogCQkvKiBTb21lIGRldmljZXMgcmVwb3J0IGEgU0NTSSByZXZpc2lvbiBsZXZlbCBhYm92ZSAyIGJ1dCBhcmUKQEAgLTIxMyw3ICsyMTYsNyBAQAogCiAJLyogU29tZSBkZXZpY2VzIGNob2tlIHdoZW4gdGhleSByZWNlaXZlIGEgUFJFVkVOVC1BTExPVyBNRURJVU0KIAkgKiBSRU1PVkFMIGNvbW1hbmQsIHNvIHN1cHByZXNzIHRob3NlIGNvbW1hbmRzLiAqLwotCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9OT1RfTE9DS0FCTEUpCisJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9OT1RfTE9DS0FCTEUpCiAJCXNkZXYtPmxvY2thYmxlID0gMDsKIAogCS8qIHRoaXMgaXMgdG8gc2F0aXNmeSB0aGUgY29tcGlsZXIsIHRobyBJIGRvbid0IHRoaW5rIHRoZSAKQEAgLTIzOCw3ICsyNDEsNyBAQAogCX0KIAogCS8qIGZhaWwgdGhlIGNvbW1hbmQgaWYgd2UgYXJlIGRpc2Nvbm5lY3RpbmcgKi8KLQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5kZmxhZ3MpKSB7CiAJCVVTX0RFQlVHUCgiRmFpbCBjb21tYW5kIGR1cmluZyBkaXNjb25uZWN0XG4iKTsKIAkJc3JiLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKIAkJZG9uZShzcmIpOwpAQCAtMjQ4LDcgKzI1MSw3IEBACiAJLyogZW5xdWV1ZSB0aGUgY29tbWFuZCBhbmQgd2FrZSB1cCB0aGUgY29udHJvbCB0aHJlYWQgKi8KIAlzcmItPnNjc2lfZG9uZSA9IGRvbmU7CiAJdXMtPnNyYiA9IHNyYjsKLQl1cCgmKHVzLT5zZW1hKSk7CisJY29tcGxldGUoJnVzLT5jbW5kX3JlYWR5KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjgwLDkgKzI4Myw5IEBACiAJICogd2l0aCB0aGUgcmVzZXQpLiAgTm90ZSB0aGF0IHdlIG11c3QgcmV0YWluIHRoZSBob3N0IGxvY2sgd2hpbGUKIAkgKiBjYWxsaW5nIHVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KCk7IG90aGVyd2lzZSBpdCBtaWdodCBpbnRlcmZlcmUKIAkgKiB3aXRoIGFuIGF1dG8tcmVzZXQgdGhhdCBiZWdpbnMgYXMgc29vbiBhcyB3ZSByZWxlYXNlIHRoZSBsb2NrLiAqLwotCXNldF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKTsKLQlpZiAoIXRlc3RfYml0KFVTX0ZMSURYX1JFU0VUVElORywgJnVzLT5mbGFncykpIHsKLQkJc2V0X2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5mbGFncyk7CisJc2V0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZGZsYWdzKTsKKwlpZiAoIXRlc3RfYml0KFVTX0ZMSURYX1JFU0VUVElORywgJnVzLT5kZmxhZ3MpKSB7CisJCXNldF9iaXQoVVNfRkxJRFhfQUJPUlRJTkcsICZ1cy0+ZGZsYWdzKTsKIAkJdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQodXMpOwogCX0KIAlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CkBAIC0zMjksNyArMzMyLDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gdXNfdG9faG9zdCh1cyk7CiAKIAlzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoaG9zdCwgMCwgMCk7Ci0JaWYgKHVzLT5mbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpIHsKKwlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpIHsKIAkJZm9yIChpID0gMTsgaSA8IGhvc3QtPm1heF9pZDsgKytpKQogCQkJc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KGhvc3QsIDAsIGkpOwogCX0KQEAgLTQwMCw3ICs0MDMsNyBAQAogCQlwb3MgKz0gc3ByaW50Zihwb3MsICIgICAgICAgUXVpcmtzOiIpOwogCiAjZGVmaW5lIFVTX0ZMQUcobmFtZSwgdmFsdWUpIFwKLQlpZiAodXMtPmZsYWdzICYgdmFsdWUpIHBvcyArPSBzcHJpbnRmKHBvcywgIiAiICNuYW1lKTsKKwlpZiAodXMtPmZmbGFncyAmIHZhbHVlKSBwb3MgKz0gc3ByaW50Zihwb3MsICIgIiAjbmFtZSk7CiBVU19ET19BTExfRkxBR1MKICN1bmRlZiBVU19GTEFHCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuaAppbmRleCA3MzdlNGZhLi5mZmExY2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5oCkBAIC0xLDggKzEsNiBAQAogLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCiAgKiBTQ1NJIENvbm5lY3RpbmcgR2x1ZSBIZWFkZXIgRmlsZQogICoKLSAqICRJZDogc2NzaWdsdWUuaCx2IDEuNCAyMDAwLzA4LzI1IDAwOjEzOjUxIG1kaGFybSBFeHAgJAotICoKICAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgogICogICAoYykgMTk5OSwgMjAwMCBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwppbmRleCA4OTcyYjE3Li5jNWE1NGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKQEAgLTEsNiArMSw1IEBACiAvKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi0wOSBTbWFydE1lZGlhIHJlYWRlcgogICoKLSAqICRJZDogc2RkcjA5LmMsdiAxLjI0IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCiAgKiAgIChjKSAyMDAwLCAyMDAxIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBzdGFyYmFuZC5uZXQpCiAgKiAgIChjKSAyMDAyIEFuZHJpZXMgQnJvdXdlciAoYWViQGN3aS5ubCkKICAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmgKaW5kZXggYzAzMDg5YS4uZTUwMDMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oCkBAIC0xLDggKzEsNiBAQAogLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIKICAqIEhlYWRlciBGaWxlCiAgKgotICogJElkOiBzZGRyMDkuaCx2IDEuNSAyMDAwLzA4LzI1IDAwOjEzOjUxIG1kaGFybSBFeHAgJAotICoKICAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgogICogICAoYykgMjAwMCBSb2JlcnQgQmFydWNoIChhdXRvcGhpbGVAZG9sLm5ldCkKICAqICAgKGMpIDIwMDIgQW5kcmllcyBCcm91d2VyIChhZWJAY3dpLm5sKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMKaW5kZXggNmQxNDMyNy4uMGQ4ZGY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCkBAIC0xLDcgKzEsNSBAQAogLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIKICAqCi0gKiAkSWQ6JAotICoKICAqIFNERFI1NSBkcml2ZXIgdjAuMToKICAqCiAgKiBGaXJzdCByZWxlYXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaAppbmRleCBkNmJkMzJmLi5hODE1YTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmgKQEAgLTEsOCArMSw2IEBACiAvKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHJlYWRlcgogICogSGVhZGVyIEZpbGUKICAqCi0gKiAkSWQ6JAotICoKICAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgogICogICAoYykgMjAwMiBTaW1vbiBNdW50b24KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCmluZGV4IDU3MGMxMjUuLmFlNmQ2NDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwpAQCAtMSw3ICsxLDUgQEAKIC8qIERyaXZlciBmb3IgU0NNIE1pY3Jvc3lzdGVtcyAoYS5rLmEuIFNodXR0bGUpIFVTQi1BVEFQSSBjYWJsZQogICoKLSAqICRJZDogc2h1dHRsZV91c2JhdC5jLHYgMS4xNyAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAotICoKICAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgogICogICAoYykgMjAwMCwgMjAwMSBSb2JlcnQgQmFydWNoIChhdXRvcGhpbGVAc3RhcmJhbmQubmV0KQogICogICAoYykgMjAwNCwgMjAwNSBEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaAppbmRleCAzZGRmMTQzLi5kOGJmYzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaApAQCAtMSw4ICsxLDYgQEAKIC8qIERyaXZlciBmb3IgU0NNIE1pY3Jvc3lzdGVtcyBVU0ItQVRBUEkgY2FibGUKICAqIEhlYWRlciBGaWxlCiAgKgotICogJElkOiBzaHV0dGxlX3VzYmF0LmgsdiAxLjUgMjAwMC8wOS8xNyAxNDo0NDo1MiBncm9vdnlqYXZhIEV4cCAkCi0gKgogICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CiAgKiAgIChjKSAyMDAwIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBkb2wubmV0KQogICogICAoYykgMjAwNCwgMjAwNSBEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggNjYxMGQyZGQuLmZjYmJmZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwpAQCAtMSw3ICsxLDUgQEAKIC8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcwogICoKLSAqICRJZDogdHJhbnNwb3J0LmMsdiAxLjQ3IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCi0gKgogICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CiAgKiAgIChjKSAxOTk5LTIwMDIgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCiAgKgpAQCAtNzUsMTQgKzczLDE0IEBACiAgKiBieSBhIHNlcGFyYXRlIGNvZGUgcGF0aC4pCiAgKgogICogVGhlIGFib3J0IGZ1bmN0aW9uICh1c2Jfc3RvcmFnZV9jb21tYW5kX2Fib3J0KCkgaW4gc2NzaWdsdWUuYykgZmlyc3QKLSAqIHNldHMgdGhlIG1hY2hpbmUgc3RhdGUgYW5kIHRoZSBBQk9SVElORyBiaXQgaW4gdXMtPmZsYWdzIHRvIHByZXZlbnQKKyAqIHNldHMgdGhlIG1hY2hpbmUgc3RhdGUgYW5kIHRoZSBBQk9SVElORyBiaXQgaW4gdXMtPmRmbGFncyB0byBwcmV2ZW50CiAgKiBuZXcgVVJCcyBmcm9tIGJlaW5nIHN1Ym1pdHRlZC4gIEl0IHRoZW4gY2FsbHMgdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQoKQotICogYmVsb3csIHdoaWNoIGF0b21pY2FsbHkgdGVzdHMtYW5kLWNsZWFycyB0aGUgVVJCX0FDVElWRSBiaXQgaW4gdXMtPmZsYWdzCisgKiBiZWxvdywgd2hpY2ggYXRvbWljYWxseSB0ZXN0cy1hbmQtY2xlYXJzIHRoZSBVUkJfQUNUSVZFIGJpdCBpbiB1cy0+ZGZsYWdzCiAgKiB0byBzZWUgaWYgdGhlIGN1cnJlbnRfdXJiIG5lZWRzIHRvIGJlIHN0b3BwZWQuICBMaWtld2lzZSwgdGhlIFNHX0FDVElWRQogICogYml0IGlzIHRlc3RlZCB0byBzZWUgaWYgdGhlIGN1cnJlbnRfc2cgc2NhdHRlci1nYXRoZXIgcmVxdWVzdCBuZWVkcyB0byBiZQogICogc3RvcHBlZC4gIFRoZSB0aW1lb3V0IGNhbGxiYWNrIHJvdXRpbmUgZG9lcyBtdWNoIHRoZSBzYW1lIHRoaW5nLgogICoKLSAqIFdoZW4gYSBkaXNjb25uZWN0IG9jY3VycywgdGhlIERJU0NPTk5FQ1RJTkcgYml0IGluIHVzLT5mbGFncyBpcyBzZXQgdG8KKyAqIFdoZW4gYSBkaXNjb25uZWN0IG9jY3VycywgdGhlIERJU0NPTk5FQ1RJTkcgYml0IGluIHVzLT5kZmxhZ3MgaXMgc2V0IHRvCiAgKiBwcmV2ZW50IG5ldyBVUkJzIGZyb20gYmVpbmcgc3VibWl0dGVkLCBhbmQgdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQoKSBpcwogICogY2FsbGVkIHRvIHN0b3AgYW55IG9uZ29pbmcgcmVxdWVzdHMuCiAgKgpAQCAtMTI3LDggKzEyNSw4IEBACiAJbG9uZyB0aW1lbGVmdDsKIAlpbnQgc3RhdHVzOwogCi0JLyogZG9uJ3Qgc3VibWl0IFVSQnMgZHVyaW5nIGFib3J0L2Rpc2Nvbm5lY3QgcHJvY2Vzc2luZyAqLwotCWlmICh1cy0+ZmxhZ3MgJiBBQk9SVElOR19PUl9ESVNDT05ORUNUSU5HKQorCS8qIGRvbid0IHN1Ym1pdCBVUkJzIGR1cmluZyBhYm9ydCBwcm9jZXNzaW5nICovCisJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmRmbGFncykpCiAJCXJldHVybiAtRUlPOwogCiAJLyogc2V0IHVwIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIHdha2V1cCBzeXN0ZW0gKi8KQEAgLTE1OSwxMyArMTU3LDEzIEBACiAKIAkvKiBzaW5jZSB0aGUgVVJCIGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHksIGl0J3Mgbm93IG9rYXkKIAkgKiB0byBjYW5jZWwgaXQgKi8KLQlzZXRfYml0KFVTX0ZMSURYX1VSQl9BQ1RJVkUsICZ1cy0+ZmxhZ3MpOworCXNldF9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5kZmxhZ3MpOwogCi0JLyogZGlkIGFuIGFib3J0L2Rpc2Nvbm5lY3Qgb2NjdXIgZHVyaW5nIHRoZSBzdWJtaXNzaW9uPyAqLwotCWlmICh1cy0+ZmxhZ3MgJiBBQk9SVElOR19PUl9ESVNDT05ORUNUSU5HKSB7CisJLyogZGlkIGFuIGFib3J0IG9jY3VyIGR1cmluZyB0aGUgc3VibWlzc2lvbj8gKi8KKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfQUJPUlRJTkcsICZ1cy0+ZGZsYWdzKSkgewogCiAJCS8qIGNhbmNlbCB0aGUgVVJCLCBpZiBpdCBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgYWxyZWFkeSAqLwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVTX0ZMSURYX1VSQl9BQ1RJVkUsICZ1cy0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5kZmxhZ3MpKSB7CiAJCQlVU19ERUJVR1AoIi0tIGNhbmNlbGxpbmcgVVJCXG4iKTsKIAkJCXVzYl91bmxpbmtfdXJiKHVzLT5jdXJyZW50X3VyYik7CiAJCX0KQEAgLTE3NSw3ICsxNzMsNyBAQAogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCiAJCQkmdXJiX2RvbmUsIHRpbWVvdXQgPyA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKICAKLQljbGVhcl9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5mbGFncyk7CisJY2xlYXJfYml0KFVTX0ZMSURYX1VSQl9BQ1RJVkUsICZ1cy0+ZGZsYWdzKTsKIAogCWlmICh0aW1lbGVmdCA8PSAwKSB7CiAJCVVTX0RFQlVHUCgiJXMgLS0gY2FuY2VsbGluZyBVUkJcbiIsCkBAIC00MTksOCArNDE3LDggQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0JLyogZG9uJ3Qgc3VibWl0IHMtZyByZXF1ZXN0cyBkdXJpbmcgYWJvcnQvZGlzY29ubmVjdCBwcm9jZXNzaW5nICovCi0JaWYgKHVzLT5mbGFncyAmIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcpCisJLyogZG9uJ3Qgc3VibWl0IHMtZyByZXF1ZXN0cyBkdXJpbmcgYWJvcnQgcHJvY2Vzc2luZyAqLworCWlmICh0ZXN0X2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5kZmxhZ3MpKQogCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKIAogCS8qIGluaXRpYWxpemUgdGhlIHNjYXR0ZXItZ2F0aGVyIHJlcXVlc3QgYmxvY2sgKi8KQEAgLTQzNSwxMyArNDMzLDEzIEBACiAKIAkvKiBzaW5jZSB0aGUgYmxvY2sgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LCBpdCdzIG5vdwogCSAqIG9rYXkgdG8gY2FuY2VsIGl0ICovCi0Jc2V0X2JpdChVU19GTElEWF9TR19BQ1RJVkUsICZ1cy0+ZmxhZ3MpOworCXNldF9iaXQoVVNfRkxJRFhfU0dfQUNUSVZFLCAmdXMtPmRmbGFncyk7CiAKLQkvKiBkaWQgYW4gYWJvcnQvZGlzY29ubmVjdCBvY2N1ciBkdXJpbmcgdGhlIHN1Ym1pc3Npb24/ICovCi0JaWYgKHVzLT5mbGFncyAmIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcpIHsKKwkvKiBkaWQgYW4gYWJvcnQgb2NjdXIgZHVyaW5nIHRoZSBzdWJtaXNzaW9uPyAqLworCWlmICh0ZXN0X2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5kZmxhZ3MpKSB7CiAKIAkJLyogY2FuY2VsIHRoZSByZXF1ZXN0LCBpZiBpdCBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgYWxyZWFkeSAqLwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9TR19BQ1RJVkUsICZ1cy0+ZGZsYWdzKSkgewogCQkJVVNfREVCVUdQKCItLSBjYW5jZWxsaW5nIHNnIHJlcXVlc3RcbiIpOwogCQkJdXNiX3NnX2NhbmNlbCgmdXMtPmN1cnJlbnRfc2cpOwogCQl9CkBAIC00NDksNyArNDQ3LDcgQEAKIAogCS8qIHdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB0cmFuc2ZlciAqLwogCXVzYl9zZ193YWl0KCZ1cy0+Y3VycmVudF9zZyk7Ci0JY2xlYXJfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5mbGFncyk7CisJY2xlYXJfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5kZmxhZ3MpOwogCiAJcmVzdWx0ID0gdXMtPmN1cnJlbnRfc2cuc3RhdHVzOwogCWlmIChhY3RfbGVuKQpAQCAtNTMwLDcgKzUyOCw3IEBACiAJLyogaWYgdGhlIGNvbW1hbmQgZ2V0cyBhYm9ydGVkIGJ5IHRoZSBoaWdoZXIgbGF5ZXJzLCB3ZSBuZWVkIHRvCiAJICogc2hvcnQtY2lyY3VpdCBhbGwgb3RoZXIgcHJvY2Vzc2luZwogCSAqLwotCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5kZmxhZ3MpKSB7CiAJCVVTX0RFQlVHUCgiLS0gY29tbWFuZCB3YXMgYWJvcnRlZFxuIik7CiAJCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQlnb3RvIEhhbmRsZV9FcnJvcnM7CkBAIC02MTYsNyArNjE0LDcgQEAKIAkJLyogbGV0J3MgY2xlYW4gdXAgcmlnaHQgYXdheSAqLwogCQlzY3NpX2VoX3Jlc3RvcmVfY21uZChzcmIsICZzZXMpOwogCi0JCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZGZsYWdzKSkgewogCQkJVVNfREVCVUdQKCItLSBhdXRvLXNlbnNlIGFib3J0ZWRcbiIpOwogCQkJc3JiLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CiAJCQlnb3RvIEhhbmRsZV9FcnJvcnM7CkBAIC02MjksNyArNjI3LDcgQEAKIAkJCSAqIGF1dG8tc2Vuc2UgaXMgcGVyZmVjdGx5IHZhbGlkCiAJCQkgKi8KIAkJCXNyYi0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQkJaWYgKCEodXMtPmZsYWdzICYgVVNfRkxfU0NNX01VTFRfVEFSRykpCisJCQlpZiAoISh1cy0+ZmZsYWdzICYgVVNfRkxfU0NNX01VTFRfVEFSRykpCiAJCQkJZ290byBIYW5kbGVfRXJyb3JzOwogCQkJcmV0dXJuOwogCQl9CkBAIC02NzksOCArNjc3LDggQEAKIAkvKiBTZXQgdGhlIFJFU0VUVElORyBiaXQsIGFuZCBjbGVhciB0aGUgQUJPUlRJTkcgYml0IHNvIHRoYXQKIAkgKiB0aGUgcmVzZXQgbWF5IHByb2NlZWQuICovCiAJc2NzaV9sb2NrKHVzX3RvX2hvc3QodXMpKTsKLQlzZXRfYml0KFVTX0ZMSURYX1JFU0VUVElORywgJnVzLT5mbGFncyk7Ci0JY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwlzZXRfYml0KFVTX0ZMSURYX1JFU0VUVElORywgJnVzLT5kZmxhZ3MpOworCWNsZWFyX2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5kZmxhZ3MpOwogCXNjc2lfdW5sb2NrKHVzX3RvX2hvc3QodXMpKTsKIAogCS8qIFdlIG11c3QgcmVsZWFzZSB0aGUgZGV2aWNlIGxvY2sgYmVjYXVzZSB0aGUgcHJlX3Jlc2V0IHJvdXRpbmUKQEAgLTY5NSw3ICs2OTMsNyBAQAogCQlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CiAJCXVzLT50cmFuc3BvcnRfcmVzZXQodXMpOwogCX0KLQljbGVhcl9iaXQoVVNfRkxJRFhfUkVTRVRUSU5HLCAmdXMtPmZsYWdzKTsKKwljbGVhcl9iaXQoVVNfRkxJRFhfUkVTRVRUSU5HLCAmdXMtPmRmbGFncyk7CiB9CiAKIC8qIFN0b3AgdGhlIGN1cnJlbnQgVVJCIHRyYW5zZmVyICovCkBAIC03MDcsMTMgKzcwNSwxMyBAQAogCSAqIGxldCdzIHdha2UgaXQgdXAuICBUaGUgdGVzdF9hbmRfY2xlYXJfYml0KCkgY2FsbAogCSAqIGd1YXJhbnRlZXMgdGhhdCBpZiBhIFVSQiBoYXMganVzdCBiZWVuIHN1Ym1pdHRlZCwKIAkgKiBpdCB3b24ndCBiZSBjYW5jZWxsZWQgbW9yZSB0aGFuIG9uY2UuICovCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5kZmxhZ3MpKSB7CiAJCVVTX0RFQlVHUCgiLS0gY2FuY2VsbGluZyBVUkJcbiIpOwogCQl1c2JfdW5saW5rX3VyYih1cy0+Y3VycmVudF91cmIpOwogCX0KIAogCS8qIElmIHdlIGFyZSB3YWl0aW5nIGZvciBhIHNjYXR0ZXItZ2F0aGVyIG9wZXJhdGlvbiwgY2FuY2VsIGl0LiAqLwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfU0dfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfU0dfQUNUSVZFLCAmdXMtPmRmbGFncykpIHsKIAkJVVNfREVCVUdQKCItLSBjYW5jZWxsaW5nIHNnIHJlcXVlc3RcbiIpOwogCQl1c2Jfc2dfY2FuY2VsKCZ1cy0+Y3VycmVudF9zZyk7CiAJfQpAQCAtOTE0LDcgKzkxMiw3IEBACiAJdW5zaWduZWQgaW50IGNid2xlbiA9IFVTX0JVTEtfQ0JfV1JBUF9MRU47CiAKIAkvKiBUYWtlIGNhcmUgb2YgQlVMSzMyIGRldmljZXM7IHNldCBleHRyYSBieXRlIHRvIDAgKi8KLQlpZiAoIHVubGlrZWx5KHVzLT5mbGFncyAmIFVTX0ZMX0JVTEszMikpIHsKKwlpZiAodW5saWtlbHkodXMtPmZmbGFncyAmIFVTX0ZMX0JVTEszMikpIHsKIAkJY2J3bGVuID0gMzI7CiAJCXVzLT5pb2J1ZlszMV0gPSAwOwogCX0KQEAgLTkyNSw3ICs5MjMsNyBAQAogCWJjYi0+RmxhZ3MgPSBzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSA/IDEgPDwgNyA6IDA7CiAJYmNiLT5UYWcgPSArK3VzLT50YWc7CiAJYmNiLT5MdW4gPSBzcmItPmRldmljZS0+bHVuOwotCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9TQ01fTVVMVF9UQVJHKQorCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0NNX01VTFRfVEFSRykKIAkJYmNiLT5MdW4gfD0gc3JiLT5kZXZpY2UtPmlkIDw8IDQ7CiAJYmNiLT5MZW5ndGggPSBzcmItPmNtZF9sZW47CiAKQEAgLTk1MSw3ICs5NDksNyBAQAogCS8qIFNvbWUgVVNCLUlERSBjb252ZXJ0ZXIgY2hpcHMgbmVlZCBhIDEwMHVzIGRlbGF5IGJldHdlZW4gdGhlCiAJICogY29tbWFuZCBwaGFzZSBhbmQgdGhlIGRhdGEgcGhhc2UuICBTb21lIGRldmljZXMgbmVlZCBhIGxpdHRsZQogCSAqIG1vcmUgdGhhbiB0aGF0LCBwcm9iYWJseSBiZWNhdXNlIG9mIGNsb2NrIHJhdGUgaW5hY2N1cmFjaWVzLiAqLwotCWlmICh1bmxpa2VseSh1cy0+ZmxhZ3MgJiBVU19GTF9HT19TTE9XKSkKKwlpZiAodW5saWtlbHkodXMtPmZmbGFncyAmIFVTX0ZMX0dPX1NMT1cpKQogCQl1ZGVsYXkoMTI1KTsKIAogCWlmICh0cmFuc2Zlcl9sZW5ndGgpIHsKQEAgLTEwMTAsNyArMTAwOCw3IEBACiAJVVNfREVCVUdQKCJCdWxrIFN0YXR1cyBTIDB4JXggVCAweCV4IFIgJXUgU3RhdCAweCV4XG4iLAogCQkJbGUzMl90b19jcHUoYmNzLT5TaWduYXR1cmUpLCBiY3MtPlRhZywgCiAJCQlyZXNpZHVlLCBiY3MtPlN0YXR1cyk7Ci0JaWYgKCEoYmNzLT5UYWcgPT0gdXMtPnRhZyB8fCAodXMtPmZsYWdzICYgVVNfRkxfQlVMS19JR05PUkVfVEFHKSkgfHwKKwlpZiAoIShiY3MtPlRhZyA9PSB1cy0+dGFnIHx8ICh1cy0+ZmZsYWdzICYgVVNfRkxfQlVMS19JR05PUkVfVEFHKSkgfHwKIAkJYmNzLT5TdGF0dXMgPiBVU19CVUxLX1NUQVRfUEhBU0UpIHsKIAkJVVNfREVCVUdQKCJCdWxrIGxvZ2ljYWwgZXJyb3JcbiIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwpAQCAtMTAzNSw3ICsxMDMzLDcgQEAKIAkvKiB0cnkgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIHJlc2lkdWUsIGJhc2VkIG9uIGhvdyBtdWNoIGRhdGEKIAkgKiB3YXMgcmVhbGx5IHRyYW5zZmVycmVkIGFuZCB3aGF0IHRoZSBkZXZpY2UgdGVsbHMgdXMgKi8KIAlpZiAocmVzaWR1ZSkgewotCQlpZiAoISh1cy0+ZmxhZ3MgJiBVU19GTF9JR05PUkVfUkVTSURVRSkpIHsKKwkJaWYgKCEodXMtPmZmbGFncyAmIFVTX0ZMX0lHTk9SRV9SRVNJRFVFKSkgewogCQkJcmVzaWR1ZSA9IG1pbihyZXNpZHVlLCB0cmFuc2Zlcl9sZW5ndGgpOwogCQkJc2NzaV9zZXRfcmVzaWQoc3JiLCBtYXgoc2NzaV9nZXRfcmVzaWQoc3JiKSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIHJlc2lkdWUpKTsKQEAgLTEwOTAsNyArMTA4OCw3IEBACiAJaW50IHJlc3VsdDsKIAlpbnQgcmVzdWx0MjsKIAotCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmRmbGFncykpIHsKIAkJVVNfREVCVUdQKCJObyByZXNldCBkdXJpbmcgZGlzY29ubmVjdFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTExMDMsMTIgKzExMDEsMTIgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLSAJLyogR2l2ZSB0aGUgZGV2aWNlIHNvbWUgdGltZSB0byByZWNvdmVyIGZyb20gdGhlIHJlc2V0LAotIAkgKiBidXQgZG9uJ3QgZGVsYXkgZGlzY29ubmVjdCBwcm9jZXNzaW5nLiAqLwotIAl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh1cy0+ZGVsYXlfd2FpdCwKLSAJCQl0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSwKLSAJCQlIWio2KTsKLQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncykpIHsKKwkvKiBHaXZlIHRoZSBkZXZpY2Ugc29tZSB0aW1lIHRvIHJlY292ZXIgZnJvbSB0aGUgcmVzZXQsCisJICogYnV0IGRvbid0IGRlbGF5IGRpc2Nvbm5lY3QgcHJvY2Vzc2luZy4gKi8KKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh1cy0+ZGVsYXlfd2FpdCwKKwkJCXRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZGZsYWdzKSwKKwkJCUhaKjYpOworCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmRmbGFncykpIHsKIAkJVVNfREVCVUdQKCJSZXNldCBpbnRlcnJ1cHRlZCBieSBkaXNjb25uZWN0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMTE3MCwxMyArMTE2OCwxMiBAQAogCQlVU19ERUJVR1AoInVuYWJsZSB0byBsb2NrIGRldmljZSBmb3IgcmVzZXQ6ICVkXG4iLCByZXN1bHQpOwogCWVsc2UgewogCQkvKiBXZXJlIHdlIGRpc2Nvbm5lY3RlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbG9jaz8gKi8KLQkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmRmbGFncykpIHsKIAkJCXJlc3VsdCA9IC1FSU87CiAJCQlVU19ERUJVR1AoIk5vIHJlc2V0IGR1cmluZyBkaXNjb25uZWN0XG4iKTsKIAkJfSBlbHNlIHsKLQkJCXJlc3VsdCA9IHVzYl9yZXNldF9jb21wb3NpdGVfZGV2aWNlKAotCQkJCQl1cy0+cHVzYl9kZXYsIHVzLT5wdXNiX2ludGYpOwotCQkJVVNfREVCVUdQKCJ1c2JfcmVzZXRfY29tcG9zaXRlX2RldmljZSByZXR1cm5zICVkXG4iLAorCQkJcmVzdWx0ID0gdXNiX3Jlc2V0X2RldmljZSh1cy0+cHVzYl9kZXYpOworCQkJVVNfREVCVUdQKCJ1c2JfcmVzZXRfZGV2aWNlIHJldHVybnMgJWRcbiIsCiAJCQkJCXJlc3VsdCk7CiAJCX0KIAkJaWYgKHJjX2xvY2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuaAppbmRleCBhZGE3YzJmLi5lNzBiODgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmgKQEAgLTEsOCArMSw2IEBACiAvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKICAqIFRyYW5zcG9ydCBGdW5jdGlvbnMgSGVhZGVyIEZpbGUKICAqCi0gKiAkSWQ6IHRyYW5zcG9ydC5oLHYgMS4xOCAyMDAyLzA0LzIxIDAyOjU3OjU5IG1kaGFybSBFeHAgJAotICoKICAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgogICogICAoYykgMTk5OSwgMjAwMCBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCAzOWE3YzExLi43YWU2OWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTEsOCArMSw2IEBACiAvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKICAqIFVudXN1YWwgRGV2aWNlcyBGaWxlCiAgKgotICogJElkOiB1bnVzdWFsX2RldnMuaCx2IDEuMzIgMjAwMi8wMi8yNSAwMjo0MToyNCBtZGhhcm0gRXhwICQKLSAqCiAgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKICAqICAgKGMpIDIwMDAtMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKICAqCkBAIC0xMjM0LDYgKzEyMzIsMTcgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PVF9MT0NLQUJMRSksCiAKKy8qIEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KKyAqIFBhbkRpZ2l0YWwgRGlnaXRhbCBQaWN0dXJlIEZyYW1lLiBEb2VzIG5vdCBsaWtlIEFMTE9XX01FRElVTV9SRU1PVkFMCisgKiBvbiBMVU4gNC4KKyAqIE5vdGU6IFZlbmQ6UHJvZCBjbGFzaCB3aXRoICJMdGQgTWF4ZWxsIFdTMzAgU2xpbSBEaWdpdGFsIENhbWVyYSIKKyovCitVTlVTVUFMX0RFViggIDB4MDg1MSwgMHgxNTQzLCAweDAyMDAsIDB4MDIwMCwKKwkJIlBhbkRpZ2l0YWwiLAorCQkiUGhvdG8gRnJhbWUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfTk9UX0xPQ0tBQkxFKSwKKwogLyogU3VibWl0dGVkIGJ5IEphbiBEZSBMdXljayA8bGttbEBrY29yZS5vcmc+ICovCiBVTlVTVUFMX0RFViggIDB4MDhiZCwgMHgxMTAwLCAweDAwMDAsIDB4MDAwMCwKIAkJIkNJVElaRU4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKaW5kZXggZTI2OGFhYy4uYmZlYTg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCkBAIC0xLDcgKzEsNSBAQAogLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCiAgKgotICogJElkOiB1c2IuYyx2IDEuNzUgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKLSAqCiAgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKICAqICAgKGMpIDE5OTktMjAwMyBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKICAqCkBAIC0zMTIsMjYgKzMxMCwyNyBAQAogCiAJZm9yKDs7KSB7CiAJCVVTX0RFQlVHUCgiKioqIHRocmVhZCBzbGVlcGluZy5cbiIpOwotCQlpZihkb3duX2ludGVycnVwdGlibGUoJnVzLT5zZW1hKSkKKwkJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmdXMtPmNtbmRfcmVhZHkpKQogCQkJYnJlYWs7Ci0JCQkKKwogCQlVU19ERUJVR1AoIioqKiB0aHJlYWQgYXdha2VuZWQuXG4iKTsKIAogCQkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KIAkJbXV0ZXhfbG9jaygmKHVzLT5kZXZfbXV0ZXgpKTsKIAotCQkvKiBpZiB0aGUgZGV2aWNlIGhhcyBkaXNjb25uZWN0ZWQsIHdlIGFyZSBmcmVlIHRvIGV4aXQgKi8KLQkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7Ci0JCQlVU19ERUJVR1AoIi0tIGV4aXRpbmdcbiIpOwotCQkJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKLQkJCWJyZWFrOwotCQl9Ci0KIAkJLyogbG9jayBhY2Nlc3MgdG8gdGhlIHN0YXRlICovCiAJCXNjc2lfbG9jayhob3N0KTsKIAorCQkvKiBXaGVuIHdlIGFyZSBjYWxsZWQgd2l0aCBubyBjb21tYW5kIHBlbmRpbmcsIHdlJ3JlIGRvbmUgKi8KKwkJaWYgKHVzLT5zcmIgPT0gTlVMTCkgeworCQkJc2NzaV91bmxvY2soaG9zdCk7CisJCQltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOworCQkJVVNfREVCVUdQKCItLSBleGl0aW5nXG4iKTsKKwkJCWJyZWFrOworCQl9CisKIAkJLyogaGFzIHRoZSBjb21tYW5kIHRpbWVkIG91dCAqYWxyZWFkeSogPyAqLwotCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmRmbGFncykpIHsKIAkJCXVzLT5zcmItPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKIAkJCWdvdG8gU2tpcEZvckFib3J0OwogCQl9CkBAIC0zNTAsNyArMzQ5LDcgQEAKIAkJICogdGhlIG1heGltdW0ga25vd24gTFVOCiAJCSAqLwogCQllbHNlIGlmICh1cy0+c3JiLT5kZXZpY2UtPmlkICYmIAotCQkJCSEodXMtPmZsYWdzICYgVVNfRkxfU0NNX01VTFRfVEFSRykpIHsKKwkJCQkhKHVzLT5mZmxhZ3MgJiBVU19GTF9TQ01fTVVMVF9UQVJHKSkgewogCQkJVVNfREVCVUdQKCJCYWQgdGFyZ2V0IG51bWJlciAoJWQ6JWQpXG4iLAogCQkJCSAgdXMtPnNyYi0+ZGV2aWNlLT5pZCwgdXMtPnNyYi0+ZGV2aWNlLT5sdW4pOwogCQkJdXMtPnNyYi0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CkBAIC0zNjUsNyArMzY0LDcgQEAKIAkJLyogSGFuZGxlIHRob3NlIGRldmljZXMgd2hpY2ggbmVlZCB1cyB0byBmYWtlIAogCQkgKiB0aGVpciBpbnF1aXJ5IGRhdGEgKi8KIAkJZWxzZSBpZiAoKHVzLT5zcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkgJiYKLQkJCSAgICAodXMtPmZsYWdzICYgVVNfRkxfRklYX0lOUVVJUlkpKSB7CisJCQkgICAgKHVzLT5mZmxhZ3MgJiBVU19GTF9GSVhfSU5RVUlSWSkpIHsKIAkJCXVuc2lnbmVkIGNoYXIgZGF0YV9wdHJbMzZdID0gewogCQkJICAgIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDIsCiAJCQkgICAgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMH07CkBAIC0zODQsMTIgKzM4Myw4IEBACiAJCS8qIGxvY2sgYWNjZXNzIHRvIHRoZSBzdGF0ZSAqLwogCQlzY3NpX2xvY2soaG9zdCk7CiAKLQkJLyogZGlkIHRoZSBjb21tYW5kIGFscmVhZHkgY29tcGxldGUgYmVjYXVzZSBvZiBhIGRpc2Nvbm5lY3Q/ICovCi0JCWlmICghdXMtPnNyYikKLQkJCTsJCS8qIG5vdGhpbmcgdG8gZG8gKi8KLQogCQkvKiBpbmRpY2F0ZSB0aGF0IHRoZSBjb21tYW5kIGlzIGRvbmUgKi8KLQkJZWxzZSBpZiAodXMtPnNyYi0+cmVzdWx0ICE9IERJRF9BQk9SVCA8PCAxNikgeworCQlpZiAodXMtPnNyYi0+cmVzdWx0ICE9IERJRF9BQk9SVCA8PCAxNikgewogCQkJVVNfREVCVUdQKCJzY3NpIGNtZCBkb25lLCByZXN1bHQ9MHgleFxuIiwgCiAJCQkJICAgdXMtPnNyYi0+cmVzdWx0KTsKIAkJCXVzLT5zcmItPnNjc2lfZG9uZSh1cy0+c3JiKTsKQEAgLTQwMywxMiArMzk4LDEyIEBACiAJCSAqIHRoZSBUSU1FRF9PVVQgZmxhZywgbm90IHNyYi0+cmVzdWx0ID09IERJRF9BQk9SVCwgYmVjYXVzZQogCQkgKiB0aGUgdGltZW91dCBtaWdodCBoYXZlIG9jY3VycmVkIGFmdGVyIHRoZSBjb21tYW5kIGhhZAogCQkgKiBhbHJlYWR5IGNvbXBsZXRlZCB3aXRoIGEgZGlmZmVyZW50IHJlc3VsdCBjb2RlLiAqLwotCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmRmbGFncykpIHsKIAkJCWNvbXBsZXRlKCYodXMtPm5vdGlmeSkpOwogCiAJCQkvKiBBbGxvdyBVU0IgdHJhbnNmZXJzIHRvIHJlc3VtZSAqLwotCQkJY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKLQkJCWNsZWFyX2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmRmbGFncyk7CisJCQljbGVhcl9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmRmbGFncyk7CiAJCX0KIAogCQkvKiBmaW5pc2hlZCB3b3JraW5nIG9uIHRoaXMgY29tbWFuZCAqLwpAQCAtNTAwLDkgKzQ5NSw5IEBACiAJdXMtPnByb3RvY29sID0gKHVudXN1YWxfZGV2LT51c2VUcmFuc3BvcnQgPT0gVVNfUFJfREVWSUNFKSA/CiAJCQlpZGVzYy0+YkludGVyZmFjZVByb3RvY29sIDoKIAkJCXVudXN1YWxfZGV2LT51c2VUcmFuc3BvcnQ7Ci0JdXMtPmZsYWdzID0gVVNCX1VTX09SSUdfRkxBR1MoaWQtPmRyaXZlcl9pbmZvKTsKKwl1cy0+ZmZsYWdzID0gVVNCX1VTX09SSUdfRkxBR1MoaWQtPmRyaXZlcl9pbmZvKTsKIAotCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9JR05PUkVfREVWSUNFKSB7CisJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9JR05PUkVfREVWSUNFKSB7CiAJCXByaW50ayhLRVJOX0lORk8gVVNCX1NUT1JBR0UgImRldmljZSBpZ25vcmVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNTEyLDcgKzUwNyw3IEBACiAJICogZGlzYWJsZSBpdCBpZiB3ZSdyZSBpbiBmdWxsLXNwZWVkCiAJICovCiAJaWYgKGRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpCi0JCXVzLT5mbGFncyAmPSB+VVNfRkxfR09fU0xPVzsKKwkJdXMtPmZmbGFncyAmPSB+VVNfRkxfR09fU0xPVzsKIAogCS8qIExvZyBhIG1lc3NhZ2UgaWYgYSBub24tZ2VuZXJpYyB1bnVzdWFsX2RldiBlbnRyeSBjb250YWlucyBhbgogCSAqIHVubmVjZXNzYXJ5IHN1YmNsYXNzIG9yIHByb3RvY29sIG92ZXJyaWRlLiAgVGhpcyBtYXkgc3RpbXVsYXRlCkBAIC01MzMsNyArNTI4LDcgQEAKIAkJaWYgKHVudXN1YWxfZGV2LT51c2VUcmFuc3BvcnQgIT0gVVNfUFJfREVWSUNFICYmCiAJCQl1cy0+cHJvdG9jb2wgPT0gaWRlc2MtPmJJbnRlcmZhY2VQcm90b2NvbCkKIAkJCW1zZyArPSAyOwotCQlpZiAobXNnID49IDAgJiYgISh1cy0+ZmxhZ3MgJiBVU19GTF9ORUVEX09WRVJSSURFKSkKKwkJaWYgKG1zZyA+PSAwICYmICEodXMtPmZmbGFncyAmIFVTX0ZMX05FRURfT1ZFUlJJREUpKQogCQkJcHJpbnRrKEtFUk5fTk9USUNFIFVTQl9TVE9SQUdFICJUaGlzIGRldmljZSAiCiAJCQkJIiglMDR4LCUwNHgsJTA0eCBTICUwMnggUCAlMDJ4KSIKIAkJCQkiIGhhcyAlcyBpbiB1bnVzdWFsX2RldnMuaCAoa2VybmVsIgpAQCAtNjYzLDcgKzY1OCw3IEBACiAJVVNfREVCVUdQKCJUcmFuc3BvcnQ6ICVzXG4iLCB1cy0+dHJhbnNwb3J0X25hbWUpOwogCiAJLyogZml4IGZvciBzaW5nbGUtbHVuIGRldmljZXMgKi8KLQlpZiAodXMtPmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKKwlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX1NJTkdMRV9MVU4pCiAJCXVzLT5tYXhfbHVuID0gMDsKIAlyZXR1cm4gMDsKIH0KQEAgLTgyMCwxMiArODE1LDExIEBACiAJVVNfREVCVUdQKCItLSAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogVGVsbCB0aGUgY29udHJvbCB0aHJlYWQgdG8gZXhpdC4gIFRoZSBTQ1NJIGhvc3QgbXVzdAotCSAqIGFscmVhZHkgaGF2ZSBiZWVuIHJlbW92ZWQgc28gaXQgd29uJ3QgdHJ5IHRvIHF1ZXVlCi0JICogYW55IG1vcmUgY29tbWFuZHMuCisJICogYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZCBhbmQgdGhlIERJU0NPTk5FQ1RJTkcgZmxhZyBzZXQKKwkgKiBzbyB0aGF0IHdlIHdvbid0IGFjY2VwdCBhbnkgbW9yZSBjb21tYW5kcy4KIAkgKi8KIAlVU19ERUJVR1AoIi0tIHNlbmRpbmcgZXhpdCBjb21tYW5kIHRvIHRocmVhZFxuIik7Ci0Jc2V0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKTsKLQl1cCgmdXMtPnNlbWEpOworCWNvbXBsZXRlKCZ1cy0+Y21uZF9yZWFkeSk7CiAJaWYgKHVzLT5jdGxfdGhyZWFkKQogCQlrdGhyZWFkX3N0b3AodXMtPmN0bF90aHJlYWQpOwogCkBAIC04NTksMzkgKzg1MywzNiBAQAogCXVzYl9zZXRfaW50ZmRhdGEodXMtPnB1c2JfaW50ZiwgTlVMTCk7CiB9CiAKLS8qIEZpcnN0IHN0YWdlIG9mIGRpc2Nvbm5lY3QgcHJvY2Vzc2luZzogc3RvcCBhbGwgY29tbWFuZHMgYW5kIHJlbW92ZQotICogdGhlIGhvc3QgKi8KKy8qIEZpcnN0IHN0YWdlIG9mIGRpc2Nvbm5lY3QgcHJvY2Vzc2luZzogc3RvcCBTQ1NJIHNjYW5uaW5nLAorICogcmVtb3ZlIHRoZSBob3N0LCBhbmQgc3RvcCBhY2NlcHRpbmcgbmV3IGNvbW1hbmRzCisgKi8KIHN0YXRpYyB2b2lkIHF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gdXNfdG9faG9zdCh1cyk7CiAKLQkvKiBQcmV2ZW50IG5ldyBVU0IgdHJhbnNmZXJzLCBzdG9wIHRoZSBjdXJyZW50IGNvbW1hbmQsIGFuZAotCSAqIGludGVycnVwdCBhIFNDU0ktc2NhbiBvciBkZXZpY2UtcmVzZXQgZGVsYXkgKi8KLQlzY3NpX2xvY2soaG9zdCk7Ci0Jc2V0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKTsKLQlzY3NpX3VubG9jayhob3N0KTsKLQl1c2Jfc3Rvcl9zdG9wX3RyYW5zcG9ydCh1cyk7CisJLyogSWYgdGhlIGRldmljZSBpcyByZWFsbHkgZ29uZSwgY3V0IHNob3J0IHJlc2V0IGRlbGF5cyAqLworCWlmICh1cy0+cHVzYl9kZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKKwkJc2V0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmRmbGFncyk7CisKKwkvKiBQcmV2ZW50IFNDU0ktc2Nhbm5pbmcgKGlmIGl0IGhhc24ndCBzdGFydGVkIHlldCkKKwkgKiBhbmQgd2FpdCBmb3IgdGhlIFNDU0ktc2Nhbm5pbmcgdGhyZWFkIHRvIHN0b3AuCisJICovCisJc2V0X2JpdChVU19GTElEWF9ET05UX1NDQU4sICZ1cy0+ZGZsYWdzKTsKIAl3YWtlX3VwKCZ1cy0+ZGVsYXlfd2FpdCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmdXMtPnNjYW5uaW5nX2RvbmUpOwogCi0JLyogcXVldWVjb21tYW5kIHdvbid0IGFjY2VwdCBhbnkgbmV3IGNvbW1hbmRzIGFuZCB0aGUgY29udHJvbAotCSAqIHRocmVhZCB3b24ndCBleGVjdXRlIGEgcHJldmlvdXNseS1xdWV1ZWQgY29tbWFuZC4gIElmIHRoZXJlCi0JICogaXMgc3VjaCBhIGNvbW1hbmQgcGVuZGluZywgY29tcGxldGUgaXQgd2l0aCBhbiBlcnJvci4gKi8KLQltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKLQlpZiAodXMtPnNyYikgewotCQl1cy0+c3JiLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKLQkJc2NzaV9sb2NrKGhvc3QpOwotCQl1cy0+c3JiLT5zY3NpX2RvbmUodXMtPnNyYik7Ci0JCXVzLT5zcmIgPSBOVUxMOwotCQljb21wbGV0ZSgmdXMtPm5vdGlmeSk7CQkvKiBpbiBjYXNlIG9mIGFuIGFib3J0ICovCi0JCXNjc2lfdW5sb2NrKGhvc3QpOwotCX0KLQltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOwotCi0JLyogTm93IHdlIG93biBubyBjb21tYW5kcyBzbyBpdCdzIHNhZmUgdG8gcmVtb3ZlIHRoZSBTQ1NJIGhvc3QgKi8KKwkvKiBSZW1vdmluZyB0aGUgaG9zdCB3aWxsIHBlcmZvcm0gYW4gb3JkZXJseSBzaHV0ZG93bjogY2FjaGVzCisJICogc3luY2hyb25pemVkLCBkaXNrcyBzcHVuIGRvd24sIGV0Yy4KKwkgKi8KIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwogCi0JLyogV2FpdCBmb3IgdGhlIFNDU0ktc2Nhbm5pbmcgdGhyZWFkIHRvIHN0b3AgKi8KLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ1cy0+c2Nhbm5pbmdfZG9uZSk7CisJLyogUHJldmVudCBhbnkgbmV3IGNvbW1hbmRzIGZyb20gYmVpbmcgYWNjZXB0ZWQgYW5kIGN1dCBzaG9ydAorCSAqIHJlc2V0IGRlbGF5cy4KKwkgKi8KKwlzY3NpX2xvY2soaG9zdCk7CisJc2V0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmRmbGFncyk7CisJc2NzaV91bmxvY2soaG9zdCk7CisJd2FrZV91cCgmdXMtPmRlbGF5X3dhaXQpOwogfQogCiAvKiBTZWNvbmQgc3RhZ2Ugb2YgZGlzY29ubmVjdCBwcm9jZXNzaW5nOiBkZWFsbG9jYXRlIGFsbCByZXNvdXJjZXMgKi8KQEAgLTkxOSwxNiArOTEwLDE2IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJ1c2Itc3RvcmFnZTogd2FpdGluZyBmb3IgZGV2aWNlICIKIAkJCQkidG8gc2V0dGxlIGJlZm9yZSBzY2FubmluZ1xuIik7CiAJCXdhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQodXMtPmRlbGF5X3dhaXQsCi0JCQkJdGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncyksCisJCQkJdGVzdF9iaXQoVVNfRkxJRFhfRE9OVF9TQ0FOLCAmdXMtPmRmbGFncyksCiAJCQkJZGVsYXlfdXNlICogSFopOwogCX0KIAogCS8qIElmIHRoZSBkZXZpY2UgaXMgc3RpbGwgY29ubmVjdGVkLCBwZXJmb3JtIHRoZSBzY2FubmluZyAqLwotCWlmICghdGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncykpIHsKKwlpZiAoIXRlc3RfYml0KFVTX0ZMSURYX0RPTlRfU0NBTiwgJnVzLT5kZmxhZ3MpKSB7CiAKIAkJLyogRm9yIGJ1bGstb25seSBkZXZpY2VzLCBkZXRlcm1pbmUgdGhlIG1heCBMVU4gdmFsdWUgKi8KIAkJaWYgKHVzLT5wcm90b2NvbCA9PSBVU19QUl9CVUxLICYmCi0JCQkJISh1cy0+ZmxhZ3MgJiBVU19GTF9TSU5HTEVfTFVOKSkgeworCQkJCSEodXMtPmZmbGFncyAmIFVTX0ZMX1NJTkdMRV9MVU4pKSB7CiAJCQltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAkJCXVzLT5tYXhfbHVuID0gdXNiX3N0b3JfQnVsa19tYXhfbHVuKHVzKTsKIAkJCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CkBAIC05NzUsNyArOTY2LDcgQEAKIAl1cyA9IGhvc3RfdG9fdXMoaG9zdCk7CiAJbWVtc2V0KHVzLCAwLCBzaXplb2Yoc3RydWN0IHVzX2RhdGEpKTsKIAltdXRleF9pbml0KCYodXMtPmRldl9tdXRleCkpOwotCWluaXRfTVVURVhfTE9DS0VEKCYodXMtPnNlbWEpKTsKKwlpbml0X2NvbXBsZXRpb24oJnVzLT5jbW5kX3JlYWR5KTsKIAlpbml0X2NvbXBsZXRpb24oJih1cy0+bm90aWZ5KSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdXMtPmRlbGF5X3dhaXQpOwogCWluaXRfY29tcGxldGlvbigmdXMtPnNjYW5uaW5nX2RvbmUpOwpAQCAtMTAyMyw2ICsxMDE0LDcgQEAKIAlpZiAoSVNfRVJSKHRoKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFVTQl9TVE9SQUdFIAogCQkgICAgICAgIlVuYWJsZSB0byBzdGFydCB0aGUgZGV2aWNlLXNjYW5uaW5nIHRocmVhZFxuIik7CisJCWNvbXBsZXRlKCZ1cy0+c2Nhbm5pbmdfZG9uZSk7CiAJCXF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KHVzKTsKIAkJcmVzdWx0ID0gUFRSX0VSUih0aCk7CiAJCWdvdG8gQmFkRGV2aWNlOwpAQCAtMTA2NSw2ICsxMDU3LDcgQEAKIAkucHJlX3Jlc2V0ID0Jc3RvcmFnZV9wcmVfcmVzZXQsCiAJLnBvc3RfcmVzZXQgPQlzdG9yYWdlX3Bvc3RfcmVzZXQsCiAJLmlkX3RhYmxlID0Jc3RvcmFnZV91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB1c2Jfc3Rvcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAppbmRleCA4ZDg3NTAzLi5hNGFkNzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKQEAgLTEsOCArMSw2IEBACiAvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKICAqIE1haW4gSGVhZGVyIEZpbGUKICAqCi0gKiAkSWQ6IHVzYi5oLHYgMS4yMSAyMDAyLzA0LzIxIDAyOjU3OjU5IG1kaGFybSBFeHAgJAotICoKICAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgogICogICAoYykgMTk5OS0yMDAyIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQogICoKQEAgLTY3LDE2ICs2NSwxNCBAQAogfTsKIAogCi0vKiBEeW5hbWljIGZsYWcgZGVmaW5pdGlvbnM6IHVzZWQgaW4gc2V0X2JpdCgpIGV0Yy4gKi8KLSNkZWZpbmUgVVNfRkxJRFhfVVJCX0FDVElWRQkxOCAgLyogMHgwMDA0MDAwMCAgY3VycmVudF91cmIgaXMgaW4gdXNlICAqLwotI2RlZmluZSBVU19GTElEWF9TR19BQ1RJVkUJMTkgIC8qIDB4MDAwODAwMDAgIGN1cnJlbnRfc2cgaXMgaW4gdXNlICAgKi8KLSNkZWZpbmUgVVNfRkxJRFhfQUJPUlRJTkcJMjAgIC8qIDB4MDAxMDAwMDAgIGFib3J0IGlzIGluIHByb2dyZXNzICAgKi8KLSNkZWZpbmUgVVNfRkxJRFhfRElTQ09OTkVDVElORwkyMSAgLyogMHgwMDIwMDAwMCAgZGlzY29ubmVjdCBpbiBwcm9ncmVzcyAqLwotI2RlZmluZSBBQk9SVElOR19PUl9ESVNDT05ORUNUSU5HCSgoMVVMIDw8IFVTX0ZMSURYX0FCT1JUSU5HKSB8IFwKLQkJCQkJICgxVUwgPDwgVVNfRkxJRFhfRElTQ09OTkVDVElORykpCi0jZGVmaW5lIFVTX0ZMSURYX1JFU0VUVElORwkyMiAgLyogMHgwMDQwMDAwMCAgZGV2aWNlIHJlc2V0IGluIHByb2dyZXNzICovCi0jZGVmaW5lIFVTX0ZMSURYX1RJTUVEX09VVAkyMyAgLyogMHgwMDgwMDAwMCAgU0NTSSBtaWRsYXllciB0aW1lZCBvdXQgICovCi0KKy8qIER5bmFtaWMgYml0ZmxhZyBkZWZpbml0aW9ucyAodXMtPmRmbGFncyk6IHVzZWQgaW4gc2V0X2JpdCgpIGV0Yy4gKi8KKyNkZWZpbmUgVVNfRkxJRFhfVVJCX0FDVElWRQkwCS8qIGN1cnJlbnRfdXJiIGlzIGluIHVzZSAgICAqLworI2RlZmluZSBVU19GTElEWF9TR19BQ1RJVkUJMQkvKiBjdXJyZW50X3NnIGlzIGluIHVzZSAgICAgKi8KKyNkZWZpbmUgVVNfRkxJRFhfQUJPUlRJTkcJMgkvKiBhYm9ydCBpcyBpbiBwcm9ncmVzcyAgICAgKi8KKyNkZWZpbmUgVVNfRkxJRFhfRElTQ09OTkVDVElORwkzCS8qIGRpc2Nvbm5lY3QgaW4gcHJvZ3Jlc3MgICAqLworI2RlZmluZSBVU19GTElEWF9SRVNFVFRJTkcJNAkvKiBkZXZpY2UgcmVzZXQgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgVVNfRkxJRFhfVElNRURfT1VUCTUJLyogU0NTSSBtaWRsYXllciB0aW1lZCBvdXQgICovCisjZGVmaW5lIFVTX0ZMSURYX0RPTlRfU0NBTgk2CS8qIGRvbid0IHNjYW4gKGRpc2Nvbm5lY3QpICAqLwogCiAjZGVmaW5lIFVTQl9TVE9SX1NUUklOR19MRU4gMzIKIApAQCAtMTA5LDcgKzEwNSw4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UJKnB1c2JfZGV2OwkgLyogdGhpcyB1c2JfZGV2aWNlICovCiAJc3RydWN0IHVzYl9pbnRlcmZhY2UJKnB1c2JfaW50ZjsJIC8qIHRoaXMgaW50ZXJmYWNlICovCiAJc3RydWN0IHVzX3VudXN1YWxfZGV2ICAgKnVudXN1YWxfZGV2OwkgLyogZGV2aWNlLWZpbHRlciBlbnRyeSAgICAgKi8KLQl1bnNpZ25lZCBsb25nCQlmbGFnczsJCSAvKiBmcm9tIGZpbHRlciBpbml0aWFsbHkgKi8KKwl1bnNpZ25lZCBsb25nCQlmZmxhZ3M7CQkgLyogZml4ZWQgZmxhZ3MgZnJvbSBmaWx0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlkZmxhZ3M7CQkgLyogZHluYW1pYyBhdG9taWMgYml0ZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQJCXNlbmRfYnVsa19waXBlOwkgLyogY2FjaGVkIHBpcGUgdmFsdWVzICovCiAJdW5zaWduZWQgaW50CQlyZWN2X2J1bGtfcGlwZTsKIAl1bnNpZ25lZCBpbnQJCXNlbmRfY3RybF9waXBlOwpAQCAtMTQ3LDcgKzE0NCw3IEBACiAJc3RydWN0IHRhc2tfc3RydWN0CSpjdGxfdGhyZWFkOwkgLyogdGhlIGNvbnRyb2wgdGhyZWFkICAgKi8KIAogCS8qIG11dHVhbCBleGNsdXNpb24gYW5kIHN5bmNocm9uaXphdGlvbiBzdHJ1Y3R1cmVzICovCi0Jc3RydWN0IHNlbWFwaG9yZQlzZW1hOwkJIC8qIHRvIHNsZWVwIHRocmVhZCBvbgkgICAgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbgljbW5kX3JlYWR5OwkgLyogdG8gc2xlZXAgdGhyZWFkIG9uCSAgICAqLwogCXN0cnVjdCBjb21wbGV0aW9uCW5vdGlmeTsJCSAvKiB0aHJlYWQgYmVnaW4vZW5kCSAgICAqLwogCXdhaXRfcXVldWVfaGVhZF90CWRlbGF5X3dhaXQ7CSAvKiB3YWl0IGR1cmluZyBzY2FuLCByZXNldCAqLwogCXN0cnVjdCBjb21wbGV0aW9uCXNjYW5uaW5nX2RvbmU7CSAvKiB3YWl0IGZvciBzY2FuIHRocmVhZCAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hbWlmYi5jIGIvZHJpdmVycy92aWRlby9hbWlmYi5jCmluZGV4IDA1YTMyOGMuLjQ1YzE1NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYW1pZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FtaWZiLmMKQEAgLTIzODMsNiArMjM4Myw5IEBACiAJCWdvdG8gYW1pZmJfZXJyb3I7CiAJfQogCisJZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KGFtaV9tb2RlZGIsIE5VTV9UT1RBTF9NT0RFUywKKwkJCQkgJmZiX2luZm8ubW9kZWxpc3QpOworCiAJcm91bmRfZG93bl9icHAgPSAwOwogCWNoaXBwdHIgPSBjaGlwYWxsb2MoZmJfaW5mby5maXguc21lbV9sZW4rCiAJICAgICAgICAgICAgICAgICAgICBTUFJJVEVNRU1TSVpFKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdGFmYi5jIGIvZHJpdmVycy92aWRlby9hdGFmYi5jCmluZGV4IGRmZjM1NDcuLmZhNTVkMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKQEAgLTMxMTAsNyArMzExMCw3IEBACiAJcHJpbnRrKCJhdGFmYl9pbml0OiBzdGFydFxuIik7CiAKIAlpZiAoIU1BQ0hfSVNfQVRBUkkpCi0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRU5PREVWOwogCiAJZG8gewogI2lmZGVmIEFUQUZCX0VYVApAQCAtMzIzMCw2ICszMjMwLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KGF0YWZiX21vZGVkYiwgTlVNX1RPVEFMX01PREVTLAorCQkJCSAmZmJfaW5mby5tb2RlbGlzdCk7CisKIAlhdGFmYl9zZXRfZGlzcCgmZmJfaW5mbyk7CiAKIAlmYl9hbGxvY19jbWFwKCYoZmJfaW5mby5jbWFwKSwgMSA8PCBmYl9pbmZvLnZhci5iaXRzX3Blcl9waXhlbCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwppbmRleCAyNGVlOTZjLi4wN2I2YWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKQEAgLTE4NzIsNyArMTg3Miw3IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGF0eTEyOGZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7Ci0JY2hhciB2aWRlb19jYXJkW0RFVklDRV9OQU1FX1NJWkVdOworCWNoYXIgdmlkZW9fY2FyZFs1MF07CiAJdTggY2hpcF9yZXY7CiAJdTMyIGRhYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaCBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmgKaW5kZXggYzM0N2UzOC4uY2NiZmZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oCkBAIC0yODksNyArMjg5LDcgQEAKIAlzdHJ1Y3QgcmFkZW9uX3JlZ3MgCXN0YXRlOwogCXN0cnVjdCByYWRlb25fcmVncwlpbml0X3N0YXRlOwogCi0JY2hhcgkJCW5hbWVbREVWSUNFX05BTUVfU0laRV07CisJY2hhcgkJCW5hbWVbNTBdOwogCiAJdW5zaWduZWQgbG9uZwkJbW1pb19iYXNlX3BoeXM7CiAJdW5zaWduZWQgbG9uZwkJZmJfYmFzZV9waHlzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jMnAuYyBiL2RyaXZlcnMvdmlkZW8vYzJwLmMKaW5kZXggNWMzMGJiZC4uMzc2YmMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jMnAuYworKysgYi9kcml2ZXJzL3ZpZGVvL2MycC5jCkBAIC0xMiw2ICsxMiw3IEBACiAgKiAgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSAiYzJwLmgiCiAKQEAgLTIyNiw0ICsyMjcsNiBAQAogCWRzdCArPSBkc3RfbmV4dGxpbmU7CiAgICAgfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoYzJwKTsKIAorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCA5N2FmZjhkLi40YmUzYjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMzU4Niw3ICszNTg2LDggQEAKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAlmYl9yZWdpc3Rlcl9jbGllbnQoJmZiY29uX2V2ZW50X25vdGlmaWVyKTsKLQlmYmNvbl9kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKGZiX2NsYXNzLCBOVUxMLCBNS0RFVigwLCAwKSwgImZiY29uIik7CisJZmJjb25fZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGZiX2NsYXNzLCBOVUxMLCBNS0RFVigwLCAwKSwKKwkJCQkJICAgICBOVUxMLCAiZmJjb24iKTsKIAogCWlmIChJU19FUlIoZmJjb25fZGV2aWNlKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gY3JlYXRlIGRldmljZSAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggMzNlYmRiMS4uMWNkNTA3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTQzOSw4ICsxNDM5LDkgQEAKIAkJCWJyZWFrOwogCWZiX2luZm8tPm5vZGUgPSBpOwogCi0JZmJfaW5mby0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShmYl9jbGFzcywgZmJfaW5mby0+ZGV2aWNlLAotCQkJCSAgICAgTUtERVYoRkJfTUFKT1IsIGkpLCAiZmIlZCIsIGkpOworCWZiX2luZm8tPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShmYl9jbGFzcywgZmJfaW5mby0+ZGV2aWNlLAorCQkJCQkgICAgIE1LREVWKEZCX01BSk9SLCBpKSwgTlVMTCwKKwkJCQkJICAgICAiZmIlZCIsIGkpOwogCWlmIChJU19FUlIoZmJfaW5mby0+ZGV2KSkgewogCQkvKiBOb3QgZmF0YWwgKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGNyZWF0ZSBkZXZpY2UgZm9yIGZyYW1lYnVmZmVyICVkOyBlcnJubyA9ICVsZFxuIiwgaSwgUFRSX0VSUihmYl9pbmZvLT5kZXYpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb2ZmYi5jIGIvZHJpdmVycy92aWRlby9vZmZiLmMKaW5kZXggZDdiM2RjYy4uZTFkOWVlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vZmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9vZmZiLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAljbWFwX00zQiwJCS8qIEFUSSBSYWdlIE1vYmlsaXR5IE0zIEhlYWQgQiAqLwogCWNtYXBfcmFkZW9uLAkJLyogQVRJIFJhZGVvbiAqLwogCWNtYXBfZ3h0MjAwMCwJCS8qIElCTSBHWFQyMDAwICovCisJY21hcF9hdml2bywJCS8qIEFUSSBSNXh4ICovCiB9OwogCiBzdHJ1Y3Qgb2ZmYl9wYXIgewpAQCAtNTgsMjYgKzU5LDM2IEBACiAKIHN0cnVjdCBvZmZiX3BhciBkZWZhdWx0X3BhcjsKIAotICAgIC8qCi0gICAgICogIEludGVyZmFjZSB1c2VkIGJ5IHRoZSB3b3JsZAotICAgICAqLwotCi1zdGF0aWMgaW50IG9mZmJfc2V0Y29scmVnKHVfaW50IHJlZ25vLCB1X2ludCByZWQsIHVfaW50IGdyZWVuLCB1X2ludCBibHVlLAotCQkJICB1X2ludCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgb2ZmYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLQogI2lmZGVmIENPTkZJR19QUEMzMgogZXh0ZXJuIGJvb3RfaW5mb3NfdCAqYm9vdF9pbmZvczsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGZiX29wcyBvZmZiX29wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmZiX3NldGNvbHJlZwk9IG9mZmJfc2V0Y29scmVnLAotCS5mYl9ibGFuawk9IG9mZmJfYmxhbmssCi0JLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKLQkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKLX07CisvKiBEZWZpbml0aW9ucyB1c2VkIGJ5IHRoZSBBdml2byBwYWxldHRlIGhhY2sgKi8KKyNkZWZpbmUgQVZJVk9fRENfTFVUX1JXX1NFTEVDVCAgICAgICAgICAgICAgICAgIDB4NjQ4MAorI2RlZmluZSBBVklWT19EQ19MVVRfUldfTU9ERSAgICAgICAgICAgICAgICAgICAgMHg2NDg0CisjZGVmaW5lIEFWSVZPX0RDX0xVVF9SV19JTkRFWCAgICAgICAgICAgICAgICAgICAweDY0ODgKKyNkZWZpbmUgQVZJVk9fRENfTFVUX1NFUV9DT0xPUiAgICAgICAgICAgICAgICAgIDB4NjQ4YworI2RlZmluZSBBVklWT19EQ19MVVRfUFdMX0RBVEEgICAgICAgICAgICAgICAgICAgMHg2NDkwCisjZGVmaW5lIEFWSVZPX0RDX0xVVF8zMF9DT0xPUiAgICAgICAgICAgICAgICAgICAweDY0OTQKKyNkZWZpbmUgQVZJVk9fRENfTFVUX1JFQURfUElQRV9TRUxFQ1QgICAgICAgICAgIDB4NjQ5OAorI2RlZmluZSBBVklWT19EQ19MVVRfV1JJVEVfRU5fTUFTSyAgICAgICAgICAgICAgMHg2NDljCisjZGVmaW5lIEFWSVZPX0RDX0xVVF9BVVRPRklMTCAgICAgICAgICAgICAgICAgICAweDY0YTAKKworI2RlZmluZSBBVklWT19EQ19MVVRBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgMHg2NGMwCisjZGVmaW5lIEFWSVZPX0RDX0xVVEFfQkxBQ0tfT0ZGU0VUX0JMVUUgICAgICAgICAweDY0YzQKKyNkZWZpbmUgQVZJVk9fRENfTFVUQV9CTEFDS19PRkZTRVRfR1JFRU4gICAgICAgIDB4NjRjOAorI2RlZmluZSBBVklWT19EQ19MVVRBX0JMQUNLX09GRlNFVF9SRUQgICAgICAgICAgMHg2NGNjCisjZGVmaW5lIEFWSVZPX0RDX0xVVEFfV0hJVEVfT0ZGU0VUX0JMVUUgICAgICAgICAweDY0ZDAKKyNkZWZpbmUgQVZJVk9fRENfTFVUQV9XSElURV9PRkZTRVRfR1JFRU4gICAgICAgIDB4NjRkNAorI2RlZmluZSBBVklWT19EQ19MVVRBX1dISVRFX09GRlNFVF9SRUQgICAgICAgICAgMHg2NGQ4CisKKyNkZWZpbmUgQVZJVk9fRENfTFVUQl9DT05UUk9MICAgICAgICAgICAgICAgICAgIDB4NmNjMAorI2RlZmluZSBBVklWT19EQ19MVVRCX0JMQUNLX09GRlNFVF9CTFVFICAgICAgICAgMHg2Y2M0CisjZGVmaW5lIEFWSVZPX0RDX0xVVEJfQkxBQ0tfT0ZGU0VUX0dSRUVOICAgICAgICAweDZjYzgKKyNkZWZpbmUgQVZJVk9fRENfTFVUQl9CTEFDS19PRkZTRVRfUkVEICAgICAgICAgIDB4NmNjYworI2RlZmluZSBBVklWT19EQ19MVVRCX1dISVRFX09GRlNFVF9CTFVFICAgICAgICAgMHg2Y2QwCisjZGVmaW5lIEFWSVZPX0RDX0xVVEJfV0hJVEVfT0ZGU0VUX0dSRUVOICAgICAgICAweDZjZDQKKyNkZWZpbmUgQVZJVk9fRENfTFVUQl9XSElURV9PRkZTRVRfUkVEICAgICAgICAgIDB4NmNkOAogCiAgICAgLyoKICAgICAgKiAgU2V0IGEgc2luZ2xlIGNvbG9yIHJlZ2lzdGVyLiBUaGUgdmFsdWVzIHN1cHBsaWVkIGFyZSBhbHJlYWR5CkBAIC0xNjAsNiArMTcxLDE3IEBACiAJCW91dF9sZTMyKCgodW5zaWduZWQgX19pb21lbSAqKSBwYXItPmNtYXBfYWRyKSArIHJlZ25vLAogCQkJIChyZWQgPDwgMTYgfCBncmVlbiA8PCA4IHwgYmx1ZSkpOwogCQlicmVhazsKKwljYXNlIGNtYXBfYXZpdm86CisJCS8qIFdyaXRlIHRvIGJvdGggTFVUcyBmb3Igbm93ICovCisJCXdyaXRlbCgxLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUX1JXX1NFTEVDVCk7CisJCXdyaXRlYihyZWdubywgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVF9SV19JTkRFWCk7CisJCXdyaXRlbCgoKHJlZCkgPDwgMjIpIHwgKChncmVlbikgPDwgMTIpIHwgKChibHVlKSA8PCAyKSwKKwkJICAgICAgIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRfMzBfQ09MT1IpOworCQl3cml0ZWwoMCwgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVF9SV19TRUxFQ1QpOworCQl3cml0ZWIocmVnbm8sIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRfUldfSU5ERVgpOworCQl3cml0ZWwoKChyZWQpIDw8IDIyKSB8ICgoZ3JlZW4pIDw8IDEyKSB8ICgoYmx1ZSkgPDwgMiksCisJCSAgICAgICBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUXzMwX0NPTE9SKTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMTYsMTIgKzIzOCw1OSBAQAogCQkJCW91dF9sZTMyKCgodW5zaWduZWQgX19pb21lbSAqKSBwYXItPmNtYXBfYWRyKSArIGksCiAJCQkJCSAwKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgY21hcF9hdml2bzoKKwkJCQl3cml0ZWwoMSwgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVF9SV19TRUxFQ1QpOworCQkJCXdyaXRlYihpLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUX1JXX0lOREVYKTsKKwkJCQl3cml0ZWwoMCwgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVF8zMF9DT0xPUik7CisJCQkJd3JpdGVsKDAsIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRfUldfU0VMRUNUKTsKKwkJCQl3cml0ZWIoaSwgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVF9SV19JTkRFWCk7CisJCQkJd3JpdGVsKDAsIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRfMzBfQ09MT1IpOworCQkJCWJyZWFrOwogCQkJfQogCX0gZWxzZQogCQlmYl9zZXRfY21hcCgmaW5mby0+Y21hcCwgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb2ZmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBvZmZiX3BhciAqcGFyID0gKHN0cnVjdCBvZmZiX3BhciAqKSBpbmZvLT5wYXI7CisKKwkvKiBPbiBhdml2bywgaW5pdGlhbGl6ZSBwYWxldHRlIGNvbnRyb2wgKi8KKwlpZiAocGFyLT5jbWFwX3R5cGUgPT0gY21hcF9hdml2bykgeworCQl3cml0ZWwoMCwgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVEFfQ09OVFJPTCk7CisJCXdyaXRlbCgwLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUQV9CTEFDS19PRkZTRVRfQkxVRSk7CisJCXdyaXRlbCgwLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUQV9CTEFDS19PRkZTRVRfR1JFRU4pOworCQl3cml0ZWwoMCwgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVEFfQkxBQ0tfT0ZGU0VUX1JFRCk7CisJCXdyaXRlbCgweDAwMDBmZmZmLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUQV9XSElURV9PRkZTRVRfQkxVRSk7CisJCXdyaXRlbCgweDAwMDBmZmZmLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUQV9XSElURV9PRkZTRVRfR1JFRU4pOworCQl3cml0ZWwoMHgwMDAwZmZmZiwgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVEFfV0hJVEVfT0ZGU0VUX1JFRCk7CisJCXdyaXRlbCgwLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUQl9DT05UUk9MKTsKKwkJd3JpdGVsKDAsIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRCX0JMQUNLX09GRlNFVF9CTFVFKTsKKwkJd3JpdGVsKDAsIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRCX0JMQUNLX09GRlNFVF9HUkVFTik7CisJCXdyaXRlbCgwLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUQl9CTEFDS19PRkZTRVRfUkVEKTsKKwkJd3JpdGVsKDB4MDAwMGZmZmYsIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRCX1dISVRFX09GRlNFVF9CTFVFKTsKKwkJd3JpdGVsKDB4MDAwMGZmZmYsIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRCX1dISVRFX09GRlNFVF9HUkVFTik7CisJCXdyaXRlbCgweDAwMDBmZmZmLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUQl9XSElURV9PRkZTRVRfUkVEKTsKKwkJd3JpdGVsKDEsIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRfUldfU0VMRUNUKTsKKwkJd3JpdGVsKDAsIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRfUldfTU9ERSk7CisJCXdyaXRlbCgweDAwMDAwMDNmLCBwYXItPmNtYXBfYWRyICsgQVZJVk9fRENfTFVUX1dSSVRFX0VOX01BU0spOworCQl3cml0ZWwoMCwgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVF9SV19TRUxFQ1QpOworCQl3cml0ZWwoMCwgcGFyLT5jbWFwX2FkciArIEFWSVZPX0RDX0xVVF9SV19NT0RFKTsKKwkJd3JpdGVsKDB4MDAwMDAwM2YsIHBhci0+Y21hcF9hZHIgKyBBVklWT19EQ19MVVRfV1JJVEVfRU5fTUFTSyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBvZmZiX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX3NldGNvbHJlZwk9IG9mZmJfc2V0Y29scmVnLAorCS5mYl9zZXRfcGFyCT0gb2ZmYl9zZXRfcGFyLAorCS5mYl9ibGFuawk9IG9mZmJfYmxhbmssCisJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKK307CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKm9mZmJfbWFwX3JlZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgaW5kZXgsCiAJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQpAQCAtMjQ1LDYgKzMxNCw1OSBAQAogCXJldHVybiBpb3JlbWFwKHRhZGRyICsgb2Zmc2V0LCBzaXplKTsKIH0KIAorc3RhdGljIHZvaWQgb2ZmYl9pbml0X3BhbGV0dGVfaGFja3Moc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlzdHJ1Y3Qgb2ZmYl9wYXIgKnBhciA9IChzdHJ1Y3Qgb2ZmYl9wYXIgKikgaW5mby0+cGFyOworCisJaWYgKGRwICYmICFzdHJuY21wKG5hbWUsICJBVFksUmFnZTEyOCIsIDExKSkgeworCQlwYXItPmNtYXBfYWRyID0gb2ZmYl9tYXBfcmVnKGRwLCAyLCAwLCAweDFmZmYpOworCQlpZiAocGFyLT5jbWFwX2FkcikKKwkJCXBhci0+Y21hcF90eXBlID0gY21hcF9yMTI4OworCX0gZWxzZSBpZiAoZHAgJiYgKCFzdHJuY21wKG5hbWUsICJBVFksUmFnZU0zcEEiLCAxMikKKwkJCSAgfHwgIXN0cm5jbXAobmFtZSwgIkFUWSxSYWdlTTNwMTJBIiwgMTQpKSkgeworCQlwYXItPmNtYXBfYWRyID0gb2ZmYl9tYXBfcmVnKGRwLCAyLCAwLCAweDFmZmYpOworCQlpZiAocGFyLT5jbWFwX2FkcikKKwkJCXBhci0+Y21hcF90eXBlID0gY21hcF9NM0E7CisJfSBlbHNlIGlmIChkcCAmJiAhc3RybmNtcChuYW1lLCAiQVRZLFJhZ2VNM3BCIiwgMTIpKSB7CisJCXBhci0+Y21hcF9hZHIgPSBvZmZiX21hcF9yZWcoZHAsIDIsIDAsIDB4MWZmZik7CisJCWlmIChwYXItPmNtYXBfYWRyKQorCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX00zQjsKKwl9IGVsc2UgaWYgKGRwICYmICFzdHJuY21wKG5hbWUsICJBVFksUmFnZTYiLCA5KSkgeworCQlwYXItPmNtYXBfYWRyID0gb2ZmYl9tYXBfcmVnKGRwLCAxLCAwLCAweDFmZmYpOworCQlpZiAocGFyLT5jbWFwX2FkcikKKwkJCXBhci0+Y21hcF90eXBlID0gY21hcF9yYWRlb247CisJfSBlbHNlIGlmICghc3RybmNtcChuYW1lLCAiQVRZLCIsIDQpKSB7CisJCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGFkZHJlc3MgJiAweGZmMDAwMDAwVUw7CisJCXBhci0+Y21hcF9hZHIgPQorCQkJaW9yZW1hcChiYXNlICsgMHg3ZmYwMDAsIDB4MTAwMCkgKyAweGNjMDsKKwkJcGFyLT5jbWFwX2RhdGEgPSBwYXItPmNtYXBfYWRyICsgMTsKKwkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX202NDsKKwl9IGVsc2UgaWYgKGRwICYmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkcCwgInBjaTEwMTQsYjciKSB8fAorCQkJICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkcCwgInBjaTEwMTQsMjFjIikpKSB7CisJCXBhci0+Y21hcF9hZHIgPSBvZmZiX21hcF9yZWcoZHAsIDAsIDB4NjAwMCwgMHgxMDAwKTsKKwkJaWYgKHBhci0+Y21hcF9hZHIpCisJCQlwYXItPmNtYXBfdHlwZSA9IGNtYXBfZ3h0MjAwMDsKKwl9IGVsc2UgaWYgKGRwICYmICFzdHJuY21wKG5hbWUsICJ2Z2EsRGlzcGxheS0iLCAxMikpIHsKKwkJLyogTG9vayBmb3IgQVZJVk8gaW5pdGlhbGl6ZWQgYnkgU0xPRiAqLworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjaXBhcmVudCA9IG9mX2dldF9wYXJlbnQoZHApOworCQljb25zdCB1MzIgKnZpZCwgKmRpZDsKKwkJdmlkID0gb2ZfZ2V0X3Byb3BlcnR5KHBjaXBhcmVudCwgInZlbmRvci1pZCIsIE5VTEwpOworCQlkaWQgPSBvZl9nZXRfcHJvcGVydHkocGNpcGFyZW50LCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCS8qIFRoaXMgd2lsbCBtYXRjaCBtb3N0IFI1eHggKi8KKwkJaWYgKHZpZCAmJiBkaWQgJiYgKnZpZCA9PSAweDEwMDIgJiYKKwkJICAgICgoKmRpZCA+PSAweDcxMDAgJiYgKmRpZCA8IDB4NzgwMCkgfHwKKwkJICAgICAoKmRpZCA+PSAweDk0MDApKSkgeworCQkJcGFyLT5jbWFwX2FkciA9IG9mZmJfbWFwX3JlZyhwY2lwYXJlbnQsIDIsIDAsIDB4MTAwMDApOworCQkJaWYgKHBhci0+Y21hcF9hZHIpCisJCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX2F2aXZvOworCQl9CisJCW9mX25vZGVfcHV0KHBjaXBhcmVudCk7CisJfQorCWluZm8tPmZpeC52aXN1YWwgPSAocGFyLT5jbWFwX3R5cGUgIT0gY21hcF91bmtub3duKSA/CisJCUZCX1ZJU1VBTF9QU0VVRE9DT0xPUiA6IEZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1I7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvZmZiX2luaXRfZmIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZnVsbF9uYW1lLAogCQkJCWludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoLAogCQkJCWludCBwaXRjaCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLApAQCAtMjgzLDYgKzQwNSw3IEBACiAKIAlmaXggPSAmaW5mby0+Zml4OwogCXZhciA9ICZpbmZvLT52YXI7CisJaW5mby0+cGFyID0gcGFyOwogCiAJc3RyY3B5KGZpeC0+aWQsICJPRmZiICIpOwogCXN0cm5jYXQoZml4LT5pZCwgbmFtZSwgc2l6ZW9mKGZpeC0+aWQpIC0gc2l6ZW9mKCJPRmZiICIpKTsKQEAgLTI5OCwzOSArNDIxLDkgQEAKIAlmaXgtPnR5cGVfYXV4ID0gMDsKIAogCXBhci0+Y21hcF90eXBlID0gY21hcF91bmtub3duOwotCWlmIChkZXB0aCA9PSA4KSB7Ci0JCWlmIChkcCAmJiAhc3RybmNtcChuYW1lLCAiQVRZLFJhZ2UxMjgiLCAxMSkpIHsKLQkJCXBhci0+Y21hcF9hZHIgPSBvZmZiX21hcF9yZWcoZHAsIDIsIDAsIDB4MWZmZik7Ci0JCQlpZiAocGFyLT5jbWFwX2FkcikKLQkJCQlwYXItPmNtYXBfdHlwZSA9IGNtYXBfcjEyODsKLQkJfSBlbHNlIGlmIChkcCAmJiAoIXN0cm5jbXAobmFtZSwgIkFUWSxSYWdlTTNwQSIsIDEyKQotCQkJCSAgfHwgIXN0cm5jbXAobmFtZSwgIkFUWSxSYWdlTTNwMTJBIiwgMTQpKSkgewotCQkJcGFyLT5jbWFwX2FkciA9IG9mZmJfbWFwX3JlZyhkcCwgMiwgMCwgMHgxZmZmKTsKLQkJCWlmIChwYXItPmNtYXBfYWRyKQotCQkJCXBhci0+Y21hcF90eXBlID0gY21hcF9NM0E7Ci0JCX0gZWxzZSBpZiAoZHAgJiYgIXN0cm5jbXAobmFtZSwgIkFUWSxSYWdlTTNwQiIsIDEyKSkgewotCQkJcGFyLT5jbWFwX2FkciA9IG9mZmJfbWFwX3JlZyhkcCwgMiwgMCwgMHgxZmZmKTsKLQkJCWlmIChwYXItPmNtYXBfYWRyKQotCQkJCXBhci0+Y21hcF90eXBlID0gY21hcF9NM0I7Ci0JCX0gZWxzZSBpZiAoZHAgJiYgIXN0cm5jbXAobmFtZSwgIkFUWSxSYWdlNiIsIDkpKSB7Ci0JCQlwYXItPmNtYXBfYWRyID0gb2ZmYl9tYXBfcmVnKGRwLCAxLCAwLCAweDFmZmYpOwotCQkJaWYgKHBhci0+Y21hcF9hZHIpCi0JCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX3JhZGVvbjsKLQkJfSBlbHNlIGlmICghc3RybmNtcChuYW1lLCAiQVRZLCIsIDQpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGJhc2UgPSBhZGRyZXNzICYgMHhmZjAwMDAwMFVMOwotCQkJcGFyLT5jbWFwX2FkciA9Ci0JCQkgICAgaW9yZW1hcChiYXNlICsgMHg3ZmYwMDAsIDB4MTAwMCkgKyAweGNjMDsKLQkJCXBhci0+Y21hcF9kYXRhID0gcGFyLT5jbWFwX2FkciArIDE7Ci0JCQlwYXItPmNtYXBfdHlwZSA9IGNtYXBfbTY0OwotCQl9IGVsc2UgaWYgKGRwICYmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkcCwgInBjaTEwMTQsYjciKSB8fAotCQkJCSAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZHAsICJwY2kxMDE0LDIxYyIpKSkgewotCQkJcGFyLT5jbWFwX2FkciA9IG9mZmJfbWFwX3JlZyhkcCwgMCwgMHg2MDAwLCAweDEwMDApOwotCQkJaWYgKHBhci0+Y21hcF9hZHIpCi0JCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX2d4dDIwMDA7Ci0JCX0KLQkJZml4LT52aXN1YWwgPSAocGFyLT5jbWFwX3R5cGUgIT0gY21hcF91bmtub3duKSA/Ci0JCQlGQl9WSVNVQUxfUFNFVURPQ09MT1IgOiBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SOwotCX0gZWxzZQorCWlmIChkZXB0aCA9PSA4KQorCQlvZmZiX2luaXRfcGFsZXR0ZV9oYWNrcyhpbmZvLCBkcCwgbmFtZSwgYWRkcmVzcyk7CisJZWxzZQogCQlmaXgtPnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAKIAl2YXItPnhvZmZzZXQgPSB2YXItPnlvZmZzZXQgPSAwOwpAQCAtMzk1LDcgKzQ4OCw2IEBACiAKIAlpbmZvLT5mYm9wcyA9ICZvZmZiX29wczsKIAlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoYWRkcmVzcywgZml4LT5zbWVtX2xlbik7Ci0JaW5mby0+cGFyID0gcGFyOwogCWluZm8tPnBzZXVkb19wYWxldHRlID0gKHZvaWQgKikgKGluZm8gKyAxKTsKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgZm9yZWlnbl9lbmRpYW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHMzZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwppbmRleCBkYzNhZjFjLi40YjVkODA3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwpAQCAtMTI5Nyw2ICsxMjk3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwczNfc3lzdGVtX2J1c19kcml2ZXIgcHMzZmJfZHJpdmVyID0gewogCS5tYXRjaF9pZAk9IFBTM19NQVRDSF9JRF9HUkFQSElDUywKKwkubWF0Y2hfc3ViX2lkCT0gUFMzX01BVENIX1NVQl9JRF9GQiwKIAkuY29yZS5uYW1lCT0gREVWSUNFX05BTUUsCiAJLmNvcmUub3duZXIJPSBUSElTX01PRFVMRSwKIAkucHJvYmUJCT0gcHMzZmJfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKaW5kZXggZDA3NDYyNi4uYmIyNTE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwpAQCAtMjI3LDYgKzIyNywyMiBAQAogCWNhc2UgNDogIHJldCA9IExDQ1IzXzRCUFA7IGJyZWFrOwogCWNhc2UgODogIHJldCA9IExDQ1IzXzhCUFA7IGJyZWFrOwogCWNhc2UgMTY6IHJldCA9IExDQ1IzXzE2QlBQOyBicmVhazsKKwljYXNlIDI0OgorCQlzd2l0Y2ggKHZhci0+cmVkLmxlbmd0aCArIHZhci0+Z3JlZW4ubGVuZ3RoICsKKwkJCQl2YXItPmJsdWUubGVuZ3RoICsgdmFyLT50cmFuc3AubGVuZ3RoKSB7CisJCWNhc2UgMTg6IHJldCA9IExDQ1IzXzE4QlBQX1AgfCBMQ0NSM19QREZPUl8zOyBicmVhazsKKwkJY2FzZSAxOTogcmV0ID0gTENDUjNfMTlCUFBfUDsgYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJc3dpdGNoICh2YXItPnJlZC5sZW5ndGggKyB2YXItPmdyZWVuLmxlbmd0aCArCisJCQkJdmFyLT5ibHVlLmxlbmd0aCArIHZhci0+dHJhbnNwLmxlbmd0aCkgeworCQljYXNlIDE4OiByZXQgPSBMQ0NSM18xOEJQUCB8IExDQ1IzX1BERk9SXzM7IGJyZWFrOworCQljYXNlIDE5OiByZXQgPSBMQ0NSM18xOUJQUDsgYnJlYWs7CisJCWNhc2UgMjQ6IHJldCA9IExDQ1IzXzI0QlBQIHwgTENDUjNfUERGT1JfMzsgYnJlYWs7CisJCWNhc2UgMjU6IHJldCA9IExDQ1IzXzI1QlBQOyBicmVhazsKKwkJfQorCQlicmVhazsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM0NSw2ICszNjEsNDEgQEAKIAkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OyAgdmFyLT5ncmVlbi5sZW5ndGggPSA2OwogCQl2YXItPmJsdWUub2Zmc2V0ICA9IDA7ICB2YXItPmJsdWUubGVuZ3RoICA9IDU7CiAJCXZhci0+dHJhbnNwLm9mZnNldCA9IHZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJfSBlbHNlIGlmICh2YXItPmJpdHNfcGVyX3BpeGVsID4gMTYpIHsKKwkJc3RydWN0IHB4YWZiX21vZGVfaW5mbyAqbW9kZTsKKworCQltb2RlID0gcHhhZmJfZ2V0bW9kZShpbmYsIHZhcik7CisJCWlmICghbW9kZSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXN3aXRjaCAobW9kZS0+ZGVwdGgpIHsKKwkJY2FzZSAxODogLyogUkdCNjY2ICovCisJCQl2YXItPnRyYW5zcC5vZmZzZXQgPSB2YXItPnRyYW5zcC5sZW5ndGggICAgID0gMDsKKwkJCXZhci0+cmVkLm9mZnNldAkgICA9IDEyOyB2YXItPnJlZC5sZW5ndGggICAgPSA2OworCQkJdmFyLT5ncmVlbi5vZmZzZXQgID0gNjsgIHZhci0+Z3JlZW4ubGVuZ3RoICA9IDY7CisJCQl2YXItPmJsdWUub2Zmc2V0ICAgPSAwOyAgdmFyLT5ibHVlLmxlbmd0aCAgID0gNjsKKwkJCWJyZWFrOworCQljYXNlIDE5OiAvKiBSR0JUNjY2ICovCisJCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAxODsgdmFyLT50cmFuc3AubGVuZ3RoID0gMTsKKwkJCXZhci0+cmVkLm9mZnNldAkgICA9IDEyOyB2YXItPnJlZC5sZW5ndGggICAgPSA2OworCQkJdmFyLT5ncmVlbi5vZmZzZXQgID0gNjsgIHZhci0+Z3JlZW4ubGVuZ3RoICA9IDY7CisJCQl2YXItPmJsdWUub2Zmc2V0ICAgPSAwOyAgdmFyLT5ibHVlLmxlbmd0aCAgID0gNjsKKwkJCWJyZWFrOworCQljYXNlIDI0OiAvKiBSR0I4ODggKi8KKwkJCXZhci0+dHJhbnNwLm9mZnNldCA9IHZhci0+dHJhbnNwLmxlbmd0aCAgICAgPSAwOworCQkJdmFyLT5yZWQub2Zmc2V0CSAgID0gMTY7IHZhci0+cmVkLmxlbmd0aCAgICA9IDg7CisJCQl2YXItPmdyZWVuLm9mZnNldCAgPSA4OyAgdmFyLT5ncmVlbi5sZW5ndGggID0gODsKKwkJCXZhci0+Ymx1ZS5vZmZzZXQgICA9IDA7ICB2YXItPmJsdWUubGVuZ3RoICAgPSA4OworCQkJYnJlYWs7CisJCWNhc2UgMjU6IC8qIFJHQlQ4ODggKi8KKwkJCXZhci0+dHJhbnNwLm9mZnNldCA9IDI0OyB2YXItPnRyYW5zcC5sZW5ndGggPSAxOworCQkJdmFyLT5yZWQub2Zmc2V0CSAgID0gMTY7IHZhci0+cmVkLmxlbmd0aCAgICA9IDg7CisJCQl2YXItPmdyZWVuLm9mZnNldCAgPSA4OyAgdmFyLT5ncmVlbi5sZW5ndGggID0gODsKKwkJCXZhci0+Ymx1ZS5vZmZzZXQgICA9IDA7ICB2YXItPmJsdWUubGVuZ3RoICAgPSA4OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0gZWxzZSB7CiAJCXZhci0+cmVkLm9mZnNldCA9IHZhci0+Z3JlZW4ub2Zmc2V0ID0gMDsKIAkJdmFyLT5ibHVlLm9mZnNldCA9IHZhci0+dHJhbnNwLm9mZnNldCA9IDA7CkBAIC0zNzYsNyArNDI3LDcgQEAKIAlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gKHN0cnVjdCBweGFmYl9pbmZvICopaW5mbzsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7CiAKLQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAxNikKKwlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA+PSAxNikKIAkJZmJpLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKIAllbHNlIGlmICghZmJpLT5jbWFwX3N0YXRpYykKIAkJZmJpLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOwpAQCAtMzkxLDcgKzQ0Miw3IEBACiAKIAlmYmktPmZiLmZpeC5saW5lX2xlbmd0aCA9IHZhci0+eHJlc192aXJ0dWFsICoKIAkJCQkgIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4OwotCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDE2KQorCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID49IDE2KQogCQlmYmktPnBhbGV0dGVfc2l6ZSA9IDA7CiAJZWxzZQogCQlmYmktPnBhbGV0dGVfc2l6ZSA9IHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMSA/CkBAIC00MDQsNyArNDU1LDcgQEAKIAkgKi8KIAlweGFmYl9zZXRfdHJ1ZWNvbG9yKGZiaS0+ZmIuZml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SKTsKIAotCWlmIChmYmktPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAxNikKKwlpZiAoZmJpLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPj0gMTYpCiAJCWZiX2RlYWxsb2NfY21hcCgmZmJpLT5mYi5jbWFwKTsKIAllbHNlCiAJCWZiX2FsbG9jX2NtYXAoJmZiaS0+ZmIuY21hcCwgMTw8ZmJpLT5mYi52YXIuYml0c19wZXJfcGl4ZWwsIDApOwpAQCAtODMxLDYgKzg4Miw4IEBACiAJCWNhc2UgNDoKIAkJY2FzZSA4OgogCQljYXNlIDE2OgorCQljYXNlIDI0OgorCQljYXNlIDMyOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGJpdCBkZXB0aCAlZFxuIiwKQEAgLTk2OCw2ICsxMDIxLDExIEBACiAKIAlmb3IgKGdwaW8gPSA1ODsgbGRkX2JpdHM7IGdwaW8rKywgbGRkX2JpdHMtLSkKIAkJcHhhX2dwaW9fbW9kZShncGlvIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCS8qIDE4IGJpdCBpbnRlcmZhY2UgKi8KKwlpZiAoZmJpLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPiAxNikgeworCQlweGFfZ3Bpb19tb2RlKDg2IHwgR1BJT19BTFRfRk5fMl9PVVQpOworCQlweGFfZ3Bpb19tb2RlKDg3IHwgR1BJT19BTFRfRk5fMl9PVVQpOworCX0KIAlweGFfZ3Bpb19tb2RlKEdQSU83NF9MQ0RfRkNMS19NRCk7CiAJcHhhX2dwaW9fbW9kZShHUElPNzVfTENEX0xDTEtfTUQpOwogCXB4YV9ncGlvX21vZGUoR1BJTzc2X0xDRF9QQ0xLX01EKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2JhbGxvb24uYyBiL2RyaXZlcnMveGVuL2JhbGxvb24uYwppbmRleCA1OTFiYzI5Li5kNDQyN2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9iYWxsb29uLmMKKysrIGIvZHJpdmVycy94ZW4vYmFsbG9vbi5jCkBAIC02MTAsNiArNjEwLDcgQEAKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfdGFyZ2V0X2tiKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLAogCQkJICAgICAgIHNpemVfdCBjb3VudCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2V2ZW50cy5jIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKaW5kZXggMzMyZGQ2MzcuLjBlMGMyODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2V2ZW50cy5jCisrKyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCkBAIC03MzQsNiArNzM0LDMzIEBACiAJfQogfQogCisvKiBDbGVhciBhbiBpcnEncyBwZW5kaW5nIHN0YXRlLCBpbiBwcmVwYXJhdGlvbiBmb3IgcG9sbGluZyBvbiBpdCAqLwordm9pZCB4ZW5fY2xlYXJfaXJxX3BlbmRpbmcoaW50IGlycSkKK3sKKwlpbnQgZXZ0Y2huID0gZXZ0Y2huX2Zyb21faXJxKGlycSk7CisKKwlpZiAoVkFMSURfRVZUQ0hOKGV2dGNobikpCisJCWNsZWFyX2V2dGNobihldnRjaG4pOworfQorCisvKiBQb2xsIHdhaXRpbmcgZm9yIGFuIGlycSB0byBiZWNvbWUgcGVuZGluZy4gIEluIHRoZSB1c3VhbCBjYXNlLCB0aGUKKyAgIGlycSB3aWxsIGJlIGRpc2FibGVkIHNvIGl0IHdvbid0IGRlbGl2ZXIgYW4gaW50ZXJydXB0LiAqLwordm9pZCB4ZW5fcG9sbF9pcnEoaW50IGlycSkKK3sKKwlldnRjaG5fcG9ydF90IGV2dGNobiA9IGV2dGNobl9mcm9tX2lycShpcnEpOworCisJaWYgKFZBTElEX0VWVENITihldnRjaG4pKSB7CisJCXN0cnVjdCBzY2hlZF9wb2xsIHBvbGw7CisKKwkJcG9sbC5ucl9wb3J0cyA9IDE7CisJCXBvbGwudGltZW91dCA9IDA7CisJCXBvbGwucG9ydHMgPSAmZXZ0Y2huOworCisJCWlmIChIWVBFUlZJU09SX3NjaGVkX29wKFNDSEVET1BfcG9sbCwgJnBvbGwpICE9IDApCisJCQlCVUcoKTsKKwl9Cit9CisKIHZvaWQgeGVuX2lycV9yZXN1bWUodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1LCBpcnEsIGV2dGNobjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL21hbmFnZS5jIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKaW5kZXggNWI1NDZlMy4uYTViYzkxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vbWFuYWdlLmMKKysrIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKQEAgLTYzLDExICs2MywxMiBAQAogCWdudHRhYl9yZXN1bWUoKTsKIAl4ZW5fbW1fdW5waW5fYWxsKCk7CiAKLQlkZXZpY2VfcG93ZXJfdXAoKTsKKwlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNVTUUpOwogCiAJaWYgKCEqY2FuY2VsbGVkKSB7CiAJCXhlbl9pcnFfcmVzdW1lKCk7CiAJCXhlbl9jb25zb2xlX3Jlc3VtZSgpOworCQl4ZW5fdGltZXJfcmVzdW1lKCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMDcsMTIgKzEwOCwxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWNhbmNlbGxlZCkKKwlpZiAoIWNhbmNlbGxlZCkgeworCQl4ZW5fYXJjaF9yZXN1bWUoKTsKIAkJeGVuYnVzX3Jlc3VtZSgpOwotCWVsc2UKKwl9IGVsc2UKIAkJeGVuYnVzX3N1c3BlbmRfY2FuY2VsKCk7CiAKLQlkZXZpY2VfcmVzdW1lKCk7CisJZGV2aWNlX3Jlc3VtZShQTVNHX1JFU1VNRSk7CiAKIAkvKiBNYWtlIHN1cmUgdGltZXIgZXZlbnRzIGdldCByZXRyaWdnZXJlZCBvbiBhbGwgQ1BVcyAqLwogCWNsb2NrX3dhc19zZXQoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvem9ycm8vcHJvYy5jIGIvZHJpdmVycy96b3Jyby9wcm9jLmMKaW5kZXggMDk5YjZmYi4uZDQ3YzQ3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy96b3Jyby9wcm9jLmMKKysrIGIvZHJpdmVycy96b3Jyby9wcm9jLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICoJJElkOiBwcm9jLmMsdiAxLjEuMi4xIDE5OTgvMDYvMDcgMjM6MjE6MDEgZ2VlcnQgRXhwICQKLSAqCiAgKglQcm9jZnMgaW50ZXJmYWNlIGZvciB0aGUgWm9ycm8gYnVzLgogICoKICAqCUNvcHlyaWdodCAoQykgMTk5OC0yMDAzIEdlZXJ0IFV5dHRlcmhvZXZlbgpAQCAtMTYwLDQgKzE1OCw0IEBACiAJcmV0dXJuIDA7CiB9CiAKLV9faW5pdGNhbGwoem9ycm9fcHJvY19pbml0KTsKK2RldmljZV9pbml0Y2FsbCh6b3Jyb19wcm9jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy96b3Jyby96b3Jyby1zeXNmcy5jIGIvZHJpdmVycy96b3Jyby96b3Jyby1zeXNmcy5jCmluZGV4IDgwOGI0ZjguLjNkYTcxMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvem9ycm8vem9ycm8tc3lzZnMuYworKysgYi9kcml2ZXJzL3pvcnJvL3pvcnJvLXN5c2ZzLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiAjaW5jbHVkZSAiem9ycm8uaCIKIApAQCAtNTYsMTIgKzU3LDYgQEAKIAlzdHJ1Y3Qgem9ycm9fZGV2ICp6ID0gdG9fem9ycm9fZGV2KGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLAogCQkJCQkgICBrb2JqKSk7CiAJc3RydWN0IENvbmZpZ0RldiBjZDsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IHNpemVvZihjZCk7Ci0KLQlpZiAob2ZmID4gc2l6ZSkKLQkJcmV0dXJuIDA7Ci0JaWYgKG9mZitjb3VudCA+IHNpemUpCi0JCWNvdW50ID0gc2l6ZS1vZmY7CiAKIAkvKiBDb25zdHJ1Y3QgYSBDb25maWdEZXYgKi8KIAltZW1zZXQoJmNkLCAwLCBzaXplb2YoY2QpKTsKQEAgLTcxLDggKzY2LDcgQEAKIAljZC5jZF9Cb2FyZEFkZHIgPSAodm9pZCAqKXpvcnJvX3Jlc291cmNlX3N0YXJ0KHopOwogCWNkLmNkX0JvYXJkU2l6ZSA9IHpvcnJvX3Jlc291cmNlX2xlbih6KTsKIAotCW1lbWNweShidWYsICh2b2lkICopJmNkK29mZiwgY291bnQpOwotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gbWVtb3J5X3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgJm9mZiwgJmNkLCBzaXplb2YoY2QpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHpvcnJvX2NvbmZpZ19hdHRyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy96b3Jyby96b3Jyby5jIGIvZHJpdmVycy96b3Jyby96b3Jyby5jCmluZGV4IDRjYzQyYjYuLmRmZjE2ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvem9ycm8vem9ycm8uYworKysgYi9kcml2ZXJzL3pvcnJvL3pvcnJvLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogICAgJElkOiB6b3Jyby5jLHYgMS4xLjIuMSAxOTk4LzA2LzA3IDIzOjIxOjAyIGdlZXJ0IEV4cCAkCi0gKgogICogICAgWm9ycm8gQnVzIFNlcnZpY2VzCiAgKgogICogICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgR2VlcnQgVXl0dGVyaG9ldmVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3pvcnJvL3pvcnJvLmlkcyBiL2RyaXZlcnMvem9ycm8vem9ycm8uaWRzCmluZGV4IDU2MGZlZjIuLjBjMGY5OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvem9ycm8vem9ycm8uaWRzCisrKyBiL2RyaXZlcnMvem9ycm8vem9ycm8uaWRzCkBAIC00LDggKzQsNiBAQAogIwlNYWludGFpbmVkIGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiA8em9ycm9AbGludXgtbTY4ay5vcmc+CiAjCUlmIHlvdSBoYXZlIGFueSBuZXcgZW50cmllcywgcGxlYXNlIHNlbmQgdGhlbSB0byB0aGUgbWFpbnRhaW5lci4KICMKLSMJJElkOiB6b3Jyby5pZHMsdiAxLjE5IDIwMDIvMTAvMTQgMTM6MDg6NTggZ2VlcnQgRXhwICQKLSMKIAogIyBNYW51ZmFjdHVyZXJzIGFuZCBQcm9kdWN0cy4gUGxlYXNlIGtlZXAgc29ydGVkLgogCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggZDQ4ZmY1ZjMuLjYzOWQyZDggMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGYuYworKysgYi9mcy9iaW5mbXRfZWxmLmMKQEAgLTIwNCw2ICsyMDQsNyBAQAogCU5FV19BVVhfRU5UKEFUX0dJRCwgdHNrLT5naWQpOwogCU5FV19BVVhfRU5UKEFUX0VHSUQsIHRzay0+ZWdpZCk7CiAgCU5FV19BVVhfRU5UKEFUX1NFQ1VSRSwgc2VjdXJpdHlfYnBybV9zZWN1cmVleGVjKGJwcm0pKTsKKwlORVdfQVVYX0VOVChBVF9FWEVDRk4sIGJwcm0tPmV4ZWMpOwogCWlmIChrX3BsYXRmb3JtKSB7CiAJCU5FV19BVVhfRU5UKEFUX1BMQVRGT1JNLAogCQkJICAgIChlbGZfYWRkcl90KSh1bnNpZ25lZCBsb25nKXVfcGxhdGZvcm0pOwpkaWZmIC0tZ2l0IGEvZnMvY29kYS9wc2Rldi5jIGIvZnMvY29kYS9wc2Rldi5jCmluZGV4IGUzZWIzNTUuLjQwYzM2ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvcHNkZXYuYworKysgYi9mcy9jb2RhL3BzZGV2LmMKQEAgLTM2Miw4ICszNjIsOSBAQAogCQlnb3RvIG91dF9jaHJkZXY7CiAJfQkJCiAJZm9yIChpID0gMDsgaSA8IE1BWF9DT0RBREVWUzsgaSsrKQotCQlkZXZpY2VfY3JlYXRlKGNvZGFfcHNkZXZfY2xhc3MsIE5VTEwsCi0JCQkgICAgICBNS0RFVihDT0RBX1BTREVWX01BSk9SLGkpLCAiY2ZzJWQiLCBpKTsKKwkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNvZGFfcHNkZXZfY2xhc3MsIE5VTEwsCisJCQkJICAgICAgTUtERVYoQ09EQV9QU0RFVl9NQUpPUiwgaSksCisJCQkJICAgICAgTlVMTCwgImNmcyVkIiwgaSk7CiAJY29kYV9zeXNjdGxfaW5pdCgpOwogCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IGM1NGVhYWIuLjdiM2EwM2MgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC01OCw3ICs1OCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFsay5oPgogI2luY2x1ZGUgPGxpbnV4L2xvb3AuaD4KIApAQCAtMTc1OSw2NCArMTc1OCw2IEBACiAJcmV0dXJuIHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZyl0ZGF0YSk7CiB9CiAKLXN0cnVjdCBjb21wYXRfaXdfcG9pbnQgewotCWNvbXBhdF9jYWRkcl90IHBvaW50ZXI7Ci0JX191MTYgbGVuZ3RoOwotCV9fdTE2IGZsYWdzOwotfTsKLQotc3RhdGljIGludCBkb193aXJlbGVzc19pb2N0bCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBpd3JlcSBfX3VzZXIgKml3cjsKLQlzdHJ1Y3QgaXdyZXEgX191c2VyICppd3JfdTsKLQlzdHJ1Y3QgaXdfcG9pbnQgX191c2VyICppd3A7Ci0Jc3RydWN0IGNvbXBhdF9pd19wb2ludCBfX3VzZXIgKml3cF91OwotCWNvbXBhdF9jYWRkcl90IHBvaW50ZXJfdTsKLQl2b2lkIF9fdXNlciAqcG9pbnRlcjsKLQlfX3UxNiBsZW5ndGgsIGZsYWdzOwotCWludCByZXQ7Ci0KLQlpd3JfdSA9IGNvbXBhdF9wdHIoYXJnKTsKLQlpd3BfdSA9IChzdHJ1Y3QgY29tcGF0X2l3X3BvaW50IF9fdXNlciAqKSAmaXdyX3UtPnUuZGF0YTsKLQlpd3IgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKml3cikpOwotCWlmIChpd3IgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpd3AgPSAmaXdyLT51LmRhdGE7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGl3ciwgc2l6ZW9mKCppd3IpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoX19jb3B5X2luX3VzZXIoJml3ci0+aWZyX2lmcm4uaWZybl9uYW1lWzBdLAotCQkJICAgJml3cl91LT5pZnJfaWZybi5pZnJuX25hbWVbMF0sCi0JCQkgICBzaXplb2YoaXdyLT5pZnJfaWZybi5pZnJuX25hbWUpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoX19nZXRfdXNlcihwb2ludGVyX3UsICZpd3BfdS0+cG9pbnRlcikgfHwKLQkgICAgX19nZXRfdXNlcihsZW5ndGgsICZpd3BfdS0+bGVuZ3RoKSB8fAotCSAgICBfX2dldF91c2VyKGZsYWdzLCAmaXdwX3UtPmZsYWdzKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoX19wdXRfdXNlcihjb21wYXRfcHRyKHBvaW50ZXJfdSksICZpd3AtPnBvaW50ZXIpIHx8Ci0JICAgIF9fcHV0X3VzZXIobGVuZ3RoLCAmaXdwLT5sZW5ndGgpIHx8Ci0JICAgIF9fcHV0X3VzZXIoZmxhZ3MsICZpd3AtPmZsYWdzKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXQgPSBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGl3cik7Ci0KLQlpZiAoX19nZXRfdXNlcihwb2ludGVyLCAmaXdwLT5wb2ludGVyKSB8fAotCSAgICBfX2dldF91c2VyKGxlbmd0aCwgJml3cC0+bGVuZ3RoKSB8fAotCSAgICBfX2dldF91c2VyKGZsYWdzLCAmaXdwLT5mbGFncykpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKF9fcHV0X3VzZXIocHRyX3RvX2NvbXBhdChwb2ludGVyKSwgJml3cF91LT5wb2ludGVyKSB8fAotCSAgICBfX3B1dF91c2VyKGxlbmd0aCwgJml3cF91LT5sZW5ndGgpIHx8Ci0JICAgIF9fcHV0X3VzZXIoZmxhZ3MsICZpd3BfdS0+ZmxhZ3MpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qIFNpbmNlIG9sZCBzdHlsZSBicmlkZ2UgaW9jdGwncyBlbmR1cCB1c2luZyBTSU9DREVWUFJJVkFURQogICogZm9yIHNvbWUgb3BlcmF0aW9uczsgdGhpcyBmb3JjZXMgdXNlIG9mIHRoZSBuZXdlciBicmlkZ2UtdXRpbHMgdGhhdAogICogdXNlIGNvbXBhdGlhYmxlIGlvY3RscwpAQCAtMjQwNSw2ICsyMzQ2LDcgQEAKIENPTVBBVElCTEVfSU9DVEwoSENJR0VUREVWSU5GTykKIENPTVBBVElCTEVfSU9DVEwoSENJR0VUQ09OTkxJU1QpCiBDT01QQVRJQkxFX0lPQ1RMKEhDSUdFVENPTk5JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lHRVRBVVRISU5GTykKIENPTVBBVElCTEVfSU9DVEwoSENJU0VUUkFXKQogQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRTQ0FOKQogQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRBVVRIKQpAQCAtMjUwMSwzNiArMjQ0Myw2IEBACiBDT01QQVRJQkxFX0lPQ1RMKEkyQ19QRUMpCiBDT01QQVRJQkxFX0lPQ1RMKEkyQ19SRVRSSUVTKQogQ09NUEFUSUJMRV9JT0NUTChJMkNfVElNRU9VVCkKLS8qIHdpcmVsZXNzICovCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdDT01NSVQpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdOQU1FKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXTldJRCkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV05XSUQpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdGUkVRKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXRlJFUSkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV01PREUpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdNT0RFKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXU0VOUykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV1NFTlMpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdSQU5HRSkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1BSSVYpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdTVEFUUykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV0FQKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXQVApCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdSQVRFKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXUkFURSkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1JUUykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV1JUUykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV0ZSQUcpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdGUkFHKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXVFhQT1cpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdUWFBPVykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1JFVFJZKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXUkVUUlkpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdQT1dFUikKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV1BPV0VSKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXQVVUSCkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV0FVVEgpCiAvKiBoaWRkZXYgKi8KIENPTVBBVElCTEVfSU9DVEwoSElESU9DR1ZFUlNJT04pCiBDT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0FQUExJQ0FUSU9OKQpAQCAtMjc2MSwyOSArMjY3Myw3IEBACiBIQU5ETEVfSU9DVEwoSTJDX0ZVTkNTLCB3X2xvbmcpCiBIQU5ETEVfSU9DVEwoSTJDX1JEV1IsIGRvX2kyY19yZHdyX2lvY3RsKQogSEFORExFX0lPQ1RMKEkyQ19TTUJVUywgZG9faTJjX3NtYnVzX2lvY3RsKQotLyogd2lyZWxlc3MgKi8KLUhBTkRMRV9JT0NUTChTSU9DR0lXUkFOR0UsIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NHSVdQUklWLCBkb193aXJlbGVzc19pb2N0bCkKLUhBTkRMRV9JT0NUTChTSU9DR0lXU1RBVFMsIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NTSVdTUFksIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NHSVdTUFksIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NTSVdUSFJTUFksIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NHSVdUSFJTUFksIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NTSVdNTE1FLCBkb193aXJlbGVzc19pb2N0bCkKLUhBTkRMRV9JT0NUTChTSU9DR0lXQVBMSVNULCBkb193aXJlbGVzc19pb2N0bCkKLUhBTkRMRV9JT0NUTChTSU9DU0lXU0NBTiwgZG9fd2lyZWxlc3NfaW9jdGwpCi1IQU5ETEVfSU9DVEwoU0lPQ0dJV1NDQU4sIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NTSVdFU1NJRCwgZG9fd2lyZWxlc3NfaW9jdGwpCi1IQU5ETEVfSU9DVEwoU0lPQ0dJV0VTU0lELCBkb193aXJlbGVzc19pb2N0bCkKLUhBTkRMRV9JT0NUTChTSU9DU0lXTklDS04sIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NHSVdOSUNLTiwgZG9fd2lyZWxlc3NfaW9jdGwpCi1IQU5ETEVfSU9DVEwoU0lPQ1NJV0VOQ09ERSwgZG9fd2lyZWxlc3NfaW9jdGwpCi1IQU5ETEVfSU9DVEwoU0lPQ0dJV0VOQ09ERSwgZG9fd2lyZWxlc3NfaW9jdGwpCi1IQU5ETEVfSU9DVEwoU0lPQ1NJV0dFTklFLCBkb193aXJlbGVzc19pb2N0bCkKLUhBTkRMRV9JT0NUTChTSU9DR0lXR0VOSUUsIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NTSVdFTkNPREVFWFQsIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NHSVdFTkNPREVFWFQsIGRvX3dpcmVsZXNzX2lvY3RsKQotSEFORExFX0lPQ1RMKFNJT0NTSVdQTUtTQSwgZG9fd2lyZWxlc3NfaW9jdGwpCisvKiBicmlkZ2UgKi8KIEhBTkRMRV9JT0NUTChTSU9DU0lGQlIsIG9sZF9icmlkZ2VfaW9jdGwpCiBIQU5ETEVfSU9DVEwoU0lPQ0dJRkJSLCBvbGRfYnJpZGdlX2lvY3RsKQogLyogTm90IGltcGxlbWVudGVkIGluIHRoZSBuYXRpdmUga2VybmVsICovCmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCmluZGV4IDBlNjQzMTIuLjE3OTU4OWIgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCisrKyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC0xMDI3LDkgKzEwMjcsMTAgQEAKIAogc3RhdGljIGludCBjb25maWdmc19ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKIHsKLQlpbnQgcmV0LCBtb2R1bGVfZ290ID0gMDsKLQlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cDsKLQlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW07CisJaW50IHJldCA9IDA7CisJaW50IG1vZHVsZV9nb3QgPSAwOworCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwID0gTlVMTDsKKwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0gPSBOVUxMOwogCXN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07CiAJc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzOwogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkOwpAQCAtMTA3MCwyNSArMTA3MSwzMCBAQAogCXNucHJpbnRmKG5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiArIDEsICIlcyIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCiAJbXV0ZXhfbG9jaygmc3Vic3lzLT5zdV9tdXRleCk7Ci0JZ3JvdXAgPSBOVUxMOwotCWl0ZW0gPSBOVUxMOwogCWlmICh0eXBlLT5jdF9ncm91cF9vcHMtPm1ha2VfZ3JvdXApIHsKLQkJcmV0ID0gdHlwZS0+Y3RfZ3JvdXBfb3BzLT5tYWtlX2dyb3VwKHRvX2NvbmZpZ19ncm91cChwYXJlbnRfaXRlbSksIG5hbWUsICZncm91cCk7Ci0JCWlmICghcmV0KSB7CisJCWdyb3VwID0gdHlwZS0+Y3RfZ3JvdXBfb3BzLT5tYWtlX2dyb3VwKHRvX2NvbmZpZ19ncm91cChwYXJlbnRfaXRlbSksIG5hbWUpOworCQlpZiAoIWdyb3VwKQorCQkJZ3JvdXAgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlpZiAoIUlTX0VSUihncm91cCkpIHsKIAkJCWxpbmtfZ3JvdXAodG9fY29uZmlnX2dyb3VwKHBhcmVudF9pdGVtKSwgZ3JvdXApOwogCQkJaXRlbSA9ICZncm91cC0+Y2dfaXRlbTsKLQkJfQorCQl9IGVsc2UKKwkJCXJldCA9IFBUUl9FUlIoZ3JvdXApOwogCX0gZWxzZSB7Ci0JCXJldCA9IHR5cGUtPmN0X2dyb3VwX29wcy0+bWFrZV9pdGVtKHRvX2NvbmZpZ19ncm91cChwYXJlbnRfaXRlbSksIG5hbWUsICZpdGVtKTsKLQkJaWYgKCFyZXQpCisJCWl0ZW0gPSB0eXBlLT5jdF9ncm91cF9vcHMtPm1ha2VfaXRlbSh0b19jb25maWdfZ3JvdXAocGFyZW50X2l0ZW0pLCBuYW1lKTsKKwkJaWYgKCFpdGVtKQorCQkJaXRlbSA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWlmICghSVNfRVJSKGl0ZW0pKQogCQkJbGlua19vYmoocGFyZW50X2l0ZW0sIGl0ZW0pOworCQllbHNlCisJCQlyZXQgPSBQVFJfRVJSKGl0ZW0pOwogCX0KIAltdXRleF91bmxvY2soJnN1YnN5cy0+c3VfbXV0ZXgpOwogCiAJa2ZyZWUobmFtZSk7CiAJaWYgKHJldCkgewogCQkvKgotCQkgKiBJZiByZXQgIT0gMCwgdGhlbiBsaW5rX29iaigpIHdhcyBuZXZlciBjYWxsZWQuCisJCSAqIElmIGl0ZW0gPT0gTlVMTCwgdGhlbiBsaW5rX29iaigpIHdhcyBuZXZlciBjYWxsZWQuCiAJCSAqIFRoZXJlIGFyZSBubyBleHRyYSByZWZlcmVuY2VzIHRvIGNsZWFuIHVwLgogCQkgKi8KIAkJZ290byBvdXRfcHV0OwpkaWZmIC0tZ2l0IGEvZnMvZGVidWdmcy9pbm9kZS5jIGIvZnMvZGVidWdmcy9pbm9kZS5jCmluZGV4IGU5NjAyZDguLjA4ZTI4YzkgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvaW5vZGUuYworKysgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKQEAgLTMwOSwzMiArMzA5LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZWJ1Z2ZzX2NyZWF0ZV9zeW1saW5rKTsKIAotLyoqCi0gKiBkZWJ1Z2ZzX3JlbW92ZSAtIHJlbW92ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBmcm9tIHRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0KLSAqIEBkZW50cnk6IGEgcG9pbnRlciB0byBhIHRoZSBkZW50cnkgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHRvIGJlCi0gKiAgICAgICAgICByZW1vdmVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhIGZpbGUgb3IgZGlyZWN0b3J5IGluIGRlYnVnZnMgdGhhdCB3YXMgcHJldmlvdXNseQotICogY3JlYXRlZCB3aXRoIGEgY2FsbCB0byBhbm90aGVyIGRlYnVnZnMgZnVuY3Rpb24gKGxpa2UKLSAqIGRlYnVnZnNfY3JlYXRlX2ZpbGUoKSBvciB2YXJpYW50cyB0aGVyZW9mLikKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIGJlIGNhbGxlZCBpbiBvcmRlciBmb3IgdGhlIGZpbGUgdG8gYmUKLSAqIHJlbW92ZWQsIG5vIGF1dG9tYXRpYyBjbGVhbnVwIG9mIGZpbGVzIHdpbGwgaGFwcGVuIHdoZW4gYSBtb2R1bGUgaXMKLSAqIHJlbW92ZWQsIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZS4KLSAqLwotdm9pZCBkZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgdm9pZCBfX2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqcGFyZW50KQogewotCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlpbnQgcmV0ID0gMDsKLQkKLQlpZiAoIWRlbnRyeSkKLQkJcmV0dXJuOwogCi0JcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQlpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5kX2lub2RlKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChkZWJ1Z2ZzX3Bvc2l0aXZlKGRlbnRyeSkpIHsKIAkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgewogCQkJZGdldChkZW50cnkpOwpAQCAtMzU0LDEyICszMzIsMTEyIEBACiAJCQlkcHV0KGRlbnRyeSk7CiAJCX0KIAl9Cit9CisKKy8qKgorICogZGVidWdmc19yZW1vdmUgLSByZW1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbSB0aGUgZGVidWdmcyBmaWxlc3lzdGVtCisgKiBAZGVudHJ5OiBhIHBvaW50ZXIgdG8gYSB0aGUgZGVudHJ5IG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB0byBiZQorICogICAgICAgICAgcmVtb3ZlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBpbiBkZWJ1Z2ZzIHRoYXQgd2FzIHByZXZpb3VzbHkKKyAqIGNyZWF0ZWQgd2l0aCBhIGNhbGwgdG8gYW5vdGhlciBkZWJ1Z2ZzIGZ1bmN0aW9uIChsaWtlCisgKiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCkgb3IgdmFyaWFudHMgdGhlcmVvZi4pCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCB0byBiZSBjYWxsZWQgaW4gb3JkZXIgZm9yIHRoZSBmaWxlIHRvIGJlCisgKiByZW1vdmVkLCBubyBhdXRvbWF0aWMgY2xlYW51cCBvZiBmaWxlcyB3aWxsIGhhcHBlbiB3aGVuIGEgbW9kdWxlIGlzCisgKiByZW1vdmVkLCB5b3UgYXJlIHJlc3BvbnNpYmxlIGhlcmUuCisgKi8KK3ZvaWQgZGVidWdmc19yZW1vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKwkKKwlpZiAoIWRlbnRyeSkKKwkJcmV0dXJuOworCisJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKKwlpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5kX2lub2RlKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCV9fZGVidWdmc19yZW1vdmUoZGVudHJ5LCBwYXJlbnQpOwogCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAlzaW1wbGVfcmVsZWFzZV9mcygmZGVidWdmc19tb3VudCwgJmRlYnVnZnNfbW91bnRfY291bnQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdmc19yZW1vdmUpOwogCiAvKioKKyAqIGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZSAtIHJlY3Vyc2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3RvcnkKKyAqIEBkZW50cnk6IGEgcG9pbnRlciB0byBhIHRoZSBkZW50cnkgb2YgdGhlIGRpcmVjdG9yeSB0byBiZSByZW1vdmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgcmVtb3ZlcyBhIGRpcmVjdG9yeSB0cmVlIGluIGRlYnVnZnMgdGhhdAorICogd2FzIHByZXZpb3VzbHkgY3JlYXRlZCB3aXRoIGEgY2FsbCB0byBhbm90aGVyIGRlYnVnZnMgZnVuY3Rpb24KKyAqIChsaWtlIGRlYnVnZnNfY3JlYXRlX2ZpbGUoKSBvciB2YXJpYW50cyB0aGVyZW9mLikKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIGJlIGNhbGxlZCBpbiBvcmRlciBmb3IgdGhlIGZpbGUgdG8gYmUKKyAqIHJlbW92ZWQsIG5vIGF1dG9tYXRpYyBjbGVhbnVwIG9mIGZpbGVzIHdpbGwgaGFwcGVuIHdoZW4gYSBtb2R1bGUgaXMKKyAqIHJlbW92ZWQsIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZS4KKyAqLwordm9pZCBkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKmNoaWxkOworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKworCWlmICghZGVudHJ5KQorCQlyZXR1cm47CisKKwlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCWlmICghcGFyZW50IHx8ICFwYXJlbnQtPmRfaW5vZGUpCisJCXJldHVybjsKKworCXBhcmVudCA9IGRlbnRyeTsKKwltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJd2hpbGUgKDEpIHsKKwkJLyoKKwkJICogV2hlbiBhbGwgZGVudHJpZXMgdW5kZXIgInBhcmVudCIgaGFzIGJlZW4gcmVtb3ZlZCwKKwkJICogd2FsayB1cCB0aGUgdHJlZSB1bnRpbCB3ZSByZWFjaCBvdXIgc3RhcnRpbmcgcG9pbnQuCisJCSAqLworCQlpZiAobGlzdF9lbXB0eSgmcGFyZW50LT5kX3N1YmRpcnMpKSB7CisJCQltdXRleF91bmxvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCQlpZiAocGFyZW50ID09IGRlbnRyeSkKKwkJCQlicmVhazsKKwkJCXBhcmVudCA9IHBhcmVudC0+ZF9wYXJlbnQ7CisJCQltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCQl9CisJCWNoaWxkID0gbGlzdF9lbnRyeShwYXJlbnQtPmRfc3ViZGlycy5uZXh0LCBzdHJ1Y3QgZGVudHJ5LAorCQkJCWRfdS5kX2NoaWxkKTsKKworCQkvKgorCQkgKiBJZiAiY2hpbGQiIGlzbid0IGVtcHR5LCB3YWxrIGRvd24gdGhlIHRyZWUgYW5kCisJCSAqIHJlbW92ZSBhbGwgaXRzIGRlc2NlbmRhbnRzIGZpcnN0LgorCQkgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZjaGlsZC0+ZF9zdWJkaXJzKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCQkJcGFyZW50ID0gY2hpbGQ7CisJCQltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCQkJY29udGludWU7CisJCX0KKwkJX19kZWJ1Z2ZzX3JlbW92ZShjaGlsZCwgcGFyZW50KTsKKwkJaWYgKHBhcmVudC0+ZF9zdWJkaXJzLm5leHQgPT0gJmNoaWxkLT5kX3UuZF9jaGlsZCkgeworCQkJLyoKKwkJCSAqIEF2b2lkIGluZmluaXRlIGxvb3AgaWYgd2UgZmFpbCB0byByZW1vdmUKKwkJCSAqIG9uZSBkZW50cnkuCisJCQkgKi8KKwkJCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKKwkJCWJyZWFrOworCQl9CisJCXNpbXBsZV9yZWxlYXNlX2ZzKCZkZWJ1Z2ZzX21vdW50LCAmZGVidWdmc19tb3VudF9jb3VudCk7CisJfQorCisJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKKwltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCV9fZGVidWdmc19yZW1vdmUoZGVudHJ5LCBwYXJlbnQpOworCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKKwlzaW1wbGVfcmVsZWFzZV9mcygmZGVidWdmc19tb3VudCwgJmRlYnVnZnNfbW91bnRfY291bnQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKTsKKworLyoqCiAgKiBkZWJ1Z2ZzX3JlbmFtZSAtIHJlbmFtZSBhIGZpbGUvZGlyZWN0b3J5IGluIHRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0KICAqIEBvbGRfZGlyOiBhIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBkZW50cnkgZm9yIHRoZSByZW5hbWVkIG9iamVjdC4gVGhpcwogICogICAgICAgICAgc2hvdWxkIGJlIGEgZGlyZWN0b3J5IGRlbnRyeS4KZGlmZiAtLWdpdCBhL2ZzL2RsbS9jb25maWcuYyBiL2ZzL2RsbS9jb25maWcuYwppbmRleCA0OTJkOGNhLi5jNGU3ZDcyIDEwMDY0NAotLS0gYS9mcy9kbG0vY29uZmlnLmMKKysrIGIvZnMvZGxtL2NvbmZpZy5jCkBAIC00MSwyMCArNDEsMTYgQEAKIHN0cnVjdCBub2RlczsKIHN0cnVjdCBub2RlOwogCi1zdGF0aWMgaW50IG1ha2VfY2x1c3RlcihzdHJ1Y3QgY29uZmlnX2dyb3VwICosIGNvbnN0IGNoYXIgKiwKLQkJCXN0cnVjdCBjb25maWdfZ3JvdXAgKiopOworc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfY2x1c3RlcihzdHJ1Y3QgY29uZmlnX2dyb3VwICosIGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgdm9pZCBkcm9wX2NsdXN0ZXIoc3RydWN0IGNvbmZpZ19ncm91cCAqLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKik7CiBzdGF0aWMgdm9pZCByZWxlYXNlX2NsdXN0ZXIoc3RydWN0IGNvbmZpZ19pdGVtICopOwotc3RhdGljIGludCBtYWtlX3NwYWNlKHN0cnVjdCBjb25maWdfZ3JvdXAgKiwgY29uc3QgY2hhciAqLAotCQkgICAgICBzdHJ1Y3QgY29uZmlnX2dyb3VwICoqKTsKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX3NwYWNlKHN0cnVjdCBjb25maWdfZ3JvdXAgKiwgY29uc3QgY2hhciAqKTsKIHN0YXRpYyB2b2lkIGRyb3Bfc3BhY2Uoc3RydWN0IGNvbmZpZ19ncm91cCAqLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKik7CiBzdGF0aWMgdm9pZCByZWxlYXNlX3NwYWNlKHN0cnVjdCBjb25maWdfaXRlbSAqKTsKLXN0YXRpYyBpbnQgbWFrZV9jb21tKHN0cnVjdCBjb25maWdfZ3JvdXAgKiwgY29uc3QgY2hhciAqLAotCQkgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqKik7CitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICptYWtlX2NvbW0oc3RydWN0IGNvbmZpZ19ncm91cCAqLCBjb25zdCBjaGFyICopOwogc3RhdGljIHZvaWQgZHJvcF9jb21tKHN0cnVjdCBjb25maWdfZ3JvdXAgKiwgc3RydWN0IGNvbmZpZ19pdGVtICopOwogc3RhdGljIHZvaWQgcmVsZWFzZV9jb21tKHN0cnVjdCBjb25maWdfaXRlbSAqKTsKLXN0YXRpYyBpbnQgbWFrZV9ub2RlKHN0cnVjdCBjb25maWdfZ3JvdXAgKiwgY29uc3QgY2hhciAqLAotCQkgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqKik7CitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICptYWtlX25vZGUoc3RydWN0IGNvbmZpZ19ncm91cCAqLCBjb25zdCBjaGFyICopOwogc3RhdGljIHZvaWQgZHJvcF9ub2RlKHN0cnVjdCBjb25maWdfZ3JvdXAgKiwgc3RydWN0IGNvbmZpZ19pdGVtICopOwogc3RhdGljIHZvaWQgcmVsZWFzZV9ub2RlKHN0cnVjdCBjb25maWdfaXRlbSAqKTsKIApAQCAtMzk2LDggKzM5Miw4IEBACiAJcmV0dXJuIGkgPyBjb250YWluZXJfb2YoaSwgc3RydWN0IG5vZGUsIGl0ZW0pIDogTlVMTDsKIH0KIAotc3RhdGljIGludCBtYWtlX2NsdXN0ZXIoc3RydWN0IGNvbmZpZ19ncm91cCAqZywgY29uc3QgY2hhciAqbmFtZSwKLQkJCXN0cnVjdCBjb25maWdfZ3JvdXAgKipuZXdfZykKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX2NsdXN0ZXIoc3RydWN0IGNvbmZpZ19ncm91cCAqZywKKwkJCQkJIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGNsdXN0ZXIgKmNsID0gTlVMTDsKIAlzdHJ1Y3Qgc3BhY2VzICpzcHMgPSBOVUxMOwpAQCAtNDM1LDE1ICs0MzEsMTQgQEAKIAogCXNwYWNlX2xpc3QgPSAmc3BzLT5zc19ncm91cDsKIAljb21tX2xpc3QgPSAmY21zLT5jc19ncm91cDsKLQkqbmV3X2cgPSAmY2wtPmdyb3VwOwotCXJldHVybiAwOworCXJldHVybiAmY2wtPmdyb3VwOwogCiAgZmFpbDoKIAlrZnJlZShjbCk7CiAJa2ZyZWUoZ3BzKTsKIAlrZnJlZShzcHMpOwogCWtmcmVlKGNtcyk7Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyb3BfY2x1c3RlcihzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmkpCkBAIC00NzEsOCArNDY2LDcgQEAKIAlrZnJlZShjbCk7CiB9CiAKLXN0YXRpYyBpbnQgbWFrZV9zcGFjZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICBzdHJ1Y3QgY29uZmlnX2dyb3VwICoqbmV3X2cpCitzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9zcGFjZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBzcGFjZSAqc3AgPSBOVUxMOwogCXN0cnVjdCBub2RlcyAqbmRzID0gTlVMTDsKQEAgLTQ5NSwxNCArNDg5LDEzIEBACiAJSU5JVF9MSVNUX0hFQUQoJnNwLT5tZW1iZXJzKTsKIAltdXRleF9pbml0KCZzcC0+bWVtYmVyc19sb2NrKTsKIAlzcC0+bWVtYmVyc19jb3VudCA9IDA7Ci0JKm5ld19nID0gJnNwLT5ncm91cDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gJnNwLT5ncm91cDsKIAogIGZhaWw6CiAJa2ZyZWUoc3ApOwogCWtmcmVlKGdwcyk7CiAJa2ZyZWUobmRzKTsKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAogc3RhdGljIHZvaWQgZHJvcF9zcGFjZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmkpCkBAIC01MjksMjEgKzUyMiwxOSBAQAogCWtmcmVlKHNwKTsKIH0KIAotc3RhdGljIGludCBtYWtlX2NvbW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZywgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKipuZXdfaSkKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKm1ha2VfY29tbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBjb21tICpjbTsKIAogCWNtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvbW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNtKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljb25maWdfaXRlbV9pbml0X3R5cGVfbmFtZSgmY20tPml0ZW0sIG5hbWUsICZjb21tX3R5cGUpOwogCWNtLT5ub2RlaWQgPSAtMTsKIAljbS0+bG9jYWwgPSAwOwogCWNtLT5hZGRyX2NvdW50ID0gMDsKLQkqbmV3X2kgPSAmY20tPml0ZW07Ci0JcmV0dXJuIDA7CisJcmV0dXJuICZjbS0+aXRlbTsKIH0KIAogc3RhdGljIHZvaWQgZHJvcF9jb21tKHN0cnVjdCBjb25maWdfZ3JvdXAgKmcsIHN0cnVjdCBjb25maWdfaXRlbSAqaSkKQEAgLTU2MywxNSArNTU0LDE0IEBACiAJa2ZyZWUoY20pOwogfQogCi1zdGF0aWMgaW50IG1ha2Vfbm9kZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqKm5ld19pKQorc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqbWFrZV9ub2RlKHN0cnVjdCBjb25maWdfZ3JvdXAgKmcsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHNwYWNlICpzcCA9IHRvX3NwYWNlKGctPmNnX2l0ZW0uY2lfcGFyZW50KTsKIAlzdHJ1Y3Qgbm9kZSAqbmQ7CiAKIAluZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY29uZmlnX2l0ZW1faW5pdF90eXBlX25hbWUoJm5kLT5pdGVtLCBuYW1lLCAmbm9kZV90eXBlKTsKIAluZC0+bm9kZWlkID0gLTE7CkBAIC01ODMsOCArNTczLDcgQEAKIAlzcC0+bWVtYmVyc19jb3VudCsrOwogCW11dGV4X3VubG9jaygmc3AtPm1lbWJlcnNfbG9jayk7CiAKLQkqbmV3X2kgPSAmbmQtPml0ZW07Ci0JcmV0dXJuIDA7CisJcmV0dXJuICZuZC0+aXRlbTsKIH0KIAogc3RhdGljIHZvaWQgZHJvcF9ub2RlKHN0cnVjdCBjb25maWdfZ3JvdXAgKmcsIHN0cnVjdCBjb25maWdfaXRlbSAqaSkKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Yy5jIGIvZnMvbG9ja2Qvc3ZjLmMKaW5kZXggMjE2OWFmNC4uNWJkOWJmMCAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjLmMKKysrIGIvZnMvbG9ja2Qvc3ZjLmMKQEAgLTUwLDcgKzUwLDcgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgobmxtc3ZjX211dGV4KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQJCW5sbXN2Y191c2VyczsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QJKm5sbXN2Y190YXNrOwotc3RhdGljIHN0cnVjdCBzdmNfc2VydgkJKm5sbXN2Y19zZXJ2Oworc3RhdGljIHN0cnVjdCBzdmNfcnFzdAkJKm5sbXN2Y19ycXN0OwogaW50CQkJCW5sbXN2Y19ncmFjZV9wZXJpb2Q7CiB1bnNpZ25lZCBsb25nCQkJbmxtc3ZjX3RpbWVvdXQ7CiAKQEAgLTE5NCwyMCArMTk0LDExIEBACiAKIAkJc3ZjX3Byb2Nlc3MocnFzdHApOwogCX0KLQogCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CiAJaWYgKG5sbXN2Y19vcHMpCiAJCW5sbXN2Y19pbnZhbGlkYXRlX2FsbCgpOwogCW5sbV9zaHV0ZG93bl9ob3N0cygpOwotCiAJdW5sb2NrX2tlcm5lbCgpOwotCi0Jbmxtc3ZjX3Rhc2sgPSBOVUxMOwotCW5sbXN2Y19zZXJ2ID0gTlVMTDsKLQotCS8qIEV4aXQgdGhlIFJQQyB0aHJlYWQgKi8KLQlzdmNfZXhpdF90aHJlYWQocnFzdHApOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1NCwxNiArMjQ1LDE1IEBACiBsb2NrZF91cChpbnQgcHJvdG8pIC8qIE1heWJlIGFkZCBhICdmYW1pbHknIG9wdGlvbiB3aGVuIElQdjYgaXMgc3VwcG9ydGVkID8/ICovCiB7CiAJc3RydWN0IHN2Y19zZXJ2ICpzZXJ2OwotCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHA7CiAJaW50CQllcnJvciA9IDA7CiAKIAltdXRleF9sb2NrKCZubG1zdmNfbXV0ZXgpOwogCS8qCiAJICogQ2hlY2sgd2hldGhlciB3ZSdyZSBhbHJlYWR5IHVwIGFuZCBydW5uaW5nLgogCSAqLwotCWlmIChubG1zdmNfc2VydikgeworCWlmIChubG1zdmNfcnFzdCkgewogCQlpZiAocHJvdG8pCi0JCQllcnJvciA9IG1ha2Vfc29ja3Mobmxtc3ZjX3NlcnYsIHByb3RvKTsKKwkJCWVycm9yID0gbWFrZV9zb2NrcyhubG1zdmNfcnFzdC0+cnFfc2VydmVyLCBwcm90byk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjg4LDkgKzI3OCwxMCBAQAogCS8qCiAJICogQ3JlYXRlIHRoZSBrZXJuZWwgdGhyZWFkIGFuZCB3YWl0IGZvciBpdCB0byBzdGFydC4KIAkgKi8KLQlycXN0cCA9IHN2Y19wcmVwYXJlX3RocmVhZChzZXJ2LCAmc2Vydi0+c3ZfcG9vbHNbMF0pOwotCWlmIChJU19FUlIocnFzdHApKSB7Ci0JCWVycm9yID0gUFRSX0VSUihycXN0cCk7CisJbmxtc3ZjX3Jxc3QgPSBzdmNfcHJlcGFyZV90aHJlYWQoc2VydiwgJnNlcnYtPnN2X3Bvb2xzWzBdKTsKKwlpZiAoSVNfRVJSKG5sbXN2Y19ycXN0KSkgeworCQllcnJvciA9IFBUUl9FUlIobmxtc3ZjX3Jxc3QpOworCQlubG1zdmNfcnFzdCA9IE5VTEw7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSJsb2NrZF91cDogc3ZjX3Jxc3QgYWxsb2NhdGlvbiBmYWlsZWQsIGVycm9yPSVkXG4iLAogCQkJZXJyb3IpOwpAQCAtMjk4LDE2ICsyODksMTUgQEAKIAl9CiAKIAlzdmNfc29ja191cGRhdGVfYnVmcyhzZXJ2KTsKLQlubG1zdmNfc2VydiA9IHJxc3RwLT5ycV9zZXJ2ZXI7CiAKLQlubG1zdmNfdGFzayA9IGt0aHJlYWRfcnVuKGxvY2tkLCBycXN0cCwgc2Vydi0+c3ZfbmFtZSk7CisJbmxtc3ZjX3Rhc2sgPSBrdGhyZWFkX3J1bihsb2NrZCwgbmxtc3ZjX3Jxc3QsIHNlcnYtPnN2X25hbWUpOwogCWlmIChJU19FUlIobmxtc3ZjX3Rhc2spKSB7CiAJCWVycm9yID0gUFRSX0VSUihubG1zdmNfdGFzayk7CisJCXN2Y19leGl0X3RocmVhZChubG1zdmNfcnFzdCk7CiAJCW5sbXN2Y190YXNrID0gTlVMTDsKLQkJbmxtc3ZjX3NlcnYgPSBOVUxMOworCQlubG1zdmNfcnFzdCA9IE5VTEw7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSJsb2NrZF91cDoga3RocmVhZF9ydW4gZmFpbGVkLCBlcnJvcj0lZFxuIiwgZXJyb3IpOwotCQlzdmNfZXhpdF90aHJlYWQocnFzdHApOwogCQlnb3RvIGRlc3Ryb3lfYW5kX291dDsKIAl9CiAKQEAgLTM0Niw2ICszMzYsOSBAQAogCQlCVUcoKTsKIAl9CiAJa3RocmVhZF9zdG9wKG5sbXN2Y190YXNrKTsKKwlzdmNfZXhpdF90aHJlYWQobmxtc3ZjX3Jxc3QpOworCW5sbXN2Y190YXNrID0gTlVMTDsKKwlubG1zdmNfcnFzdCA9IE5VTEw7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZubG1zdmNfbXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjNHByb2MuYyBiL2ZzL2xvY2tkL3N2YzRwcm9jLmMKaW5kZXggMmUyNzE3Ni4uMzk5NDQ0NjMgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2YzRwcm9jLmMKKysrIGIvZnMvbG9ja2Qvc3ZjNHByb2MuYwpAQCAtNTgsOCArNTgsNyBAQAogCXJldHVybiAwOwogCiBub19sb2NrczoKLQlpZiAoaG9zdCkKLQkJbmxtX3JlbGVhc2VfaG9zdChob3N0KTsKKwlubG1fcmVsZWFzZV9ob3N0KGhvc3QpOwogIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsJCiAJcmV0dXJuIG5sbV9sY2tfZGVuaWVkX25vbG9ja3M7CkBAIC0xMDAsNyArOTksNyBAQAogCQlyZXR1cm4gcmVzcC0+c3RhdHVzID09IG5sbV9kcm9wX3JlcGx5ID8gcnBjX2Ryb3BfcmVwbHkgOnJwY19zdWNjZXNzOwogCiAJLyogTm93IGNoZWNrIGZvciBjb25mbGljdGluZyBsb2NrcyAqLwotCXJlc3AtPnN0YXR1cyA9IG5sbXN2Y190ZXN0bG9jayhycXN0cCwgZmlsZSwgJmFyZ3AtPmxvY2ssICZyZXNwLT5sb2NrLCAmcmVzcC0+Y29va2llKTsKKwlyZXNwLT5zdGF0dXMgPSBubG1zdmNfdGVzdGxvY2socnFzdHAsIGZpbGUsIGhvc3QsICZhcmdwLT5sb2NrLCAmcmVzcC0+bG9jaywgJnJlc3AtPmNvb2tpZSk7CiAJaWYgKHJlc3AtPnN0YXR1cyA9PSBubG1fZHJvcF9yZXBseSkKIAkJcmMgPSBycGNfZHJvcF9yZXBseTsKIAllbHNlCkBAIC0xNDYsNyArMTQ1LDcgQEAKICNlbmRpZgogCiAJLyogTm93IHRyeSB0byBsb2NrIHRoZSBmaWxlICovCi0JcmVzcC0+c3RhdHVzID0gbmxtc3ZjX2xvY2socnFzdHAsIGZpbGUsICZhcmdwLT5sb2NrLAorCXJlc3AtPnN0YXR1cyA9IG5sbXN2Y19sb2NrKHJxc3RwLCBmaWxlLCBob3N0LCAmYXJncC0+bG9jaywKIAkJCQkJYXJncC0+YmxvY2ssICZhcmdwLT5jb29raWUpOwogCWlmIChyZXNwLT5zdGF0dXMgPT0gbmxtX2Ryb3BfcmVwbHkpCiAJCXJjID0gcnBjX2Ryb3BfcmVwbHk7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNsb2NrLmMgYi9mcy9sb2NrZC9zdmNsb2NrLmMKaW5kZXggNTZhMDhhYi4uODIxYjlhYyAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjbG9jay5jCisrKyBiL2ZzL2xvY2tkL3N2Y2xvY2suYwpAQCAtMTI5LDkgKzEyOSw5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IG5sbV9jb29raWVfbWF0Y2goc3RydWN0IG5sbV9jb29raWUgKmEsIHN0cnVjdCBubG1fY29va2llICpiKQogewotCWlmKGEtPmxlbiAhPSBiLT5sZW4pCisJaWYgKGEtPmxlbiAhPSBiLT5sZW4pCiAJCXJldHVybiAwOwotCWlmKG1lbWNtcChhLT5kYXRhLGItPmRhdGEsYS0+bGVuKSkKKwlpZiAobWVtY21wKGEtPmRhdGEsIGItPmRhdGEsIGEtPmxlbikpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQpAQCAtMTgwLDYgKzE4MCw3IEBACiAJc3RydWN0IG5sbV9ibG9jawkqYmxvY2s7CiAJc3RydWN0IG5sbV9ycXN0CQkqY2FsbCA9IE5VTEw7CiAKKwlubG1fZ2V0X2hvc3QoaG9zdCk7CiAJY2FsbCA9IG5sbV9hbGxvY19jYWxsKGhvc3QpOwogCWlmIChjYWxsID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtMzU4LDEwICszNTksMTAgQEAKICAqLwogX19iZTMyCiBubG1zdmNfbG9jayhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmxtX2ZpbGUgKmZpbGUsCi0JCQlzdHJ1Y3QgbmxtX2xvY2sgKmxvY2ssIGludCB3YWl0LCBzdHJ1Y3QgbmxtX2Nvb2tpZSAqY29va2llKQorCSAgICBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QsIHN0cnVjdCBubG1fbG9jayAqbG9jaywgaW50IHdhaXQsCisJICAgIHN0cnVjdCBubG1fY29va2llICpjb29raWUpCiB7CiAJc3RydWN0IG5sbV9ibG9jawkqYmxvY2sgPSBOVUxMOwotCXN0cnVjdCBubG1faG9zdAkJKmhvc3Q7CiAJaW50CQkJZXJyb3I7CiAJX19iZTMyCQkJcmV0OwogCkBAIC0zNzMsMTEgKzM3NCw2IEBACiAJCQkJKGxvbmcgbG9uZylsb2NrLT5mbC5mbF9lbmQsCiAJCQkJd2FpdCk7CiAKLQkvKiBDcmVhdGUgaG9zdCBoYW5kbGUgZm9yIGNhbGxiYWNrICovCi0JaG9zdCA9IG5sbXN2Y19sb29rdXBfaG9zdChycXN0cCwgbG9jay0+Y2FsbGVyLCBsb2NrLT5sZW4pOwotCWlmIChob3N0ID09IE5VTEwpCi0JCXJldHVybiBubG1fbGNrX2RlbmllZF9ub2xvY2tzOwotCiAJLyogTG9jayBmaWxlIGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgKi8KIAltdXRleF9sb2NrKCZmaWxlLT5mX211dGV4KTsKIAkvKiBHZXQgZXhpc3RpbmcgYmxvY2sgKGluIGNhc2UgY2xpZW50IGlzIGJ1c3ktd2FpdGluZykKQEAgLTM4NSw4ICszODEsNyBAQAogCSAqLwogCWJsb2NrID0gbmxtc3ZjX2xvb2t1cF9ibG9jayhmaWxlLCBsb2NrKTsKIAlpZiAoYmxvY2sgPT0gTlVMTCkgewotCQlibG9jayA9IG5sbXN2Y19jcmVhdGVfYmxvY2socnFzdHAsIG5sbV9nZXRfaG9zdChob3N0KSwgZmlsZSwKLQkJCQlsb2NrLCBjb29raWUpOworCQlibG9jayA9IG5sbXN2Y19jcmVhdGVfYmxvY2socnFzdHAsIGhvc3QsIGZpbGUsIGxvY2ssIGNvb2tpZSk7CiAJCXJldCA9IG5sbV9sY2tfZGVuaWVkX25vbG9ja3M7CiAJCWlmIChibG9jayA9PSBOVUxMKQogCQkJZ290byBvdXQ7CkBAIC00MTcsNyArNDEyLDcgQEAKIAlsb2NrLT5mbC5mbF9mbGFncyAmPSB+RkxfU0xFRVA7CiAKIAlkcHJpbnRrKCJsb2NrZDogdmZzX2xvY2tfZmlsZSByZXR1cm5lZCAlZFxuIiwgZXJyb3IpOwotCXN3aXRjaChlcnJvcikgeworCXN3aXRjaCAoZXJyb3IpIHsKIAkJY2FzZSAwOgogCQkJcmV0ID0gbmxtX2dyYW50ZWQ7CiAJCQlnb3RvIG91dDsKQEAgLTQ1MCw3ICs0NDUsNiBAQAogb3V0OgogCW11dGV4X3VubG9jaygmZmlsZS0+Zl9tdXRleCk7CiAJbmxtc3ZjX3JlbGVhc2VfYmxvY2soYmxvY2spOwotCW5sbV9yZWxlYXNlX2hvc3QoaG9zdCk7CiAJZHByaW50aygibG9ja2Q6IG5sbXN2Y19sb2NrIHJldHVybmVkICV1XG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CkBAIC00NjAsOCArNDU0LDggQEAKICAqLwogX19iZTMyCiBubG1zdmNfdGVzdGxvY2soc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5sbV9maWxlICpmaWxlLAotCQlzdHJ1Y3QgbmxtX2xvY2sgKmxvY2ssIHN0cnVjdCBubG1fbG9jayAqY29uZmxvY2ssCi0JCXN0cnVjdCBubG1fY29va2llICpjb29raWUpCisJCXN0cnVjdCBubG1faG9zdCAqaG9zdCwgc3RydWN0IG5sbV9sb2NrICpsb2NrLAorCQlzdHJ1Y3QgbmxtX2xvY2sgKmNvbmZsb2NrLCBzdHJ1Y3QgbmxtX2Nvb2tpZSAqY29va2llKQogewogCXN0cnVjdCBubG1fYmxvY2sgCSpibG9jayA9IE5VTEw7CiAJaW50CQkJZXJyb3I7CkBAIC00NzksMTYgKzQ3Myw5IEBACiAKIAlpZiAoYmxvY2sgPT0gTlVMTCkgewogCQlzdHJ1Y3QgZmlsZV9sb2NrICpjb25mID0ga3phbGxvYyhzaXplb2YoKmNvbmYpLCBHRlBfS0VSTkVMKTsKLQkJc3RydWN0IG5sbV9ob3N0CSpob3N0OwogCiAJCWlmIChjb25mID09IE5VTEwpCiAJCQlyZXR1cm4gbmxtX2dyYW50ZWQ7Ci0JCS8qIENyZWF0ZSBob3N0IGhhbmRsZSBmb3IgY2FsbGJhY2sgKi8KLQkJaG9zdCA9IG5sbXN2Y19sb29rdXBfaG9zdChycXN0cCwgbG9jay0+Y2FsbGVyLCBsb2NrLT5sZW4pOwotCQlpZiAoaG9zdCA9PSBOVUxMKSB7Ci0JCQlrZnJlZShjb25mKTsKLQkJCXJldHVybiBubG1fbGNrX2RlbmllZF9ub2xvY2tzOwotCQl9CiAJCWJsb2NrID0gbmxtc3ZjX2NyZWF0ZV9ibG9jayhycXN0cCwgaG9zdCwgZmlsZSwgbG9jaywgY29va2llKTsKIAkJaWYgKGJsb2NrID09IE5VTEwpIHsKIAkJCWtmcmVlKGNvbmYpOwpAQCAtODk3LDcgKzg4NCw3IEBACiAKIAkJaWYgKGJsb2NrLT5iX3doZW4gPT0gTkxNX05FVkVSKQogCQkJYnJlYWs7Ci0JICAgICAgICBpZiAodGltZV9hZnRlcihibG9jay0+Yl93aGVuLGppZmZpZXMpKSB7CisJCWlmICh0aW1lX2FmdGVyKGJsb2NrLT5iX3doZW4sIGppZmZpZXMpKSB7CiAJCQl0aW1lb3V0ID0gYmxvY2stPmJfd2hlbiAtIGppZmZpZXM7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjcHJvYy5jIGIvZnMvbG9ja2Qvc3ZjcHJvYy5jCmluZGV4IGNlNjk1MmIuLjc2MDE5ZDIgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y3Byb2MuYworKysgYi9mcy9sb2NrZC9zdmNwcm9jLmMKQEAgLTg3LDggKzg3LDcgQEAKIAlyZXR1cm4gMDsKIAogbm9fbG9ja3M6Ci0JaWYgKGhvc3QpCi0JCW5sbV9yZWxlYXNlX2hvc3QoaG9zdCk7CisJbmxtX3JlbGVhc2VfaG9zdChob3N0KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlyZXR1cm4gbmxtX2xja19kZW5pZWRfbm9sb2NrczsKQEAgLTEyOSw3ICsxMjgsNyBAQAogCQlyZXR1cm4gcmVzcC0+c3RhdHVzID09IG5sbV9kcm9wX3JlcGx5ID8gcnBjX2Ryb3BfcmVwbHkgOnJwY19zdWNjZXNzOwogCiAJLyogTm93IGNoZWNrIGZvciBjb25mbGljdGluZyBsb2NrcyAqLwotCXJlc3AtPnN0YXR1cyA9IGNhc3Rfc3RhdHVzKG5sbXN2Y190ZXN0bG9jayhycXN0cCwgZmlsZSwgJmFyZ3AtPmxvY2ssICZyZXNwLT5sb2NrLCAmcmVzcC0+Y29va2llKSk7CisJcmVzcC0+c3RhdHVzID0gY2FzdF9zdGF0dXMobmxtc3ZjX3Rlc3Rsb2NrKHJxc3RwLCBmaWxlLCBob3N0LCAmYXJncC0+bG9jaywgJnJlc3AtPmxvY2ssICZyZXNwLT5jb29raWUpKTsKIAlpZiAocmVzcC0+c3RhdHVzID09IG5sbV9kcm9wX3JlcGx5KQogCQlyYyA9IHJwY19kcm9wX3JlcGx5OwogCWVsc2UKQEAgLTE3Niw3ICsxNzUsNyBAQAogI2VuZGlmCiAKIAkvKiBOb3cgdHJ5IHRvIGxvY2sgdGhlIGZpbGUgKi8KLQlyZXNwLT5zdGF0dXMgPSBjYXN0X3N0YXR1cyhubG1zdmNfbG9jayhycXN0cCwgZmlsZSwgJmFyZ3AtPmxvY2ssCisJcmVzcC0+c3RhdHVzID0gY2FzdF9zdGF0dXMobmxtc3ZjX2xvY2socnFzdHAsIGZpbGUsIGhvc3QsICZhcmdwLT5sb2NrLAogCQkJCQkgICAgICAgYXJncC0+YmxvY2ssICZhcmdwLT5jb29raWUpKTsKIAlpZiAocmVzcC0+c3RhdHVzID09IG5sbV9kcm9wX3JlcGx5KQogCQlyYyA9IHJwY19kcm9wX3JlcGx5OwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3Zjc3Vicy5jIGIvZnMvbG9ja2Qvc3Zjc3Vicy5jCmluZGV4IGQxYzQ4YjUuLjE5OGI0ZTUgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y3N1YnMuYworKysgYi9mcy9sb2NrZC9zdmNzdWJzLmMKQEAgLTM3MywxMyArMzczLDE2IEBACiAJfQogfQogCi0vKgotICogUmVtb3ZlIGFsbCBsb2NrcyBoZWxkIGZvciBjbGllbnRzCisvKioKKyAqIG5sbXN2Y19pbnZhbGlkYXRlX2FsbCAtIHJlbW92ZSBhbGwgbG9ja3MgaGVsZCBmb3IgY2xpZW50cworICoKKyAqIFJlbGVhc2UgYWxsIGxvY2tzIGhlbGQgYnkgTkZTIGNsaWVudHMuCisgKgogICovCiB2b2lkCiBubG1zdmNfaW52YWxpZGF0ZV9hbGwodm9pZCkKIHsKLQkvKiBSZWxlYXNlIGFsbCBsb2NrcyBoZWxkIGJ5IE5GUyBjbGllbnRzLgorCS8qCiAJICogUHJldmlvdXNseSwgdGhlIGNvZGUgd291bGQgY2FsbAogCSAqIG5sbXN2Y19mcmVlX2hvc3RfcmVzb3VyY2VzIGZvciBlYWNoIGNsaWVudCBpbgogCSAqIHR1cm4sIHdoaWNoIGlzIGFib3V0IGFzIGluZWZmaWNpZW50IGFzIGl0IGdldHMuCkBAIC0zOTYsNiArMzk5LDEyIEBACiAJcmV0dXJuIHNiID09IGZpbGUtPmZfZmlsZS0+Zl9wYXRoLm1udC0+bW50X3NiOwogfQogCisvKioKKyAqIG5sbXN2Y191bmxvY2tfYWxsX2J5X3NiIC0gcmVsZWFzZSBsb2NrcyBoZWxkIG9uIHRoaXMgZmlsZSBzeXN0ZW0KKyAqIEBzYjogc3VwZXIgYmxvY2sKKyAqCisgKiBSZWxlYXNlIGFsbCBsb2NrcyBoZWxkIGJ5IGNsaWVudHMgYWNjZXNzaW5nIHRoaXMgZmlsZSBzeXN0ZW0uCisgKi8KIGludAogbmxtc3ZjX3VubG9ja19hbGxfYnlfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKQEAgLTQwOSwxNyArNDE4LDIyIEBACiBzdGF0aWMgaW50CiBubG1zdmNfbWF0Y2hfaXAodm9pZCAqZGF0YXAsIHN0cnVjdCBubG1faG9zdCAqaG9zdCkKIHsKLQlfX2JlMzIgKnNlcnZlcl9hZGRyID0gZGF0YXA7Ci0KLQlyZXR1cm4gaG9zdC0+aF9zYWRkci5zaW5fYWRkci5zX2FkZHIgPT0gKnNlcnZlcl9hZGRyOworCXJldHVybiBubG1fY21wX2FkZHIoJmhvc3QtPmhfc2FkZHIsIGRhdGFwKTsKIH0KIAorLyoqCisgKiBubG1zdmNfdW5sb2NrX2FsbF9ieV9pcCAtIHJlbGVhc2UgbG9jYWwgbG9ja3MgYnkgSVAgYWRkcmVzcworICogQHNlcnZlcl9hZGRyOiBzZXJ2ZXIncyBJUCBhZGRyZXNzIGFzIHNlZW4gYnkgY2xpZW50cworICoKKyAqIFJlbGVhc2UgYWxsIGxvY2tzIGhlbGQgYnkgY2xpZW50cyBhY2Nlc3NpbmcgdGhpcyBob3N0CisgKiB2aWEgdGhlIHBhc3NlZCBpbiBJUCBhZGRyZXNzLgorICovCiBpbnQKLW5sbXN2Y191bmxvY2tfYWxsX2J5X2lwKF9fYmUzMiBzZXJ2ZXJfYWRkcikKK25sbXN2Y191bmxvY2tfYWxsX2J5X2lwKHN0cnVjdCBzb2NrYWRkciAqc2VydmVyX2FkZHIpCiB7CiAJaW50IHJldDsKLQlyZXQgPSBubG1fdHJhdmVyc2VfZmlsZXMoJnNlcnZlcl9hZGRyLCBubG1zdmNfbWF0Y2hfaXAsIE5VTEwpOwotCXJldHVybiByZXQgPyAtRUlPIDogMDsKIAorCXJldCA9IG5sbV90cmF2ZXJzZV9maWxlcyhzZXJ2ZXJfYWRkciwgbmxtc3ZjX21hdGNoX2lwLCBOVUxMKTsKKwlyZXR1cm4gcmV0ID8gLUVJTyA6IDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChubG1zdmNfdW5sb2NrX2FsbF9ieV9pcCk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL2xvY2tkLmMgYi9mcy9uZnNkL2xvY2tkLmMKaW5kZXggOWU0YTU2OC4uNmI2MjI1YSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9sb2NrZC5jCisrKyBiL2ZzL25mc2QvbG9ja2QuYwpAQCAtMzUsNyArMzUsNyBAQAogCWZoLmZoX2V4cG9ydCA9IE5VTEw7CiAKIAlleHBfcmVhZGxvY2soKTsKLQluZnNlcnIgPSBuZnNkX29wZW4ocnFzdHAsICZmaCwgU19JRlJFRywgTUFZX0xPQ0ssIGZpbHApOworCW5mc2VyciA9IG5mc2Rfb3BlbihycXN0cCwgJmZoLCBTX0lGUkVHLCBORlNEX01BWV9MT0NLLCBmaWxwKTsKIAlmaF9wdXQoJmZoKTsKIAlycXN0cC0+cnFfY2xpZW50ID0gTlVMTDsKIAlleHBfcmVhZHVubG9jaygpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMyYWNsLmMgYi9mcy9uZnNkL25mczJhY2wuYwppbmRleCAxYzNiNzY1Li40ZTMyMTllIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczJhY2wuYworKysgYi9mcy9uZnNkL25mczJhY2wuYwpAQCAtNDAsNyArNDAsOCBAQAogCWRwcmludGsoIm5mc2Q6IEdFVEFDTCgyYWNsKSAgICVzXG4iLCBTVkNGSF9mbXQoJmFyZ3AtPmZoKSk7CiAKIAlmaCA9IGZoX2NvcHkoJnJlc3AtPmZoLCAmYXJncC0+ZmgpOwotCWlmICgobmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCAmcmVzcC0+ZmgsIDAsIE1BWV9OT1ApKSkKKwluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZyZXNwLT5maCwgMCwgTkZTRF9NQVlfTk9QKTsKKwlpZiAobmZzZXJyKQogCQlSRVRVUk5fU1RBVFVTKG5mc2Vycik7CiAKIAlpZiAoYXJncC0+bWFzayAmIH4oTkZTX0FDTHxORlNfQUNMQ05UfE5GU19ERkFDTHxORlNfREZBQ0xDTlQpKQpAQCAtMTA3LDcgKzEwOCw3IEBACiAJZHByaW50aygibmZzZDogU0VUQUNMKDJhY2wpICAgJXNcbiIsIFNWQ0ZIX2ZtdCgmYXJncC0+ZmgpKTsKIAogCWZoID0gZmhfY29weSgmcmVzcC0+ZmgsICZhcmdwLT5maCk7Ci0JbmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCAmcmVzcC0+ZmgsIDAsIE1BWV9TQVRUUik7CisJbmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCAmcmVzcC0+ZmgsIDAsIE5GU0RfTUFZX1NBVFRSKTsKIAogCWlmICghbmZzZXJyKSB7CiAJCW5mc2VyciA9IG5mc2Vycm5vKCBuZnNkX3NldF9wb3NpeF9hY2woCkBAIC0xMzQsNyArMTM1LDcgQEAKIAlkcHJpbnRrKCJuZnNkOiBHRVRBVFRSICAlc1xuIiwgU1ZDRkhfZm10KCZhcmdwLT5maCkpOwogCiAJZmhfY29weSgmcmVzcC0+ZmgsICZhcmdwLT5maCk7Ci0JcmV0dXJuIGZoX3ZlcmlmeShycXN0cCwgJnJlc3AtPmZoLCAwLCBNQVlfTk9QKTsKKwlyZXR1cm4gZmhfdmVyaWZ5KHJxc3RwLCAmcmVzcC0+ZmgsIDAsIE5GU0RfTUFZX05PUCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczNhY2wuYyBiL2ZzL25mc2QvbmZzM2FjbC5jCmluZGV4IGI2NDdmMmYuLjk5ODFkYmIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzM2FjbC5jCisrKyBiL2ZzL25mc2QvbmZzM2FjbC5jCkBAIC0zNiw3ICszNiw4IEBACiAJX19iZTMyIG5mc2VyciA9IDA7CiAKIAlmaCA9IGZoX2NvcHkoJnJlc3AtPmZoLCAmYXJncC0+ZmgpOwotCWlmICgobmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCAmcmVzcC0+ZmgsIDAsIE1BWV9OT1ApKSkKKwluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZyZXNwLT5maCwgMCwgTkZTRF9NQVlfTk9QKTsKKwlpZiAobmZzZXJyKQogCQlSRVRVUk5fU1RBVFVTKG5mc2Vycik7CiAKIAlpZiAoYXJncC0+bWFzayAmIH4oTkZTX0FDTHxORlNfQUNMQ05UfE5GU19ERkFDTHxORlNfREZBQ0xDTlQpKQpAQCAtMTAxLDcgKzEwMiw3IEBACiAJX19iZTMyIG5mc2VyciA9IDA7CiAKIAlmaCA9IGZoX2NvcHkoJnJlc3AtPmZoLCAmYXJncC0+ZmgpOwotCW5mc2VyciA9IGZoX3ZlcmlmeShycXN0cCwgJnJlc3AtPmZoLCAwLCBNQVlfU0FUVFIpOworCW5mc2VyciA9IGZoX3ZlcmlmeShycXN0cCwgJnJlc3AtPmZoLCAwLCBORlNEX01BWV9TQVRUUik7CiAKIAlpZiAoIW5mc2VycikgewogCQluZnNlcnIgPSBuZnNlcnJubyggbmZzZF9zZXRfcG9zaXhfYWNsKApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMzcHJvYy5jIGIvZnMvbmZzZC9uZnMzcHJvYy5jCmluZGV4IGM3MjFhMWUuLjRkNjE3ZWEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzM3Byb2MuYworKysgYi9mcy9uZnNkL25mczNwcm9jLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJU1ZDRkhfZm10KCZhcmdwLT5maCkpOwogCiAJZmhfY29weSgmcmVzcC0+ZmgsICZhcmdwLT5maCk7Ci0JbmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCAmcmVzcC0+ZmgsIDAsIE1BWV9OT1ApOworCW5mc2VyciA9IGZoX3ZlcmlmeShycXN0cCwgJnJlc3AtPmZoLCAwLCBORlNEX01BWV9OT1ApOwogCWlmIChuZnNlcnIpCiAJCVJFVFVSTl9TVEFUVVMobmZzZXJyKTsKIApAQCAtMjQyLDcgKzI0Miw3IEBACiAJYXR0ciAgID0gJmFyZ3AtPmF0dHJzOwogCiAJLyogR2V0IHRoZSBkaXJlY3RvcnkgaW5vZGUgKi8KLQluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsIGRpcmZocCwgU19JRkRJUiwgTUFZX0NSRUFURSk7CisJbmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBkaXJmaHAsIFNfSUZESVIsIE5GU0RfTUFZX0NSRUFURSk7CiAJaWYgKG5mc2VycikKIAkJUkVUVVJOX1NUQVRVUyhuZnNlcnIpOwogCkBAIC01NTgsNyArNTU4LDcgQEAKIAlyZXNwLT5mX21heGZpbGVzaXplID0gfih1MzIpIDA7CiAJcmVzcC0+Zl9wcm9wZXJ0aWVzID0gTkZTM19GU0ZfREVGQVVMVDsKIAotCW5mc2VyciA9IGZoX3ZlcmlmeShycXN0cCwgJmFyZ3AtPmZoLCAwLCBNQVlfTk9QKTsKKwluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZhcmdwLT5maCwgMCwgTkZTRF9NQVlfTk9QKTsKIAogCS8qIENoZWNrIHNwZWNpYWwgZmVhdHVyZXMgb2YgdGhlIGZpbGUgc3lzdGVtLiBNYXkgcmVxdWVzdAogCSAqIGRpZmZlcmVudCByZWFkL3dyaXRlIHNpemVzIGZvciBmaWxlIHN5c3RlbXMga25vd24gdG8gaGF2ZQpAQCAtNTk3LDcgKzU5Nyw3IEBACiAJcmVzcC0+cF9jYXNlX2luc2Vuc2l0aXZlID0gMDsKIAlyZXNwLT5wX2Nhc2VfcHJlc2VydmluZyA9IDE7CiAKLQluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZhcmdwLT5maCwgMCwgTUFZX05PUCk7CisJbmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCAmYXJncC0+ZmgsIDAsIE5GU0RfTUFZX05PUCk7CiAKIAlpZiAobmZzZXJyID09IDApIHsKIAkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGFyZ3AtPmZoLmZoX2RlbnRyeS0+ZF9pbm9kZS0+aV9zYjsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHByb2MuYyBiL2ZzL25mc2QvbmZzNHByb2MuYwppbmRleCBjMzA5Yzg4Li5lZWYxNjI5IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnM0cHJvYy5jCkBAIC03MSwxMSArNzEsMTEgQEAKIAkJcmV0dXJuIG5mc2Vycl9pbnZhbDsKIAogCWlmIChvcGVuLT5vcF9zaGFyZV9hY2Nlc3MgJiBORlM0X1NIQVJFX0FDQ0VTU19SRUFEKQotCQlhY2Ntb2RlIHw9IE1BWV9SRUFEOworCQlhY2Ntb2RlIHw9IE5GU0RfTUFZX1JFQUQ7CiAJaWYgKG9wZW4tPm9wX3NoYXJlX2FjY2VzcyAmIE5GUzRfU0hBUkVfQUNDRVNTX1dSSVRFKQotCQlhY2Ntb2RlIHw9IChNQVlfV1JJVEUgfCBNQVlfVFJVTkMpOworCQlhY2Ntb2RlIHw9IChORlNEX01BWV9XUklURSB8IE5GU0RfTUFZX1RSVU5DKTsKIAlpZiAob3Blbi0+b3Bfc2hhcmVfZGVueSAmIE5GUzRfU0hBUkVfREVOWV9XUklURSkKLQkJYWNjbW9kZSB8PSBNQVlfV1JJVEU7CisJCWFjY21vZGUgfD0gTkZTRF9NQVlfV1JJVEU7CiAKIAlzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsIGN1cnJlbnRfZmgsIFNfSUZSRUcsIGFjY21vZGUpOwogCkBAIC0xMjYsNyArMTI2LDggQEAKIAkJCSZyZXNmaC5maF9oYW5kbGUuZmhfYmFzZSwgcmVzZmguZmhfaGFuZGxlLmZoX3NpemUpOwogCiAJaWYgKCFjcmVhdGVkKQotCQlzdGF0dXMgPSBkb19vcGVuX3Blcm1pc3Npb24ocnFzdHAsIGN1cnJlbnRfZmgsIG9wZW4sIE1BWV9OT1ApOworCQlzdGF0dXMgPSBkb19vcGVuX3Blcm1pc3Npb24ocnFzdHAsIGN1cnJlbnRfZmgsIG9wZW4sCisJCQkJCSAgICBORlNEX01BWV9OT1ApOwogCiBvdXQ6CiAJZmhfcHV0KCZyZXNmaCk7CkBAIC0xNTcsNyArMTU4LDggQEAKIAlvcGVuLT5vcF90cnVuY2F0ZSA9IChvcGVuLT5vcF9pYXR0ci5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYKIAkJKG9wZW4tPm9wX2lhdHRyLmlhX3NpemUgPT0gMCk7CiAKLQlzdGF0dXMgPSBkb19vcGVuX3Blcm1pc3Npb24ocnFzdHAsIGN1cnJlbnRfZmgsIG9wZW4sIE1BWV9PV05FUl9PVkVSUklERSk7CisJc3RhdHVzID0gZG9fb3Blbl9wZXJtaXNzaW9uKHJxc3RwLCBjdXJyZW50X2ZoLCBvcGVuLAorCQkJCSAgICBORlNEX01BWV9PV05FUl9PVkVSUklERSk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTg2LDcgKzE4OCw3IEBACiAJCWNzdGF0ZS0+Y3VycmVudF9maC5maF9oYW5kbGUuZmhfc2l6ZSA9IHJwLT5ycF9vcGVuZmhfbGVuOwogCQltZW1jcHkoJmNzdGF0ZS0+Y3VycmVudF9maC5maF9oYW5kbGUuZmhfYmFzZSwgcnAtPnJwX29wZW5maCwKIAkJCQlycC0+cnBfb3BlbmZoX2xlbik7Ci0JCXN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgMCwgTUFZX05PUCk7CisJCXN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgMCwgTkZTRF9NQVlfTk9QKTsKIAkJaWYgKHN0YXR1cykKIAkJCWRwcmludGsoIm5mc2Q0X29wZW46IHJlcGxheSBmYWlsZWQiCiAJCQkJIiByZXN0b3JpbmcgcHJldmlvdXMgZmlsZWhhbmRsZVxuIik7CkBAIC0yODUsNyArMjg3LDcgQEAKIAljc3RhdGUtPmN1cnJlbnRfZmguZmhfaGFuZGxlLmZoX3NpemUgPSBwdXRmaC0+cGZfZmhsZW47CiAJbWVtY3B5KCZjc3RhdGUtPmN1cnJlbnRfZmguZmhfaGFuZGxlLmZoX2Jhc2UsIHB1dGZoLT5wZl9maHZhbCwKIAkgICAgICAgcHV0ZmgtPnBmX2ZobGVuKTsKLQlyZXR1cm4gZmhfdmVyaWZ5KHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLCAwLCBNQVlfTk9QKTsKKwlyZXR1cm4gZmhfdmVyaWZ5KHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLCAwLCBORlNEX01BWV9OT1ApOwogfQogCiBzdGF0aWMgX19iZTMyCkBAIC0zNjMsNyArMzY1LDggQEAKIAogCWZoX2luaXQoJnJlc2ZoLCBORlM0X0ZIU0laRSk7CiAKLQlzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIFNfSUZESVIsIE1BWV9DUkVBVEUpOworCXN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgU19JRkRJUiwKKwkJCSAgIE5GU0RfTUFZX0NSRUFURSk7CiAJaWYgKHN0YXR1cyA9PSBuZnNlcnJfc3ltbGluaykKIAkJc3RhdHVzID0gbmZzZXJyX25vdGRpcjsKIAlpZiAoc3RhdHVzKQpAQCAtNDQ1LDcgKzQ0OCw3IEBACiB7CiAJX19iZTMyIHN0YXR1czsKIAotCXN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgMCwgTUFZX05PUCk7CisJc3RhdHVzID0gZmhfdmVyaWZ5KHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLCAwLCBORlNEX01BWV9OT1ApOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKQEAgLTczMCw3ICs3MzMsNyBAQAogCWludCBjb3VudDsKIAlfX2JlMzIgc3RhdHVzOwogCi0Jc3RhdHVzID0gZmhfdmVyaWZ5KHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLCAwLCBNQVlfTk9QKTsKKwlzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIDAsIE5GU0RfTUFZX05PUCk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIApAQCAtODQzLDEwICs4NDYsMTMgQEAKICNkZWZpbmUgQUxMT1dFRF9XSVRIT1VUX0ZIIDEKIC8qIEdFVEFUVFIgYW5kIG9wcyBub3QgbGlzdGVkIGFzIHJldHVybmluZyBORlM0RVJSX01PVkVEOiAqLwogI2RlZmluZSBBTExPV0VEX09OX0FCU0VOVF9GUyAyCisJY2hhciAqb3BfbmFtZTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmZzZDRfb3BlcmF0aW9uIG5mc2Q0X29wc1tdOwogCitzdGF0aWMgaW5saW5lIGNoYXIgKm5mc2Q0X29wX25hbWUodW5zaWduZWQgb3BudW0pOworCiAvKgogICogQ09NUE9VTkQgY2FsbC4KICAqLwpAQCAtODg4LDcgKzg5NCw5IEBACiAJd2hpbGUgKCFzdGF0dXMgJiYgcmVzcC0+b3BjbnQgPCBhcmdzLT5vcGNudCkgewogCQlvcCA9ICZhcmdzLT5vcHNbcmVzcC0+b3BjbnQrK107CiAKLQkJZHByaW50aygibmZzdjQgY29tcG91bmQgb3AgIyVkOiAlZFxuIiwgcmVzcC0+b3BjbnQsIG9wLT5vcG51bSk7CisJCWRwcmludGsoIm5mc3Y0IGNvbXBvdW5kIG9wICMlZC8lZDogJWQgKCVzKVxuIiwKKwkJCXJlc3AtPm9wY250LCBhcmdzLT5vcGNudCwgb3AtPm9wbnVtLAorCQkJbmZzZDRfb3BfbmFtZShvcC0+b3BudW0pKTsKIAogCQkvKgogCQkgKiBUaGUgWERSIGRlY29kZSByb3V0aW5lcyBtYXkgaGF2ZSBwcmUtc2V0IG9wLT5zdGF0dXM7CkBAIC05NTIsMTI2ICs5NjAsMTcwIEBACiBvdXQ6CiAJbmZzZDRfcmVsZWFzZV9jb21wb3VuZGFyZ3MoYXJncyk7CiAJY3N0YXRlX2ZyZWUoY3N0YXRlKTsKKwlkcHJpbnRrKCJuZnN2NCBjb21wb3VuZCByZXR1cm5lZCAlZFxuIiwgbnRvaGwoc3RhdHVzKSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIHN0cnVjdCBuZnNkNF9vcGVyYXRpb24gbmZzZDRfb3BzW09QX1JFTEVBU0VfTE9DS09XTkVSKzFdID0gewogCVtPUF9BQ0NFU1NdID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfYWNjZXNzLAorCQkub3BfbmFtZSA9ICJPUF9BQ0NFU1MiLAogCX0sCiAJW09QX0NMT1NFXSA9IHsKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X2Nsb3NlLAorCQkub3BfbmFtZSA9ICJPUF9DTE9TRSIsCiAJfSwKIAlbT1BfQ09NTUlUXSA9IHsKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X2NvbW1pdCwKKwkJLm9wX25hbWUgPSAiT1BfQ09NTUlUIiwKIAl9LAogCVtPUF9DUkVBVEVdID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfY3JlYXRlLAorCQkub3BfbmFtZSA9ICJPUF9DUkVBVEUiLAogCX0sCiAJW09QX0RFTEVHUkVUVVJOXSA9IHsKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X2RlbGVncmV0dXJuLAorCQkub3BfbmFtZSA9ICJPUF9ERUxFR1JFVFVSTiIsCiAJfSwKIAlbT1BfR0VUQVRUUl0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9nZXRhdHRyLAogCQkub3BfZmxhZ3MgPSBBTExPV0VEX09OX0FCU0VOVF9GUywKKwkJLm9wX25hbWUgPSAiT1BfR0VUQVRUUiIsCiAJfSwKIAlbT1BfR0VURkhdID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfZ2V0ZmgsCisJCS5vcF9uYW1lID0gIk9QX0dFVEZIIiwKIAl9LAogCVtPUF9MSU5LXSA9IHsKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X2xpbmssCisJCS5vcF9uYW1lID0gIk9QX0xJTksiLAogCX0sCiAJW09QX0xPQ0tdID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfbG9jaywKKwkJLm9wX25hbWUgPSAiT1BfTE9DSyIsCiAJfSwKIAlbT1BfTE9DS1RdID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfbG9ja3QsCisJCS5vcF9uYW1lID0gIk9QX0xPQ0tUIiwKIAl9LAogCVtPUF9MT0NLVV0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9sb2NrdSwKKwkJLm9wX25hbWUgPSAiT1BfTE9DS1UiLAogCX0sCiAJW09QX0xPT0tVUF0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9sb29rdXAsCisJCS5vcF9uYW1lID0gIk9QX0xPT0tVUCIsCiAJfSwKIAlbT1BfTE9PS1VQUF0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9sb29rdXBwLAorCQkub3BfbmFtZSA9ICJPUF9MT09LVVBQIiwKIAl9LAogCVtPUF9OVkVSSUZZXSA9IHsKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X252ZXJpZnksCisJCS5vcF9uYW1lID0gIk9QX05WRVJJRlkiLAogCX0sCiAJW09QX09QRU5dID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfb3BlbiwKKwkJLm9wX25hbWUgPSAiT1BfT1BFTiIsCiAJfSwKIAlbT1BfT1BFTl9DT05GSVJNXSA9IHsKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X29wZW5fY29uZmlybSwKKwkJLm9wX25hbWUgPSAiT1BfT1BFTl9DT05GSVJNIiwKIAl9LAogCVtPUF9PUEVOX0RPV05HUkFERV0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9vcGVuX2Rvd25ncmFkZSwKKwkJLm9wX25hbWUgPSAiT1BfT1BFTl9ET1dOR1JBREUiLAogCX0sCiAJW09QX1BVVEZIXSA9IHsKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X3B1dGZoLAogCQkub3BfZmxhZ3MgPSBBTExPV0VEX1dJVEhPVVRfRkggfCBBTExPV0VEX09OX0FCU0VOVF9GUywKKwkJLm9wX25hbWUgPSAiT1BfUFVURkgiLAogCX0sCiAJW09QX1BVVFBVQkZIXSA9IHsKLQkJLyogdW5zdXBwb3J0ZWQ7IGp1c3QgZm9yIGZ1dHVyZSByZWZlcmVuY2U6ICovCisJCS8qIHVuc3VwcG9ydGVkLCBqdXN0IGZvciBmdXR1cmUgcmVmZXJlbmNlOiAqLwogCQkub3BfZmxhZ3MgPSBBTExPV0VEX1dJVEhPVVRfRkggfCBBTExPV0VEX09OX0FCU0VOVF9GUywKKwkJLm9wX25hbWUgPSAiT1BfUFVUUFVCRkgiLAogCX0sCiAJW09QX1BVVFJPT1RGSF0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9wdXRyb290ZmgsCiAJCS5vcF9mbGFncyA9IEFMTE9XRURfV0lUSE9VVF9GSCB8IEFMTE9XRURfT05fQUJTRU5UX0ZTLAorCQkub3BfbmFtZSA9ICJPUF9QVVRST09URkgiLAogCX0sCiAJW09QX1JFQURdID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfcmVhZCwKKwkJLm9wX25hbWUgPSAiT1BfUkVBRCIsCiAJfSwKIAlbT1BfUkVBRERJUl0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9yZWFkZGlyLAorCQkub3BfbmFtZSA9ICJPUF9SRUFERElSIiwKIAl9LAogCVtPUF9SRUFETElOS10gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9yZWFkbGluaywKKwkJLm9wX25hbWUgPSAiT1BfUkVBRExJTksiLAogCX0sCiAJW09QX1JFTU9WRV0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9yZW1vdmUsCisJCS5vcF9uYW1lID0gIk9QX1JFTU9WRSIsCiAJfSwKIAlbT1BfUkVOQU1FXSA9IHsKKwkJLm9wX25hbWUgPSAiT1BfUkVOQU1FIiwKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X3JlbmFtZSwKIAl9LAogCVtPUF9SRU5FV10gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9yZW5ldywKIAkJLm9wX2ZsYWdzID0gQUxMT1dFRF9XSVRIT1VUX0ZIIHwgQUxMT1dFRF9PTl9BQlNFTlRfRlMsCisJCS5vcF9uYW1lID0gIk9QX1JFTkVXIiwKIAl9LAogCVtPUF9SRVNUT1JFRkhdID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfcmVzdG9yZWZoLAogCQkub3BfZmxhZ3MgPSBBTExPV0VEX1dJVEhPVVRfRkggfCBBTExPV0VEX09OX0FCU0VOVF9GUywKKwkJLm9wX25hbWUgPSAiT1BfUkVTVE9SRUZIIiwKIAl9LAogCVtPUF9TQVZFRkhdID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfc2F2ZWZoLAorCQkub3BfbmFtZSA9ICJPUF9TQVZFRkgiLAogCX0sCiAJW09QX1NFQ0lORk9dID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfc2VjaW5mbywKKwkJLm9wX25hbWUgPSAiT1BfU0VDSU5GTyIsCiAJfSwKIAlbT1BfU0VUQVRUUl0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9zZXRhdHRyLAorCQkub3BfbmFtZSA9ICJPUF9TRVRBVFRSIiwKIAl9LAogCVtPUF9TRVRDTElFTlRJRF0gPSB7CiAJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9zZXRjbGllbnRpZCwKIAkJLm9wX2ZsYWdzID0gQUxMT1dFRF9XSVRIT1VUX0ZIIHwgQUxMT1dFRF9PTl9BQlNFTlRfRlMsCisJCS5vcF9uYW1lID0gIk9QX1NFVENMSUVOVElEIiwKIAl9LAogCVtPUF9TRVRDTElFTlRJRF9DT05GSVJNXSA9IHsKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X3NldGNsaWVudGlkX2NvbmZpcm0sCiAJCS5vcF9mbGFncyA9IEFMTE9XRURfV0lUSE9VVF9GSCB8IEFMTE9XRURfT05fQUJTRU5UX0ZTLAorCQkub3BfbmFtZSA9ICJPUF9TRVRDTElFTlRJRF9DT05GSVJNIiwKIAl9LAogCVtPUF9WRVJJRlldID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfdmVyaWZ5LAorCQkub3BfbmFtZSA9ICJPUF9WRVJJRlkiLAogCX0sCiAJW09QX1dSSVRFXSA9IHsKIAkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X3dyaXRlLAorCQkub3BfbmFtZSA9ICJPUF9XUklURSIsCiAJfSwKIAlbT1BfUkVMRUFTRV9MT0NLT1dORVJdID0gewogCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfcmVsZWFzZV9sb2Nrb3duZXIsCiAJCS5vcF9mbGFncyA9IEFMTE9XRURfV0lUSE9VVF9GSCB8IEFMTE9XRURfT05fQUJTRU5UX0ZTLAorCQkub3BfbmFtZSA9ICJPUF9SRUxFQVNFX0xPQ0tPV05FUiIsCiAJfSwKIH07CiAKK3N0YXRpYyBpbmxpbmUgY2hhciAqCituZnNkNF9vcF9uYW1lKHVuc2lnbmVkIG9wbnVtKQoreworCWlmIChvcG51bSA8IEFSUkFZX1NJWkUobmZzZDRfb3BzKSkKKwkJcmV0dXJuIG5mc2Q0X29wc1tvcG51bV0ub3BfbmFtZTsKKwlyZXR1cm4gInVua25vd25fb3BlcmF0aW9uIjsKK30KKwogI2RlZmluZSBuZnM0c3ZjX2RlY29kZV92b2lkYXJncwkJTlVMTAogI2RlZmluZSBuZnM0c3ZjX3JlbGVhc2Vfdm9pZAkJTlVMTAogI2RlZmluZSBuZnNkNF92b2lkcmVzCQkJbmZzZDRfdm9pZGFyZ3MKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IDg3OTliODcuLjE1NzhkN2EgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtMTE3Myw2ICsxMTczLDI0IEBACiAJcmV0dXJuIHggPD0gTkZTNF9TSEFSRV9ERU5ZX0JPVEg7CiB9CiAKKy8qCisgKiBXZSBzdG9yZSB0aGUgTk9ORSwgUkVBRCwgV1JJVEUsIGFuZCBCT1RIIGJpdHMgc2VwYXJhdGVseSBpbiB0aGUKKyAqIHN0X3thY2Nlc3MsZGVueX1fYm1hcCBmaWVsZCBvZiB0aGUgc3RhdGVpZCwgaW4gb3JkZXIgdG8gdHJhY2sgbm90CisgKiBvbmx5IHdoYXQgc2hhcmUgYml0cyBhcmUgY3VycmVudGx5IGluIGZvcmNlLCBidXQgYWxzbyB3aGF0CisgKiBjb21iaW5hdGlvbnMgb2Ygc2hhcmUgYml0cyBwcmV2aW91cyBvcGVucyBoYXZlIHVzZWQuICBUaGlzIGFsbG93cyB1cworICogdG8gZW5mb3JjZSB0aGUgcmVjb21tZW5kYXRpb24gb2YgcmZjIDM1MzAgMTQuMi4xOSB0aGF0IHRoZSBzZXJ2ZXIKKyAqIHJldHVybiBhbiBlcnJvciBpZiB0aGUgY2xpZW50IGF0dGVtcHQgdG8gZG93bmdyYWRlIHRvIGEgY29tYmluYXRpb24KKyAqIG9mIHNoYXJlIGJpdHMgbm90IGV4cGxpY2FibGUgYnkgY2xvc2luZyBzb21lIG9mIGl0cyBwcmV2aW91cyBvcGVucy4KKyAqCisgKiBYWFg6IFRoaXMgZW5mb3JjZW1lbnQgaXMgYWN0dWFsbHkgaW5jb21wbGV0ZSwgc2luY2Ugd2UgZG9uJ3Qga2VlcAorICogdHJhY2sgb2YgYWNjZXNzL2RlbnkgYml0IGNvbWJpbmF0aW9uczsgc28sIGUuZy4sIHdlIGFsbG93OgorICoKKyAqCU9QRU4gYWxsb3cgcmVhZCwgZGVueSB3cml0ZQorICoJT1BFTiBhbGxvdyBib3RoLCBkZW55IG5vbmUKKyAqCURPV05HUkFERSBhbGxvdyByZWFkLCBkZW55IG5vbmUKKyAqCisgKiB3aGljaCB3ZSBzaG91bGQgcmVqZWN0LgorICovCiBzdGF0aWMgdm9pZAogc2V0X2FjY2Vzcyh1bnNpZ25lZCBpbnQgKmFjY2VzcywgdW5zaWduZWQgbG9uZyBibWFwKSB7CiAJaW50IGk7CkBAIC0xNTcwLDYgKzE1ODgsMTAgQEAKIAkJaW50IGVyciA9IGdldF93cml0ZV9hY2Nlc3MoaW5vZGUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIG5mc2Vycm5vKGVycik7CisJCWVyciA9IG1udF93YW50X3dyaXRlKGN1cl9maC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gbmZzZXJybm8oZXJyKTsKKwkJZmlsZV90YWtlX3dyaXRlKGZpbHApOwogCX0KIAlzdGF0dXMgPSBuZnNkNF90cnVuY2F0ZShycXN0cCwgY3VyX2ZoLCBvcGVuKTsKIAlpZiAoc3RhdHVzKSB7CkBAIC0xNTc5LDggKzE2MDEsOCBAQAogCX0KIAkvKiByZW1lbWJlciB0aGUgb3BlbiAqLwogCWZpbHAtPmZfbW9kZSB8PSBvcGVuLT5vcF9zaGFyZV9hY2Nlc3M7Ci0Jc2V0X2JpdChvcGVuLT5vcF9zaGFyZV9hY2Nlc3MsICZzdHAtPnN0X2FjY2Vzc19ibWFwKTsKLQlzZXRfYml0KG9wZW4tPm9wX3NoYXJlX2RlbnksICZzdHAtPnN0X2RlbnlfYm1hcCk7CisJX19zZXRfYml0KG9wZW4tPm9wX3NoYXJlX2FjY2VzcywgJnN0cC0+c3RfYWNjZXNzX2JtYXApOworCV9fc2V0X2JpdChvcGVuLT5vcF9zaGFyZV9kZW55LCAmc3RwLT5zdF9kZW55X2JtYXApOwogCiAJcmV0dXJuIG5mc19vazsKIH0KQEAgLTE3MjIsOSArMTc0NCw5IEBACiAJCS8qIFN0YXRlaWQgd2FzIG5vdCBmb3VuZCwgdGhpcyBpcyBhIG5ldyBPUEVOICovCiAJCWludCBmbGFncyA9IDA7CiAJCWlmIChvcGVuLT5vcF9zaGFyZV9hY2Nlc3MgJiBORlM0X1NIQVJFX0FDQ0VTU19SRUFEKQotCQkJZmxhZ3MgfD0gTUFZX1JFQUQ7CisJCQlmbGFncyB8PSBORlNEX01BWV9SRUFEOwogCQlpZiAob3Blbi0+b3Bfc2hhcmVfYWNjZXNzICYgTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUpCi0JCQlmbGFncyB8PSBNQVlfV1JJVEU7CisJCQlmbGFncyB8PSBORlNEX01BWV9XUklURTsKIAkJc3RhdHVzID0gbmZzNF9uZXdfb3BlbihycXN0cCwgJnN0cCwgZHAsIGN1cnJlbnRfZmgsIGZsYWdzKTsKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gb3V0OwpAQCAtMjYxMCw3ICsyNjMyLDcgQEAKIAkJIHJldHVybiBuZnNlcnJfaW52YWw7CiAKIAlpZiAoKHN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwKLQkJCQlTX0lGUkVHLCBNQVlfTE9DSykpKSB7CisJCQkJU19JRlJFRywgTkZTRF9NQVlfTE9DSykpKSB7CiAJCWRwcmludGsoIk5GU0Q6IG5mc2Q0X2xvY2s6IHBlcm1pc3Npb24gZGVuaWVkIVxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQpAQCAtMzI0OSwxMiArMzI3MSwxNCBAQAogCW5mczRfdW5sb2NrX3N0YXRlKCk7CiB9CiAKKy8qCisgKiB1c2VyX3JlY292ZXJ5X2Rpcm5hbWUgaXMgcHJvdGVjdGVkIGJ5IHRoZSBuZnNkX211dGV4IHNpbmNlIGl0J3Mgb25seQorICogYWNjZXNzZWQgd2hlbiBuZnNkIGlzIHN0YXJ0aW5nLgorICovCiBzdGF0aWMgdm9pZAogbmZzNF9zZXRfcmVjZGlyKGNoYXIgKnJlY2RpcikKIHsKLQluZnM0X2xvY2tfc3RhdGUoKTsKIAlzdHJjcHkodXNlcl9yZWNvdmVyeV9kaXJuYW1lLCByZWNkaXIpOwotCW5mczRfdW5sb2NrX3N0YXRlKCk7CiB9CiAKIC8qCkBAIC0zMjc4LDYgKzMzMDIsMTIgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitjaGFyICoKK25mczRfcmVjb3ZlcnlkaXIodm9pZCkKK3sKKwlyZXR1cm4gdXNlcl9yZWNvdmVyeV9kaXJuYW1lOworfQorCiAvKgogICogQ2FsbGVkIHdoZW4gbGVhc2V0aW1lIGlzIGNoYW5nZWQuCiAgKgpAQCAtMzI4NiwxMSArMzMxNiwxMiBAQAogICogd2Ugc3RhcnQgdG8gcmVnaXN0ZXIgYW55IGNoYW5nZXMgaW4gbGVhc2UgdGltZS4gIElmIHRoZSBhZG1pbmlzdHJhdG9yCiAgKiByZWFsbHkgd2FudHMgdG8gY2hhbmdlIHRoZSBsZWFzZSB0aW1lICpub3cqLCB0aGV5IGNhbiBnbyBhaGVhZCBhbmQgYnJpbmcKICAqIG5mc2QgZG93biBhbmQgdGhlbiBiYWNrIHVwIGFnYWluIGFmdGVyIGNoYW5naW5nIHRoZSBsZWFzZSB0aW1lLgorICoKKyAqIHVzZXJfbGVhc2VfdGltZSBpcyBwcm90ZWN0ZWQgYnkgbmZzZF9tdXRleCBzaW5jZSBpdCdzIG9ubHkgcmVhbGx5IGFjY2Vzc2VkCisgKiB3aGVuIG5mc2QgaXMgc3RhcnRpbmcKICAqLwogdm9pZAogbmZzNF9yZXNldF9sZWFzZSh0aW1lX3QgbGVhc2V0aW1lKQogewotCWxvY2tfa2VybmVsKCk7CiAJdXNlcl9sZWFzZV90aW1lID0gbGVhc2V0aW1lOwotCXVubG9ja19rZXJuZWwoKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHhkci5jIGIvZnMvbmZzZC9uZnM0eGRyLmMKaW5kZXggYzUxM2JiZC4uMTRiYTRkOSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0eGRyLmMKKysrIGIvZnMvbmZzZC9uZnM0eGRyLmMKQEAgLTk4NiwxMCArOTg2LDc0IEBACiB9CiAKIHN0YXRpYyBfX2JlMzIKK25mc2Q0X2RlY29kZV9ub29wKHN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3AsIHZvaWQgKnApCit7CisJcmV0dXJuIG5mc19vazsKK30KKworc3RhdGljIF9fYmUzMgorbmZzZDRfZGVjb2RlX25vdHN1cHAoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncCwgdm9pZCAqcCkKK3sKKwlyZXR1cm4gbmZzZXJyX29wbm90c3VwcDsKK30KKwordHlwZWRlZiBfX2JlMzIoKm5mc2Q0X2RlYykoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncCwgdm9pZCAqKTsKKworc3RhdGljIG5mc2Q0X2RlYyBuZnNkNF9kZWNfb3BzW10gPSB7CisJW09QX0FDQ0VTU10JCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfYWNjZXNzLAorCVtPUF9DTE9TRV0JCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfY2xvc2UsCisJW09QX0NPTU1JVF0JCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfY29tbWl0LAorCVtPUF9DUkVBVEVdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX2NyZWF0ZSwKKwlbT1BfREVMRUdQVVJHRV0JCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfbm90c3VwcCwKKwlbT1BfREVMRUdSRVRVUk5dCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfZGVsZWdyZXR1cm4sCisJW09QX0dFVEFUVFJdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX2dldGF0dHIsCisJW09QX0dFVEZIXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9ub29wLAorCVtPUF9MSU5LXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9saW5rLAorCVtPUF9MT0NLXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9sb2NrLAorCVtPUF9MT0NLVF0JCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfbG9ja3QsCisJW09QX0xPQ0tVXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9sb2NrdSwKKwlbT1BfTE9PS1VQXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9sb29rdXAsCisJW09QX0xPT0tVUFBdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX25vb3AsCisJW09QX05WRVJJRlldCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX3ZlcmlmeSwKKwlbT1BfT1BFTl0JCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfb3BlbiwKKwlbT1BfT1BFTkFUVFJdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX25vdHN1cHAsCisJW09QX09QRU5fQ09ORklSTV0JPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9vcGVuX2NvbmZpcm0sCisJW09QX09QRU5fRE9XTkdSQURFXQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX29wZW5fZG93bmdyYWRlLAorCVtPUF9QVVRGSF0JCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfcHV0ZmgsCisJW09QX1BVVFBVQkZIXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9ub3RzdXBwLAorCVtPUF9QVVRST09URkhdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX25vb3AsCisJW09QX1JFQURdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX3JlYWQsCisJW09QX1JFQURESVJdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX3JlYWRkaXIsCisJW09QX1JFQURMSU5LXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9ub29wLAorCVtPUF9SRU1PVkVdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX3JlbW92ZSwKKwlbT1BfUkVOQU1FXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9yZW5hbWUsCisJW09QX1JFTkVXXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9yZW5ldywKKwlbT1BfUkVTVE9SRUZIXQkJPSAobmZzZDRfZGVjKW5mc2Q0X2RlY29kZV9ub29wLAorCVtPUF9TQVZFRkhdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX25vb3AsCisJW09QX1NFQ0lORk9dCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX3NlY2luZm8sCisJW09QX1NFVEFUVFJdCQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX3NldGF0dHIsCisJW09QX1NFVENMSUVOVElEXQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX3NldGNsaWVudGlkLAorCVtPUF9TRVRDTElFTlRJRF9DT05GSVJNXSA9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX3NldGNsaWVudGlkX2NvbmZpcm0sCisJW09QX1ZFUklGWV0JCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfdmVyaWZ5LAorCVtPUF9XUklURV0JCT0gKG5mc2Q0X2RlYyluZnNkNF9kZWNvZGVfd3JpdGUsCisJW09QX1JFTEVBU0VfTE9DS09XTkVSXQk9IChuZnNkNF9kZWMpbmZzZDRfZGVjb2RlX3JlbGVhc2VfbG9ja293bmVyLAorfTsKKworc3RydWN0IG5mc2Q0X21pbm9ydmVyc2lvbl9vcHMgeworCW5mc2Q0X2RlYyAqZGVjb2RlcnM7CisJaW50IG5vcHM7Cit9OworCitzdGF0aWMgc3RydWN0IG5mc2Q0X21pbm9ydmVyc2lvbl9vcHMgbmZzZDRfbWlub3J2ZXJzaW9uW10gPSB7CisJWzBdID0geyBuZnNkNF9kZWNfb3BzLCBBUlJBWV9TSVpFKG5mc2Q0X2RlY19vcHMpIH0sCit9OworCitzdGF0aWMgX19iZTMyCiBuZnNkNF9kZWNvZGVfY29tcG91bmQoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncCkKIHsKIAlERUNPREVfSEVBRDsKIAlzdHJ1Y3QgbmZzZDRfb3AgKm9wOworCXN0cnVjdCBuZnNkNF9taW5vcnZlcnNpb25fb3BzICpvcHM7CiAJaW50IGk7CiAKIAkvKgpAQCAtMTAxOSw2ICsxMDgzLDEwIEBACiAJCX0KIAl9CiAKKwlpZiAoYXJncC0+bWlub3J2ZXJzaW9uID49IEFSUkFZX1NJWkUobmZzZDRfbWlub3J2ZXJzaW9uKSkKKwkJYXJncC0+b3BjbnQgPSAwOworCisJb3BzID0gJm5mc2Q0X21pbm9ydmVyc2lvblthcmdwLT5taW5vcnZlcnNpb25dOwogCWZvciAoaSA9IDA7IGkgPCBhcmdwLT5vcGNudDsgaSsrKSB7CiAJCW9wID0gJmFyZ3AtPm9wc1tpXTsKIAkJb3AtPnJlcGxheSA9IE5VTEw7CkBAIC0xMDU2LDEyMCArMTEyNCwxMSBAQAogCQl9CiAJCW9wLT5vcG51bSA9IG50b2hsKCphcmdwLT5wKyspOwogCi0JCXN3aXRjaCAob3AtPm9wbnVtKSB7Ci0JCWNhc2UgMjogLyogUmVzZXJ2ZWQgb3BlcmF0aW9uICovCi0JCQlvcC0+b3BudW0gPSBPUF9JTExFR0FMOwotCQkJaWYgKGFyZ3AtPm1pbm9ydmVyc2lvbiA9PSAwKQotCQkJCW9wLT5zdGF0dXMgPSBuZnNlcnJfb3BfaWxsZWdhbDsKLQkJCWVsc2UKLQkJCQlvcC0+c3RhdHVzID0gbmZzZXJyX21pbm9yX3ZlcnNfbWlzbWF0Y2g7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9BQ0NFU1M6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVjb2RlX2FjY2VzcyhhcmdwLCAmb3AtPnUuYWNjZXNzKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX0NMT1NFOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV9jbG9zZShhcmdwLCAmb3AtPnUuY2xvc2UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfQ09NTUlUOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV9jb21taXQoYXJncCwgJm9wLT51LmNvbW1pdCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9DUkVBVEU6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVjb2RlX2NyZWF0ZShhcmdwLCAmb3AtPnUuY3JlYXRlKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX0RFTEVHUkVUVVJOOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV9kZWxlZ3JldHVybihhcmdwLCAmb3AtPnUuZGVsZWdyZXR1cm4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfR0VUQVRUUjoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9kZWNvZGVfZ2V0YXR0cihhcmdwLCAmb3AtPnUuZ2V0YXR0cik7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9HRVRGSDoKLQkJCW9wLT5zdGF0dXMgPSBuZnNfb2s7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9MSU5LOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV9saW5rKGFyZ3AsICZvcC0+dS5saW5rKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX0xPQ0s6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVjb2RlX2xvY2soYXJncCwgJm9wLT51LmxvY2spOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfTE9DS1Q6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVjb2RlX2xvY2t0KGFyZ3AsICZvcC0+dS5sb2NrdCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9MT0NLVToKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9kZWNvZGVfbG9ja3UoYXJncCwgJm9wLT51LmxvY2t1KTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX0xPT0tVUDoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9kZWNvZGVfbG9va3VwKGFyZ3AsICZvcC0+dS5sb29rdXApOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfTE9PS1VQUDoKLQkJCW9wLT5zdGF0dXMgPSBuZnNfb2s7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9OVkVSSUZZOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV92ZXJpZnkoYXJncCwgJm9wLT51Lm52ZXJpZnkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfT1BFTjoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9kZWNvZGVfb3BlbihhcmdwLCAmb3AtPnUub3Blbik7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9PUEVOX0NPTkZJUk06Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVjb2RlX29wZW5fY29uZmlybShhcmdwLCAmb3AtPnUub3Blbl9jb25maXJtKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX09QRU5fRE9XTkdSQURFOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV9vcGVuX2Rvd25ncmFkZShhcmdwLCAmb3AtPnUub3Blbl9kb3duZ3JhZGUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfUFVURkg6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVjb2RlX3B1dGZoKGFyZ3AsICZvcC0+dS5wdXRmaCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9QVVRST09URkg6Ci0JCQlvcC0+c3RhdHVzID0gbmZzX29rOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfUkVBRDoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9kZWNvZGVfcmVhZChhcmdwLCAmb3AtPnUucmVhZCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9SRUFERElSOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV9yZWFkZGlyKGFyZ3AsICZvcC0+dS5yZWFkZGlyKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX1JFQURMSU5LOgotCQkJb3AtPnN0YXR1cyA9IG5mc19vazsKLQkJCWJyZWFrOwotCQljYXNlIE9QX1JFTU9WRToKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9kZWNvZGVfcmVtb3ZlKGFyZ3AsICZvcC0+dS5yZW1vdmUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfUkVOQU1FOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV9yZW5hbWUoYXJncCwgJm9wLT51LnJlbmFtZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9SRVNUT1JFRkg6Ci0JCQlvcC0+c3RhdHVzID0gbmZzX29rOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfUkVORVc6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVjb2RlX3JlbmV3KGFyZ3AsICZvcC0+dS5yZW5ldyk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9TQVZFRkg6Ci0JCQlvcC0+c3RhdHVzID0gbmZzX29rOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfU0VDSU5GTzoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9kZWNvZGVfc2VjaW5mbyhhcmdwLCAmb3AtPnUuc2VjaW5mbyk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9TRVRBVFRSOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV9zZXRhdHRyKGFyZ3AsICZvcC0+dS5zZXRhdHRyKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX1NFVENMSUVOVElEOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV9zZXRjbGllbnRpZChhcmdwLCAmb3AtPnUuc2V0Y2xpZW50aWQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfU0VUQ0xJRU5USURfQ09ORklSTToKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9kZWNvZGVfc2V0Y2xpZW50aWRfY29uZmlybShhcmdwLCAmb3AtPnUuc2V0Y2xpZW50aWRfY29uZmlybSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9WRVJJRlk6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVjb2RlX3ZlcmlmeShhcmdwLCAmb3AtPnUudmVyaWZ5KTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX1dSSVRFOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2RlY29kZV93cml0ZShhcmdwLCAmb3AtPnUud3JpdGUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfUkVMRUFTRV9MT0NLT1dORVI6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVjb2RlX3JlbGVhc2VfbG9ja293bmVyKGFyZ3AsICZvcC0+dS5yZWxlYXNlX2xvY2tvd25lcik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKKwkJaWYgKG9wLT5vcG51bSA+PSBPUF9BQ0NFU1MgJiYgb3AtPm9wbnVtIDwgb3BzLT5ub3BzKQorCQkJb3AtPnN0YXR1cyA9IG9wcy0+ZGVjb2RlcnNbb3AtPm9wbnVtXShhcmdwLCAmb3AtPnUpOworCQllbHNlIHsKIAkJCW9wLT5vcG51bSA9IE9QX0lMTEVHQUw7CiAJCQlvcC0+c3RhdHVzID0gbmZzZXJyX29wX2lsbGVnYWw7Ci0JCQlicmVhazsKIAkJfQogCiAJCWlmIChvcC0+c3RhdHVzKSB7CkBAIC0xMjAxLDExICsxMTYwLDExIEBACiAJKnArKyA9IGh0b25sKCh1MzIpKChuKSA+PiAzMikpOwkJCQlcCiAJKnArKyA9IGh0b25sKCh1MzIpKG4pKTsJCQkJCVwKIH0gd2hpbGUgKDApCi0jZGVmaW5lIFdSSVRFTUVNKHB0cixuYnl0ZXMpICAgICBkbyB7CQkJCVwKKyNkZWZpbmUgV1JJVEVNRU0ocHRyLG5ieXRlcykgICAgIGRvIHsgaWYgKG5ieXRlcyA+IDApIHsJCVwKIAkqKHAgKyBYRFJfUVVBRExFTihuYnl0ZXMpIC0xKSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIFwKIAltZW1jcHkocCwgcHRyLCBuYnl0ZXMpOwkJCQkJXAogCXAgKz0gWERSX1FVQURMRU4obmJ5dGVzKTsJCQkJXAotfSB3aGlsZSAoMCkKK319IHdoaWxlICgwKQogI2RlZmluZSBXUklURUNJTkZPKGMpCQlkbyB7CQkJCVwKIAkqcCsrID0gaHRvbmwoYy5hdG9taWMpOwkJCQkJXAogCSpwKysgPSBodG9ubChjLmJlZm9yZV9jdGltZV9zZWMpOwkJCQlcCkBAIC0xOTkxLDcgKzE5NTAsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIF9fYmUzMgogbmZzZDRfZW5jb2RlX2FjY2VzcyhzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsIHN0cnVjdCBuZnNkNF9hY2Nlc3MgKmFjY2VzcykKIHsKIAlFTkNPREVfSEVBRDsKQEAgLTIwMDIsOSArMTk2MSwxMCBAQAogCQlXUklURTMyKGFjY2Vzcy0+YWNfcmVzcF9hY2Nlc3MpOwogCQlBREpVU1RfQVJHUygpOwogCX0KKwlyZXR1cm4gbmZzZXJyOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIF9fYmUzMgogbmZzZDRfZW5jb2RlX2Nsb3NlKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgX19iZTMyIG5mc2Vyciwgc3RydWN0IG5mc2Q0X2Nsb3NlICpjbG9zZSkKIHsKIAlFTkNPREVfU0VRSURfT1BfSEVBRDsKQEAgLTIwMTYsMTAgKzE5NzYsMTEgQEAKIAkJQURKVVNUX0FSR1MoKTsKIAl9CiAJRU5DT0RFX1NFUUlEX09QX1RBSUwoY2xvc2UtPmNsX3N0YXRlb3duZXIpOworCXJldHVybiBuZnNlcnI7CiB9CiAKIAotc3RhdGljIHZvaWQKK3N0YXRpYyBfX2JlMzIKIG5mc2Q0X2VuY29kZV9jb21taXQoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBfX2JlMzIgbmZzZXJyLCBzdHJ1Y3QgbmZzZDRfY29tbWl0ICpjb21taXQpCiB7CiAJRU5DT0RFX0hFQUQ7CkBAIC0yMDI5LDkgKzE5OTAsMTAgQEAKIAkJV1JJVEVNRU0oY29tbWl0LT5jb192ZXJmLmRhdGEsIDgpOwogCQlBREpVU1RfQVJHUygpOwogCX0KKwlyZXR1cm4gbmZzZXJyOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIF9fYmUzMgogbmZzZDRfZW5jb2RlX2NyZWF0ZShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsIHN0cnVjdCBuZnNkNF9jcmVhdGUgKmNyZWF0ZSkKIHsKIAlFTkNPREVfSEVBRDsKQEAgLTIwNDQsNiArMjAwNiw3IEBACiAJCVdSSVRFMzIoY3JlYXRlLT5jcl9ibXZhbFsxXSk7CiAJCUFESlVTVF9BUkdTKCk7CiAJfQorCXJldHVybiBuZnNlcnI7CiB9CiAKIHN0YXRpYyBfX2JlMzIKQEAgLTIwNjQsOSArMjAyNywxMCBAQAogCXJldHVybiBuZnNlcnI7CiB9CiAKLXN0YXRpYyB2b2lkCi1uZnNkNF9lbmNvZGVfZ2V0Zmgoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBfX2JlMzIgbmZzZXJyLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHApCitzdGF0aWMgX19iZTMyCituZnNkNF9lbmNvZGVfZ2V0Zmgoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBfX2JlMzIgbmZzZXJyLCBzdHJ1Y3Qgc3ZjX2ZoICoqZmhwcCkKIHsKKwlzdHJ1Y3Qgc3ZjX2ZoICpmaHAgPSAqZmhwcDsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCUVOQ09ERV9IRUFEOwogCkBAIC0yMDc3LDYgKzIwNDEsNyBAQAogCQlXUklURU1FTSgmZmhwLT5maF9oYW5kbGUuZmhfYmFzZSwgbGVuKTsKIAkJQURKVVNUX0FSR1MoKTsKIAl9CisJcmV0dXJuIG5mc2VycjsKIH0KIAogLyoKQEAgLTIxMDQsNyArMjA2OSw3IEBACiAJQURKVVNUX0FSR1MoKTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBfX2JlMzIKIG5mc2Q0X2VuY29kZV9sb2NrKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgX19iZTMyIG5mc2Vyciwgc3RydWN0IG5mc2Q0X2xvY2sgKmxvY2spCiB7CiAJRU5DT0RFX1NFUUlEX09QX0hFQUQ7CkBAIC0yMTE4LDE2ICsyMDgzLDE4IEBACiAJCW5mc2Q0X2VuY29kZV9sb2NrX2RlbmllZChyZXNwLCAmbG9jay0+bGtfZGVuaWVkKTsKIAogCUVOQ09ERV9TRVFJRF9PUF9UQUlMKGxvY2stPmxrX3JlcGxheV9vd25lcik7CisJcmV0dXJuIG5mc2VycjsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBfX2JlMzIKIG5mc2Q0X2VuY29kZV9sb2NrdChzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsIHN0cnVjdCBuZnNkNF9sb2NrdCAqbG9ja3QpCiB7CiAJaWYgKG5mc2VyciA9PSBuZnNlcnJfZGVuaWVkKQogCQluZnNkNF9lbmNvZGVfbG9ja19kZW5pZWQocmVzcCwgJmxvY2t0LT5sdF9kZW5pZWQpOworCXJldHVybiBuZnNlcnI7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgX19iZTMyCiBuZnNkNF9lbmNvZGVfbG9ja3Uoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBfX2JlMzIgbmZzZXJyLCBzdHJ1Y3QgbmZzZDRfbG9ja3UgKmxvY2t1KQogewogCUVOQ09ERV9TRVFJRF9PUF9IRUFEOwpAQCAtMjE0MCwxMCArMjEwNywxMSBAQAogCX0KIAkJCQkgICAgICAgIAogCUVOQ09ERV9TRVFJRF9PUF9UQUlMKGxvY2t1LT5sdV9zdGF0ZW93bmVyKTsKKwlyZXR1cm4gbmZzZXJyOwogfQogCiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgX19iZTMyCiBuZnNkNF9lbmNvZGVfbGluayhzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsIHN0cnVjdCBuZnNkNF9saW5rICpsaW5rKQogewogCUVOQ09ERV9IRUFEOwpAQCAtMjE1MywxMCArMjEyMSwxMSBAQAogCQlXUklURUNJTkZPKGxpbmstPmxpX2NpbmZvKTsKIAkJQURKVVNUX0FSR1MoKTsKIAl9CisJcmV0dXJuIG5mc2VycjsKIH0KIAogCi1zdGF0aWMgdm9pZAorc3RhdGljIF9fYmUzMgogbmZzZDRfZW5jb2RlX29wZW4oc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBfX2JlMzIgbmZzZXJyLCBzdHJ1Y3QgbmZzZDRfb3BlbiAqb3BlbikKIHsKIAlFTkNPREVfU0VRSURfT1BfSEVBRDsKQEAgLTIyMTksOSArMjE4OCwxMCBAQAogCS8qIFhYWCBzYXZlIGZpbGVoYW5kbGUgaGVyZSAqLwogb3V0OgogCUVOQ09ERV9TRVFJRF9PUF9UQUlMKG9wZW4tPm9wX3N0YXRlb3duZXIpOworCXJldHVybiBuZnNlcnI7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgX19iZTMyCiBuZnNkNF9lbmNvZGVfb3Blbl9jb25maXJtKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgX19iZTMyIG5mc2Vyciwgc3RydWN0IG5mc2Q0X29wZW5fY29uZmlybSAqb2MpCiB7CiAJRU5DT0RFX1NFUUlEX09QX0hFQUQ7CkBAIC0yMjM0LDkgKzIyMDQsMTAgQEAKIAl9CiAKIAlFTkNPREVfU0VRSURfT1BfVEFJTChvYy0+b2Nfc3RhdGVvd25lcik7CisJcmV0dXJuIG5mc2VycjsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBfX2JlMzIKIG5mc2Q0X2VuY29kZV9vcGVuX2Rvd25ncmFkZShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsIHN0cnVjdCBuZnNkNF9vcGVuX2Rvd25ncmFkZSAqb2QpCiB7CiAJRU5DT0RFX1NFUUlEX09QX0hFQUQ7CkBAIC0yMjQ5LDYgKzIyMjAsNyBAQAogCX0KIAogCUVOQ09ERV9TRVFJRF9PUF9UQUlMKG9kLT5vZF9zdGF0ZW93bmVyKTsKKwlyZXR1cm4gbmZzZXJyOwogfQogCiBzdGF0aWMgX19iZTMyCkBAIC0yNDQzLDcgKzI0MTUsNyBAQAogCXJldHVybiBuZnNlcnI7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgX19iZTMyCiBuZnNkNF9lbmNvZGVfcmVtb3ZlKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgX19iZTMyIG5mc2Vyciwgc3RydWN0IG5mc2Q0X3JlbW92ZSAqcmVtb3ZlKQogewogCUVOQ09ERV9IRUFEOwpAQCAtMjQ1Myw5ICsyNDI1LDEwIEBACiAJCVdSSVRFQ0lORk8ocmVtb3ZlLT5ybV9jaW5mbyk7CiAJCUFESlVTVF9BUkdTKCk7CiAJfQorCXJldHVybiBuZnNlcnI7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgX19iZTMyCiBuZnNkNF9lbmNvZGVfcmVuYW1lKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgX19iZTMyIG5mc2Vyciwgc3RydWN0IG5mc2Q0X3JlbmFtZSAqcmVuYW1lKQogewogCUVOQ09ERV9IRUFEOwpAQCAtMjQ2Niw5ICsyNDM5LDEwIEBACiAJCVdSSVRFQ0lORk8ocmVuYW1lLT5ybl90aW5mbyk7CiAJCUFESlVTVF9BUkdTKCk7CiAJfQorCXJldHVybiBuZnNlcnI7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgX19iZTMyCiBuZnNkNF9lbmNvZGVfc2VjaW5mbyhzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsCiAJCSAgICAgc3RydWN0IG5mc2Q0X3NlY2luZm8gKnNlY2luZm8pCiB7CkBAIC0yNTMyLDEzICsyNTA2LDE0IEBACiBvdXQ6CiAJaWYgKGV4cCkKIAkJZXhwX3B1dChleHApOworCXJldHVybiBuZnNlcnI7CiB9CiAKIC8qCiAgKiBUaGUgU0VUQVRUUiBlbmNvZGUgcm91dGluZSBpcyBzcGVjaWFsIC0tIGl0IGFsd2F5cyBlbmNvZGVzIGEgYml0bWFwLAogICogcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3Igc3RhdHVzLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIF9fYmUzMgogbmZzZDRfZW5jb2RlX3NldGF0dHIoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBfX2JlMzIgbmZzZXJyLCBzdHJ1Y3QgbmZzZDRfc2V0YXR0ciAqc2V0YXR0cikKIHsKIAlFTkNPREVfSEVBRDsKQEAgLTI1NTUsOSArMjUzMCwxMCBAQAogCQlXUklURTMyKHNldGF0dHItPnNhX2JtdmFsWzFdKTsKIAl9CiAJQURKVVNUX0FSR1MoKTsKKwlyZXR1cm4gbmZzZXJyOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIF9fYmUzMgogbmZzZDRfZW5jb2RlX3NldGNsaWVudGlkKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgX19iZTMyIG5mc2Vyciwgc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkICpzY2QpCiB7CiAJRU5DT0RFX0hFQUQ7CkBAIC0yNTc0LDkgKzI1NTAsMTAgQEAKIAkJV1JJVEUzMigwKTsKIAkJQURKVVNUX0FSR1MoKTsKIAl9CisJcmV0dXJuIG5mc2VycjsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBfX2JlMzIKIG5mc2Q0X2VuY29kZV93cml0ZShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsIHN0cnVjdCBuZnNkNF93cml0ZSAqd3JpdGUpCiB7CiAJRU5DT0RFX0hFQUQ7CkBAIC0yNTg4LDggKzI1NjUsNTYgQEAKIAkJV1JJVEVNRU0od3JpdGUtPndyX3ZlcmlmaWVyLmRhdGEsIDgpOwogCQlBREpVU1RfQVJHUygpOwogCX0KKwlyZXR1cm4gbmZzZXJyOwogfQogCitzdGF0aWMgX19iZTMyCituZnNkNF9lbmNvZGVfbm9vcChzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsIHZvaWQgKnApCit7CisJcmV0dXJuIG5mc2VycjsKK30KKwordHlwZWRlZiBfX2JlMzIoKiBuZnNkNF9lbmMpKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqLCBfX2JlMzIsIHZvaWQgKik7CisKK3N0YXRpYyBuZnNkNF9lbmMgbmZzZDRfZW5jX29wc1tdID0geworCVtPUF9BQ0NFU1NdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX2FjY2VzcywKKwlbT1BfQ0xPU0VdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX2Nsb3NlLAorCVtPUF9DT01NSVRdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX2NvbW1pdCwKKwlbT1BfQ1JFQVRFXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9jcmVhdGUsCisJW09QX0RFTEVHUFVSR0VdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX25vb3AsCisJW09QX0RFTEVHUkVUVVJOXQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX25vb3AsCisJW09QX0dFVEFUVFJdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX2dldGF0dHIsCisJW09QX0dFVEZIXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9nZXRmaCwKKwlbT1BfTElOS10JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbGluaywKKwlbT1BfTE9DS10JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbG9jaywKKwlbT1BfTE9DS1RdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX2xvY2t0LAorCVtPUF9MT0NLVV0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbG9ja3UsCisJW09QX0xPT0tVUF0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbm9vcCwKKwlbT1BfTE9PS1VQUF0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbm9vcCwKKwlbT1BfTlZFUklGWV0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbm9vcCwKKwlbT1BfT1BFTl0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfb3BlbiwKKwlbT1BfT1BFTl9DT05GSVJNXQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX29wZW5fY29uZmlybSwKKwlbT1BfT1BFTl9ET1dOR1JBREVdCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfb3Blbl9kb3duZ3JhZGUsCisJW09QX1BVVEZIXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9ub29wLAorCVtPUF9QVVRQVUJGSF0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbm9vcCwKKwlbT1BfUFVUUk9PVEZIXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9ub29wLAorCVtPUF9SRUFEXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9yZWFkLAorCVtPUF9SRUFERElSXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9yZWFkZGlyLAorCVtPUF9SRUFETElOS10JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfcmVhZGxpbmssCisJW09QX1JFTU9WRV0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfcmVtb3ZlLAorCVtPUF9SRU5BTUVdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX3JlbmFtZSwKKwlbT1BfUkVORVddCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX25vb3AsCisJW09QX1JFU1RPUkVGSF0JCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbm9vcCwKKwlbT1BfU0FWRUZIXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9ub29wLAorCVtPUF9TRUNJTkZPXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9zZWNpbmZvLAorCVtPUF9TRVRBVFRSXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9zZXRhdHRyLAorCVtPUF9TRVRDTElFTlRJRF0JPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9zZXRjbGllbnRpZCwKKwlbT1BfU0VUQ0xJRU5USURfQ09ORklSTV0gPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9ub29wLAorCVtPUF9WRVJJRlldCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX25vb3AsCisJW09QX1dSSVRFXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV93cml0ZSwKKwlbT1BfUkVMRUFTRV9MT0NLT1dORVJdCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfbm9vcCwKK307CisKIHZvaWQKIG5mc2Q0X2VuY29kZV9vcGVyYXRpb24oc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBzdHJ1Y3QgbmZzZDRfb3AgKm9wKQogewpAQCAtMjYwMSwxMDEgKzI2MjYsMTIgQEAKIAlzdGF0cCA9IHArKzsJLyogdG8gYmUgYmFja2ZpbGxlZCBhdCB0aGUgZW5kICovCiAJQURKVVNUX0FSR1MoKTsKIAotCXN3aXRjaCAob3AtPm9wbnVtKSB7Ci0JY2FzZSBPUF9BQ0NFU1M6Ci0JCW5mc2Q0X2VuY29kZV9hY2Nlc3MocmVzcCwgb3AtPnN0YXR1cywgJm9wLT51LmFjY2Vzcyk7Ci0JCWJyZWFrOwotCWNhc2UgT1BfQ0xPU0U6Ci0JCW5mc2Q0X2VuY29kZV9jbG9zZShyZXNwLCBvcC0+c3RhdHVzLCAmb3AtPnUuY2xvc2UpOwotCQlicmVhazsKLQljYXNlIE9QX0NPTU1JVDoKLQkJbmZzZDRfZW5jb2RlX2NvbW1pdChyZXNwLCBvcC0+c3RhdHVzLCAmb3AtPnUuY29tbWl0KTsKLQkJYnJlYWs7Ci0JY2FzZSBPUF9DUkVBVEU6Ci0JCW5mc2Q0X2VuY29kZV9jcmVhdGUocmVzcCwgb3AtPnN0YXR1cywgJm9wLT51LmNyZWF0ZSk7Ci0JCWJyZWFrOwotCWNhc2UgT1BfREVMRUdSRVRVUk46Ci0JCWJyZWFrOwotCWNhc2UgT1BfR0VUQVRUUjoKLQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2VuY29kZV9nZXRhdHRyKHJlc3AsIG9wLT5zdGF0dXMsICZvcC0+dS5nZXRhdHRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUF9HRVRGSDoKLQkJbmZzZDRfZW5jb2RlX2dldGZoKHJlc3AsIG9wLT5zdGF0dXMsIG9wLT51LmdldGZoKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUF9MSU5LOgotCQluZnNkNF9lbmNvZGVfbGluayhyZXNwLCBvcC0+c3RhdHVzLCAmb3AtPnUubGluayk7Ci0JCWJyZWFrOwotCWNhc2UgT1BfTE9DSzoKLQkJbmZzZDRfZW5jb2RlX2xvY2socmVzcCwgb3AtPnN0YXR1cywgJm9wLT51LmxvY2spOwotCQlicmVhazsKLQljYXNlIE9QX0xPQ0tUOgotCQluZnNkNF9lbmNvZGVfbG9ja3QocmVzcCwgb3AtPnN0YXR1cywgJm9wLT51LmxvY2t0KTsKLQkJYnJlYWs7Ci0JY2FzZSBPUF9MT0NLVToKLQkJbmZzZDRfZW5jb2RlX2xvY2t1KHJlc3AsIG9wLT5zdGF0dXMsICZvcC0+dS5sb2NrdSk7Ci0JCWJyZWFrOwotCWNhc2UgT1BfTE9PS1VQOgotCQlicmVhazsKLQljYXNlIE9QX0xPT0tVUFA6Ci0JCWJyZWFrOwotCWNhc2UgT1BfTlZFUklGWToKLQkJYnJlYWs7Ci0JY2FzZSBPUF9PUEVOOgotCQluZnNkNF9lbmNvZGVfb3BlbihyZXNwLCBvcC0+c3RhdHVzLCAmb3AtPnUub3Blbik7Ci0JCWJyZWFrOwotCWNhc2UgT1BfT1BFTl9DT05GSVJNOgotCQluZnNkNF9lbmNvZGVfb3Blbl9jb25maXJtKHJlc3AsIG9wLT5zdGF0dXMsICZvcC0+dS5vcGVuX2NvbmZpcm0pOwotCQlicmVhazsKLQljYXNlIE9QX09QRU5fRE9XTkdSQURFOgotCQluZnNkNF9lbmNvZGVfb3Blbl9kb3duZ3JhZGUocmVzcCwgb3AtPnN0YXR1cywgJm9wLT51Lm9wZW5fZG93bmdyYWRlKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUF9QVVRGSDoKLQkJYnJlYWs7Ci0JY2FzZSBPUF9QVVRST09URkg6Ci0JCWJyZWFrOwotCWNhc2UgT1BfUkVBRDoKLQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2VuY29kZV9yZWFkKHJlc3AsIG9wLT5zdGF0dXMsICZvcC0+dS5yZWFkKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUF9SRUFERElSOgotCQlvcC0+c3RhdHVzID0gbmZzZDRfZW5jb2RlX3JlYWRkaXIocmVzcCwgb3AtPnN0YXR1cywgJm9wLT51LnJlYWRkaXIpOwotCQlicmVhazsKLQljYXNlIE9QX1JFQURMSU5LOgotCQlvcC0+c3RhdHVzID0gbmZzZDRfZW5jb2RlX3JlYWRsaW5rKHJlc3AsIG9wLT5zdGF0dXMsICZvcC0+dS5yZWFkbGluayk7Ci0JCWJyZWFrOwotCWNhc2UgT1BfUkVNT1ZFOgotCQluZnNkNF9lbmNvZGVfcmVtb3ZlKHJlc3AsIG9wLT5zdGF0dXMsICZvcC0+dS5yZW1vdmUpOwotCQlicmVhazsKLQljYXNlIE9QX1JFTkFNRToKLQkJbmZzZDRfZW5jb2RlX3JlbmFtZShyZXNwLCBvcC0+c3RhdHVzLCAmb3AtPnUucmVuYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUF9SRU5FVzoKLQkJYnJlYWs7Ci0JY2FzZSBPUF9SRVNUT1JFRkg6Ci0JCWJyZWFrOwotCWNhc2UgT1BfU0FWRUZIOgotCQlicmVhazsKLQljYXNlIE9QX1NFQ0lORk86Ci0JCW5mc2Q0X2VuY29kZV9zZWNpbmZvKHJlc3AsIG9wLT5zdGF0dXMsICZvcC0+dS5zZWNpbmZvKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUF9TRVRBVFRSOgotCQluZnNkNF9lbmNvZGVfc2V0YXR0cihyZXNwLCBvcC0+c3RhdHVzLCAmb3AtPnUuc2V0YXR0cik7Ci0JCWJyZWFrOwotCWNhc2UgT1BfU0VUQ0xJRU5USUQ6Ci0JCW5mc2Q0X2VuY29kZV9zZXRjbGllbnRpZChyZXNwLCBvcC0+c3RhdHVzLCAmb3AtPnUuc2V0Y2xpZW50aWQpOwotCQlicmVhazsKLQljYXNlIE9QX1NFVENMSUVOVElEX0NPTkZJUk06Ci0JCWJyZWFrOwotCWNhc2UgT1BfVkVSSUZZOgotCQlicmVhazsKLQljYXNlIE9QX1dSSVRFOgotCQluZnNkNF9lbmNvZGVfd3JpdGUocmVzcCwgb3AtPnN0YXR1cywgJm9wLT51LndyaXRlKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUF9SRUxFQVNFX0xPQ0tPV05FUjoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCisJaWYgKG9wLT5vcG51bSA9PSBPUF9JTExFR0FMKQorCQlnb3RvIHN0YXR1czsKKwlCVUdfT04ob3AtPm9wbnVtIDwgMCB8fCBvcC0+b3BudW0gPj0gQVJSQVlfU0laRShuZnNkNF9lbmNfb3BzKSB8fAorCSAgICAgICAhbmZzZDRfZW5jX29wc1tvcC0+b3BudW1dKTsKKwlvcC0+c3RhdHVzID0gbmZzZDRfZW5jX29wc1tvcC0+b3BudW1dKHJlc3AsIG9wLT5zdGF0dXMsICZvcC0+dSk7CitzdGF0dXM6CiAJLyoKIAkgKiBOb3RlOiBXZSB3cml0ZSB0aGUgc3RhdHVzIGRpcmVjdGx5LCBpbnN0ZWFkIG9mIHVzaW5nIFdSSVRFMzIoKSwKIAkgKiBzaW5jZSBpdCBpcyBhbHJlYWR5IGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzY3RsLmMgYi9mcy9uZnNkL25mc2N0bC5jCmluZGV4IDVhYzAwYzQuLjE5NTVhMjcgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzY3RsLmMKKysrIGIvZnMvbmZzZC9uZnNjdGwuYwpAQCAtMzEwLDkgKzMxMCwxMiBAQAogCiBzdGF0aWMgc3NpemVfdCBmYWlsb3Zlcl91bmxvY2tfaXAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7Ci0JX19iZTMyIHNlcnZlcl9pcDsKLQljaGFyICpmb19wYXRoLCBjOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7CisJCS5zaW5fZmFtaWx5CT0gQUZfSU5FVCwKKwl9OwogCWludCBiMSwgYjIsIGIzLCBiNDsKKwljaGFyIGM7CisJY2hhciAqZm9fcGF0aDsKIAogCS8qIHNhbml0eSBjaGVjayAqLwogCWlmIChzaXplID09IDApCkBAIC0zMjYsMTEgKzMyOSwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGdldCBpcHY0IGFkZHJlc3MgKi8KLQlpZiAoc3NjYW5mKGZvX3BhdGgsICIldS4ldS4ldS4ldSVjIiwgJmIxLCAmYjIsICZiMywgJmI0LCAmYykgIT0gNCkKKwlpZiAoc3NjYW5mKGZvX3BhdGgsIE5JUFFVQURfRk1UICIlYyIsICZiMSwgJmIyLCAmYjMsICZiNCwgJmMpICE9IDQpCiAJCXJldHVybiAtRUlOVkFMOwotCXNlcnZlcl9pcCA9IGh0b25sKCgoKCgoYjE8PDgpfGIyKTw8OCl8YjMpPDw4KXxiNCk7CisJaWYgKGIxID4gMjU1IHx8IGIyID4gMjU1IHx8IGIzID4gMjU1IHx8IGI0ID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gaHRvbmwoKGIxIDw8IDI0KSB8IChiMiA8PCAxNikgfCAoYjMgPDwgOCkgfCBiNCk7CiAKLQlyZXR1cm4gbmxtc3ZjX3VubG9ja19hbGxfYnlfaXAoc2VydmVyX2lwKTsKKwlyZXR1cm4gbmxtc3ZjX3VubG9ja19hbGxfYnlfaXAoKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4pOwogfQogCiBzdGF0aWMgc3NpemVfdCBmYWlsb3Zlcl91bmxvY2tfZnMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCkBAIC00NTAsMjIgKzQ1NSwyNiBAQAogCWludCBpOwogCWludCBydjsKIAlpbnQgbGVuOwotICAgIAlpbnQgbnBvb2xzID0gbmZzZF9ucnBvb2xzKCk7CisJaW50IG5wb29sczsKIAlpbnQgKm50aHJlYWRzOwogCisJbXV0ZXhfbG9jaygmbmZzZF9tdXRleCk7CisJbnBvb2xzID0gbmZzZF9ucnBvb2xzKCk7CiAJaWYgKG5wb29scyA9PSAwKSB7CiAJCS8qCiAJCSAqIE5GUyBpcyBzaHV0IGRvd24uICBUaGUgYWRtaW4gY2FuIHN0YXJ0IGl0IGJ5CiAJCSAqIHdyaXRpbmcgdG8gdGhlIHRocmVhZHMgZmlsZSBidXQgTk9UIHRoZSBwb29sX3RocmVhZHMKIAkJICogZmlsZSwgc29ycnkuICBSZXBvcnQgemVybyB0aHJlYWRzLgogCQkgKi8KKwkJbXV0ZXhfdW5sb2NrKCZuZnNkX211dGV4KTsKIAkJc3RyY3B5KGJ1ZiwgIjBcbiIpOwogCQlyZXR1cm4gc3RybGVuKGJ1Zik7CiAJfQogCiAJbnRocmVhZHMgPSBrY2FsbG9jKG5wb29scywgc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCXJ2ID0gLUVOT01FTTsKIAlpZiAobnRocmVhZHMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWU7CiAKIAlpZiAoc2l6ZSA+IDApIHsKIAkJZm9yIChpID0gMDsgaSA8IG5wb29sczsgaSsrKSB7CkBAIC00OTYsMTQgKzUwNSwxNiBAQAogCQltZXNnICs9IGxlbjsKIAl9CiAKKwltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOwogCXJldHVybiAobWVzZy1idWYpOwogCiBvdXRfZnJlZToKIAlrZnJlZShudGhyZWFkcyk7CisJbXV0ZXhfdW5sb2NrKCZuZnNkX211dGV4KTsKIAlyZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHdyaXRlX3ZlcnNpb25zKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQorc3RhdGljIHNzaXplX3QgX193cml0ZV92ZXJzaW9ucyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAkvKgogCSAqIEZvcm1hdDoKQEAgLTU2NiwxNCArNTc3LDIzIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHNzaXplX3Qgd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgc3NpemVfdCB3cml0ZV92ZXJzaW9ucyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzc2l6ZV90IHJ2OworCisJbXV0ZXhfbG9jaygmbmZzZF9tdXRleCk7CisJcnYgPSBfX3dyaXRlX3ZlcnNpb25zKGZpbGUsIGJ1Ziwgc2l6ZSk7CisJbXV0ZXhfdW5sb2NrKCZuZnNkX211dGV4KTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJaWYgKHNpemUgPT0gMCkgewogCQlpbnQgbGVuID0gMDsKLQkJbG9ja19rZXJuZWwoKTsKKwogCQlpZiAobmZzZF9zZXJ2KQogCQkJbGVuID0gc3ZjX3hwcnRfbmFtZXMobmZzZF9zZXJ2LCBidWYsIDApOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiBsZW47CiAJfQogCS8qIEVpdGhlciBhIHNpbmdsZSAnZmQnIG51bWJlciBpcyB3cml0dGVuLCBpbiB3aGljaApAQCAtNjAzLDkgKzYyMyw3IEBACiAJCQkvKiBEZWNyZWFzZSB0aGUgY291bnQsIGJ1dCBkb24ndCBzaHV0ZG93biB0aGUKIAkJCSAqIHRoZSBzZXJ2aWNlCiAJCQkgKi8KLQkJCWxvY2tfa2VybmVsKCk7CiAJCQluZnNkX3NlcnYtPnN2X25ydGhyZWFkcy0tOwotCQkJdW5sb2NrX2tlcm5lbCgpOwogCQl9CiAJCXJldHVybiBlcnIgPCAwID8gZXJyIDogMDsKIAl9CkBAIC02MTQsMTAgKzYzMiw4IEBACiAJCWludCBsZW4gPSAwOwogCQlpZiAoIXRvY2xvc2UpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJbG9ja19rZXJuZWwoKTsKIAkJaWYgKG5mc2Rfc2VydikKIAkJCWxlbiA9IHN2Y19zb2NrX25hbWVzKGJ1ZiwgbmZzZF9zZXJ2LCB0b2Nsb3NlKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlpZiAobGVuID49IDApCiAJCQlsb2NrZF9kb3duKCk7CiAJCWtmcmVlKHRvY2xvc2UpOwpAQCAtNjU1LDcgKzY3MSw2IEBACiAJCWlmIChzc2NhbmYoJmJ1ZlsxXSwgIiUxNXMgJTRkIiwgdHJhbnNwb3J0LCAmcG9ydCkgPT0gMikgewogCQkJaWYgKHBvcnQgPT0gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWxvY2tfa2VybmVsKCk7CiAJCQlpZiAobmZzZF9zZXJ2KSB7CiAJCQkJeHBydCA9IHN2Y19maW5kX3hwcnQobmZzZF9zZXJ2LCB0cmFuc3BvcnQsCiAJCQkJCQkgICAgIEFGX1VOU1BFQywgcG9ydCk7CkBAIC02NjYsMTMgKzY4MSwyMyBAQAogCQkJCX0gZWxzZQogCQkJCQllcnIgPSAtRU5PVENPTk47CiAJCQl9Ci0JCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gZXJyIDwgMCA/IGVyciA6IDA7CiAJCX0KIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX3BvcnRzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNzaXplX3QgcnY7CisKKwltdXRleF9sb2NrKCZuZnNkX211dGV4KTsKKwlydiA9IF9fd3JpdGVfcG9ydHMoZmlsZSwgYnVmLCBzaXplKTsKKwltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOworCXJldHVybiBydjsKK30KKworCiBpbnQgbmZzZF9tYXhfYmxrc2l6ZTsKIAogc3RhdGljIHNzaXplX3Qgd3JpdGVfbWF4Ymxrc2l6ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKQEAgLTY5MSwxMyArNzE2LDEzIEBACiAJCWlmIChic2l6ZSA+IE5GU1NWQ19NQVhCTEtTSVpFKQogCQkJYnNpemUgPSBORlNTVkNfTUFYQkxLU0laRTsKIAkJYnNpemUgJj0gfigxMDI0LTEpOwotCQlsb2NrX2tlcm5lbCgpOworCQltdXRleF9sb2NrKCZuZnNkX211dGV4KTsKIAkJaWYgKG5mc2Rfc2VydiAmJiBuZnNkX3NlcnYtPnN2X25ydGhyZWFkcykgewotCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJbXV0ZXhfdW5sb2NrKCZuZnNkX211dGV4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJbmZzZF9tYXhfYmxrc2l6ZSA9IGJzaXplOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmbmZzZF9tdXRleCk7CiAJfQogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBuZnNkX21heF9ibGtzaXplKTsKIH0KQEAgLTcwNSwxNiArNzMwLDE3IEBACiAjaWZkZWYgQ09ORklHX05GU0RfVjQKIGV4dGVybiB0aW1lX3QgbmZzNF9sZWFzZXRpbWUodm9pZCk7CiAKLXN0YXRpYyBzc2l6ZV90IHdyaXRlX2xlYXNldGltZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBzc2l6ZV90IF9fd3JpdGVfbGVhc2V0aW1lKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCS8qIGlmIHNpemUgPiAxMCBzZWNvbmRzLCBjYWxsCiAJICogbmZzNF9yZXNldF9sZWFzZSgpIHRoZW4gd3JpdGUgb3V0IHRoZSBuZXcgbGVhc2UgKHNlY29uZHMpIGFzIHJlcGx5CiAJICovCiAJY2hhciAqbWVzZyA9IGJ1ZjsKLQlpbnQgcnY7CisJaW50IHJ2LCBsZWFzZTsKIAogCWlmIChzaXplID4gMCkgewotCQlpbnQgbGVhc2U7CisJCWlmIChuZnNkX3NlcnYpCisJCQlyZXR1cm4gLUVCVVNZOwogCQlydiA9IGdldF9pbnQoJm1lc2csICZsZWFzZSk7CiAJCWlmIChydikKIAkJCXJldHVybiBydjsKQEAgLTcyNiwyNCArNzUyLDUyIEBACiAJcmV0dXJuIHN0cmxlbihidWYpOwogfQogCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9yZWNvdmVyeWRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX2xlYXNldGltZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzc2l6ZV90IHJ2OworCisJbXV0ZXhfbG9jaygmbmZzZF9tdXRleCk7CisJcnYgPSBfX3dyaXRlX2xlYXNldGltZShmaWxlLCBidWYsIHNpemUpOworCW11dGV4X3VubG9jaygmbmZzZF9tdXRleCk7CisJcmV0dXJuIHJ2OworfQorCitleHRlcm4gY2hhciAqbmZzNF9yZWNvdmVyeWRpcih2b2lkKTsKKworc3RhdGljIHNzaXplX3QgX193cml0ZV9yZWNvdmVyeWRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAljaGFyICptZXNnID0gYnVmOwogCWNoYXIgKnJlY2RpcjsKIAlpbnQgbGVuLCBzdGF0dXM7CiAKLQlpZiAoc2l6ZSA9PSAwIHx8IHNpemUgPiBQQVRIX01BWCB8fCBidWZbc2l6ZS0xXSAhPSAnXG4nKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlidWZbc2l6ZS0xXSA9IDA7CisJaWYgKHNpemUgPiAwKSB7CisJCWlmIChuZnNkX3NlcnYpCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAoc2l6ZSA+IFBBVEhfTUFYIHx8IGJ1ZltzaXplLTFdICE9ICdcbicpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnVmW3NpemUtMV0gPSAwOwogCi0JcmVjZGlyID0gbWVzZzsKLQlsZW4gPSBxd29yZF9nZXQoJm1lc2csIHJlY2Rpciwgc2l6ZSk7Ci0JaWYgKGxlbiA8PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmVjZGlyID0gbWVzZzsKKwkJbGVuID0gcXdvcmRfZ2V0KCZtZXNnLCByZWNkaXIsIHNpemUpOworCQlpZiAobGVuIDw9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0YXR1cyA9IG5mczRfcmVzZXRfcmVjb3ZlcnlkaXIocmVjZGlyKTsKKwkJc3RhdHVzID0gbmZzNF9yZXNldF9yZWNvdmVyeWRpcihyZWNkaXIpOworCX0KKwlzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBuZnM0X3JlY292ZXJ5ZGlyKCkpOwogCXJldHVybiBzdHJsZW4oYnVmKTsKIH0KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfcmVjb3ZlcnlkaXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCBydjsKKworCW11dGV4X2xvY2soJm5mc2RfbXV0ZXgpOworCXJ2ID0gX193cml0ZV9yZWNvdmVyeWRpcihmaWxlLCBidWYsIHNpemUpOworCW11dGV4X3VubG9jaygmbmZzZF9tdXRleCk7CisJcmV0dXJuIHJ2OworfQorCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzZmguYyBiL2ZzL25mc2QvbmZzZmguYwppbmRleCAxMDBhZTU2Li5mNDU0NTFlIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2ZoLmMKKysrIGIvZnMvbmZzZC9uZnNmaC5jCkBAIC0xNzYsOSArMTc2LDI0IEBACiAJaWYgKElTX0VSUihleHApKQogCQlyZXR1cm4gbmZzZXJybm8oUFRSX0VSUihleHApKTsKIAotCWVycm9yID0gbmZzZF9zZXR1c2VyX2FuZF9jaGVja19wb3J0KHJxc3RwLCBleHApOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7CisJaWYgKGV4cC0+ZXhfZmxhZ3MgJiBORlNFWFBfTk9TVUJUUkVFQ0hFQ0spIHsKKwkJLyogRWxldmF0ZSBwcml2aWxlZ2VzIHNvIHRoYXQgdGhlIGxhY2sgb2YgJ3InIG9yICd4JworCQkgKiBwZXJtaXNzaW9uIG9uIHNvbWUgcGFyZW50IGRpcmVjdG9yeSB3aWxsCisJCSAqIG5vdCBzdG9wIGV4cG9ydGZzX2RlY29kZV9maCBmcm9tIGJlaW5nIGFibGUKKwkJICogdG8gcmVjb25uZWN0IGEgZGlyZWN0b3J5IGludG8gdGhlIGRlbnRyeSBjYWNoZS4KKwkJICogVGhlIHNhbWUgcHJvYmxlbSBjYW4gYWZmZWN0ICJTVUJUUkVFQ0hFQ0siIGV4cG9ydHMsCisJCSAqIGJ1dCBhcyBuZnNkX2FjY2VwdGFibGUgZGVwZW5kcyBvbiBjb3JyZWN0CisJCSAqIGFjY2VzcyBjb250cm9sIHNldHRpbmdzIGJlaW5nIGluIGVmZmVjdCwgd2UgY2Fubm90CisJCSAqIGZpeCB0aGF0IGNhc2UgZWFzaWx5LgorCQkgKi8KKwkJY3VycmVudC0+Y2FwX2VmZmVjdGl2ZSA9CisJCQljYXBfcmFpc2VfbmZzZF9zZXQoY3VycmVudC0+Y2FwX2VmZmVjdGl2ZSwKKwkJCQkJICAgY3VycmVudC0+Y2FwX3Blcm1pdHRlZCk7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBuZnNkX3NldHVzZXJfYW5kX2NoZWNrX3BvcnQocnFzdHAsIGV4cCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0OworCX0KIAogCS8qCiAJICogTG9vayB1cCB0aGUgZGVudHJ5IHVzaW5nIHRoZSBORlMgZmlsZSBoYW5kbGUuCkBAIC0yMTUsNiArMjMwLDE0IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChleHAtPmV4X2ZsYWdzICYgTkZTRVhQX05PU1VCVFJFRUNIRUNLKSB7CisJCWVycm9yID0gbmZzZF9zZXR1c2VyX2FuZF9jaGVja19wb3J0KHJxc3RwLCBleHApOworCQlpZiAoZXJyb3IpIHsKKwkJCWRwdXQoZGVudHJ5KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCiAJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmCiAJCQkoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0RJU0NPTk5FQ1RFRCkpIHsKIAkJcHJpbnRrKCJuZnNkOiBmaW5kX2ZoX2RlbnRyeSByZXR1cm5lZCBhIERJU0NPTk5FQ1RFRCBkaXJlY3Rvcnk6ICVzLyVzXG4iLApAQCAtMjc5LDcgKzMwMiw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCWlmICghKGFjY2VzcyAmIE1BWV9MT0NLKSkgeworCWlmICghKGFjY2VzcyAmIE5GU0RfTUFZX0xPQ0spKSB7CiAJCS8qCiAJCSAqIHBzZXVkb2ZsYXZvciByZXN0cmljdGlvbnMgYXJlIG5vdCBlbmZvcmNlZCBvbiBOTE0sCiAJCSAqIHdoaWNoIGNsaWVudHMgdmlydHVhbGx5IGFsd2F5cyB1c2UgYXV0aF9zeXMgZm9yLApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNwcm9jLmMgYi9mcy9uZnNkL25mc3Byb2MuYwppbmRleCA2Y2ZjOTZhLi4wNzY2Zjk1IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc3Byb2MuYworKysgYi9mcy9uZnNkL25mc3Byb2MuYwpAQCAtNjUsNyArNjUsNyBAQAogCWRwcmludGsoIm5mc2Q6IEdFVEFUVFIgICVzXG4iLCBTVkNGSF9mbXQoJmFyZ3AtPmZoKSk7CiAKIAlmaF9jb3B5KCZyZXNwLT5maCwgJmFyZ3AtPmZoKTsKLQluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZyZXNwLT5maCwgMCwgTUFZX05PUCk7CisJbmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCAmcmVzcC0+ZmgsIDAsIE5GU0RfTUFZX05PUCk7CiAJcmV0dXJuIG5mc2RfcmV0dXJuX2F0dHJzKG5mc2VyciwgcmVzcCk7CiB9CiAKQEAgLTIxNSwxMSArMjE1LDExIEBACiAJCVNWQ0ZIX2ZtdChkaXJmaHApLCBhcmdwLT5sZW4sIGFyZ3AtPm5hbWUpOwogCiAJLyogRmlyc3QgdmVyaWZ5IHRoZSBwYXJlbnQgZmlsZSBoYW5kbGUgKi8KLQluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsIGRpcmZocCwgU19JRkRJUiwgTUFZX0VYRUMpOworCW5mc2VyciA9IGZoX3ZlcmlmeShycXN0cCwgZGlyZmhwLCBTX0lGRElSLCBORlNEX01BWV9FWEVDKTsKIAlpZiAobmZzZXJyKQogCQlnb3RvIGRvbmU7IC8qIG11c3QgZmhfcHV0IGRpcmZocCBldmVuIG9uIGVycm9yICovCiAKLQkvKiBDaGVjayBmb3IgTUFZX1dSSVRFIGluIG5mc2RfY3JlYXRlIGlmIG5lY2Vzc2FyeSAqLworCS8qIENoZWNrIGZvciBORlNEX01BWV9XUklURSBpbiBuZnNkX2NyZWF0ZSBpZiBuZWNlc3NhcnkgKi8KIAogCW5mc2VyciA9IG5mc2Vycl9hY2NlczsKIAlpZiAoIWFyZ3AtPmxlbikKQEAgLTI4MSw3ICsyODEsNyBAQAogCQkJCQluZnNlcnIgPSBuZnNkX3Blcm1pc3Npb24ocnFzdHAsCiAJCQkJCQkJCSBuZXdmaHAtPmZoX2V4cG9ydCwKIAkJCQkJCQkJIG5ld2ZocC0+ZmhfZGVudHJ5LAotCQkJCQkJCQkgTUFZX1dSSVRFfE1BWV9MT0NBTF9BQ0NFU1MpOworCQkJCQkJCQkgTkZTRF9NQVlfV1JJVEV8TkZTRF9NQVlfTE9DQUxfQUNDRVNTKTsKIAkJCQkJaWYgKG5mc2VyciAmJiBuZnNlcnIgIT0gbmZzZXJyX3JvZnMpCiAJCQkJCQlnb3RvIG91dF91bmxvY2s7CiAJCQkJfQpAQCAtNjE0LDYgKzYxNCw3IEBACiAjZW5kaWYKIAkJeyBuZnNlcnJfc3RhbGUsIC1FU1RBTEUgfSwKIAkJeyBuZnNlcnJfanVrZWJveCwgLUVUSU1FRE9VVCB9LAorCQl7IG5mc2Vycl9qdWtlYm94LCAtRVJFU1RBUlRTWVMgfSwKIAkJeyBuZnNlcnJfZHJvcGl0LCAtRUFHQUlOIH0sCiAJCXsgbmZzZXJyX2Ryb3BpdCwgLUVOT01FTSB9LAogCQl7IG5mc2Vycl9iYWRuYW1lLCAtRVNSQ0ggfSwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzc3ZjLmMgYi9mcy9uZnNkL25mc3N2Yy5jCmluZGV4IDk0MTA0MWYuLjgwMjkyZmYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzc3ZjLmMKKysrIGIvZnMvbmZzZC9uZnNzdmMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdGF0cy5oPgpAQCAtMzYsMjggKzM3LDM4IEBACiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWQlORlNEREJHX1NWQwogCi0vKiB0aGVzZSBzaWduYWxzIHdpbGwgYmUgZGVsaXZlcmVkIHRvIGFuIG5mc2QgdGhyZWFkIAotICogd2hlbiBoYW5kbGluZyBhIHJlcXVlc3QKLSAqLwotI2RlZmluZSBBTExPV0VEX1NJR1MJKHNpZ21hc2soU0lHS0lMTCkpCi0vKiB0aGVzZSBzaWduYWxzIHdpbGwgYmUgZGVsaXZlcmVkIHRvIGFuIG5mc2QgdGhyZWFkCi0gKiB3aGVuIG5vdCBoYW5kbGluZyBhIHJlcXVlc3QuIGkuZS4gd2hlbiB3YWl0aW5nCi0gKi8KLSNkZWZpbmUgU0hVVERPV05fU0lHUwkoc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHSFVQKSB8IHNpZ21hc2soU0lHSU5UKSB8IHNpZ21hc2soU0lHUVVJVCkpCi0vKiBpZiB0aGUgbGFzdCB0aHJlYWQgZGllcyB3aXRoIFNJR0hVUCwgdGhlbiB0aGUgZXhwb3J0cyB0YWJsZSBpcwotICogbGVmdCB1bmNoYW5nZWQgKCBsaWtlIDIuNC17MC05fSApLiAgQW55IG90aGVyIHNpZ25hbCB3aWxsIGNsZWFyCi0gKiB0aGUgZXhwb3J0cyB0YWJsZSAobGlrZSAyLjIpLgotICovCi0jZGVmaW5lCVNJR19OT0NMRUFOCVNJR0hVUAotCiBleHRlcm4gc3RydWN0IHN2Y19wcm9ncmFtCW5mc2RfcHJvZ3JhbTsKLXN0YXRpYyB2b2lkCQkJbmZzZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTsKK3N0YXRpYyBpbnQJCQluZnNkKHZvaWQgKnZycXN0cCk7CiBzdHJ1Y3QgdGltZXZhbAkJCW5mc3N2Y19ib290OwotICAgICAgIHN0cnVjdCBzdmNfc2VydiAJCSpuZnNkX3NlcnY7CiBzdGF0aWMgYXRvbWljX3QJCQluZnNkX2J1c3k7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwkJbmZzZF9sYXN0X2NhbGw7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5mc2RfY2FsbF9sb2NrKTsKIAorLyoKKyAqIG5mc2RfbXV0ZXggcHJvdGVjdHMgbmZzZF9zZXJ2IC0tIGJvdGggdGhlIHBvaW50ZXIgaXRzZWxmIGFuZCB0aGUgbWVtYmVycworICogb2YgdGhlIHN2Y19zZXJ2IHN0cnVjdC4gSW4gcGFydGljdWxhciwgLT5zdl9ucnRocmVhZHMgYnV0IGFsc28gdG8gc29tZQorICogZXh0ZW50IC0+c3ZfdGVtcF9zb2NrcyBhbmQgLT5zdl9wZXJtc29ja3MuIEl0IGFsc28gcHJvdGVjdHMgbmZzZHN0YXRzLnRoX2NudAorICoKKyAqIElmIChvdXQgc2lkZSB0aGUgbG9jaykgbmZzZF9zZXJ2IGlzIG5vbi1OVUxMLCB0aGVuIGl0IG11c3QgcG9pbnQgdG8gYQorICogcHJvcGVybHkgaW5pdGlhbGlzZWQgJ3N0cnVjdCBzdmNfc2Vydicgd2l0aCAtPnN2X25ydGhyZWFkcyA+IDAuIFRoYXQgbnVtYmVyCisgKiBvZiBuZnNkIHRocmVhZHMgbXVzdCBleGlzdCBhbmQgZWFjaCBtdXN0IGxpc3RlZCBpbiAtPnNwX2FsbF90aHJlYWRzIGluIGVhY2gKKyAqIGVudHJ5IG9mIC0+c3ZfcG9vbHNbXS4KKyAqCisgKiBUcmFuc2l0aW9ucyBvZiB0aGUgdGhyZWFkIGNvdW50IGJldHdlZW4gemVybyBhbmQgbm9uLXplcm8gYXJlIG9mIHBhcnRpY3VsYXIKKyAqIGludGVyZXN0IHNpbmNlIHRoZSBzdmNfc2VydiBuZWVkcyB0byBiZSBjcmVhdGVkIGFuZCBpbml0aWFsaXplZCBhdCB0aGF0CisgKiBwb2ludCwgb3IgZnJlZWQuCisgKgorICogRmluYWxseSwgdGhlIG5mc2RfbXV0ZXggYWxzbyBwcm90ZWN0cyBzb21lIG9mIHRoZSBnbG9iYWwgdmFyaWFibGVzIHRoYXQgYXJlCisgKiBhY2Nlc3NlZCB3aGVuIG5mc2Qgc3RhcnRzIGFuZCB0aGF0IGFyZSBzZXR0YWJsZSB2aWEgdGhlIHdyaXRlXyogcm91dGluZXMgaW4KKyAqIG5mc2N0bC5jLiBJbiBwYXJ0aWN1bGFyOgorICoKKyAqCXVzZXJfcmVjb3ZlcnlfZGlybmFtZQorICoJdXNlcl9sZWFzZV90aW1lCisgKgluZnNkX3ZlcnNpb25zCisgKi8KK0RFRklORV9NVVRFWChuZnNkX211dGV4KTsKK3N0cnVjdCBzdmNfc2VydiAJCSpuZnNkX3NlcnY7CisKICNpZiBkZWZpbmVkKENPTkZJR19ORlNEX1YyX0FDTCkgfHwgZGVmaW5lZChDT05GSUdfTkZTRF9WM19BQ0wpCiBzdGF0aWMgc3RydWN0IHN2Y19zdGF0CW5mc2RfYWNsX3N2Y3N0YXRzOwogc3RhdGljIHN0cnVjdCBzdmNfdmVyc2lvbiAqCW5mc2RfYWNsX3ZlcnNpb25bXSA9IHsKQEAgLTE0NSwxMyArMTU2LDE0IEBACiAKIGludCBuZnNkX25ydGhyZWFkcyh2b2lkKQogewotCWlmIChuZnNkX3NlcnYgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gbmZzZF9zZXJ2LT5zdl9ucnRocmVhZHM7CisJaW50IHJ2ID0gMDsKKwltdXRleF9sb2NrKCZuZnNkX211dGV4KTsKKwlpZiAobmZzZF9zZXJ2KQorCQlydiA9IG5mc2Rfc2Vydi0+c3ZfbnJ0aHJlYWRzOworCW11dGV4X3VubG9jaygmbmZzZF9tdXRleCk7CisJcmV0dXJuIHJ2OwogfQogCi1zdGF0aWMgaW50IGtpbGxzaWc7CS8qIHNpZ25hbCB0aGF0IHdhcyB1c2VkIHRvIGtpbGwgbGFzdCBuZnNkICovCiBzdGF0aWMgdm9pZCBuZnNkX2xhc3RfdGhyZWFkKHN0cnVjdCBzdmNfc2VydiAqc2VydikKIHsKIAkvKiBXaGVuIGxhc3QgbmZzZCB0aHJlYWQgZXhpdHMgd2UgbmVlZCB0byBkbyBzb21lIGNsZWFuLXVwICovCkBAIC0xNjIsMTEgKzE3NCw5IEBACiAJbmZzZF9yYWNhY2hlX3NodXRkb3duKCk7CiAJbmZzNF9zdGF0ZV9zaHV0ZG93bigpOwogCi0JcHJpbnRrKEtFUk5fV0FSTklORyAibmZzZDogbGFzdCBzZXJ2ZXIgaGFzIGV4aXRlZFxuIik7Ci0JaWYgKGtpbGxzaWcgIT0gU0lHX05PQ0xFQU4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibmZzZDogdW5leHBvcnRpbmcgYWxsIGZpbGVzeXN0ZW1zXG4iKTsKLQkJbmZzZF9leHBvcnRfZmx1c2goKTsKLQl9CisJcHJpbnRrKEtFUk5fV0FSTklORyAibmZzZDogbGFzdCBzZXJ2ZXIgaGFzIGV4aXRlZCwgZmx1c2hpbmcgZXhwb3J0ICIKKwkJCSAgICAiY2FjaGVcbiIpOworCW5mc2RfZXhwb3J0X2ZsdXNoKCk7CiB9CiAKIHZvaWQgbmZzZF9yZXNldF92ZXJzaW9ucyh2b2lkKQpAQCAtMTkwLDEzICsyMDAsMTQgQEAKIAl9CiB9CiAKKwogaW50IG5mc2RfY3JlYXRlX3NlcnYodm9pZCkKIHsKIAlpbnQgZXJyID0gMDsKLQlsb2NrX2tlcm5lbCgpOworCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZuZnNkX211dGV4KSk7CiAJaWYgKG5mc2Rfc2VydikgewogCQlzdmNfZ2V0KG5mc2Rfc2Vydik7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChuZnNkX21heF9ibGtzaXplID09IDApIHsKQEAgLTIxNywxMyArMjI4LDExIEBACiAJfQogCiAJYXRvbWljX3NldCgmbmZzZF9idXN5LCAwKTsKLQluZnNkX3NlcnYgPSBzdmNfY3JlYXRlX3Bvb2xlZCgmbmZzZF9wcm9ncmFtLAotCQkJCSAgICAgIG5mc2RfbWF4X2Jsa3NpemUsCi0JCQkJICAgICAgbmZzZF9sYXN0X3RocmVhZCwKLQkJCQkgICAgICBuZnNkLCBTSUdfTk9DTEVBTiwgVEhJU19NT0RVTEUpOworCW5mc2Rfc2VydiA9IHN2Y19jcmVhdGVfcG9vbGVkKCZuZnNkX3Byb2dyYW0sIG5mc2RfbWF4X2Jsa3NpemUsCisJCQkJICAgICAgbmZzZF9sYXN0X3RocmVhZCwgbmZzZCwgVEhJU19NT0RVTEUpOwogCWlmIChuZnNkX3NlcnYgPT0gTlVMTCkKIAkJZXJyID0gLUVOT01FTTsKLQl1bmxvY2tfa2VybmVsKCk7CisKIAlkb19nZXR0aW1lb2ZkYXkoJm5mc3N2Y19ib290KTsJCS8qIHJlY29yZCBib290IHRpbWUgKi8KIAlyZXR1cm4gZXJyOwogfQpAQCAtMjgyLDYgKzI5MSw4IEBACiAJaW50IHRvdCA9IDA7CiAJaW50IGVyciA9IDA7CiAKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJm5mc2RfbXV0ZXgpKTsKKwogCWlmIChuZnNkX3NlcnYgPT0gTlVMTCB8fCBuIDw9IDApCiAJCXJldHVybiAwOwogCkBAIC0zMTYsNyArMzI3LDYgQEAKIAkJbnRocmVhZHNbMF0gPSAxOwogCiAJLyogYXBwbHkgdGhlIG5ldyBudW1iZXJzICovCi0JbG9ja19rZXJuZWwoKTsKIAlzdmNfZ2V0KG5mc2Rfc2Vydik7CiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQllcnIgPSBzdmNfc2V0X251bV90aHJlYWRzKG5mc2Rfc2VydiwgJm5mc2Rfc2Vydi0+c3ZfcG9vbHNbaV0sCkBAIC0zMjUsNyArMzM1LDYgQEAKIAkJCWJyZWFrOwogCX0KIAlzdmNfZGVzdHJveShuZnNkX3NlcnYpOwotCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zMzQsOCArMzQzLDggQEAKIG5mc2Rfc3ZjKHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBucnNlcnZzKQogewogCWludAllcnJvcjsKLQkKLQlsb2NrX2tlcm5lbCgpOworCisJbXV0ZXhfbG9jaygmbmZzZF9tdXRleCk7CiAJZHByaW50aygibmZzZDogY3JlYXRpbmcgc2VydmljZVxuIik7CiAJZXJyb3IgPSAtRUlOVkFMOwogCWlmIChucnNlcnZzIDw9IDApCkBAIC0zNjMsNyArMzcyLDcgQEAKICBmYWlsdXJlOgogCXN2Y19kZXN0cm95KG5mc2Rfc2Vydik7CQkvKiBSZWxlYXNlIHNlcnZlciAqLwogIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZuZnNkX211dGV4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTM5MSwxOCArNDAwLDE3IEBACiAvKgogICogVGhpcyBpcyB0aGUgTkZTIHNlcnZlciBrZXJuZWwgdGhyZWFkCiAgKi8KLXN0YXRpYyB2b2lkCi1uZnNkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCitzdGF0aWMgaW50CituZnNkKHZvaWQgKnZycXN0cCkKIHsKKwlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwID0gKHN0cnVjdCBzdmNfcnFzdCAqKSB2cnFzdHA7CiAJc3RydWN0IGZzX3N0cnVjdCAqZnNwOwotCWludAkJZXJyOwotCXNpZ3NldF90IHNodXRkb3duX21hc2ssIGFsbG93ZWRfbWFzazsKKwlpbnQgZXJyLCBwcmV2ZXJyID0gMDsKIAogCS8qIExvY2sgbW9kdWxlIGFuZCBzZXQgdXAga2VybmVsIHRocmVhZCAqLwotCWxvY2tfa2VybmVsKCk7Ci0JZGFlbW9uaXplKCJuZnNkIik7CisJbXV0ZXhfbG9jaygmbmZzZF9tdXRleCk7CiAKLQkvKiBBZnRlciBkYWVtb25pemUoKSB0aGlzIGtlcm5lbCB0aHJlYWQgc2hhcmVzIGN1cnJlbnQtPmZzCisJLyogQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBzaGFyZXMgY3VycmVudC0+ZnMKIAkgKiB3aXRoIHRoZSBpbml0IHByb2Nlc3MuIFdlIG5lZWQgdG8gY3JlYXRlIGZpbGVzIHdpdGggYQogCSAqIHVtYXNrIG9mIDAgaW5zdGVhZCBvZiBpbml0J3MgdW1hc2suICovCiAJZnNwID0gY29weV9mc19zdHJ1Y3QoY3VycmVudC0+ZnMpOwpAQCAtNDE0LDE0ICs0MjIsMTcgQEAKIAljdXJyZW50LT5mcyA9IGZzcDsKIAljdXJyZW50LT5mcy0+dW1hc2sgPSAwOwogCi0Jc2lnaW5pdHNldGludigmc2h1dGRvd25fbWFzaywgU0hVVERPV05fU0lHUyk7Ci0Jc2lnaW5pdHNldGludigmYWxsb3dlZF9tYXNrLCBBTExPV0VEX1NJR1MpOworCS8qCisJICogdGhyZWFkIGlzIHNwYXduZWQgd2l0aCBhbGwgc2lnbmFscyBzZXQgdG8gU0lHX0lHTiwgcmUtZW5hYmxlCisJICogdGhlIG9uZXMgdGhhdCB3aWxsIGJyaW5nIGRvd24gdGhlIHRocmVhZAorCSAqLworCWFsbG93X3NpZ25hbChTSUdLSUxMKTsKKwlhbGxvd19zaWduYWwoU0lHSFVQKTsKKwlhbGxvd19zaWduYWwoU0lHSU5UKTsKKwlhbGxvd19zaWduYWwoU0lHUVVJVCk7CiAKIAluZnNkc3RhdHMudGhfY250Kys7Ci0KLQlycXN0cC0+cnFfdGFzayA9IGN1cnJlbnQ7Ci0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZuZnNkX211dGV4KTsKIAogCS8qCiAJICogV2Ugd2FudCBsZXNzIHRocm90dGxpbmcgaW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpIHNvIHRoYXQgbmZzIHRvCkBAIC00MzUsMjYgKzQ0NiwzMCBAQAogCSAqIFRoZSBtYWluIHJlcXVlc3QgbG9vcAogCSAqLwogCWZvciAoOzspIHsKLQkJLyogQmxvY2sgYWxsIGJ1dCB0aGUgc2h1dGRvd24gc2lnbmFscyAqLwotCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNodXRkb3duX21hc2ssIE5VTEwpOwotCiAJCS8qCiAJCSAqIEZpbmQgYSBzb2NrZXQgd2l0aCBkYXRhIGF2YWlsYWJsZSBhbmQgY2FsbCBpdHMKIAkJICogcmVjdmZyb20gcm91dGluZS4KIAkJICovCiAJCXdoaWxlICgoZXJyID0gc3ZjX3JlY3YocnFzdHAsIDYwKjYwKkhaKSkgPT0gLUVBR0FJTikKIAkJCTsKLQkJaWYgKGVyciA8IDApCisJCWlmIChlcnIgPT0gLUVJTlRSKQogCQkJYnJlYWs7CisJCWVsc2UgaWYgKGVyciA8IDApIHsKKwkJCWlmIChlcnIgIT0gcHJldmVycikgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmV4cGVjdGVkIGVycm9yICIKKwkJCQkJImZyb20gc3ZjX3JlY3YgKCVkKVxuIiwgX19mdW5jX18sIC1lcnIpOworCQkJCXByZXZlcnIgPSBlcnI7CisJCQl9CisJCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWik7CisJCQljb250aW51ZTsKKwkJfQorCiAJCXVwZGF0ZV90aHJlYWRfdXNhZ2UoYXRvbWljX3JlYWQoJm5mc2RfYnVzeSkpOwogCQlhdG9taWNfaW5jKCZuZnNkX2J1c3kpOwogCiAJCS8qIExvY2sgdGhlIGV4cG9ydCBoYXNoIHRhYmxlcyBmb3IgcmVhZGluZy4gKi8KIAkJZXhwX3JlYWRsb2NrKCk7CiAKLQkJLyogUHJvY2VzcyByZXF1ZXN0IHdpdGggc2lnbmFscyBibG9ja2VkLiAgKi8KLQkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZhbGxvd2VkX21hc2ssIE5VTEwpOwotCiAJCXN2Y19wcm9jZXNzKHJxc3RwKTsKIAogCQkvKiBVbmxvY2sgZXhwb3J0IGhhc2ggdGFibGVzICovCkBAIC00NjMsMjIgKzQ3OCwxMCBAQAogCQlhdG9taWNfZGVjKCZuZnNkX2J1c3kpOwogCX0KIAotCWlmIChlcnIgIT0gLUVJTlRSKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm5mc2Q6IHRlcm1pbmF0aW5nIG9uIGVycm9yICVkXG4iLCAtZXJyKTsKLQl9IGVsc2UgewotCQl1bnNpZ25lZCBpbnQJc2lnbm87Ci0KLQkJZm9yIChzaWdubyA9IDE7IHNpZ25vIDw9IF9OU0lHOyBzaWdubysrKQotCQkJaWYgKHNpZ2lzbWVtYmVyKCZjdXJyZW50LT5wZW5kaW5nLnNpZ25hbCwgc2lnbm8pICYmCi0JCQkgICAgIXNpZ2lzbWVtYmVyKCZjdXJyZW50LT5ibG9ja2VkLCBzaWdubykpCi0JCQkJYnJlYWs7Ci0JCWtpbGxzaWcgPSBzaWdubzsKLQl9CiAJLyogQ2xlYXIgc2lnbmFscyBiZWZvcmUgY2FsbGluZyBzdmNfZXhpdF90aHJlYWQoKSAqLwogCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CiAKLQlsb2NrX2tlcm5lbCgpOwotCisJbXV0ZXhfbG9jaygmbmZzZF9tdXRleCk7CiAJbmZzZHN0YXRzLnRoX2NudCAtLTsKIAogb3V0OgpAQCAtNDg2LDggKzQ4OSw5IEBACiAJc3ZjX2V4aXRfdGhyZWFkKHJxc3RwKTsKIAogCS8qIFJlbGVhc2UgbW9kdWxlICovCi0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmbmZzZF9tdXRleCk7CiAJbW9kdWxlX3B1dF9hbmRfZXhpdCgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIF9fYmUzMiBtYXBfbmV3X2Vycm9ycyh1MzIgdmVycywgX19iZTMyIG5mc2VycikKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IGEzYTI5MWYuLjBmNDQ4MWUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJZHByaW50aygibmZzZDogbmZzZF9sb29rdXAoZmggJXMsICUuKnMpXG4iLCBTVkNGSF9mbXQoZmhwKSwgbGVuLG5hbWUpOwogCiAJLyogT2J0YWluIGRlbnRyeSBhbmQgZXhwb3J0LiAqLwotCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCBTX0lGRElSLCBNQVlfRVhFQyk7CisJZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE5GU0RfTUFZX0VYRUMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTI2MiwxNCArMjYyLDE0IEBACiB7CiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5OwogCXN0cnVjdCBpbm9kZQkqaW5vZGU7Ci0JaW50CQlhY2Ntb2RlID0gTUFZX1NBVFRSOworCWludAkJYWNjbW9kZSA9IE5GU0RfTUFZX1NBVFRSOwogCWludAkJZnR5cGUgPSAwOwogCV9fYmUzMgkJZXJyOwogCWludAkJaG9zdF9lcnI7CiAJaW50CQlzaXplX2NoYW5nZSA9IDA7CiAKIAlpZiAoaWFwLT5pYV92YWxpZCAmIChBVFRSX0FUSU1FIHwgQVRUUl9NVElNRSB8IEFUVFJfU0laRSkpCi0JCWFjY21vZGUgfD0gTUFZX1dSSVRFfE1BWV9PV05FUl9PVkVSUklERTsKKwkJYWNjbW9kZSB8PSBORlNEX01BWV9XUklURXxORlNEX01BWV9PV05FUl9PVkVSUklERTsKIAlpZiAoaWFwLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKIAkJZnR5cGUgPSBTX0lGUkVHOwogCkBAIC0zMzEsNyArMzMxLDggQEAKIAkgKi8KIAlpZiAoaWFwLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgewogCQlpZiAoaWFwLT5pYV9zaXplIDwgaW5vZGUtPmlfc2l6ZSkgewotCQkJZXJyID0gbmZzZF9wZXJtaXNzaW9uKHJxc3RwLCBmaHAtPmZoX2V4cG9ydCwgZGVudHJ5LCBNQVlfVFJVTkN8TUFZX09XTkVSX09WRVJSSURFKTsKKwkJCWVyciA9IG5mc2RfcGVybWlzc2lvbihycXN0cCwgZmhwLT5maF9leHBvcnQsIGRlbnRyeSwKKwkJCQkJTkZTRF9NQVlfVFJVTkN8TkZTRF9NQVlfT1dORVJfT1ZFUlJJREUpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIG91dDsKIAkJfQpAQCAtNDYyLDcgKzQ2Myw3IEBACiAJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKIAogCS8qIEdldCBpbm9kZSAqLwotCWVycm9yID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIDAgLyogU19JRlJFRyAqLywgTUFZX1NBVFRSKTsKKwllcnJvciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCAwIC8qIFNfSUZSRUcgKi8sIE5GU0RfTUFZX1NBVFRSKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtNTYzLDIwICs1NjQsMjAgQEAKIAlpbnQJCWhvdzsKIH07CiBzdGF0aWMgc3RydWN0IGFjY2Vzc21hcAluZnMzX3JlZ2FjY2Vzc1tdID0gewotICAgIHsJTkZTM19BQ0NFU1NfUkVBRCwJTUFZX1JFQUQJCQl9LAotICAgIHsJTkZTM19BQ0NFU1NfRVhFQ1VURSwJTUFZX0VYRUMJCQl9LAotICAgIHsJTkZTM19BQ0NFU1NfTU9ESUZZLAlNQVlfV1JJVEV8TUFZX1RSVU5DCQl9LAotICAgIHsJTkZTM19BQ0NFU1NfRVhURU5ELAlNQVlfV1JJVEUJCQl9LAorICAgIHsJTkZTM19BQ0NFU1NfUkVBRCwJTkZTRF9NQVlfUkVBRAkJCX0sCisgICAgewlORlMzX0FDQ0VTU19FWEVDVVRFLAlORlNEX01BWV9FWEVDCQkJfSwKKyAgICB7CU5GUzNfQUNDRVNTX01PRElGWSwJTkZTRF9NQVlfV1JJVEV8TkZTRF9NQVlfVFJVTkMJfSwKKyAgICB7CU5GUzNfQUNDRVNTX0VYVEVORCwJTkZTRF9NQVlfV1JJVEUJCQl9LAogCiAgICAgewkwLAkJCTAJCQkJfQogfTsKIAogc3RhdGljIHN0cnVjdCBhY2Nlc3NtYXAJbmZzM19kaXJhY2Nlc3NbXSA9IHsKLSAgICB7CU5GUzNfQUNDRVNTX1JFQUQsCU1BWV9SRUFECQkJfSwKLSAgICB7CU5GUzNfQUNDRVNTX0xPT0tVUCwJTUFZX0VYRUMJCQl9LAotICAgIHsJTkZTM19BQ0NFU1NfTU9ESUZZLAlNQVlfRVhFQ3xNQVlfV1JJVEV8TUFZX1RSVU5DCX0sCi0gICAgewlORlMzX0FDQ0VTU19FWFRFTkQsCU1BWV9FWEVDfE1BWV9XUklURQkJfSwKLSAgICB7CU5GUzNfQUNDRVNTX0RFTEVURSwJTUFZX1JFTU9WRQkJCX0sCisgICAgewlORlMzX0FDQ0VTU19SRUFELAlORlNEX01BWV9SRUFECQkJfSwKKyAgICB7CU5GUzNfQUNDRVNTX0xPT0tVUCwJTkZTRF9NQVlfRVhFQwkJCX0sCisgICAgewlORlMzX0FDQ0VTU19NT0RJRlksCU5GU0RfTUFZX0VYRUN8TkZTRF9NQVlfV1JJVEV8TkZTRF9NQVlfVFJVTkN9LAorICAgIHsJTkZTM19BQ0NFU1NfRVhURU5ELAlORlNEX01BWV9FWEVDfE5GU0RfTUFZX1dSSVRFCX0sCisgICAgewlORlMzX0FDQ0VTU19ERUxFVEUsCU5GU0RfTUFZX1JFTU9WRQkJCX0sCiAKICAgICB7CTAsCQkJMAkJCQl9CiB9OwpAQCAtNTg5LDEwICs1OTAsMTAgQEAKIAkgKiBtYWlubHkgYXQgbW9kZSBiaXRzLCBhbmQgd2UgbWFrZSBzdXJlIHRvIGlnbm9yZSByZWFkLW9ubHkKIAkgKiBmaWxlc3lzdGVtIGNoZWNrcwogCSAqLwotICAgIHsJTkZTM19BQ0NFU1NfUkVBRCwJTUFZX1JFQUQJCQl9LAotICAgIHsJTkZTM19BQ0NFU1NfRVhFQ1VURSwJTUFZX0VYRUMJCQl9LAotICAgIHsJTkZTM19BQ0NFU1NfTU9ESUZZLAlNQVlfV1JJVEV8TUFZX0xPQ0FMX0FDQ0VTUwl9LAotICAgIHsJTkZTM19BQ0NFU1NfRVhURU5ELAlNQVlfV1JJVEV8TUFZX0xPQ0FMX0FDQ0VTUwl9LAorICAgIHsJTkZTM19BQ0NFU1NfUkVBRCwJTkZTRF9NQVlfUkVBRAkJCX0sCisgICAgewlORlMzX0FDQ0VTU19FWEVDVVRFLAlORlNEX01BWV9FWEVDCQkJfSwKKyAgICB7CU5GUzNfQUNDRVNTX01PRElGWSwJTkZTRF9NQVlfV1JJVEV8TkZTRF9NQVlfTE9DQUxfQUNDRVNTCX0sCisgICAgewlORlMzX0FDQ0VTU19FWFRFTkQsCU5GU0RfTUFZX1dSSVRFfE5GU0RfTUFZX0xPQ0FMX0FDQ0VTUwl9LAogCiAgICAgewkwLAkJCTAJCQkJfQogfTsKQEAgLTYwNiw3ICs2MDcsNyBAQAogCXUzMgkJCXF1ZXJ5LCByZXN1bHQgPSAwLCBzcmVzdWx0ID0gMDsKIAlfX2JlMzIJCQllcnJvcjsKIAotCWVycm9yID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIDAsIE1BWV9OT1ApOworCWVycm9yID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIDAsIE5GU0RfTUFZX05PUCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIApAQCAtNjc4LDcgKzY3OSw3IEBACiAJICogYW5kIChob3BlZnVsbHkpIGNoZWNrZWQgcGVybWlzc2lvbiAtIHNvIGFsbG93IE9XTkVSX09WRVJSSURFCiAJICogaW4gY2FzZSBhIGNobW9kIGhhcyBub3cgcmV2b2tlZCBwZXJtaXNzaW9uLgogCSAqLwotCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCB0eXBlLCBhY2Nlc3MgfCBNQVlfT1dORVJfT1ZFUlJJREUpOworCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCB0eXBlLCBhY2Nlc3MgfCBORlNEX01BWV9PV05FUl9PVkVSUklERSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTY4OSw3ICs2OTAsNyBAQAogCSAqIG9yIGFueSBhY2Nlc3Mgd2hlbiBtYW5kYXRvcnkgbG9ja2luZyBlbmFibGVkCiAJICovCiAJZXJyID0gbmZzZXJyX3Blcm07Ci0JaWYgKElTX0FQUEVORChpbm9kZSkgJiYgKGFjY2VzcyAmIE1BWV9XUklURSkpCisJaWYgKElTX0FQUEVORChpbm9kZSkgJiYgKGFjY2VzcyAmIE5GU0RfTUFZX1dSSVRFKSkKIAkJZ290byBvdXQ7CiAJLyoKIAkgKiBXZSBtdXN0IGlnbm9yZSBmaWxlcyAoYnV0IG9ubHkgZmlsZXMpIHdoaWNoIG1pZ2h0IGhhdmUgbWFuZGF0b3J5CkBAIC03MDYsMTQgKzcwNywxNCBAQAogCSAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGxlYXNlcyBvbiB0aGlzIGZpbGUuCiAJICogVGhpcyBtYXkgYmxvY2sgd2hpbGUgbGVhc2VzIGFyZSBicm9rZW4uCiAJICovCi0JaG9zdF9lcnIgPSBicmVha19sZWFzZShpbm9kZSwgT19OT05CTE9DSyB8ICgoYWNjZXNzICYgTUFZX1dSSVRFKSA/IEZNT0RFX1dSSVRFIDogMCkpOworCWhvc3RfZXJyID0gYnJlYWtfbGVhc2UoaW5vZGUsIE9fTk9OQkxPQ0sgfCAoKGFjY2VzcyAmIE5GU0RfTUFZX1dSSVRFKSA/IEZNT0RFX1dSSVRFIDogMCkpOwogCWlmIChob3N0X2VyciA9PSAtRVdPVUxEQkxPQ0spCiAJCWhvc3RfZXJyID0gLUVUSU1FRE9VVDsKIAlpZiAoaG9zdF9lcnIpIC8qIE5PTUVNIG9yIFdPVUxEQkxPQ0sgKi8KIAkJZ290byBvdXRfbmZzZXJyOwogCi0JaWYgKGFjY2VzcyAmIE1BWV9XUklURSkgewotCQlpZiAoYWNjZXNzICYgTUFZX1JFQUQpCisJaWYgKGFjY2VzcyAmIE5GU0RfTUFZX1dSSVRFKSB7CisJCWlmIChhY2Nlc3MgJiBORlNEX01BWV9SRUFEKQogCQkJZmxhZ3MgPSBPX1JEV1J8T19MQVJHRUZJTEU7CiAJCWVsc2UKIAkJCWZsYWdzID0gT19XUk9OTFl8T19MQVJHRUZJTEU7CkBAIC0xMDY5LDEyICsxMDcwLDEyIEBACiAKIAlpZiAoZmlsZSkgewogCQllcnIgPSBuZnNkX3Blcm1pc3Npb24ocnFzdHAsIGZocC0+ZmhfZXhwb3J0LCBmaHAtPmZoX2RlbnRyeSwKLQkJCQlNQVlfUkVBRHxNQVlfT1dORVJfT1ZFUlJJREUpOworCQkJCU5GU0RfTUFZX1JFQUR8TkZTRF9NQVlfT1dORVJfT1ZFUlJJREUpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJCWVyciA9IG5mc2RfdmZzX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCB2ZWMsIHZsZW4sIGNvdW50KTsKIAl9IGVsc2UgewotCQllcnIgPSBuZnNkX29wZW4ocnFzdHAsIGZocCwgU19JRlJFRywgTUFZX1JFQUQsICZmaWxlKTsKKwkJZXJyID0gbmZzZF9vcGVuKHJxc3RwLCBmaHAsIFNfSUZSRUcsIE5GU0RfTUFZX1JFQUQsICZmaWxlKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQllcnIgPSBuZnNkX3Zmc19yZWFkKHJxc3RwLCBmaHAsIGZpbGUsIG9mZnNldCwgdmVjLCB2bGVuLCBjb3VudCk7CkBAIC0xMDk4LDEzICsxMDk5LDEzIEBACiAKIAlpZiAoZmlsZSkgewogCQllcnIgPSBuZnNkX3Blcm1pc3Npb24ocnFzdHAsIGZocC0+ZmhfZXhwb3J0LCBmaHAtPmZoX2RlbnRyeSwKLQkJCQlNQVlfV1JJVEV8TUFZX09XTkVSX09WRVJSSURFKTsKKwkJCQlORlNEX01BWV9XUklURXxORlNEX01BWV9PV05FUl9PVkVSUklERSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAkJZXJyID0gbmZzZF92ZnNfd3JpdGUocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCB2ZWMsIHZsZW4sIGNudCwKIAkJCQlzdGFibGVwKTsKIAl9IGVsc2UgewotCQllcnIgPSBuZnNkX29wZW4ocnFzdHAsIGZocCwgU19JRlJFRywgTUFZX1dSSVRFLCAmZmlsZSk7CisJCWVyciA9IG5mc2Rfb3BlbihycXN0cCwgZmhwLCBTX0lGUkVHLCBORlNEX01BWV9XUklURSwgJmZpbGUpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKQEAgLTExMzYsNyArMTEzNyw4IEBACiAJaWYgKCh1NjQpY291bnQgPiB+KHU2NClvZmZzZXQpCiAJCXJldHVybiBuZnNlcnJfaW52YWw7CiAKLQlpZiAoKGVyciA9IG5mc2Rfb3BlbihycXN0cCwgZmhwLCBTX0lGUkVHLCBNQVlfV1JJVEUsICZmaWxlKSkgIT0gMCkKKwllcnIgPSBuZnNkX29wZW4ocnFzdHAsIGZocCwgU19JRlJFRywgTkZTRF9NQVlfV1JJVEUsICZmaWxlKTsKKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWlmIChFWF9JU1NZTkMoZmhwLT5maF9leHBvcnQpKSB7CiAJCWlmIChmaWxlLT5mX29wICYmIGZpbGUtPmZfb3AtPmZzeW5jKSB7CkBAIC0xMTk3LDcgKzExOTksNyBAQAogCWlmIChpc2RvdGVudChmbmFtZSwgZmxlbikpCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE1BWV9DUkVBVEUpOworCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCBTX0lGRElSLCBORlNEX01BWV9DUkVBVEUpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xMjQ4LDM2ICsxMjUwLDM0IEBACiAJCWlhcC0+aWFfbW9kZSA9IDA7CiAJaWFwLT5pYV9tb2RlID0gKGlhcC0+aWFfbW9kZSAmIFNfSUFMTFVHTykgfCB0eXBlOwogCisJZXJyID0gbmZzZXJyX2ludmFsOworCWlmICghU19JU1JFRyh0eXBlKSAmJiAhU19JU0RJUih0eXBlKSAmJiAhc3BlY2lhbF9maWxlKHR5cGUpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm5mc2Q6IGJhZCBmaWxlIHR5cGUgJW8gaW4gbmZzZF9jcmVhdGVcbiIsCisJCSAgICAgICB0eXBlKTsKKwkJZ290byBvdXQ7CisJfQorCisJaG9zdF9lcnIgPSBtbnRfd2FudF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOworCWlmIChob3N0X2VycikKKwkJZ290byBvdXRfbmZzZXJyOworCiAJLyoKIAkgKiBHZXQgdGhlIGRpciBvcCBmdW5jdGlvbiBwb2ludGVyLgogCSAqLwogCWVyciA9IDA7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTX0lGUkVHOgotCQlob3N0X2VyciA9IG1udF93YW50X3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7Ci0JCWlmIChob3N0X2VycikKLQkJCWdvdG8gb3V0X25mc2VycjsKIAkJaG9zdF9lcnIgPSB2ZnNfY3JlYXRlKGRpcnAsIGRjaGlsZCwgaWFwLT5pYV9tb2RlLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBTX0lGRElSOgotCQlob3N0X2VyciA9IG1udF93YW50X3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7Ci0JCWlmIChob3N0X2VycikKLQkJCWdvdG8gb3V0X25mc2VycjsKIAkJaG9zdF9lcnIgPSB2ZnNfbWtkaXIoZGlycCwgZGNoaWxkLCBpYXAtPmlhX21vZGUpOwogCQlicmVhazsKIAljYXNlIFNfSUZDSFI6CiAJY2FzZSBTX0lGQkxLOgogCWNhc2UgU19JRklGTzoKIAljYXNlIFNfSUZTT0NLOgotCQlob3N0X2VyciA9IG1udF93YW50X3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7Ci0JCWlmIChob3N0X2VycikKLQkJCWdvdG8gb3V0X25mc2VycjsKIAkJaG9zdF9lcnIgPSB2ZnNfbWtub2QoZGlycCwgZGNoaWxkLCBpYXAtPmlhX21vZGUsIHJkZXYpOwogCQlicmVhazsKLQlkZWZhdWx0OgotCSAgICAgICAgcHJpbnRrKCJuZnNkOiBiYWQgZmlsZSB0eXBlICVvIGluIG5mc2RfY3JlYXRlXG4iLCB0eXBlKTsKLQkJaG9zdF9lcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9uZnNlcnI7CiAJfQogCWlmIChob3N0X2VyciA8IDApIHsKIAkJbW50X2Ryb3Bfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKQEAgLTEyODksNyArMTI4OSw2IEBACiAJCXdyaXRlX2lub2RlX25vdyhkY2hpbGQtPmRfaW5vZGUsIDEpOwogCX0KIAotCiAJZXJyMiA9IG5mc2RfY3JlYXRlX3NldGF0dHIocnFzdHAsIHJlc2ZocCwgaWFwKTsKIAlpZiAoZXJyMikKIAkJZXJyID0gZXJyMjsKQEAgLTEzMzQsNyArMTMzMyw3IEBACiAJCWdvdG8gb3V0OwogCWlmICghKGlhcC0+aWFfdmFsaWQgJiBBVFRSX01PREUpKQogCQlpYXAtPmlhX21vZGUgPSAwOwotCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCBTX0lGRElSLCBNQVlfQ1JFQVRFKTsKKwllcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgU19JRkRJUiwgTkZTRF9NQVlfQ1JFQVRFKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMTQ3MSw3ICsxNDcwLDcgQEAKIAlfX2JlMzIJCWVycjsKIAlpbnQJCWhvc3RfZXJyOwogCi0JZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZMTkssIE1BWV9OT1ApOworCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCBTX0lGTE5LLCBORlNEX01BWV9OT1ApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xNTI2LDcgKzE1MjUsNyBAQAogCWlmIChpc2RvdGVudChmbmFtZSwgZmxlbikpCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE1BWV9DUkVBVEUpOworCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCBTX0lGRElSLCBORlNEX01BWV9DUkVBVEUpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCWZoX2xvY2soZmhwKTsKQEAgLTE1OTEsMTAgKzE1OTAsMTAgQEAKIAlfX2JlMzIJCWVycjsKIAlpbnQJCWhvc3RfZXJyOwogCi0JZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmZmhwLCBTX0lGRElSLCBNQVlfQ1JFQVRFKTsKKwllcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZmaHAsIFNfSUZESVIsIE5GU0RfTUFZX0NSRUFURSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0JZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCB0ZmhwLCAtU19JRkRJUiwgTUFZX05PUCk7CisJZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCB0ZmhwLCAtU19JRkRJUiwgTkZTRF9NQVlfTk9QKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMTY2MSwxMCArMTY2MCwxMCBAQAogCV9fYmUzMgkJZXJyOwogCWludAkJaG9zdF9lcnI7CiAKLQllcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZmaHAsIFNfSUZESVIsIE1BWV9SRU1PVkUpOworCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmZocCwgU19JRkRJUiwgTkZTRF9NQVlfUkVNT1ZFKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQllcnIgPSBmaF92ZXJpZnkocnFzdHAsIHRmaHAsIFNfSUZESVIsIE1BWV9DUkVBVEUpOworCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgdGZocCwgU19JRkRJUiwgTkZTRF9NQVlfQ1JFQVRFKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMTc2OCw3ICsxNzY3LDcgQEAKIAllcnIgPSBuZnNlcnJfYWNjZXM7CiAJaWYgKCFmbGVuIHx8IGlzZG90ZW50KGZuYW1lLCBmbGVuKSkKIAkJZ290byBvdXQ7Ci0JZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE1BWV9SRU1PVkUpOworCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCBTX0lGRElSLCBORlNEX01BWV9SRU1PVkUpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xODM0LDcgKzE4MzMsNyBAQAogCXN0cnVjdCBmaWxlCSpmaWxlOwogCWxvZmZfdAkJb2Zmc2V0ID0gKm9mZnNldHA7CiAKLQllcnIgPSBuZnNkX29wZW4ocnFzdHAsIGZocCwgU19JRkRJUiwgTUFZX1JFQUQsICZmaWxlKTsKKwllcnIgPSBuZnNkX29wZW4ocnFzdHAsIGZocCwgU19JRkRJUiwgTkZTRF9NQVlfUkVBRCwgJmZpbGUpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xODc1LDcgKzE4NzQsNyBAQAogX19iZTMyCiBuZnNkX3N0YXRmcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBrc3RhdGZzICpzdGF0KQogewotCV9fYmUzMiBlcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgMCwgTUFZX05PUCk7CisJX19iZTMyIGVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCAwLCBORlNEX01BWV9OT1ApOwogCWlmICghZXJyICYmIHZmc19zdGF0ZnMoZmhwLT5maF9kZW50cnksc3RhdCkpCiAJCWVyciA9IG5mc2Vycl9pbzsKIAlyZXR1cm4gZXJyOwpAQCAtMTg5NiwxOCArMTg5NSwxOCBAQAogCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJaW50CQllcnI7CiAKLQlpZiAoYWNjID09IE1BWV9OT1ApCisJaWYgKGFjYyA9PSBORlNEX01BWV9OT1ApCiAJCXJldHVybiAwOwogI2lmIDAKIAlkcHJpbnRrKCJuZnNkOiBwZXJtaXNzaW9uIDB4JXglcyVzJXMlcyVzJXMlcyBtb2RlIDAlbyVzJXMlc1xuIiwKIAkJYWNjLAotCQkoYWNjICYgTUFZX1JFQUQpPwkiIHJlYWQiICA6ICIiLAotCQkoYWNjICYgTUFZX1dSSVRFKT8JIiB3cml0ZSIgOiAiIiwKLQkJKGFjYyAmIE1BWV9FWEVDKT8JIiBleGVjIiAgOiAiIiwKLQkJKGFjYyAmIE1BWV9TQVRUUik/CSIgc2F0dHIiIDogIiIsCi0JCShhY2MgJiBNQVlfVFJVTkMpPwkiIHRydW5jIiA6ICIiLAotCQkoYWNjICYgTUFZX0xPQ0spPwkiIGxvY2siICA6ICIiLAotCQkoYWNjICYgTUFZX09XTkVSX09WRVJSSURFKT8gIiBvd25lcm92ZXJyaWRlIiA6ICIiLAorCQkoYWNjICYgTkZTRF9NQVlfUkVBRCk/CSIgcmVhZCIgIDogIiIsCisJCShhY2MgJiBORlNEX01BWV9XUklURSk/CSIgd3JpdGUiIDogIiIsCisJCShhY2MgJiBORlNEX01BWV9FWEVDKT8JIiBleGVjIiAgOiAiIiwKKwkJKGFjYyAmIE5GU0RfTUFZX1NBVFRSKT8JIiBzYXR0ciIgOiAiIiwKKwkJKGFjYyAmIE5GU0RfTUFZX1RSVU5DKT8JIiB0cnVuYyIgOiAiIiwKKwkJKGFjYyAmIE5GU0RfTUFZX0xPQ0spPwkiIGxvY2siICA6ICIiLAorCQkoYWNjICYgTkZTRF9NQVlfT1dORVJfT1ZFUlJJREUpPyAiIG93bmVyb3ZlcnJpZGUiIDogIiIsCiAJCWlub2RlLT5pX21vZGUsCiAJCUlTX0lNTVVUQUJMRShpbm9kZSk/CSIgaW1tdXQiIDogIiIsCiAJCUlTX0FQUEVORChpbm9kZSk/CSIgYXBwZW5kIiA6ICIiLApAQCAtMTkyMCwxOCArMTkxOSwxOCBAQAogCSAqIHN5c3RlbS4gIEJ1dCBpZiBpdCBpcyBJUklYIGRvaW5nIGNoZWNrIG9uIHdyaXRlLWFjY2VzcyBmb3IgYSAKIAkgKiBkZXZpY2Ugc3BlY2lhbCBmaWxlLCB3ZSBpZ25vcmUgcm9mcy4KIAkgKi8KLQlpZiAoIShhY2MgJiBNQVlfTE9DQUxfQUNDRVNTKSkKLQkJaWYgKGFjYyAmIChNQVlfV1JJVEUgfCBNQVlfU0FUVFIgfCBNQVlfVFJVTkMpKSB7CisJaWYgKCEoYWNjICYgTkZTRF9NQVlfTE9DQUxfQUNDRVNTKSkKKwkJaWYgKGFjYyAmIChORlNEX01BWV9XUklURSB8IE5GU0RfTUFZX1NBVFRSIHwgTkZTRF9NQVlfVFJVTkMpKSB7CiAJCQlpZiAoZXhwX3Jkb25seShycXN0cCwgZXhwKSB8fAogCQkJICAgIF9fbW50X2lzX3JlYWRvbmx5KGV4cC0+ZXhfcGF0aC5tbnQpKQogCQkJCXJldHVybiBuZnNlcnJfcm9mczsKLQkJCWlmICgvKiAoYWNjICYgTUFZX1dSSVRFKSAmJiAqLyBJU19JTU1VVEFCTEUoaW5vZGUpKQorCQkJaWYgKC8qIChhY2MgJiBORlNEX01BWV9XUklURSkgJiYgKi8gSVNfSU1NVVRBQkxFKGlub2RlKSkKIAkJCQlyZXR1cm4gbmZzZXJyX3Blcm07CiAJCX0KLQlpZiAoKGFjYyAmIE1BWV9UUlVOQykgJiYgSVNfQVBQRU5EKGlub2RlKSkKKwlpZiAoKGFjYyAmIE5GU0RfTUFZX1RSVU5DKSAmJiBJU19BUFBFTkQoaW5vZGUpKQogCQlyZXR1cm4gbmZzZXJyX3Blcm07CiAKLQlpZiAoYWNjICYgTUFZX0xPQ0spIHsKKwlpZiAoYWNjICYgTkZTRF9NQVlfTE9DSykgewogCQkvKiBJZiB3ZSBjYW5ub3QgcmVseSBvbiBhdXRoZW50aWNhdGlvbiBpbiBOTE0gcmVxdWVzdHMsCiAJCSAqIGp1c3QgYWxsb3cgbG9ja3MsIG90aGVyd2lzZSByZXF1aXJlIHJlYWQgcGVybWlzc2lvbiwgb3IKIAkJICogb3duZXJzaGlwCkBAIC0xOTM5LDcgKzE5MzgsNyBAQAogCQlpZiAoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9OT0FVVEhOTE0pCiAJCQlyZXR1cm4gMDsKIAkJZWxzZQotCQkJYWNjID0gTUFZX1JFQUQgfCBNQVlfT1dORVJfT1ZFUlJJREU7CisJCQlhY2MgPSBORlNEX01BWV9SRUFEIHwgTkZTRF9NQVlfT1dORVJfT1ZFUlJJREU7CiAJfQogCS8qCiAJICogVGhlIGZpbGUgb3duZXIgYWx3YXlzIGdldHMgYWNjZXNzIHBlcm1pc3Npb24gZm9yIGFjY2Vzc2VzIHRoYXQKQEAgLTE5NTUsMTUgKzE5NTQsMTYgQEAKIAkgKiBXZSBtdXN0IHRydXN0IHRoZSBjbGllbnQgdG8gZG8gcGVybWlzc2lvbiBjaGVja2luZyAtIHVzaW5nICJBQ0NFU1MiCiAJICogd2l0aCBORlN2My4KIAkgKi8KLQlpZiAoKGFjYyAmIE1BWV9PV05FUl9PVkVSUklERSkgJiYKKwlpZiAoKGFjYyAmIE5GU0RfTUFZX09XTkVSX09WRVJSSURFKSAmJgogCSAgICBpbm9kZS0+aV91aWQgPT0gY3VycmVudC0+ZnN1aWQpCiAJCXJldHVybiAwOwogCisJLyogVGhpcyBhc3N1bWVzICBORlNEX01BWV97UkVBRCxXUklURSxFWEVDfSA9PSBNQVlfe1JFQUQsV1JJVEUsRVhFQ30gKi8KIAllcnIgPSBwZXJtaXNzaW9uKGlub2RlLCBhY2MgJiAoTUFZX1JFQUR8TUFZX1dSSVRFfE1BWV9FWEVDKSwgTlVMTCk7CiAKIAkvKiBBbGxvdyByZWFkIGFjY2VzcyB0byBiaW5hcmllcyBldmVuIHdoZW4gbW9kZSAxMTEgKi8KIAlpZiAoZXJyID09IC1FQUNDRVMgJiYgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJgotCSAgICBhY2MgPT0gKE1BWV9SRUFEIHwgTUFZX09XTkVSX09WRVJSSURFKSkKKwkgICAgYWNjID09IChORlNEX01BWV9SRUFEIHwgTkZTRF9NQVlfT1dORVJfT1ZFUlJJREUpKQogCQllcnIgPSBwZXJtaXNzaW9uKGlub2RlLCBNQVlfRVhFQywgTlVMTCk7CiAKIAlyZXR1cm4gZXJyPyBuZnNlcnJubyhlcnIpIDogMDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IDQ0M2QxMDguLjdkY2UxNjEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtMTQ4OSwzMSArMTQ4OSwyMiBAQAogCQk6IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgbzJoYl9oZWFydGJlYXRfZ3JvdXBfbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAotCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCSAgc3RydWN0IGNvbmZpZ19pdGVtICoqbmV3X2l0ZW0pCitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpvMmhiX2hlYXJ0YmVhdF9ncm91cF9tYWtlX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCisJCQkJCQkJICBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBvMmhiX3JlZ2lvbiAqcmVnID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKIAogCXJlZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvMmhiX3JlZ2lvbiksIEdGUF9LRVJORUwpOwotCWlmIChyZWcgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKHJlZyA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWNvbmZpZ19pdGVtX2luaXRfdHlwZV9uYW1lKCZyZWctPmhyX2l0ZW0sIG5hbWUsICZvMmhiX3JlZ2lvbl90eXBlKTsKIAotCSpuZXdfaXRlbSA9ICZyZWctPmhyX2l0ZW07Ci0KIAlzcGluX2xvY2soJm8yaGJfbGl2ZV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZyZWctPmhyX2FsbF9pdGVtLCAmbzJoYl9hbGxfcmVnaW9ucyk7CiAJc3Bpbl91bmxvY2soJm8yaGJfbGl2ZV9sb2NrKTsKLW91dDoKLQlpZiAocmV0KQotCQlrZnJlZShyZWcpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gJnJlZy0+aHJfaXRlbTsKIH0KIAogc3RhdGljIHZvaWQgbzJoYl9oZWFydGJlYXRfZ3JvdXBfZHJvcF9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jIGIvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCmluZGV4IGIzNjRiNzAuLjgxNmEzZjYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKQEAgLTY0NCwzNSArNjQ0LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvMm5tX25vZGVfZ3JvdXBfbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAotCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqKm5ld19pdGVtKQorc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqbzJubV9ub2RlX2dyb3VwX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKKwkJCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgbzJubV9ub2RlICpub2RlID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKIAotCWlmIChzdHJsZW4obmFtZSkgPiBPMk5NX01BWF9OQU1FX0xFTikgewotCQlyZXQgPSAtRU5BTUVUT09MT05HOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKHN0cmxlbihuYW1lKSA+IE8yTk1fTUFYX05BTUVfTEVOKQorCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKIAogCW5vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbzJubV9ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG5vZGUgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlzdHJjcHkobm9kZS0+bmRfbmFtZSwgbmFtZSk7IC8qIHVzZSBpdGVtLmNpX25hbWVidWYgaW5zdGVhZD8gKi8KIAljb25maWdfaXRlbV9pbml0X3R5cGVfbmFtZSgmbm9kZS0+bmRfaXRlbSwgbmFtZSwgJm8ybm1fbm9kZV90eXBlKTsKIAlzcGluX2xvY2tfaW5pdCgmbm9kZS0+bmRfbG9jayk7CiAKLQkqbmV3X2l0ZW0gPSAmbm9kZS0+bmRfaXRlbTsKLQotb3V0OgotCWlmIChyZXQpCi0JCWtmcmVlKG5vZGUpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gJm5vZGUtPm5kX2l0ZW07CiB9CiAKIHN0YXRpYyB2b2lkIG8ybm1fbm9kZV9ncm91cF9kcm9wX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCkBAIC03NTYsMzEgKzc0NCwyNSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbzJubV9jbHVzdGVyX2dyb3VwX21ha2VfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCi0JCQkJCSBjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgc3RydWN0IGNvbmZpZ19ncm91cCAqKm5ld19ncm91cCkKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICpvMm5tX2NsdXN0ZXJfZ3JvdXBfbWFrZV9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKKwkJCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG8ybm1fY2x1c3RlciAqY2x1c3RlciA9IE5VTEw7CiAJc3RydWN0IG8ybm1fbm9kZV9ncm91cCAqbnMgPSBOVUxMOwotCXN0cnVjdCBjb25maWdfZ3JvdXAgKm8yaGJfZ3JvdXAgPSBOVUxMOworCXN0cnVjdCBjb25maWdfZ3JvdXAgKm8yaGJfZ3JvdXAgPSBOVUxMLCAqcmV0ID0gTlVMTDsKIAl2b2lkICpkZWZzID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKIAogCS8qIHRoaXMgcnVucyB1bmRlciB0aGUgcGFyZW50IGRpcidzIGlfbXV0ZXg7IHRoZXJlIGNhbiBiZSBvbmx5CiAJICogb25lIGNhbGxlciBpbiBoZXJlIGF0IGEgdGltZSAqLwotCWlmIChvMm5tX3NpbmdsZV9jbHVzdGVyKSB7Ci0JCXJldCA9IC1FTk9TUEM7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAobzJubV9zaW5nbGVfY2x1c3RlcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiAKIAljbHVzdGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG8ybm1fY2x1c3RlciksIEdGUF9LRVJORUwpOwogCW5zID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG8ybm1fbm9kZV9ncm91cCksIEdGUF9LRVJORUwpOwogCWRlZnMgPSBrY2FsbG9jKDMsIHNpemVvZihzdHJ1Y3QgY29uZmlnX2dyb3VwICopLCBHRlBfS0VSTkVMKTsKIAlvMmhiX2dyb3VwID0gbzJoYl9hbGxvY19oYl9zZXQoKTsKLQlpZiAoY2x1c3RlciA9PSBOVUxMIHx8IG5zID09IE5VTEwgfHwgbzJoYl9ncm91cCA9PSBOVUxMIHx8IGRlZnMgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOworCWlmIChjbHVzdGVyID09IE5VTEwgfHwgbnMgPT0gTlVMTCB8fCBvMmhiX2dyb3VwID09IE5VTEwgfHwgZGVmcyA9PSBOVUxMKQogCQlnb3RvIG91dDsKLQl9CiAKIAljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoJmNsdXN0ZXItPmNsX2dyb3VwLCBuYW1lLAogCQkJCSAgICAmbzJubV9jbHVzdGVyX3R5cGUpOwpAQCAtNzk3LDE1ICs3NzksMTYgQEAKIAljbHVzdGVyLT5jbF9pZGxlX3RpbWVvdXRfbXMgICAgPSBPMk5FVF9JRExFX1RJTUVPVVRfTVNfREVGQVVMVDsKIAljbHVzdGVyLT5jbF9rZWVwYWxpdmVfZGVsYXlfbXMgPSBPMk5FVF9LRUVQQUxJVkVfREVMQVlfTVNfREVGQVVMVDsKIAotCSpuZXdfZ3JvdXAgPSAmY2x1c3Rlci0+Y2xfZ3JvdXA7CisJcmV0ID0gJmNsdXN0ZXItPmNsX2dyb3VwOwogCW8ybm1fc2luZ2xlX2NsdXN0ZXIgPSBjbHVzdGVyOwogCiBvdXQ6Ci0JaWYgKHJldCkgeworCWlmIChyZXQgPT0gTlVMTCkgewogCQlrZnJlZShjbHVzdGVyKTsKIAkJa2ZyZWUobnMpOwogCQlvMmhiX2ZyZWVfaGJfc2V0KG8yaGJfZ3JvdXApOwogCQlrZnJlZShkZWZzKTsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDYxNDllNGIuLmVmZWY3MTUgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTQwMSw3ICs0MDEsNyBAQAogCWRpc2stPmRldi5wYXJlbnQgPSBkaXNrLT5kcml2ZXJmc19kZXY7CiAJZGlzay0+ZGV2LmRldnQgPSBNS0RFVihkaXNrLT5tYWpvciwgZGlzay0+Zmlyc3RfbWlub3IpOwogCi0Jc3RybGNweShkaXNrLT5kZXYuYnVzX2lkLCBkaXNrLT5kaXNrX25hbWUsIEtPQkpfTkFNRV9MRU4pOworCXN0cmxjcHkoZGlzay0+ZGV2LmJ1c19pZCwgZGlzay0+ZGlza19uYW1lLCBCVVNfSURfU0laRSk7CiAJLyogZXd3dy4uLiBzb21lIG9mIHRoZXNlIGJ1Z2dlcnMgaGF2ZSAvIGluIHRoZSBuYW1lLi4uICovCiAJcyA9IHN0cmNocihkaXNrLT5kZXYuYnVzX2lkLCAnLycpOwogCWlmIChzKQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX25ldC5jIGIvZnMvcHJvYy9wcm9jX25ldC5jCmluZGV4IDgzZjM1N2IuLjdiYzI5NmYgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19uZXQuYworKysgYi9mcy9wcm9jL3Byb2NfbmV0LmMKQEAgLTI3LDYgKzI3LDExIEBACiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogCitzdGF0aWMgc3RydWN0IG5ldCAqZ2V0X3Byb2NfbmV0KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIG1heWJlX2dldF9uZXQoUERFX05FVChQREUoaW5vZGUpKSk7Cit9CisKIGludCBzZXFfb3Blbl9uZXQoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBmaWxlICpmLAogCQkgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zICpvcHMsIGludCBzaXplKQogewpAQCAtNTEsNiArNTYsMzAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlcV9vcGVuX25ldCk7CiAKK2ludCBzaW5nbGVfb3Blbl9uZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCWludCAoKnNob3cpKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopKQoreworCWludCBlcnI7CisJc3RydWN0IG5ldCAqbmV0OworCisJZXJyID0gLUVOWElPOworCW5ldCA9IGdldF9wcm9jX25ldChpbm9kZSk7CisJaWYgKG5ldCA9PSBOVUxMKQorCQlnb3RvIGVycl9uZXQ7CisKKwllcnIgPSBzaW5nbGVfb3BlbihmaWxlLCBzaG93LCBuZXQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vcGVuOworCisJcmV0dXJuIDA7CisKK2Vycl9vcGVuOgorCXB1dF9uZXQobmV0KTsKK2Vycl9uZXQ6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNpbmdsZV9vcGVuX25ldCk7CisKIGludCBzZXFfcmVsZWFzZV9uZXQoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBmaWxlICpmKQogewogCXN0cnVjdCBzZXFfZmlsZSAqc2VxOwpAQCAtNjMsNiArOTIsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlcV9yZWxlYXNlX25ldCk7CiAKK2ludCBzaW5nbGVfcmVsZWFzZV9uZXQoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBmaWxlICpmKQoreworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZi0+cHJpdmF0ZV9kYXRhOworCXB1dF9uZXQoc2VxLT5wcml2YXRlKTsKKwlyZXR1cm4gc2luZ2xlX3JlbGVhc2UoaW5vLCBmKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNpbmdsZV9yZWxlYXNlX25ldCk7CisKIHN0YXRpYyBzdHJ1Y3QgbmV0ICpnZXRfcHJvY190YXNrX25ldChzdHJ1Y3QgaW5vZGUgKmRpcikKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CkBAIC0xNTMsMTIgKzE5MCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwcm9jX25ldF9yZW1vdmUpOwogCi1zdHJ1Y3QgbmV0ICpnZXRfcHJvY19uZXQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gbWF5YmVfZ2V0X25ldChQREVfTkVUKFBERShpbm9kZSkpKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGdldF9wcm9jX25ldCk7Ci0KIHN0YXRpYyBfX25ldF9pbml0IGludCBwcm9jX25ldF9uc19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKm5ldGQsICpuZXRfc3RhdGQ7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfdHR5LmMgYi9mcy9wcm9jL3Byb2NfdHR5LmMKaW5kZXggMjFmNDkwZi4uZDE1Mzk0NiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX3R0eS5jCisrKyBiL2ZzL3Byb2MvcHJvY190dHkuYwpAQCAtMTM2LDU0ICsxMzYsNiBAQAogCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgdm9pZCAqIHR0eV9sZGlzY3Nfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuICgqcG9zIDwgTlJfTERJU0NTKSA/IHBvcyA6IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkICogdHR5X2xkaXNjc19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCSgqcG9zKSsrOwotCXJldHVybiAoKnBvcyA8IE5SX0xESVNDUykgPyBwb3MgOiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCB0dHlfbGRpc2NzX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLX0KLQotc3RhdGljIGludCB0dHlfbGRpc2NzX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlpbnQgaSA9ICoobG9mZl90ICopdjsKLQlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKLQkKLQlsZCA9IHR0eV9sZGlzY19nZXQoaSk7Ci0JaWYgKGxkID09IE5VTEwpCi0JCXJldHVybiAwOwotCXNlcV9wcmludGYobSwgIiUtMTBzICUyZFxuIiwgbGQtPm5hbWUgPyBsZC0+bmFtZSA6ICI/Pz8iLCBpKTsKLQl0dHlfbGRpc2NfcHV0KGkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHR0eV9sZGlzY3Nfc2VxX29wcyA9IHsKLQkuc3RhcnQJPSB0dHlfbGRpc2NzX3NlcV9zdGFydCwKLQkubmV4dAk9IHR0eV9sZGlzY3Nfc2VxX25leHQsCi0JLnN0b3AJPSB0dHlfbGRpc2NzX3NlcV9zdG9wLAotCS5zaG93CT0gdHR5X2xkaXNjc19zZXFfc2hvdywKLX07Ci0KLXN0YXRpYyBpbnQgcHJvY190dHlfbGRpc2NzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZ0dHlfbGRpc2NzX3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dHlfbGRpc2NzX3Byb2NfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gcHJvY190dHlfbGRpc2NzX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKLX07Ci0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0dHlfcmVnaXN0ZXJfZHJpdmVyKCkgdG8gaGFuZGxlCiAgKiByZWdpc3RlcmluZyB0aGUgZHJpdmVyJ3MgL3Byb2MgaGFuZGxlciBpbnRvIC9wcm9jL3R0eS9kcml2ZXIvPGZvbz4KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCAxNjRiZDlmLi43NTQ2YTkxIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC02MzYsNyArNjM2LDcgQEAKIAlzdHJ1Y3QgcGFnZW1hcHJlYWQgcG07CiAJaW50IHBhZ2Vjb3VudDsKIAlpbnQgcmV0ID0gLUVTUkNIOwotCXN0cnVjdCBtbV93YWxrIHBhZ2VtYXBfd2FsazsKKwlzdHJ1Y3QgbW1fd2FsayBwYWdlbWFwX3dhbGsgPSB7fTsKIAl1bnNpZ25lZCBsb25nIHNyYzsKIAl1bnNpZ25lZCBsb25nIHN2cGZuOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfdmFkZHI7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IDhjMGU0YjkuLmMxYTdlZmIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC0zOTgsNiArMzk4LDQzIEBACiB9CiAKIC8qKgorICoJX19zeXNmc19hZGRfb25lIC0gYWRkIHN5c2ZzX2RpcmVudCB0byBwYXJlbnQgd2l0aG91dCB3YXJuaW5nCisgKglAYWN4dDogYWRkcm0gY29udGV4dCB0byB1c2UKKyAqCUBzZDogc3lzZnNfZGlyZW50IHRvIGJlIGFkZGVkCisgKgorICoJR2V0IEBhY3h0LT5wYXJlbnRfc2QgYW5kIHNldCBzZC0+c19wYXJlbnQgdG8gaXQgYW5kIGluY3JlbWVudAorICoJbmxpbmsgb2YgcGFyZW50IGlub2RlIGlmIEBzZCBpcyBhIGRpcmVjdG9yeSBhbmQgbGluayBpbnRvIHRoZQorICoJY2hpbGRyZW4gbGlzdCBvZiB0aGUgcGFyZW50LgorICoKKyAqCVRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZXR3ZWVuIGNhbGxzIHRvCisgKglzeXNmc19hZGRybV9zdGFydCgpIGFuZCBzeXNmc19hZGRybV9maW5pc2goKSBhbmQgc2hvdWxkIGJlCisgKglwYXNzZWQgdGhlIHNhbWUgQGFjeHQgYXMgcGFzc2VkIHRvIHN5c2ZzX2FkZHJtX3N0YXJ0KCkuCisgKgorICoJTE9DS0lORzoKKyAqCURldGVybWluZWQgYnkgc3lzZnNfYWRkcm1fc3RhcnQoKS4KKyAqCisgKglSRVRVUk5TOgorICoJMCBvbiBzdWNjZXNzLCAtRUVYSVNUIGlmIGVudHJ5IHdpdGggdGhlIGdpdmVuIG5hbWUgYWxyZWFkeQorICoJZXhpc3RzLgorICovCitpbnQgX19zeXNmc19hZGRfb25lKHN0cnVjdCBzeXNmc19hZGRybV9jeHQgKmFjeHQsIHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQoreworCWlmIChzeXNmc19maW5kX2RpcmVudChhY3h0LT5wYXJlbnRfc2QsIHNkLT5zX25hbWUpKQorCQlyZXR1cm4gLUVFWElTVDsKKworCXNkLT5zX3BhcmVudCA9IHN5c2ZzX2dldChhY3h0LT5wYXJlbnRfc2QpOworCisJaWYgKHN5c2ZzX3R5cGUoc2QpID09IFNZU0ZTX0RJUiAmJiBhY3h0LT5wYXJlbnRfaW5vZGUpCisJCWluY19ubGluayhhY3h0LT5wYXJlbnRfaW5vZGUpOworCisJYWN4dC0+Y250Kys7CisKKwlzeXNmc19saW5rX3NpYmxpbmcoc2QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICoJc3lzZnNfYWRkX29uZSAtIGFkZCBzeXNmc19kaXJlbnQgdG8gcGFyZW50CiAgKglAYWN4dDogYWRkcm0gY29udGV4dCB0byB1c2UKICAqCUBzZDogc3lzZnNfZGlyZW50IHRvIGJlIGFkZGVkCkBAIC00MTksMTkgKzQ1NiwxNSBAQAogICovCiBpbnQgc3lzZnNfYWRkX29uZShzdHJ1Y3Qgc3lzZnNfYWRkcm1fY3h0ICphY3h0LCBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKIHsKLQlpZiAoc3lzZnNfZmluZF9kaXJlbnQoYWN4dC0+cGFyZW50X3NkLCBzZC0+c19uYW1lKSkKLQkJcmV0dXJuIC1FRVhJU1Q7CisJaW50IHJldDsKIAotCXNkLT5zX3BhcmVudCA9IHN5c2ZzX2dldChhY3h0LT5wYXJlbnRfc2QpOwotCi0JaWYgKHN5c2ZzX3R5cGUoc2QpID09IFNZU0ZTX0RJUiAmJiBhY3h0LT5wYXJlbnRfaW5vZGUpCi0JCWluY19ubGluayhhY3h0LT5wYXJlbnRfaW5vZGUpOwotCi0JYWN4dC0+Y250Kys7Ci0KLQlzeXNmc19saW5rX3NpYmxpbmcoc2QpOwotCi0JcmV0dXJuIDA7CisJcmV0ID0gX19zeXNmc19hZGRfb25lKGFjeHQsIHNkKTsKKwlpZiAocmV0ID09IC1FRVhJU1QpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZnM6IGR1cGxpY2F0ZSBmaWxlbmFtZSAnJXMnICIKKwkJICAgICAgICJjYW4gbm90IGJlIGNyZWF0ZWRcbiIsIHNkLT5zX25hbWUpOworCQlXQVJOX09OKDEpOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCBlNzczNWY2Li4zZjA3ODkzIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtNTg1LDkgKzU4NiwxMSBAQAogCiAJbmV3YXR0cnMuaWFfbW9kZSA9IChtb2RlICYgU19JQUxMVUdPKSB8IChpbm9kZS0+aV9tb2RlICYgflNfSUFMTFVHTyk7CiAJbmV3YXR0cnMuaWFfdmFsaWQgPSBBVFRSX01PREUgfCBBVFRSX0NUSU1FOwotCXJjID0gbm90aWZ5X2NoYW5nZSh2aWN0aW0sICZuZXdhdHRycyk7CisJbmV3YXR0cnMuaWFfY3RpbWUgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOworCXJjID0gc3lzZnNfc2V0YXR0cih2aWN0aW0sICZuZXdhdHRycyk7CiAKIAlpZiAocmMgPT0gMCkgeworCQlmc25vdGlmeV9jaGFuZ2UodmljdGltLCBuZXdhdHRycy5pYV92YWxpZCk7CiAJCW11dGV4X2xvY2soJnN5c2ZzX211dGV4KTsKIAkJdmljdGltX3NkLT5zX21vZGUgPSBuZXdhdHRycy5pYV9tb2RlOwogCQltdXRleF91bmxvY2soJnN5c2ZzX211dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5bWxpbmsuYyBiL2ZzL3N5c2ZzL3N5bWxpbmsuYwppbmRleCA4MTdmNTk2Li5hM2JhMjE3IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeW1saW5rLmMKKysrIGIvZnMvc3lzZnMvc3ltbGluay5jCkBAIC0xOSwxMyArMTksOCBAQAogCiAjaW5jbHVkZSAic3lzZnMuaCIKIAotLyoqCi0gKglzeXNmc19jcmVhdGVfbGluayAtIGNyZWF0ZSBzeW1saW5rIGJldHdlZW4gdHdvIG9iamVjdHMuCi0gKglAa29iajoJb2JqZWN0IHdob3NlIGRpcmVjdG9yeSB3ZSdyZSBjcmVhdGluZyB0aGUgbGluayBpbi4KLSAqCUB0YXJnZXQ6CW9iamVjdCB3ZSdyZSBwb2ludGluZyB0by4KLSAqCUBuYW1lOgkJbmFtZSBvZiB0aGUgc3ltbGluay4KLSAqLwotaW50IHN5c2ZzX2NyZWF0ZV9saW5rKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGtvYmplY3QgKiB0YXJnZXQsIGNvbnN0IGNoYXIgKiBuYW1lKQorc3RhdGljIGludCBzeXNmc19kb19jcmVhdGVfbGluayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmplY3QgKnRhcmdldCwKKwkJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgd2FybikKIHsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpwYXJlbnRfc2QgPSBOVUxMOwogCXN0cnVjdCBzeXNmc19kaXJlbnQgKnRhcmdldF9zZCA9IE5VTEw7CkBAIC02NSw3ICs2MCwxMCBAQAogCXRhcmdldF9zZCA9IE5VTEw7CS8qIHJlZmVyZW5jZSBpcyBub3cgb3duZWQgYnkgdGhlIHN5bWxpbmsgKi8KIAogCXN5c2ZzX2FkZHJtX3N0YXJ0KCZhY3h0LCBwYXJlbnRfc2QpOwotCWVycm9yID0gc3lzZnNfYWRkX29uZSgmYWN4dCwgc2QpOworCWlmICh3YXJuKQorCQllcnJvciA9IHN5c2ZzX2FkZF9vbmUoJmFjeHQsIHNkKTsKKwllbHNlCisJCWVycm9yID0gX19zeXNmc19hZGRfb25lKCZhY3h0LCBzZCk7CiAJc3lzZnNfYWRkcm1fZmluaXNoKCZhY3h0KTsKIAogCWlmIChlcnJvcikKQEAgLTgwLDYgKzc4LDMzIEBACiB9CiAKIC8qKgorICoJc3lzZnNfY3JlYXRlX2xpbmsgLSBjcmVhdGUgc3ltbGluayBiZXR3ZWVuIHR3byBvYmplY3RzLgorICoJQGtvYmo6CW9iamVjdCB3aG9zZSBkaXJlY3Rvcnkgd2UncmUgY3JlYXRpbmcgdGhlIGxpbmsgaW4uCisgKglAdGFyZ2V0OglvYmplY3Qgd2UncmUgcG9pbnRpbmcgdG8uCisgKglAbmFtZToJCW5hbWUgb2YgdGhlIHN5bWxpbmsuCisgKi8KK2ludCBzeXNmc19jcmVhdGVfbGluayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmplY3QgKnRhcmdldCwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gc3lzZnNfZG9fY3JlYXRlX2xpbmsoa29iaiwgdGFyZ2V0LCBuYW1lLCAxKTsKK30KKworLyoqCisgKglzeXNmc19jcmVhdGVfbGlua19ub3dhcm4gLSBjcmVhdGUgc3ltbGluayBiZXR3ZWVuIHR3byBvYmplY3RzLgorICoJQGtvYmo6CW9iamVjdCB3aG9zZSBkaXJlY3Rvcnkgd2UncmUgY3JlYXRpbmcgdGhlIGxpbmsgaW4uCisgKglAdGFyZ2V0OglvYmplY3Qgd2UncmUgcG9pbnRpbmcgdG8uCisgKglAbmFtZToJCW5hbWUgb2YgdGhlIHN5bWxpbmsuCisgKgorICoJVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGFzIHN5c2ZfY3JlYXRlX2xpbmsoKSwgYnV0IGl0CisgKglkb2Vzbid0IHdhcm4gaWYgdGhlIGxpbmsgYWxyZWFkeSBleGlzdHMuCisgKi8KK2ludCBzeXNmc19jcmVhdGVfbGlua19ub3dhcm4oc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqZWN0ICp0YXJnZXQsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHN5c2ZzX2RvX2NyZWF0ZV9saW5rKGtvYmosIHRhcmdldCwgbmFtZSwgMCk7Cit9CisKKy8qKgogICoJc3lzZnNfcmVtb3ZlX2xpbmsgLSByZW1vdmUgc3ltbGluayBpbiBvYmplY3QncyBkaXJlY3RvcnkuCiAgKglAa29iajoJb2JqZWN0IHdlJ3JlIGFjdGluZyBmb3IuCiAgKglAbmFtZToJbmFtZSBvZiB0aGUgc3ltbGluayB0byByZW1vdmUuCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9zeXNmcy5oIGIvZnMvc3lzZnMvc3lzZnMuaAppbmRleCBjZTRlMTVmOC4uYTVkYjQ5NiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC0xMDcsNiArMTA3LDcgQEAKIHZvaWQgc3lzZnNfcHV0X2FjdGl2ZV90d28oc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwogdm9pZCBzeXNmc19hZGRybV9zdGFydChzdHJ1Y3Qgc3lzZnNfYWRkcm1fY3h0ICphY3h0LAogCQkgICAgICAgc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkKTsKK2ludCBfX3N5c2ZzX2FkZF9vbmUoc3RydWN0IHN5c2ZzX2FkZHJtX2N4dCAqYWN4dCwgc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwogaW50IHN5c2ZzX2FkZF9vbmUoc3RydWN0IHN5c2ZzX2FkZHJtX2N4dCAqYWN4dCwgc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwogdm9pZCBzeXNmc19yZW1vdmVfb25lKHN0cnVjdCBzeXNmc19hZGRybV9jeHQgKmFjeHQsIHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKIHZvaWQgc3lzZnNfYWRkcm1fZmluaXNoKHN0cnVjdCBzeXNmc19hZGRybV9jeHQgKmFjeHQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9hZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2FkbWEuaAppbmRleCA5MGQxNGVlLi5lZjRmNWRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2FkbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2FkbWEuaApAQCAtMTk4LDE3ICsxOTgsMTMgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBpb3BfY2hhbl94b3Jfc2xvdF9jb3VudChzaXplX3QgbGVuLCBpbnQgc3JjX2NudCwgaW50ICpzbG90c19wZXJfb3ApCiB7Ci0JaW50IG51bV9zbG90czsKLQkvKiBzbG90c190b19maW5kID0gMSBmb3IgYmFzaWMgZGVzY3JpcHRvciArIDEgcGVyIDQgc291cmNlcyBhYm92ZSAxCi0JICogKDEgc291cmNlID0+IDggYnl0ZXMpICgxIHNsb3QgPT4gMzIgYnl0ZXMpCi0JICovCi0JbnVtX3Nsb3RzID0gMSArICgoKHNyY19jbnQgLSAxKSA8PCAzKSA+PiA1KTsKLQlpZiAoKChzcmNfY250IC0gMSkgPDwgMykgJiAweDFmKQotCQludW1fc2xvdHMrKzsKLQotCSpzbG90c19wZXJfb3AgPSBudW1fc2xvdHM7Ci0KLQlyZXR1cm4gbnVtX3Nsb3RzOworCXN0YXRpYyBjb25zdCBjaGFyIHNsb3RfY291bnRfdGFibGVbXSA9IHsgMSwgMiwgMiwgMiwKKwkJCQkJCSAyLCAzLCAzLCAzLAorCQkJCQkJIDMsIDQsIDQsIDQsCisJCQkJCQkgNCwgNSwgNSwgNSwKKwkJCQkJCX07CisJKnNsb3RzX3Blcl9vcCA9IHNsb3RfY291bnRfdGFibGVbc3JjX2NudCAtIDFdOworCXJldHVybiAqc2xvdHNfcGVyX29wOwogfQogCiAjZGVmaW5lIEFETUFfTUFYX0JZVEVfQ09VTlQJKDE2ICogMTAyNCAqIDEwMjQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvY20teDI3MC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2NtLXgyNzAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhmYWM5ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvY20teDI3MC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtcHhhL2NtLXgyNzAuaAotICoKLSAqIENvcHlyaWdodCBDb21wdWxhYiBMdGQuLCAyMDAzLCAyMDA3Ci0gKiBNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotCi0vKiBDTS14MjcwIGRldmljZSBwaHlzaWNhbCBhZGRyZXNzZXMgKi8KLSNkZWZpbmUgQ01YMjcwX0NTMV9QSFlTCQkoUFhBX0NTMV9QSFlTKQotI2RlZmluZSBNQVJBVEhPTl9QSFlTCQkoUFhBX0NTMl9QSFlTKQotI2RlZmluZSBDTVgyNzBfSURFMTA0X1BIWVMJKFBYQV9DUzNfUEhZUykKLSNkZWZpbmUgQ01YMjcwX0lUODE1Ml9QSFlTCShQWEFfQ1M0X1BIWVMpCi0KLS8qIFN0YXRpY2FsbHkgbWFwcGVkIHJlZ2lvbnMgKi8KLSNkZWZpbmUgQ01YMjcwX1ZJUlRfQkFTRQkJKDB4ZTgwMDAwMDApCi0jZGVmaW5lIENNWDI3MF9JVDgxNTJfVklSVAkJKENNWDI3MF9WSVJUX0JBU0UpCi0jZGVmaW5lIENNWDI3MF9JREUxMDRfVklSVAkJKENNWDI3MF9JVDgxNTJfVklSVCArIFNaXzY0TSkKLQotLyogR1BJTyByZWxhdGVkIGRlZmluaXRpb25zICovCi0jZGVmaW5lIEdQSU9fSVQ4MTUyX0lSUQkJCSgyMikKLQotI2RlZmluZSBJUlFfR1BJT19JVDgxNTJfSVJRCUlSUV9HUElPKEdQSU9fSVQ4MTUyX0lSUSkKLSNkZWZpbmUgUE1FX0lSUQkJCUlSUV9HUElPKDApCi0jZGVmaW5lIENNWDI3MF9JREVfSVJRCQlJUlFfR1BJTygxMDApCi0jZGVmaW5lIENNWDI3MF9HUElSUTEJCUlSUV9HUElPKDEwMSkKLSNkZWZpbmUgQ01YMjcwX1RPVUNISVJRCQlJUlFfR1BJTyg5NikKLSNkZWZpbmUgQ01YMjcwX0VUSElSUQkJSVJRX0dQSU8oMTApCi0jZGVmaW5lIENNWDI3MF9HRlhJUlEJCUlSUV9HUElPKDk1KQotI2RlZmluZSBDTVgyNzBfTkFORElSUQkJSVJRX0dQSU8oODkpCi0jZGVmaW5lIENNWDI3MF9NTUNfSVJRCQlJUlFfR1BJTyg4MykKLQotLyogUENNQ0lBIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgUENDX0RFVEVDVCh4KQkoR1BMUig4NCAtICh4KSkgJiBHUElPX2JpdCg4NCAtICh4KSkpCi0jZGVmaW5lIFBDQ19SRUFEWSh4KQkoR1BMUig4MiAtICh4KSkgJiBHUElPX2JpdCg4MiAtICh4KSkpCi0KLSNkZWZpbmUgUENNQ0lBX1MwX0NEX1ZBTElECQlJUlFfR1BJTyg4NCkKLSNkZWZpbmUgUENNQ0lBX1MwX0NEX1ZBTElEX0VER0UJCUdQSU9fQk9USF9FREdFUwotCi0jZGVmaW5lIFBDTUNJQV9TMV9DRF9WQUxJRAkJSVJRX0dQSU8oODMpCi0jZGVmaW5lIFBDTUNJQV9TMV9DRF9WQUxJRF9FREdFCQlHUElPX0JPVEhfRURHRVMKLQotI2RlZmluZSBQQ01DSUFfUzBfUkRZSU5UCQlJUlFfR1BJTyg4MikKLSNkZWZpbmUgUENNQ0lBX1MxX1JEWUlOVAkJSVJRX0dQSU8oODEpCi0KLSNkZWZpbmUgUENNQ0lBX1JFU0VUX0dQSU8JCTUzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZXNlcmllcy1ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZXNlcmllcy1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5MGIxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9lc2VyaWVzLWdwaW8uaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIGVzZXJpZXMtZ3Bpby5oCisgKgorICogIENvcHlyaWdodCAoQykgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisvKiBlLXNlcmllcyBwb3dlciBidXR0b24gKi8KKyNkZWZpbmUgR1BJT19FU0VSSUVTX1BPV0VSQlROICAgICAwCisKKy8qIFVEQyBHUElPIGRlZmluaXRpb25zICovCisjZGVmaW5lIEdQSU9fRTdYWF9VU0JfRElTQyAgICAgICAxMworI2RlZmluZSBHUElPX0U3WFhfVVNCX1BVTExVUCAgICAgIDMKKworI2RlZmluZSBHUElPX0U4MDBfVVNCX0RJU0MgICAgICAgIDQKKyNkZWZpbmUgR1BJT19FODAwX1VTQl9QVUxMVVAgICAgIDg0CisKKy8qIGU3NDAgUENNQ0lBIEdQSU8gZGVmaW5pdGlvbnMgKi8KKy8qIE5vdGU6IFBXUjEgc2VlbXMgdG8gYmUgaW52ZXJ0ZWQgKi8KKyNkZWZpbmUgR1BJT19FNzQwX1BDTUNJQV9DRDAgICAgICA4CisjZGVmaW5lIEdQSU9fRTc0MF9QQ01DSUFfQ0QxICAgICA0NAorI2RlZmluZSBHUElPX0U3NDBfUENNQ0lBX1JEWTAgICAgMTEKKyNkZWZpbmUgR1BJT19FNzQwX1BDTUNJQV9SRFkxICAgICA2CisjZGVmaW5lIEdQSU9fRTc0MF9QQ01DSUFfUlNUMCAgICAyNworI2RlZmluZSBHUElPX0U3NDBfUENNQ0lBX1JTVDEgICAgMjQKKyNkZWZpbmUgR1BJT19FNzQwX1BDTUNJQV9QV1IwICAgIDIwCisjZGVmaW5lIEdQSU9fRTc0MF9QQ01DSUFfUFdSMSAgICAyMworCisvKiBlNzUwIFBDTUNJQSBHUElPIGRlZmluaXRpb25zICovCisjZGVmaW5lIEdQSU9fRTc1MF9QQ01DSUFfQ0QwICAgICAgOAorI2RlZmluZSBHUElPX0U3NTBfUENNQ0lBX1JEWTAgICAgMTIKKyNkZWZpbmUgR1BJT19FNzUwX1BDTUNJQV9SU1QwICAgIDI3CisjZGVmaW5lIEdQSU9fRTc1MF9QQ01DSUFfUFdSMCAgICAyMAorCisvKiBlODAwIFBDTUNJQSBHUElPIGRlZmluaXRpb25zICovCisjZGVmaW5lIEdQSU9fRTgwMF9QQ01DSUFfUlNUMCAgICA2OQorI2RlZmluZSBHUElPX0U4MDBfUENNQ0lBX1JTVDEgICAgNzIKKyNkZWZpbmUgR1BJT19FODAwX1BDTUNJQV9QV1IwICAgIDIwCisjZGVmaW5lIEdQSU9fRTgwMF9QQ01DSUFfUFdSMSAgICA3MworCisvKiBlN3h4IElyREEgcG93ZXIgY29udHJvbCAqLworI2RlZmluZSBHUElPX0U3WFhfSVJfT04gICAgICAgICAgMzgKKworLyogQVNJQyByZWxhdGVkIEdQSU9zICovCisjZGVmaW5lIEdQSU9fRVNFUklFU19UTUlPX0lSUSAgICAgICAgNQorI2RlZmluZSBHUElPX0U4MDBfQU5HRUxYX0lSUSAgICAgIDgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9lc2VyaWVzLWlycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2VzZXJpZXMtaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhOTNkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9lc2VyaWVzLWlycS5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiAgZXNlcmllcy1pcnEuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2RlZmluZSBBTkdFTFhfSVJRX0JBU0UgKElSUV9CT0FSRF9TVEFSVCs4KQorI2RlZmluZSBJUlFfQU5HRUxYKG4pIChBTkdFTFhfSVJRX0JBU0UgKyAobikpCisKKyNkZWZpbmUgQU5HRUxYX1JEWTBfSVJRIElSUV9BTkdFTFgoMCkKKyNkZWZpbmUgQU5HRUxYX1NUMF9JUlEgIElSUV9BTkdFTFgoMSkKKyNkZWZpbmUgQU5HRUxYX0NEMF9JUlEgIElSUV9BTkdFTFgoMikKKyNkZWZpbmUgQU5HRUxYX1JEWTFfSVJRIElSUV9BTkdFTFgoMykKKyNkZWZpbmUgQU5HRUxYX1NUMV9JUlEgIElSUV9BTkdFTFgoNCkKKyNkZWZpbmUgQU5HRUxYX0NEMV9JUlEgIElSUV9BTkdFTFgoNSkKKworI2RlZmluZSBUTUlPX0lSUV9CQVNFIChJUlFfQk9BUkRfU1RBUlQrMCkKKyNkZWZpbmUgSVJRX1RNSU8obikgKFRNSU9fSVJRX0JBU0UgKyAobikpCisKKyNkZWZpbmUgVE1JT19TRF9JUlEgICAgIElSUV9UTUlPKDEpCisjZGVmaW5lIFRNSU9fVVNCX0lSUSAgICBJUlFfVE1JTygyKQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9oYXJkd2FyZS5oCmluZGV4IGQ5YWY2ZGEuLjk3OWE0NTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9oYXJkd2FyZS5oCkBAIC02OSw2ICs2OSwxMiBAQAogCQlfaWQgPT0gMHgyMTI7CQkJCVwKIAl9KQogCisjZGVmaW5lIF9fY3B1X2lzX3B4YTI1NShpZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXVuc2lnbmVkIGludCBfaWQgPSAoaWQpID4+IDQgJiAweGZmZjsgICBcCisJCV9pZCA9PSAweDJkMDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJIH0pCisKICNkZWZpbmUgX19jcHVfaXNfcHhhMjV4KGlkKQkJCQlcCiAJKHsJCQkJCQlcCiAJCXVuc2lnbmVkIGludCBfaWQgPSAoaWQpID4+IDQgJiAweGZmZjsJXApAQCAtNzYsNiArODIsNyBAQAogCX0pCiAjZWxzZQogI2RlZmluZSBfX2NwdV9pc19weGEyMXgoaWQpCSgwKQorI2RlZmluZSBfX2NwdV9pc19weGEyNTUoaWQpCSgwKQogI2RlZmluZSBfX2NwdV9pc19weGEyNXgoaWQpCSgwKQogI2VuZGlmCiAKQEAgLTExOSwxMSArMTI2LDI2IEBACiAjZGVmaW5lIF9fY3B1X2lzX3B4YTMyMChpZCkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DUFVfUFhBOTMwCisjZGVmaW5lIF9fY3B1X2lzX3B4YTkzMChpZCkJCQkJXAorCSh7CQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgX2lkID0gKGlkKSA+PiA0ICYgMHhmZmY7CVwKKwkJX2lkID09IDB4NjgzOwkJXAorCSB9KQorI2Vsc2UKKyNkZWZpbmUgX19jcHVfaXNfcHhhOTMwKGlkKQkoMCkKKyNlbmRpZgorCiAjZGVmaW5lIGNwdV9pc19weGEyMXgoKQkJCQkJXAogCSh7CQkJCQkJXAogCQlfX2NwdV9pc19weGEyMXgocmVhZF9jcHVpZF9pZCgpKTsJXAogCX0pCiAKKyNkZWZpbmUgY3B1X2lzX3B4YTI1NSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19jcHVfaXNfcHhhMjU1KHJlYWRfY3B1aWRfaWQoKSk7ICAgICAgIFwKKwl9KQorCiAjZGVmaW5lIGNwdV9pc19weGEyNXgoKQkJCQkJXAogCSh7CQkJCQkJXAogCQlfX2NwdV9pc19weGEyNXgocmVhZF9jcHVpZF9pZCgpKTsJXApAQCAtMTQ5LDYgKzE3MSwxMiBAQAogCQlfX2NwdV9pc19weGEzMjAocmVhZF9jcHVpZF9pZCgpKTsJXAogCSB9KQogCisjZGVmaW5lIGNwdV9pc19weGE5MzAoKQkJCQkJXAorCSh7CQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgaWQgPSByZWFkX2NwdWlkKENQVUlEX0lEKTsJXAorCQlfX2NwdV9pc19weGE5MzAoaWQpOwkJCVwKKwkgfSkKKwogLyoKICAqIENQVUlEIENvcmUgR2VuZXJhdGlvbiBCaXQKICAqIDw9IDB4MiBmb3IgcHhhMjF4L3B4YTI1eC9weGEyNngvcHhhMjd4CkBAIC0xOTYsNiArMjI0LDExIEBACiAgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X21lbWNsa19mcmVxdWVuY3lfMTBraHoodm9pZCk7CiAKKy8qCisgKiByZWdpc3RlciBHUElPIGFzIHJlc2V0IGdlbmVyYXRvcgorICovCitleHRlcm4gaW50IGluaXRfZ3Bpb19yZXNldChpbnQgZ3Bpbyk7CisKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9BUk1DT1JFKSAmJiBkZWZpbmVkKENPTkZJR19QQ0kpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaAppbmRleCBiNmM4ZmUzLi45NDEzMTIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnFzLmgKQEAgLTE4MCwxMCArMTgwLDEzIEBACiAjZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0xPQ09NT19TUElfVEVORCArIDEpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0xVQkJPQ0spIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzApIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX01BQ0hfVE9TQSkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfTUFDSF9NQUlOU1RPTkUpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX01BQ0hfUENNMDI3KSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19NQUNIX01BR0lDSUFOKQogI2RlZmluZSBOUl9JUlFTCQkJKElSUV9CT0FSRF9FTkQpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX1pZTE9OSVRFKQorI2RlZmluZSBOUl9JUlFTCQkJKElSUV9CT0FSRF9TVEFSVCArIDMyKQogI2Vsc2UKICNkZWZpbmUgTlJfSVJRUwkJCShJUlFfQk9BUkRfU1RBUlQpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZnAtcHhhMnh4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWZwLXB4YTJ4eC5oCmluZGV4IGRiOGQ4OTAuLjhkZTFjMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZnAtcHhhMnh4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21mcC1weGEyeHguaApAQCAtMTI4LDUgKzEyOCw2IEBACiAjZGVmaW5lIEdQSU84NF9HUElPCU1GUF9DRkdfSU4oR1BJTzg0LCBBRjApCiAKIGV4dGVybiB2b2lkIHB4YTJ4eF9tZnBfY29uZmlnKHVuc2lnbmVkIGxvbmcgKm1mcF9jZmdzLCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIHB4YTJ4eF9tZnBfc2V0X2xwbShpbnQgbWZwLCB1bnNpZ25lZCBsb25nIGxwbSk7CiBleHRlcm4gaW50IGdwaW9fc2V0X3dha2UodW5zaWduZWQgaW50IGdwaW8sIHVuc2lnbmVkIGludCBvbik7CiAjZW5kaWYgLyogX19BU01fQVJDSF9NRlBfUFhBMlhYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZnAtcHhhOTMwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWZwLXB4YTkzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZTk0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWZwLXB4YTkzMC5oCkBAIC0wLDAgKzEsNDkxIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21mcC1weGE5MzAuaAorICoKKyAqIFBYQTkzMCBzcGVjaWZpYyBNRlAgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTl4eF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTl4eF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9tZnAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZnAtcHhhM3h4Lmg+CisKKy8qIEdQSU8gKi8KKyNkZWZpbmUgR1BJTzQ2X0dQSU8JCU1GUF9DRkcoR1BJTzQ2LCBBRjApCisjZGVmaW5lIEdQSU80OV9HUElPCQlNRlBfQ0ZHKEdQSU80OSwgQUYwKQorI2RlZmluZSBHUElPNTBfR1BJTwkJTUZQX0NGRyhHUElPNTAsIEFGMCkKKyNkZWZpbmUgR1BJTzUxX0dQSU8JCU1GUF9DRkcoR1BJTzUxLCBBRjApCisjZGVmaW5lIEdQSU81Ml9HUElPCQlNRlBfQ0ZHKEdQSU81MiwgQUYwKQorI2RlZmluZSBHUElPNTZfR1BJTwkJTUZQX0NGRyhHUElPNTYsIEFGMCkKKyNkZWZpbmUgR1BJTzU4X0dQSU8JCU1GUF9DRkcoR1BJTzU4LCBBRjApCisjZGVmaW5lIEdQSU81OV9HUElPCQlNRlBfQ0ZHKEdQSU81OSwgQUYwKQorI2RlZmluZSBHUElPNjBfR1BJTwkJTUZQX0NGRyhHUElPNjAsIEFGMCkKKyNkZWZpbmUgR1BJTzYxX0dQSU8JCU1GUF9DRkcoR1BJTzYxLCBBRjApCisjZGVmaW5lIEdQSU82Ml9HUElPCQlNRlBfQ0ZHKEdQSU82MiwgQUYwKQorCisjZGVmaW5lIEdTSU1fVUNMS19HUElPXzc5CU1GUF9DRkcoR1NJTV9VQ0xLLCBBRjApCisjZGVmaW5lIEdTSU1fVUlPX0dQSU9fODAJTUZQX0NGRyhHU0lNX1VJTywgQUYwKQorI2RlZmluZSBHU0lNX25VUlNUX0dQSU9fODEJTUZQX0NGRyhHU0lNX25VUlNULCBBRjApCisjZGVmaW5lIEdTSU1fVURFVF9HUElPXzgyCU1GUF9DRkcoR1NJTV9VREVULCBBRjApCisKKyNkZWZpbmUgREZfSU8xNV9HUElPXzI4CQlNRlBfQ0ZHKERGX0lPMTUsIEFGMCkKKyNkZWZpbmUgREZfSU8xNF9HUElPXzI5CQlNRlBfQ0ZHKERGX0lPMTQsIEFGMCkKKyNkZWZpbmUgREZfSU8xM19HUElPXzMwCQlNRlBfQ0ZHKERGX0lPMTMsIEFGMCkKKyNkZWZpbmUgREZfSU8xMl9HUElPXzMxCQlNRlBfQ0ZHKERGX0lPMTIsIEFGMCkKKyNkZWZpbmUgREZfSU8xMV9HUElPXzMyCQlNRlBfQ0ZHKERGX0lPMTEsIEFGMCkKKyNkZWZpbmUgREZfSU8xMF9HUElPXzMzCQlNRlBfQ0ZHKERGX0lPMTAsIEFGMCkKKyNkZWZpbmUgREZfSU85X0dQSU9fMzQJCU1GUF9DRkcoREZfSU85LCBBRjApCisjZGVmaW5lIERGX0lPOF9HUElPXzM1CQlNRlBfQ0ZHKERGX0lPOCwgQUYwKQorI2RlZmluZSBERl9JTzdfR1BJT18zNgkJTUZQX0NGRyhERl9JTzcsIEFGMCkKKyNkZWZpbmUgREZfSU82X0dQSU9fMzcJCU1GUF9DRkcoREZfSU82LCBBRjApCisjZGVmaW5lIERGX0lPNV9HUElPXzM4CQlNRlBfQ0ZHKERGX0lPNSwgQUYwKQorI2RlZmluZSBERl9JTzRfR1BJT18zOQkJTUZQX0NGRyhERl9JTzQsIEFGMCkKKyNkZWZpbmUgREZfSU8zX0dQSU9fNDAJCU1GUF9DRkcoREZfSU8zLCBBRjApCisjZGVmaW5lIERGX0lPMl9HUElPXzQxCQlNRlBfQ0ZHKERGX0lPMiwgQUYwKQorI2RlZmluZSBERl9JTzFfR1BJT180MgkJTUZQX0NGRyhERl9JTzEsIEFGMCkKKyNkZWZpbmUgREZfSU8wX0dQSU9fNDMJCU1GUF9DRkcoREZfSU8wLCBBRjApCisjZGVmaW5lIERGX25DUzBfR1BJT180NAkJTUZQX0NGRyhERl9uQ1MwLCBBRjApCisjZGVmaW5lIERGX25DUzFfR1BJT180NQkJTUZQX0NGRyhERl9uQ1MxLCBBRjApCisjZGVmaW5lIERGX25XRV9HUElPXzQ2CQlNRlBfQ0ZHKERGX25XRSwgQUYwKQorI2RlZmluZSBERl9uUkVfbk9FX0dQSU9fNDcJTUZQX0NGRyhERl9uUkVfbk9FLCBBRjApCisjZGVmaW5lIERGX0NMRV9uT0VfR1BJT180OAlNRlBfQ0ZHKERGX0NMRV9uT0UsIEFGMCkKKyNkZWZpbmUgREZfbkFEVjFfQUxFX0dQSU9fNDkJTUZQX0NGRyhERl9uQURWMV9BTEUsIEFGMCkKKyNkZWZpbmUgREZfbkFEVjJfQUxFX0dQSU9fNTAJTUZQX0NGRyhERl9uQURWMl9BTEUsIEFGMCkKKyNkZWZpbmUgREZfSU5UX1JuQl9HUElPXzUxCU1GUF9DRkcoREZfSU5UX1JuQiwgQUYwKQorI2RlZmluZSBERl9TQ0xLX0VfR1BJT181MglNRlBfQ0ZHKERGX1NDTEtfRSwgQUYwKQorCisjZGVmaW5lIERGX0FERFIwX0dQSU9fNTMJTUZQX0NGRyhERl9BRERSMCwgQUYwKQorI2RlZmluZSBERl9BRERSMV9HUElPXzU0CU1GUF9DRkcoREZfQUREUjEsIEFGMCkKKyNkZWZpbmUgREZfQUREUjJfR1BJT181NQlNRlBfQ0ZHKERGX0FERFIyLCBBRjApCisjZGVmaW5lIERGX0FERFIzX0dQSU9fNTYJTUZQX0NGRyhERl9BRERSMywgQUYwKQorI2RlZmluZSBuWENWUkVOX0dQSU9fNTcJCU1GUF9DRkcoblhDVlJFTiwgQUYwKQorI2RlZmluZSBuTFVBX0dQSU9fNTgJCU1GUF9DRkcobkxVQSwgQUYwKQorI2RlZmluZSBuTExBX0dQSU9fNTkJCU1GUF9DRkcobkxMQSwgQUYwKQorI2RlZmluZSBuQkUwX0dQSU9fNjAJCU1GUF9DRkcobkJFMCwgQUYwKQorI2RlZmluZSBuQkUxX0dQSU9fNjEJCU1GUF9DRkcobkJFMSwgQUYwKQorI2RlZmluZSBSRFlfR1BJT182MgkJTUZQX0NGRyhSRFksIEFGMCkKKworLyogQ2hpcCBTZWxlY3QgKi8KKyNkZWZpbmUgREZfbkNTMF9uQ1MyCQlNRlBfQ0ZHX0xQTShERl9uQ1MwLCBBRjMsIFBVTExfSElHSCkKKyNkZWZpbmUgREZfbkNTMV9uQ1MzCQlNRlBfQ0ZHX0xQTShERl9uQ1MxLCBBRjMsIFBVTExfSElHSCkKKworLyogQUM5NyAqLworI2RlZmluZSBHUElPODNfQkFDOTdfU1lTQ0xLCU1GUF9DRkcoR1BJTzgzLCBBRjMpCisjZGVmaW5lIEdQSU84NF9CQUM5N19TREFUQV9JTjAJTUZQX0NGRyhHUElPODQsIEFGMykKKyNkZWZpbmUgR1BJTzg1X0JBQzk3X0JJVENMSwlNRlBfQ0ZHKEdQSU84NSwgQUYzKQorI2RlZmluZSBHUElPODZfQkFDOTdfblJFU0VUCU1GUF9DRkcoR1BJTzg2LCBBRjMpCisjZGVmaW5lIEdQSU84N19CQUM5N19TWU5DCU1GUF9DRkcoR1BJTzg3LCBBRjMpCisjZGVmaW5lIEdQSU84OF9CQUM5N19TREFUQV9PVVQJTUZQX0NGRyhHUElPODgsIEFGMykKKworLyogSTJDICovCisjZGVmaW5lIEdQSU8zOV9DSTJDX1NDTAkJTUZQX0NGR19MUE0oR1BJTzM5LCBBRjMsIFBVTExfSElHSCkKKyNkZWZpbmUgR1BJTzQwX0NJMkNfU0RBCQlNRlBfQ0ZHX0xQTShHUElPNDAsIEFGMywgUFVMTF9ISUdIKQorCisjZGVmaW5lIEdQSU81MV9DSTJDX1NDTAkJTUZQX0NGR19MUE0oR1BJTzUxLCBBRjMsIFBVTExfSElHSCkKKyNkZWZpbmUgR1BJTzUyX0NJMkNfU0RBCQlNRlBfQ0ZHX0xQTShHUElPNTIsIEFGMywgUFVMTF9ISUdIKQorCisjZGVmaW5lIEdQSU82M19DSTJDX1NDTAkJTUZQX0NGR19MUE0oR1BJTzYzLCBBRjQsIFBVTExfSElHSCkKKyNkZWZpbmUgR1BJTzY0X0NJMkNfU0RBCQlNRlBfQ0ZHX0xQTShHUElPNjQsIEFGNCwgUFVMTF9ISUdIKQorCisjZGVmaW5lIEdQSU83N19DSTJDX1NDTAkJTUZQX0NGR19MUE0oR1BJTzc3LCBBRjIsIFBVTExfSElHSCkKKyNkZWZpbmUgR1BJTzc4X0NJMkNfU0RBCQlNRlBfQ0ZHX0xQTShHUElPNzgsIEFGMiwgUFVMTF9ISUdIKQorCisjZGVmaW5lIEdQSU84OV9DSTJDX1NDTAkJTUZQX0NGR19MUE0oR1BJTzg5LCBBRjEsIFBVTExfSElHSCkKKyNkZWZpbmUgR1BJTzkwX0NJMkNfU0RBCQlNRlBfQ0ZHX0xQTShHUElPOTAsIEFGMSwgUFVMTF9ISUdIKQorCisjZGVmaW5lIEdQSU85NV9DSTJDX1NDTAkJTUZQX0NGR19MUE0oR1BJTzk1LCBBRjEsIFBVTExfSElHSCkKKyNkZWZpbmUgR1BJTzk2X0NJMkNfU0RBCQlNRlBfQ0ZHX0xQTShHUElPOTYsIEFGMSwgUFVMTF9ISUdIKQorCisjZGVmaW5lIEdQSU85N19DSTJDX1NDTAkJTUZQX0NGR19MUE0oR1BJTzk3LCBBRjMsIFBVTExfSElHSCkKKyNkZWZpbmUgR1BJTzk4X0NJMkNfU0RBCQlNRlBfQ0ZHX0xQTShHUElPOTgsIEFGMywgUFVMTF9ISUdIKQorCisvKiBRQ0kgKi8KKyNkZWZpbmUgR1BJTzYzX0NJX0REXzkJCU1GUF9DRkdfTFBNKEdQSU82MywgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzY0X0NJX0REXzgJCU1GUF9DRkdfTFBNKEdQSU82NCwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzY1X0NJX0REXzcJCU1GUF9DRkdfTFBNKEdQSU82NSwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzY2X0NJX0REXzYJCU1GUF9DRkdfTFBNKEdQSU82NiwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzY3X0NJX0REXzUJCU1GUF9DRkdfTFBNKEdQSU82NywgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzY4X0NJX0REXzQJCU1GUF9DRkdfTFBNKEdQSU82OCwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzY5X0NJX0REXzMJCU1GUF9DRkdfTFBNKEdQSU82OSwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzcwX0NJX0REXzIJCU1GUF9DRkdfTFBNKEdQSU83MCwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzcxX0NJX0REXzEJCU1GUF9DRkdfTFBNKEdQSU83MSwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzcyX0NJX0REXzAJCU1GUF9DRkdfTFBNKEdQSU83MiwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzczX0NJX0hTWU5DCQlNRlBfQ0ZHX0xQTShHUElPNzMsIEFGMSwgUFVMTF9MT1cpCisjZGVmaW5lIEdQSU83NF9DSV9WU1lOQwkJTUZQX0NGR19MUE0oR1BJTzc0LCBBRjEsIFBVTExfTE9XKQorI2RlZmluZSBHUElPNzVfQ0lfTUNMSwkJTUZQX0NGR19MUE0oR1BJTzc1LCBBRjEsIFBVTExfTE9XKQorI2RlZmluZSBHUElPNzZfQ0lfUENMSwkJTUZQX0NGR19MUE0oR1BJTzc2LCBBRjEsIFBVTExfTE9XKQorCisvKiBLRVlQQUQgKi8KKyNkZWZpbmUgR1BJTzRfS1BfREtJTl80CQlNRlBfQ0ZHX0xQTShHUElPNCwgQUYzLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzVfS1BfREtJTl81CQlNRlBfQ0ZHX0xQTShHUElPNSwgQUYzLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzZfS1BfREtJTl82CQlNRlBfQ0ZHX0xQTShHUElPNiwgQUYzLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzdfS1BfREtJTl83CQlNRlBfQ0ZHX0xQTShHUElPNywgQUYzLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzhfS1BfREtJTl80CQlNRlBfQ0ZHX0xQTShHUElPOCwgQUYzLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzlfS1BfREtJTl81CQlNRlBfQ0ZHX0xQTShHUElPOSwgQUYzLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzEwX0tQX0RLSU5fNglNRlBfQ0ZHX0xQTShHUElPMTAsIEFGMywgRkxPQVQpCisjZGVmaW5lIEdQSU8xMV9LUF9ES0lOXzcJTUZQX0NGR19MUE0oR1BJTzExLCBBRjMsIEZMT0FUKQorCisjZGVmaW5lIEdQSU8xMl9LUF9ES0lOXzAJTUZQX0NGR19MUE0oR1BJTzEyLCBBRjIsIEZMT0FUKQorI2RlZmluZSBHUElPMTNfS1BfREtJTl8xCU1GUF9DRkdfTFBNKEdQSU8xMywgQUYyLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzE0X0tQX0RLSU5fMglNRlBfQ0ZHX0xQTShHUElPMTQsIEFGMiwgRkxPQVQpCisjZGVmaW5lIEdQSU8xNV9LUF9ES0lOXzMJTUZQX0NGR19MUE0oR1BJTzE1LCBBRjIsIEZMT0FUKQorCisjZGVmaW5lIEdQSU80MV9LUF9ES0lOXzAJTUZQX0NGR19MUE0oR1BJTzQxLCBBRjIsIEZMT0FUKQorI2RlZmluZSBHUElPNDJfS1BfREtJTl8xCU1GUF9DRkdfTFBNKEdQSU80MiwgQUYyLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzQzX0tQX0RLSU5fMglNRlBfQ0ZHX0xQTShHUElPNDMsIEFGMiwgRkxPQVQpCisjZGVmaW5lIEdQSU80NF9LUF9ES0lOXzMJTUZQX0NGR19MUE0oR1BJTzQ0LCBBRjIsIEZMT0FUKQorI2RlZmluZSBHUElPNDFfS1BfREtJTl80CU1GUF9DRkdfTFBNKEdQSU80MSwgQUY0LCBGTE9BVCkKKyNkZWZpbmUgR1BJTzQyX0tQX0RLSU5fNQlNRlBfQ0ZHX0xQTShHUElPNDIsIEFGNCwgRkxPQVQpCisKKyNkZWZpbmUgR1BJTzBfS1BfTUtJTl8wCQlNRlBfQ0ZHX0xQTShHUElPMCwgQUYxLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzJfS1BfTUtJTl8xCQlNRlBfQ0ZHX0xQTShHUElPMiwgQUYxLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzRfS1BfTUtJTl8yCQlNRlBfQ0ZHX0xQTShHUElPNCwgQUYxLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzZfS1BfTUtJTl8zCQlNRlBfQ0ZHX0xQTShHUElPNiwgQUYxLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzhfS1BfTUtJTl80CQlNRlBfQ0ZHX0xQTShHUElPOCwgQUYxLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzEwX0tQX01LSU5fNQlNRlBfQ0ZHX0xQTShHUElPMTAsIEFGMSwgRkxPQVQpCisjZGVmaW5lIEdQSU8xMl9LUF9NS0lOXzYJTUZQX0NGR19MUE0oR1BJTzEyLCBBRjEsIEZMT0FUKQorI2RlZmluZSBHUElPMTRfS1BfTUtJTl83CU1GUF9DRkcoR1BJTzE0LCBBRjEpCisjZGVmaW5lIEdQSU8zNV9LUF9NS0lOXzUJTUZQX0NGRyhHUElPMzUsIEFGNCkKKworI2RlZmluZSBHUElPMV9LUF9NS09VVF8wCU1GUF9DRkdfTFBNKEdQSU8xLCBBRjEsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU8zX0tQX01LT1VUXzEJTUZQX0NGR19MUE0oR1BJTzMsIEFGMSwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzVfS1BfTUtPVVRfMglNRlBfQ0ZHX0xQTShHUElPNSwgQUYxLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPN19LUF9NS09VVF8zCU1GUF9DRkdfTFBNKEdQSU83LCBBRjEsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU85X0tQX01LT1VUXzQJTUZQX0NGR19MUE0oR1BJTzksIEFGMSwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzExX0tQX01LT1VUXzUJTUZQX0NGR19MUE0oR1BJTzExLCBBRjEsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU8xM19LUF9NS09VVF82CU1GUF9DRkdfTFBNKEdQSU8xMywgQUYxLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPMTVfS1BfTUtPVVRfNwlNRlBfQ0ZHX0xQTShHUElPMTUsIEFGMSwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzM2X0tQX01LT1VUXzUJTUZQX0NGR19MUE0oR1BJTzM2LCBBRjQsIERSSVZFX0hJR0gpCisKKy8qIExDRCAqLworI2RlZmluZSBHUElPMTdfTENEX0ZDTEtfUkQJTUZQX0NGRyhHUElPMTcsIEFGMSkKKyNkZWZpbmUgR1BJTzE4X0xDRF9MQ0xLX0EwCU1GUF9DRkcoR1BJTzE4LCBBRjEpCisjZGVmaW5lIEdQSU8xOV9MQ0RfUENMS19XUglNRlBfQ0ZHKEdQSU8xOSwgQUYxKQorI2RlZmluZSBHUElPMjBfTENEX0JJQVMJCU1GUF9DRkcoR1BJTzIwLCBBRjEpCisjZGVmaW5lIEdQSU8yMV9MQ0RfQ1MJCU1GUF9DRkcoR1BJTzIxLCBBRjEpCisjZGVmaW5lIEdQSU8yMl9MQ0RfQ1MyCQlNRlBfQ0ZHKEdQSU8yMiwgQUYyKQorI2RlZmluZSBHUElPMjJfTENEX1ZTWU5DCU1GUF9DRkcoR1BJTzIyLCBBRjEpCisjZGVmaW5lIEdQSU8yM19MQ0RfREQwCQlNRlBfQ0ZHKEdQSU8yMywgQUYxKQorI2RlZmluZSBHUElPMjRfTENEX0REMQkJTUZQX0NGRyhHUElPMjQsIEFGMSkKKyNkZWZpbmUgR1BJTzI1X0xDRF9ERDIJCU1GUF9DRkcoR1BJTzI1LCBBRjEpCisjZGVmaW5lIEdQSU8yNl9MQ0RfREQzCQlNRlBfQ0ZHKEdQSU8yNiwgQUYxKQorI2RlZmluZSBHUElPMjdfTENEX0RENAkJTUZQX0NGRyhHUElPMjcsIEFGMSkKKyNkZWZpbmUgR1BJTzI4X0xDRF9ERDUJCU1GUF9DRkcoR1BJTzI4LCBBRjEpCisjZGVmaW5lIEdQSU8yOV9MQ0RfREQ2CQlNRlBfQ0ZHKEdQSU8yOSwgQUYxKQorI2RlZmluZSBHUElPMzBfTENEX0RENwkJTUZQX0NGRyhHUElPMzAsIEFGMSkKKyNkZWZpbmUgR1BJTzMxX0xDRF9ERDgJCU1GUF9DRkcoR1BJTzMxLCBBRjEpCisjZGVmaW5lIEdQSU8zMl9MQ0RfREQ5CQlNRlBfQ0ZHKEdQSU8zMiwgQUYxKQorI2RlZmluZSBHUElPMzNfTENEX0REMTAJCU1GUF9DRkcoR1BJTzMzLCBBRjEpCisjZGVmaW5lIEdQSU8zNF9MQ0RfREQxMQkJTUZQX0NGRyhHUElPMzQsIEFGMSkKKyNkZWZpbmUgR1BJTzM1X0xDRF9ERDEyCQlNRlBfQ0ZHKEdQSU8zNSwgQUYxKQorI2RlZmluZSBHUElPMzZfTENEX0REMTMJCU1GUF9DRkcoR1BJTzM2LCBBRjEpCisjZGVmaW5lIEdQSU8zN19MQ0RfREQxNAkJTUZQX0NGRyhHUElPMzcsIEFGMSkKKyNkZWZpbmUgR1BJTzM4X0xDRF9ERDE1CQlNRlBfQ0ZHKEdQSU8zOCwgQUYxKQorI2RlZmluZSBHUElPMzlfTENEX0REMTYJCU1GUF9DRkcoR1BJTzM5LCBBRjEpCisjZGVmaW5lIEdQSU80MF9MQ0RfREQxNwkJTUZQX0NGRyhHUElPNDAsIEFGMSkKKyNkZWZpbmUgR1BJTzQxX0xDRF9DUzIJCU1GUF9DRkcoR1BJTzQxLCBBRjMpCisjZGVmaW5lIEdQSU80Ml9MQ0RfVlNZTkMyCU1GUF9DRkcoR1BJTzQyLCBBRjMpCisjZGVmaW5lIEdQSU80NF9MQ0RfREQ3CQlNRlBfQ0ZHKEdQSU80NCwgQUYxKQorCisvKiBNaW5pLUxDRCAqLworI2RlZmluZSBHUElPMTdfTUxDRF9GQ0xLCU1GUF9DRkcoR1BJTzE3LCBBRjMpCisjZGVmaW5lIEdQSU8xOF9NTENEX0xDTEsJTUZQX0NGRyhHUElPMTgsIEFGMykKKyNkZWZpbmUgR1BJTzE5X01MQ0RfUENMSwlNRlBfQ0ZHKEdQSU8xOSwgQUYzKQorI2RlZmluZSBHUElPMjBfTUxDRF9CSUFTCU1GUF9DRkcoR1BJTzIwLCBBRjMpCisjZGVmaW5lIEdQSU8yM19NTENEX0REMAkJTUZQX0NGRyhHUElPMjMsIEFGMykKKyNkZWZpbmUgR1BJTzI0X01MQ0RfREQxCQlNRlBfQ0ZHKEdQSU8yNCwgQUYzKQorI2RlZmluZSBHUElPMjVfTUxDRF9ERDIJCU1GUF9DRkcoR1BJTzI1LCBBRjMpCisjZGVmaW5lIEdQSU8yNl9NTENEX0REMwkJTUZQX0NGRyhHUElPMjYsIEFGMykKKyNkZWZpbmUgR1BJTzI3X01MQ0RfREQ0CQlNRlBfQ0ZHKEdQSU8yNywgQUYzKQorI2RlZmluZSBHUElPMjhfTUxDRF9ERDUJCU1GUF9DRkcoR1BJTzI4LCBBRjMpCisjZGVmaW5lIEdQSU8yOV9NTENEX0RENgkJTUZQX0NGRyhHUElPMjksIEFGMykKKyNkZWZpbmUgR1BJTzMwX01MQ0RfREQ3CQlNRlBfQ0ZHKEdQSU8zMCwgQUYzKQorI2RlZmluZSBHUElPMzFfTUxDRF9ERDgJCU1GUF9DRkcoR1BJTzMxLCBBRjMpCisjZGVmaW5lIEdQSU8zMl9NTENEX0REOQkJTUZQX0NGRyhHUElPMzIsIEFGMykKKyNkZWZpbmUgR1BJTzMzX01MQ0RfREQxMAlNRlBfQ0ZHKEdQSU8zMywgQUYzKQorI2RlZmluZSBHUElPMzRfTUxDRF9ERDExCU1GUF9DRkcoR1BJTzM0LCBBRjMpCisjZGVmaW5lIEdQSU8zNV9NTENEX0REMTIJTUZQX0NGRyhHUElPMzUsIEFGMykKKyNkZWZpbmUgR1BJTzM2X01MQ0RfREQxMwlNRlBfQ0ZHKEdQSU8zNiwgQUYzKQorI2RlZmluZSBHUElPMzdfTUxDRF9ERDE0CU1GUF9DRkcoR1BJTzM3LCBBRjMpCisjZGVmaW5lIEdQSU8zOF9NTENEX0REMTUJTUZQX0NGRyhHUElPMzgsIEFGMykKKyNkZWZpbmUgR1BJTzQ0X01MQ0RfREQ3CQlNRlBfQ0ZHKEdQSU80NCwgQUY1KQorCisvKiBNTUMxICovCisjZGVmaW5lIEdQSU8xMF9NTUMxX0RBVDMJTUZQX0NGRyhHUElPMTAsIEFGNCkKKyNkZWZpbmUgR1BJTzExX01NQzFfREFUMglNRlBfQ0ZHKEdQSU8xMSwgQUY0KQorI2RlZmluZSBHUElPMTJfTU1DMV9EQVQxCU1GUF9DRkcoR1BJTzEyLCBBRjQpCisjZGVmaW5lIEdQSU8xM19NTUMxX0RBVDAJTUZQX0NGRyhHUElPMTMsIEFGNCkKKyNkZWZpbmUgR1BJTzE0X01NQzFfQ01ECQlNRlBfQ0ZHKEdQSU8xNCwgQUY0KQorI2RlZmluZSBHUElPMTVfTU1DMV9DTEsJCU1GUF9DRkcoR1BJTzE1LCBBRjQpCisjZGVmaW5lIEdQSU81NV9NTUMxX0NNRAkJTUZQX0NGRyhHUElPNTUsIEFGMykKKyNkZWZpbmUgR1BJTzU2X01NQzFfQ0xLCQlNRlBfQ0ZHKEdQSU81NiwgQUYzKQorI2RlZmluZSBHUElPNTdfTU1DMV9EQVQwCU1GUF9DRkcoR1BJTzU3LCBBRjMpCisjZGVmaW5lIEdQSU81OF9NTUMxX0RBVDEJTUZQX0NGRyhHUElPNTgsIEFGMykKKyNkZWZpbmUgR1BJTzU5X01NQzFfREFUMglNRlBfQ0ZHKEdQSU81OSwgQUYzKQorI2RlZmluZSBHUElPNjBfTU1DMV9EQVQzCU1GUF9DRkcoR1BJTzYwLCBBRjMpCisKKyNkZWZpbmUgREZfQUREUjBfTU1DMV9DTEsJTUZQX0NGRyhERl9BRERSMCwgQUYyKQorI2RlZmluZSBERl9BRERSMV9NTUMxX0NNRAlNRlBfQ0ZHKERGX0FERFIxLCBBRjIpCisjZGVmaW5lIERGX0FERFIyX01NQzFfREFUMAlNRlBfQ0ZHKERGX0FERFIyLCBBRjIpCisjZGVmaW5lIERGX0FERFIzX01NQzFfREFUMQlNRlBfQ0ZHKERGX0FERFIzLCBBRjMpCisjZGVmaW5lIG5YQ1ZSRU5fTU1DMV9EQVQyCU1GUF9DRkcoblhDVlJFTiwgQUYyKQorCisvKiBNTUMyICovCisjZGVmaW5lIEdQSU8zMV9NTUMyX0NNRAkJTUZQX0NGRyhHUElPMzEsIEFGNykKKyNkZWZpbmUgR1BJTzMyX01NQzJfQ0xLCQlNRlBfQ0ZHKEdQSU8zMiwgQUY3KQorI2RlZmluZSBHUElPMzNfTU1DMl9EQVQwCU1GUF9DRkcoR1BJTzMzLCBBRjcpCisjZGVmaW5lIEdQSU8zNF9NTUMyX0RBVDEJTUZQX0NGRyhHUElPMzQsIEFGNykKKyNkZWZpbmUgR1BJTzM1X01NQzJfREFUMglNRlBfQ0ZHKEdQSU8zNSwgQUY3KQorI2RlZmluZSBHUElPMzZfTU1DMl9EQVQzCU1GUF9DRkcoR1BJTzM2LCBBRjcpCisKKyNkZWZpbmUgR1BJTzEwMV9NTUMyX0RBVDMJTUZQX0NGRyhHUElPMTAxLCBBRjEpCisjZGVmaW5lIEdQSU8xMDJfTU1DMl9EQVQyCU1GUF9DRkcoR1BJTzEwMiwgQUYxKQorI2RlZmluZSBHUElPMTAzX01NQzJfREFUMQlNRlBfQ0ZHKEdQSU8xMDMsIEFGMSkKKyNkZWZpbmUgR1BJTzEwNF9NTUMyX0RBVDAJTUZQX0NGRyhHUElPMTA0LCBBRjEpCisjZGVmaW5lIEdQSU8xMDVfTU1DMl9DTUQJTUZQX0NGRyhHUElPMTA1LCBBRjEpCisjZGVmaW5lIEdQSU8xMDZfTU1DMl9DTEsJTUZQX0NGRyhHUElPMTA2LCBBRjEpCisKKyNkZWZpbmUgREZfSU8xMF9NTUMyX0RBVDMJTUZQX0NGRyhERl9JTzEwLCBBRjMpCisjZGVmaW5lIERGX0lPMTFfTU1DMl9EQVQyCU1GUF9DRkcoREZfSU8xMSwgQUYzKQorI2RlZmluZSBERl9JTzEyX01NQzJfREFUMQlNRlBfQ0ZHKERGX0lPMTIsIEFGMykKKyNkZWZpbmUgREZfSU8xM19NTUMyX0RBVDAJTUZQX0NGRyhERl9JTzEzLCBBRjMpCisjZGVmaW5lIERGX0lPMTRfTU1DMl9DTEsJTUZQX0NGRyhERl9JTzE0LCBBRjMpCisjZGVmaW5lIERGX0lPMTVfTU1DMl9DTUQJTUZQX0NGRyhERl9JTzE1LCBBRjMpCisKKy8qIEJTU1AxICovCisjZGVmaW5lIEdQSU8xMl9CU1NQMV9DTEsJTUZQX0NGRyhHUElPMTIsIEFGMykKKyNkZWZpbmUgR1BJTzEzX0JTU1AxX0ZSTQlNRlBfQ0ZHKEdQSU8xMywgQUYzKQorI2RlZmluZSBHUElPMTRfQlNTUDFfUlhECU1GUF9DRkcoR1BJTzE0LCBBRjMpCisjZGVmaW5lIEdQSU8xNV9CU1NQMV9UWEQJTUZQX0NGRyhHUElPMTUsIEFGMykKKyNkZWZpbmUgR1BJTzk3X0JTU1AxX0NMSwlNRlBfQ0ZHKEdQSU85NywgQUY1KQorI2RlZmluZSBHUElPOThfQlNTUDFfRlJNCU1GUF9DRkcoR1BJTzk4LCBBRjUpCisKKy8qIEJTU1AyICovCisjZGVmaW5lIEdQSU84NF9CU1NQMl9TREFUQV9JTglNRlBfQ0ZHKEdQSU84NCwgQUYxKQorI2RlZmluZSBHUElPODVfQlNTUDJfQklUQ0xLCU1GUF9DRkcoR1BJTzg1LCBBRjEpCisjZGVmaW5lIEdQSU84Nl9CU1NQMl9TWVNDTEsJTUZQX0NGRyhHUElPODYsIEFGMSkKKyNkZWZpbmUgR1BJTzg3X0JTU1AyX1NZTkMJTUZQX0NGRyhHUElPODcsIEFGMSkKKyNkZWZpbmUgR1BJTzg4X0JTU1AyX0RBVEFfT1VUCU1GUF9DRkcoR1BJTzg4LCBBRjEpCisjZGVmaW5lIEdQSU84Nl9CU1NQMl9TREFUQV9JTglNRlBfQ0ZHKEdQSU84NiwgQUY0KQorCisvKiBCU1NQMyAqLworI2RlZmluZSBHUElPNzlfQlNTUDNfQ0xLCU1GUF9DRkcoR1BJTzc5LCBBRjEpCisjZGVmaW5lIEdQSU84MF9CU1NQM19GUk0JTUZQX0NGRyhHUElPODAsIEFGMSkKKyNkZWZpbmUgR1BJTzgxX0JTU1AzX1RYRAlNRlBfQ0ZHKEdQSU84MSwgQUYxKQorI2RlZmluZSBHUElPODJfQlNTUDNfUlhECU1GUF9DRkcoR1BJTzgyLCBBRjEpCisjZGVmaW5lIEdQSU84M19CU1NQM19TWVNDTEsJTUZQX0NGRyhHUElPODMsIEFGMSkKKworLyogQlNTUDQgKi8KKyNkZWZpbmUgR1BJTzQzX0JTU1A0X0NMSwlNRlBfQ0ZHKEdQSU80MywgQUY0KQorI2RlZmluZSBHUElPNDRfQlNTUDRfRlJNCU1GUF9DRkcoR1BJTzQ0LCBBRjQpCisjZGVmaW5lIEdQSU80NV9CU1NQNF9UWEQJTUZQX0NGRyhHUElPNDUsIEFGNCkKKyNkZWZpbmUgR1BJTzQ2X0JTU1A0X1JYRAlNRlBfQ0ZHKEdQSU80NiwgQUY0KQorCisjZGVmaW5lIEdQSU81MV9CU1NQNF9DTEsJTUZQX0NGRyhHUElPNTEsIEFGNCkKKyNkZWZpbmUgR1BJTzUyX0JTU1A0X0ZSTQlNRlBfQ0ZHKEdQSU81MiwgQUY0KQorI2RlZmluZSBHUElPNTNfQlNTUDRfVFhECU1GUF9DRkcoR1BJTzUzLCBBRjQpCisjZGVmaW5lIEdQSU81NF9CU1NQNF9SWEQJTUZQX0NGRyhHUElPNTQsIEFGNCkKKworLyogR1NTUDEgKi8KKyNkZWZpbmUgR1BJTzc5X0dTU1AxX0NMSwlNRlBfQ0ZHKEdQSU83OSwgQUYyKQorI2RlZmluZSBHUElPODBfR1NTUDFfRlJNCU1GUF9DRkcoR1BJTzgwLCBBRjIpCisjZGVmaW5lIEdQSU84MV9HU1NQMV9UWEQJTUZQX0NGRyhHUElPODEsIEFGMikKKyNkZWZpbmUgR1BJTzgyX0dTU1AxX1JYRAlNRlBfQ0ZHKEdQSU84MiwgQUYyKQorI2RlZmluZSBHUElPODNfR1NTUDFfU1lTQ0xLCU1GUF9DRkcoR1BJTzgzLCBBRjIpCisKKyNkZWZpbmUgR1BJTzkzX0dTU1AxX0NMSwlNRlBfQ0ZHKEdQSU85MywgQUY0KQorI2RlZmluZSBHUElPOTRfR1NTUDFfRlJNCU1GUF9DRkcoR1BJTzk0LCBBRjQpCisjZGVmaW5lIEdQSU85NV9HU1NQMV9UWEQJTUZQX0NGRyhHUElPOTUsIEFGNCkKKyNkZWZpbmUgR1BJTzk2X0dTU1AxX1JYRAlNRlBfQ0ZHKEdQSU85NiwgQUY0KQorCisvKiBHU1NQMiAqLworI2RlZmluZSBHUElPNDdfR1NTUDJfQ0xLCU1GUF9DRkcoR1BJTzQ3LCBBRjQpCisjZGVmaW5lIEdQSU80OF9HU1NQMl9GUk0JTUZQX0NGRyhHUElPNDgsIEFGNCkKKyNkZWZpbmUgR1BJTzQ5X0dTU1AyX1JYRAlNRlBfQ0ZHKEdQSU80OSwgQUY0KQorI2RlZmluZSBHUElPNTBfR1NTUDJfVFhECU1GUF9DRkcoR1BJTzUwLCBBRjQpCisKKyNkZWZpbmUgR1BJTzY5X0dTU1AyX0NMSwlNRlBfQ0ZHKEdQSU82OSwgQUY0KQorI2RlZmluZSBHUElPNzBfR1NTUDJfRlJNCU1GUF9DRkcoR1BJTzcwLCBBRjQpCisjZGVmaW5lIEdQSU83MV9HU1NQMl9SWEQJTUZQX0NGRyhHUElPNzEsIEFGNCkKKyNkZWZpbmUgR1BJTzcyX0dTU1AyX1RYRAlNRlBfQ0ZHKEdQSU83MiwgQUY0KQorCisjZGVmaW5lIEdQSU84NF9HU1NQMl9SWEQJTUZQX0NGRyhHUElPODQsIEFGMikKKyNkZWZpbmUgR1BJTzg1X0dTU1AyX0NMSwlNRlBfQ0ZHKEdQSU84NSwgQUYyKQorI2RlZmluZSBHUElPODZfR1NTUDJfU1lTQ0xLCU1GUF9DRkcoR1BJTzg2LCBBRjIpCisjZGVmaW5lIEdQSU84N19HU1NQMl9GUk0JTUZQX0NGRyhHUElPODcsIEFGMikKKyNkZWZpbmUgR1BJTzg4X0dTU1AyX1RYRAlNRlBfQ0ZHKEdQSU84OCwgQUYyKQorI2RlZmluZSBHUElPODZfR1NTUDJfUlhECU1GUF9DRkcoR1BJTzg2LCBBRjUpCisKKyNkZWZpbmUgR1BJTzEwM19HU1NQMl9DTEsJTUZQX0NGRyhHUElPMTAzLCBBRjIpCisjZGVmaW5lIEdQSU8xMDRfR1NTUDJfRlJNCU1GUF9DRkcoR1BJTzEwNCwgQUYyKQorI2RlZmluZSBHUElPMTA1X0dTU1AyX1JYRAlNRlBfQ0ZHKEdQSU8xMDUsIEFGMikKKyNkZWZpbmUgR1BJTzEwNl9HU1NQMl9UWEQJTUZQX0NGRyhHUElPMTA2LCBBRjIpCisKKy8qIFVBUlQxIC0gRkZVQVJUICovCisjZGVmaW5lIEdQSU80N19VQVJUMV9EU1JfTglNRlBfQ0ZHKEdQSU80NywgQUYxKQorI2RlZmluZSBHUElPNDhfVUFSVDFfRFRSX04JTUZQX0NGRyhHUElPNDgsIEFGMSkKKyNkZWZpbmUgR1BJTzQ5X1VBUlQxX1JJCQlNRlBfQ0ZHKEdQSU80OSwgQUYxKQorI2RlZmluZSBHUElPNTBfVUFSVDFfRENECU1GUF9DRkcoR1BJTzUwLCBBRjEpCisjZGVmaW5lIEdQSU81MV9VQVJUMV9DVFMJTUZQX0NGRyhHUElPNTEsIEFGMSkKKyNkZWZpbmUgR1BJTzUyX1VBUlQxX1JUUwlNRlBfQ0ZHKEdQSU81MiwgQUYxKQorI2RlZmluZSBHUElPNTNfVUFSVDFfUlhECU1GUF9DRkcoR1BJTzUzLCBBRjEpCisjZGVmaW5lIEdQSU81NF9VQVJUMV9UWEQJTUZQX0NGRyhHUElPNTQsIEFGMSkKKworI2RlZmluZSBHUElPNjNfVUFSVDFfVFhECU1GUF9DRkcoR1BJTzYzLCBBRjIpCisjZGVmaW5lIEdQSU82NF9VQVJUMV9SWEQJTUZQX0NGRyhHUElPNjQsIEFGMikKKyNkZWZpbmUgR1BJTzY1X1VBUlQxX0RTUglNRlBfQ0ZHKEdQSU82NSwgQUYyKQorI2RlZmluZSBHUElPNjZfVUFSVDFfRFRSCU1GUF9DRkcoR1BJTzY2LCBBRjIpCisjZGVmaW5lIEdQSU82N19VQVJUMV9SSQkJTUZQX0NGRyhHUElPNjcsIEFGMikKKyNkZWZpbmUgR1BJTzY4X1VBUlQxX0RDRAlNRlBfQ0ZHKEdQSU82OCwgQUYyKQorI2RlZmluZSBHUElPNjlfVUFSVDFfQ1RTCU1GUF9DRkcoR1BJTzY5LCBBRjIpCisjZGVmaW5lIEdQSU83MF9VQVJUMV9SVFMJTUZQX0NGRyhHUElPNzAsIEFGMikKKworLyogVUFSVDIgLSBCVFVBUlQgKi8KKyNkZWZpbmUgR1BJTzkxX1VBUlQyX1JYRAlNRlBfQ0ZHKEdQSU85MSwgQUYxKQorI2RlZmluZSBHUElPOTJfVUFSVDJfVFhECU1GUF9DRkcoR1BJTzkyLCBBRjEpCisjZGVmaW5lIEdQSU85M19VQVJUMl9DVFMJTUZQX0NGRyhHUElPOTMsIEFGMSkKKyNkZWZpbmUgR1BJTzk0X1VBUlQyX1JUUwlNRlBfQ0ZHKEdQSU85NCwgQUYxKQorCisvKiBVQVJUMyAtIFNUVUFSVCAqLworI2RlZmluZSBHUElPNDNfVUFSVDNfUlRTCU1GUF9DRkcoR1BJTzQzLCBBRjMpCisjZGVmaW5lIEdQSU80NF9VQVJUM19DVFMJTUZQX0NGRyhHUElPNDQsIEFGMykKKyNkZWZpbmUgR1BJTzQ1X1VBUlQzX1JYRAlNRlBfQ0ZHKEdQSU80NSwgQUYzKQorI2RlZmluZSBHUElPNDZfVUFSVDNfVFhECU1GUF9DRkcoR1BJTzQ2LCBBRjMpCisKKyNkZWZpbmUgR1BJTzc1X1VBUlQzX1JUUwlNRlBfQ0ZHKEdQSU83NSwgQUY1KQorI2RlZmluZSBHUElPNzZfVUFSVDNfQ1RTCU1GUF9DRkcoR1BJTzc2LCBBRjUpCisjZGVmaW5lIEdQSU83N19VQVJUM19UWEQJTUZQX0NGRyhHUElPNzcsIEFGNSkKKyNkZWZpbmUgR1BJTzc4X1VBUlQzX1JYRAlNRlBfQ0ZHKEdQSU83OCwgQUY1KQorCisvKiBERkkgKi8KKyNkZWZpbmUgREZfSU8wX0RGX0lPMAkJTUZQX0NGRyhERl9JTzAsIEFGMikKKyNkZWZpbmUgREZfSU8xX0RGX0lPMQkJTUZQX0NGRyhERl9JTzEsIEFGMikKKyNkZWZpbmUgREZfSU8yX0RGX0lPMgkJTUZQX0NGRyhERl9JTzIsIEFGMikKKyNkZWZpbmUgREZfSU8zX0RGX0lPMwkJTUZQX0NGRyhERl9JTzMsIEFGMikKKyNkZWZpbmUgREZfSU80X0RGX0lPNAkJTUZQX0NGRyhERl9JTzQsIEFGMikKKyNkZWZpbmUgREZfSU81X0RGX0lPNQkJTUZQX0NGRyhERl9JTzUsIEFGMikKKyNkZWZpbmUgREZfSU82X0RGX0lPNgkJTUZQX0NGRyhERl9JTzYsIEFGMikKKyNkZWZpbmUgREZfSU83X0RGX0lPNwkJTUZQX0NGRyhERl9JTzcsIEFGMikKKyNkZWZpbmUgREZfSU84X0RGX0lPOAkJTUZQX0NGRyhERl9JTzgsIEFGMikKKyNkZWZpbmUgREZfSU85X0RGX0lPOQkJTUZQX0NGRyhERl9JTzksIEFGMikKKyNkZWZpbmUgREZfSU8xMF9ERl9JTzEwCQlNRlBfQ0ZHKERGX0lPMTAsIEFGMikKKyNkZWZpbmUgREZfSU8xMV9ERl9JTzExCQlNRlBfQ0ZHKERGX0lPMTEsIEFGMikKKyNkZWZpbmUgREZfSU8xMl9ERl9JTzEyCQlNRlBfQ0ZHKERGX0lPMTIsIEFGMikKKyNkZWZpbmUgREZfSU8xM19ERl9JTzEzCQlNRlBfQ0ZHKERGX0lPMTMsIEFGMikKKyNkZWZpbmUgREZfSU8xNF9ERl9JTzE0CQlNRlBfQ0ZHKERGX0lPMTQsIEFGMikKKyNkZWZpbmUgREZfSU8xNV9ERl9JTzE1CQlNRlBfQ0ZHKERGX0lPMTUsIEFGMikKKyNkZWZpbmUgREZfbkFEVjFfQUxFX0RGX25BRFYxCU1GUF9DRkcoREZfbkFEVjFfQUxFLCBBRjIpCisjZGVmaW5lIERGX25BRFYyX0FMRV9ERl9uQURWMglNRlBfQ0ZHKERGX25BRFYyX0FMRSwgQUYyKQorI2RlZmluZSBERl9uQ1MwX0RGX25DUzAJCU1GUF9DRkcoREZfbkNTMCwgQUYyKQorI2RlZmluZSBERl9uQ1MxX0RGX25DUzEJCU1GUF9DRkcoREZfbkNTMSwgQUYyKQorI2RlZmluZSBERl9uUkVfbk9FX0RGX25PRQlNRlBfQ0ZHKERGX25SRV9uT0UsIEFGMikKKyNkZWZpbmUgREZfbldFX0RGX25XRQkJTUZQX0NGRyhERl9uV0UsIEFGMikKKworLyogREZJIC0gTkFORCAqLworI2RlZmluZSBERl9DTEVfbk9FX05EX0NMRQlNRlBfQ0ZHX0xQTShERl9DTEVfbk9FLCBBRjEsIFBVTExfSElHSCkKKyNkZWZpbmUgREZfSU5UX1JuQl9ORF9JTlRfUm5CCU1GUF9DRkdfTFBNKERGX0lOVF9SbkIsIEFGMSwgUFVMTF9MT1cpCisjZGVmaW5lIERGX0lPMF9ORF9JTzAJCU1GUF9DRkdfTFBNKERGX0lPMCwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgREZfSU8xX05EX0lPMQkJTUZQX0NGR19MUE0oREZfSU8xLCBBRjEsIFBVTExfTE9XKQorI2RlZmluZSBERl9JTzJfTkRfSU8yCQlNRlBfQ0ZHX0xQTShERl9JTzIsIEFGMSwgUFVMTF9MT1cpCisjZGVmaW5lIERGX0lPM19ORF9JTzMJCU1GUF9DRkdfTFBNKERGX0lPMywgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgREZfSU80X05EX0lPNAkJTUZQX0NGR19MUE0oREZfSU80LCBBRjEsIFBVTExfTE9XKQorI2RlZmluZSBERl9JTzVfTkRfSU81CQlNRlBfQ0ZHX0xQTShERl9JTzUsIEFGMSwgUFVMTF9MT1cpCisjZGVmaW5lIERGX0lPNl9ORF9JTzYJCU1GUF9DRkdfTFBNKERGX0lPNiwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgREZfSU83X05EX0lPNwkJTUZQX0NGR19MUE0oREZfSU83LCBBRjEsIFBVTExfTE9XKQorI2RlZmluZSBERl9JTzhfTkRfSU84CQlNRlBfQ0ZHX0xQTShERl9JTzgsIEFGMSwgUFVMTF9MT1cpCisjZGVmaW5lIERGX0lPOV9ORF9JTzkJCU1GUF9DRkdfTFBNKERGX0lPOSwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgREZfSU8xMF9ORF9JTzEwCQlNRlBfQ0ZHX0xQTShERl9JTzEwLCBBRjEsIFBVTExfTE9XKQorI2RlZmluZSBERl9JTzExX05EX0lPMTEJCU1GUF9DRkdfTFBNKERGX0lPMTEsIEFGMSwgUFVMTF9MT1cpCisjZGVmaW5lIERGX0lPMTJfTkRfSU8xMgkJTUZQX0NGR19MUE0oREZfSU8xMiwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgREZfSU8xM19ORF9JTzEzCQlNRlBfQ0ZHX0xQTShERl9JTzEzLCBBRjEsIFBVTExfTE9XKQorI2RlZmluZSBERl9JTzE0X05EX0lPMTQJCU1GUF9DRkdfTFBNKERGX0lPMTQsIEFGMSwgUFVMTF9MT1cpCisjZGVmaW5lIERGX0lPMTVfTkRfSU8xNQkJTUZQX0NGR19MUE0oREZfSU8xNSwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgREZfbkFEVjFfQUxFX05EX0FMRQlNRlBfQ0ZHX0xQTShERl9uQURWMV9BTEUsIEFGMSwgUFVMTF9ISUdIKQorI2RlZmluZSBERl9uQURWMl9BTEVfTkRfQUxFCU1GUF9DRkdfTFBNKERGX25BRFYyX0FMRSwgQUYxLCBQVUxMX0hJR0gpCisjZGVmaW5lCURGX25BRFYyX0FMRV9uQ1MzCU1GUF9DRkdfTFBNKERGX25BRFYyX0FMRSwgQUYzLCBQVUxMX0hJR0gpCisjZGVmaW5lIERGX25DUzBfTkRfbkNTMAkJTUZQX0NGR19MUE0oREZfbkNTMCwgQUYxLCBQVUxMX0hJR0gpCisjZGVmaW5lIERGX25DUzFfTkRfbkNTMQkJTUZQX0NGR19MUE0oREZfbkNTMSwgQUYxLCBQVUxMX0hJR0gpCisjZGVmaW5lIERGX25SRV9uT0VfTkRfblJFCU1GUF9DRkdfTFBNKERGX25SRV9uT0UsIEFGMSwgUFVMTF9ISUdIKQorI2RlZmluZSBERl9uV0VfTkRfbldFCQlNRlBfQ0ZHX0xQTShERl9uV0UsIEFGMSwgUFVMTF9ISUdIKQorCisvKiBQV00gKi8KKyNkZWZpbmUgR1BJTzQxX1BXTTAJCU1GUF9DRkdfTFBNKEdQSU80MSwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzQyX1BXTTEJCU1GUF9DRkdfTFBNKEdQSU80MiwgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzQzX1BXTTMJCU1GUF9DRkdfTFBNKEdQSU80MywgQUYxLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzIwX1BXTTAJCU1GUF9DRkdfTFBNKEdQSU8yMCwgQUYyLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzIxX1BXTTIJCU1GUF9DRkdfTFBNKEdQSU8yMSwgQUYzLCBQVUxMX0xPVykKKyNkZWZpbmUgR1BJTzIyX1BXTTMJCU1GUF9DRkdfTFBNKEdQSU8yMiwgQUYzLCBQVUxMX0xPVykKKworLyogQ0lSICovCisjZGVmaW5lIEdQSU80Nl9DSVJfT1VUCQlNRlBfQ0ZHKEdQSU80NiwgQUYxKQorI2RlZmluZSBHUElPNzdfQ0lSX09VVAkJTUZQX0NGRyhHUElPNzcsIEFGMykKKworLyogVVNCIFAyICovCisjZGVmaW5lIEdQSU8wX1VTQl9QMl83CQlNRlBfQ0ZHKEdQSU8wLCBBRjMpCisjZGVmaW5lIEdQSU8xNV9VU0JfUDJfNwkJTUZQX0NGRyhHUElPMTUsIEFGNSkKKyNkZWZpbmUgR1BJTzE2X1VTQl9QMl83CQlNRlBfQ0ZHKEdQSU8xNiwgQUYyKQorI2RlZmluZSBHUElPNDhfVVNCX1AyXzcJCU1GUF9DRkcoR1BJTzQ4LCBBRjcpCisjZGVmaW5lIEdQSU80OV9VU0JfUDJfNwkJTUZQX0NGRyhHUElPNDksIEFGNikKKyNkZWZpbmUgREZfSU85X1VTQl9QMl83CQlNRlBfQ0ZHKERGX0lPOSwgQUYzKQorCisjZGVmaW5lIEdQSU80OF9VU0JfUDJfOAkJTUZQX0NGRyhHUElPNDgsIEFGMikKKyNkZWZpbmUgR1BJTzUwX1VTQl9QMl83CQlNRlBfQ0ZHX1goR1BJTzUwLCBBRjIsIERTMDJYLCBGTE9BVCkKKyNkZWZpbmUgR1BJTzUxX1VTQl9QMl81CQlNRlBfQ0ZHKEdQSU81MSwgQUYyKQorI2RlZmluZSBHUElPNDdfVVNCX1AyXzQJCU1GUF9DRkcoR1BJTzQ3LCBBRjIpCisjZGVmaW5lIEdQSU81M19VU0JfUDJfMwkJTUZQX0NGRyhHUElPNTMsIEFGMikKKyNkZWZpbmUgR1BJTzU0X1VTQl9QMl82CQlNRlBfQ0ZHKEdQSU81NCwgQUYyKQorI2RlZmluZSBHUElPNDlfVVNCX1AyXzIJCU1GUF9DRkcoR1BJTzQ5LCBBRjIpCisjZGVmaW5lIEdQSU81Ml9VU0JfUDJfMQkJTUZQX0NGRyhHUElPNTIsIEFGMikKKworI2RlZmluZSBHUElPNjNfVVNCX1AyXzgJCU1GUF9DRkcoR1BJTzYzLCBBRjMpCisjZGVmaW5lIEdQSU82NF9VU0JfUDJfNwkJTUZQX0NGRyhHUElPNjQsIEFGMykKKyNkZWZpbmUgR1BJTzY1X1VTQl9QMl82CQlNRlBfQ0ZHKEdQSU82NSwgQUYzKQorI2RlZmluZSBHUElPNjZfVVNHX1AyXzUJCU1GUF9DRkcoR1BJTzY2LCBBRjMpCisjZGVmaW5lIEdQSU82N19VU0JfUDJfNAkJTUZQX0NGRyhHUElPNjcsIEFGMykKKyNkZWZpbmUgR1BJTzY4X1VTQl9QMl8zCQlNRlBfQ0ZHKEdQSU82OCwgQUYzKQorI2RlZmluZSBHUElPNjlfVVNCX1AyXzIJCU1GUF9DRkcoR1BJTzY5LCBBRjMpCisjZGVmaW5lIEdQSU83MF9VU0JfUDJfMQkJTUZQX0NGRyhHUElPNzAsIEFGMykKKworLyogVUxQSSAqLworI2RlZmluZSBHUElPMzFfVVNCX1VMUElfRDAJTUZQX0NGRyhHUElPMzEsIEFGNCkKKyNkZWZpbmUgR1BJTzMwX1VTQl9VTFBJX0QxCU1GUF9DRkcoR1BJTzMwLCBBRjcpCisjZGVmaW5lIEdQSU8zM19VU0JfVUxQSV9EMglNRlBfQ0ZHKEdQSU8zMywgQUY1KQorI2RlZmluZSBHUElPMzRfVVNCX1VMUElfRDMJTUZQX0NGRyhHUElPMzQsIEFGNSkKKyNkZWZpbmUgR1BJTzM1X1VTQl9VTFBJX0Q0CU1GUF9DRkcoR1BJTzM1LCBBRjUpCisjZGVmaW5lIEdQSU8zNl9VU0JfVUxQSV9ENQlNRlBfQ0ZHKEdQSU8zNiwgQUY1KQorI2RlZmluZSBHUElPNDFfVVNCX1VMUElfRDYJTUZQX0NGRyhHUElPNDEsIEFGNSkKKyNkZWZpbmUgR1BJTzQyX1VTQl9VTFBJX0Q3CU1GUF9DRkcoR1BJTzQyLCBBRjUpCisjZGVmaW5lIEdQSU8zN19VU0JfVUxQSV9ESVIJTUZQX0NGRyhHUElPMzcsIEFGNCkKKyNkZWZpbmUgR1BJTzM4X1VTQl9VTFBJX0NMSwlNRlBfQ0ZHKEdQSU8zOCwgQUY0KQorI2RlZmluZSBHUElPMzlfVVNCX1VMUElfU1RQCU1GUF9DRkcoR1BJTzM5LCBBRjQpCisjZGVmaW5lIEdQSU80MF9VU0JfVUxQSV9OWFQJTUZQX0NGRyhHUElPNDAsIEFGNCkKKworI2RlZmluZSBHUElPM19DTEsyNk1PVVRETUQJTUZQX0NGRyhHUElPMywgQUYzKQorI2RlZmluZSBHUElPNDBfQ0xLMjZNT1VURE1ECU1GUF9DRkcoR1BJTzQwLCBBRjcpCisjZGVmaW5lIEdQSU85NF9DTEsyNk1PVVRETUQJTUZQX0NGRyhHUElPOTQsIEFGNSkKKyNkZWZpbmUgR1BJTzEwNF9DTEsyNk1PVVRETUQJTUZQX0NGRyhHUElPMTA0LCBBRjQpCisjZGVmaW5lIERGX0FERFIxX0NMSzI2TU9VVERNRAlNRlBfQ0ZHKERGX0FERFIyLCBBRjMpCisjZGVmaW5lIERGX0FERFIzX0NMSzI2TU9VVERNRAlNRlBfQ0ZHKERGX0FERFIzLCBBRjMpCisKKyNkZWZpbmUgR1BJTzE0X0NMSzI2TU9VVAlNRlBfQ0ZHKEdQSU8xNCwgQUY1KQorI2RlZmluZSBHUElPMzhfQ0xLMjZNT1VUCU1GUF9DRkcoR1BJTzM4LCBBRjcpCisjZGVmaW5lIEdQSU85Ml9DTEsyNk1PVVQJTUZQX0NGRyhHUElPOTIsIEFGNSkKKyNkZWZpbmUgR1BJTzEwNV9DTEsyNk1PVVQJTUZQX0NGRyhHUElPMTA1LCBBRjQpCisKKyNkZWZpbmUgR1BJTzJfQ0xLMTNNT1VURE1ECU1GUF9DRkcoR1BJTzIsIEFGMykKKyNkZWZpbmUgR1BJTzM5X0NMSzEzTU9VVERNRAlNRlBfQ0ZHKEdQSU8zOSwgQUY3KQorI2RlZmluZSBHUElPNTBfQ0xLMTNNT1VURE1ECU1GUF9DRkcoR1BJTzUwLCBBRjMpCisjZGVmaW5lIEdQSU85M19DTEsxM01PVVRETUQJTUZQX0NGRyhHUElPOTMsIEFGNSkKKyNkZWZpbmUgR1BJTzEwM19DTEsxM01PVVRETUQJTUZQX0NGRyhHUElPMTAzLCBBRjQpCisjZGVmaW5lIERGX0FERFIyX0NMSzEzTU9VVERNRAlNRlBfQ0ZHKERGX0FERFIyLCBBRjMpCisKKy8qIDEgd2lyZSAqLworI2RlZmluZSBHUElPOTVfT1dfRFFfSU4JCU1GUF9DRkcoR1BJTzk1LCBBRjUpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01GUF9QWEE5eHhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21mcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21mcC5oCmluZGV4IDAyZjYxNTcuLmU3ZDU4NzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZnAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWZwLmgKQEAgLTIxMCw2ICsyMTAsMTQgQEAKIAlNRlBfUElOX0RGX0lPMTQsCiAJTUZQX1BJTl9ERl9JTzE1LAogCisJLyogYWRkaXRpb25hbCBwaW5zIG9uIFBYQTkzMCAqLworCU1GUF9QSU5fR1NJTV9VSU8sCisJTUZQX1BJTl9HU0lNX1VDTEssCisJTUZQX1BJTl9HU0lNX1VERVQsCisJTUZQX1BJTl9HU0lNX25VUlNULAorCU1GUF9QSU5fUE1JQ19JTlQsCisJTUZQX1BJTl9SRFksCisKIAlNRlBfUElOX01BWCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wYWxtdHguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wYWxtdHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZThiY2NiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3BhbG10eC5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogR1BJT3MgYW5kIGludGVycnVwdHMgZm9yIFBhbG0gVHxYIEhhbmRoZWxkIENvbXB1dGVyCisgKgorICogQmFzZWQgb24gcGFsbWxkLWdwaW8uaCBieSBBbGV4IE9zYm9ybmUKKyAqCisgKiBBdXRob3JzOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoJCUNyaXN0aWFubyBQLiA8Y3Jpc3RpYW5vcEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgkJSmFuIEhlcm1hbiA8MmhwQHNlem5hbS5jej4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9JTkNMVURFX1BBTE1UWF9IXworI2RlZmluZSBfSU5DTFVERV9QQUxNVFhfSF8KKworLyoqIEhFUkUgQVJFIEdQSU9zICoqLworCisvKiBHUElPcyAqLworI2RlZmluZSBHUElPX05SX1BBTE1UWF9HUElPX1JFU0VUCQkxCisKKyNkZWZpbmUgR1BJT19OUl9QQUxNVFhfUE9XRVJfREVURUNUCQkxMiAvKiA5MCAqLworI2RlZmluZSBHUElPX05SX1BBTE1UWF9IT1RTWU5DX0JVVFRPTl9OCQkxMAorI2RlZmluZSBHUElPX05SX1BBTE1UWF9FQVJQSE9ORV9ERVRFQ1QJCTEwNworCisvKiBTRC9NTUMgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04JCTE0CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSCQkJMTE0IC8qIHByb2JhYmx5ICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZCQkxMTUgLyogcHJvYmFibHkgKi8KKworLyogVE9VQ0hTQ1JFRU4gKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVFhfV005NzEyX0lSUQkJMjcKKworLyogSVJEQSAtICBkaXNhYmxlIEdQSU8gY29ubmVjdGVkIHRvIFNEIHBpbiBvZiB0cmFuY2VpdmVyIChURkJTNDcxMD8pID8gKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRQkJNDAKKworLyogVVNCICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRYX1VTQl9ERVRFQ1RfTgkJMTMKKyNkZWZpbmUgR1BJT19OUl9QQUxNVFhfVVNCX1BPV0VSCQk5NQorI2RlZmluZSBHUElPX05SX1BBTE1UWF9VU0JfUFVMTFVQCQk5MworCisvKiBMQ0QvQkFDS0xJR0hUICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRYX0JMX1BPV0VSCQkJODQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVFhfTENEX1BPV0VSCQk5NgorCisvKiBMQ0QgQk9SREVSICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRYX0JPUkRFUl9TV0lUQ0gJCTk4CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRYX0JPUkRFUl9TRUxFQ1QJCTIyCisKKy8qIEJMVUVUT09USCAqLworI2RlZmluZSBHUElPX05SX1BBTE1UWF9CVF9QT1dFUgkJCTE3CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRYX0JUX1JFU0VUCQkJODMKKworLyogUENNQ0lBIChXaUZpKSAqLworI2RlZmluZSBHUElPX05SX1BBTE1UWF9QQ01DSUFfUE9XRVIxCQk5NAorI2RlZmluZSBHUElPX05SX1BBTE1UWF9QQ01DSUFfUE9XRVIyCQkxMDgKKyNkZWZpbmUgR1BJT19OUl9QQUxNVFhfUENNQ0lBX1JFU0VUCQk3OQorI2RlZmluZSBHUElPX05SX1BBTE1UWF9QQ01DSUFfUkVBRFkJCTExNgorCisvKiBOQU5EIEZsYXNoIC4uLiB0aGlzIEdQSU8gbWF5IGJlIGluY29ycmVjdCEgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVFhfTkFORF9CVUZGRVJfRElSCQk3OQorCisvKiBJTlRFUlJVUFRTICovCisjZGVmaW5lIElSUV9HUElPX1BBTE1UWF9TRF9ERVRFQ1RfTglJUlFfR1BJTyhHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTikKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVRYX1dNOTcxMl9JUlEJSVJRX0dQSU8oR1BJT19OUl9QQUxNVFhfV005NzEyX0lSUSkKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVRYX1VTQl9ERVRFQ1QJSVJRX0dQSU8oR1BJT19OUl9QQUxNVFhfVVNCX0RFVEVDVCkKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVRYX0dQSU9fUkVTRVQJSVJRX0dQSU8oR1BJT19OUl9QQUxNVFhfR1BJT19SRVNFVCkKKworLyoqIEhFUkUgQVJFIElOSVQgVkFMVUVTICoqLworCisvKiBWYXJpb3VzIGFkZHJlc3NlcyAgKi8KKyNkZWZpbmUgUEFMTVRYX1BDTUNJQV9QSFlTCTB4MjgwMDAwMDAKKyNkZWZpbmUgUEFMTVRYX1BDTUNJQV9WSVJUCTB4ZjAwMDAwMDAKKyNkZWZpbmUgUEFMTVRYX1BDTUNJQV9TSVpFCTB4MTAwMDAwCisKKyNkZWZpbmUgUEFMTVRYX1BIWVNfUkFNX1NUQVJUCTB4YTAwMDAwMDAKKyNkZWZpbmUgUEFMTVRYX1BIWVNfSU9fU1RBUlQJMHg0MDAwMDAwMAorCisjZGVmaW5lIFBBTE1UWF9QSFlTX0ZMQVNIX1NUQVJUCVBYQV9DUzBfUEhZUwkvKiBDaGlwU2VsZWN0IDAgKi8KKyNkZWZpbmUgUEFMTVRYX1BIWVNfTkFORF9TVEFSVAlQWEFfQ1MxX1BIWVMJLyogQ2hpcFNlbGVjdCAxICovCisKKy8qIFRPVUNIU0NSRUVOICovCisjZGVmaW5lIEFDOTdfTElOS19GUkFNRQkJCTIxCisKKworLyogQkFUVEVSWSAqLworI2RlZmluZSBQQUxNVFhfQkFUX01BWF9WT0xUQUdFCQk0MDAwCS8qIDQuMDB2IGN1cnJlbnQgdm9sdGFnZSAqLworI2RlZmluZSBQQUxNVFhfQkFUX01JTl9WT0xUQUdFCQkzNTUwCS8qIDMuNTV2IGNyaXRpY2FsIHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTVRYX0JBVF9NQVhfQ1VSUkVOVAkJMAkvKiB1bmtub2tuICovCisjZGVmaW5lIFBBTE1UWF9CQVRfTUlOX0NVUlJFTlQJCTAJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVFhfQkFUX01BWF9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVFhfQkFUX01JTl9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVFhfTUFYX0xJRkVfTUlOUwkJMzYwCS8qIG9uLWxpZmUgaW4gbWludXRlcyAqLworCisjZGVmaW5lIFBBTE1UWF9CQVRfTUVBU1VSRV9ERUxBWQkoSFogKiAxKQorCisvKiBCQUNLTElHSFQgKi8KKyNkZWZpbmUgUEFMTVRYX01BWF9JTlRFTlNJVFkJCTB4RkUKKyNkZWZpbmUgUEFMTVRYX0RFRkFVTFRfSU5URU5TSVRZCTB4N0UKKyNkZWZpbmUgUEFMTVRYX0xJTUlUX01BU0sJCTB4N0YKKyNkZWZpbmUgUEFMTVRYX1BSRVNDQUxFUgkJMHgzRgorI2RlZmluZSBQQUxNVFhfUEVSSU9EX05TCQkzNTAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTI3eC11ZGMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyN3gtdWRjLmgKaW5kZXggYmMxY2Y3ZDAuLmFiMTQ0M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyN3gtdWRjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTI3eC11ZGMuaApAQCAtOTcsNyArOTcsNyBAQAogI2RlZmluZSBVUDJPQ1JfSURPTgkJKDEgPDwgMTApCS8qIE9URyBJRCBSZWFkIEVuYWJsZSAqLwogI2RlZmluZSBVUDJPQ1JfSFhTCQkoMSA8PCAxNikJLyogSG9zdCBQb3J0IDIgVHJhbnNjZWl2ZXIgT3V0cHV0IFNlbGVjdCAqLwogI2RlZmluZSBVUDJPQ1JfSFhPRQkJKDEgPDwgMTcpCS8qIEhvc3QgUG9ydCAyIFRyYW5zY2VpdmVyIE91dHB1dCBFbmFibGUgKi8KLSNkZWZpbmUgVVAyT0NSX1NFT1MJCSgxIDw8IDI0KQkvKiBTaW5nbGUtRW5kZWQgT3V0cHV0IFNlbGVjdCAqLworI2RlZmluZSBVUDJPQ1JfU0VPUyh4KQkJKCh4ICYgNykgPDwgMjQpCS8qIFNpbmdsZS1FbmRlZCBPdXRwdXQgU2VsZWN0ICovCiAKICNkZWZpbmUgVURDQ1NOKHgpCV9fUkVHMigweDQwNjAwMTAwLCAoeCkgPDwgMikKICNkZWZpbmUgVURDQ1NSMCAgICAgICAgIF9fUkVHKDB4NDA2MDAxMDApIC8qIFVEQyBDb250cm9sL1N0YXR1cyByZWdpc3RlciAtIEVuZHBvaW50IDAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyeHhfc3BpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhMnh4X3NwaS5oCmluZGV4IDM0NTlmYjIuLjIyMDZjYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyeHhfc3BpLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTJ4eF9zcGkuaApAQCAtNDEsNCArNDEsNiBAQAogCXZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7CiB9OwogCitleHRlcm4gdm9pZCBweGEyeHhfc2V0X3NwaV9pbmZvKHVuc2lnbmVkIGlkLCBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgKmluZm8pOworCiAjZW5kaWYgLypQWEEyWFhfU1BJX0hfKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEzeHhfbmFuZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTN4eF9uYW5kLmgKaW5kZXggODFhODkzNy4uZWI0YjE5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTN4eF9uYW5kLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTN4eF9uYW5kLmgKQEAgLTE1LDQgKzE1LDYgQEAKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CiAJdW5zaWduZWQgaW50CW5yX3BhcnRzOwogfTsKKworZXh0ZXJuIHZvaWQgcHhhM3h4X3NldF9uYW5kX2luZm8oc3RydWN0IHB4YTN4eF9uYW5kX3BsYXRmb3JtX2RhdGEgKmluZm8pOwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUFhBM1hYX05BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YWZiLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhZmIuaAppbmRleCBiYmQyMjM5Li5kYWYwMThkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhZmIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhZmIuaApAQCAtNzEsNyArNzEsOCBAQAogCiAJdV9jaGFyCQlicHA7CiAJdV9pbnQJCWNtYXBfZ3JleXNjYWxlOjEsCi0JCQl1bnVzZWQ6MzE7CisJCQlkZXB0aDo4LAorCQkJdW51c2VkOjIzOwogCiAJLyogUGFyYWxsZWwgTW9kZSBUaW1pbmcgKi8KIAl1X2NoYXIJCWhzeW5jX2xlbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9yZWdzLWxjZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3JlZ3MtbGNkLmgKaW5kZXggM2JhNDY0YzkuLjgyMGExODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9yZWdzLWxjZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9yZWdzLWxjZC5oCkBAIC0yNyw2ICsyNywxMiBAQAogI2RlZmluZSBMQ0NSM180QlBQCSgyIDw8IDI0KQogI2RlZmluZSBMQ0NSM184QlBQCSgzIDw8IDI0KQogI2RlZmluZSBMQ0NSM18xNkJQUAkoNCA8PCAyNCkKKyNkZWZpbmUgTENDUjNfMThCUFAJKDUgPDwgMjQpCisjZGVmaW5lIExDQ1IzXzE4QlBQX1AJKDYgPDwgMjQpCisjZGVmaW5lIExDQ1IzXzE5QlBQCSg3IDw8IDI0KQorI2RlZmluZSBMQ0NSM18xOUJQUF9QCSgxIDw8IDI5KQorI2RlZmluZSBMQ0NSM18yNEJQUAkoKDEgPDwgMjkpIHwgKDEgPDwgMjQpKQorI2RlZmluZSBMQ0NSM18yNUJQUAkoKDEgPDwgMjkpIHwgKDIgPDwgMjQpKQogCiAjZGVmaW5lIExDQ1IzX1BERk9SXzAJKDAgPDwgMzApCiAjZGVmaW5lIExDQ1IzX1BERk9SXzEJKDEgPDwgMzApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcmVncy1zc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9yZWdzLXNzcC5oCmluZGV4IDAyNTUzMjguLjNjMDRjZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9yZWdzLXNzcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9yZWdzLXNzcC5oCkBAIC0yMCw2ICsyMCwxMCBAQAogI2RlZmluZSBTU1RTUwkJKDB4MzgpICAvKiBTU1AgVGltZXNsb3QgU3RhdHVzICovCiAjZGVmaW5lIFNTQUNECQkoMHgzQykgIC8qIFNTUCBBdWRpbyBDbG9jayBEaXZpZGVyICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QWEEzeHgpCisjZGVmaW5lIFNTQUNERAkJKDB4NDApCS8qIFNTUCBBdWRpbyBDbG9jayBEaXRoZXIgRGl2aWRlciAqLworI2VuZGlmCisKIC8qIENvbW1vbiBQWEEyeHggYml0cyBmaXJzdCAqLwogI2RlZmluZSBTU0NSMF9EU1MJKDB4MDAwMDAwMGYpCS8qIERhdGEgU2l6ZSBTZWxlY3QgKG1hc2spICovCiAjZGVmaW5lIFNTQ1IwX0RhdGFTaXplKHgpICAoKHgpIC0gMSkJLyogRGF0YSBTaXplIFNlbGVjdCBbNC4uMTZdICovCkBAIC0yOSwxMCArMzMsMTIgQEAKICNkZWZpbmUgU1NDUjBfTmF0aW9uYWwJKDB4MiA8PCA0KQkvKiBOYXRpb25hbCBNaWNyb3dpcmUgKi8KICNkZWZpbmUgU1NDUjBfRUNTCSgxIDw8IDYpCS8qIEV4dGVybmFsIGNsb2NrIHNlbGVjdCAqLwogI2RlZmluZSBTU0NSMF9TU0UJKDEgPDwgNykJLyogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgRW5hYmxlICovCisKICNpZiBkZWZpbmVkKENPTkZJR19QWEEyNXgpCiAjZGVmaW5lIFNTQ1IwX1NDUgkoMHgwMDAwZmYwMCkJLyogU2VyaWFsIENsb2NrIFJhdGUgKG1hc2spICovCiAjZGVmaW5lIFNTQ1IwX1NlckNsa0Rpdih4KSAoKCgoeCkgLSAyKS8yKSA8PCA4KSAvKiBEaXZpc29yIFsyLi41MTJdICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QWEEyN3gpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBM3h4KQogI2RlZmluZSBTU0NSMF9TQ1IJKDB4MDAwZmZmMDApCS8qIFNlcmlhbCBDbG9jayBSYXRlIChtYXNrKSAqLwogI2RlZmluZSBTU0NSMF9TZXJDbGtEaXYoeCkgKCgoeCkgLSAxKSA8PCA4KSAvKiBEaXZpc29yIFsxLi40MDk2XSAqLwogI2RlZmluZSBTU0NSMF9FRFNTCSgxIDw8IDIwKQkvKiBFeHRlbmRlZCBkYXRhIHNpemUgc2VsZWN0ICovCkBAIC00NSw2ICs1MSwxMCBAQAogI2RlZmluZSBTU0NSMF9NT0QJKDEgPDwgMzEpCS8qIE1vZGUgKG5vcm1hbCBvciBuZXR3b3JrKSAqLwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QWEEzeHgpCisjZGVmaW5lIFNTQ1IwX0ZQQ0tFCSgxIDw8IDI5KQkvKiBGSUZPIHBhY2tpbmcgZW5hYmxlICovCisjZW5kaWYKKwogI2RlZmluZSBTU0NSMV9SSUUJKDEgPDwgMCkJLyogUmVjZWl2ZSBGSUZPIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgU1NDUjFfVElFCSgxIDw8IDEpCS8qIFRyYW5zbWl0IEZJRk8gSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBTU0NSMV9MQk0JKDEgPDwgMikJLyogTG9vcC1CYWNrIE1vZGUgKi8KQEAgLTEwOSw1ICsxMTksOSBAQAogI2RlZmluZSBTU0FDRF9TQ0RCCQkoMSA8PCAzKQkvKiBTU1BTWVNDTEsgRGl2aWRlciBCeXBhc3MgKi8KICNkZWZpbmUgU1NBQ0RfQUNQUyh4KQkJKCh4KSA8PCA0KQkvKiBBdWRpbyBjbG9jayBQTEwgc2VsZWN0ICovCiAjZGVmaW5lIFNTQUNEX0FDRFMoeCkJCSgoeCkgPDwgMCkJLyogQXVkaW8gY2xvY2sgZGl2aWRlciBzZWxlY3QgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QWEEzeHgpCisjZGVmaW5lIFNTQUNEX1NDRFg4CQkoMSA8PCA3KQkvKiBTWVNDTEsgZGl2aXNpb24gcmF0aW8gc2VsZWN0ICovCisjZW5kaWYKKwogCiAjZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX1NTUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3lzdGVtLmgKaW5kZXggYmE3ZTEzMi4uNjk1NmZjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zeXN0ZW0uaApAQCAtMjEsMTkgKzIxLDQgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCi17Ci0JaWYgKGNwdV9pc19weGEyeHgoKSkKLQkJUkNTUiA9IFJDU1JfSFdSIHwgUkNTUl9XRFIgfCBSQ1NSX1NNUiB8IFJDU1JfR1BSOwotCi0JaWYgKG1vZGUgPT0gJ3MnKSB7Ci0JCS8qIEp1bXAgaW50byBST00gYXQgYWRkcmVzcyAwICovCi0JCWNwdV9yZXNldCgwKTsKLQl9IGVsc2UgewotCQkvKiBJbml0aWFsaXplIHRoZSB3YXRjaGRvZyBhbmQgbGV0IGl0IGZpcmUgKi8KLQkJT1dFUiA9IE9XRVJfV01FOwotCQlPU1NSID0gT1NTUl9NMzsKLQkJT1NNUjMgPSBPU0NSICsgMzY4NjQwOwkvKiAuLi4gaW4gMTAwIG1zICovCi0JfQotfQotCit2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90b3NhLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdG9zYS5oCmluZGV4IGM1YjZmZGUuLmE3MjgwM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90b3NhLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3Rvc2EuaApAQCAtMjUsMjEgKzI1LDE4IEBACiAgKi8KICNkZWZpbmUgVE9TQV9TQ09PUF9HUElPX0JBU0UJCU5SX0JVSUxUSU5fR1BJTwogI2RlZmluZSBUT1NBX1NDT09QX1BYQV9WQ09SRTEJCVNDT09QX0dQQ1JfUEExMQotI2RlZmluZSBUT1NBX1NDT09QX1RDNjM5M19SRVNUX0lOCVNDT09QX0dQQ1JfUEExMgorI2RlZmluZSBUT1NBX0dQSU9fVEM2MzkzWEJfUkVTVF9JTgkoVE9TQV9TQ09PUF9HUElPX0JBU0UgKyAxKQogI2RlZmluZSBUT1NBX0dQSU9fSVJfUE9XRVJEV04JCShUT1NBX1NDT09QX0dQSU9fQkFTRSArIDIpCiAjZGVmaW5lIFRPU0FfR1BJT19TRF9XUAkJCShUT1NBX1NDT09QX0dQSU9fQkFTRSArIDMpCiAjZGVmaW5lIFRPU0FfR1BJT19QV1JfT04JCShUT1NBX1NDT09QX0dQSU9fQkFTRSArIDQpCiAjZGVmaW5lIFRPU0FfU0NPT1BfQVVEX1BXUl9PTgkJU0NPT1BfR1BDUl9QQTE2Ci0jZGVmaW5lIFRPU0FfU0NPT1BfQlRfUkVTRVQJCVNDT09QX0dQQ1JfUEExNwotI2RlZmluZSBUT1NBX1NDT09QX0JUX1BXUl9FTgkJU0NPT1BfR1BDUl9QQTE4CisjZGVmaW5lIFRPU0FfR1BJT19CVF9SRVNFVAkJKFRPU0FfU0NPT1BfR1BJT19CQVNFICsgNikKKyNkZWZpbmUgVE9TQV9HUElPX0JUX1BXUl9FTgkJKFRPU0FfU0NPT1BfR1BJT19CQVNFICsgNykKICNkZWZpbmUgVE9TQV9TQ09PUF9BQ19JTl9PTAkJU0NPT1BfR1BDUl9QQTE5CiAKIC8qIEdQSU8gRGlyZWN0aW9uICAgMSA6IG91dHB1dCBtb2RlIC8gMDppbnB1dCBtb2RlICovCi0jZGVmaW5lIFRPU0FfU0NPT1BfSU9fRElSICAgICAoIFRPU0FfU0NPT1BfUFhBX1ZDT1JFMSB8IFRPU0FfU0NPT1BfVEM2MzkzX1JFU1RfSU4gfCBcCi0JCVRPU0FfU0NPT1BfQVVEX1BXUl9PTiB8XAotCQlUT1NBX1NDT09QX0JUX1JFU0VUIHwgVE9TQV9TQ09PUF9CVF9QV1JfRU4gKQotLyogR1BJTyBvdXQgcHV0IGxldmVsIHdoZW4gaW5pdCAgIDE6IEhpICovCi0jZGVmaW5lIFRPU0FfU0NPT1BfSU9fT1VUICAgICAoIFRPU0FfU0NPT1BfVEM2MzkzX1JFU1RfSU4gKQorI2RlZmluZSBUT1NBX1NDT09QX0lPX0RJUiAgICAgKFRPU0FfU0NPT1BfUFhBX1ZDT1JFMSB8IFwKKwkJVE9TQV9TQ09PUF9BVURfUFdSX09OKQogCiAvKgogICogU0NPT1AyIGphY2tldCBHUElPcwpAQCAtNDksMTYgKzQ2LDM0IEBACiAjZGVmaW5lIFRPU0FfR1BJT19OT1RFX0xFRAkJKFRPU0FfU0NPT1BfSkNfR1BJT19CQVNFICsgMSkKICNkZWZpbmUgVE9TQV9HUElPX0NIUkdfRVJSX0xFRAkJKFRPU0FfU0NPT1BfSkNfR1BJT19CQVNFICsgMikKICNkZWZpbmUgVE9TQV9HUElPX1VTQl9QVUxMVVAJCShUT1NBX1NDT09QX0pDX0dQSU9fQkFTRSArIDMpCi0jZGVmaW5lIFRPU0FfU0NPT1BfSkNfVEM2MzkzX1NVU1BFTkQJU0NPT1BfR1BDUl9QQTE1Ci0jZGVmaW5lIFRPU0FfU0NPT1BfSkNfVEMzNjkzX0wzVl9PTglTQ09PUF9HUENSX1BBMTYKKyNkZWZpbmUgVE9TQV9HUElPX1RDNjM5M1hCX1NVU1BFTkQJKFRPU0FfU0NPT1BfSkNfR1BJT19CQVNFICsgNCkKKyNkZWZpbmUgVE9TQV9HUElPX1RDNjM5M1hCX0wzVl9PTgkoVE9TQV9TQ09PUF9KQ19HUElPX0JBU0UgKyA1KQogI2RlZmluZSBUT1NBX1NDT09QX0pDX1dMQU5fREVURUNUCVNDT09QX0dQQ1JfUEExNwogI2RlZmluZSBUT1NBX0dQSU9fV0xBTl9MRUQJCShUT1NBX1NDT09QX0pDX0dQSU9fQkFTRSArIDcpCiAjZGVmaW5lIFRPU0FfU0NPT1BfSkNfQ0FSRF9MSU1JVF9TRUwJU0NPT1BfR1BDUl9QQTE5CiAKIC8qIEdQSU8gRGlyZWN0aW9uICAgMSA6IG91dHB1dCBtb2RlIC8gMDppbnB1dCBtb2RlICovCi0jZGVmaW5lIFRPU0FfU0NPT1BfSkNfSU9fRElSICggXAotCQlUT1NBX1NDT09QX0pDX1RDNjM5M19TVVNQRU5EIHwgVE9TQV9TQ09PUF9KQ19UQzM2OTNfTDNWX09OIHwgXAotCQlUT1NBX1NDT09QX0pDX0NBUkRfTElNSVRfU0VMICkKKyNkZWZpbmUgVE9TQV9TQ09PUF9KQ19JT19ESVIgKFRPU0FfU0NPT1BfSkNfQ0FSRF9MSU1JVF9TRUwpCisKKy8qCisgKiBUQzYzOTNYQiBHUElPcworICovCisjZGVmaW5lIFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFCQkoTlJfQlVJTFRJTl9HUElPICsgMiAqIDEyKQorI2RlZmluZSBUT1NBX1RDNjM5M1hCX0dQSU8oaSkJCShUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSArIChpKSkKKyNkZWZpbmUgVE9TQV9UQzYzOTNYQl9HUElPX0JJVChncGlvKQkoMSA8PCAoZ3BpbyAtIFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFKSkKKworI2RlZmluZSBUT1NBX0dQSU9fVEdfT04JCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyAwKQorI2RlZmluZSBUT1NBX0dQSU9fTF9NVVRFCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyAxKQorI2RlZmluZSBUT1NBX0dQSU9fQkxfQzIwTUEJCShUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSArIDMpCisjZGVmaW5lIFRPU0FfR1BJT19DQVJEX1ZDQ19PTgkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgNCkKKyNkZWZpbmUgVE9TQV9HUElPX0NIQVJHRV9PRkYJCShUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSArIDYpCisjZGVmaW5lIFRPU0FfR1BJT19DSEFSR0VfT0ZGX0pDCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyA3KQorI2RlZmluZSBUT1NBX0dQSU9fQkFUMF9WX09OCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyA5KQorI2RlZmluZSBUT1NBX0dQSU9fQkFUMV9WX09OCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyAxMCkKKyNkZWZpbmUgVE9TQV9HUElPX0JVX0NIUkdfT04JCShUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSArIDExKQorI2RlZmluZSBUT1NBX0dQSU9fQkFUX1NXX09OCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyAxMikKKyNkZWZpbmUgVE9TQV9HUElPX0JBVDBfVEhfT04JCShUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSArIDE0KQorI2RlZmluZSBUT1NBX0dQSU9fQkFUMV9USF9PTgkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgMTUpCiAKIC8qCiAgKiBUaW1pbmcgR2VuZXJhdG9yCkBAIC04NCwxMyArOTksMTMgQEAKICNkZWZpbmUgVE9TQV9HUElPX0pBQ0tFVF9ERVRFQ1QJCSg3KQogI2RlZmluZSBUT1NBX0dQSU9fblNEX0RFVEVDVAkJKDkpCiAjZGVmaW5lIFRPU0FfR1BJT19uU0RfSU5UCQkoMTApCi0jZGVmaW5lIFRPU0FfR1BJT19UQzYzOTNfQ0xLCQkoMTEpCisjZGVmaW5lIFRPU0FfR1BJT19UQzYzOTNYQl9DTEsJCSgxMSkKICNkZWZpbmUgVE9TQV9HUElPX0JBVDFfQ1JHCQkoMTIpCiAjZGVmaW5lIFRPU0FfR1BJT19DRl9DRAkJCSgxMykKICNkZWZpbmUgVE9TQV9HUElPX0JBVDBfQ1JHCQkoMTQpCi0jZGVmaW5lIFRPU0FfR1BJT19UQzYzOTNfSU5UCQkoMTUpCisjZGVmaW5lIFRPU0FfR1BJT19UQzYzOTNYQl9JTlQJCSgxNSkKICNkZWZpbmUgVE9TQV9HUElPX0JBVDBfTE9XCQkoMTcpCi0jZGVmaW5lIFRPU0FfR1BJT19UQzYzOTNfUkRZCQkoMTgpCisjZGVmaW5lIFRPU0FfR1BJT19UQzYzOTNYQl9SRFkJCSgxOCkKICNkZWZpbmUgVE9TQV9HUElPX09OX1JFU0VUCQkoMTkpCiAjZGVmaW5lIFRPU0FfR1BJT19FQVJfSU4JCSgyMCkKICNkZWZpbmUgVE9TQV9HUElPX0NGX0lSUQkJKDIxKQkvKiBDRiBzbG90MCBSZWFkeSAqLwpAQCAtOTksNiArMTE0LDcgQEAKICNkZWZpbmUgVE9TQV9HUElPX1RQX0lOVAkJKDMyKQkvKiBUb3VjaCBQYW5lbCBwZW4gZG93biBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgVE9TQV9HUElPX0pDX0NGX0lSUQkJKDM2KQkvKiBDRiBzbG90MSBSZWFkeSAqLwogI2RlZmluZSBUT1NBX0dQSU9fQkFUX0xPQ0tFRAkJKDM4KQkvKiBCYXR0ZXJ5IGxvY2tlZCAqLworI2RlZmluZSBUT1NBX0dQSU9fSVJEQV9UWAkJKDQ3KQogI2RlZmluZSBUT1NBX0dQSU9fVEdfU1BJX1NDTEsJCSg4MSkKICNkZWZpbmUgVE9TQV9HUElPX1RHX1NQSV9DUwkJKDgyKQogI2RlZmluZSBUT1NBX0dQSU9fVEdfU1BJX01PU0kJCSg4MykKQEAgLTEzNyw3ICsxNTMsNyBAQAogI2RlZmluZSBUT1NBX0lSUV9HUElPX0JBVDFfQ1JHICAgICAgCUlSUV9HUElPKFRPU0FfR1BJT19CQVQxX0NSRykKICNkZWZpbmUgVE9TQV9JUlFfR1BJT19DRl9DRCAgICAgICAgIAlJUlFfR1BJTyhUT1NBX0dQSU9fQ0ZfQ0QpCiAjZGVmaW5lIFRPU0FfSVJRX0dQSU9fQkFUMF9DUkcgICAgICAJSVJRX0dQSU8oVE9TQV9HUElPX0JBVDBfQ1JHKQotI2RlZmluZSBUT1NBX0lSUV9HUElPX1RDNjM5M19JTlQgICAgCUlSUV9HUElPKFRPU0FfR1BJT19UQzYzOTNfSU5UKQorI2RlZmluZSBUT1NBX0lSUV9HUElPX1RDNjM5M1hCX0lOVCAgICAJSVJRX0dQSU8oVE9TQV9HUElPX1RDNjM5M1hCX0lOVCkKICNkZWZpbmUgVE9TQV9JUlFfR1BJT19CQVQwX0xPVyAgICAgIAlJUlFfR1BJTyhUT1NBX0dQSU9fQkFUMF9MT1cpCiAjZGVmaW5lIFRPU0FfSVJRX0dQSU9fRUFSX0lOICAgICAgICAJSVJRX0dQSU8oVE9TQV9HUElPX0VBUl9JTikKICNkZWZpbmUgVE9TQV9JUlFfR1BJT19DRl9JUlEgICAgICAgIAlJUlFfR1BJTyhUT1NBX0dQSU9fQ0ZfSVJRKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3Rvc2FfYnQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90b3NhX2J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjM2MzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90b3NhX2J0LmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIFRvc2EgYmx1ZXRvb3RoIGJ1aWx0LWluIGNoaXAgY29udHJvbC4KKyAqCisgKiBMYXRlciBpdCBtYXkgYmUgc2hhcmVkIHdpdGggc29tZSBvdGhlciBwbGF0Zm9ybXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IERtaXRyeSBCYXJ5c2hrb3YKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2lmbmRlZiBUT1NBX0JUX0gKKyNkZWZpbmUgVE9TQV9CVF9ICisKK3N0cnVjdCB0b3NhX2J0X2RhdGEgeworCWludCBncGlvX3B3cjsKKwlpbnQgZ3Bpb19yZXNldDsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3VuY29tcHJlc3MuaAppbmRleCBkYWRmNGMyLi5mNDU1MTI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS91bmNvbXByZXNzLmgKQEAgLTExLDExICsxMSwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2RlZmluZSBfX1JFRyh4KQkoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKil4KQorI2RlZmluZSBfX1JFRyh4KSAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKil4KQogCi0jZGVmaW5lIFVBUlQJCUZGVUFSVAotCitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqVUFSVCA9IEZGVUFSVDsKIAogc3RhdGljIGlubGluZSB2b2lkIHB1dGMoY2hhciBjKQogewpAQCAtMzMsOCArMzMsMTMgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfbGl0dGxldG9uKCkpCisJCVVBUlQgPSBTVFVBUlQ7Cit9CisKIC8qCiAgKiBub3RoaW5nIHRvIGRvCiAgKi8KLSNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQogI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS96eWxvbml0ZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3p5bG9uaXRlLmgKaW5kZXggZGU1NzdkZS4uMGQzNWNhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3p5bG9uaXRlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3p5bG9uaXRlLmgKQEAgLTE2LDYgKzE2LDggQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fbW1jX3Nsb3Qgenlsb25pdGVfbW1jX3Nsb3RbXTsKIAogZXh0ZXJuIGludCBncGlvX2V0aF9pcnE7CitleHRlcm4gaW50IGdwaW9fZGVidWdfbGVkMTsKK2V4dGVybiBpbnQgZ3Bpb19kZWJ1Z19sZWQyOwogCiBleHRlcm4gaW50IHdtOTcxM19pcnE7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb3AzeHgtYWRtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC1hZG1hLmgKaW5kZXggYTMyYjg2YS4uYWY2NDY3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC1hZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC1hZG1hLmgKQEAgLTI2MCw3ICsyNjAsNyBAQAogc3RhdGljIGlubGluZSBpbnQgaW9wM3h4X2FhdV94b3Jfc2xvdF9jb3VudChzaXplX3QgbGVuLCBpbnQgc3JjX2NudCwKIAkJCQkJaW50ICpzbG90c19wZXJfb3ApCiB7Ci0Jc3RhdGljIGNvbnN0IGludCBzbG90X2NvdW50X3RhYmxlW10gPSB7IDAsCisJc3RhdGljIGNvbnN0IGNoYXIgc2xvdF9jb3VudF90YWJsZVtdID0gewogCQkJCQkJMSwgMSwgMSwgMSwgLyogMDEgLSAwNCAqLwogCQkJCQkJMiwgMiwgMiwgMiwgLyogMDUgLSAwOCAqLwogCQkJCQkJNCwgNCwgNCwgNCwgLyogMDkgLSAxMiAqLwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCQkJCQk4LCA4LCA4LCA4LCAvKiAyNSAtIDI4ICovCiAJCQkJCQk4LCA4LCA4LCA4LCAvKiAyOSAtIDMyICovCiAJCQkJCSAgICAgIH07Ci0JKnNsb3RzX3Blcl9vcCA9IHNsb3RfY291bnRfdGFibGVbc3JjX2NudF07CisJKnNsb3RzX3Blcl9vcCA9IHNsb3RfY291bnRfdGFibGVbc3JjX2NudCAtIDFdOwogCXJldHVybiAqc2xvdHNfcGVyX29wOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0va2dkYi5oIGIvaW5jbHVkZS9hc20tYXJtL2tnZGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2FmNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2tnZGIuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIEFSTSBLR0RCIHN1cHBvcnQKKyAqCisgKiBBdXRob3I6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAbXZpc3RhLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICovCisKKyNpZm5kZWYgX19BUk1fS0dEQl9IX18KKyNkZWZpbmUgX19BUk1fS0dEQl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCisvKgorICogR0RCIGFzc3VtZXMgdGhhdCB3ZSdyZSBhIHVzZXIgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZCwgc28KKyAqIGl0IHdpbGwgc2VuZCB1cyBhbiBTV0kgY29tbWFuZCB0byB3cml0ZSBpbnRvIG1lbW9yeSBhcyB0aGUKKyAqIGRlYnVnIHRyYXAuIFdoZW4gYW4gU1dJIG9jY3VycywgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gYWRkciBpcworICogcGxhY2VkIGludG8gUjE0X3N2YyBiZWZvcmUganVtcGluZyB0byB0aGUgdmVjdG9yIHRyYXAuCisgKiBUaGlzIGRvZXNuJ3Qgd29yayBmb3Iga2VybmVsIGRlYnVnZ2luZyBhcyB3ZSBhcmUgYWxyZWFkeSBpbiBTVkMKKyAqIHdlIHdvdWxkIGxvb3NlIHRoZSBrZXJuZWwncyBMUiwgd2hpY2ggaXMgYSBiYWQgdGhpbmcuIFRoaXMKKyAqIGlzICBiYWQgdGhpbmcuCisgKgorICogQnkgZG9pbmcgdGhpcyBhcyBhbiB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gdHJhcCwgd2UgZm9yY2UgYSBtb2RlCisgKiBzd2l0Y2ggZnJvbSBTVkMgdG8gVU5EIG1vZGUsIGFsbG93aW5nIHVzIHRvIHNhdmUgZnVsbCBrZXJuZWwgc3RhdGUuCisgKgorICogV2UgYWxzbyBkZWZpbmUgYSBLR0RCX0NPTVBJTEVEX0JSRUFLIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUKKyAqIGluIGJyZWFrcG9pbnRzLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdGhpbmdzIGxpa2Ugc3lzcnEtRyBhbmQgZm9yCisgKiB0aGUgaW5pdGlhbCBicmVha3BvaW50IGZyb20gdHJhcF9pbml0KCkuCisgKgorICogTm90ZSB0byBBUk0gSFcgZGVzaWduZXJzOiBBZGQgcmVhbCB0cmFwIHN1cHBvcnQgbGlrZSBTSCAmJiBQUEMgdG8KKyAqIG1ha2Ugb3VyIGxpdmVzIG11Y2ggbXVjaCBzaW1wbGVyLiA6KQorICovCisjZGVmaW5lIEJSRUFLX0lOU1RSX1NJWkUJNAorI2RlZmluZSBHREJfQlJFQUtJTlNUCQkweGVmOWYwMDAxCisjZGVmaW5lIEtHREJfQlJFQUtJTlNUCQkweGU3ZmZkZWZlCisjZGVmaW5lIEtHREJfQ09NUElMRURfQlJFQUsJMHhlN2ZmZGVmZgorI2RlZmluZSBDQUNIRV9GTFVTSF9JU19TQUZFCTEKKworI2lmbmRlZglfX0FTU0VNQkxZX18KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2dkYl9icmVha3BvaW50KHZvaWQpCit7CisJYXNtKCIud29yZCAweGU3ZmZkZWZmIik7Cit9CisKK2V4dGVybiB2b2lkIGtnZGJfaGFuZGxlX2J1c19lcnJvcih2b2lkKTsKK2V4dGVybiBpbnQga2dkYl9mYXVsdF9leHBlY3RlZDsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIEZyb20gS2V2aW4gSGlsbWFuOgorICoKKyAqIGdkYiBpcyBleHBlY3RpbmcgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgbGF5b3V0LgorICoKKyAqIHIwLXIxNTogMSBsb25nIHdvcmQgZWFjaAorICogZjAtZjc6ICB1bnVzZWQsIDMgbG9uZyB3b3JkcyBlYWNoICEhCisgKiBmcHM6ICAgIHVudXNlZCwgMSBsb25nIHdvcmQKKyAqIGNwc3I6ICAgMSBsb25nIHdvcmQKKyAqCisgKiBFdmVuIHRob3VnaCBmMC1mNyBhbmQgZnBzIGFyZSBub3QgdXNlZCwgdGhleSBuZWVkIHRvIGJlCisgKiBwcmVzZW50IGluIHRoZSByZWdpc3RlcnMgc2VudCBmb3IgY29ycmVjdCBwcm9jZXNzaW5nIGluCisgKiB0aGUgaG9zdC1zaWRlIGdkYi4KKyAqCisgKiBJbiBwYXJ0aWN1bGFyLCBpdCBpcyBjcnVjaWFsIHRoYXQgQ1BTUiBpcyBpbiB0aGUgcmlnaHQgcGxhY2UsCisgKiBvdGhlcndpc2UgZ2RiIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGludGVycHJldCBzdGVwcGluZyBvdmVyCisgKiBjb25kaXRpb25hbCBicmFuY2hlcy4KKyAqLworI2RlZmluZSBfR1BfUkVHUwkJMTYKKyNkZWZpbmUgX0ZQX1JFR1MJCTgKKyNkZWZpbmUgX0VYVFJBX1JFR1MJCTIKKyNkZWZpbmUgR0RCX01BWF9SRUdTCQkoX0dQX1JFR1MgKyAoX0ZQX1JFR1MgKiAzKSArIF9FWFRSQV9SRUdTKQorCisjZGVmaW5lIEtHREJfTUFYX05PX0NQVVMJMQorI2RlZmluZSBCVUZNQVgJCQk0MDAKKyNkZWZpbmUgTlVNUkVHQllURVMJCShHREJfTUFYX1JFR1MgPDwgMikKKyNkZWZpbmUgTlVNQ1JJVFJFR0JZVEVTCQkoMzIgPDwgMikKKworI2RlZmluZSBfUjAJCQkwCisjZGVmaW5lIF9SMQkJCTEKKyNkZWZpbmUgX1IyCQkJMgorI2RlZmluZSBfUjMJCQkzCisjZGVmaW5lIF9SNAkJCTQKKyNkZWZpbmUgX1I1CQkJNQorI2RlZmluZSBfUjYJCQk2CisjZGVmaW5lIF9SNwkJCTcKKyNkZWZpbmUgX1I4CQkJOAorI2RlZmluZSBfUjkJCQk5CisjZGVmaW5lIF9SMTAJCQkxMAorI2RlZmluZSBfRlAJCQkxMQorI2RlZmluZSBfSVAJCQkxMgorI2RlZmluZSBfU1BUCQkJMTMKKyNkZWZpbmUgX0xSCQkJMTQKKyNkZWZpbmUgX1BDCQkJMTUKKyNkZWZpbmUgX0NQU1IJCQkoR0RCX01BWF9SRUdTIC0gMSkKKworLyoKKyAqIFNvIHRoYXQgd2UgY2FuIGRlbm90ZSB0aGUgZW5kIG9mIGEgZnJhbWUgZm9yIHRyYWNpbmcsCisgKiBpbiB0aGUgc2ltcGxlIGNhc2U6CisgKi8KKyNkZWZpbmUgQ0ZJX0VORF9GUkFNRShmdW5jKQlfX0NGSV9FTkRfRlJBTUUoX1BDLCBfU1BULCBmdW5jKQorCisjZW5kaWYgLyogX19BU01fS0dEQl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3VkY19weGEyeHguaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3VkY19weGEyeHguaAppbmRleCBmOWYzNjA2Li45ZTVlZDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC91ZGNfcHhhMnh4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvdWRjX3B4YTJ4eC5oCkBAIC0yMyw2ICsyMyw3IEBACiAJICovCiAJYm9vbAlncGlvX3ZidXNfaW52ZXJ0ZWQ7CiAJdTE2CWdwaW9fdmJ1czsJCQkvKiBoaWdoID09IHZidXMgcHJlc2VudCAqLworCWJvb2wJZ3Bpb19wdWxsdXBfaW52ZXJ0ZWQ7CiAJdTE2CWdwaW9fcHVsbHVwOwkJCS8qIGhpZ2ggPT0gcHVsbHVwIGFjdGl2YXRlZCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtb3Jpb24vbXZfeG9yLmggYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1vcmlvbi9tdl94b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzQ5ZThmZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LW9yaW9uL212X3hvci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBNYXJ2ZWxsIFhPUiBwbGF0Zm9ybSBkZXZpY2UgZGF0YSBkZWZpbml0aW9uIGZpbGUuCisgKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX09SSU9OX01WX1hPUl9ICisjZGVmaW5lIF9fQVNNX1BMQVRfT1JJT05fTVZfWE9SX0gKKworI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKworI2RlZmluZSBNVl9YT1JfU0hBUkVEX05BTUUJIm12X3hvcl9zaGFyZWQiCisjZGVmaW5lIE1WX1hPUl9OQU1FCQkibXZfeG9yIgorCitzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvOworCitzdHJ1Y3QgbXZfeG9yX3BsYXRmb3JtX3NoYXJlZF9kYXRhIHsKKwlzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvCSpkcmFtOworfTsKKworc3RydWN0IG12X3hvcl9wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqc2hhcmVkOworCWludAkJCQlod19pZDsKKwlkbWFfY2FwX21hc2tfdAkJCWNhcF9tYXNrOworCXNpemVfdAkJCQlwb29sX3NpemU7Cit9OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3RyYXBzLmggYi9pbmNsdWRlL2FzbS1hcm0vdHJhcHMuaAppbmRleCBmMTU0MWFmLi5hYTM5OWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdHJhcHMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdHJhcHMuaApAQCAtMjQsNCArMjQsNiBAQAogCSAgICAgICBwdHIgPCAodW5zaWduZWQgbG9uZykmX19leGNlcHRpb25fdGV4dF9lbmQ7CiB9CiAKK2V4dGVybiB2b2lkIF9faW5pdCBlYXJseV90cmFwX2luaXQodm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYXQzMmFwNzAweC5oIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYXQzMmFwNzAweC5oCmluZGV4IDMxZTQ4YjAuLmQxOGEzMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwL2F0MzJhcDcwMHguaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9hdDMyYXA3MDB4LmgKQEAgLTMwLDQgKzMwLDIwIEBACiAjZGVmaW5lIEdQSU9fUElOX1BEKE4pCShHUElPX1BJT0RfQkFTRSArIChOKSkKICNkZWZpbmUgR1BJT19QSU5fUEUoTikJKEdQSU9fUElPRV9CQVNFICsgKE4pKQogCisKKy8qCisgKiBETUFDIHBlcmlwaGVyYWwgaGFyZHdhcmUgaGFuZHNoYWtpbmcgaW50ZXJmYWNlcywgdXNlZCB3aXRoIGR3X2RtYWMKKyAqLworI2RlZmluZSBETUFDX01DSV9SWAkJMAorI2RlZmluZSBETUFDX01DSV9UWAkJMQorI2RlZmluZSBETUFDX0RBQ19UWAkJMgorI2RlZmluZSBETUFDX0FDOTdfQV9SWAkJMworI2RlZmluZSBETUFDX0FDOTdfQV9UWAkJNAorI2RlZmluZSBETUFDX0FDOTdfQl9SWAkJNQorI2RlZmluZSBETUFDX0FDOTdfQl9UWAkJNgorI2RlZmluZSBETUFDX0RNQVJFUV8wCQk3CisjZGVmaW5lIERNQUNfRE1BUkVRXzEJCTgKKyNkZWZpbmUgRE1BQ19ETUFSRVFfMgkJOQorI2RlZmluZSBETUFDX0RNQVJFUV8zCQkxMAorCiAjZW5kaWYgLyogX19BU01fQVJDSF9BVDMyQVA3MDBYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9pb2N0bHMuaAppbmRleCAwNTAwNDI2Li4wY2YyYzBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9pb2N0bHMuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9pb2N0bHMuaApAQCAtNDcsNiArNDcsMTAgQEAKICNkZWZpbmUgVElPQ1NCUksJMHg1NDI3ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZSBUSU9DQ0JSSwkweDU0MjggIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIFRJT0NHU0lECTB4NTQyOSAgLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCisjZGVmaW5lIFRDR0VUUzIJCV9JT1IoJ1QnLDB4MkEsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsMHgyQiwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFNXMglfSU9XKCdUJywweDJDLCBzdHJ1Y3QgdGVybWlvczIpCisjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCiAjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvS2J1aWxkIGIvaW5jbHVkZS9hc20tY3Jpcy9LYnVpbGQKaW5kZXggMTc0NTU0NS4uYjcwMzdkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9LYnVpbGQKQEAgLTEsNyArMSw4IEBACiBpbmNsdWRlIGluY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQogCi1oZWFkZXItJChDT05GSUdfRVRSQVhfQVJDSF9WMTApICs9IGFyY2gtdjEwLwotaGVhZGVyLSQoQ09ORklHX0VUUkFYX0FSQ0hfVjMyKSArPSBhcmNoLXYzMi8KK2hlYWRlci15ICs9IGFyY2gvCitoZWFkZXIteSArPSBhcmNoLXYxMC8KK2hlYWRlci15ICs9IGFyY2gtdjMyLwogCiBoZWFkZXIteSArPSBldGhlcm5ldC5oCiBoZWFkZXIteSArPSBydGMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tZnJ2L2lvY3Rscy5oCmluZGV4IDM0MWM3ZGQuLmQwYzMwZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9pb2N0bHMuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaW9jdGxzLmgKQEAgLTQ3LDYgKzQ3LDEwIEBACiAjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLworI2RlZmluZSBUQ0dFVFMyCQlfSU9SKCdUJywweDJBLCBzdHJ1Y3QgdGVybWlvczIpCisjZGVmaW5lIFRDU0VUUzIJCV9JT1coJ1QnLDB4MkIsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTVzIJX0lPVygnVCcsMHgyQywgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywweDJELCBzdHJ1Y3QgdGVybWlvczIpCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLwogI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWZydi90ZXJtYml0cy5oCmluZGV4IDc0ODUxYjQuLjU1Njg0OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi90ZXJtYml0cy5oCkBAIC0xNDEsNiArMTQxLDcgQEAKICNkZWZpbmUgSFVQQ0wJMDAwMjAwMAogI2RlZmluZSBDTE9DQUwJMDAwNDAwMAogI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUgICAgQk9USEVSIDAwMTAwMDAKICNkZWZpbmUgICAgQjU3NjAwIDAwMTAwMDEKICNkZWZpbmUgICBCMTE1MjAwIDAwMTAwMDIKICNkZWZpbmUgICBCMjMwNDAwIDAwMTAwMDMKQEAgLTE1NiwxMSArMTU3LDEzIEBACiAjZGVmaW5lICBCMzAwMDAwMCAwMDEwMDE1CiAjZGVmaW5lICBCMzUwMDAwMCAwMDEwMDE2CiAjZGVmaW5lICBCNDAwMDAwMCAwMDEwMDE3Ci0jZGVmaW5lIENJQkFVRAkgIDAwMjAwMzYwMDAwMAkvKiBpbnB1dCBiYXVkIHJhdGUgKG5vdCB1c2VkKSAqLworI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJCS8qIElucHV0IGJhdWQgcmF0ZSAqLwogI2RlZmluZSBDVFZCCSAgMDA0MDAwMDAwMDAwCQkvKiBWaXNpb0JyYWlsbGUgVGVybWluYWwgZmxvdyBjb250cm9sICovCiAjZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLwogI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KIAorI2RlZmluZSBJQlNISUZUCTE2CQkJLyogU2hpZnQgZnJvbSBDQkFVRCB0byBDSUJBVUQgKi8KKwogLyogY19sZmxhZyBiaXRzICovCiAjZGVmaW5lIElTSUcJMDAwMDAwMQogI2RlZmluZSBJQ0FOT04JMDAwMDAwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9LYnVpbGQgYi9pbmNsdWRlL2FzbS1pYTY0L0tidWlsZAppbmRleCBlYjI0YTNmLi5jY2JlOGFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L0tidWlsZAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L0tidWlsZApAQCAtNSwxMiArNSwxMiBAQAogaGVhZGVyLXkgKz0gZnBzd2EuaAogaGVhZGVyLXkgKz0gaWE2NHJlZ3MuaAogaGVhZGVyLXkgKz0gaW50ZWxfaW50cmluLmgKLWhlYWRlci15ICs9IGludHJpbnNpY3MuaAogaGVhZGVyLXkgKz0gcGVyZm1vbl9kZWZhdWx0X3NtcGwuaAogaGVhZGVyLXkgKz0gcHRyYWNlX29mZnNldHMuaAogaGVhZGVyLXkgKz0gcnNlLmgKIGhlYWRlci15ICs9IHVjb250ZXh0LmgKIAogdW5pZmRlZi15ICs9IGdjY19pbnRyaW4uaAordW5pZmRlZi15ICs9IGludHJpbnNpY3MuaAogdW5pZmRlZi15ICs9IHBlcmZtb24uaAogdW5pZmRlZi15ICs9IHVzdGFjay5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2djY19pbnRyaW4uaCBiL2luY2x1ZGUvYXNtLWlhNjQvZ2NjX2ludHJpbi5oCmluZGV4IDJmZTI5MmMuLjBmNWI1NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvZ2NjX2ludHJpbi5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvZ2NjX2ludHJpbi5oCkBAIC0zMiw3ICszMiw3IEBACiByZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfcjEzIGFzbSAoInIxMyIpIF9fdXNlZDsKICNlbmRpZgogCi0jZGVmaW5lIGlhNjRfc2V0cmVnKHJlZ251bSwgdmFsKQkJCQkJCVwKKyNkZWZpbmUgaWE2NF9uYXRpdmVfc2V0cmVnKHJlZ251bSwgdmFsKQkJCQkJCVwKICh7CQkJCQkJCQkJCVwKIAlzd2l0Y2ggKHJlZ251bSkgewkJCQkJCQlcCiAJICAgIGNhc2UgX0lBNjRfUkVHX1BTUl9MOgkJCQkJCVwKQEAgLTYxLDcgKzYxLDcgQEAKIAl9CQkJCQkJCQkJXAogfSkKIAotI2RlZmluZSBpYTY0X2dldHJlZyhyZWdudW0pCQkJCQkJCVwKKyNkZWZpbmUgaWE2NF9uYXRpdmVfZ2V0cmVnKHJlZ251bSkJCQkJCQlcCiAoewkJCQkJCQkJCQlcCiAJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCVwKIAkJCQkJCQkJCQlcCkBAIC0zODUsNyArMzg1LDcgQEAKIAogI2RlZmluZSBpYTY0X2ludmFsYSgpIGFzbSB2b2xhdGlsZSAoImludmFsYSIgOjo6ICJtZW1vcnkiKQogCi0jZGVmaW5lIGlhNjRfdGhhc2goYWRkcikJCQkJCQkJXAorI2RlZmluZSBpYTY0X25hdGl2ZV90aGFzaChhZGRyKQkJCQkJCQlcCiAoewkJCQkJCQkJCQlcCiAJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCVwKIAlhc20gdm9sYXRpbGUgKCJ0aGFzaCAlMD0lMSIgOiAiPXIiKGlhNjRfaW50cmlfcmVzKSA6ICJyIiAoYWRkcikpOwlcCkBAIC00MzgsMTAgKzQzOCwxMCBAQAogI2RlZmluZSBpYTY0X3NldF9wbWQoaW5kZXgsIHZhbCkJCQkJCQlcCiAJYXNtIHZvbGF0aWxlICgibW92IHBtZFslMF09JTEiIDo6ICJyIihpbmRleCksICJyIih2YWwpIDogIm1lbW9yeSIpCiAKLSNkZWZpbmUgaWE2NF9zZXRfcnIoaW5kZXgsIHZhbCkJCQkJCQkJXAorI2RlZmluZSBpYTY0X25hdGl2ZV9zZXRfcnIoaW5kZXgsIHZhbCkJCQkJCQkJXAogCWFzbSB2b2xhdGlsZSAoIm1vdiByclslMF09JTEiIDo6ICJyIihpbmRleCksICJyIih2YWwpIDogIm1lbW9yeSIpOwogCi0jZGVmaW5lIGlhNjRfZ2V0X2NwdWlkKGluZGV4KQkJCQkJCQkJXAorI2RlZmluZSBpYTY0X25hdGl2ZV9nZXRfY3B1aWQoaW5kZXgpCQkJCQkJCVwKICh7CQkJCQkJCQkJCQlcCiAJX191NjQgaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCiAJYXNtIHZvbGF0aWxlICgibW92ICUwPWNwdWlkWyVyMV0iIDogIj1yIihpYTY0X2ludHJpX3JlcykgOiAick8iKGluZGV4KSk7CVwKQEAgLTQ3NywzMyArNDc3LDMzIEBACiB9KQogCiAKLSNkZWZpbmUgaWE2NF9nZXRfcG1kKGluZGV4KQkJCQkJCQlcCisjZGVmaW5lIGlhNjRfbmF0aXZlX2dldF9wbWQoaW5kZXgpCQkJCQkJXAogKHsJCQkJCQkJCQkJXAogCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCQlcCiAJYXNtIHZvbGF0aWxlICgibW92ICUwPXBtZFslMV0iIDogIj1yIihpYTY0X2ludHJpX3JlcykgOiAiciIoaW5kZXgpKTsJXAogCWlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAogfSkKIAotI2RlZmluZSBpYTY0X2dldF9ycihpbmRleCkJCQkJCQkJXAorI2RlZmluZSBpYTY0X25hdGl2ZV9nZXRfcnIoaW5kZXgpCQkJCQkJXAogKHsJCQkJCQkJCQkJXAogCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJCQlcCiAJYXNtIHZvbGF0aWxlICgibW92ICUwPXJyWyUxXSIgOiAiPXIiKGlhNjRfaW50cmlfcmVzKSA6ICJyIiAoaW5kZXgpKTsJXAogCWlhNjRfaW50cmlfcmVzOwkJCQkJCQkJXAogfSkKIAotI2RlZmluZSBpYTY0X2ZjKGFkZHIpCWFzbSB2b2xhdGlsZSAoImZjICUwIiA6OiAiciIoYWRkcikgOiAibWVtb3J5IikKKyNkZWZpbmUgaWE2NF9uYXRpdmVfZmMoYWRkcikJYXNtIHZvbGF0aWxlICgiZmMgJTAiIDo6ICJyIihhZGRyKSA6ICJtZW1vcnkiKQogCiAKICNkZWZpbmUgaWE2NF9zeW5jX2koKQlhc20gdm9sYXRpbGUgKCI7OyBzeW5jLmkiIDo6OiAibWVtb3J5IikKIAotI2RlZmluZSBpYTY0X3NzbShtYXNrKQlhc20gdm9sYXRpbGUgKCJzc20gJTAiOjogImkiKChtYXNrKSkgOiAibWVtb3J5IikKLSNkZWZpbmUgaWE2NF9yc20obWFzaykJYXNtIHZvbGF0aWxlICgicnNtICUwIjo6ICJpIigobWFzaykpIDogIm1lbW9yeSIpCisjZGVmaW5lIGlhNjRfbmF0aXZlX3NzbShtYXNrKQlhc20gdm9sYXRpbGUgKCJzc20gJTAiOjogImkiKChtYXNrKSkgOiAibWVtb3J5IikKKyNkZWZpbmUgaWE2NF9uYXRpdmVfcnNtKG1hc2spCWFzbSB2b2xhdGlsZSAoInJzbSAlMCI6OiAiaSIoKG1hc2spKSA6ICJtZW1vcnkiKQogI2RlZmluZSBpYTY0X3N1bShtYXNrKQlhc20gdm9sYXRpbGUgKCJzdW0gJTAiOjogImkiKChtYXNrKSkgOiAibWVtb3J5IikKICNkZWZpbmUgaWE2NF9ydW0obWFzaykJYXNtIHZvbGF0aWxlICgicnVtICUwIjo6ICJpIigobWFzaykpIDogIm1lbW9yeSIpCiAKICNkZWZpbmUgaWE2NF9wdGNlKGFkZHIpCWFzbSB2b2xhdGlsZSAoInB0Yy5lICUwIiA6OiAiciIoYWRkcikpCiAKLSNkZWZpbmUgaWE2NF9wdGNnYShhZGRyLCBzaXplKQkJCQkJCQlcCisjZGVmaW5lIGlhNjRfbmF0aXZlX3B0Y2dhKGFkZHIsIHNpemUpCQkJCQkJXAogZG8gewkJCQkJCQkJCQlcCiAJYXNtIHZvbGF0aWxlICgicHRjLmdhICUwLCUxIiA6OiAiciIoYWRkciksICJyIihzaXplKSA6ICJtZW1vcnkiKTsJXAogCWlhNjRfZHZfc2VyaWFsaXplX2RhdGEoKTsJCQkJCQlcCkBAIC02MDgsNyArNjA4LDcgQEAKICAgICAgICAgfQkJCQkJCQkJXAogfSkKIAotI2RlZmluZSBpYTY0X2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZSh4KQkJCVwKKyNkZWZpbmUgaWE2NF9uYXRpdmVfaW50cmluX2xvY2FsX2lycV9yZXN0b3JlKHgpCQkJXAogZG8gewkJCQkJCQkJXAogCWFzbSB2b2xhdGlsZSAoIjs7ICAgY21wLm5lIHA2LHA3PSUwLHIwOzsiCQlcCiAJCSAgICAgICIocDYpIHNzbSBwc3IuaTsiCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1pYTY0L2h3X2lycS5oCmluZGV4IDc2MzY2ZGMuLjVjOTljYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9od19pcnEuaApAQCAtMTUsNyArMTUsMTEgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCisjaWZuZGVmIENPTkZJR19QQVJBVklSVAogdHlwZWRlZiB1OCBpYTY0X3ZlY3RvcjsKKyNlbHNlCit0eXBlZGVmIHUxNiBpYTY0X3ZlY3RvcjsKKyNlbmRpZgogCiAvKgogICogMCBzcGVjaWFsCkBAIC0xMDQsMTMgKzEwOCwyNCBAQAogCiBleHRlcm4gc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGlycV90eXBlX2lhNjRfbHNhcGljOwkvKiBDUFUtaW50ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KIAorI2lmZGVmIENPTkZJR19QQVJBVklSVF9HVUVTVAorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2Vsc2UKKyNkZWZpbmUgaWE2NF9yZWdpc3Rlcl9pcGkJaWE2NF9uYXRpdmVfcmVnaXN0ZXJfaXBpCisjZGVmaW5lIGFzc2lnbl9pcnFfdmVjdG9yCWlhNjRfbmF0aXZlX2Fzc2lnbl9pcnFfdmVjdG9yCisjZGVmaW5lIGZyZWVfaXJxX3ZlY3RvcgkJaWE2NF9uYXRpdmVfZnJlZV9pcnFfdmVjdG9yCisjZGVmaW5lIHJlZ2lzdGVyX3BlcmNwdV9pcnEJaWE2NF9uYXRpdmVfcmVnaXN0ZXJfcGVyY3B1X2lycQorI2RlZmluZSBpYTY0X3Jlc2VuZF9pcnEJCWlhNjRfbmF0aXZlX3Jlc2VuZF9pcnEKKyNlbmRpZgorCitleHRlcm4gdm9pZCBpYTY0X25hdGl2ZV9yZWdpc3Rlcl9pcGkodm9pZCk7CiBleHRlcm4gaW50IGJpbmRfaXJxX3ZlY3RvcihpbnQgaXJxLCBpbnQgdmVjdG9yLCBjcHVtYXNrX3QgZG9tYWluKTsKLWV4dGVybiBpbnQgYXNzaWduX2lycV92ZWN0b3IgKGludCBpcnEpOwkvKiBhbGxvY2F0ZSBhIGZyZWUgdmVjdG9yICovCi1leHRlcm4gdm9pZCBmcmVlX2lycV92ZWN0b3IgKGludCB2ZWN0b3IpOworZXh0ZXJuIGludCBpYTY0X25hdGl2ZV9hc3NpZ25faXJxX3ZlY3RvciAoaW50IGlycSk7CS8qIGFsbG9jYXRlIGEgZnJlZSB2ZWN0b3IgKi8KK2V4dGVybiB2b2lkIGlhNjRfbmF0aXZlX2ZyZWVfaXJxX3ZlY3RvciAoaW50IHZlY3Rvcik7CiBleHRlcm4gaW50IHJlc2VydmVfaXJxX3ZlY3RvciAoaW50IHZlY3Rvcik7CiBleHRlcm4gdm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBpYTY0X3NlbmRfaXBpIChpbnQgY3B1LCBpbnQgdmVjdG9yLCBpbnQgZGVsaXZlcnlfbW9kZSwgaW50IHJlZGlyZWN0KTsKLWV4dGVybiB2b2lkIHJlZ2lzdGVyX3BlcmNwdV9pcnEgKGlhNjRfdmVjdG9yIHZlYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKK2V4dGVybiB2b2lkIGlhNjRfbmF0aXZlX3JlZ2lzdGVyX3BlcmNwdV9pcnEgKGlhNjRfdmVjdG9yIHZlYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIGV4dGVybiBpbnQgY2hlY2tfaXJxX3VzZWQgKGludCBpcnEpOwogZXh0ZXJuIHZvaWQgZGVzdHJveV9hbmRfcmVzZXJ2ZV9pcnEgKHVuc2lnbmVkIGludCBpcnEpOwogCkBAIC0xMjIsNyArMTM3LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY29tcGxldGVfbW92ZSh1bnNpZ25lZCBpbnQgaXJxKSB7fQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpYTY0X3Jlc2VuZF9pcnEodW5zaWduZWQgaW50IHZlY3RvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpYTY0X25hdGl2ZV9yZXNlbmRfaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpCiB7CiAJcGxhdGZvcm1fc2VuZF9pcGkoc21wX3Byb2Nlc3Nvcl9pZCgpLCB2ZWN0b3IsIElBNjRfSVBJX0RNX0lOVCwgMCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2ludGVsX2ludHJpbi5oIGIvaW5jbHVkZS9hc20taWE2NC9pbnRlbF9pbnRyaW4uaAppbmRleCBhNTIwZDEwLi41M2NlYzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2ludGVsX2ludHJpbi5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaW50ZWxfaW50cmluLmgKQEAgLTE2LDggKzE2LDggQEAKIAkJIAkgKiBpbnRyaW5zaWMKIAkJIAkgKi8KIAotI2RlZmluZSBpYTY0X2dldHJlZwkJX19nZXRSZWcKLSNkZWZpbmUgaWE2NF9zZXRyZWcJCV9fc2V0UmVnCisjZGVmaW5lIGlhNjRfbmF0aXZlX2dldHJlZwlfX2dldFJlZworI2RlZmluZSBpYTY0X25hdGl2ZV9zZXRyZWcJX19zZXRSZWcKIAogI2RlZmluZSBpYTY0X2hpbnQJCV9faGludAogI2RlZmluZSBpYTY0X2hpbnRfcGF1c2UJCV9faGludF9wYXVzZQpAQCAtMzksMTAgKzM5LDEwIEBACiAjZGVmaW5lIGlhNjRfaW52YWxhX2ZyCQlfX2ludmFsYV9mcgogI2RlZmluZSBpYTY0X25vcAkJX19ub3AKICNkZWZpbmUgaWE2NF9zdW0JCV9fc3VtCi0jZGVmaW5lIGlhNjRfc3NtCQlfX3NzbQorI2RlZmluZSBpYTY0X25hdGl2ZV9zc20JCV9fc3NtCiAjZGVmaW5lIGlhNjRfcnVtCQlfX3J1bQotI2RlZmluZSBpYTY0X3JzbQkJX19yc20KLSNkZWZpbmUgaWE2NF9mYyAJCV9fZmMKKyNkZWZpbmUgaWE2NF9uYXRpdmVfcnNtCQlfX3JzbQorI2RlZmluZSBpYTY0X25hdGl2ZV9mYyAJCV9fZmMKIAogI2RlZmluZSBpYTY0X2xkZnMJCV9fbGRmcwogI2RlZmluZSBpYTY0X2xkZmQJCV9fbGRmZApAQCAtODgsMTYgKzg4LDE3IEBACiAJCV9fc2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1BNQywgaW5kZXgsIHZhbCkKICNkZWZpbmUgaWE2NF9zZXRfcG1kKGluZGV4LCB2YWwpCVwKIAkJX19zZXRJbmRSZWcoX0lBNjRfUkVHX0lORFJfUE1ELCBpbmRleCwgdmFsKQotI2RlZmluZSBpYTY0X3NldF9ycihpbmRleCwgdmFsKQlcCisjZGVmaW5lIGlhNjRfbmF0aXZlX3NldF9ycihpbmRleCwgdmFsKQlcCiAJCV9fc2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1JSLCBpbmRleCwgdmFsKQogCi0jZGVmaW5lIGlhNjRfZ2V0X2NwdWlkKGluZGV4KSAJX19nZXRJbmRSZWcoX0lBNjRfUkVHX0lORFJfQ1BVSUQsIGluZGV4KQotI2RlZmluZSBfX2lhNjRfZ2V0X2RicihpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX0RCUiwgaW5kZXgpCi0jZGVmaW5lIGlhNjRfZ2V0X2licihpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX0lCUiwgaW5kZXgpCi0jZGVmaW5lIGlhNjRfZ2V0X3BrcihpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1BLUiwgaW5kZXgpCi0jZGVmaW5lIGlhNjRfZ2V0X3BtYyhpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1BNQywgaW5kZXgpCi0jZGVmaW5lIGlhNjRfZ2V0X3BtZChpbmRleCkgIAlfX2dldEluZFJlZyhfSUE2NF9SRUdfSU5EUl9QTUQsIGluZGV4KQotI2RlZmluZSBpYTY0X2dldF9ycihpbmRleCkgCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1JSLCBpbmRleCkKKyNkZWZpbmUgaWE2NF9uYXRpdmVfZ2V0X2NwdWlkKGluZGV4KQlcCisJCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX0NQVUlELCBpbmRleCkKKyNkZWZpbmUgX19pYTY0X2dldF9kYnIoaW5kZXgpCQlfX2dldEluZFJlZyhfSUE2NF9SRUdfSU5EUl9EQlIsIGluZGV4KQorI2RlZmluZSBpYTY0X2dldF9pYnIoaW5kZXgpCQlfX2dldEluZFJlZyhfSUE2NF9SRUdfSU5EUl9JQlIsIGluZGV4KQorI2RlZmluZSBpYTY0X2dldF9wa3IoaW5kZXgpCQlfX2dldEluZFJlZyhfSUE2NF9SRUdfSU5EUl9QS1IsIGluZGV4KQorI2RlZmluZSBpYTY0X2dldF9wbWMoaW5kZXgpCQlfX2dldEluZFJlZyhfSUE2NF9SRUdfSU5EUl9QTUMsIGluZGV4KQorI2RlZmluZSBpYTY0X25hdGl2ZV9nZXRfcG1kKGluZGV4KQlfX2dldEluZFJlZyhfSUE2NF9SRUdfSU5EUl9QTUQsIGluZGV4KQorI2RlZmluZSBpYTY0X25hdGl2ZV9nZXRfcnIoaW5kZXgpCV9fZ2V0SW5kUmVnKF9JQTY0X1JFR19JTkRSX1JSLCBpbmRleCkKIAogI2RlZmluZSBpYTY0X3NybHpfZAkJX19kc3JsegogI2RlZmluZSBpYTY0X3NybHpfaQkJX19pc3JsegpAQCAtMTE5LDE2ICsxMjAsMTYgQEAKICNkZWZpbmUgaWE2NF9sZDhfYWNxCQlfX2xkOF9hY3EKIAogI2RlZmluZSBpYTY0X3N5bmNfaQkJX19zeW5jaQotI2RlZmluZSBpYTY0X3RoYXNoCQlfX3RoYXNoCi0jZGVmaW5lIGlhNjRfdHRhZwkJX190dGFnCisjZGVmaW5lIGlhNjRfbmF0aXZlX3RoYXNoCV9fdGhhc2gKKyNkZWZpbmUgaWE2NF9uYXRpdmVfdHRhZwlfX3R0YWcKICNkZWZpbmUgaWE2NF9pdGNkCQlfX2l0Y2QKICNkZWZpbmUgaWE2NF9pdGNpCQlfX2l0Y2kKICNkZWZpbmUgaWE2NF9pdHJkCQlfX2l0cmQKICNkZWZpbmUgaWE2NF9pdHJpCQlfX2l0cmkKICNkZWZpbmUgaWE2NF9wdGNlCQlfX3B0Y2UKICNkZWZpbmUgaWE2NF9wdGNsCQlfX3B0Y2wKLSNkZWZpbmUgaWE2NF9wdGNnCQlfX3B0Y2cKLSNkZWZpbmUgaWE2NF9wdGNnYQkJX19wdGNnYQorI2RlZmluZSBpYTY0X25hdGl2ZV9wdGNnCV9fcHRjZworI2RlZmluZSBpYTY0X25hdGl2ZV9wdGNnYQlfX3B0Y2dhCiAjZGVmaW5lIGlhNjRfcHRyaQkJX19wdHJpCiAjZGVmaW5lIGlhNjRfcHRyZAkJX19wdHJkCiAjZGVmaW5lIGlhNjRfZGVwX21pCQlfbTY0X2RlcF9taQpAQCAtMTQ1LDEzICsxNDYsMTMgQEAKICNkZWZpbmUgaWE2NF9sZmV0Y2hfZmF1bHQJX19sZmV0Y2hfZmF1bHQKICNkZWZpbmUgaWE2NF9sZmV0Y2hfZmF1bHRfZXhjbAlfX2xmZXRjaF9mYXVsdF9leGNsCiAKLSNkZWZpbmUgaWE2NF9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmUoeCkJCVwKKyNkZWZpbmUgaWE2NF9uYXRpdmVfaW50cmluX2xvY2FsX2lycV9yZXN0b3JlKHgpCQlcCiBkbyB7CQkJCQkJCVwKIAlpZiAoKHgpICE9IDApIHsJCQkJCVwKLQkJaWE2NF9zc20oSUE2NF9QU1JfSSk7CQkJXAorCQlpYTY0X25hdGl2ZV9zc20oSUE2NF9QU1JfSSk7CQlcCiAJCWlhNjRfc3Jsel9kKCk7CQkJCVwKIAl9IGVsc2UgewkJCQkJXAotCQlpYTY0X3JzbShJQTY0X1BTUl9JKTsJCQlcCisJCWlhNjRfbmF0aXZlX3JzbShJQTY0X1BTUl9JKTsJCVwKIAl9CQkJCQkJXAogfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9pbnRyaW5zaWNzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2ludHJpbnNpY3MuaAppbmRleCBmMTEzNWI1Li40N2Q2ODZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2ludHJpbnNpY3MuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2ludHJpbnNpY3MuaApAQCAtMTgsNiArMTgsMTcgQEAKICMgaW5jbHVkZSA8YXNtL2djY19pbnRyaW4uaD4KICNlbmRpZgogCisjZGVmaW5lIGlhNjRfbmF0aXZlX2dldF9wc3JfaSgpCShpYTY0X25hdGl2ZV9nZXRyZWcoX0lBNjRfUkVHX1BTUikgJiBJQTY0X1BTUl9JKQorCisjZGVmaW5lIGlhNjRfbmF0aXZlX3NldF9ycjBfdG9fcnI0KHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpCVwKK2RvIHsJCQkJCQkJCQlcCisJaWE2NF9uYXRpdmVfc2V0X3JyKDB4MDAwMDAwMDAwMDAwMDAwMFVMLCAodmFsMCkpOwkJXAorCWlhNjRfbmF0aXZlX3NldF9ycigweDIwMDAwMDAwMDAwMDAwMDBVTCwgKHZhbDEpKTsJCVwKKwlpYTY0X25hdGl2ZV9zZXRfcnIoMHg0MDAwMDAwMDAwMDAwMDAwVUwsICh2YWwyKSk7CQlcCisJaWE2NF9uYXRpdmVfc2V0X3JyKDB4NjAwMDAwMDAwMDAwMDAwMFVMLCAodmFsMykpOwkJXAorCWlhNjRfbmF0aXZlX3NldF9ycigweDgwMDAwMDAwMDAwMDAwMDBVTCwgKHZhbDQpKTsJCVwKK30gd2hpbGUgKDApCisKIC8qCiAgKiBGb3JjZSBhbiB1bnJlc29sdmVkIHJlZmVyZW5jZSBpZiBzb21lb25lIHRyaWVzIHRvIHVzZQogICogaWE2NF9mZXRjaF9hbmRfYWRkKCkgd2l0aCBhIGJhZCB2YWx1ZS4KQEAgLTE4Myw0ICsxOTQsNDggQEAKICNlbmRpZiAvKiAhQ09ORklHX0lBNjRfREVCVUdfQ01QWENIRyAqLwogCiAjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnRfcHJpdm9wLmg+CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQorI2RlZmluZSBJQTY0X0lOVFJJTlNJQ19BUEkobmFtZSkJcHZfY3B1X29wcy5uYW1lCisjZGVmaW5lIElBNjRfSU5UUklOU0lDX01BQ1JPKG5hbWUpCXBhcmF2aXJ0XyAjIyBuYW1lCisjZWxzZQorI2RlZmluZSBJQTY0X0lOVFJJTlNJQ19BUEkobmFtZSkJaWE2NF9uYXRpdmVfICMjIG5hbWUKKyNkZWZpbmUgSUE2NF9JTlRSSU5TSUNfTUFDUk8obmFtZSkJaWE2NF9uYXRpdmVfICMjIG5hbWUKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW5zdHJ1Y3Rpb25zIHBhcmF2aXJ0dWFsaXplZCBmb3IgY29ycmVjdG5lc3MgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBmYywgdGhhc2gsIGdldF9jcHVpZCwgZ2V0X3BtZCwgZ2V0X2VmbGFncywgc2V0X2VmbGFncyAqLworLyogTm90ZSB0aGF0ICJ0dGFnIiBhbmQgImNvdmVyIiBhcmUgYWxzbyBwcml2aWxlZ2Utc2Vuc2l0aXZlOyAidHRhZyIKKyAqIGlzIG5vdCBjdXJyZW50bHkgdXNlZCAodGhvdWdoIGl0IG1heSBiZSBpbiBhIGxvbmctZm9ybWF0IFZIUFQgc3lzdGVtISkKKyAqLworI2RlZmluZSBpYTY0X2ZjCQkJCUlBNjRfSU5UUklOU0lDX0FQSShmYykKKyNkZWZpbmUgaWE2NF90aGFzaAkJCUlBNjRfSU5UUklOU0lDX0FQSSh0aGFzaCkKKyNkZWZpbmUgaWE2NF9nZXRfY3B1aWQJCQlJQTY0X0lOVFJJTlNJQ19BUEkoZ2V0X2NwdWlkKQorI2RlZmluZSBpYTY0X2dldF9wbWQJCQlJQTY0X0lOVFJJTlNJQ19BUEkoZ2V0X3BtZCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW5zdHJ1Y3Rpb25zIHBhcmF2aXJ0dWFsaXplZCBmb3IgcGVyZm9ybWFuY2UgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIGlhNjRfc3NtCQkJSUE2NF9JTlRSSU5TSUNfTUFDUk8oc3NtKQorI2RlZmluZSBpYTY0X3JzbQkJCUlBNjRfSU5UUklOU0lDX01BQ1JPKHJzbSkKKyNkZWZpbmUgaWE2NF9nZXRyZWcJCQlJQTY0X0lOVFJJTlNJQ19BUEkoZ2V0cmVnKQorI2RlZmluZSBpYTY0X3NldHJlZwkJCUlBNjRfSU5UUklOU0lDX0FQSShzZXRyZWcpCisjZGVmaW5lIGlhNjRfc2V0X3JyCQkJSUE2NF9JTlRSSU5TSUNfQVBJKHNldF9ycikKKyNkZWZpbmUgaWE2NF9nZXRfcnIJCQlJQTY0X0lOVFJJTlNJQ19BUEkoZ2V0X3JyKQorI2RlZmluZSBpYTY0X3B0Y2dhCQkJSUE2NF9JTlRSSU5TSUNfQVBJKHB0Y2dhKQorI2RlZmluZSBpYTY0X2dldF9wc3JfaQkJCUlBNjRfSU5UUklOU0lDX0FQSShnZXRfcHNyX2kpCisjZGVmaW5lIGlhNjRfaW50cmluX2xvY2FsX2lycV9yZXN0b3JlCVwKKwlJQTY0X0lOVFJJTlNJQ19BUEkoaW50cmluX2xvY2FsX2lycV9yZXN0b3JlKQorI2RlZmluZSBpYTY0X3NldF9ycjBfdG9fcnI0CQlJQTY0X0lOVFJJTlNJQ19BUEkoc2V0X3JyMF90b19ycjQpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKICNlbmRpZiAvKiBfQVNNX0lBNjRfSU5UUklOU0lDU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lvc2FwaWMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaW9zYXBpYy5oCmluZGV4IGEzYTQyODguLmI5YzEwMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaW9zYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaW9zYXBpYy5oCkBAIC01NSwxMyArNTUsMjcgQEAKIAogI2RlZmluZSBOUl9JT1NBUElDUwkJCTI1NgogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2lvc2FwaWNfcmVhZChjaGFyIF9faW9tZW0gKmlvc2FwaWMsIHVuc2lnbmVkIGludCByZWcpCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUX0dVRVNUCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZQorI2RlZmluZSBpb3NhcGljX3BjYXRfY29tcGF0X2luaXQJaWE2NF9uYXRpdmVfaW9zYXBpY19wY2F0X2NvbXBhdF9pbml0CisjZGVmaW5lIF9faW9zYXBpY19yZWFkCQkJX19pYTY0X25hdGl2ZV9pb3NhcGljX3JlYWQKKyNkZWZpbmUgX19pb3NhcGljX3dyaXRlCQkJX19pYTY0X25hdGl2ZV9pb3NhcGljX3dyaXRlCisjZGVmaW5lIGlvc2FwaWNfZ2V0X2lycV9jaGlwCQlpYTY0X25hdGl2ZV9pb3NhcGljX2dldF9pcnFfY2hpcAorI2VuZGlmCisKK2V4dGVybiB2b2lkIF9faW5pdCBpYTY0X25hdGl2ZV9pb3NhcGljX3BjYXRfY29tcGF0X2luaXQodm9pZCk7CitleHRlcm4gc3RydWN0IGlycV9jaGlwICppYTY0X25hdGl2ZV9pb3NhcGljX2dldF9pcnFfY2hpcCh1bnNpZ25lZCBsb25nIHRyaWdnZXIpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorX19pYTY0X25hdGl2ZV9pb3NhcGljX3JlYWQoY2hhciBfX2lvbWVtICppb3NhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXdyaXRlbChyZWcsIGlvc2FwaWMgKyBJT1NBUElDX1JFR19TRUxFQ1QpOwogCXJldHVybiByZWFkbChpb3NhcGljICsgSU9TQVBJQ19XSU5ET1cpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb3NhcGljX3dyaXRlKGNoYXIgX19pb21lbSAqaW9zYXBpYywgdW5zaWduZWQgaW50IHJlZywgdTMyIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19pYTY0X25hdGl2ZV9pb3NhcGljX3dyaXRlKGNoYXIgX19pb21lbSAqaW9zYXBpYywgdW5zaWduZWQgaW50IHJlZywgdTMyIHZhbCkKIHsKIAl3cml0ZWwocmVnLCBpb3NhcGljICsgSU9TQVBJQ19SRUdfU0VMRUNUKTsKIAl3cml0ZWwodmFsLCBpb3NhcGljICsgSU9TQVBJQ19XSU5ET1cpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9pcnEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaXJxLmgKaW5kZXggYTY2ZDI2OC4uMzYyNzExNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2lycS5oCkBAIC0xMywxNCArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0KLSNkZWZpbmUgTlJfVkVDVE9SUwkyNTYKLQotI2lmIChOUl9WRUNUT1JTICsgMzIgKiBOUl9DUFVTKSA8IDEwMjQKLSNkZWZpbmUgTlJfSVJRUyAoTlJfVkVDVE9SUyArIDMyICogTlJfQ1BVUykKLSNlbHNlCi0jZGVmaW5lIE5SX0lSUVMgMTAyNAotI2VuZGlmCisjaW5jbHVkZSA8YXNtLWlhNjQvbnItaXJxcy5oPgogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQKIGlycV9jYW5vbmljYWxpemUgKGludCBpcnEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2t2bV9ob3N0LmggYi9pbmNsdWRlL2FzbS1pYTY0L2t2bV9ob3N0LmgKaW5kZXggYzA4MmMyMC4uMWVmZTUxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9rdm1faG9zdC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQva3ZtX2hvc3QuaApAQCAtMzgsNiArMzgsNyBAQAogLyogbWVtb3J5IHNsb3RzIHRoYXQgZG9lcyBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKi8KICNkZWZpbmUgS1ZNX1BSSVZBVEVfTUVNX1NMT1RTIDQKIAorI2RlZmluZSBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQgMQogCiAvKiBkZWZpbmUgZXhpdCByZWFzb25zIGZyb20gdm1tIHRvIGt2bSovCiAjZGVmaW5lIEVYSVRfUkVBU09OX1ZNX1BBTklDCQkwCkBAIC01MjEsNCArNTIyLDYgQEAKIGludCBrdm1fcGFsX2VtdWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bik7CiB2b2lkIGt2bV9zYWxfZW11bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbW11X2NvbnRleHQuaAppbmRleCBjZWYyNDAwLi4wNDBiYzg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5oCkBAIC0xNTIsMTEgKzE1Miw3IEBACiAjICBlbmRpZgogI2VuZGlmCiAKLQlpYTY0X3NldF9ycigweDAwMDAwMDAwMDAwMDAwMDBVTCwgcnIwKTsKLQlpYTY0X3NldF9ycigweDIwMDAwMDAwMDAwMDAwMDBVTCwgcnIxKTsKLQlpYTY0X3NldF9ycigweDQwMDAwMDAwMDAwMDAwMDBVTCwgcnIyKTsKLQlpYTY0X3NldF9ycigweDYwMDAwMDAwMDAwMDAwMDBVTCwgcnIzKTsKLQlpYTY0X3NldF9ycigweDgwMDAwMDAwMDAwMDAwMDBVTCwgcnI0KTsKKwlpYTY0X3NldF9ycjBfdG9fcnI0KHJyMCwgcnIxLCBycjIsIHJyMywgcnI0KTsKIAlpYTY0X3NybHpfaSgpOwkJCS8qIHNybHouaSBpbXBsaWVzIHNybHouZCAqLwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L25hdGl2ZS9pbnN0LmggYi9pbmNsdWRlL2FzbS1pYTY0L25hdGl2ZS9pbnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1M2EyYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbmF0aXZlL2luc3QuaApAQCAtMCwwICsxLDE3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW5jbHVkZS9hc20taWE2NC9uYXRpdmUvaW5zdC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2RlZmluZSBET19TQVZFX01JTgkJSUE2NF9OQVRJVkVfRE9fU0FWRV9NSU4KKworI2RlZmluZSBfX3BhcmF2aXJ0X3N3aXRjaF90bwkJCWlhNjRfbmF0aXZlX3N3aXRjaF90bworI2RlZmluZSBfX3BhcmF2aXJ0X2xlYXZlX3N5c2NhbGwJCWlhNjRfbmF0aXZlX2xlYXZlX3N5c2NhbGwKKyNkZWZpbmUgX19wYXJhdmlydF93b3JrX3Byb2Nlc3NlZF9zeXNjYWxsCWlhNjRfbmF0aXZlX3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGwKKyNkZWZpbmUgX19wYXJhdmlydF9sZWF2ZV9rZXJuZWwJCQlpYTY0X25hdGl2ZV9sZWF2ZV9rZXJuZWwKKyNkZWZpbmUgX19wYXJhdmlydF9wZW5kaW5nX3N5c2NhbGxfZW5kCQlpYTY0X3dvcmtfcGVuZGluZ19zeXNjYWxsX2VuZAorI2RlZmluZSBfX3BhcmF2aXJ0X3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGxfdGFyZ2V0IFwKKwkJCQkJCWlhNjRfd29ya19wcm9jZXNzZWRfc3lzY2FsbAorCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUX0dVRVNUX0FTTV9DTE9CQkVSX0NIRUNLCisjIGRlZmluZSBQQVJBVklSVF9QT0lTT04JMHhkZWFkYmVlZmJhYWRmMDBkCisjIGRlZmluZSBDTE9CQkVSKGNsb2IpCQkJCVwKKwk7OwkJCQkJXAorCW1vdmwgY2xvYiA9IFBBUkFWSVJUX1BPSVNPTjsJCVwKKwk7OworI2Vsc2UKKyMgZGVmaW5lIENMT0JCRVIoY2xvYikJCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjZGVmaW5lIE1PVl9GUk9NX0lGQShyZWcpCVwKKwltb3YgcmVnID0gY3IuaWZhCisKKyNkZWZpbmUgTU9WX0ZST01fSVRJUihyZWcpCVwKKwltb3YgcmVnID0gY3IuaXRpcgorCisjZGVmaW5lIE1PVl9GUk9NX0lTUihyZWcpCVwKKwltb3YgcmVnID0gY3IuaXNyCisKKyNkZWZpbmUgTU9WX0ZST01fSUhBKHJlZykJXAorCW1vdiByZWcgPSBjci5paGEKKworI2RlZmluZSBNT1ZfRlJPTV9JUFNSKHByZWQsIHJlZykJXAorKHByZWQpCW1vdiByZWcgPSBjci5pcHNyCisKKyNkZWZpbmUgTU9WX0ZST01fSUlNKHJlZykJXAorCW1vdiByZWcgPSBjci5paW0KKworI2RlZmluZSBNT1ZfRlJPTV9JSVAocmVnKQlcCisJbW92IHJlZyA9IGNyLmlpcAorCisjZGVmaW5lIE1PVl9GUk9NX0lWUihyZWcsIGNsb2IpCVwKKwltb3YgcmVnID0gY3IuaXZyCVwKKwlDTE9CQkVSKGNsb2IpCisKKyNkZWZpbmUgTU9WX0ZST01fUFNSKHByZWQsIHJlZywgY2xvYikJXAorKHByZWQpCW1vdiByZWcgPSBwc3IJCQlcCisJQ0xPQkJFUihjbG9iKQorCisjZGVmaW5lIE1PVl9UT19JRkEocmVnLCBjbG9iKQlcCisJbW92IGNyLmlmYSA9IHJlZwlcCisJQ0xPQkJFUihjbG9iKQorCisjZGVmaW5lIE1PVl9UT19JVElSKHByZWQsIHJlZywgY2xvYikJXAorKHByZWQpCW1vdiBjci5pdGlyID0gcmVnCQlcCisJQ0xPQkJFUihjbG9iKQorCisjZGVmaW5lIE1PVl9UT19JSEEocHJlZCwgcmVnLCBjbG9iKQlcCisocHJlZCkJbW92IGNyLmloYSA9IHJlZwkJXAorCUNMT0JCRVIoY2xvYikKKworI2RlZmluZSBNT1ZfVE9fSVBTUihwcmVkLCByZWcsIGNsb2IpCQlcCisocHJlZCkJbW92IGNyLmlwc3IgPSByZWcJCQlcCisJQ0xPQkJFUihjbG9iKQorCisjZGVmaW5lIE1PVl9UT19JRlMocHJlZCwgcmVnLCBjbG9iKQlcCisocHJlZCkJbW92IGNyLmlmcyA9IHJlZwkJXAorCUNMT0JCRVIoY2xvYikKKworI2RlZmluZSBNT1ZfVE9fSUlQKHJlZywgY2xvYikJXAorCW1vdiBjci5paXAgPSByZWcJXAorCUNMT0JCRVIoY2xvYikKKworI2RlZmluZSBNT1ZfVE9fS1Ioa3IsIHJlZywgY2xvYjAsIGNsb2IxKQlcCisJbW92IElBNjRfS1Ioa3IpID0gcmVnCQkJXAorCUNMT0JCRVIoY2xvYjApCQkJCVwKKwlDTE9CQkVSKGNsb2IxKQorCisjZGVmaW5lIElUQ19JKHByZWQsIHJlZywgY2xvYikJXAorKHByZWQpCWl0Yy5pIHJlZwkJXAorCUNMT0JCRVIoY2xvYikKKworI2RlZmluZSBJVENfRChwcmVkLCByZWcsIGNsb2IpCVwKKyhwcmVkKQlpdGMuZCByZWcJCVwKKwlDTE9CQkVSKGNsb2IpCisKKyNkZWZpbmUgSVRDX0lfQU5EX0QocHJlZF9pLCBwcmVkX2QsIHJlZywgY2xvYikJXAorKHByZWRfaSkgaXRjLmkgcmVnOwkJCQlcCisocHJlZF9kKSBpdGMuZCByZWcJCQkJXAorCUNMT0JCRVIoY2xvYikKKworI2RlZmluZSBUSEFTSChwcmVkLCByZWcwLCByZWcxLCBjbG9iKQkJXAorKHByZWQpCXRoYXNoIHJlZzAgPSByZWcxCQkJXAorCUNMT0JCRVIoY2xvYikKKworI2RlZmluZSBTU01fUFNSX0lDX0FORF9ERUZBVUxUX0JJVFNfQU5EX1NSTFpfSShjbG9iMCwgY2xvYjEpCQlcCisJc3NtIHBzci5pYyB8IFBTUl9ERUZBVUxUX0JJVFMJCQkJCVwKKwlDTE9CQkVSKGNsb2IwKQkJCQkJCQlcCisJQ0xPQkJFUihjbG9iMSkJCQkJCQkJXAorCTs7CQkJCQkJCQlcCisJc3Jsei5pIC8qIGd1YXJhbnRlZSB0aGF0IGludGVycnVwdGlvbiBjb2xsZWN0aW4gaXMgb24gKi8JXAorCTs7CisKKyNkZWZpbmUgU1NNX1BTUl9JQ19BTkRfU1JMWl9EKGNsb2IwLCBjbG9iMSkJXAorCXNzbSBwc3IuaWMJCQkJXAorCUNMT0JCRVIoY2xvYjApCQkJCVwKKwlDTE9CQkVSKGNsb2IxKQkJCQlcCisJOzsJCQkJCVwKKwlzcmx6LmQKKworI2RlZmluZSBSU01fUFNSX0lDKGNsb2IpCVwKKwlyc20gcHNyLmljCQlcCisJQ0xPQkJFUihjbG9iKQorCisjZGVmaW5lIFNTTV9QU1JfSShwcmVkLCBwcmVkX2Nsb2IsIGNsb2IpCVwKKyhwcmVkKQlzc20gcHNyLmkJCQkJXAorCUNMT0JCRVIoY2xvYikKKworI2RlZmluZSBSU01fUFNSX0kocHJlZCwgY2xvYjAsIGNsb2IxKQlcCisocHJlZCkJcnNtIHBzci5pCQkJXAorCUNMT0JCRVIoY2xvYjApCQkJXAorCUNMT0JCRVIoY2xvYjEpCisKKyNkZWZpbmUgUlNNX1BTUl9JX0lDKGNsb2IwLCBjbG9iMSwgY2xvYjIpCVwKKwlyc20gcHNyLmkgfCBwc3IuaWMJCQlcCisJQ0xPQkJFUihjbG9iMCkJCQkJXAorCUNMT0JCRVIoY2xvYjEpCQkJCVwKKwlDTE9CQkVSKGNsb2IyKQorCisjZGVmaW5lIFJTTV9QU1JfRFQJCVwKKwlyc20gcHNyLmR0CisKKyNkZWZpbmUgU1NNX1BTUl9EVF9BTkRfU1JMWl9JCVwKKwlzc20gcHNyLmR0CQlcCisJOzsJCQlcCisJc3Jsei5pCisKKyNkZWZpbmUgQlNXXzAoY2xvYjAsIGNsb2IxLCBjbG9iMikJXAorCWJzdy4wCQkJCVwKKwlDTE9CQkVSKGNsb2IwKQkJCVwKKwlDTE9CQkVSKGNsb2IxKQkJCVwKKwlDTE9CQkVSKGNsb2IyKQorCisjZGVmaW5lIEJTV18xKGNsb2IwLCBjbG9iMSkJXAorCWJzdy4xCQkJXAorCUNMT0JCRVIoY2xvYjApCQlcCisJQ0xPQkJFUihjbG9iMSkKKworI2RlZmluZSBDT1ZFUglcCisJY292ZXIKKworI2RlZmluZSBSRkkJXAorCXJmaQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9uYXRpdmUvaXJxLmggYi9pbmNsdWRlL2FzbS1pYTY0L25hdGl2ZS9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmU5ZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9uYXRpdmUvaXJxLmgKQEAgLTAsMCArMSwzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW5jbHVkZS9hc20taWE2NC9uYXRpdmUvaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIG1vdmVkIGZyb20gbGludXgvaW5jbHVkZS9hc20taWE2NC9pcnEuaC4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9OQVRJVkVfSVJRX0gKKyNkZWZpbmUgX0FTTV9JQTY0X05BVElWRV9JUlFfSAorCisjZGVmaW5lIE5SX1ZFQ1RPUlMJMjU2CisKKyNpZiAoTlJfVkVDVE9SUyArIDMyICogTlJfQ1BVUykgPCAxMDI0CisjZGVmaW5lIElBNjRfTkFUSVZFX05SX0lSUVMgKE5SX1ZFQ1RPUlMgKyAzMiAqIE5SX0NQVVMpCisjZWxzZQorI2RlZmluZSBJQTY0X05BVElWRV9OUl9JUlFTIDEwMjQKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9JQTY0X05BVElWRV9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wYXJhdmlydC5oIGIvaW5jbHVkZS9hc20taWE2NC9wYXJhdmlydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNGRmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhcmF2aXJ0LmgKQEAgLTAsMCArMSwyNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGluY2x1ZGUvYXNtLWlhNjQvcGFyYXZpcnQuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKworI2lmbmRlZiBfX0FTTV9QQVJBVklSVF9ICisjZGVmaW5lIF9fQVNNX1BBUkFWSVJUX0gKKworI2lmZGVmIENPTkZJR19QQVJBVklSVF9HVUVTVAorCisjZGVmaW5lIFBBUkFWSVJUX0hZUEVSVklTT1JfVFlQRV9ERUZBVUxUCTAKKyNkZWZpbmUgUEFSQVZJUlRfSFlQRVJWSVNPUl9UWVBFX1hFTgkJMQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorI2luY2x1ZGUgPGFzbS9tZW1pbml0Lmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdlbmVyYWwgaW5mbworICovCitzdHJ1Y3QgcHZfaW5mbyB7CisJdW5zaWduZWQgaW50IGtlcm5lbF9ycGw7CisJaW50IHBhcmF2aXJ0X2VuYWJsZWQ7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgcHZfaW5mbyBwdl9pbmZvOworCitzdGF0aWMgaW5saW5lIGludCBwYXJhdmlydF9lbmFibGVkKHZvaWQpCit7CisJcmV0dXJuIHB2X2luZm8ucGFyYXZpcnRfZW5hYmxlZDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2tlcm5lbF9ycGwodm9pZCkKK3sKKwlyZXR1cm4gcHZfaW5mby5rZXJuZWxfcnBsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpbml0aWFsaXphdGlvbiBob29rcy4KKyAqLworc3RydWN0IHJzdmRfcmVnaW9uOworCitzdHJ1Y3QgcHZfaW5pdF9vcHMgeworCXZvaWQgKCpiYW5uZXIpKHZvaWQpOworCisJaW50ICgqcmVzZXJ2ZV9tZW1vcnkpKHN0cnVjdCByc3ZkX3JlZ2lvbiAqcmVnaW9uKTsKKworCXZvaWQgKCphcmNoX3NldHVwX2Vhcmx5KSh2b2lkKTsKKwl2b2lkICgqYXJjaF9zZXR1cF9jb25zb2xlKShjaGFyICoqY21kbGluZV9wKTsKKwlpbnQgKCphcmNoX3NldHVwX25vbWNhKSh2b2lkKTsKKworCXZvaWQgKCpwb3N0X3NtcF9wcmVwYXJlX2Jvb3RfY3B1KSh2b2lkKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgcHZfaW5pdF9vcHMgcHZfaW5pdF9vcHM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYXJhdmlydF9iYW5uZXIodm9pZCkKK3sKKwlpZiAocHZfaW5pdF9vcHMuYmFubmVyKQorCQlwdl9pbml0X29wcy5iYW5uZXIoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyYXZpcnRfcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IHJzdmRfcmVnaW9uICpyZWdpb24pCit7CisJaWYgKHB2X2luaXRfb3BzLnJlc2VydmVfbWVtb3J5KQorCQlyZXR1cm4gcHZfaW5pdF9vcHMucmVzZXJ2ZV9tZW1vcnkocmVnaW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FyY2hfc2V0dXBfZWFybHkodm9pZCkKK3sKKwlpZiAocHZfaW5pdF9vcHMuYXJjaF9zZXR1cF9lYXJseSkKKwkJcHZfaW5pdF9vcHMuYXJjaF9zZXR1cF9lYXJseSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9zZXR1cF9jb25zb2xlKGNoYXIgKipjbWRsaW5lX3ApCit7CisJaWYgKHB2X2luaXRfb3BzLmFyY2hfc2V0dXBfY29uc29sZSkKKwkJcHZfaW5pdF9vcHMuYXJjaF9zZXR1cF9jb25zb2xlKGNtZGxpbmVfcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X2FyY2hfc2V0dXBfbm9tY2Eodm9pZCkKK3sKKwlpZiAocHZfaW5pdF9vcHMuYXJjaF9zZXR1cF9ub21jYSkKKwkJcmV0dXJuIHB2X2luaXRfb3BzLmFyY2hfc2V0dXBfbm9tY2EoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X3Bvc3Rfc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKK3sKKwlpZiAocHZfaW5pdF9vcHMucG9zdF9zbXBfcHJlcGFyZV9ib290X2NwdSkKKwkJcHZfaW5pdF9vcHMucG9zdF9zbXBfcHJlcGFyZV9ib290X2NwdSgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiByZXBsYWNlbWVudCBvZiBpb3NhcGljIG9wZXJhdGlvbnMuCisgKi8KKworc3RydWN0IHB2X2lvc2FwaWNfb3BzIHsKKwl2b2lkICgqcGNhdF9jb21wYXRfaW5pdCkodm9pZCk7CisKKwlzdHJ1Y3QgaXJxX2NoaXAgKigqZ2V0X2lycV9jaGlwKSh1bnNpZ25lZCBsb25nIHRyaWdnZXIpOworCisJdW5zaWduZWQgaW50ICgqX19yZWFkKShjaGFyIF9faW9tZW0gKmlvc2FwaWMsIHVuc2lnbmVkIGludCByZWcpOworCXZvaWQgKCpfX3dyaXRlKShjaGFyIF9faW9tZW0gKmlvc2FwaWMsIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWwpOworfTsKKworZXh0ZXJuIHN0cnVjdCBwdl9pb3NhcGljX29wcyBwdl9pb3NhcGljX29wczsKKworc3RhdGljIGlubGluZSB2b2lkCitpb3NhcGljX3BjYXRfY29tcGF0X2luaXQodm9pZCkKK3sKKwlpZiAocHZfaW9zYXBpY19vcHMucGNhdF9jb21wYXRfaW5pdCkKKwkJcHZfaW9zYXBpY19vcHMucGNhdF9jb21wYXRfaW5pdCgpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcnFfY2hpcCoKK2lvc2FwaWNfZ2V0X2lycV9jaGlwKHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKK3sKKwlyZXR1cm4gcHZfaW9zYXBpY19vcHMuZ2V0X2lycV9jaGlwKHRyaWdnZXIpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorX19pb3NhcGljX3JlYWQoY2hhciBfX2lvbWVtICppb3NhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBwdl9pb3NhcGljX29wcy5fX3JlYWQoaW9zYXBpYywgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX2lvc2FwaWNfd3JpdGUoY2hhciBfX2lvbWVtICppb3NhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKQoreworCXJldHVybiBwdl9pb3NhcGljX29wcy5fX3dyaXRlKGlvc2FwaWMsIHJlZywgdmFsKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcmVwbGFjZW1lbnQgb2YgaXJxIG9wZXJhdGlvbnMuCisgKi8KKworc3RydWN0IHB2X2lycV9vcHMgeworCXZvaWQgKCpyZWdpc3Rlcl9pcGkpKHZvaWQpOworCisJaW50ICgqYXNzaWduX2lycV92ZWN0b3IpKGludCBpcnEpOworCXZvaWQgKCpmcmVlX2lycV92ZWN0b3IpKGludCB2ZWN0b3IpOworCisJdm9pZCAoKnJlZ2lzdGVyX3BlcmNwdV9pcnEpKGlhNjRfdmVjdG9yIHZlYywKKwkJCQkgICAgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKKworCXZvaWQgKCpyZXNlbmRfaXJxKSh1bnNpZ25lZCBpbnQgdmVjdG9yKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgcHZfaXJxX29wcyBwdl9pcnFfb3BzOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2lhNjRfcmVnaXN0ZXJfaXBpKHZvaWQpCit7CisJcHZfaXJxX29wcy5yZWdpc3Rlcl9pcGkoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2Fzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEpCit7CisJcmV0dXJuIHB2X2lycV9vcHMuYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitmcmVlX2lycV92ZWN0b3IoaW50IHZlY3RvcikKK3sKKwlyZXR1cm4gcHZfaXJxX29wcy5mcmVlX2lycV92ZWN0b3IodmVjdG9yKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityZWdpc3Rlcl9wZXJjcHVfaXJxKGlhNjRfdmVjdG9yIHZlYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQoreworCXB2X2lycV9vcHMucmVnaXN0ZXJfcGVyY3B1X2lycSh2ZWMsIGFjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraWE2NF9yZXNlbmRfaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpCit7CisJcHZfaXJxX29wcy5yZXNlbmRfaXJxKHZlY3Rvcik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJlcGxhY2VtZW50IG9mIHRpbWUgb3BlcmF0aW9ucy4KKyAqLworCitleHRlcm4gc3RydWN0IGl0Y19qaXR0ZXJfZGF0YV90IGl0Y19qaXR0ZXJfZGF0YTsKK2V4dGVybiB2b2xhdGlsZSBpbnQgdGltZV9rZWVwZXJfaWQ7CisKK3N0cnVjdCBwdl90aW1lX29wcyB7CisJdm9pZCAoKmluaXRfbWlzc2luZ190aWNrc19hY2NvdW50aW5nKShpbnQgY3B1KTsKKwlpbnQgKCpkb19zdGVhbF9hY2NvdW50aW5nKSh1bnNpZ25lZCBsb25nICpuZXdfaXRtKTsKKworCXZvaWQgKCpjbG9ja3NvdXJjZV9yZXN1bWUpKHZvaWQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBwdl90aW1lX29wcyBwdl90aW1lX29wczsKKworc3RhdGljIGlubGluZSB2b2lkCitwYXJhdmlydF9pbml0X21pc3NpbmdfdGlja3NfYWNjb3VudGluZyhpbnQgY3B1KQoreworCWlmIChwdl90aW1lX29wcy5pbml0X21pc3NpbmdfdGlja3NfYWNjb3VudGluZykKKwkJcHZfdGltZV9vcHMuaW5pdF9taXNzaW5nX3RpY2tzX2FjY291bnRpbmcoY3B1KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3BhcmF2aXJ0X2RvX3N0ZWFsX2FjY291bnRpbmcodW5zaWduZWQgbG9uZyAqbmV3X2l0bSkKK3sKKwlyZXR1cm4gcHZfdGltZV9vcHMuZG9fc3RlYWxfYWNjb3VudGluZyhuZXdfaXRtKTsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2Vsc2UKKy8qIGZhbGxiYWNrIGZvciBuYXRpdmUgY2FzZSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIHBhcmF2aXJ0X2Jhbm5lcigpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGFyYXZpcnRfcmVzZXJ2ZV9tZW1vcnkocmVnaW9uKQkJCTAKKworI2RlZmluZSBwYXJhdmlydF9hcmNoX3NldHVwX2Vhcmx5KCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBhcmF2aXJ0X2FyY2hfc2V0dXBfY29uc29sZShjbWRsaW5lX3ApCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBhcmF2aXJ0X2FyY2hfc2V0dXBfbm9tY2EoKQkJCTAKKyNkZWZpbmUgcGFyYXZpcnRfcG9zdF9zbXBfcHJlcGFyZV9ib290X2NwdSgpCQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgcGFyYXZpcnRfaW5pdF9taXNzaW5nX3RpY2tzX2FjY291bnRpbmcoY3B1KQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBhcmF2aXJ0X2RvX3N0ZWFsX2FjY291bnRpbmcobmV3X2l0bSkJCTAKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisKKyNlbmRpZiAvKiBDT05GSUdfUEFSQVZJUlRfR1VFU1QgKi8KKworI2VuZGlmIC8qIF9fQVNNX1BBUkFWSVJUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGFyYXZpcnRfcHJpdm9wLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhcmF2aXJ0X3ByaXZvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDgyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhcmF2aXJ0X3ByaXZvcC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpbmNsdWRlL2FzbS1pYTY0L3BhcmF2aXJ0X3ByaXZvcHMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9JQTY0X1BBUkFWSVJUX1BSSVZPUF9ICisjZGVmaW5lIF9BU01fSUE2NF9QQVJBVklSVF9QUklWT1BfSAorCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9rcmVncy5oPiAvKiBmb3IgSUE2NF9QU1JfSSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiByZXBsYWNlbWVudCBvZiBpbnRyaW5zaWNzIG9wZXJhdGlvbnMuCisgKi8KKworc3RydWN0IHB2X2NwdV9vcHMgeworCXZvaWQgKCpmYykodW5zaWduZWQgbG9uZyBhZGRyKTsKKwl1bnNpZ25lZCBsb25nICgqdGhhc2gpKHVuc2lnbmVkIGxvbmcgYWRkcik7CisJdW5zaWduZWQgbG9uZyAoKmdldF9jcHVpZCkoaW50IGluZGV4KTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X3BtZCkoaW50IGluZGV4KTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0cmVnKShpbnQgcmVnKTsKKwl2b2lkICgqc2V0cmVnKShpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCk7CisJdm9pZCAoKnB0Y2dhKSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisJdW5zaWduZWQgbG9uZyAoKmdldF9ycikodW5zaWduZWQgbG9uZyBpbmRleCk7CisJdm9pZCAoKnNldF9ycikodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyB2YWwpOworCXZvaWQgKCpzZXRfcnIwX3RvX3JyNCkodW5zaWduZWQgbG9uZyB2YWwwLCB1bnNpZ25lZCBsb25nIHZhbDEsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWwyLCB1bnNpZ25lZCBsb25nIHZhbDMsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWw0KTsKKwl2b2lkICgqc3NtX2kpKHZvaWQpOworCXZvaWQgKCpyc21faSkodm9pZCk7CisJdW5zaWduZWQgbG9uZyAoKmdldF9wc3JfaSkodm9pZCk7CisJdm9pZCAoKmludHJpbl9sb2NhbF9pcnFfcmVzdG9yZSkodW5zaWduZWQgbG9uZyBmbGFncyk7Cit9OworCitleHRlcm4gc3RydWN0IHB2X2NwdV9vcHMgcHZfY3B1X29wczsKKworZXh0ZXJuIHZvaWQgaWE2NF9uYXRpdmVfc2V0cmVnX2Z1bmMoaW50IHJlZ251bSwgdW5zaWduZWQgbG9uZyB2YWwpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaWE2NF9uYXRpdmVfZ2V0cmVnX2Z1bmMoaW50IHJlZ251bSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnN0cnVjdGlvbnMgcGFyYXZpcnR1YWxpemVkIGZvciBwZXJmb3JtYW5jZSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogbWFzayBmb3IgaWE2NF9uYXRpdmVfc3NtL3JzbSgpIG11c3QgYmUgY29uc3RhbnQuKCJpIiBjb25zdHJhaW5nKS4KKyAqIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZG9lc24ndCBzYXRpc2Z5IGl0LiAqLworI2RlZmluZSBwYXJhdmlydF9zc20obWFzaykJCQlcCisJZG8gewkJCQkJXAorCQlpZiAoKG1hc2spID09IElBNjRfUFNSX0kpCVwKKwkJCXB2X2NwdV9vcHMuc3NtX2koKTsJXAorCQllbHNlCQkJCVwKKwkJCWlhNjRfbmF0aXZlX3NzbShtYXNrKTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgcGFyYXZpcnRfcnNtKG1hc2spCQkJXAorCWRvIHsJCQkJCVwKKwkJaWYgKChtYXNrKSA9PSBJQTY0X1BTUl9JKQlcCisJCQlwdl9jcHVfb3BzLnJzbV9pKCk7CVwKKwkJZWxzZQkJCQlcCisJCQlpYTY0X25hdGl2ZV9yc20obWFzayk7CVwKKwl9IHdoaWxlICgwKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiByZXBsYWNlbWVudCBvZiBoYW5kIHdyaXR0ZW4gYXNzZW1ibHkgY29kZXMuCisgKi8KK3N0cnVjdCBwdl9jcHVfYXNtX3N3aXRjaCB7CisJdW5zaWduZWQgbG9uZyBzd2l0Y2hfdG87CisJdW5zaWduZWQgbG9uZyBsZWF2ZV9zeXNjYWxsOworCXVuc2lnbmVkIGxvbmcgd29ya19wcm9jZXNzZWRfc3lzY2FsbDsKKwl1bnNpZ25lZCBsb25nIGxlYXZlX2tlcm5lbDsKK307Cit2b2lkIHBhcmF2aXJ0X2NwdV9hc21faW5pdChjb25zdCBzdHJ1Y3QgcHZfY3B1X2FzbV9zd2l0Y2ggKmNwdV9hc21fc3dpdGNoKTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIElBNjRfUEFSQVZJUlRfQVNNX0ZVTkMobmFtZSkJcGFyYXZpcnRfICMjIG5hbWUKKworI2Vsc2UKKworLyogZmFsbGJhY2sgZm9yIG5hdGl2ZSBjYXNlICovCisjZGVmaW5lIElBNjRfUEFSQVZJUlRfQVNNX0ZVTkMobmFtZSkJaWE2NF9uYXRpdmVfICMjIG5hbWUKKworI2VuZGlmIC8qIENPTkZJR19QQVJBVklSVCAqLworCisvKiB0aGVzZSByb3V0aW5lcyB1dGlsaXplIHByaXZpbGVnZS1zZW5zaXRpdmUgb3IgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlCisgKiBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyBzbyB0aGUgY29kZSBtdXN0IGJlIHJlcGxhY2VkIHdpdGgKKyAqIHBhcmF2aXJ0dWFsaXplZCB2ZXJzaW9ucyAqLworI2RlZmluZSBpYTY0X3N3aXRjaF90bwkJCUlBNjRfUEFSQVZJUlRfQVNNX0ZVTkMoc3dpdGNoX3RvKQorI2RlZmluZSBpYTY0X2xlYXZlX3N5c2NhbGwJCUlBNjRfUEFSQVZJUlRfQVNNX0ZVTkMobGVhdmVfc3lzY2FsbCkKKyNkZWZpbmUgaWE2NF93b3JrX3Byb2Nlc3NlZF9zeXNjYWxsCVwKKwlJQTY0X1BBUkFWSVJUX0FTTV9GVU5DKHdvcmtfcHJvY2Vzc2VkX3N5c2NhbGwpCisjZGVmaW5lIGlhNjRfbGVhdmVfa2VybmVsCQlJQTY0X1BBUkFWSVJUX0FTTV9GVU5DKGxlYXZlX2tlcm5lbCkKKworI2VuZGlmIC8qIF9BU01fSUE2NF9QQVJBVklSVF9QUklWT1BfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbXAuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKaW5kZXggMjc3MzFlMC4uMTJkOTZlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CkBAIC0xMjAsNiArMTIxLDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBpbml0X3NtcF9jb25maWcgKHZvaWQpOwogZXh0ZXJuIHZvaWQgc21wX2RvX3RpbWVyIChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKK2V4dGVybiBpcnFyZXR1cm5fdCBoYW5kbGVfSVBJKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBleHRlcm4gdm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlIChpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGlkZW50aWZ5X3NpYmxpbmdzIChzdHJ1Y3QgY3B1aW5mb19pYTY0ICopOwogZXh0ZXJuIGludCBpc19tdWx0aXRocmVhZGluZ19lbmFibGVkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKaW5kZXggMjZlMjUwYi4uOTI3YTM4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oCkBAIC0yNiw2ICsyNiw3IEBACiAgKi8KICNkZWZpbmUgS0VSTkVMX1NUQVJUCQkgKEdBVEVfQUREUitfX0lBNjRfVUxfQ09OU1QoMHgxMDAwMDAwMDApKQogI2RlZmluZSBQRVJDUFVfQUREUgkJKC1QRVJDUFVfUEFHRV9TSVpFKQorI2RlZmluZSBMT0FEX09GRlNFVAkJKEtFUk5FTF9TVEFSVCAtIEtFUk5FTF9UUl9QQUdFX1NJWkUpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTEyMiwxMCArMTIzLDE2IEBACiAgKiAgIHdyaXRlIGEgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgcmlnaHQgYmVmb3JlIHJlYWRpbmcgdGhlIFBTUgogICogICBhbmQgdGhhdCB3cml0ZXMgdG8gUFNSLm1mbAogICovCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjZGVmaW5lIF9fbG9jYWxfc2F2ZV9mbGFncygpCWlhNjRfZ2V0X3Bzcl9pKCkKKyNlbHNlCisjZGVmaW5lIF9fbG9jYWxfc2F2ZV9mbGFncygpCWlhNjRfZ2V0cmVnKF9JQTY0X1JFR19QU1IpCisjZW5kaWYKKwogI2RlZmluZSBfX2xvY2FsX2lycV9zYXZlKHgpCQkJXAogZG8gewkJCQkJCVwKIAlpYTY0X3N0b3AoKTsJCQkJXAotCSh4KSA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19QU1IpOwlcCisJKHgpID0gX19sb2NhbF9zYXZlX2ZsYWdzKCk7CQlcCiAJaWE2NF9zdG9wKCk7CQkJCVwKIAlpYTY0X3JzbShJQTY0X1BTUl9JKTsJCQlcCiB9IHdoaWxlICgwKQpAQCAtMTczLDcgKzE4MCw3IEBACiAjZW5kaWYgLyogIUNPTkZJR19JQTY0X0RFQlVHX0lSUSAqLwogCiAjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKQkoeyBpYTY0X3N0b3AoKTsgaWE2NF9zc20oSUE2NF9QU1JfSSk7IGlhNjRfc3Jsel9kKCk7IH0pCi0jZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpCSh7IGlhNjRfc3RvcCgpOyAoZmxhZ3MpID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX1BTUik7IH0pCisjZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpCSh7IGlhNjRfc3RvcCgpOyAoZmxhZ3MpID0gX19sb2NhbF9zYXZlX2ZsYWdzKCk7IH0pCiAKICNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQkJCVwKICh7CQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91di91dl9tbXJzLmggYi9pbmNsdWRlL2FzbS1pYTY0L3V2L3V2X21tcnMuaAppbmRleCAxY2MxZGJiLi5jMTQ5ZWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3V2L3V2X21tcnMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3V2L3V2X21tcnMuaApAQCAtMTEsMTEgKzExLDI4NCBAQAogI2lmbmRlZiBfX0FTTV9JQTY0X1VWX01NUlNfXwogI2RlZmluZSBfX0FTTV9JQTY0X1VWX01NUlNfXwogCi0vKgotICogICAgICAgQVVUTyBHRU5FUkFURUQgLSBEbyBub3QgZWRpdAotICovCisjZGVmaW5lIFVWX01NUl9FTkFCTEUJCSgxVUwgPDwgNjMpCiAKLSAjZGVmaW5lIFVWX01NUl9FTkFCTEUJCSgxVUwgPDwgNjMpCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9CQVVfREFUQV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUcgMHg2MTY4MFVMCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfMzIgMHgwNDM4CisKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0JBVV9EQVRBX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfQkFVX0RBVEFfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9CQVVfREFUQV9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9iYXVfZGF0YV9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfYmF1X2RhdGFfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0VWRU5UX09DQ1VSUkVEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMCAweDcwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF8zMiAweDAwNWU4CisKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9IQ0VSUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwMVVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IwX0hDRVJSX1NIRlQgMQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMF9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwMlVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IxX0hDRVJSX1NIRlQgMgorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMV9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwNFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEhfSENFUlJfU0hGVCAzCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEhfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDhVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JIX0hDRVJSX1NIRlQgNAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JIX0hDRVJSX01BU0sgMHgwMDAwMDAwMDAwMDAwMDEwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9YTl9IQ0VSUl9TSEZUIDUKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9YTl9IQ0VSUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDAyMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU0lfSENFUlJfU0hGVCA2CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU0lfSENFUlJfTUFTSyAweDAwMDAwMDAwMDAwMDAwNDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0FPRVJSMF9TSEZUIDcKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDAwODBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMF9BT0VSUjBfU0hGVCA4CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IwX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMDEwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfR1IxX0FPRVJSMF9TSEZUIDkKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9HUjFfQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAwMjAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MSF9BT0VSUjBfU0hGVCAxMAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xIX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMDQwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUkhfQU9FUlIwX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SSF9BT0VSUjBfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1hOX0FPRVJSMF9TSEZUIDEyCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfWE5fQU9FUlIwX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TSV9BT0VSUjBfU0hGVCAxMworI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NJX0FPRVJSMF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfQU9FUlIxX1NIRlQgMTQKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwMDQwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMF9BT0VSUjFfU0hGVCAxNQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMF9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMV9BT0VSUjFfU0hGVCAxNgorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0dSMV9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xIX0FPRVJSMV9TSEZUIDE3CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEhfQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMDIwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SSF9BT0VSUjFfU0hGVCAxOAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JIX0FPRVJSMV9NQVNLIDB4MDAwMDAwMDAwMDA0MDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfWE5fQU9FUlIxX1NIRlQgMTkKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9YTl9BT0VSUjFfTUFTSyAweDAwMDAwMDAwMDAwODAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1NJX0FPRVJSMV9TSEZUIDIwCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU0lfQU9FUlIxX01BU0sgMHgwMDAwMDAwMDAwMTAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SSF9WUElfSU5UX1NIRlQgMjEKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9SSF9WUElfSU5UX01BU0sgMHgwMDAwMDAwMDAwMjAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TWVNURU1fU0hVVERPV05fSU5UX1NIRlQgMjIKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9TWVNURU1fU0hVVERPV05fSU5UX01BU0sgMHgwMDAwMDAwMDAwNDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzBfU0hGVCAyMworI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMF9NQVNLIDB4MDAwMDAwMDAwMDgwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xX1NIRlQgMjQKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzFfTUFTSyAweDAwMDAwMDAwMDEwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfMl9TSEZUIDI1CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8yX01BU0sgMHgwMDAwMDAwMDAyMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzNfU0hGVCAyNgorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfM19NQVNLIDB4MDAwMDAwMDAwNDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF80X1NIRlQgMjcKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzRfTUFTSyAweDAwMDAwMDAwMDgwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfNV9TSEZUIDI4CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF81X01BU0sgMHgwMDAwMDAwMDEwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzZfU0hGVCAyOQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfNl9NQVNLIDB4MDAwMDAwMDAyMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF83X1NIRlQgMzAKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzdfTUFTSyAweDAwMDAwMDAwNDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfOF9TSEZUIDMxCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF84X01BU0sgMHgwMDAwMDAwMDgwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9MQl9JUlFfSU5UXzlfU0hGVCAzMgorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xCX0lSUV9JTlRfOV9NQVNLIDB4MDAwMDAwMDEwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xMF9TSEZUIDMzCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xMF9NQVNLIDB4MDAwMDAwMDIwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xMV9TSEZUIDM0CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xMV9NQVNLIDB4MDAwMDAwMDQwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xMl9TSEZUIDM1CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xMl9NQVNLIDB4MDAwMDAwMDgwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xM19TSEZUIDM2CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xM19NQVNLIDB4MDAwMDAwMTAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xNF9TSEZUIDM3CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xNF9NQVNLIDB4MDAwMDAwMjAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xNV9TSEZUIDM4CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEJfSVJRX0lOVF8xNV9NQVNLIDB4MDAwMDAwNDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTDFfTk1JX0lOVF9TSEZUIDM5CisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTDFfTk1JX0lOVF9NQVNLIDB4MDAwMDAwODAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU1RPUF9DTE9DS19TSEZUIDQwCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfU1RPUF9DTE9DS19NQVNLIDB4MDAwMDAxMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfQVNJQ19UT19MMV9TSEZUIDQxCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfQVNJQ19UT19MMV9NQVNLIDB4MDAwMDAyMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTDFfVE9fQVNJQ19TSEZUIDQyCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTDFfVE9fQVNJQ19NQVNLIDB4MDAwMDA0MDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTFRDX0lOVF9TSEZUIDQzCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTFRDX0lOVF9NQVNLIDB4MDAwMDA4MDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfTEFfU0VRX1RSSUdHRVJfU0hGVCA0NAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0xBX1NFUV9UUklHR0VSX01BU0sgMHgwMDAwMTAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9JUElfSU5UX1NIRlQgNDUKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9JUElfSU5UX01BU0sgMHgwMDAwMjAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9FWFRJT19JTlQwX1NIRlQgNDYKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9FWFRJT19JTlQwX01BU0sgMHgwMDAwNDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9FWFRJT19JTlQxX1NIRlQgNDcKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9FWFRJT19JTlQxX01BU0sgMHgwMDAwODAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9FWFRJT19JTlQyX1NIRlQgNDgKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9FWFRJT19JTlQyX01BU0sgMHgwMDAxMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9FWFRJT19JTlQzX1NIRlQgNDkKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9FWFRJT19JTlQzX01BU0sgMHgwMDAyMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9QUk9GSUxFX0lOVF9TSEZUIDUwCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUFJPRklMRV9JTlRfTUFTSyAweDAwMDQwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzBfU0hGVCA1MQorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzBfTUFTSyAweDAwMDgwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzFfU0hGVCA1MgorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzFfTUFTSyAweDAwMTAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzJfU0hGVCA1MworI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzJfTUFTSyAweDAwMjAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzNfU0hGVCA1NAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzNfTUFTSyAweDAwNDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0JBVV9EQVRBX1NIRlQgNTUKKyNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9CQVVfREFUQV9NQVNLIDB4MDA4MDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfUE9XRVJfTUFOQUdFTUVOVF9SRVFfU0hGVCA1NgorI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX1BPV0VSX01BTkFHRU1FTlRfUkVRX01BU0sgMHgwMTAwMDAwMDAwMDAwMDAwVUwKK3VuaW9uIHV2aF9ldmVudF9vY2N1cnJlZDBfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfZXZlbnRfb2NjdXJyZWQwX3MgeworCXVuc2lnbmVkIGxvbmcJbGJfaGNlcnIgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWdyMF9oY2VyciAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlncjFfaGNlcnIgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGhfaGNlcnIgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXJoX2hjZXJyICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwl4bl9oY2VyciAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJc2lfaGNlcnIgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2FvZXJyMCAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlncjBfYW9lcnIwICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJZ3IxX2FvZXJyMCAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxoX2FvZXJyMCAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlyaF9hb2VycjAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJeG5fYW9lcnIwICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXNpX2FvZXJyMCAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9hb2VycjEgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJZ3IwX2FvZXJyMSAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWdyMV9hb2VycjEgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsaF9hb2VycjEgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcmhfYW9lcnIxICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXhuX2FvZXJyMSAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlzaV9hb2VycjEgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcmhfdnBpX2ludCAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXN5c3RlbV9zaHV0ZG93bl9pbnQgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMiAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzMgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF80ICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfNSAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzYgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF83ICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfOCAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzkgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xMCAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTEgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzEyICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbGJfaXJxX2ludF8xMyAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWxiX2lycV9pbnRfMTQgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYl9pcnFfaW50XzE1ICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbDFfbm1pX2ludCAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXN0b3BfY2xvY2sgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlhc2ljX3RvX2wxICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJbDFfdG9fYXNpYyAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWx0Y19pbnQgICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlsYV9zZXFfdHJpZ2dlciAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJaXBpX2ludCAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWV4dGlvX2ludDAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlleHRpb19pbnQxICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJZXh0aW9faW50MiAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWV4dGlvX2ludDMgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlwcm9maWxlX2ludCAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcnRjMCAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXJ0YzEgICAgICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlydGMyICAgICAgICAgICAgICAgICA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcnRjMyAgICAgICAgICAgICAgICAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCWJhdV9kYXRhICAgICAgICAgICAgIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlwb3dlcl9tYW5hZ2VtZW50X3JlcSA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF81N182MyAgICAgICAgICAgOiAgNzsgIC8qICAgICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBVVkhfRVZFTlRfT0NDVVJSRUQwX0FMSUFTICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0FMSUFTIDB4MDAwMDAwMDAwMDA3MDAwOFVMCisjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfQUxJQVNfMzIgMHgwMDVmMAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfSU5UX0NNUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9JTlRfQ01QQiAweDIyMDgwVUwKKworI2RlZmluZSBVVkhfSU5UX0NNUEJfUkVBTF9USU1FX0NNUEJfU0hGVCAwCisjZGVmaW5lIFVWSF9JTlRfQ01QQl9SRUFMX1RJTUVfQ01QQl9NQVNLIDB4MDBmZmZmZmZmZmZmZmZmZlVMCisKK3VuaW9uIHV2aF9pbnRfY21wYl91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9pbnRfY21wYl9zIHsKKwl1bnNpZ25lZCBsb25nCXJlYWxfdGltZV9jbXBiIDogNTY7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF81Nl82MyAgICAgOiAgODsgIC8qICAgICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0lOVF9DTVBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfSU5UX0NNUEMgMHgyMjEwMFVMCisKKyNkZWZpbmUgVVZIX0lOVF9DTVBDX1JFQUxfVElNRV9DTVBDX1NIRlQgMAorI2RlZmluZSBVVkhfSU5UX0NNUENfUkVBTF9USU1FX0NNUENfTUFTSyAweDAwZmZmZmZmZmZmZmZmZmZVTAorCit1bmlvbiB1dmhfaW50X2NtcGNfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfaW50X2NtcGNfcyB7CisJdW5zaWduZWQgbG9uZwlyZWFsX3RpbWVfY21wYyA6IDU2OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfNTZfNjMgICAgIDogIDg7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9JTlRfQ01QRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0lOVF9DTVBEIDB4MjIxODBVTAorCisjZGVmaW5lIFVWSF9JTlRfQ01QRF9SRUFMX1RJTUVfQ01QRF9TSEZUIDAKKyNkZWZpbmUgVVZIX0lOVF9DTVBEX1JFQUxfVElNRV9DTVBEX01BU0sgMHgwMGZmZmZmZmZmZmZmZmZmVUwKKwordW5pb24gdXZoX2ludF9jbXBkX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2ludF9jbXBkX3MgeworCXVuc2lnbmVkIGxvbmcJcmVhbF90aW1lX2NtcGQgOiA1NjsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzU2XzYzICAgICA6ICA4OyAgLyogICAgKi8KKyAgICB9IHM7Cit9OwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfTk9ERV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMTEsOCArMzg0LDggQEAKIAogI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9TSEZUIDI4CiAjZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX01BU0sgMHgwMDAwM2ZmZmYwMDAwMDAwVUwKLSNkZWZpbmUgVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SX0dSNF9TSEZUIDQ2Ci0jZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9HUjRfTUFTSyAweDAwMDA0MDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfR1I0X1NIRlQgNDgKKyNkZWZpbmUgVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SX0dSNF9NQVNLIDB4MDAwMTAwMDAwMDAwMDAwMFVMCiAjZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9OX0dSVV9TSEZUIDUyCiAjZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9OX0dSVV9NQVNLIDB4MDBmMDAwMDAwMDAwMDAwMFVMCiAjZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9FTkFCTEVfU0hGVCA2MwpAQCAtMTIzLDggKzM5Niw5IEBACiAgICAgc3RydWN0IHV2aF9yaF9nYW1fZ3J1X292ZXJsYXlfY29uZmlnX21tcl9zIHsKIAl1bnNpZ25lZCBsb25nCXJzdmRfMF8yNzogMjg7ICAvKiAgICAqLwogCXVuc2lnbmVkIGxvbmcJYmFzZSAgIDogMTg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80Nl80NzogIDI7ICAvKiAgICAqLwogCXVuc2lnbmVkIGxvbmcJZ3I0ICAgIDogIDE7ICAvKiBSVyAqLwotCXVuc2lnbmVkIGxvbmcJcnN2ZF80N181MTogIDU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80OV81MTogIDM7ICAvKiAgICAqLwogCXVuc2lnbmVkIGxvbmcJbl9ncnUgIDogIDQ7ICAvKiBSVyAqLwogCXVuc2lnbmVkIGxvbmcJcnN2ZF81Nl82MjogIDc7ICAvKiAgICAqLwogCXVuc2lnbmVkIGxvbmcJZW5hYmxlIDogIDE7ICAvKiBSVyAqLwpAQCAtMTU3LDcgKzQzMSw3IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9SVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIFVWSF9SVEMgMHgyODAwMFVMCisjZGVmaW5lIFVWSF9SVEMgMHgzNDAwMDBVTAogCiAjZGVmaW5lIFVWSF9SVENfUkVBTF9USU1FX0NMT0NLX1NIRlQgMAogI2RlZmluZSBVVkhfUlRDX1JFQUxfVElNRV9DTE9DS19NQVNLIDB4MDBmZmZmZmZmZmZmZmZmZlVMCkBAIC0xNzEsNiArNDQ1LDEzOSBAQAogfTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfUlRDMV9JTlRfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHIDB4NjE1YzBVTAorCisjZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9SVEMxX0lOVF9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX1JUQzFfSU5UX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfUlRDMV9JTlRfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfcnRjMV9pbnRfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX3J0YzFfaW50X2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9SVEMyX0lOVF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUcgMHg2MTYwMFVMCisKKyNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX1JUQzJfSU5UX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfUlRDMl9JTlRfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9SVEMyX0lOVF9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ydGMyX2ludF9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfcnRjMl9pbnRfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1JUQzNfSU5UX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJRyAweDYxNjQwVUwKKworI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfUlRDM19JTlRfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9SVEMzX0lOVF9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX1JUQzNfSU5UX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX3J0YzNfaW50X2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ydGMzX2ludF9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1JUQ19JTkNfUkFUSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfUlRDX0lOQ19SQVRJTyAweDM1MDAwMFVMCisKKyNkZWZpbmUgVVZIX1JUQ19JTkNfUkFUSU9fRlJBQ1RJT05fU0hGVCAwCisjZGVmaW5lIFVWSF9SVENfSU5DX1JBVElPX0ZSQUNUSU9OX01BU0sgMHgwMDAwMDAwMDAwMGZmZmZmVUwKKyNkZWZpbmUgVVZIX1JUQ19JTkNfUkFUSU9fUkFUSU9fU0hGVCAyMAorI2RlZmluZSBVVkhfUlRDX0lOQ19SQVRJT19SQVRJT19NQVNLIDB4MDAwMDAwMDAwMDcwMDAwMFVMCisKK3VuaW9uIHV2aF9ydGNfaW5jX3JhdGlvX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX3J0Y19pbmNfcmF0aW9fcyB7CisJdW5zaWduZWQgbG9uZwlmcmFjdGlvbiA6IDIwOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJhdGlvICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8yM182MzogNDE7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfU0lfQUREUl9NQVBfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICNkZWZpbmUgVVZIX1NJX0FERFJfTUFQX0NPTkZJRyAweGM4MDAwMFVMCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2FtaWdhaHcuaCBiL2luY2x1ZGUvYXNtLW02OGsvYW1pZ2Fody5oCmluZGV4IGExNmZlNGUuLjVjYTVkZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvYW1pZ2Fody5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYW1pZ2Fody5oCkBAIC0yMiw4ICsyMiw2IEBACiAgICAgICogIERpZmZlcmVudCBBbWlnYSBtb2RlbHMKICAgICAgKi8KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYW1pZ2FfbW9kZWw7Ci0KICNkZWZpbmUgQU1JX1VOS05PV04JKDApCiAjZGVmaW5lIEFNSV81MDAJCSgxKQogI2RlZmluZSBBTUlfNTAwUExVUwkoMikKQEAgLTU5LDExICs1Nyw5IEBACiAgICAgICovCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGFtaWdhX2VjbG9jazsJLyogNzAwIGtIeiBFIFBlcmlwaGVyYWwgQ2xvY2sgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGFtaWdhX21hc3RlcmNsb2NrOwkvKiAyOCBNSHogTWFzdGVyIENsb2NrICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBhbWlnYV9jb2xvcmNsb2NrOwkvKiAzLjUgTUh6IENvbG9yIENsb2NrICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBhbWlnYV9jaGlwX3NpemU7CS8qIENoaXAgUkFNIFNpemUgKGJ5dGVzKSAqLwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYW1pZ2FfdmJsYW5rOwkvKiBWQkxBTksgRnJlcXVlbmN5ICovCi1leHRlcm4gdW5zaWduZWQgY2hhciBhbWlnYV9wc2ZyZXE7CS8qIFBvd2VyIFN1cHBseSBGcmVxdWVuY3kgKi8KIAogCiAjZGVmaW5lIEFNSUdBSFdfREVDTEFSRShuYW1lKQl1bnNpZ25lZCBuYW1lIDogMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hbWlnYWludHMuaCBiL2luY2x1ZGUvYXNtLW02OGsvYW1pZ2FpbnRzLmgKaW5kZXggN2M4NzEzNC4uYjFiY2RiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9hbWlnYWludHMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2FtaWdhaW50cy5oCkBAIC05OCw2ICs5OCw4IEBACiAjZGVmaW5lIENJQV9JQ1JfQUxMCTB4MWYKICNkZWZpbmUgQ0lBX0lDUl9TRVRDTFIJMHg4MAogCitleHRlcm4gdm9pZCBhbWlnYV9pbml0X0lSUSh2b2lkKTsKKwogLyogdG8gYWNjZXNzIHRoZSBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlcnMgb2YgQ0lBJ3MgdXNlIG9ubHkKICoqIHRoZXNlIGZ1bmN0aW9ucywgdGhleSBiZWhhdmUgZXhhY3RseSBsaWtlIHRoZSBhbWlnYSBvcyByb3V0aW5lcwogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXBvbGxvZG1hLmggYi9pbmNsdWRlL2FzbS1tNjhrL2Fwb2xsb2RtYS5oCmluZGV4IDY4MjFlM2IuLjk1NGFkYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvYXBvbGxvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hcG9sbG9kbWEuaApAQCAtMSw0ICsxLDQgQEAKLS8qICRJZDogZG1hLmgsdiAxLjcgMTk5Mi8xMi8xNCAwMDoyOTozNCByb290IEV4cCByb290ICQKKy8qCiAgKiBsaW51eC9pbmNsdWRlL2FzbS9kbWEuaDogRGVmaW5lcyBmb3IgdXNpbmcgYW5kIGFsbG9jYXRpbmcgZG1hIGNoYW5uZWxzLgogICogV3JpdHRlbiBieSBIZW5udXMgQmVyZ21hbiwgMTk5Mi4KICAqIEhpZ2ggRE1BIGNoYW5uZWwgc3VwcG9ydCAmIGluZm8gYnkgSGFubnUgU2F2b2xhaW5lbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9kdm1hLmggYi9pbmNsdWRlL2FzbS1tNjhrL2R2bWEuaAppbmRleCBlMTExMmRlLi40ZmZmNDA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2R2bWEuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2R2bWEuaApAQCAtMSw0ICsxLDQgQEAKLS8qICRJZDogZHZtYS5oLHYgMS40IDE5OTkvMDMvMjcgMjA6MjM6NDEgdHNib2dlbmQgRXhwICQKKy8qCiAgKiBpbmNsdWRlL2FzbS1tNjhrL2RtYS5oCiAgKgogICogQ29weXJpZ2h0IDE5OTUgKEMpIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKQEAgLTYzLDggKzYzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHZtYV9wYWdlKHVuc2lnbmVkIGxvbmcga2FkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIpOwotCiAjZWxzZSAvKiBTdW4zeCAqLwogCiAvKiBzdW4zeCBkdm1hIHBhZ2Ugc3VwcG9ydCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9mcHUuaCBiL2luY2x1ZGUvYXNtLW02OGsvZnB1LmgKaW5kZXggNTk3MDFkNy4uZmZiNmI4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9mcHUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2ZwdS5oCkBAIC03LDE1ICs3LDE1IEBACiAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKQotI2RlZmluZSBGUFNUQVRFU0laRSAoMjE2L3NpemVvZih1bnNpZ25lZCBjaGFyKSkKKyNkZWZpbmUgRlBTVEFURVNJWkUgKDIxNikKICNlbGlmIGRlZmluZWQoQ09ORklHX002ODA0MCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDk2L3NpemVvZih1bnNpZ25lZCBjaGFyKSkKKyNkZWZpbmUgRlBTVEFURVNJWkUgKDk2KQogI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4S0ZQVV9FTVUpCi0jZGVmaW5lIEZQU1RBVEVTSVpFICgyOC9zaXplb2YodW5zaWduZWQgY2hhcikpCisjZGVmaW5lIEZQU1RBVEVTSVpFICgyOCkKICNlbGlmIGRlZmluZWQoQ09ORklHX002ODA2MCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDEyL3NpemVvZih1bnNpZ25lZCBjaGFyKSkKKyNkZWZpbmUgRlBTVEFURVNJWkUgKDEyKQogI2Vsc2UKLSNkZWZpbmUgRlBTVEFURVNJWkUgZXJyb3Igbm9fY3B1X3R5cGVfY29uZmlndXJlZAorI2RlZmluZSBGUFNUQVRFU0laRSAoMCkKICNlbmRpZgogCiAjZW5kaWYgLyogX19NNjhLX0ZQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lycS5oIGIvaW5jbHVkZS9hc20tbTY4ay9pcnEuaAppbmRleCBlYjI5YTUyLi4yMjZiZmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaXJxLmgKQEAgLTI0LDcgKzI0LDcgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0hQMzAwKQogI2RlZmluZSBOUl9JUlFTCTgKICNlbHNlCi0jZXJyb3IgdW5rbm93biBuciBvZiBpcnFzCisjZGVmaW5lIE5SX0lSUVMJMAogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY19iYWJvb24uaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX2JhYm9vbi5oCmluZGV4IGU4Nzg1MDguLmMyYTA0MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvbWFjX2JhYm9vbi5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX2JhYm9vbi5oCkBAIC0yOSw2ICsyOSw0IEBACiAJCQkJICovCiB9OwogCi1leHRlcm4gdm9sYXRpbGUgc3RydWN0IGJhYm9vbiAqYmFib29uOwotCiAjZW5kaWYgLyogX19BU1NFTUJMWSAqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjX3ZpYS5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfdmlhLmgKaW5kZXggNTliNzU4Yy4uMzlhZmI0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9tYWNfdmlhLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfdmlhLmgKQEAgLTI1Myw3ICsyNTMsNiBAQAogCiBleHRlcm4gdm9sYXRpbGUgX191OCAqdmlhMSwqdmlhMjsKIGV4dGVybiBpbnQgcmJ2X3ByZXNlbnQsdmlhX2FsdF9tYXBwaW5nOwotZXh0ZXJuIF9fdTggcmJ2X2NsZWFyOwogCiBzdGF0aWMgaW5saW5lIGludCByYnZfc2V0X3ZpZGVvX2JwcChpbnQgYnBwKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYWNoaW5lcy5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNoaW5lcy5oCmluZGV4IGRhNjAxNWE5Li5iZTY2N2U4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL21hY2hpbmVzLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNoaW5lcy5oCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBtYWNoaW5lcy5oLHYgMS40IDE5OTUvMTEvMjUgMDI6MzE6NTggZGF2ZW0gRXhwICQKKy8qCiAgKiBtYWNoaW5lcy5oOiAgRGVmaW5lcyBmb3IgdGFraW5nIGFwYXJ0IHRoZSBtYWNoaW5lIHR5cGUgdmFsdWUgaW4gdGhlCiAgKiAgICAgICAgICAgICAgaWRwcm9tIGFuZCBkZXRlcm1pbmluZyB0aGUga2luZCBvZiBtYWNoaW5lIHdlIGFyZSBvbi4KICAqCkBAIC0yMSw4ICsyMSw2IEBACiAvLyNkZWZpbmUgTlVNX1NVTl9NQUNISU5FUyAgIDIzCiAjZGVmaW5lIE5VTV9TVU5fTUFDSElORVMgIDgKIAotZXh0ZXJuIHN0cnVjdCBTdW5fTWFjaGluZV9Nb2RlbHMgU3VuX01hY2hpbmVzW05VTV9TVU5fTUFDSElORVNdOwotCiAvKiBUaGUgbWFjaGluZSB0eXBlIGluIHRoZSBpZHByb20gYXJlYSBsb29rcyBsaWtlIHRoaXM6CiAgKgogICogLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY2ludG9zaC5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNpbnRvc2guaAppbmRleCAyOGIwZjQ5Li4wNTMwOWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL21hY2ludG9zaC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaW50b3NoLmgKQEAgLTEyLDggKzEyLDYgQEAKIGV4dGVybiB2b2lkIG1hY19wb3dlcm9mZih2b2lkKTsKIGV4dGVybiB2b2lkIG1hY19pbml0X0lSUSh2b2lkKTsKIGV4dGVybiBpbnQgbWFjX2lycV9wZW5kaW5nKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBtYWNfaWRlbnRpZnkodm9pZCk7Ci1leHRlcm4gdm9pZCBtYWNfcmVwb3J0X2hhcmR3YXJlKHZvaWQpOwogCiAvKgogICoJRmxvcHB5IGRyaXZlciBtYWdpYyBob29rIC0gcHJvYmFibHkgc2hvdWxkbnQgYmUgaGVyZQpAQCAtMjEsOSArMTksNiBAQAogCiBleHRlcm4gdm9pZCB2aWExX3NldF9oZWFkKGludCk7CiAKLWV4dGVybiB2b2lkIHBhcnNlX2Jvb3RlcihjaGFyICpwdHIpOwotZXh0ZXJuIHZvaWQgcHJpbnRfYm9vdGVyKGNoYXIgKnB0cik7Ci0KIC8qCiAgKglNYWNpbnRvc2ggVGFibGUKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tZC5oIGIvaW5jbHVkZS9hc20tbTY4ay9tZC5oCmluZGV4IDQ2N2VhMDguLmQyZjc4ZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvbWQuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21kLmgKQEAgLTEsNCArMSw0IEBACi0vKiAkSWQ6IG1kLmgsdiAxLjEgMTk5Ny8xMi8xNSAxNToxMjowNCBqaiBFeHAgJAorLyoKICAqIG1kLmg6IEhpZ2ggc3BlZWQgeG9yX2Jsb2NrIG9wZXJhdGlvbiBmb3IgUkFJRDQvNQogICoKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9vcGVucHJvbS5oIGIvaW5jbHVkZS9hc20tbTY4ay9vcGVucHJvbS5oCmluZGV4IDg2OWFiOTEuLmQzM2NkYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvb3BlbnByb20uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL29wZW5wcm9tLmgKQEAgLTEsNCArMSwzIEBACi0vKiAkSWQ6IG9wZW5wcm9tLmgsdiAxLjE5IDE5OTYvMDkvMjUgMDM6NTE6MDggZGF2ZW0gRXhwICQgKi8KICNpZm5kZWYgX19TUEFSQ19PUEVOUFJPTV9ICiAjZGVmaW5lIF9fU1BBUkNfT1BFTlBST01fSAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL29wbGliLmggYi9pbmNsdWRlL2FzbS1tNjhrL29wbGliLmgKaW5kZXggMDZjYWEyZC4uZjA4MmQwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9vcGxpYi5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvb3BsaWIuaApAQCAtMSw0ICsxLDQgQEAKLS8qICRJZDogb3BsaWIuaCx2IDEuMTIgMTk5Ni8xMC8zMSAwNjoyOToxMyBkYXZlbSBFeHAgJAorLyoKICAqIG9wbGliLmg6ICBEZXNjcmliZXMgdGhlIGludGVyZmFjZSBhbmQgYXZhaWxhYmxlIHJvdXRpbmVzIGluIHRoZQogICogICAgICAgICAgIExpbnV4IFByb20gbGlicmFyeS4KICAqCkBAIC0xOSw3ICsxOSw2IEBACiAJUFJPTV9WMiwgICAgICAvKiBzdW40YyBhbmQgZWFybHkgc3VuNG0gVjIgcHJvbSAqLwogCVBST01fVjMsICAgICAgLyogc3VuNG0gYW5kIGxhdGVyLCB1cCB0byBzdW40ZC9zdW40ZSBtYWNoaW5lcyBWMyAqLwogCVBST01fUDEyNzUsICAgLyogSUVFRSBjb21wbGlhbnQgSVNBIGJhc2VkIFN1biBQUk9NLCBvbmx5IHN1bjR1ICovCi0gICAgICAgIFBST01fQVAxMDAwLCAgLyogYWN0dWFsbHkgbm8gcHJvbSBhdCBhbGwgKi8KIH07CiAKIGV4dGVybiBlbnVtIHByb21fbWFqb3JfdmVyc2lvbiBwcm9tX3ZlcnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NidXMuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2J1cy5oCmluZGV4IDNiMjVjMDAuLmJmZTNiYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvc2J1cy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2J1cy5oCkBAIC0xMiwxMSArMTIsNiBAQAogCX0gcmVnX2FkZHJzWzFdOwogfTsKIAotZXh0ZXJuIHZvaWQgKnNwYXJjX2FsbG9jX2lvICh1MzIsIHZvaWQgKiwgaW50LCBjaGFyICosIHUzMiwgaW50KTsKLSNkZWZpbmUgc3BhcmNfYWxsb2NfaW8oYSxiLGMsZCxlLGYpCShhKQotCi0jZGVmaW5lIEFSQ0hfU1VONCAgMAotCiAvKiBzYnVzIElPIGZ1bmN0aW9ucyBzdG9sZW4gZnJvbSBpbmNsdWRlL2FzbS1zcGFyYy9pby5oIGZvciB0aGUgc2VyaWFsIGRyaXZlciAqLwogLyogTm8gU0JVUyBvbiB0aGUgU3VuMywga2x1ZGdlIC0tIHNhbSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N1bjMtaGVhZC5oIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zLWhlYWQuaAppbmRleCBlNzRmMzg0Li4wNWFmMmYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3N1bjMtaGVhZC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VuMy1oZWFkLmgKQEAgLTEsNCArMSwzIEBACi0vKiAkSWQ6IGhlYWQuaCx2IDEuMzIgMTk5Ni8xMi8wNCAwMDoxMjo0OCBlY2QgRXhwICQgKi8KICNpZm5kZWYgX19TVU4zX0hFQURfSAogI2RlZmluZSBfX1NVTjNfSEVBRF9ICiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLW02OGsvdGxiZmx1c2guaAppbmRleCAxNzcwN2VjLi5hY2I2YmYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90bGJmbHVzaC5oCkBAIC0xNiw3ICsxNiw3IEBACiAJCQkJICAgICAiLmNoaXAgNjhrIgogCQkJCSAgICAgOiA6ICJhIiAoYWRkcikpOwogCQlzZXRfZnMob2xkX2ZzKTsKLQl9IGVsc2UKKwl9IGVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICM0LCM0LCglMCkiIDogOiAiYSIgKGFkZHIpKTsKIH0KIApAQCAtMjksNyArMjksNyBAQAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgogCQkJCSAgICAgInBmbHVzaGFuXG5cdCIKIAkJCQkgICAgICIuY2hpcCA2OGsiKTsKLQllbHNlCisJZWxzZSBpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCiAJCV9fYXNtX18gX192b2xhdGlsZV9fKCJwZmx1c2ggIzAsIzQiKTsKIH0KIApAQCAtNDUsNyArNDUsNyBAQAogewogCWlmIChDUFVfSVNfMDQwX09SXzA2MCkKIAkJX19mbHVzaF90bGIwNDBfb25lKGFkZHIpOwotCWVsc2UKKwllbHNlIGlmIChDUFVfSVNfMDIwX09SXzAzMCkKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oInBmbHVzaCAjMCwjNCwoJTApIiA6IDogImEiIChhZGRyKSk7CiB9CiAKQEAgLTYwLDcgKzYwLDcgQEAKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDQwXG5cdCIKIAkJCQkgICAgICJwZmx1c2hhXG5cdCIKIAkJCQkgICAgICIuY2hpcCA2OGsiKTsKLQllbHNlCisJZWxzZSBpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCiAJCV9fYXNtX18gX192b2xhdGlsZV9fKCJwZmx1c2hhIik7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCmluZGV4IDlhNzI3NGIuLjQ5ZGY4YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaApAQCAtODIsNyArODIsNyBAQAogCQkiMjoJYgkxYgkJCQkJXG4iCiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJOiAiPSZyIiAodGVtcCksICI9bSIgKCptKQotCQk6ICJpIiAoYml0KSwgIm0iICgqbSksICJyIiAofjApKTsKKwkJOiAiaXIiIChiaXQpLCAibSIgKCptKSwgInIiICh+MCkpOwogI2VuZGlmIC8qIENPTkZJR19DUFVfTUlQU1IyICovCiAJfSBlbHNlIGlmIChjcHVfaGFzX2xsc2MpIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAkJIjI6CWIJMWIJCQkJCVxuIgogCQkiCS5wcmV2aW91cwkJCQkJXG4iCiAJCTogIj0mciIgKHRlbXApLCAiPW0iICgqbSkKLQkJOiAiaSIgKGJpdCksICJtIiAoKm0pKTsKKwkJOiAiaXIiIChiaXQpLCAibSIgKCptKSk7CiAjZW5kaWYgLyogQ09ORklHX0NQVV9NSVBTUjIgKi8KIAl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKQEAgLTQyOCw3ICs0MjgsNyBAQAogCQkiMjoJYgkxYgkJCQkJXG4iCiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJOiAiPSZyIiAodGVtcCksICI9bSIgKCptKSwgIj0mciIgKHJlcykKLQkJOiAiaSIgKGJpdCksICJtIiAoKm0pCisJCTogImlyIiAoYml0KSwgIm0iICgqbSkKIAkJOiAibWVtb3J5Iik7CiAjZW5kaWYKIAl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oCmluZGV4IGQzOWUxNDMuLjYxMGZlM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmgKQEAgLTUxLDYgKzUxLDEyIEBACiAjZGVmaW5lIE1BQ0hfTVNQNzEyMF9GUEdBICAgICAgIDUJLyogUE1DLVNpZXJyYSBNU1A3MTIwIEVtdWxhdGlvbiAqLwogI2RlZmluZSBNQUNIX01TUF9PVEhFUiAgICAgICAgMjU1CS8qIFBNQy1TaWVycmEgdW5rbm93biBib2FyZCB0eXBlICovCiAKKy8qCisgKiBWYWxpZCBtYWNodHlwZSBmb3IgZ3JvdXAgTWlrcm90aWsKKyAqLworI2RlZmluZQlNQUNIX01JS1JPVElLX1JCNTMyCTAJLyogTWlrcm90aWsgUm91dGVyQm9hcmQgNTMyIAkqLworI2RlZmluZSBNQUNIX01JS1JPVElLX1JCNTMyQQkxCS8qIE1pa3JvdGlrIFJvdXRlckJvYXJkIDUzMkEgCSovCisKICNkZWZpbmUgQ0xfU0laRQkJCUNPTU1BTkRfTElORV9TSVpFCiAKIGV4dGVybiBjaGFyICpzeXN0ZW1fdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmggYi9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCmluZGV4IGU1OWQ0YzAuLjhhM2VmMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mcHUuaApAQCAtMzUsNiArMzUsOCBAQAogZXh0ZXJuIGFzbWxpbmthZ2UgaW50ICgqcmVzdG9yZV9mcF9jb250ZXh0MzIpKHN0cnVjdCBzaWdjb250ZXh0MzIgX191c2VyICpzYyk7CiAKIGV4dGVybiB2b2lkIGZwdV9lbXVsYXRvcl9pbml0X2ZwdSh2b2lkKTsKK2V4dGVybiBpbnQgZnB1X2VtdWxhdG9yX3NhdmVfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKK2V4dGVybiBpbnQgZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKIGV4dGVybiB2b2lkIF9pbml0X2ZwdSh2b2lkKTsKIGV4dGVybiB2b2lkIF9zYXZlX2ZwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIF9yZXN0b3JlX2ZwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiYzdlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiAgSURUIFJDMzI0MzQgc3BlY2lmaWMgQ1BVIGZlYXR1cmUgb3ZlcnJpZGVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoKKyAqICBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbTogaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaAorICoJQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IFJhbGYgQmFlY2hsZQorICoJQ29weXJpZ2h0IChDKSAyMDA0IE1hY2llaiBXLiBSb3p5Y2tpCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX1JDMzI0MzRfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9SQzMyNDM0X0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisKKy8qCisgKiBUaGUgSURUIFJDMzI0MzQgU09DIGhhcyBhIGJ1aWx0LWluIE1JUFMgNEtjIGNvcmUuCisgKi8KKyNkZWZpbmUgY3B1X2hhc190bGIJCQkxCisjZGVmaW5lIGNwdV9oYXNfNGtleAkJCTEKKyNkZWZpbmUgY3B1X2hhc18za19jYWNoZQkJMAorI2RlZmluZSBjcHVfaGFzXzRrX2NhY2hlCQkxCisjZGVmaW5lIGNwdV9oYXNfdHgzOV9jYWNoZQkJMAorI2RlZmluZSBjcHVfaGFzX3NiMV9jYWNoZQkJMAorI2RlZmluZSBjcHVfaGFzX2ZwdQkJCTAKKyNkZWZpbmUgY3B1X2hhc18zMmZwcgkJCTAKKyNkZWZpbmUgY3B1X2hhc19jb3VudGVyCQkJMQorI2RlZmluZSBjcHVfaGFzX3dhdGNoCQkJMQorI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkJMQorI2RlZmluZSBjcHVfaGFzX3ZjZQkJCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3AJCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJCTAKKyNkZWZpbmUgY3B1X2hhc19wcmVmZXRjaAkJMQorI2RlZmluZSBjcHVfaGFzX21jaGVjawkJCTEKKyNkZWZpbmUgY3B1X2hhc19lanRhZwkJCTEKKyNkZWZpbmUgY3B1X2hhc19sbHNjCQkJMQorCisjZGVmaW5lIGNwdV9oYXNfbWlwczE2CQkJMAorI2RlZmluZSBjcHVfaGFzX21kbXgJCQkwCisjZGVmaW5lIGNwdV9oYXNfbWlwczNkCQkJMAorI2RlZmluZSBjcHVfaGFzX3NtYXJ0bWlwcwkJMAorCisjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJCTAKKy8qICNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCQk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwk/ICovCisvKiAjZGVmaW5lIGNwdV9oYXNfcGluZGV4ZWRfZGNhY2hlCT8gKi8KKworLyogI2RlZmluZSBjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUJPyAqLworCisjZGVmaW5lIGNwdV9oYXNfbWlwczMycjEJCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzMzJyMgkJMAorI2RlZmluZSBjcHVfaGFzX21pcHM2NHIxCQkwCisjZGVmaW5lIGNwdV9oYXNfbWlwczY0cjIJCTAKKworI2RlZmluZSBjcHVfaGFzX2RzcAkJCTAKKyNkZWZpbmUgY3B1X2hhc19taXBzbXQJCQkwCisKKy8qICNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQk/ICovCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkJMAorI2RlZmluZSBjcHVfaGFzXzY0Yml0X3plcm9fcmVnCQkwCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRfZ3BfcmVncwkJMAorI2RlZmluZSBjcHVfaGFzXzY0Yml0X2FkZHJlc3NlcwkJMAorCisjZGVmaW5lIGNwdV9oYXNfaW5jbHVzaXZlX3BjYWNoZXMJMAorCisjZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJCTE2CisjZGVmaW5lIGNwdV9pY2FjaGVfbGluZV9zaXplKCkJCTE2CisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1JDMzI0MzRfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L2Rkci5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvZGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxZTJjZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L2Rkci5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogIERlZmluaXRpb25zIGZvciB0aGUgRERSIHJlZ2lzdGVycworICoKKyAqICBDb3B5cmlnaHQgMjAwMiBSeWFuIEhvbG0gPHJ5YW4uaG9sbVFWaXN0QGlkdC5jb20+CisgKiAgQ29weXJpZ2h0IDIwMDggRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9SQzMyNDM0X0REUl9IXworI2RlZmluZSBfQVNNX1JDMzI0MzRfRERSX0hfCisKKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JiLmg+CisKKy8qIEREUiByZWdpc3RlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBkZHJfcmFtIHsKKwl1MzIgZGRyYmFzZTsKKwl1MzIgZGRybWFzazsKKwl1MzIgcmVzMTsKKwl1MzIgcmVzMjsKKwl1MzIgZGRyYzsKKwl1MzIgZGRyYWJhc2U7CisJdTMyIGRkcmFtYXNrOworCXUzMiBkZHJhbWFwOworCXUzMiBkZHJjdXN0OworCXUzMiBkZHJyZGM7CisJdTMyIGRkcnNwYXJlOworfTsKKworI2RlZmluZSBERFIwX1BIWVNfQUREUgkJMHgxODAxODAwMAorCisvKiBERFIgYmFua3MgbWFza3MgKi8KKyNkZWZpbmUgRERSX01BU0sJCTB4ZmZmZjAwMDAKKyNkZWZpbmUgRERSMF9CQVNFX01TSwkJRERSX01BU0sKKyNkZWZpbmUgRERSMV9CQVNFX01TSwkJRERSX01BU0sKKworLyogRERSIGJhbmswIHJlZ2lzdGVycyAqLworI2RlZmluZSBSQzMyNDM0X0REUjBfQVRBX0JJVAkJNQorI2RlZmluZSBSQzMyNDM0X0REUjBfQVRBX01TSwkJMHgwMDAwMDBFMAorI2RlZmluZSBSQzMyNDM0X0REUjBfREJXX0JJVAkJOAorI2RlZmluZSBSQzMyNDM0X0REUjBfREJXX01TSwkJMHgwMDAwMDEwMAorI2RlZmluZSBSQzMyNDM0X0REUjBfV1JfQklUCQk5CisjZGVmaW5lIFJDMzI0MzRfRERSMF9XUl9NU0sJCTB4MDAwMDA2MDAKKyNkZWZpbmUgUkMzMjQzNF9ERFIwX1BTX0JJVAkJMTEKKyNkZWZpbmUgUkMzMjQzNF9ERFIwX1BTX01TSwkJMHgwMDAwMTgwMAorI2RlZmluZSBSQzMyNDM0X0REUjBfRFRZUEVfQklUCQkxMworI2RlZmluZSBSQzMyNDM0X0REUjBfRFRZUEVfTVNLCQkweDAwMDBlMDAwCisjZGVmaW5lIFJDMzI0MzRfRERSMF9SRkNfQklUCQkxNgorI2RlZmluZSBSQzMyNDM0X0REUjBfUkZDX01TSwkJMHgwMDBmMDAwMAorI2RlZmluZSBSQzMyNDM0X0REUjBfUlBfQklUCQkyMAorI2RlZmluZSBSQzMyNDM0X0REUjBfUlBfTVNLCQkweDAwMzAwMDAwCisjZGVmaW5lIFJDMzI0MzRfRERSMF9BUF9CSVQJCTIyCisjZGVmaW5lIFJDMzI0MzRfRERSMF9BUF9NU0sJCTB4MDA0MDAwMDAKKyNkZWZpbmUgUkMzMjQzNF9ERFIwX1JDRF9CSVQJCTIzCisjZGVmaW5lIFJDMzI0MzRfRERSMF9SQ0RfTVNLCQkweDAxODAwMDAwCisjZGVmaW5lIFJDMzI0MzRfRERSMF9DTF9CSVQJCTI1CisjZGVmaW5lIFJDMzI0MzRfRERSMF9DTF9NU0sJCTB4MDYwMDAwMDAKKyNkZWZpbmUgUkMzMjQzNF9ERFIwX0RCTV9CSVQJCTI3CisjZGVmaW5lIFJDMzI0MzRfRERSMF9EQk1fTVNLCQkweDA4MDAwMDAwCisjZGVmaW5lIFJDMzI0MzRfRERSMF9TRFNfQklUCQkyOAorI2RlZmluZSBSQzMyNDM0X0REUjBfU0RTX01TSwkJMHgxMDAwMDAwMAorI2RlZmluZSBSQzMyNDM0X0REUjBfQVRQX0JJVAkJMjkKKyNkZWZpbmUgUkMzMjQzNF9ERFIwX0FUUF9NU0sJCTB4NjAwMDAwMDAKKyNkZWZpbmUgUkMzMjQzNF9ERFIwX1JFX0JJVAkJMzEKKyNkZWZpbmUgUkMzMjQzNF9ERFIwX1JFX01TSwkJMHg4MDAwMDAwMAorCisvKiBERFIgYmFuayBDIHJlZ2lzdGVycyAqLworI2RlZmluZSBSQzMyNDM0X0REUkNfTVNLKHgpCQlCSVRfVE9fTUFTSyh4KQorI2RlZmluZSBSQzMyNDM0X0REUkNfQ0VTX0JJVAkJMAorI2RlZmluZSBSQzMyNDM0X0REUkNfQUNFX0JJVAkJMQorCisvKiBDdXN0b20gRERSIGJhbmsgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJDMzI0MzRfRENTVF9NU0soeCkJCUJJVF9UT19NQVNLKHgpCisjZGVmaW5lIFJDMzI0MzRfRENTVF9DU19CSVQJCTAKKyNkZWZpbmUgUkMzMjQzNF9EQ1NUX0NTX01TSwkJMHgwMDAwMDAwMworI2RlZmluZSBSQzMyNDM0X0RDU1RfV0VfQklUCQkyCisjZGVmaW5lIFJDMzI0MzRfRENTVF9SQVNfQklUCQkzCisjZGVmaW5lIFJDMzI0MzRfRENTVF9DQVNfQklUCQk0CisjZGVmaW5lIFJDMzI0MzRfRFNDVF9DS0VfQklUCQk1CisjZGVmaW5lIFJDMzI0MzRfRFNDVF9CQV9CSVQJCTYKKyNkZWZpbmUgUkMzMjQzNF9EU0NUX0JBX01TSwkJMHgwMDAwMDBjMAorCisvKiBERFIgUVNDIHJlZ2lzdGVycyAqLworI2RlZmluZSBSQzMyNDM0X1FTQ19ETV9CSVQJCTAKKyNkZWZpbmUgUkMzMjQzNF9RU0NfRE1fTVNLCQkweDAwMDAwMDAzCisjZGVmaW5lIFJDMzI0MzRfUVNDX0RRU0JTX0JJVAkJMgorI2RlZmluZSBSQzMyNDM0X1FTQ19EUVNCU19NU0sJCTB4MDAwMDAwZmMKKyNkZWZpbmUgUkMzMjQzNF9RU0NfREJfQklUCQk4CisjZGVmaW5lIFJDMzI0MzRfUVNDX0RCX01TSwkJMHgwMDAwMDEwMAorI2RlZmluZSBSQzMyNDM0X1FTQ19EQlNQX0JJVAkJOQorI2RlZmluZSBSQzMyNDM0X1FTQ19EQlNQX01TSwkJMHgwMWZmZmUwMAorI2RlZmluZSBSQzMyNDM0X1FTQ19CRFBfQklUCQkyNQorI2RlZmluZSBSQzMyNDM0X1FTQ19CRFBfTVNLCQkweDdlMDAwMDAwCisKKy8qIEREUiBMTEMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJDMzI0MzRfTExDX0VBT19CSVQJCTAKKyNkZWZpbmUgUkMzMjQzNF9MTENfRUFPX01TSwkJMHgwMDAwMDAwMQorI2RlZmluZSBSQzMyNDM0X0xMQ19FT19CSVQJCTEKKyNkZWZpbmUgUkMzMjQzNF9MTENfRU9fTVNLCQkweDAwMDAwMDNlCisjZGVmaW5lIFJDMzI0MzRfTExDX0ZTX0JJVAkJNgorI2RlZmluZSBSQzMyNDM0X0xMQ19GU19NU0sJCTB4MDAwMDAwYzAKKyNkZWZpbmUgUkMzMjQzNF9MTENfQVNfQklUCQk4CisjZGVmaW5lIFJDMzI0MzRfTExDX0FTX01TSwkJMHgwMDAwMDcwMAorI2RlZmluZSBSQzMyNDM0X0xMQ19TUF9CSVQJCTExCisjZGVmaW5lIFJDMzI0MzRfTExDX1NQX01TSwkJMHgwMDFmZjgwMAorCisvKiBERFIgTExGQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkMzMjQzNF9MTEZDX01TSyh4KQkJQklUX1RPX01BU0soeCkKKyNkZWZpbmUgUkMzMjQzNF9MTEZDX01FTl9CSVQJCTAKKyNkZWZpbmUgUkMzMjQzNF9MTEZDX0VBTl9CSVQJCTEKKyNkZWZpbmUgUkMzMjQzNF9MTEZDX0ZGX0JJVAkJMgorCisvKiBERFIgRExMVEEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJDMzI0MzRfRExMVEFfQUREUl9CSVQJCTIKKyNkZWZpbmUgUkMzMjQzNF9ETExUQV9BRERSX01TSwkJMHhmZmZmZmZmYworCisvKiBERFIgRExMRUQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJDMzI0MzRfRExMRURfTVNLKHgpCQlCSVRfVE9fTUFTSyh4KQorI2RlZmluZSBSQzMyNDM0X0RMTEVEX0RCRV9CSVQJCTAKKyNkZWZpbmUgUkMzMjQzNF9ETExFRF9EVEVfQklUCQkxCisKKyNlbmRpZiAgLyogX0FTTV9SQzMyNDM0X0REUl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvZG1hLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Zjg5OGI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvZG1hLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMiBJbnRlZ3JhdGVkIERldmljZSBUZWNobm9sb2d5LCBJbmMuCisgKgkJQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBETUEgcmVnaXN0ZXIgZGVmaW5pdGlvbi4KKyAqCisgKiBBdXRob3IgOiByeWFuLmhvbG1RVmlzdEBpZHQuY29tCisgKiBEYXRlICAgOiAyMDAxMTAwNQorICovCisKKyNpZm5kZWYgX19BU01fUkMzMjQzNF9ETUFfSAorI2RlZmluZSBfX0FTTV9SQzMyNDM0X0RNQV9ICisKKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JiLmg+CisKKyNkZWZpbmUgRE1BMF9CQVNFX0FERFIJCQkweDE4MDQwMDAwCisKKy8qCisgKiBETUEgZGVzY3JpcHRvciAoaW4gcGh5c2ljYWwgbWVtb3J5KS4KKyAqLworCitzdHJ1Y3QgZG1hX2Rlc2MgeworCXUzMiBjb250cm9sOwkJCS8qIENvbnRyb2wuIHVzZSBETUFEXyogKi8KKwl1MzIgY2E7CQkJCS8qIEN1cnJlbnQgQWRkcmVzcy4gKi8KKwl1MzIgZGV2Y3M7CQkJLyogRGV2aWNlIGNvbnRyb2wgYW5kIHN0YXR1cy4gKi8KKwl1MzIgbGluazsJCQkvKiBOZXh0IGRlc2NyaXB0b3IgaW4gY2hhaW4uICovCit9OworCisjZGVmaW5lIERNQV9ERVNDX1NJWgkJCXNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpCisjZGVmaW5lIERNQV9ERVNDX0NPVU5UX0JJVAkJMAorI2RlZmluZSBETUFfREVTQ19DT1VOVF9NU0sJCTB4MDAwM2ZmZmYKKyNkZWZpbmUgRE1BX0RFU0NfRFNfQklUCQkJMjAKKyNkZWZpbmUgRE1BX0RFU0NfRFNfTVNLCQkJMHgwMDMwMDAwMAorCisjZGVmaW5lIERNQV9ERVNDX0RFVl9DTURfQklUCQkyMgorI2RlZmluZSBETUFfREVTQ19ERVZfQ01EX01TSwkJMHgwMWMwMDAwMAorCisvKiBETUEgY29tbWFuZCBzaXplcyAqLworI2RlZmluZSBETUFfREVTQ19ERVZfQ01EX0JZVEUJCTAKKyNkZWZpbmUgRE1BX0RFU0NfREVWX0NNRF9ITEZfV0QJCTEKKyNkZWZpbmUgRE1BX0RFU0NfREVWX0NNRF9XT1JECQkyCisjZGVmaW5lIERNQV9ERVNDX0RFVl9DTURfMldPUkRTCQkzCisjZGVmaW5lIERNQV9ERVNDX0RFVl9DTURfNFdPUkRTCQk0CisjZGVmaW5lIERNQV9ERVNDX0RFVl9DTURfNldPUkRTCQk1CisjZGVmaW5lIERNQV9ERVNDX0RFVl9DTURfOFdPUkRTCQk2CisjZGVmaW5lIERNQV9ERVNDX0RFVl9DTURfMTZXT1JEUwk3CisKKy8qIERNQSBkZXNjcmlwdG9ycyBpbnRlcnJ1cHRzICovCisjZGVmaW5lIERNQV9ERVNDX0NPRgkJCSgxIDw8IDI1KSAvKiBDaGFpbiBvbiBmaW5pc2hlZCAqLworI2RlZmluZSBETUFfREVTQ19DT0QJCQkoMSA8PCAyNikgLyogQ2hhaW4gb24gZG9uZSAqLworI2RlZmluZSBETUFfREVTQ19JT0YJCQkoMSA8PCAyNykgLyogSW50ZXJydXB0IG9uIGZpbmlzaGVkICovCisjZGVmaW5lIERNQV9ERVNDX0lPRAkJCSgxIDw8IDI4KSAvKiBJbnRlcnJ1cHQgb24gZG9uZSAqLworI2RlZmluZSBETUFfREVTQ19URVJNCQkJKDEgPDwgMjkpIC8qIFRlcm1pbmF0ZWQgKi8KKyNkZWZpbmUgRE1BX0RFU0NfRE9ORQkJCSgxIDw8IDMwKSAvKiBEb25lICovCisjZGVmaW5lIERNQV9ERVNDX0ZJTkkJCQkoMSA8PCAzMSkgLyogRmluaXNoZWQgKi8KKworLyoKKyAqIERNQSByZWdpc3RlciAod2l0aGluIEludGVybmFsIFJlZ2lzdGVyIE1hcCkuCisgKi8KKworc3RydWN0IGRtYV9yZWcgeworCXUzMiBkbWFjOwkJLyogQ29udHJvbC4gKi8KKwl1MzIgZG1hczsJCS8qIFN0YXR1cy4gKi8KKwl1MzIgZG1hc207CQkvKiBNYXNrLiAqLworCXUzMiBkbWFkcHRyOwkJLyogRGVzY3JpcHRvciBwb2ludGVyLiAqLworCXUzMiBkbWFuZHB0cjsJCS8qIE5leHQgZGVzY3JpcHRvciBwb2ludGVyLiAqLworfTsKKworLyogRE1BIGNoYW5uZWxzIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ0hBTl9SVU5fQklUCQkoMSA8PCAwKQorI2RlZmluZSBETUFfQ0hBTl9ET05FX0JJVAkJKDEgPDwgMSkKKyNkZWZpbmUgRE1BX0NIQU5fTU9ERV9CSVQJCSgxIDw8IDIpCisjZGVmaW5lIERNQV9DSEFOX01PREVfTVNLCQkweDAwMDAwMDBjCisjZGVmaW5lICBETUFfQ0hBTl9NT0RFX0FVVE8JCTAKKyNkZWZpbmUgIERNQV9DSEFOX01PREVfQlVSU1QJCTEKKyNkZWZpbmUgIERNQV9DSEFOX01PREVfWEZSVAkJMgorI2RlZmluZSAgRE1BX0NIQU5fTU9ERV9SU1ZECQkzCisjZGVmaW5lIERNQV9DSEFOX0FDVF9CSVQJCSgxIDw8IDQpCisKKy8qIERNQSBzdGF0dXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9TVEFUX0ZJTkkJCQkoMSA8PCAwKQorI2RlZmluZSBETUFfU1RBVF9ET05FCQkJKDEgPDwgMSkKKyNkZWZpbmUgRE1BX1NUQVRfQ0hBSU4JCQkoMSA8PCAyKQorI2RlZmluZSBETUFfU1RBVF9FUlIJCQkoMSA8PCAzKQorI2RlZmluZSBETUFfU1RBVF9IQUxUCQkJKDEgPDwgNCkKKworLyoKKyAqIERNQSBjaGFubmVsIGRlZmluaXRpb25zCisgKi8KKworI2RlZmluZSBETUFfQ0hBTl9FVEhfUkNWCQkwCisjZGVmaW5lIERNQV9DSEFOX0VUSF9YTVQJCTEKKyNkZWZpbmUgRE1BX0NIQU5fTUVNX1RPX0ZJRk8JCTIKKyNkZWZpbmUgRE1BX0NIQU5fRklGT19UT19NRU0JCTMKKyNkZWZpbmUgRE1BX0NIQU5fUENJX1RPX01FTQkJNAorI2RlZmluZSBETUFfQ0hBTl9NRU1fVE9fUENJCQk1CisjZGVmaW5lIERNQV9DSEFOX0NPVU5UCQkJNgorCitzdHJ1Y3QgZG1hX2NoYW5uZWwgeworCXN0cnVjdCBkbWFfcmVnIGNoW0RNQV9DSEFOX0NPVU5UXTsKK307CisKKyNlbmRpZiAgLyogX19BU01fUkMzMjQzNF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvZG1hX3YuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L2RtYV92LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczYTlmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L2RtYV92LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAyIEludGVncmF0ZWQgRGV2aWNlIFRlY2hub2xvZ3ksIEluYy4KKyAqCQlBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERNQSByZWdpc3RlciBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvciA6IHJ5YW4uaG9sbVFWaXN0QGlkdC5jb20KKyAqIERhdGUgICA6IDIwMDExMDA1CisgKi8KKworI2lmbmRlZiBfQVNNX1JDMzI0MzRfRE1BX1ZfSF8KKyNkZWZpbmUgX0FTTV9SQzMyNDM0X0RNQV9WX0hfCisKKyNpbmNsdWRlICA8YXNtL21hY2gtcmMzMjQzNC9kbWEuaD4KKyNpbmNsdWRlICA8YXNtL21hY2gtcmMzMjQzNC9yYzMyNDM0Lmg+CisKKyNkZWZpbmUgRE1BX0NIQU5fT0ZGU0VUCQkweDE0CisjZGVmaW5lIElTX0RNQV9VU0VEKFgpCQkoKChYKSAmIFwKKwkJCQkoRE1BX0RFU0NfRklOSSB8IERNQV9ERVNDX0RPTkUgfCBETUFfREVTQ19URVJNKSkgXAorCQkJCSE9IDApCisjZGVmaW5lIERNQV9DT1VOVChjb3VudCkJKChjb3VudCkgJiBETUFfREVTQ19DT1VOVF9NU0spCisKKyNkZWZpbmUgRE1BX0hBTFRfVElNRU9VVAk1MDAKKworc3RhdGljIGlubGluZSBpbnQgcmMzMjQzNF9oYWx0X2RtYShzdHJ1Y3QgZG1hX3JlZyAqY2gpCit7CisJaW50IHRpbWVvdXQgPSAxOworCWlmIChfX3Jhd19yZWFkbCgmY2gtPmRtYWMpICYgRE1BX0NIQU5fUlVOX0JJVCkgeworCQlfX3Jhd193cml0ZWwoMCwgJmNoLT5kbWFjKTsKKwkJZm9yICh0aW1lb3V0ID0gRE1BX0hBTFRfVElNRU9VVDsgdGltZW91dCA+IDA7IHRpbWVvdXQtLSkgeworCQkJaWYgKF9fcmF3X3JlYWRsKCZjaC0+ZG1hcykgJiBETUFfU1RBVF9IQUxUKSB7CisJCQkJX19yYXdfd3JpdGVsKDAsICZjaC0+ZG1hcyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdGltZW91dCA/IDAgOiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmMzMjQzNF9zdGFydF9kbWEoc3RydWN0IGRtYV9yZWcgKmNoLCB1MzIgZG1hX2FkZHIpCit7CisJX19yYXdfd3JpdGVsKDAsICZjaC0+ZG1hbmRwdHIpOworCV9fcmF3X3dyaXRlbChkbWFfYWRkciwgJmNoLT5kbWFkcHRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJjMzI0MzRfY2hhaW5fZG1hKHN0cnVjdCBkbWFfcmVnICpjaCwgdTMyIGRtYV9hZGRyKQoreworCV9fcmF3X3dyaXRlbChkbWFfYWRkciwgJmNoLT5kbWFuZHB0cik7Cit9CisKKyNlbmRpZiAgLyogX0FTTV9SQzMyNDM0X0RNQV9WX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC9ldGguaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L2V0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNWNiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC9ldGguaApAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqICBEZWZpbml0aW9ucyBmb3IgdGhlIEV0aGVybmV0IHJlZ2lzdGVycworICoKKyAqICBDb3B5cmlnaHQgMjAwMiBBbGxlbmQgU3RpY2h0ZXIgPGFsbGVuLnN0aWNodGVyQGlkdC5jb20+CisgKiAgQ29weXJpZ2h0IDIwMDggRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYJX19BU01fUkMzMjQzNF9FVEhfSAorI2RlZmluZQlfX0FTTV9SQzMyNDM0X0VUSF9ICisKKworI2RlZmluZSBFVEgwX0JBU0VfQUREUgkJMHgxODA2MDAwMAorCitzdHJ1Y3QgZXRoX3JlZ3MgeworCXUzMiBldGhpbnRmYzsKKwl1MzIgZXRoZmlmb3R0OworCXUzMiBldGhhcmM7CisJdTMyIGV0aGhhc2gwOworCXUzMiBldGhoYXNoMTsKKwl1MzIgZXRodTBbNF07CQkvKiBSZXNlcnZlZC4gKi8KKwl1MzIgZXRocGZzOworCXUzMiBldGhtY3A7CisJdTMyIGV0aF91MVsxMF07CQkvKiBSZXNlcnZlZC4gKi8KKwl1MzIgZXRoc3BhcmU7CisJdTMyIGV0aF91Mls0Ml07CQkvKiBSZXNlcnZlZC4gKi8KKwl1MzIgZXRoc2FsMDsKKwl1MzIgZXRoc2FoMDsKKwl1MzIgZXRoc2FsMTsKKwl1MzIgZXRoc2FoMTsKKwl1MzIgZXRoc2FsMjsKKwl1MzIgZXRoc2FoMjsKKwl1MzIgZXRoc2FsMzsKKwl1MzIgZXRoc2FoMzsKKwl1MzIgZXRocmJjOworCXUzMiBldGhycGM7CisJdTMyIGV0aHJ1cGM7CisJdTMyIGV0aHJmYzsKKwl1MzIgZXRodGJjOworCXUzMiBldGhncGY7CisJdTMyIGV0aF91OVs1MF07CQkvKiBSZXNlcnZlZC4gKi8KKwl1MzIgZXRobWFjMTsKKwl1MzIgZXRobWFjMjsKKwl1MzIgZXRoaXBndDsKKwl1MzIgZXRoaXBncjsKKwl1MzIgZXRoY2xydDsKKwl1MzIgZXRobWF4ZjsKKwl1MzIgZXRoX3UxMDsJCS8qIFJlc2VydmVkLiAqLworCXUzMiBldGhtdGVzdDsKKwl1MzIgbWlpbWNmZzsKKwl1MzIgbWlpbWNtZDsKKwl1MzIgbWlpbWFkZHI7CisJdTMyIG1paW13dGQ7CisJdTMyIG1paW1yZGQ7CisJdTMyIG1paW1pbmQ7CisJdTMyIGV0aF91MTE7CQkvKiBSZXNlcnZlZC4gKi8KKwl1MzIgZXRoX3UxMjsJCS8qIFJlc2VydmVkLiAqLworCXUzMiBldGhjZnNhMDsKKwl1MzIgZXRoY2ZzYTE7CisJdTMyIGV0aGNmc2EyOworfTsKKworLyogRXRoZXJuZXQgaW50ZXJydXB0IHJlZ2lzdGVycyAqLworI2RlZmluZSBFVEhfSU5UX0ZDX0VOCQkoMSA8PCAwKQorI2RlZmluZSBFVEhfSU5UX0ZDX0lUUwkJKDEgPDwgMSkKKyNkZWZpbmUgRVRIX0lOVF9GQ19SSVAJCSgxIDw8IDIpCisjZGVmaW5lIEVUSF9JTlRfRkNfSkFNCQkoMSA8PCAzKQorI2RlZmluZSBFVEhfSU5UX0ZDX09WUgkJKDEgPDwgNCkKKyNkZWZpbmUgRVRIX0lOVF9GQ19VTkQJCSgxIDw8IDUpCisjZGVmaW5lIEVUSF9JTlRfRkNfSU9DCQkweDAwMDAwMGMwCisKKy8qIEV0aGVybmV0IEZJRk8gcmVnaXN0ZXJzICovCisjZGVmaW5lIEVUSF9GSUZJX1RUX1RUSF9CSVQJMAorI2RlZmluZSBFVEhfRklGT19UVF9UVEgJCTB4MDAwMDAwN2YKKworLyogRXRoZXJuZXQgQVJDL211bHRpY2FzdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVRIX0FSQ19QUk8JCSgxIDw8IDApCisjZGVmaW5lIEVUSF9BUkNfQU0JCSgxIDw8IDEpCisjZGVmaW5lIEVUSF9BUkNfQUZNCQkoMSA8PCAyKQorI2RlZmluZSBFVEhfQVJDX0FCCQkoMSA8PCAzKQorCisvKiBFdGhlcm5ldCBTQUwgcmVnaXN0ZXJzICovCisjZGVmaW5lIEVUSF9TQUxfQllURV81CQkweDAwMDAwMGZmCisjZGVmaW5lIEVUSF9TQUxfQllURV80CQkweDAwMDBmZjAwCisjZGVmaW5lIEVUSF9TQUxfQllURV8zCQkweDAwZmYwMDAwCisjZGVmaW5lIEVUSF9TQUxfQllURV8yCQkweGZmMDAwMDAwCisKKy8qIEV0aGVybmV0IFNBSCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVRIX1NBSF9CWVRFMQkJMHgwMDAwMDBmZgorI2RlZmluZSBFVEhfU0FIX0JZVEUwCQkweDAwMDBmZjAwCisKKy8qIEV0aGVybmV0IEdQRiByZWdpc3RlciAqLworI2RlZmluZSBFVEhfR1BGX1BUVgkJMHgwMDAwZmZmZgorCisvKiBFdGhlcm5ldCBQRkcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIX1BGU19QRkQJCSgxIDw8IDApCisKKy8qIEV0aGVybmV0IENGU0FbMC0zXSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVRIX0NGU0EwX0NGU0E0CQkweDAwMDAwMGZmCisjZGVmaW5lIEVUSF9DRlNBMF9DRlNBNQkJMHgwMDAwZmYwMAorI2RlZmluZSBFVEhfQ0ZTQTFfQ0ZTQTIJCTB4MDAwMDAwZmYKKyNkZWZpbmUgRVRIX0NGU0ExX0NGU0EzCQkweDAwMDBmZjAwCisjZGVmaW5lIEVUSF9DRlNBMV9DRlNBMAkJMHgwMDAwMDBmZgorI2RlZmluZSBFVEhfQ0ZTQTFfQ0ZTQTEJCTB4MDAwMGZmMDAKKworLyogRXRoZXJuZXQgTUFDMSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVRIX01BQzFfUkUJCSgxIDw8IDApCisjZGVmaW5lIEVUSF9NQUMxX1BBRgkJKDEgPDwgMSkKKyNkZWZpbmUgRVRIX01BQzFfUkZDCQkoMSA8PCAyKQorI2RlZmluZSBFVEhfTUFDMV9URkMJCSgxIDw8IDMpCisjZGVmaW5lIEVUSF9NQUMxX0xCCQkoMSA8PCA0KQorI2RlZmluZSBFVEhfTUFDMV9NUgkJKDEgPDwgMzEpCisKKy8qIEV0aGVybmV0IE1BQzIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEVUSF9NQUMyX0ZECQkoMSA8PCAwKQorI2RlZmluZSBFVEhfTUFDMl9GTEMJCSgxIDw8IDEpCisjZGVmaW5lIEVUSF9NQUMyX0hGRQkJKDEgPDwgMikKKyNkZWZpbmUgRVRIX01BQzJfREMJCSgxIDw8IDMpCisjZGVmaW5lIEVUSF9NQUMyX0NFTgkJKDEgPDwgNCkKKyNkZWZpbmUgRVRIX01BQzJfUEUJCSgxIDw8IDUpCisjZGVmaW5lIEVUSF9NQUMyX1ZQRQkJKDEgPDwgNikKKyNkZWZpbmUgRVRIX01BQzJfQVBFCQkoMSA8PCA3KQorI2RlZmluZSBFVEhfTUFDMl9QUEUJCSgxIDw8IDgpCisjZGVmaW5lIEVUSF9NQUMyX0xQRQkJKDEgPDwgOSkKKyNkZWZpbmUgRVRIX01BQzJfTkIJCSgxIDw8IDEyKQorI2RlZmluZSBFVEhfTUFDMl9CUAkJKDEgPDwgMTMpCisjZGVmaW5lIEVUSF9NQUMyX0VECQkoMSA8PCAxNCkKKworLyogRXRoZXJuZXQgSVBHVCByZWdpc3RlciAqLworI2RlZmluZSBFVEhfSVBHVAkJMHgwMDAwMDA3ZgorCisvKiBFdGhlcm5ldCBJUEdSIHJlZ2lzdGVycyAqLworI2RlZmluZSBFVEhfSVBHUl9JUEdSMgkJMHgwMDAwMDA3ZgorI2RlZmluZSBFVEhfSVBHUl9JUEdSMQkJMHgwMDAwN2YwMAorCisvKiBFdGhlcm5ldCBDTFJUIHJlZ2lzdGVycyAqLworI2RlZmluZSBFVEhfQ0xSVF9NQVhfUkVUCTB4MDAwMDAwMGYKKyNkZWZpbmUgRVRIX0NMUlRfQ09MX1dJTgkweDAwMDAzZjAwCisKKy8qIEV0aGVybmV0IE1BWEYgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIX01BWEYJCTB4MDAwMGZmZmYKKworLyogRXRoZXJuZXQgdGVzdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVRIX1RFU1RfUkVHCQkoMSA8PCAyKQorI2RlZmluZSBFVEhfTUNQX0RJVgkJMHgwMDAwMDBmZgorCisvKiBNSUkgcmVnaXN0ZXJzICovCisjZGVmaW5lIEVUSF9NSUlfQ0ZHX1JTVkQJMHgwMDAwMDAwYworI2RlZmluZSBFVEhfTUlJX0NNRF9SRAkJKDEgPDwgMCkKKyNkZWZpbmUgRVRIX01JSV9DTURfU0NOCQkoMSA8PCAxKQorI2RlZmluZSBFVEhfTUlJX1JFR19BRERSCTB4MDAwMDAwMWYKKyNkZWZpbmUgRVRIX01JSV9QSFlfQUREUgkweDAwMDAxZjAwCisjZGVmaW5lIEVUSF9NSUlfV1REX0RBVEEJMHgwMDAwZmZmZgorI2RlZmluZSBFVEhfTUlJX1JERF9EQVRBCTB4MDAwMGZmZmYKKyNkZWZpbmUgRVRIX01JSV9JTkRfQlNZCQkoMSA8PCAwKQorI2RlZmluZSBFVEhfTUlJX0lORF9TQ04JCSgxIDw8IDEpCisjZGVmaW5lIEVUSF9NSUlfSU5EX05WCQkoMSA8PCAyKQorCisvKgorICogVmFsdWVzIGZvciB0aGUgREVWQ1MgZmllbGQgb2YgdGhlIEV0aGVybmV0IERNQSBSeCBhbmQgVHggZGVzY3JpcHRvcnMuCisgKi8KKworI2RlZmluZSBFVEhfUlhfRkQJCSgxIDw8IDApCisjZGVmaW5lIEVUSF9SWF9MRAkJKDEgPDwgMSkKKyNkZWZpbmUgRVRIX1JYX1JPSwkJKDEgPDwgMikKKyNkZWZpbmUgRVRIX1JYX0ZNCQkoMSA8PCAzKQorI2RlZmluZSBFVEhfUlhfTVAJCSgxIDw8IDQpCisjZGVmaW5lIEVUSF9SWF9CUAkJKDEgPDwgNSkKKyNkZWZpbmUgRVRIX1JYX1ZMVAkJKDEgPDwgNikKKyNkZWZpbmUgRVRIX1JYX0NGCQkoMSA8PCA3KQorI2RlZmluZSBFVEhfUlhfT1ZSCQkoMSA8PCA4KQorI2RlZmluZSBFVEhfUlhfQ1JDCQkoMSA8PCA5KQorI2RlZmluZSBFVEhfUlhfQ1YJCSgxIDw8IDEwKQorI2RlZmluZSBFVEhfUlhfREIJCSgxIDw8IDExKQorI2RlZmluZSBFVEhfUlhfTEUJCSgxIDw8IDEyKQorI2RlZmluZSBFVEhfUlhfTE9SCQkoMSA8PCAxMykKKyNkZWZpbmUgRVRIX1JYX0NFUwkJKDEgPDwgMTQpCisjZGVmaW5lIEVUSF9SWF9MRU5fQklUCQkxNgorI2RlZmluZSBFVEhfUlhfTEVOCQkweGZmZmYwMDAwCisKKyNkZWZpbmUgRVRIX1RYX0ZECQkoMSA8PCAwKQorI2RlZmluZSBFVEhfVFhfTEQJCSgxIDw8IDEpCisjZGVmaW5lIEVUSF9UWF9PRU4JCSgxIDw8IDIpCisjZGVmaW5lIEVUSF9UWF9QRU4JCSgxIDw8IDMpCisjZGVmaW5lIEVUSF9UWF9DRU4JCSgxIDw8IDQpCisjZGVmaW5lIEVUSF9UWF9IRU4JCSgxIDw8IDUpCisjZGVmaW5lIEVUSF9UWF9UT0sJCSgxIDw8IDYpCisjZGVmaW5lIEVUSF9UWF9NUAkJKDEgPDwgNykKKyNkZWZpbmUgRVRIX1RYX0JQCQkoMSA8PCA4KQorI2RlZmluZSBFVEhfVFhfVU5ECQkoMSA8PCA5KQorI2RlZmluZSBFVEhfVFhfT0YJCSgxIDw8IDEwKQorI2RlZmluZSBFVEhfVFhfRUQJCSgxIDw8IDExKQorI2RlZmluZSBFVEhfVFhfRUMJCSgxIDw8IDEyKQorI2RlZmluZSBFVEhfVFhfTEMJCSgxIDw8IDEzKQorI2RlZmluZSBFVEhfVFhfVEQJCSgxIDw8IDE0KQorI2RlZmluZSBFVEhfVFhfQ1JDCQkoMSA8PCAxNSkKKyNkZWZpbmUgRVRIX1RYX0xFCQkoMSA8PCAxNikKKyNkZWZpbmUgRVRIX1RYX0NDCQkweDAwMUUwMDAwCisKKyNlbmRpZiAgLyogX19BU01fUkMzMjQzNF9FVEhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvZ3Bpby5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NDZmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC9ncGlvLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMiBJbnRlZ3JhdGVkIERldmljZSBUZWNobm9sb2d5LCBJbmMuCisgKglBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEdQSU8gcmVnaXN0ZXIgZGVmaW5pdGlvbi4KKyAqCisgKiBBdXRob3IgOiByeWFuLmhvbG1RVmlzdEBpZHQuY29tCisgKiBEYXRlICAgOiAyMDAxMTAwNQorICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIFJ5YW4gSG9sbSA8cnlhbi5ob2xtUVZpc3RAaWR0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX1JDMzI0MzRfR1BJT19IXworI2RlZmluZSBfUkMzMjQzNF9HUElPX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcmI1MzJfZ3Bpb19yZWcgeworCXUzMiAgIGdwaW9mdW5jOyAgIC8qIEdQSU8gRnVuY3Rpb24gUmVnaXN0ZXIKKwkJCSAgICogZ3Bpb2Z1bmNbeF09PTAgYml0ID0gZ3BpbworCQkJICAgKiBmdW5jW3hdPT0xICBiaXQgPSBhbHRmdW5jCisJCQkgICAqLworCXUzMiAgIGdwaW9jZmc7CSAgLyogR1BJTyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisJCQkgICAqIGdwaW9jZmdbeF09PTAgYml0ID0gaW5wdXQKKwkJCSAgICogZ3Bpb2NmZ1t4XT09MSBiaXQgPSBvdXRwdXQKKwkJCSAgICovCisJdTMyICAgZ3Bpb2Q7CSAgLyogR1BJTyBEYXRhIFJlZ2lzdGVyCisJCQkgICAqIGdwaW9kW3hdIHJlYWQvd3JpdGUgZ3BpbyBwaW5YIHN0YXR1cworCQkJICAgKi8KKwl1MzIgICBncGlvaWxldmVsOyAvKiBHUElPIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKwkJCSAgICogaW50ZXJydXB0IGxldmVsIChzZWUgZ3Bpb2lzdGF0KQorCQkJICAgKi8KKwl1MzIgICBncGlvaXN0YXQ7ICAvKiBHcGlvIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKwkJCSAgICogaXN0YXRbeF0gPSAoZ3Bpb2RbeF0gPT0gbGV2ZWxbeF0pCisJCQkgICAqIGNsZWFyZWQgaW4gSVNSIChTVElDS1kgYml0cykKKwkJCSAgICovCisJdTMyICAgZ3Bpb25taWVuOyAgLyogR1BJTyBOb24tbWFza2FibGUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworfTsKKworLyogVUFSVCBHUElPIHNpZ25hbHMgKi8KKyNkZWZpbmUgUkMzMjQzNF9VQVJUMF9TT1VUCSgxIDw8IDApCisjZGVmaW5lIFJDMzI0MzRfVUFSVDBfU0lOCSgxIDw8IDEpCisjZGVmaW5lIFJDMzI0MzRfVUFSVDBfUlRTCSgxIDw8IDIpCisjZGVmaW5lIFJDMzI0MzRfVUFSVDBfQ1RTCSgxIDw8IDMpCisKKy8qIE0gJiBQIGJ1cyBHUElPIHNpZ25hbHMgKi8KKyNkZWZpbmUgUkMzMjQzNF9NUF9CSVRfMjIJKDEgPDwgNCkKKyNkZWZpbmUgUkMzMjQzNF9NUF9CSVRfMjMJKDEgPDwgNSkKKyNkZWZpbmUgUkMzMjQzNF9NUF9CSVRfMjQJKDEgPDwgNikKKyNkZWZpbmUgUkMzMjQzNF9NUF9CSVRfMjUJKDEgPDwgNykKKworLyogQ1BVIEdQSU8gc2lnbmFscyAqLworI2RlZmluZSBSQzMyNDM0X0NQVV9HUElPCSgxIDw8IDgpCisKKy8qIFJlc2VydmVkIEdQSU8gc2lnbmFscyAqLworI2RlZmluZSBSQzMyNDM0X0FGX1NQQVJFXzYJKDEgPDwgOSkKKyNkZWZpbmUgUkMzMjQzNF9BRl9TUEFSRV80CSgxIDw8IDEwKQorI2RlZmluZSBSQzMyNDM0X0FGX1NQQVJFXzMJKDEgPDwgMTEpCisjZGVmaW5lIFJDMzI0MzRfQUZfU1BBUkVfMgkoMSA8PCAxMikKKworLyogUENJIG1lc3NhZ2luZyB1bml0ICovCisjZGVmaW5lIFJDMzI0MzRfUENJX01TVV9HUElPCSgxIDw8IDEzKQorCisKK2V4dGVybiB2b2lkIHNldF80MzRfcmVnKHVuc2lnbmVkIHJlZ19vZmZzLCB1bnNpZ25lZCBiaXQsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgdmFsKTsKK2V4dGVybiB1bnNpZ25lZCBnZXRfNDM0X3JlZyh1bnNpZ25lZCByZWdfb2Zmcyk7CitleHRlcm4gdm9pZCBzZXRfbGF0Y2hfdTUodW5zaWduZWQgY2hhciBvcl9tYXNrLCB1bnNpZ25lZCBjaGFyIG5hbmRfbWFzayk7CitleHRlcm4gdW5zaWduZWQgY2hhciBnZXRfbGF0Y2hfdTUodm9pZCk7CisKK2V4dGVybiBpbnQgcmI1MzJfZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7CitleHRlcm4gdm9pZCByYjUzMl9ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCByYjUzMl9ncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKK2V4dGVybiBpbnQgcmI1MzJfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7CitleHRlcm4gdm9pZCByYjUzMl9ncGlvX3NldF9pbnRfbGV2ZWwodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKK2V4dGVybiBpbnQgcmI1MzJfZ3Bpb19nZXRfaW50X2xldmVsKHVuc2lnbmVkIGdwaW8pOworZXh0ZXJuIHZvaWQgcmI1MzJfZ3Bpb19zZXRfaW50X3N0YXR1cyh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCByYjUzMl9ncGlvX2dldF9pbnRfc3RhdHVzKHVuc2lnbmVkIGdwaW8pOworCisKKy8qIFdyYXBwZXJzIGZvciB0aGUgYXJjaC1uZXV0cmFsIEdQSU8gQVBJICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKK3sKKwkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIHJiNTMyX2dwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXJldHVybiByYjUzMl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiByYjUzMl9ncGlvX2dldF92YWx1ZShncGlvKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlyYjUzMl9ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIGdwaW87Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKK3sKKwlyZXR1cm4gaXJxOworfQorCisvKiBGb3IgY2Fuc2xlZXAgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNlbmRpZiAvKiBfUkMzMjQzNF9HUElPX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC9pbnRlZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvaW50ZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTY1YmMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvaW50ZWcuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogIERlZmluaXRpb25zIGZvciB0aGUgV2F0Y2hkb2cgcmVnaXN0ZXJzCisgKgorICogIENvcHlyaWdodCAyMDAyIFJ5YW4gSG9sbSA8cnlhbi5ob2xtUVZpc3RAaWR0LmNvbT4KKyAqICBDb3B5cmlnaHQgMjAwOCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfX1JDMzI0MzRfSU5URUdfSF9fCisjZGVmaW5lIF9fUkMzMjQzNF9JTlRFR19IX18KKworI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvcmIuaD4KKworI2RlZmluZSBJTlRFRzBfQkFTRV9BRERSCTB4MTgwMzAwMzAKKworc3RydWN0IGludGVnIHsKKwl1MzIgZXJyY3M7CQkJLyogc3RpY2t5IHVzZSBFUlJDU18gKi8KKwl1MzIgd3Rjb3VudDsJCQkvKiBXYXRjaGRvZyB0aW1lciBjb3VudCByZWcuICovCisJdTMyIHd0Y29tcGFyZTsJCQkvKiBXYXRjaGRvZyB0aW1lciB0aW1lb3V0IHZhbHVlLiAqLworCXUzMiB3dGM7CQkJLyogV2F0Y2hkb2cgdGltZXIgY29udHJvbC4gdXNlIFdUQ18gKi8KK307CisKKy8qIEVycm9yIGNvdW50ZXJzICovCisjZGVmaW5lIFJDMzI0MzRfRVJSX1dUTwkJMAorI2RlZmluZSBSQzMyNDM0X0VSUl9XTkUJCTEKKyNkZWZpbmUgUkMzMjQzNF9FUlJfVUNXCQkyCisjZGVmaW5lIFJDMzI0MzRfRVJSX1VDUgkJMworI2RlZmluZSBSQzMyNDM0X0VSUl9VUFcJCTQKKyNkZWZpbmUgUkMzMjQzNF9FUlJfVVBSCQk1CisjZGVmaW5lIFJDMzI0MzRfRVJSX1VEVwkJNgorI2RlZmluZSBSQzMyNDM0X0VSUl9VRFIJCTcKKyNkZWZpbmUgUkMzMjQzNF9FUlJfU0FFCQk4CisjZGVmaW5lIFJDMzI0MzRfRVJSX1dSRQkJOQorCisvKiBXYXRjaGRvZyBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgUkMzMjQzNF9XVENfRU4JCTAKKyNkZWZpbmUgUkMzMjQzNF9XVENfVE8JCTEKKworI2VuZGlmCS8qIF9fUkMzMjQzNF9JTlRFR19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L2lycS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5ZTQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L2lycS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9SQzMyNDM0X0lSUV9ICisjZGVmaW5lIF9fQVNNX1JDMzI0MzRfSVJRX0gKKworI2RlZmluZSBOUl9JUlFTCTI1NgorCisjaW5jbHVkZSA8YXNtL21hY2gtZ2VuZXJpYy9pcnEuaD4KKworI2VuZGlmICAvKiBfX0FTTV9SQzMyNDM0X0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC9wY2kuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDYzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC9wY2kuaApAQCAtMCwwICsxLDQ4MSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNCBJRFQgSW5jLiAocmlzY2hlbHBAaWR0LmNvbSkKKyAqCisgKiBJbml0aWFsIFJlbGVhc2UKKyAqLworCisjaWZuZGVmIF9BU01fUkMzMjQzNF9QQ0lfSF8KKyNkZWZpbmUgX0FTTV9SQzMyNDM0X1BDSV9IXworCisjZGVmaW5lIGVwbGRfbWFzayAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweEI5MDAwMDBkKQorCisjZGVmaW5lIFBDSTBfQkFTRV9BRERSCQkweDE4MDgwMDAwCisjZGVmaW5lIFBDSV9MQkFfQ09VTlQJCTQKKworc3RydWN0IHBjaV9tYXAgeworCXUzMiBhZGRyZXNzOwkJLyogQWRkcmVzcy4gKi8KKwl1MzIgY29udHJvbDsJCS8qIENvbnRyb2wuICovCisJdTMyIG1hcHBpbmc7CQkvKiBtYXBwaW5nLiAqLworfTsKKworc3RydWN0IHBjaV9yZWcgeworCXUzMiBwY2ljOworCXUzMiBwY2lzOworCXUzMiBwY2lzbTsKKwl1MzIgcGNpY2ZnYTsKKwl1MzIgcGNpY2ZnZDsKKwl2b2xhdGlsZSBzdHJ1Y3QgcGNpX21hcCBwY2lsYmFbUENJX0xCQV9DT1VOVF07CisJdTMyIHBjaWRhYzsKKwl1MzIgcGNpZGFzOworCXUzMiBwY2lkYXNtOworCXUzMiBwY2lkYWQ7CisJdTMyIHBjaWRtYThjOworCXUzMiBwY2lkbWE5YzsKKwl1MzIgcGNpdGM7Cit9OworCisjZGVmaW5lIFBDSV9NU1VfQ09VTlQJCTIKKworc3RydWN0IHBjaV9tc3UgeworCXUzMiBwY2lpbVtQQ0lfTVNVX0NPVU5UXTsKKwl1MzIgcGNpb21bUENJX01TVV9DT1VOVF07CisJdTMyIHBjaWlkOworCXUzMiBwY2lpaWM7CisJdTMyIHBjaWlpbTsKKwl1MzIgcGNpaW9kOworCXUzMiBwY2lpb2ljOworCXUzMiBwY2lpb2ltOworfTsKKworLyoKKyAqIFBDSSBDb250cm9sIFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBQQ0lfQ1RMX0VOCQkoMSA8PCAwKQorI2RlZmluZSBQQ0lfQ1RMX1ROUgkJKDEgPDwgMSkKKyNkZWZpbmUgUENJX0NUTF9TQ0UJCSgxIDw8IDIpCisjZGVmaW5lIFBDSV9DVExfSUVOCQkoMSA8PCAzKQorI2RlZmluZSBQQ0lfQ1RMX0FBQQkJKDEgPDwgNCkKKyNkZWZpbmUgUENJX0NUTF9FQVAJCSgxIDw8IDUpCisjZGVmaW5lIFBDSV9DVExfUENJTV9CSVQJNgorI2RlZmluZSBQQ0lfQ1RMX1BDSU0JCTB4MDAwMDAxYzAKKworI2RlZmluZSBQQ0lfQ1RMX1BDSU1fRElTCTAKKyNkZWZpbmUgUENJX0NUTF9QQ0lNX1ROUgkxIC8qIFNhdGVsbGl0ZSAtIHRhcmdldCBub3QgcmVhZHkgKi8KKyNkZWZpbmUgUENJX0NUTF9QQ0lNX1NVUwkyIC8qIFNhdGVsbGl0ZSAtIHN1c3BlbmRlZCBDUFUuICovCisjZGVmaW5lIFBDSV9DVExfUENJTV9FWFQJMyAvKiBIb3N0IC0gZXh0ZXJuYWwgYXJiaXRlci4gKi8KKyNkZWZpbmUgUENJX0NUTCBQQ0lNX1BSSU8JNCAvKiBIb3N0IC0gZml4ZWQgcHJpb3JpdHkgYXJiLiAqLworI2RlZmluZSBQQ0lfQ1RMX1BDSU1fUlIJCTUgLyogSG9zdCAtIHJvdW5kIHJvYmluIHByaW9yaXR5LiAqLworI2RlZmluZSBQQ0lfQ1RMX1BDSU1fUlNWRDYJNgorI2RlZmluZSBQQ0lfQ1RMX1BDSU1fUlNWRDcJNworCisjZGVmaW5lIFBDSV9DVExfSUdNCQkoMSA8PCA5KQorCisvKgorICogUENJIFN0YXR1cyBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgUENJX1NUQVRfRUVECQkoMSA8PCAwKQorI2RlZmluZSBQQ0lfU1RBVF9XUgkJKDEgPDwgMSkKKyNkZWZpbmUgUENJX1NUQVRfTk1JCQkoMSA8PCAyKQorI2RlZmluZSBQQ0lfU1RBVF9JSQkJKDEgPDwgMykKKyNkZWZpbmUgUENJX1NUQVRfQ1dFCQkoMSA8PCA0KQorI2RlZmluZSBQQ0lfU1RBVF9DUkUJCSgxIDw8IDUpCisjZGVmaW5lIFBDSV9TVEFUX01EUEUJCSgxIDw8IDYpCisjZGVmaW5lIFBDSV9TVEFUX1NUQQkJKDEgPDwgNykKKyNkZWZpbmUgUENJX1NUQVRfUlRBCQkoMSA8PCA4KQorI2RlZmluZSBQQ0lfU1RBVF9STUEJCSgxIDw8IDkpCisjZGVmaW5lIFBDSV9TVEFUX1NTRQkJKDEgPDwgMTApCisjZGVmaW5lIFBDSV9TVEFUX09TRQkJKDEgPDwgMTEpCisjZGVmaW5lIFBDSV9TVEFUX1BFCQkoMSA8PCAxMikKKyNkZWZpbmUgUENJX1NUQVRfVEFFCQkoMSA8PCAxMykKKyNkZWZpbmUgUENJX1NUQVRfUkxFCQkoMSA8PCAxNCkKKyNkZWZpbmUgUENJX1NUQVRfQk1FCQkoMSA8PCAxNSkKKyNkZWZpbmUgUENJX1NUQVRfUFJECQkoMSA8PCAxNikKKyNkZWZpbmUgUENJX1NUQVRfUklQCQkoMSA8PCAxNykKKworLyoKKyAqIFBDSSBTdGF0dXMgTWFzayBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgUENJX1NUQVRNX0VFRAkJUENJX1NUQVRfRUVECisjZGVmaW5lIFBDSV9TVEFUTV9XUgkJUENJX1NUQVRfV1IKKyNkZWZpbmUgUENJX1NUQVRNX05NSQkJUENJX1NUQVRfTk1JCisjZGVmaW5lIFBDSV9TVEFUTV9JSQkJUENJX1NUQVRfSUkKKyNkZWZpbmUgUENJX1NUQVRNX0NXRQkJUENJX1NUQVRfQ1dFCisjZGVmaW5lIFBDSV9TVEFUTV9DUkUJCVBDSV9TVEFUX0NSRQorI2RlZmluZSBQQ0lfU1RBVE1fTURQRQkJUENJX1NUQVRfTURQRQorI2RlZmluZSBQQ0lfU1RBVE1fU1RBCQlQQ0lfU1RBVF9TVEEKKyNkZWZpbmUgUENJX1NUQVRNX1JUQQkJUENJX1NUQVRfUlRBCisjZGVmaW5lIFBDSV9TVEFUTV9STUEJCVBDSV9TVEFUX1JNQQorI2RlZmluZSBQQ0lfU1RBVE1fU1NFCQlQQ0lfU1RBVF9TU0UKKyNkZWZpbmUgUENJX1NUQVRNX09TRQkJUENJX1NUQVRfT1NFCisjZGVmaW5lIFBDSV9TVEFUTV9QRQkJUENJX1NUQVRfUEUKKyNkZWZpbmUgUENJX1NUQVRNX1RBRQkJUENJX1NUQVRfVEFFCisjZGVmaW5lIFBDSV9TVEFUTV9STEUJCVBDSV9TVEFUX1JMRQorI2RlZmluZSBQQ0lfU1RBVE1fQk1FCQlQQ0lfU1RBVF9CTUUKKyNkZWZpbmUgUENJX1NUQVRNX1BSRAkJUENJX1NUQVRfUFJECisjZGVmaW5lIFBDSV9TVEFUTV9SSVAJCVBDSV9TVEFUX1JJUAorCisvKgorICogUENJIENvbmZpZ3VyYXRpb24gQWRkcmVzcyBSZWdpc3RlcgorICovCisjZGVmaW5lIFBDSV9DRkdBX1JFR19CSVQJMgorI2RlZmluZSBQQ0lfQ0ZHQV9SRUcJCTB4MDAwMDAwZmMKKyNkZWZpbmUJIFBDSV9DRkdBX1JFR19JRAkoMHgwMCA+PiAyKQkvKiB1c2UgUENGR0lEICovCisjZGVmaW5lCSBQQ0lfQ0ZHQV9SRUdfMDQJKDB4MDQgPj4gMikJLyogdXNlIFBDRkcwNF8gKi8KKyNkZWZpbmUJIFBDSV9DRkdBX1JFR18wOAkoMHgwOCA+PiAyKQkvKiB1c2UgUENGRzA4XyAqLworI2RlZmluZQkgUENJX0NGR0FfUkVHXzBDCSgweDBDID4+IDIpCS8qIHVzZSBQQ0ZHMENfICovCisjZGVmaW5lCSBQQ0lfQ0ZHQV9SRUdfUEJBMAkoMHgxMCA+PiAyKQkvKiB1c2UgUENJUEJBXyAqLworI2RlZmluZQkgUENJX0NGR0FfUkVHX1BCQTEJKDB4MTQgPj4gMikJLyogdXNlIFBDSVBCQV8gKi8KKyNkZWZpbmUJIFBDSV9DRkdBX1JFR19QQkEyCSgweDE4ID4+IDIpCS8qIHVzZSBQQ0lQQkFfICovCisjZGVmaW5lCSBQQ0lfQ0ZHQV9SRUdfUEJBMwkoMHgxYyA+PiAyKQkvKiB1c2UgUENJUEJBXyAqLworI2RlZmluZQkgUENJX0NGR0FfUkVHX1NVQlNZUwkoMHgyYyA+PiAyKQkvKiB1c2UgUENGR1NTXyAqLworI2RlZmluZSAgUENJX0NGR0FfUkVHXzNDCSgweDNDID4+IDIpCS8qIHVzZSBQQ0ZHM0NfICovCisjZGVmaW5lCSBQQ0lfQ0ZHQV9SRUdfUEJCQTBDCSgweDQ0ID4+IDIpCS8qIHVzZSBQQ0lQQkFDXyAqLworI2RlZmluZSAgUENJX0NGR0FfUkVHX1BCQTBNCSgweDQ4ID4+IDIpCisjZGVmaW5lCSBQQ0lfQ0ZHQV9SRUdfUEJBMUMJKDB4NGMgPj4gMikJLyogdXNlIFBDSVBCQUNfICovCisjZGVmaW5lICBQQ0lfQ0ZHQV9SRUdfUEJBMU0JKDB4NTAgPj4gMikKKyNkZWZpbmUJIFBDSV9DRkdBX1JFR19QQkEyQwkoMHg1NCA+PiAyKQkvKiB1c2UgUENJUEJBQ18gKi8KKyNkZWZpbmUJIFBDSV9DRkdBX1JFR19QQkEyTQkoMHg1OCA+PiAyKQorI2RlZmluZQkgUENJX0NGR0FfUkVHX1BCQTNDCSgweDVjID4+IDIpCS8qIHVzZSBQQ0lQQkFDXyAqLworI2RlZmluZQkgUENJX0NGR0FfUkVHX1BCQTNNCSgweDYwID4+IDIpCisjZGVmaW5lCSBQQ0lfQ0ZHQV9SRUdfUE1HVAkoMHg2NCA+PiAyKQorI2RlZmluZSBQQ0lfQ0ZHQV9GVU5DX0JJVAk4CisjZGVmaW5lIFBDSV9DRkdBX0ZVTkMJCTB4MDAwMDA3MDAKKyNkZWZpbmUgUENJX0NGR0FfREVWX0JJVAkxMQorI2RlZmluZQlQQ0lfQ0ZHQV9ERVYJCTB4MDAwMGY4MDAKKyNkZWZpbmUJUENJX0NGR0FfREVWX0lOVEVSTgkwCisjZGVmaW5lCVBDSV9DRkdBX0JVU19CSVQJMTYKKyNkZWZpbmUgUENJIENGR0FfQlVTCQkweDAwZmYwMDAwCisjZGVmaW5lIFBDSV9DRkdBX0JVU19UWVBFMAkwCisjZGVmaW5lIFBDSV9DRkdBX0VOCQkoMSA8PCAzMSkKKworLyogUENJIENGRzA0IGNvbW1hbmRzICovCisjZGVmaW5lIFBDSV9DRkcwNF9DTURfSU9fRU5BCSgxIDw8IDApCisjZGVmaW5lIFBDSV9DRkcwNF9DTURfTUVNX0VOQQkoMSA8PCAxKQorI2RlZmluZSBQQ0lfQ0ZHMDRfQ01EX0JNX0VOQQkoMSA8PCAyKQorI2RlZmluZSBQQ0lfQ0ZHMDRfQ01EX01XX0lOVgkoMSA8PCA0KQorI2RlZmluZSBQQ0lfQ0ZHMDRfQ01EX1BBUl9FTkEJKDEgPDwgNikKKyNkZWZpbmUgUENJX0NGRzA0X0NNRF9TRVJfRU5BCSgxIDw8IDgpCisjZGVmaW5lIFBDSV9DRkcwNF9DTURfRkFTVF9FTkEJKDEgPDwgOSkKKworLyogUENJIENGRzA0IHN0YXR1cyBmaWVsZHMgKi8KKyNkZWZpbmUgUENJX0NGRzA0X1NUQVRfQklUCTE2CisjZGVmaW5lIFBDSV9DRkcwNF9TVEFUCQkweGZmZmYwMDAwCisjZGVmaW5lIFBDSV9DRkcwNF9TVEFUXzY2X01IWgkoMSA8PCAyMSkKKyNkZWZpbmUgUENJX0NGRzA0X1NUQVRfRkJCCSgxIDw8IDIzKQorI2RlZmluZSBQQ0lfQ0ZHMDRfU1RBVF9NRFBFCSgxIDw8IDI0KQorI2RlZmluZSBQQ0lfQ0ZHMDRfU1RBVF9EU1QJKDEgPDwgMjUpCisjZGVmaW5lIFBDSV9DRkcwNF9TVEFUX1NUQQkoMSA8PCAyNykKKyNkZWZpbmUgUENJX0NGRzA0X1NUQVRfUlRBCSgxIDw8IDI4KQorI2RlZmluZSBQQ0lfQ0ZHMDRfU1RBVF9STUEJKDEgPDwgMjkpCisjZGVmaW5lIFBDSV9DRkcwNF9TVEFUX1NTRQkoMSA8PCAzMCkKKyNkZWZpbmUgUENJX0NGRzA0X1NUQVRfUEUJKDEgPDwgMzEpCisKKyNkZWZpbmUgUENJX1BCQV9NU0kJCSgxIDw8IDApCisjZGVmaW5lIFBDSV9QQkFfUAkJKDEgPDwgMikKKworLyogUENJIFBCQUMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBDSV9QQkFDX01TSQkJKDEgPDwgMCkKKyNkZWZpbmUgUENJX1BCQUNfUAkJKDEgPDwgMSkKKyNkZWZpbmUgUENJX1BCQUNfU0laRV9CSVQJMgorI2RlZmluZSBQQ0lfUEJBQ19TSVpFCQkweDAwMDAwMDdjCisjZGVmaW5lCVBDSV9QQkFDX1NCCQkoMSA8PCA3KQorI2RlZmluZQlQQ0lfUEJBQ19QUAkJKDEgPDwgOCkKKyNkZWZpbmUgUENJX1BCQUNfTVJfQklUCQk5CisjZGVmaW5lIFBDSV9QQkFDX01SCQkweDAwMDAwNjAwCisjZGVmaW5lCSBQQ0lfUEJBQ19NUl9SRAkJMAorI2RlZmluZQkgUENJX1BCQUNfTVJfUkRfTElORQkxCisjZGVmaW5lICBQQ0lfUEJBQ19NUl9SRF9NVUxUCTIKKyNkZWZpbmUgUENJX1BCQUNfTVJMCQkoMSA8PCAxMSkKKyNkZWZpbmUgUENJX1BCQUNfTVJNCQkoMSA8PCAxMikKKyNkZWZpbmUgUENJX1BCQUNfVFJQCQkoMSA8PCAxMykKKworI2RlZmluZSBQQ0lfQ0ZHNDBfVFJEWV9USU0JMHgwMDAwMDBmZgorI2RlZmluZSBQQ0lfQ0ZHNDBfUkVUX0xJTQkweDAwMDBmZjAwCisKKy8qCisgKiBQQ0kgTG9jYWwgQmFzZSBBZGRyZXNzIFswfDF8MnwzXSBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgUENJX0xCQV9CQUREUl9CSVQJMAorI2RlZmluZSBQQ0lfTEJBX0JBRERSCQkweGZmZmZmZjAwCisKKy8qCisgKiBQQ0kgTG9jYWwgQmFzZSBBZGRyZXNzIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIFBDSV9MQkFDX01TSQkJKDEgPDwgMCkKKyNkZWZpbmUgIFBDSV9MQkFDX01TSV9NRU0JMAorI2RlZmluZSAgUENJX0xCQUNfTVNJX0lPCTEKKyNkZWZpbmUgUENJX0xCQUNfU0laRV9CSVQJMgorI2RlZmluZSBQQ0lfTEJBQ19TSVpFCQkweDAwMDAwMDdjCisjZGVmaW5lIFBDSV9MQkFDX1NCCQkoMSA8PCA3KQorI2RlZmluZSBQQ0lfTEJBQ19SVAkJKDEgPDwgOCkKKyNkZWZpbmUgIFBDSV9MQkFDX1JUX05PX1BSRUYJMAorI2RlZmluZSAgUENJX0xCQUNfUlRfUFJFRgkxCisKKy8qCisgKiBQQ0kgTG9jYWwgQmFzZSBBZGRyZXNzIFswfDF8MnwzXSBNYXBwaW5nIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgUENJX0xCQU1fTUFERFJfQklUCTgKKyNkZWZpbmUgUENJX0xCQU1fTUFERFIJCTB4ZmZmZmZmMDAKKworLyoKKyAqIFBDSSBEZWNvdXBsZWQgQWNjZXNzIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBQQ0lfREFDX0RFTgkJKDEgPDwgMCkKKworLyoKKyAqIFBDSSBEZWNvdXBsZWQgQWNjZXNzIFN0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIFBDSV9EQVNfRAkJKDEgPDwgMCkKKyNkZWZpbmUgUENJX0RBU19CCQkoMSA8PCAxKQorI2RlZmluZSBQQ0lfREFTX0UJCSgxIDw8IDIpCisjZGVmaW5lIFBDSV9EQVNfT0ZFCQkoMSA8PCAzKQorI2RlZmluZSBQQ0lfREFTX09GRgkJKDEgPDwgNCkKKyNkZWZpbmUgUENJX0RBU19JRkUJCSgxIDw8IDUpCisjZGVmaW5lIFBDSV9EQVNfSUZGCQkoMSA8PCA2KQorCisvKgorICogUENJIERNQSBDaGFubmVsIDggQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICovCisjZGVmaW5lIFBDSV9ETUE4Q19NQlNfQklUCTAKKyNkZWZpbmUgUENJX0RNQThDX01CUwkJMHgwMDAwMGZmZiAvKiBNYXhpbXVtIEJ1cnN0IFNpemUuICovCisjZGVmaW5lIFBDSV9ETUE4Q19PVVIJCSgxIDw8IDEyKQorCisvKgorICogUENJIERNQSBDaGFubmVsIDkgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICovCisjZGVmaW5lIFBDSV9ETUE5Q19NQlNfQklUCTAJLyogTWF4aW11bSBCdXJzdCBTaXplLiAqLworI2RlZmluZSBQQ0lfRE1BOUNfTUJTCQkweDAwMDAwZmZmCisKKy8qCisgKiBQQ0kgdG8gTWVtb3J5KERNQSBDaGFubmVsIDgpIEFORCBNZW1vcnkgdG8gUENJIERNQShETUEgQ2hhbm5lbCA5KURlc2NyaXB0b3JzCisgKi8KKworI2RlZmluZSBQQ0lfRE1BRF9QVF9CSVQJCTIyCQkvKiBpbiBERVZDTUQgZmllbGQgKGRlc2NyaXB0b3IpICovCisjZGVmaW5lIFBDSV9ETUFEX1BUCQkweDAwYzAwMDAwCS8qIHByZWZlcnJlZCB0cmFuc2FjdGlvbiBmaWVsZCAqLworLyogVGhlc2UgYXJlIGZvciByZWFkcyAoRE1BIGNoYW5uZWwgOCkgKi8KKyNkZWZpbmUgUENJX0RNQURfREVWQ01EX01SCTAJCS8qIG1lbW9yeSByZWFkICovCisjZGVmaW5lCVBDSV9ETUFEX0RFVkNNRF9NUkwJMQkJLyogbWVtb3J5IHJlYWQgbGluZSAqLworI2RlZmluZQlQQ0lfRE1BRF9ERVZDTURfTVJNCTIJCS8qIG1lbW9yeSByZWFkIG11bHRpcGxlICovCisjZGVmaW5lCVBDSV9ETUFEX0RFVkNNRF9JT1IJMwkJLyogSS9PIHJlYWQgKi8KKy8qIFRoZXNlIGFyZSBmb3Igd3JpdGVzIChETUEgY2hhbm5lbCA5KSAqLworI2RlZmluZSBQQ0lfRE1BRF9ERVZDTURfTVcJMAkJLyogbWVtb3J5IHdyaXRlICovCisjZGVmaW5lCVBDSV9ETUFEX0RFVkNNRF9NV0kJMQkJLyogbWVtb3J5IHdyaXRlIGludmFsaWRhdGUgKi8KKyNkZWZpbmUJUENJX0RNQURfREVWQ01EX0lPVwkzCQkvKiBJL08gd3JpdGUgKi8KKworLyogU3dhcCBieXRlIGZpZWxkIGFwcGxpZXMgdG8gYm90aCBETUEgY2hhbm5lbCA4IGFuZCA5ICovCisjZGVmaW5lCVBDSV9ETUFEX1NCCQkoMSA8PCAyNCkJLyogc3dhcCBieXRlIGZpZWxkICovCisKKworLyoKKyAqIFBDSSBUYXJnZXQgQ29udHJvbCBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgUENJX1RDX1JUSU1FUl9CSVQJMAorI2RlZmluZSBQQ0lfVENfUlRJTUVSCQkweDAwMDAwMGZmCisjZGVmaW5lIFBDSV9UQ19EVElNRVJfQklUCTgKKyNkZWZpbmUgUENJX1RDX0RUSU1FUgkJMHgwMDAwZmYwMAorI2RlZmluZSBQQ0lfVENfUkRSCQkoMSA8PCAxOCkKKyNkZWZpbmUgUENJX1RDX0REVAkJKDEgPDwgMTkpCisKKy8qCisgKiBQQ0kgbWVzc2FnaW5nIHVuaXQgW2FwcGxpZXMgdG8gYm90aCBpbmJvdW5kIGFuZCBvdXRib3VuZCByZWdpc3RlcnMgXQorICovCisjZGVmaW5lIFBDSV9NU1VfTTAJCSgxIDw8IDApCisjZGVmaW5lIFBDSV9NU1VfTTEJCSgxIDw8IDEpCisjZGVmaW5lIFBDSV9NU1VfREIJCSgxIDw8IDIpCisKKyNkZWZpbmUgUENJX01TR19BRERSCSAgICAgCTB4QjgwODgwMTAKKyNkZWZpbmUgUENJMF9BRERSCQkweEI4MDgwMDAwCisjZGVmaW5lIHJjMzI0MzRfcGNpICgoc3RydWN0IHBjaV9yZWcgKikgUENJMF9BRERSKQorI2RlZmluZSByYzMyNDM0X3BjaV9tc2cgKChzdHJ1Y3QgcGNpX21zdSAqKSBQQ0lfTVNHX0FERFIpCisKKyNkZWZpbmUgUENJTV9TSEZUCQkweDYKKyNkZWZpbmUgUENJTV9CSVRfTEVOCQkweDcKKyNkZWZpbmUgUENJTV9IX0VBCQkweDMKKyNkZWZpbmUgUENJTV9IX0lBX0ZJWAkJMHg0CisjZGVmaW5lIFBDSU1fSF9JQV9SUgkJMHg1CisjaWYgMAorI2RlZmluZSBQQ0lfQUREUl9TVEFSVAkJMHgxMzAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgUENJX0FERFJfU1RBUlQJCTB4NTAwMDAwMDAKKworI2RlZmluZSBDUFVUT1BDSV9NRU1fV0lOCTB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVVE9QQ0lfSU9fV0lOCQkweDAwMTAwMDAwCisjZGVmaW5lIFBDSUxCQV9TSVpFX1NIRlQJMgorI2RlZmluZSBQQ0lMQkFfU0laRV9NQVNLCTB4MUYKKyNkZWZpbmUgU0laRV8yNTZNQgkJMHgxQworI2RlZmluZSBTSVpFXzEyOE1CCQkweDFCCisjZGVmaW5lIFNJWkVfNjRNQiAgICAgICAgICAgICAgIDB4MUEKKyNkZWZpbmUgU0laRV8zMk1CCQkweDE5CisjZGVmaW5lIFNJWkVfMTZNQiAgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgU0laRV80TUIJCTB4MTYKKyNkZWZpbmUgU0laRV8yTUIJCTB4MTUKKyNkZWZpbmUgU0laRV8xTUIJCTB4MTQKKyNkZWZpbmUgS09SSU5BX0NPTkZJRzBfQUREUgkweDgwMDAwMDAwCisjZGVmaW5lIEtPUklOQV9DT05GSUcxX0FERFIJMHg4MDAwMDAwNAorI2RlZmluZSBLT1JJTkFfQ09ORklHMl9BRERSCTB4ODAwMDAwMDgKKyNkZWZpbmUgS09SSU5BX0NPTkZJRzNfQUREUgkweDgwMDAwMDBDCisjZGVmaW5lIEtPUklOQV9DT05GSUc0X0FERFIJMHg4MDAwMDAxMAorI2RlZmluZSBLT1JJTkFfQ09ORklHNV9BRERSCTB4ODAwMDAwMTQKKyNkZWZpbmUgS09SSU5BX0NPTkZJRzZfQUREUgkweDgwMDAwMDE4CisjZGVmaW5lIEtPUklOQV9DT05GSUc3X0FERFIJMHg4MDAwMDAxQworI2RlZmluZSBLT1JJTkFfQ09ORklHOF9BRERSCTB4ODAwMDAwMjAKKyNkZWZpbmUgS09SSU5BX0NPTkZJRzlfQUREUgkweDgwMDAwMDI0CisjZGVmaW5lIEtPUklOQV9DT05GSUcxMF9BRERSCTB4ODAwMDAwMjgKKyNkZWZpbmUgS09SSU5BX0NPTkZJRzExX0FERFIJMHg4MDAwMDAyQworI2RlZmluZSBLT1JJTkFfQ09ORklHMTJfQUREUgkweDgwMDAwMDMwCisjZGVmaW5lIEtPUklOQV9DT05GSUcxM19BRERSCTB4ODAwMDAwMzQKKyNkZWZpbmUgS09SSU5BX0NPTkZJRzE0X0FERFIJMHg4MDAwMDAzOAorI2RlZmluZSBLT1JJTkFfQ09ORklHMTVfQUREUgkweDgwMDAwMDNDCisjZGVmaW5lIEtPUklOQV9DT05GSUcxNl9BRERSCTB4ODAwMDAwNDAKKyNkZWZpbmUgS09SSU5BX0NPTkZJRzE3X0FERFIJMHg4MDAwMDA0NAorI2RlZmluZSBLT1JJTkFfQ09ORklHMThfQUREUgkweDgwMDAwMDQ4CisjZGVmaW5lIEtPUklOQV9DT05GSUcxOV9BRERSCTB4ODAwMDAwNEMKKyNkZWZpbmUgS09SSU5BX0NPTkZJRzIwX0FERFIJMHg4MDAwMDA1MAorI2RlZmluZSBLT1JJTkFfQ09ORklHMjFfQUREUgkweDgwMDAwMDU0CisjZGVmaW5lIEtPUklOQV9DT05GSUcyMl9BRERSCTB4ODAwMDAwNTgKKyNkZWZpbmUgS09SSU5BX0NPTkZJRzIzX0FERFIJMHg4MDAwMDA1QworI2RlZmluZSBLT1JJTkFfQ09ORklHMjRfQUREUgkweDgwMDAwMDYwCisjZGVmaW5lIEtPUklOQV9DT05GSUcyNV9BRERSCTB4ODAwMDAwNjQKKyNkZWZpbmUgS09SSU5BX0NNRCAJCShQQ0lfQ0ZHMDRfQ01EX0lPX0VOQSB8IFwKKwkJCQkgUENJX0NGRzA0X0NNRF9NRU1fRU5BIHwgXAorCQkJCSBQQ0lfQ0ZHMDRfQ01EX0JNX0VOQSB8IFwKKwkJCQkgUENJX0NGRzA0X0NNRF9NV19JTlYgfCBcCisJCQkJIFBDSV9DRkcwNF9DTURfUEFSX0VOQSB8IFwKKwkJCQkgUENJX0NGRzA0X0NNRF9TRVJfRU5BKQorCisjZGVmaW5lIEtPUklOQV9TVEFUCQkoUENJX0NGRzA0X1NUQVRfTURQRSB8IFwKKwkJCQkgUENJX0NGRzA0X1NUQVRfU1RBIHwgXAorCQkJCSBQQ0lfQ0ZHMDRfU1RBVF9SVEEgfCBcCisJCQkJIFBDSV9DRkcwNF9TVEFUX1JNQSB8IFwKKwkJCQkgUENJX0NGRzA0X1NUQVRfU1NFIHwgXAorCQkJCSBQQ0lfQ0ZHMDRfU1RBVF9QRSkKKworI2RlZmluZSBLT1JJTkFfQ05GRzEJCSgoS09SSU5BX1NUQVQ8PDE2KXxLT1JJTkFfQ01EKQorCisjZGVmaW5lIEtPUklOQV9SRVZJRAkJMAorI2RlZmluZSBLT1JJTkFfQ0xBU1NfQ09ERQkwCisjZGVmaW5lIEtPUklOQV9DTkZHMgkJKChLT1JJTkFfQ0xBU1NfQ09ERTw8OCkgfCBcCisJCQkJICBLT1JJTkFfUkVWSUQpCisKKyNkZWZpbmUgS09SSU5BX0NBQ0hFX0xJTkVfU0laRQk0CisjZGVmaW5lIEtPUklOQV9NQVNURVJfTEFUCTB4M2MKKyNkZWZpbmUgS09SSU5BX0hFQURFUl9UWVBFCTAKKyNkZWZpbmUgS09SSU5BX0JJU1QJCTAKKworI2RlZmluZSBLT1JJTkFfQ05GRzMgKChLT1JJTkFfQklTVCA8PCAyNCkgfCBcCisJCSAgICAgIChLT1JJTkFfSEVBREVSX1RZUEU8PDE2KSB8IFwKKwkJICAgICAgKEtPUklOQV9NQVNURVJfTEFUPDw4KSB8IFwKKwkJICAgICAgS09SSU5BX0NBQ0hFX0xJTkVfU0laRSkKKworI2RlZmluZSBLT1JJTkFfQkFSMAkweDAwMDAwMDA4CS8qIDEyOCBNQiBNZW1vcnkgKi8KKyNkZWZpbmUgS09SSU5BX0JBUjEJMHgxODgwMDAwMQkvKiAxIE1CIElPICovCisjZGVmaW5lIEtPUklOQV9CQVIyCTB4MTgwMDAwMDEJLyogMiBNQiBJTyB3aW5kb3cgZm9yIEtvcmluYQorCQkJCQkgICBpbnRlcm5hbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgS09SSU5BX0JBUjMJMHg0ODAwMDAwOAkvKiBTcGFyZSAxMjggTUIgTWVtb3J5ICovCisKKyNkZWZpbmUgS09SSU5BX0NORkc0CUtPUklOQV9CQVIwCisjZGVmaW5lIEtPUklOQV9DTkZHNSAgICBLT1JJTkFfQkFSMQorI2RlZmluZSBLT1JJTkFfQ05GRzYgCUtPUklOQV9CQVIyCisjZGVmaW5lIEtPUklOQV9DTkZHNwlLT1JJTkFfQkFSMworCisjZGVmaW5lIEtPUklOQV9TVUJTWVNfVkVORE9SX0lEIDB4MDExZAorI2RlZmluZSBLT1JJTkFfU1VCU1lTVEVNX0lECTB4MDIxNAorI2RlZmluZSBLT1JJTkFfQ05GRzgJCTAKKyNkZWZpbmUgS09SSU5BX0NORkc5CQkwCisjZGVmaW5lIEtPUklOQV9DTkZHMTAJCTAKKyNkZWZpbmUgS09SSU5BX0NORkcxMSAJKChLT1JJTkFfU1VCU1lTX1ZFTkRPUl9JRDw8MTYpIHwgXAorCQkJICBLT1JJTkFfU1VCU1lTVEVNX0lEKQorI2RlZmluZSBLT1JJTkFfSU5UX0xJTkUJCTEKKyNkZWZpbmUgS09SSU5BX0lOVF9QSU4JCTEKKyNkZWZpbmUgS09SSU5BX01JTl9HTlQJCTgKKyNkZWZpbmUgS09SSU5BX01BWF9MQVQJCTB4MzgKKyNkZWZpbmUgS09SSU5BX0NORkcxMgkJMAorI2RlZmluZSBLT1JJTkFfQ05GRzEzIAkJMAorI2RlZmluZSBLT1JJTkFfQ05GRzE0CQkwCisjZGVmaW5lIEtPUklOQV9DTkZHMTUJKChLT1JJTkFfTUFYX0xBVDw8MjQpIHwgXAorCQkJIChLT1JJTkFfTUlOX0dOVDw8MTYpIHwgXAorCQkJIChLT1JJTkFfSU5UX1BJTjw8OCkgIHwgXAorCQkJICBLT1JJTkFfSU5UX0xJTkUpCisjZGVmaW5lCUtPUklOQV9SRVRSWV9MSU1JVAkweDgwCisjZGVmaW5lIEtPUklOQV9UUkRZX0xJTUlUCTB4ODAKKyNkZWZpbmUgS09SSU5BX0NORkcxNiAoKEtPUklOQV9SRVRSWV9MSU1JVDw8OCkgfCBcCisJCQlLT1JJTkFfVFJEWV9MSU1JVCkKKyNkZWZpbmUgUENJX1BCQXhDX1IJCTB4MAorI2RlZmluZSBQQ0lfUEJBeENfUkwJCTB4MQorI2RlZmluZSBQQ0lfUEJBeENfUk0JCTB4MgorI2RlZmluZSBTSVpFX1NIRlQJCTIKKworI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgS09SSU5BX1BCQTBDCShQQ0lfUEJBQ19NUkwgfCBQQ0lfUEJBQ19TQiB8IFwKKwkJCSAgKChQQ0lfUEJBeENfUk0gJiAweDMpIDw8IFBDSV9QQkFDX01SX0JJVCkgfCBcCisJCQkgIFBDSV9QQkFDX1BQIHwgXAorCQkJICAoU0laRV8xMjhNQjw8U0laRV9TSEZUKSB8IFwKKwkJCSAgIFBDSV9QQkFDX1ApCisjZWxzZQorI2RlZmluZSBLT1JJTkFfUEJBMEMJKFBDSV9QQkFDX01STCB8IFwKKwkJCSAgKChQQ0lfUEJBeENfUk0gJiAweDMpIDw8IFBDSV9QQkFDX01SX0JJVCkgfCBcCisJCQkgIFBDSV9QQkFDX1BQIHwgXAorCQkJICAoU0laRV8xMjhNQjw8U0laRV9TSEZUKSB8IFwKKwkJCSAgIFBDSV9QQkFDX1ApCisjZW5kaWYKKyNkZWZpbmUgS09SSU5BX0NORkcxNwlLT1JJTkFfUEJBMEMKKyNkZWZpbmUgS09SSU5BX1BCQTBNCTB4MAorI2RlZmluZSBLT1JJTkFfQ05GRzE4CUtPUklOQV9QQkEwTQorCisjaWYgZGVmaW5lZChfX01JUFNFQl9fKQorI2RlZmluZSBLT1JJTkFfUEJBMUMJKChTSVpFXzFNQjw8U0laRV9TSEZUKSB8IFBDSV9QQkFDX1NCIHwgXAorCQkJICBQQ0lfUEJBQ19NU0kpCisjZWxzZQorI2RlZmluZSBLT1JJTkFfUEJBMUMJKChTSVpFXzFNQjw8U0laRV9TSEZUKSB8IFwKKwkJCSAgUENJX1BCQUNfTVNJKQorI2VuZGlmCisjZGVmaW5lIEtPUklOQV9DTkZHMTkJS09SSU5BX1BCQTFDCisjZGVmaW5lIEtPUklOQV9QQkExTQkweDAKKyNkZWZpbmUgS09SSU5BX0NORkcyMAlLT1JJTkFfUEJBMU0KKworI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgS09SSU5BX1BCQTJDCSgoU0laRV8yTUI8PFNJWkVfU0hGVCkgfCBQQ0lfUEJBQ19TQiB8IFwKKwkJCSAgUENJX1BCQUNfTVNJKQorI2Vsc2UKKyNkZWZpbmUgS09SSU5BX1BCQTJDCSgoU0laRV8yTUI8PFNJWkVfU0hGVCkgfCBcCisJCQkgIFBDSV9QQkFDX01TSSkKKyNlbmRpZgorI2RlZmluZSBLT1JJTkFfQ05GRzIxCUtPUklOQV9QQkEyQworI2RlZmluZSBLT1JJTkFfUEJBMk0JMHgxODAwMDAwMAorI2RlZmluZSBLT1JJTkFfQ05GRzIyCUtPUklOQV9QQkEyTQorI2RlZmluZSBLT1JJTkFfUEJBM0MJMAorI2RlZmluZSBLT1JJTkFfQ05GRzIzCUtPUklOQV9QQkEzQworI2RlZmluZSBLT1JJTkFfUEJBM00JMAorI2RlZmluZSBLT1JJTkFfQ05GRzI0CUtPUklOQV9QQkEzTQorCisjZGVmaW5lCVBDSVRDX0RUSU1FUl9WQUwJOAorI2RlZmluZSBQQ0lUQ19SVElNRVJfVkFMCTB4MTAKKworI2VuZGlmICAvKiBfX0FTTV9SQzMyNDM0X1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC9wcm9tLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC9wcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2NmRkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L3Byb20uaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogIERlZmluaXRpb25zIGZvciB0aGUgUFJPTQorICoKKyAqICBDb3B5cmlnaHQgMjAwMiBSeWFuIEhvbG0gPHJ5YW4uaG9sbVFWaXN0QGlkdC5jb20+CisgKiAgQ29weXJpZ2h0IDIwMDggRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNkZWZpbmUgUFJPTV9FTlRSWSh4KQkJKDB4YmZjMDAwMDAgKyAoKHgpICogOCkpCisKKyNkZWZpbmUgR1BJT19JTklUX05PQlVUVE9OCSIiCisjZGVmaW5lIEdQSU9fSU5JVF9CVVRUT04JIiAyIgorCisjZGVmaW5lIFNSX05NSQkJCTB4MDAxODAwMDAKKyNkZWZpbmUgU0VSSUFMX1NQRUVEX0VOVFJZCTB4MDAwMDAwMDEKKworI2RlZmluZSBGUkVRX1RBRwkJIkhaPSIKKyNkZWZpbmUgR1BJT19UQUcJCSJncGlvPSIKKyNkZWZpbmUgS01BQ19UQUcJCSJrbWFjPSIKKyNkZWZpbmUgTUVNX1RBRwkJCSJtZW09IgorI2RlZmluZSBCT0FSRF9UQUcJCSJib2FyZD0iCisKKyNkZWZpbmUgQk9BUkRfUkI1MzIJCSI1MDAiCisjZGVmaW5lIEJPQVJEX1JCNTMyQQkJIjUwMHI1IgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvcmIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L3JiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhNzZlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L3JiLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBJRFQgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNiBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CisgKi8KKyNpZm5kZWYgX19BU01fUkMzMjQzNF9SQl9ICisjZGVmaW5lIF9fQVNNX1JDMzI0MzRfUkJfSAorCisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKworI2RlZmluZSBJRFQ0MzRfUkVHX0JBU0UJKCh2b2xhdGlsZSB2b2lkICopIEtTRUcxQUREUigweDE4MDAwMDAwKSkKKyNkZWZpbmUgREVWMEJBU0UJMHgwMTAwMDAKKyNkZWZpbmUgREVWME1BU0sJMHgwMTAwMDQKKyNkZWZpbmUgREVWMEMJCTB4MDEwMDA4CisjZGVmaW5lIERFVjBUCQkweDAxMDAwQworI2RlZmluZSBERVYxQkFTRQkweDAxMDAxMAorI2RlZmluZSBERVYxTUFTSwkweDAxMDAxNAorI2RlZmluZSBERVYxQwkJMHgwMTAwMTgKKyNkZWZpbmUgREVWMVRDCQkweDAxMDAxQworI2RlZmluZSBERVYyQkFTRQkweDAxMDAyMAorI2RlZmluZSBERVYyTUFTSwkweDAxMDAyNAorI2RlZmluZSBERVYyQwkJMHgwMTAwMjgKKyNkZWZpbmUgREVWMlRDCQkweDAxMDAyQworI2RlZmluZSBERVYzQkFTRQkweDAxMDAzMAorI2RlZmluZSBERVYzTUFTSwkweDAxMDAzNAorI2RlZmluZSBERVYzQwkJMHgwMTAwMzgKKyNkZWZpbmUgREVWM1RDCQkweDAxMDAzQworI2RlZmluZSBCVENTCQkweDAxMDA0MAorI2RlZmluZSBCVENPTVBBUkUJMHgwMTAwNDQKKyNkZWZpbmUgR1BJT0JBU0UJMHgwNTAwMDAKKyNkZWZpbmUgR1BJT0NGRwkJMHgwNTAwMDQKKyNkZWZpbmUgR1BJT0QJCTB4MDUwMDA4CisjZGVmaW5lIEdQSU9JTEVWRUwJMHgwNTAwMEMKKyNkZWZpbmUgR1BJT0lTVEFUCTB4MDUwMDEwCisjZGVmaW5lIEdQSU9OTUlFTgkweDA1MDAxNAorI2RlZmluZSBJTUFTSzYJCTB4MDM4MDM4CisjZGVmaW5lIExPX1dQWAkJKDEgPDwgMCkKKyNkZWZpbmUgTE9fQUxFCQkoMSA8PCAxKQorI2RlZmluZSBMT19DTEUJCSgxIDw8IDIpCisjZGVmaW5lIExPX0NFWAkJKDEgPDwgMykKKyNkZWZpbmUgTE9fRk9GRgkJKDEgPDwgNSkKKyNkZWZpbmUgTE9fU1BJQ1MJKDEgPDwgNikKKyNkZWZpbmUgTE9fVUxFRAkJKDEgPDwgNykKKworI2RlZmluZSBCSVRfVE9fTUFTSyh4KQkoMSA8PCB4KQorCitzdHJ1Y3QgZGV2X3JlZyB7CisJdTMyCWJhc2U7CisJdTMyCW1hc2s7CisJdTMyCWN0bDsKKwl1MzIJdGltaW5nOworfTsKKworc3RydWN0IGtvcmluYV9kZXZpY2UgeworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgY2hhciBtYWNbNl07CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKK307CisKK3N0cnVjdCBjZl9kZXZpY2UgeworCWludCBncGlvX3BpbjsKKwl2b2lkICpkZXY7CisJc3RydWN0IGdlbmRpc2sgKmdkOworfTsKKworc3RydWN0IG1wbWNfZGV2aWNlIHsKKwl1bnNpZ25lZCBjaGFyCXN0YXRlOworCXNwaW5sb2NrX3QJbG9jazsKKwl2b2lkIF9faW9tZW0gCSpiYXNlOworfTsKKworI2VuZGlmICAvKiBfX0FTTV9SQzMyNDM0X1JCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L3JjMzI0MzQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L3JjMzI0MzQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGEwMjE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJjMzI0MzQvcmMzMjQzNC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgSURUIFJDMzIzNDM0IENQVS4KKyAqLworCisjaWZuZGVmIF9BU01fUkMzMjQzNF9SQzMyNDM0X0hfCisjZGVmaW5lIF9BU01fUkMzMjQzNF9SQzMyNDM0X0hfCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgUkMzMjQzNF9SRUdfQkFTRQkweDE4MDAwMDAwCisjZGVmaW5lIFJDMzI0MzRfUlNUCQkoMSA8PCAxNSkKKworI2RlZmluZSBJRFRfQ0xPQ0tfTVVMVAkJMgorI2RlZmluZSBNSVBTX0NQVV9USU1FUl9JUlEJNworCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworI2RlZmluZSBJQ19HUk9VUDBfUEVORAkJKFJDMzI0MzRfUkVHX0JBU0UgKyAweDM4MDAwKQorI2RlZmluZSBJQ19HUk9VUDBfTUFTSwkJKFJDMzI0MzRfUkVHX0JBU0UgKyAweDM4MDA4KQorI2RlZmluZSBJQ19HUk9VUF9PRkZTRVQJCTB4MEMKKworI2RlZmluZSBOVU1fSU5UUl9HUk9VUFMJCTUKKworLyogMTY1NTAgVUFSVHMgKi8KKyNkZWZpbmUgR1JPVVAwX0lSUV9CQVNFCQk4CS8qIEdSUDIgSVJRIG51bWJlcnMgc3RhcnQgaGVyZSAqLworCQkJCQkvKiBHUlAzIElSUSBudW1iZXJzIHN0YXJ0IGhlcmUgKi8KKyNkZWZpbmUgR1JPVVAxX0lSUV9CQVNFCQkoR1JPVVAwX0lSUV9CQVNFICsgMzIpCisJCQkJCS8qIEdSUDQgSVJRIG51bWJlcnMgc3RhcnQgaGVyZSAqLworI2RlZmluZSBHUk9VUDJfSVJRX0JBU0UJCShHUk9VUDFfSVJRX0JBU0UgKyAzMikKKwkJCQkJLyogR1JQNSBJUlEgbnVtYmVycyBzdGFydCBoZXJlICovCisjZGVmaW5lIEdST1VQM19JUlFfQkFTRQkJKEdST1VQMl9JUlFfQkFTRSArIDMyKQorI2RlZmluZSBHUk9VUDRfSVJRX0JBU0UJCShHUk9VUDNfSVJRX0JBU0UgKyAzMikKKworCisjaWZkZWYgX19NSVBTRUJfXworI2RlZmluZSBSQzMyNDM0X1VBUlQwX0JBU0UJKFJDMzI0MzRfUkVHX0JBU0UgKyAweDU4MDAzKQorI2Vsc2UKKyNkZWZpbmUgUkMzMjQzNF9VQVJUMF9CQVNFCShSQzMyNDM0X1JFR19CQVNFICsgMHg1ODAwMCkKKyNlbmRpZgorCisjZGVmaW5lIFJDMzI0MzRfVUFSVDBfSVJRCShHUk9VUDNfSVJRX0JBU0UgKyAwKQorCisvKiBjcHUgcGlwZWxpbmUgZmx1c2ggKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByYzMyNDM0X3N5bmModm9pZCkKK3sKKwlfX2FzbV9fIHZvbGF0aWxlICgic3luYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmMzMjQzNF9zeW5jX3VkZWxheShpbnQgdXMpCit7CisJX19hc21fXyB2b2xhdGlsZSAoInN5bmMiKTsKKwl1ZGVsYXkodXMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmMzMjQzNF9zeW5jX2RlbGF5KGludCBtcykKK3sKKwlfX2FzbV9fIHZvbGF0aWxlICgic3luYyIpOworCW1kZWxheShtcyk7Cit9CisKKyNlbmRpZiAgLyogX0FTTV9SQzMyNDM0X1JDMzI0MzRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L3RpbWVyLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OWIxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC90aW1lci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiAgRGVmaW5pdGlvbnMgZm9yIHRpbWVyIHJlZ2lzdGVycworICoKKyAqICBDb3B5cmlnaHQgMjAwNCBQaGlsaXAgUmlzY2hlbCA8cmlzY2hlbHBAaWR0LmNvbT4KKyAqICBDb3B5cmlnaHQgMjAwOCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9SQzMyNDM0X1RJTUVSX0gKKyNkZWZpbmUgX19BU01fUkMzMjQzNF9USU1FUl9ICisKKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JiLmg+CisKKyNkZWZpbmUgVElNRVIwX0JBU0VfQUREUgkJMHgxODAyODAwMAorI2RlZmluZSBUSU1FUl9DT1VOVAkJCTMKKworc3RydWN0IHRpbWVyX2NvdW50ZXIgeworCXUzMiBjb3VudDsKKwl1MzIgY29tcGFyZTsKKwl1MzIgY3RjOwkJLyp1c2UgQ1RDXyAqLworfTsKKworc3RydWN0IHRpbWVyIHsKKwlzdHJ1Y3QgdGltZXJfY291bnRlciB0aW1bVElNRVJfQ09VTlRdOworCXUzMiByY291bnQ7CS8qIHVzZSBSQ09VTlRfICovCisJdTMyIHJjb21wYXJlOwkvKiB1c2UgUkNPTVBBUkVfICovCisJdTMyIHJ0YzsJLyogdXNlIFJUQ18gKi8KK307CisKKyNkZWZpbmUgUkMzMjQzNF9DVENfRU5fQklUCQkwCisjZGVmaW5lIFJDMzI0MzRfQ1RDX1RPX0JJVAkJMQorCisvKiBSZWFsIHRpbWUgY2xvY2sgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJDMzI0MzRfUlRDX01TSyh4KSAgICAgICAgICAgICAgQklUX1RPX01BU0soeCkKKyNkZWZpbmUgUkMzMjQzNF9SVENfQ0VfQklUICAgICAgICAgICAgICAwCisjZGVmaW5lIFJDMzI0MzRfUlRDX1RPX0JJVCAgICAgICAgICAgICAgMQorI2RlZmluZSBSQzMyNDM0X1JUQ19SUUVfQklUICAgICAgICAgICAgIDIKKworLyogQ291bnRlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkMzMjQzNF9SQ09VTlRfQklUICAgICAgICAgICAgICAwCisjZGVmaW5lIFJDMzI0MzRfUkNPVU5UX01TSyAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBSQzMyNDM0X1JDT01QX0JJVCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUkMzMjQzNF9SQ09NUF9NU0sgICAgICAgICAgICAgICAweDAwMDBmZmZmCisKKyNlbmRpZiAgLyogX19BU01fUkMzMjQzNF9USU1FUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC93YXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1yYzMyNDM0L3dhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZGYxODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcmMzMjQzNC93YXIuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA3IGJ5IFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX01BQ0hfTUlQU19XQVJfSAorI2RlZmluZSBfX0FTTV9NSVBTX01BQ0hfTUlQU19XQVJfSAorCisjZGVmaW5lIFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUgkwCisjZGVmaW5lIFI0NjAwX1YxX0hJVF9DQUNIRU9QX1dBUgkwCisjZGVmaW5lIFI0NjAwX1YyX0hJVF9DQUNIRU9QX1dBUgkwCisjZGVmaW5lIFI1NDMyX0NQMF9JTlRFUlJVUFRfV0FSCQkwCisjZGVmaW5lIEJDTTEyNTBfTTNfV0FSCQkJMAorI2RlZmluZSBTSUJZVEVfMTk1Nl9XQVIJCQkwCisjZGVmaW5lIE1JUFM0S19JQ0FDSEVfUkVGSUxMX1dBUgkxCisjZGVmaW5lIE1JUFNfQ0FDSEVfU1lOQ19XQVIJCTAKKyNkZWZpbmUgVFg0OVhYX0lDQUNIRV9JTkRFWF9JTlZfV0FSCTAKKyNkZWZpbmUgUk05MDAwX0NERVhfU01QX1dBUgkJMAorI2RlZmluZSBJQ0FDSEVfUkVGSUxMU19XT1JLQVJPVU5EX1dBUgkwCisjZGVmaW5lIFIxMDAwMF9MTFNDX1dBUgkJCTAKKyNkZWZpbmUgTUlQUzM0S19NSVNTRURfSVRMQl9XQVIJCTAKKworI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9NSVBTX1dBUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YWUxMmQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqIERlZmluZXMgb2YgdGhlIEF0bGFzIGJvYXJkIHNwZWNpZmljIGFkZHJlc3MtTUFQLCByZWdpc3RlcnMsIGV0Yy4KLSAqCi0gKi8KLSNpZm5kZWYgX01JUFNfQVRMQVNfSAotI2RlZmluZSBfTUlQU19BVExBU19ICi0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0KLS8qCi0gKiBBdGxhcyBSVEMtZGV2aWNlIGluZGlyZWN0IHJlZ2lzdGVyIGFjY2Vzcy4KLSAqLwotI2RlZmluZSBBVExBU19SVENfQURSX1JFRyAgICAgICAweDFmMDAwODAwCi0jZGVmaW5lIEFUTEFTX1JUQ19EQVRfUkVHICAgICAgIDB4MWYwMDA4MDgKLQotLyoKLSAqIEF0bGFzIGludGVycnVwdCBjb250cm9sbGVyIHJlZ2lzdGVyIGJhc2UuCi0gKi8KLSNkZWZpbmUgQVRMQVNfSUNUUkxfUkVHU19CQVNFICAgMHgxZjAwMDAwMAotCi0vKgotICogQXRsYXMgcmVnaXN0ZXJzIGFyZSBtZW1vcnkgbWFwcGVkIG9uIDY0LWJpdCBhbGlnbmVkIGJvdW5kYXJpZXMgYW5kCi0gKiBvbmx5IHdvcmQgYWNjZXNzIGFyZSBhbGxvd2VkLgotICovCi1zdHJ1Y3QgYXRsYXNfaWN0cmxfcmVncyB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHJhdzsKLQlpbnQgZHVtbXkxOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRzZXRlbjsKLQlpbnQgZHVtbXkyOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRyc3RlbjsKLQlpbnQgZHVtbXkzOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRlbmFibGU7Ci0JaW50IGR1bW15NDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50c3RhdHVzOwotCWludCBkdW1teTU7Ci19OwotCi0vKgotICogQXRsYXMgVUFSVCByZWdpc3RlciBiYXNlLgotICovCi0jZGVmaW5lIEFUTEFTX1VBUlRfUkVHU19CQVNFICAgIDB4MWYwMDA5MDAKLSNkZWZpbmUgQVRMQVNfQkFTRV9CQVVEICggMzY4NjQwMCAvIDE2ICkKLQotLyoKLSAqIEF0bGFzIFBTVSBzdGFuZGJ5IHJlZ2lzdGVyLgotICovCi0jZGVmaW5lIEFUTEFTX1BTVVNUQllfUkVHICAgICAgIDB4MWYwMDA2MDAKLSNkZWZpbmUgQVRMQVNfR09TVEJZICAgICAgICAgICAgMHg0ZAotCi0vKgotICogV2UgbWFrZSBhIHVuaXZlcnNhbCBhc3N1bXB0aW9uIGFib3V0IHRoZSB3YXkgdGhlIGJvb3Rsb2FkZXIgKFlBTU9OKQotICogaGF2ZSBsb2NhdGVkIHRoZSBQaGlsaXBzIFNBQTk3MzAgY2hpcC4KLSAqIFRoaXMgaXMgbm90IGlkZWFsLCBidXQgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHVwIHJlbW90ZSBkZWJ1Z2dpbmcgYXMKLSAqIHNvb24gYXMgcG9zc2libGUuCi0gKi8KLSNkZWZpbmUgQVRMQVNfU0FBOTczMF9SRUcJMHgxMDgwMDAwMAotCi0jZGVmaW5lIEFUTEFTX1NBQTk3MzBfQkFVRENMT0NLCTM2OTIzMDAKLQotI2VuZGlmIC8qICEoX01JUFNfQVRMQVNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvYXRsYXNpbnQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvYXRsYXNpbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiYTFjMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwNiAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKglBdXRob3JzOiBDYXJzdGVuIExhbmdnYWFyZCA8Y2Fyc3RlbmxAbWlwcy5jb20+Ci0gKgkJIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKiBEZWZpbmVzIGZvciB0aGUgQXRsYXMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCi0gKgotICovCi0jaWZuZGVmIF9NSVBTX0FUTEFTSU5UX0gKLSNkZWZpbmUgX01JUFNfQVRMQVNJTlRfSAotCi0jaW5jbHVkZSA8aXJxLmg+Ci0KLS8qIENQVSBpbnRlcnJ1cHQgb2Zmc2V0cyAqLwotI2RlZmluZSBNSVBTQ1BVX0lOVF9TVzAJCTAKLSNkZWZpbmUgTUlQU0NQVV9JTlRfU1cxCQkxCi0jZGVmaW5lIE1JUFNDUFVfSU5UX01CMAkJMgotI2RlZmluZSBNSVBTQ1BVX0lOVF9BVExBUwlNSVBTQ1BVX0lOVF9NQjAKLSNkZWZpbmUgTUlQU0NQVV9JTlRfTUIxCQkzCi0jZGVmaW5lIE1JUFNDUFVfSU5UX01CMgkJNAotI2RlZmluZSBNSVBTQ1BVX0lOVF9NQjMJCTUKLSNkZWZpbmUgTUlQU0NQVV9JTlRfTUI0CQk2Ci0KLS8qCi0gKiBJbnRlcnJ1cHRzIDguLjM5IGFyZSB1c2VkIGZvciBBdGxhcyBpbnRlcnJ1cHQgY29udHJvbGxlciBpbnRlcnJ1cHRzCi0gKi8KLSNkZWZpbmUgQVRMQVNfSU5UX0JBU0UJCTgKLSNkZWZpbmUgQVRMQVNfSU5UX1VBUlQJCShBVExBU19JTlRfQkFTRSArIDApCi0jZGVmaW5lIEFUTEFTX0lOVF9USU0wCQkoQVRMQVNfSU5UX0JBU0UgKyAxKQotI2RlZmluZSBBVExBU19JTlRfUkVTMgkJKEFUTEFTX0lOVF9CQVNFICsgMikKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzMJCShBVExBU19JTlRfQkFTRSArIDMpCi0jZGVmaW5lIEFUTEFTX0lOVF9SVEMJCShBVExBU19JTlRfQkFTRSArIDQpCi0jZGVmaW5lIEFUTEFTX0lOVF9DT1JFSEkJKEFUTEFTX0lOVF9CQVNFICsgNSkKLSNkZWZpbmUgQVRMQVNfSU5UX0NPUkVMTwkoQVRMQVNfSU5UX0JBU0UgKyA2KQotI2RlZmluZSBBVExBU19JTlRfUkVTNwkJKEFUTEFTX0lOVF9CQVNFICsgNykKLSNkZWZpbmUgQVRMQVNfSU5UX1BDSUEJCShBVExBU19JTlRfQkFTRSArIDgpCi0jZGVmaW5lIEFUTEFTX0lOVF9QQ0lCCQkoQVRMQVNfSU5UX0JBU0UgKyA5KQotI2RlZmluZSBBVExBU19JTlRfUENJQwkJKEFUTEFTX0lOVF9CQVNFICsgMTApCi0jZGVmaW5lIEFUTEFTX0lOVF9QQ0lECQkoQVRMQVNfSU5UX0JBU0UgKyAxMSkKLSNkZWZpbmUgQVRMQVNfSU5UX0VOVU0JCShBVExBU19JTlRfQkFTRSArIDEyKQotI2RlZmluZSBBVExBU19JTlRfREVHCQkoQVRMQVNfSU5UX0JBU0UgKyAxMykKLSNkZWZpbmUgQVRMQVNfSU5UX0FUWEZBSUwJKEFUTEFTX0lOVF9CQVNFICsgMTQpCi0jZGVmaW5lIEFUTEFTX0lOVF9JTlRBCQkoQVRMQVNfSU5UX0JBU0UgKyAxNSkKLSNkZWZpbmUgQVRMQVNfSU5UX0lOVEIJCShBVExBU19JTlRfQkFTRSArIDE2KQotI2RlZmluZSBBVExBU19JTlRfRVRICQlBVExBU19JTlRfSU5UQgotI2RlZmluZSBBVExBU19JTlRfSU5UQwkJKEFUTEFTX0lOVF9CQVNFICsgMTcpCi0jZGVmaW5lIEFUTEFTX0lOVF9TQ1NJCQlBVExBU19JTlRfSU5UQwotI2RlZmluZSBBVExBU19JTlRfSU5URAkJKEFUTEFTX0lOVF9CQVNFICsgMTgpCi0jZGVmaW5lIEFUTEFTX0lOVF9TRVJSCQkoQVRMQVNfSU5UX0JBU0UgKyAxOSkKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzIwCQkoQVRMQVNfSU5UX0JBU0UgKyAyMCkKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzIxCQkoQVRMQVNfSU5UX0JBU0UgKyAyMSkKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzIyCQkoQVRMQVNfSU5UX0JBU0UgKyAyMikKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzIzCQkoQVRMQVNfSU5UX0JBU0UgKyAyMykKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzI0CQkoQVRMQVNfSU5UX0JBU0UgKyAyNCkKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzI1CQkoQVRMQVNfSU5UX0JBU0UgKyAyNSkKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzI2CQkoQVRMQVNfSU5UX0JBU0UgKyAyNikKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzI3CQkoQVRMQVNfSU5UX0JBU0UgKyAyNykKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzI4CQkoQVRMQVNfSU5UX0JBU0UgKyAyOCkKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzI5CQkoQVRMQVNfSU5UX0JBU0UgKyAyOSkKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzMwCQkoQVRMQVNfSU5UX0JBU0UgKyAzMCkKLSNkZWZpbmUgQVRMQVNfSU5UX1JFUzMxCQkoQVRMQVNfSU5UX0JBU0UgKyAzMSkKLSNkZWZpbmUgQVRMQVNfSU5UX0VORAkJKEFUTEFTX0lOVF9CQVNFICsgMzEpCi0KLS8qCi0gKiBJbnRlcnJ1cHRzIDY0Li4xMjcgYXJlIHVzZWQgZm9yIFNvYy1pdCBDbGFzc2ljIGludGVycnVwdHMKLSAqLwotI2RlZmluZSBNU0MwMUNfSU5UX0JBU0UJCTY0Ci0KLS8qIFNPQy1pdCBDbGFzc2ljIGludGVycnVwdCBvZmZzZXRzICovCi0jZGVmaW5lIE1TQzAxQ19JTlRfVE1SCQkwCi0jZGVmaW5lIE1TQzAxQ19JTlRfUENJCQkxCi0KLS8qCi0gKiBJbnRlcnJ1cHRzIDY0Li4xMjcgYXJlIHVzZWQgZm9yIFNvYy1pdCBFSUMgaW50ZXJydXB0cwotICovCi0jZGVmaW5lIE1TQzAxRV9JTlRfQkFTRQkJNjQKLQotLyogU09DLWl0IEVJQyBpbnRlcnJ1cHQgb2Zmc2V0cyAqLwotI2RlZmluZQlNU0MwMUVfSU5UX1NXMAkJMQotI2RlZmluZQlNU0MwMUVfSU5UX1NXMQkJMgotI2RlZmluZQlNU0MwMUVfSU5UX01CMAkJMwotI2RlZmluZQlNU0MwMUVfSU5UX0FUTEFTCU1TQzAxRV9JTlRfTUIwCi0jZGVmaW5lCU1TQzAxRV9JTlRfTUIxCQk0Ci0jZGVmaW5lCU1TQzAxRV9JTlRfTUIyCQk1Ci0jZGVmaW5lCU1TQzAxRV9JTlRfTUIzCQk2Ci0jZGVmaW5lCU1TQzAxRV9JTlRfTUI0CQk3Ci0jZGVmaW5lCU1TQzAxRV9JTlRfVE1SCQk4Ci0jZGVmaW5lCU1TQzAxRV9JTlRfUENJCQk5Ci0jZGVmaW5lCU1TQzAxRV9JTlRfUEVSRkNUUgkxMAotI2RlZmluZQlNU0MwMUVfSU5UX0NQVUNUUgkxMQotCi0jZW5kaWYgLyogIShfTUlQU19BVExBU0lOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9tYWx0YXNtcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9tYWx0YXNtcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDdlOTU1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvbWFsdGFzbXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBUaGVyZSBhcmUgc2V2ZXJhbCBTTVAgbW9kZWxzIHN1cHBvcnRlZAotICogU01UQyBpcyBtdXR1YWxseSBleGNsdXNpdmUgdG8gb3RoZXIgb3B0aW9ucyAoYXRtKQotICovCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVRDKQotI2RlZmluZSBtYWx0YV9zbXRjCTEKLSNkZWZpbmUgbWFsdGFfY21wCTAKLSNkZWZpbmUgbWFsdGFfc212cAkwCi0jZWxzZQotI2RlZmluZSBtYWx0YV9zbXRjCTAKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0NNUCkKLWV4dGVybiBpbnQgZ2NtcF9wcmVzZW50OwotI2RlZmluZSBtYWx0YV9jbXAJZ2NtcF9wcmVzZW50Ci0jZWxzZQotI2RlZmluZSBtYWx0YV9jbXAJMAotI2VuZGlmCi0vKiBGSVhNRTogc2hvdWxkIGJlY29tZSBDT01GSUdfTUlQU19NVF9TTVZQICovCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCi0jZGVmaW5lIG1hbHRhX3NtdnAJMQotI2Vsc2UKLSNkZWZpbmUgbWFsdGFfc212cAkwCi0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KLQotLyogbWFsdGFfc210YyAqLwotI2luY2x1ZGUgPGFzbS9zbXRjLmg+Ci0jaW5jbHVkZSA8YXNtL3NtdGNfaXBpLmg+Ci0KLS8qIG1hbHRhX2NtcCAqLwotI2luY2x1ZGUgPGFzbS9jbXAuaD4KLQotLyogbWFsdGFfc212cCAqLwotI2luY2x1ZGUgPGFzbS9zbXZwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL3NhYTk3MzBfdWFydC5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9zYWE5NzMwX3VhcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkxMzE0My4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL3NhYTk3MzBfdWFydC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgVUFSVCBwYXJ0IG9mIHRoZSBQaGlsaXBzIFNBQTk3MzAgY2hpcC4KLSAqCi0gKi8KLQotI2lmbmRlZiBTQUE5NzMwX1VBUlRfSAotI2RlZmluZSBTQUE5NzMwX1VBUlRfSAotCi0vKiBUaGUgU0FBOTczMCBVQVJUIHJlZ2lzdGVyIG1hcCwgYXMgc2VlbiB2aWEgdGhlIFBDSSBidXMgKi8KLQotI2RlZmluZSBTQUE5NzMwX1VBUlRfUkVHU19BRERSCTB4MjE4MDAKLQotc3RydWN0IHVhcnRfc2FhOTczMF9yZWdtYXAgewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgVGhyX1JicjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIEllcjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIElpcl9GY3I7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBMY3I7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBNY3I7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBMc3I7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBNc3I7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBTY3I7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBCYXVkRGl2THNiOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgQmF1ZERpdk1zYjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIEp1bmswOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgSnVuazE7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IENvbmZpZzsJCS8qIDB4MjE4MGMgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVHhTdGFydDsJCS8qIDB4MjE4MTAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVHhMZW5ndGg7CQkvKiAweDIxODE0ICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IFR4Q291bnRlcjsJLyogMHgyMTgxOCAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBSeFN0YXJ0OwkJLyogMHgyMTgxYyAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBSeExlbmd0aDsJCS8qIDB4MjE4MjAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUnhDb3VudGVyOwkvKiAweDIxODI0ICovCi19OwotdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgdWFydF9zYWE5NzMwX3JlZ21hcCB0X3VhcnRfc2FhOTczMF9yZWdtYXA7Ci0KLS8qCi0gKiBPbmx5IGEgc3Vic2V0IG9mIHRoZSBVQVJUIGNvbnRyb2wgYml0cyBhcmUgZGVmaW5lZCBoZXJlLAotICogZW5vdWdoIHRvIG1ha2UgdGhlIHNlcmlhbCBkZWJ1ZyBwb3J0IHdvcmsuCi0gKi8KLQotI2RlZmluZSBTQUE5NzMwX0xDUl9EQVRBOAkweDAzCi0KLSNkZWZpbmUgU0FBOTczMF9NQ1JfRFRSCQkweDAxCi0jZGVmaW5lIFNBQTk3MzBfTUNSX1JUUwkJMHgwMgotCi0jZGVmaW5lIFNBQTk3MzBfTFNSX0RSCQkweDAxCi0jZGVmaW5lIFNBQTk3MzBfTFNSX1RIUkUJMHgyMAotCi0jZW5kaWYgLyogIShTQUE5NzMwX1VBUlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvc2VhZC5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9zZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YzY5ZGUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9zZWFkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogRGVmaW5lcyBvZiB0aGUgU0VBRCBib2FyZCBzcGVjaWZpYyBhZGRyZXNzLU1BUCwgcmVnaXN0ZXJzLCBldGMuCi0gKgotICovCi0jaWZuZGVmIF9NSVBTX1NFQURfSAotI2RlZmluZSBfTUlQU19TRUFEX0gKLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLQotLyoKLSAqIFNFQUQgVUFSVCByZWdpc3RlciBiYXNlLgotICovCi0jZGVmaW5lIFNFQURfVUFSVDBfUkVHU19CQVNFICAgICgweDFmMDAwODAwKQotI2RlZmluZSBTRUFEX0JBU0VfQkFVRCAoIDM2ODY0MDAgLyAxNiApCi0KLSNlbmRpZiAvKiAhKF9NSVBTX1NFQURfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvc2VhZGludC5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9zZWFkaW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MTBiYWUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9zZWFkaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogRGVmaW5lcyBmb3IgdGhlIFNFQUQgaW50ZXJydXB0IGNvbnRyb2xsZXIuCi0gKi8KLSNpZm5kZWYgX01JUFNfU0VBRElOVF9ICi0jZGVmaW5lIF9NSVBTX1NFQURJTlRfSAotCi0jaW5jbHVkZSA8aXJxLmg+Ci0KLSNkZWZpbmUgTUlQU0NQVV9JTlRfVUFSVDAJMgotI2RlZmluZSBNSVBTQ1BVX0lOVF9VQVJUMQkzCi0KLSNlbmRpZiAvKiAhKF9NSVBTX1NFQURJTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGFnZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKaW5kZXggODczNWFhMC4uNDk0ZjAwYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGFnZS5oCkBAIC0zNCw2ICszNCw5IEBACiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKK2V4dGVybiB2b2lkIGJ1aWxkX2NsZWFyX3BhZ2Uodm9pZCk7CitleHRlcm4gdm9pZCBidWlsZF9jb3B5X3BhZ2Uodm9pZCk7CisKIC8qCiAgKiBJdCdzIG5vcm1hbGx5IGRlZmluZWQgb25seSBmb3IgRkxBVE1FTSBjb25maWcgYnV0IGl0J3MKICAqIHVzZWQgaW4gb3VyIGVhcmx5IG1lbSBpbml0IGNvZGUgZm9yIGFsbCBtZW1vcnkgbW9kZWxzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wY2kuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGNpLmgKaW5kZXggZDNiZTgzNC4uYzIwNTg3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BjaS5oCkBAIC0xNzMsNiArMTczLDUgQEAKIH0KIAogZXh0ZXJuIGludCBwY2lfcHJvYmVfb25seTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgcGNpYmlvc19tYXhfbGF0ZW5jeTsKIAogI2VuZGlmIC8qIF9BU01fUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2V0dXAuaAppbmRleCA4ODNmNTliLi5lNjAwY2VkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NldHVwLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zZXR1cC5oCkBAIC0zLDYgKzMsOCBAQAogCiAjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTI1NgogCisjaWZkZWYgIF9fS0VSTkVMX18KIGV4dGVybiB2b2lkIHNldHVwX2Vhcmx5X3ByaW50ayh2b2lkKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdHh4OS9nZW5lcmljLmggYi9pbmNsdWRlL2FzbS1taXBzL3R4eDkvZ2VuZXJpYy5oCmluZGV4IGQ4NzU2NjYuLmNiYWUzN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdHh4OS9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90eHg5L2dlbmVyaWMuaApAQCAtMTIsNiArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiBmb3Igc3RydWN0IHJlc291cmNlICovCiAKIGV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgdHh4OV9jZV9yZXNbXTsKKyNkZWZpbmUgVFhYOV9DRShuKQkodW5zaWduZWQgbG9uZykodHh4OV9jZV9yZXNbKG4pXS5zdGFydCkKK2V4dGVybiB1bnNpZ25lZCBpbnQgdHh4OV9wY29kZTsKIGV4dGVybiBjaGFyIHR4eDlfcGNvZGVfc3RyWzhdOwogdm9pZCB0eHg5X3JlZ19yZXNfaW5pdCh1bnNpZ25lZCBpbnQgcGNvZGUsIHVuc2lnbmVkIGxvbmcgYmFzZSwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CkBAIC0xOSw2ICsyMSwxMSBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCB0eHg5X21hc3Rlcl9jbG9jazsKIGV4dGVybiB1bnNpZ25lZCBpbnQgdHh4OV9jcHVfY2xvY2s7CiBleHRlcm4gdW5zaWduZWQgaW50IHR4eDlfZ2J1c19jbG9jazsKKyNkZWZpbmUgVFhYOV9JTUNMSwkodHh4OV9nYnVzX2Nsb2NrIC8gMikKKworZXh0ZXJuIGludCB0eHg5X2NjZmdfdG9lb247CitzdHJ1Y3QgdWFydF9wb3J0OworaW50IGVhcmx5X3NlcmlhbF90eHg5X3NldHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogCiBzdHJ1Y3QgcGNpX2RldjsKIHN0cnVjdCB0eHg5X2JvYXJkX3ZlYyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3R4eDkvcmJ0eDQ5MjcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdHh4OS9yYnR4NDkyNy5oCmluZGV4IGJmMTk0NTguLjZmY2VjOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdHh4OS9yYnR4NDkyNy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdHh4OS9yYnR4NDkyNy5oCkBAIC0zNCw3ICszNCwyMyBAQAogI2RlZmluZSBSQlRYNDkyN19QQ0lJTwkJMHgxNjAwMDAwMAogI2RlZmluZSBSQlRYNDkyN19QQ0lJT19TSVpFCTB4MDEwMDAwMDAKIAotI2RlZmluZSByYnR4NDkyN19wY2lyZXNldF9hZGRyCSgoX191OCBfX2lvbWVtICopMHhiYzAwZjAwNlVMKQorI2RlZmluZSBSQlRYNDkyN19JTUFTS19BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDIwMDApCisjZGVmaW5lIFJCVFg0OTI3X0lNU1RBVF9BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDIwMDYpCisjZGVmaW5lIFJCVFg0OTI3X1NPRlRSRVNFVF9BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMGYwMDApCisjZGVmaW5lIFJCVFg0OTI3X1NPRlRSRVNFVExPQ0tfQUREUgkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDBmMDAyKQorI2RlZmluZSBSQlRYNDkyN19QQ0lSRVNFVF9BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMGYwMDYpCisjZGVmaW5lIFJCVFg0OTI3X0JSQU1SVENfQkFTRQkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDEwMDAwKQorI2RlZmluZSBSQlRYNDkyN19FVEhFUl9CQVNFCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMjAwMDApCisKKy8qIEV0aGVybmV0IHBvcnQgYWRkcmVzcyAqLworI2RlZmluZSBSQlRYNDkyN19FVEhFUl9BRERSCShSQlRYNDkyN19FVEhFUl9CQVNFICsgMHgyODApCisKKyNkZWZpbmUgcmJ0eDQ5MjdfaW1hc2tfYWRkcgkoKF9fdTggX19pb21lbSAqKVJCVFg0OTI3X0lNQVNLX0FERFIpCisjZGVmaW5lIHJidHg0OTI3X2ltc3RhdF9hZGRyCSgoX191OCBfX2lvbWVtICopUkJUWDQ5MjdfSU1TVEFUX0FERFIpCisjZGVmaW5lIHJidHg0OTI3X3NvZnRyZXNldF9hZGRyCSgoX191OCBfX2lvbWVtICopUkJUWDQ5MjdfU09GVFJFU0VUX0FERFIpCisjZGVmaW5lIHJidHg0OTI3X3NvZnRyZXNldGxvY2tfYWRkcglcCisJCQkJKChfX3U4IF9faW9tZW0gKilSQlRYNDkyN19TT0ZUUkVTRVRMT0NLX0FERFIpCisjZGVmaW5lIHJidHg0OTI3X3BjaXJlc2V0X2FkZHIJKChfX3U4IF9faW9tZW0gKilSQlRYNDkyN19QQ0lSRVNFVF9BRERSKQogCiAvKiBiaXRzIGZvciBJU1RBVC9JTUFTSy9JTVNUQVQgKi8KICNkZWZpbmUgUkJUWDQ5MjdfSU5UQl9QQ0lECTAKQEAgLTYyLDEzICs3OCw3IEBACiAjZGVmaW5lIFJCVFg0OTI3X0lTQV9JT19PRkZTRVQgMAogI2VuZGlmCiAKLSNkZWZpbmUgUkJUWDQ5MjdfU1dfUkVTRVRfRE8gICAgICAgICAodm9pZCBfX2lvbWVtICopMHhiYzAwZjAwMFVMCi0jZGVmaW5lIFJCVFg0OTI3X1NXX1JFU0VUX0RPX1NFVCAgICAgICAgICAgICAgICAweDAxCi0KLSNkZWZpbmUgUkJUWDQ5MjdfU1dfUkVTRVRfRU5BQkxFICAgICAodm9pZCBfX2lvbWVtICopMHhiYzAwZjAwMlVMCi0jZGVmaW5lIFJCVFg0OTI3X1NXX1JFU0VUX0VOQUJMRV9TRVQgICAgICAgICAgICAweDAxCi0KLSNkZWZpbmUgUkJUWDQ5MjdfUlRMXzgwMTlfQkFTRSAoMHgxYzAyMDI4MCAtIFJCVFg0OTI3X0lTQV9JT19PRkZTRVQpCisjZGVmaW5lIFJCVFg0OTI3X1JUTF84MDE5X0JBU0UgKFJCVFg0OTI3X0VUSEVSX0FERFIgLSBtaXBzX2lvX3BvcnRfYmFzZSkKICNkZWZpbmUgUkJUWDQ5MjdfUlRMXzgwMTlfSVJRICAoVFhYOV9JUlFfQkFTRSArIFRYNDkyN19JUl9JTlQoMykpCiAKIHZvaWQgcmJ0eDQ5MjdfcHJvbV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eHg5L3JidHg0OTM4LmggYi9pbmNsdWRlL2FzbS1taXBzL3R4eDkvcmJ0eDQ5MzguaAppbmRleCAyZjVkNWU3Li45ZjA0NDFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3R4eDkvcmJ0eDQ5MzguaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R4eDkvcmJ0eDQ5MzguaApAQCAtMTUsMzUgKzE1LDMxIEBACiAjaW5jbHVkZSA8YXNtL3R4eDlpcnEuaD4KICNpbmNsdWRlIDxhc20vdHh4OS90eDQ5MzguaD4KIAotLyogQ1MgKi8KLSNkZWZpbmUgUkJUWDQ5MzhfQ0UwCTB4MWMwMDAwMDAJLyogNjRNICovCi0jZGVmaW5lIFJCVFg0OTM4X0NFMgkweDE3ZjAwMDAwCS8qIDFNICovCi0KIC8qIEFkZHJlc3MgbWFwICovCi0jZGVmaW5lIFJCVFg0OTM4X0ZQR0FfUkVHX0FERFIJKEtTRUcxICsgUkJUWDQ5MzhfQ0UyICsgMHgwMDAwMDAwMCkKLSNkZWZpbmUgUkJUWDQ5MzhfRlBHQV9SRVZfQUREUgkoS1NFRzEgKyBSQlRYNDkzOF9DRTIgKyAweDAwMDAwMDAyKQotI2RlZmluZSBSQlRYNDkzOF9DT05GSUcxX0FERFIJKEtTRUcxICsgUkJUWDQ5MzhfQ0UyICsgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUkJUWDQ5MzhfQ09ORklHMl9BRERSCShLU0VHMSArIFJCVFg0OTM4X0NFMiArIDB4MDAwMDAwMDYpCi0jZGVmaW5lIFJCVFg0OTM4X0NPTkZJRzNfQUREUgkoS1NFRzEgKyBSQlRYNDkzOF9DRTIgKyAweDAwMDAwMDA4KQotI2RlZmluZSBSQlRYNDkzOF9MRURfQUREUgkoS1NFRzEgKyBSQlRYNDkzOF9DRTIgKyAweDAwMDAxMDAwKQotI2RlZmluZSBSQlRYNDkzOF9ESVBTV19BRERSCShLU0VHMSArIFJCVFg0OTM4X0NFMiArIDB4MDAwMDEwMDIpCi0jZGVmaW5lIFJCVFg0OTM4X0JESVBTV19BRERSCShLU0VHMSArIFJCVFg0OTM4X0NFMiArIDB4MDAwMDEwMDQpCi0jZGVmaW5lIFJCVFg0OTM4X0lNQVNLX0FERFIJKEtTRUcxICsgUkJUWDQ5MzhfQ0UyICsgMHgwMDAwMjAwMCkKLSNkZWZpbmUgUkJUWDQ5MzhfSU1BU0syX0FERFIJKEtTRUcxICsgUkJUWDQ5MzhfQ0UyICsgMHgwMDAwMjAwMikKLSNkZWZpbmUgUkJUWDQ5MzhfSU5UUE9MX0FERFIJKEtTRUcxICsgUkJUWDQ5MzhfQ0UyICsgMHgwMDAwMjAwNCkKLSNkZWZpbmUgUkJUWDQ5MzhfSVNUQVRfQUREUgkoS1NFRzEgKyBSQlRYNDkzOF9DRTIgKyAweDAwMDAyMDA2KQotI2RlZmluZSBSQlRYNDkzOF9JU1RBVDJfQUREUgkoS1NFRzEgKyBSQlRYNDkzOF9DRTIgKyAweDAwMDAyMDA4KQotI2RlZmluZSBSQlRYNDkzOF9JTVNUQVRfQUREUgkoS1NFRzEgKyBSQlRYNDkzOF9DRTIgKyAweDAwMDAyMDBhKQotI2RlZmluZSBSQlRYNDkzOF9JTVNUQVQyX0FERFIJKEtTRUcxICsgUkJUWDQ5MzhfQ0UyICsgMHgwMDAwMjAwYykKLSNkZWZpbmUgUkJUWDQ5MzhfU09GVElOVF9BRERSCShLU0VHMSArIFJCVFg0OTM4X0NFMiArIDB4MDAwMDMwMDApCi0jZGVmaW5lIFJCVFg0OTM4X1BJT1NFTF9BRERSCShLU0VHMSArIFJCVFg0OTM4X0NFMiArIDB4MDAwMDUwMDApCi0jZGVmaW5lIFJCVFg0OTM4X1NQSUNTX0FERFIJKEtTRUcxICsgUkJUWDQ5MzhfQ0UyICsgMHgwMDAwNTAwMikKLSNkZWZpbmUgUkJUWDQ5MzhfU0ZQV1JfQUREUgkoS1NFRzEgKyBSQlRYNDkzOF9DRTIgKyAweDAwMDA1MDA4KQotI2RlZmluZSBSQlRYNDkzOF9TRlZPTF9BRERSCShLU0VHMSArIFJCVFg0OTM4X0NFMiArIDB4MDAwMDUwMGEpCi0jZGVmaW5lIFJCVFg0OTM4X1NPRlRSRVNFVF9BRERSCShLU0VHMSArIFJCVFg0OTM4X0NFMiArIDB4MDAwMDcwMDApCi0jZGVmaW5lIFJCVFg0OTM4X1NPRlRSRVNFVExPQ0tfQUREUgkoS1NFRzEgKyBSQlRYNDkzOF9DRTIgKyAweDAwMDA3MDAyKQotI2RlZmluZSBSQlRYNDkzOF9QQ0lSRVNFVF9BRERSCShLU0VHMSArIFJCVFg0OTM4X0NFMiArIDB4MDAwMDcwMDQpCi0jZGVmaW5lIFJCVFg0OTM4X0VUSEVSX0JBU0UJKEtTRUcxICsgUkJUWDQ5MzhfQ0UyICsgMHgwMDAyMDAwMCkKKyNkZWZpbmUgUkJUWDQ5MzhfRlBHQV9SRUdfQUREUgkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDAwMDAwKQorI2RlZmluZSBSQlRYNDkzOF9GUEdBX1JFVl9BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDAwMDIpCisjZGVmaW5lIFJCVFg0OTM4X0NPTkZJRzFfQUREUgkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDAwMDA0KQorI2RlZmluZSBSQlRYNDkzOF9DT05GSUcyX0FERFIJKElPX0JBU0UgKyBUWFg5X0NFKDIpICsgMHgwMDAwMDAwNikKKyNkZWZpbmUgUkJUWDQ5MzhfQ09ORklHM19BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDAwMDgpCisjZGVmaW5lIFJCVFg0OTM4X0xFRF9BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDEwMDApCisjZGVmaW5lIFJCVFg0OTM4X0RJUFNXX0FERFIJKElPX0JBU0UgKyBUWFg5X0NFKDIpICsgMHgwMDAwMTAwMikKKyNkZWZpbmUgUkJUWDQ5MzhfQkRJUFNXX0FERFIJKElPX0JBU0UgKyBUWFg5X0NFKDIpICsgMHgwMDAwMTAwNCkKKyNkZWZpbmUgUkJUWDQ5MzhfSU1BU0tfQUREUgkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDAyMDAwKQorI2RlZmluZSBSQlRYNDkzOF9JTUFTSzJfQUREUgkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDAyMDAyKQorI2RlZmluZSBSQlRYNDkzOF9JTlRQT0xfQUREUgkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDAyMDA0KQorI2RlZmluZSBSQlRYNDkzOF9JU1RBVF9BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDIwMDYpCisjZGVmaW5lIFJCVFg0OTM4X0lTVEFUMl9BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDIwMDgpCisjZGVmaW5lIFJCVFg0OTM4X0lNU1RBVF9BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDIwMGEpCisjZGVmaW5lIFJCVFg0OTM4X0lNU1RBVDJfQUREUgkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDAyMDBjKQorI2RlZmluZSBSQlRYNDkzOF9TT0ZUSU5UX0FERFIJKElPX0JBU0UgKyBUWFg5X0NFKDIpICsgMHgwMDAwMzAwMCkKKyNkZWZpbmUgUkJUWDQ5MzhfUElPU0VMX0FERFIJKElPX0JBU0UgKyBUWFg5X0NFKDIpICsgMHgwMDAwNTAwMCkKKyNkZWZpbmUgUkJUWDQ5MzhfU1BJQ1NfQUREUgkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDA1MDAyKQorI2RlZmluZSBSQlRYNDkzOF9TRlBXUl9BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDUwMDgpCisjZGVmaW5lIFJCVFg0OTM4X1NGVk9MX0FERFIJKElPX0JBU0UgKyBUWFg5X0NFKDIpICsgMHgwMDAwNTAwYSkKKyNkZWZpbmUgUkJUWDQ5MzhfU09GVFJFU0VUX0FERFIJKElPX0JBU0UgKyBUWFg5X0NFKDIpICsgMHgwMDAwNzAwMCkKKyNkZWZpbmUgUkJUWDQ5MzhfU09GVFJFU0VUTE9DS19BRERSCShJT19CQVNFICsgVFhYOV9DRSgyKSArIDB4MDAwMDcwMDIpCisjZGVmaW5lIFJCVFg0OTM4X1BDSVJFU0VUX0FERFIJKElPX0JBU0UgKyBUWFg5X0NFKDIpICsgMHgwMDAwNzAwNCkKKyNkZWZpbmUgUkJUWDQ5MzhfRVRIRVJfQkFTRQkoSU9fQkFTRSArIFRYWDlfQ0UoMikgKyAweDAwMDIwMDAwKQogCiAvKiBFdGhlcm5ldCBwb3J0IGFkZHJlc3MgKEp1bXBlcmxlc3MgTW9kZSAoVzEyOk9wZW4pKSAqLwogI2RlZmluZSBSQlRYNDkzOF9FVEhFUl9BRERSCShSQlRYNDkzOF9FVEhFUl9CQVNFICsgMHgyODApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3R4eDkvdHgzOTI3LmggYi9pbmNsdWRlL2FzbS1taXBzL3R4eDkvdHgzOTI3LmgKaW5kZXggY2E0MTRjNy4uZWE3OWUxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy90eHg5L3R4MzkyNy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdHh4OS90eDM5MjcuaApAQCAtMTAsMTcgKzEwLDE4IEBACiAKICNpbmNsdWRlIDxhc20vdHh4OS90eHg5MjcuaD4KIAotI2RlZmluZSBUWDM5MjdfU0RSQU1DX1JFRwkweGZmZmU4MDAwCi0jZGVmaW5lIFRYMzkyN19ST01DX1JFRwkJMHhmZmZlOTAwMAotI2RlZmluZSBUWDM5MjdfRE1BX1JFRwkJMHhmZmZlYjAwMAotI2RlZmluZSBUWDM5MjdfSVJDX1JFRwkJMHhmZmZlYzAwMAotI2RlZmluZSBUWDM5MjdfUENJQ19SRUcJCTB4ZmZmZWQwMDAKLSNkZWZpbmUgVFgzOTI3X0NDRkdfUkVHCQkweGZmZmVlMDAwCisjZGVmaW5lIFRYMzkyN19SRUdfQkFTRQkweGZmZmUwMDAwVUwKKyNkZWZpbmUgVFgzOTI3X1NEUkFNQ19SRUcJKFRYMzkyN19SRUdfQkFTRSArIDB4ODAwMCkKKyNkZWZpbmUgVFgzOTI3X1JPTUNfUkVHCQkoVFgzOTI3X1JFR19CQVNFICsgMHg5MDAwKQorI2RlZmluZSBUWDM5MjdfRE1BX1JFRwkJKFRYMzkyN19SRUdfQkFTRSArIDB4YjAwMCkKKyNkZWZpbmUgVFgzOTI3X0lSQ19SRUcJCShUWDM5MjdfUkVHX0JBU0UgKyAweGMwMDApCisjZGVmaW5lIFRYMzkyN19QQ0lDX1JFRwkJKFRYMzkyN19SRUdfQkFTRSArIDB4ZDAwMCkKKyNkZWZpbmUgVFgzOTI3X0NDRkdfUkVHCQkoVFgzOTI3X1JFR19CQVNFICsgMHhlMDAwKQogI2RlZmluZSBUWDM5MjdfTlJfVE1SCTMKLSNkZWZpbmUgVFgzOTI3X1RNUl9SRUcoY2gpCSgweGZmZmVmMDAwICsgKGNoKSAqIDB4MTAwKQorI2RlZmluZSBUWDM5MjdfVE1SX1JFRyhjaCkJKFRYMzkyN19SRUdfQkFTRSArIDB4ZjAwMCArIChjaCkgKiAweDEwMCkKICNkZWZpbmUgVFgzOTI3X05SX1NJTwkyCi0jZGVmaW5lIFRYMzkyN19TSU9fUkVHKGNoKQkoMHhmZmZlZjMwMCArIChjaCkgKiAweDEwMCkKLSNkZWZpbmUgVFgzOTI3X1BJT19SRUcJCTB4ZmZmZWY1MDAKKyNkZWZpbmUgVFgzOTI3X1NJT19SRUcoY2gpCShUWDM5MjdfUkVHX0JBU0UgKyAweGYzMDAgKyAoY2gpICogMHgxMDApCisjZGVmaW5lIFRYMzkyN19QSU9fUkVHCQkoVFgzOTI3X1JFR19CQVNFICsgMHhmNTAwKQogCiBzdHJ1Y3QgdHgzOTI3X3NkcmFtY19yZWcgewogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3JbOF07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3R4eDkvdHg0OTI3LmggYi9pbmNsdWRlL2FzbS1taXBzL3R4eDkvdHg0OTI3LmgKaW5kZXggNDZkNjBhZi4uY2ViNGI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy90eHg5L3R4NDkyNy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdHh4OS90eDQ5MjcuaApAQCAtMzIsMzIgKzMyLDQ2IEBACiAjaW5jbHVkZSA8YXNtL3R4eDlpcnEuaD4KICNpbmNsdWRlIDxhc20vdHh4OS90eDQ5MjdwY2ljLmg+CiAKLSNkZWZpbmUgVFg0OTI3X1NEUkFNQ19SRUcJMHhmZjFmODAwMAotI2RlZmluZSBUWDQ5MjdfRUJVU0NfUkVHCTB4ZmYxZjkwMDAKLSNkZWZpbmUgVFg0OTI3X1BDSUNfUkVHCQkweGZmMWZkMDAwCi0jZGVmaW5lIFRYNDkyN19DQ0ZHX1JFRwkJMHhmZjFmZTAwMAotI2RlZmluZSBUWDQ5MjdfSVJDX1JFRwkJMHhmZjFmZjYwMAorI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBUWDQ5MjdfUkVHX0JBU0UJMHhmZmZmZmZmZmZmMWYwMDAwVUwKKyNlbHNlCisjZGVmaW5lIFRYNDkyN19SRUdfQkFTRQkweGZmMWYwMDAwVUwKKyNlbmRpZgorI2RlZmluZSBUWDQ5MjdfUkVHX1NJWkUJMHgwMDAxMDAwMAorCisjZGVmaW5lIFRYNDkyN19TRFJBTUNfUkVHCShUWDQ5MjdfUkVHX0JBU0UgKyAweDgwMDApCisjZGVmaW5lIFRYNDkyN19FQlVTQ19SRUcJKFRYNDkyN19SRUdfQkFTRSArIDB4OTAwMCkKKyNkZWZpbmUgVFg0OTI3X1BDSUNfUkVHCQkoVFg0OTI3X1JFR19CQVNFICsgMHhkMDAwKQorI2RlZmluZSBUWDQ5MjdfQ0NGR19SRUcJCShUWDQ5MjdfUkVHX0JBU0UgKyAweGUwMDApCisjZGVmaW5lIFRYNDkyN19JUkNfUkVHCQkoVFg0OTI3X1JFR19CQVNFICsgMHhmNjAwKQogI2RlZmluZSBUWDQ5MjdfTlJfVE1SCTMKLSNkZWZpbmUgVFg0OTI3X1RNUl9SRUcoY2gpCSgweGZmMWZmMDAwICsgKGNoKSAqIDB4MTAwKQorI2RlZmluZSBUWDQ5MjdfVE1SX1JFRyhjaCkJKFRYNDkyN19SRUdfQkFTRSArIDB4ZjAwMCArIChjaCkgKiAweDEwMCkKKyNkZWZpbmUgVFg0OTI3X05SX1NJTwkyCisjZGVmaW5lIFRYNDkyN19TSU9fUkVHKGNoKQkoVFg0OTI3X1JFR19CQVNFICsgMHhmMzAwICsgKGNoKSAqIDB4MTAwKQorI2RlZmluZSBUWDQ5MjdfUElPX1JFRwkJKFRYNDkyN19SRUdfQkFTRSArIDB4ZjUwMCkKIAogI2RlZmluZSBUWDQ5MjdfSVJfSU5UKG4pCSgyICsgKG4pKQogI2RlZmluZSBUWDQ5MjdfSVJfU0lPKG4pCSg4ICsgKG4pKQogI2RlZmluZSBUWDQ5MjdfSVJfUENJQwkJMTYKKyNkZWZpbmUgVFg0OTI3X05VTV9JUl9UTVIJMworI2RlZmluZSBUWDQ5MjdfSVJfVE1SKG4pCSgxNyArIChuKSkKICNkZWZpbmUgVFg0OTI3X0lSX1BDSUVSUgkyMgogI2RlZmluZSBUWDQ5MjdfTlVNX0lSCTMyCiAKICNkZWZpbmUgVFg0OTI3X0lSQ19JTlQJMgkvKiBJUFsyXSBpbiBTdGF0dXMgcmVnaXN0ZXIgKi8KIAorI2RlZmluZSBUWDQ5MjdfTlVNX1BJTwkxNgorCiBzdHJ1Y3QgdHg0OTI3X3NkcmFtY19yZWcgewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBjcls0XTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgdW51c2VkMFs0XTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgdHI7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHVudXNlZDFbMl07Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGNtZDsKKwl1NjQgY3JbNF07CisJdTY0IHVudXNlZDBbNF07CisJdTY0IHRyOworCXU2NCB1bnVzZWQxWzJdOworCXU2NCBjbWQ7CiB9OwogCiBzdHJ1Y3QgdHg0OTI3X2VidXNjX3JlZyB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGNyWzhdOworCXU2NCBjcls4XTsKIH07CiAKIHN0cnVjdCB0eDQ5MjdfY2NmZ19yZWcgewpAQCAtMTYwLDEyICsxNzQsMjggQEAKICNkZWZpbmUgVFg0OTI3X0NMS0NUUl9TSU8wUlNUCTB4MDAwMDAwMDIKICNkZWZpbmUgVFg0OTI3X0NMS0NUUl9TSU8xUlNUCTB4MDAwMDAwMDEKIAotI2RlZmluZSB0eDQ5Mjdfc2RyYW1jcHRyCSgoc3RydWN0IHR4NDkyN19zZHJhbWNfcmVnICopVFg0OTI3X1NEUkFNQ19SRUcpCisjZGVmaW5lIHR4NDkyN19zZHJhbWNwdHIgXAorCQkoKHN0cnVjdCB0eDQ5Mjdfc2RyYW1jX3JlZyBfX2lvbWVtICopVFg0OTI3X1NEUkFNQ19SRUcpCiAjZGVmaW5lIHR4NDkyN19wY2ljcHRyIFwKIAkJKChzdHJ1Y3QgdHg0OTI3X3BjaWNfcmVnIF9faW9tZW0gKilUWDQ5MjdfUENJQ19SRUcpCiAjZGVmaW5lIHR4NDkyN19jY2ZncHRyIFwKIAkJKChzdHJ1Y3QgdHg0OTI3X2NjZmdfcmVnIF9faW9tZW0gKilUWDQ5MjdfQ0NGR19SRUcpCi0jZGVmaW5lIHR4NDkyN19lYnVzY3B0cgkJKChzdHJ1Y3QgdHg0OTI3X2VidXNjX3JlZyAqKVRYNDkyN19FQlVTQ19SRUcpCisjZGVmaW5lIHR4NDkyN19lYnVzY3B0ciBcCisJCSgoc3RydWN0IHR4NDkyN19lYnVzY19yZWcgX19pb21lbSAqKVRYNDkyN19FQlVTQ19SRUcpCisjZGVmaW5lIHR4NDkyN19waW9wdHIJCSgoc3RydWN0IHR4eDlfcGlvX3JlZyBfX2lvbWVtICopVFg0OTI3X1BJT19SRUcpCisKKyNkZWZpbmUgVFg0OTI3X1JFVl9QQ09ERSgpCVwKKwkoKF9fdTMyKV9fcmF3X3JlYWRxKCZ0eDQ5MjdfY2NmZ3B0ci0+Y3JpcikgPj4gMTYpCisKKyNkZWZpbmUgVFg0OTI3X1NEUkFNQ19DUihjaCkJX19yYXdfcmVhZHEoJnR4NDkyN19zZHJhbWNwdHItPmNyWyhjaCldKQorI2RlZmluZSBUWDQ5MjdfU0RSQU1DX0JBKGNoKQkoKFRYNDkyN19TRFJBTUNfQ1IoY2gpID4+IDQ5KSA8PCAyMSkKKyNkZWZpbmUgVFg0OTI3X1NEUkFNQ19TSVpFKGNoKQlcCisJKCgoKFRYNDkyN19TRFJBTUNfQ1IoY2gpID4+IDMzKSAmIDB4N2ZmZikgKyAxKSA8PCAyMSkKKworI2RlZmluZSBUWDQ5MjdfRUJVU0NfQ1IoY2gpCV9fcmF3X3JlYWRxKCZ0eDQ5MjdfZWJ1c2NwdHItPmNyWyhjaCldKQorI2RlZmluZSBUWDQ5MjdfRUJVU0NfQkEoY2gpCSgoVFg0OTI3X0VCVVNDX0NSKGNoKSA+PiA0OCkgPDwgMjApCisjZGVmaW5lIFRYNDkyN19FQlVTQ19TSVpFKGNoKQlcCisJKDB4MDAxMDAwMDAgPDwgKCh1bnNpZ25lZCBsb25nKShUWDQ5MjdfRUJVU0NfQ1IoY2gpID4+IDgpICYgMHhmKSkKIAogLyogdXRpbGl0aWVzICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdHh4OV9jbGVhcjY0KF9fdTY0IF9faW9tZW0gKmFkciwgX191NjQgYml0cykKQEAgLTIxMiw2ICsyNDIsMTEgQEAKIAkJICAgICAgICZ0eDQ5MjdfY2NmZ3B0ci0+Y2NmZyk7CiB9CiAKK3Vuc2lnbmVkIGludCB0eDQ5MjdfZ2V0X21lbV9zaXplKHZvaWQpOwordm9pZCB0eDQ5Mjdfd2RyX2luaXQodm9pZCk7Cit2b2lkIHR4NDkyN19zZXR1cCh2b2lkKTsKK3ZvaWQgdHg0OTI3X3RpbWVfaW5pdCh1bnNpZ25lZCBpbnQgdG1ybnIpOwordm9pZCB0eDQ5Mjdfc2V0dXBfc2VyaWFsKHZvaWQpOwogaW50IHR4NDkyN19yZXBvcnRfcGNpY2xrKHZvaWQpOwogaW50IHR4NDkyN19wY2ljbGs2Nl9zZXR1cCh2b2lkKTsKIHZvaWQgdHg0OTI3X2lycV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eHg5L3R4NDkzOC5oIGIvaW5jbHVkZS9hc20tbWlwcy90eHg5L3R4NDkzOC5oCmluZGV4IDEyZGU2OGEuLjFlZDk2OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdHh4OS90eDQ5MzguaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R4eDkvdHg0OTM4LmgKQEAgLTE1LDIwICsxNSwxMSBAQAogLyogc29tZSBjb250cm9sbGVycyBhcmUgY29tcGF0aWJsZSB3aXRoIDQ5MjcgKi8KICNpbmNsdWRlIDxhc20vdHh4OS90eDQ5MjcuaD4KIAotI2RlZmluZSB0eDQ5MzhfcmVhZF9uZm1jKGFkZHIpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZGRyKSkKLSNkZWZpbmUgdHg0OTM4X3dyaXRlX25mbWMoYiwgYWRkcikgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGFkZHIpKSA9IChiKQotCi0jZGVmaW5lIFRYNDkzOF9QQ0lJT18wIDB4MTAwMDAwMDAKLSNkZWZpbmUgVFg0OTM4X1BDSUlPXzEgMHgwMTAxMDAwMAotI2RlZmluZSBUWDQ5MzhfUENJTUVNXzAgMHgwODAwMDAwMAotI2RlZmluZSBUWDQ5MzhfUENJTUVNXzEgMHgxMTAwMDAwMAotCi0jZGVmaW5lIFRYNDkzOF9QQ0lJT19TSVpFXzAgMHgwMTAwMDAwMAotI2RlZmluZSBUWDQ5MzhfUENJSU9fU0laRV8xIDB4MDAwMTAwMDAKLSNkZWZpbmUgVFg0OTM4X1BDSU1FTV9TSVpFXzAgMHgwODAwMDAwMAotI2RlZmluZSBUWDQ5MzhfUENJTUVNX1NJWkVfMSAweDAwMDEwMDAwCi0KLSNkZWZpbmUgVFg0OTM4X1JFR19CQVNFCTB4ZmYxZjAwMDAgLyogPT0gVFg0OTM3X1JFR19CQVNFICovCisjaWZkZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIFRYNDkzOF9SRUdfQkFTRQkweGZmZmZmZmZmZmYxZjAwMDBVTCAvKiA9PSBUWDQ5MzdfUkVHX0JBU0UgKi8KKyNlbHNlCisjZGVmaW5lIFRYNDkzOF9SRUdfQkFTRQkweGZmMWYwMDAwVUwgLyogPT0gVFg0OTM3X1JFR19CQVNFICovCisjZW5kaWYKICNkZWZpbmUgVFg0OTM4X1JFR19TSVpFCTB4MDAwMTAwMDAgLyogPT0gVFg0OTM3X1JFR19TSVpFICovCiAKIC8qIE5ERk1DLCBTUkFNQywgUENJQzEsIFNQSUM6IFRYNDkzOCBvbmx5ICovCkBAIC00OSwxNDkgKzQwLDggQEAKICNkZWZpbmUgVFg0OTM4X0FDTENfUkVHCQkoVFg0OTM4X1JFR19CQVNFICsgMHhmNzAwKQogI2RlZmluZSBUWDQ5MzhfU1BJX1JFRwkJKFRYNDkzOF9SRUdfQkFTRSArIDB4ZjgwMCkKIAotI2RlZmluZSBfQ09OU1Q2NChjKQljIyN1bGwKLQotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotI2lmZGVmIF9fQklHX0VORElBTgotI2RlZmluZSBlbmRpYW5fZGVmX2wyKGUxLCBlMikJXAotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZTEsIGUyCi0jZGVmaW5lIGVuZGlhbl9kZWZfczIoZTEsIGUyKQlcCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgZTEsIGUyCi0jZGVmaW5lIGVuZGlhbl9kZWZfc2IyKGUxLCBlMiwgZTMpCVwKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBlMTt2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGUyLCBlMwotI2RlZmluZSBlbmRpYW5fZGVmX2IycyhlMSwgZTIsIGUzKQlcCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBlMSwgZTI7dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgZTMKLSNkZWZpbmUgZW5kaWFuX2RlZl9iNChlMSwgZTIsIGUzLCBlNCkJXAotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZTEsIGUyLCBlMywgZTQKLSNlbHNlCi0jZGVmaW5lIGVuZGlhbl9kZWZfbDIoZTEsIGUyKQlcCi0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBlMiwgZTEKLSNkZWZpbmUgZW5kaWFuX2RlZl9zMihlMSwgZTIpCVwKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBlMiwgZTEKLSNkZWZpbmUgZW5kaWFuX2RlZl9zYjIoZTEsIGUyLCBlMykJXAotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZTMsIGUyO3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGUxCi0jZGVmaW5lIGVuZGlhbl9kZWZfYjJzKGUxLCBlMiwgZTMpCVwKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBlMzt2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGUyLCBlMQotI2RlZmluZSBlbmRpYW5fZGVmX2I0KGUxLCBlMiwgZTMsIGU0KQlcCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBlNCwgZTMsIGUyLCBlMQotI2VuZGlmCi0KLQotc3RydWN0IHR4NDkzOF9zZHJhbWNfcmVnIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgY3JbNF07Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHVudXNlZDBbNF07Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHRyOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnVzZWQxWzJdOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBjbWQ7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHNmY21kOwotfTsKLQotc3RydWN0IHR4NDkzOF9lYnVzY19yZWcgewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBjcls4XTsKLX07Ci0KLXN0cnVjdCB0eDQ5MzhfZG1hX3JlZyB7Ci0Jc3RydWN0IHR4NDkzOF9kbWFfY2hfcmVnIHsKLQkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGNoYTsKLQkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIHNhcjsKLQkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGRhcjsKLQkJZW5kaWFuX2RlZl9sMih1bnVzZWQwLCBjbnRyKTsKLQkJZW5kaWFuX2RlZl9sMih1bnVzZWQxLCBzYWlyKTsKLQkJZW5kaWFuX2RlZl9sMih1bnVzZWQyLCBkYWlyKTsKLQkJZW5kaWFuX2RlZl9sMih1bnVzZWQzLCBjY3IpOwotCQllbmRpYW5fZGVmX2wyKHVudXNlZDQsIGNzcik7Ci0JfSBjaFs0XTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgZGJyWzhdOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyB0ZGhyOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBtaWRyOwotCWVuZGlhbl9kZWZfbDIodW51c2VkMCwgbWNyKTsKLX07Ci0KLXN0cnVjdCB0eDQ5MzhfYWNsY19yZWcgewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWNjdGxlbjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFjY3RsZGlzOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWNyZWdhY2M7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQwOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWNpbnRzdHM7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBhY2ludG1zdHM7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBhY2ludGVuOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWNpbnRkaXM7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBhY3NlbWFwaDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDFbN107Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBhY2dwaWRhdDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFjZ3BvZGF0OwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWNzbHRlbjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFjc2x0ZGlzOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWNmaWZvc3RzOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMlsxMV07Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBhY2RtYXN0czsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFjZG1hc2VsOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkM1s2XTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFjYXVkb2RhdDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFjc3VycmRhdDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFjY2VudGRhdDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFjbGZlZGF0OwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWNhdWRpYXQ7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQ0OwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWNtb2RvYXQ7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBhY21vZGlkYXQ7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQ1WzE1XTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFjcmV2aWQ7Ci19OwotCi0KLXN0cnVjdCB0eDQ5MzhfdG1yX3JlZyB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0Y3I7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0aXNyOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3ByYTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNwcmI7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpdG1yOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMFszXTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNjZHI7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQxWzNdOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGdtcjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVudXNlZDJbM107Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB3dG1yOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkM1s0M107Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0cnI7Ci19OwotCi1zdHJ1Y3QgdHg0OTM4X3Npb19yZWcgewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbGNyOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGljcjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGRpc3I7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjaXNyOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZmNyOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZmxjcjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGJncjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHRmaWZvOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcmZpZm87Ci19OwotCi1zdHJ1Y3QgdHg0OTM4X25kZm1jX3JlZyB7Ci0JZW5kaWFuX2RlZl9sMih1bnVzZWQwLCBkdHIpOwotCWVuZGlhbl9kZWZfbDIodW51c2VkMSwgbWNyKTsKLQllbmRpYW5fZGVmX2wyKHVudXNlZDIsIHNyKTsKLQllbmRpYW5fZGVmX2wyKHVudXNlZDMsIGlzcik7Ci0JZW5kaWFuX2RlZl9sMih1bnVzZWQ0LCBpbXIpOwotCWVuZGlhbl9kZWZfbDIodW51c2VkNSwgc3ByKTsKLQllbmRpYW5fZGVmX2wyKHVudXNlZDYsIHJzdHIpOwotfTsKLQotc3RydWN0IHR4NDkzOF9zcGlfcmVnIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG1jcjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNyMDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNyMTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGZzOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdW51c2VkMTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNyOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZHI7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB1bnVzZWQyOwotfTsKLQogc3RydWN0IHR4NDkzOF9zcmFtY19yZWcgewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBjcjsKKwl1NjQgY3I7CiB9OwogCiBzdHJ1Y3QgdHg0OTM4X2NjZmdfcmVnIHsKQEAgLTIwOSwzNCArNTksNiBAQAogCXU2NCBqbXBhZHI7CiB9OwogCi0jdW5kZWYgZW5kaWFuX2RlZl9sMgotI3VuZGVmIGVuZGlhbl9kZWZfczIKLSN1bmRlZiBlbmRpYW5fZGVmX3NiMgotI3VuZGVmIGVuZGlhbl9kZWZfYjJzCi0jdW5kZWYgZW5kaWFuX2RlZl9iNAotCi0vKgotICogTkRGTUMKLSAqLwotCi0vKiBOREZNQ1IgOiBOREZNQyBNb2RlIENvbnRyb2wgKi8KLSNkZWZpbmUgVFg0OTM4X05ERk1DUl9XRQkweDgwCi0jZGVmaW5lIFRYNDkzOF9OREZNQ1JfRUNDX0FMTAkweDYwCi0jZGVmaW5lIFRYNDkzOF9OREZNQ1JfRUNDX1JFU0VUCTB4NjAKLSNkZWZpbmUgVFg0OTM4X05ERk1DUl9FQ0NfUkVBRAkweDQwCi0jZGVmaW5lIFRYNDkzOF9OREZNQ1JfRUNDX09OCTB4MjAKLSNkZWZpbmUgVFg0OTM4X05ERk1DUl9FQ0NfT0ZGCTB4MDAKLSNkZWZpbmUgVFg0OTM4X05ERk1DUl9DRQkweDEwCi0jZGVmaW5lIFRYNDkzOF9OREZNQ1JfQlNQUlQJMHgwNAotI2RlZmluZSBUWDQ5MzhfTkRGTUNSX0FMRQkweDAyCi0jZGVmaW5lIFRYNDkzOF9OREZNQ1JfQ0xFCTB4MDEKLQotLyogTkRGTUNSIDogTkRGTUMgU3RhdHVzICovCi0jZGVmaW5lIFRYNDkzOF9OREZTUl9CVVNZCTB4ODAKLQotLyogTkRGTUNSIDogTkRGTUMgUmVzZXQgKi8KLSNkZWZpbmUgVFg0OTM4X05ERlJTVFJfUlNUCTB4MDEKLQogLyoKICAqIElSQwogICovCkBAIC0yNjgsMTMgKzkwLDE1IEBACiAKICNkZWZpbmUgVFg0OTM4X0lSQ19JTlQJMgkvKiBJUFsyXSBpbiBTdGF0dXMgcmVnaXN0ZXIgKi8KIAorI2RlZmluZSBUWDQ5MzhfTlVNX1BJTwkxNgorCiAvKgogICogQ0NGRwogICovCiAvKiBDQ0ZHIDogQ2hpcCBDb25maWd1cmF0aW9uICovCi0jZGVmaW5lIFRYNDkzOF9DQ0ZHX1dEUlNUCV9DT05TVDY0KDB4MDAwMDAyMDAwMDAwMDAwMCkKLSNkZWZpbmUgVFg0OTM4X0NDRkdfV0RSRVhFTglfQ09OU1Q2NCgweDAwMDAwMTAwMDAwMDAwMDApCi0jZGVmaW5lIFRYNDkzOF9DQ0ZHX0JDRkdfTUFTSwlfQ09OU1Q2NCgweDAwMDAwMGZmMDAwMDAwMDApCisjZGVmaW5lIFRYNDkzOF9DQ0ZHX1dEUlNUCTB4MDAwMDAyMDAwMDAwMDAwMFVMTAorI2RlZmluZSBUWDQ5MzhfQ0NGR19XRFJFWEVOCTB4MDAwMDAxMDAwMDAwMDAwMFVMTAorI2RlZmluZSBUWDQ5MzhfQ0NGR19CQ0ZHX01BU0sJMHgwMDAwMDBmZjAwMDAwMDAwVUxMCiAjZGVmaW5lIFRYNDkzOF9DQ0ZHX1RJTlRESVMJMHgwMTAwMDAwMAogI2RlZmluZSBUWDQ5MzhfQ0NGR19QQ0k2NgkweDAwODAwMDAwCiAjZGVmaW5lIFRYNDkzOF9DQ0ZHX1BDSU1PREUJMHgwMDQwMDAwMApAQCAtMzEwLDEyICsxMzQsMTIgQEAKICNkZWZpbmUgVFg0OTM4X0NDRkdfQUNFSE9MRAkweDAwMDAwMDAxCiAKIC8qIFBDRkcgOiBQaW4gQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUWDQ5MzhfUENGR19FVEgwX1NFTAlfQ09OU1Q2NCgweDgwMDAwMDAwMDAwMDAwMDApCi0jZGVmaW5lIFRYNDkzOF9QQ0ZHX0VUSDFfU0VMCV9DT05TVDY0KDB4NDAwMDAwMDAwMDAwMDAwMCkKLSNkZWZpbmUgVFg0OTM4X1BDRkdfQVRBX1NFTAlfQ09OU1Q2NCgweDIwMDAwMDAwMDAwMDAwMDApCi0jZGVmaW5lIFRYNDkzOF9QQ0ZHX0lTQV9TRUwJX0NPTlNUNjQoMHgxMDAwMDAwMDAwMDAwMDAwKQotI2RlZmluZSBUWDQ5MzhfUENGR19TUElfU0VMCV9DT05TVDY0KDB4MDgwMDAwMDAwMDAwMDAwMCkKLSNkZWZpbmUgVFg0OTM4X1BDRkdfTkRGX1NFTAlfQ09OU1Q2NCgweDA0MDAwMDAwMDAwMDAwMDApCisjZGVmaW5lIFRYNDkzOF9QQ0ZHX0VUSDBfU0VMCTB4ODAwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBUWDQ5MzhfUENGR19FVEgxX1NFTAkweDQwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgVFg0OTM4X1BDRkdfQVRBX1NFTAkweDIwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgVFg0OTM4X1BDRkdfSVNBX1NFTAkweDEwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgVFg0OTM4X1BDRkdfU1BJX1NFTAkweDA4MDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgVFg0OTM4X1BDRkdfTkRGX1NFTAkweDA0MDAwMDAwMDAwMDAwMDBVTEwKICNkZWZpbmUgVFg0OTM4X1BDRkdfU0RDTEtETFlfTUFTSwkweDMwMDAwMDAwCiAjZGVmaW5lIFRYNDkzOF9QQ0ZHX1NEQ0xLRExZKGQpCSgoZCk8PDI4KQogI2RlZmluZSBUWDQ5MzhfUENGR19TWVNDTEtFTgkweDA4MDAwMDAwCkBAIC0zMzYsOCArMTYwLDggQEAKICNkZWZpbmUgVFg0OTM4X1BDRkdfRE1BU0VMM19TSU8wCTB4MDAwMDAwMDgKIAogLyogQ0xLQ1RSIDogQ2xvY2sgQ29udHJvbCAqLwotI2RlZmluZSBUWDQ5MzhfQ0xLQ1RSX05ERkNLRAlfQ09OU1Q2NCgweDAwMDEwMDAwMDAwMDAwMDApCi0jZGVmaW5lIFRYNDkzOF9DTEtDVFJfTkRGUlNUCV9DT05TVDY0KDB4MDAwMDAwMDEwMDAwMDAwMCkKKyNkZWZpbmUgVFg0OTM4X0NMS0NUUl9OREZDS0QJMHgwMDAxMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIFRYNDkzOF9DTEtDVFJfTkRGUlNUCTB4MDAwMDAwMDEwMDAwMDAwMFVMTAogI2RlZmluZSBUWDQ5MzhfQ0xLQ1RSX0VUSDFDS0QJMHg4MDAwMDAwMAogI2RlZmluZSBUWDQ5MzhfQ0xLQ1RSX0VUSDBDS0QJMHg0MDAwMDAwMAogI2RlZmluZSBUWDQ5MzhfQ0xLQ1RSX1NQSUNLRAkweDIwMDAwMDAwCkBAIC00MjQsMjAgKzI0OCwxNiBAQAogI2RlZmluZSBUWDQ5MzhfRE1BX0NTUl9ERVNFUlIJMHgwMDAwMDAwMgogI2RlZmluZSBUWDQ5MzhfRE1BX0NTUl9TT1JFUlIJMHgwMDAwMDAwMQogCi0jZGVmaW5lIHR4NDkzOF9zZHJhbWNwdHIJKChzdHJ1Y3QgdHg0OTM4X3NkcmFtY19yZWcgKilUWDQ5MzhfU0RSQU1DX1JFRykKLSNkZWZpbmUgdHg0OTM4X2VidXNjcHRyICAgICAgICAgKChzdHJ1Y3QgdHg0OTM4X2VidXNjX3JlZyAqKVRYNDkzOF9FQlVTQ19SRUcpCi0jZGVmaW5lIHR4NDkzOF9kbWFwdHIoY2gpCSgoc3RydWN0IHR4NDkzOF9kbWFfcmVnICopVFg0OTM4X0RNQV9SRUcoY2gpKQotI2RlZmluZSB0eDQ5MzhfbmRmbWNwdHIJCSgoc3RydWN0IHR4NDkzOF9uZGZtY19yZWcgKilUWDQ5MzhfTkRGTUNfUkVHKQorI2RlZmluZSB0eDQ5Mzhfc2RyYW1jcHRyCXR4NDkyN19zZHJhbWNwdHIKKyNkZWZpbmUgdHg0OTM4X2VidXNjcHRyCQl0eDQ5MjdfZWJ1c2NwdHIKICNkZWZpbmUgdHg0OTM4X3BjaWNwdHIJCXR4NDkyN19wY2ljcHRyCiAjZGVmaW5lIHR4NDkzOF9wY2ljMXB0ciBcCiAJCSgoc3RydWN0IHR4NDkyN19wY2ljX3JlZyBfX2lvbWVtICopVFg0OTM4X1BDSUMxX1JFRykKICNkZWZpbmUgdHg0OTM4X2NjZmdwdHIgXAogCQkoKHN0cnVjdCB0eDQ5MzhfY2NmZ19yZWcgX19pb21lbSAqKVRYNDkzOF9DQ0ZHX1JFRykKLSNkZWZpbmUgdHg0OTM4X3Npb3B0cihjaCkJKChzdHJ1Y3QgdHg0OTM4X3Npb19yZWcgKilUWDQ5MzhfU0lPX1JFRyhjaCkpCiAjZGVmaW5lIHR4NDkzOF9waW9wdHIJCSgoc3RydWN0IHR4eDlfcGlvX3JlZyBfX2lvbWVtICopVFg0OTM4X1BJT19SRUcpCi0jZGVmaW5lIHR4NDkzOF9hY2xjcHRyCQkoKHN0cnVjdCB0eDQ5MzhfYWNsY19yZWcgKilUWDQ5MzhfQUNMQ19SRUcpCi0jZGVmaW5lIHR4NDkzOF9zcGlwdHIJCSgoc3RydWN0IHR4NDkzOF9zcGlfcmVnICopVFg0OTM4X1NQSV9SRUcpCi0jZGVmaW5lIHR4NDkzOF9zcmFtY3B0cgkJKChzdHJ1Y3QgdHg0OTM4X3NyYW1jX3JlZyAqKVRYNDkzOF9TUkFNQ19SRUcpCisjZGVmaW5lIHR4NDkzOF9zcmFtY3B0ciBcCisJCSgoc3RydWN0IHR4NDkzOF9zcmFtY19yZWcgX19pb21lbSAqKVRYNDkzOF9TUkFNQ19SRUcpCiAKIAogI2RlZmluZSBUWDQ5MzhfUkVWX1BDT0RFKCkJXApAQCAtNDQ3LDE0ICsyNjcsMTkgQEAKICNkZWZpbmUgdHg0OTM4X2NjZmdfc2V0KGJpdHMpCXR4NDkyN19jY2ZnX3NldChiaXRzKQogI2RlZmluZSB0eDQ5MzhfY2NmZ19jaGFuZ2UoY2hhbmdlLCBuZXcpCXR4NDkyN19jY2ZnX2NoYW5nZShjaGFuZ2UsIG5ldykKIAotI2RlZmluZSBUWDQ5MzhfU0RSQU1DX0JBKGNoKQkoKHR4NDkzOF9zZHJhbWNwdHItPmNyW2NoXSA+PiA0OSkgPDwgMjEpCi0jZGVmaW5lIFRYNDkzOF9TRFJBTUNfU0laRShjaCkJKCgodHg0OTM4X3NkcmFtY3B0ci0+Y3JbY2hdID4+IDMzKSArIDEpIDw8IDIxKQorI2RlZmluZSBUWDQ5MzhfU0RSQU1DX0NSKGNoKQlUWDQ5MjdfU0RSQU1DX0NSKGNoKQorI2RlZmluZSBUWDQ5MzhfU0RSQU1DX0JBKGNoKQlUWDQ5MjdfU0RSQU1DX0JBKGNoKQorI2RlZmluZSBUWDQ5MzhfU0RSQU1DX1NJWkUoY2gpCVRYNDkyN19TRFJBTUNfU0laRShjaCkKIAotI2RlZmluZSBUWDQ5MzhfRUJVU0NfQ1IoY2gpCV9fcmF3X3JlYWRxKCZ0eDQ5MzhfZWJ1c2NwdHItPmNyWyhjaCldKQotI2RlZmluZSBUWDQ5MzhfRUJVU0NfQkEoY2gpCSgodHg0OTM4X2VidXNjcHRyLT5jcltjaF0gPj4gNDgpIDw8IDIwKQotI2RlZmluZSBUWDQ5MzhfRUJVU0NfU0laRShjaCkJXAotCSgweDAwMTAwMDAwIDw8ICgodW5zaWduZWQgbG9uZykodHg0OTM4X2VidXNjcHRyLT5jcltjaF0gPj4gOCkgJiAweGYpKQorI2RlZmluZSBUWDQ5MzhfRUJVU0NfQ1IoY2gpCVRYNDkyN19FQlVTQ19DUihjaCkKKyNkZWZpbmUgVFg0OTM4X0VCVVNDX0JBKGNoKQlUWDQ5MjdfRUJVU0NfQkEoY2gpCisjZGVmaW5lIFRYNDkzOF9FQlVTQ19TSVpFKGNoKQlUWDQ5MjdfRUJVU0NfU0laRShjaCkKIAorI2RlZmluZSB0eDQ5MzhfZ2V0X21lbV9zaXplKCkgdHg0OTI3X2dldF9tZW1fc2l6ZSgpCit2b2lkIHR4NDkzOF93ZHJfaW5pdCh2b2lkKTsKK3ZvaWQgdHg0OTM4X3NldHVwKHZvaWQpOwordm9pZCB0eDQ5MzhfdGltZV9pbml0KHVuc2lnbmVkIGludCB0bXJucik7Cit2b2lkIHR4NDkzOF9zZXR1cF9zZXJpYWwodm9pZCk7CiBpbnQgdHg0OTM4X3JlcG9ydF9wY2ljbGsodm9pZCk7CiB2b2lkIHR4NDkzOF9yZXBvcnRfcGNpMWNsayh2b2lkKTsKIGludCB0eDQ5MzhfcGNpY2xrNjZfc2V0dXAodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2FzbS1jb21wYXQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXNtLWNvbXBhdC5oCmluZGV4IDhlYzJlMWQuLjhmMGZlNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXNtLWNvbXBhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXNtLWNvbXBhdC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIFBQQ19TVEwJCXN0cmluZ2lmeV9pbl9jKHN0ZCkKICNkZWZpbmUgUFBDX0xDTVBJCXN0cmluZ2lmeV9pbl9jKGNtcGRpKQogI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubGxvbmcpCisjZGVmaW5lIFBQQ19MT05HX0FMSUdOCXN0cmluZ2lmeV9pbl9jKC5iYWxpZ24gOCkKICNkZWZpbmUgUFBDX1RMTkVJCXN0cmluZ2lmeV9pbl9jKHRkbmVpKQogI2RlZmluZSBQUENfTExBUlgJc3RyaW5naWZ5X2luX2MobGRhcngpCiAjZGVmaW5lIFBQQ19TVExDWAlzdHJpbmdpZnlfaW5fYyhzdGRjeC4pCkBAIC00Myw2ICs0NCw3IEBACiAjZGVmaW5lIFBQQ19TVEwJCXN0cmluZ2lmeV9pbl9jKHN0dykKICNkZWZpbmUgUFBDX0xDTVBJCXN0cmluZ2lmeV9pbl9jKGNtcHdpKQogI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubG9uZykKKyNkZWZpbmUgUFBDX0xPTkdfQUxJR04Jc3RyaW5naWZ5X2luX2MoLmJhbGlnbiA0KQogI2RlZmluZSBQUENfVExORUkJc3RyaW5naWZ5X2luX2ModHduZWkpCiAjZGVmaW5lIFBQQ19MTEFSWAlzdHJpbmdpZnlfaW5fYyhsd2FyeCkKICNkZWZpbmUgUFBDX1NUTENYCXN0cmluZ2lmeV9pbl9jKHN0d2N4LikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMva2dkYi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9rZ2RiLmgKaW5kZXggYjYxN2RhYy4uMTM5OWNhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rZ2RiLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9rZ2RiLmgKQEAgLTEsNTcgKzEsNjUgQEAKIC8qCi0gKiBrZ2RiLmg6IERlZmluZXMgYW5kIGRlY2xhcmF0aW9ucyBmb3Igc2VyaWFsIGxpbmUgc291cmNlIGxldmVsCi0gKiAgICAgICAgIHJlbW90ZSBkZWJ1Z2dpbmcgb2YgdGhlIExpbnV4IGtlcm5lbCB1c2luZyBnZGIuCisgKiBpbmNsdWRlL2FzbS1wb3dlcnBjL2tnZGIuaAogICoKKyAqIFRoZSBQb3dlclBDICgzMi82NCkgc3BlY2lmaWMgZGVmaW5lcyAvIGV4dGVybnMgZm9yIEtHREIuICBCYXNlZCBvbgorICogdGhlIHByZXZpb3VzIDMyYml0IGFuZCA2NGJpdCBzcGVjaWZpYyBmaWxlcywgd2hpY2ggaGFkIHRoZSBmb2xsb3dpbmcKKyAqIGNvcHlyaWdodHM6CisgKgorICogUFBDNjQgTW9kcyAoQykgMjAwNSBGcmFuayBSb3dhbmQgKGZyb3dhbmRAbXZpc3RhLmNvbSkKKyAqIFBQQyBNb2RzIChDKSAyMDA0IFRvbSBSaW5pICh0cmluaUBtdmlzdGEuY29tKQorICogUFBDIE1vZHMgKEMpIDIwMDMgSm9obiBXaGl0bmV5IChqb2huLndoaXRuZXlAdGltZXN5cy5jb20pCiAgKiBQUEMgTW9kcyAoQykgMTk5OCBNaWNoYWVsIFRlc2NoICh0ZXNjaEBjcy53aXNjLmVkdSkKICAqCisgKgogICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIEF1dGhvcjogVG9tIFJpbmkgPHRyaW5pQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KICAqLwogI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX1BQQ19LR0RCX0gKLSNkZWZpbmUgX1BQQ19LR0RCX0gKKyNpZm5kZWYgX19QT1dFUlBDX0tHREJfSF9fCisjZGVmaW5lIF9fUE9XRVJQQ19LR0RCX0hfXwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0vKiBUaGluZ3Mgc3BlY2lmaWMgdG8gdGhlIGdlbjU1MCBiYWNrZW5kLiAqLwotc3RydWN0IHVhcnRfcG9ydDsKKyNkZWZpbmUgQlJFQUtfSU5TVFJfU0laRQk0CisjZGVmaW5lIEJVRk1BWAkJCSgoTlVNUkVHQllURVMgKiAyKSArIDUxMikKKyNkZWZpbmUgT1VUQlVGTUFYCQkoKE5VTVJFR0JZVEVTICogMikgKyA1MTIpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZ2RiX2JyZWFrcG9pbnQodm9pZCkKK3sKKwlhc20oIi5sb25nIDB4N2Q4MjEwMDgiKTsgLyogdHdnZSByMiwgcjIgKi8KK30KKyNkZWZpbmUgQ0FDSEVfRkxVU0hfSVNfU0FGRQkxCiAKLWV4dGVybiB2b2lkIGdlbjU1MF9wcm9ncmVzcyhjaGFyICosIHVuc2lnbmVkIHNob3J0KTsKLWV4dGVybiB2b2lkIGdlbjU1MF9rZ2RiX21hcF9zY2Modm9pZCk7Ci1leHRlcm4gdm9pZCBnZW41NTBfaW5pdChpbnQsIHN0cnVjdCB1YXJ0X3BvcnQgKik7Ci0KLS8qIFRoaW5ncyBzcGVjaWZpYyB0byB0aGUgcG1hYyBiYWNrZW5kLiAqLwotZXh0ZXJuIHZvaWQgenNfa2dkYl9ob29rKGludCB0dHlfbnVtKTsKLQotLyogVG8gaW5pdCB0aGUga2dkYiBlbmdpbmUuIChjYWxsZWQgYnkgc2VyaWFsIGhvb2spKi8KLWV4dGVybiB2b2lkIHNldF9kZWJ1Z190cmFwcyh2b2lkKTsKLQotLyogVG8gZW50ZXIgdGhlIGRlYnVnZ2VyIGV4cGxpY2l0bHkuICovCi1leHRlcm4gdm9pZCBicmVha3BvaW50KHZvaWQpOwotCi0vKiBGb3IgdGFraW5nIGV4Y2VwdGlvbnMKLSAqIHRoZXNlIGFyZSBkZWZpbmVkIGluIHRyYXBzLmMKLSAqLwotZXh0ZXJuIGludCAoKmRlYnVnZ2VyKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50ICgqZGVidWdnZXJfYnB0KShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50ICgqZGVidWdnZXJfc3N0ZXApKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWV4dGVybiBpbnQgKCpkZWJ1Z2dlcl9pYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50ICgqZGVidWdnZXJfZGFicl9tYXRjaCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHZvaWQgKCpkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLS8qIFdoYXQgd2UgYnJpbmcgdG8gdGhlIHBhcnR5ICovCi1pbnQga2dkYl9icHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50IGtnZGJfc3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotdm9pZCBrZ2RiKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCBrZ2RiX2lhYnJfbWF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50IGtnZGJfZGFicl9tYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KKy8qIFRoZSBudW1iZXIgYnl0ZXMgb2YgcmVnaXN0ZXJzIHdlIGhhdmUgdG8gc2F2ZSBkZXBlbmRzIG9uIGEgZmV3CisgKiB0aGluZ3MuICBGb3IgNjRiaXQgd2UgZGVmYXVsdCB0byBub3QgaW5jbHVkaW5nIHZlY3RvciByZWdpc3RlcnMgYW5kCisgKiB2ZWN0b3Igc3RhdGUgcmVnaXN0ZXJzLiAqLworI2lmZGVmIENPTkZJR19QUEM2NAogLyoKLSAqIGV4dGVybmFsIGxvdy1sZXZlbCBzdXBwb3J0IHJvdXRpbmVzIChpZSBtYWNzZXJpYWwuYykKKyAqIDY0IGJpdCAoOCBieXRlKSByZWdpc3RlcnM6CisgKiAgIDMyIGdwciwgMzIgZnByLCBuaXAsIG1zciwgbGluaywgY3RyCisgKiAzMiBiaXQgKDQgYnl0ZSkgcmVnaXN0ZXJzOgorICogICBjY3IsIHhlciwgZnBzY3IKICAqLwotZXh0ZXJuIHZvaWQga2dkYl9pbnRlcnJ1cHRpYmxlKGludCk7IC8qIGNvbnRyb2wgaW50ZXJydXB0cyBmcm9tIHNlcmlhbCAqLwotZXh0ZXJuIHZvaWQgcHV0RGVidWdDaGFyKGNoYXIpOyAgIC8qIHdyaXRlIGEgc2luZ2xlIGNoYXJhY3RlciAgICAgICovCi1leHRlcm4gY2hhciBnZXREZWJ1Z0NoYXIodm9pZCk7ICAgLyogcmVhZCBhbmQgcmV0dXJuIGEgc2luZ2xlIGNoYXIgKi8KLQorI2RlZmluZSBOVU1SRUdCWVRFUwkJKCg2OCAqIDgpICsgKDMgKiA0KSkKKyNkZWZpbmUgTlVNQ1JJVFJFR0JZVEVTCQkxODQKKyNlbHNlIC8qIENPTkZJR19QUEMzMiAqLworLyogT24gbm9uLUU1MDAgZmFtaWx5IFBQQzMyIHdlIGRldGVybWluZSB0aGUgc2l6ZSBieSBwaWNraW5nIHRoZSBsYXN0CisgKiByZWdpc3RlciB3ZSBuZWVkLCBidXQgb24gRTUwMCB3ZSBza2lwIHNlY3Rpb25zIHNvIHdlIGxpc3Qgd2hhdCB3ZQorICogbmVlZCB0byBzdG9yZSwgYW5kIGFkZCBpdCB1cC4gKi8KKyNpZm5kZWYgQ09ORklHX0U1MDAKKyNkZWZpbmUgTUFYUkVHCQkJKFBUX0ZQU0NSKzEpCisjZWxzZQorLyogMzIgR1BScyAoOCBieXRlcyksIG5pcCwgbXNyLCBjY3IsIGxpbmssIGN0ciwgeGVyLCBhY2MgKDggYnl0ZXMpLCBzcGVmc2NyKi8KKyNkZWZpbmUgTUFYUkVHICAgICAgICAgICAgICAgICAoKDMyKjIpKzYrMisxKQorI2VuZGlmCisjZGVmaW5lIE5VTVJFR0JZVEVTCQkoTUFYUkVHICogc2l6ZW9mKGludCkpCisvKiBDUi9MUiwgUjEsIFIyLCBSMTMtUjMxIGluY2x1c2l2ZS4gKi8KKyNkZWZpbmUgTlVNQ1JJVFJFR0JZVEVTCQkoMjMgKiBzaXplb2YoaW50KSkKKyNlbmRpZiAvKiAzMi82NCAqLwogI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotI2VuZGlmIC8qICEoX1BQQ19LR0RCX0gpICovCisjZW5kaWYgLyogIV9fUE9XRVJQQ19LR0RCX0hfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMva3ZtX2hvc3QuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMva3ZtX2hvc3QuaAppbmRleCA4MWE2OWQ3Li4yNjU1ZTJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9rdm1faG9zdC5oCkBAIC0zMSw2ICszMSw4IEBACiAvKiBtZW1vcnkgc2xvdHMgdGhhdCBkb2VzIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSAqLwogI2RlZmluZSBLVk1fUFJJVkFURV9NRU1fU0xPVFMgNAogCisjZGVmaW5lIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVCAxCisKIC8qIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGxhcmdlIHBhZ2VzLiAqLwogI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFICgxPDwzMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2hkZXAuaAppbmRleCA5ODk5MjI2Li4xMjMzZDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2hkZXAuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2hkZXAuaApAQCAtODAsNyArODAsOCBAQAogCQkJCSAgICAgbG9uZyBpbmRleCwKIAkJCQkgICAgIGxvbmcgbnBhZ2VzLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyB1YWRkciwKLQkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CiAJdm9pZAkJKCp0Y2VfZnJlZSkoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCiAJCQkJICAgIGxvbmcgaW5kZXgsCiAJCQkJICAgIGxvbmcgbnBhZ2VzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS1wcGMzMi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLXBwYzMyLmgKaW5kZXggNzMwMTVmMC4uM2E5NmQwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLXBwYzMyLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLXBwYzMyLmgKQEAgLTI5NSwxMCArMjk1LDEwIEBACiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDAwMQkvKiBTOiBQVEUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLwogI2RlZmluZSBfUEFHRV9VU0VSCTB4MDAwMDIJLyogUzogVXNlciBwYWdlIChtYXBzIHRvIFVSKSAqLwogI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMDIJLyogUzogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAwMDA0CS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLwotI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MDAwMDgJLyogSDogRGlydHkgJiBSVywgc2V0IGluIGV4Y2VwdGlvbiAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAwMDEwCS8qIFM6IFdyaXRlIHBlcm1pc3Npb24gKi8KLSNkZWZpbmUgX1BBR0VfSFdFWEVDCTB4MDAwMjAJLyogSDogVVggcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9SVwkweDAwMDA0CS8qIFM6IFdyaXRlIHBlcm1pc3Npb24gKFNXKSAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDA4CS8qIFM6IFBhZ2UgZGlydHkgKi8KKyNkZWZpbmUgX1BBR0VfSFdFWEVDCTB4MDAwMTAJLyogSDogU1ggcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAwMDIwCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLwogCiAjZGVmaW5lIF9QQUdFX0VORElBTgkweDAwMDQwCS8qIEg6IEUgYml0ICovCiAjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDA4MAkvKiBIOiBHIGJpdCAqLwpAQCAtMzA3LDIxICszMDcsMTQgQEAKICNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDA0MDAJLyogSDogVyBiaXQgKi8KIAogI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKLSNkZWZpbmUgX1BBR0VfRElSVFkJMHgwODAwMAkvKiBTOiBQYWdlIGRpcnR5ICovCi0KIC8qIEVSUE4gaW4gYSBQVEUgbmV2ZXIgZ2V0cyBjbGVhcmVkLCBpZ25vcmUgaXQgKi8KICNkZWZpbmUgX1BURV9OT05FX01BU0sJMHhmZmZmZmZmZmZmZmYwMDAwVUxMCi0jZWxzZQotI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwODAwCS8qIFM6IFBhZ2UgZGlydHkgKi8KICNlbmRpZgogCiAjZGVmaW5lIF9QTURfUFJFU0VOVAkwCiAjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCiAjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQogCi0vKiBVbnRpbCBteSByZXdvcmsgaXMgZmluaXNoZWQsIEZTTCBCb29rRSBzdGlsbCBuZWVkcyBhdG9taWMgUFRFIHVwZGF0ZXMgKi8KLSNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKLQogI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4KQogLyogRGVmaW5pdGlvbnMgZm9yIDh4eCBlbWJlZGRlZCBjaGlwcy4gKi8KICNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEJLyogUGFnZSBpcyB2YWxpZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wbWkuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1pLmgKaW5kZXggZTFkYzA5MC4uYjRlOTFmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wbWkuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtaS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjZGVmaW5lIFBNSV9UWVBFX0ZSRVFfQ0hBTkdFCTB4MDEKKyNkZWZpbmUgUE1JX1RZUEVfUE9XRVJfQlVUVE9OCTB4MDIKICNkZWZpbmUgUE1JX1JFQURfVFlQRQkJMAogI2RlZmluZSBQTUlfUkVBRF9EQVRBMAkJMQogI2RlZmluZSBQTUlfUkVBRF9EQVRBMQkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wczMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHMzLmgKaW5kZXggODFmZmUzYi4uZjllMzRjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wczMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BzMy5oCkBAIC0zMzcsMTIgKzMzNywxOCBAQAogCVBTM19ERVZJQ0VfVFlQRV9MUE0sCiB9OwogCitlbnVtIHBzM19tYXRjaF9zdWJfaWQgeworCS8qIGZvciBQUzNfTUFUQ0hfSURfR1JBUEhJQ1MgKi8KKwlQUzNfTUFUQ0hfU1VCX0lEX0ZCCQk9IDEsCit9OworCiAvKioKICAqIHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgLSBhIGRldmljZSBvbiB0aGUgc3lzdGVtIGJ1cwogICovCiAKIHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgewogCWVudW0gcHMzX21hdGNoX2lkIG1hdGNoX2lkOworCWVudW0gcHMzX21hdGNoX3N1Yl9pZCBtYXRjaF9zdWJfaWQ7CiAJZW51bSBwczNfc3lzdGVtX2J1c19kZXZpY2VfdHlwZSBkZXZfdHlwZTsKIAogCXU2NCBidXNfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTQiAqLwpAQCAtMzcxLDYgKzM3Nyw3IEBACiAKIHN0cnVjdCBwczNfc3lzdGVtX2J1c19kcml2ZXIgewogCWVudW0gcHMzX21hdGNoX2lkIG1hdGNoX2lkOworCWVudW0gcHMzX21hdGNoX3N1Yl9pZCBtYXRjaF9zdWJfaWQ7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgY29yZTsKIAlpbnQgKCpwcm9iZSkoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqKTsKIAlpbnQgKCpyZW1vdmUpKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaAppbmRleCBiYmNjYWRmLi5jNmQxYWI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKQEAgLTE1NSwxMCArMTU1LDEyIEBACiAjZGVmaW5lICAgQ1RSTF9SVU5MQVRDSAkweDEKICNkZWZpbmUgU1BSTl9EQUJSCTB4M0Y1CS8qIERhdGEgQWRkcmVzcyBCcmVha3BvaW50IFJlZ2lzdGVyICovCiAjZGVmaW5lICAgREFCUl9UUkFOU0xBVElPTgkoMVVMIDw8IDIpCisjZGVmaW5lIFNQUk5fREFCUjIJMHgxM0QJLyogZTMwMCAqLwogI2RlZmluZSBTUFJOX0RBQlJYCTB4M0Y3CS8qIERhdGEgQWRkcmVzcyBCcmVha3BvaW50IFJlZ2lzdGVyIEV4dGVuc2lvbiAqLwogI2RlZmluZSAgIERBQlJYX1VTRVIJKDFVTCA8PCAwKQogI2RlZmluZSAgIERBQlJYX0tFUk5FTAkoMVVMIDw8IDEpCiAjZGVmaW5lIFNQUk5fREFSCTB4MDEzCS8qIERhdGEgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RCQ1IJMHgxMzYJLyogZTMwMCBEYXRhIEJyZWFrcG9pbnQgQ29udHJvbCBSZWcgKi8KICNkZWZpbmUgU1BSTl9EU0lTUgkweDAxMgkvKiBEYXRhIFN0b3JhZ2UgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSAgIERTSVNSX05PSFBURQkJMHg0MDAwMDAwMAkvKiBubyB0cmFuc2xhdGlvbiBmb3VuZCAqLwogI2RlZmluZSAgIERTSVNSX1BST1RGQVVMVAkweDA4MDAwMDAwCS8qIHByb3RlY3Rpb24gZmF1bHQgKi8KQEAgLTI2NCw2ICsyNjYsOCBAQAogI2RlZmluZSBISUQxX1BTCQkoMTw8MTYpCQkvKiA3NTBGWCBQTEwgc2VsZWN0aW9uICovCiAjZGVmaW5lIFNQUk5fSElEMgkweDNGOAkJLyogSGFyZHdhcmUgSW1wbGVtZW50YXRpb24gUmVnaXN0ZXIgMiAqLwogI2RlZmluZSBTUFJOX0lBQlIJMHgzRjIJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBCcmVha3BvaW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSUFCUjIJMHgzRkEJCS8qIDgzeHggKi8KKyNkZWZpbmUgU1BSTl9JQkNSCTB4MTM1CQkvKiA4M3h4IEluc24gQnJlYWtwb2ludCBDb250cm9sIFJlZyAqLwogI2RlZmluZSBTUFJOX0hJRDQJMHgzRjQJCS8qIDk3MCBISUQ0ICovCiAjZGVmaW5lIFNQUk5fSElENQkweDNGNgkJLyogOTcwIEhJRDUgKi8KICNkZWZpbmUgU1BSTl9ISUQ2CTB4M0Y5CS8qIEJFIEhJRCA2ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCmluZGV4IDFhMDczNmYuLmJkMGZiODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKQEAgLTE0MSwxMiArMTQyLDExIEBACiAJCSIJYiAyYlxuIgkJCQkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiCS5iYWxpZ24gJTVcbiIJCQkJXAorCQkJUFBDX0xPTkdfQUxJR04gIlxuIgkJCVwKIAkJCVBQQ19MT05HICIxYiwzYlxuIgkJCVwKIAkJIi5wcmV2aW91cyIJCQkJCVwKIAkJOiAiPXIiIChlcnIpCQkJCQlcCi0JCTogInIiICh4KSwgImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpLFwKLQkJICAiaSIoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKKwkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjZGVmaW5lIF9fcHV0X3VzZXJfYXNtMih4LCBwdHIsIHJldHZhbCkJCQkJXApAQCAtMTYyLDEzICsxNjIsMTIgQEAKIAkJIgliIDNiXG4iCQkJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJCVwKIAkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCi0JCSIJLmJhbGlnbiAlNVxuIgkJCQlcCisJCQlQUENfTE9OR19BTElHTiAiXG4iCQkJXAogCQkJUFBDX0xPTkcgIjFiLDRiXG4iCQkJXAogCQkJUFBDX0xPTkcgIjJiLDRiXG4iCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJXAogCQk6ICI9ciIgKGVycikJCQkJCVwKLQkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVyciksXAotCQkgICJpIihzaXplb2YodW5zaWduZWQgbG9uZykpKQorCQk6ICJyIiAoeCksICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKICNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsKQkJCVwKQEAgLTIyNiwxMiArMjI1LDExIEBACiAJCSIJYiAyYlxuIgkJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJXAogCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAotCQkiCS5iYWxpZ24gJTVcbiIJCQlcCisJCQlQUENfTE9OR19BTElHTiAiXG4iCQlcCiAJCQlQUENfTE9ORyAiMWIsM2JcbiIJCVwKIAkJIi5wcmV2aW91cyIJCQkJXAogCQk6ICI9ciIgKGVyciksICI9ciIgKHgpCQkJXAotCQk6ICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSwJXAotCQkgICJpIihzaXplb2YodW5zaWduZWQgbG9uZykpKQorCQk6ICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKIAogI2lmZGVmIF9fcG93ZXJwYzY0X18KICNkZWZpbmUgX19nZXRfdXNlcl9hc20yKHgsIGFkZHIsIGVycikJCQlcCkBAIC0yNDksMTMgKzI0NywxMiBAQAogCQkiCWIgM2JcbiIJCQkJXAogCQkiLnByZXZpb3VzXG4iCQkJCVwKIAkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCVwKLQkJIgkuYmFsaWduICU1XG4iCQkJXAorCQkJUFBDX0xPTkdfQUxJR04gIlxuIgkJXAogCQkJUFBDX0xPTkcgIjFiLDRiXG4iCQlcCiAJCQlQUENfTE9ORyAiMmIsNGJcbiIJCVwKIAkJIi5wcmV2aW91cyIJCQkJXAogCQk6ICI9ciIgKGVyciksICI9JnIiICh4KQkJCVwKLQkJOiAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVyciksCVwKLQkJICAiaSIoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKKwkJOiAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCiAjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VjY19mYXN0LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VjY19mYXN0LmgKaW5kZXggZjUyOWY3MC4uZmNlMTZhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy91Y2NfZmFzdC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWNjX2Zhc3QuaApAQCAtMTU2LDExICsxNTYsMTEgQEAKIAogc3RydWN0IHVjY19mYXN0X3ByaXZhdGUgewogCXN0cnVjdCB1Y2NfZmFzdF9pbmZvICp1Zl9pbmZvOwotCXN0cnVjdCB1Y2NfZmFzdCAqdWZfcmVnczsJLyogYSBwb2ludGVyIHRvIG1lbW9yeSBtYXAgb2YgVUNDIHJlZ3MuICovCi0JdTMyICpwX3VjY2U7CQkvKiBhIHBvaW50ZXIgdG8gdGhlIGV2ZW50IHJlZ2lzdGVyIGluIG1lbW9yeS4gKi8KLQl1MzIgKnBfdWNjbTsJCS8qIGEgcG9pbnRlciB0byB0aGUgbWFzayByZWdpc3RlciBpbiBtZW1vcnkuICovCisJc3RydWN0IHVjY19mYXN0IF9faW9tZW0gKnVmX3JlZ3M7IC8qIGEgcG9pbnRlciB0byB0aGUgVUNDIHJlZ3MuICovCisJdTMyIF9faW9tZW0gKnBfdWNjZTsJLyogYSBwb2ludGVyIHRvIHRoZSBldmVudCByZWdpc3RlciBpbiBtZW1vcnkuICovCisJdTMyIF9faW9tZW0gKnBfdWNjbTsJLyogYSBwb2ludGVyIHRvIHRoZSBtYXNrIHJlZ2lzdGVyIGluIG1lbW9yeS4gKi8KICNpZmRlZiBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5ECi0JdTE2ICpwX3V0b2RyOwkJLyogcG9pbnRlciB0byB0aGUgdHJhbnNtaXQgb24gZGVtYW5kIHJlZ2lzdGVyICovCisJdTE2IF9faW9tZW0gKnBfdXRvZHI7CS8qIHBvaW50ZXIgdG8gdGhlIHRyYW5zbWl0IG9uIGRlbWFuZCByZWdpc3RlciAqLwogI2VuZGlmCiAJaW50IGVuYWJsZWRfdHg7CQkvKiBXaGV0aGVyIGNoYW5uZWwgaXMgZW5hYmxlZCBmb3IgVHggKEVOVCkgKi8KIAlpbnQgZW5hYmxlZF9yeDsJCS8qIFdoZXRoZXIgY2hhbm5lbCBpcyBlbmFibGVkIGZvciBSeCAoRU5SKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9rdm1faG9zdC5oIGIvaW5jbHVkZS9hc20tczM5MC9rdm1faG9zdC5oCmluZGV4IDE4Y2JkOGEuLjMyMzRkZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2t2bV9ob3N0LmgKQEAgLTYyLDcgKzYyLDcgQEAKICNkZWZpbmUgQ1BVU1RBVF9KICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgQ1BVU1RBVF9QICAgICAgICAgIDB4MDAwMDAwMDEKIAotc3RydWN0IHNpZV9ibG9jayB7CitzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrIHsKIAlhdG9taWNfdCBjcHVmbGFnczsJCS8qIDB4MDAwMCAqLwogCV9fdTMyCXByZWZpeDsJCQkvKiAweDAwMDQgKi8KIAlfX3U4CXJlc2VydmVkOFszMl07CQkvKiAweDAwMDggKi8KQEAgLTE0MCwxNCArMTQwLDE0IEBACiAJdTMyIGRpYWdub3NlXzQ0OwogfTsKIAotc3RydWN0IGlvX2luZm8geworc3RydWN0IGt2bV9zMzkwX2lvX2luZm8gewogCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX2lkOyAgICAgICAgICAgIC8qIDB4MGI4ICovCiAJX191MTYgICAgICAgIHN1YmNoYW5uZWxfbnI7ICAgICAgICAgICAgLyogMHgwYmEgKi8KIAlfX3UzMiAgICAgICAgaW9faW50X3Bhcm07ICAgICAgICAgICAgICAvKiAweDBiYyAqLwogCV9fdTMyICAgICAgICBpb19pbnRfd29yZDsgICAgICAgICAgICAgIC8qIDB4MGMwICovCiB9OwogCi1zdHJ1Y3QgZXh0X2luZm8geworc3RydWN0IGt2bV9zMzkwX2V4dF9pbmZvIHsKIAlfX3UzMiBleHRfcGFyYW1zOwogCV9fdTY0IGV4dF9wYXJhbXMyOwogfTsKQEAgLTE2MCwyMiArMTYwLDIyIEBACiAjZGVmaW5lIFBHTV9TUEVDSUZJQ0FUSU9OICAgICAgICAweDA2CiAjZGVmaW5lIFBHTV9EQVRBICAgICAgICAgICAgICAgICAweDA3CiAKLXN0cnVjdCBwZ21faW5mbyB7CitzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gewogCV9fdTE2IGNvZGU7CiB9OwogCi1zdHJ1Y3QgcHJlZml4X2luZm8geworc3RydWN0IGt2bV9zMzkwX3ByZWZpeF9pbmZvIHsKIAlfX3UzMiBhZGRyZXNzOwogfTsKIAotc3RydWN0IGludGVycnVwdF9pbmZvIHsKK3N0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXU2NAl0eXBlOwogCXVuaW9uIHsKLQkJc3RydWN0IGlvX2luZm8gaW87Ci0JCXN0cnVjdCBleHRfaW5mbyBleHQ7Ci0JCXN0cnVjdCBwZ21faW5mbyBwZ207Ci0JCXN0cnVjdCBwcmVmaXhfaW5mbyBwcmVmaXg7CisJCXN0cnVjdCBrdm1fczM5MF9pb19pbmZvIGlvOworCQlzdHJ1Y3Qga3ZtX3MzOTBfZXh0X2luZm8gZXh0OworCQlzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gcGdtOworCQlzdHJ1Y3Qga3ZtX3MzOTBfcHJlZml4X2luZm8gcHJlZml4OwogCX07CiB9OwogCkBAIC0xODMsMzUgKzE4MywzNSBAQAogI2RlZmluZSBBQ1RJT05fU1RPUkVfT05fU1RPUCAxCiAjZGVmaW5lIEFDVElPTl9TVE9QX09OX1NUT1AgIDIKIAotc3RydWN0IGxvY2FsX2ludGVycnVwdCB7CitzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0IHsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWF0b21pY190IGFjdGl2ZTsKLQlzdHJ1Y3QgZmxvYXRfaW50ZXJydXB0ICpmbG9hdF9pbnQ7CisJc3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmxvYXRfaW50OwogCWludCB0aW1lcl9kdWU7IC8qIGV2ZW50IGluZGljYXRvciBmb3Igd2FpdHF1ZXVlIGJlbG93ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CiAJYXRvbWljX3QgKmNwdWZsYWdzOwogCXVuc2lnbmVkIGludCBhY3Rpb25fYml0czsKIH07CiAKLXN0cnVjdCBmbG9hdF9pbnRlcnJ1cHQgeworc3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCB7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlhdG9taWNfdCBhY3RpdmU7CiAJaW50IG5leHRfcnJfY3B1OwogCXVuc2lnbmVkIGxvbmcgaWRsZV9tYXNrIFsoNjQgKyBzaXplb2YobG9uZykgLSAxKSAvIHNpemVvZihsb25nKV07Ci0Jc3RydWN0IGxvY2FsX2ludGVycnVwdCAqbG9jYWxfaW50WzY0XTsKKwlzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsb2NhbF9pbnRbNjRdOwogfTsKIAogCiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7Ci0Jc3RydWN0IHNpZV9ibG9jayAqc2llX2Jsb2NrOworCXN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgKnNpZV9ibG9jazsKIAl1bnNpZ25lZCBsb25nCSAgZ3Vlc3RfZ3Byc1sxNl07CiAJczM5MF9mcF9yZWdzICAgICAgaG9zdF9mcHJlZ3M7CiAJdW5zaWduZWQgaW50ICAgICAgaG9zdF9hY3JzW05VTV9BQ1JTXTsKIAlzMzkwX2ZwX3JlZ3MgICAgICBndWVzdF9mcHJlZ3M7CiAJdW5zaWduZWQgaW50ICAgICAgZ3Vlc3RfYWNyc1tOVU1fQUNSU107Ci0Jc3RydWN0IGxvY2FsX2ludGVycnVwdCBsb2NhbF9pbnQ7CisJc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCBsb2NhbF9pbnQ7CiAJc3RydWN0IHRpbWVyX2xpc3QgY2tjX3RpbWVyOwogCXVuaW9uICB7CiAJCWNwdWlkX3QJICBjcHVfaWQ7CkBAIC0yMjgsOCArMjI4LDggQEAKIAl1bnNpZ25lZCBsb25nIGd1ZXN0X21lbXNpemU7CiAJc3RydWN0IHNjYV9ibG9jayAqc2NhOwogCWRlYnVnX2luZm9fdCAqZGJmOwotCXN0cnVjdCBmbG9hdF9pbnRlcnJ1cHQgZmxvYXRfaW50OworCXN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgZmxvYXRfaW50OwogfTsKIAotZXh0ZXJuIGludCBzaWU2NGEoc3RydWN0IHNpZV9ibG9jayAqLCBfX3U2NCAqKTsKK2V4dGVybiBpbnQgc2llNjRhKHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgKiwgX191NjQgKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL0tidWlsZCBiL2luY2x1ZGUvYXNtLXNwYXJjL0tidWlsZAppbmRleCA2NzEyMjM3Li42Y2RhZjlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvS2J1aWxkCkBAIC0xLDE0ICsxIEBACi1pbmNsdWRlIGluY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQotCi1oZWFkZXIteSArPSBhcGMuaAotaGVhZGVyLXkgKz0gYXNpLmgKLWhlYWRlci15ICs9IGJwcC5oCi1oZWFkZXIteSArPSBqc2ZsYXNoLmgKLWhlYWRlci15ICs9IG9wZW5wcm9taW8uaAotaGVhZGVyLXkgKz0gcmVnLmgKLWhlYWRlci15ICs9IHRyYXBzLmgKLWhlYWRlci15ICs9IHZmY19pb2N0bHMuaAotCi11bmlmZGVmLXkgKz0gZmJpby5oCi11bmlmZGVmLXkgKz0gcGVyZmN0ci5oCi11bmlmZGVmLXkgKz0gcHNyLmgKKyMgZHVtbXkgZmlsZSB0byBhdm9pZCBicmVha2luZyBtYWtlIGhlYWRlcnNfaW5zdGFsbApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYWdwLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hZ3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjQ1Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYWdwLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBBR1BfSAorI2RlZmluZSBBR1BfSCAxCisKKy8qIGR1bW15IGZvciBub3cgKi8KKworI2RlZmluZSBtYXBfcGFnZV9pbnRvX2FncChwYWdlKQorI2RlZmluZSB1bm1hcF9wYWdlX2Zyb21fYWdwKHBhZ2UpCisjZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpIG1iKCkKKworLyogQ29udmVydCBhIHBoeXNpY2FsIGFkZHJlc3MgdG8gYW4gYWRkcmVzcyBzdWl0YWJsZSBmb3IgdGhlIEdBUlQuICovCisjZGVmaW5lIHBoeXNfdG9fZ2FydCh4KSAoeCkKKyNkZWZpbmUgZ2FydF90b19waHlzKHgpICh4KQorCisvKiBHQVRUIGFsbG9jYXRpb24uIFJldHVybnMvYWNjZXB0cyBHQVRUIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuICovCisjZGVmaW5lIGFsbG9jX2dhdHRfcGFnZXMob3JkZXIpCQlcCisJKChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAob3JkZXIpKSkKKyNkZWZpbmUgZnJlZV9nYXR0X3BhZ2VzKHRhYmxlLCBvcmRlcikJXAorCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpKHRhYmxlKSwgKG9yZGVyKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hcGIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2FwYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmM2I1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9hcGIuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogYXBiLmg6IEFkdmFuY2VkIFBDSSBCcmlkZ2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgYW5kIEJpdHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggIEVkZGllIEMuIERvc3QgIChlY2RAc2t5bmV0LmJlKQorICovCisKKyNpZm5kZWYgX1NQQVJDNjRfQVBCX0gKKyNkZWZpbmUgX1NQQVJDNjRfQVBCX0gKKworI2RlZmluZSBBUEJfVElDS19SRUdJU1RFUgkJCTB4YjAKKyNkZWZpbmUgQVBCX0lOVF9BQ0sJCQkJMHhiOAorI2RlZmluZSBBUEJfUFJJTUFSWV9NQVNURVJfUkVUUllfTElNSVQJCTB4YzAKKyNkZWZpbmUgQVBCX0RNQV9BU0ZSCQkJCTB4YzgKKyNkZWZpbmUgQVBCX0RNQV9BRkFSCQkJCTB4ZDAKKyNkZWZpbmUgQVBCX1BJT19UQVJHRVRfUkVUUllfTElNSVQJCTB4ZDgKKyNkZWZpbmUgQVBCX1BJT19UQVJHRVRfTEFURU5DWV9USU1FUgkJMHhkOQorI2RlZmluZSBBUEJfRE1BX1RBUkdFVF9SRVRSWV9MSU1JVAkJMHhkYQorI2RlZmluZSBBUEJfRE1BX1RBUkdFVF9MQVRFTkNZX1RJTUVSCQkweGRiCisjZGVmaW5lIEFQQl9TRUNPTkRBUllfTUFTVEVSX1JFVFJZX0xJTUlUCTB4ZGMKKyNkZWZpbmUgQVBCX1NFQ09OREFSWV9DT05UUk9MCQkJMHhkZAorI2RlZmluZSBBUEJfSU9fQUREUkVTU19NQVAJCQkweGRlCisjZGVmaW5lIEFQQl9NRU1fQUREUkVTU19NQVAJCQkweGRmCisKKyNkZWZpbmUgQVBCX1BDSV9DT05UUk9MX0xPVwkJCTB4ZTAKKyMgIGRlZmluZSBBUEJfUENJX0NUTF9MT1dfQVJCX1BBUksJCQkoMSA8PCAyMSkKKyMgIGRlZmluZSBBUEJfUENJX0NUTF9MT1dfRVJSSU5UX0VOCQkJKDEgPDwgOCkKKworI2RlZmluZSBBUEJfUENJX0NPTlRST0xfSElHSAkJCTB4ZTQKKyMgIGRlZmluZSBBUEJfUENJX0NUTF9ISUdIX1NFUlIJCQkJKDEgPDwgMikKKyMgIGRlZmluZSBBUEJfUENJX0NUTF9ISUdIX0FSQklURVJfRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIEFQQl9QSU9fQVNGUgkJCQkweGU4CisjZGVmaW5lIEFQQl9QSU9fQUZBUgkJCQkweGYwCisjZGVmaW5lIEFQQl9ESUFHX1JFR0lTVEVSCQkJMHhmOAorCisjZW5kaWYgLyogIShfU1BBUkM2NF9BUEJfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2FzaS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYXNpLmgKaW5kZXggMTU4ZjliMC4uNzQ3MDNjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvYXNpLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYXNpLmgKQEAgLTMsNyArMyw3IEBACiAKIC8qIGFzaS5oOiAgQWRkcmVzcyBTcGFjZSBJZGVudGlmaWVyIHZhbHVlcyBmb3IgdGhlIHNwYXJjLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKgogICogUGlvbmVlciB3b3JrIGZvciBzdW40bTogUGF1bCBIYXRjaG1hbiAocGF1bEBzZmUuY29tLmF1KQogICogSm9pbnQgZWRpdGlvbiBmb3Igc3VuNGMrc3VuNG06IFBldGUgQS4gWmFpdGNldiA8emFpdGNldkBpcG1jZS5zdT4KQEAgLTEwOCw0ICsxMDgsMTU1IEBACiAKICNkZWZpbmUgQVNJX01fQUNUSU9OICAgICAgIDB4NGMgICAvKiBCcmVha3BvaW50IEFjdGlvbiBSZWdpc3RlciAoR05VL1Zpa2luZykgKi8KIAorLyogVjkgQXJjaGl0ZWN0dXJlIG1hbmRhcnkgQVNJcy4gKi8KKyNkZWZpbmUgQVNJX04JCQkweDA0IC8qIE51Y2xldXMJCQkJKi8KKyNkZWZpbmUgQVNJX05MCQkJMHgwYyAvKiBOdWNsZXVzLCBsaXR0bGUgZW5kaWFuCQkqLworI2RlZmluZSBBU0lfQUlVUAkJMHgxMCAvKiBQcmltYXJ5LCB1c2VyCQkJKi8KKyNkZWZpbmUgQVNJX0FJVVMJCTB4MTEgLyogU2Vjb25kYXJ5LCB1c2VyCQkJKi8KKyNkZWZpbmUgQVNJX0FJVVBMCQkweDE4IC8qIFByaW1hcnksIHVzZXIsIGxpdHRsZSBlbmRpYW4JKi8KKyNkZWZpbmUgQVNJX0FJVVNMCQkweDE5IC8qIFNlY29uZGFyeSwgdXNlciwgbGl0dGxlIGVuZGlhbgkqLworI2RlZmluZSBBU0lfUAkJCTB4ODAgLyogUHJpbWFyeSwgaW1wbGljaXQJCSovCisjZGVmaW5lIEFTSV9TCQkJMHg4MSAvKiBTZWNvbmRhcnksIGltcGxpY2l0CQkqLworI2RlZmluZSBBU0lfUE5GCQkJMHg4MiAvKiBQcmltYXJ5LCBubyBmYXVsdAkJKi8KKyNkZWZpbmUgQVNJX1NORgkJCTB4ODMgLyogU2Vjb25kYXJ5LCBubyBmYXVsdAkJKi8KKyNkZWZpbmUgQVNJX1BMCQkJMHg4OCAvKiBQcmltYXJ5LCBpbXBsaWNpdCwgbC1lbmRpYW4JKi8KKyNkZWZpbmUgQVNJX1NMCQkJMHg4OSAvKiBTZWNvbmRhcnksIGltcGxpY2l0LCBsLWVuZGlhbgkqLworI2RlZmluZSBBU0lfUE5GTAkJMHg4YSAvKiBQcmltYXJ5LCBubyBmYXVsdCwgbC1lbmRpYW4JKi8KKyNkZWZpbmUgQVNJX1NORkwJCTB4OGIgLyogU2Vjb25kYXJ5LCBubyBmYXVsdCwgbC1lbmRpYW4JKi8KKworLyogU3BpdEZpcmUgYW5kIGxhdGVyIGV4dGVuZGVkIEFTSXMuICBUaGUgIihJSUkpIiBtYXJrZXIgZGVzaWduYXRlcworICogVWx0cmFTcGFyYy1JSUkgYW5kIGxhdGVyIHNwZWNpZmljIEFTSXMuICBUaGUgIihDTVQpIiBtYXJrZXIgZGVzaWduYXRlcworICogQ2hpcCBNdWx0aSBUaHJlYWRpbmcgc3BlY2lmaWMgQVNJcy4gICIoTkcpIiBkZXNpZ25hdGVzIE5pYWdhcmEgc3BlY2lmaWMKKyAqIEFTSXMsICIoNFYpIiBkZXNpZ25hdGVzIFNVTjRWIHNwZWNpZmljIEFTSXMuCisgKi8KKyNkZWZpbmUgQVNJX1BIWVNfVVNFX0VDCQkweDE0IC8qIFBBRERSLCBFLWNhY2hhYmxlCQkqLworI2RlZmluZSBBU0lfUEhZU19CWVBBU1NfRUNfRQkweDE1IC8qIFBBRERSLCBFLWJpdAkJCSovCisjZGVmaW5lIEFTSV9CTEtfQUlVUF80VgkJMHgxNiAvKiAoNFYpIFByaW0sIHVzZXIsIGJsb2NrIGxkL3N0CSovCisjZGVmaW5lIEFTSV9CTEtfQUlVU180VgkJMHgxNyAvKiAoNFYpIFNlYywgdXNlciwgYmxvY2sgbGQvc3QJKi8KKyNkZWZpbmUgQVNJX1BIWVNfVVNFX0VDX0wJMHgxYyAvKiBQQUREUiwgRS1jYWNoYWJsZSwgbGl0dGxlIGVuZGlhbiovCisjZGVmaW5lIEFTSV9QSFlTX0JZUEFTU19FQ19FX0wJMHgxZCAvKiBQQUREUiwgRS1iaXQsIGxpdHRsZSBlbmRpYW4JKi8KKyNkZWZpbmUgQVNJX0JMS19BSVVQX0xfNFYJMHgxZSAvKiAoNFYpIFByaW0sIHVzZXIsIGJsb2NrLCBsLWVuZGlhbiovCisjZGVmaW5lIEFTSV9CTEtfQUlVU19MXzRWCTB4MWYgLyogKDRWKSBTZWMsIHVzZXIsIGJsb2NrLCBsLWVuZGlhbgkqLworI2RlZmluZSBBU0lfU0NSQVRDSFBBRAkJMHgyMCAvKiAoNFYpIFNjcmF0Y2ggUGFkIFJlZ2lzdGVycwkqLworI2RlZmluZSBBU0lfTU1VCQkJMHgyMSAvKiAoNFYpIE1NVSBDb250ZXh0IFJlZ2lzdGVycwkqLworI2RlZmluZSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfQUlVUyAweDIzIC8qIChORykgaW5pdC1zdG9yZSwgdHdpbiBsb2FkLAorCQkJCQkgKiBzZWNvbmRhcnksIHVzZXIKKwkJCQkJICovCisjZGVmaW5lIEFTSV9OVUNMRVVTX1FVQURfTERECTB4MjQgLyogQ2FjaGFibGUsIHF3b3JkIGxvYWQJCSovCisjZGVmaW5lIEFTSV9RVUVVRQkJMHgyNSAvKiAoNFYpIEludGVycnVwdCBRdWV1ZSBSZWdpc3RlcnMJKi8KKyNkZWZpbmUgQVNJX1FVQURfTEREX1BIWVNfNFYJMHgyNiAvKiAoNFYpIFBoeXNpY2FsLCBxd29yZCBsb2FkCSovCisjZGVmaW5lIEFTSV9OVUNMRVVTX1FVQURfTEREX0wJMHgyYyAvKiBDYWNoYWJsZSwgcXdvcmQgbG9hZCwgbC1lbmRpYW4gCSovCisjZGVmaW5lIEFTSV9RVUFEX0xERF9QSFlTX0xfNFYJMHgyZSAvKiAoNFYpIFBoeXMsIHF3b3JkIGxvYWQsIGwtZW5kaWFuCSovCisjZGVmaW5lIEFTSV9QQ0FDSEVfREFUQV9TVEFUVVMJMHgzMCAvKiAoSUlJKSBQQ2FjaGUgZGF0YSBzdGF0IFJBTSBkaWFnCSovCisjZGVmaW5lIEFTSV9QQ0FDSEVfREFUQQkJMHgzMSAvKiAoSUlJKSBQQ2FjaGUgZGF0YSBSQU0gZGlhZwkqLworI2RlZmluZSBBU0lfUENBQ0hFX1RBRwkJMHgzMiAvKiAoSUlJKSBQQ2FjaGUgdGFnIFJBTSBkaWFnCSovCisjZGVmaW5lIEFTSV9QQ0FDSEVfU05PT1BfVEFHCTB4MzMgLyogKElJSSkgUENhY2hlIHNub29wIHRhZyBSQU0gZGlhZwkqLworI2RlZmluZSBBU0lfUVVBRF9MRERfUEhZUwkweDM0IC8qIChJSUkrKSBQQUREUiwgcXdvcmQgbG9hZAkqLworI2RlZmluZSBBU0lfV0NBQ0hFX1ZBTElEX0JJVFMJMHgzOCAvKiAoSUlJKSBXQ2FjaGUgVmFsaWQgQml0cyBkaWFnCSovCisjZGVmaW5lIEFTSV9XQ0FDSEVfREFUQQkJMHgzOSAvKiAoSUlJKSBXQ2FjaGUgZGF0YSBSQU0gZGlhZwkqLworI2RlZmluZSBBU0lfV0NBQ0hFX1RBRwkJMHgzYSAvKiAoSUlJKSBXQ2FjaGUgdGFnIFJBTSBkaWFnCSovCisjZGVmaW5lIEFTSV9XQ0FDSEVfU05PT1BfVEFHCTB4M2IgLyogKElJSSkgV0NhY2hlIHNub29wIHRhZyBSQU0gZGlhZwkqLworI2RlZmluZSBBU0lfUVVBRF9MRERfUEhZU19MCTB4M2MgLyogKElJSSspIFBBRERSLCBxdy1sb2FkLCBsLWVuZGlhbgkqLworI2RlZmluZSBBU0lfU1JBTV9GQVNUX0lOSVQJMHg0MCAvKiAoSUlJKykgRmFzdCBTUkFNIGluaXQJCSovCisjZGVmaW5lIEFTSV9DT1JFX0FWQUlMQUJMRQkweDQxIC8qIChDTVQpIExQIEF2YWlsYWJsZQkJKi8KKyNkZWZpbmUgQVNJX0NPUkVfRU5BQkxFX1NUQVQJMHg0MSAvKiAoQ01UKSBMUCBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBBU0lfQ09SRV9FTkFCTEUJCTB4NDEgLyogKENNVCkgTFAgRW5hYmxlIFJXCQkqLworI2RlZmluZSBBU0lfWElSX1NURUVSSU5HCTB4NDEgLyogKENNVCkgWElSIFN0ZWVyaW5nIFJXCQkqLworI2RlZmluZSBBU0lfQ09SRV9SVU5OSU5HX1JXCTB4NDEgLyogKENNVCkgTFAgUnVubmluZyBSVwkJKi8KKyNkZWZpbmUgQVNJX0NPUkVfUlVOTklOR19XMVMJMHg0MSAvKiAoQ01UKSBMUCBSdW5uaW5nIFdyaXRlLU9uZSBTZXQJKi8KKyNkZWZpbmUgQVNJX0NPUkVfUlVOTklOR19XMUMJMHg0MSAvKiAoQ01UKSBMUCBSdW5uaW5nIFdyaXRlLU9uZSBDbHIJKi8KKyNkZWZpbmUgQVNJX0NPUkVfUlVOTklOR19TVEFUCTB4NDEgLyogKENNVCkgTFAgUnVubmluZyBTdGF0dXMJCSovCisjZGVmaW5lIEFTSV9DTVRfRVJST1JfU1RFRVJJTkcJMHg0MSAvKiAoQ01UKSBFcnJvciBTdGVlcmluZyBSVwkJKi8KKyNkZWZpbmUgQVNJX0RDQUNIRV9JTlZBTElEQVRFCTB4NDIgLyogKElJSSkgRENhY2hlIEludmFsaWRhdGUgZGlhZwkqLworI2RlZmluZSBBU0lfRENBQ0hFX1VUQUcJCTB4NDMgLyogKElJSSkgRENhY2hlIHVUYWcgZGlhZwkJKi8KKyNkZWZpbmUgQVNJX0RDQUNIRV9TTk9PUF9UQUcJMHg0NCAvKiAoSUlJKSBEQ2FjaGUgc25vb3AgdGFnIFJBTSBkaWFnCSovCisjZGVmaW5lIEFTSV9MU1VfQ09OVFJPTAkJMHg0NSAvKiBMb2FkLXN0b3JlIGNvbnRyb2wgdW5pdAkJKi8KKyNkZWZpbmUgQVNJX0RDVV9DT05UUk9MX1JFRwkweDQ1IC8qIChJSUkpIERDYWNoZSBVbml0IENvbnRyb2wgcmVnCSovCisjZGVmaW5lIEFTSV9EQ0FDSEVfREFUQQkJMHg0NiAvKiBEQ2FjaGUgZGF0YS1yYW0gZGlhZyBhY2Nlc3MJKi8KKyNkZWZpbmUgQVNJX0RDQUNIRV9UQUcJCTB4NDcgLyogRGNhY2hlIHRhZy92YWxpZCByYW0gZGlhZyBhY2Nlc3MqLworI2RlZmluZSBBU0lfSU5UUl9ESVNQQVRDSF9TVEFUCTB4NDggLyogSVJRIHZlY3RvciBkaXNwYXRjaCBzdGF0dXMJKi8KKyNkZWZpbmUgQVNJX0lOVFJfUkVDRUlWRQkweDQ5IC8qIElSUSB2ZWN0b3IgcmVjZWl2ZSBzdGF0dXMJKi8KKyNkZWZpbmUgQVNJX1VQQV9DT05GSUcJCTB4NGEgLyogVVBBIGNvbmZpZyBzcGFjZQkJKi8KKyNkZWZpbmUgQVNJX0pCVVNfQ09ORklHCQkweDRhIC8qIChJSUlpKSBKQlVTIENvbmZpZyBSZWdpc3RlcgkqLworI2RlZmluZSBBU0lfU0FGQVJJX0NPTkZJRwkweDRhIC8qIChJSUkpIFNhZmFyaSBDb25maWcgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgQVNJX1NBRkFSSV9BRERSRVNTCTB4NGEgLyogKElJSSkgU2FmYXJpIEFkZHJlc3MgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgQVNJX0VTVEFURV9FUlJPUl9FTgkweDRiIC8qIEUtY2FjaGUgZXJyb3IgZW5hYmxlIHNwYWNlCSovCisjZGVmaW5lIEFTSV9BRlNSCQkweDRjIC8qIEFzeW5jIGZhdWx0IHN0YXR1cyByZWdpc3RlcgkqLworI2RlZmluZSBBU0lfQUZBUgkJMHg0ZCAvKiBBc3luYyBmYXVsdCBhZGRyZXNzIHJlZ2lzdGVyCSovCisjZGVmaW5lIEFTSV9FQ19UQUdfREFUQQkJMHg0ZSAvKiBFLWNhY2hlIHRhZy92YWxpZCByYW0gZGlhZyBhY2MJKi8KKyNkZWZpbmUgQVNJX0lNTVUJCTB4NTAgLyogSW5zbi1NTVUgbWFpbiByZWdpc3RlciBzcGFjZQkqLworI2RlZmluZSBBU0lfSU1NVV9UU0JfOEtCX1BUUgkweDUxIC8qIEluc24tTU1VIDhLQiBUU0IgcG9pbnRlciByZWcJKi8KKyNkZWZpbmUgQVNJX0lNTVVfVFNCXzY0S0JfUFRSCTB4NTIgLyogSW5zbi1NTVUgNjRLQiBUU0IgcG9pbnRlciByZWcJKi8KKyNkZWZpbmUgQVNJX0lUTEJfREFUQV9JTgkweDU0IC8qIEluc24tTU1VIFRMQiBkYXRhIGluIHJlZwkqLworI2RlZmluZSBBU0lfSVRMQl9EQVRBX0FDQ0VTUwkweDU1IC8qIEluc24tTU1VIFRMQiBkYXRhIGFjY2VzcyByZWcJKi8KKyNkZWZpbmUgQVNJX0lUTEJfVEFHX1JFQUQJMHg1NiAvKiBJbnNuLU1NVSBUTEIgdGFnIHJlYWQgcmVnCSovCisjZGVmaW5lIEFTSV9JTU1VX0RFTUFQCQkweDU3IC8qIEluc24tTU1VIFRMQiBkZW1hcAkJKi8KKyNkZWZpbmUgQVNJX0RNTVUJCTB4NTggLyogRGF0YS1NTVUgbWFpbiByZWdpc3RlciBzcGFjZQkqLworI2RlZmluZSBBU0lfRE1NVV9UU0JfOEtCX1BUUgkweDU5IC8qIERhdGEtTU1VIDhLQiBUU0IgcG9pbnRlciByZWcJKi8KKyNkZWZpbmUgQVNJX0RNTVVfVFNCXzY0S0JfUFRSCTB4NWEgLyogRGF0YS1NTVUgMTZLQiBUU0IgcG9pbnRlciByZWcJKi8KKyNkZWZpbmUgQVNJX0RNTVVfVFNCX0RJUkVDVF9QVFIJMHg1YiAvKiBEYXRhLU1NVSBUU0IgZGlyZWN0IHBvaW50ZXIgcmVnCSovCisjZGVmaW5lIEFTSV9EVExCX0RBVEFfSU4JMHg1YyAvKiBEYXRhLU1NVSBUTEIgZGF0YSBpbiByZWcJKi8KKyNkZWZpbmUgQVNJX0RUTEJfREFUQV9BQ0NFU1MJMHg1ZCAvKiBEYXRhLU1NVSBUTEIgZGF0YSBhY2Nlc3MgcmVnCSovCisjZGVmaW5lIEFTSV9EVExCX1RBR19SRUFECTB4NWUgLyogRGF0YS1NTVUgVExCIHRhZyByZWFkIHJlZwkqLworI2RlZmluZSBBU0lfRE1NVV9ERU1BUAkJMHg1ZiAvKiBEYXRhLU1NVSBUTEIgZGVtYXAJCSovCisjZGVmaW5lIEFTSV9JSVVfSU5TVF9UUkFQCTB4NjAgLyogKElJSSkgSW5zdHJ1Y3Rpb24gQnJlYWtwb2ludAkqLworI2RlZmluZSBBU0lfSU5UUl9JRAkJMHg2MyAvKiAoQ01UKSBJbnRlcnJ1cHQgSUQgcmVnaXN0ZXIJKi8KKyNkZWZpbmUgQVNJX0NPUkVfSUQJCTB4NjMgLyogKENNVCkgTFAgSUQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEFTSV9DRVNSX0lECQkweDYzIC8qIChDTVQpIENFU1IgSUQgcmVnaXN0ZXIJCSovCisjZGVmaW5lIEFTSV9JQ19JTlNUUgkJMHg2NiAvKiBJbnNuIGNhY2hlIGluc3RydWNpb24gcmFtIGRpYWcJKi8KKyNkZWZpbmUgQVNJX0lDX1RBRwkJMHg2NyAvKiBJbnNuIGNhY2hlIHRhZy92YWxpZCByYW0gZGlhZyAJKi8KKyNkZWZpbmUgQVNJX0lDX1NUQUcJCTB4NjggLyogKElJSSkgSW5zbiBjYWNoZSBzbm9vcCB0YWcgcmFtCSovCisjZGVmaW5lIEFTSV9JQ19QUkVfREVDT0RFCTB4NmUgLyogSW5zbiBjYWNoZSBwcmUtZGVjb2RlIHJhbSBkaWFnCSovCisjZGVmaW5lIEFTSV9JQ19ORVhUX0ZJRUxECTB4NmYgLyogSW5zbiBjYWNoZSBuZXh0LWZpZWxkIHJhbSBkaWFnCSovCisjZGVmaW5lIEFTSV9CUlBSRURfQVJSQVkJMHg2ZiAvKiAoSUlJKSBCcmFuY2ggUHJlZGljdGlvbiBSQU0gZGlhZyovCisjZGVmaW5lIEFTSV9CTEtfQUlVUAkJMHg3MCAvKiBQcmltYXJ5LCB1c2VyLCBibG9jayBsb2FkL3N0b3JlCSovCisjZGVmaW5lIEFTSV9CTEtfQUlVUwkJMHg3MSAvKiBTZWNvbmRhcnksIHVzZXIsIGJsb2NrIGxkL3N0CSovCisjZGVmaW5lIEFTSV9NQ1VfQ1RSTF9SRUcJMHg3MiAvKiAoSUlJKSBNZW1vcnkgY29udHJvbGxlciByZWdzCSovCisjZGVmaW5lIEFTSV9FQ19EQVRBCQkweDc0IC8qIChJSUkpIEUtY2FjaGUgZGF0YSBzdGFnaW5nIHJlZwkqLworI2RlZmluZSBBU0lfRUNfQ1RSTAkJMHg3NSAvKiAoSUlJKSBFLWNhY2hlIGNvbnRyb2wgcmVnCSovCisjZGVmaW5lIEFTSV9FQ19XCQkweDc2IC8qIEUtY2FjaGUgZGlhZyB3cml0ZSBhY2Nlc3MJKi8KKyNkZWZpbmUgQVNJX1VEQl9FUlJPUl9XCQkweDc3IC8qIEV4dGVybmFsIFVEQiBlcnJvciByZWdzIFcJKi8KKyNkZWZpbmUgQVNJX1VEQl9DT05UUk9MX1cJMHg3NyAvKiBFeHRlcm5hbCBVREIgY29udHJvbCByZWdzIFcJKi8KKyNkZWZpbmUgQVNJX0lOVFJfVwkJMHg3NyAvKiBJUlEgdmVjdG9yIGRpc3BhdGNoIHdyaXRlCSovCisjZGVmaW5lIEFTSV9JTlRSX0RBVEFOX1cJMHg3NyAvKiAoSUlJKSBPdXQgaXJxIHZlY3RvciBkYXRhIHJlZyBOCSovCisjZGVmaW5lIEFTSV9JTlRSX0RJU1BBVENIX1cJMHg3NyAvKiAoSUlJKSBJbnRlcnJ1cHQgdmVjdG9yIGRpc3BhdGNoCSovCisjZGVmaW5lIEFTSV9CTEtfQUlVUEwJCTB4NzggLyogUHJpbWFyeSwgdXNlciwgbGl0dGxlLCBibGsgbGQvc3QqLworI2RlZmluZSBBU0lfQkxLX0FJVVNMCQkweDc5IC8qIFNlY29uZGFyeSwgdXNlciwgbGl0dGxlLCBibGsgbGQvc3QqLworI2RlZmluZSBBU0lfRUNfUgkJMHg3ZSAvKiBFLWNhY2hlIGRpYWcgcmVhZCBhY2Nlc3MJKi8KKyNkZWZpbmUgQVNJX1VEQkhfRVJST1JfUgkweDdmIC8qIEV4dGVybmFsIFVEQiBlcnJvciByZWdzIHJkIGhpCSovCisjZGVmaW5lIEFTSV9VREJMX0VSUk9SX1IJMHg3ZiAvKiBFeHRlcm5hbCBVREIgZXJyb3IgcmVncyByZCBsb3cJKi8KKyNkZWZpbmUgQVNJX1VEQkhfQ09OVFJPTF9SCTB4N2YgLyogRXh0ZXJuYWwgVURCIGNvbnRyb2wgcmVncyByZCBoaQkqLworI2RlZmluZSBBU0lfVURCTF9DT05UUk9MX1IJMHg3ZiAvKiBFeHRlcm5hbCBVREIgY29udHJvbCByZWdzIHJkIGxvdyovCisjZGVmaW5lIEFTSV9JTlRSX1IJCTB4N2YgLyogSVJRIHZlY3RvciBkaXNwYXRjaCByZWFkCSovCisjZGVmaW5lIEFTSV9JTlRSX0RBVEFOX1IJMHg3ZiAvKiAoSUlJKSBJbiBpcnEgdmVjdG9yIGRhdGEgcmVnIE4JKi8KKyNkZWZpbmUgQVNJX1BTVDhfUAkJMHhjMCAvKiBQcmltYXJ5LCA4IDgtYml0LCBwYXJ0aWFsCSovCisjZGVmaW5lIEFTSV9QU1Q4X1MJCTB4YzEgLyogU2Vjb25kYXJ5LCA4IDgtYml0LCBwYXJ0aWFsCSovCisjZGVmaW5lIEFTSV9QU1QxNl9QCQkweGMyIC8qIFByaW1hcnksIDQgMTYtYml0LCBwYXJ0aWFsCSovCisjZGVmaW5lIEFTSV9QU1QxNl9TCQkweGMzIC8qIFNlY29uZGFyeSwgNCAxNi1iaXQsIHBhcnRpYWwJKi8KKyNkZWZpbmUgQVNJX1BTVDMyX1AJCTB4YzQgLyogUHJpbWFyeSwgMiAzMi1iaXQsIHBhcnRpYWwJKi8KKyNkZWZpbmUgQVNJX1BTVDMyX1MJCTB4YzUgLyogU2Vjb25kYXJ5LCAyIDMyLWJpdCwgcGFydGlhbAkqLworI2RlZmluZSBBU0lfUFNUOF9QTAkJMHhjOCAvKiBQcmltYXJ5LCA4IDgtYml0LCBwYXJ0aWFsLCBMCSovCisjZGVmaW5lIEFTSV9QU1Q4X1NMCQkweGM5IC8qIFNlY29uZGFyeSwgOCA4LWJpdCwgcGFydGlhbCwgTAkqLworI2RlZmluZSBBU0lfUFNUMTZfUEwJCTB4Y2EgLyogUHJpbWFyeSwgNCAxNi1iaXQsIHBhcnRpYWwsIEwJKi8KKyNkZWZpbmUgQVNJX1BTVDE2X1NMCQkweGNiIC8qIFNlY29uZGFyeSwgNCAxNi1iaXQsIHBhcnRpYWwsIEwJKi8KKyNkZWZpbmUgQVNJX1BTVDMyX1BMCQkweGNjIC8qIFByaW1hcnksIDIgMzItYml0LCBwYXJ0aWFsLCBMCSovCisjZGVmaW5lIEFTSV9QU1QzMl9TTAkJMHhjZCAvKiBTZWNvbmRhcnksIDIgMzItYml0LCBwYXJ0aWFsLCBMCSovCisjZGVmaW5lIEFTSV9GTDhfUAkJMHhkMCAvKiBQcmltYXJ5LCAxIDgtYml0LCBmcHUgbGQvc3QJKi8KKyNkZWZpbmUgQVNJX0ZMOF9TCQkweGQxIC8qIFNlY29uZGFyeSwgMSA4LWJpdCwgZnB1IGxkL3N0CSovCisjZGVmaW5lIEFTSV9GTDE2X1AJCTB4ZDIgLyogUHJpbWFyeSwgMSAxNi1iaXQsIGZwdSBsZC9zdAkqLworI2RlZmluZSBBU0lfRkwxNl9TCQkweGQzIC8qIFNlY29uZGFyeSwgMSAxNi1iaXQsIGZwdSBsZC9zdAkqLworI2RlZmluZSBBU0lfRkw4X1BMCQkweGQ4IC8qIFByaW1hcnksIDEgOC1iaXQsIGZwdSBsZC9zdCwgTAkqLworI2RlZmluZSBBU0lfRkw4X1NMCQkweGQ5IC8qIFNlY29uZGFyeSwgMSA4LWJpdCwgZnB1IGxkL3N0LCBMKi8KKyNkZWZpbmUgQVNJX0ZMMTZfUEwJCTB4ZGEgLyogUHJpbWFyeSwgMSAxNi1iaXQsIGZwdSBsZC9zdCwgTAkqLworI2RlZmluZSBBU0lfRkwxNl9TTAkJMHhkYiAvKiBTZWNvbmRhcnksIDEgMTYtYml0LCBmcHUgbGQvc3QsTCovCisjZGVmaW5lIEFTSV9CTEtfQ09NTUlUX1AJMHhlMCAvKiBQcmltYXJ5LCBibGsgc3RvcmUgY29tbWl0CSovCisjZGVmaW5lIEFTSV9CTEtfQ09NTUlUX1MJMHhlMSAvKiBTZWNvbmRhcnksIGJsayBzdG9yZSBjb21taXQJKi8KKyNkZWZpbmUgQVNJX0JMS19JTklUX1FVQURfTEREX1AJMHhlMiAvKiAoTkcpIGluaXQtc3RvcmUsIHR3aW4gbG9hZCwKKwkJCQkgICAgICAqIHByaW1hcnksIGltcGxpY2l0CisJCQkJICAgICAgKi8KKyNkZWZpbmUgQVNJX0JMS19QCQkweGYwIC8qIFByaW1hcnksIGJsayBsZC9zdAkJKi8KKyNkZWZpbmUgQVNJX0JMS19TCQkweGYxIC8qIFNlY29uZGFyeSwgYmxrIGxkL3N0CQkqLworI2RlZmluZSBBU0lfQkxLX1BMCQkweGY4IC8qIFByaW1hcnksIGJsayBsZC9zdCwgbGl0dGxlCSovCisjZGVmaW5lIEFTSV9CTEtfU0wJCTB4ZjkgLyogU2Vjb25kYXJ5LCBibGsgbGQvc3QsIGxpdHRsZQkqLworCiAjZW5kaWYgLyogX1NQQVJDX0FTSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pYy5oCmluZGV4IDVjOTQ0YjUuLjY2ZDgxNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pYy5oCkBAIC0xLDE2NSArMSw4IEBACi0vKiBhdG9taWMuaDogVGhlc2Ugc3RpbGwgc3VjaywgYnV0IHRoZSBJLWNhY2hlIGhpdCByYXRlIGlzIGhpZ2hlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQotICogQ29weXJpZ2h0IChDKSAyMDAwIEFudG9uIEJsYW5jaGFyZCAoYW50b25AbGludXhjYXJlLmNvbS5hdSkKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLeWxlIE1jTWFydGluIChreWxlQHBhcmlzYy1saW51eC5vcmcpCi0gKgotICogQWRkaXRpb25zIGJ5IEtlaXRoIE0gV2Vzb2xvd3NraSAod2Vzb2xvd3NAZm9vYmF6Y28ub3JnKSBiYXNlZAotICogb24gYXNtLXBhcmlzYy9hdG9taWMuaCBDb3B5cmlnaHQgKEMpIDIwMDAgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQHR1eC5vcmc+LgotICovCi0KLSNpZm5kZWYgX19BUkNIX1NQQVJDX0FUT01JQ19fCi0jZGVmaW5lIF9fQVJDSF9TUEFSQ19BVE9NSUNfXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2RlZmluZSBBVE9NSUNfSU5JVChpKSAgeyAoaSkgfQotCi1leHRlcm4gaW50IF9fYXRvbWljX2FkZF9yZXR1cm4oaW50LCBhdG9taWNfdCAqKTsKLWV4dGVybiBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKiwgaW50LCBpbnQpOwotI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKLWV4dGVybiBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKiwgaW50LCBpbnQpOwotZXh0ZXJuIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqLCBpbnQpOwotCi0jZGVmaW5lIGF0b21pY19yZWFkKHYpICAgICAgICAgICgodiktPmNvdW50ZXIpCi0KLSNkZWZpbmUgYXRvbWljX2FkZChpLCB2KQkoKHZvaWQpX19hdG9taWNfYWRkX3JldHVybiggKGludCkoaSksICh2KSkpCi0jZGVmaW5lIGF0b21pY19zdWIoaSwgdikJKCh2b2lkKV9fYXRvbWljX2FkZF9yZXR1cm4oLShpbnQpKGkpLCAodikpKQotI2RlZmluZSBhdG9taWNfaW5jKHYpCQkoKHZvaWQpX19hdG9taWNfYWRkX3JldHVybiggICAgICAgIDEsICh2KSkpCi0jZGVmaW5lIGF0b21pY19kZWModikJCSgodm9pZClfX2F0b21pY19hZGRfcmV0dXJuKCAgICAgICAtMSwgKHYpKSkKLQotI2RlZmluZSBhdG9taWNfYWRkX3JldHVybihpLCB2KQkoX19hdG9taWNfYWRkX3JldHVybiggKGludCkoaSksICh2KSkpCi0jZGVmaW5lIGF0b21pY19zdWJfcmV0dXJuKGksIHYpCShfX2F0b21pY19hZGRfcmV0dXJuKC0oaW50KShpKSwgKHYpKSkKLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikJKF9fYXRvbWljX2FkZF9yZXR1cm4oICAgICAgICAxLCAodikpKQotI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KQkoX19hdG9taWNfYWRkX3JldHVybiggICAgICAgLTEsICh2KSkpCi0KLSNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKLQotLyoKLSAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi0jZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikgKGF0b21pY19pbmNfcmV0dXJuKHYpID09IDApCi0KLSNkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh2KSAoYXRvbWljX2RlY19yZXR1cm4odikgPT0gMCkKLSNkZWZpbmUgYXRvbWljX3N1Yl9hbmRfdGVzdChpLCB2KSAoYXRvbWljX3N1Yl9yZXR1cm4oaSwgdikgPT0gMCkKLQotI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKLQotLyogVGhpcyBpcyB0aGUgb2xkIDI0LWJpdCBpbXBsZW1lbnRhdGlvbi4gIEl0J3Mgc3RpbGwgdXNlZCBpbnRlcm5hbGx5Ci0gKiBieSBzb21lIHNwYXJjLXNwZWNpZmljIGNvZGUsIG5vdGFibHkgdGhlIHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWMyNF90OwotCi0jaWZuZGVmIENPTkZJR19TTVAKLQotI2RlZmluZSBBVE9NSUMyNF9JTklUKGkpICB7IChpKSB9Ci0jZGVmaW5lIGF0b21pYzI0X3JlYWQodikgICAgICAgICAgKCh2KS0+Y291bnRlcikKLSNkZWZpbmUgYXRvbWljMjRfc2V0KHYsIGkpICAgICAgICAoKCh2KS0+Y291bnRlcikgPSBpKQotCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19BVE9NSUNfSAorI2RlZmluZSBfX19BU01fU1BBUkNfQVRPTUlDX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9hdG9taWNfNjQuaD4KICNlbHNlCi0vKiBXZSBkbyB0aGUgYnVsayBvZiB0aGUgYWN0dWFsIHdvcmsgb3V0IG9mIGxpbmUgaW4gdHdvIGNvbW1vbgotICogcm91dGluZXMgaW4gYXNzZW1ibGVyLCBzZWUgYXJjaC9zcGFyYy9saWIvYXRvbWljLlMgZm9yIHRoZQotICogImZ1biIgZGV0YWlscy4KLSAqCi0gKiBGb3IgU01QIHRoZSB0cmljayBpcyB5b3UgZW1iZWQgdGhlIHNwaW4gbG9jayBieXRlIHdpdGhpbgotICogdGhlIHdvcmQsIHVzZSB0aGUgbG93IGJ5dGUgc28gc2lnbmVkbmVzcyBpcyBlYXNpbHkgcmV0YWluZWQKLSAqIHZpYSBhIHF1aWNrIGFyaXRobWV0aWMgc2hpZnQuICBJdCBsb29rcyBsaWtlIHRoaXM6Ci0gKgotICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJfCBzaWduZWQgMjQtYml0IGNvdW50ZXIgdmFsdWUgfCAgbG9jayAgfCAgYXRvbWljX3QKLSAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCSAzMSAgICAgICAgICAgICAgICAgICAgICAgICAgOCA3ICAgICAgMAotICovCi0KLSNkZWZpbmUgQVRPTUlDMjRfSU5JVChpKQl7ICgoaSkgPDwgOCkgfQotCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWMyNF9yZWFkKGNvbnN0IGF0b21pYzI0X3QgKnYpCi17Ci0JaW50IHJldCA9IHYtPmNvdW50ZXI7Ci0KLQl3aGlsZShyZXQgJiAweGZmKQotCQlyZXQgPSB2LT5jb3VudGVyOwotCi0JcmV0dXJuIHJldCA+PiA4OwotfQotCi0jZGVmaW5lIGF0b21pYzI0X3NldCh2LCBpKQkoKCh2KS0+Y291bnRlcikgPSAoKGkpIDw8IDgpKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9hdG9taWNfMzIuaD4KICNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBfX2F0b21pYzI0X2FkZChpbnQgaSwgYXRvbWljMjRfdCAqdikKLXsKLQlyZWdpc3RlciB2b2xhdGlsZSBpbnQgKnB0ciBhc20oImcxIik7Ci0JcmVnaXN0ZXIgaW50IGluY3JlbWVudCBhc20oImcyIik7Ci0JcmVnaXN0ZXIgaW50IHRtcDEgYXNtKCJnMyIpOwotCXJlZ2lzdGVyIGludCB0bXAyIGFzbSgiZzQiKTsKLQlyZWdpc3RlciBpbnQgdG1wMyBhc20oImc3Iik7Ci0KLQlwdHIgPSAmdi0+Y291bnRlcjsKLQlpbmNyZW1lbnQgPSBpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIm1vdgklJW83LCAlJWc0XG5cdCIKLQkiY2FsbAlfX19hdG9taWMyNF9hZGRcblx0IgotCSIgYWRkCSUlbzcsIDgsICUlbzdcbiIKLQk6ICI9JnIiIChpbmNyZW1lbnQpLCAiPXIiICh0bXAxKSwgIj1yIiAodG1wMiksICI9ciIgKHRtcDMpCi0JOiAiMCIgKGluY3JlbWVudCksICJyIiAocHRyKQotCTogIm1lbW9yeSIsICJjYyIpOwotCi0JcmV0dXJuIGluY3JlbWVudDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19hdG9taWMyNF9zdWIoaW50IGksIGF0b21pYzI0X3QgKnYpCi17Ci0JcmVnaXN0ZXIgdm9sYXRpbGUgaW50ICpwdHIgYXNtKCJnMSIpOwotCXJlZ2lzdGVyIGludCBpbmNyZW1lbnQgYXNtKCJnMiIpOwotCXJlZ2lzdGVyIGludCB0bXAxIGFzbSgiZzMiKTsKLQlyZWdpc3RlciBpbnQgdG1wMiBhc20oImc0Iik7Ci0JcmVnaXN0ZXIgaW50IHRtcDMgYXNtKCJnNyIpOwotCi0JcHRyID0gJnYtPmNvdW50ZXI7Ci0JaW5jcmVtZW50ID0gaTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJtb3YJJSVvNywgJSVnNFxuXHQiCi0JImNhbGwJX19fYXRvbWljMjRfc3ViXG5cdCIKLQkiIGFkZAklJW83LCA4LCAlJW83XG4iCi0JOiAiPSZyIiAoaW5jcmVtZW50KSwgIj1yIiAodG1wMSksICI9ciIgKHRtcDIpLCAiPXIiICh0bXAzKQotCTogIjAiIChpbmNyZW1lbnQpLCAiciIgKHB0cikKLQk6ICJtZW1vcnkiLCAiY2MiKTsKLQotCXJldHVybiBpbmNyZW1lbnQ7Ci19Ci0KLSNkZWZpbmUgYXRvbWljMjRfYWRkKGksIHYpICgodm9pZClfX2F0b21pYzI0X2FkZCgoaSksICh2KSkpCi0jZGVmaW5lIGF0b21pYzI0X3N1YihpLCB2KSAoKHZvaWQpX19hdG9taWMyNF9zdWIoKGkpLCAodikpKQotCi0jZGVmaW5lIGF0b21pYzI0X2RlY19yZXR1cm4odikgX19hdG9taWMyNF9zdWIoMSwgKHYpKQotI2RlZmluZSBhdG9taWMyNF9pbmNfcmV0dXJuKHYpIF9fYXRvbWljMjRfYWRkKDEsICh2KSkKLQotI2RlZmluZSBhdG9taWMyNF9zdWJfYW5kX3Rlc3QoaSwgdikgKF9fYXRvbWljMjRfc3ViKChpKSwgKHYpKSA9PSAwKQotI2RlZmluZSBhdG9taWMyNF9kZWNfYW5kX3Rlc3QodikgKF9fYXRvbWljMjRfc3ViKDEsICh2KSkgPT0gMCkKLQotI2RlZmluZSBhdG9taWMyNF9pbmModikgKCh2b2lkKV9fYXRvbWljMjRfYWRkKDEsICh2KSkpCi0jZGVmaW5lIGF0b21pYzI0X2RlYyh2KSAoKHZvaWQpX19hdG9taWMyNF9zdWIoMSwgKHYpKSkKLQotI2RlZmluZSBhdG9taWMyNF9hZGRfbmVnYXRpdmUoaSwgdikgKF9fYXRvbWljMjRfYWRkKChpKSwgKHYpKSA8IDApCi0KLS8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KLSNlbmRpZiAvKiAhKF9fS0VSTkVMX18pICovCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdG9taWMuaD4KLSNlbmRpZiAvKiAhKF9fQVJDSF9TUEFSQ19BVE9NSUNfXykgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYXRvbWljXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzk0NGI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYXRvbWljXzMyLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qIGF0b21pYy5oOiBUaGVzZSBzdGlsbCBzdWNrLCBidXQgdGhlIEktY2FjaGUgaGl0IHJhdGUgaXMgaGlnaGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQW50b24gQmxhbmNoYXJkIChhbnRvbkBsaW51eGNhcmUuY29tLmF1KQorICogQ29weXJpZ2h0IChDKSAyMDA3IEt5bGUgTWNNYXJ0aW4gKGt5bGVAcGFyaXNjLWxpbnV4Lm9yZykKKyAqCisgKiBBZGRpdGlvbnMgYnkgS2VpdGggTSBXZXNvbG93c2tpICh3ZXNvbG93c0Bmb29iYXpjby5vcmcpIGJhc2VkCisgKiBvbiBhc20tcGFyaXNjL2F0b21pYy5oIENvcHlyaWdodCAoQykgMjAwMCBQaGlsaXBwIFJ1bXBmIDxwcnVtcGZAdHV4Lm9yZz4uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfU1BBUkNfQVRPTUlDX18KKyNkZWZpbmUgX19BUkNIX1NQQVJDX0FUT01JQ19fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIEFUT01JQ19JTklUKGkpICB7IChpKSB9CisKK2V4dGVybiBpbnQgX19hdG9taWNfYWRkX3JldHVybihpbnQsIGF0b21pY190ICopOworZXh0ZXJuIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqLCBpbnQsIGludCk7CisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQorZXh0ZXJuIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICosIGludCk7CisKKyNkZWZpbmUgYXRvbWljX3JlYWQodikgICAgICAgICAgKCh2KS0+Y291bnRlcikKKworI2RlZmluZSBhdG9taWNfYWRkKGksIHYpCSgodm9pZClfX2F0b21pY19hZGRfcmV0dXJuKCAoaW50KShpKSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljX3N1YihpLCB2KQkoKHZvaWQpX19hdG9taWNfYWRkX3JldHVybigtKGludCkoaSksICh2KSkpCisjZGVmaW5lIGF0b21pY19pbmModikJCSgodm9pZClfX2F0b21pY19hZGRfcmV0dXJuKCAgICAgICAgMSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljX2RlYyh2KQkJKCh2b2lkKV9fYXRvbWljX2FkZF9yZXR1cm4oICAgICAgIC0xLCAodikpKQorCisjZGVmaW5lIGF0b21pY19hZGRfcmV0dXJuKGksIHYpCShfX2F0b21pY19hZGRfcmV0dXJuKCAoaW50KShpKSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljX3N1Yl9yZXR1cm4oaSwgdikJKF9fYXRvbWljX2FkZF9yZXR1cm4oLShpbnQpKGkpLCAodikpKQorI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KQkoX19hdG9taWNfYWRkX3JldHVybiggICAgICAgIDEsICh2KSkpCisjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpCShfX2F0b21pY19hZGRfcmV0dXJuKCAgICAgICAtMSwgKHYpKSkKKworI2RlZmluZSBhdG9taWNfYWRkX25lZ2F0aXZlKGEsIHYpCShhdG9taWNfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQorCisvKgorICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KSAoYXRvbWljX2luY19yZXR1cm4odikgPT0gMCkKKworI2RlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KHYpIChhdG9taWNfZGVjX3JldHVybih2KSA9PSAwKQorI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksIHYpIChhdG9taWNfc3ViX3JldHVybihpLCB2KSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCisvKiBUaGlzIGlzIHRoZSBvbGQgMjQtYml0IGltcGxlbWVudGF0aW9uLiAgSXQncyBzdGlsbCB1c2VkIGludGVybmFsbHkKKyAqIGJ5IHNvbWUgc3BhcmMtc3BlY2lmaWMgY29kZSwgbm90YWJseSB0aGUgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pYzI0X3Q7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorCisjZGVmaW5lIEFUT01JQzI0X0lOSVQoaSkgIHsgKGkpIH0KKyNkZWZpbmUgYXRvbWljMjRfcmVhZCh2KSAgICAgICAgICAoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWMyNF9zZXQodiwgaSkgICAgICAgICgoKHYpLT5jb3VudGVyKSA9IGkpCisKKyNlbHNlCisvKiBXZSBkbyB0aGUgYnVsayBvZiB0aGUgYWN0dWFsIHdvcmsgb3V0IG9mIGxpbmUgaW4gdHdvIGNvbW1vbgorICogcm91dGluZXMgaW4gYXNzZW1ibGVyLCBzZWUgYXJjaC9zcGFyYy9saWIvYXRvbWljLlMgZm9yIHRoZQorICogImZ1biIgZGV0YWlscy4KKyAqCisgKiBGb3IgU01QIHRoZSB0cmljayBpcyB5b3UgZW1iZWQgdGhlIHNwaW4gbG9jayBieXRlIHdpdGhpbgorICogdGhlIHdvcmQsIHVzZSB0aGUgbG93IGJ5dGUgc28gc2lnbmVkbmVzcyBpcyBlYXNpbHkgcmV0YWluZWQKKyAqIHZpYSBhIHF1aWNrIGFyaXRobWV0aWMgc2hpZnQuICBJdCBsb29rcyBsaWtlIHRoaXM6CisgKgorICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJfCBzaWduZWQgMjQtYml0IGNvdW50ZXIgdmFsdWUgfCAgbG9jayAgfCAgYXRvbWljX3QKKyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCSAzMSAgICAgICAgICAgICAgICAgICAgICAgICAgOCA3ICAgICAgMAorICovCisKKyNkZWZpbmUgQVRPTUlDMjRfSU5JVChpKQl7ICgoaSkgPDwgOCkgfQorCitzdGF0aWMgaW5saW5lIGludCBhdG9taWMyNF9yZWFkKGNvbnN0IGF0b21pYzI0X3QgKnYpCit7CisJaW50IHJldCA9IHYtPmNvdW50ZXI7CisKKwl3aGlsZShyZXQgJiAweGZmKQorCQlyZXQgPSB2LT5jb3VudGVyOworCisJcmV0dXJuIHJldCA+PiA4OworfQorCisjZGVmaW5lIGF0b21pYzI0X3NldCh2LCBpKQkoKCh2KS0+Y291bnRlcikgPSAoKGkpIDw8IDgpKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYXRvbWljMjRfYWRkKGludCBpLCBhdG9taWMyNF90ICp2KQoreworCXJlZ2lzdGVyIHZvbGF0aWxlIGludCAqcHRyIGFzbSgiZzEiKTsKKwlyZWdpc3RlciBpbnQgaW5jcmVtZW50IGFzbSgiZzIiKTsKKwlyZWdpc3RlciBpbnQgdG1wMSBhc20oImczIik7CisJcmVnaXN0ZXIgaW50IHRtcDIgYXNtKCJnNCIpOworCXJlZ2lzdGVyIGludCB0bXAzIGFzbSgiZzciKTsKKworCXB0ciA9ICZ2LT5jb3VudGVyOworCWluY3JlbWVudCA9IGk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkibW92CSUlbzcsICUlZzRcblx0IgorCSJjYWxsCV9fX2F0b21pYzI0X2FkZFxuXHQiCisJIiBhZGQJJSVvNywgOCwgJSVvN1xuIgorCTogIj0mciIgKGluY3JlbWVudCksICI9ciIgKHRtcDEpLCAiPXIiICh0bXAyKSwgIj1yIiAodG1wMykKKwk6ICIwIiAoaW5jcmVtZW50KSwgInIiIChwdHIpCisJOiAibWVtb3J5IiwgImNjIik7CisKKwlyZXR1cm4gaW5jcmVtZW50OworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2F0b21pYzI0X3N1YihpbnQgaSwgYXRvbWljMjRfdCAqdikKK3sKKwlyZWdpc3RlciB2b2xhdGlsZSBpbnQgKnB0ciBhc20oImcxIik7CisJcmVnaXN0ZXIgaW50IGluY3JlbWVudCBhc20oImcyIik7CisJcmVnaXN0ZXIgaW50IHRtcDEgYXNtKCJnMyIpOworCXJlZ2lzdGVyIGludCB0bXAyIGFzbSgiZzQiKTsKKwlyZWdpc3RlciBpbnQgdG1wMyBhc20oImc3Iik7CisKKwlwdHIgPSAmdi0+Y291bnRlcjsKKwlpbmNyZW1lbnQgPSBpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIm1vdgklJW83LCAlJWc0XG5cdCIKKwkiY2FsbAlfX19hdG9taWMyNF9zdWJcblx0IgorCSIgYWRkCSUlbzcsIDgsICUlbzdcbiIKKwk6ICI9JnIiIChpbmNyZW1lbnQpLCAiPXIiICh0bXAxKSwgIj1yIiAodG1wMiksICI9ciIgKHRtcDMpCisJOiAiMCIgKGluY3JlbWVudCksICJyIiAocHRyKQorCTogIm1lbW9yeSIsICJjYyIpOworCisJcmV0dXJuIGluY3JlbWVudDsKK30KKworI2RlZmluZSBhdG9taWMyNF9hZGQoaSwgdikgKCh2b2lkKV9fYXRvbWljMjRfYWRkKChpKSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljMjRfc3ViKGksIHYpICgodm9pZClfX2F0b21pYzI0X3N1YigoaSksICh2KSkpCisKKyNkZWZpbmUgYXRvbWljMjRfZGVjX3JldHVybih2KSBfX2F0b21pYzI0X3N1YigxLCAodikpCisjZGVmaW5lIGF0b21pYzI0X2luY19yZXR1cm4odikgX19hdG9taWMyNF9hZGQoMSwgKHYpKQorCisjZGVmaW5lIGF0b21pYzI0X3N1Yl9hbmRfdGVzdChpLCB2KSAoX19hdG9taWMyNF9zdWIoKGkpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pYzI0X2RlY19hbmRfdGVzdCh2KSAoX19hdG9taWMyNF9zdWIoMSwgKHYpKSA9PSAwKQorCisjZGVmaW5lIGF0b21pYzI0X2luYyh2KSAoKHZvaWQpX19hdG9taWMyNF9hZGQoMSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljMjRfZGVjKHYpICgodm9pZClfX2F0b21pYzI0X3N1YigxLCAodikpKQorCisjZGVmaW5lIGF0b21pYzI0X2FkZF9uZWdhdGl2ZShpLCB2KSAoX19hdG9taWMyNF9hZGQoKGkpLCAodikpIDwgMCkKKworLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKworI2VuZGlmIC8qICEoX19LRVJORUxfXykgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy5oPgorI2VuZGlmIC8qICEoX19BUkNIX1NQQVJDX0FUT01JQ19fKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYXRvbWljXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWNfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzcxZWM0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pY182NC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKiBhdG9taWMuaDogVGhhbmtmdWxseSB0aGUgVjkgaXMgYXQgbGVhc3QgcmVhc29uYWJsZSBmb3IgdGhpcworICogICAgICAgICAgIHN0dWZmLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfU1BBUkM2NF9BVE9NSUNfXworI2RlZmluZSBfX0FSQ0hfU1BBUkM2NF9BVE9NSUNfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIF9fczY0IGNvdW50ZXI7IH0gYXRvbWljNjRfdDsKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQkJeyAoaSkgfQorI2RlZmluZSBBVE9NSUM2NF9JTklUKGkpCXsgKGkpIH0KKworI2RlZmluZSBhdG9taWNfcmVhZCh2KQkJKCh2KS0+Y291bnRlcikKKyNkZWZpbmUgYXRvbWljNjRfcmVhZCh2KQkoKHYpLT5jb3VudGVyKQorCisjZGVmaW5lIGF0b21pY19zZXQodiwgaSkJKCgodiktPmNvdW50ZXIpID0gaSkKKyNkZWZpbmUgYXRvbWljNjRfc2V0KHYsIGkpCSgoKHYpLT5jb3VudGVyKSA9IGkpCisKK2V4dGVybiB2b2lkIGF0b21pY19hZGQoaW50LCBhdG9taWNfdCAqKTsKK2V4dGVybiB2b2lkIGF0b21pYzY0X2FkZChpbnQsIGF0b21pYzY0X3QgKik7CitleHRlcm4gdm9pZCBhdG9taWNfc3ViKGludCwgYXRvbWljX3QgKik7CitleHRlcm4gdm9pZCBhdG9taWM2NF9zdWIoaW50LCBhdG9taWM2NF90ICopOworCitleHRlcm4gaW50IGF0b21pY19hZGRfcmV0KGludCwgYXRvbWljX3QgKik7CitleHRlcm4gaW50IGF0b21pYzY0X2FkZF9yZXQoaW50LCBhdG9taWM2NF90ICopOworZXh0ZXJuIGludCBhdG9taWNfc3ViX3JldChpbnQsIGF0b21pY190ICopOworZXh0ZXJuIGludCBhdG9taWM2NF9zdWJfcmV0KGludCwgYXRvbWljNjRfdCAqKTsKKworI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSBhdG9taWNfc3ViX3JldCgxLCB2KQorI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpIGF0b21pYzY0X3N1Yl9yZXQoMSwgdikKKworI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSBhdG9taWNfYWRkX3JldCgxLCB2KQorI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpIGF0b21pYzY0X2FkZF9yZXQoMSwgdikKKworI2RlZmluZSBhdG9taWNfc3ViX3JldHVybihpLCB2KSBhdG9taWNfc3ViX3JldChpLCB2KQorI2RlZmluZSBhdG9taWM2NF9zdWJfcmV0dXJuKGksIHYpIGF0b21pYzY0X3N1Yl9yZXQoaSwgdikKKworI2RlZmluZSBhdG9taWNfYWRkX3JldHVybihpLCB2KSBhdG9taWNfYWRkX3JldChpLCB2KQorI2RlZmluZSBhdG9taWM2NF9hZGRfcmV0dXJuKGksIHYpIGF0b21pYzY0X2FkZF9yZXQoaSwgdikKKworLyoKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikgKGF0b21pY19pbmNfcmV0dXJuKHYpID09IDApCisjZGVmaW5lIGF0b21pYzY0X2luY19hbmRfdGVzdCh2KSAoYXRvbWljNjRfaW5jX3JldHVybih2KSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSwgdikgKGF0b21pY19zdWJfcmV0KGksIHYpID09IDApCisjZGVmaW5lIGF0b21pYzY0X3N1Yl9hbmRfdGVzdChpLCB2KSAoYXRvbWljNjRfc3ViX3JldChpLCB2KSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikgKGF0b21pY19zdWJfcmV0KDEsIHYpID09IDApCisjZGVmaW5lIGF0b21pYzY0X2RlY19hbmRfdGVzdCh2KSAoYXRvbWljNjRfc3ViX3JldCgxLCB2KSA9PSAwKQorCisjZGVmaW5lIGF0b21pY19pbmModikgYXRvbWljX2FkZCgxLCB2KQorI2RlZmluZSBhdG9taWM2NF9pbmModikgYXRvbWljNjRfYWRkKDEsIHYpCisKKyNkZWZpbmUgYXRvbWljX2RlYyh2KSBhdG9taWNfc3ViKDEsIHYpCisjZGVmaW5lIGF0b21pYzY0X2RlYyh2KSBhdG9taWM2NF9zdWIoMSwgdikKKworI2RlZmluZSBhdG9taWNfYWRkX25lZ2F0aXZlKGksIHYpIChhdG9taWNfYWRkX3JldChpLCB2KSA8IDApCisjZGVmaW5lIGF0b21pYzY0X2FkZF9uZWdhdGl2ZShpLCB2KSAoYXRvbWljNjRfYWRkX3JldChpLCB2KSA8IDApCisKKyNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgbywgbikgKGNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAobyksIChuKSkpCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQorCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQoreworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKKyNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCisKKyNkZWZpbmUgYXRvbWljNjRfY21weGNoZyh2LCBvLCBuKSBcCisJKChfX3R5cGVvZl9fKCh2KS0+Y291bnRlcikpY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKyNkZWZpbmUgYXRvbWljNjRfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfYWRkX3VubGVzcyhhdG9taWM2NF90ICp2LCBsb25nIGEsIGxvbmcgdSkKK3sKKwlsb25nIGMsIG9sZDsKKwljID0gYXRvbWljNjRfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljNjRfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpIGF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCW1lbWJhcl9zdG9yZWxvYWRfbG9hZGxvYWQoKTsKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJbWVtYmFyX3N0b3JlbG9hZF9zdG9yZXN0b3JlKCk7CisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQltZW1iYXJfc3RvcmVsb2FkX2xvYWRsb2FkKCk7CisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCW1lbWJhcl9zdG9yZWxvYWRfc3RvcmVzdG9yZSgpOworI2Vsc2UKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLmg+CisjZW5kaWYgLyogIShfX0FSQ0hfU1BBUkM2NF9BVE9NSUNfXykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2F1eGlvLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hdXhpby5oCmluZGV4IGU1NTJiOGQuLjI0YzZmM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2F1eGlvLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYXV4aW8uaApAQCAtMSw4OSArMSw4IEBACi0vKgotICogYXV4aW8uaDogIERlZmluaXRpb25zIGFuZCBjb2RlIGZvciB0aGUgQXV4aWxpYXJ5IEkvTyByZWdpc3Rlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0jaWZuZGVmIF9TUEFSQ19BVVhJT19ICi0jZGVmaW5lIF9TUEFSQ19BVVhJT19ICi0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3ZhZGRycy5oPgotCi0vKiBUaGlzIHJlZ2lzdGVyIGlzIGFuIHVuc2lnbmVkIGNoYXIgaW4gSU8gc3BhY2UuICBJdCBkb2VzIHR3byB0aGluZ3MuCi0gKiBGaXJzdCwgaXQgaXMgdXNlZCB0byBjb250cm9sIHRoZSBmcm9udCBwYW5lbCBMRUQgbGlnaHQgb24gbWFjaGluZXMKLSAqIHRoYXQgaGF2ZSBpdCAoZ29vZCBmb3IgdGVzdGluZyBlbnRyeSBwb2ludHMgdG8gdHJhcCBoYW5kbGVycyBhbmQgaXJxJ3MpCi0gKiBTZWNvbmRseSwgaXQgY29udHJvbHMgdmFyaW91cyBmbG9wcHkgZHJpdmUgcGFyYW1ldGVycy4KLSAqLwotI2RlZmluZSBBVVhJT19PUk1FSU4gICAgICAweGYwICAgIC8qIEFsbCB3cml0ZXMgbXVzdCBzZXQgdGhlc2UgYml0cy4gKi8KLSNkZWZpbmUgQVVYSU9fT1JNRUlONE0gICAgMHhjMCAgICAvKiBzdW40bSAtIEFsbCB3cml0ZXMgbXVzdCBzZXQgdGhlc2UgYml0cy4gKi8KLSNkZWZpbmUgQVVYSU9fRkxQWV9ERU5TICAgMHgyMCAgICAvKiBGbG9wcHkgZGVuc2l0eSwgaGlnaCBpZiBzZXQuIFJlYWQgb25seS4gKi8KLSNkZWZpbmUgQVVYSU9fRkxQWV9EQ0hHICAgMHgxMCAgICAvKiBBIGRpc2sgY2hhbmdlIG9jY3VycmVkLiAgUmVhZCBvbmx5LiAqLwotI2RlZmluZSBBVVhJT19FREdFX09OICAgICAweDEwICAgIC8qIHN1bjRtIC0gT24gbWVhbnMgSnVtcGVyIGJsb2NrIGlzIGluLiAqLwotI2RlZmluZSBBVVhJT19GTFBZX0RTRUwgICAweDA4ICAgIC8qIERyaXZlIHNlbGVjdC9zdGFydC1tb3Rvci4gV3JpdGUgb25seS4gKi8KLSNkZWZpbmUgQVVYSU9fTElOS19URVNUICAgMHgwOCAgICAvKiBzdW40bSAtIE9uIG1lYW5zIFRQRSBDYXJyaWVyIGRldGVjdC4gKi8KLQotLyogU2V0IHRoZSBmb2xsb3dpbmcgdG8gb25lLCB0aGVuIHplcm8sIGFmdGVyIGRvaW5nIGEgcHNldWRvIERNQSB0cmFuc2Zlci4gKi8KLSNkZWZpbmUgQVVYSU9fRkxQWV9UQ05UICAgMHgwNCAgICAvKiBGbG9wcHkgdGVybWluYWwgY291bnQuIFdyaXRlIG9ubHkuICovCi0KLS8qIFNldCB0aGUgZm9sbG93aW5nIHRvIHplcm8gdG8gZWplY3QgdGhlIGZsb3BweS4gKi8KLSNkZWZpbmUgQVVYSU9fRkxQWV9FSkNUICAgMHgwMiAgICAvKiBFamVjdCBmbG9wcHkgZGlzay4gIFdyaXRlIG9ubHkuICovCi0jZGVmaW5lIEFVWElPX0xFRCAgICAgICAgIDB4MDEgICAgLyogT24gaWYgc2V0LCBvZmYgaWYgdW5zZXQuIFJlYWQvV3JpdGUgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogCi0gKiBOT1RFOiB0aGVzZSByb3V0aW5lcyBhcmUgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LS0gCi0gKiB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSB5b3UgYXJlIHF1ZXJ5aW5nISAKLSAqLwotZXh0ZXJuIHZvaWQgc2V0X2F1eGlvKHVuc2lnbmVkIGNoYXIgYml0c19vbiwgdW5zaWduZWQgY2hhciBiaXRzX29mZik7Ci1leHRlcm4gdW5zaWduZWQgY2hhciBnZXRfYXV4aW8odm9pZCk7IC8qIC4uLi9hc20tc3BhcmMvZmxvcHB5LmggKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIHByb3ZpZGVkIGZvciBkcml2ZXItY29tcGF0aWJpbGl0eQotICogd2l0aCBzcGFyYzY0IChwcmltYXJpbHkgc3VubGFuY2UuYykKLSAqLwotCi0jZGVmaW5lIEFVWElPX0xURV9PTiAgICAxCi0jZGVmaW5lIEFVWElPX0xURV9PRkYgICAwCi0KLS8qIGF1eGlvX3NldF9sdGUgLSBTZXQgTGluayBUZXN0IEVuYWJsZSAoVFBFIExpbmsgRGV0ZWN0KQotICoKLSAqIG9uIC0gQVVYSU9fTFRFX09OIG9yIEFVWElPX0xURV9PRkYKLSAqLwotI2RlZmluZSBhdXhpb19zZXRfbHRlKG9uKSBcCi1kbyB7IFwKLQlpZihvbikgeyBcCi0JCXNldF9hdXhpbyhBVVhJT19MSU5LX1RFU1QsIDApOyBcCi0JfSBlbHNlIHsgXAotCQlzZXRfYXV4aW8oMCwgQVVYSU9fTElOS19URVNUKTsgXAotCX0gXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBBVVhJT19MRURfT04gICAgMQotI2RlZmluZSBBVVhJT19MRURfT0ZGICAgMAotCi0vKiBhdXhpb19zZXRfbGVkIC0gU2V0IHN5c3RlbSBmcm9udCBwYW5lbCBMRUQKLSAqCi0gKiBvbiAtIEFVWElPX0xFRF9PTiBvciBBVVhJT19MRURfT0ZGCi0gKi8KLSNkZWZpbmUgYXV4aW9fc2V0X2xlZChvbikgXAotZG8geyBcCi0JaWYob24pIHsgXAotCQlzZXRfYXV4aW8oQVVYSU9fTEVELCAwKTsgXAotCX0gZWxzZSB7IFwKLQkJc2V0X2F1eGlvKDAsIEFVWElPX0xFRCk7IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotCi0vKiBBVVhJTzIgKFBvd2VyIE9mZiBDb250cm9sKSAqLwotZXh0ZXJuIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBjaGFyICogYXV4aW9fcG93ZXJfcmVnaXN0ZXI7Ci0KLSNkZWZpbmUJQVVYSU9fUE9XRVJfREVURUNUX0ZBSUxVUkUJMzIKLSNkZWZpbmUJQVVYSU9fUE9XRVJfQ0xFQVJfRkFJTFVSRQkyCi0jZGVmaW5lCUFVWElPX1BPV0VSX09GRgkJCTEKLQotCi0jZW5kaWYgLyogIShfU1BBUkNfQVVYSU9fSCkgKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX0FVWElPX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX0FVWElPX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9hdXhpb182NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvYXV4aW9fMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hdXhpb18zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYXV4aW9fMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGI4ZjIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYXV4aW9fMzIuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogYXV4aW8uaDogIERlZmluaXRpb25zIGFuZCBjb2RlIGZvciB0aGUgQXV4aWxpYXJ5IEkvTyByZWdpc3Rlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZuZGVmIF9TUEFSQ19BVVhJT19ICisjZGVmaW5lIF9TUEFSQ19BVVhJT19ICisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3ZhZGRycy5oPgorCisvKiBUaGlzIHJlZ2lzdGVyIGlzIGFuIHVuc2lnbmVkIGNoYXIgaW4gSU8gc3BhY2UuICBJdCBkb2VzIHR3byB0aGluZ3MuCisgKiBGaXJzdCwgaXQgaXMgdXNlZCB0byBjb250cm9sIHRoZSBmcm9udCBwYW5lbCBMRUQgbGlnaHQgb24gbWFjaGluZXMKKyAqIHRoYXQgaGF2ZSBpdCAoZ29vZCBmb3IgdGVzdGluZyBlbnRyeSBwb2ludHMgdG8gdHJhcCBoYW5kbGVycyBhbmQgaXJxJ3MpCisgKiBTZWNvbmRseSwgaXQgY29udHJvbHMgdmFyaW91cyBmbG9wcHkgZHJpdmUgcGFyYW1ldGVycy4KKyAqLworI2RlZmluZSBBVVhJT19PUk1FSU4gICAgICAweGYwICAgIC8qIEFsbCB3cml0ZXMgbXVzdCBzZXQgdGhlc2UgYml0cy4gKi8KKyNkZWZpbmUgQVVYSU9fT1JNRUlONE0gICAgMHhjMCAgICAvKiBzdW40bSAtIEFsbCB3cml0ZXMgbXVzdCBzZXQgdGhlc2UgYml0cy4gKi8KKyNkZWZpbmUgQVVYSU9fRkxQWV9ERU5TICAgMHgyMCAgICAvKiBGbG9wcHkgZGVuc2l0eSwgaGlnaCBpZiBzZXQuIFJlYWQgb25seS4gKi8KKyNkZWZpbmUgQVVYSU9fRkxQWV9EQ0hHICAgMHgxMCAgICAvKiBBIGRpc2sgY2hhbmdlIG9jY3VycmVkLiAgUmVhZCBvbmx5LiAqLworI2RlZmluZSBBVVhJT19FREdFX09OICAgICAweDEwICAgIC8qIHN1bjRtIC0gT24gbWVhbnMgSnVtcGVyIGJsb2NrIGlzIGluLiAqLworI2RlZmluZSBBVVhJT19GTFBZX0RTRUwgICAweDA4ICAgIC8qIERyaXZlIHNlbGVjdC9zdGFydC1tb3Rvci4gV3JpdGUgb25seS4gKi8KKyNkZWZpbmUgQVVYSU9fTElOS19URVNUICAgMHgwOCAgICAvKiBzdW40bSAtIE9uIG1lYW5zIFRQRSBDYXJyaWVyIGRldGVjdC4gKi8KKworLyogU2V0IHRoZSBmb2xsb3dpbmcgdG8gb25lLCB0aGVuIHplcm8sIGFmdGVyIGRvaW5nIGEgcHNldWRvIERNQSB0cmFuc2Zlci4gKi8KKyNkZWZpbmUgQVVYSU9fRkxQWV9UQ05UICAgMHgwNCAgICAvKiBGbG9wcHkgdGVybWluYWwgY291bnQuIFdyaXRlIG9ubHkuICovCisKKy8qIFNldCB0aGUgZm9sbG93aW5nIHRvIHplcm8gdG8gZWplY3QgdGhlIGZsb3BweS4gKi8KKyNkZWZpbmUgQVVYSU9fRkxQWV9FSkNUICAgMHgwMiAgICAvKiBFamVjdCBmbG9wcHkgZGlzay4gIFdyaXRlIG9ubHkuICovCisjZGVmaW5lIEFVWElPX0xFRCAgICAgICAgIDB4MDEgICAgLyogT24gaWYgc2V0LCBvZmYgaWYgdW5zZXQuIFJlYWQvV3JpdGUgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIE5PVEU6IHRoZXNlIHJvdXRpbmVzIGFyZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQtLQorICogdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgeW91IGFyZSBxdWVyeWluZyEKKyAqLworZXh0ZXJuIHZvaWQgc2V0X2F1eGlvKHVuc2lnbmVkIGNoYXIgYml0c19vbiwgdW5zaWduZWQgY2hhciBiaXRzX29mZik7CitleHRlcm4gdW5zaWduZWQgY2hhciBnZXRfYXV4aW8odm9pZCk7IC8qIC4uLi9hc20tc3BhcmMvZmxvcHB5LmggKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIHByb3ZpZGVkIGZvciBkcml2ZXItY29tcGF0aWJpbGl0eQorICogd2l0aCBzcGFyYzY0IChwcmltYXJpbHkgc3VubGFuY2UuYykKKyAqLworCisjZGVmaW5lIEFVWElPX0xURV9PTiAgICAxCisjZGVmaW5lIEFVWElPX0xURV9PRkYgICAwCisKKy8qIGF1eGlvX3NldF9sdGUgLSBTZXQgTGluayBUZXN0IEVuYWJsZSAoVFBFIExpbmsgRGV0ZWN0KQorICoKKyAqIG9uIC0gQVVYSU9fTFRFX09OIG9yIEFVWElPX0xURV9PRkYKKyAqLworI2RlZmluZSBhdXhpb19zZXRfbHRlKG9uKSBcCitkbyB7IFwKKwlpZihvbikgeyBcCisJCXNldF9hdXhpbyhBVVhJT19MSU5LX1RFU1QsIDApOyBcCisJfSBlbHNlIHsgXAorCQlzZXRfYXV4aW8oMCwgQVVYSU9fTElOS19URVNUKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBVVhJT19MRURfT04gICAgMQorI2RlZmluZSBBVVhJT19MRURfT0ZGICAgMAorCisvKiBhdXhpb19zZXRfbGVkIC0gU2V0IHN5c3RlbSBmcm9udCBwYW5lbCBMRUQKKyAqCisgKiBvbiAtIEFVWElPX0xFRF9PTiBvciBBVVhJT19MRURfT0ZGCisgKi8KKyNkZWZpbmUgYXV4aW9fc2V0X2xlZChvbikgXAorZG8geyBcCisJaWYob24pIHsgXAorCQlzZXRfYXV4aW8oQVVYSU9fTEVELCAwKTsgXAorCX0gZWxzZSB7IFwKKwkJc2V0X2F1eGlvKDAsIEFVWElPX0xFRCk7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworCisvKiBBVVhJTzIgKFBvd2VyIE9mZiBDb250cm9sKSAqLworZXh0ZXJuIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBjaGFyICogYXV4aW9fcG93ZXJfcmVnaXN0ZXI7CisKKyNkZWZpbmUJQVVYSU9fUE9XRVJfREVURUNUX0ZBSUxVUkUJMzIKKyNkZWZpbmUJQVVYSU9fUE9XRVJfQ0xFQVJfRkFJTFVSRQkyCisjZGVmaW5lCUFVWElPX1BPV0VSX09GRgkJCTEKKworCisjZW5kaWYgLyogIShfU1BBUkNfQVVYSU9fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2F1eGlvXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hdXhpb182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MWNkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9hdXhpb182NC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogYXV4aW8uaDogIERlZmluaXRpb25zIGFuZCBjb2RlIGZvciB0aGUgQXV4aWxpYXJ5IEkvTyByZWdpc3RlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqCisgKiBSZWZhY3RvcmluZyBmb3IgdW5pZmllZCBOQ1IvUENJTyBzdXBwb3J0IDIwMDIgRXJpYyBCcm93ZXIgKGVicm93ZXJAdXNhLm5ldCkKKyAqLworI2lmbmRlZiBfU1BBUkM2NF9BVVhJT19ICisjZGVmaW5lIF9TUEFSQzY0X0FVWElPX0gKKworLyogQVVYSU8gaW1wbGVtZW50YXRpb25zOgorICogc2J1cy1iYXNlZCBOQ1I4OUMxMDUgIlNsYXZpbyIKKyAqCUxFRC9GbG9wcHkgKEFVWDEpIHJlZ2lzdGVyCisgKglQb3dlciAoQVVYMikgcmVnaXN0ZXIKKyAqCisgKiBlYnVzLWJhc2VkIGF1eGlvIG9uIFBDSU8KKyAqCUxFRCBBdXhpbyBSZWdpc3RlcgorICoJUG93ZXIgQXV4aW8gUmVnaXN0ZXIKKyAqCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmcm9tIE5DUiBfTkNSODlDMTA1IENoaXAgU3BlY2lmaWNhdGlvbl8KKyAqCisgKiBTTEFWSU8gQVVYMSBAIDB4MTkwMDAwMAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCAoUikgfCAoUikgfCAgRCAgfCAoUikgfCAgRSAgfCAgTSAgfCAgVCAgfCAgTCAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogKFIpIC0gYml0IDc6Niw0IGFyZSByZXNlcnZlZCBhbmQgc2hvdWxkIGJlIG1hc2tlZCBpbiBzL3cKKyAqICBEICAtIEZsb3BweSBEZW5zaXR5IFNlbnNlICgxPWhpZ2ggZGVuc2l0eSkgUi9PCisgKiAgRSAgLSBMaW5rIFRlc3QgRW5hYmxlLCBkaXJlY3RseSByZWZsZWN0ZWQgb24gQVQmVCA3MjEzIExURSBwaW4KKyAqICBNICAtIE1vbml0b3IvTW91c2UgTXV4LCBkaXJlY3RseSByZWZsZWN0ZWQgb24gTU9OX01TRV9NVVggcGluCisgKiAgVCAgLSBUZXJtaW5hbCBDb3VudDogc2VuZHMgVEMgcHVsc2UgdG8gODIwNzcgZmxvcHB5IGNvbnRyb2xsZXIKKyAqICBMICAtIFN5c3RlbSBMRUQgb24gZnJvbnQgcGFuZWwgKDA9b2ZmLCAxPW9uKQorICovCisjZGVmaW5lIEFVWElPX0FVWDFfTUFTSwkJMHhjMCAvKiBNYXNrIGJpdHMgCQkqLworI2RlZmluZSBBVVhJT19BVVgxX0ZERU5TCTB4MjAgLyogRmxvcHB5IERlbnNpdHkgU2Vuc2UJKi8KKyNkZWZpbmUgQVVYSU9fQVVYMV9MVEUgCQkweDA4IC8qIExpbmsgVGVzdCBFbmFibGUgCSovCisjZGVmaW5lIEFVWElPX0FVWDFfTU1VWAkJMHgwNCAvKiBNb25pdG9yL01vdXNlIE11eAkqLworI2RlZmluZSBBVVhJT19BVVgxX0ZUQ05UCTB4MDIgLyogVGVybWluYWwgQ291bnQsIAkqLworI2RlZmluZSBBVVhJT19BVVgxX0xFRAkJMHgwMSAvKiBTeXN0ZW0gTEVECQkqLworCisvKiBTTEFWSU8gQVVYMiBAIDB4MTkxMDAwMAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCAoUikgfCAoUikgfCAgRCAgfCAoUikgfCAoUikgfCAoUikgfCAgQyAgfCAgRiAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogKFIpIC0gYml0cyA3OjYsNDoyIGFyZSByZXNlcnZlZCBhbmQgc2hvdWxkIGJlIG1hc2tlZCBpbiBzL3cKKyAqICBEICAtIFBvd2VyIEZhaWx1cmUgRGV0ZWN0ICgxPXBvd2VyIGZhaWwpCisgKiAgQyAgLSBDbGVhciBQb3dlciBGYWlsdXJlIERldGVjdCBJbnQgKDE9Y2xlYXIpCisgKiAgRiAgLSBQb3dlciBPZmYgKDE9cG93ZXIgb2ZmKQorICovCisjZGVmaW5lIEFVWElPX0FVWDJfTUFTSwkJMHhkYyAvKiBNYXNrIEJpdHMJCSovCisjZGVmaW5lIEFVWElPX0FVWDJfUEZBSUxERVQJMHgyMCAvKiBQb3dlciBGYWlsIERldGVjdAkqLworI2RlZmluZSBBVVhJT19BVVgyX1BGQUlMQ0xSIAkweDAyIC8qIENsZWFyIFB3ciBGYWlsIERldCBJbnRyCSovCisjZGVmaW5lIEFVWElPX0FVWDJfUFdSX09GRgkweDAxIC8qIFBvd2VyIE9mZgkJKi8KKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZnJvbSBTdW4gTWljcm9zeXN0ZW1zIF9QQ0lPXyBwL24gODAyLTc4MzcKKyAqCisgKiBQQ0lPIExFRCBBdXhpbyBAIDB4NzI2MDAwCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAgICAgICAgICAgIDMxOjEgVW51c2VkICAgICAgICAgICAgICAgICB8IExFRCB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBCaXRzIDMxOjEgdW51c2VkCisgKiBMRUQgLSBTeXN0ZW0gTEVEIG9uIGZyb250IHBhbmVsICgwPW9mZiwgMT1vbikKKyAqLworI2RlZmluZSBBVVhJT19QQ0lPX0xFRAkJMHgwMSAvKiBTeXN0ZW0gTEVEIAkJKi8KKworLyogUENJTyBQb3dlciBBdXhpbyBAIDB4NzI0MDAwCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAgICAgICAgICAgIDMxOjIgVW51c2VkICAgICAgICAgICB8IENQTyB8IFNQTyB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBCaXRzIDMxOjIgdW51c2VkCisgKiBDUE8gLSBDb3VydGVzeSBQb3dlciBPZmYgKDE9b2ZmKQorICogU1BPIC0gU3lzdGVtIFBvd2VyIE9mZiAgICgxPW9mZikKKyAqLworI2RlZmluZSBBVVhJT19QQ0lPX0NQV1JfT0ZGCTB4MDIgLyogQ291cnRlc3kgUG93ZXIgT2ZmCSovCisjZGVmaW5lIEFVWElPX1BDSU9fU1BXUl9PRkYJMHgwMSAvKiBTeXN0ZW0gUG93ZXIgT2ZmCSovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2lkIF9faW9tZW0gKmF1eGlvX3JlZ2lzdGVyOworCisjZGVmaW5lIEFVWElPX0xURV9PTgkxCisjZGVmaW5lIEFVWElPX0xURV9PRkYJMAorCisvKiBhdXhpb19zZXRfbHRlIC0gU2V0IExpbmsgVGVzdCBFbmFibGUgKFRQRSBMaW5rIERldGVjdCkKKyAqCisgKiBvbiAtIEFVWElPX0xURV9PTiBvciBBVVhJT19MVEVfT0ZGCisgKi8KK2V4dGVybiB2b2lkIGF1eGlvX3NldF9sdGUoaW50IG9uKTsKKworI2RlZmluZSBBVVhJT19MRURfT04JMQorI2RlZmluZSBBVVhJT19MRURfT0ZGCTAKKworLyogYXV4aW9fc2V0X2xlZCAtIFNldCBzeXN0ZW0gZnJvbnQgcGFuZWwgTEVECisgKgorICogb24gLSBBVVhJT19MRURfT04gb3IgQVVYSU9fTEVEX09GRgorICovCitleHRlcm4gdm9pZCBhdXhpb19zZXRfbGVkKGludCBvbik7CisKKyNlbmRpZiAvKiBpZm5kZWYgX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X0FVWElPX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9iYWNrb2ZmLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9iYWNrb2ZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExZmRmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2JhY2tvZmYuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9TUEFSQzY0X0JBQ0tPRkZfSAorI2RlZmluZSBfU1BBUkM2NF9CQUNLT0ZGX0gKKworI2RlZmluZSBCQUNLT0ZGX0xJTUlUCSg0ICogMTAyNCkKKworI2lmZGVmIENPTkZJR19TTVAKKworI2RlZmluZSBCQUNLT0ZGX1NFVFVQKHJlZykJXAorCW1vdgkxLCByZWcKKworI2RlZmluZSBCQUNLT0ZGX1NQSU4ocmVnLCB0bXAsIGxhYmVsKQlcCisJbW92CXJlZywgdG1wOyBcCis4ODoJYnJueixwdAl0bXAsIDg4YjsgXAorCSBzdWIJdG1wLCAxLCB0bXA7IFwKKwlzZXQJQkFDS09GRl9MSU1JVCwgdG1wOyBcCisJY21wCXJlZywgdG1wOyBcCisJYmcscG4JJXhjYywgbGFiZWw7IFwKKwkgbm9wOyBcCisJYmEscHQJJXhjYywgbGFiZWw7IFwKKwkgc2xseAlyZWcsIDEsIHJlZzsKKworI2Vsc2UKKworI2RlZmluZSBCQUNLT0ZGX1NFVFVQKHJlZykKKyNkZWZpbmUgQkFDS09GRl9TUElOKHJlZywgdG1wLCBsYWJlbCkgXAorCWJhLHB0CSV4Y2MsIGxhYmVsOyBcCisJIG5vcDsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9CQUNLT0ZGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2JiYy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYmJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzYTg1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2JiYy5oCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogYmJjLmg6IERlZmluZXMgZm9yIEJvb3RCdXMgQ29udHJvbGxlciBmb3VuZCBvbiBVbHRyYVNQQVJDLUlJSQorICogICAgICAgIHN5c3RlbXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X0JCQ19ICisjZGVmaW5lIF9TUEFSQzY0X0JCQ19ICisKKy8qIFJlZ2lzdGVyIHNpemVzIGFyZSBpbmRpY2F0ZWQgYnkgIkIiIChCeXRlLCAxLWJ5dGUpLAorICogIkgiIChIYWxmLXdvcmQsIDIgYnl0ZXMpLCAiVyIgKFdvcmQsIDQgYnl0ZXMpIG9yCisgKiAiUSIgKFF1YWQsIDggYnl0ZXMpIGluc2lkZSBicmFja2V0cy4KKyAqLworCisjZGVmaW5lIEJCQ19BSUQJCTB4MDAJLyogW0JdIEFnZW50IElECQkJKi8KKyNkZWZpbmUgQkJDX0RFVlAJMHgwMQkvKiBbQl0gRGV2aWNlIFByZXNlbnQJCSovCisjZGVmaW5lIEJCQ19BUkIJCTB4MDIJLyogW0JdIEFyYml0cmF0aW9uCQkqLworI2RlZmluZSBCQkNfUVVJRVNDRQkweDAzCS8qIFtCXSBRdWllc2NlCQkJKi8KKyNkZWZpbmUgQkJDX1dEQUNUSU9OCTB4MDQJLyogW0JdIFdhdGNoZG9nIEFjdGlvbgkJKi8KKyNkZWZpbmUgQkJDX1NQRwkJMHgwNgkvKiBbQl0gU29mdCBQT1IgR2VuCQkqLworI2RlZmluZSBCQkNfU1hHCQkweDA3CS8qIFtCXSBTb2Z0IFhJUiBHZW4JCSovCisjZGVmaW5lIEJCQ19QU1JDCTB4MDgJLyogW1ddIFBPUiBTb3VyY2UJCSovCisjZGVmaW5lIEJCQ19YU1JDCTB4MGMJLyogW0JdIFhJUiBTb3VyY2UJCSovCisjZGVmaW5lIEJCQ19DU0MJCTB4MGQJLyogW0JdIENsb2NrIFN5bnRoZXNpemVycyBDb250cm9sKi8KKyNkZWZpbmUgQkJDX0VTX0NUUkwJMHgwZQkvKiBbSF0gRW5lcmd5IFN0YXIgQ29udHJvbAkqLworI2RlZmluZSBCQkNfRVNfQUNUCTB4MTAJLyogW1ddIEUqIEFzc2VydCBDaGFuZ2UgVGltZQkqLworI2RlZmluZSBCQkNfRVNfREFDVAkweDE0CS8qIFtCXSBFKiBEZS1Bc3NlcnQgQ2hhbmdlIFRpbWUJKi8KKyNkZWZpbmUgQkJDX0VTX0RBQlQJMHgxNQkvKiBbQl0gRSogRGUtQXNzZXJ0IEJ5cGFzcyBUaW1lCSovCisjZGVmaW5lIEJCQ19FU19BQlQJMHgxNgkvKiBbSF0gRSogQXNzZXJ0IEJ5cGFzcyBUaW1lCSovCisjZGVmaW5lIEJCQ19FU19QU1QJMHgxOAkvKiBbV10gRSogUExMIFNldHRsZSBUaW1lCSovCisjZGVmaW5lIEJCQ19FU19GU0wJMHgxYwkvKiBbV10gRSogRnJlcXVlbmN5IFN3aXRjaCBMYXRlbmN5Ki8KKyNkZWZpbmUgQkJDX0VCVVNUCTB4MjAJLyogW1FdIEVCVVMgVGltaW5nCQkqLworI2RlZmluZSBCQkNfSlRBR19DTUQJMHgyOAkvKiBbV10gSlRBRysgQ29tbWFuZAkJKi8KKyNkZWZpbmUgQkJDX0pUQUdfQ1RSTAkweDJjCS8qIFtCXSBKVEFHKyBDb250cm9sCQkqLworI2RlZmluZSBCQkNfSTJDX1NFTAkweDJkCS8qIFtCXSBJMkMgU2VsZWN0aW9uCQkqLworI2RlZmluZSBCQkNfSTJDXzBfUzEJMHgyZQkvKiBbQl0gSTJDIGN0cmxyLTAgcmVnIFMxCSovCisjZGVmaW5lIEJCQ19JMkNfMF9TMAkweDJmCS8qIFtCXSBJMkMgY3RybHItMCByZWdzIFMwLFMwJyxTMixTMyovCisjZGVmaW5lIEJCQ19JMkNfMV9TMQkweDMwCS8qIFtCXSBJMkMgY3RybHItMSByZWcgUzEJKi8KKyNkZWZpbmUgQkJDX0kyQ18xX1MwCTB4MzEJLyogW0JdIEkyQyBjdHJsci0xIHJlZ3MgUzAsUzAnLFMyLFMzKi8KKyNkZWZpbmUgQkJDX0tCRF9CRUVQCTB4MzIJLyogW0JdIEtleWJvYXJkIEJlZXAJCSovCisjZGVmaW5lIEJCQ19LQkRfQkNOVAkweDM0CS8qIFtXXSBLZXlib2FyZCBCZWVwIENvdW50ZXIJKi8KKworI2RlZmluZSBCQkNfUkVHU19TSVpFCTB4NDAKKworLyogVGhlcmUgaXMgYSAySyBzY3JhdGNoIHJhbSBhcmVhIGF0IG9mZnNldCAweDgwMDAwIGJ1dCBJIGRvdWJ0CisgKiB3ZSB3aWxsIHVzZSBpdCBmb3IgYW55dGhpbmcuCisgKi8KKworLyogQWdlbnQgSUQgcmVnaXN0ZXIuICBUaGlzIHJlZ2lzdGVyIHNob3dzIHRoZSBTYWZhcmkgQWdlbnQgSUQKKyAqIGZvciB0aGUgcHJvY2Vzc29ycy4gIFRoZSB2YWx1ZSByZXR1cm5lZCBkZXBlbmRzIHVwb24gd2hpY2gKKyAqIGNwdSBpcyByZWFkaW5nIHRoZSByZWdpc3Rlci4KKyAqLworI2RlZmluZSBCQkNfQUlEX0lECTB4MDcJLyogU2FmYXJpIElECQkqLworI2RlZmluZSBCQkNfQUlEX1JFU1YJMHhmOAkvKiBSZXNlcnZlZAkJKi8KKworLyogRGV2aWNlIFByZXNlbnQgcmVnaXN0ZXIuICBPbmUgY2FuIGRldGVybWluZSB3aGljaCBjcHVzIGFyZSBhY3R1YWxseQorICogcHJlc2VudCBpbiB0aGUgbWFjaGluZSBieSBpbnRlcnJvZ2F0aW5nIHRoaXMgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQkJDX0RFVlBfQ1BVMAkweDAxCS8qIFByb2Nlc3NvciAwIHByZXNlbnQJKi8KKyNkZWZpbmUgQkJDX0RFVlBfQ1BVMQkweDAyCS8qIFByb2Nlc3NvciAxIHByZXNlbnQJKi8KKyNkZWZpbmUgQkJDX0RFVlBfQ1BVMgkweDA0CS8qIFByb2Nlc3NvciAyIHByZXNlbnQJKi8KKyNkZWZpbmUgQkJDX0RFVlBfQ1BVMwkweDA4CS8qIFByb2Nlc3NvciAzIHByZXNlbnQJKi8KKyNkZWZpbmUgQkJDX0RFVlBfUkVTVgkweGYwCS8qIFJlc2VydmVkCQkqLworCisvKiBBcmJpdHJhdGlvbiByZWdpc3Rlci4gIFRoaXMgcmVnaXN0ZXIgaXMgdXNlZCB0byBibG9jayBhY2Nlc3MgdG8KKyAqIHRoZSBCQkMgZnJvbSBhIHBhcnRpY3VsYXIgY3B1LgorICovCisjZGVmaW5lIEJCQ19BUkJfQ1BVMAkweDAxCS8qIEVuYWJsZSBjcHUgMCBCQkMgYXJiaXRyYXRyaW9uICovCisjZGVmaW5lIEJCQ19BUkJfQ1BVMQkweDAyCS8qIEVuYWJsZSBjcHUgMSBCQkMgYXJiaXRyYXRyaW9uICovCisjZGVmaW5lIEJCQ19BUkJfQ1BVMgkweDA0CS8qIEVuYWJsZSBjcHUgMiBCQkMgYXJiaXRyYXRyaW9uICovCisjZGVmaW5lIEJCQ19BUkJfQ1BVMwkweDA4CS8qIEVuYWJsZSBjcHUgMyBCQkMgYXJiaXRyYXRyaW9uICovCisjZGVmaW5lIEJCQ19BUkJfUkVTVgkweGYwCS8qIFJlc2VydmVkCQkJICovCisKKy8qIFF1aWVzY2UgcmVnaXN0ZXIuICBCdXMgYW5kIEJCQyBzZWdtZW50cyBmb3IgY3B1cyBjYW4gYmUgZGlzYWJsZWQKKyAqIHdpdGggdGhpcyByZWdpc3RlciwgaWUuIGZvciBob3QgcGx1Z2dpbmcuCisgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfUzAyCTB4MDEJLyogUXVpZXNjZSBTYWZhcmkgc2VnbWVudCBmb3IgY3B1IDAgYW5kIDIgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfUzEzCTB4MDIJLyogUXVpZXNjZSBTYWZhcmkgc2VnbWVudCBmb3IgY3B1IDEgYW5kIDMgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfQjAyCTB4MDQJLyogUXVpZXNjZSBCQkMgc2VnbWVudCBmb3IgY3B1IDAgYW5kIDIgICAgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfQjEzCTB4MDgJLyogUXVpZXNjZSBCQkMgc2VnbWVudCBmb3IgY3B1IDEgYW5kIDMgICAgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfRkQwIDB4MTAJLyogRGlzYWJsZSBGYXRhbF9FcnJvclswXSByZXBvcnRpbmcJICAqLworI2RlZmluZSBCQkNfUVVJRVNDRV9GRDEgMHgyMAkvKiBEaXNhYmxlIEZhdGFsX0Vycm9yWzFdIHJlcG9ydGluZwkgICovCisjZGVmaW5lIEJCQ19RVUlFU0NFX0ZEMiAweDQwCS8qIERpc2FibGUgRmF0YWxfRXJyb3JbMl0gcmVwb3J0aW5nCSAgKi8KKyNkZWZpbmUgQkJDX1FVSUVTQ0VfRkQzIDB4ODAJLyogRGlzYWJsZSBGYXRhbF9FcnJvclszXSByZXBvcnRpbmcJICAqLworCisvKiBXYXRjaGRvZyBBY3Rpb24gcmVnaXN0ZXIuICBXaGVuIHRoZSB3YXRjaGRvZyBkZXZpY2UgdGltZXIgZXhwaXJlcworICogYSBsaW5lIGlzIGVuYWJsZWQgdG8gdGhlIEJCQy4gIFRoZSBhY3Rpb24gQkJDIHRha2VzIHdoZW4gdGhpcyBsaW5lCisgKiBpcyBhc3NlcnRlZCBjYW4gYmUgY29udHJvbGxlZCBieSB0aGlzIHJlZ2lzZXIuCisgKi8KKyNkZWZpbmUgQkJDX1dEQUNUSU9OX1JTVCAgMHgwMQkvKiBXaGVuIHNldCwgd2F0Y2hkb2cgY2F1c2VzIHN5c3RlbSByZXNldC4KKwkJCQkgKiBXaGVuIGNsZWFyLCBCQkMgaWdub3JlcyB3YXRjaGRvZyBzaWduYWwuCisJCQkJICovCisjZGVmaW5lIEJCQ19XREFDVElPTl9SRVNWIDB4ZmUJLyogUmVzZXJ2ZWQgKi8KKworLyogU29mdF9QT1JfR0VOIHJlZ2lzdGVyLiAgVGhlIFBPUiAoUG93ZXIgT24gUmVzZXQpIHNpZ25hbCBtYXkgYmUgYXNzZXJ0ZWQKKyAqIGZvciBzcGVjaWZpYyBwcm9jZXNzb3JzIG9yIGFsbCBwcm9jZXNzb3JzIHZpYSB0aGlzIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEJCQ19TUEdfQ1BVMAkweDAxIC8qIEFzc2VydCBQT1IgZm9yIHByb2Nlc3NvciAwCSovCisjZGVmaW5lIEJCQ19TUEdfQ1BVMQkweDAyIC8qIEFzc2VydCBQT1IgZm9yIHByb2Nlc3NvciAxCSovCisjZGVmaW5lIEJCQ19TUEdfQ1BVMgkweDA0IC8qIEFzc2VydCBQT1IgZm9yIHByb2Nlc3NvciAyCSovCisjZGVmaW5lIEJCQ19TUEdfQ1BVMwkweDA4IC8qIEFzc2VydCBQT1IgZm9yIHByb2Nlc3NvciAzCSovCisjZGVmaW5lIEJCQ19TUEdfQ1BVQUxMCTB4MTAgLyogUmVzZXQgYWxsIHByb2Nlc3NvcnMgYW5kIHJlc2V0CisJCQkgICAgICAqIHRoZSBlbnRpcmUgc3lzdGVtLgorCQkJICAgICAgKi8KKyNkZWZpbmUgQkJDX1NQR19SRVNWCTB4ZTAgLyogUmVzZXJ2ZWQJCQkqLworCisvKiBTb2Z0X1hJUl9HRU4gcmVnaXN0ZXIuICBUaGUgWElSIChlWHRlcm5hbGx5IEluaXRpYXRlZCBSZXNldCkgc2lnbmFsCisgKiBtYXkgYmUgYXNzZXJ0ZWQgdG8gc3BlY2lmaWMgcHJvY2Vzc29ycyB2aWEgdGhpcyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBCQkNfU1hHX0NQVTAJMHgwMSAvKiBBc3NlcnQgWElSIGZvciBwcm9jZXNzb3IgMAkqLworI2RlZmluZSBCQkNfU1hHX0NQVTEJMHgwMiAvKiBBc3NlcnQgWElSIGZvciBwcm9jZXNzb3IgMQkqLworI2RlZmluZSBCQkNfU1hHX0NQVTIJMHgwNCAvKiBBc3NlcnQgWElSIGZvciBwcm9jZXNzb3IgMgkqLworI2RlZmluZSBCQkNfU1hHX0NQVTMJMHgwOCAvKiBBc3NlcnQgWElSIGZvciBwcm9jZXNzb3IgMwkqLworI2RlZmluZSBCQkNfU1hHX1JFU1YJMHhmMCAvKiBSZXNlcnZlZAkJCSovCisKKy8qIFBPUiBTb3VyY2UgcmVnaXN0ZXIuICBPbmUgbWF5IGlkZW50aWZ5IHRoZSBjYXVzZSBvZiB0aGUgbW9zdCByZWNlbnQKKyAqIHJlc2V0IGJ5IHJlYWRpbmcgdGhpcyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBCQkNfUFNSQ19TUEcwCTB4MDAwMSAvKiBDUFUgMCByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19TUEcxCTB4MDAwMiAvKiBDUFUgMSByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19TUEcyCTB4MDAwNCAvKiBDUFUgMiByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19TUEczCTB4MDAwOCAvKiBDUFUgMyByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19TUEdTWVMJMHgwMDEwIC8qIFN5c3RlbSByZXNldCB2aWEgQkJDX1NQRyByZWdpc3RlcgkqLworI2RlZmluZSBCQkNfUFNSQ19KVEFHCTB4MDAyMCAvKiBTeXN0ZW0gcmVzZXQgdmlhIEpUQUcrCQkqLworI2RlZmluZSBCQkNfUFNSQ19CVVRUT04JMHgwMDQwIC8qIFN5c3RlbSByZXNldCB2aWEgcHVzaC1idXR0b24gZG9uZ2xlCSovCisjZGVmaW5lIEJCQ19QU1JDX1BXUlVQCTB4MDA4MCAvKiBTeXN0ZW0gcmVzZXQgdmlhIHBvd2VyLXVwCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTAJMHgwMTAwIC8qIENQVSAwIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTEJMHgwMjAwIC8qIENQVSAxIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTIJMHgwNDAwIC8qIENQVSAyIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTMJMHgwODAwIC8qIENQVSAzIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19GRTQJMHgxMDAwIC8qIFNjaGl6byByZXBvcnRlZCBGYXRhbF9FcnJvcgkJKi8KKyNkZWZpbmUgQkJDX1BTUkNfRkU1CTB4MjAwMCAvKiBTYWZhcmkgZGV2aWNlIDUgcmVwb3J0ZWQgRmF0YWxfRXJyb3IJKi8KKyNkZWZpbmUgQkJDX1BTUkNfRkU2CTB4NDAwMCAvKiBDUE1TIHJlcG9ydGVkIEZhdGFsX0Vycm9yCQkqLworI2RlZmluZSBCQkNfUFNSQ19TWU5USAkweDgwMDAgLyogU3lzdGVtIHJlc2V0IHdoZW4gb24tYm9hcmQgY2xvY2sgc3ludGhlc2l6ZXJzCisJCQkJKiB3ZXJlIHVwZGF0ZWQuCisJCQkJKi8KKyNkZWZpbmUgQkJDX1BTUkNfV0RUICAgMHgxMDAwMCAvKiBTeXN0ZW0gcmVzZXQgdmlhIFN1cGVyIEkvTyB3YXRjaGRvZwkqLworI2RlZmluZSBCQkNfUFNSQ19SU0MgICAweDIwMDAwIC8qIFN5c3RlbSByZXNldCB2aWEgUlNDIHJlbW90ZSBtb25pdG9yaW5nCisJCQkJKiBkZXZpY2UKKwkJCQkqLworCisvKiBYSVIgU291cmNlIHJlZ2lzdGVyLiAgVGhlIHNvdXJjZSBvZiBhbiBYSVIgZXZlbnQgc2VudCB0byBhIHByb2Nlc3NvciBtYXkKKyAqIGJlIGRldGVybWluZWQgdmlhIHRoaXMgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgQkJDX1hTUkNfU1hHMAkweDAxCS8qIENQVSAwIHJlY2VpdmVkIFhJUiB2aWEgU29mdF9YSVJfR0VOIHJlZyAqLworI2RlZmluZSBCQkNfWFNSQ19TWEcxCTB4MDIJLyogQ1BVIDEgcmVjZWl2ZWQgWElSIHZpYSBTb2Z0X1hJUl9HRU4gcmVnICovCisjZGVmaW5lIEJCQ19YU1JDX1NYRzIJMHgwNAkvKiBDUFUgMiByZWNlaXZlZCBYSVIgdmlhIFNvZnRfWElSX0dFTiByZWcgKi8KKyNkZWZpbmUgQkJDX1hTUkNfU1hHMwkweDA4CS8qIENQVSAzIHJlY2VpdmVkIFhJUiB2aWEgU29mdF9YSVJfR0VOIHJlZyAqLworI2RlZmluZSBCQkNfWFNSQ19KVEFHCTB4MTAJLyogQWxsIENQVXMgcmVjZWl2ZWQgWElSIHZpYSBKVEFHKyAgICAgICAgICovCisjZGVmaW5lIEJCQ19YU1JDX1dfT1JfQgkweDIwCS8qIEFsbCBDUFVzIHJlY2VpdmVkIFhJUiBlaXRoZXIgYmVjYXVzZToKKwkJCQkgKiBhKSBTdXBlciBJL08gd2F0Y2hkb2cgZmlyZWQsIG9yCisJCQkJICogYikgWElSIHB1c2ggYnV0dG9uIHdhcyBhY3RpdmF0ZWQKKwkJCQkgKi8KKyNkZWZpbmUgQkJDX1hTUkNfUkVTVgkweGMwCS8qIFJlc2VydmVkCQkJCSAgICovCisKKy8qIENsb2NrIFN5bnRoZXNpemVycyBDb250cm9sIHJlZ2lzdGVyLiAgVGhpcyByZWdpc3RlciBwcm92aWRlcyB0aGUgYmlnLWJhbmcKKyAqIHByb2dyYW1taW5nIGludGVyZmFjZSB0byB0aGUgdHdvIGNsb2NrIHN5bnRoZXNpemVycyBvZiB0aGUgbWFjaGluZS4KKyAqLworI2RlZmluZSBCQkNfQ1NDX1NMT0FECTB4MDEJLyogRGlyZWN0bHkgY29ubmVjdGVkIHRvIFNfTE9BRCBwaW5zCSovCisjZGVmaW5lIEJCQ19DU0NfU0RBVEEJMHgwMgkvKiBEaXJlY3RseSBjb25uZWN0ZWQgdG8gU19EQVRBIHBpbnMJKi8KKyNkZWZpbmUgQkJDX0NTQ19TQ0xPQ0sJMHgwNAkvKiBEaXJlY3RseSBjb25uZWN0ZWQgdG8gU19DTE9DSyBwaW5zCSovCisjZGVmaW5lIEJCQ19DU0NfUkVTVgkweDc4CS8qIFJlc2VydmVkCQkJCSovCisjZGVmaW5lIEJCQ19DU0NfUlNUCTB4ODAJLyogR2VuZXJhdGUgc3lzdGVtIHJlc2V0IHdoZW4gU19MT0FEPT0xCSovCisKKy8qIEVuZXJneSBTdGFyIENvbnRyb2wgcmVnaXN0ZXIuICBUaGlzIHJlZ2lzdGVyIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCisgKiBjbG9jayBmcmVxdWVuY3kgY2hhbmdlIHRyaWdnZXIgdG8gdGhlIG1haW4gc3lzdGVtIGRldmljZXMgKFNjaGl6byBhbmQKKyAqIHRoZSBwcm9jZXNzb3JzKS4gIFRoZSB0cmFuc2l0aW9uIG9jY3VycyB3aGVuIGJpdHMgaW4gdGhpcyByZWdpc3RlcgorICogZ28gZnJvbSAwIHRvIDEsIG9ubHkgb25lIGJpdCBtdXN0IGJlIHNldCBhdCBvbmNlIGVsc2Ugbm8gYWN0aW9uCisgKiBvY2N1cnMuICBCYXNpY2FsbHkgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBpczoKKyAqIGEpIENob29zZSBuZXcgZnJlcXVlbmN5OiBmdWxsLCAxLzIgb3IgMS8zMgorICogYikgUHJvZ3JhbSB0aGlzIGRlc2lyZWQgZnJlcXVlbmN5IGludG8gdGhlIGNwdXMgYW5kIFNjaGl6by4KKyAqIGMpIFNldCB0aGUgc2FtZSB2YWx1ZSBpbiB0aGlzIHJlZ2lzdGVyLgorICogZCkgMTYgc3lzdGVtIGNsb2NrcyBsYXRlciwgY2xlYXIgdGhpcyByZWdpc3Rlci4KKyAqLworI2RlZmluZSBCQkNfRVNfQ1RSTF8xXzEJCTB4MDEJLyogRnVsbCBmcmVxdWVuY3kJKi8KKyNkZWZpbmUgQkJDX0VTX0NUUkxfMV8yCQkweDAyCS8qIDEvMiBmcmVxdWVuY3kJKi8KKyNkZWZpbmUgQkJDX0VTX0NUUkxfMV8zMgkweDIwCS8qIDEvMzIgZnJlcXVlbmN5CSovCisjZGVmaW5lIEJCQ19FU19SRVNWCQkweGRjCS8qIFJlc2VydmVkCQkqLworCisvKiBFbmVyZ3kgU3RhciBBc3NlcnQgQ2hhbmdlIFRpbWUgcmVnaXN0ZXIuICBUaGlzIGRldGVybWluZXMgdGhlIG51bWJlcgorICogb2YgQkJDIGNsb2NrIGN5Y2xlcyAod2hpY2ggaXMgaGFsZiB0aGUgc3lzdGVtIGZyZXF1ZW5jeSkgYmV0d2VlbgorICogdGhlIGRldGVjdGlvbiBvZiBGUkVFWkVfQUNLIGJlaW5nIGFzc2VydGVkIGFuZCB0aGUgYXNzZXJ0aW9uIG9mCisgKiB0aGUgQ0xLX0NIQU5HRV9MWzI6MF0gc2lnbmFscy4KKyAqLworI2RlZmluZSBCQkNfRVNfQUNUX1ZBTAkweGZmCisKKy8qIEVuZXJneSBTdGFyIEFzc2VydCBCeXBhc3MgVGltZSByZWdpc3Rlci4gIFRoaXMgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyCisgKiBvZiBCQkMgY2xvY2sgY3ljbGVzICh3aGljaCBpcyBoYWxmIHRoZSBzeXN0ZW0gZnJlcXVlbmN5KSBiZXR3ZWVuCisgKiB0aGUgYXNzZXJ0aW9uIG9mIHRoZSBDTEtfQ0hBTkdFX0xbMjowXSBzaWduYWxzIGFuZCB0aGUgYXNzZXJ0aW9uIG9mCisgKiB0aGUgRVNUQVJfUExMX0JZUEFTUyBzaWduYWwuCisgKi8KKyNkZWZpbmUgQkJDX0VTX0FCVF9WQUwJMHhmZmZmCisKKy8qIEVuZXJneSBTdGFyIFBMTCBTZXR0bGUgVGltZSByZWdpc3Rlci4gIFRoaXMgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mCisgKiBCQkMgY2xvY2sgY3ljbGVzICh3aGljaCBpcyBoYWxmIHRoZSBzeXN0ZW0gZnJlcXVlbmN5KSBiZXR3ZWVuIHRoZQorICogZGUtYXNzZXJ0aW9uIG9mIENMS19DSEFOR0VfTFsyOjBdIGFuZCB0aGUgZGUtYXNzZXJ0aW9uIG9mIHRoZSBGUkVFWkVfTAorICogc2lnbmFsLgorICovCisjZGVmaW5lIEJCQ19FU19QU1RfVkFMCTB4ZmZmZmZmZmYKKworLyogRW5lcmd5IFN0YXIgRnJlcXVlbmN5IFN3aXRjaCBMYXRlbmN5IHJlZ2lzdGVyLiAgVGhpcyBpcyB0aGUgbnVtYmVyIG9mCisgKiBCQkMgY2xvY2tzIGJldHdlZW4gdGhlIGRlLWFzc2VydGlvbiBvZiBDTEtfQ0hBTkdFX0xbMjowXSBhbmQgdGhlIGZpcnN0CisgKiBlZGdlIG9mIHRoZSBTYWZhcmkgY2xvY2sgYXQgdGhlIG5ldyBmcmVxdWVuY3kuCisgKi8KKyNkZWZpbmUgQkJDX0VTX0ZTTF9WQUwJMHhmZmZmZmZmZgorCisvKiBLZXlib2FyZCBCZWVwIGNvbnRyb2wgcmVnaXN0ZXIuICBUaGlzIGlzIGEgc2ltcGxlIGVuYWJsZXIgZm9yIHRoZSBhdWRpbworICogYmVlcCBzb3VuZC4KKyAqLworI2RlZmluZSBCQkNfS0JEX0JFRVBfRU5BQkxFCTB4MDEgLyogRW5hYmxlIGJlZXAJKi8KKyNkZWZpbmUgQkJDX0tCRF9CRUVQX1JFU1YJMHhmZSAvKiBSZXNlcnZlZAkqLworCisvKiBLZXlib2FyZCBCZWVwIENvdW50ZXIgcmVnaXN0ZXIuICBUaGVyZSBpcyBhIGZyZWUtcnVubmluZyBjb3VudGVyIGluc2lkZQorICogdGhlIEJCQyB3aGljaCBydW5zIGF0IGhhbGYgdGhlIHN5c3RlbSBjbG9jay4gIFRoZSBiaXQgc2V0IGluIHRoaXMgcmVnaXN0ZXIKKyAqIGRldGVybWluZXMgd2hlbiB0aGUgYXVkaW8gc291bmQgaXMgZ2VuZXJhdGVkLiAgU28gZm9yIGV4YW1wbGUgaWYgYml0CisgKiAxMCBpcyBzZXQsIHRoZSBhdWRpbyBiZWVwIHdpbGwgb3NjaWxsYXRlIGF0IDEvKDIqKjEyKS4gIFRoZSBrZXlib2FyZCBiZWVwCisgKiBnZW5lcmF0b3IgYXV0b21hdGljYWxseSBzZWxlY3RzIGEgZGlmZmVyZW50IGJpdCB0byB1c2UgaWYgdGhlIHN5c3RlbSBjbG9jaworICogaXMgY2hhbmdlZCB2aWEgRW5lcmd5IFN0YXIuCisgKi8KKyNkZWZpbmUgQkJDX0tCRF9CQ05UX0JJVFMJMHgwMDA3ZmMwMAorI2RlZmluZSBCQkNfS0JDX0JDTlRfUkVTVgkweGZmZjgwM2ZmCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9CQkNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2JpdG9wcy5oCmluZGV4IDY4Yjk4YTdlLi4xYTI5NDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9iaXRvcHMuaApAQCAtMSwxMTEgKzEsOCBAQAotLyoKLSAqIGJpdG9wcy5oOiBCaXQgc3RyaW5nIG9wZXJhdGlvbnMgb24gdGhlIFNwYXJjLgotICoKLSAqIENvcHlyaWdodCAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAxOTk2IEVkZGllIEMuIERvc3QgICAoZWNkQHNreW5ldC5iZSkKLSAqIENvcHlyaWdodCAyMDAxIEFudG9uIEJsYW5jaGFyZCAoYW50b25Ac2FtYmEub3JnKQotICovCi0KLSNpZm5kZWYgX1NQQVJDX0JJVE9QU19ICi0jZGVmaW5lIF9TUEFSQ19CSVRPUFNfSAotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICi0jZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2lmbmRlZiBfX19BU01fU1BBUkNfQklUT1BTX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX0JJVE9QU19ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvYml0b3BzXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9iaXRvcHNfMzIuaD4KICNlbmRpZgotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX19zZXRfYml0KHVuc2lnbmVkIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbWFzayk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX19jbGVhcl9iaXQodW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBtYXNrKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fX2NoYW5nZV9iaXQodW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBtYXNrKTsKLQotLyoKLSAqIFNldCBiaXQgJ25yJyBpbiAzMi1iaXQgcXVhbnRpdHkgYXQgYWRkcmVzcyAnYWRkcicgd2hlcmUgYml0ICcwJwotICogaXMgaW4gdGhlIGhpZ2hlc3Qgb2YgdGhlIGZvdXIgYnl0ZXMgYW5kIGJpdCAnMzEnIGlzIHRoZSBoaWdoIGJpdAotICogd2l0aGluIHRoZSBmaXJzdCBieXRlLiBTcGFyYyBpcyBCSUctRW5kaWFuLiBVbmxlc3Mgbm90ZWQgb3RoZXJ3aXNlCi0gKiBhbGwgYml0LW9wcyByZXR1cm4gMCBpZiBiaXQgd2FzIHByZXZpb3VzbHkgY2xlYXIgYW5kICE9IDAgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyAqQUREUiwgbWFzazsKLQotCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7Ci0JbWFzayA9IDEgPDwgKG5yICYgMzEpOwotCi0JcmV0dXJuIF9fX3NldF9iaXQoQUREUiwgbWFzaykgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQl1bnNpZ25lZCBsb25nICpBRERSLCBtYXNrOwotCi0JQUREUiA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiA1KTsKLQltYXNrID0gMSA8PCAobnIgJiAzMSk7Ci0KLQkodm9pZCkgX19fc2V0X2JpdChBRERSLCBtYXNrKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyAqQUREUiwgbWFzazsKLQotCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7Ci0JbWFzayA9IDEgPDwgKG5yICYgMzEpOwotCi0JcmV0dXJuIF9fX2NsZWFyX2JpdChBRERSLCBtYXNrKSAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyAqQUREUiwgbWFzazsKLQotCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7Ci0JbWFzayA9IDEgPDwgKG5yICYgMzEpOwotCi0JKHZvaWQpIF9fX2NsZWFyX2JpdChBRERSLCBtYXNrKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQotewotCXVuc2lnbmVkIGxvbmcgKkFERFIsIG1hc2s7Ci0KLQlBRERSID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IDUpOwotCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKLQotCXJldHVybiBfX19jaGFuZ2VfYml0KEFERFIsIG1hc2spICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyAqQUREUiwgbWFzazsKLQotCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7Ci0JbWFzayA9IDEgPDwgKG5yICYgMzEpOwotCi0JKHZvaWQpIF9fX2NoYW5nZV9iaXQoQUREUiwgbWFzayk7Ci19Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgotCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWRvIHsgfSB3aGlsZSgwKQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnMuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLWF0b21pYy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oPgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogZGVmaW5lZChfU1BBUkNfQklUT1BTX0gpICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2JpdG9wc18zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYml0b3BzXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiOThhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9iaXRvcHNfMzIuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIGJpdG9wcy5oOiBCaXQgc3RyaW5nIG9wZXJhdGlvbnMgb24gdGhlIFNwYXJjLgorICoKKyAqIENvcHlyaWdodCAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAxOTk2IEVkZGllIEMuIERvc3QgICAoZWNkQHNreW5ldC5iZSkKKyAqIENvcHlyaWdodCAyMDAxIEFudG9uIEJsYW5jaGFyZCAoYW50b25Ac2FtYmEub3JnKQorICovCisKKyNpZm5kZWYgX1NQQVJDX0JJVE9QU19ICisjZGVmaW5lIF9TUEFSQ19CSVRPUFNfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fX3NldF9iaXQodW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBtYXNrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIG1hc2spOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19fY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIG1hc2spOworCisvKgorICogU2V0IGJpdCAnbnInIGluIDMyLWJpdCBxdWFudGl0eSBhdCBhZGRyZXNzICdhZGRyJyB3aGVyZSBiaXQgJzAnCisgKiBpcyBpbiB0aGUgaGlnaGVzdCBvZiB0aGUgZm91ciBieXRlcyBhbmQgYml0ICczMScgaXMgdGhlIGhpZ2ggYml0CisgKiB3aXRoaW4gdGhlIGZpcnN0IGJ5dGUuIFNwYXJjIGlzIEJJRy1FbmRpYW4uIFVubGVzcyBub3RlZCBvdGhlcndpc2UKKyAqIGFsbCBiaXQtb3BzIHJldHVybiAwIGlmIGJpdCB3YXMgcHJldmlvdXNseSBjbGVhciBhbmQgIT0gMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nICpBRERSLCBtYXNrOworCisJQUREUiA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiA1KTsKKwltYXNrID0gMSA8PCAobnIgJiAzMSk7CisKKwlyZXR1cm4gX19fc2V0X2JpdChBRERSLCBtYXNrKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgKkFERFIsIG1hc2s7CisKKwlBRERSID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IDUpOworCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKKworCSh2b2lkKSBfX19zZXRfYml0KEFERFIsIG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nICpBRERSLCBtYXNrOworCisJQUREUiA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiA1KTsKKwltYXNrID0gMSA8PCAobnIgJiAzMSk7CisKKwlyZXR1cm4gX19fY2xlYXJfYml0KEFERFIsIG1hc2spICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nICpBRERSLCBtYXNrOworCisJQUREUiA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiA1KTsKKwltYXNrID0gMSA8PCAobnIgJiAzMSk7CisKKwkodm9pZCkgX19fY2xlYXJfYml0KEFERFIsIG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyAqQUREUiwgbWFzazsKKworCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7CisJbWFzayA9IDEgPDwgKG5yICYgMzEpOworCisJcmV0dXJuIF9fX2NoYW5nZV9iaXQoQUREUiwgbWFzaykgIT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nICpBRERSLCBtYXNrOworCisJQUREUiA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiA1KTsKKwltYXNrID0gMSA8PCAobnIgJiAzMSk7CisKKwkodm9pZCkgX19fY2hhbmdlX2JpdChBRERSLCBtYXNrKTsKK30KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+CisKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJZG8geyB9IHdoaWxlKDApCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmZ6Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL19fZmZzLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmcy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mbHMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL21pbml4Lmg+CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9TUEFSQ19CSVRPUFNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2JpdG9wc182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYml0b3BzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4N2I4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2JpdG9wc182NC5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogYml0b3BzLmg6IEJpdCBzdHJpbmcgb3BlcmF0aW9ucyBvbiB0aGUgVjkuCisgKgorICogQ29weXJpZ2h0IDE5OTYsIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDNjRfQklUT1BTX0gKKyNkZWZpbmUgX1NQQVJDNjRfQklUT1BTX0gKKworI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCitleHRlcm4gaW50IHRlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CitleHRlcm4gaW50IHRlc3RfYW5kX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKTsKK2V4dGVybiBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKTsKK2V4dGVybiB2b2lkIHNldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CitleHRlcm4gdm9pZCBjbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CitleHRlcm4gdm9pZCBjaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaD4KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJbWVtYmFyX3N0b3JlbG9hZF9sb2FkbG9hZCgpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJbWVtYmFyX3N0b3JlbG9hZF9zdG9yZXN0b3JlKCkKKyNlbHNlCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmZ6Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL19fZmZzLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zscy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9fX2Zscy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmcy5oPgorCisvKgorICogaHdlaWdodE46IHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IChpLmUuIHRoZSBudW1iZXIKKyAqIG9mIGJpdHMgc2V0KSBvZiBhIE4tYml0IHdvcmQKKyAqLworCisjaWZkZWYgVUxUUkFfSEFTX1BPUFVMQVRJT05fQ09VTlQKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaHdlaWdodDY0KHVuc2lnbmVkIGxvbmcgdykKK3sKKwl1bnNpZ25lZCBpbnQgcmVzOworCisJX19hc21fXyAoInBvcGMgJTEsJTAiIDogIj1yIiAocmVzKSA6ICJyIiAodykpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKK3sKKwl1bnNpZ25lZCBpbnQgcmVzOworCisJX19hc21fXyAoInBvcGMgJTEsJTAiIDogIj1yIiAocmVzKSA6ICJyIiAodyAmIDB4ZmZmZmZmZmYpKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBod2VpZ2h0MTYodW5zaWduZWQgaW50IHcpCit7CisJdW5zaWduZWQgaW50IHJlczsKKworCV9fYXNtX18gKCJwb3BjICUxLCUwIiA6ICI9ciIgKHJlcykgOiAiciIgKHcgJiAweGZmZmYpKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBod2VpZ2h0OCh1bnNpZ25lZCBpbnQgdykKK3sKKwl1bnNpZ25lZCBpbnQgcmVzOworCisJX19hc21fXyAoInBvcGMgJTEsJTAiIDogIj1yIiAocmVzKSA6ICJyIiAodyAmIDB4ZmYpKTsKKwlyZXR1cm4gcmVzOworfQorCisjZWxzZQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKworI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgorCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jayxucixhZGRyKSBcCisJdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gMHgzOCwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssbnIsYWRkcikgXAorCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gMHgzOCwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oPgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogZGVmaW5lZChfU1BBUkM2NF9CSVRPUFNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlZmx1c2guaAppbmRleCA2OGFjMTA5Li4yYjZhMzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGVmbHVzaC5oCkBAIC0xLDg1ICsxLDggQEAKLSNpZm5kZWYgX1NQQVJDX0NBQ0hFRkxVU0hfSAotI2RlZmluZSBfU1BBUkNfQ0FDSEVGTFVTSF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgkJLyogQ29tbW9uIGZvciBvdGhlciBpbmNsdWRlcyAqLwotLy8gI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiBmcm9tIHBnYWxsb2MuaAotLy8gI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+ICBmcm9tIHBnYWxsb2MuaAotCi0vLyAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgotCi0vKgotICogRmluZSBncmFpbmVkIGNhY2hlIGZsdXNoaW5nLgotICovCi0jaWZkZWYgQ09ORklHX1NNUAotCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfY2FjaGVfYWxsLCB2b2lkKQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvY2FsX2ZsdXNoX2NhY2hlX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICopCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfY2FjaGVfcmFuZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvY2FsX2ZsdXNoX2NhY2hlX3BhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQotCi0jZGVmaW5lIGxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9hbGwpKCkKLSNkZWZpbmUgbG9jYWxfZmx1c2hfY2FjaGVfbW0obW0pIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9tbSkobW0pCi0jZGVmaW5lIGxvY2FsX2ZsdXNoX2NhY2hlX3JhbmdlKHZtYSxzdGFydCxlbmQpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9yYW5nZSkodm1hLHN0YXJ0LGVuZCkKLSNkZWZpbmUgbG9jYWxfZmx1c2hfY2FjaGVfcGFnZSh2bWEsYWRkcikgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX2NhY2hlX3BhZ2UpKHZtYSxhZGRyKQotCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfcGFnZV90b19yYW0sIHVuc2lnbmVkIGxvbmcpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfc2lnX2luc25zLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCi0KLSNkZWZpbmUgbG9jYWxfZmx1c2hfcGFnZV90b19yYW0oYWRkcikgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX3BhZ2VfdG9fcmFtKShhZGRyKQotI2RlZmluZSBsb2NhbF9mbHVzaF9zaWdfaW5zbnMobW0saW5zbl9hZGRyKSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfc2lnX2luc25zKShtbSxpbnNuX2FkZHIpCi0KLWV4dGVybiB2b2lkIHNtcF9mbHVzaF9jYWNoZV9hbGwodm9pZCk7Ci1leHRlcm4gdm9pZCBzbXBfZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKTsKLWV4dGVybiB2b2lkIHNtcF9mbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpOwotCi1leHRlcm4gdm9pZCBzbXBfZmx1c2hfcGFnZV90b19yYW0odW5zaWduZWQgbG9uZyBwYWdlKTsKLWV4dGVybiB2b2lkIHNtcF9mbHVzaF9zaWdfaW5zbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgaW5zbl9hZGRyKTsKLQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX2NhY2hlX2FsbCwgdm9pZCkKLUJURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF9jYWNoZV9tbSwgc3RydWN0IG1tX3N0cnVjdCAqKQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX2NhY2hlX3JhbmdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLUJURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF9jYWNoZV9wYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZykKLQotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKSBCVEZJWFVQX0NBTEwoZmx1c2hfY2FjaGVfYWxsKSgpCi0jZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKSBCVEZJWFVQX0NBTEwoZmx1c2hfY2FjaGVfbW0pKG1tKQotI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pIEJURklYVVBfQ0FMTChmbHVzaF9jYWNoZV9tbSkobW0pCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSxzdGFydCxlbmQpIEJURklYVVBfQ0FMTChmbHVzaF9jYWNoZV9yYW5nZSkodm1hLHN0YXJ0LGVuZCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsYWRkcixwZm4pIEJURklYVVBfQ0FMTChmbHVzaF9jYWNoZV9wYWdlKSh2bWEsYWRkcikKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGcpCQlkbyB7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JZG8gewkJCQkJCQlcCi0JCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpO1wKLQkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JZG8gewkJCQkJCQlcCi0JCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpO1wKLQkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCi0JfSB3aGlsZSAoMCkKLQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIF9fZmx1c2hfcGFnZV90b19yYW0sIHVuc2lnbmVkIGxvbmcpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgZmx1c2hfc2lnX2luc25zLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCi0KLSNkZWZpbmUgX19mbHVzaF9wYWdlX3RvX3JhbShhZGRyKSBCVEZJWFVQX0NBTEwoX19mbHVzaF9wYWdlX3RvX3JhbSkoYWRkcikKLSNkZWZpbmUgZmx1c2hfc2lnX2luc25zKG1tLGluc25fYWRkcikgQlRGSVhVUF9DQUxMKGZsdXNoX3NpZ19pbnNucykobW0saW5zbl9hZGRyKQotCi1leHRlcm4gdm9pZCBzcGFyY19mbHVzaF9wYWdlX3RvX3JhbShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0KLSNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlzcGFyY19mbHVzaF9wYWdlX3RvX3JhbShwYWdlKQotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQotCi0jZW5kaWYgLyogX1NQQVJDX0NBQ0hFRkxVU0hfSCAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19DQUNIRUZMVVNIX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9jYWNoZWZsdXNoXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9jYWNoZWZsdXNoXzMyLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGVmbHVzaF8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGVmbHVzaF8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWMxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZWZsdXNoXzMyLmgKQEAgLTAsMCArMSw4NSBAQAorI2lmbmRlZiBfU1BBUkNfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9TUEFSQ19DQUNIRUZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBDb21tb24gZm9yIG90aGVyIGluY2x1ZGVzICovCisvLyAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+IGZyb20gcGdhbGxvYy5oCisvLyAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4gIGZyb20gcGdhbGxvYy5oCisKKy8vICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisKKy8qCisgKiBGaW5lIGdyYWluZWQgY2FjaGUgZmx1c2hpbmcuCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBsb2NhbF9mbHVzaF9jYWNoZV9hbGwsIHZvaWQpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfY2FjaGVfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKikKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBsb2NhbF9mbHVzaF9jYWNoZV9yYW5nZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfY2FjaGVfcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCisKKyNkZWZpbmUgbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX2NhY2hlX2FsbCkoKQorI2RlZmluZSBsb2NhbF9mbHVzaF9jYWNoZV9tbShtbSkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX2NhY2hlX21tKShtbSkKKyNkZWZpbmUgbG9jYWxfZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLHN0YXJ0LGVuZCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX2NhY2hlX3JhbmdlKSh2bWEsc3RhcnQsZW5kKQorI2RlZmluZSBsb2NhbF9mbHVzaF9jYWNoZV9wYWdlKHZtYSxhZGRyKSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfY2FjaGVfcGFnZSkodm1hLGFkZHIpCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBsb2NhbF9mbHVzaF9wYWdlX3RvX3JhbSwgdW5zaWduZWQgbG9uZykKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBsb2NhbF9mbHVzaF9zaWdfaW5zbnMsIHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZykKKworI2RlZmluZSBsb2NhbF9mbHVzaF9wYWdlX3RvX3JhbShhZGRyKSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfcGFnZV90b19yYW0pKGFkZHIpCisjZGVmaW5lIGxvY2FsX2ZsdXNoX3NpZ19pbnNucyhtbSxpbnNuX2FkZHIpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9zaWdfaW5zbnMpKG1tLGluc25fYWRkcikKKworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBzbXBfZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcGFnZSk7CisKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF9wYWdlX3RvX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2UpOworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3NpZ19pbnNucyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBpbnNuX2FkZHIpOworCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitCVEZJWFVQREVGX0NBTEwodm9pZCwgZmx1c2hfY2FjaGVfYWxsLCB2b2lkKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX2NhY2hlX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICopCitCVEZJWFVQREVGX0NBTEwodm9pZCwgZmx1c2hfY2FjaGVfcmFuZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX2NhY2hlX3BhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQorCisjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpIEJURklYVVBfQ0FMTChmbHVzaF9jYWNoZV9hbGwpKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pIEJURklYVVBfQ0FMTChmbHVzaF9jYWNoZV9tbSkobW0pCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkgQlRGSVhVUF9DQUxMKGZsdXNoX2NhY2hlX21tKShtbSkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLHN0YXJ0LGVuZCkgQlRGSVhVUF9DQUxMKGZsdXNoX2NhY2hlX3JhbmdlKSh2bWEsc3RhcnQsZW5kKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSxhZGRyLHBmbikgQlRGSVhVUF9DQUxMKGZsdXNoX2NhY2hlX3BhZ2UpKHZtYSxhZGRyKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwZykJCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwlkbyB7CQkJCQkJCVwKKwkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7XAorCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7CQkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwlkbyB7CQkJCQkJCVwKKwkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7XAorCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7CQkJCVwKKwl9IHdoaWxlICgwKQorCitCVEZJWFVQREVGX0NBTEwodm9pZCwgX19mbHVzaF9wYWdlX3RvX3JhbSwgdW5zaWduZWQgbG9uZykKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF9zaWdfaW5zbnMsIHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZykKKworI2RlZmluZSBfX2ZsdXNoX3BhZ2VfdG9fcmFtKGFkZHIpIEJURklYVVBfQ0FMTChfX2ZsdXNoX3BhZ2VfdG9fcmFtKShhZGRyKQorI2RlZmluZSBmbHVzaF9zaWdfaW5zbnMobW0saW5zbl9hZGRyKSBCVEZJWFVQX0NBTEwoZmx1c2hfc2lnX2luc25zKShtbSxpbnNuX2FkZHIpCisKK2V4dGVybiB2b2lkIHNwYXJjX2ZsdXNoX3BhZ2VfdG9fcmFtKHN0cnVjdCBwYWdlICpwYWdlKTsKKworI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCXNwYXJjX2ZsdXNoX3BhZ2VfdG9fcmFtKHBhZ2UpCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCisKKyNlbmRpZiAvKiBfU1BBUkNfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZWZsdXNoXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZWZsdXNoXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzMzIxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlZmx1c2hfNjQuaApAQCAtMCwwICsxLDc2IEBACisjaWZuZGVmIF9TUEFSQzY0X0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfU1BBUkM2NF9DQUNIRUZMVVNIX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisvKiBDYWNoZSBmbHVzaCBvcGVyYXRpb25zLiAqLworCisvKiBUaGVzZSBhcmUgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoaXMgaXMgYW4gU01QIGtlcm5lbCBvciBub3QuICovCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKF9fbW0pIFwKKwlkbyB7IGlmICgoX19tbSkgPT0gY3VycmVudC0+bW0pIGZsdXNod191c2VyKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKSBmbHVzaF9jYWNoZV9tbShtbSkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBcCisJZmx1c2hfY2FjaGVfbW0oKHZtYSktPnZtX21tKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgcGFnZSwgcGZuKSBcCisJZmx1c2hfY2FjaGVfbW0oKHZtYSktPnZtX21tKQorCisvKgorICogT24gc3BpdGZpcmUsIHRoZSBpY2FjaGUgZG9lc24ndCBzbm9vcCBsb2NhbCBzdG9yZXMgYW5kIHdlIGRvbid0CisgKiB1c2UgYmxvY2sgY29tbWl0IHN0b3JlcyAod2hpY2ggaW52YWxpZGF0ZSBpY2FjaGUgbGluZXMpIGR1cmluZworICogbW9kdWxlIGxvYWQsIHNvIHdlIG5lZWQgdGhpcy4KKyAqLworZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIF9fZmx1c2hfaWNhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX3BhZ2Uodm9pZCAqYWRkciwgaW50IGZsdXNoX2ljYWNoZSk7CitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHN0cnVjdCBwYWdlICpwYWdlKTsKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCBzbXBfZmx1c2hfZGNhY2hlX3BhZ2VfaW1wbChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNwdSk7CitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZV9hbGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlICpwYWdlKTsKKyNlbHNlCisjZGVmaW5lIHNtcF9mbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHBhZ2UsY3B1KSBmbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHBhZ2UpCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlX2FsbChtbSxwYWdlKSBmbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHBhZ2UpCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGcpCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBmbHVzaF9wdHJhY2VfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3QgcGFnZSAqLAorCQkJCXVuc2lnbmVkIGxvbmcgdWFkZHIsIHZvaWQgKmthZGRyLAorCQkJCXVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgd3JpdGUpOworCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pCQlcCisJZG8gewkJCQkJCQkJXAorCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsJXAorCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7CQkJCQlcCisJCWZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLCBwYWdlLCB2YWRkciwgc3JjLCBsZW4sIDApOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIAkJXAorCWRvIHsJCQkJCQkJCVwKKwkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7CVwKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQkJXAorCQlmbHVzaF9wdHJhY2VfYWNjZXNzKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgbGVuLCAxKTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCisvKiBpbnRlcm5hbCBkZWJ1Z2dpbmcgZnVuY3Rpb24gKi8KK3ZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTsKKyNlbmRpZgorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX1NQQVJDNjRfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9jaGFmc3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NoYWZzci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YzY5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jaGFmc3IuaApAQCAtMCwwICsxLDI0MSBAQAorI2lmbmRlZiBfU1BBUkM2NF9DSEFGU1JfSAorI2RlZmluZSBfU1BBUkM2NF9DSEFGU1JfSAorCisvKiBDaGVldGFoIEFzeW5jaHJvbm91cyBGYXVsdCBTdGF0dXMgcmVnaXN0ZXIsIEFTST0weDRDIFZBPDYzOjA+PTB4MCAqLworCisvKiBDb21tZW50cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgdmFyaWFudHMgb24gd2hpY2ggdGhlIGJpdCBkZWZpbml0aW9uCisgKiBpcyB2YWxpZC4gIENvZGVzIGFyZToKKyAqIGNoCS0tPgljaGVldGFoCisgKiBjaCsJLS0+CWNoZWV0YWggcGx1cworICoganAJLS0+CWphbGFwZW5vCisgKi8KKworLyogQWxsIGJpdHMgb2YgdGhpcyByZWdpc3RlciBleGNlcHQgTV9TWU5EUk9NRSBhbmQgRV9TWU5EUk9NRSBhcmUKKyAqIHJlYWQsIHdyaXRlIDEgdG8gY2xlYXIuICBNX1NZTkRST01FIGFuZCBFX1NZTkRST01FIGFyZSByZWFkLW9ubHkuCisgKi8KKworLyogU29mdHdhcmUgYml0IHNldCBieSBsaW51eCB0cmFwIGhhbmRsZXJzIHRvIGluZGljYXRlIHRoYXQgdGhlIHRyYXAgd2FzCisgKiBzaWduYWxsZWQgYXQgJXRsID49IDEuCisgKi8KKyNkZWZpbmUgQ0hBRlNSX1RMMQkJKDFVTCA8PCA2M1VMKSAvKiBuL2EgKi8KKworLyogVW5tYXBwZWQgZXJyb3IgZnJvbSBzeXN0ZW0gYnVzIGZvciBwcmVmZXRjaCBxdWV1ZSBvcgorICogc3RvcmUgcXVldWUgcmVhZCBvcGVyYXRpb24KKyAqLworI2RlZmluZSBDSFBBRlNSX0RUTwkJKDFVTCA8PCA1OVVMKSAvKiBjaCsgKi8KKworLyogQnVzIGVycm9yIGZyb20gc3lzdGVtIGJ1cyBmb3IgcHJlZmV0Y2ggcXVldWUgb3Igc3RvcmUgcXVldWUKKyAqIHJlYWQgb3BlcmF0aW9uCisgKi8KKyNkZWZpbmUgQ0hQQUZTUl9EQkVSUgkJKDFVTCA8PCA1OFVMKSAvKiBjaCsgKi8KKworLyogSGFyZHdhcmUgY29ycmVjdGVkIEUtY2FjaGUgVGFnIEVDQyBlcnJvciAqLworI2RlZmluZSBDSFBBRlNSX1RIQ0UJCSgxVUwgPDwgNTdVTCkgLyogY2grICovCisvKiBTeXN0ZW0gaW50ZXJmYWNlIHByb3RvY29sIGVycm9yLCBodyB0aW1lb3V0IGNhdXNlZCAqLworI2RlZmluZSBKUEFGU1JfSkVUTwkJKDFVTCA8PCA1N1VMKSAvKiBqcCAqLworCisvKiBTVyBoYW5kbGVkIGNvcnJlY3RhYmxlIEUtY2FjaGUgVGFnIEVDQyBlcnJvciAqLworI2RlZmluZSBDSFBBRlNSX1RTQ0UJCSgxVUwgPDwgNTZVTCkgLyogY2grICovCisvKiBQYXJpdHkgZXJyb3Igb24gc3lzdGVtIHNub29wIHJlc3VsdHMgKi8KKyNkZWZpbmUgSlBBRlNSX1NDRQkJKDFVTCA8PCA1NlVMKSAvKiBqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIEUtY2FjaGUgVGFnIEVDQyBlcnJvciAqLworI2RlZmluZSBDSFBBRlNSX1RVRQkJKDFVTCA8PCA1NVVMKSAvKiBjaCsgKi8KKy8qIFN5c3RlbSBpbnRlcmZhY2UgcHJvdG9jb2wgZXJyb3IsIGlsbGVnYWwgY29tbWFuZCBkZXRlY3RlZCAqLworI2RlZmluZSBKUEFGU1JfSkVJQwkJKDFVTCA8PCA1NVVMKSAvKiBqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIHN5c3RlbSBidXMgZGF0YSBFQ0MgZXJyb3IgZHVlIHRvIHByZWZldGNoCisgKiBvciBzdG9yZSBmaWxsIHJlcXVlc3QKKyAqLworI2RlZmluZSBDSFBBRlNSX0RVRQkJKDFVTCA8PCA1NFVMKSAvKiBjaCsgKi8KKy8qIFN5c3RlbSBpbnRlcmZhY2UgcHJvdG9jb2wgZXJyb3IsIGlsbGVnYWwgQURUWVBFIGRldGVjdGVkICovCisjZGVmaW5lIEpQQUZTUl9KRUlUCQkoMVVMIDw8IDU0VUwpIC8qIGpwICovCisKKy8qIE11bHRpcGxlIGVycm9ycyBvZiB0aGUgc2FtZSB0eXBlIGhhdmUgb2NjdXJyZWQuICBUaGlzIGJpdCBpcyBzZXQgd2hlbgorICogYW4gdW5jb3JyZWN0YWJsZSBlcnJvciBvciBhIFNXIGNvcnJlY3RhYmxlIGVycm9yIG9jY3VycyBhbmQgdGhlIHN0YXR1cworICogYml0IHRvIHJlcG9ydCB0aGF0IGVycm9yIGlzIGFscmVhZHkgc2V0LiAgV2hlbiBtdWx0aXBsZSBlcnJvcnMgb2YKKyAqIGRpZmZlcmVudCB0eXBlcyBhcmUgaW5kaWNhdGVkIGJ5IHNldHRpbmcgbXVsdGlwbGUgc3RhdHVzIGJpdHMuCisgKgorICogVGhpcyBiaXQgaXMgbm90IHNldCBpZiBtdWx0aXBsZSBIVyBjb3JyZWN0ZWQgZXJyb3JzIHdpdGggdGhlIHNhbWUKKyAqIHN0YXR1cyBiaXQgb2NjdXIsIG9ubHkgdW5jb3JyZWN0YWJsZSBhbmQgU1cgY29ycmVjdGFibGUgb25lcyBoYXZlCisgKiB0aGlzIGJlaGF2aW9yLgorICoKKyAqIFRoaXMgYml0IGlzIG5vdCBzZXQgd2hlbiBtdWx0aXBsZSBFQ0MgZXJyb3JzIGhhcHBlbiB3aXRoaW4gYSBzaW5nbGUKKyAqIDY0LWJ5dGUgc3lzdGVtIGJ1cyB0cmFuc2FjdGlvbi4gIE9ubHkgdGhlIGZpcnN0IEVDQyBlcnJvciBpbiBhIDE2LWJ5dGUKKyAqIHN1YnVuaXQgd2lsbCBiZSBsb2dnZWQuICBBbGwgZXJyb3JzIGluIHN1YnNlcXVlbnQgMTYtYnl0ZSBzdWJ1bml0cworICogZnJvbSB0aGUgc2FtZSA2NC1ieXRlIHRyYW5zYWN0aW9uIGFyZSBpZ25vcmVkLgorICovCisjZGVmaW5lIENIQUZTUl9NRQkJKDFVTCA8PCA1M1VMKSAvKiBjaCxjaCssanAgKi8KKworLyogUHJpdmlsZWdlZCBzdGF0ZSBlcnJvciBoYXMgb2NjdXJyZWQuICBUaGlzIGlzIGEgY2FwdHVyZSBvZiBQU1RBVEUuUFJJVgorICogYXQgdGhlIHRpbWUgdGhlIGVycm9yIGlzIGRldGVjdGVkLgorICovCisjZGVmaW5lIENIQUZTUl9QUklWCQkoMVVMIDw8IDUyVUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBUaGUgZm9sbG93aW5nIGJpdHMgNTEgKENIQUZTUl9QRVJSKSB0byAzMyAoQ0hBRlNSX0NFKSBhcmUgc3RpY2t5IGVycm9yCisgKiBiaXRzIGFuZCByZWNvcmQgdGhlIG1vc3QgcmVjZW50bHkgZGV0ZWN0ZWQgZXJyb3JzLiAgQml0cyBhY2N1bXVsYXRlCisgKiBlcnJvcnMgdGhhdCBoYXZlIGJlZW4gZGV0ZWN0ZWQgc2luY2UgdGhlIGxhc3Qgd3JpdGUgdG8gY2xlYXIgdGhlIGJpdC4KKyAqLworCisvKiBTeXN0ZW0gaW50ZXJmYWNlIHByb3RvY29sIGVycm9yLiAgVGhlIHByb2Nlc3NvciBhc3NlcnRzIGl0cycgRVJST1IKKyAqIHBpbiB3aGVuIHRoaXMgZXZlbnQgb2NjdXJzIGFuZCBpdCBhbHNvIGxvZ3MgYSBzcGVjaWZpYyBjYXVzZSBjb2RlCisgKiBpbnRvIGEgSlRBRyBzY2FubmFibGUgZmxvcC4KKyAqLworI2RlZmluZSBDSEFGU1JfUEVSUgkJKDFVTCA8PCA1MVVMKSAvKiBjaCxjaCssanAgKi8KKworLyogSW50ZXJuYWwgcHJvY2Vzc29yIGVycm9yLiAgVGhlIHByb2Nlc3NvciBhc3NlcnRzIGl0cycgRVJST1IKKyAqIHBpbiB3aGVuIHRoaXMgZXZlbnQgb2NjdXJzIGFuZCBpdCBhbHNvIGxvZ3MgYSBzcGVjaWZpYyBjYXVzZSBjb2RlCisgKiBpbnRvIGEgSlRBRyBzY2FubmFibGUgZmxvcC4KKyAqLworI2RlZmluZSBDSEFGU1JfSUVSUgkJKDFVTCA8PCA1MFVMKSAvKiBjaCxjaCssanAgKi8KKworLyogU3lzdGVtIHJlcXVlc3QgcGFyaXR5IGVycm9yIG9uIGluY29taW5nIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0hBRlNSX0lTQVAJCSgxVUwgPDwgNDlVTCkgLyogY2gsY2grLGpwICovCisKKy8qIEhXIENvcnJlY3RlZCBzeXN0ZW0gYnVzIE1UQUcgRUNDIGVycm9yICovCisjZGVmaW5lIENIQUZTUl9FTUMJCSgxVUwgPDwgNDhVTCkgLyogY2gsY2grICovCisvKiBQYXJpdHkgZXJyb3Igb24gTDIgY2FjaGUgdGFnIFNSQU0gKi8KKyNkZWZpbmUgSlBBRlNSX0VUUAkJKDFVTCA8PCA0OFVMKSAvKiBqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIHN5c3RlbSBidXMgTVRBRyBFQ0MgZXJyb3IgKi8KKyNkZWZpbmUgQ0hBRlNSX0VNVQkJKDFVTCA8PCA0N1VMKSAvKiBjaCxjaCsgKi8KKy8qIE91dCBvZiByYW5nZSBtZW1vcnkgZXJyb3IgaGFzIG9jY3VycmVkICovCisjZGVmaW5lIEpQQUZTUl9PTQkJKDFVTCA8PCA0N1VMKSAvKiBqcCAqLworCisvKiBIVyBDb3JyZWN0ZWQgc3lzdGVtIGJ1cyBkYXRhIEVDQyBlcnJvciBmb3IgcmVhZCBvZiBpbnRlcnJ1cHQgdmVjdG9yICovCisjZGVmaW5lIENIQUZTUl9JVkMJCSgxVUwgPDwgNDZVTCkgLyogY2gsY2grICovCisvKiBFcnJvciBkdWUgdG8gdW5zdXBwb3J0ZWQgc3RvcmUgKi8KKyNkZWZpbmUgSlBBRlNSX1VNUwkJKDFVTCA8PCA0NlVMKSAvKiBqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIHN5c3RlbSBidXMgZGF0YSBFQ0MgZXJyb3IgZm9yIHJlYWQgb2YgaW50ZXJydXB0IHZlY3RvciAqLworI2RlZmluZSBDSEFGU1JfSVZVCQkoMVVMIDw8IDQ1VUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBVbm1hcHBlZCBlcnJvciBmcm9tIHN5c3RlbSBidXMgKi8KKyNkZWZpbmUgQ0hBRlNSX1RPCQkoMVVMIDw8IDQ0VUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBCdXMgZXJyb3IgcmVzcG9uc2UgZnJvbSBzeXN0ZW0gYnVzICovCisjZGVmaW5lIENIQUZTUl9CRVJSCQkoMVVMIDw8IDQzVUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBTVyBDb3JyZWN0YWJsZSBFLWNhY2hlIEVDQyBlcnJvciBmb3IgaW5zdHJ1Y3Rpb24gZmV0Y2ggb3IgZGF0YSBhY2Nlc3MKKyAqIG90aGVyIHRoYW4gYmxvY2sgbG9hZC4KKyAqLworI2RlZmluZSBDSEFGU1JfVUNDCQkoMVVMIDw8IDQyVUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBVbmNvcnJlY3RhYmxlIEUtY2FjaGUgRUNDIGVycm9yIGZvciBpbnN0cnVjdGlvbiBmZXRjaCBvciBkYXRhIGFjY2VzcworICogb3RoZXIgdGhhbiBibG9jayBsb2FkLgorICovCisjZGVmaW5lIENIQUZTUl9VQ1UJCSgxVUwgPDwgNDFVTCkgLyogY2gsY2grLGpwICovCisKKy8qIENvcHlvdXQgSFcgQ29ycmVjdGVkIEVDQyBlcnJvciAqLworI2RlZmluZSBDSEFGU1JfQ1BDCQkoMVVMIDw8IDQwVUwpIC8qIGNoLGNoKyxqcCAqLworCisvKiBDb3B5b3V0IFVuY29ycmVjdGFibGUgRUNDIGVycm9yICovCisjZGVmaW5lIENIQUZTUl9DUFUJCSgxVUwgPDwgMzlVTCkgLyogY2gsY2grLGpwICovCisKKy8qIEhXIENvcnJlY3RlZCBFQ0MgZXJyb3IgZnJvbSBFLWNhY2hlIGZvciB3cml0ZWJhY2sgKi8KKyNkZWZpbmUgQ0hBRlNSX1dEQwkJKDFVTCA8PCAzOFVMKSAvKiBjaCxjaCssanAgKi8KKworLyogVW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IgZnJvbSBFLWNhY2hlIGZvciB3cml0ZWJhY2sgKi8KKyNkZWZpbmUgQ0hBRlNSX1dEVQkJKDFVTCA8PCAzN1VMKSAvKiBjaCxjaCssanAgKi8KKworLyogSFcgQ29ycmVjdGVkIEVDQyBlcnJvciBmcm9tIEUtY2FjaGUgZm9yIHN0b3JlIG1lcmdlIG9yIGJsb2NrIGxvYWQgKi8KKyNkZWZpbmUgQ0hBRlNSX0VEQwkJKDFVTCA8PCAzNlVMKSAvKiBjaCxjaCssanAgKi8KKworLyogVW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IgZnJvbSBFLWNhY2hlIGZvciBzdG9yZSBtZXJnZSBvciBibG9jayBsb2FkICovCisjZGVmaW5lIENIQUZTUl9FRFUJCSgxVUwgPDwgMzVVTCkgLyogY2gsY2grLGpwICovCisKKy8qIFVuY29ycmVjdGFibGUgc3lzdGVtIGJ1cyBkYXRhIEVDQyBlcnJvciBmb3IgcmVhZCBvZiBtZW1vcnkgb3IgSS9PICovCisjZGVmaW5lIENIQUZTUl9VRQkJKDFVTCA8PCAzNFVMKSAvKiBjaCxjaCssanAgKi8KKworLyogSFcgQ29ycmVjdGVkIHN5c3RlbSBidXMgZGF0YSBFQ0MgZXJyb3IgZm9yIHJlYWQgb2YgbWVtb3J5IG9yIEkvTyAqLworI2RlZmluZSBDSEFGU1JfQ0UJCSgxVUwgPDwgMzNVTCkgLyogY2gsY2grLGpwICovCisKKy8qIFVuY29ycmVjdGFibGUgRUNDIGVycm9yIGZyb20gcmVtb3RlIGNhY2hlL21lbW9yeSAqLworI2RlZmluZSBKUEFGU1JfUlVFCQkoMVVMIDw8IDMyVUwpIC8qIGpwICovCisKKy8qIENvcnJlY3RhYmxlIEVDQyBlcnJvciBmcm9tIHJlbW90ZSBjYWNoZS9tZW1vcnkgKi8KKyNkZWZpbmUgSlBBRlNSX1JDRQkJKDFVTCA8PCAzMVVMKSAvKiBqcCAqLworCisvKiBKQlVTIHBhcml0eSBlcnJvciBvbiByZXR1cm5lZCByZWFkIGRhdGEgKi8KKyNkZWZpbmUgSlBBRlNSX0JQCQkoMVVMIDw8IDMwVUwpIC8qIGpwICovCisKKy8qIEpCVVMgcGFyaXR5IGVycm9yIG9uIGRhdGEgZm9yIHdyaXRlYmFjayBvciBibG9jayBzdG9yZSAqLworI2RlZmluZSBKUEFGU1JfV0JQCQkoMVVMIDw8IDI5VUwpIC8qIGpwICovCisKKy8qIEZvcmVpZ24gcmVhZCB0byBEUkFNIGluY3VycmluZyBjb3JyZWN0YWJsZSBFQ0MgZXJyb3IgKi8KKyNkZWZpbmUgSlBBRlNSX0ZSQwkJKDFVTCA8PCAyOFVMKSAvKiBqcCAqLworCisvKiBGb3JlaWduIHJlYWQgdG8gRFJBTSBpbmN1cnJpbmcgdW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IgKi8KKyNkZWZpbmUgSlBBRlNSX0ZSVQkJKDFVTCA8PCAyN1VMKSAvKiBqcCAqLworCisjZGVmaW5lIENIQUZTUl9FUlJPUlMJCShDSEFGU1JfUEVSUiB8IENIQUZTUl9JRVJSIHwgQ0hBRlNSX0lTQVAgfCBDSEFGU1JfRU1DIHwgXAorCQkJCSBDSEFGU1JfRU1VIHwgQ0hBRlNSX0lWQyB8IENIQUZTUl9JVlUgfCBDSEFGU1JfVE8gfCBcCisJCQkJIENIQUZTUl9CRVJSIHwgQ0hBRlNSX1VDQyB8IENIQUZTUl9VQ1UgfCBDSEFGU1JfQ1BDIHwgXAorCQkJCSBDSEFGU1JfQ1BVIHwgQ0hBRlNSX1dEQyB8IENIQUZTUl9XRFUgfCBDSEFGU1JfRURDIHwgXAorCQkJCSBDSEFGU1JfRURVIHwgQ0hBRlNSX1VFIHwgQ0hBRlNSX0NFKQorI2RlZmluZSBDSFBBRlNSX0VSUk9SUwkJKENIUEFGU1JfRFRPIHwgQ0hQQUZTUl9EQkVSUiB8IENIUEFGU1JfVEhDRSB8IFwKKwkJCQkgQ0hQQUZTUl9UU0NFIHwgQ0hQQUZTUl9UVUUgfCBDSFBBRlNSX0RVRSB8IFwKKwkJCQkgQ0hBRlNSX1BFUlIgfCBDSEFGU1JfSUVSUiB8IENIQUZTUl9JU0FQIHwgQ0hBRlNSX0VNQyB8IFwKKwkJCQkgQ0hBRlNSX0VNVSB8IENIQUZTUl9JVkMgfCBDSEFGU1JfSVZVIHwgQ0hBRlNSX1RPIHwgXAorCQkJCSBDSEFGU1JfQkVSUiB8IENIQUZTUl9VQ0MgfCBDSEFGU1JfVUNVIHwgQ0hBRlNSX0NQQyB8IFwKKwkJCQkgQ0hBRlNSX0NQVSB8IENIQUZTUl9XREMgfCBDSEFGU1JfV0RVIHwgQ0hBRlNSX0VEQyB8IFwKKwkJCQkgQ0hBRlNSX0VEVSB8IENIQUZTUl9VRSB8IENIQUZTUl9DRSkKKyNkZWZpbmUgSlBBRlNSX0VSUk9SUwkJKEpQQUZTUl9KRVRPIHwgSlBBRlNSX1NDRSB8IEpQQUZTUl9KRUlDIHwgXAorCQkJCSBKUEFGU1JfSkVJVCB8IENIQUZTUl9QRVJSIHwgQ0hBRlNSX0lFUlIgfCBcCisJCQkJIENIQUZTUl9JU0FQIHwgSlBBRlNSX0VUUCB8IEpQQUZTUl9PTSB8IFwKKwkJCQkgSlBBRlNSX1VNUyB8IENIQUZTUl9JVlUgfCBDSEFGU1JfVE8gfCBcCisJCQkJIENIQUZTUl9CRVJSIHwgQ0hBRlNSX1VDQyB8IENIQUZTUl9VQ1UgfCBcCisJCQkJIENIQUZTUl9DUEMgfCBDSEFGU1JfQ1BVIHwgQ0hBRlNSX1dEQyB8IFwKKwkJCQkgQ0hBRlNSX1dEVSB8IENIQUZTUl9FREMgfCBDSEFGU1JfRURVIHwgXAorCQkJCSBDSEFGU1JfVUUgfCBDSEFGU1JfQ0UgfCBKUEFGU1JfUlVFIHwgXAorCQkJCSBKUEFGU1JfUkNFIHwgSlBBRlNSX0JQIHwgSlBBRlNSX1dCUCB8IFwKKwkJCQkgSlBBRlNSX0ZSQyB8IEpQQUZTUl9GUlUpCisKKy8qIEFjdGl2ZSBKQlVTIHJlcXVlc3Qgc2lnbmFsIHdoZW4gZXJyb3Igb2NjdXJyZWQgKi8KKyNkZWZpbmUgSlBBRlNSX0pCUkVRCQkoMHg3VUwgPDwgMjRVTCkgLyoganAgKi8KKyNkZWZpbmUgSlBBRlNSX0pCUkVRX1NISUZUCTI0VUwKKworLyogTDIgY2FjaGUgd2F5IGluZm9ybWF0aW9uICovCisjZGVmaW5lIEpQQUZTUl9FVFcJCSgweDNVTCA8PCAyMlVMKSAvKiBqcCAqLworI2RlZmluZSBKUEFGU1JfRVRXX1NISUZUCTIyVUwKKworLyogU3lzdGVtIGJ1cyBNVEFHIEVDQyBzeW5kcm9tZS4gIFRoaXMgZmllbGQgY2FwdHVyZXMgdGhlIHN0YXR1cyBvZiB0aGUKKyAqIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgZXJyb3IgYWNjb3JkaW5nIHRvIHRoZSBNX1NZTkQKKyAqIG92ZXJ3cml0ZSBwb2xpY3kuICBBZnRlciB0aGUgQUZTUiBzdGlja3kgYml0LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBlcnJvcgorICogZm9yIHdoaWNoIHRoZSBNX1NZTkQgaXMgcmVwb3J0ZWQsIGlzIGNsZWFyZWQsIHRoZSBjb250ZW50cyBvZiB0aGUgTV9TWU5ECisgKiBmaWVsZCB3aWxsIGJlIHVuY2hhbmdlZCBieSB3aWxsIGJlIHVuZnJvemVuIGZvciBmdXJ0aGVyIGVycm9yIGNhcHR1cmUuCisgKi8KKyNkZWZpbmUgQ0hBRlNSX01fU1lORFJPTUUJKDB4ZlVMIDw8IDE2VUwpIC8qIGNoLGNoKyxqcCAqLworI2RlZmluZSBDSEFGU1JfTV9TWU5EUk9NRV9TSElGVAkxNlVMCisKKy8qIEFnZW5pZCBJZCBvZiB0aGUgZm9yZWlnbiBkZXZpY2UgY2F1c2luZyB0aGUgVUUvQ0UgZXJyb3JzICovCisjZGVmaW5lIEpQQUZTUl9BSUQJCSgweDFmVUwgPDwgOVVMKSAvKiBqcCAqLworI2RlZmluZSBKUEFGU1JfQUlEX1NISUZUCTlVTAorCisvKiBTeXN0ZW0gYnVzIG9yIEUtY2FjaGUgZGF0YSBFQ0Mgc3luZHJvbWUuICBUaGlzIGZpZWxkIGNhcHR1cmVzIHRoZSBzdGF0dXMKKyAqIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBoaWdoZXN0LXByaW9yaXR5IGVycm9yIGFjY29yZGluZyB0byB0aGUKKyAqIEVfU1lORCBvdmVyd3JpdGUgcG9saWN5LiAgQWZ0ZXIgdGhlIEFGU1Igc3RpY2t5IGJpdCwgY29ycmVzcG9uZGluZyB0byB0aGUKKyAqIGVycm9yIGZvciB3aGljaCB0aGUgRV9TWU5EIGlzIHJlcG9ydGVkLCBpcyBjbGVhcmUsIHRoZSBjb250ZW50cyBvZiB0aGUgRV9TWU5ECisgKiBmaWVsZCB3aWxsIGJlIHVuY2hhbmdlZCBidXQgd2lsbCBiZSB1bmZyb3plbiBmb3IgZnVydGhlciBlcnJvciBjYXB0dXJlLgorICovCisjZGVmaW5lIENIQUZTUl9FX1NZTkRST01FCSgweDFmZlVMIDw8IDBVTCkgLyogY2gsY2grLGpwICovCisjZGVmaW5lIENIQUZTUl9FX1NZTkRST01FX1NISUZUCTBVTAorCisvKiBUaGUgQUZTUiBtdXN0IGJlIGV4cGxpY2l0bHkgY2xlYXJlZCBieSBzb2Z0d2FyZSwgaXQgaXMgbm90IGNsZWFyZWQgYXV0b21hdGljYWxseQorICogYnkgYSByZWFkLiAgV3JpdGVzIHRvIGJpdHMgPDUxOjMzPiB3aXRoIGJpdHMgc2V0IHdpbGwgY2xlYXIgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGJpdHMgaW4gdGhlIEFGU1IuICBCaXRzIGFzc29jaWF0ZWQgd2l0aCBkaXNydXB0aW5nIHRyYXBzIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUKKyAqIGludGVycnVwdHMgYXJlIHJlLWVuYWJsZWQgdG8gcHJldmVudCBtdWx0aXBsZSB0cmFwcyBmb3IgdGhlIHNhbWUgZXJyb3IuICBJLmUuCisgKiBQU1RBVEUuSUUgYW5kIEFGU1IgYml0cyBjb250cm9sIGRlbGl2ZXJ5IG9mIGRpc3J1cHRpbmcgdHJhcHMuCisgKgorICogU2luY2UgdGhlcmUgaXMgb25seSBvbmUgQUZBUiwgd2hlbiBtdWx0aXBsZSBldmVudHMgaGF2ZSBiZWVuIGxvZ2dlZCBieSB0aGUKKyAqIGJpdHMgaW4gdGhlIEFGU1IsIGF0IG1vc3Qgb25lIG9mIHRoZXNlIGV2ZW50cyB3aWxsIGhhdmUgaXRzIHN0YXR1cyBjYXB0dXJlZAorICogaW4gdGhlIEFGQVIuICBUaGUgaGlnaGVzdCBwcmlvcml0eSBvZiB0aG9zZSBldmVudCBiaXRzIHdpbGwgZ2V0IEFGQVIgbG9nZ2luZy4KKyAqIFRoZSBBRkFSIHdpbGwgYmUgdW5sb2NrZWQgYW5kIGF2YWlsYWJsZSB0byBjYXB0dXJlIHRoZSBhZGRyZXNzIG9mIGFub3RoZXIgZXZlbnQKKyAqIGFzIHNvb24gYXMgdGhlIG9uZSBiaXQgaW4gQUZTUiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBldmVudCBsb2dnZWQgaW4gQUZBUiBpcworICogY2xlYXJlZC4gIEZvciBleGFtcGxlLCBpZiBBRlNSLkNFIGlzIGRldGVjdGVkLCB0aGVuIEFGU1IuVUUgKHdoaWNoIG92ZXJ3cml0ZXMKKyAqIHRoZSBBRkFSKSwgYW5kIEFGU1IuVUUgaXMgY2xlYXJlZCBieSBub3QgQUZTUi5DRSwgdGhlbiB0aGUgQUZBUiB3aWxsIGJlIHVubG9ja2VkCisgKiBhbmQgcmVhZHkgZm9yIGFub3RoZXIgZXZlbnQsIGV2ZW4gdGhvdWdoIEFGU1IuQ0UgaXMgc3RpbGwgc2V0LiAgVGhlIHNhbWUgcnVsZXMKKyAqIGFsc28gYXBwbHkgdG8gdGhlIE1fU1lORFJPTUUgYW5kIEVfU1lORFJPTUUgZmllbGRzIG9mIHRoZSBBRlNSLgorICovCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9DSEFGU1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NoZWNrc3VtLmgKaW5kZXggZDA0NGRkYi4uNGUzNTUzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jaGVja3N1bS5oCkBAIC0xLDI0MSArMSw4IEBACi0jaWZuZGVmIF9fU1BBUkNfQ0hFQ0tTVU1fSAotI2RlZmluZSBfX1NQQVJDX0NIRUNLU1VNX0gKLQotLyogIGNoZWNrc3VtLmg6ICBJUC9VRFAvVENQIGNoZWNrc3VtIHJvdXRpbmVzIG9uIHRoZSBTcGFyYy4KLSAqCi0gKiAgQ29weXJpZ2h0KEMpIDE5OTUgTGludXMgVG9ydmFsZHMKLSAqICBDb3B5cmlnaHQoQykgMTk5NSBNaWd1ZWwgZGUgSWNhemEKLSAqICBDb3B5cmlnaHQoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIKLSAqICBDb3B5cmlnaHQoQykgMTk5NiBFZGRpZSBDLiBEb3N0Ci0gKiAgQ29weXJpZ2h0KEMpIDE5OTcgSmFrdWIgSmVsaW5lawotICoKLSAqIGRlcml2ZWQgZnJvbToKLSAqCUFscGhhIGNoZWNrc3VtIGMtY29kZQotICogICAgICBpeDg2IGlubGluZSBhc3NlbWJseQotICogICAgICBSRkMxMDcxIENvbXB1dGluZyB0aGUgSW50ZXJuZXQgQ2hlY2tzdW0KLSAqLwotIAotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLS8qIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAotICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKLSAqCi0gKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgotICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKLSAqCi0gKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKLSAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAotICoKLSAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQotICovCi1leHRlcm4gX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKLQotLyogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gZnM6c3JjIHdoaWxlIGl0Ci0gKiBjaGVja3N1bXMKLSAqCi0gKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KLSAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5Ci0gKi8KLQotZXh0ZXJuIHVuc2lnbmVkIGludCBfX2NzdW1fcGFydGlhbF9jb3B5X3NwYXJjX2dlbmVyaWMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKLQotc3RhdGljIGlubGluZSBfX3dzdW0KLWNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0pCi17Ci0JcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJldCBhc20oIm8wIikgPSAodW5zaWduZWQgaW50KXNyYzsKLQlyZWdpc3RlciBjaGFyICpkIGFzbSgibzEiKSA9IGRzdDsKLQlyZWdpc3RlciBpbnQgbCBhc20oImcxIikgPSBsZW47Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSJjYWxsIF9fY3N1bV9wYXJ0aWFsX2NvcHlfc3BhcmNfZ2VuZXJpY1xuXHQiCi0JCSIgbW92ICU2LCAlJWc3XG4iCi0JOiAiPSZyIiAocmV0KSwgIj0mciIgKGQpLCAiPSZyIiAobCkKLQk6ICIwIiAocmV0KSwgIjEiIChkKSwgIjIiIChsKSwgInIiIChzdW0pCi0JOiAibzIiLCAibzMiLCAibzQiLCAibzUiLCAibzciLAotCSAgImcyIiwgImczIiwgImc0IiwgImc1IiwgImc3IiwKLQkgICJtZW1vcnkiLCAiY2MiKTsKLQlyZXR1cm4gKF9fZm9yY2UgX193c3VtKXJldDsKLX0KLQotc3RhdGljIGlubGluZSBfX3dzdW0KLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sCi0JCQkgICAgX193c3VtIHN1bSwgaW50ICplcnIpCi0gIHsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJldCBhc20oIm8wIikgPSAodW5zaWduZWQgbG9uZylzcmM7Ci0JcmVnaXN0ZXIgY2hhciAqZCBhc20oIm8xIikgPSBkc3Q7Ci0JcmVnaXN0ZXIgaW50IGwgYXNtKCJnMSIpID0gbGVuOwotCXJlZ2lzdGVyIF9fd3N1bSBzIGFzbSgiZzciKSA9IHN1bTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgotCSIuYWxpZ24gNFxuXHQiCi0JIi53b3JkIDFmLDJcblx0IgotCSIucHJldmlvdXNcbiIKLQkiMTpcblx0IgotCSJjYWxsIF9fY3N1bV9wYXJ0aWFsX2NvcHlfc3BhcmNfZ2VuZXJpY1xuXHQiCi0JIiBzdCAlOCwgWyUlc3AgKyA2NF1cbiIKLQk6ICI9JnIiIChyZXQpLCAiPSZyIiAoZCksICI9JnIiIChsKSwgIj0mciIgKHMpCi0JOiAiMCIgKHJldCksICIxIiAoZCksICIyIiAobCksICIzIiAocyksICJyIiAoZXJyKQotCTogIm8yIiwgIm8zIiwgIm80IiwgIm81IiwgIm83IiwgImcyIiwgImczIiwgImc0IiwgImc1IiwKLQkgICJjYyIsICJtZW1vcnkiKTsKLQlyZXR1cm4gKF9fZm9yY2UgX193c3VtKXJldDsKLX0KLSAgCi1zdGF0aWMgaW5saW5lIF9fd3N1bQotY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsIHZvaWQgX191c2VyICpkc3QsIGludCBsZW4sCi0JCQkgIF9fd3N1bSBzdW0sIGludCAqZXJyKQotewotCWlmICghYWNjZXNzX29rIChWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkgewotCQkqZXJyID0gLUVGQVVMVDsKLQkJcmV0dXJuIHN1bTsKLQl9IGVsc2UgewotCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJldCBhc20oIm8wIikgPSAodW5zaWduZWQgbG9uZylzcmM7Ci0JCXJlZ2lzdGVyIGNoYXIgX191c2VyICpkIGFzbSgibzEiKSA9IGRzdDsKLQkJcmVnaXN0ZXIgaW50IGwgYXNtKCJnMSIpID0gbGVuOwotCQlyZWdpc3RlciBfX3dzdW0gcyBhc20oImc3IikgPSBzdW07Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgotCQkiLmFsaWduIDRcblx0IgotCQkiLndvcmQgMWYsMVxuXHQiCi0JCSIucHJldmlvdXNcbiIKLQkJIjE6XG5cdCIKLQkJImNhbGwgX19jc3VtX3BhcnRpYWxfY29weV9zcGFyY19nZW5lcmljXG5cdCIKLQkJIiBzdCAlOCwgWyUlc3AgKyA2NF1cbiIKLQkJOiAiPSZyIiAocmV0KSwgIj0mciIgKGQpLCAiPSZyIiAobCksICI9JnIiIChzKQotCQk6ICIwIiAocmV0KSwgIjEiIChkKSwgIjIiIChsKSwgIjMiIChzKSwgInIiIChlcnIpCi0JCTogIm8yIiwgIm8zIiwgIm80IiwgIm81IiwgIm83IiwKLQkJICAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLAotCQkgICJjYyIsICJtZW1vcnkiKTsKLQkJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSlyZXQ7Ci0JfQotfQotCi0jZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIKLSNkZWZpbmUgY3N1bV9hbmRfY29weV90b191c2VyIGNzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIKLQotLyogaWhsIGlzIGFsd2F5cyA1IG9yIGdyZWF0ZXIsIGFsbW9zdCBhbHdheXMgaXMgNSwgYW5kIGlwaCBpcyB3b3JkIGFsaWduZWQKLSAqIHRoZSBtYWpvcml0eSBvZiB0aGUgdGltZS4KLSAqLwotc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCi17Ci0JX19zdW0xNiBzdW07Ci0KLQkvKiBOb3RlOiBXZSBtdXN0IHJlYWQgJTIgYmVmb3JlIHdlIHRvdWNoICUwIGZvciB0aGUgZmlyc3QgdGltZSwKLQkgKiAgICAgICBiZWNhdXNlIEdDQyBjYW4gbGVnaXRpbWF0ZWx5IHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IKLQkgKiAgICAgICBib3RoIG9wZXJhbmRzLgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdWJcdCUyLCA0LCAlJWc0XG5cdCIKLQkJCSAgICAgImxkXHRbJTEgKyAweDAwXSwgJTBcblx0IgotCQkJICAgICAibGRcdFslMSArIDB4MDRdLCAlJWcyXG5cdCIKLQkJCSAgICAgImxkXHRbJTEgKyAweDA4XSwgJSVnM1xuXHQiCi0JCQkgICAgICJhZGRjY1x0JSVnMiwgJTAsICUwXG5cdCIKLQkJCSAgICAgImFkZHhjY1x0JSVnMywgJTAsICUwXG5cdCIKLQkJCSAgICAgImxkXHRbJTEgKyAweDBjXSwgJSVnMlxuXHQiCi0JCQkgICAgICJsZFx0WyUxICsgMHgxMF0sICUlZzNcblx0IgotCQkJICAgICAiYWRkeGNjXHQlJWcyLCAlMCwgJTBcblx0IgotCQkJICAgICAiYWRkeFx0JTAsICUlZzAsICUwXG4iCi0JCQkgICAgICIxOlx0YWRkY2NcdCUlZzMsICUwLCAlMFxuXHQiCi0JCQkgICAgICJhZGRcdCUxLCA0LCAlMVxuXHQiCi0JCQkgICAgICJhZGR4Y2NcdCUwLCAlJWcwLCAlMFxuXHQiCi0JCQkgICAgICJzdWJjY1x0JSVnNCwgMSwgJSVnNFxuXHQiCi0JCQkgICAgICJiZSxhXHQyZlxuXHQiCi0JCQkgICAgICJzbGxcdCUwLCAxNiwgJSVnMlxuXHQiCi0JCQkgICAgICJiXHQxYlxuXHQiCi0JCQkgICAgICJsZFx0WyUxICsgMHgxMF0sICUlZzNcbiIKLQkJCSAgICAgIjI6XHRhZGRjY1x0JTAsICUlZzIsICUlZzJcblx0IgotCQkJICAgICAic3JsXHQlJWcyLCAxNiwgJTBcblx0IgotCQkJICAgICAiYWRkeFx0JTAsICUlZzAsICUwXG5cdCIKLQkJCSAgICAgInhub3JcdCUlZzAsICUwLCAlMCIKLQkJCSAgICAgOiAiPXIiIChzdW0pLCAiPSZyIiAoaXBoKQotCQkJICAgICA6ICJyIiAoaWhsKSwgIjEiIChpcGgpCi0JCQkgICAgIDogImcyIiwgImczIiwgImc0IiwgImNjIiwgIm1lbW9yeSIpOwotCXJldHVybiBzdW07Ci19Ci0KLS8qIEZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzLiAqLwotc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQotewotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkY2NcdCUwLCAlMSwgJTFcblx0IgotCQkJICAgICAic3JsXHQlMSwgMTYsICUxXG5cdCIKLQkJCSAgICAgImFkZHhcdCUxLCAlJWcwLCAlMVxuXHQiCi0JCQkgICAgICJ4bm9yXHQlJWcwLCAlMSwgJTAiCi0JCQkgICAgIDogIj0mciIgKHN1bSksICI9ciIgKHRtcCkKLQkJCSAgICAgOiAiMCIgKHN1bSksICIxIiAoKF9fZm9yY2UgdTMyKXN1bTw8MTYpCi0JCQkgICAgIDogImNjIik7Ci0JcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwotfQotCi1zdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJICAgICAgIF9fd3N1bSBzdW0pCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oImFkZGNjXHQlMSwgJTAsICUwXG5cdCIKLQkJCSAgICAgImFkZHhjY1x0JTIsICUwLCAlMFxuXHQiCi0JCQkgICAgICJhZGR4Y2NcdCUzLCAlMCwgJTBcblx0IgotCQkJICAgICAiYWRkeFx0JTAsICUlZzAsICUwXG5cdCIKLQkJCSAgICAgOiAiPXIiIChzdW0pLCAiPXIiIChzYWRkcikKLQkJCSAgICAgOiAiciIgKGRhZGRyKSwgInIiIChwcm90byArIGxlbiksICIwIiAoc3VtKSwKLQkJCSAgICAgICAiMSIgKHNhZGRyKQotCQkJICAgICA6ICJjYyIpOwotCXJldHVybiBzdW07Ci19Ci0KLS8qCi0gKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgotICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKLSAqLwotc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICBfX3dzdW0gc3VtKQotewotCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKLX0KLQotI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQotCi1zdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCQkgICAgICBfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCSAgICAgIF9fd3N1bSBzdW0pCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiYWRkY2MJJTMsICU0LCAlJWc0XG5cdCIKLQkJImFkZHhjYwklNSwgJSVnNCwgJSVnNFxuXHQiCi0JCSJsZAlbJTIgKyAweDBjXSwgJSVnMlxuXHQiCi0JCSJsZAlbJTIgKyAweDA4XSwgJSVnM1xuXHQiCi0JCSJhZGR4Y2MJJSVnMiwgJSVnNCwgJSVnNFxuXHQiCi0JCSJsZAlbJTIgKyAweDA0XSwgJSVnMlxuXHQiCi0JCSJhZGR4Y2MJJSVnMywgJSVnNCwgJSVnNFxuXHQiCi0JCSJsZAlbJTIgKyAweDAwXSwgJSVnM1xuXHQiCi0JCSJhZGR4Y2MJJSVnMiwgJSVnNCwgJSVnNFxuXHQiCi0JCSJsZAlbJTEgKyAweDBjXSwgJSVnMlxuXHQiCi0JCSJhZGR4Y2MJJSVnMywgJSVnNCwgJSVnNFxuXHQiCi0JCSJsZAlbJTEgKyAweDA4XSwgJSVnM1xuXHQiCi0JCSJhZGR4Y2MJJSVnMiwgJSVnNCwgJSVnNFxuXHQiCi0JCSJsZAlbJTEgKyAweDA0XSwgJSVnMlxuXHQiCi0JCSJhZGR4Y2MJJSVnMywgJSVnNCwgJSVnNFxuXHQiCi0JCSJsZAlbJTEgKyAweDAwXSwgJSVnM1xuXHQiCi0JCSJhZGR4Y2MJJSVnMiwgJSVnNCwgJSVnNFxuXHQiCi0JCSJhZGR4Y2MJJSVnMywgJSVnNCwgJTBcblx0IgotCQkiYWRkeAkwLCAlMCwgJTBcbiIKLQkJOiAiPSZyIiAoc3VtKQotCQk6ICJyIiAoc2FkZHIpLCAiciIgKGRhZGRyKSwgCi0JCSAgInIiKGh0b25sKGxlbikpLCAiciIoaHRvbmwocHJvdG8pKSwgInIiKHN1bSkKLQkJOiAiZzIiLCAiZzMiLCAiZzQiLCAiY2MiKTsKLQotCXJldHVybiBjc3VtX2ZvbGQoc3VtKTsKLX0KLQotLyogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seSBpbiBpY21wLmMgKi8KLXN0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKLXsKLQlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKLX0KLQotI2VuZGlmIC8qICEoX19TUEFSQ19DSEVDS1NVTV9IKSAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfQ0hFQ0tTVU1fSAorI2RlZmluZSBfX19BU01fU1BBUkNfQ0hFQ0tTVU1fSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL2NoZWNrc3VtXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9jaGVja3N1bV8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NoZWNrc3VtXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9jaGVja3N1bV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYmRhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jaGVja3N1bV8zMi5oCkBAIC0wLDAgKzEsMjQxIEBACisjaWZuZGVmIF9fU1BBUkNfQ0hFQ0tTVU1fSAorI2RlZmluZSBfX1NQQVJDX0NIRUNLU1VNX0gKKworLyogIGNoZWNrc3VtLmg6ICBJUC9VRFAvVENQIGNoZWNrc3VtIHJvdXRpbmVzIG9uIHRoZSBTcGFyYy4KKyAqCisgKiAgQ29weXJpZ2h0KEMpIDE5OTUgTGludXMgVG9ydmFsZHMKKyAqICBDb3B5cmlnaHQoQykgMTk5NSBNaWd1ZWwgZGUgSWNhemEKKyAqICBDb3B5cmlnaHQoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIKKyAqICBDb3B5cmlnaHQoQykgMTk5NiBFZGRpZSBDLiBEb3N0CisgKiAgQ29weXJpZ2h0KEMpIDE5OTcgSmFrdWIgSmVsaW5laworICoKKyAqIGRlcml2ZWQgZnJvbToKKyAqCUFscGhhIGNoZWNrc3VtIGMtY29kZQorICogICAgICBpeDg2IGlubGluZSBhc3NlbWJseQorICogICAgICBSRkMxMDcxIENvbXB1dGluZyB0aGUgSW50ZXJuZXQgQ2hlY2tzdW0KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCisgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQorICoKKyAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCisgKiBvciBjc3VtX3RjcHVkcF9tYWdpYworICoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAorICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCisgKgorICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CisgKi8KK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOworCisvKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBmczpzcmMgd2hpbGUgaXQKKyAqIGNoZWNrc3VtcworICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqLworCitleHRlcm4gdW5zaWduZWQgaW50IF9fY3N1bV9wYXJ0aWFsX2NvcHlfc3BhcmNfZ2VuZXJpYyAoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOworCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgcmV0IGFzbSgibzAiKSA9ICh1bnNpZ25lZCBpbnQpc3JjOworCXJlZ2lzdGVyIGNoYXIgKmQgYXNtKCJvMSIpID0gZHN0OworCXJlZ2lzdGVyIGludCBsIGFzbSgiZzEiKSA9IGxlbjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJImNhbGwgX19jc3VtX3BhcnRpYWxfY29weV9zcGFyY19nZW5lcmljXG5cdCIKKwkJIiBtb3YgJTYsICUlZzdcbiIKKwk6ICI9JnIiIChyZXQpLCAiPSZyIiAoZCksICI9JnIiIChsKQorCTogIjAiIChyZXQpLCAiMSIgKGQpLCAiMiIgKGwpLCAiciIgKHN1bSkKKwk6ICJvMiIsICJvMyIsICJvNCIsICJvNSIsICJvNyIsCisJICAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLCAiZzciLAorCSAgIm1lbW9yeSIsICJjYyIpOworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pcmV0OworfQorCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwKKwkJCSAgICBfX3dzdW0gc3VtLCBpbnQgKmVycikKKyAgeworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmV0IGFzbSgibzAiKSA9ICh1bnNpZ25lZCBsb25nKXNyYzsKKwlyZWdpc3RlciBjaGFyICpkIGFzbSgibzEiKSA9IGRzdDsKKwlyZWdpc3RlciBpbnQgbCBhc20oImcxIikgPSBsZW47CisJcmVnaXN0ZXIgX193c3VtIHMgYXNtKCJnNyIpID0gc3VtOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCisJIi5hbGlnbiA0XG5cdCIKKwkiLndvcmQgMWYsMlxuXHQiCisJIi5wcmV2aW91c1xuIgorCSIxOlxuXHQiCisJImNhbGwgX19jc3VtX3BhcnRpYWxfY29weV9zcGFyY19nZW5lcmljXG5cdCIKKwkiIHN0ICU4LCBbJSVzcCArIDY0XVxuIgorCTogIj0mciIgKHJldCksICI9JnIiIChkKSwgIj0mciIgKGwpLCAiPSZyIiAocykKKwk6ICIwIiAocmV0KSwgIjEiIChkKSwgIjIiIChsKSwgIjMiIChzKSwgInIiIChlcnIpCisJOiAibzIiLCAibzMiLCAibzQiLCAibzUiLCAibzciLCAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLAorCSAgImNjIiwgIm1lbW9yeSIpOworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pcmV0OworfQorCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsIHZvaWQgX191c2VyICpkc3QsIGludCBsZW4sCisJCQkgIF9fd3N1bSBzdW0sIGludCAqZXJyKQoreworCWlmICghYWNjZXNzX29rIChWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkgeworCQkqZXJyID0gLUVGQVVMVDsKKwkJcmV0dXJuIHN1bTsKKwl9IGVsc2UgeworCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJldCBhc20oIm8wIikgPSAodW5zaWduZWQgbG9uZylzcmM7CisJCXJlZ2lzdGVyIGNoYXIgX191c2VyICpkIGFzbSgibzEiKSA9IGRzdDsKKwkJcmVnaXN0ZXIgaW50IGwgYXNtKCJnMSIpID0gbGVuOworCQlyZWdpc3RlciBfX3dzdW0gcyBhc20oImc3IikgPSBzdW07CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgorCQkiLmFsaWduIDRcblx0IgorCQkiLndvcmQgMWYsMVxuXHQiCisJCSIucHJldmlvdXNcbiIKKwkJIjE6XG5cdCIKKwkJImNhbGwgX19jc3VtX3BhcnRpYWxfY29weV9zcGFyY19nZW5lcmljXG5cdCIKKwkJIiBzdCAlOCwgWyUlc3AgKyA2NF1cbiIKKwkJOiAiPSZyIiAocmV0KSwgIj0mciIgKGQpLCAiPSZyIiAobCksICI9JnIiIChzKQorCQk6ICIwIiAocmV0KSwgIjEiIChkKSwgIjIiIChsKSwgIjMiIChzKSwgInIiIChlcnIpCisJCTogIm8yIiwgIm8zIiwgIm80IiwgIm81IiwgIm83IiwKKwkJICAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLAorCQkgICJjYyIsICJtZW1vcnkiKTsKKwkJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSlyZXQ7CisJfQorfQorCisjZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIKKyNkZWZpbmUgY3N1bV9hbmRfY29weV90b191c2VyIGNzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIKKworLyogaWhsIGlzIGFsd2F5cyA1IG9yIGdyZWF0ZXIsIGFsbW9zdCBhbHdheXMgaXMgNSwgYW5kIGlwaCBpcyB3b3JkIGFsaWduZWQKKyAqIHRoZSBtYWpvcml0eSBvZiB0aGUgdGltZS4KKyAqLworc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCit7CisJX19zdW0xNiBzdW07CisKKwkvKiBOb3RlOiBXZSBtdXN0IHJlYWQgJTIgYmVmb3JlIHdlIHRvdWNoICUwIGZvciB0aGUgZmlyc3QgdGltZSwKKwkgKiAgICAgICBiZWNhdXNlIEdDQyBjYW4gbGVnaXRpbWF0ZWx5IHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IKKwkgKiAgICAgICBib3RoIG9wZXJhbmRzLgorCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdWJcdCUyLCA0LCAlJWc0XG5cdCIKKwkJCSAgICAgImxkXHRbJTEgKyAweDAwXSwgJTBcblx0IgorCQkJICAgICAibGRcdFslMSArIDB4MDRdLCAlJWcyXG5cdCIKKwkJCSAgICAgImxkXHRbJTEgKyAweDA4XSwgJSVnM1xuXHQiCisJCQkgICAgICJhZGRjY1x0JSVnMiwgJTAsICUwXG5cdCIKKwkJCSAgICAgImFkZHhjY1x0JSVnMywgJTAsICUwXG5cdCIKKwkJCSAgICAgImxkXHRbJTEgKyAweDBjXSwgJSVnMlxuXHQiCisJCQkgICAgICJsZFx0WyUxICsgMHgxMF0sICUlZzNcblx0IgorCQkJICAgICAiYWRkeGNjXHQlJWcyLCAlMCwgJTBcblx0IgorCQkJICAgICAiYWRkeFx0JTAsICUlZzAsICUwXG4iCisJCQkgICAgICIxOlx0YWRkY2NcdCUlZzMsICUwLCAlMFxuXHQiCisJCQkgICAgICJhZGRcdCUxLCA0LCAlMVxuXHQiCisJCQkgICAgICJhZGR4Y2NcdCUwLCAlJWcwLCAlMFxuXHQiCisJCQkgICAgICJzdWJjY1x0JSVnNCwgMSwgJSVnNFxuXHQiCisJCQkgICAgICJiZSxhXHQyZlxuXHQiCisJCQkgICAgICJzbGxcdCUwLCAxNiwgJSVnMlxuXHQiCisJCQkgICAgICJiXHQxYlxuXHQiCisJCQkgICAgICJsZFx0WyUxICsgMHgxMF0sICUlZzNcbiIKKwkJCSAgICAgIjI6XHRhZGRjY1x0JTAsICUlZzIsICUlZzJcblx0IgorCQkJICAgICAic3JsXHQlJWcyLCAxNiwgJTBcblx0IgorCQkJICAgICAiYWRkeFx0JTAsICUlZzAsICUwXG5cdCIKKwkJCSAgICAgInhub3JcdCUlZzAsICUwLCAlMCIKKwkJCSAgICAgOiAiPXIiIChzdW0pLCAiPSZyIiAoaXBoKQorCQkJICAgICA6ICJyIiAoaWhsKSwgIjEiIChpcGgpCisJCQkgICAgIDogImcyIiwgImczIiwgImc0IiwgImNjIiwgIm1lbW9yeSIpOworCXJldHVybiBzdW07Cit9CisKKy8qIEZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzLiAqLworc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkY2NcdCUwLCAlMSwgJTFcblx0IgorCQkJICAgICAic3JsXHQlMSwgMTYsICUxXG5cdCIKKwkJCSAgICAgImFkZHhcdCUxLCAlJWcwLCAlMVxuXHQiCisJCQkgICAgICJ4bm9yXHQlJWcwLCAlMSwgJTAiCisJCQkgICAgIDogIj0mciIgKHN1bSksICI9ciIgKHRtcCkKKwkJCSAgICAgOiAiMCIgKHN1bSksICIxIiAoKF9fZm9yY2UgdTMyKXN1bTw8MTYpCisJCQkgICAgIDogImNjIik7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOworfQorCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICAgICAgIF9fd3N1bSBzdW0pCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImFkZGNjXHQlMSwgJTAsICUwXG5cdCIKKwkJCSAgICAgImFkZHhjY1x0JTIsICUwLCAlMFxuXHQiCisJCQkgICAgICJhZGR4Y2NcdCUzLCAlMCwgJTBcblx0IgorCQkJICAgICAiYWRkeFx0JTAsICUlZzAsICUwXG5cdCIKKwkJCSAgICAgOiAiPXIiIChzdW0pLCAiPXIiIChzYWRkcikKKwkJCSAgICAgOiAiciIgKGRhZGRyKSwgInIiIChwcm90byArIGxlbiksICIwIiAoc3VtKSwKKwkJCSAgICAgICAiMSIgKHNhZGRyKQorCQkJICAgICA6ICJjYyIpOworCXJldHVybiBzdW07Cit9CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICBfX3dzdW0gc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKK30KKworI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQorCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkgICAgICBfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCSAgICAgIF9fd3N1bSBzdW0pCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiYWRkY2MJJTMsICU0LCAlJWc0XG5cdCIKKwkJImFkZHhjYwklNSwgJSVnNCwgJSVnNFxuXHQiCisJCSJsZAlbJTIgKyAweDBjXSwgJSVnMlxuXHQiCisJCSJsZAlbJTIgKyAweDA4XSwgJSVnM1xuXHQiCisJCSJhZGR4Y2MJJSVnMiwgJSVnNCwgJSVnNFxuXHQiCisJCSJsZAlbJTIgKyAweDA0XSwgJSVnMlxuXHQiCisJCSJhZGR4Y2MJJSVnMywgJSVnNCwgJSVnNFxuXHQiCisJCSJsZAlbJTIgKyAweDAwXSwgJSVnM1xuXHQiCisJCSJhZGR4Y2MJJSVnMiwgJSVnNCwgJSVnNFxuXHQiCisJCSJsZAlbJTEgKyAweDBjXSwgJSVnMlxuXHQiCisJCSJhZGR4Y2MJJSVnMywgJSVnNCwgJSVnNFxuXHQiCisJCSJsZAlbJTEgKyAweDA4XSwgJSVnM1xuXHQiCisJCSJhZGR4Y2MJJSVnMiwgJSVnNCwgJSVnNFxuXHQiCisJCSJsZAlbJTEgKyAweDA0XSwgJSVnMlxuXHQiCisJCSJhZGR4Y2MJJSVnMywgJSVnNCwgJSVnNFxuXHQiCisJCSJsZAlbJTEgKyAweDAwXSwgJSVnM1xuXHQiCisJCSJhZGR4Y2MJJSVnMiwgJSVnNCwgJSVnNFxuXHQiCisJCSJhZGR4Y2MJJSVnMywgJSVnNCwgJTBcblx0IgorCQkiYWRkeAkwLCAlMCwgJTBcbiIKKwkJOiAiPSZyIiAoc3VtKQorCQk6ICJyIiAoc2FkZHIpLCAiciIgKGRhZGRyKSwKKwkJICAiciIoaHRvbmwobGVuKSksICJyIihodG9ubChwcm90bykpLCAiciIoc3VtKQorCQk6ICJnMiIsICJnMyIsICJnNCIsICJjYyIpOworCisJcmV0dXJuIGNzdW1fZm9sZChzdW0pOworfQorCisvKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5IGluIGljbXAuYyAqLworc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOworfQorCisjZW5kaWYgLyogIShfX1NQQVJDX0NIRUNLU1VNX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9jaGVja3N1bV82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY2hlY2tzdW1fNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTliOTYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY2hlY2tzdW1fNjQuaApAQCAtMCwwICsxLDE2NyBAQAorI2lmbmRlZiBfX1NQQVJDNjRfQ0hFQ0tTVU1fSAorI2RlZmluZSBfX1NQQVJDNjRfQ0hFQ0tTVU1fSAorCisvKiAgY2hlY2tzdW0uaDogIElQL1VEUC9UQ1AgY2hlY2tzdW0gcm91dGluZXMgb24gdGhlIFY5LgorICoKKyAqICBDb3B5cmlnaHQoQykgMTk5NSBMaW51cyBUb3J2YWxkcworICogIENvcHlyaWdodChDKSAxOTk1IE1pZ3VlbCBkZSBJY2F6YQorICogIENvcHlyaWdodChDKSAxOTk2IERhdmlkIFMuIE1pbGxlcgorICogIENvcHlyaWdodChDKSAxOTk2IEVkZGllIEMuIERvc3QKKyAqICBDb3B5cmlnaHQoQykgMTk5NyBKYWt1YiBKZWxpbmVrCisgKgorICogZGVyaXZlZCBmcm9tOgorICoJQWxwaGEgY2hlY2tzdW0gYy1jb2RlCisgKiAgICAgIGl4ODYgaW5saW5lIGFzc2VtYmx5CisgKiAgICAgIFJGQzEwNzEgQ29tcHV0aW5nIHRoZSBJbnRlcm5ldCBDaGVja3N1bQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKKyAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCisgKgorICogcmV0dXJucyBhIDMyLWJpdCBudW1iZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgaW50byBpdHNlbGYKKyAqIG9yIGNzdW1fdGNwdWRwX21hZ2ljCisgKgorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywgZXhjZXB0CisgKiBmb3IgdGhlIGxhc3QgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBvZGQKKyAqCisgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKKyAqLworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqIGJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOworCisvKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSB1c2VyIHNwYWNlIHdoaWxlIGl0CisgKiBjaGVja3N1bXMKKyAqCisgKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KKyAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CisgKi8KK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJICAgICAgaW50IGxlbiwgX193c3VtIHN1bSk7CisKK2V4dGVybiBsb25nIF9fY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkJCSAgdm9pZCAqZHN0LCBpbnQgbGVuLAorCQkJCQkgIF9fd3N1bSBzdW0pOworCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkgICAgdm9pZCAqZHN0LCBpbnQgbGVuLAorCQkJICAgIF9fd3N1bSBzdW0sIGludCAqZXJyKQoreworCWxvbmcgcmV0ID0gX19jc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoc3JjLCBkc3QsIGxlbiwgc3VtKTsKKwlpZiAocmV0IDwgMCkKKwkJKmVyciA9IC1FRkFVTFQ7CisJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSkgcmV0OworfQorCisvKgorICoJQ29weSBhbmQgY2hlY2tzdW0gdG8gdXNlcgorICovCisjZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIKK2V4dGVybiBsb25nIF9fY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsCisJCQkJCXZvaWQgX191c2VyICpkc3QsIGludCBsZW4sCisJCQkJCSAgX193c3VtIHN1bSk7CisKK3N0YXRpYyBpbmxpbmUgX193c3VtCitjc3VtX2FuZF9jb3B5X3RvX3VzZXIoY29uc3Qgdm9pZCAqc3JjLAorCQkgICAgICB2b2lkIF9fdXNlciAqZHN0LCBpbnQgbGVuLAorCQkgICAgICBfX3dzdW0gc3VtLCBpbnQgKmVycikKK3sKKwlsb25nIHJldCA9IF9fY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcihzcmMsIGRzdCwgbGVuLCBzdW0pOworCWlmIChyZXQgPCAwKQorCQkqZXJyID0gLUVGQVVMVDsKKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKSByZXQ7Cit9CisKKy8qIGlobCBpcyBhbHdheXMgNSBvciBncmVhdGVyLCBhbG1vc3QgYWx3YXlzIGlzIDUsIGFuZCBpcGggaXMgd29yZCBhbGlnbmVkCisgKiB0aGUgbWFqb3JpdHkgb2YgdGhlIHRpbWUuCisgKi8KK2V4dGVybiBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpOworCisvKiBGb2xkIGEgcGFydGlhbCBjaGVja3N1bSB3aXRob3V0IGFkZGluZyBwc2V1ZG8gaGVhZGVycy4gKi8KK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiCWFkZGNjCQklMCwgJTEsICUxXG4iCisiCXNybAkJJTEsIDE2LCAlMVxuIgorIglhZGRjCQklMSwgJSVnMCwgJTFcbiIKKyIJeG5vcgkJJSVnMCwgJTEsICUwXG4iCisJOiAiPSZyIiAoc3VtKSwgIj1yIiAodG1wKQorCTogIjAiIChzdW0pLCAiMSIgKChfX2ZvcmNlIHUzMilzdW08PDE2KQorCTogImNjIik7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOworfQorCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCSAgICAgICBfX3dzdW0gc3VtKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIglhZGRjYwkJJTEsICUwLCAlMFxuIgorIglhZGRjY2MJCSUyLCAlMCwgJTBcbiIKKyIJYWRkY2NjCQklMywgJTAsICUwXG4iCisiCWFkZGMJCSUwLCAlJWcwLCAlMFxuIgorCTogIj1yIiAoc3VtKSwgIj1yIiAoc2FkZHIpCisJOiAiciIgKGRhZGRyKSwgInIiIChwcm90byArIGxlbiksICIwIiAoc3VtKSwgIjEiIChzYWRkcikKKwk6ICJjYyIpOworCXJldHVybiBzdW07Cit9CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCQkgICBfX3dzdW0gc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKK30KKworI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQorCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkgICAgICBfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCSAgICAgIF9fd3N1bSBzdW0pCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorIglhZGRjYwkJJTMsICU0LCAlJWc3XG4iCisiCWFkZGNjYwkJJTUsICUlZzcsICUlZzdcbiIKKyIJbGR1dwkJWyUyICsgMHgwY10sICUlZzJcbiIKKyIJbGR1dwkJWyUyICsgMHgwOF0sICUlZzNcbiIKKyIJYWRkY2NjCQklJWcyLCAlJWc3LCAlJWc3XG4iCisiCWxkdXcJCVslMiArIDB4MDRdLCAlJWcyXG4iCisiCWFkZGNjYwkJJSVnMywgJSVnNywgJSVnN1xuIgorIglsZHV3CQlbJTIgKyAweDAwXSwgJSVnM1xuIgorIglhZGRjY2MJCSUlZzIsICUlZzcsICUlZzdcbiIKKyIJbGR1dwkJWyUxICsgMHgwY10sICUlZzJcbiIKKyIJYWRkY2NjCQklJWczLCAlJWc3LCAlJWc3XG4iCisiCWxkdXcJCVslMSArIDB4MDhdLCAlJWczXG4iCisiCWFkZGNjYwkJJSVnMiwgJSVnNywgJSVnN1xuIgorIglsZHV3CQlbJTEgKyAweDA0XSwgJSVnMlxuIgorIglhZGRjY2MJCSUlZzMsICUlZzcsICUlZzdcbiIKKyIJbGR1dwkJWyUxICsgMHgwMF0sICUlZzNcbiIKKyIJYWRkY2NjCQklJWcyLCAlJWc3LCAlJWc3XG4iCisiCWFkZGNjYwkJJSVnMywgJSVnNywgJTBcbiIKKyIJYWRkYwkJMCwgJTAsICUwXG4iCisJOiAiPSZyIiAoc3VtKQorCTogInIiIChzYWRkciksICJyIiAoZGFkZHIpLCAiciIoaHRvbmwobGVuKSksCisJICAiciIoaHRvbmwocHJvdG8pKSwgInIiKHN1bSkKKwk6ICJnMiIsICJnMyIsICJnNyIsICJjYyIpOworCisJcmV0dXJuIGNzdW1fZm9sZChzdW0pOworfQorCisvKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5IGluIGljbXAuYyAqLworc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOworfQorCisjZW5kaWYgLyogIShfX1NQQVJDNjRfQ0hFQ0tTVU1fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NobWN0cmwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NobWN0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTliNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY2htY3RybC5oCkBAIC0wLDAgKzEsMTgzIEBACisjaWZuZGVmIF9TUEFSQzY0X0NITUNUUkxfSAorI2RlZmluZSBfU1BBUkM2NF9DSE1DVFJMX0gKKworLyogQ2hlZXRhaCBtZW1vcnkgY29udHJvbGxlciBwcm9ncmFtbWFibGUgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBDSE1DVFJMX1RDVFJMMQkJMHgwMCAvKiBNZW1vcnkgVGltaW5nIENvbnRyb2wgSQkJKi8KKyNkZWZpbmUgQ0hNQ1RSTF9UQ1RSTDIJCTB4MDggLyogTWVtb3J5IFRpbWluZyBDb250cm9sIElJCSovCisjZGVmaW5lIENITUNUUkxfVENUUkwzCQkweDM4IC8qIE1lbW9yeSBUaW1pbmcgQ29udHJvbCBJSUkJKi8KKyNkZWZpbmUgQ0hNQ1RSTF9UQ1RSTDQJCTB4NDAgLyogTWVtb3J5IFRpbWluZyBDb250cm9sIElWCSovCisjZGVmaW5lIENITUNUUkxfREVDT0RFMQkJMHgxMCAvKiBNZW1vcnkgQWRkcmVzcyBEZWNvZGUgSQkJKi8KKyNkZWZpbmUgQ0hNQ1RSTF9ERUNPREUyCQkweDE4IC8qIE1lbW9yeSBBZGRyZXNzIERlY29kZSBJSQkqLworI2RlZmluZSBDSE1DVFJMX0RFQ09ERTMJCTB4MjAgLyogTWVtb3J5IEFkZHJlc3MgRGVjb2RlIElJSQkqLworI2RlZmluZSBDSE1DVFJMX0RFQ09ERTQJCTB4MjggLyogTWVtb3J5IEFkZHJlc3MgRGVjb2RlIElWCSovCisjZGVmaW5lIENITUNUUkxfTUFDVFJMCQkweDMwIC8qIE1lbW9yeSBBZGRyZXNzIENvbnRyb2wJCSovCisKKy8qIE1lbW9yeSBUaW1pbmcgQ29udHJvbCBJICovCisjZGVmaW5lIFRDVFJMMV9TRFJBTUNUTF9ETFkJMHhmMDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwxX1NEUkFNQ1RMX0RMWV9TSElGVCAgICAgNjAKKyNkZWZpbmUgVENUUkwxX1NEUkFNQ0xLX0RMWQkweDBlMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDFfU0RSQU1DTEtfRExZX1NISUZUICAgICA1NworI2RlZmluZSBUQ1RSTDFfUgkJMHgwMTAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwxX1JfU0hJRlQgCQkgICAgICA1NgorI2RlZmluZSBUQ1RSTDFfQVVUT1JGUl9DWUNMRQkweDAwZmUwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDFfQVVUT1JGUl9DWUNMRV9TSElGVCAgICA0OQorI2RlZmluZSBUQ1RSTDFfUkRfV0FJVAkJMHgwMDAxZjAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwxX1JEX1dBSVRfU0hJRlQJICAgICAgNDQKKyNkZWZpbmUgVENUUkwxX1BDX0NZQ0xFCQkweDAwMDAwZmMwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDFfUENfQ1lDTEVfU0hJRlQJICAgICAgMzgKKyNkZWZpbmUgVENUUkwxX1dSX01PUkVfUkFTX1BXCTB4MDAwMDAwM2YwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMV9XUl9NT1JFX1JBU19QV19TSElGVCAgIDMyCisjZGVmaW5lIFRDVFJMMV9SRF9NT1JFX1JBV19QVwkweDAwMDAwMDAwZmMwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDFfUkRfTU9SRV9SQVNfUFdfU0hJRlQgICAyNgorI2RlZmluZSBUQ1RSTDFfQUNUX1dSX0RMWQkweDAwMDAwMDAwMDNmMDAwMDBVTAorI2RlZmluZSBUQ1RSTDFfQUNUX1dSX0RMWV9TSElGVAkgICAgICAyMAorI2RlZmluZSBUQ1RSTDFfQUNUX1JEX0RMWQkweDAwMDAwMDAwMDAwZmMwMDBVTAorI2RlZmluZSBUQ1RSTDFfQUNUX1JEX0RMWV9TSElGVAkgICAgICAxNAorI2RlZmluZSBUQ1RSTDFfQkFOS19QUkVTRU5UCTB4MDAwMDAwMDAwMDAwMzAwMFVMCisjZGVmaW5lIFRDVFJMMV9CQU5LX1BSRVNFTlRfU0hJRlQgICAgIDEyCisjZGVmaW5lIFRDVFJMMV9SRlJfSU5UCQkweDAwMDAwMDAwMDAwMDBmZjhVTAorI2RlZmluZSBUQ1RSTDFfUkZSX0lOVF9TSElGVAkgICAgICAzCisjZGVmaW5lIFRDVFJMMV9TRVRfTU9ERV9SRUcJMHgwMDAwMDAwMDAwMDAwMDA0VUwKKyNkZWZpbmUgVENUUkwxX1NFVF9NT0RFX1JFR19TSElGVCAgICAgMgorI2RlZmluZSBUQ1RSTDFfUkZSX0VOQUJMRQkweDAwMDAwMDAwMDAwMDAwMDJVTAorI2RlZmluZSBUQ1RSTDFfUkZSX0VOQUJMRV9TSElGVAkgICAgICAxCisjZGVmaW5lIFRDVFJMMV9QUkVDSEdfQUxMCTB4MDAwMDAwMDAwMDAwMDAwMVVMCisjZGVmaW5lIFRDVFJMMV9QUkVDSEdfQUxMX1NISUZUCSAgICAgIDAKKworLyogTWVtb3J5IFRpbWluZyBDb250cm9sIElJICovCisjZGVmaW5lIFRDVFJMMl9XUl9NU0VMX0RMWQkweGZjMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDJfV1JfTVNFTF9ETFlfU0hJRlQgICAgICA1OAorI2RlZmluZSBUQ1RSTDJfUkRfTVNFTF9ETFkJMHgwM2YwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwyX1JEX01TRUxfRExZX1NISUZUICAgICAgNTIKKyNkZWZpbmUgVENUUkwyX1dSREFUQV9USExECTB4MDAwYzAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMl9XUkRBVEFfVEhMRF9TSElGVCAgICAgIDUwCisjZGVmaW5lIFRDVFJMMl9SRFdSX1JEX1RJX0RMWQkweDAwMDNmMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDJfUkRXUl9SRF9USV9ETFlfU0hJRlQgICA0NAorI2RlZmluZSBUQ1RSTDJfQVVUT1BSRUNIR19FTkJMCTB4MDAwMDA4MDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMl9BVVRPUFJFQ0hHX0VOQkxfU0hJRlQgIDQzCisjZGVmaW5lIFRDVFJMMl9SRFdSX1BJX01PUkVfRExZCTB4MDAwMDA3YzAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMl9SRFdSX1BJX01PUkVfRExZX1NISUZUIDM4CisjZGVmaW5lIFRDVFJMMl9SRFdSXzFfRExZCTB4MDAwMDAwM2YwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMl9SRFdSXzFfRExZX1NISUZUICAgICAgIDMyCisjZGVmaW5lIFRDVFJMMl9XUldSX1BJX01PUkVfRExZCTB4MDAwMDAwMDBmODAwMDAwMFVMCisjZGVmaW5lIFRDVFJMMl9XUldSX1BJX01PUkVfRExZX1NISUZUIDI3CisjZGVmaW5lIFRDVFJMMl9XUldSXzFfRExZCTB4MDAwMDAwMDAwN2UwMDAwMFVMCisjZGVmaW5lIFRDVFJMMl9XUldSXzFfRExZX1NISUZUICAgICAgIDIxCisjZGVmaW5lIFRDVFJMMl9SRFdSX1JEX1BJX01PUkVfRExZIDB4MDAwMDAwMDAwMDFmMDAwMFVMCisjZGVmaW5lIFRDVFJMMl9SRFdSX1JEX1BJX01PUkVfRExZX1NISUZUIDE2CisjZGVmaW5lIFRDVFJMMl9SCQkweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBUQ1RSTDJfUl9TSElGVAkJICAgICAgMTUKKyNkZWZpbmUgVENUUkwyX1NEUkFNX01PREVfUkVHX0RBVEEgMHgwMDAwMDAwMDAwMDA3ZmZmVUwKKyNkZWZpbmUgVENUUkwyX1NEUkFNX01PREVfUkVHX0RBVEFfU0hJRlQgMAorCisvKiBNZW1vcnkgVGltaW5nIENvbnRyb2wgSUlJICovCisjZGVmaW5lIFRDVFJMM19TRFJBTV9DVExfRExZCTB4ZjAwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMM19TRFJBTV9DVExfRExZX1NISUZUICAgIDYwCisjZGVmaW5lIFRDVFJMM19TRFJBTV9DTEtfRExZCTB4MGUwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMM19TRFJBTV9DTEtfRExZX1NISUZUICAgIDU3CisjZGVmaW5lIFRDVFJMM19SCQkweDAxMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDNfUl9TSElGVAkJICAgICAgNTYKKyNkZWZpbmUgVENUUkwzX0FVVE9fUkZSX0NZQ0xFCTB4MDBmZTAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMM19BVVRPX1JGUl9DWUNMRV9TSElGVCAgIDQ5CisjZGVmaW5lIFRDVFJMM19SRF9XQUlUCQkweDAwMDFmMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDNfUkRfV0FJVF9TSElGVAkgICAgICA0NAorI2RlZmluZSBUQ1RSTDNfUENfQ1lDTEUJCTB4MDAwMDBmYzAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMM19QQ19DWUNMRV9TSElGVAkgICAgICAzOAorI2RlZmluZSBUQ1RSTDNfV1JfTU9SRV9SQVdfUFcJMHgwMDAwMDAzZjAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkwzX1dSX01PUkVfUkFXX1BXX1NISUZUICAgMzIKKyNkZWZpbmUgVENUUkwzX1JEX01PUkVfUkFXX1BXCTB4MDAwMDAwMDBmYzAwMDAwMFVMCisjZGVmaW5lIFRDVFJMM19SRF9NT1JFX1JBV19QV19TSElGVCAgIDI2CisjZGVmaW5lIFRDVFJMM19BQ1RfV1JfRExZCTB4MDAwMDAwMDAwM2YwMDAwMFVMCisjZGVmaW5lIFRDVFJMM19BQ1RfV1JfRExZX1NISUZUICAgICAgIDIwCisjZGVmaW5lIFRDVFJMM19BQ1RfUkRfRExZCTB4MDAwMDAwMDAwMDBmYzAwMFVMCisjZGVmaW5lIFRDVFJMM19BQ1RfUkRfRExZX1NISUZUICAgICAgIDE0CisjZGVmaW5lIFRDVFJMM19CQU5LX1BSRVNFTlQJMHgwMDAwMDAwMDAwMDAzMDAwVUwKKyNkZWZpbmUgVENUUkwzX0JBTktfUFJFU0VOVF9TSElGVCAgICAgMTIKKyNkZWZpbmUgVENUUkwzX1JGUl9JTlQJCTB4MDAwMDAwMDAwMDAwMGZmOFVMCisjZGVmaW5lIFRDVFJMM19SRlJfSU5UX1NISUZUCSAgICAgIDMKKyNkZWZpbmUgVENUUkwzX1NFVF9NT0RFX1JFRwkweDAwMDAwMDAwMDAwMDAwMDRVTAorI2RlZmluZSBUQ1RSTDNfU0VUX01PREVfUkVHX1NISUZUICAgICAyCisjZGVmaW5lIFRDVFJMM19SRlJfRU5BQkxFCTB4MDAwMDAwMDAwMDAwMDAwMlVMCisjZGVmaW5lIFRDVFJMM19SRlJfRU5BQkxFX1NISUZUICAgICAgIDEKKyNkZWZpbmUgVENUUkwzX1BSRUNIR19BTEwJMHgwMDAwMDAwMDAwMDAwMDAxVUwKKyNkZWZpbmUgVENUUkwzX1BSRUNIR19BTExfU0hJRlQJICAgICAgMAorCisvKiBNZW1vcnkgVGltaW5nIENvbnRyb2wgSVYgKi8KKyNkZWZpbmUgVENUUkw0X1dSX01TRUxfRExZCTB4ZmMwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMNF9XUl9NU0VMX0RMWV9TSElGVCAgICAgIDU4CisjZGVmaW5lIFRDVFJMNF9SRF9NU0VMX0RMWQkweDAzZjAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDRfUkRfTVNFTF9ETFlfU0hJRlQgICAgICA1MgorI2RlZmluZSBUQ1RSTDRfV1JEQVRBX1RITEQJMHgwMDBjMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVENUUkw0X1dSREFUQV9USExEX1NISUZUICAgICAgNTAKKyNkZWZpbmUgVENUUkw0X1JEV1JfUkRfUklfRExZCTB4MDAwM2YwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMNF9SRFdSX1JEX1JJX0RMWV9TSElGVCAgIDQ0CisjZGVmaW5lIFRDVFJMNF9BVVRPX1BSRUNIR19FTkJMCTB4MDAwMDA4MDAwMDAwMDAwMFVMCisjZGVmaW5lIFRDVFJMNF9BVVRPX1BSRUNIR19FTkJMX1NISUZUIDQzCisjZGVmaW5lIFRDVFJMNF9SRF9XUl9QSV9NT1JFX0RMWSAweDAwMDAwN2MwMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDRfUkRfV1JfUElfTU9SRV9ETFlfU0hJRlQgMzgKKyNkZWZpbmUgVENUUkw0X1JEX1dSX1RJX0RMWQkweDAwMDAwMDNmMDAwMDAwMDBVTAorI2RlZmluZSBUQ1RSTDRfUkRfV1JfVElfRExZX1NISUZUICAgICAzMgorI2RlZmluZSBUQ1RSTDRfV1JfV1JfUElfTU9SRV9ETFkgMHgwMDAwMDAwMGY4MDAwMDAwVUwKKyNkZWZpbmUgVENUUkw0X1dSX1dSX1BJX01PUkVfRExZX1NISUZUIDI3CisjZGVmaW5lIFRDVFJMNF9XUl9XUl9USV9ETFkJMHgwMDAwMDAwMDA3ZTAwMDAwVUwKKyNkZWZpbmUgVENUUkw0X1dSX1dSX1RJX0RMWV9TSElGVCAgICAgMjEKKyNkZWZpbmUgVENUUkw0X1JEV1JfUkRfUElfTU9SRV9ETFkgMHgwMDAwMDAwMDAwMWYwMDBVTDAKKyNkZWZpbmUgVENUUkw0X1JEV1JfUkRfUElfTU9SRV9ETFlfU0hJRlQgMTYKKyNkZWZpbmUgVENUUkw0X1IJCTB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFRDVFJMNF9SX1NISUZUCQkgICAgICAxNQorI2RlZmluZSBUQ1RSTDRfU0RSQU1fTU9ERV9SRUdfREFUQSAweDAwMDAwMDAwMDAwMDdmZmZVTAorI2RlZmluZSBUQ1RSTDRfU0RSQU1fTU9ERV9SRUdfREFUQV9TSElGVCAwCisKKy8qIEFsbCA0IG1lbW9yeSBhZGRyZXNzIGRlY29kaW5nIHJlZ2lzdGVycyBoYXZlIHRoZQorICogc2FtZSBsYXlvdXQuCisgKi8KKyNkZWZpbmUgTUVNX0RFQ09ERV9WQUxJRAkweDgwMDAwMDAwMDAwMDAwMDBVTCAvKiBWYWxpZCAqLworI2RlZmluZSBNRU1fREVDT0RFX1ZBTElEX1NISUZUCSAgICAgIDYzCisjZGVmaW5lIE1FTV9ERUNPREVfVUsJCTB4MDAxZmZlMDAwMDAwMDAwMFVMIC8qIFVwcGVyIG1hc2sgKi8KKyNkZWZpbmUgTUVNX0RFQ09ERV9VS19TSElGVAkgICAgICA0MQorI2RlZmluZSBNRU1fREVDT0RFX1VNCQkweDAwMDAwMDFmZmZmMDAwMDBVTCAvKiBVcHBlciBtYXRjaCAqLworI2RlZmluZSBNRU1fREVDT0RFX1VNX1NISUZUCSAgICAgIDIwCisjZGVmaW5lIE1FTV9ERUNPREVfTEsJCTB4MDAwMDAwMDAwMDAzYzAwMFVMIC8qIExvd2VyIG1hc2sgKi8KKyNkZWZpbmUgTUVNX0RFQ09ERV9MS19TSElGVAkgICAgICAxNAorI2RlZmluZSBNRU1fREVDT0RFX0xNCQkweDAwMDAwMDAwMDAwMDBmMDBVTCAvKiBMb3dlciBtYXRjaCAqLworI2RlZmluZSBNRU1fREVDT0RFX0xNX1NISUZUICAgICAgICAgICA4CisKKyNkZWZpbmUgUEFfVVBQRVJfQklUUwkJMHgwMDAwMDdmZmZjMDAwMDAwVUwKKyNkZWZpbmUgUEFfVVBQRVJfQklUU19TSElGVAkyNgorI2RlZmluZSBQQV9MT1dFUl9CSVRTCQkweDAwMDAwMDAwMDAwMDAzYzBVTAorI2RlZmluZSBQQV9MT1dFUl9CSVRTX1NISUZUCTYKKworI2RlZmluZSBNQUNUUkxfUjAJCSAgICAgICAgIDB4ODAwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIE1BQ1RSTF9SMF9TSElGVAkJICAgICAgICAgNjMKKyNkZWZpbmUgTUFDVFJMX0FERFJfTEVfUFcgICAgICAgICAgICAgICAgMHg3MDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgTUFDVFJMX0FERFJfTEVfUFdfU0hJRlQJCSA2MAorI2RlZmluZSBNQUNUUkxfQ01EX1BXICAgICAgICAgICAgICAgICAgICAweDBmMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBNQUNUUkxfQ01EX1BXX1NISUZUCQkgNTYKKyNkZWZpbmUgTUFDVFJMX0hBTEZfTU9ERV9XUl9NU0VMX0RMWSAgICAgMHgwMGZjMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgTUFDVFJMX0hBTEZfTU9ERV9XUl9NU0VMX0RMWV9TSElGVCA1MAorI2RlZmluZSBNQUNUUkxfSEFMRl9NT0RFX1JEX01TRUxfRExZICAgICAweDAwMDNmMDAwMDAwMDAwMDBVTAorI2RlZmluZSBNQUNUUkxfSEFMRl9NT0RFX1JEX01TRUxfRExZX1NISUZUIDQ0CisjZGVmaW5lIE1BQ1RSTF9IQUxGX01PREVfU0RSQU1fQ1RMX0RMWSAgIDB4MDAwMDBmMDAwMDAwMDAwMFVMCisjZGVmaW5lIE1BQ1RSTF9IQUxGX01PREVfU0RSQU1fQ1RMX0RMWV9TSElGVCA0MAorI2RlZmluZSBNQUNUUkxfSEFMRl9NT0RFX1NEUkFNX0NMS19ETFkgICAweDAwMDAwMGUwMDAwMDAwMDBVTAorI2RlZmluZSBNQUNUUkxfSEFMRl9NT0RFX1NEUkFNX0NMS19ETFlfU0hJRlQgMzcKKyNkZWZpbmUgTUFDVFJMX1IxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMDAwMDAwMDAwVUwKKyNkZWZpbmUgTUFDVFJMX1IxX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIE1BQ1RSTF9CQU5LU0VMX05fUk9XQUREUl9TSVpFX0IzIDB4MDAwMDAwMGYwMDAwMDAwMFVMCisjZGVmaW5lIE1BQ1RSTF9CQU5LU0VMX05fUk9XQUREUl9TSVpFX0IzX1NISUZUIDMyCisjZGVmaW5lIE1BQ1RSTF9FTkNfSU5UTFZfQjMgICAgICAgICAgICAgIDB4MDAwMDAwMDBmODAwMDAwMFVMCisjZGVmaW5lIE1BQ1RSTF9FTkNfSU5UTFZfQjNfU0hJRlQgICAgICAgICAgICAgIDI3CisjZGVmaW5lIE1BQ1RSTF9CQU5LU0VMX05fUk9XQUREUl9TSVpFX0IyIDB4MDAwMDAwMDAwNzgwMDAwMFVMCisjZGVmaW5lIE1BQ1RSTF9CQU5LU0VMX05fUk9XQUREUl9TSVpFX0IyX1NISUZUIDIzCisjZGVmaW5lIE1BQ1RSTF9FTkNfSU5UTFZfQjIgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDdjMDAwMFVMCisjZGVmaW5lIE1BQ1RSTF9FTkNfSU5UTFZfQjJfU0hJRlQgICAgICAgICAgICAgIDE4CisjZGVmaW5lIE1BQ1RSTF9CQU5LU0VMX05fUk9XQUREUl9TSVpFX0IxIDB4MDAwMDAwMDAwMDAzYzAwMFVMCisjZGVmaW5lIE1BQ1RSTF9CQU5LU0VMX05fUk9XQUREUl9TSVpFX0IxX1NISUZUIDE0CisjZGVmaW5lIE1BQ1RSTF9FTkNfSU5UTFZfQjEgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwM2UwMFVMCisjZGVmaW5lIE1BQ1RSTF9FTkNfSU5UTFZfQjFfU0hJRlQgICAgICAgICAgICAgICA5CisjZGVmaW5lIE1BQ1RSTF9CQU5LU0VMX05fUk9XQUREUl9TSVpFX0IwIDB4MDAwMDAwMDAwMDAwMDFlMFVMCisjZGVmaW5lIE1BQ1RSTF9CQU5LU0VMX05fUk9XQUREUl9TSVpFX0IwX1NISUZUICA1CisjZGVmaW5lIE1BQ1RSTF9FTkNfSU5UTFZfQjAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAxZlVMCisjZGVmaW5lIE1BQ1RSTF9FTkNfSU5UTFZfQjBfU0hJRlQgICAgICAgICAgICAgICAwCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9DSE1DVFJMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NtdC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcwZGI1OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2NtdC5oCkBAIC0wLDAgKzEsNTkgQEAKKyNpZm5kZWYgX1NQQVJDNjRfQ01UX0gKKyNkZWZpbmUgX1NQQVJDNjRfQ01UX0gKKworLyogY210Lmg6IENoaXAgTXVsdGktVGhyZWFkaW5nIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqLworCisvKiBBU0lfQ09SRV9JRCAtIHByaXZhdGUgKi8KKyNkZWZpbmUgTFBfSUQJCTB4MDAwMDAwMDAwMDAwMDAxMFVMCisjZGVmaW5lICBMUF9JRF9NQVgJMHgwMDAwMDAwMDAwM2YwMDAwVUwKKyNkZWZpbmUgIExQX0lEX0lECTB4MDAwMDAwMDAwMDAwMDAzZlVMCisKKy8qIEFTSV9JTlRSX0lEIC0gcHJpdmF0ZSAqLworI2RlZmluZSBMUF9JTlRSX0lECTB4MDAwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lICBMUF9JTlRSX0lEX0lECTB4MDAwMDAwMDAwMDAwMDNmZlVMCisKKy8qIEFTSV9DRVNSX0lEIC0gcHJpdmF0ZSAqLworI2RlZmluZSBDRVNSX0lECQkweDAwMDAwMDAwMDAwMDAwNDBVTAorI2RlZmluZSAgQ0VTUl9JRF9JRAkweDAwMDAwMDAwMDAwMDAwZmZVTAorCisvKiBBU0lfQ09SRV9BVkFJTEFCTEUgLSBzaGFyZWQgKi8KKyNkZWZpbmUgTFBfQVZBSUwJMHgwMDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgIExQX0FWQUlMXzEJMHgwMDAwMDAwMDAwMDAwMDAyVUwKKyNkZWZpbmUgIExQX0FWQUlMXzAJMHgwMDAwMDAwMDAwMDAwMDAxVUwKKworLyogQVNJX0NPUkVfRU5BQkxFX1NUQVRVUyAtIHNoYXJlZCAqLworI2RlZmluZSBMUF9FTkFCX1NUQVQJMHgwMDAwMDAwMDAwMDAwMDEwVUwKKyNkZWZpbmUgIExQX0VOQUJfU1RBVF8xCTB4MDAwMDAwMDAwMDAwMDAwMlVMCisjZGVmaW5lICBMUF9FTkFCX1NUQVRfMAkweDAwMDAwMDAwMDAwMDAwMDFVTAorCisvKiBBU0lfQ09SRV9FTkFCTEUgLSBzaGFyZWQgKi8KKyNkZWZpbmUgTFBfRU5BQgkJMHgwMDAwMDAwMDAwMDAwMDIwVUwKKyNkZWZpbmUgIExQX0VOQUJfMQkweDAwMDAwMDAwMDAwMDAwMDJVTAorI2RlZmluZSAgTFBfRU5BQl8wCTB4MDAwMDAwMDAwMDAwMDAwMVVMCisKKy8qIEFTSV9DT1JFX1JVTk5JTkcgLSBzaGFyZWQgKi8KKyNkZWZpbmUgTFBfUlVOTklOR19SVwkweDAwMDAwMDAwMDAwMDAwNTBVTAorI2RlZmluZSBMUF9SVU5OSU5HX1cxUwkweDAwMDAwMDAwMDAwMDAwNjBVTAorI2RlZmluZSBMUF9SVU5OSU5HX1cxQwkweDAwMDAwMDAwMDAwMDAwNjhVTAorI2RlZmluZSAgTFBfUlVOTklOR18xCTB4MDAwMDAwMDAwMDAwMDAwMlVMCisjZGVmaW5lICBMUF9SVU5OSU5HXzAJMHgwMDAwMDAwMDAwMDAwMDAxVUwKKworLyogQVNJX0NPUkVfUlVOTklOR19TVEFUIC0gc2hhcmVkICovCisjZGVmaW5lIExQX1JVTl9TVEFUCTB4MDAwMDAwMDAwMDAwMDA1OFVMCisjZGVmaW5lICBMUF9SVU5fU1RBVF8xCTB4MDAwMDAwMDAwMDAwMDAwMlVMCisjZGVmaW5lICBMUF9SVU5fU1RBVF8wCTB4MDAwMDAwMDAwMDAwMDAwMVVMCisKKy8qIEFTSV9YSVJfU1RFRVJJTkcgLSBzaGFyZWQgKi8KKyNkZWZpbmUgTFBfWElSX1NURUVSCTB4MDAwMDAwMDAwMDAwMDAzMFVMCisjZGVmaW5lICBMUF9YSVJfU1RFRVJfMQkweDAwMDAwMDAwMDAwMDAwMDJVTAorI2RlZmluZSAgTFBfWElSX1NURUVSXzAJMHgwMDAwMDAwMDAwMDAwMDAxVUwKKworLyogQVNJX0NNVF9FUlJPUl9TVEVFUklORyAtIHNoYXJlZCAqLworI2RlZmluZSBDTVRfRVJfU1RFRVIJMHgwMDAwMDAwMDAwMDAwMDQwVUwKKyNkZWZpbmUgIENNVF9FUl9TVEVFUl8xCTB4MDAwMDAwMDAwMDAwMDAwMlVMCisjZGVmaW5lICBDTVRfRVJfU1RFRVJfMAkweDAwMDAwMDAwMDAwMDAwMDFVTAorCisjZW5kaWYgLyogX1NQQVJDNjRfQ01UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NvbXBhdC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2MGI1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2NvbXBhdC5oCkBAIC0wLDAgKzEsMjQzIEBACisjaWZuZGVmIF9BU01fU1BBUkM2NF9DT01QQVRfSAorI2RlZmluZSBfQVNNX1NQQVJDNjRfQ09NUEFUX0gKKy8qCisgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcworICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBDT01QQVRfVVNFUl9IWgkxMDAKKwordHlwZWRlZiB1MzIJCWNvbXBhdF9zaXplX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3NzaXplX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3RpbWVfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfY2xvY2tfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfcGlkX3Q7Cit0eXBlZGVmIHUxNgkJX19jb21wYXRfdWlkX3Q7Cit0eXBlZGVmIHUxNgkJX19jb21wYXRfZ2lkX3Q7Cit0eXBlZGVmIHUzMgkJX19jb21wYXRfdWlkMzJfdDsKK3R5cGVkZWYgdTMyCQlfX2NvbXBhdF9naWQzMl90OwordHlwZWRlZiB1MTYJCWNvbXBhdF9tb2RlX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2lub190OwordHlwZWRlZiB1MTYJCWNvbXBhdF9kZXZfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfb2ZmX3Q7Cit0eXBlZGVmIHM2NAkJY29tcGF0X2xvZmZfdDsKK3R5cGVkZWYgczE2CQljb21wYXRfbmxpbmtfdDsKK3R5cGVkZWYgdTE2CQljb21wYXRfaXBjX3BpZF90OwordHlwZWRlZiBzMzIJCWNvbXBhdF9kYWRkcl90OwordHlwZWRlZiB1MzIJCWNvbXBhdF9jYWRkcl90OwordHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJY29tcGF0X2ZzaWRfdDsKK3R5cGVkZWYgczMyCQljb21wYXRfa2V5X3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3RpbWVyX3Q7CisKK3R5cGVkZWYgczMyCQljb21wYXRfaW50X3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2xvbmdfdDsKK3R5cGVkZWYgczY0CQljb21wYXRfczY0OwordHlwZWRlZiB1MzIJCWNvbXBhdF91aW50X3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X3Vsb25nX3Q7Cit0eXBlZGVmIHU2NAkJY29tcGF0X3U2NDsKKworc3RydWN0IGNvbXBhdF90aW1lc3BlYyB7CisJY29tcGF0X3RpbWVfdAl0dl9zZWM7CisJczMyCQl0dl9uc2VjOworfTsKKworc3RydWN0IGNvbXBhdF90aW1ldmFsIHsKKwljb21wYXRfdGltZV90CXR2X3NlYzsKKwlzMzIJCXR2X3VzZWM7Cit9OworCitzdHJ1Y3QgY29tcGF0X3N0YXQgeworCWNvbXBhdF9kZXZfdAlzdF9kZXY7CisJY29tcGF0X2lub190CXN0X2lubzsKKwljb21wYXRfbW9kZV90CXN0X21vZGU7CisJY29tcGF0X25saW5rX3QJc3Rfbmxpbms7CisJX19jb21wYXRfdWlkX3QJc3RfdWlkOworCV9fY29tcGF0X2dpZF90CXN0X2dpZDsKKwljb21wYXRfZGV2X3QJc3RfcmRldjsKKwljb21wYXRfb2ZmX3QJc3Rfc2l6ZTsKKwljb21wYXRfdGltZV90CXN0X2F0aW1lOworCWNvbXBhdF91bG9uZ190CXN0X2F0aW1lX25zZWM7CisJY29tcGF0X3RpbWVfdAlzdF9tdGltZTsKKwljb21wYXRfdWxvbmdfdAlzdF9tdGltZV9uc2VjOworCWNvbXBhdF90aW1lX3QJc3RfY3RpbWU7CisJY29tcGF0X3Vsb25nX3QJc3RfY3RpbWVfbnNlYzsKKwljb21wYXRfb2ZmX3QJc3RfYmxrc2l6ZTsKKwljb21wYXRfb2ZmX3QJc3RfYmxvY2tzOworCXUzMgkJX191bnVzZWQ0WzJdOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0NjQgeworCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9kZXY7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfaW5vOworCisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X25saW5rOworCisJdW5zaWduZWQgaW50CXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQJc3RfZ2lkOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X3JkZXY7CisKKwl1bnNpZ25lZCBjaGFyCV9fcGFkM1s4XTsKKworCWxvbmcgbG9uZwlzdF9zaXplOworCXVuc2lnbmVkIGludAlzdF9ibGtzaXplOworCisJdW5zaWduZWQgY2hhcglfX3BhZDRbOF07CisJdW5zaWduZWQgaW50CXN0X2Jsb2NrczsKKworCXVuc2lnbmVkIGludAlzdF9hdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfYXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGludAlzdF9tdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfbXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGludAlzdF9jdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfY3RpbWVfbnNlYzsKKworCXVuc2lnbmVkIGludAlfX3VudXNlZDQ7CisJdW5zaWduZWQgaW50CV9fdW51c2VkNTsKK307CisKK3N0cnVjdCBjb21wYXRfZmxvY2sgeworCXNob3J0CQlsX3R5cGU7CisJc2hvcnQJCWxfd2hlbmNlOworCWNvbXBhdF9vZmZfdAlsX3N0YXJ0OworCWNvbXBhdF9vZmZfdAlsX2xlbjsKKwljb21wYXRfcGlkX3QJbF9waWQ7CisJc2hvcnQJCV9fdW51c2VkOworfTsKKworI2RlZmluZSBGX0dFVExLNjQJMTIKKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKworc3RydWN0IGNvbXBhdF9mbG9jazY0IHsKKwlzaG9ydAkJbF90eXBlOworCXNob3J0CQlsX3doZW5jZTsKKwljb21wYXRfbG9mZl90CWxfc3RhcnQ7CisJY29tcGF0X2xvZmZfdAlsX2xlbjsKKwljb21wYXRfcGlkX3QJbF9waWQ7CisJc2hvcnQJCV9fdW51c2VkOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnMgeworCWludAkJZl90eXBlOworCWludAkJZl9ic2l6ZTsKKwlpbnQJCWZfYmxvY2tzOworCWludAkJZl9iZnJlZTsKKwlpbnQJCWZfYmF2YWlsOworCWludAkJZl9maWxlczsKKwlpbnQJCWZfZmZyZWU7CisJY29tcGF0X2ZzaWRfdAlmX2ZzaWQ7CisJaW50CQlmX25hbWVsZW47CS8qIFN1bk9TIGlnbm9yZXMgdGhpcyBmaWVsZC4gKi8KKwlpbnQJCWZfZnJzaXplOworCWludAkJZl9zcGFyZVs1XTsKK307CisKKyNkZWZpbmUgQ09NUEFUX1JMSU1fSU5GSU5JVFkgMHg3ZmZmZmZmZgorCit0eXBlZGVmIHUzMgkJY29tcGF0X29sZF9zaWdzZXRfdDsKKworI2RlZmluZSBfQ09NUEFUX05TSUcJCTY0CisjZGVmaW5lIF9DT01QQVRfTlNJR19CUFcJMzIKKwordHlwZWRlZiB1MzIJCWNvbXBhdF9zaWdzZXRfd29yZDsKKworI2RlZmluZSBDT01QQVRfT0ZGX1RfTUFYCTB4N2ZmZmZmZmYKKyNkZWZpbmUgQ09NUEFUX0xPRkZfVF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTAorCisvKgorICogQSBwb2ludGVyIHBhc3NlZCBpbiBmcm9tIHVzZXIgbW9kZS4gVGhpcyBzaG91bGQgbm90CisgKiBiZSB1c2VkIGZvciBzeXNjYWxsIHBhcmFtZXRlcnMsIGp1c3QgZGVjbGFyZSB0aGVtCisgKiBhcyBwb2ludGVycyBiZWNhdXNlIHRoZSBzeXNjYWxsIGVudHJ5IGNvZGUgd2lsbCBoYXZlCisgKiBhcHByb3ByaWF0ZWx5IGNvbnZlcnRlZCB0aGVtIGFscmVhZHkuCisgKi8KK3R5cGVkZWYJdTMyCQljb21wYXRfdXB0cl90OworCitzdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICpjb21wYXRfcHRyKGNvbXBhdF91cHRyX3QgdXB0cikKK3sKKwlyZXR1cm4gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpdXB0cjsKK30KKworc3RhdGljIGlubGluZSBjb21wYXRfdXB0cl90IHB0cl90b19jb21wYXQodm9pZCBfX3VzZXIgKnVwdHIpCit7CisJcmV0dXJuICh1MzIpKHVuc2lnbmVkIGxvbmcpdXB0cjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UobG9uZyBsZW4pCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmtyZWdzOworCXVuc2lnbmVkIGxvbmcgdXNwID0gcmVncy0+dV9yZWdzW1VSRUdfSTZdOworCisJaWYgKCEodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSkKKwkJdXNwICs9IFNUQUNLX0JJQVM7CisJZWxzZQorCQl1c3AgJj0gMHhmZmZmZmZmZlVMOworCisJdXNwIC09IGxlbjsKKwl1c3AgJj0gfjB4N1VMOworCisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSB1c3A7Cit9CisKK3N0cnVjdCBjb21wYXRfaXBjNjRfcGVybSB7CisJY29tcGF0X2tleV90IGtleTsKKwlfX2NvbXBhdF91aWQzMl90IHVpZDsKKwlfX2NvbXBhdF9naWQzMl90IGdpZDsKKwlfX2NvbXBhdF91aWQzMl90IGN1aWQ7CisJX19jb21wYXRfZ2lkMzJfdCBjZ2lkOworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKwljb21wYXRfbW9kZV90IG1vZGU7CisJdW5zaWduZWQgc2hvcnQgX19wYWQyOworCXVuc2lnbmVkIHNob3J0IHNlcTsKKwl1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsJLyogeWVzIHRoZXkgcmVhbGx5IGFyZSA2NGJpdCBwYWRzICovCisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NlbWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzZW1fcGVybTsKKwl1bnNpZ25lZCBpbnQJX19wYWQxOworCWNvbXBhdF90aW1lX3QJc2VtX290aW1lOworCXVuc2lnbmVkIGludAlfX3BhZDI7CisJY29tcGF0X3RpbWVfdAlzZW1fY3RpbWU7CisJdTMyCQlzZW1fbnNlbXM7CisJdTMyCQlfX3VudXNlZDE7CisJdTMyCQlfX3VudXNlZDI7Cit9OworCitzdHJ1Y3QgY29tcGF0X21zcWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBtc2dfcGVybTsKKwl1bnNpZ25lZCBpbnQJX19wYWQxOworCWNvbXBhdF90aW1lX3QJbXNnX3N0aW1lOworCXVuc2lnbmVkIGludAlfX3BhZDI7CisJY29tcGF0X3RpbWVfdAltc2dfcnRpbWU7CisJdW5zaWduZWQgaW50CV9fcGFkMzsKKwljb21wYXRfdGltZV90CW1zZ19jdGltZTsKKwl1bnNpZ25lZCBpbnQJbXNnX2NieXRlczsKKwl1bnNpZ25lZCBpbnQJbXNnX3FudW07CisJdW5zaWduZWQgaW50CW1zZ19xYnl0ZXM7CisJY29tcGF0X3BpZF90CW1zZ19sc3BpZDsKKwljb21wYXRfcGlkX3QJbXNnX2xycGlkOworCXVuc2lnbmVkIGludAlfX3VudXNlZDE7CisJdW5zaWduZWQgaW50CV9fdW51c2VkMjsKK307CisKK3N0cnVjdCBjb21wYXRfc2htaWQ2NF9kcyB7CisJc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHNobV9wZXJtOworCXVuc2lnbmVkIGludAlfX3BhZDE7CisJY29tcGF0X3RpbWVfdAlzaG1fYXRpbWU7CisJdW5zaWduZWQgaW50CV9fcGFkMjsKKwljb21wYXRfdGltZV90CXNobV9kdGltZTsKKwl1bnNpZ25lZCBpbnQJX19wYWQzOworCWNvbXBhdF90aW1lX3QJc2htX2N0aW1lOworCWNvbXBhdF9zaXplX3QJc2htX3NlZ3N6OworCWNvbXBhdF9waWRfdAlzaG1fY3BpZDsKKwljb21wYXRfcGlkX3QJc2htX2xwaWQ7CisJdW5zaWduZWQgaW50CXNobV9uYXR0Y2g7CisJdW5zaWduZWQgaW50CV9fdW51c2VkMTsKKwl1bnNpZ25lZCBpbnQJX191bnVzZWQyOworfTsKKworI2VuZGlmIC8qIF9BU01fU1BBUkM2NF9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY29tcGF0X3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY29tcGF0X3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTllYWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jb21wYXRfc2lnbmFsLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfQ09NUEFUX1NJR05BTF9ICisjZGVmaW5lIF9DT01QQVRfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBfX25ld19zaWdhY3Rpb24zMiB7CisJdW5zaWduZWQJCXNhX2hhbmRsZXI7CisJdW5zaWduZWQgaW50ICAgIAlzYV9mbGFnczsKKwl1bnNpZ25lZAkJc2FfcmVzdG9yZXI7ICAgICAvKiBub3QgdXNlZCBieSBMaW51eC9TUEFSQyB5ZXQgKi8KKwljb21wYXRfc2lnc2V0X3QgCXNhX21hc2s7Cit9OworCitzdHJ1Y3QgX19vbGRfc2lnYWN0aW9uMzIgeworCXVuc2lnbmVkCQlzYV9oYW5kbGVyOworCWNvbXBhdF9vbGRfc2lnc2V0X3QgIAlzYV9tYXNrOworCXVuc2lnbmVkIGludCAgICAJc2FfZmxhZ3M7CisJdW5zaWduZWQJCXNhX3Jlc3RvcmVyOyAgICAgLyogbm90IHVzZWQgYnkgTGludXgvU1BBUkMgeWV0ICovCit9OworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjazMyIHsKKwl1MzIJCQlzc19zcDsKKwlpbnQJCQlzc19mbGFnczsKKwljb21wYXRfc2l6ZV90CQlzc19zaXplOworfSBzdGFja190MzI7CisjZW5kaWYKKworI2VuZGlmIC8qICEoX0NPTVBBVF9TSUdOQUxfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NwdWRhdGEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NwdWRhdGEuaAppbmRleCBhMmM0ZDUxLi5iNzZmYWMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9jcHVkYXRhLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY3B1ZGF0YS5oCkBAIC0xLDI3ICsxLDggQEAKLS8qIGNwdWRhdGEuaDogUGVyLWNwdSBwYXJhbWV0ZXJzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBLZWl0aCBNIFdlc29sb3dza2kgKHdlc29sb3dzQGZvb2JhemNvLm9yZykKLSAqCi0gKiBCYXNlZCBvbiBpbmNsdWRlL2FzbS1zcGFyYzY0L2NwdWRhdGEuaCBhbmQgTGludXggMi40IHNtcC5oCi0gKiBib3RoIChDKSBEYXZpZCBTLiBNaWxsZXIuCi0gKi8KLQotI2lmbmRlZiBfU1BBUkNfQ1BVREFUQV9ICi0jZGVmaW5lIF9TUEFSQ19DUFVEQVRBX0gKLQotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyB1ZGVsYXlfdmFsOwotCXVuc2lnbmVkIGxvbmcgY2xvY2tfdGljazsKLQl1bnNpZ25lZCBpbnQgbXVsdGlwbGllcjsKLQl1bnNpZ25lZCBpbnQgY291bnRlcjsKLQlpbnQgcHJvbV9ub2RlOwotCWludCBtaWQ7Ci0JaW50IG5leHQ7Ci19IGNwdWluZm9fc3BhcmM7Ci0KLURFQ0xBUkVfUEVSX0NQVShjcHVpbmZvX3NwYXJjLCBfX2NwdV9kYXRhKTsKLSNkZWZpbmUgY3B1X2RhdGEoX19jcHUpIHBlcl9jcHUoX19jcHVfZGF0YSwgKF9fY3B1KSkKLQotI2VuZGlmIC8qIF9TUEFSQ19DUFVEQVRBX0ggKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX0NQVURBVEFfSAorI2RlZmluZSBfX19BU01fU1BBUkNfQ1BVREFUQV9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvY3B1ZGF0YV82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvY3B1ZGF0YV8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NwdWRhdGFfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NwdWRhdGFfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmM0ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY3B1ZGF0YV8zMi5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGNwdWRhdGEuaDogUGVyLWNwdSBwYXJhbWV0ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBLZWl0aCBNIFdlc29sb3dza2kgKHdlc29sb3dzQGZvb2JhemNvLm9yZykKKyAqCisgKiBCYXNlZCBvbiBpbmNsdWRlL2FzbS1zcGFyYzY0L2NwdWRhdGEuaCBhbmQgTGludXggMi40IHNtcC5oCisgKiBib3RoIChDKSBEYXZpZCBTLiBNaWxsZXIuCisgKi8KKworI2lmbmRlZiBfU1BBUkNfQ1BVREFUQV9ICisjZGVmaW5lIF9TUEFSQ19DUFVEQVRBX0gKKworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyB1ZGVsYXlfdmFsOworCXVuc2lnbmVkIGxvbmcgY2xvY2tfdGljazsKKwl1bnNpZ25lZCBpbnQgbXVsdGlwbGllcjsKKwl1bnNpZ25lZCBpbnQgY291bnRlcjsKKwlpbnQgcHJvbV9ub2RlOworCWludCBtaWQ7CisJaW50IG5leHQ7Cit9IGNwdWluZm9fc3BhcmM7CisKK0RFQ0xBUkVfUEVSX0NQVShjcHVpbmZvX3NwYXJjLCBfX2NwdV9kYXRhKTsKKyNkZWZpbmUgY3B1X2RhdGEoX19jcHUpIHBlcl9jcHUoX19jcHVfZGF0YSwgKF9fY3B1KSkKKworI2VuZGlmIC8qIF9TUEFSQ19DUFVEQVRBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NwdWRhdGFfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NwdWRhdGFfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzI5NzVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY3B1ZGF0YV82NC5oCkBAIC0wLDAgKzEsMjQwIEBACisvKiBjcHVkYXRhLmg6IFBlci1jcHUgcGFyYW1ldGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQorICovCisKKyNpZm5kZWYgX1NQQVJDNjRfQ1BVREFUQV9ICisjZGVmaW5lIF9TUEFSQzY0X0NQVURBVEFfSAorCisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vYXNpLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwkvKiBEY2FjaGUgbGluZSAxICovCisJdW5zaWduZWQgaW50CV9fc29mdGlycV9wZW5kaW5nOyAvKiBtdXN0IGJlIDFzdCwgc2VlIHJ0cmFwLlMgKi8KKwl1bnNpZ25lZCBpbnQJX19wYWQwOworCXVuc2lnbmVkIGxvbmcJY2xvY2tfdGljazsJLyogJXRpY2sncyBwZXIgc2Vjb25kICovCisJdW5zaWduZWQgbG9uZwlfX3BhZDsKKwl1bnNpZ25lZCBpbnQJX19wYWQxOworCXVuc2lnbmVkIGludAlfX3BhZDI7CisKKwkvKiBEY2FjaGUgbGluZSAyLCByYXJlbHkgdXNlZCAqLworCXVuc2lnbmVkIGludAlkY2FjaGVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJZGNhY2hlX2xpbmVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJaWNhY2hlX3NpemU7CisJdW5zaWduZWQgaW50CWljYWNoZV9saW5lX3NpemU7CisJdW5zaWduZWQgaW50CWVjYWNoZV9zaXplOworCXVuc2lnbmVkIGludAllY2FjaGVfbGluZV9zaXplOworCWludAkJY29yZV9pZDsKKwlpbnQJCXByb2NfaWQ7Cit9IGNwdWluZm9fc3BhcmM7CisKK0RFQ0xBUkVfUEVSX0NQVShjcHVpbmZvX3NwYXJjLCBfX2NwdV9kYXRhKTsKKyNkZWZpbmUgY3B1X2RhdGEoX19jcHUpCQlwZXJfY3B1KF9fY3B1X2RhdGEsIChfX2NwdSkpCisjZGVmaW5lIGxvY2FsX2NwdV9kYXRhKCkJX19nZXRfY3B1X3ZhcihfX2NwdV9kYXRhKQorCisvKiBUcmFwIGhhbmRsaW5nIGNvZGUgbmVlZHMgdG8gZ2V0IGF0IGEgZmV3IGNyaXRpY2FsIHZhbHVlcyB1cG9uCisgKiB0cmFwIGVudHJ5IGFuZCB0byBwcm9jZXNzIFRTQiBtaXNzZXMuICBUaGVzZSBjYW5ub3QgYmUgaW4gdGhlCisgKiBwZXJfY3B1KCkgYXJlYSBhcyB3ZSByZWFsbHkgbmVlZCB0byBsb2NrIHRoZW0gaW50byB0aGUgVExCIGFuZAorICogdGh1cyBtYWtlIHRoZW0gcGFydCBvZiB0aGUgbWFpbiBrZXJuZWwgaW1hZ2UuICBBcyBhIHJlc3VsdCB3ZQorICogdHJ5IHRvIG1ha2UgdGhpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZS4KKyAqCisgKiBUaGlzIGlzIHBhZGRlZCBvdXQgYW5kIGFsaWduZWQgdG8gNjQtYnl0ZXMgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZworICogb24gU01QLgorICovCisKKy8qIElmIHlvdSBtb2RpZnkgdGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIHBsZWFzZSB1cGRhdGUKKyAqIFRSQVBfQkxPQ0tfU1pfU0hJRlQgYmVsb3cuCisgKi8KK3N0cnVjdCB0aHJlYWRfaW5mbzsKK3N0cnVjdCB0cmFwX3Blcl9jcHUgeworLyogRC1jYWNoZSBsaW5lIDE6IEJhc2ljIHRocmVhZCBpbmZvcm1hdGlvbiwgY3B1IGFuZCBkZXZpY2UgbW9uZG8gcXVldWVzICovCisJc3RydWN0IHRocmVhZF9pbmZvCSp0aHJlYWQ7CisJdW5zaWduZWQgbG9uZwkJcGdkX3BhZGRyOworCXVuc2lnbmVkIGxvbmcJCWNwdV9tb25kb19wYTsKKwl1bnNpZ25lZCBsb25nCQlkZXZfbW9uZG9fcGE7CisKKy8qIEQtY2FjaGUgbGluZSAyOiBFcnJvciBNb25kbyBRdWV1ZSBhbmQga2VybmVsIGJ1ZmZlciBwb2ludGVycyAqLworCXVuc2lnbmVkIGxvbmcJCXJlc3VtX21vbmRvX3BhOworCXVuc2lnbmVkIGxvbmcJCXJlc3VtX2tlcm5lbF9idWZfcGE7CisJdW5zaWduZWQgbG9uZwkJbm9ucmVzdW1fbW9uZG9fcGE7CisJdW5zaWduZWQgbG9uZwkJbm9ucmVzdW1fa2VybmVsX2J1Zl9wYTsKKworLyogRGNhY2hlIGxpbmVzIDMsIDQsIDUsIGFuZCA2OiBIeXBlcnZpc29yIEZhdWx0IFN0YXR1cyAqLworCXN0cnVjdCBodl9mYXVsdF9zdGF0dXMJZmF1bHRfaW5mbzsKKworLyogRGNhY2hlIGxpbmUgNzogUGh5c2ljYWwgYWRkcmVzc2VzIG9mIENQVSBzZW5kIG1vbmRvIGJsb2NrIGFuZCBDUFUgbGlzdC4gICovCisJdW5zaWduZWQgbG9uZwkJY3B1X21vbmRvX2Jsb2NrX3BhOworCXVuc2lnbmVkIGxvbmcJCWNwdV9saXN0X3BhOworCXVuc2lnbmVkIGxvbmcJCXRzYl9odWdlOworCXVuc2lnbmVkIGxvbmcJCXRzYl9odWdlX3RlbXA7CisKKy8qIERjYWNoZSBsaW5lIDg6IElSUSB3b3JrIGxpc3QsIGFuZCBrZWVwIHRyYXBfYmxvY2sgYSBwb3dlci1vZi0yIGluIHNpemUuICAqLworCXVuc2lnbmVkIGxvbmcJCWlycV93b3JrbGlzdF9wYTsKKwl1bnNpZ25lZCBpbnQJCWNwdV9tb25kb19xbWFzazsKKwl1bnNpZ25lZCBpbnQJCWRldl9tb25kb19xbWFzazsKKwl1bnNpZ25lZCBpbnQJCXJlc3VtX3FtYXNrOworCXVuc2lnbmVkIGludAkJbm9ucmVzdW1fcW1hc2s7CisJdm9pZAkJCSpoZGVzYzsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKTsKK2V4dGVybiBzdHJ1Y3QgdHJhcF9wZXJfY3B1IHRyYXBfYmxvY2tbTlJfQ1BVU107CitleHRlcm4gdm9pZCBpbml0X2N1cl9jcHVfdHJhcChzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CitleHRlcm4gdm9pZCBzZXR1cF90YmEodm9pZCk7CitleHRlcm4gaW50IG5jcHVzX3Byb2JlZDsKK2V4dGVybiB2b2lkIF9faW5pdCBjcHVfcHJvYmUodm9pZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3A7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJlYWxfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOworCitzdHJ1Y3QgY3B1aWRfcGF0Y2hfZW50cnkgeworCXVuc2lnbmVkIGludAlhZGRyOworCXVuc2lnbmVkIGludAljaGVldGFoX3NhZmFyaVs0XTsKKwl1bnNpZ25lZCBpbnQJY2hlZXRhaF9qYnVzWzRdOworCXVuc2lnbmVkIGludAlzdGFyZmlyZVs0XTsKKwl1bnNpZ25lZCBpbnQJc3VuNHZbNF07Cit9OworZXh0ZXJuIHN0cnVjdCBjcHVpZF9wYXRjaF9lbnRyeSBfX2NwdWlkX3BhdGNoLCBfX2NwdWlkX3BhdGNoX2VuZDsKKworc3RydWN0IHN1bjR2XzFpbnNuX3BhdGNoX2VudHJ5IHsKKwl1bnNpZ25lZCBpbnQJYWRkcjsKKwl1bnNpZ25lZCBpbnQJaW5zbjsKK307CitleHRlcm4gc3RydWN0IHN1bjR2XzFpbnNuX3BhdGNoX2VudHJ5IF9fc3VuNHZfMWluc25fcGF0Y2gsCisJX19zdW40dl8xaW5zbl9wYXRjaF9lbmQ7CisKK3N0cnVjdCBzdW40dl8yaW5zbl9wYXRjaF9lbnRyeSB7CisJdW5zaWduZWQgaW50CWFkZHI7CisJdW5zaWduZWQgaW50CWluc25zWzJdOworfTsKK2V4dGVybiBzdHJ1Y3Qgc3VuNHZfMmluc25fcGF0Y2hfZW50cnkgX19zdW40dl8yaW5zbl9wYXRjaCwKKwlfX3N1bjR2XzJpbnNuX3BhdGNoX2VuZDsKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZGVmaW5lIFRSQVBfUEVSX0NQVV9USFJFQUQJCTB4MDAKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX1BHRF9QQUREUgkJMHgwOAorI2RlZmluZSBUUkFQX1BFUl9DUFVfQ1BVX01PTkRPX1BBCTB4MTAKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX0RFVl9NT05ET19QQQkweDE4CisjZGVmaW5lIFRSQVBfUEVSX0NQVV9SRVNVTV9NT05ET19QQQkweDIwCisjZGVmaW5lIFRSQVBfUEVSX0NQVV9SRVNVTV9LQlVGX1BBCTB4MjgKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX05PTlJFU1VNX01PTkRPX1BBCTB4MzAKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX05PTlJFU1VNX0tCVUZfUEEJMHgzOAorI2RlZmluZSBUUkFQX1BFUl9DUFVfRkFVTFRfSU5GTwkJMHg0MAorI2RlZmluZSBUUkFQX1BFUl9DUFVfQ1BVX01PTkRPX0JMT0NLX1BBCTB4YzAKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX0NQVV9MSVNUX1BBCTB4YzgKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX1RTQl9IVUdFCQkweGQwCisjZGVmaW5lIFRSQVBfUEVSX0NQVV9UU0JfSFVHRV9URU1QCTB4ZDgKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX0lSUV9XT1JLTElTVF9QQQkweGUwCisjZGVmaW5lIFRSQVBfUEVSX0NQVV9DUFVfTU9ORE9fUU1BU0sJMHhlOAorI2RlZmluZSBUUkFQX1BFUl9DUFVfREVWX01PTkRPX1FNQVNLCTB4ZWMKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX1JFU1VNX1FNQVNLCTB4ZjAKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX05PTlJFU1VNX1FNQVNLCTB4ZjQKKworI2RlZmluZSBUUkFQX0JMT0NLX1NaX1NISUZUCQk4CisKKyNpbmNsdWRlIDxhc20vc2NyYXRjaHBhZC5oPgorCisjZGVmaW5lIF9fR0VUX0NQVUlEKFJFRykJCQkJXAorCS8qIFNwaXRmaXJlIGltcGxlbWVudGF0aW9uIChkZWZhdWx0KS4gKi8JXAorNjYxOglsZHhhCQlbJWcwXSBBU0lfVVBBX0NPTkZJRywgUkVHOwlcCisJc3JseAkJUkVHLCAxNywgUkVHOwkJCVwKKwkgYW5kCQlSRUcsIDB4MWYsIFJFRzsJCQlcCisJbm9wOwkJCQkJCVwKKwkuc2VjdGlvbgkuY3B1aWRfcGF0Y2gsICJheCI7CQlcCisJLyogSW5zdHJ1Y3Rpb24gbG9jYXRpb24uICovCQkJXAorCS53b3JkCQk2NjFiOwkJCQlcCisJLyogQ2hlZXRhaCBTYWZhcmkgaW1wbGVtZW50YXRpb24uICovCQlcCisJbGR4YQkJWyVnMF0gQVNJX1NBRkFSSV9DT05GSUcsIFJFRzsJXAorCXNybHgJCVJFRywgMTcsIFJFRzsJCQlcCisJYW5kCQlSRUcsIDB4M2ZmLCBSRUc7CQlcCisJbm9wOwkJCQkJCVwKKwkvKiBDaGVldGFoIEpCVVMgaW1wbGVtZW50YXRpb24uICovCQlcCisJbGR4YQkJWyVnMF0gQVNJX0pCVVNfQ09ORklHLCBSRUc7CVwKKwlzcmx4CQlSRUcsIDE3LCBSRUc7CQkJXAorCWFuZAkJUkVHLCAweDFmLCBSRUc7CQkJXAorCW5vcDsJCQkJCQlcCisJLyogU3RhcmZpcmUgaW1wbGVtZW50YXRpb24uICovCQkJXAorCXNldGhpCQklaGkoMHgxZmZmNDAwMDBkMCA+PiA5KSwgUkVHOwlcCisJc2xseAkJUkVHLCA5LCBSRUc7CQkJXAorCW9yCQlSRUcsIDB4ZDAsIFJFRzsJCQlcCisJbGR1d2EJCVtSRUddIEFTSV9QSFlTX0JZUEFTU19FQ19FLCBSRUc7XAorCS8qIHN1bjR2IGltcGxlbWVudGF0aW9uLiAqLwkJCVwKKwltb3YJCVNDUkFUQ0hQQURfQ1BVSUQsIFJFRzsJCVwKKwlsZHhhCQlbUkVHXSBBU0lfU0NSQVRDSFBBRCwgUkVHOwlcCisJbm9wOwkJCQkJCVwKKwlub3A7CQkJCQkJXAorCS5wcmV2aW91czsKKworI2lmZGVmIENPTkZJR19TTVAKKworI2RlZmluZSBUUkFQX0xPQURfVFJBUF9CTE9DSyhERVNULCBUTVApCQlcCisJX19HRVRfQ1BVSUQoVE1QKQkJCVwKKwlzZXRoaQklaGkodHJhcF9ibG9jayksIERFU1Q7CQlcCisJc2xseAlUTVAsIFRSQVBfQkxPQ0tfU1pfU0hJRlQsIFRNUDsJXAorCW9yCURFU1QsICVsbyh0cmFwX2Jsb2NrKSwgREVTVDsJXAorCWFkZAlERVNULCBUTVAsIERFU1Q7CQlcCisKKy8qIENsb2JiZXJzIFRNUCwgY3VycmVudCBhZGRyZXNzIHNwYWNlIFBHRCBwaHlzIGFkZHJlc3MgaW50byBERVNULiAgKi8KKyNkZWZpbmUgVFJBUF9MT0FEX1BHRF9QSFlTKERFU1QsIFRNUCkJCVwKKwlUUkFQX0xPQURfVFJBUF9CTE9DSyhERVNULCBUTVApCQlcCisJbGR4CVtERVNUICsgVFJBUF9QRVJfQ1BVX1BHRF9QQUREUl0sIERFU1Q7CisKKy8qIENsb2JiZXJzIFRNUCwgbG9hZHMgbG9jYWwgcHJvY2Vzc29yJ3MgSVJRIHdvcmsgYXJlYSBpbnRvIERFU1QuICAqLworI2RlZmluZSBUUkFQX0xPQURfSVJRX1dPUktfUEEoREVTVCwgVE1QKQlcCisJVFJBUF9MT0FEX1RSQVBfQkxPQ0soREVTVCwgVE1QKQkJXAorCWFkZAlERVNULCBUUkFQX1BFUl9DUFVfSVJRX1dPUktMSVNUX1BBLCBERVNUOworCisvKiBDbG9iYmVycyBUTVAsIGxvYWRzIERFU1Qgd2l0aCBjdXJyZW50IHRocmVhZCBpbmZvIHBvaW50ZXIuICAqLworI2RlZmluZSBUUkFQX0xPQURfVEhSRUFEX1JFRyhERVNULCBUTVApCQlcCisJVFJBUF9MT0FEX1RSQVBfQkxPQ0soREVTVCwgVE1QKQkJXAorCWxkeAlbREVTVCArIFRSQVBfUEVSX0NQVV9USFJFQURdLCBERVNUOworCisvKiBHaXZlbiB0aGUgY3VycmVudCB0aHJlYWQgaW5mbyBwb2ludGVyIGluIFRIUiwgbG9hZCB0aGUgcGVyLWNwdQorICogYXJlYSBiYXNlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3NvciBpbnRvIERFU1QuICBSRUcxLCBSRUcyLCBhbmQgUkVHMyBhcmUKKyAqIGNsb2JiZXJlZC4KKyAqCisgKiBZb3UgYWJzb2x1dGVseSBjYW5ub3QgdXNlIERFU1QgYXMgYSB0ZW1wb3JhcnkgaW4gdGhpcyBjb2RlLiAgVGhlCisgKiByZWFzb24gaXMgdGhhdCB0cmFwcyBjYW4gaGFwcGVuIGR1cmluZyBleGVjdXRpb24sIGFuZCByZXR1cm4gZnJvbQorICogdHJhcCB3aWxsIGxvYWQgdGhlIGZ1bGx5IHJlc29sdmVkIERFU1QgcGVyLWNwdSBiYXNlLiAgVGhpcyBjYW4gY29ycnVwdAorICogdGhlIGNhbGN1bGF0aW9ucyBkb25lIGJ5IHRoZSBtYWNybyBtaWQtc3RyZWFtLgorICovCisjZGVmaW5lIExPQURfUEVSX0NQVV9CQVNFKERFU1QsIFRIUiwgUkVHMSwgUkVHMiwgUkVHMykJXAorCWxkdWgJW1RIUiArIFRJX0NQVV0sIFJFRzE7CQkJXAorCXNldGhpCSVoaShfX3Blcl9jcHVfc2hpZnQpLCBSRUczOwkJXAorCXNldGhpCSVoaShfX3Blcl9jcHVfYmFzZSksIFJFRzI7CQlcCisJbGR4CVtSRUczICsgJWxvKF9fcGVyX2NwdV9zaGlmdCldLCBSRUczOwlcCisJbGR4CVtSRUcyICsgJWxvKF9fcGVyX2NwdV9iYXNlKV0sIFJFRzI7CVwKKwlzbGx4CVJFRzEsIFJFRzMsIFJFRzM7CQkJXAorCWFkZAlSRUczLCBSRUcyLCBERVNUOworCisjZWxzZQorCisjZGVmaW5lIFRSQVBfTE9BRF9UUkFQX0JMT0NLKERFU1QsIFRNUCkJCVwKKwlzZXRoaQklaGkodHJhcF9ibG9jayksIERFU1Q7CQlcCisJb3IJREVTVCwgJWxvKHRyYXBfYmxvY2spLCBERVNUOwlcCisKKy8qIFVuaXByb2Nlc3NvciB2ZXJzaW9ucywgd2Uga25vdyB0aGUgY3B1aWQgaXMgemVyby4gICovCisjZGVmaW5lIFRSQVBfTE9BRF9QR0RfUEhZUyhERVNULCBUTVApCQlcCisJVFJBUF9MT0FEX1RSQVBfQkxPQ0soREVTVCwgVE1QKQkJXAorCWxkeAlbREVTVCArIFRSQVBfUEVSX0NQVV9QR0RfUEFERFJdLCBERVNUOworCisvKiBDbG9iYmVycyBUTVAsIGxvYWRzIGxvY2FsIHByb2Nlc3NvcidzIElSUSB3b3JrIGFyZWEgaW50byBERVNULiAgKi8KKyNkZWZpbmUgVFJBUF9MT0FEX0lSUV9XT1JLX1BBKERFU1QsIFRNUCkJXAorCVRSQVBfTE9BRF9UUkFQX0JMT0NLKERFU1QsIFRNUCkJCVwKKwlhZGQJREVTVCwgVFJBUF9QRVJfQ1BVX0lSUV9XT1JLTElTVF9QQSwgREVTVDsKKworI2RlZmluZSBUUkFQX0xPQURfVEhSRUFEX1JFRyhERVNULCBUTVApCQlcCisJVFJBUF9MT0FEX1RSQVBfQkxPQ0soREVTVCwgVE1QKQkJXAorCWxkeAlbREVTVCArIFRSQVBfUEVSX0NQVV9USFJFQURdLCBERVNUOworCisvKiBObyBwZXItY3B1IGFyZWFzIG9uIHVuaXByb2Nlc3Nvciwgc28gbm8gbmVlZCB0byBsb2FkIERFU1QuICAqLworI2RlZmluZSBMT0FEX1BFUl9DUFVfQkFTRShERVNULCBUSFIsIFJFRzEsIFJFRzIsIFJFRzMpCisKKyNlbmRpZiAvKiAhKENPTkZJR19TTVApICovCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9DUFVEQVRBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Rjci5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZGNyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwYzliYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2Rjci5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX1NQQVJDNjRfRENSX0gKKyNkZWZpbmUgX1NQQVJDNjRfRENSX0gKKworLyogVWx0cmFTcGFyYy1JSUkvSUlJKyBEaXNwYXRjaCBDb250cm9sIFJlZ2lzdGVyLCBBU1IgMHgxMiAqLworI2RlZmluZSBEQ1JfRFBFCQkweDAwMDAwMDAwMDAwMDEwMDAgLyogSUlJKzogRCQgUGFyaXR5IEVycm9yIEVuYWJsZQkqLworI2RlZmluZSBEQ1JfT0JTCQkweDAwMDAwMDAwMDAwMDBmYzAgLyogT2JzZXJ2YWJpbGl0eSBCdXMgQ29udHJvbHMJKi8KKyNkZWZpbmUgRENSX0JQRQkJMHgwMDAwMDAwMDAwMDAwMDIwIC8qIEJyYW5jaCBQcmVkaWN0IEVuYWJsZQkJKi8KKyNkZWZpbmUgRENSX1JQRQkJMHgwMDAwMDAwMDAwMDAwMDEwIC8qIFJldHVybiBBZGRyZXNzIFByZWRpY3Rpb24gRW5hYmxlCSovCisjZGVmaW5lIERDUl9TSQkJMHgwMDAwMDAwMDAwMDAwMDA4IC8qIFNpbmdsZSBJbnN0cnVjdGlvbiBEaXNhYmxlCSovCisjZGVmaW5lIERDUl9JUEUJCTB4MDAwMDAwMDAwMDAwMDAwNCAvKiBJSUkrOiBJJCBQYXJpdHkgRXJyb3IgRW5hYmxlCSovCisjZGVmaW5lIERDUl9JRlBPRQkweDAwMDAwMDAwMDAwMDAwMDIgLyogSVJRIEZQIE9wZXJhdGlvbiBFbmFibGUJCSovCisjZGVmaW5lIERDUl9NUwkJMHgwMDAwMDAwMDAwMDAwMDAxIC8qIE11bHRpLVNjYWxhciBkaXNwYXRjaAkJKi8KKworI2VuZGlmIC8qIF9TUEFSQzY0X0RDUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kY3UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2RjdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNzA0ZTEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZGN1LmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfU1BBUkM2NF9EQ1VfSAorI2RlZmluZSBfU1BBUkM2NF9EQ1VfSAorCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKworLyogVWx0cmFTcGFyYy1JSUkgRGF0YSBDYWNoZSBVbml0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENVX0NQCV9BQygweDAwMDIwMDAwMDAwMDAwMDAsVUwpIC8qIFBoeXMgQ2FjaGUgRW5hYmxlIHcvbyBtbXUJKi8KKyNkZWZpbmUgRENVX0NWCV9BQygweDAwMDEwMDAwMDAwMDAwMDAsVUwpIC8qIFZpcnQgQ2FjaGUgRW5hYmxlIHcvbyBtbXUJKi8KKyNkZWZpbmUgRENVX01FCV9BQygweDAwMDA4MDAwMDAwMDAwMDAsVUwpIC8qIE5DLXN0b3JlIE1lcmdpbmcgRW5hYmxlCSovCisjZGVmaW5lIERDVV9SRQlfQUMoMHgwMDAwNDAwMDAwMDAwMDAwLFVMKSAvKiBSQVcgYnlwYXNzIEVuYWJsZQkJKi8KKyNkZWZpbmUgRENVX1BFCV9BQygweDAwMDAyMDAwMDAwMDAwMDAsVUwpIC8qIFBDYWNoZSBFbmFibGUJCSovCisjZGVmaW5lIERDVV9IUEUJX0FDKDB4MDAwMDEwMDAwMDAwMDAwMCxVTCkgLyogSFcgcHJlZmV0Y2ggRW5hYmxlCSovCisjZGVmaW5lIERDVV9TUEUJX0FDKDB4MDAwMDA4MDAwMDAwMDAwMCxVTCkgLyogU1cgcHJlZmV0Y2ggRW5hYmxlCSovCisjZGVmaW5lIERDVV9TTAlfQUMoMHgwMDAwMDQwMDAwMDAwMDAwLFVMKSAvKiBTZWNvbmRhcnkgbGQtc3RlZXJpbmcgRW5hYiovCisjZGVmaW5lIERDVV9XRQlfQUMoMHgwMDAwMDIwMDAwMDAwMDAwLFVMKSAvKiBXQ2FjaGUgZW5hYmxlCQkqLworI2RlZmluZSBEQ1VfUE0JX0FDKDB4MDAwMDAxZmUwMDAwMDAwMCxVTCkgLyogUEEgV2F0Y2hwb2ludCBCeXRlIE1hc2sJKi8KKyNkZWZpbmUgRENVX1ZNCV9BQygweDAwMDAwMDAxZmUwMDAwMDAsVUwpIC8qIFZBIFdhdGNocG9pbnQgQnl0ZSBNYXNrCSovCisjZGVmaW5lIERDVV9QUglfQUMoMHgwMDAwMDAwMDAxMDAwMDAwLFVMKSAvKiBQQSBXYXRjaHBvaW50IFJlYWQgRW5hYmxlCSovCisjZGVmaW5lIERDVV9QVwlfQUMoMHgwMDAwMDAwMDAwODAwMDAwLFVMKSAvKiBQQSBXYXRjaHBvaW50IFdyaXRlIEVuYWJsZSovCisjZGVmaW5lIERDVV9WUglfQUMoMHgwMDAwMDAwMDAwNDAwMDAwLFVMKSAvKiBWQSBXYXRjaHBvaW50IFJlYWQgRW5hYmxlCSovCisjZGVmaW5lIERDVV9WVwlfQUMoMHgwMDAwMDAwMDAwMjAwMDAwLFVMKSAvKiBWQSBXYXRjaHBvaW50IFdyaXRlIEVuYWJsZSovCisjZGVmaW5lIERDVV9ETQlfQUMoMHgwMDAwMDAwMDAwMDAwMDA4LFVMKSAvKiBETU1VIEVuYWJsZQkJKi8KKyNkZWZpbmUgRENVX0lNCV9BQygweDAwMDAwMDAwMDAwMDAwMDQsVUwpIC8qIElNTVUgRW5hYmxlCQkqLworI2RlZmluZSBEQ1VfREMJX0FDKDB4MDAwMDAwMDAwMDAwMDAwMixVTCkgLyogRGF0YSBDYWNoZSBFbmFibGUJCSovCisjZGVmaW5lIERDVV9JQwlfQUMoMHgwMDAwMDAwMDAwMDAwMDAxLFVMKSAvKiBJbnN0cnVjdGlvbiBDYWNoZSBFbmFibGUJKi8KKworI2VuZGlmIC8qIF9TUEFSQzY0X0RDVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kZWxheS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZGVsYXkuaAppbmRleCBiYzlhYmEyLi42MjEwYTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9kZWxheS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RlbGF5LmgKQEAgLTEsMzQgKzEsOCBAQAotLyoKLSAqIGRlbGF5Lmg6IExpbnV4IGRlbGF5IHJvdXRpbmVzIG9uIHRoZSBTcGFyYy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KS4KLSAqLwotCi0jaWZuZGVmIF9fU1BBUkNfREVMQVlfSAotI2RlZmluZSBfX1NQQVJDX0RFTEFZX0gKLQotI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcCAlMCwgMFxuXHQiCi0JCQkgICAgICIxOiBibmUgMWJcblx0IgotCQkJICAgICAic3ViY2MgJTAsIDEsICUwXG4iIDoKLQkJCSAgICAgIj0mciIgKGxvb3BzKSA6Ci0JCQkgICAgICIwIiAobG9vcHMpIDoKLQkJCSAgICAgImNjIik7Ci19Ci0KLS8qIFRoaXMgaXMgdG9vIG1lc3N5IHdpdGggaW5saW5lIGFzbSBvbiB0aGUgU3BhcmMuICovCi1leHRlcm4gdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzLCB1bnNpZ25lZCBsb25nIGxwaik7Ci1leHRlcm4gdm9pZCBfX25kZWxheSh1bnNpZ25lZCBsb25nIG5zZWNzLCB1bnNpZ25lZCBsb25nIGxwaik7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIF9fdWRlbGF5X3ZhbAljcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpLnVkZWxheV92YWwKLSNlbHNlIC8qIFNNUCAqLwotI2RlZmluZSBfX3VkZWxheV92YWwJbG9vcHNfcGVyX2ppZmZ5Ci0jZW5kaWYgLyogU01QICovCi0jZGVmaW5lIHVkZWxheShfX3VzZWNzKQlfX3VkZWxheShfX3VzZWNzLCBfX3VkZWxheV92YWwpCi0jZGVmaW5lIG5kZWxheShfX25zZWNzKQlfX25kZWxheShfX25zZWNzLCBfX3VkZWxheV92YWwpCi0KLSNlbmRpZiAvKiBkZWZpbmVkKF9fU1BBUkNfREVMQVlfSCkgKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX0RFTEFZX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX0RFTEFZX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9kZWxheV82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvZGVsYXlfMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kZWxheV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZGVsYXlfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzlhYmEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZGVsYXlfMzIuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogZGVsYXkuaDogTGludXggZGVsYXkgcm91dGluZXMgb24gdGhlIFNwYXJjLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpLgorICovCisKKyNpZm5kZWYgX19TUEFSQ19ERUxBWV9ICisjZGVmaW5lIF9fU1BBUkNfREVMQVlfSAorCisjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY21wICUwLCAwXG5cdCIKKwkJCSAgICAgIjE6IGJuZSAxYlxuXHQiCisJCQkgICAgICJzdWJjYyAlMCwgMSwgJTBcbiIgOgorCQkJICAgICAiPSZyIiAobG9vcHMpIDoKKwkJCSAgICAgIjAiIChsb29wcykgOgorCQkJICAgICAiY2MiKTsKK30KKworLyogVGhpcyBpcyB0b28gbWVzc3kgd2l0aCBpbmxpbmUgYXNtIG9uIHRoZSBTcGFyYy4gKi8KK2V4dGVybiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MsIHVuc2lnbmVkIGxvbmcgbHBqKTsKK2V4dGVybiB2b2lkIF9fbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnNlY3MsIHVuc2lnbmVkIGxvbmcgbHBqKTsKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgX191ZGVsYXlfdmFsCWNwdV9kYXRhKHNtcF9wcm9jZXNzb3JfaWQoKSkudWRlbGF5X3ZhbAorI2Vsc2UgLyogU01QICovCisjZGVmaW5lIF9fdWRlbGF5X3ZhbAlsb29wc19wZXJfamlmZnkKKyNlbmRpZiAvKiBTTVAgKi8KKyNkZWZpbmUgdWRlbGF5KF9fdXNlY3MpCV9fdWRlbGF5KF9fdXNlY3MsIF9fdWRlbGF5X3ZhbCkKKyNkZWZpbmUgbmRlbGF5KF9fbnNlY3MpCV9fbmRlbGF5KF9fbnNlY3MsIF9fdWRlbGF5X3ZhbCkKKworI2VuZGlmIC8qIGRlZmluZWQoX19TUEFSQ19ERUxBWV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZGVsYXlfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2RlbGF5XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3YWE2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RlbGF5XzY0LmgKQEAgLTAsMCArMSwxNyBAQAorLyogZGVsYXkuaDogTGludXggZGVsYXkgcm91dGluZXMgb24gc3BhcmM2NC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDIwMDQsIDIwMDcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KS4KKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X0RFTEFZX0gKKyNkZWZpbmUgX1NQQVJDNjRfREVMQVlfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpOworZXh0ZXJuIHZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpOworI2RlZmluZSBtZGVsYXkobikJdWRlbGF5KChuKSAqIDEwMDApCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9ERUxBWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kaXNwbGF5N3NlZy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZGlzcGxheTdzZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmQ0YTkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZGlzcGxheTdzZWcuaApAQCAtMCwwICsxLDc5IEBACisvKgorICoKKyAqIGRpc3BsYXk3c2VnIC0gRHJpdmVyIGludGVyZmFjZSBmb3IgdGhlIDctc2VnbWVudCBkaXNwbGF5CisgKiBwcmVzZW50IG9uIFN1biBNaWNyb3N5c3RlbXMgQ1AxNDAwIGFuZCBDUDE1MDAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgRXJpYyBCcm93ZXIgPGVicm93ZXJAdXNhLm5ldD4KKyAqCisgKi8KKworI2lmbmRlZiBfX2Rpc3BsYXk3c2VnX2hfXworI2RlZmluZSBfX2Rpc3BsYXk3c2VnX2hfXworCisjZGVmaW5lIEQ3U19JT0MJJ3AnCisKKyNkZWZpbmUgRDdTSU9DUkQgX0lPUihEN1NfSU9DLCAweDQ1LCBpbnQpCS8qIFJlYWQgZGV2aWNlIHN0YXRlCSovCisjZGVmaW5lIEQ3U0lPQ1dSIF9JT1coRDdTX0lPQywgMHg0NiwgaW50KQkvKiBXcml0ZSBkZXZpY2Ugc3RhdGUJKi8KKyNkZWZpbmUgRDdTSU9DVE0gX0lPIChEN1NfSU9DLCAweDQ3KQkJLyogVHJhbnNsYXRlIG1vZGUgKEZMSVApKi8KKworLyoKKyAqIGlvY3RsIGZsYWcgZGVmaW5pdGlvbnMKKyAqCisgKiBQT0lOVAktIFRvZ2dsZSBkZWNpbWFsIHBvaW50CSgwPWFic2VudCAxPXByZXNlbnQpCisgKiBBTEFSTQktIFRvZ2dsZSBhbGFybSBMRUQgCQkoMD1ncmVlbiAgMT1yZWQpCisgKiBGTElQCQktIFRvZ2dsZSBpbnZlcnRlZCBtb2RlIAkoMD1ub3JtYWwgMT1mbGlwcGVkKQorICogYml0cyAwLTQJLSBDaGFyYWN0ZXIgZGlzcGxheWVkCShzZWUgZGVmaW5pdGlvbnMgYmVsb3cpCisgKgorICogRGlzcGxheSBzZWdtZW50cyBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzLAorICogc3ViamVjdCB0byBEN1NfRkxJUCByZWdpc3RlciBzdGF0ZToKKyAqCisgKiAgICBhCisgKiAgIC0tLQorICogZnwgICB8YgorICogICAtZy0KKyAqIGV8ICAgfGMKKyAqICAgLS0tCisgKiAgICBkCisgKi8KKworI2RlZmluZSBEN1NfUE9JTlQJKDEgPDwgNykJLyogRGVjaW1hbCBwb2ludCovCisjZGVmaW5lIEQ3U19BTEFSTQkoMSA8PCA2KQkvKiBBbGFybSBMRUQgCSovCisjZGVmaW5lIEQ3U19GTElQCSgxIDw8IDUpCS8qIEZsaXAgZGlzcGxheSAqLworCisjZGVmaW5lIEQ3U18wCQkweDAwCQkvKiBOdW1lcmFscyAwLTkgKi8KKyNkZWZpbmUgRDdTXzEJCTB4MDEKKyNkZWZpbmUgRDdTXzIJCTB4MDIKKyNkZWZpbmUgRDdTXzMJCTB4MDMKKyNkZWZpbmUgRDdTXzQJCTB4MDQKKyNkZWZpbmUgRDdTXzUJCTB4MDUKKyNkZWZpbmUgRDdTXzYJCTB4MDYKKyNkZWZpbmUgRDdTXzcJCTB4MDcKKyNkZWZpbmUgRDdTXzgJCTB4MDgKKyNkZWZpbmUgRDdTXzkJCTB4MDkKKyNkZWZpbmUgRDdTX0EJCTB4MEEJCS8qIExldHRlcnMgQS1GLCBILCBMLCBQICovCisjZGVmaW5lIEQ3U19CCQkweDBCCisjZGVmaW5lIEQ3U19DCQkweDBDCisjZGVmaW5lIEQ3U19ECQkweDBECisjZGVmaW5lIEQ3U19FCQkweDBFCisjZGVmaW5lIEQ3U19GCQkweDBGCisjZGVmaW5lIEQ3U19ICQkweDEwCisjZGVmaW5lIEQ3U19FMgkJMHgxMQorI2RlZmluZSBEN1NfTAkJMHgxMgorI2RlZmluZSBEN1NfUAkJMHgxMworI2RlZmluZSBEN1NfU0VHQQkweDE0CQkvKiBJbmRpdmlkdWFsIHNlZ21lbnRzICovCisjZGVmaW5lIEQ3U19TRUdCCTB4MTUKKyNkZWZpbmUgRDdTX1NFR0MJMHgxNgorI2RlZmluZSBEN1NfU0VHRAkweDE3CisjZGVmaW5lIEQ3U19TRUdFCTB4MTgKKyNkZWZpbmUgRDdTX1NFR0YJMHgxOQorI2RlZmluZSBEN1NfU0VHRwkweDFBCisjZGVmaW5lIEQ3U19TRUdBQkZHIDB4MUIJCS8qIFNlZ21lbnQgZ3JvdXBpbmdzICovCisjZGVmaW5lIEQ3U19TRUdDREVHCTB4MUMKKyNkZWZpbmUgRDdTX1NFR0JDRUYgMHgxRAorI2RlZmluZSBEN1NfU0VHQURHCTB4MUUKKyNkZWZpbmUgRDdTX0JMQU5LCTB4MUYJCS8qIENsZWFyIGFsbCBzZWdtZW50cyAqLworCisjZGVmaW5lIEQ3U19NSU5fVkFMCTB4MAorI2RlZmluZSBEN1NfTUFYX1ZBTAkweDFGCisKKyNlbmRpZiAvKiBpZm5kZWYgX19kaXNwbGF5N3NlZ19oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9kbWEtbWFwcGluZy5oCmluZGV4IGYzYTY0MWUuLjc0ODM1MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLW1hcHBpbmcuaApAQCAtMSwxMSArMSw4IEBACi0jaWZuZGVmIF9BU01fU1BBUkNfRE1BX01BUFBJTkdfSAotI2RlZmluZSBfQVNNX1NQQVJDX0RNQV9NQVBQSU5HX0gKLQotCi0jaWZkZWYgQ09ORklHX1BDSQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmg+CisjaWZuZGVmIF9fX0FTTV9TUEFSQ19ETUFfTUFQUElOR19ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19ETUFfTUFQUElOR19ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvZG1hLW1hcHBpbmdfNjQuaD4KICNlbHNlCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctYnJva2VuLmg+Ci0jZW5kaWYgLyogUENJICovCi0KLSNlbmRpZiAvKiBfQVNNX1NQQVJDX0RNQV9NQVBQSU5HX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvZG1hLW1hcHBpbmdfMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kbWEtbWFwcGluZ18zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLW1hcHBpbmdfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2E2NDFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLW1hcHBpbmdfMzIuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9BU01fU1BBUkNfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfQVNNX1NQQVJDX0RNQV9NQVBQSU5HX0gKKworCisjaWZkZWYgQ09ORklHX1BDSQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLWJyb2tlbi5oPgorI2VuZGlmIC8qIFBDSSAqLworCisjZW5kaWYgLyogX0FTTV9TUEFSQ19ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kbWEtbWFwcGluZ182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLW1hcHBpbmdfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGNiZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLW1hcHBpbmdfNjQuaApAQCAtMCwwICsxLDE1NCBAQAorI2lmbmRlZiBfQVNNX1NQQVJDNjRfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfQVNNX1NQQVJDNjRfRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjZGVmaW5lIERNQV9FUlJPUl9DT0RFCSh+KGRtYV9hZGRyX3QpMHgwKQorCitzdHJ1Y3QgZG1hX29wcyB7CisJdm9pZCAqKCphbGxvY19jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKTsKKwl2b2lkICgqZnJlZV9jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOworCWRtYV9hZGRyX3QgKCptYXBfc2luZ2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAorCQkJCSBzaXplX3Qgc2l6ZSwKKwkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwl2b2lkICgqdW5tYXBfc2luZ2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkgICAgIHNpemVfdCBzaXplLAorCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCWludCAoKm1hcF9zZykoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisJdm9pZCAoKnVubWFwX3NnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgaW50IG5od2VudHJpZXMsCisJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwl2b2lkICgqc3luY19zaW5nbGVfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCXZvaWQgKCpzeW5jX3NnX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQlpbnQgbmVsZW1zLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Cit9OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkbWFfb3BzICpkbWFfb3BzOworCitleHRlcm4gaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzayk7CitleHRlcm4gaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCit7CisJcmV0dXJuIGRtYV9vcHMtPmFsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgdm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwlkbWFfb3BzLT5mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKKwkJCQkJc2l6ZV90IHNpemUsCisJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlyZXR1cm4gZG1hX29wcy0+bWFwX3NpbmdsZShkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkJICAgIHNpemVfdCBzaXplLAorCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZG1hX29wcy0+dW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXJldHVybiBkbWFfb3BzLT5tYXBfc2luZ2xlKGRldiwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LAorCQkJCSAgIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCisJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlkbWFfb3BzLT51bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXJldHVybiBkbWFfb3BzLT5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCWludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWRtYV9vcHMtPnVubWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZG1hX29wcy0+c3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJICAgICAgc2l6ZV90IHNpemUsCisJCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBObyBmbHVzaGluZyBuZWVkZWQgdG8gc3luYyBjcHUgd3JpdGVzIHRvIHRoZSBkZXZpY2UuICAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCSBzaXplX3Qgc2l6ZSwKKwkJCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlK29mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQkgICAgc2l6ZV90IHNpemUsCisJCQkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIE5vIGZsdXNoaW5nIG5lZWRlZCB0byBzeW5jIGNwdSB3cml0ZXMgdG8gdGhlIGRldmljZS4gICovCit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZG1hX29wcy0+c3luY19zZ19mb3JfY3B1KGRldiwgc2csIG5lbGVtcywgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIE5vIGZsdXNoaW5nIG5lZWRlZCB0byBzeW5jIGNwdSB3cml0ZXMgdG8gdGhlIGRldmljZS4gICovCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIChkbWFfYWRkciA9PSBETUFfRVJST1JfQ09ERSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCit7CisJLyogbm8gZWFzeSB3YXkgdG8gZ2V0IGNhY2hlIHNpemUgb24gYWxsIHByb2Nlc3NvcnMsIHNvIHJldHVybgorCSAqIHRoZSBtYXhpbXVtIHBvc3NpYmxlLCB0byBiZSBzYWZlICovCisJcmV0dXJuICgxIDw8IElOVEVSTk9ERV9DQUNIRV9TSElGVCk7Cit9CisKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKQkoMSkKKworI2VuZGlmIC8qIF9BU01fU1BBUkM2NF9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kbWEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oCmluZGV4IDk1OWQ2YzguLjhjYzY5YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oCkBAIC0xLDI4OCArMSw4IEBACi0vKiBpbmNsdWRlL2FzbS1zcGFyYy9kbWEuaAotICoKLSAqIENvcHlyaWdodCAxOTk1IChDKSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCi0gKi8KLQotI2lmbmRlZiBfQVNNX1NQQVJDX0RNQV9ICi0jZGVmaW5lIF9BU01fU1BBUkNfRE1BX0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vdmFjLW9wcy5oPiAgLyogZm9yIGludmFsaWRhdGUncywgZXRjLiAqLwotI2luY2x1ZGUgPGFzbS9zYnVzLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL29wbGliLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KLXN0cnVjdCBwYWdlOwotZXh0ZXJuIHNwaW5sb2NrX3QgIGRtYV9zcGluX2xvY2s7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGFpbV9kbWFfbG9jayh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOwotfQotCi0vKiBUaGVzZSBhcmUgaXJyZWxldmFudCBmb3IgU3BhcmMgRE1BLCBidXQgd2UgbGVhdmUgaXQgaW4gc28gdGhhdAotICogdGhpbmdzIGNhbiBjb21waWxlLgotICovCi0jZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgOAotI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgICh+MFVMKQotI2RlZmluZSBETUFfTU9ERV9SRUFEICAgIDEKLSNkZWZpbmUgRE1BX01PREVfV1JJVEUgICAyCi0KLS8qIFVzZWZ1bCBjb25zdGFudHMgKi8KLSNkZWZpbmUgU0laRV8xNk1CICAgICAgKDE2KjEwMjQqMTAyNCkKLSNkZWZpbmUgU0laRV82NEsgICAgICAgKDY0KjEwMjQpCi0KLS8qIFNCVVMgRE1BIGNvbnRyb2xsZXIgcmVnIG9mZnNldHMgKi8KLSNkZWZpbmUgRE1BX0NTUgkJMHgwMFVMCQkvKiBydyAgRE1BIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICAgIDB4MDAgICAqLwotI2RlZmluZSBETUFfQUREUgkweDA0VUwJCS8qIHJ3ICBETUEgdHJhbnNmZXIgYWRkcmVzcyByZWdpc3RlciAgMHgwNCAgICovCi0jZGVmaW5lIERNQV9DT1VOVAkweDA4VUwJCS8qIHJ3ICBETUEgdHJhbnNmZXIgY291bnQgcmVnaXN0ZXIgICAgMHgwOCAgICovCi0jZGVmaW5lIERNQV9URVNUCTB4MGNVTAkJLyogcncgIERNQSB0ZXN0L2RlYnVnIHJlZ2lzdGVyICAgICAgICAweDBjICAgKi8KLQotLyogRFZNQSBjaGlwIHJldmlzaW9ucyAqLwotZW51bSBkdm1hX3JldiB7Ci0JZHZtYXJldjAsCi0JZHZtYWVzYzEsCi0JZHZtYXJldjEsCi0JZHZtYXJldjIsCi0JZHZtYXJldjMsCi0JZHZtYXJldnBsdXMsCi0JZHZtYWhtZQotfTsKLQotI2RlZmluZSBETUFfSEFTQ09VTlQocmV2KSAgKChyZXYpPT1kdm1hZXNjMSkKLQotLyogTGludXggRE1BIGluZm9ybWF0aW9uIHN0cnVjdHVyZSwgZmlsbGVkIGR1cmluZyBwcm9iZS4gKi8KLXN0cnVjdCBzYnVzX2RtYSB7Ci0Jc3RydWN0IHNidXNfZG1hICpuZXh0OwotCXN0cnVjdCBzYnVzX2RldiAqc2RldjsKLQl2b2lkIF9faW9tZW0gKnJlZ3M7Ci0KLQkvKiBTdGF0dXMsIG1pc2MgaW5mbyAqLwotCWludCBub2RlOyAgICAgICAgICAgICAgICAvKiBQcm9tIG5vZGUgZm9yIHRoaXMgRE1BIGRldmljZSAqLwotCWludCBydW5uaW5nOyAgICAgICAgICAgICAvKiBBcmUgd2UgZG9pbmcgRE1BIG5vdz8gKi8KLQlpbnQgYWxsb2NhdGVkOyAgICAgICAgICAgLyogQXJlIHdlICJvd25lZCIgYnkgYW55b25lIHlldD8gKi8KLQotCS8qIFRyYW5zZmVyIGluZm9ybWF0aW9uLiAqLwotCXVuc2lnbmVkIGxvbmcgYWRkcjsgICAgICAvKiBTdGFydCBhZGRyZXNzIG9mIGN1cnJlbnQgdHJhbnNmZXIgKi8KLQlpbnQgbmJ5dGVzOyAgICAgICAgICAgICAgLyogU2l6ZSBvZiBjdXJyZW50IHRyYW5zZmVyICovCi0JaW50IHJlYWxieXRlczsgICAgICAgICAgIC8qIEZvciBzcGxpdHRpbmcgdXAgbGFyZ2UgdHJhbnNmZXJzLCBldGMuICovCi0KLQkvKiBETUEgcmV2aXNpb24gKi8KLQllbnVtIGR2bWFfcmV2IHJldmlzaW9uOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBzYnVzX2RtYSAqZG1hX2NoYWluOwotCi0vKiBCcm9rZW4gaGFyZHdhcmUuLi4gKi8KLSNpZmRlZiBDT05GSUdfU1VONAotLyogSGF2ZSB0byBzb3J0IHRoaXMgb3V0LiBEb2VzIHJldjAgd29yayBmaW5lIG9uIHN1bjRbY21kXSB3aXRob3V0IGlzYnJva2VuPwotICogT3IgaXMgcmV2MCBwcmVzZW50IG9ubHkgb24gc3VuNCBib3hlcz8gLWpqICovCi0jZGVmaW5lIERNQV9JU0JST0tFTihkbWEpICAgICgoZG1hKS0+cmV2aXNpb24gPT0gZHZtYXJldjAgfHwgKGRtYSktPnJldmlzaW9uID09IGR2bWFyZXYxKQorI2lmbmRlZiBfX19BU01fU1BBUkNfRE1BX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX0RNQV9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvZG1hXzY0Lmg+CiAjZWxzZQotI2RlZmluZSBETUFfSVNCUk9LRU4oZG1hKSAgICAoKGRtYSktPnJldmlzaW9uID09IGR2bWFyZXYxKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9kbWFfMzIuaD4KICNlbmRpZgotI2RlZmluZSBETUFfSVNFU0MxKGRtYSkgICAgICAoKGRtYSktPnJldmlzaW9uID09IGR2bWFlc2MxKQotCi0vKiBNYWluIHJvdXRpbmVzIGluIGRtYS5jICovCi1leHRlcm4gdm9pZCBkdm1hX2luaXQoc3RydWN0IHNidXNfYnVzICopOwotCi0vKiBGaWVsZHMgaW4gdGhlIGNvbmRfcmVnIHJlZ2lzdGVyICovCi0vKiBGaXJzdCwgdGhlIHZlcnNpb24gaWRlbnRpZmljYXRpb24gYml0cyAqLwotI2RlZmluZSBETUFfREVWSUNFX0lEICAgIDB4ZjAwMDAwMDAgICAgICAgIC8qIERldmljZSBpZGVudGlmaWNhdGlvbiBiaXRzICovCi0jZGVmaW5lIERNQV9WRVJTMCAgICAgICAgMHgwMDAwMDAwMCAgICAgICAgLyogU3VucmF5IERNQSB2ZXJzaW9uICovCi0jZGVmaW5lIERNQV9FU0NWMSAgICAgICAgMHg0MDAwMDAwMCAgICAgICAgLyogRE1BIEVTQyBWZXJzaW9uIDEgKi8KLSNkZWZpbmUgRE1BX1ZFUlMxICAgICAgICAweDgwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDEgKi8KLSNkZWZpbmUgRE1BX1ZFUlMyICAgICAgICAweGEwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDIgKi8KLSNkZWZpbmUgRE1BX1ZFUkhNRSAgICAgICAweGIwMDAwMDAwICAgICAgICAvKiBETUEgaG1lIGdhdGUgYXJyYXkgKi8KLSNkZWZpbmUgRE1BX1ZFUlNQTFVTICAgICAweDkwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDEgUExVUyAqLwotCi0jZGVmaW5lIERNQV9ITkRMX0lOVFIgICAgMHgwMDAwMDAwMSAgICAgICAgLyogQW4gSVJRIG5lZWRzIHRvIGJlIGhhbmRsZWQgKi8KLSNkZWZpbmUgRE1BX0hORExfRVJST1IgICAweDAwMDAwMDAyICAgICAgICAvKiBXZSBuZWVkIHRvIHRha2UgYW4gZXJyb3IgKi8KLSNkZWZpbmUgRE1BX0ZJRk9fSVNEUkFJTiAweDAwMDAwMDBjICAgICAgICAvKiBUaGUgRE1BIEZJRk8gaXMgZHJhaW5pbmcgKi8KLSNkZWZpbmUgRE1BX0lOVF9FTkFCICAgICAweDAwMDAwMDEwICAgICAgICAvKiBUdXJuIG9uIGludGVycnVwdHMgKi8KLSNkZWZpbmUgRE1BX0ZJRk9fSU5WICAgICAweDAwMDAwMDIwICAgICAgICAvKiBJbnZhbGlkYXRlIHRoZSBGSUZPICovCi0jZGVmaW5lIERNQV9BQ0NfU1pfRVJSICAgMHgwMDAwMDA0MCAgICAgICAgLyogVGhlIGFjY2VzcyBzaXplIHdhcyBiYWQgKi8KLSNkZWZpbmUgRE1BX0ZJRk9fU1REUkFJTiAweDAwMDAwMDQwICAgICAgICAvKiBETUFfVkVSUzEgRHJhaW4gdGhlIEZJRk8gKi8KLSNkZWZpbmUgRE1BX1JTVF9TQ1NJICAgICAweDAwMDAwMDgwICAgICAgICAvKiBSZXNldCB0aGUgU0NTSSBjb250cm9sbGVyICovCi0jZGVmaW5lIERNQV9SU1RfRU5FVCAgICAgRE1BX1JTVF9TQ1NJICAgICAgLyogUmVzZXQgdGhlIEVORVQgY29udHJvbGxlciAqLwotI2RlZmluZSBETUFfUlNUX0JQUCAgICAgIERNQV9SU1RfU0NTSSAgICAgIC8qIFJlc2V0IHRoZSBCUFAgY29udHJvbGxlciAqLwotI2RlZmluZSBETUFfU1RfV1JJVEUgICAgIDB4MDAwMDAxMDAgICAgICAgIC8qIHdyaXRlIGZyb20gZGV2aWNlIHRvIG1lbW9yeSAqLwotI2RlZmluZSBETUFfRU5BQkxFICAgICAgIDB4MDAwMDAyMDAgICAgICAgIC8qIEZpcmUgdXAgRE1BLCBoYW5kbGUgcmVxdWVzdHMgKi8KLSNkZWZpbmUgRE1BX1BFTkRfUkVBRCAgICAweDAwMDAwNDAwICAgICAgICAvKiBETUFfVkVSUzEvMC9QTFVTIFBlbmRpbmcgUmVhZCAqLwotI2RlZmluZSBETUFfRVNDX0JVUlNUICAgIDB4MDAwMDA4MDAgICAgICAgIC8qIDE9MTZieXRlIDA9MzJieXRlICovCi0jZGVmaW5lIERNQV9SRUFEX0FIRUFEICAgMHgwMDAwMTgwMCAgICAgICAgLyogRE1BIHJlYWQgYWhlYWQgcGFydGlhbCBsb25nd29yZCAqLwotI2RlZmluZSBETUFfRFNCTF9SRF9EUk4gIDB4MDAwMDEwMDAgICAgICAgIC8qIE5vIEVDIGRyYWluIG9uIHNsYXZlIHJlYWRzICovCi0jZGVmaW5lIERNQV9CQ05UX0VOQUIgICAgMHgwMDAwMjAwMCAgICAgICAgLyogSWYgb24sIHVzZSB0aGUgYnl0ZSBjb3VudGVyICovCi0jZGVmaW5lIERNQV9URVJNX0NOVFIgICAgMHgwMDAwNDAwMCAgICAgICAgLyogVGVybWluYWwgY291bnRlciAqLwotI2RlZmluZSBETUFfU0NTSV9TQlVTNjQgIDB4MDAwMDgwMDAgICAgICAgIC8qIEhNRTogRW5hYmxlIDY0LWJpdCBTQlVTIG1vZGUuICovCi0jZGVmaW5lIERNQV9DU1JfRElTQUIgICAgMHgwMDAxMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIGNzciAqLwotI2RlZmluZSBETUFfU0NTSV9ESVNBQiAgIDB4MDAwMjAwMDAgICAgICAgIC8qIE5vIEZJRk8gZHJhaW5zIGR1cmluZyByZWcgKi8KLSNkZWZpbmUgRE1BX0RTQkxfV1JfSU5WICAweDAwMDIwMDAwICAgICAgICAvKiBObyBFQyBpbnZhbC4gb24gc2xhdmUgd3JpdGVzICovCi0jZGVmaW5lIERNQV9BRERfRU5BQkxFICAgMHgwMDA0MDAwMCAgICAgICAgLyogU3BlY2lhbCBFU0MgRFZNQSBvcHRpbWl6YXRpb24gKi8KLSNkZWZpbmUgRE1BX0VfQlVSU1RTCSAweDAwMGMwMDAwCSAgIC8qIEVORVQ6IFNCVVMgci93IGJ1cnN0IG1hc2sgKi8KLSNkZWZpbmUgRE1BX0VfQlVSU1QzMgkgMHgwMDA0MDAwMAkgICAvKiBFTkVUOiBTQlVTIDMyIGJ5dGUgci93IGJ1cnN0ICovCi0jZGVmaW5lIERNQV9FX0JVUlNUMTYJIDB4MDAwMDAwMDAJICAgLyogRU5FVDogU0JVUyAxNiBieXRlIHIvdyBidXJzdCAqLwotI2RlZmluZSBETUFfQlJTVF9TWiAgICAgIDB4MDAwYzAwMDAgICAgICAgIC8qIFNDU0k6IFNCVVMgci93IGJ1cnN0IHNpemUgKi8KLSNkZWZpbmUgRE1BX0JSU1Q2NCAgICAgICAweDAwMDgwMDAwICAgICAgICAvKiBTQ1NJOiA2NGJ5dGUgYnVyc3RzIChITUUgb24gVWx0cmFTcGFyYyBvbmx5KSAqLwotI2RlZmluZSBETUFfQlJTVDMyICAgICAgIDB4MDAwNDAwMDAgICAgICAgIC8qIFNDU0kvQlBQOiAzMmJ5dGUgYnVyc3RzICovCi0jZGVmaW5lIERNQV9CUlNUMTYgICAgICAgMHgwMDAwMDAwMCAgICAgICAgLyogU0NTSS9CUFA6IDE2Ynl0ZSBidXJzdHMgKi8KLSNkZWZpbmUgRE1BX0JSU1QwICAgICAgICAweDAwMDgwMDAwICAgICAgICAvKiBTQ1NJOiBubyBidXJzdHMgKG5vbi1ITUUgZ2F0ZSBhcnJheXMpICovCi0jZGVmaW5lIERNQV9BRERSX0RJU0FCICAgMHgwMDEwMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIGFkZHIgKi8KLSNkZWZpbmUgRE1BXzJDTEtTICAgICAgICAweDAwMjAwMDAwICAgICAgICAvKiBFYWNoIHRyYW5zZmVyID0gMiBjbG9jayB0aWNrcyAqLwotI2RlZmluZSBETUFfM0NMS1MgICAgICAgIDB4MDA0MDAwMDAgICAgICAgIC8qIEVhY2ggdHJhbnNmZXIgPSAzIGNsb2NrIHRpY2tzICovCi0jZGVmaW5lIERNQV9FTl9FTkVUQVVJICAgRE1BXzNDTEtTICAgICAgICAgLyogUHV0IGxhbmNlIGludG8gQVVJLWNhYmxlIG1vZGUgKi8KLSNkZWZpbmUgRE1BX0NOVFJfRElTQUIgICAweDAwODAwMDAwICAgICAgICAvKiBObyBJUlEgd2hlbiBETUFfVEVSTV9DTlRSIHNldCAqLwotI2RlZmluZSBETUFfQVVUT19OQUREUiAgIDB4MDEwMDAwMDAgICAgICAgIC8qIFVzZSAiYXV0byBueHQgYWRkciIgZmVhdHVyZSAqLwotI2RlZmluZSBETUFfU0NTSV9PTiAgICAgIDB4MDIwMDAwMDAgICAgICAgIC8qIEVuYWJsZSBTQ1NJIGRtYSAqLwotI2RlZmluZSBETUFfQlBQX09OICAgICAgIERNQV9TQ1NJX09OICAgICAgIC8qIEVuYWJsZSBCUFAgZG1hICovCi0jZGVmaW5lIERNQV9QQVJJVFlfT0ZGICAgMHgwMjAwMDAwMCAgICAgICAgLyogSE1FOiBkaXNhYmxlIHBhcml0eSBjaGVja2luZyAqLwotI2RlZmluZSBETUFfTE9BREVEX0FERFIgIDB4MDQwMDAwMDAgICAgICAgIC8qIEFkZHJlc3MgaGFzIGJlZW4gbG9hZGVkICovCi0jZGVmaW5lIERNQV9MT0FERURfTkFERFIgMHgwODAwMDAwMCAgICAgICAgLyogTmV4dCBhZGRyZXNzIGhhcyBiZWVuIGxvYWRlZCAqLwotI2RlZmluZSBETUFfUkVTRVRfRkFTMzY2IDB4MDgwMDAwMDAgICAgICAgIC8qIEhNRTogQXNzZXJ0IFJFU0VUIHRvIEZBUzM2NiAqLwotCi0vKiBWYWx1ZXMgZGVzY3JpYmluZyB0aGUgYnVyc3Qtc2l6ZSBwcm9wZXJ0eSBmcm9tIHRoZSBQUk9NICovCi0jZGVmaW5lIERNQV9CVVJTVDEgICAgICAgMHgwMQotI2RlZmluZSBETUFfQlVSU1QyICAgICAgIDB4MDIKLSNkZWZpbmUgRE1BX0JVUlNUNCAgICAgICAweDA0Ci0jZGVmaW5lIERNQV9CVVJTVDggICAgICAgMHgwOAotI2RlZmluZSBETUFfQlVSU1QxNiAgICAgIDB4MTAKLSNkZWZpbmUgRE1BX0JVUlNUMzIgICAgICAweDIwCi0jZGVmaW5lIERNQV9CVVJTVDY0ICAgICAgMHg0MAotI2RlZmluZSBETUFfQlVSU1RCSVRTICAgIDB4N2YKLQotLyogRGV0ZXJtaW5lIGhpZ2hlc3QgcG9zc2libGUgZmluYWwgdHJhbnNmZXIgYWRkcmVzcyBnaXZlbiBhIGJhc2UgKi8KLSNkZWZpbmUgRE1BX01BWEVORChhZGRyKSAoMHgwMTAwMDAwMFVMLSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKSYweDAwZmZmZmZmVUwpKQotCi0vKiBZZXMsIEkgaGFjayBhIGxvdCBvZiBlbGlzcCBpbiBteSBzcGFyZSB0aW1lLi4uICovCi0jZGVmaW5lIERNQV9FUlJPUl9QKHJlZ3MpICAoKCgocmVncyktPmNvbmRfcmVnKSAmIERNQV9ITkRMX0VSUk9SKSkKLSNkZWZpbmUgRE1BX0lSUV9QKHJlZ3MpICAgICgoKChyZWdzKS0+Y29uZF9yZWcpICYgKERNQV9ITkRMX0lOVFIgfCBETUFfSE5ETF9FUlJPUikpKQotI2RlZmluZSBETUFfV1JJVEVfUChyZWdzKSAgKCgoKHJlZ3MpLT5jb25kX3JlZykgJiBETUFfU1RfV1JJVEUpKQotI2RlZmluZSBETUFfT0ZGKHJlZ3MpICAgICAgKCgoKHJlZ3MpLT5jb25kX3JlZykgJj0gKH5ETUFfRU5BQkxFKSkpCi0jZGVmaW5lIERNQV9JTlRTT0ZGKHJlZ3MpICAoKCgocmVncyktPmNvbmRfcmVnKSAmPSAofkRNQV9JTlRfRU5BQikpKQotI2RlZmluZSBETUFfSU5UU09OKHJlZ3MpICAgKCgoKHJlZ3MpLT5jb25kX3JlZykgfD0gKERNQV9JTlRfRU5BQikpKQotI2RlZmluZSBETUFfUFVOVEZJRk8ocmVncykgKCgoKHJlZ3MpLT5jb25kX3JlZykgfD0gRE1BX0ZJRk9fSU5WKSkKLSNkZWZpbmUgRE1BX1NFVFNUQVJUKHJlZ3MsIGFkZHIpICAoKCgocmVncyktPnN0X2FkZHIpID0gKGNoYXIgKikgYWRkcikpCi0jZGVmaW5lIERNQV9CRUdJTkRNQV9XKHJlZ3MpIFwKLSAgICAgICAgKCgoKHJlZ3MpLT5jb25kX3JlZyB8PSAoRE1BX1NUX1dSSVRFfERNQV9FTkFCTEV8RE1BX0lOVF9FTkFCKSkpKQotI2RlZmluZSBETUFfQkVHSU5ETUFfUihyZWdzKSBcCi0gICAgICAgICgoKChyZWdzKS0+Y29uZF9yZWcgfD0gKChETUFfRU5BQkxFfERNQV9JTlRfRU5BQikmKH5ETUFfU1RfV1JJVEUpKSkpKQotCi0vKiBGb3IgY2VydGFpbiBETUEgY2hpcHMsIHdlIG5lZWQgdG8gZGlzYWJsZSBpbnRzIHVwb24gaXJxIGVudHJ5Ci0gKiBhbmQgdHVybiB0aGVtIGJhY2sgb24gd2hlbiB3ZSBhcmUgZG9uZS4gIFNvIGluIGFueSBFU1AgaW50ZXJydXB0Ci0gKiBoYW5kbGVyIHlvdSAqbXVzdCogY2FsbCBETUFfSVJRX0VOVFJZIHVwb24gZW50cnkgYW5kIERNQV9JUlFfRVhJVAotICogd2hlbiBsZWF2aW5nIHRoZSBoYW5kbGVyLiAgWW91IGhhdmUgYmVlbiB3YXJuZWQuLi4KLSAqLwotI2RlZmluZSBETUFfSVJRX0VOVFJZKGRtYSwgZHJlZ3MpIGRvIHsgXAotICAgICAgICBpZihETUFfSVNCUk9LRU4oZG1hKSkgRE1BX0lOVFNPRkYoZHJlZ3MpOyBcCi0gICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIERNQV9JUlFfRVhJVChkbWEsIGRyZWdzKSBkbyB7IFwKLQlpZihETUFfSVNCUk9LRU4oZG1hKSkgRE1BX0lOVFNPTihkcmVncyk7IFwKLSAgIH0gd2hpbGUoMCkKLQotI2lmIDAJLyogUDMgdGhpcyBzdHVmZiBpcyBpbmxpbmUgaW4gbGVkbWEuYzppbml0X3Jlc3RhcnRfbGVkbWEoKSAqLwotLyogUGF1c2UgdW50aWwgY291bnRlciBydW5zIG91dCBvciBCSVQgaXNuJ3Qgc2V0IGluIHRoZSBETUEgY29uZGl0aW9uCi0gKiByZWdpc3Rlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX2RtYV9wYXVzZShzdHJ1Y3Qgc3BhcmNfZG1hX3JlZ2lzdGVycyAqcmVncywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBiaXQpCi17Ci0JaW50IGN0ciA9IDUwMDAwOyAgIC8qIExldCdzIGZpbmQgc29tZSBidWdzIDspICovCi0KLQkvKiBCdXN5IHdhaXQgdW50aWwgdGhlIGJpdCBpcyBub3Qgc2V0IGFueSBtb3JlICovCi0Jd2hpbGUoKHJlZ3MtPmNvbmRfcmVnJmJpdCkgJiYgKGN0cj4wKSkgewotCQljdHItLTsKLQkJX19kZWxheSg1KTsKLQl9Ci0KLQkvKiBDaGVjayBmb3IgYm9ndXMgb3V0Y29tZS4gKi8KLQlpZighY3RyKQotCQlwYW5pYygiRE1BIHRpbWVvdXQiKTsKLX0KLQotLyogUmVzZXQgdGhlIGZyaWdnaW4nIHRoaW5nLi4uICovCi0jZGVmaW5lIERNQV9SRVNFVChkbWEpIGRvIHsgXAotCXN0cnVjdCBzcGFyY19kbWFfcmVnaXN0ZXJzICpyZWdzID0gZG1hLT5yZWdzOyAgICAgICAgICAgICAgICAgICAgICBcCi0JLyogTGV0IHRoZSBjdXJyZW50IEZJRk8gZHJhaW4gaXRzZWxmICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlzcGFyY19kbWFfcGF1c2UocmVncywgKERNQV9GSUZPX0lTRFJBSU4pKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotCS8qIFJlc2V0IHRoZSBsb2dpYyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JcmVncy0+Y29uZF9yZWcgfD0gKERNQV9SU1RfU0NTSSk7ICAgICAvKiBhc3NlcnQgKi8gICAgICAgICAgICAgICAgIFwKLQlfX2RlbGF5KDQwMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxldCB0aGUgYml0cyBzZXQgOykgKi8gICAgXAotCXJlZ3MtPmNvbmRfcmVnICY9IH4oRE1BX1JTVF9TQ1NJKTsgICAgLyogZGUtYXNzZXJ0ICovICAgICAgICAgICAgICBcCi0Jc3BhcmNfZG1hX2VuYWJsZV9pbnRlcnJ1cHRzKHJlZ3MpOyAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLyAgIFwKLQkvKiBFbmFibGUgRkFTVCB0cmFuc2ZlcnMgaWYgYXZhaWxhYmxlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmKGRtYS0+cmV2aXNpb24+ZHZtYXJldjEpIHJlZ3MtPmNvbmRfcmVnIHw9IERNQV8zQ0xLUzsgICAgICAgICAgICBcCi0JZG1hLT5ydW5uaW5nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUoMCkKICNlbmRpZgotCi0jZGVmaW5lIGZvcl9lYWNoX2R2bWEoZG1hKSBcCi0gICAgICAgIGZvcigoZG1hKSA9IGRtYV9jaGFpbjsgKGRtYSk7IChkbWEpID0gKGRtYSktPm5leHQpCi0KLWV4dGVybiBpbnQgZ2V0X2RtYV9saXN0KGNoYXIgKik7Ci1leHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCwgX19jb25zdF9fIGNoYXIgKik7Ci1leHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQpOwotCi0vKiBGcm9tIFBDSSAqLwotCi0jaWZkZWYgQ09ORklHX1BDSQotZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKLSNlbHNlCi0jZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5CSgwKQotI2VuZGlmCi0KLS8qIFJvdXRpbmVzIGZvciBkYXRhIHRyYW5zZmVyIGJ1ZmZlcnMuICovCi1CVEZJWFVQREVGX0NBTEwoY2hhciAqLCBtbXVfbG9ja2FyZWEsIGNoYXIgKiwgdW5zaWduZWQgbG9uZykKLUJURklYVVBERUZfQ0FMTCh2b2lkLCAgIG1tdV91bmxvY2thcmVhLCBjaGFyICosIHVuc2lnbmVkIGxvbmcpCi0KLSNkZWZpbmUgbW11X2xvY2thcmVhKHZhZGRyLGxlbikgQlRGSVhVUF9DQUxMKG1tdV9sb2NrYXJlYSkodmFkZHIsbGVuKQotI2RlZmluZSBtbXVfdW5sb2NrYXJlYSh2YWRkcixsZW4pIEJURklYVVBfQ0FMTChtbXVfdW5sb2NrYXJlYSkodmFkZHIsbGVuKQotCi0vKiBUaGVzZSBhcmUgaW1wbGVtZW50YXRpb25zIGZvciBzYnVzX21hcF9zZy9zYnVzX3VubWFwX3NnLi4uIGNvbGxhcHNlIGxhdGVyICovCi1CVEZJWFVQREVGX0NBTEwoX191MzIsIG1tdV9nZXRfc2NzaV9vbmUsIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IHNidXNfYnVzICpzYnVzKQotQlRGSVhVUERFRl9DQUxMKHZvaWQsICBtbXVfZ2V0X3Njc2lfc2dsLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBzdHJ1Y3Qgc2J1c19idXMgKnNidXMpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgIG1tdV9yZWxlYXNlX3Njc2lfb25lLCBfX3UzMiwgdW5zaWduZWQgbG9uZywgc3RydWN0IHNidXNfYnVzICpzYnVzKQotQlRGSVhVUERFRl9DQUxMKHZvaWQsICBtbXVfcmVsZWFzZV9zY3NpX3NnbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgc3RydWN0IHNidXNfYnVzICpzYnVzKQotCi0jZGVmaW5lIG1tdV9nZXRfc2NzaV9vbmUodmFkZHIsbGVuLHNidXMpIEJURklYVVBfQ0FMTChtbXVfZ2V0X3Njc2lfb25lKSh2YWRkcixsZW4sc2J1cykKLSNkZWZpbmUgbW11X2dldF9zY3NpX3NnbChzZyxzeixzYnVzKSBCVEZJWFVQX0NBTEwobW11X2dldF9zY3NpX3NnbCkoc2csc3osc2J1cykKLSNkZWZpbmUgbW11X3JlbGVhc2Vfc2NzaV9vbmUodmFkZHIsbGVuLHNidXMpIEJURklYVVBfQ0FMTChtbXVfcmVsZWFzZV9zY3NpX29uZSkodmFkZHIsbGVuLHNidXMpCi0jZGVmaW5lIG1tdV9yZWxlYXNlX3Njc2lfc2dsKHNnLHN6LHNidXMpIEJURklYVVBfQ0FMTChtbXVfcmVsZWFzZV9zY3NpX3NnbCkoc2csc3osc2J1cykKLQotLyoKLSAqIG1tdV9tYXAvdW5tYXAgYXJlIHByb3ZpZGVkIGJ5IGlvbW11L2lvdW5pdDsgSW52YWxpZCB0byBjYWxsIG9uIElJZXAuCi0gKgotICogVGhlIG1tdV9tYXBfZG1hX2FyZWEgZXN0YWJsaXNoZXMgdHdvIG1hcHBpbmdzIGluIG9uZSBnby4KLSAqIFRoZXNlIG1hcHBpbmdzIHBvaW50IHRvIHBhZ2VzIG5vcm1hbGx5IG1hcHBlZCBhdCAndmEnIChsaW5lYXIgYWRkcmVzcykuCi0gKiBGaXJzdCBtYXBwaW5nIGlzIGZvciBDUFUgdmlzaWJsZSBhZGRyZXNzIGF0ICdhJywgdW5jYWNoZWQuCi0gKiBUaGlzIGlzIGFuIGFsaWFzLCBidXQgaXQgd29ya3MgYmVjYXVzZSBpdCBpcyBhbiB1bmNhY2hlZCBtYXBwaW5nLgotICogU2Vjb25kIG1hcHBpbmcgaXMgZm9yIGRldmljZSB2aXNpYmxlIGFkZHJlc3MsIG9yICJidXMiIGFkZHJlc3MuCi0gKiBUaGUgYnVzIGFkZHJlc3MgaXMgcmV0dXJuZWQgYXQgJypwYmEnLgotICoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIGRpc3RpbmN0LCBidXQgYXJlIGhhcmQgdG8gc3BsaXQuIE9uIHN1bjRjLAotICogYXQgbGVhc3QgZm9yIG5vdywgJ2EnIGlzIGVxdWFsIHRvIGJ1cyBhZGRyZXNzLCBhbmQgcmV0dXJlZCBpbiAqcGJhLgotICogT24gc3VuNG0sIHBhZ2UgYXR0cmlidXRlcyBkZXBlbmQgb24gdGhlIENQVSB0eXBlLCBzbyB3ZSBoYXZlIHRvCi0gKiBrbm93IGlmIHdlIGFyZSBtYXBwaW5nIFJBTSBvciBJL08sIHNvIGl0IGhhcyB0byBiZSBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50Ci0gKiB0byBhIHNlcGFyYXRlIG1hcHBpbmcgZnVuY3Rpb24gZm9yIENQVSB2aXNpYmxlIG1hcHBpbmdzLgotICovCi1CVEZJWFVQREVGX0NBTEwoaW50LCAgbW11X21hcF9kbWFfYXJlYSwgZG1hX2FkZHJfdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQgbGVuKQotQlRGSVhVUERFRl9DQUxMKHN0cnVjdCBwYWdlICosIG1tdV90cmFuc2xhdGVfZHZtYSwgdW5zaWduZWQgbG9uZyBidXNhKQotQlRGSVhVUERFRl9DQUxMKHZvaWQsICBtbXVfdW5tYXBfZG1hX2FyZWEsIHVuc2lnbmVkIGxvbmcgYnVzYSwgaW50IGxlbikKLQotI2RlZmluZSBtbXVfbWFwX2RtYV9hcmVhKHBiYSx2YSxhLGxlbikgQlRGSVhVUF9DQUxMKG1tdV9tYXBfZG1hX2FyZWEpKHBiYSx2YSxhLGxlbikKLSNkZWZpbmUgbW11X3VubWFwX2RtYV9hcmVhKGJhLGxlbikgQlRGSVhVUF9DQUxMKG1tdV91bm1hcF9kbWFfYXJlYSkoYmEsbGVuKQotI2RlZmluZSBtbXVfdHJhbnNsYXRlX2R2bWEoYmEpICAgICBCVEZJWFVQX0NBTEwobW11X3RyYW5zbGF0ZV9kdm1hKShiYSkKLQotI2VuZGlmIC8qICEoX0FTTV9TUEFSQ19ETUFfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5ZDZjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYV8zMi5oCkBAIC0wLDAgKzEsMjg4IEBACisvKiBpbmNsdWRlL2FzbS1zcGFyYy9kbWEuaAorICoKKyAqIENvcHlyaWdodCAxOTk1IChDKSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2lmbmRlZiBfQVNNX1NQQVJDX0RNQV9ICisjZGVmaW5lIF9BU01fU1BBUkNfRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vdmFjLW9wcy5oPiAgLyogZm9yIGludmFsaWRhdGUncywgZXRjLiAqLworI2luY2x1ZGUgPGFzbS9zYnVzLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKK3N0cnVjdCBwYWdlOworZXh0ZXJuIHNwaW5sb2NrX3QgIGRtYV9zcGluX2xvY2s7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGFpbV9kbWFfbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworfQorCisvKiBUaGVzZSBhcmUgaXJyZWxldmFudCBmb3IgU3BhcmMgRE1BLCBidXQgd2UgbGVhdmUgaXQgaW4gc28gdGhhdAorICogdGhpbmdzIGNhbiBjb21waWxlLgorICovCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgOAorI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgICh+MFVMKQorI2RlZmluZSBETUFfTU9ERV9SRUFEICAgIDEKKyNkZWZpbmUgRE1BX01PREVfV1JJVEUgICAyCisKKy8qIFVzZWZ1bCBjb25zdGFudHMgKi8KKyNkZWZpbmUgU0laRV8xNk1CICAgICAgKDE2KjEwMjQqMTAyNCkKKyNkZWZpbmUgU0laRV82NEsgICAgICAgKDY0KjEwMjQpCisKKy8qIFNCVVMgRE1BIGNvbnRyb2xsZXIgcmVnIG9mZnNldHMgKi8KKyNkZWZpbmUgRE1BX0NTUgkJMHgwMFVMCQkvKiBydyAgRE1BIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICAgIDB4MDAgICAqLworI2RlZmluZSBETUFfQUREUgkweDA0VUwJCS8qIHJ3ICBETUEgdHJhbnNmZXIgYWRkcmVzcyByZWdpc3RlciAgMHgwNCAgICovCisjZGVmaW5lIERNQV9DT1VOVAkweDA4VUwJCS8qIHJ3ICBETUEgdHJhbnNmZXIgY291bnQgcmVnaXN0ZXIgICAgMHgwOCAgICovCisjZGVmaW5lIERNQV9URVNUCTB4MGNVTAkJLyogcncgIERNQSB0ZXN0L2RlYnVnIHJlZ2lzdGVyICAgICAgICAweDBjICAgKi8KKworLyogRFZNQSBjaGlwIHJldmlzaW9ucyAqLworZW51bSBkdm1hX3JldiB7CisJZHZtYXJldjAsCisJZHZtYWVzYzEsCisJZHZtYXJldjEsCisJZHZtYXJldjIsCisJZHZtYXJldjMsCisJZHZtYXJldnBsdXMsCisJZHZtYWhtZQorfTsKKworI2RlZmluZSBETUFfSEFTQ09VTlQocmV2KSAgKChyZXYpPT1kdm1hZXNjMSkKKworLyogTGludXggRE1BIGluZm9ybWF0aW9uIHN0cnVjdHVyZSwgZmlsbGVkIGR1cmluZyBwcm9iZS4gKi8KK3N0cnVjdCBzYnVzX2RtYSB7CisJc3RydWN0IHNidXNfZG1hICpuZXh0OworCXN0cnVjdCBzYnVzX2RldiAqc2RldjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwkvKiBTdGF0dXMsIG1pc2MgaW5mbyAqLworCWludCBub2RlOyAgICAgICAgICAgICAgICAvKiBQcm9tIG5vZGUgZm9yIHRoaXMgRE1BIGRldmljZSAqLworCWludCBydW5uaW5nOyAgICAgICAgICAgICAvKiBBcmUgd2UgZG9pbmcgRE1BIG5vdz8gKi8KKwlpbnQgYWxsb2NhdGVkOyAgICAgICAgICAgLyogQXJlIHdlICJvd25lZCIgYnkgYW55b25lIHlldD8gKi8KKworCS8qIFRyYW5zZmVyIGluZm9ybWF0aW9uLiAqLworCXVuc2lnbmVkIGxvbmcgYWRkcjsgICAgICAvKiBTdGFydCBhZGRyZXNzIG9mIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwlpbnQgbmJ5dGVzOyAgICAgICAgICAgICAgLyogU2l6ZSBvZiBjdXJyZW50IHRyYW5zZmVyICovCisJaW50IHJlYWxieXRlczsgICAgICAgICAgIC8qIEZvciBzcGxpdHRpbmcgdXAgbGFyZ2UgdHJhbnNmZXJzLCBldGMuICovCisKKwkvKiBETUEgcmV2aXNpb24gKi8KKwllbnVtIGR2bWFfcmV2IHJldmlzaW9uOworfTsKKworZXh0ZXJuIHN0cnVjdCBzYnVzX2RtYSAqZG1hX2NoYWluOworCisvKiBCcm9rZW4gaGFyZHdhcmUuLi4gKi8KKyNpZmRlZiBDT05GSUdfU1VONAorLyogSGF2ZSB0byBzb3J0IHRoaXMgb3V0LiBEb2VzIHJldjAgd29yayBmaW5lIG9uIHN1bjRbY21kXSB3aXRob3V0IGlzYnJva2VuPworICogT3IgaXMgcmV2MCBwcmVzZW50IG9ubHkgb24gc3VuNCBib3hlcz8gLWpqICovCisjZGVmaW5lIERNQV9JU0JST0tFTihkbWEpICAgICgoZG1hKS0+cmV2aXNpb24gPT0gZHZtYXJldjAgfHwgKGRtYSktPnJldmlzaW9uID09IGR2bWFyZXYxKQorI2Vsc2UKKyNkZWZpbmUgRE1BX0lTQlJPS0VOKGRtYSkgICAgKChkbWEpLT5yZXZpc2lvbiA9PSBkdm1hcmV2MSkKKyNlbmRpZgorI2RlZmluZSBETUFfSVNFU0MxKGRtYSkgICAgICAoKGRtYSktPnJldmlzaW9uID09IGR2bWFlc2MxKQorCisvKiBNYWluIHJvdXRpbmVzIGluIGRtYS5jICovCitleHRlcm4gdm9pZCBkdm1hX2luaXQoc3RydWN0IHNidXNfYnVzICopOworCisvKiBGaWVsZHMgaW4gdGhlIGNvbmRfcmVnIHJlZ2lzdGVyICovCisvKiBGaXJzdCwgdGhlIHZlcnNpb24gaWRlbnRpZmljYXRpb24gYml0cyAqLworI2RlZmluZSBETUFfREVWSUNFX0lEICAgIDB4ZjAwMDAwMDAgICAgICAgIC8qIERldmljZSBpZGVudGlmaWNhdGlvbiBiaXRzICovCisjZGVmaW5lIERNQV9WRVJTMCAgICAgICAgMHgwMDAwMDAwMCAgICAgICAgLyogU3VucmF5IERNQSB2ZXJzaW9uICovCisjZGVmaW5lIERNQV9FU0NWMSAgICAgICAgMHg0MDAwMDAwMCAgICAgICAgLyogRE1BIEVTQyBWZXJzaW9uIDEgKi8KKyNkZWZpbmUgRE1BX1ZFUlMxICAgICAgICAweDgwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDEgKi8KKyNkZWZpbmUgRE1BX1ZFUlMyICAgICAgICAweGEwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDIgKi8KKyNkZWZpbmUgRE1BX1ZFUkhNRSAgICAgICAweGIwMDAwMDAwICAgICAgICAvKiBETUEgaG1lIGdhdGUgYXJyYXkgKi8KKyNkZWZpbmUgRE1BX1ZFUlNQTFVTICAgICAweDkwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDEgUExVUyAqLworCisjZGVmaW5lIERNQV9ITkRMX0lOVFIgICAgMHgwMDAwMDAwMSAgICAgICAgLyogQW4gSVJRIG5lZWRzIHRvIGJlIGhhbmRsZWQgKi8KKyNkZWZpbmUgRE1BX0hORExfRVJST1IgICAweDAwMDAwMDAyICAgICAgICAvKiBXZSBuZWVkIHRvIHRha2UgYW4gZXJyb3IgKi8KKyNkZWZpbmUgRE1BX0ZJRk9fSVNEUkFJTiAweDAwMDAwMDBjICAgICAgICAvKiBUaGUgRE1BIEZJRk8gaXMgZHJhaW5pbmcgKi8KKyNkZWZpbmUgRE1BX0lOVF9FTkFCICAgICAweDAwMDAwMDEwICAgICAgICAvKiBUdXJuIG9uIGludGVycnVwdHMgKi8KKyNkZWZpbmUgRE1BX0ZJRk9fSU5WICAgICAweDAwMDAwMDIwICAgICAgICAvKiBJbnZhbGlkYXRlIHRoZSBGSUZPICovCisjZGVmaW5lIERNQV9BQ0NfU1pfRVJSICAgMHgwMDAwMDA0MCAgICAgICAgLyogVGhlIGFjY2VzcyBzaXplIHdhcyBiYWQgKi8KKyNkZWZpbmUgRE1BX0ZJRk9fU1REUkFJTiAweDAwMDAwMDQwICAgICAgICAvKiBETUFfVkVSUzEgRHJhaW4gdGhlIEZJRk8gKi8KKyNkZWZpbmUgRE1BX1JTVF9TQ1NJICAgICAweDAwMDAwMDgwICAgICAgICAvKiBSZXNldCB0aGUgU0NTSSBjb250cm9sbGVyICovCisjZGVmaW5lIERNQV9SU1RfRU5FVCAgICAgRE1BX1JTVF9TQ1NJICAgICAgLyogUmVzZXQgdGhlIEVORVQgY29udHJvbGxlciAqLworI2RlZmluZSBETUFfUlNUX0JQUCAgICAgIERNQV9SU1RfU0NTSSAgICAgIC8qIFJlc2V0IHRoZSBCUFAgY29udHJvbGxlciAqLworI2RlZmluZSBETUFfU1RfV1JJVEUgICAgIDB4MDAwMDAxMDAgICAgICAgIC8qIHdyaXRlIGZyb20gZGV2aWNlIHRvIG1lbW9yeSAqLworI2RlZmluZSBETUFfRU5BQkxFICAgICAgIDB4MDAwMDAyMDAgICAgICAgIC8qIEZpcmUgdXAgRE1BLCBoYW5kbGUgcmVxdWVzdHMgKi8KKyNkZWZpbmUgRE1BX1BFTkRfUkVBRCAgICAweDAwMDAwNDAwICAgICAgICAvKiBETUFfVkVSUzEvMC9QTFVTIFBlbmRpbmcgUmVhZCAqLworI2RlZmluZSBETUFfRVNDX0JVUlNUICAgIDB4MDAwMDA4MDAgICAgICAgIC8qIDE9MTZieXRlIDA9MzJieXRlICovCisjZGVmaW5lIERNQV9SRUFEX0FIRUFEICAgMHgwMDAwMTgwMCAgICAgICAgLyogRE1BIHJlYWQgYWhlYWQgcGFydGlhbCBsb25nd29yZCAqLworI2RlZmluZSBETUFfRFNCTF9SRF9EUk4gIDB4MDAwMDEwMDAgICAgICAgIC8qIE5vIEVDIGRyYWluIG9uIHNsYXZlIHJlYWRzICovCisjZGVmaW5lIERNQV9CQ05UX0VOQUIgICAgMHgwMDAwMjAwMCAgICAgICAgLyogSWYgb24sIHVzZSB0aGUgYnl0ZSBjb3VudGVyICovCisjZGVmaW5lIERNQV9URVJNX0NOVFIgICAgMHgwMDAwNDAwMCAgICAgICAgLyogVGVybWluYWwgY291bnRlciAqLworI2RlZmluZSBETUFfU0NTSV9TQlVTNjQgIDB4MDAwMDgwMDAgICAgICAgIC8qIEhNRTogRW5hYmxlIDY0LWJpdCBTQlVTIG1vZGUuICovCisjZGVmaW5lIERNQV9DU1JfRElTQUIgICAgMHgwMDAxMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIGNzciAqLworI2RlZmluZSBETUFfU0NTSV9ESVNBQiAgIDB4MDAwMjAwMDAgICAgICAgIC8qIE5vIEZJRk8gZHJhaW5zIGR1cmluZyByZWcgKi8KKyNkZWZpbmUgRE1BX0RTQkxfV1JfSU5WICAweDAwMDIwMDAwICAgICAgICAvKiBObyBFQyBpbnZhbC4gb24gc2xhdmUgd3JpdGVzICovCisjZGVmaW5lIERNQV9BRERfRU5BQkxFICAgMHgwMDA0MDAwMCAgICAgICAgLyogU3BlY2lhbCBFU0MgRFZNQSBvcHRpbWl6YXRpb24gKi8KKyNkZWZpbmUgRE1BX0VfQlVSU1RTCSAweDAwMGMwMDAwCSAgIC8qIEVORVQ6IFNCVVMgci93IGJ1cnN0IG1hc2sgKi8KKyNkZWZpbmUgRE1BX0VfQlVSU1QzMgkgMHgwMDA0MDAwMAkgICAvKiBFTkVUOiBTQlVTIDMyIGJ5dGUgci93IGJ1cnN0ICovCisjZGVmaW5lIERNQV9FX0JVUlNUMTYJIDB4MDAwMDAwMDAJICAgLyogRU5FVDogU0JVUyAxNiBieXRlIHIvdyBidXJzdCAqLworI2RlZmluZSBETUFfQlJTVF9TWiAgICAgIDB4MDAwYzAwMDAgICAgICAgIC8qIFNDU0k6IFNCVVMgci93IGJ1cnN0IHNpemUgKi8KKyNkZWZpbmUgRE1BX0JSU1Q2NCAgICAgICAweDAwMDgwMDAwICAgICAgICAvKiBTQ1NJOiA2NGJ5dGUgYnVyc3RzIChITUUgb24gVWx0cmFTcGFyYyBvbmx5KSAqLworI2RlZmluZSBETUFfQlJTVDMyICAgICAgIDB4MDAwNDAwMDAgICAgICAgIC8qIFNDU0kvQlBQOiAzMmJ5dGUgYnVyc3RzICovCisjZGVmaW5lIERNQV9CUlNUMTYgICAgICAgMHgwMDAwMDAwMCAgICAgICAgLyogU0NTSS9CUFA6IDE2Ynl0ZSBidXJzdHMgKi8KKyNkZWZpbmUgRE1BX0JSU1QwICAgICAgICAweDAwMDgwMDAwICAgICAgICAvKiBTQ1NJOiBubyBidXJzdHMgKG5vbi1ITUUgZ2F0ZSBhcnJheXMpICovCisjZGVmaW5lIERNQV9BRERSX0RJU0FCICAgMHgwMDEwMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIGFkZHIgKi8KKyNkZWZpbmUgRE1BXzJDTEtTICAgICAgICAweDAwMjAwMDAwICAgICAgICAvKiBFYWNoIHRyYW5zZmVyID0gMiBjbG9jayB0aWNrcyAqLworI2RlZmluZSBETUFfM0NMS1MgICAgICAgIDB4MDA0MDAwMDAgICAgICAgIC8qIEVhY2ggdHJhbnNmZXIgPSAzIGNsb2NrIHRpY2tzICovCisjZGVmaW5lIERNQV9FTl9FTkVUQVVJICAgRE1BXzNDTEtTICAgICAgICAgLyogUHV0IGxhbmNlIGludG8gQVVJLWNhYmxlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX0NOVFJfRElTQUIgICAweDAwODAwMDAwICAgICAgICAvKiBObyBJUlEgd2hlbiBETUFfVEVSTV9DTlRSIHNldCAqLworI2RlZmluZSBETUFfQVVUT19OQUREUiAgIDB4MDEwMDAwMDAgICAgICAgIC8qIFVzZSAiYXV0byBueHQgYWRkciIgZmVhdHVyZSAqLworI2RlZmluZSBETUFfU0NTSV9PTiAgICAgIDB4MDIwMDAwMDAgICAgICAgIC8qIEVuYWJsZSBTQ1NJIGRtYSAqLworI2RlZmluZSBETUFfQlBQX09OICAgICAgIERNQV9TQ1NJX09OICAgICAgIC8qIEVuYWJsZSBCUFAgZG1hICovCisjZGVmaW5lIERNQV9QQVJJVFlfT0ZGICAgMHgwMjAwMDAwMCAgICAgICAgLyogSE1FOiBkaXNhYmxlIHBhcml0eSBjaGVja2luZyAqLworI2RlZmluZSBETUFfTE9BREVEX0FERFIgIDB4MDQwMDAwMDAgICAgICAgIC8qIEFkZHJlc3MgaGFzIGJlZW4gbG9hZGVkICovCisjZGVmaW5lIERNQV9MT0FERURfTkFERFIgMHgwODAwMDAwMCAgICAgICAgLyogTmV4dCBhZGRyZXNzIGhhcyBiZWVuIGxvYWRlZCAqLworI2RlZmluZSBETUFfUkVTRVRfRkFTMzY2IDB4MDgwMDAwMDAgICAgICAgIC8qIEhNRTogQXNzZXJ0IFJFU0VUIHRvIEZBUzM2NiAqLworCisvKiBWYWx1ZXMgZGVzY3JpYmluZyB0aGUgYnVyc3Qtc2l6ZSBwcm9wZXJ0eSBmcm9tIHRoZSBQUk9NICovCisjZGVmaW5lIERNQV9CVVJTVDEgICAgICAgMHgwMQorI2RlZmluZSBETUFfQlVSU1QyICAgICAgIDB4MDIKKyNkZWZpbmUgRE1BX0JVUlNUNCAgICAgICAweDA0CisjZGVmaW5lIERNQV9CVVJTVDggICAgICAgMHgwOAorI2RlZmluZSBETUFfQlVSU1QxNiAgICAgIDB4MTAKKyNkZWZpbmUgRE1BX0JVUlNUMzIgICAgICAweDIwCisjZGVmaW5lIERNQV9CVVJTVDY0ICAgICAgMHg0MAorI2RlZmluZSBETUFfQlVSU1RCSVRTICAgIDB4N2YKKworLyogRGV0ZXJtaW5lIGhpZ2hlc3QgcG9zc2libGUgZmluYWwgdHJhbnNmZXIgYWRkcmVzcyBnaXZlbiBhIGJhc2UgKi8KKyNkZWZpbmUgRE1BX01BWEVORChhZGRyKSAoMHgwMTAwMDAwMFVMLSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKSYweDAwZmZmZmZmVUwpKQorCisvKiBZZXMsIEkgaGFjayBhIGxvdCBvZiBlbGlzcCBpbiBteSBzcGFyZSB0aW1lLi4uICovCisjZGVmaW5lIERNQV9FUlJPUl9QKHJlZ3MpICAoKCgocmVncyktPmNvbmRfcmVnKSAmIERNQV9ITkRMX0VSUk9SKSkKKyNkZWZpbmUgRE1BX0lSUV9QKHJlZ3MpICAgICgoKChyZWdzKS0+Y29uZF9yZWcpICYgKERNQV9ITkRMX0lOVFIgfCBETUFfSE5ETF9FUlJPUikpKQorI2RlZmluZSBETUFfV1JJVEVfUChyZWdzKSAgKCgoKHJlZ3MpLT5jb25kX3JlZykgJiBETUFfU1RfV1JJVEUpKQorI2RlZmluZSBETUFfT0ZGKHJlZ3MpICAgICAgKCgoKHJlZ3MpLT5jb25kX3JlZykgJj0gKH5ETUFfRU5BQkxFKSkpCisjZGVmaW5lIERNQV9JTlRTT0ZGKHJlZ3MpICAoKCgocmVncyktPmNvbmRfcmVnKSAmPSAofkRNQV9JTlRfRU5BQikpKQorI2RlZmluZSBETUFfSU5UU09OKHJlZ3MpICAgKCgoKHJlZ3MpLT5jb25kX3JlZykgfD0gKERNQV9JTlRfRU5BQikpKQorI2RlZmluZSBETUFfUFVOVEZJRk8ocmVncykgKCgoKHJlZ3MpLT5jb25kX3JlZykgfD0gRE1BX0ZJRk9fSU5WKSkKKyNkZWZpbmUgRE1BX1NFVFNUQVJUKHJlZ3MsIGFkZHIpICAoKCgocmVncyktPnN0X2FkZHIpID0gKGNoYXIgKikgYWRkcikpCisjZGVmaW5lIERNQV9CRUdJTkRNQV9XKHJlZ3MpIFwKKyAgICAgICAgKCgoKHJlZ3MpLT5jb25kX3JlZyB8PSAoRE1BX1NUX1dSSVRFfERNQV9FTkFCTEV8RE1BX0lOVF9FTkFCKSkpKQorI2RlZmluZSBETUFfQkVHSU5ETUFfUihyZWdzKSBcCisgICAgICAgICgoKChyZWdzKS0+Y29uZF9yZWcgfD0gKChETUFfRU5BQkxFfERNQV9JTlRfRU5BQikmKH5ETUFfU1RfV1JJVEUpKSkpKQorCisvKiBGb3IgY2VydGFpbiBETUEgY2hpcHMsIHdlIG5lZWQgdG8gZGlzYWJsZSBpbnRzIHVwb24gaXJxIGVudHJ5CisgKiBhbmQgdHVybiB0aGVtIGJhY2sgb24gd2hlbiB3ZSBhcmUgZG9uZS4gIFNvIGluIGFueSBFU1AgaW50ZXJydXB0CisgKiBoYW5kbGVyIHlvdSAqbXVzdCogY2FsbCBETUFfSVJRX0VOVFJZIHVwb24gZW50cnkgYW5kIERNQV9JUlFfRVhJVAorICogd2hlbiBsZWF2aW5nIHRoZSBoYW5kbGVyLiAgWW91IGhhdmUgYmVlbiB3YXJuZWQuLi4KKyAqLworI2RlZmluZSBETUFfSVJRX0VOVFJZKGRtYSwgZHJlZ3MpIGRvIHsgXAorICAgICAgICBpZihETUFfSVNCUk9LRU4oZG1hKSkgRE1BX0lOVFNPRkYoZHJlZ3MpOyBcCisgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIERNQV9JUlFfRVhJVChkbWEsIGRyZWdzKSBkbyB7IFwKKwlpZihETUFfSVNCUk9LRU4oZG1hKSkgRE1BX0lOVFNPTihkcmVncyk7IFwKKyAgIH0gd2hpbGUoMCkKKworI2lmIDAJLyogUDMgdGhpcyBzdHVmZiBpcyBpbmxpbmUgaW4gbGVkbWEuYzppbml0X3Jlc3RhcnRfbGVkbWEoKSAqLworLyogUGF1c2UgdW50aWwgY291bnRlciBydW5zIG91dCBvciBCSVQgaXNuJ3Qgc2V0IGluIHRoZSBETUEgY29uZGl0aW9uCisgKiByZWdpc3Rlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX2RtYV9wYXVzZShzdHJ1Y3Qgc3BhcmNfZG1hX3JlZ2lzdGVycyAqcmVncywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBiaXQpCit7CisJaW50IGN0ciA9IDUwMDAwOyAgIC8qIExldCdzIGZpbmQgc29tZSBidWdzIDspICovCisKKwkvKiBCdXN5IHdhaXQgdW50aWwgdGhlIGJpdCBpcyBub3Qgc2V0IGFueSBtb3JlICovCisJd2hpbGUoKHJlZ3MtPmNvbmRfcmVnJmJpdCkgJiYgKGN0cj4wKSkgeworCQljdHItLTsKKwkJX19kZWxheSg1KTsKKwl9CisKKwkvKiBDaGVjayBmb3IgYm9ndXMgb3V0Y29tZS4gKi8KKwlpZighY3RyKQorCQlwYW5pYygiRE1BIHRpbWVvdXQiKTsKK30KKworLyogUmVzZXQgdGhlIGZyaWdnaW4nIHRoaW5nLi4uICovCisjZGVmaW5lIERNQV9SRVNFVChkbWEpIGRvIHsgXAorCXN0cnVjdCBzcGFyY19kbWFfcmVnaXN0ZXJzICpyZWdzID0gZG1hLT5yZWdzOyAgICAgICAgICAgICAgICAgICAgICBcCisJLyogTGV0IHRoZSBjdXJyZW50IEZJRk8gZHJhaW4gaXRzZWxmICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzcGFyY19kbWFfcGF1c2UocmVncywgKERNQV9GSUZPX0lTRFJBSU4pKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS8qIFJlc2V0IHRoZSBsb2dpYyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcmVncy0+Y29uZF9yZWcgfD0gKERNQV9SU1RfU0NTSSk7ICAgICAvKiBhc3NlcnQgKi8gICAgICAgICAgICAgICAgIFwKKwlfX2RlbGF5KDQwMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxldCB0aGUgYml0cyBzZXQgOykgKi8gICAgXAorCXJlZ3MtPmNvbmRfcmVnICY9IH4oRE1BX1JTVF9TQ1NJKTsgICAgLyogZGUtYXNzZXJ0ICovICAgICAgICAgICAgICBcCisJc3BhcmNfZG1hX2VuYWJsZV9pbnRlcnJ1cHRzKHJlZ3MpOyAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLyAgIFwKKwkvKiBFbmFibGUgRkFTVCB0cmFuc2ZlcnMgaWYgYXZhaWxhYmxlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmKGRtYS0+cmV2aXNpb24+ZHZtYXJldjEpIHJlZ3MtPmNvbmRfcmVnIHw9IERNQV8zQ0xLUzsgICAgICAgICAgICBcCisJZG1hLT5ydW5uaW5nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIGZvcl9lYWNoX2R2bWEoZG1hKSBcCisgICAgICAgIGZvcigoZG1hKSA9IGRtYV9jaGFpbjsgKGRtYSk7IChkbWEpID0gKGRtYSktPm5leHQpCisKK2V4dGVybiBpbnQgZ2V0X2RtYV9saXN0KGNoYXIgKik7CitleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCwgX19jb25zdF9fIGNoYXIgKik7CitleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQpOworCisvKiBGcm9tIFBDSSAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5CSgwKQorI2VuZGlmCisKKy8qIFJvdXRpbmVzIGZvciBkYXRhIHRyYW5zZmVyIGJ1ZmZlcnMuICovCitCVEZJWFVQREVGX0NBTEwoY2hhciAqLCBtbXVfbG9ja2FyZWEsIGNoYXIgKiwgdW5zaWduZWQgbG9uZykKK0JURklYVVBERUZfQ0FMTCh2b2lkLCAgIG1tdV91bmxvY2thcmVhLCBjaGFyICosIHVuc2lnbmVkIGxvbmcpCisKKyNkZWZpbmUgbW11X2xvY2thcmVhKHZhZGRyLGxlbikgQlRGSVhVUF9DQUxMKG1tdV9sb2NrYXJlYSkodmFkZHIsbGVuKQorI2RlZmluZSBtbXVfdW5sb2NrYXJlYSh2YWRkcixsZW4pIEJURklYVVBfQ0FMTChtbXVfdW5sb2NrYXJlYSkodmFkZHIsbGVuKQorCisvKiBUaGVzZSBhcmUgaW1wbGVtZW50YXRpb25zIGZvciBzYnVzX21hcF9zZy9zYnVzX3VubWFwX3NnLi4uIGNvbGxhcHNlIGxhdGVyICovCitCVEZJWFVQREVGX0NBTEwoX191MzIsIG1tdV9nZXRfc2NzaV9vbmUsIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IHNidXNfYnVzICpzYnVzKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsICBtbXVfZ2V0X3Njc2lfc2dsLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBzdHJ1Y3Qgc2J1c19idXMgKnNidXMpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgIG1tdV9yZWxlYXNlX3Njc2lfb25lLCBfX3UzMiwgdW5zaWduZWQgbG9uZywgc3RydWN0IHNidXNfYnVzICpzYnVzKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsICBtbXVfcmVsZWFzZV9zY3NpX3NnbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgc3RydWN0IHNidXNfYnVzICpzYnVzKQorCisjZGVmaW5lIG1tdV9nZXRfc2NzaV9vbmUodmFkZHIsbGVuLHNidXMpIEJURklYVVBfQ0FMTChtbXVfZ2V0X3Njc2lfb25lKSh2YWRkcixsZW4sc2J1cykKKyNkZWZpbmUgbW11X2dldF9zY3NpX3NnbChzZyxzeixzYnVzKSBCVEZJWFVQX0NBTEwobW11X2dldF9zY3NpX3NnbCkoc2csc3osc2J1cykKKyNkZWZpbmUgbW11X3JlbGVhc2Vfc2NzaV9vbmUodmFkZHIsbGVuLHNidXMpIEJURklYVVBfQ0FMTChtbXVfcmVsZWFzZV9zY3NpX29uZSkodmFkZHIsbGVuLHNidXMpCisjZGVmaW5lIG1tdV9yZWxlYXNlX3Njc2lfc2dsKHNnLHN6LHNidXMpIEJURklYVVBfQ0FMTChtbXVfcmVsZWFzZV9zY3NpX3NnbCkoc2csc3osc2J1cykKKworLyoKKyAqIG1tdV9tYXAvdW5tYXAgYXJlIHByb3ZpZGVkIGJ5IGlvbW11L2lvdW5pdDsgSW52YWxpZCB0byBjYWxsIG9uIElJZXAuCisgKgorICogVGhlIG1tdV9tYXBfZG1hX2FyZWEgZXN0YWJsaXNoZXMgdHdvIG1hcHBpbmdzIGluIG9uZSBnby4KKyAqIFRoZXNlIG1hcHBpbmdzIHBvaW50IHRvIHBhZ2VzIG5vcm1hbGx5IG1hcHBlZCBhdCAndmEnIChsaW5lYXIgYWRkcmVzcykuCisgKiBGaXJzdCBtYXBwaW5nIGlzIGZvciBDUFUgdmlzaWJsZSBhZGRyZXNzIGF0ICdhJywgdW5jYWNoZWQuCisgKiBUaGlzIGlzIGFuIGFsaWFzLCBidXQgaXQgd29ya3MgYmVjYXVzZSBpdCBpcyBhbiB1bmNhY2hlZCBtYXBwaW5nLgorICogU2Vjb25kIG1hcHBpbmcgaXMgZm9yIGRldmljZSB2aXNpYmxlIGFkZHJlc3MsIG9yICJidXMiIGFkZHJlc3MuCisgKiBUaGUgYnVzIGFkZHJlc3MgaXMgcmV0dXJuZWQgYXQgJypwYmEnLgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIGRpc3RpbmN0LCBidXQgYXJlIGhhcmQgdG8gc3BsaXQuIE9uIHN1bjRjLAorICogYXQgbGVhc3QgZm9yIG5vdywgJ2EnIGlzIGVxdWFsIHRvIGJ1cyBhZGRyZXNzLCBhbmQgcmV0dXJlZCBpbiAqcGJhLgorICogT24gc3VuNG0sIHBhZ2UgYXR0cmlidXRlcyBkZXBlbmQgb24gdGhlIENQVSB0eXBlLCBzbyB3ZSBoYXZlIHRvCisgKiBrbm93IGlmIHdlIGFyZSBtYXBwaW5nIFJBTSBvciBJL08sIHNvIGl0IGhhcyB0byBiZSBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50CisgKiB0byBhIHNlcGFyYXRlIG1hcHBpbmcgZnVuY3Rpb24gZm9yIENQVSB2aXNpYmxlIG1hcHBpbmdzLgorICovCitCVEZJWFVQREVGX0NBTEwoaW50LCAgbW11X21hcF9kbWFfYXJlYSwgZG1hX2FkZHJfdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQgbGVuKQorQlRGSVhVUERFRl9DQUxMKHN0cnVjdCBwYWdlICosIG1tdV90cmFuc2xhdGVfZHZtYSwgdW5zaWduZWQgbG9uZyBidXNhKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsICBtbXVfdW5tYXBfZG1hX2FyZWEsIHVuc2lnbmVkIGxvbmcgYnVzYSwgaW50IGxlbikKKworI2RlZmluZSBtbXVfbWFwX2RtYV9hcmVhKHBiYSx2YSxhLGxlbikgQlRGSVhVUF9DQUxMKG1tdV9tYXBfZG1hX2FyZWEpKHBiYSx2YSxhLGxlbikKKyNkZWZpbmUgbW11X3VubWFwX2RtYV9hcmVhKGJhLGxlbikgQlRGSVhVUF9DQUxMKG1tdV91bm1hcF9kbWFfYXJlYSkoYmEsbGVuKQorI2RlZmluZSBtbXVfdHJhbnNsYXRlX2R2bWEoYmEpICAgICBCVEZJWFVQX0NBTEwobW11X3RyYW5zbGF0ZV9kdm1hKShiYSkKKworI2VuZGlmIC8qICEoX0FTTV9TUEFSQ19ETUFfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYV82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0YzAyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYV82NC5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEuaAorICoKKyAqIENvcHlyaWdodCAxOTk2IChDKSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfQVNNX1NQQVJDNjRfRE1BX0gKKyNkZWZpbmUgX0FTTV9TUEFSQzY0X0RNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vc2J1cy5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorCisvKiBUaGVzZSBhcmUgaXJyZWxldmFudCBmb3IgU3BhcmMgRE1BLCBidXQgd2UgbGVhdmUgaXQgaW4gc28gdGhhdAorICogdGhpbmdzIGNhbiBjb21waWxlLgorICovCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgOAorI2RlZmluZSBETUFfTU9ERV9SRUFEICAgIDEKKyNkZWZpbmUgRE1BX01PREVfV1JJVEUgICAyCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgKH4wVUwpCisKKy8qIFVzZWZ1bCBjb25zdGFudHMgKi8KKyNkZWZpbmUgU0laRV8xNk1CICAgICAgKDE2KjEwMjQqMTAyNCkKKyNkZWZpbmUgU0laRV82NEsgICAgICAgKDY0KjEwMjQpCisKKy8qIFNCVVMgRE1BIGNvbnRyb2xsZXIgcmVnIG9mZnNldHMgKi8KKyNkZWZpbmUgRE1BX0NTUgkJMHgwMFVMCQkvKiBydyAgRE1BIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICAgIDB4MDAgICAqLworI2RlZmluZSBETUFfQUREUgkweDA0VUwJCS8qIHJ3ICBETUEgdHJhbnNmZXIgYWRkcmVzcyByZWdpc3RlciAgMHgwNCAgICovCisjZGVmaW5lIERNQV9DT1VOVAkweDA4VUwJCS8qIHJ3ICBETUEgdHJhbnNmZXIgY291bnQgcmVnaXN0ZXIgICAgMHgwOCAgICovCisjZGVmaW5lIERNQV9URVNUCTB4MGNVTAkJLyogcncgIERNQSB0ZXN0L2RlYnVnIHJlZ2lzdGVyICAgICAgICAweDBjICAgKi8KKworLyogRFZNQSBjaGlwIHJldmlzaW9ucyAqLworZW51bSBkdm1hX3JldiB7CisJZHZtYXJldjAsCisJZHZtYWVzYzEsCisJZHZtYXJldjEsCisJZHZtYXJldjIsCisJZHZtYXJldjMsCisJZHZtYXJldnBsdXMsCisJZHZtYWhtZQorfTsKKworI2RlZmluZSBETUFfSEFTQ09VTlQocmV2KSAgKChyZXYpPT1kdm1hZXNjMSkKKworLyogTGludXggRE1BIGluZm9ybWF0aW9uIHN0cnVjdHVyZSwgZmlsbGVkIGR1cmluZyBwcm9iZS4gKi8KK3N0cnVjdCBzYnVzX2RtYSB7CisJc3RydWN0IHNidXNfZG1hICpuZXh0OworCXN0cnVjdCBzYnVzX2RldiAqc2RldjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwkvKiBTdGF0dXMsIG1pc2MgaW5mbyAqLworCWludCBub2RlOyAgICAgICAgICAgICAgICAvKiBQcm9tIG5vZGUgZm9yIHRoaXMgRE1BIGRldmljZSAqLworCWludCBydW5uaW5nOyAgICAgICAgICAgICAvKiBBcmUgd2UgZG9pbmcgRE1BIG5vdz8gKi8KKwlpbnQgYWxsb2NhdGVkOyAgICAgICAgICAgLyogQXJlIHdlICJvd25lZCIgYnkgYW55b25lIHlldD8gKi8KKworCS8qIFRyYW5zZmVyIGluZm9ybWF0aW9uLiAqLworCXUzMiBhZGRyOyAgICAgICAgICAgICAgICAvKiBTdGFydCBhZGRyZXNzIG9mIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwlpbnQgbmJ5dGVzOyAgICAgICAgICAgICAgLyogU2l6ZSBvZiBjdXJyZW50IHRyYW5zZmVyICovCisJaW50IHJlYWxieXRlczsgICAgICAgICAgIC8qIEZvciBzcGxpdHRpbmcgdXAgbGFyZ2UgdHJhbnNmZXJzLCBldGMuICovCisKKwkvKiBETUEgcmV2aXNpb24gKi8KKwllbnVtIGR2bWFfcmV2IHJldmlzaW9uOworfTsKKworZXh0ZXJuIHN0cnVjdCBzYnVzX2RtYSAqZG1hX2NoYWluOworCisvKiBCcm9rZW4gaGFyZHdhcmUuLi4gKi8KKyNkZWZpbmUgRE1BX0lTQlJPS0VOKGRtYSkgICAgKChkbWEpLT5yZXZpc2lvbiA9PSBkdm1hcmV2MSkKKyNkZWZpbmUgRE1BX0lTRVNDMShkbWEpICAgICAgKChkbWEpLT5yZXZpc2lvbiA9PSBkdm1hZXNjMSkKKworLyogTWFpbiByb3V0aW5lcyBpbiBkbWEuYyAqLworZXh0ZXJuIHZvaWQgZHZtYV9pbml0KHN0cnVjdCBzYnVzX2J1cyAqKTsKKworLyogRmllbGRzIGluIHRoZSBjb25kX3JlZyByZWdpc3RlciAqLworLyogRmlyc3QsIHRoZSB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIGJpdHMgKi8KKyNkZWZpbmUgRE1BX0RFVklDRV9JRCAgICAweGYwMDAwMDAwICAgICAgICAvKiBEZXZpY2UgaWRlbnRpZmljYXRpb24gYml0cyAqLworI2RlZmluZSBETUFfVkVSUzAgICAgICAgIDB4MDAwMDAwMDAgICAgICAgIC8qIFN1bnJheSBETUEgdmVyc2lvbiAqLworI2RlZmluZSBETUFfRVNDVjEgICAgICAgIDB4NDAwMDAwMDAgICAgICAgIC8qIERNQSBFU0MgVmVyc2lvbiAxICovCisjZGVmaW5lIERNQV9WRVJTMSAgICAgICAgMHg4MDAwMDAwMCAgICAgICAgLyogRE1BIHJldiAxICovCisjZGVmaW5lIERNQV9WRVJTMiAgICAgICAgMHhhMDAwMDAwMCAgICAgICAgLyogRE1BIHJldiAyICovCisjZGVmaW5lIERNQV9WRVJITUUgICAgICAgMHhiMDAwMDAwMCAgICAgICAgLyogRE1BIGhtZSBnYXRlIGFycmF5ICovCisjZGVmaW5lIERNQV9WRVJTUExVUyAgICAgMHg5MDAwMDAwMCAgICAgICAgLyogRE1BIHJldiAxIFBMVVMgKi8KKworI2RlZmluZSBETUFfSE5ETF9JTlRSICAgIDB4MDAwMDAwMDEgICAgICAgIC8qIEFuIElSUSBuZWVkcyB0byBiZSBoYW5kbGVkICovCisjZGVmaW5lIERNQV9ITkRMX0VSUk9SICAgMHgwMDAwMDAwMiAgICAgICAgLyogV2UgbmVlZCB0byB0YWtlIGFuIGVycm9yICovCisjZGVmaW5lIERNQV9GSUZPX0lTRFJBSU4gMHgwMDAwMDAwYyAgICAgICAgLyogVGhlIERNQSBGSUZPIGlzIGRyYWluaW5nICovCisjZGVmaW5lIERNQV9JTlRfRU5BQiAgICAgMHgwMDAwMDAxMCAgICAgICAgLyogVHVybiBvbiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIERNQV9GSUZPX0lOViAgICAgMHgwMDAwMDAyMCAgICAgICAgLyogSW52YWxpZGF0ZSB0aGUgRklGTyAqLworI2RlZmluZSBETUFfQUNDX1NaX0VSUiAgIDB4MDAwMDAwNDAgICAgICAgIC8qIFRoZSBhY2Nlc3Mgc2l6ZSB3YXMgYmFkICovCisjZGVmaW5lIERNQV9GSUZPX1NURFJBSU4gMHgwMDAwMDA0MCAgICAgICAgLyogRE1BX1ZFUlMxIERyYWluIHRoZSBGSUZPICovCisjZGVmaW5lIERNQV9SU1RfU0NTSSAgICAgMHgwMDAwMDA4MCAgICAgICAgLyogUmVzZXQgdGhlIFNDU0kgY29udHJvbGxlciAqLworI2RlZmluZSBETUFfUlNUX0VORVQgICAgIERNQV9SU1RfU0NTSSAgICAgIC8qIFJlc2V0IHRoZSBFTkVUIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRE1BX1NUX1dSSVRFICAgICAweDAwMDAwMTAwICAgICAgICAvKiB3cml0ZSBmcm9tIGRldmljZSB0byBtZW1vcnkgKi8KKyNkZWZpbmUgRE1BX0VOQUJMRSAgICAgICAweDAwMDAwMjAwICAgICAgICAvKiBGaXJlIHVwIERNQSwgaGFuZGxlIHJlcXVlc3RzICovCisjZGVmaW5lIERNQV9QRU5EX1JFQUQgICAgMHgwMDAwMDQwMCAgICAgICAgLyogRE1BX1ZFUlMxLzAvUExVUyBQZW5kaW5nIFJlYWQgKi8KKyNkZWZpbmUgRE1BX0VTQ19CVVJTVCAgICAweDAwMDAwODAwICAgICAgICAvKiAxPTE2Ynl0ZSAwPTMyYnl0ZSAqLworI2RlZmluZSBETUFfUkVBRF9BSEVBRCAgIDB4MDAwMDE4MDAgICAgICAgIC8qIERNQSByZWFkIGFoZWFkIHBhcnRpYWwgbG9uZ3dvcmQgKi8KKyNkZWZpbmUgRE1BX0RTQkxfUkRfRFJOICAweDAwMDAxMDAwICAgICAgICAvKiBObyBFQyBkcmFpbiBvbiBzbGF2ZSByZWFkcyAqLworI2RlZmluZSBETUFfQkNOVF9FTkFCICAgIDB4MDAwMDIwMDAgICAgICAgIC8qIElmIG9uLCB1c2UgdGhlIGJ5dGUgY291bnRlciAqLworI2RlZmluZSBETUFfVEVSTV9DTlRSICAgIDB4MDAwMDQwMDAgICAgICAgIC8qIFRlcm1pbmFsIGNvdW50ZXIgKi8KKyNkZWZpbmUgRE1BX1NDU0lfU0JVUzY0ICAweDAwMDA4MDAwICAgICAgICAvKiBITUU6IEVuYWJsZSA2NC1iaXQgU0JVUyBtb2RlLiAqLworI2RlZmluZSBETUFfQ1NSX0RJU0FCICAgIDB4MDAwMTAwMDAgICAgICAgIC8qIE5vIEZJRk8gZHJhaW5zIGR1cmluZyBjc3IgKi8KKyNkZWZpbmUgRE1BX1NDU0lfRElTQUIgICAweDAwMDIwMDAwICAgICAgICAvKiBObyBGSUZPIGRyYWlucyBkdXJpbmcgcmVnICovCisjZGVmaW5lIERNQV9EU0JMX1dSX0lOViAgMHgwMDAyMDAwMCAgICAgICAgLyogTm8gRUMgaW52YWwuIG9uIHNsYXZlIHdyaXRlcyAqLworI2RlZmluZSBETUFfQUREX0VOQUJMRSAgIDB4MDAwNDAwMDAgICAgICAgIC8qIFNwZWNpYWwgRVNDIERWTUEgb3B0aW1pemF0aW9uICovCisjZGVmaW5lIERNQV9FX0JVUlNUUwkgMHgwMDBjMDAwMAkgICAvKiBFTkVUOiBTQlVTIHIvdyBidXJzdCBtYXNrICovCisjZGVmaW5lIERNQV9FX0JVUlNUMzIJIDB4MDAwNDAwMDAJICAgLyogRU5FVDogU0JVUyAzMiBieXRlIHIvdyBidXJzdCAqLworI2RlZmluZSBETUFfRV9CVVJTVDE2CSAweDAwMDAwMDAwCSAgIC8qIEVORVQ6IFNCVVMgMTYgYnl0ZSByL3cgYnVyc3QgKi8KKyNkZWZpbmUgRE1BX0JSU1RfU1ogICAgICAweDAwMGMwMDAwICAgICAgICAvKiBTQ1NJOiBTQlVTIHIvdyBidXJzdCBzaXplICovCisjZGVmaW5lIERNQV9CUlNUNjQgICAgICAgMHgwMDBjMDAwMCAgICAgICAgLyogU0NTSTogNjRieXRlIGJ1cnN0cyAoSE1FIG9uIFVsdHJhU3BhcmMgb25seSkgKi8KKyNkZWZpbmUgRE1BX0JSU1QzMiAgICAgICAweDAwMDQwMDAwICAgICAgICAvKiBTQ1NJOiAzMmJ5dGUgYnVyc3RzICovCisjZGVmaW5lIERNQV9CUlNUMTYgICAgICAgMHgwMDAwMDAwMCAgICAgICAgLyogU0NTSTogMTZieXRlIGJ1cnN0cyAqLworI2RlZmluZSBETUFfQlJTVDAgICAgICAgIDB4MDAwODAwMDAgICAgICAgIC8qIFNDU0k6IG5vIGJ1cnN0cyAobm9uLUhNRSBnYXRlIGFycmF5cykgKi8KKyNkZWZpbmUgRE1BX0FERFJfRElTQUIgICAweDAwMTAwMDAwICAgICAgICAvKiBObyBGSUZPIGRyYWlucyBkdXJpbmcgYWRkciAqLworI2RlZmluZSBETUFfMkNMS1MgICAgICAgIDB4MDAyMDAwMDAgICAgICAgIC8qIEVhY2ggdHJhbnNmZXIgPSAyIGNsb2NrIHRpY2tzICovCisjZGVmaW5lIERNQV8zQ0xLUyAgICAgICAgMHgwMDQwMDAwMCAgICAgICAgLyogRWFjaCB0cmFuc2ZlciA9IDMgY2xvY2sgdGlja3MgKi8KKyNkZWZpbmUgRE1BX0VOX0VORVRBVUkgICBETUFfM0NMS1MgICAgICAgICAvKiBQdXQgbGFuY2UgaW50byBBVUktY2FibGUgbW9kZSAqLworI2RlZmluZSBETUFfQ05UUl9ESVNBQiAgIDB4MDA4MDAwMDAgICAgICAgIC8qIE5vIElSUSB3aGVuIERNQV9URVJNX0NOVFIgc2V0ICovCisjZGVmaW5lIERNQV9BVVRPX05BRERSICAgMHgwMTAwMDAwMCAgICAgICAgLyogVXNlICJhdXRvIG54dCBhZGRyIiBmZWF0dXJlICovCisjZGVmaW5lIERNQV9TQ1NJX09OICAgICAgMHgwMjAwMDAwMCAgICAgICAgLyogRW5hYmxlIFNDU0kgZG1hICovCisjZGVmaW5lIERNQV9QQVJJVFlfT0ZGICAgMHgwMjAwMDAwMCAgICAgICAgLyogSE1FOiBkaXNhYmxlIHBhcml0eSBjaGVja2luZyAqLworI2RlZmluZSBETUFfTE9BREVEX0FERFIgIDB4MDQwMDAwMDAgICAgICAgIC8qIEFkZHJlc3MgaGFzIGJlZW4gbG9hZGVkICovCisjZGVmaW5lIERNQV9MT0FERURfTkFERFIgMHgwODAwMDAwMCAgICAgICAgLyogTmV4dCBhZGRyZXNzIGhhcyBiZWVuIGxvYWRlZCAqLworI2RlZmluZSBETUFfUkVTRVRfRkFTMzY2IDB4MDgwMDAwMDAgICAgICAgIC8qIEhNRTogQXNzZXJ0IFJFU0VUIHRvIEZBUzM2NiAqLworCisvKiBWYWx1ZXMgZGVzY3JpYmluZyB0aGUgYnVyc3Qtc2l6ZSBwcm9wZXJ0eSBmcm9tIHRoZSBQUk9NICovCisjZGVmaW5lIERNQV9CVVJTVDEgICAgICAgMHgwMQorI2RlZmluZSBETUFfQlVSU1QyICAgICAgIDB4MDIKKyNkZWZpbmUgRE1BX0JVUlNUNCAgICAgICAweDA0CisjZGVmaW5lIERNQV9CVVJTVDggICAgICAgMHgwOAorI2RlZmluZSBETUFfQlVSU1QxNiAgICAgIDB4MTAKKyNkZWZpbmUgRE1BX0JVUlNUMzIgICAgICAweDIwCisjZGVmaW5lIERNQV9CVVJTVDY0ICAgICAgMHg0MAorI2RlZmluZSBETUFfQlVSU1RCSVRTICAgIDB4N2YKKworLyogRGV0ZXJtaW5lIGhpZ2hlc3QgcG9zc2libGUgZmluYWwgdHJhbnNmZXIgYWRkcmVzcyBnaXZlbiBhIGJhc2UgKi8KKyNkZWZpbmUgRE1BX01BWEVORChhZGRyKSAoMHgwMTAwMDAwMFVMLSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKSYweDAwZmZmZmZmVUwpKQorCisvKiBZZXMsIEkgaGFjayBhIGxvdCBvZiBlbGlzcCBpbiBteSBzcGFyZSB0aW1lLi4uICovCisjZGVmaW5lIERNQV9FUlJPUl9QKHJlZ3MpICAoKHNidXNfcmVhZGwoKHJlZ3MpICsgRE1BX0NTUikgJiBETUFfSE5ETF9FUlJPUikpCisjZGVmaW5lIERNQV9JUlFfUChyZWdzKSAgICAoKHNidXNfcmVhZGwoKHJlZ3MpICsgRE1BX0NTUikpICYgKERNQV9ITkRMX0lOVFIgfCBETUFfSE5ETF9FUlJPUikpCisjZGVmaW5lIERNQV9XUklURV9QKHJlZ3MpICAoKHNidXNfcmVhZGwoKHJlZ3MpICsgRE1BX0NTUikgJiBETUFfU1RfV1JJVEUpKQorI2RlZmluZSBETUFfT0ZGKF9fcmVncykJCVwKK2RvIHsJdTMyIHRtcCA9IHNidXNfcmVhZGwoKF9fcmVncykgKyBETUFfQ1NSKTsgXAorCXRtcCAmPSB+RE1BX0VOQUJMRTsgXAorCXNidXNfd3JpdGVsKHRtcCwgKF9fcmVncykgKyBETUFfQ1NSKTsgXAorfSB3aGlsZSgwKQorI2RlZmluZSBETUFfSU5UU09GRihfX3JlZ3MpCVwKK2RvIHsJdTMyIHRtcCA9IHNidXNfcmVhZGwoKF9fcmVncykgKyBETUFfQ1NSKTsgXAorCXRtcCAmPSB+RE1BX0lOVF9FTkFCOyBcCisJc2J1c193cml0ZWwodG1wLCAoX19yZWdzKSArIERNQV9DU1IpOyBcCit9IHdoaWxlKDApCisjZGVmaW5lIERNQV9JTlRTT04oX19yZWdzKQlcCitkbyB7CXUzMiB0bXAgPSBzYnVzX3JlYWRsKChfX3JlZ3MpICsgRE1BX0NTUik7IFwKKwl0bXAgfD0gRE1BX0lOVF9FTkFCOyBcCisJc2J1c193cml0ZWwodG1wLCAoX19yZWdzKSArIERNQV9DU1IpOyBcCit9IHdoaWxlKDApCisjZGVmaW5lIERNQV9QVU5URklGTyhfX3JlZ3MpCVwKK2RvIHsJdTMyIHRtcCA9IHNidXNfcmVhZGwoKF9fcmVncykgKyBETUFfQ1NSKTsgXAorCXRtcCB8PSBETUFfRklGT19JTlY7IFwKKwlzYnVzX3dyaXRlbCh0bXAsIChfX3JlZ3MpICsgRE1BX0NTUik7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgRE1BX1NFVFNUQVJUKF9fcmVncywgX19hZGRyKQlcCisJc2J1c193cml0ZWwoKHUzMikoX19hZGRyKSwgKF9fcmVncykgKyBETUFfQUREUik7CisjZGVmaW5lIERNQV9CRUdJTkRNQV9XKF9fcmVncykJXAorZG8gewl1MzIgdG1wID0gc2J1c19yZWFkbCgoX19yZWdzKSArIERNQV9DU1IpOyBcCisJdG1wIHw9IChETUFfU1RfV1JJVEV8RE1BX0VOQUJMRXxETUFfSU5UX0VOQUIpOyBcCisJc2J1c193cml0ZWwodG1wLCAoX19yZWdzKSArIERNQV9DU1IpOyBcCit9IHdoaWxlKDApCisjZGVmaW5lIERNQV9CRUdJTkRNQV9SKF9fcmVncykJXAorZG8gewl1MzIgdG1wID0gc2J1c19yZWFkbCgoX19yZWdzKSArIERNQV9DU1IpOyBcCisJdG1wIHw9IChETUFfRU5BQkxFfERNQV9JTlRfRU5BQik7IFwKKwl0bXAgJj0gfkRNQV9TVF9XUklURTsgXAorCXNidXNfd3JpdGVsKHRtcCwgKF9fcmVncykgKyBETUFfQ1NSKTsgXAorfSB3aGlsZSgwKQorCisvKiBGb3IgY2VydGFpbiBETUEgY2hpcHMsIHdlIG5lZWQgdG8gZGlzYWJsZSBpbnRzIHVwb24gaXJxIGVudHJ5CisgKiBhbmQgdHVybiB0aGVtIGJhY2sgb24gd2hlbiB3ZSBhcmUgZG9uZS4gIFNvIGluIGFueSBFU1AgaW50ZXJydXB0CisgKiBoYW5kbGVyIHlvdSAqbXVzdCogY2FsbCBETUFfSVJRX0VOVFJZIHVwb24gZW50cnkgYW5kIERNQV9JUlFfRVhJVAorICogd2hlbiBsZWF2aW5nIHRoZSBoYW5kbGVyLiAgWW91IGhhdmUgYmVlbiB3YXJuZWQuLi4KKyAqLworI2RlZmluZSBETUFfSVJRX0VOVFJZKGRtYSwgZHJlZ3MpIGRvIHsgXAorICAgICAgICBpZihETUFfSVNCUk9LRU4oZG1hKSkgRE1BX0lOVFNPRkYoZHJlZ3MpOyBcCisgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIERNQV9JUlFfRVhJVChkbWEsIGRyZWdzKSBkbyB7IFwKKwlpZihETUFfSVNCUk9LRU4oZG1hKSkgRE1BX0lOVFNPTihkcmVncyk7IFwKKyAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBmb3JfZWFjaF9kdm1hKGRtYSkgXAorICAgICAgICBmb3IoKGRtYSkgPSBkbWFfY2hhaW47IChkbWEpOyAoZG1hKSA9IChkbWEpLT5uZXh0KQorCisvKiBGcm9tIFBDSSAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5IAkoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogIShfQVNNX1NQQVJDNjRfRE1BX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9lYnVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9lYnVzLmgKaW5kZXggNDkxZjg1ZC4uYTVkYTJkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZWJ1cy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2VidXMuaApAQCAtMSw5OSArMSw4IEBACi0vKgotICogZWJ1cy5oOiBQQ0kgdG8gRWJ1cyBwc2V1ZG8gZHJpdmVyIHNvZnR3YXJlIHN0YXRlLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyBFZGRpZSBDLiBEb3N0IChlY2RAc2t5bmV0LmJlKSAKLSAqCi0gKiBBZG9wdGVkIGZvciBzcGFyYyBieSBWLiBSb2dhbm92IGFuZCBHLiBSYWlrby4KLSAqLwotCi0jaWZuZGVmIF9fU1BBUkNfRUJVU19ICi0jZGVmaW5lIF9fU1BBUkNfRUJVU19ICi0KLSNpZm5kZWYgX0xJTlVYX0lPUE9SVF9ICi0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaWZuZGVmIF9fX0FTTV9TUEFSQ19FQlVTX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX0VCVVNfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL2VidXNfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL2VidXNfMzIuaD4KICNlbmRpZgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgotCi1zdHJ1Y3QgbGludXhfZWJ1c19jaGlsZCB7Ci0Jc3RydWN0IGxpbnV4X2VidXNfY2hpbGQJCSpuZXh0OwotCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZQkqcGFyZW50OwotCXN0cnVjdCBsaW51eF9lYnVzCQkqYnVzOwotCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKnByb21fbm9kZTsKLQlzdHJ1Y3QgcmVzb3VyY2UJCQkgcmVzb3VyY2VbUFJPTVJFR19NQVhdOwotCWludAkJCQkgbnVtX2FkZHJzOwotCXVuc2lnbmVkIGludAkJCSBpcnFzW1BST01JTlRSX01BWF07Ci0JaW50CQkJCSBudW1faXJxczsKLX07Ci0KLXN0cnVjdCBsaW51eF9lYnVzX2RldmljZSB7Ci0Jc3RydWN0IG9mX2RldmljZQkJb2ZkZXY7Ci0Jc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlCSpuZXh0OwotCXN0cnVjdCBsaW51eF9lYnVzX2NoaWxkCQkqY2hpbGRyZW47Ci0Jc3RydWN0IGxpbnV4X2VidXMJCSpidXM7Ci0Jc3RydWN0IGRldmljZV9ub2RlCQkqcHJvbV9ub2RlOwotCXN0cnVjdCByZXNvdXJjZQkJCSByZXNvdXJjZVtQUk9NUkVHX01BWF07Ci0JaW50CQkJCSBudW1fYWRkcnM7Ci0JdW5zaWduZWQgaW50CQkJIGlycXNbUFJPTUlOVFJfTUFYXTsKLQlpbnQJCQkJIG51bV9pcnFzOwotfTsKLSNkZWZpbmUgdG9fZWJ1c19kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBsaW51eF9lYnVzX2RldmljZSwgb2ZkZXYuZGV2KQotCi1zdHJ1Y3QgbGludXhfZWJ1cyB7Ci0Jc3RydWN0IG9mX2RldmljZQkJb2ZkZXY7Ci0Jc3RydWN0IGxpbnV4X2VidXMJCSpuZXh0OwotCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZQkqZGV2aWNlczsKLQlzdHJ1Y3QgbGludXhfcGJtX2luZm8JCSpwYXJlbnQ7Ci0Jc3RydWN0IHBjaV9kZXYJCQkqc2VsZjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpwcm9tX25vZGU7Ci19OwotI2RlZmluZSB0b19lYnVzKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbGludXhfZWJ1cywgb2ZkZXYuZGV2KQotCi1zdHJ1Y3QgbGludXhfZWJ1c19kbWEgewotCXVuc2lnbmVkIGludCBkY3NyOwotCXVuc2lnbmVkIGludCBkYWNyOwotCXVuc2lnbmVkIGludCBkYmNyOwotfTsKLQotI2RlZmluZSBFQlVTX0RDU1JfSU5UX1BFTkQJMHgwMDAwMDAwMQotI2RlZmluZSBFQlVTX0RDU1JfRVJSX1BFTkQJMHgwMDAwMDAwMgotI2RlZmluZSBFQlVTX0RDU1JfRFJBSU4JCTB4MDAwMDAwMDQKLSNkZWZpbmUgRUJVU19EQ1NSX0lOVF9FTgkweDAwMDAwMDEwCi0jZGVmaW5lIEVCVVNfRENTUl9SRVNFVAkJMHgwMDAwMDA4MAotI2RlZmluZSBFQlVTX0RDU1JfV1JJVEUJCTB4MDAwMDAxMDAKLSNkZWZpbmUgRUJVU19EQ1NSX0VOX0RNQQkweDAwMDAwMjAwCi0jZGVmaW5lIEVCVVNfRENTUl9DWUNfUEVORAkweDAwMDAwNDAwCi0jZGVmaW5lIEVCVVNfRENTUl9ESUFHX1JEX0RPTkUJMHgwMDAwMDgwMAotI2RlZmluZSBFQlVTX0RDU1JfRElBR19XUl9ET05FCTB4MDAwMDEwMDAKLSNkZWZpbmUgRUJVU19EQ1NSX0VOX0NOVAkweDAwMDAyMDAwCi0jZGVmaW5lIEVCVVNfRENTUl9UQwkJMHgwMDAwNDAwMAotI2RlZmluZSBFQlVTX0RDU1JfRElTX0NTUl9EUk4JMHgwMDAxMDAwMAotI2RlZmluZSBFQlVTX0RDU1JfQlVSU1RfU1pfTUFTSwkweDAwMGMwMDAwCi0jZGVmaW5lIEVCVVNfRENTUl9CVVJTVF9TWl8xCTB4MDAwODAwMDAKLSNkZWZpbmUgRUJVU19EQ1NSX0JVUlNUX1NaXzQJMHgwMDAwMDAwMAotI2RlZmluZSBFQlVTX0RDU1JfQlVSU1RfU1pfOAkweDAwMDQwMDAwCi0jZGVmaW5lIEVCVVNfRENTUl9CVVJTVF9TWl8xNgkweDAwMGMwMDAwCi0jZGVmaW5lIEVCVVNfRENTUl9ESUFHX0VOCTB4MDAxMDAwMDAKLSNkZWZpbmUgRUJVU19EQ1NSX0RJU19FUlJfUEVORAkweDAwNDAwMDAwCi0jZGVmaW5lIEVCVVNfRENTUl9UQ0lfRElTCTB4MDA4MDAwMDAKLSNkZWZpbmUgRUJVU19EQ1NSX0VOX05FWFQJMHgwMTAwMDAwMAotI2RlZmluZSBFQlVTX0RDU1JfRE1BX09OCTB4MDIwMDAwMDAKLSNkZWZpbmUgRUJVU19EQ1NSX0FfTE9BREVECTB4MDQwMDAwMDAKLSNkZWZpbmUgRUJVU19EQ1NSX05BX0xPQURFRAkweDA4MDAwMDAwCi0jZGVmaW5lIEVCVVNfRENTUl9ERVZfSURfTUFTSwkweGYwMDAwMDAwCi0KLWV4dGVybiBzdHJ1Y3QgbGludXhfZWJ1cwkJKmVidXNfY2hhaW47Ci0KLWV4dGVybiB2b2lkIGVidXNfaW5pdCh2b2lkKTsKLQotI2RlZmluZSBmb3JfZWFjaF9lYnVzKGJ1cykJCQkJCQlcCi0gICAgICAgIGZvcigoYnVzKSA9IGVidXNfY2hhaW47IChidXMpOyAoYnVzKSA9IChidXMpLT5uZXh0KQotCi0jZGVmaW5lIGZvcl9lYWNoX2VidXNkZXYoZGV2LCBidXMpCQkJCQlcCi0gICAgICAgIGZvcigoZGV2KSA9IChidXMpLT5kZXZpY2VzOyAoZGV2KTsgKGRldikgPSAoZGV2KS0+bmV4dCkKLQotI2RlZmluZSBmb3JfZWFjaF9lZGV2Y2hpbGQoZGV2LCBjaGlsZCkJCQkJCVwKLSAgICAgICAgZm9yKChjaGlsZCkgPSAoZGV2KS0+Y2hpbGRyZW47IChjaGlsZCk7IChjaGlsZCkgPSAoY2hpbGQpLT5uZXh0KQotCi0jZW5kaWYgLyogIShfX1NQQVJDX0VCVVNfSCkgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZWJ1c18zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZWJ1c18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Y2I3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9lYnVzXzMyLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIGVidXMuaDogUENJIHRvIEVidXMgcHNldWRvIGRyaXZlciBzb2Z0d2FyZSBzdGF0ZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgRWRkaWUgQy4gRG9zdCAoZWNkQHNreW5ldC5iZSkKKyAqCisgKiBBZG9wdGVkIGZvciBzcGFyYyBieSBWLiBSb2dhbm92IGFuZCBHLiBSYWlrby4KKyAqLworCisjaWZuZGVmIF9fU1BBUkNfRUJVU19ICisjZGVmaW5lIF9fU1BBUkNfRUJVU19ICisKKyNpZm5kZWYgX0xJTlVYX0lPUE9SVF9ICisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KKworc3RydWN0IGxpbnV4X2VidXNfY2hpbGQgeworCXN0cnVjdCBsaW51eF9lYnVzX2NoaWxkCQkqbmV4dDsKKwlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UJKnBhcmVudDsKKwlzdHJ1Y3QgbGludXhfZWJ1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpwcm9tX25vZGU7CisJc3RydWN0IHJlc291cmNlCQkJIHJlc291cmNlW1BST01SRUdfTUFYXTsKKwlpbnQJCQkJIG51bV9hZGRyczsKKwl1bnNpZ25lZCBpbnQJCQkgaXJxc1tQUk9NSU5UUl9NQVhdOworCWludAkJCQkgbnVtX2lycXM7Cit9OworCitzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgeworCXN0cnVjdCBvZl9kZXZpY2UJCW9mZGV2OworCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZQkqbmV4dDsKKwlzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZAkJKmNoaWxkcmVuOworCXN0cnVjdCBsaW51eF9lYnVzCQkqYnVzOworCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKnByb21fbm9kZTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQkgcmVzb3VyY2VbUFJPTVJFR19NQVhdOworCWludAkJCQkgbnVtX2FkZHJzOworCXVuc2lnbmVkIGludAkJCSBpcnFzW1BST01JTlRSX01BWF07CisJaW50CQkJCSBudW1faXJxczsKK307CisjZGVmaW5lIHRvX2VidXNfZGV2aWNlKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UsIG9mZGV2LmRldikKKworc3RydWN0IGxpbnV4X2VidXMgeworCXN0cnVjdCBvZl9kZXZpY2UJCW9mZGV2OworCXN0cnVjdCBsaW51eF9lYnVzCQkqbmV4dDsKKwlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UJKmRldmljZXM7CisJc3RydWN0IGxpbnV4X3BibV9pbmZvCQkqcGFyZW50OworCXN0cnVjdCBwY2lfZGV2CQkJKnNlbGY7CisJc3RydWN0IGRldmljZV9ub2RlCQkqcHJvbV9ub2RlOworfTsKKyNkZWZpbmUgdG9fZWJ1cyhkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGxpbnV4X2VidXMsIG9mZGV2LmRldikKKworc3RydWN0IGxpbnV4X2VidXNfZG1hIHsKKwl1bnNpZ25lZCBpbnQgZGNzcjsKKwl1bnNpZ25lZCBpbnQgZGFjcjsKKwl1bnNpZ25lZCBpbnQgZGJjcjsKK307CisKKyNkZWZpbmUgRUJVU19EQ1NSX0lOVF9QRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgRUJVU19EQ1NSX0VSUl9QRU5ECTB4MDAwMDAwMDIKKyNkZWZpbmUgRUJVU19EQ1NSX0RSQUlOCQkweDAwMDAwMDA0CisjZGVmaW5lIEVCVVNfRENTUl9JTlRfRU4JMHgwMDAwMDAxMAorI2RlZmluZSBFQlVTX0RDU1JfUkVTRVQJCTB4MDAwMDAwODAKKyNkZWZpbmUgRUJVU19EQ1NSX1dSSVRFCQkweDAwMDAwMTAwCisjZGVmaW5lIEVCVVNfRENTUl9FTl9ETUEJMHgwMDAwMDIwMAorI2RlZmluZSBFQlVTX0RDU1JfQ1lDX1BFTkQJMHgwMDAwMDQwMAorI2RlZmluZSBFQlVTX0RDU1JfRElBR19SRF9ET05FCTB4MDAwMDA4MDAKKyNkZWZpbmUgRUJVU19EQ1NSX0RJQUdfV1JfRE9ORQkweDAwMDAxMDAwCisjZGVmaW5lIEVCVVNfRENTUl9FTl9DTlQJMHgwMDAwMjAwMAorI2RlZmluZSBFQlVTX0RDU1JfVEMJCTB4MDAwMDQwMDAKKyNkZWZpbmUgRUJVU19EQ1NSX0RJU19DU1JfRFJOCTB4MDAwMTAwMDAKKyNkZWZpbmUgRUJVU19EQ1NSX0JVUlNUX1NaX01BU0sJMHgwMDBjMDAwMAorI2RlZmluZSBFQlVTX0RDU1JfQlVSU1RfU1pfMQkweDAwMDgwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9CVVJTVF9TWl80CTB4MDAwMDAwMDAKKyNkZWZpbmUgRUJVU19EQ1NSX0JVUlNUX1NaXzgJMHgwMDA0MDAwMAorI2RlZmluZSBFQlVTX0RDU1JfQlVSU1RfU1pfMTYJMHgwMDBjMDAwMAorI2RlZmluZSBFQlVTX0RDU1JfRElBR19FTgkweDAwMTAwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9ESVNfRVJSX1BFTkQJMHgwMDQwMDAwMAorI2RlZmluZSBFQlVTX0RDU1JfVENJX0RJUwkweDAwODAwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9FTl9ORVhUCTB4MDEwMDAwMDAKKyNkZWZpbmUgRUJVU19EQ1NSX0RNQV9PTgkweDAyMDAwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9BX0xPQURFRAkweDA0MDAwMDAwCisjZGVmaW5lIEVCVVNfRENTUl9OQV9MT0FERUQJMHgwODAwMDAwMAorI2RlZmluZSBFQlVTX0RDU1JfREVWX0lEX01BU0sJMHhmMDAwMDAwMAorCitleHRlcm4gc3RydWN0IGxpbnV4X2VidXMJCSplYnVzX2NoYWluOworCitleHRlcm4gdm9pZCBlYnVzX2luaXQodm9pZCk7CisKKyNkZWZpbmUgZm9yX2VhY2hfZWJ1cyhidXMpCQkJCQkJXAorICAgICAgICBmb3IoKGJ1cykgPSBlYnVzX2NoYWluOyAoYnVzKTsgKGJ1cykgPSAoYnVzKS0+bmV4dCkKKworI2RlZmluZSBmb3JfZWFjaF9lYnVzZGV2KGRldiwgYnVzKQkJCQkJXAorICAgICAgICBmb3IoKGRldikgPSAoYnVzKS0+ZGV2aWNlczsgKGRldik7IChkZXYpID0gKGRldiktPm5leHQpCisKKyNkZWZpbmUgZm9yX2VhY2hfZWRldmNoaWxkKGRldiwgY2hpbGQpCQkJCQlcCisgICAgICAgIGZvcigoY2hpbGQpID0gKGRldiktPmNoaWxkcmVuOyAoY2hpbGQpOyAoY2hpbGQpID0gKGNoaWxkKS0+bmV4dCkKKworI2VuZGlmIC8qICEoX19TUEFSQ19FQlVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9lYnVzXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9lYnVzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNjNjJiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2VidXNfNjQuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogZWJ1cy5oOiBQQ0kgdG8gRWJ1cyBwc2V1ZG8gZHJpdmVyIHNvZnR3YXJlIHN0YXRlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBFZGRpZSBDLiBEb3N0IChlY2RAc2t5bmV0LmJlKQorICogQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqLworCisjaWZuZGVmIF9fU1BBUkM2NF9FQlVTX0gKKyNkZWZpbmUgX19TUEFSQzY0X0VCVVNfSAorCisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisKK3N0cnVjdCBsaW51eF9lYnVzX2NoaWxkIHsKKwlzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZAkJKm5leHQ7CisJc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlCSpwYXJlbnQ7CisJc3RydWN0IGxpbnV4X2VidXMJCSpidXM7CisJc3RydWN0IGRldmljZV9ub2RlCQkqcHJvbV9ub2RlOworCXN0cnVjdCByZXNvdXJjZQkJCSByZXNvdXJjZVtQUk9NUkVHX01BWF07CisJaW50CQkJCSBudW1fYWRkcnM7CisJdW5zaWduZWQgaW50CQkJIGlycXNbUFJPTUlOVFJfTUFYXTsKKwlpbnQJCQkJIG51bV9pcnFzOworfTsKKworc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlIHsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlCQlvZmRldjsKKwlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UJKm5leHQ7CisJc3RydWN0IGxpbnV4X2VidXNfY2hpbGQJCSpjaGlsZHJlbjsKKwlzdHJ1Y3QgbGludXhfZWJ1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpwcm9tX25vZGU7CisJc3RydWN0IHJlc291cmNlCQkJIHJlc291cmNlW1BST01SRUdfTUFYXTsKKwlpbnQJCQkJIG51bV9hZGRyczsKKwl1bnNpZ25lZCBpbnQJCQkgaXJxc1tQUk9NSU5UUl9NQVhdOworCWludAkJCQkgbnVtX2lycXM7Cit9OworI2RlZmluZSB0b19lYnVzX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlLCBvZmRldi5kZXYpCisKK3N0cnVjdCBsaW51eF9lYnVzIHsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlCQlvZmRldjsKKwlzdHJ1Y3QgbGludXhfZWJ1cwkJKm5leHQ7CisJc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlCSpkZXZpY2VzOworCXN0cnVjdCBwY2lfZGV2CQkJKnNlbGY7CisJaW50CQkJCSBpbmRleDsKKwlpbnQJCQkJIGlzX3JpbzsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpwcm9tX25vZGU7Cit9OworI2RlZmluZSB0b19lYnVzKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbGludXhfZWJ1cywgb2ZkZXYuZGV2KQorCitzdHJ1Y3QgZWJ1c19kbWFfaW5mbyB7CisJc3BpbmxvY2tfdAlsb2NrOworCXZvaWQgX19pb21lbQkqcmVnczsKKworCXVuc2lnbmVkIGludAlmbGFnczsKKyNkZWZpbmUgRUJVU19ETUFfRkxBR19VU0VfRUJETUFfSEFORExFUgkJMHgwMDAwMDAwMQorI2RlZmluZSBFQlVTX0RNQV9GTEFHX1RDSV9ESVNBQkxFCQkweDAwMDAwMDAyCisKKwkvKiBUaGVzZSBhcmUgb25seSB2YWxpZCBpcyBFQlVTX0RNQV9GTEFHX1VTRV9FQkRNQV9IQU5ETEVSIGlzCisJICogc2V0LgorCSAqLworCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGVidXNfZG1hX2luZm8gKnAsIGludCBldmVudCwgdm9pZCAqY29va2llKTsKKwl2b2lkICpjbGllbnRfY29va2llOworCXVuc2lnbmVkIGludAlpcnE7CisjZGVmaW5lIEVCVVNfRE1BX0VWRU5UX0VSUk9SCTEKKyNkZWZpbmUgRUJVU19ETUFfRVZFTlRfRE1BCTIKKyNkZWZpbmUgRUJVU19ETUFfRVZFTlRfREVWSUNFCTQKKworCXVuc2lnbmVkIGNoYXIJbmFtZVs2NF07Cit9OworCitleHRlcm4gaW50IGVidXNfZG1hX3JlZ2lzdGVyKHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwKTsKK2V4dGVybiBpbnQgZWJ1c19kbWFfaXJxX2VuYWJsZShzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCwgaW50IG9uKTsKK2V4dGVybiB2b2lkIGVidXNfZG1hX3VucmVnaXN0ZXIoc3RydWN0IGVidXNfZG1hX2luZm8gKnApOworZXh0ZXJuIGludCBlYnVzX2RtYV9yZXF1ZXN0KHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwLCBkbWFfYWRkcl90IGJ1c19hZGRyLAorCQkJICAgIHNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgZWJ1c19kbWFfcHJlcGFyZShzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCwgaW50IHdyaXRlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZWJ1c19kbWFfcmVzaWR1ZShzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCk7CitleHRlcm4gdW5zaWduZWQgaW50IGVidXNfZG1hX2FkZHIoc3RydWN0IGVidXNfZG1hX2luZm8gKnApOworZXh0ZXJuIHZvaWQgZWJ1c19kbWFfZW5hYmxlKHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwLCBpbnQgb24pOworCitleHRlcm4gc3RydWN0IGxpbnV4X2VidXMJCSplYnVzX2NoYWluOworCitleHRlcm4gdm9pZCBlYnVzX2luaXQodm9pZCk7CisKKyNkZWZpbmUgZm9yX2VhY2hfZWJ1cyhidXMpCQkJCQkJXAorICAgICAgICBmb3IoKGJ1cykgPSBlYnVzX2NoYWluOyAoYnVzKTsgKGJ1cykgPSAoYnVzKS0+bmV4dCkKKworI2RlZmluZSBmb3JfZWFjaF9lYnVzZGV2KGRldiwgYnVzKQkJCQkJXAorICAgICAgICBmb3IoKGRldikgPSAoYnVzKS0+ZGV2aWNlczsgKGRldik7IChkZXYpID0gKGRldiktPm5leHQpCisKKyNkZWZpbmUgZm9yX2VhY2hfZWRldmNoaWxkKGRldiwgY2hpbGQpCQkJCQlcCisgICAgICAgIGZvcigoY2hpbGQpID0gKGRldiktPmNoaWxkcmVuOyAoY2hpbGQpOyAoY2hpbGQpID0gKGNoaWxkKS0+bmV4dCkKKworI2VuZGlmIC8qICEoX19TUEFSQzY0X0VCVVNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2VsZi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZWxmLmgKaW5kZXggZDA0M2Y4MC4uZjAzNWM0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZWxmLmgKQEAgLTEsMTQ1ICsxLDggQEAKLSNpZm5kZWYgX19BU01TUEFSQ19FTEZfSAotI2RlZmluZSBfX0FTTVNQQVJDX0VMRl9ICi0KLS8qCi0gKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgotICovCi0KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLS8qCi0gKiBTcGFyYyBzZWN0aW9uIHR5cGVzCi0gKi8KLSNkZWZpbmUgU1RUX1JFR0lTVEVSCQkxMwotCi0vKgotICogU3BhcmMgRUxGIHJlbG9jYXRpb24gdHlwZXMKLSAqLwotI2RlZmluZQlSX1NQQVJDX05PTkUJCTAKLSNkZWZpbmUJUl9TUEFSQ184CQkxCi0jZGVmaW5lCVJfU1BBUkNfMTYJCTIKLSNkZWZpbmUJUl9TUEFSQ18zMgkJMwotI2RlZmluZQlSX1NQQVJDX0RJU1A4CQk0Ci0jZGVmaW5lCVJfU1BBUkNfRElTUDE2CQk1Ci0jZGVmaW5lCVJfU1BBUkNfRElTUDMyCQk2Ci0jZGVmaW5lCVJfU1BBUkNfV0RJU1AzMAkJNwotI2RlZmluZQlSX1NQQVJDX1dESVNQMjIJCTgKLSNkZWZpbmUJUl9TUEFSQ19ISTIyCQk5Ci0jZGVmaW5lCVJfU1BBUkNfMjIJCTEwCi0jZGVmaW5lCVJfU1BBUkNfMTMJCTExCi0jZGVmaW5lCVJfU1BBUkNfTE8xMAkJMTIKLSNkZWZpbmUJUl9TUEFSQ19HT1QxMAkJMTMKLSNkZWZpbmUJUl9TUEFSQ19HT1QxMwkJMTQKLSNkZWZpbmUJUl9TUEFSQ19HT1QyMgkJMTUKLSNkZWZpbmUJUl9TUEFSQ19QQzEwCQkxNgotI2RlZmluZQlSX1NQQVJDX1BDMjIJCTE3Ci0jZGVmaW5lCVJfU1BBUkNfV1BMVDMwCQkxOAotI2RlZmluZQlSX1NQQVJDX0NPUFkJCTE5Ci0jZGVmaW5lCVJfU1BBUkNfR0xPQl9EQVQJMjAKLSNkZWZpbmUJUl9TUEFSQ19KTVBfU0xPVAkyMQotI2RlZmluZQlSX1NQQVJDX1JFTEFUSVZFCTIyCi0jZGVmaW5lCVJfU1BBUkNfVUEzMgkJMjMKLSNkZWZpbmUgUl9TUEFSQ19QTFQzMgkJMjQKLSNkZWZpbmUgUl9TUEFSQ19ISVBMVDIyCQkyNQotI2RlZmluZSBSX1NQQVJDX0xPUExUMTAJCTI2Ci0jZGVmaW5lIFJfU1BBUkNfUENQTFQzMgkJMjcKLSNkZWZpbmUgUl9TUEFSQ19QQ1BMVDIyCQkyOAotI2RlZmluZSBSX1NQQVJDX1BDUExUMTAJCTI5Ci0jZGVmaW5lIFJfU1BBUkNfMTAJCTMwCi0jZGVmaW5lIFJfU1BBUkNfMTEJCTMxCi0jZGVmaW5lIFJfU1BBUkNfNjQJCTMyCi0jZGVmaW5lIFJfU1BBUkNfT0xPMTAJCTMzCi0jZGVmaW5lIFJfU1BBUkNfV0RJU1AxNgkJNDAKLSNkZWZpbmUgUl9TUEFSQ19XRElTUDE5CQk0MQotI2RlZmluZSBSX1NQQVJDXzcJCTQzCi0jZGVmaW5lIFJfU1BBUkNfNQkJNDQKLSNkZWZpbmUgUl9TUEFSQ182CQk0NQotCi0vKiBCaXRzIHByZXNlbnQgaW4gQVRfSFdDQVAsIHByaW1hcmlseSBmb3IgU3BhcmMzMi4gICovCi0KLSNkZWZpbmUgSFdDQVBfU1BBUkNfRkxVU0ggICAgICAgMSAgICAvKiBDUFUgc3VwcG9ydHMgZmx1c2ggaW5zdHJ1Y3Rpb24uICovCi0jZGVmaW5lIEhXQ0FQX1NQQVJDX1NUQkFSICAgICAgIDIKLSNkZWZpbmUgSFdDQVBfU1BBUkNfU1dBUCAgICAgICAgNAotI2RlZmluZSBIV0NBUF9TUEFSQ19NVUxESVYgICAgICA4Ci0jZGVmaW5lIEhXQ0FQX1NQQVJDX1Y5CQkxNgotI2RlZmluZSBIV0NBUF9TUEFSQ19VTFRSQTMJMzIKLQotI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAotCi0vKiBGb3JtYXQgaXM6Ci0gKiAJRzAgLS0+IEc3Ci0gKglPMCAtLT4gTzcKLSAqCUwwIC0tPiBMNwotICoJSTAgLS0+IEk3Ci0gKglQU1IsIFBDLCBuUEMsIFksIFdJTSwgVEJSCi0gKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwotI2RlZmluZSBFTEZfTkdSRUcgMzgKLXR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bmlvbiB7Ci0JCXVuc2lnbmVkIGxvbmcJcHJfcmVnc1szMl07Ci0JCWRvdWJsZQkJcHJfZHJlZ3NbMTZdOwotCX0gcHJfZnI7Ci0JdW5zaWduZWQgbG9uZyBfX3VudXNlZDsKLQl1bnNpZ25lZCBsb25nCXByX2ZzcjsKLQl1bnNpZ25lZCBjaGFyCXByX3FjbnQ7Ci0JdW5zaWduZWQgY2hhcglwcl9xX2VudHJ5c2l6ZTsKLQl1bnNpZ25lZCBjaGFyCXByX2VuOwotCXVuc2lnbmVkIGludAlwcl9xWzY0XTsKLX0gZWxmX2ZwcmVnc2V0X3Q7Ci0KLSNpbmNsdWRlIDxhc20vbWJ1cy5oPgotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KLSAqLwotI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fU1BBUkMpCi0KLS8qCi0gKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KLSAqLwotI2RlZmluZSBFTEZfQVJDSAlFTV9TUEFSQwotI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgotI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMk1TQgotCi0jZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCi0jaWZuZGVmIENPTkZJR19TVU40Ci0jZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKKyNpZm5kZWYgX19fQVNNX1NQQVJDX0VMRl9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19FTEZfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL2VsZl82NC5oPgogI2Vsc2UKLSNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJODE5MgorI2luY2x1ZGUgPGFzbS1zcGFyYy9lbGZfMzIuaD4KICNlbmRpZgotCi0KLS8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCi0gICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKLSAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCi0gICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLwotCi0jZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIChUQVNLX1VOTUFQUEVEX0JBU0UpCi0KLS8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKLSAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gIFRoaXMgY2FuIE5PVCBiZSBkb25lIGluIHVzZXJzcGFjZQotICAgb24gU3BhcmMuICAqLwotCi0vKiBTdW40YyBoYXMgbm9uZSBvZiB0aGUgY2FwYWJpbGl0aWVzLCBtb3N0IHN1bjRtJ3MgaGF2ZSB0aGVtIGFsbC4KLSAqIFhYWCBUaGlzIGlzIGdyb3NzLCBzZXQgc29tZSBnbG9iYWwgdmFyaWFibGUgYXQgYm9vdCB0aW1lLiAtRGF2ZU0KLSAqLwotI2RlZmluZSBFTEZfSFdDQVAJKChBUkNIX1NVTjRDX1NVTjQpID8gMCA6IFwKLQkJCSAoSFdDQVBfU1BBUkNfRkxVU0ggfCBIV0NBUF9TUEFSQ19TVEJBUiB8IFwKLQkJCSAgSFdDQVBfU1BBUkNfU1dBUCB8IFwKLQkJCSAgKChzcm1tdV9tb2R0eXBlICE9IEN5cHJlc3MgJiYgXAotCQkJICAgIHNybW11X21vZHR5cGUgIT0gQ3lwcmVzc192RSAmJiBcCi0JCQkgICAgc3JtbXVfbW9kdHlwZSAhPSBDeXByZXNzX3ZEKSA/IFwKLQkJCSAgIEhXQ0FQX1NQQVJDX01VTERJViA6IDApKSkKLQotLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCi0gICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgotICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uICovCi0KLSNkZWZpbmUgRUxGX1BMQVRGT1JNCShOVUxMKQotCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKLQotI2VuZGlmIC8qICEoX19BU01TUEFSQ19FTEZfSCkgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZWxmXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9lbGZfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDQzZjgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZWxmXzMyLmgKQEAgLTAsMCArMSwxNDUgQEAKKyNpZm5kZWYgX19BU01TUEFSQ19FTEZfSAorI2RlZmluZSBfX0FTTVNQQVJDX0VMRl9ICisKKy8qCisgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgorICovCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qCisgKiBTcGFyYyBzZWN0aW9uIHR5cGVzCisgKi8KKyNkZWZpbmUgU1RUX1JFR0lTVEVSCQkxMworCisvKgorICogU3BhcmMgRUxGIHJlbG9jYXRpb24gdHlwZXMKKyAqLworI2RlZmluZQlSX1NQQVJDX05PTkUJCTAKKyNkZWZpbmUJUl9TUEFSQ184CQkxCisjZGVmaW5lCVJfU1BBUkNfMTYJCTIKKyNkZWZpbmUJUl9TUEFSQ18zMgkJMworI2RlZmluZQlSX1NQQVJDX0RJU1A4CQk0CisjZGVmaW5lCVJfU1BBUkNfRElTUDE2CQk1CisjZGVmaW5lCVJfU1BBUkNfRElTUDMyCQk2CisjZGVmaW5lCVJfU1BBUkNfV0RJU1AzMAkJNworI2RlZmluZQlSX1NQQVJDX1dESVNQMjIJCTgKKyNkZWZpbmUJUl9TUEFSQ19ISTIyCQk5CisjZGVmaW5lCVJfU1BBUkNfMjIJCTEwCisjZGVmaW5lCVJfU1BBUkNfMTMJCTExCisjZGVmaW5lCVJfU1BBUkNfTE8xMAkJMTIKKyNkZWZpbmUJUl9TUEFSQ19HT1QxMAkJMTMKKyNkZWZpbmUJUl9TUEFSQ19HT1QxMwkJMTQKKyNkZWZpbmUJUl9TUEFSQ19HT1QyMgkJMTUKKyNkZWZpbmUJUl9TUEFSQ19QQzEwCQkxNgorI2RlZmluZQlSX1NQQVJDX1BDMjIJCTE3CisjZGVmaW5lCVJfU1BBUkNfV1BMVDMwCQkxOAorI2RlZmluZQlSX1NQQVJDX0NPUFkJCTE5CisjZGVmaW5lCVJfU1BBUkNfR0xPQl9EQVQJMjAKKyNkZWZpbmUJUl9TUEFSQ19KTVBfU0xPVAkyMQorI2RlZmluZQlSX1NQQVJDX1JFTEFUSVZFCTIyCisjZGVmaW5lCVJfU1BBUkNfVUEzMgkJMjMKKyNkZWZpbmUgUl9TUEFSQ19QTFQzMgkJMjQKKyNkZWZpbmUgUl9TUEFSQ19ISVBMVDIyCQkyNQorI2RlZmluZSBSX1NQQVJDX0xPUExUMTAJCTI2CisjZGVmaW5lIFJfU1BBUkNfUENQTFQzMgkJMjcKKyNkZWZpbmUgUl9TUEFSQ19QQ1BMVDIyCQkyOAorI2RlZmluZSBSX1NQQVJDX1BDUExUMTAJCTI5CisjZGVmaW5lIFJfU1BBUkNfMTAJCTMwCisjZGVmaW5lIFJfU1BBUkNfMTEJCTMxCisjZGVmaW5lIFJfU1BBUkNfNjQJCTMyCisjZGVmaW5lIFJfU1BBUkNfT0xPMTAJCTMzCisjZGVmaW5lIFJfU1BBUkNfV0RJU1AxNgkJNDAKKyNkZWZpbmUgUl9TUEFSQ19XRElTUDE5CQk0MQorI2RlZmluZSBSX1NQQVJDXzcJCTQzCisjZGVmaW5lIFJfU1BBUkNfNQkJNDQKKyNkZWZpbmUgUl9TUEFSQ182CQk0NQorCisvKiBCaXRzIHByZXNlbnQgaW4gQVRfSFdDQVAsIHByaW1hcmlseSBmb3IgU3BhcmMzMi4gICovCisKKyNkZWZpbmUgSFdDQVBfU1BBUkNfRkxVU0ggICAgICAgMSAgICAvKiBDUFUgc3VwcG9ydHMgZmx1c2ggaW5zdHJ1Y3Rpb24uICovCisjZGVmaW5lIEhXQ0FQX1NQQVJDX1NUQkFSICAgICAgIDIKKyNkZWZpbmUgSFdDQVBfU1BBUkNfU1dBUCAgICAgICAgNAorI2RlZmluZSBIV0NBUF9TUEFSQ19NVUxESVYgICAgICA4CisjZGVmaW5lIEhXQ0FQX1NQQVJDX1Y5CQkxNgorI2RlZmluZSBIV0NBUF9TUEFSQ19VTFRSQTMJMzIKKworI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAorCisvKiBGb3JtYXQgaXM6CisgKiAJRzAgLS0+IEc3CisgKglPMCAtLT4gTzcKKyAqCUwwIC0tPiBMNworICoJSTAgLS0+IEk3CisgKglQU1IsIFBDLCBuUEMsIFksIFdJTSwgVEJSCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworI2RlZmluZSBFTEZfTkdSRUcgMzgKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcJcHJfcmVnc1szMl07CisJCWRvdWJsZQkJcHJfZHJlZ3NbMTZdOworCX0gcHJfZnI7CisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDsKKwl1bnNpZ25lZCBsb25nCXByX2ZzcjsKKwl1bnNpZ25lZCBjaGFyCXByX3FjbnQ7CisJdW5zaWduZWQgY2hhcglwcl9xX2VudHJ5c2l6ZTsKKwl1bnNpZ25lZCBjaGFyCXByX2VuOworCXVuc2lnbmVkIGludAlwcl9xWzY0XTsKK30gZWxmX2ZwcmVnc2V0X3Q7CisKKyNpbmNsdWRlIDxhc20vbWJ1cy5oPgorCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fU1BBUkMpCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQVJDSAlFTV9TUEFSQworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMk1TQgorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjaWZuZGVmIENPTkZJR19TVU40CisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKKyNlbHNlCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTgxOTIKKyNlbmRpZgorCisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIChUQVNLX1VOTUFQUEVEX0JBU0UpCisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gIFRoaXMgY2FuIE5PVCBiZSBkb25lIGluIHVzZXJzcGFjZQorICAgb24gU3BhcmMuICAqLworCisvKiBTdW40YyBoYXMgbm9uZSBvZiB0aGUgY2FwYWJpbGl0aWVzLCBtb3N0IHN1bjRtJ3MgaGF2ZSB0aGVtIGFsbC4KKyAqIFhYWCBUaGlzIGlzIGdyb3NzLCBzZXQgc29tZSBnbG9iYWwgdmFyaWFibGUgYXQgYm9vdCB0aW1lLiAtRGF2ZU0KKyAqLworI2RlZmluZSBFTEZfSFdDQVAJKChBUkNIX1NVTjRDX1NVTjQpID8gMCA6IFwKKwkJCSAoSFdDQVBfU1BBUkNfRkxVU0ggfCBIV0NBUF9TUEFSQ19TVEJBUiB8IFwKKwkJCSAgSFdDQVBfU1BBUkNfU1dBUCB8IFwKKwkJCSAgKChzcm1tdV9tb2R0eXBlICE9IEN5cHJlc3MgJiYgXAorCQkJICAgIHNybW11X21vZHR5cGUgIT0gQ3lwcmVzc192RSAmJiBcCisJCQkgICAgc3JtbXVfbW9kdHlwZSAhPSBDeXByZXNzX3ZEKSA/IFwKKwkJCSAgIEhXQ0FQX1NQQVJDX01VTERJViA6IDApKSkKKworLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNCShOVUxMKQorCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKworI2VuZGlmIC8qICEoX19BU01TUEFSQ19FTEZfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2VsZl82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZWxmXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxOGExMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2VsZl82NC5oCkBAIC0wLDAgKzEsMjE3IEBACisjaWZuZGVmIF9fQVNNX1NQQVJDNjRfRUxGX0gKKyNkZWZpbmUgX19BU01fU1BBUkM2NF9FTEZfSAorCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgorCisvKgorICogU3BhcmMgc2VjdGlvbiB0eXBlcworICovCisjZGVmaW5lIFNUVF9SRUdJU1RFUgkJMTMKKworLyoKKyAqIFNwYXJjIEVMRiByZWxvY2F0aW9uIHR5cGVzCisgKi8KKyNkZWZpbmUJUl9TUEFSQ19OT05FCQkwCisjZGVmaW5lCVJfU1BBUkNfOAkJMQorI2RlZmluZQlSX1NQQVJDXzE2CQkyCisjZGVmaW5lCVJfU1BBUkNfMzIJCTMKKyNkZWZpbmUJUl9TUEFSQ19ESVNQOAkJNAorI2RlZmluZQlSX1NQQVJDX0RJU1AxNgkJNQorI2RlZmluZQlSX1NQQVJDX0RJU1AzMgkJNgorI2RlZmluZQlSX1NQQVJDX1dESVNQMzAJCTcKKyNkZWZpbmUJUl9TUEFSQ19XRElTUDIyCQk4CisjZGVmaW5lCVJfU1BBUkNfSEkyMgkJOQorI2RlZmluZQlSX1NQQVJDXzIyCQkxMAorI2RlZmluZQlSX1NQQVJDXzEzCQkxMQorI2RlZmluZQlSX1NQQVJDX0xPMTAJCTEyCisjZGVmaW5lCVJfU1BBUkNfR09UMTAJCTEzCisjZGVmaW5lCVJfU1BBUkNfR09UMTMJCTE0CisjZGVmaW5lCVJfU1BBUkNfR09UMjIJCTE1CisjZGVmaW5lCVJfU1BBUkNfUEMxMAkJMTYKKyNkZWZpbmUJUl9TUEFSQ19QQzIyCQkxNworI2RlZmluZQlSX1NQQVJDX1dQTFQzMAkJMTgKKyNkZWZpbmUJUl9TUEFSQ19DT1BZCQkxOQorI2RlZmluZQlSX1NQQVJDX0dMT0JfREFUCTIwCisjZGVmaW5lCVJfU1BBUkNfSk1QX1NMT1QJMjEKKyNkZWZpbmUJUl9TUEFSQ19SRUxBVElWRQkyMgorI2RlZmluZQlSX1NQQVJDX1VBMzIJCTIzCisjZGVmaW5lIFJfU1BBUkNfUExUMzIJCTI0CisjZGVmaW5lIFJfU1BBUkNfSElQTFQyMgkJMjUKKyNkZWZpbmUgUl9TUEFSQ19MT1BMVDEwCQkyNgorI2RlZmluZSBSX1NQQVJDX1BDUExUMzIJCTI3CisjZGVmaW5lIFJfU1BBUkNfUENQTFQyMgkJMjgKKyNkZWZpbmUgUl9TUEFSQ19QQ1BMVDEwCQkyOQorI2RlZmluZSBSX1NQQVJDXzEwCQkzMAorI2RlZmluZSBSX1NQQVJDXzExCQkzMQorI2RlZmluZSBSX1NQQVJDXzY0CQkzMgorI2RlZmluZSBSX1NQQVJDX09MTzEwCQkzMworI2RlZmluZSBSX1NQQVJDX1dESVNQMTYJCTQwCisjZGVmaW5lIFJfU1BBUkNfV0RJU1AxOQkJNDEKKyNkZWZpbmUgUl9TUEFSQ183CQk0MworI2RlZmluZSBSX1NQQVJDXzUJCTQ0CisjZGVmaW5lIFJfU1BBUkNfNgkJNDUKKworLyogQml0cyBwcmVzZW50IGluIEFUX0hXQ0FQLCBwcmltYXJpbHkgZm9yIFNwYXJjMzIuICAqLworCisjZGVmaW5lIEhXQ0FQX1NQQVJDX0ZMVVNIICAgICAgIDEgICAgLyogQ1BVIHN1cHBvcnRzIGZsdXNoIGluc3RydWN0aW9uLiAqLworI2RlZmluZSBIV0NBUF9TUEFSQ19TVEJBUiAgICAgICAyCisjZGVmaW5lIEhXQ0FQX1NQQVJDX1NXQVAgICAgICAgIDQKKyNkZWZpbmUgSFdDQVBfU1BBUkNfTVVMRElWICAgICAgOAorI2RlZmluZSBIV0NBUF9TUEFSQ19WOQkJMTYKKyNkZWZpbmUgSFdDQVBfU1BBUkNfVUxUUkEzCTMyCisjZGVmaW5lIEhXQ0FQX1NQQVJDX0JMS0lOSVQJNjQKKyNkZWZpbmUgSFdDQVBfU1BBUkNfTjIJCTEyOAorCisjZGVmaW5lIENPUkVfRFVNUF9VU0VfUkVHU0VUCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQVJDSAkJRU1fU1BBUkNWOQorI2RlZmluZSBFTEZfQ0xBU1MJCUVMRkNMQVNTNjQKKyNkZWZpbmUgRUxGX0RBVEEJCUVMRkRBVEEyTVNCCisKKy8qIEZvcm1hdCBvZiA2NC1iaXQgZWxmX2dyZWdzZXRfdCBpczoKKyAqIAlHMCAtLT4gRzcKKyAqIAlPMCAtLT4gTzcKKyAqIAlMMCAtLT4gTDcKKyAqIAlJMCAtLT4gSTcKKyAqCVRTVEFURQorICoJVFBDCisgKglUTlBDCisgKglZCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworI2RlZmluZSBFTEZfTkdSRUcgMzYKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nCXByX3JlZ3NbMzJdOworCXVuc2lnbmVkIGxvbmcJcHJfZnNyOworCXVuc2lnbmVkIGxvbmcJcHJfZ3NyOworCXVuc2lnbmVkIGxvbmcJcHJfZnByczsKK30gZWxmX2ZwcmVnc2V0X3Q7CisKKy8qIEZvcm1hdCBvZiAzMi1iaXQgZWxmX2dyZWdzZXRfdCBpczoKKyAqIAlHMCAtLT4gRzcKKyAqCU8wIC0tPiBPNworICoJTDAgLS0+IEw3CisgKglJMCAtLT4gSTcKKyAqCVBTUiwgUEMsIG5QQywgWSwgV0lNLCBUQlIKKyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgY29tcGF0X2VsZl9ncmVnX3Q7CisjZGVmaW5lIENPTVBBVF9FTEZfTkdSRUcgMzgKK3R5cGVkZWYgY29tcGF0X2VsZl9ncmVnX3QgY29tcGF0X2VsZl9ncmVnc2V0X3RbQ09NUEFUX0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGludAlwcl9yZWdzWzMyXTsKKwkJdW5zaWduZWQgbG9uZwlwcl9kcmVnc1sxNl07CisJfSBwcl9mcjsKKwl1bnNpZ25lZCBpbnQgX191bnVzZWQ7CisJdW5zaWduZWQgaW50CXByX2ZzcjsKKwl1bnNpZ25lZCBjaGFyCXByX3FjbnQ7CisJdW5zaWduZWQgY2hhcglwcl9xX2VudHJ5c2l6ZTsKKwl1bnNpZ25lZCBjaGFyCXByX2VuOworCXVuc2lnbmVkIGludAlwcl9xWzY0XTsKK30gY29tcGF0X2VsZl9mcHJlZ3NldF90OworCisvKiBVbHRyYVNwYXJjIGV4dGVuc2lvbnMuICBTdGlsbCB1bnVzZWQsIGJ1dCB3aWxsIGJlIGV2ZW50dWFsbHkuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBwcl90eXBlOworCXVuc2lnbmVkIGludCBwcl9hbGlnbjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1bmlvbiB7CisJCQkJdW5zaWduZWQgaW50CXByX3JlZ3NbMzJdOworCQkJCXVuc2lnbmVkIGxvbmcJcHJfZHJlZ3NbMTZdOworCQkJCWxvbmcgZG91YmxlCXByX3FyZWdzWzhdOworCQkJfSBwcl94ZnI7CisJCX0gcHJfdjhwOworCQl1bnNpZ25lZCBpbnQJcHJfeGZzcjsKKwkJdW5zaWduZWQgaW50CXByX2ZwcnM7CisJCXVuc2lnbmVkIGludAlwcl94Z1s4XTsKKwkJdW5zaWduZWQgaW50CXByX3hvWzhdOworCQl1bnNpZ25lZCBsb25nCXByX3RzdGF0ZTsKKwkJdW5zaWduZWQgaW50CXByX2ZpbGxlcls4XTsKKwl9IHByX3VuOworfSBlbGZfeHJlZ3NldF90OworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KQkJKCh4KS0+ZV9tYWNoaW5lID09IEVMRl9BUkNIKQorI2RlZmluZSBjb21wYXRfZWxmX2NoZWNrX2FyY2goeCkJKCh4KS0+ZV9tYWNoaW5lID09IEVNX1NQQVJDIHx8IFwKKwkJCQkJICh4KS0+ZV9tYWNoaW5lID09IEVNX1NQQVJDMzJQTFVTKQorI2RlZmluZSBjb21wYXRfc3RhcnRfdGhyZWFkCQlzdGFydF90aHJlYWQzMgorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCVBBR0VfU0laRQorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UJCTB4MDAwMDAxMDAwMDAwMDAwMFVMCisjZGVmaW5lIENPTVBBVF9FTEZfRVRfRFlOX0JBU0UJMHgwMDAwMDAwMDcwMDAwMDAwVUwKKworCisvKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0CisgICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBjcHUgc3VwcG9ydHMuICAqLworCisvKiBPbiBVbHRyYSwgd2Ugc3VwcG9ydCBhbGwgb2YgdGhlIHY4IGNhcGFiaWxpdGllcy4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNwYXJjNjRfZWxmX2h3Y2FwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNhcCA9IChIV0NBUF9TUEFSQ19GTFVTSCB8IEhXQ0FQX1NQQVJDX1NUQkFSIHwKKwkJCSAgICBIV0NBUF9TUEFSQ19TV0FQIHwgSFdDQVBfU1BBUkNfTVVMRElWIHwKKwkJCSAgICBIV0NBUF9TUEFSQ19WOSk7CisKKwlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpCisJCWNhcCB8PSBIV0NBUF9TUEFSQ19VTFRSQTM7CisJZWxzZSBpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgeworCQlpZiAoc3VuNHZfY2hpcF90eXBlID09IFNVTjRWX0NISVBfTklBR0FSQTEgfHwKKwkJICAgIHN1bjR2X2NoaXBfdHlwZSA9PSBTVU40Vl9DSElQX05JQUdBUkEyKQorCQkJY2FwIHw9IEhXQ0FQX1NQQVJDX0JMS0lOSVQ7CisJCWlmIChzdW40dl9jaGlwX3R5cGUgPT0gU1VONFZfQ0hJUF9OSUFHQVJBMikKKwkJCWNhcCB8PSBIV0NBUF9TUEFSQ19OMjsKKwl9CisKKwlyZXR1cm4gY2FwOworfQorCisjZGVmaW5lIEVMRl9IV0NBUAlzcGFyYzY0X2VsZl9od2NhcCgpOworCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNCShOVUxMKQorCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpCQkJXAorZG8gewl1bnNpZ25lZCBsb25nIG5ld19mbGFncyA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3M7IFwKKwluZXdfZmxhZ3MgJj0gX1RJRl8zMkJJVDsJCQlcCisJaWYgKChleCkuZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMikJXAorCQluZXdfZmxhZ3MgfD0gX1RJRl8zMkJJVDsJCVwKKwllbHNlCQkJCQkJXAorCQluZXdfZmxhZ3MgJj0gfl9USUZfMzJCSVQ7CQlcCisJaWYgKChjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzICYgX1RJRl8zMkJJVCkgXAorCSAgICAhPSBuZXdfZmxhZ3MpCQkJCVwKKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CVwKKwllbHNlCQkJCQkJXAorCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfQUJJX1BFTkRJTkcpOwlcCisJLyogZmx1c2hfdGhyZWFkIHdpbGwgdXBkYXRlIHBnZCBjYWNoZSAqLwlcCisJaWYgKGliY3MyKQkJCQkJXAorCQlzZXRfcGVyc29uYWxpdHkoUEVSX1NWUjQpOwkJXAorCWVsc2UgaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCisJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICEoX19BU01fU1BBUkM2NF9FTEZfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2VudmN0cmwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2VudmN0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjRmYTdlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZW52Y3RybC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICoKKyAqIGVudmN0cmwuaDogRGVmaW5pdGlvbnMgZm9yIGFjY2VzcyB0byB0aGUgaTJjIGVudmlyb25tZW50CisgKiAgICAgICAgICAgIG1vbml0b3Jpbmcgb24gVWx0cmFzcGFyYyBzeXN0ZW1zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIFZpbmggVHJ1b25nICAodmluaC50cnVvbmdAZW5nLnN1bi5jb20pCisgKiBWVCAtIEFkZCBhbGwgaW9jdGwgY29tbWFuZHMgYW5kIGVudmlyb25tZW50IHN0YXR1cyBkZWZpbml0aW9ucworICogVlQgLSBBZGQgYXBwbGljYXRpb24gbm90ZQorICovCisjaWZuZGVmIF9TUEFSQzY0X0VOVkNUUkxfSAorI2RlZmluZSBfU1BBUkM2NF9FTlZDVFJMX0ggMQorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyogQXBwbGljYXRpb24gbm90ZToKKyAqCisgKiBUaGUgZHJpdmVyIHN1cHBvcnRzIDQgb3BlcmF0aW9uczogb3BlbigpLCBjbG9zZSgpLCBpb2N0bCgpLCByZWFkKCkKKyAqIFRoZSBkZXZpY2UgbmFtZSBpcyAvZGV2L2VudmN0cmwuCisgKiBCZWxvdyBpcyBzYW1wbGUgdXNhZ2U6CisgKgorICoJZmQgPSBvcGVuKCIvZGV2L2VudnRybCIsIE9fUkRPTkxZKTsKKyAqCWlmIChpb2N0bChmZCwgRU5WQ1RSTF9SRUFEX1NIVVRET1dOX1RFTVBFUkFUVVJFLCAwKSA8IDApCisgKgkJcHJpbnRmKCJlcnJvclxuIik7CisgKglyZXQgPSByZWFkKGZkLCBidWYsIDEwKTsKKyAqCWNsb3NlKGZkKTsKKyAqCisgKiBOb3RpY2UgaW4gdGhlIGNhc2Ugb2YgY3B1IHZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlLCB0aGUgZGVmYXVsdCBpcworICogY3B1MC4gIElmIHdlIG5lZWQgdG8ga25vdyB0aGUgaW5mbyBvZiBjcHUxLCBjcHUyLCBjcHUzLCB3ZSBuZWVkIHRvCisgKiBwYXNzIGluIGNwdSBudW1iZXIgaW4gaW9jdGwoKSBsYXN0IHBhcmFtZXRlci4gIEZvciBleGFtcGxlLCB0bworICogZ2V0IHRoZSB2b2x0YWdlIG9mIGNwdTI6CisgKgorICoJaW9jdGxidWZbMF0gPSAyOworICoJaWYgKGlvY3RsKGZkLCBFTlZDVFJMX1JFQURfQ1BVX1ZPTFRBR0UsIGlvY3RsYnVmKSA8IDApCisgKgkJcHJpbnRmKCJlcnJvclxuIik7CisgKglyZXQgPSByZWFkKGZkLCBidWYsIDEwKTsKKyAqCisgKiBBbGwgdGhlIHJldHVybiB2YWx1ZXMgYXJlIGluIGFzY2lpLiAgU28gY2hlY2sgcmVhZCByZXR1cm4gdmFsdWUKKyAqIGFuZCBkbyBhcHByb3ByaWF0ZSBjb252ZXJzaW9ucyBpbiB5b3VyIGFwcGxpY2F0aW9uLgorICovCisKKy8qIElPQ1RMIGNvbW1hbmRzICovCisKKy8qIE5vdGU6IHRoZXNlIGNvbW1hbmRzIHJlZmxlY3QgcG9zc2libGUgbW9uaXRvciBmZWF0dXJlcy4KKyAqIFNvbWUgYm9hcmRzIGNob29zZSB0byBzdXBwb3J0IHNvbWUgb2YgdGhlIGZlYXR1cmVzIG9ubHkuCisgKi8KKyNkZWZpbmUgRU5WQ1RSTF9SRF9DUFVfVEVNUEVSQVRVUkUJX0lPUigncCcsIDB4NDAsIGludCkKKyNkZWZpbmUgRU5WQ1RSTF9SRF9DUFVfVk9MVEFHRQkJX0lPUigncCcsIDB4NDEsIGludCkKKyNkZWZpbmUgRU5WQ1RSTF9SRF9GQU5fU1RBVFVTCQlfSU9SKCdwJywgMHg0MiwgaW50KQorI2RlZmluZSBFTlZDVFJMX1JEX1dBUk5JTkdfVEVNUEVSQVRVUkUJX0lPUigncCcsIDB4NDMsIGludCkKKyNkZWZpbmUgRU5WQ1RSTF9SRF9TSFVURE9XTl9URU1QRVJBVFVSRQlfSU9SKCdwJywgMHg0NCwgaW50KQorI2RlZmluZSBFTlZDVFJMX1JEX1ZPTFRBR0VfU1RBVFVTCV9JT1IoJ3AnLCAweDQ1LCBpbnQpCisjZGVmaW5lIEVOVkNUUkxfUkRfU0NTSV9URU1QRVJBVFVSRQlfSU9SKCdwJywgMHg0NiwgaW50KQorI2RlZmluZSBFTlZDVFJMX1JEX0VUSEVSTkVUX1RFTVBFUkFUVVJFCV9JT1IoJ3AnLCAweDQ3LCBpbnQpCisjZGVmaW5lIEVOVkNUUkxfUkRfTVRIUkJEX1RFTVBFUkFUVVJFCV9JT1IoJ3AnLCAweDQ4LCBpbnQpCisKKyNkZWZpbmUgRU5WQ1RSTF9SRF9HTE9CQUxBRERSRVNTCV9JT1IoJ3AnLCAweDQ5LCBpbnQpCisKKy8qIFJlYWQgcmV0dXJuIHZhbHVlcyBmb3IgYSB2b2x0YWdlIHN0YXR1cyByZXF1ZXN0LiAqLworI2RlZmluZSBFTlZDVFJMX1ZPTFRBR0VfUE9XRVJTVVBQTFlfR09PRAkweDAxCisjZGVmaW5lIEVOVkNUUkxfVk9MVEFHRV9CQUQJCQkweDAyCisjZGVmaW5lIEVOVkNUUkxfUE9XRVJTVVBQTFlfQkFECQkJMHgwMworI2RlZmluZSBFTlZDVFJMX1ZPTFRBR0VfUE9XRVJTVVBQTFlfQkFECQkweDA0CisKKy8qIFJlYWQgcmV0dXJuIHZhbHVlcyBmb3IgYSBmYW4gc3RhdHVzIHJlcXVlc3QuCisgKiBBIGZhaWx1cmUgbWF0Y2ggbWVhbnMgZWl0aGVyIHRoZSBmYW4gZmFpbHMgb3IKKyAqIHRoZSBmYW4gaXMgbm90IGNvbm5lY3RlZC4gIFNvbWUgYm9hcmRzIGhhdmUgb3B0aW9uYWwKKyAqIGNvbm5lY3RvcnMgdG8gY29ubmVjdCBleHRyYSBmYW5zLgorICoKKyAqIFRoZXJlIGFyZSBtYXhpbXVtIDggbW9uaXRvciBmYW5zLiAgU29tZSBhcmUgY3B1IGZhbnMKKyAqIHNvbWUgYXJlIHN5c3RlbSBmYW5zLiAgVGhlIG1hc2sgYmVsb3cgb25seSBpbmRpY2F0ZXMKKyAqIGZhbiBieSBvcmRlciBudW1iZXIuCisgKiBCZWxvdyBpcyBhIHNhbXBsZSBhcHBsaWNhdGlvbjoKKyAqCisgKglpZiAoaW9jdGwoZmQsIEVOVkNUUkxfUkVBRF9GQU5fU1RBVFVTLCAwKSA8IDApIHsKKyAqCQlwcmludGYoImlvY3RsIGZhbiBmYWlsZWRcbiIpOworICoJfQorICoJaWYgKHJlYWQoZmQsIHJzbHQsIDEpIDw9IDApIHsKKyAqCQlwcmludGYoImVycm9yIG9yIGZhbiBub3QgbW9uaXRvcmVkXG4iKTsKKyAqCX0gZWxzZSB7CisgKgkJaWYgKHJzbHRbMF0gPT0gRU5WQ1RSTF9BTExfRkFOU19HT09EKSB7CisgKgkJCXByaW50ZigiYWxsIGZhbnMgZ29vZFxuIik7CisgKgl9IGVsc2UgaWYgKHJzbHRbMF0gPT0gRU5WQ1RSTF9BTExfRkFOU19CQUQpIHsKKyAqCQlwcmludGYoImFsbCBmYW5zIGJhZFxuIik7CisgKgl9IGVsc2UgeworICoJCWlmIChyc2x0WzBdICYgRU5WQ1RSTF9GQU4wX0ZBSUxVUkVfTUFTSykgeworICoJCQlwcmludGYoImZhbiAwIGZhaWxlZCBvciBub3QgY29ubmVjdGVkXG4iKTsKKyAqCX0KKyAqCS4uLi4uLgorICovCisKKyNkZWZpbmUgRU5WQ1RSTF9BTExfRkFOU19HT09ECQkJMHgwMAorI2RlZmluZSBFTlZDVFJMX0ZBTjBfRkFJTFVSRV9NQVNLCQkweDAxCisjZGVmaW5lIEVOVkNUUkxfRkFOMV9GQUlMVVJFX01BU0sJCTB4MDIKKyNkZWZpbmUgRU5WQ1RSTF9GQU4yX0ZBSUxVUkVfTUFTSwkJMHgwNAorI2RlZmluZSBFTlZDVFJMX0ZBTjNfRkFJTFVSRV9NQVNLCQkweDA4CisjZGVmaW5lIEVOVkNUUkxfRkFONF9GQUlMVVJFX01BU0sJCTB4MTAKKyNkZWZpbmUgRU5WQ1RSTF9GQU41X0ZBSUxVUkVfTUFTSwkJMHgyMAorI2RlZmluZSBFTlZDVFJMX0ZBTjZfRkFJTFVSRV9NQVNLCQkweDQwCisjZGVmaW5lIEVOVkNUUkxfRkFON19GQUlMVVJFX01BU0sJCTB4ODAKKyNkZWZpbmUgRU5WQ1RSTF9BTExfRkFOU19CQUQgCQkJMHhGRgorCisjZW5kaWYgLyogIShfU1BBUkM2NF9FTlZDVFJMX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9lc3RhdGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2VzdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMGMwODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9lc3RhdGUuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9TUEFSQzY0X0VTVEFURV9ICisjZGVmaW5lIF9TUEFSQzY0X0VTVEFURV9ICisKKy8qIFVsdHJhU1BBUkMtSUlJIEUtY2FjaGUgRXJyb3IgRW5hYmxlICovCisjZGVmaW5lIEVTVEFURV9FUlJPUl9GTVQJMHgwMDAwMDAwMDAwMDQwMDAwIC8qIEZvcmNlIE1UQUcgRUNDCQkqLworI2RlZmluZSBFU1RBVEVfRVJST1JfRk1FU1MJMHgwMDAwMDAwMDAwMDNjMDAwIC8qIEZvcmNlZCBNVEFHIEVDQyB2YWwJKi8KKyNkZWZpbmUgRVNUQVRFX0VSUk9SX0ZNRAkweDAwMDAwMDAwMDAwMDIwMDAgLyogRm9yY2UgREFUQSBFQ0MJCSovCisjZGVmaW5lIEVTVEFURV9FUlJPUl9GREVDQwkweDAwMDAwMDAwMDAwMDFmZjAgLyogRm9yY2VkIERBVEEgRUNDIHZhbAkqLworI2RlZmluZSBFU1RBVEVfRVJST1JfVUNFRU4JMHgwMDAwMDAwMDAwMDAwMDA4IC8qIFNlZSBiZWxvdwkJCSovCisjZGVmaW5lIEVTVEFURV9FUlJPUl9OQ0VFTgkweDAwMDAwMDAwMDAwMDAwMDIgLyogU2VlIGJlbG93CQkJKi8KKyNkZWZpbmUgRVNUQVRFX0VSUk9SX0NFRU4JMHgwMDAwMDAwMDAwMDAwMDAxIC8qIFNlZSBiZWxvdwkJCSovCisKKy8qIFVDRUVOIGVuYWJsZXMgdGhlIGZhc3RfRUNDX2Vycm9yIHRyYXAgZm9yOiAxKSBzb2Z0d2FyZSBjb3JyZWN0YWJsZSBFLWNhY2hlCisgKiBlcnJvcnMgMikgdW5jb3JyZWN0YWJsZSBFLWNhY2hlIGVycm9ycy4gIFN1Y2ggZXZlbnRzIG9ubHkgb2NjdXIgb24gcmVhZHMKKyAqIG9mIHRoZSBFLWNhY2hlIGJ5IHRoZSBsb2NhbCBwcm9jZXNzb3IgZm9yOiAxKSBkYXRhIGxvYWRzIDIpIGluc3RydWN0aW9uCisgKiBmZXRjaGVzIDMpIGF0b21pYyBvcGVyYXRpb25zLiAgU3VjaCBldmVudHMgX2Nhbm5vdF8gb2NjdXIgZm9yOiAxKSBtZXJnZQorICogMikgd3JpdGViYWNrIDIpIGNvcHlvdXQuICBUaGUgQUZTUiBiaXRzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSB0cmFwcyBhcmUKKyAqIFVDQyBhbmQgVUNVLgorICovCisKKy8qIE5DRUVOIGVuYWJsZXMgaW5zdHJ1Y3Rpb25fYWNjZXNzX2Vycm9yLCBkYXRhX2FjY2Vzc19lcnJvciwgYW5kIEVDQ19lcnJvciB0cmFwcworICogZm9yIHVuY29ycmVjdGFibGUgRUNDIGVycm9ycyBhbmQgc3lzdGVtIGVycm9ycy4KKyAqCisgKiBVbmNvcnJlY3RhYmxlIHN5c3RlbSBidXMgZGF0YSBlcnJvciBvciBNVEFHIEVDQyBlcnJvciwgc3lzdGVtIGJ1cyBUaW1lT1VULAorICogb3Igc3lzdGVtIGJ1cyBCdXNFUlI6CisgKiAxKSBBcyB0aGUgcmVzdWx0IG9mIGFuIGluc3RydWN0aW9uIGZldGNoLCB3aWxsIGdlbmVyYXRlIGluc3RydWN0aW9uX2FjY2Vzc19lcnJvcgorICogMikgQXMgdGhlIHJlc3VsdCBvZiBhIGxvYWQgZXRjLiB3aWxsIGdlbmVyYXRlIGRhdGFfYWNjZXNzX2Vycm9yLgorICogMykgQXMgdGhlIHJlc3VsdCBvZiBzdG9yZSBtZXJnZSBjb21wbGV0aW9uLCB3cml0ZWJhY2ssIG9yIGNvcHlvdXQgd2lsbAorICogICAgZ2VuZXJhdGUgYSBkaXNydXB0aW5nIEVDQ19lcnJvciB0cmFwLgorICogNCkgQXMgdGhlIHJlc3VsdCBvZiBzdWNoIGVycm9ycyBvbiBpbnN0cnVjdGlvbiB2ZWN0b3IgZmV0Y2ggY2FuIGdlbmVyYXRlIGFueQorICogICAgb2YgdGhlIDMgdHJhcCB0eXBlcy4KKyAqCisgKiBUaGUgQUZTUiBiaXRzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSB0cmFwcyBhcmUgRU1VLCBFRFUsIFdEVSwgQ1BVLCBJVlUsIFVFLAorICogQkVSUiwgYW5kIFRPLgorICovCisKKy8qIENFRU4gZW5hYmxlcyB0aGUgRUNDX2Vycm9yIHRyYXAgZm9yIGhhcmR3YXJlIGNvcnJlY3RlZCBFQ0MgZXJyb3JzLiAgU3lzdGVtIGJ1cworICogcmVhZHMgcmVzdWx0aW5nIGluIGEgaGFyZHdhcmUgY29ycmVjdGVkIGRhdGEgb3IgTVRBRyBFQ0MgZXJyb3Igd2lsbCBnZW5lcmF0ZSBhbgorICogRUNDX2Vycm9yIGRpc3J1cHRpbmcgdHJhcCB3aXRoIHRoaXMgYml0IGVuYWJsZWQuCisgKgorICogVGhpcyBzYW1lIHRyYXAgd2lsbCBhbHNvIGJlIGdlbmVyYXRlZCB3aGVuIGEgaGFyZHdhcmUgY29ycmVjdGVkIEVDQyBlcnJvciByZXN1bHRzCisgKiBkdXJpbmcgc3RvcmUgbWVyZ2UsIHdyaXRlYmFjaywgYW5kIGNvcHlvdXQgb3BlcmF0aW9ucy4KKyAqLworCisvKiBJbiBnZW5lcmFsLCBpZiB0aGUgdHJhcCBlbmFibGUgYml0cyBhYm92ZSBhcmUgZGlzYWJsZWQgdGhlIEFGU1IgYml0cyB3aWxsIHN0aWxsCisgKiBsb2cgdGhlIGV2ZW50cyBldmVuIHRob3VnaCB0aGUgdHJhcCB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQgYnkgdGhlIHByb2Nlc3Nvci4KKyAqLworCisjZW5kaWYgLyogX1NQQVJDNjRfRVNUQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2ZiaW8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZiaW8uaAppbmRleCBjMmIyN2U3Li5iOTIxNWEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9mYmlvLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZmJpby5oCkBAIC0xLDYgKzEsOSBAQAogI2lmbmRlZiBfX0xJTlVYX0ZCSU9fSAogI2RlZmluZSBfX0xJTlVYX0ZCSU9fSAogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBDb25zdGFudHMgdXNlZCBmb3IgZmJpbyBTdW5PUyBjb21wYXRpYmlsaXR5ICovCiAvKiAoQykgMTk5NiBNaWd1ZWwgZGUgSWNhemEgKi8KIApAQCAtMzgsNiArNDEsOSBAQAogI2RlZmluZSBGQlRZUEVfUENJX0lHQTE2ODIJMjMKICNkZWZpbmUgRkJUWVBFX1A5MTAwQ09MT1IJMjQKIAorI2RlZmluZSBGQlRZUEVfUENJX0dFTkVSSUMJMTAwMAorI2RlZmluZSBGQlRZUEVfUENJX01BQ0g2NAkxMDAxCisKIC8qIGZiaW8gaW9jdGxzICovCiAvKiBSZXR1cm5lZCBieSBGQklPR1RZUEUgKi8KIHN0cnVjdCAgZmJ0eXBlIHsKQEAgLTk3LDggKzEwMyw4IEBACiAgICAgICAgIHN0cnVjdCBmYmN1cnBvcyBob3Q7ICAgIC8qIGN1cnNvciBob3Qgc3BvdCAqLwogICAgICAgICBzdHJ1Y3QgZmJjbWFwIGNtYXA7ICAgICAvKiBjb2xvciBtYXAgaW5mbyAqLwogICAgICAgICBzdHJ1Y3QgZmJjdXJwb3Mgc2l6ZTsgICAvKiBjdXJzb3IgYml0IG1hcCBzaXplICovCi0gICAgICAgIGNoYXIgKmltYWdlOyAgICAgICAgICAgIC8qIGN1cnNvciBpbWFnZSBiaXRzICovCi0gICAgICAgIGNoYXIgKm1hc2s7ICAgICAgICAgICAgIC8qIGN1cnNvciBtYXNrIGJpdHMgKi8KKyAgICAgICAgY2hhciBfX3VzZXIgKmltYWdlOyAgICAgLyogY3Vyc29yIGltYWdlIGJpdHMgKi8KKyAgICAgICAgY2hhciBfX3VzZXIgKm1hc2s7ICAgICAgLyogY3Vyc29yIG1hc2sgYml0cyAqLwogfTsKIAogLyogc2V0L2dldCBjdXJzb3IgYXR0cmlidXRlcy9zaGFwZSAqLwpAQCAtMjk0LDQgKzMwMCwzMSBAQAogI2RlZmluZSBMRU9fTERfR0JMX01BUCAgICAgICAgIDB4MDEwMDkwMDAKICNkZWZpbmUgTEVPX1VOSzJfTUFQICAgICAgICAgICAweDAxMDBhMDAwCiAKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgIGZiY21hcDMyIHsKKwlpbnQgICAgICAgICAgICAgaW5kZXg7ICAgICAgICAgIC8qIGZpcnN0IGVsZW1lbnQgKDAgb3JpZ2luKSAqLworCWludCAgICAgICAgICAgICBjb3VudDsKKwl1MzIJCXJlZDsKKwl1MzIJCWdyZWVuOworCXUzMgkJYmx1ZTsKK307CisKKyNkZWZpbmUgRkJJT1BVVENNQVAzMglfSU9XKCdGJywgMywgc3RydWN0IGZiY21hcDMyKQorI2RlZmluZSBGQklPR0VUQ01BUDMyCV9JT1coJ0YnLCA0LCBzdHJ1Y3QgZmJjbWFwMzIpCisKK3N0cnVjdCBmYmN1cnNvcjMyIHsKKwlzaG9ydCBzZXQ7CQkvKiB3aGF0IHRvIHNldCwgY2hvb3NlIGZyb20gdGhlIGxpc3QgYWJvdmUgKi8KKwlzaG9ydCBlbmFibGU7CQkvKiBjdXJzb3Igb24vb2ZmICovCisJc3RydWN0IGZiY3VycG9zIHBvczsJLyogY3Vyc29yIHBvc2l0aW9uICovCisJc3RydWN0IGZiY3VycG9zIGhvdDsJLyogY3Vyc29yIGhvdCBzcG90ICovCisJc3RydWN0IGZiY21hcDMyIGNtYXA7CS8qIGNvbG9yIG1hcCBpbmZvICovCisJc3RydWN0IGZiY3VycG9zIHNpemU7CS8qIGN1cnNvciBiaXQgbWFwIHNpemUgKi8KKwl1MzIJaW1hZ2U7CQkvKiBjdXJzb3IgaW1hZ2UgYml0cyAqLworCXUzMgltYXNrOwkJLyogY3Vyc29yIG1hc2sgYml0cyAqLworfTsKKworI2RlZmluZSBGQklPU0NVUlNPUjMyCV9JT1coJ0YnLCAyNCwgc3RydWN0IGZiY3Vyc29yMzIpCisjZGVmaW5lIEZCSU9HQ1VSU09SMzIJX0lPVygnRicsIDI1LCBzdHJ1Y3QgZmJjdXJzb3IzMikKKyNlbmRpZgorCiAjZW5kaWYgLyogX19MSU5VWF9GQklPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9mY250bC5oCmluZGV4IDA3YmQyZDguLmQ0ZDljOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZmNudGwuaApAQCAtMTAsNyArMTAsMTEgQEAKICNkZWZpbmUgT19FWENMCQkweDA4MDAJLyogbm90IGZjbnRsICovCiAjZGVmaW5lIE9fU1lOQwkJMHgyMDAwCiAjZGVmaW5lIE9fTk9OQkxPQ0sJMHg0MDAwCisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNkZWZpbmUgT19OREVMQVkJMHgwMDA0CisjZWxzZQogI2RlZmluZSBPX05ERUxBWQkoMHgwMDA0IHwgT19OT05CTE9DSykKKyNlbmRpZgogI2RlZmluZSBPX05PQ1RUWQkweDgwMDAJLyogbm90IGZjbnRsICovCiAjZGVmaW5lIE9fTEFSR0VGSUxFCTB4NDAwMDAKICNkZWZpbmUgT19ESVJFQ1QgICAgICAgIDB4MTAwMDAwIC8qIGRpcmVjdCBkaXNrIGFjY2VzcyBoaW50ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9maGMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZoYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OGNiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9maGMuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIGZoYy5oOiBTdHJ1Y3R1cmVzIGZvciBjZW50cmFsL2ZoYyBwc2V1ZG8gZHJpdmVyIG9uIFN1bmZpcmUvU3RhcmZpcmUvV2lsZGZpcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X0ZIQ19ICisjZGVmaW5lIF9TUEFSQzY0X0ZIQ19ICisKKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorCisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vdXBhLmg+CisKK3N0cnVjdCBsaW51eF9maGM7CisKKy8qIENsb2NrIGJvYXJkIHJlZ2lzdGVyIG9mZnNldHMuICovCisjZGVmaW5lIENMT0NLX0NUUkwJMHgwMFVMCS8qIE1haW4gY29udHJvbCAqLworI2RlZmluZSBDTE9DS19TVEFUMQkweDEwVUwJLyogU3RhdHVzIG9uZSAqLworI2RlZmluZSBDTE9DS19TVEFUMgkweDIwVUwJLyogU3RhdHVzIHR3byAqLworI2RlZmluZSBDTE9DS19QV1JTVEFUCTB4MzBVTAkvKiBQb3dlciBzdGF0dXMgKi8KKyNkZWZpbmUgQ0xPQ0tfUFdSUFJFUwkweDQwVUwJLyogUG93ZXIgcHJlc2VuY2UgKi8KKyNkZWZpbmUgQ0xPQ0tfVEVNUAkweDUwVUwJLyogVGVtcGVyYXR1cmUgKi8KKyNkZWZpbmUgQ0xPQ0tfSVJRRElBRwkweDYwVUwJLyogSVJRIGRpYWdub3N0aWNzICovCisjZGVmaW5lIENMT0NLX1BXUlNUQVQyCTB4NzBVTAkvKiBQb3dlciBzdGF0dXMgdHdvICovCisKKyNkZWZpbmUgQ0xPQ0tfQ1RSTF9MTEVECQkweDA0CS8qIExlZnQgTEVELCAwID09IG9uICovCisjZGVmaW5lIENMT0NLX0NUUkxfTUxFRAkJMHgwMgkvKiBNaWQgTEVELCAxID09IG9uICovCisjZGVmaW5lIENMT0NLX0NUUkxfUkxFRAkJMHgwMQkvKiBSSWdodCBMRUQsIDEgPT0gb24gKi8KKworc3RydWN0IGxpbnV4X2NlbnRyYWwgeworCXN0cnVjdCBsaW51eF9maGMJCSpjaGlsZDsKKwl1bnNpZ25lZCBsb25nCQkJY2ZyZWc7CisJdW5zaWduZWQgbG9uZwkJCWNsa3JlZ3M7CisJdW5zaWduZWQgbG9uZwkJCWNsa3ZlcjsKKwlpbnQJCQkJc2xvdHM7CisJc3RydWN0IGRldmljZV9ub2RlCQkqcHJvbV9ub2RlOworCisJc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzCWNlbnRyYWxfcmFuZ2VzW1BST01SRUdfTUFYXTsKKwlpbnQJCQkJbnVtX2NlbnRyYWxfcmFuZ2VzOworfTsKKworLyogRmlyZWhvc2UgY29udHJvbGxlciByZWdpc3RlciBvZmZzZXRzICovCitzdHJ1Y3QgZmhjX3JlZ3MgeworCXVuc2lnbmVkIGxvbmcJCQlwcmVnczsJLyogRkhDIGludGVybmFsIHJlZ3MgKi8KKyNkZWZpbmUgRkhDX1BSRUdTX0lECTB4MDBVTAkvKiBGSEMgSUQgKi8KKyNkZWZpbmUgIEZIQ19JRF9WRVJTCQkweGYwMDAwMDAwIC8qIFZlcnNpb24gb2YgdGhpcyBGSEMJCSovCisjZGVmaW5lICBGSENfSURfUEFSVElECQkweDBmZmZmMDAwIC8qIFBhcnQgSUQgY29kZSAoMHgwZjlmID09IEZIQykJKi8KKyNkZWZpbmUgIEZIQ19JRF9NQU5VRgkJMHgwMDAwMDA3ZSAvKiBNYW51ZmFjdHVyZXIgKDB4M2UgPT0gU1VOJ3MgSkVERUMpKi8KKyNkZWZpbmUgIEZIQ19JRF9SRVNWCQkweDAwMDAwMDAxIC8qIFJlYWQgYXMgb25lCQkJKi8KKyNkZWZpbmUgRkhDX1BSRUdTX1JDUwkweDEwVUwJLyogRkhDIFJlc2V0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICBGSENfUkNTX1BPUgkJMHg4MDAwMDAwMCAvKiBMYXN0IHJlc2V0IHdhcyBhIHBvd2VyIGN5Y2xlCSovCisjZGVmaW5lICBGSENfUkNTX1NQT1IJCTB4NDAwMDAwMDAgLyogTGFzdCByZXNldCB3YXMgc3cgcG93ZXIgb24gcmVzZXQJKi8KKyNkZWZpbmUgIEZIQ19SQ1NfU1hJUgkJMHgyMDAwMDAwMCAvKiBMYXN0IHJlc2V0IHdhcyBzdyBYSVIgcmVzZXQJKi8KKyNkZWZpbmUgIEZIQ19SQ1NfQlBPUgkJMHgxMDAwMDAwMCAvKiBMYXN0IHJlc2V0IHdhcyBkdWUgdG8gUE9SIGJ1dHRvbgkqLworI2RlZmluZSAgRkhDX1JDU19CWElSCQkweDA4MDAwMDAwIC8qIExhc3QgcmVzZXQgd2FzIGR1ZSB0byBYSVIgYnV0dG9uCSovCisjZGVmaW5lICBGSENfUkNTX1dFVkVOVAkJMHgwNDAwMDAwMCAvKiBDUFUgcmVzZXQgd2FzIGR1ZSB0byB3YWtldXAgZXZlbnQJKi8KKyNkZWZpbmUgIEZIQ19SQ1NfQ0ZBVEFMCQkweDAyMDAwMDAwIC8qIENlbnRlcnBsYW5lIEZhdGFsIEVycm9yIHNpZ25hbGxlZAkqLworI2RlZmluZSAgRkhDX1JDU19GRU5BQgkJMHgwMTAwMDAwMCAvKiBGYXRhbCBlcnJvcnMgZWxpY2l0IHN5c3RlbSByZXNldAkqLworI2RlZmluZSBGSENfUFJFR1NfQ1RSTAkweDIwVUwJLyogRkhDIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX0lDUwkweDAwMTAwMDAwIC8qIElnbm9yZSBDZW50ZXJwbGFuZSBTaWduYWxzCSovCisjZGVmaW5lICBGSENfQ09OVFJPTF9GUlNUCTB4MDAwODAwMDAgLyogRmF0YWwgRXJyb3IgUmVzZXQgRW5hYmxlCQkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfTEZBVAkweDAwMDQwMDAwIC8qIEFDL0RDIHNpZ25hbGxlZCBhIGxvY2FsIGVycm9yCSovCisjZGVmaW5lICBGSENfQ09OVFJPTF9TTElORQkweDAwMDEwMDAwIC8qIEZpcm13YXJlIFN5bmNocm9uaXphdGlvbiBMaW5lCSovCisjZGVmaW5lICBGSENfQ09OVFJPTF9EQ0QJMHgwMDAwODAwMCAvKiBEQy0tPkRDIENvbnZlcnRlciBEaXNhYmxlCQkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfUE9GRgkweDAwMDA0MDAwIC8qIEFDL0RDIENvbnRyb2xsZXIgUExMIERpc2FibGUJKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX0ZPRkYJMHgwMDAwMjAwMCAvKiBGSEMgQ29udHJvbGxlciBQTEwgRGlzYWJsZQkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfQU9GRgkweDAwMDAxMDAwIC8qIENQVSBBIFNSQU0vU0JEIExvdyBQb3dlciBNb2RlCSovCisjZGVmaW5lICBGSENfQ09OVFJPTF9CT0ZGCTB4MDAwMDA4MDAgLyogQ1BVIEIgU1JBTS9TQkQgTG93IFBvd2VyIE1vZGUJKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX1BTT0ZGCTB4MDAwMDA0MDAgLyogVHVybnMgb2ZmIHRoaXMgRkhDJ3MgcG93ZXIgc3VwcGx5CSovCisjZGVmaW5lICBGSENfQ09OVFJPTF9JWElTVAkweDAwMDAwMjAwIC8qIDA9RkhDIHRlbGxzIGNsb2NrIGJvYXJkIGl0IGV4aXN0cwkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfWE1TVFIJMHgwMDAwMDEwMCAvKiAxPUNhdXNlcyB0aGlzIEZIQyB0byBiZSBYSVIgbWFzdGVyKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX0xMRUQJMHgwMDAwMDA0MCAvKiAwPUxlZnQgTEVEIE9OCQkJKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX01MRUQJMHgwMDAwMDAyMCAvKiAxPU1pZGRsZSBMRUQgT04JCQkqLworI2RlZmluZSAgRkhDX0NPTlRST0xfUkxFRAkweDAwMDAwMDEwIC8qIDE9UmlnaHQgTEVECQkJKi8KKyNkZWZpbmUgIEZIQ19DT05UUk9MX0JQSU5TCTB4MDAwMDAwMDMgLyogU3BhcmUgQmlkaXJlY3Rpb25hbCBQaW5zCQkqLworI2RlZmluZSBGSENfUFJFR1NfQlNSCTB4MzBVTAkvKiBGSEMgQm9hcmQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICBGSENfQlNSX0RBNjQJCTB4MDAwNDAwMDAgLyogUG9ydCBBOiAwPTEyOGJpdCAxPTY0Yml0IGRhdGEgcGF0aCAqLworI2RlZmluZSAgRkhDX0JTUl9EQjY0CQkweDAwMDIwMDAwIC8qIFBvcnQgQjogMD0xMjhiaXQgMT02NGJpdCBkYXRhIHBhdGggKi8KKyNkZWZpbmUgIEZIQ19CU1JfQklECQkweDAwMDFlMDAwIC8qIEJvYXJkIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgIEZIQ19CU1JfU0EJCTB4MDAwMDFjMDAgLyogUG9ydCBBIFVQQSBTcGVlZCAoZnJvbSB0aGUgcGlucykgICAqLworI2RlZmluZSAgRkhDX0JTUl9TQgkJMHgwMDAwMDM4MCAvKiBQb3J0IEIgVVBBIFNwZWVkIChmcm9tIHRoZSBwaW5zKSAgICovCisjZGVmaW5lICBGSENfQlNSX05ESUFHCQkweDAwMDAwMDQwIC8qIE5vdCBpbiBEaWFnIE1vZGUgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgIEZIQ19CU1JfTlRCRUQJCTB4MDAwMDAwMjAgLyogTm90IGluIFRlc3RCRUQgTW9kZSAgICAgICAgICAgICAgICAqLworI2RlZmluZSAgRkhDX0JTUl9OSUEJCTB4MDAwMDAwMWMgLyogSnVtcGVyLCBiaXQgMTggaW4gUFJPTSBzcGFjZSAgICAgICAqLworI2RlZmluZSAgRkhDX0JTUl9TSQkJMHgwMDAwMDAwMSAvKiBTcGFyZSBpbnB1dCBwaW4gdmFsdWUgICAgICAgICAgICAgICovCisjZGVmaW5lIEZIQ19QUkVHU19FQ0MJMHg0MFVMCS8qIEZIQyBFQ0MgQ29udHJvbCBSZWdpc3RlciAoMTYgYml0cykgKi8KKyNkZWZpbmUgRkhDX1BSRUdTX0pDVFJMCTB4ZjBVTAkvKiBGSEMgSlRBRyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICBGSENfSlRBR19DVFJMX01FTkFCCTB4ODAwMDAwMDAgLyogSW5kaWNhdGVzIHRoaXMgaXMgSlRBRyBNYXN0ZXIJICovCisjZGVmaW5lICBGSENfSlRBR19DVFJMX01OT05FCTB4NDAwMDAwMDAgLyogSW5kaWNhdGVzIG5vIEpUQUcgTWFzdGVyIHByZXNlbnQJICovCisjZGVmaW5lIEZIQ19QUkVHU19KQ01ECTB4MTAwVUwJLyogRkhDIEpUQUcgQ29tbWFuZCBSZWdpc3RlciAqLworCXVuc2lnbmVkIGxvbmcJCQlpcmVnOwkvKiBGSEMgSUdOIHJlZyAqLworI2RlZmluZSBGSENfSVJFR19JR04JMHgwMFVMCS8qIFRoaXMgRkhDJ3MgSUdOICovCisJdW5zaWduZWQgbG9uZwkJCWZmcmVnczsJLyogRkhDIGZhbmZhaWwgcmVncyAqLworI2RlZmluZSBGSENfRkZSRUdTX0lNQVAJMHgwMFVMCS8qIEZIQyBGYW5mYWlsIElNQVAgKi8KKyNkZWZpbmUgRkhDX0ZGUkVHU19JQ0xSCTB4MTBVTAkvKiBGSEMgRmFuZmFpbCBJQ0xSICovCisJdW5zaWduZWQgbG9uZwkJCXNyZWdzOwkvKiBGSEMgc3lzdGVtIHJlZ3MgKi8KKyNkZWZpbmUgRkhDX1NSRUdTX0lNQVAJMHgwMFVMCS8qIEZIQyBTeXN0ZW0gSU1BUCAqLworI2RlZmluZSBGSENfU1JFR1NfSUNMUgkweDEwVUwJLyogRkhDIFN5c3RlbSBJQ0xSICovCisJdW5zaWduZWQgbG9uZwkJCXVyZWdzOwkvKiBGSEMgdWFydCByZWdzICovCisjZGVmaW5lIEZIQ19VUkVHU19JTUFQCTB4MDBVTAkvKiBGSEMgVWFydCBJTUFQICovCisjZGVmaW5lIEZIQ19VUkVHU19JQ0xSCTB4MTBVTAkvKiBGSEMgVWFydCBJQ0xSICovCisJdW5zaWduZWQgbG9uZwkJCXRyZWdzOwkvKiBGSEMgVE9EIHJlZ3MgKi8KKyNkZWZpbmUgRkhDX1RSRUdTX0lNQVAJMHgwMFVMCS8qIEZIQyBUT0QgSU1BUCAqLworI2RlZmluZSBGSENfVFJFR1NfSUNMUgkweDEwVUwJLyogRkhDIFRPRCBJQ0xSICovCit9OworCitzdHJ1Y3QgbGludXhfZmhjIHsKKwlzdHJ1Y3QgbGludXhfZmhjCQkqbmV4dDsKKwlzdHJ1Y3QgbGludXhfY2VudHJhbAkJKnBhcmVudDsJLyogTlVMTCBpZiBub3QgY2VudHJhbCBGSEMgKi8KKwlzdHJ1Y3QgZmhjX3JlZ3MJCQlmaGNfcmVnczsKKwlpbnQJCQkJYm9hcmQ7CisJaW50CQkJCWp0YWdfbWFzdGVyOworCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKnByb21fbm9kZTsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcwlmaGNfcmFuZ2VzW1BST01SRUdfTUFYXTsKKwlpbnQJCQkJbnVtX2ZoY19yYW5nZXM7Cit9OworCisjZW5kaWYgLyogIShfU1BBUkM2NF9GSENfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKaW5kZXggZDM5NzhlMC4uNmM2MjhiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKQEAgLTEsMzg4ICsxLDggQEAKLS8qIGFzbS1zcGFyYy9mbG9wcHkuaDogU3BhcmMgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEZsb3BweSBkcml2ZXIuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKLSAqLwotCi0jaWZuZGVmIF9fQVNNX1NQQVJDX0ZMT1BQWV9ICi0jZGVmaW5lIF9fQVNNX1NQQVJDX0ZMT1BQWV9ICi0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KLSNpbmNsdWRlIDxhc20vbWFjaGluZXMuaD4KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KLSNpbmNsdWRlIDxhc20vYXV4aW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLS8qIFdlIGRvbid0IG5lZWQgbm8gc3RpbmtpbicgSS9PIHBvcnQgYWxsb2NhdGlvbiBjcmFwLiAqLwotI3VuZGVmIHJlbGVhc2VfcmVnaW9uCi0jdW5kZWYgcmVxdWVzdF9yZWdpb24KLSNkZWZpbmUgcmVsZWFzZV9yZWdpb24oWCwgWSkJZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHJlcXVlc3RfcmVnaW9uKFgsIFksIFopCSgxKQotCi0vKiBSZWZlcmVuY2VzOgotICogMSkgTmV0YnNkIFN1biBmbG9wcHkgZHJpdmVyLgotICogMikgTkNSIDgyMDc3IGNvbnRyb2xsZXIgbWFudWFsCi0gKiAzKSBJbnRlbCA4MjA3NyBjb250cm9sbGVyIG1hbnVhbAotICovCi1zdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBzdGF0dXNfODIwNzI7ICAvKiBNYWluIFN0YXR1cyByZWcuICovCi0jZGVmaW5lIGRjcl84MjA3MiAgICAgICAgICAgICAgc3RhdHVzXzgyMDcyICAgLyogRGlnaXRhbCBDb250cm9sIHJlZy4gKi8KLSNkZWZpbmUgc3RhdHVzMV84MjA3NyAgICAgICAgICBzdGF0dXNfODIwNzIgICAvKiBBdXhpbGlhcnkgU3RhdHVzIHJlZy4gMSAqLwotCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkYXRhXzgyMDcyOyAgICAvKiBEYXRhIGZpZm8uICovCi0jZGVmaW5lIHN0YXR1czJfODIwNzcgICAgICAgICAgZGF0YV84MjA3MiAgICAgLyogQXV4aWxpYXJ5IFN0YXR1cyByZWcuIDIgKi8KLQotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZG9yXzgyMDc3OyAgICAgLyogRGlnaXRhbCBPdXRwdXQgcmVnLiAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgdGFwZWN0bF84MjA3NzsgLyogV2hhdCB0aGU/IFRhcGUgY29udHJvbCByZWc/ICovCi0KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHN0YXR1c184MjA3NzsgIC8qIE1haW4gU3RhdHVzIFJlZ2lzdGVyLiAqLwotI2RlZmluZSBkcnNfODIwNzcgICAgICAgICAgICAgIHN0YXR1c184MjA3NyAgIC8qIERpZ2l0YWwgUmF0ZSBTZWxlY3QgcmVnLiAqLwotCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkYXRhXzgyMDc3OyAgICAvKiBEYXRhIGZpZm8uICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX191bnVzZWQ7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkaXJfODIwNzc7ICAgICAvKiBEaWdpdGFsIElucHV0IHJlZy4gKi8KLSNkZWZpbmUgZGNyXzgyMDc3ICAgICAgICAgICAgICBkaXJfODIwNzcgICAgICAvKiBDb25maWcgQ29udHJvbCByZWcuICovCi19OwotCi0vKiBZb3UnbGwgb25seSBldmVyIGZpbmQgb25lIGNvbnRyb2xsZXIgb24gYSBTcGFyY1N0YXRpb24gYW55d2F5cy4gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciAqc3VuX2ZkYyA9IE5VTEw7Ci1leHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqZmRjX3N0YXR1czsKLQotc3RydWN0IHN1bl9mbG9wcHlfb3BzIHsKLQl1bnNpZ25lZCBjaGFyICgqZmRfaW5iKShpbnQgcG9ydCk7Ci0Jdm9pZCAoKmZkX291dGIpKHVuc2lnbmVkIGNoYXIgdmFsdWUsIGludCBwb3J0KTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3VuX2Zsb3BweV9vcHMgc3VuX2Zkb3BzOwotCi0jZGVmaW5lIGZkX2luYihwb3J0KSAgICAgICAgICAgICAgc3VuX2Zkb3BzLmZkX2luYihwb3J0KQotI2RlZmluZSBmZF9vdXRiKHZhbHVlLHBvcnQpICAgICAgIHN1bl9mZG9wcy5mZF9vdXRiKHZhbHVlLHBvcnQpCi0jZGVmaW5lIGZkX2VuYWJsZV9kbWEoKSAgICAgICAgICAgc3VuX2ZkX2VuYWJsZV9kbWEoKQotI2RlZmluZSBmZF9kaXNhYmxlX2RtYSgpICAgICAgICAgIHN1bl9mZF9kaXNhYmxlX2RtYSgpCi0jZGVmaW5lIGZkX3JlcXVlc3RfZG1hKCkgICAgICAgICAgKDApIC8qIG5vdGhpbmcuLi4gKi8KLSNkZWZpbmUgZmRfZnJlZV9kbWEoKSAgICAgICAgICAgICAvKiBub3RoaW5nLi4uICovCi0jZGVmaW5lIGZkX2NsZWFyX2RtYV9mZigpICAgICAgICAgLyogbm90aGluZy4uLiAqLwotI2RlZmluZSBmZF9zZXRfZG1hX21vZGUobW9kZSkgICAgIHN1bl9mZF9zZXRfZG1hX21vZGUobW9kZSkKLSNkZWZpbmUgZmRfc2V0X2RtYV9hZGRyKGFkZHIpICAgICBzdW5fZmRfc2V0X2RtYV9hZGRyKGFkZHIpCi0jZGVmaW5lIGZkX3NldF9kbWFfY291bnQoY291bnQpICAgc3VuX2ZkX3NldF9kbWFfY291bnQoY291bnQpCi0jZGVmaW5lIGZkX2VuYWJsZV9pcnEoKSAgICAgICAgICAgLyogbm90aGluZy4uLiAqLwotI2RlZmluZSBmZF9kaXNhYmxlX2lycSgpICAgICAgICAgIC8qIG5vdGhpbmcuLi4gKi8KLSNkZWZpbmUgZmRfY2FjaGVmbHVzaChhZGRyLCBzaXplKSAvKiBub3RoaW5nLi4uICovCi0jZGVmaW5lIGZkX3JlcXVlc3RfaXJxKCkgICAgICAgICAgc3VuX2ZkX3JlcXVlc3RfaXJxKCkKLSNkZWZpbmUgZmRfZnJlZV9pcnEoKSAgICAgICAgICAgICAvKiBub3RoaW5nLi4uICovCi0jaWYgMCAgLyogUDM6IGFkZGVkIGJ5IEFsYWluLCB0aGVzZSBjYXVzZSBhIE1NVSBjb3JydXB0aW9uLiAxOTk2MDUyNCBYWFggKi8KLSNkZWZpbmUgZmRfZG1hX21lbV9hbGxvYyhzaXplKSAgICAoKHVuc2lnbmVkIGxvbmcpIHZtYWxsb2Moc2l6ZSkpCi0jZGVmaW5lIGZkX2RtYV9tZW1fZnJlZShhZGRyLHNpemUpICh2ZnJlZSgodm9pZCAqKShhZGRyKSkpCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19GTE9QUFlfSAorI2RlZmluZSBfX19BU01fU1BBUkNfRkxPUFBZX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9mbG9wcHlfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL2Zsb3BweV8zMi5oPgogI2VuZGlmCi0KLS8qIFhYWCBUaGlzIGlzbid0IHJlYWxseSBjb3JyZWN0LiBYWFggKi8KLSNkZWZpbmUgZ2V0X2RtYV9yZXNpZHVlKHgpICAgICAgICAoMCkKLQotI2RlZmluZSBGTE9QUFkwX1RZUEUgIDQKLSNkZWZpbmUgRkxPUFBZMV9UWVBFICAwCi0KLS8qIFN1cGVyIHBhcmFub2lkLi4uICovCi0jdW5kZWYgSEFWRV9ESVNBQkxFX0hMVAotCi0vKiBIZXJlIGlzIHdoZXJlIHdlIGNhdGNoIHRoZSBmbG9wcHkgZHJpdmVyIHRyeWluZyB0byBpbml0aWFsaXplLAotICogdGhlcmVmb3JlIHRoaXMgaXMgd2hlcmUgd2UgY2FsbCB0aGUgUFJPTSBkZXZpY2UgdHJlZSBwcm9iaW5nCi0gKiByb3V0aW5lIGV0Yy4gb24gdGhlIFNwYXJjLgotICovCi0jZGVmaW5lIEZEQzEgICAgICAgICAgICAgICAgICAgICAgc3VuX2Zsb3BweV9pbml0KCkKLQotI2RlZmluZSBOX0ZEQyAgICAxCi0jZGVmaW5lIE5fRFJJVkUgIDgKLQotLyogTm8gNjRrIGJvdW5kYXJ5IGNyb3NzaW5nIHByb2JsZW1zIG9uIHRoZSBTcGFyYy4gKi8KLSNkZWZpbmUgQ1JPU1NfNjRLQihhLHMpICgwKQotCi0vKiBSb3V0aW5lcyB1bmlxdWUgdG8gZWFjaCBjb250cm9sbGVyIHR5cGUgb24gYSBTdW4uICovCi1zdGF0aWMgdm9pZCBzdW5fc2V0X2Rvcih1bnNpZ25lZCBjaGFyIHZhbHVlLCBpbnQgZmRjXzgyMDc3KQotewotCWlmIChzcGFyY19jcHVfbW9kZWwgPT0gc3VuNGMpIHsKLQkJdW5zaWduZWQgaW50IGJpdHMgPSAwOwotCQlpZiAodmFsdWUgJiAweDEwKQotCQkJYml0cyB8PSBBVVhJT19GTFBZX0RTRUw7Ci0JCWlmICgodmFsdWUgJiAweDgwKSA9PSAwKQotCQkJYml0cyB8PSBBVVhJT19GTFBZX0VKQ1Q7Ci0JCXNldF9hdXhpbyhiaXRzLCAofmJpdHMpICYgKEFVWElPX0ZMUFlfRFNFTHxBVVhJT19GTFBZX0VKQ1QpKTsKLQl9Ci0JaWYgKGZkY184MjA3NykgewotCQlzdW5fZmRjLT5kb3JfODIwNzcgPSB2YWx1ZTsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN1bl9yZWFkX2Rpcih2b2lkKQotewotCWlmIChzcGFyY19jcHVfbW9kZWwgPT0gc3VuNGMpCi0JCXJldHVybiAoZ2V0X2F1eGlvKCkgJiBBVVhJT19GTFBZX0RDSEcpID8gMHg4MCA6IDA7Ci0JZWxzZQotCQlyZXR1cm4gc3VuX2ZkYy0+ZGlyXzgyMDc3OwotfQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzdW5fODIwNzJfZmRfaW5iKGludCBwb3J0KQotewotCXVkZWxheSg1KTsKLQlzd2l0Y2gocG9ydCAmIDcpIHsKLQlkZWZhdWx0OgotCQlwcmludGsoImZsb3BweTogQXNrZWQgdG8gcmVhZCB1bmtub3duIHBvcnQgJWRcbiIsIHBvcnQpOwotCQlwYW5pYygiZmxvcHB5OiBQb3J0IGJvbGl4ZWQuIik7Ci0JY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KLQkJcmV0dXJuIHN1bl9mZGMtPnN0YXR1c184MjA3MiAmIH5TVEFUVVNfRE1BOwotCWNhc2UgNTogLyogRkRfREFUQSAqLwotCQlyZXR1cm4gc3VuX2ZkYy0+ZGF0YV84MjA3MjsKLQljYXNlIDc6IC8qIEZEX0RJUiAqLwotCQlyZXR1cm4gc3VuX3JlYWRfZGlyKCk7Ci0JfTsKLQlwYW5pYygic3VuXzgyMDcyX2ZkX2luYjogSG93IGRpZCBJIGdldCBoZXJlPyIpOwotfQotCi1zdGF0aWMgdm9pZCBzdW5fODIwNzJfZmRfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCBpbnQgcG9ydCkKLXsKLQl1ZGVsYXkoNSk7Ci0Jc3dpdGNoKHBvcnQgJiA3KSB7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKCJmbG9wcHk6IEFza2VkIHRvIHdyaXRlIHRvIHVua25vd24gcG9ydCAlZFxuIiwgcG9ydCk7Ci0JCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKLQljYXNlIDI6IC8qIEZEX0RPUiAqLwotCQlzdW5fc2V0X2Rvcih2YWx1ZSwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgNTogLyogRkRfREFUQSAqLwotCQlzdW5fZmRjLT5kYXRhXzgyMDcyID0gdmFsdWU7Ci0JCWJyZWFrOwotCWNhc2UgNzogLyogRkRfRENSICovCi0JCXN1bl9mZGMtPmRjcl84MjA3MiA9IHZhbHVlOwotCQlicmVhazsKLQljYXNlIDQ6IC8qIEZEX1NUQVRVUyAqLwotCQlzdW5fZmRjLT5zdGF0dXNfODIwNzIgPSB2YWx1ZTsKLQkJYnJlYWs7Ci0JfTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN1bl84MjA3N19mZF9pbmIoaW50IHBvcnQpCi17Ci0JdWRlbGF5KDUpOwotCXN3aXRjaChwb3J0ICYgNykgewotCWRlZmF1bHQ6Ci0JCXByaW50aygiZmxvcHB5OiBBc2tlZCB0byByZWFkIHVua25vd24gcG9ydCAlZFxuIiwgcG9ydCk7Ci0JCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKLQljYXNlIDA6IC8qIEZEX1NUQVRVU18wICovCi0JCXJldHVybiBzdW5fZmRjLT5zdGF0dXMxXzgyMDc3OwotCWNhc2UgMTogLyogRkRfU1RBVFVTXzEgKi8KLQkJcmV0dXJuIHN1bl9mZGMtPnN0YXR1czJfODIwNzc7Ci0JY2FzZSAyOiAvKiBGRF9ET1IgKi8KLQkJcmV0dXJuIHN1bl9mZGMtPmRvcl84MjA3NzsKLQljYXNlIDM6IC8qIEZEX1REUiAqLwotCQlyZXR1cm4gc3VuX2ZkYy0+dGFwZWN0bF84MjA3NzsKLQljYXNlIDQ6IC8qIEZEX1NUQVRVUyAqLwotCQlyZXR1cm4gc3VuX2ZkYy0+c3RhdHVzXzgyMDc3ICYgflNUQVRVU19ETUE7Ci0JY2FzZSA1OiAvKiBGRF9EQVRBICovCi0JCXJldHVybiBzdW5fZmRjLT5kYXRhXzgyMDc3OwotCWNhc2UgNzogLyogRkRfRElSICovCi0JCXJldHVybiBzdW5fcmVhZF9kaXIoKTsKLQl9OwotCXBhbmljKCJzdW5fODIwNzdfZmRfaW5iOiBIb3cgZGlkIEkgZ2V0IGhlcmU/Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN1bl84MjA3N19mZF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIGludCBwb3J0KQotewotCXVkZWxheSg1KTsKLQlzd2l0Y2gocG9ydCAmIDcpIHsKLQlkZWZhdWx0OgotCQlwcmludGsoImZsb3BweTogQXNrZWQgdG8gd3JpdGUgdG8gdW5rbm93biBwb3J0ICVkXG4iLCBwb3J0KTsKLQkJcGFuaWMoImZsb3BweTogUG9ydCBib2xpeGVkLiIpOwotCWNhc2UgMjogLyogRkRfRE9SICovCi0JCXN1bl9zZXRfZG9yKHZhbHVlLCAxKTsKLQkJYnJlYWs7Ci0JY2FzZSA1OiAvKiBGRF9EQVRBICovCi0JCXN1bl9mZGMtPmRhdGFfODIwNzcgPSB2YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSA3OiAvKiBGRF9EQ1IgKi8KLQkJc3VuX2ZkYy0+ZGNyXzgyMDc3ID0gdmFsdWU7Ci0JCWJyZWFrOwotCWNhc2UgNDogLyogRkRfU1RBVFVTICovCi0JCXN1bl9mZGMtPnN0YXR1c184MjA3NyA9IHZhbHVlOwotCQlicmVhazsKLQljYXNlIDM6IC8qIEZEX1REUiAqLwotCQlzdW5fZmRjLT50YXBlY3RsXzgyMDc3ID0gdmFsdWU7Ci0JCWJyZWFrOwotCX07Ci0JcmV0dXJuOwotfQotCi0vKiBGb3IgcHNldWRvLWRtYSAoU3VuIGZsb3BweSBkcml2ZXMgaGF2ZSBubyByZWFsIERNQSBhdmFpbGFibGUgdG8KLSAqIHRoZW0gc28gd2UgbXVzdCBlYXQgdGhlIGRhdGEgZmlmbyBieXRlcyBkaXJlY3RseSBvdXJzZWx2ZXMpIHdlIGhhdmUKLSAqIHRocmVlIHN0YXRlIHZhcmlhYmxlcy4gIGRvaW5nX3BkbWEgdGVsbHMgb3VyIGlubGluZSBsb3ctbGV2ZWwKLSAqIGFzc2VtYmx5IGZsb3BweSBpbnRlcnJ1cHQgZW50cnkgcG9pbnQgd2hldGhlciBpdCBzaG91bGQgc2l0IGFuZCBlYXQKLSAqIGJ5dGVzIGZyb20gdGhlIGZpZm8gb3IganVzdCB0cmFuc2ZlciBjb250cm9sIHVwIHRvIHRoZSBoaWdoZXIgbGV2ZWwKLSAqIGZsb3BweSBpbnRlcnJ1cHQgYy1jb2RlLiAgSSB0cmllZCB2ZXJ5IGhhcmQgYnV0IEkgY291bGQgbm90IGdldCB0aGUKLSAqIHBzZXVkby1kbWEgdG8gd29yayBpbiBjLWNvZGUgd2l0aG91dCBnZXR0aW5nIG1hbnkgb3ZlcnJ1bnMgYW5kCi0gKiB1bmRlcnJ1bnMuICBJZiBub24temVybywgZG9pbmdfcGRtYSBlbmNvZGVzIHRoZSBkaXJlY3Rpb24gb2YKLSAqIHRoZSB0cmFuc2ZlciBmb3IgZGVidWdnaW5nLiAgMT1yZWFkIDI9d3JpdGUKLSAqLwotZXh0ZXJuIGNoYXIgKnBkbWFfdmFkZHI7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBwZG1hX3NpemU7Ci1leHRlcm4gdm9sYXRpbGUgaW50IGRvaW5nX3BkbWE7Ci0KLS8qIFRoaXMgaXMgc29mdHdhcmUgc3RhdGUgKi8KLWV4dGVybiBjaGFyICpwZG1hX2Jhc2U7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBwZG1hX2FyZWFzaXplOwotCi0vKiBDb21tb24gcm91dGluZXMgdG8gYWxsIGNvbnRyb2xsZXIgdHlwZXMgb24gdGhlIFNwYXJjLiAqLwotc3RhdGljIGlubGluZSB2b2lkIHZpcnR1YWxfZG1hX2luaXQodm9pZCkKLXsKLQkvKiBub3RoaW5nLi4uICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdW5fZmRfZGlzYWJsZV9kbWEodm9pZCkKLXsKLQlkb2luZ19wZG1hID0gMDsKLQlpZiAocGRtYV9iYXNlKSB7Ci0JCW1tdV91bmxvY2thcmVhKHBkbWFfYmFzZSwgcGRtYV9hcmVhc2l6ZSk7Ci0JCXBkbWFfYmFzZSA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3VuX2ZkX3NldF9kbWFfbW9kZShpbnQgbW9kZSkKLXsKLQlzd2l0Y2gobW9kZSkgewotCWNhc2UgRE1BX01PREVfUkVBRDoKLQkJZG9pbmdfcGRtYSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX01PREVfV1JJVEU6Ci0JCWRvaW5nX3BkbWEgPSAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIlVua25vd24gZG1hIG1vZGUgJWRcbiIsIG1vZGUpOwotCQlwYW5pYygiZmxvcHB5OiBHaXZpbmcgdXAuLi4iKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdW5fZmRfc2V0X2RtYV9hZGRyKGNoYXIgKmJ1ZmZlcikKLXsKLQlwZG1hX3ZhZGRyID0gYnVmZmVyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3VuX2ZkX3NldF9kbWFfY291bnQoaW50IGxlbmd0aCkKLXsKLQlwZG1hX3NpemUgPSBsZW5ndGg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdW5fZmRfZW5hYmxlX2RtYSh2b2lkKQotewotCXBkbWFfdmFkZHIgPSBtbXVfbG9ja2FyZWEocGRtYV92YWRkciwgcGRtYV9zaXplKTsKLQlwZG1hX2Jhc2UgPSBwZG1hX3ZhZGRyOwotCXBkbWFfYXJlYXNpemUgPSBwZG1hX3NpemU7Ci19Ci0KLS8qIE91ciBsb3ctbGV2ZWwgZW50cnkgcG9pbnQgaW4gYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUyAqLwotZXh0ZXJuIGludCBzcGFyY19mbG9wcHlfcmVxdWVzdF9pcnEoaW50IGlycSwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCQkgICAgaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlcik7Ci0KLXN0YXRpYyBpbnQgc3VuX2ZkX3JlcXVlc3RfaXJxKHZvaWQpCi17Ci0Jc3RhdGljIGludCBvbmNlID0gMDsKLQlpbnQgZXJyb3I7Ci0KLQlpZighb25jZSkgewotCQlvbmNlID0gMTsKLQkJZXJyb3IgPSBzcGFyY19mbG9wcHlfcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwKLQkJCQkJCSBJUlFGX0RJU0FCTEVELAotCQkJCQkJIGZsb3BweV9pbnRlcnJ1cHQpOwotCQlyZXR1cm4gKChlcnJvciA9PSAwKSA/IDAgOiAtMSk7Ci0JfSBlbHNlIHJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzIGZkX3JlZ3NbMl07Ci0KLXN0YXRpYyBpbnQgc3VuX2Zsb3BweV9pbml0KHZvaWQpCi17Ci0JY2hhciBzdGF0ZVsxMjhdOwotCWludCB0bm9kZSwgZmRfbm9kZSwgbnVtX3JlZ3M7Ci0Jc3RydWN0IHJlc291cmNlIHI7Ci0KLQl1c2VfdmlydHVhbF9kbWEgPSAxOwotCQotCUZMT1BQWV9JUlEgPSAxMTsKLQkvKiBGb3JnZXQgaXQgaWYgd2UgYXJlbid0IG9uIGEgbWFjaGluZSB0aGF0IGNvdWxkIHBvc3NpYmx5Ci0JICogZXZlciBoYXZlIGEgZmxvcHB5IGRyaXZlLgotCSAqLwotCWlmKChzcGFyY19jcHVfbW9kZWwgIT0gc3VuNGMgJiYgc3BhcmNfY3B1X21vZGVsICE9IHN1bjRtKSB8fAotCSAgICgoaWRwcm9tLT5pZF9tYWNodHlwZSA9PSAoU01fU1VONEMgfCBTTV80Q19TTEMpKSB8fAotCSAgICAoaWRwcm9tLT5pZF9tYWNodHlwZSA9PSAoU01fU1VONEMgfCBTTV80Q19FTEMpKSkpIHsKLQkJLyogV2UgY2VydGFpbmx5IGRvbid0IGhhdmUgYSBmbG9wcHkgY29udHJvbGxlci4gKi8KLQkJZ290byBub19zdW5fZmRjOwotCX0KLQkvKiBXZWxsLCB0cnkgdG8gZmluZCBvbmUuICovCi0JdG5vZGUgPSBwcm9tX2dldGNoaWxkKHByb21fcm9vdF9ub2RlKTsKLQlmZF9ub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyh0bm9kZSwgIm9iaW8iKTsKLQlpZihmZF9ub2RlICE9IDApIHsKLQkJdG5vZGUgPSBwcm9tX2dldGNoaWxkKGZkX25vZGUpOwotCQlmZF9ub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyh0bm9kZSwgIlNVTlcsZmR0d28iKTsKLQl9IGVsc2UgewotCQlmZF9ub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyh0bm9kZSwgImZkIik7Ci0JfQotCWlmKGZkX25vZGUgPT0gMCkgewotCQlnb3RvIG5vX3N1bl9mZGM7Ci0JfQotCi0JLyogVGhlIHN1bjRtIGxldHMgdXMga25vdyBpZiB0aGUgY29udHJvbGxlciBpcyBhY3R1YWxseSB1c2FibGUuICovCi0JaWYoc3BhcmNfY3B1X21vZGVsID09IHN1bjRtICYmCi0JICAgcHJvbV9nZXRwcm9wZXJ0eShmZF9ub2RlLCAic3RhdHVzIiwgc3RhdGUsIHNpemVvZihzdGF0ZSkpICE9IC0xKSB7Ci0JCWlmKCFzdHJjbXAoc3RhdGUsICJkaXNhYmxlZCIpKSB7Ci0JCQlnb3RvIG5vX3N1bl9mZGM7Ci0JCX0KLQl9Ci0JbnVtX3JlZ3MgPSBwcm9tX2dldHByb3BlcnR5KGZkX25vZGUsICJyZWciLCAoY2hhciAqKSBmZF9yZWdzLCBzaXplb2YoZmRfcmVncykpOwotCW51bV9yZWdzID0gKG51bV9yZWdzIC8gc2l6ZW9mKGZkX3JlZ3NbMF0pKTsKLQlwcm9tX2FwcGx5X29iaW9fcmFuZ2VzKGZkX3JlZ3MsIG51bV9yZWdzKTsKLQltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7Ci0Jci5mbGFncyA9IGZkX3JlZ3NbMF0ud2hpY2hfaW87Ci0Jci5zdGFydCA9IGZkX3JlZ3NbMF0ucGh5c19hZGRyOwotCXN1bl9mZGMgPSAoc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKikKLQkgICAgc2J1c19pb3JlbWFwKCZyLCAwLCBmZF9yZWdzWzBdLnJlZ19zaXplLCAiZmxvcHB5Iik7Ci0KLQkvKiBMYXN0IG1pbnV0ZSBzYW5pdHkgY2hlY2suLi4gKi8KLQlpZihzdW5fZmRjLT5zdGF0dXNfODIwNzIgPT0gMHhmZikgewotCQlzdW5fZmRjID0gTlVMTDsKLQkJZ290byBub19zdW5fZmRjOwotCX0KLQotCXN1bl9mZG9wcy5mZF9pbmIgPSBzdW5fODIwNzdfZmRfaW5iOwotCXN1bl9mZG9wcy5mZF9vdXRiID0gc3VuXzgyMDc3X2ZkX291dGI7Ci0JZmRjX3N0YXR1cyA9ICZzdW5fZmRjLT5zdGF0dXNfODIwNzc7Ci0KLQlpZiAoc3VuX2ZkYy0+ZG9yXzgyMDc3ID09IDB4ODApIHsKLQkJc3VuX2ZkYy0+ZG9yXzgyMDc3ID0gMHgwMjsKLQkJaWYgKHN1bl9mZGMtPmRvcl84MjA3NyA9PSAweDgwKSB7Ci0JCQlzdW5fZmRvcHMuZmRfaW5iID0gc3VuXzgyMDcyX2ZkX2luYjsKLQkJCXN1bl9mZG9wcy5mZF9vdXRiID0gc3VuXzgyMDcyX2ZkX291dGI7Ci0JCQlmZGNfc3RhdHVzID0gJnN1bl9mZGMtPnN0YXR1c184MjA3MjsKLQkJfQotCX0KLQotCS8qIFN1Y2Nlc3MuLi4gKi8KLQlhbGxvd2VkX2RyaXZlX21hc2sgPSAweDAxOwotCXJldHVybiAoaW50KSBzdW5fZmRjOwotCi1ub19zdW5fZmRjOgotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBzcGFyY19lamVjdCh2b2lkKQotewotCXNldF9kb3IoMHgwMCwgMHhmZiwgMHg5MCk7Ci0JdWRlbGF5KDUwMCk7Ci0Jc2V0X2RvcigweDAwLCAweDZmLCAweDAwKTsKLQl1ZGVsYXkoNTAwKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBmZF9lamVjdChkcml2ZSkgc3BhcmNfZWplY3QoKQotCi0jZGVmaW5lIEVYVFJBX0ZMT1BQWV9QQVJBTVMKLQotI2VuZGlmIC8qICEoX19BU01fU1BBUkNfRkxPUFBZX0gpICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Zsb3BweV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5XzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkZDA2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2Zsb3BweV8zMi5oCkBAIC0wLDAgKzEsMzg4IEBACisvKiBhc20tc3BhcmMvZmxvcHB5Lmg6IFNwYXJjIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBGbG9wcHkgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2lmbmRlZiBfX0FTTV9TUEFSQ19GTE9QUFlfSAorI2RlZmluZSBfX0FTTV9TUEFSQ19GTE9QUFlfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaWRwcm9tLmg+CisjaW5jbHVkZSA8YXNtL21hY2hpbmVzLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL2F1eGlvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisvKiBXZSBkb24ndCBuZWVkIG5vIHN0aW5raW4nIEkvTyBwb3J0IGFsbG9jYXRpb24gY3JhcC4gKi8KKyN1bmRlZiByZWxlYXNlX3JlZ2lvbgorI3VuZGVmIHJlcXVlc3RfcmVnaW9uCisjZGVmaW5lIHJlbGVhc2VfcmVnaW9uKFgsIFkpCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSByZXF1ZXN0X3JlZ2lvbihYLCBZLCBaKQkoMSkKKworLyogUmVmZXJlbmNlczoKKyAqIDEpIE5ldGJzZCBTdW4gZmxvcHB5IGRyaXZlci4KKyAqIDIpIE5DUiA4MjA3NyBjb250cm9sbGVyIG1hbnVhbAorICogMykgSW50ZWwgODIwNzcgY29udHJvbGxlciBtYW51YWwKKyAqLworc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgeworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3RhdHVzXzgyMDcyOyAgLyogTWFpbiBTdGF0dXMgcmVnLiAqLworI2RlZmluZSBkY3JfODIwNzIgICAgICAgICAgICAgIHN0YXR1c184MjA3MiAgIC8qIERpZ2l0YWwgQ29udHJvbCByZWcuICovCisjZGVmaW5lIHN0YXR1czFfODIwNzcgICAgICAgICAgc3RhdHVzXzgyMDcyICAgLyogQXV4aWxpYXJ5IFN0YXR1cyByZWcuIDEgKi8KKworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZGF0YV84MjA3MjsgICAgLyogRGF0YSBmaWZvLiAqLworI2RlZmluZSBzdGF0dXMyXzgyMDc3ICAgICAgICAgIGRhdGFfODIwNzIgICAgIC8qIEF1eGlsaWFyeSBTdGF0dXMgcmVnLiAyICovCisKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGRvcl84MjA3NzsgICAgIC8qIERpZ2l0YWwgT3V0cHV0IHJlZy4gKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHRhcGVjdGxfODIwNzc7IC8qIFdoYXQgdGhlPyBUYXBlIGNvbnRyb2wgcmVnPyAqLworCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBzdGF0dXNfODIwNzc7ICAvKiBNYWluIFN0YXR1cyBSZWdpc3Rlci4gKi8KKyNkZWZpbmUgZHJzXzgyMDc3ICAgICAgICAgICAgICBzdGF0dXNfODIwNzcgICAvKiBEaWdpdGFsIFJhdGUgU2VsZWN0IHJlZy4gKi8KKworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZGF0YV84MjA3NzsgICAgLyogRGF0YSBmaWZvLiAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19fdW51c2VkOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZGlyXzgyMDc3OyAgICAgLyogRGlnaXRhbCBJbnB1dCByZWcuICovCisjZGVmaW5lIGRjcl84MjA3NyAgICAgICAgICAgICAgZGlyXzgyMDc3ICAgICAgLyogQ29uZmlnIENvbnRyb2wgcmVnLiAqLworfTsKKworLyogWW91J2xsIG9ubHkgZXZlciBmaW5kIG9uZSBjb250cm9sbGVyIG9uIGEgU3BhcmNTdGF0aW9uIGFueXdheXMuICovCitzdGF0aWMgc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKnN1bl9mZGMgPSBOVUxMOworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmZkY19zdGF0dXM7CisKK3N0cnVjdCBzdW5fZmxvcHB5X29wcyB7CisJdW5zaWduZWQgY2hhciAoKmZkX2luYikoaW50IHBvcnQpOworCXZvaWQgKCpmZF9vdXRiKSh1bnNpZ25lZCBjaGFyIHZhbHVlLCBpbnQgcG9ydCk7Cit9OworCitzdGF0aWMgc3RydWN0IHN1bl9mbG9wcHlfb3BzIHN1bl9mZG9wczsKKworI2RlZmluZSBmZF9pbmIocG9ydCkgICAgICAgICAgICAgIHN1bl9mZG9wcy5mZF9pbmIocG9ydCkKKyNkZWZpbmUgZmRfb3V0Yih2YWx1ZSxwb3J0KSAgICAgICBzdW5fZmRvcHMuZmRfb3V0Yih2YWx1ZSxwb3J0KQorI2RlZmluZSBmZF9lbmFibGVfZG1hKCkgICAgICAgICAgIHN1bl9mZF9lbmFibGVfZG1hKCkKKyNkZWZpbmUgZmRfZGlzYWJsZV9kbWEoKSAgICAgICAgICBzdW5fZmRfZGlzYWJsZV9kbWEoKQorI2RlZmluZSBmZF9yZXF1ZXN0X2RtYSgpICAgICAgICAgICgwKSAvKiBub3RoaW5nLi4uICovCisjZGVmaW5lIGZkX2ZyZWVfZG1hKCkgICAgICAgICAgICAgLyogbm90aGluZy4uLiAqLworI2RlZmluZSBmZF9jbGVhcl9kbWFfZmYoKSAgICAgICAgIC8qIG5vdGhpbmcuLi4gKi8KKyNkZWZpbmUgZmRfc2V0X2RtYV9tb2RlKG1vZGUpICAgICBzdW5fZmRfc2V0X2RtYV9tb2RlKG1vZGUpCisjZGVmaW5lIGZkX3NldF9kbWFfYWRkcihhZGRyKSAgICAgc3VuX2ZkX3NldF9kbWFfYWRkcihhZGRyKQorI2RlZmluZSBmZF9zZXRfZG1hX2NvdW50KGNvdW50KSAgIHN1bl9mZF9zZXRfZG1hX2NvdW50KGNvdW50KQorI2RlZmluZSBmZF9lbmFibGVfaXJxKCkgICAgICAgICAgIC8qIG5vdGhpbmcuLi4gKi8KKyNkZWZpbmUgZmRfZGlzYWJsZV9pcnEoKSAgICAgICAgICAvKiBub3RoaW5nLi4uICovCisjZGVmaW5lIGZkX2NhY2hlZmx1c2goYWRkciwgc2l6ZSkgLyogbm90aGluZy4uLiAqLworI2RlZmluZSBmZF9yZXF1ZXN0X2lycSgpICAgICAgICAgIHN1bl9mZF9yZXF1ZXN0X2lycSgpCisjZGVmaW5lIGZkX2ZyZWVfaXJxKCkgICAgICAgICAgICAgLyogbm90aGluZy4uLiAqLworI2lmIDAgIC8qIFAzOiBhZGRlZCBieSBBbGFpbiwgdGhlc2UgY2F1c2UgYSBNTVUgY29ycnVwdGlvbi4gMTk5NjA1MjQgWFhYICovCisjZGVmaW5lIGZkX2RtYV9tZW1fYWxsb2Moc2l6ZSkgICAgKCh1bnNpZ25lZCBsb25nKSB2bWFsbG9jKHNpemUpKQorI2RlZmluZSBmZF9kbWFfbWVtX2ZyZWUoYWRkcixzaXplKSAodmZyZWUoKHZvaWQgKikoYWRkcikpKQorI2VuZGlmCisKKy8qIFhYWCBUaGlzIGlzbid0IHJlYWxseSBjb3JyZWN0LiBYWFggKi8KKyNkZWZpbmUgZ2V0X2RtYV9yZXNpZHVlKHgpICAgICAgICAoMCkKKworI2RlZmluZSBGTE9QUFkwX1RZUEUgIDQKKyNkZWZpbmUgRkxPUFBZMV9UWVBFICAwCisKKy8qIFN1cGVyIHBhcmFub2lkLi4uICovCisjdW5kZWYgSEFWRV9ESVNBQkxFX0hMVAorCisvKiBIZXJlIGlzIHdoZXJlIHdlIGNhdGNoIHRoZSBmbG9wcHkgZHJpdmVyIHRyeWluZyB0byBpbml0aWFsaXplLAorICogdGhlcmVmb3JlIHRoaXMgaXMgd2hlcmUgd2UgY2FsbCB0aGUgUFJPTSBkZXZpY2UgdHJlZSBwcm9iaW5nCisgKiByb3V0aW5lIGV0Yy4gb24gdGhlIFNwYXJjLgorICovCisjZGVmaW5lIEZEQzEgICAgICAgICAgICAgICAgICAgICAgc3VuX2Zsb3BweV9pbml0KCkKKworI2RlZmluZSBOX0ZEQyAgICAxCisjZGVmaW5lIE5fRFJJVkUgIDgKKworLyogTm8gNjRrIGJvdW5kYXJ5IGNyb3NzaW5nIHByb2JsZW1zIG9uIHRoZSBTcGFyYy4gKi8KKyNkZWZpbmUgQ1JPU1NfNjRLQihhLHMpICgwKQorCisvKiBSb3V0aW5lcyB1bmlxdWUgdG8gZWFjaCBjb250cm9sbGVyIHR5cGUgb24gYSBTdW4uICovCitzdGF0aWMgdm9pZCBzdW5fc2V0X2Rvcih1bnNpZ25lZCBjaGFyIHZhbHVlLCBpbnQgZmRjXzgyMDc3KQoreworCWlmIChzcGFyY19jcHVfbW9kZWwgPT0gc3VuNGMpIHsKKwkJdW5zaWduZWQgaW50IGJpdHMgPSAwOworCQlpZiAodmFsdWUgJiAweDEwKQorCQkJYml0cyB8PSBBVVhJT19GTFBZX0RTRUw7CisJCWlmICgodmFsdWUgJiAweDgwKSA9PSAwKQorCQkJYml0cyB8PSBBVVhJT19GTFBZX0VKQ1Q7CisJCXNldF9hdXhpbyhiaXRzLCAofmJpdHMpICYgKEFVWElPX0ZMUFlfRFNFTHxBVVhJT19GTFBZX0VKQ1QpKTsKKwl9CisJaWYgKGZkY184MjA3NykgeworCQlzdW5fZmRjLT5kb3JfODIwNzcgPSB2YWx1ZTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN1bl9yZWFkX2Rpcih2b2lkKQoreworCWlmIChzcGFyY19jcHVfbW9kZWwgPT0gc3VuNGMpCisJCXJldHVybiAoZ2V0X2F1eGlvKCkgJiBBVVhJT19GTFBZX0RDSEcpID8gMHg4MCA6IDA7CisJZWxzZQorCQlyZXR1cm4gc3VuX2ZkYy0+ZGlyXzgyMDc3OworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBzdW5fODIwNzJfZmRfaW5iKGludCBwb3J0KQoreworCXVkZWxheSg1KTsKKwlzd2l0Y2gocG9ydCAmIDcpIHsKKwlkZWZhdWx0OgorCQlwcmludGsoImZsb3BweTogQXNrZWQgdG8gcmVhZCB1bmtub3duIHBvcnQgJWRcbiIsIHBvcnQpOworCQlwYW5pYygiZmxvcHB5OiBQb3J0IGJvbGl4ZWQuIik7CisJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KKwkJcmV0dXJuIHN1bl9mZGMtPnN0YXR1c184MjA3MiAmIH5TVEFUVVNfRE1BOworCWNhc2UgNTogLyogRkRfREFUQSAqLworCQlyZXR1cm4gc3VuX2ZkYy0+ZGF0YV84MjA3MjsKKwljYXNlIDc6IC8qIEZEX0RJUiAqLworCQlyZXR1cm4gc3VuX3JlYWRfZGlyKCk7CisJfTsKKwlwYW5pYygic3VuXzgyMDcyX2ZkX2luYjogSG93IGRpZCBJIGdldCBoZXJlPyIpOworfQorCitzdGF0aWMgdm9pZCBzdW5fODIwNzJfZmRfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCBpbnQgcG9ydCkKK3sKKwl1ZGVsYXkoNSk7CisJc3dpdGNoKHBvcnQgJiA3KSB7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJmbG9wcHk6IEFza2VkIHRvIHdyaXRlIHRvIHVua25vd24gcG9ydCAlZFxuIiwgcG9ydCk7CisJCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKKwljYXNlIDI6IC8qIEZEX0RPUiAqLworCQlzdW5fc2V0X2Rvcih2YWx1ZSwgMCk7CisJCWJyZWFrOworCWNhc2UgNTogLyogRkRfREFUQSAqLworCQlzdW5fZmRjLT5kYXRhXzgyMDcyID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgNzogLyogRkRfRENSICovCisJCXN1bl9mZGMtPmRjcl84MjA3MiA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIDQ6IC8qIEZEX1NUQVRVUyAqLworCQlzdW5fZmRjLT5zdGF0dXNfODIwNzIgPSB2YWx1ZTsKKwkJYnJlYWs7CisJfTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN1bl84MjA3N19mZF9pbmIoaW50IHBvcnQpCit7CisJdWRlbGF5KDUpOworCXN3aXRjaChwb3J0ICYgNykgeworCWRlZmF1bHQ6CisJCXByaW50aygiZmxvcHB5OiBBc2tlZCB0byByZWFkIHVua25vd24gcG9ydCAlZFxuIiwgcG9ydCk7CisJCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKKwljYXNlIDA6IC8qIEZEX1NUQVRVU18wICovCisJCXJldHVybiBzdW5fZmRjLT5zdGF0dXMxXzgyMDc3OworCWNhc2UgMTogLyogRkRfU1RBVFVTXzEgKi8KKwkJcmV0dXJuIHN1bl9mZGMtPnN0YXR1czJfODIwNzc7CisJY2FzZSAyOiAvKiBGRF9ET1IgKi8KKwkJcmV0dXJuIHN1bl9mZGMtPmRvcl84MjA3NzsKKwljYXNlIDM6IC8qIEZEX1REUiAqLworCQlyZXR1cm4gc3VuX2ZkYy0+dGFwZWN0bF84MjA3NzsKKwljYXNlIDQ6IC8qIEZEX1NUQVRVUyAqLworCQlyZXR1cm4gc3VuX2ZkYy0+c3RhdHVzXzgyMDc3ICYgflNUQVRVU19ETUE7CisJY2FzZSA1OiAvKiBGRF9EQVRBICovCisJCXJldHVybiBzdW5fZmRjLT5kYXRhXzgyMDc3OworCWNhc2UgNzogLyogRkRfRElSICovCisJCXJldHVybiBzdW5fcmVhZF9kaXIoKTsKKwl9OworCXBhbmljKCJzdW5fODIwNzdfZmRfaW5iOiBIb3cgZGlkIEkgZ2V0IGhlcmU/Iik7Cit9CisKK3N0YXRpYyB2b2lkIHN1bl84MjA3N19mZF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIGludCBwb3J0KQoreworCXVkZWxheSg1KTsKKwlzd2l0Y2gocG9ydCAmIDcpIHsKKwlkZWZhdWx0OgorCQlwcmludGsoImZsb3BweTogQXNrZWQgdG8gd3JpdGUgdG8gdW5rbm93biBwb3J0ICVkXG4iLCBwb3J0KTsKKwkJcGFuaWMoImZsb3BweTogUG9ydCBib2xpeGVkLiIpOworCWNhc2UgMjogLyogRkRfRE9SICovCisJCXN1bl9zZXRfZG9yKHZhbHVlLCAxKTsKKwkJYnJlYWs7CisJY2FzZSA1OiAvKiBGRF9EQVRBICovCisJCXN1bl9mZGMtPmRhdGFfODIwNzcgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSA3OiAvKiBGRF9EQ1IgKi8KKwkJc3VuX2ZkYy0+ZGNyXzgyMDc3ID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgNDogLyogRkRfU1RBVFVTICovCisJCXN1bl9mZGMtPnN0YXR1c184MjA3NyA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIDM6IC8qIEZEX1REUiAqLworCQlzdW5fZmRjLT50YXBlY3RsXzgyMDc3ID0gdmFsdWU7CisJCWJyZWFrOworCX07CisJcmV0dXJuOworfQorCisvKiBGb3IgcHNldWRvLWRtYSAoU3VuIGZsb3BweSBkcml2ZXMgaGF2ZSBubyByZWFsIERNQSBhdmFpbGFibGUgdG8KKyAqIHRoZW0gc28gd2UgbXVzdCBlYXQgdGhlIGRhdGEgZmlmbyBieXRlcyBkaXJlY3RseSBvdXJzZWx2ZXMpIHdlIGhhdmUKKyAqIHRocmVlIHN0YXRlIHZhcmlhYmxlcy4gIGRvaW5nX3BkbWEgdGVsbHMgb3VyIGlubGluZSBsb3ctbGV2ZWwKKyAqIGFzc2VtYmx5IGZsb3BweSBpbnRlcnJ1cHQgZW50cnkgcG9pbnQgd2hldGhlciBpdCBzaG91bGQgc2l0IGFuZCBlYXQKKyAqIGJ5dGVzIGZyb20gdGhlIGZpZm8gb3IganVzdCB0cmFuc2ZlciBjb250cm9sIHVwIHRvIHRoZSBoaWdoZXIgbGV2ZWwKKyAqIGZsb3BweSBpbnRlcnJ1cHQgYy1jb2RlLiAgSSB0cmllZCB2ZXJ5IGhhcmQgYnV0IEkgY291bGQgbm90IGdldCB0aGUKKyAqIHBzZXVkby1kbWEgdG8gd29yayBpbiBjLWNvZGUgd2l0aG91dCBnZXR0aW5nIG1hbnkgb3ZlcnJ1bnMgYW5kCisgKiB1bmRlcnJ1bnMuICBJZiBub24temVybywgZG9pbmdfcGRtYSBlbmNvZGVzIHRoZSBkaXJlY3Rpb24gb2YKKyAqIHRoZSB0cmFuc2ZlciBmb3IgZGVidWdnaW5nLiAgMT1yZWFkIDI9d3JpdGUKKyAqLworZXh0ZXJuIGNoYXIgKnBkbWFfdmFkZHI7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwZG1hX3NpemU7CitleHRlcm4gdm9sYXRpbGUgaW50IGRvaW5nX3BkbWE7CisKKy8qIFRoaXMgaXMgc29mdHdhcmUgc3RhdGUgKi8KK2V4dGVybiBjaGFyICpwZG1hX2Jhc2U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwZG1hX2FyZWFzaXplOworCisvKiBDb21tb24gcm91dGluZXMgdG8gYWxsIGNvbnRyb2xsZXIgdHlwZXMgb24gdGhlIFNwYXJjLiAqLworc3RhdGljIGlubGluZSB2b2lkIHZpcnR1YWxfZG1hX2luaXQodm9pZCkKK3sKKwkvKiBub3RoaW5nLi4uICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdW5fZmRfZGlzYWJsZV9kbWEodm9pZCkKK3sKKwlkb2luZ19wZG1hID0gMDsKKwlpZiAocGRtYV9iYXNlKSB7CisJCW1tdV91bmxvY2thcmVhKHBkbWFfYmFzZSwgcGRtYV9hcmVhc2l6ZSk7CisJCXBkbWFfYmFzZSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VuX2ZkX3NldF9kbWFfbW9kZShpbnQgbW9kZSkKK3sKKwlzd2l0Y2gobW9kZSkgeworCWNhc2UgRE1BX01PREVfUkVBRDoKKwkJZG9pbmdfcGRtYSA9IDE7CisJCWJyZWFrOworCWNhc2UgRE1BX01PREVfV1JJVEU6CisJCWRvaW5nX3BkbWEgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlVua25vd24gZG1hIG1vZGUgJWRcbiIsIG1vZGUpOworCQlwYW5pYygiZmxvcHB5OiBHaXZpbmcgdXAuLi4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdW5fZmRfc2V0X2RtYV9hZGRyKGNoYXIgKmJ1ZmZlcikKK3sKKwlwZG1hX3ZhZGRyID0gYnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VuX2ZkX3NldF9kbWFfY291bnQoaW50IGxlbmd0aCkKK3sKKwlwZG1hX3NpemUgPSBsZW5ndGg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdW5fZmRfZW5hYmxlX2RtYSh2b2lkKQoreworCXBkbWFfdmFkZHIgPSBtbXVfbG9ja2FyZWEocGRtYV92YWRkciwgcGRtYV9zaXplKTsKKwlwZG1hX2Jhc2UgPSBwZG1hX3ZhZGRyOworCXBkbWFfYXJlYXNpemUgPSBwZG1hX3NpemU7Cit9CisKKy8qIE91ciBsb3ctbGV2ZWwgZW50cnkgcG9pbnQgaW4gYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUyAqLworZXh0ZXJuIGludCBzcGFyY19mbG9wcHlfcmVxdWVzdF9pcnEoaW50IGlycSwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkgICAgaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlcik7CisKK3N0YXRpYyBpbnQgc3VuX2ZkX3JlcXVlc3RfaXJxKHZvaWQpCit7CisJc3RhdGljIGludCBvbmNlID0gMDsKKwlpbnQgZXJyb3I7CisKKwlpZighb25jZSkgeworCQlvbmNlID0gMTsKKwkJZXJyb3IgPSBzcGFyY19mbG9wcHlfcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwKKwkJCQkJCSBJUlFGX0RJU0FCTEVELAorCQkJCQkJIGZsb3BweV9pbnRlcnJ1cHQpOworCQlyZXR1cm4gKChlcnJvciA9PSAwKSA/IDAgOiAtMSk7CisJfSBlbHNlIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzIGZkX3JlZ3NbMl07CisKK3N0YXRpYyBpbnQgc3VuX2Zsb3BweV9pbml0KHZvaWQpCit7CisJY2hhciBzdGF0ZVsxMjhdOworCWludCB0bm9kZSwgZmRfbm9kZSwgbnVtX3JlZ3M7CisJc3RydWN0IHJlc291cmNlIHI7CisKKwl1c2VfdmlydHVhbF9kbWEgPSAxOworCisJRkxPUFBZX0lSUSA9IDExOworCS8qIEZvcmdldCBpdCBpZiB3ZSBhcmVuJ3Qgb24gYSBtYWNoaW5lIHRoYXQgY291bGQgcG9zc2libHkKKwkgKiBldmVyIGhhdmUgYSBmbG9wcHkgZHJpdmUuCisJICovCisJaWYoKHNwYXJjX2NwdV9tb2RlbCAhPSBzdW40YyAmJiBzcGFyY19jcHVfbW9kZWwgIT0gc3VuNG0pIHx8CisJICAgKChpZHByb20tPmlkX21hY2h0eXBlID09IChTTV9TVU40QyB8IFNNXzRDX1NMQykpIHx8CisJICAgIChpZHByb20tPmlkX21hY2h0eXBlID09IChTTV9TVU40QyB8IFNNXzRDX0VMQykpKSkgeworCQkvKiBXZSBjZXJ0YWlubHkgZG9uJ3QgaGF2ZSBhIGZsb3BweSBjb250cm9sbGVyLiAqLworCQlnb3RvIG5vX3N1bl9mZGM7CisJfQorCS8qIFdlbGwsIHRyeSB0byBmaW5kIG9uZS4gKi8KKwl0bm9kZSA9IHByb21fZ2V0Y2hpbGQocHJvbV9yb290X25vZGUpOworCWZkX25vZGUgPSBwcm9tX3NlYXJjaHNpYmxpbmdzKHRub2RlLCAib2JpbyIpOworCWlmKGZkX25vZGUgIT0gMCkgeworCQl0bm9kZSA9IHByb21fZ2V0Y2hpbGQoZmRfbm9kZSk7CisJCWZkX25vZGUgPSBwcm9tX3NlYXJjaHNpYmxpbmdzKHRub2RlLCAiU1VOVyxmZHR3byIpOworCX0gZWxzZSB7CisJCWZkX25vZGUgPSBwcm9tX3NlYXJjaHNpYmxpbmdzKHRub2RlLCAiZmQiKTsKKwl9CisJaWYoZmRfbm9kZSA9PSAwKSB7CisJCWdvdG8gbm9fc3VuX2ZkYzsKKwl9CisKKwkvKiBUaGUgc3VuNG0gbGV0cyB1cyBrbm93IGlmIHRoZSBjb250cm9sbGVyIGlzIGFjdHVhbGx5IHVzYWJsZS4gKi8KKwlpZihzcGFyY19jcHVfbW9kZWwgPT0gc3VuNG0gJiYKKwkgICBwcm9tX2dldHByb3BlcnR5KGZkX25vZGUsICJzdGF0dXMiLCBzdGF0ZSwgc2l6ZW9mKHN0YXRlKSkgIT0gLTEpIHsKKwkJaWYoIXN0cmNtcChzdGF0ZSwgImRpc2FibGVkIikpIHsKKwkJCWdvdG8gbm9fc3VuX2ZkYzsKKwkJfQorCX0KKwludW1fcmVncyA9IHByb21fZ2V0cHJvcGVydHkoZmRfbm9kZSwgInJlZyIsIChjaGFyICopIGZkX3JlZ3MsIHNpemVvZihmZF9yZWdzKSk7CisJbnVtX3JlZ3MgPSAobnVtX3JlZ3MgLyBzaXplb2YoZmRfcmVnc1swXSkpOworCXByb21fYXBwbHlfb2Jpb19yYW5nZXMoZmRfcmVncywgbnVtX3JlZ3MpOworCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKKwlyLmZsYWdzID0gZmRfcmVnc1swXS53aGljaF9pbzsKKwlyLnN0YXJ0ID0gZmRfcmVnc1swXS5waHlzX2FkZHI7CisJc3VuX2ZkYyA9IChzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciAqKQorCSAgICBzYnVzX2lvcmVtYXAoJnIsIDAsIGZkX3JlZ3NbMF0ucmVnX3NpemUsICJmbG9wcHkiKTsKKworCS8qIExhc3QgbWludXRlIHNhbml0eSBjaGVjay4uLiAqLworCWlmKHN1bl9mZGMtPnN0YXR1c184MjA3MiA9PSAweGZmKSB7CisJCXN1bl9mZGMgPSBOVUxMOworCQlnb3RvIG5vX3N1bl9mZGM7CisJfQorCisJc3VuX2Zkb3BzLmZkX2luYiA9IHN1bl84MjA3N19mZF9pbmI7CisJc3VuX2Zkb3BzLmZkX291dGIgPSBzdW5fODIwNzdfZmRfb3V0YjsKKwlmZGNfc3RhdHVzID0gJnN1bl9mZGMtPnN0YXR1c184MjA3NzsKKworCWlmIChzdW5fZmRjLT5kb3JfODIwNzcgPT0gMHg4MCkgeworCQlzdW5fZmRjLT5kb3JfODIwNzcgPSAweDAyOworCQlpZiAoc3VuX2ZkYy0+ZG9yXzgyMDc3ID09IDB4ODApIHsKKwkJCXN1bl9mZG9wcy5mZF9pbmIgPSBzdW5fODIwNzJfZmRfaW5iOworCQkJc3VuX2Zkb3BzLmZkX291dGIgPSBzdW5fODIwNzJfZmRfb3V0YjsKKwkJCWZkY19zdGF0dXMgPSAmc3VuX2ZkYy0+c3RhdHVzXzgyMDcyOworCQl9CisJfQorCisJLyogU3VjY2Vzcy4uLiAqLworCWFsbG93ZWRfZHJpdmVfbWFzayA9IDB4MDE7CisJcmV0dXJuIChpbnQpIHN1bl9mZGM7CisKK25vX3N1bl9mZGM6CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNwYXJjX2VqZWN0KHZvaWQpCit7CisJc2V0X2RvcigweDAwLCAweGZmLCAweDkwKTsKKwl1ZGVsYXkoNTAwKTsKKwlzZXRfZG9yKDB4MDAsIDB4NmYsIDB4MDApOworCXVkZWxheSg1MDApOworCXJldHVybiAwOworfQorCisjZGVmaW5lIGZkX2VqZWN0KGRyaXZlKSBzcGFyY19lamVjdCgpCisKKyNkZWZpbmUgRVhUUkFfRkxPUFBZX1BBUkFNUworCisjZW5kaWYgLyogIShfX0FTTV9TUEFSQ19GTE9QUFlfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Zsb3BweV82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5ZGIxMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2Zsb3BweV82NC5oCkBAIC0wLDAgKzEsNzgyIEBACisvKiBmbG9wcHkuaDogU3BhcmMgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEZsb3BweSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAyMDA3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKKyAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQorICoKKyAqIFVsdHJhL1BDSSBzdXBwb3J0IGFkZGVkOiBTZXAgMTk5NyAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCisgKi8KKworI2lmbmRlZiBfX0FTTV9TUEFSQzY0X0ZMT1BQWV9ICisjZGVmaW5lIF9fQVNNX1NQQVJDNjRfRkxPUFBZX0gKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9hdXhpby5oPgorI2luY2x1ZGUgPGFzbS9zYnVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisKKy8qCisgKiBEZWZpbmUgdGhpcyB0byBlbmFibGUgZXhjaGFuZ2luZyBkcml2ZSAwIGFuZCAxIGlmIG9ubHkgZHJpdmUgMSBpcworICogcHJvYmVkIG9uIFBDSSBtYWNoaW5lcy4KKyAqLworI3VuZGVmIFBDSV9GRENfU1dBUF9EUklWRVMKKworCisvKiBSZWZlcmVuY2VzOgorICogMSkgTmV0YnNkIFN1biBmbG9wcHkgZHJpdmVyLgorICogMikgTkNSIDgyMDc3IGNvbnRyb2xsZXIgbWFudWFsCisgKiAzKSBJbnRlbCA4MjA3NyBjb250cm9sbGVyIG1hbnVhbAorICovCitzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciB7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBzdGF0dXMxXzgyMDc3OyAvKiBBdXhpbGlhcnkgU3RhdHVzIHJlZy4gMSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3RhdHVzMl84MjA3NzsgLyogQXV4aWxpYXJ5IFN0YXR1cyByZWcuIDIgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGRvcl84MjA3NzsgICAgIC8qIERpZ2l0YWwgT3V0cHV0IHJlZy4gKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHRhcGVjdGxfODIwNzc7IC8qIFRhcGUgQ29udHJvbCByZWcgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHN0YXR1c184MjA3NzsgIC8qIE1haW4gU3RhdHVzIFJlZ2lzdGVyLiAqLworI2RlZmluZSBkcnNfODIwNzcgICAgICAgICAgICAgIHN0YXR1c184MjA3NyAgIC8qIERpZ2l0YWwgUmF0ZSBTZWxlY3QgcmVnLiAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZGF0YV84MjA3NzsgICAgLyogRGF0YSBmaWZvLiAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19fdW51c2VkOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZGlyXzgyMDc3OyAgICAgLyogRGlnaXRhbCBJbnB1dCByZWcuICovCisjZGVmaW5lIGRjcl84MjA3NyAgICAgICAgICAgICAgZGlyXzgyMDc3ICAgICAgLyogQ29uZmlnIENvbnRyb2wgcmVnLiAqLworfTsKKworLyogWW91J2xsIG9ubHkgZXZlciBmaW5kIG9uZSBjb250cm9sbGVyIG9uIGFuIFVsdHJhIGFueXdheXMuICovCitzdGF0aWMgc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKnN1bl9mZGMgPSAoc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKiktMTsKK3Vuc2lnbmVkIGxvbmcgZmRjX3N0YXR1czsKK3N0YXRpYyBzdHJ1Y3Qgc2J1c19kZXYgKmZsb3BweV9zZGV2ID0gTlVMTDsKKworc3RydWN0IHN1bl9mbG9wcHlfb3BzIHsKKwl1bnNpZ25lZCBjaGFyCSgqZmRfaW5iKSAodW5zaWduZWQgbG9uZyBwb3J0KTsKKwl2b2lkCQkoKmZkX291dGIpICh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXZvaWQJCSgqZmRfZW5hYmxlX2RtYSkgKHZvaWQpOworCXZvaWQJCSgqZmRfZGlzYWJsZV9kbWEpICh2b2lkKTsKKwl2b2lkCQkoKmZkX3NldF9kbWFfbW9kZSkgKGludCk7CisJdm9pZAkJKCpmZF9zZXRfZG1hX2FkZHIpIChjaGFyICopOworCXZvaWQJCSgqZmRfc2V0X2RtYV9jb3VudCkgKGludCk7CisJdW5zaWduZWQgaW50CSgqZ2V0X2RtYV9yZXNpZHVlKSAodm9pZCk7CisJaW50CQkoKmZkX3JlcXVlc3RfaXJxKSAodm9pZCk7CisJdm9pZAkJKCpmZF9mcmVlX2lycSkgKHZvaWQpOworCWludAkJKCpmZF9lamVjdCkgKGludCk7Cit9OworCitzdGF0aWMgc3RydWN0IHN1bl9mbG9wcHlfb3BzIHN1bl9mZG9wczsKKworI2RlZmluZSBmZF9pbmIocG9ydCkgICAgICAgICAgICAgIHN1bl9mZG9wcy5mZF9pbmIocG9ydCkKKyNkZWZpbmUgZmRfb3V0Yih2YWx1ZSxwb3J0KSAgICAgICBzdW5fZmRvcHMuZmRfb3V0Yih2YWx1ZSxwb3J0KQorI2RlZmluZSBmZF9lbmFibGVfZG1hKCkgICAgICAgICAgIHN1bl9mZG9wcy5mZF9lbmFibGVfZG1hKCkKKyNkZWZpbmUgZmRfZGlzYWJsZV9kbWEoKSAgICAgICAgICBzdW5fZmRvcHMuZmRfZGlzYWJsZV9kbWEoKQorI2RlZmluZSBmZF9yZXF1ZXN0X2RtYSgpICAgICAgICAgICgwKSAvKiBub3RoaW5nLi4uICovCisjZGVmaW5lIGZkX2ZyZWVfZG1hKCkgICAgICAgICAgICAgLyogbm90aGluZy4uLiAqLworI2RlZmluZSBmZF9jbGVhcl9kbWFfZmYoKSAgICAgICAgIC8qIG5vdGhpbmcuLi4gKi8KKyNkZWZpbmUgZmRfc2V0X2RtYV9tb2RlKG1vZGUpICAgICBzdW5fZmRvcHMuZmRfc2V0X2RtYV9tb2RlKG1vZGUpCisjZGVmaW5lIGZkX3NldF9kbWFfYWRkcihhZGRyKSAgICAgc3VuX2Zkb3BzLmZkX3NldF9kbWFfYWRkcihhZGRyKQorI2RlZmluZSBmZF9zZXRfZG1hX2NvdW50KGNvdW50KSAgIHN1bl9mZG9wcy5mZF9zZXRfZG1hX2NvdW50KGNvdW50KQorI2RlZmluZSBnZXRfZG1hX3Jlc2lkdWUoeCkgICAgICAgIHN1bl9mZG9wcy5nZXRfZG1hX3Jlc2lkdWUoKQorI2RlZmluZSBmZF9jYWNoZWZsdXNoKGFkZHIsIHNpemUpIC8qIG5vdGhpbmcuLi4gKi8KKyNkZWZpbmUgZmRfcmVxdWVzdF9pcnEoKSAgICAgICAgICBzdW5fZmRvcHMuZmRfcmVxdWVzdF9pcnEoKQorI2RlZmluZSBmZF9mcmVlX2lycSgpICAgICAgICAgICAgIHN1bl9mZG9wcy5mZF9mcmVlX2lycSgpCisjZGVmaW5lIGZkX2VqZWN0KGRyaXZlKSAgICAgICAgICAgc3VuX2Zkb3BzLmZkX2VqZWN0KGRyaXZlKQorCisvKiBTdXBlciBwYXJhbm9pZC4uLiAqLworI3VuZGVmIEhBVkVfRElTQUJMRV9ITFQKKworc3RhdGljIGludCBzdW5fZmxvcHB5X3R5cGVzWzJdID0geyAwLCAwIH07CisKKy8qIEhlcmUgaXMgd2hlcmUgd2UgY2F0Y2ggdGhlIGZsb3BweSBkcml2ZXIgdHJ5aW5nIHRvIGluaXRpYWxpemUsCisgKiB0aGVyZWZvcmUgdGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBQUk9NIGRldmljZSB0cmVlIHByb2JpbmcKKyAqIHJvdXRpbmUgZXRjLiBvbiB0aGUgU3BhcmMuCisgKi8KKyNkZWZpbmUgRkxPUFBZMF9UWVBFCQlzdW5fZmxvcHB5X2luaXQoKQorI2RlZmluZSBGTE9QUFkxX1RZUEUJCXN1bl9mbG9wcHlfdHlwZXNbMV0KKworI2RlZmluZSBGREMxCQkJKCh1bnNpZ25lZCBsb25nKXN1bl9mZGMpCisKKyNkZWZpbmUgTl9GREMgICAgMQorI2RlZmluZSBOX0RSSVZFICA4CisKKy8qIE5vIDY0ayBib3VuZGFyeSBjcm9zc2luZyBwcm9ibGVtcyBvbiB0aGUgU3BhcmMuICovCisjZGVmaW5lIENST1NTXzY0S0IoYSxzKSAoMCkKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3VuXzgyMDc3X2ZkX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdWRlbGF5KDUpOworCXN3aXRjaChwb3J0ICYgNykgeworCWRlZmF1bHQ6CisJCXByaW50aygiZmxvcHB5OiBBc2tlZCB0byByZWFkIHVua25vd24gcG9ydCAlbHhcbiIsIHBvcnQpOworCQlwYW5pYygiZmxvcHB5OiBQb3J0IGJvbGl4ZWQuIik7CisJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KKwkJcmV0dXJuIHNidXNfcmVhZGIoJnN1bl9mZGMtPnN0YXR1c184MjA3NykgJiB+U1RBVFVTX0RNQTsKKwljYXNlIDU6IC8qIEZEX0RBVEEgKi8KKwkJcmV0dXJuIHNidXNfcmVhZGIoJnN1bl9mZGMtPmRhdGFfODIwNzcpOworCWNhc2UgNzogLyogRkRfRElSICovCisJCS8qIFhYWDogSXMgRENMIG9uIDB4ODAgaW4gc3VuNG0/ICovCisJCXJldHVybiBzYnVzX3JlYWRiKCZzdW5fZmRjLT5kaXJfODIwNzcpOworCX07CisJcGFuaWMoInN1bl84MjA3Ml9mZF9pbmI6IEhvdyBkaWQgSSBnZXQgaGVyZT8iKTsKK30KKworc3RhdGljIHZvaWQgc3VuXzgyMDc3X2ZkX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVkZWxheSg1KTsKKwlzd2l0Y2gocG9ydCAmIDcpIHsKKwlkZWZhdWx0OgorCQlwcmludGsoImZsb3BweTogQXNrZWQgdG8gd3JpdGUgdG8gdW5rbm93biBwb3J0ICVseFxuIiwgcG9ydCk7CisJCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKKwljYXNlIDI6IC8qIEZEX0RPUiAqLworCQkvKiBIYXBwaWx5LCB0aGUgODIwNzcgaGFzIGEgcmVhbCBET1IgcmVnaXN0ZXIuICovCisJCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+ZG9yXzgyMDc3KTsKKwkJYnJlYWs7CisJY2FzZSA1OiAvKiBGRF9EQVRBICovCisJCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+ZGF0YV84MjA3Nyk7CisJCWJyZWFrOworCWNhc2UgNzogLyogRkRfRENSICovCisJCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+ZGNyXzgyMDc3KTsKKwkJYnJlYWs7CisJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KKwkJc2J1c193cml0ZWIodmFsdWUsICZzdW5fZmRjLT5zdGF0dXNfODIwNzcpOworCQlicmVhazsKKwl9OworCXJldHVybjsKK30KKworLyogRm9yIHBzZXVkby1kbWEgKFN1biBmbG9wcHkgZHJpdmVzIGhhdmUgbm8gcmVhbCBETUEgYXZhaWxhYmxlIHRvCisgKiB0aGVtIHNvIHdlIG11c3QgZWF0IHRoZSBkYXRhIGZpZm8gYnl0ZXMgZGlyZWN0bHkgb3Vyc2VsdmVzKSB3ZSBoYXZlCisgKiB0aHJlZSBzdGF0ZSB2YXJpYWJsZXMuICBkb2luZ19wZG1hIHRlbGxzIG91ciBpbmxpbmUgbG93LWxldmVsCisgKiBhc3NlbWJseSBmbG9wcHkgaW50ZXJydXB0IGVudHJ5IHBvaW50IHdoZXRoZXIgaXQgc2hvdWxkIHNpdCBhbmQgZWF0CisgKiBieXRlcyBmcm9tIHRoZSBmaWZvIG9yIGp1c3QgdHJhbnNmZXIgY29udHJvbCB1cCB0byB0aGUgaGlnaGVyIGxldmVsCisgKiBmbG9wcHkgaW50ZXJydXB0IGMtY29kZS4gIEkgdHJpZWQgdmVyeSBoYXJkIGJ1dCBJIGNvdWxkIG5vdCBnZXQgdGhlCisgKiBwc2V1ZG8tZG1hIHRvIHdvcmsgaW4gYy1jb2RlIHdpdGhvdXQgZ2V0dGluZyBtYW55IG92ZXJydW5zIGFuZAorICogdW5kZXJydW5zLiAgSWYgbm9uLXplcm8sIGRvaW5nX3BkbWEgZW5jb2RlcyB0aGUgZGlyZWN0aW9uIG9mCisgKiB0aGUgdHJhbnNmZXIgZm9yIGRlYnVnZ2luZy4gIDE9cmVhZCAyPXdyaXRlCisgKi8KK3Vuc2lnbmVkIGNoYXIgKnBkbWFfdmFkZHI7Cit1bnNpZ25lZCBsb25nIHBkbWFfc2l6ZTsKK3ZvbGF0aWxlIGludCBkb2luZ19wZG1hID0gMDsKKworLyogVGhpcyBpcyBzb2Z0d2FyZSBzdGF0ZSAqLworY2hhciAqcGRtYV9iYXNlID0gTlVMTDsKK3Vuc2lnbmVkIGxvbmcgcGRtYV9hcmVhc2l6ZTsKKworLyogQ29tbW9uIHJvdXRpbmVzIHRvIGFsbCBjb250cm9sbGVyIHR5cGVzIG9uIHRoZSBTcGFyYy4gKi8KK3N0YXRpYyB2b2lkIHN1bl9mZF9kaXNhYmxlX2RtYSh2b2lkKQoreworCWRvaW5nX3BkbWEgPSAwOworCWlmIChwZG1hX2Jhc2UpIHsKKwkJbW11X3VubG9ja2FyZWEocGRtYV9iYXNlLCBwZG1hX2FyZWFzaXplKTsKKwkJcGRtYV9iYXNlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN1bl9mZF9zZXRfZG1hX21vZGUoaW50IG1vZGUpCit7CisJc3dpdGNoKG1vZGUpIHsKKwljYXNlIERNQV9NT0RFX1JFQUQ6CisJCWRvaW5nX3BkbWEgPSAxOworCQlicmVhazsKKwljYXNlIERNQV9NT0RFX1dSSVRFOgorCQlkb2luZ19wZG1hID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJVbmtub3duIGRtYSBtb2RlICVkXG4iLCBtb2RlKTsKKwkJcGFuaWMoImZsb3BweTogR2l2aW5nIHVwLi4uIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdW5fZmRfc2V0X2RtYV9hZGRyKGNoYXIgKmJ1ZmZlcikKK3sKKwlwZG1hX3ZhZGRyID0gYnVmZmVyOworfQorCitzdGF0aWMgdm9pZCBzdW5fZmRfc2V0X2RtYV9jb3VudChpbnQgbGVuZ3RoKQoreworCXBkbWFfc2l6ZSA9IGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQgc3VuX2ZkX2VuYWJsZV9kbWEodm9pZCkKK3sKKwlwZG1hX3ZhZGRyID0gbW11X2xvY2thcmVhKHBkbWFfdmFkZHIsIHBkbWFfc2l6ZSk7CisJcGRtYV9iYXNlID0gcGRtYV92YWRkcjsKKwlwZG1hX2FyZWFzaXplID0gcGRtYV9zaXplOworfQorCitpcnFyZXR1cm5fdCBzcGFyY19mbG9wcHlfaXJxKGludCBpcnEsIHZvaWQgKmRldl9jb29raWUpCit7CisJaWYgKGxpa2VseShkb2luZ19wZG1hKSkgeworCQl2b2lkIF9faW9tZW0gKnN0YXQgPSAodm9pZCBfX2lvbWVtICopIGZkY19zdGF0dXM7CisJCXVuc2lnbmVkIGNoYXIgKnZhZGRyID0gcGRtYV92YWRkcjsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gcGRtYV9zaXplOworCQl1OCB2YWw7CisKKwkJd2hpbGUgKHNpemUpIHsKKwkJCXZhbCA9IHJlYWRiKHN0YXQpOworCQkJaWYgKHVubGlrZWx5KCEodmFsICYgMHg4MCkpKSB7CisJCQkJcGRtYV92YWRkciA9IHZhZGRyOworCQkJCXBkbWFfc2l6ZSA9IHNpemU7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCQkJaWYgKHVubGlrZWx5KCEodmFsICYgMHgyMCkpKSB7CisJCQkJcGRtYV92YWRkciA9IHZhZGRyOworCQkJCXBkbWFfc2l6ZSA9IHNpemU7CisJCQkJZG9pbmdfcGRtYSA9IDA7CisJCQkJZ290byBtYWluX2ludGVycnVwdDsKKwkJCX0KKwkJCWlmICh2YWwgJiAweDQwKSB7CisJCQkJLyogcmVhZCAqLworCQkJCSp2YWRkcisrID0gcmVhZGIoc3RhdCArIDEpOworCQkJfSBlbHNlIHsKKwkJCQl1bnNpZ25lZCBjaGFyIGRhdGEgPSAqdmFkZHIrKzsKKworCQkJCS8qIHdyaXRlICovCisJCQkJd3JpdGViKGRhdGEsIHN0YXQgKyAxKTsKKwkJCX0KKwkJCXNpemUtLTsKKwkJfQorCisJCXBkbWFfdmFkZHIgPSB2YWRkcjsKKwkJcGRtYV9zaXplID0gc2l6ZTsKKworCQkvKiBTZW5kIFRlcm1pbmFsIENvdW50IHB1bHNlIHRvIGZsb3BweSBjb250cm9sbGVyLiAqLworCQl2YWwgPSByZWFkYihhdXhpb19yZWdpc3Rlcik7CisJCXZhbCB8PSBBVVhJT19BVVgxX0ZUQ05UOworCQl3cml0ZWIodmFsLCBhdXhpb19yZWdpc3Rlcik7CisJCXZhbCAmPSB+QVVYSU9fQVVYMV9GVENOVDsKKwkJd3JpdGViKHZhbCwgYXV4aW9fcmVnaXN0ZXIpOworCisJCWRvaW5nX3BkbWEgPSAwOworCX0KKworbWFpbl9pbnRlcnJ1cHQ6CisJcmV0dXJuIGZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfY29va2llKTsKK30KKworc3RhdGljIGludCBzdW5fZmRfcmVxdWVzdF9pcnEodm9pZCkKK3sKKwlzdGF0aWMgaW50IG9uY2UgPSAwOworCWludCBlcnJvcjsKKworCWlmKCFvbmNlKSB7CisJCW9uY2UgPSAxOworCisJCWVycm9yID0gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgc3BhcmNfZmxvcHB5X2lycSwKKwkJCQkgICAgSVJRRl9ESVNBQkxFRCwgImZsb3BweSIsIE5VTEwpOworCisJCXJldHVybiAoKGVycm9yID09IDApID8gMCA6IC0xKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN1bl9mZF9mcmVlX2lycSh2b2lkKQoreworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHN1bl9nZXRfZG1hX3Jlc2lkdWUodm9pZCkKK3sKKwkvKiBYWFggVGhpcyBpc24ndCByZWFsbHkgY29ycmVjdC4gWFhYICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3VuX2ZkX2VqZWN0KGludCBkcml2ZSkKK3sKKwlzZXRfZG9yKDB4MDAsIDB4ZmYsIDB4OTApOworCXVkZWxheSg1MDApOworCXNldF9kb3IoMHgwMCwgMHg2ZiwgMHgwMCk7CisJdWRlbGF5KDUwMCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUENJCisjaW5jbHVkZSA8YXNtL2VidXMuaD4KKyNpbmNsdWRlIDxhc20vbnM4NzMwMy5oPgorCitzdGF0aWMgc3RydWN0IGVidXNfZG1hX2luZm8gc3VuX3BjaV9mZF9lYnVzX2RtYTsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqc3VuX3BjaV9lYnVzX2RldjsKK3N0YXRpYyBpbnQgc3VuX3BjaV9icm9rZW5fZHJpdmUgPSAtMTsKKworc3RydWN0IHN1bl9wY2lfZG1hX29wIHsKKwl1bnNpZ25lZCBpbnQgCWFkZHI7CisJaW50CQlsZW47CisJaW50CQlkaXJlY3Rpb247CisJY2hhcgkJKmJ1ZjsKK307CitzdGF0aWMgc3RydWN0IHN1bl9wY2lfZG1hX29wIHN1bl9wY2lfZG1hX2N1cnJlbnQgPSB7IC0xVSwgMCwgMCwgTlVMTH07CitzdGF0aWMgc3RydWN0IHN1bl9wY2lfZG1hX29wIHN1bl9wY2lfZG1hX3BlbmRpbmcgPSB7IC0xVSwgMCwgMCwgTlVMTH07CisKK2V4dGVybiBpcnFyZXR1cm5fdCBmbG9wcHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN1bl9wY2lfZmRfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1ZGVsYXkoNSk7CisJcmV0dXJuIGluYihwb3J0KTsKK30KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdWRlbGF5KDUpOworCW91dGIodmFsLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9icm9rZW5fb3V0Yih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVkZWxheSg1KTsKKwkvKgorCSAqIFhYWDogRHVlIHRvIFNVTidzIGJyb2tlbiBmbG9wcHkgY29ubmVjdG9yIG9uIEFYIGFuZCBBWGkKKwkgKiAgICAgIHdlIG5lZWQgdG8gdHVybiBvbiBNT1RPUl8wIGFsc28sIGlmIHRoZSBmbG9wcHkgaXMKKwkgKiAgICAgIGp1bXBlcmVkIHRvIERTMSAobGlrZSBtb3N0IFBDIGZsb3BwaWVzIGFyZSkuIEkgaG9wZQorCSAqICAgICAgdGhpcyBkb2VzIG5vdCBodXJ0IGNvcnJlY3QgaGFyZHdhcmUgbGlrZSB0aGUgQVhtcC4KKwkgKiAgICAgIChFZGRpZSwgU2VwIDEyIDE5OTgpLgorCSAqLworCWlmIChwb3J0ID09ICgodW5zaWduZWQgbG9uZylzdW5fZmRjKSArIDIpIHsKKwkJaWYgKCgodmFsICYgMHgwMykgPT0gc3VuX3BjaV9icm9rZW5fZHJpdmUpICYmICh2YWwgJiAweDIwKSkgeworCQkJdmFsIHw9IDB4MTA7CisJCX0KKwl9CisJb3V0Yih2YWwsIHBvcnQpOworfQorCisjaWZkZWYgUENJX0ZEQ19TV0FQX0RSSVZFUworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9sZGVfYnJva2VuX291dGIodW5zaWduZWQgY2hhciB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1ZGVsYXkoNSk7CisJLyoKKwkgKiBYWFg6IER1ZSB0byBTVU4ncyBicm9rZW4gZmxvcHB5IGNvbm5lY3RvciBvbiBBWCBhbmQgQVhpCisJICogICAgICB3ZSBuZWVkIHRvIHR1cm4gb24gTU9UT1JfMCBhbHNvLCBpZiB0aGUgZmxvcHB5IGlzCisJICogICAgICBqdW1wZXJlZCB0byBEUzEgKGxpa2UgbW9zdCBQQyBmbG9wcGllcyBhcmUpLiBJIGhvcGUKKwkgKiAgICAgIHRoaXMgZG9lcyBub3QgaHVydCBjb3JyZWN0IGhhcmR3YXJlIGxpa2UgdGhlIEFYbXAuCisJICogICAgICAoRWRkaWUsIFNlcCAxMiAxOTk4KS4KKwkgKi8KKwlpZiAocG9ydCA9PSAoKHVuc2lnbmVkIGxvbmcpc3VuX2ZkYykgKyAyKSB7CisJCWlmICgoKHZhbCAmIDB4MDMpID09IHN1bl9wY2lfYnJva2VuX2RyaXZlKSAmJiAodmFsICYgMHgxMCkpIHsKKwkJCXZhbCAmPSB+KDB4MDMpOworCQkJdmFsIHw9IDB4MjE7CisJCX0KKwl9CisJb3V0Yih2YWwsIHBvcnQpOworfQorI2VuZGlmIC8qIFBDSV9GRENfU1dBUF9EUklWRVMgKi8KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9lbmFibGVfZG1hKHZvaWQpCit7CisJQlVHX09OKChOVUxMID09IHN1bl9wY2lfZG1hX3BlbmRpbmcuYnVmKSAJfHwKKwkgICAgKDAJICA9PSBzdW5fcGNpX2RtYV9wZW5kaW5nLmxlbikgCXx8CisJICAgICgwCSAgPT0gc3VuX3BjaV9kbWFfcGVuZGluZy5kaXJlY3Rpb24pKTsKKworCXN1bl9wY2lfZG1hX2N1cnJlbnQuYnVmID0gc3VuX3BjaV9kbWFfcGVuZGluZy5idWY7CisJc3VuX3BjaV9kbWFfY3VycmVudC5sZW4gPSBzdW5fcGNpX2RtYV9wZW5kaW5nLmxlbjsKKwlzdW5fcGNpX2RtYV9jdXJyZW50LmRpcmVjdGlvbiA9IHN1bl9wY2lfZG1hX3BlbmRpbmcuZGlyZWN0aW9uOworCisJc3VuX3BjaV9kbWFfcGVuZGluZy5idWYgID0gTlVMTDsKKwlzdW5fcGNpX2RtYV9wZW5kaW5nLmxlbiAgPSAwOworCXN1bl9wY2lfZG1hX3BlbmRpbmcuZGlyZWN0aW9uID0gMDsKKwlzdW5fcGNpX2RtYV9wZW5kaW5nLmFkZHIgPSAtMVU7CisKKwlzdW5fcGNpX2RtYV9jdXJyZW50LmFkZHIgPQorCQlwY2lfbWFwX3NpbmdsZShzdW5fcGNpX2VidXNfZGV2LAorCQkJICAgICAgIHN1bl9wY2lfZG1hX2N1cnJlbnQuYnVmLAorCQkJICAgICAgIHN1bl9wY2lfZG1hX2N1cnJlbnQubGVuLAorCQkJICAgICAgIHN1bl9wY2lfZG1hX2N1cnJlbnQuZGlyZWN0aW9uKTsKKworCWVidXNfZG1hX2VuYWJsZSgmc3VuX3BjaV9mZF9lYnVzX2RtYSwgMSk7CisKKwlpZiAoZWJ1c19kbWFfcmVxdWVzdCgmc3VuX3BjaV9mZF9lYnVzX2RtYSwKKwkJCSAgICAgc3VuX3BjaV9kbWFfY3VycmVudC5hZGRyLAorCQkJICAgICBzdW5fcGNpX2RtYV9jdXJyZW50LmxlbikpCisJCUJVRygpOworfQorCitzdGF0aWMgdm9pZCBzdW5fcGNpX2ZkX2Rpc2FibGVfZG1hKHZvaWQpCit7CisJZWJ1c19kbWFfZW5hYmxlKCZzdW5fcGNpX2ZkX2VidXNfZG1hLCAwKTsKKwlpZiAoc3VuX3BjaV9kbWFfY3VycmVudC5hZGRyICE9IC0xVSkKKwkJcGNpX3VubWFwX3NpbmdsZShzdW5fcGNpX2VidXNfZGV2LAorCQkJCSBzdW5fcGNpX2RtYV9jdXJyZW50LmFkZHIsCisJCQkJIHN1bl9wY2lfZG1hX2N1cnJlbnQubGVuLAorCQkJCSBzdW5fcGNpX2RtYV9jdXJyZW50LmRpcmVjdGlvbik7CisJc3VuX3BjaV9kbWFfY3VycmVudC5hZGRyID0gLTFVOworfQorCitzdGF0aWMgdm9pZCBzdW5fcGNpX2ZkX3NldF9kbWFfbW9kZShpbnQgbW9kZSkKK3sKKwlpZiAobW9kZSA9PSBETUFfTU9ERV9XUklURSkKKwkJc3VuX3BjaV9kbWFfcGVuZGluZy5kaXJlY3Rpb24gPSBQQ0lfRE1BX1RPREVWSUNFOworCWVsc2UKKwkJc3VuX3BjaV9kbWFfcGVuZGluZy5kaXJlY3Rpb24gPSBQQ0lfRE1BX0ZST01ERVZJQ0U7CisKKwllYnVzX2RtYV9wcmVwYXJlKCZzdW5fcGNpX2ZkX2VidXNfZG1hLCBtb2RlICE9IERNQV9NT0RFX1dSSVRFKTsKK30KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9zZXRfZG1hX2NvdW50KGludCBsZW5ndGgpCit7CisJc3VuX3BjaV9kbWFfcGVuZGluZy5sZW4gPSBsZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkIHN1bl9wY2lfZmRfc2V0X2RtYV9hZGRyKGNoYXIgKmJ1ZmZlcikKK3sKKwlzdW5fcGNpX2RtYV9wZW5kaW5nLmJ1ZiA9IGJ1ZmZlcjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzdW5fcGNpX2dldF9kbWFfcmVzaWR1ZSh2b2lkKQoreworCXJldHVybiBlYnVzX2RtYV9yZXNpZHVlKCZzdW5fcGNpX2ZkX2VidXNfZG1hKTsKK30KKworc3RhdGljIGludCBzdW5fcGNpX2ZkX3JlcXVlc3RfaXJxKHZvaWQpCit7CisJcmV0dXJuIGVidXNfZG1hX2lycV9lbmFibGUoJnN1bl9wY2lfZmRfZWJ1c19kbWEsIDEpOworfQorCitzdGF0aWMgdm9pZCBzdW5fcGNpX2ZkX2ZyZWVfaXJxKHZvaWQpCit7CisJZWJ1c19kbWFfaXJxX2VuYWJsZSgmc3VuX3BjaV9mZF9lYnVzX2RtYSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc3VuX3BjaV9mZF9lamVjdChpbnQgZHJpdmUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3ZvaWQgc3VuX3BjaV9mZF9kbWFfY2FsbGJhY2soc3RydWN0IGVidXNfZG1hX2luZm8gKnAsIGludCBldmVudCwgdm9pZCAqY29va2llKQoreworCWZsb3BweV9pbnRlcnJ1cHQoMCwgTlVMTCk7Cit9CisKKy8qCisgKiBGbG9wcHkgcHJvYmluZywgd2UnZCBsaWtlIHRvIHVzZSAvZGV2L2ZkMCBmb3IgYSBzaW5nbGUgRmxvcHB5IG9uIFBDSSwKKyAqIGV2ZW4gaWYgdGhpcyBpcyBjb25maWd1cmVkIHVzaW5nIERTMSwgdGh1cyBsb29rcyBsaWtlIC9kZXYvZmQxIHdpdGgKKyAqIHRoZSBjYWJsaW5nIHVzZWQgaW4gVWx0cmFzLgorICovCisjZGVmaW5lIERPUgkocG9ydCArIDIpCisjZGVmaW5lIE1TUgkocG9ydCArIDQpCisjZGVmaW5lIEZJRk8JKHBvcnQgKyA1KQorCitzdGF0aWMgdm9pZCBzdW5fcGNpX2ZkX291dF9ieXRlKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciB2YWwsCisJCQkgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCWludCB0aW1lb3V0ID0gMTAwMDsKKworCXdoaWxlICghKChzdGF0dXMgPSBpbmIoTVNSKSkgJiAweDgwKSAmJiAtLXRpbWVvdXQpCisJCXVkZWxheSgxMDApOworCW91dGIodmFsLCByZWcpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBzdW5fcGNpX2ZkX3NlbnNlaSh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdW5zaWduZWQgY2hhciByZXN1bHRbMl0gPSB7IDB4NzAsIDB4MDAgfTsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgaSA9IDA7CisKKwlzdW5fcGNpX2ZkX291dF9ieXRlKHBvcnQsIDB4MDgsIEZJRk8pOworCWRvIHsKKwkJaW50IHRpbWVvdXQgPSAxMDAwOworCisJCXdoaWxlICghKChzdGF0dXMgPSBpbmIoTVNSKSkgJiAweDgwKSAmJiAtLXRpbWVvdXQpCisJCQl1ZGVsYXkoMTAwKTsKKworCQlpZiAoIXRpbWVvdXQpCisJCQlicmVhazsKKworCQlpZiAoKHN0YXR1cyAmIDB4ZjApID09IDB4ZDApCisJCQlyZXN1bHRbaSsrXSA9IGluYihGSUZPKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfSB3aGlsZSAoaSA8IDIpOworCisJcmV0dXJuIHJlc3VsdFswXTsKK30KKworc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9yZXNldCh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdW5zaWduZWQgY2hhciBtYXNrID0gMHgwMDsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgdGltZW91dCA9IDEwMDAwOworCisJb3V0YigweDgwLCBNU1IpOworCWRvIHsKKwkJc3RhdHVzID0gc3VuX3BjaV9mZF9zZW5zZWkocG9ydCk7CisJCWlmICgoc3RhdHVzICYgMHhjMCkgPT0gMHhjMCkKKwkJCW1hc2sgfD0gMSA8PCAoc3RhdHVzICYgMHgwMyk7CisJCWVsc2UKKwkJCXVkZWxheSgxMDApOworCX0gd2hpbGUgKChtYXNrICE9IDB4MGYpICYmIC0tdGltZW91dCk7Cit9CisKK3N0YXRpYyBpbnQgc3VuX3BjaV9mZF90ZXN0X2RyaXZlKHVuc2lnbmVkIGxvbmcgcG9ydCwgaW50IGRyaXZlKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzLCBkYXRhOworCWludCB0aW1lb3V0ID0gMTAwMDsKKwlpbnQgcmVhZHk7CisKKwlzdW5fcGNpX2ZkX3Jlc2V0KHBvcnQpOworCisJZGF0YSA9ICgweDEwIDw8IGRyaXZlKSB8IDB4MGMgfCBkcml2ZTsKKwlzdW5fcGNpX2ZkX291dF9ieXRlKHBvcnQsIGRhdGEsIERPUik7CisKKwlzdW5fcGNpX2ZkX291dF9ieXRlKHBvcnQsIDB4MDcsIEZJRk8pOworCXN1bl9wY2lfZmRfb3V0X2J5dGUocG9ydCwgZHJpdmUgJiAweDAzLCBGSUZPKTsKKworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CisJCXN0YXR1cyA9IHN1bl9wY2lfZmRfc2Vuc2VpKHBvcnQpOworCX0gd2hpbGUgKCgoc3RhdHVzICYgMHhjMCkgPT0gMHg4MCkgJiYgLS10aW1lb3V0KTsKKworCWlmICghdGltZW91dCkKKwkJcmVhZHkgPSAwOworCWVsc2UKKwkJcmVhZHkgPSAoc3RhdHVzICYgMHgxMCkgPyAwIDogMTsKKworCXN1bl9wY2lfZmRfcmVzZXQocG9ydCk7CisJcmV0dXJuIHJlYWR5OworfQorI3VuZGVmIEZJRk8KKyN1bmRlZiBNU1IKKyN1bmRlZiBET1IKKworI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KKworI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyBpbnQgX19pbml0IGVidXNfZmR0aHJlZV9wKHN0cnVjdCBsaW51eF9lYnVzX2RldmljZSAqZWRldikKK3sKKwlpZiAoIXN0cmNtcChlZGV2LT5wcm9tX25vZGUtPm5hbWUsICJmZHRocmVlIikpCisJCXJldHVybiAxOworCWlmICghc3RyY21wKGVkZXYtPnByb21fbm9kZS0+bmFtZSwgImZsb3BweSIpKSB7CisJCWNvbnN0IGNoYXIgKmNvbXBhdDsKKworCQljb21wYXQgPSBvZl9nZXRfcHJvcGVydHkoZWRldi0+cHJvbV9ub2RlLAorCQkJCQkgImNvbXBhdGlibGUiLCBOVUxMKTsKKwkJaWYgKGNvbXBhdCAmJiAhc3RyY21wKGNvbXBhdCwgImZkdGhyZWUiKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc3VuX2Zsb3BweV9pbml0KHZvaWQpCit7CisJY2hhciBzdGF0ZVsxMjhdOworCXN0cnVjdCBzYnVzX2J1cyAqYnVzOworCXN0cnVjdCBzYnVzX2RldiAqc2RldiA9IE5VTEw7CisJc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CisKKwlpZiAoaW5pdGlhbGl6ZWQpCisJCXJldHVybiBzdW5fZmxvcHB5X3R5cGVzWzBdOworCWluaXRpYWxpemVkID0gMTsKKworCWZvcl9hbGxfc2J1c2RldiAoc2RldiwgYnVzKSB7CisJCWlmICghc3RyY21wKHNkZXYtPnByb21fbmFtZSwgIlNVTlcsZmR0d28iKSkKKwkJCWJyZWFrOworCX0KKwlpZihzZGV2KSB7CisJCWZsb3BweV9zZGV2ID0gc2RldjsKKwkJRkxPUFBZX0lSUSA9IHNkZXYtPmlycXNbMF07CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfUENJCisJCXN0cnVjdCBsaW51eF9lYnVzICplYnVzOworCQlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmVkZXYgPSBOVUxMOworCQl1bnNpZ25lZCBsb25nIGNvbmZpZyA9IDA7CisJCXZvaWQgX19pb21lbSAqYXV4aW9fcmVnOworCQljb25zdCBjaGFyICpzdGF0ZV9wcm9wOworCisJCWZvcl9lYWNoX2VidXMoZWJ1cykgeworCQkJZm9yX2VhY2hfZWJ1c2RldihlZGV2LCBlYnVzKSB7CisJCQkJaWYgKGVidXNfZmR0aHJlZV9wKGVkZXYpKQorCQkJCQlnb3RvIGVidXNfZG9uZTsKKwkJCX0KKwkJfQorCWVidXNfZG9uZToKKwkJaWYgKCFlZGV2KQorCQkJcmV0dXJuIDA7CisKKwkJc3RhdGVfcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShlZGV2LT5wcm9tX25vZGUsICJzdGF0dXMiLCBOVUxMKTsKKwkJaWYgKHN0YXRlX3Byb3AgJiYgIXN0cm5jbXAoc3RhdGVfcHJvcCwgImRpc2FibGVkIiwgOCkpCisJCQlyZXR1cm4gMDsKKworCQlGTE9QUFlfSVJRID0gZWRldi0+aXJxc1swXTsKKworCQkvKiBNYWtlIHN1cmUgdGhlIGhpZ2ggZGVuc2l0eSBiaXQgaXMgc2V0LCBzb21lIHN5c3RlbXMKKwkJICogKG1vc3Qgbm90YWJseSBVbHRyYTUvVWx0cmExMCkgY29tZSB1cCB3aXRoIGl0IGNsZWFyLgorCQkgKi8KKwkJYXV4aW9fcmVnID0gKHZvaWQgX19pb21lbSAqKSBlZGV2LT5yZXNvdXJjZVsyXS5zdGFydDsKKwkJd3JpdGVsKHJlYWRsKGF1eGlvX3JlZyl8MHgyLCBhdXhpb19yZWcpOworCisJCXN1bl9wY2lfZWJ1c19kZXYgPSBlYnVzLT5zZWxmOworCisJCXNwaW5fbG9ja19pbml0KCZzdW5fcGNpX2ZkX2VidXNfZG1hLmxvY2spOworCisJCS8qIFhYWCBpb3JlbWFwICovCisJCXN1bl9wY2lfZmRfZWJ1c19kbWEucmVncyA9ICh2b2lkIF9faW9tZW0gKikKKwkJCWVkZXYtPnJlc291cmNlWzFdLnN0YXJ0OworCQlpZiAoIXN1bl9wY2lfZmRfZWJ1c19kbWEucmVncykKKwkJCXJldHVybiAwOworCisJCXN1bl9wY2lfZmRfZWJ1c19kbWEuZmxhZ3MgPSAoRUJVU19ETUFfRkxBR19VU0VfRUJETUFfSEFORExFUiB8CisJCQkJCSAgICAgRUJVU19ETUFfRkxBR19UQ0lfRElTQUJMRSk7CisJCXN1bl9wY2lfZmRfZWJ1c19kbWEuY2FsbGJhY2sgPSBzdW5fcGNpX2ZkX2RtYV9jYWxsYmFjazsKKwkJc3VuX3BjaV9mZF9lYnVzX2RtYS5jbGllbnRfY29va2llID0gTlVMTDsKKwkJc3VuX3BjaV9mZF9lYnVzX2RtYS5pcnEgPSBGTE9QUFlfSVJROworCQlzdHJjcHkoc3VuX3BjaV9mZF9lYnVzX2RtYS5uYW1lLCAiZmxvcHB5Iik7CisJCWlmIChlYnVzX2RtYV9yZWdpc3Rlcigmc3VuX3BjaV9mZF9lYnVzX2RtYSkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBYWFggaW9yZW1hcCAqLworCQlzdW5fZmRjID0gKHN0cnVjdCBzdW5fZmxweV9jb250cm9sbGVyICopZWRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisKKwkJc3VuX2Zkb3BzLmZkX2luYiA9IHN1bl9wY2lfZmRfaW5iOworCQlzdW5fZmRvcHMuZmRfb3V0YiA9IHN1bl9wY2lfZmRfb3V0YjsKKworCQljYW5fdXNlX3ZpcnR1YWxfZG1hID0gdXNlX3ZpcnR1YWxfZG1hID0gMDsKKwkJc3VuX2Zkb3BzLmZkX2VuYWJsZV9kbWEgPSBzdW5fcGNpX2ZkX2VuYWJsZV9kbWE7CisJCXN1bl9mZG9wcy5mZF9kaXNhYmxlX2RtYSA9IHN1bl9wY2lfZmRfZGlzYWJsZV9kbWE7CisJCXN1bl9mZG9wcy5mZF9zZXRfZG1hX21vZGUgPSBzdW5fcGNpX2ZkX3NldF9kbWFfbW9kZTsKKwkJc3VuX2Zkb3BzLmZkX3NldF9kbWFfYWRkciA9IHN1bl9wY2lfZmRfc2V0X2RtYV9hZGRyOworCQlzdW5fZmRvcHMuZmRfc2V0X2RtYV9jb3VudCA9IHN1bl9wY2lfZmRfc2V0X2RtYV9jb3VudDsKKwkJc3VuX2Zkb3BzLmdldF9kbWFfcmVzaWR1ZSA9IHN1bl9wY2lfZ2V0X2RtYV9yZXNpZHVlOworCisJCXN1bl9mZG9wcy5mZF9yZXF1ZXN0X2lycSA9IHN1bl9wY2lfZmRfcmVxdWVzdF9pcnE7CisJCXN1bl9mZG9wcy5mZF9mcmVlX2lycSA9IHN1bl9wY2lfZmRfZnJlZV9pcnE7CisKKwkJc3VuX2Zkb3BzLmZkX2VqZWN0ID0gc3VuX3BjaV9mZF9lamVjdDsKKworCQlmZGNfc3RhdHVzID0gKHVuc2lnbmVkIGxvbmcpICZzdW5fZmRjLT5zdGF0dXNfODIwNzc7CisKKwkJLyoKKwkJICogWFhYOiBGaW5kIG91dCBvbiB3aGljaCBtYWNoaW5lcyB0aGlzIGlzIHJlYWxseSBuZWVkZWQuCisJCSAqLworCQlpZiAoMSkgeworCQkJc3VuX3BjaV9icm9rZW5fZHJpdmUgPSAxOworCQkJc3VuX2Zkb3BzLmZkX291dGIgPSBzdW5fcGNpX2ZkX2Jyb2tlbl9vdXRiOworCQl9CisKKwkJYWxsb3dlZF9kcml2ZV9tYXNrID0gMDsKKwkJaWYgKHN1bl9wY2lfZmRfdGVzdF9kcml2ZSgodW5zaWduZWQgbG9uZylzdW5fZmRjLCAwKSkKKwkJCXN1bl9mbG9wcHlfdHlwZXNbMF0gPSA0OworCQlpZiAoc3VuX3BjaV9mZF90ZXN0X2RyaXZlKCh1bnNpZ25lZCBsb25nKXN1bl9mZGMsIDEpKQorCQkJc3VuX2Zsb3BweV90eXBlc1sxXSA9IDQ7CisKKwkJLyoKKwkJICogRmluZCBOUzg3MzAzIFN1cGVySU8gY29uZmlnIHJlZ2lzdGVycyAodGhyb3VnaCBlY3BwKS4KKwkJICovCisJCWZvcl9lYWNoX2VidXMoZWJ1cykgeworCQkJZm9yX2VhY2hfZWJ1c2RldihlZGV2LCBlYnVzKSB7CisJCQkJaWYgKCFzdHJjbXAoZWRldi0+cHJvbV9ub2RlLT5uYW1lLCAiZWNwcCIpKSB7CisJCQkJCWNvbmZpZyA9IGVkZXYtPnJlc291cmNlWzFdLnN0YXJ0OworCQkJCQlnb3RvIGNvbmZpZ19kb25lOworCQkJCX0KKwkJCX0KKwkJfQorCWNvbmZpZ19kb25lOgorCisJCS8qCisJCSAqIFNhbml0eSBjaGVjaywgaXMgdGhpcyByZWFsbHkgdGhlIE5TODczMDM/CisJCSAqLworCQlzd2l0Y2ggKGNvbmZpZyAmIDB4M2ZmKSB7CisJCWNhc2UgMHgwMmU6CisJCWNhc2UgMHgxNWM6CisJCWNhc2UgMHgyNmU6CisJCWNhc2UgMHgzOTg6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbmZpZyA9IDA7CisJCX0KKworCQlpZiAoIWNvbmZpZykKKwkJCXJldHVybiBzdW5fZmxvcHB5X3R5cGVzWzBdOworCisJCS8qIEVuYWJsZSBQQy1BVCBtb2RlLiAqLworCQluczg3MzAzX21vZGlmeShjb25maWcsIEFTQywgMCwgMHhjMCk7CisKKyNpZmRlZiBQQ0lfRkRDX1NXQVBfRFJJVkVTCisJCS8qCisJCSAqIElmIG9ubHkgRmxvcHB5IDEgaXMgcHJlc2VudCwgc3dhcCBkcml2ZXMuCisJCSAqLworCQlpZiAoIXN1bl9mbG9wcHlfdHlwZXNbMF0gJiYgc3VuX2Zsb3BweV90eXBlc1sxXSkgeworCQkJLyoKKwkJCSAqIFNldCB0aGUgZHJpdmUgZXhjaGFuZ2UgYml0IGluIEZDUiBvbiBOUzg3MzAzLAorCQkJICogbWFrZSBzdXJlIG90aGVyIGJpdHMgYXJlIHNhbmUgYmVmb3JlIGRvaW5nIHNvLgorCQkJICovCisJCQluczg3MzAzX21vZGlmeShjb25maWcsIEZFUiwgRkVSX0VETSwgMCk7CisJCQluczg3MzAzX21vZGlmeShjb25maWcsIEFTQywgQVNDX0RSVjJfU0VMLCAwKTsKKwkJCW5zODczMDNfbW9kaWZ5KGNvbmZpZywgRkNSLCAwLCBGQ1JfTERFKTsKKworCQkJY29uZmlnID0gc3VuX2Zsb3BweV90eXBlc1swXTsKKwkJCXN1bl9mbG9wcHlfdHlwZXNbMF0gPSBzdW5fZmxvcHB5X3R5cGVzWzFdOworCQkJc3VuX2Zsb3BweV90eXBlc1sxXSA9IGNvbmZpZzsKKworCQkJaWYgKHN1bl9wY2lfYnJva2VuX2RyaXZlICE9IC0xKSB7CisJCQkJc3VuX3BjaV9icm9rZW5fZHJpdmUgPSAxIC0gc3VuX3BjaV9icm9rZW5fZHJpdmU7CisJCQkJc3VuX2Zkb3BzLmZkX291dGIgPSBzdW5fcGNpX2ZkX2xkZV9icm9rZW5fb3V0YjsKKwkJCX0KKwkJfQorI2VuZGlmIC8qIFBDSV9GRENfU1dBUF9EUklWRVMgKi8KKworCQlyZXR1cm4gc3VuX2Zsb3BweV90eXBlc1swXTsKKyNlbHNlCisJCXJldHVybiAwOworI2VuZGlmCisJfQorCXByb21fZ2V0cHJvcGVydHkoc2Rldi0+cHJvbV9ub2RlLCAic3RhdHVzIiwgc3RhdGUsIHNpemVvZihzdGF0ZSkpOworCWlmKCFzdHJuY21wKHN0YXRlLCAiZGlzYWJsZWQiLCA4KSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGNhbm5vdCBkbyBzYnVzX2lvcmVtYXAgaGVyZTogaXQgZG9lcyByZXF1ZXN0X3JlZ2lvbiwKKwkgKiB3aGljaCB0aGUgZ2VuZXJpYyBmbG9wcHkgZHJpdmVyIHRyaWVzIHRvIGRvIG9uY2UgYWdhaW4uCisJICogQnV0IHdlIG11c3QgdXNlIHRoZSBzZGV2IHJlc291cmNlIHZhbHVlcyBhcyB0aGV5IGhhdmUKKwkgKiBoYWQgcGFyZW50IHJhbmdlcyBhcHBsaWVkLgorCSAqLworCXN1bl9mZGMgPSAoc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKikKKwkJKHNkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsKKwkJICgoc2Rldi0+cmVzb3VyY2VbMF0uZmxhZ3MgJiAweDFmZlVMKSA8PCAzMlVMKSk7CisKKwkvKiBMYXN0IG1pbnV0ZSBzYW5pdHkgY2hlY2suLi4gKi8KKwlpZihzYnVzX3JlYWRiKCZzdW5fZmRjLT5zdGF0dXMxXzgyMDc3KSA9PSAweGZmKSB7CisJCXN1bl9mZGMgPSAoc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKiktMTsKKwkJcmV0dXJuIDA7CisJfQorCisgICAgICAgIHN1bl9mZG9wcy5mZF9pbmIgPSBzdW5fODIwNzdfZmRfaW5iOworICAgICAgICBzdW5fZmRvcHMuZmRfb3V0YiA9IHN1bl84MjA3N19mZF9vdXRiOworCisJY2FuX3VzZV92aXJ0dWFsX2RtYSA9IHVzZV92aXJ0dWFsX2RtYSA9IDE7CisJc3VuX2Zkb3BzLmZkX2VuYWJsZV9kbWEgPSBzdW5fZmRfZW5hYmxlX2RtYTsKKwlzdW5fZmRvcHMuZmRfZGlzYWJsZV9kbWEgPSBzdW5fZmRfZGlzYWJsZV9kbWE7CisJc3VuX2Zkb3BzLmZkX3NldF9kbWFfbW9kZSA9IHN1bl9mZF9zZXRfZG1hX21vZGU7CisJc3VuX2Zkb3BzLmZkX3NldF9kbWFfYWRkciA9IHN1bl9mZF9zZXRfZG1hX2FkZHI7CisJc3VuX2Zkb3BzLmZkX3NldF9kbWFfY291bnQgPSBzdW5fZmRfc2V0X2RtYV9jb3VudDsKKwlzdW5fZmRvcHMuZ2V0X2RtYV9yZXNpZHVlID0gc3VuX2dldF9kbWFfcmVzaWR1ZTsKKworCXN1bl9mZG9wcy5mZF9yZXF1ZXN0X2lycSA9IHN1bl9mZF9yZXF1ZXN0X2lycTsKKwlzdW5fZmRvcHMuZmRfZnJlZV9pcnEgPSBzdW5fZmRfZnJlZV9pcnE7CisKKwlzdW5fZmRvcHMuZmRfZWplY3QgPSBzdW5fZmRfZWplY3Q7CisKKyAgICAgICAgZmRjX3N0YXR1cyA9ICh1bnNpZ25lZCBsb25nKSAmc3VuX2ZkYy0+c3RhdHVzXzgyMDc3OworCisJLyogU3VjY2Vzcy4uLiAqLworCWFsbG93ZWRfZHJpdmVfbWFzayA9IDB4MDE7CisJc3VuX2Zsb3BweV90eXBlc1swXSA9IDQ7CisJc3VuX2Zsb3BweV90eXBlc1sxXSA9IDA7CisKKwlyZXR1cm4gc3VuX2Zsb3BweV90eXBlc1swXTsKK30KKworI2RlZmluZSBFWFRSQV9GTE9QUFlfUEFSQU1TCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZG1hX3NwaW5fbG9jayk7CisKKyNkZWZpbmUgY2xhaW1fZG1hX2xvY2soKSBcCisoewl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsgXAorCWZsYWdzOyBcCit9KQorCisjZGVmaW5lIHJlbGVhc2VfZG1hX2xvY2soX19mbGFncykgXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9zcGluX2xvY2ssIF9fZmxhZ3MpOworCisjZW5kaWYgLyogIShfX0FTTV9TUEFSQzY0X0ZMT1BQWV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZnB1bWFjcm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZwdW1hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0NjNmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZwdW1hY3JvLmgKQEAgLTAsMCArMSwzMyBAQAorLyogZnB1bWFjcm8uaDogRlBVIHJlbGF0ZWQgbWFjcm9zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQorICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X0ZQVU1BQ1JPX0gKKyNkZWZpbmUgX1NQQVJDNjRfRlBVTUFDUk9fSAorCisjaW5jbHVkZSA8YXNtL2FzaS5oPgorI2luY2x1ZGUgPGFzbS92aXNhc20uaD4KKworc3RydWN0IGZwdXN0YXRlIHsKKwl1MzIJcmVnc1s2NF07Cit9OworCisjZGVmaW5lIEZQVVNUQVRFIChzdHJ1Y3QgZnB1c3RhdGUgKikoY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHJlZ3MpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmcHJzX3JlYWQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZCAlJWZwcnMsICUwIiA6ICI9ciIgKHJldHZhbCkpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZwcnNfd3JpdGUodW5zaWduZWQgbG9uZyB2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIndyICUwLCAweDAsICUlZnBycyIgOiA6ICJyIiAodmFsKSk7Cit9CisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X0ZQVU1BQ1JPX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9mdXRleC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZnV0ZXguaAppbmRleCA2YTMzMmE5Li5jNmE5ZjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2Z1dGV4LmgKQEAgLTEsNiArMSw4IEBACi0jaWZuZGVmIF9BU01fRlVURVhfSAotI2RlZmluZSBfQVNNX0ZVVEVYX0gKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Z1dGV4Lmg+Ci0KKyNpZm5kZWYgX19fQVNNX1NQQVJDX0ZVVEVYX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX0ZVVEVYX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9mdXRleF82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvZnV0ZXhfMzIuaD4KKyNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9mdXRleF8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZnV0ZXhfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTMzMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZnV0ZXhfMzIuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9GVVRFWF9ICisjZGVmaW5lIF9BU01fRlVURVhfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZnV0ZXguaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9mdXRleF82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZnV0ZXhfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODM3ODkzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZnV0ZXhfNjQuaApAQCAtMCwwICsxLDExMCBAQAorI2lmbmRlZiBfU1BBUkM2NF9GVVRFWF9ICisjZGVmaW5lIF9TUEFSQzY0X0ZVVEVYX0gKKworI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2RlZmluZSBfX2Z1dGV4X2Nhc19vcChpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKKwkiXG4xOglsZHV3YQlbJTNdICUlYXNpLCAlMlxuIgkJXAorCSIJIiBpbnNuICJcbiIJCQkJXAorCSIyOgljYXNhCVslM10gJSVhc2ksICUyLCAlMVxuIgkJXAorCSIJY21wCSUyLCAlMVxuIgkJCVwKKwkiCWJuZSxwbgklJWljYywgMWJcbiIJCQlcCisJIgkgbW92CTAsICUwXG4iCQkJXAorCSIzOlxuIgkJCQkJCVwKKwkiCS5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuIglcCisJIgkuYWxpZ24JNFxuIgkJCQlcCisJIjQ6CXNldGhpCSUlaGkoM2IpLCAlMFxuIgkJCVwKKwkiCWptcGwJJTAgKyAlJWxvKDNiKSwgJSVnMFxuIgkJXAorCSIJIG1vdgklNSwgJTBcbiIJCQlcCisJIgkucHJldmlvdXNcbiIJCQkJXAorCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorCSIJLmFsaWduCTRcbiIJCQkJXAorCSIJLndvcmQJMWIsIDRiXG4iCQkJXAorCSIJLndvcmQJMmIsIDRiXG4iCQkJXAorCSIJLnByZXZpb3VzXG4iCQkJCVwKKwk6ICI9JnIiIChyZXQpLCAiPSZyIiAob2xkdmFsKSwgIj0mciIgKHRlbSkJXAorCTogInIiICh1YWRkciksICJyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpCVwKKwk6ICJtZW1vcnkiKQorCitzdGF0aWMgaW5saW5lIGludCBmdXRleF9hdG9taWNfb3BfaW51c2VyKGludCBlbmNvZGVkX29wLCBpbnQgX191c2VyICp1YWRkcikKK3sKKwlpbnQgb3AgPSAoZW5jb2RlZF9vcCA+PiAyOCkgJiA3OworCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKKwlpbnQgb3BhcmcgPSAoZW5jb2RlZF9vcCA8PCA4KSA+PiAyMDsKKwlpbnQgY21wYXJnID0gKGVuY29kZWRfb3AgPDwgMjApID4+IDIwOworCWludCBvbGR2YWwgPSAwLCByZXQsIHRlbTsKKworCWlmICh1bmxpa2VseSghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZihpbnQpKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICh1bmxpa2VseSgoKCh1bnNpZ25lZCBsb25nKSB1YWRkcikgJiAweDNVTCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKKwkJb3BhcmcgPSAxIDw8IG9wYXJnOworCisJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIEZVVEVYX09QX1NFVDoKKwkJX19mdXRleF9jYXNfb3AoIm1vdlx0JTQsICUxIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfQUREOgorCQlfX2Z1dGV4X2Nhc19vcCgiYWRkXHQlMiwgJTQsICUxIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfT1I6CisJCV9fZnV0ZXhfY2FzX29wKCJvclx0JTIsICU0LCAlMSIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX0FORE46CisJCV9fZnV0ZXhfY2FzX29wKCJhbmRcdCUyLCAlNCwgJTEiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9YT1I6CisJCV9fZnV0ZXhfY2FzX29wKCJ4b3JcdCUyLCAlNCwgJTEiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwl9CisKKwlwYWdlZmF1bHRfZW5hYmxlKCk7CisKKwlpZiAoIXJldCkgeworCQlzd2l0Y2ggKGNtcCkgeworCQljYXNlIEZVVEVYX09QX0NNUF9FUTogcmV0ID0gKG9sZHZhbCA9PSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTkU6IHJldCA9IChvbGR2YWwgIT0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0xUOiByZXQgPSAob2xkdmFsIDwgY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0dFOiByZXQgPSAob2xkdmFsID49IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9MRTogcmV0ID0gKG9sZHZhbCA8PSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfR1Q6IHJldCA9IChvbGR2YWwgPiBjbXBhcmcpOyBicmVhazsKKwkJZGVmYXVsdDogcmV0ID0gLUVOT1NZUzsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAorZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMoaW50IF9fdXNlciAqdWFkZHIsIGludCBvbGR2YWwsIGludCBuZXd2YWwpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuMToJY2FzYQlbJTNdICUlYXNpLCAlMiwgJTBcbiIKKwkiMjpcbiIKKwkiCS5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuIgorCSIJLmFsaWduCTRcbiIKKwkiMzoJc2V0aGkJJSVoaSgyYiksICUwXG4iCisJIglqbXBsCSUwICsgJSVsbygyYiksICUlZzBcbiIKKwkiCSBtb3YJJTQsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkiCS5hbGlnbgk0XG4iCisJIgkud29yZAkxYiwgM2JcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAobmV3dmFsKQorCTogIjAiIChuZXd2YWwpLCAiciIgKG9sZHZhbCksICJyIiAodWFkZHIpLCAiaSIgKC1FRkFVTFQpCisJOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gbmV3dmFsOworfQorCisjZW5kaWYgLyogIShfU1BBUkM2NF9GVVRFWF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaGFyZGlycS5oCmluZGV4IDRmNjNlZDguLjE1NjQ3ODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oYXJkaXJxLmgKQEAgLTEsMjMgKzEsOCBAQAotLyogaGFyZGlycS5oOiAzMi1iaXQgU3BhcmMgaGFyZCBJUlEgc3VwcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgQW50b24gQmxhbmNoYXJkIChhbnRvbkBzYW1iYS5vcmcpCi0gKi8KLQotI2lmbmRlZiBfX1NQQVJDX0hBUkRJUlFfSAotI2RlZmluZSBfX1NQQVJDX0hBUkRJUlFfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLQotLyogZW50cnkuUyBpcyBzZW5zaXRpdmUgdG8gdGhlIG9mZnNldHMgb2YgdGhlc2UgZmllbGRzICovIC8qIFhYWCBQMyBJcyBpdD8gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KLQotI2RlZmluZSBIQVJESVJRX0JJVFMgICAgOAotCi0jZW5kaWYgLyogX19TUEFSQ19IQVJESVJRX0ggKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX0hBUkRJUlFfSAorI2RlZmluZSBfX19BU01fU1BBUkNfSEFSRElSUV9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvaGFyZGlycV82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvaGFyZGlycV8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2hhcmRpcnFfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2hhcmRpcnFfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjYzZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaGFyZGlycV8zMi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGhhcmRpcnEuaDogMzItYml0IFNwYXJjIGhhcmQgSVJRIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEFudG9uIEJsYW5jaGFyZCAoYW50b25Ac2FtYmEub3JnKQorICovCisKKyNpZm5kZWYgX19TUEFSQ19IQVJESVJRX0gKKyNkZWZpbmUgX19TUEFSQ19IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisKKy8qIGVudHJ5LlMgaXMgc2Vuc2l0aXZlIHRvIHRoZSBvZmZzZXRzIG9mIHRoZXNlIGZpZWxkcyAqLyAvKiBYWFggUDMgSXMgaXQ/ICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCisKKyNkZWZpbmUgSEFSRElSUV9CSVRTICAgIDgKKworI2VuZGlmIC8qIF9fU1BBUkNfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9oYXJkaXJxXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9oYXJkaXJxXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyOWZkMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2hhcmRpcnFfNjQuaApAQCAtMCwwICsxLDE5IEBACisvKiBoYXJkaXJxLmg6IDY0LWJpdCBTcGFyYyBoYXJkIElSUSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMjAwNSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2lmbmRlZiBfX1NQQVJDNjRfSEFSRElSUV9ICisjZGVmaW5lIF9fU1BBUkM2NF9IQVJESVJRX0gKKworI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CisKKyNkZWZpbmUgX19BUkNIX0lSUV9TVEFUCisjZGVmaW5lIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpIFwKKwkobG9jYWxfY3B1X2RhdGEoKS5fX3NvZnRpcnFfcGVuZGluZykKKwordm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworI2RlZmluZSBIQVJESVJRX0JJVFMJOAorCisjZW5kaWYgLyogIShfX1NQQVJDNjRfSEFSRElSUV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaGVhZC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaGVhZC5oCmluZGV4IDdjMzU0OTEuLjE0NjUyYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2hlYWQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oZWFkLmgKQEAgLTEsMTAyICsxLDggQEAKLSNpZm5kZWYgX19TUEFSQ19IRUFEX0gKLSNkZWZpbmUgX19TUEFSQ19IRUFEX0gKLQotI2RlZmluZSBLRVJOQkFTRSAgICAgICAgMHhmMDAwMDAwMCAgLyogRmlyc3QgYWRkcmVzcyB0aGUga2VybmVsIHdpbGwgZXZlbnR1YWxseSBiZSAqLwotI2RlZmluZSBMT0FEX0FERFIgICAgICAgMHg0MDAwICAgICAgLyogcHJvbSBqdW1wcyB0byB1cyBoZXJlIHVubGVzcyB0aGlzIGlzIGVsZiAvYm9vdCAqLwotI2RlZmluZSBTVU40Q19TRUdTWiAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIFNSTU1VX0wxX0tCQVNFX09GRlNFVCAoKEtFUk5CQVNFPj4yNCk8PDIpICAvKiBVc2VkIGluIGJvb3QgcmVtYXBwaW5nLiAqLwotI2RlZmluZSBJTlRTX0VOQUIgICAgICAgIDB4MDEgICAgICAgICAgIC8qIGVudHJ5LlMgdXNlcyB0aGlzLiAqLwotCi0jZGVmaW5lIFNVTjRfUFJPTV9WRUNUT1IgMHhGRkU4MTAwMCAgICAgLyogU1VONCBQUk9NIG5lZWRzIHRvIGJlIGhhcmR3aXJlZCAqLwotCi0jZGVmaW5lIFdSSVRFX1BBVVNFICAgICAgbm9wOyBub3A7IG5vcDsgLyogSGF2ZSB0byBkbyB0aGlzIGFmdGVyICV3aW0vJXBzciBjaGcgKi8KLSNkZWZpbmUgTk9QX0lOU04gICAgICAgICAweDAxMDAwMDAwICAgICAvKiBVc2VkIHRvIHBhdGNoIHNwYXJjX3NhdmVfc3RhdGUgKi8KLQotLyogSGVyZSBhcmUgc29tZSB0cmFwIGdvb2RpZXMgKi8KLQotLyogR2VuZXJpYyB0cmFwIGVudHJ5LiAqLwotI2RlZmluZSBUUkFQX0VOVFJZKHR5cGUsIGxhYmVsKSBcCi0JcmQgJXBzciwgJWwwOyBiIGxhYmVsOyByZCAld2ltLCAlbDM7IG5vcDsKLQotLyogRGF0YS90ZXh0IGZhdWx0cy4gRGVmYXVsdHMgdG8gc3VuNGMgdmVyc2lvbiBhdCBib290IHRpbWUuICovCi0jZGVmaW5lIFNQQVJDX1RGQVVMVCByZCAlcHNyLCAlbDA7IHJkICV3aW0sICVsMzsgYiBzdW40Y19mYXVsdDsgbW92IDEsICVsNzsKLSNkZWZpbmUgU1BBUkNfREZBVUxUIHJkICVwc3IsICVsMDsgcmQgJXdpbSwgJWwzOyBiIHN1bjRjX2ZhdWx0OyBtb3YgMCwgJWw3OwotI2RlZmluZSBTUk1NVV9URkFVTFQgcmQgJXBzciwgJWwwOyByZCAld2ltLCAlbDM7IGIgc3JtbXVfZmF1bHQ7IG1vdiAxLCAlbDc7Ci0jZGVmaW5lIFNSTU1VX0RGQVVMVCByZCAlcHNyLCAlbDA7IHJkICV3aW0sICVsMzsgYiBzcm1tdV9mYXVsdDsgbW92IDAsICVsNzsKLQotLyogVGhpcyBpcyBmb3IgdHJhcHMgd2Ugc2hvdWxkIE5FVkVSIGdldC4gKi8KLSNkZWZpbmUgQkFEX1RSQVAobnVtKSBcCi0gICAgICAgIHJkICVwc3IsICVsMDsgbW92IG51bSwgJWw3OyBiIGJhZF90cmFwX2hhbmRsZXI7IHJkICV3aW0sICVsMzsKLQotLyogVGhpcyBpcyBmb3IgdHJhcHMgd2hlbiB3ZSB3YW50IGp1c3Qgc2tpcCB0aGUgaW5zdHJ1Y3Rpb24gd2hpY2ggY2F1c2VkIGl0ICovCi0jZGVmaW5lIFNLSVBfVFJBUCh0eXBlLCBuYW1lKSBcCi0Jam1wbCAlbDIsICVnMDsgcmV0dCAlbDIgKyA0OyBub3A7IG5vcDsKLQotLyogTm90aWNlIHRoYXQgZm9yIHRoZSBzeXN0ZW0gY2FsbHMgd2UgcHVsbCBhIHRyaWNrLiAgV2UgbG9hZCB1cCBhCi0gKiBkaWZmZXJlbnQgcG9pbnRlciB0byB0aGUgc3lzdGVtIGNhbGwgdmVjdG9yIHRhYmxlIGluICVsNywgYnV0IGNhbGwKLSAqIHRoZSBzYW1lIGdlbmVyaWMgc3lzdGVtIGNhbGwgbG93LWxldmVsIGVudHJ5IHBvaW50LiAgVGhlIHRyYXAgdGFibGUKLSAqIGVudHJ5IHNlcXVlbmNlcyBhcmUgYWxzbyBIeXBlclNwYXJjIHBpcGVsaW5lIGZyaWVuZGx5IDstKQotICovCi0KLS8qIFNvZnR3YXJlIHRyYXAgZm9yIExpbnV4IHN5c3RlbSBjYWxscy4gKi8KLSNkZWZpbmUgTElOVVhfU1lTQ0FMTF9UUkFQIFwKLSAgICAgICAgc2V0aGkgJWhpKHN5c19jYWxsX3RhYmxlKSwgJWw3OyBcCi0gICAgICAgIG9yICVsNywgJWxvKHN5c19jYWxsX3RhYmxlKSwgJWw3OyBcCi0gICAgICAgIGIgbGludXhfc3BhcmNfc3lzY2FsbDsgXAotICAgICAgICByZCAlcHNyLCAlbDA7Ci0KLSNkZWZpbmUgQlJFQUtQT0lOVF9UUkFQIFwKLQliIGJyZWFrcG9pbnRfdHJhcDsgXAotCXJkICVwc3IsJWwwOyBcCi0Jbm9wOyBcCi0Jbm9wOwotCi0jaWZkZWYgQ09ORklHX0tHREIKLSNkZWZpbmUgS0dEQl9UUkFQKG51bSkgXAotCWIga2dkYl90cmFwX2xvdzsgXAotCXJkICVwc3IsJWwwOyBcCi0Jbm9wOyBcCi0Jbm9wOworI2lmbmRlZiBfX19BU01fU1BBUkNfSEVBRF9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19IRUFEX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9oZWFkXzY0Lmg+CiAjZWxzZQotI2RlZmluZSBLR0RCX1RSQVAobnVtKSBcCi0JQkFEX1RSQVAobnVtKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9oZWFkXzMyLmg+CiAjZW5kaWYKLQotLyogVGhlIEdldCBDb25kaXRpb24gQ29kZXMgc29mdHdhcmUgdHJhcCBmb3IgdXNlcmxhbmQuICovCi0jZGVmaW5lIEdFVENDX1RSQVAgXAotICAgICAgICBiIGdldGNjX3RyYXBfaGFuZGxlcjsgbW92ICVwc3IsICVsMDsgbm9wOyBub3A7Ci0KLS8qIFRoZSBTZXQgQ29uZGl0aW9uIENvZGVzIHNvZnR3YXJlIHRyYXAgZm9yIHVzZXJsYW5kLiAqLwotI2RlZmluZSBTRVRDQ19UUkFQIFwKLSAgICAgICAgYiBzZXRjY190cmFwX2hhbmRsZXI7IG1vdiAlcHNyLCAlbDA7IG5vcDsgbm9wOwotCi0vKiBUaGUgR2V0IFBTUiBzb2Z0d2FyZSB0cmFwIGZvciB1c2VybGFuZC4gKi8KLSNkZWZpbmUgR0VUUFNSX1RSQVAgXAotCW1vdiAlcHNyLCAlaTA7IGptcCAlbDI7IHJldHQgJWwyICsgNDsgbm9wOwotCi0vKiBUaGlzIGlzIGZvciBoYXJkIGludGVycnVwdHMgZnJvbSBsZXZlbCAxLTE0LCAxNSBpcyBub24tbWFza2FibGUgKG5taSkgYW5kCi0gKiBnZXRzIGhhbmRsZWQgd2l0aCBhbm90aGVyIG1hY3JvLgotICovCi0jZGVmaW5lIFRSQVBfRU5UUllfSU5URVJSVVBUKGludF9sZXZlbCkgXAotICAgICAgICBtb3YgaW50X2xldmVsLCAlbDc7IHJkICVwc3IsICVsMDsgYiByZWFsX2lycV9lbnRyeTsgcmQgJXdpbSwgJWwzOwotCi0vKiBOTUkncyAoTm9uIE1hc2thYmxlIEludGVycnVwdHMpIGFyZSBzcGVjaWFsLCB5b3UgY2FuJ3Qga2VlcCB0aGVtCi0gKiBmcm9tIGNvbWluZyBpbiwgYW5kIGJhc2ljYWxseSBpZiB5b3UgZ2V0IG9uZSwgdGhlIHNob3dzIG92ZXIuIDsoCi0gKiBPbiB0aGUgc3VuNGMgdGhleSBhcmUgdXN1YWxseSBhc3luY2hyb25vdXMgbWVtb3J5IGVycm9ycywgb24gdGhlCi0gKiB0aGUgc3VuNG0gdGhleSBjb3VsZCBiZSBlaXRoZXIgZHVlIHRvIG1lbSBlcnJvcnMgb3IgYSBzb2Z0d2FyZQotICogaW5pdGlhdGVkIGludGVycnVwdCBmcm9tIHRoZSBwcm9tL2tlcm4gb24gYW4gU01QIGJveCBzYXlpbmcgIkkKLSAqIGNvbW1hbmQgeW91IHRvIGRvIENQVSB0cmlja3MsIHJlYWQgeW91ciBtYWlsYm94IGZvciBtb3JlIGluZm8uIgotICovCi0jZGVmaW5lIE5NSV9UUkFQIFwKLSAgICAgICAgcmQgJXdpbSwgJWwzOyBiIGxpbnV4X3RyYXBfbm1pX3N1bjRjOyBtb3YgJXBzciwgJWwwOyBub3A7Ci0KLS8qIFdpbmRvdyBvdmVyZmxvd3MvdW5kZXJmbG93cyBhcmUgc3BlY2lhbCBhbmQgd2UgbmVlZCB0byB0cnkgdG8gYmUgYXMKLSAqIGVmZmljaWVudCBhcyBwb3NzaWJsZSBoZXJlLi4uLgotICovCi0jZGVmaW5lIFdJTkRPV19TUElMTCBcCi0gICAgICAgIHJkICVwc3IsICVsMDsgcmQgJXdpbSwgJWwzOyBiIHNwaWxsX3dpbmRvd19lbnRyeTsgYW5kY2MgJWwwLCBQU1JfUFMsICVnMDsKLQotI2RlZmluZSBXSU5ET1dfRklMTCBcCi0gICAgICAgIHJkICVwc3IsICVsMDsgcmQgJXdpbSwgJWwzOyBiIGZpbGxfd2luZG93X2VudHJ5OyBhbmRjYyAlbDAsIFBTUl9QUywgJWcwOwotCi0jZW5kaWYgLyogX19TUEFSQ19IRUFEX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaGVhZF8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaGVhZF8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzU0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oZWFkXzMyLmgKQEAgLTAsMCArMSwxMDIgQEAKKyNpZm5kZWYgX19TUEFSQ19IRUFEX0gKKyNkZWZpbmUgX19TUEFSQ19IRUFEX0gKKworI2RlZmluZSBLRVJOQkFTRSAgICAgICAgMHhmMDAwMDAwMCAgLyogRmlyc3QgYWRkcmVzcyB0aGUga2VybmVsIHdpbGwgZXZlbnR1YWxseSBiZSAqLworI2RlZmluZSBMT0FEX0FERFIgICAgICAgMHg0MDAwICAgICAgLyogcHJvbSBqdW1wcyB0byB1cyBoZXJlIHVubGVzcyB0aGlzIGlzIGVsZiAvYm9vdCAqLworI2RlZmluZSBTVU40Q19TRUdTWiAgICAgKDEgPDwgMTgpCisjZGVmaW5lIFNSTU1VX0wxX0tCQVNFX09GRlNFVCAoKEtFUk5CQVNFPj4yNCk8PDIpICAvKiBVc2VkIGluIGJvb3QgcmVtYXBwaW5nLiAqLworI2RlZmluZSBJTlRTX0VOQUIgICAgICAgIDB4MDEgICAgICAgICAgIC8qIGVudHJ5LlMgdXNlcyB0aGlzLiAqLworCisjZGVmaW5lIFNVTjRfUFJPTV9WRUNUT1IgMHhGRkU4MTAwMCAgICAgLyogU1VONCBQUk9NIG5lZWRzIHRvIGJlIGhhcmR3aXJlZCAqLworCisjZGVmaW5lIFdSSVRFX1BBVVNFICAgICAgbm9wOyBub3A7IG5vcDsgLyogSGF2ZSB0byBkbyB0aGlzIGFmdGVyICV3aW0vJXBzciBjaGcgKi8KKyNkZWZpbmUgTk9QX0lOU04gICAgICAgICAweDAxMDAwMDAwICAgICAvKiBVc2VkIHRvIHBhdGNoIHNwYXJjX3NhdmVfc3RhdGUgKi8KKworLyogSGVyZSBhcmUgc29tZSB0cmFwIGdvb2RpZXMgKi8KKworLyogR2VuZXJpYyB0cmFwIGVudHJ5LiAqLworI2RlZmluZSBUUkFQX0VOVFJZKHR5cGUsIGxhYmVsKSBcCisJcmQgJXBzciwgJWwwOyBiIGxhYmVsOyByZCAld2ltLCAlbDM7IG5vcDsKKworLyogRGF0YS90ZXh0IGZhdWx0cy4gRGVmYXVsdHMgdG8gc3VuNGMgdmVyc2lvbiBhdCBib290IHRpbWUuICovCisjZGVmaW5lIFNQQVJDX1RGQVVMVCByZCAlcHNyLCAlbDA7IHJkICV3aW0sICVsMzsgYiBzdW40Y19mYXVsdDsgbW92IDEsICVsNzsKKyNkZWZpbmUgU1BBUkNfREZBVUxUIHJkICVwc3IsICVsMDsgcmQgJXdpbSwgJWwzOyBiIHN1bjRjX2ZhdWx0OyBtb3YgMCwgJWw3OworI2RlZmluZSBTUk1NVV9URkFVTFQgcmQgJXBzciwgJWwwOyByZCAld2ltLCAlbDM7IGIgc3JtbXVfZmF1bHQ7IG1vdiAxLCAlbDc7CisjZGVmaW5lIFNSTU1VX0RGQVVMVCByZCAlcHNyLCAlbDA7IHJkICV3aW0sICVsMzsgYiBzcm1tdV9mYXVsdDsgbW92IDAsICVsNzsKKworLyogVGhpcyBpcyBmb3IgdHJhcHMgd2Ugc2hvdWxkIE5FVkVSIGdldC4gKi8KKyNkZWZpbmUgQkFEX1RSQVAobnVtKSBcCisgICAgICAgIHJkICVwc3IsICVsMDsgbW92IG51bSwgJWw3OyBiIGJhZF90cmFwX2hhbmRsZXI7IHJkICV3aW0sICVsMzsKKworLyogVGhpcyBpcyBmb3IgdHJhcHMgd2hlbiB3ZSB3YW50IGp1c3Qgc2tpcCB0aGUgaW5zdHJ1Y3Rpb24gd2hpY2ggY2F1c2VkIGl0ICovCisjZGVmaW5lIFNLSVBfVFJBUCh0eXBlLCBuYW1lKSBcCisJam1wbCAlbDIsICVnMDsgcmV0dCAlbDIgKyA0OyBub3A7IG5vcDsKKworLyogTm90aWNlIHRoYXQgZm9yIHRoZSBzeXN0ZW0gY2FsbHMgd2UgcHVsbCBhIHRyaWNrLiAgV2UgbG9hZCB1cCBhCisgKiBkaWZmZXJlbnQgcG9pbnRlciB0byB0aGUgc3lzdGVtIGNhbGwgdmVjdG9yIHRhYmxlIGluICVsNywgYnV0IGNhbGwKKyAqIHRoZSBzYW1lIGdlbmVyaWMgc3lzdGVtIGNhbGwgbG93LWxldmVsIGVudHJ5IHBvaW50LiAgVGhlIHRyYXAgdGFibGUKKyAqIGVudHJ5IHNlcXVlbmNlcyBhcmUgYWxzbyBIeXBlclNwYXJjIHBpcGVsaW5lIGZyaWVuZGx5IDstKQorICovCisKKy8qIFNvZnR3YXJlIHRyYXAgZm9yIExpbnV4IHN5c3RlbSBjYWxscy4gKi8KKyNkZWZpbmUgTElOVVhfU1lTQ0FMTF9UUkFQIFwKKyAgICAgICAgc2V0aGkgJWhpKHN5c19jYWxsX3RhYmxlKSwgJWw3OyBcCisgICAgICAgIG9yICVsNywgJWxvKHN5c19jYWxsX3RhYmxlKSwgJWw3OyBcCisgICAgICAgIGIgbGludXhfc3BhcmNfc3lzY2FsbDsgXAorICAgICAgICByZCAlcHNyLCAlbDA7CisKKyNkZWZpbmUgQlJFQUtQT0lOVF9UUkFQIFwKKwliIGJyZWFrcG9pbnRfdHJhcDsgXAorCXJkICVwc3IsJWwwOyBcCisJbm9wOyBcCisJbm9wOworCisjaWZkZWYgQ09ORklHX0tHREIKKyNkZWZpbmUgS0dEQl9UUkFQKG51bSkgXAorCWIga2dkYl90cmFwX2xvdzsgXAorCXJkICVwc3IsJWwwOyBcCisJbm9wOyBcCisJbm9wOworI2Vsc2UKKyNkZWZpbmUgS0dEQl9UUkFQKG51bSkgXAorCUJBRF9UUkFQKG51bSkKKyNlbmRpZgorCisvKiBUaGUgR2V0IENvbmRpdGlvbiBDb2RlcyBzb2Z0d2FyZSB0cmFwIGZvciB1c2VybGFuZC4gKi8KKyNkZWZpbmUgR0VUQ0NfVFJBUCBcCisgICAgICAgIGIgZ2V0Y2NfdHJhcF9oYW5kbGVyOyBtb3YgJXBzciwgJWwwOyBub3A7IG5vcDsKKworLyogVGhlIFNldCBDb25kaXRpb24gQ29kZXMgc29mdHdhcmUgdHJhcCBmb3IgdXNlcmxhbmQuICovCisjZGVmaW5lIFNFVENDX1RSQVAgXAorICAgICAgICBiIHNldGNjX3RyYXBfaGFuZGxlcjsgbW92ICVwc3IsICVsMDsgbm9wOyBub3A7CisKKy8qIFRoZSBHZXQgUFNSIHNvZnR3YXJlIHRyYXAgZm9yIHVzZXJsYW5kLiAqLworI2RlZmluZSBHRVRQU1JfVFJBUCBcCisJbW92ICVwc3IsICVpMDsgam1wICVsMjsgcmV0dCAlbDIgKyA0OyBub3A7CisKKy8qIFRoaXMgaXMgZm9yIGhhcmQgaW50ZXJydXB0cyBmcm9tIGxldmVsIDEtMTQsIDE1IGlzIG5vbi1tYXNrYWJsZSAobm1pKSBhbmQKKyAqIGdldHMgaGFuZGxlZCB3aXRoIGFub3RoZXIgbWFjcm8uCisgKi8KKyNkZWZpbmUgVFJBUF9FTlRSWV9JTlRFUlJVUFQoaW50X2xldmVsKSBcCisgICAgICAgIG1vdiBpbnRfbGV2ZWwsICVsNzsgcmQgJXBzciwgJWwwOyBiIHJlYWxfaXJxX2VudHJ5OyByZCAld2ltLCAlbDM7CisKKy8qIE5NSSdzIChOb24gTWFza2FibGUgSW50ZXJydXB0cykgYXJlIHNwZWNpYWwsIHlvdSBjYW4ndCBrZWVwIHRoZW0KKyAqIGZyb20gY29taW5nIGluLCBhbmQgYmFzaWNhbGx5IGlmIHlvdSBnZXQgb25lLCB0aGUgc2hvd3Mgb3Zlci4gOygKKyAqIE9uIHRoZSBzdW40YyB0aGV5IGFyZSB1c3VhbGx5IGFzeW5jaHJvbm91cyBtZW1vcnkgZXJyb3JzLCBvbiB0aGUKKyAqIHRoZSBzdW40bSB0aGV5IGNvdWxkIGJlIGVpdGhlciBkdWUgdG8gbWVtIGVycm9ycyBvciBhIHNvZnR3YXJlCisgKiBpbml0aWF0ZWQgaW50ZXJydXB0IGZyb20gdGhlIHByb20va2VybiBvbiBhbiBTTVAgYm94IHNheWluZyAiSQorICogY29tbWFuZCB5b3UgdG8gZG8gQ1BVIHRyaWNrcywgcmVhZCB5b3VyIG1haWxib3ggZm9yIG1vcmUgaW5mby4iCisgKi8KKyNkZWZpbmUgTk1JX1RSQVAgXAorICAgICAgICByZCAld2ltLCAlbDM7IGIgbGludXhfdHJhcF9ubWlfc3VuNGM7IG1vdiAlcHNyLCAlbDA7IG5vcDsKKworLyogV2luZG93IG92ZXJmbG93cy91bmRlcmZsb3dzIGFyZSBzcGVjaWFsIGFuZCB3ZSBuZWVkIHRvIHRyeSB0byBiZSBhcworICogZWZmaWNpZW50IGFzIHBvc3NpYmxlIGhlcmUuLi4uCisgKi8KKyNkZWZpbmUgV0lORE9XX1NQSUxMIFwKKyAgICAgICAgcmQgJXBzciwgJWwwOyByZCAld2ltLCAlbDM7IGIgc3BpbGxfd2luZG93X2VudHJ5OyBhbmRjYyAlbDAsIFBTUl9QUywgJWcwOworCisjZGVmaW5lIFdJTkRPV19GSUxMIFwKKyAgICAgICAgcmQgJXBzciwgJWwwOyByZCAld2ltLCAlbDM7IGIgZmlsbF93aW5kb3dfZW50cnk7IGFuZGNjICVsMCwgUFNSX1BTLCAlZzA7CisKKyNlbmRpZiAvKiBfX1NQQVJDX0hFQURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaGVhZF82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaGVhZF82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTlkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oZWFkXzY0LmgKQEAgLTAsMCArMSw3NiBAQAorI2lmbmRlZiBfU1BBUkM2NF9IRUFEX0gKKyNkZWZpbmUgX1NQQVJDNjRfSEVBRF9ICisKKyNpbmNsdWRlIDxhc20vcHN0YXRlLmg+CisKKwkvKiB3cnByCSVnMCwgdmFsLCAlZ2wgKi8KKyNkZWZpbmUgU0VUX0dMKHZhbCkJXAorCS53b3JkCTB4YTE5MDIwMDAgfCB2YWwKKworCS8qIHJkcHIgJWdsLCAlZ04gKi8KKyNkZWZpbmUgR0VUX0dMX0dMT0JBTChOKQlcCisJLndvcmQJMHg4MTU0MDAwMCB8IChOIDw8IDI1KQorCisjZGVmaW5lIEtFUk5CQVNFCTB4NDAwMDAwCisKKyNkZWZpbmUJUFRSRUdTX09GRgkoU1RBQ0tfQklBUyArIFNUQUNLRlJBTUVfU1opCisKKyNkZWZpbmUgX19DSEVFVEFIX0lECTB4MDAzZTAwMTQKKyNkZWZpbmUgX19KQUxBUEVOT19JRAkweDAwM2UwMDE2CisjZGVmaW5lIF9fU0VSUkFOT19JRAkweDAwM2UwMDIyCisKKyNkZWZpbmUgQ0hFRVRBSF9NQU5VRgkJMHgwMDNlCisjZGVmaW5lIENIRUVUQUhfSU1QTAkJMHgwMDE0IC8qIFVsdHJhLUlJSSAgICovCisjZGVmaW5lIENIRUVUQUhfUExVU19JTVBMCTB4MDAxNSAvKiBVbHRyYS1JSUkrICAqLworI2RlZmluZSBKQUxBUEVOT19JTVBMCQkweDAwMTYgLyogVWx0cmEtSUlJaSAgKi8KKyNkZWZpbmUgSkFHVUFSX0lNUEwJCTB4MDAxOCAvKiBVbHRyYS1JViAgICAqLworI2RlZmluZSBQQU5USEVSX0lNUEwJCTB4MDAxOSAvKiBVbHRyYS1JVisgICAqLworI2RlZmluZSBTRVJSQU5PX0lNUEwJCTB4MDAyMiAvKiBVbHRyYS1JSUlpKyAqLworCisjZGVmaW5lIEJSQU5DSF9JRl9TVU40Vih0bXAxLGxhYmVsKQkJXAorCXNldGhpCSVoaShpc19zdW40diksICV0bXAxOwkJXAorCWxkdXcJWyV0bXAxICsgJWxvKGlzX3N1bjR2KV0sICV0bXAxOyBcCisJYnJueixwbgkldG1wMSwgbGFiZWw7CQkJXAorCSBub3AKKworI2RlZmluZSBCUkFOQ0hfSUZfQ0hFRVRBSF9CQVNFKHRtcDEsdG1wMixsYWJlbCkJXAorCXJkcHIJJXZlciwgJXRtcDE7CQkJXAorCXNldGhpCSVoaShfX0NIRUVUQUhfSUQpLCAldG1wMjsJXAorCXNybHgJJXRtcDEsIDMyLCAldG1wMTsJCVwKKwlvcgkldG1wMiwgJWxvKF9fQ0hFRVRBSF9JRCksICV0bXAyO1wKKwljbXAJJXRtcDEsICV0bXAyOwkJCVwKKwliZSxwbgklaWNjLCBsYWJlbDsJCQlcCisJIG5vcDsKKworI2RlZmluZSBCUkFOQ0hfSUZfSkFMQVBFTk8odG1wMSx0bXAyLGxhYmVsKQlcCisJcmRwcgkldmVyLCAldG1wMTsJCQlcCisJc2V0aGkJJWhpKF9fSkFMQVBFTk9fSUQpLCAldG1wMjsJXAorCXNybHgJJXRtcDEsIDMyLCAldG1wMTsJCVwKKwlvcgkldG1wMiwgJWxvKF9fSkFMQVBFTk9fSUQpLCAldG1wMjtcCisJY21wCSV0bXAxLCAldG1wMjsJCQlcCisJYmUscG4JJWljYywgbGFiZWw7CQkJXAorCSBub3A7CisKKyNkZWZpbmUgQlJBTkNIX0lGX0NIRUVUQUhfUExVU19PUl9GT0xMT1dPTih0bXAxLHRtcDIsbGFiZWwpCVwKKwlyZHByCSV2ZXIsICV0bXAxOwkJCVwKKwlzcmx4CSV0bXAxLCAoMzIgKyAxNiksICV0bXAyOwlcCisJY21wCSV0bXAyLCBDSEVFVEFIX01BTlVGOwkJXAorCWJuZSxwdAkleGNjLCA5OWY7CQkJXAorCSBzbGx4CSV0bXAxLCAxNiwgJXRtcDE7CQlcCisJc3JseAkldG1wMSwgKDMyICsgMTYpLCAldG1wMjsJXAorCWNtcAkldG1wMiwgQ0hFRVRBSF9QTFVTX0lNUEw7CVwKKwliZ2V1LHB0CSV4Y2MsIGxhYmVsOwkJCVwKKzk5Ogkgbm9wOworCisjZGVmaW5lIEJSQU5DSF9JRl9BTllfQ0hFRVRBSCh0bXAxLHRtcDIsbGFiZWwpCVwKKwlyZHByCSV2ZXIsICV0bXAxOwkJCVwKKwlzcmx4CSV0bXAxLCAoMzIgKyAxNiksICV0bXAyOwlcCisJY21wCSV0bXAyLCBDSEVFVEFIX01BTlVGOwkJXAorCWJuZSxwdAkleGNjLCA5OWY7CQkJXAorCSBzbGx4CSV0bXAxLCAxNiwgJXRtcDE7CQlcCisJc3JseAkldG1wMSwgKDMyICsgMTYpLCAldG1wMjsJXAorCWNtcAkldG1wMiwgQ0hFRVRBSF9JTVBMOwkJXAorCWJnZXUscHQJJXhjYywgbGFiZWw7CQkJXAorOTk6CSBub3A7CisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X0hFQURfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2h1Z2V0bGIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2h1Z2V0bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTJhZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaHVnZXRsYi5oCkBAIC0wLDAgKzEsODQgQEAKKyNpZm5kZWYgX0FTTV9TUEFSQzY0X0hVR0VUTEJfSAorI2RlZmluZSBfQVNNX1NQQVJDNjRfSFVHRVRMQl9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisKK3ZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCSAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CisKK3B0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICBwdGVfdCAqcHRlcCk7CisKK3ZvaWQgaHVnZXRsYl9wcmVmYXVsdF9hcmNoX2hvb2soc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCitzdGF0aWMgaW5saW5lIGludCBpc19odWdlcGFnZV9vbmx5X3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgdW5zaWduZWQgbG9uZyBsZW4pIHsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIHRoZSBhcmNoIGRvZXNuJ3Qgc3VwcGx5IHNvbWV0aGluZyBlbHNlLCBhc3N1bWUgdGhhdCBodWdlcGFnZQorICogc2l6ZSBhbGlnbmVkIHJlZ2lvbnMgYXJlIG9rIHdpdGhvdXQgZnVydGhlciBwcmVwYXJhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHJlcGFyZV9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWlmIChsZW4gJiB+SFBBR0VfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGFkZHIgJiB+SFBBR0VfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2ZyZWVfcGdkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICoqdGxiLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBmbG9vciwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGNlaWxpbmcpCit7CisJZnJlZV9wZ2RfcmFuZ2UodGxiLCBhZGRyLCBlbmQsIGZsb29yLCBjZWlsaW5nKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlX25vbmUocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfbm9uZShwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV93cnByb3RlY3QocHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCXB0ZXBfc2V0X3dycHJvdGVjdChtbSwgYWRkciwgcHRlcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCisJCQkJCSAgICAgcHRlX3QgcHRlLCBpbnQgZGlydHkpCit7CisJcmV0dXJuIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIGFkZHIsIHB0ZXAsIHB0ZSwgZGlydHkpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQocHRlX3QgKnB0ZXApCit7CisJcmV0dXJuICpwdGVwOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3ByZXBhcmVfaHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlbGVhc2VfaHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1NQQVJDNjRfSFVHRVRMQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9odnRyYW1wLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9odnRyYW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiOWI5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2h2dHJhbXAuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9TUEFSQzY0X0hWVFJBUF9ICisjZGVmaW5lIF9TUEFSQzY0X0hWVFJBUF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgaHZ0cmFtcF9tYXBwaW5nIHsKKwlfX3U2NAkJdmFkZHI7CisJX191NjQJCXR0ZTsKK307CisKK3N0cnVjdCBodnRyYW1wX2Rlc2NyIHsKKwlfX3UzMgkJCWNwdTsKKwlfX3UzMgkJCW51bV9tYXBwaW5nczsKKwlfX3U2NAkJCWZhdWx0X2luZm9fdmE7CisJX191NjQJCQlmYXVsdF9pbmZvX3BhOworCV9fdTY0CQkJdGhyZWFkX3JlZzsKKwlzdHJ1Y3QgaHZ0cmFtcF9tYXBwaW5nCW1hcHNbMV07Cit9OworCitleHRlcm4gdm9pZCBodl9jcHVfc3RhcnR1cCh1bnNpZ25lZCBsb25nIGh2ZGVzY3JfcGEpOworCisjZW5kaWYKKworI2RlZmluZSBIVlRSQU1QX0RFU0NSX0NQVQkJMHgwMAorI2RlZmluZSBIVlRSQU1QX0RFU0NSX05VTV9NQVBQSU5HUwkweDA0CisjZGVmaW5lIEhWVFJBTVBfREVTQ1JfRkFVTFRfSU5GT19WQQkweDA4CisjZGVmaW5lIEhWVFJBTVBfREVTQ1JfRkFVTFRfSU5GT19QQQkweDEwCisjZGVmaW5lIEhWVFJBTVBfREVTQ1JfVEhSRUFEX1JFRwkweDE4CisjZGVmaW5lIEhWVFJBTVBfREVTQ1JfTUFQUwkJMHgyMAorCisjZGVmaW5lIEhWVFJBTVBfTUFQUElOR19WQUREUgkJMHgwMAorI2RlZmluZSBIVlRSQU1QX01BUFBJTkdfVFRFCQkweDA4CisjZGVmaW5lIEhWVFJBTVBfTUFQUElOR19TSVpFCQkweDEwCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9IVlRSQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaHlwZXJ2aXNvci5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaHlwZXJ2aXNvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOWFlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oeXBlcnZpc29yLmgKQEAgLTAsMCArMSwyOTQ5IEBACisjaWZuZGVmIF9TUEFSQzY0X0hZUEVSVklTT1JfSAorI2RlZmluZSBfU1BBUkM2NF9IWVBFUlZJU09SX0gKKworLyogU3VuNHYgaHlwZXJ2aXNvciBpbnRlcmZhY2VzIGFuZCBkZWZpbmVzLgorICoKKyAqIEh5cGVydmlzb3IgY2FsbHMgYXJlIG1hZGUgdmlhIHRyYXBzIHRvIHNvZnR3YXJlIHRyYXBzIG51bWJlciAweDgwCisgKiBhbmQgYWJvdmUuICBSZWdpc3RlcnMgJW8wIHRvICVvNSBzZXJ2ZSBhcyBhcmd1bWVudCwgc3RhdHVzLCBhbmQKKyAqIHJldHVybiB2YWx1ZSByZWdpc3RlcnMuCisgKgorICogVGhlcmUgYXJlIHR3byBraW5kcyBvZiB0aGVzZSB0cmFwcy4gIEZpcnN0IHRoZXJlIGFyZSB0aGUgbm9ybWFsCisgKiAiZmFzdCB0cmFwcyIgd2hpY2ggdXNlIHNvZnR3YXJlIHRyYXAgMHg4MCBhbmQgZW5jb2RlIHRoZSBmdW5jdGlvbgorICogdG8gaW52b2tlIGJ5IG51bWJlciBpbiByZWdpc3RlciAlbzUuICBBcmd1bWVudCBhbmQgcmV0dXJuIHZhbHVlCisgKiBoYW5kbGluZyBpcyBhcyBmb2xsb3dzOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAlbzUgIHwgZnVuY3Rpb24gbnVtYmVyIHwgICAgIHVuZGVmaW5lZCAgICAgfAorICogfCAgJW8wICB8ICAgYXJndW1lbnQgMCAgICB8ICAgcmV0dXJuIHN0YXR1cyAgIHwKKyAqIHwgICVvMSAgfCAgIGFyZ3VtZW50IDEgICAgfCAgIHJldHVybiB2YWx1ZSAxICB8CisgKiB8ICAlbzIgIHwgICBhcmd1bWVudCAyICAgIHwgICByZXR1cm4gdmFsdWUgMiAgfAorICogfCAgJW8zICB8ICAgYXJndW1lbnQgMyAgICB8ICAgcmV0dXJuIHZhbHVlIDMgIHwKKyAqIHwgICVvNCAgfCAgIGFyZ3VtZW50IDQgICAgfCAgIHJldHVybiB2YWx1ZSA0ICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBzZWNvbmQgdHlwZSBhcmUgImh5cGVyLWZhc3QgdHJhcHMiIHdoaWNoIGVuY29kZSB0aGUgZnVuY3Rpb24KKyAqIG51bWJlciBpbiB0aGUgc29mdHdhcmUgdHJhcCBudW1iZXIgaXRzZWxmLiAgU28gdGhlc2UgdXNlIHRyYXAKKyAqIG51bWJlcnMgPiAweDgwLiAgVGhlIHJlZ2lzdGVyIHVzYWdlIGZvciBoeXBlci1mYXN0IHRyYXBzIGlzIGFzCisgKiBmb2xsb3dzOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAlbzAgIHwgICBhcmd1bWVudCAwICAgIHwgICByZXR1cm4gc3RhdHVzICAgfAorICogfCAgJW8xICB8ICAgYXJndW1lbnQgMSAgICB8ICAgcmV0dXJuIHZhbHVlIDEgIHwKKyAqIHwgICVvMiAgfCAgIGFyZ3VtZW50IDIgICAgfCAgIHJldHVybiB2YWx1ZSAyICB8CisgKiB8ICAlbzMgIHwgICBhcmd1bWVudCAzICAgIHwgICByZXR1cm4gdmFsdWUgMyAgfAorICogfCAgJW80ICB8ICAgYXJndW1lbnQgNCAgICB8ICAgcmV0dXJuIHZhbHVlIDQgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogUmVnaXN0ZXJzIHByb3ZpZGluZyBleHBsaWNpdCBhcmd1bWVudHMgdG8gdGhlIGh5cGVydmlzb3IgY2FsbHMKKyAqIGFyZSB2b2xhdGlsZSBhY3Jvc3MgdGhlIGNhbGwuICBVcG9uIHJldHVybiB0aGVpciB2YWx1ZXMgYXJlCisgKiB1bmRlZmluZWQgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIGNvbnRhaW5pbmcgYSBwYXJ0aWN1bGFyCisgKiByZXR1cm4gdmFsdWUgYnkgdGhlIHNwZWNpZmljIGNhbGwuICBUaGUgcmV0dXJuIHN0YXR1cyBpcyBhbHdheXMKKyAqIHJldHVybmVkIGluIHJlZ2lzdGVyICVvMCwgemVybyBpbmRpY2F0ZXMgYSBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZgorICogdGhlIGh5cGVydmlzb3IgY2FsbCBhbmQgb3RoZXIgdmFsdWVzIGluZGljYXRlIGFuIGVycm9yIHN0YXR1cyBhcworICogZGVmaW5lZCBiZWxvdy4gIFNvLCBmb3IgZXhhbXBsZSwgaWYgYSBoeXBlci1mYXN0IHRyYXAgdGFrZXMKKyAqIGFyZ3VtZW50cyAwLCAxLCBhbmQgMiwgdGhlbiAlbzAsICVvMSwgYW5kICVvMiBhcmUgdm9sYXRpbGUgYWNyb3NzCisgKiB0aGUgY2FsbCBhbmQgJW8zLCAlbzQsIGFuZCAlbzUgd291bGQgYmUgcHJlc2VydmVkLgorICoKKyAqIElmIHRoZSBoeXBlcnZpc29yIHRyYXAgaXMgaW52YWxpZCwgb3IgdGhlIGZhc3QgdHJhcCBmdW5jdGlvbiBudW1iZXIKKyAqIGlzIGludmFsaWQsIEhWX0VCQURUUkFQIHdpbGwgYmUgcmV0dXJuZWQgaW4gJW8wLiAgQWxzbywgYWxsIDY0LWJpdHMKKyAqIG9mIHRoZSBhcmd1bWVudCBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgc2lnbmlmaWNhbnQuCisgKi8KKworLyogVHJhcCBudW1iZXJzLiAgKi8KKyNkZWZpbmUgSFZfRkFTVF9UUkFQCQkweDgwCisjZGVmaW5lIEhWX01NVV9NQVBfQUREUl9UUkFQCTB4ODMKKyNkZWZpbmUgSFZfTU1VX1VOTUFQX0FERFJfVFJBUAkweDg0CisjZGVmaW5lIEhWX1RUUkFDRV9BRERFTlRSWV9UUkFQCTB4ODUKKyNkZWZpbmUgSFZfQ09SRV9UUkFQCQkweGZmCisKKy8qIEVycm9yIGNvZGVzLiAgKi8KKyNkZWZpbmUgSFZfRU9LCQkJCTAgIC8qIFN1Y2Nlc3NmdWwgcmV0dXJuICAgICAgICAgICAgKi8KKyNkZWZpbmUgSFZfRU5PQ1BVCQkJMSAgLyogSW52YWxpZCBDUFUgaWQgICAgICAgICAgICAgICAqLworI2RlZmluZSBIVl9FTk9SQUREUgkJCTIgIC8qIEludmFsaWQgcmVhbCBhZGRyZXNzICAgICAgICAgKi8KKyNkZWZpbmUgSFZfRU5PSU5UUgkJCTMgIC8qIEludmFsaWQgaW50ZXJydXB0IGlkICAgICAgICAgKi8KKyNkZWZpbmUgSFZfRUJBRFBHU1oJCQk0ICAvKiBJbnZhbGlkIHBhZ2VzaXplIGVuY29kaW5nICAgICovCisjZGVmaW5lIEhWX0VCQURUU0IJCQk1ICAvKiBJbnZhbGlkIFRTQiBkZXNjcmlwdGlvbiAgICAgICovCisjZGVmaW5lIEhWX0VJTlZBTAkJCTYgIC8qIEludmFsaWQgYXJndW1lbnQgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSFZfRUJBRFRSQVAJCQk3ICAvKiBJbnZhbGlkIGZ1bmN0aW9uIG51bWJlciAgICAgICovCisjZGVmaW5lIEhWX0VCQURBTElHTgkJCTggIC8qIEludmFsaWQgYWRkcmVzcyBhbGlnbm1lbnQgICAgKi8KKyNkZWZpbmUgSFZfRVdPVUxEQkxPQ0sJCQk5ICAvKiBDYW5ub3QgY29tcGxldGUgdy9vIGJsb2NraW5nICovCisjZGVmaW5lIEhWX0VOT0FDQ0VTUwkJCTEwIC8qIE5vIGFjY2VzcyB0byByZXNvdXJjZSAgICAgICAgKi8KKyNkZWZpbmUgSFZfRUlPCQkJCTExIC8qIEkvTyBlcnJvciAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSFZfRUNQVUVSUk9SCQkJMTIgLyogQ1BVIGluIGVycm9yIHN0YXRlICAgICAgICAgICAqLworI2RlZmluZSBIVl9FTk9UU1VQUE9SVEVECQkxMyAvKiBGdW5jdGlvbiBub3Qgc3VwcG9ydGVkICAgICAgICovCisjZGVmaW5lIEhWX0VOT01BUAkJCTE0IC8qIE5vIG1hcHBpbmcgZm91bmQgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSFZfRVRPT01BTlkJCQkxNSAvKiBUb28gbWFueSBpdGVtcyBzcGVjaWZpZWQgICAgICovCisjZGVmaW5lIEhWX0VDSEFOTkVMCQkJMTYgLyogSW52YWxpZCBMREMgY2hhbm5lbCAgICAgICAgICAqLworI2RlZmluZSBIVl9FQlVTWQkJCTE3IC8qIFJlc291cmNlIGJ1c3kgICAgICAgICAgICAgICAgKi8KKworLyogbWFjaF9leGl0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9FWElUCisgKiBBUkcwOglleGl0IGNvZGUKKyAqIEVSUk9SUzoJVGhpcyBzZXJ2aWNlIGRvZXMgbm90IHJldHVybi4KKyAqCisgKiBTdG9wIGFsbCBDUFVzIGluIHRoZSB2aXJ0dWFsIGRvbWFpbiBhbmQgcGxhY2UgdGhlbSBpbnRvIHRoZSBzdG9wcGVkCisgKiBzdGF0ZS4gIFRoZSA2NC1iaXQgZXhpdCBjb2RlIG1heSBiZSBwYXNzZWQgdG8gYSBzZXJ2aWNlIGVudGl0eSBhcworICogdGhlIGRvbWFpbidzIGV4aXQgc3RhdHVzLiAgT24gc3lzdGVtcyB3aXRob3V0IGEgc2VydmljZSBlbnRpdHksIHRoZQorICogZG9tYWluIHdpbGwgdW5kZXJnbyBhIHJlc2V0LCBhbmQgdGhlIGJvb3QgZmlybXdhcmUgd2lsbCBiZQorICogcmVsb2FkZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHJldHVybiB0byB0aGUgZ3Vlc3QgdGhhdCBpbnZva2VzIGl0LgorICoKKyAqIE5vdGU6IEJ5IGNvbnZlbnRpb24gYW4gZXhpdCBjb2RlIG9mIHplcm8gZGVub3RlcyBhIHN1Y2Nlc3NmdWwgZXhpdCBieQorICogICAgICAgdGhlIGd1ZXN0IGNvZGUuICBBIG5vbi16ZXJvIGV4aXQgY29kZSBkZW5vdGVzIGEgZ3Vlc3Qgc3BlY2lmaWMKKyAqICAgICAgIGVycm9yIGluZGljYXRpb24uCisgKgorICovCisjZGVmaW5lIEhWX0ZBU1RfTUFDSF9FWElUCQkweDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBzdW40dl9tYWNoX2V4aXQodW5zaWduZWQgbG9uZyBleGl0X2NvZGUpOworI2VuZGlmCisKKy8qIERvbWFpbiBzZXJ2aWNlcy4gICovCisKKy8qIG1hY2hfZGVzYygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfREVTQworICogQVJHMDoJYnVmZmVyCisgKiBBUkcxOglsZW5ndGgKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJbGVuZ3RoCisgKiBFUlJPUlM6CUhWX0VCQURBTElHTglCdWZmZXIgaXMgYmFkbHkgYWxpZ25lZAorICoJCUhWX0VOT1JBRERSCUJ1ZmZlciBpcyB0byBhbiBpbGxlZ2FsIHJlYWwgYWRkcmVzcy4KKyAqCQlIVl9FSU5WQUwJQnVmZmVyIGxlbmd0aCBpcyB0b28gc21hbGwgZm9yIGNvbXBsZXRlCisgKgkJCQltYWNoaW5lIGRlc2NyaXB0aW9uLgorICoKKyAqIENvcHkgdGhlIG1vc3QgY3VycmVudCBtYWNoaW5lIGRlc2NyaXB0aW9uIGludG8gdGhlIGJ1ZmZlciBpbmRpY2F0ZWQKKyAqIGJ5IHRoZSByZWFsIGFkZHJlc3MgaW4gQVJHMC4gIFRoZSBidWZmZXIgcHJvdmlkZWQgbXVzdCBiZSAxNiBieXRlCisgKiBhbGlnbmVkLiAgVXBvbiBzdWNjZXNzIG9yIEhWX0VJTlZBTCwgdGhpcyBzZXJ2aWNlIHJldHVybnMgdGhlCisgKiBhY3R1YWwgc2l6ZSBvZiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBpbiB0aGUgUkVUMSByZXR1cm4gdmFsdWUuCisgKgorICogTm90ZTogQSBtZXRob2Qgb2YgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGJ1ZmZlciBzaXplIGZvciB0aGUKKyAqICAgICAgIG1hY2hpbmUgZGVzY3JpcHRpb24gaXMgdG8gZmlyc3QgY2FsbCB0aGlzIHNlcnZpY2Ugd2l0aCBhIGJ1ZmZlcgorICogICAgICAgbGVuZ3RoIG9mIDAgYnl0ZXMuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NQUNIX0RFU0MJCTB4MDEKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21hY2hfZGVzYyh1bnNpZ25lZCBsb25nIGJ1ZmZlcl9wYSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYnVmX2xlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKnJlYWxfYnVmX2xlbik7CisjZW5kaWYKKworLyogbWFjaF9zaXIoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NQUNIX1NJUgorICogRVJST1JTOglUaGlzIHNlcnZpY2UgZG9lcyBub3QgcmV0dXJuLgorICoKKyAqIFBlcmZvcm0gYSBzb2Z0d2FyZSBpbml0aWF0ZWQgcmVzZXQgb2YgdGhlIHZpcnR1YWwgbWFjaGluZSBkb21haW4uCisgKiBBbGwgQ1BVcyBhcmUgY2FwdHVyZWQgYXMgc29vbiBhcyBwb3NzaWJsZSwgYWxsIGhhcmR3YXJlIGRldmljZXMgYXJlCisgKiByZXR1cm5lZCB0byB0aGUgZW50cnkgZGVmYXVsdCBzdGF0ZSwgYW5kIHRoZSBkb21haW4gaXMgcmVzdGFydGVkIGF0CisgKiB0aGUgU0lSICh0cmFwIHR5cGUgMHgwNCkgcmVhbCB0cmFwIHRhYmxlIChSVEJBKSBlbnRyeSBwb2ludCBvbiBvbmUKKyAqIG9mIHRoZSBDUFVzLiAgVGhlIHNpbmdsZSBDUFUgcmVzdGFydGVkIGlzIHNlbGVjdGVkIGFzIGRldGVybWluZWQgYnkKKyAqIHBsYXRmb3JtIHNwZWNpZmljIHBvbGljeS4gIE1lbW9yeSBpcyBwcmVzZXJ2ZWQgYWNyb3NzIHRoaXMKKyAqIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBIVl9GQVNUX01BQ0hfU0lSCQkweDAyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBzdW40dl9tYWNoX3Npcih2b2lkKTsKKyNlbmRpZgorCisvKiBtYWNoX3NldF93YXRjaGRvZygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfU0VUX1dBVENIRE9HCisgKiBBUkcwOgl0aW1lb3V0IGluIG1pbGxpc2Vjb25kcworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgl0aW1lIHJlbWFpbmluZyBpbiBtaWxsaXNlY29uZHMKKyAqCisgKiBBIGd1ZXN0IHVzZXMgdGhpcyBBUEkgdG8gc2V0IGEgd2F0Y2hkb2cgdGltZXIuICBPbmNlIHRoZSBndWVzIGhhcyBzZXQKKyAqIHRoZSB0aW1lciwgaXQgbXVzdCBjYWxsIHRoZSB0aW1lciBzZXJ2aWNlIGFnYWluIGVpdGhlciB0byBkaXNhYmxlIG9yCisgKiBwb3N0cG9uZSB0aGUgZXhwaXJhdGlvbi4gIElmIHRoZSB0aW1lciBleHBpcmVzIGJlZm9yZSBiZWluZyByZXNldCBvcgorICogZGlzYWJsZWQsIHRoZW4gdGhlIGh5cGVydmlzb3IgdGFrZSBhIHBsYXRmb3JtIHNwZWNpZmljIGFjdGlvbiBsZWFkaW5nCisgKiB0byBndWVzdCB0ZXJtaW5hdGlvbiB3aXRoaW4gYSBib3VuZGVkIHRpbWUgcGVyaW9kLiAgVGhlIHBsYXRmb3JtIGFjdGlvbgorICogbWF5IGluY2x1ZGUgcmVjb3ZlcnkgYWN0aW9ucyBzdWNoIGFzIHJlcG9ydGluZyB0aGUgZXhwaXJhdGlvbiB0byBhCisgKiBTZXJ2aWNlIFByb2Nlc3NvciwgYW5kL29yIGF1dG9tYXRpY2FsbHkgcmVzdGFydGluZyB0aGUgZ3Vlcy4KKyAqCisgKiBUaGUgJ3RpbWVvdXQnIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgaW4gbWlsbGlzZWNvbmRzLCBob3dldmVyIHRoZQorICogaW1wbGVtZW50YXRlZCBncmFudWxhcml0eSBpcyBnaXZlbiBieSB0aGUgJ3dhdGNoZG9nLXJlc29sdXRpb24nCisgKiBwcm9wZXJ0eSBpbiB0aGUgJ3BsYXRmb3JtJyBub2RlIG9mIHRoZSBndWVzdCdzIG1hY2hpbmUgZGVzY3JpcHRpb24uCisgKiBUaGUgbGFyZ2VzdCBhbGxvd2VkIHRpbWVvdXQgdmFsdWUgaXMgc3BlY2lmaWVkIGJ5IHRoZQorICogJ3dhdGNoZG9nLW1heC10aW1lb3V0JyBwcm9wZXJ0eSBvZiB0aGUgJ3BsYXRmb3JtJyBub2RlLgorICoKKyAqIElmIHRoZSAndGltZW91dCcgYXJndW1lbnQgaXMgbm90IHplcm8sIHRoZSB3YXRjaGRvZyB0aW1lciBpcyBzZXQgdG8KKyAqIGV4cGlyZSBhZnRlciBhIG1pbmltdW0gb2YgJ3RpbWVvdXQnIG1pbGxpc2Vjb25kcy4KKyAqCisgKiBJZiB0aGUgJ3RpbWVvdXQnIGFyZ3VtZW50IGlzIHplcm8sIHRoZSB3YXRjaGRvZyB0aW1lciBpcyBkaXNhYmxlZC4KKyAqCisgKiBJZiB0aGUgJ3RpbWVvdXQnIHZhbHVlIGV4Y2VlZHMgdGhlIHZhbHVlIG9mIHRoZSAnbWF4LXdhdGNoZG9nLXRpbWVvdXQnCisgKiBwcm9wZXJ0eSwgdGhlIGh5cGVydmlzb3IgbGVhdmVzIHRoZSB3YXRjaGRvZyB0aW1lciBzdGF0ZSB1bmNoYW5nZWQsCisgKiBhbmQgcmV0dXJucyBhIHN0YXR1cyBvZiBFSU5WQUwuCisgKgorICogVGhlICd0aW1lIHJlbWFpbmluZycgcmV0dXJuIHZhbHVlIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUKKyAqIHJldHVybiBzdGF0dXMgaXMgRU9LIG9yIEVJTlZBTC4gIEEgbm9uLXplcm8gcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGUKKyAqIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCB3ZXJlIHJlbWFpbmluZyB1bnRpbCB0aGUgdGltZXIgd2FzIHRvIGV4cGlyZS4KKyAqIElmIGxlc3MgdGhhbiBvbmUgbWlsbGlzZWNvbmQgcmVtYWlucywgdGhlIHJldHVybiB2YWx1ZSBpcyAnMScuICBJZiB0aGUKKyAqIHdhdGNoZG9nIHRpbWVyIHdhcyBkaXNhYmxlZCBhdCB0aGUgdGltZSBvZiB0aGUgY2FsbCwgdGhlIHJldHVybiB2YWx1ZSBpcworICogemVyby4KKyAqCisgKiBJZiB0aGUgaHlwZXJ2aXNvciBjYW5ub3Qgc3VwcG9ydCB0aGUgZXhhY3QgdGltZW91dCB2YWx1ZSByZXF1ZXN0ZWQsIGJ1dAorICogY2FuIHN1cHBvcnQgYSBsYXJnZXIgdGltZW91dCB2YWx1ZSwgdGhlIGh5cGVydmlzb3IgbWF5IHJvdW5kIHRoZSBhY3R1YWwKKyAqIHRpbWVvdXQgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHRpbWVvdXQsIGNvbnNlcXVlbnRseSB0aGUKKyAqICd0aW1lIHJlbWFpbmluZycgcmV0dXJuIHZhbHVlIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgcHJldmlvdXNseSByZXF1ZXN0ZWQKKyAqIHRpbWVvdXQgdmFsdWUuCisgKgorICogQW55IGd1ZXN0IE9TIGRlYnVnZ2VyIHNob3VsZCBiZSBhd2FyZSB0aGF0IHRoZSB3YXRjaGRvZyBzZXJ2aWNlIG1heSBiZSBpbgorICogdXNlLiAgQ29uc2VxdWVudGx5LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSB3YXRjaGRvZyBzZXJ2aWNlIGlzCisgKiBkaXNhYmxlZCB1cG9uIGRlYnVnZ2VyIGVudHJ5IChlLmcuIHJlYWNoaW5nIGEgYnJlYWtwb2ludCksIGFuZCB0aGVuCisgKiByZS1lbmFibGVkIHVwb24gcmV0dXJuaW5nIHRvIG5vcm1hbCBleGVjdXRpb24uICBUaGUgQVBJIGhhcyBiZWVuIGRlc2lnbmVkCisgKiB3aXRoIHRoaXMgaW4gbWluZCwgYW5kIHRoZSAndGltZSByZW1haW5pbmcnIHJlc3VsdCBvZiB0aGUgZGlzYWJsZSBjYWxsIG1heQorICogYmUgdXNlZCBkaXJlY3RseSBhcyB0aGUgdGltZW91dCBhcmd1bWVudCBvZiB0aGUgcmUtZW5hYmxlIGNhbGwuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NQUNIX1NFVF9XQVRDSERPRwkweDA1CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9tYWNoX3NldF93YXRjaGRvZyh1bnNpZ25lZCBsb25nIHRpbWVvdXQsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqb3JpZ190aW1lb3V0KTsKKyNlbmRpZgorCisvKiBDUFUgc2VydmljZXMuCisgKgorICogQ1BVcyByZXByZXNlbnQgZGV2aWNlcyB0aGF0IGNhbiBleGVjdXRlIHNvZnR3YXJlIHRocmVhZHMuICBBIHNpbmdsZQorICogY2hpcCB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIGNvcmVzIG9yIHN0cmFuZHMgaXMgcmVwcmVzZW50ZWQgYXMKKyAqIG11bHRpcGxlIENQVXMgd2l0aCB1bmlxdWUgQ1BVIGlkZW50aWZpZXJzLiAgQ1BVcyBhcmUgZXhwb3J0ZWQgdG8KKyAqIE9CUCB2aWEgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gKGFuZCB0byB0aGUgT1MgdmlhIHRoZSBPQlAgZGV2aWNlCisgKiB0cmVlKS4gIENQVXMgYXJlIGFsd2F5cyBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBzdG9wcGVkLCBydW5uaW5nLAorICogb3IgZXJyb3IuCisgKgorICogQSBDUFUgSUQgaXMgYSBwcmUtYXNzaWduZWQgMTYtYml0IHZhbHVlIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyBhCisgKiBDUFUgd2l0aGluIGEgbG9naWNhbCBkb21haW4uICBPcGVyYXRpb25zIHRoYXQgYXJlIHRvIGJlIHBlcmZvcm1lZAorICogb24gbXVsdGlwbGUgQ1BVcyBzcGVjaWZ5IHRoZW0gdmlhIGEgQ1BVIGxpc3QuICBBIENQVSBsaXN0IGlzIGFuCisgKiBhcnJheSBpbiByZWFsIG1lbW9yeSwgb2Ygd2hpY2ggZWFjaCAxNi1iaXQgd29yZCBpcyBhIENQVSBJRC4gIENQVQorICogbGlzdHMgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZSBBUEkgYXMgdHdvIGFyZ3VtZW50cy4gIFRoZSBmaXJzdCBpcworICogdGhlIG51bWJlciBvZiBlbnRyaWVzICgxNi1iaXQgd29yZHMpIGluIHRoZSBDUFUgbGlzdCwgYW5kIHRoZQorICogc2Vjb25kIGlzIHRoZSAocmVhbCBhZGRyZXNzKSBwb2ludGVyIHRvIHRoZSBDUFUgSUQgbGlzdC4KKyAqLworCisvKiBjcHVfc3RhcnQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9DUFVfU1RBUlQKKyAqIEFSRzA6CUNQVSBJRAorICogQVJHMToJUEMKKyAqIEFSRzI6CVJUQkEKKyAqIEFSRzM6CXRhcmdldCBBUkcwCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRU5PQ1BVCQlJbnZhbGlkIENQVSBJRAorICoJCUVJTlZBTAkJVGFyZ2V0IENQVSBJRCBpcyBub3QgaW4gdGhlIHN0b3BwZWQgc3RhdGUKKyAqCQlFTk9SQUREUglJbnZhbGlkIFBDIG9yIFJUQkEgcmVhbCBhZGRyZXNzCisgKgkJRUJBREFMSUdOCVVuYWxpZ25lZCBQQyBvciB1bmFsaWduZWQgUlRCQQorICoJCUVXT1VMREJMT0NLCVN0YXJ0aW5nIHJlc291cmNlcyBhcmUgbm90IGF2YWlsYWJsZQorICoKKyAqIFN0YXJ0IENQVSB3aXRoIGdpdmVuIENQVSBJRCB3aXRoIFBDIGluICVwYyBhbmQgd2l0aCBhIHJlYWwgdHJhcAorICogYmFzZSBhZGRyZXNzIHZhbHVlIG9mIFJUQkEuICBUaGUgaW5kaWNhdGVkIENQVSBtdXN0IGJlIGluIHRoZQorICogc3RvcHBlZCBzdGF0ZS4gIFRoZSBzdXBwbGllZCBSVEJBIG11c3QgYmUgYWxpZ25lZCBvbiBhIDI1NiBieXRlCisgKiBib3VuZGFyeS4gIE9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdGhlIHNwZWNpZmllZCBDUFUgd2lsbCBiZSBpbgorICogdGhlIHJ1bm5pbmcgc3RhdGUgYW5kIHdpbGwgYmUgc3VwcGxpZWQgd2l0aCAidGFyZ2V0IEFSRzAiIGluICVvMAorICogYW5kIFJUQkEgaW4gJXRiYS4KKyAqLworI2RlZmluZSBIVl9GQVNUX0NQVV9TVEFSVAkJMHgxMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfY3B1X3N0YXJ0KHVuc2lnbmVkIGxvbmcgY3B1aWQsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHBjLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBydGJhLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcwKTsKKyNlbmRpZgorCisvKiBjcHVfc3RvcCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9TVE9QCisgKiBBUkcwOglDUFUgSUQKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFTk9DUFUJCUludmFsaWQgQ1BVIElECisgKgkJRUlOVkFMCQlUYXJnZXQgQ1BVIElEIGlzIHRoZSBjdXJyZW50IGNwdQorICoJCUVJTlZBTAkJVGFyZ2V0IENQVSBJRCBpcyBub3QgaW4gdGhlIHJ1bm5pbmcgc3RhdGUKKyAqCQlFV09VTERCTE9DSwlTdG9wcGluZyByZXNvdXJjZXMgYXJlIG5vdCBhdmFpbGFibGUKKyAqCQlFTk9UU1VQUE9SVEVECU5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybQorICoKKyAqIFRoZSBzcGVjaWZpZWQgQ1BVIGlzIHN0b3BwZWQuICBUaGUgaW5kaWNhdGVkIENQVSBtdXN0IGJlIGluIHRoZQorICogcnVubmluZyBzdGF0ZS4gIE9uIGNvbXBsZXRpb24sIGl0IHdpbGwgYmUgaW4gdGhlIHN0b3BwZWQgc3RhdGUuICBJdAorICogaXMgbm90IGxlZ2FsIHRvIHN0b3AgdGhlIGN1cnJlbnQgQ1BVLgorICoKKyAqIE5vdGU6IEFzIHRoaXMgc2VydmljZSBjYW5ub3QgYmUgdXNlZCB0byBzdG9wIHRoZSBjdXJyZW50IGNwdSwgdGhpcyBzZXJ2aWNlCisgKiAgICAgICBtYXkgbm90IGJlIHVzZWQgdG8gc3RvcCB0aGUgbGFzdCBydW5uaW5nIENQVSBpbiBhIGRvbWFpbi4gIFRvIHN0b3AKKyAqICAgICAgIGFuZCBleGl0IGEgcnVubmluZyBkb21haW4sIGEgZ3Vlc3QgbXVzdCB1c2UgdGhlIG1hY2hfZXhpdCgpIHNlcnZpY2UuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DUFVfU1RPUAkJMHgxMQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfY3B1X3N0b3AodW5zaWduZWQgbG9uZyBjcHVpZCk7CisjZW5kaWYKKworLyogY3B1X3lpZWxkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX1lJRUxECisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJTm8gcG9zc2libGUgZXJyb3IuCisgKgorICogU3VzcGVuZCBleGVjdXRpb24gb24gdGhlIGN1cnJlbnQgQ1BVLiAgRXhlY3V0aW9uIHdpbGwgcmVzdW1lIHdoZW4KKyAqIGFuIGludGVycnVwdCAoZGV2aWNlLCAlc3RpY2tfY29tcGFyZSwgb3IgY3Jvc3MtY2FsbCkgaXMgdGFyZ2V0ZWQgdG8KKyAqIHRoZSBDUFUuICBPbiBzb21lIENQVXMsIHRoaXMgQVBJIG1heSBiZSB1c2VkIGJ5IHRoZSBoeXBlcnZpc29yIHRvCisgKiBzYXZlIHBvd2VyIGJ5IGRpc2FibGluZyBoYXJkd2FyZSBzdHJhbmRzLgorICovCisjZGVmaW5lIEhWX0ZBU1RfQ1BVX1lJRUxECQkweDEyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9jcHVfeWllbGQodm9pZCk7CisjZW5kaWYKKworLyogY3B1X3Fjb25mKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX1FDT05GCisgKiBBUkcwOglxdWV1ZQorICogQVJHMToJYmFzZSByZWFsIGFkZHJlc3MKKyAqIEFSRzI6CW51bWJlciBvZiBlbnRyaWVzCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRU5PUkFERFIJSW52YWxpZCBiYXNlIHJlYWwgYWRkcmVzcworICoJCUVJTlZBTAkJSW52YWxpZCBxdWV1ZSBvciBudW1iZXIgb2YgZW50cmllcyBpcyBsZXNzCisgKgkJCQl0aGFuIDIgb3IgdG9vIGxhcmdlLgorICoJCUVCQURBTElHTglCYXNlIHJlYWwgYWRkcmVzcyBpcyBub3QgY29ycmVjdGx5IGFsaWduZWQKKyAqCQkJCWZvciBzaXplLgorICoKKyAqIENvbmZpZ3VyZSB0aGUgZ2l2ZW4gcXVldWUgdG8gYmUgcGxhY2VkIGF0IHRoZSBnaXZlbiBiYXNlIHJlYWwKKyAqIGFkZHJlc3MsIHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBlbnRyaWVzLiAgVGhlIG51bWJlciBvZiBlbnRyaWVzCisgKiBtdXN0IGJlIGEgcG93ZXIgb2YgMi4gIFRoZSBiYXNlIHJlYWwgYWRkcmVzcyBtdXN0IGJlIGFsaWduZWQKKyAqIGV4YWN0bHkgdG8gbWF0Y2ggdGhlIHF1ZXVlIHNpemUuICBFYWNoIHF1ZXVlIGVudHJ5IGlzIDY0IGJ5dGVzCisgKiBsb25nLCBzbyBmb3IgZXhhbXBsZSBhIDMyIGVudHJ5IHF1ZXVlIG11c3QgYmUgYWxpZ25lZCBvbiBhIDIwNDgKKyAqIGJ5dGUgcmVhbCBhZGRyZXNzIGJvdW5kYXJ5LgorICoKKyAqIFRoZSBzcGVjaWZpZWQgcXVldWUgaXMgdW5jb25maWd1cmVkIGlmIHRoZSBudW1iZXIgb2YgZW50cmllcyBpcyBnaXZlbgorICogYXMgemVyby4KKyAqCisgKiBGb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzIEFQSSBzZXJ2aWNlLCB0aGUgYXJndW1lbnQgcXVldWUgaXMgZGVmaW5lZAorICogYXMgZm9sbG93czoKKyAqCisgKglxdWV1ZQkJZGVzY3JpcHRpb24KKyAqCS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkweDNjCQljcHUgbW9uZG8gcXVldWUKKyAqCTB4M2QJCWRldmljZSBtb25kbyBxdWV1ZQorICoJMHgzZQkJcmVzdW1hYmxlIGVycm9yIHF1ZXVlCisgKgkweDNmCQlub24tcmVzdW1hYmxlIGVycm9yIHF1ZXVlCisgKgorICogTm90ZTogVGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgZm9yIGVhY2ggcXVldWUgZm9yIGEgc3BlY2lmaWMgY3B1IG1heQorICogICAgICAgYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uLgorICovCisjZGVmaW5lIEhWX0ZBU1RfQ1BVX1FDT05GCQkweDE0CisjZGVmaW5lICBIVl9DUFVfUVVFVUVfQ1BVX01PTkRPCQkgMHgzYworI2RlZmluZSAgSFZfQ1BVX1FVRVVFX0RFVklDRV9NT05ETwkgMHgzZAorI2RlZmluZSAgSFZfQ1BVX1FVRVVFX1JFU19FUlJPUgkJIDB4M2UKKyNkZWZpbmUgIEhWX0NQVV9RVUVVRV9OT05SRVNfRVJST1IJIDB4M2YKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2NwdV9xY29uZih1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHF1ZXVlX3BhZGRyLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBudW1fcXVldWVfZW50cmllcyk7CisjZW5kaWYKKworLyogY3B1X3FpbmZvKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX1FJTkZPCisgKiBBUkcwOglxdWV1ZQorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgliYXNlIHJlYWwgYWRkcmVzcworICogUkVUMToJbnVtYmVyIG9mIGVudHJpZXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHF1ZXVlCisgKgorICogUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIGluZm8gZm9yIHRoZSBnaXZlbiBxdWV1ZS4gIFRoZSBiYXNlIHJlYWwKKyAqIGFkZHJlc3MgYW5kIG51bWJlciBvZiBlbnRyaWVzIG9mIHRoZSBkZWZpbmVkIHF1ZXVlIGFyZSByZXR1cm5lZC4KKyAqIFRoZSBxdWV1ZSBhcmd1bWVudCB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBjcHVfcWNvbmYoKSBhYm92ZS4KKyAqCisgKiBJZiB0aGUgc3BlY2lmaWVkIHF1ZXVlIGlzIGEgdmFsaWQgcXVldWUgbnVtYmVyLCBidXQgbm8gcXVldWUgaGFzCisgKiBiZWVuIGRlZmluZWQsIHRoZSBudW1iZXIgb2YgZW50cmllcyB3aWxsIGJlIHNldCB0byB6ZXJvIGFuZCB0aGUKKyAqIGJhc2UgcmVhbCBhZGRyZXNzIHJldHVybmVkIGlzIHVuZGVmaW5lZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX0NQVV9RSU5GTwkJMHgxNQorCisvKiBjcHVfbW9uZG9fc2VuZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9NT05ET19TRU5ECisgKiBBUkcwLTE6CUNQVSBsaXN0CisgKiBBUkcyOglkYXRhIHJlYWwgYWRkcmVzcworICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVCQURBTElHTglNb25kbyBkYXRhIGlzIG5vdCA2NC1ieXRlIGFsaWduZWQgb3IgQ1BVIGxpc3QKKyAqCQkJCWlzIG5vdCAyLWJ5dGUgYWxpZ25lZC4KKyAqCQlFTk9SQUREUglJbnZhbGlkIGRhdGEgbW9uZG8gYWRkcmVzcywgb3IgaW52YWxpZCBjcHUgbGlzdAorICoJCQkJYWRkcmVzcy4KKyAqCQlFTk9DUFUJCUludmFsaWQgY3B1IGluIENQVSBsaXN0CisgKgkJRVdPVUxEQkxPQ0sJU29tZSBvciBhbGwgb2YgdGhlIGxpc3RlZCBDUFVzIGRpZCBub3QgcmVjZWl2ZQorICoJCQkJdGhlIG1vbmRvCisgKgkJRUNQVUVSUk9SCU9uZSBvciBtb3JlIG9mIHRoZSBsaXN0ZWQgQ1BVcyBhcmUgaW4gZXJyb3IKKyAqCQkJCXN0YXRlLCB1c2UgSFZfRkFTVF9DUFVfU1RBVEUgdG8gc2VlIHdoaWNoIG9uZXMKKyAqCQlFSU5WQUwJCUNQVSBsaXN0IGluY2x1ZGVzIGNhbGxlcidzIENQVSBJRAorICoKKyAqIFNlbmQgYSBtb25kbyBpbnRlcnJ1cHQgdG8gdGhlIENQVXMgaW4gdGhlIGdpdmVuIENQVSBsaXN0IHdpdGggdGhlCisgKiA2NC1ieXRlcyBhdCB0aGUgZ2l2ZW4gZGF0YSByZWFsIGFkZHJlc3MuICBUaGUgZGF0YSBtdXN0IGJlIDY0LWJ5dGUKKyAqIGFsaWduZWQuICBUaGUgbW9uZG8gZGF0YSB3aWxsIGJlIGRlbGl2ZXJlZCB0byB0aGUgY3B1X21vbmRvIHF1ZXVlcworICogb2YgdGhlIHJlY2lwaWVudCBDUFVzLgorICoKKyAqIEluIGFsbCBjYXNlcywgZXJyb3Igb3Igbm90LCB0aGUgQ1BVcyBpbiB0aGUgQ1BVIGxpc3QgdG8gd2hpY2ggdGhlCisgKiBtb25kbyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkIHdpbGwgYmUgaW5kaWNhdGVkIGJ5IGhhdmluZworICogdGhlaXIgZW50cnkgaW4gQ1BVIGxpc3QgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZSAweGZmZmYuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DUFVfTU9ORE9fU0VORAkJMHg0MgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfY3B1X21vbmRvX3NlbmQodW5zaWduZWQgbG9uZyBjcHVfY291bnQsIHVuc2lnbmVkIGxvbmcgY3B1X2xpc3RfcGEsIHVuc2lnbmVkIGxvbmcgbW9uZG9fYmxvY2tfcGEpOworI2VuZGlmCisKKy8qIGNwdV9teWlkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX01ZSUQKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJQ1BVIElECisgKiBFUlJPUlM6CU5vIGVycm9ycyBkZWZpbmVkLgorICoKKyAqIFJldHVybiB0aGUgaHlwZXJ2aXNvciBJRCBoYW5kbGUgZm9yIHRoZSBjdXJyZW50IENQVS4gIFVzZSBieSBhCisgKiB2aXJ0dWFsIENQVSB0byBkaXNjb3ZlciBpdCdzIG93biBpZGVudGl0eS4KKyAqLworI2RlZmluZSBIVl9GQVNUX0NQVV9NWUlECQkweDE2CisKKy8qIGNwdV9zdGF0ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9TVEFURQorICogQVJHMDoJQ1BVIElECisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXN0YXRlCisgKiBFUlJPUlM6CUVOT0NQVQkJSW52YWxpZCBDUFUgSUQKKyAqCisgKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgQ1BVIHdpdGggdGhlIGdpdmVuIENQVSBJRC4KKyAqLworI2RlZmluZSBIVl9GQVNUX0NQVV9TVEFURQkJMHgxNworI2RlZmluZSAgSFZfQ1BVX1NUQVRFX1NUT1BQRUQJCSAweDAxCisjZGVmaW5lICBIVl9DUFVfU1RBVEVfUlVOTklORwkJIDB4MDIKKyNkZWZpbmUgIEhWX0NQVV9TVEFURV9FUlJPUgkJIDB4MDMKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiBsb25nIHN1bjR2X2NwdV9zdGF0ZSh1bnNpZ25lZCBsb25nIGNwdWlkKTsKKyNlbmRpZgorCisvKiBjcHVfc2V0X3J0YmEoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9DUFVfU0VUX1JUQkEKKyAqIEFSRzA6CVJUQkEKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJcHJldmlvdXMgUlRCQQorICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIFJUQkEgcmVhbCBhZGRyZXNzCisgKgkJRUJBREFMSUdOCVJUQkEgaXMgaW5jb3JyZWN0bHkgYWxpZ25lZCBmb3IgYSB0cmFwIHRhYmxlCisgKgorICogU2V0IHRoZSByZWFsIHRyYXAgYmFzZSBhZGRyZXNzIG9mIHRoZSBsb2NhbCBjcHUgdG8gdGhlIGdpdmVuIFJUQkEuCisgKiBUaGUgc3VwcGxpZWQgUlRCQSBtdXN0IGJlIGFsaWduZWQgb24gYSAyNTYgYnl0ZSBib3VuZGFyeS4gIFVwb24KKyAqIHN1Y2Nlc3MgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBSVEJBIGlzIHJldHVybmVkIGluIFJFVDEuCisgKgorICogTm90ZTogVGhpcyBzZXJ2aWNlIGRvZXMgbm90IGFmZmVjdCAldGJhCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DUFVfU0VUX1JUQkEJCTB4MTgKKworLyogY3B1X3NldF9ydGJhKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX0dFVF9SVEJBCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXByZXZpb3VzIFJUQkEKKyAqIEVSUk9SUzoJTm8gcG9zc2libGUgZXJyb3IuCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiBSVEJBIGluIFJFVDEuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DUFVfR0VUX1JUQkEJCTB4MTkKKworLyogTU1VIHNlcnZpY2VzLgorICoKKyAqIExheW91dCBvZiBhIFRTQiBkZXNjcmlwdGlvbiBmb3IgbW11X3RzYl9jdHh7LG5vbn0wKCkgY2FsbHMuCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgaHZfdHNiX2Rlc2NyIHsKKwl1bnNpZ25lZCBzaG9ydAkJcGdzel9pZHg7CisJdW5zaWduZWQgc2hvcnQJCWFzc29jOworCXVuc2lnbmVkIGludAkJbnVtX3R0ZXM7CS8qIGluIFRURXMgKi8KKwl1bnNpZ25lZCBpbnQJCWN0eF9pZHg7CisJdW5zaWduZWQgaW50CQlwZ3N6X21hc2s7CisJdW5zaWduZWQgbG9uZwkJdHNiX2Jhc2U7CisJdW5zaWduZWQgbG9uZwkJcmVzdjsKK307CisjZW5kaWYKKyNkZWZpbmUgSFZfVFNCX0RFU0NSX1BHU1pfSURYX09GRlNFVAkweDAwCisjZGVmaW5lIEhWX1RTQl9ERVNDUl9BU1NPQ19PRkZTRVQJMHgwMgorI2RlZmluZSBIVl9UU0JfREVTQ1JfTlVNX1RURVNfT0ZGU0VUCTB4MDQKKyNkZWZpbmUgSFZfVFNCX0RFU0NSX0NUWF9JRFhfT0ZGU0VUCTB4MDgKKyNkZWZpbmUgSFZfVFNCX0RFU0NSX1BHU1pfTUFTS19PRkZTRVQJMHgwYworI2RlZmluZSBIVl9UU0JfREVTQ1JfVFNCX0JBU0VfT0ZGU0VUCTB4MTAKKyNkZWZpbmUgSFZfVFNCX0RFU0NSX1JFU1ZfT0ZGU0VUCTB4MTgKKworLyogUGFnZSBzaXplIGJpdG1hc2suICAqLworI2RlZmluZSBIVl9QR1NaX01BU0tfOEsJCQkoMSA8PCAwKQorI2RlZmluZSBIVl9QR1NaX01BU0tfNjRLCQkoMSA8PCAxKQorI2RlZmluZSBIVl9QR1NaX01BU0tfNTEySwkJKDEgPDwgMikKKyNkZWZpbmUgSFZfUEdTWl9NQVNLXzRNQgkJKDEgPDwgMykKKyNkZWZpbmUgSFZfUEdTWl9NQVNLXzMyTUIJCSgxIDw8IDQpCisjZGVmaW5lIEhWX1BHU1pfTUFTS18yNTZNQgkJKDEgPDwgNSkKKyNkZWZpbmUgSFZfUEdTWl9NQVNLXzJHQgkJKDEgPDwgNikKKyNkZWZpbmUgSFZfUEdTWl9NQVNLXzE2R0IJCSgxIDw8IDcpCisKKy8qIFBhZ2Ugc2l6ZSBpbmRleC4gIFRoZSB2YWx1ZSBnaXZlbiBpbiB0aGUgVFNCIGRlc2NyaXB0b3IgbXVzdCBjb3JyZXNwb25kCisgKiB0byB0aGUgc21hbGxlc3QgcGFnZSBzaXplIHNwZWNpZmllZCBpbiB0aGUgcGdzel9tYXNrIHBhZ2Ugc2l6ZSBiaXRtYXNrLgorICovCisjZGVmaW5lIEhWX1BHU1pfSURYXzhLCQkJMAorI2RlZmluZSBIVl9QR1NaX0lEWF82NEsJCQkxCisjZGVmaW5lIEhWX1BHU1pfSURYXzUxMksJCTIKKyNkZWZpbmUgSFZfUEdTWl9JRFhfNE1CCQkJMworI2RlZmluZSBIVl9QR1NaX0lEWF8zMk1CCQk0CisjZGVmaW5lIEhWX1BHU1pfSURYXzI1Nk1CCQk1CisjZGVmaW5lIEhWX1BHU1pfSURYXzJHQgkJCTYKKyNkZWZpbmUgSFZfUEdTWl9JRFhfMTZHQgkJNworCisvKiBNTVUgZmF1bHQgc3RhdHVzIGFyZWEuCisgKgorICogTU1VIHJlbGF0ZWQgZmF1bHRzIGhhdmUgdGhlaXIgc3RhdHVzIGFuZCBmYXVsdCBhZGRyZXNzIGluZm9ybWF0aW9uCisgKiBwbGFjZWQgaW50byBhIG1lbW9yeSByZWdpb24gbWFkZSBhdmFpbGFibGUgYnkgcHJpdmlsZWdlZCBjb2RlLiAgRWFjaAorICogdmlydHVhbCBwcm9jZXNzb3IgbXVzdCBtYWtlIGEgbW11X2ZhdWx0X2FyZWFfY29uZigpIGNhbGwgdG8gdGVsbCB0aGUKKyAqIGh5cGVydmlzb3Igd2hlcmUgdGhhdCBwcm9jZXNzb3IncyBmYXVsdCBzdGF0dXMgc2hvdWxkIGJlIHN0b3JlZC4KKyAqCisgKiBUaGUgZmF1bHQgc3RhdHVzIGJsb2NrIGlzIGEgbXVsdGlwbGUgb2YgNjQtYnl0ZXMgYW5kIG11c3QgYmUgYWxpZ25lZAorICogb24gYSA2NC1ieXRlIGJvdW5kYXJ5LgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IGh2X2ZhdWx0X3N0YXR1cyB7CisJdW5zaWduZWQgbG9uZwkJaV9mYXVsdF90eXBlOworCXVuc2lnbmVkIGxvbmcJCWlfZmF1bHRfYWRkcjsKKwl1bnNpZ25lZCBsb25nCQlpX2ZhdWx0X2N0eDsKKwl1bnNpZ25lZCBsb25nCQlpX3Jlc2VydmVkWzVdOworCXVuc2lnbmVkIGxvbmcJCWRfZmF1bHRfdHlwZTsKKwl1bnNpZ25lZCBsb25nCQlkX2ZhdWx0X2FkZHI7CisJdW5zaWduZWQgbG9uZwkJZF9mYXVsdF9jdHg7CisJdW5zaWduZWQgbG9uZwkJZF9yZXNlcnZlZFs1XTsKK307CisjZW5kaWYKKyNkZWZpbmUgSFZfRkFVTFRfSV9UWVBFX09GRlNFVAkweDAwCisjZGVmaW5lIEhWX0ZBVUxUX0lfQUREUl9PRkZTRVQJMHgwOAorI2RlZmluZSBIVl9GQVVMVF9JX0NUWF9PRkZTRVQJMHgxMAorI2RlZmluZSBIVl9GQVVMVF9EX1RZUEVfT0ZGU0VUCTB4NDAKKyNkZWZpbmUgSFZfRkFVTFRfRF9BRERSX09GRlNFVAkweDQ4CisjZGVmaW5lIEhWX0ZBVUxUX0RfQ1RYX09GRlNFVAkweDUwCisKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9GQVNUX01JU1MJMQorI2RlZmluZSBIVl9GQVVMVF9UWVBFX0ZBU1RfUFJPVAkyCisjZGVmaW5lIEhWX0ZBVUxUX1RZUEVfTU1VX01JU1MJMworI2RlZmluZSBIVl9GQVVMVF9UWVBFX0lOVl9SQQk0CisjZGVmaW5lIEhWX0ZBVUxUX1RZUEVfUFJJVl9WSU9MCTUKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9QUk9UX1ZJT0wJNgorI2RlZmluZSBIVl9GQVVMVF9UWVBFX05GTwk3CisjZGVmaW5lIEhWX0ZBVUxUX1RZUEVfTkZPX1NFRkYJOAorI2RlZmluZSBIVl9GQVVMVF9UWVBFX0lOVl9WQQk5CisjZGVmaW5lIEhWX0ZBVUxUX1RZUEVfSU5WX0FTSQkxMAorI2RlZmluZSBIVl9GQVVMVF9UWVBFX05DX0FUT01JQwkxMQorI2RlZmluZSBIVl9GQVVMVF9UWVBFX1BSSVZfQUNUCTEyCisjZGVmaW5lIEhWX0ZBVUxUX1RZUEVfUkVTVjEJMTMKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9VTkFMSUdORUQJMTQKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9JTlZfUEdTWgkxNQorLyogVmFsdWVzIDE2IC0tPiAtMiBhcmUgcmVzZXJ2ZWQuICAqLworI2RlZmluZSBIVl9GQVVMVF9UWVBFX01VTFRJUExFCS0xCisKKy8qIEZsYWdzIGFyZ3VtZW50IGZvciBtbXVfe21hcCx1bm1hcH1fYWRkcigpLCBtbXVfZGVtYXBfe3BhZ2UsY29udGV4dCxhbGx9KCksCisgKiBhbmQgbW11X3ttYXAsdW5tYXB9X3Blcm1fYWRkcigpLgorICovCisjZGVmaW5lIEhWX01NVV9ETU1VCQkJMHgwMQorI2RlZmluZSBIVl9NTVVfSU1NVQkJCTB4MDIKKyNkZWZpbmUgSFZfTU1VX0FMTAkJCShIVl9NTVVfRE1NVSB8IEhWX01NVV9JTU1VKQorCisvKiBtbXVfbWFwX2FkZHIoKQorICogVFJBUDoJSFZfTU1VX01BUF9BRERSX1RSQVAKKyAqIEFSRzA6CXZpcnR1YWwgYWRkcmVzcworICogQVJHMToJbW11IGNvbnRleHQKKyAqIEFSRzI6CVRURQorICogQVJHMzoJZmxhZ3MgKEhWX01NVV97SU1NVSxETU1VfSkKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHZpcnR1YWwgYWRkcmVzcywgbW11IGNvbnRleHQsIG9yIGZsYWdzCisgKgkJRUJBRFBHU1oJSW52YWxpZCBwYWdlIHNpemUgdmFsdWUKKyAqCQlFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcyBpbiBUVEUKKyAqCisgKiBDcmVhdGUgYSBub24tcGVybWFuZW50IG1hcHBpbmcgdXNpbmcgdGhlIGdpdmVuIFRURSwgdmlydHVhbAorICogYWRkcmVzcywgYW5kIG1tdSBjb250ZXh0LiAgVGhlIGZsYWdzIGFyZ3VtZW50IGRldGVybWluZXMgd2hpY2gKKyAqIChkYXRhLCBvciBpbnN0cnVjdGlvbiwgb3IgYm90aCkgVExCIHRoZSBtYXBwaW5nIGdldHMgbG9hZGVkIGludG8uCisgKgorICogVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiB0aGUgdmFsaWQgYml0IGlzIGNsZWFyIGluIHRoZSBUVEUuCisgKgorICogTm90ZTogVGhpcyBBUEkgY2FsbCBpcyBmb3IgcHJpdmlsZWdlZCBjb2RlIHRvIHNwZWNpZnkgdGVtcG9yYXJ5IHRyYW5zbGF0aW9uCisgKiAgICAgICBtYXBwaW5ncyB3aXRob3V0IHRoZSBuZWVkIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGEgVFNCLgorICovCisKKy8qIG1tdV91bm1hcF9hZGRyKCkKKyAqIFRSQVA6CUhWX01NVV9VTk1BUF9BRERSX1RSQVAKKyAqIEFSRzA6CXZpcnR1YWwgYWRkcmVzcworICogQVJHMToJbW11IGNvbnRleHQKKyAqIEFSRzI6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCB2aXJ0dWFsIGFkZHJlc3MsIG1tdSBjb250ZXh0LCBvciBmbGFncworICoKKyAqIERlbWFwcyB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIGluIHRoZSBnaXZlbiBtbXUgY29udGV4dCBvbiB0aGlzCisgKiBDUFUuICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gZGVtYXAgcGFnZXMgbWFwcGVkCisgKiB3aXRoIG1tdV9tYXBfYWRkci4gIFRoaXMgc2VydmljZSBpcyBlcXVpdmFsZW50IHRvIGludm9raW5nCisgKiBtbXVfZGVtYXBfcGFnZSgpIHdpdGggb25seSB0aGUgY3VycmVudCBDUFUgaW4gdGhlIENQVSBsaXN0LiBUaGUKKyAqIGZsYWdzIGFyZ3VtZW50IGRldGVybWluZXMgd2hpY2ggKGRhdGEsIG9yIGluc3RydWN0aW9uLCBvciBib3RoKSBUTEIKKyAqIHRoZSBtYXBwaW5nIGdldHMgdW5tYXBwZWQgZnJvbS4KKyAqCisgKiBBdHRlbXB0aW5nIHRvIHBlcmZvcm0gYW4gdW5tYXAgb3BlcmF0aW9uIGZvciBhIHByZXZpb3VzbHkgZGVmaW5lZAorICogcGVybWFuZW50IG1hcHBpbmcgd2lsbCBoYXZlIHVuZGVmaW5lZCByZXN1bHRzLgorICovCisKKy8qIG1tdV90c2JfY3R4MCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9UU0JfQ1RYMAorICogQVJHMDoJbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbnMKKyAqIEFSRzE6CVRTQiBkZXNjcmlwdGlvbnMgcG9pbnRlcgorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVOT1JBRERSCQlJbnZhbGlkIFRTQiBkZXNjcmlwdGlvbnMgcG9pbnRlciBvcgorICoJCQkJCVRTQiBiYXNlIHdpdGhpbiBhIGRlc2NyaXB0b3IKKyAqCQlFQkFEQUxJR04JCVRTQiBkZXNjcmlwdGlvbnMgcG9pbnRlciBpcyBub3QgYWxpZ25lZAorICoJCQkJCXRvIGFuIDgtYnl0ZSBib3VuZGFyeSwgb3IgVFNCIGJhc2UKKyAqCQkJCQl3aXRoaW4gYSBkZXNjcmlwdG9yIGlzIG5vdCBhbGlnbmVkIGZvcgorICoJCQkJCXRoZSBnaXZlbiBUU0Igc2l6ZQorICoJCUVCQURQR1NaCQlJbnZhbGlkIHBhZ2Ugc2l6ZSBpbiBhIFRTQiBkZXNjcmlwdG9yCisgKgkJRUJBRFRTQgkJCUludmFsaWQgYXNzb2NpYXRpdml0eSBvciBzaXplIGluIGEgVFNCCisgKgkJCQkJZGVzY3JpcHRvcgorICoJCUVJTlZBTAkJCUludmFsaWQgbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbnMsIG9yCisgKgkJCQkJaW52YWxpZCBjb250ZXh0IGluZGV4IGluIGEgVFNCCisgKgkJCQkJZGVzY3JpcHRvciwgb3IgaW5kZXggcGFnZSBzaXplIG5vdAorICoJCQkJCWVxdWFsIHRvIHNtYWxsZXN0IHBhZ2Ugc2l6ZSBpbiBwYWdlCisgKgkJCQkJc2l6ZSBiaXRtYXNrIGZpZWxkLgorICoKKyAqIENvbmZpZ3VyZXMgdGhlIFRTQnMgZm9yIHRoZSBjdXJyZW50IENQVSBmb3IgdmlydHVhbCBhZGRyZXNzZXMgd2l0aAorICogY29udGV4dCB6ZXJvLiAgVGhlIFRTQiBkZXNjcmlwdGlvbnMgcG9pbnRlciBpcyBhIHBvaW50ZXIgdG8gYW4KKyAqIGFycmF5IG9mIHRoZSBnaXZlbiBudW1iZXIgb2YgVFNCIGRlc2NyaXB0aW9ucy4KKyAqCisgKiBOb3RlOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgVFNCcyBhdmFpbGFibGUgdG8gYSB2aXJ0dWFsIENQVSBpcyBnaXZlbiBieSB0aGUKKyAqICAgICAgIG1tdS1tYXgtI3RzYnMgcHJvcGVydHkgb2YgdGhlIGNwdSdzIGNvcnJlc3BvbmRpbmcgImNwdSIgbm9kZSBpbiB0aGUKKyAqICAgICAgIG1hY2hpbmUgZGVzY3JpcHRpb24uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NTVVfVFNCX0NUWDAJCTB4MjAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21tdV90c2JfY3R4MCh1bnNpZ25lZCBsb25nIG51bV9kZXNjcmlwdGlvbnMsCisJCQkJCXVuc2lnbmVkIGxvbmcgdHNiX2Rlc2NfcmEpOworI2VuZGlmCisKKy8qIG1tdV90c2JfY3R4bm9uMCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9UU0JfQ1RYTk9OMAorICogQVJHMDoJbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbnMKKyAqIEFSRzE6CVRTQiBkZXNjcmlwdGlvbnMgcG9pbnRlcgorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CVNhbWUgYXMgZm9yIG1tdV90c2JfY3R4MCgpIGFib3ZlLgorICoKKyAqIENvbmZpZ3VyZXMgdGhlIFRTQnMgZm9yIHRoZSBjdXJyZW50IENQVSBmb3IgdmlydHVhbCBhZGRyZXNzZXMgd2l0aAorICogbm9uLXplcm8gY29udGV4dHMuICBUaGUgVFNCIGRlc2NyaXB0aW9ucyBwb2ludGVyIGlzIGEgcG9pbnRlciB0byBhbgorICogYXJyYXkgb2YgdGhlIGdpdmVuIG51bWJlciBvZiBUU0IgZGVzY3JpcHRpb25zLgorICoKKyAqIE5vdGU6IEEgbWF4aW11bSBvZiAxNiBUU0JzIG1heSBiZSBzcGVjaWZpZWQgaW4gdGhlIFRTQiBkZXNjcmlwdGlvbiBsaXN0LgorICovCisjZGVmaW5lIEhWX0ZBU1RfTU1VX1RTQl9DVFhOT04wCQkweDIxCisKKy8qIG1tdV9kZW1hcF9wYWdlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX0RFTUFQX1BBR0UKKyAqIEFSRzA6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KKyAqIEFSRzE6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KKyAqIEFSRzI6CXZpcnR1YWwgYWRkcmVzcworICogQVJHMzoJbW11IGNvbnRleHQKKyAqIEFSRzQ6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ1dGFsIGFkZHJlc3MsIGNvbnRleHQsIG9yCisgKgkJCQkJZmxhZ3MgdmFsdWUKKyAqCQlFTk9UU1VQUE9SVEVECQlBUkcwIG9yIEFSRzEgaXMgbm9uLXplcm8KKyAqCisgKiBEZW1hcHMgYW55IHBhZ2UgbWFwcGluZyBvZiB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIGluIHRoZSBnaXZlbgorICogbW11IGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IHZpcnR1YWwgQ1BVLiAgQW55IHZpcnR1YWxseSB0YWdnZWQKKyAqIGNhY2hlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBrZXB0IGNvbnNpc3RlbnQuICBUaGUgZmxhZ3MgYXJndW1lbnQKKyAqIGRldGVybWluZXMgd2hpY2ggVExCIChpbnN0cnVjdGlvbiwgb3IgZGF0YSwgb3IgYm90aCkgcGFydGljaXBhdGUgaW4KKyAqIHRoZSBvcGVyYXRpb24uCisgKgorICogQVJHMCBhbmQgQVJHMSBhcmUgYm90aCByZXNlcnZlZCBhbmQgbXVzdCBiZSBzZXQgdG8gemVyby4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9ERU1BUF9QQUdFCQkweDIyCisKKy8qIG1tdV9kZW1hcF9jdHgoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfREVNQVBfQ1RYCisgKiBBUkcwOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcxOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcyOgltbXUgY29udGV4dAorICogQVJHMzoJZmxhZ3MgKEhWX01NVV97SU1NVSxETU1VfSkKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCQlJbnZhbGlkIGNvbnRleHQgb3IgZmxhZ3MgdmFsdWUKKyAqCQlFTk9UU1VQUE9SVEVECQlBUkcwIG9yIEFSRzEgaXMgbm9uLXplcm8KKyAqCisgKiBEZW1hcHMgYWxsIG5vbi1wZXJtYW5lbnQgdmlydHVhbCBwYWdlIG1hcHBpbmdzIHByZXZpb3VzbHkgc3BlY2lmaWVkCisgKiBmb3IgdGhlIGdpdmVuIGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IHZpcnR1YWwgQ1BVLiAgQW55IHZpcnR1YWwKKyAqIHRhZ2dlZCBjYWNoZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUga2VwdCBjb25zaXN0ZW50LiAgVGhlIGZsYWdzCisgKiBhcmd1bWVudCBkZXRlcm1pbmVzIHdoaWNoIFRMQiAoaW5zdHJ1Y3Rpb24sIG9yIGRhdGEsIG9yIGJvdGgpCisgKiBwYXJ0aWNpcGF0ZSBpbiB0aGUgb3BlcmF0aW9uLgorICoKKyAqIEFSRzAgYW5kIEFSRzEgYXJlIGJvdGggcmVzZXJ2ZWQgYW5kIG11c3QgYmUgc2V0IHRvIHplcm8uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NTVVfREVNQVBfQ1RYCQkweDIzCisKKy8qIG1tdV9kZW1hcF9hbGwoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfREVNQVBfQUxMCisgKiBBUkcwOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcxOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcyOglmbGFncyAoSFZfTU1VX3tJTU1VLERNTVV9KQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJCUludmFsaWQgZmxhZ3MgdmFsdWUKKyAqCQlFTk9UU1VQUE9SVEVECQlBUkcwIG9yIEFSRzEgaXMgbm9uLXplcm8KKyAqCisgKiBEZW1hcHMgYWxsIG5vbi1wZXJtYW5lbnQgdmlydHVhbCBwYWdlIG1hcHBpbmdzIHByZXZpb3VzbHkgc3BlY2lmaWVkCisgKiBmb3IgdGhlIGN1cnJlbnQgdmlydHVhbCBDUFUuICBBbnkgdmlydHVhbCB0YWdnZWQgY2FjaGVzIGFyZQorICogZ3VhcmFudGVlZCB0byBiZSBrZXB0IGNvbnNpc3RlbnQuICBUaGUgZmxhZ3MgYXJndW1lbnQgZGV0ZXJtaW5lcworICogd2hpY2ggVExCIChpbnN0cnVjdGlvbiwgb3IgZGF0YSwgb3IgYm90aCkgcGFydGljaXBhdGUgaW4gdGhlCisgKiBvcGVyYXRpb24uCisgKgorICogQVJHMCBhbmQgQVJHMSBhcmUgYm90aCByZXNlcnZlZCBhbmQgbXVzdCBiZSBzZXQgdG8gemVyby4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9ERU1BUF9BTEwJCTB4MjQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIHN1bjR2X21tdV9kZW1hcF9hbGwodm9pZCk7CisjZW5kaWYKKworLyogbW11X21hcF9wZXJtX2FkZHIoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfTUFQX1BFUk1fQUREUgorICogQVJHMDoJdmlydHVhbCBhZGRyZXNzCisgKiBBUkcxOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcyOglUVEUKKyAqIEFSRzM6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ1dGFsIGFkZHJlc3Mgb3IgZmxhZ3MgdmFsdWUKKyAqCQlFQkFEUEdTWgkJSW52YWxpZCBwYWdlIHNpemUgdmFsdWUKKyAqCQlFTk9SQUREUgkJSW52YWxpZCByZWFsIGFkZHJlc3MgaW4gVFRFCisgKgkJRVRPT01BTlkJCVRvbyBtYW55IG1hcHBpbmdzIChtYXggb2YgOCByZWFjaGVkKQorICoKKyAqIENyZWF0ZSBhIHBlcm1hbmVudCBtYXBwaW5nIHVzaW5nIHRoZSBnaXZlbiBUVEUgYW5kIHZpcnR1YWwgYWRkcmVzcworICogZm9yIGNvbnRleHQgMCBvbiB0aGUgY2FsbGluZyB2aXJ0dWFsIENQVS4gIEEgbWF4aW11bSBvZiA4IHN1Y2gKKyAqIHBlcm1hbmVudCBtYXBwaW5ncyBtYXkgYmUgc3BlY2lmaWVkIGJ5IHByaXZpbGVnZWQgY29kZS4gIE1hcHBpbmdzCisgKiBtYXkgYmUgcmVtb3ZlZCB3aXRoIG1tdV91bm1hcF9wZXJtX2FkZHIoKS4KKyAqCisgKiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIGEgVFRFIHdpdGggdGhlIHZhbGlkIGJpdCBjbGVhciBpcyBnaXZlbi4KKyAqCisgKiBOb3RlOiBUaGlzIGNhbGwgaXMgdXNlZCB0byBzcGVjaWZ5IGFkZHJlc3Mgc3BhY2UgbWFwcGluZ3MgZm9yIHdoaWNoCisgKiAgICAgICBwcml2aWxlZ2VkIGNvZGUgZG9lcyBub3QgZXhwZWN0IHRvIHJlY2VpdmUgbWlzc2VzLiAgRm9yIGV4YW1wbGUsCisgKiAgICAgICB0aGlzIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byBtYXAga2VybmVsIG51Y2xldXMgY29kZSBhbmQgZGF0YS4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9NQVBfUEVSTV9BRERSCTB4MjUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21tdV9tYXBfcGVybV9hZGRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzZXRfdG9femVybywKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHR0ZSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKyNlbmRpZgorCisvKiBtbXVfZmF1bHRfYXJlYV9jb25mKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX0ZBVUxUX0FSRUFfQ09ORgorICogQVJHMDoJcmVhbCBhZGRyZXNzCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXByZXZpb3VzIG1tdSBmYXVsdCBhcmVhIHJlYWwgYWRkcmVzcworICogRVJST1JTOglFTk9SQUREUgkJSW52YWxpZCByZWFsIGFkZHJlc3MKKyAqCQlFQkFEQUxJR04JCUludmFsaWQgYWxpZ25tZW50IGZvciBmYXVsdCBhcmVhCisgKgorICogQ29uZmlndXJlIHRoZSBNTVUgZmF1bHQgc3RhdHVzIGFyZWEgZm9yIHRoZSBjYWxsaW5nIENQVS4gIEEgNjQtYnl0ZQorICogYWxpZ25lZCByZWFsIGFkZHJlc3Mgc3BlY2lmaWVzIHdoZXJlIE1NVSBmYXVsdCBzdGF0dXMgaW5mb3JtYXRpb24KKyAqIGlzIHBsYWNlZC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHByZXZpb3VzbHkgc3BlY2lmaWVkIGFyZWEsIG9yIDAKKyAqIGZvciB0aGUgZmlyc3QgaW52b2NhdGlvbi4gIFNwZWNpZnlpbmcgYSBmYXVsdCBhcmVhIGF0IHJlYWwgYWRkcmVzcworICogMCBpcyBub3QgYWxsb3dlZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9GQVVMVF9BUkVBX0NPTkYJMHgyNgorCisvKiBtbXVfZW5hYmxlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX0VOQUJMRQorICogQVJHMDoJZW5hYmxlIGZsYWcKKyAqIEFSRzE6CXJldHVybiB0YXJnZXQgYWRkcmVzcworICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVOT1JBRERSCQlJbnZhbGlkIHJlYWwgYWRkcmVzcyB3aGVuIGRpc2FibGluZworICoJCQkJCXRyYW5zbGF0aW9uLgorICoJCUVCQURBTElHTgkJVGhlIHJldHVybiB0YXJnZXQgYWRkcmVzcyBpcyBub3QKKyAqCQkJCQlhbGlnbmVkIHRvIGFuIGluc3RydWN0aW9uLgorICoJCUVJTlZBTAkJCVRoZSBlbmFibGUgZmxhZyByZXF1ZXN0IHRoZSBjdXJyZW50CisgKgkJCQkJb3BlcmF0aW5nIG1vZGUgKGUuZy4gZGlzYWJsZSBpZiBhbHJlYWR5CisgKgkJCQkJZGlzYWJsZWQpCisgKgorICogRW5hYmxlIG9yIGRpc2FibGUgdmlydHVhbCBhZGRyZXNzIHRyYW5zbGF0aW9uIGZvciB0aGUgY2FsbGluZyBDUFUKKyAqIHdpdGhpbiB0aGUgdmlydHVhbCBtYWNoaW5lIGRvbWFpbi4gIElmIHRoZSBlbmFibGUgZmxhZyBpcyB6ZXJvLAorICogdHJhbnNsYXRpb24gaXMgZGlzYWJsZWQsIGFueSBub24temVybyB2YWx1ZSB3aWxsIGVuYWJsZQorICogdHJhbnNsYXRpb24uCisgKgorICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHRoZSBuZXdseSBzZWxlY3RlZCB0cmFuc2xhdGlvbiBtb2RlCisgKiB3aWxsIGJlIGFjdGl2ZS4gIElmIHRoZSBtbXUgaXMgYmVpbmcgZW5hYmxlZCwgdGhlbiB0aGUgcmV0dXJuCisgKiB0YXJnZXQgYWRkcmVzcyBpcyBhIHZpcnR1YWwgYWRkcmVzcyBlbHNlIGl0IGlzIGEgcmVhbCBhZGRyZXNzLgorICoKKyAqIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCBjb250cm9sIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGdpdmVuCisgKiByZXR1cm4gdGFyZ2V0IGFkZHJlc3MgKGllLiB0aGUgY3B1IHdpbGwganVtcCB0byB0aGF0IGFkZHJlc3MpLiAgT24KKyAqIGZhaWx1cmUsIHRoZSBwcmV2aW91cyBtbXUgbW9kZSByZW1haW5zIGFuZCB0aGUgdHJhcCBzaW1wbHkgcmV0dXJucworICogYXMgbm9ybWFsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUgaW4gUkVUMC4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9FTkFCTEUJCTB4MjcKKworLyogbW11X3VubWFwX3Blcm1fYWRkcigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9VTk1BUF9QRVJNX0FERFIKKyAqIEFSRzA6CXZpcnR1YWwgYWRkcmVzcworICogQVJHMToJcmVzZXJ2ZWQsIG11c3QgYmUgemVybworICogQVJHMjoJZmxhZ3MgKEhWX01NVV97SU1NVSxETU1VfSkKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCQlJbnZhbGlkIHZpcnV0YWwgYWRkcmVzcyBvciBmbGFncyB2YWx1ZQorICoJCUVOT01BUAkJCVNwZWNpZmllZCBtYXBwaW5nIHdhcyBub3QgZm91bmQKKyAqCisgKiBEZW1hcHMgYW55IHBlcm1hbmVudCBwYWdlIG1hcHBpbmcgKGVzdGFibGlzaGVkIHZpYQorICogbW11X21hcF9wZXJtX2FkZHIoKSkgYXQgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyBmb3IgY29udGV4dCAwIG9uCisgKiB0aGUgY3VycmVudCB2aXJ0dWFsIENQVS4gIEFueSB2aXJ0dWFsIHRhZ2dlZCBjYWNoZXMgYXJlIGd1YXJhbnRlZWQKKyAqIHRvIGJlIGtlcHQgY29uc2lzdGVudC4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9VTk1BUF9QRVJNX0FERFIJMHgyOAorCisvKiBtbXVfdHNiX2N0eDBfaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9UU0JfQ1RYMF9JTkZPCisgKiBBUkcwOgltYXggVFNCcworICogQVJHMToJYnVmZmVyIHBvaW50ZXIKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJbnVtYmVyIG9mIFRTQnMKKyAqIEVSUk9SUzoJRUlOVkFMCQkJU3VwcGxpZWQgYnVmZmVyIGlzIHRvbyBzbWFsbAorICoJCUVCQURBTElHTgkJVGhlIGJ1ZmZlciBwb2ludGVyIGlzIGJhZGx5IGFsaWduZWQKKyAqCQlFTk9SQUREUgkJSW52YWxpZCByZWFsIGFkZHJlc3MgZm9yIGJ1ZmZlciBwb2ludGVyCisgKgorICogUmV0dXJuIHRoZSBUU0IgY29uZmlndXJhdGlvbiBhcyBwcmV2aW91cyBkZWZpbmVkIGJ5IG1tdV90c2JfY3R4MCgpCisgKiBpbnRvIHRoZSBwcm92aWRlZCBidWZmZXIuICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIGdpdmVuIGluIEFSRzEKKyAqIGluIHRlcm1zIG9mIHRoZSBudW1iZXIgb2YgVFNCIGRlc2NyaXB0aW9uIGVudHJpZXMuCisgKgorICogVXBvbiByZXR1cm4sIFJFVDEgYWx3YXlzIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgVFNCIGRlc2NyaXB0aW9ucworICogcHJldmlvdXNseSBjb25maWd1cmVkLiAgSWYgemVybyBUU0JzIHdlcmUgY29uZmlndXJlZCwgRU9LIGlzCisgKiByZXR1cm5lZCB3aXRoIFJFVDEgY29udGFpbmluZyAwLgorICovCisjZGVmaW5lIEhWX0ZBU1RfTU1VX1RTQl9DVFgwX0lORk8JMHgyOQorCisvKiBtbXVfdHNiX2N0eG5vbjBfaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9UU0JfQ1RYTk9OMF9JTkZPCisgKiBBUkcwOgltYXggVFNCcworICogQVJHMToJYnVmZmVyIHBvaW50ZXIKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJbnVtYmVyIG9mIFRTQnMKKyAqIEVSUk9SUzoJRUlOVkFMCQkJU3VwcGxpZWQgYnVmZmVyIGlzIHRvbyBzbWFsbAorICoJCUVCQURBTElHTgkJVGhlIGJ1ZmZlciBwb2ludGVyIGlzIGJhZGx5IGFsaWduZWQKKyAqCQlFTk9SQUREUgkJSW52YWxpZCByZWFsIGFkZHJlc3MgZm9yIGJ1ZmZlciBwb2ludGVyCisgKgorICogUmV0dXJuIHRoZSBUU0IgY29uZmlndXJhdGlvbiBhcyBwcmV2aW91cyBkZWZpbmVkIGJ5CisgKiBtbXVfdHNiX2N0eG5vbjAoKSBpbnRvIHRoZSBwcm92aWRlZCBidWZmZXIuICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiBpcyBnaXZlbiBpbiBBUkcxIGluIHRlcm1zIG9mIHRoZSBudW1iZXIgb2YgVFNCIGRlc2NyaXB0aW9uIGVudHJpZXMuCisgKgorICogVXBvbiByZXR1cm4sIFJFVDEgYWx3YXlzIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgVFNCIGRlc2NyaXB0aW9ucworICogcHJldmlvdXNseSBjb25maWd1cmVkLiAgSWYgemVybyBUU0JzIHdlcmUgY29uZmlndXJlZCwgRU9LIGlzCisgKiByZXR1cm5lZCB3aXRoIFJFVDEgY29udGFpbmluZyAwLgorICovCisjZGVmaW5lIEhWX0ZBU1RfTU1VX1RTQl9DVFhOT04wX0lORk8JMHgyYQorCisvKiBtbXVfZmF1bHRfYXJlYV9pbmZvKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX0ZBVUxUX0FSRUFfSU5GTworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglmYXVsdCBhcmVhIHJlYWwgYWRkcmVzcworICogRVJST1JTOglObyBlcnJvcnMgZGVmaW5lZC4KKyAqCisgKiBSZXR1cm4gdGhlIGN1cnJlbnRseSBkZWZpbmVkIE1NVSBmYXVsdCBzdGF0dXMgYXJlYSBmb3IgdGhlIGN1cnJlbnQKKyAqIENQVS4gIFRoZSByZWFsIGFkZHJlc3Mgb2YgdGhlIGZhdWx0IHN0YXR1cyBhcmVhIGlzIHJldHVybmVkIGluCisgKiBSRVQxLCBvciAwIGlzIHJldHVybmVkIGluIFJFVDEgaWYgbm8gZmF1bHQgc3RhdHVzIGFyZWEgaXMgZGVmaW5lZC4KKyAqCisgKiBOb3RlOiBtbXVfZmF1bHRfYXJlYV9jb25mKCkgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgKFJFVDEpCisgKiAgICAgICBmcm9tIHRoaXMgc2VydmljZSBpZiB0aGVyZSBpcyBhIG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgZmF1bHQKKyAqCSBhcmVhIGZvciBhIGNwdS4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9GQVVMVF9BUkVBX0lORk8JMHgyYgorCisvKiBDYWNoZSBhbmQgTWVtb3J5IHNlcnZpY2VzLiAqLworCisvKiBtZW1fc2NydWIoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NRU1fU0NSVUIKKyAqIEFSRzA6CXJlYWwgYWRkcmVzcworICogQVJHMToJbGVuZ3RoCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWxlbmd0aCBzY3J1YmJlZAorICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVCQURBTElHTglTdGFydCBhZGRyZXNzIG9yIGxlbmd0aCBhcmUgbm90IGNvcnJlY3RseQorICoJCQkJYWxpZ25lZAorICoJCUVJTlZBTAkJTGVuZ3RoIGlzIHplcm8KKyAqCisgKiBaZXJvIHRoZSBtZW1vcnkgY29udGVudHMgaW4gdGhlIHJhbmdlIHJlYWwgYWRkcmVzcyB0byByZWFsIGFkZHJlc3MKKyAqIHBsdXMgbGVuZ3RoIG1pbnVzIDEuICBBbHNvLCB2YWxpZCBFQ0Mgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoYXQKKyAqIG1lbW9yeSBhZGRyZXNzIHJhbmdlLiAgU2NydWJiaW5nIGlzIHN0YXJ0ZWQgYXQgdGhlIGdpdmVuIHJlYWwKKyAqIGFkZHJlc3MsIGJ1dCBtYXkgbm90IHNjcnViIHRoZSBlbnRpcmUgZ2l2ZW4gbGVuZ3RoLiAgVGhlIGFjdHVhbAorICogbGVuZ3RoIHNjcnViYmVkIHdpbGwgYmUgcmV0dXJuZWQgaW4gUkVUMS4KKyAqCisgKiBUaGUgcmVhbCBhZGRyZXNzIGFuZCBsZW5ndGggbXVzdCBiZSBhbGlnbmVkIG9uIGFuIDhLIGJvdW5kYXJ5LCBvcgorICogY29udGFpbiB0aGUgc3RhcnQgYWRkcmVzcyBhbmQgbGVuZ3RoIGZyb20gYSBzdW40diBlcnJvciByZXBvcnQuCisgKgorICogTm90ZTogVGhlcmUgYXJlIHR3byB1c2VzIGZvciB0aGlzIGZ1bmN0aW9uLiAgVGhlIGZpcnN0IHVzZSBpcyB0byBibG9jayBjbGVhcgorICogICAgICAgYW5kIGluaXRpYWxpemUgbWVtb3J5IGFuZCB0aGUgc2Vjb25kIGlzIHRvIHNjcnViIGFuIHUgbmNvcnJlY3RhYmxlCisgKiAgICAgICBlcnJvciByZXBvcnRlZCB2aWEgYSByZXN1bWFibGUgb3Igbm9uLXJlc3VtYWJsZSB0cmFwLiAgVGhlIHNlY29uZAorICogICAgICAgdXNlIHJlcXVpcmVzIHRoZSBhcmd1bWVudHMgdG8gYmUgZXF1YWwgdG8gdGhlIHJlYWwgYWRkcmVzcyBhbmQgbGVuZ3RoCisgKiAgICAgICBwcm92aWRlZCBpbiBhIHN1bjR2IG1lbW9yeSBlcnJvciByZXBvcnQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NRU1fU0NSVUIJCTB4MzEKKworLyogbWVtX3N5bmMoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NRU1fU1lOQworICogQVJHMDoJcmVhbCBhZGRyZXNzCisgKiBBUkcxOglsZW5ndGgKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJbGVuZ3RoIHN5bmNlZAorICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVCQURBTElHTglTdGFydCBhZGRyZXNzIG9yIGxlbmd0aCBhcmUgbm90IGNvcnJlY3RseQorICoJCQkJYWxpZ25lZAorICoJCUVJTlZBTAkJTGVuZ3RoIGlzIHplcm8KKyAqCisgKiBGb3JjZSB0aGUgbmV4dCBhY2Nlc3Mgd2l0aGluIHRoZSByZWFsIGFkZHJlc3MgdG8gcmVhbCBhZGRyZXNzIHBsdXMKKyAqIGxlbmd0aCBtaW51cyAxIHRvIGJlIGZldGNoZXMgZnJvbSBtYWluIHN5c3RlbSBtZW1vcnkuICBMZXNzIHRoYW4KKyAqIHRoZSBnaXZlbiBsZW5ndGggbWF5IGJlIHN5bmNlZCwgdGhlIGFjdHVhbCBhbW91bnQgc3luY2VkIGlzCisgKiByZXR1cm5lZCBpbiBSRVQxLiAgVGhlIHJlYWwgYWRkcmVzcyBhbmQgbGVuZ3RoIG11c3QgYmUgYWxpZ25lZCBvbgorICogYW4gOEsgYm91bmRhcnkuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NRU1fU1lOQwkJMHgzMgorCisvKiBUaW1lIG9mIGRheSBzZXJ2aWNlcy4KKyAqCisgKiBUaGUgaHlwZXJ2aXNvciBtYWludGFpbnMgdGhlIHRpbWUgb2YgZGF5IG9uIGEgcGVyLWRvbWFpbiBiYXNpcy4KKyAqIENoYW5naW5nIHRoZSB0aW1lIG9mIGRheSBpbiBvbmUgZG9tYWluIGRvZXMgbm90IGFmZmVjdCB0aGUgdGltZSBvZgorICogZGF5IG9uIGFueSBvdGhlciBkb21haW4uCisgKgorICogVGltZSBpcyBkZXNjcmliZWQgYnkgYSBzaW5nbGUgdW5zaWduZWQgNjQtYml0IHdvcmQgd2hpY2ggaXMgdGhlCisgKiBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBFcG9jaCAoMDA6MDA6MDAgVVRDLCBKYW51YXJ5IDEsCisgKiAxOTcwKS4KKyAqLworCisvKiB0b2RfZ2V0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVE9EX0dFVAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglUT0QKKyAqIEVSUk9SUzoJRVdPVUxEQkxPQ0sJVE9EIHJlc291cmNlIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlCisgKgkJRU5PVFNVUFBPUlRFRAlJZiBUT0Qgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCisgKgorICogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgb2YgZGF5LiAgTWF5IGJsb2NrIGlmIFRPRCBhY2Nlc3MgaXMKKyAqIHRlbXBvcmFyaWx5IG5vdCBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1RPRF9HRVQJCQkweDUwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl90b2RfZ2V0KHVuc2lnbmVkIGxvbmcgKnRpbWUpOworI2VuZGlmCisKKy8qIHRvZF9zZXQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9UT0RfU0VUCisgKiBBUkcwOglUT0QKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFV09VTERCTE9DSwlUT0QgcmVzb3VyY2UgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUKKyAqCQlFTk9UU1VQUE9SVEVECUlmIFRPRCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0KKyAqCisgKiBUaGUgY3VycmVudCB0aW1lIG9mIGRheSBpcyBzZXQgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBpbiBBUkcwLiAgTWF5CisgKiBibG9jayBpZiBUT0QgYWNjZXNzIGlzIHRlbXBvcmFyaWx5IG5vdCBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1RPRF9TRVQJCQkweDUxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl90b2Rfc2V0KHVuc2lnbmVkIGxvbmcgdGltZSk7CisjZW5kaWYKKworLyogQ29uc29sZSBzZXJ2aWNlcyAqLworCisvKiBjb25fZ2V0Y2hhcigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NPTlNfR0VUQ0hBUgorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgljaGFyYWN0ZXIKKyAqIEVSUk9SUzoJRVdPVUxEQkxPQ0sJTm8gY2hhcmFjdGVyIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm5zIGEgY2hhcmFjdGVyIGZyb20gdGhlIGNvbnNvbGUgZGV2aWNlLiAgSWYgbm8gY2hhcmFjdGVyIGlzCisgKiBhdmFpbGFibGUgdGhlbiBhbiBFV09VTERCTE9DSyBlcnJvciBpcyByZXR1cm5lZC4gIElmIGEgY2hhcmFjdGVyIGlzCisgKiBhdmFpbGFibGUsIHRoZW4gdGhlIHJldHVybmVkIHN0YXR1cyBpcyBFT0sgYW5kIHRoZSBjaGFyYWN0ZXIgdmFsdWUKKyAqIGlzIGluIFJFVDEuCisgKgorICogQSB2aXJ0dWFsIEJSRUFLIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSA2NC1iaXQgdmFsdWUgLTEuCisgKgorICogQSB2aXJ0dWFsIEhVUCBzaWduYWwgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIDY0LWJpdCB2YWx1ZSAtMi4KKyAqLworI2RlZmluZSBIVl9GQVNUX0NPTlNfR0VUQ0hBUgkJMHg2MAorCisvKiBjb25fcHV0Y2hhcigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NPTlNfUFVUQ0hBUgorICogQVJHMDoJY2hhcmFjdGVyCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbGxlZ2FsIGNoYXJhY3RlcgorICoJCUVXT1VMREJMT0NLCU91dHB1dCBidWZmZXIgY3VycmVudGx5IGZ1bGwsIHdvdWxkIGJsb2NrCisgKgorICogU2VuZCBhIGNoYXJhY3RlciB0byB0aGUgY29uc29sZSBkZXZpY2UuICBPbmx5IGNoYXJhY3RlciB2YWx1ZXMKKyAqIGJldHdlZW4gMCBhbmQgMjU1IG1heSBiZSB1c2VkLiAgVmFsdWVzIG91dHNpZGUgdGhpcyByYW5nZSBhcmUKKyAqIGludmFsaWQgZXhjZXB0IGZvciB0aGUgNjQtYml0IHZhbHVlIC0xIHdoaWNoIGlzIHVzZWQgdG8gc2VuZCBhCisgKiB2aXJ0dWFsIEJSRUFLLgorICovCisjZGVmaW5lIEhWX0ZBU1RfQ09OU19QVVRDSEFSCQkweDYxCisKKy8qIGNvbl9yZWFkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ09OU19SRUFECisgKiBBUkcwOglidWZmZXIgcmVhbCBhZGRyZXNzCisgKiBBUkcxOglidWZmZXIgc2l6ZSBpbiBieXRlcworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglieXRlcyByZWFkIG9yIEJSRUFLIG9yIEhVUAorICogRVJST1JTOglFV09VTERCTE9DSwlObyBjaGFyYWN0ZXIgYXZhaWxhYmxlLgorICoKKyAqIFJlYWRzIGNoYXJhY3RlcnMgaW50byBhIGJ1ZmZlciBmcm9tIHRoZSBjb25zb2xlIGRldmljZS4gIElmIG5vCisgKiBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlIHRoZW4gYW4gRVdPVUxEQkxPQ0sgZXJyb3IgaXMgcmV0dXJuZWQuCisgKiBJZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUsIHRoZW4gdGhlIHJldHVybmVkIHN0YXR1cyBpcyBFT0sKKyAqIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byB0aGUgZ2l2ZW4gYnVmZmVyIGlzIHByb3ZpZGVkCisgKiBpbiBSRVQxLgorICoKKyAqIEEgdmlydHVhbCBCUkVBSyBpcyByZXByZXNlbnRlZCBieSB0aGUgNjQtYml0IFJFVDEgdmFsdWUgLTEuCisgKgorICogQSB2aXJ0dWFsIEhVUCBzaWduYWwgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIDY0LWJpdCBSRVQxIHZhbHVlIC0yLgorICoKKyAqIElmIEJSRUFLIG9yIEhVUCBhcmUgaW5kaWNhdGVkLCBubyBieXRlcyB3ZXJlIHJlYWQgaW50byBidWZmZXIuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DT05TX1JFQUQJCTB4NjIKKworLyogY29uX3dyaXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ09OU19XUklURQorICogQVJHMDoJYnVmZmVyIHJlYWwgYWRkcmVzcworICogQVJHMToJYnVmZmVyIHNpemUgaW4gYnl0ZXMKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJYnl0ZXMgd3JpdHRlbgorICogRVJST1JTOglFV09VTERCTE9DSwlPdXRwdXQgYnVmZmVyIGN1cnJlbnRseSBmdWxsLCB3b3VsZCBibG9jaworICoKKyAqIFNlbmQgYSBjaGFyYWN0ZXJzIGluIGJ1ZmZlciB0byB0aGUgY29uc29sZSBkZXZpY2UuICBCcmVha3MgbXVzdCBiZQorICogc2VudCB1c2luZyBjb25fcHV0Y2hhcigpLgorICovCisjZGVmaW5lIEhWX0ZBU1RfQ09OU19XUklURQkJMHg2MworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIGxvbmcgc3VuNHZfY29uX2dldGNoYXIobG9uZyAqc3RhdHVzKTsKK2V4dGVybiBsb25nIHN1bjR2X2Nvbl9wdXRjaGFyKGxvbmcgYyk7CitleHRlcm4gbG9uZyBzdW40dl9jb25fcmVhZCh1bnNpZ25lZCBsb25nIGJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKmJ5dGVzX3JlYWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfY29uX3dyaXRlKHVuc2lnbmVkIGxvbmcgYnVmZmVyLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqYnl0ZXNfd3JpdHRlbik7CisjZW5kaWYKKworLyogbWFjaF9zZXRfc29mdF9zdGF0ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfU0VUX1NPRlRfU1RBVEUKKyAqIEFSRzA6CXNvZnR3YXJlIHN0YXRlCisgKiBBUkcxOglzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBwb2ludGVyCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlzb2Z0d2FyZSBzdGF0ZSBub3QgdmFsaWQgb3Igc29mdHdhcmUgc3RhdGUKKyAqCQkJCWRlc2NyaXB0aW9uIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWQKKyAqCQlFTk9SQUREUglzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBwb2ludGVyIGlzIG5vdCBhCisgKgkJCQl2YWxpZCByZWFsIGFkZHJlc3MKKyAqCQlFQkFEQUxJR05FRAlzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBpcyBub3QgY29ycmVjdGx5CisgKgkJCQlhbGlnbmVkCisgKgorICogVGhpcyBhbGxvd3MgdGhlIGd1ZXN0IHRvIHJlcG9ydCBpdCdzIHNvZnQgc3RhdGUgdG8gdGhlIGh5cGVydmlzb3IuICBUaGVyZQorICogYXJlIHR3byBwcmltYXJ5IGNvbXBvbmVudHMgdG8gdGhpcyBzdGF0ZS4gIFRoZSBmaXJzdCBwYXJ0IHN0YXRlcyB3aGV0aGVyCisgKiB0aGUgZ3Vlc3Qgc29mdHdhcmUgaXMgcnVubmluZyBvciBub3QuICBUaGUgc2Vjb25kIGNvbnRhaW50cyBvcHRpb25hbAorICogZGV0YWlscyBzcGVjaWZpYyB0byB0aGUgc29mdHdhcmUuCisgKgorICogVGhlIHNvZnR3YXJlIHN0YXRlIGFyZ3VtZW50IGlzIGRlZmluZWQgYmVsb3cgaW4gSFZfU09GVF9TVEFURV8qLCBhbmQKKyAqIGluZGljYXRlcyB3aGV0aGVyIHRoZSBndWVzdCBpcyBvcGVyYXRpbmcgbm9ybWFsbHkgb3IgaW4gYSB0cmFuc2l0aW9uYWwKKyAqIHN0YXRlLgorICoKKyAqIFRoZSBzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBhcmd1bWVudCBpcyBhIHJlYWwgYWRkcmVzcyBvZiBhIGRhdGEgYnVmZmVyCisgKiBvZiBzaXplIDMyLWJ5dGVzIGFsaWduZWQgb24gYSAzMi1ieXRlIGJvdW5kYXJ5LiAgSXQgaXMgdHJlYXRlZCBhcyBhIE5VTEwKKyAqIHRlcm1pbmF0ZWQgNy1iaXQgQVNDSUkgc3RyaW5nIG9mIHVwIHRvIDMxIGNoYXJhY3RlcnMgbm90IGluY2x1ZGluZyB0aGUKKyAqIE5VTEwgdGVybWluYXRpb24uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NQUNIX1NFVF9TT0ZUX1NUQVRFCTB4NzAKKyNkZWZpbmUgIEhWX1NPRlRfU1RBVEVfTk9STUFMCQkgMHgwMQorI2RlZmluZSAgSFZfU09GVF9TVEFURV9UUkFOU0lUSU9OCSAweDAyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9tYWNoX3NldF9zb2Z0X3N0YXRlKHVuc2lnbmVkIGxvbmcgc29mdF9zdGF0ZSwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbXNnX3N0cmluZ19yYSk7CisjZW5kaWYKKworLyogbWFjaF9nZXRfc29mdF9zdGF0ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfR0VUX1NPRlRfU1RBVEUKKyAqIEFSRzA6CXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIHBvaW50ZXIKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJc29mdHdhcmUgc3RhdGUKKyAqIEVSUk9SUzoJRU5PUkFERFIJc29mdHdhcmUgc3RhdGUgZGVzY3JpcHRpb24gcG9pbnRlciBpcyBub3QgYQorICoJCQkJdmFsaWQgcmVhbCBhZGRyZXNzCisgKgkJRUJBREFMSUdORUQJc29mdHdhcmUgc3RhdGUgZGVzY3JpcHRpb24gaXMgbm90IGNvcnJlY3RseQorICoJCQkJYWxpZ25lZAorICoKKyAqIFJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBndWVzdCdzIHNvZnR3YXJlIHN0YXRlLiAgVGhlIHJ1bGVzCisgKiBmb3IgdGhlIHNvZnR3YXJlIHN0YXRlIHBvaW50ZXIgYXJlIHRoZSBzYW1lIGFzIGZvciBtYWNoX3NldF9zb2Z0X3N0YXRlKCkKKyAqIGFib3ZlLgorICovCisjZGVmaW5lIEhWX0ZBU1RfTUFDSF9HRVRfU09GVF9TVEFURQkweDcxCisKKy8qIHN2Y19zZW5kKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfU1ZDX1NFTkQKKyAqIEFSRzA6CXNlcnZpY2UgSUQKKyAqIEFSRzE6CWJ1ZmZlciByZWFsIGFkZHJlc3MKKyAqIEFSRzI6CWJ1ZmZlciBzaXplCisgKiBSRVQwOglTVEFUVVMKKyAqIFJFVDE6CXNlbnRfYnl0ZXMKKyAqCisgKiBCZSBjYXJlZnVsLCBhbGwgb3V0cHV0IHJlZ2lzdGVycyBhcmUgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLAorICogc28gZm9yIGV4YW1wbGUgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHNhdmUgYXdheSBhIHZhbHVlIGluICVvNAorICogYWNyb3NzIHRoZSB0cmFwLgorICovCisjZGVmaW5lIEhWX0ZBU1RfU1ZDX1NFTkQJCTB4ODAKKworLyogc3ZjX3JlY3YoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9TVkNfUkVDVgorICogQVJHMDoJc2VydmljZSBJRAorICogQVJHMToJYnVmZmVyIHJlYWwgYWRkcmVzcworICogQVJHMjoJYnVmZmVyIHNpemUKKyAqIFJFVDA6CVNUQVRVUworICogUkVUMToJcmVjdl9ieXRlcworICoKKyAqIEJlIGNhcmVmdWwsIGFsbCBvdXRwdXQgcmVnaXN0ZXJzIGFyZSBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24sCisgKiBzbyBmb3IgZXhhbXBsZSBpdCBpcyBub3QgcG9zc2libGUgdG8gc2F2ZSBhd2F5IGEgdmFsdWUgaW4gJW80CisgKiBhY3Jvc3MgdGhlIHRyYXAuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9TVkNfUkVDVgkJMHg4MQorCisvKiBzdmNfZ2V0c3RhdHVzKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfU1ZDX0dFVFNUQVRVUworICogQVJHMDoJc2VydmljZSBJRAorICogUkVUMDoJU1RBVFVTCisgKiBSRVQxOglzdGF0dXMgYml0cworICovCisjZGVmaW5lIEhWX0ZBU1RfU1ZDX0dFVFNUQVRVUwkJMHg4MgorCisvKiBzdmNfc2V0c3RhdHVzKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfU1ZDX1NFVFNUQVRVUworICogQVJHMDoJc2VydmljZSBJRAorICogQVJHMToJYml0cyB0byBzZXQKKyAqIFJFVDA6CVNUQVRVUworICovCisjZGVmaW5lIEhWX0ZBU1RfU1ZDX1NFVFNUQVRVUwkJMHg4MworCisvKiBzdmNfY2xyc3RhdHVzKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfU1ZDX0NMUlNUQVRVUworICogQVJHMDoJc2VydmljZSBJRAorICogQVJHMToJYml0cyB0byBjbGVhcgorICogUkVUMDoJU1RBVFVTCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9TVkNfQ0xSU1RBVFVTCQkweDg0CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9zdmNfc2VuZCh1bnNpZ25lZCBsb25nIHN2Y19pZCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBidWZmZXIsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyX3NpemUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnNlbnRfYnl0ZXMpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfc3ZjX3JlY3YodW5zaWduZWQgbG9uZyBzdmNfaWQsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcl9zaXplLAorCQkJCSAgICB1bnNpZ25lZCBsb25nICpyZWN2X2J5dGVzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3N2Y19nZXRzdGF0dXModW5zaWduZWQgbG9uZyBzdmNfaWQsCisJCQkJCSB1bnNpZ25lZCBsb25nICpzdGF0dXNfYml0cyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9zdmNfc2V0c3RhdHVzKHVuc2lnbmVkIGxvbmcgc3ZjX2lkLAorCQkJCQkgdW5zaWduZWQgbG9uZyBzdGF0dXNfYml0cyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9zdmNfY2xyc3RhdHVzKHVuc2lnbmVkIGxvbmcgc3ZjX2lkLAorCQkJCQkgdW5zaWduZWQgbG9uZyBzdGF0dXNfYml0cyk7CisjZW5kaWYKKworLyogVHJhcCB0cmFjZSBzZXJ2aWNlcy4KKyAqCisgKiBUaGUgaHlwZXJ2aXNvciBwcm92aWRlcyBhIHRyYXAgdHJhY2luZyBjYXBhYmlsaXR5IGZvciBwcml2aWxlZ2VkCisgKiBjb2RlIHJ1bm5pbmcgb24gZWFjaCB2aXJ0dWFsIENQVS4gIFByaXZpbGVnZWQgY29kZSBwcm92aWRlcyBhCisgKiByb3VuZC1yb2JpbiB0cmFwIHRyYWNlIHF1ZXVlIHdpdGhpbiB3aGljaCB0aGUgaHlwZXJ2aXNvciB3cml0ZXMKKyAqIDY0LWJ5dGUgZW50cmllcyBkZXRhaWxpbmcgaHlwZXJwcml2aWxlZ2VkIHRyYXBzIHRha2VuIG4gYmVoYWxmIG9mCisgKiBwcml2aWxlZ2VkIGNvZGUuICBUaGlzIGlzIHByb3ZpZGVkIGFzIGEgZGVidWdnaW5nIGNhcGFiaWxpdHkgZm9yCisgKiBwcml2aWxlZ2VkIGNvZGUuCisgKgorICogVGhlIHRyYXAgdHJhY2UgY29udHJvbCBzdHJ1Y3R1cmUgaXMgNjQtYnl0ZXMgbG9uZyBhbmQgcGxhY2VkIGF0IHRoZQorICogc3RhcnQgKG9mZnNldCAwKSBvZiB0aGUgdHJhcCB0cmFjZSBidWZmZXIsIGFuZCBpcyBkZXNjcmliZWQgYXMKKyAqIGZvbGxvd3M6CisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgaHZfdHJhcF90cmFjZV9jb250cm9sIHsKKwl1bnNpZ25lZCBsb25nCQloZWFkX29mZnNldDsKKwl1bnNpZ25lZCBsb25nCQl0YWlsX29mZnNldDsKKwl1bnNpZ25lZCBsb25nCQlfX3Jlc2VydmVkWzB4MzAgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOworfTsKKyNlbmRpZgorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0NUUkxfSEVBRF9PRkZTRVQJMHgwMAorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0NUUkxfVEFJTF9PRkZTRVQJMHgwOAorCisvKiBUaGUgaGVhZCBvZmZzZXQgaXMgdGhlIG9mZnNldCBvZiB0aGUgbW9zdCByZWNlbnRseSBjb21wbGV0ZWQgZW50cnkKKyAqIGluIHRoZSB0cmFwLXRyYWNlIGJ1ZmZlci4gIFRoZSB0YWlsIG9mZnNldCBpcyB0aGUgb2Zmc2V0IG9mIHRoZQorICogbmV4dCBlbnRyeSB0byBiZSB3cml0dGVuLiAgVGhlIGNvbnRyb2wgc3RydWN0dXJlIGlzIG93bmVkIGFuZAorICogbW9kaWZpZWQgYnkgdGhlIGh5cGVydmlzb3IuICBBIGd1ZXN0IG1heSBub3QgbW9kaWZ5IHRoZSBjb250cm9sCisgKiBzdHJ1Y3R1cmUgY29udGVudHMuICBBdHRlbXB0cyB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiB1bmRlZmluZWQKKyAqIGJlaGF2aW9yIGZvciB0aGUgZ3Vlc3QuCisgKgorICogRWFjaCB0cmFwIHRyYWNlIGJ1ZmZlciBlbnRyeSBpcyBsYXllZCBvdXQgYXMgZm9sbG93czoKKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBodl90cmFwX3RyYWNlX2VudHJ5IHsKKwl1bnNpZ25lZCBjaGFyCXR5cGU7CQkvKiBIeXBlcnZpc29yIG9yIGd1ZXN0IGVudHJ5PwkqLworCXVuc2lnbmVkIGNoYXIJaHBzdGF0ZTsJLyogSHlwZXItcHJpdmlsZWdlZCBzdGF0ZQkqLworCXVuc2lnbmVkIGNoYXIJdGw7CQkvKiBUcmFwIGxldmVsCQkJKi8KKwl1bnNpZ25lZCBjaGFyCWdsOwkJLyogR2xvYmFsIHJlZ2lzdGVyIGxldmVsCSovCisJdW5zaWduZWQgc2hvcnQJdHQ7CQkvKiBUcmFwIHR5cGUJCQkqLworCXVuc2lnbmVkIHNob3J0CXRhZzsJCS8qIEV4dGVuZGVkIHRyYXAgaWRlbnRpZmllcgkqLworCXVuc2lnbmVkIGxvbmcJdHN0YXRlOwkJLyogVHJhcCBzdGF0ZQkJCSovCisJdW5zaWduZWQgbG9uZwl0aWNrOwkJLyogVGljawkJCQkqLworCXVuc2lnbmVkIGxvbmcJdHBjOwkJLyogVHJhcCBQQwkJCSovCisJdW5zaWduZWQgbG9uZwlmMTsJCS8qIEVudHJ5IHNwZWNpZmljCQkqLworCXVuc2lnbmVkIGxvbmcJZjI7CQkvKiBFbnRyeSBzcGVjaWZpYwkJKi8KKwl1bnNpZ25lZCBsb25nCWYzOwkJLyogRW50cnkgc3BlY2lmaWMJCSovCisJdW5zaWduZWQgbG9uZwlmNDsJCS8qIEVudHJ5IHNwZWNpZmljCQkqLworfTsKKyNlbmRpZgorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX1RZUEUJMHgwMAorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX0hQU1RBVEUJMHgwMQorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX1RMCQkweDAyCisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfR0wJCTB4MDMKKyNkZWZpbmUgSFZfVFJBUF9UUkFDRV9FTlRSWV9UVAkJMHgwNAorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX1RBRwkJMHgwNgorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX1RTVEFURQkweDA4CisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfVElDSwkweDEwCisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfVFBDCQkweDE4CisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfRjEJCTB4MjAKKyNkZWZpbmUgSFZfVFJBUF9UUkFDRV9FTlRSWV9GMgkJMHgyOAorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX0YzCQkweDMwCisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfRjQJCTB4MzgKKworLyogVGhlIHR5cGUgZmllbGQgaXMgZW5jb2RlZCBhcyBmb2xsb3dzLiAgKi8KKyNkZWZpbmUgSFZfVFJBUF9UWVBFX1VOREVGCQkweDAwIC8qIEVudHJ5IGNvbnRlbnQgdW5kZWZpbmVkICAgICAqLworI2RlZmluZSBIVl9UUkFQX1RZUEVfSFYJCQkweDAxIC8qIEh5cGVydmlzb3IgdHJhcCBlbnRyeSAgICAgICAqLworI2RlZmluZSBIVl9UUkFQX1RZUEVfR1VFU1QJCTB4ZmYgLyogQWRkZWQgdmlhIHR0cmFjZV9hZGRlbnRyeSgpICovCisKKy8qIHR0cmFjZV9idWZfY29uZigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1RUUkFDRV9CVUZfQ09ORgorICogQVJHMDoJcmVhbCBhZGRyZXNzCisgKiBBUkcxOgludW1iZXIgb2YgZW50cmllcworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgludW1iZXIgb2YgZW50cmllcworICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVJTlZBTAkJU2l6ZSBpcyB0b28gc21hbGwKKyAqCQlFQkFEQUxJR04JUmVhbCBhZGRyZXNzIG5vdCBhbGlnbmVkIG9uIDY0LWJ5dGUgYm91bmRhcnkKKyAqCisgKiBSZXF1ZXN0cyBoeXBlcnZpc29yIHRyYXAgdHJhY2luZyBhbmQgZGVjbGFyZXMgYSB2aXJ0dWFsIENQVSdzIHRyYXAKKyAqIHRyYWNlIGJ1ZmZlciB0byB0aGUgaHlwZXJ2aXNvci4gIFRoZSByZWFsIGFkZHJlc3Mgc3VwcGxpZXMgdGhlIHJlYWwKKyAqIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhcCB0cmFjZSBxdWV1ZSBhbmQgbXVzdCBiZSA2NC1ieXRlIGFsaWduZWQuCisgKiBTcGVjaWZ5aW5nIGEgdmFsdWUgb2YgMCBmb3IgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc2FibGVzIHRyYXAKKyAqIHRyYWNpbmcgZm9yIHRoZSBjYWxsaW5nIHZpcnR1YWwgQ1BVLiAgVGhlIGJ1ZmZlciBhbGxvY2F0ZWQgbXVzdCBiZQorICogc2l6ZWQgZm9yIGEgcG93ZXIgb2YgdHdvIG51bWJlciBvZiA2NC1ieXRlIHRyYXAgdHJhY2UgZW50cmllcyBwbHVzCisgKiBhbiBpbml0aWFsIDY0LWJ5dGUgY29udHJvbCBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBtYXkgYmUgaW52b2tlZCBhbnkgbnVtYmVyIG9mIHRpbWVzIHNvIHRoYXQgYSB2aXJ0dWFsIENQVSBtYXkKKyAqIHJlbG9jYXRlIGEgdHJhcCB0cmFjZSBidWZmZXIgb3IgY3JlYXRlICJzbmFwc2hvdHMiIG9mIGluZm9ybWF0aW9uLgorICoKKyAqIElmIHRoZSByZWFsIGFkZHJlc3MgaXMgaWxsZWdhbCBvciBiYWRseSBhbGlnbmVkLCB0aGVuIHRyYXAgdHJhY2luZworICogaXMgZGlzYWJsZWQgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkLgorICoKKyAqIFVwb24gZmFpbHVyZSB3aXRoIEVJTlZBTCwgdGhpcyBzZXJ2aWNlIGNhbGwgcmV0dXJucyBpbiBSRVQxIHRoZQorICogbWluaW11bSBudW1iZXIgb2YgYnVmZmVyIGVudHJpZXMgcmVxdWlyZWQuICBVcG9uIG90aGVyIGZhaWx1cmVzCisgKiBSRVQxIGlzIHVuZGVmaW5lZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1RUUkFDRV9CVUZfQ09ORgkJMHg5MAorCisvKiB0dHJhY2VfYnVmX2luZm8oKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9UVFJBQ0VfQlVGX0lORk8KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJcmVhbCBhZGRyZXNzCisgKiBSRVQyOglzaXplCisgKiBFUlJPUlM6CU5vbmUgZGVmaW5lZC4KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIGFuZCBsb2NhdGlvbiBvZiB0aGUgcHJldmlvdXNseSBkZWNsYXJlZCB0cmFwLXRyYWNlCisgKiBidWZmZXIuICBJbiB0aGUgZXZlbnQgdGhhdCBubyBidWZmZXIgd2FzIHByZXZpb3VzbHkgZGVmaW5lZCwgb3IgdGhlCisgKiBidWZmZXIgaXMgZGlzYWJsZWQsIHRoaXMgY2FsbCB3aWxsIHJldHVybiBhIHNpemUgb2YgemVybyBieXRlcy4KKyAqLworI2RlZmluZSBIVl9GQVNUX1RUUkFDRV9CVUZfSU5GTwkJMHg5MQorCisvKiB0dHJhY2VfZW5hYmxlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVFRSQUNFX0VOQUJMRQorICogQVJHMDoJZW5hYmxlCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXByZXZpb3VzIGVuYWJsZSBzdGF0ZQorICogRVJST1JTOglFSU5WQUwJCU5vIHRyYXAgdHJhY2UgYnVmZmVyIGN1cnJlbnRseSBkZWZpbmVkCisgKgorICogRW5hYmxlIG9yIGRpc2FibGUgdHJhcCB0cmFjaW5nLCBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyBlbmFibGVkCisgKiBzdGF0ZSBpbiBSRVQxLiAgRnV0dXJlIHN5c3RlbXMgbWF5IGRlZmluZSB2YXJpb3VzIGZsYWdzIGZvciB0aGUKKyAqIGVuYWJsZSBhcmd1bWVudCAoQVJHMCksIGZvciB0aGUgbW9tZW50IGEgZ3Vlc3Qgc2hvdWxkIHBhc3MKKyAqICIodWludDY0X3QpIC0xIiB0byBlbmFibGUsIGFuZCAiKHVpbnQ2NF90KSAwIiB0byBkaXNhYmxlIGFsbAorICogdHJhY2luZyAtIHdoaWNoIHdpbGwgZW5zdXJlIGZ1dHVyZSBjb21wYXRhYmlsaXR5LgorICovCisjZGVmaW5lIEhWX0ZBU1RfVFRSQUNFX0VOQUJMRQkJMHg5MgorCisvKiB0dHJhY2VfZnJlZXplKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVFRSQUNFX0ZSRUVaRQorICogQVJHMDoJZnJlZXplCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXByZXZpb3VzIGZyZWV6ZSBzdGF0ZQorICogRVJST1JTOglFSU5WQUwJCU5vIHRyYXAgdHJhY2UgYnVmZmVyIGN1cnJlbnRseSBkZWZpbmVkCisgKgorICogRnJlZXplIG9yIHVuZnJlZXplIHRyYXAgdHJhY2luZywgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyBmcmVlemUKKyAqIHN0YXRlIGluIFJFVDEuICBBIGd1ZXN0IHNob3VsZCBwYXNzIGEgbm9uLXplcm8gdmFsdWUgdG8gZnJlZXplIGFuZAorICogYSB6ZXJvIHZhbHVlIHRvIHVuZnJlZXplIGFsbCB0cmFjaW5nLiAgVGhlIHJldHVybmVkIHByZXZpb3VzIHN0YXRlCisgKiBpcyAwIGZvciBub3QgZnJvemVuIGFuZCAxIGZvciBmcm96ZW4uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9UVFJBQ0VfRlJFRVpFCQkweDkzCisKKy8qIHR0cmFjZV9hZGRlbnRyeSgpCisgKiBUUkFQOglIVl9UVFJBQ0VfQURERU5UUllfVFJBUAorICogQVJHMDoJdGFnICgxNi1iaXRzKQorICogQVJHMToJZGF0YSB3b3JkIDAKKyAqIEFSRzI6CWRhdGEgd29yZCAxCisgKiBBUkczOglkYXRhIHdvcmQgMgorICogQVJHNDoJZGF0YSB3b3JkIDMKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCU5vIHRyYXAgdHJhY2UgYnVmZmVyIGN1cnJlbnRseSBkZWZpbmVkCisgKgorICogQWRkIGFuIGVudHJ5IHRvIHRoZSB0cmFwIHRyYWNlIGJ1ZmZlci4gIFVwb24gcmV0dXJuIG9ubHkgQVJHMC9SRVQwCisgKiBpcyBtb2RpZmllZCAtIG5vbmUgb2YgdGhlIG90aGVyIHJlZ2lzdGVycyBob2xkaW5nIGFyZ3VtZW50cyBhcmUKKyAqIHZvbGF0aWxlIGFjcm9zcyB0aGlzIGh5cGVydmlzb3Igc2VydmljZS4KKyAqLworCisvKiBDb3JlIGR1bXAgc2VydmljZXMuCisgKgorICogU2luY2UgdGhlIGh5cGVydmlzb3IgdmlyYXVsaXplcyBhbmQgdGh1cyBvYnNjdXJlcyBhIGxvdCBvZiB0aGUKKyAqIHBoeXNpY2FsIG1hY2hpbmUgbGF5b3V0IGFuZCBzdGF0ZSwgdHJhZGl0aW9uYWwgT1MgY3Jhc2ggZHVtcHMgY2FuCisgKiBiZSBkaWZmaWN1bHQgdG8gZGlhZ25vc2UgZXNwZWNpYWxseSB3aGVuIHRoZSBwcm9ibGVtIGlzIGEKKyAqIGNvbmZpZ3VyYXRpb24gZXJyb3Igb2Ygc29tZSBzb3J0LgorICoKKyAqIFRoZSBkdW1wIHNlcnZpY2VzIHByb3ZpZGUgYW4gb3BhcXVlIGJ1ZmZlciBpbnRvIHdoaWNoIHRoZQorICogaHlwZXJ2aXNvciBjYW4gcGxhY2UgaXQncyBpbnRlcm5hbCBzdGF0ZSBpbiBvcmRlciB0byBhc3Npc3QgaW4KKyAqIGRlYnVnZ2luZyBzdWNoIHNpdHVhdGlvbnMuICBUaGUgY29udGVudHMgYXJlIG9wYXF1ZSBhbmQgZXh0cmVtZWx5CisgKiBwbGF0Zm9ybSBhbmQgaHlwZXJ2aXNvciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4gIFRoZSBndWVzdCwgZHVyaW5nCisgKiBhIGNvcmUgZHVtcCwgcmVxdWVzdHMgdGhhdCB0aGUgaHlwZXJ2aXNvciB1cGRhdGUgYW55IGluZm9ybWF0aW9uIGluCisgKiB0aGUgZHVtcCBidWZmZXIgaW4gcHJlcGFyYXRpb24gdG8gYmVpbmcgZHVtcGVkIGFzIHBhcnQgb2YgdGhlCisgKiBkb21haW4ncyBtZW1vcnkgaW1hZ2UuCisgKi8KKworLyogZHVtcF9idWZfdXBkYXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfRFVNUF9CVUZfVVBEQVRFCisgKiBBUkcwOglyZWFsIGFkZHJlc3MKKyAqIEFSRzE6CXNpemUKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJcmVxdWlyZWQgc2l6ZSBvZiBkdW1wIGJ1ZmZlcgorICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVCQURBTElHTglSZWFsIGFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSA2NC1ieXRlCisgKgkJCQlib3VuZGFyeQorICoJCUVJTlZBTAkJU2l6ZSBpcyBub24temVybyBidXQgbGVzcyB0aGFuIG1pbmltdW0gc2l6ZQorICoJCQkJcmVxdWlyZWQKKyAqCQlFTk9UU1VQUE9SVEVECU9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIGN1cnJlbnQgbG9naWNhbAorICoJCQkJZG9tYWluCisgKgorICogRGVjbGFyZSBhIGRvbWFpbiBkdW1wIGJ1ZmZlciB0byB0aGUgaHlwZXJ2aXNvci4gIFRoZSByZWFsIGFkZHJlc3MKKyAqIHByb3ZpZGVkIGZvciB0aGUgZG9tYWluIGR1bXAgYnVmZmVyIG11c3QgYmUgNjQtYnl0ZSBhbGlnbmVkLiAgVGhlCisgKiBzaXplIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgZHVtcCBidWZmZXIgYW5kIG1heSBiZSBsYXJnZXIgdGhhbgorICogdGhlIG1pbmltdW0gc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uICBUaGUKKyAqIGh5cGVydmlzb3Igd2lsbCBmaWxsIHRoZSBkdW1wIGJ1ZmZlciB3aXRoIG9wYXF1ZSBkYXRhLgorICoKKyAqIE5vdGU6IEEgZ3Vlc3QgbWF5IGVsZWN0IHRvIGluY2x1ZGUgZHVtcCBidWZmZXIgY29udGVudHMgYXMgcGFydCBvZiBhIGNyYXNoCisgKiAgICAgICBkdW1wIHRvIGFzc2lzdCB3aXRoIGRlYnVnZ2luZy4gIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhbnkgbnVtYmVyCisgKiAgICAgICBvZiB0aW1lcyBzbyB0aGF0IGEgZ3Vlc3QgbWF5IHJlbG9jYXRlIGEgZHVtcCBidWZmZXIsIG9yIGNyZWF0ZQorICogICAgICAgInNuYXBzaG90cyIgb2YgYW55IGR1bXAtYnVmZmVyIGluZm9ybWF0aW9uLiAgRWFjaCBjYWxsIHRvCisgKiAgICAgICBkdW1wX2J1Zl91cGRhdGUoKSBhdG9taWNhbGx5IGRlY2xhcmVzIHRoZSBuZXcgZHVtcCBidWZmZXIgdG8gdGhlCisgKiAgICAgICBoeXBlcnZpc29yLgorICoKKyAqIEEgc3BlY2lmaWVkIHNpemUgb2YgMCB1bmNvbmZpZ3VyZXMgdGhlIGR1bXAgYnVmZmVyLiAgSWYgdGhlIHJlYWwKKyAqIGFkZHJlc3MgaXMgaWxsZWdhbCBvciBiYWRseSBhbGlnbmVkLCB0aGVuIGFueSBjdXJyZW50bHkgYWN0aXZlIGR1bXAKKyAqIGJ1ZmZlciBpcyBkaXNhYmxlZCBhbmQgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCisgKgorICogSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGNhbGwgZmFpbHMgd2l0aCBFSU5WQUwsIFJFVDEgY29udGFpbnMgdGhlCisgKiBtaW5pbXVtIHNpemUgcmVxdWlyZXMgYnkgdGhlIGh5cGVydmlzb3IgZm9yIGEgdmFsaWQgZHVtcCBidWZmZXIuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9EVU1QX0JVRl9VUERBVEUJCTB4OTQKKworLyogZHVtcF9idWZfaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0RVTVBfQlVGX0lORk8KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJcmVhbCBhZGRyZXNzIG9mIGN1cnJlbnQgZHVtcCBidWZmZXIKKyAqIFJFVDI6CXNpemUgb2YgY3VycmVudCBkdW1wIGJ1ZmZlcgorICogRVJST1JTOglObyBlcnJvcnMgZGVmaW5lZC4KKyAqCisgKiBSZXR1cm4gdGhlIGN1cnJlbnRseSBjb25maWd1cmVzIGR1bXAgYnVmZmVyIGRlc2NyaXB0aW9uLiAgQQorICogcmV0dXJuZWQgc2l6ZSBvZiAwIGJ5dGVzIGluZGljYXRlcyBhbiB1bmRlZmluZWQgZHVtcCBidWZmZXIuICBJbgorICogdGhpcyBjYXNlIHRoZSByZXR1cm4gYWRkcmVzcyBpbiBSRVQxIGlzIHVuZGVmaW5lZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX0RVTVBfQlVGX0lORk8JCTB4OTUKKworLyogRGV2aWNlIGludGVycnVwdCBzZXJ2aWNlcy4KKyAqCisgKiBEZXZpY2UgaW50ZXJydXB0cyBhcmUgYWxsb2NhdGVkIHRvIHN5c3RlbSBidXMgYnJpZGdlcyBieSB0aGUgaHlwZXJ2aXNvciwKKyAqIGFuZCBkZXNjcmliZWQgdG8gT0JQIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uLiAgT0JQIHRoZW4gZGVzY3JpYmVzCisgKiB0aGVzZSBpbnRlcnJ1cHRzIHRvIHRoZSBPUyB2aWEgcHJvcGVydGllcyBpbiB0aGUgZGV2aWNlIHRyZWUuCisgKgorICogVGVybWlub2xvZ3k6CisgKgorICoJY3B1aWQJCVVuaXF1ZSBvcGFxdWUgdmFsdWUgd2hpY2ggcmVwcmVzZW50cyBhIHRhcmdldCBjcHUuCisgKgorICoJZGV2aGFuZGxlCURldmljZSBoYW5kbGUuICBJdCB1bmlxdWVseSBpZGVudGlmaWVzIGEgZGV2aWNlLCBhbmQKKyAqCQkJY29uc2lzdGVzIG9mIHRoZSBsb3dlciAyOC1iaXRzIG9mIHRoZSBoaS1jZWxsIG9mIHRoZQorICoJCQlmaXJzdCBlbnRyeSBvZiB0aGUgZGV2aWNlJ3MgInJlZyIgcHJvcGVydHkgaW4gdGhlCisgKgkJCU9CUCBkZXZpY2UgdHJlZS4KKyAqCisgKglkZXZpbm8JCURldmljZSBpbnRlcnJ1cHQgbnVtYmVyLiAgU3BlY2lmaWVzIHRoZSByZWxhdGl2ZQorICoJCQlpbnRlcnJ1cHQgbnVtYmVyIHdpdGhpbiB0aGUgZGV2aWNlLiAgVGhlIHVuaXF1ZQorICoJCQljb21iaW5hdGlvbiBvZiBkZXZoYW5kbGUgYW5kIGRldmlubyBhcmUgdXNlZCB0bworICoJCQlpZGVudGlmeSBhIHNwZWNpZmljIGRldmljZSBpbnRlcnJ1cHQuCisgKgorICoJCQlOb3RlOiBUaGUgZGV2aW5vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSB2YWx1ZXMgaW4gdGhlCisgKgkJCSAgICAgICJpbnRlcnJ1cHRzIiBwcm9wZXJ0eSBvciAiaW50ZXJydXB0LW1hcCIgcHJvcGVydHkKKyAqCQkJICAgICAgaW4gdGhlIE9CUCBkZXZpY2UgdHJlZSBmb3IgdGhhdCBkZXZpY2UuCisgKgorICoJc3lzaW5vCQlTeXN0ZW0gaW50ZXJydXB0IG51bWJlci4gIEEgNjQtYml0IHVuc2lnbmVkIGludGVyZ2VyCisgKgkJCXJlcHJlc2VudGluZyBhIHVuaXF1ZSBpbnRlcnJ1cHQgd2l0aGluIGEgdmlydHVhbAorICoJCQltYWNoaW5lLgorICoKKyAqCWludHJfc3RhdGUJQSBmbGFnIHJlcHJlc2VudGluZyB0aGUgaW50ZXJydXB0IHN0YXRlIGZvciBhIGdpdmVuCisgKgkJCXN5c2luby4gIFRoZSBzdGF0ZSB2YWx1ZXMgYXJlIGRlZmluZWQgYmVsb3cuCisgKgorICoJaW50cl9lbmFibGVkCUEgZmxhZyByZXByZXNlbnRpbmcgdGhlICdlbmFibGVkJyBzdGF0ZSBmb3IgYSBnaXZlbgorICoJCQlzeXNpbm8uICBUaGUgZW5hYmxlIHZhbHVlcyBhcmUgZGVmaW5lZCBiZWxvdy4KKyAqLworCisjZGVmaW5lIEhWX0lOVFJfU1RBVEVfSURMRQkJMCAvKiBOb3RoaW5nIHBlbmRpbmcgKi8KKyNkZWZpbmUgSFZfSU5UUl9TVEFURV9SRUNFSVZFRAkJMSAvKiBJbnRlcnJ1cHQgcmVjZWl2ZWQgYnkgaGFyZHdhcmUgKi8KKyNkZWZpbmUgSFZfSU5UUl9TVEFURV9ERUxJVkVSRUQJCTIgLyogSW50ZXJydXB0IGRlbGl2ZXJlZCB0byBxdWV1ZSAqLworCisjZGVmaW5lIEhWX0lOVFJfRElTQUJMRUQJCTAgLyogc3lzaW5vIG5vdCBlbmFibGVkICovCisjZGVmaW5lIEhWX0lOVFJfRU5BQkxFRAkJCTEgLyogc3lzaW5vIGVuYWJsZWQgKi8KKworLyogaW50cl9kZXZpbm9fdG9fc3lzaW5vKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfSU5UUl9ERVZJTk8yU1lTSU5PCisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CWRldmlubworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglzeXNpbm8KKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS9kZXZpbm8KKyAqCisgKiBDb252ZXJ0cyBhIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyIG9mIHRoZSBnaXZlbgorICogZGV2aGFuZGxlL2RldmlubyBpbnRvIGEgc3lzdGVtIHNwZWNpZmljIGlubyAoc3lzaW5vKS4KKyAqLworI2RlZmluZSBIVl9GQVNUX0lOVFJfREVWSU5PMlNZU0lOTwkweGEwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9kZXZpbm9fdG9fc3lzaW5vKHVuc2lnbmVkIGxvbmcgZGV2aGFuZGxlLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBkZXZpbm8pOworI2VuZGlmCisKKy8qIGludHJfZ2V0ZW5hYmxlZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0lOVFJfR0VURU5BQkxFRAorICogQVJHMDoJc3lzaW5vCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWludHJfZW5hYmxlZCAoSFZfSU5UUl97RElTQUJMRUQsRU5BQkxFRH0pCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBzeXNpbm8KKyAqCisgKiBSZXR1cm5zIGludGVycnVwdCBlbmFibGVkIHN0YXRlIGluIFJFVDEgZm9yIHRoZSBpbnRlcnJ1cHQgZGVmaW5lZAorICogYnkgdGhlIGdpdmVuIHN5c2luby4KKyAqLworI2RlZmluZSBIVl9GQVNUX0lOVFJfR0VURU5BQkxFRAkJMHhhMQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfaW50cl9nZXRlbmFibGVkKHVuc2lnbmVkIGxvbmcgc3lzaW5vKTsKKyNlbmRpZgorCisvKiBpbnRyX3NldGVuYWJsZWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9JTlRSX1NFVEVOQUJMRUQKKyAqIEFSRzA6CXN5c2lubworICogQVJHMToJaW50cl9lbmFibGVkIChIVl9JTlRSX3tESVNBQkxFRCxFTkFCTEVEfSkKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgc3lzaW5vIG9yIGludHJfZW5hYmxlZCB2YWx1ZQorICoKKyAqIFNldCB0aGUgJ2VuYWJsZWQnIHN0YXRlIG9mIHRoZSBpbnRlcnJ1cHQgc3lzaW5vLgorICovCisjZGVmaW5lIEhWX0ZBU1RfSU5UUl9TRVRFTkFCTEVECQkweGEyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9pbnRyX3NldGVuYWJsZWQodW5zaWduZWQgbG9uZyBzeXNpbm8sIHVuc2lnbmVkIGxvbmcgaW50cl9lbmFibGVkKTsKKyNlbmRpZgorCisvKiBpbnRyX2dldHN0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfSU5UUl9HRVRTVEFURQorICogQVJHMDoJc3lzaW5vCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWludHJfc3RhdGUgKEhWX0lOVFJfU1RBVEVfKikKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHN5c2lubworICoKKyAqIFJldHVybnMgY3VycmVudCBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0IGRlZmluZWQgYnkgdGhlIGdpdmVuIHN5c2luby4KKyAqLworI2RlZmluZSBIVl9GQVNUX0lOVFJfR0VUU1RBVEUJCTB4YTMKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2ludHJfZ2V0c3RhdGUodW5zaWduZWQgbG9uZyBzeXNpbm8pOworI2VuZGlmCisKKy8qIGludHJfc2V0c3RhdGUoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9JTlRSX1NFVFNUQVRFCisgKiBBUkcwOglzeXNpbm8KKyAqIEFSRzE6CWludHJfc3RhdGUgKEhWX0lOVFJfU1RBVEVfKikKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgc3lzaW5vIG9yIGludHJfc3RhdGUgdmFsdWUKKyAqCisgKiBTZXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBpbnRlcnJ1cHQgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBzeXNpbm8KKyAqIHZhbHVlLgorICoKKyAqIE5vdGU6IFNldHRpbmcgdGhlIHN0YXRlIHRvIEhWX0lOVFJfU1RBVEVfSURMRSBjbGVhcnMgYW55IHBlbmRpbmcKKyAqICAgICAgIGludGVycnVwdCBmb3Igc3lzaW5vLgorICovCisjZGVmaW5lIEhWX0ZBU1RfSU5UUl9TRVRTVEFURQkJMHhhNAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfaW50cl9zZXRzdGF0ZSh1bnNpZ25lZCBsb25nIHN5c2lubywgdW5zaWduZWQgbG9uZyBpbnRyX3N0YXRlKTsKKyNlbmRpZgorCisvKiBpbnRyX2dldHRhcmdldCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0lOVFJfR0VUVEFSR0VUCisgKiBBUkcwOglzeXNpbm8KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJY3B1aWQKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHN5c2lubworICoKKyAqIFJldHVybnMgQ1BVIHRoYXQgaXMgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIHRoZSBpbnRlcnJ1cHQgZGVmaW5lZCBieQorICogdGhlIGdpdmVuIHN5c2luby4gIFRoZSBDUFUgdmFsdWUgcmV0dXJuZWQgaXMgdW5kZWZpbmVkIGlmIHRoZSB0YXJnZXQKKyAqIGhhcyBub3QgYmVlbiBzZXQgdmlhIGludHJfc2V0dGFyZ2V0KCkuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9JTlRSX0dFVFRBUkdFVAkJMHhhNQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfaW50cl9nZXR0YXJnZXQodW5zaWduZWQgbG9uZyBzeXNpbm8pOworI2VuZGlmCisKKy8qIGludHJfc2V0dGFyZ2V0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfSU5UUl9TRVRUQVJHRVQKKyAqIEFSRzA6CXN5c2lubworICogQVJHMToJY3B1aWQKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgc3lzaW5vCisgKgkJRU5PQ1BVCQlJbnZhbGlkIGNwdWlkCisgKgorICogU2V0IHRoZSB0YXJnZXQgQ1BVIGZvciB0aGUgaW50ZXJydXB0IGRlZmluZWQgYnkgdGhlIGdpdmVuIHN5c2luby4KKyAqLworI2RlZmluZSBIVl9GQVNUX0lOVFJfU0VUVEFSR0VUCQkweGE2CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9pbnRyX3NldHRhcmdldCh1bnNpZ25lZCBsb25nIHN5c2lubywgdW5zaWduZWQgbG9uZyBjcHVpZCk7CisjZW5kaWYKKworLyogdmludHJfZ2V0X2Nvb2tpZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1ZJTlRSX0dFVF9DT09LSUUKKyAqIEFSRzA6CWRldmljZSBoYW5kbGUKKyAqIEFSRzE6CWRldmljZSBpbm8KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJY29va2llCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9WSU5UUl9HRVRfQ09PS0lFCTB4YTcKKworLyogdmludHJfc2V0X2Nvb2tpZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1ZJTlRSX1NFVF9DT09LSUUKKyAqIEFSRzA6CWRldmljZSBoYW5kbGUKKyAqIEFSRzE6CWRldmljZSBpbm8KKyAqIEFSRzI6CWNvb2tpZQorICogUkVUMDoJc3RhdHVzCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9WSU5UUl9TRVRfQ09PS0lFCTB4YTgKKworLyogdmludHJfZ2V0X3ZhbGlkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfR0VUX1ZBTElECisgKiBBUkcwOglkZXZpY2UgaGFuZGxlCisgKiBBUkcxOglkZXZpY2UgaW5vCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXZhbGlkIHN0YXRlCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9WSU5UUl9HRVRfVkFMSUQJCTB4YTkKKworLyogdmludHJfc2V0X3ZhbGlkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfU0VUX1ZBTElECisgKiBBUkcwOglkZXZpY2UgaGFuZGxlCisgKiBBUkcxOglkZXZpY2UgaW5vCisgKiBBUkcyOgl2YWxpZCBzdGF0ZQorICogUkVUMDoJc3RhdHVzCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9WSU5UUl9TRVRfVkFMSUQJCTB4YWEKKworLyogdmludHJfZ2V0X3N0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfR0VUX1NUQVRFCisgKiBBUkcwOglkZXZpY2UgaGFuZGxlCisgKiBBUkcxOglkZXZpY2UgaW5vCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXN0YXRlCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9WSU5UUl9HRVRfU1RBVEUJCTB4YWIKKworLyogdmludHJfc2V0X3N0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfU0VUX1NUQVRFCisgKiBBUkcwOglkZXZpY2UgaGFuZGxlCisgKiBBUkcxOglkZXZpY2UgaW5vCisgKiBBUkcyOglzdGF0ZQorICogUkVUMDoJc3RhdHVzCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9WSU5UUl9TRVRfU1RBVEUJCTB4YWMKKworLyogdmludHJfZ2V0X3RhcmdldCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1ZJTlRSX0dFVF9UQVJHRVQKKyAqIEFSRzA6CWRldmljZSBoYW5kbGUKKyAqIEFSRzE6CWRldmljZSBpbm8KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJY3B1aWQKKyAqLworI2RlZmluZSBIVl9GQVNUX1ZJTlRSX0dFVF9UQVJHRVQJMHhhZAorCisvKiB2aW50cl9zZXRfdGFyZ2V0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfU0VUX1RBUkdFVAorICogQVJHMDoJZGV2aWNlIGhhbmRsZQorICogQVJHMToJZGV2aWNlIGlubworICogQVJHMjoJY3B1aWQKKyAqIFJFVDA6CXN0YXR1cworICovCisjZGVmaW5lIEhWX0ZBU1RfVklOVFJfU0VUX1RBUkdFVAkweGFlCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl92aW50cl9nZXRfY29va2llKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGV2X2lubywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmNvb2tpZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl92aW50cl9zZXRfY29va2llKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGV2X2lubywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgY29va2llKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3ZpbnRyX2dldF92YWxpZCh1bnNpZ25lZCBsb25nIGRldl9oYW5kbGUsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGV2X2lubywKKwkJCQkJICAgdW5zaWduZWQgbG9uZyAqdmFsaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdmludHJfc2V0X3ZhbGlkKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbGlkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3ZpbnRyX2dldF9zdGF0ZSh1bnNpZ25lZCBsb25nIGRldl9oYW5kbGUsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGV2X2lubywKKwkJCQkJICAgdW5zaWduZWQgbG9uZyAqc3RhdGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdmludHJfc2V0X3N0YXRlKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXRlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3ZpbnRyX2dldF90YXJnZXQodW5zaWduZWQgbG9uZyBkZXZfaGFuZGxlLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqY3B1aWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdmludHJfc2V0X3RhcmdldCh1bnNpZ25lZCBsb25nIGRldl9oYW5kbGUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGRldl9pbm8sCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGNwdWlkKTsKKyNlbmRpZgorCisvKiBQQ0kgSU8gc2VydmljZXMuCisgKgorICogU2VlIHRoZSB0ZXJtaW5vbG9neSBkZXNjcmlwdGlvbnMgaW4gdGhlIGRldmljZSBpbnRlcnJ1cHQgc2VydmljZXMKKyAqIHNlY3Rpb24gYWJvdmUgYXMgdGhvc2UgYXBwbHkgaGVyZSB0b28uICBIZXJlIGFyZSB0ZXJtaW5vbG9neQorICogZGVmaW5pdGlvbnMgc3BlY2lmaWMgdG8gdGhlc2UgUENJIElPIHNlcnZpY2VzOgorICoKKyAqCXRzYm51bQkJVFNCIG51bWJlci4gIEluZGVudGlmaWVzIHdoaWNoIGlvLXRzYiBpcyB1c2VkLgorICoJCQlGb3IgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uLCB0c2JudW0KKyAqCQkJbXVzdCBiZSB6ZXJvLgorICoKKyAqCXRzYmluZGV4CVRTQiBpbmRleC4gIElkZW50aWZpZXMgd2hpY2ggZW50cnkgaW4gdGhlIFRTQgorICoJCQlpcyB1c2VkLiAgVGhlIGZpcnN0IGVudHJ5IGlzIHplcm8uCisgKgorICoJdHNiaWQJCUEgNjQtYml0IGFsaWduZWQgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnMKKyAqCQkJYSB0c2JudW0gYW5kIGEgdHNiaW5kZXguICBCaXRzIDYzOjMyIGNvbnRhaW4gdGhlCisgKgkJCXRzYm51bSBhbmQgYml0cyAzMTowMCBjb250YWluIHRoZSB0c2JpbmRleC4KKyAqCisgKgkJCVVzZSB0aGUgSFZfUENJX1RTQklEKCkgbWFjcm8gdG8gY29uc3RydWN0IHN1Y2gKKyAqIAkJCXZhbHVlcy4KKyAqCisgKglpb19hdHRyaWJ1dGVzCUlPIGF0dHJpYnV0ZXMgZm9yIElPTU1VIG1hcHBpbmdzLiAgT25lIG9mIG1vcmUKKyAqCQkJb2YgdGhlIGF0dHJpdGJ1dGUgYml0cyBhcmUgc3RvcmVzIGluIGEgNjQtYml0CisgKgkJCXZhbHVlLiAgVGhlIHZhbHVlcyBhcmUgZGVmaW5lZCBiZWxvdy4KKyAqCisgKglyX2FkZHIJCTY0LWJpdCByZWFsIGFkZHJlc3MKKyAqCisgKglwY2lfZGV2aWNlCVBDSSBkZXZpY2UgYWRkcmVzcy4gIEEgUENJIGRldmljZSBhZGRyZXNzIGlkZW50aWZpZXMKKyAqCQkJYSBzcGVjaWZpYyBkZXZpY2Ugb24gYSBzcGVjaWZpYyBQQ0kgYnVzIHNlZ21lbnQuCisgKgkJCUEgUENJIGRldmljZSBhZGRyZXNzIGlhIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIKKyAqCQkJd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAqCisgKgkJCQkwMDAwMDAwMC5iYmJiYmJiYi5kZGRkZGZmZi4wMDAwMDAwMAorICoKKyAqCQkJVXNlIHRoZSBIVl9QQ0lfREVWSUNFX0JVSUxEKCkgbWFjcm8gdG8gY29uc3RydWN0CisgKgkJCXN1Y2ggdmFsdWVzLgorICoKKyAqCXBjaV9jb25maWdfb2Zmc2V0CisgKgkJCVBDSSBjb25maWd1cmVhdGlvbiBzcGFjZSBvZmZzZXQuICBGb3IgY29udmVudGlvbmFsCisgKgkJCVBDSSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LiAgRm9yIGV4dGVuZGVkCisgKgkJCWNvbmZpZ3VyYXRpb24gc3BhY2UsIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCA0MDk1LgorICoKKyAqCQkJTm90ZTogRm9yIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzc2VzLCB0aGUgb2Zmc2V0CisgKgkJCSAgICAgIG11c3QgYmUgYWxpZ25lZCB0byB0aGUgYWNjZXNzIHNpemUuCisgKgorICoJZXJyb3JfZmxhZwlBIHJldHVybiB2YWx1ZSB3aGljaCBzcGVjaWZpZXMgaWYgdGhlIGFjdGlvbiBzdWNjZWVkZWQKKyAqCQkJb3IgZmFpbGVkLiAgMCBtZWFucyBubyBlcnJvciwgbm9uLTAgbWVhbnMgc29tZSBlcnJvcgorICoJCQlvY2N1cnJlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZSBzZXJ2aWNlLgorICoKKyAqCWlvX3N5bmNfZGlyZWN0aW9uCisgKgkJCURpcmVjdGlvbiBkZWZpbml0aW9uIGZvciBwY2lfZG1hX3N5bmMoKSwgZGVmaW5lZAorICoJCQliZWxvdyBpbiBIVl9QQ0lfU1lOQ18qLgorICoKKyAqCWlvX3BhZ2VfbGlzdAlBIGxpc3Qgb2YgaW9fcGFnZV9hZGRyZXNzZXMsIGFuIGlvX3BhZ2VfYWRkcmVzcyBpcworICoJCQlhIHJlYWwgYWRkcmVzcy4KKyAqCisgKglpb19wYWdlX2xpc3RfcAlBIHBvaW50ZXIgdG8gYW4gaW9fcGFnZV9saXN0LgorICoKKyAqCSJzaXplIGJhc2VkIGJ5dGUgc3dhcCIgLSBTb21lIGZ1bmN0aW9ucyBkbyBzaXplIGJhc2VkIGJ5dGUgc3dhcHBpbmcKKyAqCQkJCSB3aGljaCBhbGxvd3Mgc3cgdG8gYWNjZXNzIHBvaW50ZXJzIGFuZAorICoJCQkJIGNvdW50ZXJzIGluIG5hdGl2ZSBmb3JtIHdoZW4gdGhlIHByb2Nlc3NvcgorICoJCQkJIG9wZXJhdGVzIGluIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGUKKyAqCQkJCSBJTyBidXMuICBTaXplLWJhc2VkIGJ5dGUgc3dhcHBpbmcgY29udmVydHMgYQorICoJCQkJIG11bHRpLWJ5dGUgZmllbGQgYmV0d2VlbiBiaWctZW5kaWFuIGFuZAorICoJCQkJIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorICovCisKKyNkZWZpbmUgSFZfUENJX01BUF9BVFRSX1JFQUQJCTB4MDEKKyNkZWZpbmUgSFZfUENJX01BUF9BVFRSX1dSSVRFCQkweDAyCisKKyNkZWZpbmUgSFZfUENJX0RFVklDRV9CVUlMRChiLGQsZikJXAorCSgoKChiKSAmIDB4ZmYpIDw8IDE2KSB8IFwKKwkgKCgoZCkgJiAweDFmKSA8PCAxMSkgfCBcCisJICgoKGYpICYgMHgwNykgPDwgIDgpKQorCisjZGVmaW5lIEhWX1BDSV9UU0JJRChfX3RzYl9udW0sIF9fdHNiX2luZGV4KSBcCisJKCgoKHU2NCkoX190c2JfbnVtKSkgPDwgMzJVTCkgfCAoKHU2NCkoX190c2JfaW5kZXgpKSkKKworI2RlZmluZSBIVl9QQ0lfU1lOQ19GT1JfREVWSUNFCQkweDAxCisjZGVmaW5lIEhWX1BDSV9TWU5DX0ZPUl9DUFUJCTB4MDIKKworLyogcGNpX2lvbW11X21hcCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9JT01NVV9NQVAKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJdHNiaWQKKyAqIEFSRzI6CSN0dGVzCisgKiBBUkczOglpb19hdHRyaWJ1dGVzCisgKiBBUkc0Oglpb19wYWdlX2xpc3RfcAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgkjdHRlcyBtYXBwZWQKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS90c2JudW0vdHNiaW5kZXgvaW9fYXR0cmlidXRlcworICoJCUVCQURBTElHTglJbXByb3Blcmx5IGFsaWduZWQgcmVhbCBhZGRyZXNzCisgKgkJRU5PUkFERFIJSW52YWxpZCByZWFsIGFkZHJlc3MKKyAqCisgKiBDcmVhdGUgSU9NTVUgbWFwcGluZ3MgaW4gdGhlIHN1bjR2IGRldmljZSBkZWZpbmVkIGJ5IHRoZSBnaXZlbgorICogZGV2aGFuZGxlLiAgVGhlIG1hcHBpbmdzIGFyZSBjcmVhdGVkIGluIHRoZSBUU0IgZGVmaW5lZCBieSB0aGUKKyAqIHRzYm51bSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHRzYmlkLiAgVGhlIGZpcnN0IG1hcHBpbmcgaXMgY3JlYXRlZAorICogaW4gdGhlIFRTQiBpIG5kZXggZGVmaW5lZCBieSB0aGUgdHNiaW5kZXggY29tcG9uZW50IG9mIHRoZSBnaXZlbiB0c2JpZC4KKyAqIFRoZSBjYWxsIGNyZWF0ZXMgdXAgdG8gI3R0ZXMgbWFwcGluZ3MsIHRoZSBmaXJzdCBvbmUgYXQgdHNibnVtLCB0c2JpbmRleCwKKyAqIHRoZSBzZWNvbmQgYXQgdHNibnVtLCB0c2JpbmRleCArIDEsIGV0Yy4KKyAqCisgKiBBbGwgbWFwcGluZ3MgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGJ5IHRoZSBpb19hdHRyaWJ1dGVzCisgKiBhcmd1bWVudC4gIFRoZSBwYWdlIG1hcHBpbmcgYWRkcmVzc2VzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGlvX3BhZ2VfbGlzdAorICogZGVmaW5lZCBieSB0aGUgZ2l2ZW4gaW9fcGFnZV9saXN0X3AsIHdoaWNoIGlzIGEgcG9pbnRlciB0byB0aGUgaW9fcGFnZV9saXN0LgorICogVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBpb19wYWdlX2xpc3QgaXMgdGhlIGFkZHJlc3MgZm9yIHRoZSBmaXJzdCBpb3R0ZSwgdGhlCisgKiAybmQgZm9yIHRoZSAybmQgaW90dGUsIGFuZCBzbyBvbi4KKyAqCisgKiBFYWNoIGlvX3BhZ2VfYWRkcmVzcyBpbiB0aGUgaW9fcGFnZV9saXN0IG11c3QgYmUgYXBwcm9wcmlhdGVseSBhbGlnbmVkLgorICogI3R0ZXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4gIEZvciB0aGlzIHZlcnNpb24gb2YgdGhlIHNwZWMsIHRoZSB0c2JudW0KKyAqIGNvbXBvbmVudCBvZiB0aGUgZ2l2ZW4gdHNiaWQgbXVzdCBiZSB6ZXJvLgorICoKKyAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgbWFwcGluZ3MgY3JlYXRlcywgd2hpY2ggbWF5IGJlIGxlc3MgdGhhbgorICogb3IgZXF1YWwgdG8gdGhlIGFyZ3VtZW50ICN0dGVzLiAgSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSB3aGljaAorICogaXMgbGVzcyB0aGFuIHRoZSAjdHRlcywgdGhlIGNhbGxlciBtYXkgY29udGludXMgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aAorICogYW4gdXBkYXRlZCB0c2JpZCwgI3R0ZXMsIGlvX3BhZ2VfbGlzdF9wIGFyZ3VtZW50cyB1bnRpbCBhbGwgcGFnZXMgYXJlCisgKiBtYXBwZWQuCisgKgorICogTm90ZTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBpbXBseSBhbiBpb3R0ZSBjYWNoZSBmbHVzaC4gIFRoZSBndWVzdCBtdXN0CisgKiAgICAgICBkZW1hcCBhbiBlbnRyeSBiZWZvcmUgcmUtbWFwcGluZyBpdC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9JT01NVV9NQVAJCTB4YjAKKworLyogcGNpX2lvbW11X2RlbWFwKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX0lPTU1VX0RFTUFQCisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CXRzYmlkCisgKiBBUkcyOgkjdHRlcworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgkjdHRlcyBkZW1hcHBlZAorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlL3RzYm51bS90c2JpbmRleAorICoKKyAqIERlbWFwIGFuZCBmbHVzaCBJT01NVSBtYXBwaW5ncyBpbiB0aGUgZGV2aWNlIGRlZmluZWQgYnkgdGhlIGdpdmVuCisgKiBkZXZoYW5kbGUuICBEZW1hcHMgdXAgdG8gI3R0ZXMgZW50cmllcyBpbiB0aGUgVFNCIGRlZmluZWQgYnkgdGhlIHRzYm51bQorICogY29tcG9uZW50IG9mIHRoZSBnaXZlbiB0c2JpZCwgc3RhcnRpbmcgYXQgdGhlIFRTQiBpbmRleCBkZWZpbmVkIGJ5IHRoZQorICogdHNiaW5kZXggY29tcG9uZW50IG9mIHRoZSBnaXZlbiB0c2JpZC4KKyAqCisgKiBGb3IgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzcGVjLCB0aGUgdHNibnVtIG9mIHRoZSBnaXZlbiB0c2JpZCBtdXN0IGJlIHplcm8uCisgKiAjdHRlcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorICoKKyAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgdHRlcyBkZW1hcHBlZCwgd2hpY2ggbWF5IGJlIGxlc3MgdGhhbiBvciBlcXVhbAorICogdG8gdGhlIGFyZ3VtZW50ICN0dGVzLiAgSWYgI3R0ZXMgZGVtYXBwZWQgaXMgbGVzcyB0aGFuICN0dGVzLCB0aGUgY2FsbGVyCisgKiBtYXkgY29udGludWUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdXBkYXRlZCB0c2JpZCBhbmQgI3R0ZXMgYXJndW1lbnRzCisgKiB1bnRpbCBhbGwgcGFnZXMgYXJlIGRlbWFwcGVkLgorICoKKyAqIE5vdGU6IEVudHJpZXMgZG8gbm90IGhhdmUgdG8gYmUgbWFwcGVkIHRvIGJlIGRlbWFwcGVkLiAgQSBkZW1hcCBvZiBhbgorICogICAgICAgdW5tYXBwZWQgcGFnZSB3aWxsIGZsdXNoIHRoZSBlbnRyeSBmcm9tIHRoZSB0dGUgY2FjaGUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfSU9NTVVfREVNQVAJCTB4YjEKKworLyogcGNpX2lvbW11X2dldG1hcCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9JT01NVV9HRVRNQVAKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJdHNiaWQKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJaW9fYXR0cmlidXRlcworICogUkVUMjoJcmVhbCBhZGRyZXNzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUvdHNibnVtL3RzYmluZGV4CisgKgkJRU5PTUFQCQlNYXBwaW5nIGlzIG5vdCB2YWxpZCwgbm8gdHJhbnNsYXRpb24gZXhpc3RzCisgKgorICogUmVhZCBhbmQgcmV0dXJuIHRoZSBtYXBwaW5nIGluIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUKKyAqIGFuZCB0c2JpZC4gIElmIHN1Y2Nlc3NmdWwsIHRoZSBpb19hdHRyaWJ1dGVzIHNoYWxsIGJlIHJldHVybmVkIGluIFJFVDEKKyAqIGFuZCB0aGUgcGFnZSBhZGRyZXNzIG9mIHRoZSBtYXBwaW5nIHNoYWxsIGJlIHJldHVybmVkIGluIFJFVDIuCisgKgorICogRm9yIHRoaXMgdmVyc2lvbiBvZiB0aGUgc3BlYywgdGhlIHRzYm51bSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHRzYmlkCisgKiBtdXN0IGJlIHplcm8uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfSU9NTVVfR0VUTUFQCTB4YjIKKworLyogcGNpX2lvbW11X2dldGJ5cGFzcygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9JT01NVV9HRVRCWVBBU1MKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJcmVhbCBhZGRyZXNzCisgKiBBUkcyOglpb19hdHRyaWJ1dGVzCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWlvX2FkZHIKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS9pb19hdHRyaWJ1dGVzCisgKgkJRU5PUkFERFIJSW52YWxpZCByZWFsIGFkZHJlc3MKKyAqCQlFTk9UU1VQUE9SVEVECUZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDcmVhdGUgYSAic3BlY2lhbCIgbWFwcGluZyBpbiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlLAorICogZm9yIHRoZSBnaXZlbiByZWFsIGFkZHJlc3MgYW5kIGF0dHJpYnV0ZXMuICBSZXR1cm4gdGhlIElPIGFkZHJlc3MgaW4gUkVUMQorICogaWYgc3VjY2Vzc2Z1bC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9JT01NVV9HRVRCWVBBU1MJMHhiMworCisvKiBwY2lfY29uZmlnX2dldCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9DT05GSUdfR0VUCisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CXBjaV9kZXZpY2UKKyAqIEFSRzI6CXBjaV9jb25maWdfb2Zmc2V0CisgKiBBUkczOglzaXplCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWVycm9yX2ZsYWcKKyAqIFJFVDI6CWRhdGEKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS9wY2lfZGV2aWNlL29mZnNldC9zaXplCisgKgkJRUJBREFMSUdOCXBjaV9jb25maWdfb2Zmc2V0IG5vdCBzaXplIGFsaWduZWQKKyAqCQlFTk9BQ0NFU1MJQWNjZXNzIHRvIHRoaXMgb2Zmc2V0IGlzIG5vdCBwZXJtaXR0ZWQKKyAqCisgKiBSZWFkIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGZvciB0aGUgYWRhcHRlciBkZXNjcmliZWQgYnkgdGhlIGdpdmVuCisgKiBkZXZoYW5kbGUuICBSZWFkIHNpemUgKDEsIDIsIG9yIDQpIGJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgZ2l2ZW4KKyAqIHBjaV9kZXZpY2UsIGF0IHBjaV9jb25maWdfb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2aWNlJ3MKKyAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuICBJZiB0aGVyZSB3YXMgbm8gZXJyb3IsIFJFVDEgaXMgc2V0IHRvIHplcm8gYW5kCisgKiBSRVQyIGlzIHNldCB0byB0aGUgZGF0YSByZWFkLiAgSW5zaWduaWZpY2FudCBiaXRzIGluIFJFVDIgYXJlIG5vdAorICogZ3VhcmVudGVlZCB0byBoYXZlIGFueSBzcGVjaWZpYyB2YWx1ZSBhbmQgdGhlcmVmb3JlIG11c3QgYmUgaWdub3JlZC4KKyAqCisgKiBUaGUgZGF0YSByZXR1cm5lZCBpbiBSRVQyIGlzIHNpemUgYmFzZWQgYnl0ZSBzd2FwcGVkLgorICoKKyAqIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIHJlYWQsIHNldCBSRVQxIHRvIGEgbm9uLXplcm8gdmFsdWUuICBUaGUKKyAqIGdpdmVuIHBjaV9jb25maWdfb2Zmc2V0IG11c3QgYmUgJ3NpemUnIGFsaWduZWQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfQ09ORklHX0dFVAkJMHhiNAorCisvKiBwY2lfY29uZmlnX3B1dCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9DT05GSUdfUFVUCisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CXBjaV9kZXZpY2UKKyAqIEFSRzI6CXBjaV9jb25maWdfb2Zmc2V0CisgKiBBUkczOglzaXplCisgKiBBUkc0OglkYXRhCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWVycm9yX2ZsYWcKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS9wY2lfZGV2aWNlL29mZnNldC9zaXplCisgKgkJRUJBREFMSUdOCXBjaV9jb25maWdfb2Zmc2V0IG5vdCBzaXplIGFsaWduZWQKKyAqCQlFTk9BQ0NFU1MJQWNjZXNzIHRvIHRoaXMgb2Zmc2V0IGlzIG5vdCBwZXJtaXR0ZWQKKyAqCisgKiBXcml0ZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgdGhlIGFkYXB0ZXIgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbgorICogZGV2aGFuZGxlLiAgV3JpdGUgc2l6ZSAoMSwgMiwgb3IgNCkgYnl0ZXMgb2YgZGF0YSBpbiBhIHNpbmdsZSBvcGVyYXRpb24sCisgKiBhdCBwY2lfY29uZmlnX29mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRldmljZSdzIGNvbmZpZ3VyYXRpb24KKyAqIHNwYWNlLiAgVGhlIGRhdGEgYXJndW1lbnQgY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byBjb25maWd1cmF0aW9uCisgKiBzcGFjZS4gIFByaW9yIHRvIHdyaXRpbmcsIHRoZSBkYXRhIGlzIHNpemUgYmFzZWQgYnl0ZSBzd2FwcGVkLgorICoKKyAqIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIHdyaXRlIGFjY2VzcywgZG8gbm90IGdlbmVyYXRlIGFuIGVycm9yCisgKiByZXBvcnQsIGRvIHNldCBSRVQxIHRvIGEgbm9uLXplcm8gdmFsdWUuICBPdGhlcndpc2UgUkVUMSBpcyB6ZXJvLgorICogVGhlIGdpdmVuIHBjaV9jb25maWdfb2Zmc2V0IG11c3QgYmUgJ3NpemUnIGFsaWduZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBwZXJtaXR0ZWQgdG8gcmVhZCBmcm9tIG9mZnNldCB6ZXJvIGluIHRoZSBjb25maWd1cmF0aW9uCisgKiBzcGFjZSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIHBjaV9kZXZpY2UgaWYgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZQorICogd3JpdGUgYWNjZXNzIHRvIGNvbmZpZyBzcGFjZSBjb21wbGV0ZXMuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfQ09ORklHX1BVVAkJMHhiNQorCisvKiBwY2lfcGVlaygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9QRUVLCisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CXJlYWwgYWRkcmVzcworICogQVJHMjoJc2l6ZQorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgllcnJvcl9mbGFnCisgKiBSRVQyOglkYXRhCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3Igc2l6ZQorICoJCUVCQURBTElHTglJbXByb3Blcmx5IGFsaWduZWQgcmVhbCBhZGRyZXNzCisgKgkJRU5PUkFERFIJQmFkIHJlYWwgYWRkcmVzcworICoJCUVOT0FDQ0VTUwlHdWVzdCBhY2Nlc3MgcHJvaGliaXRlZAorICoKKyAqIEF0dGVtcHQgdG8gcmVhZCB0aGUgSU8gYWRkcmVzcyBnaXZlbiBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlLCByZWFsIGFkZHJlc3MsCisgKiBhbmQgc2l6ZS4gIFNpemUgbXVzdCBiZSAxLCAyLCA0LCBvciA4LiAgVGhlIHJlYWQgaXMgcGVyZm9ybWVkIGFzIGEgc2luZ2xlCisgKiBhY2Nlc3Mgb3BlcmF0aW9uIHVzaW5nIHRoZSBnaXZlbiBzaXplLiAgSWYgYW4gZXJyb3Igb2NjdXJzIHdoZW4gcmVhZGluZworICogZnJvbSB0aGUgZ2l2ZW4gbG9jYXRpb24sIGRvIG5vdCBnZW5lcmF0ZSBhbiBlcnJvciByZXBvcnQsIGJ1dCByZXR1cm4gYQorICogbm9uLXplcm8gdmFsdWUgaW4gUkVUMS4gIElmIHRoZSByZWFkIHdhcyBzdWNjZXNzZnVsLCByZXR1cm4gemVybyBpbiBSRVQxCisgKiBhbmQgcmV0dXJuIHRoZSBhY3R1YWwgZGF0YSByZWFkIGluIFJFVDIuICBUaGUgZGF0YSByZXR1cm5lZCBpcyBzaXplIGJhc2VkCisgKiBieXRlIHN3YXBwZWQuCisgKgorICogTm9uLXNpZ25pZmljYW50IGJpdHMgaW4gUkVUMiBhcmUgbm90IGd1YXJlbnRlZWQgdG8gaGF2ZSBhbnkgc3BlY2lmaWMgdmFsdWUKKyAqIGFuZCB0aGVyZWZvcmUgbXVzdCBiZSBpZ25vcmVkLiAgSWYgUkVUMSBpcyByZXR1cm5lZCBhcyBub24temVybywgdGhlIGRhdGEKKyAqIHZhbHVlIGlzIG5vdCBndWFyZW50ZWVkIHRvIGhhdmUgYW55IHNwZWNpZmljIHZhbHVlIGFuZCBzaG91bGQgYmUgaWdub3JlZC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHJlYWQgZnJvbSB0aGUgZ2l2ZW4gZGV2aGFuZGxlLCByZWFsCisgKiBhZGRyZXNzLCB3aGljaCBtdXN0IGJlIGFuIElPIGFkZHJlc3MuICBUaGUgYXJndW1lbnQgcmVhbCBhZGRyZXNzIG11c3QgYmUgYQorICogc2l6ZSBhbGlnbmVkIGFkZHJlc3MuCisgKgorICogVGhlIGh5cGVydmlzb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJsb2NrIGFjY2VzcyB0byBhbnkKKyAqIElPIGFkZHJlc3MgdGhhdCB0aGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBleHBsaWNpdCBwZXJtaXNzaW9uIHRvIGFjY2Vzcy4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9QRUVLCQkweGI2CisKKy8qIHBjaV9wb2tlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX1BPS0UKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJcmVhbCBhZGRyZXNzCisgKiBBUkcyOglzaXplCisgKiBBUkczOglkYXRhCisgKiBBUkc0OglwY2lfZGV2aWNlCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWVycm9yX2ZsYWcKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSwgc2l6ZSwgb3IgcGNpX2RldmljZQorICoJCUVCQURBTElHTglJbXByb3Blcmx5IGFsaWduZWQgcmVhbCBhZGRyZXNzCisgKgkJRU5PUkFERFIJQmFkIHJlYWwgYWRkcmVzcworICoJCUVOT0FDQ0VTUwlHdWVzdCBhY2Nlc3MgcHJvaGliaXRlZAorICoJCUVOT1RTVVBQT1JURUQJRnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBieSBpbXBsZW1lbnRhdGlvbgorICoKKyAqIEF0dGVtcHQgdG8gd3JpdGUgZGF0YSB0byB0aGUgSU8gYWRkcmVzcyBnaXZlbiBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlLAorICogcmVhbCBhZGRyZXNzLCBhbmQgc2l6ZS4gIFNpemUgbXVzdCBiZSAxLCAyLCA0LCBvciA4LiAgVGhlIHdyaXRlIGlzCisgKiBwZXJmb3JtZWQgYXMgYSBzaW5nbGUgYWNjZXNzIG9wZXJhdGlvbiB1c2luZyB0aGUgZ2l2ZW4gc2l6ZS4gUHJpb3IgdG8KKyAqIHdyaXRpbmcgdGhlIGRhdGEgaXMgc2l6ZSBiYXNlZCBzd2FwcGVkLgorICoKKyAqIElmIGFuIGVycm9yIG9jY3VycyB3aGVuIHdyaXRpbmcgdG8gdGhlIGdpdmVuIGxvY2F0aW9uLCBkbyBub3QgZ2VuZXJhdGUgYW4KKyAqIGVycm9yIHJlcG9ydCwgYnV0IHJldHVybiBhIG5vbi16ZXJvIHZhbHVlIGluIFJFVDEuICBJZiB0aGUgd3JpdGUgd2FzCisgKiBzdWNjZXNzZnVsLCByZXR1cm4gemVybyBpbiBSRVQxLgorICoKKyAqIHBjaV9kZXZpY2UgZGVzY3JpYmVzIHRoZSBjb25maWd1cmF0aW9uIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBiZWluZworICogd3JpdHRlbiB0by4gIFRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgc2FmZWx5IHJlYWQgZnJvbSBvZmZzZXQgMCB3aXRoCisgKiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSBvZiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSBkZXZoYW5kbGUgYW5kCisgKiBwY2lfZGV2aWNlIGluIG9yZGVyIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSB3cml0ZSBwb3J0aW9uIG9mIHRoZSBvcGVyYXRpb24KKyAqIGNvbXBsZXRlcworICoKKyAqIEFueSBlcnJvciB0aGF0IG9jY3VycyBkdWUgdG8gdGhlIHJlYWQgc2hhbGwgYmUgcmVwb3J0ZWQgdXNpbmcgdGhlIG5vcm1hbAorICogZXJyb3IgcmVwb3J0aW5nIG1lY2hhbmlzbXMgLi4gdGhlIHJlYWQgZXJyb3IgaXMgbm90IHN1cHByZXNzZWQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUgZ2l2ZW4gZGV2aGFuZGxlLCByZWFsCisgKiBhZGRyZXNzLCB3aGljaCBtdXN0IGJlIGFuIElPIGFkZHJlc3MuICBUaGUgYXJndW1lbnQgcmVhbCBhZGRyZXNzIG11c3QgYmUgYQorICogc2l6ZSBhbGlnbmVkIGFkZHJlc3MuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHJlYWQgZnJvbQorICogdGhlIGdpdmVuIGRldmhhbmRsZSwgcGNpX2RldmljZSBjb2ZpZ3VyYXRpb24gc3BhY2Ugb2Zmc2V0IDAuCisgKgorICogVGhlIGh5cGVydmlzb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJsb2NrIGFjY2VzcyB0byBhbnkKKyAqIElPIGFkZHJlc3MgdGhhdCB0aGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBleHBsaWNpdCBwZXJtaXNzaW9uIHRvIGFjY2Vzcy4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9QT0tFCQkweGI3CisKKy8qIHBjaV9kbWFfc3luYygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9ETUFfU1lOQworICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOglyZWFsIGFkZHJlc3MKKyAqIEFSRzI6CXNpemUKKyAqIEFSRzM6CWlvX3N5bmNfZGlyZWN0aW9uCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CSNzeW5jZWQKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBpb19zeW5jX2RpcmVjdGlvbgorICoJCUVOT1JBRERSCUJhZCByZWFsIGFkZHJlc3MKKyAqCisgKiBTeW5jaHJvbml6ZSBhIG1lbW9yeSByZWdpb24gZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiByZWFsIGFkZHJlc3MgYW5kIHNpemUsCisgKiBmb3IgdGhlIGRldmljZSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgdXNpbmcgdGhlIGRpcmVjdGlvbihzKQorICogZGVmaW5lZCBieSB0aGUgZ2l2ZW4gaW9fc3luY19kaXJlY3Rpb24uICBUaGUgYXJndW1lbnQgc2l6ZSBpcyB0aGUgc2l6ZSBvZgorICogdGhlIG1lbW9yeSByZWdpb24gaW4gYnl0ZXMuCisgKgorICogUmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHN5bmNocm9uaXplZCBpbiB0aGUgcmV0dXJuIHZhbHVlICNzeW5jZWQsCisgKiB3aGljaCBtYXkgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBhcmd1bWVudCBzaXplLiAgSWYgdGhlIHJldHVybgorICogdmFsdWUgI3N5bmNlZCBpcyBsZXNzIHRoYW4gc2l6ZSwgdGhlIGNhbGxlciBtdXN0IGNvbnRpbnVlIHRvIGNhbGwgdGhpcworICogZnVuY3Rpb24gd2l0aCB1cGRhdGVkIHJlYWwgYWRkcmVzcyBhbmQgc2l6ZSBhcmd1bWVudHMgdW50aWwgdGhlIGVudGlyZQorICogbWVtb3J5IHJlZ2lvbiBpcyBzeW5jaHJvbml6ZWQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfRE1BX1NZTkMJCTB4YjgKKworLyogUENJIE1TSSBzZXJ2aWNlcy4gICovCisKKyNkZWZpbmUgSFZfTVNJVFlQRV9NU0kzMgkJMHgwMAorI2RlZmluZSBIVl9NU0lUWVBFX01TSTY0CQkweDAxCisKKyNkZWZpbmUgSFZfTVNJUVNUQVRFX0lETEUJCTB4MDAKKyNkZWZpbmUgSFZfTVNJUVNUQVRFX0VSUk9SCQkweDAxCisKKyNkZWZpbmUgSFZfTVNJUV9JTlZBTElECQkJMHgwMAorI2RlZmluZSBIVl9NU0lRX1ZBTElECQkJMHgwMQorCisjZGVmaW5lIEhWX01TSVNUQVRFX0lETEUJCTB4MDAKKyNkZWZpbmUgSFZfTVNJU1RBVEVfREVMSVZFUkVECQkweDAxCisKKyNkZWZpbmUgSFZfTVNJVkFMSURfSU5WQUxJRAkJMHgwMAorI2RlZmluZSBIVl9NU0lWQUxJRF9WQUxJRAkJMHgwMQorCisjZGVmaW5lIEhWX1BDSUVfTVNHVFlQRV9QTUVfTVNHCQkweDE4CisjZGVmaW5lIEhWX1BDSUVfTVNHVFlQRV9QTUVfQUNLX01TRwkweDFiCisjZGVmaW5lIEhWX1BDSUVfTVNHVFlQRV9DT1JSX01TRwkweDMwCisjZGVmaW5lIEhWX1BDSUVfTVNHVFlQRV9OT05GQVRBTF9NU0cJMHgzMQorI2RlZmluZSBIVl9QQ0lFX01TR1RZUEVfRkFUQUxfTVNHCTB4MzMKKworI2RlZmluZSBIVl9NU0dfSU5WQUxJRAkJCTB4MDAKKyNkZWZpbmUgSFZfTVNHX1ZBTElECQkJMHgwMQorCisvKiBwY2lfbXNpcV9jb25mKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSVFfQ09ORgorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2lxaWQKKyAqIEFSRzI6CXJlYWwgYWRkcmVzcworICogQVJHMzoJbnVtYmVyIG9mIGVudHJpZXMKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlLCBtc2lxaWQgb3IgbmVudHJpZXMKKyAqCQlFQkFEQUxJR04JSW1wcm9wZXJseSBhbGlnbmVkIHJlYWwgYWRkcmVzcworICoJCUVOT1JBRERSCUJhZCByZWFsIGFkZHJlc3MKKyAqCisgKiBDb25maWd1cmUgdGhlIE1TSSBxdWV1ZSBnaXZlbiBieSB0aGUgZGV2aGFuZGxlIGFuZCBtc2lxaWQgYXJndW1lbnRzLAorICogYW5kIHRvIGJlIHBsYWNlZCBhdCB0aGUgZ2l2ZW4gcmVhbCBhZGRyZXNzIGFuZCBiZSBvZiB0aGUgZ2l2ZW4KKyAqIG51bWJlciBvZiBlbnRyaWVzLiAgVGhlIHJlYWwgYWRkcmVzcyBtdXN0IGJlIGFsaWduZWQgZXhhY3RseSB0byBtYXRjaAorICogdGhlIHF1ZXVlIHNpemUuICBFYWNoIHF1ZXVlIGVudHJ5IGlzIDY0LWJ5dGVzIGxvbmcsIHNvIGYuZS4gYSAzMiBlbnRyeQorICogcXVldWUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMjA0OCBieXRlIHJlYWwgYWRkcmVzcyBib3VuZGFyeS4gIFRoZSBNU0ktRVEKKyAqIEhlYWQgYW5kIFRhaWwgYXJlIGluaXRpYWxpemVkIHNvIHRoYXQgdGhlIE1TSS1FUSBpcyAnZW1wdHknLgorICoKKyAqIEltcGxlbWVudGF0aW9uIE5vdGU6IENlcnRhaW4gaW1wbGVtZW50YXRpb25zIGhhdmUgZml4ZWQgc2l6ZWQgcXVldWVzLiAgSW4KKyAqICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FzZSwgbnVtYmVyIG9mIGVudHJpZXMgbXVzdCBjb250YWluIHRoZSBjb3JyZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX0NPTkYJCTB4YzAKKworLyogcGNpX21zaXFfaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lRX0lORk8KKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlYWwgYWRkcmVzcworICogUkVUMjoJbnVtYmVyIG9mIGVudHJpZXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2lxaWQKKyAqCisgKiBSZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBNU0kgcXVldWUgZGVzY3JpYmVkCisgKiBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZCBtc2lxaWQuICBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBxdWV1ZQorICogaXMgcmV0dXJuZWQgaW4gQVJHMSBhbmQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGlzIHJldHVybmVkIGluIEFSRzIuCisgKiBJZiB0aGUgcXVldWUgaXMgdW5jb25maWd1cmVkLCB0aGUgcmVhbCBhZGRyZXNzIGlzIHVuZGVmaW5lZCBhbmQgdGhlCisgKiBudW1iZXIgb2YgZW50cmllcyB3aWxsIGJlIHJldHVybmVkIGFzIHplcm8uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJUV9JTkZPCQkweGMxCisKKy8qIHBjaV9tc2lxX2dldHZhbGlkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSVFfR0VUVkFMSUQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW1zaXF2YWxpZAkoSFZfTVNJUV9WQUxJRCBvciBIVl9NU0lRX0lOVkFMSUQpCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpcWlkCisgKgorICogR2V0IHRoZSB2YWxpZCBzdGF0ZSBvZiB0aGUgTVNJLUVRIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZAorICogbXNpcWlkLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSVFfR0VUVkFMSUQJMHhjMgorCisvKiBwY2lfbXNpcV9zZXR2YWxpZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lRX1NFVFZBTElECisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CW1zaXFpZAorICogQVJHMjoJbXNpcXZhbGlkCShIVl9NU0lRX1ZBTElEIG9yIEhWX01TSVFfSU5WQUxJRCkKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZCBvciBtc2lxdmFsaWQKKyAqCQkJCXZhbHVlIG9yIE1TSSBFUSBpcyB1bmluaXRpYWxpemVkCisgKgorICogU2V0IHRoZSB2YWxpZCBzdGF0ZSBvZiB0aGUgTVNJLUVRIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZAorICogbXNpcWlkIHRvIHRoZSBnaXZlbiBtc2lxdmFsaWQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJUV9TRVRWQUxJRAkweGMzCisKKy8qIHBjaV9tc2lxX2dldHN0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSVFfR0VUU1RBVEUKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW1zaXFzdGF0ZQkoSFZfTVNJUVNUQVRFX0lETEUgb3IgSFZfTVNJUVNUQVRFX0VSUk9SKQorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZAorICoKKyAqIEdldCB0aGUgc3RhdGUgb2YgdGhlIE1TSS1FUSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQKKyAqIG1zaXFpZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX0dFVFNUQVRFCTB4YzQKKworLyogcGNpX21zaXFfZ2V0dmFsaWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJUV9HRVRWQUxJRAorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2lxaWQKKyAqIEFSRzI6CW1zaXFzdGF0ZQkoSFZfTVNJUVNUQVRFX0lETEUgb3IgSFZfTVNJUVNUQVRFX0VSUk9SKQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpcWlkIG9yIG1zaXFzdGF0ZQorICoJCQkJdmFsdWUgb3IgTVNJIEVRIGlzIHVuaW5pdGlhbGl6ZWQKKyAqCisgKiBTZXQgdGhlIHN0YXRlIG9mIHRoZSBNU0ktRVEgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kCisgKiBtc2lxaWQgdG8gdGhlIGdpdmVuIG1zaXF2YWxpZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX1NFVFNUQVRFCTB4YzUKKworLyogcGNpX21zaXFfZ2V0aGVhZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lRX0dFVEhFQUQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW1zaXFoZWFkCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpcWlkCisgKgorICogR2V0IHRoZSBjdXJyZW50IE1TSSBFUSBxdWV1ZSBoZWFkIGZvciB0aGUgTVNJLUVRIGRlc2NyaWJlZCBieSB0aGUKKyAqIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNpcWlkLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSVFfR0VUSEVBRAkweGM2CisKKy8qIHBjaV9tc2lxX3NldGhlYWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJUV9TRVRIRUFECisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CW1zaXFpZAorICogQVJHMjoJbXNpcWhlYWQKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZCBvciBtc2lxaGVhZCwKKyAqCQkJCW9yIE1TSSBFUSBpcyB1bmluaXRpYWxpemVkCisgKgorICogU2V0IHRoZSBjdXJyZW50IE1TSSBFUSBxdWV1ZSBoZWFkIGZvciB0aGUgTVNJLUVRIGRlc2NyaWJlZCBieSB0aGUKKyAqIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNpcWlkLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSVFfU0VUSEVBRAkweGM3CisKKy8qIHBjaV9tc2lxX2dldHRhaWwoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJUV9HRVRUQUlMCisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CW1zaXFpZAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgltc2lxdGFpbAorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZAorICoKKyAqIEdldCB0aGUgY3VycmVudCBNU0kgRVEgcXVldWUgdGFpbCBmb3IgdGhlIE1TSS1FUSBkZXNjcmliZWQgYnkgdGhlCisgKiBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaXFpZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX0dFVFRBSUwJMHhjOAorCisvKiBwY2lfbXNpX2dldHZhbGlkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSV9HRVRWQUxJRAorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2ludW0KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJbXNpdmFsaWRzdGF0ZQorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bQorICoKKyAqIEdldCB0aGUgY3VycmVudCB2YWxpZC9lbmFibGVkIHN0YXRlIGZvciB0aGUgTVNJIGRlZmluZWQgYnkgdGhlCisgKiBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaW51bS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lfR0VUVkFMSUQJMHhjOQorCisvKiBwY2lfbXNpX3NldHZhbGlkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSV9TRVRWQUxJRAorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2ludW0KKyAqIEFSRzI6CW1zaXZhbGlkc3RhdGUKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bSBvciBtc2l2YWxpZHN0YXRlCisgKgorICogU2V0IHRoZSBjdXJyZW50IHZhbGlkL2VuYWJsZWQgc3RhdGUgZm9yIHRoZSBNU0kgZGVmaW5lZCBieSB0aGUKKyAqIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNpbnVtLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSV9TRVRWQUxJRAkweGNhCisKKy8qIHBjaV9tc2lfZ2V0bXNpcSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lfR0VUTVNJUQorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2ludW0KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJbXNpcWlkCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpbnVtIG9yIE1TSSBpcyB1bmJvdW5kCisgKgorICogR2V0IHRoZSBNU0kgRVEgdGhhdCB0aGUgTVNJIGRlZmluZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQKKyAqIG1zaW51bSBpcyBib3VuZCB0by4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lfR0VUTVNJUQkJMHhjYgorCisvKiBwY2lfbXNpX3NldG1zaXEoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJX1NFVE1TSVEKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpbnVtCisgKiBBUkcyOgltc2l0eXBlCisgKiBBUkczOgltc2lxaWQKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bSBvciBtc2lxaWQKKyAqCisgKiBTZXQgdGhlIE1TSSBFUSB0aGF0IHRoZSBNU0kgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZAorICogbXNpbnVtIGlzIGJvdW5kIHRvLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSV9TRVRNU0lRCQkweGNjCisKKy8qIHBjaV9tc2lfZ2V0c3RhdGUoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJX0dFVFNUQVRFCisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CW1zaW51bQorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgltc2lzdGF0ZQorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bQorICoKKyAqIEdldCB0aGUgc3RhdGUgb2YgdGhlIE1TSSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaW51bS4KKyAqIElmIG5vdCBpbml0aWFsaXplZCwgcmV0dXJuIEhWX01TSVNUQVRFX0lETEUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJX0dFVFNUQVRFCTB4Y2QKKworLyogcGNpX21zaV9zZXRzdGF0ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lfU0VUU1RBVEUKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpbnVtCisgKiBBUkcyOgltc2lzdGF0ZQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpbnVtIG9yIG1zaXN0YXRlCisgKgorICogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgTVNJIGRlZmluZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNpbnVtLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSV9TRVRTVEFURQkweGNlCisKKy8qIHBjaV9tc2dfZ2V0bXNpcSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0dfR0VUTVNJUQorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2d0eXBlCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW1zaXFpZAorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zZ3R5cGUKKyAqCisgKiBHZXQgdGhlIE1TSSBFUSBvZiB0aGUgTVNHIGRlZmluZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNndHlwZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0dfR0VUTVNJUQkJMHhkMAorCisvKiBwY2lfbXNnX3NldG1zaXEoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNHX1NFVE1TSVEKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNndHlwZQorICogQVJHMjoJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSwgbXNndHlwZSwgb3IgbXNpcWlkCisgKgorICogU2V0IHRoZSBNU0kgRVEgb2YgdGhlIE1TRyBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zZ3R5cGUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNHX1NFVE1TSVEJCTB4ZDEKKworLyogcGNpX21zZ19nZXR2YWxpZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0dfR0VUVkFMSUQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNndHlwZQorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgltc2d2YWxpZHN0YXRlCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNndHlwZQorICoKKyAqIEdldCB0aGUgdmFsaWQvZW5hYmxlZCBzdGF0ZSBvZiB0aGUgTVNHIGRlZmluZWQgYnkgdGhlIGdpdmVuCisgKiBkZXZoYW5kbGUgYW5kIG1zZ3R5cGUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNHX0dFVFZBTElECTB4ZDIKKworLyogcGNpX21zZ19zZXR2YWxpZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0dfU0VUVkFMSUQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNndHlwZQorICogQVJHMjoJbXNndmFsaWRzdGF0ZQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNndHlwZSBvciBtc2d2YWxpZHN0YXRlCisgKgorICogU2V0IHRoZSB2YWxpZC9lbmFibGVkIHN0YXRlIG9mIHRoZSBNU0cgZGVmaW5lZCBieSB0aGUgZ2l2ZW4KKyAqIGRldmhhbmRsZSBhbmQgbXNndHlwZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0dfU0VUVkFMSUQJMHhkMworCisvKiBMb2dpY2FsIERvbWFpbiBDaGFubmVsIHNlcnZpY2VzLiAgKi8KKworI2RlZmluZSBMRENfQ0hBTk5FTF9ET1dOCQkwCisjZGVmaW5lIExEQ19DSEFOTkVMX1VQCQkJMQorI2RlZmluZSBMRENfQ0hBTk5FTF9SRVNFVFRJTkcJCTIKKworLyogbGRjX3R4X3Fjb25mKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1RYX1FDT05GCisgKiBBUkcwOgljaGFubmVsIElECisgKiBBUkcxOglyZWFsIGFkZHJlc3MgYmFzZSBvZiBxdWV1ZQorICogQVJHMjoJbnVtIGVudHJpZXMgaW4gcXVldWUKKyAqIFJFVDA6CXN0YXR1cworICoKKyAqIENvbmZpZ3VyZSB0cmFuc21pdCBxdWV1ZSBmb3IgdGhlIExEQyBlbmRwb2ludCBzcGVjaWZpZWQgYnkgdGhlCisgKiBnaXZlbiBjaGFubmVsIElELCB0byBiZSBwbGFjZWQgYXQgdGhlIGdpdmVuIHJlYWwgYWRkcmVzcywgYW5kCisgKiBiZSBvZiB0aGUgZ2l2ZW4gbnVtIGVudHJpZXMuICBOdW0gZW50cmllcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgorICogVGhlIHJlYWwgYWRkcmVzcyBiYXNlIG9mIHRoZSBxdWV1ZSBtdXN0IGJlIGFsaWduZWQgb24gdGhlIHF1ZXVlCisgKiBzaXplLiAgRWFjaCBxdWV1ZSBlbnRyeSBpcyA2NC1ieXRlcywgc28gZm9yIGV4YW1wbGUsIGEgMzIgZW50cnkKKyAqIHF1ZXVlIG11c3QgYmUgYWxpZ25lZCBvbiBhIDIwNDggYnl0ZSByZWFsIGFkZHJlc3MgYm91bmRhcnkuCisgKgorICogVXBvbiBjb25maWd1cmF0aW9uIG9mIGEgdmFsaWQgdHJhbnNtaXQgcXVldWUgdGhlIGhlYWQgYW5kIHRhaWwKKyAqIHBvaW50ZXJzIGFyZSBzZXQgdG8gYSBoeXBlcnZpc29yIHNwZWNpZmljIGlkZW50aWNhbCB2YWx1ZSBpbmRpY2F0aW5nCisgKiB0aGF0IHRoZSBxdWV1ZSBpbml0aWFsbHkgaXMgZW1wdHkuCisgKgorICogVGhlIGVuZHBvaW50J3MgdHJhbnNtaXQgcXVldWUgaXMgdW4tY29uZmlndXJlZCBpZiBudW0gZW50cmllcyBpcyB6ZXJvLgorICoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGZvciBlYWNoIHF1ZXVlIGZvciBhIHNwZWNpZmljIGNwdSBtYXkgYmUKKyAqIGRldGVybWluZWQgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbi4gIEEgdHJhbnNtaXQgcXVldWUgbWF5IGJlCisgKiBzcGVjaWZpZWQgZXZlbiBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTERDIGlzIGRvd24gKHBlZXIgZW5kcG9pbnQgaGFzIG5vCisgKiByZWNlaXZlIHF1ZXVlIHNwZWNpZmllZCkuICBUcmFuc21pc3Npb24gd2lsbCBiZWdpbiBhcyBzb29uIGFzIHRoZSBwZWVyCisgKiBlbmRwb2ludCBkZWZpbmVzIGEgcmVjZWl2ZSBxdWV1ZS4KKyAqCisgKiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGEgZ3Vlc3Qgd2FpdCBmb3IgYSB0cmFuc21pdCBxdWV1ZSB0byBlbXB0eSBwcmlvcgorICogdG8gcmVjb25maWd1cmluZyBpdCwgb3IgdW4tY29uZmlndXJpbmcgaXQuICBSZSBvciB1bi1jb25maWd1cmluZyBvZiBhCisgKiBub24tZW1wdHkgdHJhbnNtaXQgcXVldWUgYmVoYXZlcyBleGFjdGx5IGFzIGRlZmluZWQgYWJvdmUsIGhvd2V2ZXIgaXQKKyAqIGlzIHVuZGVmaW5lZCBhcyB0byBob3cgbWFueSBvZiB0aGUgcGVuZGluZyBlbnRyaWVzIGluIHRoZSBvcmlnaW5hbCBxdWV1ZQorICogd2lsbCBiZSBkZWxpdmVyZWQgcHJpb3IgdG8gdGhlIHJlLWNvbmZpZ3VyYXRpb24gdGFraW5nIGVmZmVjdC4KKyAqIEZ1cnRoZXJtb3JlLCBhcyB0aGUgcXVldWUgY29uZmlndXJhdGlvbiBjYXVzZXMgYSByZXNldCBvZiB0aGUgaGVhZCBhbmQKKyAqIHRhaWwgcG9pbnRlcnMgdGhlcmUgaXMgbm8gd2F5IGZvciBhIGd1ZXN0IHRvIGRldGVybWluZSBob3cgbWFueSBlbnRyaWVzCisgKiBoYXZlIGJlZW4gc2VudCBhZnRlciB0aGUgY29uZmlndXJhdGlvbiBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9MRENfVFhfUUNPTkYJCTB4ZTAKKworLyogbGRjX3R4X3FpbmZvKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1RYX1FJTkZPCisgKiBBUkcwOgljaGFubmVsIElECisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlYWwgYWRkcmVzcyBiYXNlIG9mIHF1ZXVlCisgKiBSRVQyOgludW0gZW50cmllcyBpbiBxdWV1ZQorICoKKyAqIFJldHVybiB0aGUgY29uZmlndXJhdGlvbiBpbmZvIGZvciB0aGUgdHJhbnNtaXQgcXVldWUgb2YgTERDIGVuZHBvaW50CisgKiBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBjaGFubmVsIElELiAgVGhlIHJlYWwgYWRkcmVzcyBpcyB0aGUgY3VycmVudGx5CisgKiBkZWZpbmVkIHJlYWwgYWRkcmVzcyBiYXNlIG9mIHRoZSBkZWZpbmVkIHF1ZXVlLCBhbmQgbnVtIGVudHJpZXMgaXMgdGhlCisgKiBzaXplIG9mIHRoZSBxdWV1ZSBpbiB0ZXJtcyBvZiBudW1iZXIgb2YgZW50cmllcy4KKyAqCisgKiBJZiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgSUQgaXMgYSB2YWxpZCBlbmRwb2ludCBudW1iZXIsIGJ1dCBubyB0cmFuc21pdAorICogcXVldWUgaGFzIGJlZW4gZGVmaW5lZCB0aGlzIHNlcnZpY2Ugd2lsbCByZXR1cm4gc3VjY2VzcywgYnV0IHdpdGggbnVtCisgKiBlbnRyaWVzIHNldCB0byB6ZXJvIGFuZCB0aGUgcmVhbCBhZGRyZXNzIHdpbGwgaGF2ZSBhbiB1bmRlZmluZWQgdmFsdWUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9MRENfVFhfUUlORk8JCTB4ZTEKKworLyogbGRjX3R4X2dldF9zdGF0ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19UWF9HRVRfU1RBVEUKKyAqIEFSRzA6CWNoYW5uZWwgSUQKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJaGVhZCBvZmZzZXQKKyAqIFJFVDI6CXRhaWwgb2Zmc2V0CisgKiBSRVQzOgljaGFubmVsIHN0YXRlCisgKgorICogUmV0dXJuIHRoZSB0cmFuc21pdCBzdGF0ZSwgYW5kIHRoZSBoZWFkIGFuZCB0YWlsIHF1ZXVlIHBvaW50ZXJzLCBmb3IKKyAqIHRoZSB0cmFuc21pdCBxdWV1ZSBvZiB0aGUgTERDIGVuZHBvaW50IGRlZmluZWQgYnkgdGhlIGdpdmVuIGNoYW5uZWwgSUQuCisgKiBUaGUgaGVhZCBhbmQgdGFpbCB2YWx1ZXMgYXJlIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgaGVhZCBhbmQgdGFpbAorICogcG9zaXRpb25zIG9mIHRoZSB0cmFuc21pdCBxdWV1ZSBmb3IgdGhlIHNwZWNpZmllZCBlbmRwb2ludC4KKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19UWF9HRVRfU1RBVEUJMHhlMgorCisvKiBsZGNfdHhfc2V0X3F0YWlsKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1RYX1NFVF9RVEFJTAorICogQVJHMDoJY2hhbm5lbCBJRAorICogQVJHMToJdGFpbCBvZmZzZXQKKyAqIFJFVDA6CXN0YXR1cworICoKKyAqIFVwZGF0ZSB0aGUgdGFpbCBwb2ludGVyIGZvciB0aGUgdHJhbnNtaXQgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBMREMKKyAqIGVuZHBvaW50IGRlZmluZWQgYnkgdGhlIGdpdmVuIGNoYW5uZWwgSUQuICBUaGUgdGFpbCBvZmZzZXQgc3BlY2lmaWVkCisgKiBtdXN0IGJlIGFsaWduZWQgb24gYSA2NCBieXRlIGJvdW5kYXJ5LCBhbmQgY2FsY3VsYXRlZCBzbyBhcyB0byBpbmNyZWFzZQorICogdGhlIG51bWJlciBvZiBwZW5kaW5nIGVudHJpZXMgb24gdGhlIHRyYW5zbWl0IHF1ZXVlLiAgQW55IGF0dGVtcHQgdG8KKyAqIGRlY3JlYXNlIHRoZSBudW1iZXIgb2YgcGVuZGluZyB0cmFuc21pdCBxdWV1ZSBlbnRpcmVzIGlzIGNvbnNpZGVyZWQKKyAqIGFuIGludmFsaWQgdGFpbCBvZmZzZXQgYW5kIHdpbGwgcmVzdWx0IGluIGFuIEVJTlZBTCBlcnJvci4KKyAqCisgKiBTaW5jZSB0aGUgdGFpbCBvZiB0aGUgdHJhbnNtaXQgcXVldWUgbWF5IG5vdCBiZSBtb3ZlZCBiYWNrd2FyZHMsIHRoZQorICogdHJhbnNtaXQgcXVldWUgbWF5IGJlIGZsdXNoZWQgYnkgY29uZmlndXJpbmcgYSBuZXcgdHJhbnNtaXQgcXVldWUsCisgKiB3aGVyZXVwb24gdGhlIGh5cGVydmlzb3Igd2lsbCBjb25maWd1cmUgdGhlIGluaXRpYWwgdHJhbnNtaXQgaGVhZCBhbmQKKyAqIHRhaWwgcG9pbnRlcnMgdG8gYmUgZXF1YWwuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9MRENfVFhfU0VUX1FUQUlMCTB4ZTMKKworLyogbGRjX3J4X3Fjb25mKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1JYX1FDT05GCisgKiBBUkcwOgljaGFubmVsIElECisgKiBBUkcxOglyZWFsIGFkZHJlc3MgYmFzZSBvZiBxdWV1ZQorICogQVJHMjoJbnVtIGVudHJpZXMgaW4gcXVldWUKKyAqIFJFVDA6CXN0YXR1cworICoKKyAqIENvbmZpZ3VyZSByZWNlaXZlIHF1ZXVlIGZvciB0aGUgTERDIGVuZHBvaW50IHNwZWNpZmllZCBieSB0aGUKKyAqIGdpdmVuIGNoYW5uZWwgSUQsIHRvIGJlIHBsYWNlZCBhdCB0aGUgZ2l2ZW4gcmVhbCBhZGRyZXNzLCBhbmQKKyAqIGJlIG9mIHRoZSBnaXZlbiBudW0gZW50cmllcy4gIE51bSBlbnRyaWVzIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCisgKiBUaGUgcmVhbCBhZGRyZXNzIGJhc2Ugb2YgdGhlIHF1ZXVlIG11c3QgYmUgYWxpZ25lZCBvbiB0aGUgcXVldWUKKyAqIHNpemUuICBFYWNoIHF1ZXVlIGVudHJ5IGlzIDY0LWJ5dGVzLCBzbyBmb3IgZXhhbXBsZSwgYSAzMiBlbnRyeQorICogcXVldWUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMjA0OCBieXRlIHJlYWwgYWRkcmVzcyBib3VuZGFyeS4KKyAqCisgKiBUaGUgZW5kcG9pbnQncyB0cmFuc21pdCBxdWV1ZSBpcyB1bi1jb25maWd1cmVkIGlmIG51bSBlbnRyaWVzIGlzIHplcm8uCisgKgorICogSWYgYSB2YWxpZCByZWNlaXZlIHF1ZXVlIGlzIHNwZWNpZmllZCBmb3IgYSBsb2NhbCBlbmRwb2ludCB0aGUgTERDIGlzCisgKiBpbiB0aGUgdXAgc3RhdGUgZm9yIHRoZSBwdXJwb3NlIG9mIHRyYW5zbWlzc2lvbiB0byB0aGlzIGVuZHBvaW50LgorICoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGZvciBlYWNoIHF1ZXVlIGZvciBhIHNwZWNpZmljIGNwdSBtYXkgYmUKKyAqIGRldGVybWluZWQgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbi4KKyAqCisgKiBBcyByZWNlaXZlIHF1ZXVlIGNvbmZpZ3VyYXRpb24gY2F1c2VzIGEgcmVzZXQgb2YgdGhlIHF1ZXVlJ3MgaGVhZCBhbmQKKyAqIHRhaWwgcG9pbnRlcnMgdGhlcmUgaXMgbm8gd2F5IGZvciBhIGd1ZXMgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGVudHJpZXMKKyAqIGhhdmUgYmVlbiByZWNlaXZlZCBiZXR3ZWVuIGEgcHJlY2VlZGluZyBsZGNfZ2V0X3J4X3N0YXRlKCkgQVBJIGNhbGwKKyAqIGFuZCB0aGUgY29tcGxldGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcGVyYXRpb24uICBJdCBzaG91bGQgYmUgbm90ZWQKKyAqIHRoYXQgZGF0YWdyYW0gZGVsaXZlcnkgaXMgbm90IGd1YXJlbnRlZWQgdmlhIGRvbWFpbiBjaGFubmVscyBhbnl3YXksCisgKiBhbmQgdGhlcmVmb3JlIGFueSBoaWdoZXIgcHJvdG9jb2wgc2hvdWxkIGJlIHJlc2lsaWVudCB0byBkYXRhZ3JhbQorICogbG9zcyBpZiBuZWNlc3NhcnkuICBIb3dldmVyLCB0byBvdmVyY29tZSB0aGlzIHNwZWNpZmljIHJhY2UgcG90ZW50aWFsCisgKiBpdCBpcyByZWNvbW1lbmRlZCwgZm9yIGV4YW1wbGUsIHRoYXQgYSBoaWdoZXIgbGV2ZWwgcHJvdG9jb2wgYmUgZW1wbG95ZWQKKyAqIHRvIGVuc3VyZSBlaXRoZXIgcmV0cmFuc21pc3Npb24sIG9yIGVuc3VyZSB0aGF0IG5vIGRhdGFncmFtcyBhcmUgcGVuZGluZworICogb24gdGhlIHBlZXIgZW5kcG9pbnQncyB0cmFuc21pdCBxdWV1ZSBwcmlvciB0byB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgorICovCisjZGVmaW5lIEhWX0ZBU1RfTERDX1JYX1FDT05GCQkweGU0CisKKy8qIGxkY19yeF9xaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19SWF9RSU5GTworICogQVJHMDoJY2hhbm5lbCBJRAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglyZWFsIGFkZHJlc3MgYmFzZSBvZiBxdWV1ZQorICogUkVUMjoJbnVtIGVudHJpZXMgaW4gcXVldWUKKyAqCisgKiBSZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gaW5mbyBmb3IgdGhlIHJlY2VpdmUgcXVldWUgb2YgTERDIGVuZHBvaW50CisgKiBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBjaGFubmVsIElELiAgVGhlIHJlYWwgYWRkcmVzcyBpcyB0aGUgY3VycmVudGx5CisgKiBkZWZpbmVkIHJlYWwgYWRkcmVzcyBiYXNlIG9mIHRoZSBkZWZpbmVkIHF1ZXVlLCBhbmQgbnVtIGVudHJpZXMgaXMgdGhlCisgKiBzaXplIG9mIHRoZSBxdWV1ZSBpbiB0ZXJtcyBvZiBudW1iZXIgb2YgZW50cmllcy4KKyAqCisgKiBJZiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgSUQgaXMgYSB2YWxpZCBlbmRwb2ludCBudW1iZXIsIGJ1dCBubyByZWNlaXZlCisgKiBxdWV1ZSBoYXMgYmVlbiBkZWZpbmVkIHRoaXMgc2VydmljZSB3aWxsIHJldHVybiBzdWNjZXNzLCBidXQgd2l0aCBudW0KKyAqIGVudHJpZXMgc2V0IHRvIHplcm8gYW5kIHRoZSByZWFsIGFkZHJlc3Mgd2lsbCBoYXZlIGFuIHVuZGVmaW5lZCB2YWx1ZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19SWF9RSU5GTwkJMHhlNQorCisvKiBsZGNfcnhfZ2V0X3N0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1JYX0dFVF9TVEFURQorICogQVJHMDoJY2hhbm5lbCBJRAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgloZWFkIG9mZnNldAorICogUkVUMjoJdGFpbCBvZmZzZXQKKyAqIFJFVDM6CWNoYW5uZWwgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHJlY2VpdmUgc3RhdGUsIGFuZCB0aGUgaGVhZCBhbmQgdGFpbCBxdWV1ZSBwb2ludGVycywgZm9yCisgKiB0aGUgcmVjZWl2ZSBxdWV1ZSBvZiB0aGUgTERDIGVuZHBvaW50IGRlZmluZWQgYnkgdGhlIGdpdmVuIGNoYW5uZWwgSUQuCisgKiBUaGUgaGVhZCBhbmQgdGFpbCB2YWx1ZXMgYXJlIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgaGVhZCBhbmQgdGFpbAorICogcG9zaXRpb25zIG9mIHRoZSByZWNlaXZlIHF1ZXVlIGZvciB0aGUgc3BlY2lmaWVkIGVuZHBvaW50LgorICovCisjZGVmaW5lIEhWX0ZBU1RfTERDX1JYX0dFVF9TVEFURQkweGU2CisKKy8qIGxkY19yeF9zZXRfcWhlYWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfUlhfU0VUX1FIRUFECisgKiBBUkcwOgljaGFubmVsIElECisgKiBBUkcxOgloZWFkIG9mZnNldAorICogUkVUMDoJc3RhdHVzCisgKgorICogVXBkYXRlIHRoZSBoZWFkIHBvaW50ZXIgZm9yIHRoZSByZWNlaXZlIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgTERDCisgKiBlbmRwb2ludCBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBjaGFubmVsIElELiAgVGhlIGhlYWQgb2Zmc2V0IHNwZWNpZmllZAorICogbXVzdCBiZSBhbGlnbmVkIG9uIGEgNjQgYnl0ZSBib3VuZGFyeSwgYW5kIGNhbGN1bGF0ZWQgc28gYXMgdG8gZGVjcmVhc2UKKyAqIHRoZSBudW1iZXIgb2YgcGVuZGluZyBlbnRyaWVzIG9uIHRoZSByZWNlaXZlIHF1ZXVlLiAgQW55IGF0dGVtcHQgdG8KKyAqIGluY3JlYXNlIHRoZSBudW1iZXIgb2YgcGVuZGluZyByZWNlaXZlIHF1ZXVlIGVudGlyZXMgaXMgY29uc2lkZXJlZAorICogYW4gaW52YWxpZCBoZWFkIG9mZnNldCBhbmQgd2lsbCByZXN1bHQgaW4gYW4gRUlOVkFMIGVycm9yLgorICoKKyAqIFRoZSByZWNlaXZlIHF1ZXVlIG1heSBiZSBmbHVzaGVkIGJ5IHNldHRpbmcgdGhlIGhlYWQgb2Zmc2V0IGVxdWFsCisgKiB0byB0aGUgY3VycmVudCB0YWlsIG9mZnNldC4KKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19SWF9TRVRfUUhFQUQJMHhlNworCisvKiBMREMgTWFwIFRhYmxlIEVudHJ5LiAgRWFjaCBzbG90IGlzIGRlZmluZWQgYnkgYSB0cmFuc2xhdGlvbiB0YWJsZQorICogZW50cnksIGFzIHNwZWNpZmllZCBieSB0aGUgTERDX01URV8qIGJpdHMgYmVsb3csIGFuZCBhIDY0LWJpdAorICogaHlwZXJ2aXNvciBpbnZhbGlkYXRpb24gY29va2llLgorICovCisjZGVmaW5lIExEQ19NVEVfUEFERFIJMHgwZmZmZmZmZmZmZmZlMDAwIC8qIHBhWzU1OjEzXSAgICAgICAgICAqLworI2RlZmluZSBMRENfTVRFX0NPUFlfVwkweDAwMDAwMDAwMDAwMDA0MDAgLyogY29weSB3cml0ZSBhY2Nlc3MgICovCisjZGVmaW5lIExEQ19NVEVfQ09QWV9SCTB4MDAwMDAwMDAwMDAwMDIwMCAvKiBjb3B5IHJlYWQgYWNjZXNzICAgKi8KKyNkZWZpbmUgTERDX01URV9JT01NVV9XCTB4MDAwMDAwMDAwMDAwMDEwMCAvKiBJT01NVSB3cml0ZSBhY2Nlc3MgKi8KKyNkZWZpbmUgTERDX01URV9JT01NVV9SCTB4MDAwMDAwMDAwMDAwMDA4MCAvKiBJT01NVSByZWFkIGFjY2VzcyAgKi8KKyNkZWZpbmUgTERDX01URV9FWEVDCTB4MDAwMDAwMDAwMDAwMDA0MCAvKiBleGVjdXRlICAgICAgICAgICAgKi8KKyNkZWZpbmUgTERDX01URV9XUklURQkweDAwMDAwMDAwMDAwMDAwMjAgLyogcmVhZCAgICAgICAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfUkVBRAkweDAwMDAwMDAwMDAwMDAwMTAgLyogd3JpdGUgICAgICAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfU1pBTEwJMHgwMDAwMDAwMDAwMDAwMDBmIC8qIHBhZ2Ugc2l6ZSBiaXRzICAgICAqLworI2RlZmluZSBMRENfTVRFX1NaMTZHQgkweDAwMDAwMDAwMDAwMDAwMDcgLyogMTZHQiBwYWdlICAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfU1oyR0IJMHgwMDAwMDAwMDAwMDAwMDA2IC8qIDJHQiBwYWdlICAgICAgICAgICAqLworI2RlZmluZSBMRENfTVRFX1NaMjU2TUIJMHgwMDAwMDAwMDAwMDAwMDA1IC8qIDI1Nk1CIHBhZ2UgICAgICAgICAqLworI2RlZmluZSBMRENfTVRFX1NaMzJNQgkweDAwMDAwMDAwMDAwMDAwMDQgLyogMzJNQiBwYWdlICAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfU1o0TUIJMHgwMDAwMDAwMDAwMDAwMDAzIC8qIDRNQiBwYWdlICAgICAgICAgICAqLworI2RlZmluZSBMRENfTVRFX1NaNTEySwkweDAwMDAwMDAwMDAwMDAwMDIgLyogNTEySyBwYWdlICAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfU1o2NEsJMHgwMDAwMDAwMDAwMDAwMDAxIC8qIDY0SyBwYWdlICAgICAgICAgICAqLworI2RlZmluZSBMRENfTVRFX1NaOEsJMHgwMDAwMDAwMDAwMDAwMDAwIC8qIDhLIHBhZ2UgICAgICAgICAgICAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IGxkY19tdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGxvbmcJbXRlOworCXVuc2lnbmVkIGxvbmcJY29va2llOworfTsKKyNlbmRpZgorCisvKiBsZGNfc2V0X21hcF90YWJsZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19TRVRfTUFQX1RBQkxFCisgKiBBUkcwOgljaGFubmVsIElECisgKiBBUkcxOgl0YWJsZSByZWFsIGFkZHJlc3MKKyAqIEFSRzI6CW51bSBlbnRyaWVzCisgKiBSRVQwOglzdGF0dXMKKyAqCisgKiBSZWdpc3RlciB0aGUgTVRFIHRhYmxlIGF0IHRoZSBnaXZlbiB0YWJsZSByZWFsIGFkZHJlc3MsIHdpdGggdGhlCisgKiBzcGVjaWZpZWQgbnVtIGVudHJpZXMsIGZvciB0aGUgTERDIGluZGljYXRlZCBieSB0aGUgZ2l2ZW4gY2hhbm5lbAorICogSUQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9MRENfU0VUX01BUF9UQUJMRQkweGVhCisKKy8qIGxkY19nZXRfbWFwX3RhYmxlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX0dFVF9NQVBfVEFCTEUKKyAqIEFSRzA6CWNoYW5uZWwgSUQKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJdGFibGUgcmVhbCBhZGRyZXNzCisgKiBSRVQyOgludW0gZW50cmllcworICoKKyAqIFJldHVybiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgY3VycmVudCBtYXBwaW5nIHRhYmxlIHJlZ2lzdGVyZWQKKyAqIGZvciB0aGUgZ2l2ZW4gY2hhbm5lbCBJRC4KKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19HRVRfTUFQX1RBQkxFCTB4ZWIKKworI2RlZmluZSBMRENfQ09QWV9JTgkwCisjZGVmaW5lIExEQ19DT1BZX09VVAkxCisKKy8qIGxkY19jb3B5KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX0NPUFkKKyAqIEFSRzA6CWNoYW5uZWwgSUQKKyAqIEFSRzE6CUxEQ19DT1BZXyogZGlyZWN0aW9uIGNvZGUKKyAqIEFSRzI6CXRhcmdldCByZWFsIGFkZHJlc3MKKyAqIEFSRzM6CWxvY2FsIHJlYWwgYWRkcmVzcworICogQVJHNDoJbGVuZ3RoIGluIGJ5dGVzCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWFjdHVhbCBsZW5ndGggaW4gYnl0ZXMKKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19DT1BZCQkweGVjCisKKyNkZWZpbmUgTERDX01FTV9SRUFECTEKKyNkZWZpbmUgTERDX01FTV9XUklURQkyCisjZGVmaW5lIExEQ19NRU1fRVhFQwk0CisKKy8qIGxkY19tYXBpbigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19NQVBJTgorICogQVJHMDoJY2hhbm5lbCBJRAorICogQVJHMToJY29va2llCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlYWwgYWRkcmVzcworICogUkVUMjoJTERDX01FTV8qIHBlcm1pc3Npb25zCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9MRENfTUFQSU4JCTB4ZWQKKworLyogbGRjX3VubWFwKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1VOTUFQCisgKiBBUkcwOglyZWFsIGFkZHJlc3MKKyAqIFJFVDA6CXN0YXR1cworICovCisjZGVmaW5lIEhWX0ZBU1RfTERDX1VOTUFQCQkweGVlCisKKy8qIGxkY19yZXZva2UoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfUkVWT0tFCisgKiBBUkcwOgljaGFubmVsIElECisgKiBBUkcxOgljb29raWUKKyAqIEFSRzI6CWxkY19tdGFibGVfZW50cnkgY29va2llCisgKiBSRVQwOglzdGF0dXMKKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19SRVZPS0UJCTB4ZWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY190eF9xY29uZih1bnNpZ25lZCBsb25nIGNoYW5uZWwsCisJCQkJCXVuc2lnbmVkIGxvbmcgcmEsCisJCQkJCXVuc2lnbmVkIGxvbmcgbnVtX2VudHJpZXMpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3R4X3FpbmZvKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKKwkJCQkJdW5zaWduZWQgbG9uZyAqcmEsCisJCQkJCXVuc2lnbmVkIGxvbmcgKm51bV9lbnRyaWVzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY190eF9nZXRfc3RhdGUodW5zaWduZWQgbG9uZyBjaGFubmVsLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqaGVhZF9vZmYsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICp0YWlsX29mZiwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmNoYW5fc3RhdGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3R4X3NldF9xdGFpbCh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHRhaWxfb2ZmKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY19yeF9xY29uZih1bnNpZ25lZCBsb25nIGNoYW5uZWwsCisJCQkJCXVuc2lnbmVkIGxvbmcgcmEsCisJCQkJCXVuc2lnbmVkIGxvbmcgbnVtX2VudHJpZXMpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3J4X3FpbmZvKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKKwkJCQkJdW5zaWduZWQgbG9uZyAqcmEsCisJCQkJCXVuc2lnbmVkIGxvbmcgKm51bV9lbnRyaWVzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY19yeF9nZXRfc3RhdGUodW5zaWduZWQgbG9uZyBjaGFubmVsLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqaGVhZF9vZmYsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICp0YWlsX29mZiwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmNoYW5fc3RhdGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3J4X3NldF9xaGVhZCh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGhlYWRfb2ZmKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY19zZXRfbWFwX3RhYmxlKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHJhLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbnVtX2VudHJpZXMpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX2dldF9tYXBfdGFibGUodW5zaWduZWQgbG9uZyBjaGFubmVsLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKnJhLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKm51bV9lbnRyaWVzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY19jb3B5KHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBkaXJfY29kZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB0Z3RfcmFkZHIsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgbGNsX3JhZGRyLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqYWN0dWFsX2xlbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfbWFwaW4odW5zaWduZWQgbG9uZyBjaGFubmVsLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBjb29raWUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nICpyYSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKnBlcm0pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3VubWFwKHVuc2lnbmVkIGxvbmcgcmEpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3Jldm9rZSh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBjb29raWUsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBtdGVfY29va2llKTsKKyNlbmRpZgorCisvKiBQZXJmb3JtYW5jZSBjb3VudGVyIHNlcnZpY2VzLiAgKi8KKworI2RlZmluZSBIVl9QRVJGX0pCVVNfUEVSRl9DVFJMX1JFRwkweDAwCisjZGVmaW5lIEhWX1BFUkZfSkJVU19QRVJGX0NOVF9SRUcJMHgwMQorI2RlZmluZSBIVl9QRVJGX0RSQU1fUEVSRl9DVFJMX1JFR18wCTB4MDIKKyNkZWZpbmUgSFZfUEVSRl9EUkFNX1BFUkZfQ05UX1JFR18wCTB4MDMKKyNkZWZpbmUgSFZfUEVSRl9EUkFNX1BFUkZfQ1RSTF9SRUdfMQkweDA0CisjZGVmaW5lIEhWX1BFUkZfRFJBTV9QRVJGX0NOVF9SRUdfMQkweDA1CisjZGVmaW5lIEhWX1BFUkZfRFJBTV9QRVJGX0NUUkxfUkVHXzIJMHgwNgorI2RlZmluZSBIVl9QRVJGX0RSQU1fUEVSRl9DTlRfUkVHXzIJMHgwNworI2RlZmluZSBIVl9QRVJGX0RSQU1fUEVSRl9DVFJMX1JFR18zCTB4MDgKKyNkZWZpbmUgSFZfUEVSRl9EUkFNX1BFUkZfQ05UX1JFR18zCTB4MDkKKworLyogZ2V0X3BlcmZyZWcoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9HRVRfUEVSRlJFRworICogQVJHMDoJcGVyZm9ybWFuY2UgcmVnIG51bWJlcgorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglwZXJmb3JtYW5jZSByZWcgdmFsdWUKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHBlcmZvcm1hbmNlIHJlZ2lzdGVyIG51bWJlcgorICoJCUVOT0FDQ0VTUwlObyBhY2Nlc3MgYWxsb3dlZCB0byBwZXJmb3JtYW5jZSBjb3VudGVycworICoKKyAqIFJlYWQgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBEUkFNL0pCVVMgcGVyZm9ybWFuY2UgY291bnRlci9jb250cm9sIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEhWX0ZBU1RfR0VUX1BFUkZSRUcJCTB4MTAwCisKKy8qIHNldF9wZXJmcmVnKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfU0VUX1BFUkZSRUcKKyAqIEFSRzA6CXBlcmZvcm1hbmNlIHJlZyBudW1iZXIKKyAqIEFSRzE6CXBlcmZvcm1hbmNlIHJlZyB2YWx1ZQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBwZXJmb3JtYW5jZSByZWdpc3RlciBudW1iZXIKKyAqCQlFTk9BQ0NFU1MJTm8gYWNjZXNzIGFsbG93ZWQgdG8gcGVyZm9ybWFuY2UgY291bnRlcnMKKyAqCisgKiBXcml0ZSB0aGUgZ2l2ZW4gcGVyZm9ybWFuY2UgcmVnIHZhbHVlIHRvIHRoZSBnaXZlbiBEUkFNL0pCVVMKKyAqIHBlcmZvcm1hbmNlIGNvdW50ZXIvY29udHJvbCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBIVl9GQVNUX1NFVF9QRVJGUkVHCQkweDEwMQorCisvKiBNTVUgc3RhdGlzdGljcyBzZXJ2aWNlcy4KKyAqCisgKiBUaGUgaHlwZXJ2aXNvciBtYWludGFpbnMgTU1VIHN0YXRpc3RpY3MgYW5kIHByaXZpbGVnZWQgY29kZSBwcm92aWRlcworICogYSBidWZmZXIgd2hlcmUgdGhlc2Ugc3RhdGlzdGljcyBjYW4gYmUgY29sbGVjdGVkLiAgSXQgaXMgY29udGludWFsbHkKKyAqIHVwZGF0ZWQgb25jZSBjb25maWd1cmVkLiAgVGhlIGxheW91dCBpcyBhcyBmb2xsb3dzOgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IGh2X21tdV9zdGF0aXN0aWNzIHsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX2hpdHNfY3R4MF84a190dGU7CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl90aWNrc19jdHgwXzhrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX2hpdHNfY3R4MF82NGtfdHRlOworCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfdGlja3NfY3R4MF82NGtfdHRlOworCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDFbMl07CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl9oaXRzX2N0eDBfNG1iX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX3RpY2tzX2N0eDBfNG1iX3R0ZTsKKwl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQyWzJdOworCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfaGl0c19jdHgwXzI1Nm1iX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX3RpY2tzX2N0eDBfMjU2bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDNbNF07CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl9oaXRzX2N0eG5vbjBfOGtfdHRlOworCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfdGlja3NfY3R4bm9uMF84a190dGU7CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl9oaXRzX2N0eG5vbjBfNjRrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX3RpY2tzX2N0eG5vbjBfNjRrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQ0WzJdOworCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfaGl0c19jdHhub24wXzRtYl90dGU7CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl90aWNrc19jdHhub24wXzRtYl90dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkNVsyXTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX2hpdHNfY3R4bm9uMF8yNTZtYl90dGU7CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl90aWNrc19jdHhub24wXzI1Nm1iX3R0ZTsKKwl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQ2WzRdOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfaGl0c19jdHgwXzhrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX3RpY2tzX2N0eDBfOGtfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfaGl0c19jdHgwXzY0a190dGU7CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl90aWNrc19jdHgwXzY0a190dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkN1syXTsKKwl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX2hpdHNfY3R4MF80bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4MF80bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDhbMl07CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl9oaXRzX2N0eDBfMjU2bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4MF8yNTZtYl90dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkOVs0XTsKKwl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX2hpdHNfY3R4bm9uMF84a190dGU7CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl90aWNrc19jdHhub24wXzhrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX2hpdHNfY3R4bm9uMF82NGtfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4bm9uMF82NGtfdHRlOworCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDEwWzJdOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfaGl0c19jdHhub24wXzRtYl90dGU7CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl90aWNrc19jdHhub24wXzRtYl90dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkMTFbMl07CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl9oaXRzX2N0eG5vbjBfMjU2bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4bm9uMF8yNTZtYl90dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkMTJbNF07Cit9OworI2VuZGlmCisKKy8qIG1tdXN0YXRfY29uZigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVVNUQVRfQ09ORgorICogQVJHMDoJcmVhbCBhZGRyZXNzCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlYWwgYWRkcmVzcworICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVCQURBTElHTglSZWFsIGFkZHJlc3Mgbm90IGFsaWduZWQgb24gNjQtYnl0ZSBib3VuZGFyeQorICoJCUVCQURUUkFQCUFQSSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcHJvY2Vzc29yCisgKgorICogRW5hYmxlIE1NVSBzdGF0aXN0aWMgZ2F0aGVyaW5nIHVzaW5nIHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIHJlYWwKKyAqIGFkZHJlc3Mgb24gdGhlIGN1cnJlbnQgdmlydHVhbCBDUFUuICBUaGUgbmV3IGJ1ZmZlciByZWFsIGFkZHJlc3MKKyAqIGlzIGdpdmVuIGluIEFSRzEsIGFuZCB0aGUgcHJldmlvdXNseSBzcGVjaWZpZWQgYnVmZmVyIHJlYWwgYWRkcmVzcworICogaXMgcmV0dXJuZWQgaW4gUkVUMSwgb3IgaXMgcmV0dXJuZWQgYXMgemVybyBmb3IgdGhlIGZpcnN0IGludm9jYXRpb24uCisgKgorICogSWYgdGhlIHBhc3NlZCBpbiByZWFsIGFkZHJlc3MgYXJndW1lbnQgaXMgemVybywgdGhpcyB3aWxsIGRpc2FibGUKKyAqIE1NVSBzdGF0aXN0aWMgY29sbGVjdGlvbiBvbiB0aGUgY3VycmVudCB2aXJ0dWFsIENQVS4gIElmIGFuIGVycm9yIGlzCisgKiByZXR1cm5lZCB0aGVuIG5vIHN0YXRpc3RpY3MgYXJlIGNvbGxlY3RlZC4KKyAqCisgKiBUaGUgYnVmZmVyIGNvbnRlbnRzIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byBhbGwgemVyb3MgYmVmb3JlIGJlaW5nCisgKiBnaXZlbiB0byB0aGUgaHlwZXJ2aXNvciBvciBlbHNlIHRoZSBzdGF0aXN0aWNzIHdpbGwgYmUgbWVhbmluZ2xlc3MuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NTVVTVEFUX0NPTkYJCTB4MTAyCisKKy8qIG1tdXN0YXRfaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVVNUQVRfSU5GTworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglyZWFsIGFkZHJlc3MKKyAqIEVSUk9SUzoJRUJBRFRSQVAJQVBJIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3IKKyAqCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHJlYWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKKyAqIE1NVSBzdGF0aXN0aWNzIGJ1ZmZlciBvbiB0aGUgY3VycmVudCB2aXJ0dWFsIENQVS4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVVNUQVRfSU5GTwkJMHgxMDMKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21tdXN0YXRfY29uZih1bnNpZ25lZCBsb25nIHJhLCB1bnNpZ25lZCBsb25nICpvcmlnX3JhKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21tdXN0YXRfaW5mbyh1bnNpZ25lZCBsb25nICpyYSk7CisjZW5kaWYKKworLyogTkNTIGNyeXB0byBzZXJ2aWNlcyAgKi8KKworLyogbmNzX3JlcXVlc3QoKSBzdWItZnVuY3Rpb24gbnVtYmVycyAqLworI2RlZmluZSBIVl9OQ1NfUUNPTkYJCQkweDAxCisjZGVmaW5lIEhWX05DU19RVEFJTF9VUERBVEUJCTB4MDIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBodl9uY3NfcXVldWVfZW50cnkgeworCS8qIE1BVSBDb250cm9sIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwltYXVfY29udHJvbDsKKyNkZWZpbmUgTUFVX0NPTlRST0xfSU5WX1BBUklUWQkweDAwMDAwMDAwMDAwMDIwMDAKKyNkZWZpbmUgTUFVX0NPTlRST0xfU1RSQU5ECTB4MDAwMDAwMDAwMDAwMTgwMAorI2RlZmluZSBNQVVfQ09OVFJPTF9CVVNZCTB4MDAwMDAwMDAwMDAwMDQwMAorI2RlZmluZSBNQVVfQ09OVFJPTF9JTlQJCTB4MDAwMDAwMDAwMDAwMDIwMAorI2RlZmluZSBNQVVfQ09OVFJPTF9PUAkJMHgwMDAwMDAwMDAwMDAwMWMwCisjZGVmaW5lIE1BVV9DT05UUk9MX09QX1NISUZUCTYKKyNkZWZpbmUgTUFVX09QX0xPQURfTUFfTUVNT1JZCTB4MAorI2RlZmluZSBNQVVfT1BfU1RPUkVfTUFfTUVNT1JZCTB4MQorI2RlZmluZSBNQVVfT1BfTU9EVUxBUl9NVUxUCTB4MgorI2RlZmluZSBNQVVfT1BfTU9EVUxBUl9SRURVQ0UJMHgzCisjZGVmaW5lIE1BVV9PUF9NT0RVTEFSX0VYUF9MT09QCTB4NAorI2RlZmluZSBNQVVfQ09OVFJPTF9MRU4JCTB4MDAwMDAwMDAwMDAwMDAzZgorI2RlZmluZSBNQVVfQ09OVFJPTF9MRU5fU0hJRlQJMAorCisJLyogUmVhbCBhZGRyZXNzIG9mIGJ5dGVzIHRvIGxvYWQgb3Igc3RvcmUgYnl0ZXMKKwkgKiBpbnRvL291dC1vZiB0aGUgTUFVLgorCSAqLworCXVuc2lnbmVkIGxvbmcJbWF1X21wYTsKKworCS8qIE1vZHVsYXIgQXJpdGhtZXRpYyBNQSBPZmZzZXQgUmVnaXN0ZXIuICAqLworCXVuc2lnbmVkIGxvbmcJbWF1X21hOworCisJLyogTW9kdWxhciBBcml0aG1ldGljIE4gUHJpbWUgUmVnaXN0ZXIuICAqLworCXVuc2lnbmVkIGxvbmcJbWF1X25wOworfTsKKworc3RydWN0IGh2X25jc19xY29uZl9hcmcgeworCXVuc2lnbmVkIGxvbmcJbWlkOyAgICAgIC8qIE1BVSBJRCwgMSBwZXIgY29yZSBvbiBOaWFnYXJhICovCisJdW5zaWduZWQgbG9uZwliYXNlOyAgICAgLyogUmVhbCBhZGRyZXNzIGJhc2Ugb2YgcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nCWVuZDsJICAvKiBSZWFsIGFkZHJlc3MgZW5kIG9mIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZwludW1fZW50czsgLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gcXVldWUgKi8KK307CisKK3N0cnVjdCBodl9uY3NfcXRhaWxfdXBkYXRlX2FyZyB7CisJdW5zaWduZWQgbG9uZwltaWQ7ICAgICAgLyogTUFVIElELCAxIHBlciBjb3JlIG9uIE5pYWdhcmEgKi8KKwl1bnNpZ25lZCBsb25nCXRhaWw7ICAgICAvKiBOZXcgdGFpbCBpbmRleCB0byB1c2UgKi8KKwl1bnNpZ25lZCBsb25nCXN5bmNmbGFnOyAvKiBvbmx5IFNZTkNGTEFHX1NZTkMgaXMgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgSFZfTkNTX1NZTkNGTEFHX1NZTkMJMHgwMAorI2RlZmluZSBIVl9OQ1NfU1lOQ0ZMQUdfQVNZTkMJMHgwMQorfTsKKyNlbmRpZgorCisvKiBuY3NfcmVxdWVzdCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX05DU19SRVFVRVNUCisgKiBBUkcwOglOQ1Mgc3ViLWZ1bmN0aW9uCisgKiBBUkcxOglzdWItZnVuY3Rpb24gYXJndW1lbnQgcmVhbCBhZGRyZXNzCisgKiBBUkcyOglzaXplIGluIGJ5dGVzIG9mIHN1Yi1mdW5jdGlvbiBhcmd1bWVudAorICogUkVUMDoJc3RhdHVzCisgKgorICogVGhlIE1BVSBjaGlwIG9mIHRoZSBOaWFnYXJhIHByb2Nlc3NvciBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZQorICogdG8gcHJpdmlsZWdlZCBjb2RlLCBpbnN0ZWFkIGl0IGlzIHByb2dyYW1tZWQgaW5kaXJlY3RseSB2aWEgdGhpcworICogaHlwZXJ2aXNvciBBUEkuCisgKgorICogVGhlIGludGVyZmFjZXMgZGVmaW5lcyBhIHF1ZXVlIG9mIE1BVSBvcGVyYXRpb25zIHRvIHBlcmZvcm0uCisgKiBQcml2aWxlZ2VkIGNvZGUgcmVnaXN0ZXJzIGEgcXVldWUgd2l0aCB0aGUgaHlwZXJ2aXNvciBieSBpbnZva2luZworICogdGhpcyBIVkFQSSB3aXRoIHRoZSBIVl9OQ1NfUUNPTkYgc3ViLWZ1bmN0aW9uLCB3aGljaCBkZWZpbmVzIHRoZQorICogYmFzZSwgZW5kLCBhbmQgbnVtYmVyIG9mIGVudHJpZXMgb2YgdGhlIHF1ZXVlLiAgRWFjaCBxdWV1ZSBlbnRyeQorICogY29udGFpbnMgYSBNQVUgcmVnaXN0ZXIgc3RydWN0IGJsb2NrLgorICoKKyAqIFRoZSBwcml2aWxlZ2VkIGNvZGUgdGhlbiBwcm9jZWVkcyB0byBhZGQgZW50cmllcyB0byB0aGUgcXVldWUgYW5kCisgKiB0aGVuIGludm9rZSB0aGUgSFZfTkNTX1FUQUlMX1VQREFURSBzdWItZnVuY3Rpb24uICBTaW5jZSBvbmx5CisgKiBzeW5jaHJvbm91cyBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgaHlwZXJ2aXNvciwKKyAqIEhWX05DU19RVEFJTF9VUERBVEUgd2lsbCBydW4gYWxsIHRoZSBwZW5kaW5nIHF1ZXVlIGVudHJpZXMgdG8KKyAqIGNvbXBsZXRpb24gYW5kIHJldHVybiBIVl9FT0ssIG9yIHJldHVybiBhbiBlcnJvciBjb2RlLgorICoKKyAqIFRoZSByZWFsIGFkZHJlc3Mgb2YgdGhlIHN1Yi1mdW5jdGlvbiBhcmd1bWVudCBtdXN0IGJlIGFsaWduZWQgb24gYXQKKyAqIGxlYXN0IGFuIDgtYnl0ZSBib3VuZGFyeS4KKyAqCisgKiBUaGUgdGFpbCBhcmd1bWVudCBvZiBIVl9OQ1NfUVRBSUxfVVBEQVRFIGlzIGFuIGluZGV4LCBub3QgYSBieXRlCisgKiBvZmZzZXQsIGludG8gdGhlIHF1ZXVlIGFuZCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0aGUgJ251bV9lbnRzJworICogYXJndW1lbnQgZ2l2ZW4gaW4gdGhlIEhWX05DU19RQ09ORiBjYWxsLgorICovCisjZGVmaW5lIEhWX0ZBU1RfTkNTX1JFUVVFU1QJCTB4MTEwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9uY3NfcmVxdWVzdCh1bnNpZ25lZCBsb25nIHJlcXVlc3QsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnX3JhLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZ19zaXplKTsKKyNlbmRpZgorCisjZGVmaW5lIEhWX0ZBU1RfRklSRV9HRVRfUEVSRlJFRwkweDEyMAorI2RlZmluZSBIVl9GQVNUX0ZJUkVfU0VUX1BFUkZSRUcJMHgxMjEKKworLyogRnVuY3Rpb24gbnVtYmVycyBmb3IgSFZfQ09SRV9UUkFQLiAgKi8KKyNkZWZpbmUgSFZfQ09SRV9TRVRfVkVSCQkJMHgwMAorI2RlZmluZSBIVl9DT1JFX1BVVENIQVIJCQkweDAxCisjZGVmaW5lIEhWX0NPUkVfRVhJVAkJCTB4MDIKKyNkZWZpbmUgSFZfQ09SRV9HRVRfVkVSCQkJMHgwMworCisvKiBIeXBlcnZpc29yIEFQSSBncm91cHMgZm9yIHVzZSB3aXRoIEhWX0NPUkVfU0VUX1ZFUiBhbmQKKyAqIEhWX0NPUkVfR0VUX1ZFUi4KKyAqLworI2RlZmluZSBIVl9HUlBfU1VONFYJCQkweDAwMDAKKyNkZWZpbmUgSFZfR1JQX0NPUkUJCQkweDAwMDEKKyNkZWZpbmUgSFZfR1JQX0lOVFIJCQkweDAwMDIKKyNkZWZpbmUgSFZfR1JQX1NPRlRfU1RBVEUJCTB4MDAwMworI2RlZmluZSBIVl9HUlBfUENJCQkJMHgwMTAwCisjZGVmaW5lIEhWX0dSUF9MRE9NCQkJMHgwMTAxCisjZGVmaW5lIEhWX0dSUF9TVkNfQ0hBTgkJCTB4MDEwMgorI2RlZmluZSBIVl9HUlBfTkNTCQkJMHgwMTAzCisjZGVmaW5lIEhWX0dSUF9STkcJCQkweDAxMDQKKyNkZWZpbmUgSFZfR1JQX05JQUdfUEVSRgkJMHgwMjAwCisjZGVmaW5lIEhWX0dSUF9GSVJFX1BFUkYJCTB4MDIwMQorI2RlZmluZSBIVl9HUlBfTjJfQ1BVCQkJMHgwMjAyCisjZGVmaW5lIEhWX0dSUF9OSVUJCQkweDAyMDQKKyNkZWZpbmUgSFZfR1JQX1ZGX0NQVQkJCTB4MDIwNQorI2RlZmluZSBIVl9HUlBfRElBRwkJCTB4MDMwMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfZ2V0X3ZlcnNpb24odW5zaWduZWQgbG9uZyBncm91cCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqbWFqb3IsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm1pbm9yKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3NldF92ZXJzaW9uKHVuc2lnbmVkIGxvbmcgZ3JvdXAsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWFqb3IsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWlub3IsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmFjdHVhbF9taW5vcik7CisKK2V4dGVybiBpbnQgc3VuNHZfaHZhcGlfcmVnaXN0ZXIodW5zaWduZWQgbG9uZyBncm91cCwgdW5zaWduZWQgbG9uZyBtYWpvciwKKwkJCQl1bnNpZ25lZCBsb25nICptaW5vcik7CitleHRlcm4gdm9pZCBzdW40dl9odmFwaV91bnJlZ2lzdGVyKHVuc2lnbmVkIGxvbmcgZ3JvdXApOworZXh0ZXJuIGludCBzdW40dl9odmFwaV9nZXQodW5zaWduZWQgbG9uZyBncm91cCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm1ham9yLAorCQkJICAgdW5zaWduZWQgbG9uZyAqbWlub3IpOworZXh0ZXJuIHZvaWQgc3VuNHZfaHZhcGlfaW5pdCh2b2lkKTsKKyNlbmRpZgorCisjZW5kaWYgLyogIShfU1BBUkM2NF9IWVBFUlZJU09SX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2lkZS5oCmluZGV4IGFmZDE3MzYuLjg3OWZjZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2lkZS5oCkBAIC0xMCw5ICsxMCwxNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpZmRlZiBDT05GSUdfU1BBUkM2NAorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wc3IuaD4KKyNlbmRpZgogCiAjdW5kZWYgIE1BWF9IV0lGUwogI2RlZmluZSBNQVhfSFdJRlMJMgpAQCAtMjgsNTAgKzM1LDQ2IEBACiAjZGVmaW5lIF9faWRlX21tX291dHN3CV9faWRlX291dHN3CiAjZGVmaW5lIF9faWRlX21tX291dHNsCV9faWRlX291dHNsCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwKLQkJCQkgIHZvaWQgKmRzdCwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfaW5zdyh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmRzdCwgdTMyIGNvdW50KQogewotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpkYXRhX3BvcnQ7Ci0JLyogdW5zaWduZWQgbG9uZyBlbmQgPSAodW5zaWduZWQgbG9uZylkc3QgKyAoY291bnQgPDwgMSk7ICovIC8qIFAzICovCisjaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NCkgJiYgZGVmaW5lZChEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUpCisJdW5zaWduZWQgbG9uZyBlbmQgPSAodW5zaWduZWQgbG9uZylkc3QgKyAoY291bnQgPDwgMSk7CisjZW5kaWYKIAl1MTYgKnBzID0gZHN0OwogCXUzMiAqcGk7CiAKLQlkYXRhX3BvcnQgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0OwotCiAJaWYoKCh1bnNpZ25lZCBsb25nKXBzKSAmIDB4MikgewotCQkqcHMrKyA9ICpkYXRhX3BvcnQ7CisJCSpwcysrID0gX19yYXdfcmVhZHcocG9ydCk7CiAJCWNvdW50LS07CiAJfQogCXBpID0gKHUzMiAqKXBzOwogCXdoaWxlKGNvdW50ID49IDIpIHsKIAkJdTMyIHc7CiAKLQkJdyAgPSAoKmRhdGFfcG9ydCkgPDwgMTY7Ci0JCXcgfD0gKCpkYXRhX3BvcnQpOworCQl3ICA9IF9fcmF3X3JlYWR3KHBvcnQpIDw8IDE2OworCQl3IHw9IF9fcmF3X3JlYWR3KHBvcnQpOwogCQkqcGkrKyA9IHc7CiAJCWNvdW50IC09IDI7CiAJfQogCXBzID0gKHUxNiAqKXBpOwogCWlmKGNvdW50KQotCQkqcHMrKyA9ICpkYXRhX3BvcnQ7CisJCSpwcysrID0gX19yYXdfcmVhZHcocG9ydCk7CiAKLQkvKiBfX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylkc3QsIGVuZCk7ICovIC8qIFAzIHNlZSBobWUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KSAmJiBkZWZpbmVkKERDQUNIRV9BTElBU0lOR19QT1NTSUJMRSkKKwlfX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylkc3QsIGVuZCk7CisjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9faWRlX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwKLQkJCQkgICBjb25zdCB2b2lkICpzcmMsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9vdXRzdyh2b2lkIF9faW9tZW0gKnBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdTMyIGNvdW50KQogewotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpkYXRhX3BvcnQ7Ci0JLyogdW5zaWduZWQgbG9uZyBlbmQgPSAodW5zaWduZWQgbG9uZylzcmMgKyAoY291bnQgPDwgMSk7ICovCisjaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NCkgJiYgZGVmaW5lZChEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUpCisJdW5zaWduZWQgbG9uZyBlbmQgPSAodW5zaWduZWQgbG9uZylzcmMgKyAoY291bnQgPDwgMSk7CisjZW5kaWYKIAljb25zdCB1MTYgKnBzID0gc3JjOwogCWNvbnN0IHUzMiAqcGk7CiAKLQlkYXRhX3BvcnQgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0OwotCiAJaWYoKCh1bnNpZ25lZCBsb25nKXNyYykgJiAweDIpIHsKLQkJKmRhdGFfcG9ydCA9ICpwcysrOworCQlfX3Jhd193cml0ZXcoKnBzKyssIHBvcnQpOwogCQljb3VudC0tOwogCX0KIAlwaSA9IChjb25zdCB1MzIgKilwczsKQEAgLTc5LDE1ICs4MiwxNyBAQAogCQl1MzIgdzsKIAogCQl3ID0gKnBpKys7Ci0JCSpkYXRhX3BvcnQgPSAodyA+PiAxNik7Ci0JCSpkYXRhX3BvcnQgPSB3OworCQlfX3Jhd193cml0ZXcoKHcgPj4gMTYpLCBwb3J0KTsKKwkJX19yYXdfd3JpdGV3KHcsIHBvcnQpOwogCQljb3VudCAtPSAyOwogCX0KIAlwcyA9IChjb25zdCB1MTYgKilwaTsKIAlpZihjb3VudCkKLQkJKmRhdGFfcG9ydCA9ICpwczsKKwkJX19yYXdfd3JpdGV3KCpwcywgcG9ydCk7CiAKLQkvKiBfX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzcmMsIGVuZCk7ICovIC8qIFAzIHNlZSBobWUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KSAmJiBkZWZpbmVkKERDQUNIRV9BTElBU0lOR19QT1NTSUJMRSkKKwlfX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzcmMsIGVuZCk7CisjZW5kaWYKIH0KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lkcHJvbS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaWRwcm9tLmgKaW5kZXggNDFhZGI0MS4uNjk3NmFhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvaWRwcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaWRwcm9tLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogaWRwcm9tLmg6IE1hY3JvcyBhbmQgZGVmaW5lcyBmb3IgaWRwcm9tIHJvdXRpbmVzCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5NSwxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqLwogCiAjaWZuZGVmIF9TUEFSQ19JRFBST01fSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaW50cl9xdWV1ZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaW50cl9xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNjA3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pbnRyX3F1ZXVlLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfU1BBUkM2NF9JTlRSX1FVRVVFX0gKKyNkZWZpbmUgX1NQQVJDNjRfSU5UUl9RVUVVRV9ICisKKy8qIFN1bjR2IGludGVycnVwdCBxdWV1ZSByZWdpc3RlcnMsIGFjY2Vzc2VkIHZpYSBBU0lfUVVFVUUuICAqLworCisjZGVmaW5lIElOVFJRX0NQVV9NT05ET19IRUFECSAgMHgzYzAgLyogQ1BVIG1vbmRvIGhlYWQJICAgICAgICAgICovCisjZGVmaW5lIElOVFJRX0NQVV9NT05ET19UQUlMCSAgMHgzYzggLyogQ1BVIG1vbmRvIHRhaWwJICAgICAgICAgICovCisjZGVmaW5lIElOVFJRX0RFVklDRV9NT05ET19IRUFECSAgMHgzZDAgLyogRGV2aWNlIG1vbmRvIGhlYWQJICAgICAgICAgICovCisjZGVmaW5lIElOVFJRX0RFVklDRV9NT05ET19UQUlMCSAgMHgzZDggLyogRGV2aWNlIG1vbmRvIHRhaWwJICAgICAgICAgICovCisjZGVmaW5lIElOVFJRX1JFU1VNX01PTkRPX0hFQUQJICAweDNlMCAvKiBSZXN1bWFibGUgZXJyb3IgbW9uZG8gaGVhZCAgICAgKi8KKyNkZWZpbmUgSU5UUlFfUkVTVU1fTU9ORE9fVEFJTAkgIDB4M2U4IC8qIFJlc3VtYWJsZSBlcnJvciBtb25kbyB0YWlsICAgICAqLworI2RlZmluZSBJTlRSUV9OT05SRVNVTV9NT05ET19IRUFEIDB4M2YwIC8qIE5vbi1yZXN1bWFibGUgZXJyb3IgbW9uZG8gaGVhZCAqLworI2RlZmluZSBJTlRSUV9OT05SRVNVTV9NT05ET19UQUlMIDB4M2Y4IC8qIE5vbi1yZXN1bWFibGUgZXJyb3IgbW9uZG8gaGVhZCAqLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9JTlRSX1FVRVVFX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pby5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaW8uaAppbmRleCAzYTNlN2JkLi5mYzkwMjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2lvLmgKQEAgLTEsMzI1ICsxLDggQEAKLSNpZm5kZWYgX19TUEFSQ19JT19ICi0jZGVmaW5lIF9fU1BBUkNfSU9fSAotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4gIC8qIHN0cnVjdCByZXNvdXJjZSAqLwotCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4gICAgICAvKiBJTyBhZGRyZXNzIG1hcHBpbmcgcm91dGluZXMgbmVlZCB0aGlzICovCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi0jZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkoKChwYWdlKSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCi0KLXN0YXRpYyBpbmxpbmUgdTMyIGZsaXBfZHdvcmQgKHUzMiBsKQotewotCXJldHVybiAoKGwmMHhmZik8PDI0KSB8ICgoKGw+PjgpJjB4ZmYpPDwxNikgfCAoKChsPj4xNikmMHhmZik8PDgpfCAoKGw+PjI0KSYweGZmKTsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgZmxpcF93b3JkICh1MTYgdykKLXsKLQlyZXR1cm4gKCh3JjB4ZmYpIDw8IDgpIHwgKCh3Pj44KSYweGZmKTsKLX0KLQotI2RlZmluZSBtbWlvd2IoKQotCi0vKgotICogTWVtb3J5IG1hcHBlZCBJL08gdG8gUENJCi0gKi8KLQotc3RhdGljIGlubGluZSB1OCBfX3Jhd19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSB1OCAqKWFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IF9fcmF3X3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIHUxNiAqKWFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIF9fcmF3X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWIodTggYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCSooX19mb3JjZSB2b2xhdGlsZSB1OCAqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHUxNiB3LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JKihfX2ZvcmNlIHZvbGF0aWxlIHUxNiAqKWFkZHIgPSB3OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVsKHUzMiBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHIgPSBsOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IF9fcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgdTggKilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBfX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gZmxpcF93b3JkKCooX19mb3JjZSB2b2xhdGlsZSB1MTYgKilhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgX19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JcmV0dXJuIGZsaXBfZHdvcmQoKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZWIodTggYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCSooX19mb3JjZSB2b2xhdGlsZSB1OCAqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZXcodTE2IHcsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQkqKF9fZm9yY2Ugdm9sYXRpbGUgdTE2ICopYWRkciA9IGZsaXBfd29yZCh3KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVsKHUzMiBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHIgPSBmbGlwX2R3b3JkKGwpOwotfQotCi0jZGVmaW5lIHJlYWRiKF9fYWRkcikJCV9fcmVhZGIoX19hZGRyKQotI2RlZmluZSByZWFkdyhfX2FkZHIpCQlfX3JlYWR3KF9fYWRkcikKLSNkZWZpbmUgcmVhZGwoX19hZGRyKQkJX19yZWFkbChfX2FkZHIpCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQoX19hZGRyKQlyZWFkYihfX2FkZHIpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoX19hZGRyKQlyZWFkdyhfX2FkZHIpCi0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQoX19hZGRyKQlyZWFkbChfX2FkZHIpCi0KLSNkZWZpbmUgd3JpdGViKF9fYiwgX19hZGRyKQlfX3dyaXRlYigoX19iKSwoX19hZGRyKSkKLSNkZWZpbmUgd3JpdGV3KF9fdywgX19hZGRyKQlfX3dyaXRldygoX193KSwoX19hZGRyKSkKLSNkZWZpbmUgd3JpdGVsKF9fbCwgX19hZGRyKQlfX3dyaXRlbCgoX19sKSwoX19hZGRyKSkKLQotLyoKLSAqIEkvTyBzcGFjZSBvcGVyYXRpb25zCi0gKgotICogQXJyYW5nZW1lbnQgb24gYSBTdW4gaXMgc29tZXdoYXQgY29tcGxpY2F0ZWQuCi0gKgotICogRmlyc3Qgb2YgYWxsLCB3ZSB3YW50IHRvIHVzZSBzdGFuZGFyZCBMaW51eCBkcml2ZXJzCi0gKiBmb3Iga2V5Ym9hcmQsIFBDIHNlcmlhbCwgZXRjLiBUaGVzZSBkcml2ZXJzIHRoaW5rCi0gKiB0aGV5IGFjY2VzcyBJL08gc3BhY2UgYW5kIHVzZSBpbmIvb3V0Yi4KLSAqIE9uIHRoZSBvdGhlciBoYW5kLCBFQnVzIGJyaWRnZSBhY2NlcHRzIFBDSSAqbWVtb3J5KgotICogY3ljbGVzIGFuZCBjb252ZXJ0cyB0aGVtIGludG8gSVNBICpJL08qIGN5Y2xlcy4KLSAqIEVyZ28sIHdlIHdhbnQgaW5iICYgb3V0YiB0byBnZW5lcmF0ZSBQQ0kgbWVtb3J5IGN5Y2xlcy4KLSAqCi0gKiBJZiB3ZSB3YW50IHRvIGlzc3VlIFBDSSAqSS9PKiBjeWNsZXMsIHdlIGRvIHRoaXMKLSAqIHdpdGggYSBsb3cgNjRLIGZpeGVkIHdpbmRvdyBpbiBQQ0lDLiBUaGlzIHdpbmRvdyBnZXRzCi0gKiBtYXBwZWQgc29tZXdoZXJlIGludG8gdmlydHVhbCBrZXJuZWwgc3BhY2UgYW5kIHdlCi0gKiBjYW4gdXNlIGluYi9vdXRiIGFnYWluLgotICovCi0jZGVmaW5lIGluYl9sb2NhbChfX2FkZHIpCV9fcmVhZGIoKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQotI2RlZmluZSBpbmIoX19hZGRyKQkJX19yZWFkYigodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpCi0jZGVmaW5lIGludyhfX2FkZHIpCQlfX3JlYWR3KCh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykoX19hZGRyKSkKLSNkZWZpbmUgaW5sKF9fYWRkcikJCV9fcmVhZGwoKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQotCi0jZGVmaW5lIG91dGJfbG9jYWwoX19iLCBfX2FkZHIpCV9fd3JpdGViKF9fYiwgKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQotI2RlZmluZSBvdXRiKF9fYiwgX19hZGRyKQlfX3dyaXRlYihfX2IsICh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykoX19hZGRyKSkKLSNkZWZpbmUgb3V0dyhfX3csIF9fYWRkcikJX193cml0ZXcoX193LCAodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpCi0jZGVmaW5lIG91dGwoX19sLCBfX2FkZHIpCV9fd3JpdGVsKF9fbCwgKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQotCi0jZGVmaW5lIGluYl9wKF9fYWRkcikJCWluYihfX2FkZHIpCi0jZGVmaW5lIG91dGJfcChfX2IsIF9fYWRkcikJb3V0YihfX2IsIF9fYWRkcikKLSNkZWZpbmUgaW53X3AoX19hZGRyKQkJaW53KF9fYWRkcikKLSNkZWZpbmUgb3V0d19wKF9fdywgX19hZGRyKQlvdXR3KF9fdywgX19hZGRyKQotI2RlZmluZSBpbmxfcChfX2FkZHIpCQlpbmwoX19hZGRyKQotI2RlZmluZSBvdXRsX3AoX19sLCBfX2FkZHIpCW91dGwoX19sLCBfX2FkZHIpCi0KLXZvaWQgb3V0c2IodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKLXZvaWQgb3V0c3codW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKLXZvaWQgb3V0c2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKLXZvaWQgaW5zYih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci12b2lkIGluc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotdm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCi0KLS8qCi0gKiBTQnVzIGFjY2Vzc29ycy4KLSAqCi0gKiBTQnVzIGhhcyBvbmx5IG9uZSwgbWVtb3J5IG1hcHBlZCwgSS9PIHNwYWNlLgotICogV2UgZG8gbm90IG5lZWQgdG8gZmxpcCBieXRlcyBmb3IgU0J1cyBvZiBjb3Vyc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTggX3NidXNfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgdTggKilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBfc2J1c19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSB1MTYgKilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBfc2J1c19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSB1MzIgKilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX3NidXNfd3JpdGViKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQkqKF9fZm9yY2Ugdm9sYXRpbGUgdTggKilhZGRyID0gYjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRldyh1MTYgdywgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCSooX19mb3JjZSB2b2xhdGlsZSB1MTYgKilhZGRyID0gdzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRlbCh1MzIgbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCSooX19mb3JjZSB2b2xhdGlsZSB1MzIgKilhZGRyID0gbDsKLX0KLQotLyoKLSAqIFRoZSBvbmx5IHJlYXNvbiBmb3IgI2RlZmluZSdzIGlzIHRvIGhpZGUgY2FzdHMgdG8gdW5zaWduZWQgbG9uZy4KLSAqLwotI2RlZmluZSBzYnVzX3JlYWRiKF9fYWRkcikJCV9zYnVzX3JlYWRiKF9fYWRkcikKLSNkZWZpbmUgc2J1c19yZWFkdyhfX2FkZHIpCQlfc2J1c19yZWFkdyhfX2FkZHIpCi0jZGVmaW5lIHNidXNfcmVhZGwoX19hZGRyKQkJX3NidXNfcmVhZGwoX19hZGRyKQotI2RlZmluZSBzYnVzX3dyaXRlYihfX2IsIF9fYWRkcikJX3NidXNfd3JpdGViKF9fYiwgX19hZGRyKQotI2RlZmluZSBzYnVzX3dyaXRldyhfX3csIF9fYWRkcikJX3NidXNfd3JpdGV3KF9fdywgX19hZGRyKQotI2RlZmluZSBzYnVzX3dyaXRlbChfX2wsIF9fYWRkcikJX3NidXNfd3JpdGVsKF9fbCwgX19hZGRyKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2J1c19tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpfX2RzdCwgaW50IGMsIF9fa2VybmVsX3NpemVfdCBuKQotewotCXdoaWxlKG4tLSkgewotCQlzYnVzX3dyaXRlYihjLCBfX2RzdCk7Ci0JCV9fZHN0Kys7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGludCBjLCBfX2tlcm5lbF9zaXplX3QgbikKLXsKLQl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmQgPSBkc3Q7Ci0KLQl3aGlsZSAobi0tKSB7Ci0JCXdyaXRlYihjLCBkKTsKLQkJZCsrOwotCX0KLX0KLQotI2RlZmluZSBtZW1zZXRfaW8oZCxjLHN6KQlfbWVtc2V0X2lvKGQsYyxzeikKLQotc3RhdGljIGlubGluZSB2b2lkCi1fbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc3JjLCBfX2tlcm5lbF9zaXplX3QgbikKLXsKLQljaGFyICpkID0gZHN0OwotCi0Jd2hpbGUgKG4tLSkgewotCQljaGFyIHRtcCA9IHJlYWRiKHNyYyk7Ci0JCSpkKysgPSB0bXA7Ci0JCXNyYysrOwotCX0KLX0KLQotI2RlZmluZSBtZW1jcHlfZnJvbWlvKGQscyxzeikJX21lbWNweV9mcm9taW8oZCxzLHN6KQotCi1zdGF0aWMgaW5saW5lIHZvaWQgCi1fbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgX19rZXJuZWxfc2l6ZV90IG4pCi17Ci0JY29uc3QgY2hhciAqcyA9IHNyYzsKLQl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmQgPSBkc3Q7Ci0KLQl3aGlsZSAobi0tKSB7Ci0JCWNoYXIgdG1wID0gKnMrKzsKLQkJd3JpdGViKHRtcCwgZCk7Ci0JCWQrKzsKLQl9Ci19Ci0KLSNkZWZpbmUgbWVtY3B5X3RvaW8oZCxzLHN6KQlfbWVtY3B5X3RvaW8oZCxzLHN6KQotCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogQnVzIG51bWJlciBtYXkgYmUgZW1iZWRkZWQgaW4gdGhlIGhpZ2hlciBiaXRzIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzLgotICogVGhpcyBpcyB3aHkgd2UgaGF2ZSBubyBidXMgbnVtYmVyIGFyZ3VtZW50IHRvIGlvcmVtYXAoKS4KLSAqLwotZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLSNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKFgsWSkJaW9yZW1hcCgoWCksKFkpKQotZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwotCi0jZGVmaW5lIGlvcmVhZDgoWCkJCQlyZWFkYihYKQotI2RlZmluZSBpb3JlYWQxNihYKQkJCXJlYWR3KFgpCi0jZGVmaW5lIGlvcmVhZDMyKFgpCQkJcmVhZGwoWCkKLSNkZWZpbmUgaW93cml0ZTgodmFsLFgpCQkJd3JpdGViKHZhbCxYKQotI2RlZmluZSBpb3dyaXRlMTYodmFsLFgpCQl3cml0ZXcodmFsLFgpCi0jZGVmaW5lIGlvd3JpdGUzMih2YWwsWCkJCXdyaXRlbCh2YWwsWCkKLQotc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDhfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCWluc2IoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQxNl9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JaW5zdygodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXBvcnQsIGJ1ZiwgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9yZWFkMzJfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCWluc2woKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGU4X3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlvdXRzYigodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXBvcnQsIGJ1ZiwgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZTE2X3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlvdXRzdygodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXBvcnQsIGJ1ZiwgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZTMyX3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlvdXRzbCgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXBvcnQsIGJ1ZiwgY291bnQpOwotfQotCi0vKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhbiBJTyBwb3J0IHJhbmdlICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKTsKLWV4dGVybiB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKik7Ci0KLS8qIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGluZyBjb29raWUgZm9yIGEgUENJIEJBUiAobWVtb3J5IG9yIElPKSAqLwotc3RydWN0IHBjaV9kZXY7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXgpOwotZXh0ZXJuIHZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICopOwotCi0vKgotICogQnVzIG51bWJlciBtYXkgYmUgaW4gcmVzLT5mbGFncy4uLiBzb21ld2hlcmUuCi0gKi8KLWV4dGVybiB2b2lkIF9faW9tZW0gKnNidXNfaW9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0gICAgdW5zaWduZWQgbG9uZyBzaXplLCBjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIHNidXNfaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0KLS8qCi0gKiBBdCB0aGUgbW9tZW50LCB3ZSBkbyBub3QgdXNlIENNT1NfUkVBRCBhbnl3aGVyZSBvdXRzaWRlIG9mIHJ0Yy5jLAotICogc28gcnRjX3BvcnQgaXMgc3RhdGljIGluIGl0LiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIHVubGVzcyBhIG5ldwotICogaGFyZHdhcmUgcG9wcyB1cC4KLSAqLwotI2RlZmluZSBSVENfUE9SVCh4KSAgIChydGNfcG9ydCArICh4KSkKLSNkZWZpbmUgUlRDX0FMV0FZU19CQ0QgIDAKLQorI2lmbmRlZiBfX19BU01fU1BBUkNfSU9fSAorI2RlZmluZSBfX19BU01fU1BBUkNfSU9fSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL2lvXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9pb18zMi5oPgogI2VuZGlmCi0KLSNkZWZpbmUgX19BUkNIX0hBU19OT19QQUdFX1pFUk9fTUFQUEVECQkxCi0KLS8qCi0gKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCi0gKiBhY2Nlc3MKLSAqLwotI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCi0KLS8qCi0gKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKLQotI2VuZGlmIC8qICEoX19TUEFSQ19JT19IKSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pb18zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9fMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQ3ZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9fMzIuaApAQCAtMCwwICsxLDMyNiBAQAorI2lmbmRlZiBfX1NQQVJDX0lPX0gKKyNkZWZpbmUgX19TUEFSQ19JT19ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPiAgLyogc3RydWN0IHJlc291cmNlICovCisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPiAgICAgIC8qIElPIGFkZHJlc3MgbWFwcGluZyByb3V0aW5lcyBuZWVkIHRoaXMgKi8KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCSgoKHBhZ2UpIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkKKworc3RhdGljIGlubGluZSB1MzIgZmxpcF9kd29yZCAodTMyIGwpCit7CisJcmV0dXJuICgobCYweGZmKTw8MjQpIHwgKCgobD4+OCkmMHhmZik8PDE2KSB8ICgoKGw+PjE2KSYweGZmKTw8OCl8ICgobD4+MjQpJjB4ZmYpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBmbGlwX3dvcmQgKHUxNiB3KQoreworCXJldHVybiAoKHcmMHhmZikgPDwgOCkgfCAoKHc+PjgpJjB4ZmYpOworfQorCisjZGVmaW5lIG1taW93YigpCisKKy8qCisgKiBNZW1vcnkgbWFwcGVkIEkvTyB0byBQQ0kKKyAqLworCitzdGF0aWMgaW5saW5lIHU4IF9fcmF3X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIHU4ICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1MTYgX19yYXdfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgdTE2ICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19yYXdfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgdTMyICopYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIHU4ICopYWRkciA9IGI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXcodTE2IHcsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKF9fZm9yY2Ugdm9sYXRpbGUgdTE2ICopYWRkciA9IHc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWwodTMyIGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKF9fZm9yY2Ugdm9sYXRpbGUgdTMyICopYWRkciA9IGw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggX19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSB1OCAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IF9fcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBmbGlwX3dvcmQoKihfX2ZvcmNlIHZvbGF0aWxlIHUxNiAqKWFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gZmxpcF9kd29yZCgqKF9fZm9yY2Ugdm9sYXRpbGUgdTMyICopYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIHU4ICopYWRkciA9IGI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRldyh1MTYgdywgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSooX19mb3JjZSB2b2xhdGlsZSB1MTYgKilhZGRyID0gZmxpcF93b3JkKHcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZWwodTMyIGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKF9fZm9yY2Ugdm9sYXRpbGUgdTMyICopYWRkciA9IGZsaXBfZHdvcmQobCk7Cit9CisKKyNkZWZpbmUgcmVhZGIoX19hZGRyKQkJX19yZWFkYihfX2FkZHIpCisjZGVmaW5lIHJlYWR3KF9fYWRkcikJCV9fcmVhZHcoX19hZGRyKQorI2RlZmluZSByZWFkbChfX2FkZHIpCQlfX3JlYWRsKF9fYWRkcikKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChfX2FkZHIpCXJlYWRiKF9fYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChfX2FkZHIpCXJlYWR3KF9fYWRkcikKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZChfX2FkZHIpCXJlYWRsKF9fYWRkcikKKworI2RlZmluZSB3cml0ZWIoX19iLCBfX2FkZHIpCV9fd3JpdGViKChfX2IpLChfX2FkZHIpKQorI2RlZmluZSB3cml0ZXcoX193LCBfX2FkZHIpCV9fd3JpdGV3KChfX3cpLChfX2FkZHIpKQorI2RlZmluZSB3cml0ZWwoX19sLCBfX2FkZHIpCV9fd3JpdGVsKChfX2wpLChfX2FkZHIpKQorCisvKgorICogSS9PIHNwYWNlIG9wZXJhdGlvbnMKKyAqCisgKiBBcnJhbmdlbWVudCBvbiBhIFN1biBpcyBzb21ld2hhdCBjb21wbGljYXRlZC4KKyAqCisgKiBGaXJzdCBvZiBhbGwsIHdlIHdhbnQgdG8gdXNlIHN0YW5kYXJkIExpbnV4IGRyaXZlcnMKKyAqIGZvciBrZXlib2FyZCwgUEMgc2VyaWFsLCBldGMuIFRoZXNlIGRyaXZlcnMgdGhpbmsKKyAqIHRoZXkgYWNjZXNzIEkvTyBzcGFjZSBhbmQgdXNlIGluYi9vdXRiLgorICogT24gdGhlIG90aGVyIGhhbmQsIEVCdXMgYnJpZGdlIGFjY2VwdHMgUENJICptZW1vcnkqCisgKiBjeWNsZXMgYW5kIGNvbnZlcnRzIHRoZW0gaW50byBJU0EgKkkvTyogY3ljbGVzLgorICogRXJnbywgd2Ugd2FudCBpbmIgJiBvdXRiIHRvIGdlbmVyYXRlIFBDSSBtZW1vcnkgY3ljbGVzLgorICoKKyAqIElmIHdlIHdhbnQgdG8gaXNzdWUgUENJICpJL08qIGN5Y2xlcywgd2UgZG8gdGhpcworICogd2l0aCBhIGxvdyA2NEsgZml4ZWQgd2luZG93IGluIFBDSUMuIFRoaXMgd2luZG93IGdldHMKKyAqIG1hcHBlZCBzb21ld2hlcmUgaW50byB2aXJ0dWFsIGtlcm5lbCBzcGFjZSBhbmQgd2UKKyAqIGNhbiB1c2UgaW5iL291dGIgYWdhaW4uCisgKi8KKyNkZWZpbmUgaW5iX2xvY2FsKF9fYWRkcikJX19yZWFkYigodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpCisjZGVmaW5lIGluYihfX2FkZHIpCQlfX3JlYWRiKCh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykoX19hZGRyKSkKKyNkZWZpbmUgaW53KF9fYWRkcikJCV9fcmVhZHcoKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQorI2RlZmluZSBpbmwoX19hZGRyKQkJX19yZWFkbCgodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpCisKKyNkZWZpbmUgb3V0Yl9sb2NhbChfX2IsIF9fYWRkcikJX193cml0ZWIoX19iLCAodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpCisjZGVmaW5lIG91dGIoX19iLCBfX2FkZHIpCV9fd3JpdGViKF9fYiwgKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShfX2FkZHIpKQorI2RlZmluZSBvdXR3KF9fdywgX19hZGRyKQlfX3dyaXRldyhfX3csICh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykoX19hZGRyKSkKKyNkZWZpbmUgb3V0bChfX2wsIF9fYWRkcikJX193cml0ZWwoX19sLCAodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpCisKKyNkZWZpbmUgaW5iX3AoX19hZGRyKQkJaW5iKF9fYWRkcikKKyNkZWZpbmUgb3V0Yl9wKF9fYiwgX19hZGRyKQlvdXRiKF9fYiwgX19hZGRyKQorI2RlZmluZSBpbndfcChfX2FkZHIpCQlpbncoX19hZGRyKQorI2RlZmluZSBvdXR3X3AoX193LCBfX2FkZHIpCW91dHcoX193LCBfX2FkZHIpCisjZGVmaW5lIGlubF9wKF9fYWRkcikJCWlubChfX2FkZHIpCisjZGVmaW5lIG91dGxfcChfX2wsIF9fYWRkcikJb3V0bChfX2wsIF9fYWRkcikKKwordm9pZCBvdXRzYih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOwordm9pZCBvdXRzdyh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOwordm9pZCBvdXRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOwordm9pZCBpbnNiKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK3ZvaWQgaW5zdyh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7Cit2b2lkIGluc2wodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworLyoKKyAqIFNCdXMgYWNjZXNzb3JzLgorICoKKyAqIFNCdXMgaGFzIG9ubHkgb25lLCBtZW1vcnkgbWFwcGVkLCBJL08gc3BhY2UuCisgKiBXZSBkbyBub3QgbmVlZCB0byBmbGlwIGJ5dGVzIGZvciBTQnVzIG9mIGNvdXJzZS4KKyAqLworc3RhdGljIGlubGluZSB1OCBfc2J1c19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSB1OCAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IF9zYnVzX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIHUxNiAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIF9zYnVzX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfc2J1c193cml0ZWIodTggYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSooX19mb3JjZSB2b2xhdGlsZSB1OCAqKWFkZHIgPSBiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3NidXNfd3JpdGV3KHUxNiB3LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIHUxNiAqKWFkZHIgPSB3OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3NidXNfd3JpdGVsKHUzMiBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKihfX2ZvcmNlIHZvbGF0aWxlIHUzMiAqKWFkZHIgPSBsOworfQorCisvKgorICogVGhlIG9ubHkgcmVhc29uIGZvciAjZGVmaW5lJ3MgaXMgdG8gaGlkZSBjYXN0cyB0byB1bnNpZ25lZCBsb25nLgorICovCisjZGVmaW5lIHNidXNfcmVhZGIoX19hZGRyKQkJX3NidXNfcmVhZGIoX19hZGRyKQorI2RlZmluZSBzYnVzX3JlYWR3KF9fYWRkcikJCV9zYnVzX3JlYWR3KF9fYWRkcikKKyNkZWZpbmUgc2J1c19yZWFkbChfX2FkZHIpCQlfc2J1c19yZWFkbChfX2FkZHIpCisjZGVmaW5lIHNidXNfd3JpdGViKF9fYiwgX19hZGRyKQlfc2J1c193cml0ZWIoX19iLCBfX2FkZHIpCisjZGVmaW5lIHNidXNfd3JpdGV3KF9fdywgX19hZGRyKQlfc2J1c193cml0ZXcoX193LCBfX2FkZHIpCisjZGVmaW5lIHNidXNfd3JpdGVsKF9fbCwgX19hZGRyKQlfc2J1c193cml0ZWwoX19sLCBfX2FkZHIpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzYnVzX21lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKl9fZHN0LCBpbnQgYywgX19rZXJuZWxfc2l6ZV90IG4pCit7CisJd2hpbGUobi0tKSB7CisJCXNidXNfd3JpdGViKGMsIF9fZHN0KTsKKwkJX19kc3QrKzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX21lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgaW50IGMsIF9fa2VybmVsX3NpemVfdCBuKQoreworCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqZCA9IGRzdDsKKworCXdoaWxlIChuLS0pIHsKKwkJd3JpdGViKGMsIGQpOworCQlkKys7CisJfQorfQorCisjZGVmaW5lIG1lbXNldF9pbyhkLGMsc3opCV9tZW1zZXRfaW8oZCxjLHN6KQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19tZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCwgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpzcmMsIF9fa2VybmVsX3NpemVfdCBuKQoreworCWNoYXIgKmQgPSBkc3Q7CisKKwl3aGlsZSAobi0tKSB7CisJCWNoYXIgdG1wID0gcmVhZGIoc3JjKTsKKwkJKmQrKyA9IHRtcDsKKwkJc3JjKys7CisJfQorfQorCisjZGVmaW5lIG1lbWNweV9mcm9taW8oZCxzLHN6KQlfbWVtY3B5X2Zyb21pbyhkLHMsc3opCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX21lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpzcmMsIF9fa2VybmVsX3NpemVfdCBuKQoreworCWNvbnN0IGNoYXIgKnMgPSBzcmM7CisJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkID0gZHN0OworCisJd2hpbGUgKG4tLSkgeworCQljaGFyIHRtcCA9ICpzKys7CisJCXdyaXRlYih0bXAsIGQpOworCQlkKys7CisJfQorfQorCisjZGVmaW5lIG1lbWNweV90b2lvKGQscyxzeikJX21lbWNweV90b2lvKGQscyxzeikKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIEJ1cyBudW1iZXIgbWF5IGJlIGVtYmVkZGVkIGluIHRoZSBoaWdoZXIgYml0cyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcy4KKyAqIFRoaXMgaXMgd2h5IHdlIGhhdmUgbm8gYnVzIG51bWJlciBhcmd1bWVudCB0byBpb3JlbWFwKCkuCisgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShYLFkpCWlvcmVtYXAoKFgpLChZKSkKKyNkZWZpbmUgaW9yZW1hcF93YyhYLFkpCQlpb3JlbWFwKChYKSwoWSkpCitleHRlcm4gdm9pZCBpb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CisKKyNkZWZpbmUgaW9yZWFkOChYKQkJCXJlYWRiKFgpCisjZGVmaW5lIGlvcmVhZDE2KFgpCQkJcmVhZHcoWCkKKyNkZWZpbmUgaW9yZWFkMzIoWCkJCQlyZWFkbChYKQorI2RlZmluZSBpb3dyaXRlOCh2YWwsWCkJCQl3cml0ZWIodmFsLFgpCisjZGVmaW5lIGlvd3JpdGUxNih2YWwsWCkJCXdyaXRldyh2YWwsWCkKKyNkZWZpbmUgaW93cml0ZTMyKHZhbCxYKQkJd3JpdGVsKHZhbCxYKQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9yZWFkOF9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJaW5zYigodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXBvcnQsIGJ1ZiwgY291bnQpOworfQorc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDE2X3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlpbnN3KCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQzMl9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJaW5zbCgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXBvcnQsIGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZThfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCW91dHNiKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMTZfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCW91dHN3KCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMzJfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCW91dHNsKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7Cit9CisKKy8qIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGluZyBjb29raWUgZm9yIGFuIElPIHBvcnQgcmFuZ2UgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgbnIpOworZXh0ZXJuIHZvaWQgaW9wb3J0X3VubWFwKHZvaWQgX19pb21lbSAqKTsKKworLyogQ3JlYXRlIGEgdmlydHVhbCBtYXBwaW5nIGNvb2tpZSBmb3IgYSBQQ0kgQkFSIChtZW1vcnkgb3IgSU8pICovCitzdHJ1Y3QgcGNpX2RldjsKK2V4dGVybiB2b2lkIF9faW9tZW0gKnBjaV9pb21hcChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgYmFyLCB1bnNpZ25lZCBsb25nIG1heCk7CitleHRlcm4gdm9pZCBwY2lfaW91bm1hcChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkIF9faW9tZW0gKik7CisKKy8qCisgKiBCdXMgbnVtYmVyIG1heSBiZSBpbiByZXMtPmZsYWdzLi4uIHNvbWV3aGVyZS4KKyAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqc2J1c19pb3JlbWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICB1bnNpZ25lZCBsb25nIHNpemUsIGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgc2J1c19pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKworLyoKKyAqIEF0IHRoZSBtb21lbnQsIHdlIGRvIG5vdCB1c2UgQ01PU19SRUFEIGFueXdoZXJlIG91dHNpZGUgb2YgcnRjLmMsCisgKiBzbyBydGNfcG9ydCBpcyBzdGF0aWMgaW4gaXQuIFRoaXMgc2hvdWxkIG5vdCBjaGFuZ2UgdW5sZXNzIGEgbmV3CisgKiBoYXJkd2FyZSBwb3BzIHVwLgorICovCisjZGVmaW5lIFJUQ19QT1JUKHgpICAgKHJ0Y19wb3J0ICsgKHgpKQorI2RlZmluZSBSVENfQUxXQVlTX0JDRCAgMAorCisjZW5kaWYKKworI2RlZmluZSBfX0FSQ0hfSEFTX05PX1BBR0VfWkVST19NQVBQRUQJCTEKKworLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KKyAqIGFjY2VzcworICovCisjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKworLyoKKyAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAorCisjZW5kaWYgLyogIShfX1NQQVJDX0lPX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pb182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9fNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmZmMDc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9fNjQuaApAQCAtMCwwICsxLDUxMSBAQAorI2lmbmRlZiBfX1NQQVJDNjRfSU9fSAorI2RlZmluZSBfX1NQQVJDNjRfSU9fSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4gICAgICAvKiBJTyBhZGRyZXNzIG1hcHBpbmcgcm91dGluZXMgbmVlZCB0aGlzICovCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hc2kuaD4KKworLyogUEMgY3JhcG9sYS4uLiAqLworI2RlZmluZSBfX1NMT1dfRE9XTl9JTwlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNMT1dfRE9XTl9JTwlkbyB7IH0gd2hpbGUgKDApCisKKy8qIEJJTyBsYXllciBkZWZpbml0aW9ucy4gKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGtlcm5fYmFzZSwga2Vybl9zaXplOworI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCisKK3N0YXRpYyBpbmxpbmUgdTggX2luYih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTggcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWJhXHRbJTFdICUyLCAlMFx0LyogcGNpX2luYiAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IF9pbncodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXUxNiByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1aGFcdFslMV0gJTIsICUwXHQvKiBwY2lfaW53ICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpCisJCQkgICAgIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MzIgX2lubCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTMyIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9pbmwgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX291dGIodTggYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGJhXHQlcjAsIFslMV0gJTJcdC8qIHBjaV9vdXRiICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiIChiKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9vdXR3KHUxNiB3LCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGFcdCVyMCwgWyUxXSAlMlx0LyogcGNpX291dHcgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKHcpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpCisJCQkgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX291dGwodTMyIGwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfb3V0bCAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogIkpyIiAobCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgaW5iKF9fYWRkcikJCShfaW5iKCh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNkZWZpbmUgaW53KF9fYWRkcikJCShfaW53KCh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNkZWZpbmUgaW5sKF9fYWRkcikJCShfaW5sKCh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNkZWZpbmUgb3V0YihfX2IsIF9fYWRkcikJKF9vdXRiKCh1OCkoX19iKSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBvdXR3KF9fdywgX19hZGRyKQkoX291dHcoKHUxNikoX193KSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBvdXRsKF9fbCwgX19hZGRyKQkoX291dGwoKHUzMikoX19sKSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorCisjZGVmaW5lIGluYl9wKF9fYWRkcikgCQlpbmIoX19hZGRyKQorI2RlZmluZSBvdXRiX3AoX19iLCBfX2FkZHIpCW91dGIoX19iLCBfX2FkZHIpCisjZGVmaW5lIGlud19wKF9fYWRkcikJCWludyhfX2FkZHIpCisjZGVmaW5lIG91dHdfcChfX3csIF9fYWRkcikJb3V0dyhfX3csIF9fYWRkcikKKyNkZWZpbmUgaW5sX3AoX19hZGRyKQkJaW5sKF9fYWRkcikKKyNkZWZpbmUgb3V0bF9wKF9fbCwgX19hZGRyKQlvdXRsKF9fbCwgX19hZGRyKQorCitleHRlcm4gdm9pZCBvdXRzYih1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgb3V0c3codW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIG91dHNsKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBpbnNiKHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBpbnN3KHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQ4X3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlpbnNiKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW9yZWFkMTZfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCWluc3coKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDMyX3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlpbnNsKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlOF9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJb3V0c2IoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUxNl9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJb3V0c3coKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUzMl9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJb3V0c2woKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKK30KKworLyogTWVtb3J5IGZ1bmN0aW9ucywgc2FtZSBhcyBJL08gYWNjZXNzZXMgb24gVWx0cmEuICovCitzdGF0aWMgaW5saW5lIHU4IF9yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CXU4IHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHViYVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yZWFkYiAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHUxNiBfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQorewl1MTYgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhXHRbJTFdICUyLCAlMFx0LyogcGNpX3JlYWR3ICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpCisJCQkgICAgIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MzIgX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sJdTMyIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yZWFkbCAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IF9yZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CXU2NCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yZWFkcSAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfd3JpdGViKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGViICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiIChiKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF93cml0ZXcodTE2IHcsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGV3ICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiICh3KSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF93cml0ZWwodTMyIGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGVsICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiIChsKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF93cml0ZXEodTY0IHEsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGVxICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiIChxKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworI2RlZmluZSByZWFkYihfX2FkZHIpCQlfcmVhZGIoX19hZGRyKQorI2RlZmluZSByZWFkdyhfX2FkZHIpCQlfcmVhZHcoX19hZGRyKQorI2RlZmluZSByZWFkbChfX2FkZHIpCQlfcmVhZGwoX19hZGRyKQorI2RlZmluZSByZWFkcShfX2FkZHIpCQlfcmVhZHEoX19hZGRyKQorI2RlZmluZSByZWFkYl9yZWxheGVkKF9fYWRkcikJX3JlYWRiKF9fYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChfX2FkZHIpCV9yZWFkdyhfX2FkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoX19hZGRyKQlfcmVhZGwoX19hZGRyKQorI2RlZmluZSByZWFkcV9yZWxheGVkKF9fYWRkcikJX3JlYWRxKF9fYWRkcikKKyNkZWZpbmUgd3JpdGViKF9fYiwgX19hZGRyKQlfd3JpdGViKF9fYiwgX19hZGRyKQorI2RlZmluZSB3cml0ZXcoX193LCBfX2FkZHIpCV93cml0ZXcoX193LCBfX2FkZHIpCisjZGVmaW5lIHdyaXRlbChfX2wsIF9fYWRkcikJX3dyaXRlbChfX2wsIF9fYWRkcikKKyNkZWZpbmUgd3JpdGVxKF9fcSwgX19hZGRyKQlfd3JpdGVxKF9fcSwgX19hZGRyKQorCisvKiBOb3cgdmVyc2lvbnMgd2l0aG91dCBieXRlLXN3YXBwaW5nLiAqLworc3RhdGljIGlubGluZSB1OCBfcmF3X3JlYWRiKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1OCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1YmFcdFslMV0gJTIsICUwXHQvKiBwY2lfcmF3X3JlYWRiICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHUxNiBfcmF3X3JlYWR3KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1MTYgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhXHRbJTFdICUyLCAlMFx0LyogcGNpX3Jhd19yZWFkdyAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MzIgX3Jhd19yZWFkbCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTMyIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yYXdfcmVhZGwgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IF9yYXdfcmVhZHEodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXU2NCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yYXdfcmVhZHEgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3dyaXRlYih1OCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YmFcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3Jhd193cml0ZWIgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKGIpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3dyaXRldyh1MTYgdywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhhXHQlcjAsIFslMV0gJTJcdC8qIHBjaV9yYXdfd3JpdGV3ICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiICh3KSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3Jhd193cml0ZWwodTMyIGwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfcmF3X3dyaXRlbCAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogIkpyIiAobCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9yYXdfd3JpdGVxKHU2NCBxLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGFcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3Jhd193cml0ZXEgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKHEpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Cit9CisKKyNkZWZpbmUgX19yYXdfcmVhZGIoX19hZGRyKQkJKF9yYXdfcmVhZGIoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBfX3Jhd19yZWFkdyhfX2FkZHIpCQkoX3Jhd19yZWFkdygodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIF9fcmF3X3JlYWRsKF9fYWRkcikJCShfcmF3X3JlYWRsKCh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNkZWZpbmUgX19yYXdfcmVhZHEoX19hZGRyKQkJKF9yYXdfcmVhZHEoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBfX3Jhd193cml0ZWIoX19iLCBfX2FkZHIpCShfcmF3X3dyaXRlYigodTgpKF9fYiksICh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNkZWZpbmUgX19yYXdfd3JpdGV3KF9fdywgX19hZGRyKQkoX3Jhd193cml0ZXcoKHUxNikoX193KSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSBfX3Jhd193cml0ZWwoX19sLCBfX2FkZHIpCShfcmF3X3dyaXRlbCgodTMyKShfX2wpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIF9fcmF3X3dyaXRlcShfX3EsIF9fYWRkcikJKF9yYXdfd3JpdGVxKCh1NjQpKF9fcSksICh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKworLyogVmFsaWQgSS9PIFNwYWNlIHJlZ2lvbnMgYXJlIGFueXdoZXJlLCBiZWNhdXNlIGVhY2ggUENJIGJ1cyBzdXBwb3J0ZWQKKyAqIGNhbiBsaXZlIGluIGFuIGFyYml0cmFyeSBhcmVhIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlLgorICovCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmZmZmZmZmZmZlVMCisKKy8qIE5vdywgU0JVUyB2YXJpYW50cywgb25seSBkaWZmZXJlbmNlIGZyb20gUENJIGlzIHRoYXQgd2UgZG8KKyAqIG5vdCB1c2UgbGl0dGxlLWVuZGlhbiBBU0lzLgorICovCitzdGF0aWMgaW5saW5lIHU4IF9zYnVzX3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1OCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1YmFcdFslMV0gJTIsICUwXHQvKiBzYnVzX3JlYWRiICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKQorCQkJICAgICA6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IF9zYnVzX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1MTYgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhXHRbJTFdICUyLCAlMFx0Lyogc2J1c19yZWFkdyAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfc2J1c19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTMyIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHNidXNfcmVhZGwgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpCisJCQkgICAgIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1NjQgX3NidXNfcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXU2NCByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YVx0WyUxXSAlMiwgJTBcdC8qIHNidXNfcmVhZHEgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpCisJCQkgICAgIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YmFcdCVyMCwgWyUxXSAlMlx0Lyogc2J1c193cml0ZWIgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKGIpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRldyh1MTYgdywgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhhXHQlcjAsIFslMV0gJTJcdC8qIHNidXNfd3JpdGV3ICovIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiSnIiICh3KSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfc2J1c193cml0ZWwodTMyIGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBzYnVzX3dyaXRlbCAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogIkpyIiAobCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpCisJCQkgICAgIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3NidXNfd3JpdGVxKHU2NCBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGFcdCVyMCwgWyUxXSAlMlx0Lyogc2J1c193cml0ZXEgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJKciIgKGwpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKQorCQkJICAgICA6ICJtZW1vcnkiKTsKK30KKworI2RlZmluZSBzYnVzX3JlYWRiKF9fYWRkcikJCV9zYnVzX3JlYWRiKF9fYWRkcikKKyNkZWZpbmUgc2J1c19yZWFkdyhfX2FkZHIpCQlfc2J1c19yZWFkdyhfX2FkZHIpCisjZGVmaW5lIHNidXNfcmVhZGwoX19hZGRyKQkJX3NidXNfcmVhZGwoX19hZGRyKQorI2RlZmluZSBzYnVzX3JlYWRxKF9fYWRkcikJCV9zYnVzX3JlYWRxKF9fYWRkcikKKyNkZWZpbmUgc2J1c193cml0ZWIoX19iLCBfX2FkZHIpCV9zYnVzX3dyaXRlYihfX2IsIF9fYWRkcikKKyNkZWZpbmUgc2J1c193cml0ZXcoX193LCBfX2FkZHIpCV9zYnVzX3dyaXRldyhfX3csIF9fYWRkcikKKyNkZWZpbmUgc2J1c193cml0ZWwoX19sLCBfX2FkZHIpCV9zYnVzX3dyaXRlbChfX2wsIF9fYWRkcikKKyNkZWZpbmUgc2J1c193cml0ZXEoX19sLCBfX2FkZHIpCV9zYnVzX3dyaXRlcShfX2wsIF9fYWRkcikKKworc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX21lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgaW50IGMsIF9fa2VybmVsX3NpemVfdCBuKQoreworCXdoaWxlKG4tLSkgeworCQlzYnVzX3dyaXRlYihjLCBkc3QpOworCQlkc3QrKzsKKwl9Cit9CisKKyNkZWZpbmUgc2J1c19tZW1zZXRfaW8oZCxjLHN6KQlfc2J1c19tZW1zZXRfaW8oZCxjLHN6KQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGludCBjLCBfX2tlcm5lbF9zaXplX3QgbikKK3sKKwl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmQgPSBkc3Q7CisKKwl3aGlsZSAobi0tKSB7CisJCXdyaXRlYihjLCBkKTsKKwkJZCsrOworCX0KK30KKworI2RlZmluZSBtZW1zZXRfaW8oZCxjLHN6KQlfbWVtc2V0X2lvKGQsYyxzeikKKworc3RhdGljIGlubGluZSB2b2lkCitfbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc3JjLCBfX2tlcm5lbF9zaXplX3QgbikKK3sKKwljaGFyICpkID0gZHN0OworCisJd2hpbGUgKG4tLSkgeworCQljaGFyIHRtcCA9IHJlYWRiKHNyYyk7CisJCSpkKysgPSB0bXA7CisJCXNyYysrOworCX0KK30KKworI2RlZmluZSBtZW1jcHlfZnJvbWlvKGQscyxzeikJX21lbWNweV9mcm9taW8oZCxzLHN6KQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBfX2tlcm5lbF9zaXplX3QgbikKK3sKKwljb25zdCBjaGFyICpzID0gc3JjOworCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqZCA9IGRzdDsKKworCXdoaWxlIChuLS0pIHsKKwkJY2hhciB0bXAgPSAqcysrOworCQl3cml0ZWIodG1wLCBkKTsKKwkJZCsrOworCX0KK30KKworI2RlZmluZSBtZW1jcHlfdG9pbyhkLHMsc3opCV9tZW1jcHlfdG9pbyhkLHMsc3opCisKKyNkZWZpbmUgbW1pb3diKCkKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogT24gc3BhcmM2NCB3ZSBoYXZlIHRoZSB3aG9sZSBwaHlzaWNhbCBJTyBhZGRyZXNzIHNwYWNlIGFjY2Vzc2libGUKKyAqIHVzaW5nIHBoeXNpY2FsbHkgYWRkcmVzc2VkIGxvYWRzIGFuZCBzdG9yZXMsIHNvIHRoaXMgZG9lcyBub3RoaW5nLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAodm9pZCBfX2lvbWVtICopb2Zmc2V0OworfQorCisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShYLFkpCQlpb3JlbWFwKChYKSwoWSkpCisjZGVmaW5lIGlvcmVtYXBfd2MoWCxZKQkJCWlvcmVtYXAoKFgpLChZKSkKKworc3RhdGljIGlubGluZSB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworfQorCisjZGVmaW5lIGlvcmVhZDgoWCkJCQlyZWFkYihYKQorI2RlZmluZSBpb3JlYWQxNihYKQkJCXJlYWR3KFgpCisjZGVmaW5lIGlvcmVhZDMyKFgpCQkJcmVhZGwoWCkKKyNkZWZpbmUgaW93cml0ZTgodmFsLFgpCQkJd3JpdGViKHZhbCxYKQorI2RlZmluZSBpb3dyaXRlMTYodmFsLFgpCQl3cml0ZXcodmFsLFgpCisjZGVmaW5lIGlvd3JpdGUzMih2YWwsWCkJCXdyaXRlbCh2YWwsWCkKKworLyogQ3JlYXRlIGEgdmlydHVhbCBtYXBwaW5nIGNvb2tpZSBmb3IgYW4gSU8gcG9ydCByYW5nZSAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBucik7CitleHRlcm4gdm9pZCBpb3BvcnRfdW5tYXAodm9pZCBfX2lvbWVtICopOworCisvKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhIFBDSSBCQVIgKG1lbW9yeSBvciBJTykgKi8KK3N0cnVjdCBwY2lfZGV2OworZXh0ZXJuIHZvaWQgX19pb21lbSAqcGNpX2lvbWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4KTsKK2V4dGVybiB2b2lkIHBjaV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgX19pb21lbSAqKTsKKworLyogU2ltaWxhcmx5IGZvciBTQlVTLiAqLworI2RlZmluZSBzYnVzX2lvcmVtYXAoX19yZXMsIF9fb2Zmc2V0LCBfX3NpemUsIF9fbmFtZSkgXAorKHsJdW5zaWduZWQgbG9uZyBfX3JldDsgXAorCV9fcmV0ICA9IChfX3JlcyktPnN0YXJ0ICsgKCgoX19yZXMpLT5mbGFncyAmIDB4MWZmVUwpIDw8IDMyVUwpOyBcCisJX19yZXQgKz0gKHVuc2lnbmVkIGxvbmcpIChfX29mZnNldCk7IFwKKwlpZiAoISByZXF1ZXN0X3JlZ2lvbigoX19yZXQpLCAoX19zaXplKSwgKF9fbmFtZSkpKSBcCisJCV9fcmV0ID0gMFVMOyBcCisJKHZvaWQgX19pb21lbSAqKSBfX3JldDsgXAorfSkKKworI2RlZmluZSBzYnVzX2lvdW5tYXAoX19hZGRyLCBfX3NpemUpCVwKKwlyZWxlYXNlX3JlZ2lvbigodW5zaWduZWQgbG9uZykoX19hZGRyKSwgKF9fc2l6ZSkpCisKKy8qCisgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCisgKiBhY2Nlc3MKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworI2VuZGlmCisKKyNlbmRpZiAvKiAhKF9fU1BBUkM2NF9JT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pb2N0bHMuaAppbmRleCAzZjRkMDA4Li4xZmU2ODU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9pb2N0bHMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pb2N0bHMuaApAQCAtMjIsNyArMjIsNyBAQAogCiAvKiBOb3RlIHRoYXQgYWxsIHRoZSBpb2N0bHMgdGhhdCBhcmUgbm90IGF2YWlsYWJsZSBpbiBMaW51eCBoYXZlIGEgCiAgKiBkb3VibGUgdW5kZXJzY29yZSBvbiB0aGUgZnJvbnQgdG86IGEpIGF2b2lkIHNvbWUgcHJvZ3JhbXMgdG8KLSAqIHRoaW5nIHdlIHN1cHBvcnQgc29tZSBpb2N0bHMgdW5kZXIgTGludXggKGF1dG9jb25maWd1cmF0aW9uIHN0dWZmKQorICogdGhpbmsgd2Ugc3VwcG9ydCBzb21lIGlvY3RscyB1bmRlciBMaW51eCAoYXV0b2NvbmZpZ3VyYXRpb24gc3R1ZmYpCiAgKi8KIC8qIExpdHRsZSB0ICovCiAjZGVmaW5lIFRJT0NHRVRECV9JT1IoJ3QnLCAwLCBpbnQpCkBAIC0xMTAsNyArMTEwLDcgQEAKICNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ1OSAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KICNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLwotI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QyAvKiBXYWl0IGlucHV0ICovCisjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDIC8qIFdhaXQgZm9yIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLwogI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQgLyogUmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLwogCiAvKiBLZXJuZWwgZGVmaW5pdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lvbW11LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pb21tdS5oCmluZGV4IDcwYzU4OWMuLjkxYjA3MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2lvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9tbXUuaApAQCAtMSwxMjEgKzEsOCBAQAotLyogaW9tbXUuaDogRGVmaW5pdGlvbnMgZm9yIHRoZSBzdW40bSBJT01NVS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0jaWZuZGVmIF9TUEFSQ19JT01NVV9ICi0jZGVmaW5lIF9TUEFSQ19JT01NVV9ICi0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9iaXRleHQuaD4KLQotLyogVGhlIGlvbW11IGhhbmRsZXMgYWxsIHZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbnMKLSAqIHRoYXQgb2NjdXIgYmV0d2VlbiB0aGUgU0JVUyBhbmQgcGh5c2ljYWwgbWVtb3J5LiAgQWNjZXNzIGJ5Ci0gKiB0aGUgY3B1IHRvIElPIHJlZ2lzdGVycyBhbmQgc2ltaWxhciBnbyBvdmVyIHRoZSBtYnVzIHNvIGFyZQotICogdHJhbnNsYXRlZCBieSB0aGUgb24gY2hpcCBTUk1NVS4gIFRoZSBpb21tdSBhbmQgdGhlIHNybW11IGRvCi0gKiBub3QgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHRyYW5zbGF0aW9ucyBhdCBhbGwsIGluIGZhY3QgbW9zdAotICogb2YgdGhlIHRpbWUgdGhlIHRyYW5zbGF0aW9ucyB0aGV5IGhhbmRsZSBhcmUgYSBkaXNqdW5jdCBzZXQuCi0gKiBCYXNpY2FsbHkgdGhlIGlvbW11IGhhbmRsZXMgYWxsIGR2bWEgc2J1cyBhY3Rpdml0eS4KLSAqLwotCi0vKiBUaGUgSU9NTVUgcmVnaXN0ZXJzIG9jY3VweSB0aHJlZSBwYWdlcyBpbiBJTyBzcGFjZS4gKi8KLXN0cnVjdCBpb21tdV9yZWdzIHsKLQkvKiBGaXJzdCBwYWdlICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjb250cm9sOyAgICAvKiBJT01NVSBjb250cm9sICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAgICAvKiBQaHlzaWNhbCBiYXNlIG9mIGlvcHRlIHBhZ2UgdGFibGUgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF91bnVzZWQxWzNdOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGxiZmx1c2g7ICAgLyogd3JpdGUgb25seSAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGFnZWZsdXNoOyAgLyogd3JpdGUgb25seSAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX3VudXNlZDJbMTAxN107Ci0JLyogU2Vjb25kIHBhZ2UgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFmc3I7ICAgICAgIC8qIEFzeW5jLWZhdWx0IHN0YXR1cyByZWdpc3RlciAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWZhcjsgICAgICAgLyogQXN5bmMtZmF1bHQgcGh5c2ljYWwgYWRkcmVzcyAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX3VudXNlZDNbMl07Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzYnVzY2ZnMDsgICAvKiBTQlVTIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBwZXItc2xvdCAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc2J1c2NmZzE7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzYnVzY2ZnMjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNidXNjZmczOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWZzcjsgICAgICAgLyogTWVtb3J5LWZhdWx0IHN0YXR1cyByZWdpc3RlciAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWZhcjsgICAgICAgLyogTWVtb3J5LWZhdWx0IHBoeXNpY2FsIGFkZHJlc3MgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF91bnVzZWQ0WzEwMTRdOwotCS8qIFRoaXJkIHBhZ2UgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG1pZDsgICAgICAgIC8qIElPTU1VIG1vZHVsZS1pZCAqLwotfTsKLQotI2RlZmluZSBJT01NVV9DVFJMX0lNUEwgICAgIDB4ZjAwMDAwMDAgLyogSW1wbGVtZW50YXRpb24gKi8KLSNkZWZpbmUgSU9NTVVfQ1RSTF9WRVJTICAgICAweDBmMDAwMDAwIC8qIFZlcnNpb24gKi8KLSNkZWZpbmUgSU9NTVVfQ1RSTF9STkdFICAgICAweDAwMDAwMDFjIC8qIE1hcHBpbmcgUkFOR0UgKi8KLSNkZWZpbmUgSU9NTVVfUk5HRV8xNk1CICAgICAweDAwMDAwMDAwIC8qIDB4ZmYwMDAwMDAgLT4gMHhmZmZmZmZmZiAqLwotI2RlZmluZSBJT01NVV9STkdFXzMyTUIgICAgIDB4MDAwMDAwMDQgLyogMHhmZTAwMDAwMCAtPiAweGZmZmZmZmZmICovCi0jZGVmaW5lIElPTU1VX1JOR0VfNjRNQiAgICAgMHgwMDAwMDAwOCAvKiAweGZjMDAwMDAwIC0+IDB4ZmZmZmZmZmYgKi8KLSNkZWZpbmUgSU9NTVVfUk5HRV8xMjhNQiAgICAweDAwMDAwMDBjIC8qIDB4ZjgwMDAwMDAgLT4gMHhmZmZmZmZmZiAqLwotI2RlZmluZSBJT01NVV9STkdFXzI1Nk1CICAgIDB4MDAwMDAwMTAgLyogMHhmMDAwMDAwMCAtPiAweGZmZmZmZmZmICovCi0jZGVmaW5lIElPTU1VX1JOR0VfNTEyTUIgICAgMHgwMDAwMDAxNCAvKiAweGUwMDAwMDAwIC0+IDB4ZmZmZmZmZmYgKi8KLSNkZWZpbmUgSU9NTVVfUk5HRV8xR0IgICAgICAweDAwMDAwMDE4IC8qIDB4YzAwMDAwMDAgLT4gMHhmZmZmZmZmZiAqLwotI2RlZmluZSBJT01NVV9STkdFXzJHQiAgICAgIDB4MDAwMDAwMWMgLyogMHg4MDAwMDAwMCAtPiAweGZmZmZmZmZmICovCi0jZGVmaW5lIElPTU1VX0NUUkxfRU5BQiAgICAgMHgwMDAwMDAwMSAvKiBJT01NVSBFbmFibGUgKi8KLQotI2RlZmluZSBJT01NVV9BRlNSX0VSUiAgICAgIDB4ODAwMDAwMDAgLyogTEUsIFRPLCBvciBCRSBhc3NlcnRlZCAqLwotI2RlZmluZSBJT01NVV9BRlNSX0xFICAgICAgIDB4NDAwMDAwMDAgLyogU0JVUyByZXBvcnRzIGVycm9yIGFmdGVyIHRyYW5zYWN0aW9uICovCi0jZGVmaW5lIElPTU1VX0FGU1JfVE8gICAgICAgMHgyMDAwMDAwMCAvKiBXcml0ZSBhY2Nlc3MgdG9vayBtb3JlIHRoYW4gMTIuOCB1cy4gKi8KLSNkZWZpbmUgSU9NTVVfQUZTUl9CRSAgICAgICAweDEwMDAwMDAwIC8qIFdyaXRlIGFjY2VzcyByZWNlaXZlZCBlcnJvciBhY2tub3dsZWRnZSAqLwotI2RlZmluZSBJT01NVV9BRlNSX1NJWkUgICAgIDB4MGUwMDAwMDAgLyogU2l6ZSBvZiB0cmFuc2FjdGlvbiBjYXVzaW5nIGVycm9yICovCi0jZGVmaW5lIElPTU1VX0FGU1JfUyAgICAgICAgMHgwMTAwMDAwMCAvKiBTcGFyYyB3YXMgaW4gc3VwZXJ2aXNvciBtb2RlICovCi0jZGVmaW5lIElPTU1VX0FGU1JfUkVTViAgICAgMHgwMGYwMDAwMCAvKiBSZXNlcnZlciwgZm9yY2VkIHRvIDB4OCBieSBoYXJkd2FyZSAqLwotI2RlZmluZSBJT01NVV9BRlNSX01FICAgICAgIDB4MDAwODAwMDAgLyogTXVsdGlwbGUgZXJyb3JzIG9jY3VycmVkICovCi0jZGVmaW5lIElPTU1VX0FGU1JfUkQgICAgICAgMHgwMDA0MDAwMCAvKiBBIHJlYWQgb3BlcmF0aW9uIHdhcyBpbiBwcm9ncmVzcyAqLwotI2RlZmluZSBJT01NVV9BRlNSX0ZBViAgICAgIDB4MDAwMjAwMDAgLyogSU9NTVUgYWZhciBoYXMgdmFsaWQgY29udGVudHMgKi8KLQotI2RlZmluZSBJT01NVV9TQkNGR19TQUIzMCAgIDB4MDAwMTAwMDAgLyogUGh5cy1hZGRyZXNzIGJpdCAzMCB3aGVuIGJ5cGFzcyBlbmFibGVkICovCi0jZGVmaW5lIElPTU1VX1NCQ0ZHX0JBMTYgICAgMHgwMDAwMDAwNCAvKiBTbGF2ZSBzdXBwb3J0cyAxNiBieXRlIGJ1cnN0cyAqLwotI2RlZmluZSBJT01NVV9TQkNGR19CQTggICAgIDB4MDAwMDAwMDIgLyogU2xhdmUgc3VwcG9ydHMgOCBieXRlIGJ1cnN0cyAqLwotI2RlZmluZSBJT01NVV9TQkNGR19CWVBBU1MgIDB4MDAwMDAwMDEgLyogQnlwYXNzIElPTU1VLCB0cmVhdCBhbGwgYWRkcmVzc2VzCi0JCQkJCSAgcHJvZHVjZWQgYnkgdGhpcyBkZXZpY2UgYXMgcHVyZQotCQkJCQkgIHBoeXNpY2FsLiAqLwotCi0jZGVmaW5lIElPTU1VX01GU1JfRVJSICAgICAgMHg4MDAwMDAwMCAvKiBPbmUgb3IgbW9yZSBvZiBQRVJSMSBvciBQRVJSMCAqLwotI2RlZmluZSBJT01NVV9NRlNSX1MgICAgICAgIDB4MDEwMDAwMDAgLyogU3BhcmMgd2FzIGluIHN1cGVydmlzb3IgbW9kZSAqLwotI2RlZmluZSBJT01NVV9NRlNSX0NQVSAgICAgIDB4MDA4MDAwMDAgLyogQ1BVIHRyYW5zYWN0aW9uIGNhdXNlZCBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgSU9NTVVfTUZTUl9NRSAgICAgICAweDAwMDgwMDAwIC8qIE11bHRpcGxlIHBhcml0eSBlcnJvcnMgb2NjdXJyZWQgKi8KLSNkZWZpbmUgSU9NTVVfTUZTUl9QRVJSICAgICAweDAwMDA2MDAwIC8qIGhpZ2ggYml0IGluZGljYXRlcyBwYXJpdHkgZXJyb3Igb2NjdXJyZWQKLQkJCQkJICBvbiB0aGUgZXZlbiB3b3JkIG9mIHRoZSBhY2Nlc3MsIGxvdyBiaXQKLQkJCQkJICBpbmRpY2F0ZWQgb2RkIHdvcmQgY2F1c2VkIHRoZSBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgSU9NTVVfTUZTUl9CTSAgICAgICAweDAwMDAxMDAwIC8qIEVycm9yIG9jY3VycmVkIHdoaWxlIGluIGJvb3QgbW9kZSAqLwotI2RlZmluZSBJT01NVV9NRlNSX0MgICAgICAgIDB4MDAwMDA4MDAgLyogQWRkcmVzcyBjYXVzaW5nIGVycm9yIHdhcyBtYXJrZWQgY2FjaGVhYmxlICovCi0jZGVmaW5lIElPTU1VX01GU1JfUlRZUCAgICAgMHgwMDAwMDBmMCAvKiBNZW1vcnkgcmVxdWVzdCB0cmFuc2FjdGlvbiB0eXBlICovCi0KLSNkZWZpbmUgSU9NTVVfTUlEX1NCQUUgICAgICAweDAwMWYwMDAwIC8qIFNCdXMgYXJiaXRyYXRpb24gZW5hYmxlICovCi0jZGVmaW5lIElPTU1VX01JRF9TRSAgICAgICAgMHgwMDEwMDAwMCAvKiBFbmFibGVzIFNDU0kvRVRIRVJORVQgYXJiaXRyYXRpb24gKi8KLSNkZWZpbmUgSU9NTVVfTUlEX1NCMyAgICAgICAweDAwMDgwMDAwIC8qIEVuYWJsZSBTQlVTIGRldmljZSAzIGFyYml0cmF0aW9uICovCi0jZGVmaW5lIElPTU1VX01JRF9TQjIgICAgICAgMHgwMDA0MDAwMCAvKiBFbmFibGUgU0JVUyBkZXZpY2UgMiBhcmJpdHJhdGlvbiAqLwotI2RlZmluZSBJT01NVV9NSURfU0IxICAgICAgIDB4MDAwMjAwMDAgLyogRW5hYmxlIFNCVVMgZGV2aWNlIDEgYXJiaXRyYXRpb24gKi8KLSNkZWZpbmUgSU9NTVVfTUlEX1NCMCAgICAgICAweDAwMDEwMDAwIC8qIEVuYWJsZSBTQlVTIGRldmljZSAwIGFyYml0cmF0aW9uICovCi0jZGVmaW5lIElPTU1VX01JRF9NSUQgICAgICAgMHgwMDAwMDAwZiAvKiBNb2R1bGUtaWQsIGhhcmRjb2RlZCB0byAweDggKi8KLQotLyogVGhlIGZvcm1hdCBvZiBhbiBpb3B0ZSBpbiB0aGUgcGFnZSB0YWJsZXMgKi8KLSNkZWZpbmUgSU9QVEVfUEFHRSAgICAgICAgICAweDA3ZmZmZjAwIC8qIFBoeXNpY2FsIHBhZ2UgbnVtYmVyIChQQVszMDoxMl0pICovCi0jZGVmaW5lIElPUFRFX0NBQ0hFICAgICAgICAgMHgwMDAwMDA4MCAvKiBDYWNoZWQgKGluIHZtZSBJT0NBQ0hFIG9yIFZpa2luZy9NWENDKSAqLwotI2RlZmluZSBJT1BURV9XUklURSAgICAgICAgIDB4MDAwMDAwMDQgLyogV3JpdGVhYmxlICovCi0jZGVmaW5lIElPUFRFX1ZBTElEICAgICAgICAgMHgwMDAwMDAwMiAvKiBJT1BURSBpcyB2YWxpZCAqLwotI2RlZmluZSBJT1BURV9XQVogICAgICAgICAgIDB4MDAwMDAwMDEgLyogV3JpdGUgYXMgemVyb3MgKi8KLQotc3RydWN0IGlvbW11X3N0cnVjdCB7Ci0Jc3RydWN0IGlvbW11X3JlZ3MgKnJlZ3M7Ci0JaW9wdGVfdCAqcGFnZV90YWJsZTsKLQkvKiBGb3IgY29udmVuaWVuY2UgKi8KLQl1bnNpZ25lZCBsb25nIHN0YXJ0OyAvKiBGaXJzdCBtYW5hZ2VkIHZpcnR1YWwgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgZW5kOyAgIC8qIExhc3QgbWFuYWdlZCB2aXJ0dWFsIGFkZHJlc3MgKi8KLQotCXN0cnVjdCBiaXRfbWFwIHVzZW1hcDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9pbnZhbGlkYXRlKHN0cnVjdCBpb21tdV9yZWdzICpyZWdzKQotewotCXJlZ3MtPnRsYmZsdXNoID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvbW11X2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgaW9tbXVfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBiYSkKLXsKLQlyZWdzLT5wYWdlZmx1c2ggPSAoYmEgJiBQQUdFX01BU0spOwotfQotCi0jZW5kaWYgLyogIShfU1BBUkNfSU9NTVVfSCkgKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX0lPTU1VX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX0lPTU1VX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9pb21tdV82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvaW9tbXVfMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pb21tdV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9tbXVfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGM1ODljCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9tbXVfMzIuaApAQCAtMCwwICsxLDEyMSBAQAorLyogaW9tbXUuaDogRGVmaW5pdGlvbnMgZm9yIHRoZSBzdW40bSBJT01NVS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZuZGVmIF9TUEFSQ19JT01NVV9ICisjZGVmaW5lIF9TUEFSQ19JT01NVV9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9iaXRleHQuaD4KKworLyogVGhlIGlvbW11IGhhbmRsZXMgYWxsIHZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbnMKKyAqIHRoYXQgb2NjdXIgYmV0d2VlbiB0aGUgU0JVUyBhbmQgcGh5c2ljYWwgbWVtb3J5LiAgQWNjZXNzIGJ5CisgKiB0aGUgY3B1IHRvIElPIHJlZ2lzdGVycyBhbmQgc2ltaWxhciBnbyBvdmVyIHRoZSBtYnVzIHNvIGFyZQorICogdHJhbnNsYXRlZCBieSB0aGUgb24gY2hpcCBTUk1NVS4gIFRoZSBpb21tdSBhbmQgdGhlIHNybW11IGRvCisgKiBub3QgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHRyYW5zbGF0aW9ucyBhdCBhbGwsIGluIGZhY3QgbW9zdAorICogb2YgdGhlIHRpbWUgdGhlIHRyYW5zbGF0aW9ucyB0aGV5IGhhbmRsZSBhcmUgYSBkaXNqdW5jdCBzZXQuCisgKiBCYXNpY2FsbHkgdGhlIGlvbW11IGhhbmRsZXMgYWxsIGR2bWEgc2J1cyBhY3Rpdml0eS4KKyAqLworCisvKiBUaGUgSU9NTVUgcmVnaXN0ZXJzIG9jY3VweSB0aHJlZSBwYWdlcyBpbiBJTyBzcGFjZS4gKi8KK3N0cnVjdCBpb21tdV9yZWdzIHsKKwkvKiBGaXJzdCBwYWdlICovCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjb250cm9sOyAgICAvKiBJT01NVSBjb250cm9sICovCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAgICAvKiBQaHlzaWNhbCBiYXNlIG9mIGlvcHRlIHBhZ2UgdGFibGUgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF91bnVzZWQxWzNdOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGxiZmx1c2g7ICAgLyogd3JpdGUgb25seSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGFnZWZsdXNoOyAgLyogd3JpdGUgb25seSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX3VudXNlZDJbMTAxN107CisJLyogU2Vjb25kIHBhZ2UgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFmc3I7ICAgICAgIC8qIEFzeW5jLWZhdWx0IHN0YXR1cyByZWdpc3RlciAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWZhcjsgICAgICAgLyogQXN5bmMtZmF1bHQgcGh5c2ljYWwgYWRkcmVzcyAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX3VudXNlZDNbMl07CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzYnVzY2ZnMDsgICAvKiBTQlVTIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBwZXItc2xvdCAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc2J1c2NmZzE7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzYnVzY2ZnMjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNidXNjZmczOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWZzcjsgICAgICAgLyogTWVtb3J5LWZhdWx0IHN0YXR1cyByZWdpc3RlciAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbWZhcjsgICAgICAgLyogTWVtb3J5LWZhdWx0IHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF91bnVzZWQ0WzEwMTRdOworCS8qIFRoaXJkIHBhZ2UgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG1pZDsgICAgICAgIC8qIElPTU1VIG1vZHVsZS1pZCAqLworfTsKKworI2RlZmluZSBJT01NVV9DVFJMX0lNUEwgICAgIDB4ZjAwMDAwMDAgLyogSW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgSU9NTVVfQ1RSTF9WRVJTICAgICAweDBmMDAwMDAwIC8qIFZlcnNpb24gKi8KKyNkZWZpbmUgSU9NTVVfQ1RSTF9STkdFICAgICAweDAwMDAwMDFjIC8qIE1hcHBpbmcgUkFOR0UgKi8KKyNkZWZpbmUgSU9NTVVfUk5HRV8xNk1CICAgICAweDAwMDAwMDAwIC8qIDB4ZmYwMDAwMDAgLT4gMHhmZmZmZmZmZiAqLworI2RlZmluZSBJT01NVV9STkdFXzMyTUIgICAgIDB4MDAwMDAwMDQgLyogMHhmZTAwMDAwMCAtPiAweGZmZmZmZmZmICovCisjZGVmaW5lIElPTU1VX1JOR0VfNjRNQiAgICAgMHgwMDAwMDAwOCAvKiAweGZjMDAwMDAwIC0+IDB4ZmZmZmZmZmYgKi8KKyNkZWZpbmUgSU9NTVVfUk5HRV8xMjhNQiAgICAweDAwMDAwMDBjIC8qIDB4ZjgwMDAwMDAgLT4gMHhmZmZmZmZmZiAqLworI2RlZmluZSBJT01NVV9STkdFXzI1Nk1CICAgIDB4MDAwMDAwMTAgLyogMHhmMDAwMDAwMCAtPiAweGZmZmZmZmZmICovCisjZGVmaW5lIElPTU1VX1JOR0VfNTEyTUIgICAgMHgwMDAwMDAxNCAvKiAweGUwMDAwMDAwIC0+IDB4ZmZmZmZmZmYgKi8KKyNkZWZpbmUgSU9NTVVfUk5HRV8xR0IgICAgICAweDAwMDAwMDE4IC8qIDB4YzAwMDAwMDAgLT4gMHhmZmZmZmZmZiAqLworI2RlZmluZSBJT01NVV9STkdFXzJHQiAgICAgIDB4MDAwMDAwMWMgLyogMHg4MDAwMDAwMCAtPiAweGZmZmZmZmZmICovCisjZGVmaW5lIElPTU1VX0NUUkxfRU5BQiAgICAgMHgwMDAwMDAwMSAvKiBJT01NVSBFbmFibGUgKi8KKworI2RlZmluZSBJT01NVV9BRlNSX0VSUiAgICAgIDB4ODAwMDAwMDAgLyogTEUsIFRPLCBvciBCRSBhc3NlcnRlZCAqLworI2RlZmluZSBJT01NVV9BRlNSX0xFICAgICAgIDB4NDAwMDAwMDAgLyogU0JVUyByZXBvcnRzIGVycm9yIGFmdGVyIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIElPTU1VX0FGU1JfVE8gICAgICAgMHgyMDAwMDAwMCAvKiBXcml0ZSBhY2Nlc3MgdG9vayBtb3JlIHRoYW4gMTIuOCB1cy4gKi8KKyNkZWZpbmUgSU9NTVVfQUZTUl9CRSAgICAgICAweDEwMDAwMDAwIC8qIFdyaXRlIGFjY2VzcyByZWNlaXZlZCBlcnJvciBhY2tub3dsZWRnZSAqLworI2RlZmluZSBJT01NVV9BRlNSX1NJWkUgICAgIDB4MGUwMDAwMDAgLyogU2l6ZSBvZiB0cmFuc2FjdGlvbiBjYXVzaW5nIGVycm9yICovCisjZGVmaW5lIElPTU1VX0FGU1JfUyAgICAgICAgMHgwMTAwMDAwMCAvKiBTcGFyYyB3YXMgaW4gc3VwZXJ2aXNvciBtb2RlICovCisjZGVmaW5lIElPTU1VX0FGU1JfUkVTViAgICAgMHgwMGYwMDAwMCAvKiBSZXNlcnZlciwgZm9yY2VkIHRvIDB4OCBieSBoYXJkd2FyZSAqLworI2RlZmluZSBJT01NVV9BRlNSX01FICAgICAgIDB4MDAwODAwMDAgLyogTXVsdGlwbGUgZXJyb3JzIG9jY3VycmVkICovCisjZGVmaW5lIElPTU1VX0FGU1JfUkQgICAgICAgMHgwMDA0MDAwMCAvKiBBIHJlYWQgb3BlcmF0aW9uIHdhcyBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBJT01NVV9BRlNSX0ZBViAgICAgIDB4MDAwMjAwMDAgLyogSU9NTVUgYWZhciBoYXMgdmFsaWQgY29udGVudHMgKi8KKworI2RlZmluZSBJT01NVV9TQkNGR19TQUIzMCAgIDB4MDAwMTAwMDAgLyogUGh5cy1hZGRyZXNzIGJpdCAzMCB3aGVuIGJ5cGFzcyBlbmFibGVkICovCisjZGVmaW5lIElPTU1VX1NCQ0ZHX0JBMTYgICAgMHgwMDAwMDAwNCAvKiBTbGF2ZSBzdXBwb3J0cyAxNiBieXRlIGJ1cnN0cyAqLworI2RlZmluZSBJT01NVV9TQkNGR19CQTggICAgIDB4MDAwMDAwMDIgLyogU2xhdmUgc3VwcG9ydHMgOCBieXRlIGJ1cnN0cyAqLworI2RlZmluZSBJT01NVV9TQkNGR19CWVBBU1MgIDB4MDAwMDAwMDEgLyogQnlwYXNzIElPTU1VLCB0cmVhdCBhbGwgYWRkcmVzc2VzCisJCQkJCSAgcHJvZHVjZWQgYnkgdGhpcyBkZXZpY2UgYXMgcHVyZQorCQkJCQkgIHBoeXNpY2FsLiAqLworCisjZGVmaW5lIElPTU1VX01GU1JfRVJSICAgICAgMHg4MDAwMDAwMCAvKiBPbmUgb3IgbW9yZSBvZiBQRVJSMSBvciBQRVJSMCAqLworI2RlZmluZSBJT01NVV9NRlNSX1MgICAgICAgIDB4MDEwMDAwMDAgLyogU3BhcmMgd2FzIGluIHN1cGVydmlzb3IgbW9kZSAqLworI2RlZmluZSBJT01NVV9NRlNSX0NQVSAgICAgIDB4MDA4MDAwMDAgLyogQ1BVIHRyYW5zYWN0aW9uIGNhdXNlZCBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgSU9NTVVfTUZTUl9NRSAgICAgICAweDAwMDgwMDAwIC8qIE11bHRpcGxlIHBhcml0eSBlcnJvcnMgb2NjdXJyZWQgKi8KKyNkZWZpbmUgSU9NTVVfTUZTUl9QRVJSICAgICAweDAwMDA2MDAwIC8qIGhpZ2ggYml0IGluZGljYXRlcyBwYXJpdHkgZXJyb3Igb2NjdXJyZWQKKwkJCQkJICBvbiB0aGUgZXZlbiB3b3JkIG9mIHRoZSBhY2Nlc3MsIGxvdyBiaXQKKwkJCQkJICBpbmRpY2F0ZWQgb2RkIHdvcmQgY2F1c2VkIHRoZSBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgSU9NTVVfTUZTUl9CTSAgICAgICAweDAwMDAxMDAwIC8qIEVycm9yIG9jY3VycmVkIHdoaWxlIGluIGJvb3QgbW9kZSAqLworI2RlZmluZSBJT01NVV9NRlNSX0MgICAgICAgIDB4MDAwMDA4MDAgLyogQWRkcmVzcyBjYXVzaW5nIGVycm9yIHdhcyBtYXJrZWQgY2FjaGVhYmxlICovCisjZGVmaW5lIElPTU1VX01GU1JfUlRZUCAgICAgMHgwMDAwMDBmMCAvKiBNZW1vcnkgcmVxdWVzdCB0cmFuc2FjdGlvbiB0eXBlICovCisKKyNkZWZpbmUgSU9NTVVfTUlEX1NCQUUgICAgICAweDAwMWYwMDAwIC8qIFNCdXMgYXJiaXRyYXRpb24gZW5hYmxlICovCisjZGVmaW5lIElPTU1VX01JRF9TRSAgICAgICAgMHgwMDEwMDAwMCAvKiBFbmFibGVzIFNDU0kvRVRIRVJORVQgYXJiaXRyYXRpb24gKi8KKyNkZWZpbmUgSU9NTVVfTUlEX1NCMyAgICAgICAweDAwMDgwMDAwIC8qIEVuYWJsZSBTQlVTIGRldmljZSAzIGFyYml0cmF0aW9uICovCisjZGVmaW5lIElPTU1VX01JRF9TQjIgICAgICAgMHgwMDA0MDAwMCAvKiBFbmFibGUgU0JVUyBkZXZpY2UgMiBhcmJpdHJhdGlvbiAqLworI2RlZmluZSBJT01NVV9NSURfU0IxICAgICAgIDB4MDAwMjAwMDAgLyogRW5hYmxlIFNCVVMgZGV2aWNlIDEgYXJiaXRyYXRpb24gKi8KKyNkZWZpbmUgSU9NTVVfTUlEX1NCMCAgICAgICAweDAwMDEwMDAwIC8qIEVuYWJsZSBTQlVTIGRldmljZSAwIGFyYml0cmF0aW9uICovCisjZGVmaW5lIElPTU1VX01JRF9NSUQgICAgICAgMHgwMDAwMDAwZiAvKiBNb2R1bGUtaWQsIGhhcmRjb2RlZCB0byAweDggKi8KKworLyogVGhlIGZvcm1hdCBvZiBhbiBpb3B0ZSBpbiB0aGUgcGFnZSB0YWJsZXMgKi8KKyNkZWZpbmUgSU9QVEVfUEFHRSAgICAgICAgICAweDA3ZmZmZjAwIC8qIFBoeXNpY2FsIHBhZ2UgbnVtYmVyIChQQVszMDoxMl0pICovCisjZGVmaW5lIElPUFRFX0NBQ0hFICAgICAgICAgMHgwMDAwMDA4MCAvKiBDYWNoZWQgKGluIHZtZSBJT0NBQ0hFIG9yIFZpa2luZy9NWENDKSAqLworI2RlZmluZSBJT1BURV9XUklURSAgICAgICAgIDB4MDAwMDAwMDQgLyogV3JpdGVhYmxlICovCisjZGVmaW5lIElPUFRFX1ZBTElEICAgICAgICAgMHgwMDAwMDAwMiAvKiBJT1BURSBpcyB2YWxpZCAqLworI2RlZmluZSBJT1BURV9XQVogICAgICAgICAgIDB4MDAwMDAwMDEgLyogV3JpdGUgYXMgemVyb3MgKi8KKworc3RydWN0IGlvbW11X3N0cnVjdCB7CisJc3RydWN0IGlvbW11X3JlZ3MgKnJlZ3M7CisJaW9wdGVfdCAqcGFnZV90YWJsZTsKKwkvKiBGb3IgY29udmVuaWVuY2UgKi8KKwl1bnNpZ25lZCBsb25nIHN0YXJ0OyAvKiBGaXJzdCBtYW5hZ2VkIHZpcnR1YWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgZW5kOyAgIC8qIExhc3QgbWFuYWdlZCB2aXJ0dWFsIGFkZHJlc3MgKi8KKworCXN0cnVjdCBiaXRfbWFwIHVzZW1hcDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9pbnZhbGlkYXRlKHN0cnVjdCBpb21tdV9yZWdzICpyZWdzKQoreworCXJlZ3MtPnRsYmZsdXNoID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvbW11X2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgaW9tbXVfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBiYSkKK3sKKwlyZWdzLT5wYWdlZmx1c2ggPSAoYmEgJiBQQUdFX01BU0spOworfQorCisjZW5kaWYgLyogIShfU1BBUkNfSU9NTVVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lvbW11XzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pb21tdV82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjlhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pb21tdV82NC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qIGlvbW11Lmg6IERlZmluaXRpb25zIGZvciB0aGUgc3VuNSBJT01NVS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTksIDIwMDcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQorICovCisjaWZuZGVmIF9TUEFSQzY0X0lPTU1VX0gKKyNkZWZpbmUgX1NQQVJDNjRfSU9NTVVfSAorCisvKiBUaGUgZm9ybWF0IG9mIGFuIGlvcHRlIGluIHRoZSBwYWdlIHRhYmxlcy4gKi8KKyNkZWZpbmUgSU9QVEVfVkFMSUQgICAweDgwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBJT1BURV82NEsgICAgIDB4MjAwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIElPUFRFX1NUQlVGICAgMHgxMDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgSU9QVEVfSU5UUkEgICAweDA4MDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBJT1BURV9DT05URVhUIDB4MDdmZjgwMDAwMDAwMDAwMFVMCisjZGVmaW5lIElPUFRFX1BBR0UgICAgMHgwMDAwN2ZmZmZmZmZlMDAwVUwKKyNkZWZpbmUgSU9QVEVfQ0FDSEUgICAweDAwMDAwMDAwMDAwMDAwMTBVTAorI2RlZmluZSBJT1BURV9XUklURSAgIDB4MDAwMDAwMDAwMDAwMDAwMlVMCisKKyNkZWZpbmUgSU9NTVVfTlVNX0NUWFMJNDA5NgorCitzdHJ1Y3QgaW9tbXVfYXJlbmEgeworCXVuc2lnbmVkIGxvbmcJKm1hcDsKKwl1bnNpZ25lZCBpbnQJaGludDsKKwl1bnNpZ25lZCBpbnQJbGltaXQ7Cit9OworCitzdHJ1Y3QgaW9tbXUgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGlvbW11X2FyZW5hCWFyZW5hOworCXZvaWQJCQkoKmZsdXNoX2FsbCkoc3RydWN0IGlvbW11ICopOworCWlvcHRlX3QJCQkqcGFnZV90YWJsZTsKKwl1MzIJCQlwYWdlX3RhYmxlX21hcF9iYXNlOworCXVuc2lnbmVkIGxvbmcJCWlvbW11X2NvbnRyb2w7CisJdW5zaWduZWQgbG9uZwkJaW9tbXVfdHNiYmFzZTsKKwl1bnNpZ25lZCBsb25nCQlpb21tdV9mbHVzaDsKKwl1bnNpZ25lZCBsb25nCQlpb21tdV9mbHVzaGludjsKKwl1bnNpZ25lZCBsb25nCQlpb21tdV90YWdzOworCXVuc2lnbmVkIGxvbmcJCWlvbW11X2N0eGZsdXNoOworCXVuc2lnbmVkIGxvbmcJCXdyaXRlX2NvbXBsZXRlX3JlZzsKKwl1bnNpZ25lZCBsb25nCQlkdW1teV9wYWdlOworCXVuc2lnbmVkIGxvbmcJCWR1bW15X3BhZ2VfcGE7CisJdW5zaWduZWQgbG9uZwkJY3R4X2xvd2VzdF9mcmVlOworCURFQ0xBUkVfQklUTUFQKGN0eF9iaXRtYXAsIElPTU1VX05VTV9DVFhTKTsKKwl1MzIJCQlkbWFfYWRkcl9tYXNrOworfTsKKworc3RydWN0IHN0cmJ1ZiB7CisJaW50CQkJc3RyYnVmX2VuYWJsZWQ7CisJdW5zaWduZWQgbG9uZwkJc3RyYnVmX2NvbnRyb2w7CisJdW5zaWduZWQgbG9uZwkJc3RyYnVmX3BmbHVzaDsKKwl1bnNpZ25lZCBsb25nCQlzdHJidWZfZnN5bmM7CisJdW5zaWduZWQgbG9uZwkJc3RyYnVmX2N0eGZsdXNoOworCXVuc2lnbmVkIGxvbmcJCXN0cmJ1Zl9jdHhtYXRjaF9iYXNlOworCXVuc2lnbmVkIGxvbmcJCXN0cmJ1Zl9mbHVzaGZsYWdfcGE7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqc3RyYnVmX2ZsdXNoZmxhZzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCV9fZmx1c2hmbGFnX2J1ZlsoNjQrKDY0LTEpKSAvIHNpemVvZihsb25nKV07Cit9OworCitleHRlcm4gaW50IGlvbW11X3RhYmxlX2luaXQoc3RydWN0IGlvbW11ICppb21tdSwgaW50IHRzYnNpemUsCisJCQkgICAgdTMyIGRtYV9vZmZzZXQsIHUzMiBkbWFfYWRkcl9tYXNrLAorCQkJICAgIGludCBudW1hX25vZGUpOworCisjZW5kaWYgLyogIShfU1BBUkM2NF9JT01NVV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pcGNidWYuaAppbmRleCA5YmVmMDJkLi4wMzc2MDVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9pcGNidWYuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pcGNidWYuaApAQCAtMSwzMSArMSw4IEBACi0jaWZuZGVmIF9TUEFSQ19JUENCVUZfSAotI2RlZmluZSBfU1BBUkNfSVBDQlVGX0gKLQotLyogCi0gKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIHNwYXJjIGFyY2hpdGVjdHVyZS4KLSAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAotICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCi0gKgotICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgotICogLSAzMi1iaXQgbW9kZQotICogLSAzMi1iaXQgc2VxCi0gKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzIChzbyB0aGF0IHRoaXMgc3RydWN0dXJlIG1hdGNoZXMKLSAqCQkJCSAgICBzcGFyYzY0IGlwYzY0X3Blcm0pCi0gKi8KLQotc3RydWN0IGlwYzY0X3Blcm0KLXsKLQlfX2tlcm5lbF9rZXlfdAkJa2V5OwotCV9fa2VybmVsX3VpZDMyX3QJdWlkOwotCV9fa2VybmVsX2dpZDMyX3QJZ2lkOwotCV9fa2VybmVsX3VpZDMyX3QJY3VpZDsKLQlfX2tlcm5lbF9naWQzMl90CWNnaWQ7Ci0JdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKLQlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7Ci0JdW5zaWduZWQgc2hvcnQJCV9fcGFkMjsKLQl1bnNpZ25lZCBzaG9ydAkJc2VxOwotCXVuc2lnbmVkIGxvbmcgbG9uZwlfX3VudXNlZDE7Ci0JdW5zaWduZWQgbG9uZyBsb25nCV9fdW51c2VkMjsKLX07Ci0KLSNlbmRpZiAvKiBfU1BBUkNfSVBDQlVGX0ggKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX0lQQ0JVRl9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19JUENCVUZfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL2lwY2J1Zl82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvaXBjYnVmXzMyLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaXBjYnVmXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pcGNidWZfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzg3MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaXBjYnVmXzMyLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfU1BBUkNfSVBDQlVGX0gKKyNkZWZpbmUgX1NQQVJDX0lQQ0JVRl9ICisKKy8qCisgKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIHNwYXJjIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSAzMi1iaXQgbW9kZQorICogLSAzMi1iaXQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzIChzbyB0aGF0IHRoaXMgc3RydWN0dXJlIG1hdGNoZXMKKyAqCQkJCSAgICBzcGFyYzY0IGlwYzY0X3Blcm0pCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlfX2tlcm5lbF9rZXlfdAkJa2V5OworCV9fa2VybmVsX3VpZDMyX3QJdWlkOworCV9fa2VybmVsX2dpZDMyX3QJZ2lkOworCV9fa2VybmVsX3VpZDMyX3QJY3VpZDsKKwlfX2tlcm5lbF9naWQzMl90CWNnaWQ7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKKwlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7CisJdW5zaWduZWQgc2hvcnQJCV9fcGFkMjsKKwl1bnNpZ25lZCBzaG9ydAkJc2VxOworCXVuc2lnbmVkIGxvbmcgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZyBsb25nCV9fdW51c2VkMjsKK307CisKKyNlbmRpZiAvKiBfU1BBUkNfSVBDQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lwY2J1Zl82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaXBjYnVmXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0Yjg1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2lwY2J1Zl82NC5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX1NQQVJDNjRfSVBDQlVGX0gKKyNkZWZpbmUgX1NQQVJDNjRfSVBDQlVGX0gKKworLyoKKyAqIFRoZSBpcGM2NF9wZXJtIHN0cnVjdHVyZSBmb3Igc3BhcmM2NCBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IHNlcQorICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcworICovCisKK3N0cnVjdCBpcGM2NF9wZXJtCit7CisJX19rZXJuZWxfa2V5X3QJa2V5OworCV9fa2VybmVsX3VpZF90CXVpZDsKKwlfX2tlcm5lbF9naWRfdAlnaWQ7CisJX19rZXJuZWxfdWlkX3QJY3VpZDsKKwlfX2tlcm5lbF9naWRfdAljZ2lkOworCV9fa2VybmVsX21vZGVfdAltb2RlOworCXVuc2lnbmVkIHNob3J0CV9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydAlzZXE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX1NQQVJDNjRfSVBDQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lycS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaXJxLmgKaW5kZXggZmUyMDVjYy4uN2FmNmJiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaXJxLmgKQEAgLTEsMTUgKzEsOCBAQAotLyogaXJxLmg6IElSUSByZWdpc3RlcnMgb24gdGhlIFNwYXJjLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCi0gKi8KLQotI2lmbmRlZiBfU1BBUkNfSVJRX0gKLSNkZWZpbmUgX1NQQVJDX0lSUV9ICi0KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotI2RlZmluZSBOUl9JUlFTICAgIDE2Ci0KLSNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCi0KKyNpZm5kZWYgX19fQVNNX1NQQVJDX0lSUV9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19JUlFfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL2lycV82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvaXJxXzMyLmg+CisjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaXJxXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pcnFfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTIwNWNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaXJxXzMyLmgKQEAgLTAsMCArMSwxNSBAQAorLyogaXJxLmg6IElSUSByZWdpc3RlcnMgb24gdGhlIFNwYXJjLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfSVJRX0gKKyNkZWZpbmUgX1NQQVJDX0lSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2RlZmluZSBOUl9JUlFTICAgIDE2CisKKyNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaXJxXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pcnFfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmI5YmY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaXJxXzY0LmgKQEAgLTAsMCArMSw5MyBAQAorLyogaXJxLmg6IElSUSByZWdpc3RlcnMgb24gdGhlIDY0LWJpdCBTcGFyYy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQorICogQ29weXJpZ2h0IChDKSAxOTk4IEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KQorICovCisKKyNpZm5kZWYgX1NQQVJDNjRfSVJRX0gKKyNkZWZpbmUgX1NQQVJDNjRfSVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9waWwuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qIElNQVAvSUNMUiByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIElNQVBfVkFMSUQJCTB4ODAwMDAwMDBVTAkvKiBJUlEgRW5hYmxlZAkJKi8KKyNkZWZpbmUgSU1BUF9USURfVVBBCQkweDdjMDAwMDAwVUwJLyogVVBBIFRhcmdldElECQkqLworI2RlZmluZSBJTUFQX1RJRF9KQlVTCQkweDdjMDAwMDAwVUwJLyogSkJVUyBUYXJnZXRJRAkqLworI2RlZmluZSBJTUFQX1RJRF9TSElGVAkJMjYKKyNkZWZpbmUgSU1BUF9BSURfU0FGQVJJCQkweDdjMDAwMDAwVUwJLyogU2FmYXJpIEFnZW50SUQJKi8KKyNkZWZpbmUgSU1BUF9BSURfU0hJRlQJCTI2CisjZGVmaW5lIElNQVBfTklEX1NBRkFSSQkJMHgwM2UwMDAwMFVMCS8qIFNhZmFyaSBOb2RlSUQJKi8KKyNkZWZpbmUgSU1BUF9OSURfU0hJRlQJCTIxCisjZGVmaW5lIElNQVBfSUdOCQkweDAwMDAwN2MwVUwJLyogSVJRIEdyb3VwIE51bWJlcgkqLworI2RlZmluZSBJTUFQX0lOTwkJMHgwMDAwMDAzZlVMCS8qIElSUSBOdW1iZXIJCSovCisjZGVmaW5lIElNQVBfSU5SCQkweDAwMDAwN2ZmVUwJLyogRnVsbCBpbnRlcnJ1cHQgbnVtYmVyKi8KKworI2RlZmluZSBJQ0xSX0lETEUJCTB4MDAwMDAwMDBVTAkvKiBJZGxlIHN0YXRlCQkqLworI2RlZmluZSBJQ0xSX1RSQU5TTUlUCQkweDAwMDAwMDAxVUwJLyogVHJhbnNtaXQgc3RhdGUJKi8KKyNkZWZpbmUgSUNMUl9QRU5ESU5HCQkweDAwMDAwMDAzVUwJLyogUGVuZGluZyBzdGF0ZQkqLworCisvKiBUaGUgbGFyZ2VzdCBudW1iZXIgb2YgdW5pcXVlIGludGVycnVwdCBzb3VyY2VzIHdlIHN1cHBvcnQuCisgKiBJZiB0aGlzIG5lZWRzIHRvIGV2ZXIgYmUgbGFyZ2VyIHRoYW4gMjU1LCB5b3UgbmVlZCB0byBjaGFuZ2UKKyAqIHRoZSB0eXBlIG9mIGlub19idWNrZXQtPnZpcnRfaXJxIGFzIGFwcHJvcHJpYXRlLgorICoKKyAqIGlub19idWNrZXQtPnZpcnRfaXJxIGFsbG9jYXRpb24gaXMgbWFkZSBkdXJpbmcge3N1bjR2Xyx9YnVpbGRfaXJxKCkuCisgKi8KKyNkZWZpbmUgTlJfSVJRUyAgICAyNTUKKworZXh0ZXJuIHZvaWQgaXJxX2luc3RhbGxfcHJlX2hhbmRsZXIoaW50IHZpcnRfaXJxLAorCQkJCSAgICB2b2lkICgqZnVuYykodW5zaWduZWQgaW50LCB2b2lkICosIHZvaWQgKiksCisJCQkJICAgIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpOworI2RlZmluZSBpcnFfY2Fub25pY2FsaXplKGlycSkJKGlycSkKK2V4dGVybiB1bnNpZ25lZCBpbnQgYnVpbGRfaXJxKGludCBpbm9maXh1cCwgdW5zaWduZWQgbG9uZyBpY2xyLCB1bnNpZ25lZCBsb25nIGltYXApOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdW40dl9idWlsZF9pcnEodTMyIGRldmhhbmRsZSwgdW5zaWduZWQgaW50IGRldmlubyk7CitleHRlcm4gdW5zaWduZWQgaW50IHN1bjR2X2J1aWxkX3ZpcnEodTMyIGRldmhhbmRsZSwgdW5zaWduZWQgaW50IGRldmlubyk7CitleHRlcm4gdW5zaWduZWQgaW50IHN1bjR2X2J1aWxkX21zaSh1MzIgZGV2aGFuZGxlLCB1bnNpZ25lZCBpbnQgKnZpcnRfaXJxX3AsCisJCQkJICAgIHVuc2lnbmVkIGludCBtc2lfZGV2aW5vX3N0YXJ0LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbXNpX2Rldmlub19lbmQpOworZXh0ZXJuIHZvaWQgc3VuNHZfZGVzdHJveV9tc2kodW5zaWduZWQgaW50IHZpcnRfaXJxKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3VuNHVfYnVpbGRfbXNpKHUzMiBwb3J0aWQsIHVuc2lnbmVkIGludCAqdmlydF9pcnFfcCwKKwkJCQkgICAgdW5zaWduZWQgaW50IG1zaV9kZXZpbm9fc3RhcnQsCisJCQkJICAgIHVuc2lnbmVkIGludCBtc2lfZGV2aW5vX2VuZCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBpbWFwX2Jhc2UsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgaWNscl9iYXNlKTsKK2V4dGVybiB2b2lkIHN1bjR1X2Rlc3Ryb3lfbXNpKHVuc2lnbmVkIGludCB2aXJ0X2lycSk7CitleHRlcm4gdW5zaWduZWQgaW50IHNidXNfYnVpbGRfaXJxKHZvaWQgKnNidXMsIHVuc2lnbmVkIGludCBpbm8pOworCitleHRlcm4gdW5zaWduZWQgY2hhciB2aXJ0X2lycV9hbGxvYyh1bnNpZ25lZCBpbnQgZGV2X2hhbmRsZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IGRldl9pbm8pOworI2lmZGVmIENPTkZJR19QQ0lfTVNJCitleHRlcm4gdm9pZCB2aXJ0X2lycV9mcmVlKHVuc2lnbmVkIGludCB2aXJ0X2lycSk7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpOworZXh0ZXJuIHZvaWQgZml4dXBfaXJxcyh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9zb2Z0aW50KHVuc2lnbmVkIGxvbmcgYml0cykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3IJJTAsIDB4MCwgJSVzZXRfc29mdGludCIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChiaXRzKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0aW50KHVuc2lnbmVkIGxvbmcgYml0cykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3IJJTAsIDB4MCwgJSVjbGVhcl9zb2Z0aW50IgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKGJpdHMpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9zb2Z0aW50KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQJJSVzb2Z0aW50LCAlMCIKKwkJCSAgICAgOiAiPXIiIChyZXR2YWwpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lycWZsYWdzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pcnFmbGFncy5oCmluZGV4IGRiMzk4ZmIuLmM2NDAyYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2lycWZsYWdzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaXJxZmxhZ3MuaApAQCAtMSwzOSArMSw4IEBACi0vKgotICogaW5jbHVkZS9hc20tc3BhcmMvaXJxZmxhZ3MuaAotICoKLSAqIElSUSBmbGFncyBoYW5kbGluZwotICoKLSAqIFRoaXMgZmlsZSBnZXRzIGluY2x1ZGVkIGZyb20gbG93bGV2ZWwgYXNtIGhlYWRlcnMgdG9vLCB0byBwcm92aWRlCi0gKiB3cmFwcGVkIHZlcnNpb25zIG9mIHRoZSBsb2NhbF9pcnFfKigpIEFQSXMsIGJhc2VkIG9uIHRoZQotICogcmF3X2xvY2FsX2lycV8qKCkgZnVuY3Rpb25zIGZyb20gdGhlIGxvd2xldmVsIGhlYWRlcnMuCi0gKi8KLSNpZm5kZWYgX0FTTV9JUlFGTEFHU19ICi0jZGVmaW5lIF9BU01fSVJRRkxBR1NfSAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1leHRlcm4gdm9pZCByYXdfbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9pcnFfc2F2ZSh2b2lkKTsKLWV4dGVybiB2b2lkIHJhd19sb2NhbF9pcnFfZW5hYmxlKHZvaWQpOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0aXBsKHZvaWQpCi17Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcmV0dmFsOwotCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZCAgICAgICAgJSVwc3IsICUwIiA6ICI9ciIgKHJldHZhbCkpOwotICAgICAgICByZXR1cm4gcmV0dmFsOwotfQotCi0jZGVmaW5lIHJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSAoKGZsYWdzKSA9IGdldGlwbCgpKQotI2RlZmluZSByYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpICAgKChmbGFncykgPSBfX3Jhd19sb2NhbF9pcnFfc2F2ZSgpKQotI2RlZmluZSByYXdfbG9jYWxfaXJxX2Rpc2FibGUoKSAgICAgKCh2b2lkKSBfX3Jhd19sb2NhbF9pcnFfc2F2ZSgpKQotI2RlZmluZSByYXdfaXJxc19kaXNhYmxlZCgpICAgICAgICAgKChnZXRpcGwoKSAmIFBTUl9QSUwpICE9IDApCi0KLXN0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0gICAgICAgIHJldHVybiAoKGZsYWdzICYgUFNSX1BJTCkgIT0gMCk7Ci19Ci0KLSNlbmRpZiAvKiAoX19BU1NFTUJMWV9fKSAqLwotCi0jZW5kaWYgLyogIShfQVNNX0lSUUZMQUdTX0gpICovCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19JUlFGTEFHU19ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19JUlFGTEFHU19ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvaXJxZmxhZ3NfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL2lycWZsYWdzXzMyLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaXJxZmxhZ3NfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2lycWZsYWdzXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzOThmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2lycWZsYWdzXzMyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNwYXJjL2lycWZsYWdzLmgKKyAqCisgKiBJUlEgZmxhZ3MgaGFuZGxpbmcKKyAqCisgKiBUaGlzIGZpbGUgZ2V0cyBpbmNsdWRlZCBmcm9tIGxvd2xldmVsIGFzbSBoZWFkZXJzIHRvbywgdG8gcHJvdmlkZQorICogd3JhcHBlZCB2ZXJzaW9ucyBvZiB0aGUgbG9jYWxfaXJxXyooKSBBUElzLCBiYXNlZCBvbiB0aGUKKyAqIHJhd19sb2NhbF9pcnFfKigpIGZ1bmN0aW9ucyBmcm9tIHRoZSBsb3dsZXZlbCBoZWFkZXJzLgorICovCisjaWZuZGVmIF9BU01fSVJRRkxBR1NfSAorI2RlZmluZSBfQVNNX0lSUUZMQUdTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJuIHZvaWQgcmF3X2xvY2FsX2lycV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfaXJxX3NhdmUodm9pZCk7CitleHRlcm4gdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldGlwbCh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIHJldHZhbDsKKworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQgICAgICAgICUlcHNyLCAlMCIgOiAiPXIiIChyZXR2YWwpKTsKKyAgICAgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2RlZmluZSByYXdfbG9jYWxfc2F2ZV9mbGFncyhmbGFncykgKChmbGFncykgPSBnZXRpcGwoKSkKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKSAgICgoZmxhZ3MpID0gX19yYXdfbG9jYWxfaXJxX3NhdmUoKSkKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9kaXNhYmxlKCkgICAgICgodm9pZCkgX19yYXdfbG9jYWxfaXJxX3NhdmUoKSkKKyNkZWZpbmUgcmF3X2lycXNfZGlzYWJsZWQoKSAgICAgICAgICgoZ2V0aXBsKCkgJiBQU1JfUElMKSAhPSAwKQorCitzdGF0aWMgaW5saW5lIGludCByYXdfaXJxc19kaXNhYmxlZF9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworICAgICAgICByZXR1cm4gKChmbGFncyAmIFBTUl9QSUwpICE9IDApOworfQorCisjZW5kaWYgLyogKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX0FTTV9JUlFGTEFHU19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaXJxZmxhZ3NfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2lycWZsYWdzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0ZmM1NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2lycWZsYWdzXzY0LmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNwYXJjNjQvaXJxZmxhZ3MuaAorICoKKyAqIElSUSBmbGFncyBoYW5kbGluZworICoKKyAqIFRoaXMgZmlsZSBnZXRzIGluY2x1ZGVkIGZyb20gbG93bGV2ZWwgYXNtIGhlYWRlcnMgdG9vLCB0byBwcm92aWRlCisgKiB3cmFwcGVkIHZlcnNpb25zIG9mIHRoZSBsb2NhbF9pcnFfKigpIEFQSXMsIGJhc2VkIG9uIHRoZQorICogcmF3X2xvY2FsX2lycV8qKCkgZnVuY3Rpb25zIGZyb20gdGhlIGxvd2xldmVsIGhlYWRlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9JUlFGTEFHU19ICisjZGVmaW5lIF9BU01fSVJRRkxBR1NfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfc2F2ZV9mbGFncyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInJkcHIJJSVwaWwsICUwIgorCQk6ICI9ciIgKGZsYWdzKQorCSk7CisKKwlyZXR1cm4gZmxhZ3M7Cit9CisKKyNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpIFwKKwkJZG8geyAoZmxhZ3MpID0gX19yYXdfbG9jYWxfc2F2ZV9mbGFncygpOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJ3cnByCSUwLCAlJXBpbCIKKwkJOiAvKiBubyBvdXRwdXQgKi8KKwkJOiAiciIgKGZsYWdzKQorCQk6ICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkid3JwcgkxNSwgJSVwaWwiCisJCTogLyogbm8gb3V0cHV0cyAqLworCQk6IC8qIG5vIGlucHV0cyAqLworCQk6ICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZW5hYmxlKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJ3cnByCTAsICUlcGlsIgorCQk6IC8qIG5vIG91dHB1dHMgKi8KKwkJOiAvKiBubyBpbnB1dHMgKi8KKwkJOiAibWVtb3J5IgorCSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIChmbGFncyA+IDApOworfQorCitzdGF0aWMgaW5saW5lIGludCByYXdfaXJxc19kaXNhYmxlZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7CisKKwlyZXR1cm4gcmF3X2lycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpOworfQorCisvKgorICogRm9yIHNwaW5sb2NrcywgZXRjOgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfaXJxX3NhdmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gX19yYXdfbG9jYWxfc2F2ZV9mbGFncygpOworCisJcmF3X2xvY2FsX2lycV9kaXNhYmxlKCk7CisKKwlyZXR1cm4gZmxhZ3M7Cit9CisKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKSBcCisJCWRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX2lycV9zYXZlKCk7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfQVNNX0lSUUZMQUdTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2tkZWJ1Zy5oCmluZGV4IGY2OWZlN2QuLmZlMDdkMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2tkZWJ1Zy5oCkBAIC0xLDczICsxLDggQEAKLS8qCi0gKiBrZGVidWcuaDogIERlZmluZXMgYW5kIGRlZmluaXRpb25zIGZvciBkZWJ1Z2dpbmcgdGhlIExpbnV4IGtlcm5lbAotICogICAgICAgICAgICB1bmRlciB2YXJpb3VzIGtlcm5lbCBkZWJ1Z2dlcnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotI2lmbmRlZiBfU1BBUkNfS0RFQlVHX0gKLSNkZWZpbmUgX1NQQVJDX0tERUJVR19ICi0KLSNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KLSNpbmNsdWRlIDxhc20vdmFkZHJzLmg+Ci0KLS8qIEJyZWFrcG9pbnRzIGFyZSBlbnRlciB0aHJvdWdoIHRyYXAgdGFibGUgZW50cnkgMTI2LiAgU28gaW4gc3BhcmMgYXNzZW1ibHkKLSAqIGlmIHlvdSB3YW50IHRvIGRyb3AgaW50byB0aGUgZGVidWdnZXIgeW91IGRvOgotICoKLSAqIHQgREVCVUdfQlBfVFJBUAotICovCi0KLSNkZWZpbmUgREVCVUdfQlBfVFJBUCAgICAgMTI2Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBUaGUgZGVidWcgdmVjdG9yIGlzIHBhc3NlZCBpbiAlbzEgYXQgYm9vdCB0aW1lLiAgSXQgaXMgYSBwb2ludGVyIHRvCi0gKiBhIHN0cnVjdHVyZSBpbiB0aGUgZGVidWdnZXJzIGFkZHJlc3Mgc3BhY2UuICBIZXJlIGlzIGl0cyBmb3JtYXQuCi0gKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgKCpkZWJ1Z2dlcl9mdW5jdCkodm9pZCk7Ci0KLXN0cnVjdCBrZXJuZWxfZGVidWcgewotCS8qIEZpcnN0IHRoZSBlbnRyeSBwb2ludCBpbnRvIHRoZSBkZWJ1Z2dlci4gIFlvdSBqdW1wIGhlcmUKLQkgKiB0byBnaXZlIGNvbnRyb2wgb3ZlciB0byB0aGUgZGVidWdnZXIuCi0JICovCi0JdW5zaWduZWQgbG9uZyBrZGVidWdfZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBrZGVidWdfdHJhcG1lOyAgIC8qIEZpZ3VyZSBvdXQgbGF0ZXIuLi4gKi8KLQkvKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB0aGUgZGVidWdnZXIgaGFzCi0JICogdGFrZW4gZnJvbSB0byB0b3RhbCBwb29sLgotCSAqLwotCXVuc2lnbmVkIGxvbmcgKmtkZWJ1Z19zdG9sZW5fcGFnZXM7Ci0JLyogT2ssIGFmdGVyIHlvdSByZW1hcCB5b3Vyc2VsZiBhbmQvb3IgY2hhbmdlIHRoZSB0cmFwIHRhYmxlCi0JICogZnJvbSB3aGF0IHlvdSB3ZXJlIGxlZnQgd2l0aCBhdCBib290IHRpbWUgeW91IGhhdmUgdG8gY2FsbAotCSAqIHRoaXMgc3luY2hyb25pemF0aW9uIGZ1bmN0aW9uIHNvIHRoZSBkZWJ1Z2dlciBjYW4gY2hlY2sgb3V0Ci0JICogd2hhdCB5b3UgaGF2ZSBkb25lLgotCSAqLwotCWRlYnVnZ2VyX2Z1bmN0IHRlYWNoX2RlYnVnZ2VyOwotfTsgLyogSSB0aGluayB0aGF0IGlzIGl0Li4uICovCi0KLWV4dGVybiBzdHJ1Y3Qga2VybmVsX2RlYnVnICpsaW51eF9kYnZlYzsKLQotLyogVXNlIHRoaXMgbWFjcm8gaW4gQy1jb2RlIHRvIGVudGVyIHRoZSBkZWJ1Z2dlci4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcF9lbnRlcl9kZWJ1Z2dlcih2b2lkKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJqbXBsICUwLCAlJW83XG5cdCIKLQkJCSAgICAgIm5vcFxuXHQiIDogOgotCQkJICAgICAiciIgKGxpbnV4X2RidmVjKSA6ICJvNyIsICJtZW1vcnkiKTsKLX0KLQotI2RlZmluZSBTUF9FTlRFUl9ERUJVR0dFUiBkbyB7IFwKLQkgICAgIGlmKChsaW51eF9kYnZlYyE9MCkgJiYgKCgqKHNob3J0ICopbGludXhfZGJ2ZWMpIT0tMSkpIFwKLQkgICAgICAgc3BfZW50ZXJfZGVidWdnZXIoKTsgXAotCQkgICAgICAgfSB3aGlsZSgwKQotCi1lbnVtIGRpZV92YWwgewotCURJRV9VTlVTRUQsCi19OwotCi0jZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCi0KLS8qIFNvbWUgbmljZSBvZmZzZXQgZGVmaW5lcyBmb3IgYXNzZW1ibGVyIGNvZGUuICovCi0jZGVmaW5lIEtERUJVR19FTlRSWV9PRkYgICAgMHgwCi0jZGVmaW5lIEtERUJVR19EVU5OT19PRkYgICAgMHg0Ci0jZGVmaW5lIEtERUJVR19EVU5OTzJfT0ZGICAgMHg4Ci0jZGVmaW5lIEtERUJVR19URUFDSF9PRkYgICAgMHhjCi0KLSNlbmRpZiAvKiAhKF9TUEFSQ19LREVCVUdfSCkgKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX0tERUJVR19ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19LREVCVUdfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL2tkZWJ1Z182NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMva2RlYnVnXzMyLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMva2RlYnVnXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9rZGVidWdfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjlmZTdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMva2RlYnVnXzMyLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGtkZWJ1Zy5oOiAgRGVmaW5lcyBhbmQgZGVmaW5pdGlvbnMgZm9yIGRlYnVnZ2luZyB0aGUgTGludXgga2VybmVsCisgKiAgICAgICAgICAgIHVuZGVyIHZhcmlvdXMga2VybmVsIGRlYnVnZ2Vycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisjaWZuZGVmIF9TUEFSQ19LREVCVUdfSAorI2RlZmluZSBfU1BBUkNfS0RFQlVHX0gKKworI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgorI2luY2x1ZGUgPGFzbS92YWRkcnMuaD4KKworLyogQnJlYWtwb2ludHMgYXJlIGVudGVyIHRocm91Z2ggdHJhcCB0YWJsZSBlbnRyeSAxMjYuICBTbyBpbiBzcGFyYyBhc3NlbWJseQorICogaWYgeW91IHdhbnQgdG8gZHJvcCBpbnRvIHRoZSBkZWJ1Z2dlciB5b3UgZG86CisgKgorICogdCBERUJVR19CUF9UUkFQCisgKi8KKworI2RlZmluZSBERUJVR19CUF9UUkFQICAgICAxMjYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIFRoZSBkZWJ1ZyB2ZWN0b3IgaXMgcGFzc2VkIGluICVvMSBhdCBib290IHRpbWUuICBJdCBpcyBhIHBvaW50ZXIgdG8KKyAqIGEgc3RydWN0dXJlIGluIHRoZSBkZWJ1Z2dlcnMgYWRkcmVzcyBzcGFjZS4gIEhlcmUgaXMgaXRzIGZvcm1hdC4KKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCAoKmRlYnVnZ2VyX2Z1bmN0KSh2b2lkKTsKKworc3RydWN0IGtlcm5lbF9kZWJ1ZyB7CisJLyogRmlyc3QgdGhlIGVudHJ5IHBvaW50IGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGp1bXAgaGVyZQorCSAqIHRvIGdpdmUgY29udHJvbCBvdmVyIHRvIHRoZSBkZWJ1Z2dlci4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGtkZWJ1Z19lbnRyeTsKKwl1bnNpZ25lZCBsb25nIGtkZWJ1Z190cmFwbWU7ICAgLyogRmlndXJlIG91dCBsYXRlci4uLiAqLworCS8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0IHRoZSBkZWJ1Z2dlciBoYXMKKwkgKiB0YWtlbiBmcm9tIHRvIHRvdGFsIHBvb2wuCisJICovCisJdW5zaWduZWQgbG9uZyAqa2RlYnVnX3N0b2xlbl9wYWdlczsKKwkvKiBPaywgYWZ0ZXIgeW91IHJlbWFwIHlvdXJzZWxmIGFuZC9vciBjaGFuZ2UgdGhlIHRyYXAgdGFibGUKKwkgKiBmcm9tIHdoYXQgeW91IHdlcmUgbGVmdCB3aXRoIGF0IGJvb3QgdGltZSB5b3UgaGF2ZSB0byBjYWxsCisJICogdGhpcyBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb24gc28gdGhlIGRlYnVnZ2VyIGNhbiBjaGVjayBvdXQKKwkgKiB3aGF0IHlvdSBoYXZlIGRvbmUuCisJICovCisJZGVidWdnZXJfZnVuY3QgdGVhY2hfZGVidWdnZXI7Cit9OyAvKiBJIHRoaW5rIHRoYXQgaXMgaXQuLi4gKi8KKworZXh0ZXJuIHN0cnVjdCBrZXJuZWxfZGVidWcgKmxpbnV4X2RidmVjOworCisvKiBVc2UgdGhpcyBtYWNybyBpbiBDLWNvZGUgdG8gZW50ZXIgdGhlIGRlYnVnZ2VyLiAqLworc3RhdGljIGlubGluZSB2b2lkIHNwX2VudGVyX2RlYnVnZ2VyKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImptcGwgJTAsICUlbzdcblx0IgorCQkJICAgICAibm9wXG5cdCIgOiA6CisJCQkgICAgICJyIiAobGludXhfZGJ2ZWMpIDogIm83IiwgIm1lbW9yeSIpOworfQorCisjZGVmaW5lIFNQX0VOVEVSX0RFQlVHR0VSIGRvIHsgXAorCSAgICAgaWYoKGxpbnV4X2RidmVjIT0wKSAmJiAoKCooc2hvcnQgKilsaW51eF9kYnZlYykhPS0xKSkgXAorCSAgICAgICBzcF9lbnRlcl9kZWJ1Z2dlcigpOyBcCisJCSAgICAgICB9IHdoaWxlKDApCisKK2VudW0gZGllX3ZhbCB7CisJRElFX1VOVVNFRCwKK307CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworLyogU29tZSBuaWNlIG9mZnNldCBkZWZpbmVzIGZvciBhc3NlbWJsZXIgY29kZS4gKi8KKyNkZWZpbmUgS0RFQlVHX0VOVFJZX09GRiAgICAweDAKKyNkZWZpbmUgS0RFQlVHX0RVTk5PX09GRiAgICAweDQKKyNkZWZpbmUgS0RFQlVHX0RVTk5PMl9PRkYgICAweDgKKyNkZWZpbmUgS0RFQlVHX1RFQUNIX09GRiAgICAweGMKKworI2VuZGlmIC8qICEoX1NQQVJDX0tERUJVR19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMva2RlYnVnXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9rZGVidWdfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTA1Yjc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMva2RlYnVnXzY0LmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfU1BBUkM2NF9LREVCVUdfSAorI2RlZmluZSBfU1BBUkM2NF9LREVCVUdfSAorCitzdHJ1Y3QgcHRfcmVnczsKKworZXh0ZXJuIHZvaWQgYmFkX3RyYXAoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CisKKy8qIEdyb3NzbHkgbWlzbmFtZWQuICovCitlbnVtIGRpZV92YWwgeworCURJRV9PT1BTID0gMSwKKwlESUVfREVCVUcsCS8qIHRhIDB4NzAgKi8KKwlESUVfREVCVUdfMiwJLyogdGEgMHg3MSAqLworCURJRV9ESUUsCisJRElFX1RSQVAsCisJRElFX1RSQVBfVEwxLAorCURJRV9DQUxMLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9rbWFwX3R5cGVzLmgKaW5kZXggZTIxNWY3MS4uNjAyZjVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMva21hcF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2ttYXBfdHlwZXMuaApAQCAtMSw2ICsxLDEwIEBACiAjaWZuZGVmIF9BU01fS01BUF9UWVBFU19ICiAjZGVmaW5lIF9BU01fS01BUF9UWVBFU19ICiAKKy8qIER1bW15IGhlYWRlciBqdXN0IHRvIGRlZmluZSBrbV90eXBlLiAgTm9uZSBvZiB0aGlzCisgKiBpcyBhY3R1YWxseSB1c2VkIG9uIHNwYXJjLiAgLURhdmVNCisgKi8KKwogZW51bSBrbV90eXBlIHsKIAlLTV9CT1VOQ0VfUkVBRCwKIAlLTV9TS0JfU1VOUlBDX0RBVEEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9rcHJvYmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3OWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2twcm9iZXMuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9TUEFSQzY0X0tQUk9CRVNfSAorI2RlZmluZSBfU1BBUkM2NF9LUFJPQkVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisKK3R5cGVkZWYgdTMyIGtwcm9iZV9vcGNvZGVfdDsKKworI2RlZmluZSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OICAgMHg5MWQwMjA3MCAvKiB0YSAweDcwICovCisjZGVmaW5lIEJSRUFLUE9JTlRfSU5TVFJVQ1RJT05fMiAweDkxZDAyMDcxIC8qIHRhIDB4NzEgKi8KKyNkZWZpbmUgTUFYX0lOU05fU0laRSAyCisKKyNkZWZpbmUga3JldHByb2JlX2JsYWNrbGlzdF9zaXplIDAKKworI2RlZmluZSBhcmNoX3JlbW92ZV9rcHJvYmUocCkJZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCQlcCitkbyB7IAlmbHVzaGkoJihwKS0+YWluc24uaW5zblswXSk7CVwKKwlmbHVzaGkoJihwKS0+YWluc24uaW5zblsxXSk7CVwKK30gd2hpbGUgKDApCisKK3ZvaWQga3JldHByb2JlX3RyYW1wb2xpbmUodm9pZCk7CisKKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uKi8KK3N0cnVjdCBhcmNoX3NwZWNpZmljX2luc24geworCS8qIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJa3Byb2JlX29wY29kZV90IGluc25bTUFYX0lOU05fU0laRV07Cit9OworCitzdHJ1Y3QgcHJldl9rcHJvYmUgeworCXN0cnVjdCBrcHJvYmUgKmtwOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgb3JpZ190bnBjOworCXVuc2lnbmVkIGxvbmcgb3JpZ190c3RhdGVfcGlsOworfTsKKworLyogcGVyLWNwdSBrcHJvYmUgY29udHJvbCBibG9jayAqLworc3RydWN0IGtwcm9iZV9jdGxibGsgeworCXVuc2lnbmVkIGxvbmcga3Byb2JlX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGtwcm9iZV9vcmlnX3RucGM7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfb3JpZ190c3RhdGVfcGlsOworCXN0cnVjdCBwdF9yZWdzIGpwcm9iZV9zYXZlZF9yZWdzOworCXN0cnVjdCBwcmV2X2twcm9iZSBwcmV2X2twcm9iZTsKK307CisKK2V4dGVybiBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucik7CisjZW5kaWYgLyogX1NQQVJDNjRfS1BST0JFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9sZGMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2xkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjUyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9sZGMuaApAQCAtMCwwICsxLDEzOCBAQAorI2lmbmRlZiBfU1BBUkM2NF9MRENfSAorI2RlZmluZSBfU1BBUkM2NF9MRENfSAorCisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKworZXh0ZXJuIGludCBsZG9tX2RvbWFpbmluZ19lbmFibGVkOworZXh0ZXJuIHZvaWQgbGRvbV9zZXRfdmFyKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOworZXh0ZXJuIHZvaWQgbGRvbV9yZWJvb3QoY29uc3QgY2hhciAqYm9vdF9jb21tYW5kKTsKK2V4dGVybiB2b2lkIGxkb21fcG93ZXJfb2ZmKHZvaWQpOworCisvKiBUaGUgZXZlbnQgaGFuZGxlciB3aWxsIGJlIGV2b2tlZCB3aGVuIGxpbmsgc3RhdGUgY2hhbmdlcworICogb3IgZGF0YSBiZWNvbWVzIGF2YWlsYWJsZSBvbiB0aGUgcmVjZWl2ZSBzaWRlLgorICoKKyAqIEZvciBub24tUkFXIGxpbmtzLCBpZiB0aGUgTERDX0VWRU5UX1JFU0VUIGV2ZW50IGFycml2ZXMgdGhlCisgKiBkcml2ZXIgc2hvdWxkIHJlc2V0IGFsbCBvZiBpdCdzIGludGVybmFsIHN0YXRlIGFuZCByZWludm9rZQorICogbGRjX2Nvbm5lY3QoKSB0byB0cnkgYW5kIGJyaW5nIHRoZSBsaW5rIHVwIGFnYWluLgorICoKKyAqIEZvciBSQVcgbGlua3MsIGxkY19jb25uZWN0KCkgaXMgbm90IHVzZWQuICBJbnN0ZWFkIHRoZSBkcml2ZXIKKyAqIGp1c3Qgd2FpdHMgZm9yIHRoZSBMRENfRVZFTlRfVVAgZXZlbnQuCisgKi8KK3N0cnVjdCBsZGNfY2hhbm5lbF9jb25maWcgeworCXZvaWQgKCpldmVudCkodm9pZCAqYXJnLCBpbnQgZXZlbnQpOworCisJdTMyCQkJbXR1OworCXVuc2lnbmVkIGludAkJcnhfaXJxOworCXVuc2lnbmVkIGludAkJdHhfaXJxOworCXU4CQkJbW9kZTsKKyNkZWZpbmUgTERDX01PREVfUkFXCQkweDAwCisjZGVmaW5lIExEQ19NT0RFX1VOUkVMSUFCTEUJMHgwMQorI2RlZmluZSBMRENfTU9ERV9SRVNFUlZFRAkweDAyCisjZGVmaW5lIExEQ19NT0RFX1NUUkVBTQkJMHgwMworCisJdTgJCQlkZWJ1ZzsKKyNkZWZpbmUgTERDX0RFQlVHX0hTCQkweDAxCisjZGVmaW5lIExEQ19ERUJVR19TVEFURQkJMHgwMgorI2RlZmluZSBMRENfREVCVUdfUlgJCTB4MDQKKyNkZWZpbmUgTERDX0RFQlVHX1RYCQkweDA4CisjZGVmaW5lIExEQ19ERUJVR19EQVRBCQkweDEwCit9OworCisjZGVmaW5lIExEQ19FVkVOVF9SRVNFVAkJMHgwMQorI2RlZmluZSBMRENfRVZFTlRfVVAJCTB4MDIKKyNkZWZpbmUgTERDX0VWRU5UX0RBVEFfUkVBRFkJMHgwNAorCisjZGVmaW5lIExEQ19TVEFURV9JTlZBTElECTB4MDAKKyNkZWZpbmUgTERDX1NUQVRFX0lOSVQJCTB4MDEKKyNkZWZpbmUgTERDX1NUQVRFX0JPVU5ECQkweDAyCisjZGVmaW5lIExEQ19TVEFURV9SRUFEWQkJMHgwMworI2RlZmluZSBMRENfU1RBVEVfQ09OTkVDVEVECTB4MDQKKworc3RydWN0IGxkY19jaGFubmVsOworCisvKiBBbGxvY2F0ZSBzdGF0ZSBmb3IgYSBjaGFubmVsLiAgKi8KK2V4dGVybiBzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxkY19hbGxvYyh1bnNpZ25lZCBsb25nIGlkLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGxkY19jaGFubmVsX2NvbmZpZyAqY2ZncCwKKwkJCQkgICAgIHZvaWQgKmV2ZW50X2FyZyk7CisKKy8qIFNodXQgZG93biBhbmQgZnJlZSBzdGF0ZSBmb3IgYSBjaGFubmVsLiAgKi8KK2V4dGVybiB2b2lkIGxkY19mcmVlKHN0cnVjdCBsZGNfY2hhbm5lbCAqbHApOworCisvKiBSZWdpc3RlciBUWCBhbmQgUlggcXVldWVzIG9mIHRoZSBsaW5rIHdpdGggdGhlIGh5cGVydmlzb3IuICAqLworZXh0ZXJuIGludCBsZGNfYmluZChzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxwLCBjb25zdCBjaGFyICpuYW1lKTsKKworLyogRm9yIG5vbi1SQVcgcHJvdG9jb2xzIHdlIG5lZWQgdG8gY29tcGxldGUgYSBoYW5kc2hha2UgYmVmb3JlCisgKiBjb21tdW5pY2F0aW9uIGNhbiBwcm9jZWVkLiAgbGRjX2Nvbm5lY3QoKSBkb2VzIHRoYXQsIGlmIHRoZQorICogaGFuZHNoYWtlIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIGFuIExEQ19FVkVOVF9VUCBldmVudCB3aWxsCisgKiBiZSBzZW50IHVwIHRvIHRoZSBkcml2ZXIuCisgKi8KK2V4dGVybiBpbnQgbGRjX2Nvbm5lY3Qoc3RydWN0IGxkY19jaGFubmVsICpscCk7CitleHRlcm4gaW50IGxkY19kaXNjb25uZWN0KHN0cnVjdCBsZGNfY2hhbm5lbCAqbHApOworCitleHRlcm4gaW50IGxkY19zdGF0ZShzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxwKTsKKworLyogUmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gIE9ubHkgdmFsaWQgd2hlbiB0aGUgbGluayBpcyB1cC4gICovCitleHRlcm4gaW50IGxkY193cml0ZShzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxwLCBjb25zdCB2b2lkICpidWYsCisJCSAgICAgdW5zaWduZWQgaW50IHNpemUpOworZXh0ZXJuIGludCBsZGNfcmVhZChzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxwLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBzaXplKTsKKworI2RlZmluZSBMRENfTUFQX1NIQURPVwkweDAxCisjZGVmaW5lIExEQ19NQVBfRElSRUNUCTB4MDIKKyNkZWZpbmUgTERDX01BUF9JTwkweDA0CisjZGVmaW5lIExEQ19NQVBfUgkweDA4CisjZGVmaW5lIExEQ19NQVBfVwkweDEwCisjZGVmaW5lIExEQ19NQVBfWAkweDIwCisjZGVmaW5lIExEQ19NQVBfUlcJKExEQ19NQVBfUiB8IExEQ19NQVBfVykKKyNkZWZpbmUgTERDX01BUF9SV1gJKExEQ19NQVBfUiB8IExEQ19NQVBfVyB8IExEQ19NQVBfWCkKKyNkZWZpbmUgTERDX01BUF9BTEwJMHgwM2YKKworc3RydWN0IGxkY190cmFuc19jb29raWUgeworCXU2NAkJCWNvb2tpZV9hZGRyOworCXU2NAkJCWNvb2tpZV9zaXplOworfTsKKworc3RydWN0IHNjYXR0ZXJsaXN0OworZXh0ZXJuIGludCBsZGNfbWFwX3NnKHN0cnVjdCBsZGNfY2hhbm5lbCAqbHAsCisJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBudW1fc2csCisJCSAgICAgIHN0cnVjdCBsZGNfdHJhbnNfY29va2llICpjb29raWVzLCBpbnQgbmNvb2tpZXMsCisJCSAgICAgIHVuc2lnbmVkIGludCBtYXBfcGVybSk7CisKK2V4dGVybiBpbnQgbGRjX21hcF9zaW5nbGUoc3RydWN0IGxkY19jaGFubmVsICpscCwKKwkJCSAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgbGRjX3RyYW5zX2Nvb2tpZSAqY29va2llcywgaW50IG5jb29raWVzLAorCQkJICB1bnNpZ25lZCBpbnQgbWFwX3Blcm0pOworCitleHRlcm4gdm9pZCBsZGNfdW5tYXAoc3RydWN0IGxkY19jaGFubmVsICpscCwgc3RydWN0IGxkY190cmFuc19jb29raWUgKmNvb2tpZXMsCisJCSAgICAgIGludCBuY29va2llcyk7CisKK2V4dGVybiBpbnQgbGRjX2NvcHkoc3RydWN0IGxkY19jaGFubmVsICpscCwgaW50IGNvcHlfZGlyLAorCQkgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJICAgIHN0cnVjdCBsZGNfdHJhbnNfY29va2llICpjb29raWVzLCBpbnQgbmNvb2tpZXMpOworCitzdGF0aWMgaW5saW5lIGludCBsZGNfZ2V0X2RyaW5nX2VudHJ5KHN0cnVjdCBsZGNfY2hhbm5lbCAqbHAsCisJCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgICAgIHN0cnVjdCBsZGNfdHJhbnNfY29va2llICpjb29raWVzLAorCQkJCSAgICAgIGludCBuY29va2llcykKK3sKKwlyZXR1cm4gbGRjX2NvcHkobHAsIExEQ19DT1BZX0lOLCBidWYsIGxlbiwgb2Zmc2V0LCBjb29raWVzLCBuY29va2llcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxkY19wdXRfZHJpbmdfZW50cnkoc3RydWN0IGxkY19jaGFubmVsICpscCwKKwkJCQkgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJICAgICAgc3RydWN0IGxkY190cmFuc19jb29raWUgKmNvb2tpZXMsCisJCQkJICAgICAgaW50IG5jb29raWVzKQoreworCXJldHVybiBsZGNfY29weShscCwgTERDX0NPUFlfT1VULCBidWYsIGxlbiwgb2Zmc2V0LCBjb29raWVzLCBuY29va2llcyk7Cit9CisKK2V4dGVybiB2b2lkICpsZGNfYWxsb2NfZXhwX2RyaW5nKHN0cnVjdCBsZGNfY2hhbm5lbCAqbHAsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJIHN0cnVjdCBsZGNfdHJhbnNfY29va2llICpjb29raWVzLAorCQkJCSBpbnQgKm5jb29raWVzLCB1bnNpZ25lZCBpbnQgbWFwX3Blcm0pOworCitleHRlcm4gdm9pZCBsZGNfZnJlZV9leHBfZHJpbmcoc3RydWN0IGxkY19jaGFubmVsICpscCwgdm9pZCAqYnVmLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICAgICAgc3RydWN0IGxkY190cmFuc19jb29raWUgKmNvb2tpZXMsIGludCBuY29va2llcyk7CisKKyNlbmRpZiAvKiBfU1BBUkM2NF9MRENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbG1iLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9sbWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTM1MmNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbG1iLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfU1BBUkM2NF9MTUJfSAorI2RlZmluZSBfU1BBUkM2NF9MTUJfSAorCisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisKKyNkZWZpbmUgTE1CX0RCRyhmbXQuLi4pIHByb21fcHJpbnRmKGZtdCkKKworI2RlZmluZSBMTUJfUkVBTF9MSU1JVAkwCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X0xNQl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbHN1LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9sc3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTkwZjhkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbHN1LmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfU1BBUkM2NF9MU1VfSAorI2RlZmluZSBfU1BBUkM2NF9MU1VfSAorCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKworLyogTFNVIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFNVX0NPTlRST0xfUE0gX0FDKDB4MDAwMDAxZmUwMDAwMDAwMCxVTCkgLyogUGh5cy13YXRjaHBvaW50IGJ5dGUgbWFzayovCisjZGVmaW5lIExTVV9DT05UUk9MX1ZNIF9BQygweDAwMDAwMDAxZmUwMDAwMDAsVUwpIC8qIFZpcnQtd2F0Y2hwb2ludCBieXRlIG1hc2sqLworI2RlZmluZSBMU1VfQ09OVFJPTF9QUiBfQUMoMHgwMDAwMDAwMDAxMDAwMDAwLFVMKSAvKiBQaHlzLXJkIHdhdGNocG9pbnQgZW5hYmxlKi8KKyNkZWZpbmUgTFNVX0NPTlRST0xfUFcgX0FDKDB4MDAwMDAwMDAwMDgwMDAwMCxVTCkgLyogUGh5cy13ciB3YXRjaHBvaW50IGVuYWJsZSovCisjZGVmaW5lIExTVV9DT05UUk9MX1ZSIF9BQygweDAwMDAwMDAwMDA0MDAwMDAsVUwpIC8qIFZpcnQtcmQgd2F0Y2hwb2ludCBlbmFibGUqLworI2RlZmluZSBMU1VfQ09OVFJPTF9WVyBfQUMoMHgwMDAwMDAwMDAwMjAwMDAwLFVMKSAvKiBWaXJ0LXdyIHdhdGNocG9pbnQgZW5hYmxlKi8KKyNkZWZpbmUgTFNVX0NPTlRST0xfRk0gX0FDKDB4MDAwMDAwMDAwMDBmZmZmMCxVTCkgLyogUGFyaXR5IG1hc2sgZW5hYmxlcy4gICAgICovCisjZGVmaW5lIExTVV9DT05UUk9MX0RNIF9BQygweDAwMDAwMDAwMDAwMDAwMDgsVUwpIC8qIERhdGEgTU1VIGVuYWJsZS4gICAgICAgICAqLworI2RlZmluZSBMU1VfQ09OVFJPTF9JTSBfQUMoMHgwMDAwMDAwMDAwMDAwMDA0LFVMKSAvKiBJbnN0cnVjdGlvbiBNTVUgZW5hYmxlLiAgKi8KKyNkZWZpbmUgTFNVX0NPTlRST0xfREMgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMixVTCkgLyogRGF0YSBjYWNoZSBlbmFibGUuICAgICAgICovCisjZGVmaW5lIExTVV9DT05UUk9MX0lDIF9BQygweDAwMDAwMDAwMDAwMDAwMDEsVUwpIC8qIEluc3RydWN0aW9uIGNhY2hlIGVuYWJsZS4qLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9MU1VfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21hY2hpbmVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tYWNoaW5lcy5oCmluZGV4IGQ2YzZiZjguLmMyOGMyZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL21hY2hpbmVzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbWFjaGluZXMuaApAQCAtMTcsOCArMTcsNiBAQAogICovCiAjZGVmaW5lIE5VTV9TVU5fTUFDSElORVMgICAxNQogCi1leHRlcm4gc3RydWN0IFN1bl9NYWNoaW5lX01vZGVscyBTdW5fTWFjaGluZXNbTlVNX1NVTl9NQUNISU5FU107Ci0KIC8qIFRoZSBtYWNoaW5lIHR5cGUgaW4gdGhlIGlkcHJvbSBhcmVhIGxvb2tzIGxpa2UgdGhpczoKICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21idXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL21idXMuaAppbmRleCBiYjVhZTYxLi42OWYwN2EwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9tYnVzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbWJ1cy5oCkBAIC00Myw4ICs0Myw2IEBACiAjZGVmaW5lIEhXQlVHX1NVUEVSU0NBTEFSX0JBRCAgICAgICAgMHgwMDAwMDA4MAogI2RlZmluZSBIV0JVR19QQUNJTklUX0JJVFJPVCAgICAgICAgIDB4MDAwMDAxMDAKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBod2J1Z19iaXRtYXNrOwotCiAvKiBGaXJzdCB0aGUgbW9kdWxlIHR5cGUgdmFsdWVzLiBUbyBmaW5kIG91dCB3aGljaCB5b3UgaGF2ZSwganVzdCBsb2FkCiAgKiB0aGUgbW11IGNvbnRyb2wgcmVnaXN0ZXIgZnJvbSBBU0lfTV9NTVVSRUcgYWx0ZXJuYXRlIGFkZHJlc3Mgc3BhY2UgYW5kCiAgKiBzaGlmdCB0aGUgdmFsdWUgcmlnaHQgMjggYml0cy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tYzE0NjgxOHJ0Yy5oCmluZGV4IGZhN2VhYzkuLjlhYjY1YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL21jMTQ2ODE4cnRjLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbWMxNDY4MThydGMuaApAQCAtMSwyOSArMSw4IEBACi0vKgotICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KLSAqLwotI2lmbmRlZiBfX0FTTV9TUEFSQ19NQzE0NjgxOFJUQ19ICi0jZGVmaW5lIF9fQVNNX1NQQVJDX01DMTQ2ODE4UlRDX0gKLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaWZuZGVmIFJUQ19QT1JUCi0jZGVmaW5lIFJUQ19QT1JUKHgpCSgweDcwICsgKHgpKQotI2RlZmluZSBSVENfQUxXQVlTX0JDRAkxCS8qIFJUQyBvcGVyYXRlcyBpbiBiaW5hcnkgbW9kZSAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfTUMxNDY4MThSVENfSAorI2RlZmluZSBfX19BU01fU1BBUkNfTUMxNDY4MThSVENfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL21jMTQ2ODE4cnRjXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9tYzE0NjgxOHJ0Y18zMi5oPgogI2VuZGlmCi0KLS8qCi0gKiBUaGUgeWV0IHN1cHBvcnRlZCBtYWNoaW5lcyBhbGwgYWNjZXNzIHRoZSBSVEMgaW5kZXggcmVnaXN0ZXIgdmlhCi0gKiBhbiBJU0EgcG9ydCBhY2Nlc3MgYnV0IHRoZSB3YXkgdG8gYWNjZXNzIHRoZSBkYXRlIHJlZ2lzdGVyIGRpZmZlcnMgLi4uCi0gKi8KLSNkZWZpbmUgQ01PU19SRUFEKGFkZHIpICh7IFwKLW91dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCi1pbmJfcChSVENfUE9SVCgxKSk7IFwKLX0pCi0jZGVmaW5lIENNT1NfV1JJVEUodmFsLCBhZGRyKSAoeyBcCi1vdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAotb3V0Yl9wKCh2YWwpLFJUQ19QT1JUKDEpKTsgXAotfSkKLQotI2RlZmluZSBSVENfSVJRIDgKLQotI2VuZGlmIC8qIF9fQVNNX1NQQVJDX01DMTQ2ODE4UlRDX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbWMxNDY4MThydGNfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL21jMTQ2ODE4cnRjXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3ZWFjOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21jMTQ2ODE4cnRjXzMyLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCisgKi8KKyNpZm5kZWYgX19BU01fU1BBUkNfTUMxNDY4MThSVENfSAorI2RlZmluZSBfX0FTTV9TUEFSQ19NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmbmRlZiBSVENfUE9SVAorI2RlZmluZSBSVENfUE9SVCh4KQkoMHg3MCArICh4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMQkvKiBSVEMgb3BlcmF0ZXMgaW4gYmluYXJ5IG1vZGUgKi8KKyNlbmRpZgorCisvKgorICogVGhlIHlldCBzdXBwb3J0ZWQgbWFjaGluZXMgYWxsIGFjY2VzcyB0aGUgUlRDIGluZGV4IHJlZ2lzdGVyIHZpYQorICogYW4gSVNBIHBvcnQgYWNjZXNzIGJ1dCB0aGUgd2F5IHRvIGFjY2VzcyB0aGUgZGF0ZSByZWdpc3RlciBkaWZmZXJzIC4uLgorICovCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCitvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAoraW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisKKyNkZWZpbmUgUlRDX0lSUSA4CisKKyNlbmRpZiAvKiBfX0FTTV9TUEFSQ19NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9tYzE0NjgxOHJ0Y182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbWMxNDY4MThydGNfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWMwZmNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbWMxNDY4MThydGNfNjQuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KKyAqLworI2lmbmRlZiBfX0FTTV9TUEFSQzY0X01DMTQ2ODE4UlRDX0gKKyNkZWZpbmUgX19BU01fU1BBUkM2NF9NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmbmRlZiBSVENfUE9SVAorI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRzMTI4N19yZWdzOworI2Vsc2UKKyNkZWZpbmUgZHMxMjg3X3JlZ3MgKDBVTCkKKyNlbmRpZgorI2RlZmluZSBSVENfUE9SVCh4KQkoZHMxMjg3X3JlZ3MgKyAoeCkpCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTAKKyNlbmRpZgorCisvKgorICogVGhlIHlldCBzdXBwb3J0ZWQgbWFjaGluZXMgYWxsIGFjY2VzcyB0aGUgUlRDIGluZGV4IHJlZ2lzdGVyIHZpYQorICogYW4gSVNBIHBvcnQgYWNjZXNzIGJ1dCB0aGUgd2F5IHRvIGFjY2VzcyB0aGUgZGF0ZSByZWdpc3RlciBkaWZmZXJzIC4uLgorICovCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCitvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAoraW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisKKyNkZWZpbmUgUlRDX0lSUSA4CisKKyNlbmRpZiAvKiBfX0FTTV9TUEFSQzY0X01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21kZXNjLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tZGVzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhY2M3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tZGVzYy5oCkBAIC0wLDAgKzEsNzggQEAKKyNpZm5kZWYgX1NQQVJDNjRfTURFU0NfSAorI2RlZmluZSBfU1BBUkM2NF9NREVTQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCitzdHJ1Y3QgbWRlc2NfaGFuZGxlOworCisvKiBNYWNoaW5lIGRlc2NyaXB0aW9uIG9wZXJhdGlvbnMgYXJlIHRvIGJlIHN1cnJvdW5kZWQgYnkgZ3JhYiBhbmQKKyAqIHJlbGVhc2UgY2FsbHMuICBUaGUgbWRlc2NfaGFuZGxlIHJldHVybmVkIGZyb20gdGhlIGdyYWIgaXMKKyAqIHRoZSBmaXJzdCBhcmd1bWVudCB0byBhbGwgb2YgdGhlIG9wZXJhdGlvbmFsIGNhbGxzIHRoYXQgd29yaworICogb24gbWRlc2NzLgorICovCitleHRlcm4gc3RydWN0IG1kZXNjX2hhbmRsZSAqbWRlc2NfZ3JhYih2b2lkKTsKK2V4dGVybiB2b2lkIG1kZXNjX3JlbGVhc2Uoc3RydWN0IG1kZXNjX2hhbmRsZSAqKTsKKworI2RlZmluZSBNREVTQ19OT0RFX05VTEwJCSh+KHU2NCkwKQorCitleHRlcm4gdTY0IG1kZXNjX25vZGVfYnlfbmFtZShzdHJ1Y3QgbWRlc2NfaGFuZGxlICpoYW5kbGUsCisJCQkgICAgICB1NjQgZnJvbV9ub2RlLCBjb25zdCBjaGFyICpuYW1lKTsKKyNkZWZpbmUgbWRlc2NfZm9yX2VhY2hfbm9kZV9ieV9uYW1lKF9faGRsLCBfX25vZGUsIF9fbmFtZSkgXAorCWZvciAoX19ub2RlID0gbWRlc2Nfbm9kZV9ieV9uYW1lKF9faGRsLCBNREVTQ19OT0RFX05VTEwsIF9fbmFtZSk7IFwKKwkgICAgIChfX25vZGUpICE9IE1ERVNDX05PREVfTlVMTDsgXAorCSAgICAgX19ub2RlID0gbWRlc2Nfbm9kZV9ieV9uYW1lKF9faGRsLCBfX25vZGUsIF9fbmFtZSkpCisKKy8qIEFjY2VzcyB0byBwcm9wZXJ0eSB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBtZGVzY19nZXRfcHJvcGVydHkoKSBhcmUKKyAqIG9ubHkgdmFsaWQgaW5zaWRlIG9mIGEgbWRlc2NfZ3JhYigpL21kZXNjX3JlbGVhc2UoKSBzZXF1ZW5jZS4KKyAqIE9uY2UgbWRlc2NfcmVsZWFzZSgpIGlzIGNhbGxlZCwgdGhlIG1lbW9yeSBiYWNrZWQgdXAgYnkgdGhlc2UKKyAqIHBvaW50ZXJzIG1heSByZWZlcmVuY2UgZnJlZWQgdXAgbWVtb3J5LgorICoKKyAqIFRoZXJlZm9yZSBjYWxsZXJzIG11c3QgbWFrZSBjb3BpZXMgb2YgYW55IHByb3BlcnR5IHZhbHVlcworICogdGhleSBuZWVkLgorICoKKyAqIFRoZXNlIHNhbWUgcnVsZXMgYXBwbHkgdG8gbWRlc2Nfbm9kZV9uYW1lKCkuCisgKi8KK2V4dGVybiBjb25zdCB2b2lkICptZGVzY19nZXRfcHJvcGVydHkoc3RydWN0IG1kZXNjX2hhbmRsZSAqaGFuZGxlLAorCQkJCSAgICAgIHU2NCBub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgKmxlbnApOworZXh0ZXJuIGNvbnN0IGNoYXIgKm1kZXNjX25vZGVfbmFtZShzdHJ1Y3QgbWRlc2NfaGFuZGxlICpocCwgdTY0IG5vZGUpOworCisvKiBNRCBhcmMgaXRlcmF0aW9uLCB0aGUgc3RhbmRhcmQgc2VxdWVuY2UgaXM6CisgKgorICoJdW5zaWduZWQgbG9uZyBhcmM7CisgKgltZGVzY19mb3JfZWFjaF9hcmMoYXJjLCBoYW5kbGUsIG5vZGUsIE1ERVNDX0FSQ19UWVBFX3tGV0QsQkFDS30pIHsKKyAqCQl1bnNpZ25lZCBsb25nIHRhcmdldCA9IG1kZXNjX2FyY190YXJnZXQoaGFuZGxlLCBhcmMpOworICoJCS4uLgorICoJfQorICovCisKKyNkZWZpbmUgTURFU0NfQVJDX1RZUEVfRldECSJmd2QiCisjZGVmaW5lIE1ERVNDX0FSQ19UWVBFX0JBQ0sJImJhY2siCisKK2V4dGVybiB1NjQgbWRlc2NfbmV4dF9hcmMoc3RydWN0IG1kZXNjX2hhbmRsZSAqaGFuZGxlLCB1NjQgZnJvbSwKKwkJCSAgY29uc3QgY2hhciAqYXJjX3R5cGUpOworI2RlZmluZSBtZGVzY19mb3JfZWFjaF9hcmMoX19hcmMsIF9faGRsLCBfX25vZGUsIF9fdHlwZSkgXAorCWZvciAoX19hcmMgPSBtZGVzY19uZXh0X2FyYyhfX2hkbCwgX19ub2RlLCBfX3R5cGUpOyBcCisJICAgICAoX19hcmMpICE9IE1ERVNDX05PREVfTlVMTDsgXAorCSAgICAgX19hcmMgPSBtZGVzY19uZXh0X2FyYyhfX2hkbCwgX19hcmMsIF9fdHlwZSkpCisKK2V4dGVybiB1NjQgbWRlc2NfYXJjX3RhcmdldChzdHJ1Y3QgbWRlc2NfaGFuZGxlICpocCwgdTY0IGFyYyk7CisKK2V4dGVybiB2b2lkIG1kZXNjX3VwZGF0ZSh2b2lkKTsKKworc3RydWN0IG1kZXNjX25vdGlmaWVyX2NsaWVudCB7CisJdm9pZCAoKmFkZCkoc3RydWN0IG1kZXNjX2hhbmRsZSAqaGFuZGxlLCB1NjQgbm9kZSk7CisJdm9pZCAoKnJlbW92ZSkoc3RydWN0IG1kZXNjX2hhbmRsZSAqaGFuZGxlLCB1NjQgbm9kZSk7CisKKwljb25zdCBjaGFyCQkJKm5vZGVfbmFtZTsKKwlzdHJ1Y3QgbWRlc2Nfbm90aWZpZXJfY2xpZW50CSpuZXh0OworfTsKKworZXh0ZXJuIHZvaWQgbWRlc2NfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG1kZXNjX25vdGlmaWVyX2NsaWVudCAqY2xpZW50KTsKKworZXh0ZXJuIHZvaWQgbWRlc2NfZmlsbF9pbl9jcHVfZGF0YShjcHVtYXNrX3QgbWFzayk7CisKK2V4dGVybiB2b2lkIHN1bjR2X21kZXNjX2luaXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbW11LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tbXUuaAppbmRleCBjY2QzNmQyLi5lZTY2YmY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tbXUuaApAQCAtMSw3ICsxLDggQEAKLSNpZm5kZWYgX19NTVVfSAotI2RlZmluZSBfX01NVV9ICi0KLS8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X3Q7Ci0KKyNpZm5kZWYgX19fQVNNX1NQQVJDX01NVV9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19NTVVfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL21tdV82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvbW11XzMyLmg+CisjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbW11XzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tbXVfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2QzNmQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbW11XzMyLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fTU1VX0gKKyNkZWZpbmUgX19NTVVfSAorCisvKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21tdV82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW11XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2N2RjNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21tdV82NC5oCkBAIC0wLDAgKzEsMTIzIEBACisjaWZuZGVmIF9fTU1VX0gKKyNkZWZpbmUgX19NTVVfSAorCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CisKKyNkZWZpbmUgQ1RYX05SX0JJVFMJCTEzCisKKyNkZWZpbmUgVEFHX0NPTlRFWFRfQklUUwkoKF9BQygxLFVMKSA8PCBDVFhfTlJfQklUUykgLSBfQUMoMSxVTCkpCisKKy8qIFVsdHJhU1BBUkMtSUlJKyBhbmQgbGF0ZXIgaGF2ZSBhIGZlYXR1cmUgd2hlcmVieSB5b3UgY2FuCisgKiBzZWxlY3Qgd2hhdCBwYWdlIHNpemUgdGhlIHZhcmlvdXMgRGF0YS1UTEIgaW5zdGFuY2VzIGluIHRoZQorICogY2hpcC4gIEluIG9yZGVyIHRvIGdyYWNlZnVsbHkgc3VwcG9ydCB0aGlzLCB3ZSBwdXQgdGhlIHZlcnNpb24KKyAqIGZpZWxkIGluIGEgc3BvdCBvdXRzaWRlIG9mIHRoZSBhcmVhcyBvZiB0aGUgY29udGV4dCByZWdpc3RlcgorICogd2hlcmUgdGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLgorICovCisjZGVmaW5lIENUWF9WRVJTSU9OX1NISUZUCTIyCisjZGVmaW5lIENUWF9WRVJTSU9OX01BU0sJKCh+MFVMKSA8PCBDVFhfVkVSU0lPTl9TSElGVCkKKworI2RlZmluZSBDVFhfUEdTWl84S0IJCV9BQygweDAsVUwpCisjZGVmaW5lIENUWF9QR1NaXzY0S0IJCV9BQygweDEsVUwpCisjZGVmaW5lIENUWF9QR1NaXzUxMktCCQlfQUMoMHgyLFVMKQorI2RlZmluZSBDVFhfUEdTWl80TUIJCV9BQygweDMsVUwpCisjZGVmaW5lIENUWF9QR1NaX0JJVFMJCV9BQygweDcsVUwpCisjZGVmaW5lIENUWF9QR1NaMF9OVUNfU0hJRlQJNjEKKyNkZWZpbmUgQ1RYX1BHU1oxX05VQ19TSElGVAk1OAorI2RlZmluZSBDVFhfUEdTWjBfU0hJRlQJCTE2CisjZGVmaW5lIENUWF9QR1NaMV9TSElGVAkJMTkKKyNkZWZpbmUgQ1RYX1BHU1pfTUFTSwkJKChDVFhfUEdTWl9CSVRTIDw8IENUWF9QR1NaMF9TSElGVCkgfCBcCisJCQkJIChDVFhfUEdTWl9CSVRTIDw8IENUWF9QR1NaMV9TSElGVCkpCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV84S0IpCisjZGVmaW5lIENUWF9QR1NaX0JBU0UJQ1RYX1BHU1pfOEtCCisjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV82NEtCKQorI2RlZmluZSBDVFhfUEdTWl9CQVNFCUNUWF9QR1NaXzY0S0IKKyNlbHNlCisjZXJyb3IgTm8gcGFnZSBzaXplIHNwZWNpZmllZCBpbiBrZXJuZWwgY29uZmlndXJhdGlvbgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIpCisjZGVmaW5lIENUWF9QR1NaX0hVR0UJCUNUWF9QR1NaXzRNQgorI2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEySykKKyNkZWZpbmUgQ1RYX1BHU1pfSFVHRQkJQ1RYX1BHU1pfNTEyS0IKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SykKKyNkZWZpbmUgQ1RYX1BHU1pfSFVHRQkJQ1RYX1BHU1pfNjRLQgorI2VuZGlmCisKKyNkZWZpbmUgQ1RYX1BHU1pfS0VSTglDVFhfUEdTWl80TUIKKworLyogVGh1cywgd2hlbiBydW5uaW5nIG9uIFVsdHJhU1BBUkMtSUlJKyBhbmQgbGF0ZXIsIHdlIHVzZSB0aGUgZm9sbG93aW5nCisgKiBQUklNQVJZX0NPTlRFWFQgcmVnaXN0ZXIgdmFsdWVzIGZvciB0aGUga2VybmVsIGNvbnRleHQuCisgKi8KKyNkZWZpbmUgQ1RYX0NIRUVUQUhfUExVU19OVUMgXAorCSgoQ1RYX1BHU1pfS0VSTiA8PCBDVFhfUEdTWjBfTlVDX1NISUZUKSB8IFwKKwkgKENUWF9QR1NaX0JBU0UgPDwgQ1RYX1BHU1oxX05VQ19TSElGVCkpCisKKyNkZWZpbmUgQ1RYX0NIRUVUQUhfUExVU19DVFgwIFwKKwkoKENUWF9QR1NaX0tFUk4gPDwgQ1RYX1BHU1owX1NISUZUKSB8IFwKKwkgKENUWF9QR1NaX0JBU0UgPDwgQ1RYX1BHU1oxX1NISUZUKSkKKworLyogSWYgeW91IHdhbnQgInRoZSBUTEIgY29udGV4dCBudW1iZXIiIHVzZSBDVFhfTlJfTUFTSy4gIElmIHlvdQorICogd2FudCAidGhlIGJpdHMgSSBwcm9ncmFtIGludG8gdGhlIGNvbnRleHQgcmVnaXN0ZXJzIiB1c2UKKyAqIENUWF9IV19NQVNLLgorICovCisjZGVmaW5lIENUWF9OUl9NQVNLCQlUQUdfQ09OVEVYVF9CSVRTCisjZGVmaW5lIENUWF9IV19NQVNLCQkoQ1RYX05SX01BU0sgfCBDVFhfUEdTWl9NQVNLKQorCisjZGVmaW5lIENUWF9GSVJTVF9WRVJTSU9OCSgoX0FDKDEsVUwpIDw8IENUWF9WRVJTSU9OX1NISUZUKSArIF9BQygxLFVMKSkKKyNkZWZpbmUgQ1RYX1ZBTElEKF9fY3R4KQlcCisJICghKCgoX19jdHguc3BhcmM2NF9jdHhfdmFsKSBeIHRsYl9jb250ZXh0X2NhY2hlKSAmIENUWF9WRVJTSU9OX01BU0spKQorI2RlZmluZSBDVFhfSFdCSVRTKF9fY3R4KQkoKF9fY3R4LnNwYXJjNjRfY3R4X3ZhbCkgJiBDVFhfSFdfTUFTSykKKyNkZWZpbmUgQ1RYX05SQklUUyhfX2N0eCkJKChfX2N0eC5zcGFyYzY0X2N0eF92YWwpICYgQ1RYX05SX01BU0spCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgVFNCX0VOVFJZX0FMSUdOTUVOVAkxNgorCitzdHJ1Y3QgdHNiIHsKKwl1bnNpZ25lZCBsb25nIHRhZzsKKwl1bnNpZ25lZCBsb25nIHB0ZTsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChUU0JfRU5UUllfQUxJR05NRU5UKSkpOworCitleHRlcm4gdm9pZCBfX3RzYl9pbnNlcnQodW5zaWduZWQgbG9uZyBlbnQsIHVuc2lnbmVkIGxvbmcgdGFnLCB1bnNpZ25lZCBsb25nIHB0ZSk7CitleHRlcm4gdm9pZCB0c2JfZmx1c2godW5zaWduZWQgbG9uZyBlbnQsIHVuc2lnbmVkIGxvbmcgdGFnKTsKK2V4dGVybiB2b2lkIHRzYl9pbml0KHN0cnVjdCB0c2IgKnRzYiwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworc3RydWN0IHRzYl9jb25maWcgeworCXN0cnVjdCB0c2IJCSp0c2I7CisJdW5zaWduZWQgbG9uZwkJdHNiX3Jzc19saW1pdDsKKwl1bnNpZ25lZCBsb25nCQl0c2JfbmVudHJpZXM7CisJdW5zaWduZWQgbG9uZwkJdHNiX3JlZ192YWw7CisJdW5zaWduZWQgbG9uZwkJdHNiX21hcF92YWRkcjsKKwl1bnNpZ25lZCBsb25nCQl0c2JfbWFwX3B0ZTsKK307CisKKyNkZWZpbmUgTU1fVFNCX0JBU0UJMAorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorI2RlZmluZSBNTV9UU0JfSFVHRQkxCisjZGVmaW5lIE1NX05VTV9UU0JTCTIKKyNlbHNlCisjZGVmaW5lIE1NX05VTV9UU0JTCTEKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl1bnNpZ25lZCBsb25nCQlzcGFyYzY0X2N0eF92YWw7CisJdW5zaWduZWQgbG9uZwkJaHVnZV9wdGVfY291bnQ7CisJc3RydWN0IHRzYl9jb25maWcJdHNiX2Jsb2NrW01NX05VTV9UU0JTXTsKKwlzdHJ1Y3QgaHZfdHNiX2Rlc2NyCXRzYl9kZXNjcltNTV9OVU1fVFNCU107Cit9IG1tX2NvbnRleHRfdDsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBUU0JfQ09ORklHX1RTQgkJMHgwMAorI2RlZmluZSBUU0JfQ09ORklHX1JTU19MSU1JVAkweDA4CisjZGVmaW5lIFRTQl9DT05GSUdfTkVOVFJJRVMJMHgxMAorI2RlZmluZSBUU0JfQ09ORklHX1JFR19WQUwJMHgxOAorI2RlZmluZSBUU0JfQ09ORklHX01BUF9WQUREUgkweDIwCisjZGVmaW5lIFRTQl9DT05GSUdfTUFQX1BURQkweDI4CisKKyNlbmRpZiAvKiBfX01NVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW11X2NvbnRleHQuaAppbmRleCA2NzFhOTk3Yi4uZTE0ZWZiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tbXVfY29udGV4dC5oCkBAIC0xLDQyICsxLDggQEAKLSNpZm5kZWYgX19TUEFSQ19NTVVfQ09OVEVYVF9ICi0jZGVmaW5lIF9fU1BBUkNfTU1VX0NPTlRFWFRfSAotCi0jaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGEgbmV3IG1tdSBjb250ZXh0LiAgVGhpcyBpcyBpbnZva2VkIHdoZW4gYSBuZXcKLSAqIGFkZHJlc3Mgc3BhY2UgaW5zdGFuY2UgKHVuaXF1ZSBvciBzaGFyZWQpIGlzIGluc3RhbnRpYXRlZC4KLSAqLwotI2RlZmluZSBpbml0X25ld19jb250ZXh0KHRzaywgbW0pICgoKG1tKS0+Y29udGV4dCA9IE5PX0NPTlRFWFQpLCAwKQotCi0vKgotICogRGVzdHJveSBhIGRlYWQgY29udGV4dC4gIFRoaXMgb2NjdXJzIHdoZW4gbW1wdXQgZHJvcHMgdGhlCi0gKiBtbV91c2VycyBjb3VudCB0byB6ZXJvLCB0aGUgbW1hcHMgaGF2ZSBiZWVuIHJlbGVhc2VkLCBhbmQKLSAqIGFsbCB0aGUgcGFnZSB0YWJsZXMgaGF2ZSBiZWVuIGZsdXNoZWQuICBPdXIgam9iIGlzIHRvIGRlc3Ryb3kKLSAqIGFueSByZW1haW5pbmcgcHJvY2Vzc29yLXNwZWNpZmljIHN0YXRlLgotICovCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgZGVzdHJveV9jb250ZXh0LCBzdHJ1Y3QgbW1fc3RydWN0ICopCi0KLSNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKSBCVEZJWFVQX0NBTEwoZGVzdHJveV9jb250ZXh0KShtbSkKLQotLyogU3dpdGNoIHRoZSBjdXJyZW50IE1NIGNvbnRleHQuICovCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgc3dpdGNoX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IHRhc2tfc3RydWN0ICopCi0KLSNkZWZpbmUgc3dpdGNoX21tKG9sZF9tbSwgbW0sIHRzaykgQlRGSVhVUF9DQUxMKHN3aXRjaF9tbSkob2xkX21tLCBtbSwgdHNrKQotCi0jZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCi0KLS8qIEFjdGl2YXRlIGEgbmV3IE1NIGluc3RhbmNlIGZvciB0aGUgY3VycmVudCB0YXNrLiAqLwotI2RlZmluZSBhY3RpdmF0ZV9tbShhY3RpdmVfbW0sIG1tKSBzd2l0Y2hfbW0oKGFjdGl2ZV9tbSksIChtbSksIE5VTEwpCi0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotI2VuZGlmIC8qICEoX19TUEFSQ19NTVVfQ09OVEVYVF9IKSAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfX19BU01fU1BBUkNfTU1VX0NPTlRFWFRfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL21tdV9jb250ZXh0XzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9tbXVfY29udGV4dF8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21tdV9jb250ZXh0XzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tbXVfY29udGV4dF8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWE5OTdiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbW11X2NvbnRleHRfMzIuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9fU1BBUkNfTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfX1NQQVJDX01NVV9DT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIG5ldyBtbXUgY29udGV4dC4gIFRoaXMgaXMgaW52b2tlZCB3aGVuIGEgbmV3CisgKiBhZGRyZXNzIHNwYWNlIGluc3RhbmNlICh1bmlxdWUgb3Igc2hhcmVkKSBpcyBpbnN0YW50aWF0ZWQuCisgKi8KKyNkZWZpbmUgaW5pdF9uZXdfY29udGV4dCh0c2ssIG1tKSAoKChtbSktPmNvbnRleHQgPSBOT19DT05URVhUKSwgMCkKKworLyoKKyAqIERlc3Ryb3kgYSBkZWFkIGNvbnRleHQuICBUaGlzIG9jY3VycyB3aGVuIG1tcHV0IGRyb3BzIHRoZQorICogbW1fdXNlcnMgY291bnQgdG8gemVybywgdGhlIG1tYXBzIGhhdmUgYmVlbiByZWxlYXNlZCwgYW5kCisgKiBhbGwgdGhlIHBhZ2UgdGFibGVzIGhhdmUgYmVlbiBmbHVzaGVkLiAgT3VyIGpvYiBpcyB0byBkZXN0cm95CisgKiBhbnkgcmVtYWluaW5nIHByb2Nlc3Nvci1zcGVjaWZpYyBzdGF0ZS4KKyAqLworQlRGSVhVUERFRl9DQUxMKHZvaWQsIGRlc3Ryb3lfY29udGV4dCwgc3RydWN0IG1tX3N0cnVjdCAqKQorCisjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkgQlRGSVhVUF9DQUxMKGRlc3Ryb3lfY29udGV4dCkobW0pCisKKy8qIFN3aXRjaCB0aGUgY3VycmVudCBNTSBjb250ZXh0LiAqLworQlRGSVhVUERFRl9DQUxMKHZvaWQsIHN3aXRjaF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKQorCisjZGVmaW5lIHN3aXRjaF9tbShvbGRfbW0sIG1tLCB0c2spIEJURklYVVBfQ0FMTChzd2l0Y2hfbW0pKG9sZF9tbSwgbW0sIHRzaykKKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQorCisvKiBBY3RpdmF0ZSBhIG5ldyBNTSBpbnN0YW5jZSBmb3IgdGhlIGN1cnJlbnQgdGFzay4gKi8KKyNkZWZpbmUgYWN0aXZhdGVfbW0oYWN0aXZlX21tLCBtbSkgc3dpdGNoX21tKChhY3RpdmVfbW0pLCAobW0pLCBOVUxMKQorCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNlbmRpZiAvKiAhKF9fU1BBUkNfTU1VX0NPTlRFWFRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21tdV9jb250ZXh0XzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tbXVfY29udGV4dF82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OTNhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tbXVfY29udGV4dF82NC5oCkBAIC0wLDAgKzEsMTU1IEBACisjaWZuZGVmIF9fU1BBUkM2NF9NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9fU1BBUkM2NF9NTVVfQ09OVEVYVF9ICisKKy8qIERlcml2ZWQgaGVhdmlseSBmcm9tIExpbnVzJ3MgQWxwaGEvQVhQIEFTTiBjb2RlLi4uICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCitleHRlcm4gc3BpbmxvY2tfdCBjdHhfYWxsb2NfbG9jazsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRsYl9jb250ZXh0X2NhY2hlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW11X2NvbnRleHRfYm1hcFtdOworCitleHRlcm4gdm9pZCBnZXRfbmV3X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCBzbXBfbmV3X21tdV9jb250ZXh0X3ZlcnNpb24odm9pZCk7CisjZWxzZQorI2RlZmluZSBzbXBfbmV3X21tdV9jb250ZXh0X3ZlcnNpb24oKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworZXh0ZXJuIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCitleHRlcm4gdm9pZCBfX3RzYl9jb250ZXh0X3N3aXRjaCh1bnNpZ25lZCBsb25nIHBnZF9wYSwKKwkJCQkgc3RydWN0IHRzYl9jb25maWcgKnRzYl9iYXNlLAorCQkJCSBzdHJ1Y3QgdHNiX2NvbmZpZyAqdHNiX2h1Z2UsCisJCQkJIHVuc2lnbmVkIGxvbmcgdHNiX2Rlc2NyX3BhKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRzYl9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlfX3RzYl9jb250ZXh0X3N3aXRjaChfX3BhKG1tLT5wZ2QpLAorCQkJICAgICAmbW0tPmNvbnRleHQudHNiX2Jsb2NrWzBdLAorI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKwkJCSAgICAgKG1tLT5jb250ZXh0LnRzYl9ibG9ja1sxXS50c2IgPworCQkJICAgICAgJm1tLT5jb250ZXh0LnRzYl9ibG9ja1sxXSA6CisJCQkgICAgICBOVUxMKQorI2Vsc2UKKwkJCSAgICAgTlVMTAorI2VuZGlmCisJCQkgICAgICwgX19wYSgmbW0tPmNvbnRleHQudHNiX2Rlc2NyWzBdKSk7Cit9CisKK2V4dGVybiB2b2lkIHRzYl9ncm93KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHRzYl9pbmRleCwgdW5zaWduZWQgbG9uZyBtbV9yc3MpOworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIHNtcF90c2Jfc3luYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisjZWxzZQorI2RlZmluZSBzbXBfdHNiX3N5bmMoX19tbSkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIFNldCBNTVUgY29udGV4dCBpbiB0aGUgYWN0dWFsIGhhcmR3YXJlLiAqLworI2RlZmluZSBsb2FkX3NlY29uZGFyeV9jb250ZXh0KF9fbW0pIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggXAorCSJcbjY2MToJc3R4YQkJJTAsIFslMV0gJTJcbiIgXAorCSIJLnNlY3Rpb24JLnN1bjR2XzFpbnNuX3BhdGNoLCBcImF4XCJcbiIgXAorCSIJLndvcmQJCTY2MWJcbiIgXAorCSIJc3R4YQkJJTAsIFslMV0gJTNcbiIgXAorCSIJLnByZXZpb3VzXG4iIFwKKwkiCWZsdXNoCQklJWc2XG4iIFwKKwk6IC8qIE5vIG91dHB1dHMgKi8gXAorCTogInIiIChDVFhfSFdCSVRTKChfX21tKS0+Y29udGV4dCkpLCBcCisJICAiciIgKFNFQ09OREFSWV9DT05URVhUKSwgImkiIChBU0lfRE1NVSksICJpIiAoQVNJX01NVSkpCisKK2V4dGVybiB2b2lkIF9fZmx1c2hfdGxiX21tKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCisvKiBTd2l0Y2ggdGhlIGN1cnJlbnQgTU0gY29udGV4dC4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW5zaWduZWQgbG9uZyBjdHhfdmFsaWQsIGZsYWdzOworCWludCBjcHU7CisKKwlpZiAodW5saWtlbHkobW0gPT0gJmluaXRfbW0pKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOworCWN0eF92YWxpZCA9IENUWF9WQUxJRChtbS0+Y29udGV4dCk7CisJaWYgKCFjdHhfdmFsaWQpCisJCWdldF9uZXdfbW11X2NvbnRleHQobW0pOworCisJLyogV2UgaGF2ZSB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bCBoZXJlIG9yIGVsc2Ugd2Ugd2lsbCBtaXNzCisJICogYSBUU0IgZ3JvdyBpZiB3ZSBzd2l0Y2ggYmFjayBhbmQgZm9ydGggYmV0d2VlbiBhIGtlcm5lbAorCSAqIHRocmVhZCBhbmQgYW4gYWRkcmVzcyBzcGFjZSB3aGljaCBoYXMgaXQncyBUU0Igc2l6ZSBpbmNyZWFzZWQKKwkgKiBvbiBhbm90aGVyIHByb2Nlc3Nvci4KKwkgKgorCSAqIEl0IGlzIHBvc3NpYmxlIHRvIHBsYXkgc29tZSBnYW1lcyBpbiBvcmRlciB0byBvcHRpbWl6ZSB0aGUKKwkgKiBzd2l0Y2gsIGJ1dCB0aGUgc2FmZXN0IHRoaW5nIHRvIGRvIGlzIHRvIHVuY29uZGl0aW9uYWxseQorCSAqIHBlcmZvcm0gdGhlIHNlY29uZGFyeSBjb250ZXh0IGxvYWQgYW5kIHRoZSBUU0IgY29udGV4dCBzd2l0Y2guCisJICoKKwkgKiBGb3IgcmVmZXJlbmNlIHRoZSBiYWQgY2FzZSBpcywgZm9yIGFkZHJlc3Mgc3BhY2UgIkEiOgorCSAqCisJICoJCUNQVSAwCQkJQ1BVIDEKKwkgKglydW4gYWRkcmVzcyBzcGFjZSBBCisJICoJc2V0IGNwdTAncyBiaXRzIGluIGNwdV92bV9tYXNrCisJICoJc3dpdGNoIHRvIGtlcm5lbCB0aHJlYWQsIGJvcnJvdworCSAqCWFkZHJlc3Mgc3BhY2UgQSB2aWEgZW50cnlfbGF6eV90bGIKKwkgKgkJCQkJcnVuIGFkZHJlc3Mgc3BhY2UgQQorCSAqCQkJCQlzZXQgY3B1MSdzIGJpdCBpbiBjcHVfdm1fbWFzaworCSAqCQkJCQlmbHVzaF90bGJfcGVuZGluZygpCisJICoJCQkJCXJlc2V0IGNwdV92bV9tYXNrIHRvIGp1c3QgY3B1MQorCSAqCQkJCQlUU0IgZ3JvdworCSAqCXJ1biBhZGRyZXNzIHNwYWNlIEEKKwkgKgljb250ZXh0IHdhcyB2YWxpZCwgc28gc2tpcAorCSAqCVRTQiBjb250ZXh0IHN3aXRjaAorCSAqCisJICogQXQgdGhhdCBwb2ludCBjcHUwIGNvbnRpbnVlcyB0byB1c2UgYSBzdGFsZSBUU0IsIHRoZSBvbmUgZnJvbQorCSAqIGJlZm9yZSB0aGUgVFNCIGdyb3cgcGVyZm9ybWVkIG9uIGNwdTEuICBjcHUxIGRpZCBub3QgY3Jvc3MtY2FsbAorCSAqIGNwdTAgdG8gdXBkYXRlIGl0J3MgVFNCIGJlY2F1c2UgYXQgdGhhdCBwb2ludCB0aGUgY3B1X3ZtX21hc2sKKwkgKiBvbmx5IGhhZCBjcHUxIHNldCBpbiBpdC4KKwkgKi8KKwlsb2FkX3NlY29uZGFyeV9jb250ZXh0KG1tKTsKKwl0c2JfY29udGV4dF9zd2l0Y2gobW0pOworCisJLyogQW55IHRpbWUgYSBwcm9jZXNzb3IgcnVucyBhIGNvbnRleHQgb24gYW4gYWRkcmVzcyBzcGFjZQorCSAqIGZvciB0aGUgZmlyc3QgdGltZSwgd2UgbXVzdCBmbHVzaCB0aGF0IGNvbnRleHQgb3V0IG9mIHRoZQorCSAqIGxvY2FsIFRMQi4KKwkgKi8KKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWYgKCFjdHhfdmFsaWQgfHwgIWNwdV9pc3NldChjcHUsIG1tLT5jcHVfdm1fbWFzaykpIHsKKwkJY3B1X3NldChjcHUsIG1tLT5jcHVfdm1fbWFzayk7CisJCV9fZmx1c2hfdGxiX21tKENUWF9IV0JJVFMobW0tPmNvbnRleHQpLAorCQkJICAgICAgIFNFQ09OREFSWV9DT05URVhUKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOworfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qIEFjdGl2YXRlIGEgbmV3IE1NIGluc3RhbmNlIGZvciB0aGUgY3VycmVudCB0YXNrLiAqLworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY3B1OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1tLT5jb250ZXh0LmxvY2ssIGZsYWdzKTsKKwlpZiAoIUNUWF9WQUxJRChtbS0+Y29udGV4dCkpCisJCWdldF9uZXdfbW11X2NvbnRleHQobW0pOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpZiAoIWNwdV9pc3NldChjcHUsIG1tLT5jcHVfdm1fbWFzaykpCisJCWNwdV9zZXQoY3B1LCBtbS0+Y3B1X3ZtX21hc2spOworCisJbG9hZF9zZWNvbmRhcnlfY29udGV4dChtbSk7CisJX19mbHVzaF90bGJfbW0oQ1RYX0hXQklUUyhtbS0+Y29udGV4dCksIFNFQ09OREFSWV9DT05URVhUKTsKKwl0c2JfY29udGV4dF9zd2l0Y2gobW0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1tLT5jb250ZXh0LmxvY2ssIGZsYWdzKTsKK30KKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfX1NQQVJDNjRfTU1VX0NPTlRFWFRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21tem9uZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW16b25lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmNTk4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21tem9uZS5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX1NQQVJDNjRfTU1aT05FX0gKKyNkZWZpbmUgX1NQQVJDNjRfTU1aT05FX0gKKworI2lmZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCisKK2V4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOworCisjZGVmaW5lIE5PREVfREFUQShuaWQpCQkobm9kZV9kYXRhW25pZF0pCisjZGVmaW5lIG5vZGVfc3RhcnRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKKyNkZWZpbmUgbm9kZV9lbmRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX2VuZF9wZm4pCisKK2V4dGVybiBpbnQgbnVtYV9jcHVfbG9va3VwX3RhYmxlW107CitleHRlcm4gY3B1bWFza190IG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbXTsKKworI2VuZGlmIC8qIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTICovCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9NTVpPTkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbW9kdWxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tb2R1bGUuaAppbmRleCBjYmQ5ZTY3Li41MTYxMzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tb2R1bGUuaApAQCAtMSw3ICsxLDggQEAKLSNpZm5kZWYgX0FTTV9TUEFSQ19NT0RVTEVfSAotI2RlZmluZSBfQVNNX1NQQVJDX01PRFVMRV9ICi1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeyB9OwotI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCi0jZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCi0jZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKLSNlbmRpZiAvKiBfQVNNX1NQQVJDX01PRFVMRV9IICovCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19NT0RVTEVfSAorI2RlZmluZSBfX19BU01fU1BBUkNfTU9EVUxFX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9tb2R1bGVfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL21vZHVsZV8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21vZHVsZV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9kdWxlXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkOWU2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21vZHVsZV8zMi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQVNNX1NQQVJDX01PRFVMRV9ICisjZGVmaW5lIF9BU01fU1BBUkNfTU9EVUxFX0gKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7IH07CisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorI2VuZGlmIC8qIF9BU01fU1BBUkNfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21vZHVsZV82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9kdWxlXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3N2JhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21vZHVsZV82NC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQVNNX1NQQVJDNjRfTU9EVUxFX0gKKyNkZWZpbmUgX0FTTV9TUEFSQzY0X01PRFVMRV9ICitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeyB9OworI2RlZmluZSBFbGZfU2hkciBFbGY2NF9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmNjRfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjY0X0VoZHIKKyNlbmRpZiAvKiBfQVNNX1NQQVJDNjRfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21vc3Rlay5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrLmgKaW5kZXggMjlhYWQxMS4uNWI5ZjdmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrLmgKQEAgLTEsMTczICsxLDggQEAKLS8qCi0gKiBtb3N0ZWsuaDogIERlc2NyaWJlcyB0aGUgdmFyaW91cyBNb3N0ZWsgdGltZSBvZiBkYXkgY2xvY2sgcmVnaXN0ZXJzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQGVkZW4ucnV0Z2Vycy5lZHUpCi0gKiBBZGRlZCBpbnRlcnNpbCBjb2RlIDA1LzI1Lzk4IENocmlzIERhdmlzIChjZGF2aXNAY29pcy5vbi5jYSkKLSAqLwotCi0jaWZuZGVmIF9TUEFSQ19NT1NURUtfSAotI2RlZmluZSBfU1BBUkNfTU9TVEVLX0gKLQotI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotLyogICAgICAgTTQ4VDAyIFJlZ2lzdGVyIE1hcCAoYWRhcHRlZCBmcm9tIFN1biBOVlJBTS9Ib3N0aWQgRkFRKQotICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhCi0gKiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uCi0gKiAgICAgICAgQml0IDcgQml0IDYgQml0IDUgQml0IDRCaXQgMyBCaXQgMiBCaXQgMSBCaXQgMAotICogICA3ZmYgIC0gICAgIC0gICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICAgICBZZWFyIDAwLTk5Ci0gKiAgIDdmZSAgMCAgICAgMCAgICAgMCAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgICAgTW9udGggMDEtMTIKLSAqICAgN2ZkICAwICAgICAwICAgICAtICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICAgRGF0ZSAwMS0zMQotICogICA3ZmMgIDAgICAgIEZUICAgIDAgICAgIDAgICAgMCAgICAgLSAgICAgLSAgICAgLSAgICAgICAgRGF5IDAxLTA3Ci0gKiAgIDdmYiAgS1MgICAgMCAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgICAgSG91cnMgMDAtMjMKLSAqICAgN2ZhICAwICAgICAtICAgICAtICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgTWludXRlcyAwMC01OQotICogICA3ZjkgIFNUICAgIC0gICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICBTZWNvbmRzIDAwLTU5Ci0gKiAgIDdmOCAgVyAgICAgUiAgICAgUyAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgIENvbnRyb2wKLSAqCi0gKiAgICogU1QgaXMgU1RPUCBCSVQKLSAqICAgKiBXIGlzIFdSSVRFIEJJVAotICogICAqIFIgaXMgUkVBRCBCSVQKLSAqICAgKiBTIGlzIFNJR04gQklUCi0gKiAgICogRlQgaXMgRlJFUSBURVNUIEJJVAotICogICAqIEtTIGlzIEtJQ0sgU1RBUlQgQklUCi0gKi8KLQotLyogVGhlIE1vc3RlayA0OHQwMiByZWFsIHRpbWUgY2xvY2sgYW5kIE5WUkFNIGNoaXAuIFRoZSByZWdpc3RlcnMKLSAqIG90aGVyIHRoYW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYXJlIGluIGJpbmFyeSBjb2RlZCBkZWNpbWFsLiBTb21lCi0gKiBjb250cm9sIGJpdHMgYWxzbyBsaXZlIG91dHNpZGUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCi0gKi8KLSNkZWZpbmUgbW9zdGVrX3JlYWQoX2FkZHIpCQlyZWFkYihfYWRkcikKLSNkZWZpbmUgbW9zdGVrX3dyaXRlKF9hZGRyLF92YWwpCXdyaXRlYihfdmFsLCBfYWRkcikKLSNkZWZpbmUgTU9TVEVLX0VFUFJPTQkJMHgwMDAwVUwKLSNkZWZpbmUgTU9TVEVLX0lEUFJPTQkJMHgwN2Q4VUwKLSNkZWZpbmUgTU9TVEVLX0NSRUcJCTB4MDdmOFVMCi0jZGVmaW5lIE1PU1RFS19TRUMJCTB4MDdmOVVMCi0jZGVmaW5lIE1PU1RFS19NSU4JCTB4MDdmYVVMCi0jZGVmaW5lIE1PU1RFS19IT1VSCQkweDA3ZmJVTAotI2RlZmluZSBNT1NURUtfRE9XCQkweDA3ZmNVTAotI2RlZmluZSBNT1NURUtfRE9NCQkweDA3ZmRVTAotI2RlZmluZSBNT1NURUtfTU9OVEgJCTB4MDdmZVVMCi0jZGVmaW5lIE1PU1RFS19ZRUFSCQkweDA3ZmZVTAotCi1zdHJ1Y3QgbW9zdGVrNDh0MDIgewotCXZvbGF0aWxlIGNoYXIgZWVwcm9tWzIwMDhdOwkvKiBUaGlzIGlzIHRoZSBlZXByb20sIGRvbid0IHRvdWNoISAqLwotCXN0cnVjdCBpZHByb20gaWRwcm9tOwkJLyogVGhlIGlkcHJvbSBsaXZlcyBoZXJlLiAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY3JlZzsJLyogQ29udHJvbCByZWdpc3RlciAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc2VjOwkvKiBTZWNvbmRzICgwLTU5KSAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbWluOwkvKiBNaW51dGVzICgwLTU5KSAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaG91cjsJLyogSG91ciAoMC0yMykgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGRvdzsJLyogRGF5IG9mIHRoZSB3ZWVrICgxLTcpICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkb207CS8qIERheSBvZiB0aGUgbW9udGggKDEtMzEpICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBtb250aDsJLyogTW9udGggb2YgeWVhciAoMS0xMikgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHllYXI7CS8qIFllYXIgKDAtOTkpICovCi19OwotCi1leHRlcm4gc3BpbmxvY2tfdCBtb3N0ZWtfbG9jazsKLWV4dGVybiB2b2lkIF9faW9tZW0gKm1zdGs0OHQwMl9yZWdzOwotCi0vKiBDb250cm9sIHJlZ2lzdGVyIHZhbHVlcy4gKi8KLSNkZWZpbmUJTVNUS19DUkVHX1dSSVRFCTB4ODAJLyogTXVzdCBzZXQgdGhpcyBiZWZvcmUgcGxhY2luZyB2YWx1ZXMuICovCi0jZGVmaW5lCU1TVEtfQ1JFR19SRUFECTB4NDAJLyogU3RvcCB1cGRhdGVzIHRvIGFsbG93IGEgY2xlYW4gcmVhZC4gKi8KLSNkZWZpbmUJTVNUS19DUkVHX1NJR04JMHgyMAkvKiBTbG93L3NwZWVkIGNsb2NrIGluIGNhbGlicmF0aW9uIG1vZGUuICovCi0KLS8qIENvbnRyb2wgYml0cyB0aGF0IGxpdmUgaW4gdGhlIG90aGVyIHJlZ2lzdGVycy4gKi8KLSNkZWZpbmUJTVNUS19TVE9QCTB4ODAJLyogU3RvcCB0aGUgY2xvY2sgb3NjaWxsYXRvci4gKHNlYykgKi8KLSNkZWZpbmUJTVNUS19LSUNLX1NUQVJUCTB4ODAJLyogS2ljayBzdGFydCB0aGUgY2xvY2sgY2hpcC4gKGhvdXIpICovCi0jZGVmaW5lIE1TVEtfRlJFUV9URVNUCTB4NDAJLyogRnJlcXVlbmN5IHRlc3QgbW9kZS4gKGRheSkgKi8KLQotI2RlZmluZSBNU1RLX1lFQVJfWkVSTyAgICAgICAxOTY4ICAgLyogSWYgeWVhciByZWcgaGFzIHplcm8sIGl0IGlzIDE5NjguICovCi0jZGVmaW5lIE1TVEtfQ1ZUX1lFQVIoeXIpICAoKHlyKSArIE1TVEtfWUVBUl9aRVJPKQotCi0vKiBNYXNrcyB0aGF0IGRlZmluZSBob3cgbXVjaCBzcGFjZSBlYWNoIHZhbHVlIHRha2VzIHVwLiAqLwotI2RlZmluZQlNU1RLX1NFQ19NQVNLCTB4N2YKLSNkZWZpbmUJTVNUS19NSU5fTUFTSwkweDdmCi0jZGVmaW5lCU1TVEtfSE9VUl9NQVNLCTB4M2YKLSNkZWZpbmUJTVNUS19ET1dfTUFTSwkweDA3Ci0jZGVmaW5lCU1TVEtfRE9NX01BU0sJMHgzZgotI2RlZmluZQlNU1RLX01PTlRIX01BU0sJMHgxZgotI2RlZmluZQlNU1RLX1lFQVJfTUFTSwkweGZmVQotCi0vKiBCaW5hcnkgY29kZWQgZGVjaW1hbCBjb252ZXJzaW9uIG1hY3Jvcy4gKi8KLSNkZWZpbmUgTVNUS19SRUdWQUxfVE9fREVDSU1BTCh4KSAgKCgoeCkgJiAweDBGKSArIDB4MEEgKiAoKHgpID4+IDB4MDQpKQotI2RlZmluZSBNU1RLX0RFQ0lNQUxfVE9fUkVHVkFMKHgpICAoKCgoeCkgLyAweDBBKSA8PCAweDA0KSArICgoeCkgJSAweDBBKSkKLQotLyogR2VuZXJpYyByZWdpc3RlciBzZXQgYW5kIGdldCBtYWNyb3MgZm9yIGludGVybmFsIHVzZS4gKi8KLSNkZWZpbmUgTVNUS19HRVQocmVncyx2YXIsbWFzaykgKE1TVEtfUkVHVkFMX1RPX0RFQ0lNQUwoKChzdHJ1Y3QgbW9zdGVrNDh0MDIgKilyZWdzKS0+dmFyICYgTVNUS18gIyMgbWFzayAjIyBfTUFTSykpCi0jZGVmaW5lIE1TVEtfU0VUKHJlZ3MsdmFyLHZhbHVlLG1hc2spIGRvIHsgKChzdHJ1Y3QgbW9zdGVrNDh0MDIgKilyZWdzKS0+dmFyICY9IH4oTVNUS18gIyMgbWFzayAjIyBfTUFTSyk7ICgoc3RydWN0IG1vc3RlazQ4dDAyICopcmVncyktPnZhciB8PSBNU1RLX0RFQ0lNQUxfVE9fUkVHVkFMKHZhbHVlKSAmIChNU1RLXyAjIyBtYXNrICMjIF9NQVNLKTsgfSB3aGlsZSAoMCkKLQotLyogTWFjcm9zIHRvIG1ha2UgcmVnaXN0ZXIgYWNjZXNzIGVhc2llciBvbiBvdXIgZmluZ2Vycy4gVGhlc2UgZ2l2ZSB5b3UKLSAqIHRoZSBkZWNpbWFsIHZhbHVlIG9mIHRoZSByZWdpc3RlciByZXF1ZXN0ZWQgaWYgYXBwbGljYWJsZS4gWW91IHBhc3MKLSAqIHRoZSBhIHBvaW50ZXIgdG8gYSAnc3RydWN0IG1vc3RlazQ4dDAyJy4KLSAqLwotI2RlZmluZQlNU1RLX1JFR19DUkVHKHJlZ3MpCSgoKHN0cnVjdCBtb3N0ZWs0OHQwMiAqKXJlZ3MpLT5jcmVnKQotI2RlZmluZQlNU1RLX1JFR19TRUMocmVncykJTVNUS19HRVQocmVncyxzZWMsU0VDKQotI2RlZmluZQlNU1RLX1JFR19NSU4ocmVncykJTVNUS19HRVQocmVncyxtaW4sTUlOKQotI2RlZmluZQlNU1RLX1JFR19IT1VSKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsaG91cixIT1VSKQotI2RlZmluZQlNU1RLX1JFR19ET1cocmVncykJTVNUS19HRVQocmVncyxkb3csRE9XKQotI2RlZmluZQlNU1RLX1JFR19ET00ocmVncykJTVNUS19HRVQocmVncyxkb20sRE9NKQotI2RlZmluZQlNU1RLX1JFR19NT05USChyZWdzKQlNU1RLX0dFVChyZWdzLG1vbnRoLE1PTlRIKQotI2RlZmluZQlNU1RLX1JFR19ZRUFSKHJlZ3MpCU1TVEtfR0VUKHJlZ3MseWVhcixZRUFSKQotCi0jZGVmaW5lCU1TVEtfU0VUX1JFR19TRUMocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxzZWMsdmFsdWUsU0VDKQotI2RlZmluZQlNU1RLX1NFVF9SRUdfTUlOKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsbWluLHZhbHVlLE1JTikKLSNkZWZpbmUJTVNUS19TRVRfUkVHX0hPVVIocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxob3VyLHZhbHVlLEhPVVIpCi0jZGVmaW5lCU1TVEtfU0VUX1JFR19ET1cocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxkb3csdmFsdWUsRE9XKQotI2RlZmluZQlNU1RLX1NFVF9SRUdfRE9NKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsZG9tLHZhbHVlLERPTSkKLSNkZWZpbmUJTVNUS19TRVRfUkVHX01PTlRIKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsbW9udGgsdmFsdWUsTU9OVEgpCi0jZGVmaW5lCU1TVEtfU0VUX1JFR19ZRUFSKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MseWVhcix2YWx1ZSxZRUFSKQotCi0KLS8qIFRoZSBNb3N0ZWsgNDh0MDggY2xvY2sgY2hpcC4gRm91bmQgb24gU3VuNG0ncyBJIHRoaW5rLiBJdCBoYXMgdGhlCi0gKiBzYW1lIChiYXNpY2FsbHkpIGxheW91dCBvZiB0aGUgNDh0MDIgY2hpcCBleGNlcHQgZm9yIHRoZSBleHRyYQotICogTlZSQU0gb24gYm9hcmQgKDggS0IgYWdhaW5zdCB0aGUgNDh0MDIncyAyIEtCKS4KLSAqLwotc3RydWN0IG1vc3RlazQ4dDA4IHsKLQljaGFyIG9mZnNldFs2KjEwMjRdOyAgICAgICAgIC8qIE1hZ2ljIHRoaW5ncyBtYXkgYmUgaGVyZSwgd2hvIGtub3dzPyAqLwotCXN0cnVjdCBtb3N0ZWs0OHQwMiByZWdzOyAgICAgLyogSGVyZSBpcyB3aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluLiAgICovCi19OwotCi1leHRlcm4gZW51bSBzcGFyY19jbG9ja190eXBlIHNwX2Nsb2NrX3R5cDsKLQotI2lmZGVmIENPTkZJR19TVU40Ci1lbnVtIHNwYXJjX2Nsb2NrX3R5cGUgewlNU1RLNDhUMDIsIE1TVEs0OFQwOCwgXAotSU5URVJTSUwsIE1TVEtfSU5WQUxJRCB9OworI2lmbmRlZiBfX19BU01fU1BBUkNfTU9TVEVLX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX01PU1RFS19ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvbW9zdGVrXzY0Lmg+CiAjZWxzZQotZW51bSBzcGFyY19jbG9ja190eXBlIHsJTVNUSzQ4VDAyLCBNU1RLNDhUMDgsIFwKLU1TVEtfSU5WQUxJRCB9OworI2luY2x1ZGUgPGFzbS1zcGFyYy9tb3N0ZWtfMzIuaD4KICNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NVTjQKLS8qIGludGVyc2lsIG9uIGEgc3VuIDQvMjYwIGNvZGUgIGRhdGEgZnJvbSBoYXJyaXMgZG9jICovCi1zdHJ1Y3QgaW50ZXJzaWxfZHQgewotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9jc2VjOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9ob3VyOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9taW47Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X3NlYzsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfbW9udGg7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X2RheTsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfeWVhcjsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfZG93OwotfTsKLQotc3RydWN0IGludGVyc2lsIHsKLQlzdHJ1Y3QgaW50ZXJzaWxfZHQgY2xrOwotCXN0cnVjdCBpbnRlcnNpbF9kdCBjbXA7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfaW50cl9yZWc7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfY21kX3JlZzsKLX07Ci0KLSNkZWZpbmUgSU5URVJTSUxfU1RPUCAgICAgICAgMHgwCi0jZGVmaW5lIElOVEVSU0lMX1NUQVJUICAgICAgIDB4OAotI2RlZmluZSBJTlRFUlNJTF9JTlRSX0RJU0FCTEUgICAweDAKLSNkZWZpbmUgSU5URVJTSUxfSU5UUl9FTkFCTEUgICAweDEwCi0jZGVmaW5lIElOVEVSU0lMXzMySwkJMHgwCi0jZGVmaW5lIElOVEVSU0lMX05PUk1BTAkJMHgwCi0jZGVmaW5lIElOVEVSU0lMXzI0SAkJMHg0IAotI2RlZmluZSBJTlRFUlNJTF9JTlRfMTAwSFoJMHgyCi0KLS8qIGVuZCBvZiBpbnRlcnNpbCBpbmZvICovCiAjZW5kaWYKLQotI2VuZGlmIC8qICEoX1NQQVJDX01PU1RFS19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tb3N0ZWtfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk1OTBjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrXzMyLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBtb3N0ZWsuaDogIERlc2NyaWJlcyB0aGUgdmFyaW91cyBNb3N0ZWsgdGltZSBvZiBkYXkgY2xvY2sgcmVnaXN0ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQGVkZW4ucnV0Z2Vycy5lZHUpCisgKiBBZGRlZCBpbnRlcnNpbCBjb2RlIDA1LzI1Lzk4IENocmlzIERhdmlzIChjZGF2aXNAY29pcy5vbi5jYSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19NT1NURUtfSAorI2RlZmluZSBfU1BBUkNfTU9TVEVLX0gKKworI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogICAgICAgTTQ4VDAyIFJlZ2lzdGVyIE1hcCAoYWRhcHRlZCBmcm9tIFN1biBOVlJBTS9Ib3N0aWQgRkFRKQorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhCisgKiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uCisgKiAgICAgICAgQml0IDcgQml0IDYgQml0IDUgQml0IDRCaXQgMyBCaXQgMiBCaXQgMSBCaXQgMAorICogICA3ZmYgIC0gICAgIC0gICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICAgICBZZWFyIDAwLTk5CisgKiAgIDdmZSAgMCAgICAgMCAgICAgMCAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgICAgTW9udGggMDEtMTIKKyAqICAgN2ZkICAwICAgICAwICAgICAtICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICAgRGF0ZSAwMS0zMQorICogICA3ZmMgIDAgICAgIEZUICAgIDAgICAgIDAgICAgMCAgICAgLSAgICAgLSAgICAgLSAgICAgICAgRGF5IDAxLTA3CisgKiAgIDdmYiAgS1MgICAgMCAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgICAgSG91cnMgMDAtMjMKKyAqICAgN2ZhICAwICAgICAtICAgICAtICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgTWludXRlcyAwMC01OQorICogICA3ZjkgIFNUICAgIC0gICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICBTZWNvbmRzIDAwLTU5CisgKiAgIDdmOCAgVyAgICAgUiAgICAgUyAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgIENvbnRyb2wKKyAqCisgKiAgICogU1QgaXMgU1RPUCBCSVQKKyAqICAgKiBXIGlzIFdSSVRFIEJJVAorICogICAqIFIgaXMgUkVBRCBCSVQKKyAqICAgKiBTIGlzIFNJR04gQklUCisgKiAgICogRlQgaXMgRlJFUSBURVNUIEJJVAorICogICAqIEtTIGlzIEtJQ0sgU1RBUlQgQklUCisgKi8KKworLyogVGhlIE1vc3RlayA0OHQwMiByZWFsIHRpbWUgY2xvY2sgYW5kIE5WUkFNIGNoaXAuIFRoZSByZWdpc3RlcnMKKyAqIG90aGVyIHRoYW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYXJlIGluIGJpbmFyeSBjb2RlZCBkZWNpbWFsLiBTb21lCisgKiBjb250cm9sIGJpdHMgYWxzbyBsaXZlIG91dHNpZGUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgbW9zdGVrX3JlYWQoX2FkZHIpCQlyZWFkYihfYWRkcikKKyNkZWZpbmUgbW9zdGVrX3dyaXRlKF9hZGRyLF92YWwpCXdyaXRlYihfdmFsLCBfYWRkcikKKyNkZWZpbmUgTU9TVEVLX0VFUFJPTQkJMHgwMDAwVUwKKyNkZWZpbmUgTU9TVEVLX0lEUFJPTQkJMHgwN2Q4VUwKKyNkZWZpbmUgTU9TVEVLX0NSRUcJCTB4MDdmOFVMCisjZGVmaW5lIE1PU1RFS19TRUMJCTB4MDdmOVVMCisjZGVmaW5lIE1PU1RFS19NSU4JCTB4MDdmYVVMCisjZGVmaW5lIE1PU1RFS19IT1VSCQkweDA3ZmJVTAorI2RlZmluZSBNT1NURUtfRE9XCQkweDA3ZmNVTAorI2RlZmluZSBNT1NURUtfRE9NCQkweDA3ZmRVTAorI2RlZmluZSBNT1NURUtfTU9OVEgJCTB4MDdmZVVMCisjZGVmaW5lIE1PU1RFS19ZRUFSCQkweDA3ZmZVTAorCitzdHJ1Y3QgbW9zdGVrNDh0MDIgeworCXZvbGF0aWxlIGNoYXIgZWVwcm9tWzIwMDhdOwkvKiBUaGlzIGlzIHRoZSBlZXByb20sIGRvbid0IHRvdWNoISAqLworCXN0cnVjdCBpZHByb20gaWRwcm9tOwkJLyogVGhlIGlkcHJvbSBsaXZlcyBoZXJlLiAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY3JlZzsJLyogQ29udHJvbCByZWdpc3RlciAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc2VjOwkvKiBTZWNvbmRzICgwLTU5KSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbWluOwkvKiBNaW51dGVzICgwLTU5KSAqLworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaG91cjsJLyogSG91ciAoMC0yMykgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGRvdzsJLyogRGF5IG9mIHRoZSB3ZWVrICgxLTcpICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkb207CS8qIERheSBvZiB0aGUgbW9udGggKDEtMzEpICovCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBtb250aDsJLyogTW9udGggb2YgeWVhciAoMS0xMikgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHllYXI7CS8qIFllYXIgKDAtOTkpICovCit9OworCitleHRlcm4gc3BpbmxvY2tfdCBtb3N0ZWtfbG9jazsKK2V4dGVybiB2b2lkIF9faW9tZW0gKm1zdGs0OHQwMl9yZWdzOworCisvKiBDb250cm9sIHJlZ2lzdGVyIHZhbHVlcy4gKi8KKyNkZWZpbmUJTVNUS19DUkVHX1dSSVRFCTB4ODAJLyogTXVzdCBzZXQgdGhpcyBiZWZvcmUgcGxhY2luZyB2YWx1ZXMuICovCisjZGVmaW5lCU1TVEtfQ1JFR19SRUFECTB4NDAJLyogU3RvcCB1cGRhdGVzIHRvIGFsbG93IGEgY2xlYW4gcmVhZC4gKi8KKyNkZWZpbmUJTVNUS19DUkVHX1NJR04JMHgyMAkvKiBTbG93L3NwZWVkIGNsb2NrIGluIGNhbGlicmF0aW9uIG1vZGUuICovCisKKy8qIENvbnRyb2wgYml0cyB0aGF0IGxpdmUgaW4gdGhlIG90aGVyIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUJTVNUS19TVE9QCTB4ODAJLyogU3RvcCB0aGUgY2xvY2sgb3NjaWxsYXRvci4gKHNlYykgKi8KKyNkZWZpbmUJTVNUS19LSUNLX1NUQVJUCTB4ODAJLyogS2ljayBzdGFydCB0aGUgY2xvY2sgY2hpcC4gKGhvdXIpICovCisjZGVmaW5lIE1TVEtfRlJFUV9URVNUCTB4NDAJLyogRnJlcXVlbmN5IHRlc3QgbW9kZS4gKGRheSkgKi8KKworI2RlZmluZSBNU1RLX1lFQVJfWkVSTyAgICAgICAxOTY4ICAgLyogSWYgeWVhciByZWcgaGFzIHplcm8sIGl0IGlzIDE5NjguICovCisjZGVmaW5lIE1TVEtfQ1ZUX1lFQVIoeXIpICAoKHlyKSArIE1TVEtfWUVBUl9aRVJPKQorCisvKiBNYXNrcyB0aGF0IGRlZmluZSBob3cgbXVjaCBzcGFjZSBlYWNoIHZhbHVlIHRha2VzIHVwLiAqLworI2RlZmluZQlNU1RLX1NFQ19NQVNLCTB4N2YKKyNkZWZpbmUJTVNUS19NSU5fTUFTSwkweDdmCisjZGVmaW5lCU1TVEtfSE9VUl9NQVNLCTB4M2YKKyNkZWZpbmUJTVNUS19ET1dfTUFTSwkweDA3CisjZGVmaW5lCU1TVEtfRE9NX01BU0sJMHgzZgorI2RlZmluZQlNU1RLX01PTlRIX01BU0sJMHgxZgorI2RlZmluZQlNU1RLX1lFQVJfTUFTSwkweGZmVQorCisvKiBCaW5hcnkgY29kZWQgZGVjaW1hbCBjb252ZXJzaW9uIG1hY3Jvcy4gKi8KKyNkZWZpbmUgTVNUS19SRUdWQUxfVE9fREVDSU1BTCh4KSAgKCgoeCkgJiAweDBGKSArIDB4MEEgKiAoKHgpID4+IDB4MDQpKQorI2RlZmluZSBNU1RLX0RFQ0lNQUxfVE9fUkVHVkFMKHgpICAoKCgoeCkgLyAweDBBKSA8PCAweDA0KSArICgoeCkgJSAweDBBKSkKKworLyogR2VuZXJpYyByZWdpc3RlciBzZXQgYW5kIGdldCBtYWNyb3MgZm9yIGludGVybmFsIHVzZS4gKi8KKyNkZWZpbmUgTVNUS19HRVQocmVncyx2YXIsbWFzaykgKE1TVEtfUkVHVkFMX1RPX0RFQ0lNQUwoKChzdHJ1Y3QgbW9zdGVrNDh0MDIgKilyZWdzKS0+dmFyICYgTVNUS18gIyMgbWFzayAjIyBfTUFTSykpCisjZGVmaW5lIE1TVEtfU0VUKHJlZ3MsdmFyLHZhbHVlLG1hc2spIGRvIHsgKChzdHJ1Y3QgbW9zdGVrNDh0MDIgKilyZWdzKS0+dmFyICY9IH4oTVNUS18gIyMgbWFzayAjIyBfTUFTSyk7ICgoc3RydWN0IG1vc3RlazQ4dDAyICopcmVncyktPnZhciB8PSBNU1RLX0RFQ0lNQUxfVE9fUkVHVkFMKHZhbHVlKSAmIChNU1RLXyAjIyBtYXNrICMjIF9NQVNLKTsgfSB3aGlsZSAoMCkKKworLyogTWFjcm9zIHRvIG1ha2UgcmVnaXN0ZXIgYWNjZXNzIGVhc2llciBvbiBvdXIgZmluZ2Vycy4gVGhlc2UgZ2l2ZSB5b3UKKyAqIHRoZSBkZWNpbWFsIHZhbHVlIG9mIHRoZSByZWdpc3RlciByZXF1ZXN0ZWQgaWYgYXBwbGljYWJsZS4gWW91IHBhc3MKKyAqIHRoZSBhIHBvaW50ZXIgdG8gYSAnc3RydWN0IG1vc3RlazQ4dDAyJy4KKyAqLworI2RlZmluZQlNU1RLX1JFR19DUkVHKHJlZ3MpCSgoKHN0cnVjdCBtb3N0ZWs0OHQwMiAqKXJlZ3MpLT5jcmVnKQorI2RlZmluZQlNU1RLX1JFR19TRUMocmVncykJTVNUS19HRVQocmVncyxzZWMsU0VDKQorI2RlZmluZQlNU1RLX1JFR19NSU4ocmVncykJTVNUS19HRVQocmVncyxtaW4sTUlOKQorI2RlZmluZQlNU1RLX1JFR19IT1VSKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsaG91cixIT1VSKQorI2RlZmluZQlNU1RLX1JFR19ET1cocmVncykJTVNUS19HRVQocmVncyxkb3csRE9XKQorI2RlZmluZQlNU1RLX1JFR19ET00ocmVncykJTVNUS19HRVQocmVncyxkb20sRE9NKQorI2RlZmluZQlNU1RLX1JFR19NT05USChyZWdzKQlNU1RLX0dFVChyZWdzLG1vbnRoLE1PTlRIKQorI2RlZmluZQlNU1RLX1JFR19ZRUFSKHJlZ3MpCU1TVEtfR0VUKHJlZ3MseWVhcixZRUFSKQorCisjZGVmaW5lCU1TVEtfU0VUX1JFR19TRUMocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxzZWMsdmFsdWUsU0VDKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfTUlOKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsbWluLHZhbHVlLE1JTikKKyNkZWZpbmUJTVNUS19TRVRfUkVHX0hPVVIocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxob3VyLHZhbHVlLEhPVVIpCisjZGVmaW5lCU1TVEtfU0VUX1JFR19ET1cocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxkb3csdmFsdWUsRE9XKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfRE9NKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsZG9tLHZhbHVlLERPTSkKKyNkZWZpbmUJTVNUS19TRVRfUkVHX01PTlRIKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsbW9udGgsdmFsdWUsTU9OVEgpCisjZGVmaW5lCU1TVEtfU0VUX1JFR19ZRUFSKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MseWVhcix2YWx1ZSxZRUFSKQorCisKKy8qIFRoZSBNb3N0ZWsgNDh0MDggY2xvY2sgY2hpcC4gRm91bmQgb24gU3VuNG0ncyBJIHRoaW5rLiBJdCBoYXMgdGhlCisgKiBzYW1lIChiYXNpY2FsbHkpIGxheW91dCBvZiB0aGUgNDh0MDIgY2hpcCBleGNlcHQgZm9yIHRoZSBleHRyYQorICogTlZSQU0gb24gYm9hcmQgKDggS0IgYWdhaW5zdCB0aGUgNDh0MDIncyAyIEtCKS4KKyAqLworc3RydWN0IG1vc3RlazQ4dDA4IHsKKwljaGFyIG9mZnNldFs2KjEwMjRdOyAgICAgICAgIC8qIE1hZ2ljIHRoaW5ncyBtYXkgYmUgaGVyZSwgd2hvIGtub3dzPyAqLworCXN0cnVjdCBtb3N0ZWs0OHQwMiByZWdzOyAgICAgLyogSGVyZSBpcyB3aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluLiAgICovCit9OworCisjaWZkZWYgQ09ORklHX1NVTjQKK2VudW0gc3BhcmNfY2xvY2tfdHlwZSB7CU1TVEs0OFQwMiwgTVNUSzQ4VDA4LCBcCitJTlRFUlNJTCwgTVNUS19JTlZBTElEIH07CisjZWxzZQorZW51bSBzcGFyY19jbG9ja190eXBlIHsJTVNUSzQ4VDAyLCBNU1RLNDhUMDgsIFwKK01TVEtfSU5WQUxJRCB9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1VONAorLyogaW50ZXJzaWwgb24gYSBzdW4gNC8yNjAgY29kZSAgZGF0YSBmcm9tIGhhcnJpcyBkb2MgKi8KK3N0cnVjdCBpbnRlcnNpbF9kdCB7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X2NzZWM7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X2hvdXI7CisgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X21pbjsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfc2VjOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9tb250aDsKKyAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfZGF5OworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF95ZWFyOworICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9kb3c7Cit9OworCitzdHJ1Y3QgaW50ZXJzaWwgeworCXN0cnVjdCBpbnRlcnNpbF9kdCBjbGs7CisJc3RydWN0IGludGVyc2lsX2R0IGNtcDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9pbnRyX3JlZzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9jbWRfcmVnOworfTsKKworI2RlZmluZSBJTlRFUlNJTF9TVE9QICAgICAgICAweDAKKyNkZWZpbmUgSU5URVJTSUxfU1RBUlQgICAgICAgMHg4CisjZGVmaW5lIElOVEVSU0lMX0lOVFJfRElTQUJMRSAgIDB4MAorI2RlZmluZSBJTlRFUlNJTF9JTlRSX0VOQUJMRSAgIDB4MTAKKyNkZWZpbmUgSU5URVJTSUxfMzJLCQkweDAKKyNkZWZpbmUgSU5URVJTSUxfTk9STUFMCQkweDAKKyNkZWZpbmUgSU5URVJTSUxfMjRICQkweDQKKyNkZWZpbmUgSU5URVJTSUxfSU5UXzEwMEhaCTB4MgorCisvKiBlbmQgb2YgaW50ZXJzaWwgaW5mbyAqLworI2VuZGlmCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19NT1NURUtfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21vc3Rla182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2NTJkZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21vc3Rla182NC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKiBtb3N0ZWsuaDogIERlc2NyaWJlcyB0aGUgdmFyaW91cyBNb3N0ZWsgdGltZSBvZiBkYXkgY2xvY2sgcmVnaXN0ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQGVkZW4ucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9NT1NURUtfSAorI2RlZmluZSBfU1BBUkM2NF9NT1NURUtfSAorCisjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgorCisvKiAgICAgICBNNDhUMDIgUmVnaXN0ZXIgTWFwIChhZGFwdGVkIGZyb20gU3VuIE5WUkFNL0hvc3RpZCBGQVEpCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEKKyAqIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24KKyAqICAgICAgICBCaXQgNyBCaXQgNiBCaXQgNSBCaXQgNEJpdCAzIEJpdCAyIEJpdCAxIEJpdCAwCisgKiAgIDdmZiAgLSAgICAgLSAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgICAgIFllYXIgMDAtOTkKKyAqICAgN2ZlICAwICAgICAwICAgICAwICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICBNb250aCAwMS0xMgorICogICA3ZmQgIDAgICAgIDAgICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICAgICBEYXRlIDAxLTMxCisgKiAgIDdmYyAgMCAgICAgRlQgICAgMCAgICAgMCAgICAwICAgICAtICAgICAtICAgICAtICAgICAgICBEYXkgMDEtMDcKKyAqICAgN2ZiICBLUyAgICAwICAgICAtICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICBIb3VycyAwMC0yMworICogICA3ZmEgIDAgICAgIC0gICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICBNaW51dGVzIDAwLTU5CisgKiAgIDdmOSAgU1QgICAgLSAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgIFNlY29uZHMgMDAtNTkKKyAqICAgN2Y4ICBXICAgICBSICAgICBTICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgQ29udHJvbAorICoKKyAqICAgKiBTVCBpcyBTVE9QIEJJVAorICogICAqIFcgaXMgV1JJVEUgQklUCisgKiAgICogUiBpcyBSRUFEIEJJVAorICogICAqIFMgaXMgU0lHTiBCSVQKKyAqICAgKiBGVCBpcyBGUkVRIFRFU1QgQklUCisgKiAgICogS1MgaXMgS0lDSyBTVEFSVCBCSVQKKyAqLworCisvKiBUaGUgTW9zdGVrIDQ4dDAyIHJlYWwgdGltZSBjbG9jayBhbmQgTlZSQU0gY2hpcC4gVGhlIHJlZ2lzdGVycworICogb3RoZXIgdGhhbiB0aGUgY29udHJvbCByZWdpc3RlciBhcmUgaW4gYmluYXJ5IGNvZGVkIGRlY2ltYWwuIFNvbWUKKyAqIGNvbnRyb2wgYml0cyBhbHNvIGxpdmUgb3V0c2lkZSB0aGUgY29udHJvbCByZWdpc3Rlci4KKyAqCisgKiBXZSBub3cgZGVhbCB3aXRoIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgSS9PIHRvIHRoZSBjaGlwLiAtRGF2ZU0KKyAqLworc3RhdGljIGlubGluZSB1OCBtb3N0ZWtfcmVhZCh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTggcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWJhCVslMV0gJTIsICUwIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1vc3Rla193cml0ZSh2b2lkIF9faW9tZW0gKmFkZHIsIHU4IHZhbCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYQklMCwgWyUxXSAlMiIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICh2YWwpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Cit9CisKKyNkZWZpbmUgTU9TVEVLX0VFUFJPTQkJMHgwMDAwVUwKKyNkZWZpbmUgTU9TVEVLX0lEUFJPTQkJMHgwN2Q4VUwKKyNkZWZpbmUgTU9TVEVLX0NSRUcJCTB4MDdmOFVMCisjZGVmaW5lIE1PU1RFS19TRUMJCTB4MDdmOVVMCisjZGVmaW5lIE1PU1RFS19NSU4JCTB4MDdmYVVMCisjZGVmaW5lIE1PU1RFS19IT1VSCQkweDA3ZmJVTAorI2RlZmluZSBNT1NURUtfRE9XCQkweDA3ZmNVTAorI2RlZmluZSBNT1NURUtfRE9NCQkweDA3ZmRVTAorI2RlZmluZSBNT1NURUtfTU9OVEgJCTB4MDdmZVVMCisjZGVmaW5lIE1PU1RFS19ZRUFSCQkweDA3ZmZVTAorCitleHRlcm4gc3BpbmxvY2tfdCBtb3N0ZWtfbG9jazsKK2V4dGVybiB2b2lkIF9faW9tZW0gKm1zdGs0OHQwMl9yZWdzOworCisvKiBDb250cm9sIHJlZ2lzdGVyIHZhbHVlcy4gKi8KKyNkZWZpbmUJTVNUS19DUkVHX1dSSVRFCTB4ODAJLyogTXVzdCBzZXQgdGhpcyBiZWZvcmUgcGxhY2luZyB2YWx1ZXMuICovCisjZGVmaW5lCU1TVEtfQ1JFR19SRUFECTB4NDAJLyogU3RvcCB1cGRhdGVzIHRvIGFsbG93IGEgY2xlYW4gcmVhZC4gKi8KKyNkZWZpbmUJTVNUS19DUkVHX1NJR04JMHgyMAkvKiBTbG93L3NwZWVkIGNsb2NrIGluIGNhbGlicmF0aW9uIG1vZGUuICovCisKKy8qIENvbnRyb2wgYml0cyB0aGF0IGxpdmUgaW4gdGhlIG90aGVyIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUJTVNUS19TVE9QCTB4ODAJLyogU3RvcCB0aGUgY2xvY2sgb3NjaWxsYXRvci4gKHNlYykgKi8KKyNkZWZpbmUJTVNUS19LSUNLX1NUQVJUCTB4ODAJLyogS2ljayBzdGFydCB0aGUgY2xvY2sgY2hpcC4gKGhvdXIpICovCisjZGVmaW5lIE1TVEtfRlJFUV9URVNUCTB4NDAJLyogRnJlcXVlbmN5IHRlc3QgbW9kZS4gKGRheSkgKi8KKworI2RlZmluZSBNU1RLX1lFQVJfWkVSTyAgICAgICAxOTY4ICAgLyogSWYgeWVhciByZWcgaGFzIHplcm8sIGl0IGlzIDE5NjguICovCisjZGVmaW5lIE1TVEtfQ1ZUX1lFQVIoeXIpICAoKHlyKSArIE1TVEtfWUVBUl9aRVJPKQorCisvKiBNYXNrcyB0aGF0IGRlZmluZSBob3cgbXVjaCBzcGFjZSBlYWNoIHZhbHVlIHRha2VzIHVwLiAqLworI2RlZmluZQlNU1RLX1NFQ19NQVNLCTB4N2YKKyNkZWZpbmUJTVNUS19NSU5fTUFTSwkweDdmCisjZGVmaW5lCU1TVEtfSE9VUl9NQVNLCTB4M2YKKyNkZWZpbmUJTVNUS19ET1dfTUFTSwkweDA3CisjZGVmaW5lCU1TVEtfRE9NX01BU0sJMHgzZgorI2RlZmluZQlNU1RLX01PTlRIX01BU0sJMHgxZgorI2RlZmluZQlNU1RLX1lFQVJfTUFTSwkweGZmVQorCisvKiBCaW5hcnkgY29kZWQgZGVjaW1hbCBjb252ZXJzaW9uIG1hY3Jvcy4gKi8KKyNkZWZpbmUgTVNUS19SRUdWQUxfVE9fREVDSU1BTCh4KSAgKCgoeCkgJiAweDBGKSArIDB4MEEgKiAoKHgpID4+IDB4MDQpKQorI2RlZmluZSBNU1RLX0RFQ0lNQUxfVE9fUkVHVkFMKHgpICAoKCgoeCkgLyAweDBBKSA8PCAweDA0KSArICgoeCkgJSAweDBBKSkKKworLyogR2VuZXJpYyByZWdpc3RlciBzZXQgYW5kIGdldCBtYWNyb3MgZm9yIGludGVybmFsIHVzZS4gKi8KKyNkZWZpbmUgTVNUS19HRVQocmVncyxuYW1lKQlcCisJKE1TVEtfUkVHVkFMX1RPX0RFQ0lNQUwobW9zdGVrX3JlYWQocmVncyArIE1PU1RFS18gIyMgbmFtZSkgJiBNU1RLXyAjIyBuYW1lICMjIF9NQVNLKSkKKyNkZWZpbmUgTVNUS19TRVQocmVncyxuYW1lLHZhbHVlKSBcCitkbyB7CXU4IF9fdmFsID0gbW9zdGVrX3JlYWQocmVncyArIE1PU1RFS18gIyMgbmFtZSk7IFwKKwlfX3ZhbCAmPSB+KE1TVEtfICMjIG5hbWUgIyMgX01BU0spOyBcCisJX192YWwgfD0gKE1TVEtfREVDSU1BTF9UT19SRUdWQUwodmFsdWUpICYgXAorCQkgIChNU1RLXyAjIyBuYW1lICMjIF9NQVNLKSk7IFwKKwltb3N0ZWtfd3JpdGUocmVncyArIE1PU1RFS18gIyMgbmFtZSwgX192YWwpOyBcCit9IHdoaWxlKDApCisKKy8qIE1hY3JvcyB0byBtYWtlIHJlZ2lzdGVyIGFjY2VzcyBlYXNpZXIgb24gb3VyIGZpbmdlcnMuIFRoZXNlIGdpdmUgeW91CisgKiB0aGUgZGVjaW1hbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgcmVxdWVzdGVkIGlmIGFwcGxpY2FibGUuIFlvdSBwYXNzCisgKiB0aGUgYSBwb2ludGVyIHRvIGEgJ3N0cnVjdCBtb3N0ZWs0OHQwMicuCisgKi8KKyNkZWZpbmUJTVNUS19SRUdfQ1JFRyhyZWdzKQkobW9zdGVrX3JlYWQoKHJlZ3MpICsgTU9TVEVLX0NSRUcpKQorI2RlZmluZQlNU1RLX1JFR19TRUMocmVncykJTVNUS19HRVQocmVncyxTRUMpCisjZGVmaW5lCU1TVEtfUkVHX01JTihyZWdzKQlNU1RLX0dFVChyZWdzLE1JTikKKyNkZWZpbmUJTVNUS19SRUdfSE9VUihyZWdzKQlNU1RLX0dFVChyZWdzLEhPVVIpCisjZGVmaW5lCU1TVEtfUkVHX0RPVyhyZWdzKQlNU1RLX0dFVChyZWdzLERPVykKKyNkZWZpbmUJTVNUS19SRUdfRE9NKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsRE9NKQorI2RlZmluZQlNU1RLX1JFR19NT05USChyZWdzKQlNU1RLX0dFVChyZWdzLE1PTlRIKQorI2RlZmluZQlNU1RLX1JFR19ZRUFSKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsWUVBUikKKworI2RlZmluZQlNU1RLX1NFVF9SRUdfU0VDKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsU0VDLHZhbHVlKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfTUlOKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsTUlOLHZhbHVlKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfSE9VUihyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLEhPVVIsdmFsdWUpCisjZGVmaW5lCU1TVEtfU0VUX1JFR19ET1cocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxET1csdmFsdWUpCisjZGVmaW5lCU1TVEtfU0VUX1JFR19ET00ocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxET00sdmFsdWUpCisjZGVmaW5lCU1TVEtfU0VUX1JFR19NT05USChyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLE1PTlRILHZhbHVlKQorI2RlZmluZQlNU1RLX1NFVF9SRUdfWUVBUihyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLFlFQVIsdmFsdWUpCisKKworLyogVGhlIE1vc3RlayA0OHQwOCBjbG9jayBjaGlwLiBGb3VuZCBvbiBTdW40bSdzIEkgdGhpbmsuIEl0IGhhcyB0aGUKKyAqIHNhbWUgKGJhc2ljYWxseSkgbGF5b3V0IG9mIHRoZSA0OHQwMiBjaGlwIGV4Y2VwdCBmb3IgdGhlIGV4dHJhCisgKiBOVlJBTSBvbiBib2FyZCAoOCBLQiBhZ2FpbnN0IHRoZSA0OHQwMidzIDIgS0IpLgorICovCisjZGVmaW5lIE1PU1RFS180OFQwOF9PRkZTRVQJMHgwMDAwVUwJLyogTG93ZXIgTlZSQU0gcG9ydGlvbnMgKi8KKyNkZWZpbmUgTU9TVEVLXzQ4VDA4XzQ4VDAyCTB4MTgwMFVMCS8qIE9mZnNldCB0byA0OFQwMiBjaGlwICovCisKKy8qIFNVTjUgc3lzdGVtcyB1c3VhbGx5IGhhdmUgNDh0NTkgbW9kZWwgY2xvY2sgY2hpcHNldHMuICBCdXQgd2Uga2VlcCB0aGUgb2xkZXIKKyAqIGNsb2NrIGNoaXAgZGVmaW5pdGlvbnMgYXJvdW5kIGp1c3QgaW4gY2FzZS4KKyAqLworI2RlZmluZSBNT1NURUtfNDhUNTlfT0ZGU0VUCTB4MDAwMFVMCS8qIExvd2VyIE5WUkFNIHBvcnRpb25zICovCisjZGVmaW5lIE1PU1RFS180OFQ1OV80OFQwMgkweDE4MDBVTAkvKiBPZmZzZXQgdG8gNDhUMDIgY2hpcCAqLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9NT1NURUtfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbXNnYnVmLmgKaW5kZXggOGNlYzlhZC4uZWZjN2NiZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL21zZ2J1Zi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL21zZ2J1Zi5oCkBAIC0xLDcgKzEsNyBAQAotI2lmbmRlZiBfU1BBUkM2NF9NU0dCVUZfSAotI2RlZmluZSBfU1BBUkM2NF9NU0dCVUZfSAorI2lmbmRlZiBfU1BBUkNfTVNHQlVGX0gKKyNkZWZpbmUgX1NQQVJDX01TR0JVRl9ICiAKLS8qIAorLyoKICAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3Igc3BhcmM2NCBhcmNoaXRlY3R1cmUuCiAgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKICAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgpAQCAtMTEsMTMgKzExLDIwIEBACiAgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCiAgKi8KIAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjIGRlZmluZSBQQURESU5HKHgpCisjZWxzZQorIyBkZWZpbmUgUEFERElORyh4KSB1bnNpZ25lZCBpbnQgeDsKKyNlbmRpZgorCisKIHN0cnVjdCBtc3FpZDY0X2RzIHsKIAlzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKLQl1bnNpZ25lZCBpbnQgICBfX3BhZDE7CisJUEFERElORyhfX3BhZDEpCiAJX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLwotCXVuc2lnbmVkIGludCAgIF9fcGFkMjsKKwlQQURESU5HKF9fcGFkMikKIAlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCi0JdW5zaWduZWQgaW50ICAgX19wYWQzOworCVBBRERJTkcoX19wYWQzKQogCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KIAl1bnNpZ25lZCBsb25nICBtc2dfY2J5dGVzOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLwogCXVuc2lnbmVkIGxvbmcgIG1zZ19xbnVtOwkvKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gcXVldWUgKi8KQEAgLTI3LDUgKzM0LDUgQEAKIAl1bnNpZ25lZCBsb25nICBfX3VudXNlZDE7CiAJdW5zaWduZWQgbG9uZyAgX191bnVzZWQyOwogfTsKLQotI2VuZGlmIC8qIF9TUEFSQzY0X01TR0JVRl9IICovCisjdW5kZWYgUEFERElORworI2VuZGlmIC8qIF9TUEFSQ19NU0dCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL25hbWVpLmgKaW5kZXggMDY0NjEwMi4uZWZmOTQ0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWkuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9uYW1laS5oCkBAIC0xLDEzICsxLDggQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1zcGFyYy9uYW1laS5oCi0gKgotICogUm91dGluZXMgdG8gaGFuZGxlIGZhbW91cyAvdXNyL2duZW11bC9zKi4KLSAqIEluY2x1ZGVkIGZyb20gbGludXgvZnMvbmFtZWkuYwotICovCi0KLSNpZm5kZWYgX19TUEFSQ19OQU1FSV9ICi0jZGVmaW5lIF9fU1BBUkNfTkFNRUlfSAotCi0jZGVmaW5lIF9fZW11bF9wcmVmaXgoKSBOVUxMCi0KLSNlbmRpZiAvKiBfX1NQQVJDX05BTUVJX0ggKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX05BTUVJX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX05BTUVJX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9uYW1laV82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvbmFtZWlfMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9uYW1laV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWlfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ2MTAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWlfMzIuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWkuaAorICoKKyAqIFJvdXRpbmVzIHRvIGhhbmRsZSBmYW1vdXMgL3Vzci9nbmVtdWwvcyouCisgKiBJbmNsdWRlZCBmcm9tIGxpbnV4L2ZzL25hbWVpLmMKKyAqLworCisjaWZuZGVmIF9fU1BBUkNfTkFNRUlfSAorI2RlZmluZSBfX1NQQVJDX05BTUVJX0gKKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYgLyogX19TUEFSQ19OQU1FSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9uYW1laV82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWlfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmMxYjRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWlfNjQuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tc3BhcmM2NC9uYW1laS5oCisgKgorICogUm91dGluZXMgdG8gaGFuZGxlIGZhbW91cyAvdXNyL2duZW11bC9zKi4KKyAqIEluY2x1ZGVkIGZyb20gbGludXgvZnMvbmFtZWkuYworICovCisKKyNpZm5kZWYgX19TUEFSQzY0X05BTUVJX0gKKyNkZWZpbmUgX19TUEFSQzY0X05BTUVJX0gKKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYgLyogX19TUEFSQzY0X05BTUVJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL25zODczMDMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL25zODczMDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODZkZWZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbnM4NzMwMy5oCkBAIC0wLDAgKzEsMTE4IEBACisvKiBuczg3MzAzLmg6IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgRGVzY3JpcHRpb24gZm9yIHRoZQorICogICAgICAgICAgICBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODczMDMgKFN1cGVySU8pLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCisgKi8KKworI2lmbmRlZiBfU1BBUkNfTlM4NzMwM19ICisjZGVmaW5lIF9TUEFSQ19OUzg3MzAzX0ggMQorCisvKgorICogQ29udHJvbCBSZWdpc3RlciBJbmRleCBWYWx1ZXMKKyAqLworI2RlZmluZSBGRVIJMHgwMAorI2RlZmluZSBGQVIJMHgwMQorI2RlZmluZSBQVFIJMHgwMgorI2RlZmluZSBGQ1IJMHgwMworI2RlZmluZSBQQ1IJMHgwNAorI2RlZmluZSBLUlIJMHgwNQorI2RlZmluZSBQTUMJMHgwNgorI2RlZmluZSBUVVAJMHgwNworI2RlZmluZSBTSUQJMHgwOAorI2RlZmluZSBBU0MJMHgwOQorI2RlZmluZSBDUzBDRjAJMHgwYQorI2RlZmluZSBDUzBDRjEJMHgwYgorI2RlZmluZSBDUzFDRjAJMHgwYworI2RlZmluZSBDUzFDRjEJMHgwZAorCisvKiBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKEZFUikgYml0cyAqLworI2RlZmluZSBGRVJfRURNCQkweDEwCS8qIEVuY29kZWQgRHJpdmUgYW5kIE1vdG9yIHBpbiBpbmZvcm1hdGlvbiAgICovCisKKy8qIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKEZBUikgYml0cyAqLworI2RlZmluZSBGQVJfTFBUX01BU0sJMHgwMworI2RlZmluZSBGQVJfTFBUQgkweDAwCisjZGVmaW5lIEZBUl9MUFRBCTB4MDEKKyNkZWZpbmUgRkFSX0xQVEMJMHgwMgorCisvKiBQb3dlciBhbmQgVGVzdCBSZWdpc3RlciAoUFRSKSBiaXRzICovCisjZGVmaW5lIFBUUl9MUFRCX0lSUTcJMHgwOAorI2RlZmluZSBQVFJfTEVWRUxfSVJRCTB4ODAJLyogV2hlbiBub3QgRUNQL0VQUDogVXNlIGxldmVsIElSUSAgICAgICAgICAgKi8KKyNkZWZpbmUgUFRSX0xQVF9SRUdfRElSCTB4ODAJLyogV2hlbiBFQ1AvRVBQOiBMUFQgQ1RSIGNvbnRyb2xscyBkaXJlY3Rpb24gKi8KKwkJCQkvKiAgICAgICAgICAgICAgIG9mIHRoZSBwYXJhbGxlbCBwb3J0CSAgICAgKi8KKworLyogRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAoRkNSKSBiaXRzICovCisjZGVmaW5lIEZDUl9MREUJCTB4MTAJLyogTG9naWNhbCBEcml2ZSBFeGNoYW5nZSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkNSX1pXU19FTkEJMHgyMAkvKiBFbmFibGUgc2hvcnQgaG9zdCByZWFkL3dyaXRlIGluIEVDUC9FUFAgICAqLworCisvKiBQcmludGVyIENvbnRyb2wgUmVnaXN0ZXIgKFBDUikgYml0cyAqLworI2RlZmluZSBQQ1JfRVBQX0VOQUJMRQkweDAxCisjZGVmaW5lIFBDUl9FUFBfSUVFRQkweDAyCS8qIEVuYWJsZSBFUFAgVmVyc2lvbiAxLjkgKElFRUUgMTI4NCkgICAgICAgICovCisjZGVmaW5lIFBDUl9FQ1BfRU5BQkxFCTB4MDQKKyNkZWZpbmUgUENSX0VDUF9DTEtfRU5BCTB4MDgJLyogSWYgMCBFQ1AgQ2xvY2sgaXMgc3RvcHBlZCBvbiBQb3dlciBkb3duICAgKi8KKyNkZWZpbmUgUENSX0lSUV9QT0xBUgkweDIwCS8qIElmIDAgSVJRIGlzIGxldmVsIGhpZ2ggb3IgbmVnYXRpdmUgcHVsc2UsICovCisJCQkJLyogaWYgMSBwb2xhcml0eSBpcyBpbnZlcnRlZCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUENSX0lSUV9PRFJBSU4JMHg0MAkvKiBJZiAxLCBJUlEgaXMgb3BlbiBkcmFpbiAgICAgICAgICAgICAgICAgICAqLworCisvKiBUYXBlIFVBUlRzIGFuZCBQYXJhbGxlbCBQb3J0IENvbmZpZyBSZWdpc3RlciAoVFVQKSBiaXRzICovCisjZGVmaW5lIFRVUF9FUFBfVElNTwkweDAyCS8qIEVuYWJsZSBFUFAgdGltZW91dCBJUlEgICAgICAgICAgICAgICAgICAgICovCisKKy8qIEFkdmFuY2VkIFN1cGVySU8gQ29uZmlnIFJlZ2lzdGVyIChBU0MpIGJpdHMgKi8KKyNkZWZpbmUgQVNDX0xQVF9JUlE3CTB4MDEJLyogQWx3YXlzIHVzZSBJUlE3IGZvciBMUFQgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBU0NfRFJWMl9TRUwJMHgwMgkvKiBMb2dpY2FsIERyaXZlIEV4Y2hhbmdlIGNvbnRyb2xsZWQgYnkgVERSICAqLworCisjZGVmaW5lIEZFUl9SRVNFUlZFRAkweDAwCisjZGVmaW5lIEZBUl9SRVNFUlZFRAkweDAwCisjZGVmaW5lIFBUUl9SRVNFUlZFRAkweDczCisjZGVmaW5lIEZDUl9SRVNFUlZFRAkweGM0CisjZGVmaW5lIFBDUl9SRVNFUlZFRAkweDEwCisjZGVmaW5lIEtSUl9SRVNFUlZFRAkweDAwCisjZGVmaW5lIFBNQ19SRVNFUlZFRAkweDk4CisjZGVmaW5lIFRVUF9SRVNFUlZFRAkweGZiCisjZGVmaW5lIFNJUF9SRVNFUlZFRAkweDAwCisjZGVmaW5lIEFTQ19SRVNFUlZFRAkweDE4CisjZGVmaW5lIENTMENGMF9SRVNFUlZFRAkweDAwCisjZGVmaW5lIENTMENGMV9SRVNFUlZFRAkweDA4CisjZGVmaW5lIENTMUNGMF9SRVNFUlZFRAkweDAwCisjZGVmaW5lIENTMUNGMV9SRVNFUlZFRAkweDA4CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitleHRlcm4gc3BpbmxvY2tfdCBuczg3MzAzX2xvY2s7CisKK3N0YXRpYyBpbmxpbmUgaW50IG5zODczMDNfbW9kaWZ5KHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IGluZGV4LAorCQkJCSAgICAgdW5zaWduZWQgY2hhciBjbHIsIHVuc2lnbmVkIGNoYXIgc2V0KQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkW10gPSB7CisJCUZFUl9SRVNFUlZFRCwgRkFSX1JFU0VSVkVELCBQVFJfUkVTRVJWRUQsIEZDUl9SRVNFUlZFRCwKKwkJUENSX1JFU0VSVkVELCBLUlJfUkVTRVJWRUQsIFBNQ19SRVNFUlZFRCwgVFVQX1JFU0VSVkVELAorCQlTSVBfUkVTRVJWRUQsIEFTQ19SRVNFUlZFRCwgQ1MwQ0YwX1JFU0VSVkVELCBDUzBDRjFfUkVTRVJWRUQsCisJCUNTMUNGMF9SRVNFUlZFRCwgQ1MxQ0YxX1JFU0VSVkVECisJfTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisKKwlpZiAoaW5kZXggPiAweDBkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZuczg3MzAzX2xvY2ssIGZsYWdzKTsKKworCW91dGIoaW5kZXgsIHBvcnQpOworCXZhbHVlID0gaW5iKHBvcnQgKyAxKTsKKwl2YWx1ZSAmPSB+KHJlc2VydmVkW2luZGV4XSB8IGNscik7CisJdmFsdWUgfD0gc2V0OworCW91dGIodmFsdWUsIHBvcnQgKyAxKTsKKwlvdXRiKHZhbHVlLCBwb3J0ICsgMSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuczg3MzAzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogIShfU1BBUkNfTlM4NzMwM19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvb2ZfcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL29mX3BsYXRmb3JtLmgKaW5kZXggMzgzMzQzNS4uODUxZWI4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvb2ZfcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9vZl9wbGF0Zm9ybS5oCkBAIC0xLDI0ICsxLDggQEAKLSNpZm5kZWYgX0FTTV9TUEFSQ19PRl9QTEFURk9STV9ICi0jZGVmaW5lIF9BU01fU1BBUkNfT0ZfUExBVEZPUk1fSAotLyoKLSAqICAgIENvcHlyaWdodCAoQykgMjAwNiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycC4KLSAqCQkJIDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKiAgICBNb2RpZmllZCBmb3IgU3BhcmMgYnkgbWVyZ2luZyBwYXJ0cyBvZiBhc20tc3BhcmMvb2ZfZGV2aWNlLmgKLSAqCQlieSBTdGVwaGVuIFJvdGh3ZWxsCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLS8qIFRoaXMgaXMganVzdCBoZXJlIGR1cmluZyB0aGUgdHJhbnNpdGlvbiAqLwotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgZWJ1c19idXNfdHlwZTsKLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgc2J1c19idXNfdHlwZTsKLQotI2RlZmluZSBvZl9idXNfdHlwZQlvZl9wbGF0Zm9ybV9idXNfdHlwZQkvKiBmb3IgY29tcGF0aWJpbGl0eSAqLwotCi0jZW5kaWYJLyogX0FTTV9TUEFSQ19PRl9QTEFURk9STV9IICovCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19PRl9QTEFURk9STV9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19PRl9QTEFURk9STV9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvb2ZfcGxhdGZvcm1fNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL29mX3BsYXRmb3JtXzMyLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvb2ZfcGxhdGZvcm1fMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL29mX3BsYXRmb3JtXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzMzQzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL29mX3BsYXRmb3JtXzMyLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfQVNNX1NQQVJDX09GX1BMQVRGT1JNX0gKKyNkZWZpbmUgX0FTTV9TUEFSQ19PRl9QTEFURk9STV9ICisvKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA2IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwLgorICoJCQkgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqICAgIE1vZGlmaWVkIGZvciBTcGFyYyBieSBtZXJnaW5nIHBhcnRzIG9mIGFzbS1zcGFyYy9vZl9kZXZpY2UuaAorICoJCWJ5IFN0ZXBoZW4gUm90aHdlbGwKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworLyogVGhpcyBpcyBqdXN0IGhlcmUgZHVyaW5nIHRoZSB0cmFuc2l0aW9uICovCisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBlYnVzX2J1c190eXBlOworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBzYnVzX2J1c190eXBlOworCisjZGVmaW5lIG9mX2J1c190eXBlCW9mX3BsYXRmb3JtX2J1c190eXBlCS8qIGZvciBjb21wYXRpYmlsaXR5ICovCisKKyNlbmRpZgkvKiBfQVNNX1NQQVJDX09GX1BMQVRGT1JNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL29mX3BsYXRmb3JtXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9vZl9wbGF0Zm9ybV82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YWEwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9vZl9wbGF0Zm9ybV82NC5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX0FTTV9TUEFSQzY0X09GX1BMQVRGT1JNX0gKKyNkZWZpbmUgX0FTTV9TUEFSQzY0X09GX1BMQVRGT1JNX0gKKy8qCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQmVuamFtaW4gSGVycmVuc2NobWlkdCwgSUJNIENvcnAuCisgKgkJCSA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogICAgTW9kaWZpZWQgZm9yIFNwYXJjIGJ5IG1lcmdpbmcgcGFydHMgb2YgYXNtLXNwYXJjL29mX2RldmljZS5oCisgKgkJYnkgU3RlcGhlbiBSb3Rod2VsbAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisvKiBUaGlzIGlzIGp1c3QgaGVyZSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gKi8KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCitleHRlcm4gc3RydWN0IGJ1c190eXBlIGlzYV9idXNfdHlwZTsKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgZWJ1c19idXNfdHlwZTsKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgc2J1c19idXNfdHlwZTsKKworI2RlZmluZSBvZl9idXNfdHlwZQlvZl9wbGF0Zm9ybV9idXNfdHlwZQkvKiBmb3IgY29tcGF0aWJpbGl0eSAqLworCisjZW5kaWYJLyogX0FTTV9TUEFSQzY0X09GX1BMQVRGT1JNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL29wZW5wcm9tLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9vcGVucHJvbS5oCmluZGV4IGVkNGI2YmMuLjhjMzQ5ZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL29wZW5wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvb3BlbnByb20uaApAQCAtMSwyNTcgKzEsOCBAQAotI2lmbmRlZiBfX1NQQVJDX09QRU5QUk9NX0gKLSNkZWZpbmUgX19TUEFSQ19PUEVOUFJPTV9ICi0KLS8qIG9wZW5wcm9tLmg6ICBQcm9tIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgZm9yIGFjY2VzcyB0byB0aGUgT1BFTkJPT1QKLSAqICAgICAgICAgICAgICBwcm9tIHJvdXRpbmVzIGFuZCBkYXRhIGFyZWFzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2luY2x1ZGUgPGFzbS92YWRkcnMuaD4KLQotLyogRW1waXJpY2FsIGNvbnN0YW50cy4uLiAqLwotI2RlZmluZQlMSU5VWF9PUFBST01fTUFHSUMgICAgICAweDEwMDEwNDA3Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBWMCBwcm9tIGRldmljZSBvcGVyYXRpb25zLiAqLwotc3RydWN0IGxpbnV4X2Rldl92MF9mdW5jcyB7Ci0JaW50ICgqdjBfZGV2b3BlbikoY2hhciAqZGV2aWNlX3N0cik7Ci0JaW50ICgqdjBfZGV2Y2xvc2UpKGludCBkZXZfZGVzYyk7Ci0JaW50ICgqdjBfcmRibGtkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ibGtzLCBpbnQgYmxrX3N0LCBjaGFyICpidWYpOwotCWludCAoKnYwX3dyYmxrZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYmxrcywgaW50IGJsa19zdCwgY2hhciAqYnVmKTsKLQlpbnQgKCp2MF93cm5ldGRldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2J5dGVzLCBjaGFyICpidWYpOwotCWludCAoKnYwX3JkbmV0ZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGNoYXIgKmJ1Zik7Ci0JaW50ICgqdjBfcmRjaGFyZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGludCBkdW1teSwgY2hhciAqYnVmKTsKLQlpbnQgKCp2MF93cmNoYXJkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgaW50IGR1bW15LCBjaGFyICpidWYpOwotCWludCAoKnYwX3NlZWtkZXYpKGludCBkZXZfZGVzYywgbG9uZyBsb2dpY2FsX29mZnN0LCBpbnQgZnJvbSk7Ci19OwotCi0vKiBWMiBhbmQgbGF0ZXIgcHJvbSBkZXZpY2Ugb3BlcmF0aW9ucy4gKi8KLXN0cnVjdCBsaW51eF9kZXZfdjJfZnVuY3MgewotCWludCAoKnYyX2luc3QycGtnKShpbnQgZCk7CS8qIENvbnZlcnQgaWhhbmRsZSB0byBwaGFuZGxlICovCi0JY2hhciAqICgqdjJfZHVtYl9tZW1fYWxsb2MpKGNoYXIgKnZhLCB1bnNpZ25lZCBzeik7Ci0Jdm9pZCAoKnYyX2R1bWJfbWVtX2ZyZWUpKGNoYXIgKnZhLCB1bnNpZ25lZCBzeik7Ci0KLQkvKiBUbyBtYXAgZGV2aWNlcyBpbnRvIHZpcnR1YWwgSS9PIHNwYWNlLiAqLwotCWNoYXIgKiAoKnYyX2R1bWJfbW1hcCkoY2hhciAqdmlydGEsIGludCB3aGljaF9pbywgdW5zaWduZWQgcGFkZHIsIHVuc2lnbmVkIHN6KTsKLQl2b2lkICgqdjJfZHVtYl9tdW5tYXApKGNoYXIgKnZpcnRhLCB1bnNpZ25lZCBzaXplKTsKLQotCWludCAoKnYyX2Rldl9vcGVuKShjaGFyICpkZXZwYXRoKTsKLQl2b2lkICgqdjJfZGV2X2Nsb3NlKShpbnQgZCk7Ci0JaW50ICgqdjJfZGV2X3JlYWQpKGludCBkLCBjaGFyICpidWYsIGludCBuYnl0ZXMpOwotCWludCAoKnYyX2Rldl93cml0ZSkoaW50IGQsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7Ci0JaW50ICgqdjJfZGV2X3NlZWspKGludCBkLCBpbnQgaGksIGludCBsbyk7Ci0KLQkvKiBOZXZlciBpc3N1ZWQgKG11bHRpc3RhZ2UgbG9hZCBzdXBwb3J0KSAqLwotCXZvaWQgKCp2Ml93aGVlZTIpKHZvaWQpOwotCXZvaWQgKCp2Ml93aGVlZTMpKHZvaWQpOwotfTsKLQotc3RydWN0IGxpbnV4X21saXN0X3YwIHsKLQlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKnRoZXJlc19tb3JlOwotCWNoYXIgKnN0YXJ0X2FkcjsKLQl1bnNpZ25lZCBudW1fYnl0ZXM7Ci19OwotCi1zdHJ1Y3QgbGludXhfbWVtX3YwIHsKLQlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKip2MF90b3RwaHlzOwotCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqKnYwX3Byb21tYXA7Ci0Jc3RydWN0IGxpbnV4X21saXN0X3YwICoqdjBfYXZhaWxhYmxlOyAvKiBXaGF0IHdlIGNhbiB1c2UgKi8KLX07Ci0KLS8qIEFyZ3VtZW50cyBzZW50IHRvIHRoZSBrZXJuZWwgZnJvbSB0aGUgYm9vdCBwcm9tcHQuICovCi1zdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwIHsKLQljaGFyICphcmd2WzhdOwotCWNoYXIgYXJnc1sxMDBdOwotCWNoYXIgYm9vdF9kZXZbMl07Ci0JaW50IGJvb3RfZGV2X2N0cmw7Ci0JaW50IGJvb3RfZGV2X3VuaXQ7Ci0JaW50IGRldl9wYXJ0aXRpb247Ci0JY2hhciAqa2VybmVsX2ZpbGVfbmFtZTsKLQl2b2lkICphaWVlZTE7ICAgICAgICAgICAvKiBYWFggKi8KLX07Ci0KLS8qIFYyIGFuZCB1cCBib290IHRoaW5ncy4gKi8KLXN0cnVjdCBsaW51eF9ib290YXJnc192MiB7Ci0JY2hhciAqKmJvb3RwYXRoOwotCWNoYXIgKipib290YXJnczsKLQlpbnQgKmZkX3N0ZGluOwotCWludCAqZmRfc3Rkb3V0OwotfTsKLQotLyogVGhlIHRvcCBsZXZlbCBQUk9NIHZlY3Rvci4gKi8KLXN0cnVjdCBsaW51eF9yb212ZWMgewotCS8qIFZlcnNpb24gbnVtYmVycy4gKi8KLQl1bnNpZ25lZCBpbnQgcHZfbWFnaWNfY29va2llOwotCXVuc2lnbmVkIGludCBwdl9yb212ZXJzOwotCXVuc2lnbmVkIGludCBwdl9wbHVnaW5fcmV2aXNpb247Ci0JdW5zaWduZWQgaW50IHB2X3ByaW50cmV2OwotCi0JLyogVmVyc2lvbiAwIG1lbW9yeSBkZXNjcmlwdG9ycy4gKi8KLQlzdHJ1Y3QgbGludXhfbWVtX3YwIHB2X3YwbWVtOwotCi0JLyogTm9kZSBvcGVyYXRpb25zLiAqLwotCXN0cnVjdCBsaW51eF9ub2Rlb3BzICpwdl9ub2Rlb3BzOwotCi0JY2hhciAqKnB2X2Jvb3RzdHI7Ci0Jc3RydWN0IGxpbnV4X2Rldl92MF9mdW5jcyBwdl92MGRldm9wczsKLQotCWNoYXIgKnB2X3N0ZGluOwotCWNoYXIgKnB2X3N0ZG91dDsKLSNkZWZpbmUJUFJPTURFVl9LQkQJMAkJLyogaW5wdXQgZnJvbSBrZXlib2FyZCAqLwotI2RlZmluZQlQUk9NREVWX1NDUkVFTgkwCQkvKiBvdXRwdXQgdG8gc2NyZWVuICovCi0jZGVmaW5lCVBST01ERVZfVFRZQQkxCQkvKiBpbi9vdXQgdG8gdHR5YSAqLwotI2RlZmluZQlQUk9NREVWX1RUWUIJMgkJLyogaW4vb3V0IHRvIHR0eWIgKi8KLQotCS8qIEJsb2NraW5nIGdldGNoYXIvcHV0Y2hhci4gIE5PVCBSRUVOVFJBTlQhIChncnIpICovCi0JaW50ICgqcHZfZ2V0Y2hhcikodm9pZCk7Ci0Jdm9pZCAoKnB2X3B1dGNoYXIpKGludCBjaCk7Ci0KLQkvKiBOb24tYmxvY2tpbmcgdmFyaWFudHMuICovCi0JaW50ICgqcHZfbmJnZXRjaGFyKSh2b2lkKTsKLQlpbnQgKCpwdl9uYnB1dGNoYXIpKGludCBjaCk7Ci0KLQl2b2lkICgqcHZfcHV0c3RyKShjaGFyICpzdHIsIGludCBsZW4pOwotCi0JLyogTWlzY2VsbGFueS4gKi8KLQl2b2lkICgqcHZfcmVib290KShjaGFyICpib290c3RyKTsKLQl2b2lkICgqcHZfcHJpbnRmKShfX2NvbnN0X18gY2hhciAqZm10LCAuLi4pOwotCXZvaWQgKCpwdl9hYm9ydCkodm9pZCk7Ci0JX192b2xhdGlsZV9fIGludCAqcHZfdGlja3M7Ci0Jdm9pZCAoKnB2X2hhbHQpKHZvaWQpOwotCXZvaWQgKCoqcHZfc3luY2hvb2spKHZvaWQpOwotCi0JLyogRXZhbHVhdGUgYSBmb3J0aCBzdHJpbmcsIG5vdCBkaWZmZXJlbnQgcHJvdG8gZm9yIFYwIGFuZCBWMi0+dXAuICovCi0JdW5pb24gewotCQl2b2lkICgqdjBfZXZhbCkoaW50IGxlbiwgY2hhciAqc3RyKTsKLQkJdm9pZCAoKnYyX2V2YWwpKGNoYXIgKnN0cik7Ci0JfSBwdl9mb3J0aGV2YWw7Ci0KLQlzdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwICoqcHZfdjBib290YXJnczsKLQotCS8qIEdldCBldGhlciBhZGRyZXNzLiAqLwotCXVuc2lnbmVkIGludCAoKnB2X2VuYWRkcikoaW50IGQsIGNoYXIgKmVuYWRkcik7Ci0KLQlzdHJ1Y3QgbGludXhfYm9vdGFyZ3NfdjIgcHZfdjJib290YXJnczsKLQlzdHJ1Y3QgbGludXhfZGV2X3YyX2Z1bmNzIHB2X3YyZGV2b3BzOwotCi0JaW50IGZpbGxlclsxNV07Ci0KLQkvKiBUaGlzIG9uZSBpcyBzdW40Yy9zdW40IG9ubHkuICovCi0Jdm9pZCAoKnB2X3NldGN0eHQpKGludCBjdHh0LCBjaGFyICp2YSwgaW50IHBtZWcpOwotCi0JLyogUHJvbSB2ZXJzaW9uIDMgTXVsdGlwcm9jZXNzb3Igcm91dGluZXMuIFRoaXMgc3R1ZmYgaXMgY3JhenkuCi0JICogTm8gam9rZS4gQ2FsbGluZyB0aGVzZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGNwdSBwcm9iYWJseQotCSAqIGNyYXNoZXMgdGhlIG1hY2hpbmUsIGhhdmUgdG8gdGVzdCB0aGlzLiA6LSkKLQkgKi8KLQotCS8qIHYzX2NwdXN0YXJ0KCkgd2lsbCBzdGFydCB0aGUgY3B1ICd3aGljaGNwdScgaW4gbW11LWNvbnRleHQKLQkgKiAndGhpc2NvbnRleHQnIGV4ZWN1dGluZyBhdCBhZGRyZXNzICdwcm9nX2NvdW50ZXInCi0JICovCi0JaW50ICgqdjNfY3B1c3RhcnQpKHVuc2lnbmVkIGludCB3aGljaGNwdSwgaW50IGN0eHRibF9wdHIsCi0JCQkgICBpbnQgdGhpc2NvbnRleHQsIGNoYXIgKnByb2dfY291bnRlcik7Ci0KLQkvKiB2M19jcHVzdG9wKCkgd2lsbCBjYXVzZSBjcHUgJ3doaWNoY3B1JyB0byBzdG9wIGV4ZWN1dGluZwotCSAqIHVudGlsIGEgcmVzdW1lIGNwdSBjYWxsIGlzIG1hZGUuCi0JICovCi0JaW50ICgqdjNfY3B1c3RvcCkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKLQotCS8qIHYzX2NwdWlkbGUoKSB3aWxsIGlkbGUgY3B1ICd3aGljaGNwdScgdW50aWwgYSBzdG9wIG9yCi0JICogcmVzdW1lIGNwdSBjYWxsIGlzIG1hZGUuCi0JICovCi0JaW50ICgqdjNfY3B1aWRsZSkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKLQotCS8qIHYzX2NwdXJlc3VtZSgpIHdpbGwgcmVzdW1lIHByb2Nlc3NvciAnd2hpY2hjcHUnIGV4ZWN1dGluZwotCSAqIHN0YXJ0aW5nIHdpdGggd2hhdGV2ZXIgJ3BjJyBhbmQgJ25wYycgd2VyZSBsZWZ0IGF0IHRoZQotCSAqIGxhc3QgJ2lkbGUnIG9yICdzdG9wJyBjYWxsLgotCSAqLwotCWludCAoKnYzX2NwdXJlc3VtZSkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKLX07Ci0KLS8qIFJvdXRpbmVzIGZvciB0cmF2ZXJzaW5nIHRoZSBwcm9tIGRldmljZSB0cmVlLiAqLwotc3RydWN0IGxpbnV4X25vZGVvcHMgewotCWludCAoKm5vX25leHRub2RlKShpbnQgbm9kZSk7Ci0JaW50ICgqbm9fY2hpbGQpKGludCBub2RlKTsKLQlpbnQgKCpub19wcm9wbGVuKShpbnQgbm9kZSwgY2hhciAqbmFtZSk7Ci0JaW50ICgqbm9fZ2V0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCk7Ci0JaW50ICgqbm9fc2V0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgaW50IGxlbik7Ci0JY2hhciAqICgqbm9fbmV4dHByb3ApKGludCBub2RlLCBjaGFyICpuYW1lKTsKLX07Ci0KLS8qIE1vcmUgZnVuIFBST00gc3RydWN0dXJlcyBmb3IgZGV2aWNlIHByb2JpbmcuICovCi0jZGVmaW5lIFBST01SRUdfTUFYICAgICAxNgotI2RlZmluZSBQUk9NVkFERFJfTUFYICAgMTYKLSNkZWZpbmUgUFJPTUlOVFJfTUFYICAgIDE1Ci0KLXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyB7Ci0JdW5zaWduZWQgaW50IHdoaWNoX2lvOyAgICAgICAgIC8qIGlzIHRoaXMgaW4gT0JJTyBzcGFjZT8gKi8KLQl1bnNpZ25lZCBpbnQgcGh5c19hZGRyOyAgICAgICAgLyogVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyByZWdpc3RlciAqLwotCXVuc2lnbmVkIGludCByZWdfc2l6ZTsgICAgICAgICAvKiBIb3cgbWFueSBieXRlcyBkb2VzIHRoaXMgcmVnaXN0ZXIgdGFrZSB1cD8gKi8KLX07Ci0KLXN0cnVjdCBsaW51eF9wcm9tX2lycXMgewotCWludCBwcmk7ICAgIC8qIElSUSBwcmlvcml0eSAqLwotCWludCB2ZWN0b3I7IC8qIFRoaXMgaXMgZm9vYmFyLCB3aGF0IGRvZXMgaXQgZG8/ICovCi19OwotCi0vKiBFbGVtZW50IG9mIHRoZSAicmFuZ2VzIiB2ZWN0b3IgKi8KLXN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyB7Ci0JdW5zaWduZWQgaW50IG90X2NoaWxkX3NwYWNlOwotCXVuc2lnbmVkIGludCBvdF9jaGlsZF9iYXNlOwkJLyogQnVzIGZlZWxzIHRoaXMgKi8KLQl1bnNpZ25lZCBpbnQgb3RfcGFyZW50X3NwYWNlOwotCXVuc2lnbmVkIGludCBvdF9wYXJlbnRfYmFzZTsJCS8qIENQVSBsb29rcyBmcm9tIGhlcmUgKi8KLQl1bnNpZ25lZCBpbnQgb3Jfc2l6ZTsKLX07Ci0KLS8qIFJhbmdlcyBhbmQgcmVnIHByb3BlcnRpZXMgYXJlIGEgYml0IGRpZmZlcmVudCBmb3IgUENJLiAqLwotc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyB7Ci0JLyogCi0JICogV2UgZG9uJ3Qga25vdyB3aGF0IGluZm9ybWF0aW9uIHRoaXMgZmllbGQgY29udGFpbi4KLQkgKiBXZSBndWVzcywgUENJIGRldmljZSBmdW5jdGlvbiBpcyBpbiBiaXRzIDE1OjgKLQkgKiBTbywgLi4uCi0JICovCi0JdW5zaWduZWQgaW50IHdoaWNoX2lvOyAgLyogTGV0IGl0IGJlIHdoaWNoX2lvICovCi0KLQl1bnNpZ25lZCBpbnQgcGh5c19oaTsKLQl1bnNpZ25lZCBpbnQgcGh5c19sbzsKLQotCXVuc2lnbmVkIGludCBzaXplX2hpOwotCXVuc2lnbmVkIGludCBzaXplX2xvOwotfTsKLQotc3RydWN0IGxpbnV4X3Byb21fcGNpX3JhbmdlcyB7Ci0JdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfaGk7CS8qIE9ubHkgY2VydGFpbiBiaXRzIGFyZSBlbmNvZGVkIGhlcmUuICovCi0JdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfbWlkOwotCXVuc2lnbmVkIGludCBjaGlsZF9waHlzX2xvOwotCi0JdW5zaWduZWQgaW50IHBhcmVudF9waHlzX2hpOwotCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKLQotCXVuc2lnbmVkIGludCBzaXplX2hpOwotCXVuc2lnbmVkIGludCBzaXplX2xvOwotfTsKLQotc3RydWN0IGxpbnV4X3Byb21fcGNpX2Fzc2lnbmVkX2FkZHJlc3NlcyB7Ci0JdW5zaWduZWQgaW50IHdoaWNoX2lvOwotCi0JdW5zaWduZWQgaW50IHBoeXNfaGk7Ci0JdW5zaWduZWQgaW50IHBoeXNfbG87Ci0KLQl1bnNpZ25lZCBpbnQgc2l6ZV9oaTsKLQl1bnNpZ25lZCBpbnQgc2l6ZV9sbzsKLX07Ci0KLXN0cnVjdCBsaW51eF9wcm9tX2VidXNfcmFuZ2VzIHsKLQl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19oaTsKLQl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19sbzsKLQotCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19oaTsKLQl1bnNpZ25lZCBpbnQgcGFyZW50X3BoeXNfbWlkOwotCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKLQotCXVuc2lnbmVkIGludCBzaXplOwotfTsKLQotI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotCi0jZW5kaWYgLyogIShfX1NQQVJDX09QRU5QUk9NX0gpICovCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19PUEVOUFJPTV9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19PUEVOUFJPTV9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvb3BlbnByb21fNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL29wZW5wcm9tXzMyLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvb3BlbnByb21fMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL29wZW5wcm9tXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxNjQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL29wZW5wcm9tXzMyLmgKQEAgLTAsMCArMSwyNTUgQEAKKyNpZm5kZWYgX19TUEFSQ19PUEVOUFJPTV9ICisjZGVmaW5lIF9fU1BBUkNfT1BFTlBST01fSAorCisvKiBvcGVucHJvbS5oOiAgUHJvbSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIGZvciBhY2Nlc3MgdG8gdGhlIE9QRU5CT09UCisgKiAgICAgICAgICAgICAgcHJvbSByb3V0aW5lcyBhbmQgZGF0YSBhcmVhcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKy8qIEVtcGlyaWNhbCBjb25zdGFudHMuLi4gKi8KKyNkZWZpbmUJTElOVVhfT1BQUk9NX01BR0lDICAgICAgMHgxMDAxMDQwNworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogVjAgcHJvbSBkZXZpY2Ugb3BlcmF0aW9ucy4gKi8KK3N0cnVjdCBsaW51eF9kZXZfdjBfZnVuY3MgeworCWludCAoKnYwX2Rldm9wZW4pKGNoYXIgKmRldmljZV9zdHIpOworCWludCAoKnYwX2RldmNsb3NlKShpbnQgZGV2X2Rlc2MpOworCWludCAoKnYwX3JkYmxrZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYmxrcywgaW50IGJsa19zdCwgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF93cmJsa2RldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2Jsa3MsIGludCBibGtfc3QsIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfd3JuZXRkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF9yZG5ldGRldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2J5dGVzLCBjaGFyICpidWYpOworCWludCAoKnYwX3JkY2hhcmRldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2J5dGVzLCBpbnQgZHVtbXksIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfd3JjaGFyZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGludCBkdW1teSwgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF9zZWVrZGV2KShpbnQgZGV2X2Rlc2MsIGxvbmcgbG9naWNhbF9vZmZzdCwgaW50IGZyb20pOworfTsKKworLyogVjIgYW5kIGxhdGVyIHByb20gZGV2aWNlIG9wZXJhdGlvbnMuICovCitzdHJ1Y3QgbGludXhfZGV2X3YyX2Z1bmNzIHsKKwlpbnQgKCp2Ml9pbnN0MnBrZykoaW50IGQpOwkvKiBDb252ZXJ0IGloYW5kbGUgdG8gcGhhbmRsZSAqLworCWNoYXIgKiAoKnYyX2R1bWJfbWVtX2FsbG9jKShjaGFyICp2YSwgdW5zaWduZWQgc3opOworCXZvaWQgKCp2Ml9kdW1iX21lbV9mcmVlKShjaGFyICp2YSwgdW5zaWduZWQgc3opOworCisJLyogVG8gbWFwIGRldmljZXMgaW50byB2aXJ0dWFsIEkvTyBzcGFjZS4gKi8KKwljaGFyICogKCp2Ml9kdW1iX21tYXApKGNoYXIgKnZpcnRhLCBpbnQgd2hpY2hfaW8sIHVuc2lnbmVkIHBhZGRyLCB1bnNpZ25lZCBzeik7CisJdm9pZCAoKnYyX2R1bWJfbXVubWFwKShjaGFyICp2aXJ0YSwgdW5zaWduZWQgc2l6ZSk7CisKKwlpbnQgKCp2Ml9kZXZfb3BlbikoY2hhciAqZGV2cGF0aCk7CisJdm9pZCAoKnYyX2Rldl9jbG9zZSkoaW50IGQpOworCWludCAoKnYyX2Rldl9yZWFkKShpbnQgZCwgY2hhciAqYnVmLCBpbnQgbmJ5dGVzKTsKKwlpbnQgKCp2Ml9kZXZfd3JpdGUpKGludCBkLCBjaGFyICpidWYsIGludCBuYnl0ZXMpOworCWludCAoKnYyX2Rldl9zZWVrKShpbnQgZCwgaW50IGhpLCBpbnQgbG8pOworCisJLyogTmV2ZXIgaXNzdWVkIChtdWx0aXN0YWdlIGxvYWQgc3VwcG9ydCkgKi8KKwl2b2lkICgqdjJfd2hlZWUyKSh2b2lkKTsKKwl2b2lkICgqdjJfd2hlZWUzKSh2b2lkKTsKK307CisKK3N0cnVjdCBsaW51eF9tbGlzdF92MCB7CisJc3RydWN0IGxpbnV4X21saXN0X3YwICp0aGVyZXNfbW9yZTsKKwljaGFyICpzdGFydF9hZHI7CisJdW5zaWduZWQgbnVtX2J5dGVzOworfTsKKworc3RydWN0IGxpbnV4X21lbV92MCB7CisJc3RydWN0IGxpbnV4X21saXN0X3YwICoqdjBfdG90cGh5czsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKip2MF9wcm9tbWFwOworCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqKnYwX2F2YWlsYWJsZTsgLyogV2hhdCB3ZSBjYW4gdXNlICovCit9OworCisvKiBBcmd1bWVudHMgc2VudCB0byB0aGUga2VybmVsIGZyb20gdGhlIGJvb3QgcHJvbXB0LiAqLworc3RydWN0IGxpbnV4X2FyZ3VtZW50c192MCB7CisJY2hhciAqYXJndls4XTsKKwljaGFyIGFyZ3NbMTAwXTsKKwljaGFyIGJvb3RfZGV2WzJdOworCWludCBib290X2Rldl9jdHJsOworCWludCBib290X2Rldl91bml0OworCWludCBkZXZfcGFydGl0aW9uOworCWNoYXIgKmtlcm5lbF9maWxlX25hbWU7CisJdm9pZCAqYWllZWUxOyAgICAgICAgICAgLyogWFhYICovCit9OworCisvKiBWMiBhbmQgdXAgYm9vdCB0aGluZ3MuICovCitzdHJ1Y3QgbGludXhfYm9vdGFyZ3NfdjIgeworCWNoYXIgKipib290cGF0aDsKKwljaGFyICoqYm9vdGFyZ3M7CisJaW50ICpmZF9zdGRpbjsKKwlpbnQgKmZkX3N0ZG91dDsKK307CisKKy8qIFRoZSB0b3AgbGV2ZWwgUFJPTSB2ZWN0b3IuICovCitzdHJ1Y3QgbGludXhfcm9tdmVjIHsKKwkvKiBWZXJzaW9uIG51bWJlcnMuICovCisJdW5zaWduZWQgaW50IHB2X21hZ2ljX2Nvb2tpZTsKKwl1bnNpZ25lZCBpbnQgcHZfcm9tdmVyczsKKwl1bnNpZ25lZCBpbnQgcHZfcGx1Z2luX3JldmlzaW9uOworCXVuc2lnbmVkIGludCBwdl9wcmludHJldjsKKworCS8qIFZlcnNpb24gMCBtZW1vcnkgZGVzY3JpcHRvcnMuICovCisJc3RydWN0IGxpbnV4X21lbV92MCBwdl92MG1lbTsKKworCS8qIE5vZGUgb3BlcmF0aW9ucy4gKi8KKwlzdHJ1Y3QgbGludXhfbm9kZW9wcyAqcHZfbm9kZW9wczsKKworCWNoYXIgKipwdl9ib290c3RyOworCXN0cnVjdCBsaW51eF9kZXZfdjBfZnVuY3MgcHZfdjBkZXZvcHM7CisKKwljaGFyICpwdl9zdGRpbjsKKwljaGFyICpwdl9zdGRvdXQ7CisjZGVmaW5lCVBST01ERVZfS0JECTAJCS8qIGlucHV0IGZyb20ga2V5Ym9hcmQgKi8KKyNkZWZpbmUJUFJPTURFVl9TQ1JFRU4JMAkJLyogb3V0cHV0IHRvIHNjcmVlbiAqLworI2RlZmluZQlQUk9NREVWX1RUWUEJMQkJLyogaW4vb3V0IHRvIHR0eWEgKi8KKyNkZWZpbmUJUFJPTURFVl9UVFlCCTIJCS8qIGluL291dCB0byB0dHliICovCisKKwkvKiBCbG9ja2luZyBnZXRjaGFyL3B1dGNoYXIuICBOT1QgUkVFTlRSQU5UISAoZ3JyKSAqLworCWludCAoKnB2X2dldGNoYXIpKHZvaWQpOworCXZvaWQgKCpwdl9wdXRjaGFyKShpbnQgY2gpOworCisJLyogTm9uLWJsb2NraW5nIHZhcmlhbnRzLiAqLworCWludCAoKnB2X25iZ2V0Y2hhcikodm9pZCk7CisJaW50ICgqcHZfbmJwdXRjaGFyKShpbnQgY2gpOworCisJdm9pZCAoKnB2X3B1dHN0cikoY2hhciAqc3RyLCBpbnQgbGVuKTsKKworCS8qIE1pc2NlbGxhbnkuICovCisJdm9pZCAoKnB2X3JlYm9vdCkoY2hhciAqYm9vdHN0cik7CisJdm9pZCAoKnB2X3ByaW50ZikoX19jb25zdF9fIGNoYXIgKmZtdCwgLi4uKTsKKwl2b2lkICgqcHZfYWJvcnQpKHZvaWQpOworCV9fdm9sYXRpbGVfXyBpbnQgKnB2X3RpY2tzOworCXZvaWQgKCpwdl9oYWx0KSh2b2lkKTsKKwl2b2lkICgqKnB2X3N5bmNob29rKSh2b2lkKTsKKworCS8qIEV2YWx1YXRlIGEgZm9ydGggc3RyaW5nLCBub3QgZGlmZmVyZW50IHByb3RvIGZvciBWMCBhbmQgVjItPnVwLiAqLworCXVuaW9uIHsKKwkJdm9pZCAoKnYwX2V2YWwpKGludCBsZW4sIGNoYXIgKnN0cik7CisJCXZvaWQgKCp2Ml9ldmFsKShjaGFyICpzdHIpOworCX0gcHZfZm9ydGhldmFsOworCisJc3RydWN0IGxpbnV4X2FyZ3VtZW50c192MCAqKnB2X3YwYm9vdGFyZ3M7CisKKwkvKiBHZXQgZXRoZXIgYWRkcmVzcy4gKi8KKwl1bnNpZ25lZCBpbnQgKCpwdl9lbmFkZHIpKGludCBkLCBjaGFyICplbmFkZHIpOworCisJc3RydWN0IGxpbnV4X2Jvb3RhcmdzX3YyIHB2X3YyYm9vdGFyZ3M7CisJc3RydWN0IGxpbnV4X2Rldl92Ml9mdW5jcyBwdl92MmRldm9wczsKKworCWludCBmaWxsZXJbMTVdOworCisJLyogVGhpcyBvbmUgaXMgc3VuNGMvc3VuNCBvbmx5LiAqLworCXZvaWQgKCpwdl9zZXRjdHh0KShpbnQgY3R4dCwgY2hhciAqdmEsIGludCBwbWVnKTsKKworCS8qIFByb20gdmVyc2lvbiAzIE11bHRpcHJvY2Vzc29yIHJvdXRpbmVzLiBUaGlzIHN0dWZmIGlzIGNyYXp5LgorCSAqIE5vIGpva2UuIENhbGxpbmcgdGhlc2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBjcHUgcHJvYmFibHkKKwkgKiBjcmFzaGVzIHRoZSBtYWNoaW5lLCBoYXZlIHRvIHRlc3QgdGhpcy4gOi0pCisJICovCisKKwkvKiB2M19jcHVzdGFydCgpIHdpbGwgc3RhcnQgdGhlIGNwdSAnd2hpY2hjcHUnIGluIG1tdS1jb250ZXh0CisJICogJ3RoaXNjb250ZXh0JyBleGVjdXRpbmcgYXQgYWRkcmVzcyAncHJvZ19jb3VudGVyJworCSAqLworCWludCAoKnYzX2NwdXN0YXJ0KSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUsIGludCBjdHh0YmxfcHRyLAorCQkJICAgaW50IHRoaXNjb250ZXh0LCBjaGFyICpwcm9nX2NvdW50ZXIpOworCisJLyogdjNfY3B1c3RvcCgpIHdpbGwgY2F1c2UgY3B1ICd3aGljaGNwdScgdG8gc3RvcCBleGVjdXRpbmcKKwkgKiB1bnRpbCBhIHJlc3VtZSBjcHUgY2FsbCBpcyBtYWRlLgorCSAqLworCWludCAoKnYzX2NwdXN0b3ApKHVuc2lnbmVkIGludCB3aGljaGNwdSk7CisKKwkvKiB2M19jcHVpZGxlKCkgd2lsbCBpZGxlIGNwdSAnd2hpY2hjcHUnIHVudGlsIGEgc3RvcCBvcgorCSAqIHJlc3VtZSBjcHUgY2FsbCBpcyBtYWRlLgorCSAqLworCWludCAoKnYzX2NwdWlkbGUpKHVuc2lnbmVkIGludCB3aGljaGNwdSk7CisKKwkvKiB2M19jcHVyZXN1bWUoKSB3aWxsIHJlc3VtZSBwcm9jZXNzb3IgJ3doaWNoY3B1JyBleGVjdXRpbmcKKwkgKiBzdGFydGluZyB3aXRoIHdoYXRldmVyICdwYycgYW5kICducGMnIHdlcmUgbGVmdCBhdCB0aGUKKwkgKiBsYXN0ICdpZGxlJyBvciAnc3RvcCcgY2FsbC4KKwkgKi8KKwlpbnQgKCp2M19jcHVyZXN1bWUpKHVuc2lnbmVkIGludCB3aGljaGNwdSk7Cit9OworCisvKiBSb3V0aW5lcyBmb3IgdHJhdmVyc2luZyB0aGUgcHJvbSBkZXZpY2UgdHJlZS4gKi8KK3N0cnVjdCBsaW51eF9ub2Rlb3BzIHsKKwlpbnQgKCpub19uZXh0bm9kZSkoaW50IG5vZGUpOworCWludCAoKm5vX2NoaWxkKShpbnQgbm9kZSk7CisJaW50ICgqbm9fcHJvcGxlbikoaW50IG5vZGUsIGNoYXIgKm5hbWUpOworCWludCAoKm5vX2dldHByb3ApKGludCBub2RlLCBjaGFyICpuYW1lLCBjaGFyICp2YWwpOworCWludCAoKm5vX3NldHByb3ApKGludCBub2RlLCBjaGFyICpuYW1lLCBjaGFyICp2YWwsIGludCBsZW4pOworCWNoYXIgKiAoKm5vX25leHRwcm9wKShpbnQgbm9kZSwgY2hhciAqbmFtZSk7Cit9OworCisvKiBNb3JlIGZ1biBQUk9NIHN0cnVjdHVyZXMgZm9yIGRldmljZSBwcm9iaW5nLiAqLworI2RlZmluZSBQUk9NUkVHX01BWCAgICAgMTYKKyNkZWZpbmUgUFJPTVZBRERSX01BWCAgIDE2CisjZGVmaW5lIFBST01JTlRSX01BWCAgICAxNQorCitzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgeworCXVuc2lnbmVkIGludCB3aGljaF9pbzsgICAgICAgICAvKiBpcyB0aGlzIGluIE9CSU8gc3BhY2U/ICovCisJdW5zaWduZWQgaW50IHBoeXNfYWRkcjsgICAgICAgIC8qIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgcmVnX3NpemU7ICAgICAgICAgLyogSG93IG1hbnkgYnl0ZXMgZG9lcyB0aGlzIHJlZ2lzdGVyIHRha2UgdXA/ICovCit9OworCitzdHJ1Y3QgbGludXhfcHJvbV9pcnFzIHsKKwlpbnQgcHJpOyAgICAvKiBJUlEgcHJpb3JpdHkgKi8KKwlpbnQgdmVjdG9yOyAvKiBUaGlzIGlzIGZvb2Jhciwgd2hhdCBkb2VzIGl0IGRvPyAqLworfTsKKworLyogRWxlbWVudCBvZiB0aGUgInJhbmdlcyIgdmVjdG9yICovCitzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgeworCXVuc2lnbmVkIGludCBvdF9jaGlsZF9zcGFjZTsKKwl1bnNpZ25lZCBpbnQgb3RfY2hpbGRfYmFzZTsJCS8qIEJ1cyBmZWVscyB0aGlzICovCisJdW5zaWduZWQgaW50IG90X3BhcmVudF9zcGFjZTsKKwl1bnNpZ25lZCBpbnQgb3RfcGFyZW50X2Jhc2U7CQkvKiBDUFUgbG9va3MgZnJvbSBoZXJlICovCisJdW5zaWduZWQgaW50IG9yX3NpemU7Cit9OworCisvKiBSYW5nZXMgYW5kIHJlZyBwcm9wZXJ0aWVzIGFyZSBhIGJpdCBkaWZmZXJlbnQgZm9yIFBDSS4gKi8KK3N0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMgeworCS8qCisJICogV2UgZG9uJ3Qga25vdyB3aGF0IGluZm9ybWF0aW9uIHRoaXMgZmllbGQgY29udGFpbi4KKwkgKiBXZSBndWVzcywgUENJIGRldmljZSBmdW5jdGlvbiBpcyBpbiBiaXRzIDE1OjgKKwkgKiBTbywgLi4uCisJICovCisJdW5zaWduZWQgaW50IHdoaWNoX2lvOyAgLyogTGV0IGl0IGJlIHdoaWNoX2lvICovCisKKwl1bnNpZ25lZCBpbnQgcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBzaXplX2hpOworCXVuc2lnbmVkIGludCBzaXplX2xvOworfTsKKworc3RydWN0IGxpbnV4X3Byb21fcGNpX3JhbmdlcyB7CisJdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfaGk7CS8qIE9ubHkgY2VydGFpbiBiaXRzIGFyZSBlbmNvZGVkIGhlcmUuICovCisJdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfbWlkOworCXVuc2lnbmVkIGludCBjaGlsZF9waHlzX2xvOworCisJdW5zaWduZWQgaW50IHBhcmVudF9waHlzX2hpOworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBzaXplX2hpOworCXVuc2lnbmVkIGludCBzaXplX2xvOworfTsKKworc3RydWN0IGxpbnV4X3Byb21fcGNpX2Fzc2lnbmVkX2FkZHJlc3NlcyB7CisJdW5zaWduZWQgaW50IHdoaWNoX2lvOworCisJdW5zaWduZWQgaW50IHBoeXNfaGk7CisJdW5zaWduZWQgaW50IHBoeXNfbG87CisKKwl1bnNpZ25lZCBpbnQgc2l6ZV9oaTsKKwl1bnNpZ25lZCBpbnQgc2l6ZV9sbzsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tX2VidXNfcmFuZ2VzIHsKKwl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgcGFyZW50X3BoeXNfbWlkOworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfX1NQQVJDX09QRU5QUk9NX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9vcGVucHJvbV82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvb3BlbnByb21fNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjllNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvb3BlbnByb21fNjQuaApAQCAtMCwwICsxLDI4MCBAQAorI2lmbmRlZiBfX1NQQVJDNjRfT1BFTlBST01fSAorI2RlZmluZSBfX1NQQVJDNjRfT1BFTlBST01fSAorCisvKiBvcGVucHJvbS5oOiAgUHJvbSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIGZvciBhY2Nlc3MgdG8gdGhlIE9QRU5CT09UCisgKiAgICAgICAgICAgICAgcHJvbSByb3V0aW5lcyBhbmQgZGF0YSBhcmVhcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBWMCBwcm9tIGRldmljZSBvcGVyYXRpb25zLiAqLworc3RydWN0IGxpbnV4X2Rldl92MF9mdW5jcyB7CisJaW50ICgqdjBfZGV2b3BlbikoY2hhciAqZGV2aWNlX3N0cik7CisJaW50ICgqdjBfZGV2Y2xvc2UpKGludCBkZXZfZGVzYyk7CisJaW50ICgqdjBfcmRibGtkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ibGtzLCBpbnQgYmxrX3N0LCBjaGFyICpidWYpOworCWludCAoKnYwX3dyYmxrZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYmxrcywgaW50IGJsa19zdCwgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF93cm5ldGRldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2J5dGVzLCBjaGFyICpidWYpOworCWludCAoKnYwX3JkbmV0ZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfcmRjaGFyZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGludCBkdW1teSwgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF93cmNoYXJkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgaW50IGR1bW15LCBjaGFyICpidWYpOworCWludCAoKnYwX3NlZWtkZXYpKGludCBkZXZfZGVzYywgbG9uZyBsb2dpY2FsX29mZnN0LCBpbnQgZnJvbSk7Cit9OworCisvKiBWMiBhbmQgbGF0ZXIgcHJvbSBkZXZpY2Ugb3BlcmF0aW9ucy4gKi8KK3N0cnVjdCBsaW51eF9kZXZfdjJfZnVuY3MgeworCWludCAoKnYyX2luc3QycGtnKShpbnQgZCk7CS8qIENvbnZlcnQgaWhhbmRsZSB0byBwaGFuZGxlICovCisJY2hhciAqICgqdjJfZHVtYl9tZW1fYWxsb2MpKGNoYXIgKnZhLCB1bnNpZ25lZCBzeik7CisJdm9pZCAoKnYyX2R1bWJfbWVtX2ZyZWUpKGNoYXIgKnZhLCB1bnNpZ25lZCBzeik7CisKKwkvKiBUbyBtYXAgZGV2aWNlcyBpbnRvIHZpcnR1YWwgSS9PIHNwYWNlLiAqLworCWNoYXIgKiAoKnYyX2R1bWJfbW1hcCkoY2hhciAqdmlydGEsIGludCB3aGljaF9pbywgdW5zaWduZWQgcGFkZHIsIHVuc2lnbmVkIHN6KTsKKwl2b2lkICgqdjJfZHVtYl9tdW5tYXApKGNoYXIgKnZpcnRhLCB1bnNpZ25lZCBzaXplKTsKKworCWludCAoKnYyX2Rldl9vcGVuKShjaGFyICpkZXZwYXRoKTsKKwl2b2lkICgqdjJfZGV2X2Nsb3NlKShpbnQgZCk7CisJaW50ICgqdjJfZGV2X3JlYWQpKGludCBkLCBjaGFyICpidWYsIGludCBuYnl0ZXMpOworCWludCAoKnYyX2Rldl93cml0ZSkoaW50IGQsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7CisJaW50ICgqdjJfZGV2X3NlZWspKGludCBkLCBpbnQgaGksIGludCBsbyk7CisKKwkvKiBOZXZlciBpc3N1ZWQgKG11bHRpc3RhZ2UgbG9hZCBzdXBwb3J0KSAqLworCXZvaWQgKCp2Ml93aGVlZTIpKHZvaWQpOworCXZvaWQgKCp2Ml93aGVlZTMpKHZvaWQpOworfTsKKworc3RydWN0IGxpbnV4X21saXN0X3YwIHsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKnRoZXJlc19tb3JlOworCXVuc2lnbmVkIHN0YXJ0X2FkcjsKKwl1bnNpZ25lZCBudW1fYnl0ZXM7Cit9OworCitzdHJ1Y3QgbGludXhfbWVtX3YwIHsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKip2MF90b3RwaHlzOworCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqKnYwX3Byb21tYXA7CisJc3RydWN0IGxpbnV4X21saXN0X3YwICoqdjBfYXZhaWxhYmxlOyAvKiBXaGF0IHdlIGNhbiB1c2UgKi8KK307CisKKy8qIEFyZ3VtZW50cyBzZW50IHRvIHRoZSBrZXJuZWwgZnJvbSB0aGUgYm9vdCBwcm9tcHQuICovCitzdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwIHsKKwljaGFyICphcmd2WzhdOworCWNoYXIgYXJnc1sxMDBdOworCWNoYXIgYm9vdF9kZXZbMl07CisJaW50IGJvb3RfZGV2X2N0cmw7CisJaW50IGJvb3RfZGV2X3VuaXQ7CisJaW50IGRldl9wYXJ0aXRpb247CisJY2hhciAqa2VybmVsX2ZpbGVfbmFtZTsKKwl2b2lkICphaWVlZTE7ICAgICAgICAgICAvKiBYWFggKi8KK307CisKKy8qIFYyIGFuZCB1cCBib290IHRoaW5ncy4gKi8KK3N0cnVjdCBsaW51eF9ib290YXJnc192MiB7CisJY2hhciAqKmJvb3RwYXRoOworCWNoYXIgKipib290YXJnczsKKwlpbnQgKmZkX3N0ZGluOworCWludCAqZmRfc3Rkb3V0OworfTsKKworLyogVGhlIHRvcCBsZXZlbCBQUk9NIHZlY3Rvci4gKi8KK3N0cnVjdCBsaW51eF9yb212ZWMgeworCS8qIFZlcnNpb24gbnVtYmVycy4gKi8KKwl1bnNpZ25lZCBpbnQgcHZfbWFnaWNfY29va2llOworCXVuc2lnbmVkIGludCBwdl9yb212ZXJzOworCXVuc2lnbmVkIGludCBwdl9wbHVnaW5fcmV2aXNpb247CisJdW5zaWduZWQgaW50IHB2X3ByaW50cmV2OworCisJLyogVmVyc2lvbiAwIG1lbW9yeSBkZXNjcmlwdG9ycy4gKi8KKwlzdHJ1Y3QgbGludXhfbWVtX3YwIHB2X3YwbWVtOworCisJLyogTm9kZSBvcGVyYXRpb25zLiAqLworCXN0cnVjdCBsaW51eF9ub2Rlb3BzICpwdl9ub2Rlb3BzOworCisJY2hhciAqKnB2X2Jvb3RzdHI7CisJc3RydWN0IGxpbnV4X2Rldl92MF9mdW5jcyBwdl92MGRldm9wczsKKworCWNoYXIgKnB2X3N0ZGluOworCWNoYXIgKnB2X3N0ZG91dDsKKyNkZWZpbmUJUFJPTURFVl9LQkQJMAkJLyogaW5wdXQgZnJvbSBrZXlib2FyZCAqLworI2RlZmluZQlQUk9NREVWX1NDUkVFTgkwCQkvKiBvdXRwdXQgdG8gc2NyZWVuICovCisjZGVmaW5lCVBST01ERVZfVFRZQQkxCQkvKiBpbi9vdXQgdG8gdHR5YSAqLworI2RlZmluZQlQUk9NREVWX1RUWUIJMgkJLyogaW4vb3V0IHRvIHR0eWIgKi8KKworCS8qIEJsb2NraW5nIGdldGNoYXIvcHV0Y2hhci4gIE5PVCBSRUVOVFJBTlQhIChncnIpICovCisJaW50ICgqcHZfZ2V0Y2hhcikodm9pZCk7CisJdm9pZCAoKnB2X3B1dGNoYXIpKGludCBjaCk7CisKKwkvKiBOb24tYmxvY2tpbmcgdmFyaWFudHMuICovCisJaW50ICgqcHZfbmJnZXRjaGFyKSh2b2lkKTsKKwlpbnQgKCpwdl9uYnB1dGNoYXIpKGludCBjaCk7CisKKwl2b2lkICgqcHZfcHV0c3RyKShjaGFyICpzdHIsIGludCBsZW4pOworCisJLyogTWlzY2VsbGFueS4gKi8KKwl2b2lkICgqcHZfcmVib290KShjaGFyICpib290c3RyKTsKKwl2b2lkICgqcHZfcHJpbnRmKShfX2NvbnN0X18gY2hhciAqZm10LCAuLi4pOworCXZvaWQgKCpwdl9hYm9ydCkodm9pZCk7CisJX192b2xhdGlsZV9fIGludCAqcHZfdGlja3M7CisJdm9pZCAoKnB2X2hhbHQpKHZvaWQpOworCXZvaWQgKCoqcHZfc3luY2hvb2spKHZvaWQpOworCisJLyogRXZhbHVhdGUgYSBmb3J0aCBzdHJpbmcsIG5vdCBkaWZmZXJlbnQgcHJvdG8gZm9yIFYwIGFuZCBWMi0+dXAuICovCisJdW5pb24geworCQl2b2lkICgqdjBfZXZhbCkoaW50IGxlbiwgY2hhciAqc3RyKTsKKwkJdm9pZCAoKnYyX2V2YWwpKGNoYXIgKnN0cik7CisJfSBwdl9mb3J0aGV2YWw7CisKKwlzdHJ1Y3QgbGludXhfYXJndW1lbnRzX3YwICoqcHZfdjBib290YXJnczsKKworCS8qIEdldCBldGhlciBhZGRyZXNzLiAqLworCXVuc2lnbmVkIGludCAoKnB2X2VuYWRkcikoaW50IGQsIGNoYXIgKmVuYWRkcik7CisKKwlzdHJ1Y3QgbGludXhfYm9vdGFyZ3NfdjIgcHZfdjJib290YXJnczsKKwlzdHJ1Y3QgbGludXhfZGV2X3YyX2Z1bmNzIHB2X3YyZGV2b3BzOworCisJaW50IGZpbGxlclsxNV07CisKKwkvKiBUaGlzIG9uZSBpcyBzdW40Yy9zdW40IG9ubHkuICovCisJdm9pZCAoKnB2X3NldGN0eHQpKGludCBjdHh0LCBjaGFyICp2YSwgaW50IHBtZWcpOworCisJLyogUHJvbSB2ZXJzaW9uIDMgTXVsdGlwcm9jZXNzb3Igcm91dGluZXMuIFRoaXMgc3R1ZmYgaXMgY3JhenkuCisJICogTm8gam9rZS4gQ2FsbGluZyB0aGVzZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGNwdSBwcm9iYWJseQorCSAqIGNyYXNoZXMgdGhlIG1hY2hpbmUsIGhhdmUgdG8gdGVzdCB0aGlzLiA6LSkKKwkgKi8KKworCS8qIHYzX2NwdXN0YXJ0KCkgd2lsbCBzdGFydCB0aGUgY3B1ICd3aGljaGNwdScgaW4gbW11LWNvbnRleHQKKwkgKiAndGhpc2NvbnRleHQnIGV4ZWN1dGluZyBhdCBhZGRyZXNzICdwcm9nX2NvdW50ZXInCisJICovCisJaW50ICgqdjNfY3B1c3RhcnQpKHVuc2lnbmVkIGludCB3aGljaGNwdSwgaW50IGN0eHRibF9wdHIsCisJCQkgICBpbnQgdGhpc2NvbnRleHQsIGNoYXIgKnByb2dfY291bnRlcik7CisKKwkvKiB2M19jcHVzdG9wKCkgd2lsbCBjYXVzZSBjcHUgJ3doaWNoY3B1JyB0byBzdG9wIGV4ZWN1dGluZworCSAqIHVudGlsIGEgcmVzdW1lIGNwdSBjYWxsIGlzIG1hZGUuCisJICovCisJaW50ICgqdjNfY3B1c3RvcCkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKKworCS8qIHYzX2NwdWlkbGUoKSB3aWxsIGlkbGUgY3B1ICd3aGljaGNwdScgdW50aWwgYSBzdG9wIG9yCisJICogcmVzdW1lIGNwdSBjYWxsIGlzIG1hZGUuCisJICovCisJaW50ICgqdjNfY3B1aWRsZSkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKKworCS8qIHYzX2NwdXJlc3VtZSgpIHdpbGwgcmVzdW1lIHByb2Nlc3NvciAnd2hpY2hjcHUnIGV4ZWN1dGluZworCSAqIHN0YXJ0aW5nIHdpdGggd2hhdGV2ZXIgJ3BjJyBhbmQgJ25wYycgd2VyZSBsZWZ0IGF0IHRoZQorCSAqIGxhc3QgJ2lkbGUnIG9yICdzdG9wJyBjYWxsLgorCSAqLworCWludCAoKnYzX2NwdXJlc3VtZSkodW5zaWduZWQgaW50IHdoaWNoY3B1KTsKK307CisKKy8qIFJvdXRpbmVzIGZvciB0cmF2ZXJzaW5nIHRoZSBwcm9tIGRldmljZSB0cmVlLiAqLworc3RydWN0IGxpbnV4X25vZGVvcHMgeworCWludCAoKm5vX25leHRub2RlKShpbnQgbm9kZSk7CisJaW50ICgqbm9fY2hpbGQpKGludCBub2RlKTsKKwlpbnQgKCpub19wcm9wbGVuKShpbnQgbm9kZSwgY2hhciAqbmFtZSk7CisJaW50ICgqbm9fZ2V0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCk7CisJaW50ICgqbm9fc2V0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgaW50IGxlbik7CisJY2hhciAqICgqbm9fbmV4dHByb3ApKGludCBub2RlLCBjaGFyICpuYW1lKTsKK307CisKKy8qIE1vcmUgZnVuIFBST00gc3RydWN0dXJlcyBmb3IgZGV2aWNlIHByb2JpbmcuICovCisjZGVmaW5lIFBST01SRUdfTUFYICAgICAyNAorI2RlZmluZSBQUk9NVkFERFJfTUFYICAgMTYKKyNkZWZpbmUgUFJPTUlOVFJfTUFYICAgIDMyCisKK3N0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyB7CisJdW5zaWduZWQgd2hpY2hfaW87CS8qIGhpIHBhcnQgb2YgcGh5c2ljYWwgYWRkcmVzcwkJCSovCisJdW5zaWduZWQgcGh5c19hZGRyOwkvKiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGlzIHJlZ2lzdGVyCSovCisJaW50IHJlZ19zaXplOwkJLyogSG93IG1hbnkgYnl0ZXMgZG9lcyB0aGlzIHJlZ2lzdGVyIHRha2UgdXA/CSovCit9OworCitzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyB7CisJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7CisJdW5zaWduZWQgbG9uZyByZWdfc2l6ZTsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tX2lycXMgeworCWludCBwcmk7ICAgIC8qIElSUSBwcmlvcml0eSAqLworCWludCB2ZWN0b3I7IC8qIFRoaXMgaXMgZm9vYmFyLCB3aGF0IGRvZXMgaXQgZG8/ICovCit9OworCisvKiBFbGVtZW50IG9mIHRoZSAicmFuZ2VzIiB2ZWN0b3IgKi8KK3N0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyB7CisJdW5zaWduZWQgaW50IG90X2NoaWxkX3NwYWNlOworCXVuc2lnbmVkIGludCBvdF9jaGlsZF9iYXNlOwkJLyogQnVzIGZlZWxzIHRoaXMgKi8KKwl1bnNpZ25lZCBpbnQgb3RfcGFyZW50X3NwYWNlOworCXVuc2lnbmVkIGludCBvdF9wYXJlbnRfYmFzZTsJCS8qIENQVSBsb29rcyBmcm9tIGhlcmUgKi8KKwl1bnNpZ25lZCBpbnQgb3Jfc2l6ZTsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tNjRfcmFuZ2VzIHsKKwl1bnNpZ25lZCBsb25nIG90X2NoaWxkX2Jhc2U7CQkvKiBCdXMgZmVlbHMgdGhpcyAqLworCXVuc2lnbmVkIGxvbmcgb3RfcGFyZW50X2Jhc2U7CQkvKiBDUFUgbG9va3MgZnJvbSBoZXJlICovCisJdW5zaWduZWQgbG9uZyBvcl9zaXplOworfTsKKworLyogUmFuZ2VzIGFuZCByZWcgcHJvcGVydGllcyBhcmUgYSBiaXQgZGlmZmVyZW50IGZvciBQQ0kuICovCitzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmVnaXN0ZXJzIHsKKwl1bnNpZ25lZCBpbnQgcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgcGh5c19taWQ7CisJdW5zaWduZWQgaW50IHBoeXNfbG87CisKKwl1bnNpZ25lZCBpbnQgc2l6ZV9oaTsKKwl1bnNpZ25lZCBpbnQgc2l6ZV9sbzsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tX3BjaV9yYW5nZXMgeworCXVuc2lnbmVkIGludCBjaGlsZF9waHlzX2hpOwkvKiBPbmx5IGNlcnRhaW4gYml0cyBhcmUgZW5jb2RlZCBoZXJlLiAqLworCXVuc2lnbmVkIGludCBjaGlsZF9waHlzX21pZDsKKwl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgcGFyZW50X3BoeXNfbG87CisKKwl1bnNpZ25lZCBpbnQgc2l6ZV9oaTsKKwl1bnNpZ25lZCBpbnQgc2l6ZV9sbzsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tX3BjaV9pbnRtYXAgeworCXVuc2lnbmVkIGludCBwaHlzX2hpOworCXVuc2lnbmVkIGludCBwaHlzX21pZDsKKwl1bnNpZ25lZCBpbnQgcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBpbnRlcnJ1cHQ7CisKKwlpbnQgICAgICAgICAgY25vZGU7CisJdW5zaWduZWQgaW50IGNpbnRlcnJ1cHQ7Cit9OworCitzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFzayB7CisJdW5zaWduZWQgaW50IHBoeXNfaGk7CisJdW5zaWduZWQgaW50IHBoeXNfbWlkOworCXVuc2lnbmVkIGludCBwaHlzX2xvOworCXVuc2lnbmVkIGludCBpbnRlcnJ1cHQ7Cit9OworCitzdHJ1Y3QgbGludXhfcHJvbV9lYnVzX3JhbmdlcyB7CisJdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfaGk7CisJdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfbG87CisKKwl1bnNpZ25lZCBpbnQgcGFyZW50X3BoeXNfaGk7CisJdW5zaWduZWQgaW50IHBhcmVudF9waHlzX21pZDsKKwl1bnNpZ25lZCBpbnQgcGFyZW50X3BoeXNfbG87CisKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKK307CisKK3N0cnVjdCBsaW51eF9wcm9tX2VidXNfaW50bWFwIHsKKwl1bnNpZ25lZCBpbnQgcGh5c19oaTsKKwl1bnNpZ25lZCBpbnQgcGh5c19sbzsKKworCXVuc2lnbmVkIGludCBpbnRlcnJ1cHQ7CisKKwlpbnQgICAgICAgICAgY25vZGU7CisJdW5zaWduZWQgaW50IGNpbnRlcnJ1cHQ7Cit9OworCitzdHJ1Y3QgbGludXhfcHJvbV9lYnVzX2ludG1hc2sgeworCXVuc2lnbmVkIGludCBwaHlzX2hpOworCXVuc2lnbmVkIGludCBwaHlzX2xvOworCXVuc2lnbmVkIGludCBpbnRlcnJ1cHQ7Cit9OworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfX1NQQVJDNjRfT1BFTlBST01fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL29wbGliLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9vcGxpYi5oCmluZGV4IDYxYzNjYTYuLmU4OGQ3YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL29wbGliLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvb3BsaWIuaApAQCAtMSwyNzMgKzEsOCBAQAotLyoKLSAqIG9wbGliLmg6ICBEZXNjcmliZXMgdGhlIGludGVyZmFjZSBhbmQgYXZhaWxhYmxlIHJvdXRpbmVzIGluIHRoZQotICogICAgICAgICAgIExpbnV4IFByb20gbGlicmFyeS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0KLSNpZm5kZWYgX19TUEFSQ19PUExJQl9ICi0jZGVmaW5lIF9fU1BBUkNfT1BMSUJfSAotCi0jaW5jbHVkZSA8YXNtL29wZW5wcm9tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCi0vKiBUaGUgbWFzdGVyIHJvbXZlYyBwb2ludGVyLi4uICovCi1leHRlcm4gc3RydWN0IGxpbnV4X3JvbXZlYyAqcm9tdmVjOwotCi0vKiBFbnVtZXJhdGlvbiB0byBkZXNjcmliZSB0aGUgcHJvbSBtYWpvciB2ZXJzaW9uIHdlIGhhdmUgZGV0ZWN0ZWQuICovCi1lbnVtIHByb21fbWFqb3JfdmVyc2lvbiB7Ci0JUFJPTV9WMCwgICAgICAvKiBPcmlnaW5hbCBzdW40YyBWMCBwcm9tICovCi0JUFJPTV9WMiwgICAgICAvKiBzdW40YyBhbmQgZWFybHkgc3VuNG0gVjIgcHJvbSAqLwotCVBST01fVjMsICAgICAgLyogc3VuNG0gYW5kIGxhdGVyLCB1cCB0byBzdW40ZC9zdW40ZSBtYWNoaW5lcyBWMyAqLwotCVBST01fUDEyNzUsICAgLyogSUVFRSBjb21wbGlhbnQgSVNBIGJhc2VkIFN1biBQUk9NLCBvbmx5IHN1bjR1ICovCi0gICAgICAgIFBST01fQVAxMDAwLCAgLyogYWN0dWFsbHkgbm8gcHJvbSBhdCBhbGwgKi8KLQlQUk9NX1NVTjQsICAgIC8qIE9sZCBzdW40IHByb21zIGFyZSB0b3RhbGx5IGRpZmZlcmVudCwgYnV0IHdlJ2xsIHNob2Vob3JuIGl0IHRvIG1ha2UgaXQgZml0ICovCi19OwotCi1leHRlcm4gZW51bSBwcm9tX21ham9yX3ZlcnNpb24gcHJvbV92ZXJzOwotLyogUmV2aXNpb24sIGFuZCBmaXJtd2FyZSByZXZpc2lvbi4gKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgcHJvbV9yZXYsIHByb21fcHJldjsKLQotLyogUm9vdCBub2RlIG9mIHRoZSBwcm9tIGRldmljZSB0cmVlLCB0aGlzIHN0YXlzIGNvbnN0YW50IGFmdGVyCi0gKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4KLSAqLwotZXh0ZXJuIGludCBwcm9tX3Jvb3Rfbm9kZTsKLQotLyogUG9pbnRlciB0byBwcm9tIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBkZXZpY2UgdHJlZSB0cmF2ZXJzYWwKLSAqIGFuZCB1c2FnZSB1dGlsaXR5IGZ1bmN0aW9ucy4gIE9ubHkgcHJvbS1saWIgc2hvdWxkIHVzZSB0aGVzZSwKLSAqIHVzZXJzIHVzZSB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlIGxpYnJhcnkgb25seSEKLSAqLwotZXh0ZXJuIHN0cnVjdCBsaW51eF9ub2Rlb3BzICpwcm9tX25vZGVvcHM7Ci0KLS8qIFRoZSBmdW5jdGlvbnMuLi4gKi8KLQotLyogWW91IG11c3QgY2FsbCBwcm9tX2luaXQoKSBiZWZvcmUgdXNpbmcgYW55IG9mIHRoZSBsaWJyYXJ5IHNlcnZpY2VzLAotICogcHJlZmVyYWJseSBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIFBhc3MgaXQgdGhlIHJvbXZlYyBwb2ludGVyLgotICovCi1leHRlcm4gdm9pZCBwcm9tX2luaXQoc3RydWN0IGxpbnV4X3JvbXZlYyAqcm9tX3B0cik7Ci0KLS8qIEJvb3QgYXJndW1lbnQgYWNxdWlzaXRpb24sIHJldHVybnMgdGhlIGJvb3QgY29tbWFuZCBsaW5lIHN0cmluZy4gKi8KLWV4dGVybiBjaGFyICpwcm9tX2dldGJvb3RhcmdzKHZvaWQpOwotCi0vKiBEZXZpY2UgdXRpbGl0aWVzLiAqLwotCi0vKiBNYXAgYW5kIHVubWFwIGRldmljZXMgaW4gSU8gc3BhY2UgYXQgdmlydHVhbCBhZGRyZXNzZXMuIE5vdGUgdGhhdCB0aGUKLSAqIHZpcnR1YWwgYWRkcmVzcyB5b3UgcGFzcyBpcyBhIHJlcXVlc3QgYW5kIHRoZSBwcm9tIG1heSBwdXQgeW91ciBtYXBwaW5ncwotICogc29tZXdoZXJlIGVsc2UsIHNvIGNoZWNrIHlvdXIgcmV0dXJuIHZhbHVlIGFzIHRoYXQgaXMgd2hlcmUgeW91ciBuZXcKLSAqIG1hcHBpbmdzIHJlYWxseSBhcmUhCi0gKgotICogQW5vdGhlciBub3RlLCB0aGVzZSBhcmUgb25seSBhdmFpbGFibGUgb24gVjIgb3IgaGlnaGVyIHByb21zIQotICovCi1leHRlcm4gY2hhciAqcHJvbV9tYXBpbyhjaGFyICp2aXJ0X2hpbnQsIGludCBpb19zcGFjZSwgdW5zaWduZWQgaW50IHBoeXNfYWRkciwgdW5zaWduZWQgaW50IG51bV9ieXRlcyk7Ci1leHRlcm4gdm9pZCBwcm9tX3VubWFwaW8oY2hhciAqdmlydF9hZGRyLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKLQotLyogRGV2aWNlIG9wZXJhdGlvbnMuICovCi0KLS8qIE9wZW4gdGhlIGRldmljZSBkZXNjcmliZWQgYnkgdGhlIHBhc3NlZCBzdHJpbmcuICBOb3RlLCB0aGF0IHRoZSBmb3JtYXQKLSAqIG9mIHRoZSBzdHJpbmcgaXMgZGlmZmVyZW50IG9uIFYwIHZzLiBWMi0+aGlnaGVyIHByb21zLiAgVGhlIGNhbGxlciBtdXN0Ci0gKiBrbm93IHdoYXQgaGUvc2hlIGlzIGRvaW5nISAgUmV0dXJucyB0aGUgZGV2aWNlIGRlc2NyaXB0b3IsIGFuIGludC4KLSAqLwotZXh0ZXJuIGludCBwcm9tX2Rldm9wZW4oY2hhciAqZGV2aWNlX3N0cmluZyk7Ci0KLS8qIENsb3NlIGEgcHJldmlvdXNseSBvcGVuZWQgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgcGFzc2VkIGludGVnZXIKLSAqIGRlc2NyaXB0b3IuCi0gKi8KLWV4dGVybiBpbnQgcHJvbV9kZXZjbG9zZShpbnQgZGV2aWNlX2hhbmRsZSk7Ci0KLS8qIERvIGEgc2VlayBvcGVyYXRpb24gb24gdGhlIGRldmljZSBkZXNjcmliZWQgYnkgdGhlIHBhc3NlZCBpbnRlZ2VyCi0gKiBkZXNjcmlwdG9yLgotICovCi1leHRlcm4gdm9pZCBwcm9tX3NlZWsoaW50IGRldmljZV9oYW5kbGUsIHVuc2lnbmVkIGludCBzZWVrX2hpdmFsLAotCQkgICAgICB1bnNpZ25lZCBpbnQgc2Vla19sb3d2YWwpOwotCi0vKiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzLCBkb24ndCByZWFsbHkgZml0IGluIGFueSBjYXRlZ29yeSBwZXIgc2UuICovCi0KLS8qIFJlYm9vdCB0aGUgbWFjaGluZSB3aXRoIHRoZSBjb21tYW5kIGxpbmUgcGFzc2VkLiAqLwotZXh0ZXJuIHZvaWQgcHJvbV9yZWJvb3QoY2hhciAqYm9vdF9jb21tYW5kKTsKLQotLyogRXZhbHVhdGUgdGhlIGZvcnRoIHN0cmluZyBwYXNzZWQuICovCi1leHRlcm4gdm9pZCBwcm9tX2ZldmFsKGNoYXIgKmZvcnRoX3N0cmluZyk7Ci0KLS8qIEVudGVyIHRoZSBwcm9tLCB3aXRoIHBvc3NpYmlsaXR5IG9mIGNvbnRpbnVhdGlvbiB3aXRoIHRoZSAnZ28nCi0gKiBjb21tYW5kIGluIG5ld2VyIHByb21zLgotICovCi1leHRlcm4gdm9pZCBwcm9tX2NtZGxpbmUodm9pZCk7Ci0KLS8qIEVudGVyIHRoZSBwcm9tLCB3aXRoIG5vIGNoYW5jZSBvZiBjb250aW51YXRpb24gZm9yIHRoZSBzdGFuZC1hbG9uZQotICogd2hpY2ggY2FsbHMgdGhpcy4KLSAqLwotZXh0ZXJuIHZvaWQgcHJvbV9oYWx0KHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwotCi0vKiBTZXQgdGhlIFBST00gJ3N5bmMnIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBwYXNzZWQgZnVuY3Rpb24gcG9pbnRlci4KLSAqIFdoZW4gdGhlIHVzZXIgZ2l2ZXMgdGhlICdzeW5jJyBjb21tYW5kIGF0IHRoZSBwcm9tIHByb21wdCB3aGlsZSB0aGUKLSAqIGtlcm5lbCBpcyBzdGlsbCBhY3RpdmUsIHRoZSBwcm9tIHdpbGwgY2FsbCB0aGlzIHJvdXRpbmUuCi0gKgotICogWFhYIFRoZSBhcmd1bWVudHMgYXJlIGRpZmZlcmVudCBvbiBWMCB2cy4gVjItPmhpZ2hlciBwcm9tcywgZ3JyciEgWFhYCi0gKi8KLXR5cGVkZWYgdm9pZCAoKnN5bmNfZnVuY190KSh2b2lkKTsKLWV4dGVybiB2b2lkIHByb21fc2V0c3luYyhzeW5jX2Z1bmNfdCBmdW5jX3B0cik7Ci0KLS8qIEFjcXVpcmUgdGhlIElEUFJPTSBvZiB0aGUgcm9vdCBub2RlIGluIHRoZSBwcm9tIGRldmljZSB0cmVlLiAgVGhpcwotICogZ2V0cyBwYXNzZWQgYSBidWZmZXIgd2hlcmUgeW91IHdvdWxkIGxpa2UgaXQgc3R1ZmZlZC4gIFRoZSByZXR1cm4gdmFsdWUKLSAqIGlzIHRoZSBmb3JtYXQgdHlwZSBvZiB0aGlzIGlkcHJvbSBvciAweGZmIG9uIGVycm9yLgotICovCi1leHRlcm4gdW5zaWduZWQgY2hhciBwcm9tX2dldF9pZHByb20oY2hhciAqaWRwX2J1ZmZlciwgaW50IGlkcGJ1Zl9zaXplKTsKLQotLyogR2V0IHRoZSBwcm9tIG1ham9yIHZlcnNpb24uICovCi1leHRlcm4gaW50IHByb21fdmVyc2lvbih2b2lkKTsKLQotLyogR2V0IHRoZSBwcm9tIHBsdWdpbiByZXZpc2lvbi4gKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRyZXYodm9pZCk7Ci0KLS8qIEdldCB0aGUgcHJvbSBmaXJtd2FyZSByZXZpc2lvbi4gKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRwcmV2KHZvaWQpOwotCi0vKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyB0by9mcm9tIHRoZSBjb25zb2xlLi4uLiAqLwotCi0vKiBOb24tYmxvY2tpbmcgZ2V0IGNoYXJhY3RlciBmcm9tIGNvbnNvbGUuICovCi1leHRlcm4gaW50IHByb21fbmJnZXRjaGFyKHZvaWQpOwotCi0vKiBOb24tYmxvY2tpbmcgcHV0IGNoYXJhY3RlciB0byBjb25zb2xlLiAqLwotZXh0ZXJuIGludCBwcm9tX25icHV0Y2hhcihjaGFyIGNoYXJhY3Rlcik7Ci0KLS8qIEJsb2NraW5nIGdldCBjaGFyYWN0ZXIgZnJvbSBjb25zb2xlLiAqLwotZXh0ZXJuIGNoYXIgcHJvbV9nZXRjaGFyKHZvaWQpOwotCi0vKiBCbG9ja2luZyBwdXQgY2hhcmFjdGVyIHRvIGNvbnNvbGUuICovCi1leHRlcm4gdm9pZCBwcm9tX3B1dGNoYXIoY2hhciBjaGFyYWN0ZXIpOwotCi0vKiBQcm9tJ3MgaW50ZXJuYWwgcm91dGluZXMsIGRvbid0IHVzZSBpbiBrZXJuZWwvYm9vdCBjb2RlLiAqLwotZXh0ZXJuIHZvaWQgcHJvbV9wcmludGYoY2hhciAqZm10LCAuLi4pOwotZXh0ZXJuIHZvaWQgcHJvbV93cml0ZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwotCi0vKiBNdWx0aXByb2Nlc3NvciBvcGVyYXRpb25zLi4uICovCi0KLS8qIFN0YXJ0IHRoZSBDUFUgd2l0aCB0aGUgZ2l2ZW4gZGV2aWNlIHRyZWUgbm9kZSwgY29udGV4dCB0YWJsZSwgYW5kIGNvbnRleHQKLSAqIGF0IHRoZSBwYXNzZWQgcHJvZ3JhbSBjb3VudGVyLgotICovCi1leHRlcm4gaW50IHByb21fc3RhcnRjcHUoaW50IGNwdW5vZGUsIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqY29udGV4dF90YWJsZSwKLQkJCSBpbnQgY29udGV4dCwgY2hhciAqcHJvZ3JhbV9jb3VudGVyKTsKLQotLyogU3RvcCB0aGUgQ1BVIHdpdGggdGhlIHBhc3NlZCBkZXZpY2UgdHJlZSBub2RlLiAqLwotZXh0ZXJuIGludCBwcm9tX3N0b3BjcHUoaW50IGNwdW5vZGUpOwotCi0vKiBJZGxlIHRoZSBDUFUgd2l0aCB0aGUgcGFzc2VkIGRldmljZSB0cmVlIG5vZGUuICovCi1leHRlcm4gaW50IHByb21faWRsZWNwdShpbnQgY3B1bm9kZSk7Ci0KLS8qIFJlLVN0YXJ0IHRoZSBDUFUgd2l0aCB0aGUgcGFzc2VkIGRldmljZSB0cmVlIG5vZGUuICovCi1leHRlcm4gaW50IHByb21fcmVzdGFydGNwdShpbnQgY3B1bm9kZSk7Ci0KLS8qIFBST00gbWVtb3J5IGFsbG9jYXRpb24gZmFjaWxpdGllcy4uLiAqLwotCi0vKiBBbGxvY2F0ZWQgYXQgcG9zc2libHkgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyBhIGNodW5rIG9mIHRoZQotICogaW5kaWNhdGVkIHNpemUuCi0gKi8KLWV4dGVybiBjaGFyICpwcm9tX2FsbG9jKGNoYXIgKnZpcnRfaGludCwgdW5zaWduZWQgaW50IHNpemUpOwotCi0vKiBGcmVlIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgY2h1bmsuICovCi1leHRlcm4gdm9pZCBwcm9tX2ZyZWUoY2hhciAqdmlydF9hZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0KLS8qIFN1bjQvc3VuNGMgc3BlY2lmaWMgbWVtb3J5LW1hbmFnZW1lbnQgc3RhcnR1cCBob29rLiAqLwotCi0vKiBNYXAgdGhlIHBhc3NlZCBzZWdtZW50IGluIHRoZSBnaXZlbiBjb250ZXh0IGF0IHRoZSBwYXNzZWQKLSAqIHZpcnR1YWwgYWRkcmVzcy4KLSAqLwotZXh0ZXJuIHZvaWQgcHJvbV9wdXRzZWdtZW50KGludCBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHZpcnRfYWRkciwKLQkJCSAgICBpbnQgcGh5c2ljYWxfc2VnbWVudCk7Ci0KLQotLyogUFJPTSBkZXZpY2UgdHJlZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLi4uICovCi0KLSNpZmRlZiBQUk9NTElCX0lOVEVSTkFMCi0KLS8qIEludGVybmFsIHZlcnNpb24gb2YgcHJvbV9nZXRjaGlsZC4gKi8KLWV4dGVybiBpbnQgX19wcm9tX2dldGNoaWxkKGludCBwYXJlbnRfbm9kZSk7Ci0KLS8qIEludGVybmFsIHZlcnNpb24gb2YgcHJvbV9nZXRzaWJsaW5nLiAqLwotZXh0ZXJuIGludCBfX3Byb21fZ2V0c2libGluZyhpbnQgbm9kZSk7Ci0KKyNpZm5kZWYgX19fQVNNX1NQQVJDX09QTElCX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX09QTElCX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9vcGxpYl82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvb3BsaWJfMzIuaD4KICNlbmRpZgotCi0KLS8qIEdldCB0aGUgY2hpbGQgbm9kZSBvZiB0aGUgZ2l2ZW4gbm9kZSwgb3IgemVybyBpZiBubyBjaGlsZCBleGlzdHMuICovCi1leHRlcm4gaW50IHByb21fZ2V0Y2hpbGQoaW50IHBhcmVudF9ub2RlKTsKLQotLyogR2V0IHRoZSBuZXh0IHNpYmxpbmcgbm9kZSBvZiB0aGUgZ2l2ZW4gbm9kZSwgb3IgemVybyBpZiBubyBmdXJ0aGVyCi0gKiBzaWJsaW5ncyBleGlzdC4KLSAqLwotZXh0ZXJuIGludCBwcm9tX2dldHNpYmxpbmcoaW50IG5vZGUpOwotCi0vKiBHZXQgdGhlIGxlbmd0aCwgYXQgdGhlIHBhc3NlZCBub2RlLCBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgdHlwZS4KLSAqIFJldHVybnMgLTEgb24gZXJyb3IgKGllLiBubyBzdWNoIHByb3BlcnR5IGF0IHRoaXMgbm9kZSkuCi0gKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRwcm9wbGVuKGludCB0aGlzbm9kZSwgY2hhciAqcHJvcGVydHkpOwotCi0vKiBGZXRjaCB0aGUgcmVxdWVzdGVkIHByb3BlcnR5IHVzaW5nIHRoZSBnaXZlbiBidWZmZXIuICBSZXR1cm5zCi0gKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBwcm9tIHB1dCBpbnRvIHlvdXIgYnVmZmVyIG9yIC0xIG9uIGVycm9yLgotICovCi1leHRlcm4gaW50IF9fbXVzdF9jaGVjayBwcm9tX2dldHByb3BlcnR5KGludCB0aGlzbm9kZSwgY2hhciAqcHJvcGVydHksCi0JCQkJCSBjaGFyICpwcm9wX2J1ZmZlciwgaW50IHByb3BidWZfc2l6ZSk7Ci0KLS8qIEFjcXVpcmUgYW4gaW50ZWdlciBwcm9wZXJ0eS4gKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRpbnQoaW50IG5vZGUsIGNoYXIgKnByb3BlcnR5KTsKLQotLyogQWNxdWlyZSBhbiBpbnRlZ2VyIHByb3BlcnR5LCB3aXRoIGEgZGVmYXVsdCB2YWx1ZS4gKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRpbnRkZWZhdWx0KGludCBub2RlLCBjaGFyICpwcm9wZXJ0eSwgaW50IGRlZnZhbCk7Ci0KLS8qIEFjcXVpcmUgYSBib29sZWFuIHByb3BlcnR5LCAwPUZBTFNFIDE9VFJVRS4gKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRib29sKGludCBub2RlLCBjaGFyICpwcm9wKTsKLQotLyogQWNxdWlyZSBhIHN0cmluZyBwcm9wZXJ0eSwgbnVsbCBzdHJpbmcgb24gZXJyb3IuICovCi1leHRlcm4gdm9pZCBwcm9tX2dldHN0cmluZyhpbnQgbm9kZSwgY2hhciAqcHJvcCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSk7Ci0KLS8qIERvZXMgdGhlIHBhc3NlZCBub2RlIGhhdmUgdGhlIGdpdmVuICJuYW1lIj8gWUVTPTEgTk89MCAqLwotZXh0ZXJuIGludCBwcm9tX25vZGVtYXRjaChpbnQgdGhpc25vZGUsIGNoYXIgKm5hbWUpOwotCi0vKiBTZWFyY2ggYWxsIHNpYmxpbmdzIHN0YXJ0aW5nIGF0IHRoZSBwYXNzZWQgbm9kZSBmb3IgIm5hbWUiIG1hdGNoaW5nCi0gKiB0aGUgZ2l2ZW4gc3RyaW5nLiAgUmV0dXJucyB0aGUgbm9kZSBvbiBzdWNjZXNzLCB6ZXJvIG9uIGZhaWx1cmUuCi0gKi8KLWV4dGVybiBpbnQgcHJvbV9zZWFyY2hzaWJsaW5ncyhpbnQgbm9kZV9zdGFydCwgY2hhciAqbmFtZSk7Ci0KLS8qIFJldHVybiB0aGUgZmlyc3QgcHJvcGVydHkgdHlwZSwgYXMgYSBzdHJpbmcsIGZvciB0aGUgZ2l2ZW4gbm9kZS4KLSAqIFJldHVybnMgYSBudWxsIHN0cmluZyBvbiBlcnJvci4KLSAqLwotZXh0ZXJuIGNoYXIgKnByb21fZmlyc3Rwcm9wKGludCBub2RlLCBjaGFyICpidWZmZXIpOwotCi0vKiBSZXR1cm5zIHRoZSBuZXh0IHByb3BlcnR5IGFmdGVyIHRoZSBwYXNzZWQgcHJvcGVydHkgZm9yIHRoZSBnaXZlbgotICogbm9kZS4gIFJldHVybnMgbnVsbCBzdHJpbmcgb24gZmFpbHVyZS4KLSAqLwotZXh0ZXJuIGNoYXIgKnByb21fbmV4dHByb3AoaW50IG5vZGUsIGNoYXIgKnByZXZfcHJvcGVydHksIGNoYXIgKmJ1ZmZlcik7Ci0KLS8qIFJldHVybnMgcGhhbmRsZSBvZiB0aGUgcGF0aCBzcGVjaWZpZWQgKi8KLWV4dGVybiBpbnQgcHJvbV9maW5kZGV2aWNlKGNoYXIgKm5hbWUpOwotCi0vKiBSZXR1cm5zIDEgaWYgdGhlIHNwZWNpZmllZCBub2RlIGhhcyBnaXZlbiBwcm9wZXJ0eS4gKi8KLWV4dGVybiBpbnQgcHJvbV9ub2RlX2hhc19wcm9wZXJ0eShpbnQgbm9kZSwgY2hhciAqcHJvcGVydHkpOwotCi0vKiBTZXQgdGhlIGluZGljYXRlZCBwcm9wZXJ0eSBhdCB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRoZSBwYXNzZWQgdmFsdWUuCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgeW91ciB2YWx1ZSB0aGF0IHRoZSBwcm9tIHRvb2suCi0gKi8KLWV4dGVybiBpbnQgcHJvbV9zZXRwcm9wKGludCBub2RlLCBjaGFyICpwcm9wX25hbWUsIGNoYXIgKnByb3BfdmFsdWUsCi0JCQlpbnQgdmFsdWVfc2l6ZSk7Ci0JCQkKLWV4dGVybiBpbnQgcHJvbV9wYXRodG9pbm9kZShjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgcHJvbV9pbnN0MnBrZyhpbnQpOwotCi0vKiBEb3JraW5nIHdpdGggQnVzIHJhbmdlcy4uLiAqLwotCi0vKiBBcHBseSBwcm9tbGliIHByb2JlcyBPQklPIHJhbmdlcyB0byByZWdpc3RlcnMuICovCi1leHRlcm4gdm9pZCBwcm9tX2FwcGx5X29iaW9fcmFuZ2VzKHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqb2Jpb3JlZ3MsIGludCBucmVncyk7Ci0KLS8qIEFwcGx5IHJhbmdlcyBvZiBhbnkgcHJvbSBub2RlIChhbmQgb3B0aW9uYWxseSBwYXJlbnQgbm9kZSBhcyB3ZWxsKSB0byByZWdpc3RlcnMuICovCi1leHRlcm4gdm9pZCBwcm9tX2FwcGx5X2dlbmVyaWNfcmFuZ2VzKGludCBub2RlLCBpbnQgcGFyZW50LCAKLQkJCQkgICAgICBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnNidXNyZWdzLCBpbnQgbnJlZ3MpOwotCi0vKiBDUFUgcHJvYmluZyBoZWxwZXJzLiAgKi8KLWludCBjcHVfZmluZF9ieV9pbnN0YW5jZShpbnQgaW5zdGFuY2UsIGludCAqcHJvbV9ub2RlLCBpbnQgKm1pZCk7Ci1pbnQgY3B1X2ZpbmRfYnlfbWlkKGludCBtaWQsIGludCAqcHJvbV9ub2RlKTsKLWludCBjcHVfZ2V0X2h3bWlkKGludCBwcm9tX25vZGUpOwotCi1leHRlcm4gc3BpbmxvY2tfdCBwcm9tX2xvY2s7Ci0KLSNlbmRpZiAvKiAhKF9fU1BBUkNfT1BMSUJfSCkgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvb3BsaWJfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL29wbGliXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI2MzFkYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL29wbGliXzMyLmgKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiBvcGxpYi5oOiAgRGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgYW5kIGF2YWlsYWJsZSByb3V0aW5lcyBpbiB0aGUKKyAqICAgICAgICAgICBMaW51eCBQcm9tIGxpYnJhcnkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9fU1BBUkNfT1BMSUJfSAorI2RlZmluZSBfX1NQQVJDX09QTElCX0gKKworI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyogVGhlIG1hc3RlciByb212ZWMgcG9pbnRlci4uLiAqLworZXh0ZXJuIHN0cnVjdCBsaW51eF9yb212ZWMgKnJvbXZlYzsKKworLyogRW51bWVyYXRpb24gdG8gZGVzY3JpYmUgdGhlIHByb20gbWFqb3IgdmVyc2lvbiB3ZSBoYXZlIGRldGVjdGVkLiAqLworZW51bSBwcm9tX21ham9yX3ZlcnNpb24geworCVBST01fVjAsICAgICAgLyogT3JpZ2luYWwgc3VuNGMgVjAgcHJvbSAqLworCVBST01fVjIsICAgICAgLyogc3VuNGMgYW5kIGVhcmx5IHN1bjRtIFYyIHByb20gKi8KKwlQUk9NX1YzLCAgICAgIC8qIHN1bjRtIGFuZCBsYXRlciwgdXAgdG8gc3VuNGQvc3VuNGUgbWFjaGluZXMgVjMgKi8KKwlQUk9NX1AxMjc1LCAgIC8qIElFRUUgY29tcGxpYW50IElTQSBiYXNlZCBTdW4gUFJPTSwgb25seSBzdW40dSAqLworCVBST01fU1VONCwgICAgLyogT2xkIHN1bjQgcHJvbXMgYXJlIHRvdGFsbHkgZGlmZmVyZW50LCBidXQgd2UnbGwgc2hvZWhvcm4gaXQgdG8gbWFrZSBpdCBmaXQgKi8KK307CisKK2V4dGVybiBlbnVtIHByb21fbWFqb3JfdmVyc2lvbiBwcm9tX3ZlcnM7CisvKiBSZXZpc2lvbiwgYW5kIGZpcm13YXJlIHJldmlzaW9uLiAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9tX3JldiwgcHJvbV9wcmV2OworCisvKiBSb290IG5vZGUgb2YgdGhlIHByb20gZGV2aWNlIHRyZWUsIHRoaXMgc3RheXMgY29uc3RhbnQgYWZ0ZXIKKyAqIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgorICovCitleHRlcm4gaW50IHByb21fcm9vdF9ub2RlOworCisvKiBQb2ludGVyIHRvIHByb20gc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGRldmljZSB0cmVlIHRyYXZlcnNhbAorICogYW5kIHVzYWdlIHV0aWxpdHkgZnVuY3Rpb25zLiAgT25seSBwcm9tLWxpYiBzaG91bGQgdXNlIHRoZXNlLAorICogdXNlcnMgdXNlIHRoZSBpbnRlcmZhY2UgZGVmaW5lZCBieSB0aGUgbGlicmFyeSBvbmx5IQorICovCitleHRlcm4gc3RydWN0IGxpbnV4X25vZGVvcHMgKnByb21fbm9kZW9wczsKKworLyogVGhlIGZ1bmN0aW9ucy4uLiAqLworCisvKiBZb3UgbXVzdCBjYWxsIHByb21faW5pdCgpIGJlZm9yZSB1c2luZyBhbnkgb2YgdGhlIGxpYnJhcnkgc2VydmljZXMsCisgKiBwcmVmZXJhYmx5IGFzIGVhcmx5IGFzIHBvc3NpYmxlLiAgUGFzcyBpdCB0aGUgcm9tdmVjIHBvaW50ZXIuCisgKi8KK2V4dGVybiB2b2lkIHByb21faW5pdChzdHJ1Y3QgbGludXhfcm9tdmVjICpyb21fcHRyKTsKKworLyogQm9vdCBhcmd1bWVudCBhY3F1aXNpdGlvbiwgcmV0dXJucyB0aGUgYm9vdCBjb21tYW5kIGxpbmUgc3RyaW5nLiAqLworZXh0ZXJuIGNoYXIgKnByb21fZ2V0Ym9vdGFyZ3Modm9pZCk7CisKKy8qIERldmljZSB1dGlsaXRpZXMuICovCisKKy8qIE1hcCBhbmQgdW5tYXAgZGV2aWNlcyBpbiBJTyBzcGFjZSBhdCB2aXJ0dWFsIGFkZHJlc3Nlcy4gTm90ZSB0aGF0IHRoZQorICogdmlydHVhbCBhZGRyZXNzIHlvdSBwYXNzIGlzIGEgcmVxdWVzdCBhbmQgdGhlIHByb20gbWF5IHB1dCB5b3VyIG1hcHBpbmdzCisgKiBzb21ld2hlcmUgZWxzZSwgc28gY2hlY2sgeW91ciByZXR1cm4gdmFsdWUgYXMgdGhhdCBpcyB3aGVyZSB5b3VyIG5ldworICogbWFwcGluZ3MgcmVhbGx5IGFyZSEKKyAqCisgKiBBbm90aGVyIG5vdGUsIHRoZXNlIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBWMiBvciBoaWdoZXIgcHJvbXMhCisgKi8KK2V4dGVybiBjaGFyICpwcm9tX21hcGlvKGNoYXIgKnZpcnRfaGludCwgaW50IGlvX3NwYWNlLCB1bnNpZ25lZCBpbnQgcGh5c19hZGRyLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKK2V4dGVybiB2b2lkIHByb21fdW5tYXBpbyhjaGFyICp2aXJ0X2FkZHIsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOworCisvKiBEZXZpY2Ugb3BlcmF0aW9ucy4gKi8KKworLyogT3BlbiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgcGFzc2VkIHN0cmluZy4gIE5vdGUsIHRoYXQgdGhlIGZvcm1hdAorICogb2YgdGhlIHN0cmluZyBpcyBkaWZmZXJlbnQgb24gVjAgdnMuIFYyLT5oaWdoZXIgcHJvbXMuICBUaGUgY2FsbGVyIG11c3QKKyAqIGtub3cgd2hhdCBoZS9zaGUgaXMgZG9pbmchICBSZXR1cm5zIHRoZSBkZXZpY2UgZGVzY3JpcHRvciwgYW4gaW50LgorICovCitleHRlcm4gaW50IHByb21fZGV2b3BlbihjaGFyICpkZXZpY2Vfc3RyaW5nKTsKKworLyogQ2xvc2UgYSBwcmV2aW91c2x5IG9wZW5lZCBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgaW50ZWdlcgorICogZGVzY3JpcHRvci4KKyAqLworZXh0ZXJuIGludCBwcm9tX2RldmNsb3NlKGludCBkZXZpY2VfaGFuZGxlKTsKKworLyogRG8gYSBzZWVrIG9wZXJhdGlvbiBvbiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgcGFzc2VkIGludGVnZXIKKyAqIGRlc2NyaXB0b3IuCisgKi8KK2V4dGVybiB2b2lkIHByb21fc2VlayhpbnQgZGV2aWNlX2hhbmRsZSwgdW5zaWduZWQgaW50IHNlZWtfaGl2YWwsCisJCSAgICAgIHVuc2lnbmVkIGludCBzZWVrX2xvd3ZhbCk7CisKKy8qIE1pc2NlbGxhbmVvdXMgcm91dGluZXMsIGRvbid0IHJlYWxseSBmaXQgaW4gYW55IGNhdGVnb3J5IHBlciBzZS4gKi8KKworLyogUmVib290IHRoZSBtYWNoaW5lIHdpdGggdGhlIGNvbW1hbmQgbGluZSBwYXNzZWQuICovCitleHRlcm4gdm9pZCBwcm9tX3JlYm9vdChjaGFyICpib290X2NvbW1hbmQpOworCisvKiBFdmFsdWF0ZSB0aGUgZm9ydGggc3RyaW5nIHBhc3NlZC4gKi8KK2V4dGVybiB2b2lkIHByb21fZmV2YWwoY2hhciAqZm9ydGhfc3RyaW5nKTsKKworLyogRW50ZXIgdGhlIHByb20sIHdpdGggcG9zc2liaWxpdHkgb2YgY29udGludWF0aW9uIHdpdGggdGhlICdnbycKKyAqIGNvbW1hbmQgaW4gbmV3ZXIgcHJvbXMuCisgKi8KK2V4dGVybiB2b2lkIHByb21fY21kbGluZSh2b2lkKTsKKworLyogRW50ZXIgdGhlIHByb20sIHdpdGggbm8gY2hhbmNlIG9mIGNvbnRpbnVhdGlvbiBmb3IgdGhlIHN0YW5kLWFsb25lCisgKiB3aGljaCBjYWxscyB0aGlzLgorICovCitleHRlcm4gdm9pZCBwcm9tX2hhbHQodm9pZCkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CisKKy8qIFNldCB0aGUgUFJPTSAnc3luYycgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIHBhc3NlZCBmdW5jdGlvbiBwb2ludGVyLgorICogV2hlbiB0aGUgdXNlciBnaXZlcyB0aGUgJ3N5bmMnIGNvbW1hbmQgYXQgdGhlIHByb20gcHJvbXB0IHdoaWxlIHRoZQorICoga2VybmVsIGlzIHN0aWxsIGFjdGl2ZSwgdGhlIHByb20gd2lsbCBjYWxsIHRoaXMgcm91dGluZS4KKyAqCisgKiBYWFggVGhlIGFyZ3VtZW50cyBhcmUgZGlmZmVyZW50IG9uIFYwIHZzLiBWMi0+aGlnaGVyIHByb21zLCBncnJyISBYWFgKKyAqLwordHlwZWRlZiB2b2lkICgqc3luY19mdW5jX3QpKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJvbV9zZXRzeW5jKHN5bmNfZnVuY190IGZ1bmNfcHRyKTsKKworLyogQWNxdWlyZSB0aGUgSURQUk9NIG9mIHRoZSByb290IG5vZGUgaW4gdGhlIHByb20gZGV2aWNlIHRyZWUuICBUaGlzCisgKiBnZXRzIHBhc3NlZCBhIGJ1ZmZlciB3aGVyZSB5b3Ugd291bGQgbGlrZSBpdCBzdHVmZmVkLiAgVGhlIHJldHVybiB2YWx1ZQorICogaXMgdGhlIGZvcm1hdCB0eXBlIG9mIHRoaXMgaWRwcm9tIG9yIDB4ZmYgb24gZXJyb3IuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIHByb21fZ2V0X2lkcHJvbShjaGFyICppZHBfYnVmZmVyLCBpbnQgaWRwYnVmX3NpemUpOworCisvKiBHZXQgdGhlIHByb20gbWFqb3IgdmVyc2lvbi4gKi8KK2V4dGVybiBpbnQgcHJvbV92ZXJzaW9uKHZvaWQpOworCisvKiBHZXQgdGhlIHByb20gcGx1Z2luIHJldmlzaW9uLiAqLworZXh0ZXJuIGludCBwcm9tX2dldHJldih2b2lkKTsKKworLyogR2V0IHRoZSBwcm9tIGZpcm13YXJlIHJldmlzaW9uLiAqLworZXh0ZXJuIGludCBwcm9tX2dldHByZXYodm9pZCk7CisKKy8qIENoYXJhY3RlciBvcGVyYXRpb25zIHRvL2Zyb20gdGhlIGNvbnNvbGUuLi4uICovCisKKy8qIE5vbi1ibG9ja2luZyBnZXQgY2hhcmFjdGVyIGZyb20gY29uc29sZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9uYmdldGNoYXIodm9pZCk7CisKKy8qIE5vbi1ibG9ja2luZyBwdXQgY2hhcmFjdGVyIHRvIGNvbnNvbGUuICovCitleHRlcm4gaW50IHByb21fbmJwdXRjaGFyKGNoYXIgY2hhcmFjdGVyKTsKKworLyogQmxvY2tpbmcgZ2V0IGNoYXJhY3RlciBmcm9tIGNvbnNvbGUuICovCitleHRlcm4gY2hhciBwcm9tX2dldGNoYXIodm9pZCk7CisKKy8qIEJsb2NraW5nIHB1dCBjaGFyYWN0ZXIgdG8gY29uc29sZS4gKi8KK2V4dGVybiB2b2lkIHByb21fcHV0Y2hhcihjaGFyIGNoYXJhY3Rlcik7CisKKy8qIFByb20ncyBpbnRlcm5hbCByb3V0aW5lcywgZG9uJ3QgdXNlIGluIGtlcm5lbC9ib290IGNvZGUuICovCitleHRlcm4gdm9pZCBwcm9tX3ByaW50ZihjaGFyICpmbXQsIC4uLik7CitleHRlcm4gdm9pZCBwcm9tX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisKKy8qIE11bHRpcHJvY2Vzc29yIG9wZXJhdGlvbnMuLi4gKi8KKworLyogU3RhcnQgdGhlIENQVSB3aXRoIHRoZSBnaXZlbiBkZXZpY2UgdHJlZSBub2RlLCBjb250ZXh0IHRhYmxlLCBhbmQgY29udGV4dAorICogYXQgdGhlIHBhc3NlZCBwcm9ncmFtIGNvdW50ZXIuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9zdGFydGNwdShpbnQgY3B1bm9kZSwgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpjb250ZXh0X3RhYmxlLAorCQkJIGludCBjb250ZXh0LCBjaGFyICpwcm9ncmFtX2NvdW50ZXIpOworCisvKiBTdG9wIHRoZSBDUFUgd2l0aCB0aGUgcGFzc2VkIGRldmljZSB0cmVlIG5vZGUuICovCitleHRlcm4gaW50IHByb21fc3RvcGNwdShpbnQgY3B1bm9kZSk7CisKKy8qIElkbGUgdGhlIENQVSB3aXRoIHRoZSBwYXNzZWQgZGV2aWNlIHRyZWUgbm9kZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9pZGxlY3B1KGludCBjcHVub2RlKTsKKworLyogUmUtU3RhcnQgdGhlIENQVSB3aXRoIHRoZSBwYXNzZWQgZGV2aWNlIHRyZWUgbm9kZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9yZXN0YXJ0Y3B1KGludCBjcHVub2RlKTsKKworLyogUFJPTSBtZW1vcnkgYWxsb2NhdGlvbiBmYWNpbGl0aWVzLi4uICovCisKKy8qIEFsbG9jYXRlZCBhdCBwb3NzaWJseSB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIGEgY2h1bmsgb2YgdGhlCisgKiBpbmRpY2F0ZWQgc2l6ZS4KKyAqLworZXh0ZXJuIGNoYXIgKnByb21fYWxsb2MoY2hhciAqdmlydF9oaW50LCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKy8qIEZyZWUgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBjaHVuay4gKi8KK2V4dGVybiB2b2lkIHByb21fZnJlZShjaGFyICp2aXJ0X2FkZHIsIHVuc2lnbmVkIGludCBzaXplKTsKKworLyogU3VuNC9zdW40YyBzcGVjaWZpYyBtZW1vcnktbWFuYWdlbWVudCBzdGFydHVwIGhvb2suICovCisKKy8qIE1hcCB0aGUgcGFzc2VkIHNlZ21lbnQgaW4gdGhlIGdpdmVuIGNvbnRleHQgYXQgdGhlIHBhc3NlZAorICogdmlydHVhbCBhZGRyZXNzLgorICovCitleHRlcm4gdm9pZCBwcm9tX3B1dHNlZ21lbnQoaW50IGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgdmlydF9hZGRyLAorCQkJICAgIGludCBwaHlzaWNhbF9zZWdtZW50KTsKKworCisvKiBQUk9NIGRldmljZSB0cmVlIHRyYXZlcnNhbCBmdW5jdGlvbnMuLi4gKi8KKworI2lmZGVmIFBST01MSUJfSU5URVJOQUwKKworLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBwcm9tX2dldGNoaWxkLiAqLworZXh0ZXJuIGludCBfX3Byb21fZ2V0Y2hpbGQoaW50IHBhcmVudF9ub2RlKTsKKworLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBwcm9tX2dldHNpYmxpbmcuICovCitleHRlcm4gaW50IF9fcHJvbV9nZXRzaWJsaW5nKGludCBub2RlKTsKKworI2VuZGlmCisKKworLyogR2V0IHRoZSBjaGlsZCBub2RlIG9mIHRoZSBnaXZlbiBub2RlLCBvciB6ZXJvIGlmIG5vIGNoaWxkIGV4aXN0cy4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRjaGlsZChpbnQgcGFyZW50X25vZGUpOworCisvKiBHZXQgdGhlIG5leHQgc2libGluZyBub2RlIG9mIHRoZSBnaXZlbiBub2RlLCBvciB6ZXJvIGlmIG5vIGZ1cnRoZXIKKyAqIHNpYmxpbmdzIGV4aXN0LgorICovCitleHRlcm4gaW50IHByb21fZ2V0c2libGluZyhpbnQgbm9kZSk7CisKKy8qIEdldCB0aGUgbGVuZ3RoLCBhdCB0aGUgcGFzc2VkIG5vZGUsIG9mIHRoZSBnaXZlbiBwcm9wZXJ0eSB0eXBlLgorICogUmV0dXJucyAtMSBvbiBlcnJvciAoaWUuIG5vIHN1Y2ggcHJvcGVydHkgYXQgdGhpcyBub2RlKS4KKyAqLworZXh0ZXJuIGludCBwcm9tX2dldHByb3BsZW4oaW50IHRoaXNub2RlLCBjaGFyICpwcm9wZXJ0eSk7CisKKy8qIEZldGNoIHRoZSByZXF1ZXN0ZWQgcHJvcGVydHkgdXNpbmcgdGhlIGdpdmVuIGJ1ZmZlci4gIFJldHVybnMKKyAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIHByb20gcHV0IGludG8geW91ciBidWZmZXIgb3IgLTEgb24gZXJyb3IuCisgKi8KK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIHByb21fZ2V0cHJvcGVydHkoaW50IHRoaXNub2RlLCBjaGFyICpwcm9wZXJ0eSwKKwkJCQkJIGNoYXIgKnByb3BfYnVmZmVyLCBpbnQgcHJvcGJ1Zl9zaXplKTsKKworLyogQWNxdWlyZSBhbiBpbnRlZ2VyIHByb3BlcnR5LiAqLworZXh0ZXJuIGludCBwcm9tX2dldGludChpbnQgbm9kZSwgY2hhciAqcHJvcGVydHkpOworCisvKiBBY3F1aXJlIGFuIGludGVnZXIgcHJvcGVydHksIHdpdGggYSBkZWZhdWx0IHZhbHVlLiAqLworZXh0ZXJuIGludCBwcm9tX2dldGludGRlZmF1bHQoaW50IG5vZGUsIGNoYXIgKnByb3BlcnR5LCBpbnQgZGVmdmFsKTsKKworLyogQWNxdWlyZSBhIGJvb2xlYW4gcHJvcGVydHksIDA9RkFMU0UgMT1UUlVFLiAqLworZXh0ZXJuIGludCBwcm9tX2dldGJvb2woaW50IG5vZGUsIGNoYXIgKnByb3ApOworCisvKiBBY3F1aXJlIGEgc3RyaW5nIHByb3BlcnR5LCBudWxsIHN0cmluZyBvbiBlcnJvci4gKi8KK2V4dGVybiB2b2lkIHByb21fZ2V0c3RyaW5nKGludCBub2RlLCBjaGFyICpwcm9wLCBjaGFyICpidWYsIGludCBidWZzaXplKTsKKworLyogRG9lcyB0aGUgcGFzc2VkIG5vZGUgaGF2ZSB0aGUgZ2l2ZW4gIm5hbWUiPyBZRVM9MSBOTz0wICovCitleHRlcm4gaW50IHByb21fbm9kZW1hdGNoKGludCB0aGlzbm9kZSwgY2hhciAqbmFtZSk7CisKKy8qIFNlYXJjaCBhbGwgc2libGluZ3Mgc3RhcnRpbmcgYXQgdGhlIHBhc3NlZCBub2RlIGZvciAibmFtZSIgbWF0Y2hpbmcKKyAqIHRoZSBnaXZlbiBzdHJpbmcuICBSZXR1cm5zIHRoZSBub2RlIG9uIHN1Y2Nlc3MsIHplcm8gb24gZmFpbHVyZS4KKyAqLworZXh0ZXJuIGludCBwcm9tX3NlYXJjaHNpYmxpbmdzKGludCBub2RlX3N0YXJ0LCBjaGFyICpuYW1lKTsKKworLyogUmV0dXJuIHRoZSBmaXJzdCBwcm9wZXJ0eSB0eXBlLCBhcyBhIHN0cmluZywgZm9yIHRoZSBnaXZlbiBub2RlLgorICogUmV0dXJucyBhIG51bGwgc3RyaW5nIG9uIGVycm9yLgorICovCitleHRlcm4gY2hhciAqcHJvbV9maXJzdHByb3AoaW50IG5vZGUsIGNoYXIgKmJ1ZmZlcik7CisKKy8qIFJldHVybnMgdGhlIG5leHQgcHJvcGVydHkgYWZ0ZXIgdGhlIHBhc3NlZCBwcm9wZXJ0eSBmb3IgdGhlIGdpdmVuCisgKiBub2RlLiAgUmV0dXJucyBudWxsIHN0cmluZyBvbiBmYWlsdXJlLgorICovCitleHRlcm4gY2hhciAqcHJvbV9uZXh0cHJvcChpbnQgbm9kZSwgY2hhciAqcHJldl9wcm9wZXJ0eSwgY2hhciAqYnVmZmVyKTsKKworLyogUmV0dXJucyBwaGFuZGxlIG9mIHRoZSBwYXRoIHNwZWNpZmllZCAqLworZXh0ZXJuIGludCBwcm9tX2ZpbmRkZXZpY2UoY2hhciAqbmFtZSk7CisKKy8qIFJldHVybnMgMSBpZiB0aGUgc3BlY2lmaWVkIG5vZGUgaGFzIGdpdmVuIHByb3BlcnR5LiAqLworZXh0ZXJuIGludCBwcm9tX25vZGVfaGFzX3Byb3BlcnR5KGludCBub2RlLCBjaGFyICpwcm9wZXJ0eSk7CisKKy8qIFNldCB0aGUgaW5kaWNhdGVkIHByb3BlcnR5IGF0IHRoZSBnaXZlbiBub2RlIHdpdGggdGhlIHBhc3NlZCB2YWx1ZS4KKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvZiB5b3VyIHZhbHVlIHRoYXQgdGhlIHByb20gdG9vay4KKyAqLworZXh0ZXJuIGludCBwcm9tX3NldHByb3AoaW50IG5vZGUsIGNoYXIgKnByb3BfbmFtZSwgY2hhciAqcHJvcF92YWx1ZSwKKwkJCWludCB2YWx1ZV9zaXplKTsKKworZXh0ZXJuIGludCBwcm9tX3BhdGh0b2lub2RlKGNoYXIgKnBhdGgpOworZXh0ZXJuIGludCBwcm9tX2luc3QycGtnKGludCk7CisKKy8qIERvcmtpbmcgd2l0aCBCdXMgcmFuZ2VzLi4uICovCisKKy8qIEFwcGx5IHByb21saWIgcHJvYmVzIE9CSU8gcmFuZ2VzIHRvIHJlZ2lzdGVycy4gKi8KK2V4dGVybiB2b2lkIHByb21fYXBwbHlfb2Jpb19yYW5nZXMoc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpvYmlvcmVncywgaW50IG5yZWdzKTsKKworLyogQXBwbHkgcmFuZ2VzIG9mIGFueSBwcm9tIG5vZGUgKGFuZCBvcHRpb25hbGx5IHBhcmVudCBub2RlIGFzIHdlbGwpIHRvIHJlZ2lzdGVycy4gKi8KK2V4dGVybiB2b2lkIHByb21fYXBwbHlfZ2VuZXJpY19yYW5nZXMoaW50IG5vZGUsIGludCBwYXJlbnQsCisJCQkJICAgICAgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpzYnVzcmVncywgaW50IG5yZWdzKTsKKworLyogQ1BVIHByb2JpbmcgaGVscGVycy4gICovCitpbnQgY3B1X2ZpbmRfYnlfaW5zdGFuY2UoaW50IGluc3RhbmNlLCBpbnQgKnByb21fbm9kZSwgaW50ICptaWQpOworaW50IGNwdV9maW5kX2J5X21pZChpbnQgbWlkLCBpbnQgKnByb21fbm9kZSk7CitpbnQgY3B1X2dldF9od21pZChpbnQgcHJvbV9ub2RlKTsKKworZXh0ZXJuIHNwaW5sb2NrX3QgcHJvbV9sb2NrOworCisjZW5kaWYgLyogIShfX1NQQVJDX09QTElCX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9vcGxpYl82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvb3BsaWJfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDJjMmNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvb3BsaWJfNjQuaApAQCAtMCwwICsxLDMyMiBAQAorLyogb3BsaWIuaDogIERlc2NyaWJlcyB0aGUgaW50ZXJmYWNlIGFuZCBhdmFpbGFibGUgcm91dGluZXMgaW4gdGhlCisgKiAgICAgICAgICAgTGludXggUHJvbSBsaWJyYXJ5LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKKyAqLworCisjaWZuZGVmIF9fU1BBUkM2NF9PUExJQl9ICisjZGVmaW5lIF9fU1BBUkM2NF9PUExJQl9ICisKKyNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KKworLyogT0JQIHZlcnNpb24gc3RyaW5nLiAqLworZXh0ZXJuIGNoYXIgcHJvbV92ZXJzaW9uW107CisKKy8qIFJvb3Qgbm9kZSBvZiB0aGUgcHJvbSBkZXZpY2UgdHJlZSwgdGhpcyBzdGF5cyBjb25zdGFudCBhZnRlcgorICogaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9yb290X25vZGU7CisKKy8qIFBST00gc3RkaW4gYW5kIHN0ZG91dCAqLworZXh0ZXJuIGludCBwcm9tX3N0ZGluLCBwcm9tX3N0ZG91dDsKKworLyogL2Nob3NlbiBub2RlIG9mIHRoZSBwcm9tIGRldmljZSB0cmVlLCB0aGlzIHN0YXlzIGNvbnN0YW50IGFmdGVyCisgKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4KKyAqLworZXh0ZXJuIGludCBwcm9tX2Nob3Nlbl9ub2RlOworCisvKiBIZWxwZXIgdmFsdWVzIGFuZCBzdHJpbmdzIGluIGFyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TICovCitleHRlcm4gY29uc3QgY2hhciBwcm9tX3BlZXJfbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9jb21wYXRpYmxlX25hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHByb21fcm9vdF9jb21wYXRpYmxlW107CitleHRlcm4gY29uc3QgY2hhciBwcm9tX2NwdV9jb21wYXRpYmxlW107CitleHRlcm4gY29uc3QgY2hhciBwcm9tX2ZpbmRkZXZfbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9jaG9zZW5fcGF0aFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9jcHVfcGF0aFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9nZXRwcm9wX25hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHByb21fbW11X25hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHByb21fY2FsbG1ldGhvZF9uYW1lW107CitleHRlcm4gY29uc3QgY2hhciBwcm9tX3RyYW5zbGF0ZV9uYW1lW107CitleHRlcm4gY29uc3QgY2hhciBwcm9tX21hcF9uYW1lW107CitleHRlcm4gY29uc3QgY2hhciBwcm9tX3VubWFwX25hbWVbXTsKK2V4dGVybiBpbnQgcHJvbV9tbXVfaWhhbmRsZV9jYWNoZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcHJvbV9ib290X21hcHBlZF9wYzsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcHJvbV9ib290X21hcHBpbmdfbW9kZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHByb21fYm9vdF9tYXBwaW5nX3BoeXNfaGlnaCwgcHJvbV9ib290X21hcHBpbmdfcGh5c19sb3c7CisKK3N0cnVjdCBsaW51eF9tbGlzdF9wMTI3NSB7CisJc3RydWN0IGxpbnV4X21saXN0X3AxMjc1ICp0aGVyZXNfbW9yZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkcjsKKwl1bnNpZ25lZCBsb25nIG51bV9ieXRlczsKK307CisKK3N0cnVjdCBsaW51eF9tZW1fcDEyNzUgeworCXN0cnVjdCBsaW51eF9tbGlzdF9wMTI3NSAqKnAxMjc1X3RvdHBoeXM7CisJc3RydWN0IGxpbnV4X21saXN0X3AxMjc1ICoqcDEyNzVfcHJvbW1hcDsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgKipwMTI3NV9hdmFpbGFibGU7IC8qIFdoYXQgd2UgY2FuIHVzZSAqLworfTsKKworLyogVGhlIGZ1bmN0aW9ucy4uLiAqLworCisvKiBZb3UgbXVzdCBjYWxsIHByb21faW5pdCgpIGJlZm9yZSB1c2luZyBhbnkgb2YgdGhlIGxpYnJhcnkgc2VydmljZXMsCisgKiBwcmVmZXJhYmx5IGFzIGVhcmx5IGFzIHBvc3NpYmxlLiAgUGFzcyBpdCB0aGUgcm9tdmVjIHBvaW50ZXIuCisgKi8KK2V4dGVybiB2b2lkIHByb21faW5pdCh2b2lkICpjaWZfaGFuZGxlciwgdm9pZCAqY2lmX3N0YWNrKTsKKworLyogQm9vdCBhcmd1bWVudCBhY3F1aXNpdGlvbiwgcmV0dXJucyB0aGUgYm9vdCBjb21tYW5kIGxpbmUgc3RyaW5nLiAqLworZXh0ZXJuIGNoYXIgKnByb21fZ2V0Ym9vdGFyZ3Modm9pZCk7CisKKy8qIERldmljZSB1dGlsaXRpZXMuICovCisKKy8qIERldmljZSBvcGVyYXRpb25zLiAqLworCisvKiBPcGVuIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgc3RyaW5nLiAgTm90ZSwgdGhhdCB0aGUgZm9ybWF0CisgKiBvZiB0aGUgc3RyaW5nIGlzIGRpZmZlcmVudCBvbiBWMCB2cy4gVjItPmhpZ2hlciBwcm9tcy4gIFRoZSBjYWxsZXIgbXVzdAorICoga25vdyB3aGF0IGhlL3NoZSBpcyBkb2luZyEgIFJldHVybnMgdGhlIGRldmljZSBkZXNjcmlwdG9yLCBhbiBpbnQuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9kZXZvcGVuKGNvbnN0IGNoYXIgKmRldmljZV9zdHJpbmcpOworCisvKiBDbG9zZSBhIHByZXZpb3VzbHkgb3BlbmVkIGRldmljZSBkZXNjcmliZWQgYnkgdGhlIHBhc3NlZCBpbnRlZ2VyCisgKiBkZXNjcmlwdG9yLgorICovCitleHRlcm4gaW50IHByb21fZGV2Y2xvc2UoaW50IGRldmljZV9oYW5kbGUpOworCisvKiBEbyBhIHNlZWsgb3BlcmF0aW9uIG9uIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgaW50ZWdlcgorICogZGVzY3JpcHRvci4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9zZWVrKGludCBkZXZpY2VfaGFuZGxlLCB1bnNpZ25lZCBpbnQgc2Vla19oaXZhbCwKKwkJICAgICAgdW5zaWduZWQgaW50IHNlZWtfbG93dmFsKTsKKworLyogTWlzY2VsbGFuZW91cyByb3V0aW5lcywgZG9uJ3QgcmVhbGx5IGZpdCBpbiBhbnkgY2F0ZWdvcnkgcGVyIHNlLiAqLworCisvKiBSZWJvb3QgdGhlIG1hY2hpbmUgd2l0aCB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZC4gKi8KK2V4dGVybiB2b2lkIHByb21fcmVib290KGNvbnN0IGNoYXIgKmJvb3RfY29tbWFuZCk7CisKKy8qIEV2YWx1YXRlIHRoZSBmb3J0aCBzdHJpbmcgcGFzc2VkLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9mZXZhbChjb25zdCBjaGFyICpmb3J0aF9zdHJpbmcpOworCisvKiBFbnRlciB0aGUgcHJvbSwgd2l0aCBwb3NzaWJpbGl0eSBvZiBjb250aW51YXRpb24gd2l0aCB0aGUgJ2dvJworICogY29tbWFuZCBpbiBuZXdlciBwcm9tcy4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9jbWRsaW5lKHZvaWQpOworCisvKiBFbnRlciB0aGUgcHJvbSwgd2l0aCBubyBjaGFuY2Ugb2YgY29udGludWF0aW9uIGZvciB0aGUgc3RhbmQtYWxvbmUKKyAqIHdoaWNoIGNhbGxzIHRoaXMuCisgKi8KK2V4dGVybiB2b2lkIHByb21faGFsdCh2b2lkKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKKworLyogSGFsdCBhbmQgcG93ZXItb2ZmIHRoZSBtYWNoaW5lLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9oYWx0X3Bvd2VyX29mZih2b2lkKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKKworLyogU2V0IHRoZSBQUk9NICdzeW5jJyBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgcGFzc2VkIGZ1bmN0aW9uIHBvaW50ZXIuCisgKiBXaGVuIHRoZSB1c2VyIGdpdmVzIHRoZSAnc3luYycgY29tbWFuZCBhdCB0aGUgcHJvbSBwcm9tcHQgd2hpbGUgdGhlCisgKiBrZXJuZWwgaXMgc3RpbGwgYWN0aXZlLCB0aGUgcHJvbSB3aWxsIGNhbGwgdGhpcyByb3V0aW5lLgorICoKKyAqLwordHlwZWRlZiBpbnQgKCpjYWxsYmFja19mdW5jX3QpKGxvbmcgKmNtZCk7CitleHRlcm4gdm9pZCBwcm9tX3NldGNhbGxiYWNrKGNhbGxiYWNrX2Z1bmNfdCBmdW5jX3B0cik7CisKKy8qIEFjcXVpcmUgdGhlIElEUFJPTSBvZiB0aGUgcm9vdCBub2RlIGluIHRoZSBwcm9tIGRldmljZSB0cmVlLiAgVGhpcworICogZ2V0cyBwYXNzZWQgYSBidWZmZXIgd2hlcmUgeW91IHdvdWxkIGxpa2UgaXQgc3R1ZmZlZC4gIFRoZSByZXR1cm4gdmFsdWUKKyAqIGlzIHRoZSBmb3JtYXQgdHlwZSBvZiB0aGlzIGlkcHJvbSBvciAweGZmIG9uIGVycm9yLgorICovCitleHRlcm4gdW5zaWduZWQgY2hhciBwcm9tX2dldF9pZHByb20oY2hhciAqaWRwX2J1ZmZlciwgaW50IGlkcGJ1Zl9zaXplKTsKKworLyogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgdG8vZnJvbSB0aGUgY29uc29sZS4uLi4gKi8KKworLyogTm9uLWJsb2NraW5nIGdldCBjaGFyYWN0ZXIgZnJvbSBjb25zb2xlLiAqLworZXh0ZXJuIGludCBwcm9tX25iZ2V0Y2hhcih2b2lkKTsKKworLyogTm9uLWJsb2NraW5nIHB1dCBjaGFyYWN0ZXIgdG8gY29uc29sZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9uYnB1dGNoYXIoY2hhciBjaGFyYWN0ZXIpOworCisvKiBCbG9ja2luZyBnZXQgY2hhcmFjdGVyIGZyb20gY29uc29sZS4gKi8KK2V4dGVybiBjaGFyIHByb21fZ2V0Y2hhcih2b2lkKTsKKworLyogQmxvY2tpbmcgcHV0IGNoYXJhY3RlciB0byBjb25zb2xlLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgY2hhcmFjdGVyKTsKKworLyogUHJvbSdzIGludGVybmFsIHJvdXRpbmVzLCBkb24ndCB1c2UgaW4ga2VybmVsL2Jvb3QgY29kZS4gKi8KK2V4dGVybiB2b2lkIHByb21fcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiB2b2lkIHByb21fd3JpdGUoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyogTXVsdGlwcm9jZXNzb3Igb3BlcmF0aW9ucy4uLiAqLworI2lmZGVmIENPTkZJR19TTVAKKy8qIFN0YXJ0IHRoZSBDUFUgd2l0aCB0aGUgZ2l2ZW4gZGV2aWNlIHRyZWUgbm9kZSBhdCB0aGUgcGFzc2VkIHByb2dyYW0KKyAqIGNvdW50ZXIgd2l0aCB0aGUgZ2l2ZW4gYXJnIHBhc3NlZCBpbiB2aWEgcmVnaXN0ZXIgJW8wLgorICovCitleHRlcm4gdm9pZCBwcm9tX3N0YXJ0Y3B1KGludCBjcHVub2RlLCB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKKy8qIFN0YXJ0IHRoZSBDUFUgd2l0aCB0aGUgZ2l2ZW4gY3B1IElEIGF0IHRoZSBwYXNzZWQgcHJvZ3JhbQorICogY291bnRlciB3aXRoIHRoZSBnaXZlbiBhcmcgcGFzc2VkIGluIHZpYSByZWdpc3RlciAlbzAuCisgKi8KK2V4dGVybiB2b2lkIHByb21fc3RhcnRjcHVfY3B1aWQoaW50IGNwdWlkLCB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKKy8qIFN0b3AgdGhlIENQVSB3aXRoIHRoZSBnaXZlbiBjcHUgSUQuICAqLworZXh0ZXJuIHZvaWQgcHJvbV9zdG9wY3B1X2NwdWlkKGludCBjcHVpZCk7CisKKy8qIFN0b3AgdGhlIGN1cnJlbnQgQ1BVLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9zdG9wc2VsZih2b2lkKTsKKworLyogSWRsZSB0aGUgY3VycmVudCBDUFUuICovCitleHRlcm4gdm9pZCBwcm9tX2lkbGVzZWxmKHZvaWQpOworCisvKiBSZXN1bWUgdGhlIENQVSB3aXRoIHRoZSBwYXNzZWQgZGV2aWNlIHRyZWUgbm9kZS4gKi8KK2V4dGVybiB2b2lkIHByb21fcmVzdW1lY3B1KGludCBjcHVub2RlKTsKKyNlbmRpZgorCisvKiBQb3dlciBtYW5hZ2VtZW50IGludGVyZmFjZXMuICovCisKKy8qIFB1dCB0aGUgY3VycmVudCBDUFUgdG8gc2xlZXAuICovCitleHRlcm4gdm9pZCBwcm9tX3NsZWVwc2VsZih2b2lkKTsKKworLyogUHV0IHRoZSBlbnRpcmUgc3lzdGVtIHRvIHNsZWVwLiAqLworZXh0ZXJuIGludCBwcm9tX3NsZWVwc3lzdGVtKHZvaWQpOworCisvKiBJbml0aWF0ZSBhIHdha2V1cCBldmVudC4gKi8KK2V4dGVybiBpbnQgcHJvbV93YWtldXBzeXN0ZW0odm9pZCk7CisKKy8qIE1NVSBhbmQgbWVtb3J5IHJlbGF0ZWQgT0JQIGludGVyZmFjZXMuICovCisKKy8qIEdldCB1bmlxdWUgc3RyaW5nIGlkZW50aWZ5aW5nIFNJTU0gYXQgZ2l2ZW4gcGh5c2ljYWwgYWRkcmVzcy4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXR1bnVtYmVyKGludCBzeW5kcm9tZV9jb2RlLAorCQkJICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkgICBjaGFyICpidWYsIGludCBidWZsZW4pOworCisvKiBSZXRhaW4gcGh5c2ljYWwgbWVtb3J5IHRvIHRoZSBjYWxsZXIgYWNyb3NzIHNvZnQgcmVzZXRzLiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9yZXRhaW4oY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBwYV9sb3csIHVuc2lnbmVkIGxvbmcgcGFfaGlnaCwKKwkJCQkgbG9uZyBzaXplLCBsb25nIGFsaWduKTsKKworLyogTG9hZCBleHBsaWNpdCBJL0QgVExCIGVudHJpZXMgaW50byB0aGUgY2FsbGluZyBwcm9jZXNzb3IuICovCitleHRlcm4gbG9uZyBwcm9tX2l0bGJfbG9hZCh1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJICAgdW5zaWduZWQgbG9uZyB0dGVfZGF0YSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdmFkZHIpOworCitleHRlcm4gbG9uZyBwcm9tX2R0bGJfbG9hZCh1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJICAgdW5zaWduZWQgbG9uZyB0dGVfZGF0YSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdmFkZHIpOworCisvKiBNYXAvVW5tYXAgY2xpZW50IHByb2dyYW0gYWRkcmVzcyByYW5nZXMuICBGaXJzdCB0aGUgZm9ybWF0IG9mCisgKiB0aGUgbWFwcGluZyBtb2RlIGFyZ3VtZW50LgorICovCisjZGVmaW5lIFBST01fTUFQX1dSSVRFCTB4MDAwMSAvKiBXcml0YWJsZSAqLworI2RlZmluZSBQUk9NX01BUF9SRUFECTB4MDAwMiAvKiBSZWFkYWJsZSAtIHN3ICovCisjZGVmaW5lIFBST01fTUFQX0VYRUMJMHgwMDA0IC8qIEV4ZWN1dGFibGUgLSBzdyAqLworI2RlZmluZSBQUk9NX01BUF9MT0NLRUQJMHgwMDEwIC8qIExvY2tlZCwgdXNlIGkvZHRsYiBsb2FkIGNhbGxzIGZvciB0aGlzIGluc3RlYWQgKi8KKyNkZWZpbmUgUFJPTV9NQVBfQ0FDSEVECTB4MDAyMCAvKiBDYWNoZWFibGUgaW4gYm90aCBMMSBhbmQgTDIgY2FjaGVzICovCisjZGVmaW5lIFBST01fTUFQX1NFCTB4MDA0MCAvKiBTaWRlLUVmZmVjdHMgKi8KKyNkZWZpbmUgUFJPTV9NQVBfR0xPQgkweDAwODAgLyogR2xvYmFsICovCisjZGVmaW5lIFBST01fTUFQX0lFCTB4MDEwMCAvKiBJbnZlcnQtRW5kaWFubmVzcyAqLworI2RlZmluZSBQUk9NX01BUF9ERUZBVUxUIChQUk9NX01BUF9XUklURSB8IFBST01fTUFQX1JFQUQgfCBQUk9NX01BUF9FWEVDIHwgUFJPTV9NQVBfQ0FDSEVEKQorCitleHRlcm4gaW50IHByb21fbWFwKGludCBtb2RlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBhZGRyKTsKK2V4dGVybiB2b2lkIHByb21fdW5tYXAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKKworCisvKiBQUk9NIGRldmljZSB0cmVlIHRyYXZlcnNhbCBmdW5jdGlvbnMuLi4gKi8KKworI2lmZGVmIFBST01MSUJfSU5URVJOQUwKKworLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBwcm9tX2dldGNoaWxkLiAqLworZXh0ZXJuIGludCBfX3Byb21fZ2V0Y2hpbGQoaW50IHBhcmVudF9ub2RlKTsKKworLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBwcm9tX2dldHNpYmxpbmcuICovCitleHRlcm4gaW50IF9fcHJvbV9nZXRzaWJsaW5nKGludCBub2RlKTsKKworI2VuZGlmCisKKy8qIEdldCB0aGUgY2hpbGQgbm9kZSBvZiB0aGUgZ2l2ZW4gbm9kZSwgb3IgemVybyBpZiBubyBjaGlsZCBleGlzdHMuICovCitleHRlcm4gaW50IHByb21fZ2V0Y2hpbGQoaW50IHBhcmVudF9ub2RlKTsKKworLyogR2V0IHRoZSBuZXh0IHNpYmxpbmcgbm9kZSBvZiB0aGUgZ2l2ZW4gbm9kZSwgb3IgemVybyBpZiBubyBmdXJ0aGVyCisgKiBzaWJsaW5ncyBleGlzdC4KKyAqLworZXh0ZXJuIGludCBwcm9tX2dldHNpYmxpbmcoaW50IG5vZGUpOworCisvKiBHZXQgdGhlIGxlbmd0aCwgYXQgdGhlIHBhc3NlZCBub2RlLCBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgdHlwZS4KKyAqIFJldHVybnMgLTEgb24gZXJyb3IgKGllLiBubyBzdWNoIHByb3BlcnR5IGF0IHRoaXMgbm9kZSkuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRwcm9wbGVuKGludCB0aGlzbm9kZSwgY29uc3QgY2hhciAqcHJvcGVydHkpOworCisvKiBGZXRjaCB0aGUgcmVxdWVzdGVkIHByb3BlcnR5IHVzaW5nIHRoZSBnaXZlbiBidWZmZXIuICBSZXR1cm5zCisgKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBwcm9tIHB1dCBpbnRvIHlvdXIgYnVmZmVyIG9yIC0xIG9uIGVycm9yLgorICovCitleHRlcm4gaW50IHByb21fZ2V0cHJvcGVydHkoaW50IHRoaXNub2RlLCBjb25zdCBjaGFyICpwcm9wZXJ0eSwKKwkJCSAgICBjaGFyICpwcm9wX2J1ZmZlciwgaW50IHByb3BidWZfc2l6ZSk7CisKKy8qIEFjcXVpcmUgYW4gaW50ZWdlciBwcm9wZXJ0eS4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRpbnQoaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByb3BlcnR5KTsKKworLyogQWNxdWlyZSBhbiBpbnRlZ2VyIHByb3BlcnR5LCB3aXRoIGEgZGVmYXVsdCB2YWx1ZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRpbnRkZWZhdWx0KGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wZXJ0eSwgaW50IGRlZnZhbCk7CisKKy8qIEFjcXVpcmUgYSBib29sZWFuIHByb3BlcnR5LCAwPUZBTFNFIDE9VFJVRS4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRib29sKGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wKTsKKworLyogQWNxdWlyZSBhIHN0cmluZyBwcm9wZXJ0eSwgbnVsbCBzdHJpbmcgb24gZXJyb3IuICovCitleHRlcm4gdm9pZCBwcm9tX2dldHN0cmluZyhpbnQgbm9kZSwgY29uc3QgY2hhciAqcHJvcCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSk7CisKKy8qIERvZXMgdGhlIHBhc3NlZCBub2RlIGhhdmUgdGhlIGdpdmVuICJuYW1lIj8gWUVTPTEgTk89MCAqLworZXh0ZXJuIGludCBwcm9tX25vZGVtYXRjaChpbnQgdGhpc25vZGUsIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBTZWFyY2ggYWxsIHNpYmxpbmdzIHN0YXJ0aW5nIGF0IHRoZSBwYXNzZWQgbm9kZSBmb3IgIm5hbWUiIG1hdGNoaW5nCisgKiB0aGUgZ2l2ZW4gc3RyaW5nLiAgUmV0dXJucyB0aGUgbm9kZSBvbiBzdWNjZXNzLCB6ZXJvIG9uIGZhaWx1cmUuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9zZWFyY2hzaWJsaW5ncyhpbnQgbm9kZV9zdGFydCwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIFJldHVybiB0aGUgZmlyc3QgcHJvcGVydHkgdHlwZSwgYXMgYSBzdHJpbmcsIGZvciB0aGUgZ2l2ZW4gbm9kZS4KKyAqIFJldHVybnMgYSBudWxsIHN0cmluZyBvbiBlcnJvci4gQnVmZmVyIHNob3VsZCBiZSBhdCBsZWFzdCAzMkIgbG9uZy4KKyAqLworZXh0ZXJuIGNoYXIgKnByb21fZmlyc3Rwcm9wKGludCBub2RlLCBjaGFyICpidWZmZXIpOworCisvKiBSZXR1cm5zIHRoZSBuZXh0IHByb3BlcnR5IGFmdGVyIHRoZSBwYXNzZWQgcHJvcGVydHkgZm9yIHRoZSBnaXZlbgorICogbm9kZS4gIFJldHVybnMgbnVsbCBzdHJpbmcgb24gZmFpbHVyZS4gQnVmZmVyIHNob3VsZCBiZSBhdCBsZWFzdCAzMkIgbG9uZy4KKyAqLworZXh0ZXJuIGNoYXIgKnByb21fbmV4dHByb3AoaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByZXZfcHJvcGVydHksIGNoYXIgKmJ1ZmZlcik7CisKKy8qIFJldHVybnMgMSBpZiB0aGUgc3BlY2lmaWVkIG5vZGUgaGFzIGdpdmVuIHByb3BlcnR5LiAqLworZXh0ZXJuIGludCBwcm9tX25vZGVfaGFzX3Byb3BlcnR5KGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wZXJ0eSk7CisKKy8qIFJldHVybnMgcGhhbmRsZSBvZiB0aGUgcGF0aCBzcGVjaWZpZWQgKi8KK2V4dGVybiBpbnQgcHJvbV9maW5kZGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBTZXQgdGhlIGluZGljYXRlZCBwcm9wZXJ0eSBhdCB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRoZSBwYXNzZWQgdmFsdWUuCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgeW91ciB2YWx1ZSB0aGF0IHRoZSBwcm9tIHRvb2suCisgKi8KK2V4dGVybiBpbnQgcHJvbV9zZXRwcm9wKGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wX25hbWUsIGNoYXIgKnByb3BfdmFsdWUsCisJCQlpbnQgdmFsdWVfc2l6ZSk7CisKK2V4dGVybiBpbnQgcHJvbV9wYXRodG9pbm9kZShjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgcHJvbV9pbnN0MnBrZyhpbnQpOworZXh0ZXJuIGludCBwcm9tX3NlcnZpY2VfZXhpc3RzKGNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZSk7CitleHRlcm4gdm9pZCBwcm9tX3N1bjR2X2d1ZXN0X3NvZnRfc3RhdGUodm9pZCk7CisKK2V4dGVybiBpbnQgcHJvbV9paGFuZGxlMnBhdGgoaW50IGhhbmRsZSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSk7CisKKy8qIENsaWVudCBpbnRlcmZhY2UgbGV2ZWwgcm91dGluZXMuICovCitleHRlcm4gbG9uZyBwMTI3NV9jbWQoY29uc3QgY2hhciAqLCBsb25nLCAuLi4pOworCisjaWYgMAorI2RlZmluZSBQMTI3NV9TSVpFKHgpICgoKChsb25nKSgoeCkgLyAzMikpIDw8IDMyKSB8ICh4KSkKKyNlbHNlCisjZGVmaW5lIFAxMjc1X1NJWkUoeCkgeAorI2VuZGlmCisKKy8qIFdlIHN1cHBvcnQgYXQgbW9zdCAxNiBpbnB1dCBhbmQgMSBvdXRwdXQgYXJndW1lbnQgKi8KKyNkZWZpbmUgUDEyNzVfQVJHX05VTUJFUgkJMAorI2RlZmluZSBQMTI3NV9BUkdfSU5fU1RSSU5HCQkxCisjZGVmaW5lIFAxMjc1X0FSR19PVVRfQlVGCQkyCisjZGVmaW5lIFAxMjc1X0FSR19PVVRfMzJCCQkzCisjZGVmaW5lIFAxMjc1X0FSR19JTl9GVU5DVElPTgkJNAorI2RlZmluZSBQMTI3NV9BUkdfSU5fQlVGCQk1CisjZGVmaW5lIFAxMjc1X0FSR19JTl82NEIJCTYKKworI2RlZmluZSBQMTI3NV9JTih4KSAoKHgpICYgMHhmKQorI2RlZmluZSBQMTI3NV9PVVQoeCkgKCgoeCkgPDwgNCkgJiAweGYwKQorI2RlZmluZSBQMTI3NV9JTk9VVChpLG8pIChQMTI3NV9JTihpKXxQMTI3NV9PVVQobykpCisjZGVmaW5lIFAxMjc1X0FSRyhuLHgpICgoeCkgPDwgKChuKSozICsgOCkpCisKKyNlbmRpZiAvKiAhKF9fU1BBUkM2NF9PUExJQl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGFnZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGFnZS5oCmluZGV4IDZhYTllNGMuLmYzMmY0OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wYWdlLmgKQEAgLTEsMTY1ICsxLDggQEAKLS8qCi0gKiBwYWdlLmg6ICBWYXJpb3VzIGRlZmluZXMgYW5kIHN1Y2ggZm9yIE1NVSBvcGVyYXRpb25zIG9uIHRoZSBTcGFyYyBmb3IKLSAqICAgICAgICAgIHRoZSBMaW51eCBrZXJuZWwuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaWZuZGVmIF9TUEFSQ19QQUdFX0gKLSNkZWZpbmUgX1NQQVJDX1BBR0VfSAotCi0jaWZkZWYgQ09ORklHX1NVTjQKLSNkZWZpbmUgUEFHRV9TSElGVCAgIDEzCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19QQUdFX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1BBR0VfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3BhZ2VfNjQuaD4KICNlbHNlCi0jZGVmaW5lIFBBR0VfU0hJRlQgICAxMgorI2luY2x1ZGUgPGFzbS1zcGFyYy9wYWdlXzMyLmg+CiAjZW5kaWYKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBJIGhhdmUgbXkgc3VzcGljaW9ucy4uLiAtRGF2ZU0gKi8KLSNkZWZpbmUgUEFHRV9TSVpFICAgICgxVUwgPDwgUEFHRV9TSElGVCkKLSNlbHNlCi0jZGVmaW5lIFBBR0VfU0laRSAgICAoMSA8PCBQQUdFX1NISUZUKQogI2VuZGlmCi0jZGVmaW5lIFBBR0VfTUFTSyAgICAofihQQUdFX1NJWkUtMSkpCi0KLSNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkJIG1lbXNldCgodm9pZCAqKShwYWdlKSwgMCwgUEFHRV9TSVpFKQotI2RlZmluZSBjb3B5X3BhZ2UodG8sZnJvbSkgCW1lbWNweSgodm9pZCAqKSh0byksICh2b2lkICopKGZyb20pLCBQQUdFX1NJWkUpCi0jZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShhZGRyLCB2YWRkciwgcGFnZSkJXAotCWRvIHsgCWNsZWFyX3BhZ2UoYWRkcik7CQlcCi0JCXNwYXJjX2ZsdXNoX3BhZ2VfdG9fcmFtKHBhZ2UpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwYWdlKQlcCi0JZG8gewljb3B5X3BhZ2UodG8sIGZyb20pOwkJXAotCQlzcGFyY19mbHVzaF9wYWdlX3RvX3JhbShwYWdlKTsJXAotCX0gd2hpbGUgKDApCi0KLS8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgdG8gaG9sZCB0aGUgcGh5c2ljYWwKLSAqIG1lbW9yeSBjb25maWd1cmF0aW9uIG9mIHRoZSBtYWNoaW5lLiAgVGhpcyBpcyBmaWxsZWQgaW4KLSAqIHByb21fbWVtaW5pdCgpIGFuZCBpcyBsYXRlciB1c2VkIGJ5IG1lbV9pbml0KCkgdG8gc2V0IHVwCi0gKiBtZW1fbWFwW10uICBXZSBzdGF0aWNhbGx5IGFsbG9jYXRlIFNQQVJDX1BIWVNfQkFOS1MrMSBvZgotICogdGhlc2Ugc3RydWN0cywgdGhpcyBpcyBhcmJpdHJhcnkuICBUaGUgZW50cnkgYWZ0ZXIgdGhlCi0gKiBsYXN0IHZhbGlkIG9uZSBoYXMgbnVtX2J5dGVzPT0wLgotICovCi1zdHJ1Y3Qgc3BhcmNfcGh5c19iYW5rcyB7Ci0gIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyOwotICB1bnNpZ25lZCBsb25nIG51bV9ieXRlczsKLX07Ci0KLSNkZWZpbmUgU1BBUkNfUEhZU19CQU5LUyAzMgotCi1leHRlcm4gc3RydWN0IHNwYXJjX3BoeXNfYmFua3Mgc3BfYmFua3NbU1BBUkNfUEhZU19CQU5LUysxXTsKLQotLyogQ2FjaGUgYWxpYXMgc3RydWN0dXJlLiAgRW50cnkgaXMgdmFsaWQgaWYgY29udGV4dCAhPSAtMS4gKi8KLXN0cnVjdCBjYWNoZV9wYWxpYXMgewotCXVuc2lnbmVkIGxvbmcgdmFkZHI7Ci0JaW50IGNvbnRleHQ7Ci19OwotCi1leHRlcm4gc3RydWN0IGNhY2hlX3BhbGlhcyAqc3BhcmNfYWxpYXNlczsKLQotLyogcGFzc2luZyBzdHJ1Y3RzIG9uIHRoZSBTcGFyYyBzbG93IHVzIGRvd24gdHJlbWVuZG91c2x5Li4uICovCi0KLS8qICNkZWZpbmUgU1RSSUNUX01NX1RZUEVDSEVDS1MgKi8KLQotI2lmZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCi0vKgotICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBpb3B0ZTsgfSBpb3B0ZV90OwotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZHZbMTZdOyB9IHBtZF90OwotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBjdHhkOyB9IGN0eGRfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7Ci10eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgaW9wZ3Byb3Q7IH0gaW9wZ3Byb3RfdDsKLQotI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQotI2RlZmluZSBpb3B0ZV92YWwoeCkJKCh4KS5pb3B0ZSkKLSNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICgoeCkucG1kdlswXSkKLSNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKLSNkZWZpbmUgY3R4ZF92YWwoeCkJKCh4KS5jdHhkKQotI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQotI2RlZmluZSBpb3BncHJvdF92YWwoeCkJKCh4KS5pb3BncHJvdCkKLQotI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9ICkKLSNkZWZpbmUgX19pb3B0ZSh4KQkoKGlvcHRlX3QpIHsgKHgpIH0gKQotLyogI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKChwbWRfdCkgeyAoeCkgfSApICovIC8qIFhYWCBwcm9jZWR1cmUgd2l0aCBsb29wICovCi0jZGVmaW5lIF9fcGdkKHgpCSgocGdkX3QpIHsgKHgpIH0gKQotI2RlZmluZSBfX2N0eGQoeCkJKChjdHhkX3QpIHsgKHgpIH0gKQotI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKLSNkZWZpbmUgX19pb3BncHJvdCh4KQkoKGlvcGdwcm90X3QpIHsgKHgpIH0gKQotCi0jZWxzZQotLyoKLSAqIC4uIHdoaWxlIHRoZXNlIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBjb21waWxlcgotICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9wdGVfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWR2WzE2XTsgfSBwbWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBjdHhkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9wZ3Byb3RfdDsKLQotI2RlZmluZSBwdGVfdmFsKHgpCSh4KQotI2RlZmluZSBpb3B0ZV92YWwoeCkJKHgpCi0jZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZHZbMF0pCi0jZGVmaW5lIHBnZF92YWwoeCkJKHgpCi0jZGVmaW5lIGN0eGRfdmFsKHgpCSh4KQotI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSh4KQotI2RlZmluZSBpb3BncHJvdF92YWwoeCkJKHgpCi0KLSNkZWZpbmUgX19wdGUoeCkJKHgpCi0jZGVmaW5lIF9faW9wdGUoeCkJKHgpCi0vKiAjZGVmaW5lIF9fcG1kKHgpICAgICAgICAoeCkgKi8gLyogWFhYIGxhdGVyICovCi0jZGVmaW5lIF9fcGdkKHgpCSh4KQotI2RlZmluZSBfX2N0eGQoeCkJKHgpCi0jZGVmaW5lIF9fcGdwcm90KHgpCSh4KQotI2RlZmluZSBfX2lvcGdwcm90KHgpCSh4KQotCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzcGFyY191bm1hcHBlZF9iYXNlOwotCi1CVEZJWFVQREVGX1NFVEhJKHNwYXJjX3VubWFwcGVkX2Jhc2UpCi0KLSNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCUJURklYVVBfU0VUSEkoc3BhcmNfdW5tYXBwZWRfYmFzZSkKLQotI2Vsc2UgLyogIShfX0FTU0VNQkxZX18pICovCi0KLSNkZWZpbmUgX19wZ3Byb3QoeCkJKHgpCi0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCi0jZGVmaW5lIFBBR0VfQUxJR04oYWRkcikgICgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCi0KLSNkZWZpbmUgUEFHRV9PRkZTRVQJMHhmMDAwMDAwMAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHBmbl9iYXNlOwotI2VuZGlmCi0jZGVmaW5lIF9fcGEoeCkJCQkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUEFHRV9PRkZTRVQgKyBwaHlzX2Jhc2UpCi0jZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpICh4KSAtIHBoeXNfYmFzZSArIFBBR0VfT0ZGU0VUKSkKLQotI2RlZmluZSB2aXJ0X3RvX3BoeXMJCV9fcGEKLSNkZWZpbmUgcGh5c190b192aXJ0CQlfX3ZhCi0KLSNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQkocGZuX2Jhc2UpCi0jZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJKG1lbV9tYXAgKyAoKCgodW5zaWduZWQgbG9uZykoa2FkZHIpLVBBR0VfT0ZGU0VUKT4+UEFHRV9TSElGVCkpKQotCi0jZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pID49IChwZm5fYmFzZSkpICYmICgoKHBmbiktKHBmbl9iYXNlKSkgPCBtYXhfbWFwbnIpKQotI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCSgoKCh1bnNpZ25lZCBsb25nKShrYWRkciktUEFHRV9PRkZTRVQpPj5QQUdFX1NISUZUKSA8IG1heF9tYXBucikKLQotI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCi0JCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYWdlLmg+Ci0KLSNlbmRpZiAvKiBfU1BBUkNfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wYWdlXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wYWdlXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkZTUxOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BhZ2VfMzIuaApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIHBhZ2UuaDogIFZhcmlvdXMgZGVmaW5lcyBhbmQgc3VjaCBmb3IgTU1VIG9wZXJhdGlvbnMgb24gdGhlIFNwYXJjIGZvcgorICogICAgICAgICAgdGhlIExpbnV4IGtlcm5lbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDX1BBR0VfSAorI2RlZmluZSBfU1BBUkNfUEFHRV9ICisKKyNpZmRlZiBDT05GSUdfU1VONAorI2RlZmluZSBQQUdFX1NISUZUICAgMTMKKyNlbHNlCisjZGVmaW5lIFBBR0VfU0hJRlQgICAxMgorI2VuZGlmCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogSSBoYXZlIG15IHN1c3BpY2lvbnMuLi4gLURhdmVNICovCisjZGVmaW5lIFBBR0VfU0laRSAgICAoMVVMIDw8IFBBR0VfU0hJRlQpCisjZWxzZQorI2RlZmluZSBQQUdFX1NJWkUgICAgKDEgPDwgUEFHRV9TSElGVCkKKyNlbmRpZgorI2RlZmluZSBQQUdFX01BU0sgICAgKH4oUEFHRV9TSVpFLTEpKQorCisjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCSBtZW1zZXQoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKKyNkZWZpbmUgY29weV9wYWdlKHRvLGZyb20pIAltZW1jcHkoKHZvaWQgKikodG8pLCAodm9pZCAqKShmcm9tKSwgUEFHRV9TSVpFKQorI2RlZmluZSBjbGVhcl91c2VyX3BhZ2UoYWRkciwgdmFkZHIsIHBhZ2UpCVwKKwlkbyB7IAljbGVhcl9wYWdlKGFkZHIpOwkJXAorCQlzcGFyY19mbHVzaF9wYWdlX3RvX3JhbShwYWdlKTsJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGNvcHlfdXNlcl9wYWdlKHRvLCBmcm9tLCB2YWRkciwgcGFnZSkJXAorCWRvIHsJY29weV9wYWdlKHRvLCBmcm9tKTsJCVwKKwkJc3BhcmNfZmx1c2hfcGFnZV90b19yYW0ocGFnZSk7CVwKKwl9IHdoaWxlICgwKQorCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGhvbGQgdGhlIHBoeXNpY2FsCisgKiBtZW1vcnkgY29uZmlndXJhdGlvbiBvZiB0aGUgbWFjaGluZS4gIFRoaXMgaXMgZmlsbGVkIGluCisgKiBwcm9tX21lbWluaXQoKSBhbmQgaXMgbGF0ZXIgdXNlZCBieSBtZW1faW5pdCgpIHRvIHNldCB1cAorICogbWVtX21hcFtdLiAgV2Ugc3RhdGljYWxseSBhbGxvY2F0ZSBTUEFSQ19QSFlTX0JBTktTKzEgb2YKKyAqIHRoZXNlIHN0cnVjdHMsIHRoaXMgaXMgYXJiaXRyYXJ5LiAgVGhlIGVudHJ5IGFmdGVyIHRoZQorICogbGFzdCB2YWxpZCBvbmUgaGFzIG51bV9ieXRlcz09MC4KKyAqLworc3RydWN0IHNwYXJjX3BoeXNfYmFua3MgeworICB1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjsKKyAgdW5zaWduZWQgbG9uZyBudW1fYnl0ZXM7Cit9OworCisjZGVmaW5lIFNQQVJDX1BIWVNfQkFOS1MgMzIKKworZXh0ZXJuIHN0cnVjdCBzcGFyY19waHlzX2JhbmtzIHNwX2JhbmtzW1NQQVJDX1BIWVNfQkFOS1MrMV07CisKKy8qIENhY2hlIGFsaWFzIHN0cnVjdHVyZS4gIEVudHJ5IGlzIHZhbGlkIGlmIGNvbnRleHQgIT0gLTEuICovCitzdHJ1Y3QgY2FjaGVfcGFsaWFzIHsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCWludCBjb250ZXh0OworfTsKKworLyogcGFzc2luZyBzdHJ1Y3RzIG9uIHRoZSBTcGFyYyBzbG93IHVzIGRvd24gdHJlbWVuZG91c2x5Li4uICovCisKKy8qICNkZWZpbmUgU1RSSUNUX01NX1RZUEVDSEVDS1MgKi8KKworI2lmZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBpb3B0ZTsgfSBpb3B0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZHZbMTZdOyB9IHBtZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBjdHhkOyB9IGN0eGRfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgaW9wZ3Byb3Q7IH0gaW9wZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorI2RlZmluZSBpb3B0ZV92YWwoeCkJKCh4KS5pb3B0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICgoeCkucG1kdlswXSkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKKyNkZWZpbmUgY3R4ZF92YWwoeCkJKCh4KS5jdHhkKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQorI2RlZmluZSBpb3BncHJvdF92YWwoeCkJKCh4KS5pb3BncHJvdCkKKworI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19pb3B0ZSh4KQkoKGlvcHRlX3QpIHsgKHgpIH0gKQorLyogI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKChwbWRfdCkgeyAoeCkgfSApICovIC8qIFhYWCBwcm9jZWR1cmUgd2l0aCBsb29wICovCisjZGVmaW5lIF9fcGdkKHgpCSgocGdkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX2N0eGQoeCkJKChjdHhkX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19pb3BncHJvdCh4KQkoKGlvcGdwcm90X3QpIHsgKHgpIH0gKQorCisjZWxzZQorLyoKKyAqIC4uIHdoaWxlIHRoZXNlIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBjb21waWxlcgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9wdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWR2WzE2XTsgfSBwbWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjdHhkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9wZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSh4KQorI2RlZmluZSBpb3B0ZV92YWwoeCkJKHgpCisjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZHZbMF0pCisjZGVmaW5lIHBnZF92YWwoeCkJKHgpCisjZGVmaW5lIGN0eGRfdmFsKHgpCSh4KQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSh4KQorI2RlZmluZSBpb3BncHJvdF92YWwoeCkJKHgpCisKKyNkZWZpbmUgX19wdGUoeCkJKHgpCisjZGVmaW5lIF9faW9wdGUoeCkJKHgpCisvKiAjZGVmaW5lIF9fcG1kKHgpICAgICAgICAoeCkgKi8gLyogWFhYIGxhdGVyICovCisjZGVmaW5lIF9fcGdkKHgpCSh4KQorI2RlZmluZSBfX2N0eGQoeCkJKHgpCisjZGVmaW5lIF9fcGdwcm90KHgpCSh4KQorI2RlZmluZSBfX2lvcGdwcm90KHgpCSh4KQorCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzcGFyY191bm1hcHBlZF9iYXNlOworCitCVEZJWFVQREVGX1NFVEhJKHNwYXJjX3VubWFwcGVkX2Jhc2UpCisKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCUJURklYVVBfU0VUSEkoc3BhcmNfdW5tYXBwZWRfYmFzZSkKKworI2Vsc2UgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKHgpCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikgICgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKyNkZWZpbmUgUEFHRV9PRkZTRVQJMHhmMDAwMDAwMAorI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBmbl9iYXNlOworI2VuZGlmCisjZGVmaW5lIF9fcGEoeCkJCQkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUEFHRV9PRkZTRVQgKyBwaHlzX2Jhc2UpCisjZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpICh4KSAtIHBoeXNfYmFzZSArIFBBR0VfT0ZGU0VUKSkKKworI2RlZmluZSB2aXJ0X3RvX3BoeXMJCV9fcGEKKyNkZWZpbmUgcGh5c190b192aXJ0CQlfX3ZhCisKKyNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQkocGZuX2Jhc2UpCisjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJKG1lbV9tYXAgKyAoKCgodW5zaWduZWQgbG9uZykoa2FkZHIpLVBBR0VfT0ZGU0VUKT4+UEFHRV9TSElGVCkpKQorCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKChwZm4pID49IChwZm5fYmFzZSkpICYmICgoKHBmbiktKHBmbl9iYXNlKSkgPCBtYXhfbWFwbnIpKQorI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCSgoKCh1bnNpZ25lZCBsb25nKShrYWRkciktUEFHRV9PRkZTRVQpPj5QQUdFX1NISUZUKSA8IG1heF9tYXBucikKKworI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCisJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYWdlLmg+CisKKyNlbmRpZiAvKiBfU1BBUkNfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wYWdlXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wYWdlXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMmJiYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BhZ2VfNjQuaApAQCAtMCwwICsxLDEzOCBAQAorI2lmbmRlZiBfU1BBUkM2NF9QQUdFX0gKKyNkZWZpbmUgX1NQQVJDNjRfUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfOEtCKQorI2RlZmluZSBQQUdFX1NISUZUICAgMTMKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzY0S0IpCisjZGVmaW5lIFBBR0VfU0hJRlQgICAxNgorI2Vsc2UKKyNlcnJvciBObyBwYWdlIHNpemUgc3BlY2lmaWVkIGluIGtlcm5lbCBjb25maWd1cmF0aW9uCisjZW5kaWYKKworI2RlZmluZSBQQUdFX1NJWkUgICAgKF9BQygxLFVMKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX01BU0sgICAgKH4oUEFHRV9TSVpFLTEpKQorCisvKiBGbHVzaGluZyBmb3IgRC1jYWNoZSBhbGlhcyBoYW5kbGluZyBpcyBvbmx5IG5lZWRlZCBpZgorICogdGhlIHBhZ2Ugc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMTZLLgorICovCisjaWYgUEFHRV9TSElGVCA8IDE0CisjZGVmaW5lIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIpCisjZGVmaW5lIEhQQUdFX1NISUZUCQkyMgorI2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEySykKKyNkZWZpbmUgSFBBR0VfU0hJRlQJCTE5CisjZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspCisjZGVmaW5lIEhQQUdFX1NISUZUCQkxNgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisjZGVmaW5lIEhQQUdFX1NJWkUJCShfQUMoMSxVTCkgPDwgSFBBR0VfU0hJRlQpCisjZGVmaW5lIEhQQUdFX01BU0sJCSh+KEhQQUdFX1NJWkUgLSAxVUwpKQorI2RlZmluZSBIVUdFVExCX1BBR0VfT1JERVIJKEhQQUdFX1NISUZUIC0gUEFHRV9TSElGVCkKKyNkZWZpbmUgSEFWRV9BUkNIX0hVR0VUTEJfVU5NQVBQRURfQVJFQQorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2lkIF9jbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOworI2RlZmluZSBjbGVhcl9wYWdlKFgpCV9jbGVhcl9wYWdlKCh2b2lkICopKFgpKQorc3RydWN0IHBhZ2U7CitleHRlcm4gdm9pZCBjbGVhcl91c2VyX3BhZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UpOworI2RlZmluZSBjb3B5X3BhZ2UoWCxZKQltZW1jcHkoKHZvaWQgKikoWCksICh2b2lkICopKFkpLCBQQUdFX1NJWkUpCitleHRlcm4gdm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHBhZ2UgKnRvcGFnZSk7CisKKy8qIFVubGlrZSBzcGFyYzMyLCBzcGFyYzY0J3MgcGFyYW1ldGVyIHBhc3NpbmcgQVBJIGlzIG1vcmUKKyAqIHNhbmUgaW4gdGhhdCBzdHJ1Y3R1cmVzIHdoaWNoIGFzIHNtYWxsIGVub3VnaCBhcmUgcGFzc2VkCisgKiBpbiByZWdpc3RlcnMgaW5zdGVhZCBvZiBvbiB0aGUgc3RhY2suICBUaHVzLCBzZXR0aW5nCisgKiBTVFJJQ1RfTU1fVFlQRUNIRUNLUyBkb2VzIG5vdCBnZW5lcmF0ZSB3b3JzZSBjb2RlIHNvCisgKiBsZXQncyBlbmFibGUgaXQgdG8gZ2V0IHRoZSB0eXBlIGNoZWNraW5nLgorICovCisKKyNkZWZpbmUgU1RSSUNUX01NX1RZUEVDSEVDS1MKKworI2lmZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCisvKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLiAqLwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBpb3B0ZTsgfSBpb3B0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgcG1kOyB9IHBtZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgcGdkOyB9IHBnZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorI2RlZmluZSBpb3B0ZV92YWwoeCkJKCh4KS5pb3B0ZSkKKyNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICgoeCkucG1kKQorI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQorCisjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX2lvcHRlKHgpCSgoaW9wdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpICAgICAgICAoKHBtZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ2QoeCkJKChwZ2RfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQorCisjZWxzZQorLyogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW9wdGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHBtZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgcGdkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoeCkKKyNkZWZpbmUgaW9wdGVfdmFsKHgpCSh4KQorI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpCisjZGVmaW5lIHBnZF92YWwoeCkJKHgpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKHgpCisKKyNkZWZpbmUgX19wdGUoeCkJKHgpCisjZGVmaW5lIF9faW9wdGUoeCkJKHgpCisjZGVmaW5lIF9fcG1kKHgpICAgICAgICAoeCkKKyNkZWZpbmUgX19wZ2QoeCkJKHgpCisjZGVmaW5lIF9fcGdwcm90KHgpCSh4KQorCisjZW5kaWYgLyogKFNUUklDVF9NTV9UWVBFQ0hFQ0tTKSAqLworCit0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7CisKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkgPyBcCisJCQkJIChfQUMoMHgwMDAwMDAwMDcwMDAwMDAwLFVMKSkgOiBcCisJCQkJIChfQUMoMHhmZmZmZjgwMDAwMDAwMDAwLFVMKSArICgxVUwgPDwgMzJVTCkpKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikJKCgoYWRkcikrUEFHRV9TSVpFLTEpJlBBR0VfTUFTSykKKworLyogV2UgdXNlZCB0byBzdGljayB0aGlzIGludG8gYSBoYXJkLWNvZGVkIGdsb2JhbCByZWdpc3RlciAoJWc0KQorICogYnV0IHRoYXQgZG9lcyBub3QgbWFrZSBzZW5zZSBhbnltb3JlLgorICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQlfQUMoMHhGRkZGRjgwMDAwMDAwMDAwLFVMKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIF9fcGEoeCkJCQkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUEFHRV9PRkZTRVQpCisjZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpICh4KSArIFBBR0VfT0ZGU0VUKSkKKworI2RlZmluZSBwZm5fdG9fa2FkZHIocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKT4+UEFHRV9TSElGVCkKKworI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorCisjZGVmaW5lIHZpcnRfdG9fcGh5cyBfX3BhCisjZGVmaW5lIHBoeXNfdG9fdmlydCBfX3ZhCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCisJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYWdlLmg+CisKKyNlbmRpZiAvKiBfU1BBUkM2NF9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BhcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODE4YjI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGFycG9ydC5oCkBAIC0wLDAgKzEsMjQ2IEBACisvKiBwYXJwb3J0Lmg6IHNwYXJjNjQgc3BlY2lmaWMgcGFycG9ydCBpbml0aWFsaXphdGlvbiBhbmQgZG1hLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCisgKi8KKworI2lmbmRlZiBfQVNNX1NQQVJDNjRfUEFSUE9SVF9ICisjZGVmaW5lIF9BU01fU1BBUkM2NF9QQVJQT1JUX0ggMQorCisjaW5jbHVkZSA8YXNtL2VidXMuaD4KKyNpbmNsdWRlIDxhc20vbnM4NzMwMy5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCisjZGVmaW5lIFBBUlBPUlRfUENfTUFYX1BPUlRTCVBBUlBPUlRfTUFYCisKKy8qCisgKiBXaGlsZSBzcGFyYzY0IGRvZXNuJ3QgaGF2ZSBhbiBJU0EgRE1BIEFQSSwgd2UgcHJvdmlkZSBzb21ldGhpbmcgdGhhdCBsb29rcworICogY2xvc2UgZW5vdWdoIHRvIG1ha2UgcGFycG9ydF9wYyBoYXBweQorICovCisjZGVmaW5lIEhBU19ETUEKKworc3RhdGljIERFRklORV9TUElOTE9DSyhkbWFfc3Bpbl9sb2NrKTsKKworI2RlZmluZSBjbGFpbV9kbWFfbG9jaygpIFwKKyh7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7IFwKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOyBcCisJZmxhZ3M7IFwKK30pCisKKyNkZWZpbmUgcmVsZWFzZV9kbWFfbG9jayhfX2ZsYWdzKSBcCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgX19mbGFncyk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3BhcmNfZWJ1c19pbmZvIHsKKwlzdHJ1Y3QgZWJ1c19kbWFfaW5mbyBpbmZvOworCXVuc2lnbmVkIGludCBhZGRyOworCXVuc2lnbmVkIGludCBjb3VudDsKKwlpbnQgbG9jazsKKworCXN0cnVjdCBwYXJwb3J0ICpwb3J0OworfSBzcGFyY19lYnVzX2RtYXNbUEFSUE9SVF9QQ19NQVhfUE9SVFNdOworCitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZG1hX3Nsb3RfbWFwLCBQQVJQT1JUX1BDX01BWF9QT1JUUyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqZGV2aWNlX2lkKQoreworCWlmIChkbWFuciA+PSBQQVJQT1JUX1BDX01BWF9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHhjaGcoJnNwYXJjX2VidXNfZG1hc1tkbWFucl0ubG9jaywgMSkgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnIgPj0gUEFSUE9SVF9QQ19NQVhfUE9SVFMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVHJ5aW5nIHRvIGZyZWUgRE1BJWRcbiIsIGRtYW5yKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoeGNoZygmc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5sb2NrLCAwKSA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRyeWluZyB0byBmcmVlIGZyZWUgRE1BJWRcbiIsIGRtYW5yKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCWVidXNfZG1hX2VuYWJsZSgmc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5pbmZvLCAxKTsKKworCWlmIChlYnVzX2RtYV9yZXF1ZXN0KCZzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmluZm8sCisJCQkgICAgIHNwYXJjX2VidXNfZG1hc1tkbWFucl0uYWRkciwKKwkJCSAgICAgc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5jb3VudCkpCisJCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQoreworCWVidXNfZG1hX2VuYWJsZSgmc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5pbmZvLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2RtYV9mZih1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJLyogbm90aGluZyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9tb2RlKHVuc2lnbmVkIGludCBkbWFuciwgY2hhciBtb2RlKQoreworCWVidXNfZG1hX3ByZXBhcmUoJnNwYXJjX2VidXNfZG1hc1tkbWFucl0uaW5mbywgKG1vZGUgIT0gRE1BX01PREVfV1JJVEUpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBhZGRyKQoreworCXNwYXJjX2VidXNfZG1hc1tkbWFucl0uYWRkciA9IGFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXNwYXJjX2VidXNfZG1hc1tkbWFucl0uY291bnQgPSBjb3VudDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlyZXR1cm4gZWJ1c19kbWFfcmVzaWR1ZSgmc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5pbmZvKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZWNwcF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gb3AtPnJlc291cmNlWzBdLnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgY29uZmlnID0gb3AtPnJlc291cmNlWzFdLnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZF9iYXNlID0gb3AtPnJlc291cmNlWzJdLnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZF9sZW47CisJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7CisJc3RydWN0IHBhcnBvcnQgKnA7CisJaW50IHNsb3QsIGVycjsKKworCXBhcmVudCA9IG9wLT5ub2RlLT5wYXJlbnQ7CisJaWYgKCFzdHJjbXAocGFyZW50LT5uYW1lLCAiZG1hIikpIHsKKwkJcCA9IHBhcnBvcnRfcGNfcHJvYmVfcG9ydChiYXNlLCBiYXNlICsgMHg0MDAsCisJCQkJCSAgb3AtPmlycXNbMF0sIFBBUlBPUlRfRE1BX05PRklGTywKKwkJCQkJICBvcC0+ZGV2LnBhcmVudC0+cGFyZW50KTsKKwkJaWYgKCFwKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgcCk7CisJCXJldHVybiAwOworCX0KKworCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBQQVJQT1JUX1BDX01BWF9QT1JUUzsgc2xvdCsrKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChzbG90LCBkbWFfc2xvdF9tYXApKQorCQkJYnJlYWs7CisJfQorCWVyciA9IC1FTk9ERVY7CisJaWYgKHNsb3QgPj0gUEFSUE9SVF9QQ19NQVhfUE9SVFMpCisJCWdvdG8gb3V0X2VycjsKKworCXNwaW5fbG9ja19pbml0KCZzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mby5sb2NrKTsKKworCWRfbGVuID0gKG9wLT5yZXNvdXJjZVsyXS5lbmQgLSBkX2Jhc2UpICsgMVVMOworCXNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvLnJlZ3MgPQorCQlvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMl0sIDAsIGRfbGVuLCAiRUNQUCBETUEiKTsKKworCWlmICghc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8ucmVncykKKwkJZ290byBvdXRfY2xlYXJfbWFwOworCisJc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8uZmxhZ3MgPSAwOworCXNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvLmNhbGxiYWNrID0gTlVMTDsKKwlzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mby5jbGllbnRfY29va2llID0gTlVMTDsKKwlzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mby5pcnEgPSAweGRlYWRiZWVmOworCXN0cmNweShzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mby5uYW1lLCAicGFycG9ydCIpOworCWlmIChlYnVzX2RtYV9yZWdpc3Rlcigmc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8pKQorCQlnb3RvIG91dF91bm1hcF9yZWdzOworCisJZWJ1c19kbWFfaXJxX2VuYWJsZSgmc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8sIDEpOworCisJLyogQ29uZmlndXJlIElSUSB0byBQdXNoIFB1bGwsIExldmVsIExvdyAqLworCS8qIEVuYWJsZSBFQ1AsIHNldCBiaXQgMiBvZiB0aGUgQ1RSIGZpcnN0ICovCisJb3V0YigweDA0LCBiYXNlICsgMHgwMik7CisJbnM4NzMwM19tb2RpZnkoY29uZmlnLCBQQ1IsCisJCSAgICAgICBQQ1JfRVBQX0VOQUJMRSB8CisJCSAgICAgICBQQ1JfSVJRX09EUkFJTiwKKwkJICAgICAgIFBDUl9FQ1BfRU5BQkxFIHwKKwkJICAgICAgIFBDUl9FQ1BfQ0xLX0VOQSB8CisJCSAgICAgICBQQ1JfSVJRX1BPTEFSKTsKKworCS8qIENUUiBiaXQgNSBjb250cm9scyBkaXJlY3Rpb24gb2YgcG9ydCAqLworCW5zODczMDNfbW9kaWZ5KGNvbmZpZywgUFRSLAorCQkgICAgICAgMCwgUFRSX0xQVF9SRUdfRElSKTsKKworCXAgPSBwYXJwb3J0X3BjX3Byb2JlX3BvcnQoYmFzZSwgYmFzZSArIDB4NDAwLAorCQkJCSAgb3AtPmlycXNbMF0sCisJCQkJICBzbG90LAorCQkJCSAgb3AtPmRldi5wYXJlbnQpOworCWVyciA9IC1FTk9NRU07CisJaWYgKCFwKQorCQlnb3RvIG91dF9kaXNhYmxlX2lycTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgcCk7CisKKwlyZXR1cm4gMDsKKworb3V0X2Rpc2FibGVfaXJxOgorCWVidXNfZG1hX2lycV9lbmFibGUoJnNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvLCAwKTsKKwllYnVzX2RtYV91bnJlZ2lzdGVyKCZzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mbyk7CisKK291dF91bm1hcF9yZWdzOgorCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVsyXSwgc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8ucmVncywgZF9sZW4pOworCitvdXRfY2xlYXJfbWFwOgorCWNsZWFyX2JpdChzbG90LCBkbWFfc2xvdF9tYXApOworCitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGVjcHBfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBwYXJwb3J0ICpwID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlpbnQgc2xvdCA9IHAtPmRtYTsKKworCXBhcnBvcnRfcGNfdW5yZWdpc3Rlcl9wb3J0KHApOworCisJaWYgKHNsb3QgIT0gUEFSUE9SVF9ETUFfTk9GSUZPKSB7CisJCXVuc2lnbmVkIGxvbmcgZF9iYXNlID0gb3AtPnJlc291cmNlWzJdLnN0YXJ0OworCQl1bnNpZ25lZCBsb25nIGRfbGVuOworCisJCWRfbGVuID0gKG9wLT5yZXNvdXJjZVsyXS5lbmQgLSBkX2Jhc2UpICsgMVVMOworCisJCWVidXNfZG1hX2lycV9lbmFibGUoJnNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvLCAwKTsKKwkJZWJ1c19kbWFfdW5yZWdpc3Rlcigmc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8pOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMl0sCisJCQkgICBzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mby5yZWdzLAorCQkJICAgZF9sZW4pOworCQljbGVhcl9iaXQoc2xvdCwgZG1hX3Nsb3RfbWFwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZWNwcF9tYXRjaFtdID0geworCXsKKwkJLm5hbWUgPSAiZWNwcCIsCisJfSwKKwl7CisJCS5uYW1lID0gInBhcmFsbGVsIiwKKwkJLmNvbXBhdGlibGUgPSAiZWNwcCIsCisJfSwKKwl7CisJCS5uYW1lID0gInBhcmFsbGVsIiwKKwkJLmNvbXBhdGlibGUgPSAibnM4NzMxNy1lY3BwIiwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZWNwcF9kcml2ZXIgPSB7CisJLm5hbWUJCQk9ICJlY3BwIiwKKwkubWF0Y2hfdGFibGUJCT0gZWNwcF9tYXRjaCwKKwkucHJvYmUJCQk9IGVjcHBfcHJvYmUsCisJLnJlbW92ZQkJCT0gX19kZXZleGl0X3AoZWNwcF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBwYXJwb3J0X3BjX2ZpbmRfbm9ucGNpX3BvcnRzKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3sKKwlvZl9yZWdpc3Rlcl9kcml2ZXIoJmVjcHBfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiAhKF9BU01fU1BBUkM2NF9QQVJQT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BjaS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGNpLmgKaW5kZXggYjkzYjZjNy4uYjgwN2Q1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGNpLmgKQEAgLTEsMTcwICsxLDggQEAKLSNpZm5kZWYgX19TUEFSQ19QQ0lfSAotI2RlZmluZSBfX1NQQVJDX1BDSV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBsb2dpYyBpbiBwY2lfc2Nhbl9idXMgZm9yIHNraXBwaW5nCi0gKiBhbHJlYWR5LWNvbmZpZ3VyZWQgYnVzIG51bWJlcnMgLSB0byBiZSB1c2VkIGZvciBidWdneSBCSU9TZXMKLSAqIG9yIGFyY2hpdGVjdHVyZXMgd2l0aCBpbmNvbXBsZXRlIFBDSSBzZXR1cCBieSB0aGUgbG9hZGVyLgotICovCi0jZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkwCi0jZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKLQotI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMFVMCi0jZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMFVMCi0KLSNkZWZpbmUgUENJX0lSUV9OT05FCQkweGZmZmZmZmZmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQkvKiBObyBzcGVjaWFsIGJ1cyBtYXN0ZXJpbmcgc2V0dXAgaGFuZGxpbmcgKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxLCBpbnQgYWN0aXZlKQotewotCS8qIFdlIGRvbid0IGRvIGR5bmFtaWMgUENJIElSUSBhbGxvY2F0aW9uICovCi19Ci0KLS8qIER5bmFtaWMgRE1BIG1hcHBpbmcgc3R1ZmYuCi0gKi8KLSNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMCkKLQotI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgotCi1zdHJ1Y3QgcGNpX2RldjsKLQotLyogQWxsb2NhdGUgYW5kIG1hcCBrZXJuZWwgYnVmZmVyIHVzaW5nIGNvbnNpc3RlbnQgbW9kZSBETUEgZm9yIGEgZGV2aWNlLgotICogaHdkZXYgc2hvdWxkIGJlIHZhbGlkIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgZm9yIFBDSSBkZXZpY2VzLgotICovCi1leHRlcm4gdm9pZCAqcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSk7Ci0KLS8qIEZyZWUgYW5kIHVubWFwIGEgY29uc2lzdGVudCBETUEgYnVmZmVyLgotICogY3B1X2FkZHIgaXMgd2hhdCB3YXMgcmV0dXJuZWQgZnJvbSBwY2lfYWxsb2NfY29uc2lzdGVudCwKLSAqIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB3aGF0IGFzIHBhc3NlZCBpbnRvIHBjaV9hbGxvY19jb25zaXN0ZW50LAotICogYW5kIGxpa2V3aXNlIGRtYV9hZGRyIG11c3QgYmUgdGhlIHNhbWUgYXMgd2hhdCAqZG1hX2FkZHJwIHdhcyBzZXQgdG8uCi0gKgotICogUmVmZXJlbmNlcyB0byB0aGUgbWVtb3J5IGFuZCBtYXBwaW5ncyBhc3Nvc2NpYXRlZCB3aXRoIGNwdV9hZGRyL2RtYV9hZGRyCi0gKiBwYXN0IHRoaXMgY2FsbCBhcmUgaWxsZWdhbC4KLSAqLwotZXh0ZXJuIHZvaWQgcGNpX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKLQotLyogTWFwIGEgc2luZ2xlIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4KLSAqIFRoZSAzMi1iaXQgYnVzIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgotICoKLSAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeQotICogdW50aWwgZWl0aGVyIHBjaV91bm1hcF9zaW5nbGUgb3IgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1IGlzIHBlcmZvcm1lZC4KLSAqLwotZXh0ZXJuIGRtYV9hZGRyX3QgcGNpX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQotLyogVW5tYXAgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uLiAgVGhlIGRtYV9hZGRyIGFuZCBzaXplCi0gKiBtdXN0IG1hdGNoIHdoYXQgd2FzIHByb3ZpZGVkIGZvciBpbiBhIHByZXZpb3VzIHBjaV9tYXBfc2luZ2xlIGNhbGwuICBBbGwKLSAqIG90aGVyIHVzYWdlcyBhcmUgdW5kZWZpbmVkLgotICoKLSAqIEFmdGVyIHRoaXMgY2FsbCwgcmVhZHMgYnkgdGhlIGNwdSB0byB0aGUgYnVmZmVyIGFyZSBndWFyYW50ZWVkIHRvIHNlZQotICogd2hhdGV2ZXIgdGhlIGRldmljZSB3cm90ZSB0aGVyZS4KLSAqLwotZXh0ZXJuIHZvaWQgcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQotLyogcGNpX3VubWFwX3tzaW5nbGUscGFnZX0gaXMgbm90IGEgbm9wLCB0aHVzLi4uICovCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQlcCi0JZG1hX2FkZHJfdCBBRERSX05BTUU7Ci0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJCVwKLQlfX3UzMiBMRU5fTkFNRTsKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkJXAotCSgoUFRSKS0+QUREUl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJCVwKLQkoKChQVFIpLT5BRERSX05BTUUpID0gKFZBTCkpCi0jZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCQlcCi0JKChQVFIpLT5MRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQkJXAotCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQotCi0vKgotICogU2FtZSBhcyBhYm92ZSwgb25seSB3aXRoIHBhZ2VzIGluc3RlYWQgb2YgbWFwcGVkIGFkZHJlc3Nlcy4KLSAqLwotZXh0ZXJuIGRtYV9hZGRyX3QgcGNpX21hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotZXh0ZXJuIHZvaWQgcGNpX3VubWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAotCQkJZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCi0vKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCi0gKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0aGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQotICogYWJvdmUgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAotICogZWxlbWVudHMgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRtYSBhZGRyZXNzCi0gKiBhbmQgbGVuZ3RoLiAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KLSAqCi0gKiBOT1RFOiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgYWJsZSB0byB1c2UgYSBzbWFsbGVyIG51bWJlciBvZgotICogICAgICAgRE1BIGFkZHJlc3MvbGVuZ3RoIHBhaXJzIHRoYW4gdGhlcmUgYXJlIFNHIHRhYmxlIGVsZW1lbnRzLgotICogICAgICAgKGZvciBleGFtcGxlIHZpYSB2aXJ0dWFsIG1hcHBpbmcgY2FwYWJpbGl0aWVzKQotICogICAgICAgVGhlIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFkZHIvbGVuZ3RoIHBhaXJzIGFjdHVhbGx5Ci0gKiAgICAgICB1c2VkLCBhdCBtb3N0IG5lbnRzLgotICoKLSAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgcGNpX21hcF9zaW5nbGUgYXJlCi0gKiB0aGUgc2FtZSBoZXJlLgotICovCi1leHRlcm4gaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOwotCi0vKiBVbm1hcCBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb25zLgotICogQWdhaW4sIGNwdSByZWFkIHJ1bGVzIGNvbmNlcm5pbmcgY2FsbHMgaGVyZSBhcmUgdGhlIHNhbWUgYXMgZm9yCi0gKiBwY2lfdW5tYXBfc2luZ2xlKCkgYWJvdmUuCi0gKi8KLWV4dGVybiB2b2lkIHBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRzLCBpbnQgZGlyZWN0aW9uKTsKLQotLyogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzaW5nbGUKLSAqIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbiBhZnRlciBhIHRyYW5zZmVyLgotICoKLSAqIElmIHlvdSBwZXJmb3JtIGEgcGNpX21hcF9zaW5nbGUoKSBidXQgd2lzaCB0byBpbnRlcnJvZ2F0ZSB0aGUKLSAqIGJ1ZmZlciB1c2luZyB0aGUgY3B1LCB5ZXQgZG8gbm90IHdpc2ggdG8gdGVhcmRvd24gdGhlIFBDSSBkbWEKLSAqIG1hcHBpbmcsIHlvdSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgZG9pbmcgc28uICBBdCB0aGUKLSAqIG5leHQgcG9pbnQgeW91IGdpdmUgdGhlIFBDSSBkbWEgYWRkcmVzcyBiYWNrIHRvIHRoZSBjYXJkLCB5b3UKLSAqIG11c3QgZmlyc3QgcGVyZm9ybSBhIHBjaV9kbWFfc3luY19mb3JfZGV2aWNlLCBhbmQgdGhlbiB0aGUgZGV2aWNlCi0gKiBhZ2FpbiBvd25zIHRoZSBidWZmZXIuCi0gKi8KLWV4dGVybiB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotZXh0ZXJuIHZvaWQgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0KLS8qIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2V0IG9mIHN0cmVhbWluZwotICogbW9kZSBETUEgdHJhbnNsYXRpb25zIGFmdGVyIGEgdHJhbnNmZXIuCi0gKgotICogVGhlIHNhbWUgYXMgcGNpX2RtYV9zeW5jX3NpbmdsZV8qIGJ1dCBmb3IgYSBzY2F0dGVyLWdhdGhlciBsaXN0LAotICogc2FtZSBydWxlcyBhbmQgdXNhZ2UuCi0gKi8KLWV4dGVybiB2b2lkIHBjaV9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbik7Ci1leHRlcm4gdm9pZCBwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pOwotCi0vKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gUENJIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbgotICogYmUgc3VwcG9ydGVkIHByb3Blcmx5LiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgZGV2aWNlIGNhbgotICogb25seSBkcml2ZSB0aGUgbG93IDI0LWJpdHMgZHVyaW5nIFBDSSBidXMgbWFzdGVyaW5nLCB0aGVuCi0gKiB5b3Ugd291bGQgcGFzcyAweDAwZmZmZmZmIGFzIHRoZSBtYXNrIHRvIHRoaXMgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgdTY0IG1hc2spCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKnN0cmF0ZWd5X3BhcmFtZXRlcikKLXsKLQkqc3RyYXQgPSBQQ0lfRE1BX0JVUlNUX0lORklOSVRZOwotCSpzdHJhdGVneV9wYXJhbWV0ZXIgPSB+MFVMOwotfQorI2lmbmRlZiBfX19BU01fU1BBUkNfUENJX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1BDSV9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvcGNpXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9wY2lfMzIuaD4KICNlbmRpZgotCi0jZGVmaW5lIFBDSV9ETUFfRVJST1JfQ09ERSAgICAgICh+KGRtYV9hZGRyX3QpMHgwKQotCi1zdGF0aWMgaW5saW5lIGludCBwY2lfZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLSAgICAgICAgcmV0dXJuIChkbWFfYWRkciA9PSBQQ0lfRE1BX0VSUk9SX0NPREUpOwotfQotCi1zdHJ1Y3QgZGV2aWNlX25vZGU7Ci1leHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpwY2lfZGV2aWNlX3RvX09GX25vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0vKiBnZW5lcmljIHBjaSBzdHVmZiAqLwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS5oPgotCi0jZW5kaWYgLyogX19TUEFSQ19QQ0lfSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wY2lfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BjaV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2I2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wY2lfMzIuaApAQCAtMCwwICsxLDE3MCBAQAorI2lmbmRlZiBfX1NQQVJDX1BDSV9ICisjZGVmaW5lIF9fU1BBUkNfUENJX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGxvZ2ljIGluIHBjaV9zY2FuX2J1cyBmb3Igc2tpcHBpbmcKKyAqIGFscmVhZHktY29uZmlndXJlZCBidXMgbnVtYmVycyAtIHRvIGJlIHVzZWQgZm9yIGJ1Z2d5IEJJT1NlcworICogb3IgYXJjaGl0ZWN0dXJlcyB3aXRoIGluY29tcGxldGUgUENJIHNldHVwIGJ5IHRoZSBsb2FkZXIuCisgKi8KKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTAKKyNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAorCisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkwVUwKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkwVUwKKworI2RlZmluZSBQQ0lfSVJRX05PTkUJCTB4ZmZmZmZmZmYKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEsIGludCBhY3RpdmUpCit7CisJLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KK30KKworLyogRHluYW1pYyBETUEgbWFwcGluZyBzdHVmZi4KKyAqLworI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgwKQorCisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKK3N0cnVjdCBwY2lfZGV2OworCisvKiBBbGxvY2F0ZSBhbmQgbWFwIGtlcm5lbCBidWZmZXIgdXNpbmcgY29uc2lzdGVudCBtb2RlIERNQSBmb3IgYSBkZXZpY2UuCisgKiBod2RldiBzaG91bGQgYmUgdmFsaWQgc3RydWN0IHBjaV9kZXYgcG9pbnRlciBmb3IgUENJIGRldmljZXMuCisgKi8KK2V4dGVybiB2b2lkICpwY2lfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlKTsKKworLyogRnJlZSBhbmQgdW5tYXAgYSBjb25zaXN0ZW50IERNQSBidWZmZXIuCisgKiBjcHVfYWRkciBpcyB3aGF0IHdhcyByZXR1cm5lZCBmcm9tIHBjaV9hbGxvY19jb25zaXN0ZW50LAorICogc2l6ZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHdoYXQgYXMgcGFzc2VkIGludG8gcGNpX2FsbG9jX2NvbnNpc3RlbnQsCisgKiBhbmQgbGlrZXdpc2UgZG1hX2FkZHIgbXVzdCBiZSB0aGUgc2FtZSBhcyB3aGF0ICpkbWFfYWRkcnAgd2FzIHNldCB0by4KKyAqCisgKiBSZWZlcmVuY2VzIHRvIHRoZSBtZW1vcnkgYW5kIG1hcHBpbmdzIGFzc29zY2lhdGVkIHdpdGggY3B1X2FkZHIvZG1hX2FkZHIKKyAqIHBhc3QgdGhpcyBjYWxsIGFyZSBpbGxlZ2FsLgorICovCitleHRlcm4gdm9pZCBwY2lfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOworCisvKiBNYXAgYSBzaW5nbGUgYnVmZmVyIG9mIHRoZSBpbmRpY2F0ZWQgc2l6ZSBmb3IgRE1BIGluIHN0cmVhbWluZyBtb2RlLgorICogVGhlIDMyLWJpdCBidXMgYWRkcmVzcyB0byB1c2UgaXMgcmV0dXJuZWQuCisgKgorICogT25jZSB0aGUgZGV2aWNlIGlzIGdpdmVuIHRoZSBkbWEgYWRkcmVzcywgdGhlIGRldmljZSBvd25zIHRoaXMgbWVtb3J5CisgKiB1bnRpbCBlaXRoZXIgcGNpX3VubWFwX3NpbmdsZSBvciBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUgaXMgcGVyZm9ybWVkLgorICovCitleHRlcm4gZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOworCisvKiBVbm1hcCBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24uICBUaGUgZG1hX2FkZHIgYW5kIHNpemUKKyAqIG11c3QgbWF0Y2ggd2hhdCB3YXMgcHJvdmlkZWQgZm9yIGluIGEgcHJldmlvdXMgcGNpX21hcF9zaW5nbGUgY2FsbC4gIEFsbAorICogb3RoZXIgdXNhZ2VzIGFyZSB1bmRlZmluZWQuCisgKgorICogQWZ0ZXIgdGhpcyBjYWxsLCByZWFkcyBieSB0aGUgY3B1IHRvIHRoZSBidWZmZXIgYXJlIGd1YXJhbnRlZWQgdG8gc2VlCisgKiB3aGF0ZXZlciB0aGUgZGV2aWNlIHdyb3RlIHRoZXJlLgorICovCitleHRlcm4gdm9pZCBwY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOworCisvKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKy8qCisgKiBTYW1lIGFzIGFib3ZlLCBvbmx5IHdpdGggcGFnZXMgaW5zdGVhZCBvZiBtYXBwZWQgYWRkcmVzc2VzLgorICovCitleHRlcm4gZG1hX2FkZHJfdCBwY2lfbWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBwY2lfdW5tYXBfcGFnZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsCisJCQlkbWFfYWRkcl90IGRtYV9hZGRyZXNzLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisKKy8qIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKKyAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXRoZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCisgKiBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CisgKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKKyAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgorICoKKyAqIE5PVEU6IEFuIGltcGxlbWVudGF0aW9uIG1heSBiZSBhYmxlIHRvIHVzZSBhIHNtYWxsZXIgbnVtYmVyIG9mCisgKiAgICAgICBETUEgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhhbiB0aGVyZSBhcmUgU0cgdGFibGUgZWxlbWVudHMuCisgKiAgICAgICAoZm9yIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpCisgKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKKyAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCisgKgorICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBwY2lfbWFwX3NpbmdsZSBhcmUKKyAqIHRoZSBzYW1lIGhlcmUuCisgKi8KK2V4dGVybiBpbnQgcGNpX21hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywgaW50IGRpcmVjdGlvbik7CisKKy8qIFVubWFwIGEgc2V0IG9mIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbnMuCisgKiBBZ2FpbiwgY3B1IHJlYWQgcnVsZXMgY29uY2VybmluZyBjYWxscyBoZXJlIGFyZSB0aGUgc2FtZSBhcyBmb3IKKyAqIHBjaV91bm1hcF9zaW5nbGUoKSBhYm92ZS4KKyAqLworZXh0ZXJuIHZvaWQgcGNpX3VubWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5od2VudHMsIGludCBkaXJlY3Rpb24pOworCisvKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNpbmdsZQorICogc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uIGFmdGVyIGEgdHJhbnNmZXIuCisgKgorICogSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZQorICogYnVmZmVyIHVzaW5nIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYQorICogbWFwcGluZywgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZQorICogbmV4dCBwb2ludCB5b3UgZ2l2ZSB0aGUgUENJIGRtYSBhZGRyZXNzIGJhY2sgdG8gdGhlIGNhcmQsIHlvdQorICogbXVzdCBmaXJzdCBwZXJmb3JtIGEgcGNpX2RtYV9zeW5jX2Zvcl9kZXZpY2UsIGFuZCB0aGVuIHRoZSBkZXZpY2UKKyAqIGFnYWluIG93bnMgdGhlIGJ1ZmZlci4KKyAqLworZXh0ZXJuIHZvaWQgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworLyogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzZXQgb2Ygc3RyZWFtaW5nCisgKiBtb2RlIERNQSB0cmFuc2xhdGlvbnMgYWZ0ZXIgYSB0cmFuc2Zlci4KKyAqCisgKiBUaGUgc2FtZSBhcyBwY2lfZG1hX3N5bmNfc2luZ2xlXyogYnV0IGZvciBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsCisgKiBzYW1lIHJ1bGVzIGFuZCB1c2FnZS4KKyAqLworZXh0ZXJuIHZvaWQgcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIHBjaV9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbik7CisKKy8qIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBQQ0kgZGV2aWNlIERNQSBhZGRyZXNzIG1hc2sgY2FuCisgKiBiZSBzdXBwb3J0ZWQgcHJvcGVybHkuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkZXZpY2UgY2FuCisgKiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcsIHRoZW4KKyAqIHlvdSB3b3VsZCBwYXNzIDB4MDBmZmZmZmYgYXMgdGhlIG1hc2sgdG8gdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gMTsKK30KKworI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX2J1cnN0X2FkdmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJZW51bSBwY2lfZG1hX2J1cnN0X3N0cmF0ZWd5ICpzdHJhdCwKKwkJCQkJdW5zaWduZWQgbG9uZyAqc3RyYXRlZ3lfcGFyYW1ldGVyKQoreworCSpzdHJhdCA9IFBDSV9ETUFfQlVSU1RfSU5GSU5JVFk7CisJKnN0cmF0ZWd5X3BhcmFtZXRlciA9IH4wVUw7Cit9CisjZW5kaWYKKworI2RlZmluZSBQQ0lfRE1BX0VSUk9SX0NPREUgICAgICAofihkbWFfYWRkcl90KTB4MCkKKworc3RhdGljIGlubGluZSBpbnQgcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisgICAgICAgIHJldHVybiAoZG1hX2FkZHIgPT0gUENJX0RNQV9FUlJPUl9DT0RFKTsKK30KKworc3RydWN0IGRldmljZV9ub2RlOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNpX2RldmljZV90b19PRl9ub2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyogZ2VuZXJpYyBwY2kgc3R1ZmYgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2kuaD4KKworI2VuZGlmIC8qIF9fU1BBUkNfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BjaV82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGNpXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5ZjI1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BjaV82NC5oCkBAIC0wLDAgKzEsMjA5IEBACisjaWZuZGVmIF9fU1BBUkM2NF9QQ0lfSAorI2RlZmluZSBfX1NQQVJDNjRfUENJX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKy8qIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBsb2dpYyBpbiBwY2lfc2Nhbl9idXMgZm9yIHNraXBwaW5nCisgKiBhbHJlYWR5LWNvbmZpZ3VyZWQgYnVzIG51bWJlcnMgLSB0byBiZSB1c2VkIGZvciBidWdneSBCSU9TZXMKKyAqIG9yIGFyY2hpdGVjdHVyZXMgd2l0aCBpbmNvbXBsZXRlIFBDSSBzZXR1cCBieSB0aGUgbG9hZGVyLgorICovCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkwCisjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKKworI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMFVMCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMFVMCisKKyNkZWZpbmUgUENJX0lSUV9OT05FCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgUENJX0NBQ0hFX0xJTkVfQllURVMJNjQKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEsIGludCBhY3RpdmUpCit7CisJLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KK30KKworLyogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgbm90IGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCisgKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMCkKKworc3RhdGljIGlubGluZSB2b2lkICpwY2lfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUsCisJCQkJCSBkbWFfYWRkcl90ICpkbWFfaGFuZGxlKQoreworCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgR0ZQX0FUT01JQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwlyZXR1cm4gZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGNpX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKnB0ciwKKwkJCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJcmV0dXJuIGRtYV9tYXBfc2luZ2xlKCZwZGV2LT5kZXYsIHB0ciwgc2l6ZSwKKwkJCSAgICAgIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV91bm1hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWRtYV91bm1hcF9zaW5nbGUoJnBkZXYtPmRldiwgZG1hX2FkZHIsIHNpemUsCisJCQkgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKSBkaXJlY3Rpb24pOworfQorCisjZGVmaW5lIHBjaV9tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZiwgc2l6ZSwgZGlyKSBcCisJcGNpX21hcF9zaW5nbGUoZGV2LCAocGFnZV9hZGRyZXNzKHBhZ2UpICsgKG9mZikpLCBzaXplLCBkaXIpCisjZGVmaW5lIHBjaV91bm1hcF9wYWdlKGRldixhZGRyLHN6LGRpcikgXAorCXBjaV91bm1hcF9zaW5nbGUoZGV2LGFkZHIsc3osZGlyKQorCisvKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKK3sKKwlyZXR1cm4gZG1hX21hcF9zZygmcGRldi0+ZGV2LCBzZywgbmVudHMsCisJCQkgIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCit7CisJZG1hX3VubWFwX3NnKCZwZGV2LT5kZXYsIHNnLCBuZW50cywKKwkJICAgICAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3sKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmcGRldi0+ZGV2LCBkbWFfaGFuZGxlLCBzaXplLAorCQkJCShlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJCSAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkJICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3sKKwkvKiBObyBmbHVzaGluZyBuZWVkZWQgdG8gc3luYyBjcHUgd3JpdGVzIHRvIHRoZSBkZXZpY2UuICAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJCSAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKK3sKKwlkbWFfc3luY19zZ19mb3JfY3B1KCZwZGV2LT5kZXYsIHNnLCBuZW50cywKKwkJCSAgICAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkJICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKKwkvKiBObyBmbHVzaGluZyBuZWVkZWQgdG8gc3luYyBjcHUgd3JpdGVzIHRvIHRoZSBkZXZpY2UuICAqLworfQorCisvKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gUENJIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbgorICogYmUgc3VwcG9ydGVkIHByb3Blcmx5LiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgZGV2aWNlIGNhbgorICogb25seSBkcml2ZSB0aGUgbG93IDI0LWJpdHMgZHVyaW5nIFBDSSBidXMgbWFzdGVyaW5nLCB0aGVuCisgKiB5b3Ugd291bGQgcGFzcyAweDAwZmZmZmZmIGFzIHRoZSBtYXNrIHRvIHRoaXMgZnVuY3Rpb24uCisgKi8KK2V4dGVybiBpbnQgcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzayk7CisKKy8qIFBDSSBJT01NVSBtYXBwaW5nIGJ5cGFzcyBzdXBwb3J0LiAqLworCisvKiBQQ0kgNjQtYml0IGFkZHJlc3Npbmcgd29ya3MgZm9yIGFsbCBzbG90cyBvbiBhbGwgY29udHJvbGxlcgorICogdHlwZXMgb24gc3BhcmM2NC4gIEhvd2V2ZXIsIGl0IHJlcXVpcmVzIHRoYXQgdGhlIGRldmljZQorICogY2FuIGRyaXZlIGVub3VnaCBvZiB0aGUgNjQgYml0cy4KKyAqLworI2RlZmluZSBQQ0k2NF9SRVFVSVJFRF9NQVNLCSh+KGRtYTY0X2FkZHJfdCkwKQorI2RlZmluZSBQQ0k2NF9BRERSX0JBU0UJCTB4ZmZmYzAwMDAwMDAwMDAwMFVMCisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9kbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCXJldHVybiBkbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcik7Cit9CisKKyNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCisJCQkJCXVuc2lnbmVkIGxvbmcgKnN0cmF0ZWd5X3BhcmFtZXRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGNhY2hlbGluZV9zaXplOworCXU4IGJ5dGU7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmYnl0ZSk7CisJaWYgKGJ5dGUgPT0gMCkKKwkJY2FjaGVsaW5lX3NpemUgPSAxMDI0OworCWVsc2UKKwkJY2FjaGVsaW5lX3NpemUgPSAoaW50KSBieXRlICogNDsKKworCSpzdHJhdCA9IFBDSV9ETUFfQlVSU1RfQk9VTkRBUlk7CisJKnN0cmF0ZWd5X3BhcmFtZXRlciA9IGNhY2hlbGluZV9zaXplOworfQorI2VuZGlmCisKKy8qIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIFBDSSBjb250cm9sbGVyIGZvciBkZXZpY2UgUERFVi4gKi8KKworZXh0ZXJuIGludCBwY2lfZG9tYWluX25yKHN0cnVjdCBwY2lfYnVzICpidXMpOworc3RhdGljIGlubGluZSBpbnQgcGNpX3Byb2NfZG9tYWluKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJcmV0dXJuIDE7Cit9CisKKy8qIFBsYXRmb3JtIHN1cHBvcnQgZm9yIC9wcm9jL2J1cy9wY2kvWC9ZIG1tYXAoKXMuICovCisKKyNkZWZpbmUgSEFWRV9QQ0lfTU1BUAorI2RlZmluZSBIQVZFX0FSQ0hfUENJX0dFVF9VTk1BUFBFRF9BUkVBCisjZGVmaW5lIGdldF9wY2lfdW5tYXBwZWRfYXJlYSBnZXRfZmJfdW5tYXBwZWRfYXJlYQorCitleHRlcm4gaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgICAgZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLAorCQkJICAgICAgIGludCB3cml0ZV9jb21iaW5lKTsKKworZXh0ZXJuIHZvaWQKK3BjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uLAorCQkJc3RydWN0IHJlc291cmNlICpyZXMpOworCitleHRlcm4gdm9pZAorcGNpYmlvc19idXNfdG9fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbik7CisKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgKnBjaWJpb3Nfc2VsZWN0X3Jvb3Qoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHJlc291cmNlICopOworCitzdGF0aWMgaW5saW5lIGludCBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjaGFubmVsKQoreworCXJldHVybiBQQ0lfSVJRX05PTkU7Cit9CisKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjaV9kZXZpY2VfdG9fT0Zfbm9kZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisKKyNkZWZpbmUgSEFWRV9BUkNIX1BDSV9SRVNPVVJDRV9UT19VU0VSCitleHRlcm4gdm9pZCBwY2lfcmVzb3VyY2VfdG9fdXNlcihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgYmFyLAorCQkJCSBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJzcmMsCisJCQkJIHJlc291cmNlX3NpemVfdCAqc3RhcnQsIHJlc291cmNlX3NpemVfdCAqZW5kKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX1NQQVJDNjRfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGVyY3B1LmgKaW5kZXggMDYwNjZhNy4uZDk4ZWQ2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGVyY3B1LmgKQEAgLTEsNiArMSw4IEBACi0jaWZuZGVmIF9fQVJDSF9TUEFSQ19QRVJDUFVfXwotI2RlZmluZSBfX0FSQ0hfU1BBUkNfUEVSQ1BVX18KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgotCi0jZW5kaWYgLyogX19BUkNIX1NQQVJDX1BFUkNQVV9fICovCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19QRVJDUFVfSAorI2RlZmluZSBfX19BU01fU1BBUkNfUEVSQ1BVX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9wZXJjcHVfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL3BlcmNwdV8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BlcmNwdV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGVyY3B1XzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwNjZhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BlcmNwdV8zMi5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FSQ0hfU1BBUkNfUEVSQ1BVX18KKyNkZWZpbmUgX19BUkNIX1NQQVJDX1BFUkNQVV9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKworI2VuZGlmIC8qIF9fQVJDSF9TUEFSQ19QRVJDUFVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGVyY3B1XzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZXJjcHVfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWU2NDU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGVyY3B1XzY0LmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfX0FSQ0hfU1BBUkM2NF9QRVJDUFVfXworI2RlZmluZSBfX0FSQ0hfU1BBUkM2NF9QRVJDUFVfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2xvY2FsX3Blcl9jcHVfb2Zmc2V0IGFzbSgiZzUiKTsKKworI2lmZGVmIENPTkZJR19TTVAKKworZXh0ZXJuIHZvaWQgcmVhbF9zZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfYmFzZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9zaGlmdDsKKyNkZWZpbmUgX19wZXJfY3B1X29mZnNldChfX2NwdSkgXAorCShfX3Blcl9jcHVfYmFzZSArICgodW5zaWduZWQgbG9uZykoX19jcHUpIDw8IF9fcGVyX2NwdV9zaGlmdCkpCisjZGVmaW5lIHBlcl9jcHVfb2Zmc2V0KHgpIChfX3Blcl9jcHVfb2Zmc2V0KHgpKQorCisjZGVmaW5lIF9fbXlfY3B1X29mZnNldCBfX2xvY2FsX3Blcl9jcHVfb2Zmc2V0CisKKyNlbHNlIC8qICEgU01QICovCisKKyNkZWZpbmUgcmVhbF9zZXR1cF9wZXJfY3B1X2FyZWFzKCkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCS8qIFNNUCAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CisKKyNlbmRpZiAvKiBfX0FSQ0hfU1BBUkM2NF9QRVJDUFVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGdhbGxvYy5oCmluZGV4IDY4MTU4MmQuLjdmYTAyYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ2FsbG9jLmgKQEAgLTEsNjggKzEsOCBAQAotI2lmbmRlZiBfU1BBUkNfUEdBTExPQ19ICi0jZGVmaW5lIF9TUEFSQ19QR0FMTE9DX0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+Ci0KLXN0cnVjdCBwYWdlOwotCi1leHRlcm4gc3RydWN0IHBndGFibGVfY2FjaGVfc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nICpwZ2RfY2FjaGU7Ci0JdW5zaWduZWQgbG9uZyAqcHRlX2NhY2hlOwotCXVuc2lnbmVkIGxvbmcgcGd0YWJsZV9jYWNoZV9zejsKLQl1bnNpZ25lZCBsb25nIHBnZF9jYWNoZV9zejsKLX0gcGd0X3F1aWNrbGlzdHM7Ci0jZGVmaW5lIHBnZF9xdWlja2xpc3QgICAgICAgICAgIChwZ3RfcXVpY2tsaXN0cy5wZ2RfY2FjaGUpCi0jZGVmaW5lIHBtZF9xdWlja2xpc3QgICAgICAgICAgICgodW5zaWduZWQgbG9uZyAqKTApCi0jZGVmaW5lIHB0ZV9xdWlja2xpc3QgICAgICAgICAgIChwZ3RfcXVpY2tsaXN0cy5wdGVfY2FjaGUpCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfc2l6ZSAgICAgIChwZ3RfcXVpY2tsaXN0cy5wZ3RhYmxlX2NhY2hlX3N6KQotI2RlZmluZSBwZ2RfY2FjaGVfc2l6ZQkJKHBndF9xdWlja2xpc3RzLnBnZF9jYWNoZV9zeikKLQotZXh0ZXJuIHZvaWQgY2hlY2tfcGd0X2NhY2hlKHZvaWQpOwotQlRGSVhVUERFRl9DQUxMKHZvaWQsCSBkb19jaGVja19wZ3RfY2FjaGUsIGludCwgaW50KQotI2RlZmluZSBkb19jaGVja19wZ3RfY2FjaGUobG93LGhpZ2gpIEJURklYVVBfQ0FMTChkb19jaGVja19wZ3RfY2FjaGUpKGxvdyxoaWdoKQotCi1CVEZJWFVQREVGX0NBTEwocGdkX3QgKiwgZ2V0X3BnZF9mYXN0LCB2b2lkKQotI2RlZmluZSBnZXRfcGdkX2Zhc3QoKQkJQlRGSVhVUF9DQUxMKGdldF9wZ2RfZmFzdCkoKQotCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgZnJlZV9wZ2RfZmFzdCwgcGdkX3QgKikKLSNkZWZpbmUgZnJlZV9wZ2RfZmFzdChwZ2QpCUJURklYVVBfQ0FMTChmcmVlX3BnZF9mYXN0KShwZ2QpCi0KLSNkZWZpbmUgcGdkX2ZyZWUobW0sIHBnZCkJZnJlZV9wZ2RfZmFzdChwZ2QpCi0jZGVmaW5lIHBnZF9hbGxvYyhtbSkJZ2V0X3BnZF9mYXN0KCkKLQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIHBnZF9zZXQsIHBnZF90ICosIHBtZF90ICopCi0jZGVmaW5lIHBnZF9zZXQocGdkcCxwbWRwKSBCVEZJWFVQX0NBTEwocGdkX3NldCkocGdkcCxwbWRwKQotI2RlZmluZSBwZ2RfcG9wdWxhdGUoTU0sIFBHRCwgUE1EKSAgICAgIHBnZF9zZXQoUEdELCBQTUQpCi0KLUJURklYVVBERUZfQ0FMTChwbWRfdCAqLCBwbWRfYWxsb2Nfb25lLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIHBtZF9hbGxvY19vbmUobW0sIGFkZHJlc3MpCUJURklYVVBfQ0FMTChwbWRfYWxsb2Nfb25lKShtbSwgYWRkcmVzcykKLQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZyZWVfcG1kX2Zhc3QsIHBtZF90ICopCi0jZGVmaW5lIGZyZWVfcG1kX2Zhc3QocG1kKQlCVEZJWFVQX0NBTEwoZnJlZV9wbWRfZmFzdCkocG1kKQotCi0jZGVmaW5lIHBtZF9mcmVlKG1tLCBwbWQpCWZyZWVfcG1kX2Zhc3QocG1kKQotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCkgcG1kX2ZyZWUoKHRsYiktPm1tLCBwbWQpCi0KLUJURklYVVBERUZfQ0FMTCh2b2lkLCBwbWRfcG9wdWxhdGUsIHBtZF90ICosIHN0cnVjdCBwYWdlICopCi0jZGVmaW5lIHBtZF9wb3B1bGF0ZShNTSwgUE1ELCBQVEUpICAgICAgICBCVEZJWFVQX0NBTEwocG1kX3BvcHVsYXRlKShQTUQsIFBURSkKLSNkZWZpbmUgcG1kX3BndGFibGUocG1kKSBwbWRfcGFnZShwbWQpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgcG1kX3NldCwgcG1kX3QgKiwgcHRlX3QgKikKLSNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChNTSwgUE1ELCBQVEUpIEJURklYVVBfQ0FMTChwbWRfc2V0KShQTUQsIFBURSkKLQotQlRGSVhVUERFRl9DQUxMKHBndGFibGVfdCAsIHB0ZV9hbGxvY19vbmUsIHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZykKLSNkZWZpbmUgcHRlX2FsbG9jX29uZShtbSwgYWRkcmVzcykJQlRGSVhVUF9DQUxMKHB0ZV9hbGxvY19vbmUpKG1tLCBhZGRyZXNzKQotQlRGSVhVUERFRl9DQUxMKHB0ZV90ICosIHB0ZV9hbGxvY19vbmVfa2VybmVsLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIHB0ZV9hbGxvY19vbmVfa2VybmVsKG1tLCBhZGRyKQlCVEZJWFVQX0NBTEwocHRlX2FsbG9jX29uZV9rZXJuZWwpKG1tLCBhZGRyKQotCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgZnJlZV9wdGVfZmFzdCwgcHRlX3QgKikKLSNkZWZpbmUgcHRlX2ZyZWVfa2VybmVsKG1tLCBwdGUpCUJURklYVVBfQ0FMTChmcmVlX3B0ZV9mYXN0KShwdGUpCi0KLUJURklYVVBERUZfQ0FMTCh2b2lkLCBwdGVfZnJlZSwgcGd0YWJsZV90ICkKLSNkZWZpbmUgcHRlX2ZyZWUobW0sIHB0ZSkJQlRGSVhVUF9DQUxMKHB0ZV9mcmVlKShwdGUpCi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlKQlwdGVfZnJlZSgodGxiKS0+bW0sIHB0ZSkKLQotI2VuZGlmIC8qIF9TUEFSQ19QR0FMTE9DX0ggKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX1BHQUxMT0NfSAorI2RlZmluZSBfX19BU01fU1BBUkNfUEdBTExPQ19ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvcGdhbGxvY182NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvcGdhbGxvY18zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BnYWxsb2NfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BnYWxsb2NfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODE1ODJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGdhbGxvY18zMi5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX1NQQVJDX1BHQUxMT0NfSAorI2RlZmluZSBfU1BBUkNfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgorCitzdHJ1Y3QgcGFnZTsKKworZXh0ZXJuIHN0cnVjdCBwZ3RhYmxlX2NhY2hlX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyAqcGdkX2NhY2hlOworCXVuc2lnbmVkIGxvbmcgKnB0ZV9jYWNoZTsKKwl1bnNpZ25lZCBsb25nIHBndGFibGVfY2FjaGVfc3o7CisJdW5zaWduZWQgbG9uZyBwZ2RfY2FjaGVfc3o7Cit9IHBndF9xdWlja2xpc3RzOworI2RlZmluZSBwZ2RfcXVpY2tsaXN0ICAgICAgICAgICAocGd0X3F1aWNrbGlzdHMucGdkX2NhY2hlKQorI2RlZmluZSBwbWRfcXVpY2tsaXN0ICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcgKikwKQorI2RlZmluZSBwdGVfcXVpY2tsaXN0ICAgICAgICAgICAocGd0X3F1aWNrbGlzdHMucHRlX2NhY2hlKQorI2RlZmluZSBwZ3RhYmxlX2NhY2hlX3NpemUgICAgICAocGd0X3F1aWNrbGlzdHMucGd0YWJsZV9jYWNoZV9zeikKKyNkZWZpbmUgcGdkX2NhY2hlX3NpemUJCShwZ3RfcXVpY2tsaXN0cy5wZ2RfY2FjaGVfc3opCisKK2V4dGVybiB2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKTsKK0JURklYVVBERUZfQ0FMTCh2b2lkLAkgZG9fY2hlY2tfcGd0X2NhY2hlLCBpbnQsIGludCkKKyNkZWZpbmUgZG9fY2hlY2tfcGd0X2NhY2hlKGxvdyxoaWdoKSBCVEZJWFVQX0NBTEwoZG9fY2hlY2tfcGd0X2NhY2hlKShsb3csaGlnaCkKKworQlRGSVhVUERFRl9DQUxMKHBnZF90ICosIGdldF9wZ2RfZmFzdCwgdm9pZCkKKyNkZWZpbmUgZ2V0X3BnZF9mYXN0KCkJCUJURklYVVBfQ0FMTChnZXRfcGdkX2Zhc3QpKCkKKworQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZyZWVfcGdkX2Zhc3QsIHBnZF90ICopCisjZGVmaW5lIGZyZWVfcGdkX2Zhc3QocGdkKQlCVEZJWFVQX0NBTEwoZnJlZV9wZ2RfZmFzdCkocGdkKQorCisjZGVmaW5lIHBnZF9mcmVlKG1tLCBwZ2QpCWZyZWVfcGdkX2Zhc3QocGdkKQorI2RlZmluZSBwZ2RfYWxsb2MobW0pCWdldF9wZ2RfZmFzdCgpCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBwZ2Rfc2V0LCBwZ2RfdCAqLCBwbWRfdCAqKQorI2RlZmluZSBwZ2Rfc2V0KHBnZHAscG1kcCkgQlRGSVhVUF9DQUxMKHBnZF9zZXQpKHBnZHAscG1kcCkKKyNkZWZpbmUgcGdkX3BvcHVsYXRlKE1NLCBQR0QsIFBNRCkgICAgICBwZ2Rfc2V0KFBHRCwgUE1EKQorCitCVEZJWFVQREVGX0NBTEwocG1kX3QgKiwgcG1kX2FsbG9jX29uZSwgc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBwbWRfYWxsb2Nfb25lKG1tLCBhZGRyZXNzKQlCVEZJWFVQX0NBTEwocG1kX2FsbG9jX29uZSkobW0sIGFkZHJlc3MpCisKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBmcmVlX3BtZF9mYXN0LCBwbWRfdCAqKQorI2RlZmluZSBmcmVlX3BtZF9mYXN0KHBtZCkJQlRGSVhVUF9DQUxMKGZyZWVfcG1kX2Zhc3QpKHBtZCkKKworI2RlZmluZSBwbWRfZnJlZShtbSwgcG1kKQlmcmVlX3BtZF9mYXN0KHBtZCkKKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQpIHBtZF9mcmVlKCh0bGIpLT5tbSwgcG1kKQorCitCVEZJWFVQREVGX0NBTEwodm9pZCwgcG1kX3BvcHVsYXRlLCBwbWRfdCAqLCBzdHJ1Y3QgcGFnZSAqKQorI2RlZmluZSBwbWRfcG9wdWxhdGUoTU0sIFBNRCwgUFRFKSAgICAgICAgQlRGSVhVUF9DQUxMKHBtZF9wb3B1bGF0ZSkoUE1ELCBQVEUpCisjZGVmaW5lIHBtZF9wZ3RhYmxlKHBtZCkgcG1kX3BhZ2UocG1kKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIHBtZF9zZXQsIHBtZF90ICosIHB0ZV90ICopCisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwoTU0sIFBNRCwgUFRFKSBCVEZJWFVQX0NBTEwocG1kX3NldCkoUE1ELCBQVEUpCisKK0JURklYVVBERUZfQ0FMTChwZ3RhYmxlX3QgLCBwdGVfYWxsb2Nfb25lLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIHB0ZV9hbGxvY19vbmUobW0sIGFkZHJlc3MpCUJURklYVVBfQ0FMTChwdGVfYWxsb2Nfb25lKShtbSwgYWRkcmVzcykKK0JURklYVVBERUZfQ0FMTChwdGVfdCAqLCBwdGVfYWxsb2Nfb25lX2tlcm5lbCwgc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBwdGVfYWxsb2Nfb25lX2tlcm5lbChtbSwgYWRkcikJQlRGSVhVUF9DQUxMKHB0ZV9hbGxvY19vbmVfa2VybmVsKShtbSwgYWRkcikKKworQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZyZWVfcHRlX2Zhc3QsIHB0ZV90ICopCisjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChtbSwgcHRlKQlCVEZJWFVQX0NBTEwoZnJlZV9wdGVfZmFzdCkocHRlKQorCitCVEZJWFVQREVGX0NBTEwodm9pZCwgcHRlX2ZyZWUsIHBndGFibGVfdCApCisjZGVmaW5lIHB0ZV9mcmVlKG1tLCBwdGUpCUJURklYVVBfQ0FMTChwdGVfZnJlZSkocHRlKQorI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSkJcHRlX2ZyZWUoKHRsYiktPm1tLCBwdGUpCisKKyNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wZ2FsbG9jXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ2FsbG9jXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkZmEyYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BnYWxsb2NfNjQuaApAQCAtMCwwICsxLDgxIEBACisjaWZuZGVmIF9TUEFSQzY0X1BHQUxMT0NfSAorI2RlZmluZSBfU1BBUkM2NF9QR0FMTE9DX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CisKKyNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyogUGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcuICovCisKK3N0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCit7CisJcXVpY2tsaXN0X2ZyZWUoMCwgTlVMTCwgcGdkKTsKK30KKworI2RlZmluZSBwdWRfcG9wdWxhdGUoTU0sIFBVRCwgUE1EKQlwdWRfc2V0KFBVRCwgUE1EKQorCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHF1aWNrbGlzdF9hbGxvYygwLCBHRlBfS0VSTkVMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKQoreworCXF1aWNrbGlzdF9mcmVlKDAsIE5VTEwsIHBtZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdm9pZCAqcGc7CisKKwlwZyA9IHF1aWNrbGlzdF9hbGxvYygwLCBHRlBfS0VSTkVMLCBOVUxMKTsKKwlpZiAoIXBnKQorCQlyZXR1cm4gTlVMTDsKKwlwYWdlID0gdmlydF90b19wYWdlKHBnKTsKKwlwZ3RhYmxlX3BhZ2VfY3RvcihwYWdlKTsKKwlyZXR1cm4gcGFnZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZSkKK3sKKwlxdWlja2xpc3RfZnJlZSgwLCBOVUxMLCBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKQoreworCXBndGFibGVfcGFnZV9kdG9yKHB0ZXBhZ2UpOworCXF1aWNrbGlzdF9mcmVlX3BhZ2UoMCwgTlVMTCwgcHRlcGFnZSk7Cit9CisKKworI2RlZmluZSBwbWRfcG9wdWxhdGVfa2VybmVsKE1NLCBQTUQsIFBURSkJcG1kX3NldChQTUQsIFBURSkKKyNkZWZpbmUgcG1kX3BvcHVsYXRlKE1NLFBNRCxQVEVfUEFHRSkJCVwKKwlwbWRfcG9wdWxhdGVfa2VybmVsKE1NLFBNRCxwYWdlX2FkZHJlc3MoUFRFX1BBR0UpKQorI2RlZmluZSBwbWRfcGd0YWJsZShwbWQpIHBtZF9wYWdlKHBtZCkKKworc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKQoreworCXF1aWNrbGlzdF90cmltKDAsIE5VTEwsIDI1LCAxNik7Cit9CisKKyNlbmRpZiAvKiBfU1BBUkM2NF9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGUuaAppbmRleCA2MDUxMjI5Li42M2NkZWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGd0YWJsZS5oCkBAIC0xLDQ3NSArMSw4IEBACi0jaWZuZGVmIF9TUEFSQ19QR1RBQkxFX0gKLSNkZWZpbmUgX1NQQVJDX1BHVEFCTEVfSAotCi0vKiAgYXNtLXNwYXJjL3BndGFibGUuaDogIERlZmluZXMgYW5kIGZ1bmN0aW9ucyB1c2VkIHRvIHdvcmsKLSAqICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBTcGFyYyBwYWdlIHRhYmxlcy4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTggSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKLSAqLwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpZmRlZiBDT05GSUdfU1VONAotI2luY2x1ZGUgPGFzbS9wZ3RzdW40Lmg+CisjaWZuZGVmIF9fX0FTTV9TUEFSQ19QR1RBQkxFX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1BHVEFCTEVfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3BndGFibGVfNjQuaD4KICNlbHNlCi0jaW5jbHVkZSA8YXNtL3BndHN1bjRjLmg+CisjaW5jbHVkZSA8YXNtLXNwYXJjL3BndGFibGVfMzIuaD4KICNlbmRpZgotI2luY2x1ZGUgPGFzbS9wZ3Rzcm1tdS5oPgotI2luY2x1ZGUgPGFzbS92YWMtb3BzLmg+Ci0jaW5jbHVkZSA8YXNtL29wbGliLmg+Ci0jaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKLXN0cnVjdCBwYWdlOwotCi1leHRlcm4gdm9pZCBsb2FkX21tdSh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGNhbGNfaGlnaHBhZ2VzKHZvaWQpOwotCi1CVEZJWFVQREVGX1NJTU0xMyhwZ2Rpcl9zaGlmdCkKLUJURklYVVBERUZfU0VUSEkocGdkaXJfc2l6ZSkKLUJURklYVVBERUZfU0VUSEkocGdkaXJfbWFzaykKLQotQlRGSVhVUERFRl9TSU1NMTMocHRyc19wZXJfcG1kKQotQlRGSVhVUERFRl9TSU1NMTMocHRyc19wZXJfcGdkKQotQlRGSVhVUERFRl9TSU1NMTModXNlcl9wdHJzX3Blcl9wZ2QpCi0KLSNkZWZpbmUgcHRlX0VSUk9SKGUpICAgX19idWlsdGluX3RyYXAoKQotI2RlZmluZSBwbWRfRVJST1IoZSkgICBfX2J1aWx0aW5fdHJhcCgpCi0jZGVmaW5lIHBnZF9FUlJPUihlKSAgIF9fYnVpbHRpbl90cmFwKCkKLQotQlRGSVhVUERFRl9JTlQocGFnZV9ub25lKQotQlRGSVhVUERFRl9JTlQocGFnZV9jb3B5KQotQlRGSVhVUERFRl9JTlQocGFnZV9yZWFkb25seSkKLUJURklYVVBERUZfSU5UKHBhZ2Vfa2VybmVsKQotCi0jZGVmaW5lIFBNRF9TSElGVAkJU1VONENfUE1EX1NISUZUCi0jZGVmaW5lIFBNRF9TSVpFICAgICAgICAJKDFVTCA8PCBQTURfU0hJRlQpCi0jZGVmaW5lIFBNRF9NQVNLICAgICAgICAJKH4oUE1EX1NJWkUtMSkpCi0jZGVmaW5lIFBNRF9BTElHTihfX2FkZHIpIAkoKChfX2FkZHIpICsgflBNRF9NQVNLKSAmIFBNRF9NQVNLKQotI2RlZmluZSBQR0RJUl9TSElGVCAgICAgCUJURklYVVBfU0lNTTEzKHBnZGlyX3NoaWZ0KQotI2RlZmluZSBQR0RJUl9TSVpFICAgICAgCUJURklYVVBfU0VUSEkocGdkaXJfc2l6ZSkKLSNkZWZpbmUgUEdESVJfTUFTSyAgICAgIAlCVEZJWFVQX1NFVEhJKHBnZGlyX21hc2spCi0jZGVmaW5lIFBUUlNfUEVSX1BURSAgICAJMTAyNAotI2RlZmluZSBQVFJTX1BFUl9QTUQgICAgCUJURklYVVBfU0lNTTEzKHB0cnNfcGVyX3BtZCkKLSNkZWZpbmUgUFRSU19QRVJfUEdEICAgIAlCVEZJWFVQX1NJTU0xMyhwdHJzX3Blcl9wZ2QpCi0jZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECUJURklYVVBfU0lNTTEzKHVzZXJfcHRyc19wZXJfcGdkKQotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAotI2RlZmluZSBQVEVfU0laRQkJKFBUUlNfUEVSX1BURSo0KQotCi0jZGVmaW5lIFBBR0VfTk9ORSAgICAgIF9fcGdwcm90KEJURklYVVBfSU5UKHBhZ2Vfbm9uZSkpCi1leHRlcm4gcGdwcm90X3QgUEFHRV9TSEFSRUQ7Ci0jZGVmaW5lIFBBR0VfQ09QWSAgICAgIF9fcGdwcm90KEJURklYVVBfSU5UKHBhZ2VfY29weSkpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFkgIF9fcGdwcm90KEJURklYVVBfSU5UKHBhZ2VfcmVhZG9ubHkpKQotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX2tlcm5lbDsKLQotI2lmZGVmIE1PRFVMRQotI2RlZmluZSBQQUdFX0tFUk5FTAlwYWdlX2tlcm5lbAotI2Vsc2UKLSNkZWZpbmUgUEFHRV9LRVJORUwgICAgX19wZ3Byb3QoQlRGSVhVUF9JTlQocGFnZV9rZXJuZWwpKQogI2VuZGlmCi0KLS8qIFRvcC1sZXZlbCBwYWdlIGRpcmVjdG9yeSAqLwotZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdOwotCi1leHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKLQotLyogUGFnZSB0YWJsZSBmb3IgMC00TUIgZm9yIGV2ZXJ5Ym9keSwgb24gdGhlIFNwYXJjIHRoaXMKLSAqIGhvbGRzIHRoZSBzYW1lIGFzIG9uIHRoZSBpMzg2LgotICovCi1leHRlcm4gcHRlX3QgcGcwWzEwMjRdOwotZXh0ZXJuIHB0ZV90IHBnMVsxMDI0XTsKLWV4dGVybiBwdGVfdCBwZzJbMTAyNF07Ci1leHRlcm4gcHRlX3QgcGczWzEwMjRdOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBwdHJfaW5fY3VycmVudF9wZ2Q7Ci0KLS8qIEhlcmUgaXMgYSB0cmljaywgc2luY2UgbW1hcC5jIG5lZWQgdGhlIGluaXRpYWxpemVyIGVsZW1lbnRzIGZvcgotICogcHJvdGVjdGlvbl9tYXBbXSB0byBiZSBjb25zdGFudCBhdCBjb21waWxlIHRpbWUsIEkgc2V0IHRoZSBmb2xsb3dpbmcKLSAqIHRvIGFsbCB6ZXJvcy4gIEkgc2V0IGl0IHRvIHRoZSByZWFsIHZhbHVlcyBhZnRlciBJIGxpbmsgaW4gdGhlCi0gKiBhcHByb3ByaWF0ZSBNTVUgcGFnZSB0YWJsZSByb3V0aW5lcyBhdCBib290IHRpbWUuCi0gKi8KLSNkZWZpbmUgX19QMDAwICBfX3BncHJvdCgwKQotI2RlZmluZSBfX1AwMDEgIF9fcGdwcm90KDApCi0jZGVmaW5lIF9fUDAxMCAgX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19QMDExICBfX3BncHJvdCgwKQotI2RlZmluZSBfX1AxMDAgIF9fcGdwcm90KDApCi0jZGVmaW5lIF9fUDEwMSAgX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19QMTEwICBfX3BncHJvdCgwKQotI2RlZmluZSBfX1AxMTEgIF9fcGdwcm90KDApCi0KLSNkZWZpbmUgX19TMDAwCV9fcGdwcm90KDApCi0jZGVmaW5lIF9fUzAwMQlfX3BncHJvdCgwKQotI2RlZmluZSBfX1MwMTAJX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19TMDExCV9fcGdwcm90KDApCi0jZGVmaW5lIF9fUzEwMAlfX3BncHJvdCgwKQotI2RlZmluZSBfX1MxMDEJX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19TMTEwCV9fcGdwcm90KDApCi0jZGVmaW5lIF9fUzExMQlfX3BncHJvdCgwKQotCi1leHRlcm4gaW50IG51bV9jb250ZXh0czsKLQotLyogRmlyc3QgcGh5c2ljYWwgcGFnZSBjYW4gYmUgYW55d2hlcmUsIHRoZSBmb2xsb3dpbmcgaXMgbmVlZGVkIHNvIHRoYXQKLSAqIHZhLS0+cGEgYW5kIHZpY2UgdmVyc2EgY29udmVyc2lvbnMgd29yayBwcm9wZXJseSB3aXRob3V0IHBlcmZvcm1hbmNlCi0gKiBoaXQgZm9yIGFsbCBfX3BhKCkvX192YSgpIG9wZXJhdGlvbnMuCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHBmbl9iYXNlOwotCi0vKgotICogQkFEX1BBR0VUQUJMRSBpcyB1c2VkIHdoZW4gd2UgbmVlZCBhIGJvZ3VzIHBhZ2UtdGFibGUsIHdoaWxlCi0gKiBCQURfUEFHRSBpcyB1c2VkIGZvciBhIGJvZ3VzIHBhZ2UuCi0gKgotICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKLSAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KLSAqLwotZXh0ZXJuIHB0ZV90ICogX19iYWRfcGFnZXRhYmxlKHZvaWQpOwotZXh0ZXJuIHB0ZV90IF9fYmFkX3BhZ2Uodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2U7Ci0KLSNkZWZpbmUgQkFEX1BBR0VUQUJMRSBfX2JhZF9wYWdldGFibGUoKQotI2RlZmluZSBCQURfUEFHRSBfX2JhZF9wYWdlKCkKLSNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKCZlbXB0eV96ZXJvX3BhZ2UpKQotCi0vKgotICovCi1CVEZJWFVQREVGX0NBTExfQ09OU1Qoc3RydWN0IHBhZ2UgKiwgcG1kX3BhZ2UsIHBtZF90KQotQlRGSVhVUERFRl9DQUxMX0NPTlNUKHVuc2lnbmVkIGxvbmcsIHBnZF9wYWdlX3ZhZGRyLCBwZ2RfdCkKLQotI2RlZmluZSBwbWRfcGFnZShwbWQpIEJURklYVVBfQ0FMTChwbWRfcGFnZSkocG1kKQotI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpIEJURklYVVBfQ0FMTChwZ2RfcGFnZV92YWRkcikocGdkKQotCi1CVEZJWFVQREVGX1NFVEhJKG5vbmVfbWFzaykKLUJURklYVVBERUZfQ0FMTF9DT05TVChpbnQsIHB0ZV9wcmVzZW50LCBwdGVfdCkKLUJURklYVVBERUZfQ0FMTCh2b2lkLCBwdGVfY2xlYXIsIHB0ZV90ICopCi0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gIShwdGVfdmFsKHB0ZSkgJiB+QlRGSVhVUF9TRVRISShub25lX21hc2spKTsKLX0KLQotI2RlZmluZSBwdGVfcHJlc2VudChwdGUpIEJURklYVVBfQ0FMTChwdGVfcHJlc2VudCkocHRlKQotI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGUpIEJURklYVVBfQ0FMTChwdGVfY2xlYXIpKHB0ZSkKLQotQlRGSVhVUERFRl9DQUxMX0NPTlNUKGludCwgcG1kX2JhZCwgcG1kX3QpCi1CVEZJWFVQREVGX0NBTExfQ09OU1QoaW50LCBwbWRfcHJlc2VudCwgcG1kX3QpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgcG1kX2NsZWFyLCBwbWRfdCAqKQotCi1zdGF0aWMgaW5saW5lIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCi17Ci0JcmV0dXJuICEocG1kX3ZhbChwbWQpICYgfkJURklYVVBfU0VUSEkobm9uZV9tYXNrKSk7Ci19Ci0KLSNkZWZpbmUgcG1kX2JhZChwbWQpIEJURklYVVBfQ0FMTChwbWRfYmFkKShwbWQpCi0jZGVmaW5lIHBtZF9wcmVzZW50KHBtZCkgQlRGSVhVUF9DQUxMKHBtZF9wcmVzZW50KShwbWQpCi0jZGVmaW5lIHBtZF9jbGVhcihwbWQpIEJURklYVVBfQ0FMTChwbWRfY2xlYXIpKHBtZCkKLQotQlRGSVhVUERFRl9DQUxMX0NPTlNUKGludCwgcGdkX25vbmUsIHBnZF90KQotQlRGSVhVUERFRl9DQUxMX0NPTlNUKGludCwgcGdkX2JhZCwgcGdkX3QpCi1CVEZJWFVQREVGX0NBTExfQ09OU1QoaW50LCBwZ2RfcHJlc2VudCwgcGdkX3QpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgcGdkX2NsZWFyLCBwZ2RfdCAqKQotCi0jZGVmaW5lIHBnZF9ub25lKHBnZCkgQlRGSVhVUF9DQUxMKHBnZF9ub25lKShwZ2QpCi0jZGVmaW5lIHBnZF9iYWQocGdkKSBCVEZJWFVQX0NBTEwocGdkX2JhZCkocGdkKQotI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpIEJURklYVVBfQ0FMTChwZ2RfcHJlc2VudCkocGdkKQotI2RlZmluZSBwZ2RfY2xlYXIocGdkKSBCVEZJWFVQX0NBTEwocGdkX2NsZWFyKShwZ2QpCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCi0gKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCi0gKi8KLUJURklYVVBERUZfSEFMRihwdGVfd3JpdGVpKQotQlRGSVhVUERFRl9IQUxGKHB0ZV9kaXJ0eWkpCi1CVEZJWFVQREVGX0hBTEYocHRlX3lvdW5naSkKLQotc3RhdGljIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwotc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlX3ZhbChwdGUpICYgQlRGSVhVUF9IQUxGKHB0ZV93cml0ZWkpOwotfQotCi1zdGF0aWMgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpIF9fYXR0cmlidXRlX2NvbnN0X187Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBCVEZJWFVQX0hBTEYocHRlX2RpcnR5aSk7Ci19Ci0KLXN0YXRpYyBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV92YWwocHRlKSAmIEJURklYVVBfSEFMRihwdGVfeW91bmdpKTsKLX0KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgbm90IHRydWUuCi0gKi8KLUJURklYVVBERUZfSEFMRihwdGVfZmlsZWkpCi0KLXN0YXRpYyBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBCVEZJWFVQX0hBTEYocHRlX2ZpbGVpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQotewotCXJldHVybiAwOwotfQotCi0vKgotICovCi1CVEZJWFVQREVGX0hBTEYocHRlX3dycHJvdGVjdGkpCi1CVEZJWFVQREVGX0hBTEYocHRlX21rY2xlYW5pKQotQlRGSVhVUERFRl9IQUxGKHB0ZV9ta29sZGkpCi0KLXN0YXRpYyBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5CVEZJWFVQX0hBTEYocHRlX3dycHJvdGVjdGkpKTsKLX0KLQotc3RhdGljIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQotewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+QlRGSVhVUF9IQUxGKHB0ZV9ta2NsZWFuaSkpOwotfQotCi1zdGF0aWMgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfkJURklYVVBfSEFMRihwdGVfbWtvbGRpKSk7Ci19Ci0KLUJURklYVVBERUZfQ0FMTF9DT05TVChwdGVfdCwgcHRlX21rd3JpdGUsIHB0ZV90KQotQlRGSVhVUERFRl9DQUxMX0NPTlNUKHB0ZV90LCBwdGVfbWtkaXJ0eSwgcHRlX3QpCi1CVEZJWFVQREVGX0NBTExfQ09OU1QocHRlX3QsIHB0ZV9ta3lvdW5nLCBwdGVfdCkKLQotI2RlZmluZSBwdGVfbWt3cml0ZShwdGUpIEJURklYVVBfQ0FMTChwdGVfbWt3cml0ZSkocHRlKQotI2RlZmluZSBwdGVfbWtkaXJ0eShwdGUpIEJURklYVVBfQ0FMTChwdGVfbWtkaXJ0eSkocHRlKQotI2RlZmluZSBwdGVfbWt5b3VuZyhwdGUpIEJURklYVVBfQ0FMTChwdGVfbWt5b3VuZykocHRlKQotCi0jZGVmaW5lIHB0ZV9ta3NwZWNpYWwocHRlKSAgICAocHRlKQotCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQkJbWtfcHRlKHBmbl90b19wYWdlKHBmbiksIHByb3QpCi0KLUJURklYVVBERUZfQ0FMTCh1bnNpZ25lZCBsb25nLAkgcHRlX3BmbiwgcHRlX3QpCi0jZGVmaW5lIHB0ZV9wZm4ocHRlKSBCVEZJWFVQX0NBTEwocHRlX3BmbikocHRlKQotI2RlZmluZSBwdGVfcGFnZShwdGUpCXBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkKLQotLyoKLSAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCi0gKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgotICovCi1CVEZJWFVQREVGX0NBTExfQ09OU1QocHRlX3QsIG1rX3B0ZSwgc3RydWN0IHBhZ2UgKiwgcGdwcm90X3QpCi0KLUJURklYVVBERUZfQ0FMTF9DT05TVChwdGVfdCwgbWtfcHRlX3BoeXMsIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KQotQlRGSVhVUERFRl9DQUxMX0NPTlNUKHB0ZV90LCBta19wdGVfaW8sIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90LCBpbnQpCi1CVEZJWFVQREVGX0NBTExfQ09OU1QocGdwcm90X3QsIHBncHJvdF9ub25jYWNoZWQsIHBncHJvdF90KQotCi0jZGVmaW5lIG1rX3B0ZShwYWdlLHBncHJvdCkgQlRGSVhVUF9DQUxMKG1rX3B0ZSkocGFnZSxwZ3Byb3QpCi0jZGVmaW5lIG1rX3B0ZV9waHlzKHBhZ2UscGdwcm90KSBCVEZJWFVQX0NBTEwobWtfcHRlX3BoeXMpKHBhZ2UscGdwcm90KQotI2RlZmluZSBta19wdGVfaW8ocGFnZSxwZ3Byb3Qsc3BhY2UpIEJURklYVVBfQ0FMTChta19wdGVfaW8pKHBhZ2UscGdwcm90LHNwYWNlKQotCi0jZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocGdwcm90KSBCVEZJWFVQX0NBTEwocGdwcm90X25vbmNhY2hlZCkocGdwcm90KQotCi1CVEZJWFVQREVGX0lOVChwdGVfbW9kaWZ5X21hc2spCi0KLXN0YXRpYyBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkgX19hdHRyaWJ1dGVfY29uc3RfXzsKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCi17Ci0JcmV0dXJuIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBCVEZJWFVQX0lOVChwdGVfbW9kaWZ5X21hc2spKSB8Ci0JCXBncHJvdF92YWwobmV3cHJvdCkpOwotfQotCi0jZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKQotCi0vKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KLSNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyZXNzKSkKLQotLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLwotI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKLQotLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLwotQlRGSVhVUERFRl9DQUxMKHBtZF90ICosIHBtZF9vZmZzZXQsIHBnZF90ICosIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIHBtZF9vZmZzZXQoZGlyLGFkZHIpIEJURklYVVBfQ0FMTChwbWRfb2Zmc2V0KShkaXIsYWRkcikKLQotLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovIAotQlRGSVhVUERFRl9DQUxMKHB0ZV90ICosIHB0ZV9vZmZzZXRfa2VybmVsLCBwbWRfdCAqLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsYWRkcikgQlRGSVhVUF9DQUxMKHB0ZV9vZmZzZXRfa2VybmVsKShkaXIsYWRkcikKLQotLyoKLSAqIFRoaXMgc2hvcnRjdXQgd29ya3Mgb24gc3VuNG0gKGFuZCBzdW40ZCkgYmVjYXVzZSB0aGUgbm9jYWNoZSBhcmVhIGlzIHN0YXRpYywKLSAqIGFuZCBzdW40YyBpcyBndWFyYW50ZWVkIHRvIGhhdmUgbm8gaGlnaG1lbSBhbnl3YXkuCi0gKi8KLSNkZWZpbmUgcHRlX29mZnNldF9tYXAoZCwgYSkJCXB0ZV9vZmZzZXRfa2VybmVsKGQsYSkKLSNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGQsIGEpCXB0ZV9vZmZzZXRfa2VybmVsKGQsYSkKLQotI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJZG97fXdoaWxlKDApCi0jZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKQlkb3t9d2hpbGUoMCkKLQotLyogQ2VydGFpbiBhcmNoaXRlY3R1cmVzIG5lZWQgdG8gZG8gc3BlY2lhbCB0aGluZ3Mgd2hlbiBwdGUncwotICogd2l0aGluIGEgcGFnZSB0YWJsZSBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuICBUaHVzLCB0aGUgZm9sbG93aW5nCi0gKiBob29rIGlzIG1hZGUgYXZhaWxhYmxlLgotICovCi0KLUJURklYVVBERUZfQ0FMTCh2b2lkLCBzZXRfcHRlLCBwdGVfdCAqLCBwdGVfdCkKLQotI2RlZmluZSBzZXRfcHRlKHB0ZXAscHRldmFsKSBCVEZJWFVQX0NBTEwoc2V0X3B0ZSkocHRlcCxwdGV2YWwpCi0jZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKLQotc3RydWN0IHNlcV9maWxlOwotQlRGSVhVUERFRl9DQUxMKHZvaWQsIG1tdV9pbmZvLCBzdHJ1Y3Qgc2VxX2ZpbGUgKikKLQotI2RlZmluZSBtbXVfaW5mbyhwKSBCVEZJWFVQX0NBTEwobW11X2luZm8pKHApCi0KLS8qIEZhdWx0IGhhbmRsZXIgc3R1ZmYuLi4gKi8KLSNkZWZpbmUgRkFVTFRfQ09ERV9QUk9UICAgICAweDEKLSNkZWZpbmUgRkFVTFRfQ09ERV9XUklURSAgICAweDIKLSNkZWZpbmUgRkFVTFRfQ09ERV9VU0VSICAgICAweDQKLQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIHVwZGF0ZV9tbXVfY2FjaGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCkKLQotI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSxhZGRyLHB0ZSkgQlRGSVhVUF9DQUxMKHVwZGF0ZV9tbXVfY2FjaGUpKHZtYSxhZGRyLHB0ZSkKLQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIHNwYXJjX21hcGlvcmFuZ2UsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZywKLSAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgc3BhcmNfdW5tYXBpb3JhbmdlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpCi0jZGVmaW5lIHNwYXJjX21hcGlvcmFuZ2UoYnVzLHBhLHZhLGxlbikgQlRGSVhVUF9DQUxMKHNwYXJjX21hcGlvcmFuZ2UpKGJ1cyxwYSx2YSxsZW4pCi0jZGVmaW5lIHNwYXJjX3VubWFwaW9yYW5nZSh2YSxsZW4pIEJURklYVVBfQ0FMTChzcGFyY191bm1hcGlvcmFuZ2UpKHZhLGxlbikKLQotZXh0ZXJuIGludCBpbnZhbGlkX3NlZ21lbnQ7Ci0KLS8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KLUJURklYVVBERUZfQ0FMTCh1bnNpZ25lZCBsb25nLCBfX3N3cF90eXBlLCBzd3BfZW50cnlfdCkKLUJURklYVVBERUZfQ0FMTCh1bnNpZ25lZCBsb25nLCBfX3N3cF9vZmZzZXQsIHN3cF9lbnRyeV90KQotQlRGSVhVUERFRl9DQUxMKHN3cF9lbnRyeV90LCBfX3N3cF9lbnRyeSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotI2RlZmluZSBfX3N3cF90eXBlKF9feCkJCQlCVEZJWFVQX0NBTEwoX19zd3BfdHlwZSkoX194KQotI2RlZmluZSBfX3N3cF9vZmZzZXQoX194KQkJQlRGSVhVUF9DQUxMKF9fc3dwX29mZnNldCkoX194KQotI2RlZmluZSBfX3N3cF9lbnRyeShfX3R5cGUsX19vZmYpCUJURklYVVBfQ0FMTChfX3N3cF9lbnRyeSkoX190eXBlLF9fb2ZmKQotCi0jZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQotI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCB9KQotCi0vKiBmaWxlLW9mZnNldC1pbi1wdGUgaGVscGVycyAqLwotQlRGSVhVUERFRl9DQUxMKHVuc2lnbmVkIGxvbmcsIHB0ZV90b19wZ29mZiwgcHRlX3QgcHRlKTsKLUJURklYVVBERUZfQ0FMTChwdGVfdCwgcGdvZmZfdG9fcHRlLCB1bnNpZ25lZCBsb25nIHBnb2ZmKTsKLQotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSBCVEZJWFVQX0NBTEwocHRlX3RvX3Bnb2ZmKShwdGUpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpIEJURklYVVBfQ0FMTChwZ29mZl90b19wdGUpKG9mZikKLQotLyoKLSAqIFRoaXMgaXMgbWFkZSBhIGNvbnN0YW50IGJlY2F1c2UgbW0vZnJlbWFwLmMgcmVxdWlyZWQgYSBjb25zdGFudC4KLSAqIE5vdGUgdGhhdCBsYXlvdXQgb2YgdGhlc2UgYml0cyBpcyBkaWZmZXJlbnQgYmV0d2VlbiBzdW40Yy5jIGFuZCBzcm1tdS5jLgotICovCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTIDI0Ci0KLS8qCi0gKi8KLXN0cnVjdCBjdHhfbGlzdCB7Ci0Jc3RydWN0IGN0eF9saXN0ICpuZXh0OwotCXN0cnVjdCBjdHhfbGlzdCAqcHJldjsKLQl1bnNpZ25lZCBpbnQgY3R4X251bWJlcjsKLQlzdHJ1Y3QgbW1fc3RydWN0ICpjdHhfbW07Ci19OwotCi1leHRlcm4gc3RydWN0IGN0eF9saXN0ICpjdHhfbGlzdF9wb29sOyAgLyogRHluYW1pY2FsbHkgYWxsb2NhdGVkICovCi1leHRlcm4gc3RydWN0IGN0eF9saXN0IGN0eF9mcmVlOyAgICAgICAgLyogSGVhZCBvZiBmcmVlIGxpc3QgKi8KLWV4dGVybiBzdHJ1Y3QgY3R4X2xpc3QgY3R4X3VzZWQ7ICAgICAgICAvKiBIZWFkIG9mIHVzZWQgY29udGV4dHMgbGlzdCAqLwotCi0jZGVmaW5lIE5PX0NPTlRFWFQgICAgIC0xCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZnJvbV9jdHhfbGlzdChzdHJ1Y3QgY3R4X2xpc3QgKmVudHJ5KQotewotCWVudHJ5LT5uZXh0LT5wcmV2ID0gZW50cnktPnByZXY7Ci0JZW50cnktPnByZXYtPm5leHQgPSBlbnRyeS0+bmV4dDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZF90b19jdHhfbGlzdChzdHJ1Y3QgY3R4X2xpc3QgKmhlYWQsIHN0cnVjdCBjdHhfbGlzdCAqZW50cnkpCi17Ci0JZW50cnktPm5leHQgPSBoZWFkOwotCShlbnRyeS0+cHJldiA9IGhlYWQtPnByZXYpLT5uZXh0ID0gZW50cnk7Ci0JaGVhZC0+cHJldiA9IGVudHJ5OwotfQotI2RlZmluZSBhZGRfdG9fZnJlZV9jdHhsaXN0KGVudHJ5KSBhZGRfdG9fY3R4X2xpc3QoJmN0eF9mcmVlLCBlbnRyeSkKLSNkZWZpbmUgYWRkX3RvX3VzZWRfY3R4bGlzdChlbnRyeSkgYWRkX3RvX2N0eF9saXN0KCZjdHhfdXNlZCwgZW50cnkpCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX19nZXRfcGh5cyAodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXN3aXRjaCAoc3BhcmNfY3B1X21vZGVsKXsKLQljYXNlIHN1bjQ6Ci0JY2FzZSBzdW40YzoKLQkJcmV0dXJuIHN1bjRjX2dldF9wdGUgKGFkZHIpIDw8IFBBR0VfU0hJRlQ7Ci0JY2FzZSBzdW40bToKLQljYXNlIHN1bjRkOgotCQlyZXR1cm4gKChzcm1tdV9nZXRfcHRlIChhZGRyKSAmIDB4ZmZmZmZmMDApIDw8IDQpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQKLV9fZ2V0X2lvc3BhY2UgKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzd2l0Y2ggKHNwYXJjX2NwdV9tb2RlbCl7Ci0JY2FzZSBzdW40OgotCWNhc2Ugc3VuNGM6Ci0JCXJldHVybiAtMTsgLyogRG9uJ3QgY2hlY2sgaW9zcGFjZSBvbiBzdW40YyAqLwotCWNhc2Ugc3VuNG06Ci0JY2FzZSBzdW40ZDoKLQkJcmV0dXJuIChzcm1tdV9nZXRfcHRlIChhZGRyKSA+PiAyOCk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC0xOwotCX0KLX0KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnNwYXJjX3ZhbGlkX2FkZHJfYml0bWFwOwotCi0vKiBOZWVkcyB0byBiZSBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBsaW51eC9tbS5oLCBhcyBpdCBpcyBhcmNoIGRlcGVuZGVudCAqLwotI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikgXAotCSh0ZXN0X2JpdChfX3BhKCh1bnNpZ25lZCBsb25nKShhZGRyKSk+PjIwLCBzcGFyY192YWxpZF9hZGRyX2JpdG1hcCkpCi0KLWV4dGVybiBpbnQgaW9fcmVtYXBfcGZuX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIHBmbiwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7Ci0KLS8qCi0gKiBGb3Igc3BhcmMzMiY2NCwgdGhlIHBmbiBpbiBpb19yZW1hcF9wZm5fcmFuZ2UoKSBjYXJyaWVzIDxpb3NwYWNlPiBpbgotICogaXRzIGhpZ2ggNCBiaXRzLiAgVGhlc2UgbWFjcm9zL2Z1bmN0aW9ucyBwdXQgaXQgdGhlcmUgb3IgZ2V0IGl0IGZyb20gdGhlcmUuCi0gKi8KLSNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbiB8IChzcGFjZSA8PCAoQklUU19QRVJfTE9ORyAtIDQpKSkKLSNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJKHBmbiA+PiAoQklUU19QRVJfTE9ORyAtIDQpKQotI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuICYgMHgwZmZmZmZmZlVMKQotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUwotI2RlZmluZSBwdGVwX3NldF9hY2Nlc3NfZmxhZ3MoX192bWEsIF9fYWRkcmVzcywgX19wdGVwLCBfX2VudHJ5LCBfX2RpcnR5KSBcCi0oewkJCQkJCQkJCSAgXAotCWludCBfX2NoYW5nZWQgPSAhcHRlX3NhbWUoKihfX3B0ZXApLCBfX2VudHJ5KTsJCQkgIFwKLQlpZiAoX19jaGFuZ2VkKSB7CQkJCQkJICBcCi0JCXNldF9wdGVfYXQoKF9fdm1hKS0+dm1fbW0sIChfX2FkZHJlc3MpLCBfX3B0ZXAsIF9fZW50cnkpOyBcCi0JCWZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOwkJCSAgXAotCX0JCQkJCQkJCSAgXAotCShzcGFyY19jcHVfbW9kZWwgPT0gc3VuNGMpIHx8IF9fY2hhbmdlZDsJCQkgIFwKLX0pCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+Ci0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotLyogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZF9hcmVhIHRvIGNvcGUgd2l0aCBWQSBob2xlcyBmb3IgdXNlcmxhbmQgKi8KLSNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKLQotLyoKLSAqIE5vIHBhZ2UgdGFibGUgY2FjaGVzIHRvIGluaXRpYWxpc2UKLSAqLwotI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiAhKF9TUEFSQ19QR1RBQkxFX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxYmQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGVfMzIuaApAQCAtMCwwICsxLDQ4MCBAQAorI2lmbmRlZiBfU1BBUkNfUEdUQUJMRV9ICisjZGVmaW5lIF9TUEFSQ19QR1RBQkxFX0gKKworLyogIGFzbS1zcGFyYy9wZ3RhYmxlLmg6ICBEZWZpbmVzIGFuZCBmdW5jdGlvbnMgdXNlZCB0byB3b3JrCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggU3BhcmMgcGFnZSB0YWJsZXMuCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2lmZGVmIENPTkZJR19TVU40CisjaW5jbHVkZSA8YXNtL3BndHN1bjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL3BndHN1bjRjLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vcGd0c3JtbXUuaD4KKyNpbmNsdWRlIDxhc20vdmFjLW9wcy5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKK3N0cnVjdCBwYWdlOworCitleHRlcm4gdm9pZCBsb2FkX21tdSh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNhbGNfaGlnaHBhZ2VzKHZvaWQpOworCitCVEZJWFVQREVGX1NJTU0xMyhwZ2Rpcl9zaGlmdCkKK0JURklYVVBERUZfU0VUSEkocGdkaXJfc2l6ZSkKK0JURklYVVBERUZfU0VUSEkocGdkaXJfbWFzaykKKworQlRGSVhVUERFRl9TSU1NMTMocHRyc19wZXJfcG1kKQorQlRGSVhVUERFRl9TSU1NMTMocHRyc19wZXJfcGdkKQorQlRGSVhVUERFRl9TSU1NMTModXNlcl9wdHJzX3Blcl9wZ2QpCisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpICAgX19idWlsdGluX3RyYXAoKQorI2RlZmluZSBwbWRfRVJST1IoZSkgICBfX2J1aWx0aW5fdHJhcCgpCisjZGVmaW5lIHBnZF9FUlJPUihlKSAgIF9fYnVpbHRpbl90cmFwKCkKKworQlRGSVhVUERFRl9JTlQocGFnZV9ub25lKQorQlRGSVhVUERFRl9JTlQocGFnZV9jb3B5KQorQlRGSVhVUERFRl9JTlQocGFnZV9yZWFkb25seSkKK0JURklYVVBERUZfSU5UKHBhZ2Vfa2VybmVsKQorCisjZGVmaW5lIFBNRF9TSElGVAkJU1VONENfUE1EX1NISUZUCisjZGVmaW5lIFBNRF9TSVpFICAgICAgICAJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLICAgICAgICAJKH4oUE1EX1NJWkUtMSkpCisjZGVmaW5lIFBNRF9BTElHTihfX2FkZHIpIAkoKChfX2FkZHIpICsgflBNRF9NQVNLKSAmIFBNRF9NQVNLKQorI2RlZmluZSBQR0RJUl9TSElGVCAgICAgCUJURklYVVBfU0lNTTEzKHBnZGlyX3NoaWZ0KQorI2RlZmluZSBQR0RJUl9TSVpFICAgICAgCUJURklYVVBfU0VUSEkocGdkaXJfc2l6ZSkKKyNkZWZpbmUgUEdESVJfTUFTSyAgICAgIAlCVEZJWFVQX1NFVEhJKHBnZGlyX21hc2spCisjZGVmaW5lIFBUUlNfUEVSX1BURSAgICAJMTAyNAorI2RlZmluZSBQVFJTX1BFUl9QTUQgICAgCUJURklYVVBfU0lNTTEzKHB0cnNfcGVyX3BtZCkKKyNkZWZpbmUgUFRSU19QRVJfUEdEICAgIAlCVEZJWFVQX1NJTU0xMyhwdHJzX3Blcl9wZ2QpCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECUJURklYVVBfU0lNTTEzKHVzZXJfcHRyc19wZXJfcGdkKQorI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorI2RlZmluZSBQVEVfU0laRQkJKFBUUlNfUEVSX1BURSo0KQorCisjZGVmaW5lIFBBR0VfTk9ORSAgICAgIF9fcGdwcm90KEJURklYVVBfSU5UKHBhZ2Vfbm9uZSkpCitleHRlcm4gcGdwcm90X3QgUEFHRV9TSEFSRUQ7CisjZGVmaW5lIFBBR0VfQ09QWSAgICAgIF9fcGdwcm90KEJURklYVVBfSU5UKHBhZ2VfY29weSkpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkgIF9fcGdwcm90KEJURklYVVBfSU5UKHBhZ2VfcmVhZG9ubHkpKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX2tlcm5lbDsKKworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBQQUdFX0tFUk5FTAlwYWdlX2tlcm5lbAorI2Vsc2UKKyNkZWZpbmUgUEFHRV9LRVJORUwgICAgX19wZ3Byb3QoQlRGSVhVUF9JTlQocGFnZV9rZXJuZWwpKQorI2VuZGlmCisKKy8qIFRvcC1sZXZlbCBwYWdlIGRpcmVjdG9yeSAqLworZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdOworCitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKKworLyogUGFnZSB0YWJsZSBmb3IgMC00TUIgZm9yIGV2ZXJ5Ym9keSwgb24gdGhlIFNwYXJjIHRoaXMKKyAqIGhvbGRzIHRoZSBzYW1lIGFzIG9uIHRoZSBpMzg2LgorICovCitleHRlcm4gcHRlX3QgcGcwWzEwMjRdOworZXh0ZXJuIHB0ZV90IHBnMVsxMDI0XTsKK2V4dGVybiBwdGVfdCBwZzJbMTAyNF07CitleHRlcm4gcHRlX3QgcGczWzEwMjRdOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBwdHJfaW5fY3VycmVudF9wZ2Q7CisKKy8qIEhlcmUgaXMgYSB0cmljaywgc2luY2UgbW1hcC5jIG5lZWQgdGhlIGluaXRpYWxpemVyIGVsZW1lbnRzIGZvcgorICogcHJvdGVjdGlvbl9tYXBbXSB0byBiZSBjb25zdGFudCBhdCBjb21waWxlIHRpbWUsIEkgc2V0IHRoZSBmb2xsb3dpbmcKKyAqIHRvIGFsbCB6ZXJvcy4gIEkgc2V0IGl0IHRvIHRoZSByZWFsIHZhbHVlcyBhZnRlciBJIGxpbmsgaW4gdGhlCisgKiBhcHByb3ByaWF0ZSBNTVUgcGFnZSB0YWJsZSByb3V0aW5lcyBhdCBib290IHRpbWUuCisgKi8KKyNkZWZpbmUgX19QMDAwICBfX3BncHJvdCgwKQorI2RlZmluZSBfX1AwMDEgIF9fcGdwcm90KDApCisjZGVmaW5lIF9fUDAxMCAgX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19QMDExICBfX3BncHJvdCgwKQorI2RlZmluZSBfX1AxMDAgIF9fcGdwcm90KDApCisjZGVmaW5lIF9fUDEwMSAgX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19QMTEwICBfX3BncHJvdCgwKQorI2RlZmluZSBfX1AxMTEgIF9fcGdwcm90KDApCisKKyNkZWZpbmUgX19TMDAwCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUzAwMQlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MwMTAJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19TMDExCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUzEwMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MxMDEJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19TMTEwCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUzExMQlfX3BncHJvdCgwKQorCitleHRlcm4gaW50IG51bV9jb250ZXh0czsKKworLyogRmlyc3QgcGh5c2ljYWwgcGFnZSBjYW4gYmUgYW55d2hlcmUsIHRoZSBmb2xsb3dpbmcgaXMgbmVlZGVkIHNvIHRoYXQKKyAqIHZhLS0+cGEgYW5kIHZpY2UgdmVyc2EgY29udmVyc2lvbnMgd29yayBwcm9wZXJseSB3aXRob3V0IHBlcmZvcm1hbmNlCisgKiBoaXQgZm9yIGFsbCBfX3BhKCkvX192YSgpIG9wZXJhdGlvbnMuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBmbl9iYXNlOworCisvKgorICogQkFEX1BBR0VUQUJMRSBpcyB1c2VkIHdoZW4gd2UgbmVlZCBhIGJvZ3VzIHBhZ2UtdGFibGUsIHdoaWxlCisgKiBCQURfUEFHRSBpcyB1c2VkIGZvciBhIGJvZ3VzIHBhZ2UuCisgKgorICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKKyAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KKyAqLworZXh0ZXJuIHB0ZV90ICogX19iYWRfcGFnZXRhYmxlKHZvaWQpOworZXh0ZXJuIHB0ZV90IF9fYmFkX3BhZ2Uodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2U7CisKKyNkZWZpbmUgQkFEX1BBR0VUQUJMRSBfX2JhZF9wYWdldGFibGUoKQorI2RlZmluZSBCQURfUEFHRSBfX2JhZF9wYWdlKCkKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKCZlbXB0eV96ZXJvX3BhZ2UpKQorCisvKgorICovCitCVEZJWFVQREVGX0NBTExfQ09OU1Qoc3RydWN0IHBhZ2UgKiwgcG1kX3BhZ2UsIHBtZF90KQorQlRGSVhVUERFRl9DQUxMX0NPTlNUKHVuc2lnbmVkIGxvbmcsIHBnZF9wYWdlX3ZhZGRyLCBwZ2RfdCkKKworI2RlZmluZSBwbWRfcGFnZShwbWQpIEJURklYVVBfQ0FMTChwbWRfcGFnZSkocG1kKQorI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpIEJURklYVVBfQ0FMTChwZ2RfcGFnZV92YWRkcikocGdkKQorCitCVEZJWFVQREVGX1NFVEhJKG5vbmVfbWFzaykKK0JURklYVVBERUZfQ0FMTF9DT05TVChpbnQsIHB0ZV9wcmVzZW50LCBwdGVfdCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBwdGVfY2xlYXIsIHB0ZV90ICopCisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gIShwdGVfdmFsKHB0ZSkgJiB+QlRGSVhVUF9TRVRISShub25lX21hc2spKTsKK30KKworI2RlZmluZSBwdGVfcHJlc2VudChwdGUpIEJURklYVVBfQ0FMTChwdGVfcHJlc2VudCkocHRlKQorI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGUpIEJURklYVVBfQ0FMTChwdGVfY2xlYXIpKHB0ZSkKKworQlRGSVhVUERFRl9DQUxMX0NPTlNUKGludCwgcG1kX2JhZCwgcG1kX3QpCitCVEZJWFVQREVGX0NBTExfQ09OU1QoaW50LCBwbWRfcHJlc2VudCwgcG1kX3QpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgcG1kX2NsZWFyLCBwbWRfdCAqKQorCitzdGF0aWMgaW5saW5lIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCit7CisJcmV0dXJuICEocG1kX3ZhbChwbWQpICYgfkJURklYVVBfU0VUSEkobm9uZV9tYXNrKSk7Cit9CisKKyNkZWZpbmUgcG1kX2JhZChwbWQpIEJURklYVVBfQ0FMTChwbWRfYmFkKShwbWQpCisjZGVmaW5lIHBtZF9wcmVzZW50KHBtZCkgQlRGSVhVUF9DQUxMKHBtZF9wcmVzZW50KShwbWQpCisjZGVmaW5lIHBtZF9jbGVhcihwbWQpIEJURklYVVBfQ0FMTChwbWRfY2xlYXIpKHBtZCkKKworQlRGSVhVUERFRl9DQUxMX0NPTlNUKGludCwgcGdkX25vbmUsIHBnZF90KQorQlRGSVhVUERFRl9DQUxMX0NPTlNUKGludCwgcGdkX2JhZCwgcGdkX3QpCitCVEZJWFVQREVGX0NBTExfQ09OU1QoaW50LCBwZ2RfcHJlc2VudCwgcGdkX3QpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgcGdkX2NsZWFyLCBwZ2RfdCAqKQorCisjZGVmaW5lIHBnZF9ub25lKHBnZCkgQlRGSVhVUF9DQUxMKHBnZF9ub25lKShwZ2QpCisjZGVmaW5lIHBnZF9iYWQocGdkKSBCVEZJWFVQX0NBTEwocGdkX2JhZCkocGdkKQorI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpIEJURklYVVBfQ0FMTChwZ2RfcHJlc2VudCkocGdkKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkKSBCVEZJWFVQX0NBTEwocGdkX2NsZWFyKShwZ2QpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCisgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCisgKi8KK0JURklYVVBERUZfSEFMRihwdGVfd3JpdGVpKQorQlRGSVhVUERFRl9IQUxGKHB0ZV9kaXJ0eWkpCitCVEZJWFVQREVGX0hBTEYocHRlX3lvdW5naSkKKworc3RhdGljIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3ZhbChwdGUpICYgQlRGSVhVUF9IQUxGKHB0ZV93cml0ZWkpOworfQorCitzdGF0aWMgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpIF9fYXR0cmlidXRlX2NvbnN0X187CitzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBCVEZJWFVQX0hBTEYocHRlX2RpcnR5aSk7Cit9CisKK3N0YXRpYyBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV92YWwocHRlKSAmIEJURklYVVBfSEFMRihwdGVfeW91bmdpKTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgbm90IHRydWUuCisgKi8KK0JURklYVVBERUZfSEFMRihwdGVfZmlsZWkpCisKK3N0YXRpYyBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBCVEZJWFVQX0hBTEYocHRlX2ZpbGVpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQoreworCXJldHVybiAwOworfQorCisvKgorICovCitCVEZJWFVQREVGX0hBTEYocHRlX3dycHJvdGVjdGkpCitCVEZJWFVQREVGX0hBTEYocHRlX21rY2xlYW5pKQorQlRGSVhVUERFRl9IQUxGKHB0ZV9ta29sZGkpCisKK3N0YXRpYyBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCit7CisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5CVEZJWFVQX0hBTEYocHRlX3dycHJvdGVjdGkpKTsKK30KKworc3RhdGljIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQoreworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+QlRGSVhVUF9IQUxGKHB0ZV9ta2NsZWFuaSkpOworfQorCitzdGF0aWMgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfkJURklYVVBfSEFMRihwdGVfbWtvbGRpKSk7Cit9CisKK0JURklYVVBERUZfQ0FMTF9DT05TVChwdGVfdCwgcHRlX21rd3JpdGUsIHB0ZV90KQorQlRGSVhVUERFRl9DQUxMX0NPTlNUKHB0ZV90LCBwdGVfbWtkaXJ0eSwgcHRlX3QpCitCVEZJWFVQREVGX0NBTExfQ09OU1QocHRlX3QsIHB0ZV9ta3lvdW5nLCBwdGVfdCkKKworI2RlZmluZSBwdGVfbWt3cml0ZShwdGUpIEJURklYVVBfQ0FMTChwdGVfbWt3cml0ZSkocHRlKQorI2RlZmluZSBwdGVfbWtkaXJ0eShwdGUpIEJURklYVVBfQ0FMTChwdGVfbWtkaXJ0eSkocHRlKQorI2RlZmluZSBwdGVfbWt5b3VuZyhwdGUpIEJURklYVVBfQ0FMTChwdGVfbWt5b3VuZykocHRlKQorCisjZGVmaW5lIHB0ZV9ta3NwZWNpYWwocHRlKSAgICAocHRlKQorCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQkJbWtfcHRlKHBmbl90b19wYWdlKHBmbiksIHByb3QpCisKK0JURklYVVBERUZfQ0FMTCh1bnNpZ25lZCBsb25nLAkgcHRlX3BmbiwgcHRlX3QpCisjZGVmaW5lIHB0ZV9wZm4ocHRlKSBCVEZJWFVQX0NBTEwocHRlX3BmbikocHRlKQorI2RlZmluZSBwdGVfcGFnZShwdGUpCXBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCitCVEZJWFVQREVGX0NBTExfQ09OU1QocHRlX3QsIG1rX3B0ZSwgc3RydWN0IHBhZ2UgKiwgcGdwcm90X3QpCisKK0JURklYVVBERUZfQ0FMTF9DT05TVChwdGVfdCwgbWtfcHRlX3BoeXMsIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KQorQlRGSVhVUERFRl9DQUxMX0NPTlNUKHB0ZV90LCBta19wdGVfaW8sIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90LCBpbnQpCitCVEZJWFVQREVGX0NBTExfQ09OU1QocGdwcm90X3QsIHBncHJvdF9ub25jYWNoZWQsIHBncHJvdF90KQorCisjZGVmaW5lIG1rX3B0ZShwYWdlLHBncHJvdCkgQlRGSVhVUF9DQUxMKG1rX3B0ZSkocGFnZSxwZ3Byb3QpCisjZGVmaW5lIG1rX3B0ZV9waHlzKHBhZ2UscGdwcm90KSBCVEZJWFVQX0NBTEwobWtfcHRlX3BoeXMpKHBhZ2UscGdwcm90KQorI2RlZmluZSBta19wdGVfaW8ocGFnZSxwZ3Byb3Qsc3BhY2UpIEJURklYVVBfQ0FMTChta19wdGVfaW8pKHBhZ2UscGdwcm90LHNwYWNlKQorCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocGdwcm90KSBCVEZJWFVQX0NBTEwocGdwcm90X25vbmNhY2hlZCkocGdwcm90KQorCitCVEZJWFVQREVGX0lOVChwdGVfbW9kaWZ5X21hc2spCisKK3N0YXRpYyBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJcmV0dXJuIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBCVEZJWFVQX0lOVChwdGVfbW9kaWZ5X21hc2spKSB8CisJCXBncHJvdF92YWwobmV3cHJvdCkpOworfQorCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyZXNzKSkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLworQlRGSVhVUERFRl9DQUxMKHBtZF90ICosIHBtZF9vZmZzZXQsIHBnZF90ICosIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIHBtZF9vZmZzZXQoZGlyLGFkZHIpIEJURklYVVBfQ0FMTChwbWRfb2Zmc2V0KShkaXIsYWRkcikKKworLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCitCVEZJWFVQREVGX0NBTEwocHRlX3QgKiwgcHRlX29mZnNldF9rZXJuZWwsIHBtZF90ICosIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpcixhZGRyKSBCVEZJWFVQX0NBTEwocHRlX29mZnNldF9rZXJuZWwpKGRpcixhZGRyKQorCisvKgorICogVGhpcyBzaG9ydGN1dCB3b3JrcyBvbiBzdW40bSAoYW5kIHN1bjRkKSBiZWNhdXNlIHRoZSBub2NhY2hlIGFyZWEgaXMgc3RhdGljLAorICogYW5kIHN1bjRjIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBubyBoaWdobWVtIGFueXdheS4KKyAqLworI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkLCBhKQkJcHRlX29mZnNldF9rZXJuZWwoZCxhKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZCwgYSkJcHRlX29mZnNldF9rZXJuZWwoZCxhKQorCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpCQlkb3t9d2hpbGUoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCWRve313aGlsZSgwKQorCisvKiBDZXJ0YWluIGFyY2hpdGVjdHVyZXMgbmVlZCB0byBkbyBzcGVjaWFsIHRoaW5ncyB3aGVuIHB0ZSdzCisgKiB3aXRoaW4gYSBwYWdlIHRhYmxlIGFyZSBkaXJlY3RseSBtb2RpZmllZC4gIFRodXMsIHRoZSBmb2xsb3dpbmcKKyAqIGhvb2sgaXMgbWFkZSBhdmFpbGFibGUuCisgKi8KKworQlRGSVhVUERFRl9DQUxMKHZvaWQsIHNldF9wdGUsIHB0ZV90ICosIHB0ZV90KQorCisjZGVmaW5lIHNldF9wdGUocHRlcCxwdGV2YWwpIEJURklYVVBfQ0FMTChzZXRfcHRlKShwdGVwLHB0ZXZhbCkKKyNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQorCitzdHJ1Y3Qgc2VxX2ZpbGU7CitCVEZJWFVQREVGX0NBTEwodm9pZCwgbW11X2luZm8sIHN0cnVjdCBzZXFfZmlsZSAqKQorCisjZGVmaW5lIG1tdV9pbmZvKHApIEJURklYVVBfQ0FMTChtbXVfaW5mbykocCkKKworLyogRmF1bHQgaGFuZGxlciBzdHVmZi4uLiAqLworI2RlZmluZSBGQVVMVF9DT0RFX1BST1QgICAgIDB4MQorI2RlZmluZSBGQVVMVF9DT0RFX1dSSVRFICAgIDB4MgorI2RlZmluZSBGQVVMVF9DT0RFX1VTRVIgICAgIDB4NAorCitCVEZJWFVQREVGX0NBTEwodm9pZCwgdXBkYXRlX21tdV9jYWNoZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KQorCisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHIscHRlKSBCVEZJWFVQX0NBTEwodXBkYXRlX21tdV9jYWNoZSkodm1hLGFkZHIscHRlKQorCitCVEZJWFVQREVGX0NBTEwodm9pZCwgc3BhcmNfbWFwaW9yYW5nZSwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nLAorICAgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBzcGFyY191bm1hcGlvcmFuZ2UsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgc3BhcmNfbWFwaW9yYW5nZShidXMscGEsdmEsbGVuKSBCVEZJWFVQX0NBTEwoc3BhcmNfbWFwaW9yYW5nZSkoYnVzLHBhLHZhLGxlbikKKyNkZWZpbmUgc3BhcmNfdW5tYXBpb3JhbmdlKHZhLGxlbikgQlRGSVhVUF9DQUxMKHNwYXJjX3VubWFwaW9yYW5nZSkodmEsbGVuKQorCitleHRlcm4gaW50IGludmFsaWRfc2VnbWVudDsKKworLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLworQlRGSVhVUERFRl9DQUxMKHVuc2lnbmVkIGxvbmcsIF9fc3dwX3R5cGUsIHN3cF9lbnRyeV90KQorQlRGSVhVUERFRl9DQUxMKHVuc2lnbmVkIGxvbmcsIF9fc3dwX29mZnNldCwgc3dwX2VudHJ5X3QpCitCVEZJWFVQREVGX0NBTEwoc3dwX2VudHJ5X3QsIF9fc3dwX2VudHJ5LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCisjZGVmaW5lIF9fc3dwX3R5cGUoX194KQkJCUJURklYVVBfQ0FMTChfX3N3cF90eXBlKShfX3gpCisjZGVmaW5lIF9fc3dwX29mZnNldChfX3gpCQlCVEZJWFVQX0NBTEwoX19zd3Bfb2Zmc2V0KShfX3gpCisjZGVmaW5lIF9fc3dwX2VudHJ5KF9fdHlwZSxfX29mZikJQlRGSVhVUF9DQUxMKF9fc3dwX2VudHJ5KShfX3R5cGUsX19vZmYpCisKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKy8qIGZpbGUtb2Zmc2V0LWluLXB0ZSBoZWxwZXJzICovCitCVEZJWFVQREVGX0NBTEwodW5zaWduZWQgbG9uZywgcHRlX3RvX3Bnb2ZmLCBwdGVfdCBwdGUpOworQlRGSVhVUERFRl9DQUxMKHB0ZV90LCBwZ29mZl90b19wdGUsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOworCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpIEJURklYVVBfQ0FMTChwdGVfdG9fcGdvZmYpKHB0ZSkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgQlRGSVhVUF9DQUxMKHBnb2ZmX3RvX3B0ZSkob2ZmKQorCisvKgorICogVGhpcyBpcyBtYWRlIGEgY29uc3RhbnQgYmVjYXVzZSBtbS9mcmVtYXAuYyByZXF1aXJlZCBhIGNvbnN0YW50LgorICogTm90ZSB0aGF0IGxheW91dCBvZiB0aGVzZSBiaXRzIGlzIGRpZmZlcmVudCBiZXR3ZWVuIHN1bjRjLmMgYW5kIHNybW11LmMuCisgKi8KKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMgMjQKKworLyoKKyAqLworc3RydWN0IGN0eF9saXN0IHsKKwlzdHJ1Y3QgY3R4X2xpc3QgKm5leHQ7CisJc3RydWN0IGN0eF9saXN0ICpwcmV2OworCXVuc2lnbmVkIGludCBjdHhfbnVtYmVyOworCXN0cnVjdCBtbV9zdHJ1Y3QgKmN0eF9tbTsKK307CisKK2V4dGVybiBzdHJ1Y3QgY3R4X2xpc3QgKmN0eF9saXN0X3Bvb2w7ICAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi8KK2V4dGVybiBzdHJ1Y3QgY3R4X2xpc3QgY3R4X2ZyZWU7ICAgICAgICAvKiBIZWFkIG9mIGZyZWUgbGlzdCAqLworZXh0ZXJuIHN0cnVjdCBjdHhfbGlzdCBjdHhfdXNlZDsgICAgICAgIC8qIEhlYWQgb2YgdXNlZCBjb250ZXh0cyBsaXN0ICovCisKKyNkZWZpbmUgTk9fQ09OVEVYVCAgICAgLTEKKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9mcm9tX2N0eF9saXN0KHN0cnVjdCBjdHhfbGlzdCAqZW50cnkpCit7CisJZW50cnktPm5leHQtPnByZXYgPSBlbnRyeS0+cHJldjsKKwllbnRyeS0+cHJldi0+bmV4dCA9IGVudHJ5LT5uZXh0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3RvX2N0eF9saXN0KHN0cnVjdCBjdHhfbGlzdCAqaGVhZCwgc3RydWN0IGN0eF9saXN0ICplbnRyeSkKK3sKKwllbnRyeS0+bmV4dCA9IGhlYWQ7CisJKGVudHJ5LT5wcmV2ID0gaGVhZC0+cHJldiktPm5leHQgPSBlbnRyeTsKKwloZWFkLT5wcmV2ID0gZW50cnk7Cit9CisjZGVmaW5lIGFkZF90b19mcmVlX2N0eGxpc3QoZW50cnkpIGFkZF90b19jdHhfbGlzdCgmY3R4X2ZyZWUsIGVudHJ5KQorI2RlZmluZSBhZGRfdG9fdXNlZF9jdHhsaXN0KGVudHJ5KSBhZGRfdG9fY3R4X2xpc3QoJmN0eF91c2VkLCBlbnRyeSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2dldF9waHlzICh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3dpdGNoIChzcGFyY19jcHVfbW9kZWwpeworCWNhc2Ugc3VuNDoKKwljYXNlIHN1bjRjOgorCQlyZXR1cm4gc3VuNGNfZ2V0X3B0ZSAoYWRkcikgPDwgUEFHRV9TSElGVDsKKwljYXNlIHN1bjRtOgorCWNhc2Ugc3VuNGQ6CisJCXJldHVybiAoKHNybW11X2dldF9wdGUgKGFkZHIpICYgMHhmZmZmZmYwMCkgPDwgNCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludAorX19nZXRfaW9zcGFjZSAodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN3aXRjaCAoc3BhcmNfY3B1X21vZGVsKXsKKwljYXNlIHN1bjQ6CisJY2FzZSBzdW40YzoKKwkJcmV0dXJuIC0xOyAvKiBEb24ndCBjaGVjayBpb3NwYWNlIG9uIHN1bjRjICovCisJY2FzZSBzdW40bToKKwljYXNlIHN1bjRkOgorCQlyZXR1cm4gKHNybW11X2dldF9wdGUgKGFkZHIpID4+IDI4KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorfQorCitleHRlcm4gdW5zaWduZWQgbG9uZyAqc3BhcmNfdmFsaWRfYWRkcl9iaXRtYXA7CisKKy8qIE5lZWRzIHRvIGJlIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIGxpbnV4L21tLmgsIGFzIGl0IGlzIGFyY2ggZGVwZW5kZW50ICovCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKSBcCisJKHRlc3RfYml0KF9fcGEoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKT4+MjAsIHNwYXJjX3ZhbGlkX2FkZHJfYml0bWFwKSkKKworZXh0ZXJuIGludCBpb19yZW1hcF9wZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgcGZuLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKKworLyoKKyAqIEZvciBzcGFyYzMyJjY0LCB0aGUgcGZuIGluIGlvX3JlbWFwX3Bmbl9yYW5nZSgpIGNhcnJpZXMgPGlvc3BhY2U+IGluCisgKiBpdHMgaGlnaCA0IGJpdHMuICBUaGVzZSBtYWNyb3MvZnVuY3Rpb25zIHB1dCBpdCB0aGVyZSBvciBnZXQgaXQgZnJvbSB0aGVyZS4KKyAqLworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuIHwgKHNwYWNlIDw8IChCSVRTX1BFUl9MT05HIC0gNCkpKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkocGZuID4+IChCSVRTX1BFUl9MT05HIC0gNCkpCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4gJiAweDBmZmZmZmZmVUwpCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCisjZGVmaW5lIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpIFwKKyh7CQkJCQkJCQkJICBcCisJaW50IF9fY2hhbmdlZCA9ICFwdGVfc2FtZSgqKF9fcHRlcCksIF9fZW50cnkpOwkJCSAgXAorCWlmIChfX2NoYW5nZWQpIHsJCQkJCQkgIFwKKwkJc2V0X3B0ZV9hdCgoX192bWEpLT52bV9tbSwgKF9fYWRkcmVzcyksIF9fcHRlcCwgX19lbnRyeSk7IFwKKwkJZmx1c2hfdGxiX3BhZ2UoX192bWEsIF9fYWRkcmVzcyk7CQkJICBcCisJfQkJCQkJCQkJICBcCisJKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40YykgfHwgX19jaGFuZ2VkOwkJCSAgXAorfSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQgICAgICAgICAgIDB4ZmU2MDAwMDAKKy8qIFhYWCBBbHRlciB0aGlzIHdoZW4gSSBnZXQgYXJvdW5kIHRvIGZpeGluZyBzdW40YyAtIEFudG9uICovCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICAgICAgIDB4ZmZjMDAwMDAKKworCisvKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gY29wZSB3aXRoIFZBIGhvbGVzIGZvciB1c2VybGFuZCAqLworI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQorCisvKgorICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICEoX1NQQVJDX1BHVEFCTEVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGVfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGVfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjllYzJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGd0YWJsZV82NC5oCkBAIC0wLDAgKzEsNzc1IEBACisvKgorICogcGd0YWJsZS5oOiBTcGl0RmlyZSBwYWdlIHRhYmxlIG9wZXJhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IDE5OTYsMTk5NyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBDb3B5cmlnaHQgMTk5NywxOTk4IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9QR1RBQkxFX0gKKyNkZWZpbmUgX1NQQVJDNjRfUEdUQUJMRV9ICisKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGFuZCBkZWZpbmVzIG5lY2Vzc2FyeSB0byBtb2RpZnkgYW5kIHVzZQorICogdGhlIFNwaXRGaXJlIHBhZ2UgdGFibGVzLgorICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CisjaW5jbHVkZSA8YXNtL2FzaS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLyogVGhlIGtlcm5lbCBpbWFnZSBvY2N1cGllcyAweDQwMDAwMDAgdG8gMHg2MDAwMDAwICg0TUIgLS0+IDk2TUIpLgorICogVGhlIHBhZ2UgY29weSBibG9ja29wcyBjYW4gdXNlIDB4NjAwMDAwMCB0byAweDgwMDAwMDAuCisgKiBUaGUgVFNCIGlzIG1hcHBlZCBpbiB0aGUgMHg4MDAwMDAwIHRvIDB4YTAwMDAwMCByYW5nZS4KKyAqIFRoZSBQUk9NIHJlc2lkZXMgaW4gYW4gYXJlYSBzcGFubmluZyAweGYwMDAwMDAwIHRvIDB4MTAwMDAwMDAwLgorICogVGhlIHZtYWxsb2MgYXJlYSBzcGFucyAweDEwMDAwMDAwMCB0byAweDIwMDAwMDAwMC4KKyAqIFNpbmNlIG1vZHVsZXMgbmVlZCB0byBiZSBpbiB0aGUgbG93ZXN0IDMyLWJpdHMgb2YgdGhlIGFkZHJlc3Mgc3BhY2UsCisgKiB3ZSBwbGFjZSB0aGVtIHJpZ2h0IGJlZm9yZSB0aGUgT0JQIGFyZWEgZnJvbSAweDEwMDAwMDAwIHRvIDB4ZjAwMDAwMDAuCisgKiBUaGVyZSBpcyBhIHNpbmdsZSBzdGF0aWMga2VybmVsIFBNRCB3aGljaCBtYXBzIGZyb20gMHgwIHRvIGFkZHJlc3MKKyAqIDB4NDAwMDAwMDAwLgorICovCisjZGVmaW5lCVRMQlRFTVBfQkFTRQkJX0FDKDB4MDAwMDAwMDAwNjAwMDAwMCxVTCkKKyNkZWZpbmUJVFNCTUFQX0JBU0UJCV9BQygweDAwMDAwMDAwMDgwMDAwMDAsVUwpCisjZGVmaW5lIE1PRFVMRVNfVkFERFIJCV9BQygweDAwMDAwMDAwMTAwMDAwMDAsVUwpCisjZGVmaW5lIE1PRFVMRVNfTEVOCQlfQUMoMHgwMDAwMDAwMGUwMDAwMDAwLFVMKQorI2RlZmluZSBNT0RVTEVTX0VORAkJX0FDKDB4MDAwMDAwMDBmMDAwMDAwMCxVTCkKKyNkZWZpbmUgTE9XX09CUF9BRERSRVNTCQlfQUMoMHgwMDAwMDAwMGYwMDAwMDAwLFVMKQorI2RlZmluZSBISV9PQlBfQUREUkVTUwkJX0FDKDB4MDAwMDAwMDEwMDAwMDAwMCxVTCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkJX0FDKDB4MDAwMDAwMDEwMDAwMDAwMCxVTCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJCV9BQygweDAwMDAwMDAyMDAwMDAwMDAsVUwpCisjZGVmaW5lIFZNRU1NQVBfQkFTRQkJX0FDKDB4MDAwMDAwMDIwMDAwMDAwMCxVTCkKKworI2RlZmluZSB2bWVtbWFwCQkJKChzdHJ1Y3QgcGFnZSAqKVZNRU1NQVBfQkFTRSkKKworLyogWFhYIEFsbCBvZiB0aGlzIG5lZWRzIHRvIGJlIHJldGhvdWdodCBzbyB3ZSBjYW4gdGFrZSBhZHZhbnRhZ2UKKyAqIFhYWCBjaGVldGFoJ3MgZnVsbCA2NC1iaXQgdmlydHVhbCBhZGRyZXNzIHNwYWNlLCBpZS4gbm8gbW9yZSBob2xlCisgKiBYWFggaW4gdGhlIG1pZGRsZSBsaWtlIG9uIHNwaXRmaXJlLiAtRGF2ZU0KKyAqLworLyoKKyAqIEdpdmVuIGEgdmlydHVhbCBhZGRyZXNzLCB0aGUgbG93ZXN0IFBBR0VfU0hJRlQgYml0cyBkZXRlcm1pbmUgb2Zmc2V0CisgKiBpbnRvIHRoZSBwYWdlOyB0aGUgbmV4dCBoaWdoZXIgUEFHRV9TSElGVC0zIGJpdHMgZGV0ZXJtaW5lIHRoZSBwdGUjCisgKiBpbiB0aGUgcHJvcGVyIHBhZ2V0YWJsZSAodGhlIC0zIGlzIGZyb20gdGhlIDggYnl0ZSBwdGVzLCBhbmQgZWFjaCBwYWdlCisgKiB0YWJsZSBpcyBhIHNpbmdsZSBwYWdlIGxvbmcpLiBUaGUgbmV4dCBoaWdoZXIgUE1EX0JJVFMgZGV0ZXJtaW5lIHBtZCMKKyAqIGluIHRoZSBwcm9wZXIgcG1kdGFibGUgKHdoZXJlIHdlIG11c3QgaGF2ZSBQTURfQklUUyA8PSAoUEFHRV9TSElGVC0yKQorICogc2luY2UgdGhlIHBtZCBlbnRyaWVzIGFyZSA0IGJ5dGVzLCBhbmQgZWFjaCBwbWQgcGFnZSBpcyBhIHNpbmdsZSBwYWdlCisgKiBsb25nKS4gRmluYWxseSwgdGhlIGhpZ2hlciBmZXcgYml0cyBkZXRlcm1pbmUgcGdkZSMuCisgKi8KKworLyogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBzZWNvbmQtbGV2ZWwgcGFnZQorICogdGFibGUgY2FuIG1hcAorICovCisjZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIChQQUdFX1NISUZULTMpKQorI2RlZmluZSBQTURfU0laRQkoX0FDKDEsVUwpIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCisjZGVmaW5lIFBNRF9CSVRTCShQQUdFX1NISUZUIC0gMikKKworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFBHRElSX1NISUZUCShQQUdFX1NISUZUICsgKFBBR0VfU0hJRlQtMykgKyBQTURfQklUUykKKyNkZWZpbmUgUEdESVJfU0laRQkoX0FDKDEsVUwpIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisjZGVmaW5lIFBHRElSX0JJVFMJKFBBR0VfU0hJRlQgLSAyKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworLyogRW50cmllcyBwZXIgcGFnZSBkaXJlY3RvcnkgbGV2ZWwuICovCisjZGVmaW5lIFBUUlNfUEVSX1BURQkoMVVMIDw8IChQQUdFX1NISUZULTMpKQorI2RlZmluZSBQVFJTX1BFUl9QTUQJKDFVTCA8PCBQTURfQklUUykKKyNkZWZpbmUgUFRSU19QRVJfUEdECSgxVUwgPDwgUEdESVJfQklUUykKKworLyogS2VybmVsIGhhcyBhIHNlcGFyYXRlIDQ0Yml0IGFkZHJlc3Mgc3BhY2UuICovCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpCV9fYnVpbHRpbl90cmFwKCkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpCV9fYnVpbHRpbl90cmFwKCkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpCV9fYnVpbHRpbl90cmFwKCkKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisvKiBQVEUgYml0cyB3aGljaCBhcmUgdGhlIHNhbWUgaW4gU1VONFUgYW5kIFNVTjRWIGZvcm1hdC4gICovCisjZGVmaW5lIF9QQUdFX1ZBTElECSAgX0FDKDB4ODAwMDAwMDAwMDAwMDAwMCxVTCkgLyogVmFsaWQgVFRFICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUgkgIAkgIF9BQygweDgwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIEtlZXAgcmVmIGJpdCB1cHRvZGF0ZSovCisKKy8qIFNVTjRVIHB0ZSBiaXRzLi4uICovCisjZGVmaW5lIF9QQUdFX1NaNE1CXzRVCSAgX0FDKDB4NjAwMDAwMDAwMDAwMDAwMCxVTCkgLyogNE1CIFBhZ2UgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1o1MTJLXzRVCSAgX0FDKDB4NDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogNTEySyBQYWdlICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1o2NEtfNFUJICBfQUMoMHgyMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiA2NEsgUGFnZSAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjhLXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogOEsgUGFnZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfTkZPXzRVCSAgX0FDKDB4MTAwMDAwMDAwMDAwMDAwMCxVTCkgLyogTm8gRmF1bHQgT25seSAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfSUVfNFUJICBfQUMoMHgwODAwMDAwMDAwMDAwMDAwLFVMKSAvKiBJbnZlcnQgRW5kaWFubmVzcyAgICAqLworI2RlZmluZSBfUEFHRV9TT0ZUMl80VQkgIF9BQygweDA3RkMwMDAwMDAwMDAwMDAsVUwpIC8qIFNvZnR3YXJlIGJpdHMsIHNldCAyICovCisjZGVmaW5lIF9QQUdFX1JFUzFfNFUJICBfQUMoMHgwMDAyMDAwMDAwMDAwMDAwLFVMKSAvKiBSZXNlcnZlZCAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjMyTUJfNFUJICBfQUMoMHgwMDAxMDAwMDAwMDAwMDAwLFVMKSAvKiAoUGFudGhlcikgMzJNQiBwYWdlICAqLworI2RlZmluZSBfUEFHRV9TWjI1Nk1CXzRVICBfQUMoMHgyMDAxMDAwMDAwMDAwMDAwLFVMKSAvKiAoUGFudGhlcikgMjU2TUIgcGFnZSAqLworI2RlZmluZSBfUEFHRV9TWkFMTF80VQkgIF9BQygweDYwMDEwMDAwMDAwMDAwMDAsVUwpIC8qIEFsbCBwZ3N6IGJpdHMgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NOXzRVCSAgX0FDKDB4MDAwMDgwMDAwMDAwMDAwMCxVTCkgLyogKENoZWV0YWgpIFNub29wICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVTMl80VQkgIF9BQygweDAwMDA3ODAwMDAwMDAwMDAsVUwpIC8qIFJlc2VydmVkICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1BBRERSXzRVCSAgX0FDKDB4MDAwMDA3RkZGRkZGRTAwMCxVTCkgLyogKENoZWV0YWgpIHBhWzQyOjEzXSAgKi8KKyNkZWZpbmUgX1BBR0VfU09GVF80VQkgIF9BQygweDAwMDAwMDAwMDAwMDFGODAsVUwpIC8qIFNvZnR3YXJlIGJpdHM6ICAgICAgICovCisjZGVmaW5lIF9QQUdFX0VYRUNfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAxMDAwLFVMKSAvKiBFeGVjdXRhYmxlIFNXIGJpdCAgICAqLworI2RlZmluZSBfUEFHRV9NT0RJRklFRF80VSBfQUMoMHgwMDAwMDAwMDAwMDAwODAwLFVMKSAvKiBNb2RpZmllZCAoZGlydHkpICAgICAqLworI2RlZmluZSBfUEFHRV9GSUxFXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkgLyogUGFnZWNhY2hlIHBhZ2UgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRURfNFUgX0FDKDB4MDAwMDAwMDAwMDAwMDQwMCxVTCkgLyogQWNjZXNzZWQgKHJlZidkKSAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVBRF80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAyMDAsVUwpIC8qIFJlYWRhYmxlIFNXIEJpdCAgICAgICovCisjZGVmaW5lIF9QQUdFX1dSSVRFXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDEwMCxVTCkgLyogV3JpdGFibGUgU1cgQml0ICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVF80VSAgX0FDKDB4MDAwMDAwMDAwMDAwMDA4MCxVTCkgLyogUHJlc2VudCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfTF80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAwNDAsVUwpIC8qIExvY2tlZCBUVEUgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX0NQXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAyMCxVTCkgLyogQ2FjaGVhYmxlIGluIFAtQ2FjaGUgKi8KKyNkZWZpbmUgX1BBR0VfQ1ZfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDEwLFVMKSAvKiBDYWNoZWFibGUgaW4gVi1DYWNoZSAqLworI2RlZmluZSBfUEFHRV9FXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwOCxVTCkgLyogc2lkZS1FZmZlY3QgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUF80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDQsVUwpIC8qIFByaXZpbGVnZWQgUGFnZSAgICAgICovCisjZGVmaW5lIF9QQUdFX1dfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAyLFVMKSAvKiBXcml0YWJsZSAgICAgICAgICAgICAqLworCisvKiBTVU40ViBwdGUgYml0cy4uLiAqLworI2RlZmluZSBfUEFHRV9ORk9fNFYJICBfQUMoMHg0MDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBObyBGYXVsdCBPbmx5ICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TT0ZUMl80VgkgIF9BQygweDNGMDAwMDAwMDAwMDAwMDAsVUwpIC8qIFNvZnR3YXJlIGJpdHMsIHNldCAyICovCisjZGVmaW5lIF9QQUdFX01PRElGSUVEXzRWIF9BQygweDIwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIE1vZGlmaWVkIChkaXJ0eSkgICAgICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEXzRWIF9BQygweDEwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIEFjY2Vzc2VkIChyZWYnZCkgICAgICovCisjZGVmaW5lIF9QQUdFX1JFQURfNFYJICBfQUMoMHgwODAwMDAwMDAwMDAwMDAwLFVMKSAvKiBSZWFkYWJsZSBTVyBCaXQgICAgICAqLworI2RlZmluZSBfUEFHRV9XUklURV80VgkgIF9BQygweDA0MDAwMDAwMDAwMDAwMDAsVUwpIC8qIFdyaXRhYmxlIFNXIEJpdCAgICAgICovCisjZGVmaW5lIF9QQUdFX1BBRERSXzRWCSAgX0FDKDB4MDBGRkZGRkZGRkZGRTAwMCxVTCkgLyogcGFkZHJbNTU6MTNdICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfSUVfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAxMDAwLFVMKSAvKiBJbnZlcnQgRW5kaWFubmVzcyAgICAqLworI2RlZmluZSBfUEFHRV9FXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkgLyogc2lkZS1FZmZlY3QgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfQ1BfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwNDAwLFVMKSAvKiBDYWNoZWFibGUgaW4gUC1DYWNoZSAqLworI2RlZmluZSBfUEFHRV9DVl80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAyMDAsVUwpIC8qIENhY2hlYWJsZSBpbiBWLUNhY2hlICovCisjZGVmaW5lIF9QQUdFX1BfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMTAwLFVMKSAvKiBQcml2aWxlZ2VkIFBhZ2UgICAgICAqLworI2RlZmluZSBfUEFHRV9FWEVDXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDA4MCxVTCkgLyogRXhlY3V0YWJsZSBQYWdlICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfV180VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwNDAsVUwpIC8qIFdyaXRhYmxlICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NPRlRfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDMwLFVMKSAvKiBTb2Z0d2FyZSBiaXRzICAgICAgICAqLworI2RlZmluZSBfUEFHRV9GSUxFXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAyMCxVTCkgLyogUGFnZWNhY2hlIHBhZ2UgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVF80ViAgX0FDKDB4MDAwMDAwMDAwMDAwMDAxMCxVTCkgLyogUHJlc2VudCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVTVl80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDgsVUwpIC8qIFJlc2VydmVkICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NaMTZHQl80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDcsVUwpIC8qIDE2R0IgUGFnZSAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NaMkdCXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwNixVTCkgLyogMkdCIFBhZ2UgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1oyNTZNQl80ViAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwNSxVTCkgLyogMjU2TUIgUGFnZSAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1ozMk1CXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwNCxVTCkgLyogMzJNQiBQYWdlICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1o0TUJfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAzLFVMKSAvKiA0TUIgUGFnZSAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjUxMktfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAyLFVMKSAvKiA1MTJLIFBhZ2UgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjY0S180VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDEsVUwpIC8qIDY0SyBQYWdlICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NaOEtfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiA4SyBQYWdlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWkFMTF80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDcsVUwpIC8qIEFsbCBwZ3N6IGJpdHMgICAgICAgICovCisKKyNpZiBQQUdFX1NISUZUID09IDEzCisjZGVmaW5lIF9QQUdFX1NaQklUU180VQlfUEFHRV9TWjhLXzRVCisjZGVmaW5lIF9QQUdFX1NaQklUU180VglfUEFHRV9TWjhLXzRWCisjZWxpZiBQQUdFX1NISUZUID09IDE2CisjZGVmaW5lIF9QQUdFX1NaQklUU180VQlfUEFHRV9TWjY0S180VQorI2RlZmluZSBfUEFHRV9TWkJJVFNfNFYJX1BBR0VfU1o2NEtfNFYKKyNlbHNlCisjZXJyb3IgV3JvbmcgUEFHRV9TSElGVCBzcGVjaWZpZWQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNE1CKQorI2RlZmluZSBfUEFHRV9TWkhVR0VfNFUJX1BBR0VfU1o0TUJfNFUKKyNkZWZpbmUgX1BBR0VfU1pIVUdFXzRWCV9QQUdFX1NaNE1CXzRWCisjZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJLKQorI2RlZmluZSBfUEFHRV9TWkhVR0VfNFUJX1BBR0VfU1o1MTJLXzRVCisjZGVmaW5lIF9QQUdFX1NaSFVHRV80VglfUEFHRV9TWjUxMktfNFYKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SykKKyNkZWZpbmUgX1BBR0VfU1pIVUdFXzRVCV9QQUdFX1NaNjRLXzRVCisjZGVmaW5lIF9QQUdFX1NaSFVHRV80VglfUEFHRV9TWjY0S180VgorI2VuZGlmCisKKy8qIFRoZXNlIGFyZSBhY3R1YWxseSBmaWxsZWQgaW4gYXQgYm9vdCB0aW1lIGJ5IHN1bjR7dSx2fV9wZ3Byb3RfaW5pdCgpICovCisjZGVmaW5lIF9fUDAwMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1AwMDEJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19QMDEwCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUDAxMQlfX3BncHJvdCgwKQorI2RlZmluZSBfX1AxMDAJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19QMTAxCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUDExMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1AxMTEJX19wZ3Byb3QoMCkKKworI2RlZmluZSBfX1MwMDAJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19TMDAxCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUzAxMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MwMTEJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19TMTAwCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUzEwMQlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MxMTAJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19TMTExCV9fcGdwcm90KDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiBwdGVfdCBta19wdGVfaW8odW5zaWduZWQgbG9uZywgcGdwcm90X3QsIGludCwgdW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHB0ZV9zel9iaXRzKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK2V4dGVybiBwZ3Byb3RfdCBQQUdFX0tFUk5FTDsKK2V4dGVybiBwZ3Byb3RfdCBQQUdFX0tFUk5FTF9MT0NLRUQ7CitleHRlcm4gcGdwcm90X3QgUEFHRV9DT1BZOworZXh0ZXJuIHBncHJvdF90IFBBR0VfU0hBUkVEOworCisvKiBYWFggVGhpcyB1Z2x5bmVzcyBpcyBmb3IgdGhlIGF0eWZiIGRyaXZlcidzIHNwYXJjIG1tYXAoKSBzdXBwb3J0LiBYWFggKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9QQUdFX0lFOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX1BBR0VfRTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9QQUdFX0NBQ0hFOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBwZ19pb2JpdHM7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfUEFHRV9BTExfU1pfQklUUzsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9QQUdFX1NaQklUUzsKKworZXh0ZXJuIHN0cnVjdCBwYWdlICptZW1fbWFwX3plcm87CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKG1lbV9tYXBfemVybykKKworLyogUEZOcyBhcmUgcmVhbCBwaHlzaWNhbCBwYWdlIG51bWJlcnMuICBIb3dldmVyLCBtZW1fbWFwIG9ubHkgYmVnaW5zIHRvIHJlY29yZAorICogcGVyLXBhZ2UgaW5mb3JtYXRpb24gc3RhcnRpbmcgYXQgcGZuX2Jhc2UuICBUaGlzIGlzIHRvIGhhbmRsZSBzeXN0ZW1zIHdoZXJlCisgKiB0aGUgZmlyc3QgcGh5c2ljYWwgcGFnZSBpbiB0aGUgbWFjaGluZSBpcyBhdCBzb21lIGh1Z2UgcGh5c2ljYWwgYWRkcmVzcywKKyAqIHN1Y2ggYXMgNEdCLiAgIFRoaXMgaXMgY29tbW9uIG9uIGEgcGFydGl0aW9uZWQgRTEwMDAwLCBmb3IgZXhhbXBsZS4KKyAqLworc3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90KQoreworCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBwZm4gPDwgUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIHN6X2JpdHM7CisKKwlzel9iaXRzID0gMFVMOworCWlmIChfUEFHRV9TWkJJVFNfNFUgIT0gMFVMIHx8IF9QQUdFX1NaQklUU180ViAhPSAwVUwpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJcbjY2MToJc2V0aGkJCSUldWhpKCUxKSwgJTBcbiIKKwkJIglzbGx4CQklMCwgMzIsICUwXG4iCisJCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkJIgkud29yZAkJNjYxYlxuIgorCQkiCW1vdgkJJTIsICUwXG4iCisJCSIJbm9wXG4iCisJCSIJLnByZXZpb3VzXG4iCisJCTogIj1yIiAoc3pfYml0cykKKwkJOiAiaSIgKF9QQUdFX1NaQklUU180VSksICJpIiAoX1BBR0VfU1pCSVRTXzRWKSk7CisJfQorCXJldHVybiBfX3B0ZShwYWRkciB8IHN6X2JpdHMgfCBwZ3Byb3RfdmFsKHByb3QpKTsKK30KKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCisKKy8qIFRoaXMgb25lIGNhbiBiZSBkb25lIHdpdGggdHdvIHNoaWZ0cy4gICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3BmbihwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CXNsbHgJCSUxLCAlMiwgJTBcbiIKKwkiCXNybHgJCSUwLCAlMywgJTBcbiIKKwkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCisJIgkud29yZAkJNjYxYlxuIgorCSIJc2xseAkJJTEsICU0LCAlMFxuIgorCSIJc3JseAkJJTAsICU1LCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChyZXQpCisJOiAiciIgKHB0ZV92YWwocHRlKSksCisJICAiaSIgKDIxKSwgImkiICgyMSArIFBBR0VfU0hJRlQpLAorCSAgImkiICg4KSwgImkiICg4ICsgUEFHRV9TSElGVCkpOworCisJcmV0dXJuIHJldDsKK30KKyNkZWZpbmUgcHRlX3BhZ2UoeCkgcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2ssIHRtcDsKKworCS8qIFNVTjRVOiAweDYwMDMwN2ZmZmZmZmVjYjggKG5lZ2F0ZWQgPT0gMHg5ZmZjZjgwMDAwMDAxMzQ3KQorCSAqIFNVTjRWOiAweDMwZmZmZmZmZmZmZmVlMTcgKG5lZ2F0ZWQgPT0gMHhjZjAwMDAwMDAwMDAxMWU4KQorCSAqCisJICogRXZlbiBpZiB3ZSB1c2UgbmVnYXRpb24gdHJpY2tzIHRoZSByZXN1bHQgaXMgc3RpbGwgYSA2CisJICogaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIHNvIGRvbid0IHRyeSB0byBwbGF5IGZhbmN5IGFuZCBqdXN0CisJICogZG8gdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uLgorCSAqCisJICogTm90ZTogV2UgZW5jb2RlIHRoaXMgaW50byAzIHN1bjR2IDItaW5zbiBwYXRjaCBzZXF1ZW5jZXMuCisJICovCisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CXNldGhpCQklJXVoaSglMiksICUxXG4iCisJIglzZXRoaQkJJSVoaSglMiksICUwXG4iCisJIlxuNjYyOglvcgkJJTEsICUldWxvKCUyKSwgJTFcbiIKKwkiCW9yCQklMCwgJSVsbyglMiksICUwXG4iCisJIlxuNjYzOglzbGx4CQklMSwgMzIsICUxXG4iCisJIglvcgkJJTAsICUxLCAlMFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTMpLCAlMVxuIgorCSIJc2V0aGkJCSUlaGkoJTMpLCAlMFxuIgorCSIJLndvcmQJCTY2MmJcbiIKKwkiCW9yCQklMSwgJSV1bG8oJTMpLCAlMVxuIgorCSIJb3IJCSUwLCAlJWxvKCUzKSwgJTBcbiIKKwkiCS53b3JkCQk2NjNiXG4iCisJIglzbGx4CQklMSwgMzIsICUxXG4iCisJIglvcgkJJTAsICUxLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChtYXNrKSwgIj1yIiAodG1wKQorCTogImkiIChfUEFHRV9QQUREUl80VSB8IF9QQUdFX01PRElGSUVEXzRVIHwgX1BBR0VfQUNDRVNTRURfNFUgfAorCSAgICAgICBfUEFHRV9DUF80VSB8IF9QQUdFX0NWXzRVIHwgX1BBR0VfRV80VSB8IF9QQUdFX1BSRVNFTlRfNFUgfAorCSAgICAgICBfUEFHRV9TWkJJVFNfNFUpLAorCSAgImkiIChfUEFHRV9QQUREUl80ViB8IF9QQUdFX01PRElGSUVEXzRWIHwgX1BBR0VfQUNDRVNTRURfNFYgfAorCSAgICAgICBfUEFHRV9DUF80ViB8IF9QQUdFX0NWXzRWIHwgX1BBR0VfRV80ViB8IF9QQUdFX1BSRVNFTlRfNFYgfAorCSAgICAgICBfUEFHRV9TWkJJVFNfNFYpKTsKKworCXJldHVybiBfX3B0ZSgocHRlX3ZhbChwdGUpICYgbWFzaykgfCAocGdwcm90X3ZhbChwcm90KSAmIH5tYXNrKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcGdvZmZfdG9fcHRlKHVuc2lnbmVkIGxvbmcgb2ZmKQoreworCW9mZiA8PD0gUEFHRV9TSElGVDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJb3IJCSUwLCAlMiwgJTBcbiIKKwkiCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgXCJheFwiXG4iCisJIgkud29yZAkJNjYxYlxuIgorCSIJb3IJCSUwLCAlMywgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAob2ZmKQorCTogIjAiIChvZmYpLCAiaSIgKF9QQUdFX0ZJTEVfNFUpLCAiaSIgKF9QQUdFX0ZJTEVfNFYpKTsKKworCXJldHVybiBfX3B0ZShvZmYpOworfQorCitzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9ub25jYWNoZWQocGdwcm90X3QgcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCA9IHBncHJvdF92YWwocHJvdCk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CWFuZG4JCSUwLCAlMiwgJTBcbiIKKwkiCW9yCQklMCwgJTMsICUwXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCWFuZG4JCSUwLCAlNCwgJTBcbiIKKwkiCW9yCQklMCwgJTUsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKHZhbCkKKwk6ICIwIiAodmFsKSwgImkiIChfUEFHRV9DUF80VSB8IF9QQUdFX0NWXzRVKSwgImkiIChfUEFHRV9FXzRVKSwKKwkgICAgICAgICAgICAgImkiIChfUEFHRV9DUF80ViB8IF9QQUdFX0NWXzRWKSwgImkiIChfUEFHRV9FXzRWKSk7CisKKwlyZXR1cm4gX19wZ3Byb3QodmFsKTsKK30KKy8qIFZhcmlvdXMgcGllY2VzIG9mIGNvZGUgY2hlY2sgZm9yIHBsYXRmb3JtIHN1cHBvcnQgYnkgaWZkZWYgdGVzdGluZworICogb24gInBncHJvdF9ub25jYWNoZWQiLiAgVGhhdCdzIGJyb2tlbiBhbmQgc2hvdWxkIGJlIGZpeGVkLCBidXQgZm9yCisgKiBub3cuLi4KKyAqLworI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkIHBncHJvdF9ub25jYWNoZWQKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOglzZXRoaQkJJSV1aGkoJTEpLCAlMFxuIgorCSIJc2xseAkJJTAsIDMyLCAlMFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIgltb3YJCSUyLCAlMFxuIgorCSIJbm9wXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKG1hc2spCisJOiAiaSIgKF9QQUdFX1NaSFVHRV80VSksICJpIiAoX1BBR0VfU1pIVUdFXzRWKSk7CisKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgbWFzayk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBwdGVfdmFsKHB0ZSksIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJb3IJCSUwLCAlMywgJTBcbiIKKwkiCW5vcFxuIgorCSJcbjY2MjoJbm9wXG4iCisJIglub3BcbiIKKwkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCisJIgkud29yZAkJNjYxYlxuIgorCSIJc2V0aGkJCSUldWhpKCU0KSwgJTFcbiIKKwkiCXNsbHgJCSUxLCAzMiwgJTFcbiIKKwkiCS53b3JkCQk2NjJiXG4iCisJIglvcgkJJTEsICUlbG8oJTQpLCAlMVxuIgorCSIJb3IJCSUwLCAlMSwgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAodmFsKSwgIj1yIiAodG1wKQorCTogIjAiICh2YWwpLCAiaSIgKF9QQUdFX01PRElGSUVEXzRVIHwgX1BBR0VfV180VSksCisJICAiaSIgKF9QQUdFX01PRElGSUVEXzRWIHwgX1BBR0VfV180VikpOworCisJcmV0dXJuIF9fcHRlKHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gcHRlX3ZhbChwdGUpLCB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CWFuZG4JCSUwLCAlMywgJTBcbiIKKwkiCW5vcFxuIgorCSJcbjY2MjoJbm9wXG4iCisJIglub3BcbiIKKwkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCisJIgkud29yZAkJNjYxYlxuIgorCSIJc2V0aGkJCSUldWhpKCU0KSwgJTFcbiIKKwkiCXNsbHgJCSUxLCAzMiwgJTFcbiIKKwkiCS53b3JkCQk2NjJiXG4iCisJIglvcgkJJTEsICUlbG8oJTQpLCAlMVxuIgorCSIJYW5kbgkJJTAsICUxLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiICh2YWwpLCAiPXIiICh0bXApCisJOiAiMCIgKHZhbCksICJpIiAoX1BBR0VfTU9ESUZJRURfNFUgfCBfUEFHRV9XXzRVKSwKKwkgICJpIiAoX1BBR0VfTU9ESUZJRURfNFYgfCBfUEFHRV9XXzRWKSk7CisKKwlyZXR1cm4gX19wdGUodmFsKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBwdGVfdmFsKHB0ZSksIG1hc2s7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CW1vdgkJJTEsICUwXG4iCisJIglub3BcbiIKKwkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCisJIgkud29yZAkJNjYxYlxuIgorCSIJc2V0aGkJCSUldWhpKCUyKSwgJTBcbiIKKwkiCXNsbHgJCSUwLCAzMiwgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAobWFzaykKKwk6ICJpIiAoX1BBR0VfV1JJVEVfNFUpLCAiaSIgKF9QQUdFX1dSSVRFXzRWKSk7CisKKwlyZXR1cm4gX19wdGUodmFsIHwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBwdGVfdmFsKHB0ZSksIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJYW5kbgkJJTAsICUzLCAlMFxuIgorCSIJbm9wXG4iCisJIlxuNjYyOglub3BcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTQpLCAlMVxuIgorCSIJc2xseAkJJTEsIDMyLCAlMVxuIgorCSIJLndvcmQJCTY2MmJcbiIKKwkiCW9yCQklMSwgJSVsbyglNCksICUxXG4iCisJIglhbmRuCQklMCwgJTEsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKHZhbCksICI9ciIgKHRtcCkKKwk6ICIwIiAodmFsKSwgImkiIChfUEFHRV9XUklURV80VSB8IF9QQUdFX1dfNFUpLAorCSAgImkiIChfUEFHRV9XUklURV80ViB8IF9QQUdFX1dfNFYpKTsKKworCXJldHVybiBfX3B0ZSh2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOgltb3YJCSUxLCAlMFxuIgorCSIJbm9wXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCXNldGhpCQklJXVoaSglMiksICUwXG4iCisJIglzbGx4CQklMCwgMzIsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKG1hc2spCisJOiAiaSIgKF9QQUdFX0FDQ0VTU0VEXzRVKSwgImkiIChfUEFHRV9BQ0NFU1NFRF80VikpOworCisJbWFzayB8PSBfUEFHRV9SOworCisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5tYXNrKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOgltb3YJCSUxLCAlMFxuIgorCSIJbm9wXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCXNldGhpCQklJXVoaSglMiksICUwXG4iCisJIglzbGx4CQklMCwgMzIsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKG1hc2spCisJOiAiaSIgKF9QQUdFX0FDQ0VTU0VEXzRVKSwgImkiIChfUEFHRV9BQ0NFU1NFRF80VikpOworCisJbWFzayB8PSBfUEFHRV9SOworCisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKQoreworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfeW91bmcocHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJbW92CQklMSwgJTBcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTIpLCAlMFxuIgorCSIJc2xseAkJJTAsIDMyLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChtYXNrKQorCTogImkiIChfUEFHRV9BQ0NFU1NFRF80VSksICJpIiAoX1BBR0VfQUNDRVNTRURfNFYpKTsKKworCXJldHVybiAocHRlX3ZhbChwdGUpICYgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfZGlydHkocHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJbW92CQklMSwgJTBcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTIpLCAlMFxuIgorCSIJc2xseAkJJTAsIDMyLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChtYXNrKQorCTogImkiIChfUEFHRV9NT0RJRklFRF80VSksICJpIiAoX1BBR0VfTU9ESUZJRURfNFYpKTsKKworCXJldHVybiAocHRlX3ZhbChwdGUpICYgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfd3JpdGUocHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJbW92CQklMSwgJTBcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTIpLCAlMFxuIgorCSIJc2xseAkJJTAsIDMyLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChtYXNrKQorCTogImkiIChfUEFHRV9XUklURV80VSksICJpIiAoX1BBR0VfV1JJVEVfNFYpKTsKKworCXJldHVybiAocHRlX3ZhbChwdGUpICYgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfZXhlYyhwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOglzZXRoaQkJJSVoaSglMSksICUwXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCW1vdgkJJTIsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKG1hc2spCisJOiAiaSIgKF9QQUdFX0VYRUNfNFUpLCAiaSIgKF9QQUdFX0VYRUNfNFYpKTsKKworCXJldHVybiAocHRlX3ZhbChwdGUpICYgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfZmlsZShwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBwdGVfdmFsKHB0ZSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CWFuZAkJJTAsICUyLCAlMFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzFpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglhbmQJCSUwLCAlMywgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAodmFsKQorCTogIjAiICh2YWwpLCAiaSIgKF9QQUdFX0ZJTEVfNFUpLCAiaSIgKF9QQUdFX0ZJTEVfNFYpKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcHJlc2VudChwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBwdGVfdmFsKHB0ZSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CWFuZAkJJTAsICUyLCAlMFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzFpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglhbmQJCSUwLCAlMywgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAodmFsKQorCTogIjAiICh2YWwpLCAiaSIgKF9QQUdFX1BSRVNFTlRfNFUpLCAiaSIgKF9QQUdFX1BSRVNFTlRfNFYpKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBwbWRfc2V0KHBtZHAsIHB0ZXApCVwKKwkocG1kX3ZhbCgqKHBtZHApKSA9IChfX3BhKCh1bnNpZ25lZCBsb25nKSAocHRlcCkpID4+IDExVUwpKQorI2RlZmluZSBwdWRfc2V0KHB1ZHAsIHBtZHApCVwKKwkocHVkX3ZhbCgqKHB1ZHApKSA9IChfX3BhKCh1bnNpZ25lZCBsb25nKSAocG1kcCkpID4+IDExVUwpKQorI2RlZmluZSBfX3BtZF9wYWdlKHBtZCkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpIF9fdmEoKCgodW5zaWduZWQgbG9uZylwbWRfdmFsKHBtZCkpPDwxMVVMKSkpCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkgCQkJdmlydF90b19wYWdlKCh2b2lkICopX19wbWRfcGFnZShwbWQpKQorI2RlZmluZSBwdWRfcGFnZV92YWRkcihwdWQpCQlcCisJKCh1bnNpZ25lZCBsb25nKSBfX3ZhKCgoKHVuc2lnbmVkIGxvbmcpcHVkX3ZhbChwdWQpKTw8MTFVTCkpKQorI2RlZmluZSBwdWRfcGFnZShwdWQpIAkJCXZpcnRfdG9fcGFnZSgodm9pZCAqKXB1ZF9wYWdlX3ZhZGRyKHB1ZCkpCisjZGVmaW5lIHBtZF9ub25lKHBtZCkJCQkoIXBtZF92YWwocG1kKSkKKyNkZWZpbmUgcG1kX2JhZChwbWQpCQkJKDApCisjZGVmaW5lIHBtZF9wcmVzZW50KHBtZCkJCShwbWRfdmFsKHBtZCkgIT0gMFUpCisjZGVmaW5lIHBtZF9jbGVhcihwbWRwKQkJCShwbWRfdmFsKCoocG1kcCkpID0gMFUpCisjZGVmaW5lIHB1ZF9ub25lKHB1ZCkJCQkoIXB1ZF92YWwocHVkKSkKKyNkZWZpbmUgcHVkX2JhZChwdWQpCQkJKDApCisjZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkJCShwdWRfdmFsKHB1ZCkgIT0gMFUpCisjZGVmaW5lIHB1ZF9jbGVhcihwdWRwKQkJCShwdWRfdmFsKCoocHVkcCkpID0gMFUpCisKKy8qIFNhbWUgaW4gYm90aCBTVU40ViBhbmQgU1VONFUuICAqLworI2RlZmluZSBwdGVfbm9uZShwdGUpIAkJCSghcHRlX3ZhbChwdGUpKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICovCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKQkoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdEIC0gMSkpCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpCSgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcykpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcG1kX29mZnNldChwdWRwLCBhZGRyZXNzKQlcCisJKChwbWRfdCAqKSBwdWRfcGFnZV92YWRkcigqKHB1ZHApKSArIFwKKwkgKCgoYWRkcmVzcykgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQtMSkpKQorCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcHRlX2luZGV4KGRpciwgYWRkcmVzcykJXAorCSgocHRlX3QgKikgX19wbWRfcGFnZSgqKGRpcikpICsgXAorCSAoKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbAkJcHRlX2luZGV4CisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwCQkJcHRlX2luZGV4CisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZAkJcHRlX2luZGV4CisjZGVmaW5lIHB0ZV91bm1hcChwdGUpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkJCWRvIHsgfSB3aGlsZSAoMCkKKworLyogQWN0dWFsIHBhZ2UgdGFibGUgUFRFIHVwZGF0ZXMuICAqLworZXh0ZXJuIHZvaWQgdGxiX2JhdGNoX2FkZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9yaWcpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCXB0ZV90IG9yaWcgPSAqcHRlcDsKKworCSpwdGVwID0gcHRlOworCisJLyogSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gbGV0IGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoKQorCSAqIGhhbmRsZSBpbml0X21tIHRsYiBmbHVzaGVzLgorCSAqCisJICogU1VONFYgTk9URTogX1BBR0VfVkFMSUQgaXMgdGhlIHNhbWUgdmFsdWUgaW4gYm90aCB0aGUgU1VONFUKKwkgKiAgICAgICAgICAgICBhbmQgU1VONFYgcHRlIGxheW91dCwgc28gdGhpcyBpbmxpbmUgdGVzdCBpcyBmaW5lLgorCSAqLworCWlmIChsaWtlbHkobW0gIT0gJmluaXRfbW0pICYmIChwdGVfdmFsKG9yaWcpICYgX1BBR0VfVkFMSUQpKQorCQl0bGJfYmF0Y2hfYWRkKG1tLCBhZGRyLCBwdGVwLCBvcmlnKTsKK30KKworI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQkJXAorCXNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpCisKKyNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTU9WRV9QVEUKKyNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpCQkJCVwKKyh7CQkJCQkJCQkJXAorCXB0ZV90IG5ld3B0ZSA9IChwdGUpOwkJCQkJCVwKKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvciAmJiBwdGVfcHJlc2VudChwdGUpKSB7CQlcCisJCXVuc2lnbmVkIGxvbmcgdGhpc19wZm4gPSBwdGVfcGZuKHB0ZSk7CQkJXAorCQkJCQkJCQkJXAorCQlpZiAocGZuX3ZhbGlkKHRoaXNfcGZuKSAmJgkJCQlcCisJCSAgICAoKChvbGRfYWRkcikgXiAobmV3X2FkZHIpKSAmICgxIDw8IDEzKSkpCQlcCisJCQlmbHVzaF9kY2FjaGVfcGFnZV9hbGwoY3VycmVudC0+bW0sCQlcCisJCQkJCSAgICAgIHBmbl90b19wYWdlKHRoaXNfcGZuKSk7CVwKKwl9CQkJCQkJCQlcCisJbmV3cHRlOwkJCQkJCQkJXAorfSkKKyNlbmRpZgorCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbMjA0OF07CitleHRlcm4gcG1kX3Qgc3dhcHBlcl9sb3dfcG1kX2RpclsyMDQ4XTsKKworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBmaW5kX2VjYWNoZV9mbHVzaF9zcGFuKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qIFRoZXNlIGRvIG5vdGhpbmcgd2l0aCB0aGUgd2F5IEkgaGF2ZSB0aGluZ3Mgc2V0dXAuICovCisjZGVmaW5lIG1tdV9sb2NrYXJlYSh2YWRkciwgbGVuKQkJKHZhZGRyKQorI2RlZmluZSBtbXVfdW5sb2NrYXJlYSh2YWRkciwgbGVuKQkJZG8geyB9IHdoaWxlKDApCisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKK2V4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KTsKKworLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLworI2RlZmluZSBfX3N3cF90eXBlKGVudHJ5KQkoKChlbnRyeSkudmFsID4+IFBBR0VfU0hJRlQpICYgMHhmZlVMKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoZW50cnkpCSgoZW50cnkpLnZhbCA+PiAoUEFHRV9TSElGVCArIDhVTCkpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJXAorCSggKHN3cF9lbnRyeV90KSBcCisJICB7IFwKKwkJKCgobG9uZykodHlwZSkgPDwgUEFHRV9TSElGVCkgfCBcCisgICAgICAgICAgICAgICAgICgobG9uZykob2Zmc2V0KSA8PCAoUEFHRV9TSElGVCArIDhVTCkpKSBcCisJICB9ICkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKy8qIEZpbGUgb2Zmc2V0IGluIFBURSBzdXBwb3J0LiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHRlX2ZpbGUocHRlX3QpOworI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkocHRlX3ZhbChwdGUpID4+IFBBR0VfU0hJRlQpCitleHRlcm4gcHRlX3QgcGdvZmZfdG9fcHRlKHVuc2lnbmVkIGxvbmcpOworI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkoNjRVTCAtIFBBR0VfU0hJRlQgLSAxVUwpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nICpzcGFyYzY0X3ZhbGlkX2FkZHJfYml0bWFwOworCisvKiBOZWVkcyB0byBiZSBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBsaW51eC9tbS5oLCBhcyBpdCBpcyBhcmNoIGRlcGVuZGVudCAqLworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJXAorCSh0ZXN0X2JpdChfX3BhKCh1bnNpZ25lZCBsb25nKShhZGRyKSk+PjIyLCBzcGFyYzY0X3ZhbGlkX2FkZHJfYml0bWFwKSkKKworZXh0ZXJuIGludCBwYWdlX2luX3BoeXNfYXZhaWwodW5zaWduZWQgbG9uZyBwYWRkcik7CisKK2V4dGVybiBpbnQgaW9fcmVtYXBfcGZuX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGZyb20sCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKKworLyoKKyAqIEZvciBzcGFyYzMyJjY0LCB0aGUgcGZuIGluIGlvX3JlbWFwX3Bmbl9yYW5nZSgpIGNhcnJpZXMgPGlvc3BhY2U+IGluCisgKiBpdHMgaGlnaCA0IGJpdHMuICBUaGVzZSBtYWNyb3MvZnVuY3Rpb25zIHB1dCBpdCB0aGVyZSBvciBnZXQgaXQgZnJvbSB0aGVyZS4KKyAqLworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuIHwgKHNwYWNlIDw8IChCSVRTX1BFUl9MT05HIC0gNCkpKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkocGZuID4+IChCSVRTX1BFUl9MT05HIC0gNCkpCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4gJiAweDBmZmZmZmZmZmZmZmZmZmZVTCkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KKworLyogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZF9hcmVhIHRvIGNvcGUgd2l0aCBWQSBob2xlcyBhbmQKKyAqIFNITSBhcmVhIGNhY2hlIGFsaWFzaW5nIGZvciB1c2VybGFuZC4KKyAqLworI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQorI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQV9UT1BET1dOCisKKy8qIFdlIHByb3ZpZGUgYSBzcGVjaWFsIGdldF91bm1hcHBlZF9hcmVhIGZvciBmcmFtZWJ1ZmZlciBtbWFwcyB0byB0cnkgYW5kIHVzZQorICogdGhlIGxhcmdlc3QgYWxpZ25tZW50IHBvc3NpYmxlIHN1Y2ggdGhhdCBsYXJnZXQgUFRFcyBjYW4gYmUgdXNlZC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2ZiX3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJCQkJICB1bnNpZ25lZCBsb25nKTsKKyNkZWZpbmUgSEFWRV9BUkNIX0ZCX1VOTUFQUEVEX0FSRUEKKworZXh0ZXJuIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc3VuNHZfcmVnaXN0ZXJfZmF1bHRfc3RhdHVzKHZvaWQpOworZXh0ZXJuIHZvaWQgc3VuNHZfa3RzYl9yZWdpc3Rlcih2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBjaGVldGFoX2VjYWNoZV9mbHVzaF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc3VuNHZfcGF0Y2hfdGxiX2hhbmRsZXJzKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBjbWRsaW5lX21lbW9yeV9zaXplOworCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1BHVEFCTEVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BpbC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4MTliYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BpbC5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX1NQQVJDNjRfUElMX0gKKyNkZWZpbmUgX1NQQVJDNjRfUElMX0gKKworLyogVG8gYXZvaWQgc29tZSBsb2NraW5nIHByb2JsZW1zLCB3ZSBoYXJkIGFsbG9jYXRlIGNlcnRhaW4gUElMcworICogZm9yIFNNUCBjcm9zcyBjYWxsIG1lc3NhZ2VzIHRoYXQgbXVzdCBkbyBhIGV0cmFwL3J0cmFwLgorICoKKyAqIEEgbG9jYWxfaXJxX2Rpc2FibGUoKSBkb2VzIG5vdCBibG9jayB0aGUgY3Jvc3MgY2FsbCBkZWxpdmVyeSwgc28KKyAqIHdoZW4gU01QIGxvY2tpbmcgaXMgYW4gaXNzdWUgd2UgcmVzY2hlZHVsZSB0aGUgZXZlbnQgaW50byBhIFBJTAorICogaW50ZXJydXB0IHdoaWNoIGlzIGJsb2NrZWQgYnkgbG9jYWxfaXJxX2Rpc2FibGUoKS4KKyAqCisgKiBJbiBmYWN0IGFueSBYQ0FMTCB3aGljaCBoYXMgdG8gZXRyYXAvcnRyYXAgaGFzIGEgcHJvYmxlbSBiZWNhdXNlCisgKiBpdCBpcyBkaWZmaWN1bHQgdG8gcHJldmVudCBydHJhcCBmcm9tIHJ1bm5pbmcgQkgncywgYW5kIHRoYXQgd291bGQKKyAqIG5lZWQgdG8gYmUgZG9uZSBpZiB0aGUgWENBTEwgYXJyaXZlZCB3aGlsZSAlcGlsPT0xNS4KKyAqLworI2RlZmluZSBQSUxfU01QX0NBTExfRlVOQwkxCisjZGVmaW5lIFBJTF9TTVBfUkVDRUlWRV9TSUdOQUwJMgorI2RlZmluZSBQSUxfU01QX0NBUFRVUkUJCTMKKyNkZWZpbmUgUElMX1NNUF9DVFhfTkVXX1ZFUlNJT04JNAorI2RlZmluZSBQSUxfREVWSUNFX0lSUQkJNQorI2RlZmluZSBQSUxfU01QX0NBTExfRlVOQ19TTkdMCTYKKworI2VuZGlmIC8qICEoX1NQQVJDNjRfUElMX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcG9zaXhfdHlwZXMuaAppbmRleCBkY2MwN2ViLi41OGM4MjBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9wb3NpeF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Bvc2l4X3R5cGVzLmgKQEAgLTEsMTE4ICsxLDggQEAKLSNpZm5kZWYgX19BUkNIX1NQQVJDX1BPU0lYX1RZUEVTX0gKLSNkZWZpbmUgX19BUkNIX1NQQVJDX1BPU0lYX1RZUEVTX0gKLQotLyoKLSAqIFRoaXMgZmlsZSBpcyBnZW5lcmFsbHkgdXNlZCBieSB1c2VyLWxldmVsIHNvZnR3YXJlLCBzbyB5b3UgbmVlZCB0bwotICogYmUgYSBsaXR0bGUgY2FyZWZ1bCBhYm91dCBuYW1lc3BhY2UgcG9sbHV0aW9uIGV0Yy4gIEFsc28sIHdlIGNhbm5vdAotICogYXNzdW1lIEdDQyBpcyBiZWluZyB1c2VkLgotICovCi0KLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICBfX2tlcm5lbF9zaXplX3Q7Ci10eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfc3NpemVfdDsKLXR5cGVkZWYgbG9uZyBpbnQgICAgICAgICAgICAgICBfX2tlcm5lbF9wdHJkaWZmX3Q7Ci10eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfdGltZV90OwotdHlwZWRlZiBsb25nCQkgICAgICAgX19rZXJuZWxfc3VzZWNvbmRzX3Q7Ci10eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfY2xvY2tfdDsKLXR5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9waWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICBfX2tlcm5lbF9pcGNfcGlkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgX19rZXJuZWxfdWlkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgX19rZXJuZWxfZ2lkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAgX19rZXJuZWxfaW5vX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgX19rZXJuZWxfbW9kZV90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgIF9fa2VybmVsX3Vtb2RlX3Q7Ci10eXBlZGVmIHNob3J0ICAgICAgICAgICAgICAgICAgX19rZXJuZWxfbmxpbmtfdDsKLXR5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9kYWRkcl90OwotdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX29mZl90OwotdHlwZWRlZiBjaGFyICogICAgICAgICAgICAgICAgIF9fa2VybmVsX2NhZGRyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgICAgICBfX2tlcm5lbF91aWQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkgICAgICAgX19rZXJuZWxfZ2lkMTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50CSAgICAgICBfX2tlcm5lbF91aWQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQJICAgICAgIF9fa2VybmVsX2dpZDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgICAgICBfX2tlcm5lbF9vbGRfdWlkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgICAgICBfX2tlcm5lbF9vbGRfZ2lkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgICAgICBfX2tlcm5lbF9vbGRfZGV2X3Q7Ci10eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfY2xvY2tpZF90OwotdHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX3RpbWVyX3Q7Ci0KLSNpZmRlZiBfX0dOVUNfXwotdHlwZWRlZiBsb25nIGxvbmcJX19rZXJuZWxfbG9mZl90OworI2lmbmRlZiBfX19BU01fU1BBUkNfUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfX19BU01fU1BBUkNfUE9TSVhfVFlQRVNfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3Bvc2l4X3R5cGVzXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9wb3NpeF90eXBlc18zMi5oPgogI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlpbnQJdmFsWzJdOwotfSBfX2tlcm5lbF9mc2lkX3Q7Ci0KLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCi0KLSN1bmRlZiBfX0ZEX1NFVAotc3RhdGljIGlubGluZSB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQotewotCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOwotCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOwotCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gfD0gKDFVTDw8X3JlbSk7Ci19Ci0KLSN1bmRlZiBfX0ZEX0NMUgotc3RhdGljIGlubGluZSB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQotewotCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOwotCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOwotCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gJj0gfigxVUw8PF9yZW0pOwotfQotCi0jdW5kZWYgX19GRF9JU1NFVAotc3RhdGljIGlubGluZSBpbnQgX19GRF9JU1NFVCh1bnNpZ25lZCBsb25nIGZkLCBfX2NvbnN0X18gX19rZXJuZWxfZmRfc2V0ICpwKQoteyAKLQl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKLQl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKLQlyZXR1cm4gKHAtPmZkc19iaXRzW190bXBdICYgKDFVTDw8X3JlbSkpICE9IDA7Ci19Ci0KLS8qCi0gKiBUaGlzIHdpbGwgdW5yb2xsIHRoZSBsb29wIGZvciB0aGUgbm9ybWFsIGNvbnN0YW50IGNhc2VzICg4IG9yIDMyIGxvbmdzLAotICogZm9yIDI1NiBhbmQgMTAyNC1iaXQgZmRfc2V0cyByZXNwZWN0aXZlbHkpCi0gKi8KLSN1bmRlZiBfX0ZEX1pFUk8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX0ZEX1pFUk8oX19rZXJuZWxfZmRfc2V0ICpwKQotewotCXVuc2lnbmVkIGxvbmcgKnRtcCA9IHAtPmZkc19iaXRzOwotCWludCBpOwotCi0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fRkRTRVRfTE9OR1MpKSB7Ci0JCXN3aXRjaCAoX19GRFNFVF9MT05HUykgewotCQkJY2FzZSAzMjoKLQkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7Ci0JCQkgIHRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOwotCQkJICB0bXBbIDhdID0gMDsgdG1wWyA5XSA9IDA7IHRtcFsxMF0gPSAwOyB0bXBbMTFdID0gMDsKLQkJCSAgdG1wWzEyXSA9IDA7IHRtcFsxM10gPSAwOyB0bXBbMTRdID0gMDsgdG1wWzE1XSA9IDA7Ci0JCQkgIHRtcFsxNl0gPSAwOyB0bXBbMTddID0gMDsgdG1wWzE4XSA9IDA7IHRtcFsxOV0gPSAwOwotCQkJICB0bXBbMjBdID0gMDsgdG1wWzIxXSA9IDA7IHRtcFsyMl0gPSAwOyB0bXBbMjNdID0gMDsKLQkJCSAgdG1wWzI0XSA9IDA7IHRtcFsyNV0gPSAwOyB0bXBbMjZdID0gMDsgdG1wWzI3XSA9IDA7Ci0JCQkgIHRtcFsyOF0gPSAwOyB0bXBbMjldID0gMDsgdG1wWzMwXSA9IDA7IHRtcFszMV0gPSAwOwotCQkJICByZXR1cm47Ci0JCQljYXNlIDE2OgotCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKLQkJCSAgdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7Ci0JCQkgIHRtcFsgOF0gPSAwOyB0bXBbIDldID0gMDsgdG1wWzEwXSA9IDA7IHRtcFsxMV0gPSAwOwotCQkJICB0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKLQkJCSAgcmV0dXJuOwotCQkJY2FzZSA4OgotCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKLQkJCSAgdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7Ci0JCQkgIHJldHVybjsKLQkJCWNhc2UgNDoKLQkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7Ci0JCQkgIHJldHVybjsKLQkJfQotCX0KLQlpID0gX19GRFNFVF9MT05HUzsKLQl3aGlsZSAoaSkgewotCQlpLS07Ci0JCSp0bXAgPSAwOwotCQl0bXArKzsKLQl9Ci19Ci0KLSNlbmRpZiAvKiBkZWZpbmVkKF9fS0VSTkVMX18pICovCi0KLSNlbmRpZiAvKiAhKF9fQVJDSF9TUEFSQ19QT1NJWF9UWVBFU19IKSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wb3NpeF90eXBlc18zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcG9zaXhfdHlwZXNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI2ZWIxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcG9zaXhfdHlwZXNfMzIuaApAQCAtMCwwICsxLDExOCBAQAorI2lmbmRlZiBfX0FSQ0hfU1BBUkNfUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfX0FSQ0hfU1BBUkNfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAgIF9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBsb25nIGludCAgICAgICAgICAgICAgIF9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcJCSAgICAgICBfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgIF9fa2VybmVsX2lwY19waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICBfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICBfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICBfX2tlcm5lbF9pbm9fdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICBfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgX19rZXJuZWxfdW1vZGVfdDsKK3R5cGVkZWYgc2hvcnQgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9ubGlua190OwordHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX2RhZGRyX3Q7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGNoYXIgKiAgICAgICAgICAgICAgICAgX19rZXJuZWxfY2FkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgICAgIF9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgICAgICBfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJICAgICAgIF9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkgICAgICAgX19rZXJuZWxfZ2lkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgICAgIF9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgICAgIF9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgICAgIF9fa2VybmVsX29sZF9kZXZfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfdGltZXJfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZwlfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludAl2YWxbMl07Cit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykKKworI3VuZGVmIF9fRkRfU0VUCitzdGF0aWMgaW5saW5lIHZvaWQgX19GRF9TRVQodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJZmRzZXRwLT5mZHNfYml0c1tfdG1wXSB8PSAoMVVMPDxfcmVtKTsKK30KKworI3VuZGVmIF9fRkRfQ0xSCitzdGF0aWMgaW5saW5lIHZvaWQgX19GRF9DTFIodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJZmRzZXRwLT5mZHNfYml0c1tfdG1wXSAmPSB+KDFVTDw8X3JlbSk7Cit9CisKKyN1bmRlZiBfX0ZEX0lTU0VUCitzdGF0aWMgaW5saW5lIGludCBfX0ZEX0lTU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fY29uc3RfXyBfX2tlcm5lbF9mZF9zZXQgKnApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJcmV0dXJuIChwLT5mZHNfYml0c1tfdG1wXSAmICgxVUw8PF9yZW0pKSAhPSAwOworfQorCisvKgorICogVGhpcyB3aWxsIHVucm9sbCB0aGUgbG9vcCBmb3IgdGhlIG5vcm1hbCBjb25zdGFudCBjYXNlcyAoOCBvciAzMiBsb25ncywKKyAqIGZvciAyNTYgYW5kIDEwMjQtYml0IGZkX3NldHMgcmVzcGVjdGl2ZWx5KQorICovCisjdW5kZWYgX19GRF9aRVJPCitzdGF0aWMgaW5saW5lIHZvaWQgX19GRF9aRVJPKF9fa2VybmVsX2ZkX3NldCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nICp0bXAgPSBwLT5mZHNfYml0czsKKwlpbnQgaTsKKworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX0ZEU0VUX0xPTkdTKSkgeworCQlzd2l0Y2ggKF9fRkRTRVRfTE9OR1MpIHsKKwkJCWNhc2UgMzI6CisJCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJICB0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKKwkJCSAgdG1wWyA4XSA9IDA7IHRtcFsgOV0gPSAwOyB0bXBbMTBdID0gMDsgdG1wWzExXSA9IDA7CisJCQkgIHRtcFsxMl0gPSAwOyB0bXBbMTNdID0gMDsgdG1wWzE0XSA9IDA7IHRtcFsxNV0gPSAwOworCQkJICB0bXBbMTZdID0gMDsgdG1wWzE3XSA9IDA7IHRtcFsxOF0gPSAwOyB0bXBbMTldID0gMDsKKwkJCSAgdG1wWzIwXSA9IDA7IHRtcFsyMV0gPSAwOyB0bXBbMjJdID0gMDsgdG1wWzIzXSA9IDA7CisJCQkgIHRtcFsyNF0gPSAwOyB0bXBbMjVdID0gMDsgdG1wWzI2XSA9IDA7IHRtcFsyN10gPSAwOworCQkJICB0bXBbMjhdID0gMDsgdG1wWzI5XSA9IDA7IHRtcFszMF0gPSAwOyB0bXBbMzFdID0gMDsKKwkJCSAgcmV0dXJuOworCQkJY2FzZSAxNjoKKwkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQkgIHRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOworCQkJICB0bXBbIDhdID0gMDsgdG1wWyA5XSA9IDA7IHRtcFsxMF0gPSAwOyB0bXBbMTFdID0gMDsKKwkJCSAgdG1wWzEyXSA9IDA7IHRtcFsxM10gPSAwOyB0bXBbMTRdID0gMDsgdG1wWzE1XSA9IDA7CisJCQkgIHJldHVybjsKKwkJCWNhc2UgODoKKwkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQkgIHRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOworCQkJICByZXR1cm47CisJCQljYXNlIDQ6CisJCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJICByZXR1cm47CisJCX0KKwl9CisJaSA9IF9fRkRTRVRfTE9OR1M7CisJd2hpbGUgKGkpIHsKKwkJaS0tOworCQkqdG1wID0gMDsKKwkJdG1wKys7CisJfQorfQorCisjZW5kaWYgLyogZGVmaW5lZChfX0tFUk5FTF9fKSAqLworCisjZW5kaWYgLyogIShfX0FSQ0hfU1BBUkNfUE9TSVhfVFlQRVNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3Bvc2l4X3R5cGVzXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wb3NpeF90eXBlc182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOGY5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wb3NpeF90eXBlc182NC5oCkBAIC0wLDAgKzEsMTIyIEBACisjaWZuZGVmIF9fQVJDSF9TUEFSQzY0X1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX19BUkNIX1NQQVJDNjRfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICAgIF9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAgX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgX19rZXJuZWxfbW9kZV90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgIF9fa2VybmVsX3Vtb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX29mZl90OwordHlwZWRlZiBjaGFyICogICAgICAgICAgICAgICAgIF9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgICAgICBfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkgICAgICAgX19rZXJuZWxfZ2lkMTZfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9jbG9ja2lkX3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfdGltZXJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAJICAgICAgIF9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICBfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3VpZF90CSAgICAgICBfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiBfX2tlcm5lbF9naWRfdAkgICAgICAgX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQJICAgICAgIF9fa2VybmVsX29sZF9kZXZfdDsKKworLyogTm90ZSB0aGlzIHBpZWNlIG9mIGFzeW1tZXRyeSBmcm9tIHRoZSB2OSBBQkkuICAqLwordHlwZWRlZiBpbnQJCSAgICAgICBfX2tlcm5lbF9zdXNlY29uZHNfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZyAgICAgICAgICAgICAgX19rZXJuZWxfbG9mZl90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQJdmFsWzJdOworfSBfX2tlcm5lbF9mc2lkX3Q7CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisKKyN1bmRlZiBfX0ZEX1NFVAorc3RhdGljIGlubGluZSB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gfD0gKDFVTDw8X3JlbSk7Cit9CisKKyN1bmRlZiBfX0ZEX0NMUgorc3RhdGljIGlubGluZSB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gJj0gfigxVUw8PF9yZW0pOworfQorCisjdW5kZWYgX19GRF9JU1NFVAorc3RhdGljIGlubGluZSBpbnQgX19GRF9JU1NFVCh1bnNpZ25lZCBsb25nIGZkLCBfX2NvbnN0X18gX19rZXJuZWxfZmRfc2V0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCXJldHVybiAocC0+ZmRzX2JpdHNbX3RtcF0gJiAoMVVMPDxfcmVtKSkgIT0gMDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZXMgKDggb3IgMzIgbG9uZ3MsCisgKiBmb3IgMjU2IGFuZCAxMDI0LWJpdCBmZF9zZXRzIHJlc3BlY3RpdmVseSkKKyAqLworI3VuZGVmIF9fRkRfWkVSTworc3RhdGljIGlubGluZSB2b2lkIF9fRkRfWkVSTyhfX2tlcm5lbF9mZF9zZXQgKnApCit7CisJdW5zaWduZWQgbG9uZyAqdG1wID0gcC0+ZmRzX2JpdHM7CisJaW50IGk7CisKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoX19GRFNFVF9MT05HUykpIHsKKwkJc3dpdGNoIChfX0ZEU0VUX0xPTkdTKSB7CisJCQljYXNlIDMyOgorCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKKwkJCSAgdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQkgIHRtcFsgOF0gPSAwOyB0bXBbIDldID0gMDsgdG1wWzEwXSA9IDA7IHRtcFsxMV0gPSAwOworCQkJICB0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKKwkJCSAgdG1wWzE2XSA9IDA7IHRtcFsxN10gPSAwOyB0bXBbMThdID0gMDsgdG1wWzE5XSA9IDA7CisJCQkgIHRtcFsyMF0gPSAwOyB0bXBbMjFdID0gMDsgdG1wWzIyXSA9IDA7IHRtcFsyM10gPSAwOworCQkJICB0bXBbMjRdID0gMDsgdG1wWzI1XSA9IDA7IHRtcFsyNl0gPSAwOyB0bXBbMjddID0gMDsKKwkJCSAgdG1wWzI4XSA9IDA7IHRtcFsyOV0gPSAwOyB0bXBbMzBdID0gMDsgdG1wWzMxXSA9IDA7CisJCQkgIHJldHVybjsKKwkJCWNhc2UgMTY6CisJCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJICB0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKKwkJCSAgdG1wWyA4XSA9IDA7IHRtcFsgOV0gPSAwOyB0bXBbMTBdID0gMDsgdG1wWzExXSA9IDA7CisJCQkgIHRtcFsxMl0gPSAwOyB0bXBbMTNdID0gMDsgdG1wWzE0XSA9IDA7IHRtcFsxNV0gPSAwOworCQkJICByZXR1cm47CisJCQljYXNlIDg6CisJCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJICB0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKKwkJCSAgcmV0dXJuOworCQkJY2FzZSA0OgorCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKKwkJCSAgcmV0dXJuOworCQl9CisJfQorCWkgPSBfX0ZEU0VUX0xPTkdTOworCXdoaWxlIChpKSB7CisJCWktLTsKKwkJKnRtcCA9IDA7CisJCXRtcCsrOworCX0KK30KKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgKi8KKworI2VuZGlmIC8qICEoX19BUkNIX1NQQVJDNjRfUE9TSVhfVFlQRVNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKaW5kZXggODg5OGVmYi4uMTFhNjZiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKQEAgLTEsMTI4ICsxLDggQEAKLS8qIGluY2x1ZGUvYXNtLXNwYXJjL3Byb2Nlc3Nvci5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk0IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaWZuZGVmIF9fQVNNX1NQQVJDX1BST0NFU1NPUl9ICi0jZGVmaW5lIF9fQVNNX1NQQVJDX1BST0NFU1NPUl9ICi0KLS8qCi0gKiBTcGFyYzMyIGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50Ci0gKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCi0gKi8KLSNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyB2b2lkICpwYzsgX19hc21fXygic2V0aGkgJSVoaSgxZiksICUwOyBvciAlMCwgJSVsbygxZiksICUwO1xuMToiIDogIj1yIiAocGMpKTsgcGM7IH0pCi0KLSNpbmNsdWRlIDxhc20vcHNyLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9oZWFkLmg+Ci0jaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgotI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotLyoKLSAqIFRoZSBzcGFyYyBoYXMgbm8gcHJvYmxlbXMgd2l0aCB3cml0ZSBwcm90ZWN0aW9uCi0gKi8KLSNkZWZpbmUgd3Bfd29ya3Nfb2sgMQotI2RlZmluZSB3cF93b3Jrc19va19faXNfYV9tYWNybyAvKiBmb3IgdmVyc2lvbnMgaW4ga3N5bXMuYyAqLwotCi0vKiBXaGVlLCB0aGlzIGlzIFNUQUNLX1RPUCArIFBBR0VfU0laRSBhbmQgdGhlIGxvd2VzdCBrZXJuZWwgYWRkcmVzcyB0b28uLi4gCi0gKiBUaGF0IG9uZSBwYWdlIGlzIHVzZWQgdG8gcHJvdGVjdCBrZXJuZWwgZnJvbSBpbnRydWRlcnMsIHNvIHRoYXQKLSAqIHdlIGNhbiBtYWtlIG91ciBhY2Nlc3Nfb2sgdGVzdCBmYXN0ZXIKLSAqLwotI2RlZmluZSBUQVNLX1NJWkUJUEFHRV9PRkZTRVQKLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIFNUQUNLX1RPUAkoUEFHRV9PRkZTRVQgLSBQQUdFX1NJWkUpCi0jZGVmaW5lIFNUQUNLX1RPUF9NQVgJU1RBQ0tfVE9QCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi1zdHJ1Y3QgZnBxIHsKLQl1bnNpZ25lZCBsb25nICppbnNuX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBpbnNuOwotfTsKKyNpZm5kZWYgX19fQVNNX1NQQVJDX1BST0NFU1NPUl9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19QUk9DRVNTT1JfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3Byb2Nlc3Nvcl82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvcHJvY2Vzc29yXzMyLmg+CiAjZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgewotCWludCBzZWc7Ci19IG1tX3NlZ21lbnRfdDsKLQotLyogVGhlIFNwYXJjIHByb2Nlc3NvciBzcGVjaWZpYyB0aHJlYWQgc3RydWN0LiAqLwotc3RydWN0IHRocmVhZF9zdHJ1Y3QgewotCXN0cnVjdCBwdF9yZWdzICprcmVnczsKLQl1bnNpZ25lZCBpbnQgX3BhZDE7Ci0KLQkvKiBTcGVjaWFsIGNoaWxkIGZvcmsga3Bzci9rd2ltIHZhbHVlcy4gKi8KLQl1bnNpZ25lZCBsb25nIGZvcmtfa3BzciBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsKLQl1bnNpZ25lZCBsb25nIGZvcmtfa3dpbTsKLQotCS8qIEZsb2F0aW5nIHBvaW50IHJlZ3MgKi8KLQl1bnNpZ25lZCBsb25nICAgZmxvYXRfcmVnc1szMl0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSk7Ci0JdW5zaWduZWQgbG9uZyAgIGZzcjsKLQl1bnNpZ25lZCBsb25nICAgZnBxZGVwdGg7Ci0Jc3RydWN0IGZwcQlmcHF1ZXVlWzE2XTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCW1tX3NlZ21lbnRfdCBjdXJyZW50X2RzOwotfTsKLQotI2RlZmluZSBTUEFSQ19GTEFHX0tUSFJFQUQgICAgICAweDEgICAgLyogdGFzayBpcyBhIGtlcm5lbCB0aHJlYWQgKi8KLSNkZWZpbmUgU1BBUkNfRkxBR19VTkFMSUdORUQgICAgMHgyICAgIC8qIGlzIGFsbG93ZWQgdG8gZG8gdW5hbGlnbmVkIGFjY2Vzc2VzICovCi0KLSNkZWZpbmUgSU5JVF9USFJFQUQgIHsgXAotCS5mbGFncyA9IFNQQVJDX0ZMQUdfS1RIUkVBRCwgXAotCS5jdXJyZW50X2RzID0gS0VSTkVMX0RTLCBcCi19Ci0KLS8qIFJldHVybiBzYXZlZCBQQyBvZiBhIGJsb2NrZWQgdGhyZWFkLiAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7Ci0KLS8qIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCB1bnNpZ25lZCBsb25nIHBjLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHNwKQotewotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgemVybyBhc20oImcxIik7Ci0KLQlyZWdzLT5wc3IgPSAocmVncy0+cHNyICYgKFBTUl9DV1ApKSB8IFBTUl9TOwotCXJlZ3MtPnBjID0gKChwYyAmICh+MykpIC0gNCk7Ci0JcmVncy0+bnBjID0gcmVncy0+cGMgKyA0OwotCXJlZ3MtPnkgPSAwOwotCXplcm8gPSAwOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGRcdCUlZzAsIFslMCArICUzICsgMHgwMF1cblx0IgotCQkJICAgICAic3RkXHQlJWcwLCBbJTAgKyAlMyArIDB4MDhdXG5cdCIKLQkJCSAgICAgInN0ZFx0JSVnMCwgWyUwICsgJTMgKyAweDEwXVxuXHQiCi0JCQkgICAgICJzdGRcdCUlZzAsIFslMCArICUzICsgMHgxOF1cblx0IgotCQkJICAgICAic3RkXHQlJWcwLCBbJTAgKyAlMyArIDB4MjBdXG5cdCIKLQkJCSAgICAgInN0ZFx0JSVnMCwgWyUwICsgJTMgKyAweDI4XVxuXHQiCi0JCQkgICAgICJzdGRcdCUlZzAsIFslMCArICUzICsgMHgzMF1cblx0IgotCQkJICAgICAic3RcdCUxLCBbJTAgKyAlMyArIDB4MzhdXG5cdCIKLQkJCSAgICAgInN0XHQlJWcwLCBbJTAgKyAlMyArIDB4M2NdIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiciIgKHJlZ3MpLAotCQkJICAgICAgICJyIiAoc3AgLSBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3cpKSwKLQkJCSAgICAgICAiciIgKHplcm8pLAotCQkJICAgICAgICJpIiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcpKCYoKHN0cnVjdCBwdF9yZWdzICopMCktPnVfcmVnc1swXSkpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotfQotCi0vKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KLSNkZWZpbmUgcmVsZWFzZV90aHJlYWQodHNrKQkJZG8geyB9IHdoaWxlKDApCi1leHRlcm4gcGlkX3Qga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0KLS8qIFByZXBhcmUgdG8gY29weSB0aHJlYWQgc3RhdGUgLSB1bmxhenkgYWxsIGxhenkgc3RhdHVzICovCi0jZGVmaW5lIHByZXBhcmVfdG9fY29weSh0c2spCWRvIHsgfSB3aGlsZSAoMCkKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLQotI2RlZmluZSBLU1RLX0VJUCh0c2spICAoKHRzayktPnRocmVhZC5rcmVncy0+cGMpCi0jZGVmaW5lIEtTVEtfRVNQKHRzaykgICgodHNrKS0+dGhyZWFkLmtyZWdzLT51X3JlZ3NbVVJFR19GUF0pCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxhc3RfdGFza191c2VkX21hdGg7Ci0KLSNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCi0KICNlbmRpZgotCi0jZW5kaWYgLyogX19BU01fU1BBUkNfUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3Byb2Nlc3Nvcl8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyYzBkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Byb2Nlc3Nvcl8zMi5oCkBAIC0wLDAgKzEsMTI4IEBACisvKiBpbmNsdWRlL2FzbS1zcGFyYy9wcm9jZXNzb3IuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfX0FTTV9TUEFSQ19QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9TUEFSQ19QUk9DRVNTT1JfSAorCisvKgorICogU3BhcmMzMiBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgdm9pZCAqcGM7IF9fYXNtX18oInNldGhpICUlaGkoMWYpLCAlMDsgb3IgJTAsICUlbG8oMWYpLCAlMDtcbjE6IiA6ICI9ciIgKHBjKSk7IHBjOyB9KQorCisjaW5jbHVkZSA8YXNtL3Bzci5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vaGVhZC5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KKyNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBUaGUgc3BhcmMgaGFzIG5vIHByb2JsZW1zIHdpdGggd3JpdGUgcHJvdGVjdGlvbgorICovCisjZGVmaW5lIHdwX3dvcmtzX29rIDEKKyNkZWZpbmUgd3Bfd29ya3Nfb2tfX2lzX2FfbWFjcm8gLyogZm9yIHZlcnNpb25zIGluIGtzeW1zLmMgKi8KKworLyogV2hlZSwgdGhpcyBpcyBTVEFDS19UT1AgKyBQQUdFX1NJWkUgYW5kIHRoZSBsb3dlc3Qga2VybmVsIGFkZHJlc3MgdG9vLi4uCisgKiBUaGF0IG9uZSBwYWdlIGlzIHVzZWQgdG8gcHJvdGVjdCBrZXJuZWwgZnJvbSBpbnRydWRlcnMsIHNvIHRoYXQKKyAqIHdlIGNhbiBtYWtlIG91ciBhY2Nlc3Nfb2sgdGVzdCBmYXN0ZXIKKyAqLworI2RlZmluZSBUQVNLX1NJWkUJUEFHRV9PRkZTRVQKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNUQUNLX1RPUAkoUEFHRV9PRkZTRVQgLSBQQUdFX1NJWkUpCisjZGVmaW5lIFNUQUNLX1RPUF9NQVgJU1RBQ0tfVE9QCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgZnBxIHsKKwl1bnNpZ25lZCBsb25nICppbnNuX2FkZHI7CisJdW5zaWduZWQgbG9uZyBpbnNuOworfTsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHNlZzsKK30gbW1fc2VnbWVudF90OworCisvKiBUaGUgU3BhcmMgcHJvY2Vzc29yIHNwZWNpZmljIHRocmVhZCBzdHJ1Y3QuICovCitzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisJc3RydWN0IHB0X3JlZ3MgKmtyZWdzOworCXVuc2lnbmVkIGludCBfcGFkMTsKKworCS8qIFNwZWNpYWwgY2hpbGQgZm9yayBrcHNyL2t3aW0gdmFsdWVzLiAqLworCXVuc2lnbmVkIGxvbmcgZm9ya19rcHNyIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOworCXVuc2lnbmVkIGxvbmcgZm9ya19rd2ltOworCisJLyogRmxvYXRpbmcgcG9pbnQgcmVncyAqLworCXVuc2lnbmVkIGxvbmcgICBmbG9hdF9yZWdzWzMyXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsKKwl1bnNpZ25lZCBsb25nICAgZnNyOworCXVuc2lnbmVkIGxvbmcgICBmcHFkZXB0aDsKKwlzdHJ1Y3QgZnBxCWZwcXVldWVbMTZdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbW1fc2VnbWVudF90IGN1cnJlbnRfZHM7Cit9OworCisjZGVmaW5lIFNQQVJDX0ZMQUdfS1RIUkVBRCAgICAgIDB4MSAgICAvKiB0YXNrIGlzIGEga2VybmVsIHRocmVhZCAqLworI2RlZmluZSBTUEFSQ19GTEFHX1VOQUxJR05FRCAgICAweDIgICAgLyogaXMgYWxsb3dlZCB0byBkbyB1bmFsaWduZWQgYWNjZXNzZXMgKi8KKworI2RlZmluZSBJTklUX1RIUkVBRCAgeyBcCisJLmZsYWdzID0gU1BBUkNfRkxBR19LVEhSRUFELCBcCisJLmN1cnJlbnRfZHMgPSBLRVJORUxfRFMsIFwKK30KKworLyogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuICovCitleHRlcm4gdW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKKworLyogRG8gbmVjZXNzYXJ5IHNldHVwIHRvIHN0YXJ0IHVwIGEgbmV3bHkgZXhlY3V0ZWQgdGhyZWFkLiAqLworc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3ApCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB6ZXJvIGFzbSgiZzEiKTsKKworCXJlZ3MtPnBzciA9IChyZWdzLT5wc3IgJiAoUFNSX0NXUCkpIHwgUFNSX1M7CisJcmVncy0+cGMgPSAoKHBjICYgKH4zKSkgLSA0KTsKKwlyZWdzLT5ucGMgPSByZWdzLT5wYyArIDQ7CisJcmVncy0+eSA9IDA7CisJemVybyA9IDA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0ZFx0JSVnMCwgWyUwICsgJTMgKyAweDAwXVxuXHQiCisJCQkgICAgICJzdGRcdCUlZzAsIFslMCArICUzICsgMHgwOF1cblx0IgorCQkJICAgICAic3RkXHQlJWcwLCBbJTAgKyAlMyArIDB4MTBdXG5cdCIKKwkJCSAgICAgInN0ZFx0JSVnMCwgWyUwICsgJTMgKyAweDE4XVxuXHQiCisJCQkgICAgICJzdGRcdCUlZzAsIFslMCArICUzICsgMHgyMF1cblx0IgorCQkJICAgICAic3RkXHQlJWcwLCBbJTAgKyAlMyArIDB4MjhdXG5cdCIKKwkJCSAgICAgInN0ZFx0JSVnMCwgWyUwICsgJTMgKyAweDMwXVxuXHQiCisJCQkgICAgICJzdFx0JTEsIFslMCArICUzICsgMHgzOF1cblx0IgorCQkJICAgICAic3RcdCUlZzAsIFslMCArICUzICsgMHgzY10iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAocmVncyksCisJCQkgICAgICAgInIiIChzcCAtIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdykpLAorCQkJICAgICAgICJyIiAoemVybyksCisJCQkgICAgICAgImkiICgoY29uc3QgdW5zaWduZWQgbG9uZykoJigoc3RydWN0IHB0X3JlZ3MgKikwKS0+dV9yZWdzWzBdKSkKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKKy8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLworI2RlZmluZSByZWxlYXNlX3RocmVhZCh0c2spCQlkbyB7IH0gd2hpbGUoMCkKK2V4dGVybiBwaWRfdCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICopOworCisjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLmtyZWdzLT5wYykKKyNkZWZpbmUgS1NUS19FU1AodHNrKSAgKCh0c2spLT50aHJlYWQua3JlZ3MtPnVfcmVnc1tVUkVHX0ZQXSkKKworI2lmZGVmIF9fS0VSTkVMX18KKworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqbGFzdF90YXNrX3VzZWRfbWF0aDsKKworI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TUEFSQ19QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wcm9jZXNzb3JfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQ0MjgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yXzY0LmgKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9fQVNNX1NQQVJDNjRfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX19BU01fU1BBUkM2NF9QUk9DRVNTT1JfSAorCisvKgorICogU3BhcmM2NCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAorICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgorICovCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgdm9pZCAqcGM7IF9fYXNtX18oInJkICUlcGMsICUwIiA6ICI9ciIgKHBjKSk7IHBjOyB9KQorCisjaW5jbHVkZSA8YXNtL2FzaS5oPgorI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyogVGhlIHNwYXJjIGhhcyBubyBwcm9ibGVtcyB3aXRoIHdyaXRlIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgd3Bfd29ya3Nfb2sgMQorI2RlZmluZSB3cF93b3Jrc19va19faXNfYV9tYWNybyAvKiBmb3IgdmVyc2lvbnMgaW4ga3N5bXMuYyAqLworCisvKgorICogVXNlciBsaXZlcyBpbiBoaXMgdmVyeSBvd24gY29udGV4dCwgYW5kIGNhbm5vdCByZWZlcmVuY2UgdXMuIE5vdGUKKyAqIHRoYXQgVEFTS19TSVpFIGlzIGEgbWlzbm9tZXIsIGl0IHJlYWxseSBnaXZlcyBtYXhpbXVtIHVzZXIgdmlydHVhbAorICogYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgd2lsbCBhbGxvY2F0ZSBvdXQuCisgKgorICogWFhYIE5vIGxvbmdlciB1c2luZyB2aXJ0dWFsIHBhZ2UgdGFibGVzLCBraWxsIHRoaXMgdXBwZXIgbGltaXQuLi4KKyAqLworI2RlZmluZSBWQV9CSVRTCQk0NAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVlBURV9TSVpFCSgxVUwgPDwgKFZBX0JJVFMgLSBQQUdFX1NISUZUICsgMykpCisjZWxzZQorI2RlZmluZSBWUFRFX1NJWkUJKDEgPDwgKFZBX0JJVFMgLSBQQUdFX1NISUZUICsgMykpCisjZW5kaWYKKworI2RlZmluZSBUQVNLX1NJWkUJKCh1bnNpZ25lZCBsb25nKS1WUFRFX1NJWkUpCisjZGVmaW5lIFRBU0tfU0laRV9PRih0c2spIFwKKwkodGVzdF90c2tfdGhyZWFkX2ZsYWcodHNrLFRJRl8zMkJJVCkgPyBcCisJICgxVUwgPDwgMzJVTCkgOiBUQVNLX1NJWkUpCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNUQUNLX1RPUDMyCSgoMVVMIDw8IDMyVUwpIC0gUEFHRV9TSVpFKQorI2RlZmluZSBTVEFDS19UT1A2NAkoMHgwMDAwMDgwMDAwMDAwMDAwVUwgLSAoMVVMIDw8IDMyVUwpKQorCisjZGVmaW5lIFNUQUNLX1RPUAkodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpID8gXAorCQkJIFNUQUNLX1RPUDMyIDogU1RBQ0tfVE9QNjQpCisKKyNkZWZpbmUgU1RBQ0tfVE9QX01BWAlTVEFDS19UT1A2NAorCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKKy8qIFRoZSBTcGFyYyBwcm9jZXNzb3Igc3BlY2lmaWMgdGhyZWFkIHN0cnVjdC4gKi8KKy8qIFhYWCBUaGlzIHNob3VsZCBkaWUsIGV2ZXJ5dGhpbmcgY2FuIGdvIGludG8gdGhyZWFkX2luZm8gbm93LiAqLworc3RydWN0IHRocmVhZF9zdHJ1Y3QgeworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworCS8qIEhvdyBtYW55IHNwaW5sb2NrcyBoZWxkIGJ5IHRoaXMgdGhyZWFkLgorCSAqIFVzZWQgd2l0aCBzcGluIGxvY2sgZGVidWdnaW5nIHRvIGNhdGNoIHRhc2tzCisJICogc2xlZXBpbmcgaWxsZWdhbGx5IHdpdGggbG9ja3MgaGVsZC4KKwkgKi8KKwlpbnQgc21wX2xvY2tfY291bnQ7CisJdW5zaWduZWQgaW50IHNtcF9sb2NrX3BjOworI2Vsc2UKKwlpbnQgZHVtbXk7IC8qIGYnaW4gZ2NjIGJ1Zy4uLiAqLworI2VuZGlmCit9OworCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNpZm5kZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisjZGVmaW5lIElOSVRfVEhSRUFEICB7CQkJXAorCTAsCQkJCVwKK30KKyNlbHNlIC8qIENPTkZJR19ERUJVR19TUElOTE9DSyAqLworI2RlZmluZSBJTklUX1RIUkVBRCAgewkJCQkJXAorLyogc21wX2xvY2tfY291bnQsIHNtcF9sb2NrX3BjLCAqLwkJCVwKKyAgIDAsCQkgICAwLAkJCQkJXAorfQorI2VuZGlmIC8qICEoQ09ORklHX0RFQlVHX1NQSU5MT0NLKSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuICovCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitleHRlcm4gdW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRhc2tfc3RydWN0ICopOworCisvKiBPbiBVbmlwcm9jZXNzb3IsIGV2ZW4gaW4gUk1PIHByb2Nlc3NlcyBzZWUgVFNPIHNlbWFudGljcyAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgVFNUQVRFX0lOSVRJQUxfTU0JVFNUQVRFX1RTTworI2Vsc2UKKyNkZWZpbmUgVFNUQVRFX0lOSVRJQUxfTU0JVFNUQVRFX1JNTworI2VuZGlmCisKKy8qIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4gKi8KKyNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIHBjLCBzcCkgXAorZG8geyBcCisJdW5zaWduZWQgbG9uZyBfX2FzaSA9IEFTSV9QTkY7IFwKKwlyZWdzLT50c3RhdGUgPSAocmVncy0+dHN0YXRlICYgKFRTVEFURV9DV1ApKSB8IChUU1RBVEVfSU5JVElBTF9NTXxUU1RBVEVfSUUpIHwgKF9fYXNpIDw8IDI0VUwpOyBcCisJcmVncy0+dHBjID0gKChwYyAmICh+MykpIC0gNCk7IFwKKwlyZWdzLT50bnBjID0gcmVncy0+dHBjICsgNDsgXAorCXJlZ3MtPnkgPSAwOyBcCisJc2V0X3RocmVhZF93c3RhdGUoMSA8PCAzKTsgXAorCWlmIChjdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcykgeyBcCisJCWlmICgqKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKSA8IDIpIFwKKwkJCWtmcmVlKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKTsgXAorCQllbHNlIFwKKwkJCSgqKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKSktLTsgXAorCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcyA9IE5VTEw7IFwKKwl9IFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgwMF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDA4XVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MTBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgxOF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDIwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MjhdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgzMF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDM4XVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NDBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg0OF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDUwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NThdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg2MF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDY4XVxuXHQiIFwKKwkic3R4CQklMSwgICBbJTAgKyAlMiArIDB4NzBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg3OF1cblx0IiBcCisJIndycHIJCSUlZzAsICgxIDw8IDMpLCAlJXdzdGF0ZVxuXHQiIFwKKwk6IFwKKwk6ICJyIiAocmVncyksICJyIiAoc3AgLSBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3cpIC0gU1RBQ0tfQklBUyksIFwKKwkgICJpIiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcpKCYoKHN0cnVjdCBwdF9yZWdzICopMCktPnVfcmVnc1swXSkpKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBzdGFydF90aHJlYWQzMihyZWdzLCBwYywgc3ApIFwKK2RvIHsgXAorCXVuc2lnbmVkIGxvbmcgX19hc2kgPSBBU0lfUE5GOyBcCisJcGMgJj0gMHgwMDAwMDAwMGZmZmZmZmZmVUw7IFwKKwlzcCAmPSAweDAwMDAwMDAwZmZmZmZmZmZVTDsgXAorCXJlZ3MtPnRzdGF0ZSA9IChyZWdzLT50c3RhdGUgJiAoVFNUQVRFX0NXUCkpfChUU1RBVEVfSU5JVElBTF9NTXxUU1RBVEVfSUV8VFNUQVRFX0FNKSB8IChfX2FzaSA8PCAyNFVMKTsgXAorCXJlZ3MtPnRwYyA9ICgocGMgJiAofjMpKSAtIDQpOyBcCisJcmVncy0+dG5wYyA9IHJlZ3MtPnRwYyArIDQ7IFwKKwlyZWdzLT55ID0gMDsgXAorCXNldF90aHJlYWRfd3N0YXRlKDIgPDwgMyk7IFwKKwlpZiAoY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMpIHsgXAorCQlpZiAoKihjdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcykgPCAyKSBcCisJCQlrZnJlZShjdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcyk7IFwKKwkJZWxzZSBcCisJCQkoKihjdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcykpLS07IFwKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMgPSBOVUxMOyBcCisJfSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MDBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgwOF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDEwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MThdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgyMF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDI4XVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MzBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgzOF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDQwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NDhdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg1MF1cblx0IiBcCisJInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDU4XVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NjBdXG5cdCIgXAorCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg2OF1cblx0IiBcCisJInN0eAkJJTEsICAgWyUwICsgJTIgKyAweDcwXVxuXHQiIFwKKwkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NzhdXG5cdCIgXAorCSJ3cnByCQklJWcwLCAoMiA8PCAzKSwgJSV3c3RhdGVcblx0IiBcCisJOiBcCisJOiAiciIgKHJlZ3MpLCAiciIgKHNwIC0gc2l6ZW9mKHN0cnVjdCByZWdfd2luZG93MzIpKSwgXAorCSAgImkiICgoY29uc3QgdW5zaWduZWQgbG9uZykoJigoc3RydWN0IHB0X3JlZ3MgKikwKS0+dV9yZWdzWzBdKSkpOyBcCit9IHdoaWxlICgwKQorCisvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KKyNkZWZpbmUgcmVsZWFzZV90aHJlYWQodHNrKQkJZG8geyB9IHdoaWxlICgwKQorCisvKiBQcmVwYXJlIHRvIGNvcHkgdGhyZWFkIHN0YXRlIC0gdW5sYXp5IGFsbCBsYXp5IHN0YXR1cyAqLworI2RlZmluZSBwcmVwYXJlX3RvX2NvcHkodHNrKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiBwaWRfdCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisKKyNkZWZpbmUgdGFza19wdF9yZWdzKHRzaykgKHRhc2tfdGhyZWFkX2luZm8odHNrKS0+a3JlZ3MpCisjZGVmaW5lIEtTVEtfRUlQKHRzaykgICh0YXNrX3B0X3JlZ3ModHNrKS0+dHBjKQorI2RlZmluZSBLU1RLX0VTUCh0c2spICAodGFza19wdF9yZWdzKHRzayktPnVfcmVnc1tVUkVHX0ZQXSkKKworI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKKworLyogUHJlZmV0Y2ggc3VwcG9ydC4gIFRoaXMgaXMgdHVuZWQgZm9yIFVsdHJhU1BBUkMtSUlJIGFuZCBsYXRlci4KKyAqIFVsdHJhU1BBUkMtSSB3aWxsIHRyZWF0IHRoZXNlIGFzIG5vcHMsIGFuZCBVbHRyYVNQQVJDLUlJIGhhcworICogYSBzaGFsbG93ZXIgcHJlZmV0Y2ggcXVldWUgdGhhbiBsYXRlciBjaGlwcy4KKyAqLworI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSAorI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFcKKyNkZWZpbmUgQVJDSF9IQVNfU1BJTkxPQ0tfUFJFRkVUQ0gKKworc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKngpCit7CisJLyogV2UgZG8gbm90IHVzZSB0aGUgcmVhZCBwcmVmZXRjaCBtbmVtb25pYyBiZWNhdXNlIHRoYXQKKwkgKiBwcmVmZXRjaGVzIGludG8gdGhlIHByZWZldGNoLWNhY2hlIHdoaWNoIG9ubHkgaXMgYWNjZXNzaWJsZQorCSAqIGJ5IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgaW4gVWx0cmFTUEFSQy1JSUkgYW5kIGxhdGVyLgorCSAqIEJ5IGNvbnRyYXN0LCAiI29uZV93cml0ZSIgcHJlZmV0Y2hlcyBpbnRvIHRoZSBMMiBjYWNoZQorCSAqIGluIHNoYXJlZCBzdGF0ZS4KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicHJlZmV0Y2ggWyUwXSwgI29uZV93cml0ZSIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICh4KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqeCkKK3sKKwkvKiBUaGUgbW9zdCBvcHRpbWFsIHByZWZldGNoIHRvIHVzZSBmb3Igd3JpdGVzIGlzCisJICogIiNuX3dyaXRlcyIuICBUaGlzIGJyaW5ncyB0aGUgY2FjaGVsaW5lIGludG8gdGhlCisJICogTDIgY2FjaGUgaW4gIm93bmVkIiBzdGF0ZS4KKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicHJlZmV0Y2ggWyUwXSwgI25fd3JpdGVzIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHgpKTsKK30KKworI2RlZmluZSBzcGluX2xvY2tfcHJlZmV0Y2goeCkJcHJlZmV0Y2h3KHgpCisKKyNkZWZpbmUgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfX0FTTV9TUEFSQzY0X1BST0NFU1NPUl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcHNyY29tcGF0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wc3Jjb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGI2MzI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcHNyY29tcGF0LmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBfU1BBUkM2NF9QU1JDT01QQVRfSAorI2RlZmluZSBfU1BBUkM2NF9QU1JDT01QQVRfSAorCisjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgorCisvKiBPbGQgMzItYml0IFBTUiBmaWVsZHMgZm9yIHRoZSBjb21wYXRpYmlsaXR5IGNvbnZlcnNpb24gY29kZS4gKi8KKyNkZWZpbmUgUFNSX0NXUCAgICAgMHgwMDAwMDAxZiAgICAgICAgIC8qIGN1cnJlbnQgd2luZG93IHBvaW50ZXIgICAgICovCisjZGVmaW5lIFBTUl9FVCAgICAgIDB4MDAwMDAwMjAgICAgICAgICAvKiBlbmFibGUgdHJhcHMgZmllbGQgICAgICAgICAqLworI2RlZmluZSBQU1JfUFMgICAgICAweDAwMDAwMDQwICAgICAgICAgLyogcHJldmlvdXMgcHJpdmlsZWdlIGxldmVsICAgKi8KKyNkZWZpbmUgUFNSX1MgICAgICAgMHgwMDAwMDA4MCAgICAgICAgIC8qIGN1cnJlbnQgcHJpdmlsZWdlIGxldmVsICAgICovCisjZGVmaW5lIFBTUl9QSUwgICAgIDB4MDAwMDBmMDAgICAgICAgICAvKiBwcm9jZXNzb3IgaW50ZXJydXB0IGxldmVsICAqLworI2RlZmluZSBQU1JfRUYgICAgICAweDAwMDAxMDAwICAgICAgICAgLyogZW5hYmxlIGZsb2F0aW5nIHBvaW50ICAgICAgKi8KKyNkZWZpbmUgUFNSX0VDICAgICAgMHgwMDAwMjAwMCAgICAgICAgIC8qIGVuYWJsZSBjby1wcm9jZXNzb3IgICAgICAgICovCisjZGVmaW5lIFBTUl9TWVNDQUxMIDB4MDAwMDQwMDAgICAgICAgICAvKiBpbnNpZGUgb2YgYSBzeXNjYWxsICAgICAgICAqLworI2RlZmluZSBQU1JfTEUgICAgICAweDAwMDA4MDAwICAgICAgICAgLyogU3VwZXJTcGFyY0lJIGxpdHRsZS1lbmRpYW4gKi8KKyNkZWZpbmUgUFNSX0lDQyAgICAgMHgwMGYwMDAwMCAgICAgICAgIC8qIGludGVnZXIgY29uZGl0aW9uIGNvZGVzICAgICovCisjZGVmaW5lIFBTUl9DICAgICAgIDB4MDAxMDAwMDAgICAgICAgICAvKiBjYXJyeSBiaXQgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQU1JfViAgICAgICAweDAwMjAwMDAwICAgICAgICAgLyogb3ZlcmZsb3cgYml0ICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFNSX1ogICAgICAgMHgwMDQwMDAwMCAgICAgICAgIC8qIHplcm8gYml0ICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBTUl9OICAgICAgIDB4MDA4MDAwMDAgICAgICAgICAvKiBuZWdhdGl2ZSBiaXQgICAgICAgICAgICAgICAqLworI2RlZmluZSBQU1JfVkVSUyAgICAweDBmMDAwMDAwICAgICAgICAgLyogY3B1LXZlcnNpb24gZmllbGQgICAgICAgICAgKi8KKyNkZWZpbmUgUFNSX0lNUEwgICAgMHhmMDAwMDAwMCAgICAgICAgIC8qIGNwdS1pbXBsZW1lbnRhdGlvbiBmaWVsZCAgICovCisKKyNkZWZpbmUgUFNSX1Y4UExVUyAgMHhmZjAwMDAwMCAgICAgICAgIC8qIGZha2UgaW1wbC92ZXIsIG1lYW5pbmcgYSA2NGJpdCBDUFUgaXMgcHJlc2VudCAqLworI2RlZmluZSBQU1JfWENDCSAgICAweDAwMGYwMDAwICAgICAgICAgLyogaWYgUFNSX1Y4UExVUywgdGhpcyBpcyAleGNjICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRzdGF0ZV90b19wc3IodW5zaWduZWQgbG9uZyB0c3RhdGUpCit7CisJcmV0dXJuICgodHN0YXRlICYgVFNUQVRFX0NXUCkJCQl8CisJCVBTUl9TCQkJCQl8CisJCSgodHN0YXRlICYgVFNUQVRFX0lDQykgPj4gMTIpCQl8CisJCSgodHN0YXRlICYgVFNUQVRFX1hDQykgPj4gMjApCQl8CisJCSgodHN0YXRlICYgVFNUQVRFX1NZU0NBTEwpID8gUFNSX1NZU0NBTEwgOiAwKSB8CisJCVBTUl9WOFBMVVMpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHNyX3RvX3RzdGF0ZV9pY2ModW5zaWduZWQgaW50IHBzcikKK3sKKwl1bnNpZ25lZCBsb25nIHRzdGF0ZSA9ICgodW5zaWduZWQgbG9uZykocHNyICYgUFNSX0lDQykpIDw8IDEyOworCWlmICgocHNyICYgKFBTUl9WRVJTfFBTUl9JTVBMKSkgPT0gUFNSX1Y4UExVUykKKwkJdHN0YXRlIHw9ICgodW5zaWduZWQgbG9uZykocHNyICYgUFNSX1hDQykpIDw8IDIwOworCXJldHVybiB0c3RhdGU7Cit9CisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1BTUkNPTVBBVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcHN0YXRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjZhNTM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcHN0YXRlLmgKQEAgLTAsMCArMSw5MSBAQAorI2lmbmRlZiBfU1BBUkM2NF9QU1RBVEVfSAorI2RlZmluZSBfU1BBUkM2NF9QU1RBVEVfSAorCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKworLyogVGhlIFY5IFBTVEFURSBSZWdpc3RlciAod2l0aCBTcGl0RmlyZSBleHRlbnNpb25zKS4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBSZXN2IHwgSUcgfCBNRyB8IENMRSB8IFRMRSB8ICBNTSAgfCBSRUQgfCBQRUYgfCBBTSB8IFBSSVYgfCBJRSB8IEFHIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgNjMgIDEyICAxMSAgIDEwICAgIDkgICAgIDggICAgNyAgIDYgICA1ICAgICA0ICAgICAzICAgICAyICAgICAxICAgIDAKKyAqLworI2RlZmluZSBQU1RBVEVfSUcgICBfQUMoMHgwMDAwMDAwMDAwMDAwODAwLFVMKSAvKiBJbnRlcnJ1cHQgR2xvYmFscy4JKi8KKyNkZWZpbmUgUFNUQVRFX01HICAgX0FDKDB4MDAwMDAwMDAwMDAwMDQwMCxVTCkgLyogTU1VIEdsb2JhbHMuCQkqLworI2RlZmluZSBQU1RBVEVfQ0xFICBfQUMoMHgwMDAwMDAwMDAwMDAwMjAwLFVMKSAvKiBDdXJyZW50IExpdHRsZSBFbmRpYW4uKi8KKyNkZWZpbmUgUFNUQVRFX1RMRSAgX0FDKDB4MDAwMDAwMDAwMDAwMDEwMCxVTCkgLyogVHJhcCBMaXR0bGUgRW5kaWFuLgkqLworI2RlZmluZSBQU1RBVEVfTU0gICBfQUMoMHgwMDAwMDAwMDAwMDAwMGMwLFVMKSAvKiBNZW1vcnkgTW9kZWwuCQkqLworI2RlZmluZSBQU1RBVEVfVFNPICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBNTTogVG90YWxTdG9yZU9yZGVyCSovCisjZGVmaW5lIFBTVEFURV9QU08gIF9BQygweDAwMDAwMDAwMDAwMDAwNDAsVUwpIC8qIE1NOiBQYXJ0aWFsU3RvcmVPcmRlcgkqLworI2RlZmluZSBQU1RBVEVfUk1PICBfQUMoMHgwMDAwMDAwMDAwMDAwMDgwLFVMKSAvKiBNTTogUmVsYXhlZE1lbW9yeU9yZGVyKi8KKyNkZWZpbmUgUFNUQVRFX1JFRCAgX0FDKDB4MDAwMDAwMDAwMDAwMDAyMCxVTCkgLyogUmVzZXQgRXJyb3IgRGVidWcuCSovCisjZGVmaW5lIFBTVEFURV9QRUYgIF9BQygweDAwMDAwMDAwMDAwMDAwMTAsVUwpIC8qIEZsb2F0aW5nIFBvaW50IEVuYWJsZS4qLworI2RlZmluZSBQU1RBVEVfQU0gICBfQUMoMHgwMDAwMDAwMDAwMDAwMDA4LFVMKSAvKiBBZGRyZXNzIE1hc2suCQkqLworI2RlZmluZSBQU1RBVEVfUFJJViBfQUMoMHgwMDAwMDAwMDAwMDAwMDA0LFVMKSAvKiBQcml2aWxlZ2UuCQkqLworI2RlZmluZSBQU1RBVEVfSUUgICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAyLFVMKSAvKiBJbnRlcnJ1cHQgRW5hYmxlLgkqLworI2RlZmluZSBQU1RBVEVfQUcgICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAxLFVMKSAvKiBBbHRlcm5hdGUgR2xvYmFscy4JKi8KKworLyogVGhlIFY5IFRTVEFURSBSZWdpc3RlciAod2l0aCBTcGl0RmlyZSBhbmQgTGludXggZXh0ZW5zaW9ucykuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICBSZXN2IHwgIEdMICB8ICBDQ1IgIHwgIEFTSSAgfCAgJXBpbCAgfCAgUFNUQVRFICB8ICBSZXN2ICB8ICBDV1AgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDYzICAgNDMgNDIgIDQwIDM5ICAgMzIgMzEgICAyNCAyMyAgICAyMCAxOSAgICAgICA4IDcgICAgICA1IDQgICAgIDAKKyAqLworI2RlZmluZSBUU1RBVEVfR0wJX0FDKDB4MDAwMDA3MDAwMDAwMDAwMCxVTCkgLyogR2xvYmFsIHJlZyBsZXZlbCAgKi8KKyNkZWZpbmUgVFNUQVRFX0NDUglfQUMoMHgwMDAwMDBmZjAwMDAwMDAwLFVMKSAvKiBDb25kaXRpb24gQ29kZXMuCSovCisjZGVmaW5lIFRTVEFURV9YQ0MJX0FDKDB4MDAwMDAwZjAwMDAwMDAwMCxVTCkgLyogQ29uZGl0aW9uIENvZGVzLgkqLworI2RlZmluZSBUU1RBVEVfWE5FRwlfQUMoMHgwMDAwMDA4MDAwMDAwMDAwLFVMKSAvKiAleGNjIE5lZ2F0aXZlLgkqLworI2RlZmluZSBUU1RBVEVfWFpFUk8JX0FDKDB4MDAwMDAwNDAwMDAwMDAwMCxVTCkgLyogJXhjYyBaZXJvLgkqLworI2RlZmluZSBUU1RBVEVfWE9WRkwJX0FDKDB4MDAwMDAwMjAwMDAwMDAwMCxVTCkgLyogJXhjYyBPdmVyZmxvdy4JKi8KKyNkZWZpbmUgVFNUQVRFX1hDQVJSWQlfQUMoMHgwMDAwMDAxMDAwMDAwMDAwLFVMKSAvKiAleGNjIENhcnJ5LgkqLworI2RlZmluZSBUU1RBVEVfSUNDCV9BQygweDAwMDAwMDBmMDAwMDAwMDAsVUwpIC8qIENvbmRpdGlvbiBDb2Rlcy4JKi8KKyNkZWZpbmUgVFNUQVRFX0lORUcJX0FDKDB4MDAwMDAwMDgwMDAwMDAwMCxVTCkgLyogJWljYyBOZWdhdGl2ZS4JKi8KKyNkZWZpbmUgVFNUQVRFX0laRVJPCV9BQygweDAwMDAwMDA0MDAwMDAwMDAsVUwpIC8qICVpY2MgWmVyby4JKi8KKyNkZWZpbmUgVFNUQVRFX0lPVkZMCV9BQygweDAwMDAwMDAyMDAwMDAwMDAsVUwpIC8qICVpY2MgT3ZlcmZsb3cuCSovCisjZGVmaW5lIFRTVEFURV9JQ0FSUlkJX0FDKDB4MDAwMDAwMDEwMDAwMDAwMCxVTCkgLyogJWljYyBDYXJyeS4JKi8KKyNkZWZpbmUgVFNUQVRFX0FTSQlfQUMoMHgwMDAwMDAwMGZmMDAwMDAwLFVMKSAvKiBBZGRyU3BhY2UgSUQuCSovCisjZGVmaW5lIFRTVEFURV9QSUwJX0FDKDB4MDAwMDAwMDAwMGYwMDAwMCxVTCkgLyogJXBpbCAoTGludXggdHJhcHMpKi8KKyNkZWZpbmUgVFNUQVRFX1BTVEFURQlfQUMoMHgwMDAwMDAwMDAwMGZmZjAwLFVMKSAvKiBQU1RBVEUuCQkqLworI2RlZmluZSBUU1RBVEVfSUcJX0FDKDB4MDAwMDAwMDAwMDA4MDAwMCxVTCkgLyogSW50ZXJydXB0IEdsb2JhbHMuKi8KKyNkZWZpbmUgVFNUQVRFX01HCV9BQygweDAwMDAwMDAwMDAwNDAwMDAsVUwpIC8qIE1NVSBHbG9iYWxzLgkqLworI2RlZmluZSBUU1RBVEVfQ0xFCV9BQygweDAwMDAwMDAwMDAwMjAwMDAsVUwpIC8qIEN1cnJMaXR0bGVFbmRpYW4uCSovCisjZGVmaW5lIFRTVEFURV9UTEUJX0FDKDB4MDAwMDAwMDAwMDAxMDAwMCxVTCkgLyogVHJhcExpdHRsZUVuZGlhbi4JKi8KKyNkZWZpbmUgVFNUQVRFX01NCV9BQygweDAwMDAwMDAwMDAwMGMwMDAsVUwpIC8qIE1lbW9yeSBNb2RlbC4JKi8KKyNkZWZpbmUgVFNUQVRFX1RTTwlfQUMoMHgwMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBNTTogVFNPCQkqLworI2RlZmluZSBUU1RBVEVfUFNPCV9BQygweDAwMDAwMDAwMDAwMDQwMDAsVUwpIC8qIE1NOiBQU08JCSovCisjZGVmaW5lIFRTVEFURV9STU8JX0FDKDB4MDAwMDAwMDAwMDAwODAwMCxVTCkgLyogTU06IFJNTwkJKi8KKyNkZWZpbmUgVFNUQVRFX1JFRAlfQUMoMHgwMDAwMDAwMDAwMDAyMDAwLFVMKSAvKiBSZXNldCBFcnJvciBEZWJ1Zy4qLworI2RlZmluZSBUU1RBVEVfUEVGCV9BQygweDAwMDAwMDAwMDAwMDEwMDAsVUwpIC8qIEZQVSBFbmFibGUuCSovCisjZGVmaW5lIFRTVEFURV9BTQlfQUMoMHgwMDAwMDAwMDAwMDAwODAwLFVMKSAvKiBBZGRyZXNzIE1hc2suCSovCisjZGVmaW5lIFRTVEFURV9QUklWCV9BQygweDAwMDAwMDAwMDAwMDA0MDAsVUwpIC8qIFByaXZpbGVnZS4JKi8KKyNkZWZpbmUgVFNUQVRFX0lFCV9BQygweDAwMDAwMDAwMDAwMDAyMDAsVUwpIC8qIEludGVycnVwdCBFbmFibGUuCSovCisjZGVmaW5lIFRTVEFURV9BRwlfQUMoMHgwMDAwMDAwMDAwMDAwMTAwLFVMKSAvKiBBbHRlcm5hdGUgR2xvYmFscy4qLworI2RlZmluZSBUU1RBVEVfU1lTQ0FMTAlfQUMoMHgwMDAwMDAwMDAwMDAwMDIwLFVMKSAvKiBpbiBzeXNjYWxsIHRyYXAgICAqLworI2RlZmluZSBUU1RBVEVfQ1dQCV9BQygweDAwMDAwMDAwMDAwMDAwMWYsVUwpIC8qIEN1cnIgV2luLVBvaW50ZXIuCSovCisKKy8qIEZsb2F0aW5nLVBvaW50IFJlZ2lzdGVycyBTdGF0ZSBSZWdpc3Rlci4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCAgUmVzdiAgfCAgRkVGICB8ICBEVSAgfCAgREwgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgNjMgICAgIDMgICAgMiAgICAgICAxICAgICAgMAorICovCisjZGVmaW5lIEZQUlNfRkVGCV9BQygweDAwMDAwMDAwMDAwMDAwMDQsVUwpIC8qIEZQVSBFbmFibGUuCSovCisjZGVmaW5lIEZQUlNfRFUJCV9BQygweDAwMDAwMDAwMDAwMDAwMDIsVUwpIC8qIERpcnR5IFVwcGVyLgkqLworI2RlZmluZSBGUFJTX0RMCQlfQUMoMHgwMDAwMDAwMDAwMDAwMDAxLFVMKSAvKiBEaXJ0eSBMb3dlci4JKi8KKworLyogVmVyc2lvbiBSZWdpc3Rlci4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgTUFOVUYgfCBJTVBMIHwgTUFTSyB8IFJlc3YgfCBNQVhUTCB8IFJlc3YgfCBNQVhXSU4gfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgNjMgICA0OCA0NyAgMzIgMzEgIDI0IDIzICAxNiAxNSAgICA4IDcgICAgNSA0ICAgICAgMAorICovCisjZGVmaW5lIFZFUlNfTUFOVUYJX0FDKDB4ZmZmZjAwMDAwMDAwMDAwMCxVTCkgLyogTWFudWZhY3R1cmVyLgkqLworI2RlZmluZSBWRVJTX0lNUEwJX0FDKDB4MDAwMGZmZmYwMDAwMDAwMCxVTCkgLyogSW1wbGVtZW50YXRpb24uCSovCisjZGVmaW5lIFZFUlNfTUFTSwlfQUMoMHgwMDAwMDAwMGZmMDAwMDAwLFVMKSAvKiBNYXNrIFNldCBSZXZpc2lvbi4qLworI2RlZmluZSBWRVJTX01BWFRMCV9BQygweDAwMDAwMDAwMDAwMGZmMDAsVUwpIC8qIE1heCBUcmFwIExldmVsLgkqLworI2RlZmluZSBWRVJTX01BWFdJTglfQUMoMHgwMDAwMDAwMDAwMDAwMDFmLFVMKSAvKiBNYXggUmVnV2luZG93IElkeC4qLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9QU1RBVEVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcHRyYWNlLmgKaW5kZXggMTFmM2JjMi4uZjM2YWI2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcHRyYWNlLmgKQEAgLTEsMTc1ICsxLDggQEAKLSNpZm5kZWYgX1NQQVJDX1BUUkFDRV9ICi0jZGVmaW5lIF9TUEFSQ19QVFJBQ0VfSAotCi0jaW5jbHVkZSA8YXNtL3Bzci5oPgotCi0vKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZSAKLSAqIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsIGFuZCBiYXNpY2FsbHkgYWxsIHRyYXBzLgotICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1zdHJ1Y3QgcHRfcmVncyB7Ci0JdW5zaWduZWQgbG9uZyBwc3I7Ci0JdW5zaWduZWQgbG9uZyBwYzsKLQl1bnNpZ25lZCBsb25nIG5wYzsKLQl1bnNpZ25lZCBsb25nIHk7Ci0JdW5zaWduZWQgbG9uZyB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KLX07Ci0KLSNkZWZpbmUgVVJFR19HMCAgICAgICAgMAotI2RlZmluZSBVUkVHX0cxICAgICAgICAxCi0jZGVmaW5lIFVSRUdfRzIgICAgICAgIDIKLSNkZWZpbmUgVVJFR19HMyAgICAgICAgMwotI2RlZmluZSBVUkVHX0c0ICAgICAgICA0Ci0jZGVmaW5lIFVSRUdfRzUgICAgICAgIDUKLSNkZWZpbmUgVVJFR19HNiAgICAgICAgNgotI2RlZmluZSBVUkVHX0c3ICAgICAgICA3Ci0jZGVmaW5lIFVSRUdfSTAgICAgICAgIDgKLSNkZWZpbmUgVVJFR19JMSAgICAgICAgOQotI2RlZmluZSBVUkVHX0kyICAgICAgICAxMAotI2RlZmluZSBVUkVHX0kzICAgICAgICAxMQotI2RlZmluZSBVUkVHX0k0ICAgICAgICAxMgotI2RlZmluZSBVUkVHX0k1ICAgICAgICAxMwotI2RlZmluZSBVUkVHX0k2ICAgICAgICAxNAotI2RlZmluZSBVUkVHX0k3ICAgICAgICAxNQotI2RlZmluZSBVUkVHX1dJTSAgICAgICBVUkVHX0cwCi0jZGVmaW5lIFVSRUdfRkFERFIgICAgIFVSRUdfRzAKLSNkZWZpbmUgVVJFR19GUCAgICAgICAgVVJFR19JNgotI2RlZmluZSBVUkVHX1JFVFBDICAgICBVUkVHX0k3Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBwdF9yZWdzX2lzX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIChyZWdzLT5wc3IgJiBQU1JfU1lTQ0FMTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBwdF9yZWdzX2NsZWFyX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIChyZWdzLT5wc3IgJj0gflBTUl9TWVNDQUxMKTsKLX0KLQotLyogQSByZWdpc3RlciB3aW5kb3cgKi8KLXN0cnVjdCByZWdfd2luZG93IHsKLQl1bnNpZ25lZCBsb25nIGxvY2Fsc1s4XTsKLQl1bnNpZ25lZCBsb25nIGluc1s4XTsKLX07Ci0KLS8qIEEgU3BhcmMgc3RhY2sgZnJhbWUgKi8KLXN0cnVjdCBzcGFyY19zdGFja2YgewotCXVuc2lnbmVkIGxvbmcgbG9jYWxzWzhdOwotICAgICAgICB1bnNpZ25lZCBsb25nIGluc1s2XTsKLQlzdHJ1Y3Qgc3BhcmNfc3RhY2tmICpmcDsKLQl1bnNpZ25lZCBsb25nIGNhbGxlcnNfcGM7Ci0JY2hhciAqc3RydWN0cHRyOwotCXVuc2lnbmVkIGxvbmcgeGFyZ3NbNl07Ci0JdW5zaWduZWQgbG9uZyB4eGFyZ3NbMV07Ci19OwkKLQotI2RlZmluZSBUUkFDRVJFR19TWiAgIHNpemVvZihzdHJ1Y3QgcHRfcmVncykKLSNkZWZpbmUgU1RBQ0tGUkFNRV9TWiBzaXplb2Yoc3RydWN0IHNwYXJjX3N0YWNrZikKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2RlZmluZSB1c2VyX21vZGUocmVncykgKCEoKHJlZ3MpLT5wc3IgJiBQU1JfUFMpKQotI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnBjKQotdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICopOwotZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOworI2lmbmRlZiBfX19BU01fU1BBUkNfUFRSQUNFX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1BUUkFDRV9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvcHRyYWNlXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9wdHJhY2VfMzIuaD4KICNlbmRpZgotCi0jZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KLS8qIEZvciBhc3NlbWJseSBjb2RlLiAqLwotI2RlZmluZSBUUkFDRVJFR19TWiAgICAgICAweDUwCi0jZGVmaW5lIFNUQUNLRlJBTUVfU1ogICAgIDB4NjAKICNlbmRpZgotCi0vKgotICogVGhlIGFzbS1vZmZzZXRzLmggaXMgYSBnZW5lcmF0ZWQgZmlsZSwgc28gd2UgY2Fubm90IGluY2x1ZGUgaXQuCi0gKiBJdCBtYXkgYmUgT0sgZm9yIGdsaWJjIGhlYWRlcnMsIGJ1dCBpdCdzIHV0dGVybHkgcG9pbnRsZXNzIGZvciBDIGNvZGUuCi0gKiBUaGUgYXNzZW1ibHkgY29kZSB1c2luZyB0aG9zZSBvZmZzZXRzIGhhcyB0byBpbmNsdWRlIGl0IGV4cGxpY2l0bHkuCi0gKi8KLS8qICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4gKi8KLQotLyogVGhlc2UgYXJlIGZvciBwdF9yZWdzLiAqLwotI2RlZmluZSBQVF9QU1IgICAgMHgwCi0jZGVmaW5lIFBUX1BDICAgICAweDQKLSNkZWZpbmUgUFRfTlBDICAgIDB4OAotI2RlZmluZSBQVF9ZICAgICAgMHhjCi0jZGVmaW5lIFBUX0cwICAgICAweDEwCi0jZGVmaW5lIFBUX1dJTSAgICBQVF9HMAotI2RlZmluZSBQVF9HMSAgICAgMHgxNAotI2RlZmluZSBQVF9HMiAgICAgMHgxOAotI2RlZmluZSBQVF9HMyAgICAgMHgxYwotI2RlZmluZSBQVF9HNCAgICAgMHgyMAotI2RlZmluZSBQVF9HNSAgICAgMHgyNAotI2RlZmluZSBQVF9HNiAgICAgMHgyOAotI2RlZmluZSBQVF9HNyAgICAgMHgyYwotI2RlZmluZSBQVF9JMCAgICAgMHgzMAotI2RlZmluZSBQVF9JMSAgICAgMHgzNAotI2RlZmluZSBQVF9JMiAgICAgMHgzOAotI2RlZmluZSBQVF9JMyAgICAgMHgzYwotI2RlZmluZSBQVF9JNCAgICAgMHg0MAotI2RlZmluZSBQVF9JNSAgICAgMHg0NAotI2RlZmluZSBQVF9JNiAgICAgMHg0OAotI2RlZmluZSBQVF9GUCAgICAgUFRfSTYKLSNkZWZpbmUgUFRfSTcgICAgIDB4NGMKLQotLyogUmVnX3dpbmRvdyBvZmZzZXRzICovCi0jZGVmaW5lIFJXX0wwICAgICAweDAwCi0jZGVmaW5lIFJXX0wxICAgICAweDA0Ci0jZGVmaW5lIFJXX0wyICAgICAweDA4Ci0jZGVmaW5lIFJXX0wzICAgICAweDBjCi0jZGVmaW5lIFJXX0w0ICAgICAweDEwCi0jZGVmaW5lIFJXX0w1ICAgICAweDE0Ci0jZGVmaW5lIFJXX0w2ICAgICAweDE4Ci0jZGVmaW5lIFJXX0w3ICAgICAweDFjCi0jZGVmaW5lIFJXX0kwICAgICAweDIwCi0jZGVmaW5lIFJXX0kxICAgICAweDI0Ci0jZGVmaW5lIFJXX0kyICAgICAweDI4Ci0jZGVmaW5lIFJXX0kzICAgICAweDJjCi0jZGVmaW5lIFJXX0k0ICAgICAweDMwCi0jZGVmaW5lIFJXX0k1ICAgICAweDM0Ci0jZGVmaW5lIFJXX0k2ICAgICAweDM4Ci0jZGVmaW5lIFJXX0k3ICAgICAweDNjCi0KLS8qIFN0YWNrX2ZyYW1lIG9mZnNldHMgKi8KLSNkZWZpbmUgU0ZfTDAgICAgIDB4MDAKLSNkZWZpbmUgU0ZfTDEgICAgIDB4MDQKLSNkZWZpbmUgU0ZfTDIgICAgIDB4MDgKLSNkZWZpbmUgU0ZfTDMgICAgIDB4MGMKLSNkZWZpbmUgU0ZfTDQgICAgIDB4MTAKLSNkZWZpbmUgU0ZfTDUgICAgIDB4MTQKLSNkZWZpbmUgU0ZfTDYgICAgIDB4MTgKLSNkZWZpbmUgU0ZfTDcgICAgIDB4MWMKLSNkZWZpbmUgU0ZfSTAgICAgIDB4MjAKLSNkZWZpbmUgU0ZfSTEgICAgIDB4MjQKLSNkZWZpbmUgU0ZfSTIgICAgIDB4MjgKLSNkZWZpbmUgU0ZfSTMgICAgIDB4MmMKLSNkZWZpbmUgU0ZfSTQgICAgIDB4MzAKLSNkZWZpbmUgU0ZfSTUgICAgIDB4MzQKLSNkZWZpbmUgU0ZfRlAgICAgIDB4MzgKLSNkZWZpbmUgU0ZfUEMgICAgIDB4M2MKLSNkZWZpbmUgU0ZfUkVUUCAgIDB4NDAKLSNkZWZpbmUgU0ZfWEFSRzAgIDB4NDQKLSNkZWZpbmUgU0ZfWEFSRzEgIDB4NDgKLSNkZWZpbmUgU0ZfWEFSRzIgIDB4NGMKLSNkZWZpbmUgU0ZfWEFSRzMgIDB4NTAKLSNkZWZpbmUgU0ZfWEFSRzQgIDB4NTQKLSNkZWZpbmUgU0ZfWEFSRzUgIDB4NTgKLSNkZWZpbmUgU0ZfWFhBUkcgIDB4NWMKLQotLyogU3R1ZmYgZm9yIHRoZSBwdHJhY2Ugc3lzdGVtIGNhbGwgKi8KLSNkZWZpbmUgUFRSQUNFX1NQQVJDX0RFVEFDSCAgICAgICAxMQotI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKLSNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAotI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1Ci0jZGVmaW5lIFBUUkFDRV9SRUFEREFUQSAgICAgICAgICAgMTYKLSNkZWZpbmUgUFRSQUNFX1dSSVRFREFUQSAgICAgICAgICAxNwotI2RlZmluZSBQVFJBQ0VfUkVBRFRFWFQgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBUUkFDRV9XUklURVRFWFQgICAgICAgICAgMTkKLSNkZWZpbmUgUFRSQUNFX0dFVEZQQVJFR1MgICAgICAgICAyMAotI2RlZmluZSBQVFJBQ0VfU0VURlBBUkVHUyAgICAgICAgIDIxCi0KLSNlbmRpZiAvKiAhKF9TUEFSQ19QVFJBQ0VfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3B0cmFjZV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcHRyYWNlXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwMWNjNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3B0cmFjZV8zMi5oCkBAIC0wLDAgKzEsMTc1IEBACisjaWZuZGVmIF9TUEFSQ19QVFJBQ0VfSAorI2RlZmluZSBfU1BBUkNfUFRSQUNFX0gKKworI2luY2x1ZGUgPGFzbS9wc3IuaD4KKworLyogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKKyAqIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsIGFuZCBiYXNpY2FsbHkgYWxsIHRyYXBzLgorICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcHRfcmVncyB7CisJdW5zaWduZWQgbG9uZyBwc3I7CisJdW5zaWduZWQgbG9uZyBwYzsKKwl1bnNpZ25lZCBsb25nIG5wYzsKKwl1bnNpZ25lZCBsb25nIHk7CisJdW5zaWduZWQgbG9uZyB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KK307CisKKyNkZWZpbmUgVVJFR19HMCAgICAgICAgMAorI2RlZmluZSBVUkVHX0cxICAgICAgICAxCisjZGVmaW5lIFVSRUdfRzIgICAgICAgIDIKKyNkZWZpbmUgVVJFR19HMyAgICAgICAgMworI2RlZmluZSBVUkVHX0c0ICAgICAgICA0CisjZGVmaW5lIFVSRUdfRzUgICAgICAgIDUKKyNkZWZpbmUgVVJFR19HNiAgICAgICAgNgorI2RlZmluZSBVUkVHX0c3ICAgICAgICA3CisjZGVmaW5lIFVSRUdfSTAgICAgICAgIDgKKyNkZWZpbmUgVVJFR19JMSAgICAgICAgOQorI2RlZmluZSBVUkVHX0kyICAgICAgICAxMAorI2RlZmluZSBVUkVHX0kzICAgICAgICAxMQorI2RlZmluZSBVUkVHX0k0ICAgICAgICAxMgorI2RlZmluZSBVUkVHX0k1ICAgICAgICAxMworI2RlZmluZSBVUkVHX0k2ICAgICAgICAxNAorI2RlZmluZSBVUkVHX0k3ICAgICAgICAxNQorI2RlZmluZSBVUkVHX1dJTSAgICAgICBVUkVHX0cwCisjZGVmaW5lIFVSRUdfRkFERFIgICAgIFVSRUdfRzAKKyNkZWZpbmUgVVJFR19GUCAgICAgICAgVVJFR19JNgorI2RlZmluZSBVUkVHX1JFVFBDICAgICBVUkVHX0k3CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwdF9yZWdzX2lzX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT5wc3IgJiBQU1JfU1lTQ0FMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwdF9yZWdzX2NsZWFyX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT5wc3IgJj0gflBTUl9TWVNDQUxMKTsKK30KKworLyogQSByZWdpc3RlciB3aW5kb3cgKi8KK3N0cnVjdCByZWdfd2luZG93IHsKKwl1bnNpZ25lZCBsb25nIGxvY2Fsc1s4XTsKKwl1bnNpZ25lZCBsb25nIGluc1s4XTsKK307CisKKy8qIEEgU3BhcmMgc3RhY2sgZnJhbWUgKi8KK3N0cnVjdCBzcGFyY19zdGFja2YgeworCXVuc2lnbmVkIGxvbmcgbG9jYWxzWzhdOworICAgICAgICB1bnNpZ25lZCBsb25nIGluc1s2XTsKKwlzdHJ1Y3Qgc3BhcmNfc3RhY2tmICpmcDsKKwl1bnNpZ25lZCBsb25nIGNhbGxlcnNfcGM7CisJY2hhciAqc3RydWN0cHRyOworCXVuc2lnbmVkIGxvbmcgeGFyZ3NbNl07CisJdW5zaWduZWQgbG9uZyB4eGFyZ3NbMV07Cit9OworCisjZGVmaW5lIFRSQUNFUkVHX1NaICAgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKQorI2RlZmluZSBTVEFDS0ZSQU1FX1NaIHNpemVvZihzdHJ1Y3Qgc3BhcmNfc3RhY2tmKQorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoISgocmVncyktPnBzciAmIFBTUl9QUykpCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCit1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYKKworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCisvKiBGb3IgYXNzZW1ibHkgY29kZS4gKi8KKyNkZWZpbmUgVFJBQ0VSRUdfU1ogICAgICAgMHg1MAorI2RlZmluZSBTVEFDS0ZSQU1FX1NaICAgICAweDYwCisjZW5kaWYKKworLyoKKyAqIFRoZSBhc20tb2Zmc2V0cy5oIGlzIGEgZ2VuZXJhdGVkIGZpbGUsIHNvIHdlIGNhbm5vdCBpbmNsdWRlIGl0LgorICogSXQgbWF5IGJlIE9LIGZvciBnbGliYyBoZWFkZXJzLCBidXQgaXQncyB1dHRlcmx5IHBvaW50bGVzcyBmb3IgQyBjb2RlLgorICogVGhlIGFzc2VtYmx5IGNvZGUgdXNpbmcgdGhvc2Ugb2Zmc2V0cyBoYXMgdG8gaW5jbHVkZSBpdCBleHBsaWNpdGx5LgorICovCisvKiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+ICovCisKKy8qIFRoZXNlIGFyZSBmb3IgcHRfcmVncy4gKi8KKyNkZWZpbmUgUFRfUFNSICAgIDB4MAorI2RlZmluZSBQVF9QQyAgICAgMHg0CisjZGVmaW5lIFBUX05QQyAgICAweDgKKyNkZWZpbmUgUFRfWSAgICAgIDB4YworI2RlZmluZSBQVF9HMCAgICAgMHgxMAorI2RlZmluZSBQVF9XSU0gICAgUFRfRzAKKyNkZWZpbmUgUFRfRzEgICAgIDB4MTQKKyNkZWZpbmUgUFRfRzIgICAgIDB4MTgKKyNkZWZpbmUgUFRfRzMgICAgIDB4MWMKKyNkZWZpbmUgUFRfRzQgICAgIDB4MjAKKyNkZWZpbmUgUFRfRzUgICAgIDB4MjQKKyNkZWZpbmUgUFRfRzYgICAgIDB4MjgKKyNkZWZpbmUgUFRfRzcgICAgIDB4MmMKKyNkZWZpbmUgUFRfSTAgICAgIDB4MzAKKyNkZWZpbmUgUFRfSTEgICAgIDB4MzQKKyNkZWZpbmUgUFRfSTIgICAgIDB4MzgKKyNkZWZpbmUgUFRfSTMgICAgIDB4M2MKKyNkZWZpbmUgUFRfSTQgICAgIDB4NDAKKyNkZWZpbmUgUFRfSTUgICAgIDB4NDQKKyNkZWZpbmUgUFRfSTYgICAgIDB4NDgKKyNkZWZpbmUgUFRfRlAgICAgIFBUX0k2CisjZGVmaW5lIFBUX0k3ICAgICAweDRjCisKKy8qIFJlZ193aW5kb3cgb2Zmc2V0cyAqLworI2RlZmluZSBSV19MMCAgICAgMHgwMAorI2RlZmluZSBSV19MMSAgICAgMHgwNAorI2RlZmluZSBSV19MMiAgICAgMHgwOAorI2RlZmluZSBSV19MMyAgICAgMHgwYworI2RlZmluZSBSV19MNCAgICAgMHgxMAorI2RlZmluZSBSV19MNSAgICAgMHgxNAorI2RlZmluZSBSV19MNiAgICAgMHgxOAorI2RlZmluZSBSV19MNyAgICAgMHgxYworI2RlZmluZSBSV19JMCAgICAgMHgyMAorI2RlZmluZSBSV19JMSAgICAgMHgyNAorI2RlZmluZSBSV19JMiAgICAgMHgyOAorI2RlZmluZSBSV19JMyAgICAgMHgyYworI2RlZmluZSBSV19JNCAgICAgMHgzMAorI2RlZmluZSBSV19JNSAgICAgMHgzNAorI2RlZmluZSBSV19JNiAgICAgMHgzOAorI2RlZmluZSBSV19JNyAgICAgMHgzYworCisvKiBTdGFja19mcmFtZSBvZmZzZXRzICovCisjZGVmaW5lIFNGX0wwICAgICAweDAwCisjZGVmaW5lIFNGX0wxICAgICAweDA0CisjZGVmaW5lIFNGX0wyICAgICAweDA4CisjZGVmaW5lIFNGX0wzICAgICAweDBjCisjZGVmaW5lIFNGX0w0ICAgICAweDEwCisjZGVmaW5lIFNGX0w1ICAgICAweDE0CisjZGVmaW5lIFNGX0w2ICAgICAweDE4CisjZGVmaW5lIFNGX0w3ICAgICAweDFjCisjZGVmaW5lIFNGX0kwICAgICAweDIwCisjZGVmaW5lIFNGX0kxICAgICAweDI0CisjZGVmaW5lIFNGX0kyICAgICAweDI4CisjZGVmaW5lIFNGX0kzICAgICAweDJjCisjZGVmaW5lIFNGX0k0ICAgICAweDMwCisjZGVmaW5lIFNGX0k1ICAgICAweDM0CisjZGVmaW5lIFNGX0ZQICAgICAweDM4CisjZGVmaW5lIFNGX1BDICAgICAweDNjCisjZGVmaW5lIFNGX1JFVFAgICAweDQwCisjZGVmaW5lIFNGX1hBUkcwICAweDQ0CisjZGVmaW5lIFNGX1hBUkcxICAweDQ4CisjZGVmaW5lIFNGX1hBUkcyICAweDRjCisjZGVmaW5lIFNGX1hBUkczICAweDUwCisjZGVmaW5lIFNGX1hBUkc0ICAweDU0CisjZGVmaW5lIFNGX1hBUkc1ICAweDU4CisjZGVmaW5lIFNGX1hYQVJHICAweDVjCisKKy8qIFN0dWZmIGZvciB0aGUgcHRyYWNlIHN5c3RlbSBjYWxsICovCisjZGVmaW5lIFBUUkFDRV9TUEFSQ19ERVRBQ0ggICAgICAgMTEKKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgICAgICAgICAgICAxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAgICAgICAgICAgIDEzCisjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgICAgICAgICAgMTQKKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAgICAgICAgICAxNQorI2RlZmluZSBQVFJBQ0VfUkVBRERBVEEgICAgICAgICAgIDE2CisjZGVmaW5lIFBUUkFDRV9XUklURURBVEEgICAgICAgICAgMTcKKyNkZWZpbmUgUFRSQUNFX1JFQURURVhUICAgICAgICAgICAxOAorI2RlZmluZSBQVFJBQ0VfV1JJVEVURVhUICAgICAgICAgIDE5CisjZGVmaW5lIFBUUkFDRV9HRVRGUEFSRUdTICAgICAgICAgMjAKKyNkZWZpbmUgUFRSQUNFX1NFVEZQQVJFR1MgICAgICAgICAyMQorCisjZW5kaWYgLyogIShfU1BBUkNfUFRSQUNFX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wdHJhY2VfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3B0cmFjZV82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODJlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wdHJhY2VfNjQuaApAQCAtMCwwICsxLDM0NiBAQAorI2lmbmRlZiBfU1BBUkM2NF9QVFJBQ0VfSAorI2RlZmluZSBfU1BBUkM2NF9QVFJBQ0VfSAorCisjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgorCisvKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQorICogc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwgYW5kIGJhc2ljYWxseSBhbGwgdHJhcHMuCisgKi8KKworLyogVGhpcyBtYWdpYyB2YWx1ZSBtdXN0IGhhdmUgdGhlIGxvdyA5IGJpdHMgY2xlYXIsCisgKiBhcyB0aGF0IGlzIHdoZXJlIHdlIGVuY29kZSB0aGUgJXR0IHZhbHVlLCBzZWUgYmVsb3cuCisgKi8KKyNkZWZpbmUgUFRfUkVHU19NQUdJQyAweDU3YWM2YzAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcHRfcmVncyB7CisJdW5zaWduZWQgbG9uZyB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KKwl1bnNpZ25lZCBsb25nIHRzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHRwYzsKKwl1bnNpZ25lZCBsb25nIHRucGM7CisJdW5zaWduZWQgaW50IHk7CisKKwkvKiBXZSBlbmNvZGUgYSBtYWdpYyBudW1iZXIsIFBUX1JFR1NfTUFHSUMsIGFsb25nCisJICogd2l0aCB0aGUgJXR0ICh0cmFwIHR5cGUpIHJlZ2lzdGVyIHZhbHVlIGF0IHRyYXAKKwkgKiBlbnRyeSB0aW1lLiAgVGhlIG1hZ2ljIG51bWJlciBhbGxvd3MgdXMgdG8gaWRlbnRpZnkKKwkgKiBhY2N1cmF0ZWx5IGEgdHJhcCBzdGFjayBmcmFtZSBpbiB0aGUgc3RhY2sKKwkgKiB1bndpbmRlciwgYW5kIHRoZSAldHQgdmFsdWUgYWxsb3dzIHVzIHRvIHRlc3QKKwkgKiB0aGluZ3MgbGlrZSAiaW4gYSBzeXN0ZW0gY2FsbCIgZXRjLiBmb3IgYW4gYXJiaXRyYXkKKwkgKiBwcm9jZXNzLgorCSAqCisJICogVGhlIFBUX1JFR1NfTUFHSUMgaXMgY2hvb3NlbiBzdWNoIHRoYXQgaXQgY2FuIGJlCisJICogbG9hZGVkIGNvbXBsZXRlbHkgdXNpbmcganVzdCBhIHNldGhpIGluc3RydWN0aW9uLgorCSAqLworCXVuc2lnbmVkIGludCBtYWdpYzsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0X3JlZ3NfdHJhcF90eXBlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5tYWdpYyAmIDB4MWZmOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcHRfcmVnc19pc19zeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAocmVncy0+dHN0YXRlICYgVFNUQVRFX1NZU0NBTEwpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcHRfcmVnc19jbGVhcl9zeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAocmVncy0+dHN0YXRlICY9IH5UU1RBVEVfU1lTQ0FMTCk7Cit9CisKK3N0cnVjdCBwdF9yZWdzMzIgeworCXVuc2lnbmVkIGludCBwc3I7CisJdW5zaWduZWQgaW50IHBjOworCXVuc2lnbmVkIGludCBucGM7CisJdW5zaWduZWQgaW50IHk7CisJdW5zaWduZWQgaW50IHVfcmVnc1sxNl07IC8qIGdsb2JhbHMgYW5kIGlucyAqLworfTsKKworI2RlZmluZSBVUkVHX0cwICAgICAgICAwCisjZGVmaW5lIFVSRUdfRzEgICAgICAgIDEKKyNkZWZpbmUgVVJFR19HMiAgICAgICAgMgorI2RlZmluZSBVUkVHX0czICAgICAgICAzCisjZGVmaW5lIFVSRUdfRzQgICAgICAgIDQKKyNkZWZpbmUgVVJFR19HNSAgICAgICAgNQorI2RlZmluZSBVUkVHX0c2ICAgICAgICA2CisjZGVmaW5lIFVSRUdfRzcgICAgICAgIDcKKyNkZWZpbmUgVVJFR19JMCAgICAgICAgOAorI2RlZmluZSBVUkVHX0kxICAgICAgICA5CisjZGVmaW5lIFVSRUdfSTIgICAgICAgIDEwCisjZGVmaW5lIFVSRUdfSTMgICAgICAgIDExCisjZGVmaW5lIFVSRUdfSTQgICAgICAgIDEyCisjZGVmaW5lIFVSRUdfSTUgICAgICAgIDEzCisjZGVmaW5lIFVSRUdfSTYgICAgICAgIDE0CisjZGVmaW5lIFVSRUdfSTcgICAgICAgIDE1CisjZGVmaW5lIFVSRUdfRlAgICAgICAgIFVSRUdfSTYKKyNkZWZpbmUgVVJFR19SRVRQQyAgICAgVVJFR19JNworCisvKiBBIFY5IHJlZ2lzdGVyIHdpbmRvdyAqLworc3RydWN0IHJlZ193aW5kb3cgeworCXVuc2lnbmVkIGxvbmcgbG9jYWxzWzhdOworCXVuc2lnbmVkIGxvbmcgaW5zWzhdOworfTsKKworLyogQSAzMi1iaXQgcmVnaXN0ZXIgd2luZG93LiAqLworc3RydWN0IHJlZ193aW5kb3czMiB7CisJdW5zaWduZWQgaW50IGxvY2Fsc1s4XTsKKwl1bnNpZ25lZCBpbnQgaW5zWzhdOworfTsKKworLyogQSBWOSBTcGFyYyBzdGFjayBmcmFtZSAqLworc3RydWN0IHNwYXJjX3N0YWNrZiB7CisJdW5zaWduZWQgbG9uZyBsb2NhbHNbOF07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5zWzZdOworCXN0cnVjdCBzcGFyY19zdGFja2YgKmZwOworCXVuc2lnbmVkIGxvbmcgY2FsbGVyc19wYzsKKwljaGFyICpzdHJ1Y3RwdHI7CisJdW5zaWduZWQgbG9uZyB4YXJnc1s2XTsKKwl1bnNpZ25lZCBsb25nIHh4YXJnc1sxXTsKK307CisKKy8qIEEgMzItYml0IFNwYXJjIHN0YWNrIGZyYW1lICovCitzdHJ1Y3Qgc3BhcmNfc3RhY2tmMzIgeworCXVuc2lnbmVkIGludCBsb2NhbHNbOF07CisgICAgICAgIHVuc2lnbmVkIGludCBpbnNbNl07CisJdW5zaWduZWQgaW50IGZwOworCXVuc2lnbmVkIGludCBjYWxsZXJzX3BjOworCXVuc2lnbmVkIGludCBzdHJ1Y3RwdHI7CisJdW5zaWduZWQgaW50IHhhcmdzWzZdOworCXVuc2lnbmVkIGludCB4eGFyZ3NbMV07Cit9OworCitzdHJ1Y3Qgc3BhcmNfdHJhcGYgeworCXVuc2lnbmVkIGxvbmcgbG9jYWxzWzhdOworCXVuc2lnbmVkIGxvbmcgaW5zWzhdOworCXVuc2lnbmVkIGxvbmcgX3VudXNlZDsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKK307CisKKyNkZWZpbmUgVFJBQ0VSRUdfU1oJc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKQorI2RlZmluZSBTVEFDS0ZSQU1FX1NaCXNpemVvZihzdHJ1Y3Qgc3BhcmNfc3RhY2tmKQorCisjZGVmaW5lIFRSQUNFUkVHMzJfU1oJc2l6ZW9mKHN0cnVjdCBwdF9yZWdzMzIpCisjZGVmaW5lIFNUQUNLRlJBTUUzMl9TWglzaXplb2Yoc3RydWN0IHNwYXJjX3N0YWNrZjMyKQorCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgZ2xvYmFsX3JlZ19zbmFwc2hvdCB7CisJdW5zaWduZWQgbG9uZwkJdHN0YXRlOworCXVuc2lnbmVkIGxvbmcJCXRwYzsKKwl1bnNpZ25lZCBsb25nCQl0bnBjOworCXVuc2lnbmVkIGxvbmcJCW83OworCXVuc2lnbmVkIGxvbmcJCWk3OworCXN0cnVjdCB0aHJlYWRfaW5mbwkqdGhyZWFkOworCXVuc2lnbmVkIGxvbmcJCXBhZDE7CisJdW5zaWduZWQgbG9uZwkJcGFkMjsKK307CisKKyNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19QVFJBQ0UKKworI2RlZmluZSBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCkJICAgIFwKK2RvIHsJY3VycmVudF90aHJlYWRfaW5mbygpLT5zeXNjYWxsX25vZXJyb3IgPSAxOyBcCit9IHdoaWxlICgwKQorI2RlZmluZSB1c2VyX21vZGUocmVncykgKCEoKHJlZ3MpLT50c3RhdGUgJiBUU1RBVEVfUFJJVikpCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+dHBjKQorI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKSAoKHJlZ3MpLT51X3JlZ3NbVVJFR19JMF0pCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqKTsKKyNlbHNlCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorI2VuZGlmCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKyNlbmRpZgorCisjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KKy8qIEZvciBhc3NlbWJseSBjb2RlLiAqLworI2RlZmluZSBUUkFDRVJFR19TWgkJMHhhMAorI2RlZmluZSBTVEFDS0ZSQU1FX1NaCQkweGMwCisKKyNkZWZpbmUgVFJBQ0VSRUczMl9TWgkJMHg1MAorI2RlZmluZSBTVEFDS0ZSQU1FMzJfU1oJCTB4NjAKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTVEFDS19CSUFTCQkyMDQ3CisjZW5kaWYKKworLyogVGhlc2UgYXJlIGZvciBwdF9yZWdzLiAqLworI2RlZmluZSBQVF9WOV9HMCAgICAgMHgwMAorI2RlZmluZSBQVF9WOV9HMSAgICAgMHgwOAorI2RlZmluZSBQVF9WOV9HMiAgICAgMHgxMAorI2RlZmluZSBQVF9WOV9HMyAgICAgMHgxOAorI2RlZmluZSBQVF9WOV9HNCAgICAgMHgyMAorI2RlZmluZSBQVF9WOV9HNSAgICAgMHgyOAorI2RlZmluZSBQVF9WOV9HNiAgICAgMHgzMAorI2RlZmluZSBQVF9WOV9HNyAgICAgMHgzOAorI2RlZmluZSBQVF9WOV9JMCAgICAgMHg0MAorI2RlZmluZSBQVF9WOV9JMSAgICAgMHg0OAorI2RlZmluZSBQVF9WOV9JMiAgICAgMHg1MAorI2RlZmluZSBQVF9WOV9JMyAgICAgMHg1OAorI2RlZmluZSBQVF9WOV9JNCAgICAgMHg2MAorI2RlZmluZSBQVF9WOV9JNSAgICAgMHg2OAorI2RlZmluZSBQVF9WOV9JNiAgICAgMHg3MAorI2RlZmluZSBQVF9WOV9GUCAgICAgUFRfVjlfSTYKKyNkZWZpbmUgUFRfVjlfSTcgICAgIDB4NzgKKyNkZWZpbmUgUFRfVjlfVFNUQVRFIDB4ODAKKyNkZWZpbmUgUFRfVjlfVFBDICAgIDB4ODgKKyNkZWZpbmUgUFRfVjlfVE5QQyAgIDB4OTAKKyNkZWZpbmUgUFRfVjlfWSAgICAgIDB4OTgKKyNkZWZpbmUgUFRfVjlfTUFHSUMgIDB4OWMKKyNkZWZpbmUgUFRfVFNUQVRFCVBUX1Y5X1RTVEFURQorI2RlZmluZSBQVF9UUEMJCVBUX1Y5X1RQQworI2RlZmluZSBQVF9UTlBDCQlQVF9WOV9UTlBDCisKKy8qIFRoZXNlIGZvciBwdF9yZWdzMzIuICovCisjZGVmaW5lIFBUX1BTUiAgICAweDAKKyNkZWZpbmUgUFRfUEMgICAgIDB4NAorI2RlZmluZSBQVF9OUEMgICAgMHg4CisjZGVmaW5lIFBUX1kgICAgICAweGMKKyNkZWZpbmUgUFRfRzAgICAgIDB4MTAKKyNkZWZpbmUgUFRfV0lNICAgIFBUX0cwCisjZGVmaW5lIFBUX0cxICAgICAweDE0CisjZGVmaW5lIFBUX0cyICAgICAweDE4CisjZGVmaW5lIFBUX0czICAgICAweDFjCisjZGVmaW5lIFBUX0c0ICAgICAweDIwCisjZGVmaW5lIFBUX0c1ICAgICAweDI0CisjZGVmaW5lIFBUX0c2ICAgICAweDI4CisjZGVmaW5lIFBUX0c3ICAgICAweDJjCisjZGVmaW5lIFBUX0kwICAgICAweDMwCisjZGVmaW5lIFBUX0kxICAgICAweDM0CisjZGVmaW5lIFBUX0kyICAgICAweDM4CisjZGVmaW5lIFBUX0kzICAgICAweDNjCisjZGVmaW5lIFBUX0k0ICAgICAweDQwCisjZGVmaW5lIFBUX0k1ICAgICAweDQ0CisjZGVmaW5lIFBUX0k2ICAgICAweDQ4CisjZGVmaW5lIFBUX0ZQICAgICBQVF9JNgorI2RlZmluZSBQVF9JNyAgICAgMHg0YworCisvKiBSZWdfd2luZG93IG9mZnNldHMgKi8KKyNkZWZpbmUgUldfVjlfTDAgICAgIDB4MDAKKyNkZWZpbmUgUldfVjlfTDEgICAgIDB4MDgKKyNkZWZpbmUgUldfVjlfTDIgICAgIDB4MTAKKyNkZWZpbmUgUldfVjlfTDMgICAgIDB4MTgKKyNkZWZpbmUgUldfVjlfTDQgICAgIDB4MjAKKyNkZWZpbmUgUldfVjlfTDUgICAgIDB4MjgKKyNkZWZpbmUgUldfVjlfTDYgICAgIDB4MzAKKyNkZWZpbmUgUldfVjlfTDcgICAgIDB4MzgKKyNkZWZpbmUgUldfVjlfSTAgICAgIDB4NDAKKyNkZWZpbmUgUldfVjlfSTEgICAgIDB4NDgKKyNkZWZpbmUgUldfVjlfSTIgICAgIDB4NTAKKyNkZWZpbmUgUldfVjlfSTMgICAgIDB4NTgKKyNkZWZpbmUgUldfVjlfSTQgICAgIDB4NjAKKyNkZWZpbmUgUldfVjlfSTUgICAgIDB4NjgKKyNkZWZpbmUgUldfVjlfSTYgICAgIDB4NzAKKyNkZWZpbmUgUldfVjlfSTcgICAgIDB4NzgKKworI2RlZmluZSBSV19MMCAgICAgMHgwMAorI2RlZmluZSBSV19MMSAgICAgMHgwNAorI2RlZmluZSBSV19MMiAgICAgMHgwOAorI2RlZmluZSBSV19MMyAgICAgMHgwYworI2RlZmluZSBSV19MNCAgICAgMHgxMAorI2RlZmluZSBSV19MNSAgICAgMHgxNAorI2RlZmluZSBSV19MNiAgICAgMHgxOAorI2RlZmluZSBSV19MNyAgICAgMHgxYworI2RlZmluZSBSV19JMCAgICAgMHgyMAorI2RlZmluZSBSV19JMSAgICAgMHgyNAorI2RlZmluZSBSV19JMiAgICAgMHgyOAorI2RlZmluZSBSV19JMyAgICAgMHgyYworI2RlZmluZSBSV19JNCAgICAgMHgzMAorI2RlZmluZSBSV19JNSAgICAgMHgzNAorI2RlZmluZSBSV19JNiAgICAgMHgzOAorI2RlZmluZSBSV19JNyAgICAgMHgzYworCisvKiBTdGFja19mcmFtZSBvZmZzZXRzICovCisjZGVmaW5lIFNGX1Y5X0wwICAgICAweDAwCisjZGVmaW5lIFNGX1Y5X0wxICAgICAweDA4CisjZGVmaW5lIFNGX1Y5X0wyICAgICAweDEwCisjZGVmaW5lIFNGX1Y5X0wzICAgICAweDE4CisjZGVmaW5lIFNGX1Y5X0w0ICAgICAweDIwCisjZGVmaW5lIFNGX1Y5X0w1ICAgICAweDI4CisjZGVmaW5lIFNGX1Y5X0w2ICAgICAweDMwCisjZGVmaW5lIFNGX1Y5X0w3ICAgICAweDM4CisjZGVmaW5lIFNGX1Y5X0kwICAgICAweDQwCisjZGVmaW5lIFNGX1Y5X0kxICAgICAweDQ4CisjZGVmaW5lIFNGX1Y5X0kyICAgICAweDUwCisjZGVmaW5lIFNGX1Y5X0kzICAgICAweDU4CisjZGVmaW5lIFNGX1Y5X0k0ICAgICAweDYwCisjZGVmaW5lIFNGX1Y5X0k1ICAgICAweDY4CisjZGVmaW5lIFNGX1Y5X0ZQICAgICAweDcwCisjZGVmaW5lIFNGX1Y5X1BDICAgICAweDc4CisjZGVmaW5lIFNGX1Y5X1JFVFAgICAweDgwCisjZGVmaW5lIFNGX1Y5X1hBUkcwICAweDg4CisjZGVmaW5lIFNGX1Y5X1hBUkcxICAweDkwCisjZGVmaW5lIFNGX1Y5X1hBUkcyICAweDk4CisjZGVmaW5lIFNGX1Y5X1hBUkczICAweGEwCisjZGVmaW5lIFNGX1Y5X1hBUkc0ICAweGE4CisjZGVmaW5lIFNGX1Y5X1hBUkc1ICAweGIwCisjZGVmaW5lIFNGX1Y5X1hYQVJHICAweGI4CisKKyNkZWZpbmUgU0ZfTDAgICAgIDB4MDAKKyNkZWZpbmUgU0ZfTDEgICAgIDB4MDQKKyNkZWZpbmUgU0ZfTDIgICAgIDB4MDgKKyNkZWZpbmUgU0ZfTDMgICAgIDB4MGMKKyNkZWZpbmUgU0ZfTDQgICAgIDB4MTAKKyNkZWZpbmUgU0ZfTDUgICAgIDB4MTQKKyNkZWZpbmUgU0ZfTDYgICAgIDB4MTgKKyNkZWZpbmUgU0ZfTDcgICAgIDB4MWMKKyNkZWZpbmUgU0ZfSTAgICAgIDB4MjAKKyNkZWZpbmUgU0ZfSTEgICAgIDB4MjQKKyNkZWZpbmUgU0ZfSTIgICAgIDB4MjgKKyNkZWZpbmUgU0ZfSTMgICAgIDB4MmMKKyNkZWZpbmUgU0ZfSTQgICAgIDB4MzAKKyNkZWZpbmUgU0ZfSTUgICAgIDB4MzQKKyNkZWZpbmUgU0ZfRlAgICAgIDB4MzgKKyNkZWZpbmUgU0ZfUEMgICAgIDB4M2MKKyNkZWZpbmUgU0ZfUkVUUCAgIDB4NDAKKyNkZWZpbmUgU0ZfWEFSRzAgIDB4NDQKKyNkZWZpbmUgU0ZfWEFSRzEgIDB4NDgKKyNkZWZpbmUgU0ZfWEFSRzIgIDB4NGMKKyNkZWZpbmUgU0ZfWEFSRzMgIDB4NTAKKyNkZWZpbmUgU0ZfWEFSRzQgIDB4NTQKKyNkZWZpbmUgU0ZfWEFSRzUgIDB4NTgKKyNkZWZpbmUgU0ZfWFhBUkcgIDB4NWMKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogZ2xvYmFsX3JlZ19zbmFwc2hvdCBvZmZzZXRzICovCisjZGVmaW5lIEdSX1NOQVBfVFNUQVRFCTB4MDAKKyNkZWZpbmUgR1JfU05BUF9UUEMJMHgwOAorI2RlZmluZSBHUl9TTkFQX1ROUEMJMHgxMAorI2RlZmluZSBHUl9TTkFQX083CTB4MTgKKyNkZWZpbmUgR1JfU05BUF9JNwkweDIwCisjZGVmaW5lIEdSX1NOQVBfVEhSRUFECTB4MjgKKyNkZWZpbmUgR1JfU05BUF9QQUQxCTB4MzAKKyNkZWZpbmUgR1JfU05BUF9QQUQyCTB4MzgKKworI2VuZGlmICAvKiAgX19LRVJORUxfXyAgKi8KKworLyogU3R1ZmYgZm9yIHRoZSBwdHJhY2Ugc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUgUFRSQUNFX1NQQVJDX0RFVEFDSCAgICAgICAxMQorI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAorI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1CisjZGVmaW5lIFBUUkFDRV9SRUFEREFUQSAgICAgICAgICAgMTYKKyNkZWZpbmUgUFRSQUNFX1dSSVRFREFUQSAgICAgICAgICAxNworI2RlZmluZSBQVFJBQ0VfUkVBRFRFWFQgICAgICAgICAgIDE4CisjZGVmaW5lIFBUUkFDRV9XUklURVRFWFQgICAgICAgICAgMTkKKyNkZWZpbmUgUFRSQUNFX0dFVEZQQVJFR1MgICAgICAgICAyMAorI2RlZmluZSBQVFJBQ0VfU0VURlBBUkVHUyAgICAgICAgIDIxCisKKy8qIFRoZXJlIGFyZSBmb3IgZGVidWdnaW5nIDY0LWJpdCBwcm9jZXNzZXMsIGVpdGhlciBmcm9tIGEgMzIgb3IgNjQgYml0CisgKiBwYXJlbnQuICBUaHVzIHRoZWlyIGNvbXBsZW1lbnRzIGFyZSBmb3IgZGVidWdnaW5nIDMyLWJpdCBwcm9jZXNzZXMgb25seS4KKyAqLworCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTNjQJICAyMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUzY0CSAgMjMKKy8qIFBUUkFDRV9TWVNDQUxMIGlzIDI0ICovCisjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1M2NAkgIDI1CisjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1M2NAkgIDI2CisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1BUUkFDRV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcmVib290LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9yZWJvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjNmNDNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcmVib290LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9TUEFSQzY0X1JFQk9PVF9ICisjZGVmaW5lIF9TUEFSQzY0X1JFQk9PVF9ICisKK2V4dGVybiB2b2lkIG1hY2hpbmVfYWx0X3Bvd2VyX29mZih2b2lkKTsKKworI2VuZGlmIC8qIF9TUEFSQzY0X1JFQk9PVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9yZWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3JlZy5oCmluZGV4IGVhMGE3ZTUuLmNiMzRiMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3JlZy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3JlZy5oCkBAIC0xLDc5ICsxLDggQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1zcGFyYy9yZWcuaAotICogTGF5b3V0IG9mIHRoZSByZWdpc3RlcnMgYXMgZXhwZWN0ZWQgYnkgZ2RiIG9uIHRoZSBTcGFyYwotICogd2Ugc2hvdWxkIHJlcGxhY2UgdGhlIHVzZXIuaCBkZWZpbml0aW9ucyB3aXRoIHRob3NlIGluCi0gKiB0aGlzIGZpbGUsIHdlIGRvbid0IGV2ZW4gdXNlIHRoZSBvdGhlciAKLSAqIC1taWd1ZWwKLSAqCi0gKiBUaGUgbmFtZXMgb2YgdGhlIHN0cnVjdHVyZXMsIGNvbnN0YW50cyBhbmQgYWxpYXNlcyBpbiB0aGlzIGZpbGUKLSAqIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIHN1bm9zIG9uZXMsIHNvbWUgcHJvZ3JhbXMgcmVseSBvbiB0aGVzZQotICogbmFtZXMgKGdkYiBmb3IgZXhhbXBsZSkuCi0gKgotICovCi0KLSNpZm5kZWYgX19TUEFSQ19SRUdfSAotI2RlZmluZSBfX1NQQVJDX1JFR19ICi0KLXN0cnVjdCByZWdzIHsKLQlpbnQgICAgIHJfcHNyOwotI2RlZmluZSByX3BzIHJfcHNyCi0gICAgICAgIGludCAgICAgcl9wYzsgCi0gICAgICAgIGludCAgICAgcl9ucGM7Ci0gICAgICAgIGludCAgICAgcl95OyAgCi0gICAgICAgIGludCAgICAgcl9nMTsgCi0gICAgICAgIGludCAgICAgcl9nMjsKLSAgICAgICAgaW50ICAgICByX2czOwotICAgICAgICBpbnQgICAgIHJfZzQ7Ci0gICAgICAgIGludCAgICAgcl9nNTsKLSAgICAgICAgaW50ICAgICByX2c2OwotICAgICAgICBpbnQgICAgIHJfZzc7Ci0gICAgICAgIGludCAgICAgcl9vMDsKLSAgICAgICAgaW50ICAgICByX28xOwotICAgICAgICBpbnQgICAgIHJfbzI7Ci0gICAgICAgIGludCAgICAgcl9vMzsKLSAgICAgICAgaW50ICAgICByX280OwotICAgICAgICBpbnQgICAgIHJfbzU7Ci0gICAgICAgIGludCAgICAgcl9vNjsKLSAgICAgICAgaW50ICAgICByX283OwotfTsKLQotc3RydWN0IGZwcSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgKmFkZHI7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgaW5zdHI7Ci19OwotCi1zdHJ1Y3QgIGZxIHsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgIGRvdWJsZSAgd2hvbGU7Ci0gICAgICAgICAgICAgICAgc3RydWN0ICBmcHEgZnBxOwotICAgICAgICB9IEZRdTsKLX07Ci0KLSNkZWZpbmUgRlBVX1JFR1NfVFlQRSB1bnNpZ25lZCBpbnQKLSNkZWZpbmUgRlBVX0ZTUl9UWVBFIHVuc2lnbmVkCi0KLXN0cnVjdCBmcF9zdGF0dXMgewotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgRlBVX1JFR1NfVFlQRSBGcHVfcmVnc1szMl07Ci0gICAgICAgICAgICAgICAgZG91YmxlICBGcHVfZHJlZ3NbMTZdOwotICAgICAgICB9IGZwdV9mcjsKLSAgICAgICAgRlBVX0ZTUl9UWVBFIEZwdV9mc3I7Ci0gICAgICAgIHVuc2lnbmVkIEZwdV9mbGFnczsKLSAgICAgICAgdW5zaWduZWQgRnB1X2V4dHJhOwotICAgICAgICB1bnNpZ25lZCBGcHVfcWNudDsKLSAgICAgICAgc3RydWN0IGZxIEZwdV9xWzE2XTsKLX07Ci0KLSNkZWZpbmUgZnB1X3JlZ3MgIGZfZnBzdGF0dXMuZnB1X2ZyLkZwdV9yZWdzCi0jZGVmaW5lIGZwdV9kcmVncyBmX2Zwc3RhdHVzLmZwdV9mci5GcHVfZHJlZ3MKLSNkZWZpbmUgZnB1X2ZzciAgIGZfZnBzdGF0dXMuRnB1X2ZzcgotI2RlZmluZSBmcHVfZmxhZ3MgZl9mcHN0YXR1cy5GcHVfZmxhZ3MKLSNkZWZpbmUgZnB1X2V4dHJhIGZfZnBzdGF0dXMuRnB1X2V4dHJhCi0jZGVmaW5lIGZwdV9xICAgICBmX2Zwc3RhdHVzLkZwdV9xCi0jZGVmaW5lIGZwdV9xY250ICBmX2Zwc3RhdHVzLkZwdV9xY250Ci0KLXN0cnVjdCBmcHUgewotICAgICAgICBzdHJ1Y3QgZnBfc3RhdHVzIGZfZnBzdGF0dXM7Ci19OwotCi0jZW5kaWYgLyogX19TUEFSQ19SRUdfSCAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfUkVHX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1JFR19ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvcmVnXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9yZWdfMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9yZWdfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3JlZ18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZmVjZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9yZWdfMzIuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tc3BhcmMvcmVnLmgKKyAqIExheW91dCBvZiB0aGUgcmVnaXN0ZXJzIGFzIGV4cGVjdGVkIGJ5IGdkYiBvbiB0aGUgU3BhcmMKKyAqIHdlIHNob3VsZCByZXBsYWNlIHRoZSB1c2VyLmggZGVmaW5pdGlvbnMgd2l0aCB0aG9zZSBpbgorICogdGhpcyBmaWxlLCB3ZSBkb24ndCBldmVuIHVzZSB0aGUgb3RoZXIKKyAqIC1taWd1ZWwKKyAqCisgKiBUaGUgbmFtZXMgb2YgdGhlIHN0cnVjdHVyZXMsIGNvbnN0YW50cyBhbmQgYWxpYXNlcyBpbiB0aGlzIGZpbGUKKyAqIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIHN1bm9zIG9uZXMsIHNvbWUgcHJvZ3JhbXMgcmVseSBvbiB0aGVzZQorICogbmFtZXMgKGdkYiBmb3IgZXhhbXBsZSkuCisgKgorICovCisKKyNpZm5kZWYgX19TUEFSQ19SRUdfSAorI2RlZmluZSBfX1NQQVJDX1JFR19ICisKK3N0cnVjdCByZWdzIHsKKwlpbnQgICAgIHJfcHNyOworI2RlZmluZSByX3BzIHJfcHNyCisgICAgICAgIGludCAgICAgcl9wYzsKKyAgICAgICAgaW50ICAgICByX25wYzsKKyAgICAgICAgaW50ICAgICByX3k7CisgICAgICAgIGludCAgICAgcl9nMTsKKyAgICAgICAgaW50ICAgICByX2cyOworICAgICAgICBpbnQgICAgIHJfZzM7CisgICAgICAgIGludCAgICAgcl9nNDsKKyAgICAgICAgaW50ICAgICByX2c1OworICAgICAgICBpbnQgICAgIHJfZzY7CisgICAgICAgIGludCAgICAgcl9nNzsKKyAgICAgICAgaW50ICAgICByX28wOworICAgICAgICBpbnQgICAgIHJfbzE7CisgICAgICAgIGludCAgICAgcl9vMjsKKyAgICAgICAgaW50ICAgICByX28zOworICAgICAgICBpbnQgICAgIHJfbzQ7CisgICAgICAgIGludCAgICAgcl9vNTsKKyAgICAgICAgaW50ICAgICByX282OworICAgICAgICBpbnQgICAgIHJfbzc7Cit9OworCitzdHJ1Y3QgZnBxIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAqYWRkcjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpbnN0cjsKK307CisKK3N0cnVjdCAgZnEgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgZG91YmxlICB3aG9sZTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgIGZwcSBmcHE7CisgICAgICAgIH0gRlF1OworfTsKKworI2RlZmluZSBGUFVfUkVHU19UWVBFIHVuc2lnbmVkIGludAorI2RlZmluZSBGUFVfRlNSX1RZUEUgdW5zaWduZWQKKworc3RydWN0IGZwX3N0YXR1cyB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICBGUFVfUkVHU19UWVBFIEZwdV9yZWdzWzMyXTsKKyAgICAgICAgICAgICAgICBkb3VibGUgIEZwdV9kcmVnc1sxNl07CisgICAgICAgIH0gZnB1X2ZyOworICAgICAgICBGUFVfRlNSX1RZUEUgRnB1X2ZzcjsKKyAgICAgICAgdW5zaWduZWQgRnB1X2ZsYWdzOworICAgICAgICB1bnNpZ25lZCBGcHVfZXh0cmE7CisgICAgICAgIHVuc2lnbmVkIEZwdV9xY250OworICAgICAgICBzdHJ1Y3QgZnEgRnB1X3FbMTZdOworfTsKKworI2RlZmluZSBmcHVfcmVncyAgZl9mcHN0YXR1cy5mcHVfZnIuRnB1X3JlZ3MKKyNkZWZpbmUgZnB1X2RyZWdzIGZfZnBzdGF0dXMuZnB1X2ZyLkZwdV9kcmVncworI2RlZmluZSBmcHVfZnNyICAgZl9mcHN0YXR1cy5GcHVfZnNyCisjZGVmaW5lIGZwdV9mbGFncyBmX2Zwc3RhdHVzLkZwdV9mbGFncworI2RlZmluZSBmcHVfZXh0cmEgZl9mcHN0YXR1cy5GcHVfZXh0cmEKKyNkZWZpbmUgZnB1X3EgICAgIGZfZnBzdGF0dXMuRnB1X3EKKyNkZWZpbmUgZnB1X3FjbnQgIGZfZnBzdGF0dXMuRnB1X3FjbnQKKworc3RydWN0IGZwdSB7CisgICAgICAgIHN0cnVjdCBmcF9zdGF0dXMgZl9mcHN0YXR1czsKK307CisKKyNlbmRpZiAvKiBfX1NQQVJDX1JFR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9yZWdfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3JlZ182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjRhMDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9yZWdfNjQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogbGludXgvYXNtLXNwYXJjNjQvcmVnLmgKKyAqIExheW91dCBvZiB0aGUgcmVnaXN0ZXJzIGFzIGV4cGVjdGVkIGJ5IGdkYiBvbiB0aGUgU3BhcmMKKyAqIHdlIHNob3VsZCByZXBsYWNlIHRoZSB1c2VyLmggZGVmaW5pdGlvbnMgd2l0aCB0aG9zZSBpbgorICogdGhpcyBmaWxlLCB3ZSBkb24ndCBldmVuIHVzZSB0aGUgb3RoZXIKKyAqIC1taWd1ZWwKKyAqCisgKiBUaGUgbmFtZXMgb2YgdGhlIHN0cnVjdHVyZXMsIGNvbnN0YW50cyBhbmQgYWxpYXNlcyBpbiB0aGlzIGZpbGUKKyAqIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIHN1bm9zIG9uZXMsIHNvbWUgcHJvZ3JhbXMgcmVseSBvbiB0aGVzZQorICogbmFtZXMgKGdkYiBmb3IgZXhhbXBsZSkuCisgKgorICovCisKKyNpZm5kZWYgX19TUEFSQzY0X1JFR19ICisjZGVmaW5lIF9fU1BBUkM2NF9SRUdfSAorCitzdHJ1Y3QgcmVncyB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9nMTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX2cyOworICAgICAgICB1bnNpZ25lZCBsb25nIHJfZzM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9nNDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX2c1OworICAgICAgICB1bnNpZ25lZCBsb25nIHJfZzY7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9nNzsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX28wOworICAgICAgICB1bnNpZ25lZCBsb25nIHJfbzE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9vMjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX28zOworICAgICAgICB1bnNpZ25lZCBsb25nIHJfbzQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl9vNTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByX282OworICAgICAgICB1bnNpZ25lZCBsb25nIHJfbzc7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgX19wYWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl90c3RhdGU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl90cGM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcl90bnBjOworICAgICAgICB1bnNpZ25lZCBpbnQgIHJfeTsKKyAgICAgICAgdW5zaWduZWQgaW50ICByX2ZwcnM7Cit9OworCisjZGVmaW5lIEZQVV9SRUdTX1RZUEUgdW5zaWduZWQgaW50CisjZGVmaW5lIEZQVV9GU1JfVFlQRSB1bnNpZ25lZCBsb25nCisKK3N0cnVjdCBmcF9zdGF0dXMgeworICAgICAgICB1bnNpZ25lZCBsb25nIGZwdV9mclszMl07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgRnB1X2ZzcjsKK307CisKK3N0cnVjdCBmcHUgeworCXN0cnVjdCBmcF9zdGF0dXMgZl9mcHN0YXR1czsKK307CisKKyNkZWZpbmUgZnB1X3JlZ3MgIGZfZnBzdGF0dXMuZnB1X2ZyCisjZGVmaW5lIGZwdV9mc3IgICBmX2Zwc3RhdHVzLkZwdV9mc3IKKworI2VuZGlmIC8qIF9fU1BBUkM2NF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3Jlc291cmNlLmgKaW5kZXggOTg1OTQ4YS4uZmUxNjNjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcmVzb3VyY2UuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9yZXNvdXJjZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHJlc291cmNlLmg6IFJlc291cmNlIGRlZmluaXRpb25zLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKi8KIAogI2lmbmRlZiBfU1BBUkNfUkVTT1VSQ0VfSApAQCAtMTQsMTIgKzE0LDE2IEBACiAjZGVmaW5lIFJMSU1JVF9OT0ZJTEUJCTYJLyogbWF4IG51bWJlciBvZiBvcGVuIGZpbGVzICovCiAjZGVmaW5lIFJMSU1JVF9OUFJPQwkJNwkvKiBtYXggbnVtYmVyIG9mIHByb2Nlc3NlcyAqLwogCisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKy8qIFVzZSBnZW5lcmljIHZlcnNpb24gKi8KKyNlbHNlCiAvKgogICogU3VTIHNheXMgbGltaXRzIGhhdmUgdG8gYmUgdW5zaWduZWQuCiAgKiBXZSBtYWtlIHRoaXMgdW5zaWduZWQsIGJ1dCBrZWVwIHRoZQogICogb2xkIHZhbHVlIGZvciBjb21wYXRpYmlsaXR5OgogICovCiAjZGVmaW5lIFJMSU1fSU5GSU5JVFkJCTB4N2ZmZmZmZmYKKyNlbmRpZgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcndzZW0tY29uc3QuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3J3c2VtLWNvbnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwM2M5ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3J3c2VtLWNvbnN0LmgKQEAgLTAsMCArMSwxMiBAQAorLyogcndzZW0tY29uc3QuaDogUlcgc2VtYXBob3JlIGNvdW50ZXIgY29uc3RhbnRzLiAgKi8KKyNpZm5kZWYgX1NQQVJDNjRfUldTRU1fQ09OU1RfSAorI2RlZmluZSBfU1BBUkM2NF9SV1NFTV9DT05TVF9ICisKKyNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmYKKyNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCQkweGZmZmYwMDAwCisjZGVmaW5lIFJXU0VNX0FDVElWRV9SRUFEX0JJQVMJCVJXU0VNX0FDVElWRV9CSUFTCisjZGVmaW5lIFJXU0VNX0FDVElWRV9XUklURV9CSUFTCQkoUldTRU1fV0FJVElOR19CSUFTICsgUldTRU1fQUNUSVZFX0JJQVMpCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9SV1NFTV9DT05TVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9yd3NlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcndzZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGMxMjlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcndzZW0uaApAQCAtMCwwICsxLDg0IEBACisvKgorICogcndzZW0uaDogUi9XIHNlbWFwaG9yZXMgaW1wbGVtZW50ZWQgdXNpbmcgQ0FTCisgKgorICogV3JpdHRlbiBieSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pLCAyMDAxLgorICogRGVyaXZlZCBmcm9tIGFzbS1pMzg2L3J3c2VtLmgKKyAqLworI2lmbmRlZiBfU1BBUkM2NF9SV1NFTV9ICisjZGVmaW5lIF9TUEFSQzY0X1JXU0VNX0gKKworI2lmbmRlZiBfTElOVVhfUldTRU1fSAorI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSBhc20vcndzZW0uaCBkaXJlY3RseSwgdXNlIGxpbnV4L3J3c2VtLmggaW5zdGVhZCIKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3J3c2VtLWNvbnN0Lmg+CisKK3N0cnVjdCByd3NlbV93YWl0ZXI7CisKK3N0cnVjdCByd19zZW1hcGhvcmUgeworCXNpZ25lZCBpbnQgY291bnQ7CisJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tkZXBfbWFwCWRlcF9tYXA7CisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBkZWZpbmUgX19SV1NFTV9ERVBfTUFQX0lOSVQobG9ja25hbWUpICwgLmRlcF9tYXAgPSB7IC5uYW1lID0gI2xvY2tuYW1lIH0KKyNlbHNlCisjIGRlZmluZSBfX1JXU0VNX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkKKyNlbmRpZgorCisjZGVmaW5lIF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkgXAoreyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBcCisgIF9fUldTRU1fREVQX01BUF9JTklUKG5hbWUpIH0KKworI2RlZmluZSBERUNMQVJFX1JXU0VNKG5hbWUpIFwKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIG5hbWUgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpCisKK2V4dGVybiB2b2lkIF9faW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOworCisjZGVmaW5lIGluaXRfcndzZW0oc2VtKQkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJCQkJCQkJXAorCV9faW5pdF9yd3NlbSgoc2VtKSwgI3NlbSwgJl9fa2V5KTsJCQlcCit9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBfX2Rvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIGludCBfX2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gdm9pZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBpbnQgX19kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIHZvaWQgX191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIHZvaWQgX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZV9uZXN0ZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBpbnQgc3ViY2xhc3MpCit7CisJX19kb3duX3dyaXRlKHNlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJ3c2VtX2F0b21pY191cGRhdGUoaW50IGRlbHRhLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKGRlbHRhLCAoYXRvbWljX3QgKikoJnNlbS0+Y291bnQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ3c2VtX2F0b21pY19hZGQoaW50IGRlbHRhLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJYXRvbWljX2FkZChkZWx0YSwgKGF0b21pY190ICopKCZzZW0tPmNvdW50KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJ3c2VtX2lzX2xvY2tlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJcmV0dXJuIChzZW0tPmNvdW50ICE9IDApOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX1NQQVJDNjRfUldTRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2J1cy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2J1cy5oCmluZGV4IGYxZDJmZTEuLjhmMjlhMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NidXMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zYnVzLmgKQEAgLTEsMTUzICsxLDggQEAKLS8qCi0gKiBzYnVzLmg6ICBEZWZpbmVzIGZvciB0aGUgU3VuIFNCdXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaWZuZGVmIF9TUEFSQ19TQlVTX0gKLSNkZWZpbmUgX1NQQVJDX1NCVVNfSAotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLQotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgotI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgotCi0vKiBXZSBzY2FuIHdoaWNoIGRldmljZXMgYXJlIG9uIHRoZSBTQnVzIHVzaW5nIHRoZSBQUk9NIG5vZGUgZGV2aWNlCi0gKiB0cmVlLiAgU0J1cyBkZXZpY2VzIGFyZSBkZXNjcmliZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgWW91IGNhbgotICogZWl0aGVyIGdldCBhbiBhYnNvbHV0ZSBhZGRyZXNzIGF0IHdoaWNoIHRvIGFjY2VzcyB0aGUgZGV2aWNlLCBvcgotICogeW91IGNhbiBnZXQgYSBTQnVzICdzbG90JyBudW1iZXIgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhhdCBzbG90LgotICovCi0KLS8qIFRoZSBiYXNlIGFkZHJlc3MgYXQgd2hpY2ggdG8gY2FsY3VsYXRlIGRldmljZSBPQklPIGFkZHJlc3Nlcy4gKi8KLSNkZWZpbmUgU1VOX1NCVVNfQlZBRERSICAgICAgICAweGY4MDAwMDAwCi0jZGVmaW5lIFNCVVNfT0ZGX01BU0sgICAgICAgICAgMHgwMWZmZmZmZgotCi0vKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgZGV2aWNlIGFkZHJlc3MgZnJvbSBzbG90Ci0gKiBudW1iZXJzICsgb2Zmc2V0cywgYW5kIHZpY2UgdmVyc2EuCi0gKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNidXNfZGV2YWRkcihpbnQgc2xvdG51bSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0gIHJldHVybiAodW5zaWduZWQgbG9uZykgKFNVTl9TQlVTX0JWQUREUisoKHNsb3RudW0pPDwyNSkrKG9mZnNldCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzYnVzX2Rldl9zbG90KHVuc2lnbmVkIGxvbmcgZGV2X2FkZHIpCi17Ci0gIHJldHVybiAoaW50KSAoKChkZXZfYWRkciktU1VOX1NCVVNfQlZBRERSKT4+MjUpOwotfQotCi1zdHJ1Y3Qgc2J1c19idXM7Ci0KLS8qIExpbnV4IFNCVVMgZGV2aWNlIHRhYmxlcyAqLwotc3RydWN0IHNidXNfZGV2IHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlCW9mZGV2OwotCXN0cnVjdCBzYnVzX2J1cwkJKmJ1czsKLQlzdHJ1Y3Qgc2J1c19kZXYJCSpuZXh0OwotCXN0cnVjdCBzYnVzX2RldgkJKmNoaWxkOwotCXN0cnVjdCBzYnVzX2RldgkJKnBhcmVudDsKLQlpbnQgcHJvbV9ub2RlOwkKLQljaGFyIHByb21fbmFtZVs2NF07Ci0JaW50IHNsb3Q7Ci0KLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VbUFJPTVJFR19NQVhdOwotCi0Jc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzIHJlZ19hZGRyc1tQUk9NUkVHX01BWF07Ci0JaW50IG51bV9yZWdpc3RlcnM7Ci0KLQlzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgZGV2aWNlX3Jhbmdlc1tQUk9NUkVHX01BWF07Ci0JaW50IG51bV9kZXZpY2VfcmFuZ2VzOwotCi0JdW5zaWduZWQgaW50IGlycXNbNF07Ci0JaW50IG51bV9pcnFzOwotfTsKLSNkZWZpbmUgdG9fc2J1c19kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBzYnVzX2Rldiwgb2ZkZXYuZGV2KQotCi0vKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgdGhlIFNCdXMocykgZm91bmQgb24gdGhpcyBtYWNoaW5lLiAqLwotc3RydWN0IHNidXNfYnVzIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlCW9mZGV2OwotCXN0cnVjdCBzYnVzX2RldgkJKmRldmljZXM7CS8qIExpbmsgdG8gZGV2aWNlcyBvbiB0aGlzIFNCdXMgKi8KLQlzdHJ1Y3Qgc2J1c19idXMJCSpuZXh0OwkJLyogbmV4dCBTQnVzLCBpZiBtb3JlIHRoYW4gb25lIFNCdXMgKi8KLQlpbnQJCQlwcm9tX25vZGU7CS8qIFBST00gZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhpcyBTQnVzICovCi0JY2hhcgkJCXByb21fbmFtZVs2NF07ICAvKiBVc3VhbGx5ICJzYnVzIiBvciAic2JpIiAqLwotCWludAkJCWNsb2NrX2ZyZXE7Ci0KLQlzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgc2J1c19yYW5nZXNbUFJPTVJFR19NQVhdOwotCWludCBudW1fc2J1c19yYW5nZXM7Ci0KLQlpbnQgZGV2aWQ7Ci0JaW50IGJvYXJkOwotfTsKLSNkZWZpbmUgdG9fc2J1cyhkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHNidXNfYnVzLCBvZmRldi5kZXYpCi0KLWV4dGVybiBzdHJ1Y3Qgc2J1c19idXMgKnNidXNfcm9vdDsKLQotc3RhdGljIGlubGluZSBpbnQKLXNidXNfaXNfc2xhdmUoc3RydWN0IHNidXNfZGV2ICpkZXYpCi17Ci0JLyogWFhYIEhhdmUgdG8gd3JpdGUgdGhpcyBmb3Igc3VuNGMncyAqLwotCXJldHVybiAwOwotfQotCi0vKiBEZXZpY2UgcHJvYmluZyByb3V0aW5lcyBjb3VsZCBmaW5kIHRoZXNlIGhhbmR5ICovCi0jZGVmaW5lIGZvcl9lYWNoX3NidXMoYnVzKSBcCi0gICAgICAgIGZvcigoYnVzKSA9IHNidXNfcm9vdDsgKGJ1cyk7IChidXMpPShidXMpLT5uZXh0KQotCi0jZGVmaW5lIGZvcl9lYWNoX3NidXNkZXYoZGV2aWNlLCBidXMpIFwKLSAgICAgICAgZm9yKChkZXZpY2UpID0gKGJ1cyktPmRldmljZXM7IChkZXZpY2UpOyAoZGV2aWNlKT0oZGV2aWNlKS0+bmV4dCkKLSAgICAgICAgCi0jZGVmaW5lIGZvcl9hbGxfc2J1c2RldihkZXZpY2UsIGJ1cykgXAotCWZvciAoKGJ1cykgPSBzYnVzX3Jvb3Q7IChidXMpOyAoYnVzKSA9IChidXMpLT5uZXh0KSBcCi0JCWZvciAoKGRldmljZSkgPSAoYnVzKS0+ZGV2aWNlczsgKGRldmljZSk7IChkZXZpY2UpID0gKGRldmljZSktPm5leHQpCi0KLS8qIERyaXZlciBEVk1BIGludGVyZmFjZXMuICovCi0jZGVmaW5lIHNidXNfY2FuX2RtYV82NGJpdChzZGV2KQkoMCkgLyogYWN0dWFsbHksIHNwYXJjX2NwdV9tb2RlbD09c3VuNGQgKi8KLSNkZWZpbmUgc2J1c19jYW5fYnVyc3Q2NChzZGV2KQkJKDApIC8qIGFjdHVhbGx5LCBzcGFyY19jcHVfbW9kZWw9PXN1bjRkICovCi1leHRlcm4gdm9pZCBzYnVzX3NldF9zYnVzNjQoc3RydWN0IHNidXNfZGV2ICosIGludCk7Ci1leHRlcm4gdm9pZCBzYnVzX2ZpbGxfZGV2aWNlX2lycShzdHJ1Y3Qgc2J1c19kZXYgKik7Ci0KLS8qIFRoZXNlIHlpZWxkIElPTU1VIG1hcHBpbmdzIGluIGNvbnNpc3RlbnQgbW9kZS4gKi8KLWV4dGVybiB2b2lkICpzYnVzX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHNidXNfZGV2ICosIGxvbmcsIHUzMiAqZG1hX2FkZHJwKTsKLWV4dGVybiB2b2lkIHNidXNfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBzYnVzX2RldiAqLCBsb25nLCB2b2lkICosIHUzMik7Ci12b2lkIHByb21fYWRqdXN0X3JhbmdlcyhzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgKiwgaW50LAotCQkJc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzICosIGludCk7Ci0KLSNkZWZpbmUgU0JVU19ETUFfQklESVJFQ1RJT05BTAlETUFfQklESVJFQ1RJT05BTAotI2RlZmluZSBTQlVTX0RNQV9UT0RFVklDRQlETUFfVE9fREVWSUNFCi0jZGVmaW5lIFNCVVNfRE1BX0ZST01ERVZJQ0UJRE1BX0ZST01fREVWSUNFCi0jZGVmaW5lCVNCVVNfRE1BX05PTkUJCURNQV9OT05FCi0KLS8qIEFsbCB0aGUgcmVzdCB1c2Ugc3RyZWFtaW5nIG1vZGUgbWFwcGluZ3MuICovCi1leHRlcm4gZG1hX2FkZHJfdCBzYnVzX21hcF9zaW5nbGUoc3RydWN0IHNidXNfZGV2ICosIHZvaWQgKiwgc2l6ZV90LCBpbnQpOwotZXh0ZXJuIHZvaWQgc2J1c191bm1hcF9zaW5nbGUoc3RydWN0IHNidXNfZGV2ICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKLWV4dGVybiBpbnQgc2J1c19tYXBfc2coc3RydWN0IHNidXNfZGV2ICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci1leHRlcm4gdm9pZCBzYnVzX3VubWFwX3NnKHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOwotCi0vKiBGaW5hbGx5LCBhbGxvdyBleHBsaWNpdCBzeW5jaHJvbml6YXRpb24gb2Ygc3RyZWFtYWJsZSBtYXBwaW5ncy4gKi8KLWV4dGVybiB2b2lkIHNidXNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHNidXNfZGV2ICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKLSNkZWZpbmUgc2J1c19kbWFfc3luY19zaW5nbGUgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2NwdQotZXh0ZXJuIHZvaWQgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3Qgc2J1c19kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOwotZXh0ZXJuIHZvaWQgc2J1c19kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOwotI2RlZmluZSBzYnVzX2RtYV9zeW5jX3NnIHNidXNfZG1hX3N5bmNfc2dfZm9yX2NwdQotZXh0ZXJuIHZvaWQgc2J1c19kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOwotCi0vKiBFcmljIEJyb3dlciAoZWJyb3dlckB1c2EubmV0KQotICogVHJhbnNsYXRlIFNCdXMgaW50ZXJydXB0IGxldmVscyB0byBpbm8gdmFsdWVzLS0KLSAqIHRoaXMgaXMgdXNlZCB3aGVuIGNvbnZlcnRpbmcgc2J1cyAiaW50ZXJydXB0cyIgT0JQIAotICogbm9kZSB2YWx1ZXMgdG8gImludHIiIG5vZGUgdmFsdWVzLCBhbmQgaXMgcGxhdGZvcm0gCi0gKiBkZXBlbmRlbnQuICBJZiBvbmx5IHdlIGNvdWxkIGNhbGwgT0JQIHdpdGggCi0gKiAic2J1cy1pbnRyPmNwdSAoc2JpbnQgLS0gaW5vKSIgZnJvbSBrZXJuZWwuLi4KLSAqIFNlZSAuLi4vZHJpdmVycy9zYnVzL3NidXMuYyBmb3IgZGV0YWlscy4KLSAqLwotQlRGSVhVUERFRl9DQUxMKHVuc2lnbmVkIGludCwgc2JpbnRfdG9faXJxLCBzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsIHVuc2lnbmVkIGludCkKLSNkZWZpbmUgc2JpbnRfdG9faXJxKHNkZXYsIHNiaW50KSBCVEZJWFVQX0NBTEwoc2JpbnRfdG9faXJxKShzZGV2LCBzYmludCkKLQotZXh0ZXJuIHZvaWQgc2J1c19hcmNoX2J1c19yYW5nZXNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKiwgc3RydWN0IHNidXNfYnVzICopOwotZXh0ZXJuIHZvaWQgc2J1c19zZXR1cF9pb21tdShzdHJ1Y3Qgc2J1c19idXMgKiwgc3RydWN0IGRldmljZV9ub2RlICopOwotZXh0ZXJuIHZvaWQgc2J1c19zZXR1cF9hcmNoX3Byb3BzKHN0cnVjdCBzYnVzX2J1cyAqLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci1leHRlcm4gaW50IHNidXNfYXJjaF9wcmVpbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgc2J1c19hcmNoX3Bvc3Rpbml0KHZvaWQpOwotCi0jZW5kaWYgLyogIShfU1BBUkNfU0JVU19IKSAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfU0JVU19ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19TQlVTX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy9zYnVzXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9zYnVzXzMyLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2J1c18zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2J1c18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjVkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zYnVzXzMyLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBzYnVzLmg6ICBEZWZpbmVzIGZvciB0aGUgU3VuIFNCdXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9TUEFSQ19TQlVTX0gKKyNkZWZpbmUgX1NQQVJDX1NCVVNfSAorCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCisvKiBXZSBzY2FuIHdoaWNoIGRldmljZXMgYXJlIG9uIHRoZSBTQnVzIHVzaW5nIHRoZSBQUk9NIG5vZGUgZGV2aWNlCisgKiB0cmVlLiAgU0J1cyBkZXZpY2VzIGFyZSBkZXNjcmliZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgWW91IGNhbgorICogZWl0aGVyIGdldCBhbiBhYnNvbHV0ZSBhZGRyZXNzIGF0IHdoaWNoIHRvIGFjY2VzcyB0aGUgZGV2aWNlLCBvcgorICogeW91IGNhbiBnZXQgYSBTQnVzICdzbG90JyBudW1iZXIgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhhdCBzbG90LgorICovCisKKy8qIFRoZSBiYXNlIGFkZHJlc3MgYXQgd2hpY2ggdG8gY2FsY3VsYXRlIGRldmljZSBPQklPIGFkZHJlc3Nlcy4gKi8KKyNkZWZpbmUgU1VOX1NCVVNfQlZBRERSICAgICAgICAweGY4MDAwMDAwCisjZGVmaW5lIFNCVVNfT0ZGX01BU0sgICAgICAgICAgMHgwMWZmZmZmZgorCisvKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgZGV2aWNlIGFkZHJlc3MgZnJvbSBzbG90CisgKiBudW1iZXJzICsgb2Zmc2V0cywgYW5kIHZpY2UgdmVyc2EuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNidXNfZGV2YWRkcihpbnQgc2xvdG51bSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisgIHJldHVybiAodW5zaWduZWQgbG9uZykgKFNVTl9TQlVTX0JWQUREUisoKHNsb3RudW0pPDwyNSkrKG9mZnNldCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzYnVzX2Rldl9zbG90KHVuc2lnbmVkIGxvbmcgZGV2X2FkZHIpCit7CisgIHJldHVybiAoaW50KSAoKChkZXZfYWRkciktU1VOX1NCVVNfQlZBRERSKT4+MjUpOworfQorCitzdHJ1Y3Qgc2J1c19idXM7CisKKy8qIExpbnV4IFNCVVMgZGV2aWNlIHRhYmxlcyAqLworc3RydWN0IHNidXNfZGV2IHsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlCW9mZGV2OworCXN0cnVjdCBzYnVzX2J1cwkJKmJ1czsKKwlzdHJ1Y3Qgc2J1c19kZXYJCSpuZXh0OworCXN0cnVjdCBzYnVzX2RldgkJKmNoaWxkOworCXN0cnVjdCBzYnVzX2RldgkJKnBhcmVudDsKKwlpbnQgcHJvbV9ub2RlOworCWNoYXIgcHJvbV9uYW1lWzY0XTsKKwlpbnQgc2xvdDsKKworCXN0cnVjdCByZXNvdXJjZSByZXNvdXJjZVtQUk9NUkVHX01BWF07CisKKwlzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgcmVnX2FkZHJzW1BST01SRUdfTUFYXTsKKwlpbnQgbnVtX3JlZ2lzdGVyczsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyBkZXZpY2VfcmFuZ2VzW1BST01SRUdfTUFYXTsKKwlpbnQgbnVtX2RldmljZV9yYW5nZXM7CisKKwl1bnNpZ25lZCBpbnQgaXJxc1s0XTsKKwlpbnQgbnVtX2lycXM7Cit9OworI2RlZmluZSB0b19zYnVzX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHNidXNfZGV2LCBvZmRldi5kZXYpCisKKy8qIFRoaXMgc3RydWN0IGRlc2NyaWJlcyB0aGUgU0J1cyhzKSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUuICovCitzdHJ1Y3Qgc2J1c19idXMgeworCXN0cnVjdCBvZl9kZXZpY2UJb2ZkZXY7CisJc3RydWN0IHNidXNfZGV2CQkqZGV2aWNlczsJLyogTGluayB0byBkZXZpY2VzIG9uIHRoaXMgU0J1cyAqLworCXN0cnVjdCBzYnVzX2J1cwkJKm5leHQ7CQkvKiBuZXh0IFNCdXMsIGlmIG1vcmUgdGhhbiBvbmUgU0J1cyAqLworCWludAkJCXByb21fbm9kZTsJLyogUFJPTSBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGlzIFNCdXMgKi8KKwljaGFyCQkJcHJvbV9uYW1lWzY0XTsgIC8qIFVzdWFsbHkgInNidXMiIG9yICJzYmkiICovCisJaW50CQkJY2xvY2tfZnJlcTsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyBzYnVzX3Jhbmdlc1tQUk9NUkVHX01BWF07CisJaW50IG51bV9zYnVzX3JhbmdlczsKKworCWludCBkZXZpZDsKKwlpbnQgYm9hcmQ7Cit9OworI2RlZmluZSB0b19zYnVzKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2J1c19idXMsIG9mZGV2LmRldikKKworZXh0ZXJuIHN0cnVjdCBzYnVzX2J1cyAqc2J1c19yb290OworCitzdGF0aWMgaW5saW5lIGludAorc2J1c19pc19zbGF2ZShzdHJ1Y3Qgc2J1c19kZXYgKmRldikKK3sKKwkvKiBYWFggSGF2ZSB0byB3cml0ZSB0aGlzIGZvciBzdW40YydzICovCisJcmV0dXJuIDA7Cit9CisKKy8qIERldmljZSBwcm9iaW5nIHJvdXRpbmVzIGNvdWxkIGZpbmQgdGhlc2UgaGFuZHkgKi8KKyNkZWZpbmUgZm9yX2VhY2hfc2J1cyhidXMpIFwKKyAgICAgICAgZm9yKChidXMpID0gc2J1c19yb290OyAoYnVzKTsgKGJ1cyk9KGJ1cyktPm5leHQpCisKKyNkZWZpbmUgZm9yX2VhY2hfc2J1c2RldihkZXZpY2UsIGJ1cykgXAorICAgICAgICBmb3IoKGRldmljZSkgPSAoYnVzKS0+ZGV2aWNlczsgKGRldmljZSk7IChkZXZpY2UpPShkZXZpY2UpLT5uZXh0KQorCisjZGVmaW5lIGZvcl9hbGxfc2J1c2RldihkZXZpY2UsIGJ1cykgXAorCWZvciAoKGJ1cykgPSBzYnVzX3Jvb3Q7IChidXMpOyAoYnVzKSA9IChidXMpLT5uZXh0KSBcCisJCWZvciAoKGRldmljZSkgPSAoYnVzKS0+ZGV2aWNlczsgKGRldmljZSk7IChkZXZpY2UpID0gKGRldmljZSktPm5leHQpCisKKy8qIERyaXZlciBEVk1BIGludGVyZmFjZXMuICovCisjZGVmaW5lIHNidXNfY2FuX2RtYV82NGJpdChzZGV2KQkoMCkgLyogYWN0dWFsbHksIHNwYXJjX2NwdV9tb2RlbD09c3VuNGQgKi8KKyNkZWZpbmUgc2J1c19jYW5fYnVyc3Q2NChzZGV2KQkJKDApIC8qIGFjdHVhbGx5LCBzcGFyY19jcHVfbW9kZWw9PXN1bjRkICovCitleHRlcm4gdm9pZCBzYnVzX3NldF9zYnVzNjQoc3RydWN0IHNidXNfZGV2ICosIGludCk7CitleHRlcm4gdm9pZCBzYnVzX2ZpbGxfZGV2aWNlX2lycShzdHJ1Y3Qgc2J1c19kZXYgKik7CisKKy8qIFRoZXNlIHlpZWxkIElPTU1VIG1hcHBpbmdzIGluIGNvbnNpc3RlbnQgbW9kZS4gKi8KK2V4dGVybiB2b2lkICpzYnVzX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHNidXNfZGV2ICosIGxvbmcsIHUzMiAqZG1hX2FkZHJwKTsKK2V4dGVybiB2b2lkIHNidXNfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBzYnVzX2RldiAqLCBsb25nLCB2b2lkICosIHUzMik7Cit2b2lkIHByb21fYWRqdXN0X3JhbmdlcyhzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgKiwgaW50LAorCQkJc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzICosIGludCk7CisKKyNkZWZpbmUgU0JVU19ETUFfQklESVJFQ1RJT05BTAlETUFfQklESVJFQ1RJT05BTAorI2RlZmluZSBTQlVTX0RNQV9UT0RFVklDRQlETUFfVE9fREVWSUNFCisjZGVmaW5lIFNCVVNfRE1BX0ZST01ERVZJQ0UJRE1BX0ZST01fREVWSUNFCisjZGVmaW5lCVNCVVNfRE1BX05PTkUJCURNQV9OT05FCisKKy8qIEFsbCB0aGUgcmVzdCB1c2Ugc3RyZWFtaW5nIG1vZGUgbWFwcGluZ3MuICovCitleHRlcm4gZG1hX2FkZHJfdCBzYnVzX21hcF9zaW5nbGUoc3RydWN0IHNidXNfZGV2ICosIHZvaWQgKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQgc2J1c191bm1hcF9zaW5nbGUoc3RydWN0IHNidXNfZGV2ICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKK2V4dGVybiBpbnQgc2J1c19tYXBfc2coc3RydWN0IHNidXNfZGV2ICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBzYnVzX3VubWFwX3NnKHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworCisvKiBGaW5hbGx5LCBhbGxvdyBleHBsaWNpdCBzeW5jaHJvbml6YXRpb24gb2Ygc3RyZWFtYWJsZSBtYXBwaW5ncy4gKi8KK2V4dGVybiB2b2lkIHNidXNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHNidXNfZGV2ICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKKyNkZWZpbmUgc2J1c19kbWFfc3luY19zaW5nbGUgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2NwdQorZXh0ZXJuIHZvaWQgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3Qgc2J1c19kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQgc2J1c19kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworI2RlZmluZSBzYnVzX2RtYV9zeW5jX3NnIHNidXNfZG1hX3N5bmNfc2dfZm9yX2NwdQorZXh0ZXJuIHZvaWQgc2J1c19kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBzYnVzX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworCisvKiBFcmljIEJyb3dlciAoZWJyb3dlckB1c2EubmV0KQorICogVHJhbnNsYXRlIFNCdXMgaW50ZXJydXB0IGxldmVscyB0byBpbm8gdmFsdWVzLS0KKyAqIHRoaXMgaXMgdXNlZCB3aGVuIGNvbnZlcnRpbmcgc2J1cyAiaW50ZXJydXB0cyIgT0JQCisgKiBub2RlIHZhbHVlcyB0byAiaW50ciIgbm9kZSB2YWx1ZXMsIGFuZCBpcyBwbGF0Zm9ybQorICogZGVwZW5kZW50LiAgSWYgb25seSB3ZSBjb3VsZCBjYWxsIE9CUCB3aXRoCisgKiAic2J1cy1pbnRyPmNwdSAoc2JpbnQgLS0gaW5vKSIgZnJvbSBrZXJuZWwuLi4KKyAqIFNlZSAuLi4vZHJpdmVycy9zYnVzL3NidXMuYyBmb3IgZGV0YWlscy4KKyAqLworQlRGSVhVUERFRl9DQUxMKHVuc2lnbmVkIGludCwgc2JpbnRfdG9faXJxLCBzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgc2JpbnRfdG9faXJxKHNkZXYsIHNiaW50KSBCVEZJWFVQX0NBTEwoc2JpbnRfdG9faXJxKShzZGV2LCBzYmludCkKKworZXh0ZXJuIHZvaWQgc2J1c19hcmNoX2J1c19yYW5nZXNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKiwgc3RydWN0IHNidXNfYnVzICopOworZXh0ZXJuIHZvaWQgc2J1c19zZXR1cF9pb21tdShzdHJ1Y3Qgc2J1c19idXMgKiwgc3RydWN0IGRldmljZV9ub2RlICopOworZXh0ZXJuIHZvaWQgc2J1c19zZXR1cF9hcmNoX3Byb3BzKHN0cnVjdCBzYnVzX2J1cyAqLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CitleHRlcm4gaW50IHNidXNfYXJjaF9wcmVpbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc2J1c19hcmNoX3Bvc3Rpbml0KHZvaWQpOworCisjZW5kaWYgLyogIShfU1BBUkNfU0JVU19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2J1c182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2J1c182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMTZiNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zYnVzXzY0LmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qIHNidXMuaDogRGVmaW5lcyBmb3IgdGhlIFN1biBTQnVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OSwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9TQlVTX0gKKyNkZWZpbmUgX1NQQVJDNjRfU0JVU19ICisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKKy8qIFdlIHNjYW4gd2hpY2ggZGV2aWNlcyBhcmUgb24gdGhlIFNCdXMgdXNpbmcgdGhlIFBST00gbm9kZSBkZXZpY2UKKyAqIHRyZWUuICBTQnVzIGRldmljZXMgYXJlIGRlc2NyaWJlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBZb3UgY2FuCisgKiBlaXRoZXIgZ2V0IGFuIGFic29sdXRlIGFkZHJlc3MgYXQgd2hpY2ggdG8gYWNjZXNzIHRoZSBkZXZpY2UsIG9yCisgKiB5b3UgY2FuIGdldCBhIFNCdXMgJ3Nsb3QnIG51bWJlciBhbmQgYW4gb2Zmc2V0IHdpdGhpbiB0aGF0IHNsb3QuCisgKi8KKworLyogVGhlIGJhc2UgYWRkcmVzcyBhdCB3aGljaCB0byBjYWxjdWxhdGUgZGV2aWNlIE9CSU8gYWRkcmVzc2VzLiAqLworI2RlZmluZSBTVU5fU0JVU19CVkFERFIgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0JVU19PRkZfTUFTSyAgICAgICAgICAweDBmZmZmZmZmCisKKy8qIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIGNhbGN1bGF0ZSBkZXZpY2UgYWRkcmVzcyBmcm9tIHNsb3QKKyAqIG51bWJlcnMgKyBvZmZzZXRzLCBhbmQgdmljZSB2ZXJzYS4KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2J1c19kZXZhZGRyKGludCBzbG90bnVtLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKyAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSAoU1VOX1NCVVNfQlZBRERSKygoc2xvdG51bSk8PDI4KSsob2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNidXNfZGV2X3Nsb3QodW5zaWduZWQgbG9uZyBkZXZfYWRkcikKK3sKKyAgcmV0dXJuIChpbnQpICgoKGRldl9hZGRyKS1TVU5fU0JVU19CVkFERFIpPj4yOCk7Cit9CisKK3N0cnVjdCBzYnVzX2J1czsKKworLyogTGludXggU0JVUyBkZXZpY2UgdGFibGVzICovCitzdHJ1Y3Qgc2J1c19kZXYgeworCXN0cnVjdCBvZl9kZXZpY2UJb2ZkZXY7CisJc3RydWN0IHNidXNfYnVzCQkqYnVzOworCXN0cnVjdCBzYnVzX2RldgkJKm5leHQ7CisJc3RydWN0IHNidXNfZGV2CQkqY2hpbGQ7CisJc3RydWN0IHNidXNfZGV2CQkqcGFyZW50OworCWludCBwcm9tX25vZGU7CisJY2hhciBwcm9tX25hbWVbNjRdOworCWludCBzbG90OworCisJc3RydWN0IHJlc291cmNlIHJlc291cmNlW1BST01SRUdfTUFYXTsKKworCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyByZWdfYWRkcnNbUFJPTVJFR19NQVhdOworCWludCBudW1fcmVnaXN0ZXJzOworCisJc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzIGRldmljZV9yYW5nZXNbUFJPTVJFR19NQVhdOworCWludCBudW1fZGV2aWNlX3JhbmdlczsKKworCXVuc2lnbmVkIGludCBpcnFzWzRdOworCWludCBudW1faXJxczsKK307CisjZGVmaW5lIHRvX3NidXNfZGV2aWNlKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2J1c19kZXYsIG9mZGV2LmRldikKKworLyogVGhpcyBzdHJ1Y3QgZGVzY3JpYmVzIHRoZSBTQnVzKHMpIGZvdW5kIG9uIHRoaXMgbWFjaGluZS4gKi8KK3N0cnVjdCBzYnVzX2J1cyB7CisJc3RydWN0IG9mX2RldmljZQlvZmRldjsKKwlzdHJ1Y3Qgc2J1c19kZXYJCSpkZXZpY2VzOwkvKiBUcmVlIG9mIFNCVVMgZGV2aWNlcwkqLworCXN0cnVjdCBzYnVzX2J1cwkJKm5leHQ7CQkvKiBOZXh0IFNCVVMgaW4gc3lzdGVtCSovCisJaW50CQkJcHJvbV9ub2RlOyAgICAgIC8qIE9CUCBub2RlIG9mIFNCVVMJKi8KKwljaGFyCQkJcHJvbV9uYW1lWzY0XTsJLyogVXN1YWxseSAic2J1cyIgb3IgInNiaSIgKi8KKwlpbnQJCQljbG9ja19mcmVxOworCisJc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzIHNidXNfcmFuZ2VzW1BST01SRUdfTUFYXTsKKwlpbnQgbnVtX3NidXNfcmFuZ2VzOworCisJaW50IHBvcnRpZDsKK307CisjZGVmaW5lIHRvX3NidXMoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBzYnVzX2J1cywgb2ZkZXYuZGV2KQorCitleHRlcm4gc3RydWN0IHNidXNfYnVzICpzYnVzX3Jvb3Q7CisKKy8qIERldmljZSBwcm9iaW5nIHJvdXRpbmVzIGNvdWxkIGZpbmQgdGhlc2UgaGFuZHkgKi8KKyNkZWZpbmUgZm9yX2VhY2hfc2J1cyhidXMpIFwKKyAgICAgICAgZm9yKChidXMpID0gc2J1c19yb290OyAoYnVzKTsgKGJ1cyk9KGJ1cyktPm5leHQpCisKKyNkZWZpbmUgZm9yX2VhY2hfc2J1c2RldihkZXZpY2UsIGJ1cykgXAorICAgICAgICBmb3IoKGRldmljZSkgPSAoYnVzKS0+ZGV2aWNlczsgKGRldmljZSk7IChkZXZpY2UpPShkZXZpY2UpLT5uZXh0KQorCisjZGVmaW5lIGZvcl9hbGxfc2J1c2RldihkZXZpY2UsIGJ1cykgXAorCWZvciAoKGJ1cykgPSBzYnVzX3Jvb3Q7IChidXMpOyAoYnVzKSA9IChidXMpLT5uZXh0KSBcCisJCWZvciAoKGRldmljZSkgPSAoYnVzKS0+ZGV2aWNlczsgKGRldmljZSk7IChkZXZpY2UpID0gKGRldmljZSktPm5leHQpCisKKy8qIERyaXZlciBEVk1BIGludGVyZmFjZXMuICovCisjZGVmaW5lIHNidXNfY2FuX2RtYV82NGJpdChzZGV2KQkoMSkKKyNkZWZpbmUgc2J1c19jYW5fYnVyc3Q2NChzZGV2KQkJKDEpCitleHRlcm4gdm9pZCBzYnVzX3NldF9zYnVzNjQoc3RydWN0IHNidXNfZGV2ICosIGludCk7CitleHRlcm4gdm9pZCBzYnVzX2ZpbGxfZGV2aWNlX2lycShzdHJ1Y3Qgc2J1c19kZXYgKik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqc2J1c19hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBzYnVzX2RldiAqc2RldiAsIHNpemVfdCBzaXplLAorCQkJCQkgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpCit7CisJcmV0dXJuIGRtYV9hbGxvY19jb2hlcmVudCgmc2Rldi0+b2ZkZXYuZGV2LCBzaXplLAorCQkJCSAgZG1hX2hhbmRsZSwgR0ZQX0FUT01JQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzYnVzX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsIHNpemVfdCBzaXplLAorCQkJCQl2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCXJldHVybiBkbWFfZnJlZV9jb2hlcmVudCgmc2Rldi0+b2ZkZXYuZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7Cit9CisKKyNkZWZpbmUgU0JVU19ETUFfQklESVJFQ1RJT05BTAlETUFfQklESVJFQ1RJT05BTAorI2RlZmluZSBTQlVTX0RNQV9UT0RFVklDRQlETUFfVE9fREVWSUNFCisjZGVmaW5lIFNCVVNfRE1BX0ZST01ERVZJQ0UJRE1BX0ZST01fREVWSUNFCisjZGVmaW5lCVNCVVNfRE1BX05PTkUJCURNQV9OT05FCisKKy8qIEFsbCB0aGUgcmVzdCB1c2Ugc3RyZWFtaW5nIG1vZGUgbWFwcGluZ3MuICovCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3Qgc2J1c19tYXBfc2luZ2xlKHN0cnVjdCBzYnVzX2RldiAqc2Rldiwgdm9pZCAqcHRyLAorCQkJCQkgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJcmV0dXJuIGRtYV9tYXBfc2luZ2xlKCZzZGV2LT5vZmRldi5kZXYsIHB0ciwgc2l6ZSwKKwkJCSAgICAgIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNidXNfdW5tYXBfc2luZ2xlKHN0cnVjdCBzYnVzX2RldiAqc2RldiwKKwkJCQkgICAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkJCSAgICAgaW50IGRpcmVjdGlvbikKK3sKKwlkbWFfdW5tYXBfc2luZ2xlKCZzZGV2LT5vZmRldi5kZXYsIGRtYV9hZGRyLCBzaXplLAorCQkJIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2J1c19tYXBfc2coc3RydWN0IHNidXNfZGV2ICpzZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQoreworCXJldHVybiBkbWFfbWFwX3NnKCZzZGV2LT5vZmRldi5kZXYsIHNnLCBuZW50cywKKwkJCSAgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKSBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2J1c191bm1hcF9zZyhzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKK3sKKwlkbWFfdW5tYXBfc2coJnNkZXYtPm9mZGV2LmRldiwgc2csIG5lbnRzLAorCQkgICAgIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKK30KKworLyogRmluYWxseSwgYWxsb3cgZXhwbGljaXQgc3luY2hyb25pemF0aW9uIG9mIHN0cmVhbWFibGUgbWFwcGluZ3MuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsCisJCQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3sKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmc2Rldi0+b2ZkZXYuZGV2LCBkbWFfaGFuZGxlLCBzaXplLAorCQkJCShlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKK30KKyNkZWZpbmUgc2J1c19kbWFfc3luY19zaW5nbGUgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2NwdQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsCisJCQkJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3sKKwkvKiBObyBmbHVzaGluZyBuZWVkZWQgdG8gc3luYyBjcHUgd3JpdGVzIHRvIHRoZSBkZXZpY2UuICAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2J1c19kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzYnVzX2RldiAqc2RldiwKKwkJCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJCSAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCit7CisJZG1hX3N5bmNfc2dfZm9yX2NwdSgmc2Rldi0+b2ZkZXYuZGV2LCBzZywgbmVudHMsCisJCQkgICAgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKSBkaXJlY3Rpb24pOworfQorI2RlZmluZSBzYnVzX2RtYV9zeW5jX3NnIHNidXNfZG1hX3N5bmNfc2dfZm9yX2NwdQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2J1c19kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBzYnVzX2RldiAqc2RldiwKKwkJCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJCSAgICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCit7CisJLyogTm8gZmx1c2hpbmcgbmVlZGVkIHRvIHN5bmMgY3B1IHdyaXRlcyB0byB0aGUgZGV2aWNlLiAgKi8KK30KKworZXh0ZXJuIHZvaWQgc2J1c19hcmNoX2J1c19yYW5nZXNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKiwgc3RydWN0IHNidXNfYnVzICopOworZXh0ZXJuIHZvaWQgc2J1c19zZXR1cF9pb21tdShzdHJ1Y3Qgc2J1c19idXMgKiwgc3RydWN0IGRldmljZV9ub2RlICopOworZXh0ZXJuIHZvaWQgc2J1c19zZXR1cF9hcmNoX3Byb3BzKHN0cnVjdCBzYnVzX2J1cyAqLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CitleHRlcm4gaW50IHNidXNfYXJjaF9wcmVpbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc2J1c19hcmNoX3Bvc3Rpbml0KHZvaWQpOworCisjZW5kaWYgLyogIShfU1BBUkM2NF9TQlVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2NhdHRlcmxpc3QuaAppbmRleCBjODI2MDljLi5iMWEwZTMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zY2F0dGVybGlzdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NjYXR0ZXJsaXN0LmgKQEAgLTEsMjYgKzEsOCBAQAotI2lmbmRlZiBfU1BBUkNfU0NBVFRFUkxJU1RfSAotI2RlZmluZSBfU1BBUkNfU0NBVFRFUkxJU1RfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RydWN0IHNjYXR0ZXJsaXN0IHsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0cKLQl1bnNpZ25lZCBsb25nIHNnX21hZ2ljOworI2lmbmRlZiBfX19BU01fU1BBUkNfU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfX19BU01fU1BBUkNfU0NBVFRFUkxJU1RfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NjYXR0ZXJsaXN0XzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9zY2F0dGVybGlzdF8zMi5oPgogI2VuZGlmCi0JdW5zaWduZWQgbG9uZyBwYWdlX2xpbms7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQotCXVuc2lnbmVkIGludCBsZW5ndGg7Ci0KLQlfX3UzMiBkdm1hX2FkZHJlc3M7IC8qIEEgcGxhY2UgdG8gaGFuZyBob3N0LXNwZWNpZmljIGFkZHJlc3NlcyBhdC4gKi8KLQlfX3UzMiBkdm1hX2xlbmd0aDsKLX07Ci0KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpICgoc2cpLT5kdm1hX2FkZHJlc3MpCi0jZGVmaW5lIHNnX2RtYV9sZW4oc2cpICAgICAoKHNnKS0+ZHZtYV9sZW5ndGgpCi0KLSNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKH4wVUwpCi0KLSNkZWZpbmUgQVJDSF9IQVNfU0dfQ0hBSU4KLQotI2VuZGlmIC8qICEoX1NQQVJDX1NDQVRURVJMSVNUX0gpICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NjYXR0ZXJsaXN0XzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zY2F0dGVybGlzdF8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjYwOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zY2F0dGVybGlzdF8zMi5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX1NQQVJDX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX1NQQVJDX1NDQVRURVJMSVNUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBzY2F0dGVybGlzdCB7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NHCisJdW5zaWduZWQgbG9uZyBzZ19tYWdpYzsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcgcGFnZV9saW5rOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCisJX191MzIgZHZtYV9hZGRyZXNzOyAvKiBBIHBsYWNlIHRvIGhhbmcgaG9zdC1zcGVjaWZpYyBhZGRyZXNzZXMgYXQuICovCisJX191MzIgZHZtYV9sZW5ndGg7Cit9OworCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKSAoKHNnKS0+ZHZtYV9hZGRyZXNzKQorI2RlZmluZSBzZ19kbWFfbGVuKHNnKSAgICAgKChzZyktPmR2bWFfbGVuZ3RoKQorCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICh+MFVMKQorCisjZGVmaW5lIEFSQ0hfSEFTX1NHX0NIQUlOCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2NhdHRlcmxpc3RfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NjYXR0ZXJsaXN0XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiZDA1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NjYXR0ZXJsaXN0XzY0LmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfU1BBUkM2NF9TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9TUEFSQzY0X1NDQVRURVJMSVNUX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCBzY2F0dGVybGlzdCB7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NHCisJdW5zaWduZWQgbG9uZwlzZ19tYWdpYzsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcJcGFnZV9saW5rOworCXVuc2lnbmVkIGludAlvZmZzZXQ7CisKKwl1bnNpZ25lZCBpbnQJbGVuZ3RoOworCisJZG1hX2FkZHJfdAlkbWFfYWRkcmVzczsKKwlfX3UzMgkJZG1hX2xlbmd0aDsKK307CisKKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykgICAgIAkoKHNnKS0+ZG1hX2xlbmd0aCkKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkofjBVTCkKKworI2RlZmluZSBBUkNIX0hBU19TR19DSEFJTgorCisjZW5kaWYgLyogIShfU1BBUkM2NF9TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2NyYXRjaHBhZC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2NyYXRjaHBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOGIwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zY3JhdGNocGFkLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfU1BBUkM2NF9TQ1JBVENIUEFEX0gKKyNkZWZpbmUgX1NQQVJDNjRfU0NSQVRDSFBBRF9ICisKKy8qIFN1bjR2IHNjcmF0Y2hwYWQgcmVnaXN0ZXJzLCBhY2Nlc3NlZCB2aWEgQVNJX1NDUkFUQ0hQQUQuICAqLworCisjZGVmaW5lIFNDUkFUQ0hQQURfTU1VX01JU1MJMHgwMCAvKiBTaGFyZWQgd2l0aCBPQlAgLSBzZXQgYnkgT0JQCSAgICAqLworI2RlZmluZSBTQ1JBVENIUEFEX0NQVUlECTB4MDggLyogU2hhcmVkIHdpdGggT0JQIC0gc2V0IGJ5IGh5cGVydmlzb3IgKi8KKyNkZWZpbmUgU0NSQVRDSFBBRF9VVFNCUkVHMQkweDEwCisjZGVmaW5lIFNDUkFUQ0hQQURfVVRTQlJFRzIJMHgxOAorCS8qIDB4MjAgYW5kIDB4MjgsIGh5cGVydmlzb3Igb25seS4uLiAqLworI2RlZmluZSBTQ1JBVENIUEFEX1VOVVNFRDEJMHgzMAorI2RlZmluZSBTQ1JBVENIUEFEX1VOVVNFRDIJMHgzOCAvKiBSZXNlcnZlZCBmb3IgT0JQCQkgICAgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfU0NSQVRDSFBBRF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2VjY29tcC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2VjY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmY2Q5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zZWNjb21wLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfQVNNX1NFQ0NPTVBfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4gLyogYWxyZWFkeSBkZWZpbmVzIFRJRl8zMkJJVCAqLworCisjaWZuZGVmIFRJRl8zMkJJVAorI2Vycm9yICJ1bmV4cGVjdGVkIFRJRl8zMkJJVCBvbiBzcGFyYzY0IgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKworI2RlZmluZSBfX05SX3NlY2NvbXBfcmVhZCBfX05SX3JlYWQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3dyaXRlIF9fTlJfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXQgX19OUl9leGl0CisjZGVmaW5lIF9fTlJfc2VjY29tcF9zaWdyZXR1cm4gX19OUl9ydF9zaWdyZXR1cm4KKworI2RlZmluZSBfX05SX3NlY2NvbXBfcmVhZF8zMiBfX05SX3JlYWQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3dyaXRlXzMyIF9fTlJfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIgX19OUl9leGl0CisjZGVmaW5lIF9fTlJfc2VjY29tcF9zaWdyZXR1cm5fMzIgX19OUl9zaWdyZXR1cm4KKworI2VuZGlmIC8qIF9BU01fU0VDQ09NUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zZWN0aW9ucy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2VjdGlvbnMuaAppbmRleCA2ODMyODQxLi5jYmQwMTkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zZWN0aW9ucy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NlY3Rpb25zLmgKQEAgLTEsNiArMSw4IEBACi0jaWZuZGVmIF9TUEFSQ19TRUNUSU9OU19ICi0jZGVmaW5lIF9TUEFSQ19TRUNUSU9OU19ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgotCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19TRUNUSU9OU19ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19TRUNUSU9OU19ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvc2VjdGlvbnNfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NlY3Rpb25zXzMyLmg+CisjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2VjdGlvbnNfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NlY3Rpb25zXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzMjg0MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NlY3Rpb25zXzMyLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9TUEFSQ19TRUNUSU9OU19ICisjZGVmaW5lIF9TUEFSQ19TRUNUSU9OU19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NlY3Rpb25zXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zZWN0aW9uc182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNGI5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zZWN0aW9uc182NC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfU1BBUkM2NF9TRUNUSU9OU19ICisjZGVmaW5lIF9TUEFSQzY0X1NFQ1RJT05TX0gKKworLyogbm90aGluZyB0byBzZWUsIG1vdmUgYWxvbmcgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCitleHRlcm4gY2hhciBfc3RhcnRbXTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NlbWJ1Zi5oCmluZGV4IGE3OWM0YmIuLmZhZWUxYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NlbWJ1Zi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NlbWJ1Zi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfU1BBUkNfU0VNQlVGX0gKICNkZWZpbmUgX1NQQVJDX1NFTUJVRl9ICiAKLS8qIAorLyoKICAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3Igc3BhcmMgYXJjaGl0ZWN0dXJlLgogICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCiAgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KQEAgLTEwLDE2ICsxMCwyMiBAQAogICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KICAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKICAqLworI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjIGRlZmluZSBQQURESU5HKHgpCisjZWxzZQorIyBkZWZpbmUgUEFERElORyh4KSB1bnNpZ25lZCBpbnQgeDsKKyNlbmRpZgogCiBzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CiAJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KLQl1bnNpZ25lZCBpbnQJX19wYWQxOworCVBBRERJTkcoX19wYWQxKQogCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KLQl1bnNpZ25lZCBpbnQJX19wYWQyOworCVBBRERJTkcoX19wYWQyKQogCV9fa2VybmVsX3RpbWVfdAlzZW1fY3RpbWU7CQkvKiBsYXN0IGNoYW5nZSB0aW1lICovCiAJdW5zaWduZWQgbG9uZwlzZW1fbnNlbXM7CQkvKiBuby4gb2Ygc2VtYXBob3JlcyBpbiBhcnJheSAqLwogCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOwogCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOwogfTsKKyN1bmRlZiBQQURESU5HCiAKICNlbmRpZiAvKiBfU1BBUkM2NF9TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NldHVwLmgKaW5kZXggYjNhZjk1OC4uMjY0M2M2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc2V0dXAuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zZXR1cC5oCkBAIC01LDYgKzUsMTAgQEAKICNpZm5kZWYgX1NQQVJDX1NFVFVQX0gKICNkZWZpbmUgX1NQQVJDX1NFVFVQX0gKIAotI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQkyNTYKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorIyBkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjA0OAorI2Vsc2UKKyMgZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgorI2VuZGlmCiAKICNlbmRpZiAvKiBfU1BBUkNfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2ZhZnNyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zZmFmc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTYxMzdiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2ZhZnNyLmgKQEAgLTAsMCArMSw4MiBAQAorI2lmbmRlZiBfU1BBUkM2NF9TRkFGU1JfSAorI2RlZmluZSBfU1BBUkM2NF9TRkFGU1JfSAorCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKworLyogU3BpdGZpcmUgQXN5bmNocm9ub3VzIEZhdWx0IFN0YXR1cyByZWdpc3RlciwgQVNJPTB4NEMgVkE8NjM6MD49MHgwICovCisKKyNkZWZpbmUgU0ZBRlNSX01FCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9NRV9TSElGVCkKKyNkZWZpbmUgU0ZBRlNSX01FX1NISUZUCQkzMgorI2RlZmluZSBTRkFGU1JfUFJJVgkJKF9BQygxLFVMKSA8PCBTRkFGU1JfUFJJVl9TSElGVCkKKyNkZWZpbmUgU0ZBRlNSX1BSSVZfU0hJRlQJMzEKKyNkZWZpbmUgU0ZBRlNSX0lTQVAJCShfQUMoMSxVTCkgPDwgU0ZBRlNSX0lTQVBfU0hJRlQpCisjZGVmaW5lIFNGQUZTUl9JU0FQX1NISUZUCTMwCisjZGVmaW5lIFNGQUZTUl9FVFAJCShfQUMoMSxVTCkgPDwgU0ZBRlNSX0VUUF9TSElGVCkKKyNkZWZpbmUgU0ZBRlNSX0VUUF9TSElGVAkyOQorI2RlZmluZSBTRkFGU1JfSVZVRQkJKF9BQygxLFVMKSA8PCBTRkFGU1JfSVZVRV9TSElGVCkKKyNkZWZpbmUgU0ZBRlNSX0lWVUVfU0hJRlQJMjgKKyNkZWZpbmUgU0ZBRlNSX1RPCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9UT19TSElGVCkKKyNkZWZpbmUgU0ZBRlNSX1RPX1NISUZUCQkyNworI2RlZmluZSBTRkFGU1JfQkVSUgkJKF9BQygxLFVMKSA8PCBTRkFGU1JfQkVSUl9TSElGVCkKKyNkZWZpbmUgU0ZBRlNSX0JFUlJfU0hJRlQJMjYKKyNkZWZpbmUgU0ZBRlNSX0xEUAkJKF9BQygxLFVMKSA8PCBTRkFGU1JfTERQX1NISUZUKQorI2RlZmluZSBTRkFGU1JfTERQX1NISUZUCTI1CisjZGVmaW5lIFNGQUZTUl9DUAkJKF9BQygxLFVMKSA8PCBTRkFGU1JfQ1BfU0hJRlQpCisjZGVmaW5lIFNGQUZTUl9DUF9TSElGVAkJMjQKKyNkZWZpbmUgU0ZBRlNSX1dQCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9XUF9TSElGVCkKKyNkZWZpbmUgU0ZBRlNSX1dQX1NISUZUCQkyMworI2RlZmluZSBTRkFGU1JfRURQCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9FRFBfU0hJRlQpCisjZGVmaW5lIFNGQUZTUl9FRFBfU0hJRlQJMjIKKyNkZWZpbmUgU0ZBRlNSX1VFCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9VRV9TSElGVCkKKyNkZWZpbmUgU0ZBRlNSX1VFX1NISUZUCQkyMQorI2RlZmluZSBTRkFGU1JfQ0UJCShfQUMoMSxVTCkgPDwgU0ZBRlNSX0NFX1NISUZUKQorI2RlZmluZSBTRkFGU1JfQ0VfU0hJRlQJCTIwCisjZGVmaW5lIFNGQUZTUl9FVFMJCShfQUMoMHhmLFVMKSA8PCBTRkFGU1JfRVRTX1NISUZUKQorI2RlZmluZSBTRkFGU1JfRVRTX1NISUZUCTE2CisjZGVmaW5lIFNGQUZTUl9QU1lORAkJKF9BQygweGZmZmYsVUwpIDw8IFNGQUZTUl9QU1lORF9TSElGVCkKKyNkZWZpbmUgU0ZBRlNSX1BTWU5EX1NISUZUCTAKKworLyogVURCIEVycm9yIFJlZ2lzdGVyLCBBU0k9MHg3ZiBWQTw2MzowPj0weDAoSGlnaCksMHgxOChMb3cpIGZvciByZWFkCisgKiAgICAgICAgICAgICAgICAgICAgIEFTST0weDc3IFZBPDYzOjA+PTB4MChIaWdoKSwweDE4KExvdykgZm9yIHdyaXRlCisgKi8KKworI2RlZmluZSBVREJFX1VFCQkJKF9BQygxLFVMKSA8PCA5KQorI2RlZmluZSBVREJFX0NFCQkJKF9BQygxLFVMKSA8PCA4KQorI2RlZmluZSBVREJFX0VfU1lORFIJCShfQUMoMHhmZixVTCkgPDwgMCkKKworLyogVGhlIHRyYXAgaGFuZGxlcnMgZm9yIGFzeW5jaHJvbm91cyBlcnJvcnMgZW5jb2RlIHRoZSBBRlNSIGFuZAorICogb3RoZXIgcGllY2VzIG9mIGluZm9ybWF0aW9uIGludG8gYSA2NC1iaXQgYXJndW1lbnQgZm9yIEMgY29kZQorICogZW5jb2RlZCBhcyBmb2xsb3dzOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICBVREJfSCAgfCAgVURCX0wgIHwgVEw+MSAgfCAgVFQgIHwgICBBRlNSICAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICA2MyAgICAgNTQgNTMgICAgIDQ0ICAgIDQyICAgNDEgIDMzIDMyICAgICAgIDAKKyAqCisgKiBUaGUgQUZBUiBpcyBwYXNzZWQgaW4gdW5jaGFuZ2VkLgorICovCisjZGVmaW5lIFNGU1RBVF9VREJIX01BU0sJKF9BQygweDNmZixVTCkgPDwgU0ZTVEFUX1VEQkhfU0hJRlQpCisjZGVmaW5lIFNGU1RBVF9VREJIX1NISUZUCTU0CisjZGVmaW5lIFNGU1RBVF9VREJMX01BU0sJKF9BQygweDNmZixVTCkgPDwgU0ZTVEFUX1VEQkhfU0hJRlQpCisjZGVmaW5lIFNGU1RBVF9VREJMX1NISUZUCTQ0CisjZGVmaW5lIFNGU1RBVF9UTF9HVF9PTkUJKF9BQygxLFVMKSA8PCBTRlNUQVRfVExfR1RfT05FX1NISUZUKQorI2RlZmluZSBTRlNUQVRfVExfR1RfT05FX1NISUZUCTQyCisjZGVmaW5lIFNGU1RBVF9UUkFQX1RZUEUJKF9BQygweDFGRixVTCkgPDwgU0ZTVEFUX1RSQVBfVFlQRV9TSElGVCkKKyNkZWZpbmUgU0ZTVEFUX1RSQVBfVFlQRV9TSElGVAkzMworI2RlZmluZSBTRlNUQVRfQUZTUl9NQVNLCShfQUMoMHgxZmZmZmZmZmYsVUwpIDw8IFNGU1RBVF9BRlNSX1NISUZUKQorI2RlZmluZSBTRlNUQVRfQUZTUl9TSElGVAkwCisKKy8qIEVTVEFURSBFcnJvciBFbmFibGUgUmVnaXN0ZXIsIEFTST0weDRiIFZBPDYzOjA+PTB4MCAqLworI2RlZmluZSBFU1RBVEVfRVJSX0NFCQkweDEgLyogQ29ycmVjdGFibGUgZXJyb3JzICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFU1RBVEVfRVJSX05DRQkJMHgyIC8qIFRPLCBCRVJSLCBMRFAsIEVUUCwgRURQLCBXUCwgVUUsIElWVUUgKi8KKyNkZWZpbmUgRVNUQVRFX0VSUl9JU0FQCQkweDQgLyogU3lzdGVtIGFkZHJlc3MgcGFyaXR5IGVycm9yICAgICAgICAgICAqLworI2RlZmluZSBFU1RBVEVfRVJSX0FMTAkJKEVTVEFURV9FUlJfQ0UgfCBcCisJCQkJIEVTVEFURV9FUlJfTkNFIHwgXAorCQkJCSBFU1RBVEVfRVJSX0lTQVApCisKKy8qIFRoZSB2YXJpb3VzIHRyYXAgdHlwZXMgdGhhdCByZXBvcnQgdXNpbmcgdGhlIGFib3ZlIHN0YXRlLiAqLworI2RlZmluZSBUUkFQX1RZUEVfSUFFCQkweDA5IC8qIEluc3RydWN0aW9uIEFjY2VzcyBFcnJvciAgICAgICAgICAgICAqLworI2RlZmluZSBUUkFQX1RZUEVfREFFCQkweDMyIC8qIERhdGEgQWNjZXNzIEVycm9yICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUUkFQX1RZUEVfQ0VFCQkweDYzIC8qIENvcnJlY3RhYmxlIEVDQyBFcnJvciAgICAgICAgICAgICAgICAqLworCisjZW5kaWYgLyogX1NQQVJDNjRfU0ZBRlNSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NmcC1tYWNoaW5lLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zZnAtbWFjaGluZS5oCmluZGV4IDI2NmE0MmIuLmM2NzZmY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NmcC1tYWNoaW5lLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2ZwLW1hY2hpbmUuaApAQCAtMSwyMTIgKzEsOCBAQAotLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuCi0gICBTcGFyYyB1c2VybGFuZCAoX1FfKikgdmVyc2lvbi4KLSAgIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KLSAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIChydGhAY3lnbnVzLmNvbSksCi0JCSAgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opLAotCQkgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkgYW5kCi0JCSAgUGV0ZXIgTWF5ZGVsbCAocG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51aykuCi0KLSAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCi0gICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYKLSAgIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLwotCi0jaWZuZGVmIF9TRlBfTUFDSElORV9ICi0jZGVmaW5lIF9TRlBfTUFDSElORV9ICi0KLSAgIAotI2RlZmluZSBfRlBfV19UWVBFX1NJWkUJCTMyCi0jZGVmaW5lIF9GUF9XX1RZUEUJCXVuc2lnbmVkIGxvbmcKLSNkZWZpbmUgX0ZQX1dTX1RZUEUJCXNpZ25lZCBsb25nCi0jZGVmaW5lIF9GUF9JX1RZUEUJCWxvbmcKLQotI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkJCQkJCVwKLSAgX0ZQX01VTF9NRUFUXzFfd2lkZShfRlBfV0ZSQUNCSVRTX1MsUixYLFksdW11bF9wcG1tKQotI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkJCQkJCVwKLSAgX0ZQX01VTF9NRUFUXzJfd2lkZShfRlBfV0ZSQUNCSVRTX0QsUixYLFksdW11bF9wcG1tKQotI2RlZmluZSBfRlBfTVVMX01FQVRfUShSLFgsWSkJCQkJCVwKLSAgX0ZQX01VTF9NRUFUXzRfd2lkZShfRlBfV0ZSQUNCSVRTX1EsUixYLFksdW11bF9wcG1tKQotCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKQlfRlBfRElWX01FQVRfMV91ZGl2KFMsUixYLFkpCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF9EKFIsWCxZKQlfRlBfRElWX01FQVRfMl91ZGl2KEQsUixYLFkpCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF9RKFIsWCxZKQlfRlBfRElWX01FQVRfNF91ZGl2KFEsUixYLFkpCi0KLSNkZWZpbmUgX0ZQX05BTkZSQUNfUwkJKChfRlBfUU5BTkJJVF9TIDw8IDEpIC0gMSkKLSNkZWZpbmUgX0ZQX05BTkZSQUNfRAkJKChfRlBfUU5BTkJJVF9EIDw8IDEpIC0gMSksIC0xCi0jZGVmaW5lIF9GUF9OQU5GUkFDX1EJCSgoX0ZQX1FOQU5CSVRfUSA8PCAxKSAtIDEpLCAtMSwgLTEsIC0xCi0jZGVmaW5lIF9GUF9OQU5TSUdOX1MJCTAKLSNkZWZpbmUgX0ZQX05BTlNJR05fRAkJMAotI2RlZmluZSBfRlBfTkFOU0lHTl9RCQkwCi0KLSNkZWZpbmUgX0ZQX0tFRVBOQU5GUkFDUCAxCi0KLS8qIElmIG9uZSBOYU4gaXMgc2lnbmFsaW5nIGFuZCB0aGUgb3RoZXIgaXMgbm90LAotICogd2UgY2hvb3NlIHRoYXQgb25lLCBvdGhlcndpc2Ugd2UgY2hvb3NlIFguCi0gKi8KLS8qIEZvciBfUXBfKiBhbmQgX1FfKiwgdGhpcyBzaG91bGQgcHJlZmVyIFgsIGZvcgotICogQ1BVIGluc3RydWN0aW9uIGVtdWxhdGlvbiB0aGlzIHNob3VsZCBwcmVmZXIgWS4KLSAqIChzZWUgU1BBTXY5IEIuMi4yIHNlY3Rpb24pLgotICovCi0jZGVmaW5lIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZLCBPUCkJCQlcCi0gIGRvIHsJCQkJCQkJCVwKLSAgICBpZiAoKF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWSkgJiBfRlBfUU5BTkJJVF8jI2ZzKQkJXAotCSYmICEoX0ZQX0ZSQUNfSElHSF9SQVdfIyNmcyhYKSAmIF9GUF9RTkFOQklUXyMjZnMpKQlcCi0gICAgICB7CQkJCQkJCQlcCi0JUiMjX3MgPSBYIyNfczsJCQkJCQlcCi0JX0ZQX0ZSQUNfQ09QWV8jI3djKFIsWCk7CQkJCVwKLSAgICAgIH0JCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCVwKLQlSIyNfcyA9IFkjI19zOwkJCQkJCVwKLQlfRlBfRlJBQ19DT1BZXyMjd2MoUixZKTsJCQkJXAotICAgICAgfQkJCQkJCQkJXAotICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIFNvbWUgYXNzZW1ibHkgdG8gc3BlZWQgdGhpbmdzIHVwLiAqLwotI2RlZmluZSBfX0ZQX0ZSQUNfQUREXzMocjIscjEscjAseDIseDEseDAseTIseTEseTApCQkJXAotICBfX2FzbV9fICgiYWRkY2MgJXI3LCU4LCUyXG5cdCIJCQkJCVwKLQkgICAiYWRkeGNjICVyNSwlNiwlMVxuXHQiCQkJCQlcCi0JICAgImFkZHggJXIzLCU0LCUwXG4iCQkJCQkJXAotCSAgIDogIj1yIiAoKFVTSXR5cGUpKHIyKSksCQkJCQlcCi0JICAgICAiPSZyIiAoKFVTSXR5cGUpKHIxKSksCQkJCQlcCi0JICAgICAiPSZyIiAoKFVTSXR5cGUpKHIwKSkJCQkJCVwKLQkgICA6ICIlckoiICgoVVNJdHlwZSkoeDIpKSwJCQkJCVwKLQkgICAgICJySSIgKChVU0l0eXBlKSh5MikpLAkJCQkJXAotCSAgICAgIiVySiIgKChVU0l0eXBlKSh4MSkpLAkJCQkJXAotCSAgICAgInJJIiAoKFVTSXR5cGUpKHkxKSksCQkJCQlcCi0JICAgICAiJXJKIiAoKFVTSXR5cGUpKHgwKSksCQkJCQlcCi0JICAgICAickkiICgoVVNJdHlwZSkoeTApKQkJCQkJXAotCSAgIDogImNjIikKLQotI2RlZmluZSBfX0ZQX0ZSQUNfU1VCXzMocjIscjEscjAseDIseDEseDAseTIseTEseTApCQkJXAotICBfX2FzbV9fICgic3ViY2MgJXI3LCU4LCUyXG5cdCIJCQkJCVwKLQkgICAgInN1YnhjYyAlcjUsJTYsJTFcblx0IgkJCQkJXAotCSAgICAic3VieCAlcjMsJTQsJTBcbiIJCQkJCQlcCi0JICAgOiAiPXIiICgoVVNJdHlwZSkocjIpKSwJCQkJCVwKLQkgICAgICI9JnIiICgoVVNJdHlwZSkocjEpKSwJCQkJCVwKLQkgICAgICI9JnIiICgoVVNJdHlwZSkocjApKQkJCQkJXAotCSAgIDogIiVySiIgKChVU0l0eXBlKSh4MikpLAkJCQkJXAotCSAgICAgInJJIiAoKFVTSXR5cGUpKHkyKSksCQkJCQlcCi0JICAgICAiJXJKIiAoKFVTSXR5cGUpKHgxKSksCQkJCQlcCi0JICAgICAickkiICgoVVNJdHlwZSkoeTEpKSwJCQkJCVwKLQkgICAgICIlckoiICgoVVNJdHlwZSkoeDApKSwJCQkJCVwKLQkgICAgICJySSIgKChVU0l0eXBlKSh5MCkpCQkJCQlcCi0JICAgOiAiY2MiKQotCi0jZGVmaW5lIF9fRlBfRlJBQ19BRERfNChyMyxyMixyMSxyMCx4Myx4Mix4MSx4MCx5Myx5Mix5MSx5MCkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICAvKiBXZSBuZWVkIHRvIGZvb2wgZ2NjLCAgYXMgd2UgbmVlZCB0byBwYXNzIG1vcmUgdGhhbiAxMAkJXAotICAgICAgIGlucHV0L291dHB1dHMuICAqLwkJCQkJCVwKLSAgICByZWdpc3RlciBVU0l0eXBlIF90MSBfX2FzbV9fICgiZzEiKSwgX3QyIF9fYXNtX18gKCJnMiIpOwkJXAotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCi0JICAgICJhZGRjYyAlcjgsJTksJTFcblx0IgkJCQkJXAotCSAgICAiYWRkeGNjICVyNiwlNywlMFxuXHQiCQkJCQlcCi0JICAgICJhZGR4Y2MgJXI0LCU1LCUlZzJcblx0IgkJCQkJXAotCSAgICAiYWRkeCAlcjIsJTMsJSVnMVxuXHQiCQkJCQlcCi0JICAgOiAiPSZyIiAoKFVTSXR5cGUpKHIxKSksCQkJCQlcCi0JICAgICAiPSZyIiAoKFVTSXR5cGUpKHIwKSkJCQkJCVwKLQkgICA6ICIlckoiICgoVVNJdHlwZSkoeDMpKSwJCQkJCVwKLQkgICAgICJySSIgKChVU0l0eXBlKSh5MykpLAkJCQkJXAotCSAgICAgIiVySiIgKChVU0l0eXBlKSh4MikpLAkJCQkJXAotCSAgICAgInJJIiAoKFVTSXR5cGUpKHkyKSksCQkJCQlcCi0JICAgICAiJXJKIiAoKFVTSXR5cGUpKHgxKSksCQkJCQlcCi0JICAgICAickkiICgoVVNJdHlwZSkoeTEpKSwJCQkJCVwKLQkgICAgICIlckoiICgoVVNJdHlwZSkoeDApKSwJCQkJCVwKLQkgICAgICJySSIgKChVU0l0eXBlKSh5MCkpCQkJCQlcCi0JICAgOiAiY2MiLCAiZzEiLCAiZzIiKTsJCQkJCQlcCi0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogIj1yIiAoX3QxKSwgIj1yIiAoX3QyKSk7CQkJXAotICAgIHIzID0gX3QxOyByMiA9IF90MjsJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fRlBfRlJBQ19TVUJfNChyMyxyMixyMSxyMCx4Myx4Mix4MSx4MCx5Myx5Mix5MSx5MCkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICAvKiBXZSBuZWVkIHRvIGZvb2wgZ2NjLCAgYXMgd2UgbmVlZCB0byBwYXNzIG1vcmUgdGhhbiAxMAkJXAotICAgICAgIGlucHV0L291dHB1dHMuICAqLwkJCQkJCVwKLSAgICByZWdpc3RlciBVU0l0eXBlIF90MSBfX2FzbV9fICgiZzEiKSwgX3QyIF9fYXNtX18gKCJnMiIpOwkJXAotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCi0JICAgICJzdWJjYyAlcjgsJTksJTFcblx0IgkJCQkJXAotCSAgICAic3VieGNjICVyNiwlNywlMFxuXHQiCQkJCQlcCi0JICAgICJzdWJ4Y2MgJXI0LCU1LCUlZzJcblx0IgkJCQkJXAotCSAgICAic3VieCAlcjIsJTMsJSVnMVxuXHQiCQkJCQlcCi0JICAgOiAiPSZyIiAoKFVTSXR5cGUpKHIxKSksCQkJCQlcCi0JICAgICAiPSZyIiAoKFVTSXR5cGUpKHIwKSkJCQkJCVwKLQkgICA6ICIlckoiICgoVVNJdHlwZSkoeDMpKSwJCQkJCVwKLQkgICAgICJySSIgKChVU0l0eXBlKSh5MykpLAkJCQkJXAotCSAgICAgIiVySiIgKChVU0l0eXBlKSh4MikpLAkJCQkJXAotCSAgICAgInJJIiAoKFVTSXR5cGUpKHkyKSksCQkJCQlcCi0JICAgICAiJXJKIiAoKFVTSXR5cGUpKHgxKSksCQkJCQlcCi0JICAgICAickkiICgoVVNJdHlwZSkoeTEpKSwJCQkJCVwKLQkgICAgICIlckoiICgoVVNJdHlwZSkoeDApKSwJCQkJCVwKLQkgICAgICJySSIgKChVU0l0eXBlKSh5MCkpCQkJCQlcCi0JICAgOiAiY2MiLCAiZzEiLCAiZzIiKTsJCQkJCQlcCi0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogIj1yIiAoX3QxKSwgIj1yIiAoX3QyKSk7CQkJXAotICAgIHIzID0gX3QxOyByMiA9IF90MjsJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fRlBfRlJBQ19ERUNfMyh4Mix4MSx4MCx5Mix5MSx5MCkgX19GUF9GUkFDX1NVQl8zKHgyLHgxLHgwLHgyLHgxLHgwLHkyLHkxLHkwKQotCi0jZGVmaW5lIF9fRlBfRlJBQ19ERUNfNCh4Myx4Mix4MSx4MCx5Myx5Mix5MSx5MCkgX19GUF9GUkFDX1NVQl80KHgzLHgyLHgxLHgwLHgzLHgyLHgxLHgwLHkzLHkyLHkxLHkwKQotCi0jZGVmaW5lIF9fRlBfRlJBQ19BRERJXzQoeDMseDIseDEseDAsaSkJCQkJCVwKLSAgX19hc21fXyAoImFkZGNjICUzLCU0LCUzXG5cdCIJCQkJCQlcCi0JICAgImFkZHhjYyAlMiwlJWcwLCUyXG5cdCIJCQkJCVwKLQkgICAiYWRkeGNjICUxLCUlZzAsJTFcblx0IgkJCQkJXAotCSAgICJhZGR4ICUwLCUlZzAsJTBcblx0IgkJCQkJXAotCSAgIDogIj0mciIgKChVU0l0eXBlKSh4MykpLAkJCQkJXAotCSAgICAgIj0mciIgKChVU0l0eXBlKSh4MikpLAkJCQkJXAotCSAgICAgIj0mciIgKChVU0l0eXBlKSh4MSkpLAkJCQkJXAotCSAgICAgIj0mciIgKChVU0l0eXBlKSh4MCkpCQkJCQlcCi0JICAgOiAickkiICgoVVNJdHlwZSkoaSkpLAkJCQkJXAotCSAgICAgIjAiICgoVVNJdHlwZSkoeDMpKSwJCQkJCVwKLQkgICAgICIxIiAoKFVTSXR5cGUpKHgyKSksCQkJCQlcCi0JICAgICAiMiIgKChVU0l0eXBlKSh4MSkpLAkJCQkJXAotCSAgICAgIjMiICgoVVNJdHlwZSkoeDApKQkJCQkJXAotCSAgIDogImNjIikKLQotI2lmbmRlZiBDT05GSUdfU01QCi1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpsYXN0X3Rhc2tfdXNlZF9tYXRoOwotI2VuZGlmCi0KLS8qIE9idGFpbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAqLwotI2lmbmRlZiBGUF9ST1VORE1PREUKLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIEZQX1JPVU5ETU9ERQkoKGN1cnJlbnQtPnRocmVhZC5mc3IgPj4gMzApICYgMHgzKQorI2lmbmRlZiBfX19BU01fU1BBUkNfU0ZQX01BQ0hJTkVfSAorI2RlZmluZSBfX19BU01fU1BBUkNfU0ZQX01BQ0hJTkVfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NmcC1tYWNoaW5lXzY0Lmg+CiAjZWxzZQotI2RlZmluZSBGUF9ST1VORE1PREUJKChsYXN0X3Rhc2tfdXNlZF9tYXRoLT50aHJlYWQuZnNyID4+IDMwKSAmIDB4MykKKyNpbmNsdWRlIDxhc20tc3BhcmMvc2ZwLW1hY2hpbmVfMzIuaD4KICNlbmRpZgogI2VuZGlmCi0KLS8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KLSNkZWZpbmUgRlBfRVhfSU5WQUxJRAkJKDEgPDwgNCkKLSNkZWZpbmUgRlBfRVhfT1ZFUkZMT1cJCSgxIDw8IDMpCi0jZGVmaW5lIEZQX0VYX1VOREVSRkxPVwkJKDEgPDwgMikKLSNkZWZpbmUgRlBfRVhfRElWWkVSTwkJKDEgPDwgMSkKLSNkZWZpbmUgRlBfRVhfSU5FWEFDVAkJKDEgPDwgMCkKLQotI2RlZmluZSBGUF9IQU5ETEVfRVhDRVBUSU9OUyByZXR1cm4gX2ZleAotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBGUF9JTkhJQklUX1JFU1VMVFMgKChjdXJyZW50LT50aHJlYWQuZnNyID4+IDIzKSAmIF9mZXgpCi0jZWxzZQotI2RlZmluZSBGUF9JTkhJQklUX1JFU1VMVFMgKChsYXN0X3Rhc2tfdXNlZF9tYXRoLT50aHJlYWQuZnNyID4+IDIzKSAmIF9mZXgpCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgRlBfVFJBUFBJTkdfRVhDRVBUSU9OUyAoKGN1cnJlbnQtPnRocmVhZC5mc3IgPj4gMjMpICYgMHgxZikKLSNlbHNlCi0jZGVmaW5lIEZQX1RSQVBQSU5HX0VYQ0VQVElPTlMgKChsYXN0X3Rhc2tfdXNlZF9tYXRoLT50aHJlYWQuZnNyID4+IDIzKSAmIDB4MWYpCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zZnAtbWFjaGluZV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2ZwLW1hY2hpbmVfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQ5YzNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2ZwLW1hY2hpbmVfMzIuaApAQCAtMCwwICsxLDIxMiBAQAorLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuCisgICBTcGFyYyB1c2VybGFuZCAoX1FfKikgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NywxOTk4LDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIChydGhAY3lnbnVzLmNvbSksCisJCSAgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opLAorCQkgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkgYW5kCisJCSAgUGV0ZXIgTWF5ZGVsbCAocG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51aykuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYKKyAgIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWZuZGVmIF9TRlBfTUFDSElORV9ICisjZGVmaW5lIF9TRlBfTUFDSElORV9ICisKKworI2RlZmluZSBfRlBfV19UWVBFX1NJWkUJCTMyCisjZGVmaW5lIF9GUF9XX1RZUEUJCXVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgX0ZQX1dTX1RZUEUJCXNpZ25lZCBsb25nCisjZGVmaW5lIF9GUF9JX1RZUEUJCWxvbmcKKworI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkJCQkJCVwKKyAgX0ZQX01VTF9NRUFUXzFfd2lkZShfRlBfV0ZSQUNCSVRTX1MsUixYLFksdW11bF9wcG1tKQorI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkJCQkJCVwKKyAgX0ZQX01VTF9NRUFUXzJfd2lkZShfRlBfV0ZSQUNCSVRTX0QsUixYLFksdW11bF9wcG1tKQorI2RlZmluZSBfRlBfTVVMX01FQVRfUShSLFgsWSkJCQkJCVwKKyAgX0ZQX01VTF9NRUFUXzRfd2lkZShfRlBfV0ZSQUNCSVRTX1EsUixYLFksdW11bF9wcG1tKQorCisjZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKQlfRlBfRElWX01FQVRfMV91ZGl2KFMsUixYLFkpCisjZGVmaW5lIF9GUF9ESVZfTUVBVF9EKFIsWCxZKQlfRlBfRElWX01FQVRfMl91ZGl2KEQsUixYLFkpCisjZGVmaW5lIF9GUF9ESVZfTUVBVF9RKFIsWCxZKQlfRlBfRElWX01FQVRfNF91ZGl2KFEsUixYLFkpCisKKyNkZWZpbmUgX0ZQX05BTkZSQUNfUwkJKChfRlBfUU5BTkJJVF9TIDw8IDEpIC0gMSkKKyNkZWZpbmUgX0ZQX05BTkZSQUNfRAkJKChfRlBfUU5BTkJJVF9EIDw8IDEpIC0gMSksIC0xCisjZGVmaW5lIF9GUF9OQU5GUkFDX1EJCSgoX0ZQX1FOQU5CSVRfUSA8PCAxKSAtIDEpLCAtMSwgLTEsIC0xCisjZGVmaW5lIF9GUF9OQU5TSUdOX1MJCTAKKyNkZWZpbmUgX0ZQX05BTlNJR05fRAkJMAorI2RlZmluZSBfRlBfTkFOU0lHTl9RCQkwCisKKyNkZWZpbmUgX0ZQX0tFRVBOQU5GUkFDUCAxCisKKy8qIElmIG9uZSBOYU4gaXMgc2lnbmFsaW5nIGFuZCB0aGUgb3RoZXIgaXMgbm90LAorICogd2UgY2hvb3NlIHRoYXQgb25lLCBvdGhlcndpc2Ugd2UgY2hvb3NlIFguCisgKi8KKy8qIEZvciBfUXBfKiBhbmQgX1FfKiwgdGhpcyBzaG91bGQgcHJlZmVyIFgsIGZvcgorICogQ1BVIGluc3RydWN0aW9uIGVtdWxhdGlvbiB0aGlzIHNob3VsZCBwcmVmZXIgWS4KKyAqIChzZWUgU1BBTXY5IEIuMi4yIHNlY3Rpb24pLgorICovCisjZGVmaW5lIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZLCBPUCkJCQlcCisgIGRvIHsJCQkJCQkJCVwKKyAgICBpZiAoKF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWSkgJiBfRlBfUU5BTkJJVF8jI2ZzKQkJXAorCSYmICEoX0ZQX0ZSQUNfSElHSF9SQVdfIyNmcyhYKSAmIF9GUF9RTkFOQklUXyMjZnMpKQlcCisgICAgICB7CQkJCQkJCQlcCisJUiMjX3MgPSBYIyNfczsJCQkJCQlcCisJX0ZQX0ZSQUNfQ09QWV8jI3djKFIsWCk7CQkJCVwKKyAgICAgIH0JCQkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCVwKKwlSIyNfcyA9IFkjI19zOwkJCQkJCVwKKwlfRlBfRlJBQ19DT1BZXyMjd2MoUixZKTsJCQkJXAorICAgICAgfQkJCQkJCQkJXAorICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIFNvbWUgYXNzZW1ibHkgdG8gc3BlZWQgdGhpbmdzIHVwLiAqLworI2RlZmluZSBfX0ZQX0ZSQUNfQUREXzMocjIscjEscjAseDIseDEseDAseTIseTEseTApCQkJXAorICBfX2FzbV9fICgiYWRkY2MgJXI3LCU4LCUyXG5cdCIJCQkJCVwKKwkgICAiYWRkeGNjICVyNSwlNiwlMVxuXHQiCQkJCQlcCisJICAgImFkZHggJXIzLCU0LCUwXG4iCQkJCQkJXAorCSAgIDogIj1yIiAoKFVTSXR5cGUpKHIyKSksCQkJCQlcCisJICAgICAiPSZyIiAoKFVTSXR5cGUpKHIxKSksCQkJCQlcCisJICAgICAiPSZyIiAoKFVTSXR5cGUpKHIwKSkJCQkJCVwKKwkgICA6ICIlckoiICgoVVNJdHlwZSkoeDIpKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MikpLAkJCQkJXAorCSAgICAgIiVySiIgKChVU0l0eXBlKSh4MSkpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkxKSksCQkJCQlcCisJICAgICAiJXJKIiAoKFVTSXR5cGUpKHgwKSksCQkJCQlcCisJICAgICAickkiICgoVVNJdHlwZSkoeTApKQkJCQkJXAorCSAgIDogImNjIikKKworI2RlZmluZSBfX0ZQX0ZSQUNfU1VCXzMocjIscjEscjAseDIseDEseDAseTIseTEseTApCQkJXAorICBfX2FzbV9fICgic3ViY2MgJXI3LCU4LCUyXG5cdCIJCQkJCVwKKwkgICAgInN1YnhjYyAlcjUsJTYsJTFcblx0IgkJCQkJXAorCSAgICAic3VieCAlcjMsJTQsJTBcbiIJCQkJCQlcCisJICAgOiAiPXIiICgoVVNJdHlwZSkocjIpKSwJCQkJCVwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkocjEpKSwJCQkJCVwKKwkgICAgICI9JnIiICgoVVNJdHlwZSkocjApKQkJCQkJXAorCSAgIDogIiVySiIgKChVU0l0eXBlKSh4MikpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkyKSksCQkJCQlcCisJICAgICAiJXJKIiAoKFVTSXR5cGUpKHgxKSksCQkJCQlcCisJICAgICAickkiICgoVVNJdHlwZSkoeTEpKSwJCQkJCVwKKwkgICAgICIlckoiICgoVVNJdHlwZSkoeDApKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MCkpCQkJCQlcCisJICAgOiAiY2MiKQorCisjZGVmaW5lIF9fRlBfRlJBQ19BRERfNChyMyxyMixyMSxyMCx4Myx4Mix4MSx4MCx5Myx5Mix5MSx5MCkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICAvKiBXZSBuZWVkIHRvIGZvb2wgZ2NjLCAgYXMgd2UgbmVlZCB0byBwYXNzIG1vcmUgdGhhbiAxMAkJXAorICAgICAgIGlucHV0L291dHB1dHMuICAqLwkJCQkJCVwKKyAgICByZWdpc3RlciBVU0l0eXBlIF90MSBfX2FzbV9fICgiZzEiKSwgX3QyIF9fYXNtX18gKCJnMiIpOwkJXAorICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisJICAgICJhZGRjYyAlcjgsJTksJTFcblx0IgkJCQkJXAorCSAgICAiYWRkeGNjICVyNiwlNywlMFxuXHQiCQkJCQlcCisJICAgICJhZGR4Y2MgJXI0LCU1LCUlZzJcblx0IgkJCQkJXAorCSAgICAiYWRkeCAlcjIsJTMsJSVnMVxuXHQiCQkJCQlcCisJICAgOiAiPSZyIiAoKFVTSXR5cGUpKHIxKSksCQkJCQlcCisJICAgICAiPSZyIiAoKFVTSXR5cGUpKHIwKSkJCQkJCVwKKwkgICA6ICIlckoiICgoVVNJdHlwZSkoeDMpKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MykpLAkJCQkJXAorCSAgICAgIiVySiIgKChVU0l0eXBlKSh4MikpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkyKSksCQkJCQlcCisJICAgICAiJXJKIiAoKFVTSXR5cGUpKHgxKSksCQkJCQlcCisJICAgICAickkiICgoVVNJdHlwZSkoeTEpKSwJCQkJCVwKKwkgICAgICIlckoiICgoVVNJdHlwZSkoeDApKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MCkpCQkJCQlcCisJICAgOiAiY2MiLCAiZzEiLCAiZzIiKTsJCQkJCQlcCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogIj1yIiAoX3QxKSwgIj1yIiAoX3QyKSk7CQkJXAorICAgIHIzID0gX3QxOyByMiA9IF90MjsJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fRlBfRlJBQ19TVUJfNChyMyxyMixyMSxyMCx4Myx4Mix4MSx4MCx5Myx5Mix5MSx5MCkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICAvKiBXZSBuZWVkIHRvIGZvb2wgZ2NjLCAgYXMgd2UgbmVlZCB0byBwYXNzIG1vcmUgdGhhbiAxMAkJXAorICAgICAgIGlucHV0L291dHB1dHMuICAqLwkJCQkJCVwKKyAgICByZWdpc3RlciBVU0l0eXBlIF90MSBfX2FzbV9fICgiZzEiKSwgX3QyIF9fYXNtX18gKCJnMiIpOwkJXAorICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisJICAgICJzdWJjYyAlcjgsJTksJTFcblx0IgkJCQkJXAorCSAgICAic3VieGNjICVyNiwlNywlMFxuXHQiCQkJCQlcCisJICAgICJzdWJ4Y2MgJXI0LCU1LCUlZzJcblx0IgkJCQkJXAorCSAgICAic3VieCAlcjIsJTMsJSVnMVxuXHQiCQkJCQlcCisJICAgOiAiPSZyIiAoKFVTSXR5cGUpKHIxKSksCQkJCQlcCisJICAgICAiPSZyIiAoKFVTSXR5cGUpKHIwKSkJCQkJCVwKKwkgICA6ICIlckoiICgoVVNJdHlwZSkoeDMpKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MykpLAkJCQkJXAorCSAgICAgIiVySiIgKChVU0l0eXBlKSh4MikpLAkJCQkJXAorCSAgICAgInJJIiAoKFVTSXR5cGUpKHkyKSksCQkJCQlcCisJICAgICAiJXJKIiAoKFVTSXR5cGUpKHgxKSksCQkJCQlcCisJICAgICAickkiICgoVVNJdHlwZSkoeTEpKSwJCQkJCVwKKwkgICAgICIlckoiICgoVVNJdHlwZSkoeDApKSwJCQkJCVwKKwkgICAgICJySSIgKChVU0l0eXBlKSh5MCkpCQkJCQlcCisJICAgOiAiY2MiLCAiZzEiLCAiZzIiKTsJCQkJCQlcCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogIj1yIiAoX3QxKSwgIj1yIiAoX3QyKSk7CQkJXAorICAgIHIzID0gX3QxOyByMiA9IF90MjsJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fRlBfRlJBQ19ERUNfMyh4Mix4MSx4MCx5Mix5MSx5MCkgX19GUF9GUkFDX1NVQl8zKHgyLHgxLHgwLHgyLHgxLHgwLHkyLHkxLHkwKQorCisjZGVmaW5lIF9fRlBfRlJBQ19ERUNfNCh4Myx4Mix4MSx4MCx5Myx5Mix5MSx5MCkgX19GUF9GUkFDX1NVQl80KHgzLHgyLHgxLHgwLHgzLHgyLHgxLHgwLHkzLHkyLHkxLHkwKQorCisjZGVmaW5lIF9fRlBfRlJBQ19BRERJXzQoeDMseDIseDEseDAsaSkJCQkJCVwKKyAgX19hc21fXyAoImFkZGNjICUzLCU0LCUzXG5cdCIJCQkJCQlcCisJICAgImFkZHhjYyAlMiwlJWcwLCUyXG5cdCIJCQkJCVwKKwkgICAiYWRkeGNjICUxLCUlZzAsJTFcblx0IgkJCQkJXAorCSAgICJhZGR4ICUwLCUlZzAsJTBcblx0IgkJCQkJXAorCSAgIDogIj0mciIgKChVU0l0eXBlKSh4MykpLAkJCQkJXAorCSAgICAgIj0mciIgKChVU0l0eXBlKSh4MikpLAkJCQkJXAorCSAgICAgIj0mciIgKChVU0l0eXBlKSh4MSkpLAkJCQkJXAorCSAgICAgIj0mciIgKChVU0l0eXBlKSh4MCkpCQkJCQlcCisJICAgOiAickkiICgoVVNJdHlwZSkoaSkpLAkJCQkJXAorCSAgICAgIjAiICgoVVNJdHlwZSkoeDMpKSwJCQkJCVwKKwkgICAgICIxIiAoKFVTSXR5cGUpKHgyKSksCQkJCQlcCisJICAgICAiMiIgKChVU0l0eXBlKSh4MSkpLAkJCQkJXAorCSAgICAgIjMiICgoVVNJdHlwZSkoeDApKQkJCQkJXAorCSAgIDogImNjIikKKworI2lmbmRlZiBDT05GSUdfU01QCitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpsYXN0X3Rhc2tfdXNlZF9tYXRoOworI2VuZGlmCisKKy8qIE9idGFpbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAqLworI2lmbmRlZiBGUF9ST1VORE1PREUKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIEZQX1JPVU5ETU9ERQkoKGN1cnJlbnQtPnRocmVhZC5mc3IgPj4gMzApICYgMHgzKQorI2Vsc2UKKyNkZWZpbmUgRlBfUk9VTkRNT0RFCSgobGFzdF90YXNrX3VzZWRfbWF0aC0+dGhyZWFkLmZzciA+PiAzMCkgJiAweDMpCisjZW5kaWYKKyNlbmRpZgorCisvKiBFeGNlcHRpb24gZmxhZ3MuICovCisjZGVmaW5lIEZQX0VYX0lOVkFMSUQJCSgxIDw8IDQpCisjZGVmaW5lIEZQX0VYX09WRVJGTE9XCQkoMSA8PCAzKQorI2RlZmluZSBGUF9FWF9VTkRFUkZMT1cJCSgxIDw8IDIpCisjZGVmaW5lIEZQX0VYX0RJVlpFUk8JCSgxIDw8IDEpCisjZGVmaW5lIEZQX0VYX0lORVhBQ1QJCSgxIDw8IDApCisKKyNkZWZpbmUgRlBfSEFORExFX0VYQ0VQVElPTlMgcmV0dXJuIF9mZXgKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgRlBfSU5ISUJJVF9SRVNVTFRTICgoY3VycmVudC0+dGhyZWFkLmZzciA+PiAyMykgJiBfZmV4KQorI2Vsc2UKKyNkZWZpbmUgRlBfSU5ISUJJVF9SRVNVTFRTICgobGFzdF90YXNrX3VzZWRfbWF0aC0+dGhyZWFkLmZzciA+PiAyMykgJiBfZmV4KQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIEZQX1RSQVBQSU5HX0VYQ0VQVElPTlMgKChjdXJyZW50LT50aHJlYWQuZnNyID4+IDIzKSAmIDB4MWYpCisjZWxzZQorI2RlZmluZSBGUF9UUkFQUElOR19FWENFUFRJT05TICgobGFzdF90YXNrX3VzZWRfbWF0aC0+dGhyZWFkLmZzciA+PiAyMykgJiAweDFmKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2ZwLW1hY2hpbmVfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NmcC1tYWNoaW5lXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5MTNlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NmcC1tYWNoaW5lXzY0LmgKQEAgLTAsMCArMSw5MyBAQAorLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuCisgICBTcGFyYzY0IGtlcm5lbCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTgsMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBIZW5kZXJzb24gKHJ0aEBjeWdudXMuY29tKSwKKwkJICBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikgYW5kCisJCSAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorICAgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgX1NGUF9NQUNISU5FX0gKKyNkZWZpbmUgX1NGUF9NQUNISU5FX0gKKworI2RlZmluZSBfRlBfV19UWVBFX1NJWkUJCTY0CisjZGVmaW5lIF9GUF9XX1RZUEUJCXVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgX0ZQX1dTX1RZUEUJCXNpZ25lZCBsb25nCisjZGVmaW5lIF9GUF9JX1RZUEUJCWxvbmcKKworI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkJCQkJCVwKKyAgX0ZQX01VTF9NRUFUXzFfaW1tKF9GUF9XRlJBQ0JJVFNfUyxSLFgsWSkKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX0QoUixYLFkpCQkJCQlcCisgIF9GUF9NVUxfTUVBVF8xX3dpZGUoX0ZQX1dGUkFDQklUU19ELFIsWCxZLHVtdWxfcHBtbSkKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX1EoUixYLFkpCQkJCQlcCisgIF9GUF9NVUxfTUVBVF8yX3dpZGUoX0ZQX1dGUkFDQklUU19RLFIsWCxZLHVtdWxfcHBtbSkKKworI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfaW1tKFMsUixYLFksX0ZQX0RJVl9IRUxQX2ltbSkKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUX0QoUixYLFkpCV9GUF9ESVZfTUVBVF8xX3VkaXZfbm9ybShELFIsWCxZKQorI2RlZmluZSBfRlBfRElWX01FQVRfUShSLFgsWSkJX0ZQX0RJVl9NRUFUXzJfdWRpdihRLFIsWCxZKQorCisjZGVmaW5lIF9GUF9OQU5GUkFDX1MJCSgoX0ZQX1FOQU5CSVRfUyA8PCAxKSAtIDEpCisjZGVmaW5lIF9GUF9OQU5GUkFDX0QJCSgoX0ZQX1FOQU5CSVRfRCA8PCAxKSAtIDEpCisjZGVmaW5lIF9GUF9OQU5GUkFDX1EJCSgoX0ZQX1FOQU5CSVRfUSA8PCAxKSAtIDEpLCAtMQorI2RlZmluZSBfRlBfTkFOU0lHTl9TCQkwCisjZGVmaW5lIF9GUF9OQU5TSUdOX0QJCTAKKyNkZWZpbmUgX0ZQX05BTlNJR05fUQkJMAorCisjZGVmaW5lIF9GUF9LRUVQTkFORlJBQ1AgMQorCisvKiBJZiBvbmUgTmFOIGlzIHNpZ25hbGluZyBhbmQgdGhlIG90aGVyIGlzIG5vdCwKKyAqIHdlIGNob29zZSB0aGF0IG9uZSwgb3RoZXJ3aXNlIHdlIGNob29zZSBYLgorICovCisvKiBGb3IgX1FwXyogYW5kIF9RXyosIHRoaXMgc2hvdWxkIHByZWZlciBYLCBmb3IKKyAqIENQVSBpbnN0cnVjdGlvbiBlbXVsYXRpb24gdGhpcyBzaG91bGQgcHJlZmVyIFkuCisgKiAoc2VlIFNQQU12OSBCLjIuMiBzZWN0aW9uKS4KKyAqLworI2RlZmluZSBfRlBfQ0hPT1NFTkFOKGZzLCB3YywgUiwgWCwgWSwgT1ApCQkJXAorICBkbyB7CQkJCQkJCQlcCisgICAgaWYgKChfRlBfRlJBQ19ISUdIX1JBV18jI2ZzKFkpICYgX0ZQX1FOQU5CSVRfIyNmcykJCVwKKwkmJiAhKF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWCkgJiBfRlBfUU5BTkJJVF8jI2ZzKSkJXAorICAgICAgewkJCQkJCQkJXAorCVIjI19zID0gWCMjX3M7CQkJCQkJXAorCV9GUF9GUkFDX0NPUFlfIyN3YyhSLFgpOwkJCQlcCisgICAgICB9CQkJCQkJCQlcCisgICAgZWxzZQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQlcCisJUiMjX3MgPSBZIyNfczsJCQkJCQlcCisJX0ZQX0ZSQUNfQ09QWV8jI3djKFIsWSk7CQkJCVwKKyAgICAgIH0JCQkJCQkJCVwKKyAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQkJXAorICB9IHdoaWxlICgwKQorCisvKiBPYnRhaW4gdGhlIGN1cnJlbnQgcm91bmRpbmcgbW9kZS4gKi8KKyNpZm5kZWYgRlBfUk9VTkRNT0RFCisjZGVmaW5lIEZQX1JPVU5ETU9ERQkoKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+eGZzclswXSA+PiAzMCkgJiAweDMpCisjZW5kaWYKKworLyogRXhjZXB0aW9uIGZsYWdzLiAqLworI2RlZmluZSBGUF9FWF9JTlZBTElECQkoMSA8PCA0KQorI2RlZmluZSBGUF9FWF9PVkVSRkxPVwkJKDEgPDwgMykKKyNkZWZpbmUgRlBfRVhfVU5ERVJGTE9XCQkoMSA8PCAyKQorI2RlZmluZSBGUF9FWF9ESVZaRVJPCQkoMSA8PCAxKQorI2RlZmluZSBGUF9FWF9JTkVYQUNUCQkoMSA8PCAwKQorCisjZGVmaW5lIEZQX0hBTkRMRV9FWENFUFRJT05TIHJldHVybiBfZmV4CisKKyNkZWZpbmUgRlBfSU5ISUJJVF9SRVNVTFRTICgoY3VycmVudF90aHJlYWRfaW5mbygpLT54ZnNyWzBdID4+IDIzKSAmIF9mZXgpCisKKyNkZWZpbmUgRlBfVFJBUFBJTkdfRVhDRVBUSU9OUyAoKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+eGZzclswXSA+PiAyMykgJiAweDFmKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2htYnVmLmgKaW5kZXggMWZmOWRhOC4uODNhMTYwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc2htYnVmLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2htYnVmLmgKQEAgLTExLDEzICsxMSwxOSBAQAogICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcwogICovCiAKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorIyBkZWZpbmUgUEFERElORyh4KQorI2Vsc2UKKyMgZGVmaW5lIFBBRERJTkcoeCkgdW5zaWduZWQgaW50IHg7CisjZW5kaWYKKwogc3RydWN0IHNobWlkNjRfZHMgewogCXN0cnVjdCBpcGM2NF9wZXJtCXNobV9wZXJtOwkvKiBvcGVyYXRpb24gcGVybXMgKi8KLQl1bnNpZ25lZCBpbnQJCV9fcGFkMTsKKwlQQURESU5HKF9fcGFkMSkKIAlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLwotCXVuc2lnbmVkIGludAkJX19wYWQyOworCVBBRERJTkcoX19wYWQyKQogCV9fa2VybmVsX3RpbWVfdAkJc2htX2R0aW1lOwkvKiBsYXN0IGRldGFjaCB0aW1lICovCi0JdW5zaWduZWQgaW50CQlfX3BhZDM7CisJUEFERElORyhfX3BhZDMpCiAJX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KIAlzaXplX3QJCQlzaG1fc2Vnc3o7CS8qIHNpemUgb2Ygc2VnbWVudCAoYnl0ZXMpICovCiAJX19rZXJuZWxfcGlkX3QJCXNobV9jcGlkOwkvKiBwaWQgb2YgY3JlYXRvciAqLwpAQCAtMzksNCArNDUsNiBAQAogCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OwogfTsKIAorI3VuZGVmIFBBRERJTkcKKwogI2VuZGlmIC8qIF9TUEFSQ19TSE1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NobXBhcmFtLmgKaW5kZXggNTlhMTI0My4uMTZmZGE3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc2htcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zaG1wYXJhbS5oCkBAIC0xLDExICsxLDggQEAKLSNpZm5kZWYgX0FTTVNQQVJDX1NITVBBUkFNX0gKLSNkZWZpbmUgX0FTTVNQQVJDX1NITVBBUkFNX0gKLQotI2RlZmluZSBfX0FSQ0hfRk9SQ0VfU0hNTEJBIAkxCi0KLWV4dGVybiBpbnQgdmFjX2NhY2hlX3NpemU7Ci0jZGVmaW5lIFNITUxCQSAodmFjX2NhY2hlX3NpemUgPyB2YWNfY2FjaGVfc2l6ZSA6IFwKLQkJKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40YyA/ICg2NCAqIDEwMjQpIDogXAotCQkgKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40ID8gKDEyOCAqIDEwMjQpIDogUEFHRV9TSVpFKSkpCi0KLSNlbmRpZiAvKiBfQVNNU1BBUkNfU0hNUEFSQU1fSCAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfU0hNUEFSQU1fSAorI2RlZmluZSBfX19BU01fU1BBUkNfU0hNUEFSQU1fSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NobXBhcmFtXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9zaG1wYXJhbV8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NobXBhcmFtXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zaG1wYXJhbV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTEyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zaG1wYXJhbV8zMi5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX0FTTVNQQVJDX1NITVBBUkFNX0gKKyNkZWZpbmUgX0FTTVNQQVJDX1NITVBBUkFNX0gKKworI2RlZmluZSBfX0FSQ0hfRk9SQ0VfU0hNTEJBIAkxCisKK2V4dGVybiBpbnQgdmFjX2NhY2hlX3NpemU7CisjZGVmaW5lIFNITUxCQSAodmFjX2NhY2hlX3NpemUgPyB2YWNfY2FjaGVfc2l6ZSA6IFwKKwkJKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40YyA/ICg2NCAqIDEwMjQpIDogXAorCQkgKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40ID8gKDEyOCAqIDEwMjQpIDogUEFHRV9TSVpFKSkpCisKKyNlbmRpZiAvKiBfQVNNU1BBUkNfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2htcGFyYW1fNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NobXBhcmFtXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkMGQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NobXBhcmFtXzY0LmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfQVNNU1BBUkM2NF9TSE1QQVJBTV9ICisjZGVmaW5lIF9BU01TUEFSQzY0X1NITVBBUkFNX0gKKworI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgorCisjZGVmaW5lIF9fQVJDSF9GT1JDRV9TSE1MQkEJMQorLyogYXR0YWNoIGFkZHIgYSBtdWx0aXBsZSBvZiB0aGlzICovCisjZGVmaW5lCVNITUxCQQkoKFBBR0VfU0laRSA+IEwxRENBQ0hFX1NJWkUpID8gUEFHRV9TSVpFIDogTDFEQ0FDSEVfU0laRSkKKworI2VuZGlmIC8qIF9BU01TUEFSQzY0X1NITVBBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2NvbnRleHQuaAppbmRleCBjNWZiNjBkLi44MmZjN2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zaWdjb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnY29udGV4dC5oCkBAIC0xLDYyICsxLDggQEAKLSNpZm5kZWYgX19TUEFSQ19TSUdDT05URVhUX0gKLSNkZWZpbmUgX19TUEFSQ19TSUdDT05URVhUX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNkZWZpbmUgX19TVU5PU19NQVhXSU4gICAzMQotCi0vKiBUaGlzIGlzIHdoYXQgU3VuT1MgZG9lcywgc28gc2hhbGwgSS4gKi8KLXN0cnVjdCBzaWdjb250ZXh0IHsKLQlpbnQgc2lnY19vbnN0YWNrOyAgICAgIC8qIHN0YXRlIHRvIHJlc3RvcmUgKi8KLQlpbnQgc2lnY19tYXNrOyAgICAgICAgIC8qIHNpZ21hc2sgdG8gcmVzdG9yZSAqLwotCWludCBzaWdjX3NwOyAgICAgICAgICAgLyogc3RhY2sgcG9pbnRlciAqLwotCWludCBzaWdjX3BjOyAgICAgICAgICAgLyogcHJvZ3JhbSBjb3VudGVyICovCi0JaW50IHNpZ2NfbnBjOyAgICAgICAgICAvKiBuZXh0IHByb2dyYW0gY291bnRlciAqLwotCWludCBzaWdjX3BzcjsgICAgICAgICAgLyogZm9yIGNvbmRpdGlvbiBjb2RlcyBldGMgKi8KLQlpbnQgc2lnY19nMTsgICAgICAgICAgIC8qIFVzZXIgdXNlcyB0aGVzZSB0d28gcmVnaXN0ZXJzICovCi0JaW50IHNpZ2NfbzA7ICAgICAgICAgICAvKiB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4gKi8KLQotCS8qIE5vdyBjb21lcyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHVzZXJzIHdpbmRvdyBzZXQKLQkgKiBhdCB0aGUgdGltZSBvZiB0aGUgc2lnbmFsLgotCSAqLwotCWludCBzaWdjX29zd2luczsgICAgICAgLyogb3V0c3RhbmRpbmcgd2luZG93cyAqLwotCi0JLyogc3RhY2sgcHRycyBmb3IgZWFjaCByZWd3aW4gYnVmICovCi0JY2hhciAqc2lnY19zcGJ1ZltfX1NVTk9TX01BWFdJTl07Ci0KLQkvKiBXaW5kb3dzIHRvIHJlc3RvcmUgYWZ0ZXIgc2lnbmFsICovCi0Jc3RydWN0IHsKLQkJdW5zaWduZWQgbG9uZwlsb2NhbHNbOF07Ci0JCXVuc2lnbmVkIGxvbmcJaW5zWzhdOwotCX0gc2lnY193YnVmW19fU1VOT1NfTUFYV0lOXTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIHBzcjsKLQkJdW5zaWduZWQgbG9uZyBwYzsKLQkJdW5zaWduZWQgbG9uZyBucGM7Ci0JCXVuc2lnbmVkIGxvbmcgeTsKLQkJdW5zaWduZWQgbG9uZyB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KLQl9CQlzaV9yZWdzOwotCWludAkJc2lfbWFzazsKLX0gX19zaWdpbmZvX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCAgIGxvbmcgc2lfZmxvYXRfcmVncyBbMzJdOwotCXVuc2lnbmVkICAgbG9uZyBzaV9mc3I7Ci0JdW5zaWduZWQgICBsb25nIHNpX2ZwcWRlcHRoOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGxvbmcgKmluc25fYWRkcjsKLQkJdW5zaWduZWQgbG9uZyBpbnNuOwotCX0gc2lfZnBxdWV1ZSBbMTZdOwotfSBfX3NpZ2luZm9fZnB1X3Q7Ci0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotI2VuZGlmIC8qIChfX0tFUk5FTF9fKSAqLwotCi0jZW5kaWYgLyogIShfX1NQQVJDX1NJR0NPTlRFWFRfSCkgKi8KKyNpZm5kZWYgX19fQVNNX1NQQVJDX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfX19BU01fU1BBUkNfU0lHQ09OVEVYVF9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvc2lnY29udGV4dF82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvc2lnY29udGV4dF8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2NvbnRleHRfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2NvbnRleHRfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWZiNjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnY29udGV4dF8zMi5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgX19TUEFSQ19TSUdDT05URVhUX0gKKyNkZWZpbmUgX19TUEFSQ19TSUdDT05URVhUX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgX19TVU5PU19NQVhXSU4gICAzMQorCisvKiBUaGlzIGlzIHdoYXQgU3VuT1MgZG9lcywgc28gc2hhbGwgSS4gKi8KK3N0cnVjdCBzaWdjb250ZXh0IHsKKwlpbnQgc2lnY19vbnN0YWNrOyAgICAgIC8qIHN0YXRlIHRvIHJlc3RvcmUgKi8KKwlpbnQgc2lnY19tYXNrOyAgICAgICAgIC8qIHNpZ21hc2sgdG8gcmVzdG9yZSAqLworCWludCBzaWdjX3NwOyAgICAgICAgICAgLyogc3RhY2sgcG9pbnRlciAqLworCWludCBzaWdjX3BjOyAgICAgICAgICAgLyogcHJvZ3JhbSBjb3VudGVyICovCisJaW50IHNpZ2NfbnBjOyAgICAgICAgICAvKiBuZXh0IHByb2dyYW0gY291bnRlciAqLworCWludCBzaWdjX3BzcjsgICAgICAgICAgLyogZm9yIGNvbmRpdGlvbiBjb2RlcyBldGMgKi8KKwlpbnQgc2lnY19nMTsgICAgICAgICAgIC8qIFVzZXIgdXNlcyB0aGVzZSB0d28gcmVnaXN0ZXJzICovCisJaW50IHNpZ2NfbzA7ICAgICAgICAgICAvKiB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4gKi8KKworCS8qIE5vdyBjb21lcyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHVzZXJzIHdpbmRvdyBzZXQKKwkgKiBhdCB0aGUgdGltZSBvZiB0aGUgc2lnbmFsLgorCSAqLworCWludCBzaWdjX29zd2luczsgICAgICAgLyogb3V0c3RhbmRpbmcgd2luZG93cyAqLworCisJLyogc3RhY2sgcHRycyBmb3IgZWFjaCByZWd3aW4gYnVmICovCisJY2hhciAqc2lnY19zcGJ1ZltfX1NVTk9TX01BWFdJTl07CisKKwkvKiBXaW5kb3dzIHRvIHJlc3RvcmUgYWZ0ZXIgc2lnbmFsICovCisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZwlsb2NhbHNbOF07CisJCXVuc2lnbmVkIGxvbmcJaW5zWzhdOworCX0gc2lnY193YnVmW19fU1VOT1NfTUFYV0lOXTsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIHBzcjsKKwkJdW5zaWduZWQgbG9uZyBwYzsKKwkJdW5zaWduZWQgbG9uZyBucGM7CisJCXVuc2lnbmVkIGxvbmcgeTsKKwkJdW5zaWduZWQgbG9uZyB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KKwl9CQlzaV9yZWdzOworCWludAkJc2lfbWFzazsKK30gX19zaWdpbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCAgIGxvbmcgc2lfZmxvYXRfcmVncyBbMzJdOworCXVuc2lnbmVkICAgbG9uZyBzaV9mc3I7CisJdW5zaWduZWQgICBsb25nIHNpX2ZwcWRlcHRoOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgKmluc25fYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBpbnNuOworCX0gc2lfZnBxdWV1ZSBbMTZdOworfSBfX3NpZ2luZm9fZnB1X3Q7CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qIChfX0tFUk5FTF9fKSAqLworCisjZW5kaWYgLyogIShfX1NQQVJDX1NJR0NPTlRFWFRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2NvbnRleHRfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2NvbnRleHRfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzg2OGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnY29udGV4dF82NC5oCkBAIC0wLDAgKzEsODcgQEAKKyNpZm5kZWYgX19TUEFSQzY0X1NJR0NPTlRFWFRfSAorI2RlZmluZSBfX1NQQVJDNjRfU0lHQ09OVEVYVF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgX19TVU5PU19NQVhXSU4gICAzMQorCisvKiBUaGlzIGlzIHdoYXQgU3VuT1MgZG9lcywgc28gc2hhbGwgSSB1bmxlc3Mgd2UgdXNlIG5ldyAzMmJpdCBzaWduYWxzIG9yIHJ0IHNpZ25hbHMuICovCitzdHJ1Y3Qgc2lnY29udGV4dDMyIHsKKwlpbnQgc2lnY19vbnN0YWNrOyAgICAgIC8qIHN0YXRlIHRvIHJlc3RvcmUgKi8KKwlpbnQgc2lnY19tYXNrOyAgICAgICAgIC8qIHNpZ21hc2sgdG8gcmVzdG9yZSAqLworCWludCBzaWdjX3NwOyAgICAgICAgICAgLyogc3RhY2sgcG9pbnRlciAqLworCWludCBzaWdjX3BjOyAgICAgICAgICAgLyogcHJvZ3JhbSBjb3VudGVyICovCisJaW50IHNpZ2NfbnBjOyAgICAgICAgICAvKiBuZXh0IHByb2dyYW0gY291bnRlciAqLworCWludCBzaWdjX3BzcjsgICAgICAgICAgLyogZm9yIGNvbmRpdGlvbiBjb2RlcyBldGMgKi8KKwlpbnQgc2lnY19nMTsgICAgICAgICAgIC8qIFVzZXIgdXNlcyB0aGVzZSB0d28gcmVnaXN0ZXJzICovCisJaW50IHNpZ2NfbzA7ICAgICAgICAgICAvKiB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4gKi8KKworCS8qIE5vdyBjb21lcyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHVzZXJzIHdpbmRvdyBzZXQKKwkgKiBhdCB0aGUgdGltZSBvZiB0aGUgc2lnbmFsLgorCSAqLworCWludCBzaWdjX29zd2luczsgICAgICAgLyogb3V0c3RhbmRpbmcgd2luZG93cyAqLworCisJLyogc3RhY2sgcHRycyBmb3IgZWFjaCByZWd3aW4gYnVmICovCisJdW5zaWduZWQgc2lnY19zcGJ1ZltfX1NVTk9TX01BWFdJTl07CisKKwkvKiBXaW5kb3dzIHRvIHJlc3RvcmUgYWZ0ZXIgc2lnbmFsICovCisJc3RydWN0IHJlZ193aW5kb3czMiBzaWdjX3didWZbX19TVU5PU19NQVhXSU5dOworfTsKKworI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFRoaXMgaXMgd2hhdCB3ZSB1c2UgZm9yIDMyYml0IG5ldyBub24tcnQgc2lnbmFscy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGludCBwc3I7CisJCXVuc2lnbmVkIGludCBwYzsKKwkJdW5zaWduZWQgaW50IG5wYzsKKwkJdW5zaWduZWQgaW50IHk7CisJCXVuc2lnbmVkIGludCB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KKwl9CQkJc2lfcmVnczsKKwlpbnQJCQlzaV9tYXNrOworfSBfX3NpZ2luZm8zMl90OworCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkICAgaW50IHNpX2Zsb2F0X3JlZ3MgWzY0XTsKKwl1bnNpZ25lZCAgIGxvbmcgc2lfZnNyOworCXVuc2lnbmVkICAgbG9uZyBzaV9nc3I7CisJdW5zaWduZWQgICBsb25nIHNpX2ZwcnM7Cit9IF9fc2lnaW5mb19mcHVfdDsKKworLyogVGhpcyBpcyB3aGF0IFN1bk9TIGRvZXNuJ3QsIHNvIHdlIGhhdmUgdG8gd3JpdGUgdGhpcyBhbG9uZQorICAgYW5kIGRvIGl0IHByb3Blcmx5LiAqLworc3RydWN0IHNpZ2NvbnRleHQgeworCS8qIFRoZSBzaXplIG9mIHRoaXMgYXJyYXkgaGFzIHRvIG1hdGNoIFNJX01BWF9TSVpFIGZyb20gc2lnaW5mby5oICovCisJY2hhcgkJCXNpZ2NfaW5mb1sxMjhdOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcJdV9yZWdzWzE2XTsgLyogZ2xvYmFscyBhbmQgaW5zICovCisJCXVuc2lnbmVkIGxvbmcJdHN0YXRlOworCQl1bnNpZ25lZCBsb25nCXRwYzsKKwkJdW5zaWduZWQgbG9uZwl0bnBjOworCQl1bnNpZ25lZCBpbnQJeTsKKwkJdW5zaWduZWQgaW50CWZwcnM7CisJfQkJCXNpZ2NfcmVnczsKKwlfX3NpZ2luZm9fZnB1X3QgKglzaWdjX2ZwdV9zYXZlOworCXN0cnVjdCB7CisJCXZvaWQJKglzc19zcDsKKwkJaW50CQlzc19mbGFnczsKKwkJdW5zaWduZWQgbG9uZwlzc19zaXplOworCX0JCQlzaWdjX3N0YWNrOworCXVuc2lnbmVkIGxvbmcJCXNpZ2NfbWFzazsKK307CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX19TUEFSQzY0X1NJR0NPTlRFWFRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2luZm8uaAppbmRleCAzYzcxYWYxLi4yYzlmY2NmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zaWdpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnaW5mby5oCkBAIC0xLDE3ICsxLDggQEAKLSNpZm5kZWYgX1NQQVJDX1NJR0lORk9fSAotI2RlZmluZSBfU1BBUkNfU0lHSU5GT19ICi0KLSNkZWZpbmUgX19BUkNIX1NJX1VJRF9UCQl1bnNpZ25lZCBpbnQKLSNkZWZpbmUgX19BUkNIX1NJX1RSQVBOTwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgotCi0jZGVmaW5lIFNJX05PSU5GTwkzMjc2NwkJLyogbm8gaW5mb3JtYXRpb24gaW4gc2lnaW5mb190ICovCi0KLS8qCi0gKiBTSUdFTVQgc2lfY29kZXMKLSAqLwotI2RlZmluZSBFTVRfVEFHT1ZGCShfX1NJX0ZBVUxUfDEpCS8qIHRhZyBvdmVyZmxvdyAqLwotI2RlZmluZSBOU0lHRU1UCQkxCi0KLSNlbmRpZiAvKiAhKF9TUEFSQ19TSUdJTkZPX0gpICovCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19TSUdJTkZPX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1NJR0lORk9fSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NpZ2luZm9fNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NpZ2luZm9fMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zaWdpbmZvXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zaWdpbmZvXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M3MWFmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ2luZm9fMzIuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9TUEFSQ19TSUdJTkZPX0gKKyNkZWZpbmUgX1NQQVJDX1NJR0lORk9fSAorCisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVAkJdW5zaWduZWQgaW50CisjZGVmaW5lIF9fQVJDSF9TSV9UUkFQTk8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2RlZmluZSBTSV9OT0lORk8JMzI3NjcJCS8qIG5vIGluZm9ybWF0aW9uIGluIHNpZ2luZm9fdCAqLworCisvKgorICogU0lHRU1UIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgRU1UX1RBR09WRgkoX19TSV9GQVVMVHwxKQkvKiB0YWcgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgTlNJR0VNVAkJMQorCisjZW5kaWYgLyogIShfU1BBUkNfU0lHSU5GT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2lnaW5mb182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnaW5mb182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmU2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zaWdpbmZvXzY0LmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfU1BBUkM2NF9TSUdJTkZPX0gKKyNkZWZpbmUgX1NQQVJDNjRfU0lHSU5GT19ICisKKyNkZWZpbmUgU0lfUEFEX1NJWkUzMgkoKFNJX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDMpCisKKyNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUJKDQgKiBzaXplb2YoaW50KSkKKyNkZWZpbmUgX19BUkNIX1NJX1RSQVBOTworI2RlZmluZSBfX0FSQ0hfU0lfQkFORF9UIGludAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisKK3N0cnVjdCBjb21wYXRfc2lnaW5mbzsKKworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBTSV9OT0lORk8JMzI3NjcJCS8qIG5vIGluZm9ybWF0aW9uIGluIHNpZ2luZm9fdCAqLworCisvKgorICogU0lHRU1UIHNpX2NvZGVzCisgKi8KKyNkZWZpbmUgRU1UX1RBR09WRgkoX19TSV9GQVVMVHwxKQkvKiB0YWcgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgTlNJR0VNVAkJMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsLmgKaW5kZXggNjgzNjU3ZC4uMzZmNWY5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsLmgKQEAgLTEsMjA3ICsxLDggQEAKLSNpZm5kZWYgX0FTTVNQQVJDX1NJR05BTF9ICi0jZGVmaW5lIF9BU01TUEFSQ19TSUdOQUxfSAotCi0jaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCi0jaWZkZWYgX19LRVJORUxfXwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZW5kaWYKLSNlbmRpZgotCi0vKiBPbiB0aGUgU3BhcmMgdGhlIHNpZ25hbCBoYW5kbGVycyBnZXQgcGFzc2VkIGEgJ3N1Yi1zaWduYWwnIGNvZGUKLSAqIGZvciBjZXJ0YWluIHNpZ25hbCB0eXBlcywgd2hpY2ggd2UgZG9jdW1lbnQgaGVyZS4KLSAqLwotI2RlZmluZSBTSUdIVVAJCSAxCi0jZGVmaW5lIFNJR0lOVAkJIDIKLSNkZWZpbmUgU0lHUVVJVAkJIDMKLSNkZWZpbmUgU0lHSUxMCQkgNAotI2RlZmluZSAgICBTVUJTSUdfU1RBQ0sgICAgICAgMAotI2RlZmluZSAgICBTVUJTSUdfSUxMSU5TVCAgICAgMgotI2RlZmluZSAgICBTVUJTSUdfUFJJVklOU1QgICAgMwotI2RlZmluZSAgICBTVUJTSUdfQkFEVFJBUCh0KSAgKDB4ODAgKyAodCkpCi0KLSNkZWZpbmUgU0lHVFJBUAkJIDUKLSNkZWZpbmUgU0lHQUJSVAkJIDYKLSNkZWZpbmUgU0lHSU9UCQkgNgotCi0jZGVmaW5lIFNJR0VNVCAgICAgICAgICAgNwotI2RlZmluZSAgICBTVUJTSUdfVEFHICAgIDEwCi0KLSNkZWZpbmUgU0lHRlBFCQkgOAotI2RlZmluZSAgICBTVUJTSUdfRlBESVNBQkxFRCAgICAgMHg0MDAKLSNkZWZpbmUgICAgU1VCU0lHX0ZQRVJST1IgICAgICAgIDB4NDA0Ci0jZGVmaW5lICAgIFNVQlNJR19GUElOVE9WRkwgICAgICAweDAwMQotI2RlZmluZSAgICBTVUJTSUdfRlBTVFNJRyAgICAgICAgMHgwMDIKLSNkZWZpbmUgICAgU1VCU0lHX0lESVZaRVJPICAgICAgIDB4MDE0Ci0jZGVmaW5lICAgIFNVQlNJR19GUElORVhBQ1QgICAgICAweDBjNAotI2RlZmluZSAgICBTVUJTSUdfRlBESVZaRVJPICAgICAgMHgwYzgKLSNkZWZpbmUgICAgU1VCU0lHX0ZQVU5GTE9XICAgICAgIDB4MGNjCi0jZGVmaW5lICAgIFNVQlNJR19GUE9QRVJST1IgICAgICAweDBkMAotI2RlZmluZSAgICBTVUJTSUdfRlBPVkZMT1cgICAgICAgMHgwZDQKLQotI2RlZmluZSBTSUdLSUxMCQkgOQotI2RlZmluZSBTSUdCVVMgICAgICAgICAgMTAKLSNkZWZpbmUgICAgU1VCU0lHX0JVU1RJTUVPVVQgICAgMQotI2RlZmluZSAgICBTVUJTSUdfQUxJR05NRU5UICAgICAyCi0jZGVmaW5lICAgIFNVQlNJR19NSVNDRVJST1IgICAgIDUKLQotI2RlZmluZSBTSUdTRUdWCQkxMQotI2RlZmluZSAgICBTVUJTSUdfTk9NQVBQSU5HICAgICAzCi0jZGVmaW5lICAgIFNVQlNJR19QUk9URUNUSU9OICAgIDQKLSNkZWZpbmUgICAgU1VCU0lHX1NFR0VSUk9SICAgICAgNQotCi0jZGVmaW5lIFNJR1NZUwkJMTIKLQotI2RlZmluZSBTSUdQSVBFCQkxMwotI2RlZmluZSBTSUdBTFJNCQkxNAotI2RlZmluZSBTSUdURVJNCQkxNQotI2RlZmluZSBTSUdVUkcgICAgICAgICAgMTYKLQotLyogU3VuT1MgdmFsdWVzIHdoaWNoIGRldmlhdGUgZnJvbSB0aGUgTGludXgvaTM4NiBvbmVzICovCi0jZGVmaW5lIFNJR1NUT1AJCTE3Ci0jZGVmaW5lIFNJR1RTVFAJCTE4Ci0jZGVmaW5lIFNJR0NPTlQJCTE5Ci0jZGVmaW5lIFNJR0NITEQJCTIwCi0jZGVmaW5lIFNJR1RUSU4JCTIxCi0jZGVmaW5lIFNJR1RUT1UJCTIyCi0jZGVmaW5lIFNJR0lPCQkyMwotI2RlZmluZSBTSUdQT0xMCQlTSUdJTyAgIC8qIFN5c1YgbmFtZSBmb3IgU0lHSU8gKi8KLSNkZWZpbmUgU0lHWENQVQkJMjQKLSNkZWZpbmUgU0lHWEZTWgkJMjUKLSNkZWZpbmUgU0lHVlRBTFJNCTI2Ci0jZGVmaW5lIFNJR1BST0YJCTI3Ci0jZGVmaW5lIFNJR1dJTkNICTI4Ci0jZGVmaW5lIFNJR0xPU1QJCTI5Ci0jZGVmaW5lIFNJR1BXUgkJU0lHTE9TVAotI2RlZmluZSBTSUdVU1IxCQkzMAotI2RlZmluZSBTSUdVU1IyCQkzMQotCi0vKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQotICogaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLgotICovCi0KLSNkZWZpbmUgX19PTERfTlNJRwkzMgotI2RlZmluZSBfX05FV19OU0lHCTY0Ci0jZGVmaW5lIF9OU0lHX0JQVwkzMgotI2RlZmluZSBfTlNJR19XT1JEUwkoX19ORVdfTlNJRyAvIF9OU0lHX0JQVykKLQotI2RlZmluZSBTSUdSVE1JTgkzMgotI2RlZmluZSBTSUdSVE1BWAlfX05FV19OU0lHCi0KLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19XQU5UX1BPU0lYMUJfU0lHTkFMU19fKQotI2RlZmluZQlfTlNJRwkJX19ORVdfTlNJRwotI2RlZmluZSBfX25ld19zaWdzZXRfdAlzaWdzZXRfdAotI2RlZmluZSBfX25ld19zaWdhY3Rpb24Jc2lnYWN0aW9uCi0jZGVmaW5lIF9fb2xkX3NpZ3NldF90CW9sZF9zaWdzZXRfdAotI2RlZmluZSBfX29sZF9zaWdhY3Rpb24Jb2xkX3NpZ2FjdGlvbgorI2lmbmRlZiBfX19BU01fU1BBUkNfU0lHTkFMX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1NJR05BTF9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvc2lnbmFsXzY0Lmg+CiAjZWxzZQotI2RlZmluZSBfTlNJRwkJX19PTERfTlNJRwotI2RlZmluZSBfX29sZF9zaWdzZXRfdAlzaWdzZXRfdAotI2RlZmluZSBfX29sZF9zaWdhY3Rpb24Jc2lnYWN0aW9uCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NpZ25hbF8zMi5oPgogI2VuZGlmCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX29sZF9zaWdzZXRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcJc2lnW19OU0lHX1dPUkRTXTsKLX0gX19uZXdfc2lnc2V0X3Q7Ci0KLQotI2lmZGVmIF9fS0VSTkVMX18KLS8qIEEgU3VuT1Mgc2lnc3RhY2sgKi8KLXN0cnVjdCBzaWdzdGFjayB7Ci0JY2hhciAqdGhlX3N0YWNrOwotCWludCAgIGN1cl9zdGF0dXM7Ci19OwogI2VuZGlmCi0KLS8qIFNpZ3ZlYyBmbGFncyAqLwotI2RlZmluZSBfU1ZfU1NUQUNLICAgIDF1ICAgIC8qIFRoaXMgc2lnbmFsIGhhbmRsZXIgc2hvdWxkIHVzZSBzaWctc3RhY2sgKi8KLSNkZWZpbmUgX1NWX0lOVFIgICAgICAydSAgICAvKiBTaWcgcmV0dXJuIHNob3VsZCBub3QgcmVzdGFydCBzeXN0ZW0gY2FsbCAqLwotI2RlZmluZSBfU1ZfUkVTRVQgICAgIDR1ICAgIC8qIFNldCBoYW5kbGVyIHRvIFNJR19ERkwgdXBvbiB0YWtlbiBzaWduYWwgKi8KLSNkZWZpbmUgX1NWX0lHTkNISUxEICA4dSAgICAvKiBEbyBub3Qgc2VuZCBTSUdDSExEICovCi0KLS8qCi0gKiBzYV9mbGFncyB2YWx1ZXM6IFNBX1NUQUNLIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLCBidXQgd2lsbCBhbGxvdyB0aGUKLSAqIHVzYWdlIG9mIHNpZ25hbCBzdGFja3MgYnkgdXNpbmcgdGhlIChub3cgb2Jzb2xldGUpIHNhX3Jlc3RvcmVyIGZpZWxkIGluCi0gKiB0aGUgc2lnYWN0aW9uIHN0cnVjdHVyZSBhcyBhIHN0YWNrIHBvaW50ZXIuIFRoaXMgaXMgbm93IHBvc3NpYmxlIGR1ZSB0bwotICogdGhlIGNoYW5nZXMgaW4gc2lnbmFsIGhhbmRsaW5nLiBMQlQgMDEwNDkzLgotICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCi0gKi8KLSNkZWZpbmUgU0FfTk9DTERTVE9QCV9TVl9JR05DSElMRAotI2RlZmluZSBTQV9TVEFDSwlfU1ZfU1NUQUNLCi0jZGVmaW5lIFNBX09OU1RBQ0sJX1NWX1NTVEFDSwotI2RlZmluZSBTQV9SRVNUQVJUCV9TVl9JTlRSCi0jZGVmaW5lIFNBX09ORVNIT1QJX1NWX1JFU0VUCi0jZGVmaW5lIFNBX05PTUFTSwkweDIwdQotI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgxMDB1Ci0jZGVmaW5lIFNBX1NJR0lORk8JMHgyMDB1Ci0KLSNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDB4MDEJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDB4MDIJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMHgwNAkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KLQotLyogCi0gKiBzaWdhbHRzdGFjayBjb250cm9scwotICovCi0jZGVmaW5lIFNTX09OU1RBQ0sJMQotI2RlZmluZSBTU19ESVNBQkxFCTIKLQotI2RlZmluZSBNSU5TSUdTVEtTWgk0MDk2Ci0jZGVmaW5lIFNJR1NUS1NaCTE2Mzg0Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0vKgotICogREpIUgotICogU0FfU1RBVElDX0FMTE9DIGlzIHVzZWQgZm9yIHRoZSBTUEFSQyBzeXN0ZW0gdG8gaW5kaWNhdGUgdGhhdCB0aGlzCi0gKiBpbnRlcnJ1cHQgaGFuZGxlcidzIGlycSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkCi0gKiBieSB0aGUgcmVxdWVzdF9pcnEgcm91dGluZS4KLSAqIFRoZSBhbHRlcm5hdGl2ZSBpcyB0aGF0IGFyY2gvc3BhcmMva2VybmVsL2lycS5jIGhhcyBjYXJuYWwga25vd2xlZGdlCi0gKiBvZiBpbnRlcnJ1cHQgdXNhZ2UgYW5kIHRoYXQgc3Vja3MuIEFsc28gd2l0aG91dCBhIGZsYWcgbGlrZSB0aGlzCi0gKiBpdCBtYXkgYmUgcG9zc2libGUgZm9yIHRoZSBmcmVlX2lycSByb3V0aW5lIHRvIGF0dGVtcHQgdG8gZnJlZQotICogc3RhdGljYWxseSBhbGxvY2F0ZWQgZGF0YS4uIHdoaWNoIGlzIE5PVCBHT09ELgotICoKLSAqLwotI2RlZmluZSBTQV9TVEFUSUNfQUxMT0MJCTB4ODAwMAotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KLQotI2lmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCBfX25ld19zaWdhY3Rpb24gewotCV9fc2lnaGFuZGxlcl90CXNhX2hhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZwlzYV9mbGFnczsKLQl2b2lkCQkoKnNhX3Jlc3RvcmVyKSh2b2lkKTsJLyogTm90IHVzZWQgYnkgTGludXgvU1BBUkMgKi8KLQlfX25ld19zaWdzZXRfdAlzYV9tYXNrOwotfTsKLQotc3RydWN0IGtfc2lnYWN0aW9uIHsKLQlzdHJ1Y3QgX19uZXdfc2lnYWN0aW9uCXNhOwotCXZvaWQJCQlfX3VzZXIgKmthX3Jlc3RvcmVyOwotfTsKLQotc3RydWN0IF9fb2xkX3NpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3QJc2FfaGFuZGxlcjsKLQlfX29sZF9zaWdzZXRfdAlzYV9tYXNrOwotCXVuc2lnbmVkIGxvbmcJc2FfZmxhZ3M7Ci0Jdm9pZAkJKCpzYV9yZXN0b3JlcikgKHZvaWQpOwkvKiBub3QgdXNlZCBieSBMaW51eC9TUEFSQyAqLwotfTsKLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgewotCXZvaWQJCV9fdXNlciAqc3Nfc3A7Ci0JaW50CQlzc19mbGFnczsKLQlzaXplX3QJCXNzX3NpemU7Ci19IHN0YWNrX3Q7Ci0KLSNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogIShfX0tFUk5FTF9fKSAqLwotCi0jZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCi0KLSNlbmRpZiAvKiAhKF9BU01TUEFSQ19TSUdOQUxfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbF8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhNjBhYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbF8zMi5oCkBAIC0wLDAgKzEsMjA3IEBACisjaWZuZGVmIF9BU01TUEFSQ19TSUdOQUxfSAorI2RlZmluZSBfQVNNU1BBUkNfU0lHTkFMX0gKKworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisjZW5kaWYKKworLyogT24gdGhlIFNwYXJjIHRoZSBzaWduYWwgaGFuZGxlcnMgZ2V0IHBhc3NlZCBhICdzdWItc2lnbmFsJyBjb2RlCisgKiBmb3IgY2VydGFpbiBzaWduYWwgdHlwZXMsIHdoaWNoIHdlIGRvY3VtZW50IGhlcmUuCisgKi8KKyNkZWZpbmUgU0lHSFVQCQkgMQorI2RlZmluZSBTSUdJTlQJCSAyCisjZGVmaW5lIFNJR1FVSVQJCSAzCisjZGVmaW5lIFNJR0lMTAkJIDQKKyNkZWZpbmUgICAgU1VCU0lHX1NUQUNLICAgICAgIDAKKyNkZWZpbmUgICAgU1VCU0lHX0lMTElOU1QgICAgIDIKKyNkZWZpbmUgICAgU1VCU0lHX1BSSVZJTlNUICAgIDMKKyNkZWZpbmUgICAgU1VCU0lHX0JBRFRSQVAodCkgICgweDgwICsgKHQpKQorCisjZGVmaW5lIFNJR1RSQVAJCSA1CisjZGVmaW5lIFNJR0FCUlQJCSA2CisjZGVmaW5lIFNJR0lPVAkJIDYKKworI2RlZmluZSBTSUdFTVQgICAgICAgICAgIDcKKyNkZWZpbmUgICAgU1VCU0lHX1RBRyAgICAxMAorCisjZGVmaW5lIFNJR0ZQRQkJIDgKKyNkZWZpbmUgICAgU1VCU0lHX0ZQRElTQUJMRUQgICAgIDB4NDAwCisjZGVmaW5lICAgIFNVQlNJR19GUEVSUk9SICAgICAgICAweDQwNAorI2RlZmluZSAgICBTVUJTSUdfRlBJTlRPVkZMICAgICAgMHgwMDEKKyNkZWZpbmUgICAgU1VCU0lHX0ZQU1RTSUcgICAgICAgIDB4MDAyCisjZGVmaW5lICAgIFNVQlNJR19JRElWWkVSTyAgICAgICAweDAxNAorI2RlZmluZSAgICBTVUJTSUdfRlBJTkVYQUNUICAgICAgMHgwYzQKKyNkZWZpbmUgICAgU1VCU0lHX0ZQRElWWkVSTyAgICAgIDB4MGM4CisjZGVmaW5lICAgIFNVQlNJR19GUFVORkxPVyAgICAgICAweDBjYworI2RlZmluZSAgICBTVUJTSUdfRlBPUEVSUk9SICAgICAgMHgwZDAKKyNkZWZpbmUgICAgU1VCU0lHX0ZQT1ZGTE9XICAgICAgIDB4MGQ0CisKKyNkZWZpbmUgU0lHS0lMTAkJIDkKKyNkZWZpbmUgU0lHQlVTICAgICAgICAgIDEwCisjZGVmaW5lICAgIFNVQlNJR19CVVNUSU1FT1VUICAgIDEKKyNkZWZpbmUgICAgU1VCU0lHX0FMSUdOTUVOVCAgICAgMgorI2RlZmluZSAgICBTVUJTSUdfTUlTQ0VSUk9SICAgICA1CisKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgICAgU1VCU0lHX05PTUFQUElORyAgICAgMworI2RlZmluZSAgICBTVUJTSUdfUFJPVEVDVElPTiAgICA0CisjZGVmaW5lICAgIFNVQlNJR19TRUdFUlJPUiAgICAgIDUKKworI2RlZmluZSBTSUdTWVMJCTEyCisKKyNkZWZpbmUgU0lHUElQRQkJMTMKKyNkZWZpbmUgU0lHQUxSTQkJMTQKKyNkZWZpbmUgU0lHVEVSTQkJMTUKKyNkZWZpbmUgU0lHVVJHICAgICAgICAgIDE2CisKKy8qIFN1bk9TIHZhbHVlcyB3aGljaCBkZXZpYXRlIGZyb20gdGhlIExpbnV4L2kzODYgb25lcyAqLworI2RlZmluZSBTSUdTVE9QCQkxNworI2RlZmluZSBTSUdUU1RQCQkxOAorI2RlZmluZSBTSUdDT05UCQkxOQorI2RlZmluZSBTSUdDSExECQkyMAorI2RlZmluZSBTSUdUVElOCQkyMQorI2RlZmluZSBTSUdUVE9VCQkyMgorI2RlZmluZSBTSUdJTwkJMjMKKyNkZWZpbmUgU0lHUE9MTAkJU0lHSU8gICAvKiBTeXNWIG5hbWUgZm9yIFNJR0lPICovCisjZGVmaW5lIFNJR1hDUFUJCTI0CisjZGVmaW5lIFNJR1hGU1oJCTI1CisjZGVmaW5lIFNJR1ZUQUxSTQkyNgorI2RlZmluZSBTSUdQUk9GCQkyNworI2RlZmluZSBTSUdXSU5DSAkyOAorI2RlZmluZSBTSUdMT1NUCQkyOQorI2RlZmluZSBTSUdQV1IJCVNJR0xPU1QKKyNkZWZpbmUgU0lHVVNSMQkJMzAKKyNkZWZpbmUgU0lHVVNSMgkJMzEKKworLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKKyAqIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4KKyAqLworCisjZGVmaW5lIF9fT0xEX05TSUcJMzIKKyNkZWZpbmUgX19ORVdfTlNJRwk2NAorI2RlZmluZSBfTlNJR19CUFcJMzIKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9fTkVXX05TSUcgLyBfTlNJR19CUFcpCisKKyNkZWZpbmUgU0lHUlRNSU4JMzIKKyNkZWZpbmUgU0lHUlRNQVgJX19ORVdfTlNJRworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fV0FOVF9QT1NJWDFCX1NJR05BTFNfXykKKyNkZWZpbmUJX05TSUcJCV9fTkVXX05TSUcKKyNkZWZpbmUgX19uZXdfc2lnc2V0X3QJc2lnc2V0X3QKKyNkZWZpbmUgX19uZXdfc2lnYWN0aW9uCXNpZ2FjdGlvbgorI2RlZmluZSBfX29sZF9zaWdzZXRfdAlvbGRfc2lnc2V0X3QKKyNkZWZpbmUgX19vbGRfc2lnYWN0aW9uCW9sZF9zaWdhY3Rpb24KKyNlbHNlCisjZGVmaW5lIF9OU0lHCQlfX09MRF9OU0lHCisjZGVmaW5lIF9fb2xkX3NpZ3NldF90CXNpZ3NldF90CisjZGVmaW5lIF9fb2xkX3NpZ2FjdGlvbglzaWdhY3Rpb24KKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19vbGRfc2lnc2V0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nCXNpZ1tfTlNJR19XT1JEU107Cit9IF9fbmV3X3NpZ3NldF90OworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBBIFN1bk9TIHNpZ3N0YWNrICovCitzdHJ1Y3Qgc2lnc3RhY2sgeworCWNoYXIgKnRoZV9zdGFjazsKKwlpbnQgICBjdXJfc3RhdHVzOworfTsKKyNlbmRpZgorCisvKiBTaWd2ZWMgZmxhZ3MgKi8KKyNkZWZpbmUgX1NWX1NTVEFDSyAgICAxdSAgICAvKiBUaGlzIHNpZ25hbCBoYW5kbGVyIHNob3VsZCB1c2Ugc2lnLXN0YWNrICovCisjZGVmaW5lIF9TVl9JTlRSICAgICAgMnUgICAgLyogU2lnIHJldHVybiBzaG91bGQgbm90IHJlc3RhcnQgc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUgX1NWX1JFU0VUICAgICA0dSAgICAvKiBTZXQgaGFuZGxlciB0byBTSUdfREZMIHVwb24gdGFrZW4gc2lnbmFsICovCisjZGVmaW5lIF9TVl9JR05DSElMRCAgOHUgICAgLyogRG8gbm90IHNlbmQgU0lHQ0hMRCAqLworCisvKgorICogc2FfZmxhZ3MgdmFsdWVzOiBTQV9TVEFDSyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCwgYnV0IHdpbGwgYWxsb3cgdGhlCisgKiB1c2FnZSBvZiBzaWduYWwgc3RhY2tzIGJ5IHVzaW5nIHRoZSAobm93IG9ic29sZXRlKSBzYV9yZXN0b3JlciBmaWVsZCBpbgorICogdGhlIHNpZ2FjdGlvbiBzdHJ1Y3R1cmUgYXMgYSBzdGFjayBwb2ludGVyLiBUaGlzIGlzIG5vdyBwb3NzaWJsZSBkdWUgdG8KKyAqIHRoZSBjaGFuZ2VzIGluIHNpZ25hbCBoYW5kbGluZy4gTEJUIDAxMDQ5My4KKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAlfU1ZfSUdOQ0hJTEQKKyNkZWZpbmUgU0FfU1RBQ0sJX1NWX1NTVEFDSworI2RlZmluZSBTQV9PTlNUQUNLCV9TVl9TU1RBQ0sKKyNkZWZpbmUgU0FfUkVTVEFSVAlfU1ZfSU5UUgorI2RlZmluZSBTQV9PTkVTSE9UCV9TVl9SRVNFVAorI2RlZmluZSBTQV9OT01BU0sJMHgyMHUKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MTAwdQorI2RlZmluZSBTQV9TSUdJTkZPCTB4MjAwdQorCisjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAweDAxCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAweDAyCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDB4MDQJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisKKy8qCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgk0MDk2CisjZGVmaW5lIFNJR1NUS1NaCTE2Mzg0CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogREpIUgorICogU0FfU1RBVElDX0FMTE9DIGlzIHVzZWQgZm9yIHRoZSBTUEFSQyBzeXN0ZW0gdG8gaW5kaWNhdGUgdGhhdCB0aGlzCisgKiBpbnRlcnJ1cHQgaGFuZGxlcidzIGlycSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkCisgKiBieSB0aGUgcmVxdWVzdF9pcnEgcm91dGluZS4KKyAqIFRoZSBhbHRlcm5hdGl2ZSBpcyB0aGF0IGFyY2gvc3BhcmMva2VybmVsL2lycS5jIGhhcyBjYXJuYWwga25vd2xlZGdlCisgKiBvZiBpbnRlcnJ1cHQgdXNhZ2UgYW5kIHRoYXQgc3Vja3MuIEFsc28gd2l0aG91dCBhIGZsYWcgbGlrZSB0aGlzCisgKiBpdCBtYXkgYmUgcG9zc2libGUgZm9yIHRoZSBmcmVlX2lycSByb3V0aW5lIHRvIGF0dGVtcHQgdG8gZnJlZQorICogc3RhdGljYWxseSBhbGxvY2F0ZWQgZGF0YS4uIHdoaWNoIGlzIE5PVCBHT09ELgorICoKKyAqLworI2RlZmluZSBTQV9TVEFUSUNfQUxMT0MJCTB4ODAwMAorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBfX25ld19zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90CXNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZwlzYV9mbGFnczsKKwl2b2lkCQkoKnNhX3Jlc3RvcmVyKSh2b2lkKTsJLyogTm90IHVzZWQgYnkgTGludXgvU1BBUkMgKi8KKwlfX25ld19zaWdzZXRfdAlzYV9tYXNrOworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3QgX19uZXdfc2lnYWN0aW9uCXNhOworCXZvaWQJCQlfX3VzZXIgKmthX3Jlc3RvcmVyOworfTsKKworc3RydWN0IF9fb2xkX3NpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3QJc2FfaGFuZGxlcjsKKwlfX29sZF9zaWdzZXRfdAlzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcJc2FfZmxhZ3M7CisJdm9pZAkJKCpzYV9yZXN0b3JlcikgKHZvaWQpOwkvKiBub3QgdXNlZCBieSBMaW51eC9TUEFSQyAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgeworCXZvaWQJCV9fdXNlciAqc3Nfc3A7CisJaW50CQlzc19mbGFnczsKKwlzaXplX3QJCXNzX3NpemU7Cit9IHN0YWNrX3Q7CisKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogIShfX0tFUk5FTF9fKSAqLworCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNlbmRpZiAvKiAhKF9BU01TUEFSQ19TSUdOQUxfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbF82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxNTA5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbF82NC5oCkBAIC0wLDAgKzEsMTk0IEBACisjaWZuZGVmIF9BU01TUEFSQzY0X1NJR05BTF9ICisjZGVmaW5lIF9BU01TUEFSQzY0X1NJR05BTF9ICisKKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZW5kaWYKKyNlbmRpZgorCisvKiBPbiB0aGUgU3BhcmMgdGhlIHNpZ25hbCBoYW5kbGVycyBnZXQgcGFzc2VkIGEgJ3N1Yi1zaWduYWwnIGNvZGUKKyAqIGZvciBjZXJ0YWluIHNpZ25hbCB0eXBlcywgd2hpY2ggd2UgZG9jdW1lbnQgaGVyZS4KKyAqLworI2RlZmluZSBTSUdIVVAJCSAxCisjZGVmaW5lIFNJR0lOVAkJIDIKKyNkZWZpbmUgU0lHUVVJVAkJIDMKKyNkZWZpbmUgU0lHSUxMCQkgNAorI2RlZmluZSAgICBTVUJTSUdfU1RBQ0sgICAgICAgMAorI2RlZmluZSAgICBTVUJTSUdfSUxMSU5TVCAgICAgMgorI2RlZmluZSAgICBTVUJTSUdfUFJJVklOU1QgICAgMworI2RlZmluZSAgICBTVUJTSUdfQkFEVFJBUCh0KSAgKDB4ODAgKyAodCkpCisKKyNkZWZpbmUgU0lHVFJBUAkJIDUKKyNkZWZpbmUgU0lHQUJSVAkJIDYKKyNkZWZpbmUgU0lHSU9UCQkgNgorCisjZGVmaW5lIFNJR0VNVCAgICAgICAgICAgNworI2RlZmluZSAgICBTVUJTSUdfVEFHICAgIDEwCisKKyNkZWZpbmUgU0lHRlBFCQkgOAorI2RlZmluZSAgICBTVUJTSUdfRlBESVNBQkxFRCAgICAgMHg0MDAKKyNkZWZpbmUgICAgU1VCU0lHX0ZQRVJST1IgICAgICAgIDB4NDA0CisjZGVmaW5lICAgIFNVQlNJR19GUElOVE9WRkwgICAgICAweDAwMQorI2RlZmluZSAgICBTVUJTSUdfRlBTVFNJRyAgICAgICAgMHgwMDIKKyNkZWZpbmUgICAgU1VCU0lHX0lESVZaRVJPICAgICAgIDB4MDE0CisjZGVmaW5lICAgIFNVQlNJR19GUElORVhBQ1QgICAgICAweDBjNAorI2RlZmluZSAgICBTVUJTSUdfRlBESVZaRVJPICAgICAgMHgwYzgKKyNkZWZpbmUgICAgU1VCU0lHX0ZQVU5GTE9XICAgICAgIDB4MGNjCisjZGVmaW5lICAgIFNVQlNJR19GUE9QRVJST1IgICAgICAweDBkMAorI2RlZmluZSAgICBTVUJTSUdfRlBPVkZMT1cgICAgICAgMHgwZDQKKworI2RlZmluZSBTSUdLSUxMCQkgOQorI2RlZmluZSBTSUdCVVMgICAgICAgICAgMTAKKyNkZWZpbmUgICAgU1VCU0lHX0JVU1RJTUVPVVQgICAgMQorI2RlZmluZSAgICBTVUJTSUdfQUxJR05NRU5UICAgICAyCisjZGVmaW5lICAgIFNVQlNJR19NSVNDRVJST1IgICAgIDUKKworI2RlZmluZSBTSUdTRUdWCQkxMQorI2RlZmluZSAgICBTVUJTSUdfTk9NQVBQSU5HICAgICAzCisjZGVmaW5lICAgIFNVQlNJR19QUk9URUNUSU9OICAgIDQKKyNkZWZpbmUgICAgU1VCU0lHX1NFR0VSUk9SICAgICAgNQorCisjZGVmaW5lIFNJR1NZUwkJMTIKKworI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdVUkcgICAgICAgICAgMTYKKworLyogU3VuT1MgdmFsdWVzIHdoaWNoIGRldmlhdGUgZnJvbSB0aGUgTGludXgvaTM4NiBvbmVzICovCisjZGVmaW5lIFNJR1NUT1AJCTE3CisjZGVmaW5lIFNJR1RTVFAJCTE4CisjZGVmaW5lIFNJR0NPTlQJCTE5CisjZGVmaW5lIFNJR0NITEQJCTIwCisjZGVmaW5lIFNJR1RUSU4JCTIxCisjZGVmaW5lIFNJR1RUT1UJCTIyCisjZGVmaW5lIFNJR0lPCQkyMworI2RlZmluZSBTSUdQT0xMCQlTSUdJTyAgIC8qIFN5c1YgbmFtZSBmb3IgU0lHSU8gKi8KKyNkZWZpbmUgU0lHWENQVQkJMjQKKyNkZWZpbmUgU0lHWEZTWgkJMjUKKyNkZWZpbmUgU0lHVlRBTFJNCTI2CisjZGVmaW5lIFNJR1BST0YJCTI3CisjZGVmaW5lIFNJR1dJTkNICTI4CisjZGVmaW5lIFNJR0xPU1QJCTI5CisjZGVmaW5lIFNJR1BXUgkJU0lHTE9TVAorI2RlZmluZSBTSUdVU1IxCQkzMAorI2RlZmluZSBTSUdVU1IyCQkzMQorCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfX09MRF9OU0lHCTMyCisjZGVmaW5lIF9fTkVXX05TSUcgICAgICA2NAorI2RlZmluZSBfTlNJR19CUFcgICAgIAk2NAorI2RlZmluZSBfTlNJR19XT1JEUyAgIAkoX19ORVdfTlNJRyAvIF9OU0lHX0JQVykKKworI2RlZmluZSBTSUdSVE1JTiAgICAgICAzMgorI2RlZmluZSBTSUdSVE1BWCAgICAgICBfX05FV19OU0lHCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19XQU5UX1BPU0lYMUJfU0lHTkFMU19fKQorI2RlZmluZSBfTlNJRwkJCV9fTkVXX05TSUcKKyNkZWZpbmUgX19uZXdfc2lnc2V0X3QJCXNpZ3NldF90CisjZGVmaW5lIF9fbmV3X3NpZ2FjdGlvbgkJc2lnYWN0aW9uCisjZGVmaW5lIF9fbmV3X3NpZ2FjdGlvbjMyCXNpZ2FjdGlvbjMyCisjZGVmaW5lIF9fb2xkX3NpZ3NldF90CQlvbGRfc2lnc2V0X3QKKyNkZWZpbmUgX19vbGRfc2lnYWN0aW9uCQlvbGRfc2lnYWN0aW9uCisjZGVmaW5lIF9fb2xkX3NpZ2FjdGlvbjMyCW9sZF9zaWdhY3Rpb24zMgorI2Vsc2UKKyNkZWZpbmUgX05TSUcJCQlfX09MRF9OU0lHCisjZGVmaW5lIE5TSUcJCQlfTlNJRworI2RlZmluZSBfX29sZF9zaWdzZXRfdAkJc2lnc2V0X3QKKyNkZWZpbmUgX19vbGRfc2lnYWN0aW9uCQlzaWdhY3Rpb24KKyNkZWZpbmUgX19vbGRfc2lnYWN0aW9uMzIJc2lnYWN0aW9uMzIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19vbGRfc2lnc2V0X3Q7ICAgICAgICAgICAgLyogYXQgbGVhc3QgMzIgYml0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBfX25ld19zaWdzZXRfdDsKKworLyogQSBTdW5PUyBzaWdzdGFjayAqLworc3RydWN0IHNpZ3N0YWNrIHsKKwkvKiBYWFggMzItYml0IHBvaW50ZXJzIHBpbmhlYWQgWFhYICovCisJY2hhciAqdGhlX3N0YWNrOworCWludCAgIGN1cl9zdGF0dXM7Cit9OworCisvKiBTaWd2ZWMgZmxhZ3MgKi8KKyNkZWZpbmUgX1NWX1NTVEFDSyAgICAxdSAgICAvKiBUaGlzIHNpZ25hbCBoYW5kbGVyIHNob3VsZCB1c2Ugc2lnLXN0YWNrICovCisjZGVmaW5lIF9TVl9JTlRSICAgICAgMnUgICAgLyogU2lnIHJldHVybiBzaG91bGQgbm90IHJlc3RhcnQgc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUgX1NWX1JFU0VUICAgICA0dSAgICAvKiBTZXQgaGFuZGxlciB0byBTSUdfREZMIHVwb24gdGFrZW4gc2lnbmFsICovCisjZGVmaW5lIF9TVl9JR05DSElMRCAgOHUgICAgLyogRG8gbm90IHNlbmQgU0lHQ0hMRCAqLworCisvKgorICogc2FfZmxhZ3MgdmFsdWVzOiBTQV9TVEFDSyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCwgYnV0IHdpbGwgYWxsb3cgdGhlCisgKiB1c2FnZSBvZiBzaWduYWwgc3RhY2tzIGJ5IHVzaW5nIHRoZSAobm93IG9ic29sZXRlKSBzYV9yZXN0b3JlciBmaWVsZCBpbgorICogdGhlIHNpZ2FjdGlvbiBzdHJ1Y3R1cmUgYXMgYSBzdGFjayBwb2ludGVyLiBUaGlzIGlzIG5vdyBwb3NzaWJsZSBkdWUgdG8KKyAqIHRoZSBjaGFuZ2VzIGluIHNpZ25hbCBoYW5kbGluZy4gTEJUIDAxMDQ5My4KKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAlfU1ZfSUdOQ0hJTEQKKyNkZWZpbmUgU0FfU1RBQ0sJX1NWX1NTVEFDSworI2RlZmluZSBTQV9PTlNUQUNLCV9TVl9TU1RBQ0sKKyNkZWZpbmUgU0FfUkVTVEFSVAlfU1ZfSU5UUgorI2RlZmluZSBTQV9PTkVTSE9UCV9TVl9SRVNFVAorI2RlZmluZSBTQV9OT01BU0sJMHgyMHUKKyNkZWZpbmUgU0FfTk9DTERXQUlUICAgIDB4MTAwdQorI2RlZmluZSBTQV9TSUdJTkZPICAgICAgMHgyMDB1CisKKworI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMHgwMQkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMHgwMgkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAweDA0CS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLworCisvKgorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJNDA5NgorI2RlZmluZSBTSUdTVEtTWgkxNjM4NAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CisKK3N0cnVjdCBfX25ld19zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90CQlzYV9oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcJCXNhX2ZsYWdzOworCV9fc2lncmVzdG9yZV90IAkJc2FfcmVzdG9yZXI7ICAvKiBub3QgdXNlZCBieSBMaW51eC9TUEFSQyB5ZXQgKi8KKwlfX25ld19zaWdzZXRfdAkJc2FfbWFzazsKK307CisKK3N0cnVjdCBfX29sZF9zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90ICAJc2FfaGFuZGxlcjsKKwlfX29sZF9zaWdzZXRfdCAgCXNhX21hc2s7CisJdW5zaWduZWQgbG9uZyAgIAlzYV9mbGFnczsKKwl2b2lkIAkJCSgqc2FfcmVzdG9yZXIpKHZvaWQpOyAgICAgLyogbm90IHVzZWQgYnkgTGludXgvU1BBUkMgeWV0ICovCit9OworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisJdm9pZAkJCV9fdXNlciAqc3Nfc3A7CisJaW50CQkJc3NfZmxhZ3M7CisJc2l6ZV90CQkJc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3QgX19uZXdfc2lnYWN0aW9uIAlzYTsKKwl2b2lkIF9fdXNlcgkJKmthX3Jlc3RvcmVyOworfTsKKworI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAhKF9fS0VSTkVMX18pICovCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX0FTTVNQQVJDNjRfU0lHTkFMX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oCmluZGV4IGI2MWU3NGIuLjFmOWRlZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oCkBAIC0xLDE3MyArMSw4IEBACi0vKiBzbXAuaDogU3BhcmMgc3BlY2lmaWMgU01QIHN0dWZmLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2lmbmRlZiBfU1BBUkNfU01QX0gKLSNkZWZpbmUgX1NQQVJDX1NNUF9ICi0KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8YXNtL2hlYWQuaD4KLSNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNpZmRlZiBDT05GSUdfU01QCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2FzaS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotLyoKLSAqCVByaXZhdGUgcm91dGluZXMvZGF0YQotICovCi0gCi1leHRlcm4gdW5zaWduZWQgY2hhciBib290X2NwdV9pZDsKLWV4dGVybiBjcHVtYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7Ci0jZGVmaW5lIGNwdV9wb3NzaWJsZV9tYXAgcGh5c19jcHVfcHJlc2VudF9tYXAKLQotdHlwZWRlZiB2b2lkICgqc21wZnVuY190KSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAotCQkgICAgICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci0KLS8qCi0gKglHZW5lcmFsIGZ1bmN0aW9ucyB0aGF0IGVhY2ggaG9zdCBzeXN0ZW0gbXVzdCBwcm92aWRlLgotICovCi0gCi12b2lkIHN1bjRtX2luaXRfc21wKHZvaWQpOwotdm9pZCBzdW40ZF9pbml0X3NtcCh2b2lkKTsKLQotdm9pZCBzbXBfY2FsbGluKHZvaWQpOwotdm9pZCBzbXBfYm9vdF9jcHVzKHZvaWQpOwotdm9pZCBzbXBfc3RvcmVfY3B1X2luZm8oaW50KTsKLQotc3RydWN0IHNlcV9maWxlOwotdm9pZCBzbXBfYm9nbyhzdHJ1Y3Qgc2VxX2ZpbGUgKik7Ci12b2lkIHNtcF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqKTsKLQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIHNtcF9jcm9zc19jYWxsLCBzbXBmdW5jX3QsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi1CVEZJWFVQREVGX0NBTEwoaW50LCBfX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCwgdm9pZCkKLUJURklYVVBERUZfQkxBQ0tCT1goaGFyZF9zbXBfcHJvY2Vzc29yX2lkKQotQlRGSVhVUERFRl9CTEFDS0JPWChsb2FkX2N1cnJlbnQpCi0KLSNkZWZpbmUgc21wX2Nyb3NzX2NhbGwoZnVuYyxhcmcxLGFyZzIsYXJnMyxhcmc0LGFyZzUpIEJURklYVVBfQ0FMTChzbXBfY3Jvc3NfY2FsbCkoZnVuYyxhcmcxLGFyZzIsYXJnMyxhcmc0LGFyZzUpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB4YzAoc21wZnVuY190IGZ1bmMpIHsgc21wX2Nyb3NzX2NhbGwoZnVuYywgMCwgMCwgMCwgMCwgMCk7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB4YzEoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSkKLXsgc21wX2Nyb3NzX2NhbGwoZnVuYywgYXJnMSwgMCwgMCwgMCwgMCk7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB4YzIoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyKQoteyBzbXBfY3Jvc3NfY2FsbChmdW5jLCBhcmcxLCBhcmcyLCAwLCAwLCAwKTsgfQotc3RhdGljIGlubGluZSB2b2lkIHhjMyhzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzMpCi17IHNtcF9jcm9zc19jYWxsKGZ1bmMsIGFyZzEsIGFyZzIsIGFyZzMsIDAsIDApOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgeGM0KHNtcGZ1bmNfdCBmdW5jLCB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KQoteyBzbXBfY3Jvc3NfY2FsbChmdW5jLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCAwKTsgfQotc3RhdGljIGlubGluZSB2b2lkIHhjNShzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCwgdW5zaWduZWQgbG9uZyBhcmc1KQoteyBzbXBfY3Jvc3NfY2FsbChmdW5jLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsgfQotCi1zdGF0aWMgaW5saW5lIGludCBzbXBfY2FsbF9mdW5jdGlvbih2b2lkICgqZnVuYykodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCB3YWl0KQotewotCXhjMSgoc21wZnVuY190KWZ1bmMsICh1bnNpZ25lZCBsb25nKWluZm8pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjcHVfbG9naWNhbF9tYXAoaW50IGNwdSkKLXsKLQlyZXR1cm4gY3B1OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcDRtX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCWludCBjcHVpZDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZCAlJXRiciwgJTBcblx0IgotCQkJICAgICAic3JsICUwLCAxMiwgJTBcblx0IgotCQkJICAgICAiYW5kICUwLCAzLCAlMFxuXHQiIDoKLQkJCSAgICAgIj0mciIgKGNwdWlkKSk7Ci0JcmV0dXJuIGNwdWlkOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcDRkX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCWludCBjcHVpZDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUlZzBdICUxLCAlMFxuXHQiIDoKLQkJCSAgICAgIj0mciIgKGNwdWlkKSA6ICJpIiAoQVNJX01fVklLSU5HX1RNUDEpKTsKLQlyZXR1cm4gY3B1aWQ7Ci19Ci0KLSNpZm5kZWYgTU9EVUxFCi1zdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlpbnQgY3B1aWQ7Ci0KLQkvKiBCbGFjayBib3ggLSBzdW40bQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQgJSV0YnIsICUwXG5cdCIKLQkJCQkgICAgICJzcmwgJTAsIDEyLCAlMFxuXHQiCi0JCQkJICAgICAiYW5kICUwLCAzLCAlMFxuXHQiIDoKLQkJCQkgICAgICI9JnIiIChjcHVpZCkpOwotCSAgICAgICAgICAgICAtIHN1bjRkCi0JICAgCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyVnMF0gQVNJX01fVklLSU5HX1RNUDEsICUwXG5cdCIKLQkgICAJCQkgICAgICJub3A7IG5vcCIgOgotCSAgIAkJCSAgICAgIj0mciIgKGNwdWlkKSk7Ci0JICAgU2VlIGJ0Zml4dXAuaCBhbmQgYnRmaXh1cHByZXAuYyB0byB1bmRlcnN0YW5kIGhvdyBhIGJsYWNrYm94IHdvcmtzLgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzZXRoaSAlJWhpKF9fX2JfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKSwgJTBcblx0IgotCQkJICAgICAic2V0aGkgJSVoaShib290X2NwdV9pZCksICUwXG5cdCIKLQkJCSAgICAgImxkdWIgWyUwICsgJSVsbyhib290X2NwdV9pZCldLCAlMFxuXHQiIDoKLQkJCSAgICAgIj0mciIgKGNwdWlkKSk7Ci0JcmV0dXJuIGNwdWlkOwotfQorI2lmbmRlZiBfX19BU01fU1BBUkNfU01QX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1NNUF9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvc21wXzY0Lmg+CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JaW50IGNwdWlkOwotCQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJSVvNywgJSVnMVxuXHQiCi0JCQkgICAgICJjYWxsIF9fX2ZfX19oYXJkX3NtcF9wcm9jZXNzb3JfaWRcblx0IgotCQkJICAgICAiIG5vcFxuXHQiCi0JCQkgICAgICJtb3YgJSVnMiwgJTBcblx0IiA6ICI9ciIoY3B1aWQpIDogOiAiZzEiLCAiZzIiKTsKLQlyZXR1cm4gY3B1aWQ7Ci19CisjaW5jbHVkZSA8YXNtLXNwYXJjL3NtcF8zMi5oPgogI2VuZGlmCi0KLSNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQotCi0jZGVmaW5lIHByb2ZfbXVsdGlwbGllcihfX2NwdSkJCWNwdV9kYXRhKF9fY3B1KS5tdWx0aXBsaWVyCi0jZGVmaW5lIHByb2ZfY291bnRlcihfX2NwdSkJCWNwdV9kYXRhKF9fY3B1KS5jb3VudGVyCi0KLXZvaWQgc21wX3NldHVwX2NwdV9wb3NzaWJsZV9tYXAodm9pZCk7Ci0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotLyogU3BhcmMgc3BlY2lmaWMgbWVzc2FnZXMuICovCi0jZGVmaW5lIE1TR19DUk9TU19DQUxMICAgICAgICAgMHgwMDA1ICAgICAgIC8qIHJ1biBmdW5jIG9uIGNwdXMgKi8KLQotLyogRW1waXJpY2FsIFBST00gcHJvY2Vzc29yIG1haWxib3ggY29uc3RhbnRzLiAgSWYgdGhlIHBlci1jcHUgbWFpbGJveAotICogY29udGFpbnMgc29tZXRoaW5nIG90aGVyIHRoYW4gb25lIG9mIHRoZXNlIHRoZW4gdGhlIGlwaSBpcyBmcm9tCi0gKiBMaW51eCdzIGFjdGl2ZV9rZXJuZWxfcHJvY2Vzc29yLiAgVGhpcyBmYWNpbGl0eSBleGlzdHMgc28gdGhhdAotICogdGhlIGJvb3QgbW9uaXRvciBjYW4gY2FwdHVyZSBhbGwgdGhlIG90aGVyIGNwdXMgd2hlbiBvbmUgY2F0Y2hlcwotICogYSB3YXRjaGRvZyByZXNldCBvciB0aGUgdXNlciBlbnRlcnMgdGhlIG1vbml0b3IgdXNpbmcgTDEtQSBrZXlzLgotICovCi0jZGVmaW5lIE1CT1hfU1RPUENQVSAgICAgICAgICAweEZCCi0jZGVmaW5lIE1CT1hfSURMRUNQVSAgICAgICAgICAweEZDCi0jZGVmaW5lIE1CT1hfSURMRUNQVTIgICAgICAgICAweEZECi0jZGVmaW5lIE1CT1hfU1RPUENQVTIgICAgICAgICAweEZFCi0KLSNlbHNlIC8qIFNNUCAqLwotCi0jZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCi0jZGVmaW5lIHNtcF9zZXR1cF9jcHVfcG9zc2libGVfbWFwKCkgZG8geyB9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogIShTTVApICovCi0KLSNkZWZpbmUgTk9fUFJPQ19JRCAgICAgICAgICAgIDB4RkYKLQotI2VuZGlmIC8qICEoX1NQQVJDX1NNUF9IKSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zbXBfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcF8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMDE3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zbXBfMzIuaApAQCAtMCwwICsxLDE3MyBAQAorLyogc21wLmg6IFNwYXJjIHNwZWNpZmljIFNNUCBzdHVmZi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX1NQQVJDX1NNUF9ICisjZGVmaW5lIF9TUEFSQ19TTVBfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9oZWFkLmg+CisjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgQ09ORklHX1NNUAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKy8qCisgKglQcml2YXRlIHJvdXRpbmVzL2RhdGEKKyAqLworCitleHRlcm4gdW5zaWduZWQgY2hhciBib290X2NwdV9pZDsKK2V4dGVybiBjcHVtYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7CisjZGVmaW5lIGNwdV9wb3NzaWJsZV9tYXAgcGh5c19jcHVfcHJlc2VudF9tYXAKKwordHlwZWRlZiB2b2lkICgqc21wZnVuY190KSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkgICAgICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisKKy8qCisgKglHZW5lcmFsIGZ1bmN0aW9ucyB0aGF0IGVhY2ggaG9zdCBzeXN0ZW0gbXVzdCBwcm92aWRlLgorICovCisKK3ZvaWQgc3VuNG1faW5pdF9zbXAodm9pZCk7Cit2b2lkIHN1bjRkX2luaXRfc21wKHZvaWQpOworCit2b2lkIHNtcF9jYWxsaW4odm9pZCk7Cit2b2lkIHNtcF9ib290X2NwdXModm9pZCk7Cit2b2lkIHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQpOworCitzdHJ1Y3Qgc2VxX2ZpbGU7Cit2b2lkIHNtcF9ib2dvKHN0cnVjdCBzZXFfZmlsZSAqKTsKK3ZvaWQgc21wX2luZm8oc3RydWN0IHNlcV9maWxlICopOworCitCVEZJWFVQREVGX0NBTEwodm9pZCwgc21wX2Nyb3NzX2NhbGwsIHNtcGZ1bmNfdCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0JURklYVVBERUZfQ0FMTChpbnQsIF9faGFyZF9zbXBfcHJvY2Vzc29yX2lkLCB2b2lkKQorQlRGSVhVUERFRl9CTEFDS0JPWChoYXJkX3NtcF9wcm9jZXNzb3JfaWQpCitCVEZJWFVQREVGX0JMQUNLQk9YKGxvYWRfY3VycmVudCkKKworI2RlZmluZSBzbXBfY3Jvc3NfY2FsbChmdW5jLGFyZzEsYXJnMixhcmczLGFyZzQsYXJnNSkgQlRGSVhVUF9DQUxMKHNtcF9jcm9zc19jYWxsKShmdW5jLGFyZzEsYXJnMixhcmczLGFyZzQsYXJnNSkKKworc3RhdGljIGlubGluZSB2b2lkIHhjMChzbXBmdW5jX3QgZnVuYykgeyBzbXBfY3Jvc3NfY2FsbChmdW5jLCAwLCAwLCAwLCAwLCAwKTsgfQorc3RhdGljIGlubGluZSB2b2lkIHhjMShzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxKQoreyBzbXBfY3Jvc3NfY2FsbChmdW5jLCBhcmcxLCAwLCAwLCAwLCAwKTsgfQorc3RhdGljIGlubGluZSB2b2lkIHhjMihzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIpCit7IHNtcF9jcm9zc19jYWxsKGZ1bmMsIGFyZzEsIGFyZzIsIDAsIDAsIDApOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgeGMzKHNtcGZ1bmNfdCBmdW5jLCB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMykKK3sgc21wX2Nyb3NzX2NhbGwoZnVuYywgYXJnMSwgYXJnMiwgYXJnMywgMCwgMCk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB4YzQoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpCit7IHNtcF9jcm9zc19jYWxsKGZ1bmMsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIDApOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgeGM1KHNtcGZ1bmNfdCBmdW5jLCB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0LCB1bnNpZ25lZCBsb25nIGFyZzUpCit7IHNtcF9jcm9zc19jYWxsKGZ1bmMsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IHdhaXQpCit7CisJeGMxKChzbXBmdW5jX3QpZnVuYywgKHVuc2lnbmVkIGxvbmcpaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9sb2dpY2FsX21hcChpbnQgY3B1KQoreworCXJldHVybiBjcHU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhcmRfc21wNG1fcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJaW50IGNwdWlkOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkICUldGJyLCAlMFxuXHQiCisJCQkgICAgICJzcmwgJTAsIDEyLCAlMFxuXHQiCisJCQkgICAgICJhbmQgJTAsIDMsICUwXG5cdCIgOgorCQkJICAgICAiPSZyIiAoY3B1aWQpKTsKKwlyZXR1cm4gY3B1aWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhcmRfc21wNGRfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJaW50IGNwdWlkOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJSVnMF0gJTEsICUwXG5cdCIgOgorCQkJICAgICAiPSZyIiAoY3B1aWQpIDogImkiIChBU0lfTV9WSUtJTkdfVE1QMSkpOworCXJldHVybiBjcHVpZDsKK30KKworI2lmbmRlZiBNT0RVTEUKK3N0YXRpYyBpbmxpbmUgaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworCWludCBjcHVpZDsKKworCS8qIEJsYWNrIGJveCAtIHN1bjRtCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZCAlJXRiciwgJTBcblx0IgorCQkJCSAgICAgInNybCAlMCwgMTIsICUwXG5cdCIKKwkJCQkgICAgICJhbmQgJTAsIDMsICUwXG5cdCIgOgorCQkJCSAgICAgIj0mciIgKGNwdWlkKSk7CisJICAgICAgICAgICAgIC0gc3VuNGQKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJWcwXSBBU0lfTV9WSUtJTkdfVE1QMSwgJTBcblx0IgorCQkJCSAgICAgIm5vcDsgbm9wIiA6CisJCQkJICAgICAiPSZyIiAoY3B1aWQpKTsKKwkgICBTZWUgYnRmaXh1cC5oIGFuZCBidGZpeHVwcHJlcC5jIHRvIHVuZGVyc3RhbmQgaG93IGEgYmxhY2tib3ggd29ya3MuCisJICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInNldGhpICUlaGkoX19fYl9oYXJkX3NtcF9wcm9jZXNzb3JfaWQpLCAlMFxuXHQiCisJCQkgICAgICJzZXRoaSAlJWhpKGJvb3RfY3B1X2lkKSwgJTBcblx0IgorCQkJICAgICAibGR1YiBbJTAgKyAlJWxvKGJvb3RfY3B1X2lkKV0sICUwXG5cdCIgOgorCQkJICAgICAiPSZyIiAoY3B1aWQpKTsKKwlyZXR1cm4gY3B1aWQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJaW50IGNwdWlkOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdiAlJW83LCAlJWcxXG5cdCIKKwkJCSAgICAgImNhbGwgX19fZl9fX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZFxuXHQiCisJCQkgICAgICIgbm9wXG5cdCIKKwkJCSAgICAgIm1vdiAlJWcyLCAlMFxuXHQiIDogIj1yIihjcHVpZCkgOiA6ICJnMSIsICJnMiIpOworCXJldHVybiBjcHVpZDsKK30KKyNlbmRpZgorCisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKworI2RlZmluZSBwcm9mX211bHRpcGxpZXIoX19jcHUpCQljcHVfZGF0YShfX2NwdSkubXVsdGlwbGllcgorI2RlZmluZSBwcm9mX2NvdW50ZXIoX19jcHUpCQljcHVfZGF0YShfX2NwdSkuY291bnRlcgorCit2b2lkIHNtcF9zZXR1cF9jcHVfcG9zc2libGVfbWFwKHZvaWQpOworCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKy8qIFNwYXJjIHNwZWNpZmljIG1lc3NhZ2VzLiAqLworI2RlZmluZSBNU0dfQ1JPU1NfQ0FMTCAgICAgICAgIDB4MDAwNSAgICAgICAvKiBydW4gZnVuYyBvbiBjcHVzICovCisKKy8qIEVtcGlyaWNhbCBQUk9NIHByb2Nlc3NvciBtYWlsYm94IGNvbnN0YW50cy4gIElmIHRoZSBwZXItY3B1IG1haWxib3gKKyAqIGNvbnRhaW5zIHNvbWV0aGluZyBvdGhlciB0aGFuIG9uZSBvZiB0aGVzZSB0aGVuIHRoZSBpcGkgaXMgZnJvbQorICogTGludXgncyBhY3RpdmVfa2VybmVsX3Byb2Nlc3Nvci4gIFRoaXMgZmFjaWxpdHkgZXhpc3RzIHNvIHRoYXQKKyAqIHRoZSBib290IG1vbml0b3IgY2FuIGNhcHR1cmUgYWxsIHRoZSBvdGhlciBjcHVzIHdoZW4gb25lIGNhdGNoZXMKKyAqIGEgd2F0Y2hkb2cgcmVzZXQgb3IgdGhlIHVzZXIgZW50ZXJzIHRoZSBtb25pdG9yIHVzaW5nIEwxLUEga2V5cy4KKyAqLworI2RlZmluZSBNQk9YX1NUT1BDUFUgICAgICAgICAgMHhGQgorI2RlZmluZSBNQk9YX0lETEVDUFUgICAgICAgICAgMHhGQworI2RlZmluZSBNQk9YX0lETEVDUFUyICAgICAgICAgMHhGRAorI2RlZmluZSBNQk9YX1NUT1BDUFUyICAgICAgICAgMHhGRQorCisjZWxzZSAvKiBTTVAgKi8KKworI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAorI2RlZmluZSBzbXBfc2V0dXBfY3B1X3Bvc3NpYmxlX21hcCgpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICEoU01QKSAqLworCisjZGVmaW5lIE5PX1BST0NfSUQgICAgICAgICAgICAweEZGCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19TTVBfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NtcF82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc21wXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyMjRkZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcF82NC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIHNtcC5oOiBTcGFyYzY0IHNwZWNpZmljIFNNUCBzdHVmZi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDIwMDggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQorICovCisKKyNpZm5kZWYgX1NQQVJDNjRfU01QX0gKKyNkZWZpbmUgX1NQQVJDNjRfU01QX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vYXNpLmg+CisjaW5jbHVkZSA8YXNtL3N0YXJmaXJlLmg+CisjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjaWZkZWYgQ09ORklHX1NNUAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICoJUHJpdmF0ZSByb3V0aW5lcy9kYXRhCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisKK0RFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9zaWJsaW5nX21hcCk7CitleHRlcm4gY3B1bWFza190IGNwdV9jb3JlX21hcFtOUl9DUFVTXTsKK2V4dGVybiBpbnQgc3BhcmM2NF9tdWx0aV9jb3JlOworCitleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOworZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKTsKKworLyoKKyAqCUdlbmVyYWwgZnVuY3Rpb25zIHRoYXQgZWFjaCBob3N0IHN5c3RlbSBtdXN0IHByb3ZpZGUuCisgKi8KKworZXh0ZXJuIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQorCitleHRlcm4gdm9pZCBzbXBfZmlsbF9pbl9zaWJfY29yZV9tYXBzKHZvaWQpOworZXh0ZXJuIHZvaWQgY3B1X3BsYXlfZGVhZCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc21wX2ZldGNoX2dsb2JhbF9yZWdzKHZvaWQpOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitleHRlcm4gaW50IF9fY3B1X2Rpc2FibGUodm9pZCk7CitleHRlcm4gdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CisjZW5kaWYKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZWxzZQorCisjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCisjZGVmaW5lIHNtcF9maWxsX2luX3NpYl9jb3JlX21hcHMoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNtcF9mZXRjaF9nbG9iYWxfcmVncygpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICEoQ09ORklHX1NNUCkgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfU01QX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zcGFyc2VtZW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NwYXJzZW1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OWQ0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zcGFyc2VtZW0uaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9TUEFSQzY0X1NQQVJTRU1FTV9ICisjZGVmaW5lIF9TUEFSQzY0X1NQQVJTRU1FTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMgICAgICAgMzAKKyNkZWZpbmUgTUFYX1BIWVNBRERSX0JJVFMgICAgICAgNDIKKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUyAgICAgICAgNDIKKworI2VuZGlmIC8qICEoX19LRVJORUxfXykgKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfU1BBUlNFTUVNX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2suaAppbmRleCBkZTIyNDliLi4zYjcxYzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrLmgKQEAgLTEsMTkyICsxLDggQEAKLS8qIHNwaW5sb2NrLmg6IDMyLWJpdCBTcGFyYyBzcGlubG9jayBzdXBwb3J0LgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2lmbmRlZiBfX1NQQVJDX1NQSU5MT0NLX0gKLSNkZWZpbmUgX19TUEFSQ19TUElOTE9DS19ICi0KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CS8qIEZvciBOUl9DUFVTICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxhc20vcHNyLmg+Ci0KLSNkZWZpbmUgX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikobG9jaykpICE9IDApCi0KLSNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChsb2NrKSBcCi0JZG8geyB3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpIGNwdV9yZWxheCgpOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJcbjE6XG5cdCIKLQkibGRzdHViCVslMF0sICUlZzJcblx0IgotCSJvcmNjCSUlZzIsIDB4MCwgJSVnMFxuXHQiCi0JImJuZSxhCTJmXG5cdCIKLQkiIGxkdWIJWyUwXSwgJSVnMlxuXHQiCi0JIi5zdWJzZWN0aW9uCTJcbiIKLQkiMjpcblx0IgotCSJvcmNjCSUlZzIsIDB4MCwgJSVnMFxuXHQiCi0JImJuZSxhCTJiXG5cdCIKLQkiIGxkdWIJWyUwXSwgJSVnMlxuXHQiCi0JImIsYQkxYlxuXHQiCi0JIi5wcmV2aW91c1xuIgotCTogLyogbm8gb3V0cHV0cyAqLwotCTogInIiIChsb2NrKQotCTogImcyIiwgIm1lbW9yeSIsICJjYyIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0JdW5zaWduZWQgaW50IHJlc3VsdDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRzdHViIFslMV0sICUwIgotCQkJICAgICA6ICI9ciIgKHJlc3VsdCkKLQkJCSAgICAgOiAiciIgKGxvY2spCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCXJldHVybiAocmVzdWx0ID09IDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YiAlJWcwLCBbJTBdIiA6IDogInIiIChsb2NrKSA6ICJtZW1vcnkiKTsKLX0KLQotLyogUmVhZC13cml0ZSBzcGlubG9ja3MsIGFsbG93aW5nIG11bHRpcGxlIHJlYWRlcnMKLSAqIGJ1dCBvbmx5IG9uZSB3cml0ZXIuCi0gKgotICogTk9URSEgaXQgaXMgcXVpdGUgY29tbW9uIHRvIGhhdmUgcmVhZGVycyBpbiBpbnRlcnJ1cHRzCi0gKiBidXQgbm8gaW50ZXJydXB0IHdyaXRlcnMuIEZvciB0aG9zZSBjaXJjdW1zdGFuY2VzIHdlCi0gKiBjYW4gIm1peCIgaXJxLXNhZmUgbG9ja3MgLSBhbnkgd3JpdGVyIG5lZWRzIHRvIGdldCBhCi0gKiBpcnEtc2FmZSB3cml0ZS1sb2NrLCBidXQgcmVhZGVycyBjYW4gZ2V0IG5vbi1pcnFzYWZlCi0gKiByZWFkLWxvY2tzLgotICoKLSAqIFhYWCBUaGlzIG1pZ2h0IGNyZWF0ZSBzb21lIHByb2JsZW1zIHdpdGggbXkgZHVhbCBzcGlubG9jawotICogWFhYIHNjaGVtZSwgZGVhZGxvY2tzIGV0Yy4gLURhdmVNCi0gKgotICogU29ydCBvZiBsaWtlIGF0b21pY190J3Mgb24gU3BhcmMsIGJ1dCBldmVuIG1vcmUgY2xldmVyLgotICoKLSAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJfCAyNC1iaXQgY291bnRlciAgICAgICAgICAgfCB3bG9jayB8ICByYXdfcndsb2NrX3QKLSAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJIDMxICAgICAgICAgICAgICAgICAgICAgICA4IDcgICAgIDAKLSAqCi0gKiB3bG9jayBzaWduaWZpZXMgdGhlIG9uZSB3cml0ZXIgaXMgaW4gb3Igc29tZWJvZHkgaXMgdXBkYXRpbmcKLSAqIGNvdW50ZXIuIEZvciBhIHdyaXRlciwgaWYgaGUgc3VjY2Vzc2Z1bGx5IGFjcXVpcmVzIHRoZSB3bG9jaywKLSAqIGJ1dCBjb3VudGVyIGlzIG5vbi16ZXJvLCBoZSBoYXMgdG8gcmVsZWFzZSB0aGUgbG9jayBhbmQgd2FpdCwKLSAqIHRpbGwgYm90aCBjb3VudGVyIGFuZCB3bG9jayBhcmUgemVyby4KLSAqCi0gKiBVbmZvcnR1bmF0ZWx5IHRoaXMgc2NoZW1lIGxpbWl0cyB1cyB0byB+MTYsMDAwLDAwMCBjcHVzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yZWFkX2xvY2socmF3X3J3bG9ja190ICpydykKLXsKLQlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKLQlscCA9IHJ3OwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJtb3YJJSVvNywgJSVnNFxuXHQiCi0JImNhbGwJX19fcndfcmVhZF9lbnRlclxuXHQiCi0JIiBsZHN0dWIJWyUlZzEgKyAzXSwgJSVnMlxuIgotCTogLyogbm8gb3V0cHV0cyAqLwotCTogInIiIChscCkKLQk6ICJnMiIsICJnNCIsICJtZW1vcnkiLCAiY2MiKTsKLX0KLQotI2RlZmluZSBfX3Jhd19yZWFkX2xvY2sobG9jaykgXAotZG8gewl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCi0JX19yZWFkX2xvY2sobG9jayk7IFwKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKLX0gd2hpbGUoMCkKLQotc3RhdGljIGlubGluZSB2b2lkIF9fcmVhZF91bmxvY2socmF3X3J3bG9ja190ICpydykKLXsKLQlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKLQlscCA9IHJ3OwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJtb3YJJSVvNywgJSVnNFxuXHQiCi0JImNhbGwJX19fcndfcmVhZF9leGl0XG5cdCIKLQkiIGxkc3R1YglbJSVnMSArIDNdLCAlJWcyXG4iCi0JOiAvKiBubyBvdXRwdXRzICovCi0JOiAiciIgKGxwKQotCTogImcyIiwgImc0IiwgIm1lbW9yeSIsICJjYyIpOwotfQotCi0jZGVmaW5lIF9fcmF3X3JlYWRfdW5sb2NrKGxvY2spIFwKLWRvIHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAotCV9fcmVhZF91bmxvY2sobG9jayk7IFwKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKLX0gd2hpbGUoMCkKLQotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpydykKLXsKLQlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKLQlscCA9IHJ3OwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJtb3YJJSVvNywgJSVnNFxuXHQiCi0JImNhbGwJX19fcndfd3JpdGVfZW50ZXJcblx0IgotCSIgbGRzdHViCVslJWcxICsgM10sICUlZzJcbiIKLQk6IC8qIG5vIG91dHB1dHMgKi8KLQk6ICJyIiAobHApCi0JOiAiZzIiLCAiZzQiLCAibWVtb3J5IiwgImNjIik7Ci0JKih2b2xhdGlsZSBfX3UzMiAqKSZscC0+bG9jayA9IH4wVTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRzdHViIFslMSArIDNdLCAlMCIKLQkJCSAgICAgOiAiPXIiICh2YWwpCi0JCQkgICAgIDogInIiICgmcnctPmxvY2spCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCi0JaWYgKHZhbCA9PSAwKSB7Ci0JCXZhbCA9IHJ3LT5sb2NrICYgfjB4ZmY7Ci0JCWlmICh2YWwpCi0JCQkoKHZvbGF0aWxlIHU4KikmcnctPmxvY2spWzNdID0gMDsKLQkJZWxzZQotCQkJKih2b2xhdGlsZSB1MzIqKSZydy0+bG9jayA9IH4wVTsKLQl9Ci0KLQlyZXR1cm4gKHZhbCA9PSAwKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKLXsKLQlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKLQlyZWdpc3RlciBpbnQgcmVzIGFzbSgibzAiKTsKLQlscCA9IHJ3OwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJtb3YJJSVvNywgJSVnNFxuXHQiCi0JImNhbGwJX19fcndfcmVhZF90cnlcblx0IgotCSIgbGRzdHViCVslJWcxICsgM10sICUlZzJcbiIKLQk6ICI9ciIgKHJlcykKLQk6ICJyIiAobHApCi0JOiAiZzIiLCAiZzQiLCAibWVtb3J5IiwgImNjIik7Ci0JcmV0dXJuIHJlczsKLX0KLQotI2RlZmluZSBfX3Jhd19yZWFkX3RyeWxvY2sobG9jaykgXAotKHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAotCWludCByZXM7IFwKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKLQlyZXMgPSBfX3JlYWRfdHJ5bG9jayhsb2NrKTsgXAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgXAotCXJlczsgXAotfSkKLQotI2RlZmluZSBfX3Jhd193cml0ZV91bmxvY2socncpCWRvIHsgKHJ3KS0+bG9jayA9IDA7IH0gd2hpbGUoMCkKLQotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQotCi0jZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotCi0jZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2socncpICghKChydyktPmxvY2sgJiAweGZmKSkKLSNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpICghKHJ3KS0+bG9jaykKLQotI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotCi0jZW5kaWYgLyogX19TUEFSQ19TUElOTE9DS19IICovCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19TUElOTE9DS19ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19TUElOTE9DS19ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvc3BpbmxvY2tfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NwaW5sb2NrXzMyLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2tfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyMjQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrXzMyLmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qIHNwaW5sb2NrLmg6IDMyLWJpdCBTcGFyYyBzcGlubG9jayBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfX1NQQVJDX1NQSU5MT0NLX0gKKyNkZWZpbmUgX19TUEFSQ19TUElOTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CS8qIEZvciBOUl9DUFVTICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vcHNyLmg+CisKKyNkZWZpbmUgX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikobG9jaykpICE9IDApCisKKyNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChsb2NrKSBcCisJZG8geyB3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpIGNwdV9yZWxheCgpOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjE6XG5cdCIKKwkibGRzdHViCVslMF0sICUlZzJcblx0IgorCSJvcmNjCSUlZzIsIDB4MCwgJSVnMFxuXHQiCisJImJuZSxhCTJmXG5cdCIKKwkiIGxkdWIJWyUwXSwgJSVnMlxuXHQiCisJIi5zdWJzZWN0aW9uCTJcbiIKKwkiMjpcblx0IgorCSJvcmNjCSUlZzIsIDB4MCwgJSVnMFxuXHQiCisJImJuZSxhCTJiXG5cdCIKKwkiIGxkdWIJWyUwXSwgJSVnMlxuXHQiCisJImIsYQkxYlxuXHQiCisJIi5wcmV2aW91c1xuIgorCTogLyogbm8gb3V0cHV0cyAqLworCTogInIiIChsb2NrKQorCTogImcyIiwgIm1lbW9yeSIsICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRzdHViIFslMV0sICUwIgorCQkJICAgICA6ICI9ciIgKHJlc3VsdCkKKwkJCSAgICAgOiAiciIgKGxvY2spCisJCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiAocmVzdWx0ID09IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YiAlJWcwLCBbJTBdIiA6IDogInIiIChsb2NrKSA6ICJtZW1vcnkiKTsKK30KKworLyogUmVhZC13cml0ZSBzcGlubG9ja3MsIGFsbG93aW5nIG11bHRpcGxlIHJlYWRlcnMKKyAqIGJ1dCBvbmx5IG9uZSB3cml0ZXIuCisgKgorICogTk9URSEgaXQgaXMgcXVpdGUgY29tbW9uIHRvIGhhdmUgcmVhZGVycyBpbiBpbnRlcnJ1cHRzCisgKiBidXQgbm8gaW50ZXJydXB0IHdyaXRlcnMuIEZvciB0aG9zZSBjaXJjdW1zdGFuY2VzIHdlCisgKiBjYW4gIm1peCIgaXJxLXNhZmUgbG9ja3MgLSBhbnkgd3JpdGVyIG5lZWRzIHRvIGdldCBhCisgKiBpcnEtc2FmZSB3cml0ZS1sb2NrLCBidXQgcmVhZGVycyBjYW4gZ2V0IG5vbi1pcnFzYWZlCisgKiByZWFkLWxvY2tzLgorICoKKyAqIFhYWCBUaGlzIG1pZ2h0IGNyZWF0ZSBzb21lIHByb2JsZW1zIHdpdGggbXkgZHVhbCBzcGlubG9jaworICogWFhYIHNjaGVtZSwgZGVhZGxvY2tzIGV0Yy4gLURhdmVNCisgKgorICogU29ydCBvZiBsaWtlIGF0b21pY190J3Mgb24gU3BhcmMsIGJ1dCBldmVuIG1vcmUgY2xldmVyLgorICoKKyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJfCAyNC1iaXQgY291bnRlciAgICAgICAgICAgfCB3bG9jayB8ICByYXdfcndsb2NrX3QKKyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJIDMxICAgICAgICAgICAgICAgICAgICAgICA4IDcgICAgIDAKKyAqCisgKiB3bG9jayBzaWduaWZpZXMgdGhlIG9uZSB3cml0ZXIgaXMgaW4gb3Igc29tZWJvZHkgaXMgdXBkYXRpbmcKKyAqIGNvdW50ZXIuIEZvciBhIHdyaXRlciwgaWYgaGUgc3VjY2Vzc2Z1bGx5IGFjcXVpcmVzIHRoZSB3bG9jaywKKyAqIGJ1dCBjb3VudGVyIGlzIG5vbi16ZXJvLCBoZSBoYXMgdG8gcmVsZWFzZSB0aGUgbG9jayBhbmQgd2FpdCwKKyAqIHRpbGwgYm90aCBjb3VudGVyIGFuZCB3bG9jayBhcmUgemVyby4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5IHRoaXMgc2NoZW1lIGxpbWl0cyB1cyB0byB+MTYsMDAwLDAwMCBjcHVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19yZWFkX2xvY2socmF3X3J3bG9ja190ICpydykKK3sKKwlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKKwlscCA9IHJ3OworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fcndfcmVhZF9lbnRlclxuXHQiCisJIiBsZHN0dWIJWyUlZzEgKyAzXSwgJSVnMlxuIgorCTogLyogbm8gb3V0cHV0cyAqLworCTogInIiIChscCkKKwk6ICJnMiIsICJnNCIsICJtZW1vcnkiLCAiY2MiKTsKK30KKworI2RlZmluZSBfX3Jhd19yZWFkX2xvY2sobG9jaykgXAorZG8gewl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCisJX19yZWFkX2xvY2sobG9jayk7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKK30gd2hpbGUoMCkKKworc3RhdGljIGlubGluZSB2b2lkIF9fcmVhZF91bmxvY2socmF3X3J3bG9ja190ICpydykKK3sKKwlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKKwlscCA9IHJ3OworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fcndfcmVhZF9leGl0XG5cdCIKKwkiIGxkc3R1YglbJSVnMSArIDNdLCAlJWcyXG4iCisJOiAvKiBubyBvdXRwdXRzICovCisJOiAiciIgKGxwKQorCTogImcyIiwgImc0IiwgIm1lbW9yeSIsICJjYyIpOworfQorCisjZGVmaW5lIF9fcmF3X3JlYWRfdW5sb2NrKGxvY2spIFwKK2RvIHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorCV9fcmVhZF91bmxvY2sobG9jayk7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKK30gd2hpbGUoMCkKKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpydykKK3sKKwlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKKwlscCA9IHJ3OworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fcndfd3JpdGVfZW50ZXJcblx0IgorCSIgbGRzdHViCVslJWcxICsgM10sICUlZzJcbiIKKwk6IC8qIG5vIG91dHB1dHMgKi8KKwk6ICJyIiAobHApCisJOiAiZzIiLCAiZzQiLCAibWVtb3J5IiwgImNjIik7CisJKih2b2xhdGlsZSBfX3UzMiAqKSZscC0+bG9jayA9IH4wVTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRzdHViIFslMSArIDNdLCAlMCIKKwkJCSAgICAgOiAiPXIiICh2YWwpCisJCQkgICAgIDogInIiICgmcnctPmxvY2spCisJCQkgICAgIDogIm1lbW9yeSIpOworCisJaWYgKHZhbCA9PSAwKSB7CisJCXZhbCA9IHJ3LT5sb2NrICYgfjB4ZmY7CisJCWlmICh2YWwpCisJCQkoKHZvbGF0aWxlIHU4KikmcnctPmxvY2spWzNdID0gMDsKKwkJZWxzZQorCQkJKih2b2xhdGlsZSB1MzIqKSZydy0+bG9jayA9IH4wVTsKKwl9CisKKwlyZXR1cm4gKHZhbCA9PSAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKK3sKKwlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKKwlyZWdpc3RlciBpbnQgcmVzIGFzbSgibzAiKTsKKwlscCA9IHJ3OworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fcndfcmVhZF90cnlcblx0IgorCSIgbGRzdHViCVslJWcxICsgM10sICUlZzJcbiIKKwk6ICI9ciIgKHJlcykKKwk6ICJyIiAobHApCisJOiAiZzIiLCAiZzQiLCAibWVtb3J5IiwgImNjIik7CisJcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBfX3Jhd19yZWFkX3RyeWxvY2sobG9jaykgXAorKHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAorCWludCByZXM7IFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKKwlyZXMgPSBfX3JlYWRfdHJ5bG9jayhsb2NrKTsgXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgXAorCXJlczsgXAorfSkKKworI2RlZmluZSBfX3Jhd193cml0ZV91bmxvY2socncpCWRvIHsgKHJ3KS0+bG9jayA9IDA7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQorCisjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorCisjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2socncpICghKChydyktPmxvY2sgJiAweGZmKSkKKyNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpICghKHJ3KS0+bG9jaykKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogX19TUEFSQ19TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zcGlubG9ja182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2tfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDA2ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2tfNjQuaApAQCAtMCwwICsxLDI1MCBAQAorLyogc3BpbmxvY2suaDogNjQtYml0IFNwYXJjIHNwaW5sb2NrIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaWZuZGVmIF9fU1BBUkM2NF9TUElOTE9DS19ICisjZGVmaW5lIF9fU1BBUkM2NF9TUElOTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CS8qIEZvciBOUl9DUFVTICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIFRvIGdldCBkZWJ1Z2dpbmcgc3BpbmxvY2tzIHdoaWNoIGRldGVjdCBhbmQgY2F0Y2gKKyAqIGRlYWRsb2NrIHNpdHVhdGlvbnMsIHNldCBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKyAqIGFuZCByZWJ1aWxkIHlvdXIga2VybmVsLgorICovCisKKy8qIEFsbCBvZiB0aGVzZSBsb2NraW5nIHByaW1pdGl2ZXMgYXJlIGV4cGVjdGVkIHRvIHdvcmsgcHJvcGVybHkKKyAqIGV2ZW4gaW4gYW4gUk1PIG1lbW9yeSBtb2RlbCwgd2hpY2ggY3VycmVudGx5IGlzIHdoYXQgdGhlIGtlcm5lbAorICogcnVucyBpbi4KKyAqCisgKiBUaGVyZSBpcyBhbm90aGVyIGlzc3VlLiAgQmVjYXVzZSB3ZSBwbGF5IGdhbWVzIHRvIHNhdmUgY3ljbGVzCisgKiBpbiB0aGUgbm9uLWNvbnRlbnRpb24gY2FzZSwgd2UgbmVlZCB0byBiZSBleHRyYSBjYXJlZnVsIGFib3V0CisgKiBicmFuY2ggdGFyZ2V0cyBpbnRvIHRoZSAic3Bpbm5pbmciIGNvZGUuICBUaGV5IGxpdmUgaW4gdGhlaXIKKyAqIG93biBzZWN0aW9uLCBidXQgdGhlIG5ld2VyIFY5IGJyYW5jaGVzIGhhdmUgYSBzaG9ydGVyIHJhbmdlCisgKiB0aGFuIHRoZSB0cmFkaXRpb25hbCAzMi1iaXQgc3BhcmMgYnJhbmNoIHZhcmlhbnRzLiAgVGhlIHJ1bGUKKyAqIGlzIHRoYXQgdGhlIGJyYW5jaGVzIHRoYXQgZ28gaW50byBhbmQgb3V0IG9mIHRoZSBzcGlubmVyIHNlY3Rpb25zCisgKiBtdXN0IGJlIHByZS1WOSBicmFuY2hlcy4KKyAqLworCisjZGVmaW5lIF9fcmF3X3NwaW5faXNfbG9ja2VkKGxwKQkoKGxwKS0+bG9jayAhPSAwKQorCisjZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQobHApCVwKKwlkbyB7CXJtYigpOwkJCVwKKwl9IHdoaWxlKChscCktPmxvY2spCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZHN0dWIJCVslMV0sICUwXG4iCisiCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCisiCWJybnoscG4JCSUwLCAyZlxuIgorIgkgbm9wXG4iCisiCS5zdWJzZWN0aW9uCTJcbiIKKyIyOglsZHViCQlbJTFdLCAlMFxuIgorIgltZW1iYXIJCSNMb2FkTG9hZFxuIgorIglicm56LHB0CQklMCwgMmJcbiIKKyIJIG5vcFxuIgorIgliYSxhLHB0CQklJXhjYywgMWJcbiIKKyIJLnByZXZpb3VzIgorCTogIj0mciIgKHRtcCkKKwk6ICJyIiAobG9jaykKKwk6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiCWxkc3R1YgkJWyUxXSwgJTBcbiIKKyIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUiCisJOiAiPXIiIChyZXN1bHQpCisJOiAiciIgKGxvY2spCisJOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gKHJlc3VsdCA9PSAwVUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiCW1lbWJhcgkJI1N0b3JlU3RvcmUgfCAjTG9hZFN0b3JlXG4iCisiCXN0YgkJJSVnMCwgWyUwXSIKKwk6IC8qIE5vIG91dHB1dHMgKi8KKwk6ICJyIiAobG9jaykKKwk6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZHN0dWIJCVslMl0sICUwXG4iCisiCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCisiCWJybnoscG4JCSUwLCAyZlxuIgorIgkgbm9wXG4iCisiCS5zdWJzZWN0aW9uCTJcbiIKKyIyOglyZHByCQklJXBpbCwgJTFcbiIKKyIJd3JwcgkJJTMsICUlcGlsXG4iCisiMzoJbGR1YgkJWyUyXSwgJTBcbiIKKyIJbWVtYmFyCQkjTG9hZExvYWRcbiIKKyIJYnJueixwdAkJJTAsIDNiXG4iCisiCSBub3BcbiIKKyIJYmEscHQJCSUleGNjLCAxYlxuIgorIgkgd3JwcgkJJTEsICUlcGlsXG4iCisiCS5wcmV2aW91cyIKKwk6ICI9JnIiICh0bXAxKSwgIj0mciIgKHRtcDIpCisJOiAiciIobG9jayksICJyIihmbGFncykKKwk6ICJtZW1vcnkiKTsKK30KKworLyogTXVsdGktcmVhZGVyIGxvY2tzLCB0aGVzZSBhcmUgbXVjaCBzYW5lciB0aGFuIHRoZSAzMi1iaXQgU3BhcmMgb25lcy4uLiAqLworCitzdGF0aWMgdm9pZCBpbmxpbmUgX19yZWFkX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyIxOglsZHN3CQlbJTJdLCAlMFxuIgorIglicmx6LHBuCQklMCwgMmZcbiIKKyI0OgkgYWRkCQklMCwgMSwgJTFcbiIKKyIJY2FzCQlbJTJdLCAlMCwgJTFcbiIKKyIJY21wCQklMCwgJTFcbiIKKyIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKKyIJYm5lLHBuCQklJWljYywgMWJcbiIKKyIJIG5vcFxuIgorIgkuc3Vic2VjdGlvbgkyXG4iCisiMjoJbGRzdwkJWyUyXSwgJTBcbiIKKyIJbWVtYmFyCQkjTG9hZExvYWRcbiIKKyIJYnJseixwdAkJJTAsIDJiXG4iCisiCSBub3BcbiIKKyIJYmEsYSxwdAkJJSV4Y2MsIDRiXG4iCisiCS5wcmV2aW91cyIKKwk6ICI9JnIiICh0bXAxKSwgIj0mciIgKHRtcDIpCisJOiAiciIgKGxvY2spCisJOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbnQgaW5saW5lIF9fcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3sKKwlpbnQgdG1wMSwgdG1wMjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyIxOglsZHN3CQlbJTJdLCAlMFxuIgorIglicmx6LGEscG4JJTAsIDJmXG4iCisiCSBtb3YJCTAsICUwXG4iCisiCWFkZAkJJTAsIDEsICUxXG4iCisiCWNhcwkJWyUyXSwgJTAsICUxXG4iCisiCWNtcAkJJTAsICUxXG4iCisiCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCisiCWJuZSxwbgkJJSVpY2MsIDFiXG4iCisiCSBtb3YJCTEsICUwXG4iCisiMjoiCisJOiAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQorCTogInIiIChsb2NrKQorCTogIm1lbW9yeSIpOworCisJcmV0dXJuIHRtcDE7Cit9CisKK3N0YXRpYyB2b2lkIGlubGluZSBfX3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJbWVtYmFyCSNTdG9yZUxvYWQgfCAjTG9hZExvYWRcbiIKKyIxOglsZHV3CVslMl0sICUwXG4iCisiCXN1YgklMCwgMSwgJTFcbiIKKyIJY2FzCVslMl0sICUwLCAlMVxuIgorIgljbXAJJTAsICUxXG4iCisiCWJuZSxwbgklJXhjYywgMWJcbiIKKyIJIG5vcCIKKwk6ICI9JnIiICh0bXAxKSwgIj0mciIgKHRtcDIpCisJOiAiciIgKGxvY2spCisJOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyB2b2lkIGlubGluZSBfX3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgbWFzaywgdG1wMSwgdG1wMjsKKworCW1hc2sgPSAweDgwMDAwMDAwVUw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZHV3CQlbJTJdLCAlMFxuIgorIglicm56LHBuCQklMCwgMmZcbiIKKyI0Ogkgb3IJCSUwLCAlMywgJTFcbiIKKyIJY2FzCQlbJTJdLCAlMCwgJTFcbiIKKyIJY21wCQklMCwgJTFcbiIKKyIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKKyIJYm5lLHBuCQklJWljYywgMWJcbiIKKyIJIG5vcFxuIgorIgkuc3Vic2VjdGlvbgkyXG4iCisiMjoJbGR1dwkJWyUyXSwgJTBcbiIKKyIJbWVtYmFyCQkjTG9hZExvYWRcbiIKKyIJYnJueixwdAkJJTAsIDJiXG4iCisiCSBub3BcbiIKKyIJYmEsYSxwdAkJJSV4Y2MsIDRiXG4iCisiCS5wcmV2aW91cyIKKwk6ICI9JnIiICh0bXAxKSwgIj0mciIgKHRtcDIpCisJOiAiciIgKGxvY2spLCAiciIgKG1hc2spCisJOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyB2b2lkIGlubGluZSBfX3dyaXRlX3VubG9jayhyYXdfcndsb2NrX3QgKmxvY2spCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiCW1lbWJhcgkJI0xvYWRTdG9yZSB8ICNTdG9yZVN0b3JlXG4iCisiCXN0dwkJJSVnMCwgWyUwXSIKKwk6IC8qIG5vIG91dHB1dHMgKi8KKwk6ICJyIiAobG9jaykKKwk6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGludCBpbmxpbmUgX193cml0ZV90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2ssIHRtcDEsIHRtcDIsIHJlc3VsdDsKKworCW1hc2sgPSAweDgwMDAwMDAwVUw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJbW92CQkwLCAlMlxuIgorIjE6CWxkdXcJCVslM10sICUwXG4iCisiCWJybnoscG4JCSUwLCAyZlxuIgorIgkgb3IJCSUwLCAlNCwgJTFcbiIKKyIJY2FzCQlbJTNdLCAlMCwgJTFcbiIKKyIJY21wCQklMCwgJTFcbiIKKyIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKKyIJYm5lLHBuCQklJWljYywgMWJcbiIKKyIJIG5vcFxuIgorIgltb3YJCTEsICUyXG4iCisiMjoiCisJOiAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKSwgIj0mciIgKHJlc3VsdCkKKwk6ICJyIiAobG9jayksICJyIiAobWFzaykKKwk6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrKHApCV9fcmVhZF9sb2NrKHApCisjZGVmaW5lIF9fcmF3X3JlYWRfdHJ5bG9jayhwKQlfX3JlYWRfdHJ5bG9jayhwKQorI2RlZmluZSBfX3Jhd19yZWFkX3VubG9jayhwKQlfX3JlYWRfdW5sb2NrKHApCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2socCkJX193cml0ZV9sb2NrKHApCisjZGVmaW5lIF9fcmF3X3dyaXRlX3VubG9jayhwKQlfX3dyaXRlX3VubG9jayhwKQorI2RlZmluZSBfX3Jhd193cml0ZV90cnlsb2NrKHApCV9fd3JpdGVfdHJ5bG9jayhwKQorCisjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2socncpCQkoISgocncpLT5sb2NrICYgMHg4MDAwMDAwMFVMKSkKKyNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpCSghKHJ3KS0+bG9jaykKKworI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfX1NQQVJDNjRfU1BJTkxPQ0tfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zcGlubG9ja190eXBlcy5oCmluZGV4IDBhMGZiMTEuLjM3Y2JlMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2tfdHlwZXMuaApAQCAtNiw3ICs2LDcgQEAKICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBsb2NrOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbG9jazsKIH0gcmF3X3NwaW5sb2NrX3Q7CiAKICNkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VECXsgMCB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zcGl0ZmlyZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3BpdGZpcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODVlYTdlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3BpdGZpcmUuaApAQCAtMCwwICsxLDM0MiBAQAorLyogc3BpdGZpcmUuaDogU3BpdEZpcmUvQmxhY2tCaXJkL0NoZWV0YWggaW5saW5lIE1NVSBvcGVyYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9TUElURklSRV9ICisjZGVmaW5lIF9TUEFSQzY0X1NQSVRGSVJFX0gKKworI2luY2x1ZGUgPGFzbS9hc2kuaD4KKworLyogVGhlIGZvbGxvd2luZyByZWdpc3RlciBhZGRyZXNzZXMgYXJlIGFjY2Vzc2libGUgdmlhIEFTSV9ETU1VCisgKiBhbmQgQVNJX0lNTVUsIHRoYXQgaXMgdGhlcmUgaXMgYSBkaXN0aW5jdCBhbmQgdW5pcXVlIGNvcHkgb2YKKyAqIGVhY2ggdGhlc2UgcmVnaXN0ZXJzIGZvciBlYWNoIFRMQi4KKyAqLworI2RlZmluZSBUU0JfVEFHX1RBUkdFVAkJMHgwMDAwMDAwMDAwMDAwMDAwIC8qIEFsbCBjaGlwcwkJCQkqLworI2RlZmluZSBUTEJfU0ZTUgkJMHgwMDAwMDAwMDAwMDAwMDE4IC8qIEFsbCBjaGlwcwkJCQkqLworI2RlZmluZSBUU0JfUkVHCQkJMHgwMDAwMDAwMDAwMDAwMDI4IC8qIEFsbCBjaGlwcwkJCQkqLworI2RlZmluZSBUTEJfVEFHX0FDQ0VTUwkJMHgwMDAwMDAwMDAwMDAwMDMwIC8qIEFsbCBjaGlwcwkJCQkqLworI2RlZmluZSBWSVJUX1dBVENIUE9JTlQJCTB4MDAwMDAwMDAwMDAwMDAzOCAvKiBBbGwgY2hpcHMJCQkJKi8KKyNkZWZpbmUgUEhZU19XQVRDSFBPSU5UCQkweDAwMDAwMDAwMDAwMDAwNDAgLyogQWxsIGNoaXBzCQkJCSovCisjZGVmaW5lIFRTQl9FWFRFTlNJT05fUAkJMHgwMDAwMDAwMDAwMDAwMDQ4IC8qIFVsdHJhLUlJSSBhbmQgbGF0ZXIJCSovCisjZGVmaW5lIFRTQl9FWFRFTlNJT05fUwkJMHgwMDAwMDAwMDAwMDAwMDUwIC8qIFVsdHJhLUlJSSBhbmQgbGF0ZXIsIEQtVExCIG9ubHkJKi8KKyNkZWZpbmUgVFNCX0VYVEVOU0lPTl9OCQkweDAwMDAwMDAwMDAwMDAwNTggLyogVWx0cmEtSUlJIGFuZCBsYXRlcgkJKi8KKyNkZWZpbmUgVExCX1RBR19BQ0NFU1NfRVhUCTB4MDAwMDAwMDAwMDAwMDA2MCAvKiBVbHRyYS1JSUkrIGFuZCBsYXRlcgkJKi8KKworLyogVGhlc2UgcmVnaXN0ZXJzIG9ubHkgZXhpc3QgYXMgb25lIGVudGl0eSwgYW5kIGFyZSBhY2Nlc3NlZAorICogdmlhIEFTSV9ETU1VIG9ubHkuCisgKi8KKyNkZWZpbmUgUFJJTUFSWV9DT05URVhUCQkweDAwMDAwMDAwMDAwMDAwMDgKKyNkZWZpbmUgU0VDT05EQVJZX0NPTlRFWFQJMHgwMDAwMDAwMDAwMDAwMDEwCisjZGVmaW5lIERNTVVfU0ZBUgkJMHgwMDAwMDAwMDAwMDAwMDIwCisjZGVmaW5lIFZJUlRfV0FUQ0hQT0lOVAkJMHgwMDAwMDAwMDAwMDAwMDM4CisjZGVmaW5lIFBIWVNfV0FUQ0hQT0lOVAkJMHgwMDAwMDAwMDAwMDAwMDQwCisKKyNkZWZpbmUgU1BJVEZJUkVfSElHSEVTVF9MT0NLRURfVExCRU5UCSg2NCAtIDEpCisjZGVmaW5lIENIRUVUQUhfSElHSEVTVF9MT0NLRURfVExCRU5UCSgxNiAtIDEpCisKKyNkZWZpbmUgTDFEQ0FDSEVfU0laRQkJMHg0MDAwCisKKyNkZWZpbmUgU1VONFZfQ0hJUF9JTlZBTElECTB4MDAKKyNkZWZpbmUgU1VONFZfQ0hJUF9OSUFHQVJBMQkweDAxCisjZGVmaW5lIFNVTjRWX0NISVBfTklBR0FSQTIJMHgwMgorI2RlZmluZSBTVU40Vl9DSElQX1VOS05PV04JMHhmZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitlbnVtIHVsdHJhX3RsYl9sYXlvdXQgeworCXNwaXRmaXJlID0gMCwKKwljaGVldGFoID0gMSwKKwljaGVldGFoX3BsdXMgPSAyLAorCWh5cGVydmlzb3IgPSAzLAorfTsKKworZXh0ZXJuIGVudW0gdWx0cmFfdGxiX2xheW91dCB0bGJfdHlwZTsKKworZXh0ZXJuIGludCBzdW40dl9jaGlwX3R5cGU7CisKK2V4dGVybiBpbnQgY2hlZXRhaF9wY2FjaGVfZm9yY2VkX29uOworZXh0ZXJuIHZvaWQgY2hlZXRhaF9lbmFibGVfcGNhY2hlKHZvaWQpOworCisjZGVmaW5lIHNwYXJjNjRfaGlnaGVzdF9sb2NrZWRfdGxiZW50KCkJXAorCSh0bGJfdHlwZSA9PSBzcGl0ZmlyZSA/IFwKKwkgU1BJVEZJUkVfSElHSEVTVF9MT0NLRURfVExCRU5UIDogXAorCSBDSEVFVEFIX0hJR0hFU1RfTE9DS0VEX1RMQkVOVCkKKworZXh0ZXJuIGludCBudW1fa2VybmVsX2ltYWdlX21hcHBpbmdzOworCisvKiBUaGUgZGF0YSBjYWNoZSBpcyB3cml0ZSB0aHJvdWdoLCBzbyB0aGlzIGp1c3QgaW52YWxpZGF0ZXMgdGhlCisgKiBzcGVjaWZpZWQgbGluZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNwaXRmaXJlX3B1dF9kY2FjaGVfdGFnKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyB0YWcpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHRhZyksICJyIiAoYWRkciksICJpIiAoQVNJX0RDQUNIRV9UQUcpKTsKK30KKworLyogVGhlIGluc3RydWN0aW9uIGNhY2hlIGxpbmVzIGFyZSBmbHVzaGVkIHdpdGggdGhpcywgYnV0IG5vdGUgdGhhdAorICogdGhpcyBkb2VzIG5vdCBmbHVzaCB0aGUgcGlwZWxpbmUuICBJdCBpcyBwb3NzaWJsZSBmb3IgYSBsaW5lIHRvCisgKiBnZXQgZmx1c2hlZCBidXQgc3RhbGUgaW5zdHJ1Y3Rpb25zIHRvIHN0aWxsIGJlIGluIHRoZSBwaXBlbGluZSwKKyAqIGEgZmx1c2ggaW5zdHJ1Y3Rpb24gKHRvIGFueSBhZGRyZXNzKSBpcyBzdWZmaWNpZW50IHRvIGhhbmRsZQorICogdGhpcyBpc3N1ZSBhZnRlciB0aGUgbGluZSBpcyBpbnZhbGlkYXRlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNwaXRmaXJlX3B1dF9pY2FjaGVfdGFnKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyB0YWcpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHRhZyksICJyIiAoYWRkciksICJpIiAoQVNJX0lDX1RBRykpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3BpdGZpcmVfZ2V0X2R0bGJfZGF0YShpbnQgZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAoZGF0YSkKKwkJCSAgICAgOiAiciIgKGVudHJ5IDw8IDMpLCAiaSIgKEFTSV9EVExCX0RBVEFfQUNDRVNTKSk7CisKKwkvKiBDbGVhciBUVEUgZGlhZyBiaXRzLiAqLworCWRhdGEgJj0gfjB4MDAwM2ZlMDAwMDAwMDAwMFVMOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzcGl0ZmlyZV9nZXRfZHRsYl90YWcoaW50IGVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgdGFnOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAodGFnKQorCQkJICAgICA6ICJyIiAoZW50cnkgPDwgMyksICJpIiAoQVNJX0RUTEJfVEFHX1JFQUQpKTsKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdGZpcmVfcHV0X2R0bGJfZGF0YShpbnQgZW50cnksIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N5bmMiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoZGF0YSksICJyIiAoZW50cnkgPDwgMyksCisJCQkgICAgICAgImkiIChBU0lfRFRMQl9EQVRBX0FDQ0VTUykpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3BpdGZpcmVfZ2V0X2l0bGJfZGF0YShpbnQgZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAoZGF0YSkKKwkJCSAgICAgOiAiciIgKGVudHJ5IDw8IDMpLCAiaSIgKEFTSV9JVExCX0RBVEFfQUNDRVNTKSk7CisKKwkvKiBDbGVhciBUVEUgZGlhZyBiaXRzLiAqLworCWRhdGEgJj0gfjB4MDAwM2ZlMDAwMDAwMDAwMFVMOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzcGl0ZmlyZV9nZXRfaXRsYl90YWcoaW50IGVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgdGFnOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAodGFnKQorCQkJICAgICA6ICJyIiAoZW50cnkgPDwgMyksICJpIiAoQVNJX0lUTEJfVEFHX1JFQUQpKTsKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdGZpcmVfcHV0X2l0bGJfZGF0YShpbnQgZW50cnksIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCisJCQkgICAgICJtZW1iYXIJI1N5bmMiCisJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoZGF0YSksICJyIiAoZW50cnkgPDwgMyksCisJCQkgICAgICAgImkiIChBU0lfSVRMQl9EQVRBX0FDQ0VTUykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdGZpcmVfZmx1c2hfZHRsYl9udWNsZXVzX3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUlZzAsIFslMF0gJTFcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHBhZ2UgfCAweDIwKSwgImkiIChBU0lfRE1NVV9ERU1BUCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdGZpcmVfZmx1c2hfaXRsYl9udWNsZXVzX3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUlZzAsIFslMF0gJTFcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHBhZ2UgfCAweDIwKSwgImkiIChBU0lfSU1NVV9ERU1BUCkpOworfQorCisvKiBDaGVldGFoIGhhcyAiYWxsIG5vbi1sb2NrZWQiIHRsYiBmbHVzaGVzLiAqLworc3RhdGljIGlubGluZSB2b2lkIGNoZWV0YWhfZmx1c2hfZHRsYl9hbGwodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICgweDgwKSwgImkiIChBU0lfRE1NVV9ERU1BUCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlZXRhaF9mbHVzaF9pdGxiX2FsbCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUlZzAsIFslMF0gJTFcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKDB4ODApLCAiaSIgKEFTSV9JTU1VX0RFTUFQKSk7Cit9CisKKy8qIENoZWV0YWggaGFzIGEgNC10bGIgbGF5b3V0IHNvIGRpcmVjdCBhY2Nlc3MgaXMgYSBiaXQgZGlmZmVyZW50LgorICogVGhlIGZpcnN0IHR3byBUTEJzIGFyZSBmdWxseSBhc3Nvc2NpYXRpdmUsIGhvbGQgMTYgZW50cmllcywgYW5kIGFyZQorICogdXNlZCBvbmx5IGZvciBsb2NrZWQgYW5kID44SyBzaXplZCB0cmFuc2xhdGlvbnMuICBPbmUgZXhpc3RzIGZvcgorICogZGF0YSBhY2Nlc3NlcyBhbmQgb25lIGZvciBpbnN0cnVjdGlvbiBhY2Nlc3Nlcy4KKyAqCisgKiBUaGUgdGhpcmQgVExCIGlzIGZvciBkYXRhIGFjY2Vzc2VzIHRvIDhLIG5vbi1sb2NrZWQgdHJhbnNsYXRpb25zLCBpcworICogMiB3YXkgYXNzb3NjaWF0aXZlLCBhbmQgaG9sZHMgNTEyIGVudHJpZXMuICBUaGUgZm91cnRoIFRMQiBpcyBmb3IKKyAqIGluc3RydWN0aW9uIGFjY2Vzc2VzIHRvIDhLIG5vbi1sb2NrZWQgdHJhbnNsYXRpb25zLCBpcyAyIHdheQorICogYXNzb3NjaWF0aXZlLCBhbmQgaG9sZHMgMTI4IGVudHJpZXMuCisgKgorICogQ2hlZXRhaCBoYXMgc29tZSBidWcgd2hlcmUgYm9ndXMgZGF0YSBjYW4gYmUgcmV0dXJuZWQgZnJvbQorICogQVNJX3tELEl9VExCX0RBVEFfQUNDRVNTIGxvYWRzLCBkb2luZyB0aGUgbG9hZCB0d2ljZSBmaXhlcworICogdGhlIHByb2JsZW0gZm9yIG1lLiAtRGF2ZU0KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWV0YWhfZ2V0X2xkdGxiX2RhdGEoaW50IGVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUlZzBcblx0IgorCQkJICAgICAibGR4YQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiIChkYXRhKQorCQkJICAgICA6ICJyIiAoKDAgPDwgMTYpIHwgKGVudHJ5IDw8IDMpKSwKKwkJCSAgICAgImkiIChBU0lfRFRMQl9EQVRBX0FDQ0VTUykpOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVldGFoX2dldF9saXRsYl9kYXRhKGludCBlbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlJWcwXG5cdCIKKwkJCSAgICAgImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAoZGF0YSkKKwkJCSAgICAgOiAiciIgKCgwIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCisJCQkgICAgICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlZXRhaF9nZXRfbGR0bGJfdGFnKGludCBlbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIHRhZzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgorCQkJICAgICA6ICI9ciIgKHRhZykKKwkJCSAgICAgOiAiciIgKCgwIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCisJCQkgICAgICJpIiAoQVNJX0RUTEJfVEFHX1JFQUQpKTsKKworCXJldHVybiB0YWc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVldGFoX2dldF9saXRsYl90YWcoaW50IGVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgdGFnOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAodGFnKQorCQkJICAgICA6ICJyIiAoKDAgPDwgMTYpIHwgKGVudHJ5IDw8IDMpKSwKKwkJCSAgICAgImkiIChBU0lfSVRMQl9UQUdfUkVBRCkpOworCisJcmV0dXJuIHRhZzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoZWV0YWhfcHV0X2xkdGxiX2RhdGEoaW50IGVudHJ5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgorCQkJICAgICAibWVtYmFyCSNTeW5jIgorCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKGRhdGEpLAorCQkJICAgICAgICJyIiAoKDAgPDwgMTYpIHwgKGVudHJ5IDw8IDMpKSwKKwkJCSAgICAgICAiaSIgKEFTSV9EVExCX0RBVEFfQUNDRVNTKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVldGFoX3B1dF9saXRsYl9kYXRhKGludCBlbnRyeSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChkYXRhKSwKKwkJCSAgICAgICAiciIgKCgwIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCisJCQkgICAgICAgImkiIChBU0lfSVRMQl9EQVRBX0FDQ0VTUykpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlZXRhaF9nZXRfZHRsYl9kYXRhKGludCBlbnRyeSwgaW50IHRsYikKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlJWcwXG5cdCIKKwkJCSAgICAgImxkeGEJWyUxXSAlMiwgJTAiCisJCQkgICAgIDogIj1yIiAoZGF0YSkKKwkJCSAgICAgOiAiciIgKCh0bGIgPDwgMTYpIHwgKGVudHJ5IDw8IDMpKSwgImkiIChBU0lfRFRMQl9EQVRBX0FDQ0VTUykpOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVldGFoX2dldF9kdGxiX3RhZyhpbnQgZW50cnksIGludCB0bGIpCit7CisJdW5zaWduZWQgbG9uZyB0YWc7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiICh0YWcpCisJCQkgICAgIDogInIiICgodGxiIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksICJpIiAoQVNJX0RUTEJfVEFHX1JFQUQpKTsKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlZXRhaF9wdXRfZHRsYl9kYXRhKGludCBlbnRyeSwgdW5zaWduZWQgbG9uZyBkYXRhLCBpbnQgdGxiKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChkYXRhKSwKKwkJCSAgICAgICAiciIgKCh0bGIgPDwgMTYpIHwgKGVudHJ5IDw8IDMpKSwKKwkJCSAgICAgICAiaSIgKEFTSV9EVExCX0RBVEFfQUNDRVNTKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVldGFoX2dldF9pdGxiX2RhdGEoaW50IGVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUlZzBcblx0IgorCQkJICAgICAibGR4YQlbJTFdICUyLCAlMCIKKwkJCSAgICAgOiAiPXIiIChkYXRhKQorCQkJICAgICA6ICJyIiAoKDIgPDwgMTYpIHwgKGVudHJ5IDw8IDMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaSIgKEFTSV9JVExCX0RBVEFfQUNDRVNTKSk7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWV0YWhfZ2V0X2l0bGJfdGFnKGludCBlbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIHRhZzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgorCQkJICAgICA6ICI9ciIgKHRhZykKKwkJCSAgICAgOiAiciIgKCgyIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksICJpIiAoQVNJX0lUTEJfVEFHX1JFQUQpKTsKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlZXRhaF9wdXRfaXRsYl9kYXRhKGludCBlbnRyeSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKKwkJCSAgICAgIm1lbWJhcgkjU3luYyIKKwkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChkYXRhKSwgInIiICgoMiA8PCAxNikgfCAoZW50cnkgPDwgMykpLAorCQkJICAgICAgICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpKTsKK30KKworI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9TUElURklSRV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3N0YXRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MzNWRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3N0YXRlLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfU1BBUkM2NF9TU1RBVEVfSAorI2RlZmluZSBfU1BBUkM2NF9TU1RBVEVfSAorCitleHRlcm4gdm9pZCBzc3RhdGVfYm9vdGluZyh2b2lkKTsKK2V4dGVybiB2b2lkIHNzdGF0ZV9ydW5uaW5nKHZvaWQpOworZXh0ZXJuIHZvaWQgc3N0YXRlX2hhbHQodm9pZCk7CitleHRlcm4gdm9pZCBzc3RhdGVfcG93ZXJvZmYodm9pZCk7CitleHRlcm4gdm9pZCBzc3RhdGVfcGFuaWModm9pZCk7CitleHRlcm4gdm9pZCBzc3RhdGVfcmVib290KHZvaWQpOworCitleHRlcm4gdm9pZCBzdW40dl9zc3RhdGVfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qIF9TUEFSQzY0X1NTVEFURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zdGFja3RyYWNlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zdGFja3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlZTM5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YWNrdHJhY2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX1NQQVJDNjRfU1RBQ0tUUkFDRV9ICisjZGVmaW5lIF9TUEFSQzY0X1NUQUNLVFJBQ0VfSAorCitleHRlcm4gdm9pZCBzdGFja190cmFjZV9mbHVzaCh2b2lkKTsKKworI2VuZGlmIC8qIF9TUEFSQzY0X1NUQUNLVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3RhcmZpcmUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXJmaXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiYWZkMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXJmaXJlLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIHN0YXJmaXJlLmg6IEdyb3VwIGFsbCBzdGFyZmlyZSBzcGVjaWZpYyBjb2RlIHRvZ2V0aGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBBbnRvbiBCbGFuY2hhcmQgKGFudG9uQHNhbWJhLm9yZykKKyAqLworCisjaWZuZGVmIF9TUEFSQzY0X1NUQVJGSVJFX0gKKyNkZWZpbmUgX1NQQVJDNjRfU1RBUkZJUkVfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gaW50IHRoaXNfaXNfc3RhcmZpcmU7CisKK2V4dGVybiB2b2lkIGNoZWNrX2lmX3N0YXJmaXJlKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RhcmZpcmVfY3B1X3NldHVwKHZvaWQpOworZXh0ZXJuIGludCBzdGFyZmlyZV9oYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CitleHRlcm4gdm9pZCBzdGFyZmlyZV9ob29rdXAoaW50KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3RhcmZpcmVfdHJhbnNsYXRlKHVuc2lnbmVkIGxvbmcgaW1hcCwgdW5zaWduZWQgaW50IHVwYWlkKTsKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXQuaAppbmRleCAyMjk5ZTFkNS4uOWZkY2FmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc3RhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXQuaApAQCAtMSw3NiArMSw4IEBACi0jaWZuZGVmIF9TUEFSQ19TVEFUX0gKLSNkZWZpbmUgX1NQQVJDX1NUQVRfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKLQl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7Ci0JdW5zaWduZWQgc2hvcnQgc3RfaW5vOwotCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7Ci0JdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7Ci0JdW5zaWduZWQgc2hvcnQgc3RfdWlkOwotCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKLQl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwotCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Ci19OwotCi1zdHJ1Y3Qgc3RhdCB7Ci0JdW5zaWduZWQgc2hvcnQJc3RfZGV2OwotCXVuc2lnbmVkIGxvbmcJc3RfaW5vOwotCXVuc2lnbmVkIHNob3J0CXN0X21vZGU7Ci0Jc2hvcnQJCXN0X25saW5rOwotCXVuc2lnbmVkIHNob3J0CXN0X3VpZDsKLQl1bnNpZ25lZCBzaG9ydAlzdF9naWQ7Ci0JdW5zaWduZWQgc2hvcnQJc3RfcmRldjsKLQlsb25nCQlzdF9zaXplOwotCWxvbmcJCXN0X2F0aW1lOwotCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWVfbnNlYzsKLQlsb25nCQlzdF9tdGltZTsKLQl1bnNpZ25lZCBsb25nCXN0X210aW1lX25zZWM7Ci0JbG9uZwkJc3RfY3RpbWU7Ci0JdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOwotCWxvbmcJCXN0X2Jsa3NpemU7Ci0JbG9uZwkJc3RfYmxvY2tzOwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0WzJdOwotfTsKLQotI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAxCi0KLXN0cnVjdCBzdGF0NjQgewotCXVuc2lnbmVkIGxvbmcgbG9uZyBzdF9kZXY7Ci0KLQl1bnNpZ25lZCBsb25nIGxvbmcgc3RfaW5vOwotCi0JdW5zaWduZWQgaW50CXN0X21vZGU7Ci0JdW5zaWduZWQgaW50CXN0X25saW5rOwotCi0JdW5zaWduZWQgaW50CXN0X3VpZDsKLQl1bnNpZ25lZCBpbnQJc3RfZ2lkOwotCi0JdW5zaWduZWQgbG9uZyBsb25nIHN0X3JkZXY7Ci0KLQl1bnNpZ25lZCBjaGFyCV9fcGFkM1s4XTsKLQotCWxvbmcgbG9uZwlzdF9zaXplOwotCXVuc2lnbmVkIGludAlzdF9ibGtzaXplOwotCi0JdW5zaWduZWQgY2hhcglfX3BhZDRbOF07Ci0JdW5zaWduZWQgaW50CXN0X2Jsb2NrczsKLQotCXVuc2lnbmVkIGludAlzdF9hdGltZTsKLQl1bnNpZ25lZCBpbnQJc3RfYXRpbWVfbnNlYzsKLQotCXVuc2lnbmVkIGludAlzdF9tdGltZTsKLQl1bnNpZ25lZCBpbnQJc3RfbXRpbWVfbnNlYzsKLQotCXVuc2lnbmVkIGludAlzdF9jdGltZTsKLQl1bnNpZ25lZCBpbnQJc3RfY3RpbWVfbnNlYzsKLQotCXVuc2lnbmVkIGludAlfX3VudXNlZDQ7Ci0JdW5zaWduZWQgaW50CV9fdW51c2VkNTsKLX07Ci0KKyNpZm5kZWYgX19fQVNNX1NQQVJDX1NUQVRfSAorI2RlZmluZSBfX19BU01fU1BBUkNfU1RBVF9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvc3RhdF82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvc3RhdF8zMi5oPgorI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXRfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXRfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjk5ZTFkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXRfMzIuaApAQCAtMCwwICsxLDc2IEBACisjaWZuZGVmIF9TUEFSQ19TVEFUX0gKKyNkZWZpbmUgX1NQQVJDX1NUQVRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgc3RfaW5vOworCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisJdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisJdW5zaWduZWQgc2hvcnQgc3RfdWlkOworCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7CisJdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Cit9OworCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgc2hvcnQJc3RfZGV2OworCXVuc2lnbmVkIGxvbmcJc3RfaW5vOworCXVuc2lnbmVkIHNob3J0CXN0X21vZGU7CisJc2hvcnQJCXN0X25saW5rOworCXVuc2lnbmVkIHNob3J0CXN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydAlzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQJc3RfcmRldjsKKwlsb25nCQlzdF9zaXplOworCWxvbmcJCXN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWVfbnNlYzsKKwlsb25nCQlzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lX25zZWM7CisJbG9uZwkJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOworCWxvbmcJCXN0X2Jsa3NpemU7CisJbG9uZwkJc3RfYmxvY2tzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0WzJdOworfTsKKworI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAxCisKK3N0cnVjdCBzdGF0NjQgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdF9kZXY7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RfaW5vOworCisJdW5zaWduZWQgaW50CXN0X21vZGU7CisJdW5zaWduZWQgaW50CXN0X25saW5rOworCisJdW5zaWduZWQgaW50CXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQJc3RfZ2lkOworCisJdW5zaWduZWQgbG9uZyBsb25nIHN0X3JkZXY7CisKKwl1bnNpZ25lZCBjaGFyCV9fcGFkM1s4XTsKKworCWxvbmcgbG9uZwlzdF9zaXplOworCXVuc2lnbmVkIGludAlzdF9ibGtzaXplOworCisJdW5zaWduZWQgY2hhcglfX3BhZDRbOF07CisJdW5zaWduZWQgaW50CXN0X2Jsb2NrczsKKworCXVuc2lnbmVkIGludAlzdF9hdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfYXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGludAlzdF9tdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfbXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGludAlzdF9jdGltZTsKKwl1bnNpZ25lZCBpbnQJc3RfY3RpbWVfbnNlYzsKKworCXVuc2lnbmVkIGludAlfX3VudXNlZDQ7CisJdW5zaWduZWQgaW50CV9fdW51c2VkNTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3RhdF82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3RhdF82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NTBmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zdGF0XzY0LmgKQEAgLTAsMCArMSw0NyBAQAorI2lmbmRlZiBfU1BBUkM2NF9TVEFUX0gKKyNkZWZpbmUgX1NQQVJDNjRfU1RBVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgc3RhdCB7CisJdW5zaWduZWQgICBzdF9kZXY7CisJaW5vX3QgICBzdF9pbm87CisJbW9kZV90ICBzdF9tb2RlOworCXNob3J0ICAgc3Rfbmxpbms7CisJdWlkX3QgICBzdF91aWQ7CisJZ2lkX3QgICBzdF9naWQ7CisJdW5zaWduZWQgICBzdF9yZGV2OworCW9mZl90ICAgc3Rfc2l6ZTsKKwl0aW1lX3QgIHN0X2F0aW1lOworCXRpbWVfdCAgc3RfbXRpbWU7CisJdGltZV90ICBzdF9jdGltZTsKKwlvZmZfdCAgIHN0X2Jsa3NpemU7CisJb2ZmX3QgICBzdF9ibG9ja3M7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0WzJdOworfTsKKworc3RydWN0IHN0YXQ2NCB7CisJdW5zaWduZWQgbG9uZwlzdF9kZXY7CisJdW5zaWduZWQgbG9uZwlzdF9pbm87CisJdW5zaWduZWQgbG9uZwlzdF9ubGluazsKKworCXVuc2lnbmVkIGludAlzdF9tb2RlOworCXVuc2lnbmVkIGludAlzdF91aWQ7CisJdW5zaWduZWQgaW50CXN0X2dpZDsKKwl1bnNpZ25lZCBpbnQJX19wYWQwOworCisJdW5zaWduZWQgbG9uZwlzdF9yZGV2OworCWxvbmcJCXN0X3NpemU7CisJbG9uZwkJc3RfYmxrc2l6ZTsKKwlsb25nCQlzdF9ibG9ja3M7CisKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWVfbnNlYzsKKwl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWVfbnNlYzsKKwlsb25nCQlfX3VudXNlZFszXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zdGF0ZnMuaAppbmRleCAzMDQ1MjBmLi5hNzBjYzUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zdGF0ZnMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zdGF0ZnMuaApAQCAtMSw2ICsxLDggQEAKLSNpZm5kZWYgX1NQQVJDX1NUQVRGU19ICi0jZGVmaW5lIF9TUEFSQ19TVEFURlNfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+Ci0KKyNpZm5kZWYgX19fQVNNX1NQQVJDX1NUQVRGU19ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19TVEFURlNfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3N0YXRmc182NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvc3RhdGZzXzMyLmg+CisjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3RhdGZzXzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zdGF0ZnNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDQ1MjBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3RhdGZzXzMyLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9TUEFSQ19TVEFURlNfSAorI2RlZmluZSBfU1BBUkNfU1RBVEZTX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXRmc182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3RhdGZzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliM2M4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0YXRmc182NC5oCkBAIC0wLDAgKzEsNTQgQEAKKyNpZm5kZWYgX1NQQVJDNjRfU1RBVEZTX0gKKyNkZWZpbmUgX1NQQVJDNjRfU1RBVEZTX0gKKworI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKKworI2VuZGlmCisKK3N0cnVjdCBzdGF0ZnMgeworCWxvbmcgZl90eXBlOworCWxvbmcgZl9ic2l6ZTsKKwlsb25nIGZfYmxvY2tzOworCWxvbmcgZl9iZnJlZTsKKwlsb25nIGZfYmF2YWlsOworCWxvbmcgZl9maWxlczsKKwlsb25nIGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlsb25nIGZfbmFtZWxlbjsKKwlsb25nIGZfZnJzaXplOworCWxvbmcgZl9zcGFyZVs1XTsKK307CisKK3N0cnVjdCBzdGF0ZnM2NCB7CisJbG9uZyBmX3R5cGU7CisJbG9uZyBmX2JzaXplOworCWxvbmcgZl9ibG9ja3M7CisJbG9uZyBmX2JmcmVlOworCWxvbmcgZl9iYXZhaWw7CisJbG9uZyBmX2ZpbGVzOworCWxvbmcgZl9mZnJlZTsKKwlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworCWxvbmcgZl9uYW1lbGVuOworCWxvbmcgZl9mcnNpemU7CisJbG9uZyBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7CisJX191MzIgZl90eXBlOworCV9fdTMyIGZfYnNpemU7CisJX191NjQgZl9ibG9ja3M7CisJX191NjQgZl9iZnJlZTsKKwlfX3U2NCBmX2JhdmFpbDsKKwlfX3U2NCBmX2ZpbGVzOworCV9fdTY0IGZfZmZyZWU7CisJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKwlfX3UzMiBmX25hbWVsZW47CisJX191MzIgZl9mcnNpemU7CisJX191MzIgZl9zcGFyZVs1XTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zdHJpbmcuaAppbmRleCA4ZDdjMGRkLi4xNGMwNGM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zdHJpbmcuaApAQCAtMSwyMDUgKzEsOCBAQAotLyoKLSAqIHN0cmluZy5oOiBFeHRlcm5hbCBkZWZpbml0aW9ucyBmb3Igb3B0aW1pemVkIGFzc2VtYmx5IHN0cmluZwotICogICAgICAgICAgIHJvdXRpbmVzIGZvciB0aGUgTGludXggS2VybmVsLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSwxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMTk5NiwxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKi8KLQotI2lmbmRlZiBfX1NQQVJDX1NUUklOR19IX18KLSNkZWZpbmUgX19TUEFSQ19TVFJJTkdfSF9fCi0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0vKiBSZWFsbHksIHVzZXJsYW5kL2tzeW1zIHNob3VsZCBub3Qgc2VlIGFueSBvZiB0aGlzIHN0dWZmLiAqLwotCi0jaWZkZWYgX19LRVJORUxfXwotCi1leHRlcm4gdm9pZCBfX21lbW1vdmUodm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwotZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBfX21lbWNweSh2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7Ci1leHRlcm4gX19rZXJuZWxfc2l6ZV90IF9fbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKLQotI2lmbmRlZiBFWFBPUlRfU1lNVEFCX1NUUk9QUwotCi0vKiBGaXJzdCB0aGUgbWVtKigpIHRoaW5ncy4gKi8KLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQotI3VuZGVmIG1lbW1vdmUKLSNkZWZpbmUgbWVtbW92ZShfdG8sIF9mcm9tLCBfbikgXAotKHsgXAotCXZvaWQgKl90ID0gKF90byk7IFwKLQlfX21lbW1vdmUoX3QsIChfZnJvbSksIChfbikpOyBcCi0JX3Q7IFwKLX0pCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqX19jb25zdGFudF9tZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIF9fa2VybmVsX3NpemVfdCBuKQotewotCWV4dGVybiB2b2lkIF9fY29weV8xcGFnZSh2b2lkICosIGNvbnN0IHZvaWQgKik7Ci0KLQlpZihuIDw9IDMyKSB7Ci0JCV9fYnVpbHRpbl9tZW1jcHkodG8sIGZyb20sIG4pOwotCX0gZWxzZSBpZiAoKCh1bnNpZ25lZCBpbnQpIHRvICYgNykgIT0gMCkgewotCQkvKiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBvbiB0aGUgZG91YmxlLXdvcmQgYm91bmRhcnkgKi8KLQkJX19tZW1jcHkodG8sIGZyb20sIG4pOwotCX0gZWxzZSB7Ci0JCXN3aXRjaChuKSB7Ci0JCWNhc2UgUEFHRV9TSVpFOgotCQkJX19jb3B5XzFwYWdlKHRvLCBmcm9tKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJX19tZW1jcHkodG8sIGZyb20sIG4pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRvOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKl9fbm9uY29uc3RhbnRfbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBfX2tlcm5lbF9zaXplX3QgbikKLXsKLQlfX21lbWNweSh0bywgZnJvbSwgbik7Ci0JcmV0dXJuIHRvOwotfQotCi0jdW5kZWYgbWVtY3B5Ci0jZGVmaW5lIG1lbWNweSh0LCBmLCBuKSBcCi0oX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCi0gX19jb25zdGFudF9tZW1jcHkoKHQpLChmKSwobikpIDogXAotIF9fbm9uY29uc3RhbnRfbWVtY3B5KCh0KSwoZiksKG4pKSkKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKLQotc3RhdGljIGlubGluZSB2b2lkICpfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCh2b2lkICpzLCBjaGFyIGMsIF9fa2VybmVsX3NpemVfdCBjb3VudCkKLXsKLQlleHRlcm4gdm9pZCBiemVyb18xcGFnZSh2b2lkICopOwotCWV4dGVybiBfX2tlcm5lbF9zaXplX3QgX19iemVybyh2b2lkICosIF9fa2VybmVsX3NpemVfdCk7Ci0KLQlpZighYykgewotCQlpZihjb3VudCA9PSBQQUdFX1NJWkUpCi0JCQliemVyb18xcGFnZShzKTsKLQkJZWxzZQotCQkJX19iemVybyhzLCBjb3VudCk7Ci0JfSBlbHNlIHsKLQkJX19tZW1zZXQocywgYywgY291bnQpOwotCX0KLQlyZXR1cm4gczsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICpfX2NvbnN0YW50X2NfbWVtc2V0KHZvaWQgKnMsIGNoYXIgYywgX19rZXJuZWxfc2l6ZV90IGNvdW50KQotewotCWV4dGVybiBfX2tlcm5lbF9zaXplX3QgX19iemVybyh2b2lkICosIF9fa2VybmVsX3NpemVfdCk7Ci0KLQlpZighYykKLQkJX19iemVybyhzLCBjb3VudCk7Ci0JZWxzZQotCQlfX21lbXNldChzLCBjLCBjb3VudCk7Ci0JcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqX19ub25jb25zdGFudF9tZW1zZXQodm9pZCAqcywgY2hhciBjLCBfX2tlcm5lbF9zaXplX3QgY291bnQpCi17Ci0JX19tZW1zZXQocywgYywgY291bnQpOwotCXJldHVybiBzOwotfQotCi0jdW5kZWYgbWVtc2V0Ci0jZGVmaW5lIG1lbXNldChzLCBjLCBjb3VudCkgXAotKF9fYnVpbHRpbl9jb25zdGFudF9wKGMpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KSA/IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgocyksIChjKSwgKGNvdW50KSkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdGFudF9jX21lbXNldCgocyksIChjKSwgKGNvdW50KSkpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX25vbmNvbnN0YW50X21lbXNldCgocyksIChjKSwgKGNvdW50KSkpCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0NBTgotCi0jdW5kZWYgbWVtc2NhbgotI2RlZmluZSBtZW1zY2FuKF9fYXJnMCwgX19jaGFyLCBfX2FyZzIpCQkJCQkJXAotKHsJCQkJCQkJCQkJXAotCWV4dGVybiB2b2lkICpfX21lbXNjYW5femVybyh2b2lkICosIHNpemVfdCk7CQkJCVwKLQlleHRlcm4gdm9pZCAqX19tZW1zY2FuX2dlbmVyaWModm9pZCAqLCBpbnQsIHNpemVfdCk7CQkJXAotCXZvaWQgKl9fcmV0dmFsLCAqX19hZGRyID0gKF9fYXJnMCk7CQkJCQlcCi0Jc2l6ZV90IF9fc2l6ZSA9IChfX2FyZzIpOwkJCQkJCVwKLQkJCQkJCQkJCQlcCi0JaWYoX19idWlsdGluX2NvbnN0YW50X3AoX19jaGFyKSAmJiAhKF9fY2hhcikpCQkJCVwKLQkJX19yZXR2YWwgPSBfX21lbXNjYW5femVybyhfX2FkZHIsIF9fc2l6ZSk7CQkJXAotCWVsc2UJCQkJCQkJCQlcCi0JCV9fcmV0dmFsID0gX19tZW1zY2FuX2dlbmVyaWMoX19hZGRyLCAoX19jaGFyKSwgX19zaXplKTsJCVwKLQkJCQkJCQkJCQlcCi0JX19yZXR2YWw7CQkJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNNUAotZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwotCi0vKiBOb3cgdGhlIHN0ciooKSBzdHVmZi4uLiAqLwotI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJMRU4KLWV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7Ci0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNNUAotCi1leHRlcm4gaW50IF9fc3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKLQotc3RhdGljIGlubGluZSBpbnQgX19jb25zdGFudF9zdHJuY21wKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCwgX19rZXJuZWxfc2l6ZV90IGNvdW50KQotewotCXJlZ2lzdGVyIGludCByZXR2YWw7Ci0Jc3dpdGNoKGNvdW50KSB7Ci0JY2FzZSAwOiByZXR1cm4gMDsKLQljYXNlIDE6IHJldHVybiAoc3JjWzBdIC0gZGVzdFswXSk7Ci0JY2FzZSAyOiByZXR2YWwgPSAoc3JjWzBdIC0gZGVzdFswXSk7Ci0JCWlmKCFyZXR2YWwgJiYgc3JjWzBdKQotCQkgIHJldHZhbCA9IChzcmNbMV0gLSBkZXN0WzFdKTsKLQkJcmV0dXJuIHJldHZhbDsKLQljYXNlIDM6IHJldHZhbCA9IChzcmNbMF0gLSBkZXN0WzBdKTsKLQkJaWYoIXJldHZhbCAmJiBzcmNbMF0pIHsKLQkJICByZXR2YWwgPSAoc3JjWzFdIC0gZGVzdFsxXSk7Ci0JCSAgaWYoIXJldHZhbCAmJiBzcmNbMV0pCi0JCSAgICByZXR2YWwgPSAoc3JjWzJdIC0gZGVzdFsyXSk7Ci0JCX0KLQkJcmV0dXJuIHJldHZhbDsKLQljYXNlIDQ6IHJldHZhbCA9IChzcmNbMF0gLSBkZXN0WzBdKTsKLQkJaWYoIXJldHZhbCAmJiBzcmNbMF0pIHsKLQkJICByZXR2YWwgPSAoc3JjWzFdIC0gZGVzdFsxXSk7Ci0JCSAgaWYoIXJldHZhbCAmJiBzcmNbMV0pIHsKLQkJICAgIHJldHZhbCA9IChzcmNbMl0gLSBkZXN0WzJdKTsKLQkJICAgIGlmICghcmV0dmFsICYmIHNyY1syXSkKLQkJICAgICAgcmV0dmFsID0gKHNyY1szXSAtIGRlc3RbM10pOwotCQkgIH0KLQkJfQotCQlyZXR1cm4gcmV0dmFsOwotCWNhc2UgNTogcmV0dmFsID0gKHNyY1swXSAtIGRlc3RbMF0pOwotCQlpZighcmV0dmFsICYmIHNyY1swXSkgewotCQkgIHJldHZhbCA9IChzcmNbMV0gLSBkZXN0WzFdKTsKLQkJICBpZighcmV0dmFsICYmIHNyY1sxXSkgewotCQkgICAgcmV0dmFsID0gKHNyY1syXSAtIGRlc3RbMl0pOwotCQkgICAgaWYgKCFyZXR2YWwgJiYgc3JjWzJdKSB7Ci0JCSAgICAgIHJldHZhbCA9IChzcmNbM10gLSBkZXN0WzNdKTsKLQkJICAgICAgaWYgKCFyZXR2YWwgJiYgc3JjWzNdKQotCQkgICAgICAgIHJldHZhbCA9IChzcmNbNF0gLSBkZXN0WzRdKTsKLQkJICAgIH0KLQkJICB9Ci0JCX0KLQkJcmV0dXJuIHJldHZhbDsKLQlkZWZhdWx0OgotCQlyZXR2YWwgPSAoc3JjWzBdIC0gZGVzdFswXSk7Ci0JCWlmKCFyZXR2YWwgJiYgc3JjWzBdKSB7Ci0JCSAgcmV0dmFsID0gKHNyY1sxXSAtIGRlc3RbMV0pOwotCQkgIGlmKCFyZXR2YWwgJiYgc3JjWzFdKSB7Ci0JCSAgICByZXR2YWwgPSAoc3JjWzJdIC0gZGVzdFsyXSk7Ci0JCSAgICBpZighcmV0dmFsICYmIHNyY1syXSkKLQkJICAgICAgcmV0dmFsID0gX19zdHJuY21wKHNyYyszLGRlc3QrMyxjb3VudC0zKTsKLQkJICB9Ci0JCX0KLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci19Ci0KLSN1bmRlZiBzdHJuY21wCi0jZGVmaW5lIHN0cm5jbXAoX19hcmcwLCBfX2FyZzEsIF9fYXJnMikJXAotKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fYXJnMikgPwlcCi0gX19jb25zdGFudF9zdHJuY21wKF9fYXJnMCwgX19hcmcxLCBfX2FyZzIpIDogXAotIF9fc3RybmNtcChfX2FyZzAsIF9fYXJnMSwgX19hcmcyKSkKLSAKLSNlbmRpZiAvKiAhRVhQT1JUX1NZTVRBQl9TVFJPUFMgKi8KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qICEoX19TUEFSQ19TVFJJTkdfSF9fKSAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfU1RSSU5HX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1NUUklOR19ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvc3RyaW5nXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy9zdHJpbmdfMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zdHJpbmdfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0cmluZ18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWZkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zdHJpbmdfMzIuaApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIHN0cmluZy5oOiBFeHRlcm5hbCBkZWZpbml0aW9ucyBmb3Igb3B0aW1pemVkIGFzc2VtYmx5IHN0cmluZworICogICAgICAgICAgIHJvdXRpbmVzIGZvciB0aGUgTGludXggS2VybmVsLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiwxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKi8KKworI2lmbmRlZiBfX1NQQVJDX1NUUklOR19IX18KKyNkZWZpbmUgX19TUEFSQ19TVFJJTkdfSF9fCisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKiBSZWFsbHksIHVzZXJsYW5kL2tzeW1zIHNob3VsZCBub3Qgc2VlIGFueSBvZiB0aGlzIHN0dWZmLiAqLworCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gdm9pZCBfX21lbW1vdmUodm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOworZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBfX21lbWNweSh2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7CitleHRlcm4gX19rZXJuZWxfc2l6ZV90IF9fbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKKworI2lmbmRlZiBFWFBPUlRfU1lNVEFCX1NUUk9QUworCisvKiBGaXJzdCB0aGUgbWVtKigpIHRoaW5ncy4gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQorI3VuZGVmIG1lbW1vdmUKKyNkZWZpbmUgbWVtbW92ZShfdG8sIF9mcm9tLCBfbikgXAorKHsgXAorCXZvaWQgKl90ID0gKF90byk7IFwKKwlfX21lbW1vdmUoX3QsIChfZnJvbSksIChfbikpOyBcCisJX3Q7IFwKK30pCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19jb25zdGFudF9tZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIF9fa2VybmVsX3NpemVfdCBuKQoreworCWV4dGVybiB2b2lkIF9fY29weV8xcGFnZSh2b2lkICosIGNvbnN0IHZvaWQgKik7CisKKwlpZihuIDw9IDMyKSB7CisJCV9fYnVpbHRpbl9tZW1jcHkodG8sIGZyb20sIG4pOworCX0gZWxzZSBpZiAoKCh1bnNpZ25lZCBpbnQpIHRvICYgNykgIT0gMCkgeworCQkvKiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBvbiB0aGUgZG91YmxlLXdvcmQgYm91bmRhcnkgKi8KKwkJX19tZW1jcHkodG8sIGZyb20sIG4pOworCX0gZWxzZSB7CisJCXN3aXRjaChuKSB7CisJCWNhc2UgUEFHRV9TSVpFOgorCQkJX19jb3B5XzFwYWdlKHRvLCBmcm9tKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJX19tZW1jcHkodG8sIGZyb20sIG4pOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHRvOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fbm9uY29uc3RhbnRfbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBfX2tlcm5lbF9zaXplX3QgbikKK3sKKwlfX21lbWNweSh0bywgZnJvbSwgbik7CisJcmV0dXJuIHRvOworfQorCisjdW5kZWYgbWVtY3B5CisjZGVmaW5lIG1lbWNweSh0LCBmLCBuKSBcCisoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCisgX19jb25zdGFudF9tZW1jcHkoKHQpLChmKSwobikpIDogXAorIF9fbm9uY29uc3RhbnRfbWVtY3B5KCh0KSwoZiksKG4pKSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKKworc3RhdGljIGlubGluZSB2b2lkICpfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCh2b2lkICpzLCBjaGFyIGMsIF9fa2VybmVsX3NpemVfdCBjb3VudCkKK3sKKwlleHRlcm4gdm9pZCBiemVyb18xcGFnZSh2b2lkICopOworCWV4dGVybiBfX2tlcm5lbF9zaXplX3QgX19iemVybyh2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CisKKwlpZighYykgeworCQlpZihjb3VudCA9PSBQQUdFX1NJWkUpCisJCQliemVyb18xcGFnZShzKTsKKwkJZWxzZQorCQkJX19iemVybyhzLCBjb3VudCk7CisJfSBlbHNlIHsKKwkJX19tZW1zZXQocywgYywgY291bnQpOworCX0KKwlyZXR1cm4gczsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpfX2NvbnN0YW50X2NfbWVtc2V0KHZvaWQgKnMsIGNoYXIgYywgX19rZXJuZWxfc2l6ZV90IGNvdW50KQoreworCWV4dGVybiBfX2tlcm5lbF9zaXplX3QgX19iemVybyh2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CisKKwlpZighYykKKwkJX19iemVybyhzLCBjb3VudCk7CisJZWxzZQorCQlfX21lbXNldChzLCBjLCBjb3VudCk7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19ub25jb25zdGFudF9tZW1zZXQodm9pZCAqcywgY2hhciBjLCBfX2tlcm5lbF9zaXplX3QgY291bnQpCit7CisJX19tZW1zZXQocywgYywgY291bnQpOworCXJldHVybiBzOworfQorCisjdW5kZWYgbWVtc2V0CisjZGVmaW5lIG1lbXNldChzLCBjLCBjb3VudCkgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKGMpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgocyksIChjKSwgKGNvdW50KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdGFudF9jX21lbXNldCgocyksIChjKSwgKGNvdW50KSkpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX25vbmNvbnN0YW50X21lbXNldCgocyksIChjKSwgKGNvdW50KSkpCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0NBTgorCisjdW5kZWYgbWVtc2NhbgorI2RlZmluZSBtZW1zY2FuKF9fYXJnMCwgX19jaGFyLCBfX2FyZzIpCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCWV4dGVybiB2b2lkICpfX21lbXNjYW5femVybyh2b2lkICosIHNpemVfdCk7CQkJCVwKKwlleHRlcm4gdm9pZCAqX19tZW1zY2FuX2dlbmVyaWModm9pZCAqLCBpbnQsIHNpemVfdCk7CQkJXAorCXZvaWQgKl9fcmV0dmFsLCAqX19hZGRyID0gKF9fYXJnMCk7CQkJCQlcCisJc2l6ZV90IF9fc2l6ZSA9IChfX2FyZzIpOwkJCQkJCVwKKwkJCQkJCQkJCQlcCisJaWYoX19idWlsdGluX2NvbnN0YW50X3AoX19jaGFyKSAmJiAhKF9fY2hhcikpCQkJCVwKKwkJX19yZXR2YWwgPSBfX21lbXNjYW5femVybyhfX2FkZHIsIF9fc2l6ZSk7CQkJXAorCWVsc2UJCQkJCQkJCQlcCisJCV9fcmV0dmFsID0gX19tZW1zY2FuX2dlbmVyaWMoX19hZGRyLCAoX19jaGFyKSwgX19zaXplKTsJCVwKKwkJCQkJCQkJCQlcCisJX19yZXR2YWw7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNNUAorZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOworCisvKiBOb3cgdGhlIHN0ciooKSBzdHVmZi4uLiAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJMRU4KK2V4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNNUAorCitleHRlcm4gaW50IF9fc3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKKworc3RhdGljIGlubGluZSBpbnQgX19jb25zdGFudF9zdHJuY21wKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCwgX19rZXJuZWxfc2l6ZV90IGNvdW50KQoreworCXJlZ2lzdGVyIGludCByZXR2YWw7CisJc3dpdGNoKGNvdW50KSB7CisJY2FzZSAwOiByZXR1cm4gMDsKKwljYXNlIDE6IHJldHVybiAoc3JjWzBdIC0gZGVzdFswXSk7CisJY2FzZSAyOiByZXR2YWwgPSAoc3JjWzBdIC0gZGVzdFswXSk7CisJCWlmKCFyZXR2YWwgJiYgc3JjWzBdKQorCQkgIHJldHZhbCA9IChzcmNbMV0gLSBkZXN0WzFdKTsKKwkJcmV0dXJuIHJldHZhbDsKKwljYXNlIDM6IHJldHZhbCA9IChzcmNbMF0gLSBkZXN0WzBdKTsKKwkJaWYoIXJldHZhbCAmJiBzcmNbMF0pIHsKKwkJICByZXR2YWwgPSAoc3JjWzFdIC0gZGVzdFsxXSk7CisJCSAgaWYoIXJldHZhbCAmJiBzcmNbMV0pCisJCSAgICByZXR2YWwgPSAoc3JjWzJdIC0gZGVzdFsyXSk7CisJCX0KKwkJcmV0dXJuIHJldHZhbDsKKwljYXNlIDQ6IHJldHZhbCA9IChzcmNbMF0gLSBkZXN0WzBdKTsKKwkJaWYoIXJldHZhbCAmJiBzcmNbMF0pIHsKKwkJICByZXR2YWwgPSAoc3JjWzFdIC0gZGVzdFsxXSk7CisJCSAgaWYoIXJldHZhbCAmJiBzcmNbMV0pIHsKKwkJICAgIHJldHZhbCA9IChzcmNbMl0gLSBkZXN0WzJdKTsKKwkJICAgIGlmICghcmV0dmFsICYmIHNyY1syXSkKKwkJICAgICAgcmV0dmFsID0gKHNyY1szXSAtIGRlc3RbM10pOworCQkgIH0KKwkJfQorCQlyZXR1cm4gcmV0dmFsOworCWNhc2UgNTogcmV0dmFsID0gKHNyY1swXSAtIGRlc3RbMF0pOworCQlpZighcmV0dmFsICYmIHNyY1swXSkgeworCQkgIHJldHZhbCA9IChzcmNbMV0gLSBkZXN0WzFdKTsKKwkJICBpZighcmV0dmFsICYmIHNyY1sxXSkgeworCQkgICAgcmV0dmFsID0gKHNyY1syXSAtIGRlc3RbMl0pOworCQkgICAgaWYgKCFyZXR2YWwgJiYgc3JjWzJdKSB7CisJCSAgICAgIHJldHZhbCA9IChzcmNbM10gLSBkZXN0WzNdKTsKKwkJICAgICAgaWYgKCFyZXR2YWwgJiYgc3JjWzNdKQorCQkgICAgICAgIHJldHZhbCA9IChzcmNbNF0gLSBkZXN0WzRdKTsKKwkJICAgIH0KKwkJICB9CisJCX0KKwkJcmV0dXJuIHJldHZhbDsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAoc3JjWzBdIC0gZGVzdFswXSk7CisJCWlmKCFyZXR2YWwgJiYgc3JjWzBdKSB7CisJCSAgcmV0dmFsID0gKHNyY1sxXSAtIGRlc3RbMV0pOworCQkgIGlmKCFyZXR2YWwgJiYgc3JjWzFdKSB7CisJCSAgICByZXR2YWwgPSAoc3JjWzJdIC0gZGVzdFsyXSk7CisJCSAgICBpZighcmV0dmFsICYmIHNyY1syXSkKKwkJICAgICAgcmV0dmFsID0gX19zdHJuY21wKHNyYyszLGRlc3QrMyxjb3VudC0zKTsKKwkJICB9CisJCX0KKwkJcmV0dXJuIHJldHZhbDsKKwl9Cit9CisKKyN1bmRlZiBzdHJuY21wCisjZGVmaW5lIHN0cm5jbXAoX19hcmcwLCBfX2FyZzEsIF9fYXJnMikJXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fYXJnMikgPwlcCisgX19jb25zdGFudF9zdHJuY21wKF9fYXJnMCwgX19hcmcxLCBfX2FyZzIpIDogXAorIF9fc3RybmNtcChfX2FyZzAsIF9fYXJnMSwgX19hcmcyKSkKKworI2VuZGlmIC8qICFFWFBPUlRfU1lNVEFCX1NUUk9QUyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogIShfX1NQQVJDX1NUUklOR19IX18pICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zdHJpbmdfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N0cmluZ182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMTYxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zdHJpbmdfNjQuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogc3RyaW5nLmg6IEV4dGVybmFsIGRlZmluaXRpb25zIGZvciBvcHRpbWl6ZWQgYXNzZW1ibHkgc3RyaW5nCisgKiAgICAgICAgICAgcm91dGluZXMgZm9yIHRoZSBMaW51eCBLZXJuZWwuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcsMTk5OSBKYWt1YiBKZWxpbmVrIChqYWt1YkByZWRoYXQuY29tKQorICovCisKKyNpZm5kZWYgX19TUEFSQzY0X1NUUklOR19IX18KKyNkZWZpbmUgX19TUEFSQzY0X1NUUklOR19IX18KKworLyogUmVhbGx5LCB1c2VybGFuZC9rc3ltcyBzaG91bGQgbm90IHNlZSBhbnkgb2YgdGhpcyBzdHVmZi4gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9hc2kuaD4KKworZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKKworI2lmbmRlZiBFWFBPUlRfU1lNVEFCX1NUUk9QUworCisvKiBGaXJzdCB0aGUgbWVtKigpIHRoaW5ncy4gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQorZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCitleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAorZXh0ZXJuIHZvaWQgKl9fYnVpbHRpbl9tZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fY29uc3RhbnRfbWVtc2V0KHZvaWQgKnMsIGludCBjLCBfX2tlcm5lbF9zaXplX3QgY291bnQpCit7CisJZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBfX2J6ZXJvKHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKKworCWlmICghYykgeworCQlfX2J6ZXJvKHMsIGNvdW50KTsKKwkJcmV0dXJuIHM7CisJfSBlbHNlCisJCXJldHVybiBfX21lbXNldChzLCBjLCBjb3VudCk7Cit9CisKKyN1bmRlZiBtZW1zZXQKKyNkZWZpbmUgbWVtc2V0KHMsIGMsIGNvdW50KSBcCisoKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KSAmJiAoY291bnQpIDw9IDMyKSA/IFwKKyBfX2J1aWx0aW5fbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSA6IFwKKyAoX19idWlsdGluX2NvbnN0YW50X3AoYykgPyBcCisgIF9fY29uc3RhbnRfbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSA6IFwKKyAgX19tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpKSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TQ0FOCisKKyN1bmRlZiBtZW1zY2FuCisjZGVmaW5lIG1lbXNjYW4oX19hcmcwLCBfX2NoYXIsIF9fYXJnMikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWV4dGVybiB2b2lkICpfX21lbXNjYW5femVybyh2b2lkICosIHNpemVfdCk7CQkJXAorCWV4dGVybiB2b2lkICpfX21lbXNjYW5fZ2VuZXJpYyh2b2lkICosIGludCwgc2l6ZV90KTsJCVwKKwl2b2lkICpfX3JldHZhbCwgKl9fYWRkciA9IChfX2FyZzApOwkJCQlcCisJc2l6ZV90IF9fc2l6ZSA9IChfX2FyZzIpOwkJCQkJXAorCQkJCQkJCQkJXAorCWlmKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fY2hhcikgJiYgIShfX2NoYXIpKQkJCVwKKwkJX19yZXR2YWwgPSBfX21lbXNjYW5femVybyhfX2FkZHIsIF9fc2l6ZSk7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlfX3JldHZhbCA9IF9fbWVtc2Nhbl9nZW5lcmljKF9fYWRkciwgKF9fY2hhciksIF9fc2l6ZSk7CVwKKwkJCQkJCQkJCVwKKwlfX3JldHZhbDsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DTVAKK2V4dGVybiBpbnQgbWVtY21wKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKKworLyogTm93IHRoZSBzdHIqKCkgc3R1ZmYuLi4gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTEVOCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DTVAKK2V4dGVybiBpbnQgc3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKKworI2VuZGlmIC8qICFFWFBPUlRfU1lNVEFCX1NUUk9QUyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogIShfX1NQQVJDNjRfU1RSSU5HX0hfXykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3N5c2NhbGxzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXNjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YTQzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXNjYWxscy5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX1NQQVJDNjRfU1lTQ0FMTFNfSAorI2RlZmluZSBfU1BBUkM2NF9TWVNDQUxMU19ICisKK3N0cnVjdCBwdF9yZWdzOworCitleHRlcm4gYXNtbGlua2FnZSBsb25nIHNwYXJjX2RvX2ZvcmsodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQsCisJCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZSk7CisKK2V4dGVybiBhc21saW5rYWdlIGludCBzcGFyY19leGVjdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX1NQQVJDNjRfU1lTQ0FMTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaAppbmRleCBiNGIwMjQ0Li4xNWUyYTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaApAQCAtMSwyODggKzEsOCBAQAotI2lmbmRlZiBfX1NQQVJDX1NZU1RFTV9ICi0jZGVmaW5lIF9fU1BBUkNfU1lTVEVNX0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4JLyogTlJfQ1BVUyAqLwotI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9wc3IuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgotCi0vKgotICogU3BhcmMgKGdlbmVyYWwpIENQVSB0eXBlcwotICovCi1lbnVtIHNwYXJjX2NwdSB7Ci0gIHN1bjQgICAgICAgID0gMHgwMCwKLSAgc3VuNGMgICAgICAgPSAweDAxLAotICBzdW40bSAgICAgICA9IDB4MDIsCi0gIHN1bjRkICAgICAgID0gMHgwMywKLSAgc3VuNGUgICAgICAgPSAweDA0LAotICBzdW40dSAgICAgICA9IDB4MDUsIC8qIFY4IHBsb29zIHBsb29zICovCi0gIHN1bl91bmtub3duID0gMHgwNiwKLSAgYXAxMDAwICAgICAgPSAweDA3LCAvKiBhbG1vc3QgYSBzdW40bSAqLwotfTsKLQotLyogUmVhbGx5LCB1c2VybGFuZCBzaG91bGQgbm90IGJlIGxvb2tpbmcgYXQgYW55IG9mIHRoaXMuLi4gKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLWV4dGVybiBlbnVtIHNwYXJjX2NwdSBzcGFyY19jcHVfbW9kZWw7Ci0KLSNpZm5kZWYgQ09ORklHX1NVTjQKLSNkZWZpbmUgQVJDSF9TVU40Q19TVU40IChzcGFyY19jcHVfbW9kZWw9PXN1bjRjKQotI2RlZmluZSBBUkNIX1NVTjQgMAorI2lmbmRlZiBfX19BU01fU1BBUkNfU1lTVEVNX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1NZU1RFTV9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvc3lzdGVtXzY0Lmg+CiAjZWxzZQotI2RlZmluZSBBUkNIX1NVTjRDX1NVTjQgMQotI2RlZmluZSBBUkNIX1NVTjQgMQorI2luY2x1ZGUgPGFzbS1zcGFyYy9zeXN0ZW1fMzIuaD4KICNlbmRpZgotCi0jZGVmaW5lIFNVTjRNX05DUFVTICAgICAgICAgICAgNCAgICAgICAgICAgICAgLyogQXJjaGl0ZWN0dXJhbCBsaW1pdCBvZiBzdW40bS4gKi8KLQotZXh0ZXJuIGNoYXIgcmVib290X2NvbW1hbmRbXTsKLQotZXh0ZXJuIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF9zZXRbTlJfQ1BVU107Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X2JhZF9wYWdlOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfYmFkX3BhZ2VfdGFibGU7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2U7Ci0KLWV4dGVybiB2b2lkIHN1bl9kb19icmVhayh2b2lkKTsKLWV4dGVybiBpbnQgc2VyaWFsX2NvbnNvbGU7Ci1leHRlcm4gaW50IHN0b3BfYV9lbmFibGVkOwotCi1zdGF0aWMgaW5saW5lIGludCBjb25faXNfcHJlc2VudCh2b2lkKQotewotCXJldHVybiBzZXJpYWxfY29uc29sZSA/IDAgOiAxOwotfQotCi0vKiBXaGVuIGEgY29udGV4dCBzd2l0Y2ggaGFwcGVucyB3ZSBtdXN0IGZsdXNoIGFsbCB1c2VyIHdpbmRvd3Mgc28gdGhhdAotICogdGhlIHdpbmRvd3Mgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyBhcmUgZmx1c2hlZCBvbnRvIGl0cyBzdGFjay4gVGhpcwotICogd2F5IHRoZSB3aW5kb3dzIGFyZSBhbGwgY2xlYW4gZm9yIHRoZSBuZXh0IHByb2Nlc3MgYW5kIHRoZSBzdGFjawotICogZnJhbWVzIGFyZSB1cCB0byBkYXRlLgotICovCi1leHRlcm4gdm9pZCBmbHVzaF91c2VyX3dpbmRvd3Modm9pZCk7Ci1leHRlcm4gdm9pZCBraWxsX3VzZXJfd2luZG93cyh2b2lkKTsKLWV4dGVybiB2b2lkIHN5bmNocm9uaXplX3VzZXJfc3RhY2sodm9pZCk7Ci1leHRlcm4gdm9pZCBmcHNhdmUodW5zaWduZWQgbG9uZyAqZnByZWdzLCB1bnNpZ25lZCBsb25nICpmc3IsCi0JCSAgIHZvaWQgKmZwcXVldWUsIHVuc2lnbmVkIGxvbmcgKmZwcWRlcHRoKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgU1dJVENIX0VOVEVSKHBydikgXAotCWRvIHsJCQlcCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHBydiwgVElGX1VTRURGUFUpKSB7IFwKLQkJcHV0X3BzcihnZXRfcHNyKCkgfCBQU1JfRUYpOyBcCi0JCWZwc2F2ZSgmKHBydiktPnRocmVhZC5mbG9hdF9yZWdzWzBdLCAmKHBydiktPnRocmVhZC5mc3IsIFwKLQkJICAgICAgICYocHJ2KS0+dGhyZWFkLmZwcXVldWVbMF0sICYocHJ2KS0+dGhyZWFkLmZwcWRlcHRoKTsgXAotCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcocHJ2LCBUSUZfVVNFREZQVSk7IFwKLQkJKHBydiktPnRocmVhZC5rcmVncy0+cHNyICY9IH5QU1JfRUY7IFwKLQl9IFwKLQl9IHdoaWxlKDApCi0KLSNkZWZpbmUgU1dJVENIX0RPX0xBWllfRlBVKG5leHQpCS8qICovCi0jZWxzZQotI2RlZmluZSBTV0lUQ0hfRU5URVIocHJ2KQkJLyogKi8KLSNkZWZpbmUgU1dJVENIX0RPX0xBWllfRlBVKG54dCkJXAotCWRvIHsJCQlcCi0JaWYgKGxhc3RfdGFza191c2VkX21hdGggIT0gKG54dCkpCQlcCi0JCShueHQpLT50aHJlYWQua3JlZ3MtPnBzciY9flBTUl9FRjsJXAotCX0gd2hpbGUoMCkKICNlbmRpZgotCi1leHRlcm4gdm9pZCBmbHVzaHdfYWxsKHZvaWQpOwotCi0vKgotICogRmx1c2ggd2luZG93cyBzbyB0aGF0IHRoZSBWTSBzd2l0Y2ggd2hpY2ggZm9sbG93cwotICogd291bGQgbm90IHB1bGwgdGhlIHN0YWNrIGZyb20gdW5kZXIgdXMuCi0gKgotICogU1dJVENIX0VOVEVSIGFuZCBTV0lUSF9ET19MQVpZX0ZQVSBkbyBub3Qgd29yayB5ZXQgKGUuZy4gU01QIGRvZXMgbm90IHdvcmspCi0gKiBYWFggV1RGIGlzIHRoZSBhYm92ZSBjb21tZW50PyBGb3VuZCBpbiBsYXRlIHRlZW4gMi40LnguCi0gKi8KLSNkZWZpbmUgcHJlcGFyZV9hcmNoX3N3aXRjaChuZXh0KSBkbyB7IFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyggXAotCSIuZ2xvYmxcdGZsdXNoX3BhdGNoX3N3aXRjaFxuZmx1c2hfcGF0Y2hfc3dpdGNoOlxuXHQiIFwKLQkic2F2ZSAlc3AsIC0weDQwLCAlc3A7IHNhdmUgJXNwLCAtMHg0MCwgJXNwOyBzYXZlICVzcCwgLTB4NDAsICVzcFxuXHQiIFwKLQkic2F2ZSAlc3AsIC0weDQwLCAlc3A7IHNhdmUgJXNwLCAtMHg0MCwgJXNwOyBzYXZlICVzcCwgLTB4NDAsICVzcFxuXHQiIFwKLQkic2F2ZSAlc3AsIC0weDQwLCAlc3Bcblx0IiBcCi0JInJlc3RvcmU7IHJlc3RvcmU7IHJlc3RvcmU7IHJlc3RvcmU7IHJlc3RvcmU7IHJlc3RvcmU7IHJlc3RvcmUiKTsgXAotfSB3aGlsZSgwKQotCi0JLyogTXVjaCBjYXJlIGhhcyBnb25lIGludG8gdGhpcyBjb2RlLCBkbyBub3QgdG91Y2ggaXQuCi0JICoKLQkgKiBXZSBuZWVkIHRvIGxvYWR1cCByZWdzIGwwL2wxIGZvciB0aGUgbmV3bHkgZm9ya2VkIGNoaWxkCi0JICogY2FzZSBiZWNhdXNlIHRoZSB0cmFwIHJldHVybiBwYXRoIHJlbGllcyBvbiB0aG9zZSByZWdpc3RlcnMKLQkgKiBob2xkaW5nIGNlcnRhaW4gdmFsdWVzLCBnY2MgaXMgdG9sZCB0aGF0IHRoZXkgYXJlIGNsb2JiZXJlZC4KLQkgKiBHY2MgbmVlZHMgcmVnaXN0ZXJzIGZvciAzIHZhbHVlcyBpbiBhbmQgMSB2YWx1ZSBvdXQsIHNvIHdlCi0JICogY2xvYmJlciBldmVyeSBub24tZml4ZWQtdXNhZ2UgcmVnaXN0ZXIgYmVzaWRlcyBsMi9sMy9vNC9vNS4gIC1EYXZlTQotCSAqCi0JICogSGV5IERhdmUsIHRoYXQgZG8gbm90IHRvdWNoIHNpZ24gaXMgdG9vIG11Y2ggb2YgYW4gaW5jZW50aXZlCi0JICogLSBBbnRvbiAmIFBldGUKLQkgKi8KLSNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpIGRvIHsJCQkJCQlcCi0JU1dJVENIX0VOVEVSKHByZXYpOwkJCQkJCQkJXAotCVNXSVRDSF9ET19MQVpZX0ZQVShuZXh0KTsJCQkJCQkJXAotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5hY3RpdmVfbW0tPmNwdV92bV9tYXNrKTsJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCQlcCi0JInNldGhpCSUlaGkoaGVyZSAtIDB4OCksICUlbzdcblx0IgkJCQkJCVwKLQkibW92CSUlZzYsICUlZzNcblx0IgkJCQkJCQkJXAotCSJvcgklJW83LCAlJWxvKGhlcmUgLSAweDgpLCAlJW83XG5cdCIJCQkJCVwKLQkicmQJJSVwc3IsICUlZzRcblx0IgkJCQkJCQlcCi0JInN0ZAklJXNwLCBbJSVnNiArICU0XVxuXHQiCQkJCQkJCVwKLQkicmQJJSV3aW0sICUlZzVcblx0IgkJCQkJCQlcCi0JIndyCSUlZzQsIDB4MjAsICUlcHNyXG5cdCIJCQkJCQkJXAotCSJub3Bcblx0IgkJCQkJCQkJCVwKLQkic3RkCSUlZzQsIFslJWc2ICsgJTNdXG5cdCIJCQkJCQkJXAotCSJsZGQJWyUyICsgJTNdLCAlJWc0XG5cdCIJCQkJCQkJXAotCSJtb3YJJTIsICUlZzZcblx0IgkJCQkJCQkJXAotCSIuZ2xvYmwJcGF0Y2htZV9zdG9yZV9uZXdfY3VycmVudFxuIgkJCQkJCVwKLSJwYXRjaG1lX3N0b3JlX25ld19jdXJyZW50OlxuXHQiCQkJCQkJCVwKLQkic3QJJTIsIFslMV1cblx0IgkJCQkJCQkJXAotCSJ3cgklJWc0LCAweDIwLCAlJXBzclxuXHQiCQkJCQkJCVwKLQkibm9wXG5cdCIJCQkJCQkJCQlcCi0JIm5vcFxuXHQiCQkJCQkJCQkJXAotCSJub3Bcblx0IgkvKiBMRU9OIG5lZWRzIGFsbCAzIG5vcHM6IGxvYWQgdG8gJXNwIGRlcGVuZHMgb24gQ1dQLiAqLwkJXAotCSJsZGQJWyUlZzYgKyAlNF0sICUlc3Bcblx0IgkJCQkJCQlcCi0JIndyCSUlZzUsIDB4MCwgJSV3aW1cblx0IgkJCQkJCQlcCi0JImxkZAlbJSVzcCArIDB4MDBdLCAlJWwwXG5cdCIJCQkJCQlcCi0JImxkZAlbJSVzcCArIDB4MzhdLCAlJWk2XG5cdCIJCQkJCQlcCi0JIndyCSUlZzQsIDB4MCwgJSVwc3Jcblx0IgkJCQkJCQlcCi0JIm5vcFxuXHQiCQkJCQkJCQkJXAotCSJub3Bcblx0IgkJCQkJCQkJCVwKLQkiam1wbAklJW83ICsgMHg4LCAlJWcwXG5cdCIJCQkJCQkJXAotCSIgbGQJWyUlZzMgKyAlNV0sICUwXG5cdCIJCQkJCQkJXAotCSJoZXJlOlxuIgkJCQkJCQkJCVwKLSAgICAgICAgOiAiPSZyIiAobGFzdCkJCQkJCQkJCQlcCi0gICAgICAgIDogInIiICgmKGN1cnJlbnRfc2V0W2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpXSkpLAlcCi0JICAiciIgKHRhc2tfdGhyZWFkX2luZm8obmV4dCkpLAkJCQlcCi0JICAiaSIgKFRJX0tQU1IpLAkJCQkJXAotCSAgImkiIChUSV9LU1ApLAkJCQkJCVwKLQkgICJpIiAoVElfVEFTSykJCQkJCQlcCi0JOiAgICAgICAiZzEiLCAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLCAgICAgICAiZzciLAlcCi0JICAibDAiLCAibDEiLCAgICAgICAibDMiLCAibDQiLCAibDUiLCAibDYiLCAibDciLAlcCi0JICAiaTAiLCAiaTEiLCAiaTIiLCAiaTMiLCAiaTQiLCAiaTUiLAkJCVwKLQkgICJvMCIsICJvMSIsICJvMiIsICJvMyIsICAgICAgICAgICAgICAgICAgICJvNyIpOwlcCi0JfSB3aGlsZSgwKQotCi0vKiBYWFggQ2hhbmdlIHRoaXMgaWYgd2UgZXZlciB1c2UgYSBQU08gbW9kZSBrZXJuZWwuICovCi0jZGVmaW5lIG1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQotI2RlZmluZSBybWIoKQltYigpCi0jZGVmaW5lIHdtYigpCW1iKCkKLSNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgc2V0X21iKF9fdmFyLCBfX3ZhbHVlKSAgZG8geyBfX3ZhciA9IF9fdmFsdWU7IG1iKCk7IH0gd2hpbGUoMCkKLSNkZWZpbmUgc21wX21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKLSNkZWZpbmUgc21wX3JtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCi0jZGVmaW5lIHNtcF93bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQotI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKLQotI2RlZmluZSBub3AoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcCIpCi0KLS8qIFRoaXMgaGFzIHNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9ucyAqLwotI2lmbmRlZiBDT05GSUdfU01QCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgX19feGNoZzMyLCB2b2lkKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3UzMihfX3ZvbGF0aWxlX18gdW5zaWduZWQgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzd2FwIFslMl0sICUwIgotCQkJICAgICA6ICI9JnIiICh2YWwpCi0JCQkgICAgIDogIjAiICh2YWwpLCAiciIgKG0pCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCXJldHVybiB2YWw7Ci0jZWxzZQotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgKnB0ciBhc20oImcxIik7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZXQgYXNtKCJnMiIpOwotCi0JcHRyID0gKHVuc2lnbmVkIGxvbmcgKikgbTsKLQlyZXQgPSB2YWw7Ci0KLQkvKiBOb3RlOiB0aGlzIGlzIG1hZ2ljIGFuZCB0aGUgbm9wIHRoZXJlIGlzCi0JICAgcmVhbGx5IG5lZWRlZC4gKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkibW92CSUlbzcsICUlZzRcblx0IgotCSJjYWxsCV9fX2ZfX19feGNoZzMyXG5cdCIKLQkiIG5vcFxuXHQiCi0JOiAiPSZyIiAocmV0KQotCTogIjAiIChyZXQpLCAiciIgKHB0cikKLQk6ICJnMyIsICJnNCIsICJnNyIsICJtZW1vcnkiLCAiY2MiKTsKLQotCXJldHVybiByZXQ7Ci0jZW5kaWYKLX0KLQotI2RlZmluZSB4Y2hnKHB0cix4KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKSkKLQotZXh0ZXJuIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgX192b2xhdGlsZV9fIHZvaWQgKiBwdHIsIGludCBzaXplKQotewotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgNDoKLQkJcmV0dXJuIHhjaGdfdTMyKHB0ciwgeCk7Ci0JfTsKLQlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKLQlyZXR1cm4geDsKLX0KLQotLyogRW11bGF0ZSBjbXB4Y2hnKCkgdGhlIHNhbWUgd2F5IHdlIGVtdWxhdGUgYXRvbWljcywKLSAqIGJ5IGhhc2hpbmcgdGhlIG9iamVjdCBhZGRyZXNzIGFuZCBpbmRleGluZyBpbnRvIGFuIGFycmF5Ci0gKiBvZiBzcGlubG9ja3MgdG8gZ2V0IGEgYml0IG9mIHBlcmZvcm1hbmNlLi4uCi0gKgotICogU2VlIGFyY2gvc3BhcmMvbGliL2F0b21pYzMyLmMgZm9yIGltcGxlbWVudGF0aW9uLgotICoKLSAqIENyaWJiZWQgZnJvbSA8YXNtLXBhcmlzYy9hdG9taWMuaD4KLSAqLwotI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHCTEKLQotLyogYnVnIGNhdGNoZXIgZm9yIHdoZW4gdW5zdXBwb3J0ZWQgc2l6ZSBpcyB1c2VkIC0gd29uJ3QgbGluayAqLwotZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOwotLyogd2Ugb25seSBuZWVkIHRvIHN1cHBvcnQgY21weGNoZyBvZiBhIHUzMiBvbiBzcGFyYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX3UzMih2b2xhdGlsZSB1MzIgKm0sIHUzMiBvbGQsIHUzMiBuZXdfKTsKLQotLyogZG9uJ3Qgd29ycnkuLi5vcHRpbWl6ZXIgd2lsbCBnZXQgcmlkIG9mIG1vc3Qgb2YgdGhpcyAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXdfLCBpbnQgc2l6ZSkKLXsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDQ6Ci0JCXJldHVybiBfX2NtcHhjaGdfdTMyKCh1MzIgKilwdHIsICh1MzIpb2xkLCAodTMyKW5ld18pOwotCWRlZmF1bHQ6Ci0JCV9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIG9sZDsKLX0KLQotI2RlZmluZSBjbXB4Y2hnKHB0ciwgbywgbikJCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX29fID0gKG8pOwkJCQkJXAotCV9fdHlwZW9mX18oKihwdHIpKSBfbl8gPSAobik7CQkJCQlcCi0JKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCVwKLQkJCSh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOwkJXAotfSkKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NtcHhjaGctbG9jYWwuaD4KLQotLyoKLSAqIGNtcHhjaGdfbG9jYWwgYW5kIGNtcHhjaGc2NF9sb2NhbCBhcmUgYXRvbWljIHdydCBjdXJyZW50IENQVS4gQWx3YXlzIG1ha2UKLSAqIHRoZW0gYXZhaWxhYmxlLgotICovCi0jZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkgIAkgICAgICAgXAotCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZ19sb2NhbF9nZW5lcmljKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksXAotCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSkpCi0jZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pIF9fY21weGNoZzY0X2xvY2FsX2dlbmVyaWMoKHB0ciksIChvKSwgKG4pKQotCi1leHRlcm4gdm9pZCBkaWVfaWZfa2VybmVsKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKLQotI2VuZGlmIC8qICEoX19TUEFSQ19TWVNURU1fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbV8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiMDI0NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbV8zMi5oCkBAIC0wLDAgKzEsMjg4IEBACisjaWZuZGVmIF9fU1BBUkNfU1lTVEVNX0gKKyNkZWZpbmUgX19TUEFSQ19TWVNURU1fSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgkvKiBOUl9DUFVTICovCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3Bzci5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisKKy8qCisgKiBTcGFyYyAoZ2VuZXJhbCkgQ1BVIHR5cGVzCisgKi8KK2VudW0gc3BhcmNfY3B1IHsKKyAgc3VuNCAgICAgICAgPSAweDAwLAorICBzdW40YyAgICAgICA9IDB4MDEsCisgIHN1bjRtICAgICAgID0gMHgwMiwKKyAgc3VuNGQgICAgICAgPSAweDAzLAorICBzdW40ZSAgICAgICA9IDB4MDQsCisgIHN1bjR1ICAgICAgID0gMHgwNSwgLyogVjggcGxvb3MgcGxvb3MgKi8KKyAgc3VuX3Vua25vd24gPSAweDA2LAorICBhcDEwMDAgICAgICA9IDB4MDcsIC8qIGFsbW9zdCBhIHN1bjRtICovCit9OworCisvKiBSZWFsbHksIHVzZXJsYW5kIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBhbnkgb2YgdGhpcy4uLiAqLworI2lmZGVmIF9fS0VSTkVMX18KKworZXh0ZXJuIGVudW0gc3BhcmNfY3B1IHNwYXJjX2NwdV9tb2RlbDsKKworI2lmbmRlZiBDT05GSUdfU1VONAorI2RlZmluZSBBUkNIX1NVTjRDX1NVTjQgKHNwYXJjX2NwdV9tb2RlbD09c3VuNGMpCisjZGVmaW5lIEFSQ0hfU1VONCAwCisjZWxzZQorI2RlZmluZSBBUkNIX1NVTjRDX1NVTjQgMQorI2RlZmluZSBBUkNIX1NVTjQgMQorI2VuZGlmCisKKyNkZWZpbmUgU1VONE1fTkNQVVMgICAgICAgICAgICA0ICAgICAgICAgICAgICAvKiBBcmNoaXRlY3R1cmFsIGxpbWl0IG9mIHN1bjRtLiAqLworCitleHRlcm4gY2hhciByZWJvb3RfY29tbWFuZFtdOworCitleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3NldFtOUl9DUFVTXTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfYmFkX3BhZ2U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV9iYWRfcGFnZV90YWJsZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZTsKKworZXh0ZXJuIHZvaWQgc3VuX2RvX2JyZWFrKHZvaWQpOworZXh0ZXJuIGludCBzZXJpYWxfY29uc29sZTsKK2V4dGVybiBpbnQgc3RvcF9hX2VuYWJsZWQ7CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbl9pc19wcmVzZW50KHZvaWQpCit7CisJcmV0dXJuIHNlcmlhbF9jb25zb2xlID8gMCA6IDE7Cit9CisKKy8qIFdoZW4gYSBjb250ZXh0IHN3aXRjaCBoYXBwZW5zIHdlIG11c3QgZmx1c2ggYWxsIHVzZXIgd2luZG93cyBzbyB0aGF0CisgKiB0aGUgd2luZG93cyBvZiB0aGUgY3VycmVudCBwcm9jZXNzIGFyZSBmbHVzaGVkIG9udG8gaXRzIHN0YWNrLiBUaGlzCisgKiB3YXkgdGhlIHdpbmRvd3MgYXJlIGFsbCBjbGVhbiBmb3IgdGhlIG5leHQgcHJvY2VzcyBhbmQgdGhlIHN0YWNrCisgKiBmcmFtZXMgYXJlIHVwIHRvIGRhdGUuCisgKi8KK2V4dGVybiB2b2lkIGZsdXNoX3VzZXJfd2luZG93cyh2b2lkKTsKK2V4dGVybiB2b2lkIGtpbGxfdXNlcl93aW5kb3dzKHZvaWQpOworZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfdXNlcl9zdGFjayh2b2lkKTsKK2V4dGVybiB2b2lkIGZwc2F2ZSh1bnNpZ25lZCBsb25nICpmcHJlZ3MsIHVuc2lnbmVkIGxvbmcgKmZzciwKKwkJICAgdm9pZCAqZnBxdWV1ZSwgdW5zaWduZWQgbG9uZyAqZnBxZGVwdGgpOworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBTV0lUQ0hfRU5URVIocHJ2KSBcCisJZG8gewkJCVwKKwlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcocHJ2LCBUSUZfVVNFREZQVSkpIHsgXAorCQlwdXRfcHNyKGdldF9wc3IoKSB8IFBTUl9FRik7IFwKKwkJZnBzYXZlKCYocHJ2KS0+dGhyZWFkLmZsb2F0X3JlZ3NbMF0sICYocHJ2KS0+dGhyZWFkLmZzciwgXAorCQkgICAgICAgJihwcnYpLT50aHJlYWQuZnBxdWV1ZVswXSwgJihwcnYpLT50aHJlYWQuZnBxZGVwdGgpOyBcCisJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhwcnYsIFRJRl9VU0VERlBVKTsgXAorCQkocHJ2KS0+dGhyZWFkLmtyZWdzLT5wc3IgJj0gflBTUl9FRjsgXAorCX0gXAorCX0gd2hpbGUoMCkKKworI2RlZmluZSBTV0lUQ0hfRE9fTEFaWV9GUFUobmV4dCkJLyogKi8KKyNlbHNlCisjZGVmaW5lIFNXSVRDSF9FTlRFUihwcnYpCQkvKiAqLworI2RlZmluZSBTV0lUQ0hfRE9fTEFaWV9GUFUobnh0KQlcCisJZG8gewkJCVwKKwlpZiAobGFzdF90YXNrX3VzZWRfbWF0aCAhPSAobnh0KSkJCVwKKwkJKG54dCktPnRocmVhZC5rcmVncy0+cHNyJj1+UFNSX0VGOwlcCisJfSB3aGlsZSgwKQorI2VuZGlmCisKK2V4dGVybiB2b2lkIGZsdXNod19hbGwodm9pZCk7CisKKy8qCisgKiBGbHVzaCB3aW5kb3dzIHNvIHRoYXQgdGhlIFZNIHN3aXRjaCB3aGljaCBmb2xsb3dzCisgKiB3b3VsZCBub3QgcHVsbCB0aGUgc3RhY2sgZnJvbSB1bmRlciB1cy4KKyAqCisgKiBTV0lUQ0hfRU5URVIgYW5kIFNXSVRIX0RPX0xBWllfRlBVIGRvIG5vdCB3b3JrIHlldCAoZS5nLiBTTVAgZG9lcyBub3Qgd29yaykKKyAqIFhYWCBXVEYgaXMgdGhlIGFib3ZlIGNvbW1lbnQ/IEZvdW5kIGluIGxhdGUgdGVlbiAyLjQueC4KKyAqLworI2RlZmluZSBwcmVwYXJlX2FyY2hfc3dpdGNoKG5leHQpIGRvIHsgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCBcCisJIi5nbG9ibFx0Zmx1c2hfcGF0Y2hfc3dpdGNoXG5mbHVzaF9wYXRjaF9zd2l0Y2g6XG5cdCIgXAorCSJzYXZlICVzcCwgLTB4NDAsICVzcDsgc2F2ZSAlc3AsIC0weDQwLCAlc3A7IHNhdmUgJXNwLCAtMHg0MCwgJXNwXG5cdCIgXAorCSJzYXZlICVzcCwgLTB4NDAsICVzcDsgc2F2ZSAlc3AsIC0weDQwLCAlc3A7IHNhdmUgJXNwLCAtMHg0MCwgJXNwXG5cdCIgXAorCSJzYXZlICVzcCwgLTB4NDAsICVzcFxuXHQiIFwKKwkicmVzdG9yZTsgcmVzdG9yZTsgcmVzdG9yZTsgcmVzdG9yZTsgcmVzdG9yZTsgcmVzdG9yZTsgcmVzdG9yZSIpOyBcCit9IHdoaWxlKDApCisKKwkvKiBNdWNoIGNhcmUgaGFzIGdvbmUgaW50byB0aGlzIGNvZGUsIGRvIG5vdCB0b3VjaCBpdC4KKwkgKgorCSAqIFdlIG5lZWQgdG8gbG9hZHVwIHJlZ3MgbDAvbDEgZm9yIHRoZSBuZXdseSBmb3JrZWQgY2hpbGQKKwkgKiBjYXNlIGJlY2F1c2UgdGhlIHRyYXAgcmV0dXJuIHBhdGggcmVsaWVzIG9uIHRob3NlIHJlZ2lzdGVycworCSAqIGhvbGRpbmcgY2VydGFpbiB2YWx1ZXMsIGdjYyBpcyB0b2xkIHRoYXQgdGhleSBhcmUgY2xvYmJlcmVkLgorCSAqIEdjYyBuZWVkcyByZWdpc3RlcnMgZm9yIDMgdmFsdWVzIGluIGFuZCAxIHZhbHVlIG91dCwgc28gd2UKKwkgKiBjbG9iYmVyIGV2ZXJ5IG5vbi1maXhlZC11c2FnZSByZWdpc3RlciBiZXNpZGVzIGwyL2wzL280L281LiAgLURhdmVNCisJICoKKwkgKiBIZXkgRGF2ZSwgdGhhdCBkbyBub3QgdG91Y2ggc2lnbiBpcyB0b28gbXVjaCBvZiBhbiBpbmNlbnRpdmUKKwkgKiAtIEFudG9uICYgUGV0ZQorCSAqLworI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkgZG8gewkJCQkJCVwKKwlTV0lUQ0hfRU5URVIocHJldik7CQkJCQkJCQlcCisJU1dJVENIX0RPX0xBWllfRlBVKG5leHQpOwkJCQkJCQlcCisJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG5leHQtPmFjdGl2ZV9tbS0+Y3B1X3ZtX21hc2spOwkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJCVwKKwkic2V0aGkJJSVoaShoZXJlIC0gMHg4KSwgJSVvN1xuXHQiCQkJCQkJXAorCSJtb3YJJSVnNiwgJSVnM1xuXHQiCQkJCQkJCQlcCisJIm9yCSUlbzcsICUlbG8oaGVyZSAtIDB4OCksICUlbzdcblx0IgkJCQkJXAorCSJyZAklJXBzciwgJSVnNFxuXHQiCQkJCQkJCVwKKwkic3RkCSUlc3AsIFslJWc2ICsgJTRdXG5cdCIJCQkJCQkJXAorCSJyZAklJXdpbSwgJSVnNVxuXHQiCQkJCQkJCVwKKwkid3IJJSVnNCwgMHgyMCwgJSVwc3Jcblx0IgkJCQkJCQlcCisJIm5vcFxuXHQiCQkJCQkJCQkJXAorCSJzdGQJJSVnNCwgWyUlZzYgKyAlM11cblx0IgkJCQkJCQlcCisJImxkZAlbJTIgKyAlM10sICUlZzRcblx0IgkJCQkJCQlcCisJIm1vdgklMiwgJSVnNlxuXHQiCQkJCQkJCQlcCisJIi5nbG9ibAlwYXRjaG1lX3N0b3JlX25ld19jdXJyZW50XG4iCQkJCQkJXAorInBhdGNobWVfc3RvcmVfbmV3X2N1cnJlbnQ6XG5cdCIJCQkJCQkJXAorCSJzdAklMiwgWyUxXVxuXHQiCQkJCQkJCQlcCisJIndyCSUlZzQsIDB4MjAsICUlcHNyXG5cdCIJCQkJCQkJXAorCSJub3Bcblx0IgkJCQkJCQkJCVwKKwkibm9wXG5cdCIJCQkJCQkJCQlcCisJIm5vcFxuXHQiCS8qIExFT04gbmVlZHMgYWxsIDMgbm9wczogbG9hZCB0byAlc3AgZGVwZW5kcyBvbiBDV1AuICovCQlcCisJImxkZAlbJSVnNiArICU0XSwgJSVzcFxuXHQiCQkJCQkJCVwKKwkid3IJJSVnNSwgMHgwLCAlJXdpbVxuXHQiCQkJCQkJCVwKKwkibGRkCVslJXNwICsgMHgwMF0sICUlbDBcblx0IgkJCQkJCVwKKwkibGRkCVslJXNwICsgMHgzOF0sICUlaTZcblx0IgkJCQkJCVwKKwkid3IJJSVnNCwgMHgwLCAlJXBzclxuXHQiCQkJCQkJCVwKKwkibm9wXG5cdCIJCQkJCQkJCQlcCisJIm5vcFxuXHQiCQkJCQkJCQkJXAorCSJqbXBsCSUlbzcgKyAweDgsICUlZzBcblx0IgkJCQkJCQlcCisJIiBsZAlbJSVnMyArICU1XSwgJTBcblx0IgkJCQkJCQlcCisJImhlcmU6XG4iCQkJCQkJCQkJXAorICAgICAgICA6ICI9JnIiIChsYXN0KQkJCQkJCQkJCVwKKyAgICAgICAgOiAiciIgKCYoY3VycmVudF9zZXRbaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCldKSksCVwKKwkgICJyIiAodGFza190aHJlYWRfaW5mbyhuZXh0KSksCQkJCVwKKwkgICJpIiAoVElfS1BTUiksCQkJCQlcCisJICAiaSIgKFRJX0tTUCksCQkJCQkJXAorCSAgImkiIChUSV9UQVNLKQkJCQkJCVwKKwk6ICAgICAgICJnMSIsICJnMiIsICJnMyIsICJnNCIsICJnNSIsICAgICAgICJnNyIsCVwKKwkgICJsMCIsICJsMSIsICAgICAgICJsMyIsICJsNCIsICJsNSIsICJsNiIsICJsNyIsCVwKKwkgICJpMCIsICJpMSIsICJpMiIsICJpMyIsICJpNCIsICJpNSIsCQkJXAorCSAgIm8wIiwgIm8xIiwgIm8yIiwgIm8zIiwgICAgICAgICAgICAgICAgICAgIm83Iik7CVwKKwl9IHdoaWxlKDApCisKKy8qIFhYWCBDaGFuZ2UgdGhpcyBpZiB3ZSBldmVyIHVzZSBhIFBTTyBtb2RlIGtlcm5lbC4gKi8KKyNkZWZpbmUgbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lIHJtYigpCW1iKCkKKyNkZWZpbmUgd21iKCkJbWIoKQorI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBzZXRfbWIoX192YXIsIF9fdmFsdWUpICBkbyB7IF9fdmFyID0gX192YWx1ZTsgbWIoKTsgfSB3aGlsZSgwKQorI2RlZmluZSBzbXBfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQorI2RlZmluZSBzbXBfcm1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKKyNkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKworLyogVGhpcyBoYXMgc3BlY2lhbCBjYWxsaW5nIGNvbnZlbnRpb25zICovCisjaWZuZGVmIENPTkZJR19TTVAKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBfX194Y2hnMzIsIHZvaWQpCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHhjaGdfdTMyKF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBsb25nICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN3YXAgWyUyXSwgJTAiCisJCQkgICAgIDogIj0mciIgKHZhbCkKKwkJCSAgICAgOiAiMCIgKHZhbCksICJyIiAobSkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJcmV0dXJuIHZhbDsKKyNlbHNlCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAqcHRyIGFzbSgiZzEiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJldCBhc20oImcyIik7CisKKwlwdHIgPSAodW5zaWduZWQgbG9uZyAqKSBtOworCXJldCA9IHZhbDsKKworCS8qIE5vdGU6IHRoaXMgaXMgbWFnaWMgYW5kIHRoZSBub3AgdGhlcmUgaXMKKwkgICByZWFsbHkgbmVlZGVkLiAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJtb3YJJSVvNywgJSVnNFxuXHQiCisJImNhbGwJX19fZl9fX194Y2hnMzJcblx0IgorCSIgbm9wXG5cdCIKKwk6ICI9JnIiIChyZXQpCisJOiAiMCIgKHJldCksICJyIiAocHRyKQorCTogImczIiwgImc0IiwgImc3IiwgIm1lbW9yeSIsICJjYyIpOworCisJcmV0dXJuIHJldDsKKyNlbmRpZgorfQorCisjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQorCitleHRlcm4gdm9pZCBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCBfX3ZvbGF0aWxlX18gdm9pZCAqIHB0ciwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSA0OgorCQlyZXR1cm4geGNoZ191MzIocHRyLCB4KTsKKwl9OworCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiB4OworfQorCisvKiBFbXVsYXRlIGNtcHhjaGcoKSB0aGUgc2FtZSB3YXkgd2UgZW11bGF0ZSBhdG9taWNzLAorICogYnkgaGFzaGluZyB0aGUgb2JqZWN0IGFkZHJlc3MgYW5kIGluZGV4aW5nIGludG8gYW4gYXJyYXkKKyAqIG9mIHNwaW5sb2NrcyB0byBnZXQgYSBiaXQgb2YgcGVyZm9ybWFuY2UuLi4KKyAqCisgKiBTZWUgYXJjaC9zcGFyYy9saWIvYXRvbWljMzIuYyBmb3IgaW1wbGVtZW50YXRpb24uCisgKgorICogQ3JpYmJlZCBmcm9tIDxhc20tcGFyaXNjL2F0b21pYy5oPgorICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcJMQorCisvKiBidWcgY2F0Y2hlciBmb3Igd2hlbiB1bnN1cHBvcnRlZCBzaXplIGlzIHVzZWQgLSB3b24ndCBsaW5rICovCitleHRlcm4gdm9pZCBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisvKiB3ZSBvbmx5IG5lZWQgdG8gc3VwcG9ydCBjbXB4Y2hnIG9mIGEgdTMyIG9uIHNwYXJjICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2NtcHhjaGdfdTMyKHZvbGF0aWxlIHUzMiAqbSwgdTMyIG9sZCwgdTMyIG5ld18pOworCisvKiBkb24ndCB3b3JyeS4uLm9wdGltaXplciB3aWxsIGdldCByaWQgb2YgbW9zdCBvZiB0aGlzICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ld18sIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgNDoKKwkJcmV0dXJuIF9fY21weGNoZ191MzIoKHUzMiAqKXB0ciwgKHUzMilvbGQsICh1MzIpbmV3Xyk7CisJZGVmYXVsdDoKKwkJX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gb2xkOworfQorCisjZGVmaW5lIGNtcHhjaGcocHRyLCBvLCBuKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfb18gPSAobyk7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCVwKKwkoX190eXBlb2ZfXygqKHB0cikpKSBfX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKV9vXywJXAorCQkJKHVuc2lnbmVkIGxvbmcpX25fLCBzaXplb2YoKihwdHIpKSk7CQlcCit9KQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY21weGNoZy1sb2NhbC5oPgorCisvKgorICogY21weGNoZ19sb2NhbCBhbmQgY21weGNoZzY0X2xvY2FsIGFyZSBhdG9taWMgd3J0IGN1cnJlbnQgQ1BVLiBBbHdheXMgbWFrZQorICogdGhlbSBhdmFpbGFibGUuCisgKi8KKyNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG8sIG4pCQkJCSAgCSAgICAgICBcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnX2xvY2FsX2dlbmVyaWMoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSxcCisJCQkodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKSkKKyNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikgX19jbXB4Y2hnNjRfbG9jYWxfZ2VuZXJpYygocHRyKSwgKG8pLCAobikpCisKK2V4dGVybiB2b2lkIGRpZV9pZl9rZXJuZWwoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorCisjZW5kaWYgLyogIShfX1NQQVJDX1NZU1RFTV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW1fNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjllNzQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtXzY0LmgKQEAgLTAsMCArMSwzNTUgQEAKKyNpZm5kZWYgX19TUEFSQzY0X1NZU1RFTV9ICisjZGVmaW5lIF9fU1BBUkM2NF9TWVNURU1fSAorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdmlzYXNtLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NtcHhjaGctbG9jYWwuaD4KKworLyoKKyAqIFNwYXJjIChnZW5lcmFsKSBDUFUgdHlwZXMKKyAqLworZW51bSBzcGFyY19jcHUgeworICBzdW40ICAgICAgICA9IDB4MDAsCisgIHN1bjRjICAgICAgID0gMHgwMSwKKyAgc3VuNG0gICAgICAgPSAweDAyLAorICBzdW40ZCAgICAgICA9IDB4MDMsCisgIHN1bjRlICAgICAgID0gMHgwNCwKKyAgc3VuNHUgICAgICAgPSAweDA1LCAvKiBWOCBwbG9vcyBwbG9vcyAqLworICBzdW5fdW5rbm93biA9IDB4MDYsCisgIGFwMTAwMCAgICAgID0gMHgwNywgLyogYWxtb3N0IGEgc3VuNG0gKi8KK307CisKKyNkZWZpbmUgc3BhcmNfY3B1X21vZGVsIHN1bjR1CisKKy8qIFRoaXMgY2Fubm90IGV2ZXIgYmUgYSBzdW40YyBub3Igc3VuNCA6KSBUaGF0J3MganVzdCBoaXN0b3J5LiAqLworI2RlZmluZSBBUkNIX1NVTjRDX1NVTjQgMAorI2RlZmluZSBBUkNIX1NVTjQgMAorCitleHRlcm4gY2hhciByZWJvb3RfY29tbWFuZFtdOworCisvKiBUaGVzZSBhcmUgaGVyZSBpbiBhbiBlZmZvcnQgdG8gbW9yZSBmdWxseSB3b3JrIGFyb3VuZCBTcGl0ZmlyZSBFcnJhdGEKKyAqICM1MS4gIEVzc2VudGlhbGx5LCBpZiBhIG1lbW9yeSBiYXJyaWVyIG9jY3VycyBzb29uIGFmdGVyIGEgbWlzcHJlZGljdGVkCisgKiBicmFuY2gsIHRoZSBjaGlwIGNhbiBzdG9wIGV4ZWN1dGluZyBpbnN0cnVjdGlvbnMgdW50aWwgYSB0cmFwIG9jY3Vycy4KKyAqIFRoZXJlZm9yZSwgaWYgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHRoZSBjaGlwIGNhbiBoYW5nIGZvcmV2ZXIuCisgKgorICogSXQgdXNlZCB0byBiZSBiZWxpZXZlZCB0aGF0IHRoZSBtZW1vcnkgYmFycmllciBoYWQgdG8gYmUgcmlnaHQgaW4gdGhlCisgKiBkZWxheSBzbG90LCBidXQgYSBjYXNlIGhhcyBiZWVuIHRyYWNlZCByZWNlbnRseSB3aGVyZWluIHRoZSBtZW1vcnkgYmFycmllcgorICogd2FzIG9uZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgYnJhbmNoIGRlbGF5IHNsb3QgYW5kIHRoZSBjaGlwIHN0aWxsIGh1bmcuCisgKiBUaGUgb2ZmZW5kaW5nIHNlcXVlbmNlIHdhcyB0aGUgZm9sbG93aW5nIGluIHN5bV93YWtldXBfZG9uZSgpIG9mIHRoZQorICogc3ltNTNjOHh4XzIgZHJpdmVyOgorICoKKyAqCWNhbGwJc3ltX2NjYl9mcm9tX2RzYSwgMAorICoJIG1vdmdlCSVpY2MsIDAsICVsMAorICoJYnJ6LHBuCSVvMCwgLkxMMTMwMworICoJIG1vdgklbzAsICVsMgorICoJbWVtYmFyCSNMb2FkTG9hZAorICoKKyAqIFRoZSBicmFuY2ggaGFzIHRvIGJlIG1pc3ByZWRpY3RlZCBmb3IgdGhlIGJ1ZyB0byBvY2N1ci4gIFRoZXJlZm9yZSwgd2UgcHV0CisgKiB0aGUgbWVtb3J5IGJhcnJpZXIgZXhwbGljaXRseSBpbnRvIGEgImJyYW5jaCBhbHdheXMsIHByZWRpY3RlZCB0YWtlbiIKKyAqIGRlbGF5IHNsb3QgdG8gYXZvaWQgdGhlIHByb2JsZW0gY2FzZS4KKyAqLworI2RlZmluZSBtZW1iYXJfc2FmZSh0eXBlKSBcCitkbyB7CV9fYXNtX18gX192b2xhdGlsZV9fKCJiYSxwdAklJXhjYywgMWZcblx0IiBcCisJCQkgICAgICIgbWVtYmFyCSIgdHlwZSAiXG4iIFwKKwkJCSAgICAgIjE6XG4iIFwKKwkJCSAgICAgOiA6IDogIm1lbW9yeSIpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIG1iKCkJXAorCW1lbWJhcl9zYWZlKCIjTG9hZExvYWQgfCAjTG9hZFN0b3JlIHwgI1N0b3JlU3RvcmUgfCAjU3RvcmVMb2FkIikKKyNkZWZpbmUgcm1iKCkJXAorCW1lbWJhcl9zYWZlKCIjTG9hZExvYWQiKQorI2RlZmluZSB3bWIoKQlcCisJbWVtYmFyX3NhZmUoIiNTdG9yZVN0b3JlIikKKyNkZWZpbmUgbWVtYmFyX3N0b3JlbG9hZCgpIFwKKwltZW1iYXJfc2FmZSgiI1N0b3JlTG9hZCIpCisjZGVmaW5lIG1lbWJhcl9zdG9yZWxvYWRfc3RvcmVzdG9yZSgpIFwKKwltZW1iYXJfc2FmZSgiI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIikKKyNkZWZpbmUgbWVtYmFyX3N0b3JlbG9hZF9sb2FkbG9hZCgpIFwKKwltZW1iYXJfc2FmZSgiI1N0b3JlTG9hZCB8ICNMb2FkTG9hZCIpCisjZGVmaW5lIG1lbWJhcl9zdG9yZXN0b3JlX2xvYWRzdG9yZSgpIFwKKwltZW1iYXJfc2FmZSgiI1N0b3JlU3RvcmUgfCAjTG9hZFN0b3JlIikKKworI2VuZGlmCisKKyNkZWZpbmUgbm9wKCkgCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcCIpCisKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHNldF9tYihfX3ZhciwgX192YWx1ZSkgXAorCWRvIHsgX192YXIgPSBfX3ZhbHVlOyBtZW1iYXJfc3RvcmVsb2FkX3N0b3Jlc3RvcmUoKTsgfSB3aGlsZSgwKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJd21iKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKKyNkZWZpbmUgc21wX3JtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCisjZGVmaW5lIHNtcF93bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIGZsdXNoaShhZGRyKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsdXNoICUwIiA6IDogInIiIChhZGRyKSA6ICJtZW1vcnkiKQorCisjZGVmaW5lIGZsdXNod19hbGwoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2h3IikKKworLyogUGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlciBhY2Nlc3MuICovCisjZGVmaW5lIHJlYWRfcGNyKF9fcCkgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZAklJXBjciwgJTAiIDogIj1yIiAoX19wKSkKKyNkZWZpbmUgd3JpdGVfcGNyKF9fcCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIndyCSUwLCAweDAsICUlcGNyIiA6IDogInIiIChfX3ApKQorI2RlZmluZSByZWFkX3BpYyhfX3ApICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQgJSVwaWMsICUwIiA6ICI9ciIgKF9fcCkpCisKKy8qIEJsYWNrYmlyZCBlcnJhdGEgd29ya2Fyb3VuZC4gIFNlZSBjb21tZW50YXJ5IGluCisgKiBhcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jOnNtcF9wZXJjcHVfdGltZXJfaW50ZXJydXB0KCkKKyAqIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCisjZGVmaW5lIHJlc2V0X3BpYygpICAgIAkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYmEscHQJJXhjYywgOTlmXG5cdCIJCVwKKwkJCSAgICAgIi5hbGlnbgk2NFxuIgkJCVwKKwkJCSAgIjk5OndyCSVnMCwgMHgwLCAlcGljXG5cdCIJXAorCQkJICAgICAicmQJJXBpYywgJWcwIikKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJuIHZvaWQgc3VuX2RvX2JyZWFrKHZvaWQpOworZXh0ZXJuIGludCBzdG9wX2FfZW5hYmxlZDsKKworZXh0ZXJuIHZvaWQgZmF1bHRfaW5fdXNlcl93aW5kb3dzKHZvaWQpOworZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfdXNlcl9zdGFjayh2b2lkKTsKKworZXh0ZXJuIHZvaWQgX19mbHVzaHdfdXNlcih2b2lkKTsKKyNkZWZpbmUgZmx1c2h3X3VzZXIoKSBfX2ZsdXNod191c2VyKCkKKworI2RlZmluZSBmbHVzaF91c2VyX3dpbmRvd3MgZmx1c2h3X3VzZXIKKyNkZWZpbmUgZmx1c2hfcmVnaXN0ZXJfd2luZG93cyBmbHVzaHdfYWxsCisKKy8qIERvbid0IGhvbGQgdGhlIHJ1bnF1ZXVlIGxvY2sgb3ZlciBjb250ZXh0IHN3aXRjaCAqLworI2RlZmluZSBfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTVworI2RlZmluZSBwcmVwYXJlX2FyY2hfc3dpdGNoKG5leHQpCQlcCitkbyB7CQkJCQkJXAorCWZsdXNod19hbGwoKTsJCQkJXAorfSB3aGlsZSAoMCkKKworCS8qIFNlZSB3aGF0IGhhcHBlbnMgd2hlbiB5b3UgZGVzaWduIHRoZSBjaGlwIGNvcnJlY3RseT8KKwkgKgorCSAqIFdlIHRlbGwgZ2NjIHdlIGNsb2JiZXIgYWxsIG5vbi1maXhlZC11c2FnZSByZWdpc3RlcnMgZXhjZXB0CisJICogZm9yIGwwL2wxLiAgSXQgd2lsbCB1c2Ugb25lIGZvciAnbmV4dCcgYW5kIHRoZSBvdGhlciB0byBob2xkCisJICogdGhlIG91dHB1dCB2YWx1ZSBvZiAnbGFzdCcuICAnbmV4dCcgaXMgbm90IHJlZmVyZW5jZWQgYWdhaW4KKwkgKiBwYXN0IHRoZSBpbnZvY2F0aW9uIG9mIHN3aXRjaF90byBpbiB0aGUgc2NoZWR1bGVyLCBzbyB3ZSBuZWVkCisJICogbm90IHByZXNlcnZlIGl0J3MgdmFsdWUuICBIYWlyeSwgYnV0IGl0IGxldHMgdXMgcmVtb3ZlIDIgbG9hZHMKKwkgKiBhbmQgMiBzdG9yZXMgaW4gdGhpcyBjcml0aWNhbCBjb2RlIHBhdGguICAtRGF2ZU0KKwkgKi8KKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpCQkJCQlcCitkbyB7CWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9QRVJGQ1RSKSkgewkJCQlcCisJCXVuc2lnbmVkIGxvbmcgX190bXA7CQkJCQlcCisJCXJlYWRfcGNyKF9fdG1wKTsJCQkJCVwKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT5wY3JfcmVnID0gX190bXA7CQkJXAorCQlyZWFkX3BpYyhfX3RtcCk7CQkJCQlcCisJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2VybmVsX2NudGQwICs9ICh1bnNpZ25lZCBpbnQpKF9fdG1wKTtcCisJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2VybmVsX2NudGQxICs9ICgoX190bXApID4+IDMyKTsJXAorCX0JCQkJCQkJCVwKKwlmbHVzaF90bGJfcGVuZGluZygpOwkJCQkJCVwKKwlzYXZlX2FuZF9jbGVhcl9mcHUoKTsJCQkJCQlcCisJLyogSWYgeW91IGFyZSB0ZW1wdGVkIHRvIGNvbmRpdGlvbmFsaXplIHRoZSBmb2xsb3dpbmcgKi8JXAorCS8qIHNvIHRoYXQgQVNJIGlzIG9ubHkgd3JpdHRlbiBpZiBpdCBjaGFuZ2VzLCB0aGluayBhZ2Fpbi4gKi8JXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJ3ciAlJWcwLCAlMCwgJSVhc2kiCQkJXAorCTogOiAiciIgKF9fdGhyZWFkX2ZsYWdfYnl0ZV9wdHIodGFza190aHJlYWRfaW5mbyhuZXh0KSlbVElfRkxBR19CWVRFX0NVUlJFTlRfRFNdKSk7XAorCXRyYXBfYmxvY2tbY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHVdLnRocmVhZCA9CQkJXAorCQl0YXNrX3RocmVhZF9pbmZvKG5leHQpOwkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkibW92CSUlZzQsICUlZzdcblx0IgkJCQkJCVwKKwkic3R4CSUlaTYsIFslJXNwICsgMjA0NyArIDB4NzBdXG5cdCIJCQkJXAorCSJzdHgJJSVpNywgWyUlc3AgKyAyMDQ3ICsgMHg3OF1cblx0IgkJCQlcCisJInJkcHIJJSV3c3RhdGUsICUlbzVcblx0IgkJCQkJXAorCSJzdHgJJSVvNiwgWyUlZzYgKyAlNl1cblx0IgkJCQkJXAorCSJzdGIJJSVvNSwgWyUlZzYgKyAlNV1cblx0IgkJCQkJXAorCSJyZHByCSUlY3dwLCAlJW81XG5cdCIJCQkJCVwKKwkic3RiCSUlbzUsIFslJWc2ICsgJThdXG5cdCIJCQkJCVwKKwkibW92CSU0LCAlJWc2XG5cdCIJCQkJCQlcCisJImxkdWIJWyU0ICsgJThdLCAlJWcxXG5cdCIJCQkJCVwKKwkid3JwcgklJWcxLCAlJWN3cFxuXHQiCQkJCQlcCisJImxkeAlbJSVnNiArICU2XSwgJSVvNlxuXHQiCQkJCQlcCisJImxkdWIJWyUlZzYgKyAlNV0sICUlbzVcblx0IgkJCQkJXAorCSJsZHViCVslJWc2ICsgJTddLCAlJW83XG5cdCIJCQkJCVwKKwkid3JwcgklJW81LCAweDAsICUld3N0YXRlXG5cdCIJCQkJXAorCSJsZHgJWyUlc3AgKyAyMDQ3ICsgMHg3MF0sICUlaTZcblx0IgkJCQlcCisJImxkeAlbJSVzcCArIDIwNDcgKyAweDc4XSwgJSVpN1xuXHQiCQkJCVwKKwkibGR4CVslJWc2ICsgJTldLCAlJWc0XG5cdCIJCQkJCVwKKwkiYnJ6LHB0ICUlbzcsIHN3aXRjaF90b19wY1xuXHQiCQkJCQlcCisJIiBtb3YJJSVnNywgJTBcblx0IgkJCQkJCVwKKwkic2V0aGkJJSVoaShyZXRfZnJvbV9zeXNjYWxsKSwgJSVnMVxuXHQiCQkJXAorCSJqbXBsCSUlZzEgKyAlJWxvKHJldF9mcm9tX3N5c2NhbGwpLCAlJWcwXG5cdCIJCVwKKwkiIG5vcFxuXHQiCQkJCQkJCVwKKwkiLmdsb2JsIHN3aXRjaF90b19wY1xuXHQiCQkJCQlcCisJInN3aXRjaF90b19wYzpcblx0IgkJCQkJCVwKKwk6ICI9JnIiIChsYXN0KSwgIj1yIiAoY3VycmVudCksICI9ciIgKGN1cnJlbnRfdGhyZWFkX2luZm9fcmVnKSwJXAorCSAgIj1yIiAoX19sb2NhbF9wZXJfY3B1X29mZnNldCkJCQkJCVwKKwk6ICIwIiAodGFza190aHJlYWRfaW5mbyhuZXh0KSksCQkJCQlcCisJICAiaSIgKFRJX1dTVEFURSksICJpIiAoVElfS1NQKSwgImkiIChUSV9ORVdfQ0hJTEQpLCAgICAgICAgICAgIFwKKwkgICJpIiAoVElfQ1dQKSwgImkiIChUSV9UQVNLKQkJCQkJXAorCTogImNjIiwJCQkJCQkJCVwKKwkgICAgICAgICJnMSIsICJnMiIsICJnMyIsICAgICAgICAgICAgICAgICAgICJnNyIsCQlcCisJICAgICAgICAibDEiLCAibDIiLCAibDMiLCAibDQiLCAibDUiLCAibDYiLCAibDciLAkJXAorCSAgImkwIiwgImkxIiwgImkyIiwgImkzIiwgImk0IiwgImk1IiwJCQkJXAorCSAgIm8wIiwgIm8xIiwgIm8yIiwgIm8zIiwgIm80IiwgIm81IiwgICAgICAgIm83Iik7CQlcCisJLyogSWYgeW91IGZ1Y2sgd2l0aCB0aGlzLCB1cGRhdGUgcmV0X2Zyb21fc3lzY2FsbCBjb2RlIHRvby4gKi8JXAorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9QRVJGQ1RSKSkgewkJCQlcCisJCXdyaXRlX3BjcihjdXJyZW50X3RocmVhZF9pbmZvKCktPnBjcl9yZWcpOwkJXAorCQlyZXNldF9waWMoKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSgwKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeGNoZzMyKF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKm0sIHVuc2lnbmVkIGludCB2YWwpCit7CisJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNMb2FkTG9hZFxuIgorIgltb3YJCSUwLCAlMVxuIgorIjE6CWxkdXcJCVslNF0sICUyXG4iCisiCWNhcwkJWyU0XSwgJTIsICUwXG4iCisiCWNtcAkJJTIsICUwXG4iCisiCWJuZSxhLHBuCSUlaWNjLCAxYlxuIgorIgkgbW92CQklMSwgJTBcbiIKKyIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKKwk6ICI9JnIiICh2YWwpLCAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQorCTogIjAiICh2YWwpLCAiciIgKG0pCisJOiAiY2MiLCAibWVtb3J5Iik7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHhjaGc2NChfX3ZvbGF0aWxlX18gdW5zaWduZWQgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNMb2FkTG9hZFxuIgorIgltb3YJCSUwLCAlMVxuIgorIjE6CWxkeAkJWyU0XSwgJTJcbiIKKyIJY2FzeAkJWyU0XSwgJTIsICUwXG4iCisiCWNtcAkJJTIsICUwXG4iCisiCWJuZSxhLHBuCSUleGNjLCAxYlxuIgorIgkgbW92CQklMSwgJTBcbiIKKyIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKKwk6ICI9JnIiICh2YWwpLCAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQorCTogIjAiICh2YWwpLCAiciIgKG0pCisJOiAiY2MiLCAibWVtb3J5Iik7CisJcmV0dXJuIHZhbDsKK30KKworI2RlZmluZSB4Y2hnKHB0cix4KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKSkKKworZXh0ZXJuIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgX192b2xhdGlsZV9fIHZvaWQgKiBwdHIsCisJCQkJICAgICAgIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgNDoKKwkJcmV0dXJuIHhjaGczMihwdHIsIHgpOworCWNhc2UgODoKKwkJcmV0dXJuIHhjaGc2NChwdHIsIHgpOworCX07CisJX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJcmV0dXJuIHg7Cit9CisKK2V4dGVybiB2b2lkIGRpZV9pZl9rZXJuZWwoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CisKKy8qCisgKiBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UuICBDb21wYXJlIE9MRCB3aXRoIE1FTSwgaWYgaWRlbnRpY2FsLAorICogc3RvcmUgTkVXIGluIE1FTS4gIFJldHVybiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiBNRU0uICBTdWNjZXNzIGlzCisgKiBpbmRpY2F0ZWQgYnkgY29tcGFyaW5nIFJFVFVSTiB3aXRoIE9MRC4KKyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzIodm9sYXRpbGUgaW50ICptLCBpbnQgb2xkLCBpbnQgbmV3KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtZW1iYXIgI1N0b3JlTG9hZCB8ICNMb2FkTG9hZFxuIgorCQkJICAgICAiY2FzIFslMl0sICUzLCAlMFxuXHQiCisJCQkgICAgICJtZW1iYXIgI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIgorCQkJICAgICA6ICI9JnIiIChuZXcpCisJCQkgICAgIDogIjAiIChuZXcpLCAiciIgKG0pLCAiciIgKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gbmV3OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191NjQodm9sYXRpbGUgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtZW1iYXIgI1N0b3JlTG9hZCB8ICNMb2FkTG9hZFxuIgorCQkJICAgICAiY2FzeCBbJTJdLCAlMywgJTBcblx0IgorCQkJICAgICAibWVtYmFyICNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZSIKKwkJCSAgICAgOiAiPSZyIiAobmV3KQorCQkJICAgICA6ICIwIiAobmV3KSwgInIiIChtKSwgInIiIChvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOworCisJcmV0dXJuIG5ldzsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4aXN0LCBzbyB5b3UnbGwgZ2V0IGEgbGlua2VyIGVycm9yCisgICBpZiBzb21ldGhpbmcgdHJpZXMgdG8gZG8gYW4gaW52YWxpZCBjbXB4Y2hnKCkuICAqLworZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgNDoKKwkJCXJldHVybiBfX2NtcHhjaGdfdTMyKHB0ciwgb2xkLCBuZXcpOworCQljYXNlIDg6CisJCQlyZXR1cm4gX19jbXB4Y2hnX3U2NChwdHIsIG9sZCwgbmV3KTsKKwl9CisJX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJcmV0dXJuIG9sZDsKK30KKworI2RlZmluZSBjbXB4Y2hnKHB0cixvLG4pCQkJCQkJIFwKKyAgKHsJCQkJCQkJCQkgXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX29fID0gKG8pOwkJCQkJIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCSBcCisgICAgIChfX3R5cGVvZl9fKCoocHRyKSkpIF9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpX29fLAkJIFwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpX25fLCBzaXplb2YoKihwdHIpKSk7IFwKKyAgfSkKKworLyoKKyAqIGNtcHhjaGdfbG9jYWwgYW5kIGNtcHhjaGc2NF9sb2NhbCBhcmUgYXRvbWljIHdydCBjdXJyZW50IENQVS4gQWx3YXlzIG1ha2UKKyAqIHRoZW0gYXZhaWxhYmxlLgorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NtcHhjaGdfbG9jYWwodm9sYXRpbGUgdm9pZCAqcHRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2xkLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDQ6CisJY2FzZSA4OglyZXR1cm4gX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsIHNpemUpOworCWRlZmF1bHQ6CisJCXJldHVybiBfX2NtcHhjaGdfbG9jYWxfZ2VuZXJpYyhwdHIsIG9sZCwgbmV3LCBzaXplKTsKKwl9CisKKwlyZXR1cm4gb2xkOworfQorCisjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkgIAlcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKKwkJCSh1bnNpZ25lZCBsb25nKShuKSwgc2l6ZW9mKCoocHRyKSkpKQorI2RlZmluZSBjbXB4Y2hnNjRfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAorICAoewkJCQkJCQkJCVwKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCoocHRyKSkgIT0gOCk7CQkJCVwKKwljbXB4Y2hnX2xvY2FsKChwdHIpLCAobyksIChuKSk7CQkJCQlcCisgIH0pCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorCisjZW5kaWYgLyogIShfX1NQQVJDNjRfU1lTVEVNX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdGVybWJpdHMuaAppbmRleCA5MGNmMjIxLi5kNmNhM2UyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Rlcm1iaXRzLmgKQEAgLTUsNyArNSwxMiBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBjY190OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgc3BlZWRfdDsKKworI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCit0eXBlZGVmIHVuc2lnbmVkIGludCAgICB0Y2ZsYWdfdDsKKyNlbHNlCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICB0Y2ZsYWdfdDsKKyNlbmRpZgogCiAjZGVmaW5lIE5DQyA4CiBzdHJ1Y3QgdGVybWlvIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3Rlcm1pb3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3Rlcm1pb3MuaAppbmRleCBmN2I0NDA5Li5lOGJhOTUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtaW9zLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGVybWlvcy5oCkBAIC01Myw3ICs1Myw2IEBACiAjZGVmaW5lIF9WTUlOCTQKICNkZWZpbmUgX1ZUSU1FCTUKIAotCiAvKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQogCWVvZj1eRAkJZW9sPVwwCQllb2wyPVwwCQlzeHRjPVwwCiAJc3RhcnQ9XlEJc3RvcD1eUwkJc3VzcD1eWgkJZHN1c3A9XlkKQEAgLTY4LDE2ICs2NywxNyBAQAogI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKICh7IFwKIAl1bnNpZ25lZCBzaG9ydCB0bXA7IFwKLQlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKKwlpbnQgZXJyOyBcCisJZXJyID0gZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCiAJKHRlcm1pb3MpLT5jX2lmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2lmbGFnKSkgfCB0bXA7IFwKLQlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwllcnIgfD0gZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCiAJKHRlcm1pb3MpLT5jX29mbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX29mbGFnKSkgfCB0bXA7IFwKLQlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19jZmxhZyk7IFwKKwllcnIgfD0gZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCiAJKHRlcm1pb3MpLT5jX2NmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2NmbGFnKSkgfCB0bXA7IFwKLQlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKKwllcnIgfD0gZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCiAJKHRlcm1pb3MpLT5jX2xmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2xmbGFnKSkgfCB0bXA7IFwKLQljb3B5X2Zyb21fdXNlcigodGVybWlvcyktPmNfY2MsICh0ZXJtaW8pLT5jX2NjLCBOQ0MpOyBcCi0JMDsgXAorCWVyciB8PSBjb3B5X2Zyb21fdXNlcigodGVybWlvcyktPmNfY2MsICh0ZXJtaW8pLT5jX2NjLCBOQ0MpOyBcCisJZXJyOyBcCiB9KQogCiAvKgpAQCAtODcsMTcgKzg3LDE4IEBACiAgKi8KICNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCiAoeyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKLQljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAorCWludCBlcnI7IFwKKwllcnIgID0gcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCisJZXJyIHw9IHB1dF91c2VyKCh0ZXJtaW9zKS0+Y19vZmxhZywgJih0ZXJtaW8pLT5jX29mbGFnKTsgXAorCWVyciB8PSBwdXRfdXNlcigodGVybWlvcyktPmNfY2ZsYWcsICYodGVybWlvKS0+Y19jZmxhZyk7IFwKKwllcnIgfD0gcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCisJZXJyIHw9IHB1dF91c2VyKCh0ZXJtaW9zKS0+Y19saW5lLCAgJih0ZXJtaW8pLT5jX2xpbmUpOyBcCisJZXJyIHw9IGNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOyBcCiAJaWYgKCEoKHRlcm1pb3MpLT5jX2xmbGFnICYgSUNBTk9OKSkgeyBcCi0JCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jY1tWTUlOXSwgJih0ZXJtaW8pLT5jX2NjW19WTUlOXSk7IFwKLQkJcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NjW1ZUSU1FXSwgJih0ZXJtaW8pLT5jX2NjW19WVElNRV0pOyBcCisJCWVyciB8PSBwdXRfdXNlcigodGVybWlvcyktPmNfY2NbVk1JTl0sICYodGVybWlvKS0+Y19jY1tfVk1JTl0pOyBcCisJCWVyciB8PSBwdXRfdXNlcigodGVybWlvcyktPmNfY2NbVlRJTUVdLCAmKHRlcm1pbyktPmNfY2NbX1ZUSU1FXSk7IFwKIAl9IFwKLQkwOyBcCisJZXJyOyBcCiB9KQogCiAjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhrLCB1KSBcCkBAIC0xNDQsMzggKzE0NSw0MCBAQAogCiAjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKGssIHUpIFwKICh7IFwKLQlnZXRfdXNlcigoayktPmNfaWZsYWcsICYodSktPmNfaWZsYWcpOyBcCi0JZ2V0X3VzZXIoKGspLT5jX29mbGFnLCAmKHUpLT5jX29mbGFnKTsgXAotCWdldF91c2VyKChrKS0+Y19jZmxhZywgJih1KS0+Y19jZmxhZyk7IFwKLQlnZXRfdXNlcigoayktPmNfbGZsYWcsICYodSktPmNfbGZsYWcpOyBcCi0JZ2V0X3VzZXIoKGspLT5jX2xpbmUsICAmKHUpLT5jX2xpbmUpOyBcCi0JY29weV9mcm9tX3VzZXIoKGspLT5jX2NjLCAodSktPmNfY2MsIE5DQ1MpOyBcCisJaW50IGVycjsgXAorCWVyciAgPSBnZXRfdXNlcigoayktPmNfaWZsYWcsICYodSktPmNfaWZsYWcpOyBcCisJZXJyIHw9IGdldF91c2VyKChrKS0+Y19vZmxhZywgJih1KS0+Y19vZmxhZyk7IFwKKwllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2NmbGFnLCAmKHUpLT5jX2NmbGFnKTsgXAorCWVyciB8PSBnZXRfdXNlcigoayktPmNfbGZsYWcsICYodSktPmNfbGZsYWcpOyBcCisJZXJyIHw9IGdldF91c2VyKChrKS0+Y19saW5lLCAgJih1KS0+Y19saW5lKTsgXAorCWVyciB8PSBjb3B5X2Zyb21fdXNlcigoayktPmNfY2MsICh1KS0+Y19jYywgTkNDUyk7IFwKIAlpZiAoKGspLT5jX2xmbGFnICYgSUNBTk9OKSB7IFwKLQkJZ2V0X3VzZXIoKGspLT5jX2NjW1ZFT0ZdLCAmKHUpLT5jX2NjW1ZFT0ZdKTsgXAotCQlnZXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCisJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVkVPRl0sICYodSktPmNfY2NbVkVPRl0pOyBcCisJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCiAJfSBlbHNlIHsgXAotCQlnZXRfdXNlcigoayktPmNfY2NbVk1JTl0sICAmKHUpLT5jX2NjW19WTUlOXSk7IFwKLQkJZ2V0X3VzZXIoKGspLT5jX2NjW1ZUSU1FXSwgJih1KS0+Y19jY1tfVlRJTUVdKTsgXAorCQllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2NjW1ZNSU5dLCAgJih1KS0+Y19jY1tfVk1JTl0pOyBcCisJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVlRJTUVdLCAmKHUpLT5jX2NjW19WVElNRV0pOyBcCiAJfSBcCi0JMDsgXAorCWVycjsgXAogfSkKIAogI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3NfMSh1LCBrKSBcCiAoeyBcCi0JcHV0X3VzZXIoKGspLT5jX2lmbGFnLCAmKHUpLT5jX2lmbGFnKTsgXAotCXB1dF91c2VyKChrKS0+Y19vZmxhZywgJih1KS0+Y19vZmxhZyk7IFwKLQlwdXRfdXNlcigoayktPmNfY2ZsYWcsICYodSktPmNfY2ZsYWcpOyBcCi0JcHV0X3VzZXIoKGspLT5jX2xmbGFnLCAmKHUpLT5jX2xmbGFnKTsgXAotCXB1dF91c2VyKChrKS0+Y19saW5lLCAmKHUpLT5jX2xpbmUpOyBcCi0JY29weV90b191c2VyKCh1KS0+Y19jYywgKGspLT5jX2NjLCBOQ0NTKTsgXAorCWludCBlcnI7IFwKKwllcnIgID0gcHV0X3VzZXIoKGspLT5jX2lmbGFnLCAmKHUpLT5jX2lmbGFnKTsgXAorCWVyciB8PSBwdXRfdXNlcigoayktPmNfb2ZsYWcsICYodSktPmNfb2ZsYWcpOyBcCisJZXJyIHw9IHB1dF91c2VyKChrKS0+Y19jZmxhZywgJih1KS0+Y19jZmxhZyk7IFwKKwllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2xmbGFnLCAmKHUpLT5jX2xmbGFnKTsgXAorCWVyciB8PSBwdXRfdXNlcigoayktPmNfbGluZSwgJih1KS0+Y19saW5lKTsgXAorCWVyciB8PSBjb3B5X3RvX3VzZXIoKHUpLT5jX2NjLCAoayktPmNfY2MsIE5DQ1MpOyBcCiAJaWYgKCEoKGspLT5jX2xmbGFnICYgSUNBTk9OKSkgeyBcCi0JCXB1dF91c2VyKChrKS0+Y19jY1tWTUlOXSwgICYodSktPmNfY2NbX1ZNSU5dKTsgXAotCQlwdXRfdXNlcigoayktPmNfY2NbVlRJTUVdLCAmKHUpLT5jX2NjW19WVElNRV0pOyBcCisJCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVk1JTl0sICAmKHUpLT5jX2NjW19WTUlOXSk7IFwKKwkJZXJyIHw9IHB1dF91c2VyKChrKS0+Y19jY1tWVElNRV0sICYodSktPmNfY2NbX1ZUSU1FXSk7IFwKIAl9IGVsc2UgeyBcCi0JCXB1dF91c2VyKChrKS0+Y19jY1tWRU9GXSwgJih1KS0+Y19jY1tWRU9GXSk7IFwKLQkJcHV0X3VzZXIoKGspLT5jX2NjW1ZFT0xdLCAmKHUpLT5jX2NjW1ZFT0xdKTsgXAorCQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2NjW1ZFT0ZdLCAmKHUpLT5jX2NjW1ZFT0ZdKTsgXAorCQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2NjW1ZFT0xdLCAmKHUpLT5jX2NjW1ZFT0xdKTsgXAogCX0gXAotCTA7IFwKKwllcnI7IFwKIH0pCiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdGhyZWFkX2luZm8uaAppbmRleCA5MWI5ZjU4Li42NDE1NWNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3RocmVhZF9pbmZvLmgKQEAgLTEsMTUxICsxLDggQEAKLS8qCi0gKiB0aHJlYWRfaW5mby5oOiBzcGFyYyBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCi0gKiBhZGFwdGVkIGZyb20gdGhlIHBwYyB2ZXJzaW9uIGJ5IFBldGUgWmFpdGNldiwgd2hpY2ggd2FzCi0gKiBhZGFwdGVkIGZyb20gdGhlIGkzODYgdmVyc2lvbiBieSBQYXVsIE1hY2tlcnJhcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiAgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqIENvcHlyaWdodCAoYykgMjAwMiAgUGV0ZSBaYWl0Y2V2ICh6YWl0Y2V2QHlhaG9vLmNvbSkKLSAqIC0gSW5jb3Jwb3JhdGluZyBzdWdnZXN0aW9ucyBtYWRlIGJ5IExpbnVzIFRvcnZhbGRzIGFuZCBEYXZlIE1pbGxlcgotICovCi0KLSNpZm5kZWYgX0FTTV9USFJFQURfSU5GT19ICi0jZGVmaW5lIF9BU01fVEhSRUFEX0lORk9fSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotLyoKLSAqIExvdyBsZXZlbCB0YXNrIGRhdGEuCi0gKgotICogSWYgeW91IGNoYW5nZSB0aGlzLCBjaGFuZ2UgdGhlIFRJXyogb2Zmc2V0cyBiZWxvdyB0byBtYXRjaC4KLSAqLwotI2RlZmluZSBOU1dJTlMgOAotc3RydWN0IHRocmVhZF9pbmZvIHsKLQl1bnNpZ25lZCBsb25nCQl1d2lubWFzazsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CQkvKiBtYWluIHRhc2sgc3RydWN0dXJlICovCi0Jc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCi0JaW50CQkJY3B1OwkJLyogY3B1IHdlJ3JlIG9uICovCi0JaW50CQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwKLQkJCQkJCSAgIDwwID0+IEJVRyAqLwotCWludAkJCXNvZnRpcnFfY291bnQ7Ci0JaW50CQkJaGFyZGlycV9jb3VudDsKLQotCS8qIENvbnRleHQgc3dpdGNoIHNhdmVkIGtlcm5lbCBzdGF0ZS4gKi8KLQl1bnNpZ25lZCBsb25nIGtzcDsJLyogLi4uIGtzcCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsgKi8KLQl1bnNpZ25lZCBsb25nIGtwYzsKLQl1bnNpZ25lZCBsb25nIGtwc3I7Ci0JdW5zaWduZWQgbG9uZyBrd2ltOwotCi0JLyogQSBwbGFjZSB0byBzdG9yZSB1c2VyIHdpbmRvd3MgYW5kIHN0YWNrIHBvaW50ZXJzCi0JICogd2hlbiB0aGUgc3RhY2sgbmVlZHMgaW5zcGVjdGlvbi4KLQkgKi8KLQlzdHJ1Y3QgcmVnX3dpbmRvdwlyZWdfd2luZG93W05TV0lOU107CS8qIGFsaWduIGZvciBsZGQhICovCi0JdW5zaWduZWQgbG9uZwkJcndidWZfc3RrcHRyc1tOU1dJTlNdOwotCXVuc2lnbmVkIGxvbmcJCXdfc2F2ZWQ7Ci0KLQlzdHJ1Y3QgcmVzdGFydF9ibG9jawlyZXN0YXJ0X2Jsb2NrOwotfTsKLQotLyoKLSAqIG1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlCi0gKgotICogcHJlZW1wdF9jb3VudCBuZWVkcyB0byBiZSAxIGluaXRpYWxseSwgdW50aWwgdGhlIHNjaGVkdWxlciBpcyBmdW5jdGlvbmFsLgotICovCi0jZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCQlcCi17CQkJCQkJCVwKLQkudXdpbm1hc2sJPQkwLAkJCVwKLQkudGFzawkJPQkmdHNrLAkJCVwKLQkuZXhlY19kb21haW4JPQkmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAotCS5mbGFncwkJPQkwLAkJCVwKLQkuY3B1CQk9CTAsCQkJXAotCS5wcmVlbXB0X2NvdW50CT0JMSwJCQlcCi0JLnJlc3RhcnRfYmxvY2sJPSB7CQkJCVwKLQkJLmZuCT0JZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCi0JfSwJCQkJCQlcCi19Ci0KLSNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCi0jZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKLQotLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KLXJlZ2lzdGVyIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mb19yZWcgYXNtKCJnNiIpOwotI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkgICAoY3VycmVudF90aHJlYWRfaW5mb19yZWcpCi0KLS8qCi0gKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbgotICovCi0jaWYgUEFHRV9TSElGVCA9PSAxMwotI2RlZmluZSBUSFJFQURfSU5GT19PUkRFUiAgMAotI2Vsc2UgLyogUEFHRV9TSElGVCAqLwotI2RlZmluZSBUSFJFQURfSU5GT19PUkRFUiAgMQorI2lmbmRlZiBfX19BU01fU1BBUkNfVEhSRUFEX0lORk9fSAorI2RlZmluZSBfX19BU01fU1BBUkNfVEhSRUFEX0lORk9fSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3RocmVhZF9pbmZvXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy90aHJlYWRfaW5mb18zMi5oPgogI2VuZGlmCi0KLUJURklYVVBERUZfQ0FMTChzdHJ1Y3QgdGhyZWFkX2luZm8gKiwgYWxsb2NfdGhyZWFkX2luZm8sIHZvaWQpCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgQlRGSVhVUF9DQUxMKGFsbG9jX3RocmVhZF9pbmZvKSgpCi0KLUJURklYVVBERUZfQ0FMTCh2b2lkLCBmcmVlX3RocmVhZF9pbmZvLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKikKLSNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkgQlRGSVhVUF9DQUxMKGZyZWVfdGhyZWFkX2luZm8pKHRpKQotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLS8qCi0gKiBTaXplIG9mIGtlcm5lbCBzdGFjayBmb3IgZWFjaCBwcm9jZXNzLgotICogT2JzZXJ2ZSB0aGUgb3JkZXIgb2YgZ2V0X2ZyZWVfcGFnZXMoKSBpbiBhbGxvY190aHJlYWRfaW5mbygpLgotICogVGhlIHN1bjQgaGFzIDhLIHN0YWNrIHRvbywgYmVjYXVzZSBpdCdzIHNob3J0IG9uIG1lbW9yeSwgYW5kIDE2SyBpcyBhIHdhc3RlLgotICovCi0jZGVmaW5lIFRIUkVBRF9TSVpFCQk4MTkyCi0KLS8qCi0gKiBPZmZzZXRzIGluIHRocmVhZF9pbmZvIHN0cnVjdHVyZSwgdXNlZCBpbiBhc3NlbWJseSBjb2RlCi0gKiBUaGUgIiNkZWZpbmUgUkVHV0lOX1NaIDB4NDAiIHdhcyBhYm9saXNoZWQsIHNvIG5vIG11bHRpcGxpY2F0aW9ucy4KLSAqLwotI2RlZmluZSBUSV9VV0lOTUFTSwkweDAwCS8qIHV3aW5tYXNrICovCi0jZGVmaW5lIFRJX1RBU0sJCTB4MDQKLSNkZWZpbmUgVElfRVhFQ0RPTUFJTgkweDA4CS8qIGV4ZWNfZG9tYWluICovCi0jZGVmaW5lIFRJX0ZMQUdTCTB4MGMKLSNkZWZpbmUgVElfQ1BVCQkweDEwCi0jZGVmaW5lIFRJX1BSRUVNUFQJMHgxNAkvKiBwcmVlbXB0X2NvdW50ICovCi0jZGVmaW5lIFRJX1NPRlRJUlEJMHgxOAkvKiBzb2Z0aXJxX2NvdW50ICovCi0jZGVmaW5lIFRJX0hBUkRJUlEJMHgxYwkvKiBoYXJkaXJxX2NvdW50ICovCi0jZGVmaW5lIFRJX0tTUAkJMHgyMAkvKiBrc3AgKi8KLSNkZWZpbmUgVElfS1BDCQkweDI0CS8qIGtwYyAobGRkJ2VkIHdpdGgga3BjKSAqLwotI2RlZmluZSBUSV9LUFNSCQkweDI4CS8qIGtwc3IgKi8KLSNkZWZpbmUgVElfS1dJTQkJMHgyYwkvKiBrd2ltIChsZGQnZWQgd2l0aCBrcHNyKSAqLwotI2RlZmluZSBUSV9SRUdfV0lORE9XCTB4MzAKLSNkZWZpbmUgVElfUldJTl9TUFRSUwkweDIzMAotI2RlZmluZSBUSV9XX1NBVkVECTB4MjUwCi0vKiAjZGVmaW5lIFRJX1JFU1RBUlRfQkxPQ0sgMHgyNW4gKi8gLyogTm9ib2R5IGNhcmVzICovCi0KLSNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4NDAwMDAwMAotCi0vKgotICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWcgYml0IG51bWJlcnMKLSAqLwotI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCi0vKiBmbGFnIGJpdCAxIGlzIGF2YWlsYWJsZSAqLwotI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLwotI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLwotI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTQJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLwotI2RlZmluZSBUSUZfVVNFREZQVQkJOAkvKiBGUFUgd2FzIHVzZWQgYnkgdGhpcyB0YXNrCi0JCQkJCSAqIHRoaXMgcXVhbnR1bSAoU01QKSAqLwotI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJOQkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcKLQkJCQkJICogVElGX05FRURfUkVTQ0hFRCAqLwotI2RlZmluZSBUSUZfTUVNRElFCQkxMAotCi0vKiBhcyBhYm92ZSwgYnV0IGFzIGJpdCB2YWx1ZXMgKi8KLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKLSNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCi0jZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQotI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMTw8VElGX1JFU1RPUkVfU0lHTUFTSykKLSNkZWZpbmUgX1RJRl9VU0VERlBVCQkoMTw8VElGX1VTRURGUFUpCi0jZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9BU01fVEhSRUFEX0lORk9fSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90aHJlYWRfaW5mb18zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdGhyZWFkX2luZm9fMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWI5ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGhyZWFkX2luZm9fMzIuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIHRocmVhZF9pbmZvLmg6IHNwYXJjIGxvdy1sZXZlbCB0aHJlYWQgaW5mb3JtYXRpb24KKyAqIGFkYXB0ZWQgZnJvbSB0aGUgcHBjIHZlcnNpb24gYnkgUGV0ZSBaYWl0Y2V2LCB3aGljaCB3YXMKKyAqIGFkYXB0ZWQgZnJvbSB0aGUgaTM4NiB2ZXJzaW9uIGJ5IFBhdWwgTWFja2VycmFzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyICBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICogQ29weXJpZ2h0IChjKSAyMDAyICBQZXRlIFphaXRjZXYgKHphaXRjZXZAeWFob28uY29tKQorICogLSBJbmNvcnBvcmF0aW5nIHN1Z2dlc3Rpb25zIG1hZGUgYnkgTGludXMgVG9ydmFsZHMgYW5kIERhdmUgTWlsbGVyCisgKi8KKworI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0FTTV9USFJFQURfSU5GT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogTG93IGxldmVsIHRhc2sgZGF0YS4KKyAqCisgKiBJZiB5b3UgY2hhbmdlIHRoaXMsIGNoYW5nZSB0aGUgVElfKiBvZmZzZXRzIGJlbG93IHRvIG1hdGNoLgorICovCisjZGVmaW5lIE5TV0lOUyA4CitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXVuc2lnbmVkIGxvbmcJCXV3aW5tYXNrOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KKwlpbnQJCQljcHU7CQkvKiBjcHUgd2UncmUgb24gKi8KKwlpbnQJCQlwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLAorCQkJCQkJICAgPDAgPT4gQlVHICovCisJaW50CQkJc29mdGlycV9jb3VudDsKKwlpbnQJCQloYXJkaXJxX2NvdW50OworCisJLyogQ29udGV4dCBzd2l0Y2ggc2F2ZWQga2VybmVsIHN0YXRlLiAqLworCXVuc2lnbmVkIGxvbmcga3NwOwkvKiAuLi4ga3NwIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOyAqLworCXVuc2lnbmVkIGxvbmcga3BjOworCXVuc2lnbmVkIGxvbmcga3BzcjsKKwl1bnNpZ25lZCBsb25nIGt3aW07CisKKwkvKiBBIHBsYWNlIHRvIHN0b3JlIHVzZXIgd2luZG93cyBhbmQgc3RhY2sgcG9pbnRlcnMKKwkgKiB3aGVuIHRoZSBzdGFjayBuZWVkcyBpbnNwZWN0aW9uLgorCSAqLworCXN0cnVjdCByZWdfd2luZG93CXJlZ193aW5kb3dbTlNXSU5TXTsJLyogYWxpZ24gZm9yIGxkZCEgKi8KKwl1bnNpZ25lZCBsb25nCQlyd2J1Zl9zdGtwdHJzW05TV0lOU107CisJdW5zaWduZWQgbG9uZwkJd19zYXZlZDsKKworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrCXJlc3RhcnRfYmxvY2s7Cit9OworCisvKgorICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBwcmVlbXB0X2NvdW50IG5lZWRzIHRvIGJlIDEgaW5pdGlhbGx5LCB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIGZ1bmN0aW9uYWwuCisgKi8KKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJCVwKK3sJCQkJCQkJXAorCS51d2lubWFzawk9CTAsCQkJXAorCS50YXNrCQk9CSZ0c2ssCQkJXAorCS5leGVjX2RvbWFpbgk9CSZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLmZsYWdzCQk9CTAsCQkJXAorCS5jcHUJCT0JMCwJCQlcCisJLnByZWVtcHRfY291bnQJPQkxLAkJCVwKKwkucmVzdGFydF9ibG9jawk9IHsJCQkJXAorCQkuZm4JPQlkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJCVwKK30KKworI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKKyNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQorCisvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLworcmVnaXN0ZXIgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvX3JlZyBhc20oImc2Iik7CisjZGVmaW5lIGN1cnJlbnRfdGhyZWFkX2luZm8oKSAgIChjdXJyZW50X3RocmVhZF9pbmZvX3JlZykKKworLyoKKyAqIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uCisgKi8KKyNpZiBQQUdFX1NISUZUID09IDEzCisjZGVmaW5lIFRIUkVBRF9JTkZPX09SREVSICAwCisjZWxzZSAvKiBQQUdFX1NISUZUICovCisjZGVmaW5lIFRIUkVBRF9JTkZPX09SREVSICAxCisjZW5kaWYKKworQlRGSVhVUERFRl9DQUxMKHN0cnVjdCB0aHJlYWRfaW5mbyAqLCBhbGxvY190aHJlYWRfaW5mbywgdm9pZCkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKSBCVEZJWFVQX0NBTEwoYWxsb2NfdGhyZWFkX2luZm8pKCkKKworQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZyZWVfdGhyZWFkX2luZm8sIHN0cnVjdCB0aHJlYWRfaW5mbyAqKQorI2RlZmluZSBmcmVlX3RocmVhZF9pbmZvKHRpKSBCVEZJWFVQX0NBTEwoZnJlZV90aHJlYWRfaW5mbykodGkpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFNpemUgb2Yga2VybmVsIHN0YWNrIGZvciBlYWNoIHByb2Nlc3MuCisgKiBPYnNlcnZlIHRoZSBvcmRlciBvZiBnZXRfZnJlZV9wYWdlcygpIGluIGFsbG9jX3RocmVhZF9pbmZvKCkuCisgKiBUaGUgc3VuNCBoYXMgOEsgc3RhY2sgdG9vLCBiZWNhdXNlIGl0J3Mgc2hvcnQgb24gbWVtb3J5LCBhbmQgMTZLIGlzIGEgd2FzdGUuCisgKi8KKyNkZWZpbmUgVEhSRUFEX1NJWkUJCTgxOTIKKworLyoKKyAqIE9mZnNldHMgaW4gdGhyZWFkX2luZm8gc3RydWN0dXJlLCB1c2VkIGluIGFzc2VtYmx5IGNvZGUKKyAqIFRoZSAiI2RlZmluZSBSRUdXSU5fU1ogMHg0MCIgd2FzIGFib2xpc2hlZCwgc28gbm8gbXVsdGlwbGljYXRpb25zLgorICovCisjZGVmaW5lIFRJX1VXSU5NQVNLCTB4MDAJLyogdXdpbm1hc2sgKi8KKyNkZWZpbmUgVElfVEFTSwkJMHgwNAorI2RlZmluZSBUSV9FWEVDRE9NQUlOCTB4MDgJLyogZXhlY19kb21haW4gKi8KKyNkZWZpbmUgVElfRkxBR1MJMHgwYworI2RlZmluZSBUSV9DUFUJCTB4MTAKKyNkZWZpbmUgVElfUFJFRU1QVAkweDE0CS8qIHByZWVtcHRfY291bnQgKi8KKyNkZWZpbmUgVElfU09GVElSUQkweDE4CS8qIHNvZnRpcnFfY291bnQgKi8KKyNkZWZpbmUgVElfSEFSRElSUQkweDFjCS8qIGhhcmRpcnFfY291bnQgKi8KKyNkZWZpbmUgVElfS1NQCQkweDIwCS8qIGtzcCAqLworI2RlZmluZSBUSV9LUEMJCTB4MjQJLyoga3BjIChsZGQnZWQgd2l0aCBrcGMpICovCisjZGVmaW5lIFRJX0tQU1IJCTB4MjgJLyoga3BzciAqLworI2RlZmluZSBUSV9LV0lNCQkweDJjCS8qIGt3aW0gKGxkZCdlZCB3aXRoIGtwc3IpICovCisjZGVmaW5lIFRJX1JFR19XSU5ET1cJMHgzMAorI2RlZmluZSBUSV9SV0lOX1NQVFJTCTB4MjMwCisjZGVmaW5lIFRJX1dfU0FWRUQJMHgyNTAKKy8qICNkZWZpbmUgVElfUkVTVEFSVF9CTE9DSyAweDI1biAqLyAvKiBOb2JvZHkgY2FyZXMgKi8KKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwCisKKy8qCisgKiB0aHJlYWQgaW5mb3JtYXRpb24gZmxhZyBiaXQgbnVtYmVycworICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTAJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KKy8qIGZsYWcgYml0IDEgaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNAkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCisjZGVmaW5lIFRJRl9VU0VERlBVCQk4CS8qIEZQVSB3YXMgdXNlZCBieSB0aGlzIHRhc2sKKwkJCQkJICogdGhpcyBxdWFudHVtIChTTVApICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwk5CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZworCQkJCQkgKiBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTEwCisKKy8qIGFzIGFib3ZlLCBidXQgYXMgYml0IHZhbHVlcyAqLworI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKKyNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX1VTRURGUFUJCSgxPDxUSUZfVVNFREZQVSkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90aHJlYWRfaW5mb182NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdGhyZWFkX2luZm9fNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmQyZTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGhyZWFkX2luZm9fNjQuaApAQCAtMCwwICsxLDI3NyBAQAorLyogdGhyZWFkX2luZm8uaDogc3BhcmM2NCBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKi8KKworI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0FTTV9USFJFQURfSU5GT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgTlNXSU5TCQk3CisKKyNkZWZpbmUgVElfRkxBR19CWVRFX0ZBVUxUX0NPREUJCTAKKyNkZWZpbmUgVElfRkxBR19GQVVMVF9DT0RFX1NISUZUCTU2CisjZGVmaW5lIFRJX0ZMQUdfQllURV9XU1RBVEUJCTEKKyNkZWZpbmUgVElfRkxBR19XU1RBVEVfU0hJRlQJCTQ4CisjZGVmaW5lIFRJX0ZMQUdfQllURV9DV1AJCTIKKyNkZWZpbmUgVElfRkxBR19DV1BfU0hJRlQJCTQwCisjZGVmaW5lIFRJX0ZMQUdfQllURV9DVVJSRU5UX0RTCQkzCisjZGVmaW5lIFRJX0ZMQUdfQ1VSUkVOVF9EU19TSElGVAkzMgorI2RlZmluZSBUSV9GTEFHX0JZVEVfRlBERVBUSAkJNAorI2RlZmluZSBUSV9GTEFHX0ZQREVQVEhfU0hJRlQJCTI0CisjZGVmaW5lIFRJX0ZMQUdfQllURV9XU0FWRUQJCTUKKyNkZWZpbmUgVElfRkxBR19XU0FWRURfU0hJRlQJCTE2CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgZXhlY19kb21haW47CisKK3N0cnVjdCB0aHJlYWRfaW5mbyB7CisJLyogRCQgbGluZSAxICovCisJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCV9fdTgJCQlmcHNhdmVkWzddOworCV9fdTgJCQlzdGF0dXM7CisJdW5zaWduZWQgbG9uZwkJa3NwOworCisJLyogRCQgbGluZSAyICovCisJdW5zaWduZWQgbG9uZwkJZmF1bHRfYWRkcmVzczsKKwlzdHJ1Y3QgcHRfcmVncwkJKmtyZWdzOworCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CisJaW50CQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCisJX191OAkJCW5ld19jaGlsZDsKKwlfX3U4CQkJc3lzY2FsbF9ub2Vycm9yOworCV9fdTE2CQkJY3B1OworCisJdW5zaWduZWQgbG9uZwkJKnV0cmFwczsKKworCXN0cnVjdCByZWdfd2luZG93IAlyZWdfd2luZG93W05TV0lOU107CisJdW5zaWduZWQgbG9uZyAJCXJ3YnVmX3N0a3B0cnNbTlNXSU5TXTsKKworCXVuc2lnbmVkIGxvbmcJCWdzcls3XTsKKwl1bnNpZ25lZCBsb25nCQl4ZnNyWzddOworCisJX191NjQJCQlfX3VzZXIgKnVzZXJfY250ZDA7CisJX191NjQJCQlfX3VzZXIgKnVzZXJfY250ZDE7CisJX191NjQJCQlrZXJuZWxfY250ZDAsIGtlcm5lbF9jbnRkMTsKKwlfX3U2NAkJCXBjcl9yZWc7CisKKwlzdHJ1Y3QgcmVzdGFydF9ibG9jawlyZXN0YXJ0X2Jsb2NrOworCisJc3RydWN0IHB0X3JlZ3MJCSprZXJuX3VuYV9yZWdzOworCXVuc2lnbmVkIGludAkJa2Vybl91bmFfaW5zbjsKKworCXVuc2lnbmVkIGxvbmcJCWZwcmVnc1swXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg2NCkpKTsKK307CisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworLyogb2Zmc2V0cyBpbnRvIHRoZSB0aHJlYWRfaW5mbyBzdHJ1Y3QgZm9yIGFzc2VtYmx5IGNvZGUgYWNjZXNzICovCisjZGVmaW5lIFRJX1RBU0sJCTB4MDAwMDAwMDAKKyNkZWZpbmUgVElfRkxBR1MJMHgwMDAwMDAwOAorI2RlZmluZSBUSV9GQVVMVF9DT0RFCShUSV9GTEFHUyArIFRJX0ZMQUdfQllURV9GQVVMVF9DT0RFKQorI2RlZmluZSBUSV9XU1RBVEUJKFRJX0ZMQUdTICsgVElfRkxBR19CWVRFX1dTVEFURSkKKyNkZWZpbmUgVElfQ1dQCQkoVElfRkxBR1MgKyBUSV9GTEFHX0JZVEVfQ1dQKQorI2RlZmluZSBUSV9DVVJSRU5UX0RTCShUSV9GTEFHUyArIFRJX0ZMQUdfQllURV9DVVJSRU5UX0RTKQorI2RlZmluZSBUSV9GUERFUFRICShUSV9GTEFHUyArIFRJX0ZMQUdfQllURV9GUERFUFRIKQorI2RlZmluZSBUSV9XU0FWRUQJKFRJX0ZMQUdTICsgVElfRkxBR19CWVRFX1dTQVZFRCkKKyNkZWZpbmUgVElfRlBTQVZFRAkweDAwMDAwMDEwCisjZGVmaW5lIFRJX0tTUAkJMHgwMDAwMDAxOAorI2RlZmluZSBUSV9GQVVMVF9BRERSCTB4MDAwMDAwMjAKKyNkZWZpbmUgVElfS1JFR1MJMHgwMDAwMDAyOAorI2RlZmluZSBUSV9FWEVDX0RPTUFJTgkweDAwMDAwMDMwCisjZGVmaW5lIFRJX1BSRV9DT1VOVAkweDAwMDAwMDM4CisjZGVmaW5lIFRJX05FV19DSElMRAkweDAwMDAwMDNjCisjZGVmaW5lIFRJX1NZU19OT0VSUk9SCTB4MDAwMDAwM2QKKyNkZWZpbmUgVElfQ1BVCQkweDAwMDAwMDNlCisjZGVmaW5lIFRJX1VUUkFQUwkweDAwMDAwMDQwCisjZGVmaW5lIFRJX1JFR19XSU5ET1cJMHgwMDAwMDA0OAorI2RlZmluZSBUSV9SV0lOX1NQVFJTCTB4MDAwMDAzYzgKKyNkZWZpbmUgVElfR1NSCQkweDAwMDAwNDAwCisjZGVmaW5lIFRJX1hGU1IJCTB4MDAwMDA0MzgKKyNkZWZpbmUgVElfVVNFUl9DTlREMAkweDAwMDAwNDcwCisjZGVmaW5lIFRJX1VTRVJfQ05URDEJMHgwMDAwMDQ3OAorI2RlZmluZSBUSV9LRVJOX0NOVEQwCTB4MDAwMDA0ODAKKyNkZWZpbmUgVElfS0VSTl9DTlREMQkweDAwMDAwNDg4CisjZGVmaW5lIFRJX1BDUgkJMHgwMDAwMDQ5MAorI2RlZmluZSBUSV9SRVNUQVJUX0JMT0NLIDB4MDAwMDA0OTgKKyNkZWZpbmUgVElfS1VOQV9SRUdTCTB4MDAwMDA0YzAKKyNkZWZpbmUgVElfS1VOQV9JTlNOCTB4MDAwMDA0YzgKKyNkZWZpbmUgVElfRlBSRUdTCTB4MDAwMDA1MDAKKworLyogV2UgZW1iZWQgdGhpcyBpbiB0aGUgdXBwZXJtb3N0IGJ5dGUgb2YgdGhyZWFkX2luZm8tPmZsYWdzICovCisjZGVmaW5lIEZBVUxUX0NPREVfV1JJVEUJMHgwMQkvKiBXcml0ZSBhY2Nlc3MsIGltcGxpZXMgRC1UTEIJICAgKi8KKyNkZWZpbmUgRkFVTFRfQ09ERV9EVExCCQkweDAyCS8qIE1pc3MgaGFwcGVuZWQgaW4gRC1UTEIJICAgKi8KKyNkZWZpbmUgRkFVTFRfQ09ERV9JVExCCQkweDA0CS8qIE1pc3MgaGFwcGVuZWQgaW4gSS1UTEIJICAgKi8KKyNkZWZpbmUgRkFVTFRfQ09ERV9XSU5GSVhVUAkweDA4CS8qIE1pc3MgaGFwcGVuZWQgZHVyaW5nIHNwaWxsL2ZpbGwgKi8KKyNkZWZpbmUgRkFVTFRfQ09ERV9CTEtDT01NSVQJMHgxMAkvKiBVc2UgYmxrLWNvbW1pdCBBU0kgaW4gY29weV9wYWdlICovCisKKyNpZiBQQUdFX1NISUZUID09IDEzCisjZGVmaW5lIFRIUkVBRF9TSVpFICgyKlBBR0VfU0laRSkKKyNkZWZpbmUgVEhSRUFEX1NISUZUIChQQUdFX1NISUZUICsgMSkKKyNlbHNlIC8qIFBBR0VfU0hJRlQgPT0gMTMgKi8KKyNkZWZpbmUgVEhSRUFEX1NJWkUgUEFHRV9TSVpFCisjZGVmaW5lIFRIUkVBRF9TSElGVCBQQUdFX1NISUZUCisjZW5kaWYgLyogUEFHRV9TSElGVCA9PSAxMyAqLworCisjZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkweDQwMDAwMDAKKworLyoKKyAqIG1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlCisgKgorICogcHJlZW1wdF9jb3VudCBuZWVkcyB0byBiZSAxIGluaXRpYWxseSwgdW50aWwgdGhlIHNjaGVkdWxlciBpcyBmdW5jdGlvbmFsLgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCQlcCit7CQkJCQkJCVwKKwkudGFzawkJPQkmdHNrLAkJCVwKKwkuZmxhZ3MJCT0gKCh1bnNpZ25lZCBsb25nKUFTSV9QKSA8PCBUSV9GTEFHX0NVUlJFTlRfRFNfU0hJRlQsCVwKKwkuZXhlY19kb21haW4JPQkmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5wcmVlbXB0X2NvdW50CT0JMSwJCQlcCisJLnJlc3RhcnRfYmxvY2sJPSB7CQkJCVwKKwkJLmZuCT0JZG9fbm9fcmVzdGFydF9zeXNjYWxsLAlcCisJfSwJCQkJCQlcCit9CisKKyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KK3JlZ2lzdGVyIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mb19yZWcgYXNtKCJnNiIpOworI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJKGN1cnJlbnRfdGhyZWFkX2luZm9fcmVnKQorCisvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLworI2lmIFBBR0VfU0hJRlQgPT0gMTMKKyNkZWZpbmUgX19USFJFQURfSU5GT19PUkRFUgkxCisjZWxzZSAvKiBQQUdFX1NISUZUID09IDEzICovCisjZGVmaW5lIF9fVEhSRUFEX0lORk9fT1JERVIJMAorI2VuZGlmIC8qIFBBR0VfU0hJRlQgPT0gMTMgKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spCQkJCQlcCisoewkJCQkJCQkJXAorCXN0cnVjdCB0aHJlYWRfaW5mbyAqcmV0OwkJCQlcCisJCQkJCQkJCVwKKwlyZXQgPSAoc3RydWN0IHRocmVhZF9pbmZvICopCQkJCVwKKwkgIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgX19USFJFQURfSU5GT19PUkRFUik7CVwKKwlpZiAocmV0KQkJCQkJCVwKKwkJbWVtc2V0KHJldCwgMCwgUEFHRV9TSVpFPDxfX1RIUkVBRF9JTkZPX09SREVSKTsJXAorCXJldDsJCQkJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgXAorCSgoc3RydWN0IHRocmVhZF9pbmZvICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBfX1RIUkVBRF9JTkZPX09SREVSKSkKKyNlbmRpZgorCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpIFwKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSh0aSksX19USFJFQURfSU5GT19PUkRFUikKKworI2RlZmluZSBfX3RocmVhZF9mbGFnX2J5dGVfcHRyKHRpKQlcCisJKCh1bnNpZ25lZCBjaGFyICopKCYoKHRpKS0+ZmxhZ3MpKSkKKyNkZWZpbmUgX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHIJX190aHJlYWRfZmxhZ19ieXRlX3B0cihjdXJyZW50X3RocmVhZF9pbmZvKCkpCisKKyNkZWZpbmUgZ2V0X3RocmVhZF9mYXVsdF9jb2RlKCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfRkFVTFRfQ09ERV0pCisjZGVmaW5lIHNldF90aHJlYWRfZmF1bHRfY29kZSh2YWwpCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfRkFVTFRfQ09ERV0gPSAodmFsKSkKKyNkZWZpbmUgZ2V0X3RocmVhZF93c3RhdGUoKQkJKF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyW1RJX0ZMQUdfQllURV9XU1RBVEVdKQorI2RlZmluZSBzZXRfdGhyZWFkX3dzdGF0ZSh2YWwpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX1dTVEFURV0gPSAodmFsKSkKKyNkZWZpbmUgZ2V0X3RocmVhZF9jd3AoKQkJKF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyW1RJX0ZMQUdfQllURV9DV1BdKQorI2RlZmluZSBzZXRfdGhyZWFkX2N3cCh2YWwpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0NXUF0gPSAodmFsKSkKKyNkZWZpbmUgZ2V0X3RocmVhZF9jdXJyZW50X2RzKCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfQ1VSUkVOVF9EU10pCisjZGVmaW5lIHNldF90aHJlYWRfY3VycmVudF9kcyh2YWwpCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfQ1VSUkVOVF9EU10gPSAodmFsKSkKKyNkZWZpbmUgZ2V0X3RocmVhZF9mcGRlcHRoKCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfRlBERVBUSF0pCisjZGVmaW5lIHNldF90aHJlYWRfZnBkZXB0aCh2YWwpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0ZQREVQVEhdID0gKHZhbCkpCisjZGVmaW5lIGdldF90aHJlYWRfd3NhdmVkKCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfV1NBVkVEXSkKKyNkZWZpbmUgc2V0X3RocmVhZF93c2F2ZWQodmFsKQkJKF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyW1RJX0ZMQUdfQllURV9XU0FWRURdID0gKHZhbCkpCisKKyNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KKworLyoKKyAqIFRocmVhZCBpbmZvcm1hdGlvbiBmbGFncywgb25seSAxNiBiaXRzIGFyZSBhdmFpbGFibGUgYXMgd2UgZW5jb2RlCisgKiBvdGhlciB2YWx1ZXMgaW50byB0aGUgdXBwZXIgNiBieXRlcy4KKyAqCisgKiBPbiB0cmFwIHJldHVybiB3ZSBuZWVkIHRvIHRlc3Qgc2V2ZXJhbCB2YWx1ZXM6CisgKgorICogdXNlcjoJbmVlZF9yZXNjaGVkLCBub3RpZnlfcmVzdW1lLCBzaWdwZW5kaW5nLCB3c2F2ZWQsIHBlcmZjdHIKKyAqIGtlcm5lbDoJZnBkZXB0aAorICoKKyAqIFNvIHRvIGNoZWNrIGZvciB3b3JrIGluIHRoZSBrZXJuZWwgY2FzZSB3ZSBzaW1wbHkgbG9hZCB0aGUgZnBkZXB0aAorICogYnl0ZSBvdXQgb2YgdGhlIGZsYWdzIGFuZCB0ZXN0IGl0LiAgRm9yIHRoZSB1c2VyIGNhc2Ugd2UgZW5jb2RlIHRoZQorICogbG93ZXIgMyBieXRlcyBvZiBmbGFncyBhcyBmb2xsb3dzOgorICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJfCB3c2F2ZWQgfCBmbGFncyBieXRlIDEgfCBmbGFncyBieXRlIDIgfAorICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhpcyBvcHRpbWl6ZXMgdGhlIHVzZXIgdGVzdCBpbnRvOgorICoJbGR4CQlbJWc2ICsgVElfRkxBR1NdLCBSRUcxCisgKglzZXRoaQkJJWhpKF9USUZfVVNFUl9XT1JLX01BU0spLCBSRUcyCisgKglvcgkJUkVHMiwgJWxvKF9USUZfVVNFUl9XT1JLX01BU0spLCBSRUcyCisgKglhbmRjYwkJUkVHMSwgUkVHMiwgJWcwCisgKgliZSxwdAkJbm9fd29ya190b19kbworICoJIG5vcAorICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTAJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KKy8qIGZsYWdzIGJpdCAxIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLworI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfUEVSRkNUUgkJNAkvKiBwZXJmb3JtYW5jZSBjb3VudGVycyBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX1VOQUxJR05FRAkJNQkvKiBhbGxvd2VkIHRvIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcyAqLworLyogZmxhZyBiaXQgNiBpcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVElGXzMyQklUCQk3CS8qIDMyLWJpdCBiaW5hcnkgKi8KKy8qIGZsYWcgYml0IDggaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIFRJRl9TRUNDT01QCQk5CS8qIHNlY3VyZSBjb21wdXRpbmcgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJMTAJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KKy8qIGZsYWcgYml0IDExIGlzIGF2YWlsYWJsZSAqLworLyogTk9URTogVGhyZWFkIGZsYWdzID49IDEyIHNob3VsZCBiZSBvbmVzIHdlIGhhdmUgbm8gaW50ZXJlc3QKKyAqICAgICAgIGluIHVzaW5nIGluIGFzc2VtYmx5LCBlbHNlIHdlIGNhbid0IHVzZSB0aGUgbWFzayBhcworICogICAgICAgYW4gaW1tZWRpYXRlIHZhbHVlIGluIGluc3RydWN0aW9ucyBzdWNoIGFzIGFuZGNjLgorICovCisjZGVmaW5lIFRJRl9BQklfUEVORElORwkJMTIKKyNkZWZpbmUgVElGX01FTURJRQkJMTMKKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE0CisKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKKyNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX1BFUkZDVFIJCSgxPDxUSUZfUEVSRkNUUikKKyNkZWZpbmUgX1RJRl9VTkFMSUdORUQJCSgxPDxUSUZfVU5BTElHTkVEKQorI2RlZmluZSBfVElGXzMyQklUCQkoMTw8VElGXzMyQklUKQorI2RlZmluZSBfVElGX1NFQ0NPTVAJCSgxPDxUSUZfU0VDQ09NUCkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgX1RJRl9BQklfUEVORElORwkoMTw8VElGX0FCSV9QRU5ESU5HKQorI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisKKyNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSwkoKDB4ZmYgPDwgVElfRkxBR19XU0FWRURfU0hJRlQpIHwgXAorCQkJCSAoX1RJRl9TSUdQRU5ESU5HIHwgXAorCQkJCSAgX1RJRl9ORUVEX1JFU0NIRUQgfCBfVElGX1BFUkZDVFIpKQorCisvKgorICogVGhyZWFkLXN5bmNocm9ub3VzIHN0YXR1cy4KKyAqCisgKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBmbGFncyBpbiB0aGF0IG5vYm9keSBlbHNlCisgKiBldmVyIHRvdWNoZXMgb3VyIHRocmVhZC1zeW5jaHJvbm91cyBzdGF0dXMsIHNvIHdlIGRvbid0CisgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IGF0b21pYyBhY2Nlc3Nlcy4KKyAqCisgKiBOb3RlIHRoYXQgdGhlcmUgYXJlIG9ubHkgOCBiaXRzIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBUU19SRVNUT1JFX1NJR01BU0sJMHgwMDAxCS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgSEFWRV9TRVRfUkVTVE9SRV9TSUdNQVNLCTEKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcmVzdG9yZV9zaWdtYXNrKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwl0aS0+c3RhdHVzIHw9IFRTX1JFU1RPUkVfU0lHTUFTSzsKKwlzZXRfYml0KFRJRl9TSUdQRU5ESU5HLCAmdGktPmZsYWdzKTsKK30KKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWVyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90aW1lci5oCmluZGV4IGQ5MDk1NjUuLjQ3NWJhYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGltZXIuaApAQCAtMSwxMDkgKzEsOCBAQAotLyoKLSAqIHRpbWVyLmg6ICBEZWZpbml0aW9ucyBmb3IgdGhlIHRpbWVyIGNoaXBzIG9uIHRoZSBTcGFyYy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0KLQotI2lmbmRlZiBfU1BBUkNfVElNRVJfSAotI2RlZmluZSBfU1BBUkNfVElNRVJfSAotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPiAgLyogRm9yIFNVTjRNX05DUFVTICovCi0jaW5jbHVkZSA8YXNtL3N1bjRwYWRkci5oPgotI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+Ci0KLS8qIFRpbWVyIHN0cnVjdHVyZXMuIFRoZSBpbnRlcnJ1cHQgdGltZXIgaGFzIHR3byBwcm9wZXJ0aWVzIHdoaWNoCi0gKiBhcmUgdGhlIGNvdW50ZXIgKHdoaWNoIGlzIGhhbmRsZWQgaW4gZG9fdGltZXIgaW4gc2NoZWQuYykgYW5kIHRoZSBsaW1pdC4KLSAqIFRoaXMgbGltaXQgaXMgd2hlcmUgdGhlIHRpbWVyJ3MgY291bnRlciAnd3JhcHMnIGFyb3VuZC4gT2RkbHkgZW5vdWdoLAotICogdGhlIHN1bjRjIHRpbWVyIHdoZW4gaXQgaGl0cyB0aGUgbGltaXQgd3JhcHMgYmFjayB0byAxIGFuZCBub3QgemVybwotICogdGh1cyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2YWx1ZSBhdCB3aGljaCBpdCB3aWxsIGZpcmUgYSBtaWNyb3NlY29uZCB5b3UKLSAqIG11c3QgYWRqdXN0IGJ5IG9uZS4gIFRoYW5rcyBTVU4gZm9yIGRlc2lnbmluZyBzdWNoIGdyZWF0IGhhcmR3YXJlIDsoCi0gKi8KLQotLyogTm90ZSB0aGF0IEkgYW0gb25seSBnb2luZyB0byB1c2UgdGhlIHRpbWVyIHRoYXQgaW50ZXJydXB0cyBhdAotICogU3BhcmMgSVJRIDEwLiAgVGhlcmUgaXMgYW5vdGhlciBvbmUgYXZhaWxhYmxlIHRoYXQgY2FuIGZpcmUgYXQKLSAqIElSUSAxNC4gQ3VycmVudGx5IGl0IGlzIGxlZnQgdW50b3VjaGVkLCB3ZSBrZWVwIHRoZSBQUk9NJ3MgbGltaXQKLSAqIHJlZ2lzdGVyIHZhbHVlIGFuZCBsZXQgdGhlIHByb20gdGFrZSB0aGVzZSBpbnRlcnJ1cHRzLiAgVGhpcyBhbGxvd3MKLSAqIEwxLUEgdG8gd29yay4KLSAqLwotCi1zdHJ1Y3Qgc3VuNGNfdGltZXJfaW5mbyB7Ci0gIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgY3VyX2NvdW50MTA7Ci0gIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgdGltZXJfbGltaXQxMDsKLSAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBjdXJfY291bnQxNDsKLSAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCB0aW1lcl9saW1pdDE0OwotfTsKLQotI2RlZmluZSBTVU40Q19USU1FUl9QSFlTQUREUiAgIDB4ZjMwMDAwMDAKLSNpZmRlZiBDT05GSUdfU1VONAotI2RlZmluZSBTVU5fVElNRVJfUEhZU0FERFIgU1VONF8zMDBfVElNRVJfUEhZU0FERFIKKyNpZm5kZWYgX19fQVNNX1NQQVJDX1RJTUVSX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1RJTUVSX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy90aW1lcl82NC5oPgogI2Vsc2UKLSNkZWZpbmUgU1VOX1RJTUVSX1BIWVNBRERSIFNVTjRDX1RJTUVSX1BIWVNBRERSCisjaW5jbHVkZSA8YXNtLXNwYXJjL3RpbWVyXzMyLmg+CiAjZW5kaWYKLQotLyogQSBzdW40bSBoYXMgdHdvIGJsb2NrcyBvZiByZWdpc3RlcnMgd2hpY2ggYXJlIHByb2JhYmx5IG9mIHRoZSBzYW1lCi0gKiBzdHJ1Y3R1cmUuIExTSSBMb2dpYydzIEw2NDg1MSBpcyB0b2xkIHRvIF9kZWNyZW1lbnRfIGZyb20gdGhlIGxpbWl0Ci0gKiB2YWx1ZS4gQXVyb3JhIGJlaGF2ZXMgc2ltaWxhcmx5IGJ1dCBpdHMgbGltaXQgdmFsdWUgaXMgY29tcGFjdGVkIGluCi0gKiBvdGhlciBmYXNoaW9uIChpdCdzIHdpZGVyKS4gRG9jdW1lbnRlZCBmaWVsZHMgYXJlIGRlZmluZWQgaGVyZS4KLSAqLwotCi0vKiBBcyB3aXRoIHRoZSBpbnRlcnJ1cHQgcmVnaXN0ZXIsIHdlIGhhdmUgdHdvIGNsYXNzZXMgb2YgdGltZXIgcmVnaXN0ZXJzCi0gKiB3aGljaCBhcmUgcGVyLWNwdSBhbmQgbWFzdGVyLiAgUGVyLWNwdSB0aW1lcnMgb25seSBoaXQgdGhhdCBjcHUgYW5kIGFyZQotICogb25seSBsZXZlbCAxNCB0aWNrcywgbWFzdGVyIHRpbWVyIGhpdHMgYWxsIGNwdXMgYW5kIGlzIGxldmVsIDEwLgotICovCi0KLSNkZWZpbmUgU1VONE1fUFJNX0NOVF9MICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgU1VONE1fUFJNX0NOVF9MVkFMVUUgIDB4N0ZGRkZDMDAKLQotc3RydWN0IHN1bjRtX3RpbWVyX3BlcmNwdV9pbmZvIHsKLSAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBsMTRfdGltZXJfbGltaXQ7ICAgIC8qIEluaXRpYWwgdmFsdWUgaXMgMHgwMDljNDAwMCAqLwotICBfX3ZvbGF0aWxlX18gdW5zaWduZWQgaW50IGwxNF9jdXJfY291bnQ7Ci0KLSAgLyogVGhpcyByZWdpc3RlciBhcHBlYXJzIHRvIGJlIHdyaXRlIG9ubHkgYW5kL29yIGluYWNjZXNzaWJsZQotICAgKiBvbiBVbmktUHJvY2Vzc29yIHN1bjRtIG1hY2hpbmVzLgotICAgKi8KLSAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBsMTRfbGltaXRfbm9jbGVhcjsgIC8qIERhdGEgYWNjZXNzIGVycm9yIGlzIGhlcmUgKi8KLQotICBfX3ZvbGF0aWxlX18gdW5zaWduZWQgaW50IGNudHJsOyAgICAgICAgICAgIC8qID0xIGFmdGVyIFBPU1Qgb24gQXVyb3JhICovCi0gIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBjaGFyIHNwYWNlW1BBR0VfU0laRSAtIDE2XTsKLX07Ci0KLXN0cnVjdCBzdW40bV90aW1lcl9yZWdzIHsKLQlzdHJ1Y3Qgc3VuNG1fdGltZXJfcGVyY3B1X2luZm8gY3B1X3RpbWVyc1tTVU40TV9OQ1BVU107Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IGwxMF90aW1lcl9saW1pdDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDEwX2N1cl9jb3VudDsKLQotCS8qIEFnYWluLCB0aGlzIGFwcGVhcnMgdG8gYmUgd3JpdGUgb25seSBhbmQvb3IgaW5hY2Nlc3NpYmxlCi0JICogb24gdW5pLXByb2Nlc3NvciBzdW40bSBtYWNoaW5lcy4KLQkgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDEwX2xpbWl0X25vY2xlYXI7Ci0KLQkvKiBUaGlzIHJlZ2lzdGVyIHRvbywgaXQgbXVzdCBiZSBtYWdpYy4gKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZm9vYmFyOwotCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IGNmZzsgICAgIC8qIGVxdWFscyB6ZXJvIGF0IGJvb3QgdGltZS4uLiAqLwotfTsKLQotZXh0ZXJuIHN0cnVjdCBzdW40bV90aW1lcl9yZWdzICpzdW40bV90aW1lcnM7Ci0KLSNkZWZpbmUgU1VONERfUFJNX0NOVF9MICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgU1VONERfUFJNX0NOVF9MVkFMVUUgIDB4N0ZGRkZDMDAKLQotc3RydWN0IHN1bjRkX3RpbWVyX3JlZ3MgewotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsMTBfdGltZXJfbGltaXQ7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IGwxMF9jdXJfY291bnR4OwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsMTBfbGltaXRfbm9jbGVhcjsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY3RybDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDEwX2N1cl9jb3VudDsKLX07Ci0KLWV4dGVybiBzdHJ1Y3Qgc3VuNGRfdGltZXJfcmVncyAqc3VuNGRfdGltZXJzOwotCi1leHRlcm4gX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCAqbWFzdGVyX2wxMF9jb3VudGVyOwotZXh0ZXJuIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKm1hc3Rlcl9sMTBfbGltaXQ7Ci0KLS8qIEZJWE1FOiBNYWtlIGRvX1tnc11ldHRpbWVvZmRheSBidGZpeHVwIGNhbGxzICovCi1CVEZJWFVQREVGX0NBTEwoaW50LCBidXNfZG9fc2V0dGltZW9mZGF5LCBzdHJ1Y3QgdGltZXNwZWMgKnR2KQotI2RlZmluZSBidXNfZG9fc2V0dGltZW9mZGF5KHR2KSBCVEZJWFVQX0NBTEwoYnVzX2RvX3NldHRpbWVvZmRheSkodHYpCi0KLSNlbmRpZiAvKiAhKF9TUEFSQ19USU1FUl9IKSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90aW1lcl8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdGltZXJfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjFlNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGltZXJfMzIuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIHRpbWVyLmg6ICBEZWZpbml0aW9ucyBmb3IgdGhlIHRpbWVyIGNoaXBzIG9uIHRoZSBTcGFyYy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKworI2lmbmRlZiBfU1BBUkNfVElNRVJfSAorI2RlZmluZSBfU1BBUkNfVElNRVJfSAorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPiAgLyogRm9yIFNVTjRNX05DUFVTICovCisjaW5jbHVkZSA8YXNtL3N1bjRwYWRkci5oPgorI2luY2x1ZGUgPGFzbS9idGZpeHVwLmg+CisKKy8qIFRpbWVyIHN0cnVjdHVyZXMuIFRoZSBpbnRlcnJ1cHQgdGltZXIgaGFzIHR3byBwcm9wZXJ0aWVzIHdoaWNoCisgKiBhcmUgdGhlIGNvdW50ZXIgKHdoaWNoIGlzIGhhbmRsZWQgaW4gZG9fdGltZXIgaW4gc2NoZWQuYykgYW5kIHRoZSBsaW1pdC4KKyAqIFRoaXMgbGltaXQgaXMgd2hlcmUgdGhlIHRpbWVyJ3MgY291bnRlciAnd3JhcHMnIGFyb3VuZC4gT2RkbHkgZW5vdWdoLAorICogdGhlIHN1bjRjIHRpbWVyIHdoZW4gaXQgaGl0cyB0aGUgbGltaXQgd3JhcHMgYmFjayB0byAxIGFuZCBub3QgemVybworICogdGh1cyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2YWx1ZSBhdCB3aGljaCBpdCB3aWxsIGZpcmUgYSBtaWNyb3NlY29uZCB5b3UKKyAqIG11c3QgYWRqdXN0IGJ5IG9uZS4gIFRoYW5rcyBTVU4gZm9yIGRlc2lnbmluZyBzdWNoIGdyZWF0IGhhcmR3YXJlIDsoCisgKi8KKworLyogTm90ZSB0aGF0IEkgYW0gb25seSBnb2luZyB0byB1c2UgdGhlIHRpbWVyIHRoYXQgaW50ZXJydXB0cyBhdAorICogU3BhcmMgSVJRIDEwLiAgVGhlcmUgaXMgYW5vdGhlciBvbmUgYXZhaWxhYmxlIHRoYXQgY2FuIGZpcmUgYXQKKyAqIElSUSAxNC4gQ3VycmVudGx5IGl0IGlzIGxlZnQgdW50b3VjaGVkLCB3ZSBrZWVwIHRoZSBQUk9NJ3MgbGltaXQKKyAqIHJlZ2lzdGVyIHZhbHVlIGFuZCBsZXQgdGhlIHByb20gdGFrZSB0aGVzZSBpbnRlcnJ1cHRzLiAgVGhpcyBhbGxvd3MKKyAqIEwxLUEgdG8gd29yay4KKyAqLworCitzdHJ1Y3Qgc3VuNGNfdGltZXJfaW5mbyB7CisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgY3VyX2NvdW50MTA7CisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgdGltZXJfbGltaXQxMDsKKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBjdXJfY291bnQxNDsKKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCB0aW1lcl9saW1pdDE0OworfTsKKworI2RlZmluZSBTVU40Q19USU1FUl9QSFlTQUREUiAgIDB4ZjMwMDAwMDAKKyNpZmRlZiBDT05GSUdfU1VONAorI2RlZmluZSBTVU5fVElNRVJfUEhZU0FERFIgU1VONF8zMDBfVElNRVJfUEhZU0FERFIKKyNlbHNlCisjZGVmaW5lIFNVTl9USU1FUl9QSFlTQUREUiBTVU40Q19USU1FUl9QSFlTQUREUgorI2VuZGlmCisKKy8qIEEgc3VuNG0gaGFzIHR3byBibG9ja3Mgb2YgcmVnaXN0ZXJzIHdoaWNoIGFyZSBwcm9iYWJseSBvZiB0aGUgc2FtZQorICogc3RydWN0dXJlLiBMU0kgTG9naWMncyBMNjQ4NTEgaXMgdG9sZCB0byBfZGVjcmVtZW50XyBmcm9tIHRoZSBsaW1pdAorICogdmFsdWUuIEF1cm9yYSBiZWhhdmVzIHNpbWlsYXJseSBidXQgaXRzIGxpbWl0IHZhbHVlIGlzIGNvbXBhY3RlZCBpbgorICogb3RoZXIgZmFzaGlvbiAoaXQncyB3aWRlcikuIERvY3VtZW50ZWQgZmllbGRzIGFyZSBkZWZpbmVkIGhlcmUuCisgKi8KKworLyogQXMgd2l0aCB0aGUgaW50ZXJydXB0IHJlZ2lzdGVyLCB3ZSBoYXZlIHR3byBjbGFzc2VzIG9mIHRpbWVyIHJlZ2lzdGVycworICogd2hpY2ggYXJlIHBlci1jcHUgYW5kIG1hc3Rlci4gIFBlci1jcHUgdGltZXJzIG9ubHkgaGl0IHRoYXQgY3B1IGFuZCBhcmUKKyAqIG9ubHkgbGV2ZWwgMTQgdGlja3MsIG1hc3RlciB0aW1lciBoaXRzIGFsbCBjcHVzIGFuZCBpcyBsZXZlbCAxMC4KKyAqLworCisjZGVmaW5lIFNVTjRNX1BSTV9DTlRfTCAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNVTjRNX1BSTV9DTlRfTFZBTFVFICAweDdGRkZGQzAwCisKK3N0cnVjdCBzdW40bV90aW1lcl9wZXJjcHVfaW5mbyB7CisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgbDE0X3RpbWVyX2xpbWl0OyAgICAvKiBJbml0aWFsIHZhbHVlIGlzIDB4MDA5YzQwMDAgKi8KKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBsMTRfY3VyX2NvdW50OworCisgIC8qIFRoaXMgcmVnaXN0ZXIgYXBwZWFycyB0byBiZSB3cml0ZSBvbmx5IGFuZC9vciBpbmFjY2Vzc2libGUKKyAgICogb24gVW5pLVByb2Nlc3NvciBzdW40bSBtYWNoaW5lcy4KKyAgICovCisgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgbDE0X2xpbWl0X25vY2xlYXI7ICAvKiBEYXRhIGFjY2VzcyBlcnJvciBpcyBoZXJlICovCisKKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCBjbnRybDsgICAgICAgICAgICAvKiA9MSBhZnRlciBQT1NUIG9uIEF1cm9yYSAqLworICBfX3ZvbGF0aWxlX18gdW5zaWduZWQgY2hhciBzcGFjZVtQQUdFX1NJWkUgLSAxNl07Cit9OworCitzdHJ1Y3Qgc3VuNG1fdGltZXJfcmVncyB7CisJc3RydWN0IHN1bjRtX3RpbWVyX3BlcmNwdV9pbmZvIGNwdV90aW1lcnNbU1VONE1fTkNQVVNdOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsMTBfdGltZXJfbGltaXQ7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGwxMF9jdXJfY291bnQ7CisKKwkvKiBBZ2FpbiwgdGhpcyBhcHBlYXJzIHRvIGJlIHdyaXRlIG9ubHkgYW5kL29yIGluYWNjZXNzaWJsZQorCSAqIG9uIHVuaS1wcm9jZXNzb3Igc3VuNG0gbWFjaGluZXMuCisJICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGwxMF9saW1pdF9ub2NsZWFyOworCisJLyogVGhpcyByZWdpc3RlciB0b28sIGl0IG11c3QgYmUgbWFnaWMuICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGZvb2JhcjsKKworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBjZmc7ICAgICAvKiBlcXVhbHMgemVybyBhdCBib290IHRpbWUuLi4gKi8KK307CisKKyNkZWZpbmUgU1VONERfUFJNX0NOVF9MICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgU1VONERfUFJNX0NOVF9MVkFMVUUgIDB4N0ZGRkZDMDAKKworc3RydWN0IHN1bjRkX3RpbWVyX3JlZ3MgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsMTBfdGltZXJfbGltaXQ7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGwxMF9jdXJfY291bnR4OworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsMTBfbGltaXRfbm9jbGVhcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY3RybDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDEwX2N1cl9jb3VudDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc3VuNGRfdGltZXJfcmVncyAqc3VuNGRfdGltZXJzOworCitleHRlcm4gX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCAqbWFzdGVyX2wxMF9jb3VudGVyOworZXh0ZXJuIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKm1hc3Rlcl9sMTBfbGltaXQ7CisKKy8qIEZJWE1FOiBNYWtlIGRvX1tnc11ldHRpbWVvZmRheSBidGZpeHVwIGNhbGxzICovCitCVEZJWFVQREVGX0NBTEwoaW50LCBidXNfZG9fc2V0dGltZW9mZGF5LCBzdHJ1Y3QgdGltZXNwZWMgKnR2KQorI2RlZmluZSBidXNfZG9fc2V0dGltZW9mZGF5KHR2KSBCVEZJWFVQX0NBTEwoYnVzX2RvX3NldHRpbWVvZmRheSkodHYpCisKKyNlbmRpZiAvKiAhKF9TUEFSQ19USU1FUl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGltZXJfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWVyXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3NzlmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWVyXzY0LmgKQEAgLTAsMCArMSwzMCBAQAorLyogdGltZXIuaDogU3lzdGVtIHRpbWVyIGRlZmluaXRpb25zIGZvciBzdW41LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMjAwOCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9USU1FUl9ICisjZGVmaW5lIF9TUEFSQzY0X1RJTUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitzdHJ1Y3Qgc3BhcmM2NF90aWNrX29wcyB7CisJdW5zaWduZWQgbG9uZyAoKmdldF90aWNrKSh2b2lkKTsKKwlpbnQgKCphZGRfY29tcGFyZSkodW5zaWduZWQgbG9uZyk7CisJdW5zaWduZWQgbG9uZyBzb2Z0aW50X21hc2s7CisJdm9pZCAoKmRpc2FibGVfaXJxKSh2b2lkKTsKKworCXZvaWQgKCppbml0X3RpY2spKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgKCphZGRfdGljaykodW5zaWduZWQgbG9uZyk7CisKKwljaGFyICpuYW1lOworfTsKKworZXh0ZXJuIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzICp0aWNrX29wczsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3BhcmM2NF9nZXRfY2xvY2tfdGljayh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIF9fZGV2aW5pdCBzZXR1cF9zcGFyYzY0X3RpbWVyKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qIF9TUEFSQzY0X1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1zcGFyYy90aW1leC5oCmluZGV4IDcxYjQ1YzkuLjAxZDlmMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGltZXguaApAQCAtMSwxNSArMSw4IEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tc3BhcmMvdGltZXguaAotICoKLSAqIHNwYXJjIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucwotICovCi0jaWZuZGVmIF9BU01zcGFyY19USU1FWF9ICi0jZGVmaW5lIF9BU01zcGFyY19USU1FWF9ICi0KLSNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLwotCi0vKiBYWFggTWF5YmUgZG8gc29tZXRoaW5nIGJldHRlciBhdCBzb21lIHBvaW50Li4uIC1EYXZlTSAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OwotI2RlZmluZSBnZXRfY3ljbGVzKCkJKDApCi0KKyNpZm5kZWYgX19fQVNNX1NQQVJDX1RJTUVYX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1RJTUVYX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy90aW1leF82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tc3BhcmMvdGltZXhfMzIuaD4KKyNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90aW1leF8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdGltZXhfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWI0NWM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGltZXhfMzIuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tc3BhcmMvdGltZXguaAorICoKKyAqIHNwYXJjIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucworICovCisjaWZuZGVmIF9BU01zcGFyY19USU1FWF9ICisjZGVmaW5lIF9BU01zcGFyY19USU1FWF9ICisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLworCisvKiBYWFggTWF5YmUgZG8gc29tZXRoaW5nIGJldHRlciBhdCBzb21lIHBvaW50Li4uIC1EYXZlTSAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OworI2RlZmluZSBnZXRfY3ljbGVzKCkJKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGltZXhfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWV4XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyMjUzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWV4XzY0LmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXguaAorICoKKyAqIHNwYXJjNjQgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpZm5kZWYgX0FTTXNwYXJjNjRfVElNRVhfSAorI2RlZmluZSBfQVNNc3BhcmM2NF9USU1FWF9ICisKKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCisKKy8qIEdldHRpbmcgb24gdGhlIGN5Y2xlIGNvdW50ZXIgb24gc3BhcmM2NC4gKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKyNkZWZpbmUgZ2V0X2N5Y2xlcygpCXRpY2tfb3BzLT5nZXRfdGljaygpCisKKyNkZWZpbmUgQVJDSF9IQVNfUkVBRF9DVVJSRU5UX1RJTUVSCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGxiLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90bGIuaAppbmRleCA2ZDAyZDFjLi5hODIxMDU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy90bGIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90bGIuaApAQCAtMSwyNCArMSw4IEBACi0jaWZuZGVmIF9TUEFSQ19UTEJfSAotI2RlZmluZSBfU1BBUkNfVExCX0gKLQotI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBcCi1kbyB7CQkJCQkJCQlcCi0JZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpIFwKLWRvIHsJCQkJCQkJCVwKLQlmbHVzaF90bGJfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykgXAotCWRvIHsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSB0bGJfZmx1c2godGxiKSBcCi1kbyB7CQkJCQkJCQlcCi0JZmx1c2hfdGxiX21tKCh0bGIpLT5tbSk7CQkJCVwKLX0gd2hpbGUgKDApCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KLQotI2VuZGlmIC8qIF9TUEFSQ19UTEJfSCAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfVExCX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1RMQl9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvdGxiXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy90bGJfMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90bGJfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYl8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMDJkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90bGJfMzIuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9TUEFSQ19UTEJfSAorI2RlZmluZSBfU1BBUkNfVExCX0gKKworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBcCitkbyB7CQkJCQkJCQlcCisJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpIFwKK2RvIHsJCQkJCQkJCVwKKwlmbHVzaF90bGJfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykgXAorCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSB0bGJfZmx1c2godGxiKSBcCitkbyB7CQkJCQkJCQlcCisJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKworI2VuZGlmIC8qIF9TUEFSQ19UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGxiXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy90bGJfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzgxY2RlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGxiXzY0LmgKQEAgLTAsMCArMSwxMTEgQEAKKyNpZm5kZWYgX1NQQVJDNjRfVExCX0gKKyNkZWZpbmUgX1NQQVJDNjRfVExCX0gKKworI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKworI2RlZmluZSBUTEJfQkFUQ0hfTlIJMTkyCisKKy8qCisgKiBGb3IgVVAgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBUTEIgZmx1c2gKKyAqIGFuZCBwYWdlIGZyZWUgb3JkZXIgc28gbXVjaC4uCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCisgICNkZWZpbmUgRlJFRV9QVEVfTlIJNTA2CisgICNkZWZpbmUgdGxiX2Zhc3RfbW9kZShicCkgKChicCktPnBhZ2VzX25yID09IH4wVSkKKyNlbHNlCisgICNkZWZpbmUgRlJFRV9QVEVfTlIJMQorICAjZGVmaW5lIHRsYl9mYXN0X21vZGUoYnApIDEKKyNlbmRpZgorCitzdHJ1Y3QgbW11X2dhdGhlciB7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJdW5zaWduZWQgaW50IHBhZ2VzX25yOworCXVuc2lnbmVkIGludCBuZWVkX2ZsdXNoOworCXVuc2lnbmVkIGludCBmdWxsbW07CisJdW5zaWduZWQgaW50IHRsYl9ucjsKKwl1bnNpZ25lZCBsb25nIHZhZGRyc1tUTEJfQkFUQ0hfTlJdOworCXN0cnVjdCBwYWdlICpwYWdlc1tGUkVFX1BURV9OUl07Cit9OworCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICosCisJCQkJICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICopOworI2VuZGlmCisKK2V4dGVybiB2b2lkIF9fZmx1c2hfdGxiX3BlbmRpbmcodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbXVfZ2F0aGVyICp0bGJfZ2F0aGVyX21tdShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGZ1bGxfbW1fZmx1c2gpCit7CisJc3RydWN0IG1tdV9nYXRoZXIgKm1wID0gJmdldF9jcHVfdmFyKG1tdV9nYXRoZXJzKTsKKworCUJVR19PTihtcC0+dGxiX25yKTsKKworCW1wLT5tbSA9IG1tOworCW1wLT5wYWdlc19uciA9IG51bV9vbmxpbmVfY3B1cygpID4gMSA/IDBVIDogfjBVOworCW1wLT5mdWxsbW0gPSBmdWxsX21tX2ZsdXNoOworCisJcmV0dXJuIG1wOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZmx1c2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICptcCkKK3sKKwlpZiAobXAtPm5lZWRfZmx1c2gpIHsKKwkJZnJlZV9wYWdlc19hbmRfc3dhcF9jYWNoZShtcC0+cGFnZXMsIG1wLT5wYWdlc19ucik7CisJCW1wLT5wYWdlc19uciA9IDA7CisJCW1wLT5uZWVkX2ZsdXNoID0gMDsKKwl9CisKK30KKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2RlZmluZSBkb19mbHVzaF90bGJfbW0obW0pIHNtcF9mbHVzaF90bGJfbW0obW0pCisjZWxzZQorI2RlZmluZSBkb19mbHVzaF90bGJfbW0obW0pIF9fZmx1c2hfdGxiX21tKENUWF9IV0JJVFMobW0tPmNvbnRleHQpLCBTRUNPTkRBUllfQ09OVEVYVCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZpbmlzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKm1wLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl0bGJfZmx1c2hfbW11KG1wKTsKKworCWlmIChtcC0+ZnVsbG1tKQorCQltcC0+ZnVsbG1tID0gMDsKKwllbHNlCisJCWZsdXNoX3RsYl9wZW5kaW5nKCk7CisKKwkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KKwljaGVja19wZ3RfY2FjaGUoKTsKKworCXB1dF9jcHVfdmFyKG1tdV9nYXRoZXJzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcGFnZShzdHJ1Y3QgbW11X2dhdGhlciAqbXAsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICh0bGJfZmFzdF9tb2RlKG1wKSkgeworCQlmcmVlX3BhZ2VfYW5kX3N3YXBfY2FjaGUocGFnZSk7CisJCXJldHVybjsKKwl9CisJbXAtPm5lZWRfZmx1c2ggPSAxOworCW1wLT5wYWdlc1ttcC0+cGFnZXNfbnIrK10gPSBwYWdlOworCWlmIChtcC0+cGFnZXNfbnIgPj0gRlJFRV9QVEVfTlIpCisJCXRsYl9mbHVzaF9tbXUobXApOworfQorCisjZGVmaW5lIHRsYl9yZW1vdmVfdGxiX2VudHJ5KG1wLHB0ZXAsYWRkcikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdGVfZnJlZV90bGIobXAsIHB0ZXBhZ2UpIHB0ZV9mcmVlKChtcCktPm1tLCBwdGVwYWdlKQorI2RlZmluZSBwbWRfZnJlZV90bGIobXAsIHBtZHApIHBtZF9mcmVlKChtcCktPm1tLCBwbWRwKQorI2RlZmluZSBwdWRfZnJlZV90bGIodGxiLHB1ZHApIF9fcHVkX2ZyZWVfdGxiKHRsYixwdWRwKQorCisjZGVmaW5lIHRsYl9taWdyYXRlX2ZpbmlzaChtbSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfU1BBUkM2NF9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoLmgKaW5kZXggYjk1N2UyOS4uNmU2YmMxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90bGJmbHVzaC5oCkBAIC0xLDYwICsxLDggQEAKLSNpZm5kZWYgX1NQQVJDX1RMQkZMVVNIX0gKLSNkZWZpbmUgX1NQQVJDX1RMQkZMVVNIX0gKLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0vLyAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotCi0vKgotICogVExCIGZsdXNoaW5nOgotICoKLSAqICAtIGZsdXNoX3RsYigpIGZsdXNoZXMgdGhlIGN1cnJlbnQgbW0gc3RydWN0IFRMQnMJWFhYIEV4aXN0cz8KLSAqICAtIGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBwcm9jZXNzZXMgVExCcyAKLSAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgVExCJ3MKLSAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCi0gKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKLSAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcwotICovCi0KLSNpZmRlZiBDT05GSUdfU01QCi0KLUJURklYVVBERUZfQ0FMTCh2b2lkLCBsb2NhbF9mbHVzaF90bGJfYWxsLCB2b2lkKQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvY2FsX2ZsdXNoX3RsYl9tbSwgc3RydWN0IG1tX3N0cnVjdCAqKQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvY2FsX2ZsdXNoX3RsYl9yYW5nZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfdGxiX3BhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKQotCi0jZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYl9hbGwoKSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfdGxiX2FsbCkoKQotI2RlZmluZSBsb2NhbF9mbHVzaF90bGJfbW0obW0pIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF90bGJfbW0pKG1tKQotI2RlZmluZSBsb2NhbF9mbHVzaF90bGJfcmFuZ2Uodm1hLHN0YXJ0LGVuZCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX3RsYl9yYW5nZSkodm1hLHN0YXJ0LGVuZCkKLSNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiX3BhZ2Uodm1hLGFkZHIpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF90bGJfcGFnZSkodm1hLGFkZHIpCi0KLWV4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfYWxsKHZvaWQpOwotZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Ci1leHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKTsKLWV4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBhZ2UpOwotCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgZmx1c2hfdGxiX2FsbCwgdm9pZCkKLUJURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF90bGJfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKikKLUJURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF90bGJfcmFuZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQotQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX3RsYl9wYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZykKLQotI2RlZmluZSBmbHVzaF90bGJfYWxsKCkgQlRGSVhVUF9DQUxMKGZsdXNoX3RsYl9hbGwpKCkKLSNkZWZpbmUgZmx1c2hfdGxiX21tKG1tKSBCVEZJWFVQX0NBTEwoZmx1c2hfdGxiX21tKShtbSkKLSNkZWZpbmUgZmx1c2hfdGxiX3JhbmdlKHZtYSxzdGFydCxlbmQpIEJURklYVVBfQ0FMTChmbHVzaF90bGJfcmFuZ2UpKHZtYSxzdGFydCxlbmQpCi0jZGVmaW5lIGZsdXNoX3RsYl9wYWdlKHZtYSxhZGRyKSBCVEZJWFVQX0NBTEwoZmx1c2hfdGxiX3BhZ2UpKHZtYSxhZGRyKQotCi0vLyAjZGVmaW5lIGZsdXNoX3RsYigpIGZsdXNoX3RsYl9tbShjdXJyZW50LT5hY3RpdmVfbW0pCS8qIFhYWCBTdXJlPyAqLwotCi0vKgotICogVGhpcyBpcyBhIGtsdWRnZSwgdW50aWwgSSBrbm93IGJldHRlci4gLS16YWl0Y2V2IFhYWAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWZsdXNoX3RsYl9hbGwoKTsKLX0KLQotI2VuZGlmIC8qIF9TUEFSQ19UTEJGTFVTSF9IICovCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19UTEJGTFVTSF9ICisjZGVmaW5lIF9fX0FTTV9TUEFSQ19UTEJGTFVTSF9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMvdGxiZmx1c2hfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL3RsYmZsdXNoXzMyLmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGxiZmx1c2hfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUwYTcxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoXzMyLmgKQEAgLTAsMCArMSw2MCBAQAorI2lmbmRlZiBfU1BBUkNfVExCRkxVU0hfSAorI2RlZmluZSBfU1BBUkNfVExCRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKy8vICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy8qCisgKiBUTEIgZmx1c2hpbmc6CisgKgorICogIC0gZmx1c2hfdGxiKCkgZmx1c2hlcyB0aGUgY3VycmVudCBtbSBzdHJ1Y3QgVExCcwlYWFggRXhpc3RzPworICogIC0gZmx1c2hfdGxiX2FsbCgpIGZsdXNoZXMgYWxsIHByb2Nlc3NlcyBUTEJzCisgKiAgLSBmbHVzaF90bGJfbW0obW0pIGZsdXNoZXMgdGhlIHNwZWNpZmllZCBtbSBjb250ZXh0IFRMQidzCisgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQorICogIC0gZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCisgKiAgLSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBrZXJuZWwgcGFnZXMKKyAqLworCisjaWZkZWYgQ09ORklHX1NNUAorCitCVEZJWFVQREVGX0NBTEwodm9pZCwgbG9jYWxfZmx1c2hfdGxiX2FsbCwgdm9pZCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBsb2NhbF9mbHVzaF90bGJfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKikKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBsb2NhbF9mbHVzaF90bGJfcmFuZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIGxvY2FsX2ZsdXNoX3RsYl9wYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZykKKworI2RlZmluZSBsb2NhbF9mbHVzaF90bGJfYWxsKCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX3RsYl9hbGwpKCkKKyNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiX21tKG1tKSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfdGxiX21tKShtbSkKKyNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiX3JhbmdlKHZtYSxzdGFydCxlbmQpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF90bGJfcmFuZ2UpKHZtYSxzdGFydCxlbmQpCisjZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYl9wYWdlKHZtYSxhZGRyKSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfdGxiX3BhZ2UpKHZtYSxhZGRyKQorCitleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJICB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwYWdlKTsKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworQlRGSVhVUERFRl9DQUxMKHZvaWQsIGZsdXNoX3RsYl9hbGwsIHZvaWQpCitCVEZJWFVQREVGX0NBTEwodm9pZCwgZmx1c2hfdGxiX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICopCitCVEZJWFVQREVGX0NBTEwodm9pZCwgZmx1c2hfdGxiX3JhbmdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF90bGJfcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCisKKyNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpIEJURklYVVBfQ0FMTChmbHVzaF90bGJfYWxsKSgpCisjZGVmaW5lIGZsdXNoX3RsYl9tbShtbSkgQlRGSVhVUF9DQUxMKGZsdXNoX3RsYl9tbSkobW0pCisjZGVmaW5lIGZsdXNoX3RsYl9yYW5nZSh2bWEsc3RhcnQsZW5kKSBCVEZJWFVQX0NBTEwoZmx1c2hfdGxiX3JhbmdlKSh2bWEsc3RhcnQsZW5kKQorI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEsYWRkcikgQlRGSVhVUF9DQUxMKGZsdXNoX3RsYl9wYWdlKSh2bWEsYWRkcikKKworLy8gI2RlZmluZSBmbHVzaF90bGIoKSBmbHVzaF90bGJfbW0oY3VycmVudC0+YWN0aXZlX21tKQkvKiBYWFggU3VyZT8gKi8KKworLyoKKyAqIFRoaXMgaXMgYSBrbHVkZ2UsIHVudGlsIEkga25vdyBiZXR0ZXIuIC0temFpdGNldiBYWFgKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF90bGJfYWxsKCk7Cit9CisKKyNlbmRpZiAvKiBfU1BBUkNfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGxiZmx1c2hfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiNjc1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoXzY0LmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfU1BBUkM2NF9UTEJGTFVTSF9ICisjZGVmaW5lIF9TUEFSQzY0X1RMQkZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKKy8qIFRTQiBmbHVzaCBvcGVyYXRpb25zLiAqLworc3RydWN0IG1tdV9nYXRoZXI7CitleHRlcm4gdm9pZCBmbHVzaF90c2Jfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RzYl91c2VyKHN0cnVjdCBtbXVfZ2F0aGVyICptcCk7CisKKy8qIFRMQiBmbHVzaCBvcGVyYXRpb25zLiAqLworCitleHRlcm4gdm9pZCBmbHVzaF90bGJfcGVuZGluZyh2b2lkKTsKKworI2RlZmluZSBmbHVzaF90bGJfcmFuZ2Uodm1hLHN0YXJ0LGVuZCkJXAorCWRvIHsgKHZvaWQpKHN0YXJ0KTsgZmx1c2hfdGxiX3BlbmRpbmcoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfdGxiX3BhZ2Uodm1hLGFkZHIpCWZsdXNoX3RsYl9wZW5kaW5nKCkKKyNkZWZpbmUgZmx1c2hfdGxiX21tKG1tKQkJZmx1c2hfdGxiX3BlbmRpbmcoKQorCisvKiBMb2NhbCBjcHUgb25seS4gICovCitleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9hbGwodm9pZCk7CisKK2V4dGVybiB2b2lkIF9fZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorCisjZGVmaW5lIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsZW5kKSBcCitkbyB7CWZsdXNoX3RzYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsZW5kKTsgXAorCV9fZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCxlbmQpOyBcCit9IHdoaWxlICgwKQorCisjZWxzZSAvKiBDT05GSUdfU01QICovCisKK2V4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKworI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIFwKK2RvIHsJZmx1c2hfdHNiX2tlcm5lbF9yYW5nZShzdGFydCxlbmQpOyBcCisJc21wX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7IFwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAhIENPTkZJR19TTVAgKi8KKworI2VuZGlmIC8qIF9TUEFSQzY0X1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1zcGFyYy90b3BvbG9neS5oCmluZGV4IGVlNWFjOWMuLmVkMTM2MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdG9wb2xvZ3kuaApAQCAtMSw2ICsxLDggQEAKLSNpZm5kZWYgX0FTTV9TUEFSQ19UT1BPTE9HWV9ICi0jZGVmaW5lIF9BU01fU1BBUkNfVE9QT0xPR1lfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KLQotI2VuZGlmIC8qIF9BU01fU1BBUkNfVE9QT0xPR1lfSCAqLworI2lmbmRlZiBfX19BU01fU1BBUkNfVE9QT0xPR1lfSAorI2RlZmluZSBfX19BU01fU1BBUkNfVE9QT0xPR1lfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3RvcG9sb2d5XzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy90b3BvbG9neV8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RvcG9sb2d5XzMyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90b3BvbG9neV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNWFjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90b3BvbG9neV8zMi5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX1NQQVJDX1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9TUEFSQ19UT1BPTE9HWV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgorCisjZW5kaWYgLyogX0FTTV9TUEFSQ19UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90b3BvbG9neV82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdG9wb2xvZ3lfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDFjMDQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdG9wb2xvZ3lfNjQuaApAQCAtMCwwICsxLDg2IEBACisjaWZuZGVmIF9BU01fU1BBUkM2NF9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fU1BBUkM2NF9UT1BPTE9HWV9ICisKKyNpZmRlZiBDT05GSUdfTlVNQQorCisjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorCitzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQoreworCXJldHVybiBudW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XTsKK30KKworI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKQkobm9kZSkKKworc3RhdGljIGlubGluZSBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKQoreworCXJldHVybiBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdOworfQorCisvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY3B1bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLworI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyKHYsIG5vZGUpCQlcCisJCWNwdW1hc2tfdCAqdiA9ICYobnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSkKKworI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyX25leHQodiwgbm9kZSkJXAorCQkJICAgdiA9ICYobnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSkKKworc3RhdGljIGlubGluZSBpbnQgbm9kZV90b19maXJzdF9jcHUoaW50IG5vZGUpCit7CisJY3B1bWFza190IHRtcDsKKwl0bXAgPSBub2RlX3RvX2NwdW1hc2sobm9kZSk7CisJcmV0dXJuIGZpcnN0X2NwdSh0bXApOworfQorCitzdHJ1Y3QgcGNpX2J1czsKKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gaW50IHBjaWJ1c190b19ub2RlKHN0cnVjdCBwY2lfYnVzICpwYnVzKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwY2lidXNfdG9fbm9kZShzdHJ1Y3QgcGNpX2J1cyAqcGJ1cykKK3sKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKworI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpCVwKKwkocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/IFwKKwkgQ1BVX01BU0tfQUxMIDogXAorCSBub2RlX3RvX2NwdW1hc2socGNpYnVzX3RvX25vZGUoYnVzKSkpCisKKyNkZWZpbmUgU0RfTk9ERV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCisJLm1pbl9pbnRlcnZhbAkJPSA4LAkJCVwKKwkubWF4X2ludGVydmFsCQk9IDMyLAkJCVwKKwkuYnVzeV9mYWN0b3IJCT0gMzIsCQkJXAorCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCisJLmNhY2hlX25pY2VfdHJpZXMJPSAyLAkJCVwKKwkuYnVzeV9pZHgJCT0gMywJCQlcCisJLmlkbGVfaWR4CQk9IDIsCQkJXAorCS5uZXdpZGxlX2lkeAkJPSAwLCAJCQlcCisJLndha2VfaWR4CQk9IDEsCQkJXAorCS5mb3JrZXhlY19pZHgJCT0gMSwJCQlcCisJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAorCQkJCXwgU0RfQkFMQU5DRV9GT1JLCVwKKwkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCisJCQkJfCBTRF9TRVJJQUxJWkUJCVwKKwkJCQl8IFNEX1dBS0VfQkFMQU5DRSwJXAorCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKKwkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAorfQorCisjZWxzZSAvKiBDT05GSUdfTlVNQSAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmIC8qICEoQ09ORklHX05VTUEpICovCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHRvcG9sb2d5X3BoeXNpY2FsX3BhY2thZ2VfaWQoY3B1KQkoY3B1X2RhdGEoY3B1KS5wcm9jX2lkKQorI2RlZmluZSB0b3BvbG9neV9jb3JlX2lkKGNwdSkJCQkoY3B1X2RhdGEoY3B1KS5jb3JlX2lkKQorI2RlZmluZSB0b3BvbG9neV9jb3JlX3NpYmxpbmdzKGNwdSkJCShjcHVfY29yZV9tYXBbY3B1XSkKKyNkZWZpbmUgdG9wb2xvZ3lfdGhyZWFkX3NpYmxpbmdzKGNwdSkJCShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkKKyNkZWZpbmUgbWNfY2FwYWJsZSgpCQkJCShzcGFyYzY0X211bHRpX2NvcmUpCisjZGVmaW5lIHNtdF9jYXBhYmxlKCkJCQkJKHNwYXJjNjRfbXVsdGlfY29yZSkKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyNkZWZpbmUgY3B1X2NvcmVncm91cF9tYXAoY3B1KQkJCShjcHVfY29yZV9tYXBbY3B1XSkKKworI2VuZGlmIC8qIF9BU01fU1BBUkM2NF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90c2IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTQyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90c2IuaApAQCAtMCwwICsxLDI4MyBAQAorI2lmbmRlZiBfU1BBUkM2NF9UU0JfSAorI2RlZmluZSBfU1BBUkM2NF9UU0JfSAorCisvKiBUaGUgc3BhcmM2NCBUU0IgaXMgc2ltaWxhciB0byB0aGUgcG93ZXJwYyBoYXNodGFibGVzLiAgSXQncyBhCisgKiBwb3dlci1vZi0yIHNpemVkIHRhYmxlIG9mIFRBRy9QVEUgcGFpcnMuICBUaGUgY3B1IHByZWNvbXB1dGVzCisgKiBwb2ludGVycyBpbnRvIHRoaXMgdGFibGUgZm9yIDhLIGFuZCA2NEsgcGFnZSBzaXplcywgYW5kIGFsc28gYQorICogY29tcGFyaXNvbiBUQUcgYmFzZWQgdXBvbiB0aGUgdmlydHVhbCBhZGRyZXNzIGFuZCBjb250ZXh0IHdoaWNoCisgKiBmYXVsdHMuCisgKgorICogVExCIG1pc3MgdHJhcCBoYW5kbGVyIHNvZnR3YXJlIGRvZXMgdGhlIGFjdHVhbCBsb29rdXAgdmlhIHNvbWV0aGluZworICogb2YgdGhlIGZvcm06CisgKgorICogCWxkeGEJCVslZzBdIEFTSV97RCxJfU1NVV9UU0JfOEtCX1BUUiwgJWcxCisgKiAJbGR4YQkJWyVnMF0gQVNJX3tELEl9TU1VLCAlZzYKKyAqCXNsbHgJCSVnNiwgMjIsICVnNgorICoJc3JseAkJJWc2LCAyMiwgJWc2CisgKiAJbGRkYQkJWyVnMV0gQVNJX05VQ0xFVVNfUVVBRF9MREQsICVnNAorICogCWNtcAkJJWc0LCAlZzYKKyAqIAlibmUscG4JJXhjYywgdHNiX21pc3Nfe2QsaX10bGIKKyAqIAkgbW92CQlGQVVMVF9DT0RFX3tELEl9VExCLCAlZzMKKyAqIAlzdHhhCQklZzUsIFslZzBdIEFTSV97RCxJfVRMQl9EQVRBX0lOCisgKiAJcmV0cnkKKyAqCisgKgorICogRWFjaCAxNi1ieXRlIHNsb3Qgb2YgdGhlIFRTQiBpcyB0aGUgOC1ieXRlIHRhZyBhbmQgdGhlbiB0aGUgOC1ieXRlCisgKiBQVEUuICBUaGUgVEFHIGlzIG9mIHRoZSBzYW1lIGxheW91dCBhcyB0aGUgVExCIFRBRyBUQVJHRVQgbW11CisgKiByZWdpc3RlciB3aGljaCBpczoKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAtICB8ICBDT05URVhUIHwgIC0gIHwgICAgVkFERFIgYml0cyA2MzoyMiAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgNjMgNjEgNjAgICAgICA0OCA0NyA0MiA0MSAgICAgICAgICAgICAgICAgICAgIDAKKyAqCisgKiBCdXQgYWN0dWFsbHksIHNpbmNlIHdlIHVzZSBwZXItbW0gVFNCJ3MsIHdlIHplcm8gb3V0IHRoZSBDT05URVhUCisgKiBmaWVsZC4KKyAqCisgKiBMaWtlIHRoZSBwb3dlcnBjIGhhc2h0YWJsZXMgd2UgbmVlZCB0byB1c2UgbG9ja2luZyBpbiBvcmRlciB0bworICogc3luY2hyb25pemUgd2hpbGUgd2UgdXBkYXRlIHRoZSBlbnRyaWVzLiAgUFRFIHVwZGF0ZXMgbmVlZCBsb2NraW5nCisgKiBhcyB3ZWxsLgorICoKKyAqIFdlIG5lZWQgdG8gY2FyZWZ1bGx5IGNob29zZSBhIGxvY2sgYml0cyBmb3IgdGhlIFRTQiBlbnRyeS4gIFdlCisgKiBjaG9vc2UgdG8gdXNlIGJpdCA0NyBpbiB0aGUgdGFnLiAgQWxzbywgc2luY2Ugd2UgbmV2ZXIgbWFwIGFueXRoaW5nCisgKiBhdCBwYWdlIHplcm8gaW4gY29udGV4dCB6ZXJvLCB3ZSB1c2UgemVybyBhcyBhbiBpbnZhbGlkIHRhZyBlbnRyeS4KKyAqIFdoZW4gdGhlIGxvY2sgYml0IGlzIHNldCwgdGhpcyBmb3JjZXMgYSB0YWcgY29tcGFyaXNvbiBmYWlsdXJlLgorICovCisKKyNkZWZpbmUgVFNCX1RBR19MT0NLX0JJVAk0NworI2RlZmluZSBUU0JfVEFHX0xPQ0tfSElHSAkoMSA8PCAoVFNCX1RBR19MT0NLX0JJVCAtIDMyKSkKKworI2RlZmluZSBUU0JfVEFHX0lOVkFMSURfQklUCTQ2CisjZGVmaW5lIFRTQl9UQUdfSU5WQUxJRF9ISUdICSgxIDw8IChUU0JfVEFHX0lOVkFMSURfQklUIC0gMzIpKQorCisjZGVmaW5lIFRTQl9NRU1CQVIJbWVtYmFyCSNTdG9yZVN0b3JlCisKKy8qIFNvbWUgY3B1cyBzdXBwb3J0IHBoeXNpY2FsIGFkZHJlc3MgcXVhZCBsb2Fkcy4gIFdlIHdhbnQgdG8gdXNlCisgKiB0aG9zZSBpZiBwb3NzaWJsZSBzbyB3ZSBkb24ndCBuZWVkIHRvIGhhcmQtbG9jayB0aGUgVFNCIG1hcHBpbmcKKyAqIGludG8gdGhlIFRMQi4gIFdlIGVuY29kZSBzb21lIGluc3RydWN0aW9uIHBhdGNoaW5nIGluIG9yZGVyIHRvCisgKiBzdXBwb3J0IHRoaXMuCisgKgorICogVGhlIGtlcm5lbCBUU0IgaXMgbG9ja2VkIGludG8gdGhlIFRMQiBieSB2aXJ0dWUgb2YgYmVpbmcgaW4gdGhlCisgKiBrZXJuZWwgaW1hZ2UsIHNvIHdlIGRvbid0IHBsYXkgdGhlc2UgZ2FtZXMgZm9yIHN3YXBwZXJfdHNiIGFjY2Vzcy4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCB0c2JfbGRxdWFkX3BoeXNfcGF0Y2hfZW50cnkgeworCXVuc2lnbmVkIGludAlhZGRyOworCXVuc2lnbmVkIGludAlzdW40dV9pbnNuOworCXVuc2lnbmVkIGludAlzdW40dl9pbnNuOworfTsKK2V4dGVybiBzdHJ1Y3QgdHNiX2xkcXVhZF9waHlzX3BhdGNoX2VudHJ5IF9fdHNiX2xkcXVhZF9waHlzX3BhdGNoLAorCV9fdHNiX2xkcXVhZF9waHlzX3BhdGNoX2VuZDsKKworc3RydWN0IHRzYl9waHlzX3BhdGNoX2VudHJ5IHsKKwl1bnNpZ25lZCBpbnQJYWRkcjsKKwl1bnNpZ25lZCBpbnQJaW5zbjsKK307CitleHRlcm4gc3RydWN0IHRzYl9waHlzX3BhdGNoX2VudHJ5IF9fdHNiX3BoeXNfcGF0Y2gsIF9fdHNiX3BoeXNfcGF0Y2hfZW5kOworI2VuZGlmCisjZGVmaW5lIFRTQl9MT0FEX1FVQUQoVFNCLCBSRUcpCVwKKzY2MToJbGRkYQkJW1RTQl0gQVNJX05VQ0xFVVNfUVVBRF9MREQsIFJFRzsgXAorCS5zZWN0aW9uCS50c2JfbGRxdWFkX3BoeXNfcGF0Y2gsICJheCI7IFwKKwkud29yZAkJNjYxYjsgXAorCWxkZGEJCVtUU0JdIEFTSV9RVUFEX0xERF9QSFlTLCBSRUc7IFwKKwlsZGRhCQlbVFNCXSBBU0lfUVVBRF9MRERfUEhZU180ViwgUkVHOyBcCisJLnByZXZpb3VzCisKKyNkZWZpbmUgVFNCX0xPQURfVEFHX0hJR0goVFNCLCBSRUcpIFwKKzY2MToJbGR1d2EJCVtUU0JdIEFTSV9OLCBSRUc7IFwKKwkuc2VjdGlvbgkudHNiX3BoeXNfcGF0Y2gsICJheCI7IFwKKwkud29yZAkJNjYxYjsgXAorCWxkdXdhCQlbVFNCXSBBU0lfUEhZU19VU0VfRUMsIFJFRzsgXAorCS5wcmV2aW91cworCisjZGVmaW5lIFRTQl9MT0FEX1RBRyhUU0IsIFJFRykgXAorNjYxOglsZHhhCQlbVFNCXSBBU0lfTiwgUkVHOyBcCisJLnNlY3Rpb24JLnRzYl9waHlzX3BhdGNoLCAiYXgiOyBcCisJLndvcmQJCTY2MWI7IFwKKwlsZHhhCQlbVFNCXSBBU0lfUEhZU19VU0VfRUMsIFJFRzsgXAorCS5wcmV2aW91cworCisjZGVmaW5lIFRTQl9DQVNfVEFHX0hJR0goVFNCLCBSRUcxLCBSRUcyKSBcCis2NjE6CWNhc2EJCVtUU0JdIEFTSV9OLCBSRUcxLCBSRUcyOyBcCisJLnNlY3Rpb24JLnRzYl9waHlzX3BhdGNoLCAiYXgiOyBcCisJLndvcmQJCTY2MWI7IFwKKwljYXNhCQlbVFNCXSBBU0lfUEhZU19VU0VfRUMsIFJFRzEsIFJFRzI7IFwKKwkucHJldmlvdXMKKworI2RlZmluZSBUU0JfQ0FTX1RBRyhUU0IsIFJFRzEsIFJFRzIpIFwKKzY2MToJY2FzeGEJCVtUU0JdIEFTSV9OLCBSRUcxLCBSRUcyOyBcCisJLnNlY3Rpb24JLnRzYl9waHlzX3BhdGNoLCAiYXgiOyBcCisJLndvcmQJCTY2MWI7IFwKKwljYXN4YQkJW1RTQl0gQVNJX1BIWVNfVVNFX0VDLCBSRUcxLCBSRUcyOyBcCisJLnByZXZpb3VzCisKKyNkZWZpbmUgVFNCX1NUT1JFKEFERFIsIFZBTCkgXAorNjYxOglzdHhhCQlWQUwsIFtBRERSXSBBU0lfTjsgXAorCS5zZWN0aW9uCS50c2JfcGh5c19wYXRjaCwgImF4IjsgXAorCS53b3JkCQk2NjFiOyBcCisJc3R4YQkJVkFMLCBbQUREUl0gQVNJX1BIWVNfVVNFX0VDOyBcCisJLnByZXZpb3VzCisKKyNkZWZpbmUgVFNCX0xPQ0tfVEFHKFRTQiwgUkVHMSwgUkVHMikJXAorOTk6CVRTQl9MT0FEX1RBR19ISUdIKFRTQiwgUkVHMSk7CVwKKwlzZXRoaQklaGkoVFNCX1RBR19MT0NLX0hJR0gpLCBSRUcyO1wKKwlhbmRjYwlSRUcxLCBSRUcyLCAlZzA7CVwKKwlibmUscG4JJWljYywgOTliOwkJXAorCSBub3A7CQkJCVwKKwlUU0JfQ0FTX1RBR19ISUdIKFRTQiwgUkVHMSwgUkVHMik7CVwKKwljbXAJUkVHMSwgUkVHMjsJCVwKKwlibmUscG4JJWljYywgOTliOwkJXAorCSBub3A7CQkJCVwKKwlUU0JfTUVNQkFSCisKKyNkZWZpbmUgVFNCX1dSSVRFKFRTQiwgVFRFLCBUQUcpIFwKKwlhZGQJVFNCLCAweDgsIFRTQjsgICBcCisJVFNCX1NUT1JFKFRTQiwgVFRFKTsgICAgIFwKKwlzdWIJVFNCLCAweDgsIFRTQjsgICBcCisJVFNCX01FTUJBUjsgICAgICAgICAgICAgIFwKKwlUU0JfU1RPUkUoVFNCLCBUQUcpOworCisjZGVmaW5lIEtUU0JfTE9BRF9RVUFEKFRTQiwgUkVHKSBcCisJbGRkYQkJW1RTQl0gQVNJX05VQ0xFVVNfUVVBRF9MREQsIFJFRzsKKworI2RlZmluZSBLVFNCX1NUT1JFKEFERFIsIFZBTCkgXAorCXN0eGEJCVZBTCwgW0FERFJdIEFTSV9OOworCisjZGVmaW5lIEtUU0JfTE9DS19UQUcoVFNCLCBSRUcxLCBSRUcyKQlcCis5OToJbGR1d2EJW1RTQl0gQVNJX04sIFJFRzE7CVwKKwlzZXRoaQklaGkoVFNCX1RBR19MT0NLX0hJR0gpLCBSRUcyO1wKKwlhbmRjYwlSRUcxLCBSRUcyLCAlZzA7CVwKKwlibmUscG4JJWljYywgOTliOwkJXAorCSBub3A7CQkJCVwKKwljYXNhCVtUU0JdIEFTSV9OLCBSRUcxLCBSRUcyO1wKKwljbXAJUkVHMSwgUkVHMjsJCVwKKwlibmUscG4JJWljYywgOTliOwkJXAorCSBub3A7CQkJCVwKKwlUU0JfTUVNQkFSCisKKyNkZWZpbmUgS1RTQl9XUklURShUU0IsIFRURSwgVEFHKSBcCisJYWRkCVRTQiwgMHg4LCBUU0I7ICAgXAorCXN0eGEJVFRFLCBbVFNCXSBBU0lfTjsgICAgIFwKKwlzdWIJVFNCLCAweDgsIFRTQjsgICBcCisJVFNCX01FTUJBUjsgICAgICAgICAgICAgIFwKKwlzdHhhCVRBRywgW1RTQl0gQVNJX047CisKKwkvKiBEbyBhIGtlcm5lbCBwYWdlIHRhYmxlIHdhbGsuICBMZWF2ZXMgcGh5c2ljYWwgUFRFIHBvaW50ZXIgaW4KKwkgKiBSRUcxLiAgSnVtcHMgdG8gRkFJTF9MQUJFTCBvbiBlYXJseSBwYWdlIHRhYmxlIHdhbGsgdGVybWluYXRpb24uCisJICogVkFERFIgd2lsbCBub3QgYmUgY2xvYmJlcmVkLCBidXQgUkVHMiB3aWxsLgorCSAqLworI2RlZmluZSBLRVJOX1BHVEFCTEVfV0FMSyhWQUREUiwgUkVHMSwgUkVHMiwgRkFJTF9MQUJFTCkJXAorCXNldGhpCQklaGkoc3dhcHBlcl9wZ19kaXIpLCBSRUcxOyBcCisJb3IJCVJFRzEsICVsbyhzd2FwcGVyX3BnX2RpciksIFJFRzE7IFwKKwlzbGx4CQlWQUREUiwgNjQgLSAoUEdESVJfU0hJRlQgKyBQR0RJUl9CSVRTKSwgUkVHMjsgXAorCXNybHgJCVJFRzIsIDY0IC0gUEFHRV9TSElGVCwgUkVHMjsgXAorCWFuZG4JCVJFRzIsIDB4MywgUkVHMjsgXAorCWxkdXcJCVtSRUcxICsgUkVHMl0sIFJFRzE7IFwKKwlicnoscG4JCVJFRzEsIEZBSUxfTEFCRUw7IFwKKwkgc2xseAkJVkFERFIsIDY0IC0gKFBNRF9TSElGVCArIFBNRF9CSVRTKSwgUkVHMjsgXAorCXNybHgJCVJFRzIsIDY0IC0gUEFHRV9TSElGVCwgUkVHMjsgXAorCXNsbHgJCVJFRzEsIDExLCBSRUcxOyBcCisJYW5kbgkJUkVHMiwgMHgzLCBSRUcyOyBcCisJbGR1d2EJCVtSRUcxICsgUkVHMl0gQVNJX1BIWVNfVVNFX0VDLCBSRUcxOyBcCisJYnJ6LHBuCQlSRUcxLCBGQUlMX0xBQkVMOyBcCisJIHNsbHgJCVZBRERSLCA2NCAtIFBNRF9TSElGVCwgUkVHMjsgXAorCXNybHgJCVJFRzIsIDY0IC0gUEFHRV9TSElGVCwgUkVHMjsgXAorCXNsbHgJCVJFRzEsIDExLCBSRUcxOyBcCisJYW5kbgkJUkVHMiwgMHg3LCBSRUcyOyBcCisJYWRkCQlSRUcxLCBSRUcyLCBSRUcxOworCisJLyogRG8gYSB1c2VyIHBhZ2UgdGFibGUgd2FsayBpbiBNTVUgZ2xvYmFscy4gIExlYXZlcyBwaHlzaWNhbCBQVEUKKwkgKiBwb2ludGVyIGluIFJFRzEuICBKdW1wcyB0byBGQUlMX0xBQkVMIG9uIGVhcmx5IHBhZ2UgdGFibGUgd2FsaworCSAqIHRlcm1pbmF0aW9uLiAgUGh5c2ljYWwgYmFzZSBvZiBwYWdlIHRhYmxlcyBpcyBpbiBQSFlTX1BHRCB3aGljaAorCSAqIHdpbGwgbm90IGJlIG1vZGlmaWVkLgorCSAqCisJICogVkFERFIgd2lsbCBub3QgYmUgY2xvYmJlcmVkLCBidXQgUkVHMSBhbmQgUkVHMiB3aWxsLgorCSAqLworI2RlZmluZSBVU0VSX1BHVEFCTEVfV0FMS19UTDEoVkFERFIsIFBIWVNfUEdELCBSRUcxLCBSRUcyLCBGQUlMX0xBQkVMKQlcCisJc2xseAkJVkFERFIsIDY0IC0gKFBHRElSX1NISUZUICsgUEdESVJfQklUUyksIFJFRzI7IFwKKwlzcmx4CQlSRUcyLCA2NCAtIFBBR0VfU0hJRlQsIFJFRzI7IFwKKwlhbmRuCQlSRUcyLCAweDMsIFJFRzI7IFwKKwlsZHV3YQkJW1BIWVNfUEdEICsgUkVHMl0gQVNJX1BIWVNfVVNFX0VDLCBSRUcxOyBcCisJYnJ6LHBuCQlSRUcxLCBGQUlMX0xBQkVMOyBcCisJIHNsbHgJCVZBRERSLCA2NCAtIChQTURfU0hJRlQgKyBQTURfQklUUyksIFJFRzI7IFwKKwlzcmx4CQlSRUcyLCA2NCAtIFBBR0VfU0hJRlQsIFJFRzI7IFwKKwlzbGx4CQlSRUcxLCAxMSwgUkVHMTsgXAorCWFuZG4JCVJFRzIsIDB4MywgUkVHMjsgXAorCWxkdXdhCQlbUkVHMSArIFJFRzJdIEFTSV9QSFlTX1VTRV9FQywgUkVHMTsgXAorCWJyeixwbgkJUkVHMSwgRkFJTF9MQUJFTDsgXAorCSBzbGx4CQlWQUREUiwgNjQgLSBQTURfU0hJRlQsIFJFRzI7IFwKKwlzcmx4CQlSRUcyLCA2NCAtIFBBR0VfU0hJRlQsIFJFRzI7IFwKKwlzbGx4CQlSRUcxLCAxMSwgUkVHMTsgXAorCWFuZG4JCVJFRzIsIDB4NywgUkVHMjsgXAorCWFkZAkJUkVHMSwgUkVHMiwgUkVHMTsKKworLyogTG9va3VwIGEgT0JQIG1hcHBpbmcgb24gVkFERFIgaW4gdGhlIHByb21fdHJhbnNbXSB0YWJsZSBhdCBUTD4wLgorICogSWYgbm8gZW50cnkgaXMgZm91bmQsIEZBSUxfTEFCRUwgd2lsbCBiZSBicmFuY2hlZCB0by4gIE9uIHN1Y2Nlc3MKKyAqIHRoZSByZXN1bHRpbmcgUFRFIHZhbHVlIHdpbGwgYmUgbGVmdCBpbiBSRUcxLiAgVkFERFIgaXMgcHJlc2VydmVkCisgKiBieSB0aGlzIHJvdXRpbmUuCisgKi8KKyNkZWZpbmUgT0JQX1RSQU5TX0xPT0tVUChWQUREUiwgUkVHMSwgUkVHMiwgUkVHMywgRkFJTF9MQUJFTCkgXAorCXNldGhpCQklaGkocHJvbV90cmFucyksIFJFRzE7IFwKKwlvcgkJUkVHMSwgJWxvKHByb21fdHJhbnMpLCBSRUcxOyBcCis5NzoJbGR4CQlbUkVHMSArIDB4MDBdLCBSRUcyOyBcCisJYnJ6LHBuCQlSRUcyLCBGQUlMX0xBQkVMOyBcCisJIG5vcDsgXAorCWxkeAkJW1JFRzEgKyAweDA4XSwgUkVHMzsgXAorCWFkZAkJUkVHMiwgUkVHMywgUkVHMzsgXAorCWNtcAkJUkVHMiwgVkFERFI7IFwKKwliZ3UscHQJCSV4Y2MsIDk4ZjsgXAorCSBjbXAJCVZBRERSLCBSRUczOyBcCisJYmdldSxwdAkJJXhjYywgOThmOyBcCisJIGxkeAkJW1JFRzEgKyAweDEwXSwgUkVHMzsgXAorCXN1YgkJVkFERFIsIFJFRzIsIFJFRzI7IFwKKwliYSxwdAkJJXhjYywgOTlmOyBcCisJIGFkZAkJUkVHMywgUkVHMiwgUkVHMTsgXAorOTg6CWJhLHB0CQkleGNjLCA5N2I7IFwKKwkgYWRkCQlSRUcxLCAoMyAqIDgpLCBSRUcxOyBcCis5OToKKworCS8qIFdlIHVzZSBhIDMySyBUU0IgZm9yIHRoZSB3aG9sZSBrZXJuZWwsIHRoaXMgYWxsb3dzIHRvCisJICogaGFuZGxlIGFib3V0IDE2TUIgb2YgbW9kdWxlcyBhbmQgdm1hbGxvYyBtYXBwaW5ncyB3aXRob3V0CisJICogaW5jdXJyaW5nIG1hbnkgaGFzaCBjb25mbGljdHMuCisJICovCisjZGVmaW5lIEtFUk5FTF9UU0JfU0laRV9CWVRFUwkoMzIgKiAxMDI0KQorI2RlZmluZSBLRVJORUxfVFNCX05FTlRSSUVTCVwKKwkoS0VSTkVMX1RTQl9TSVpFX0JZVEVTIC8gMTYpCisjZGVmaW5lIEtFUk5FTF9UU0I0TV9ORU5UUklFUwk0MDk2CisKKwkvKiBEbyBhIGtlcm5lbCBUU0IgbG9va3VwIGF0IHRsPjAgb24gVkFERFIrVEFHLCBicmFuY2ggdG8gT0tfTEFCRUwKKwkgKiBvbiBUU0IgaGl0LiAgUkVHMSwgUkVHMiwgUkVHMywgYW5kIFJFRzQgYXJlIHVzZWQgYXMgdGVtcG9yYXJpZXMKKwkgKiBhbmQgdGhlIGZvdW5kIFRURSB3aWxsIGJlIGxlZnQgaW4gUkVHMS4gIFJFRzMgYW5kIFJFRzQgbXVzdAorCSAqIGJlIGFuIGV2ZW4vb2RkIHBhaXIgb2YgcmVnaXN0ZXJzLgorCSAqCisJICogVkFERFIgYW5kIFRBRyB3aWxsIGJlIHByZXNlcnZlZCBhbmQgbm90IGNsb2JiZXJlZCBieSB0aGlzIG1hY3JvLgorCSAqLworI2RlZmluZSBLRVJOX1RTQl9MT09LVVBfVEwxKFZBRERSLCBUQUcsIFJFRzEsIFJFRzIsIFJFRzMsIFJFRzQsIE9LX0xBQkVMKSBcCisJc2V0aGkJCSVoaShzd2FwcGVyX3RzYiksIFJFRzE7IFwKKwlvcgkJUkVHMSwgJWxvKHN3YXBwZXJfdHNiKSwgUkVHMTsgXAorCXNybHgJCVZBRERSLCBQQUdFX1NISUZULCBSRUcyOyBcCisJYW5kCQlSRUcyLCAoS0VSTkVMX1RTQl9ORU5UUklFUyAtIDEpLCBSRUcyOyBcCisJc2xseAkJUkVHMiwgNCwgUkVHMjsgXAorCWFkZAkJUkVHMSwgUkVHMiwgUkVHMjsgXAorCUtUU0JfTE9BRF9RVUFEKFJFRzIsIFJFRzMpOyBcCisJY21wCQlSRUczLCBUQUc7IFwKKwliZSxhLHB0CQkleGNjLCBPS19MQUJFTDsgXAorCSBtb3YJCVJFRzQsIFJFRzE7CisKKyNpZm5kZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworCS8qIFRoaXMgdmVyc2lvbiB1c2VzIGEgdHJpY2ssIHRoZSBUQUcgaXMgYWxyZWFkeSAoVkFERFIgPj4gMjIpIHNvCisJICogd2UgY2FuIG1ha2UgdXNlIG9mIHRoYXQgZm9yIHRoZSBpbmRleCBjb21wdXRhdGlvbi4KKwkgKi8KKyNkZWZpbmUgS0VSTl9UU0I0TV9MT09LVVBfVEwxKFRBRywgUkVHMSwgUkVHMiwgUkVHMywgUkVHNCwgT0tfTEFCRUwpIFwKKwlzZXRoaQkJJWhpKHN3YXBwZXJfNG1fdHNiKSwgUkVHMTsgXAorCW9yCQlSRUcxLCAlbG8oc3dhcHBlcl80bV90c2IpLCBSRUcxOyBcCisJYW5kCQlUQUcsIChLRVJORUxfVFNCNE1fTkVOVFJJRVMgLSAxKSwgUkVHMjsgXAorCXNsbHgJCVJFRzIsIDQsIFJFRzI7IFwKKwlhZGQJCVJFRzEsIFJFRzIsIFJFRzI7IFwKKwlLVFNCX0xPQURfUVVBRChSRUcyLCBSRUczKTsgXAorCWNtcAkJUkVHMywgVEFHOyBcCisJYmUsYSxwdAkJJXhjYywgT0tfTEFCRUw7IFwKKwkgbW92CQlSRUc0LCBSRUcxOworI2VuZGlmCisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1RTQl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdHRhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90dGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzA4YmEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdHRhYmxlLmgKQEAgLTAsMCArMSw2NTggQEAKKyNpZm5kZWYgX1NQQVJDNjRfVFRBQkxFX0gKKyNkZWZpbmUgX1NQQVJDNjRfVFRBQkxFX0gKKworI2luY2x1ZGUgPGFzbS91dHJhcC5oPgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjZW5kaWYKKworI2RlZmluZSBCT09UX0tFUk5FTCBiIHNwYXJjNjRfYm9vdDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOworCisvKiBXZSBuZWVkIGEgImNsZWFuZWQiIGluc3RydWN0aW9uLi4uICovCisjZGVmaW5lIENMRUFOX1dJTkRPVwkJCQkJCQlcCisJcmRwcgklY2xlYW53aW4sICVsMDsJCWFkZAklbDAsIDEsICVsMDsJCVwKKwl3cnByCSVsMCwgMHgwLCAlY2xlYW53aW47CQkJCQlcCisJY2xyCSVvMDsJY2xyCSVvMTsJY2xyCSVvMjsJY2xyCSVvMzsJXAorCWNscgklbzQ7CWNscgklbzU7CWNscgklbzY7CWNscgklbzc7CVwKKwljbHIJJWwwOwljbHIJJWwxOwljbHIJJWwyOwljbHIJJWwzOwlcCisJY2xyCSVsNDsJY2xyCSVsNTsJY2xyCSVsNjsJY2xyCSVsNzsJXAorCXJldHJ5OwkJCQkJCQkJXAorCW5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wOworCisjZGVmaW5lIFRSQVAocm91dGluZSkJCQkJCVwKKwlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwOwkJCQlcCisxMDk6CSBvcgklZzcsICVsbygxMDliKSwgJWc3OwkJCVwKKwljYWxsCXJvdXRpbmU7CQkJCVwKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKKwliYSxwdAkleGNjLCBydHJhcDsJCQkJXAorCSBub3A7CQkJCQkJXAorCW5vcDsKKworI2RlZmluZSBUUkFQXzdJTlNOUyhyb3V0aW5lKQkJCQlcCisJc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcDsJCQkJXAorMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCisJY2FsbAlyb3V0aW5lOwkJCQlcCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMDsJCQlcCisJYmEscHQJJXhjYywgcnRyYXA7CQkJCVwKKwkgbm9wOworCisjZGVmaW5lIFRSQVBfU0FWRUZQVShyb3V0aW5lKQkJCQlcCisJc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBkb19mcHRyYXA7CQkJXAorMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCisJY2FsbAlyb3V0aW5lOwkJCQlcCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMDsJCQlcCisJYmEscHQJJXhjYywgcnRyYXA7CQkJCVwKKwkgbm9wOwkJCQkJCVwKKwlub3A7CisKKyNkZWZpbmUgVFJBUF9OT1NBVkUocm91dGluZSkJCQkJXAorCWJhLHB0CSV4Y2MsIHJvdXRpbmU7CQkJCVwKKwkgbm9wOwkJCQkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOworCisjZGVmaW5lIFRSQVBfTk9TQVZFXzdJTlNOUyhyb3V0aW5lKQkJCVwKKwliYSxwdAkleGNjLCByb3V0aW5lOwkJCQlcCisJIG5vcDsJCQkJCQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7CisKKyNkZWZpbmUgVFJBUFRMMShyb3V0aW5lKQkJCQlcCisJc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcHRsMTsJCQkJXAorMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCisJY2FsbAlyb3V0aW5lOwkJCQlcCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMDsJCQlcCisJYmEscHQJJXhjYywgcnRyYXA7CQkJCVwKKwkgbm9wOwkJCQkJCVwKKwlub3A7CisKKyNkZWZpbmUgVFJBUF9BUkcocm91dGluZSwgYXJnKQkJCQlcCisJc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcDsJCQkJXAorMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCisJYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKKwljYWxsCXJvdXRpbmU7CQkJCVwKKwkgbW92CWFyZywgJW8xOwkJCQlcCisJYmEscHQJJXhjYywgcnRyYXA7CQkJCVwKKwkgbm9wOworCisjZGVmaW5lIFRSQVBUTDFfQVJHKHJvdXRpbmUsIGFyZykJCQlcCisJc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcHRsMTsJCQkJXAorMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCisJYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKKwljYWxsCXJvdXRpbmU7CQkJCVwKKwkgbW92CWFyZywgJW8xOwkJCQlcCisJYmEscHQJJXhjYywgcnRyYXA7CQkJCVwKKwkgbm9wOworCisjZGVmaW5lIFNZU0NBTExfVFJBUChyb3V0aW5lLCBzeXN0YmwpCQkJXAorCXJkcHIJJXBpbCwgJWcyOwkJCQlcCisJbW92CVRTVEFURV9TWVNDQUxMLCAlZzM7CQkJXAorCXNldGhpCSVoaSgxMDlmKSwgJWc3OwkJCQlcCisJYmEscHQJJXhjYywgZXRyYXBfc3lzY2FsbDsJCQlcCisxMDk6CSBvcgklZzcsICVsbygxMDliKSwgJWc3OwkJCVwKKwlzZXRoaQklaGkoc3lzdGJsKSwgJWw3OwkJCVwKKwliYSxwdAkleGNjLCByb3V0aW5lOwkJCQlcCisJIG9yCSVsNywgJWxvKHN5c3RibCksICVsNzsKKworI2RlZmluZSBUUkFQX1VUUkFQKGhhbmRsZXIsbHZsKQkJCQlcCisJbW92CWhhbmRsZXIsICVnMzsJCQkJXAorCWJhLHB0CSV4Y2MsIHV0cmFwX3RyYXA7CQkJXAorCSBtb3YJbHZsLCAlZzQ7CQkJCVwKKwlub3A7CQkJCQkJXAorCW5vcDsJCQkJCQlcCisJbm9wOwkJCQkJCVwKKwlub3A7CQkJCQkJXAorCW5vcDsKKworI2lmZGVmIENPTkZJR19DT01QQVQKKyNkZWZpbmUJTElOVVhfMzJCSVRfU1lTQ0FMTF9UUkFQIFNZU0NBTExfVFJBUChsaW51eF9zcGFyY19zeXNjYWxsMzIsIHN5c19jYWxsX3RhYmxlMzIpCisjZWxzZQorI2RlZmluZQlMSU5VWF8zMkJJVF9TWVNDQUxMX1RSQVAgQlRSQVAoMHgxMTApCisjZW5kaWYKKyNkZWZpbmUgTElOVVhfNjRCSVRfU1lTQ0FMTF9UUkFQIFNZU0NBTExfVFJBUChsaW51eF9zcGFyY19zeXNjYWxsLCBzeXNfY2FsbF90YWJsZTY0KQorI2RlZmluZSBHRVRDQ19UUkFQIFRSQVAoZ2V0Y2MpCisjZGVmaW5lIFNFVENDX1RSQVAgVFJBUChzZXRjYykKKyNkZWZpbmUgQlJFQUtQT0lOVF9UUkFQIFRSQVAoYnJlYWtwb2ludF90cmFwKQorCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisKKyNkZWZpbmUgVFJBUF9JUlEocm91dGluZSwgbGV2ZWwpCQkJXAorCXJkcHIJJXBpbCwgJWcyOwkJCQlcCisJd3JwcgklZzAsIDE1LCAlcGlsOwkJCQlcCisJc2V0aGkJJWhpKDFmLTQpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcF9pcnE7CQkJXAorCSBvcgklZzcsICVsbygxZi00KSwgJWc3OwkJCVwKKwlub3A7CQkJCQkJXAorCW5vcDsJCQkJCQlcCisJbm9wOwkJCQkJCVwKKwkuc3Vic2VjdGlvbgkyOwkJCQlcCisxOgljYWxsCXRyYWNlX2hhcmRpcnFzX29mZjsJCQlcCisJIG5vcDsJCQkJCQlcCisJbW92CWxldmVsLCAlbzA7CQkJCVwKKwljYWxsCXJvdXRpbmU7CQkJCVwKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8xOwkJCVwKKwliYSxhLHB0CSV4Y2MsIHJ0cmFwX2lycTsJCQlcCisJLnByZXZpb3VzOworCisjZWxzZQorCisjZGVmaW5lIFRSQVBfSVJRKHJvdXRpbmUsIGxldmVsKQkJCVwKKwlyZHByCSVwaWwsICVnMjsJCQkJXAorCXdycHIJJWcwLCAxNSwgJXBpbDsJCQkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwX2lycTsJCQlcCisJIHJkCSVwYywgJWc3OwkJCQlcCisJbW92CWxldmVsLCAlbzA7CQkJCVwKKwljYWxsCXJvdXRpbmU7CQkJCVwKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8xOwkJCVwKKwliYSxhLHB0CSV4Y2MsIHJ0cmFwX2lycTsKKworI2VuZGlmCisKKyNkZWZpbmUgVFJBUF9JVkVDIFRSQVBfTk9TQVZFKGRvX2l2ZWMpCisKKyNkZWZpbmUgQlRSQVAobHZsKSBUUkFQX0FSRyhiYWRfdHJhcCwgbHZsKQorCisjZGVmaW5lIEJUUkFQVEwxKGx2bCkgVFJBUFRMMV9BUkcoYmFkX3RyYXBfdGwxLCBsdmwpCisKKyNkZWZpbmUgRkxVU0hfV0lORE9XX1RSQVAJCQkJCQlcCisJYmEscHQJJXhjYywgZXRyYXA7CQkJCQkJXAorCSByZAklcGMsICVnNzsJCQkJCQlcCisJZmx1c2h3OwkJCQkJCQkJXAorCWxkeAlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1ROUENdLCAlbDE7CQkJXAorCWFkZAklbDEsIDQsICVsMjsJCQkJCQlcCisJc3R4CSVsMSwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UUENdOwkJCVwKKwliYSxwdAkleGNjLCBydHJhcDsJCQkJCQlcCisJIHN0eAklbDIsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfVE5QQ107CisKKyNpZmRlZiBDT05GSUdfS1BST0JFUworI2RlZmluZSBLUFJPQkVTX1RSQVAobHZsKSBUUkFQX0lSUShrcHJvYmVfdHJhcCwgbHZsKQorI2Vsc2UKKyNkZWZpbmUgS1BST0JFU19UUkFQKGx2bCkgVFJBUF9BUkcoYmFkX3RyYXAsIGx2bCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tHREIKKyNkZWZpbmUgS0dEQl9UUkFQKGx2bCkgVFJBUF9JUlEoa2dkYl90cmFwLCBsdmwpCisjZWxzZQorI2RlZmluZSBLR0RCX1RSQVAobHZsKSBUUkFQX0FSRyhiYWRfdHJhcCwgbHZsKQorI2VuZGlmCisKKyNkZWZpbmUgU1VONFZfSVRTQl9NSVNTCQkJCQlcCisJbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWcyOwkJXAorCWxkeAlbJWcyICsgSFZfRkFVTFRfSV9BRERSX09GRlNFVF0sICVnNDsJXAorCWxkeAlbJWcyICsgSFZfRkFVTFRfSV9DVFhfT0ZGU0VUXSwgJWc1OwlcCisJc3JseAklZzQsIDIyLCAlZzY7CQkJCVwKKwliYSxwdAkleGNjLCBzdW40dl9pdHNiX21pc3M7CQkJXAorCSBub3A7CQkJCQkJXAorCW5vcDsJCQkJCQlcCisJbm9wOworCisjZGVmaW5lIFNVTjRWX0RUU0JfTUlTUwkJCQkJXAorCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnMjsJCVwKKwlsZHgJWyVnMiArIEhWX0ZBVUxUX0RfQUREUl9PRkZTRVRdLCAlZzQ7CVwKKwlsZHgJWyVnMiArIEhWX0ZBVUxUX0RfQ1RYX09GRlNFVF0sICVnNTsJXAorCXNybHgJJWc0LCAyMiwgJWc2OwkJCQlcCisJYmEscHQJJXhjYywgc3VuNHZfZHRzYl9taXNzOwkJCVwKKwkgbm9wOwkJCQkJCVwKKwlub3A7CQkJCQkJXAorCW5vcDsKKworLyogQmVmb3JlIHRvdWNoaW5nIHRoZXNlIG1hY3JvcywgeW91IG93ZSBpdCB0byB5b3Vyc2VsZiB0byBnbyBhbmQKKyAqIHNlZSBob3cgYXJjaC9zcGFyYzY0L2tlcm5lbC93aW5maXh1cC5TIHdvcmtzLi4uIC1EYXZlTQorICoKKyAqIEZvciB0aGUgdXNlciBjYXNlcyB3ZSB1c2VkIHRvIHVzZSB0aGUgJWFzaSByZWdpc3RlciwgYnV0CisgKiBpdCB0dXJucyBvdXQgdGhhdCB0aGUgIndyIHh4eCwgJWFzaSIgY29zdHMgfjUgY3ljbGVzLCBzbworICogbm93IHdlIHVzZSBpbW1lZGlhdGUgQVNJIGxvYWRzIGFuZCBzdG9yZXMgaW5zdGVhZC4gIEt1ZG9zCisgKiB0byBHcmVnIE9udWZlciBmb3IgcG9pbnRpbmcgb3V0IHRoaXMgcGVyZm9ybWFuY2UgYW5vbWFseS4KKyAqCisgKiBGdXJ0aGVyIG5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlIHRoZSBnMiwgZzQsIGc1LCBhbmQgZzcgYWx0ZXJuYXRlCisgKiBnbG9iYWxzIGluIHRoZSBzcGlsbCByb3V0aW5lcywgY2hlY2sgb3V0IHRoZSBzYXZlIGluc3RydWN0aW9uIGluCisgKiBhcmNoL3NwYXJjNjQva2VybmVsL2V0cmFwLlMgdG8gc2VlIHdoYXQgSSBtZWFuIGFib3V0IGcyLCBhbmQKKyAqIGc0L2c1IGFyZSB0aGUgZ2xvYmFscyB3aGljaCBhcmUgcHJlc2VydmVkIGJ5IGV0cmFwIHByb2Nlc3NpbmcKKyAqIGZvciB0aGUgY2FsbGVyIG9mIGl0LiAgVGhlIGc3IHJlZ2lzdGVyIGlzIHRoZSByZXR1cm4gcGMgZm9yCisgKiBldHJhcC4gIEZpbmFsbHksIGc2IGlzIHRoZSBjdXJyZW50IHRocmVhZCByZWdpc3RlciBzbyB3ZSBjYW5ub3QKKyAqIHVzIGl0IGluIHRoZSBzcGlsbCBoYW5kbGVycyBlaXRoZXIuICBNb3N0IG9mIHRoZXNlIHJ1bGVzIGRvIG5vdAorICogYXBwbHkgdG8gZmlsbCBwcm9jZXNzaW5nLCBvbmx5IGc2IGlzIG5vdCB1c2FibGUuCisgKi8KKworLyogTm9ybWFsIGtlcm5lbCBzcGlsbCAqLworI2RlZmluZSBTUElMTF8wX05PUk1BTAkJCQkJXAorCXN0eAklbDAsIFslc3AgKyBTVEFDS19CSUFTICsgMHgwMF07CQlcCisJc3R4CSVsMSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDA4XTsJCVwKKwlzdHgJJWwyLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MTBdOwkJXAorCXN0eAklbDMsIFslc3AgKyBTVEFDS19CSUFTICsgMHgxOF07CQlcCisJc3R4CSVsNCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDIwXTsJCVwKKwlzdHgJJWw1LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MjhdOwkJXAorCXN0eAklbDYsIFslc3AgKyBTVEFDS19CSUFTICsgMHgzMF07CQlcCisJc3R4CSVsNywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDM4XTsJCVwKKwlzdHgJJWkwLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NDBdOwkJXAorCXN0eAklaTEsIFslc3AgKyBTVEFDS19CSUFTICsgMHg0OF07CQlcCisJc3R4CSVpMiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDUwXTsJCVwKKwlzdHgJJWkzLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NThdOwkJXAorCXN0eAklaTQsIFslc3AgKyBTVEFDS19CSUFTICsgMHg2MF07CQlcCisJc3R4CSVpNSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDY4XTsJCVwKKwlzdHgJJWk2LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NzBdOwkJXAorCXN0eAklaTcsIFslc3AgKyBTVEFDS19CSUFTICsgMHg3OF07CQlcCisJc2F2ZWQ7IHJldHJ5OyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwlcCisJbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7CisKKyNkZWZpbmUgU1BJTExfMF9OT1JNQUxfRVRSQVAJCQkJXAorZXRyYXBfa2VybmVsX3NwaWxsOgkJCQkJXAorCXN0eAklbDAsIFslc3AgKyBTVEFDS19CSUFTICsgMHgwMF07CQlcCisJc3R4CSVsMSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDA4XTsJCVwKKwlzdHgJJWwyLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MTBdOwkJXAorCXN0eAklbDMsIFslc3AgKyBTVEFDS19CSUFTICsgMHgxOF07CQlcCisJc3R4CSVsNCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDIwXTsJCVwKKwlzdHgJJWw1LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MjhdOwkJXAorCXN0eAklbDYsIFslc3AgKyBTVEFDS19CSUFTICsgMHgzMF07CQlcCisJc3R4CSVsNywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDM4XTsJCVwKKwlzdHgJJWkwLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NDBdOwkJXAorCXN0eAklaTEsIFslc3AgKyBTVEFDS19CSUFTICsgMHg0OF07CQlcCisJc3R4CSVpMiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDUwXTsJCVwKKwlzdHgJJWkzLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NThdOwkJXAorCXN0eAklaTQsIFslc3AgKyBTVEFDS19CSUFTICsgMHg2MF07CQlcCisJc3R4CSVpNSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDY4XTsJCVwKKwlzdHgJJWk2LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NzBdOwkJXAorCXN0eAklaTcsIFslc3AgKyBTVEFDS19CSUFTICsgMHg3OF07CQlcCisJc2F2ZWQ7CQkJCQkJXAorCXN1YgklZzEsIDIsICVnMTsJCQkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwX3NhdmU7CQkJXAorCXdycHIJJWcxLCAlY3dwOwkJCQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7CQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOworCisvKiBOb3JtYWwgNjRiaXQgc3BpbGwgKi8KKyNkZWZpbmUgU1BJTExfMV9HRU5FUklDKEFTSSkJCQkJXAorCWFkZAklc3AsIFNUQUNLX0JJQVMgKyAweDAwLCAlZzE7CQlcCisJc3R4YQklbDAsIFslZzEgKyAlZzBdIEFTSTsJCQlcCisJbW92CTB4MDgsICVnMzsJCQkJXAorCXN0eGEJJWwxLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWwyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWwzLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWw0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWw1LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWw2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWw3LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWkwLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWkxLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWkyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWkzLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWk0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWk1LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAorCXN0eGEJJWk2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0eGEJJWk3LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCXNhdmVkOwkJCQkJCVwKKwlyZXRyeTsgbm9wOyBub3A7CQkJCVwKKwliLGEscHQJJXhjYywgc3BpbGxfZml4dXBfZGF4OwkJCVwKKwliLGEscHQJJXhjYywgc3BpbGxfZml4dXBfbW5hOwkJCVwKKwliLGEscHQJJXhjYywgc3BpbGxfZml4dXA7CisKKyNkZWZpbmUgU1BJTExfMV9HRU5FUklDX0VUUkFQCQkJCVwKK2V0cmFwX3VzZXJfc3BpbGxfNjRiaXQ6CQkJCQlcCisJc3R4YQklbDAsIFslc3AgKyBTVEFDS19CSUFTICsgMHgwMF0gJWFzaTsJXAorCXN0eGEJJWwxLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MDhdICVhc2k7CVwKKwlzdHhhCSVsMiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDEwXSAlYXNpOwlcCisJc3R4YQklbDMsIFslc3AgKyBTVEFDS19CSUFTICsgMHgxOF0gJWFzaTsJXAorCXN0eGEJJWw0LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MjBdICVhc2k7CVwKKwlzdHhhCSVsNSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDI4XSAlYXNpOwlcCisJc3R4YQklbDYsIFslc3AgKyBTVEFDS19CSUFTICsgMHgzMF0gJWFzaTsJXAorCXN0eGEJJWw3LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MzhdICVhc2k7CVwKKwlzdHhhCSVpMCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDQwXSAlYXNpOwlcCisJc3R4YQklaTEsIFslc3AgKyBTVEFDS19CSUFTICsgMHg0OF0gJWFzaTsJXAorCXN0eGEJJWkyLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NTBdICVhc2k7CVwKKwlzdHhhCSVpMywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDU4XSAlYXNpOwlcCisJc3R4YQklaTQsIFslc3AgKyBTVEFDS19CSUFTICsgMHg2MF0gJWFzaTsJXAorCXN0eGEJJWk1LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NjhdICVhc2k7CVwKKwlzdHhhCSVpNiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDcwXSAlYXNpOwlcCisJc3R4YQklaTcsIFslc3AgKyBTVEFDS19CSUFTICsgMHg3OF0gJWFzaTsJXAorCXNhdmVkOwkJCQkJCVwKKwlzdWIJJWcxLCAyLCAlZzE7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcF9zYXZlOwkJCVwKKwkgd3JwcgklZzEsICVjd3A7CQkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOwkJCQlcCisJYmEsYSxwdAkleGNjLCBldHJhcF9zcGlsbF9maXh1cF82NGJpdDsJCVwKKwliYSxhLHB0CSV4Y2MsIGV0cmFwX3NwaWxsX2ZpeHVwXzY0Yml0OwkJXAorCWJhLGEscHQJJXhjYywgZXRyYXBfc3BpbGxfZml4dXBfNjRiaXQ7CisKKyNkZWZpbmUgU1BJTExfMV9HRU5FUklDX0VUUkFQX0ZJWFVQCQkJXAorZXRyYXBfc3BpbGxfZml4dXBfNjRiaXQ6CQkJCVwKKwlsZHViCVslZzYgKyBUSV9XU0FWRURdLCAlZzE7CQkJXAorCXNsbAklZzEsIDMsICVnMzsJCQkJXAorCWFkZAklZzYsICVnMywgJWczOwkJCQlcCisJc3R4CSVzcCwgWyVnMyArIFRJX1JXSU5fU1BUUlNdOwkJXAorCXNsbAklZzEsIDcsICVnMzsJCQkJXAorCWFkZAklZzYsICVnMywgJWczOwkJCQlcCisJc3R4CSVsMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDAwXTsJXAorCXN0eAklbDEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwOF07CVwKKwlzdHgJJWwyLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MTBdOwlcCisJc3R4CSVsMywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDE4XTsJXAorCXN0eAklbDQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyMF07CVwKKwlzdHgJJWw1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjhdOwlcCisJc3R4CSVsNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDMwXTsJXAorCXN0eAklbDcsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzOF07CVwKKwlzdHgJJWkwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NDBdOwlcCisJc3R4CSVpMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDQ4XTsJXAorCXN0eAklaTIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg1MF07CVwKKwlzdHgJJWkzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NThdOwlcCisJc3R4CSVpNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDYwXTsJXAorCXN0eAklaTUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg2OF07CVwKKwlzdHgJJWk2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NzBdOwlcCisJc3R4CSVpNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDc4XTsJXAorCWFkZAklZzEsIDEsICVnMTsJCQkJXAorCXN0YgklZzEsIFslZzYgKyBUSV9XU0FWRURdOwkJCVwKKwlzYXZlZDsJCQkJCQlcCisJcmRwcgklY3dwLCAlZzE7CQkJCVwKKwlzdWIJJWcxLCAyLCAlZzE7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcF9zYXZlOwkJCVwKKwkgd3JwcgklZzEsICVjd3A7CQkJCVwKKwlub3A7IG5vcDsgbm9wCisKKy8qIE5vcm1hbCAzMmJpdCBzcGlsbCAqLworI2RlZmluZSBTUElMTF8yX0dFTkVSSUMoQVNJKQkJCQlcCisJc3JsCSVzcCwgMCwgJXNwOwkJCQlcCisJc3R3YQklbDAsIFslc3AgKyAlZzBdIEFTSTsJCQlcCisJbW92CTB4MDQsICVnMzsJCQkJXAorCXN0d2EJJWwxLCBbJXNwICsgJWczXSBBU0k7CQkJXAorCWFkZAklc3AsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWwyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWwzLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWw0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWw1LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWw2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWw3LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWkwLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWkxLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWkyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWkzLCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWk0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWk1LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAorCXN0d2EJJWk2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAorCXN0d2EJJWk3LCBbJWcxICsgJWczXSBBU0k7CQkJXAorCXNhdmVkOwkJCQkJCVwKKyAgICAgICAgcmV0cnk7IG5vcDsgbm9wOwkJCQlcCisJYixhLHB0CSV4Y2MsIHNwaWxsX2ZpeHVwX2RheDsJCQlcCisJYixhLHB0CSV4Y2MsIHNwaWxsX2ZpeHVwX21uYTsJCQlcCisJYixhLHB0CSV4Y2MsIHNwaWxsX2ZpeHVwOworCisjZGVmaW5lIFNQSUxMXzJfR0VORVJJQ19FVFJBUAkJXAorZXRyYXBfdXNlcl9zcGlsbF8zMmJpdDoJCQlcCisJc3JsCSVzcCwgMCwgJXNwOwkJXAorCXN0d2EJJWwwLCBbJXNwICsgMHgwMF0gJWFzaTsJXAorCXN0d2EJJWwxLCBbJXNwICsgMHgwNF0gJWFzaTsJXAorCXN0d2EJJWwyLCBbJXNwICsgMHgwOF0gJWFzaTsJXAorCXN0d2EJJWwzLCBbJXNwICsgMHgwY10gJWFzaTsJXAorCXN0d2EJJWw0LCBbJXNwICsgMHgxMF0gJWFzaTsJXAorCXN0d2EJJWw1LCBbJXNwICsgMHgxNF0gJWFzaTsJXAorCXN0d2EJJWw2LCBbJXNwICsgMHgxOF0gJWFzaTsJXAorCXN0d2EJJWw3LCBbJXNwICsgMHgxY10gJWFzaTsJXAorCXN0d2EJJWkwLCBbJXNwICsgMHgyMF0gJWFzaTsJXAorCXN0d2EJJWkxLCBbJXNwICsgMHgyNF0gJWFzaTsJXAorCXN0d2EJJWkyLCBbJXNwICsgMHgyOF0gJWFzaTsJXAorCXN0d2EJJWkzLCBbJXNwICsgMHgyY10gJWFzaTsJXAorCXN0d2EJJWk0LCBbJXNwICsgMHgzMF0gJWFzaTsJXAorCXN0d2EJJWk1LCBbJXNwICsgMHgzNF0gJWFzaTsJXAorCXN0d2EJJWk2LCBbJXNwICsgMHgzOF0gJWFzaTsJXAorCXN0d2EJJWk3LCBbJXNwICsgMHgzY10gJWFzaTsJXAorCXNhdmVkOwkJCQlcCisJc3ViCSVnMSwgMiwgJWcxOwkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwX3NhdmU7CVwKKwkgd3JwcgklZzEsICVjd3A7CQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOwkJXAorCW5vcDsgbm9wOyBub3A7IG5vcDsJCVwKKwliYSxhLHB0CSV4Y2MsIGV0cmFwX3NwaWxsX2ZpeHVwXzMyYml0OyBcCisJYmEsYSxwdAkleGNjLCBldHJhcF9zcGlsbF9maXh1cF8zMmJpdDsgXAorCWJhLGEscHQJJXhjYywgZXRyYXBfc3BpbGxfZml4dXBfMzJiaXQ7CisKKyNkZWZpbmUgU1BJTExfMl9HRU5FUklDX0VUUkFQX0ZJWFVQCQkJXAorZXRyYXBfc3BpbGxfZml4dXBfMzJiaXQ6CQkJCVwKKwlsZHViCVslZzYgKyBUSV9XU0FWRURdLCAlZzE7CQkJXAorCXNsbAklZzEsIDMsICVnMzsJCQkJXAorCWFkZAklZzYsICVnMywgJWczOwkJCQlcCisJc3R4CSVzcCwgWyVnMyArIFRJX1JXSU5fU1BUUlNdOwkJXAorCXNsbAklZzEsIDcsICVnMzsJCQkJXAorCWFkZAklZzYsICVnMywgJWczOwkJCQlcCisJc3R3CSVsMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDAwXTsJXAorCXN0dwklbDEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwNF07CVwKKwlzdHcJJWwyLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MDhdOwlcCisJc3R3CSVsMywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDBjXTsJXAorCXN0dwklbDQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxMF07CVwKKwlzdHcJJWw1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MTRdOwlcCisJc3R3CSVsNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDE4XTsJXAorCXN0dwklbDcsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxY107CVwKKwlzdHcJJWkwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjBdOwlcCisJc3R3CSVpMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDI0XTsJXAorCXN0dwklaTIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyOF07CVwKKwlzdHcJJWkzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MmNdOwlcCisJc3R3CSVpNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDMwXTsJXAorCXN0dwklaTUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzNF07CVwKKwlzdHcJJWk2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MzhdOwlcCisJc3R3CSVpNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDNjXTsJXAorCWFkZAklZzEsIDEsICVnMTsJCQkJXAorCXN0YgklZzEsIFslZzYgKyBUSV9XU0FWRURdOwkJCVwKKwlzYXZlZDsJCQkJCQlcCisJcmRwcgklY3dwLCAlZzE7CQkJCVwKKwlzdWIJJWcxLCAyLCAlZzE7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcF9zYXZlOwkJCVwKKwkgd3JwcgklZzEsICVjd3A7CQkJCVwKKwlub3A7IG5vcDsgbm9wCisKKyNkZWZpbmUgU1BJTExfMV9OT1JNQUwgU1BJTExfMV9HRU5FUklDKEFTSV9BSVVQKQorI2RlZmluZSBTUElMTF8yX05PUk1BTCBTUElMTF8yX0dFTkVSSUMoQVNJX0FJVVApCisjZGVmaW5lIFNQSUxMXzNfTk9STUFMIFNQSUxMXzBfTk9STUFMCisjZGVmaW5lIFNQSUxMXzRfTk9STUFMIFNQSUxMXzBfTk9STUFMCisjZGVmaW5lIFNQSUxMXzVfTk9STUFMIFNQSUxMXzBfTk9STUFMCisjZGVmaW5lIFNQSUxMXzZfTk9STUFMIFNQSUxMXzBfTk9STUFMCisjZGVmaW5lIFNQSUxMXzdfTk9STUFMIFNQSUxMXzBfTk9STUFMCisKKyNkZWZpbmUgU1BJTExfMF9PVEhFUiBTUElMTF8wX05PUk1BTAorI2RlZmluZSBTUElMTF8xX09USEVSIFNQSUxMXzFfR0VORVJJQyhBU0lfQUlVUykKKyNkZWZpbmUgU1BJTExfMl9PVEhFUiBTUElMTF8yX0dFTkVSSUMoQVNJX0FJVVMpCisjZGVmaW5lIFNQSUxMXzNfT1RIRVIgU1BJTExfM19OT1JNQUwKKyNkZWZpbmUgU1BJTExfNF9PVEhFUiBTUElMTF80X05PUk1BTAorI2RlZmluZSBTUElMTF81X09USEVSIFNQSUxMXzVfTk9STUFMCisjZGVmaW5lIFNQSUxMXzZfT1RIRVIgU1BJTExfNl9OT1JNQUwKKyNkZWZpbmUgU1BJTExfN19PVEhFUiBTUElMTF83X05PUk1BTAorCisvKiBOb3JtYWwga2VybmVsIGZpbGwgKi8KKyNkZWZpbmUgRklMTF8wX05PUk1BTAkJCQkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MDBdLCAlbDA7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgwOF0sICVsMTsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDEwXSwgJWwyOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MThdLCAlbDM7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgyMF0sICVsNDsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDI4XSwgJWw1OwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MzBdLCAlbDY7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgzOF0sICVsNzsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDQwXSwgJWkwOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NDhdLCAlaTE7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg1MF0sICVpMjsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDU4XSwgJWkzOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NjBdLCAlaTQ7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg2OF0sICVpNTsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDcwXSwgJWk2OwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NzhdLCAlaTc7CQlcCisJcmVzdG9yZWQ7IHJldHJ5OyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwlcCisJbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7CisKKyNkZWZpbmUgRklMTF8wX05PUk1BTF9SVFJBUAkJCQlcCitrZXJuX3J0dF9maWxsOgkJCQkJCVwKKwlyZHByCSVjd3AsICVnMTsJCQkJXAorCXN1YgklZzEsIDEsICVnMTsJCQkJXAorCXdycHIJJWcxLCAlY3dwOwkJCQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgwMF0sICVsMDsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDA4XSwgJWwxOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MTBdLCAlbDI7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgxOF0sICVsMzsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDIwXSwgJWw0OwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MjhdLCAlbDU7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgzMF0sICVsNjsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDM4XSwgJWw3OwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NDBdLCAlaTA7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg0OF0sICVpMTsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDUwXSwgJWkyOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NThdLCAlaTM7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg2MF0sICVpNDsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDY4XSwgJWk1OwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NzBdLCAlaTY7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg3OF0sICVpNzsJCVwKKwlyZXN0b3JlZDsJCQkJCVwKKwlhZGQJJWcxLCAxLCAlZzE7CQkJCVwKKwliYSxwdAkleGNjLCBrZXJuX3J0dF9yZXN0b3JlOwkJCVwKKwkgd3JwcgklZzEsICVjd3A7CQkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOworCisKKy8qIE5vcm1hbCA2NGJpdCBmaWxsICovCisjZGVmaW5lIEZJTExfMV9HRU5FUklDKEFTSSkJCQkJXAorCWFkZAklc3AsIFNUQUNLX0JJQVMgKyAweDAwLCAlZzE7CQlcCisJbGR4YQlbJWcxICsgJWcwXSBBU0ksICVsMDsJCQlcCisJbW92CTB4MDgsICVnMjsJCQkJXAorCW1vdgkweDEwLCAlZzM7CQkJCVwKKwlsZHhhCVslZzEgKyAlZzJdIEFTSSwgJWwxOwkJCVwKKwltb3YJMHgxOCwgJWc1OwkJCQlcCisJbGR4YQlbJWcxICsgJWczXSBBU0ksICVsMjsJCQlcCisJbGR4YQlbJWcxICsgJWc1XSBBU0ksICVsMzsJCQlcCisJYWRkCSVnMSwgMHgyMCwgJWcxOwkJCQlcCisJbGR4YQlbJWcxICsgJWcwXSBBU0ksICVsNDsJCQlcCisJbGR4YQlbJWcxICsgJWcyXSBBU0ksICVsNTsJCQlcCisJbGR4YQlbJWcxICsgJWczXSBBU0ksICVsNjsJCQlcCisJbGR4YQlbJWcxICsgJWc1XSBBU0ksICVsNzsJCQlcCisJYWRkCSVnMSwgMHgyMCwgJWcxOwkJCQlcCisJbGR4YQlbJWcxICsgJWcwXSBBU0ksICVpMDsJCQlcCisJbGR4YQlbJWcxICsgJWcyXSBBU0ksICVpMTsJCQlcCisJbGR4YQlbJWcxICsgJWczXSBBU0ksICVpMjsJCQlcCisJbGR4YQlbJWcxICsgJWc1XSBBU0ksICVpMzsJCQlcCisJYWRkCSVnMSwgMHgyMCwgJWcxOwkJCQlcCisJbGR4YQlbJWcxICsgJWcwXSBBU0ksICVpNDsJCQlcCisJbGR4YQlbJWcxICsgJWcyXSBBU0ksICVpNTsJCQlcCisJbGR4YQlbJWcxICsgJWczXSBBU0ksICVpNjsJCQlcCisJbGR4YQlbJWcxICsgJWc1XSBBU0ksICVpNzsJCQlcCisJcmVzdG9yZWQ7CQkJCQlcCisJcmV0cnk7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCisJYixhLHB0CSV4Y2MsIGZpbGxfZml4dXBfZGF4OwkJCVwKKwliLGEscHQJJXhjYywgZmlsbF9maXh1cF9tbmE7CQkJXAorCWIsYSxwdAkleGNjLCBmaWxsX2ZpeHVwOworCisjZGVmaW5lIEZJTExfMV9HRU5FUklDX1JUUkFQCQkJCVwKK3VzZXJfcnR0X2ZpbGxfNjRiaXQ6CQkJCQlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4MDBdICVhc2ksICVsMDsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDA4XSAlYXNpLCAlbDE7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHgxMF0gJWFzaSwgJWwyOwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4MThdICVhc2ksICVsMzsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDIwXSAlYXNpLCAlbDQ7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHgyOF0gJWFzaSwgJWw1OwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4MzBdICVhc2ksICVsNjsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDM4XSAlYXNpLCAlbDc7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHg0MF0gJWFzaSwgJWkwOwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4NDhdICVhc2ksICVpMTsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDUwXSAlYXNpLCAlaTI7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHg1OF0gJWFzaSwgJWkzOwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4NjBdICVhc2ksICVpNDsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDY4XSAlYXNpLCAlaTU7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHg3MF0gJWFzaSwgJWk2OwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4NzhdICVhc2ksICVpNzsJXAorCWJhLHB0CSV4Y2MsIHVzZXJfcnR0X3ByZV9yZXN0b3JlOwkJXAorCSByZXN0b3JlZDsJCQkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCisJYmEsYSxwdAkleGNjLCB1c2VyX3J0dF9maWxsX2ZpeHVwOwkJXAorCWJhLGEscHQJJXhjYywgdXNlcl9ydHRfZmlsbF9maXh1cDsJCVwKKwliYSxhLHB0CSV4Y2MsIHVzZXJfcnR0X2ZpbGxfZml4dXA7CisKKworLyogTm9ybWFsIDMyYml0IGZpbGwgKi8KKyNkZWZpbmUgRklMTF8yX0dFTkVSSUMoQVNJKQkJCQlcCisJc3JsCSVzcCwgMCwgJXNwOwkJCQlcCisJbGR1d2EJWyVzcCArICVnMF0gQVNJLCAlbDA7CQkJXAorCW1vdgkweDA0LCAlZzI7CQkJCVwKKwltb3YJMHgwOCwgJWczOwkJCQlcCisJbGR1d2EJWyVzcCArICVnMl0gQVNJLCAlbDE7CQkJXAorCW1vdgkweDBjLCAlZzU7CQkJCVwKKwlsZHV3YQlbJXNwICsgJWczXSBBU0ksICVsMjsJCQlcCisJbGR1d2EJWyVzcCArICVnNV0gQVNJLCAlbDM7CQkJXAorCWFkZAklc3AsIDB4MTAsICVnMTsJCQkJXAorCWxkdXdhCVslZzEgKyAlZzBdIEFTSSwgJWw0OwkJCVwKKwlsZHV3YQlbJWcxICsgJWcyXSBBU0ksICVsNTsJCQlcCisJbGR1d2EJWyVnMSArICVnM10gQVNJLCAlbDY7CQkJXAorCWxkdXdhCVslZzEgKyAlZzVdIEFTSSwgJWw3OwkJCVwKKwlhZGQJJWcxLCAweDEwLCAlZzE7CQkJCVwKKwlsZHV3YQlbJWcxICsgJWcwXSBBU0ksICVpMDsJCQlcCisJbGR1d2EJWyVnMSArICVnMl0gQVNJLCAlaTE7CQkJXAorCWxkdXdhCVslZzEgKyAlZzNdIEFTSSwgJWkyOwkJCVwKKwlsZHV3YQlbJWcxICsgJWc1XSBBU0ksICVpMzsJCQlcCisJYWRkCSVnMSwgMHgxMCwgJWcxOwkJCQlcCisJbGR1d2EJWyVnMSArICVnMF0gQVNJLCAlaTQ7CQkJXAorCWxkdXdhCVslZzEgKyAlZzJdIEFTSSwgJWk1OwkJCVwKKwlsZHV3YQlbJWcxICsgJWczXSBBU0ksICVpNjsJCQlcCisJbGR1d2EJWyVnMSArICVnNV0gQVNJLCAlaTc7CQkJXAorCXJlc3RvcmVkOwkJCQkJXAorCXJldHJ5OyBub3A7IG5vcDsgbm9wOyBub3A7CQkJXAorCWIsYSxwdAkleGNjLCBmaWxsX2ZpeHVwX2RheDsJCQlcCisJYixhLHB0CSV4Y2MsIGZpbGxfZml4dXBfbW5hOwkJCVwKKwliLGEscHQJJXhjYywgZmlsbF9maXh1cDsKKworI2RlZmluZSBGSUxMXzJfR0VORVJJQ19SVFJBUAkJCQlcCit1c2VyX3J0dF9maWxsXzMyYml0OgkJCQkJXAorCXNybAklc3AsIDAsICVzcDsJCQkJXAorCWxkdXdhCVslc3AgKyAweDAwXSAlYXNpLCAlbDA7CQkJXAorCWxkdXdhCVslc3AgKyAweDA0XSAlYXNpLCAlbDE7CQkJXAorCWxkdXdhCVslc3AgKyAweDA4XSAlYXNpLCAlbDI7CQkJXAorCWxkdXdhCVslc3AgKyAweDBjXSAlYXNpLCAlbDM7CQkJXAorCWxkdXdhCVslc3AgKyAweDEwXSAlYXNpLCAlbDQ7CQkJXAorCWxkdXdhCVslc3AgKyAweDE0XSAlYXNpLCAlbDU7CQkJXAorCWxkdXdhCVslc3AgKyAweDE4XSAlYXNpLCAlbDY7CQkJXAorCWxkdXdhCVslc3AgKyAweDFjXSAlYXNpLCAlbDc7CQkJXAorCWxkdXdhCVslc3AgKyAweDIwXSAlYXNpLCAlaTA7CQkJXAorCWxkdXdhCVslc3AgKyAweDI0XSAlYXNpLCAlaTE7CQkJXAorCWxkdXdhCVslc3AgKyAweDI4XSAlYXNpLCAlaTI7CQkJXAorCWxkdXdhCVslc3AgKyAweDJjXSAlYXNpLCAlaTM7CQkJXAorCWxkdXdhCVslc3AgKyAweDMwXSAlYXNpLCAlaTQ7CQkJXAorCWxkdXdhCVslc3AgKyAweDM0XSAlYXNpLCAlaTU7CQkJXAorCWxkdXdhCVslc3AgKyAweDM4XSAlYXNpLCAlaTY7CQkJXAorCWxkdXdhCVslc3AgKyAweDNjXSAlYXNpLCAlaTc7CQkJXAorCWJhLHB0CSV4Y2MsIHVzZXJfcnR0X3ByZV9yZXN0b3JlOwkJXAorCSByZXN0b3JlZDsJCQkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7CQkJXAorCWJhLGEscHQJJXhjYywgdXNlcl9ydHRfZmlsbF9maXh1cDsJCVwKKwliYSxhLHB0CSV4Y2MsIHVzZXJfcnR0X2ZpbGxfZml4dXA7CQlcCisJYmEsYSxwdAkleGNjLCB1c2VyX3J0dF9maWxsX2ZpeHVwOworCisKKyNkZWZpbmUgRklMTF8xX05PUk1BTCBGSUxMXzFfR0VORVJJQyhBU0lfQUlVUCkKKyNkZWZpbmUgRklMTF8yX05PUk1BTCBGSUxMXzJfR0VORVJJQyhBU0lfQUlVUCkKKyNkZWZpbmUgRklMTF8zX05PUk1BTCBGSUxMXzBfTk9STUFMCisjZGVmaW5lIEZJTExfNF9OT1JNQUwgRklMTF8wX05PUk1BTAorI2RlZmluZSBGSUxMXzVfTk9STUFMIEZJTExfMF9OT1JNQUwKKyNkZWZpbmUgRklMTF82X05PUk1BTCBGSUxMXzBfTk9STUFMCisjZGVmaW5lIEZJTExfN19OT1JNQUwgRklMTF8wX05PUk1BTAorCisjZGVmaW5lIEZJTExfMF9PVEhFUiBGSUxMXzBfTk9STUFMCisjZGVmaW5lIEZJTExfMV9PVEhFUiBGSUxMXzFfR0VORVJJQyhBU0lfQUlVUykKKyNkZWZpbmUgRklMTF8yX09USEVSIEZJTExfMl9HRU5FUklDKEFTSV9BSVVTKQorI2RlZmluZSBGSUxMXzNfT1RIRVIgRklMTF8zX05PUk1BTAorI2RlZmluZSBGSUxMXzRfT1RIRVIgRklMTF80X05PUk1BTAorI2RlZmluZSBGSUxMXzVfT1RIRVIgRklMTF81X05PUk1BTAorI2RlZmluZSBGSUxMXzZfT1RIRVIgRklMTF82X05PUk1BTAorI2RlZmluZSBGSUxMXzdfT1RIRVIgRklMTF83X05PUk1BTAorCisjZW5kaWYgLyogIShfU1BBUkM2NF9UVEFCTEVfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90eXBlcy5oCmluZGV4IDA3NzM0ZjkuLjhjMjhmZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdHlwZXMuaApAQCAtMSw2ICsxLDUgQEAKICNpZm5kZWYgX1NQQVJDX1RZUEVTX0gKICNkZWZpbmUgX1NQQVJDX1RZUEVTX0gKLQogLyoKICAqIFRoaXMgZmlsZSBpcyBuZXZlciBpbmNsdWRlZCBieSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSB1bmxlc3MKICAqIGV4cGxpY2l0bHkgcmVxdWVzdGVkIChlLmcuLCB2aWEgbGludXgvdHlwZXMuaCkgaW4gd2hpY2ggY2FzZSB0aGUKQEAgLTgsNiArNywzNSBAQAogICogbm90IGEgbWFqb3IgaXNzdWUuICBIb3dldmVyLCBmb3IgaW50ZXJvcGVyYWJpbGl0eSwgbGlicmFyaWVzIHN0aWxsCiAgKiBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gYXZvaWQgYSBuYW1lIGNsYXNoZXMuCiAgKi8KKworI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisKKy8qKiogU1BBUkMgNjQgYml0ICoqKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbDY0Lmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgNjQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogRG1hIGFkZHJlc3NlcyBjb21lIGluIGdlbmVyaWMgYW5kIDY0LWJpdCBmbGF2b3Vycy4gICovCisKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Cit0eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbHNlCisKKy8qKiogU1BBUkMgMzIgYml0ICoqKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtMjksNCArNTcsNiBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCisjZW5kaWYgLyogZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykgKi8KKwogI2VuZGlmIC8qIGRlZmluZWQoX1NQQVJDX1RZUEVTX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzLmgKaW5kZXggNDdkNTYxOS4uNDI0ZmFjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VhY2Nlc3MuaApAQCAtMSwzMzYgKzEsOCBAQAotLyoKLSAqIHVhY2Nlc3MuaDogVXNlciBzcGFjZSBtZW1vcmUgYWNjZXNzIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKLSAqLwotI2lmbmRlZiBfQVNNX1VBQ0NFU1NfSAotI2RlZmluZSBfQVNNX1VBQ0NFU1NfSAotCi0jaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGFzbS92YWMtb3BzLmg+CisjaWZuZGVmIF9fX0FTTV9TUEFSQ19VQUNDRVNTX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1VBQ0NFU1NfSAorI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaW5jbHVkZSA8YXNtLXNwYXJjL3VhY2Nlc3NfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL3VhY2Nlc3NfMzIuaD4KICNlbmRpZgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKiBTcGFyYyBpcyBub3Qgc2VnbWVudGVkLCBob3dldmVyIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBmb29sIGFjY2Vzc19vaygpCi0gKiB3aGVuIGRvaW5nIHN5c3RlbSBjYWxscyBmcm9tIGtlcm5lbCBtb2RlIGxlZ2l0aW1hdGVseS4KLSAqCi0gKiAiRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLiIgLUxpbnVzCi0gKi8KLQotI2RlZmluZSBLRVJORUxfRFMgICAoKG1tX3NlZ21lbnRfdCkgeyAwIH0pCi0jZGVmaW5lIFVTRVJfRFMgICAgICgobW1fc2VnbWVudF90KSB7IC0xIH0pCi0KLSNkZWZpbmUgVkVSSUZZX1JFQUQJMAotI2RlZmluZSBWRVJJRllfV1JJVEUJMQotCi0jZGVmaW5lIGdldF9kcygpCShLRVJORUxfRFMpCi0jZGVmaW5lIGdldF9mcygpCShjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykKLSNkZWZpbmUgc2V0X2ZzKHZhbCkJKChjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykgPSAodmFsKSkKLQotI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKLQotLyogV2UgaGF2ZSB0aGVyZSBhIG5pY2Ugbm90LW1hcHBlZCBwYWdlIGF0IFBBR0VfT0ZGU0VUIC0gUEFHRV9TSVpFLCBzbyB0aGF0IHRoaXMgdGVzdAotICogY2FuIGJlIGZhaXJseSBsaWdodHdlaWdodC4KLSAqIE5vIG9uZSBjYW4gcmVhZC93cml0ZSBhbnl0aGluZyBmcm9tIHVzZXJsYW5kIGluIHRoZSBrZXJuZWwgc3BhY2UgYnkgc2V0dGluZwotICogbGFyZ2Ugc2l6ZSBhbmQgYWRkcmVzcyBuZWFyIHRvIFBBR0VfT0ZGU0VUIC0gYSBmYXVsdCB3aWxsIGJyZWFrIGhpcyBpbnRlbnRpb25zLgotICovCi0jZGVmaW5lIF9fdXNlcl9vayhhZGRyLCBzaXplKSAoeyAodm9pZCkoc2l6ZSk7IChhZGRyKSA8IFNUQUNLX1RPUDsgfSkKLSNkZWZpbmUgX19rZXJuZWxfb2sgKHNlZ21lbnRfZXEoZ2V0X2ZzKCksIEtFUk5FTF9EUykpCi0jZGVmaW5lIF9fYWNjZXNzX29rKGFkZHIsc2l6ZSkgKF9fdXNlcl9vaygoYWRkcikgJiBnZXRfZnMoKS5zZWcsKHNpemUpKSkKLSNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpCQkJCQlcCi0JKHsgKHZvaWQpKHR5cGUpOyBfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykoYWRkciksIHNpemUpOyB9KQotCi0vKgotICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKLSAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcwotICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQotICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0Ci0gKiB3aGF0IHRvIGRvLgotICoKLSAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQotICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKLSAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKLSAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KLSAqCi0gKiBUaGVyZSBpcyBhIHNwZWNpYWwgd2F5IGhvdyB0byBwdXQgYSByYW5nZSBvZiBwb3RlbnRpYWxseSBmYXVsdGluZwotICogaW5zbnMgKGxpa2UgdHdlbnR5IGxkZC9zdGQncyB3aXRoIG5vdyBpbnRlcnZlbmluZyBvdGhlciBpbnN0cnVjdGlvbnMpCi0gKiBZb3Ugc3BlY2lmeSBhZGRyZXNzIG9mIGZpcnN0IGluIGluc24gYW5kIDAgaW4gZml4dXAgYW5kIGluIHRoZSBuZXh0Ci0gKiBleGNlcHRpb25fdGFibGVfZW50cnkgeW91IHNwZWNpZnkgbGFzdCBwb3RlbnRpYWxseSBmYXVsdGluZyBpbnNuICsgMQotICogYW5kIGluIGZpeHVwIHRoZSByb3V0aW5lIHdoaWNoIHNob3VsZCBoYW5kbGUgdGhlIGZhdWx0LgotICogVGhhdCBmaXh1cCBjb2RlIHdpbGwgZ2V0Ci0gKiAoZmF1bHRpbmdfaW5zbl9hZGRyZXNzIC0gZmlyc3RfaW5zbl9pbl90aGVfcmFuZ2VfYWRkcmVzcykvNAotICogaW4gJWcyIChpZS4gaW5kZXggb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGluIHRoZSByYW5nZSkuCi0gKi8KLQotc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQotewotICAgICAgICB1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOwotfTsKLQotLyogUmV0dXJucyAwIGlmIGV4Y2VwdGlvbiBub3QgZm91bmQgYW5kIGZpeHVwIG90aGVyd2lzZS4gICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzZWFyY2hfZXh0YWJsZXNfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpnMik7Ci0KLWV4dGVybiB2b2lkIF9fcmV0X2VmYXVsdCh2b2lkKTsKLQotLyogVWgsIHRoZXNlIHNob3VsZCBiZWNvbWUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLi4KLSAqIFRoZXkgYXV0b21hdGljYWxseSB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodAotICogcG9pbnRlciB0eXBlLi4KLSAqCi0gKiBUaGlzIGdldHMga2luZCBvZiB1Z2x5LiBXZSB3YW50IHRvIHJldHVybiBfdHdvXyB2YWx1ZXMgaW4gImdldF91c2VyKCkiCi0gKiBhbmQgeWV0IHdlIGRvbid0IHdhbnQgdG8gZG8gYW55IHBvaW50ZXJzLCBiZWNhdXNlIHRoYXQgaXMgdG9vIG11Y2gKLSAqIG9mIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaHVzIHdlIGhhdmUgYSBmZXcgcmF0aGVyIHVnbHkgbWFjcm9zIGhlcmUsCi0gKiBhbmQgaGlkZSBhbGwgdGhlIHVnbGluZXNzIGZyb20gdGhlIHVzZXIuCi0gKi8KLSNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpICh7IFwKLXVuc2lnbmVkIGxvbmcgX19wdV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7IFwKLV9fY2hrX3VzZXJfcHRyKHB0cik7IFwKLV9fcHV0X3VzZXJfY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksX19wdV9hZGRyLHNpemVvZigqKHB0cikpKTsgfSkKLQotI2RlZmluZSBnZXRfdXNlcih4LHB0cikgKHsgXAotdW5zaWduZWQgbG9uZyBfX2d1X2FkZHIgPSAodW5zaWduZWQgbG9uZykocHRyKTsgXAotX19jaGtfdXNlcl9wdHIocHRyKTsgXAotX19nZXRfdXNlcl9jaGVjaygoeCksX19ndV9hZGRyLHNpemVvZigqKHB0cikpLF9fdHlwZW9mX18oKihwdHIpKSk7IH0pCi0KLS8qCi0gKiBUaGUgIl9feHh4IiB2ZXJzaW9ucyBkbyBub3QgZG8gYWRkcmVzcyBzcGFjZSBjaGVja2luZywgdXNlZnVsIHdoZW4KLSAqIGRvaW5nIG11bHRpcGxlIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGFyZWEgKHRoZSB1c2VyIGhhcyB0byBkbyB0aGUKLSAqIGNoZWNrcyBieSBoYW5kIHdpdGggImFjY2Vzc19vaygpIikKLSAqLwotI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSBfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCi0jZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpIF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSksX190eXBlb2ZfXygqKHB0cikpKQotCi1zdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OwotI2RlZmluZSBfX20oeCkgKChzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgX191c2VyICopKHgpKQotCi0jZGVmaW5lIF9fcHV0X3VzZXJfY2hlY2soeCxhZGRyLHNpemUpICh7IFwKLXJlZ2lzdGVyIGludCBfX3B1X3JldDsgXAotaWYgKF9fYWNjZXNzX29rKGFkZHIsc2l6ZSkpIHsgXAotc3dpdGNoIChzaXplKSB7IFwKLWNhc2UgMTogX19wdXRfdXNlcl9hc20oeCxiLGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAotY2FzZSAyOiBfX3B1dF91c2VyX2FzbSh4LGgsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCi1jYXNlIDQ6IF9fcHV0X3VzZXJfYXNtKHgsLGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAotY2FzZSA4OiBfX3B1dF91c2VyX2FzbSh4LGQsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCi1kZWZhdWx0OiBfX3B1X3JldCA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOyBcCi19IH0gZWxzZSB7IF9fcHVfcmV0ID0gLUVGQVVMVDsgfSBfX3B1X3JldDsgfSkKLQotI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxhZGRyLHNpemUpICh7IFwKLXJlZ2lzdGVyIGludCBfX3B1X3JldDsgXAotc3dpdGNoIChzaXplKSB7IFwKLWNhc2UgMTogX19wdXRfdXNlcl9hc20oeCxiLGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAotY2FzZSAyOiBfX3B1dF91c2VyX2FzbSh4LGgsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCi1jYXNlIDQ6IF9fcHV0X3VzZXJfYXNtKHgsLGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAotY2FzZSA4OiBfX3B1dF91c2VyX2FzbSh4LGQsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCi1kZWZhdWx0OiBfX3B1X3JldCA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOyBcCi19IF9fcHVfcmV0OyB9KQotCi0jZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsc2l6ZSxhZGRyLHJldCkJCQkJCVwKLV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCi0JIi8qIFB1dCB1c2VyIGFzbSwgaW5saW5lLiAqL1xuIgkJCQkJXAotIjE6XHQiCSJzdCIjc2l6ZSAiICUxLCAlMlxuXHQiCQkJCQkJXAotCSJjbHIJJTBcbiIJCQkJCQkJXAotIjI6XG5cblx0IgkJCQkJCQkJXAotCSIuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHJcblx0IgkJCQlcCi0JIi5hbGlnbgk0XG4iCQkJCQkJCVwKLSIzOlxuXHQiCQkJCQkJCQlcCi0JImIJMmJcblx0IgkJCQkJCQlcCi0JIiBtb3YJJTMsICUwXG5cdCIJCQkJCQlcCi0gICAgICAgICIucHJldmlvdXNcblxuXHQiCQkJCQkJXAotCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKLQkiLmFsaWduCTRcblx0IgkJCQkJCQlcCi0JIi53b3JkCTFiLCAzYlxuXHQiCQkJCQkJXAotCSIucHJldmlvdXNcblxuXHQiCQkJCQkJXAotICAgICAgIDogIj0mciIgKHJldCkgOiAiciIgKHgpLCAibSIgKCpfX20oYWRkcikpLAkJCVwKLQkgImkiICgtRUZBVUxUKSkKLQotZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKLQotI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgsYWRkcixzaXplLHR5cGUpICh7IFwKLXJlZ2lzdGVyIGludCBfX2d1X3JldDsgXAotcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsgXAotaWYgKF9fYWNjZXNzX29rKGFkZHIsc2l6ZSkpIHsgXAotc3dpdGNoIChzaXplKSB7IFwKLWNhc2UgMTogX19nZXRfdXNlcl9hc20oX19ndV92YWwsdWIsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCi1jYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHVoLGFkZHIsX19ndV9yZXQpOyBicmVhazsgXAotY2FzZSA0OiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCwsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCi1jYXNlIDg6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLGQsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCi1kZWZhdWx0OiBfX2d1X3ZhbCA9IDA7IF9fZ3VfcmV0ID0gX19nZXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKLX0gfSBlbHNlIHsgX19ndV92YWwgPSAwOyBfX2d1X3JldCA9IC1FRkFVTFQ7IH0geCA9ICh0eXBlKSBfX2d1X3ZhbDsgX19ndV9yZXQ7IH0pCi0KLSNkZWZpbmUgX19nZXRfdXNlcl9jaGVja19yZXQoeCxhZGRyLHNpemUsdHlwZSxyZXR2YWwpICh7IFwKLXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19ndV92YWwgX19hc21fXyAoImwxIik7IFwKLWlmIChfX2FjY2Vzc19vayhhZGRyLHNpemUpKSB7IFwKLXN3aXRjaCAoc2l6ZSkgeyBcCi1jYXNlIDE6IF9fZ2V0X3VzZXJfYXNtX3JldChfX2d1X3ZhbCx1YixhZGRyLHJldHZhbCk7IGJyZWFrOyBcCi1jYXNlIDI6IF9fZ2V0X3VzZXJfYXNtX3JldChfX2d1X3ZhbCx1aCxhZGRyLHJldHZhbCk7IGJyZWFrOyBcCi1jYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtX3JldChfX2d1X3ZhbCwsYWRkcixyZXR2YWwpOyBicmVhazsgXAotY2FzZSA4OiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsZCxhZGRyLHJldHZhbCk7IGJyZWFrOyBcCi1kZWZhdWx0OiBpZiAoX19nZXRfdXNlcl9iYWQoKSkgcmV0dXJuIHJldHZhbDsgXAotfSB4ID0gKHR5cGUpIF9fZ3VfdmFsOyB9IGVsc2UgcmV0dXJuIHJldHZhbDsgfSkKLQotI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCxhZGRyLHNpemUsdHlwZSkgKHsgXAotcmVnaXN0ZXIgaW50IF9fZ3VfcmV0OyBcCi1yZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOyBcCi1zd2l0Y2ggKHNpemUpIHsgXAotY2FzZSAxOiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCx1YixhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKLWNhc2UgMjogX19nZXRfdXNlcl9hc20oX19ndV92YWwsdWgsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCi1jYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLCxhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKLWNhc2UgODogX19nZXRfdXNlcl9hc20oX19ndV92YWwsZCxhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKLWRlZmF1bHQ6IF9fZ3VfdmFsID0gMDsgX19ndV9yZXQgPSBfX2dldF91c2VyX2JhZCgpOyBicmVhazsgXAotfSB4ID0gKHR5cGUpIF9fZ3VfdmFsOyBfX2d1X3JldDsgfSkKLQotI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2tfcmV0KHgsYWRkcixzaXplLHR5cGUscmV0dmFsKSAoeyBcCi1yZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZ3VfdmFsIF9fYXNtX18gKCJsMSIpOyBcCi1zd2l0Y2ggKHNpemUpIHsgXAotY2FzZSAxOiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsdWIsYWRkcixyZXR2YWwpOyBicmVhazsgXAotY2FzZSAyOiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsdWgsYWRkcixyZXR2YWwpOyBicmVhazsgXAotY2FzZSA0OiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKLWNhc2UgODogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLGQsYWRkcixyZXR2YWwpOyBicmVhazsgXAotZGVmYXVsdDogaWYgKF9fZ2V0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IFwKLX0geCA9ICh0eXBlKSBfX2d1X3ZhbDsgfSkKLQotI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LHNpemUsYWRkcixyZXQpCQkJCQlcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAotCSIvKiBHZXQgdXNlciBhc20sIGlubGluZS4gKi9cbiIJCQkJCVwKLSIxOlx0IgkibGQiI3NpemUgIiAlMiwgJTFcblx0IgkJCQkJCVwKLQkiY2xyCSUwXG4iCQkJCQkJCVwKLSIyOlxuXG5cdCIJCQkJCQkJCVwKLQkiLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG5cdCIJCQkJXAotCSIuYWxpZ24JNFxuIgkJCQkJCQlcCi0iMzpcblx0IgkJCQkJCQkJXAotCSJjbHIJJTFcblx0IgkJCQkJCQlcCi0JImIJMmJcblx0IgkJCQkJCQlcCi0JIiBtb3YJJTMsICUwXG5cblx0IgkJCQkJCVwKLQkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAotCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKLQkiLmFsaWduCTRcblx0IgkJCQkJCQlcCi0JIi53b3JkCTFiLCAzYlxuXG5cdCIJCQkJCQlcCi0JIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKLSAgICAgICA6ICI9JnIiIChyZXQpLCAiPSZyIiAoeCkgOiAibSIgKCpfX20oYWRkcikpLAkJCVwKLQkgImkiICgtRUZBVUxUKSkKLQotI2RlZmluZSBfX2dldF91c2VyX2FzbV9yZXQoeCxzaXplLGFkZHIscmV0dmFsKQkJCQlcCi1pZiAoX19idWlsdGluX2NvbnN0YW50X3AocmV0dmFsKSAmJiByZXR2YWwgPT0gLUVGQVVMVCkJCQlcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAotCSIvKiBHZXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKLSIxOlx0IgkibGQiI3NpemUgIiAlMSwgJTBcblxuXHQiCQkJCQlcCi0JIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIJCQkJXAotCSIuYWxpZ24JNFxuXHQiCQkJCQkJCVwKLQkiLndvcmQJMWIsX19yZXRfZWZhdWx0XG5cblx0IgkJCQkJXAotCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCi0gICAgICAgOiAiPSZyIiAoeCkgOiAibSIgKCpfX20oYWRkcikpKTsJCQkJCVwKLWVsc2UJCQkJCQkJCQlcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAotCSIvKiBHZXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKLSIxOlx0IgkibGQiI3NpemUgIiAlMSwgJTBcblxuXHQiCQkJCQlcCi0JIi5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuXHQiCQkJCVwKLQkiLmFsaWduCTRcbiIJCQkJCQkJXAotIjM6XG5cdCIJCQkJCQkJCVwKLQkicmV0XG5cdCIJCQkJCQkJXAotCSIgcmVzdG9yZSAlJWcwLCAlMiwgJSVvMFxuXG5cdCIJCQkJCVwKLQkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAotCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKLQkiLmFsaWduCTRcblx0IgkJCQkJCQlcCi0JIi53b3JkCTFiLCAzYlxuXG5cdCIJCQkJCQlcCi0JIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKLSAgICAgICA6ICI9JnIiICh4KSA6ICJtIiAoKl9fbShhZGRyKSksICJpIiAocmV0dmFsKSkKLQotZXh0ZXJuIGludCBfX2dldF91c2VyX2JhZCh2b2lkKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jb3B5X3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplKTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKLXsKLQlpZiAobiAmJiBfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykgdG8sIG4pKQotCQlyZXR1cm4gX19jb3B5X3VzZXIodG8sIChfX2ZvcmNlIHZvaWQgX191c2VyICopIGZyb20sIG4pOwotCWVsc2UKLQkJcmV0dXJuIG47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKLXsKLQlyZXR1cm4gX19jb3B5X3VzZXIodG8sIChfX2ZvcmNlIHZvaWQgX191c2VyICopIGZyb20sIG4pOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCi17Ci0JaWYgKG4gJiYgX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpIGZyb20sIG4pKQotCQlyZXR1cm4gX19jb3B5X3VzZXIoKF9fZm9yY2Ugdm9pZCBfX3VzZXIgKikgdG8sIGZyb20sIG4pOwotCWVsc2UKLQkJcmV0dXJuIG47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQotewotCXJldHVybiBfX2NvcHlfdXNlcigoX19mb3JjZSB2b2lkIF9fdXNlciAqKSB0bywgZnJvbSwgbik7Ci19Ci0KLSNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKLSNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIKLQkJIi5hbGlnbiA0XG5cdCIKLQkJIi53b3JkIDFmLDNcblx0IgotCQkiLnByZXZpb3VzXG5cdCIKLQkJIm1vdiAlMiwgJSVvMVxuIgotCQkiMTpcblx0IgotCQkiY2FsbCBfX2J6ZXJvXG5cdCIKLQkJIiBtb3YgJTEsICUlbzBcblx0IgotCQkibW92ICUlbzAsICUwXG4iCi0JCTogIj1yIiAocmV0KSA6ICJyIiAoYWRkciksICJyIiAoc2l6ZSkgOgotCQkibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLCAibzciLAotCQkiZzEiLCAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLCAiZzciLCAiY2MiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGVhcl91c2VyKHZvaWQgX191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIG4pCi17Ci0JaWYgKG4gJiYgX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpIGFkZHIsIG4pKQotCQlyZXR1cm4gX19jbGVhcl91c2VyKGFkZHIsIG4pOwotCWVsc2UKLQkJcmV0dXJuIG47Ci19Ci0KLWV4dGVybiBsb25nIF9fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZGVzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCk7Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkZXN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KQotewotCWlmIChfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykgc3JjLCBjb3VudCkpCi0JCXJldHVybiBfX3N0cm5jcHlfZnJvbV91c2VyKGRlc3QsIHNyYywgY291bnQpOwotCWVsc2UKLQkJcmV0dXJuIC1FRkFVTFQ7Ci19Ci0KLWV4dGVybiBsb25nIF9fc3RybGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKik7Ci1leHRlcm4gbG9uZyBfX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqLCBsb25nIGxlbik7Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzdHJsZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyKQotewotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzdHIsIDApKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiBfX3N0cmxlbl91c2VyKHN0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBsZW4pCi17Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHN0ciwgMCkpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIF9fc3Rybmxlbl91c2VyKHN0ciwgbGVuKTsKLX0KLQotI2VuZGlmICAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9BU01fVUFDQ0VTU19IICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3VhY2Nlc3NfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3VhY2Nlc3NfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2Q1NjE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdWFjY2Vzc18zMi5oCkBAIC0wLDAgKzEsMzM2IEBACisvKgorICogdWFjY2Vzcy5oOiBVc2VyIHNwYWNlIG1lbW9yZSBhY2Nlc3MgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQorICovCisjaWZuZGVmIF9BU01fVUFDQ0VTU19ICisjZGVmaW5lIF9BU01fVUFDQ0VTU19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3ZhYy1vcHMuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBTcGFyYyBpcyBub3Qgc2VnbWVudGVkLCBob3dldmVyIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBmb29sIGFjY2Vzc19vaygpCisgKiB3aGVuIGRvaW5nIHN5c3RlbSBjYWxscyBmcm9tIGtlcm5lbCBtb2RlIGxlZ2l0aW1hdGVseS4KKyAqCisgKiAiRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLiIgLUxpbnVzCisgKi8KKworI2RlZmluZSBLRVJORUxfRFMgICAoKG1tX3NlZ21lbnRfdCkgeyAwIH0pCisjZGVmaW5lIFVTRVJfRFMgICAgICgobW1fc2VnbWVudF90KSB7IC0xIH0pCisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisjZGVmaW5lIGdldF9kcygpCShLRVJORUxfRFMpCisjZGVmaW5lIGdldF9mcygpCShjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykKKyNkZWZpbmUgc2V0X2ZzKHZhbCkJKChjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykgPSAodmFsKSkKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworLyogV2UgaGF2ZSB0aGVyZSBhIG5pY2Ugbm90LW1hcHBlZCBwYWdlIGF0IFBBR0VfT0ZGU0VUIC0gUEFHRV9TSVpFLCBzbyB0aGF0IHRoaXMgdGVzdAorICogY2FuIGJlIGZhaXJseSBsaWdodHdlaWdodC4KKyAqIE5vIG9uZSBjYW4gcmVhZC93cml0ZSBhbnl0aGluZyBmcm9tIHVzZXJsYW5kIGluIHRoZSBrZXJuZWwgc3BhY2UgYnkgc2V0dGluZworICogbGFyZ2Ugc2l6ZSBhbmQgYWRkcmVzcyBuZWFyIHRvIFBBR0VfT0ZGU0VUIC0gYSBmYXVsdCB3aWxsIGJyZWFrIGhpcyBpbnRlbnRpb25zLgorICovCisjZGVmaW5lIF9fdXNlcl9vayhhZGRyLCBzaXplKSAoeyAodm9pZCkoc2l6ZSk7IChhZGRyKSA8IFNUQUNLX1RPUDsgfSkKKyNkZWZpbmUgX19rZXJuZWxfb2sgKHNlZ21lbnRfZXEoZ2V0X2ZzKCksIEtFUk5FTF9EUykpCisjZGVmaW5lIF9fYWNjZXNzX29rKGFkZHIsc2l6ZSkgKF9fdXNlcl9vaygoYWRkcikgJiBnZXRfZnMoKS5zZWcsKHNpemUpKSkKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpCQkJCQlcCisJKHsgKHZvaWQpKHR5cGUpOyBfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykoYWRkciksIHNpemUpOyB9KQorCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqCisgKiBUaGVyZSBpcyBhIHNwZWNpYWwgd2F5IGhvdyB0byBwdXQgYSByYW5nZSBvZiBwb3RlbnRpYWxseSBmYXVsdGluZworICogaW5zbnMgKGxpa2UgdHdlbnR5IGxkZC9zdGQncyB3aXRoIG5vdyBpbnRlcnZlbmluZyBvdGhlciBpbnN0cnVjdGlvbnMpCisgKiBZb3Ugc3BlY2lmeSBhZGRyZXNzIG9mIGZpcnN0IGluIGluc24gYW5kIDAgaW4gZml4dXAgYW5kIGluIHRoZSBuZXh0CisgKiBleGNlcHRpb25fdGFibGVfZW50cnkgeW91IHNwZWNpZnkgbGFzdCBwb3RlbnRpYWxseSBmYXVsdGluZyBpbnNuICsgMQorICogYW5kIGluIGZpeHVwIHRoZSByb3V0aW5lIHdoaWNoIHNob3VsZCBoYW5kbGUgdGhlIGZhdWx0LgorICogVGhhdCBmaXh1cCBjb2RlIHdpbGwgZ2V0CisgKiAoZmF1bHRpbmdfaW5zbl9hZGRyZXNzIC0gZmlyc3RfaW5zbl9pbl90aGVfcmFuZ2VfYWRkcmVzcykvNAorICogaW4gJWcyIChpZS4gaW5kZXggb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGluIHRoZSByYW5nZSkuCisgKi8KKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOworfTsKKworLyogUmV0dXJucyAwIGlmIGV4Y2VwdGlvbiBub3QgZm91bmQgYW5kIGZpeHVwIG90aGVyd2lzZS4gICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBzZWFyY2hfZXh0YWJsZXNfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpnMik7CisKK2V4dGVybiB2b2lkIF9fcmV0X2VmYXVsdCh2b2lkKTsKKworLyogVWgsIHRoZXNlIHNob3VsZCBiZWNvbWUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLi4KKyAqIFRoZXkgYXV0b21hdGljYWxseSB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodAorICogcG9pbnRlciB0eXBlLi4KKyAqCisgKiBUaGlzIGdldHMga2luZCBvZiB1Z2x5LiBXZSB3YW50IHRvIHJldHVybiBfdHdvXyB2YWx1ZXMgaW4gImdldF91c2VyKCkiCisgKiBhbmQgeWV0IHdlIGRvbid0IHdhbnQgdG8gZG8gYW55IHBvaW50ZXJzLCBiZWNhdXNlIHRoYXQgaXMgdG9vIG11Y2gKKyAqIG9mIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaHVzIHdlIGhhdmUgYSBmZXcgcmF0aGVyIHVnbHkgbWFjcm9zIGhlcmUsCisgKiBhbmQgaGlkZSBhbGwgdGhlIHVnbGluZXNzIGZyb20gdGhlIHVzZXIuCisgKi8KKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpICh7IFwKK3Vuc2lnbmVkIGxvbmcgX19wdV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7IFwKK19fY2hrX3VzZXJfcHRyKHB0cik7IFwKK19fcHV0X3VzZXJfY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksX19wdV9hZGRyLHNpemVvZigqKHB0cikpKTsgfSkKKworI2RlZmluZSBnZXRfdXNlcih4LHB0cikgKHsgXAordW5zaWduZWQgbG9uZyBfX2d1X2FkZHIgPSAodW5zaWduZWQgbG9uZykocHRyKTsgXAorX19jaGtfdXNlcl9wdHIocHRyKTsgXAorX19nZXRfdXNlcl9jaGVjaygoeCksX19ndV9hZGRyLHNpemVvZigqKHB0cikpLF9fdHlwZW9mX18oKihwdHIpKSk7IH0pCisKKy8qCisgKiBUaGUgIl9feHh4IiB2ZXJzaW9ucyBkbyBub3QgZG8gYWRkcmVzcyBzcGFjZSBjaGVja2luZywgdXNlZnVsIHdoZW4KKyAqIGRvaW5nIG11bHRpcGxlIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGFyZWEgKHRoZSB1c2VyIGhhcyB0byBkbyB0aGUKKyAqIGNoZWNrcyBieSBoYW5kIHdpdGggImFjY2Vzc19vaygpIikKKyAqLworI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSBfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpIF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSksX190eXBlb2ZfXygqKHB0cikpKQorCitzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OworI2RlZmluZSBfX20oeCkgKChzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgX191c2VyICopKHgpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfY2hlY2soeCxhZGRyLHNpemUpICh7IFwKK3JlZ2lzdGVyIGludCBfX3B1X3JldDsgXAoraWYgKF9fYWNjZXNzX29rKGFkZHIsc2l6ZSkpIHsgXAorc3dpdGNoIChzaXplKSB7IFwKK2Nhc2UgMTogX19wdXRfdXNlcl9hc20oeCxiLGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAorY2FzZSAyOiBfX3B1dF91c2VyX2FzbSh4LGgsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitjYXNlIDQ6IF9fcHV0X3VzZXJfYXNtKHgsLGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAorY2FzZSA4OiBfX3B1dF91c2VyX2FzbSh4LGQsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitkZWZhdWx0OiBfX3B1X3JldCA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOyBcCit9IH0gZWxzZSB7IF9fcHVfcmV0ID0gLUVGQVVMVDsgfSBfX3B1X3JldDsgfSkKKworI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxhZGRyLHNpemUpICh7IFwKK3JlZ2lzdGVyIGludCBfX3B1X3JldDsgXAorc3dpdGNoIChzaXplKSB7IFwKK2Nhc2UgMTogX19wdXRfdXNlcl9hc20oeCxiLGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAorY2FzZSAyOiBfX3B1dF91c2VyX2FzbSh4LGgsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitjYXNlIDQ6IF9fcHV0X3VzZXJfYXNtKHgsLGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAorY2FzZSA4OiBfX3B1dF91c2VyX2FzbSh4LGQsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitkZWZhdWx0OiBfX3B1X3JldCA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOyBcCit9IF9fcHVfcmV0OyB9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsc2l6ZSxhZGRyLHJldCkJCQkJCVwKK19fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCisJIi8qIFB1dCB1c2VyIGFzbSwgaW5saW5lLiAqL1xuIgkJCQkJXAorIjE6XHQiCSJzdCIjc2l6ZSAiICUxLCAlMlxuXHQiCQkJCQkJXAorCSJjbHIJJTBcbiIJCQkJCQkJXAorIjI6XG5cblx0IgkJCQkJCQkJXAorCSIuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHJcblx0IgkJCQlcCisJIi5hbGlnbgk0XG4iCQkJCQkJCVwKKyIzOlxuXHQiCQkJCQkJCQlcCisJImIJMmJcblx0IgkJCQkJCQlcCisJIiBtb3YJJTMsICUwXG5cdCIJCQkJCQlcCisgICAgICAgICIucHJldmlvdXNcblxuXHQiCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLCAzYlxuXHQiCQkJCQkJXAorCSIucHJldmlvdXNcblxuXHQiCQkJCQkJXAorICAgICAgIDogIj0mciIgKHJldCkgOiAiciIgKHgpLCAibSIgKCpfX20oYWRkcikpLAkJCVwKKwkgImkiICgtRUZBVUxUKSkKKworZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgsYWRkcixzaXplLHR5cGUpICh7IFwKK3JlZ2lzdGVyIGludCBfX2d1X3JldDsgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsgXAoraWYgKF9fYWNjZXNzX29rKGFkZHIsc2l6ZSkpIHsgXAorc3dpdGNoIChzaXplKSB7IFwKK2Nhc2UgMTogX19nZXRfdXNlcl9hc20oX19ndV92YWwsdWIsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHVoLGFkZHIsX19ndV9yZXQpOyBicmVhazsgXAorY2FzZSA0OiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCwsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitjYXNlIDg6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLGQsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitkZWZhdWx0OiBfX2d1X3ZhbCA9IDA7IF9fZ3VfcmV0ID0gX19nZXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKK30gfSBlbHNlIHsgX19ndV92YWwgPSAwOyBfX2d1X3JldCA9IC1FRkFVTFQ7IH0geCA9ICh0eXBlKSBfX2d1X3ZhbDsgX19ndV9yZXQ7IH0pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9jaGVja19yZXQoeCxhZGRyLHNpemUsdHlwZSxyZXR2YWwpICh7IFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19ndV92YWwgX19hc21fXyAoImwxIik7IFwKK2lmIChfX2FjY2Vzc19vayhhZGRyLHNpemUpKSB7IFwKK3N3aXRjaCAoc2l6ZSkgeyBcCitjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtX3JldChfX2d1X3ZhbCx1YixhZGRyLHJldHZhbCk7IGJyZWFrOyBcCitjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtX3JldChfX2d1X3ZhbCx1aCxhZGRyLHJldHZhbCk7IGJyZWFrOyBcCitjYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtX3JldChfX2d1X3ZhbCwsYWRkcixyZXR2YWwpOyBicmVhazsgXAorY2FzZSA4OiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsZCxhZGRyLHJldHZhbCk7IGJyZWFrOyBcCitkZWZhdWx0OiBpZiAoX19nZXRfdXNlcl9iYWQoKSkgcmV0dXJuIHJldHZhbDsgXAorfSB4ID0gKHR5cGUpIF9fZ3VfdmFsOyB9IGVsc2UgcmV0dXJuIHJldHZhbDsgfSkKKworI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCxhZGRyLHNpemUsdHlwZSkgKHsgXAorcmVnaXN0ZXIgaW50IF9fZ3VfcmV0OyBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOyBcCitzd2l0Y2ggKHNpemUpIHsgXAorY2FzZSAxOiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCx1YixhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKK2Nhc2UgMjogX19nZXRfdXNlcl9hc20oX19ndV92YWwsdWgsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitjYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLCxhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKK2Nhc2UgODogX19nZXRfdXNlcl9hc20oX19ndV92YWwsZCxhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKK2RlZmF1bHQ6IF9fZ3VfdmFsID0gMDsgX19ndV9yZXQgPSBfX2dldF91c2VyX2JhZCgpOyBicmVhazsgXAorfSB4ID0gKHR5cGUpIF9fZ3VfdmFsOyBfX2d1X3JldDsgfSkKKworI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2tfcmV0KHgsYWRkcixzaXplLHR5cGUscmV0dmFsKSAoeyBcCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZ3VfdmFsIF9fYXNtX18gKCJsMSIpOyBcCitzd2l0Y2ggKHNpemUpIHsgXAorY2FzZSAxOiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsdWIsYWRkcixyZXR2YWwpOyBicmVhazsgXAorY2FzZSAyOiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsdWgsYWRkcixyZXR2YWwpOyBicmVhazsgXAorY2FzZSA0OiBfX2dldF91c2VyX2FzbV9yZXQoX19ndV92YWwsLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgODogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLGQsYWRkcixyZXR2YWwpOyBicmVhazsgXAorZGVmYXVsdDogaWYgKF9fZ2V0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IFwKK30geCA9ICh0eXBlKSBfX2d1X3ZhbDsgfSkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LHNpemUsYWRkcixyZXQpCQkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAorCSIvKiBHZXQgdXNlciBhc20sIGlubGluZS4gKi9cbiIJCQkJCVwKKyIxOlx0IgkibGQiI3NpemUgIiAlMiwgJTFcblx0IgkJCQkJCVwKKwkiY2xyCSUwXG4iCQkJCQkJCVwKKyIyOlxuXG5cdCIJCQkJCQkJCVwKKwkiLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG5cdCIJCQkJXAorCSIuYWxpZ24JNFxuIgkJCQkJCQlcCisiMzpcblx0IgkJCQkJCQkJXAorCSJjbHIJJTFcblx0IgkJCQkJCQlcCisJImIJMmJcblx0IgkJCQkJCQlcCisJIiBtb3YJJTMsICUwXG5cblx0IgkJCQkJCVwKKwkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLCAzYlxuXG5cdCIJCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKyAgICAgICA6ICI9JnIiIChyZXQpLCAiPSZyIiAoeCkgOiAibSIgKCpfX20oYWRkcikpLAkJCVwKKwkgImkiICgtRUZBVUxUKSkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbV9yZXQoeCxzaXplLGFkZHIscmV0dmFsKQkJCQlcCitpZiAoX19idWlsdGluX2NvbnN0YW50X3AocmV0dmFsKSAmJiByZXR2YWwgPT0gLUVGQVVMVCkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAorCSIvKiBHZXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKKyIxOlx0IgkibGQiI3NpemUgIiAlMSwgJTBcblxuXHQiCQkJCQlcCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIJCQkJXAorCSIuYWxpZ24JNFxuXHQiCQkJCQkJCVwKKwkiLndvcmQJMWIsX19yZXRfZWZhdWx0XG5cblx0IgkJCQkJXAorCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCisgICAgICAgOiAiPSZyIiAoeCkgOiAibSIgKCpfX20oYWRkcikpKTsJCQkJCVwKK2Vsc2UJCQkJCQkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAorCSIvKiBHZXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKKyIxOlx0IgkibGQiI3NpemUgIiAlMSwgJTBcblxuXHQiCQkJCQlcCisJIi5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuXHQiCQkJCVwKKwkiLmFsaWduCTRcbiIJCQkJCQkJXAorIjM6XG5cdCIJCQkJCQkJCVwKKwkicmV0XG5cdCIJCQkJCQkJXAorCSIgcmVzdG9yZSAlJWcwLCAlMiwgJSVvMFxuXG5cdCIJCQkJCVwKKwkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLCAzYlxuXG5cdCIJCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKyAgICAgICA6ICI9JnIiICh4KSA6ICJtIiAoKl9fbShhZGRyKSksICJpIiAocmV0dmFsKSkKKworZXh0ZXJuIGludCBfX2dldF91c2VyX2JhZCh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jb3B5X3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAobiAmJiBfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykgdG8sIG4pKQorCQlyZXR1cm4gX19jb3B5X3VzZXIodG8sIChfX2ZvcmNlIHZvaWQgX191c2VyICopIGZyb20sIG4pOworCWVsc2UKKwkJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlyZXR1cm4gX19jb3B5X3VzZXIodG8sIChfX2ZvcmNlIHZvaWQgX191c2VyICopIGZyb20sIG4pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKG4gJiYgX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpIGZyb20sIG4pKQorCQlyZXR1cm4gX19jb3B5X3VzZXIoKF9fZm9yY2Ugdm9pZCBfX3VzZXIgKikgdG8sIGZyb20sIG4pOworCWVsc2UKKwkJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCXJldHVybiBfX2NvcHlfdXNlcigoX19mb3JjZSB2b2lkIF9fdXNlciAqKSB0bywgZnJvbSwgbik7Cit9CisKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIKKwkJIi5hbGlnbiA0XG5cdCIKKwkJIi53b3JkIDFmLDNcblx0IgorCQkiLnByZXZpb3VzXG5cdCIKKwkJIm1vdiAlMiwgJSVvMVxuIgorCQkiMTpcblx0IgorCQkiY2FsbCBfX2J6ZXJvXG5cdCIKKwkJIiBtb3YgJTEsICUlbzBcblx0IgorCQkibW92ICUlbzAsICUwXG4iCisJCTogIj1yIiAocmV0KSA6ICJyIiAoYWRkciksICJyIiAoc2l6ZSkgOgorCQkibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLCAibzciLAorCQkiZzEiLCAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLCAiZzciLCAiY2MiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGVhcl91c2VyKHZvaWQgX191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKG4gJiYgX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpIGFkZHIsIG4pKQorCQlyZXR1cm4gX19jbGVhcl91c2VyKGFkZHIsIG4pOworCWVsc2UKKwkJcmV0dXJuIG47Cit9CisKK2V4dGVybiBsb25nIF9fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZGVzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCk7CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkZXN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KQoreworCWlmIChfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykgc3JjLCBjb3VudCkpCisJCXJldHVybiBfX3N0cm5jcHlfZnJvbV91c2VyKGRlc3QsIHNyYywgY291bnQpOworCWVsc2UKKwkJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK2V4dGVybiBsb25nIF9fc3RybGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKik7CitleHRlcm4gbG9uZyBfX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqLCBsb25nIGxlbik7CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHJsZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyKQoreworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzdHIsIDApKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBfX3N0cmxlbl91c2VyKHN0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBsZW4pCit7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHN0ciwgMCkpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIF9fc3Rybmxlbl91c2VyKHN0ciwgbGVuKTsKK30KKworI2VuZGlmICAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fVUFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzXzY0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2ZWYzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VhY2Nlc3NfNjQuaApAQCAtMCwwICsxLDI3MyBAQAorI2lmbmRlZiBfQVNNX1VBQ0NFU1NfSAorI2RlZmluZSBfQVNNX1VBQ0NFU1NfSAorCisvKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdWFjY2Vzcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBTcGFyYzY0IGlzIHNlZ21lbnRlZCwgdGhvdWdoIG1vcmUgbGlrZSB0aGUgTTY4SyB0aGFuIHRoZSBJMzg2LgorICogV2UgdXNlIHRoZSBzZWNvbmRhcnkgQVNJIHRvIGFkZHJlc3MgdXNlciBtZW1vcnksIHdoaWNoIHJlZmVyZW5jZXMgYQorICogY29tcGxldGVseSBkaWZmZXJlbnQgVk0gbWFwLCB0aHVzIHRoZXJlIGlzIHplcm8gY2hhbmNlIG9mIHRoZSB1c2VyCisgKiBkb2luZyBzb21ldGhpbmcgcXVlZXIgYW5kIHRyaWNraW5nIHVzIGludG8gcG9raW5nIGtlcm5lbCBtZW1vcnkuCisgKgorICogV2hhdCBpcyBsZWZ0IGhlcmUgaXMgYmFzaWNhbGx5IHdoYXQgaXMgbmVlZGVkIGZvciB0aGUgb3RoZXIgcGFydHMgb2YKKyAqIHRoZSBrZXJuZWwgdGhhdCBleHBlY3QgdG8gYmUgYWJsZSB0byBtYW5pcHVsYXRlLCBlcnVtLCAic2VnbWVudHMiLgorICogT3IgcGVyaGFwcyBtb3JlIHByb3Blcmx5LCBwZXJtaXNzaW9ucy4KKyAqCisgKiAiRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLiIgLUxpbnVzCisgKi8KKworI2RlZmluZSBLRVJORUxfRFMgICAoKG1tX3NlZ21lbnRfdCkgeyBBU0lfUCB9KQorI2RlZmluZSBVU0VSX0RTICAgICAoKG1tX3NlZ21lbnRfdCkgeyBBU0lfQUlVUyB9KQkvKiBoYXIgaGFyIGhhciAqLworCisjZGVmaW5lIFZFUklGWV9SRUFECTAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFCTEKKworI2RlZmluZSBnZXRfZnMoKSAoKG1tX3NlZ21lbnRfdCkgeyBnZXRfdGhyZWFkX2N1cnJlbnRfZHMoKSB9KQorI2RlZmluZSBnZXRfZHMoKSAoS0VSTkVMX0RTKQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKSAgKChhKS5zZWcgPT0gKGIpLnNlZykKKworI2RlZmluZSBzZXRfZnModmFsKQkJCQkJCQkJXAorZG8gewkJCQkJCQkJCQlcCisJc2V0X3RocmVhZF9jdXJyZW50X2RzKCh2YWwpLnNlZyk7CQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ3ciAlJWcwLCAlMCwgJSVhc2kiIDogOiAiciIgKCh2YWwpLnNlZykpOwlcCit9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYWNjZXNzX29rKGNvbnN0IHZvaWQgX191c2VyICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBhY2Nlc3Nfb2soaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAxOworfQorCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5IHsKKyAgICAgICAgdW5zaWduZWQgaW50IGluc24sIGZpeHVwOworfTsKKworZXh0ZXJuIHZvaWQgX19yZXRfZWZhdWx0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19yZXRsX2VmYXVsdCh2b2lkKTsKKworLyogVWgsIHRoZXNlIHNob3VsZCBiZWNvbWUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLi4KKyAqIFRoZXkgYXV0b21hdGljYWxseSB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodAorICogcG9pbnRlciB0eXBlLi4KKyAqCisgKiBUaGlzIGdldHMga2luZCBvZiB1Z2x5LiBXZSB3YW50IHRvIHJldHVybiBfdHdvXyB2YWx1ZXMgaW4gImdldF91c2VyKCkiCisgKiBhbmQgeWV0IHdlIGRvbid0IHdhbnQgdG8gZG8gYW55IHBvaW50ZXJzLCBiZWNhdXNlIHRoYXQgaXMgdG9vIG11Y2gKKyAqIG9mIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaHVzIHdlIGhhdmUgYSBmZXcgcmF0aGVyIHVnbHkgbWFjcm9zIGhlcmUsCisgKiBhbmQgaGlkZSBhbGwgdGhlIHVnbGluZXNzIGZyb20gdGhlIHVzZXIuCisgKi8KKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpICh7IFwKK3Vuc2lnbmVkIGxvbmcgX19wdV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7IFwKK19fY2hrX3VzZXJfcHRyKHB0cik7IFwKK19fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSxfX3B1X2FkZHIsc2l6ZW9mKCoocHRyKSkpOyB9KQorCisjZGVmaW5lIGdldF91c2VyKHgscHRyKSAoeyBcCit1bnNpZ25lZCBsb25nIF9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKShwdHIpOyBcCitfX2Noa191c2VyX3B0cihwdHIpOyBcCitfX2dldF91c2VyX25vY2hlY2soKHgpLF9fZ3VfYWRkcixzaXplb2YoKihwdHIpKSxfX3R5cGVvZl9fKCoocHRyKSkpOyB9KQorCisjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIHB1dF91c2VyKHgscHRyKQorI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSBnZXRfdXNlcih4LHB0cikKKworc3RydWN0IF9fbGFyZ2Vfc3RydWN0IHsgdW5zaWduZWQgbG9uZyBidWZbMTAwXTsgfTsKKyNkZWZpbmUgX19tKHgpICgoc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKHgpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayhkYXRhLGFkZHIsc2l6ZSkgKHsgXAorcmVnaXN0ZXIgaW50IF9fcHVfcmV0OyBcCitzd2l0Y2ggKHNpemUpIHsgXAorY2FzZSAxOiBfX3B1dF91c2VyX2FzbShkYXRhLGIsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitjYXNlIDI6IF9fcHV0X3VzZXJfYXNtKGRhdGEsaCxhZGRyLF9fcHVfcmV0KTsgYnJlYWs7IFwKK2Nhc2UgNDogX19wdXRfdXNlcl9hc20oZGF0YSx3LGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAorY2FzZSA4OiBfX3B1dF91c2VyX2FzbShkYXRhLHgsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCitkZWZhdWx0OiBfX3B1X3JldCA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOyBcCit9IF9fcHVfcmV0OyB9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsc2l6ZSxhZGRyLHJldCkJCQkJCVwKK19fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCisJIi8qIFB1dCB1c2VyIGFzbSwgaW5saW5lLiAqL1xuIgkJCQkJXAorIjE6XHQiCSJzdCIjc2l6ZSAiYSAlMSwgWyUyXSAlJWFzaVxuXHQiCQkJCVwKKwkiY2xyCSUwXG4iCQkJCQkJCVwKKyIyOlxuXG5cdCIJCQkJCQkJCVwKKwkiLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG5cdCIJCQkJXAorCSIuYWxpZ24JNFxuIgkJCQkJCQlcCisiMzpcblx0IgkJCQkJCQkJXAorCSJzZXRoaQklJWhpKDJiKSwgJTBcblx0IgkJCQkJXAorCSJqbXBsCSUwICsgJSVsbygyYiksICUlZzBcblx0IgkJCQlcCisJIiBtb3YJJTMsICUwXG5cblx0IgkJCQkJCVwKKwkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG5cdCIJCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLCAzYlxuXHQiCQkJCQkJXAorCSIucHJldmlvdXNcblxuXHQiCQkJCQkJXAorICAgICAgIDogIj1yIiAocmV0KSA6ICJyIiAoeCksICJyIiAoX19tKGFkZHIpKSwJCQkJXAorCSAiaSIgKC1FRkFVTFQpKQorCitleHRlcm4gaW50IF9fcHV0X3VzZXJfYmFkKHZvaWQpOworCisjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayhkYXRhLGFkZHIsc2l6ZSx0eXBlKSAoeyBcCityZWdpc3RlciBpbnQgX19ndV9yZXQ7IFwKK3JlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19ndV92YWw7IFwKK3N3aXRjaCAoc2l6ZSkgeyBcCitjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHViLGFkZHIsX19ndV9yZXQpOyBicmVhazsgXAorY2FzZSAyOiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCx1aCxhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKK2Nhc2UgNDogX19nZXRfdXNlcl9hc20oX19ndV92YWwsdXcsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitjYXNlIDg6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHgsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCitkZWZhdWx0OiBfX2d1X3ZhbCA9IDA7IF9fZ3VfcmV0ID0gX19nZXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKK30gZGF0YSA9ICh0eXBlKSBfX2d1X3ZhbDsgX19ndV9yZXQ7IH0pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrX3JldChkYXRhLGFkZHIsc2l6ZSx0eXBlLHJldHZhbCkgKHsgXAorcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbCBfX2FzbV9fICgibDEiKTsgXAorc3dpdGNoIChzaXplKSB7IFwKK2Nhc2UgMTogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHViLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgMjogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHVoLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgNDogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHV3LGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKK2Nhc2UgODogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHgsYWRkcixyZXR2YWwpOyBicmVhazsgXAorZGVmYXVsdDogaWYgKF9fZ2V0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IFwKK30gZGF0YSA9ICh0eXBlKSBfX2d1X3ZhbDsgfSkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LHNpemUsYWRkcixyZXQpCQkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAorCSIvKiBHZXQgdXNlciBhc20sIGlubGluZS4gKi9cbiIJCQkJCVwKKyIxOlx0IgkibGQiI3NpemUgImEgWyUyXSAlJWFzaSwgJTFcblx0IgkJCQlcCisJImNscgklMFxuIgkJCQkJCQlcCisiMjpcblxuXHQiCQkJCQkJCQlcCisJIi5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuXHQiCQkJCVwKKwkiLmFsaWduCTRcbiIJCQkJCQkJXAorIjM6XG5cdCIJCQkJCQkJCVwKKwkic2V0aGkJJSVoaSgyYiksICUwXG5cdCIJCQkJCVwKKwkiY2xyCSUxXG5cdCIJCQkJCQkJXAorCSJqbXBsCSUwICsgJSVsbygyYiksICUlZzBcblx0IgkJCQlcCisJIiBtb3YJJTMsICUwXG5cblx0IgkJCQkJCVwKKwkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG5cdCIJCQkJCVwKKwkiLmFsaWduCTRcblx0IgkJCQkJCQlcCisJIi53b3JkCTFiLCAzYlxuXG5cdCIJCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKyAgICAgICA6ICI9ciIgKHJldCksICI9ciIgKHgpIDogInIiIChfX20oYWRkcikpLAkJCVwKKwkgImkiICgtRUZBVUxUKSkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbV9yZXQoeCxzaXplLGFkZHIscmV0dmFsKQkJCQlcCitpZiAoX19idWlsdGluX2NvbnN0YW50X3AocmV0dmFsKSAmJiByZXR2YWwgPT0gLUVGQVVMVCkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAorCSIvKiBHZXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKKyIxOlx0IgkibGQiI3NpemUgImEgWyUxXSAlJWFzaSwgJTBcblxuXHQiCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuXHQiCQkJCQlcCisJIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAorCSIud29yZAkxYixfX3JldF9lZmF1bHRcblxuXHQiCQkJCQlcCisJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKKyAgICAgICA6ICI9ciIgKHgpIDogInIiIChfX20oYWRkcikpKTsJCQkJCVwKK2Vsc2UJCQkJCQkJCQlcCitfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAorCSIvKiBHZXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKKyIxOlx0IgkibGQiI3NpemUgImEgWyUxXSAlJWFzaSwgJTBcblxuXHQiCQkJCVwKKwkiLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG5cdCIJCQkJXAorCSIuYWxpZ24JNFxuIgkJCQkJCQlcCisiMzpcblx0IgkJCQkJCQkJXAorCSJyZXRcblx0IgkJCQkJCQlcCisJIiByZXN0b3JlICUlZzAsICUyLCAlJW8wXG5cblx0IgkJCQkJXAorCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcblx0IgkJCQkJXAorCSIuYWxpZ24JNFxuXHQiCQkJCQkJCVwKKwkiLndvcmQJMWIsIDNiXG5cblx0IgkJCQkJCVwKKwkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAorICAgICAgIDogIj1yIiAoeCkgOiAiciIgKF9fbShhZGRyKSksICJpIiAocmV0dmFsKSkKKworZXh0ZXJuIGludCBfX2dldF91c2VyX2JhZCh2b2lkKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLAorCQkJCQkJICAgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBjb3B5X2Zyb21fdXNlcl9maXh1cCh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcmV0ID0gX19fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIHNpemUpOworCisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldCA9IGNvcHlfZnJvbV91c2VyX2ZpeHVwKHRvLCBmcm9tLCBzaXplKTsKKwlyZXR1cm4gcmV0OworfQorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyIGNvcHlfZnJvbV91c2VyCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLAorCQkJCQkJICBjb25zdCB2b2lkICpmcm9tLAorCQkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV90b191c2VyX2ZpeHVwKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBzaXplKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IF9fX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgc2l6ZSk7CisKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJcmV0ID0gY29weV90b191c2VyX2ZpeHVwKHRvLCBmcm9tLCBzaXplKTsKKwlyZXR1cm4gcmV0OworfQorI2RlZmluZSBfX2NvcHlfdG9fdXNlciBjb3B5X3RvX3VzZXIKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fX2NvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqdG8sCisJCQkJCQkgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV9pbl91c2VyX2ZpeHVwKHZvaWQgX191c2VyICp0bywgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSk7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCitjb3B5X2luX3VzZXIodm9pZCBfX3VzZXIgKnRvLCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcmV0ID0gX19fY29weV9pbl91c2VyKHRvLCBmcm9tLCBzaXplKTsKKworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXQgPSBjb3B5X2luX3VzZXJfZml4dXAodG8sIGZyb20sIHNpemUpOworCXJldHVybiByZXQ7Cit9CisjZGVmaW5lIF9fY29weV9pbl91c2VyIGNvcHlfaW5fdXNlcgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jbGVhcl91c2VyKHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcpOworCisjZGVmaW5lIGNsZWFyX3VzZXIgX19jbGVhcl91c2VyCisKK2V4dGVybiBsb25nIF9fbXVzdF9jaGVjayBfX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpOworCisjZGVmaW5lIHN0cm5jcHlfZnJvbV91c2VyIF9fc3RybmNweV9mcm9tX3VzZXIKKworZXh0ZXJuIGxvbmcgX19zdHJsZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqKTsKK2V4dGVybiBsb25nIF9fc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICosIGxvbmcgbGVuKTsKKworI2RlZmluZSBzdHJsZW5fdXNlciBfX3N0cmxlbl91c2VyCisjZGVmaW5lIHN0cm5sZW5fdXNlciBfX3N0cm5sZW5fdXNlcgorI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKworI2VuZGlmICAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fVUFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91Y3R4LmggYi9pbmNsdWRlL2FzbS1zcGFyYy91Y3R4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5MzdjNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VjdHguaApAQCAtMCwwICsxLDcxIEBACisvKgorICogdWN0eC5oOiBTcGFyYzY0IHtzZXQsZ2V0fWNvbnRleHQoKSByZWdpc3RlciBzdGF0ZSBsYXlvdXRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2lmbmRlZiBfX1NQQVJDNjRfVUNUWF9ICisjZGVmaW5lIF9fU1BBUkM2NF9VQ1RYX0gKKworI2RlZmluZSBNQ19UU1RBVEUJMAorI2RlZmluZSBNQ19QQwkJMQorI2RlZmluZSBNQ19OUEMJCTIKKyNkZWZpbmUgTUNfWQkJMworI2RlZmluZSBNQ19HMQkJNAorI2RlZmluZSBNQ19HMgkJNQorI2RlZmluZSBNQ19HMwkJNgorI2RlZmluZSBNQ19HNAkJNworI2RlZmluZSBNQ19HNQkJOAorI2RlZmluZSBNQ19HNgkJOQorI2RlZmluZSBNQ19HNwkJMTAKKyNkZWZpbmUgTUNfTzAJCTExCisjZGVmaW5lIE1DX08xCQkxMgorI2RlZmluZSBNQ19PMgkJMTMKKyNkZWZpbmUgTUNfTzMJCTE0CisjZGVmaW5lIE1DX080CQkxNQorI2RlZmluZSBNQ19PNQkJMTYKKyNkZWZpbmUgTUNfTzYJCTE3CisjZGVmaW5lIE1DX083CQkxOAorI2RlZmluZSBNQ19OR1JFRwkxOQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbWNfZ3JlZ190OwordHlwZWRlZiBtY19ncmVnX3QgbWNfZ3JlZ3NldF90W01DX05HUkVHXTsKKworI2RlZmluZSBNQ19NQVhGUFEJMTYKK3N0cnVjdCBtY19mcSB7CisJdW5zaWduZWQgbG9uZwkqbWNmcV9hZGRyOworCXVuc2lnbmVkIGludAltY2ZxX2luc247Cit9OworCitzdHJ1Y3QgbWNfZnB1IHsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGludAlzcmVnc1szMl07CisJCXVuc2lnbmVkIGxvbmcJZHJlZ3NbMzJdOworCQlsb25nIGRvdWJsZQlxcmVnc1sxNl07CisJfSBtY2ZwdV9mcmVnczsKKwl1bnNpZ25lZCBsb25nCW1jZnB1X2ZzcjsKKwl1bnNpZ25lZCBsb25nCW1jZnB1X2ZwcnM7CisJdW5zaWduZWQgbG9uZwltY2ZwdV9nc3I7CisJc3RydWN0IG1jX2ZxCSptY2ZwdV9mcTsKKwl1bnNpZ25lZCBjaGFyCW1jZnB1X3FjbnQ7CisJdW5zaWduZWQgY2hhcgltY2ZwdV9xZW50c3o7CisJdW5zaWduZWQgY2hhcgltY2ZwdV9lbmFiOworfTsKK3R5cGVkZWYgc3RydWN0IG1jX2ZwdSBtY19mcHVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCW1jX2dyZWdzZXRfdAltY19ncmVnczsKKwltY19ncmVnX3QJbWNfZnA7CisJbWNfZ3JlZ190CW1jX2k3OworCW1jX2ZwdV90CW1jX2ZwcmVnczsKK30gbWNvbnRleHRfdDsKKworc3RydWN0IHVjb250ZXh0IHsKKwlzdHJ1Y3QgdWNvbnRleHQJCSp1Y19saW5rOworCXVuc2lnbmVkIGxvbmcJCXVjX2ZsYWdzOworCXNpZ3NldF90CQl1Y19zaWdtYXNrOworCW1jb250ZXh0X3QJCXVjX21jb250ZXh0OworfTsKK3R5cGVkZWYgc3RydWN0IHVjb250ZXh0IHVjb250ZXh0X3Q7CisKKyNlbmRpZiAvKiBfX1NQQVJDNjRfVUNUWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCmluZGV4IDIzMzhhMDIuLjNjMjYwOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCkBAIC0xLDM3OCArMSw4IEBACi0jaWZuZGVmIF9TUEFSQ19VTklTVERfSAotI2RlZmluZSBfU1BBUkNfVU5JU1REX0gKLQotLyoKLSAqIFN5c3RlbSBjYWxscyB1bmRlciB0aGUgU3BhcmMuCi0gKgotICogRG9uJ3QgYmUgc2NhcmVkIGJ5IHRoZSB1Z2x5IGNsb2JiZXJzLCBpdCBpcyB0aGUgb25seSB3YXkgSSBjYW4KLSAqIHRoaW5rIG9mIHJpZ2h0IG5vdyB0byBmb3JjZSB0aGUgYXJndW1lbnRzIGludG8gZml4ZWQgcmVnaXN0ZXJzCi0gKiBiZWZvcmUgdGhlIHRyYXAgaW50byB0aGUgc3lzdGVtIGNhbGwgd2l0aCBnY2MgJ2FzbScgc3RhdGVtZW50cy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQotICoKLSAqIFN1bk9TIGNvbXBhdGliaWxpdHkgYmFzZWQgdXBvbiBwcmVsaW1pbmFyeSB3b3JrIHdoaWNoIGlzOgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBBZHJpYW4gTS4gUm9kcmlndWV6IChhZHJpYW5AcmVtdXMucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAgICAgIDAgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9leGl0ICAgICAgICAgICAgICAgICAxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mb3JrICAgICAgICAgICAgICAgICAyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93cml0ZSAgICAgICAgICAgICAgICA0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9vcGVuICAgICAgICAgICAgICAgICA1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICA2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93YWl0NCAgICAgICAgICAgICAgICA3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jcmVhdCAgICAgICAgICAgICAgICA4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICA5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bmxpbmsgICAgICAgICAgICAgIDEwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9leGVjdiAgICAgICAgICAgICAgIDExIC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgIDEyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaG93bgkJIDEzIC8qIENvbW1vbgkJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9ta25vZCAgICAgICAgICAgICAgIDE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgIDE1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sY2hvd24gICAgICAgICAgICAgIDE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgIDE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wZXJmY3RyICAgICAgICAgICAgIDE4IC8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgb3BlcmF0aW9ucyAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgIDE5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwaWQgICAgICAgICAgICAgIDIwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jYXBnZXQJCSAyMSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwotI2RlZmluZSBfX05SX2NhcHNldAkJIDIyIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfc2V0dWlkICAgICAgICAgICAgICAyMyAvKiBJbXBsZW1lbnRlZCB2aWEgc2V0cmV1aWQgaW4gU3VuT1MgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAyNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdm1zcGxpY2UJICAgICAgICAgMjUgLyogRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KLSNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgIDI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIDI3IC8qIEltcGxlbWVudGVkIHZpYSBzZXRpdGltZXIgaW4gU3VuT1MgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkgMjggLyogQ29tbW9uCQkJCQkgICAqLwotI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgMjkgLyogSXMgc2lnYmxvY2soMCktPnNpZ3BhdXNlKCkgaW4gU3VuT1MgICAgICAgICAqLwotI2RlZmluZSBfX05SX3V0aW1lICAgICAgICAgICAgICAgMzAgLyogSW1wbGVtZW50ZWQgdmlhIHV0aW1lcygpIHVuZGVyIFN1bk9TICAgICAgICAqLwotI2RlZmluZSBfX05SX2xjaG93bjMyICAgICAgICAgICAgMzEgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjaG93bjMyICAgICAgICAgICAgMzIgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2FjY2VzcyAgICAgICAgICAgICAgMzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX25pY2UgICAgICAgICAgICAgICAgMzQgLyogSW1wbGVtZW50ZWQgdmlhIGdldC9zZXRwcmlvcml0eSgpIGluIFN1bk9TICAqLwotI2RlZmluZSBfX05SX2Nob3duMzIgICAgICAgICAgICAgMzUgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N5bmMgICAgICAgICAgICAgICAgMzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2tpbGwgICAgICAgICAgICAgICAgMzcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N0YXQgICAgICAgICAgICAgICAgMzggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NlbmRmaWxlCQkgMzkgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9sc3RhdCAgICAgICAgICAgICAgIDQwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9kdXAgICAgICAgICAgICAgICAgIDQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgIDQyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90aW1lcyAgICAgICAgICAgICAgIDQzIC8qIEltcGxlbWVudGVkIHZpYSBnZXRydXNhZ2UoKSBpbiBTdW5PUyAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR1aWQzMiAgICAgICAgICAgIDQ0IC8qIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgIDQ1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRnaWQgICAgICAgICAgICAgIDQ2IC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZWdpZCgpIGluIFN1bk9TICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRnaWQgICAgICAgICAgICAgIDQ3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWduYWwgICAgICAgICAgICAgIDQ4IC8qIEltcGxlbWVudGVkIHZpYSBzaWd2ZWMoKSBpbiBTdW5PUyAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRldWlkICAgICAgICAgICAgIDQ5IC8qIFN1bk9TIGNhbGxzIGdldHVpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRlZ2lkICAgICAgICAgICAgIDUwIC8qIFN1bk9TIGNhbGxzIGdldGdpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hY2N0ICAgICAgICAgICAgICAgIDUxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9tZW1vcnlfb3JkZXJpbmcgIDUyICAgIExpbnV4IHNwYXJjNjQgc3BlY2lmaWMJCQkgICAqLwotI2RlZmluZSBfX05SX2dldGdpZDMyICAgICAgICAgICAgNTMgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2lvY3RsICAgICAgICAgICAgICAgNTQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlYm9vdCAgICAgICAgICAgICAgNTUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21tYXAyCQkgNTYgLyogTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCi0jZGVmaW5lIF9fTlJfc3ltbGluayAgICAgICAgICAgICA1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICA1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZXhlY3ZlICAgICAgICAgICAgICA1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdW1hc2sgICAgICAgICAgICAgICA2MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfY2hyb290ICAgICAgICAgICAgICA2MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXQgICAgICAgICAgICAgICA2MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXQ2NAkJIDYzIC8qIExpbnV4IFNwZWNpZmljCQkJICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHBhZ2VzaXplICAgICAgICAgNjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21zeW5jICAgICAgICAgICAgICAgNjUgLyogQ29tbW9uIGluIG5ld2VyIDEuMy54IHJldnMuLi4gICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3Zmb3JrICAgICAgICAgICAgICAgNjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3ByZWFkNjQgICAgICAgICAgICAgNjcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3B3cml0ZTY0ICAgICAgICAgICAgNjggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGV1aWQzMiAgICAgICAgICAgNjkgLyogTGludXggc3BhcmMzMiwgc2JyayB1bmRlciBTdW5PUyAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGVnaWQzMiAgICAgICAgICAgNzAgLyogTGludXggc3BhcmMzMiwgc3N0ayB1bmRlciBTdW5PUyAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21tYXAgICAgICAgICAgICAgICAgNzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJldWlkMzIgICAgICAgICAgNzIgLyogTGludXggc3BhcmMzMiwgdmFkdmlzZSB1bmRlciBTdW5PUyAgICAgICAgICAqLwotI2RlZmluZSBfX05SX211bm1hcCAgICAgICAgICAgICAgNzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21wcm90ZWN0ICAgICAgICAgICAgNzQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21hZHZpc2UgICAgICAgICAgICAgNzUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3ZoYW5ndXAgICAgICAgICAgICAgNzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCSA3NyAvKiBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KLSNkZWZpbmUgX19OUl9taW5jb3JlICAgICAgICAgICAgIDc4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRncm91cHMgICAgICAgICAgIDc5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRncm91cHMgICAgICAgICAgIDgwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwZ3JwICAgICAgICAgICAgIDgxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRncm91cHMzMiAgICAgICAgIDgyIC8qIExpbnV4IHNwYXJjMzIsIHNldHBncnAgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRpdGltZXIgICAgICAgICAgIDgzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkgODQgLyogTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCi0jZGVmaW5lIF9fTlJfc3dhcG9uICAgICAgICAgICAgICA4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgICA4NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0dWlkMzIgICAgICAgICAgICA4NyAvKiBMaW51eCBzcGFyYzMyLCBnZXRob3N0bmFtZSB1bmRlciBTdW5PUyAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICA4OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0Z2lkMzIgICAgICAgICAgICA4OSAvKiBMaW51eCBzcGFyYzMyLCBnZXRkdGFibGVzaXplIHVuZGVyIFN1bk9TICAgICovCi0jZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICA5MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMiAgICAgICAgICA5MSAvKiBMaW51eCBzcGFyYzMyLCBnZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZmNudGwgICAgICAgICAgICAgICA5MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2VsZWN0ICAgICAgICAgICAgICA5MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAgICAgICAgICA5NCAvKiBMaW51eCBzcGFyYzMyLCBzZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN5bmMgICAgICAgICAgICAgICA5NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICA5NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICA5NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICA5OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICA5OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgIDEwMCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuICAgICAgIDEwMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIDEwMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgIDEwMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAgICAgIDEwNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgIDEwNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvICAgIDEwNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAgICAgIDEwNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIgICAgICAgIDEwOCAvKiBMaW51eCBTcGVjaWZpYywgc2lndmVjIHVuZGVyIFN1bk9TCSAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIgICAgICAgIDEwOSAvKiBMaW51eCBTcGVjaWZpYywgc2lnYmxvY2sgdW5kZXIgU3VuT1MJICAgKi8KLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMiAgICAgICAgMTEwIC8qIExpbnV4IFNwZWNpZmljLCBzaWdzZXRtYXNrIHVuZGVyIFN1bk9TCSAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIgICAgICAgIDExMSAvKiBMaW51eCBTcGVjaWZpYywgc2lncGF1c2UgdW5kZXIgU3VuT1MJICAgKi8KLSNkZWZpbmUgX19OUl9zZXRyZWdpZDMyICAgICAgICAgMTEyIC8qIExpbnV4IHNwYXJjMzIsIHNpZ3N0YWNrIHVuZGVyIFN1bk9TICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWN2bXNnICAgICAgICAgICAgMTEzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZW5kbXNnICAgICAgICAgICAgMTE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAgICAgICAgMTE1IC8qIExpbnV4IHNwYXJjMzIsIHZ0cmFjZSB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgMTE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgMTE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0ICAgICAgICAgMTE4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRjd2QJCTExOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwotI2RlZmluZSBfX05SX3JlYWR2ICAgICAgICAgICAgICAxMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAxMjEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAgICAgICAxMjIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAxMjMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAxMjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAxMjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJldWlkICAgICAgICAgICAxMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJlZ2lkICAgICAgICAgICAxMjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAxMjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAxMjkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAgICAgICAgICAxMzAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAxMzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xzdGF0NjQJCTEzMiAvKiBMaW51eCBTcGVjaWZpYwkJCSAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZW5kdG8gICAgICAgICAgICAgMTMzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaHV0ZG93biAgICAgICAgICAgMTM0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zb2NrZXRwYWlyICAgICAgICAgMTM1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9ta2RpciAgICAgICAgICAgICAgMTM2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9ybWRpciAgICAgICAgICAgICAgMTM3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91dGltZXMgICAgICAgICAgICAgMTM4IC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zdGF0NjQJCTEzOSAvKiBMaW51eCBTcGVjaWZpYwkJCSAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZW5kZmlsZTY0ICAgICAgICAgMTQwIC8qIGFkanRpbWUgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwZWVybmFtZSAgICAgICAgMTQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mdXRleCAgICAgICAgICAgICAgMTQyIC8qIGdldGhvc3RpZCB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR0aWQgICAgICAgICAgICAgMTQzIC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRybGltaXQgICAgICAgICAgMTQ0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRybGltaXQgICAgICAgICAgMTQ1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9waXZvdF9yb290CQkxNDYgLyogTGludXggU3BlY2lmaWMsIGtpbGxwZyB1bmRlciBTdW5PUyAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3ByY3RsCQkxNDcgLyogRU5PU1lTIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3BjaWNvbmZpZ19yZWFkCTE0OCAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcGNpY29uZmlnX3dyaXRlCTE0OSAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgIDE1MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0ICAgICAgIDE1MSAvKiBMaW51eCBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggIDE1MiAvKiBMaW51eCBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgIDE1MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMTU0IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfZmNudGw2NAkJMTU1IC8qIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoICAgMTU2IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfc3RhdGZzICAgICAgICAgICAgIDE1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXRmcyAgICAgICAgICAgIDE1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdW1vdW50ICAgICAgICAgICAgIDE1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0X2FmZmluaXR5IDE2MCAvKiBMaW51eCBzcGVjaWZpYywgYXN5bmNfZGFlbW9uIHVuZGVyIFN1bk9TICAgICovCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X2FmZmluaXR5IDE2MSAvKiBMaW51eCBzcGVjaWZpYywgZ2V0ZmggdW5kZXIgU3VuT1MgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0ZG9tYWlubmFtZSAgICAgIDE2MiAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAgICAgIDE2MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfdXRyYXBfaW5zdGFsbCAgIDE2NCAgICBMaW51eCBzcGFyYzY0IHNwZWNpZmljCQkJICAgKi8KLSNkZWZpbmUgX19OUl9xdW90YWN0bCAgICAgICAgICAgMTY1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MgICAgMTY2IC8qIExpbnV4IHNwZWNpZmljLCBleHBvcnRmcyB1bmRlciBTdW5PUyAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tb3VudCAgICAgICAgICAgICAgMTY3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91c3RhdCAgICAgICAgICAgICAgMTY4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXR4YXR0ciAgICAgICAgICAgMTY5IC8qIFN1bk9TOiBzZW1zeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sc2V0eGF0dHIgICAgICAgICAgMTcwIC8qIFN1bk9TOiBtc2dzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mc2V0eGF0dHIgICAgICAgICAgMTcxIC8qIFN1bk9TOiBzaG1zeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR4YXR0ciAgICAgICAgICAgMTcyIC8qIFN1bk9TOiBhdWRpdHN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sZ2V0eGF0dHIgICAgICAgICAgMTczIC8qIFN1bk9TOiByZnNzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRkZW50cyAgICAgICAgICAgMTc0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRzaWQgICAgICAgICAgICAgMTc1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mY2hkaXIgICAgICAgICAgICAgMTc2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgICAgICAgICAgMTc3IC8qIFN1bk9TOiBmY2hyb290ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9saXN0eGF0dHIgICAgICAgICAgMTc4IC8qIFN1bk9TOiB2cGl4c3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sbGlzdHhhdHRyICAgICAgICAgMTc5IC8qIFN1bk9TOiBhaW9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mbGlzdHhhdHRyICAgICAgICAgMTgwIC8qIFN1bk9TOiBhaW93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZW1vdmV4YXR0ciAgICAgICAgMTgxIC8qIFN1bk9TOiBhaW93YWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIgICAgICAgMTgyIC8qIFN1bk9TOiBhaW9jYW5jZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdwZW5kaW5nICAgICAgICAgMTgzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJMTg0IC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfc2V0cGdpZCAgICAgICAgICAgIDE4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyICAgICAgIDE4NiAvKiBTdW5PUzogcGF0aGNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdGtpbGwgICAgICAgICAgICAgIDE4NyAvKiBTdW5PUzogZnBhdGhjb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMTg4IC8qIExpbnV4IHNwZWNpZmljLCBzeXNjb25mIHVuZGVmIFN1bk9TICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bmFtZSAgICAgICAgICAgICAgMTg5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAgICAgICAgMTkwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAgICAgICAgMTkxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzICAgMTkyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgICAgICAgMTkzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9lcG9sbF9jdGwgICAgICAgICAgMTk0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9lcG9sbF93YWl0ICAgICAgICAgMTk1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pb3ByaW9fc2V0ICAgICAgICAgMTk2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwcGlkICAgICAgICAgICAgMTk3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdhY3Rpb24gICAgICAgICAgMTk4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZ2V0bWFzayAgICAgICAgICAgMTk5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zc2V0bWFzayAgICAgICAgICAgMjAwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdzdXNwZW5kICAgICAgICAgMjAxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9vbGRsc3RhdCAgICAgICAgICAgMjAyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91c2VsaWIgICAgICAgICAgICAgMjAzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkZGlyICAgICAgICAgICAgMjA0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkYWhlYWQgICAgICAgICAgMjA1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zb2NrZXRjYWxsICAgICAgICAgMjA2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgMjA3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAgICAgMjA4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mYWR2aXNlNjQgICAgICAgICAgMjA5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQgICAgICAgMjEwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90Z2tpbGwgICAgICAgICAgICAgMjExIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93YWl0cGlkICAgICAgICAgICAgMjEyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zd2Fwb2ZmICAgICAgICAgICAgMjEzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeXNpbmZvICAgICAgICAgICAgMjE0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pcGMgICAgICAgICAgICAgICAgMjE1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdyZXR1cm4gICAgICAgICAgMjE2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jbG9uZSAgICAgICAgICAgICAgMjE3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0ICAgICAgICAgMjE4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hZGp0aW1leCAgICAgICAgICAgMjE5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdwcm9jbWFzayAgICAgICAgMjIwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlICAgICAgMjIxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlICAgICAgMjIyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgICAgMjIzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwZ2lkICAgICAgICAgICAgMjI0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9iZGZsdXNoICAgICAgICAgICAgMjI1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeXNmcyAgICAgICAgICAgICAgMjI2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAgICAgICAgMjI3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRmc3VpZCAgICAgICAgICAgMjI4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRmc2dpZCAgICAgICAgICAgMjI5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9fbmV3c2VsZWN0ICAgICAgICAgMjMwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90aW1lICAgICAgICAgICAgICAgMjMxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zcGxpY2UgICAgICAgICAgICAgMjMyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zdGltZSAgICAgICAgICAgICAgMjMzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zdGF0ZnM2NCAgICAgICAgICAgMjM0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mc3RhdGZzNjQgICAgICAgICAgMjM1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9fbGxzZWVrICAgICAgICAgICAgMjM2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tbG9jayAgICAgICAgICAgICAgMjM3Ci0jZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgIDIzOAotI2RlZmluZSBfX05SX21sb2NrYWxsICAgICAgICAgICAyMzkKLSNkZWZpbmUgX19OUl9tdW5sb2NrYWxsICAgICAgICAgMjQwCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgIDI0MQotI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtICAgICAyNDIKLSNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgMjQzCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyIDI0NAotI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkICAgICAgICAyNDUKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IDI0NgotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gMjQ3Ci0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAyNDgKLSNkZWZpbmUgX19OUl9uYW5vc2xlZXAgICAgICAgICAgMjQ5Ci0jZGVmaW5lIF9fTlJfbXJlbWFwICAgICAgICAgICAgIDI1MAotI2RlZmluZSBfX05SX19zeXNjdGwgICAgICAgICAgICAyNTEKLSNkZWZpbmUgX19OUl9nZXRzaWQgICAgICAgICAgICAgMjUyCi0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgIDI1MwotI2RlZmluZSBfX05SX25mc3NlcnZjdGwgICAgICAgICAyNTQKLSNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMjU1Ci0jZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkyNTYKLSNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCTI1NwotI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkyNTgKLSNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJMjU5Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMjYwCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMjYxCi0jZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNjIKLSNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI2MwotI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjY0Ci0jZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI2NQotI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNjYKLS8qICNkZWZpbmUgX19OUl92c2VydmVyCQkyNjcgUmVzZXJ2ZWQgZm9yIFZTRVJWRVIgKi8KLSNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjY4Ci0jZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjY5Ci0jZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNzAKLSNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI3MQotI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNzIKLSNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzMKLSNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3NAotI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzUKLSNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc2Ci0jZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzcKLSNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3OAotI2RlZmluZSBfX05SX3dhaXRpZAkJMjc5Ci0jZGVmaW5lIF9fTlJfdGVlCQkyODAKLSNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODEKLSNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODIKLSNkZWZpbmUgX19OUl9rZXljdGwJCTI4MwotI2RlZmluZSBfX05SX29wZW5hdAkJMjg0Ci0jZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg1Ci0jZGVmaW5lIF9fTlJfbWtub2RhdAkJMjg2Ci0jZGVmaW5lIF9fTlJfZmNob3duYXQJCTI4NwotI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjg4Ci0jZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyODkKLSNkZWZpbmUgX19OUl91bmxpbmthdAkJMjkwCi0jZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5MQotI2RlZmluZSBfX05SX2xpbmthdAkJMjkyCi0jZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTMKLSNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTQKLSNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk1Ci0jZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkyOTYKLSNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMjk3Ci0jZGVmaW5lIF9fTlJfcHBvbGwJCTI5OAotI2RlZmluZSBfX05SX3Vuc2hhcmUJCTI5OQotI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDAKLSNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzAxCi0jZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkzMDIKLSNkZWZpbmUgX19OUl9tYmluZAkJMzAzCi0jZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkzMDQKLSNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CTMwNQotI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTMwNgotI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMwNwotI2RlZmluZSBfX05SX2dldGNwdQkJMzA4Ci0jZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMzA5Ci0jZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkzMTAKLSNkZWZpbmUgX19OUl9zaWduYWxmZAkJMzExCi0jZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJMzEyCi0jZGVmaW5lIF9fTlJfZXZlbnRmZAkJMzEzCi0jZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkzMTQKLSNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJMzE1Ci0jZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCTMxNgotCi0jZGVmaW5lIE5SX1NZU0NBTExTCQkzMTcKLQotLyogU3BhcmMgMzItYml0IG9ubHkgaGFzIHRoZSAic2V0cmVzdWlkMzIiLCAiZ2V0cmVzdWlkMzIiIHZhcmlhbnRzLAotICogaXQgbmV2ZXIgaGFkIHRoZSBwbGFpbiBvbmVzIGFuZCB0aGVyZSBpcyBubyB2YWx1ZSB0byBhZGRpbmcgdGhvc2UKLSAqIG9sZCB2ZXJzaW9ucyBpbnRvIHRoZSBzeXNjYWxsIHRhYmxlLgotICovCi0jZGVmaW5lIF9fSUdOT1JFX3NldHJlc3VpZAotI2RlZmluZSBfX0lHTk9SRV9nZXRyZXN1aWQKLSNkZWZpbmUgX19JR05PUkVfc2V0cmVzZ2lkCi0jZGVmaW5lIF9fSUdOT1JFX2dldHJlc2dpZAotCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgotI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgotI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAotCi0vKgotICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwotICoKLSAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCi0gKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKLSAqLwotI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX1NQQVJDX1VOSVNURF9IICovCisjaWZuZGVmIF9fX0FTTV9TUEFSQ19VTklTVERfSAorI2RlZmluZSBfX19BU01fU1BBUkNfVU5JU1REX0gKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2luY2x1ZGUgPGFzbS1zcGFyYy91bmlzdGRfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLXNwYXJjL3VuaXN0ZF8zMi5oPgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZF8zMi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzOGEwMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZF8zMi5oCkBAIC0wLDAgKzEsMzc4IEBACisjaWZuZGVmIF9TUEFSQ19VTklTVERfSAorI2RlZmluZSBfU1BBUkNfVU5JU1REX0gKKworLyoKKyAqIFN5c3RlbSBjYWxscyB1bmRlciB0aGUgU3BhcmMuCisgKgorICogRG9uJ3QgYmUgc2NhcmVkIGJ5IHRoZSB1Z2x5IGNsb2JiZXJzLCBpdCBpcyB0aGUgb25seSB3YXkgSSBjYW4KKyAqIHRoaW5rIG9mIHJpZ2h0IG5vdyB0byBmb3JjZSB0aGUgYXJndW1lbnRzIGludG8gZml4ZWQgcmVnaXN0ZXJzCisgKiBiZWZvcmUgdGhlIHRyYXAgaW50byB0aGUgc3lzdGVtIGNhbGwgd2l0aCBnY2MgJ2FzbScgc3RhdGVtZW50cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQorICoKKyAqIFN1bk9TIGNvbXBhdGliaWxpdHkgYmFzZWQgdXBvbiBwcmVsaW1pbmFyeSB3b3JrIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBBZHJpYW4gTS4gUm9kcmlndWV6IChhZHJpYW5AcmVtdXMucnV0Z2Vycy5lZHUpCisgKi8KKworI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAgICAgIDAgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9leGl0ICAgICAgICAgICAgICAgICAxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mb3JrICAgICAgICAgICAgICAgICAyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl93cml0ZSAgICAgICAgICAgICAgICA0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9vcGVuICAgICAgICAgICAgICAgICA1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICA2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl93YWl0NCAgICAgICAgICAgICAgICA3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jcmVhdCAgICAgICAgICAgICAgICA4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICA5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bmxpbmsgICAgICAgICAgICAgIDEwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9leGVjdiAgICAgICAgICAgICAgIDExIC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgIDEyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaG93bgkJIDEzIC8qIENvbW1vbgkJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9ta25vZCAgICAgICAgICAgICAgIDE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgIDE1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sY2hvd24gICAgICAgICAgICAgIDE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgIDE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wZXJmY3RyICAgICAgICAgICAgIDE4IC8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgb3BlcmF0aW9ucyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgIDE5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwaWQgICAgICAgICAgICAgIDIwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jYXBnZXQJCSAyMSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX2NhcHNldAkJIDIyIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfc2V0dWlkICAgICAgICAgICAgICAyMyAvKiBJbXBsZW1lbnRlZCB2aWEgc2V0cmV1aWQgaW4gU3VuT1MgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAyNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJICAgICAgICAgMjUgLyogRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KKyNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgIDI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIDI3IC8qIEltcGxlbWVudGVkIHZpYSBzZXRpdGltZXIgaW4gU3VuT1MgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkgMjggLyogQ29tbW9uCQkJCQkgICAqLworI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgMjkgLyogSXMgc2lnYmxvY2soMCktPnNpZ3BhdXNlKCkgaW4gU3VuT1MgICAgICAgICAqLworI2RlZmluZSBfX05SX3V0aW1lICAgICAgICAgICAgICAgMzAgLyogSW1wbGVtZW50ZWQgdmlhIHV0aW1lcygpIHVuZGVyIFN1bk9TICAgICAgICAqLworI2RlZmluZSBfX05SX2xjaG93bjMyICAgICAgICAgICAgMzEgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG93bjMyICAgICAgICAgICAgMzIgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2FjY2VzcyAgICAgICAgICAgICAgMzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX25pY2UgICAgICAgICAgICAgICAgMzQgLyogSW1wbGVtZW50ZWQgdmlhIGdldC9zZXRwcmlvcml0eSgpIGluIFN1bk9TICAqLworI2RlZmluZSBfX05SX2Nob3duMzIgICAgICAgICAgICAgMzUgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N5bmMgICAgICAgICAgICAgICAgMzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2tpbGwgICAgICAgICAgICAgICAgMzcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N0YXQgICAgICAgICAgICAgICAgMzggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NlbmRmaWxlCQkgMzkgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9sc3RhdCAgICAgICAgICAgICAgIDQwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9kdXAgICAgICAgICAgICAgICAgIDQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgIDQyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl90aW1lcyAgICAgICAgICAgICAgIDQzIC8qIEltcGxlbWVudGVkIHZpYSBnZXRydXNhZ2UoKSBpbiBTdW5PUyAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR1aWQzMiAgICAgICAgICAgIDQ0IC8qIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgIDQ1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRnaWQgICAgICAgICAgICAgIDQ2IC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZWdpZCgpIGluIFN1bk9TICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRnaWQgICAgICAgICAgICAgIDQ3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWduYWwgICAgICAgICAgICAgIDQ4IC8qIEltcGxlbWVudGVkIHZpYSBzaWd2ZWMoKSBpbiBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRldWlkICAgICAgICAgICAgIDQ5IC8qIFN1bk9TIGNhbGxzIGdldHVpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRlZ2lkICAgICAgICAgICAgIDUwIC8qIFN1bk9TIGNhbGxzIGdldGdpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9hY2N0ICAgICAgICAgICAgICAgIDUxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9tZW1vcnlfb3JkZXJpbmcgIDUyICAgIExpbnV4IHNwYXJjNjQgc3BlY2lmaWMJCQkgICAqLworI2RlZmluZSBfX05SX2dldGdpZDMyICAgICAgICAgICAgNTMgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2lvY3RsICAgICAgICAgICAgICAgNTQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlYm9vdCAgICAgICAgICAgICAgNTUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21tYXAyCQkgNTYgLyogTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCisjZGVmaW5lIF9fTlJfc3ltbGluayAgICAgICAgICAgICA1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICA1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZXhlY3ZlICAgICAgICAgICAgICA1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdW1hc2sgICAgICAgICAgICAgICA2MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY2hyb290ICAgICAgICAgICAgICA2MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN0YXQgICAgICAgICAgICAgICA2MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJIDYzIC8qIExpbnV4IFNwZWNpZmljCQkJICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHBhZ2VzaXplICAgICAgICAgNjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21zeW5jICAgICAgICAgICAgICAgNjUgLyogQ29tbW9uIGluIG5ld2VyIDEuMy54IHJldnMuLi4gICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Zmb3JrICAgICAgICAgICAgICAgNjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3ByZWFkNjQgICAgICAgICAgICAgNjcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3B3cml0ZTY0ICAgICAgICAgICAgNjggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGV1aWQzMiAgICAgICAgICAgNjkgLyogTGludXggc3BhcmMzMiwgc2JyayB1bmRlciBTdW5PUyAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGVnaWQzMiAgICAgICAgICAgNzAgLyogTGludXggc3BhcmMzMiwgc3N0ayB1bmRlciBTdW5PUyAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21tYXAgICAgICAgICAgICAgICAgNzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJldWlkMzIgICAgICAgICAgNzIgLyogTGludXggc3BhcmMzMiwgdmFkdmlzZSB1bmRlciBTdW5PUyAgICAgICAgICAqLworI2RlZmluZSBfX05SX211bm1hcCAgICAgICAgICAgICAgNzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21wcm90ZWN0ICAgICAgICAgICAgNzQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21hZHZpc2UgICAgICAgICAgICAgNzUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3ZoYW5ndXAgICAgICAgICAgICAgNzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCSA3NyAvKiBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KKyNkZWZpbmUgX19OUl9taW5jb3JlICAgICAgICAgICAgIDc4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRncm91cHMgICAgICAgICAgIDc5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRncm91cHMgICAgICAgICAgIDgwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwZ3JwICAgICAgICAgICAgIDgxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRncm91cHMzMiAgICAgICAgIDgyIC8qIExpbnV4IHNwYXJjMzIsIHNldHBncnAgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRpdGltZXIgICAgICAgICAgIDgzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkgODQgLyogTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCisjZGVmaW5lIF9fTlJfc3dhcG9uICAgICAgICAgICAgICA4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgICA4NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0dWlkMzIgICAgICAgICAgICA4NyAvKiBMaW51eCBzcGFyYzMyLCBnZXRob3N0bmFtZSB1bmRlciBTdW5PUyAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICA4OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIgICAgICAgICAgICA4OSAvKiBMaW51eCBzcGFyYzMyLCBnZXRkdGFibGVzaXplIHVuZGVyIFN1bk9TICAgICovCisjZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICA5MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMiAgICAgICAgICA5MSAvKiBMaW51eCBzcGFyYzMyLCBnZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmNudGwgICAgICAgICAgICAgICA5MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VsZWN0ICAgICAgICAgICAgICA5MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAgICAgICAgICA5NCAvKiBMaW51eCBzcGFyYzMyLCBzZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN5bmMgICAgICAgICAgICAgICA5NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICA5NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICA5NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICA5OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICA5OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgIDEwMCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuICAgICAgIDEwMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIDEwMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgIDEwMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAgICAgIDEwNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgIDEwNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvICAgIDEwNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAgICAgIDEwNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIgICAgICAgIDEwOCAvKiBMaW51eCBTcGVjaWZpYywgc2lndmVjIHVuZGVyIFN1bk9TCSAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIgICAgICAgIDEwOSAvKiBMaW51eCBTcGVjaWZpYywgc2lnYmxvY2sgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMiAgICAgICAgMTEwIC8qIExpbnV4IFNwZWNpZmljLCBzaWdzZXRtYXNrIHVuZGVyIFN1bk9TCSAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIgICAgICAgIDExMSAvKiBMaW51eCBTcGVjaWZpYywgc2lncGF1c2UgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9zZXRyZWdpZDMyICAgICAgICAgMTEyIC8qIExpbnV4IHNwYXJjMzIsIHNpZ3N0YWNrIHVuZGVyIFN1bk9TICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWN2bXNnICAgICAgICAgICAgMTEzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZW5kbXNnICAgICAgICAgICAgMTE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAgICAgICAgMTE1IC8qIExpbnV4IHNwYXJjMzIsIHZ0cmFjZSB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgMTE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgMTE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0ICAgICAgICAgMTE4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRjd2QJCTExOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX3JlYWR2ICAgICAgICAgICAgICAxMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAxMjEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAgICAgICAxMjIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAxMjMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAxMjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAxMjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJldWlkICAgICAgICAgICAxMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJlZ2lkICAgICAgICAgICAxMjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAxMjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAxMjkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAgICAgICAgICAxMzAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAxMzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xzdGF0NjQJCTEzMiAvKiBMaW51eCBTcGVjaWZpYwkJCSAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZW5kdG8gICAgICAgICAgICAgMTMzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaHV0ZG93biAgICAgICAgICAgMTM0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zb2NrZXRwYWlyICAgICAgICAgMTM1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9ta2RpciAgICAgICAgICAgICAgMTM2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9ybWRpciAgICAgICAgICAgICAgMTM3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91dGltZXMgICAgICAgICAgICAgMTM4IC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zdGF0NjQJCTEzOSAvKiBMaW51eCBTcGVjaWZpYwkJCSAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0ICAgICAgICAgMTQwIC8qIGFkanRpbWUgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwZWVybmFtZSAgICAgICAgMTQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mdXRleCAgICAgICAgICAgICAgMTQyIC8qIGdldGhvc3RpZCB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR0aWQgICAgICAgICAgICAgMTQzIC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRybGltaXQgICAgICAgICAgMTQ0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRybGltaXQgICAgICAgICAgMTQ1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkxNDYgLyogTGludXggU3BlY2lmaWMsIGtpbGxwZyB1bmRlciBTdW5PUyAgICAgICAgICAqLworI2RlZmluZSBfX05SX3ByY3RsCQkxNDcgLyogRU5PU1lTIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3BjaWNvbmZpZ19yZWFkCTE0OCAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3dyaXRlCTE0OSAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgIDE1MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0ICAgICAgIDE1MSAvKiBMaW51eCBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggIDE1MiAvKiBMaW51eCBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgIDE1MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMTU0IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJMTU1IC8qIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoICAgMTU2IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfc3RhdGZzICAgICAgICAgICAgIDE1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN0YXRmcyAgICAgICAgICAgIDE1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdW1vdW50ICAgICAgICAgICAgIDE1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0X2FmZmluaXR5IDE2MCAvKiBMaW51eCBzcGVjaWZpYywgYXN5bmNfZGFlbW9uIHVuZGVyIFN1bk9TICAgICovCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X2FmZmluaXR5IDE2MSAvKiBMaW51eCBzcGVjaWZpYywgZ2V0ZmggdW5kZXIgU3VuT1MgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0ZG9tYWlubmFtZSAgICAgIDE2MiAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAgICAgIDE2MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfdXRyYXBfaW5zdGFsbCAgIDE2NCAgICBMaW51eCBzcGFyYzY0IHNwZWNpZmljCQkJICAgKi8KKyNkZWZpbmUgX19OUl9xdW90YWN0bCAgICAgICAgICAgMTY1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MgICAgMTY2IC8qIExpbnV4IHNwZWNpZmljLCBleHBvcnRmcyB1bmRlciBTdW5PUyAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tb3VudCAgICAgICAgICAgICAgMTY3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91c3RhdCAgICAgICAgICAgICAgMTY4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXR4YXR0ciAgICAgICAgICAgMTY5IC8qIFN1bk9TOiBzZW1zeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIgICAgICAgICAgMTcwIC8qIFN1bk9TOiBtc2dzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mc2V0eGF0dHIgICAgICAgICAgMTcxIC8qIFN1bk9TOiBzaG1zeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR4YXR0ciAgICAgICAgICAgMTcyIC8qIFN1bk9TOiBhdWRpdHN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIgICAgICAgICAgMTczIC8qIFN1bk9TOiByZnNzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRkZW50cyAgICAgICAgICAgMTc0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRzaWQgICAgICAgICAgICAgMTc1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mY2hkaXIgICAgICAgICAgICAgMTc2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgICAgICAgICAgMTc3IC8qIFN1bk9TOiBmY2hyb290ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9saXN0eGF0dHIgICAgICAgICAgMTc4IC8qIFN1bk9TOiB2cGl4c3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyICAgICAgICAgMTc5IC8qIFN1bk9TOiBhaW9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mbGlzdHhhdHRyICAgICAgICAgMTgwIC8qIFN1bk9TOiBhaW93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZW1vdmV4YXR0ciAgICAgICAgMTgxIC8qIFN1bk9TOiBhaW93YWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIgICAgICAgMTgyIC8qIFN1bk9TOiBhaW9jYW5jZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nICAgICAgICAgMTgzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJMTg0IC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfc2V0cGdpZCAgICAgICAgICAgIDE4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyICAgICAgIDE4NiAvKiBTdW5PUzogcGF0aGNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdGtpbGwgICAgICAgICAgICAgIDE4NyAvKiBTdW5PUzogZnBhdGhjb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMTg4IC8qIExpbnV4IHNwZWNpZmljLCBzeXNjb25mIHVuZGVmIFN1bk9TICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bmFtZSAgICAgICAgICAgICAgMTg5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAgICAgICAgMTkwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAgICAgICAgMTkxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzICAgMTkyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgICAgICAgMTkzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwgICAgICAgICAgMTk0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0ICAgICAgICAgMTk1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pb3ByaW9fc2V0ICAgICAgICAgMTk2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwcGlkICAgICAgICAgICAgMTk3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24gICAgICAgICAgMTk4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZ2V0bWFzayAgICAgICAgICAgMTk5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zc2V0bWFzayAgICAgICAgICAgMjAwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kICAgICAgICAgMjAxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9vbGRsc3RhdCAgICAgICAgICAgMjAyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91c2VsaWIgICAgICAgICAgICAgMjAzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWFkZGlyICAgICAgICAgICAgMjA0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQgICAgICAgICAgMjA1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zb2NrZXRjYWxsICAgICAgICAgMjA2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgMjA3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAgICAgMjA4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mYWR2aXNlNjQgICAgICAgICAgMjA5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQgICAgICAgMjEwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl90Z2tpbGwgICAgICAgICAgICAgMjExIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl93YWl0cGlkICAgICAgICAgICAgMjEyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zd2Fwb2ZmICAgICAgICAgICAgMjEzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zeXNpbmZvICAgICAgICAgICAgMjE0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pcGMgICAgICAgICAgICAgICAgMjE1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4gICAgICAgICAgMjE2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jbG9uZSAgICAgICAgICAgICAgMjE3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0ICAgICAgICAgMjE4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9hZGp0aW1leCAgICAgICAgICAgMjE5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzayAgICAgICAgMjIwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlICAgICAgMjIxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlICAgICAgMjIyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgICAgMjIzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwZ2lkICAgICAgICAgICAgMjI0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9iZGZsdXNoICAgICAgICAgICAgMjI1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zeXNmcyAgICAgICAgICAgICAgMjI2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAgICAgICAgMjI3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZCAgICAgICAgICAgMjI4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRmc2dpZCAgICAgICAgICAgMjI5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0ICAgICAgICAgMjMwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl90aW1lICAgICAgICAgICAgICAgMjMxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zcGxpY2UgICAgICAgICAgICAgMjMyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zdGltZSAgICAgICAgICAgICAgMjMzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zdGF0ZnM2NCAgICAgICAgICAgMjM0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQgICAgICAgICAgMjM1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9fbGxzZWVrICAgICAgICAgICAgMjM2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tbG9jayAgICAgICAgICAgICAgMjM3CisjZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgIDIzOAorI2RlZmluZSBfX05SX21sb2NrYWxsICAgICAgICAgICAyMzkKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsICAgICAgICAgMjQwCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgIDI0MQorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtICAgICAyNDIKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgMjQzCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyIDI0NAorI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkICAgICAgICAyNDUKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IDI0NgorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gMjQ3CisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAyNDgKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAgICAgICAgICAgMjQ5CisjZGVmaW5lIF9fTlJfbXJlbWFwICAgICAgICAgICAgIDI1MAorI2RlZmluZSBfX05SX19zeXNjdGwgICAgICAgICAgICAyNTEKKyNkZWZpbmUgX19OUl9nZXRzaWQgICAgICAgICAgICAgMjUyCisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgIDI1MworI2RlZmluZSBfX05SX25mc3NlcnZjdGwgICAgICAgICAyNTQKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMjU1CisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkyNTYKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCTI1NworI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkyNTgKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJMjU5CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMjYwCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMjYxCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNjIKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI2MworI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjY0CisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI2NQorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNjYKKy8qICNkZWZpbmUgX19OUl92c2VydmVyCQkyNjcgUmVzZXJ2ZWQgZm9yIFZTRVJWRVIgKi8KKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjY4CisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjY5CisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNzAKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI3MQorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNzIKKyNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzMKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3NAorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzUKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc2CisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzcKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3OAorI2RlZmluZSBfX05SX3dhaXRpZAkJMjc5CisjZGVmaW5lIF9fTlJfdGVlCQkyODAKKyNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODEKKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODIKKyNkZWZpbmUgX19OUl9rZXljdGwJCTI4MworI2RlZmluZSBfX05SX29wZW5hdAkJMjg0CisjZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg1CisjZGVmaW5lIF9fTlJfbWtub2RhdAkJMjg2CisjZGVmaW5lIF9fTlJfZmNob3duYXQJCTI4NworI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjg4CisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyODkKKyNkZWZpbmUgX19OUl91bmxpbmthdAkJMjkwCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5MQorI2RlZmluZSBfX05SX2xpbmthdAkJMjkyCisjZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTMKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTQKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk1CisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkyOTYKKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMjk3CisjZGVmaW5lIF9fTlJfcHBvbGwJCTI5OAorI2RlZmluZSBfX05SX3Vuc2hhcmUJCTI5OQorI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDAKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzAxCisjZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkzMDIKKyNkZWZpbmUgX19OUl9tYmluZAkJMzAzCisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkzMDQKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CTMwNQorI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTMwNgorI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMwNworI2RlZmluZSBfX05SX2dldGNwdQkJMzA4CisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMzA5CisjZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkzMTAKKyNkZWZpbmUgX19OUl9zaWduYWxmZAkJMzExCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJMzEyCisjZGVmaW5lIF9fTlJfZXZlbnRmZAkJMzEzCisjZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkzMTQKKyNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJMzE1CisjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCTMxNgorCisjZGVmaW5lIE5SX1NZU0NBTExTCQkzMTcKKworLyogU3BhcmMgMzItYml0IG9ubHkgaGFzIHRoZSAic2V0cmVzdWlkMzIiLCAiZ2V0cmVzdWlkMzIiIHZhcmlhbnRzLAorICogaXQgbmV2ZXIgaGFkIHRoZSBwbGFpbiBvbmVzIGFuZCB0aGVyZSBpcyBubyB2YWx1ZSB0byBhZGRpbmcgdGhvc2UKKyAqIG9sZCB2ZXJzaW9ucyBpbnRvIHRoZSBzeXNjYWxsIHRhYmxlLgorICovCisjZGVmaW5lIF9fSUdOT1JFX3NldHJlc3VpZAorI2RlZmluZSBfX0lHTk9SRV9nZXRyZXN1aWQKKyNkZWZpbmUgX19JR05PUkVfc2V0cmVzZ2lkCisjZGVmaW5lIF9fSUdOT1JFX2dldHJlc2dpZAorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAorCisvKgorICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscworICoKKyAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCisgKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKKyAqLworI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX1NQQVJDX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGRfNjQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZF82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYmU0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGRfNjQuaApAQCAtMCwwICsxLDM3MyBAQAorI2lmbmRlZiBfU1BBUkM2NF9VTklTVERfSAorI2RlZmluZSBfU1BBUkM2NF9VTklTVERfSAorCisvKgorICogU3lzdGVtIGNhbGxzIHVuZGVyIHRoZSBTcGFyYy4KKyAqCisgKiBEb24ndCBiZSBzY2FyZWQgYnkgdGhlIHVnbHkgY2xvYmJlcnMsIGl0IGlzIHRoZSBvbmx5IHdheSBJIGNhbgorICogdGhpbmsgb2YgcmlnaHQgbm93IHRvIGZvcmNlIHRoZSBhcmd1bWVudHMgaW50byBmaXhlZCByZWdpc3RlcnMKKyAqIGJlZm9yZSB0aGUgdHJhcCBpbnRvIHRoZSBzeXN0ZW0gY2FsbCB3aXRoIGdjYyAnYXNtJyBzdGF0ZW1lbnRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKgorICogU3VuT1MgY29tcGF0aWJpbGl0eSBiYXNlZCB1cG9uIHByZWxpbWluYXJ5IHdvcmsgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IEFkcmlhbiBNLiBSb2RyaWd1ZXogKGFkcmlhbkByZW11cy5ydXRnZXJzLmVkdSkKKyAqLworCisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsICAgICAgMCAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX2V4aXQgICAgICAgICAgICAgICAgIDEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZvcmsgICAgICAgICAgICAgICAgIDIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlYWQgICAgICAgICAgICAgICAgIDMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dyaXRlICAgICAgICAgICAgICAgIDQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX29wZW4gICAgICAgICAgICAgICAgIDUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Nsb3NlICAgICAgICAgICAgICAgIDYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dhaXQ0ICAgICAgICAgICAgICAgIDcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NyZWF0ICAgICAgICAgICAgICAgIDggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xpbmsgICAgICAgICAgICAgICAgIDkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3VubGluayAgICAgICAgICAgICAgMTAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2V4ZWN2ICAgICAgICAgICAgICAgMTEgLyogU3VuT1MgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NoZGlyICAgICAgICAgICAgICAgMTIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Nob3duCQkgMTMgLyogQ29tbW9uCQkJCQkgICAqLworI2RlZmluZSBfX05SX21rbm9kICAgICAgICAgICAgICAgMTQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NobW9kICAgICAgICAgICAgICAgMTUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xjaG93biAgICAgICAgICAgICAgMTYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2JyayAgICAgICAgICAgICAgICAgMTcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3BlcmZjdHIgICAgICAgICAgICAgMTggLyogUGVyZm9ybWFuY2UgY291bnRlciBvcGVyYXRpb25zICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xzZWVrICAgICAgICAgICAgICAgMTkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHBpZCAgICAgICAgICAgICAgMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NhcGdldAkJIDIxIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkgMjIgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9zZXR1aWQgICAgICAgICAgICAgIDIzIC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZXVpZCBpbiBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR1aWQgICAgICAgICAgICAgIDI0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl92bXNwbGljZQkgICAgICAgICAyNSAvKiBFTk9TWVMgdW5kZXIgU3VuT1MJCQkgICAqLworI2RlZmluZSBfX05SX3B0cmFjZSAgICAgICAgICAgICAgMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2FsYXJtICAgICAgICAgICAgICAgMjcgLyogSW1wbGVtZW50ZWQgdmlhIHNldGl0aW1lciBpbiBTdW5PUyAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCSAyOCAvKiBDb21tb24JCQkJCSAgICovCisjZGVmaW5lIF9fTlJfcGF1c2UgICAgICAgICAgICAgICAyOSAvKiBJcyBzaWdibG9jaygwKS0+c2lncGF1c2UoKSBpbiBTdW5PUyAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXRpbWUgICAgICAgICAgICAgICAzMCAvKiBJbXBsZW1lbnRlZCB2aWEgdXRpbWVzKCkgdW5kZXIgU3VuT1MgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfbGNob3duMzIgICAgICAgICAzMSAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfZmNob3duMzIgICAgICAgICAzMiAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYWNjZXNzICAgICAgICAgICAgICAzMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbmljZSAgICAgICAgICAgICAgICAzNCAvKiBJbXBsZW1lbnRlZCB2aWEgZ2V0L3NldHByaW9yaXR5KCkgaW4gU3VuT1MgICovCisvKiAjZGVmaW5lIF9fTlJfY2hvd24zMiAgICAgICAgICAzNSAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3luYyAgICAgICAgICAgICAgICAzNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfa2lsbCAgICAgICAgICAgICAgICAzNyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3RhdCAgICAgICAgICAgICAgICAzOCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VuZGZpbGUJCSAzOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX2xzdGF0ICAgICAgICAgICAgICAgNDAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2R1cCAgICAgICAgICAgICAgICAgNDEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3BpcGUgICAgICAgICAgICAgICAgNDIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RpbWVzICAgICAgICAgICAgICAgNDMgLyogSW1wbGVtZW50ZWQgdmlhIGdldHJ1c2FnZSgpIGluIFN1bk9TICAgICAgICAqLworLyogI2RlZmluZSBfX05SX2dldHVpZDMyICAgICAgICAgNDQgICAgTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Vtb3VudDIgICAgICAgICAgICAgNDUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGdpZCAgICAgICAgICAgICAgNDYgLyogSW1wbGVtZW50ZWQgdmlhIHNldHJlZ2lkKCkgaW4gU3VuT1MgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGdpZCAgICAgICAgICAgICAgNDcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ25hbCAgICAgICAgICAgICAgNDggLyogSW1wbGVtZW50ZWQgdmlhIHNpZ3ZlYygpIGluIFN1bk9TICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGV1aWQgICAgICAgICAgICAgNDkgLyogU3VuT1MgY2FsbHMgZ2V0dWlkKCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGVnaWQgICAgICAgICAgICAgNTAgLyogU3VuT1MgY2FsbHMgZ2V0Z2lkKCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2FjY3QgICAgICAgICAgICAgICAgNTEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21lbW9yeV9vcmRlcmluZwkgNTIgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRnaWQzMiAgICAgICAgIDUzICAgIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgIDU0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWJvb3QgICAgICAgICAgICAgIDU1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9tbWFwMgkJIDU2ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zeW1saW5rICAgICAgICAgICAgIDU3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWFkbGluayAgICAgICAgICAgIDU4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9leGVjdmUgICAgICAgICAgICAgIDU5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bWFzayAgICAgICAgICAgICAgIDYwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaHJvb3QgICAgICAgICAgICAgIDYxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mc3RhdCAgICAgICAgICAgICAgIDYyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mc3RhdDY0ICAgICAgICAgICAgIDYzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwYWdlc2l6ZSAgICAgICAgIDY0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgIDY1IC8qIENvbW1vbiBpbiBuZXdlciAxLjMueCByZXZzLi4uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl92Zm9yayAgICAgICAgICAgICAgIDY2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wcmVhZDY0ICAgICAgICAgICAgIDY3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wd3JpdGU2NCAgICAgICAgICAgIDY4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRldWlkMzIgICAgICAgIDY5ICAgIExpbnV4IHNwYXJjMzIsIHNicmsgdW5kZXIgU3VuT1MgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRlZ2lkMzIgICAgICAgIDcwICAgIExpbnV4IHNwYXJjMzIsIHNzdGsgdW5kZXIgU3VuT1MgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tbWFwICAgICAgICAgICAgICAgIDcxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9zZXRyZXVpZDMyICAgICAgIDcyICAgIExpbnV4IHNwYXJjMzIsIHZhZHZpc2UgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tdW5tYXAgICAgICAgICAgICAgIDczIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tcHJvdGVjdCAgICAgICAgICAgIDc0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tYWR2aXNlICAgICAgICAgICAgIDc1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl92aGFuZ3VwICAgICAgICAgICAgIDc2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl90cnVuY2F0ZTY0ICAgICAgIDc3ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMJCQkgICAqLworI2RlZmluZSBfX05SX21pbmNvcmUgICAgICAgICAgICAgNzggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGdyb3VwcyAgICAgICAgICAgNzkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGdyb3VwcyAgICAgICAgICAgODAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHBncnAgICAgICAgICAgICAgODEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBfX05SX3NldGdyb3VwczMyICAgICAgODIgICAgTGludXggc3BhcmMzMiwgc2V0cGdycCB1bmRlciBTdW5PUyAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGl0aW1lciAgICAgICAgICAgODMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0ICAgICAgODQgICAgTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCisjZGVmaW5lIF9fTlJfc3dhcG9uICAgICAgICAgICAgICA4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgICA4NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfc2V0dWlkMzIgICAgICAgICA4NyAgICBMaW51eCBzcGFyYzMyLCBnZXRob3N0bmFtZSB1bmRlciBTdW5PUyAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICA4OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfc2V0Z2lkMzIgICAgICAgICA4OSAgICBMaW51eCBzcGFyYzMyLCBnZXRkdGFibGVzaXplIHVuZGVyIFN1bk9TICAgICovCisjZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICA5MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMiAgICAgICA5MSAgICBMaW51eCBzcGFyYzMyLCBnZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZmNudGwgICAgICAgICAgICAgICA5MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VsZWN0ICAgICAgICAgICAgICA5MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAgICAgICA5NCAgICBMaW51eCBzcGFyYzMyLCBzZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN5bmMgICAgICAgICAgICAgICA5NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICA5NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICA5NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICA5OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICA5OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgIDEwMCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuICAgICAgIDEwMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIDEwMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgIDEwMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAgICAgIDEwNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgIDEwNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvICAgIDEwNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAgICAgIDEwNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkICAgICAgICAgIDEwOCAvKiBMaW51eCBTcGVjaWZpYywgc2lndmVjIHVuZGVyIFN1bk9TCSAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkICAgICAgICAgIDEwOSAvKiBMaW51eCBTcGVjaWZpYywgc2lnYmxvY2sgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQgICAgICAgICAgMTEwIC8qIExpbnV4IFNwZWNpZmljLCBzaWdzZXRtYXNrIHVuZGVyIFN1bk9TCSAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkICAgICAgICAgIDExMSAvKiBMaW51eCBTcGVjaWZpYywgc2lncGF1c2UgdW5kZXIgU3VuT1MJICAgKi8KKy8qICNkZWZpbmUgX19OUl9zZXRyZWdpZDMyICAgICAgIDc1ICAgIExpbnV4IHNwYXJjMzIsIHNpZ3N0YWNrIHVuZGVyIFN1bk9TICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWN2bXNnICAgICAgICAgICAgMTEzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZW5kbXNnICAgICAgICAgICAgMTE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAgICAgMTE1ICAgIExpbnV4IHNwYXJjMzIsIHZ0cmFjZSB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgMTE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgMTE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0ICAgICAgICAgMTE4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRjd2QJCTExOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX3JlYWR2ICAgICAgICAgICAgICAxMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAxMjEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAgICAgICAxMjIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAxMjMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAxMjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAxMjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJldWlkICAgICAgICAgICAxMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJlZ2lkICAgICAgICAgICAxMjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAxMjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAxMjkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAgICAgICAgICAxMzAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAxMzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xzdGF0NjQJCTEzMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VuZHRvICAgICAgICAgICAgIDEzMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2h1dGRvd24gICAgICAgICAgIDEzNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc29ja2V0cGFpciAgICAgICAgIDEzNSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbWtkaXIgICAgICAgICAgICAgIDEzNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcm1kaXIgICAgICAgICAgICAgIDEzNyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXRpbWVzICAgICAgICAgICAgIDEzOCAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3RhdDY0CQkxMzkgLyogTGludXggU3BlY2lmaWMJCQkgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAgICAgICAgIDE0MCAvKiBhZGp0aW1lIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgICAgICAgIDE0MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnV0ZXggICAgICAgICAgICAgIDE0MiAvKiBnZXRob3N0aWQgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgIDE0MyAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkxNDQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJsaW1pdCAgICAgICAgICAxNDUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTE0NiAvKiBMaW51eCBTcGVjaWZpYywga2lsbHBnIHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcHJjdGwJCTE0NyAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3JlYWQJMTQ4IC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wY2ljb25maWdfd3JpdGUJMTQ5IC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZSAgICAgICAgMTUwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQgICAgICAgMTUxIC8qIExpbnV4IHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAgMTUyIC8qIExpbnV4IHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wb2xsICAgICAgICAgICAgICAgMTUzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkxNTQgLyogTGludXggc3BlY2lmaWMJCQkJICAgKi8KKy8qICNkZWZpbmUgX19OUl9mY250bDY0ICAgICAgICAgMTU1ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoICAgMTU2IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfc3RhdGZzICAgICAgICAgICAgIDE1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN0YXRmcyAgICAgICAgICAgIDE1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdW1vdW50ICAgICAgICAgICAgIDE1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0X2FmZmluaXR5IDE2MCAvKiBMaW51eCBzcGVjaWZpYywgYXN5bmNfZGFlbW9uIHVuZGVyIFN1bk9TICAgICovCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X2FmZmluaXR5IDE2MSAvKiBMaW51eCBzcGVjaWZpYywgZ2V0ZmggdW5kZXIgU3VuT1MgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0ZG9tYWlubmFtZSAgICAgIDE2MiAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAgICAgIDE2MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXRyYXBfaW5zdGFsbAkxNjQgLyogU1lTViBBQkkvdjkgcmVxdWlyZWQJCQkgICAqLworI2RlZmluZSBfX05SX3F1b3RhY3RsICAgICAgICAgICAxNjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcyAgICAxNjYgLyogTGludXggc3BlY2lmaWMsIGV4cG9ydGZzIHVuZGVyIFN1bk9TICAgICAgICAqLworI2RlZmluZSBfX05SX21vdW50ICAgICAgICAgICAgICAxNjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3VzdGF0ICAgICAgICAgICAgICAxNjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHhhdHRyICAgICAgICAgICAxNjkgLyogU3VuT1M6IHNlbXN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xzZXR4YXR0ciAgICAgICAgICAxNzAgLyogU3VuT1M6IG1zZ3N5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAgICAgICAgICAxNzEgLyogU3VuT1M6IHNobXN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHhhdHRyICAgICAgICAgICAxNzIgLyogU3VuT1M6IGF1ZGl0c3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xnZXR4YXR0ciAgICAgICAgICAxNzMgLyogU3VuT1M6IHJmc3N5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGRlbnRzICAgICAgICAgICAxNzQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHNpZCAgICAgICAgICAgICAxNzUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaGRpciAgICAgICAgICAgICAxNzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZnZXR4YXR0ciAgICAgICAgICAxNzcgLyogU3VuT1M6IGZjaHJvb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xpc3R4YXR0ciAgICAgICAgICAxNzggLyogU3VuT1M6IHZwaXhzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgICAgICAgICAxNzkgLyogU3VuT1M6IGFpb3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIgICAgICAgICAxODAgLyogU3VuT1M6IGFpb3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyICAgICAgICAxODEgLyogU3VuT1M6IGFpb3dhaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0ciAgICAgICAxODIgLyogU3VuT1M6IGFpb2NhbmNlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcgICAgICAgICAxODMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxODQgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9zZXRwZ2lkICAgICAgICAgICAgMTg1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIgICAgICAgMTg2IC8qIFN1bk9TOiBwYXRoY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl90a2lsbCAgICAgICAgICAgICAgMTg3IC8qIFN1bk9TOiBmcGF0aGNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkxODggLyogTGludXggc3BlY2lmaWMsIHN5c2NvbmYgdW5kZWYgU3VuT1MgICAgICAgICAqLworI2RlZmluZSBfX05SX3VuYW1lICAgICAgICAgICAgICAxODkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlICAgICAgICAxOTAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5ICAgICAgICAxOTEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgICAxOTIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAgICAgICAxOTMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAgICAgICAgICAxOTQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgICAgICAgICAxOTUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2lvcHJpb19zZXQgICAgICAgICAxOTYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHBwaWQgICAgICAgICAgICAxOTcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ2FjdGlvbiAgICAgICAgICAxOTggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NnZXRtYXNrICAgICAgICAgICAxOTkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NzZXRtYXNrICAgICAgICAgICAyMDAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQgICAgICAgICAyMDEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX29sZGxzdGF0ICAgICAgICAgICAyMDIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3VzZWxpYiAgICAgICAgICAgICAyMDMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlYWRkaXIgICAgICAgICAgICAyMDQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlYWRhaGVhZCAgICAgICAgICAyMDUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NvY2tldGNhbGwgICAgICAgICAyMDYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N5c2xvZyAgICAgICAgICAgICAyMDcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llICAgICAyMDggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZhZHZpc2U2NCAgICAgICAgICAyMDkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NCAgICAgICAyMTAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Rna2lsbCAgICAgICAgICAgICAyMTEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dhaXRwaWQgICAgICAgICAgICAyMTIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N3YXBvZmYgICAgICAgICAgICAyMTMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N5c2luZm8gICAgICAgICAgICAyMTQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2lwYyAgICAgICAgICAgICAgICAyMTUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ3JldHVybiAgICAgICAgICAyMTYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Nsb25lICAgICAgICAgICAgICAyMTcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2lvcHJpb19nZXQgICAgICAgICAyMTggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2FkanRpbWV4ICAgICAgICAgICAyMTkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrICAgICAgICAyMjAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUgICAgICAyMjEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgICAgICAyMjIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcyAgICAyMjMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHBnaWQgICAgICAgICAgICAyMjQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2JkZmx1c2ggICAgICAgICAgICAyMjUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N5c2ZzICAgICAgICAgICAgICAyMjYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsICAgICAgICAyMjcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGZzdWlkICAgICAgICAgICAyMjggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGZzZ2lkICAgICAgICAgICAyMjkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX19uZXdzZWxlY3QgICAgICAgICAyMzAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19OUl90aW1lCQkyMzEgLyogTGludXggc3BhcmMzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2VuZGlmCisjZGVmaW5lIF9fTlJfc3BsaWNlICAgICAgICAgICAgIDIzMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3RpbWUgICAgICAgICAgICAgIDIzMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQgICAgICAgICAgIDIzNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0ICAgICAgICAgIDIzNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfX2xsc2VlayAgICAgICAgICAgIDIzNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbWxvY2sgICAgICAgICAgICAgIDIzNworI2RlZmluZSBfX05SX211bmxvY2sgICAgICAgICAgICAyMzgKKyNkZWZpbmUgX19OUl9tbG9ja2FsbCAgICAgICAgICAgMjM5CisjZGVmaW5lIF9fTlJfbXVubG9ja2FsbCAgICAgICAgIDI0MAorI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtICAgICAyNDEKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAgICAgMjQyCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyIDI0MworI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlciAyNDQKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAgICAgICAgMjQ1CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAyNDYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluIDI0NworI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAgMjQ4CisjZGVmaW5lIF9fTlJfbmFub3NsZWVwICAgICAgICAgIDI0OQorI2RlZmluZSBfX05SX21yZW1hcCAgICAgICAgICAgICAyNTAKKyNkZWZpbmUgX19OUl9fc3lzY3RsICAgICAgICAgICAgMjUxCisjZGVmaW5lIF9fTlJfZ2V0c2lkICAgICAgICAgICAgIDI1MgorI2RlZmluZSBfX05SX2ZkYXRhc3luYyAgICAgICAgICAyNTMKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsICAgICAgICAgMjU0CisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTI1NQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU2CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNTcKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjU4CisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTI2MAorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTI2MQorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJMjYyCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkyNjMKKyNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCTI2NAorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkyNjUKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjY2CisvKiAjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjY3IFJlc2VydmVkIGZvciBWU0VSVkVSICovCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI2OAorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI2OQorI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjcwCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyNzEKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjcyCisjZGVmaW5lIF9fTlJfbXFfb3BlbgkJMjczCisjZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkyNzQKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJMjc1CisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCTI3NgorI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc3CisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzgKKyNkZWZpbmUgX19OUl93YWl0aWQJCTI3OQorI2RlZmluZSBfX05SX3RlZQkJMjgwCisjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjgxCisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgyCisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODMKKyNkZWZpbmUgX19OUl9vcGVuYXQJCTI4NAorI2RlZmluZSBfX05SX21rZGlyYXQJCTI4NQorI2RlZmluZSBfX05SX21rbm9kYXQJCTI4NgorI2RlZmluZSBfX05SX2ZjaG93bmF0CQkyODcKKyNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCTI4OAorI2RlZmluZSBfX05SX2ZzdGF0YXQ2NAkJMjg5CisjZGVmaW5lIF9fTlJfdW5saW5rYXQJCTI5MAorI2RlZmluZSBfX05SX3JlbmFtZWF0CQkyOTEKKyNkZWZpbmUgX19OUl9saW5rYXQJCTI5MgorI2RlZmluZSBfX05SX3N5bWxpbmthdAkJMjkzCisjZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJMjk0CisjZGVmaW5lIF9fTlJfZmNobW9kYXQJCTI5NQorI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJMjk2CisjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTI5NworI2RlZmluZSBfX05SX3Bwb2xsCQkyOTgKKyNkZWZpbmUgX19OUl91bnNoYXJlCQkyOTkKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzAwCisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwMQorI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMJMzAyCisjZGVmaW5lIF9fTlJfbWJpbmQJCTMwMworI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMzA0CisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkzMDUKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkzMDYKKyNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkzMDcKKyNkZWZpbmUgX19OUl9nZXRjcHUJCTMwOAorI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CTMwOQorI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJMzEwCisjZGVmaW5lIF9fTlJfc2lnbmFsZmQJCTMxMQorI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCTMxMgorI2RlZmluZSBfX05SX2V2ZW50ZmQJCTMxMworI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJMzE0CisjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCTMxNQorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkzMTYKKworI2RlZmluZSBOUl9TWVNDQUxMUwkJMzE3CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAorI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1JUX1NJR1NVU1BFTkQKKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9TUEFSQzY0X1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91cGEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3VwYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTYzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy91cGEuaApAQCAtMCwwICsxLDEwOSBAQAorI2lmbmRlZiBfU1BBUkM2NF9VUEFfSAorI2RlZmluZSBfU1BBUkM2NF9VUEFfSAorCisjaW5jbHVkZSA8YXNtL2FzaS5oPgorCisvKiBVUEEgbGV2ZWwgcmVnaXN0ZXJzIGFuZCBkZWZpbmVzLiAqLworCisvKiBVUEEgQ29uZmlnIFJlZ2lzdGVyICovCisjZGVmaW5lIFVQQV9DT05GSUdfUkVTVgkJMHhmZmZmZmZmZmMwMDAwMDAwIC8qIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVBBX0NPTkZJR19QQ09OCQkweDAwMDAwMDAwM2ZjMDAwMDAgLyogRGVwdGggb2YgdmFyaW91cyBzeXMgcXVldWVzLiAqLworI2RlZmluZSBVUEFfQ09ORklHX01JRAkJMHgwMDAwMDAwMDAwM2UwMDAwIC8qIE1vZHVsZSBJRC4gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVBBX0NPTkZJR19QQ0FQCQkweDAwMDAwMDAwMDAwMWZmZmYgLyogUG9ydCBDYXBhYmlsaXRpZXMuICAgICAgICAgICAqLworCisvKiBVUEEgUG9ydCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBVUEFfUE9SVElEX0ZOUAkJMHhmZjAwMDAwMDAwMDAwMDAwIC8qIEhhcmRjb2RlZCB0byAweGZjIG9uIHVsdHJhLiAgKi8KKyNkZWZpbmUgVVBBX1BPUlRJRF9SRVNWCQkweDAwZmZmZmY4MDAwMDAwMDAgLyogUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVUEFfUE9SVElEX0VDQ1ZBTElEICAgICAweDAwMDAwMDA0MDAwMDAwMDAgLyogWmVybyBpZiBtb2QgY2FuIGdlbmVyYXRlIEVDQyAqLworI2RlZmluZSBVUEFfUE9SVElEX09ORVJFQUQgICAgICAweDAwMDAwMDAyMDAwMDAwMDAgLyogU2V0IGlmIG1vZCBnZW5lcmF0ZXMgUF9SQVNCICAqLworI2RlZmluZSBVUEFfUE9SVElEX1BJTlRSRFEgICAgICAweDAwMDAwMDAxODAwMDAwMDAgLyogIyBvdXRzdGFuZGluZyBQX0lOVF9SRVEncyAgICAqLworI2RlZmluZSBVUEFfUE9SVElEX1BSRVFEUSAgICAgICAweDAwMDAwMDAwN2UwMDAwMDAgLyogc2xhdmUtd3IncyB0byBtb2Qgc3VwcG9ydGVkICAqLworI2RlZmluZSBVUEFfUE9SVElEX1BSRVFSRCAgICAgICAweDAwMDAwMDAwMDFlMDAwMDAgLyogIyBpbmNvbWluZyBQX1JFUSdzIHN1cHBvcnRlZCAqLworI2RlZmluZSBVUEFfUE9SVElEX1VQQUNBUCAgICAgICAweDAwMDAwMDAwMDAxZjAwMDAgLyogVVBBIGNhcGFiaWxpdGllcyBvZiBtb2QgICAgICAqLworI2RlZmluZSBVUEFfUE9SVElEX0lEICAgICAgICAgICAweDAwMDAwMDAwMDAwMGZmZmYgLyogTW9kdWxlIElkZW50aWZpY2F0aW9uIGJpdHMgICovCisKKy8qIFVQQSBJL08gc3BhY2UgYWNjZXNzb3JzICovCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgX3VwYV9yZWFkYih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgY2hhciByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1YmFcdFslMV0gJTIsICUwXHQvKiB1cGFfcmVhZGIgKi8iCisJCQkgICAgIDogIj1yIiAocmV0KQorCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgX3VwYV9yZWFkdyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgc2hvcnQgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhXHRbJTFdICUyLCAlMFx0LyogdXBhX3JlYWR3ICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfdXBhX3JlYWRsKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdXdhXHRbJTFdICUyLCAlMFx0LyogdXBhX3JlYWRsICovIgorCQkJICAgICA6ICI9ciIgKHJldCkKKwkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX3VwYV9yZWFkcSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YVx0WyUxXSAlMiwgJTBcdC8qIHVwYV9yZWFkcSAqLyIKKwkJCSAgICAgOiAiPXIiIChyZXQpCisJCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF91cGFfd3JpdGViKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGJhXHQlMCwgWyUxXSAlMlx0LyogdXBhX3dyaXRlYiAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChiKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3VwYV93cml0ZXcodW5zaWduZWQgc2hvcnQgdywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhhXHQlMCwgWyUxXSAlMlx0LyogdXBhX3dyaXRldyAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogInIiICh3KSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3VwYV93cml0ZWwodW5zaWduZWQgaW50IGwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JTAsIFslMV0gJTJcdC8qIHVwYV93cml0ZWwgKi8iCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAobCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF91cGFfd3JpdGVxKHVuc2lnbmVkIGxvbmcgcSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhXHQlMCwgWyUxXSAlMlx0LyogdXBhX3dyaXRlcSAqLyIKKwkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkgICAgIDogInIiIChxKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOworfQorCisjZGVmaW5lIHVwYV9yZWFkYihfX2FkZHIpCQkoX3VwYV9yZWFkYigodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIHVwYV9yZWFkdyhfX2FkZHIpCQkoX3VwYV9yZWFkdygodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIHVwYV9yZWFkbChfX2FkZHIpCQkoX3VwYV9yZWFkbCgodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIHVwYV9yZWFkcShfX2FkZHIpCQkoX3VwYV9yZWFkcSgodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIHVwYV93cml0ZWIoX19iLCBfX2FkZHIpCQkoX3VwYV93cml0ZWIoKF9fYiksICh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNkZWZpbmUgdXBhX3dyaXRldyhfX3csIF9fYWRkcikJCShfdXBhX3dyaXRldygoX193KSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQorI2RlZmluZSB1cGFfd3JpdGVsKF9fbCwgX19hZGRyKQkJKF91cGFfd3JpdGVsKChfX2wpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCisjZGVmaW5lIHVwYV93cml0ZXEoX19xLCBfX2FkZHIpCQkoX3VwYV93cml0ZXEoKF9fcSksICh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICYmICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfVVBBX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91dHJhcC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdXRyYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGEzN2JhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdXRyYXAuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogaW5jbHVkZS9hc20tc3BhcmM2NC91dHJhcC5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKi8KKworI2lmbmRlZiBfX0FTTV9TUEFSQzY0X1VUUkFQX0gKKyNkZWZpbmUgX19BU01fU1BBUkM2NF9VVFJBUF9ICisKKyNkZWZpbmUgVVRfSU5TVFJVQ1RJT05fRVhDRVBUSU9OCQkxCisjZGVmaW5lIFVUX0lOU1RSVUNUSU9OX0VSUk9SCQkJMgorI2RlZmluZSBVVF9JTlNUUlVDVElPTl9QUk9URUNUSU9OCQkzCisjZGVmaW5lIFVUX0lMTFRSQVBfSU5TVFJVQ1RJT04JCQk0CisjZGVmaW5lIFVUX0lMTEVHQUxfSU5TVFJVQ1RJT04JCQk1CisjZGVmaW5lIFVUX1BSSVZJTEVHRURfT1BDT0RFCQkJNgorI2RlZmluZSBVVF9GUF9ESVNBQkxFRAkJCQk3CisjZGVmaW5lIFVUX0ZQX0VYQ0VQVElPTl9JRUVFXzc1NAkJOAorI2RlZmluZSBVVF9GUF9FWENFUFRJT05fT1RIRVIJCQk5CisjZGVmaW5lIFVUX1RBR19PVkVSVklFVwkJCQkxMAorI2RlZmluZSBVVF9ESVZJU0lPTl9CWV9aRVJPCQkJMTEKKyNkZWZpbmUgVVRfREFUQV9FWENFUFRJT04JCQkxMgorI2RlZmluZSBVVF9EQVRBX0VSUk9SCQkJCTEzCisjZGVmaW5lIFVUX0RBVEFfUFJPVEVDVElPTgkJCTE0CisjZGVmaW5lIFVUX01FTV9BRERSRVNTX05PVF9BTElHTkVECQkxNQorI2RlZmluZSBVVF9QUklWSUxFR0VEX0FDVElPTgkJCTE2CisjZGVmaW5lIFVUX0FTWU5DX0RBVEFfRVJST1IJCQkxNworI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzE2CQkJMTgKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8xNwkJCTE5CisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMTgJCQkyMAorI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzE5CQkJMjEKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yMAkJCTIyCisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjEJCQkyMworI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzIyCQkJMjQKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yMwkJCTI1CisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjQJCQkyNgorI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzI1CQkJMjcKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yNgkJCTI4CisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjcJCQkyOQorI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzI4CQkJMzAKKyNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yOQkJCTMxCisjZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMzAJCQkzMgorI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzMxCQkJMzMKKworI2RlZmluZQlVVEhfTk9DSEFOR0UJCQkJKC0xKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordHlwZWRlZiBpbnQgdXRyYXBfZW50cnlfdDsKK3R5cGVkZWYgdm9pZCAqdXRyYXBfaGFuZGxlcl90OworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogIShfX0FTTV9TUEFSQzY0X1BST0NFU1NPUl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdmFkZHJzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy92YWRkcnMuaAppbmRleCBmNmNhNDc3Li5hMjJmZWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy92YWRkcnMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy92YWRkcnMuaApAQCAtMzQsMTEgKzM0LDYgQEAKICNkZWZpbmUgSU9CQVNFX1ZBRERSCQkweGZlMDAwMDAwCiAjZGVmaW5lIElPQkFTRV9FTkQJCTB4ZmU2MDAwMDAKIAotI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkweGZlNjAwMDAwCi0KLS8qIFhYWCBBbHRlciB0aGlzIHdoZW4gSSBnZXQgYXJvdW5kIHRvIGZpeGluZyBzdW40YyAtIEFudG9uICovCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQkweGZmYzAwMDAwCi0KIC8qCiAgKiBPbiB0aGUgc3VuNC80YyB3ZSBuZWVkIGEgcGxhY2UKICAqIHRvIHJlbGlhYmx5IG1hcCBsb2NrZWQgZG93biBrZXJuZWwgZGF0YS4gIFRoaXMgaW5jbHVkZXMgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy92aW8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3Zpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZGUzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy92aW8uaApAQCAtMCwwICsxLDQwNiBAQAorI2lmbmRlZiBfU1BBUkM2NF9WSU9fSAorI2RlZmluZSBfU1BBUkM2NF9WSU9fSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorCisjaW5jbHVkZSA8YXNtL2xkYy5oPgorI2luY2x1ZGUgPGFzbS9tZGVzYy5oPgorCitzdHJ1Y3QgdmlvX21zZ190YWcgeworCXU4CQkJdHlwZTsKKyNkZWZpbmUgVklPX1RZUEVfQ1RSTAkJMHgwMQorI2RlZmluZSBWSU9fVFlQRV9EQVRBCQkweDAyCisjZGVmaW5lIFZJT19UWVBFX0VSUgkJMHgwNAorCisJdTgJCQlzdHlwZTsKKyNkZWZpbmUgVklPX1NVQlRZUEVfSU5GTwkweDAxCisjZGVmaW5lIFZJT19TVUJUWVBFX0FDSwkJMHgwMgorI2RlZmluZSBWSU9fU1VCVFlQRV9OQUNLCTB4MDQKKworCXUxNgkJCXN0eXBlX2VudjsKKyNkZWZpbmUgVklPX1ZFUl9JTkZPCQkweDAwMDEKKyNkZWZpbmUgVklPX0FUVFJfSU5GTwkJMHgwMDAyCisjZGVmaW5lIFZJT19EUklOR19SRUcJCTB4MDAwMworI2RlZmluZSBWSU9fRFJJTkdfVU5SRUcJCTB4MDAwNAorI2RlZmluZSBWSU9fUkRYCQkJMHgwMDA1CisjZGVmaW5lIFZJT19QS1RfREFUQQkJMHgwMDQwCisjZGVmaW5lIFZJT19ERVNDX0RBVEEJCTB4MDA0MQorI2RlZmluZSBWSU9fRFJJTkdfREFUQQkJMHgwMDQyCisjZGVmaW5lIFZORVRfTUNBU1RfSU5GTwkJMHgwMTAxCisKKwl1MzIJCXNpZDsKK307CisKK3N0cnVjdCB2aW9fcmR4IHsKKwlzdHJ1Y3QgdmlvX21zZ190YWcJdGFnOworCXU2NAkJCXJlc3ZbNl07Cit9OworCitzdHJ1Y3QgdmlvX3Zlcl9pbmZvIHsKKwlzdHJ1Y3QgdmlvX21zZ190YWcJdGFnOworCXUxNgkJCW1ham9yOworCXUxNgkJCW1pbm9yOworCXU4CQkJZGV2X2NsYXNzOworI2RlZmluZSBWREVWX05FVFdPUksJCTB4MDEKKyNkZWZpbmUgVkRFVl9ORVRXT1JLX1NXSVRDSAkweDAyCisjZGVmaW5lIFZERVZfRElTSwkJMHgwMworI2RlZmluZSBWREVWX0RJU0tfU0VSVkVSCTB4MDQKKworCXU4CQkJcmVzdjFbM107CisJdTY0CQkJcmVzdjJbNV07Cit9OworCitzdHJ1Y3QgdmlvX2RyaW5nX3JlZ2lzdGVyIHsKKwlzdHJ1Y3QgdmlvX21zZ190YWcJdGFnOworCXU2NAkJCWRyaW5nX2lkZW50OworCXUzMgkJCW51bV9kZXNjcjsKKwl1MzIJCQlkZXNjcl9zaXplOworCXUxNgkJCW9wdGlvbnM7CisjZGVmaW5lIFZJT19UWF9EUklORwkJMHgwMDAxCisjZGVmaW5lIFZJT19SWF9EUklORwkJMHgwMDAyCisJdTE2CQkJcmVzdjsKKwl1MzIJCQludW1fY29va2llczsKKwlzdHJ1Y3QgbGRjX3RyYW5zX2Nvb2tpZQljb29raWVzWzBdOworfTsKKworc3RydWN0IHZpb19kcmluZ191bnJlZ2lzdGVyIHsKKwlzdHJ1Y3QgdmlvX21zZ190YWcJdGFnOworCXU2NAkJCWRyaW5nX2lkZW50OworCXU2NAkJCXJlc3ZbNV07Cit9OworCisvKiBEYXRhIHRyYW5zZmVyIG1vZGVzICovCisjZGVmaW5lIFZJT19QS1RfTU9ERQkJMHgwMSAvKiBQYWNrZXQgYmFzZWQgdHJhbnNmZXIJKi8KKyNkZWZpbmUgVklPX0RFU0NfTU9ERQkJMHgwMiAvKiBJbi1iYW5kIGRlc2NyaXB0b3JzCSovCisjZGVmaW5lIFZJT19EUklOR19NT0RFCQkweDAzIC8qIERlc2NyaXB0b3IgcmluZ3MJKi8KKworc3RydWN0IHZpb19kcmluZ19kYXRhIHsKKwlzdHJ1Y3QgdmlvX21zZ190YWcJdGFnOworCXU2NAkJCXNlcTsKKwl1NjQJCQlkcmluZ19pZGVudDsKKwl1MzIJCQlzdGFydF9pZHg7CisJdTMyCQkJZW5kX2lkeDsKKwl1OAkJCXN0YXRlOworI2RlZmluZSBWSU9fRFJJTkdfQUNUSVZFCTB4MDEKKyNkZWZpbmUgVklPX0RSSU5HX1NUT1BQRUQJMHgwMgorCisJdTgJCQlfX3BhZDE7CisJdTE2CQkJX19wYWQyOworCXUzMgkJCV9fcGFkMzsKKwl1NjQJCQlfX3BhcjRbMl07Cit9OworCitzdHJ1Y3QgdmlvX2RyaW5nX2hkciB7CisJdTgJCQlzdGF0ZTsKKyNkZWZpbmUgVklPX0RFU0NfRlJFRQkJMHgwMQorI2RlZmluZSBWSU9fREVTQ19SRUFEWQkJMHgwMgorI2RlZmluZSBWSU9fREVTQ19BQ0NFUFRFRAkweDAzCisjZGVmaW5lIFZJT19ERVNDX0RPTkUJCTB4MDQKKwl1OAkJCWFjazsKKyNkZWZpbmUgVklPX0FDS19FTkFCTEUJCTB4MDEKKyNkZWZpbmUgVklPX0FDS19ESVNBQkxFCQkweDAwCisKKwl1MTYJCQlfX3BhZDE7CisJdTMyCQkJX19wYWQyOworfTsKKworLyogVklPIGRpc2sgc3BlY2lmaWMgc3RydWN0dXJlcyBhbmQgZGVmaW5lcyAqLworc3RydWN0IHZpb19kaXNrX2F0dHJfaW5mbyB7CisJc3RydWN0IHZpb19tc2dfdGFnCXRhZzsKKwl1OAkJCXhmZXJfbW9kZTsKKwl1OAkJCXZkaXNrX3R5cGU7CisjZGVmaW5lIFZEX0RJU0tfVFlQRV9TTElDRQkweDAxIC8qIFNsaWNlIGluIGJsb2NrIGRldmljZQkqLworI2RlZmluZSBWRF9ESVNLX1RZUEVfRElTSwkweDAyIC8qIEVudGlyZSBibG9jayBkZXZpY2UJKi8KKwl1MTYJCQlyZXN2MTsKKwl1MzIJCQl2ZGlza19ibG9ja19zaXplOworCXU2NAkJCW9wZXJhdGlvbnM7CisJdTY0CQkJdmRpc2tfc2l6ZTsKKwl1NjQJCQltYXhfeGZlcl9zaXplOworCXU2NAkJCXJlc3YyWzJdOworfTsKKworc3RydWN0IHZpb19kaXNrX2Rlc2MgeworCXN0cnVjdCB2aW9fZHJpbmdfaGRyCWhkcjsKKwl1NjQJCQlyZXFfaWQ7CisJdTgJCQlvcGVyYXRpb247CisjZGVmaW5lIFZEX09QX0JSRUFECQkweDAxIC8qIEJsb2NrIHJlYWQJCQkqLworI2RlZmluZSBWRF9PUF9CV1JJVEUJCTB4MDIgLyogQmxvY2sgd3JpdGUJCQkqLworI2RlZmluZSBWRF9PUF9GTFVTSAkJMHgwMyAvKiBGbHVzaCBkaXNrIGNvbnRlbnRzCQkqLworI2RlZmluZSBWRF9PUF9HRVRfV0NFCQkweDA0IC8qIEdldCB3cml0ZS1jYWNoZSBzdGF0dXMJCSovCisjZGVmaW5lIFZEX09QX1NFVF9XQ0UJCTB4MDUgLyogRW5hYmxlL2Rpc2FibGUgd3JpdGUtY2FjaGUJKi8KKyNkZWZpbmUgVkRfT1BfR0VUX1ZUT0MJCTB4MDYgLyogR2V0IFZUT0MJCQkqLworI2RlZmluZSBWRF9PUF9TRVRfVlRPQwkJMHgwNyAvKiBTZXQgVlRPQwkJCSovCisjZGVmaW5lIFZEX09QX0dFVF9ESVNLR0VPTQkweDA4IC8qIEdldCBkaXNrIGdlb21ldHJ5CQkqLworI2RlZmluZSBWRF9PUF9TRVRfRElTS0dFT00JMHgwOSAvKiBTZXQgZGlzayBnZW9tZXRyeQkJKi8KKyNkZWZpbmUgVkRfT1BfU0NTSUNNRAkJMHgwYSAvKiBTQ1NJIGNvbnRyb2wgY29tbWFuZAkJKi8KKyNkZWZpbmUgVkRfT1BfR0VUX0RFVklECQkweDBiIC8qIEdldCBkZXZpY2UgSUQJCQkqLworI2RlZmluZSBWRF9PUF9HRVRfRUZJCQkweDBjIC8qIEdldCBFRkkJCQkJKi8KKyNkZWZpbmUgVkRfT1BfU0VUX0VGSQkJMHgwZCAvKiBTZXQgRUZJCQkJCSovCisJdTgJCQlzbGljZTsKKwl1MTYJCQlyZXN2MTsKKwl1MzIJCQlzdGF0dXM7CisJdTY0CQkJb2Zmc2V0OworCXU2NAkJCXNpemU7CisJdTMyCQkJbmNvb2tpZXM7CisJdTMyCQkJcmVzdjI7CisJc3RydWN0IGxkY190cmFuc19jb29raWUJY29va2llc1swXTsKK307CisKKyNkZWZpbmUgVklPX0RJU0tfVk5BTUVfTEVOCTgKKyNkZWZpbmUgVklPX0RJU0tfQUxBQkVMX0xFTgkxMjgKKyNkZWZpbmUgVklPX0RJU0tfTlVNX1BBUlQJOAorCitzdHJ1Y3QgdmlvX2Rpc2tfdnRvYyB7CisJdTgJCQl2b2x1bWVfbmFtZVtWSU9fRElTS19WTkFNRV9MRU5dOworCXUxNgkJCXNlY3Rvcl9zaXplOworCXUxNgkJCW51bV9wYXJ0aXRpb25zOworCXU4CQkJYXNjaWlfbGFiZWxbVklPX0RJU0tfQUxBQkVMX0xFTl07CisJc3RydWN0IHsKKwkJdTE2CQlpZDsKKwkJdTE2CQlwZXJtX2ZsYWdzOworCQl1MzIJCXJlc3Y7CisJCXU2NAkJc3RhcnRfYmxvY2s7CisJCXU2NAkJbnVtX2Jsb2NrczsKKwl9IHBhcnRpdGlvbnNbVklPX0RJU0tfTlVNX1BBUlRdOworfTsKKworc3RydWN0IHZpb19kaXNrX2dlb20geworCXUxNgkJCW51bV9jeWw7IC8qIE51bSBkYXRhIGN5bGluZGVycwkJKi8KKwl1MTYJCQlhbHRfY3lsOyAvKiBOdW0gYWx0ZXJuYXRlIGN5bGluZGVycwkqLworCXUxNgkJCWJlZ19jeWw7IC8qIEN5bCBvZmYgb2YgZml4ZWQgaGVhZCBhcmVhCSovCisJdTE2CQkJbnVtX2hkOyAgLyogTnVtIGhlYWRzCQkJKi8KKwl1MTYJCQludW1fc2VjOyAvKiBOdW0gc2VjdG9ycwkJCSovCisJdTE2CQkJaWZhY3Q7ICAgLyogSW50ZXJsZWF2ZSBmYWN0b3IJCSovCisJdTE2CQkJYXBjOyAgICAgLyogQWx0cyBwZXIgY3lsaW5kZXIgKFNDU0kpCSovCisJdTE2CQkJcnBtOwkgLyogUmV2b2x1dGlvbnMgcGVyIG1pbnV0ZQkqLworCXUxNgkJCXBoeV9jeWw7IC8qIE51bSBwaHlzaWNhbCBjeWxpbmRlcnMJKi8KKwl1MTYJCQl3cl9za2lwOyAvKiBOdW0gc2VjdHMgdG8gc2tpcCwgd3JpdGVzCSovCisJdTE2CQkJcmRfc2tpcDsgLyogTnVtIHNlY3RzIHRvIHNraXAsIHdyaXRlcwkqLworfTsKKworc3RydWN0IHZpb19kaXNrX2RldmlkIHsKKwl1MTYJCQlyZXN2OworCXUxNgkJCXR5cGU7CisJdTMyCQkJbGVuOworCWNoYXIJCQlpZFswXTsKK307CisKK3N0cnVjdCB2aW9fZGlza19lZmkgeworCXU2NAkJCWxiYTsKKwl1NjQJCQlsZW47CisJY2hhcgkJCWRhdGFbMF07Cit9OworCisvKiBWSU8gbmV0IHNwZWNpZmljIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgKi8KK3N0cnVjdCB2aW9fbmV0X2F0dHJfaW5mbyB7CisJc3RydWN0IHZpb19tc2dfdGFnCXRhZzsKKwl1OAkJCXhmZXJfbW9kZTsKKwl1OAkJCWFkZHJfdHlwZTsKKyNkZWZpbmUgVk5FVF9BRERSX0VUSEVSTUFDCTB4MDEKKwl1MTYJCQlhY2tfZnJlcTsKKwl1MzIJCQlyZXN2MTsKKwl1NjQJCQlhZGRyOworCXU2NAkJCW10dTsKKwl1NjQJCQlyZXN2MlszXTsKK307CisKKyNkZWZpbmUgVk5FVF9OVU1fTUNBU1QJCTcKKworc3RydWN0IHZpb19uZXRfbWNhc3RfaW5mbyB7CisJc3RydWN0IHZpb19tc2dfdGFnCXRhZzsKKwl1OAkJCXNldDsKKwl1OAkJCWNvdW50OworCXU4CQkJbWNhc3RfYWRkcltWTkVUX05VTV9NQ0FTVCAqIDZdOworCXUzMgkJCXJlc3Y7Cit9OworCitzdHJ1Y3QgdmlvX25ldF9kZXNjIHsKKwlzdHJ1Y3QgdmlvX2RyaW5nX2hkcgloZHI7CisJdTMyCQkJc2l6ZTsKKwl1MzIJCQluY29va2llczsKKwlzdHJ1Y3QgbGRjX3RyYW5zX2Nvb2tpZQljb29raWVzWzBdOworfTsKKworI2RlZmluZSBWSU9fTUFYX1JJTkdfQ09PS0lFUwkyNAorCitzdHJ1Y3QgdmlvX2RyaW5nX3N0YXRlIHsKKwl1NjQJCQlpZGVudDsKKwl2b2lkCQkJKmJhc2U7CisJdTY0CQkJc25kX254dDsKKwl1NjQJCQlyY3Zfbnh0OworCXUzMgkJCWVudHJ5X3NpemU7CisJdTMyCQkJbnVtX2VudHJpZXM7CisJdTMyCQkJcHJvZDsKKwl1MzIJCQljb25zOworCXUzMgkJCXBlbmRpbmc7CisJaW50CQkJbmNvb2tpZXM7CisJc3RydWN0IGxkY190cmFuc19jb29raWUJY29va2llc1tWSU9fTUFYX1JJTkdfQ09PS0lFU107Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgKnZpb19kcmluZ19jdXIoc3RydWN0IHZpb19kcmluZ19zdGF0ZSAqZHIpCit7CisJcmV0dXJuIGRyLT5iYXNlICsgKGRyLT5lbnRyeV9zaXplICogZHItPnByb2QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnZpb19kcmluZ19lbnRyeShzdHJ1Y3QgdmlvX2RyaW5nX3N0YXRlICpkciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGluZGV4KQoreworCXJldHVybiBkci0+YmFzZSArIChkci0+ZW50cnlfc2l6ZSAqIGluZGV4KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgdmlvX2RyaW5nX2F2YWlsKHN0cnVjdCB2aW9fZHJpbmdfc3RhdGUgKmRyLAorCQkJCSAgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSkKK3sKKwlCVUlMRF9CVUdfT04oIWlzX3Bvd2VyX29mXzIocmluZ19zaXplKSk7CisKKwlyZXR1cm4gKGRyLT5wZW5kaW5nIC0KKwkJKChkci0+cHJvZCAtIGRyLT5jb25zKSAmIChyaW5nX3NpemUgLSAxKSkpOworfQorCisjZGVmaW5lIFZJT19NQVhfVFlQRV9MRU4JMzIKKyNkZWZpbmUgVklPX01BWF9DT01QQVRfTEVOCTY0CisKK3N0cnVjdCB2aW9fZGV2IHsKKwl1NjQJCQltcDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJKmRwOworCisJY2hhcgkJCXR5cGVbVklPX01BWF9UWVBFX0xFTl07CisJY2hhcgkJCWNvbXBhdFtWSU9fTUFYX0NPTVBBVF9MRU5dOworCWludAkJCWNvbXBhdF9sZW47CisKKwl1NjQJCQlkZXZfbm87CisKKwl1bnNpZ25lZCBsb25nCQljaGFubmVsX2lkOworCisJdW5zaWduZWQgaW50CQl0eF9pcnE7CisJdW5zaWduZWQgaW50CQlyeF9pcnE7CisKKwlzdHJ1Y3QgZGV2aWNlCQlkZXY7Cit9OworCitzdHJ1Y3QgdmlvX2RyaXZlciB7CisJc3RydWN0IGxpc3RfaGVhZAkJbm9kZTsKKwljb25zdCBzdHJ1Y3QgdmlvX2RldmljZV9pZAkqaWRfdGFibGU7CisJaW50ICgqcHJvYmUpKHN0cnVjdCB2aW9fZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCB2aW9fZGV2aWNlX2lkICppZCk7CisJaW50ICgqcmVtb3ZlKShzdHJ1Y3QgdmlvX2RldiAqZGV2KTsKKwl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCB2aW9fZGV2ICpkZXYpOworCXVuc2lnbmVkIGxvbmcJCQlkcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlcgkJZHJpdmVyOworfTsKKworc3RydWN0IHZpb192ZXJzaW9uIHsKKwl1MTYJCW1ham9yOworCXUxNgkJbWlub3I7Cit9OworCitzdHJ1Y3QgdmlvX2RyaXZlcl9zdGF0ZTsKK3N0cnVjdCB2aW9fZHJpdmVyX29wcyB7CisJaW50CSgqc2VuZF9hdHRyKShzdHJ1Y3QgdmlvX2RyaXZlcl9zdGF0ZSAqdmlvKTsKKwlpbnQJKCpoYW5kbGVfYXR0cikoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbywgdm9pZCAqcGt0KTsKKwl2b2lkCSgqaGFuZHNoYWtlX2NvbXBsZXRlKShzdHJ1Y3QgdmlvX2RyaXZlcl9zdGF0ZSAqdmlvKTsKK307CisKK3N0cnVjdCB2aW9fY29tcGxldGlvbiB7CisJc3RydWN0IGNvbXBsZXRpb24JY29tOworCWludAkJCWVycjsKKwlpbnQJCQl3YWl0aW5nX2ZvcjsKK307CisKK3N0cnVjdCB2aW9fZHJpdmVyX3N0YXRlIHsKKwkvKiBQcm90ZWN0cyBWSU8gaGFuZHNoYWtlIGFuZCwgb3B0aW9uYWxseSwgZHJpdmVyIHByaXZhdGUgc3RhdGUuICAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwlzdHJ1Y3QgbGRjX2NoYW5uZWwJKmxwOworCisJdTMyCQkJX3BlZXJfc2lkOworCXUzMgkJCV9sb2NhbF9zaWQ7CisJc3RydWN0IHZpb19kcmluZ19zdGF0ZQlkcmluZ3NbMl07CisjZGVmaW5lIFZJT19EUklWRVJfVFhfUklORwkwCisjZGVmaW5lIFZJT19EUklWRVJfUlhfUklORwkxCisKKwl1OAkJCWhzX3N0YXRlOworI2RlZmluZSBWSU9fSFNfSU5WQUxJRAkJMHgwMAorI2RlZmluZSBWSU9fSFNfR09UVkVSUwkJMHgwMQorI2RlZmluZSBWSU9fSFNfR09UX0FUVFIJCTB4MDQKKyNkZWZpbmUgVklPX0hTX1NFTlRfRFJFRwkweDA4CisjZGVmaW5lIFZJT19IU19TRU5UX1JEWAkJMHgxMAorI2RlZmluZSBWSU9fSFNfR09UX1JEWF9BQ0sJMHgyMAorI2RlZmluZSBWSU9fSFNfR09UX1JEWAkJMHg0MAorI2RlZmluZSBWSU9fSFNfU0VOVF9SRFhfQUNLCTB4ODAKKyNkZWZpbmUgVklPX0hTX0NPTVBMRVRFCQkoVklPX0hTX0dPVF9SRFhfQUNLIHwgVklPX0hTX1NFTlRfUkRYX0FDSykKKworCXU4CQkJZGV2X2NsYXNzOworCisJdTgJCQlkcl9zdGF0ZTsKKyNkZWZpbmUgVklPX0RSX1NUQVRFX1RYUkVHCTB4MDEKKyNkZWZpbmUgVklPX0RSX1NUQVRFX1JYUkVHCTB4MDIKKyNkZWZpbmUgVklPX0RSX1NUQVRFX1RYUkVRCTB4MTAKKyNkZWZpbmUgVklPX0RSX1NUQVRFX1JYUkVRCTB4MjAKKworCXU4CQkJZGVidWc7CisjZGVmaW5lIFZJT19ERUJVR19IUwkJMHgwMQorI2RlZmluZSBWSU9fREVCVUdfREFUQQkJMHgwMgorCisJdm9pZAkJCSpkZXNjX2J1ZjsKKwl1bnNpZ25lZCBpbnQJCWRlc2NfYnVmX2xlbjsKKworCXN0cnVjdCB2aW9fY29tcGxldGlvbgkqY21wOworCisJc3RydWN0IHZpb19kZXYJCSp2ZGV2OworCisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CisKKwlzdHJ1Y3QgdmlvX3ZlcnNpb24JdmVyOworCisJc3RydWN0IHZpb192ZXJzaW9uCSp2ZXJfdGFibGU7CisJaW50CQkJdmVyX3RhYmxlX2VudHJpZXM7CisKKwljaGFyCQkJKm5hbWU7CisKKwlzdHJ1Y3QgdmlvX2RyaXZlcl9vcHMJKm9wczsKK307CisKKyNkZWZpbmUgdmlvZGJnKFRZUEUsIGYsIGEuLi4pIFwKK2RvIHsJaWYgKHZpby0+ZGVidWcgJiBWSU9fREVCVUdfIyNUWVBFKSBcCisJCXByaW50ayhLRVJOX0lORk8gInZpbzogSURbJWx1XSAiIGYsIFwKKwkJICAgICAgIHZpby0+dmRldi0+Y2hhbm5lbF9pZCwgIyMgYSk7IFwKK30gd2hpbGUgKDApCisKK2V4dGVybiBpbnQgdmlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdmlvX2RyaXZlciAqZHJ2KTsKK2V4dGVybiB2b2lkIHZpb191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdmlvX2RyaXZlciAqZHJ2KTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmlvX2RyaXZlciAqdG9fdmlvX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZHJ2LCBzdHJ1Y3QgdmlvX2RyaXZlciwgZHJpdmVyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmlvX2RldiAqdG9fdmlvX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB2aW9fZGV2LCBkZXYpOworfQorCitleHRlcm4gaW50IHZpb19sZGNfc2VuZChzdHJ1Y3QgdmlvX2RyaXZlcl9zdGF0ZSAqdmlvLCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIHZpb19saW5rX3N0YXRlX2NoYW5nZShzdHJ1Y3QgdmlvX2RyaXZlcl9zdGF0ZSAqdmlvLCBpbnQgZXZlbnQpOworZXh0ZXJuIHZvaWQgdmlvX2Nvbm5fcmVzZXQoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbyk7CitleHRlcm4gaW50IHZpb19jb250cm9sX3BrdF9lbmdpbmUoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbywgdm9pZCAqcGt0KTsKK2V4dGVybiBpbnQgdmlvX3ZhbGlkYXRlX3NpZChzdHJ1Y3QgdmlvX2RyaXZlcl9zdGF0ZSAqdmlvLAorCQkJICAgIHN0cnVjdCB2aW9fbXNnX3RhZyAqdHApOworZXh0ZXJuIHUzMiB2aW9fc2VuZF9zaWQoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbyk7CitleHRlcm4gaW50IHZpb19sZGNfYWxsb2Moc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbywKKwkJCSBzdHJ1Y3QgbGRjX2NoYW5uZWxfY29uZmlnICpiYXNlX2NmZywgdm9pZCAqZXZlbnRfYXJnKTsKK2V4dGVybiB2b2lkIHZpb19sZGNfZnJlZShzdHJ1Y3QgdmlvX2RyaXZlcl9zdGF0ZSAqdmlvKTsKK2V4dGVybiBpbnQgdmlvX2RyaXZlcl9pbml0KHN0cnVjdCB2aW9fZHJpdmVyX3N0YXRlICp2aW8sIHN0cnVjdCB2aW9fZGV2ICp2ZGV2LAorCQkJICAgdTggZGV2X2NsYXNzLCBzdHJ1Y3QgdmlvX3ZlcnNpb24gKnZlcl90YWJsZSwKKwkJCSAgIGludCB2ZXJfdGFibGVfc2l6ZSwgc3RydWN0IHZpb19kcml2ZXJfb3BzICpvcHMsCisJCQkgICBjaGFyICpuYW1lKTsKKworZXh0ZXJuIHZvaWQgdmlvX3BvcnRfdXAoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbyk7CisKKyNlbmRpZiAvKiBfU1BBUkM2NF9WSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdmlzYXNtLmggYi9pbmNsdWRlL2FzbS1zcGFyYy92aXNhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTc5N2I5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdmlzYXNtLmgKQEAgLTAsMCArMSw2MiBAQAorI2lmbmRlZiBfU1BBUkM2NF9WSVNBU01fSAorI2RlZmluZSBfU1BBUkM2NF9WSVNBU01fSAorCisvKiB2aXNhc20uaDogIEZQVSBzYXZpbmcgbWFjcm9zIGZvciBWSVMgcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opCisgKi8KKworI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qIENsb2JiZXJzICVvNSwgJWcxLCAlZzIsICVnMywgJWc3LCAlaWNjLCAleGNjICovCisKKyNkZWZpbmUgVklTRW50cnkJCQkJCVwKKwlyZAkJJWZwcnMsICVvNTsJCQlcCisJYW5kY2MJCSVvNSwgKEZQUlNfRkVGfEZQUlNfRFUpLCAlZzA7CVwKKwliZSxwdAkJJWljYywgMjk3ZjsJCQlcCisJIHNldGhpCQklaGkoMjk3ZiksICVnNzsJCQlcCisJc2V0aGkJCSVoaShWSVNlbnRlciksICVnMTsJCVwKKwlqbXBsCQklZzEgKyAlbG8oVklTZW50ZXIpLCAlZzA7CVwKKwkgb3IJCSVnNywgJWxvKDI5N2YpLCAlZzc7CQlcCisyOTc6CXdyCQklZzAsIEZQUlNfRkVGLCAlZnByczsJCVwKKworI2RlZmluZSBWSVNFeGl0CQkJCQkJXAorCXdyCQklZzAsIDAsICVmcHJzOworCisvKiBDbG9iYmVycyAlbzUsICVnMSwgJWcyLCAlZzMsICVnNywgJWljYywgJXhjYy4KKyAqIE11c3QgcHJlc2VydmUgJW81IGJldHdlZW4gVklTRW50cnlIYWxmIGFuZCBWSVNFeGl0SGFsZiAqLworCisjZGVmaW5lIFZJU0VudHJ5SGFsZgkJCQkJXAorCXJkCQklZnBycywgJW81OwkJCVwKKwlhbmRjYwkJJW81LCBGUFJTX0ZFRiwgJWcwOwkJXAorCWJlLHB0CQklaWNjLCAyOTdmOwkJCVwKKwkgc2V0aGkJCSVoaSgyOThmKSwgJWc3OwkJCVwKKwlzZXRoaQkJJWhpKFZJU2VudGVyaGFsZiksICVnMTsJCVwKKwlqbXBsCQklZzEgKyAlbG8oVklTZW50ZXJoYWxmKSwgJWcwOwlcCisJIG9yCQklZzcsICVsbygyOThmKSwgJWc3OwkJXAorCWNscgkJJW81OwkJCQlcCisyOTc6CXdyCQklbzUsIEZQUlNfRkVGLCAlZnByczsJCVwKKzI5ODoKKworI2RlZmluZSBWSVNFeGl0SGFsZgkJCQkJXAorCXdyCQklbzUsIDAsICVmcHJzOworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RhdGljIGlubGluZSB2b2lkIHNhdmVfYW5kX2NsZWFyX2ZwdSh2b2lkKSB7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorIgkJcmQgJSVmcHJzLCAlJW81XG4iCisiCQlhbmRjYyAlJW81LCAlMCwgJSVnMFxuIgorIgkJYmUscHQgJSVpY2MsIDI5OWZcbiIKKyIJCSBzZXRoaSAlJWhpKDI5OGYpLCAlJWc3XG4iCisiCQlzZXRoaSAlJWhpKFZJU2VudGVyKSwgJSVnMVxuIgorIgkJam1wbCAlJWcxICsgJSVsbyhWSVNlbnRlciksICUlZzBcbiIKKyIJCSBvciAlJWc3LCAlJWxvKDI5OGYpLCAlJWc3XG4iCisiCTI5ODoJd3IgJSVnMCwgMCwgJSVmcHJzXG4iCisiCTI5OTpcbiIKKyIJCSIgOiA6ICJpIiAoRlBSU19GRUZ8RlBSU19EVSkgOgorCQkibzUiLCAiZzEiLCAiZzIiLCAiZzMiLCAiZzciLCAiY2MiKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1NQQVJDNjRfQVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3dhdGNoZG9nLmggYi9pbmNsdWRlL2FzbS1zcGFyYy93YXRjaGRvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYWYyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy93YXRjaGRvZy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKgorICogd2F0Y2hkb2cgLSBEcml2ZXIgaW50ZXJmYWNlIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXJzCisgKiBwcmVzZW50IG9uIFN1biBNaWNyb3N5c3RlbXMgYm9hcmRzZXRzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwIEVyaWMgQnJvd2VyIDxlYnJvd2VyQHVzYS5uZXQ+CisgKgorICovCisKKyNpZm5kZWYgX1NQQVJDNjRfV0FUQ0hET0dfSAorI2RlZmluZSBfU1BBUkM2NF9XQVRDSERPR19ICisKKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorCisvKiBTb2xhcmlzIGNvbXBhdGliaWxpdHkgaW9jdGxzLS0KKyAqIFJlZi4gPGxpbnV4L3dhdGNoZG9nLmg+IGZvciBzdGFuZGFyZCBsaW51eCB3YXRjaGRvZyBpb2N0bHMKKyAqLworI2RlZmluZSBXSU9DU1RBUlQgX0lPIChXQVRDSERPR19JT0NUTF9CQVNFLCAxMCkJCS8qIFN0YXJ0IFRpbWVyCQkqLworI2RlZmluZSBXSU9DU1RPUCAgX0lPIChXQVRDSERPR19JT0NUTF9CQVNFLCAxMSkJCS8qIFN0b3AgVGltZXIJCSovCisjZGVmaW5lIFdJT0NHU1RBVCBfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDEyLCBpbnQpLyogR2V0IFRpbWVyIFN0YXR1cwkqLworCisvKiBTdGF0dXMgZmxhZ3MgZnJvbSBXSU9DR1NUQVQgaW9jdGwKKyAqLworI2RlZmluZSBXRF9GUkVFUlVOCTB4MDEJLyogdGltZXIgaXMgcnVubmluZywgaW50ZXJydXB0cyBkaXNhYmxlZAkqLworI2RlZmluZSBXRF9FWFBJUkVECTB4MDIJLyogdGltZXIgaGFzIGV4cGlyZWQJCQkJCQkqLworI2RlZmluZSBXRF9SVU5OSU5HCTB4MDQJLyogdGltZXIgaXMgcnVubmluZywgaW50ZXJydXB0cyBlbmFibGVkCQkqLworI2RlZmluZSBXRF9TVE9QUEVECTB4MDgJLyogdGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQJCQkJKi8KKyNkZWZpbmUgV0RfU0VSVklDRUQgMHgxMAkvKiB0aW1lciBpbnRlcnJ1cHQgd2FzIHNlcnZpY2VkCQkJCSovCisKKyNlbmRpZiAvKiBpZm5kZWYgX1NQQVJDNjRfV0FUQ0hET0dfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy94b3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3hvci5oCmluZGV4IGYzNGIyY2YuLjM1MDg5YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3hvci5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3hvci5oCkBAIC0xLDI2OSArMSw4IEBACi0vKgotICogaW5jbHVkZS9hc20tc3BhcmMveG9yLmgKLSAqCi0gKiBPcHRpbWl6ZWQgUkFJRC01IGNoZWNrc3VtbWluZyBmdW5jdGlvbnMgZm9yIDMyLWJpdCBTcGFyYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLS8qCi0gKiBIaWdoIHNwZWVkIHhvcl9ibG9jayBvcGVyYXRpb24gZm9yIFJBSUQ0LzUgdXRpbGl6aW5nIHRoZQotICogbGRkL3N0ZCBTUEFSQyBpbnN0cnVjdGlvbnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KQotICovCi0KLXN0YXRpYyB2b2lkCi1zcGFyY18yKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKLXsKLQlpbnQgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDg7Ci0KLQlkbyB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkgICJsZGQgWyUwICsgMHgwMF0sICUlZzJcblx0IgotCQkgICJsZGQgWyUwICsgMHgwOF0sICUlZzRcblx0IgotCQkgICJsZGQgWyUwICsgMHgxMF0sICUlbzBcblx0IgotCQkgICJsZGQgWyUwICsgMHgxOF0sICUlbzJcblx0IgotCQkgICJsZGQgWyUxICsgMHgwMF0sICUlbzRcblx0IgotCQkgICJsZGQgWyUxICsgMHgwOF0sICUlbDBcblx0IgotCQkgICJsZGQgWyUxICsgMHgxMF0sICUlbDJcblx0IgotCQkgICJsZGQgWyUxICsgMHgxOF0sICUlbDRcblx0IgotCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCi0JCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKLQkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgotCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCi0JCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKLQkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgotCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCi0JCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKLQkJICAic3RkICUlZzIsIFslMCArIDB4MDBdXG5cdCIKLQkJICAic3RkICUlZzQsIFslMCArIDB4MDhdXG5cdCIKLQkJICAic3RkICUlbzAsIFslMCArIDB4MTBdXG5cdCIKLQkJICAic3RkICUlbzIsIFslMCArIDB4MThdXG4iCi0JCToKLQkJOiAiciIgKHAxKSwgInIiIChwMikKLQkJOiAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLAotCQkgICJvMCIsICJvMSIsICJvMiIsICJvMyIsICJvNCIsICJvNSIsCi0JCSAgImwwIiwgImwxIiwgImwyIiwgImwzIiwgImw0IiwgImw1Iik7Ci0JCXAxICs9IDg7Ci0JCXAyICs9IDg7Ci0JfSB3aGlsZSAoLS1saW5lcyA+IDApOwotfQotCi1zdGF0aWMgdm9pZAotc3BhcmNfMyh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JdW5zaWduZWQgbG9uZyAqcDMpCi17Ci0JaW50IGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OwotCi0JZG8gewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJICAibGRkIFslMCArIDB4MDBdLCAlJWcyXG5cdCIKLQkJICAibGRkIFslMCArIDB4MDhdLCAlJWc0XG5cdCIKLQkJICAibGRkIFslMCArIDB4MTBdLCAlJW8wXG5cdCIKLQkJICAibGRkIFslMCArIDB4MThdLCAlJW8yXG5cdCIKLQkJICAibGRkIFslMSArIDB4MDBdLCAlJW80XG5cdCIKLQkJICAibGRkIFslMSArIDB4MDhdLCAlJWwwXG5cdCIKLQkJICAibGRkIFslMSArIDB4MTBdLCAlJWwyXG5cdCIKLQkJICAibGRkIFslMSArIDB4MThdLCAlJWw0XG5cdCIKLQkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgotCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCi0JCSAgImxkZCBbJTIgKyAweDAwXSwgJSVvNFxuXHQiCi0JCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKLQkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgotCQkgICJsZGQgWyUyICsgMHgwOF0sICUlbDBcblx0IgotCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCi0JCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKLQkJICAibGRkIFslMiArIDB4MTBdLCAlJWwyXG5cdCIKLQkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgotCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCi0JCSAgImxkZCBbJTIgKyAweDE4XSwgJSVsNFxuXHQiCi0JCSAgInhvciAlJWcyLCAlJW80LCAlJWcyXG5cdCIKLQkJICAieG9yICUlZzMsICUlbzUsICUlZzNcblx0IgotCQkgICJ4b3IgJSVnNCwgJSVsMCwgJSVnNFxuXHQiCi0JCSAgInhvciAlJWc1LCAlJWwxLCAlJWc1XG5cdCIKLQkJICAieG9yICUlbzAsICUlbDIsICUlbzBcblx0IgotCQkgICJ4b3IgJSVvMSwgJSVsMywgJSVvMVxuXHQiCi0JCSAgInhvciAlJW8yLCAlJWw0LCAlJW8yXG5cdCIKLQkJICAieG9yICUlbzMsICUlbDUsICUlbzNcblx0IgotCQkgICJzdGQgJSVnMiwgWyUwICsgMHgwMF1cblx0IgotCQkgICJzdGQgJSVnNCwgWyUwICsgMHgwOF1cblx0IgotCQkgICJzdGQgJSVvMCwgWyUwICsgMHgxMF1cblx0IgotCQkgICJzdGQgJSVvMiwgWyUwICsgMHgxOF1cbiIKLQkJOgotCQk6ICJyIiAocDEpLCAiciIgKHAyKSwgInIiIChwMykKLQkJOiAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLAotCQkgICJvMCIsICJvMSIsICJvMiIsICJvMyIsICJvNCIsICJvNSIsCi0JCSAgImwwIiwgImwxIiwgImwyIiwgImwzIiwgImw0IiwgImw1Iik7Ci0JCXAxICs9IDg7Ci0JCXAyICs9IDg7Ci0JCXAzICs9IDg7Ci0JfSB3aGlsZSAoLS1saW5lcyA+IDApOwotfQotCi1zdGF0aWMgdm9pZAotc3BhcmNfNCh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0KQotewotCWludCBsaW5lcyA9IGJ5dGVzIC8gKHNpemVvZiAobG9uZykpIC8gODsKLQotCWRvIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSAgImxkZCBbJTAgKyAweDAwXSwgJSVnMlxuXHQiCi0JCSAgImxkZCBbJTAgKyAweDA4XSwgJSVnNFxuXHQiCi0JCSAgImxkZCBbJTAgKyAweDEwXSwgJSVvMFxuXHQiCi0JCSAgImxkZCBbJTAgKyAweDE4XSwgJSVvMlxuXHQiCi0JCSAgImxkZCBbJTEgKyAweDAwXSwgJSVvNFxuXHQiCi0JCSAgImxkZCBbJTEgKyAweDA4XSwgJSVsMFxuXHQiCi0JCSAgImxkZCBbJTEgKyAweDEwXSwgJSVsMlxuXHQiCi0JCSAgImxkZCBbJTEgKyAweDE4XSwgJSVsNFxuXHQiCi0JCSAgInhvciAlJWcyLCAlJW80LCAlJWcyXG5cdCIKLQkJICAieG9yICUlZzMsICUlbzUsICUlZzNcblx0IgotCQkgICJsZGQgWyUyICsgMHgwMF0sICUlbzRcblx0IgotCQkgICJ4b3IgJSVnNCwgJSVsMCwgJSVnNFxuXHQiCi0JCSAgInhvciAlJWc1LCAlJWwxLCAlJWc1XG5cdCIKLQkJICAibGRkIFslMiArIDB4MDhdLCAlJWwwXG5cdCIKLQkJICAieG9yICUlbzAsICUlbDIsICUlbzBcblx0IgotCQkgICJ4b3IgJSVvMSwgJSVsMywgJSVvMVxuXHQiCi0JCSAgImxkZCBbJTIgKyAweDEwXSwgJSVsMlxuXHQiCi0JCSAgInhvciAlJW8yLCAlJWw0LCAlJW8yXG5cdCIKLQkJICAieG9yICUlbzMsICUlbDUsICUlbzNcblx0IgotCQkgICJsZGQgWyUyICsgMHgxOF0sICUlbDRcblx0IgotCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCi0JCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKLQkJICAibGRkIFslMyArIDB4MDBdLCAlJW80XG5cdCIKLQkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgotCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCi0JCSAgImxkZCBbJTMgKyAweDA4XSwgJSVsMFxuXHQiCi0JCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKLQkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgotCQkgICJsZGQgWyUzICsgMHgxMF0sICUlbDJcblx0IgotCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCi0JCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKLQkJICAibGRkIFslMyArIDB4MThdLCAlJWw0XG5cdCIKLQkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgotCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCi0JCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKLQkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgotCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCi0JCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKLQkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgotCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCi0JCSAgInN0ZCAlJWcyLCBbJTAgKyAweDAwXVxuXHQiCi0JCSAgInN0ZCAlJWc0LCBbJTAgKyAweDA4XVxuXHQiCi0JCSAgInN0ZCAlJW8wLCBbJTAgKyAweDEwXVxuXHQiCi0JCSAgInN0ZCAlJW8yLCBbJTAgKyAweDE4XVxuIgotCQk6Ci0JCTogInIiIChwMSksICJyIiAocDIpLCAiciIgKHAzKSwgInIiIChwNCkKLQkJOiAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLAotCQkgICJvMCIsICJvMSIsICJvMiIsICJvMyIsICJvNCIsICJvNSIsCi0JCSAgImwwIiwgImwxIiwgImwyIiwgImwzIiwgImw0IiwgImw1Iik7Ci0JCXAxICs9IDg7Ci0JCXAyICs9IDg7Ci0JCXAzICs9IDg7Ci0JCXA0ICs9IDg7Ci0JfSB3aGlsZSAoLS1saW5lcyA+IDApOwotfQotCi1zdGF0aWMgdm9pZAotc3BhcmNfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCi0JdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0LCB1bnNpZ25lZCBsb25nICpwNSkKLXsKLQlpbnQgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDg7Ci0KLQlkbyB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkgICJsZGQgWyUwICsgMHgwMF0sICUlZzJcblx0IgotCQkgICJsZGQgWyUwICsgMHgwOF0sICUlZzRcblx0IgotCQkgICJsZGQgWyUwICsgMHgxMF0sICUlbzBcblx0IgotCQkgICJsZGQgWyUwICsgMHgxOF0sICUlbzJcblx0IgotCQkgICJsZGQgWyUxICsgMHgwMF0sICUlbzRcblx0IgotCQkgICJsZGQgWyUxICsgMHgwOF0sICUlbDBcblx0IgotCQkgICJsZGQgWyUxICsgMHgxMF0sICUlbDJcblx0IgotCQkgICJsZGQgWyUxICsgMHgxOF0sICUlbDRcblx0IgotCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCi0JCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKLQkJICAibGRkIFslMiArIDB4MDBdLCAlJW80XG5cdCIKLQkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgotCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCi0JCSAgImxkZCBbJTIgKyAweDA4XSwgJSVsMFxuXHQiCi0JCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKLQkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgotCQkgICJsZGQgWyUyICsgMHgxMF0sICUlbDJcblx0IgotCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCi0JCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKLQkJICAibGRkIFslMiArIDB4MThdLCAlJWw0XG5cdCIKLQkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgotCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCi0JCSAgImxkZCBbJTMgKyAweDAwXSwgJSVvNFxuXHQiCi0JCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKLQkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgotCQkgICJsZGQgWyUzICsgMHgwOF0sICUlbDBcblx0IgotCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCi0JCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKLQkJICAibGRkIFslMyArIDB4MTBdLCAlJWwyXG5cdCIKLQkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgotCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCi0JCSAgImxkZCBbJTMgKyAweDE4XSwgJSVsNFxuXHQiCi0JCSAgInhvciAlJWcyLCAlJW80LCAlJWcyXG5cdCIKLQkJICAieG9yICUlZzMsICUlbzUsICUlZzNcblx0IgotCQkgICJsZGQgWyU0ICsgMHgwMF0sICUlbzRcblx0IgotCQkgICJ4b3IgJSVnNCwgJSVsMCwgJSVnNFxuXHQiCi0JCSAgInhvciAlJWc1LCAlJWwxLCAlJWc1XG5cdCIKLQkJICAibGRkIFslNCArIDB4MDhdLCAlJWwwXG5cdCIKLQkJICAieG9yICUlbzAsICUlbDIsICUlbzBcblx0IgotCQkgICJ4b3IgJSVvMSwgJSVsMywgJSVvMVxuXHQiCi0JCSAgImxkZCBbJTQgKyAweDEwXSwgJSVsMlxuXHQiCi0JCSAgInhvciAlJW8yLCAlJWw0LCAlJW8yXG5cdCIKLQkJICAieG9yICUlbzMsICUlbDUsICUlbzNcblx0IgotCQkgICJsZGQgWyU0ICsgMHgxOF0sICUlbDRcblx0IgotCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCi0JCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKLQkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgotCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCi0JCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKLQkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgotCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCi0JCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKLQkJICAic3RkICUlZzIsIFslMCArIDB4MDBdXG5cdCIKLQkJICAic3RkICUlZzQsIFslMCArIDB4MDhdXG5cdCIKLQkJICAic3RkICUlbzAsIFslMCArIDB4MTBdXG5cdCIKLQkJICAic3RkICUlbzIsIFslMCArIDB4MThdXG4iCi0JCToKLQkJOiAiciIgKHAxKSwgInIiIChwMiksICJyIiAocDMpLCAiciIgKHA0KSwgInIiIChwNSkKLQkJOiAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLAotCQkgICJvMCIsICJvMSIsICJvMiIsICJvMyIsICJvNCIsICJvNSIsCi0JCSAgImwwIiwgImwxIiwgImwyIiwgImwzIiwgImw0IiwgImw1Iik7Ci0JCXAxICs9IDg7Ci0JCXAyICs9IDg7Ci0JCXAzICs9IDg7Ci0JCXA0ICs9IDg7Ci0JCXA1ICs9IDg7Ci0JfSB3aGlsZSAoLS1saW5lcyA+IDApOwotfQotCi1zdGF0aWMgc3RydWN0IHhvcl9ibG9ja190ZW1wbGF0ZSB4b3JfYmxvY2tfU1BBUkMgPSB7Ci0JLm5hbWUJPSAiU1BBUkMiLAotCS5kb18yCT0gc3BhcmNfMiwKLQkuZG9fMwk9IHNwYXJjXzMsCi0JLmRvXzQJPSBzcGFyY180LAotCS5kb181CT0gc3BhcmNfNSwKLX07Ci0KLS8qIEZvciBncmlucywgYWxzbyB0ZXN0IHRoZSBnZW5lcmljIHJvdXRpbmVzLiAgKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy94b3IuaD4KLQotI3VuZGVmIFhPUl9UUllfVEVNUExBVEVTCi0jZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTCQkJCVwKLQlkbyB7CQkJCQkJXAotCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja184cmVncyk7CQlcCi0JCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzMycmVncyk7CQlcCi0JCXhvcl9zcGVlZCgmeG9yX2Jsb2NrX1NQQVJDKTsJCVwKLQl9IHdoaWxlICgwKQorI2lmbmRlZiBfX19BU01fU1BBUkNfWE9SX0gKKyNkZWZpbmUgX19fQVNNX1NQQVJDX1hPUl9ICisjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyNpbmNsdWRlIDxhc20tc3BhcmMveG9yXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1zcGFyYy94b3JfMzIuaD4KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy94b3JfMzIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3hvcl8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGIyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy94b3JfMzIuaApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXNwYXJjL3hvci5oCisgKgorICogT3B0aW1pemVkIFJBSUQtNSBjaGVja3N1bW1pbmcgZnVuY3Rpb25zIGZvciAzMi1iaXQgU3BhcmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKgorICogSGlnaCBzcGVlZCB4b3JfYmxvY2sgb3BlcmF0aW9uIGZvciBSQUlENC81IHV0aWxpemluZyB0aGUKKyAqIGxkZC9zdGQgU1BBUkMgaW5zdHJ1Y3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKKyAqLworCitzdGF0aWMgdm9pZAorc3BhcmNfMih1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIpCit7CisJaW50IGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OworCisJZG8geworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJICAibGRkIFslMCArIDB4MDBdLCAlJWcyXG5cdCIKKwkJICAibGRkIFslMCArIDB4MDhdLCAlJWc0XG5cdCIKKwkJICAibGRkIFslMCArIDB4MTBdLCAlJW8wXG5cdCIKKwkJICAibGRkIFslMCArIDB4MThdLCAlJW8yXG5cdCIKKwkJICAibGRkIFslMSArIDB4MDBdLCAlJW80XG5cdCIKKwkJICAibGRkIFslMSArIDB4MDhdLCAlJWwwXG5cdCIKKwkJICAibGRkIFslMSArIDB4MTBdLCAlJWwyXG5cdCIKKwkJICAibGRkIFslMSArIDB4MThdLCAlJWw0XG5cdCIKKwkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgorCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCisJCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKKwkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgorCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCisJCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKKwkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgorCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCisJCSAgInN0ZCAlJWcyLCBbJTAgKyAweDAwXVxuXHQiCisJCSAgInN0ZCAlJWc0LCBbJTAgKyAweDA4XVxuXHQiCisJCSAgInN0ZCAlJW8wLCBbJTAgKyAweDEwXVxuXHQiCisJCSAgInN0ZCAlJW8yLCBbJTAgKyAweDE4XVxuIgorCQk6CisJCTogInIiIChwMSksICJyIiAocDIpCisJCTogImcyIiwgImczIiwgImc0IiwgImc1IiwKKwkJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLAorCQkgICJsMCIsICJsMSIsICJsMiIsICJsMyIsICJsNCIsICJsNSIpOworCQlwMSArPSA4OworCQlwMiArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3NwYXJjXzModW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCXVuc2lnbmVkIGxvbmcgKnAzKQoreworCWludCBsaW5lcyA9IGJ5dGVzIC8gKHNpemVvZiAobG9uZykpIC8gODsKKworCWRvIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSAgImxkZCBbJTAgKyAweDAwXSwgJSVnMlxuXHQiCisJCSAgImxkZCBbJTAgKyAweDA4XSwgJSVnNFxuXHQiCisJCSAgImxkZCBbJTAgKyAweDEwXSwgJSVvMFxuXHQiCisJCSAgImxkZCBbJTAgKyAweDE4XSwgJSVvMlxuXHQiCisJCSAgImxkZCBbJTEgKyAweDAwXSwgJSVvNFxuXHQiCisJCSAgImxkZCBbJTEgKyAweDA4XSwgJSVsMFxuXHQiCisJCSAgImxkZCBbJTEgKyAweDEwXSwgJSVsMlxuXHQiCisJCSAgImxkZCBbJTEgKyAweDE4XSwgJSVsNFxuXHQiCisJCSAgInhvciAlJWcyLCAlJW80LCAlJWcyXG5cdCIKKwkJICAieG9yICUlZzMsICUlbzUsICUlZzNcblx0IgorCQkgICJsZGQgWyUyICsgMHgwMF0sICUlbzRcblx0IgorCQkgICJ4b3IgJSVnNCwgJSVsMCwgJSVnNFxuXHQiCisJCSAgInhvciAlJWc1LCAlJWwxLCAlJWc1XG5cdCIKKwkJICAibGRkIFslMiArIDB4MDhdLCAlJWwwXG5cdCIKKwkJICAieG9yICUlbzAsICUlbDIsICUlbzBcblx0IgorCQkgICJ4b3IgJSVvMSwgJSVsMywgJSVvMVxuXHQiCisJCSAgImxkZCBbJTIgKyAweDEwXSwgJSVsMlxuXHQiCisJCSAgInhvciAlJW8yLCAlJWw0LCAlJW8yXG5cdCIKKwkJICAieG9yICUlbzMsICUlbDUsICUlbzNcblx0IgorCQkgICJsZGQgWyUyICsgMHgxOF0sICUlbDRcblx0IgorCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCisJCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKKwkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgorCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCisJCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKKwkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgorCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCisJCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKKwkJICAic3RkICUlZzIsIFslMCArIDB4MDBdXG5cdCIKKwkJICAic3RkICUlZzQsIFslMCArIDB4MDhdXG5cdCIKKwkJICAic3RkICUlbzAsIFslMCArIDB4MTBdXG5cdCIKKwkJICAic3RkICUlbzIsIFslMCArIDB4MThdXG4iCisJCToKKwkJOiAiciIgKHAxKSwgInIiIChwMiksICJyIiAocDMpCisJCTogImcyIiwgImczIiwgImc0IiwgImc1IiwKKwkJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLAorCQkgICJsMCIsICJsMSIsICJsMiIsICJsMyIsICJsNCIsICJsNSIpOworCQlwMSArPSA4OworCQlwMiArPSA4OworCQlwMyArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3NwYXJjXzQodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCXVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKK3sKKwlpbnQgbGluZXMgPSBieXRlcyAvIChzaXplb2YgKGxvbmcpKSAvIDg7CisKKwlkbyB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkgICJsZGQgWyUwICsgMHgwMF0sICUlZzJcblx0IgorCQkgICJsZGQgWyUwICsgMHgwOF0sICUlZzRcblx0IgorCQkgICJsZGQgWyUwICsgMHgxMF0sICUlbzBcblx0IgorCQkgICJsZGQgWyUwICsgMHgxOF0sICUlbzJcblx0IgorCQkgICJsZGQgWyUxICsgMHgwMF0sICUlbzRcblx0IgorCQkgICJsZGQgWyUxICsgMHgwOF0sICUlbDBcblx0IgorCQkgICJsZGQgWyUxICsgMHgxMF0sICUlbDJcblx0IgorCQkgICJsZGQgWyUxICsgMHgxOF0sICUlbDRcblx0IgorCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCisJCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKKwkJICAibGRkIFslMiArIDB4MDBdLCAlJW80XG5cdCIKKwkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgorCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCisJCSAgImxkZCBbJTIgKyAweDA4XSwgJSVsMFxuXHQiCisJCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKKwkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgorCQkgICJsZGQgWyUyICsgMHgxMF0sICUlbDJcblx0IgorCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCisJCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKKwkJICAibGRkIFslMiArIDB4MThdLCAlJWw0XG5cdCIKKwkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgorCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCisJCSAgImxkZCBbJTMgKyAweDAwXSwgJSVvNFxuXHQiCisJCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKKwkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgorCQkgICJsZGQgWyUzICsgMHgwOF0sICUlbDBcblx0IgorCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCisJCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKKwkJICAibGRkIFslMyArIDB4MTBdLCAlJWwyXG5cdCIKKwkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgorCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCisJCSAgImxkZCBbJTMgKyAweDE4XSwgJSVsNFxuXHQiCisJCSAgInhvciAlJWcyLCAlJW80LCAlJWcyXG5cdCIKKwkJICAieG9yICUlZzMsICUlbzUsICUlZzNcblx0IgorCQkgICJ4b3IgJSVnNCwgJSVsMCwgJSVnNFxuXHQiCisJCSAgInhvciAlJWc1LCAlJWwxLCAlJWc1XG5cdCIKKwkJICAieG9yICUlbzAsICUlbDIsICUlbzBcblx0IgorCQkgICJ4b3IgJSVvMSwgJSVsMywgJSVvMVxuXHQiCisJCSAgInhvciAlJW8yLCAlJWw0LCAlJW8yXG5cdCIKKwkJICAieG9yICUlbzMsICUlbDUsICUlbzNcblx0IgorCQkgICJzdGQgJSVnMiwgWyUwICsgMHgwMF1cblx0IgorCQkgICJzdGQgJSVnNCwgWyUwICsgMHgwOF1cblx0IgorCQkgICJzdGQgJSVvMCwgWyUwICsgMHgxMF1cblx0IgorCQkgICJzdGQgJSVvMiwgWyUwICsgMHgxOF1cbiIKKwkJOgorCQk6ICJyIiAocDEpLCAiciIgKHAyKSwgInIiIChwMyksICJyIiAocDQpCisJCTogImcyIiwgImczIiwgImc0IiwgImc1IiwKKwkJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLAorCQkgICJsMCIsICJsMSIsICJsMiIsICJsMyIsICJsNCIsICJsNSIpOworCQlwMSArPSA4OworCQlwMiArPSA4OworCQlwMyArPSA4OworCQlwNCArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3NwYXJjXzUodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAorCXVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCwgdW5zaWduZWQgbG9uZyAqcDUpCit7CisJaW50IGxpbmVzID0gYnl0ZXMgLyAoc2l6ZW9mIChsb25nKSkgLyA4OworCisJZG8geworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJICAibGRkIFslMCArIDB4MDBdLCAlJWcyXG5cdCIKKwkJICAibGRkIFslMCArIDB4MDhdLCAlJWc0XG5cdCIKKwkJICAibGRkIFslMCArIDB4MTBdLCAlJW8wXG5cdCIKKwkJICAibGRkIFslMCArIDB4MThdLCAlJW8yXG5cdCIKKwkJICAibGRkIFslMSArIDB4MDBdLCAlJW80XG5cdCIKKwkJICAibGRkIFslMSArIDB4MDhdLCAlJWwwXG5cdCIKKwkJICAibGRkIFslMSArIDB4MTBdLCAlJWwyXG5cdCIKKwkJICAibGRkIFslMSArIDB4MThdLCAlJWw0XG5cdCIKKwkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgorCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCisJCSAgImxkZCBbJTIgKyAweDAwXSwgJSVvNFxuXHQiCisJCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKKwkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgorCQkgICJsZGQgWyUyICsgMHgwOF0sICUlbDBcblx0IgorCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCisJCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKKwkJICAibGRkIFslMiArIDB4MTBdLCAlJWwyXG5cdCIKKwkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgorCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCisJCSAgImxkZCBbJTIgKyAweDE4XSwgJSVsNFxuXHQiCisJCSAgInhvciAlJWcyLCAlJW80LCAlJWcyXG5cdCIKKwkJICAieG9yICUlZzMsICUlbzUsICUlZzNcblx0IgorCQkgICJsZGQgWyUzICsgMHgwMF0sICUlbzRcblx0IgorCQkgICJ4b3IgJSVnNCwgJSVsMCwgJSVnNFxuXHQiCisJCSAgInhvciAlJWc1LCAlJWwxLCAlJWc1XG5cdCIKKwkJICAibGRkIFslMyArIDB4MDhdLCAlJWwwXG5cdCIKKwkJICAieG9yICUlbzAsICUlbDIsICUlbzBcblx0IgorCQkgICJ4b3IgJSVvMSwgJSVsMywgJSVvMVxuXHQiCisJCSAgImxkZCBbJTMgKyAweDEwXSwgJSVsMlxuXHQiCisJCSAgInhvciAlJW8yLCAlJWw0LCAlJW8yXG5cdCIKKwkJICAieG9yICUlbzMsICUlbDUsICUlbzNcblx0IgorCQkgICJsZGQgWyUzICsgMHgxOF0sICUlbDRcblx0IgorCQkgICJ4b3IgJSVnMiwgJSVvNCwgJSVnMlxuXHQiCisJCSAgInhvciAlJWczLCAlJW81LCAlJWczXG5cdCIKKwkJICAibGRkIFslNCArIDB4MDBdLCAlJW80XG5cdCIKKwkJICAieG9yICUlZzQsICUlbDAsICUlZzRcblx0IgorCQkgICJ4b3IgJSVnNSwgJSVsMSwgJSVnNVxuXHQiCisJCSAgImxkZCBbJTQgKyAweDA4XSwgJSVsMFxuXHQiCisJCSAgInhvciAlJW8wLCAlJWwyLCAlJW8wXG5cdCIKKwkJICAieG9yICUlbzEsICUlbDMsICUlbzFcblx0IgorCQkgICJsZGQgWyU0ICsgMHgxMF0sICUlbDJcblx0IgorCQkgICJ4b3IgJSVvMiwgJSVsNCwgJSVvMlxuXHQiCisJCSAgInhvciAlJW8zLCAlJWw1LCAlJW8zXG5cdCIKKwkJICAibGRkIFslNCArIDB4MThdLCAlJWw0XG5cdCIKKwkJICAieG9yICUlZzIsICUlbzQsICUlZzJcblx0IgorCQkgICJ4b3IgJSVnMywgJSVvNSwgJSVnM1xuXHQiCisJCSAgInhvciAlJWc0LCAlJWwwLCAlJWc0XG5cdCIKKwkJICAieG9yICUlZzUsICUlbDEsICUlZzVcblx0IgorCQkgICJ4b3IgJSVvMCwgJSVsMiwgJSVvMFxuXHQiCisJCSAgInhvciAlJW8xLCAlJWwzLCAlJW8xXG5cdCIKKwkJICAieG9yICUlbzIsICUlbDQsICUlbzJcblx0IgorCQkgICJ4b3IgJSVvMywgJSVsNSwgJSVvM1xuXHQiCisJCSAgInN0ZCAlJWcyLCBbJTAgKyAweDAwXVxuXHQiCisJCSAgInN0ZCAlJWc0LCBbJTAgKyAweDA4XVxuXHQiCisJCSAgInN0ZCAlJW8wLCBbJTAgKyAweDEwXVxuXHQiCisJCSAgInN0ZCAlJW8yLCBbJTAgKyAweDE4XVxuIgorCQk6CisJCTogInIiIChwMSksICJyIiAocDIpLCAiciIgKHAzKSwgInIiIChwNCksICJyIiAocDUpCisJCTogImcyIiwgImczIiwgImc0IiwgImc1IiwKKwkJICAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLAorCQkgICJsMCIsICJsMSIsICJsMiIsICJsMyIsICJsNCIsICJsNSIpOworCQlwMSArPSA4OworCQlwMiArPSA4OworCQlwMyArPSA4OworCQlwNCArPSA4OworCQlwNSArPSA4OworCX0gd2hpbGUgKC0tbGluZXMgPiAwKTsKK30KKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX1NQQVJDID0geworCS5uYW1lCT0gIlNQQVJDIiwKKwkuZG9fMgk9IHNwYXJjXzIsCisJLmRvXzMJPSBzcGFyY18zLAorCS5kb180CT0gc3BhcmNfNCwKKwkuZG9fNQk9IHNwYXJjXzUsCit9OworCisvKiBGb3IgZ3JpbnMsIGFsc28gdGVzdCB0aGUgZ2VuZXJpYyByb3V0aW5lcy4gICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMveG9yLmg+CisKKyN1bmRlZiBYT1JfVFJZX1RFTVBMQVRFUworI2RlZmluZSBYT1JfVFJZX1RFTVBMQVRFUwkJCQlcCisJZG8gewkJCQkJCVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3MpOwkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja18zMnJlZ3MpOwkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19TUEFSQyk7CQlcCisJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3hvcl82NC5oIGIvaW5jbHVkZS9hc20tc3BhcmMveG9yXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAyMzM4OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3hvcl82NC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zcGFyYzY0L3hvci5oCisgKgorICogSGlnaCBzcGVlZCB4b3JfYmxvY2sgb3BlcmF0aW9uIGZvciBSQUlENC81IHV0aWxpemluZyB0aGUKKyAqIFVsdHJhU3BhcmMgVmlzdWFsIEluc3RydWN0aW9uIFNldCBhbmQgTmlhZ2FyYSBibG9jay1pbml0CisgKiB0d2luLWxvYWQgaW5zdHJ1Y3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CisKK2V4dGVybiB2b2lkIHhvcl92aXNfMih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4b3JfdmlzXzModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4b3JfdmlzXzQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIHhvcl92aXNfNSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CisKKy8qIFhYWCBVZ2gsIHdyaXRlIGNoZWV0YWggdmVyc2lvbnMuLi4gLURhdmVNICovCisKK3N0YXRpYyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHhvcl9ibG9ja19WSVMgPSB7CisgICAgICAgIC5uYW1lCT0gIlZJUyIsCisgICAgICAgIC5kb18yCT0geG9yX3Zpc18yLAorICAgICAgICAuZG9fMwk9IHhvcl92aXNfMywKKyAgICAgICAgLmRvXzQJPSB4b3JfdmlzXzQsCisgICAgICAgIC5kb181CT0geG9yX3Zpc181LAorfTsKKworZXh0ZXJuIHZvaWQgeG9yX25pYWdhcmFfMih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4b3JfbmlhZ2FyYV8zKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkJICB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHZvaWQgeG9yX25pYWdhcmFfNCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJCSAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHZvaWQgeG9yX25pYWdhcmFfNSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJCSAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CisKK3N0YXRpYyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHhvcl9ibG9ja19uaWFnYXJhID0geworICAgICAgICAubmFtZQk9ICJOaWFnYXJhIiwKKyAgICAgICAgLmRvXzIJPSB4b3JfbmlhZ2FyYV8yLAorICAgICAgICAuZG9fMwk9IHhvcl9uaWFnYXJhXzMsCisgICAgICAgIC5kb180CT0geG9yX25pYWdhcmFfNCwKKyAgICAgICAgLmRvXzUJPSB4b3JfbmlhZ2FyYV81LAorfTsKKworI3VuZGVmIFhPUl9UUllfVEVNUExBVEVTCisjZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTCQkJCVwKKwlkbyB7CQkJCQkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19WSVMpOwkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19uaWFnYXJhKTsJCVwKKwl9IHdoaWxlICgwKQorCisvKiBGb3IgVklTIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBOaWFnYXJhLiAgKi8KKyNkZWZpbmUgWE9SX1NFTEVDVF9URU1QTEFURShGQVNURVNUKSBcCisJKCh0bGJfdHlwZSA9PSBoeXBlcnZpc29yICYmIFwKKwkgIChzdW40dl9jaGlwX3R5cGUgPT0gU1VONFZfQ0hJUF9OSUFHQVJBMSB8fCBcCisJICAgc3VuNHZfY2hpcF90eXBlID09IFNVTjRWX0NISVBfTklBR0FSQTIpKSA/IFwKKwkgJnhvcl9ibG9ja19uaWFnYXJhIDogXAorCSAmeG9yX2Jsb2NrX1ZJUykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvS2J1aWxkIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9LYnVpbGQKaW5kZXggZGNlMWNmOS4uNmNkYWY5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9LYnVpbGQKQEAgLTEsMjMgKzEgQEAKLWluY2x1ZGUgaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCi0KLUFMVEFSQ0ggOj0gc3BhcmMKLUFSQ0hERUYgOj0gZGVmaW5lZCBfX3NwYXJjX18gJiYgZGVmaW5lZCBfX2FyY2g2NF9fCi1BTFRBUkNIREVGIDo9IGRlZmluZWQgX19zcGFyY19fICYmICFkZWZpbmVkIF9fYXJjaDY0X18KLQotaGVhZGVyLXkgKz0gYXBiLmgKLWhlYWRlci15ICs9IGFzaS5oCi1oZWFkZXIteSArPSBiYmMuaAotaGVhZGVyLXkgKz0gYnBwLmgKLWhlYWRlci15ICs9IGRpc3BsYXk3c2VnLmgKLWhlYWRlci15ICs9IGVudmN0cmwuaAotaGVhZGVyLXkgKz0gb3BlbnByb20uaAotaGVhZGVyLXkgKz0gb3BlbnByb21pby5oCi1oZWFkZXIteSArPSBwc3Jjb21wYXQuaAotaGVhZGVyLXkgKz0gcHN0YXRlLmgKLWhlYWRlci15ICs9IHJlZy5oCi1oZWFkZXIteSArPSB1Y3R4LmgKLWhlYWRlci15ICs9IHV0cmFwLmgKLWhlYWRlci15ICs9IHdhdGNoZG9nLmgKLQotdW5pZmRlZi15ICs9IGZiaW8uaAotdW5pZmRlZi15ICs9IHBlcmZjdHIuaAorIyBkdW1teSBmaWxlIHRvIGF2b2lkIGJyZWFraW5nIG1ha2UgaGVhZGVyc19pbnN0YWxsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2FncC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hZ3AuaAppbmRleCBlOWZjZjBlLi5lYjhkNGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2FncC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYWdwLmgKQEAgLTEsMjAgKzEgQEAKLSNpZm5kZWYgQUdQX0gKLSNkZWZpbmUgQUdQX0ggMQotCi0vKiBkdW1teSBmb3Igbm93ICovCi0KLSNkZWZpbmUgbWFwX3BhZ2VfaW50b19hZ3AocGFnZSkgCi0jZGVmaW5lIHVubWFwX3BhZ2VfZnJvbV9hZ3AocGFnZSkgCi0jZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpIG1iKCkKLQotLyogQ29udmVydCBhIHBoeXNpY2FsIGFkZHJlc3MgdG8gYW4gYWRkcmVzcyBzdWl0YWJsZSBmb3IgdGhlIEdBUlQuICovCi0jZGVmaW5lIHBoeXNfdG9fZ2FydCh4KSAoeCkKLSNkZWZpbmUgZ2FydF90b19waHlzKHgpICh4KQotCi0vKiBHQVRUIGFsbG9jYXRpb24uIFJldHVybnMvYWNjZXB0cyBHQVRUIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuICovCi0jZGVmaW5lIGFsbG9jX2dhdHRfcGFnZXMob3JkZXIpCQlcCi0JKChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAob3JkZXIpKSkKLSNkZWZpbmUgZnJlZV9nYXR0X3BhZ2VzKHRhYmxlLCBvcmRlcikJXAotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpKHRhYmxlKSwgKG9yZGVyKSkKLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLXNwYXJjL2FncC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9hcGIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXBiLmgKaW5kZXggOGYzYjU3ZC4uNWUyMzZjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9hcGIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2FwYi5oCkBAIC0xLDM2ICsxIEBACi0vKgotICogYXBiLmg6IEFkdmFuY2VkIFBDSSBCcmlkZ2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgYW5kIEJpdHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggIEVkZGllIEMuIERvc3QgIChlY2RAc2t5bmV0LmJlKQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfQVBCX0gKLSNkZWZpbmUgX1NQQVJDNjRfQVBCX0gKLQotI2RlZmluZSBBUEJfVElDS19SRUdJU1RFUgkJCTB4YjAKLSNkZWZpbmUgQVBCX0lOVF9BQ0sJCQkJMHhiOAotI2RlZmluZSBBUEJfUFJJTUFSWV9NQVNURVJfUkVUUllfTElNSVQJCTB4YzAKLSNkZWZpbmUgQVBCX0RNQV9BU0ZSCQkJCTB4YzgKLSNkZWZpbmUgQVBCX0RNQV9BRkFSCQkJCTB4ZDAKLSNkZWZpbmUgQVBCX1BJT19UQVJHRVRfUkVUUllfTElNSVQJCTB4ZDgKLSNkZWZpbmUgQVBCX1BJT19UQVJHRVRfTEFURU5DWV9USU1FUgkJMHhkOQotI2RlZmluZSBBUEJfRE1BX1RBUkdFVF9SRVRSWV9MSU1JVAkJMHhkYQotI2RlZmluZSBBUEJfRE1BX1RBUkdFVF9MQVRFTkNZX1RJTUVSCQkweGRiCi0jZGVmaW5lIEFQQl9TRUNPTkRBUllfTUFTVEVSX1JFVFJZX0xJTUlUCTB4ZGMKLSNkZWZpbmUgQVBCX1NFQ09OREFSWV9DT05UUk9MCQkJMHhkZAotI2RlZmluZSBBUEJfSU9fQUREUkVTU19NQVAJCQkweGRlCi0jZGVmaW5lIEFQQl9NRU1fQUREUkVTU19NQVAJCQkweGRmCi0KLSNkZWZpbmUgQVBCX1BDSV9DT05UUk9MX0xPVwkJCTB4ZTAKLSMgIGRlZmluZSBBUEJfUENJX0NUTF9MT1dfQVJCX1BBUksJCQkoMSA8PCAyMSkKLSMgIGRlZmluZSBBUEJfUENJX0NUTF9MT1dfRVJSSU5UX0VOCQkJKDEgPDwgOCkKLQotI2RlZmluZSBBUEJfUENJX0NPTlRST0xfSElHSAkJCTB4ZTQKLSMgIGRlZmluZSBBUEJfUENJX0NUTF9ISUdIX1NFUlIJCQkJKDEgPDwgMikKLSMgIGRlZmluZSBBUEJfUENJX0NUTF9ISUdIX0FSQklURVJfRU4JCQkoMSA8PCAwKQotCi0jZGVmaW5lIEFQQl9QSU9fQVNGUgkJCQkweGU4Ci0jZGVmaW5lIEFQQl9QSU9fQUZBUgkJCQkweGYwCi0jZGVmaW5lIEFQQl9ESUFHX1JFR0lTVEVSCQkJMHhmOAotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9BUEJfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvYXBiLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2FzaS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hc2kuaAppbmRleCBiYzU3YzQwLi45YjcxMTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2FzaS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXNpLmgKQEAgLTEsMTYwICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X0FTSV9ICi0jZGVmaW5lIF9TUEFSQzY0X0FTSV9ICi0KLS8qIGFzaS5oOiAgQWRkcmVzcyBTcGFjZSBJZGVudGlmaWVyIHZhbHVlcyBmb3IgdGhlIFY5LgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLQotLyogVjkgQXJjaGl0ZWN0dXJlIG1hbmRhcnkgQVNJcy4gKi8KLSNkZWZpbmUgQVNJX04JCQkweDA0IC8qIE51Y2xldXMJCQkJKi8KLSNkZWZpbmUgQVNJX05MCQkJMHgwYyAvKiBOdWNsZXVzLCBsaXR0bGUgZW5kaWFuCQkqLwotI2RlZmluZSBBU0lfQUlVUAkJMHgxMCAvKiBQcmltYXJ5LCB1c2VyCQkJKi8KLSNkZWZpbmUgQVNJX0FJVVMJCTB4MTEgLyogU2Vjb25kYXJ5LCB1c2VyCQkJKi8KLSNkZWZpbmUgQVNJX0FJVVBMCQkweDE4IC8qIFByaW1hcnksIHVzZXIsIGxpdHRsZSBlbmRpYW4JKi8KLSNkZWZpbmUgQVNJX0FJVVNMCQkweDE5IC8qIFNlY29uZGFyeSwgdXNlciwgbGl0dGxlIGVuZGlhbgkqLwotI2RlZmluZSBBU0lfUAkJCTB4ODAgLyogUHJpbWFyeSwgaW1wbGljaXQJCSovCi0jZGVmaW5lIEFTSV9TCQkJMHg4MSAvKiBTZWNvbmRhcnksIGltcGxpY2l0CQkqLwotI2RlZmluZSBBU0lfUE5GCQkJMHg4MiAvKiBQcmltYXJ5LCBubyBmYXVsdAkJKi8KLSNkZWZpbmUgQVNJX1NORgkJCTB4ODMgLyogU2Vjb25kYXJ5LCBubyBmYXVsdAkJKi8KLSNkZWZpbmUgQVNJX1BMCQkJMHg4OCAvKiBQcmltYXJ5LCBpbXBsaWNpdCwgbC1lbmRpYW4JKi8KLSNkZWZpbmUgQVNJX1NMCQkJMHg4OSAvKiBTZWNvbmRhcnksIGltcGxpY2l0LCBsLWVuZGlhbgkqLwotI2RlZmluZSBBU0lfUE5GTAkJMHg4YSAvKiBQcmltYXJ5LCBubyBmYXVsdCwgbC1lbmRpYW4JKi8KLSNkZWZpbmUgQVNJX1NORkwJCTB4OGIgLyogU2Vjb25kYXJ5LCBubyBmYXVsdCwgbC1lbmRpYW4JKi8KLQotLyogU3BpdEZpcmUgYW5kIGxhdGVyIGV4dGVuZGVkIEFTSXMuICBUaGUgIihJSUkpIiBtYXJrZXIgZGVzaWduYXRlcwotICogVWx0cmFTcGFyYy1JSUkgYW5kIGxhdGVyIHNwZWNpZmljIEFTSXMuICBUaGUgIihDTVQpIiBtYXJrZXIgZGVzaWduYXRlcwotICogQ2hpcCBNdWx0aSBUaHJlYWRpbmcgc3BlY2lmaWMgQVNJcy4gICIoTkcpIiBkZXNpZ25hdGVzIE5pYWdhcmEgc3BlY2lmaWMKLSAqIEFTSXMsICIoNFYpIiBkZXNpZ25hdGVzIFNVTjRWIHNwZWNpZmljIEFTSXMuCi0gKi8KLSNkZWZpbmUgQVNJX1BIWVNfVVNFX0VDCQkweDE0IC8qIFBBRERSLCBFLWNhY2hhYmxlCQkqLwotI2RlZmluZSBBU0lfUEhZU19CWVBBU1NfRUNfRQkweDE1IC8qIFBBRERSLCBFLWJpdAkJCSovCi0jZGVmaW5lIEFTSV9CTEtfQUlVUF80VgkJMHgxNiAvKiAoNFYpIFByaW0sIHVzZXIsIGJsb2NrIGxkL3N0CSovCi0jZGVmaW5lIEFTSV9CTEtfQUlVU180VgkJMHgxNyAvKiAoNFYpIFNlYywgdXNlciwgYmxvY2sgbGQvc3QJKi8KLSNkZWZpbmUgQVNJX1BIWVNfVVNFX0VDX0wJMHgxYyAvKiBQQUREUiwgRS1jYWNoYWJsZSwgbGl0dGxlIGVuZGlhbiovCi0jZGVmaW5lIEFTSV9QSFlTX0JZUEFTU19FQ19FX0wJMHgxZCAvKiBQQUREUiwgRS1iaXQsIGxpdHRsZSBlbmRpYW4JKi8KLSNkZWZpbmUgQVNJX0JMS19BSVVQX0xfNFYJMHgxZSAvKiAoNFYpIFByaW0sIHVzZXIsIGJsb2NrLCBsLWVuZGlhbiovCi0jZGVmaW5lIEFTSV9CTEtfQUlVU19MXzRWCTB4MWYgLyogKDRWKSBTZWMsIHVzZXIsIGJsb2NrLCBsLWVuZGlhbgkqLwotI2RlZmluZSBBU0lfU0NSQVRDSFBBRAkJMHgyMCAvKiAoNFYpIFNjcmF0Y2ggUGFkIFJlZ2lzdGVycwkqLwotI2RlZmluZSBBU0lfTU1VCQkJMHgyMSAvKiAoNFYpIE1NVSBDb250ZXh0IFJlZ2lzdGVycwkqLwotI2RlZmluZSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfQUlVUyAweDIzIC8qIChORykgaW5pdC1zdG9yZSwgdHdpbiBsb2FkLAotCQkJCQkgKiBzZWNvbmRhcnksIHVzZXIKLQkJCQkJICovCi0jZGVmaW5lIEFTSV9OVUNMRVVTX1FVQURfTERECTB4MjQgLyogQ2FjaGFibGUsIHF3b3JkIGxvYWQJCSovCi0jZGVmaW5lIEFTSV9RVUVVRQkJMHgyNSAvKiAoNFYpIEludGVycnVwdCBRdWV1ZSBSZWdpc3RlcnMJKi8KLSNkZWZpbmUgQVNJX1FVQURfTEREX1BIWVNfNFYJMHgyNiAvKiAoNFYpIFBoeXNpY2FsLCBxd29yZCBsb2FkCSovCi0jZGVmaW5lIEFTSV9OVUNMRVVTX1FVQURfTEREX0wJMHgyYyAvKiBDYWNoYWJsZSwgcXdvcmQgbG9hZCwgbC1lbmRpYW4gCSovCi0jZGVmaW5lIEFTSV9RVUFEX0xERF9QSFlTX0xfNFYJMHgyZSAvKiAoNFYpIFBoeXMsIHF3b3JkIGxvYWQsIGwtZW5kaWFuCSovCi0jZGVmaW5lIEFTSV9QQ0FDSEVfREFUQV9TVEFUVVMJMHgzMCAvKiAoSUlJKSBQQ2FjaGUgZGF0YSBzdGF0IFJBTSBkaWFnCSovCi0jZGVmaW5lIEFTSV9QQ0FDSEVfREFUQQkJMHgzMSAvKiAoSUlJKSBQQ2FjaGUgZGF0YSBSQU0gZGlhZwkqLwotI2RlZmluZSBBU0lfUENBQ0hFX1RBRwkJMHgzMiAvKiAoSUlJKSBQQ2FjaGUgdGFnIFJBTSBkaWFnCSovCi0jZGVmaW5lIEFTSV9QQ0FDSEVfU05PT1BfVEFHCTB4MzMgLyogKElJSSkgUENhY2hlIHNub29wIHRhZyBSQU0gZGlhZwkqLwotI2RlZmluZSBBU0lfUVVBRF9MRERfUEhZUwkweDM0IC8qIChJSUkrKSBQQUREUiwgcXdvcmQgbG9hZAkqLwotI2RlZmluZSBBU0lfV0NBQ0hFX1ZBTElEX0JJVFMJMHgzOCAvKiAoSUlJKSBXQ2FjaGUgVmFsaWQgQml0cyBkaWFnCSovCi0jZGVmaW5lIEFTSV9XQ0FDSEVfREFUQQkJMHgzOSAvKiAoSUlJKSBXQ2FjaGUgZGF0YSBSQU0gZGlhZwkqLwotI2RlZmluZSBBU0lfV0NBQ0hFX1RBRwkJMHgzYSAvKiAoSUlJKSBXQ2FjaGUgdGFnIFJBTSBkaWFnCSovCi0jZGVmaW5lIEFTSV9XQ0FDSEVfU05PT1BfVEFHCTB4M2IgLyogKElJSSkgV0NhY2hlIHNub29wIHRhZyBSQU0gZGlhZwkqLwotI2RlZmluZSBBU0lfUVVBRF9MRERfUEhZU19MCTB4M2MgLyogKElJSSspIFBBRERSLCBxdy1sb2FkLCBsLWVuZGlhbgkqLwotI2RlZmluZSBBU0lfU1JBTV9GQVNUX0lOSVQJMHg0MCAvKiAoSUlJKykgRmFzdCBTUkFNIGluaXQJCSovCi0jZGVmaW5lIEFTSV9DT1JFX0FWQUlMQUJMRQkweDQxIC8qIChDTVQpIExQIEF2YWlsYWJsZQkJKi8KLSNkZWZpbmUgQVNJX0NPUkVfRU5BQkxFX1NUQVQJMHg0MSAvKiAoQ01UKSBMUCBFbmFibGUgU3RhdHVzCQkqLwotI2RlZmluZSBBU0lfQ09SRV9FTkFCTEUJCTB4NDEgLyogKENNVCkgTFAgRW5hYmxlIFJXCQkqLwotI2RlZmluZSBBU0lfWElSX1NURUVSSU5HCTB4NDEgLyogKENNVCkgWElSIFN0ZWVyaW5nIFJXCQkqLwotI2RlZmluZSBBU0lfQ09SRV9SVU5OSU5HX1JXCTB4NDEgLyogKENNVCkgTFAgUnVubmluZyBSVwkJKi8KLSNkZWZpbmUgQVNJX0NPUkVfUlVOTklOR19XMVMJMHg0MSAvKiAoQ01UKSBMUCBSdW5uaW5nIFdyaXRlLU9uZSBTZXQJKi8KLSNkZWZpbmUgQVNJX0NPUkVfUlVOTklOR19XMUMJMHg0MSAvKiAoQ01UKSBMUCBSdW5uaW5nIFdyaXRlLU9uZSBDbHIJKi8KLSNkZWZpbmUgQVNJX0NPUkVfUlVOTklOR19TVEFUCTB4NDEgLyogKENNVCkgTFAgUnVubmluZyBTdGF0dXMJCSovCi0jZGVmaW5lIEFTSV9DTVRfRVJST1JfU1RFRVJJTkcJMHg0MSAvKiAoQ01UKSBFcnJvciBTdGVlcmluZyBSVwkJKi8KLSNkZWZpbmUgQVNJX0RDQUNIRV9JTlZBTElEQVRFCTB4NDIgLyogKElJSSkgRENhY2hlIEludmFsaWRhdGUgZGlhZwkqLwotI2RlZmluZSBBU0lfRENBQ0hFX1VUQUcJCTB4NDMgLyogKElJSSkgRENhY2hlIHVUYWcgZGlhZwkJKi8KLSNkZWZpbmUgQVNJX0RDQUNIRV9TTk9PUF9UQUcJMHg0NCAvKiAoSUlJKSBEQ2FjaGUgc25vb3AgdGFnIFJBTSBkaWFnCSovCi0jZGVmaW5lIEFTSV9MU1VfQ09OVFJPTAkJMHg0NSAvKiBMb2FkLXN0b3JlIGNvbnRyb2wgdW5pdAkJKi8KLSNkZWZpbmUgQVNJX0RDVV9DT05UUk9MX1JFRwkweDQ1IC8qIChJSUkpIERDYWNoZSBVbml0IENvbnRyb2wgcmVnCSovCi0jZGVmaW5lIEFTSV9EQ0FDSEVfREFUQQkJMHg0NiAvKiBEQ2FjaGUgZGF0YS1yYW0gZGlhZyBhY2Nlc3MJKi8KLSNkZWZpbmUgQVNJX0RDQUNIRV9UQUcJCTB4NDcgLyogRGNhY2hlIHRhZy92YWxpZCByYW0gZGlhZyBhY2Nlc3MqLwotI2RlZmluZSBBU0lfSU5UUl9ESVNQQVRDSF9TVEFUCTB4NDggLyogSVJRIHZlY3RvciBkaXNwYXRjaCBzdGF0dXMJKi8KLSNkZWZpbmUgQVNJX0lOVFJfUkVDRUlWRQkweDQ5IC8qIElSUSB2ZWN0b3IgcmVjZWl2ZSBzdGF0dXMJKi8KLSNkZWZpbmUgQVNJX1VQQV9DT05GSUcJCTB4NGEgLyogVVBBIGNvbmZpZyBzcGFjZQkJKi8KLSNkZWZpbmUgQVNJX0pCVVNfQ09ORklHCQkweDRhIC8qIChJSUlpKSBKQlVTIENvbmZpZyBSZWdpc3RlcgkqLwotI2RlZmluZSBBU0lfU0FGQVJJX0NPTkZJRwkweDRhIC8qIChJSUkpIFNhZmFyaSBDb25maWcgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgQVNJX1NBRkFSSV9BRERSRVNTCTB4NGEgLyogKElJSSkgU2FmYXJpIEFkZHJlc3MgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgQVNJX0VTVEFURV9FUlJPUl9FTgkweDRiIC8qIEUtY2FjaGUgZXJyb3IgZW5hYmxlIHNwYWNlCSovCi0jZGVmaW5lIEFTSV9BRlNSCQkweDRjIC8qIEFzeW5jIGZhdWx0IHN0YXR1cyByZWdpc3RlcgkqLwotI2RlZmluZSBBU0lfQUZBUgkJMHg0ZCAvKiBBc3luYyBmYXVsdCBhZGRyZXNzIHJlZ2lzdGVyCSovCi0jZGVmaW5lIEFTSV9FQ19UQUdfREFUQQkJMHg0ZSAvKiBFLWNhY2hlIHRhZy92YWxpZCByYW0gZGlhZyBhY2MJKi8KLSNkZWZpbmUgQVNJX0lNTVUJCTB4NTAgLyogSW5zbi1NTVUgbWFpbiByZWdpc3RlciBzcGFjZQkqLwotI2RlZmluZSBBU0lfSU1NVV9UU0JfOEtCX1BUUgkweDUxIC8qIEluc24tTU1VIDhLQiBUU0IgcG9pbnRlciByZWcJKi8KLSNkZWZpbmUgQVNJX0lNTVVfVFNCXzY0S0JfUFRSCTB4NTIgLyogSW5zbi1NTVUgNjRLQiBUU0IgcG9pbnRlciByZWcJKi8KLSNkZWZpbmUgQVNJX0lUTEJfREFUQV9JTgkweDU0IC8qIEluc24tTU1VIFRMQiBkYXRhIGluIHJlZwkqLwotI2RlZmluZSBBU0lfSVRMQl9EQVRBX0FDQ0VTUwkweDU1IC8qIEluc24tTU1VIFRMQiBkYXRhIGFjY2VzcyByZWcJKi8KLSNkZWZpbmUgQVNJX0lUTEJfVEFHX1JFQUQJMHg1NiAvKiBJbnNuLU1NVSBUTEIgdGFnIHJlYWQgcmVnCSovCi0jZGVmaW5lIEFTSV9JTU1VX0RFTUFQCQkweDU3IC8qIEluc24tTU1VIFRMQiBkZW1hcAkJKi8KLSNkZWZpbmUgQVNJX0RNTVUJCTB4NTggLyogRGF0YS1NTVUgbWFpbiByZWdpc3RlciBzcGFjZQkqLwotI2RlZmluZSBBU0lfRE1NVV9UU0JfOEtCX1BUUgkweDU5IC8qIERhdGEtTU1VIDhLQiBUU0IgcG9pbnRlciByZWcJKi8KLSNkZWZpbmUgQVNJX0RNTVVfVFNCXzY0S0JfUFRSCTB4NWEgLyogRGF0YS1NTVUgMTZLQiBUU0IgcG9pbnRlciByZWcJKi8KLSNkZWZpbmUgQVNJX0RNTVVfVFNCX0RJUkVDVF9QVFIJMHg1YiAvKiBEYXRhLU1NVSBUU0IgZGlyZWN0IHBvaW50ZXIgcmVnCSovCi0jZGVmaW5lIEFTSV9EVExCX0RBVEFfSU4JMHg1YyAvKiBEYXRhLU1NVSBUTEIgZGF0YSBpbiByZWcJKi8KLSNkZWZpbmUgQVNJX0RUTEJfREFUQV9BQ0NFU1MJMHg1ZCAvKiBEYXRhLU1NVSBUTEIgZGF0YSBhY2Nlc3MgcmVnCSovCi0jZGVmaW5lIEFTSV9EVExCX1RBR19SRUFECTB4NWUgLyogRGF0YS1NTVUgVExCIHRhZyByZWFkIHJlZwkqLwotI2RlZmluZSBBU0lfRE1NVV9ERU1BUAkJMHg1ZiAvKiBEYXRhLU1NVSBUTEIgZGVtYXAJCSovCi0jZGVmaW5lIEFTSV9JSVVfSU5TVF9UUkFQCTB4NjAgLyogKElJSSkgSW5zdHJ1Y3Rpb24gQnJlYWtwb2ludAkqLwotI2RlZmluZSBBU0lfSU5UUl9JRAkJMHg2MyAvKiAoQ01UKSBJbnRlcnJ1cHQgSUQgcmVnaXN0ZXIJKi8KLSNkZWZpbmUgQVNJX0NPUkVfSUQJCTB4NjMgLyogKENNVCkgTFAgSUQgcmVnaXN0ZXIJCSovCi0jZGVmaW5lIEFTSV9DRVNSX0lECQkweDYzIC8qIChDTVQpIENFU1IgSUQgcmVnaXN0ZXIJCSovCi0jZGVmaW5lIEFTSV9JQ19JTlNUUgkJMHg2NiAvKiBJbnNuIGNhY2hlIGluc3RydWNpb24gcmFtIGRpYWcJKi8KLSNkZWZpbmUgQVNJX0lDX1RBRwkJMHg2NyAvKiBJbnNuIGNhY2hlIHRhZy92YWxpZCByYW0gZGlhZyAJKi8KLSNkZWZpbmUgQVNJX0lDX1NUQUcJCTB4NjggLyogKElJSSkgSW5zbiBjYWNoZSBzbm9vcCB0YWcgcmFtCSovCi0jZGVmaW5lIEFTSV9JQ19QUkVfREVDT0RFCTB4NmUgLyogSW5zbiBjYWNoZSBwcmUtZGVjb2RlIHJhbSBkaWFnCSovCi0jZGVmaW5lIEFTSV9JQ19ORVhUX0ZJRUxECTB4NmYgLyogSW5zbiBjYWNoZSBuZXh0LWZpZWxkIHJhbSBkaWFnCSovCi0jZGVmaW5lIEFTSV9CUlBSRURfQVJSQVkJMHg2ZiAvKiAoSUlJKSBCcmFuY2ggUHJlZGljdGlvbiBSQU0gZGlhZyovCi0jZGVmaW5lIEFTSV9CTEtfQUlVUAkJMHg3MCAvKiBQcmltYXJ5LCB1c2VyLCBibG9jayBsb2FkL3N0b3JlCSovCi0jZGVmaW5lIEFTSV9CTEtfQUlVUwkJMHg3MSAvKiBTZWNvbmRhcnksIHVzZXIsIGJsb2NrIGxkL3N0CSovCi0jZGVmaW5lIEFTSV9NQ1VfQ1RSTF9SRUcJMHg3MiAvKiAoSUlJKSBNZW1vcnkgY29udHJvbGxlciByZWdzCSovCi0jZGVmaW5lIEFTSV9FQ19EQVRBCQkweDc0IC8qIChJSUkpIEUtY2FjaGUgZGF0YSBzdGFnaW5nIHJlZwkqLwotI2RlZmluZSBBU0lfRUNfQ1RSTAkJMHg3NSAvKiAoSUlJKSBFLWNhY2hlIGNvbnRyb2wgcmVnCSovCi0jZGVmaW5lIEFTSV9FQ19XCQkweDc2IC8qIEUtY2FjaGUgZGlhZyB3cml0ZSBhY2Nlc3MJKi8KLSNkZWZpbmUgQVNJX1VEQl9FUlJPUl9XCQkweDc3IC8qIEV4dGVybmFsIFVEQiBlcnJvciByZWdzIFcJKi8KLSNkZWZpbmUgQVNJX1VEQl9DT05UUk9MX1cJMHg3NyAvKiBFeHRlcm5hbCBVREIgY29udHJvbCByZWdzIFcJKi8KLSNkZWZpbmUgQVNJX0lOVFJfVwkJMHg3NyAvKiBJUlEgdmVjdG9yIGRpc3BhdGNoIHdyaXRlCSovCi0jZGVmaW5lIEFTSV9JTlRSX0RBVEFOX1cJMHg3NyAvKiAoSUlJKSBPdXQgaXJxIHZlY3RvciBkYXRhIHJlZyBOCSovCi0jZGVmaW5lIEFTSV9JTlRSX0RJU1BBVENIX1cJMHg3NyAvKiAoSUlJKSBJbnRlcnJ1cHQgdmVjdG9yIGRpc3BhdGNoCSovCi0jZGVmaW5lIEFTSV9CTEtfQUlVUEwJCTB4NzggLyogUHJpbWFyeSwgdXNlciwgbGl0dGxlLCBibGsgbGQvc3QqLwotI2RlZmluZSBBU0lfQkxLX0FJVVNMCQkweDc5IC8qIFNlY29uZGFyeSwgdXNlciwgbGl0dGxlLCBibGsgbGQvc3QqLwotI2RlZmluZSBBU0lfRUNfUgkJMHg3ZSAvKiBFLWNhY2hlIGRpYWcgcmVhZCBhY2Nlc3MJKi8KLSNkZWZpbmUgQVNJX1VEQkhfRVJST1JfUgkweDdmIC8qIEV4dGVybmFsIFVEQiBlcnJvciByZWdzIHJkIGhpCSovCi0jZGVmaW5lIEFTSV9VREJMX0VSUk9SX1IJMHg3ZiAvKiBFeHRlcm5hbCBVREIgZXJyb3IgcmVncyByZCBsb3cJKi8KLSNkZWZpbmUgQVNJX1VEQkhfQ09OVFJPTF9SCTB4N2YgLyogRXh0ZXJuYWwgVURCIGNvbnRyb2wgcmVncyByZCBoaQkqLwotI2RlZmluZSBBU0lfVURCTF9DT05UUk9MX1IJMHg3ZiAvKiBFeHRlcm5hbCBVREIgY29udHJvbCByZWdzIHJkIGxvdyovCi0jZGVmaW5lIEFTSV9JTlRSX1IJCTB4N2YgLyogSVJRIHZlY3RvciBkaXNwYXRjaCByZWFkCSovCi0jZGVmaW5lIEFTSV9JTlRSX0RBVEFOX1IJMHg3ZiAvKiAoSUlJKSBJbiBpcnEgdmVjdG9yIGRhdGEgcmVnIE4JKi8KLSNkZWZpbmUgQVNJX1BTVDhfUAkJMHhjMCAvKiBQcmltYXJ5LCA4IDgtYml0LCBwYXJ0aWFsCSovCi0jZGVmaW5lIEFTSV9QU1Q4X1MJCTB4YzEgLyogU2Vjb25kYXJ5LCA4IDgtYml0LCBwYXJ0aWFsCSovCi0jZGVmaW5lIEFTSV9QU1QxNl9QCQkweGMyIC8qIFByaW1hcnksIDQgMTYtYml0LCBwYXJ0aWFsCSovCi0jZGVmaW5lIEFTSV9QU1QxNl9TCQkweGMzIC8qIFNlY29uZGFyeSwgNCAxNi1iaXQsIHBhcnRpYWwJKi8KLSNkZWZpbmUgQVNJX1BTVDMyX1AJCTB4YzQgLyogUHJpbWFyeSwgMiAzMi1iaXQsIHBhcnRpYWwJKi8KLSNkZWZpbmUgQVNJX1BTVDMyX1MJCTB4YzUgLyogU2Vjb25kYXJ5LCAyIDMyLWJpdCwgcGFydGlhbAkqLwotI2RlZmluZSBBU0lfUFNUOF9QTAkJMHhjOCAvKiBQcmltYXJ5LCA4IDgtYml0LCBwYXJ0aWFsLCBMCSovCi0jZGVmaW5lIEFTSV9QU1Q4X1NMCQkweGM5IC8qIFNlY29uZGFyeSwgOCA4LWJpdCwgcGFydGlhbCwgTAkqLwotI2RlZmluZSBBU0lfUFNUMTZfUEwJCTB4Y2EgLyogUHJpbWFyeSwgNCAxNi1iaXQsIHBhcnRpYWwsIEwJKi8KLSNkZWZpbmUgQVNJX1BTVDE2X1NMCQkweGNiIC8qIFNlY29uZGFyeSwgNCAxNi1iaXQsIHBhcnRpYWwsIEwJKi8KLSNkZWZpbmUgQVNJX1BTVDMyX1BMCQkweGNjIC8qIFByaW1hcnksIDIgMzItYml0LCBwYXJ0aWFsLCBMCSovCi0jZGVmaW5lIEFTSV9QU1QzMl9TTAkJMHhjZCAvKiBTZWNvbmRhcnksIDIgMzItYml0LCBwYXJ0aWFsLCBMCSovCi0jZGVmaW5lIEFTSV9GTDhfUAkJMHhkMCAvKiBQcmltYXJ5LCAxIDgtYml0LCBmcHUgbGQvc3QJKi8KLSNkZWZpbmUgQVNJX0ZMOF9TCQkweGQxIC8qIFNlY29uZGFyeSwgMSA4LWJpdCwgZnB1IGxkL3N0CSovCi0jZGVmaW5lIEFTSV9GTDE2X1AJCTB4ZDIgLyogUHJpbWFyeSwgMSAxNi1iaXQsIGZwdSBsZC9zdAkqLwotI2RlZmluZSBBU0lfRkwxNl9TCQkweGQzIC8qIFNlY29uZGFyeSwgMSAxNi1iaXQsIGZwdSBsZC9zdAkqLwotI2RlZmluZSBBU0lfRkw4X1BMCQkweGQ4IC8qIFByaW1hcnksIDEgOC1iaXQsIGZwdSBsZC9zdCwgTAkqLwotI2RlZmluZSBBU0lfRkw4X1NMCQkweGQ5IC8qIFNlY29uZGFyeSwgMSA4LWJpdCwgZnB1IGxkL3N0LCBMKi8KLSNkZWZpbmUgQVNJX0ZMMTZfUEwJCTB4ZGEgLyogUHJpbWFyeSwgMSAxNi1iaXQsIGZwdSBsZC9zdCwgTAkqLwotI2RlZmluZSBBU0lfRkwxNl9TTAkJMHhkYiAvKiBTZWNvbmRhcnksIDEgMTYtYml0LCBmcHUgbGQvc3QsTCovCi0jZGVmaW5lIEFTSV9CTEtfQ09NTUlUX1AJMHhlMCAvKiBQcmltYXJ5LCBibGsgc3RvcmUgY29tbWl0CSovCi0jZGVmaW5lIEFTSV9CTEtfQ09NTUlUX1MJMHhlMSAvKiBTZWNvbmRhcnksIGJsayBzdG9yZSBjb21taXQJKi8KLSNkZWZpbmUgQVNJX0JMS19JTklUX1FVQURfTEREX1AJMHhlMiAvKiAoTkcpIGluaXQtc3RvcmUsIHR3aW4gbG9hZCwKLQkJCQkgICAgICAqIHByaW1hcnksIGltcGxpY2l0Ci0JCQkJICAgICAgKi8KLSNkZWZpbmUgQVNJX0JMS19QCQkweGYwIC8qIFByaW1hcnksIGJsayBsZC9zdAkJKi8KLSNkZWZpbmUgQVNJX0JMS19TCQkweGYxIC8qIFNlY29uZGFyeSwgYmxrIGxkL3N0CQkqLwotI2RlZmluZSBBU0lfQkxLX1BMCQkweGY4IC8qIFByaW1hcnksIGJsayBsZC9zdCwgbGl0dGxlCSovCi0jZGVmaW5lIEFTSV9CTEtfU0wJCTB4ZjkgLyogU2Vjb25kYXJ5LCBibGsgbGQvc3QsIGxpdHRsZQkqLwotCi0jZW5kaWYgLyogX1NQQVJDNjRfQVNJX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvYXNpLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hdG9taWMuaAppbmRleCAyYzcxZWM0YS4uZjUxMjY4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oCkBAIC0xLDEyOCArMSBAQAotLyogYXRvbWljLmg6IFRoYW5rZnVsbHkgdGhlIFY5IGlzIGF0IGxlYXN0IHJlYXNvbmFibGUgZm9yIHRoaXMKLSAqICAgICAgICAgICBzdHVmZi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQotICovCi0KLSNpZm5kZWYgX19BUkNIX1NQQVJDNjRfQVRPTUlDX18KLSNkZWZpbmUgX19BUkNIX1NQQVJDNjRfQVRPTUlDX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi10eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OwotdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBfX3M2NCBjb3VudGVyOyB9IGF0b21pYzY0X3Q7Ci0KLSNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJCXsgKGkpIH0KLSNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKQl7IChpKSB9Ci0KLSNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCi0jZGVmaW5lIGF0b21pYzY0X3JlYWQodikJKCh2KS0+Y291bnRlcikKLQotI2RlZmluZSBhdG9taWNfc2V0KHYsIGkpCSgoKHYpLT5jb3VudGVyKSA9IGkpCi0jZGVmaW5lIGF0b21pYzY0X3NldCh2LCBpKQkoKCh2KS0+Y291bnRlcikgPSBpKQotCi1leHRlcm4gdm9pZCBhdG9taWNfYWRkKGludCwgYXRvbWljX3QgKik7Ci1leHRlcm4gdm9pZCBhdG9taWM2NF9hZGQoaW50LCBhdG9taWM2NF90ICopOwotZXh0ZXJuIHZvaWQgYXRvbWljX3N1YihpbnQsIGF0b21pY190ICopOwotZXh0ZXJuIHZvaWQgYXRvbWljNjRfc3ViKGludCwgYXRvbWljNjRfdCAqKTsKLQotZXh0ZXJuIGludCBhdG9taWNfYWRkX3JldChpbnQsIGF0b21pY190ICopOwotZXh0ZXJuIGludCBhdG9taWM2NF9hZGRfcmV0KGludCwgYXRvbWljNjRfdCAqKTsKLWV4dGVybiBpbnQgYXRvbWljX3N1Yl9yZXQoaW50LCBhdG9taWNfdCAqKTsKLWV4dGVybiBpbnQgYXRvbWljNjRfc3ViX3JldChpbnQsIGF0b21pYzY0X3QgKik7Ci0KLSNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgYXRvbWljX3N1Yl9yZXQoMSwgdikKLSNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KSBhdG9taWM2NF9zdWJfcmV0KDEsIHYpCi0KLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgYXRvbWljX2FkZF9yZXQoMSwgdikKLSNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybih2KSBhdG9taWM2NF9hZGRfcmV0KDEsIHYpCi0KLSNkZWZpbmUgYXRvbWljX3N1Yl9yZXR1cm4oaSwgdikgYXRvbWljX3N1Yl9yZXQoaSwgdikKLSNkZWZpbmUgYXRvbWljNjRfc3ViX3JldHVybihpLCB2KSBhdG9taWM2NF9zdWJfcmV0KGksIHYpCi0KLSNkZWZpbmUgYXRvbWljX2FkZF9yZXR1cm4oaSwgdikgYXRvbWljX2FkZF9yZXQoaSwgdikKLSNkZWZpbmUgYXRvbWljNjRfYWRkX3JldHVybihpLCB2KSBhdG9taWM2NF9hZGRfcmV0KGksIHYpCi0KLS8qCi0gKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpIChhdG9taWNfaW5jX3JldHVybih2KSA9PSAwKQotI2RlZmluZSBhdG9taWM2NF9pbmNfYW5kX3Rlc3QodikgKGF0b21pYzY0X2luY19yZXR1cm4odikgPT0gMCkKLQotI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksIHYpIChhdG9taWNfc3ViX3JldChpLCB2KSA9PSAwKQotI2RlZmluZSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoaSwgdikgKGF0b21pYzY0X3N1Yl9yZXQoaSwgdikgPT0gMCkKLQotI2RlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KHYpIChhdG9taWNfc3ViX3JldCgxLCB2KSA9PSAwKQotI2RlZmluZSBhdG9taWM2NF9kZWNfYW5kX3Rlc3QodikgKGF0b21pYzY0X3N1Yl9yZXQoMSwgdikgPT0gMCkKLQotI2RlZmluZSBhdG9taWNfaW5jKHYpIGF0b21pY19hZGQoMSwgdikKLSNkZWZpbmUgYXRvbWljNjRfaW5jKHYpIGF0b21pYzY0X2FkZCgxLCB2KQotCi0jZGVmaW5lIGF0b21pY19kZWModikgYXRvbWljX3N1YigxLCB2KQotI2RlZmluZSBhdG9taWM2NF9kZWModikgYXRvbWljNjRfc3ViKDEsIHYpCi0KLSNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShpLCB2KSAoYXRvbWljX2FkZF9yZXQoaSwgdikgPCAwKQotI2RlZmluZSBhdG9taWM2NF9hZGRfbmVnYXRpdmUoaSwgdikgKGF0b21pYzY0X2FkZF9yZXQoaSwgdikgPCAwKQotCi0jZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQotI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKLQotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKLXsKLQlpbnQgYywgb2xkOwotCWMgPSBhdG9taWNfcmVhZCh2KTsKLQlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCi0JCQlicmVhazsKLQkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0JcmV0dXJuIGMgIT0gKHUpOwotfQotCi0jZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQotCi0jZGVmaW5lIGF0b21pYzY0X2NtcHhjaGcodiwgbywgbikgXAotCSgoX190eXBlb2ZfXygodiktPmNvdW50ZXIpKWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAobyksIChuKSkpCi0jZGVmaW5lIGF0b21pYzY0X3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCi0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgbG9uZyBhLCBsb25nIHUpCi17Ci0JbG9uZyBjLCBvbGQ7Ci0JYyA9IGF0b21pYzY0X3JlYWQodik7Ci0JZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQotCQkJYnJlYWs7Ci0JCW9sZCA9IGF0b21pYzY0X2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0JcmV0dXJuIGMgIT0gKHUpOwotfQotCi0jZGVmaW5lIGF0b21pYzY0X2luY19ub3RfemVybyh2KSBhdG9taWM2NF9hZGRfdW5sZXNzKCh2KSwgMSwgMCkKLQotLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgKi8KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQltZW1iYXJfc3RvcmVsb2FkX2xvYWRsb2FkKCk7Ci0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCW1lbWJhcl9zdG9yZWxvYWRfc3RvcmVzdG9yZSgpOwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJbWVtYmFyX3N0b3JlbG9hZF9sb2FkbG9hZCgpOwotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQltZW1iYXJfc3RvcmVsb2FkX3N0b3Jlc3RvcmUoKTsKLSNlbHNlCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZW5kaWYKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy5oPgotI2VuZGlmIC8qICEoX19BUkNIX1NQQVJDNjRfQVRPTUlDX18pICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2F0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9hdXhpby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hdXhpby5oCmluZGV4IGM0MTAwNDkuLjQ2YzkwNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXV4aW8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2F1eGlvLmgKQEAgLTEsMTAwICsxIEBACi0vKgotICogYXV4aW8uaDogIERlZmluaXRpb25zIGFuZCBjb2RlIGZvciB0aGUgQXV4aWxpYXJ5IEkvTyByZWdpc3RlcnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqCi0gKiBSZWZhY3RvcmluZyBmb3IgdW5pZmllZCBOQ1IvUENJTyBzdXBwb3J0IDIwMDIgRXJpYyBCcm93ZXIgKGVicm93ZXJAdXNhLm5ldCkKLSAqLwotI2lmbmRlZiBfU1BBUkM2NF9BVVhJT19ICi0jZGVmaW5lIF9TUEFSQzY0X0FVWElPX0gKLQotLyogQVVYSU8gaW1wbGVtZW50YXRpb25zOgotICogc2J1cy1iYXNlZCBOQ1I4OUMxMDUgIlNsYXZpbyIKLSAqCUxFRC9GbG9wcHkgKEFVWDEpIHJlZ2lzdGVyCi0gKglQb3dlciAoQVVYMikgcmVnaXN0ZXIKLSAqCi0gKiBlYnVzLWJhc2VkIGF1eGlvIG9uIFBDSU8gCi0gKglMRUQgQXV4aW8gUmVnaXN0ZXIKLSAqCVBvd2VyIEF1eGlvIFJlZ2lzdGVyCi0gKgotICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZnJvbSBOQ1IgX05DUjg5QzEwNSBDaGlwIFNwZWNpZmljYXRpb25fCi0gKiAKLSAqIFNMQVZJTyBBVVgxIEAgMHgxOTAwMDAwCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB8IChSKSB8IChSKSB8ICBEICB8IChSKSB8ICBFICB8ICBNICB8ICBUICB8ICBMICB8Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAoUikgLSBiaXQgNzo2LDQgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgYmUgbWFza2VkIGluIHMvdwotICogIEQgIC0gRmxvcHB5IERlbnNpdHkgU2Vuc2UgKDE9aGlnaCBkZW5zaXR5KSBSL08KLSAqICBFICAtIExpbmsgVGVzdCBFbmFibGUsIGRpcmVjdGx5IHJlZmxlY3RlZCBvbiBBVCZUIDcyMTMgTFRFIHBpbgotICogIE0gIC0gTW9uaXRvci9Nb3VzZSBNdXgsIGRpcmVjdGx5IHJlZmxlY3RlZCBvbiBNT05fTVNFX01VWCBwaW4KLSAqICBUICAtIFRlcm1pbmFsIENvdW50OiBzZW5kcyBUQyBwdWxzZSB0byA4MjA3NyBmbG9wcHkgY29udHJvbGxlcgotICogIEwgIC0gU3lzdGVtIExFRCBvbiBmcm9udCBwYW5lbCAoMD1vZmYsIDE9b24pIAotICovCi0jZGVmaW5lIEFVWElPX0FVWDFfTUFTSwkJMHhjMCAvKiBNYXNrIGJpdHMgCQkqLwotI2RlZmluZSBBVVhJT19BVVgxX0ZERU5TCTB4MjAgLyogRmxvcHB5IERlbnNpdHkgU2Vuc2UJKi8KLSNkZWZpbmUgQVVYSU9fQVVYMV9MVEUgCQkweDA4IC8qIExpbmsgVGVzdCBFbmFibGUgCSovCi0jZGVmaW5lIEFVWElPX0FVWDFfTU1VWAkJMHgwNCAvKiBNb25pdG9yL01vdXNlIE11eAkqLwotI2RlZmluZSBBVVhJT19BVVgxX0ZUQ05UCTB4MDIgLyogVGVybWluYWwgQ291bnQsIAkqLwotI2RlZmluZSBBVVhJT19BVVgxX0xFRAkJMHgwMSAvKiBTeXN0ZW0gTEVECQkqLwotCi0vKiBTTEFWSU8gQVVYMiBAIDB4MTkxMDAwMAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogfCAoUikgfCAoUikgfCAgRCAgfCAoUikgfCAoUikgfCAoUikgfCAgQyAgfCAgRiAgfAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogKFIpIC0gYml0cyA3OjYsNDoyIGFyZSByZXNlcnZlZCBhbmQgc2hvdWxkIGJlIG1hc2tlZCBpbiBzL3cKLSAqICBEICAtIFBvd2VyIEZhaWx1cmUgRGV0ZWN0ICgxPXBvd2VyIGZhaWwpCi0gKiAgQyAgLSBDbGVhciBQb3dlciBGYWlsdXJlIERldGVjdCBJbnQgKDE9Y2xlYXIpCi0gKiAgRiAgLSBQb3dlciBPZmYgKDE9cG93ZXIgb2ZmKQotICovCi0jZGVmaW5lIEFVWElPX0FVWDJfTUFTSwkJMHhkYyAvKiBNYXNrIEJpdHMJCSovCi0jZGVmaW5lIEFVWElPX0FVWDJfUEZBSUxERVQJMHgyMCAvKiBQb3dlciBGYWlsIERldGVjdAkqLwotI2RlZmluZSBBVVhJT19BVVgyX1BGQUlMQ0xSIAkweDAyIC8qIENsZWFyIFB3ciBGYWlsIERldCBJbnRyCSovCi0jZGVmaW5lIEFVWElPX0FVWDJfUFdSX09GRgkweDAxIC8qIFBvd2VyIE9mZgkJKi8KLQotLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZnJvbSBTdW4gTWljcm9zeXN0ZW1zIF9QQ0lPXyBwL24gODAyLTc4MzcKLSAqCi0gKiBQQ0lPIExFRCBBdXhpbyBAIDB4NzI2MDAwCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB8ICAgICAgICAgICAgIDMxOjEgVW51c2VkICAgICAgICAgICAgICAgICB8IExFRCB8Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBCaXRzIDMxOjEgdW51c2VkCi0gKiBMRUQgLSBTeXN0ZW0gTEVEIG9uIGZyb250IHBhbmVsICgwPW9mZiwgMT1vbikKLSAqLwotI2RlZmluZSBBVVhJT19QQ0lPX0xFRAkJMHgwMSAvKiBTeXN0ZW0gTEVEIAkJKi8gCi0KLS8qIFBDSU8gUG93ZXIgQXV4aW8gQCAweDcyNDAwMAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogfCAgICAgICAgICAgICAzMToyIFVudXNlZCAgICAgICAgICAgfCBDUE8gfCBTUE8gfAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQml0cyAzMToyIHVudXNlZAotICogQ1BPIC0gQ291cnRlc3kgUG93ZXIgT2ZmICgxPW9mZikKLSAqIFNQTyAtIFN5c3RlbSBQb3dlciBPZmYgICAoMT1vZmYpCi0gKi8KLSNkZWZpbmUgQVVYSU9fUENJT19DUFdSX09GRgkweDAyIC8qIENvdXJ0ZXN5IFBvd2VyIE9mZgkqLwotI2RlZmluZSBBVVhJT19QQ0lPX1NQV1JfT0ZGCTB4MDEgLyogU3lzdGVtIFBvd2VyIE9mZgkqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1leHRlcm4gdm9pZCBfX2lvbWVtICphdXhpb19yZWdpc3RlcjsKLQotI2RlZmluZSBBVVhJT19MVEVfT04JMQotI2RlZmluZSBBVVhJT19MVEVfT0ZGCTAKLQotLyogYXV4aW9fc2V0X2x0ZSAtIFNldCBMaW5rIFRlc3QgRW5hYmxlIChUUEUgTGluayBEZXRlY3QpCi0gKgotICogb24gLSBBVVhJT19MVEVfT04gb3IgQVVYSU9fTFRFX09GRgotICovCi1leHRlcm4gdm9pZCBhdXhpb19zZXRfbHRlKGludCBvbik7Ci0KLSNkZWZpbmUgQVVYSU9fTEVEX09OCTEKLSNkZWZpbmUgQVVYSU9fTEVEX09GRgkwCi0KLS8qIGF1eGlvX3NldF9sZWQgLSBTZXQgc3lzdGVtIGZyb250IHBhbmVsIExFRCAKLSAqCi0gKiBvbiAtIEFVWElPX0xFRF9PTiBvciBBVVhJT19MRURfT0ZGCi0gKi8KLWV4dGVybiB2b2lkIGF1eGlvX3NldF9sZWQoaW50IG9uKTsKLQotI2VuZGlmIC8qIGlmbmRlZiBfX0FTU0VNQkxZX18gKi8gCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X0FVWElPX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2F1eGlvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2JhY2tvZmYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYmFja29mZi5oCmluZGV4IGZhMWZkZjYuLjhlZTI2ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYmFja29mZi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYmFja29mZi5oCkBAIC0xLDMxICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X0JBQ0tPRkZfSAotI2RlZmluZSBfU1BBUkM2NF9CQUNLT0ZGX0gKLQotI2RlZmluZSBCQUNLT0ZGX0xJTUlUCSg0ICogMTAyNCkKLQotI2lmZGVmIENPTkZJR19TTVAKLQotI2RlZmluZSBCQUNLT0ZGX1NFVFVQKHJlZykJXAotCW1vdgkxLCByZWcKLQotI2RlZmluZSBCQUNLT0ZGX1NQSU4ocmVnLCB0bXAsIGxhYmVsKQlcCi0JbW92CXJlZywgdG1wOyBcCi04ODoJYnJueixwdAl0bXAsIDg4YjsgXAotCSBzdWIJdG1wLCAxLCB0bXA7IFwKLQlzZXQJQkFDS09GRl9MSU1JVCwgdG1wOyBcCi0JY21wCXJlZywgdG1wOyBcCi0JYmcscG4JJXhjYywgbGFiZWw7IFwKLQkgbm9wOyBcCi0JYmEscHQJJXhjYywgbGFiZWw7IFwKLQkgc2xseAlyZWcsIDEsIHJlZzsKLQotI2Vsc2UKLQotI2RlZmluZSBCQUNLT0ZGX1NFVFVQKHJlZykKLSNkZWZpbmUgQkFDS09GRl9TUElOKHJlZywgdG1wLCBsYWJlbCkgXAotCWJhLHB0CSV4Y2MsIGxhYmVsOyBcCi0JIG5vcDsKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfU1BBUkM2NF9CQUNLT0ZGX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvYmFja29mZi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9iYmMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYmJjLmgKaW5kZXggNDIzYTg1OC4uMDZlOGI2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9iYmMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JiYy5oCkBAIC0xLDIyNSArMSBAQAotLyoKLSAqIGJiYy5oOiBEZWZpbmVzIGZvciBCb290QnVzIENvbnRyb2xsZXIgZm91bmQgb24gVWx0cmFTUEFSQy1JSUkKLSAqICAgICAgICBzeXN0ZW1zLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCi0gKi8KLQotI2lmbmRlZiBfU1BBUkM2NF9CQkNfSAotI2RlZmluZSBfU1BBUkM2NF9CQkNfSAotCi0vKiBSZWdpc3RlciBzaXplcyBhcmUgaW5kaWNhdGVkIGJ5ICJCIiAoQnl0ZSwgMS1ieXRlKSwKLSAqICJIIiAoSGFsZi13b3JkLCAyIGJ5dGVzKSwgIlciIChXb3JkLCA0IGJ5dGVzKSBvcgotICogIlEiIChRdWFkLCA4IGJ5dGVzKSBpbnNpZGUgYnJhY2tldHMuCi0gKi8KLQotI2RlZmluZSBCQkNfQUlECQkweDAwCS8qIFtCXSBBZ2VudCBJRAkJCSovCi0jZGVmaW5lIEJCQ19ERVZQCTB4MDEJLyogW0JdIERldmljZSBQcmVzZW50CQkqLwotI2RlZmluZSBCQkNfQVJCCQkweDAyCS8qIFtCXSBBcmJpdHJhdGlvbgkJKi8KLSNkZWZpbmUgQkJDX1FVSUVTQ0UJMHgwMwkvKiBbQl0gUXVpZXNjZQkJCSovCi0jZGVmaW5lIEJCQ19XREFDVElPTgkweDA0CS8qIFtCXSBXYXRjaGRvZyBBY3Rpb24JCSovCi0jZGVmaW5lIEJCQ19TUEcJCTB4MDYJLyogW0JdIFNvZnQgUE9SIEdlbgkJKi8KLSNkZWZpbmUgQkJDX1NYRwkJMHgwNwkvKiBbQl0gU29mdCBYSVIgR2VuCQkqLwotI2RlZmluZSBCQkNfUFNSQwkweDA4CS8qIFtXXSBQT1IgU291cmNlCQkqLwotI2RlZmluZSBCQkNfWFNSQwkweDBjCS8qIFtCXSBYSVIgU291cmNlCQkqLwotI2RlZmluZSBCQkNfQ1NDCQkweDBkCS8qIFtCXSBDbG9jayBTeW50aGVzaXplcnMgQ29udHJvbCovCi0jZGVmaW5lIEJCQ19FU19DVFJMCTB4MGUJLyogW0hdIEVuZXJneSBTdGFyIENvbnRyb2wJKi8KLSNkZWZpbmUgQkJDX0VTX0FDVAkweDEwCS8qIFtXXSBFKiBBc3NlcnQgQ2hhbmdlIFRpbWUJKi8KLSNkZWZpbmUgQkJDX0VTX0RBQ1QJMHgxNAkvKiBbQl0gRSogRGUtQXNzZXJ0IENoYW5nZSBUaW1lCSovCi0jZGVmaW5lIEJCQ19FU19EQUJUCTB4MTUJLyogW0JdIEUqIERlLUFzc2VydCBCeXBhc3MgVGltZQkqLwotI2RlZmluZSBCQkNfRVNfQUJUCTB4MTYJLyogW0hdIEUqIEFzc2VydCBCeXBhc3MgVGltZQkqLwotI2RlZmluZSBCQkNfRVNfUFNUCTB4MTgJLyogW1ddIEUqIFBMTCBTZXR0bGUgVGltZQkqLwotI2RlZmluZSBCQkNfRVNfRlNMCTB4MWMJLyogW1ddIEUqIEZyZXF1ZW5jeSBTd2l0Y2ggTGF0ZW5jeSovCi0jZGVmaW5lIEJCQ19FQlVTVAkweDIwCS8qIFtRXSBFQlVTIFRpbWluZwkJKi8KLSNkZWZpbmUgQkJDX0pUQUdfQ01ECTB4MjgJLyogW1ddIEpUQUcrIENvbW1hbmQJCSovCi0jZGVmaW5lIEJCQ19KVEFHX0NUUkwJMHgyYwkvKiBbQl0gSlRBRysgQ29udHJvbAkJKi8KLSNkZWZpbmUgQkJDX0kyQ19TRUwJMHgyZAkvKiBbQl0gSTJDIFNlbGVjdGlvbgkJKi8KLSNkZWZpbmUgQkJDX0kyQ18wX1MxCTB4MmUJLyogW0JdIEkyQyBjdHJsci0wIHJlZyBTMQkqLwotI2RlZmluZSBCQkNfSTJDXzBfUzAJMHgyZgkvKiBbQl0gSTJDIGN0cmxyLTAgcmVncyBTMCxTMCcsUzIsUzMqLwotI2RlZmluZSBCQkNfSTJDXzFfUzEJMHgzMAkvKiBbQl0gSTJDIGN0cmxyLTEgcmVnIFMxCSovCi0jZGVmaW5lIEJCQ19JMkNfMV9TMAkweDMxCS8qIFtCXSBJMkMgY3RybHItMSByZWdzIFMwLFMwJyxTMixTMyovCi0jZGVmaW5lIEJCQ19LQkRfQkVFUAkweDMyCS8qIFtCXSBLZXlib2FyZCBCZWVwCQkqLwotI2RlZmluZSBCQkNfS0JEX0JDTlQJMHgzNAkvKiBbV10gS2V5Ym9hcmQgQmVlcCBDb3VudGVyCSovCi0KLSNkZWZpbmUgQkJDX1JFR1NfU0laRQkweDQwCi0KLS8qIFRoZXJlIGlzIGEgMksgc2NyYXRjaCByYW0gYXJlYSBhdCBvZmZzZXQgMHg4MDAwMCBidXQgSSBkb3VidAotICogd2Ugd2lsbCB1c2UgaXQgZm9yIGFueXRoaW5nLgotICovCi0KLS8qIEFnZW50IElEIHJlZ2lzdGVyLiAgVGhpcyByZWdpc3RlciBzaG93cyB0aGUgU2FmYXJpIEFnZW50IElECi0gKiBmb3IgdGhlIHByb2Nlc3NvcnMuICBUaGUgdmFsdWUgcmV0dXJuZWQgZGVwZW5kcyB1cG9uIHdoaWNoCi0gKiBjcHUgaXMgcmVhZGluZyB0aGUgcmVnaXN0ZXIuCi0gKi8KLSNkZWZpbmUgQkJDX0FJRF9JRAkweDA3CS8qIFNhZmFyaSBJRAkJKi8KLSNkZWZpbmUgQkJDX0FJRF9SRVNWCTB4ZjgJLyogUmVzZXJ2ZWQJCSovCi0KLS8qIERldmljZSBQcmVzZW50IHJlZ2lzdGVyLiAgT25lIGNhbiBkZXRlcm1pbmUgd2hpY2ggY3B1cyBhcmUgYWN0dWFsbHkKLSAqIHByZXNlbnQgaW4gdGhlIG1hY2hpbmUgYnkgaW50ZXJyb2dhdGluZyB0aGlzIHJlZ2lzdGVyLgotICovCi0jZGVmaW5lIEJCQ19ERVZQX0NQVTAJMHgwMQkvKiBQcm9jZXNzb3IgMCBwcmVzZW50CSovCi0jZGVmaW5lIEJCQ19ERVZQX0NQVTEJMHgwMgkvKiBQcm9jZXNzb3IgMSBwcmVzZW50CSovCi0jZGVmaW5lIEJCQ19ERVZQX0NQVTIJMHgwNAkvKiBQcm9jZXNzb3IgMiBwcmVzZW50CSovCi0jZGVmaW5lIEJCQ19ERVZQX0NQVTMJMHgwOAkvKiBQcm9jZXNzb3IgMyBwcmVzZW50CSovCi0jZGVmaW5lIEJCQ19ERVZQX1JFU1YJMHhmMAkvKiBSZXNlcnZlZAkJKi8KLQotLyogQXJiaXRyYXRpb24gcmVnaXN0ZXIuICBUaGlzIHJlZ2lzdGVyIGlzIHVzZWQgdG8gYmxvY2sgYWNjZXNzIHRvCi0gKiB0aGUgQkJDIGZyb20gYSBwYXJ0aWN1bGFyIGNwdS4KLSAqLwotI2RlZmluZSBCQkNfQVJCX0NQVTAJMHgwMQkvKiBFbmFibGUgY3B1IDAgQkJDIGFyYml0cmF0cmlvbiAqLwotI2RlZmluZSBCQkNfQVJCX0NQVTEJMHgwMgkvKiBFbmFibGUgY3B1IDEgQkJDIGFyYml0cmF0cmlvbiAqLwotI2RlZmluZSBCQkNfQVJCX0NQVTIJMHgwNAkvKiBFbmFibGUgY3B1IDIgQkJDIGFyYml0cmF0cmlvbiAqLwotI2RlZmluZSBCQkNfQVJCX0NQVTMJMHgwOAkvKiBFbmFibGUgY3B1IDMgQkJDIGFyYml0cmF0cmlvbiAqLwotI2RlZmluZSBCQkNfQVJCX1JFU1YJMHhmMAkvKiBSZXNlcnZlZAkJCSAqLwotCi0vKiBRdWllc2NlIHJlZ2lzdGVyLiAgQnVzIGFuZCBCQkMgc2VnbWVudHMgZm9yIGNwdXMgY2FuIGJlIGRpc2FibGVkCi0gKiB3aXRoIHRoaXMgcmVnaXN0ZXIsIGllLiBmb3IgaG90IHBsdWdnaW5nLgotICovCi0jZGVmaW5lIEJCQ19RVUlFU0NFX1MwMgkweDAxCS8qIFF1aWVzY2UgU2FmYXJpIHNlZ21lbnQgZm9yIGNwdSAwIGFuZCAyICovCi0jZGVmaW5lIEJCQ19RVUlFU0NFX1MxMwkweDAyCS8qIFF1aWVzY2UgU2FmYXJpIHNlZ21lbnQgZm9yIGNwdSAxIGFuZCAzICovCi0jZGVmaW5lIEJCQ19RVUlFU0NFX0IwMgkweDA0CS8qIFF1aWVzY2UgQkJDIHNlZ21lbnQgZm9yIGNwdSAwIGFuZCAyICAgICovCi0jZGVmaW5lIEJCQ19RVUlFU0NFX0IxMwkweDA4CS8qIFF1aWVzY2UgQkJDIHNlZ21lbnQgZm9yIGNwdSAxIGFuZCAzICAgICovCi0jZGVmaW5lIEJCQ19RVUlFU0NFX0ZEMCAweDEwCS8qIERpc2FibGUgRmF0YWxfRXJyb3JbMF0gcmVwb3J0aW5nCSAgKi8KLSNkZWZpbmUgQkJDX1FVSUVTQ0VfRkQxIDB4MjAJLyogRGlzYWJsZSBGYXRhbF9FcnJvclsxXSByZXBvcnRpbmcJICAqLwotI2RlZmluZSBCQkNfUVVJRVNDRV9GRDIgMHg0MAkvKiBEaXNhYmxlIEZhdGFsX0Vycm9yWzJdIHJlcG9ydGluZwkgICovCi0jZGVmaW5lIEJCQ19RVUlFU0NFX0ZEMyAweDgwCS8qIERpc2FibGUgRmF0YWxfRXJyb3JbM10gcmVwb3J0aW5nCSAgKi8KLQotLyogV2F0Y2hkb2cgQWN0aW9uIHJlZ2lzdGVyLiAgV2hlbiB0aGUgd2F0Y2hkb2cgZGV2aWNlIHRpbWVyIGV4cGlyZXMKLSAqIGEgbGluZSBpcyBlbmFibGVkIHRvIHRoZSBCQkMuICBUaGUgYWN0aW9uIEJCQyB0YWtlcyB3aGVuIHRoaXMgbGluZQotICogaXMgYXNzZXJ0ZWQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgdGhpcyByZWdpc2VyLgotICovCi0jZGVmaW5lIEJCQ19XREFDVElPTl9SU1QgIDB4MDEJLyogV2hlbiBzZXQsIHdhdGNoZG9nIGNhdXNlcyBzeXN0ZW0gcmVzZXQuCi0JCQkJICogV2hlbiBjbGVhciwgQkJDIGlnbm9yZXMgd2F0Y2hkb2cgc2lnbmFsLgotCQkJCSAqLwotI2RlZmluZSBCQkNfV0RBQ1RJT05fUkVTViAweGZlCS8qIFJlc2VydmVkICovCi0KLS8qIFNvZnRfUE9SX0dFTiByZWdpc3Rlci4gIFRoZSBQT1IgKFBvd2VyIE9uIFJlc2V0KSBzaWduYWwgbWF5IGJlIGFzc2VydGVkCi0gKiBmb3Igc3BlY2lmaWMgcHJvY2Vzc29ycyBvciBhbGwgcHJvY2Vzc29ycyB2aWEgdGhpcyByZWdpc3Rlci4KLSAqLwotI2RlZmluZSBCQkNfU1BHX0NQVTAJMHgwMSAvKiBBc3NlcnQgUE9SIGZvciBwcm9jZXNzb3IgMAkqLwotI2RlZmluZSBCQkNfU1BHX0NQVTEJMHgwMiAvKiBBc3NlcnQgUE9SIGZvciBwcm9jZXNzb3IgMQkqLwotI2RlZmluZSBCQkNfU1BHX0NQVTIJMHgwNCAvKiBBc3NlcnQgUE9SIGZvciBwcm9jZXNzb3IgMgkqLwotI2RlZmluZSBCQkNfU1BHX0NQVTMJMHgwOCAvKiBBc3NlcnQgUE9SIGZvciBwcm9jZXNzb3IgMwkqLwotI2RlZmluZSBCQkNfU1BHX0NQVUFMTAkweDEwIC8qIFJlc2V0IGFsbCBwcm9jZXNzb3JzIGFuZCByZXNldAotCQkJICAgICAgKiB0aGUgZW50aXJlIHN5c3RlbS4KLQkJCSAgICAgICovCi0jZGVmaW5lIEJCQ19TUEdfUkVTVgkweGUwIC8qIFJlc2VydmVkCQkJKi8KLQotLyogU29mdF9YSVJfR0VOIHJlZ2lzdGVyLiAgVGhlIFhJUiAoZVh0ZXJuYWxseSBJbml0aWF0ZWQgUmVzZXQpIHNpZ25hbAotICogbWF5IGJlIGFzc2VydGVkIHRvIHNwZWNpZmljIHByb2Nlc3NvcnMgdmlhIHRoaXMgcmVnaXN0ZXIuCi0gKi8KLSNkZWZpbmUgQkJDX1NYR19DUFUwCTB4MDEgLyogQXNzZXJ0IFhJUiBmb3IgcHJvY2Vzc29yIDAJKi8KLSNkZWZpbmUgQkJDX1NYR19DUFUxCTB4MDIgLyogQXNzZXJ0IFhJUiBmb3IgcHJvY2Vzc29yIDEJKi8KLSNkZWZpbmUgQkJDX1NYR19DUFUyCTB4MDQgLyogQXNzZXJ0IFhJUiBmb3IgcHJvY2Vzc29yIDIJKi8KLSNkZWZpbmUgQkJDX1NYR19DUFUzCTB4MDggLyogQXNzZXJ0IFhJUiBmb3IgcHJvY2Vzc29yIDMJKi8KLSNkZWZpbmUgQkJDX1NYR19SRVNWCTB4ZjAgLyogUmVzZXJ2ZWQJCQkqLwotCi0vKiBQT1IgU291cmNlIHJlZ2lzdGVyLiAgT25lIG1heSBpZGVudGlmeSB0aGUgY2F1c2Ugb2YgdGhlIG1vc3QgcmVjZW50Ci0gKiByZXNldCBieSByZWFkaW5nIHRoaXMgcmVnaXN0ZXIuCi0gKi8KLSNkZWZpbmUgQkJDX1BTUkNfU1BHMAkweDAwMDEgLyogQ1BVIDAgcmVzZXQgdmlhIEJCQ19TUEcgcmVnaXN0ZXIJKi8KLSNkZWZpbmUgQkJDX1BTUkNfU1BHMQkweDAwMDIgLyogQ1BVIDEgcmVzZXQgdmlhIEJCQ19TUEcgcmVnaXN0ZXIJKi8KLSNkZWZpbmUgQkJDX1BTUkNfU1BHMgkweDAwMDQgLyogQ1BVIDIgcmVzZXQgdmlhIEJCQ19TUEcgcmVnaXN0ZXIJKi8KLSNkZWZpbmUgQkJDX1BTUkNfU1BHMwkweDAwMDggLyogQ1BVIDMgcmVzZXQgdmlhIEJCQ19TUEcgcmVnaXN0ZXIJKi8KLSNkZWZpbmUgQkJDX1BTUkNfU1BHU1lTCTB4MDAxMCAvKiBTeXN0ZW0gcmVzZXQgdmlhIEJCQ19TUEcgcmVnaXN0ZXIJKi8KLSNkZWZpbmUgQkJDX1BTUkNfSlRBRwkweDAwMjAgLyogU3lzdGVtIHJlc2V0IHZpYSBKVEFHKwkJKi8KLSNkZWZpbmUgQkJDX1BTUkNfQlVUVE9OCTB4MDA0MCAvKiBTeXN0ZW0gcmVzZXQgdmlhIHB1c2gtYnV0dG9uIGRvbmdsZQkqLwotI2RlZmluZSBCQkNfUFNSQ19QV1JVUAkweDAwODAgLyogU3lzdGVtIHJlc2V0IHZpYSBwb3dlci11cAkJKi8KLSNkZWZpbmUgQkJDX1BTUkNfRkUwCTB4MDEwMCAvKiBDUFUgMCByZXBvcnRlZCBGYXRhbF9FcnJvcgkJKi8KLSNkZWZpbmUgQkJDX1BTUkNfRkUxCTB4MDIwMCAvKiBDUFUgMSByZXBvcnRlZCBGYXRhbF9FcnJvcgkJKi8KLSNkZWZpbmUgQkJDX1BTUkNfRkUyCTB4MDQwMCAvKiBDUFUgMiByZXBvcnRlZCBGYXRhbF9FcnJvcgkJKi8KLSNkZWZpbmUgQkJDX1BTUkNfRkUzCTB4MDgwMCAvKiBDUFUgMyByZXBvcnRlZCBGYXRhbF9FcnJvcgkJKi8KLSNkZWZpbmUgQkJDX1BTUkNfRkU0CTB4MTAwMCAvKiBTY2hpem8gcmVwb3J0ZWQgRmF0YWxfRXJyb3IJCSovCi0jZGVmaW5lIEJCQ19QU1JDX0ZFNQkweDIwMDAgLyogU2FmYXJpIGRldmljZSA1IHJlcG9ydGVkIEZhdGFsX0Vycm9yCSovCi0jZGVmaW5lIEJCQ19QU1JDX0ZFNgkweDQwMDAgLyogQ1BNUyByZXBvcnRlZCBGYXRhbF9FcnJvcgkJKi8KLSNkZWZpbmUgQkJDX1BTUkNfU1lOVEgJMHg4MDAwIC8qIFN5c3RlbSByZXNldCB3aGVuIG9uLWJvYXJkIGNsb2NrIHN5bnRoZXNpemVycwotCQkJCSogd2VyZSB1cGRhdGVkLgotCQkJCSovCi0jZGVmaW5lIEJCQ19QU1JDX1dEVCAgIDB4MTAwMDAgLyogU3lzdGVtIHJlc2V0IHZpYSBTdXBlciBJL08gd2F0Y2hkb2cJKi8KLSNkZWZpbmUgQkJDX1BTUkNfUlNDICAgMHgyMDAwMCAvKiBTeXN0ZW0gcmVzZXQgdmlhIFJTQyByZW1vdGUgbW9uaXRvcmluZwotCQkJCSogZGV2aWNlCi0JCQkJKi8KLQotLyogWElSIFNvdXJjZSByZWdpc3Rlci4gIFRoZSBzb3VyY2Ugb2YgYW4gWElSIGV2ZW50IHNlbnQgdG8gYSBwcm9jZXNzb3IgbWF5Ci0gKiBiZSBkZXRlcm1pbmVkIHZpYSB0aGlzIHJlZ2lzdGVyLgotICovCi0jZGVmaW5lIEJCQ19YU1JDX1NYRzAJMHgwMQkvKiBDUFUgMCByZWNlaXZlZCBYSVIgdmlhIFNvZnRfWElSX0dFTiByZWcgKi8KLSNkZWZpbmUgQkJDX1hTUkNfU1hHMQkweDAyCS8qIENQVSAxIHJlY2VpdmVkIFhJUiB2aWEgU29mdF9YSVJfR0VOIHJlZyAqLwotI2RlZmluZSBCQkNfWFNSQ19TWEcyCTB4MDQJLyogQ1BVIDIgcmVjZWl2ZWQgWElSIHZpYSBTb2Z0X1hJUl9HRU4gcmVnICovCi0jZGVmaW5lIEJCQ19YU1JDX1NYRzMJMHgwOAkvKiBDUFUgMyByZWNlaXZlZCBYSVIgdmlhIFNvZnRfWElSX0dFTiByZWcgKi8KLSNkZWZpbmUgQkJDX1hTUkNfSlRBRwkweDEwCS8qIEFsbCBDUFVzIHJlY2VpdmVkIFhJUiB2aWEgSlRBRysgICAgICAgICAqLwotI2RlZmluZSBCQkNfWFNSQ19XX09SX0IJMHgyMAkvKiBBbGwgQ1BVcyByZWNlaXZlZCBYSVIgZWl0aGVyIGJlY2F1c2U6Ci0JCQkJICogYSkgU3VwZXIgSS9PIHdhdGNoZG9nIGZpcmVkLCBvcgotCQkJCSAqIGIpIFhJUiBwdXNoIGJ1dHRvbiB3YXMgYWN0aXZhdGVkCi0JCQkJICovCi0jZGVmaW5lIEJCQ19YU1JDX1JFU1YJMHhjMAkvKiBSZXNlcnZlZAkJCQkgICAqLwotCi0vKiBDbG9jayBTeW50aGVzaXplcnMgQ29udHJvbCByZWdpc3Rlci4gIFRoaXMgcmVnaXN0ZXIgcHJvdmlkZXMgdGhlIGJpZy1iYW5nCi0gKiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgdG8gdGhlIHR3byBjbG9jayBzeW50aGVzaXplcnMgb2YgdGhlIG1hY2hpbmUuCi0gKi8KLSNkZWZpbmUgQkJDX0NTQ19TTE9BRAkweDAxCS8qIERpcmVjdGx5IGNvbm5lY3RlZCB0byBTX0xPQUQgcGlucwkqLwotI2RlZmluZSBCQkNfQ1NDX1NEQVRBCTB4MDIJLyogRGlyZWN0bHkgY29ubmVjdGVkIHRvIFNfREFUQSBwaW5zCSovCi0jZGVmaW5lIEJCQ19DU0NfU0NMT0NLCTB4MDQJLyogRGlyZWN0bHkgY29ubmVjdGVkIHRvIFNfQ0xPQ0sgcGlucwkqLwotI2RlZmluZSBCQkNfQ1NDX1JFU1YJMHg3OAkvKiBSZXNlcnZlZAkJCQkqLwotI2RlZmluZSBCQkNfQ1NDX1JTVAkweDgwCS8qIEdlbmVyYXRlIHN5c3RlbSByZXNldCB3aGVuIFNfTE9BRD09MQkqLwotCi0vKiBFbmVyZ3kgU3RhciBDb250cm9sIHJlZ2lzdGVyLiAgVGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZQotICogY2xvY2sgZnJlcXVlbmN5IGNoYW5nZSB0cmlnZ2VyIHRvIHRoZSBtYWluIHN5c3RlbSBkZXZpY2VzIChTY2hpem8gYW5kCi0gKiB0aGUgcHJvY2Vzc29ycykuICBUaGUgdHJhbnNpdGlvbiBvY2N1cnMgd2hlbiBiaXRzIGluIHRoaXMgcmVnaXN0ZXIKLSAqIGdvIGZyb20gMCB0byAxLCBvbmx5IG9uZSBiaXQgbXVzdCBiZSBzZXQgYXQgb25jZSBlbHNlIG5vIGFjdGlvbgotICogb2NjdXJzLiAgQmFzaWNhbGx5IHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaXM6Ci0gKiBhKSBDaG9vc2UgbmV3IGZyZXF1ZW5jeTogZnVsbCwgMS8yIG9yIDEvMzIKLSAqIGIpIFByb2dyYW0gdGhpcyBkZXNpcmVkIGZyZXF1ZW5jeSBpbnRvIHRoZSBjcHVzIGFuZCBTY2hpem8uCi0gKiBjKSBTZXQgdGhlIHNhbWUgdmFsdWUgaW4gdGhpcyByZWdpc3Rlci4KLSAqIGQpIDE2IHN5c3RlbSBjbG9ja3MgbGF0ZXIsIGNsZWFyIHRoaXMgcmVnaXN0ZXIuCi0gKi8KLSNkZWZpbmUgQkJDX0VTX0NUUkxfMV8xCQkweDAxCS8qIEZ1bGwgZnJlcXVlbmN5CSovCi0jZGVmaW5lIEJCQ19FU19DVFJMXzFfMgkJMHgwMgkvKiAxLzIgZnJlcXVlbmN5CSovCi0jZGVmaW5lIEJCQ19FU19DVFJMXzFfMzIJMHgyMAkvKiAxLzMyIGZyZXF1ZW5jeQkqLwotI2RlZmluZSBCQkNfRVNfUkVTVgkJMHhkYwkvKiBSZXNlcnZlZAkJKi8KLQotLyogRW5lcmd5IFN0YXIgQXNzZXJ0IENoYW5nZSBUaW1lIHJlZ2lzdGVyLiAgVGhpcyBkZXRlcm1pbmVzIHRoZSBudW1iZXIKLSAqIG9mIEJCQyBjbG9jayBjeWNsZXMgKHdoaWNoIGlzIGhhbGYgdGhlIHN5c3RlbSBmcmVxdWVuY3kpIGJldHdlZW4KLSAqIHRoZSBkZXRlY3Rpb24gb2YgRlJFRVpFX0FDSyBiZWluZyBhc3NlcnRlZCBhbmQgdGhlIGFzc2VydGlvbiBvZgotICogdGhlIENMS19DSEFOR0VfTFsyOjBdIHNpZ25hbHMuCi0gKi8KLSNkZWZpbmUgQkJDX0VTX0FDVF9WQUwJMHhmZgotCi0vKiBFbmVyZ3kgU3RhciBBc3NlcnQgQnlwYXNzIFRpbWUgcmVnaXN0ZXIuICBUaGlzIGRldGVybWluZXMgdGhlIG51bWJlcgotICogb2YgQkJDIGNsb2NrIGN5Y2xlcyAod2hpY2ggaXMgaGFsZiB0aGUgc3lzdGVtIGZyZXF1ZW5jeSkgYmV0d2VlbgotICogdGhlIGFzc2VydGlvbiBvZiB0aGUgQ0xLX0NIQU5HRV9MWzI6MF0gc2lnbmFscyBhbmQgdGhlIGFzc2VydGlvbiBvZgotICogdGhlIEVTVEFSX1BMTF9CWVBBU1Mgc2lnbmFsLgotICovCi0jZGVmaW5lIEJCQ19FU19BQlRfVkFMCTB4ZmZmZgotCi0vKiBFbmVyZ3kgU3RhciBQTEwgU2V0dGxlIFRpbWUgcmVnaXN0ZXIuICBUaGlzIGRldGVybWluZXMgdGhlIG51bWJlciBvZgotICogQkJDIGNsb2NrIGN5Y2xlcyAod2hpY2ggaXMgaGFsZiB0aGUgc3lzdGVtIGZyZXF1ZW5jeSkgYmV0d2VlbiB0aGUKLSAqIGRlLWFzc2VydGlvbiBvZiBDTEtfQ0hBTkdFX0xbMjowXSBhbmQgdGhlIGRlLWFzc2VydGlvbiBvZiB0aGUgRlJFRVpFX0wKLSAqIHNpZ25hbC4KLSAqLwotI2RlZmluZSBCQkNfRVNfUFNUX1ZBTAkweGZmZmZmZmZmCi0KLS8qIEVuZXJneSBTdGFyIEZyZXF1ZW5jeSBTd2l0Y2ggTGF0ZW5jeSByZWdpc3Rlci4gIFRoaXMgaXMgdGhlIG51bWJlciBvZgotICogQkJDIGNsb2NrcyBiZXR3ZWVuIHRoZSBkZS1hc3NlcnRpb24gb2YgQ0xLX0NIQU5HRV9MWzI6MF0gYW5kIHRoZSBmaXJzdAotICogZWRnZSBvZiB0aGUgU2FmYXJpIGNsb2NrIGF0IHRoZSBuZXcgZnJlcXVlbmN5LgotICovCi0jZGVmaW5lIEJCQ19FU19GU0xfVkFMCTB4ZmZmZmZmZmYKLQotLyogS2V5Ym9hcmQgQmVlcCBjb250cm9sIHJlZ2lzdGVyLiAgVGhpcyBpcyBhIHNpbXBsZSBlbmFibGVyIGZvciB0aGUgYXVkaW8KLSAqIGJlZXAgc291bmQuCi0gKi8KLSNkZWZpbmUgQkJDX0tCRF9CRUVQX0VOQUJMRQkweDAxIC8qIEVuYWJsZSBiZWVwCSovCi0jZGVmaW5lIEJCQ19LQkRfQkVFUF9SRVNWCTB4ZmUgLyogUmVzZXJ2ZWQJKi8KLQotLyogS2V5Ym9hcmQgQmVlcCBDb3VudGVyIHJlZ2lzdGVyLiAgVGhlcmUgaXMgYSBmcmVlLXJ1bm5pbmcgY291bnRlciBpbnNpZGUKLSAqIHRoZSBCQkMgd2hpY2ggcnVucyBhdCBoYWxmIHRoZSBzeXN0ZW0gY2xvY2suICBUaGUgYml0IHNldCBpbiB0aGlzIHJlZ2lzdGVyCi0gKiBkZXRlcm1pbmVzIHdoZW4gdGhlIGF1ZGlvIHNvdW5kIGlzIGdlbmVyYXRlZC4gIFNvIGZvciBleGFtcGxlIGlmIGJpdAotICogMTAgaXMgc2V0LCB0aGUgYXVkaW8gYmVlcCB3aWxsIG9zY2lsbGF0ZSBhdCAxLygyKioxMikuICBUaGUga2V5Ym9hcmQgYmVlcAotICogZ2VuZXJhdG9yIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBhIGRpZmZlcmVudCBiaXQgdG8gdXNlIGlmIHRoZSBzeXN0ZW0gY2xvY2sKLSAqIGlzIGNoYW5nZWQgdmlhIEVuZXJneSBTdGFyLgotICovCi0jZGVmaW5lIEJCQ19LQkRfQkNOVF9CSVRTCTB4MDAwN2ZjMDAKLSNkZWZpbmUgQkJDX0tCQ19CQ05UX1JFU1YJMHhmZmY4MDNmZgotCi0jZW5kaWYgLyogX1NQQVJDNjRfQkJDX0ggKi8KLQorI2luY2x1ZGUgPGFzbS1zcGFyYy9iYmMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JpdG9wcy5oCmluZGV4IGJiODdiODAuLjIwNDQwNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9iaXRvcHMuaApAQCAtMSwxMDcgKzEgQEAKLS8qCi0gKiBiaXRvcHMuaDogQml0IHN0cmluZyBvcGVyYXRpb25zIG9uIHRoZSBWOS4KLSAqCi0gKiBDb3B5cmlnaHQgMTk5NiwgMTk5NyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2lmbmRlZiBfU1BBUkM2NF9CSVRPUFNfSAotI2RlZmluZSBfU1BBUkM2NF9CSVRPUFNfSAotCi0jaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAotI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKLSNlbmRpZgotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLWV4dGVybiBpbnQgdGVzdF9hbmRfc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKTsKLWV4dGVybiBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOwotZXh0ZXJuIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOwotZXh0ZXJuIHZvaWQgc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKTsKLWV4dGVybiB2b2lkIGNsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKTsKLWV4dGVybiB2b2lkIGNoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQltZW1iYXJfc3RvcmVsb2FkX2xvYWRsb2FkKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQltZW1iYXJfc3RvcmVsb2FkX3N0b3Jlc3RvcmUoKQotI2Vsc2UKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCi0jZW5kaWYKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnouaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvX19mZnMuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL19fZmxzLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmZzLmg+Ci0KLS8qCi0gKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgotICogb2YgYml0cyBzZXQpIG9mIGEgTi1iaXQgd29yZAotICovCi0KLSNpZmRlZiBVTFRSQV9IQVNfUE9QVUxBVElPTl9DT1VOVAotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBod2VpZ2h0NjQodW5zaWduZWQgbG9uZyB3KQotewotCXVuc2lnbmVkIGludCByZXM7Ci0KLQlfX2FzbV9fICgicG9wYyAlMSwlMCIgOiAiPXIiIChyZXMpIDogInIiICh3KSk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KQotewotCXVuc2lnbmVkIGludCByZXM7Ci0KLQlfX2FzbV9fICgicG9wYyAlMSwlMCIgOiAiPXIiIChyZXMpIDogInIiICh3ICYgMHhmZmZmZmZmZikpOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh3ZWlnaHQxNih1bnNpZ25lZCBpbnQgdykKLXsKLQl1bnNpZ25lZCBpbnQgcmVzOwotCi0JX19hc21fXyAoInBvcGMgJTEsJTAiIDogIj1yIiAocmVzKSA6ICJyIiAodyAmIDB4ZmZmZikpOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh3ZWlnaHQ4KHVuc2lnbmVkIGludCB3KQotewotCXVuc2lnbmVkIGludCByZXM7Ci0KLQlfX2FzbV9fICgicG9wYyAlMSwlMCIgOiAiPXIiIChyZXMpIDogInIiICh3ICYgMHhmZikpOwotCXJldHVybiByZXM7Ci19Ci0KLSNlbHNlCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgotCi0jZW5kaWYKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+Ci0KLSNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsb2NrLG5yLGFkZHIpIFwKLQl0ZXN0X2FuZF9zZXRfYml0KChucikgXiAweDM4LCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jayxucixhZGRyKSBcCi0JdGVzdF9hbmRfY2xlYXJfYml0KChucikgXiAweDM4LCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL21pbml4Lmg+Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBkZWZpbmVkKF9TUEFSQzY0X0JJVE9QU19IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jYWNoZWZsdXNoLmgKaW5kZXggMTIyZTQwNS4uY2Y1YjZiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jYWNoZWZsdXNoLmgKQEAgLTEsNzYgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfQ0FDSEVGTFVTSF9ICi0jZGVmaW5lIF9TUEFSQzY0X0NBQ0hFRkxVU0hfSAotCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLS8qIENhY2hlIGZsdXNoIG9wZXJhdGlvbnMuICovCi0KLS8qIFRoZXNlIGFyZSB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBpcyBhbiBTTVAga2VybmVsIG9yIG5vdC4gKi8KLSNkZWZpbmUgZmx1c2hfY2FjaGVfbW0oX19tbSkgXAotCWRvIHsgaWYgKChfX21tKSA9PSBjdXJyZW50LT5tbSkgZmx1c2h3X3VzZXIoKTsgfSB3aGlsZSgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pIGZsdXNoX2NhY2hlX21tKG1tKQotI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIFwKLQlmbHVzaF9jYWNoZV9tbSgodm1hKS0+dm1fbW0pCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBwYWdlLCBwZm4pIFwKLQlmbHVzaF9jYWNoZV9tbSgodm1hKS0+dm1fbW0pCi0KLS8qIAotICogT24gc3BpdGZpcmUsIHRoZSBpY2FjaGUgZG9lc24ndCBzbm9vcCBsb2NhbCBzdG9yZXMgYW5kIHdlIGRvbid0Ci0gKiB1c2UgYmxvY2sgY29tbWl0IHN0b3JlcyAod2hpY2ggaW52YWxpZGF0ZSBpY2FjaGUgbGluZXMpIGR1cmluZwotICogbW9kdWxlIGxvYWQsIHNvIHdlIG5lZWQgdGhpcy4KLSAqLwotZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKLWV4dGVybiB2b2lkIF9fZmx1c2hfaWNhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyk7Ci0KLWV4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX3BhZ2Uodm9pZCAqYWRkciwgaW50IGZsdXNoX2ljYWNoZSk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHN0cnVjdCBwYWdlICpwYWdlKTsKLSNpZmRlZiBDT05GSUdfU01QCi1leHRlcm4gdm9pZCBzbXBfZmx1c2hfZGNhY2hlX3BhZ2VfaW1wbChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZV9hbGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlICpwYWdlKTsKLSNlbHNlCi0jZGVmaW5lIHNtcF9mbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHBhZ2UsY3B1KSBmbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHBhZ2UpCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlX2FsbChtbSxwYWdlKSBmbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHBhZ2UpCi0jZW5kaWYKLQotZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwotZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwotCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGcpCWRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJZG8geyB9IHdoaWxlICgwKQotCi1leHRlcm4gdm9pZCBmbHVzaF9wdHJhY2VfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3QgcGFnZSAqLAotCQkJCXVuc2lnbmVkIGxvbmcgdWFkZHIsIHZvaWQgKmthZGRyLAotCQkJCXVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgd3JpdGUpOwotCi0jZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pCQlcCi0JZG8gewkJCQkJCQkJXAotCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsJXAotCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7CQkJCQlcCi0JCWZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLCBwYWdlLCB2YWRkciwgc3JjLCBsZW4sIDApOwlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIAkJXAotCWRvIHsJCQkJCQkJCVwKLQkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7CVwKLQkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQkJXAotCQlmbHVzaF9wdHJhY2VfYWNjZXNzKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgbGVuLCAxKTsJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0KLSNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi0vKiBpbnRlcm5hbCBkZWJ1Z2dpbmcgZnVuY3Rpb24gKi8KLXZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX1NQQVJDNjRfQ0FDSEVGTFVTSF9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2NhY2hlZmx1c2guaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2hhZnNyLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NoYWZzci5oCmluZGV4IDg1YzY5YjMuLmFhYWI5NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2hhZnNyLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jaGFmc3IuaApAQCAtMSwyNDEgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfQ0hBRlNSX0gKLSNkZWZpbmUgX1NQQVJDNjRfQ0hBRlNSX0gKLQotLyogQ2hlZXRhaCBBc3luY2hyb25vdXMgRmF1bHQgU3RhdHVzIHJlZ2lzdGVyLCBBU0k9MHg0QyBWQTw2MzowPj0weDAgKi8KLQotLyogQ29tbWVudHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIHZhcmlhbnRzIG9uIHdoaWNoIHRoZSBiaXQgZGVmaW5pdGlvbgotICogaXMgdmFsaWQuICBDb2RlcyBhcmU6Ci0gKiBjaAktLT4JY2hlZXRhaAotICogY2grCS0tPgljaGVldGFoIHBsdXMKLSAqIGpwCS0tPglqYWxhcGVubwotICovCi0KLS8qIEFsbCBiaXRzIG9mIHRoaXMgcmVnaXN0ZXIgZXhjZXB0IE1fU1lORFJPTUUgYW5kIEVfU1lORFJPTUUgYXJlCi0gKiByZWFkLCB3cml0ZSAxIHRvIGNsZWFyLiAgTV9TWU5EUk9NRSBhbmQgRV9TWU5EUk9NRSBhcmUgcmVhZC1vbmx5LgotICovCi0KLS8qIFNvZnR3YXJlIGJpdCBzZXQgYnkgbGludXggdHJhcCBoYW5kbGVycyB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0cmFwIHdhcwotICogc2lnbmFsbGVkIGF0ICV0bCA+PSAxLgotICovCi0jZGVmaW5lIENIQUZTUl9UTDEJCSgxVUwgPDwgNjNVTCkgLyogbi9hICovCi0KLS8qIFVubWFwcGVkIGVycm9yIGZyb20gc3lzdGVtIGJ1cyBmb3IgcHJlZmV0Y2ggcXVldWUgb3IKLSAqIHN0b3JlIHF1ZXVlIHJlYWQgb3BlcmF0aW9uCi0gKi8KLSNkZWZpbmUgQ0hQQUZTUl9EVE8JCSgxVUwgPDwgNTlVTCkgLyogY2grICovCi0KLS8qIEJ1cyBlcnJvciBmcm9tIHN5c3RlbSBidXMgZm9yIHByZWZldGNoIHF1ZXVlIG9yIHN0b3JlIHF1ZXVlCi0gKiByZWFkIG9wZXJhdGlvbgotICovCi0jZGVmaW5lIENIUEFGU1JfREJFUlIJCSgxVUwgPDwgNThVTCkgLyogY2grICovCi0KLS8qIEhhcmR3YXJlIGNvcnJlY3RlZCBFLWNhY2hlIFRhZyBFQ0MgZXJyb3IgKi8KLSNkZWZpbmUgQ0hQQUZTUl9USENFCQkoMVVMIDw8IDU3VUwpIC8qIGNoKyAqLwotLyogU3lzdGVtIGludGVyZmFjZSBwcm90b2NvbCBlcnJvciwgaHcgdGltZW91dCBjYXVzZWQgKi8KLSNkZWZpbmUgSlBBRlNSX0pFVE8JCSgxVUwgPDwgNTdVTCkgLyoganAgKi8KLQotLyogU1cgaGFuZGxlZCBjb3JyZWN0YWJsZSBFLWNhY2hlIFRhZyBFQ0MgZXJyb3IgKi8KLSNkZWZpbmUgQ0hQQUZTUl9UU0NFCQkoMVVMIDw8IDU2VUwpIC8qIGNoKyAqLwotLyogUGFyaXR5IGVycm9yIG9uIHN5c3RlbSBzbm9vcCByZXN1bHRzICovCi0jZGVmaW5lIEpQQUZTUl9TQ0UJCSgxVUwgPDwgNTZVTCkgLyoganAgKi8KLQotLyogVW5jb3JyZWN0YWJsZSBFLWNhY2hlIFRhZyBFQ0MgZXJyb3IgKi8KLSNkZWZpbmUgQ0hQQUZTUl9UVUUJCSgxVUwgPDwgNTVVTCkgLyogY2grICovCi0vKiBTeXN0ZW0gaW50ZXJmYWNlIHByb3RvY29sIGVycm9yLCBpbGxlZ2FsIGNvbW1hbmQgZGV0ZWN0ZWQgKi8KLSNkZWZpbmUgSlBBRlNSX0pFSUMJCSgxVUwgPDwgNTVVTCkgLyoganAgKi8KLQotLyogVW5jb3JyZWN0YWJsZSBzeXN0ZW0gYnVzIGRhdGEgRUNDIGVycm9yIGR1ZSB0byBwcmVmZXRjaAotICogb3Igc3RvcmUgZmlsbCByZXF1ZXN0Ci0gKi8KLSNkZWZpbmUgQ0hQQUZTUl9EVUUJCSgxVUwgPDwgNTRVTCkgLyogY2grICovCi0vKiBTeXN0ZW0gaW50ZXJmYWNlIHByb3RvY29sIGVycm9yLCBpbGxlZ2FsIEFEVFlQRSBkZXRlY3RlZCAqLwotI2RlZmluZSBKUEFGU1JfSkVJVAkJKDFVTCA8PCA1NFVMKSAvKiBqcCAqLwotCi0vKiBNdWx0aXBsZSBlcnJvcnMgb2YgdGhlIHNhbWUgdHlwZSBoYXZlIG9jY3VycmVkLiAgVGhpcyBiaXQgaXMgc2V0IHdoZW4KLSAqIGFuIHVuY29ycmVjdGFibGUgZXJyb3Igb3IgYSBTVyBjb3JyZWN0YWJsZSBlcnJvciBvY2N1cnMgYW5kIHRoZSBzdGF0dXMKLSAqIGJpdCB0byByZXBvcnQgdGhhdCBlcnJvciBpcyBhbHJlYWR5IHNldC4gIFdoZW4gbXVsdGlwbGUgZXJyb3JzIG9mCi0gKiBkaWZmZXJlbnQgdHlwZXMgYXJlIGluZGljYXRlZCBieSBzZXR0aW5nIG11bHRpcGxlIHN0YXR1cyBiaXRzLgotICoKLSAqIFRoaXMgYml0IGlzIG5vdCBzZXQgaWYgbXVsdGlwbGUgSFcgY29ycmVjdGVkIGVycm9ycyB3aXRoIHRoZSBzYW1lCi0gKiBzdGF0dXMgYml0IG9jY3VyLCBvbmx5IHVuY29ycmVjdGFibGUgYW5kIFNXIGNvcnJlY3RhYmxlIG9uZXMgaGF2ZQotICogdGhpcyBiZWhhdmlvci4KLSAqCi0gKiBUaGlzIGJpdCBpcyBub3Qgc2V0IHdoZW4gbXVsdGlwbGUgRUNDIGVycm9ycyBoYXBwZW4gd2l0aGluIGEgc2luZ2xlCi0gKiA2NC1ieXRlIHN5c3RlbSBidXMgdHJhbnNhY3Rpb24uICBPbmx5IHRoZSBmaXJzdCBFQ0MgZXJyb3IgaW4gYSAxNi1ieXRlCi0gKiBzdWJ1bml0IHdpbGwgYmUgbG9nZ2VkLiAgQWxsIGVycm9ycyBpbiBzdWJzZXF1ZW50IDE2LWJ5dGUgc3VidW5pdHMKLSAqIGZyb20gdGhlIHNhbWUgNjQtYnl0ZSB0cmFuc2FjdGlvbiBhcmUgaWdub3JlZC4KLSAqLwotI2RlZmluZSBDSEFGU1JfTUUJCSgxVUwgPDwgNTNVTCkgLyogY2gsY2grLGpwICovCi0KLS8qIFByaXZpbGVnZWQgc3RhdGUgZXJyb3IgaGFzIG9jY3VycmVkLiAgVGhpcyBpcyBhIGNhcHR1cmUgb2YgUFNUQVRFLlBSSVYKLSAqIGF0IHRoZSB0aW1lIHRoZSBlcnJvciBpcyBkZXRlY3RlZC4KLSAqLwotI2RlZmluZSBDSEFGU1JfUFJJVgkJKDFVTCA8PCA1MlVMKSAvKiBjaCxjaCssanAgKi8KLQotLyogVGhlIGZvbGxvd2luZyBiaXRzIDUxIChDSEFGU1JfUEVSUikgdG8gMzMgKENIQUZTUl9DRSkgYXJlIHN0aWNreSBlcnJvcgotICogYml0cyBhbmQgcmVjb3JkIHRoZSBtb3N0IHJlY2VudGx5IGRldGVjdGVkIGVycm9ycy4gIEJpdHMgYWNjdW11bGF0ZQotICogZXJyb3JzIHRoYXQgaGF2ZSBiZWVuIGRldGVjdGVkIHNpbmNlIHRoZSBsYXN0IHdyaXRlIHRvIGNsZWFyIHRoZSBiaXQuCi0gKi8KLQotLyogU3lzdGVtIGludGVyZmFjZSBwcm90b2NvbCBlcnJvci4gIFRoZSBwcm9jZXNzb3IgYXNzZXJ0cyBpdHMnIEVSUk9SCi0gKiBwaW4gd2hlbiB0aGlzIGV2ZW50IG9jY3VycyBhbmQgaXQgYWxzbyBsb2dzIGEgc3BlY2lmaWMgY2F1c2UgY29kZQotICogaW50byBhIEpUQUcgc2Nhbm5hYmxlIGZsb3AuCi0gKi8KLSNkZWZpbmUgQ0hBRlNSX1BFUlIJCSgxVUwgPDwgNTFVTCkgLyogY2gsY2grLGpwICovCi0KLS8qIEludGVybmFsIHByb2Nlc3NvciBlcnJvci4gIFRoZSBwcm9jZXNzb3IgYXNzZXJ0cyBpdHMnIEVSUk9SCi0gKiBwaW4gd2hlbiB0aGlzIGV2ZW50IG9jY3VycyBhbmQgaXQgYWxzbyBsb2dzIGEgc3BlY2lmaWMgY2F1c2UgY29kZQotICogaW50byBhIEpUQUcgc2Nhbm5hYmxlIGZsb3AuCi0gKi8KLSNkZWZpbmUgQ0hBRlNSX0lFUlIJCSgxVUwgPDwgNTBVTCkgLyogY2gsY2grLGpwICovCi0KLS8qIFN5c3RlbSByZXF1ZXN0IHBhcml0eSBlcnJvciBvbiBpbmNvbWluZyBhZGRyZXNzICovCi0jZGVmaW5lIENIQUZTUl9JU0FQCQkoMVVMIDw8IDQ5VUwpIC8qIGNoLGNoKyxqcCAqLwotCi0vKiBIVyBDb3JyZWN0ZWQgc3lzdGVtIGJ1cyBNVEFHIEVDQyBlcnJvciAqLwotI2RlZmluZSBDSEFGU1JfRU1DCQkoMVVMIDw8IDQ4VUwpIC8qIGNoLGNoKyAqLwotLyogUGFyaXR5IGVycm9yIG9uIEwyIGNhY2hlIHRhZyBTUkFNICovCi0jZGVmaW5lIEpQQUZTUl9FVFAJCSgxVUwgPDwgNDhVTCkgLyoganAgKi8KLQotLyogVW5jb3JyZWN0YWJsZSBzeXN0ZW0gYnVzIE1UQUcgRUNDIGVycm9yICovCi0jZGVmaW5lIENIQUZTUl9FTVUJCSgxVUwgPDwgNDdVTCkgLyogY2gsY2grICovCi0vKiBPdXQgb2YgcmFuZ2UgbWVtb3J5IGVycm9yIGhhcyBvY2N1cnJlZCAqLwotI2RlZmluZSBKUEFGU1JfT00JCSgxVUwgPDwgNDdVTCkgLyoganAgKi8KLQotLyogSFcgQ29ycmVjdGVkIHN5c3RlbSBidXMgZGF0YSBFQ0MgZXJyb3IgZm9yIHJlYWQgb2YgaW50ZXJydXB0IHZlY3RvciAqLwotI2RlZmluZSBDSEFGU1JfSVZDCQkoMVVMIDw8IDQ2VUwpIC8qIGNoLGNoKyAqLwotLyogRXJyb3IgZHVlIHRvIHVuc3VwcG9ydGVkIHN0b3JlICovCi0jZGVmaW5lIEpQQUZTUl9VTVMJCSgxVUwgPDwgNDZVTCkgLyoganAgKi8KLQotLyogVW5jb3JyZWN0YWJsZSBzeXN0ZW0gYnVzIGRhdGEgRUNDIGVycm9yIGZvciByZWFkIG9mIGludGVycnVwdCB2ZWN0b3IgKi8KLSNkZWZpbmUgQ0hBRlNSX0lWVQkJKDFVTCA8PCA0NVVMKSAvKiBjaCxjaCssanAgKi8KLQotLyogVW5tYXBwZWQgZXJyb3IgZnJvbSBzeXN0ZW0gYnVzICovCi0jZGVmaW5lIENIQUZTUl9UTwkJKDFVTCA8PCA0NFVMKSAvKiBjaCxjaCssanAgKi8KLQotLyogQnVzIGVycm9yIHJlc3BvbnNlIGZyb20gc3lzdGVtIGJ1cyAqLwotI2RlZmluZSBDSEFGU1JfQkVSUgkJKDFVTCA8PCA0M1VMKSAvKiBjaCxjaCssanAgKi8KLQotLyogU1cgQ29ycmVjdGFibGUgRS1jYWNoZSBFQ0MgZXJyb3IgZm9yIGluc3RydWN0aW9uIGZldGNoIG9yIGRhdGEgYWNjZXNzCi0gKiBvdGhlciB0aGFuIGJsb2NrIGxvYWQuCi0gKi8KLSNkZWZpbmUgQ0hBRlNSX1VDQwkJKDFVTCA8PCA0MlVMKSAvKiBjaCxjaCssanAgKi8KLQotLyogVW5jb3JyZWN0YWJsZSBFLWNhY2hlIEVDQyBlcnJvciBmb3IgaW5zdHJ1Y3Rpb24gZmV0Y2ggb3IgZGF0YSBhY2Nlc3MKLSAqIG90aGVyIHRoYW4gYmxvY2sgbG9hZC4KLSAqLwotI2RlZmluZSBDSEFGU1JfVUNVCQkoMVVMIDw8IDQxVUwpIC8qIGNoLGNoKyxqcCAqLwotCi0vKiBDb3B5b3V0IEhXIENvcnJlY3RlZCBFQ0MgZXJyb3IgKi8KLSNkZWZpbmUgQ0hBRlNSX0NQQwkJKDFVTCA8PCA0MFVMKSAvKiBjaCxjaCssanAgKi8KLQotLyogQ29weW91dCBVbmNvcnJlY3RhYmxlIEVDQyBlcnJvciAqLwotI2RlZmluZSBDSEFGU1JfQ1BVCQkoMVVMIDw8IDM5VUwpIC8qIGNoLGNoKyxqcCAqLwotCi0vKiBIVyBDb3JyZWN0ZWQgRUNDIGVycm9yIGZyb20gRS1jYWNoZSBmb3Igd3JpdGViYWNrICovCi0jZGVmaW5lIENIQUZTUl9XREMJCSgxVUwgPDwgMzhVTCkgLyogY2gsY2grLGpwICovCi0KLS8qIFVuY29ycmVjdGFibGUgRUNDIGVycm9yIGZyb20gRS1jYWNoZSBmb3Igd3JpdGViYWNrICovCi0jZGVmaW5lIENIQUZTUl9XRFUJCSgxVUwgPDwgMzdVTCkgLyogY2gsY2grLGpwICovCi0KLS8qIEhXIENvcnJlY3RlZCBFQ0MgZXJyb3IgZnJvbSBFLWNhY2hlIGZvciBzdG9yZSBtZXJnZSBvciBibG9jayBsb2FkICovCi0jZGVmaW5lIENIQUZTUl9FREMJCSgxVUwgPDwgMzZVTCkgLyogY2gsY2grLGpwICovCi0KLS8qIFVuY29ycmVjdGFibGUgRUNDIGVycm9yIGZyb20gRS1jYWNoZSBmb3Igc3RvcmUgbWVyZ2Ugb3IgYmxvY2sgbG9hZCAqLwotI2RlZmluZSBDSEFGU1JfRURVCQkoMVVMIDw8IDM1VUwpIC8qIGNoLGNoKyxqcCAqLwotCi0vKiBVbmNvcnJlY3RhYmxlIHN5c3RlbSBidXMgZGF0YSBFQ0MgZXJyb3IgZm9yIHJlYWQgb2YgbWVtb3J5IG9yIEkvTyAqLwotI2RlZmluZSBDSEFGU1JfVUUJCSgxVUwgPDwgMzRVTCkgLyogY2gsY2grLGpwICovCi0KLS8qIEhXIENvcnJlY3RlZCBzeXN0ZW0gYnVzIGRhdGEgRUNDIGVycm9yIGZvciByZWFkIG9mIG1lbW9yeSBvciBJL08gKi8KLSNkZWZpbmUgQ0hBRlNSX0NFCQkoMVVMIDw8IDMzVUwpIC8qIGNoLGNoKyxqcCAqLwotCi0vKiBVbmNvcnJlY3RhYmxlIEVDQyBlcnJvciBmcm9tIHJlbW90ZSBjYWNoZS9tZW1vcnkgKi8KLSNkZWZpbmUgSlBBRlNSX1JVRQkJKDFVTCA8PCAzMlVMKSAvKiBqcCAqLwotCi0vKiBDb3JyZWN0YWJsZSBFQ0MgZXJyb3IgZnJvbSByZW1vdGUgY2FjaGUvbWVtb3J5ICovCi0jZGVmaW5lIEpQQUZTUl9SQ0UJCSgxVUwgPDwgMzFVTCkgLyoganAgKi8KLQotLyogSkJVUyBwYXJpdHkgZXJyb3Igb24gcmV0dXJuZWQgcmVhZCBkYXRhICovCi0jZGVmaW5lIEpQQUZTUl9CUAkJKDFVTCA8PCAzMFVMKSAvKiBqcCAqLwotCi0vKiBKQlVTIHBhcml0eSBlcnJvciBvbiBkYXRhIGZvciB3cml0ZWJhY2sgb3IgYmxvY2sgc3RvcmUgKi8KLSNkZWZpbmUgSlBBRlNSX1dCUAkJKDFVTCA8PCAyOVVMKSAvKiBqcCAqLwotCi0vKiBGb3JlaWduIHJlYWQgdG8gRFJBTSBpbmN1cnJpbmcgY29ycmVjdGFibGUgRUNDIGVycm9yICovCi0jZGVmaW5lIEpQQUZTUl9GUkMJCSgxVUwgPDwgMjhVTCkgLyoganAgKi8KLQotLyogRm9yZWlnbiByZWFkIHRvIERSQU0gaW5jdXJyaW5nIHVuY29ycmVjdGFibGUgRUNDIGVycm9yICovCi0jZGVmaW5lIEpQQUZTUl9GUlUJCSgxVUwgPDwgMjdVTCkgLyoganAgKi8KLQotI2RlZmluZSBDSEFGU1JfRVJST1JTCQkoQ0hBRlNSX1BFUlIgfCBDSEFGU1JfSUVSUiB8IENIQUZTUl9JU0FQIHwgQ0hBRlNSX0VNQyB8IFwKLQkJCQkgQ0hBRlNSX0VNVSB8IENIQUZTUl9JVkMgfCBDSEFGU1JfSVZVIHwgQ0hBRlNSX1RPIHwgXAotCQkJCSBDSEFGU1JfQkVSUiB8IENIQUZTUl9VQ0MgfCBDSEFGU1JfVUNVIHwgQ0hBRlNSX0NQQyB8IFwKLQkJCQkgQ0hBRlNSX0NQVSB8IENIQUZTUl9XREMgfCBDSEFGU1JfV0RVIHwgQ0hBRlNSX0VEQyB8IFwKLQkJCQkgQ0hBRlNSX0VEVSB8IENIQUZTUl9VRSB8IENIQUZTUl9DRSkKLSNkZWZpbmUgQ0hQQUZTUl9FUlJPUlMJCShDSFBBRlNSX0RUTyB8IENIUEFGU1JfREJFUlIgfCBDSFBBRlNSX1RIQ0UgfCBcCi0JCQkJIENIUEFGU1JfVFNDRSB8IENIUEFGU1JfVFVFIHwgQ0hQQUZTUl9EVUUgfCBcCi0JCQkJIENIQUZTUl9QRVJSIHwgQ0hBRlNSX0lFUlIgfCBDSEFGU1JfSVNBUCB8IENIQUZTUl9FTUMgfCBcCi0JCQkJIENIQUZTUl9FTVUgfCBDSEFGU1JfSVZDIHwgQ0hBRlNSX0lWVSB8IENIQUZTUl9UTyB8IFwKLQkJCQkgQ0hBRlNSX0JFUlIgfCBDSEFGU1JfVUNDIHwgQ0hBRlNSX1VDVSB8IENIQUZTUl9DUEMgfCBcCi0JCQkJIENIQUZTUl9DUFUgfCBDSEFGU1JfV0RDIHwgQ0hBRlNSX1dEVSB8IENIQUZTUl9FREMgfCBcCi0JCQkJIENIQUZTUl9FRFUgfCBDSEFGU1JfVUUgfCBDSEFGU1JfQ0UpCi0jZGVmaW5lIEpQQUZTUl9FUlJPUlMJCShKUEFGU1JfSkVUTyB8IEpQQUZTUl9TQ0UgfCBKUEFGU1JfSkVJQyB8IFwKLQkJCQkgSlBBRlNSX0pFSVQgfCBDSEFGU1JfUEVSUiB8IENIQUZTUl9JRVJSIHwgXAotCQkJCSBDSEFGU1JfSVNBUCB8IEpQQUZTUl9FVFAgfCBKUEFGU1JfT00gfCBcCi0JCQkJIEpQQUZTUl9VTVMgfCBDSEFGU1JfSVZVIHwgQ0hBRlNSX1RPIHwgXAotCQkJCSBDSEFGU1JfQkVSUiB8IENIQUZTUl9VQ0MgfCBDSEFGU1JfVUNVIHwgXAotCQkJCSBDSEFGU1JfQ1BDIHwgQ0hBRlNSX0NQVSB8IENIQUZTUl9XREMgfCBcCi0JCQkJIENIQUZTUl9XRFUgfCBDSEFGU1JfRURDIHwgQ0hBRlNSX0VEVSB8IFwKLQkJCQkgQ0hBRlNSX1VFIHwgQ0hBRlNSX0NFIHwgSlBBRlNSX1JVRSB8IFwKLQkJCQkgSlBBRlNSX1JDRSB8IEpQQUZTUl9CUCB8IEpQQUZTUl9XQlAgfCBcCi0JCQkJIEpQQUZTUl9GUkMgfCBKUEFGU1JfRlJVKQotCi0vKiBBY3RpdmUgSkJVUyByZXF1ZXN0IHNpZ25hbCB3aGVuIGVycm9yIG9jY3VycmVkICovCi0jZGVmaW5lIEpQQUZTUl9KQlJFUQkJKDB4N1VMIDw8IDI0VUwpIC8qIGpwICovCi0jZGVmaW5lIEpQQUZTUl9KQlJFUV9TSElGVAkyNFVMCi0KLS8qIEwyIGNhY2hlIHdheSBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBKUEFGU1JfRVRXCQkoMHgzVUwgPDwgMjJVTCkgLyoganAgKi8KLSNkZWZpbmUgSlBBRlNSX0VUV19TSElGVAkyMlVMCi0KLS8qIFN5c3RlbSBidXMgTVRBRyBFQ0Mgc3luZHJvbWUuICBUaGlzIGZpZWxkIGNhcHR1cmVzIHRoZSBzdGF0dXMgb2YgdGhlCi0gKiBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBoaWdoZXN0LXByaW9yaXR5IGVycm9yIGFjY29yZGluZyB0byB0aGUgTV9TWU5ECi0gKiBvdmVyd3JpdGUgcG9saWN5LiAgQWZ0ZXIgdGhlIEFGU1Igc3RpY2t5IGJpdCwgY29ycmVzcG9uZGluZyB0byB0aGUgZXJyb3IKLSAqIGZvciB3aGljaCB0aGUgTV9TWU5EIGlzIHJlcG9ydGVkLCBpcyBjbGVhcmVkLCB0aGUgY29udGVudHMgb2YgdGhlIE1fU1lORAotICogZmllbGQgd2lsbCBiZSB1bmNoYW5nZWQgYnkgd2lsbCBiZSB1bmZyb3plbiBmb3IgZnVydGhlciBlcnJvciBjYXB0dXJlLgotICovCi0jZGVmaW5lIENIQUZTUl9NX1NZTkRST01FCSgweGZVTCA8PCAxNlVMKSAvKiBjaCxjaCssanAgKi8KLSNkZWZpbmUgQ0hBRlNSX01fU1lORFJPTUVfU0hJRlQJMTZVTAotCi0vKiBBZ2VuaWQgSWQgb2YgdGhlIGZvcmVpZ24gZGV2aWNlIGNhdXNpbmcgdGhlIFVFL0NFIGVycm9ycyAqLwotI2RlZmluZSBKUEFGU1JfQUlECQkoMHgxZlVMIDw8IDlVTCkgLyoganAgKi8KLSNkZWZpbmUgSlBBRlNSX0FJRF9TSElGVAk5VUwKLQotLyogU3lzdGVtIGJ1cyBvciBFLWNhY2hlIGRhdGEgRUNDIHN5bmRyb21lLiAgVGhpcyBmaWVsZCBjYXB0dXJlcyB0aGUgc3RhdHVzCi0gKiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgaGlnaGVzdC1wcmlvcml0eSBlcnJvciBhY2NvcmRpbmcgdG8gdGhlCi0gKiBFX1NZTkQgb3ZlcndyaXRlIHBvbGljeS4gIEFmdGVyIHRoZSBBRlNSIHN0aWNreSBiaXQsIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gKiBlcnJvciBmb3Igd2hpY2ggdGhlIEVfU1lORCBpcyByZXBvcnRlZCwgaXMgY2xlYXJlLCB0aGUgY29udGVudHMgb2YgdGhlIEVfU1lORAotICogZmllbGQgd2lsbCBiZSB1bmNoYW5nZWQgYnV0IHdpbGwgYmUgdW5mcm96ZW4gZm9yIGZ1cnRoZXIgZXJyb3IgY2FwdHVyZS4KLSAqLwotI2RlZmluZSBDSEFGU1JfRV9TWU5EUk9NRQkoMHgxZmZVTCA8PCAwVUwpIC8qIGNoLGNoKyxqcCAqLwotI2RlZmluZSBDSEFGU1JfRV9TWU5EUk9NRV9TSElGVAkwVUwKLQotLyogVGhlIEFGU1IgbXVzdCBiZSBleHBsaWNpdGx5IGNsZWFyZWQgYnkgc29mdHdhcmUsIGl0IGlzIG5vdCBjbGVhcmVkIGF1dG9tYXRpY2FsbHkKLSAqIGJ5IGEgcmVhZC4gIFdyaXRlcyB0byBiaXRzIDw1MTozMz4gd2l0aCBiaXRzIHNldCB3aWxsIGNsZWFyIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBiaXRzIGluIHRoZSBBRlNSLiAgQml0cyBhc3NvY2lhdGVkIHdpdGggZGlzcnVwdGluZyB0cmFwcyBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlCi0gKiBpbnRlcnJ1cHRzIGFyZSByZS1lbmFibGVkIHRvIHByZXZlbnQgbXVsdGlwbGUgdHJhcHMgZm9yIHRoZSBzYW1lIGVycm9yLiAgSS5lLgotICogUFNUQVRFLklFIGFuZCBBRlNSIGJpdHMgY29udHJvbCBkZWxpdmVyeSBvZiBkaXNydXB0aW5nIHRyYXBzLgotICoKLSAqIFNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIEFGQVIsIHdoZW4gbXVsdGlwbGUgZXZlbnRzIGhhdmUgYmVlbiBsb2dnZWQgYnkgdGhlCi0gKiBiaXRzIGluIHRoZSBBRlNSLCBhdCBtb3N0IG9uZSBvZiB0aGVzZSBldmVudHMgd2lsbCBoYXZlIGl0cyBzdGF0dXMgY2FwdHVyZWQKLSAqIGluIHRoZSBBRkFSLiAgVGhlIGhpZ2hlc3QgcHJpb3JpdHkgb2YgdGhvc2UgZXZlbnQgYml0cyB3aWxsIGdldCBBRkFSIGxvZ2dpbmcuCi0gKiBUaGUgQUZBUiB3aWxsIGJlIHVubG9ja2VkIGFuZCBhdmFpbGFibGUgdG8gY2FwdHVyZSB0aGUgYWRkcmVzcyBvZiBhbm90aGVyIGV2ZW50Ci0gKiBhcyBzb29uIGFzIHRoZSBvbmUgYml0IGluIEFGU1IgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZXZlbnQgbG9nZ2VkIGluIEFGQVIgaXMKLSAqIGNsZWFyZWQuICBGb3IgZXhhbXBsZSwgaWYgQUZTUi5DRSBpcyBkZXRlY3RlZCwgdGhlbiBBRlNSLlVFICh3aGljaCBvdmVyd3JpdGVzCi0gKiB0aGUgQUZBUiksIGFuZCBBRlNSLlVFIGlzIGNsZWFyZWQgYnkgbm90IEFGU1IuQ0UsIHRoZW4gdGhlIEFGQVIgd2lsbCBiZSB1bmxvY2tlZAotICogYW5kIHJlYWR5IGZvciBhbm90aGVyIGV2ZW50LCBldmVuIHRob3VnaCBBRlNSLkNFIGlzIHN0aWxsIHNldC4gIFRoZSBzYW1lIHJ1bGVzCi0gKiBhbHNvIGFwcGx5IHRvIHRoZSBNX1NZTkRST01FIGFuZCBFX1NZTkRST01FIGZpZWxkcyBvZiB0aGUgQUZTUi4KLSAqLwotCi0jZW5kaWYgLyogX1NQQVJDNjRfQ0hBRlNSX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvY2hhZnNyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NoZWNrc3VtLmgKaW5kZXggYjI5MDU2NC4uYzM5NjZjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2hlY2tzdW0uaApAQCAtMSwxNjcgKzEgQEAKLSNpZm5kZWYgX19TUEFSQzY0X0NIRUNLU1VNX0gKLSNkZWZpbmUgX19TUEFSQzY0X0NIRUNLU1VNX0gKLQotLyogIGNoZWNrc3VtLmg6ICBJUC9VRFAvVENQIGNoZWNrc3VtIHJvdXRpbmVzIG9uIHRoZSBWOS4KLSAqCi0gKiAgQ29weXJpZ2h0KEMpIDE5OTUgTGludXMgVG9ydmFsZHMKLSAqICBDb3B5cmlnaHQoQykgMTk5NSBNaWd1ZWwgZGUgSWNhemEKLSAqICBDb3B5cmlnaHQoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIKLSAqICBDb3B5cmlnaHQoQykgMTk5NiBFZGRpZSBDLiBEb3N0Ci0gKiAgQ29weXJpZ2h0KEMpIDE5OTcgSmFrdWIgSmVsaW5lawotICoKLSAqIGRlcml2ZWQgZnJvbToKLSAqCUFscGhhIGNoZWNrc3VtIGMtY29kZQotICogICAgICBpeDg2IGlubGluZSBhc3NlbWJseQotICogICAgICBSRkMxMDcxIENvbXB1dGluZyB0aGUgSW50ZXJuZXQgQ2hlY2tzdW0KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW42Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotLyogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCi0gKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQotICoKLSAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCi0gKiBvciBjc3VtX3RjcHVkcF9tYWdpYwotICoKLSAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAotICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCi0gKgotICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5Ci0gKi8KLWV4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKiBidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKLQotLyogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gdXNlciBzcGFjZSB3aGlsZSBpdAotICogY2hlY2tzdW1zCi0gKgotICogaGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCi0gKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQotICovCi1leHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCi0JCQkJCSAgICAgIGludCBsZW4sIF9fd3N1bSBzdW0pOwotCi1leHRlcm4gbG9uZyBfX2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLAotCQkJCQkgIHZvaWQgKmRzdCwgaW50IGxlbiwKLQkJCQkJICBfX3dzdW0gc3VtKTsKLQotc3RhdGljIGlubGluZSBfX3dzdW0KLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLAotCQkJICAgIHZvaWQgKmRzdCwgaW50IGxlbiwKLQkJCSAgICBfX3dzdW0gc3VtLCBpbnQgKmVycikKLXsKLQlsb25nIHJldCA9IF9fY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKHNyYywgZHN0LCBsZW4sIHN1bSk7Ci0JaWYgKHJldCA8IDApCi0JCSplcnIgPSAtRUZBVUxUOwotCXJldHVybiAoX19mb3JjZSBfX3dzdW0pIHJldDsKLX0KLQotLyogCi0gKglDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCi0gKi8KLSNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgotZXh0ZXJuIGxvbmcgX19jc3VtX3BhcnRpYWxfY29weV90b191c2VyKGNvbnN0IHZvaWQgKnNyYywKLQkJCQkJdm9pZCBfX3VzZXIgKmRzdCwgaW50IGxlbiwKLQkJCQkJICBfX3dzdW0gc3VtKTsKLQotc3RhdGljIGlubGluZSBfX3dzdW0KLWNzdW1fYW5kX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsCi0JCSAgICAgIHZvaWQgX191c2VyICpkc3QsIGludCBsZW4sCi0JCSAgICAgIF9fd3N1bSBzdW0sIGludCAqZXJyKQotewotCWxvbmcgcmV0ID0gX19jc3VtX3BhcnRpYWxfY29weV90b191c2VyKHNyYywgZHN0LCBsZW4sIHN1bSk7Ci0JaWYgKHJldCA8IDApCi0JCSplcnIgPSAtRUZBVUxUOwotCXJldHVybiAoX19mb3JjZSBfX3dzdW0pIHJldDsKLX0KLQotLyogaWhsIGlzIGFsd2F5cyA1IG9yIGdyZWF0ZXIsIGFsbW9zdCBhbHdheXMgaXMgNSwgYW5kIGlwaCBpcyB3b3JkIGFsaWduZWQKLSAqIHRoZSBtYWpvcml0eSBvZiB0aGUgdGltZS4KLSAqLwotZXh0ZXJuIF9fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCk7Ci0KLS8qIEZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzLiAqLwotc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQotewotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIJYWRkY2MJCSUwLCAlMSwgJTFcbiIKLSIJc3JsCQklMSwgMTYsICUxXG4iCi0iCWFkZGMJCSUxLCAlJWcwLCAlMVxuIgotIgl4bm9yCQklJWcwLCAlMSwgJTBcbiIKLQk6ICI9JnIiIChzdW0pLCAiPXIiICh0bXApCi0JOiAiMCIgKHN1bSksICIxIiAoKF9fZm9yY2UgdTMyKXN1bTw8MTYpCi0JOiAiY2MiKTsKLQlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNilzdW07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX193c3VtIGNzdW1fdGNwdWRwX25vZm9sZChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJICAgICAgIF9fd3N1bSBzdW0pCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iCWFkZGNjCQklMSwgJTAsICUwXG4iCi0iCWFkZGNjYwkJJTIsICUwLCAlMFxuIgotIglhZGRjY2MJCSUzLCAlMCwgJTBcbiIKLSIJYWRkYwkJJTAsICUlZzAsICUwXG4iCi0JOiAiPXIiIChzdW0pLCAiPXIiIChzYWRkcikKLQk6ICJyIiAoZGFkZHIpLCAiciIgKHByb3RvICsgbGVuKSwgIjAiIChzdW0pLCAiMSIgKHNhZGRyKQotCTogImNjIik7Ci0JcmV0dXJuIHN1bTsKLX0KLQotLyoKLSAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCi0gKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAotICovCi1zdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSAgIF9fd3N1bSBzdW0pCi17Ci0JcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOwotfQotCi0jZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCi0KLXN0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2lwdjZfbWFnaWMoY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCSAgICAgIF9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJICAgICAgX193c3VtIHN1bSkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0iCWFkZGNjCQklMywgJTQsICUlZzdcbiIKLSIJYWRkY2NjCQklNSwgJSVnNywgJSVnN1xuIgotIglsZHV3CQlbJTIgKyAweDBjXSwgJSVnMlxuIgotIglsZHV3CQlbJTIgKyAweDA4XSwgJSVnM1xuIgotIglhZGRjY2MJCSUlZzIsICUlZzcsICUlZzdcbiIKLSIJbGR1dwkJWyUyICsgMHgwNF0sICUlZzJcbiIKLSIJYWRkY2NjCQklJWczLCAlJWc3LCAlJWc3XG4iCi0iCWxkdXcJCVslMiArIDB4MDBdLCAlJWczXG4iCi0iCWFkZGNjYwkJJSVnMiwgJSVnNywgJSVnN1xuIgotIglsZHV3CQlbJTEgKyAweDBjXSwgJSVnMlxuIgotIglhZGRjY2MJCSUlZzMsICUlZzcsICUlZzdcbiIKLSIJbGR1dwkJWyUxICsgMHgwOF0sICUlZzNcbiIKLSIJYWRkY2NjCQklJWcyLCAlJWc3LCAlJWc3XG4iCi0iCWxkdXcJCVslMSArIDB4MDRdLCAlJWcyXG4iCi0iCWFkZGNjYwkJJSVnMywgJSVnNywgJSVnN1xuIgotIglsZHV3CQlbJTEgKyAweDAwXSwgJSVnM1xuIgotIglhZGRjY2MJCSUlZzIsICUlZzcsICUlZzdcbiIKLSIJYWRkY2NjCQklJWczLCAlJWc3LCAlMFxuIgotIglhZGRjCQkwLCAlMCwgJTBcbiIKLQk6ICI9JnIiIChzdW0pCi0JOiAiciIgKHNhZGRyKSwgInIiIChkYWRkciksICJyIihodG9ubChsZW4pKSwKLQkgICJyIihodG9ubChwcm90bykpLCAiciIoc3VtKQotCTogImcyIiwgImczIiwgImc3IiwgImNjIik7Ci0KLQlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7Ci19Ci0KLS8qIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkgaW4gaWNtcC5jICovCi1zdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pCi17Ci0JcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7Ci19Ci0KLSNlbmRpZiAvKiAhKF9fU1BBUkM2NF9DSEVDS1NVTV9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9jaGVja3N1bS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jaG1jdHJsLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NobWN0cmwuaAppbmRleCA4NTliNGE0Li5lYjc1N2I0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NobWN0cmwuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NobWN0cmwuaApAQCAtMSwxODMgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfQ0hNQ1RSTF9ICi0jZGVmaW5lIF9TUEFSQzY0X0NITUNUUkxfSAotCi0vKiBDaGVldGFoIG1lbW9yeSBjb250cm9sbGVyIHByb2dyYW1tYWJsZSByZWdpc3RlcnMuICovCi0jZGVmaW5lIENITUNUUkxfVENUUkwxCQkweDAwIC8qIE1lbW9yeSBUaW1pbmcgQ29udHJvbCBJCQkqLwotI2RlZmluZSBDSE1DVFJMX1RDVFJMMgkJMHgwOCAvKiBNZW1vcnkgVGltaW5nIENvbnRyb2wgSUkJKi8KLSNkZWZpbmUgQ0hNQ1RSTF9UQ1RSTDMJCTB4MzggLyogTWVtb3J5IFRpbWluZyBDb250cm9sIElJSQkqLwotI2RlZmluZSBDSE1DVFJMX1RDVFJMNAkJMHg0MCAvKiBNZW1vcnkgVGltaW5nIENvbnRyb2wgSVYJKi8KLSNkZWZpbmUgQ0hNQ1RSTF9ERUNPREUxCQkweDEwIC8qIE1lbW9yeSBBZGRyZXNzIERlY29kZSBJCQkqLwotI2RlZmluZSBDSE1DVFJMX0RFQ09ERTIJCTB4MTggLyogTWVtb3J5IEFkZHJlc3MgRGVjb2RlIElJCSovCi0jZGVmaW5lIENITUNUUkxfREVDT0RFMwkJMHgyMCAvKiBNZW1vcnkgQWRkcmVzcyBEZWNvZGUgSUlJCSovCi0jZGVmaW5lIENITUNUUkxfREVDT0RFNAkJMHgyOCAvKiBNZW1vcnkgQWRkcmVzcyBEZWNvZGUgSVYJKi8KLSNkZWZpbmUgQ0hNQ1RSTF9NQUNUUkwJCTB4MzAgLyogTWVtb3J5IEFkZHJlc3MgQ29udHJvbAkJKi8KLQotLyogTWVtb3J5IFRpbWluZyBDb250cm9sIEkgKi8KLSNkZWZpbmUgVENUUkwxX1NEUkFNQ1RMX0RMWQkweGYwMDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBUQ1RSTDFfU0RSQU1DVExfRExZX1NISUZUICAgICA2MAotI2RlZmluZSBUQ1RSTDFfU0RSQU1DTEtfRExZCTB4MGUwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMMV9TRFJBTUNMS19ETFlfU0hJRlQgICAgIDU3Ci0jZGVmaW5lIFRDVFJMMV9SCQkweDAxMDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBUQ1RSTDFfUl9TSElGVCAJCSAgICAgIDU2Ci0jZGVmaW5lIFRDVFJMMV9BVVRPUkZSX0NZQ0xFCTB4MDBmZTAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMMV9BVVRPUkZSX0NZQ0xFX1NISUZUICAgIDQ5Ci0jZGVmaW5lIFRDVFJMMV9SRF9XQUlUCQkweDAwMDFmMDAwMDAwMDAwMDBVTAotI2RlZmluZSBUQ1RSTDFfUkRfV0FJVF9TSElGVAkgICAgICA0NAotI2RlZmluZSBUQ1RSTDFfUENfQ1lDTEUJCTB4MDAwMDBmYzAwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMMV9QQ19DWUNMRV9TSElGVAkgICAgICAzOAotI2RlZmluZSBUQ1RSTDFfV1JfTU9SRV9SQVNfUFcJMHgwMDAwMDAzZjAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwxX1dSX01PUkVfUkFTX1BXX1NISUZUICAgMzIKLSNkZWZpbmUgVENUUkwxX1JEX01PUkVfUkFXX1BXCTB4MDAwMDAwMDBmYzAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMMV9SRF9NT1JFX1JBU19QV19TSElGVCAgIDI2Ci0jZGVmaW5lIFRDVFJMMV9BQ1RfV1JfRExZCTB4MDAwMDAwMDAwM2YwMDAwMFVMCi0jZGVmaW5lIFRDVFJMMV9BQ1RfV1JfRExZX1NISUZUCSAgICAgIDIwCi0jZGVmaW5lIFRDVFJMMV9BQ1RfUkRfRExZCTB4MDAwMDAwMDAwMDBmYzAwMFVMCi0jZGVmaW5lIFRDVFJMMV9BQ1RfUkRfRExZX1NISUZUCSAgICAgIDE0Ci0jZGVmaW5lIFRDVFJMMV9CQU5LX1BSRVNFTlQJMHgwMDAwMDAwMDAwMDAzMDAwVUwKLSNkZWZpbmUgVENUUkwxX0JBTktfUFJFU0VOVF9TSElGVCAgICAgMTIKLSNkZWZpbmUgVENUUkwxX1JGUl9JTlQJCTB4MDAwMDAwMDAwMDAwMGZmOFVMCi0jZGVmaW5lIFRDVFJMMV9SRlJfSU5UX1NISUZUCSAgICAgIDMKLSNkZWZpbmUgVENUUkwxX1NFVF9NT0RFX1JFRwkweDAwMDAwMDAwMDAwMDAwMDRVTAotI2RlZmluZSBUQ1RSTDFfU0VUX01PREVfUkVHX1NISUZUICAgICAyCi0jZGVmaW5lIFRDVFJMMV9SRlJfRU5BQkxFCTB4MDAwMDAwMDAwMDAwMDAwMlVMCi0jZGVmaW5lIFRDVFJMMV9SRlJfRU5BQkxFX1NISUZUCSAgICAgIDEKLSNkZWZpbmUgVENUUkwxX1BSRUNIR19BTEwJMHgwMDAwMDAwMDAwMDAwMDAxVUwKLSNkZWZpbmUgVENUUkwxX1BSRUNIR19BTExfU0hJRlQJICAgICAgMAotCi0vKiBNZW1vcnkgVGltaW5nIENvbnRyb2wgSUkgKi8KLSNkZWZpbmUgVENUUkwyX1dSX01TRUxfRExZCTB4ZmMwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMMl9XUl9NU0VMX0RMWV9TSElGVCAgICAgIDU4Ci0jZGVmaW5lIFRDVFJMMl9SRF9NU0VMX0RMWQkweDAzZjAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBUQ1RSTDJfUkRfTVNFTF9ETFlfU0hJRlQgICAgICA1MgotI2RlZmluZSBUQ1RSTDJfV1JEQVRBX1RITEQJMHgwMDBjMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwyX1dSREFUQV9USExEX1NISUZUICAgICAgNTAKLSNkZWZpbmUgVENUUkwyX1JEV1JfUkRfVElfRExZCTB4MDAwM2YwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMMl9SRFdSX1JEX1RJX0RMWV9TSElGVCAgIDQ0Ci0jZGVmaW5lIFRDVFJMMl9BVVRPUFJFQ0hHX0VOQkwJMHgwMDAwMDgwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwyX0FVVE9QUkVDSEdfRU5CTF9TSElGVCAgNDMKLSNkZWZpbmUgVENUUkwyX1JEV1JfUElfTU9SRV9ETFkJMHgwMDAwMDdjMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwyX1JEV1JfUElfTU9SRV9ETFlfU0hJRlQgMzgKLSNkZWZpbmUgVENUUkwyX1JEV1JfMV9ETFkJMHgwMDAwMDAzZjAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwyX1JEV1JfMV9ETFlfU0hJRlQgICAgICAgMzIKLSNkZWZpbmUgVENUUkwyX1dSV1JfUElfTU9SRV9ETFkJMHgwMDAwMDAwMGY4MDAwMDAwVUwKLSNkZWZpbmUgVENUUkwyX1dSV1JfUElfTU9SRV9ETFlfU0hJRlQgMjcKLSNkZWZpbmUgVENUUkwyX1dSV1JfMV9ETFkJMHgwMDAwMDAwMDA3ZTAwMDAwVUwKLSNkZWZpbmUgVENUUkwyX1dSV1JfMV9ETFlfU0hJRlQgICAgICAgMjEKLSNkZWZpbmUgVENUUkwyX1JEV1JfUkRfUElfTU9SRV9ETFkgMHgwMDAwMDAwMDAwMWYwMDAwVUwKLSNkZWZpbmUgVENUUkwyX1JEV1JfUkRfUElfTU9SRV9ETFlfU0hJRlQgMTYKLSNkZWZpbmUgVENUUkwyX1IJCTB4MDAwMDAwMDAwMDAwODAwMFVMCi0jZGVmaW5lIFRDVFJMMl9SX1NISUZUCQkgICAgICAxNQotI2RlZmluZSBUQ1RSTDJfU0RSQU1fTU9ERV9SRUdfREFUQSAweDAwMDAwMDAwMDAwMDdmZmZVTAotI2RlZmluZSBUQ1RSTDJfU0RSQU1fTU9ERV9SRUdfREFUQV9TSElGVCAwCi0KLS8qIE1lbW9yeSBUaW1pbmcgQ29udHJvbCBJSUkgKi8KLSNkZWZpbmUgVENUUkwzX1NEUkFNX0NUTF9ETFkJMHhmMDAwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwzX1NEUkFNX0NUTF9ETFlfU0hJRlQgICAgNjAKLSNkZWZpbmUgVENUUkwzX1NEUkFNX0NMS19ETFkJMHgwZTAwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwzX1NEUkFNX0NMS19ETFlfU0hJRlQgICAgNTcKLSNkZWZpbmUgVENUUkwzX1IJCTB4MDEwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMM19SX1NISUZUCQkgICAgICA1NgotI2RlZmluZSBUQ1RSTDNfQVVUT19SRlJfQ1lDTEUJMHgwMGZlMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwzX0FVVE9fUkZSX0NZQ0xFX1NISUZUICAgNDkKLSNkZWZpbmUgVENUUkwzX1JEX1dBSVQJCTB4MDAwMWYwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMM19SRF9XQUlUX1NISUZUCSAgICAgIDQ0Ci0jZGVmaW5lIFRDVFJMM19QQ19DWUNMRQkJMHgwMDAwMGZjMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwzX1BDX0NZQ0xFX1NISUZUCSAgICAgIDM4Ci0jZGVmaW5lIFRDVFJMM19XUl9NT1JFX1JBV19QVwkweDAwMDAwMDNmMDAwMDAwMDBVTAotI2RlZmluZSBUQ1RSTDNfV1JfTU9SRV9SQVdfUFdfU0hJRlQgICAzMgotI2RlZmluZSBUQ1RSTDNfUkRfTU9SRV9SQVdfUFcJMHgwMDAwMDAwMGZjMDAwMDAwVUwKLSNkZWZpbmUgVENUUkwzX1JEX01PUkVfUkFXX1BXX1NISUZUICAgMjYKLSNkZWZpbmUgVENUUkwzX0FDVF9XUl9ETFkJMHgwMDAwMDAwMDAzZjAwMDAwVUwKLSNkZWZpbmUgVENUUkwzX0FDVF9XUl9ETFlfU0hJRlQgICAgICAgMjAKLSNkZWZpbmUgVENUUkwzX0FDVF9SRF9ETFkJMHgwMDAwMDAwMDAwMGZjMDAwVUwKLSNkZWZpbmUgVENUUkwzX0FDVF9SRF9ETFlfU0hJRlQgICAgICAgMTQKLSNkZWZpbmUgVENUUkwzX0JBTktfUFJFU0VOVAkweDAwMDAwMDAwMDAwMDMwMDBVTAotI2RlZmluZSBUQ1RSTDNfQkFOS19QUkVTRU5UX1NISUZUICAgICAxMgotI2RlZmluZSBUQ1RSTDNfUkZSX0lOVAkJMHgwMDAwMDAwMDAwMDAwZmY4VUwKLSNkZWZpbmUgVENUUkwzX1JGUl9JTlRfU0hJRlQJICAgICAgMwotI2RlZmluZSBUQ1RSTDNfU0VUX01PREVfUkVHCTB4MDAwMDAwMDAwMDAwMDAwNFVMCi0jZGVmaW5lIFRDVFJMM19TRVRfTU9ERV9SRUdfU0hJRlQgICAgIDIKLSNkZWZpbmUgVENUUkwzX1JGUl9FTkFCTEUJMHgwMDAwMDAwMDAwMDAwMDAyVUwKLSNkZWZpbmUgVENUUkwzX1JGUl9FTkFCTEVfU0hJRlQgICAgICAgMQotI2RlZmluZSBUQ1RSTDNfUFJFQ0hHX0FMTAkweDAwMDAwMDAwMDAwMDAwMDFVTAotI2RlZmluZSBUQ1RSTDNfUFJFQ0hHX0FMTF9TSElGVAkgICAgICAwCi0KLS8qIE1lbW9yeSBUaW1pbmcgQ29udHJvbCBJViAqLwotI2RlZmluZSBUQ1RSTDRfV1JfTVNFTF9ETFkJMHhmYzAwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkw0X1dSX01TRUxfRExZX1NISUZUICAgICAgNTgKLSNkZWZpbmUgVENUUkw0X1JEX01TRUxfRExZCTB4MDNmMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMNF9SRF9NU0VMX0RMWV9TSElGVCAgICAgIDUyCi0jZGVmaW5lIFRDVFJMNF9XUkRBVEFfVEhMRAkweDAwMGMwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBUQ1RSTDRfV1JEQVRBX1RITERfU0hJRlQgICAgICA1MAotI2RlZmluZSBUQ1RSTDRfUkRXUl9SRF9SSV9ETFkJMHgwMDAzZjAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkw0X1JEV1JfUkRfUklfRExZX1NISUZUICAgNDQKLSNkZWZpbmUgVENUUkw0X0FVVE9fUFJFQ0hHX0VOQkwJMHgwMDAwMDgwMDAwMDAwMDAwVUwKLSNkZWZpbmUgVENUUkw0X0FVVE9fUFJFQ0hHX0VOQkxfU0hJRlQgNDMKLSNkZWZpbmUgVENUUkw0X1JEX1dSX1BJX01PUkVfRExZIDB4MDAwMDA3YzAwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMNF9SRF9XUl9QSV9NT1JFX0RMWV9TSElGVCAzOAotI2RlZmluZSBUQ1RSTDRfUkRfV1JfVElfRExZCTB4MDAwMDAwM2YwMDAwMDAwMFVMCi0jZGVmaW5lIFRDVFJMNF9SRF9XUl9USV9ETFlfU0hJRlQgICAgIDMyCi0jZGVmaW5lIFRDVFJMNF9XUl9XUl9QSV9NT1JFX0RMWSAweDAwMDAwMDAwZjgwMDAwMDBVTAotI2RlZmluZSBUQ1RSTDRfV1JfV1JfUElfTU9SRV9ETFlfU0hJRlQgMjcKLSNkZWZpbmUgVENUUkw0X1dSX1dSX1RJX0RMWQkweDAwMDAwMDAwMDdlMDAwMDBVTAotI2RlZmluZSBUQ1RSTDRfV1JfV1JfVElfRExZX1NISUZUICAgICAyMQotI2RlZmluZSBUQ1RSTDRfUkRXUl9SRF9QSV9NT1JFX0RMWSAweDAwMDAwMDAwMDAxZjAwMFVMMAotI2RlZmluZSBUQ1RSTDRfUkRXUl9SRF9QSV9NT1JFX0RMWV9TSElGVCAxNgotI2RlZmluZSBUQ1RSTDRfUgkJMHgwMDAwMDAwMDAwMDA4MDAwVUwKLSNkZWZpbmUgVENUUkw0X1JfU0hJRlQJCSAgICAgIDE1Ci0jZGVmaW5lIFRDVFJMNF9TRFJBTV9NT0RFX1JFR19EQVRBIDB4MDAwMDAwMDAwMDAwN2ZmZlVMCi0jZGVmaW5lIFRDVFJMNF9TRFJBTV9NT0RFX1JFR19EQVRBX1NISUZUIDAKLQotLyogQWxsIDQgbWVtb3J5IGFkZHJlc3MgZGVjb2RpbmcgcmVnaXN0ZXJzIGhhdmUgdGhlCi0gKiBzYW1lIGxheW91dC4KLSAqLwotI2RlZmluZSBNRU1fREVDT0RFX1ZBTElECTB4ODAwMDAwMDAwMDAwMDAwMFVMIC8qIFZhbGlkICovCi0jZGVmaW5lIE1FTV9ERUNPREVfVkFMSURfU0hJRlQJICAgICAgNjMKLSNkZWZpbmUgTUVNX0RFQ09ERV9VSwkJMHgwMDFmZmUwMDAwMDAwMDAwVUwgLyogVXBwZXIgbWFzayAqLwotI2RlZmluZSBNRU1fREVDT0RFX1VLX1NISUZUCSAgICAgIDQxCi0jZGVmaW5lIE1FTV9ERUNPREVfVU0JCTB4MDAwMDAwMWZmZmYwMDAwMFVMIC8qIFVwcGVyIG1hdGNoICovCi0jZGVmaW5lIE1FTV9ERUNPREVfVU1fU0hJRlQJICAgICAgMjAKLSNkZWZpbmUgTUVNX0RFQ09ERV9MSwkJMHgwMDAwMDAwMDAwMDNjMDAwVUwgLyogTG93ZXIgbWFzayAqLwotI2RlZmluZSBNRU1fREVDT0RFX0xLX1NISUZUCSAgICAgIDE0Ci0jZGVmaW5lIE1FTV9ERUNPREVfTE0JCTB4MDAwMDAwMDAwMDAwMGYwMFVMIC8qIExvd2VyIG1hdGNoICovCi0jZGVmaW5lIE1FTV9ERUNPREVfTE1fU0hJRlQgICAgICAgICAgIDgKLQotI2RlZmluZSBQQV9VUFBFUl9CSVRTCQkweDAwMDAwN2ZmZmMwMDAwMDBVTAotI2RlZmluZSBQQV9VUFBFUl9CSVRTX1NISUZUCTI2Ci0jZGVmaW5lIFBBX0xPV0VSX0JJVFMJCTB4MDAwMDAwMDAwMDAwMDNjMFVMCi0jZGVmaW5lIFBBX0xPV0VSX0JJVFNfU0hJRlQJNgotCi0jZGVmaW5lIE1BQ1RSTF9SMAkJICAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgTUFDVFJMX1IwX1NISUZUCQkgICAgICAgICA2MwotI2RlZmluZSBNQUNUUkxfQUREUl9MRV9QVyAgICAgICAgICAgICAgICAweDcwMDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBNQUNUUkxfQUREUl9MRV9QV19TSElGVAkJIDYwCi0jZGVmaW5lIE1BQ1RSTF9DTURfUFcgICAgICAgICAgICAgICAgICAgIDB4MGYwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIE1BQ1RSTF9DTURfUFdfU0hJRlQJCSA1NgotI2RlZmluZSBNQUNUUkxfSEFMRl9NT0RFX1dSX01TRUxfRExZICAgICAweDAwZmMwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBNQUNUUkxfSEFMRl9NT0RFX1dSX01TRUxfRExZX1NISUZUIDUwCi0jZGVmaW5lIE1BQ1RSTF9IQUxGX01PREVfUkRfTVNFTF9ETFkgICAgIDB4MDAwM2YwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIE1BQ1RSTF9IQUxGX01PREVfUkRfTVNFTF9ETFlfU0hJRlQgNDQKLSNkZWZpbmUgTUFDVFJMX0hBTEZfTU9ERV9TRFJBTV9DVExfRExZICAgMHgwMDAwMGYwMDAwMDAwMDAwVUwKLSNkZWZpbmUgTUFDVFJMX0hBTEZfTU9ERV9TRFJBTV9DVExfRExZX1NISUZUIDQwCi0jZGVmaW5lIE1BQ1RSTF9IQUxGX01PREVfU0RSQU1fQ0xLX0RMWSAgIDB4MDAwMDAwZTAwMDAwMDAwMFVMCi0jZGVmaW5lIE1BQ1RSTF9IQUxGX01PREVfU0RSQU1fQ0xLX0RMWV9TSElGVCAzNwotI2RlZmluZSBNQUNUUkxfUjEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwMDAwMDAwMDBVTAotI2RlZmluZSBNQUNUUkxfUjFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMzYKLSNkZWZpbmUgTUFDVFJMX0JBTktTRUxfTl9ST1dBRERSX1NJWkVfQjMgMHgwMDAwMDAwZjAwMDAwMDAwVUwKLSNkZWZpbmUgTUFDVFJMX0JBTktTRUxfTl9ST1dBRERSX1NJWkVfQjNfU0hJRlQgMzIKLSNkZWZpbmUgTUFDVFJMX0VOQ19JTlRMVl9CMyAgICAgICAgICAgICAgMHgwMDAwMDAwMGY4MDAwMDAwVUwKLSNkZWZpbmUgTUFDVFJMX0VOQ19JTlRMVl9CM19TSElGVCAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgTUFDVFJMX0JBTktTRUxfTl9ST1dBRERSX1NJWkVfQjIgMHgwMDAwMDAwMDA3ODAwMDAwVUwKLSNkZWZpbmUgTUFDVFJMX0JBTktTRUxfTl9ST1dBRERSX1NJWkVfQjJfU0hJRlQgMjMKLSNkZWZpbmUgTUFDVFJMX0VOQ19JTlRMVl9CMiAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwN2MwMDAwVUwKLSNkZWZpbmUgTUFDVFJMX0VOQ19JTlRMVl9CMl9TSElGVCAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgTUFDVFJMX0JBTktTRUxfTl9ST1dBRERSX1NJWkVfQjEgMHgwMDAwMDAwMDAwMDNjMDAwVUwKLSNkZWZpbmUgTUFDVFJMX0JBTktTRUxfTl9ST1dBRERSX1NJWkVfQjFfU0hJRlQgMTQKLSNkZWZpbmUgTUFDVFJMX0VOQ19JTlRMVl9CMSAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAzZTAwVUwKLSNkZWZpbmUgTUFDVFJMX0VOQ19JTlRMVl9CMV9TSElGVCAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgTUFDVFJMX0JBTktTRUxfTl9ST1dBRERSX1NJWkVfQjAgMHgwMDAwMDAwMDAwMDAwMWUwVUwKLSNkZWZpbmUgTUFDVFJMX0JBTktTRUxfTl9ST1dBRERSX1NJWkVfQjBfU0hJRlQgIDUKLSNkZWZpbmUgTUFDVFJMX0VOQ19JTlRMVl9CMCAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDFmVUwKLSNkZWZpbmUgTUFDVFJMX0VOQ19JTlRMVl9CMF9TSElGVCAgICAgICAgICAgICAgIDAKLQotI2VuZGlmIC8qIF9TUEFSQzY0X0NITUNUUkxfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9jaG1jdHJsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NtdC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jbXQuaAppbmRleCA4NzBkYjU5Li5iMTliNDQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NtdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY210LmgKQEAgLTEsNTkgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfQ01UX0gKLSNkZWZpbmUgX1NQQVJDNjRfQ01UX0gKLQotLyogY210Lmg6IENoaXAgTXVsdGktVGhyZWFkaW5nIHJlZ2lzdGVyIGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKLSAqLwotCi0vKiBBU0lfQ09SRV9JRCAtIHByaXZhdGUgKi8KLSNkZWZpbmUgTFBfSUQJCTB4MDAwMDAwMDAwMDAwMDAxMFVMCi0jZGVmaW5lICBMUF9JRF9NQVgJMHgwMDAwMDAwMDAwM2YwMDAwVUwKLSNkZWZpbmUgIExQX0lEX0lECTB4MDAwMDAwMDAwMDAwMDAzZlVMCi0KLS8qIEFTSV9JTlRSX0lEIC0gcHJpdmF0ZSAqLwotI2RlZmluZSBMUF9JTlRSX0lECTB4MDAwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lICBMUF9JTlRSX0lEX0lECTB4MDAwMDAwMDAwMDAwMDNmZlVMCi0KLS8qIEFTSV9DRVNSX0lEIC0gcHJpdmF0ZSAqLwotI2RlZmluZSBDRVNSX0lECQkweDAwMDAwMDAwMDAwMDAwNDBVTAotI2RlZmluZSAgQ0VTUl9JRF9JRAkweDAwMDAwMDAwMDAwMDAwZmZVTAotCi0vKiBBU0lfQ09SRV9BVkFJTEFCTEUgLSBzaGFyZWQgKi8KLSNkZWZpbmUgTFBfQVZBSUwJMHgwMDAwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgIExQX0FWQUlMXzEJMHgwMDAwMDAwMDAwMDAwMDAyVUwKLSNkZWZpbmUgIExQX0FWQUlMXzAJMHgwMDAwMDAwMDAwMDAwMDAxVUwKLQotLyogQVNJX0NPUkVfRU5BQkxFX1NUQVRVUyAtIHNoYXJlZCAqLwotI2RlZmluZSBMUF9FTkFCX1NUQVQJMHgwMDAwMDAwMDAwMDAwMDEwVUwKLSNkZWZpbmUgIExQX0VOQUJfU1RBVF8xCTB4MDAwMDAwMDAwMDAwMDAwMlVMCi0jZGVmaW5lICBMUF9FTkFCX1NUQVRfMAkweDAwMDAwMDAwMDAwMDAwMDFVTAotCi0vKiBBU0lfQ09SRV9FTkFCTEUgLSBzaGFyZWQgKi8KLSNkZWZpbmUgTFBfRU5BQgkJMHgwMDAwMDAwMDAwMDAwMDIwVUwKLSNkZWZpbmUgIExQX0VOQUJfMQkweDAwMDAwMDAwMDAwMDAwMDJVTAotI2RlZmluZSAgTFBfRU5BQl8wCTB4MDAwMDAwMDAwMDAwMDAwMVVMCi0KLS8qIEFTSV9DT1JFX1JVTk5JTkcgLSBzaGFyZWQgKi8KLSNkZWZpbmUgTFBfUlVOTklOR19SVwkweDAwMDAwMDAwMDAwMDAwNTBVTAotI2RlZmluZSBMUF9SVU5OSU5HX1cxUwkweDAwMDAwMDAwMDAwMDAwNjBVTAotI2RlZmluZSBMUF9SVU5OSU5HX1cxQwkweDAwMDAwMDAwMDAwMDAwNjhVTAotI2RlZmluZSAgTFBfUlVOTklOR18xCTB4MDAwMDAwMDAwMDAwMDAwMlVMCi0jZGVmaW5lICBMUF9SVU5OSU5HXzAJMHgwMDAwMDAwMDAwMDAwMDAxVUwKLQotLyogQVNJX0NPUkVfUlVOTklOR19TVEFUIC0gc2hhcmVkICovCi0jZGVmaW5lIExQX1JVTl9TVEFUCTB4MDAwMDAwMDAwMDAwMDA1OFVMCi0jZGVmaW5lICBMUF9SVU5fU1RBVF8xCTB4MDAwMDAwMDAwMDAwMDAwMlVMCi0jZGVmaW5lICBMUF9SVU5fU1RBVF8wCTB4MDAwMDAwMDAwMDAwMDAwMVVMCi0KLS8qIEFTSV9YSVJfU1RFRVJJTkcgLSBzaGFyZWQgKi8KLSNkZWZpbmUgTFBfWElSX1NURUVSCTB4MDAwMDAwMDAwMDAwMDAzMFVMCi0jZGVmaW5lICBMUF9YSVJfU1RFRVJfMQkweDAwMDAwMDAwMDAwMDAwMDJVTAotI2RlZmluZSAgTFBfWElSX1NURUVSXzAJMHgwMDAwMDAwMDAwMDAwMDAxVUwKLQotLyogQVNJX0NNVF9FUlJPUl9TVEVFUklORyAtIHNoYXJlZCAqLwotI2RlZmluZSBDTVRfRVJfU1RFRVIJMHgwMDAwMDAwMDAwMDAwMDQwVUwKLSNkZWZpbmUgIENNVF9FUl9TVEVFUl8xCTB4MDAwMDAwMDAwMDAwMDAwMlVMCi0jZGVmaW5lICBDTVRfRVJfU1RFRVJfMAkweDAwMDAwMDAwMDAwMDAwMDFVTAotCi0jZW5kaWYgLyogX1NQQVJDNjRfQ01UX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvY210Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NvbXBhdC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jb21wYXQuaAppbmRleCBmMjYwYjU4Li44YzE1NWQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY29tcGF0LmgKQEAgLTEsMjQzICsxIEBACi0jaWZuZGVmIF9BU01fU1BBUkM2NF9DT01QQVRfSAotI2RlZmluZSBfQVNNX1NQQVJDNjRfQ09NUEFUX0gKLS8qCi0gKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcwotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2RlZmluZSBDT01QQVRfVVNFUl9IWgkxMDAKLQotdHlwZWRlZiB1MzIJCWNvbXBhdF9zaXplX3Q7Ci10eXBlZGVmIHMzMgkJY29tcGF0X3NzaXplX3Q7Ci10eXBlZGVmIHMzMgkJY29tcGF0X3RpbWVfdDsKLXR5cGVkZWYgczMyCQljb21wYXRfY2xvY2tfdDsKLXR5cGVkZWYgczMyCQljb21wYXRfcGlkX3Q7Ci10eXBlZGVmIHUxNgkJX19jb21wYXRfdWlkX3Q7Ci10eXBlZGVmIHUxNgkJX19jb21wYXRfZ2lkX3Q7Ci10eXBlZGVmIHUzMgkJX19jb21wYXRfdWlkMzJfdDsKLXR5cGVkZWYgdTMyCQlfX2NvbXBhdF9naWQzMl90OwotdHlwZWRlZiB1MTYJCWNvbXBhdF9tb2RlX3Q7Ci10eXBlZGVmIHUzMgkJY29tcGF0X2lub190OwotdHlwZWRlZiB1MTYJCWNvbXBhdF9kZXZfdDsKLXR5cGVkZWYgczMyCQljb21wYXRfb2ZmX3Q7Ci10eXBlZGVmIHM2NAkJY29tcGF0X2xvZmZfdDsKLXR5cGVkZWYgczE2CQljb21wYXRfbmxpbmtfdDsKLXR5cGVkZWYgdTE2CQljb21wYXRfaXBjX3BpZF90OwotdHlwZWRlZiBzMzIJCWNvbXBhdF9kYWRkcl90OwotdHlwZWRlZiB1MzIJCWNvbXBhdF9jYWRkcl90OwotdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJY29tcGF0X2ZzaWRfdDsKLXR5cGVkZWYgczMyCQljb21wYXRfa2V5X3Q7Ci10eXBlZGVmIHMzMgkJY29tcGF0X3RpbWVyX3Q7Ci0KLXR5cGVkZWYgczMyCQljb21wYXRfaW50X3Q7Ci10eXBlZGVmIHMzMgkJY29tcGF0X2xvbmdfdDsKLXR5cGVkZWYgczY0CQljb21wYXRfczY0OwotdHlwZWRlZiB1MzIJCWNvbXBhdF91aW50X3Q7Ci10eXBlZGVmIHUzMgkJY29tcGF0X3Vsb25nX3Q7Ci10eXBlZGVmIHU2NAkJY29tcGF0X3U2NDsKLQotc3RydWN0IGNvbXBhdF90aW1lc3BlYyB7Ci0JY29tcGF0X3RpbWVfdAl0dl9zZWM7Ci0JczMyCQl0dl9uc2VjOwotfTsKLQotc3RydWN0IGNvbXBhdF90aW1ldmFsIHsKLQljb21wYXRfdGltZV90CXR2X3NlYzsKLQlzMzIJCXR2X3VzZWM7Ci19OwotCi1zdHJ1Y3QgY29tcGF0X3N0YXQgewotCWNvbXBhdF9kZXZfdAlzdF9kZXY7Ci0JY29tcGF0X2lub190CXN0X2lubzsKLQljb21wYXRfbW9kZV90CXN0X21vZGU7Ci0JY29tcGF0X25saW5rX3QJc3Rfbmxpbms7Ci0JX19jb21wYXRfdWlkX3QJc3RfdWlkOwotCV9fY29tcGF0X2dpZF90CXN0X2dpZDsKLQljb21wYXRfZGV2X3QJc3RfcmRldjsKLQljb21wYXRfb2ZmX3QJc3Rfc2l6ZTsKLQljb21wYXRfdGltZV90CXN0X2F0aW1lOwotCWNvbXBhdF91bG9uZ190CXN0X2F0aW1lX25zZWM7Ci0JY29tcGF0X3RpbWVfdAlzdF9tdGltZTsKLQljb21wYXRfdWxvbmdfdAlzdF9tdGltZV9uc2VjOwotCWNvbXBhdF90aW1lX3QJc3RfY3RpbWU7Ci0JY29tcGF0X3Vsb25nX3QJc3RfY3RpbWVfbnNlYzsKLQljb21wYXRfb2ZmX3QJc3RfYmxrc2l6ZTsKLQljb21wYXRfb2ZmX3QJc3RfYmxvY2tzOwotCXUzMgkJX191bnVzZWQ0WzJdOwotfTsKLQotc3RydWN0IGNvbXBhdF9zdGF0NjQgewotCXVuc2lnbmVkIGxvbmcgbG9uZwlzdF9kZXY7Ci0KLQl1bnNpZ25lZCBsb25nIGxvbmcJc3RfaW5vOwotCi0JdW5zaWduZWQgaW50CXN0X21vZGU7Ci0JdW5zaWduZWQgaW50CXN0X25saW5rOwotCi0JdW5zaWduZWQgaW50CXN0X3VpZDsKLQl1bnNpZ25lZCBpbnQJc3RfZ2lkOwotCi0JdW5zaWduZWQgbG9uZyBsb25nCXN0X3JkZXY7Ci0KLQl1bnNpZ25lZCBjaGFyCV9fcGFkM1s4XTsKLQotCWxvbmcgbG9uZwlzdF9zaXplOwotCXVuc2lnbmVkIGludAlzdF9ibGtzaXplOwotCi0JdW5zaWduZWQgY2hhcglfX3BhZDRbOF07Ci0JdW5zaWduZWQgaW50CXN0X2Jsb2NrczsKLQotCXVuc2lnbmVkIGludAlzdF9hdGltZTsKLQl1bnNpZ25lZCBpbnQJc3RfYXRpbWVfbnNlYzsKLQotCXVuc2lnbmVkIGludAlzdF9tdGltZTsKLQl1bnNpZ25lZCBpbnQJc3RfbXRpbWVfbnNlYzsKLQotCXVuc2lnbmVkIGludAlzdF9jdGltZTsKLQl1bnNpZ25lZCBpbnQJc3RfY3RpbWVfbnNlYzsKLQotCXVuc2lnbmVkIGludAlfX3VudXNlZDQ7Ci0JdW5zaWduZWQgaW50CV9fdW51c2VkNTsKLX07Ci0KLXN0cnVjdCBjb21wYXRfZmxvY2sgewotCXNob3J0CQlsX3R5cGU7Ci0Jc2hvcnQJCWxfd2hlbmNlOwotCWNvbXBhdF9vZmZfdAlsX3N0YXJ0OwotCWNvbXBhdF9vZmZfdAlsX2xlbjsKLQljb21wYXRfcGlkX3QJbF9waWQ7Ci0Jc2hvcnQJCV9fdW51c2VkOwotfTsKLQotI2RlZmluZSBGX0dFVExLNjQJMTIKLSNkZWZpbmUgRl9TRVRMSzY0CTEzCi0jZGVmaW5lIEZfU0VUTEtXNjQJMTQKLQotc3RydWN0IGNvbXBhdF9mbG9jazY0IHsKLQlzaG9ydAkJbF90eXBlOwotCXNob3J0CQlsX3doZW5jZTsKLQljb21wYXRfbG9mZl90CWxfc3RhcnQ7Ci0JY29tcGF0X2xvZmZfdAlsX2xlbjsKLQljb21wYXRfcGlkX3QJbF9waWQ7Ci0Jc2hvcnQJCV9fdW51c2VkOwotfTsKLQotc3RydWN0IGNvbXBhdF9zdGF0ZnMgewotCWludAkJZl90eXBlOwotCWludAkJZl9ic2l6ZTsKLQlpbnQJCWZfYmxvY2tzOwotCWludAkJZl9iZnJlZTsKLQlpbnQJCWZfYmF2YWlsOwotCWludAkJZl9maWxlczsKLQlpbnQJCWZfZmZyZWU7Ci0JY29tcGF0X2ZzaWRfdAlmX2ZzaWQ7Ci0JaW50CQlmX25hbWVsZW47CS8qIFN1bk9TIGlnbm9yZXMgdGhpcyBmaWVsZC4gKi8KLQlpbnQJCWZfZnJzaXplOwotCWludAkJZl9zcGFyZVs1XTsKLX07Ci0KLSNkZWZpbmUgQ09NUEFUX1JMSU1fSU5GSU5JVFkgMHg3ZmZmZmZmZgotCi10eXBlZGVmIHUzMgkJY29tcGF0X29sZF9zaWdzZXRfdDsKLQotI2RlZmluZSBfQ09NUEFUX05TSUcJCTY0Ci0jZGVmaW5lIF9DT01QQVRfTlNJR19CUFcJMzIKLQotdHlwZWRlZiB1MzIJCWNvbXBhdF9zaWdzZXRfd29yZDsKLQotI2RlZmluZSBDT01QQVRfT0ZGX1RfTUFYCTB4N2ZmZmZmZmYKLSNkZWZpbmUgQ09NUEFUX0xPRkZfVF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTAotCi0vKgotICogQSBwb2ludGVyIHBhc3NlZCBpbiBmcm9tIHVzZXIgbW9kZS4gVGhpcyBzaG91bGQgbm90Ci0gKiBiZSB1c2VkIGZvciBzeXNjYWxsIHBhcmFtZXRlcnMsIGp1c3QgZGVjbGFyZSB0aGVtCi0gKiBhcyBwb2ludGVycyBiZWNhdXNlIHRoZSBzeXNjYWxsIGVudHJ5IGNvZGUgd2lsbCBoYXZlCi0gKiBhcHByb3ByaWF0ZWx5IGNvbnZlcnRlZCB0aGVtIGFscmVhZHkuCi0gKi8KLXR5cGVkZWYJdTMyCQljb21wYXRfdXB0cl90OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICpjb21wYXRfcHRyKGNvbXBhdF91cHRyX3QgdXB0cikKLXsKLQlyZXR1cm4gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpdXB0cjsKLX0KLQotc3RhdGljIGlubGluZSBjb21wYXRfdXB0cl90IHB0cl90b19jb21wYXQodm9pZCBfX3VzZXIgKnVwdHIpCi17Ci0JcmV0dXJuICh1MzIpKHVuc2lnbmVkIGxvbmcpdXB0cjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UobG9uZyBsZW4pCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmtyZWdzOwotCXVuc2lnbmVkIGxvbmcgdXNwID0gcmVncy0+dV9yZWdzW1VSRUdfSTZdOwotCi0JaWYgKCEodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSkKLQkJdXNwICs9IFNUQUNLX0JJQVM7Ci0JZWxzZQotCQl1c3AgJj0gMHhmZmZmZmZmZlVMOwotCi0JdXNwIC09IGxlbjsKLQl1c3AgJj0gfjB4N1VMOwotCi0JcmV0dXJuICh2b2lkIF9fdXNlciAqKSB1c3A7Ci19Ci0KLXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSB7Ci0JY29tcGF0X2tleV90IGtleTsKLQlfX2NvbXBhdF91aWQzMl90IHVpZDsKLQlfX2NvbXBhdF9naWQzMl90IGdpZDsKLQlfX2NvbXBhdF91aWQzMl90IGN1aWQ7Ci0JX19jb21wYXRfZ2lkMzJfdCBjZ2lkOwotCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKLQljb21wYXRfbW9kZV90IG1vZGU7Ci0JdW5zaWduZWQgc2hvcnQgX19wYWQyOwotCXVuc2lnbmVkIHNob3J0IHNlcTsKLQl1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsJLyogeWVzIHRoZXkgcmVhbGx5IGFyZSA2NGJpdCBwYWRzICovCi0JdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7Ci19OwotCi1zdHJ1Y3QgY29tcGF0X3NlbWlkNjRfZHMgewotCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzZW1fcGVybTsKLQl1bnNpZ25lZCBpbnQJX19wYWQxOwotCWNvbXBhdF90aW1lX3QJc2VtX290aW1lOwotCXVuc2lnbmVkIGludAlfX3BhZDI7Ci0JY29tcGF0X3RpbWVfdAlzZW1fY3RpbWU7Ci0JdTMyCQlzZW1fbnNlbXM7Ci0JdTMyCQlfX3VudXNlZDE7Ci0JdTMyCQlfX3VudXNlZDI7Ci19OwotCi1zdHJ1Y3QgY29tcGF0X21zcWlkNjRfZHMgewotCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBtc2dfcGVybTsKLQl1bnNpZ25lZCBpbnQJX19wYWQxOwotCWNvbXBhdF90aW1lX3QJbXNnX3N0aW1lOwotCXVuc2lnbmVkIGludAlfX3BhZDI7Ci0JY29tcGF0X3RpbWVfdAltc2dfcnRpbWU7Ci0JdW5zaWduZWQgaW50CV9fcGFkMzsKLQljb21wYXRfdGltZV90CW1zZ19jdGltZTsKLQl1bnNpZ25lZCBpbnQJbXNnX2NieXRlczsKLQl1bnNpZ25lZCBpbnQJbXNnX3FudW07Ci0JdW5zaWduZWQgaW50CW1zZ19xYnl0ZXM7Ci0JY29tcGF0X3BpZF90CW1zZ19sc3BpZDsKLQljb21wYXRfcGlkX3QJbXNnX2xycGlkOwotCXVuc2lnbmVkIGludAlfX3VudXNlZDE7Ci0JdW5zaWduZWQgaW50CV9fdW51c2VkMjsKLX07Ci0KLXN0cnVjdCBjb21wYXRfc2htaWQ2NF9kcyB7Ci0Jc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHNobV9wZXJtOwotCXVuc2lnbmVkIGludAlfX3BhZDE7Ci0JY29tcGF0X3RpbWVfdAlzaG1fYXRpbWU7Ci0JdW5zaWduZWQgaW50CV9fcGFkMjsKLQljb21wYXRfdGltZV90CXNobV9kdGltZTsKLQl1bnNpZ25lZCBpbnQJX19wYWQzOwotCWNvbXBhdF90aW1lX3QJc2htX2N0aW1lOwotCWNvbXBhdF9zaXplX3QJc2htX3NlZ3N6OwotCWNvbXBhdF9waWRfdAlzaG1fY3BpZDsKLQljb21wYXRfcGlkX3QJc2htX2xwaWQ7Ci0JdW5zaWduZWQgaW50CXNobV9uYXR0Y2g7Ci0JdW5zaWduZWQgaW50CV9fdW51c2VkMTsKLQl1bnNpZ25lZCBpbnQJX191bnVzZWQyOwotfTsKLQotI2VuZGlmIC8qIF9BU01fU1BBUkM2NF9DT01QQVRfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9jb21wYXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY29tcGF0X3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jb21wYXRfc2lnbmFsLmgKaW5kZXggYjc1OWVhYi4uNzE4N2RjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jb21wYXRfc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jb21wYXRfc2lnbmFsLmgKQEAgLTEsMjkgKzEgQEAKLSNpZm5kZWYgX0NPTVBBVF9TSUdOQUxfSAotI2RlZmluZSBfQ09NUEFUX1NJR05BTF9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLSNpbmNsdWRlIDxhc20vc2lnbmFsLmg+Ci0KLSNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdHJ1Y3QgX19uZXdfc2lnYWN0aW9uMzIgewotCXVuc2lnbmVkCQlzYV9oYW5kbGVyOwotCXVuc2lnbmVkIGludCAgICAJc2FfZmxhZ3M7Ci0JdW5zaWduZWQJCXNhX3Jlc3RvcmVyOyAgICAgLyogbm90IHVzZWQgYnkgTGludXgvU1BBUkMgeWV0ICovCi0JY29tcGF0X3NpZ3NldF90IAlzYV9tYXNrOwotfTsKLQotc3RydWN0IF9fb2xkX3NpZ2FjdGlvbjMyIHsKLQl1bnNpZ25lZAkJc2FfaGFuZGxlcjsKLQljb21wYXRfb2xkX3NpZ3NldF90ICAJc2FfbWFzazsKLQl1bnNpZ25lZCBpbnQgICAgCXNhX2ZsYWdzOwotCXVuc2lnbmVkCQlzYV9yZXN0b3JlcjsgICAgIC8qIG5vdCB1c2VkIGJ5IExpbnV4L1NQQVJDIHlldCAqLwotfTsKLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2szMiB7Ci0JdTMyCQkJc3Nfc3A7Ci0JaW50CQkJc3NfZmxhZ3M7Ci0JY29tcGF0X3NpemVfdAkJc3Nfc2l6ZTsKLX0gc3RhY2tfdDMyOwotI2VuZGlmCi0KLSNlbmRpZiAvKiAhKF9DT01QQVRfU0lHTkFMX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2NvbXBhdF9zaWduYWwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jcHVkYXRhLmgKaW5kZXggNTMyOTc1ZS4uMzIyMGUxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jcHVkYXRhLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jcHVkYXRhLmgKQEAgLTEsMjQwICsxIEBACi0vKiBjcHVkYXRhLmg6IFBlci1jcHUgcGFyYW1ldGVycy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfQ1BVREFUQV9ICi0jZGVmaW5lIF9TUEFSQzY0X0NQVURBVEFfSAotCi0jaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KLSNpbmNsdWRlIDxhc20vYXNpLmg+Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQkvKiBEY2FjaGUgbGluZSAxICovCi0JdW5zaWduZWQgaW50CV9fc29mdGlycV9wZW5kaW5nOyAvKiBtdXN0IGJlIDFzdCwgc2VlIHJ0cmFwLlMgKi8KLQl1bnNpZ25lZCBpbnQJX19wYWQwOwotCXVuc2lnbmVkIGxvbmcJY2xvY2tfdGljazsJLyogJXRpY2sncyBwZXIgc2Vjb25kICovCi0JdW5zaWduZWQgbG9uZwlfX3BhZDsKLQl1bnNpZ25lZCBpbnQJX19wYWQxOwotCXVuc2lnbmVkIGludAlfX3BhZDI7Ci0KLQkvKiBEY2FjaGUgbGluZSAyLCByYXJlbHkgdXNlZCAqLwotCXVuc2lnbmVkIGludAlkY2FjaGVfc2l6ZTsKLQl1bnNpZ25lZCBpbnQJZGNhY2hlX2xpbmVfc2l6ZTsKLQl1bnNpZ25lZCBpbnQJaWNhY2hlX3NpemU7Ci0JdW5zaWduZWQgaW50CWljYWNoZV9saW5lX3NpemU7Ci0JdW5zaWduZWQgaW50CWVjYWNoZV9zaXplOwotCXVuc2lnbmVkIGludAllY2FjaGVfbGluZV9zaXplOwotCWludAkJY29yZV9pZDsKLQlpbnQJCXByb2NfaWQ7Ci19IGNwdWluZm9fc3BhcmM7Ci0KLURFQ0xBUkVfUEVSX0NQVShjcHVpbmZvX3NwYXJjLCBfX2NwdV9kYXRhKTsKLSNkZWZpbmUgY3B1X2RhdGEoX19jcHUpCQlwZXJfY3B1KF9fY3B1X2RhdGEsIChfX2NwdSkpCi0jZGVmaW5lIGxvY2FsX2NwdV9kYXRhKCkJX19nZXRfY3B1X3ZhcihfX2NwdV9kYXRhKQotCi0vKiBUcmFwIGhhbmRsaW5nIGNvZGUgbmVlZHMgdG8gZ2V0IGF0IGEgZmV3IGNyaXRpY2FsIHZhbHVlcyB1cG9uCi0gKiB0cmFwIGVudHJ5IGFuZCB0byBwcm9jZXNzIFRTQiBtaXNzZXMuICBUaGVzZSBjYW5ub3QgYmUgaW4gdGhlCi0gKiBwZXJfY3B1KCkgYXJlYSBhcyB3ZSByZWFsbHkgbmVlZCB0byBsb2NrIHRoZW0gaW50byB0aGUgVExCIGFuZAotICogdGh1cyBtYWtlIHRoZW0gcGFydCBvZiB0aGUgbWFpbiBrZXJuZWwgaW1hZ2UuICBBcyBhIHJlc3VsdCB3ZQotICogdHJ5IHRvIG1ha2UgdGhpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZS4KLSAqCi0gKiBUaGlzIGlzIHBhZGRlZCBvdXQgYW5kIGFsaWduZWQgdG8gNjQtYnl0ZXMgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZwotICogb24gU01QLgotICovCi0KLS8qIElmIHlvdSBtb2RpZnkgdGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIHBsZWFzZSB1cGRhdGUKLSAqIFRSQVBfQkxPQ0tfU1pfU0hJRlQgYmVsb3cuCi0gKi8KLXN0cnVjdCB0aHJlYWRfaW5mbzsKLXN0cnVjdCB0cmFwX3Blcl9jcHUgewotLyogRC1jYWNoZSBsaW5lIDE6IEJhc2ljIHRocmVhZCBpbmZvcm1hdGlvbiwgY3B1IGFuZCBkZXZpY2UgbW9uZG8gcXVldWVzICovCi0Jc3RydWN0IHRocmVhZF9pbmZvCSp0aHJlYWQ7Ci0JdW5zaWduZWQgbG9uZwkJcGdkX3BhZGRyOwotCXVuc2lnbmVkIGxvbmcJCWNwdV9tb25kb19wYTsKLQl1bnNpZ25lZCBsb25nCQlkZXZfbW9uZG9fcGE7Ci0KLS8qIEQtY2FjaGUgbGluZSAyOiBFcnJvciBNb25kbyBRdWV1ZSBhbmQga2VybmVsIGJ1ZmZlciBwb2ludGVycyAqLwotCXVuc2lnbmVkIGxvbmcJCXJlc3VtX21vbmRvX3BhOwotCXVuc2lnbmVkIGxvbmcJCXJlc3VtX2tlcm5lbF9idWZfcGE7Ci0JdW5zaWduZWQgbG9uZwkJbm9ucmVzdW1fbW9uZG9fcGE7Ci0JdW5zaWduZWQgbG9uZwkJbm9ucmVzdW1fa2VybmVsX2J1Zl9wYTsKLQotLyogRGNhY2hlIGxpbmVzIDMsIDQsIDUsIGFuZCA2OiBIeXBlcnZpc29yIEZhdWx0IFN0YXR1cyAqLwotCXN0cnVjdCBodl9mYXVsdF9zdGF0dXMJZmF1bHRfaW5mbzsKLQotLyogRGNhY2hlIGxpbmUgNzogUGh5c2ljYWwgYWRkcmVzc2VzIG9mIENQVSBzZW5kIG1vbmRvIGJsb2NrIGFuZCBDUFUgbGlzdC4gICovCi0JdW5zaWduZWQgbG9uZwkJY3B1X21vbmRvX2Jsb2NrX3BhOwotCXVuc2lnbmVkIGxvbmcJCWNwdV9saXN0X3BhOwotCXVuc2lnbmVkIGxvbmcJCXRzYl9odWdlOwotCXVuc2lnbmVkIGxvbmcJCXRzYl9odWdlX3RlbXA7Ci0KLS8qIERjYWNoZSBsaW5lIDg6IElSUSB3b3JrIGxpc3QsIGFuZCBrZWVwIHRyYXBfYmxvY2sgYSBwb3dlci1vZi0yIGluIHNpemUuICAqLwotCXVuc2lnbmVkIGxvbmcJCWlycV93b3JrbGlzdF9wYTsKLQl1bnNpZ25lZCBpbnQJCWNwdV9tb25kb19xbWFzazsKLQl1bnNpZ25lZCBpbnQJCWRldl9tb25kb19xbWFzazsKLQl1bnNpZ25lZCBpbnQJCXJlc3VtX3FtYXNrOwotCXVuc2lnbmVkIGludAkJbm9ucmVzdW1fcW1hc2s7Ci0Jdm9pZAkJCSpoZGVzYzsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKTsKLWV4dGVybiBzdHJ1Y3QgdHJhcF9wZXJfY3B1IHRyYXBfYmxvY2tbTlJfQ1BVU107Ci1leHRlcm4gdm9pZCBpbml0X2N1cl9jcHVfdHJhcChzdHJ1Y3QgdGhyZWFkX2luZm8gKik7Ci1leHRlcm4gdm9pZCBzZXR1cF90YmEodm9pZCk7Ci1leHRlcm4gaW50IG5jcHVzX3Byb2JlZDsKLWV4dGVybiB2b2lkIF9faW5pdCBjcHVfcHJvYmUodm9pZCk7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3A7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIHJlYWxfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOwotCi1zdHJ1Y3QgY3B1aWRfcGF0Y2hfZW50cnkgewotCXVuc2lnbmVkIGludAlhZGRyOwotCXVuc2lnbmVkIGludAljaGVldGFoX3NhZmFyaVs0XTsKLQl1bnNpZ25lZCBpbnQJY2hlZXRhaF9qYnVzWzRdOwotCXVuc2lnbmVkIGludAlzdGFyZmlyZVs0XTsKLQl1bnNpZ25lZCBpbnQJc3VuNHZbNF07Ci19OwotZXh0ZXJuIHN0cnVjdCBjcHVpZF9wYXRjaF9lbnRyeSBfX2NwdWlkX3BhdGNoLCBfX2NwdWlkX3BhdGNoX2VuZDsKLQotc3RydWN0IHN1bjR2XzFpbnNuX3BhdGNoX2VudHJ5IHsKLQl1bnNpZ25lZCBpbnQJYWRkcjsKLQl1bnNpZ25lZCBpbnQJaW5zbjsKLX07Ci1leHRlcm4gc3RydWN0IHN1bjR2XzFpbnNuX3BhdGNoX2VudHJ5IF9fc3VuNHZfMWluc25fcGF0Y2gsCi0JX19zdW40dl8xaW5zbl9wYXRjaF9lbmQ7Ci0KLXN0cnVjdCBzdW40dl8yaW5zbl9wYXRjaF9lbnRyeSB7Ci0JdW5zaWduZWQgaW50CWFkZHI7Ci0JdW5zaWduZWQgaW50CWluc25zWzJdOwotfTsKLWV4dGVybiBzdHJ1Y3Qgc3VuNHZfMmluc25fcGF0Y2hfZW50cnkgX19zdW40dl8yaW5zbl9wYXRjaCwKLQlfX3N1bjR2XzJpbnNuX3BhdGNoX2VuZDsKLQotI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotCi0jZGVmaW5lIFRSQVBfUEVSX0NQVV9USFJFQUQJCTB4MDAKLSNkZWZpbmUgVFJBUF9QRVJfQ1BVX1BHRF9QQUREUgkJMHgwOAotI2RlZmluZSBUUkFQX1BFUl9DUFVfQ1BVX01PTkRPX1BBCTB4MTAKLSNkZWZpbmUgVFJBUF9QRVJfQ1BVX0RFVl9NT05ET19QQQkweDE4Ci0jZGVmaW5lIFRSQVBfUEVSX0NQVV9SRVNVTV9NT05ET19QQQkweDIwCi0jZGVmaW5lIFRSQVBfUEVSX0NQVV9SRVNVTV9LQlVGX1BBCTB4MjgKLSNkZWZpbmUgVFJBUF9QRVJfQ1BVX05PTlJFU1VNX01PTkRPX1BBCTB4MzAKLSNkZWZpbmUgVFJBUF9QRVJfQ1BVX05PTlJFU1VNX0tCVUZfUEEJMHgzOAotI2RlZmluZSBUUkFQX1BFUl9DUFVfRkFVTFRfSU5GTwkJMHg0MAotI2RlZmluZSBUUkFQX1BFUl9DUFVfQ1BVX01PTkRPX0JMT0NLX1BBCTB4YzAKLSNkZWZpbmUgVFJBUF9QRVJfQ1BVX0NQVV9MSVNUX1BBCTB4YzgKLSNkZWZpbmUgVFJBUF9QRVJfQ1BVX1RTQl9IVUdFCQkweGQwCi0jZGVmaW5lIFRSQVBfUEVSX0NQVV9UU0JfSFVHRV9URU1QCTB4ZDgKLSNkZWZpbmUgVFJBUF9QRVJfQ1BVX0lSUV9XT1JLTElTVF9QQQkweGUwCi0jZGVmaW5lIFRSQVBfUEVSX0NQVV9DUFVfTU9ORE9fUU1BU0sJMHhlOAotI2RlZmluZSBUUkFQX1BFUl9DUFVfREVWX01PTkRPX1FNQVNLCTB4ZWMKLSNkZWZpbmUgVFJBUF9QRVJfQ1BVX1JFU1VNX1FNQVNLCTB4ZjAKLSNkZWZpbmUgVFJBUF9QRVJfQ1BVX05PTlJFU1VNX1FNQVNLCTB4ZjQKLQotI2RlZmluZSBUUkFQX0JMT0NLX1NaX1NISUZUCQk4Ci0KLSNpbmNsdWRlIDxhc20vc2NyYXRjaHBhZC5oPgotCi0jZGVmaW5lIF9fR0VUX0NQVUlEKFJFRykJCQkJXAotCS8qIFNwaXRmaXJlIGltcGxlbWVudGF0aW9uIChkZWZhdWx0KS4gKi8JXAotNjYxOglsZHhhCQlbJWcwXSBBU0lfVVBBX0NPTkZJRywgUkVHOwlcCi0Jc3JseAkJUkVHLCAxNywgUkVHOwkJCVwKLQkgYW5kCQlSRUcsIDB4MWYsIFJFRzsJCQlcCi0Jbm9wOwkJCQkJCVwKLQkuc2VjdGlvbgkuY3B1aWRfcGF0Y2gsICJheCI7CQlcCi0JLyogSW5zdHJ1Y3Rpb24gbG9jYXRpb24uICovCQkJXAotCS53b3JkCQk2NjFiOwkJCQlcCi0JLyogQ2hlZXRhaCBTYWZhcmkgaW1wbGVtZW50YXRpb24uICovCQlcCi0JbGR4YQkJWyVnMF0gQVNJX1NBRkFSSV9DT05GSUcsIFJFRzsJXAotCXNybHgJCVJFRywgMTcsIFJFRzsJCQlcCi0JYW5kCQlSRUcsIDB4M2ZmLCBSRUc7CQlcCi0Jbm9wOwkJCQkJCVwKLQkvKiBDaGVldGFoIEpCVVMgaW1wbGVtZW50YXRpb24uICovCQlcCi0JbGR4YQkJWyVnMF0gQVNJX0pCVVNfQ09ORklHLCBSRUc7CVwKLQlzcmx4CQlSRUcsIDE3LCBSRUc7CQkJXAotCWFuZAkJUkVHLCAweDFmLCBSRUc7CQkJXAotCW5vcDsJCQkJCQlcCi0JLyogU3RhcmZpcmUgaW1wbGVtZW50YXRpb24uICovCQkJXAotCXNldGhpCQklaGkoMHgxZmZmNDAwMDBkMCA+PiA5KSwgUkVHOwlcCi0Jc2xseAkJUkVHLCA5LCBSRUc7CQkJXAotCW9yCQlSRUcsIDB4ZDAsIFJFRzsJCQlcCi0JbGR1d2EJCVtSRUddIEFTSV9QSFlTX0JZUEFTU19FQ19FLCBSRUc7XAotCS8qIHN1bjR2IGltcGxlbWVudGF0aW9uLiAqLwkJCVwKLQltb3YJCVNDUkFUQ0hQQURfQ1BVSUQsIFJFRzsJCVwKLQlsZHhhCQlbUkVHXSBBU0lfU0NSQVRDSFBBRCwgUkVHOwlcCi0Jbm9wOwkJCQkJCVwKLQlub3A7CQkJCQkJXAotCS5wcmV2aW91czsKLQotI2lmZGVmIENPTkZJR19TTVAKLQotI2RlZmluZSBUUkFQX0xPQURfVFJBUF9CTE9DSyhERVNULCBUTVApCQlcCi0JX19HRVRfQ1BVSUQoVE1QKQkJCVwKLQlzZXRoaQklaGkodHJhcF9ibG9jayksIERFU1Q7CQlcCi0Jc2xseAlUTVAsIFRSQVBfQkxPQ0tfU1pfU0hJRlQsIFRNUDsJXAotCW9yCURFU1QsICVsbyh0cmFwX2Jsb2NrKSwgREVTVDsJXAotCWFkZAlERVNULCBUTVAsIERFU1Q7CQlcCi0KLS8qIENsb2JiZXJzIFRNUCwgY3VycmVudCBhZGRyZXNzIHNwYWNlIFBHRCBwaHlzIGFkZHJlc3MgaW50byBERVNULiAgKi8KLSNkZWZpbmUgVFJBUF9MT0FEX1BHRF9QSFlTKERFU1QsIFRNUCkJCVwKLQlUUkFQX0xPQURfVFJBUF9CTE9DSyhERVNULCBUTVApCQlcCi0JbGR4CVtERVNUICsgVFJBUF9QRVJfQ1BVX1BHRF9QQUREUl0sIERFU1Q7Ci0KLS8qIENsb2JiZXJzIFRNUCwgbG9hZHMgbG9jYWwgcHJvY2Vzc29yJ3MgSVJRIHdvcmsgYXJlYSBpbnRvIERFU1QuICAqLwotI2RlZmluZSBUUkFQX0xPQURfSVJRX1dPUktfUEEoREVTVCwgVE1QKQlcCi0JVFJBUF9MT0FEX1RSQVBfQkxPQ0soREVTVCwgVE1QKQkJXAotCWFkZAlERVNULCBUUkFQX1BFUl9DUFVfSVJRX1dPUktMSVNUX1BBLCBERVNUOwotCi0vKiBDbG9iYmVycyBUTVAsIGxvYWRzIERFU1Qgd2l0aCBjdXJyZW50IHRocmVhZCBpbmZvIHBvaW50ZXIuICAqLwotI2RlZmluZSBUUkFQX0xPQURfVEhSRUFEX1JFRyhERVNULCBUTVApCQlcCi0JVFJBUF9MT0FEX1RSQVBfQkxPQ0soREVTVCwgVE1QKQkJXAotCWxkeAlbREVTVCArIFRSQVBfUEVSX0NQVV9USFJFQURdLCBERVNUOwotCi0vKiBHaXZlbiB0aGUgY3VycmVudCB0aHJlYWQgaW5mbyBwb2ludGVyIGluIFRIUiwgbG9hZCB0aGUgcGVyLWNwdQotICogYXJlYSBiYXNlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3NvciBpbnRvIERFU1QuICBSRUcxLCBSRUcyLCBhbmQgUkVHMyBhcmUKLSAqIGNsb2JiZXJlZC4KLSAqCi0gKiBZb3UgYWJzb2x1dGVseSBjYW5ub3QgdXNlIERFU1QgYXMgYSB0ZW1wb3JhcnkgaW4gdGhpcyBjb2RlLiAgVGhlCi0gKiByZWFzb24gaXMgdGhhdCB0cmFwcyBjYW4gaGFwcGVuIGR1cmluZyBleGVjdXRpb24sIGFuZCByZXR1cm4gZnJvbQotICogdHJhcCB3aWxsIGxvYWQgdGhlIGZ1bGx5IHJlc29sdmVkIERFU1QgcGVyLWNwdSBiYXNlLiAgVGhpcyBjYW4gY29ycnVwdAotICogdGhlIGNhbGN1bGF0aW9ucyBkb25lIGJ5IHRoZSBtYWNybyBtaWQtc3RyZWFtLgotICovCi0jZGVmaW5lIExPQURfUEVSX0NQVV9CQVNFKERFU1QsIFRIUiwgUkVHMSwgUkVHMiwgUkVHMykJXAotCWxkdWgJW1RIUiArIFRJX0NQVV0sIFJFRzE7CQkJXAotCXNldGhpCSVoaShfX3Blcl9jcHVfc2hpZnQpLCBSRUczOwkJXAotCXNldGhpCSVoaShfX3Blcl9jcHVfYmFzZSksIFJFRzI7CQlcCi0JbGR4CVtSRUczICsgJWxvKF9fcGVyX2NwdV9zaGlmdCldLCBSRUczOwlcCi0JbGR4CVtSRUcyICsgJWxvKF9fcGVyX2NwdV9iYXNlKV0sIFJFRzI7CVwKLQlzbGx4CVJFRzEsIFJFRzMsIFJFRzM7CQkJXAotCWFkZAlSRUczLCBSRUcyLCBERVNUOwotCi0jZWxzZQotCi0jZGVmaW5lIFRSQVBfTE9BRF9UUkFQX0JMT0NLKERFU1QsIFRNUCkJCVwKLQlzZXRoaQklaGkodHJhcF9ibG9jayksIERFU1Q7CQlcCi0Jb3IJREVTVCwgJWxvKHRyYXBfYmxvY2spLCBERVNUOwlcCi0KLS8qIFVuaXByb2Nlc3NvciB2ZXJzaW9ucywgd2Uga25vdyB0aGUgY3B1aWQgaXMgemVyby4gICovCi0jZGVmaW5lIFRSQVBfTE9BRF9QR0RfUEhZUyhERVNULCBUTVApCQlcCi0JVFJBUF9MT0FEX1RSQVBfQkxPQ0soREVTVCwgVE1QKQkJXAotCWxkeAlbREVTVCArIFRSQVBfUEVSX0NQVV9QR0RfUEFERFJdLCBERVNUOwotCi0vKiBDbG9iYmVycyBUTVAsIGxvYWRzIGxvY2FsIHByb2Nlc3NvcidzIElSUSB3b3JrIGFyZWEgaW50byBERVNULiAgKi8KLSNkZWZpbmUgVFJBUF9MT0FEX0lSUV9XT1JLX1BBKERFU1QsIFRNUCkJXAotCVRSQVBfTE9BRF9UUkFQX0JMT0NLKERFU1QsIFRNUCkJCVwKLQlhZGQJREVTVCwgVFJBUF9QRVJfQ1BVX0lSUV9XT1JLTElTVF9QQSwgREVTVDsKLQotI2RlZmluZSBUUkFQX0xPQURfVEhSRUFEX1JFRyhERVNULCBUTVApCQlcCi0JVFJBUF9MT0FEX1RSQVBfQkxPQ0soREVTVCwgVE1QKQkJXAotCWxkeAlbREVTVCArIFRSQVBfUEVSX0NQVV9USFJFQURdLCBERVNUOwotCi0vKiBObyBwZXItY3B1IGFyZWFzIG9uIHVuaXByb2Nlc3Nvciwgc28gbm8gbmVlZCB0byBsb2FkIERFU1QuICAqLwotI2RlZmluZSBMT0FEX1BFUl9DUFVfQkFTRShERVNULCBUSFIsIFJFRzEsIFJFRzIsIFJFRzMpCi0KLSNlbmRpZiAvKiAhKENPTkZJR19TTVApICovCi0KLSNlbmRpZiAvKiBfU1BBUkM2NF9DUFVEQVRBX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvY3B1ZGF0YS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kY3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGNyLmgKaW5kZXggNjIwYzliYS4uZDY3NjEzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kY3IuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Rjci5oCkBAIC0xLDE0ICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X0RDUl9ICi0jZGVmaW5lIF9TUEFSQzY0X0RDUl9ICi0KLS8qIFVsdHJhU3BhcmMtSUlJL0lJSSsgRGlzcGF0Y2ggQ29udHJvbCBSZWdpc3RlciwgQVNSIDB4MTIgKi8KLSNkZWZpbmUgRENSX0RQRQkJMHgwMDAwMDAwMDAwMDAxMDAwIC8qIElJSSs6IEQkIFBhcml0eSBFcnJvciBFbmFibGUJKi8KLSNkZWZpbmUgRENSX09CUwkJMHgwMDAwMDAwMDAwMDAwZmMwIC8qIE9ic2VydmFiaWxpdHkgQnVzIENvbnRyb2xzCSovCi0jZGVmaW5lIERDUl9CUEUJCTB4MDAwMDAwMDAwMDAwMDAyMCAvKiBCcmFuY2ggUHJlZGljdCBFbmFibGUJCSovCi0jZGVmaW5lIERDUl9SUEUJCTB4MDAwMDAwMDAwMDAwMDAxMCAvKiBSZXR1cm4gQWRkcmVzcyBQcmVkaWN0aW9uIEVuYWJsZQkqLwotI2RlZmluZSBEQ1JfU0kJCTB4MDAwMDAwMDAwMDAwMDAwOCAvKiBTaW5nbGUgSW5zdHJ1Y3Rpb24gRGlzYWJsZQkqLwotI2RlZmluZSBEQ1JfSVBFCQkweDAwMDAwMDAwMDAwMDAwMDQgLyogSUlJKzogSSQgUGFyaXR5IEVycm9yIEVuYWJsZQkqLwotI2RlZmluZSBEQ1JfSUZQT0UJMHgwMDAwMDAwMDAwMDAwMDAyIC8qIElSUSBGUCBPcGVyYXRpb24gRW5hYmxlCQkqLwotI2RlZmluZSBEQ1JfTVMJCTB4MDAwMDAwMDAwMDAwMDAwMSAvKiBNdWx0aS1TY2FsYXIgZGlzcGF0Y2gJCSovCi0KLSNlbmRpZiAvKiBfU1BBUkM2NF9EQ1JfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9kY3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGN1LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RjdS5oCmluZGV4IDBmNzA0ZTEwLi4yODg1M2Y0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2RjdS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGN1LmgKQEAgLTEsMjcgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfRENVX0gKLSNkZWZpbmUgX1NQQVJDNjRfRENVX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+Ci0KLS8qIFVsdHJhU3BhcmMtSUlJIERhdGEgQ2FjaGUgVW5pdCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIERDVV9DUAlfQUMoMHgwMDAyMDAwMDAwMDAwMDAwLFVMKSAvKiBQaHlzIENhY2hlIEVuYWJsZSB3L28gbW11CSovCi0jZGVmaW5lIERDVV9DVglfQUMoMHgwMDAxMDAwMDAwMDAwMDAwLFVMKSAvKiBWaXJ0IENhY2hlIEVuYWJsZSB3L28gbW11CSovCi0jZGVmaW5lIERDVV9NRQlfQUMoMHgwMDAwODAwMDAwMDAwMDAwLFVMKSAvKiBOQy1zdG9yZSBNZXJnaW5nIEVuYWJsZQkqLwotI2RlZmluZSBEQ1VfUkUJX0FDKDB4MDAwMDQwMDAwMDAwMDAwMCxVTCkgLyogUkFXIGJ5cGFzcyBFbmFibGUJCSovCi0jZGVmaW5lIERDVV9QRQlfQUMoMHgwMDAwMjAwMDAwMDAwMDAwLFVMKSAvKiBQQ2FjaGUgRW5hYmxlCQkqLwotI2RlZmluZSBEQ1VfSFBFCV9BQygweDAwMDAxMDAwMDAwMDAwMDAsVUwpIC8qIEhXIHByZWZldGNoIEVuYWJsZQkqLwotI2RlZmluZSBEQ1VfU1BFCV9BQygweDAwMDAwODAwMDAwMDAwMDAsVUwpIC8qIFNXIHByZWZldGNoIEVuYWJsZQkqLwotI2RlZmluZSBEQ1VfU0wJX0FDKDB4MDAwMDA0MDAwMDAwMDAwMCxVTCkgLyogU2Vjb25kYXJ5IGxkLXN0ZWVyaW5nIEVuYWIqLwotI2RlZmluZSBEQ1VfV0UJX0FDKDB4MDAwMDAyMDAwMDAwMDAwMCxVTCkgLyogV0NhY2hlIGVuYWJsZQkJKi8KLSNkZWZpbmUgRENVX1BNCV9BQygweDAwMDAwMWZlMDAwMDAwMDAsVUwpIC8qIFBBIFdhdGNocG9pbnQgQnl0ZSBNYXNrCSovCi0jZGVmaW5lIERDVV9WTQlfQUMoMHgwMDAwMDAwMWZlMDAwMDAwLFVMKSAvKiBWQSBXYXRjaHBvaW50IEJ5dGUgTWFzawkqLwotI2RlZmluZSBEQ1VfUFIJX0FDKDB4MDAwMDAwMDAwMTAwMDAwMCxVTCkgLyogUEEgV2F0Y2hwb2ludCBSZWFkIEVuYWJsZQkqLwotI2RlZmluZSBEQ1VfUFcJX0FDKDB4MDAwMDAwMDAwMDgwMDAwMCxVTCkgLyogUEEgV2F0Y2hwb2ludCBXcml0ZSBFbmFibGUqLwotI2RlZmluZSBEQ1VfVlIJX0FDKDB4MDAwMDAwMDAwMDQwMDAwMCxVTCkgLyogVkEgV2F0Y2hwb2ludCBSZWFkIEVuYWJsZQkqLwotI2RlZmluZSBEQ1VfVlcJX0FDKDB4MDAwMDAwMDAwMDIwMDAwMCxVTCkgLyogVkEgV2F0Y2hwb2ludCBXcml0ZSBFbmFibGUqLwotI2RlZmluZSBEQ1VfRE0JX0FDKDB4MDAwMDAwMDAwMDAwMDAwOCxVTCkgLyogRE1NVSBFbmFibGUJCSovCi0jZGVmaW5lIERDVV9JTQlfQUMoMHgwMDAwMDAwMDAwMDAwMDA0LFVMKSAvKiBJTU1VIEVuYWJsZQkJKi8KLSNkZWZpbmUgRENVX0RDCV9BQygweDAwMDAwMDAwMDAwMDAwMDIsVUwpIC8qIERhdGEgQ2FjaGUgRW5hYmxlCQkqLwotI2RlZmluZSBEQ1VfSUMJX0FDKDB4MDAwMDAwMDAwMDAwMDAwMSxVTCkgLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgRW5hYmxlCSovCi0KLSNlbmRpZiAvKiBfU1BBUkM2NF9EQ1VfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9kY3UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGVsYXkuaAppbmRleCBhNzdhYTYyLi4zM2RjNTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2RlbGF5LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kZWxheS5oCkBAIC0xLDE3ICsxIEBACi0vKiBkZWxheS5oOiBMaW51eCBkZWxheSByb3V0aW5lcyBvbiBzcGFyYzY0LgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwgMjAwNCwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpLgotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfREVMQVlfSAotI2RlZmluZSBfU1BBUkM2NF9ERUxBWV9ICi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLWV4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcyk7Ci1leHRlcm4gdm9pZCB1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7Ci0jZGVmaW5lIG1kZWxheShuKQl1ZGVsYXkoKG4pICogMTAwMCkKLQotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9TUEFSQzY0X0RFTEFZX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGlzcGxheTdzZWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGlzcGxheTdzZWcuaAppbmRleCBjMDY2YTg5Li5lNzRmMDQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Rpc3BsYXk3c2VnLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kaXNwbGF5N3NlZy5oCkBAIC0xLDc5ICsxIEBACi0vKgotICoKLSAqIGRpc3BsYXk3c2VnIC0gRHJpdmVyIGludGVyZmFjZSBmb3IgdGhlIDctc2VnbWVudCBkaXNwbGF5Ci0gKiBwcmVzZW50IG9uIFN1biBNaWNyb3N5c3RlbXMgQ1AxNDAwIGFuZCBDUDE1MDAKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAgRXJpYyBCcm93ZXIgPGVicm93ZXJAdXNhLm5ldD4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX2Rpc3BsYXk3c2VnX2hfXwotI2RlZmluZSBfX2Rpc3BsYXk3c2VnX2hfXwotCi0jZGVmaW5lIEQ3U19JT0MJJ3AnCi0KLSNkZWZpbmUgRDdTSU9DUkQgX0lPUihEN1NfSU9DLCAweDQ1LCBpbnQpCS8qIFJlYWQgZGV2aWNlIHN0YXRlCSovCi0jZGVmaW5lIEQ3U0lPQ1dSIF9JT1coRDdTX0lPQywgMHg0NiwgaW50KQkvKiBXcml0ZSBkZXZpY2Ugc3RhdGUJKi8KLSNkZWZpbmUgRDdTSU9DVE0gX0lPIChEN1NfSU9DLCAweDQ3KQkJLyogVHJhbnNsYXRlIG1vZGUgKEZMSVApKi8KLQotLyoKLSAqIGlvY3RsIGZsYWcgZGVmaW5pdGlvbnMKLSAqCi0gKiBQT0lOVAktIFRvZ2dsZSBkZWNpbWFsIHBvaW50CSgwPWFic2VudCAxPXByZXNlbnQpCi0gKiBBTEFSTQktIFRvZ2dsZSBhbGFybSBMRUQgCQkoMD1ncmVlbiAgMT1yZWQpCi0gKiBGTElQCQktIFRvZ2dsZSBpbnZlcnRlZCBtb2RlIAkoMD1ub3JtYWwgMT1mbGlwcGVkKSAKLSAqIGJpdHMgMC00CS0gQ2hhcmFjdGVyIGRpc3BsYXllZAkoc2VlIGRlZmluaXRpb25zIGJlbG93KQotICoKLSAqIERpc3BsYXkgc2VnbWVudHMgYXJlIGRlZmluZWQgYXMgZm9sbG93cywgCi0gKiBzdWJqZWN0IHRvIEQ3U19GTElQIHJlZ2lzdGVyIHN0YXRlOgotICoKLSAqICAgIGEKLSAqICAgLS0tCi0gKiBmfCAgIHxiCi0gKiAgIC1nLQotICogZXwgICB8YwotICogICAtLS0KLSAqICAgIGQKLSAqLwotCi0jZGVmaW5lIEQ3U19QT0lOVAkoMSA8PCA3KQkvKiBEZWNpbWFsIHBvaW50Ki8KLSNkZWZpbmUgRDdTX0FMQVJNCSgxIDw8IDYpCS8qIEFsYXJtIExFRCAJKi8KLSNkZWZpbmUgRDdTX0ZMSVAJKDEgPDwgNSkJLyogRmxpcCBkaXNwbGF5ICovCi0KLSNkZWZpbmUgRDdTXzAJCTB4MDAJCS8qIE51bWVyYWxzIDAtOSAqLwotI2RlZmluZSBEN1NfMQkJMHgwMQotI2RlZmluZSBEN1NfMgkJMHgwMgotI2RlZmluZSBEN1NfMwkJMHgwMwotI2RlZmluZSBEN1NfNAkJMHgwNAotI2RlZmluZSBEN1NfNQkJMHgwNQotI2RlZmluZSBEN1NfNgkJMHgwNgotI2RlZmluZSBEN1NfNwkJMHgwNwotI2RlZmluZSBEN1NfOAkJMHgwOAotI2RlZmluZSBEN1NfOQkJMHgwOQotI2RlZmluZSBEN1NfQQkJMHgwQQkJLyogTGV0dGVycyBBLUYsIEgsIEwsIFAgKi8KLSNkZWZpbmUgRDdTX0IJCTB4MEIKLSNkZWZpbmUgRDdTX0MJCTB4MEMKLSNkZWZpbmUgRDdTX0QJCTB4MEQKLSNkZWZpbmUgRDdTX0UJCTB4MEUKLSNkZWZpbmUgRDdTX0YJCTB4MEYKLSNkZWZpbmUgRDdTX0gJCTB4MTAKLSNkZWZpbmUgRDdTX0UyCQkweDExCi0jZGVmaW5lIEQ3U19MCQkweDEyCi0jZGVmaW5lIEQ3U19QCQkweDEzCi0jZGVmaW5lIEQ3U19TRUdBCTB4MTQJCS8qIEluZGl2aWR1YWwgc2VnbWVudHMgKi8KLSNkZWZpbmUgRDdTX1NFR0IJMHgxNQotI2RlZmluZSBEN1NfU0VHQwkweDE2Ci0jZGVmaW5lIEQ3U19TRUdECTB4MTcKLSNkZWZpbmUgRDdTX1NFR0UJMHgxOAotI2RlZmluZSBEN1NfU0VHRgkweDE5Ci0jZGVmaW5lIEQ3U19TRUdHCTB4MUEKLSNkZWZpbmUgRDdTX1NFR0FCRkcgMHgxQgkJLyogU2VnbWVudCBncm91cGluZ3MgKi8KLSNkZWZpbmUgRDdTX1NFR0NERUcJMHgxQwotI2RlZmluZSBEN1NfU0VHQkNFRiAweDFECi0jZGVmaW5lIEQ3U19TRUdBREcJMHgxRQotI2RlZmluZSBEN1NfQkxBTksJMHgxRgkJLyogQ2xlYXIgYWxsIHNlZ21lbnRzICovCi0KLSNkZWZpbmUgRDdTX01JTl9WQUwJMHgwCi0jZGVmaW5lIEQ3U19NQVhfVkFMCTB4MUYKLQotI2VuZGlmIC8qIGlmbmRlZiBfX2Rpc3BsYXk3c2VnX2hfXyAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9kaXNwbGF5N3NlZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oCmluZGV4IDM4Y2JlYzcuLjM4MGI3YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS1tYXBwaW5nLmgKQEAgLTEsMTU0ICsxIEBACi0jaWZuZGVmIF9BU01fU1BBUkM2NF9ETUFfTUFQUElOR19ICi0jZGVmaW5lIF9BU01fU1BBUkM2NF9ETUFfTUFQUElOR19ICi0KLSNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLSNkZWZpbmUgRE1BX0VSUk9SX0NPREUJKH4oZG1hX2FkZHJfdCkweDApCi0KLXN0cnVjdCBkbWFfb3BzIHsKLQl2b2lkICooKmFsbG9jX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOwotCXZvaWQgKCpmcmVlX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJICAgICAgdm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7Ci0JZG1hX2FkZHJfdCAoKm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCi0JCQkJIHNpemVfdCBzaXplLAotCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwotCXZvaWQgKCp1bm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCSAgICAgc2l6ZV90IHNpemUsCi0JCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0JaW50ICgqbWFwX3NnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKLQl2b2lkICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSBpbnQgbmh3ZW50cmllcywKLQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwotCXZvaWQgKCpzeW5jX3NpbmdsZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0Jdm9pZCAoKnN5bmNfc2dfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCWludCBuZWxlbXMsCi0JCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKLX07Ci1leHRlcm4gY29uc3Qgc3RydWN0IGRtYV9vcHMgKmRtYV9vcHM7Ci0KLWV4dGVybiBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKLWV4dGVybiBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKTsKLQotc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKLXsKLQlyZXR1cm4gZG1hX29wcy0+YWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBmbGFnKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJICAgICB2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQotewotCWRtYV9vcHMtPmZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAotCQkJCQlzaXplX3Qgc2l6ZSwKLQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCXJldHVybiBkbWFfb3BzLT5tYXBfc2luZ2xlKGRldiwgY3B1X2FkZHIsIHNpemUsIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkgICAgc2l6ZV90IHNpemUsCi0JCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlkbWFfb3BzLT51bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JcmV0dXJuIGRtYV9vcHMtPm1hcF9zaW5nbGUoZGV2LCBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsCi0JCQkJICAgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKLQkJCQkgIHNpemVfdCBzaXplLAotCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JcmV0dXJuIGRtYV9vcHMtPm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JZG1hX29wcy0+dW5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlkbWFfb3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCQkgICAgICBzaXplX3Qgc2l6ZSwKLQkJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCS8qIE5vIGZsdXNoaW5nIG5lZWRlZCB0byBzeW5jIGNwdSB3cml0ZXMgdG8gdGhlIGRldmljZS4gICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQkgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQkJIHNpemVfdCBzaXplLAotCQkJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGRtYV9oYW5kbGUrb2Zmc2V0LCBzaXplLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCQkJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkJCSAgICBzaXplX3Qgc2l6ZSwKLQkJCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyogTm8gZmx1c2hpbmcgbmVlZGVkIHRvIHN5bmMgY3B1IHdyaXRlcyB0byB0aGUgZGV2aWNlLiAgKi8KLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlkbWFfb3BzLT5zeW5jX3NnX2Zvcl9jcHUoZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyogTm8gZmx1c2hpbmcgbmVlZGVkIHRvIHN5bmMgY3B1IHdyaXRlcyB0byB0aGUgZGV2aWNlLiAgKi8KLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLQlyZXR1cm4gKGRtYV9hZGRyID09IERNQV9FUlJPUl9DT0RFKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKLXsKLQkvKiBubyBlYXN5IHdheSB0byBnZXQgY2FjaGUgc2l6ZSBvbiBhbGwgcHJvY2Vzc29ycywgc28gcmV0dXJuCi0JICogdGhlIG1heGltdW0gcG9zc2libGUsIHRvIGJlIHNhZmUgKi8KLQlyZXR1cm4gKDEgPDwgSU5URVJOT0RFX0NBQ0hFX1NISUZUKTsKLX0KLQotI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCi0jZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCi0jZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQsIGgpCSgxKQotCi0jZW5kaWYgLyogX0FTTV9TUEFSQzY0X0RNQV9NQVBQSU5HX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvZG1hLW1hcHBpbmcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS5oCmluZGV4IDlkNGMwMjQuLjJlMzYyNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEuaApAQCAtMSwyMDUgKzEgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS5oCi0gKgotICogQ29weXJpZ2h0IDE5OTYgKEMpIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaWZuZGVmIF9BU01fU1BBUkM2NF9ETUFfSAotI2RlZmluZSBfQVNNX1NQQVJDNjRfRE1BX0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQotI2luY2x1ZGUgPGFzbS9zYnVzLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL29wbGliLmg+Ci0KLS8qIFRoZXNlIGFyZSBpcnJlbGV2YW50IGZvciBTcGFyYyBETUEsIGJ1dCB3ZSBsZWF2ZSBpdCBpbiBzbyB0aGF0Ci0gKiB0aGluZ3MgY2FuIGNvbXBpbGUuCi0gKi8KLSNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyA4Ci0jZGVmaW5lIERNQV9NT0RFX1JFQUQgICAgMQotI2RlZmluZSBETUFfTU9ERV9XUklURSAgIDIKLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICAofjBVTCkKLQotLyogVXNlZnVsIGNvbnN0YW50cyAqLwotI2RlZmluZSBTSVpFXzE2TUIgICAgICAoMTYqMTAyNCoxMDI0KQotI2RlZmluZSBTSVpFXzY0SyAgICAgICAoNjQqMTAyNCkKLQotLyogU0JVUyBETUEgY29udHJvbGxlciByZWcgb2Zmc2V0cyAqLwotI2RlZmluZSBETUFfQ1NSCQkweDAwVUwJCS8qIHJ3ICBETUEgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgICAgMHgwMCAgICovCi0jZGVmaW5lIERNQV9BRERSCTB4MDRVTAkJLyogcncgIERNQSB0cmFuc2ZlciBhZGRyZXNzIHJlZ2lzdGVyICAweDA0ICAgKi8KLSNkZWZpbmUgRE1BX0NPVU5UCTB4MDhVTAkJLyogcncgIERNQSB0cmFuc2ZlciBjb3VudCByZWdpc3RlciAgICAweDA4ICAgKi8KLSNkZWZpbmUgRE1BX1RFU1QJMHgwY1VMCQkvKiBydyAgRE1BIHRlc3QvZGVidWcgcmVnaXN0ZXIgICAgICAgIDB4MGMgICAqLwotCi0vKiBEVk1BIGNoaXAgcmV2aXNpb25zICovCi1lbnVtIGR2bWFfcmV2IHsKLQlkdm1hcmV2MCwKLQlkdm1hZXNjMSwKLQlkdm1hcmV2MSwKLQlkdm1hcmV2MiwKLQlkdm1hcmV2MywKLQlkdm1hcmV2cGx1cywKLQlkdm1haG1lCi19OwotCi0jZGVmaW5lIERNQV9IQVNDT1VOVChyZXYpICAoKHJldik9PWR2bWFlc2MxKQotCi0vKiBMaW51eCBETUEgaW5mb3JtYXRpb24gc3RydWN0dXJlLCBmaWxsZWQgZHVyaW5nIHByb2JlLiAqLwotc3RydWN0IHNidXNfZG1hIHsKLQlzdHJ1Y3Qgc2J1c19kbWEgKm5leHQ7Ci0Jc3RydWN0IHNidXNfZGV2ICpzZGV2OwotCXZvaWQgX19pb21lbSAqcmVnczsKLQotCS8qIFN0YXR1cywgbWlzYyBpbmZvICovCi0JaW50IG5vZGU7ICAgICAgICAgICAgICAgIC8qIFByb20gbm9kZSBmb3IgdGhpcyBETUEgZGV2aWNlICovCi0JaW50IHJ1bm5pbmc7ICAgICAgICAgICAgIC8qIEFyZSB3ZSBkb2luZyBETUEgbm93PyAqLwotCWludCBhbGxvY2F0ZWQ7ICAgICAgICAgICAvKiBBcmUgd2UgIm93bmVkIiBieSBhbnlvbmUgeWV0PyAqLwotCi0JLyogVHJhbnNmZXIgaW5mb3JtYXRpb24uICovCi0JdTMyIGFkZHI7ICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGFkZHJlc3Mgb2YgY3VycmVudCB0cmFuc2ZlciAqLwotCWludCBuYnl0ZXM7ICAgICAgICAgICAgICAvKiBTaXplIG9mIGN1cnJlbnQgdHJhbnNmZXIgKi8KLQlpbnQgcmVhbGJ5dGVzOyAgICAgICAgICAgLyogRm9yIHNwbGl0dGluZyB1cCBsYXJnZSB0cmFuc2ZlcnMsIGV0Yy4gKi8KLQotCS8qIERNQSByZXZpc2lvbiAqLwotCWVudW0gZHZtYV9yZXYgcmV2aXNpb247Ci19OwotCi1leHRlcm4gc3RydWN0IHNidXNfZG1hICpkbWFfY2hhaW47Ci0KLS8qIEJyb2tlbiBoYXJkd2FyZS4uLiAqLwotI2RlZmluZSBETUFfSVNCUk9LRU4oZG1hKSAgICAoKGRtYSktPnJldmlzaW9uID09IGR2bWFyZXYxKQotI2RlZmluZSBETUFfSVNFU0MxKGRtYSkgICAgICAoKGRtYSktPnJldmlzaW9uID09IGR2bWFlc2MxKQotCi0vKiBNYWluIHJvdXRpbmVzIGluIGRtYS5jICovCi1leHRlcm4gdm9pZCBkdm1hX2luaXQoc3RydWN0IHNidXNfYnVzICopOwotCi0vKiBGaWVsZHMgaW4gdGhlIGNvbmRfcmVnIHJlZ2lzdGVyICovCi0vKiBGaXJzdCwgdGhlIHZlcnNpb24gaWRlbnRpZmljYXRpb24gYml0cyAqLwotI2RlZmluZSBETUFfREVWSUNFX0lEICAgIDB4ZjAwMDAwMDAgICAgICAgIC8qIERldmljZSBpZGVudGlmaWNhdGlvbiBiaXRzICovCi0jZGVmaW5lIERNQV9WRVJTMCAgICAgICAgMHgwMDAwMDAwMCAgICAgICAgLyogU3VucmF5IERNQSB2ZXJzaW9uICovCi0jZGVmaW5lIERNQV9FU0NWMSAgICAgICAgMHg0MDAwMDAwMCAgICAgICAgLyogRE1BIEVTQyBWZXJzaW9uIDEgKi8KLSNkZWZpbmUgRE1BX1ZFUlMxICAgICAgICAweDgwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDEgKi8KLSNkZWZpbmUgRE1BX1ZFUlMyICAgICAgICAweGEwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDIgKi8KLSNkZWZpbmUgRE1BX1ZFUkhNRSAgICAgICAweGIwMDAwMDAwICAgICAgICAvKiBETUEgaG1lIGdhdGUgYXJyYXkgKi8KLSNkZWZpbmUgRE1BX1ZFUlNQTFVTICAgICAweDkwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDEgUExVUyAqLwotCi0jZGVmaW5lIERNQV9ITkRMX0lOVFIgICAgMHgwMDAwMDAwMSAgICAgICAgLyogQW4gSVJRIG5lZWRzIHRvIGJlIGhhbmRsZWQgKi8KLSNkZWZpbmUgRE1BX0hORExfRVJST1IgICAweDAwMDAwMDAyICAgICAgICAvKiBXZSBuZWVkIHRvIHRha2UgYW4gZXJyb3IgKi8KLSNkZWZpbmUgRE1BX0ZJRk9fSVNEUkFJTiAweDAwMDAwMDBjICAgICAgICAvKiBUaGUgRE1BIEZJRk8gaXMgZHJhaW5pbmcgKi8KLSNkZWZpbmUgRE1BX0lOVF9FTkFCICAgICAweDAwMDAwMDEwICAgICAgICAvKiBUdXJuIG9uIGludGVycnVwdHMgKi8KLSNkZWZpbmUgRE1BX0ZJRk9fSU5WICAgICAweDAwMDAwMDIwICAgICAgICAvKiBJbnZhbGlkYXRlIHRoZSBGSUZPICovCi0jZGVmaW5lIERNQV9BQ0NfU1pfRVJSICAgMHgwMDAwMDA0MCAgICAgICAgLyogVGhlIGFjY2VzcyBzaXplIHdhcyBiYWQgKi8KLSNkZWZpbmUgRE1BX0ZJRk9fU1REUkFJTiAweDAwMDAwMDQwICAgICAgICAvKiBETUFfVkVSUzEgRHJhaW4gdGhlIEZJRk8gKi8KLSNkZWZpbmUgRE1BX1JTVF9TQ1NJICAgICAweDAwMDAwMDgwICAgICAgICAvKiBSZXNldCB0aGUgU0NTSSBjb250cm9sbGVyICovCi0jZGVmaW5lIERNQV9SU1RfRU5FVCAgICAgRE1BX1JTVF9TQ1NJICAgICAgLyogUmVzZXQgdGhlIEVORVQgY29udHJvbGxlciAqLwotI2RlZmluZSBETUFfU1RfV1JJVEUgICAgIDB4MDAwMDAxMDAgICAgICAgIC8qIHdyaXRlIGZyb20gZGV2aWNlIHRvIG1lbW9yeSAqLwotI2RlZmluZSBETUFfRU5BQkxFICAgICAgIDB4MDAwMDAyMDAgICAgICAgIC8qIEZpcmUgdXAgRE1BLCBoYW5kbGUgcmVxdWVzdHMgKi8KLSNkZWZpbmUgRE1BX1BFTkRfUkVBRCAgICAweDAwMDAwNDAwICAgICAgICAvKiBETUFfVkVSUzEvMC9QTFVTIFBlbmRpbmcgUmVhZCAqLwotI2RlZmluZSBETUFfRVNDX0JVUlNUICAgIDB4MDAwMDA4MDAgICAgICAgIC8qIDE9MTZieXRlIDA9MzJieXRlICovCi0jZGVmaW5lIERNQV9SRUFEX0FIRUFEICAgMHgwMDAwMTgwMCAgICAgICAgLyogRE1BIHJlYWQgYWhlYWQgcGFydGlhbCBsb25nd29yZCAqLwotI2RlZmluZSBETUFfRFNCTF9SRF9EUk4gIDB4MDAwMDEwMDAgICAgICAgIC8qIE5vIEVDIGRyYWluIG9uIHNsYXZlIHJlYWRzICovCi0jZGVmaW5lIERNQV9CQ05UX0VOQUIgICAgMHgwMDAwMjAwMCAgICAgICAgLyogSWYgb24sIHVzZSB0aGUgYnl0ZSBjb3VudGVyICovCi0jZGVmaW5lIERNQV9URVJNX0NOVFIgICAgMHgwMDAwNDAwMCAgICAgICAgLyogVGVybWluYWwgY291bnRlciAqLwotI2RlZmluZSBETUFfU0NTSV9TQlVTNjQgIDB4MDAwMDgwMDAgICAgICAgIC8qIEhNRTogRW5hYmxlIDY0LWJpdCBTQlVTIG1vZGUuICovCi0jZGVmaW5lIERNQV9DU1JfRElTQUIgICAgMHgwMDAxMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIGNzciAqLwotI2RlZmluZSBETUFfU0NTSV9ESVNBQiAgIDB4MDAwMjAwMDAgICAgICAgIC8qIE5vIEZJRk8gZHJhaW5zIGR1cmluZyByZWcgKi8KLSNkZWZpbmUgRE1BX0RTQkxfV1JfSU5WICAweDAwMDIwMDAwICAgICAgICAvKiBObyBFQyBpbnZhbC4gb24gc2xhdmUgd3JpdGVzICovCi0jZGVmaW5lIERNQV9BRERfRU5BQkxFICAgMHgwMDA0MDAwMCAgICAgICAgLyogU3BlY2lhbCBFU0MgRFZNQSBvcHRpbWl6YXRpb24gKi8KLSNkZWZpbmUgRE1BX0VfQlVSU1RTCSAweDAwMGMwMDAwCSAgIC8qIEVORVQ6IFNCVVMgci93IGJ1cnN0IG1hc2sgKi8KLSNkZWZpbmUgRE1BX0VfQlVSU1QzMgkgMHgwMDA0MDAwMAkgICAvKiBFTkVUOiBTQlVTIDMyIGJ5dGUgci93IGJ1cnN0ICovCi0jZGVmaW5lIERNQV9FX0JVUlNUMTYJIDB4MDAwMDAwMDAJICAgLyogRU5FVDogU0JVUyAxNiBieXRlIHIvdyBidXJzdCAqLwotI2RlZmluZSBETUFfQlJTVF9TWiAgICAgIDB4MDAwYzAwMDAgICAgICAgIC8qIFNDU0k6IFNCVVMgci93IGJ1cnN0IHNpemUgKi8KLSNkZWZpbmUgRE1BX0JSU1Q2NCAgICAgICAweDAwMGMwMDAwICAgICAgICAvKiBTQ1NJOiA2NGJ5dGUgYnVyc3RzIChITUUgb24gVWx0cmFTcGFyYyBvbmx5KSAqLwotI2RlZmluZSBETUFfQlJTVDMyICAgICAgIDB4MDAwNDAwMDAgICAgICAgIC8qIFNDU0k6IDMyYnl0ZSBidXJzdHMgKi8KLSNkZWZpbmUgRE1BX0JSU1QxNiAgICAgICAweDAwMDAwMDAwICAgICAgICAvKiBTQ1NJOiAxNmJ5dGUgYnVyc3RzICovCi0jZGVmaW5lIERNQV9CUlNUMCAgICAgICAgMHgwMDA4MDAwMCAgICAgICAgLyogU0NTSTogbm8gYnVyc3RzIChub24tSE1FIGdhdGUgYXJyYXlzKSAqLwotI2RlZmluZSBETUFfQUREUl9ESVNBQiAgIDB4MDAxMDAwMDAgICAgICAgIC8qIE5vIEZJRk8gZHJhaW5zIGR1cmluZyBhZGRyICovCi0jZGVmaW5lIERNQV8yQ0xLUyAgICAgICAgMHgwMDIwMDAwMCAgICAgICAgLyogRWFjaCB0cmFuc2ZlciA9IDIgY2xvY2sgdGlja3MgKi8KLSNkZWZpbmUgRE1BXzNDTEtTICAgICAgICAweDAwNDAwMDAwICAgICAgICAvKiBFYWNoIHRyYW5zZmVyID0gMyBjbG9jayB0aWNrcyAqLwotI2RlZmluZSBETUFfRU5fRU5FVEFVSSAgIERNQV8zQ0xLUyAgICAgICAgIC8qIFB1dCBsYW5jZSBpbnRvIEFVSS1jYWJsZSBtb2RlICovCi0jZGVmaW5lIERNQV9DTlRSX0RJU0FCICAgMHgwMDgwMDAwMCAgICAgICAgLyogTm8gSVJRIHdoZW4gRE1BX1RFUk1fQ05UUiBzZXQgKi8KLSNkZWZpbmUgRE1BX0FVVE9fTkFERFIgICAweDAxMDAwMDAwICAgICAgICAvKiBVc2UgImF1dG8gbnh0IGFkZHIiIGZlYXR1cmUgKi8KLSNkZWZpbmUgRE1BX1NDU0lfT04gICAgICAweDAyMDAwMDAwICAgICAgICAvKiBFbmFibGUgU0NTSSBkbWEgKi8KLSNkZWZpbmUgRE1BX1BBUklUWV9PRkYgICAweDAyMDAwMDAwICAgICAgICAvKiBITUU6IGRpc2FibGUgcGFyaXR5IGNoZWNraW5nICovCi0jZGVmaW5lIERNQV9MT0FERURfQUREUiAgMHgwNDAwMDAwMCAgICAgICAgLyogQWRkcmVzcyBoYXMgYmVlbiBsb2FkZWQgKi8KLSNkZWZpbmUgRE1BX0xPQURFRF9OQUREUiAweDA4MDAwMDAwICAgICAgICAvKiBOZXh0IGFkZHJlc3MgaGFzIGJlZW4gbG9hZGVkICovCi0jZGVmaW5lIERNQV9SRVNFVF9GQVMzNjYgMHgwODAwMDAwMCAgICAgICAgLyogSE1FOiBBc3NlcnQgUkVTRVQgdG8gRkFTMzY2ICovCi0KLS8qIFZhbHVlcyBkZXNjcmliaW5nIHRoZSBidXJzdC1zaXplIHByb3BlcnR5IGZyb20gdGhlIFBST00gKi8KLSNkZWZpbmUgRE1BX0JVUlNUMSAgICAgICAweDAxCi0jZGVmaW5lIERNQV9CVVJTVDIgICAgICAgMHgwMgotI2RlZmluZSBETUFfQlVSU1Q0ICAgICAgIDB4MDQKLSNkZWZpbmUgRE1BX0JVUlNUOCAgICAgICAweDA4Ci0jZGVmaW5lIERNQV9CVVJTVDE2ICAgICAgMHgxMAotI2RlZmluZSBETUFfQlVSU1QzMiAgICAgIDB4MjAKLSNkZWZpbmUgRE1BX0JVUlNUNjQgICAgICAweDQwCi0jZGVmaW5lIERNQV9CVVJTVEJJVFMgICAgMHg3ZgotCi0vKiBEZXRlcm1pbmUgaGlnaGVzdCBwb3NzaWJsZSBmaW5hbCB0cmFuc2ZlciBhZGRyZXNzIGdpdmVuIGEgYmFzZSAqLwotI2RlZmluZSBETUFfTUFYRU5EKGFkZHIpICgweDAxMDAwMDAwVUwtKCgodW5zaWduZWQgbG9uZykoYWRkcikpJjB4MDBmZmZmZmZVTCkpCi0KLS8qIFllcywgSSBoYWNrIGEgbG90IG9mIGVsaXNwIGluIG15IHNwYXJlIHRpbWUuLi4gKi8KLSNkZWZpbmUgRE1BX0VSUk9SX1AocmVncykgICgoc2J1c19yZWFkbCgocmVncykgKyBETUFfQ1NSKSAmIERNQV9ITkRMX0VSUk9SKSkKLSNkZWZpbmUgRE1BX0lSUV9QKHJlZ3MpICAgICgoc2J1c19yZWFkbCgocmVncykgKyBETUFfQ1NSKSkgJiAoRE1BX0hORExfSU5UUiB8IERNQV9ITkRMX0VSUk9SKSkKLSNkZWZpbmUgRE1BX1dSSVRFX1AocmVncykgICgoc2J1c19yZWFkbCgocmVncykgKyBETUFfQ1NSKSAmIERNQV9TVF9XUklURSkpCi0jZGVmaW5lIERNQV9PRkYoX19yZWdzKQkJXAotZG8gewl1MzIgdG1wID0gc2J1c19yZWFkbCgoX19yZWdzKSArIERNQV9DU1IpOyBcCi0JdG1wICY9IH5ETUFfRU5BQkxFOyBcCi0Jc2J1c193cml0ZWwodG1wLCAoX19yZWdzKSArIERNQV9DU1IpOyBcCi19IHdoaWxlKDApCi0jZGVmaW5lIERNQV9JTlRTT0ZGKF9fcmVncykJXAotZG8gewl1MzIgdG1wID0gc2J1c19yZWFkbCgoX19yZWdzKSArIERNQV9DU1IpOyBcCi0JdG1wICY9IH5ETUFfSU5UX0VOQUI7IFwKLQlzYnVzX3dyaXRlbCh0bXAsIChfX3JlZ3MpICsgRE1BX0NTUik7IFwKLX0gd2hpbGUoMCkKLSNkZWZpbmUgRE1BX0lOVFNPTihfX3JlZ3MpCVwKLWRvIHsJdTMyIHRtcCA9IHNidXNfcmVhZGwoKF9fcmVncykgKyBETUFfQ1NSKTsgXAotCXRtcCB8PSBETUFfSU5UX0VOQUI7IFwKLQlzYnVzX3dyaXRlbCh0bXAsIChfX3JlZ3MpICsgRE1BX0NTUik7IFwKLX0gd2hpbGUoMCkKLSNkZWZpbmUgRE1BX1BVTlRGSUZPKF9fcmVncykJXAotZG8gewl1MzIgdG1wID0gc2J1c19yZWFkbCgoX19yZWdzKSArIERNQV9DU1IpOyBcCi0JdG1wIHw9IERNQV9GSUZPX0lOVjsgXAotCXNidXNfd3JpdGVsKHRtcCwgKF9fcmVncykgKyBETUFfQ1NSKTsgXAotfSB3aGlsZSgwKQotI2RlZmluZSBETUFfU0VUU1RBUlQoX19yZWdzLCBfX2FkZHIpCVwKLQlzYnVzX3dyaXRlbCgodTMyKShfX2FkZHIpLCAoX19yZWdzKSArIERNQV9BRERSKTsKLSNkZWZpbmUgRE1BX0JFR0lORE1BX1coX19yZWdzKQlcCi1kbyB7CXUzMiB0bXAgPSBzYnVzX3JlYWRsKChfX3JlZ3MpICsgRE1BX0NTUik7IFwKLQl0bXAgfD0gKERNQV9TVF9XUklURXxETUFfRU5BQkxFfERNQV9JTlRfRU5BQik7IFwKLQlzYnVzX3dyaXRlbCh0bXAsIChfX3JlZ3MpICsgRE1BX0NTUik7IFwKLX0gd2hpbGUoMCkKLSNkZWZpbmUgRE1BX0JFR0lORE1BX1IoX19yZWdzKQlcCi1kbyB7CXUzMiB0bXAgPSBzYnVzX3JlYWRsKChfX3JlZ3MpICsgRE1BX0NTUik7IFwKLQl0bXAgfD0gKERNQV9FTkFCTEV8RE1BX0lOVF9FTkFCKTsgXAotCXRtcCAmPSB+RE1BX1NUX1dSSVRFOyBcCi0Jc2J1c193cml0ZWwodG1wLCAoX19yZWdzKSArIERNQV9DU1IpOyBcCi19IHdoaWxlKDApCi0KLS8qIEZvciBjZXJ0YWluIERNQSBjaGlwcywgd2UgbmVlZCB0byBkaXNhYmxlIGludHMgdXBvbiBpcnEgZW50cnkKLSAqIGFuZCB0dXJuIHRoZW0gYmFjayBvbiB3aGVuIHdlIGFyZSBkb25lLiAgU28gaW4gYW55IEVTUCBpbnRlcnJ1cHQKLSAqIGhhbmRsZXIgeW91ICptdXN0KiBjYWxsIERNQV9JUlFfRU5UUlkgdXBvbiBlbnRyeSBhbmQgRE1BX0lSUV9FWElUCi0gKiB3aGVuIGxlYXZpbmcgdGhlIGhhbmRsZXIuICBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4uLgotICovCi0jZGVmaW5lIERNQV9JUlFfRU5UUlkoZG1hLCBkcmVncykgZG8geyBcCi0gICAgICAgIGlmKERNQV9JU0JST0tFTihkbWEpKSBETUFfSU5UU09GRihkcmVncyk7IFwKLSAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRE1BX0lSUV9FWElUKGRtYSwgZHJlZ3MpIGRvIHsgXAotCWlmKERNQV9JU0JST0tFTihkbWEpKSBETUFfSU5UU09OKGRyZWdzKTsgXAotICAgfSB3aGlsZSgwKQotCi0jZGVmaW5lIGZvcl9lYWNoX2R2bWEoZG1hKSBcCi0gICAgICAgIGZvcigoZG1hKSA9IGRtYV9jaGFpbjsgKGRtYSk7IChkbWEpID0gKGRtYSktPm5leHQpCi0KLS8qIEZyb20gUENJICovCi0KLSNpZmRlZiBDT05GSUdfUENJCi1leHRlcm4gaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OwotI2Vsc2UKLSNkZWZpbmUgaXNhX2RtYV9icmlkZ2VfYnVnZ3kgCSgwKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhKF9BU01fU1BBUkM2NF9ETUFfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvZG1hLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2VidXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZWJ1cy5oCmluZGV4IGZjYzYyYjkuLmQ3ZDQ3NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZWJ1cy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZWJ1cy5oCkBAIC0xLDk0ICsxIEBACi0vKgotICogZWJ1cy5oOiBQQ0kgdG8gRWJ1cyBwc2V1ZG8gZHJpdmVyIHNvZnR3YXJlIHN0YXRlLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyBFZGRpZSBDLiBEb3N0IChlY2RAc2t5bmV0LmJlKQotICogQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKLSAqLwotCi0jaWZuZGVmIF9fU1BBUkM2NF9FQlVTX0gKLSNkZWZpbmUgX19TUEFSQzY0X0VCVVNfSAotCi0jaW5jbHVkZSA8YXNtL29wbGliLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+Ci0KLXN0cnVjdCBsaW51eF9lYnVzX2NoaWxkIHsKLQlzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZAkJKm5leHQ7Ci0Jc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlCSpwYXJlbnQ7Ci0Jc3RydWN0IGxpbnV4X2VidXMJCSpidXM7Ci0Jc3RydWN0IGRldmljZV9ub2RlCQkqcHJvbV9ub2RlOwotCXN0cnVjdCByZXNvdXJjZQkJCSByZXNvdXJjZVtQUk9NUkVHX01BWF07Ci0JaW50CQkJCSBudW1fYWRkcnM7Ci0JdW5zaWduZWQgaW50CQkJIGlycXNbUFJPTUlOVFJfTUFYXTsKLQlpbnQJCQkJIG51bV9pcnFzOwotfTsKLQotc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlCQlvZmRldjsKLQlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UJKm5leHQ7Ci0Jc3RydWN0IGxpbnV4X2VidXNfY2hpbGQJCSpjaGlsZHJlbjsKLQlzdHJ1Y3QgbGludXhfZWJ1cwkJKmJ1czsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpwcm9tX25vZGU7Ci0Jc3RydWN0IHJlc291cmNlCQkJIHJlc291cmNlW1BST01SRUdfTUFYXTsKLQlpbnQJCQkJIG51bV9hZGRyczsKLQl1bnNpZ25lZCBpbnQJCQkgaXJxc1tQUk9NSU5UUl9NQVhdOwotCWludAkJCQkgbnVtX2lycXM7Ci19OwotI2RlZmluZSB0b19lYnVzX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlLCBvZmRldi5kZXYpCi0KLXN0cnVjdCBsaW51eF9lYnVzIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlCQlvZmRldjsKLQlzdHJ1Y3QgbGludXhfZWJ1cwkJKm5leHQ7Ci0Jc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlCSpkZXZpY2VzOwotCXN0cnVjdCBwY2lfZGV2CQkJKnNlbGY7Ci0JaW50CQkJCSBpbmRleDsKLQlpbnQJCQkJIGlzX3JpbzsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpwcm9tX25vZGU7Ci19OwotI2RlZmluZSB0b19lYnVzKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbGludXhfZWJ1cywgb2ZkZXYuZGV2KQotCi1zdHJ1Y3QgZWJ1c19kbWFfaW5mbyB7Ci0Jc3BpbmxvY2tfdAlsb2NrOwotCXZvaWQgX19pb21lbQkqcmVnczsKLQotCXVuc2lnbmVkIGludAlmbGFnczsKLSNkZWZpbmUgRUJVU19ETUFfRkxBR19VU0VfRUJETUFfSEFORExFUgkJMHgwMDAwMDAwMQotI2RlZmluZSBFQlVTX0RNQV9GTEFHX1RDSV9ESVNBQkxFCQkweDAwMDAwMDAyCi0KLQkvKiBUaGVzZSBhcmUgb25seSB2YWxpZCBpcyBFQlVTX0RNQV9GTEFHX1VTRV9FQkRNQV9IQU5ETEVSIGlzCi0JICogc2V0LgotCSAqLwotCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGVidXNfZG1hX2luZm8gKnAsIGludCBldmVudCwgdm9pZCAqY29va2llKTsKLQl2b2lkICpjbGllbnRfY29va2llOwotCXVuc2lnbmVkIGludAlpcnE7Ci0jZGVmaW5lIEVCVVNfRE1BX0VWRU5UX0VSUk9SCTEKLSNkZWZpbmUgRUJVU19ETUFfRVZFTlRfRE1BCTIKLSNkZWZpbmUgRUJVU19ETUFfRVZFTlRfREVWSUNFCTQKLQotCXVuc2lnbmVkIGNoYXIJbmFtZVs2NF07Ci19OwotCi1leHRlcm4gaW50IGVidXNfZG1hX3JlZ2lzdGVyKHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwKTsKLWV4dGVybiBpbnQgZWJ1c19kbWFfaXJxX2VuYWJsZShzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCwgaW50IG9uKTsKLWV4dGVybiB2b2lkIGVidXNfZG1hX3VucmVnaXN0ZXIoc3RydWN0IGVidXNfZG1hX2luZm8gKnApOwotZXh0ZXJuIGludCBlYnVzX2RtYV9yZXF1ZXN0KHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwLCBkbWFfYWRkcl90IGJ1c19hZGRyLAotCQkJICAgIHNpemVfdCBsZW4pOwotZXh0ZXJuIHZvaWQgZWJ1c19kbWFfcHJlcGFyZShzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCwgaW50IHdyaXRlKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgZWJ1c19kbWFfcmVzaWR1ZShzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGVidXNfZG1hX2FkZHIoc3RydWN0IGVidXNfZG1hX2luZm8gKnApOwotZXh0ZXJuIHZvaWQgZWJ1c19kbWFfZW5hYmxlKHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwLCBpbnQgb24pOwotCi1leHRlcm4gc3RydWN0IGxpbnV4X2VidXMJCSplYnVzX2NoYWluOwotCi1leHRlcm4gdm9pZCBlYnVzX2luaXQodm9pZCk7Ci0KLSNkZWZpbmUgZm9yX2VhY2hfZWJ1cyhidXMpCQkJCQkJXAotICAgICAgICBmb3IoKGJ1cykgPSBlYnVzX2NoYWluOyAoYnVzKTsgKGJ1cykgPSAoYnVzKS0+bmV4dCkKLQotI2RlZmluZSBmb3JfZWFjaF9lYnVzZGV2KGRldiwgYnVzKQkJCQkJXAotICAgICAgICBmb3IoKGRldikgPSAoYnVzKS0+ZGV2aWNlczsgKGRldik7IChkZXYpID0gKGRldiktPm5leHQpCi0KLSNkZWZpbmUgZm9yX2VhY2hfZWRldmNoaWxkKGRldiwgY2hpbGQpCQkJCQlcCi0gICAgICAgIGZvcigoY2hpbGQpID0gKGRldiktPmNoaWxkcmVuOyAoY2hpbGQpOyAoY2hpbGQpID0gKGNoaWxkKS0+bmV4dCkKLQotI2VuZGlmIC8qICEoX19TUEFSQzY0X0VCVVNfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvZWJ1cy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9lbGYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZWxmLmgKaW5kZXggMDgxOGExMy4uZjI1NmQ5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2VsZi5oCkBAIC0xLDIxNyArMSBAQAotI2lmbmRlZiBfX0FTTV9TUEFSQzY0X0VMRl9ICi0jZGVmaW5lIF9fQVNNX1NQQVJDNjRfRUxGX0gKLQotLyoKLSAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KLQotLyoKLSAqIFNwYXJjIHNlY3Rpb24gdHlwZXMKLSAqLwotI2RlZmluZSBTVFRfUkVHSVNURVIJCTEzCi0KLS8qCi0gKiBTcGFyYyBFTEYgcmVsb2NhdGlvbiB0eXBlcwotICovCi0jZGVmaW5lCVJfU1BBUkNfTk9ORQkJMAotI2RlZmluZQlSX1NQQVJDXzgJCTEKLSNkZWZpbmUJUl9TUEFSQ18xNgkJMgotI2RlZmluZQlSX1NQQVJDXzMyCQkzCi0jZGVmaW5lCVJfU1BBUkNfRElTUDgJCTQKLSNkZWZpbmUJUl9TUEFSQ19ESVNQMTYJCTUKLSNkZWZpbmUJUl9TUEFSQ19ESVNQMzIJCTYKLSNkZWZpbmUJUl9TUEFSQ19XRElTUDMwCQk3Ci0jZGVmaW5lCVJfU1BBUkNfV0RJU1AyMgkJOAotI2RlZmluZQlSX1NQQVJDX0hJMjIJCTkKLSNkZWZpbmUJUl9TUEFSQ18yMgkJMTAKLSNkZWZpbmUJUl9TUEFSQ18xMwkJMTEKLSNkZWZpbmUJUl9TUEFSQ19MTzEwCQkxMgotI2RlZmluZQlSX1NQQVJDX0dPVDEwCQkxMwotI2RlZmluZQlSX1NQQVJDX0dPVDEzCQkxNAotI2RlZmluZQlSX1NQQVJDX0dPVDIyCQkxNQotI2RlZmluZQlSX1NQQVJDX1BDMTAJCTE2Ci0jZGVmaW5lCVJfU1BBUkNfUEMyMgkJMTcKLSNkZWZpbmUJUl9TUEFSQ19XUExUMzAJCTE4Ci0jZGVmaW5lCVJfU1BBUkNfQ09QWQkJMTkKLSNkZWZpbmUJUl9TUEFSQ19HTE9CX0RBVAkyMAotI2RlZmluZQlSX1NQQVJDX0pNUF9TTE9UCTIxCi0jZGVmaW5lCVJfU1BBUkNfUkVMQVRJVkUJMjIKLSNkZWZpbmUJUl9TUEFSQ19VQTMyCQkyMwotI2RlZmluZSBSX1NQQVJDX1BMVDMyCQkyNAotI2RlZmluZSBSX1NQQVJDX0hJUExUMjIJCTI1Ci0jZGVmaW5lIFJfU1BBUkNfTE9QTFQxMAkJMjYKLSNkZWZpbmUgUl9TUEFSQ19QQ1BMVDMyCQkyNwotI2RlZmluZSBSX1NQQVJDX1BDUExUMjIJCTI4Ci0jZGVmaW5lIFJfU1BBUkNfUENQTFQxMAkJMjkKLSNkZWZpbmUgUl9TUEFSQ18xMAkJMzAKLSNkZWZpbmUgUl9TUEFSQ18xMQkJMzEKLSNkZWZpbmUgUl9TUEFSQ182NAkJMzIKLSNkZWZpbmUgUl9TUEFSQ19PTE8xMAkJMzMKLSNkZWZpbmUgUl9TUEFSQ19XRElTUDE2CQk0MAotI2RlZmluZSBSX1NQQVJDX1dESVNQMTkJCTQxCi0jZGVmaW5lIFJfU1BBUkNfNwkJNDMKLSNkZWZpbmUgUl9TUEFSQ181CQk0NAotI2RlZmluZSBSX1NQQVJDXzYJCTQ1Ci0KLS8qIEJpdHMgcHJlc2VudCBpbiBBVF9IV0NBUCwgcHJpbWFyaWx5IGZvciBTcGFyYzMyLiAgKi8KLQotI2RlZmluZSBIV0NBUF9TUEFSQ19GTFVTSCAgICAgICAxICAgIC8qIENQVSBzdXBwb3J0cyBmbHVzaCBpbnN0cnVjdGlvbi4gKi8KLSNkZWZpbmUgSFdDQVBfU1BBUkNfU1RCQVIgICAgICAgMgotI2RlZmluZSBIV0NBUF9TUEFSQ19TV0FQICAgICAgICA0Ci0jZGVmaW5lIEhXQ0FQX1NQQVJDX01VTERJViAgICAgIDgKLSNkZWZpbmUgSFdDQVBfU1BBUkNfVjkJCTE2Ci0jZGVmaW5lIEhXQ0FQX1NQQVJDX1VMVFJBMwkzMgotI2RlZmluZSBIV0NBUF9TUEFSQ19CTEtJTklUCTY0Ci0jZGVmaW5lIEhXQ0FQX1NQQVJDX04yCQkxMjgKLQotI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAotCi0vKgotICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCi0gKi8KLSNkZWZpbmUgRUxGX0FSQ0gJCUVNX1NQQVJDVjkKLSNkZWZpbmUgRUxGX0NMQVNTCQlFTEZDTEFTUzY0Ci0jZGVmaW5lIEVMRl9EQVRBCQlFTEZEQVRBMk1TQgotCi0vKiBGb3JtYXQgb2YgNjQtYml0IGVsZl9ncmVnc2V0X3QgaXM6Ci0gKiAJRzAgLS0+IEc3Ci0gKiAJTzAgLS0+IE83Ci0gKiAJTDAgLS0+IEw3Ci0gKiAJSTAgLS0+IEk3Ci0gKglUU1RBVEUKLSAqCVRQQwotICoJVE5QQwotICoJWQotICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKLSNkZWZpbmUgRUxGX05HUkVHIDM2Ci10eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZwlwcl9yZWdzWzMyXTsKLQl1bnNpZ25lZCBsb25nCXByX2ZzcjsKLQl1bnNpZ25lZCBsb25nCXByX2dzcjsKLQl1bnNpZ25lZCBsb25nCXByX2ZwcnM7Ci19IGVsZl9mcHJlZ3NldF90OwotCi0vKiBGb3JtYXQgb2YgMzItYml0IGVsZl9ncmVnc2V0X3QgaXM6Ci0gKiAJRzAgLS0+IEc3Ci0gKglPMCAtLT4gTzcKLSAqCUwwIC0tPiBMNwotICoJSTAgLS0+IEk3Ci0gKglQU1IsIFBDLCBuUEMsIFksIFdJTSwgVEJSCi0gKi8KLXR5cGVkZWYgdW5zaWduZWQgaW50IGNvbXBhdF9lbGZfZ3JlZ190OwotI2RlZmluZSBDT01QQVRfRUxGX05HUkVHIDM4Ci10eXBlZGVmIGNvbXBhdF9lbGZfZ3JlZ190IGNvbXBhdF9lbGZfZ3JlZ3NldF90W0NPTVBBVF9FTEZfTkdSRUddOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5pb24gewotCQl1bnNpZ25lZCBpbnQJcHJfcmVnc1szMl07Ci0JCXVuc2lnbmVkIGxvbmcJcHJfZHJlZ3NbMTZdOwotCX0gcHJfZnI7Ci0JdW5zaWduZWQgaW50IF9fdW51c2VkOwotCXVuc2lnbmVkIGludAlwcl9mc3I7Ci0JdW5zaWduZWQgY2hhcglwcl9xY250OwotCXVuc2lnbmVkIGNoYXIJcHJfcV9lbnRyeXNpemU7Ci0JdW5zaWduZWQgY2hhcglwcl9lbjsKLQl1bnNpZ25lZCBpbnQJcHJfcVs2NF07Ci19IGNvbXBhdF9lbGZfZnByZWdzZXRfdDsKLQotLyogVWx0cmFTcGFyYyBleHRlbnNpb25zLiAgU3RpbGwgdW51c2VkLCBidXQgd2lsbCBiZSBldmVudHVhbGx5LiAgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgcHJfdHlwZTsKLQl1bnNpZ25lZCBpbnQgcHJfYWxpZ247Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdW5pb24gewotCQkJCXVuc2lnbmVkIGludAlwcl9yZWdzWzMyXTsKLQkJCQl1bnNpZ25lZCBsb25nCXByX2RyZWdzWzE2XTsKLQkJCQlsb25nIGRvdWJsZQlwcl9xcmVnc1s4XTsKLQkJCX0gcHJfeGZyOwotCQl9IHByX3Y4cDsKLQkJdW5zaWduZWQgaW50CXByX3hmc3I7Ci0JCXVuc2lnbmVkIGludAlwcl9mcHJzOwotCQl1bnNpZ25lZCBpbnQJcHJfeGdbOF07Ci0JCXVuc2lnbmVkIGludAlwcl94b1s4XTsKLQkJdW5zaWduZWQgbG9uZwlwcl90c3RhdGU7Ci0JCXVuc2lnbmVkIGludAlwcl9maWxsZXJbOF07Ci0JfSBwcl91bjsKLX0gZWxmX3hyZWdzZXRfdDsKLQotLyoKLSAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCi0gKi8KLSNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkJCSgoeCktPmVfbWFjaGluZSA9PSBFTEZfQVJDSCkKLSNkZWZpbmUgY29tcGF0X2VsZl9jaGVja19hcmNoKHgpCSgoeCktPmVfbWFjaGluZSA9PSBFTV9TUEFSQyB8fCBcCi0JCQkJCSAoeCktPmVfbWFjaGluZSA9PSBFTV9TUEFSQzMyUExVUykKLSNkZWZpbmUgY29tcGF0X3N0YXJ0X3RocmVhZAkJc3RhcnRfdGhyZWFkMzIKLQotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAotI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQlQQUdFX1NJWkUKLQotLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKLSAgIHVzZSBvZiB0aGlzIGlzIHRvIGludm9rZSAiLi9sZC5zbyBzb21lcHJvZyIgdG8gdGVzdCBvdXQgYSBuZXcgdmVyc2lvbiBvZgotICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KLSAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCi0KLSNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCQkweDAwMDAwMTAwMDAwMDAwMDBVTAotI2RlZmluZSBDT01QQVRfRUxGX0VUX0RZTl9CQVNFCTB4MDAwMDAwMDA3MDAwMDAwMFVMCi0KLQotLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAotICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLiAgKi8KLQotLyogT24gVWx0cmEsIHdlIHN1cHBvcnQgYWxsIG9mIHRoZSB2OCBjYXBhYmlsaXRpZXMuICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzcGFyYzY0X2VsZl9od2NhcCh2b2lkKQotewotCXVuc2lnbmVkIGludCBjYXAgPSAoSFdDQVBfU1BBUkNfRkxVU0ggfCBIV0NBUF9TUEFSQ19TVEJBUiB8Ci0JCQkgICAgSFdDQVBfU1BBUkNfU1dBUCB8IEhXQ0FQX1NQQVJDX01VTERJViB8Ci0JCQkgICAgSFdDQVBfU1BBUkNfVjkpOwotCi0JaWYgKHRsYl90eXBlID09IGNoZWV0YWggfHwgdGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKQotCQljYXAgfD0gSFdDQVBfU1BBUkNfVUxUUkEzOwotCWVsc2UgaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKLQkJaWYgKHN1bjR2X2NoaXBfdHlwZSA9PSBTVU40Vl9DSElQX05JQUdBUkExIHx8Ci0JCSAgICBzdW40dl9jaGlwX3R5cGUgPT0gU1VONFZfQ0hJUF9OSUFHQVJBMikKLQkJCWNhcCB8PSBIV0NBUF9TUEFSQ19CTEtJTklUOwotCQlpZiAoc3VuNHZfY2hpcF90eXBlID09IFNVTjRWX0NISVBfTklBR0FSQTIpCi0JCQljYXAgfD0gSFdDQVBfU1BBUkNfTjI7Ci0JfQotCi0JcmV0dXJuIGNhcDsKLX0KLQotI2RlZmluZSBFTEZfSFdDQVAJc3BhcmM2NF9lbGZfaHdjYXAoKTsKLQotLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCi0gICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgotICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uICAqLwotCi0jZGVmaW5lIEVMRl9QTEFURk9STQkoTlVMTCkKLQotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCVwKLWRvIHsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzOyBcCi0JbmV3X2ZsYWdzICY9IF9USUZfMzJCSVQ7CQkJXAotCWlmICgoZXgpLmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCVwKLQkJbmV3X2ZsYWdzIHw9IF9USUZfMzJCSVQ7CQlcCi0JZWxzZQkJCQkJCVwKLQkJbmV3X2ZsYWdzICY9IH5fVElGXzMyQklUOwkJXAotCWlmICgoY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyAmIF9USUZfMzJCSVQpIFwKLQkgICAgIT0gbmV3X2ZsYWdzKQkJCQlcCi0JCXNldF90aHJlYWRfZmxhZyhUSUZfQUJJX1BFTkRJTkcpOwlcCi0JZWxzZQkJCQkJCVwKLQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0FCSV9QRU5ESU5HKTsJXAotCS8qIGZsdXNoX3RocmVhZCB3aWxsIHVwZGF0ZSBwZ2QgY2FjaGUgKi8JXAotCWlmIChpYmNzMikJCQkJCVwKLQkJc2V0X3BlcnNvbmFsaXR5KFBFUl9TVlI0KTsJCVwKLQllbHNlIGlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAhPSBQRVJfTElOVVgzMikJXAotCQlzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKTsJCVwKLX0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiAhKF9fQVNNX1NQQVJDNjRfRUxGX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2VsZi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9lbnZjdHJsLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2VudmN0cmwuaAppbmRleCBhNTY2OGEwLi5hMmNjMGNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2VudmN0cmwuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2VudmN0cmwuaApAQCAtMSwxMDMgKzEgQEAKLS8qCi0gKgotICogZW52Y3RybC5oOiBEZWZpbml0aW9ucyBmb3IgYWNjZXNzIHRvIHRoZSBpMmMgZW52aXJvbm1lbnQKLSAqICAgICAgICAgICAgbW9uaXRvcmluZyBvbiBVbHRyYXNwYXJjIHN5c3RlbXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4ICBFZGRpZSBDLiBEb3N0ICAoZWNkQHNreW5ldC5iZSkKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgVmluaCBUcnVvbmcgICh2aW5oLnRydW9uZ0Blbmcuc3VuLmNvbSkKLSAqIFZUIC0gQWRkIGFsbCBpb2N0bCBjb21tYW5kcyBhbmQgZW52aXJvbm1lbnQgc3RhdHVzIGRlZmluaXRpb25zIAotICogVlQgLSBBZGQgYXBwbGljYXRpb24gbm90ZSAKLSAqLwotI2lmbmRlZiBfU1BBUkM2NF9FTlZDVFJMX0gKLSNkZWZpbmUgX1NQQVJDNjRfRU5WQ1RSTF9IIDEKLQotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KLS8qIEFwcGxpY2F0aW9uIG5vdGU6Ci0gKgotICogVGhlIGRyaXZlciBzdXBwb3J0cyA0IG9wZXJhdGlvbnM6IG9wZW4oKSwgY2xvc2UoKSwgaW9jdGwoKSwgcmVhZCgpCi0gKiBUaGUgZGV2aWNlIG5hbWUgaXMgL2Rldi9lbnZjdHJsLgotICogQmVsb3cgaXMgc2FtcGxlIHVzYWdlOgotICoKLSAqCWZkID0gb3BlbigiL2Rldi9lbnZ0cmwiLCBPX1JET05MWSk7Ci0gKglpZiAoaW9jdGwoZmQsIEVOVkNUUkxfUkVBRF9TSFVURE9XTl9URU1QRVJBVFVSRSwgMCkgPCAwKQotICoJCXByaW50ZigiZXJyb3JcbiIpOwotICoJcmV0ID0gcmVhZChmZCwgYnVmLCAxMCk7Ci0gKgljbG9zZShmZCk7Ci0gKgotICogTm90aWNlIGluIHRoZSBjYXNlIG9mIGNwdSB2b2x0YWdlIGFuZCB0ZW1wZXJhdHVyZSwgdGhlIGRlZmF1bHQgaXMKLSAqIGNwdTAuICBJZiB3ZSBuZWVkIHRvIGtub3cgdGhlIGluZm8gb2YgY3B1MSwgY3B1MiwgY3B1Mywgd2UgbmVlZCB0bwotICogcGFzcyBpbiBjcHUgbnVtYmVyIGluIGlvY3RsKCkgbGFzdCBwYXJhbWV0ZXIuICBGb3IgZXhhbXBsZSwgdG8KLSAqIGdldCB0aGUgdm9sdGFnZSBvZiBjcHUyOgotICoKLSAqCWlvY3RsYnVmWzBdID0gMjsKLSAqCWlmIChpb2N0bChmZCwgRU5WQ1RSTF9SRUFEX0NQVV9WT0xUQUdFLCBpb2N0bGJ1ZikgPCAwKQotICoJCXByaW50ZigiZXJyb3JcbiIpOwotICoJcmV0ID0gcmVhZChmZCwgYnVmLCAxMCk7Ci0gKgotICogQWxsIHRoZSByZXR1cm4gdmFsdWVzIGFyZSBpbiBhc2NpaS4gIFNvIGNoZWNrIHJlYWQgcmV0dXJuIHZhbHVlCi0gKiBhbmQgZG8gYXBwcm9wcmlhdGUgY29udmVyc2lvbnMgaW4geW91ciBhcHBsaWNhdGlvbi4KLSAqLwotCi0vKiBJT0NUTCBjb21tYW5kcyAqLwotCi0vKiBOb3RlOiB0aGVzZSBjb21tYW5kcyByZWZsZWN0IHBvc3NpYmxlIG1vbml0b3IgZmVhdHVyZXMuCi0gKiBTb21lIGJvYXJkcyBjaG9vc2UgdG8gc3VwcG9ydCBzb21lIG9mIHRoZSBmZWF0dXJlcyBvbmx5LgotICovCi0jZGVmaW5lIEVOVkNUUkxfUkRfQ1BVX1RFTVBFUkFUVVJFCV9JT1IoJ3AnLCAweDQwLCBpbnQpCi0jZGVmaW5lIEVOVkNUUkxfUkRfQ1BVX1ZPTFRBR0UJCV9JT1IoJ3AnLCAweDQxLCBpbnQpCi0jZGVmaW5lIEVOVkNUUkxfUkRfRkFOX1NUQVRVUwkJX0lPUigncCcsIDB4NDIsIGludCkKLSNkZWZpbmUgRU5WQ1RSTF9SRF9XQVJOSU5HX1RFTVBFUkFUVVJFCV9JT1IoJ3AnLCAweDQzLCBpbnQpCi0jZGVmaW5lIEVOVkNUUkxfUkRfU0hVVERPV05fVEVNUEVSQVRVUkUJX0lPUigncCcsIDB4NDQsIGludCkKLSNkZWZpbmUgRU5WQ1RSTF9SRF9WT0xUQUdFX1NUQVRVUwlfSU9SKCdwJywgMHg0NSwgaW50KQotI2RlZmluZSBFTlZDVFJMX1JEX1NDU0lfVEVNUEVSQVRVUkUJX0lPUigncCcsIDB4NDYsIGludCkKLSNkZWZpbmUgRU5WQ1RSTF9SRF9FVEhFUk5FVF9URU1QRVJBVFVSRQlfSU9SKCdwJywgMHg0NywgaW50KQotI2RlZmluZSBFTlZDVFJMX1JEX01USFJCRF9URU1QRVJBVFVSRQlfSU9SKCdwJywgMHg0OCwgaW50KQotCi0jZGVmaW5lIEVOVkNUUkxfUkRfR0xPQkFMQUREUkVTUwlfSU9SKCdwJywgMHg0OSwgaW50KQotCi0vKiBSZWFkIHJldHVybiB2YWx1ZXMgZm9yIGEgdm9sdGFnZSBzdGF0dXMgcmVxdWVzdC4gKi8KLSNkZWZpbmUgRU5WQ1RSTF9WT0xUQUdFX1BPV0VSU1VQUExZX0dPT0QJMHgwMQotI2RlZmluZSBFTlZDVFJMX1ZPTFRBR0VfQkFECQkJMHgwMgotI2RlZmluZSBFTlZDVFJMX1BPV0VSU1VQUExZX0JBRAkJCTB4MDMKLSNkZWZpbmUgRU5WQ1RSTF9WT0xUQUdFX1BPV0VSU1VQUExZX0JBRAkJMHgwNAotCi0vKiBSZWFkIHJldHVybiB2YWx1ZXMgZm9yIGEgZmFuIHN0YXR1cyByZXF1ZXN0LgotICogQSBmYWlsdXJlIG1hdGNoIG1lYW5zIGVpdGhlciB0aGUgZmFuIGZhaWxzIG9yCi0gKiB0aGUgZmFuIGlzIG5vdCBjb25uZWN0ZWQuICBTb21lIGJvYXJkcyBoYXZlIG9wdGlvbmFsCi0gKiBjb25uZWN0b3JzIHRvIGNvbm5lY3QgZXh0cmEgZmFucy4KLSAqCi0gKiBUaGVyZSBhcmUgbWF4aW11bSA4IG1vbml0b3IgZmFucy4gIFNvbWUgYXJlIGNwdSBmYW5zCi0gKiBzb21lIGFyZSBzeXN0ZW0gZmFucy4gIFRoZSBtYXNrIGJlbG93IG9ubHkgaW5kaWNhdGVzCi0gKiBmYW4gYnkgb3JkZXIgbnVtYmVyLgotICogQmVsb3cgaXMgYSBzYW1wbGUgYXBwbGljYXRpb246Ci0gKgotICoJaWYgKGlvY3RsKGZkLCBFTlZDVFJMX1JFQURfRkFOX1NUQVRVUywgMCkgPCAwKSB7Ci0gKgkJcHJpbnRmKCJpb2N0bCBmYW4gZmFpbGVkXG4iKTsKLSAqCX0KLSAqCWlmIChyZWFkKGZkLCByc2x0LCAxKSA8PSAwKSB7Ci0gKgkJcHJpbnRmKCJlcnJvciBvciBmYW4gbm90IG1vbml0b3JlZFxuIik7Ci0gKgl9IGVsc2UgewotICoJCWlmIChyc2x0WzBdID09IEVOVkNUUkxfQUxMX0ZBTlNfR09PRCkgewotICoJCQlwcmludGYoImFsbCBmYW5zIGdvb2RcbiIpOwotICoJfSBlbHNlIGlmIChyc2x0WzBdID09IEVOVkNUUkxfQUxMX0ZBTlNfQkFEKSB7Ci0gKgkJcHJpbnRmKCJhbGwgZmFucyBiYWRcbiIpOwotICoJfSBlbHNlIHsKLSAqCQlpZiAocnNsdFswXSAmIEVOVkNUUkxfRkFOMF9GQUlMVVJFX01BU0spIHsKLSAqCQkJcHJpbnRmKCJmYW4gMCBmYWlsZWQgb3Igbm90IGNvbm5lY3RlZFxuIik7Ci0gKgl9Ci0gKgkuLi4uLi4KLSAqLyAgCi0KLSNkZWZpbmUgRU5WQ1RSTF9BTExfRkFOU19HT09ECQkJMHgwMAotI2RlZmluZSBFTlZDVFJMX0ZBTjBfRkFJTFVSRV9NQVNLCQkweDAxCi0jZGVmaW5lIEVOVkNUUkxfRkFOMV9GQUlMVVJFX01BU0sJCTB4MDIKLSNkZWZpbmUgRU5WQ1RSTF9GQU4yX0ZBSUxVUkVfTUFTSwkJMHgwNAotI2RlZmluZSBFTlZDVFJMX0ZBTjNfRkFJTFVSRV9NQVNLCQkweDA4Ci0jZGVmaW5lIEVOVkNUUkxfRkFONF9GQUlMVVJFX01BU0sJCTB4MTAKLSNkZWZpbmUgRU5WQ1RSTF9GQU41X0ZBSUxVUkVfTUFTSwkJMHgyMAotI2RlZmluZSBFTlZDVFJMX0ZBTjZfRkFJTFVSRV9NQVNLCQkweDQwCi0jZGVmaW5lIEVOVkNUUkxfRkFON19GQUlMVVJFX01BU0sJCTB4ODAKLSNkZWZpbmUgRU5WQ1RSTF9BTExfRkFOU19CQUQgCQkJMHhGRgotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9FTlZDVFJMX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2VudmN0cmwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZXN0YXRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2VzdGF0ZS5oCmluZGV4IDUyMGMwODUuLmJlZGQwZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZXN0YXRlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9lc3RhdGUuaApAQCAtMSw0OSArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9FU1RBVEVfSAotI2RlZmluZSBfU1BBUkM2NF9FU1RBVEVfSAotCi0vKiBVbHRyYVNQQVJDLUlJSSBFLWNhY2hlIEVycm9yIEVuYWJsZSAqLwotI2RlZmluZSBFU1RBVEVfRVJST1JfRk1UCTB4MDAwMDAwMDAwMDA0MDAwMCAvKiBGb3JjZSBNVEFHIEVDQwkJKi8KLSNkZWZpbmUgRVNUQVRFX0VSUk9SX0ZNRVNTCTB4MDAwMDAwMDAwMDAzYzAwMCAvKiBGb3JjZWQgTVRBRyBFQ0MgdmFsCSovCi0jZGVmaW5lIEVTVEFURV9FUlJPUl9GTUQJMHgwMDAwMDAwMDAwMDAyMDAwIC8qIEZvcmNlIERBVEEgRUNDCQkqLwotI2RlZmluZSBFU1RBVEVfRVJST1JfRkRFQ0MJMHgwMDAwMDAwMDAwMDAxZmYwIC8qIEZvcmNlZCBEQVRBIEVDQyB2YWwJKi8KLSNkZWZpbmUgRVNUQVRFX0VSUk9SX1VDRUVOCTB4MDAwMDAwMDAwMDAwMDAwOCAvKiBTZWUgYmVsb3cJCQkqLwotI2RlZmluZSBFU1RBVEVfRVJST1JfTkNFRU4JMHgwMDAwMDAwMDAwMDAwMDAyIC8qIFNlZSBiZWxvdwkJCSovCi0jZGVmaW5lIEVTVEFURV9FUlJPUl9DRUVOCTB4MDAwMDAwMDAwMDAwMDAwMSAvKiBTZWUgYmVsb3cJCQkqLwotCi0vKiBVQ0VFTiBlbmFibGVzIHRoZSBmYXN0X0VDQ19lcnJvciB0cmFwIGZvcjogMSkgc29mdHdhcmUgY29ycmVjdGFibGUgRS1jYWNoZQotICogZXJyb3JzIDIpIHVuY29ycmVjdGFibGUgRS1jYWNoZSBlcnJvcnMuICBTdWNoIGV2ZW50cyBvbmx5IG9jY3VyIG9uIHJlYWRzCi0gKiBvZiB0aGUgRS1jYWNoZSBieSB0aGUgbG9jYWwgcHJvY2Vzc29yIGZvcjogMSkgZGF0YSBsb2FkcyAyKSBpbnN0cnVjdGlvbgotICogZmV0Y2hlcyAzKSBhdG9taWMgb3BlcmF0aW9ucy4gIFN1Y2ggZXZlbnRzIF9jYW5ub3RfIG9jY3VyIGZvcjogMSkgbWVyZ2UKLSAqIDIpIHdyaXRlYmFjayAyKSBjb3B5b3V0LiAgVGhlIEFGU1IgYml0cyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgdHJhcHMgYXJlCi0gKiBVQ0MgYW5kIFVDVS4KLSAqLwotCi0vKiBOQ0VFTiBlbmFibGVzIGluc3RydWN0aW9uX2FjY2Vzc19lcnJvciwgZGF0YV9hY2Nlc3NfZXJyb3IsIGFuZCBFQ0NfZXJyb3IgdHJhcHMKLSAqIGZvciB1bmNvcnJlY3RhYmxlIEVDQyBlcnJvcnMgYW5kIHN5c3RlbSBlcnJvcnMuCi0gKgotICogVW5jb3JyZWN0YWJsZSBzeXN0ZW0gYnVzIGRhdGEgZXJyb3Igb3IgTVRBRyBFQ0MgZXJyb3IsIHN5c3RlbSBidXMgVGltZU9VVCwKLSAqIG9yIHN5c3RlbSBidXMgQnVzRVJSOgotICogMSkgQXMgdGhlIHJlc3VsdCBvZiBhbiBpbnN0cnVjdGlvbiBmZXRjaCwgd2lsbCBnZW5lcmF0ZSBpbnN0cnVjdGlvbl9hY2Nlc3NfZXJyb3IKLSAqIDIpIEFzIHRoZSByZXN1bHQgb2YgYSBsb2FkIGV0Yy4gd2lsbCBnZW5lcmF0ZSBkYXRhX2FjY2Vzc19lcnJvci4KLSAqIDMpIEFzIHRoZSByZXN1bHQgb2Ygc3RvcmUgbWVyZ2UgY29tcGxldGlvbiwgd3JpdGViYWNrLCBvciBjb3B5b3V0IHdpbGwKLSAqICAgIGdlbmVyYXRlIGEgZGlzcnVwdGluZyBFQ0NfZXJyb3IgdHJhcC4KLSAqIDQpIEFzIHRoZSByZXN1bHQgb2Ygc3VjaCBlcnJvcnMgb24gaW5zdHJ1Y3Rpb24gdmVjdG9yIGZldGNoIGNhbiBnZW5lcmF0ZSBhbnkKLSAqICAgIG9mIHRoZSAzIHRyYXAgdHlwZXMuCi0gKgotICogVGhlIEFGU1IgYml0cyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgdHJhcHMgYXJlIEVNVSwgRURVLCBXRFUsIENQVSwgSVZVLCBVRSwKLSAqIEJFUlIsIGFuZCBUTy4KLSAqLwotCi0vKiBDRUVOIGVuYWJsZXMgdGhlIEVDQ19lcnJvciB0cmFwIGZvciBoYXJkd2FyZSBjb3JyZWN0ZWQgRUNDIGVycm9ycy4gIFN5c3RlbSBidXMKLSAqIHJlYWRzIHJlc3VsdGluZyBpbiBhIGhhcmR3YXJlIGNvcnJlY3RlZCBkYXRhIG9yIE1UQUcgRUNDIGVycm9yIHdpbGwgZ2VuZXJhdGUgYW4KLSAqIEVDQ19lcnJvciBkaXNydXB0aW5nIHRyYXAgd2l0aCB0aGlzIGJpdCBlbmFibGVkLgotICoKLSAqIFRoaXMgc2FtZSB0cmFwIHdpbGwgYWxzbyBiZSBnZW5lcmF0ZWQgd2hlbiBhIGhhcmR3YXJlIGNvcnJlY3RlZCBFQ0MgZXJyb3IgcmVzdWx0cwotICogZHVyaW5nIHN0b3JlIG1lcmdlLCB3cml0ZWJhY2ssIGFuZCBjb3B5b3V0IG9wZXJhdGlvbnMuCi0gKi8KLQotLyogSW4gZ2VuZXJhbCwgaWYgdGhlIHRyYXAgZW5hYmxlIGJpdHMgYWJvdmUgYXJlIGRpc2FibGVkIHRoZSBBRlNSIGJpdHMgd2lsbCBzdGlsbAotICogbG9nIHRoZSBldmVudHMgZXZlbiB0aG91Z2ggdGhlIHRyYXAgd2lsbCBub3QgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBwcm9jZXNzb3IuCi0gKi8KLQotI2VuZGlmIC8qIF9TUEFSQzY0X0VTVEFURV9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2VzdGF0ZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9mYmlvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZiaW8uaAppbmRleCBiOTIxNWEwLi5jMTdlZGY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZiaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZiaW8uaApAQCAtMSwzMzAgKzEgQEAKLSNpZm5kZWYgX19MSU5VWF9GQklPX0gKLSNkZWZpbmUgX19MSU5VWF9GQklPX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyogQ29uc3RhbnRzIHVzZWQgZm9yIGZiaW8gU3VuT1MgY29tcGF0aWJpbGl0eSAqLwotLyogKEMpIDE5OTYgTWlndWVsIGRlIEljYXphICovCi0KLS8qIEZyYW1lIGJ1ZmZlciB0eXBlcyAqLwotI2RlZmluZSBGQlRZUEVfTk9UWVBFICAgICAgICAgICAtMQotI2RlZmluZSBGQlRZUEVfU1VOMUJXICAgICAgICAgICAwICAgLyogbW9ubyAqLwotI2RlZmluZSBGQlRZUEVfU1VOMUNPTE9SICAgICAgICAxIAotI2RlZmluZSBGQlRZUEVfU1VOMkJXICAgICAgICAgICAyIAotI2RlZmluZSBGQlRZUEVfU1VOMkNPTE9SICAgICAgICAzIAotI2RlZmluZSBGQlRZUEVfU1VOMkdQICAgICAgICAgICA0IAotI2RlZmluZSBGQlRZUEVfU1VONUNPTE9SICAgICAgICA1IAotI2RlZmluZSBGQlRZUEVfU1VOM0NPTE9SICAgICAgICA2IAotI2RlZmluZSBGQlRZUEVfTUVNQ09MT1IgICAgICAgICA3IAotI2RlZmluZSBGQlRZUEVfU1VONENPTE9SICAgICAgICA4IAotIAotI2RlZmluZSBGQlRZUEVfTk9UU1VOMSAgICAgICAgICA5IAotI2RlZmluZSBGQlRZUEVfTk9UU1VOMiAgICAgICAgICAxMAotI2RlZmluZSBGQlRZUEVfTk9UU1VOMyAgICAgICAgICAxMQotIAotI2RlZmluZSBGQlRZUEVfU1VORkFTVF9DT0xPUiAgICAxMiAgLyogY2c2ICovCi0jZGVmaW5lIEZCVFlQRV9TVU5ST1BfQ09MT1IgICAgIDEzCi0jZGVmaW5lIEZCVFlQRV9TVU5GQl9WSURFTyAgICAgIDE0Ci0jZGVmaW5lIEZCVFlQRV9TVU5HSUZCICAgICAgICAgIDE1Ci0jZGVmaW5lIEZCVFlQRV9TVU5HUExBUyAgICAgICAgIDE2Ci0jZGVmaW5lIEZCVFlQRV9TVU5HUDMgICAgICAgICAgIDE3Ci0jZGVmaW5lIEZCVFlQRV9TVU5HVCAgICAgICAgICAgIDE4Ci0jZGVmaW5lIEZCVFlQRV9TVU5MRU8gICAgICAgICAgIDE5ICAgICAgLyogenggTGVvIGNhcmQgKi8KLSNkZWZpbmUgRkJUWVBFX01ESUNPTE9SICAgICAgICAgMjAgICAgICAvKiBjZzE0ICovCi0jZGVmaW5lIEZCVFlQRV9UQ1hDT0xPUgkJMjEJLyogU1VOVyx0Y3ggY2FyZCAqLwotCi0jZGVmaW5lIEZCVFlQRV9MQVNUUExVU09ORSAgICAgIDIxCS8qIFRoaXMgaXMgbm90IGxhc3QgKyAxIGluIGZhY3QuLi4gKi8KLQotLyogRG9lcyBub3Qgc2VlbSB0byBiZSBsaXN0ZWQgaW4gdGhlIFN1biBmaWxlIGVpdGhlciAqLwotI2RlZmluZSBGQlRZUEVfQ1JFQVRPUiAgICAgICAgICAyMgotI2RlZmluZSBGQlRZUEVfUENJX0lHQTE2ODIJMjMKLSNkZWZpbmUgRkJUWVBFX1A5MTAwQ09MT1IJMjQKLQotI2RlZmluZSBGQlRZUEVfUENJX0dFTkVSSUMJMTAwMAotI2RlZmluZSBGQlRZUEVfUENJX01BQ0g2NAkxMDAxCi0KLS8qIGZiaW8gaW9jdGxzICovCi0vKiBSZXR1cm5lZCBieSBGQklPR1RZUEUgKi8KLXN0cnVjdCAgZmJ0eXBlIHsKLSAgICAgICAgaW50ICAgICBmYl90eXBlOyAgICAgICAgLyogZmIgdHlwZSwgc2VlIGFib3ZlICovCi0gICAgICAgIGludCAgICAgZmJfaGVpZ2h0OyAgICAgIC8qIHBpeGVscyAqLwotICAgICAgICBpbnQgICAgIGZiX3dpZHRoOyAgICAgICAvKiBwaXhlbHMgKi8KLSAgICAgICAgaW50ICAgICBmYl9kZXB0aDsKLSAgICAgICAgaW50ICAgICBmYl9jbXNpemU7ICAgICAgLyogY29sb3IgbWFwIGVudHJpZXMgKi8KLSAgICAgICAgaW50ICAgICBmYl9zaXplOyAgICAgICAgLyogZmIgc2l6ZSBpbiBieXRlcyAqLwotfTsKLSNkZWZpbmUgRkJJT0dUWVBFIF9JT1IoJ0YnLCAwLCBzdHJ1Y3QgZmJ0eXBlKQotCi1zdHJ1Y3QgIGZiY21hcCB7Ci0gICAgICAgIGludCAgICAgICAgICAgICBpbmRleDsgICAgICAgICAgLyogZmlyc3QgZWxlbWVudCAoMCBvcmlnaW4pICovCi0gICAgICAgIGludCAgICAgICAgICAgICBjb3VudDsKLSAgICAgICAgdW5zaWduZWQgY2hhciAgIF9fdXNlciAqcmVkOwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgX191c2VyICpncmVlbjsKLSAgICAgICAgdW5zaWduZWQgY2hhciAgIF9fdXNlciAqYmx1ZTsKLX07Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIEZCSU9QVVRDTUFQX1NQQVJDIF9JT1coJ0YnLCAzLCBzdHJ1Y3QgZmJjbWFwKQotI2RlZmluZSBGQklPR0VUQ01BUF9TUEFSQyBfSU9XKCdGJywgNCwgc3RydWN0IGZiY21hcCkKLSNlbHNlCi0jZGVmaW5lIEZCSU9QVVRDTUFQIF9JT1coJ0YnLCAzLCBzdHJ1Y3QgZmJjbWFwKQotI2RlZmluZSBGQklPR0VUQ01BUCBfSU9XKCdGJywgNCwgc3RydWN0IGZiY21hcCkKLSNlbmRpZgotCi0vKiAjIG9mIGRldmljZSBzcGVjaWZpYyB2YWx1ZXMgKi8KLSNkZWZpbmUgRkJfQVRUUl9OREVWU1BFQ0lGSUMgICAgOAotLyogIyBvZiBwb3NzaWJsZSBlbXVsYXRpb25zICovCi0jZGVmaW5lIEZCX0FUVFJfTkVNVVRZUEVTICAgICAgIDQKLSAKLXN0cnVjdCBmYnNhdHRyIHsKLSAgICAgICAgaW50ICAgICBmbGFnczsKLSAgICAgICAgaW50ICAgICBlbXVfdHlwZTsJLyogLTEgaWYgbm9uZSAqLwotICAgICAgICBpbnQgICAgIGRldl9zcGVjaWZpY1tGQl9BVFRSX05ERVZTUEVDSUZJQ107Ci19OwotIAotc3RydWN0IGZiZ2F0dHIgewotICAgICAgICBpbnQgICAgIHJlYWxfdHlwZTsJLyogcmVhbCBmcmFtZSBidWZmZXIgdHlwZSAqLwotICAgICAgICBpbnQgICAgIG93bmVyOwkJLyogdW5rbm93biAqLwotICAgICAgICBzdHJ1Y3QgZmJ0eXBlIGZidHlwZTsJLyogcmVhbCBmcmFtZSBidWZmZXIgZmJ0eXBlICovCi0gICAgICAgIHN0cnVjdCBmYnNhdHRyIHNhdHRyOyAgIAotICAgICAgICBpbnQgICAgIGVtdV90eXBlc1tGQl9BVFRSX05FTVVUWVBFU107IC8qIHN1cHBvcnRlZCBlbXVsYXRpb25zICovCi19OwotI2RlZmluZSBGQklPU0FUVFIgIF9JT1coJ0YnLCA1LCBzdHJ1Y3QgZmJnYXR0cikgLyogVW5zdXBwb3J0ZWQ6ICovCi0jZGVmaW5lIEZCSU9HQVRUUiAgX0lPUignRicsIDYsIHN0cnVjdCBmYmdhdHRyKQkvKiBzdXBwb3J0ZWQgKi8KLQotI2RlZmluZSBGQklPU1ZJREVPIF9JT1coJ0YnLCA3LCBpbnQpCi0jZGVmaW5lIEZCSU9HVklERU8gX0lPUignRicsIDgsIGludCkKLQotc3RydWN0IGZiY3Vyc29yIHsKLSAgICAgICAgc2hvcnQgc2V0OyAgICAgICAgICAgICAgLyogd2hhdCB0byBzZXQsIGNob29zZSBmcm9tIHRoZSBsaXN0IGFib3ZlICovCi0gICAgICAgIHNob3J0IGVuYWJsZTsgICAgICAgICAgIC8qIGN1cnNvciBvbi9vZmYgKi8KLSAgICAgICAgc3RydWN0IGZiY3VycG9zIHBvczsgICAgLyogY3Vyc29yIHBvc2l0aW9uICovCi0gICAgICAgIHN0cnVjdCBmYmN1cnBvcyBob3Q7ICAgIC8qIGN1cnNvciBob3Qgc3BvdCAqLwotICAgICAgICBzdHJ1Y3QgZmJjbWFwIGNtYXA7ICAgICAvKiBjb2xvciBtYXAgaW5mbyAqLwotICAgICAgICBzdHJ1Y3QgZmJjdXJwb3Mgc2l6ZTsgICAvKiBjdXJzb3IgYml0IG1hcCBzaXplICovCi0gICAgICAgIGNoYXIgX191c2VyICppbWFnZTsgICAgIC8qIGN1cnNvciBpbWFnZSBiaXRzICovCi0gICAgICAgIGNoYXIgX191c2VyICptYXNrOyAgICAgIC8qIGN1cnNvciBtYXNrIGJpdHMgKi8KLX07Ci0KLS8qIHNldC9nZXQgY3Vyc29yIGF0dHJpYnV0ZXMvc2hhcGUgKi8KLSNkZWZpbmUgRkJJT1NDVVJTT1IgICAgIF9JT1coJ0YnLCAyNCwgc3RydWN0IGZiY3Vyc29yKQotI2RlZmluZSBGQklPR0NVUlNPUiAgICAgX0lPV1IoJ0YnLCAyNSwgc3RydWN0IGZiY3Vyc29yKQotIAotLyogc2V0L2dldCBjdXJzb3IgcG9zaXRpb24gKi8KLSNkZWZpbmUgRkJJT1NDVVJQT1MgICAgIF9JT1coJ0YnLCAyNiwgc3RydWN0IGZiY3VycG9zKQotI2RlZmluZSBGQklPR0NVUlBPUyAgICAgX0lPVygnRicsIDI3LCBzdHJ1Y3QgZmJjdXJwb3MpCi0gCi0vKiBnZXQgbWF4IGN1cnNvciBzaXplICovCi0jZGVmaW5lIEZCSU9HQ1VSTUFYICAgICBfSU9SKCdGJywgMjgsIHN0cnVjdCBmYmN1cnBvcykKLQotLyogd2lkIG1hbmlwdWxhdGlvbiAqLwotc3RydWN0IGZiX3dpZF9hbGxvYyB7Ci0jZGVmaW5lIEZCX1dJRF9TSEFSRURfOAkJMAotI2RlZmluZSBGQl9XSURfU0hBUkVEXzI0CTEKLSNkZWZpbmUgRkJfV0lEX0RCTF84CQkyCi0jZGVmaW5lIEZCX1dJRF9EQkxfMjQJCTMKLQlfX3UzMgl3YV90eXBlOwotCV9fczMyCXdhX2luZGV4OwkvKiBTZXQgb24gcmV0dXJuICovCi0JX191MzIJd2FfY291bnQ7CQotfTsKLXN0cnVjdCBmYl93aWRfaXRlbSB7Ci0JX191MzIJd2lfdHlwZTsKLQlfX3MzMgl3aV9pbmRleDsKLQlfX3UzMgl3aV9hdHRyczsKLQlfX3UzMgl3aV92YWx1ZXNbMzJdOwotfTsKLXN0cnVjdCBmYl93aWRfbGlzdCB7Ci0JX191MzIJd2xfZmxhZ3M7Ci0JX191MzIJd2xfY291bnQ7Ci0Jc3RydWN0IGZiX3dpZF9pdGVtCSp3bF9saXN0OwotfTsKLQotI2RlZmluZSBGQklPX1dJRF9BTExPQwlfSU9XUignRicsIDMwLCBzdHJ1Y3QgZmJfd2lkX2FsbG9jKQotI2RlZmluZSBGQklPX1dJRF9GUkVFCV9JT1coJ0YnLCAzMSwgc3RydWN0IGZiX3dpZF9hbGxvYykKLSNkZWZpbmUgRkJJT19XSURfUFVUCV9JT1coJ0YnLCAzMiwgc3RydWN0IGZiX3dpZF9saXN0KQotI2RlZmluZSBGQklPX1dJRF9HRVQJX0lPV1IoJ0YnLCAzMywgc3RydWN0IGZiX3dpZF9saXN0KQotCi0vKiBDcmVhdG9yIGlvY3RscyAqLwotI2RlZmluZSBGRkJfSU9DVEwJKCdGJzw8OCkKLSNkZWZpbmUgRkZCX1NZU19JTkZPCQkoRkZCX0lPQ1RMfDgwKQotI2RlZmluZSBGRkJfQ0xVVFJFQUQJCShGRkJfSU9DVEx8ODEpCi0jZGVmaW5lIEZGQl9DTFVUUE9TVAkJKEZGQl9JT0NUTHw4MikKLSNkZWZpbmUgRkZCX1NFVERJQUdNT0RFCQkoRkZCX0lPQ1RMfDgzKQotI2RlZmluZSBGRkJfR0VUTU9OSVRPUklECShGRkJfSU9DVEx8ODQpCi0jZGVmaW5lIEZGQl9HRVRWSURFT01PREUJKEZGQl9JT0NUTHw4NSkKLSNkZWZpbmUgRkZCX1NFVFZJREVPTU9ERQkoRkZCX0lPQ1RMfDg2KQotI2RlZmluZSBGRkJfU0VUU0VSVkVSCQkoRkZCX0lPQ1RMfDg3KQotI2RlZmluZSBGRkJfU0VUT1ZDVEwJCShGRkJfSU9DVEx8ODgpCi0jZGVmaW5lIEZGQl9HRVRPVkNUTAkJKEZGQl9JT0NUTHw4OSkKLSNkZWZpbmUgRkZCX0dFVFNBWE5VTQkJKEZGQl9JT0NUTHw5MCkKLSNkZWZpbmUgRkZCX0ZCREVCVUcJCShGRkJfSU9DVEx8OTEpCi0KLS8qIENnMTQgaW9jdGxzICovCi0jZGVmaW5lIE1ESV9JT0NUTCAgICAgICAgICAoJ00nPDw4KQotI2RlZmluZSBNRElfUkVTRVQgICAgICAgICAgKE1ESV9JT0NUTHwxKQotI2RlZmluZSBNRElfR0VUX0NGR0lORk8gICAgKE1ESV9JT0NUTHwyKQotI2RlZmluZSBNRElfU0VUX1BJWEVMTU9ERSAgKE1ESV9JT0NUTHwzKQotIyAgICBkZWZpbmUgTURJXzMyX1BJWCAgICAgMzIKLSMgICAgZGVmaW5lIE1ESV8xNl9QSVggICAgIDE2Ci0jICAgIGRlZmluZSBNRElfOF9QSVggICAgICA4Ci0KLXN0cnVjdCBtZGlfY2ZnaW5mbyB7Ci0JaW50ICAgICBtZGlfbmNsdXRzOyAgICAgLyogTnVtYmVyIG9mIGltcGxlbWVudGVkIENMVVRzIGluIHRoaXMgTURJICovCi0gICAgICAgIGludCAgICAgbWRpX3R5cGU7ICAgICAgIC8qIEZCVFlQRSBuYW1lICovCi0gICAgICAgIGludCAgICAgbWRpX2hlaWdodDsgICAgIC8qIGhlaWdodCAqLwotICAgICAgICBpbnQgICAgIG1kaV93aWR0aDsgICAgICAvKiB3aWRodCAqLwotICAgICAgICBpbnQgICAgIG1kaV9zaXplOyAgICAgICAvKiBhdmFpbGFibGUgcmFtICovCi0gICAgICAgIGludCAgICAgbWRpX21vZGU7ICAgICAgIC8qIDhicHAsIDE2YnBwIG9yIDMyYnBwICovCi0gICAgICAgIGludCAgICAgbWRpX3BpeGZyZXE7ICAgIC8qIHBpeGVsIGNsb2NrIChmcm9tIFBST00pICovCi19OwotCi0vKiBTcGFyY0xpbnV4IHNwZWNpZmljIGlvY3RsIGZvciB0aGUgTURJLCBzaG91bGQgYmUgcmVwbGFjZWQgZm9yCi0gKiB0aGUgU0VUX1hMVVQvU0VUX0NMVVRuIGlvY3RscyBpbnN0ZWFkCi0gKi8KLSNkZWZpbmUgTURJX0NMRUFSX1hMVVQgICAgICAgKE1ESV9JT0NUTHw5KQotCi0vKiBsZW8gJiBmZmIgaW9jdGxzICovCi1zdHJ1Y3QgZmJfY2x1dF9hbGxvYyB7Ci0JX191MzIJY2x1dGlkOwkvKiBTZXQgb24gcmV0dXJuICovCi0gCV9fdTMyCWZsYWc7Ci0gCV9fdTMyCWluZGV4OwotfTsKLQotc3RydWN0IGZiX2NsdXQgewotI2RlZmluZSBGQl9DTFVUX1dBSVQJMHgwMDAwMDAwMQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCi0gCV9fdTMyCWZsYWc7Ci0gCV9fdTMyCWNsdXRpZDsKLSAJX191MzIJb2Zmc2V0OwotIAlfX3UzMgljb3VudDsKLSAJY2hhciAqCXJlZDsKLSAJY2hhciAqCWdyZWVuOwotIAljaGFyICoJYmx1ZTsKLX07Ci0KLXN0cnVjdCBmYl9jbHV0MzIgewotIAlfX3UzMglmbGFnOwotIAlfX3UzMgljbHV0aWQ7Ci0gCV9fdTMyCW9mZnNldDsKLSAJX191MzIJY291bnQ7Ci0gCV9fdTMyCXJlZDsKLSAJX191MzIJZ3JlZW47Ci0gCV9fdTMyCWJsdWU7Ci19OwotCi0jZGVmaW5lIExFT19DTFVUQUxMT0MJX0lPV1IoJ0wnLCA1Mywgc3RydWN0IGZiX2NsdXRfYWxsb2MpCi0jZGVmaW5lIExFT19DTFVURlJFRQlfSU9XKCdMJywgNTQsIHN0cnVjdCBmYl9jbHV0X2FsbG9jKQotI2RlZmluZSBMRU9fQ0xVVFJFQUQJX0lPVygnTCcsIDU1LCBzdHJ1Y3QgZmJfY2x1dCkKLSNkZWZpbmUgTEVPX0NMVVRQT1NUCV9JT1coJ0wnLCA1Niwgc3RydWN0IGZiX2NsdXQpCi0jZGVmaW5lIExFT19TRVRHQU1NQQlfSU9XKCdMJywgNjgsIGludCkgLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLwotI2RlZmluZSBMRU9fR0VUR0FNTUEJX0lPUignTCcsIDY5LCBpbnQpIC8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLS8qIEFkZHJlc3NlcyBvbiB0aGUgZmQgb2YgYSBjZ3NpeCB0aGF0IGFyZSBtYXBwYWJsZSAqLwotI2RlZmluZSBDRzZfRkJDICAgIDB4NzAwMDAwMDAKLSNkZWZpbmUgQ0c2X1RFQyAgICAweDcwMDAxMDAwCi0jZGVmaW5lIENHNl9CVFJFR1MgMHg3MDAwMjAwMAotI2RlZmluZSBDRzZfRkhDICAgIDB4NzAwMDQwMDAKLSNkZWZpbmUgQ0c2X1RIQyAgICAweDcwMDA1MDAwCi0jZGVmaW5lIENHNl9ST00gICAgMHg3MDAwNjAwMAotI2RlZmluZSBDRzZfUkFNICAgIDB4NzAwMTYwMDAKLSNkZWZpbmUgQ0c2X0RIQyAgICAweDgwMDAwMDAwCi0KLSNkZWZpbmUgQ0czX01NQVBfT0ZGU0VUIDB4NDAwMDAwMAotCi0vKiBBZGRyZXNzZXMgb24gdGhlIGZkIG9mIGEgdGN4IHRoYXQgYXJlIG1hcHBhYmxlICovCi0jZGVmaW5lIFRDWF9SQU04QklUICAgCQkweDAwMDAwMDAwCi0jZGVmaW5lIFRDWF9SQU0yNEJJVCAgIAkJMHgwMTAwMDAwMAotI2RlZmluZSBUQ1hfVU5LMyAgIAkJMHgxMDAwMDAwMAotI2RlZmluZSBUQ1hfVU5LNCAgIAkJMHgyMDAwMDAwMAotI2RlZmluZSBUQ1hfQ09OVFJPTFBMQU5FICAgCTB4MjgwMDAwMDAKLSNkZWZpbmUgVENYX1VOSzYgICAJCTB4MzAwMDAwMDAKLSNkZWZpbmUgVENYX1VOSzcgICAJCTB4MzgwMDAwMDAKLSNkZWZpbmUgVENYX1RFQyAgICAJCTB4NzAwMDAwMDAKLSNkZWZpbmUgVENYX0JUUkVHUyAJCTB4NzAwMDIwMDAKLSNkZWZpbmUgVENYX1RIQyAgICAJCTB4NzAwMDQwMDAKLSNkZWZpbmUgVENYX0RIQyAgICAJCTB4NzAwMDgwMDAKLSNkZWZpbmUgVENYX0FMVAkgICAJCTB4NzAwMGEwMDAKLSNkZWZpbmUgVENYX1NZTkMgICAJCTB4NzAwMGUwMDAKLSNkZWZpbmUgVENYX1VOSzIgICAgCQkweDcwMDEwMDAwCi0KLS8qIENHMTQgZGVmaW5pdGlvbnMgKi8KLQotLyogT2Zmc2V0cyBpbnRvIHRoZSBPQklPIHNwYWNlOiAqLwotI2RlZmluZSBDRzE0X1JFR1MgICAgICAgIDAgICAgICAgLyogcmVnaXN0ZXJzICovCi0jZGVmaW5lIENHMTRfQ1VSU09SUkVHUyAgMHgxMDAwICAvKiBjdXJzb3IgcmVnaXN0ZXJzICovCi0jZGVmaW5lIENHMTRfREFDUkVHUyAgICAgMHgyMDAwICAvKiBEQUMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIENHMTRfWExVVCAgICAgICAgMHgzMDAwICAvKiBYIExvb2sgVXAgVGFibGUgLS0gPz8/ICovCi0jZGVmaW5lIENHMTRfQ0xVVDEgICAgICAgMHg0MDAwICAvKiBDb2xvciBMb29rIFVwIFRhYmxlICovCi0jZGVmaW5lIENHMTRfQ0xVVDIgICAgICAgMHg1MDAwICAvKiBDb2xvciBMb29rIFVwIFRhYmxlICovCi0jZGVmaW5lIENHMTRfQ0xVVDMgICAgICAgMHg2MDAwICAvKiBDb2xvciBMb29rIFVwIFRhYmxlICovCi0jZGVmaW5lIENHMTRfQVVUTwkgMHhmMDAwCi0KLSNlbmRpZiAvKiBLRVJORUwgKi8KLQotLyogVGhlc2UgYXJlIGV4cG9ydGVkIHRvIHVzZXJsYW5kIGZvciBhcHBsaWNhdGlvbnMgdG8gdXNlICovCi0vKiBNYXBwYWJsZSBvZmZzZXRzIGZvciB0aGUgY2cxNDogY29udHJvbCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTURJX0RJUkVDVF9NQVAgMHgxMDAwMDAwMAotI2RlZmluZSBNRElfQ1RMUkVHX01BUCAweDIwMDAwMDAwCi0jZGVmaW5lIE1ESV9DVVJTT1JfTUFQIDB4MzAwMDAwMDAKLSNkZWZpbmUgTURJX1NIRFdfVlJUX01BUCAweDQwMDAwMDAwCi0KLS8qIE1hcHBhYmxlIG9mZnNldHMgZm9yIHRoZSBjZzE0OiBmcmFtZSBidWZmZXIgcmVzb2x1dGlvbnMgKi8KLS8qIDMyIGJpdHMgKi8KLSNkZWZpbmUgTURJX0NIVU5LWV9YQkdSX01BUCAweDUwMDAwMDAwCi0jZGVmaW5lIE1ESV9DSFVOS1lfQkdSX01BUCAweDYwMDAwMDAwCi0KLS8qIDE2IGJpdHMgKi8KLSNkZWZpbmUgTURJX1BMQU5BUl9YMTZfTUFQIDB4NzAwMDAwMDAKLSNkZWZpbmUgTURJX1BMQU5BUl9DMTZfTUFQIDB4ODAwMDAwMDAKLQotLyogOCBiaXQgaXMgZG9uZSBhcyBDRzMgTU1BUCBvZmZzZXQgKi8KLS8qIDMyIGJpdHMsIHBsYW5hciAqLwotI2RlZmluZSBNRElfUExBTkFSX1gzMl9NQVAgMHg5MDAwMDAwMAotI2RlZmluZSBNRElfUExBTkFSX0IzMl9NQVAgMHhhMDAwMDAwMAotI2RlZmluZSBNRElfUExBTkFSX0czMl9NQVAgMHhiMDAwMDAwMAotI2RlZmluZSBNRElfUExBTkFSX1IzMl9NQVAgMHhjMDAwMDAwMAotCi0vKiBNYXBwYWJsZSBvZmZzZXRzIG9uIGxlbyAqLwotI2RlZmluZSBMRU9fU1MwX01BUCAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgTEVPX0xDX1NTMF9VU1JfTUFQICAgICAweDAwODAwMDAwCi0jZGVmaW5lIExFT19MRF9TUzBfTUFQICAgICAgICAgMHgwMDgwMTAwMAotI2RlZmluZSBMRU9fTFhfQ1VSU09SX01BUCAgICAgIDB4MDA4MDIwMDAKLSNkZWZpbmUgTEVPX1NTMV9NQVAgICAgICAgICAgICAweDAwODAzMDAwCi0jZGVmaW5lIExFT19MQ19TUzFfVVNSX01BUCAgICAgMHgwMTAwMzAwMAotI2RlZmluZSBMRU9fTERfU1MxX01BUCAgICAgICAgIDB4MDEwMDQwMDAKLSNkZWZpbmUgTEVPX1VOS19NQVAgICAgICAgICAgICAweDAxMDA1MDAwCi0jZGVmaW5lIExFT19MWF9LUk5fTUFQICAgICAgICAgMHgwMTAwNjAwMAotI2RlZmluZSBMRU9fTENfU1MwX0tSTl9NQVAgICAgIDB4MDEwMDcwMDAKLSNkZWZpbmUgTEVPX0xDX1NTMV9LUk5fTUFQICAgICAweDAxMDA4MDAwCi0jZGVmaW5lIExFT19MRF9HQkxfTUFQICAgICAgICAgMHgwMTAwOTAwMAotI2RlZmluZSBMRU9fVU5LMl9NQVAgICAgICAgICAgIDB4MDEwMGEwMDAKLQotI2lmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCAgZmJjbWFwMzIgewotCWludCAgICAgICAgICAgICBpbmRleDsgICAgICAgICAgLyogZmlyc3QgZWxlbWVudCAoMCBvcmlnaW4pICovCi0JaW50ICAgICAgICAgICAgIGNvdW50OwotCXUzMgkJcmVkOwotCXUzMgkJZ3JlZW47Ci0JdTMyCQlibHVlOwotfTsKLQotI2RlZmluZSBGQklPUFVUQ01BUDMyCV9JT1coJ0YnLCAzLCBzdHJ1Y3QgZmJjbWFwMzIpCi0jZGVmaW5lIEZCSU9HRVRDTUFQMzIJX0lPVygnRicsIDQsIHN0cnVjdCBmYmNtYXAzMikKLQotc3RydWN0IGZiY3Vyc29yMzIgewotCXNob3J0IHNldDsJCS8qIHdoYXQgdG8gc2V0LCBjaG9vc2UgZnJvbSB0aGUgbGlzdCBhYm92ZSAqLwotCXNob3J0IGVuYWJsZTsJCS8qIGN1cnNvciBvbi9vZmYgKi8KLQlzdHJ1Y3QgZmJjdXJwb3MgcG9zOwkvKiBjdXJzb3IgcG9zaXRpb24gKi8KLQlzdHJ1Y3QgZmJjdXJwb3MgaG90OwkvKiBjdXJzb3IgaG90IHNwb3QgKi8KLQlzdHJ1Y3QgZmJjbWFwMzIgY21hcDsJLyogY29sb3IgbWFwIGluZm8gKi8KLQlzdHJ1Y3QgZmJjdXJwb3Mgc2l6ZTsJLyogY3Vyc29yIGJpdCBtYXAgc2l6ZSAqLwotCXUzMglpbWFnZTsJCS8qIGN1cnNvciBpbWFnZSBiaXRzICovCi0JdTMyCW1hc2s7CQkvKiBjdXJzb3IgbWFzayBiaXRzICovCi19OwotCi0jZGVmaW5lIEZCSU9TQ1VSU09SMzIJX0lPVygnRicsIDI0LCBzdHJ1Y3QgZmJjdXJzb3IzMikKLSNkZWZpbmUgRkJJT0dDVVJTT1IzMglfSU9XKCdGJywgMjUsIHN0cnVjdCBmYmN1cnNvcjMyKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0xJTlVYX0ZCSU9fSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9mYmlvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZjbnRsLmgKaW5kZXggOGEwOWNhNy4uOGIxYmVhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9mY250bC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmNudGwuaApAQCAtMSwzNSArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9GQ05UTF9ICi0jZGVmaW5lIF9TUEFSQzY0X0ZDTlRMX0gKLQotLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcwotICAgbG9jYXRlZCBvbiBhbiBleHQyIGZpbGUgc3lzdGVtICovCi0jZGVmaW5lIE9fTkRFTEFZCTB4MDAwNAotI2RlZmluZSBPX0FQUEVORAkweDAwMDgKLSNkZWZpbmUgRkFTWU5DCQkweDAwNDAJLyogZmNudGwsIGZvciBCU0QgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBPX0NSRUFUCQkweDAyMDAJLyogbm90IGZjbnRsICovCi0jZGVmaW5lIE9fVFJVTkMJCTB4MDQwMAkvKiBub3QgZmNudGwgKi8KLSNkZWZpbmUgT19FWENMCQkweDA4MDAJLyogbm90IGZjbnRsICovCi0jZGVmaW5lIE9fU1lOQwkJMHgyMDAwCi0jZGVmaW5lIE9fTk9OQkxPQ0sJMHg0MDAwCi0jZGVmaW5lIE9fTk9DVFRZCTB4ODAwMAkvKiBub3QgZmNudGwgKi8KLSNkZWZpbmUgT19MQVJHRUZJTEUJMHg0MDAwMAotI2RlZmluZSBPX0RJUkVDVCAgICAgICAgMHgxMDAwMDAgLyogZGlyZWN0IGRpc2sgYWNjZXNzIGhpbnQgKi8KLSNkZWZpbmUgT19OT0FUSU1FCTB4MjAwMDAwCi0jZGVmaW5lIE9fQ0xPRVhFQwkweDQwMDAwMAotCi0jZGVmaW5lIEZfR0VUT1dOCTUJLyogIGZvciBzb2NrZXRzLiAqLwotI2RlZmluZSBGX1NFVE9XTgk2CS8qICBmb3Igc29ja2V0cy4gKi8KLSNkZWZpbmUgRl9HRVRMSwkJNwotI2RlZmluZSBGX1NFVExLCQk4Ci0jZGVmaW5lIEZfU0VUTEtXCTkKLQotLyogZm9yIHBvc2l4IGZjbnRsKCkgYW5kIGxvY2tmKCkgKi8KLSNkZWZpbmUgRl9SRExDSwkJMQotI2RlZmluZSBGX1dSTENLCQkyCi0jZGVmaW5lIEZfVU5MQ0sJCTMKLQotI2RlZmluZSBfX0FSQ0hfRkxPQ0tfUEFECXNob3J0IF9fdW51c2VkOwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZmNudGwuaD4KLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfRkNOVExfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmhjLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZoYy5oCmluZGV4IGRkZmZjZGYuLjczZWIwNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmhjLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9maGMuaApAQCAtMSwxMzEgKzEgQEAKLS8qCi0gKiBmaGMuaDogU3RydWN0dXJlcyBmb3IgY2VudHJhbC9maGMgcHNldWRvIGRyaXZlciBvbiBTdW5maXJlL1N0YXJmaXJlL1dpbGRmaXJlLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCi0gKi8KLQotI2lmbmRlZiBfU1BBUkM2NF9GSENfSAotI2RlZmluZSBfU1BBUkM2NF9GSENfSAotCi0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLQotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3VwYS5oPgotCi1zdHJ1Y3QgbGludXhfZmhjOwotCi0vKiBDbG9jayBib2FyZCByZWdpc3RlciBvZmZzZXRzLiAqLwotI2RlZmluZSBDTE9DS19DVFJMCTB4MDBVTAkvKiBNYWluIGNvbnRyb2wgKi8KLSNkZWZpbmUgQ0xPQ0tfU1RBVDEJMHgxMFVMCS8qIFN0YXR1cyBvbmUgKi8KLSNkZWZpbmUgQ0xPQ0tfU1RBVDIJMHgyMFVMCS8qIFN0YXR1cyB0d28gKi8KLSNkZWZpbmUgQ0xPQ0tfUFdSU1RBVAkweDMwVUwJLyogUG93ZXIgc3RhdHVzICovCi0jZGVmaW5lIENMT0NLX1BXUlBSRVMJMHg0MFVMCS8qIFBvd2VyIHByZXNlbmNlICovCi0jZGVmaW5lIENMT0NLX1RFTVAJMHg1MFVMCS8qIFRlbXBlcmF0dXJlICovCi0jZGVmaW5lIENMT0NLX0lSUURJQUcJMHg2MFVMCS8qIElSUSBkaWFnbm9zdGljcyAqLwotI2RlZmluZSBDTE9DS19QV1JTVEFUMgkweDcwVUwJLyogUG93ZXIgc3RhdHVzIHR3byAqLwotCi0jZGVmaW5lIENMT0NLX0NUUkxfTExFRAkJMHgwNAkvKiBMZWZ0IExFRCwgMCA9PSBvbiAqLwotI2RlZmluZSBDTE9DS19DVFJMX01MRUQJCTB4MDIJLyogTWlkIExFRCwgMSA9PSBvbiAqLwotI2RlZmluZSBDTE9DS19DVFJMX1JMRUQJCTB4MDEJLyogUklnaHQgTEVELCAxID09IG9uICovCi0KLXN0cnVjdCBsaW51eF9jZW50cmFsIHsKLQlzdHJ1Y3QgbGludXhfZmhjCQkqY2hpbGQ7Ci0JdW5zaWduZWQgbG9uZwkJCWNmcmVnOwotCXVuc2lnbmVkIGxvbmcJCQljbGtyZWdzOwotCXVuc2lnbmVkIGxvbmcJCQljbGt2ZXI7Ci0JaW50CQkJCXNsb3RzOwotCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKnByb21fbm9kZTsKLQotCXN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcwljZW50cmFsX3Jhbmdlc1tQUk9NUkVHX01BWF07Ci0JaW50CQkJCW51bV9jZW50cmFsX3JhbmdlczsKLX07Ci0KLS8qIEZpcmVob3NlIGNvbnRyb2xsZXIgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotc3RydWN0IGZoY19yZWdzIHsKLQl1bnNpZ25lZCBsb25nCQkJcHJlZ3M7CS8qIEZIQyBpbnRlcm5hbCByZWdzICovCi0jZGVmaW5lIEZIQ19QUkVHU19JRAkweDAwVUwJLyogRkhDIElEICovCi0jZGVmaW5lICBGSENfSURfVkVSUwkJMHhmMDAwMDAwMCAvKiBWZXJzaW9uIG9mIHRoaXMgRkhDCQkqLwotI2RlZmluZSAgRkhDX0lEX1BBUlRJRAkJMHgwZmZmZjAwMCAvKiBQYXJ0IElEIGNvZGUgKDB4MGY5ZiA9PSBGSEMpCSovCi0jZGVmaW5lICBGSENfSURfTUFOVUYJCTB4MDAwMDAwN2UgLyogTWFudWZhY3R1cmVyICgweDNlID09IFNVTidzIEpFREVDKSovCi0jZGVmaW5lICBGSENfSURfUkVTVgkJMHgwMDAwMDAwMSAvKiBSZWFkIGFzIG9uZQkJCSovCi0jZGVmaW5lIEZIQ19QUkVHU19SQ1MJMHgxMFVMCS8qIEZIQyBSZXNldCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgRkhDX1JDU19QT1IJCTB4ODAwMDAwMDAgLyogTGFzdCByZXNldCB3YXMgYSBwb3dlciBjeWNsZQkqLwotI2RlZmluZSAgRkhDX1JDU19TUE9SCQkweDQwMDAwMDAwIC8qIExhc3QgcmVzZXQgd2FzIHN3IHBvd2VyIG9uIHJlc2V0CSovCi0jZGVmaW5lICBGSENfUkNTX1NYSVIJCTB4MjAwMDAwMDAgLyogTGFzdCByZXNldCB3YXMgc3cgWElSIHJlc2V0CSovCi0jZGVmaW5lICBGSENfUkNTX0JQT1IJCTB4MTAwMDAwMDAgLyogTGFzdCByZXNldCB3YXMgZHVlIHRvIFBPUiBidXR0b24JKi8KLSNkZWZpbmUgIEZIQ19SQ1NfQlhJUgkJMHgwODAwMDAwMCAvKiBMYXN0IHJlc2V0IHdhcyBkdWUgdG8gWElSIGJ1dHRvbgkqLwotI2RlZmluZSAgRkhDX1JDU19XRVZFTlQJCTB4MDQwMDAwMDAgLyogQ1BVIHJlc2V0IHdhcyBkdWUgdG8gd2FrZXVwIGV2ZW50CSovCi0jZGVmaW5lICBGSENfUkNTX0NGQVRBTAkJMHgwMjAwMDAwMCAvKiBDZW50ZXJwbGFuZSBGYXRhbCBFcnJvciBzaWduYWxsZWQJKi8KLSNkZWZpbmUgIEZIQ19SQ1NfRkVOQUIJCTB4MDEwMDAwMDAgLyogRmF0YWwgZXJyb3JzIGVsaWNpdCBzeXN0ZW0gcmVzZXQJKi8KLSNkZWZpbmUgRkhDX1BSRUdTX0NUUkwJMHgyMFVMCS8qIEZIQyBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lICBGSENfQ09OVFJPTF9JQ1MJMHgwMDEwMDAwMCAvKiBJZ25vcmUgQ2VudGVycGxhbmUgU2lnbmFscwkqLwotI2RlZmluZSAgRkhDX0NPTlRST0xfRlJTVAkweDAwMDgwMDAwIC8qIEZhdGFsIEVycm9yIFJlc2V0IEVuYWJsZQkJKi8KLSNkZWZpbmUgIEZIQ19DT05UUk9MX0xGQVQJMHgwMDA0MDAwMCAvKiBBQy9EQyBzaWduYWxsZWQgYSBsb2NhbCBlcnJvcgkqLwotI2RlZmluZSAgRkhDX0NPTlRST0xfU0xJTkUJMHgwMDAxMDAwMCAvKiBGaXJtd2FyZSBTeW5jaHJvbml6YXRpb24gTGluZQkqLwotI2RlZmluZSAgRkhDX0NPTlRST0xfRENECTB4MDAwMDgwMDAgLyogREMtLT5EQyBDb252ZXJ0ZXIgRGlzYWJsZQkJKi8KLSNkZWZpbmUgIEZIQ19DT05UUk9MX1BPRkYJMHgwMDAwNDAwMCAvKiBBQy9EQyBDb250cm9sbGVyIFBMTCBEaXNhYmxlCSovCi0jZGVmaW5lICBGSENfQ09OVFJPTF9GT0ZGCTB4MDAwMDIwMDAgLyogRkhDIENvbnRyb2xsZXIgUExMIERpc2FibGUJKi8KLSNkZWZpbmUgIEZIQ19DT05UUk9MX0FPRkYJMHgwMDAwMTAwMCAvKiBDUFUgQSBTUkFNL1NCRCBMb3cgUG93ZXIgTW9kZQkqLwotI2RlZmluZSAgRkhDX0NPTlRST0xfQk9GRgkweDAwMDAwODAwIC8qIENQVSBCIFNSQU0vU0JEIExvdyBQb3dlciBNb2RlCSovCi0jZGVmaW5lICBGSENfQ09OVFJPTF9QU09GRgkweDAwMDAwNDAwIC8qIFR1cm5zIG9mZiB0aGlzIEZIQydzIHBvd2VyIHN1cHBseQkqLwotI2RlZmluZSAgRkhDX0NPTlRST0xfSVhJU1QJMHgwMDAwMDIwMCAvKiAwPUZIQyB0ZWxscyBjbG9jayBib2FyZCBpdCBleGlzdHMJKi8KLSNkZWZpbmUgIEZIQ19DT05UUk9MX1hNU1RSCTB4MDAwMDAxMDAgLyogMT1DYXVzZXMgdGhpcyBGSEMgdG8gYmUgWElSIG1hc3RlciovCi0jZGVmaW5lICBGSENfQ09OVFJPTF9MTEVECTB4MDAwMDAwNDAgLyogMD1MZWZ0IExFRCBPTgkJCSovCi0jZGVmaW5lICBGSENfQ09OVFJPTF9NTEVECTB4MDAwMDAwMjAgLyogMT1NaWRkbGUgTEVEIE9OCQkJKi8KLSNkZWZpbmUgIEZIQ19DT05UUk9MX1JMRUQJMHgwMDAwMDAxMCAvKiAxPVJpZ2h0IExFRAkJCSovCi0jZGVmaW5lICBGSENfQ09OVFJPTF9CUElOUwkweDAwMDAwMDAzIC8qIFNwYXJlIEJpZGlyZWN0aW9uYWwgUGlucwkJKi8KLSNkZWZpbmUgRkhDX1BSRUdTX0JTUgkweDMwVUwJLyogRkhDIEJvYXJkIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgRkhDX0JTUl9EQTY0CQkweDAwMDQwMDAwIC8qIFBvcnQgQTogMD0xMjhiaXQgMT02NGJpdCBkYXRhIHBhdGggKi8KLSNkZWZpbmUgIEZIQ19CU1JfREI2NAkJMHgwMDAyMDAwMCAvKiBQb3J0IEI6IDA9MTI4Yml0IDE9NjRiaXQgZGF0YSBwYXRoICovCi0jZGVmaW5lICBGSENfQlNSX0JJRAkJMHgwMDAxZTAwMCAvKiBCb2FyZCBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lICBGSENfQlNSX1NBCQkweDAwMDAxYzAwIC8qIFBvcnQgQSBVUEEgU3BlZWQgKGZyb20gdGhlIHBpbnMpICAgKi8KLSNkZWZpbmUgIEZIQ19CU1JfU0IJCTB4MDAwMDAzODAgLyogUG9ydCBCIFVQQSBTcGVlZCAoZnJvbSB0aGUgcGlucykgICAqLwotI2RlZmluZSAgRkhDX0JTUl9ORElBRwkJMHgwMDAwMDA0MCAvKiBOb3QgaW4gRGlhZyBNb2RlICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lICBGSENfQlNSX05UQkVECQkweDAwMDAwMDIwIC8qIE5vdCBpbiBUZXN0QkVEIE1vZGUgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgIEZIQ19CU1JfTklBCQkweDAwMDAwMDFjIC8qIEp1bXBlciwgYml0IDE4IGluIFBST00gc3BhY2UgICAgICAgKi8KLSNkZWZpbmUgIEZIQ19CU1JfU0kJCTB4MDAwMDAwMDEgLyogU3BhcmUgaW5wdXQgcGluIHZhbHVlICAgICAgICAgICAgICAqLwotI2RlZmluZSBGSENfUFJFR1NfRUNDCTB4NDBVTAkvKiBGSEMgRUNDIENvbnRyb2wgUmVnaXN0ZXIgKDE2IGJpdHMpICovCi0jZGVmaW5lIEZIQ19QUkVHU19KQ1RSTAkweGYwVUwJLyogRkhDIEpUQUcgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgRkhDX0pUQUdfQ1RSTF9NRU5BQgkweDgwMDAwMDAwIC8qIEluZGljYXRlcyB0aGlzIGlzIEpUQUcgTWFzdGVyCSAqLwotI2RlZmluZSAgRkhDX0pUQUdfQ1RSTF9NTk9ORQkweDQwMDAwMDAwIC8qIEluZGljYXRlcyBubyBKVEFHIE1hc3RlciBwcmVzZW50CSAqLwotI2RlZmluZSBGSENfUFJFR1NfSkNNRAkweDEwMFVMCS8qIEZIQyBKVEFHIENvbW1hbmQgUmVnaXN0ZXIgKi8KLQl1bnNpZ25lZCBsb25nCQkJaXJlZzsJLyogRkhDIElHTiByZWcgKi8KLSNkZWZpbmUgRkhDX0lSRUdfSUdOCTB4MDBVTAkvKiBUaGlzIEZIQydzIElHTiAqLwotCXVuc2lnbmVkIGxvbmcJCQlmZnJlZ3M7CS8qIEZIQyBmYW5mYWlsIHJlZ3MgKi8KLSNkZWZpbmUgRkhDX0ZGUkVHU19JTUFQCTB4MDBVTAkvKiBGSEMgRmFuZmFpbCBJTUFQICovCi0jZGVmaW5lIEZIQ19GRlJFR1NfSUNMUgkweDEwVUwJLyogRkhDIEZhbmZhaWwgSUNMUiAqLwotCXVuc2lnbmVkIGxvbmcJCQlzcmVnczsJLyogRkhDIHN5c3RlbSByZWdzICovCi0jZGVmaW5lIEZIQ19TUkVHU19JTUFQCTB4MDBVTAkvKiBGSEMgU3lzdGVtIElNQVAgKi8KLSNkZWZpbmUgRkhDX1NSRUdTX0lDTFIJMHgxMFVMCS8qIEZIQyBTeXN0ZW0gSUNMUiAqLwotCXVuc2lnbmVkIGxvbmcJCQl1cmVnczsJLyogRkhDIHVhcnQgcmVncyAqLwotI2RlZmluZSBGSENfVVJFR1NfSU1BUAkweDAwVUwJLyogRkhDIFVhcnQgSU1BUCAqLwotI2RlZmluZSBGSENfVVJFR1NfSUNMUgkweDEwVUwJLyogRkhDIFVhcnQgSUNMUiAqLwotCXVuc2lnbmVkIGxvbmcJCQl0cmVnczsJLyogRkhDIFRPRCByZWdzICovCi0jZGVmaW5lIEZIQ19UUkVHU19JTUFQCTB4MDBVTAkvKiBGSEMgVE9EIElNQVAgKi8KLSNkZWZpbmUgRkhDX1RSRUdTX0lDTFIJMHgxMFVMCS8qIEZIQyBUT0QgSUNMUiAqLwotfTsKLQotc3RydWN0IGxpbnV4X2ZoYyB7Ci0Jc3RydWN0IGxpbnV4X2ZoYwkJKm5leHQ7Ci0Jc3RydWN0IGxpbnV4X2NlbnRyYWwJCSpwYXJlbnQ7CS8qIE5VTEwgaWYgbm90IGNlbnRyYWwgRkhDICovCi0Jc3RydWN0IGZoY19yZWdzCQkJZmhjX3JlZ3M7Ci0JaW50CQkJCWJvYXJkOwotCWludAkJCQlqdGFnX21hc3RlcjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpwcm9tX25vZGU7Ci0KLQlzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMJZmhjX3Jhbmdlc1tQUk9NUkVHX01BWF07Ci0JaW50CQkJCW51bV9maGNfcmFuZ2VzOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBsaW51eF9jZW50cmFsICpjZW50cmFsX2J1czsKLQotZXh0ZXJuIHZvaWQgYXBwbHlfY2VudHJhbF9yYW5nZXMoc3RydWN0IGxpbnV4X2NlbnRyYWwgKmNlbnRyYWwsIAotCQkJCSBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3MsCi0JCQkJIGludCBucmVncyk7Ci0KLWV4dGVybiB2b2lkIGFwcGx5X2ZoY19yYW5nZXMoc3RydWN0IGxpbnV4X2ZoYyAqZmhjLCAKLQkJCSAgICAgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzLAotCQkJICAgICBpbnQgbnJlZ3MpOwotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9GSENfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvZmhjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9mbG9wcHkuaAppbmRleCBjYTE5ZjgwLi4yMTQ4NzgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Zsb3BweS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmxvcHB5LmgKQEAgLTEsNzgyICsxIEBACi0vKiBmbG9wcHkuaDogU3BhcmMgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEZsb3BweSBkcml2ZXIuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2LCAyMDA3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKLSAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQotICoKLSAqIFVsdHJhL1BDSSBzdXBwb3J0IGFkZGVkOiBTZXAgMTk5NyAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9TUEFSQzY0X0ZMT1BQWV9ICi0jZGVmaW5lIF9fQVNNX1NQQVJDNjRfRkxPUFBZX0gKLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9hdXhpby5oPgotI2luY2x1ZGUgPGFzbS9zYnVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0KLS8qCi0gKiBEZWZpbmUgdGhpcyB0byBlbmFibGUgZXhjaGFuZ2luZyBkcml2ZSAwIGFuZCAxIGlmIG9ubHkgZHJpdmUgMSBpcwotICogcHJvYmVkIG9uIFBDSSBtYWNoaW5lcy4KLSAqLwotI3VuZGVmIFBDSV9GRENfU1dBUF9EUklWRVMKLQotCi0vKiBSZWZlcmVuY2VzOgotICogMSkgTmV0YnNkIFN1biBmbG9wcHkgZHJpdmVyLgotICogMikgTkNSIDgyMDc3IGNvbnRyb2xsZXIgbWFudWFsCi0gKiAzKSBJbnRlbCA4MjA3NyBjb250cm9sbGVyIG1hbnVhbAotICovCi1zdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBzdGF0dXMxXzgyMDc3OyAvKiBBdXhpbGlhcnkgU3RhdHVzIHJlZy4gMSAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3RhdHVzMl84MjA3NzsgLyogQXV4aWxpYXJ5IFN0YXR1cyByZWcuIDIgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGRvcl84MjA3NzsgICAgIC8qIERpZ2l0YWwgT3V0cHV0IHJlZy4gKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHRhcGVjdGxfODIwNzc7IC8qIFRhcGUgQ29udHJvbCByZWcgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHN0YXR1c184MjA3NzsgIC8qIE1haW4gU3RhdHVzIFJlZ2lzdGVyLiAqLwotI2RlZmluZSBkcnNfODIwNzcgICAgICAgICAgICAgIHN0YXR1c184MjA3NyAgIC8qIERpZ2l0YWwgUmF0ZSBTZWxlY3QgcmVnLiAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZGF0YV84MjA3NzsgICAgLyogRGF0YSBmaWZvLiAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19fdW51c2VkOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZGlyXzgyMDc3OyAgICAgLyogRGlnaXRhbCBJbnB1dCByZWcuICovCi0jZGVmaW5lIGRjcl84MjA3NyAgICAgICAgICAgICAgZGlyXzgyMDc3ICAgICAgLyogQ29uZmlnIENvbnRyb2wgcmVnLiAqLwotfTsKLQotLyogWW91J2xsIG9ubHkgZXZlciBmaW5kIG9uZSBjb250cm9sbGVyIG9uIGFuIFVsdHJhIGFueXdheXMuICovCi1zdGF0aWMgc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKnN1bl9mZGMgPSAoc3RydWN0IHN1bl9mbHB5X2NvbnRyb2xsZXIgKiktMTsKLXVuc2lnbmVkIGxvbmcgZmRjX3N0YXR1czsKLXN0YXRpYyBzdHJ1Y3Qgc2J1c19kZXYgKmZsb3BweV9zZGV2ID0gTlVMTDsKLQotc3RydWN0IHN1bl9mbG9wcHlfb3BzIHsKLQl1bnNpZ25lZCBjaGFyCSgqZmRfaW5iKSAodW5zaWduZWQgbG9uZyBwb3J0KTsKLQl2b2lkCQkoKmZkX291dGIpICh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCXZvaWQJCSgqZmRfZW5hYmxlX2RtYSkgKHZvaWQpOwotCXZvaWQJCSgqZmRfZGlzYWJsZV9kbWEpICh2b2lkKTsKLQl2b2lkCQkoKmZkX3NldF9kbWFfbW9kZSkgKGludCk7Ci0Jdm9pZAkJKCpmZF9zZXRfZG1hX2FkZHIpIChjaGFyICopOwotCXZvaWQJCSgqZmRfc2V0X2RtYV9jb3VudCkgKGludCk7Ci0JdW5zaWduZWQgaW50CSgqZ2V0X2RtYV9yZXNpZHVlKSAodm9pZCk7Ci0JaW50CQkoKmZkX3JlcXVlc3RfaXJxKSAodm9pZCk7Ci0Jdm9pZAkJKCpmZF9mcmVlX2lycSkgKHZvaWQpOwotCWludAkJKCpmZF9lamVjdCkgKGludCk7Ci19OwotCi1zdGF0aWMgc3RydWN0IHN1bl9mbG9wcHlfb3BzIHN1bl9mZG9wczsKLQotI2RlZmluZSBmZF9pbmIocG9ydCkgICAgICAgICAgICAgIHN1bl9mZG9wcy5mZF9pbmIocG9ydCkKLSNkZWZpbmUgZmRfb3V0Yih2YWx1ZSxwb3J0KSAgICAgICBzdW5fZmRvcHMuZmRfb3V0Yih2YWx1ZSxwb3J0KQotI2RlZmluZSBmZF9lbmFibGVfZG1hKCkgICAgICAgICAgIHN1bl9mZG9wcy5mZF9lbmFibGVfZG1hKCkKLSNkZWZpbmUgZmRfZGlzYWJsZV9kbWEoKSAgICAgICAgICBzdW5fZmRvcHMuZmRfZGlzYWJsZV9kbWEoKQotI2RlZmluZSBmZF9yZXF1ZXN0X2RtYSgpICAgICAgICAgICgwKSAvKiBub3RoaW5nLi4uICovCi0jZGVmaW5lIGZkX2ZyZWVfZG1hKCkgICAgICAgICAgICAgLyogbm90aGluZy4uLiAqLwotI2RlZmluZSBmZF9jbGVhcl9kbWFfZmYoKSAgICAgICAgIC8qIG5vdGhpbmcuLi4gKi8KLSNkZWZpbmUgZmRfc2V0X2RtYV9tb2RlKG1vZGUpICAgICBzdW5fZmRvcHMuZmRfc2V0X2RtYV9tb2RlKG1vZGUpCi0jZGVmaW5lIGZkX3NldF9kbWFfYWRkcihhZGRyKSAgICAgc3VuX2Zkb3BzLmZkX3NldF9kbWFfYWRkcihhZGRyKQotI2RlZmluZSBmZF9zZXRfZG1hX2NvdW50KGNvdW50KSAgIHN1bl9mZG9wcy5mZF9zZXRfZG1hX2NvdW50KGNvdW50KQotI2RlZmluZSBnZXRfZG1hX3Jlc2lkdWUoeCkgICAgICAgIHN1bl9mZG9wcy5nZXRfZG1hX3Jlc2lkdWUoKQotI2RlZmluZSBmZF9jYWNoZWZsdXNoKGFkZHIsIHNpemUpIC8qIG5vdGhpbmcuLi4gKi8KLSNkZWZpbmUgZmRfcmVxdWVzdF9pcnEoKSAgICAgICAgICBzdW5fZmRvcHMuZmRfcmVxdWVzdF9pcnEoKQotI2RlZmluZSBmZF9mcmVlX2lycSgpICAgICAgICAgICAgIHN1bl9mZG9wcy5mZF9mcmVlX2lycSgpCi0jZGVmaW5lIGZkX2VqZWN0KGRyaXZlKSAgICAgICAgICAgc3VuX2Zkb3BzLmZkX2VqZWN0KGRyaXZlKQotCi0vKiBTdXBlciBwYXJhbm9pZC4uLiAqLwotI3VuZGVmIEhBVkVfRElTQUJMRV9ITFQKLQotc3RhdGljIGludCBzdW5fZmxvcHB5X3R5cGVzWzJdID0geyAwLCAwIH07Ci0KLS8qIEhlcmUgaXMgd2hlcmUgd2UgY2F0Y2ggdGhlIGZsb3BweSBkcml2ZXIgdHJ5aW5nIHRvIGluaXRpYWxpemUsCi0gKiB0aGVyZWZvcmUgdGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBQUk9NIGRldmljZSB0cmVlIHByb2JpbmcKLSAqIHJvdXRpbmUgZXRjLiBvbiB0aGUgU3BhcmMuCi0gKi8KLSNkZWZpbmUgRkxPUFBZMF9UWVBFCQlzdW5fZmxvcHB5X2luaXQoKQotI2RlZmluZSBGTE9QUFkxX1RZUEUJCXN1bl9mbG9wcHlfdHlwZXNbMV0KLQotI2RlZmluZSBGREMxCQkJKCh1bnNpZ25lZCBsb25nKXN1bl9mZGMpCi0KLSNkZWZpbmUgTl9GREMgICAgMQotI2RlZmluZSBOX0RSSVZFICA4Ci0KLS8qIE5vIDY0ayBib3VuZGFyeSBjcm9zc2luZyBwcm9ibGVtcyBvbiB0aGUgU3BhcmMuICovCi0jZGVmaW5lIENST1NTXzY0S0IoYSxzKSAoMCkKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgc3VuXzgyMDc3X2ZkX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JdWRlbGF5KDUpOwotCXN3aXRjaChwb3J0ICYgNykgewotCWRlZmF1bHQ6Ci0JCXByaW50aygiZmxvcHB5OiBBc2tlZCB0byByZWFkIHVua25vd24gcG9ydCAlbHhcbiIsIHBvcnQpOwotCQlwYW5pYygiZmxvcHB5OiBQb3J0IGJvbGl4ZWQuIik7Ci0JY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KLQkJcmV0dXJuIHNidXNfcmVhZGIoJnN1bl9mZGMtPnN0YXR1c184MjA3NykgJiB+U1RBVFVTX0RNQTsKLQljYXNlIDU6IC8qIEZEX0RBVEEgKi8KLQkJcmV0dXJuIHNidXNfcmVhZGIoJnN1bl9mZGMtPmRhdGFfODIwNzcpOwotCWNhc2UgNzogLyogRkRfRElSICovCi0JCS8qIFhYWDogSXMgRENMIG9uIDB4ODAgaW4gc3VuNG0/ICovCi0JCXJldHVybiBzYnVzX3JlYWRiKCZzdW5fZmRjLT5kaXJfODIwNzcpOwotCX07Ci0JcGFuaWMoInN1bl84MjA3Ml9mZF9pbmI6IEhvdyBkaWQgSSBnZXQgaGVyZT8iKTsKLX0KLQotc3RhdGljIHZvaWQgc3VuXzgyMDc3X2ZkX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCXVkZWxheSg1KTsKLQlzd2l0Y2gocG9ydCAmIDcpIHsKLQlkZWZhdWx0OgotCQlwcmludGsoImZsb3BweTogQXNrZWQgdG8gd3JpdGUgdG8gdW5rbm93biBwb3J0ICVseFxuIiwgcG9ydCk7Ci0JCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKLQljYXNlIDI6IC8qIEZEX0RPUiAqLwotCQkvKiBIYXBwaWx5LCB0aGUgODIwNzcgaGFzIGEgcmVhbCBET1IgcmVnaXN0ZXIuICovCi0JCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+ZG9yXzgyMDc3KTsKLQkJYnJlYWs7Ci0JY2FzZSA1OiAvKiBGRF9EQVRBICovCi0JCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+ZGF0YV84MjA3Nyk7Ci0JCWJyZWFrOwotCWNhc2UgNzogLyogRkRfRENSICovCi0JCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+ZGNyXzgyMDc3KTsKLQkJYnJlYWs7Ci0JY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KLQkJc2J1c193cml0ZWIodmFsdWUsICZzdW5fZmRjLT5zdGF0dXNfODIwNzcpOwotCQlicmVhazsKLQl9OwotCXJldHVybjsKLX0KLQotLyogRm9yIHBzZXVkby1kbWEgKFN1biBmbG9wcHkgZHJpdmVzIGhhdmUgbm8gcmVhbCBETUEgYXZhaWxhYmxlIHRvCi0gKiB0aGVtIHNvIHdlIG11c3QgZWF0IHRoZSBkYXRhIGZpZm8gYnl0ZXMgZGlyZWN0bHkgb3Vyc2VsdmVzKSB3ZSBoYXZlCi0gKiB0aHJlZSBzdGF0ZSB2YXJpYWJsZXMuICBkb2luZ19wZG1hIHRlbGxzIG91ciBpbmxpbmUgbG93LWxldmVsCi0gKiBhc3NlbWJseSBmbG9wcHkgaW50ZXJydXB0IGVudHJ5IHBvaW50IHdoZXRoZXIgaXQgc2hvdWxkIHNpdCBhbmQgZWF0Ci0gKiBieXRlcyBmcm9tIHRoZSBmaWZvIG9yIGp1c3QgdHJhbnNmZXIgY29udHJvbCB1cCB0byB0aGUgaGlnaGVyIGxldmVsCi0gKiBmbG9wcHkgaW50ZXJydXB0IGMtY29kZS4gIEkgdHJpZWQgdmVyeSBoYXJkIGJ1dCBJIGNvdWxkIG5vdCBnZXQgdGhlCi0gKiBwc2V1ZG8tZG1hIHRvIHdvcmsgaW4gYy1jb2RlIHdpdGhvdXQgZ2V0dGluZyBtYW55IG92ZXJydW5zIGFuZAotICogdW5kZXJydW5zLiAgSWYgbm9uLXplcm8sIGRvaW5nX3BkbWEgZW5jb2RlcyB0aGUgZGlyZWN0aW9uIG9mCi0gKiB0aGUgdHJhbnNmZXIgZm9yIGRlYnVnZ2luZy4gIDE9cmVhZCAyPXdyaXRlCi0gKi8KLXVuc2lnbmVkIGNoYXIgKnBkbWFfdmFkZHI7Ci11bnNpZ25lZCBsb25nIHBkbWFfc2l6ZTsKLXZvbGF0aWxlIGludCBkb2luZ19wZG1hID0gMDsKLQotLyogVGhpcyBpcyBzb2Z0d2FyZSBzdGF0ZSAqLwotY2hhciAqcGRtYV9iYXNlID0gTlVMTDsKLXVuc2lnbmVkIGxvbmcgcGRtYV9hcmVhc2l6ZTsKLQotLyogQ29tbW9uIHJvdXRpbmVzIHRvIGFsbCBjb250cm9sbGVyIHR5cGVzIG9uIHRoZSBTcGFyYy4gKi8KLXN0YXRpYyB2b2lkIHN1bl9mZF9kaXNhYmxlX2RtYSh2b2lkKQotewotCWRvaW5nX3BkbWEgPSAwOwotCWlmIChwZG1hX2Jhc2UpIHsKLQkJbW11X3VubG9ja2FyZWEocGRtYV9iYXNlLCBwZG1hX2FyZWFzaXplKTsKLQkJcGRtYV9iYXNlID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHN1bl9mZF9zZXRfZG1hX21vZGUoaW50IG1vZGUpCi17Ci0Jc3dpdGNoKG1vZGUpIHsKLQljYXNlIERNQV9NT0RFX1JFQUQ6Ci0JCWRvaW5nX3BkbWEgPSAxOwotCQlicmVhazsKLQljYXNlIERNQV9NT0RFX1dSSVRFOgotCQlkb2luZ19wZG1hID0gMjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKCJVbmtub3duIGRtYSBtb2RlICVkXG4iLCBtb2RlKTsKLQkJcGFuaWMoImZsb3BweTogR2l2aW5nIHVwLi4uIik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzdW5fZmRfc2V0X2RtYV9hZGRyKGNoYXIgKmJ1ZmZlcikKLXsKLQlwZG1hX3ZhZGRyID0gYnVmZmVyOwotfQotCi1zdGF0aWMgdm9pZCBzdW5fZmRfc2V0X2RtYV9jb3VudChpbnQgbGVuZ3RoKQotewotCXBkbWFfc2l6ZSA9IGxlbmd0aDsKLX0KLQotc3RhdGljIHZvaWQgc3VuX2ZkX2VuYWJsZV9kbWEodm9pZCkKLXsKLQlwZG1hX3ZhZGRyID0gbW11X2xvY2thcmVhKHBkbWFfdmFkZHIsIHBkbWFfc2l6ZSk7Ci0JcGRtYV9iYXNlID0gcGRtYV92YWRkcjsKLQlwZG1hX2FyZWFzaXplID0gcGRtYV9zaXplOwotfQotCi1pcnFyZXR1cm5fdCBzcGFyY19mbG9wcHlfaXJxKGludCBpcnEsIHZvaWQgKmRldl9jb29raWUpCi17Ci0JaWYgKGxpa2VseShkb2luZ19wZG1hKSkgewotCQl2b2lkIF9faW9tZW0gKnN0YXQgPSAodm9pZCBfX2lvbWVtICopIGZkY19zdGF0dXM7Ci0JCXVuc2lnbmVkIGNoYXIgKnZhZGRyID0gcGRtYV92YWRkcjsKLQkJdW5zaWduZWQgbG9uZyBzaXplID0gcGRtYV9zaXplOwotCQl1OCB2YWw7Ci0KLQkJd2hpbGUgKHNpemUpIHsKLQkJCXZhbCA9IHJlYWRiKHN0YXQpOwotCQkJaWYgKHVubGlrZWx5KCEodmFsICYgMHg4MCkpKSB7Ci0JCQkJcGRtYV92YWRkciA9IHZhZGRyOwotCQkJCXBkbWFfc2l6ZSA9IHNpemU7Ci0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJfQotCQkJaWYgKHVubGlrZWx5KCEodmFsICYgMHgyMCkpKSB7Ci0JCQkJcGRtYV92YWRkciA9IHZhZGRyOwotCQkJCXBkbWFfc2l6ZSA9IHNpemU7Ci0JCQkJZG9pbmdfcGRtYSA9IDA7Ci0JCQkJZ290byBtYWluX2ludGVycnVwdDsKLQkJCX0KLQkJCWlmICh2YWwgJiAweDQwKSB7Ci0JCQkJLyogcmVhZCAqLwotCQkJCSp2YWRkcisrID0gcmVhZGIoc3RhdCArIDEpOwotCQkJfSBlbHNlIHsKLQkJCQl1bnNpZ25lZCBjaGFyIGRhdGEgPSAqdmFkZHIrKzsKLQotCQkJCS8qIHdyaXRlICovCi0JCQkJd3JpdGViKGRhdGEsIHN0YXQgKyAxKTsKLQkJCX0KLQkJCXNpemUtLTsKLQkJfQotCi0JCXBkbWFfdmFkZHIgPSB2YWRkcjsKLQkJcGRtYV9zaXplID0gc2l6ZTsKLQotCQkvKiBTZW5kIFRlcm1pbmFsIENvdW50IHB1bHNlIHRvIGZsb3BweSBjb250cm9sbGVyLiAqLwotCQl2YWwgPSByZWFkYihhdXhpb19yZWdpc3Rlcik7Ci0JCXZhbCB8PSBBVVhJT19BVVgxX0ZUQ05UOwotCQl3cml0ZWIodmFsLCBhdXhpb19yZWdpc3Rlcik7Ci0JCXZhbCAmPSB+QVVYSU9fQVVYMV9GVENOVDsKLQkJd3JpdGViKHZhbCwgYXV4aW9fcmVnaXN0ZXIpOwotCi0JCWRvaW5nX3BkbWEgPSAwOwotCX0KLQotbWFpbl9pbnRlcnJ1cHQ6Ci0JcmV0dXJuIGZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfY29va2llKTsKLX0KLQotc3RhdGljIGludCBzdW5fZmRfcmVxdWVzdF9pcnEodm9pZCkKLXsKLQlzdGF0aWMgaW50IG9uY2UgPSAwOwotCWludCBlcnJvcjsKLQotCWlmKCFvbmNlKSB7Ci0JCW9uY2UgPSAxOwotCi0JCWVycm9yID0gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgc3BhcmNfZmxvcHB5X2lycSwgCi0JCQkJICAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKLQotCQlyZXR1cm4gKChlcnJvciA9PSAwKSA/IDAgOiAtMSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdW5fZmRfZnJlZV9pcnEodm9pZCkKLXsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBzdW5fZ2V0X2RtYV9yZXNpZHVlKHZvaWQpCi17Ci0JLyogWFhYIFRoaXMgaXNuJ3QgcmVhbGx5IGNvcnJlY3QuIFhYWCAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN1bl9mZF9lamVjdChpbnQgZHJpdmUpCi17Ci0Jc2V0X2RvcigweDAwLCAweGZmLCAweDkwKTsKLQl1ZGVsYXkoNTAwKTsKLQlzZXRfZG9yKDB4MDAsIDB4NmYsIDB4MDApOwotCXVkZWxheSg1MDApOwotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX1BDSQotI2luY2x1ZGUgPGFzbS9lYnVzLmg+Ci0jaW5jbHVkZSA8YXNtL25zODczMDMuaD4KLQotc3RhdGljIHN0cnVjdCBlYnVzX2RtYV9pbmZvIHN1bl9wY2lfZmRfZWJ1c19kbWE7Ci1zdGF0aWMgc3RydWN0IHBjaV9kZXYgKnN1bl9wY2lfZWJ1c19kZXY7Ci1zdGF0aWMgaW50IHN1bl9wY2lfYnJva2VuX2RyaXZlID0gLTE7Ci0KLXN0cnVjdCBzdW5fcGNpX2RtYV9vcCB7Ci0JdW5zaWduZWQgaW50IAlhZGRyOwotCWludAkJbGVuOwotCWludAkJZGlyZWN0aW9uOwotCWNoYXIJCSpidWY7Ci19Owotc3RhdGljIHN0cnVjdCBzdW5fcGNpX2RtYV9vcCBzdW5fcGNpX2RtYV9jdXJyZW50ID0geyAtMVUsIDAsIDAsIE5VTEx9Owotc3RhdGljIHN0cnVjdCBzdW5fcGNpX2RtYV9vcCBzdW5fcGNpX2RtYV9wZW5kaW5nID0geyAtMVUsIDAsIDAsIE5VTEx9OwotCi1leHRlcm4gaXJxcmV0dXJuX3QgZmxvcHB5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzdW5fcGNpX2ZkX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JdWRlbGF5KDUpOwotCXJldHVybiBpbmIocG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN1bl9wY2lfZmRfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCXVkZWxheSg1KTsKLQlvdXRiKHZhbCwgcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN1bl9wY2lfZmRfYnJva2VuX291dGIodW5zaWduZWQgY2hhciB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQl1ZGVsYXkoNSk7Ci0JLyoKLQkgKiBYWFg6IER1ZSB0byBTVU4ncyBicm9rZW4gZmxvcHB5IGNvbm5lY3RvciBvbiBBWCBhbmQgQVhpCi0JICogICAgICB3ZSBuZWVkIHRvIHR1cm4gb24gTU9UT1JfMCBhbHNvLCBpZiB0aGUgZmxvcHB5IGlzCi0JICogICAgICBqdW1wZXJlZCB0byBEUzEgKGxpa2UgbW9zdCBQQyBmbG9wcGllcyBhcmUpLiBJIGhvcGUKLQkgKiAgICAgIHRoaXMgZG9lcyBub3QgaHVydCBjb3JyZWN0IGhhcmR3YXJlIGxpa2UgdGhlIEFYbXAuCi0JICogICAgICAoRWRkaWUsIFNlcCAxMiAxOTk4KS4KLQkgKi8KLQlpZiAocG9ydCA9PSAoKHVuc2lnbmVkIGxvbmcpc3VuX2ZkYykgKyAyKSB7Ci0JCWlmICgoKHZhbCAmIDB4MDMpID09IHN1bl9wY2lfYnJva2VuX2RyaXZlKSAmJiAodmFsICYgMHgyMCkpIHsKLQkJCXZhbCB8PSAweDEwOwotCQl9Ci0JfQotCW91dGIodmFsLCBwb3J0KTsKLX0KLQotI2lmZGVmIFBDSV9GRENfU1dBUF9EUklWRVMKLXN0YXRpYyB2b2lkIHN1bl9wY2lfZmRfbGRlX2Jyb2tlbl9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JdWRlbGF5KDUpOwotCS8qCi0JICogWFhYOiBEdWUgdG8gU1VOJ3MgYnJva2VuIGZsb3BweSBjb25uZWN0b3Igb24gQVggYW5kIEFYaQotCSAqICAgICAgd2UgbmVlZCB0byB0dXJuIG9uIE1PVE9SXzAgYWxzbywgaWYgdGhlIGZsb3BweSBpcwotCSAqICAgICAganVtcGVyZWQgdG8gRFMxIChsaWtlIG1vc3QgUEMgZmxvcHBpZXMgYXJlKS4gSSBob3BlCi0JICogICAgICB0aGlzIGRvZXMgbm90IGh1cnQgY29ycmVjdCBoYXJkd2FyZSBsaWtlIHRoZSBBWG1wLgotCSAqICAgICAgKEVkZGllLCBTZXAgMTIgMTk5OCkuCi0JICovCi0JaWYgKHBvcnQgPT0gKCh1bnNpZ25lZCBsb25nKXN1bl9mZGMpICsgMikgewotCQlpZiAoKCh2YWwgJiAweDAzKSA9PSBzdW5fcGNpX2Jyb2tlbl9kcml2ZSkgJiYgKHZhbCAmIDB4MTApKSB7Ci0JCQl2YWwgJj0gfigweDAzKTsKLQkJCXZhbCB8PSAweDIxOwotCQl9Ci0JfQotCW91dGIodmFsLCBwb3J0KTsKLX0KLSNlbmRpZiAvKiBQQ0lfRkRDX1NXQVBfRFJJVkVTICovCi0KLXN0YXRpYyB2b2lkIHN1bl9wY2lfZmRfZW5hYmxlX2RtYSh2b2lkKQotewotCUJVR19PTigoTlVMTCA9PSBzdW5fcGNpX2RtYV9wZW5kaW5nLmJ1ZikgCXx8Ci0JICAgICgwCSAgPT0gc3VuX3BjaV9kbWFfcGVuZGluZy5sZW4pIAl8fAotCSAgICAoMAkgID09IHN1bl9wY2lfZG1hX3BlbmRpbmcuZGlyZWN0aW9uKSk7Ci0KLQlzdW5fcGNpX2RtYV9jdXJyZW50LmJ1ZiA9IHN1bl9wY2lfZG1hX3BlbmRpbmcuYnVmOwotCXN1bl9wY2lfZG1hX2N1cnJlbnQubGVuID0gc3VuX3BjaV9kbWFfcGVuZGluZy5sZW47Ci0Jc3VuX3BjaV9kbWFfY3VycmVudC5kaXJlY3Rpb24gPSBzdW5fcGNpX2RtYV9wZW5kaW5nLmRpcmVjdGlvbjsKLQotCXN1bl9wY2lfZG1hX3BlbmRpbmcuYnVmICA9IE5VTEw7Ci0Jc3VuX3BjaV9kbWFfcGVuZGluZy5sZW4gID0gMDsKLQlzdW5fcGNpX2RtYV9wZW5kaW5nLmRpcmVjdGlvbiA9IDA7Ci0Jc3VuX3BjaV9kbWFfcGVuZGluZy5hZGRyID0gLTFVOwotCi0Jc3VuX3BjaV9kbWFfY3VycmVudC5hZGRyID0gCi0JCXBjaV9tYXBfc2luZ2xlKHN1bl9wY2lfZWJ1c19kZXYsCi0JCQkgICAgICAgc3VuX3BjaV9kbWFfY3VycmVudC5idWYsCi0JCQkgICAgICAgc3VuX3BjaV9kbWFfY3VycmVudC5sZW4sCi0JCQkgICAgICAgc3VuX3BjaV9kbWFfY3VycmVudC5kaXJlY3Rpb24pOwotCi0JZWJ1c19kbWFfZW5hYmxlKCZzdW5fcGNpX2ZkX2VidXNfZG1hLCAxKTsKLQotCWlmIChlYnVzX2RtYV9yZXF1ZXN0KCZzdW5fcGNpX2ZkX2VidXNfZG1hLAotCQkJICAgICBzdW5fcGNpX2RtYV9jdXJyZW50LmFkZHIsCi0JCQkgICAgIHN1bl9wY2lfZG1hX2N1cnJlbnQubGVuKSkKLQkJQlVHKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN1bl9wY2lfZmRfZGlzYWJsZV9kbWEodm9pZCkKLXsKLQllYnVzX2RtYV9lbmFibGUoJnN1bl9wY2lfZmRfZWJ1c19kbWEsIDApOwotCWlmIChzdW5fcGNpX2RtYV9jdXJyZW50LmFkZHIgIT0gLTFVKQotCQlwY2lfdW5tYXBfc2luZ2xlKHN1bl9wY2lfZWJ1c19kZXYsCi0JCQkJIHN1bl9wY2lfZG1hX2N1cnJlbnQuYWRkciwKLQkJCQkgc3VuX3BjaV9kbWFfY3VycmVudC5sZW4sCi0JCQkJIHN1bl9wY2lfZG1hX2N1cnJlbnQuZGlyZWN0aW9uKTsKLQlzdW5fcGNpX2RtYV9jdXJyZW50LmFkZHIgPSAtMVU7Ci19Ci0KLXN0YXRpYyB2b2lkIHN1bl9wY2lfZmRfc2V0X2RtYV9tb2RlKGludCBtb2RlKQotewotCWlmIChtb2RlID09IERNQV9NT0RFX1dSSVRFKQotCQlzdW5fcGNpX2RtYV9wZW5kaW5nLmRpcmVjdGlvbiA9IFBDSV9ETUFfVE9ERVZJQ0U7Ci0JZWxzZQotCQlzdW5fcGNpX2RtYV9wZW5kaW5nLmRpcmVjdGlvbiA9IFBDSV9ETUFfRlJPTURFVklDRTsKLQotCWVidXNfZG1hX3ByZXBhcmUoJnN1bl9wY2lfZmRfZWJ1c19kbWEsIG1vZGUgIT0gRE1BX01PREVfV1JJVEUpOwotfQotCi1zdGF0aWMgdm9pZCBzdW5fcGNpX2ZkX3NldF9kbWFfY291bnQoaW50IGxlbmd0aCkKLXsKLQlzdW5fcGNpX2RtYV9wZW5kaW5nLmxlbiA9IGxlbmd0aDsKLX0KLQotc3RhdGljIHZvaWQgc3VuX3BjaV9mZF9zZXRfZG1hX2FkZHIoY2hhciAqYnVmZmVyKQotewotCXN1bl9wY2lfZG1hX3BlbmRpbmcuYnVmID0gYnVmZmVyOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHN1bl9wY2lfZ2V0X2RtYV9yZXNpZHVlKHZvaWQpCi17Ci0JcmV0dXJuIGVidXNfZG1hX3Jlc2lkdWUoJnN1bl9wY2lfZmRfZWJ1c19kbWEpOwotfQotCi1zdGF0aWMgaW50IHN1bl9wY2lfZmRfcmVxdWVzdF9pcnEodm9pZCkKLXsKLQlyZXR1cm4gZWJ1c19kbWFfaXJxX2VuYWJsZSgmc3VuX3BjaV9mZF9lYnVzX2RtYSwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN1bl9wY2lfZmRfZnJlZV9pcnEodm9pZCkKLXsKLQllYnVzX2RtYV9pcnFfZW5hYmxlKCZzdW5fcGNpX2ZkX2VidXNfZG1hLCAwKTsKLX0KLQotc3RhdGljIGludCBzdW5fcGNpX2ZkX2VqZWN0KGludCBkcml2ZSkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotdm9pZCBzdW5fcGNpX2ZkX2RtYV9jYWxsYmFjayhzdHJ1Y3QgZWJ1c19kbWFfaW5mbyAqcCwgaW50IGV2ZW50LCB2b2lkICpjb29raWUpCi17Ci0JZmxvcHB5X2ludGVycnVwdCgwLCBOVUxMKTsKLX0KLQotLyoKLSAqIEZsb3BweSBwcm9iaW5nLCB3ZSdkIGxpa2UgdG8gdXNlIC9kZXYvZmQwIGZvciBhIHNpbmdsZSBGbG9wcHkgb24gUENJLAotICogZXZlbiBpZiB0aGlzIGlzIGNvbmZpZ3VyZWQgdXNpbmcgRFMxLCB0aHVzIGxvb2tzIGxpa2UgL2Rldi9mZDEgd2l0aAotICogdGhlIGNhYmxpbmcgdXNlZCBpbiBVbHRyYXMuCi0gKi8KLSNkZWZpbmUgRE9SCShwb3J0ICsgMikKLSNkZWZpbmUgTVNSCShwb3J0ICsgNCkKLSNkZWZpbmUgRklGTwkocG9ydCArIDUpCi0KLXN0YXRpYyB2b2lkIHN1bl9wY2lfZmRfb3V0X2J5dGUodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHZhbCwKLQkJCSAgICAgICAgdW5zaWduZWQgbG9uZyByZWcpCi17Ci0JdW5zaWduZWQgY2hhciBzdGF0dXM7Ci0JaW50IHRpbWVvdXQgPSAxMDAwOwotCi0Jd2hpbGUgKCEoKHN0YXR1cyA9IGluYihNU1IpKSAmIDB4ODApICYmIC0tdGltZW91dCkKLQkJdWRlbGF5KDEwMCk7Ci0Jb3V0Yih2YWwsIHJlZyk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN1bl9wY2lfZmRfc2Vuc2VpKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQl1bnNpZ25lZCBjaGFyIHJlc3VsdFsyXSA9IHsgMHg3MCwgMHgwMCB9OwotCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwotCWludCBpID0gMDsKLQotCXN1bl9wY2lfZmRfb3V0X2J5dGUocG9ydCwgMHgwOCwgRklGTyk7Ci0JZG8gewotCQlpbnQgdGltZW91dCA9IDEwMDA7Ci0KLQkJd2hpbGUgKCEoKHN0YXR1cyA9IGluYihNU1IpKSAmIDB4ODApICYmIC0tdGltZW91dCkKLQkJCXVkZWxheSgxMDApOwotCi0JCWlmICghdGltZW91dCkKLQkJCWJyZWFrOwotCi0JCWlmICgoc3RhdHVzICYgMHhmMCkgPT0gMHhkMCkKLQkJCXJlc3VsdFtpKytdID0gaW5iKEZJRk8pOwotCQllbHNlCi0JCQlicmVhazsKLQl9IHdoaWxlIChpIDwgMik7Ci0KLQlyZXR1cm4gcmVzdWx0WzBdOwotfQotCi1zdGF0aWMgdm9pZCBzdW5fcGNpX2ZkX3Jlc2V0KHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQl1bnNpZ25lZCBjaGFyIG1hc2sgPSAweDAwOwotCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwotCWludCB0aW1lb3V0ID0gMTAwMDA7Ci0KLQlvdXRiKDB4ODAsIE1TUik7Ci0JZG8gewotCQlzdGF0dXMgPSBzdW5fcGNpX2ZkX3NlbnNlaShwb3J0KTsKLQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweGMwKQotCQkJbWFzayB8PSAxIDw8IChzdGF0dXMgJiAweDAzKTsKLQkJZWxzZQotCQkJdWRlbGF5KDEwMCk7Ci0JfSB3aGlsZSAoKG1hc2sgIT0gMHgwZikgJiYgLS10aW1lb3V0KTsKLX0KLQotc3RhdGljIGludCBzdW5fcGNpX2ZkX3Rlc3RfZHJpdmUodW5zaWduZWQgbG9uZyBwb3J0LCBpbnQgZHJpdmUpCi17Ci0JdW5zaWduZWQgY2hhciBzdGF0dXMsIGRhdGE7Ci0JaW50IHRpbWVvdXQgPSAxMDAwOwotCWludCByZWFkeTsKLQotCXN1bl9wY2lfZmRfcmVzZXQocG9ydCk7Ci0KLQlkYXRhID0gKDB4MTAgPDwgZHJpdmUpIHwgMHgwYyB8IGRyaXZlOwotCXN1bl9wY2lfZmRfb3V0X2J5dGUocG9ydCwgZGF0YSwgRE9SKTsKLQotCXN1bl9wY2lfZmRfb3V0X2J5dGUocG9ydCwgMHgwNywgRklGTyk7Ci0Jc3VuX3BjaV9mZF9vdXRfYnl0ZShwb3J0LCBkcml2ZSAmIDB4MDMsIEZJRk8pOwotCi0JZG8gewotCQl1ZGVsYXkoMTAwKTsKLQkJc3RhdHVzID0gc3VuX3BjaV9mZF9zZW5zZWkocG9ydCk7Ci0JfSB3aGlsZSAoKChzdGF0dXMgJiAweGMwKSA9PSAweDgwKSAmJiAtLXRpbWVvdXQpOwotCi0JaWYgKCF0aW1lb3V0KQotCQlyZWFkeSA9IDA7Ci0JZWxzZQotCQlyZWFkeSA9IChzdGF0dXMgJiAweDEwKSA/IDAgOiAxOwotCi0Jc3VuX3BjaV9mZF9yZXNldChwb3J0KTsKLQlyZXR1cm4gcmVhZHk7Ci19Ci0jdW5kZWYgRklGTwotI3VuZGVmIE1TUgotI3VuZGVmIERPUgotCi0jZW5kaWYgLyogQ09ORklHX1BDSSAqLwotCi0jaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIGludCBfX2luaXQgZWJ1c19mZHRocmVlX3Aoc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlICplZGV2KQotewotCWlmICghc3RyY21wKGVkZXYtPnByb21fbm9kZS0+bmFtZSwgImZkdGhyZWUiKSkKLQkJcmV0dXJuIDE7Ci0JaWYgKCFzdHJjbXAoZWRldi0+cHJvbV9ub2RlLT5uYW1lLCAiZmxvcHB5IikpIHsKLQkJY29uc3QgY2hhciAqY29tcGF0OwotCi0JCWNvbXBhdCA9IG9mX2dldF9wcm9wZXJ0eShlZGV2LT5wcm9tX25vZGUsCi0JCQkJCSAiY29tcGF0aWJsZSIsIE5VTEwpOwotCQlpZiAoY29tcGF0ICYmICFzdHJjbXAoY29tcGF0LCAiZmR0aHJlZSIpKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBzdW5fZmxvcHB5X2luaXQodm9pZCkKLXsKLQljaGFyIHN0YXRlWzEyOF07Ci0Jc3RydWN0IHNidXNfYnVzICpidXM7Ci0Jc3RydWN0IHNidXNfZGV2ICpzZGV2ID0gTlVMTDsKLQlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKLQotCWlmIChpbml0aWFsaXplZCkKLQkJcmV0dXJuIHN1bl9mbG9wcHlfdHlwZXNbMF07Ci0JaW5pdGlhbGl6ZWQgPSAxOwotCi0JZm9yX2FsbF9zYnVzZGV2IChzZGV2LCBidXMpIHsKLQkJaWYgKCFzdHJjbXAoc2Rldi0+cHJvbV9uYW1lLCAiU1VOVyxmZHR3byIpKSAKLQkJCWJyZWFrOwotCX0KLQlpZihzZGV2KSB7Ci0JCWZsb3BweV9zZGV2ID0gc2RldjsKLQkJRkxPUFBZX0lSUSA9IHNkZXYtPmlycXNbMF07Ci0JfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfUENJCi0JCXN0cnVjdCBsaW51eF9lYnVzICplYnVzOwotCQlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmVkZXYgPSBOVUxMOwotCQl1bnNpZ25lZCBsb25nIGNvbmZpZyA9IDA7Ci0JCXZvaWQgX19pb21lbSAqYXV4aW9fcmVnOwotCQljb25zdCBjaGFyICpzdGF0ZV9wcm9wOwotCi0JCWZvcl9lYWNoX2VidXMoZWJ1cykgewotCQkJZm9yX2VhY2hfZWJ1c2RldihlZGV2LCBlYnVzKSB7Ci0JCQkJaWYgKGVidXNfZmR0aHJlZV9wKGVkZXYpKQotCQkJCQlnb3RvIGVidXNfZG9uZTsKLQkJCX0KLQkJfQotCWVidXNfZG9uZToKLQkJaWYgKCFlZGV2KQotCQkJcmV0dXJuIDA7Ci0KLQkJc3RhdGVfcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShlZGV2LT5wcm9tX25vZGUsICJzdGF0dXMiLCBOVUxMKTsKLQkJaWYgKHN0YXRlX3Byb3AgJiYgIXN0cm5jbXAoc3RhdGVfcHJvcCwgImRpc2FibGVkIiwgOCkpCi0JCQlyZXR1cm4gMDsKLQkJCQotCQlGTE9QUFlfSVJRID0gZWRldi0+aXJxc1swXTsKLQotCQkvKiBNYWtlIHN1cmUgdGhlIGhpZ2ggZGVuc2l0eSBiaXQgaXMgc2V0LCBzb21lIHN5c3RlbXMKLQkJICogKG1vc3Qgbm90YWJseSBVbHRyYTUvVWx0cmExMCkgY29tZSB1cCB3aXRoIGl0IGNsZWFyLgotCQkgKi8KLQkJYXV4aW9fcmVnID0gKHZvaWQgX19pb21lbSAqKSBlZGV2LT5yZXNvdXJjZVsyXS5zdGFydDsKLQkJd3JpdGVsKHJlYWRsKGF1eGlvX3JlZyl8MHgyLCBhdXhpb19yZWcpOwotCi0JCXN1bl9wY2lfZWJ1c19kZXYgPSBlYnVzLT5zZWxmOwotCi0JCXNwaW5fbG9ja19pbml0KCZzdW5fcGNpX2ZkX2VidXNfZG1hLmxvY2spOwotCi0JCS8qIFhYWCBpb3JlbWFwICovCi0JCXN1bl9wY2lfZmRfZWJ1c19kbWEucmVncyA9ICh2b2lkIF9faW9tZW0gKikKLQkJCWVkZXYtPnJlc291cmNlWzFdLnN0YXJ0OwotCQlpZiAoIXN1bl9wY2lfZmRfZWJ1c19kbWEucmVncykKLQkJCXJldHVybiAwOwotCi0JCXN1bl9wY2lfZmRfZWJ1c19kbWEuZmxhZ3MgPSAoRUJVU19ETUFfRkxBR19VU0VfRUJETUFfSEFORExFUiB8Ci0JCQkJCSAgICAgRUJVU19ETUFfRkxBR19UQ0lfRElTQUJMRSk7Ci0JCXN1bl9wY2lfZmRfZWJ1c19kbWEuY2FsbGJhY2sgPSBzdW5fcGNpX2ZkX2RtYV9jYWxsYmFjazsKLQkJc3VuX3BjaV9mZF9lYnVzX2RtYS5jbGllbnRfY29va2llID0gTlVMTDsKLQkJc3VuX3BjaV9mZF9lYnVzX2RtYS5pcnEgPSBGTE9QUFlfSVJROwotCQlzdHJjcHkoc3VuX3BjaV9mZF9lYnVzX2RtYS5uYW1lLCAiZmxvcHB5Iik7Ci0JCWlmIChlYnVzX2RtYV9yZWdpc3Rlcigmc3VuX3BjaV9mZF9lYnVzX2RtYSkpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBYWFggaW9yZW1hcCAqLwotCQlzdW5fZmRjID0gKHN0cnVjdCBzdW5fZmxweV9jb250cm9sbGVyICopZWRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7Ci0KLQkJc3VuX2Zkb3BzLmZkX2luYiA9IHN1bl9wY2lfZmRfaW5iOwotCQlzdW5fZmRvcHMuZmRfb3V0YiA9IHN1bl9wY2lfZmRfb3V0YjsKLQotCQljYW5fdXNlX3ZpcnR1YWxfZG1hID0gdXNlX3ZpcnR1YWxfZG1hID0gMDsKLQkJc3VuX2Zkb3BzLmZkX2VuYWJsZV9kbWEgPSBzdW5fcGNpX2ZkX2VuYWJsZV9kbWE7Ci0JCXN1bl9mZG9wcy5mZF9kaXNhYmxlX2RtYSA9IHN1bl9wY2lfZmRfZGlzYWJsZV9kbWE7Ci0JCXN1bl9mZG9wcy5mZF9zZXRfZG1hX21vZGUgPSBzdW5fcGNpX2ZkX3NldF9kbWFfbW9kZTsKLQkJc3VuX2Zkb3BzLmZkX3NldF9kbWFfYWRkciA9IHN1bl9wY2lfZmRfc2V0X2RtYV9hZGRyOwotCQlzdW5fZmRvcHMuZmRfc2V0X2RtYV9jb3VudCA9IHN1bl9wY2lfZmRfc2V0X2RtYV9jb3VudDsKLQkJc3VuX2Zkb3BzLmdldF9kbWFfcmVzaWR1ZSA9IHN1bl9wY2lfZ2V0X2RtYV9yZXNpZHVlOwotCi0JCXN1bl9mZG9wcy5mZF9yZXF1ZXN0X2lycSA9IHN1bl9wY2lfZmRfcmVxdWVzdF9pcnE7Ci0JCXN1bl9mZG9wcy5mZF9mcmVlX2lycSA9IHN1bl9wY2lfZmRfZnJlZV9pcnE7Ci0KLQkJc3VuX2Zkb3BzLmZkX2VqZWN0ID0gc3VuX3BjaV9mZF9lamVjdDsKLQotICAgICAgICAJZmRjX3N0YXR1cyA9ICh1bnNpZ25lZCBsb25nKSAmc3VuX2ZkYy0+c3RhdHVzXzgyMDc3OwotCi0JCS8qCi0JCSAqIFhYWDogRmluZCBvdXQgb24gd2hpY2ggbWFjaGluZXMgdGhpcyBpcyByZWFsbHkgbmVlZGVkLgotCQkgKi8KLQkJaWYgKDEpIHsKLQkJCXN1bl9wY2lfYnJva2VuX2RyaXZlID0gMTsKLQkJCXN1bl9mZG9wcy5mZF9vdXRiID0gc3VuX3BjaV9mZF9icm9rZW5fb3V0YjsKLQkJfQotCi0JCWFsbG93ZWRfZHJpdmVfbWFzayA9IDA7Ci0JCWlmIChzdW5fcGNpX2ZkX3Rlc3RfZHJpdmUoKHVuc2lnbmVkIGxvbmcpc3VuX2ZkYywgMCkpCi0JCQlzdW5fZmxvcHB5X3R5cGVzWzBdID0gNDsKLQkJaWYgKHN1bl9wY2lfZmRfdGVzdF9kcml2ZSgodW5zaWduZWQgbG9uZylzdW5fZmRjLCAxKSkKLQkJCXN1bl9mbG9wcHlfdHlwZXNbMV0gPSA0OwotCi0JCS8qCi0JCSAqIEZpbmQgTlM4NzMwMyBTdXBlcklPIGNvbmZpZyByZWdpc3RlcnMgKHRocm91Z2ggZWNwcCkuCi0JCSAqLwotCQlmb3JfZWFjaF9lYnVzKGVidXMpIHsKLQkJCWZvcl9lYWNoX2VidXNkZXYoZWRldiwgZWJ1cykgewotCQkJCWlmICghc3RyY21wKGVkZXYtPnByb21fbm9kZS0+bmFtZSwgImVjcHAiKSkgewotCQkJCQljb25maWcgPSBlZGV2LT5yZXNvdXJjZVsxXS5zdGFydDsKLQkJCQkJZ290byBjb25maWdfZG9uZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQljb25maWdfZG9uZToKLQotCQkvKgotCQkgKiBTYW5pdHkgY2hlY2ssIGlzIHRoaXMgcmVhbGx5IHRoZSBOUzg3MzAzPwotCQkgKi8KLQkJc3dpdGNoIChjb25maWcgJiAweDNmZikgewotCQljYXNlIDB4MDJlOgotCQljYXNlIDB4MTVjOgotCQljYXNlIDB4MjZlOgotCQljYXNlIDB4Mzk4OgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQljb25maWcgPSAwOwotCQl9Ci0KLQkJaWYgKCFjb25maWcpCi0JCQlyZXR1cm4gc3VuX2Zsb3BweV90eXBlc1swXTsKLQotCQkvKiBFbmFibGUgUEMtQVQgbW9kZS4gKi8KLQkJbnM4NzMwM19tb2RpZnkoY29uZmlnLCBBU0MsIDAsIDB4YzApOwotCi0jaWZkZWYgUENJX0ZEQ19TV0FQX0RSSVZFUwotCQkvKgotCQkgKiBJZiBvbmx5IEZsb3BweSAxIGlzIHByZXNlbnQsIHN3YXAgZHJpdmVzLgotCQkgKi8KLQkJaWYgKCFzdW5fZmxvcHB5X3R5cGVzWzBdICYmIHN1bl9mbG9wcHlfdHlwZXNbMV0pIHsKLQkJCS8qCi0JCQkgKiBTZXQgdGhlIGRyaXZlIGV4Y2hhbmdlIGJpdCBpbiBGQ1Igb24gTlM4NzMwMywKLQkJCSAqIG1ha2Ugc3VyZSBvdGhlciBiaXRzIGFyZSBzYW5lIGJlZm9yZSBkb2luZyBzby4KLQkJCSAqLwotCQkJbnM4NzMwM19tb2RpZnkoY29uZmlnLCBGRVIsIEZFUl9FRE0sIDApOwotCQkJbnM4NzMwM19tb2RpZnkoY29uZmlnLCBBU0MsIEFTQ19EUlYyX1NFTCwgMCk7Ci0JCQluczg3MzAzX21vZGlmeShjb25maWcsIEZDUiwgMCwgRkNSX0xERSk7Ci0KLQkJCWNvbmZpZyA9IHN1bl9mbG9wcHlfdHlwZXNbMF07Ci0JCQlzdW5fZmxvcHB5X3R5cGVzWzBdID0gc3VuX2Zsb3BweV90eXBlc1sxXTsKLQkJCXN1bl9mbG9wcHlfdHlwZXNbMV0gPSBjb25maWc7Ci0KLQkJCWlmIChzdW5fcGNpX2Jyb2tlbl9kcml2ZSAhPSAtMSkgewotCQkJCXN1bl9wY2lfYnJva2VuX2RyaXZlID0gMSAtIHN1bl9wY2lfYnJva2VuX2RyaXZlOwotCQkJCXN1bl9mZG9wcy5mZF9vdXRiID0gc3VuX3BjaV9mZF9sZGVfYnJva2VuX291dGI7Ci0JCQl9Ci0JCX0KLSNlbmRpZiAvKiBQQ0lfRkRDX1NXQVBfRFJJVkVTICovCi0KLQkJcmV0dXJuIHN1bl9mbG9wcHlfdHlwZXNbMF07Ci0jZWxzZQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCX0KLQlwcm9tX2dldHByb3BlcnR5KHNkZXYtPnByb21fbm9kZSwgInN0YXR1cyIsIHN0YXRlLCBzaXplb2Yoc3RhdGUpKTsKLQlpZighc3RybmNtcChzdGF0ZSwgImRpc2FibGVkIiwgOCkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBXZSBjYW5ub3QgZG8gc2J1c19pb3JlbWFwIGhlcmU6IGl0IGRvZXMgcmVxdWVzdF9yZWdpb24sCi0JICogd2hpY2ggdGhlIGdlbmVyaWMgZmxvcHB5IGRyaXZlciB0cmllcyB0byBkbyBvbmNlIGFnYWluLgotCSAqIEJ1dCB3ZSBtdXN0IHVzZSB0aGUgc2RldiByZXNvdXJjZSB2YWx1ZXMgYXMgdGhleSBoYXZlCi0JICogaGFkIHBhcmVudCByYW5nZXMgYXBwbGllZC4KLQkgKi8KLQlzdW5fZmRjID0gKHN0cnVjdCBzdW5fZmxweV9jb250cm9sbGVyICopCi0JCShzZGV2LT5yZXNvdXJjZVswXS5zdGFydCArCi0JCSAoKHNkZXYtPnJlc291cmNlWzBdLmZsYWdzICYgMHgxZmZVTCkgPDwgMzJVTCkpOwotCi0JLyogTGFzdCBtaW51dGUgc2FuaXR5IGNoZWNrLi4uICovCi0JaWYoc2J1c19yZWFkYigmc3VuX2ZkYy0+c3RhdHVzMV84MjA3NykgPT0gMHhmZikgewotCQlzdW5fZmRjID0gKHN0cnVjdCBzdW5fZmxweV9jb250cm9sbGVyICopLTE7Ci0JCXJldHVybiAwOwotCX0KLQotICAgICAgICBzdW5fZmRvcHMuZmRfaW5iID0gc3VuXzgyMDc3X2ZkX2luYjsKLSAgICAgICAgc3VuX2Zkb3BzLmZkX291dGIgPSBzdW5fODIwNzdfZmRfb3V0YjsKLQotCWNhbl91c2VfdmlydHVhbF9kbWEgPSB1c2VfdmlydHVhbF9kbWEgPSAxOwotCXN1bl9mZG9wcy5mZF9lbmFibGVfZG1hID0gc3VuX2ZkX2VuYWJsZV9kbWE7Ci0Jc3VuX2Zkb3BzLmZkX2Rpc2FibGVfZG1hID0gc3VuX2ZkX2Rpc2FibGVfZG1hOwotCXN1bl9mZG9wcy5mZF9zZXRfZG1hX21vZGUgPSBzdW5fZmRfc2V0X2RtYV9tb2RlOwotCXN1bl9mZG9wcy5mZF9zZXRfZG1hX2FkZHIgPSBzdW5fZmRfc2V0X2RtYV9hZGRyOwotCXN1bl9mZG9wcy5mZF9zZXRfZG1hX2NvdW50ID0gc3VuX2ZkX3NldF9kbWFfY291bnQ7Ci0Jc3VuX2Zkb3BzLmdldF9kbWFfcmVzaWR1ZSA9IHN1bl9nZXRfZG1hX3Jlc2lkdWU7Ci0KLQlzdW5fZmRvcHMuZmRfcmVxdWVzdF9pcnEgPSBzdW5fZmRfcmVxdWVzdF9pcnE7Ci0Jc3VuX2Zkb3BzLmZkX2ZyZWVfaXJxID0gc3VuX2ZkX2ZyZWVfaXJxOwotCi0Jc3VuX2Zkb3BzLmZkX2VqZWN0ID0gc3VuX2ZkX2VqZWN0OwotCi0gICAgICAgIGZkY19zdGF0dXMgPSAodW5zaWduZWQgbG9uZykgJnN1bl9mZGMtPnN0YXR1c184MjA3NzsKLQotCS8qIFN1Y2Nlc3MuLi4gKi8KLQlhbGxvd2VkX2RyaXZlX21hc2sgPSAweDAxOwotCXN1bl9mbG9wcHlfdHlwZXNbMF0gPSA0OwotCXN1bl9mbG9wcHlfdHlwZXNbMV0gPSAwOwotCi0JcmV0dXJuIHN1bl9mbG9wcHlfdHlwZXNbMF07Ci19Ci0KLSNkZWZpbmUgRVhUUkFfRkxPUFBZX1BBUkFNUwotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRtYV9zcGluX2xvY2spOwotCi0jZGVmaW5lIGNsYWltX2RtYV9sb2NrKCkgXAotKHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAotCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7IFwKLQlmbGFnczsgXAotfSkKLQotI2RlZmluZSByZWxlYXNlX2RtYV9sb2NrKF9fZmxhZ3MpIFwKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfc3Bpbl9sb2NrLCBfX2ZsYWdzKTsKLQotI2VuZGlmIC8qICEoX19BU01fU1BBUkM2NF9GTE9QUFlfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvZmxvcHB5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZwdW1hY3JvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2ZwdW1hY3JvLmgKaW5kZXggY2M0NjNmZS4uMzBkNmQwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9mcHVtYWNyby5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZnB1bWFjcm8uaApAQCAtMSwzMyArMSBAQAotLyogZnB1bWFjcm8uaDogRlBVIHJlbGF0ZWQgbWFjcm9zLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQotICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaWZuZGVmIF9TUEFSQzY0X0ZQVU1BQ1JPX0gKLSNkZWZpbmUgX1NQQVJDNjRfRlBVTUFDUk9fSAotCi0jaW5jbHVkZSA8YXNtL2FzaS5oPgotI2luY2x1ZGUgPGFzbS92aXNhc20uaD4KLQotc3RydWN0IGZwdXN0YXRlIHsKLQl1MzIJcmVnc1s2NF07Ci19OwotCi0jZGVmaW5lIEZQVVNUQVRFIChzdHJ1Y3QgZnB1c3RhdGUgKikoY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHJlZ3MpCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmcHJzX3JlYWQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJldHZhbDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZCAlJWZwcnMsICUwIiA6ICI9ciIgKHJldHZhbCkpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZwcnNfd3JpdGUodW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIndyICUwLCAweDAsICUlZnBycyIgOiA6ICJyIiAodmFsKSk7Ci19Ci0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X0ZQVU1BQ1JPX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2ZwdW1hY3JvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Z1dGV4LmgKaW5kZXggZDgzNzg5My4uMWNlYjBiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZnV0ZXguaApAQCAtMSwxMTAgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfRlVURVhfSAotI2RlZmluZSBfU1BBUkM2NF9GVVRFWF9ICi0KLSNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KLSNkZWZpbmUgX19mdXRleF9jYXNfb3AoaW5zbiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZykJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCi0JIlxuMToJbGR1d2EJWyUzXSAlJWFzaSwgJTJcbiIJCVwKLQkiCSIgaW5zbiAiXG4iCQkJCVwKLQkiMjoJY2FzYQlbJTNdICUlYXNpLCAlMiwgJTFcbiIJCVwKLQkiCWNtcAklMiwgJTFcbiIJCQlcCi0JIglibmUscG4JJSVpY2MsIDFiXG4iCQkJXAotCSIJIG1vdgkwLCAlMFxuIgkJCVwKLQkiMzpcbiIJCQkJCQlcCi0JIgkuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHJcbiIJXAotCSIJLmFsaWduCTRcbiIJCQkJXAotCSI0OglzZXRoaQklJWhpKDNiKSwgJTBcbiIJCQlcCi0JIglqbXBsCSUwICsgJSVsbygzYiksICUlZzBcbiIJCVwKLQkiCSBtb3YJJTUsICUwXG4iCQkJXAotCSIJLnByZXZpb3VzXG4iCQkJCVwKLQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCVwKLQkiCS5hbGlnbgk0XG4iCQkJCVwKLQkiCS53b3JkCTFiLCA0YlxuIgkJCVwKLQkiCS53b3JkCTJiLCA0YlxuIgkJCVwKLQkiCS5wcmV2aW91c1xuIgkJCQlcCi0JOiAiPSZyIiAocmV0KSwgIj0mciIgKG9sZHZhbCksICI9JnIiICh0ZW0pCVwKLQk6ICJyIiAodWFkZHIpLCAiciIgKG9wYXJnKSwgImkiICgtRUZBVUxUKQlcCi0JOiAibWVtb3J5IikKLQotc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfYXRvbWljX29wX2ludXNlcihpbnQgZW5jb2RlZF9vcCwgaW50IF9fdXNlciAqdWFkZHIpCi17Ci0JaW50IG9wID0gKGVuY29kZWRfb3AgPj4gMjgpICYgNzsKLQlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7Ci0JaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7Ci0JaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07Ci0KLQlpZiAodW5saWtlbHkoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAodW5saWtlbHkoKCgodW5zaWduZWQgbG9uZykgdWFkZHIpICYgMHgzVUwpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCi0JCW9wYXJnID0gMSA8PCBvcGFyZzsKLQotCXBhZ2VmYXVsdF9kaXNhYmxlKCk7Ci0KLQlzd2l0Y2ggKG9wKSB7Ci0JY2FzZSBGVVRFWF9PUF9TRVQ6Ci0JCV9fZnV0ZXhfY2FzX29wKCJtb3ZcdCU0LCAlMSIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOwotCQlicmVhazsKLQljYXNlIEZVVEVYX09QX0FERDoKLQkJX19mdXRleF9jYXNfb3AoImFkZFx0JTIsICU0LCAlMSIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOwotCQlicmVhazsKLQljYXNlIEZVVEVYX09QX09SOgotCQlfX2Z1dGV4X2Nhc19vcCgib3JcdCUyLCAlNCwgJTEiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBGVVRFWF9PUF9BTkROOgotCQlfX2Z1dGV4X2Nhc19vcCgiYW5kXHQlMiwgJTQsICUxIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgRlVURVhfT1BfWE9SOgotCQlfX2Z1dGV4X2Nhc19vcCgieG9yXHQlMiwgJTQsICUxIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9TWVM7Ci0JfQotCi0JcGFnZWZhdWx0X2VuYWJsZSgpOwotCi0JaWYgKCFyZXQpIHsKLQkJc3dpdGNoIChjbXApIHsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfRVE6IHJldCA9IChvbGR2YWwgPT0gY21wYXJnKTsgYnJlYWs7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX05FOiByZXQgPSAob2xkdmFsICE9IGNtcGFyZyk7IGJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9MVDogcmV0ID0gKG9sZHZhbCA8IGNtcGFyZyk7IGJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9HRTogcmV0ID0gKG9sZHZhbCA+PSBjbXBhcmcpOyBicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfTEU6IHJldCA9IChvbGR2YWwgPD0gY21wYXJnKTsgYnJlYWs7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX0dUOiByZXQgPSAob2xkdmFsID4gY21wYXJnKTsgYnJlYWs7Ci0JCWRlZmF1bHQ6IHJldCA9IC1FTk9TWVM7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLCBpbnQgbmV3dmFsKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJcbjE6CWNhc2EJWyUzXSAlJWFzaSwgJTIsICUwXG4iCi0JIjI6XG4iCi0JIgkuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHJcbiIKLQkiCS5hbGlnbgk0XG4iCi0JIjM6CXNldGhpCSUlaGkoMmIpLCAlMFxuIgotCSIJam1wbAklMCArICUlbG8oMmIpLCAlJWcwXG4iCi0JIgkgbW92CSU0LCAlMFxuIgotCSIJLnByZXZpb3VzXG4iCi0JIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0JIgkuYWxpZ24JNFxuIgotCSIJLndvcmQJMWIsIDNiXG4iCi0JIgkucHJldmlvdXNcbiIKLQk6ICI9ciIgKG5ld3ZhbCkKLQk6ICIwIiAobmV3dmFsKSwgInIiIChvbGR2YWwpLCAiciIgKHVhZGRyKSwgImkiICgtRUZBVUxUKQotCTogIm1lbW9yeSIpOwotCi0JcmV0dXJuIG5ld3ZhbDsKLX0KLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfRlVURVhfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvZnV0ZXguaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9oYXJkaXJxLmgKaW5kZXggN2MyOWZkMS4uNjNkY2EzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9oYXJkaXJxLmgKQEAgLTEsMTkgKzEgQEAKLS8qIGhhcmRpcnEuaDogNjQtYml0IFNwYXJjIGhhcmQgSVJRIHN1cHBvcnQuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAyMDA1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKLSAqLwotCi0jaWZuZGVmIF9fU1BBUkM2NF9IQVJESVJRX0gKLSNkZWZpbmUgX19TUEFSQzY0X0hBUkRJUlFfSAotCi0jaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KLQotI2RlZmluZSBfX0FSQ0hfSVJRX1NUQVQKLSNkZWZpbmUgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkgXAotCShsb2NhbF9jcHVfZGF0YSgpLl9fc29mdGlycV9wZW5kaW5nKQotCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotCi0jZGVmaW5lIEhBUkRJUlFfQklUUwk4Ci0KLSNlbmRpZiAvKiAhKF9fU1BBUkM2NF9IQVJESVJRX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2hhcmRpcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaGVhZC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9oZWFkLmgKaW5kZXggMTBlOWRhYi4uMjI1NGMwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9oZWFkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9oZWFkLmgKQEAgLTEsNzYgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfSEVBRF9ICi0jZGVmaW5lIF9TUEFSQzY0X0hFQURfSAotCi0jaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgotCi0JLyogd3JwcgklZzAsIHZhbCwgJWdsICovCi0jZGVmaW5lIFNFVF9HTCh2YWwpCVwKLQkud29yZAkweGExOTAyMDAwIHwgdmFsCi0KLQkvKiByZHByICVnbCwgJWdOICovCi0jZGVmaW5lIEdFVF9HTF9HTE9CQUwoTikJXAotCS53b3JkCTB4ODE1NDAwMDAgfCAoTiA8PCAyNSkKLQotI2RlZmluZSBLRVJOQkFTRQkweDQwMDAwMAotCi0jZGVmaW5lCVBUUkVHU19PRkYJKFNUQUNLX0JJQVMgKyBTVEFDS0ZSQU1FX1NaKQotCi0jZGVmaW5lIF9fQ0hFRVRBSF9JRAkweDAwM2UwMDE0Ci0jZGVmaW5lIF9fSkFMQVBFTk9fSUQJMHgwMDNlMDAxNgotI2RlZmluZSBfX1NFUlJBTk9fSUQJMHgwMDNlMDAyMgotCi0jZGVmaW5lIENIRUVUQUhfTUFOVUYJCTB4MDAzZQotI2RlZmluZSBDSEVFVEFIX0lNUEwJCTB4MDAxNCAvKiBVbHRyYS1JSUkgICAqLwotI2RlZmluZSBDSEVFVEFIX1BMVVNfSU1QTAkweDAwMTUgLyogVWx0cmEtSUlJKyAgKi8KLSNkZWZpbmUgSkFMQVBFTk9fSU1QTAkJMHgwMDE2IC8qIFVsdHJhLUlJSWkgICovCi0jZGVmaW5lIEpBR1VBUl9JTVBMCQkweDAwMTggLyogVWx0cmEtSVYgICAgKi8KLSNkZWZpbmUgUEFOVEhFUl9JTVBMCQkweDAwMTkgLyogVWx0cmEtSVYrICAgKi8KLSNkZWZpbmUgU0VSUkFOT19JTVBMCQkweDAwMjIgLyogVWx0cmEtSUlJaSsgKi8KLQotI2RlZmluZSBCUkFOQ0hfSUZfU1VONFYodG1wMSxsYWJlbCkJCVwKLQlzZXRoaQklaGkoaXNfc3VuNHYpLCAldG1wMTsJCVwKLQlsZHV3CVsldG1wMSArICVsbyhpc19zdW40dildLCAldG1wMTsgXAotCWJybnoscG4JJXRtcDEsIGxhYmVsOwkJCVwKLQkgbm9wCi0KLSNkZWZpbmUgQlJBTkNIX0lGX0NIRUVUQUhfQkFTRSh0bXAxLHRtcDIsbGFiZWwpCVwKLQlyZHByCSV2ZXIsICV0bXAxOwkJCVwKLQlzZXRoaQklaGkoX19DSEVFVEFIX0lEKSwgJXRtcDI7CVwKLQlzcmx4CSV0bXAxLCAzMiwgJXRtcDE7CQlcCi0Jb3IJJXRtcDIsICVsbyhfX0NIRUVUQUhfSUQpLCAldG1wMjtcCi0JY21wCSV0bXAxLCAldG1wMjsJCQlcCi0JYmUscG4JJWljYywgbGFiZWw7CQkJXAotCSBub3A7Ci0KLSNkZWZpbmUgQlJBTkNIX0lGX0pBTEFQRU5PKHRtcDEsdG1wMixsYWJlbCkJXAotCXJkcHIJJXZlciwgJXRtcDE7CQkJXAotCXNldGhpCSVoaShfX0pBTEFQRU5PX0lEKSwgJXRtcDI7CVwKLQlzcmx4CSV0bXAxLCAzMiwgJXRtcDE7CQlcCi0Jb3IJJXRtcDIsICVsbyhfX0pBTEFQRU5PX0lEKSwgJXRtcDI7XAotCWNtcAkldG1wMSwgJXRtcDI7CQkJXAotCWJlLHBuCSVpY2MsIGxhYmVsOwkJCVwKLQkgbm9wOwotCi0jZGVmaW5lIEJSQU5DSF9JRl9DSEVFVEFIX1BMVVNfT1JfRk9MTE9XT04odG1wMSx0bXAyLGxhYmVsKQlcCi0JcmRwcgkldmVyLCAldG1wMTsJCQlcCi0Jc3JseAkldG1wMSwgKDMyICsgMTYpLCAldG1wMjsJXAotCWNtcAkldG1wMiwgQ0hFRVRBSF9NQU5VRjsJCVwKLQlibmUscHQJJXhjYywgOTlmOwkJCVwKLQkgc2xseAkldG1wMSwgMTYsICV0bXAxOwkJXAotCXNybHgJJXRtcDEsICgzMiArIDE2KSwgJXRtcDI7CVwKLQljbXAJJXRtcDIsIENIRUVUQUhfUExVU19JTVBMOwlcCi0JYmdldSxwdAkleGNjLCBsYWJlbDsJCQlcCi05OToJIG5vcDsKLQotI2RlZmluZSBCUkFOQ0hfSUZfQU5ZX0NIRUVUQUgodG1wMSx0bXAyLGxhYmVsKQlcCi0JcmRwcgkldmVyLCAldG1wMTsJCQlcCi0Jc3JseAkldG1wMSwgKDMyICsgMTYpLCAldG1wMjsJXAotCWNtcAkldG1wMiwgQ0hFRVRBSF9NQU5VRjsJCVwKLQlibmUscHQJJXhjYywgOTlmOwkJCVwKLQkgc2xseAkldG1wMSwgMTYsICV0bXAxOwkJXAotCXNybHgJJXRtcDEsICgzMiArIDE2KSwgJXRtcDI7CVwKLQljbXAJJXRtcDIsIENIRUVUQUhfSU1QTDsJCVwKLQliZ2V1LHB0CSV4Y2MsIGxhYmVsOwkJCVwKLTk5Ogkgbm9wOwotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9IRUFEX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2hlYWQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHVnZXRsYi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9odWdldGxiLmgKaW5kZXggNDEyYWY1OC4uMjFkOGYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9odWdldGxiLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9odWdldGxiLmgKQEAgLTEsODQgKzEgQEAKLSNpZm5kZWYgX0FTTV9TUEFSQzY0X0hVR0VUTEJfSAotI2RlZmluZSBfQVNNX1NQQVJDNjRfSFVHRVRMQl9ICi0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0KLXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7Ci0KLXB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBwdGVfdCAqcHRlcCk7Ci0KLXZvaWQgaHVnZXRsYl9wcmVmYXVsdF9hcmNoX2hvb2soc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCi1zdGF0aWMgaW5saW5lIGludCBpc19odWdlcGFnZV9vbmx5X3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgdW5zaWduZWQgbG9uZyBsZW4pIHsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIElmIHRoZSBhcmNoIGRvZXNuJ3Qgc3VwcGx5IHNvbWV0aGluZyBlbHNlLCBhc3N1bWUgdGhhdCBodWdlcGFnZQotICogc2l6ZSBhbGlnbmVkIHJlZ2lvbnMgYXJlIG9rIHdpdGhvdXQgZnVydGhlciBwcmVwYXJhdGlvbi4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgcHJlcGFyZV9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCWlmIChsZW4gJiB+SFBBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGFkZHIgJiB+SFBBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2ZyZWVfcGdkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICoqdGxiLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBmbG9vciwKLQkJCQkJICB1bnNpZ25lZCBsb25nIGNlaWxpbmcpCi17Ci0JZnJlZV9wZ2RfcmFuZ2UodGxiLCBhZGRyLCBlbmQsIGZsb29yLCBjZWlsaW5nKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlX25vbmUocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfbm9uZShwdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV93cnByb3RlY3QocHRlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQotewotCXB0ZXBfc2V0X3dycHJvdGVjdChtbSwgYWRkciwgcHRlcCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCi0JCQkJCSAgICAgcHRlX3QgcHRlLCBpbnQgZGlydHkpCi17Ci0JcmV0dXJuIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIGFkZHIsIHB0ZXAsIHB0ZSwgZGlydHkpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQocHRlX3QgKnB0ZXApCi17Ci0JcmV0dXJuICpwdGVwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcmNoX3ByZXBhcmVfaHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlbGVhc2VfaHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci19Ci0KLSNlbmRpZiAvKiBfQVNNX1NQQVJDNjRfSFVHRVRMQl9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2h1Z2V0bGIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHZ0cmFtcC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9odnRyYW1wLmgKaW5kZXggYjJiOWI5NC4uZmI0NmJmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9odnRyYW1wLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9odnRyYW1wLmgKQEAgLTEsMzcgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfSFZUUkFQX0gKLSNkZWZpbmUgX1NQQVJDNjRfSFZUUkFQX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCBodnRyYW1wX21hcHBpbmcgewotCV9fdTY0CQl2YWRkcjsKLQlfX3U2NAkJdHRlOwotfTsKLQotc3RydWN0IGh2dHJhbXBfZGVzY3IgewotCV9fdTMyCQkJY3B1OwotCV9fdTMyCQkJbnVtX21hcHBpbmdzOwotCV9fdTY0CQkJZmF1bHRfaW5mb192YTsKLQlfX3U2NAkJCWZhdWx0X2luZm9fcGE7Ci0JX191NjQJCQl0aHJlYWRfcmVnOwotCXN0cnVjdCBodnRyYW1wX21hcHBpbmcJbWFwc1sxXTsKLX07Ci0KLWV4dGVybiB2b2lkIGh2X2NwdV9zdGFydHVwKHVuc2lnbmVkIGxvbmcgaHZkZXNjcl9wYSk7Ci0KLSNlbmRpZgotCi0jZGVmaW5lIEhWVFJBTVBfREVTQ1JfQ1BVCQkweDAwCi0jZGVmaW5lIEhWVFJBTVBfREVTQ1JfTlVNX01BUFBJTkdTCTB4MDQKLSNkZWZpbmUgSFZUUkFNUF9ERVNDUl9GQVVMVF9JTkZPX1ZBCTB4MDgKLSNkZWZpbmUgSFZUUkFNUF9ERVNDUl9GQVVMVF9JTkZPX1BBCTB4MTAKLSNkZWZpbmUgSFZUUkFNUF9ERVNDUl9USFJFQURfUkVHCTB4MTgKLSNkZWZpbmUgSFZUUkFNUF9ERVNDUl9NQVBTCQkweDIwCi0KLSNkZWZpbmUgSFZUUkFNUF9NQVBQSU5HX1ZBRERSCQkweDAwCi0jZGVmaW5lIEhWVFJBTVBfTUFQUElOR19UVEUJCTB4MDgKLSNkZWZpbmUgSFZUUkFNUF9NQVBQSU5HX1NJWkUJCTB4MTAKLQotI2VuZGlmIC8qIF9TUEFSQzY0X0hWVFJBUF9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2h2dHJhbXAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2h3X2lycS5oCmluZGV4IDhlNDRhODMuLjE2OTIwYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9od19pcnEuaApAQCAtMSw0ICsxIEBACi0jaWZuZGVmIF9fQVNNX1NQQVJDNjRfSFdfSVJRX0gKLSNkZWZpbmUgX19BU01fU1BBUkM2NF9IV19JUlFfSAotCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tc3BhcmMvaHdfaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2h5cGVydmlzb3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHlwZXJ2aXNvci5oCmluZGV4IDNhZDQ1ZGYuLmZlN2U1MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHlwZXJ2aXNvci5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHlwZXJ2aXNvci5oCkBAIC0xLDI5NDUgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfSFlQRVJWSVNPUl9ICi0jZGVmaW5lIF9TUEFSQzY0X0hZUEVSVklTT1JfSAotCi0vKiBTdW40diBoeXBlcnZpc29yIGludGVyZmFjZXMgYW5kIGRlZmluZXMuCi0gKgotICogSHlwZXJ2aXNvciBjYWxscyBhcmUgbWFkZSB2aWEgdHJhcHMgdG8gc29mdHdhcmUgdHJhcHMgbnVtYmVyIDB4ODAKLSAqIGFuZCBhYm92ZS4gIFJlZ2lzdGVycyAlbzAgdG8gJW81IHNlcnZlIGFzIGFyZ3VtZW50LCBzdGF0dXMsIGFuZAotICogcmV0dXJuIHZhbHVlIHJlZ2lzdGVycy4KLSAqCi0gKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHRoZXNlIHRyYXBzLiAgRmlyc3QgdGhlcmUgYXJlIHRoZSBub3JtYWwKLSAqICJmYXN0IHRyYXBzIiB3aGljaCB1c2Ugc29mdHdhcmUgdHJhcCAweDgwIGFuZCBlbmNvZGUgdGhlIGZ1bmN0aW9uCi0gKiB0byBpbnZva2UgYnkgbnVtYmVyIGluIHJlZ2lzdGVyICVvNS4gIEFyZ3VtZW50IGFuZCByZXR1cm4gdmFsdWUKLSAqIGhhbmRsaW5nIGlzIGFzIGZvbGxvd3M6Ci0gKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwgICVvNSAgfCBmdW5jdGlvbiBudW1iZXIgfCAgICAgdW5kZWZpbmVkICAgICB8Ci0gKiB8ICAlbzAgIHwgICBhcmd1bWVudCAwICAgIHwgICByZXR1cm4gc3RhdHVzICAgfAotICogfCAgJW8xICB8ICAgYXJndW1lbnQgMSAgICB8ICAgcmV0dXJuIHZhbHVlIDEgIHwKLSAqIHwgICVvMiAgfCAgIGFyZ3VtZW50IDIgICAgfCAgIHJldHVybiB2YWx1ZSAyICB8Ci0gKiB8ICAlbzMgIHwgICBhcmd1bWVudCAzICAgIHwgICByZXR1cm4gdmFsdWUgMyAgfAotICogfCAgJW80ICB8ICAgYXJndW1lbnQgNCAgICB8ICAgcmV0dXJuIHZhbHVlIDQgIHwKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogVGhlIHNlY29uZCB0eXBlIGFyZSAiaHlwZXItZmFzdCB0cmFwcyIgd2hpY2ggZW5jb2RlIHRoZSBmdW5jdGlvbgotICogbnVtYmVyIGluIHRoZSBzb2Z0d2FyZSB0cmFwIG51bWJlciBpdHNlbGYuICBTbyB0aGVzZSB1c2UgdHJhcAotICogbnVtYmVycyA+IDB4ODAuICBUaGUgcmVnaXN0ZXIgdXNhZ2UgZm9yIGh5cGVyLWZhc3QgdHJhcHMgaXMgYXMKLSAqIGZvbGxvd3M6Ci0gKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwgICVvMCAgfCAgIGFyZ3VtZW50IDAgICAgfCAgIHJldHVybiBzdGF0dXMgICB8Ci0gKiB8ICAlbzEgIHwgICBhcmd1bWVudCAxICAgIHwgICByZXR1cm4gdmFsdWUgMSAgfAotICogfCAgJW8yICB8ICAgYXJndW1lbnQgMiAgICB8ICAgcmV0dXJuIHZhbHVlIDIgIHwKLSAqIHwgICVvMyAgfCAgIGFyZ3VtZW50IDMgICAgfCAgIHJldHVybiB2YWx1ZSAzICB8Ci0gKiB8ICAlbzQgIHwgICBhcmd1bWVudCA0ICAgIHwgICByZXR1cm4gdmFsdWUgNCAgfAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBSZWdpc3RlcnMgcHJvdmlkaW5nIGV4cGxpY2l0IGFyZ3VtZW50cyB0byB0aGUgaHlwZXJ2aXNvciBjYWxscwotICogYXJlIHZvbGF0aWxlIGFjcm9zcyB0aGUgY2FsbC4gIFVwb24gcmV0dXJuIHRoZWlyIHZhbHVlcyBhcmUKLSAqIHVuZGVmaW5lZCB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgYXMgY29udGFpbmluZyBhIHBhcnRpY3VsYXIKLSAqIHJldHVybiB2YWx1ZSBieSB0aGUgc3BlY2lmaWMgY2FsbC4gIFRoZSByZXR1cm4gc3RhdHVzIGlzIGFsd2F5cwotICogcmV0dXJuZWQgaW4gcmVnaXN0ZXIgJW8wLCB6ZXJvIGluZGljYXRlcyBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mCi0gKiB0aGUgaHlwZXJ2aXNvciBjYWxsIGFuZCBvdGhlciB2YWx1ZXMgaW5kaWNhdGUgYW4gZXJyb3Igc3RhdHVzIGFzCi0gKiBkZWZpbmVkIGJlbG93LiAgU28sIGZvciBleGFtcGxlLCBpZiBhIGh5cGVyLWZhc3QgdHJhcCB0YWtlcwotICogYXJndW1lbnRzIDAsIDEsIGFuZCAyLCB0aGVuICVvMCwgJW8xLCBhbmQgJW8yIGFyZSB2b2xhdGlsZSBhY3Jvc3MKLSAqIHRoZSBjYWxsIGFuZCAlbzMsICVvNCwgYW5kICVvNSB3b3VsZCBiZSBwcmVzZXJ2ZWQuCi0gKgotICogSWYgdGhlIGh5cGVydmlzb3IgdHJhcCBpcyBpbnZhbGlkLCBvciB0aGUgZmFzdCB0cmFwIGZ1bmN0aW9uIG51bWJlcgotICogaXMgaW52YWxpZCwgSFZfRUJBRFRSQVAgd2lsbCBiZSByZXR1cm5lZCBpbiAlbzAuICBBbHNvLCBhbGwgNjQtYml0cwotICogb2YgdGhlIGFyZ3VtZW50IGFuZCByZXR1cm4gdmFsdWVzIGFyZSBzaWduaWZpY2FudC4KLSAqLwotCi0vKiBUcmFwIG51bWJlcnMuICAqLwotI2RlZmluZSBIVl9GQVNUX1RSQVAJCTB4ODAKLSNkZWZpbmUgSFZfTU1VX01BUF9BRERSX1RSQVAJMHg4MwotI2RlZmluZSBIVl9NTVVfVU5NQVBfQUREUl9UUkFQCTB4ODQKLSNkZWZpbmUgSFZfVFRSQUNFX0FEREVOVFJZX1RSQVAJMHg4NQotI2RlZmluZSBIVl9DT1JFX1RSQVAJCTB4ZmYKLQotLyogRXJyb3IgY29kZXMuICAqLwotI2RlZmluZSBIVl9FT0sJCQkJMCAgLyogU3VjY2Vzc2Z1bCByZXR1cm4gICAgICAgICAgICAqLwotI2RlZmluZSBIVl9FTk9DUFUJCQkxICAvKiBJbnZhbGlkIENQVSBpZCAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhWX0VOT1JBRERSCQkJMiAgLyogSW52YWxpZCByZWFsIGFkZHJlc3MgICAgICAgICAqLwotI2RlZmluZSBIVl9FTk9JTlRSCQkJMyAgLyogSW52YWxpZCBpbnRlcnJ1cHQgaWQgICAgICAgICAqLwotI2RlZmluZSBIVl9FQkFEUEdTWgkJCTQgIC8qIEludmFsaWQgcGFnZXNpemUgZW5jb2RpbmcgICAgKi8KLSNkZWZpbmUgSFZfRUJBRFRTQgkJCTUgIC8qIEludmFsaWQgVFNCIGRlc2NyaXB0aW9uICAgICAgKi8KLSNkZWZpbmUgSFZfRUlOVkFMCQkJNiAgLyogSW52YWxpZCBhcmd1bWVudCAgICAgICAgICAgICAqLwotI2RlZmluZSBIVl9FQkFEVFJBUAkJCTcgIC8qIEludmFsaWQgZnVuY3Rpb24gbnVtYmVyICAgICAgKi8KLSNkZWZpbmUgSFZfRUJBREFMSUdOCQkJOCAgLyogSW52YWxpZCBhZGRyZXNzIGFsaWdubWVudCAgICAqLwotI2RlZmluZSBIVl9FV09VTERCTE9DSwkJCTkgIC8qIENhbm5vdCBjb21wbGV0ZSB3L28gYmxvY2tpbmcgKi8KLSNkZWZpbmUgSFZfRU5PQUNDRVNTCQkJMTAgLyogTm8gYWNjZXNzIHRvIHJlc291cmNlICAgICAgICAqLwotI2RlZmluZSBIVl9FSU8JCQkJMTEgLyogSS9PIGVycm9yICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIVl9FQ1BVRVJST1IJCQkxMiAvKiBDUFUgaW4gZXJyb3Igc3RhdGUgICAgICAgICAgICovCi0jZGVmaW5lIEhWX0VOT1RTVVBQT1JURUQJCTEzIC8qIEZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgICAgICAgKi8KLSNkZWZpbmUgSFZfRU5PTUFQCQkJMTQgLyogTm8gbWFwcGluZyBmb3VuZCAgICAgICAgICAgICAqLwotI2RlZmluZSBIVl9FVE9PTUFOWQkJCTE1IC8qIFRvbyBtYW55IGl0ZW1zIHNwZWNpZmllZCAgICAgKi8KLSNkZWZpbmUgSFZfRUNIQU5ORUwJCQkxNiAvKiBJbnZhbGlkIExEQyBjaGFubmVsICAgICAgICAgICovCi0jZGVmaW5lIEhWX0VCVVNZCQkJMTcgLyogUmVzb3VyY2UgYnVzeSAgICAgICAgICAgICAgICAqLwotCi0vKiBtYWNoX2V4aXQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9NQUNIX0VYSVQKLSAqIEFSRzA6CWV4aXQgY29kZQotICogRVJST1JTOglUaGlzIHNlcnZpY2UgZG9lcyBub3QgcmV0dXJuLgotICoKLSAqIFN0b3AgYWxsIENQVXMgaW4gdGhlIHZpcnR1YWwgZG9tYWluIGFuZCBwbGFjZSB0aGVtIGludG8gdGhlIHN0b3BwZWQKLSAqIHN0YXRlLiAgVGhlIDY0LWJpdCBleGl0IGNvZGUgbWF5IGJlIHBhc3NlZCB0byBhIHNlcnZpY2UgZW50aXR5IGFzCi0gKiB0aGUgZG9tYWluJ3MgZXhpdCBzdGF0dXMuICBPbiBzeXN0ZW1zIHdpdGhvdXQgYSBzZXJ2aWNlIGVudGl0eSwgdGhlCi0gKiBkb21haW4gd2lsbCB1bmRlcmdvIGEgcmVzZXQsIGFuZCB0aGUgYm9vdCBmaXJtd2FyZSB3aWxsIGJlCi0gKiByZWxvYWRlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgcmV0dXJuIHRvIHRoZSBndWVzdCB0aGF0IGludm9rZXMgaXQuCi0gKgotICogTm90ZTogQnkgY29udmVudGlvbiBhbiBleGl0IGNvZGUgb2YgemVybyBkZW5vdGVzIGEgc3VjY2Vzc2Z1bCBleGl0IGJ5Ci0gKiAgICAgICB0aGUgZ3Vlc3QgY29kZS4gIEEgbm9uLXplcm8gZXhpdCBjb2RlIGRlbm90ZXMgYSBndWVzdCBzcGVjaWZpYwotICogICAgICAgZXJyb3IgaW5kaWNhdGlvbi4KLSAqCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9NQUNIX0VYSVQJCTB4MDAKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIHN1bjR2X21hY2hfZXhpdCh1bnNpZ25lZCBsb25nIGV4aXRfY29kZSk7Ci0jZW5kaWYKLQotLyogRG9tYWluIHNlcnZpY2VzLiAgKi8KLQotLyogbWFjaF9kZXNjKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9ERVNDCi0gKiBBUkcwOglidWZmZXIKLSAqIEFSRzE6CWxlbmd0aAotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglsZW5ndGgKLSAqIEVSUk9SUzoJSFZfRUJBREFMSUdOCUJ1ZmZlciBpcyBiYWRseSBhbGlnbmVkCi0gKgkJSFZfRU5PUkFERFIJQnVmZmVyIGlzIHRvIGFuIGlsbGVnYWwgcmVhbCBhZGRyZXNzLgotICoJCUhWX0VJTlZBTAlCdWZmZXIgbGVuZ3RoIGlzIHRvbyBzbWFsbCBmb3IgY29tcGxldGUKLSAqCQkJCW1hY2hpbmUgZGVzY3JpcHRpb24uCi0gKgotICogQ29weSB0aGUgbW9zdCBjdXJyZW50IG1hY2hpbmUgZGVzY3JpcHRpb24gaW50byB0aGUgYnVmZmVyIGluZGljYXRlZAotICogYnkgdGhlIHJlYWwgYWRkcmVzcyBpbiBBUkcwLiAgVGhlIGJ1ZmZlciBwcm92aWRlZCBtdXN0IGJlIDE2IGJ5dGUKLSAqIGFsaWduZWQuICBVcG9uIHN1Y2Nlc3Mgb3IgSFZfRUlOVkFMLCB0aGlzIHNlcnZpY2UgcmV0dXJucyB0aGUKLSAqIGFjdHVhbCBzaXplIG9mIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIGluIHRoZSBSRVQxIHJldHVybiB2YWx1ZS4KLSAqCi0gKiBOb3RlOiBBIG1ldGhvZCBvZiBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgYnVmZmVyIHNpemUgZm9yIHRoZQotICogICAgICAgbWFjaGluZSBkZXNjcmlwdGlvbiBpcyB0byBmaXJzdCBjYWxsIHRoaXMgc2VydmljZSB3aXRoIGEgYnVmZmVyCi0gKiAgICAgICBsZW5ndGggb2YgMCBieXRlcy4KLSAqLwotI2RlZmluZSBIVl9GQVNUX01BQ0hfREVTQwkJMHgwMQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbWFjaF9kZXNjKHVuc2lnbmVkIGxvbmcgYnVmZmVyX3BhLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBidWZfbGVuLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqcmVhbF9idWZfbGVuKTsKLSNlbmRpZgotCi0vKiBtYWNoX3NpcigpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfU0lSCi0gKiBFUlJPUlM6CVRoaXMgc2VydmljZSBkb2VzIG5vdCByZXR1cm4uCi0gKgotICogUGVyZm9ybSBhIHNvZnR3YXJlIGluaXRpYXRlZCByZXNldCBvZiB0aGUgdmlydHVhbCBtYWNoaW5lIGRvbWFpbi4KLSAqIEFsbCBDUFVzIGFyZSBjYXB0dXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlLCBhbGwgaGFyZHdhcmUgZGV2aWNlcyBhcmUKLSAqIHJldHVybmVkIHRvIHRoZSBlbnRyeSBkZWZhdWx0IHN0YXRlLCBhbmQgdGhlIGRvbWFpbiBpcyByZXN0YXJ0ZWQgYXQKLSAqIHRoZSBTSVIgKHRyYXAgdHlwZSAweDA0KSByZWFsIHRyYXAgdGFibGUgKFJUQkEpIGVudHJ5IHBvaW50IG9uIG9uZQotICogb2YgdGhlIENQVXMuICBUaGUgc2luZ2xlIENQVSByZXN0YXJ0ZWQgaXMgc2VsZWN0ZWQgYXMgZGV0ZXJtaW5lZCBieQotICogcGxhdGZvcm0gc3BlY2lmaWMgcG9saWN5LiAgTWVtb3J5IGlzIHByZXNlcnZlZCBhY3Jvc3MgdGhpcwotICogb3BlcmF0aW9uLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTUFDSF9TSVIJCTB4MDIKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIHN1bjR2X21hY2hfc2lyKHZvaWQpOwotI2VuZGlmCi0KLS8qIG1hY2hfc2V0X3dhdGNoZG9nKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9TRVRfV0FUQ0hET0cKLSAqIEFSRzA6CXRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CXRpbWUgcmVtYWluaW5nIGluIG1pbGxpc2Vjb25kcwotICoKLSAqIEEgZ3Vlc3QgdXNlcyB0aGlzIEFQSSB0byBzZXQgYSB3YXRjaGRvZyB0aW1lci4gIE9uY2UgdGhlIGd1ZXMgaGFzIHNldAotICogdGhlIHRpbWVyLCBpdCBtdXN0IGNhbGwgdGhlIHRpbWVyIHNlcnZpY2UgYWdhaW4gZWl0aGVyIHRvIGRpc2FibGUgb3IKLSAqIHBvc3Rwb25lIHRoZSBleHBpcmF0aW9uLiAgSWYgdGhlIHRpbWVyIGV4cGlyZXMgYmVmb3JlIGJlaW5nIHJlc2V0IG9yCi0gKiBkaXNhYmxlZCwgdGhlbiB0aGUgaHlwZXJ2aXNvciB0YWtlIGEgcGxhdGZvcm0gc3BlY2lmaWMgYWN0aW9uIGxlYWRpbmcKLSAqIHRvIGd1ZXN0IHRlcm1pbmF0aW9uIHdpdGhpbiBhIGJvdW5kZWQgdGltZSBwZXJpb2QuICBUaGUgcGxhdGZvcm0gYWN0aW9uCi0gKiBtYXkgaW5jbHVkZSByZWNvdmVyeSBhY3Rpb25zIHN1Y2ggYXMgcmVwb3J0aW5nIHRoZSBleHBpcmF0aW9uIHRvIGEKLSAqIFNlcnZpY2UgUHJvY2Vzc29yLCBhbmQvb3IgYXV0b21hdGljYWxseSByZXN0YXJ0aW5nIHRoZSBndWVzLgotICoKLSAqIFRoZSAndGltZW91dCcgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBpbiBtaWxsaXNlY29uZHMsIGhvd2V2ZXIgdGhlCi0gKiBpbXBsZW1lbnRhdGVkIGdyYW51bGFyaXR5IGlzIGdpdmVuIGJ5IHRoZSAnd2F0Y2hkb2ctcmVzb2x1dGlvbicKLSAqIHByb3BlcnR5IGluIHRoZSAncGxhdGZvcm0nIG5vZGUgb2YgdGhlIGd1ZXN0J3MgbWFjaGluZSBkZXNjcmlwdGlvbi4KLSAqIFRoZSBsYXJnZXN0IGFsbG93ZWQgdGltZW91dCB2YWx1ZSBpcyBzcGVjaWZpZWQgYnkgdGhlCi0gKiAnd2F0Y2hkb2ctbWF4LXRpbWVvdXQnIHByb3BlcnR5IG9mIHRoZSAncGxhdGZvcm0nIG5vZGUuCi0gKgotICogSWYgdGhlICd0aW1lb3V0JyBhcmd1bWVudCBpcyBub3QgemVybywgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIHNldCB0bwotICogZXhwaXJlIGFmdGVyIGEgbWluaW11bSBvZiAndGltZW91dCcgbWlsbGlzZWNvbmRzLgotICoKLSAqIElmIHRoZSAndGltZW91dCcgYXJndW1lbnQgaXMgemVybywgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIGRpc2FibGVkLgotICoKLSAqIElmIHRoZSAndGltZW91dCcgdmFsdWUgZXhjZWVkcyB0aGUgdmFsdWUgb2YgdGhlICdtYXgtd2F0Y2hkb2ctdGltZW91dCcKLSAqIHByb3BlcnR5LCB0aGUgaHlwZXJ2aXNvciBsZWF2ZXMgdGhlIHdhdGNoZG9nIHRpbWVyIHN0YXRlIHVuY2hhbmdlZCwKLSAqIGFuZCByZXR1cm5zIGEgc3RhdHVzIG9mIEVJTlZBTC4KLSAqCi0gKiBUaGUgJ3RpbWUgcmVtYWluaW5nJyByZXR1cm4gdmFsdWUgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZQotICogcmV0dXJuIHN0YXR1cyBpcyBFT0sgb3IgRUlOVkFMLiAgQSBub24temVybyByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZQotICogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IHdlcmUgcmVtYWluaW5nIHVudGlsIHRoZSB0aW1lciB3YXMgdG8gZXhwaXJlLgotICogSWYgbGVzcyB0aGFuIG9uZSBtaWxsaXNlY29uZCByZW1haW5zLCB0aGUgcmV0dXJuIHZhbHVlIGlzICcxJy4gIElmIHRoZQotICogd2F0Y2hkb2cgdGltZXIgd2FzIGRpc2FibGVkIGF0IHRoZSB0aW1lIG9mIHRoZSBjYWxsLCB0aGUgcmV0dXJuIHZhbHVlIGlzCi0gKiB6ZXJvLgotICoKLSAqIElmIHRoZSBoeXBlcnZpc29yIGNhbm5vdCBzdXBwb3J0IHRoZSBleGFjdCB0aW1lb3V0IHZhbHVlIHJlcXVlc3RlZCwgYnV0Ci0gKiBjYW4gc3VwcG9ydCBhIGxhcmdlciB0aW1lb3V0IHZhbHVlLCB0aGUgaHlwZXJ2aXNvciBtYXkgcm91bmQgdGhlIGFjdHVhbAotICogdGltZW91dCB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0ZWQgdGltZW91dCwgY29uc2VxdWVudGx5IHRoZQotICogJ3RpbWUgcmVtYWluaW5nJyByZXR1cm4gdmFsdWUgbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBwcmV2aW91c2x5IHJlcXVlc3RlZAotICogdGltZW91dCB2YWx1ZS4KLSAqCi0gKiBBbnkgZ3Vlc3QgT1MgZGVidWdnZXIgc2hvdWxkIGJlIGF3YXJlIHRoYXQgdGhlIHdhdGNoZG9nIHNlcnZpY2UgbWF5IGJlIGluCi0gKiB1c2UuICBDb25zZXF1ZW50bHksIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHdhdGNoZG9nIHNlcnZpY2UgaXMKLSAqIGRpc2FibGVkIHVwb24gZGVidWdnZXIgZW50cnkgKGUuZy4gcmVhY2hpbmcgYSBicmVha3BvaW50KSwgYW5kIHRoZW4KLSAqIHJlLWVuYWJsZWQgdXBvbiByZXR1cm5pbmcgdG8gbm9ybWFsIGV4ZWN1dGlvbi4gIFRoZSBBUEkgaGFzIGJlZW4gZGVzaWduZWQKLSAqIHdpdGggdGhpcyBpbiBtaW5kLCBhbmQgdGhlICd0aW1lIHJlbWFpbmluZycgcmVzdWx0IG9mIHRoZSBkaXNhYmxlIGNhbGwgbWF5Ci0gKiBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSB0aW1lb3V0IGFyZ3VtZW50IG9mIHRoZSByZS1lbmFibGUgY2FsbC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX01BQ0hfU0VUX1dBVENIRE9HCTB4MDUKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21hY2hfc2V0X3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgdGltZW91dCwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nICpvcmlnX3RpbWVvdXQpOwotI2VuZGlmCi0KLS8qIENQVSBzZXJ2aWNlcy4KLSAqCi0gKiBDUFVzIHJlcHJlc2VudCBkZXZpY2VzIHRoYXQgY2FuIGV4ZWN1dGUgc29mdHdhcmUgdGhyZWFkcy4gIEEgc2luZ2xlCi0gKiBjaGlwIHRoYXQgY29udGFpbnMgbXVsdGlwbGUgY29yZXMgb3Igc3RyYW5kcyBpcyByZXByZXNlbnRlZCBhcwotICogbXVsdGlwbGUgQ1BVcyB3aXRoIHVuaXF1ZSBDUFUgaWRlbnRpZmllcnMuICBDUFVzIGFyZSBleHBvcnRlZCB0bwotICogT0JQIHZpYSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiAoYW5kIHRvIHRoZSBPUyB2aWEgdGhlIE9CUCBkZXZpY2UKLSAqIHRyZWUpLiAgQ1BVcyBhcmUgYWx3YXlzIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6IHN0b3BwZWQsIHJ1bm5pbmcsCi0gKiBvciBlcnJvci4KLSAqCi0gKiBBIENQVSBJRCBpcyBhIHByZS1hc3NpZ25lZCAxNi1iaXQgdmFsdWUgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEKLSAqIENQVSB3aXRoaW4gYSBsb2dpY2FsIGRvbWFpbi4gIE9wZXJhdGlvbnMgdGhhdCBhcmUgdG8gYmUgcGVyZm9ybWVkCi0gKiBvbiBtdWx0aXBsZSBDUFVzIHNwZWNpZnkgdGhlbSB2aWEgYSBDUFUgbGlzdC4gIEEgQ1BVIGxpc3QgaXMgYW4KLSAqIGFycmF5IGluIHJlYWwgbWVtb3J5LCBvZiB3aGljaCBlYWNoIDE2LWJpdCB3b3JkIGlzIGEgQ1BVIElELiAgQ1BVCi0gKiBsaXN0cyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlIEFQSSBhcyB0d28gYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzCi0gKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgKDE2LWJpdCB3b3JkcykgaW4gdGhlIENQVSBsaXN0LCBhbmQgdGhlCi0gKiBzZWNvbmQgaXMgdGhlIChyZWFsIGFkZHJlc3MpIHBvaW50ZXIgdG8gdGhlIENQVSBJRCBsaXN0LgotICovCi0KLS8qIGNwdV9zdGFydCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9TVEFSVAotICogQVJHMDoJQ1BVIElECi0gKiBBUkcxOglQQwotICogQVJHMjoJUlRCQQotICogQVJHMzoJdGFyZ2V0IEFSRzAKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFTk9DUFUJCUludmFsaWQgQ1BVIElECi0gKgkJRUlOVkFMCQlUYXJnZXQgQ1BVIElEIGlzIG5vdCBpbiB0aGUgc3RvcHBlZCBzdGF0ZQotICoJCUVOT1JBRERSCUludmFsaWQgUEMgb3IgUlRCQSByZWFsIGFkZHJlc3MKLSAqCQlFQkFEQUxJR04JVW5hbGlnbmVkIFBDIG9yIHVuYWxpZ25lZCBSVEJBCi0gKgkJRVdPVUxEQkxPQ0sJU3RhcnRpbmcgcmVzb3VyY2VzIGFyZSBub3QgYXZhaWxhYmxlCi0gKgotICogU3RhcnQgQ1BVIHdpdGggZ2l2ZW4gQ1BVIElEIHdpdGggUEMgaW4gJXBjIGFuZCB3aXRoIGEgcmVhbCB0cmFwCi0gKiBiYXNlIGFkZHJlc3MgdmFsdWUgb2YgUlRCQS4gIFRoZSBpbmRpY2F0ZWQgQ1BVIG11c3QgYmUgaW4gdGhlCi0gKiBzdG9wcGVkIHN0YXRlLiAgVGhlIHN1cHBsaWVkIFJUQkEgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMjU2IGJ5dGUKLSAqIGJvdW5kYXJ5LiAgT24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGUgc3BlY2lmaWVkIENQVSB3aWxsIGJlIGluCi0gKiB0aGUgcnVubmluZyBzdGF0ZSBhbmQgd2lsbCBiZSBzdXBwbGllZCB3aXRoICJ0YXJnZXQgQVJHMCIgaW4gJW8wCi0gKiBhbmQgUlRCQSBpbiAldGJhLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfQ1BVX1NUQVJUCQkweDEwCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9jcHVfc3RhcnQodW5zaWduZWQgbG9uZyBjcHVpZCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGMsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHJ0YmEsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZzApOwotI2VuZGlmCi0KLS8qIGNwdV9zdG9wKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX1NUT1AKLSAqIEFSRzA6CUNQVSBJRAotICogUkVUMDoJc3RhdHVzCi0gKiBFUlJPUlM6CUVOT0NQVQkJSW52YWxpZCBDUFUgSUQKLSAqCQlFSU5WQUwJCVRhcmdldCBDUFUgSUQgaXMgdGhlIGN1cnJlbnQgY3B1Ci0gKgkJRUlOVkFMCQlUYXJnZXQgQ1BVIElEIGlzIG5vdCBpbiB0aGUgcnVubmluZyBzdGF0ZQotICoJCUVXT1VMREJMT0NLCVN0b3BwaW5nIHJlc291cmNlcyBhcmUgbm90IGF2YWlsYWJsZQotICoJCUVOT1RTVVBQT1JURUQJTm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCi0gKgotICogVGhlIHNwZWNpZmllZCBDUFUgaXMgc3RvcHBlZC4gIFRoZSBpbmRpY2F0ZWQgQ1BVIG11c3QgYmUgaW4gdGhlCi0gKiBydW5uaW5nIHN0YXRlLiAgT24gY29tcGxldGlvbiwgaXQgd2lsbCBiZSBpbiB0aGUgc3RvcHBlZCBzdGF0ZS4gIEl0Ci0gKiBpcyBub3QgbGVnYWwgdG8gc3RvcCB0aGUgY3VycmVudCBDUFUuCi0gKgotICogTm90ZTogQXMgdGhpcyBzZXJ2aWNlIGNhbm5vdCBiZSB1c2VkIHRvIHN0b3AgdGhlIGN1cnJlbnQgY3B1LCB0aGlzIHNlcnZpY2UKLSAqICAgICAgIG1heSBub3QgYmUgdXNlZCB0byBzdG9wIHRoZSBsYXN0IHJ1bm5pbmcgQ1BVIGluIGEgZG9tYWluLiAgVG8gc3RvcAotICogICAgICAgYW5kIGV4aXQgYSBydW5uaW5nIGRvbWFpbiwgYSBndWVzdCBtdXN0IHVzZSB0aGUgbWFjaF9leGl0KCkgc2VydmljZS4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0NQVV9TVE9QCQkweDExCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9jcHVfc3RvcCh1bnNpZ25lZCBsb25nIGNwdWlkKTsKLSNlbmRpZgotCi0vKiBjcHVfeWllbGQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9DUFVfWUlFTEQKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglObyBwb3NzaWJsZSBlcnJvci4KLSAqCi0gKiBTdXNwZW5kIGV4ZWN1dGlvbiBvbiB0aGUgY3VycmVudCBDUFUuICBFeGVjdXRpb24gd2lsbCByZXN1bWUgd2hlbgotICogYW4gaW50ZXJydXB0IChkZXZpY2UsICVzdGlja19jb21wYXJlLCBvciBjcm9zcy1jYWxsKSBpcyB0YXJnZXRlZCB0bwotICogdGhlIENQVS4gIE9uIHNvbWUgQ1BVcywgdGhpcyBBUEkgbWF5IGJlIHVzZWQgYnkgdGhlIGh5cGVydmlzb3IgdG8KLSAqIHNhdmUgcG93ZXIgYnkgZGlzYWJsaW5nIGhhcmR3YXJlIHN0cmFuZHMuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9DUFVfWUlFTEQJCTB4MTIKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2NwdV95aWVsZCh2b2lkKTsKLSNlbmRpZgotCi0vKiBjcHVfcWNvbmYoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9DUFVfUUNPTkYKLSAqIEFSRzA6CXF1ZXVlCi0gKiBBUkcxOgliYXNlIHJlYWwgYWRkcmVzcwotICogQVJHMjoJbnVtYmVyIG9mIGVudHJpZXMKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIGJhc2UgcmVhbCBhZGRyZXNzCi0gKgkJRUlOVkFMCQlJbnZhbGlkIHF1ZXVlIG9yIG51bWJlciBvZiBlbnRyaWVzIGlzIGxlc3MKLSAqCQkJCXRoYW4gMiBvciB0b28gbGFyZ2UuCi0gKgkJRUJBREFMSUdOCUJhc2UgcmVhbCBhZGRyZXNzIGlzIG5vdCBjb3JyZWN0bHkgYWxpZ25lZAotICoJCQkJZm9yIHNpemUuCi0gKgotICogQ29uZmlndXJlIHRoZSBnaXZlbiBxdWV1ZSB0byBiZSBwbGFjZWQgYXQgdGhlIGdpdmVuIGJhc2UgcmVhbAotICogYWRkcmVzcywgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGVudHJpZXMuICBUaGUgbnVtYmVyIG9mIGVudHJpZXMKLSAqIG11c3QgYmUgYSBwb3dlciBvZiAyLiAgVGhlIGJhc2UgcmVhbCBhZGRyZXNzIG11c3QgYmUgYWxpZ25lZAotICogZXhhY3RseSB0byBtYXRjaCB0aGUgcXVldWUgc2l6ZS4gIEVhY2ggcXVldWUgZW50cnkgaXMgNjQgYnl0ZXMKLSAqIGxvbmcsIHNvIGZvciBleGFtcGxlIGEgMzIgZW50cnkgcXVldWUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMjA0OAotICogYnl0ZSByZWFsIGFkZHJlc3MgYm91bmRhcnkuCi0gKgotICogVGhlIHNwZWNpZmllZCBxdWV1ZSBpcyB1bmNvbmZpZ3VyZWQgaWYgdGhlIG51bWJlciBvZiBlbnRyaWVzIGlzIGdpdmVuCi0gKiBhcyB6ZXJvLgotICoKLSAqIEZvciB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoaXMgQVBJIHNlcnZpY2UsIHRoZSBhcmd1bWVudCBxdWV1ZSBpcyBkZWZpbmVkCi0gKiBhcyBmb2xsb3dzOgotICoKLSAqCXF1ZXVlCQlkZXNjcmlwdGlvbgotICoJLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCTB4M2MJCWNwdSBtb25kbyBxdWV1ZQotICoJMHgzZAkJZGV2aWNlIG1vbmRvIHF1ZXVlCi0gKgkweDNlCQlyZXN1bWFibGUgZXJyb3IgcXVldWUKLSAqCTB4M2YJCW5vbi1yZXN1bWFibGUgZXJyb3IgcXVldWUKLSAqCi0gKiBOb3RlOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBmb3IgZWFjaCBxdWV1ZSBmb3IgYSBzcGVjaWZpYyBjcHUgbWF5Ci0gKiAgICAgICBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9DUFVfUUNPTkYJCTB4MTQKLSNkZWZpbmUgIEhWX0NQVV9RVUVVRV9DUFVfTU9ORE8JCSAweDNjCi0jZGVmaW5lICBIVl9DUFVfUVVFVUVfREVWSUNFX01PTkRPCSAweDNkCi0jZGVmaW5lICBIVl9DUFVfUVVFVUVfUkVTX0VSUk9SCQkgMHgzZQotI2RlZmluZSAgSFZfQ1BVX1FVRVVFX05PTlJFU19FUlJPUgkgMHgzZgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfY3B1X3Fjb25mKHVuc2lnbmVkIGxvbmcgdHlwZSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcXVldWVfcGFkZHIsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG51bV9xdWV1ZV9lbnRyaWVzKTsKLSNlbmRpZgotCi0vKiBjcHVfcWluZm8oKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9DUFVfUUlORk8KLSAqIEFSRzA6CXF1ZXVlCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWJhc2UgcmVhbCBhZGRyZXNzCi0gKiBSRVQxOgludW1iZXIgb2YgZW50cmllcwotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgcXVldWUKLSAqCi0gKiBSZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gaW5mbyBmb3IgdGhlIGdpdmVuIHF1ZXVlLiAgVGhlIGJhc2UgcmVhbAotICogYWRkcmVzcyBhbmQgbnVtYmVyIG9mIGVudHJpZXMgb2YgdGhlIGRlZmluZWQgcXVldWUgYXJlIHJldHVybmVkLgotICogVGhlIHF1ZXVlIGFyZ3VtZW50IHZhbHVlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIGNwdV9xY29uZigpIGFib3ZlLgotICoKLSAqIElmIHRoZSBzcGVjaWZpZWQgcXVldWUgaXMgYSB2YWxpZCBxdWV1ZSBudW1iZXIsIGJ1dCBubyBxdWV1ZSBoYXMKLSAqIGJlZW4gZGVmaW5lZCwgdGhlIG51bWJlciBvZiBlbnRyaWVzIHdpbGwgYmUgc2V0IHRvIHplcm8gYW5kIHRoZQotICogYmFzZSByZWFsIGFkZHJlc3MgcmV0dXJuZWQgaXMgdW5kZWZpbmVkLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfQ1BVX1FJTkZPCQkweDE1Ci0KLS8qIGNwdV9tb25kb19zZW5kKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX01PTkRPX1NFTkQKLSAqIEFSRzAtMToJQ1BVIGxpc3QKLSAqIEFSRzI6CWRhdGEgcmVhbCBhZGRyZXNzCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUJBREFMSUdOCU1vbmRvIGRhdGEgaXMgbm90IDY0LWJ5dGUgYWxpZ25lZCBvciBDUFUgbGlzdAotICoJCQkJaXMgbm90IDItYnl0ZSBhbGlnbmVkLgotICoJCUVOT1JBRERSCUludmFsaWQgZGF0YSBtb25kbyBhZGRyZXNzLCBvciBpbnZhbGlkIGNwdSBsaXN0Ci0gKgkJCQlhZGRyZXNzLgotICoJCUVOT0NQVQkJSW52YWxpZCBjcHUgaW4gQ1BVIGxpc3QKLSAqCQlFV09VTERCTE9DSwlTb21lIG9yIGFsbCBvZiB0aGUgbGlzdGVkIENQVXMgZGlkIG5vdCByZWNlaXZlCi0gKgkJCQl0aGUgbW9uZG8KLSAqCQlFQ1BVRVJST1IJT25lIG9yIG1vcmUgb2YgdGhlIGxpc3RlZCBDUFVzIGFyZSBpbiBlcnJvcgotICoJCQkJc3RhdGUsIHVzZSBIVl9GQVNUX0NQVV9TVEFURSB0byBzZWUgd2hpY2ggb25lcwotICoJCUVJTlZBTAkJQ1BVIGxpc3QgaW5jbHVkZXMgY2FsbGVyJ3MgQ1BVIElECi0gKgotICogU2VuZCBhIG1vbmRvIGludGVycnVwdCB0byB0aGUgQ1BVcyBpbiB0aGUgZ2l2ZW4gQ1BVIGxpc3Qgd2l0aCB0aGUKLSAqIDY0LWJ5dGVzIGF0IHRoZSBnaXZlbiBkYXRhIHJlYWwgYWRkcmVzcy4gIFRoZSBkYXRhIG11c3QgYmUgNjQtYnl0ZQotICogYWxpZ25lZC4gIFRoZSBtb25kbyBkYXRhIHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZSBjcHVfbW9uZG8gcXVldWVzCi0gKiBvZiB0aGUgcmVjaXBpZW50IENQVXMuCi0gKgotICogSW4gYWxsIGNhc2VzLCBlcnJvciBvciBub3QsIHRoZSBDUFVzIGluIHRoZSBDUFUgbGlzdCB0byB3aGljaCB0aGUKLSAqIG1vbmRvIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgd2lsbCBiZSBpbmRpY2F0ZWQgYnkgaGF2aW5nCi0gKiB0aGVpciBlbnRyeSBpbiBDUFUgbGlzdCB1cGRhdGVkIHdpdGggdGhlIHZhbHVlIDB4ZmZmZi4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0NQVV9NT05ET19TRU5ECQkweDQyCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9jcHVfbW9uZG9fc2VuZCh1bnNpZ25lZCBsb25nIGNwdV9jb3VudCwgdW5zaWduZWQgbG9uZyBjcHVfbGlzdF9wYSwgdW5zaWduZWQgbG9uZyBtb25kb19ibG9ja19wYSk7Ci0jZW5kaWYKLQotLyogY3B1X215aWQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9DUFVfTVlJRAotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglDUFUgSUQKLSAqIEVSUk9SUzoJTm8gZXJyb3JzIGRlZmluZWQuCi0gKgotICogUmV0dXJuIHRoZSBoeXBlcnZpc29yIElEIGhhbmRsZSBmb3IgdGhlIGN1cnJlbnQgQ1BVLiAgVXNlIGJ5IGEKLSAqIHZpcnR1YWwgQ1BVIHRvIGRpc2NvdmVyIGl0J3Mgb3duIGlkZW50aXR5LgotICovCi0jZGVmaW5lIEhWX0ZBU1RfQ1BVX01ZSUQJCTB4MTYKLQotLyogY3B1X3N0YXRlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX1NUQVRFCi0gKiBBUkcwOglDUFUgSUQKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJc3RhdGUKLSAqIEVSUk9SUzoJRU5PQ1BVCQlJbnZhbGlkIENQVSBJRAotICoKLSAqIFJldHJpZXZlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBDUFUgd2l0aCB0aGUgZ2l2ZW4gQ1BVIElELgotICovCi0jZGVmaW5lIEhWX0ZBU1RfQ1BVX1NUQVRFCQkweDE3Ci0jZGVmaW5lICBIVl9DUFVfU1RBVEVfU1RPUFBFRAkJIDB4MDEKLSNkZWZpbmUgIEhWX0NQVV9TVEFURV9SVU5OSU5HCQkgMHgwMgotI2RlZmluZSAgSFZfQ1BVX1NUQVRFX0VSUk9SCQkgMHgwMwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIGxvbmcgc3VuNHZfY3B1X3N0YXRlKHVuc2lnbmVkIGxvbmcgY3B1aWQpOwotI2VuZGlmCi0KLS8qIGNwdV9zZXRfcnRiYSgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9TRVRfUlRCQQotICogQVJHMDoJUlRCQQotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglwcmV2aW91cyBSVEJBCi0gKiBFUlJPUlM6CUVOT1JBRERSCUludmFsaWQgUlRCQSByZWFsIGFkZHJlc3MKLSAqCQlFQkFEQUxJR04JUlRCQSBpcyBpbmNvcnJlY3RseSBhbGlnbmVkIGZvciBhIHRyYXAgdGFibGUKLSAqCi0gKiBTZXQgdGhlIHJlYWwgdHJhcCBiYXNlIGFkZHJlc3Mgb2YgdGhlIGxvY2FsIGNwdSB0byB0aGUgZ2l2ZW4gUlRCQS4KLSAqIFRoZSBzdXBwbGllZCBSVEJBIG11c3QgYmUgYWxpZ25lZCBvbiBhIDI1NiBieXRlIGJvdW5kYXJ5LiAgVXBvbgotICogc3VjY2VzcyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIFJUQkEgaXMgcmV0dXJuZWQgaW4gUkVUMS4KLSAqCi0gKiBOb3RlOiBUaGlzIHNlcnZpY2UgZG9lcyBub3QgYWZmZWN0ICV0YmEKLSAqLwotI2RlZmluZSBIVl9GQVNUX0NQVV9TRVRfUlRCQQkJMHgxOAotCi0vKiBjcHVfc2V0X3J0YmEoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9DUFVfR0VUX1JUQkEKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJcHJldmlvdXMgUlRCQQotICogRVJST1JTOglObyBwb3NzaWJsZSBlcnJvci4KLSAqCi0gKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIFJUQkEgaW4gUkVUMS4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0NQVV9HRVRfUlRCQQkJMHgxOQotCi0vKiBNTVUgc2VydmljZXMuCi0gKgotICogTGF5b3V0IG9mIGEgVFNCIGRlc2NyaXB0aW9uIGZvciBtbXVfdHNiX2N0eHssbm9ufTAoKSBjYWxscy4KLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXN0cnVjdCBodl90c2JfZGVzY3IgewotCXVuc2lnbmVkIHNob3J0CQlwZ3N6X2lkeDsKLQl1bnNpZ25lZCBzaG9ydAkJYXNzb2M7Ci0JdW5zaWduZWQgaW50CQludW1fdHRlczsJLyogaW4gVFRFcyAqLwotCXVuc2lnbmVkIGludAkJY3R4X2lkeDsKLQl1bnNpZ25lZCBpbnQJCXBnc3pfbWFzazsKLQl1bnNpZ25lZCBsb25nCQl0c2JfYmFzZTsKLQl1bnNpZ25lZCBsb25nCQlyZXN2OwotfTsKLSNlbmRpZgotI2RlZmluZSBIVl9UU0JfREVTQ1JfUEdTWl9JRFhfT0ZGU0VUCTB4MDAKLSNkZWZpbmUgSFZfVFNCX0RFU0NSX0FTU09DX09GRlNFVAkweDAyCi0jZGVmaW5lIEhWX1RTQl9ERVNDUl9OVU1fVFRFU19PRkZTRVQJMHgwNAotI2RlZmluZSBIVl9UU0JfREVTQ1JfQ1RYX0lEWF9PRkZTRVQJMHgwOAotI2RlZmluZSBIVl9UU0JfREVTQ1JfUEdTWl9NQVNLX09GRlNFVAkweDBjCi0jZGVmaW5lIEhWX1RTQl9ERVNDUl9UU0JfQkFTRV9PRkZTRVQJMHgxMAotI2RlZmluZSBIVl9UU0JfREVTQ1JfUkVTVl9PRkZTRVQJMHgxOAotCi0vKiBQYWdlIHNpemUgYml0bWFzay4gICovCi0jZGVmaW5lIEhWX1BHU1pfTUFTS184SwkJCSgxIDw8IDApCi0jZGVmaW5lIEhWX1BHU1pfTUFTS182NEsJCSgxIDw8IDEpCi0jZGVmaW5lIEhWX1BHU1pfTUFTS181MTJLCQkoMSA8PCAyKQotI2RlZmluZSBIVl9QR1NaX01BU0tfNE1CCQkoMSA8PCAzKQotI2RlZmluZSBIVl9QR1NaX01BU0tfMzJNQgkJKDEgPDwgNCkKLSNkZWZpbmUgSFZfUEdTWl9NQVNLXzI1Nk1CCQkoMSA8PCA1KQotI2RlZmluZSBIVl9QR1NaX01BU0tfMkdCCQkoMSA8PCA2KQotI2RlZmluZSBIVl9QR1NaX01BU0tfMTZHQgkJKDEgPDwgNykKLQotLyogUGFnZSBzaXplIGluZGV4LiAgVGhlIHZhbHVlIGdpdmVuIGluIHRoZSBUU0IgZGVzY3JpcHRvciBtdXN0IGNvcnJlc3BvbmQKLSAqIHRvIHRoZSBzbWFsbGVzdCBwYWdlIHNpemUgc3BlY2lmaWVkIGluIHRoZSBwZ3N6X21hc2sgcGFnZSBzaXplIGJpdG1hc2suCi0gKi8KLSNkZWZpbmUgSFZfUEdTWl9JRFhfOEsJCQkwCi0jZGVmaW5lIEhWX1BHU1pfSURYXzY0SwkJCTEKLSNkZWZpbmUgSFZfUEdTWl9JRFhfNTEySwkJMgotI2RlZmluZSBIVl9QR1NaX0lEWF80TUIJCQkzCi0jZGVmaW5lIEhWX1BHU1pfSURYXzMyTUIJCTQKLSNkZWZpbmUgSFZfUEdTWl9JRFhfMjU2TUIJCTUKLSNkZWZpbmUgSFZfUEdTWl9JRFhfMkdCCQkJNgotI2RlZmluZSBIVl9QR1NaX0lEWF8xNkdCCQk3Ci0KLS8qIE1NVSBmYXVsdCBzdGF0dXMgYXJlYS4KLSAqCi0gKiBNTVUgcmVsYXRlZCBmYXVsdHMgaGF2ZSB0aGVpciBzdGF0dXMgYW5kIGZhdWx0IGFkZHJlc3MgaW5mb3JtYXRpb24KLSAqIHBsYWNlZCBpbnRvIGEgbWVtb3J5IHJlZ2lvbiBtYWRlIGF2YWlsYWJsZSBieSBwcml2aWxlZ2VkIGNvZGUuICBFYWNoCi0gKiB2aXJ0dWFsIHByb2Nlc3NvciBtdXN0IG1ha2UgYSBtbXVfZmF1bHRfYXJlYV9jb25mKCkgY2FsbCB0byB0ZWxsIHRoZQotICogaHlwZXJ2aXNvciB3aGVyZSB0aGF0IHByb2Nlc3NvcidzIGZhdWx0IHN0YXR1cyBzaG91bGQgYmUgc3RvcmVkLgotICoKLSAqIFRoZSBmYXVsdCBzdGF0dXMgYmxvY2sgaXMgYSBtdWx0aXBsZSBvZiA2NC1ieXRlcyBhbmQgbXVzdCBiZSBhbGlnbmVkCi0gKiBvbiBhIDY0LWJ5dGUgYm91bmRhcnkuCi0gKi8KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1zdHJ1Y3QgaHZfZmF1bHRfc3RhdHVzIHsKLQl1bnNpZ25lZCBsb25nCQlpX2ZhdWx0X3R5cGU7Ci0JdW5zaWduZWQgbG9uZwkJaV9mYXVsdF9hZGRyOwotCXVuc2lnbmVkIGxvbmcJCWlfZmF1bHRfY3R4OwotCXVuc2lnbmVkIGxvbmcJCWlfcmVzZXJ2ZWRbNV07Ci0JdW5zaWduZWQgbG9uZwkJZF9mYXVsdF90eXBlOwotCXVuc2lnbmVkIGxvbmcJCWRfZmF1bHRfYWRkcjsKLQl1bnNpZ25lZCBsb25nCQlkX2ZhdWx0X2N0eDsKLQl1bnNpZ25lZCBsb25nCQlkX3Jlc2VydmVkWzVdOwotfTsKLSNlbmRpZgotI2RlZmluZSBIVl9GQVVMVF9JX1RZUEVfT0ZGU0VUCTB4MDAKLSNkZWZpbmUgSFZfRkFVTFRfSV9BRERSX09GRlNFVAkweDA4Ci0jZGVmaW5lIEhWX0ZBVUxUX0lfQ1RYX09GRlNFVAkweDEwCi0jZGVmaW5lIEhWX0ZBVUxUX0RfVFlQRV9PRkZTRVQJMHg0MAotI2RlZmluZSBIVl9GQVVMVF9EX0FERFJfT0ZGU0VUCTB4NDgKLSNkZWZpbmUgSFZfRkFVTFRfRF9DVFhfT0ZGU0VUCTB4NTAKLQotI2RlZmluZSBIVl9GQVVMVF9UWVBFX0ZBU1RfTUlTUwkxCi0jZGVmaW5lIEhWX0ZBVUxUX1RZUEVfRkFTVF9QUk9UCTIKLSNkZWZpbmUgSFZfRkFVTFRfVFlQRV9NTVVfTUlTUwkzCi0jZGVmaW5lIEhWX0ZBVUxUX1RZUEVfSU5WX1JBCTQKLSNkZWZpbmUgSFZfRkFVTFRfVFlQRV9QUklWX1ZJT0wJNQotI2RlZmluZSBIVl9GQVVMVF9UWVBFX1BST1RfVklPTAk2Ci0jZGVmaW5lIEhWX0ZBVUxUX1RZUEVfTkZPCTcKLSNkZWZpbmUgSFZfRkFVTFRfVFlQRV9ORk9fU0VGRgk4Ci0jZGVmaW5lIEhWX0ZBVUxUX1RZUEVfSU5WX1ZBCTkKLSNkZWZpbmUgSFZfRkFVTFRfVFlQRV9JTlZfQVNJCTEwCi0jZGVmaW5lIEhWX0ZBVUxUX1RZUEVfTkNfQVRPTUlDCTExCi0jZGVmaW5lIEhWX0ZBVUxUX1RZUEVfUFJJVl9BQ1QJMTIKLSNkZWZpbmUgSFZfRkFVTFRfVFlQRV9SRVNWMQkxMwotI2RlZmluZSBIVl9GQVVMVF9UWVBFX1VOQUxJR05FRAkxNAotI2RlZmluZSBIVl9GQVVMVF9UWVBFX0lOVl9QR1NaCTE1Ci0vKiBWYWx1ZXMgMTYgLS0+IC0yIGFyZSByZXNlcnZlZC4gICovCi0jZGVmaW5lIEhWX0ZBVUxUX1RZUEVfTVVMVElQTEUJLTEKLQotLyogRmxhZ3MgYXJndW1lbnQgZm9yIG1tdV97bWFwLHVubWFwfV9hZGRyKCksIG1tdV9kZW1hcF97cGFnZSxjb250ZXh0LGFsbH0oKSwKLSAqIGFuZCBtbXVfe21hcCx1bm1hcH1fcGVybV9hZGRyKCkuCi0gKi8KLSNkZWZpbmUgSFZfTU1VX0RNTVUJCQkweDAxCi0jZGVmaW5lIEhWX01NVV9JTU1VCQkJMHgwMgotI2RlZmluZSBIVl9NTVVfQUxMCQkJKEhWX01NVV9ETU1VIHwgSFZfTU1VX0lNTVUpCi0KLS8qIG1tdV9tYXBfYWRkcigpCi0gKiBUUkFQOglIVl9NTVVfTUFQX0FERFJfVFJBUAotICogQVJHMDoJdmlydHVhbCBhZGRyZXNzCi0gKiBBUkcxOgltbXUgY29udGV4dAotICogQVJHMjoJVFRFCi0gKiBBUkczOglmbGFncyAoSFZfTU1VX3tJTU1VLERNTVV9KQotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgdmlydHVhbCBhZGRyZXNzLCBtbXUgY29udGV4dCwgb3IgZmxhZ3MKLSAqCQlFQkFEUEdTWglJbnZhbGlkIHBhZ2Ugc2l6ZSB2YWx1ZQotICoJCUVOT1JBRERSCUludmFsaWQgcmVhbCBhZGRyZXNzIGluIFRURQotICoKLSAqIENyZWF0ZSBhIG5vbi1wZXJtYW5lbnQgbWFwcGluZyB1c2luZyB0aGUgZ2l2ZW4gVFRFLCB2aXJ0dWFsCi0gKiBhZGRyZXNzLCBhbmQgbW11IGNvbnRleHQuICBUaGUgZmxhZ3MgYXJndW1lbnQgZGV0ZXJtaW5lcyB3aGljaAotICogKGRhdGEsIG9yIGluc3RydWN0aW9uLCBvciBib3RoKSBUTEIgdGhlIG1hcHBpbmcgZ2V0cyBsb2FkZWQgaW50by4KLSAqCi0gKiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIHRoZSB2YWxpZCBiaXQgaXMgY2xlYXIgaW4gdGhlIFRURS4KLSAqCi0gKiBOb3RlOiBUaGlzIEFQSSBjYWxsIGlzIGZvciBwcml2aWxlZ2VkIGNvZGUgdG8gc3BlY2lmeSB0ZW1wb3JhcnkgdHJhbnNsYXRpb24KLSAqICAgICAgIG1hcHBpbmdzIHdpdGhvdXQgdGhlIG5lZWQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYSBUU0IuCi0gKi8KLQotLyogbW11X3VubWFwX2FkZHIoKQotICogVFJBUDoJSFZfTU1VX1VOTUFQX0FERFJfVFJBUAotICogQVJHMDoJdmlydHVhbCBhZGRyZXNzCi0gKiBBUkcxOgltbXUgY29udGV4dAotICogQVJHMjoJZmxhZ3MgKEhWX01NVV97SU1NVSxETU1VfSkKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHZpcnR1YWwgYWRkcmVzcywgbW11IGNvbnRleHQsIG9yIGZsYWdzCi0gKgotICogRGVtYXBzIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MgaW4gdGhlIGdpdmVuIG1tdSBjb250ZXh0IG9uIHRoaXMKLSAqIENQVS4gIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBkZW1hcCBwYWdlcyBtYXBwZWQKLSAqIHdpdGggbW11X21hcF9hZGRyLiAgVGhpcyBzZXJ2aWNlIGlzIGVxdWl2YWxlbnQgdG8gaW52b2tpbmcKLSAqIG1tdV9kZW1hcF9wYWdlKCkgd2l0aCBvbmx5IHRoZSBjdXJyZW50IENQVSBpbiB0aGUgQ1BVIGxpc3QuIFRoZQotICogZmxhZ3MgYXJndW1lbnQgZGV0ZXJtaW5lcyB3aGljaCAoZGF0YSwgb3IgaW5zdHJ1Y3Rpb24sIG9yIGJvdGgpIFRMQgotICogdGhlIG1hcHBpbmcgZ2V0cyB1bm1hcHBlZCBmcm9tLgotICoKLSAqIEF0dGVtcHRpbmcgdG8gcGVyZm9ybSBhbiB1bm1hcCBvcGVyYXRpb24gZm9yIGEgcHJldmlvdXNseSBkZWZpbmVkCi0gKiBwZXJtYW5lbnQgbWFwcGluZyB3aWxsIGhhdmUgdW5kZWZpbmVkIHJlc3VsdHMuCi0gKi8KLQotLyogbW11X3RzYl9jdHgwKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX1RTQl9DVFgwCi0gKiBBUkcwOgludW1iZXIgb2YgVFNCIGRlc2NyaXB0aW9ucwotICogQVJHMToJVFNCIGRlc2NyaXB0aW9ucyBwb2ludGVyCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRU5PUkFERFIJCUludmFsaWQgVFNCIGRlc2NyaXB0aW9ucyBwb2ludGVyIG9yCi0gKgkJCQkJVFNCIGJhc2Ugd2l0aGluIGEgZGVzY3JpcHRvcgotICoJCUVCQURBTElHTgkJVFNCIGRlc2NyaXB0aW9ucyBwb2ludGVyIGlzIG5vdCBhbGlnbmVkCi0gKgkJCQkJdG8gYW4gOC1ieXRlIGJvdW5kYXJ5LCBvciBUU0IgYmFzZQotICoJCQkJCXdpdGhpbiBhIGRlc2NyaXB0b3IgaXMgbm90IGFsaWduZWQgZm9yCi0gKgkJCQkJdGhlIGdpdmVuIFRTQiBzaXplCi0gKgkJRUJBRFBHU1oJCUludmFsaWQgcGFnZSBzaXplIGluIGEgVFNCIGRlc2NyaXB0b3IKLSAqCQlFQkFEVFNCCQkJSW52YWxpZCBhc3NvY2lhdGl2aXR5IG9yIHNpemUgaW4gYSBUU0IKLSAqCQkJCQlkZXNjcmlwdG9yCi0gKgkJRUlOVkFMCQkJSW52YWxpZCBudW1iZXIgb2YgVFNCIGRlc2NyaXB0aW9ucywgb3IKLSAqCQkJCQlpbnZhbGlkIGNvbnRleHQgaW5kZXggaW4gYSBUU0IKLSAqCQkJCQlkZXNjcmlwdG9yLCBvciBpbmRleCBwYWdlIHNpemUgbm90Ci0gKgkJCQkJZXF1YWwgdG8gc21hbGxlc3QgcGFnZSBzaXplIGluIHBhZ2UKLSAqCQkJCQlzaXplIGJpdG1hc2sgZmllbGQuCi0gKgotICogQ29uZmlndXJlcyB0aGUgVFNCcyBmb3IgdGhlIGN1cnJlbnQgQ1BVIGZvciB2aXJ0dWFsIGFkZHJlc3NlcyB3aXRoCi0gKiBjb250ZXh0IHplcm8uICBUaGUgVFNCIGRlc2NyaXB0aW9ucyBwb2ludGVyIGlzIGEgcG9pbnRlciB0byBhbgotICogYXJyYXkgb2YgdGhlIGdpdmVuIG51bWJlciBvZiBUU0IgZGVzY3JpcHRpb25zLgotICoKLSAqIE5vdGU6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBUU0JzIGF2YWlsYWJsZSB0byBhIHZpcnR1YWwgQ1BVIGlzIGdpdmVuIGJ5IHRoZQotICogICAgICAgbW11LW1heC0jdHNicyBwcm9wZXJ0eSBvZiB0aGUgY3B1J3MgY29ycmVzcG9uZGluZyAiY3B1IiBub2RlIGluIHRoZQotICogICAgICAgbWFjaGluZSBkZXNjcmlwdGlvbi4KLSAqLwotI2RlZmluZSBIVl9GQVNUX01NVV9UU0JfQ1RYMAkJMHgyMAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbW11X3RzYl9jdHgwKHVuc2lnbmVkIGxvbmcgbnVtX2Rlc2NyaXB0aW9ucywKLQkJCQkJdW5zaWduZWQgbG9uZyB0c2JfZGVzY19yYSk7Ci0jZW5kaWYKLQotLyogbW11X3RzYl9jdHhub24wKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX1RTQl9DVFhOT04wCi0gKiBBUkcwOgludW1iZXIgb2YgVFNCIGRlc2NyaXB0aW9ucwotICogQVJHMToJVFNCIGRlc2NyaXB0aW9ucyBwb2ludGVyCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJU2FtZSBhcyBmb3IgbW11X3RzYl9jdHgwKCkgYWJvdmUuCi0gKgotICogQ29uZmlndXJlcyB0aGUgVFNCcyBmb3IgdGhlIGN1cnJlbnQgQ1BVIGZvciB2aXJ0dWFsIGFkZHJlc3NlcyB3aXRoCi0gKiBub24temVybyBjb250ZXh0cy4gIFRoZSBUU0IgZGVzY3JpcHRpb25zIHBvaW50ZXIgaXMgYSBwb2ludGVyIHRvIGFuCi0gKiBhcnJheSBvZiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbnMuCi0gKgotICogTm90ZTogQSBtYXhpbXVtIG9mIDE2IFRTQnMgbWF5IGJlIHNwZWNpZmllZCBpbiB0aGUgVFNCIGRlc2NyaXB0aW9uIGxpc3QuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9NTVVfVFNCX0NUWE5PTjAJCTB4MjEKLQotLyogbW11X2RlbWFwX3BhZ2UoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfREVNQVBfUEFHRQotICogQVJHMDoJcmVzZXJ2ZWQsIG11c3QgYmUgemVybwotICogQVJHMToJcmVzZXJ2ZWQsIG11c3QgYmUgemVybwotICogQVJHMjoJdmlydHVhbCBhZGRyZXNzCi0gKiBBUkczOgltbXUgY29udGV4dAotICogQVJHNDoJZmxhZ3MgKEhWX01NVV97SU1NVSxETU1VfSkKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCQlJbnZhbGlkIHZpcnV0YWwgYWRkcmVzcywgY29udGV4dCwgb3IKLSAqCQkJCQlmbGFncyB2YWx1ZQotICoJCUVOT1RTVVBQT1JURUQJCUFSRzAgb3IgQVJHMSBpcyBub24temVybwotICoKLSAqIERlbWFwcyBhbnkgcGFnZSBtYXBwaW5nIG9mIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MgaW4gdGhlIGdpdmVuCi0gKiBtbXUgY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgdmlydHVhbCBDUFUuICBBbnkgdmlydHVhbGx5IHRhZ2dlZAotICogY2FjaGVzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGtlcHQgY29uc2lzdGVudC4gIFRoZSBmbGFncyBhcmd1bWVudAotICogZGV0ZXJtaW5lcyB3aGljaCBUTEIgKGluc3RydWN0aW9uLCBvciBkYXRhLCBvciBib3RoKSBwYXJ0aWNpcGF0ZSBpbgotICogdGhlIG9wZXJhdGlvbi4KLSAqCi0gKiBBUkcwIGFuZCBBUkcxIGFyZSBib3RoIHJlc2VydmVkIGFuZCBtdXN0IGJlIHNldCB0byB6ZXJvLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTU1VX0RFTUFQX1BBR0UJCTB4MjIKLQotLyogbW11X2RlbWFwX2N0eCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9ERU1BUF9DVFgKLSAqIEFSRzA6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KLSAqIEFSRzE6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KLSAqIEFSRzI6CW1tdSBjb250ZXh0Ci0gKiBBUkczOglmbGFncyAoSFZfTU1VX3tJTU1VLERNTVV9KQotICogUkVUMDoJc3RhdHVzCi0gKiBFUlJPUlM6CUVJTlZBTAkJCUludmFsaWQgY29udGV4dCBvciBmbGFncyB2YWx1ZQotICoJCUVOT1RTVVBQT1JURUQJCUFSRzAgb3IgQVJHMSBpcyBub24temVybwotICoKLSAqIERlbWFwcyBhbGwgbm9uLXBlcm1hbmVudCB2aXJ0dWFsIHBhZ2UgbWFwcGluZ3MgcHJldmlvdXNseSBzcGVjaWZpZWQKLSAqIGZvciB0aGUgZ2l2ZW4gY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgdmlydHVhbCBDUFUuICBBbnkgdmlydHVhbAotICogdGFnZ2VkIGNhY2hlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBrZXB0IGNvbnNpc3RlbnQuICBUaGUgZmxhZ3MKLSAqIGFyZ3VtZW50IGRldGVybWluZXMgd2hpY2ggVExCIChpbnN0cnVjdGlvbiwgb3IgZGF0YSwgb3IgYm90aCkKLSAqIHBhcnRpY2lwYXRlIGluIHRoZSBvcGVyYXRpb24uCi0gKgotICogQVJHMCBhbmQgQVJHMSBhcmUgYm90aCByZXNlcnZlZCBhbmQgbXVzdCBiZSBzZXQgdG8gemVyby4KLSAqLwotI2RlZmluZSBIVl9GQVNUX01NVV9ERU1BUF9DVFgJCTB4MjMKLQotLyogbW11X2RlbWFwX2FsbCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9ERU1BUF9BTEwKLSAqIEFSRzA6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KLSAqIEFSRzE6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KLSAqIEFSRzI6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCBmbGFncyB2YWx1ZQotICoJCUVOT1RTVVBQT1JURUQJCUFSRzAgb3IgQVJHMSBpcyBub24temVybwotICoKLSAqIERlbWFwcyBhbGwgbm9uLXBlcm1hbmVudCB2aXJ0dWFsIHBhZ2UgbWFwcGluZ3MgcHJldmlvdXNseSBzcGVjaWZpZWQKLSAqIGZvciB0aGUgY3VycmVudCB2aXJ0dWFsIENQVS4gIEFueSB2aXJ0dWFsIHRhZ2dlZCBjYWNoZXMgYXJlCi0gKiBndWFyYW50ZWVkIHRvIGJlIGtlcHQgY29uc2lzdGVudC4gIFRoZSBmbGFncyBhcmd1bWVudCBkZXRlcm1pbmVzCi0gKiB3aGljaCBUTEIgKGluc3RydWN0aW9uLCBvciBkYXRhLCBvciBib3RoKSBwYXJ0aWNpcGF0ZSBpbiB0aGUKLSAqIG9wZXJhdGlvbi4KLSAqCi0gKiBBUkcwIGFuZCBBUkcxIGFyZSBib3RoIHJlc2VydmVkIGFuZCBtdXN0IGJlIHNldCB0byB6ZXJvLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTU1VX0RFTUFQX0FMTAkJMHgyNAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgc3VuNHZfbW11X2RlbWFwX2FsbCh2b2lkKTsKLSNlbmRpZgotCi0vKiBtbXVfbWFwX3Blcm1fYWRkcigpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9NQVBfUEVSTV9BRERSCi0gKiBBUkcwOgl2aXJ0dWFsIGFkZHJlc3MKLSAqIEFSRzE6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KLSAqIEFSRzI6CVRURQotICogQVJHMzoJZmxhZ3MgKEhWX01NVV97SU1NVSxETU1VfSkKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCQlJbnZhbGlkIHZpcnV0YWwgYWRkcmVzcyBvciBmbGFncyB2YWx1ZQotICoJCUVCQURQR1NaCQlJbnZhbGlkIHBhZ2Ugc2l6ZSB2YWx1ZQotICoJCUVOT1JBRERSCQlJbnZhbGlkIHJlYWwgYWRkcmVzcyBpbiBUVEUKLSAqCQlFVE9PTUFOWQkJVG9vIG1hbnkgbWFwcGluZ3MgKG1heCBvZiA4IHJlYWNoZWQpCi0gKgotICogQ3JlYXRlIGEgcGVybWFuZW50IG1hcHBpbmcgdXNpbmcgdGhlIGdpdmVuIFRURSBhbmQgdmlydHVhbCBhZGRyZXNzCi0gKiBmb3IgY29udGV4dCAwIG9uIHRoZSBjYWxsaW5nIHZpcnR1YWwgQ1BVLiAgQSBtYXhpbXVtIG9mIDggc3VjaAotICogcGVybWFuZW50IG1hcHBpbmdzIG1heSBiZSBzcGVjaWZpZWQgYnkgcHJpdmlsZWdlZCBjb2RlLiAgTWFwcGluZ3MKLSAqIG1heSBiZSByZW1vdmVkIHdpdGggbW11X3VubWFwX3Blcm1fYWRkcigpLgotICoKLSAqIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgYSBUVEUgd2l0aCB0aGUgdmFsaWQgYml0IGNsZWFyIGlzIGdpdmVuLgotICoKLSAqIE5vdGU6IFRoaXMgY2FsbCBpcyB1c2VkIHRvIHNwZWNpZnkgYWRkcmVzcyBzcGFjZSBtYXBwaW5ncyBmb3Igd2hpY2gKLSAqICAgICAgIHByaXZpbGVnZWQgY29kZSBkb2VzIG5vdCBleHBlY3QgdG8gcmVjZWl2ZSBtaXNzZXMuICBGb3IgZXhhbXBsZSwKLSAqICAgICAgIHRoaXMgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIG1hcCBrZXJuZWwgbnVjbGV1cyBjb2RlIGFuZCBkYXRhLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTU1VX01BUF9QRVJNX0FERFIJMHgyNQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbW11X21hcF9wZXJtX2FkZHIodW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIHNldF90b196ZXJvLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdHRlLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotI2VuZGlmCi0KLS8qIG1tdV9mYXVsdF9hcmVhX2NvbmYoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfRkFVTFRfQVJFQV9DT05GCi0gKiBBUkcwOglyZWFsIGFkZHJlc3MKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJcHJldmlvdXMgbW11IGZhdWx0IGFyZWEgcmVhbCBhZGRyZXNzCi0gKiBFUlJPUlM6CUVOT1JBRERSCQlJbnZhbGlkIHJlYWwgYWRkcmVzcwotICoJCUVCQURBTElHTgkJSW52YWxpZCBhbGlnbm1lbnQgZm9yIGZhdWx0IGFyZWEKLSAqCi0gKiBDb25maWd1cmUgdGhlIE1NVSBmYXVsdCBzdGF0dXMgYXJlYSBmb3IgdGhlIGNhbGxpbmcgQ1BVLiAgQSA2NC1ieXRlCi0gKiBhbGlnbmVkIHJlYWwgYWRkcmVzcyBzcGVjaWZpZXMgd2hlcmUgTU1VIGZhdWx0IHN0YXR1cyBpbmZvcm1hdGlvbgotICogaXMgcGxhY2VkLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcHJldmlvdXNseSBzcGVjaWZpZWQgYXJlYSwgb3IgMAotICogZm9yIHRoZSBmaXJzdCBpbnZvY2F0aW9uLiAgU3BlY2lmeWluZyBhIGZhdWx0IGFyZWEgYXQgcmVhbCBhZGRyZXNzCi0gKiAwIGlzIG5vdCBhbGxvd2VkLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTU1VX0ZBVUxUX0FSRUFfQ09ORgkweDI2Ci0KLS8qIG1tdV9lbmFibGUoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfRU5BQkxFCi0gKiBBUkcwOgllbmFibGUgZmxhZwotICogQVJHMToJcmV0dXJuIHRhcmdldCBhZGRyZXNzCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRU5PUkFERFIJCUludmFsaWQgcmVhbCBhZGRyZXNzIHdoZW4gZGlzYWJsaW5nCi0gKgkJCQkJdHJhbnNsYXRpb24uCi0gKgkJRUJBREFMSUdOCQlUaGUgcmV0dXJuIHRhcmdldCBhZGRyZXNzIGlzIG5vdAotICoJCQkJCWFsaWduZWQgdG8gYW4gaW5zdHJ1Y3Rpb24uCi0gKgkJRUlOVkFMCQkJVGhlIGVuYWJsZSBmbGFnIHJlcXVlc3QgdGhlIGN1cnJlbnQKLSAqCQkJCQlvcGVyYXRpbmcgbW9kZSAoZS5nLiBkaXNhYmxlIGlmIGFscmVhZHkKLSAqCQkJCQlkaXNhYmxlZCkKLSAqCi0gKiBFbmFibGUgb3IgZGlzYWJsZSB2aXJ0dWFsIGFkZHJlc3MgdHJhbnNsYXRpb24gZm9yIHRoZSBjYWxsaW5nIENQVQotICogd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZG9tYWluLiAgSWYgdGhlIGVuYWJsZSBmbGFnIGlzIHplcm8sCi0gKiB0cmFuc2xhdGlvbiBpcyBkaXNhYmxlZCwgYW55IG5vbi16ZXJvIHZhbHVlIHdpbGwgZW5hYmxlCi0gKiB0cmFuc2xhdGlvbi4KLSAqCi0gKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgdGhlIG5ld2x5IHNlbGVjdGVkIHRyYW5zbGF0aW9uIG1vZGUKLSAqIHdpbGwgYmUgYWN0aXZlLiAgSWYgdGhlIG1tdSBpcyBiZWluZyBlbmFibGVkLCB0aGVuIHRoZSByZXR1cm4KLSAqIHRhcmdldCBhZGRyZXNzIGlzIGEgdmlydHVhbCBhZGRyZXNzIGVsc2UgaXQgaXMgYSByZWFsIGFkZHJlc3MuCi0gKgotICogVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIGNvbnRyb2wgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgZ2l2ZW4KLSAqIHJldHVybiB0YXJnZXQgYWRkcmVzcyAoaWUuIHRoZSBjcHUgd2lsbCBqdW1wIHRvIHRoYXQgYWRkcmVzcykuICBPbgotICogZmFpbHVyZSwgdGhlIHByZXZpb3VzIG1tdSBtb2RlIHJlbWFpbnMgYW5kIHRoZSB0cmFwIHNpbXBseSByZXR1cm5zCi0gKiBhcyBub3JtYWwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZSBpbiBSRVQwLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTU1VX0VOQUJMRQkJMHgyNwotCi0vKiBtbXVfdW5tYXBfcGVybV9hZGRyKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX1VOTUFQX1BFUk1fQUREUgotICogQVJHMDoJdmlydHVhbCBhZGRyZXNzCi0gKiBBUkcxOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCi0gKiBBUkcyOglmbGFncyAoSFZfTU1VX3tJTU1VLERNTVV9KQotICogUkVUMDoJc3RhdHVzCi0gKiBFUlJPUlM6CUVJTlZBTAkJCUludmFsaWQgdmlydXRhbCBhZGRyZXNzIG9yIGZsYWdzIHZhbHVlCi0gKgkJRU5PTUFQCQkJU3BlY2lmaWVkIG1hcHBpbmcgd2FzIG5vdCBmb3VuZAotICoKLSAqIERlbWFwcyBhbnkgcGVybWFuZW50IHBhZ2UgbWFwcGluZyAoZXN0YWJsaXNoZWQgdmlhCi0gKiBtbXVfbWFwX3Blcm1fYWRkcigpKSBhdCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIGZvciBjb250ZXh0IDAgb24KLSAqIHRoZSBjdXJyZW50IHZpcnR1YWwgQ1BVLiAgQW55IHZpcnR1YWwgdGFnZ2VkIGNhY2hlcyBhcmUgZ3VhcmFudGVlZAotICogdG8gYmUga2VwdCBjb25zaXN0ZW50LgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTU1VX1VOTUFQX1BFUk1fQUREUgkweDI4Ci0KLS8qIG1tdV90c2JfY3R4MF9pbmZvKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX1RTQl9DVFgwX0lORk8KLSAqIEFSRzA6CW1heCBUU0JzCi0gKiBBUkcxOglidWZmZXIgcG9pbnRlcgotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgludW1iZXIgb2YgVFNCcwotICogRVJST1JTOglFSU5WQUwJCQlTdXBwbGllZCBidWZmZXIgaXMgdG9vIHNtYWxsCi0gKgkJRUJBREFMSUdOCQlUaGUgYnVmZmVyIHBvaW50ZXIgaXMgYmFkbHkgYWxpZ25lZAotICoJCUVOT1JBRERSCQlJbnZhbGlkIHJlYWwgYWRkcmVzcyBmb3IgYnVmZmVyIHBvaW50ZXIKLSAqCi0gKiBSZXR1cm4gdGhlIFRTQiBjb25maWd1cmF0aW9uIGFzIHByZXZpb3VzIGRlZmluZWQgYnkgbW11X3RzYl9jdHgwKCkKLSAqIGludG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4gIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgaXMgZ2l2ZW4gaW4gQVJHMQotICogaW4gdGVybXMgb2YgdGhlIG51bWJlciBvZiBUU0IgZGVzY3JpcHRpb24gZW50cmllcy4KLSAqCi0gKiBVcG9uIHJldHVybiwgUkVUMSBhbHdheXMgY29udGFpbnMgdGhlIG51bWJlciBvZiBUU0IgZGVzY3JpcHRpb25zCi0gKiBwcmV2aW91c2x5IGNvbmZpZ3VyZWQuICBJZiB6ZXJvIFRTQnMgd2VyZSBjb25maWd1cmVkLCBFT0sgaXMKLSAqIHJldHVybmVkIHdpdGggUkVUMSBjb250YWluaW5nIDAuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9NTVVfVFNCX0NUWDBfSU5GTwkweDI5Ci0KLS8qIG1tdV90c2JfY3R4bm9uMF9pbmZvKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX1RTQl9DVFhOT04wX0lORk8KLSAqIEFSRzA6CW1heCBUU0JzCi0gKiBBUkcxOglidWZmZXIgcG9pbnRlcgotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgludW1iZXIgb2YgVFNCcwotICogRVJST1JTOglFSU5WQUwJCQlTdXBwbGllZCBidWZmZXIgaXMgdG9vIHNtYWxsCi0gKgkJRUJBREFMSUdOCQlUaGUgYnVmZmVyIHBvaW50ZXIgaXMgYmFkbHkgYWxpZ25lZAotICoJCUVOT1JBRERSCQlJbnZhbGlkIHJlYWwgYWRkcmVzcyBmb3IgYnVmZmVyIHBvaW50ZXIKLSAqCi0gKiBSZXR1cm4gdGhlIFRTQiBjb25maWd1cmF0aW9uIGFzIHByZXZpb3VzIGRlZmluZWQgYnkKLSAqIG1tdV90c2JfY3R4bm9uMCgpIGludG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4gIFRoZSBzaXplIG9mIHRoZSBidWZmZXIKLSAqIGlzIGdpdmVuIGluIEFSRzEgaW4gdGVybXMgb2YgdGhlIG51bWJlciBvZiBUU0IgZGVzY3JpcHRpb24gZW50cmllcy4KLSAqCi0gKiBVcG9uIHJldHVybiwgUkVUMSBhbHdheXMgY29udGFpbnMgdGhlIG51bWJlciBvZiBUU0IgZGVzY3JpcHRpb25zCi0gKiBwcmV2aW91c2x5IGNvbmZpZ3VyZWQuICBJZiB6ZXJvIFRTQnMgd2VyZSBjb25maWd1cmVkLCBFT0sgaXMKLSAqIHJldHVybmVkIHdpdGggUkVUMSBjb250YWluaW5nIDAuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9NTVVfVFNCX0NUWE5PTjBfSU5GTwkweDJhCi0KLS8qIG1tdV9mYXVsdF9hcmVhX2luZm8oKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfRkFVTFRfQVJFQV9JTkZPCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWZhdWx0IGFyZWEgcmVhbCBhZGRyZXNzCi0gKiBFUlJPUlM6CU5vIGVycm9ycyBkZWZpbmVkLgotICoKLSAqIFJldHVybiB0aGUgY3VycmVudGx5IGRlZmluZWQgTU1VIGZhdWx0IHN0YXR1cyBhcmVhIGZvciB0aGUgY3VycmVudAotICogQ1BVLiAgVGhlIHJlYWwgYWRkcmVzcyBvZiB0aGUgZmF1bHQgc3RhdHVzIGFyZWEgaXMgcmV0dXJuZWQgaW4KLSAqIFJFVDEsIG9yIDAgaXMgcmV0dXJuZWQgaW4gUkVUMSBpZiBubyBmYXVsdCBzdGF0dXMgYXJlYSBpcyBkZWZpbmVkLgotICoKLSAqIE5vdGU6IG1tdV9mYXVsdF9hcmVhX2NvbmYoKSBtYXkgYmUgY2FsbGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSAoUkVUMSkKLSAqICAgICAgIGZyb20gdGhpcyBzZXJ2aWNlIGlmIHRoZXJlIGlzIGEgbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBmYXVsdAotICoJIGFyZWEgZm9yIGEgY3B1LgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTU1VX0ZBVUxUX0FSRUFfSU5GTwkweDJiCi0KLS8qIENhY2hlIGFuZCBNZW1vcnkgc2VydmljZXMuICovCi0KLS8qIG1lbV9zY3J1YigpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX01FTV9TQ1JVQgotICogQVJHMDoJcmVhbCBhZGRyZXNzCi0gKiBBUkcxOglsZW5ndGgKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJbGVuZ3RoIHNjcnViYmVkCi0gKiBFUlJPUlM6CUVOT1JBRERSCUludmFsaWQgcmVhbCBhZGRyZXNzCi0gKgkJRUJBREFMSUdOCVN0YXJ0IGFkZHJlc3Mgb3IgbGVuZ3RoIGFyZSBub3QgY29ycmVjdGx5Ci0gKgkJCQlhbGlnbmVkCi0gKgkJRUlOVkFMCQlMZW5ndGggaXMgemVybwotICoKLSAqIFplcm8gdGhlIG1lbW9yeSBjb250ZW50cyBpbiB0aGUgcmFuZ2UgcmVhbCBhZGRyZXNzIHRvIHJlYWwgYWRkcmVzcwotICogcGx1cyBsZW5ndGggbWludXMgMS4gIEFsc28sIHZhbGlkIEVDQyB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhhdAotICogbWVtb3J5IGFkZHJlc3MgcmFuZ2UuICBTY3J1YmJpbmcgaXMgc3RhcnRlZCBhdCB0aGUgZ2l2ZW4gcmVhbAotICogYWRkcmVzcywgYnV0IG1heSBub3Qgc2NydWIgdGhlIGVudGlyZSBnaXZlbiBsZW5ndGguICBUaGUgYWN0dWFsCi0gKiBsZW5ndGggc2NydWJiZWQgd2lsbCBiZSByZXR1cm5lZCBpbiBSRVQxLgotICoKLSAqIFRoZSByZWFsIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgb24gYW4gOEsgYm91bmRhcnksIG9yCi0gKiBjb250YWluIHRoZSBzdGFydCBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbSBhIHN1bjR2IGVycm9yIHJlcG9ydC4KLSAqCi0gKiBOb3RlOiBUaGVyZSBhcmUgdHdvIHVzZXMgZm9yIHRoaXMgZnVuY3Rpb24uICBUaGUgZmlyc3QgdXNlIGlzIHRvIGJsb2NrIGNsZWFyCi0gKiAgICAgICBhbmQgaW5pdGlhbGl6ZSBtZW1vcnkgYW5kIHRoZSBzZWNvbmQgaXMgdG8gc2NydWIgYW4gdSBuY29ycmVjdGFibGUKLSAqICAgICAgIGVycm9yIHJlcG9ydGVkIHZpYSBhIHJlc3VtYWJsZSBvciBub24tcmVzdW1hYmxlIHRyYXAuICBUaGUgc2Vjb25kCi0gKiAgICAgICB1c2UgcmVxdWlyZXMgdGhlIGFyZ3VtZW50cyB0byBiZSBlcXVhbCB0byB0aGUgcmVhbCBhZGRyZXNzIGFuZCBsZW5ndGgKLSAqICAgICAgIHByb3ZpZGVkIGluIGEgc3VuNHYgbWVtb3J5IGVycm9yIHJlcG9ydC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX01FTV9TQ1JVQgkJMHgzMQotCi0vKiBtZW1fc3luYygpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX01FTV9TWU5DCi0gKiBBUkcwOglyZWFsIGFkZHJlc3MKLSAqIEFSRzE6CWxlbmd0aAotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglsZW5ndGggc3luY2VkCi0gKiBFUlJPUlM6CUVOT1JBRERSCUludmFsaWQgcmVhbCBhZGRyZXNzCi0gKgkJRUJBREFMSUdOCVN0YXJ0IGFkZHJlc3Mgb3IgbGVuZ3RoIGFyZSBub3QgY29ycmVjdGx5Ci0gKgkJCQlhbGlnbmVkCi0gKgkJRUlOVkFMCQlMZW5ndGggaXMgemVybwotICoKLSAqIEZvcmNlIHRoZSBuZXh0IGFjY2VzcyB3aXRoaW4gdGhlIHJlYWwgYWRkcmVzcyB0byByZWFsIGFkZHJlc3MgcGx1cwotICogbGVuZ3RoIG1pbnVzIDEgdG8gYmUgZmV0Y2hlcyBmcm9tIG1haW4gc3lzdGVtIG1lbW9yeS4gIExlc3MgdGhhbgotICogdGhlIGdpdmVuIGxlbmd0aCBtYXkgYmUgc3luY2VkLCB0aGUgYWN0dWFsIGFtb3VudCBzeW5jZWQgaXMKLSAqIHJldHVybmVkIGluIFJFVDEuICBUaGUgcmVhbCBhZGRyZXNzIGFuZCBsZW5ndGggbXVzdCBiZSBhbGlnbmVkIG9uCi0gKiBhbiA4SyBib3VuZGFyeS4KLSAqLwotI2RlZmluZSBIVl9GQVNUX01FTV9TWU5DCQkweDMyCi0KLS8qIFRpbWUgb2YgZGF5IHNlcnZpY2VzLgotICoKLSAqIFRoZSBoeXBlcnZpc29yIG1haW50YWlucyB0aGUgdGltZSBvZiBkYXkgb24gYSBwZXItZG9tYWluIGJhc2lzLgotICogQ2hhbmdpbmcgdGhlIHRpbWUgb2YgZGF5IGluIG9uZSBkb21haW4gZG9lcyBub3QgYWZmZWN0IHRoZSB0aW1lIG9mCi0gKiBkYXkgb24gYW55IG90aGVyIGRvbWFpbi4KLSAqCi0gKiBUaW1lIGlzIGRlc2NyaWJlZCBieSBhIHNpbmdsZSB1bnNpZ25lZCA2NC1iaXQgd29yZCB3aGljaCBpcyB0aGUKLSAqIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIEVwb2NoICgwMDowMDowMCBVVEMsIEphbnVhcnkgMSwKLSAqIDE5NzApLgotICovCi0KLS8qIHRvZF9nZXQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9UT0RfR0VUCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CVRPRAotICogRVJST1JTOglFV09VTERCTE9DSwlUT0QgcmVzb3VyY2UgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUKLSAqCQlFTk9UU1VQUE9SVEVECUlmIFRPRCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0KLSAqCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiBkYXkuICBNYXkgYmxvY2sgaWYgVE9EIGFjY2VzcyBpcwotICogdGVtcG9yYXJpbHkgbm90IHBvc3NpYmxlLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfVE9EX0dFVAkJCTB4NTAKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3RvZF9nZXQodW5zaWduZWQgbG9uZyAqdGltZSk7Ci0jZW5kaWYKLQotLyogdG9kX3NldCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1RPRF9TRVQKLSAqIEFSRzA6CVRPRAotICogUkVUMDoJc3RhdHVzCi0gKiBFUlJPUlM6CUVXT1VMREJMT0NLCVRPRCByZXNvdXJjZSBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQotICoJCUVOT1RTVVBQT1JURUQJSWYgVE9EIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybQotICoKLSAqIFRoZSBjdXJyZW50IHRpbWUgb2YgZGF5IGlzIHNldCB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIEFSRzAuICBNYXkKLSAqIGJsb2NrIGlmIFRPRCBhY2Nlc3MgaXMgdGVtcG9yYXJpbHkgbm90IHBvc3NpYmxlLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfVE9EX1NFVAkJCTB4NTEKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3RvZF9zZXQodW5zaWduZWQgbG9uZyB0aW1lKTsKLSNlbmRpZgotCi0vKiBDb25zb2xlIHNlcnZpY2VzICovCi0KLS8qIGNvbl9nZXRjaGFyKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfQ09OU19HRVRDSEFSCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWNoYXJhY3RlcgotICogRVJST1JTOglFV09VTERCTE9DSwlObyBjaGFyYWN0ZXIgYXZhaWxhYmxlLgotICoKLSAqIFJldHVybnMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29uc29sZSBkZXZpY2UuICBJZiBubyBjaGFyYWN0ZXIgaXMKLSAqIGF2YWlsYWJsZSB0aGVuIGFuIEVXT1VMREJMT0NLIGVycm9yIGlzIHJldHVybmVkLiAgSWYgYSBjaGFyYWN0ZXIgaXMKLSAqIGF2YWlsYWJsZSwgdGhlbiB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIEVPSyBhbmQgdGhlIGNoYXJhY3RlciB2YWx1ZQotICogaXMgaW4gUkVUMS4KLSAqCi0gKiBBIHZpcnR1YWwgQlJFQUsgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIDY0LWJpdCB2YWx1ZSAtMS4KLSAqCi0gKiBBIHZpcnR1YWwgSFVQIHNpZ25hbCBpcyByZXByZXNlbnRlZCBieSB0aGUgNjQtYml0IHZhbHVlIC0yLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfQ09OU19HRVRDSEFSCQkweDYwCi0KLS8qIGNvbl9wdXRjaGFyKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfQ09OU19QVVRDSEFSCi0gKiBBUkcwOgljaGFyYWN0ZXIKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCUlsbGVnYWwgY2hhcmFjdGVyCi0gKgkJRVdPVUxEQkxPQ0sJT3V0cHV0IGJ1ZmZlciBjdXJyZW50bHkgZnVsbCwgd291bGQgYmxvY2sKLSAqCi0gKiBTZW5kIGEgY2hhcmFjdGVyIHRvIHRoZSBjb25zb2xlIGRldmljZS4gIE9ubHkgY2hhcmFjdGVyIHZhbHVlcwotICogYmV0d2VlbiAwIGFuZCAyNTUgbWF5IGJlIHVzZWQuICBWYWx1ZXMgb3V0c2lkZSB0aGlzIHJhbmdlIGFyZQotICogaW52YWxpZCBleGNlcHQgZm9yIHRoZSA2NC1iaXQgdmFsdWUgLTEgd2hpY2ggaXMgdXNlZCB0byBzZW5kIGEKLSAqIHZpcnR1YWwgQlJFQUsuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9DT05TX1BVVENIQVIJCTB4NjEKLQotLyogY29uX3JlYWQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9DT05TX1JFQUQKLSAqIEFSRzA6CWJ1ZmZlciByZWFsIGFkZHJlc3MKLSAqIEFSRzE6CWJ1ZmZlciBzaXplIGluIGJ5dGVzCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWJ5dGVzIHJlYWQgb3IgQlJFQUsgb3IgSFVQCi0gKiBFUlJPUlM6CUVXT1VMREJMT0NLCU5vIGNoYXJhY3RlciBhdmFpbGFibGUuCi0gKgotICogUmVhZHMgY2hhcmFjdGVycyBpbnRvIGEgYnVmZmVyIGZyb20gdGhlIGNvbnNvbGUgZGV2aWNlLiAgSWYgbm8KLSAqIGNoYXJhY3RlciBpcyBhdmFpbGFibGUgdGhlbiBhbiBFV09VTERCTE9DSyBlcnJvciBpcyByZXR1cm5lZC4KLSAqIElmIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZSwgdGhlbiB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIEVPSwotICogYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpbnRvIHRoZSBnaXZlbiBidWZmZXIgaXMgcHJvdmlkZWQKLSAqIGluIFJFVDEuCi0gKgotICogQSB2aXJ0dWFsIEJSRUFLIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSA2NC1iaXQgUkVUMSB2YWx1ZSAtMS4KLSAqCi0gKiBBIHZpcnR1YWwgSFVQIHNpZ25hbCBpcyByZXByZXNlbnRlZCBieSB0aGUgNjQtYml0IFJFVDEgdmFsdWUgLTIuCi0gKgotICogSWYgQlJFQUsgb3IgSFVQIGFyZSBpbmRpY2F0ZWQsIG5vIGJ5dGVzIHdlcmUgcmVhZCBpbnRvIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0NPTlNfUkVBRAkJMHg2MgotCi0vKiBjb25fd3JpdGUoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9DT05TX1dSSVRFCi0gKiBBUkcwOglidWZmZXIgcmVhbCBhZGRyZXNzCi0gKiBBUkcxOglidWZmZXIgc2l6ZSBpbiBieXRlcwotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglieXRlcyB3cml0dGVuCi0gKiBFUlJPUlM6CUVXT1VMREJMT0NLCU91dHB1dCBidWZmZXIgY3VycmVudGx5IGZ1bGwsIHdvdWxkIGJsb2NrCi0gKgotICogU2VuZCBhIGNoYXJhY3RlcnMgaW4gYnVmZmVyIHRvIHRoZSBjb25zb2xlIGRldmljZS4gIEJyZWFrcyBtdXN0IGJlCi0gKiBzZW50IHVzaW5nIGNvbl9wdXRjaGFyKCkuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9DT05TX1dSSVRFCQkweDYzCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gbG9uZyBzdW40dl9jb25fZ2V0Y2hhcihsb25nICpzdGF0dXMpOwotZXh0ZXJuIGxvbmcgc3VuNHZfY29uX3B1dGNoYXIobG9uZyBjKTsKLWV4dGVybiBsb25nIHN1bjR2X2Nvbl9yZWFkKHVuc2lnbmVkIGxvbmcgYnVmZmVyLAotCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgdW5zaWduZWQgbG9uZyAqYnl0ZXNfcmVhZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9jb25fd3JpdGUodW5zaWduZWQgbG9uZyBidWZmZXIsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nICpieXRlc193cml0dGVuKTsKLSNlbmRpZgotCi0vKiBtYWNoX3NldF9zb2Z0X3N0YXRlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9TRVRfU09GVF9TVEFURQotICogQVJHMDoJc29mdHdhcmUgc3RhdGUKLSAqIEFSRzE6CXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIHBvaW50ZXIKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCXNvZnR3YXJlIHN0YXRlIG5vdCB2YWxpZCBvciBzb2Z0d2FyZSBzdGF0ZQotICoJCQkJZGVzY3JpcHRpb24gaXMgbm90IE5VTEwgdGVybWluYXRlZAotICoJCUVOT1JBRERSCXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIHBvaW50ZXIgaXMgbm90IGEKLSAqCQkJCXZhbGlkIHJlYWwgYWRkcmVzcwotICoJCUVCQURBTElHTkVECXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIGlzIG5vdCBjb3JyZWN0bHkKLSAqCQkJCWFsaWduZWQKLSAqCi0gKiBUaGlzIGFsbG93cyB0aGUgZ3Vlc3QgdG8gcmVwb3J0IGl0J3Mgc29mdCBzdGF0ZSB0byB0aGUgaHlwZXJ2aXNvci4gIFRoZXJlCi0gKiBhcmUgdHdvIHByaW1hcnkgY29tcG9uZW50cyB0byB0aGlzIHN0YXRlLiAgVGhlIGZpcnN0IHBhcnQgc3RhdGVzIHdoZXRoZXIKLSAqIHRoZSBndWVzdCBzb2Z0d2FyZSBpcyBydW5uaW5nIG9yIG5vdC4gIFRoZSBzZWNvbmQgY29udGFpbnRzIG9wdGlvbmFsCi0gKiBkZXRhaWxzIHNwZWNpZmljIHRvIHRoZSBzb2Z0d2FyZS4KLSAqCi0gKiBUaGUgc29mdHdhcmUgc3RhdGUgYXJndW1lbnQgaXMgZGVmaW5lZCBiZWxvdyBpbiBIVl9TT0ZUX1NUQVRFXyosIGFuZAotICogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGd1ZXN0IGlzIG9wZXJhdGluZyBub3JtYWxseSBvciBpbiBhIHRyYW5zaXRpb25hbAotICogc3RhdGUuCi0gKgotICogVGhlIHNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIGFyZ3VtZW50IGlzIGEgcmVhbCBhZGRyZXNzIG9mIGEgZGF0YSBidWZmZXIKLSAqIG9mIHNpemUgMzItYnl0ZXMgYWxpZ25lZCBvbiBhIDMyLWJ5dGUgYm91bmRhcnkuICBJdCBpcyB0cmVhdGVkIGFzIGEgTlVMTAotICogdGVybWluYXRlZCA3LWJpdCBBU0NJSSBzdHJpbmcgb2YgdXAgdG8gMzEgY2hhcmFjdGVycyBub3QgaW5jbHVkaW5nIHRoZQotICogTlVMTCB0ZXJtaW5hdGlvbi4KLSAqLwotI2RlZmluZSBIVl9GQVNUX01BQ0hfU0VUX1NPRlRfU1RBVEUJMHg3MAotI2RlZmluZSAgSFZfU09GVF9TVEFURV9OT1JNQUwJCSAweDAxCi0jZGVmaW5lICBIVl9TT0ZUX1NUQVRFX1RSQU5TSVRJT04JIDB4MDIKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21hY2hfc2V0X3NvZnRfc3RhdGUodW5zaWduZWQgbG9uZyBzb2Z0X3N0YXRlLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBtc2dfc3RyaW5nX3JhKTsKLSNlbmRpZgotCi0vKiBtYWNoX2dldF9zb2Z0X3N0YXRlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9HRVRfU09GVF9TVEFURQotICogQVJHMDoJc29mdHdhcmUgc3RhdGUgZGVzY3JpcHRpb24gcG9pbnRlcgotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglzb2Z0d2FyZSBzdGF0ZQotICogRVJST1JTOglFTk9SQUREUglzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBwb2ludGVyIGlzIG5vdCBhCi0gKgkJCQl2YWxpZCByZWFsIGFkZHJlc3MKLSAqCQlFQkFEQUxJR05FRAlzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBpcyBub3QgY29ycmVjdGx5Ci0gKgkJCQlhbGlnbmVkCi0gKgotICogUmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGd1ZXN0J3Mgc29mdHdhcmUgc3RhdGUuICBUaGUgcnVsZXMKLSAqIGZvciB0aGUgc29mdHdhcmUgc3RhdGUgcG9pbnRlciBhcmUgdGhlIHNhbWUgYXMgZm9yIG1hY2hfc2V0X3NvZnRfc3RhdGUoKQotICogYWJvdmUuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9NQUNIX0dFVF9TT0ZUX1NUQVRFCTB4NzEKLQotLyogc3ZjX3NlbmQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9TVkNfU0VORAotICogQVJHMDoJc2VydmljZSBJRAotICogQVJHMToJYnVmZmVyIHJlYWwgYWRkcmVzcwotICogQVJHMjoJYnVmZmVyIHNpemUKLSAqIFJFVDA6CVNUQVRVUwotICogUkVUMToJc2VudF9ieXRlcwotICoKLSAqIEJlIGNhcmVmdWwsIGFsbCBvdXRwdXQgcmVnaXN0ZXJzIGFyZSBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24sCi0gKiBzbyBmb3IgZXhhbXBsZSBpdCBpcyBub3QgcG9zc2libGUgdG8gc2F2ZSBhd2F5IGEgdmFsdWUgaW4gJW80Ci0gKiBhY3Jvc3MgdGhlIHRyYXAuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9TVkNfU0VORAkJMHg4MAotCi0vKiBzdmNfcmVjdigpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1NWQ19SRUNWCi0gKiBBUkcwOglzZXJ2aWNlIElECi0gKiBBUkcxOglidWZmZXIgcmVhbCBhZGRyZXNzCi0gKiBBUkcyOglidWZmZXIgc2l6ZQotICogUkVUMDoJU1RBVFVTCi0gKiBSRVQxOglyZWN2X2J5dGVzCi0gKgotICogQmUgY2FyZWZ1bCwgYWxsIG91dHB1dCByZWdpc3RlcnMgYXJlIGNsb2JiZXJlZCBieSB0aGlzIG9wZXJhdGlvbiwKLSAqIHNvIGZvciBleGFtcGxlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzYXZlIGF3YXkgYSB2YWx1ZSBpbiAlbzQKLSAqIGFjcm9zcyB0aGUgdHJhcC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1NWQ19SRUNWCQkweDgxCi0KLS8qIHN2Y19nZXRzdGF0dXMoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9TVkNfR0VUU1RBVFVTCi0gKiBBUkcwOglzZXJ2aWNlIElECi0gKiBSRVQwOglTVEFUVVMKLSAqIFJFVDE6CXN0YXR1cyBiaXRzCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9TVkNfR0VUU1RBVFVTCQkweDgyCi0KLS8qIHN2Y19zZXRzdGF0dXMoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9TVkNfU0VUU1RBVFVTCi0gKiBBUkcwOglzZXJ2aWNlIElECi0gKiBBUkcxOgliaXRzIHRvIHNldAotICogUkVUMDoJU1RBVFVTCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9TVkNfU0VUU1RBVFVTCQkweDgzCi0KLS8qIHN2Y19jbHJzdGF0dXMoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9TVkNfQ0xSU1RBVFVTCi0gKiBBUkcwOglzZXJ2aWNlIElECi0gKiBBUkcxOgliaXRzIHRvIGNsZWFyCi0gKiBSRVQwOglTVEFUVVMKLSAqLwotI2RlZmluZSBIVl9GQVNUX1NWQ19DTFJTVEFUVVMJCTB4ODQKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3N2Y19zZW5kKHVuc2lnbmVkIGxvbmcgc3ZjX2lkLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlciwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBidWZmZXJfc2l6ZSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyAqc2VudF9ieXRlcyk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9zdmNfcmVjdih1bnNpZ25lZCBsb25nIHN2Y19pZCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBidWZmZXIsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyX3NpemUsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgKnJlY3ZfYnl0ZXMpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfc3ZjX2dldHN0YXR1cyh1bnNpZ25lZCBsb25nIHN2Y19pZCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgKnN0YXR1c19iaXRzKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3N2Y19zZXRzdGF0dXModW5zaWduZWQgbG9uZyBzdmNfaWQsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHN0YXR1c19iaXRzKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3N2Y19jbHJzdGF0dXModW5zaWduZWQgbG9uZyBzdmNfaWQsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHN0YXR1c19iaXRzKTsKLSNlbmRpZgotCi0vKiBUcmFwIHRyYWNlIHNlcnZpY2VzLgotICoKLSAqIFRoZSBoeXBlcnZpc29yIHByb3ZpZGVzIGEgdHJhcCB0cmFjaW5nIGNhcGFiaWxpdHkgZm9yIHByaXZpbGVnZWQKLSAqIGNvZGUgcnVubmluZyBvbiBlYWNoIHZpcnR1YWwgQ1BVLiAgUHJpdmlsZWdlZCBjb2RlIHByb3ZpZGVzIGEKLSAqIHJvdW5kLXJvYmluIHRyYXAgdHJhY2UgcXVldWUgd2l0aGluIHdoaWNoIHRoZSBoeXBlcnZpc29yIHdyaXRlcwotICogNjQtYnl0ZSBlbnRyaWVzIGRldGFpbGluZyBoeXBlcnByaXZpbGVnZWQgdHJhcHMgdGFrZW4gbiBiZWhhbGYgb2YKLSAqIHByaXZpbGVnZWQgY29kZS4gIFRoaXMgaXMgcHJvdmlkZWQgYXMgYSBkZWJ1Z2dpbmcgY2FwYWJpbGl0eSBmb3IKLSAqIHByaXZpbGVnZWQgY29kZS4KLSAqCi0gKiBUaGUgdHJhcCB0cmFjZSBjb250cm9sIHN0cnVjdHVyZSBpcyA2NC1ieXRlcyBsb25nIGFuZCBwbGFjZWQgYXQgdGhlCi0gKiBzdGFydCAob2Zmc2V0IDApIG9mIHRoZSB0cmFwIHRyYWNlIGJ1ZmZlciwgYW5kIGlzIGRlc2NyaWJlZCBhcwotICogZm9sbG93czoKLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXN0cnVjdCBodl90cmFwX3RyYWNlX2NvbnRyb2wgewotCXVuc2lnbmVkIGxvbmcJCWhlYWRfb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcJCXRhaWxfb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcJCV9fcmVzZXJ2ZWRbMHgzMCAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07Ci19OwotI2VuZGlmCi0jZGVmaW5lIEhWX1RSQVBfVFJBQ0VfQ1RSTF9IRUFEX09GRlNFVAkweDAwCi0jZGVmaW5lIEhWX1RSQVBfVFJBQ0VfQ1RSTF9UQUlMX09GRlNFVAkweDA4Ci0KLS8qIFRoZSBoZWFkIG9mZnNldCBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBtb3N0IHJlY2VudGx5IGNvbXBsZXRlZCBlbnRyeQotICogaW4gdGhlIHRyYXAtdHJhY2UgYnVmZmVyLiAgVGhlIHRhaWwgb2Zmc2V0IGlzIHRoZSBvZmZzZXQgb2YgdGhlCi0gKiBuZXh0IGVudHJ5IHRvIGJlIHdyaXR0ZW4uICBUaGUgY29udHJvbCBzdHJ1Y3R1cmUgaXMgb3duZWQgYW5kCi0gKiBtb2RpZmllZCBieSB0aGUgaHlwZXJ2aXNvci4gIEEgZ3Vlc3QgbWF5IG5vdCBtb2RpZnkgdGhlIGNvbnRyb2wKLSAqIHN0cnVjdHVyZSBjb250ZW50cy4gIEF0dGVtcHRzIHRvIGRvIHNvIHdpbGwgcmVzdWx0IGluIHVuZGVmaW5lZAotICogYmVoYXZpb3IgZm9yIHRoZSBndWVzdC4KLSAqCi0gKiBFYWNoIHRyYXAgdHJhY2UgYnVmZmVyIGVudHJ5IGlzIGxheWVkIG91dCBhcyBmb2xsb3dzOgotICovCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotc3RydWN0IGh2X3RyYXBfdHJhY2VfZW50cnkgewotCXVuc2lnbmVkIGNoYXIJdHlwZTsJCS8qIEh5cGVydmlzb3Igb3IgZ3Vlc3QgZW50cnk/CSovCi0JdW5zaWduZWQgY2hhcglocHN0YXRlOwkvKiBIeXBlci1wcml2aWxlZ2VkIHN0YXRlCSovCi0JdW5zaWduZWQgY2hhcgl0bDsJCS8qIFRyYXAgbGV2ZWwJCQkqLwotCXVuc2lnbmVkIGNoYXIJZ2w7CQkvKiBHbG9iYWwgcmVnaXN0ZXIgbGV2ZWwJKi8KLQl1bnNpZ25lZCBzaG9ydAl0dDsJCS8qIFRyYXAgdHlwZQkJCSovCi0JdW5zaWduZWQgc2hvcnQJdGFnOwkJLyogRXh0ZW5kZWQgdHJhcCBpZGVudGlmaWVyCSovCi0JdW5zaWduZWQgbG9uZwl0c3RhdGU7CQkvKiBUcmFwIHN0YXRlCQkJKi8KLQl1bnNpZ25lZCBsb25nCXRpY2s7CQkvKiBUaWNrCQkJCSovCi0JdW5zaWduZWQgbG9uZwl0cGM7CQkvKiBUcmFwIFBDCQkJKi8KLQl1bnNpZ25lZCBsb25nCWYxOwkJLyogRW50cnkgc3BlY2lmaWMJCSovCi0JdW5zaWduZWQgbG9uZwlmMjsJCS8qIEVudHJ5IHNwZWNpZmljCQkqLwotCXVuc2lnbmVkIGxvbmcJZjM7CQkvKiBFbnRyeSBzcGVjaWZpYwkJKi8KLQl1bnNpZ25lZCBsb25nCWY0OwkJLyogRW50cnkgc3BlY2lmaWMJCSovCi19OwotI2VuZGlmCi0jZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfVFlQRQkweDAwCi0jZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfSFBTVEFURQkweDAxCi0jZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfVEwJCTB4MDIKLSNkZWZpbmUgSFZfVFJBUF9UUkFDRV9FTlRSWV9HTAkJMHgwMwotI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX1RUCQkweDA0Ci0jZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfVEFHCQkweDA2Ci0jZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfVFNUQVRFCTB4MDgKLSNkZWZpbmUgSFZfVFJBUF9UUkFDRV9FTlRSWV9USUNLCTB4MTAKLSNkZWZpbmUgSFZfVFJBUF9UUkFDRV9FTlRSWV9UUEMJCTB4MTgKLSNkZWZpbmUgSFZfVFJBUF9UUkFDRV9FTlRSWV9GMQkJMHgyMAotI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX0YyCQkweDI4Ci0jZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfRjMJCTB4MzAKLSNkZWZpbmUgSFZfVFJBUF9UUkFDRV9FTlRSWV9GNAkJMHgzOAotCi0vKiBUaGUgdHlwZSBmaWVsZCBpcyBlbmNvZGVkIGFzIGZvbGxvd3MuICAqLwotI2RlZmluZSBIVl9UUkFQX1RZUEVfVU5ERUYJCTB4MDAgLyogRW50cnkgY29udGVudCB1bmRlZmluZWQgICAgICovCi0jZGVmaW5lIEhWX1RSQVBfVFlQRV9IVgkJCTB4MDEgLyogSHlwZXJ2aXNvciB0cmFwIGVudHJ5ICAgICAgICovCi0jZGVmaW5lIEhWX1RSQVBfVFlQRV9HVUVTVAkJMHhmZiAvKiBBZGRlZCB2aWEgdHRyYWNlX2FkZGVudHJ5KCkgKi8KLQotLyogdHRyYWNlX2J1Zl9jb25mKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfVFRSQUNFX0JVRl9DT05GCi0gKiBBUkcwOglyZWFsIGFkZHJlc3MKLSAqIEFSRzE6CW51bWJlciBvZiBlbnRyaWVzCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CW51bWJlciBvZiBlbnRyaWVzCi0gKiBFUlJPUlM6CUVOT1JBRERSCUludmFsaWQgcmVhbCBhZGRyZXNzCi0gKgkJRUlOVkFMCQlTaXplIGlzIHRvbyBzbWFsbAotICoJCUVCQURBTElHTglSZWFsIGFkZHJlc3Mgbm90IGFsaWduZWQgb24gNjQtYnl0ZSBib3VuZGFyeQotICoKLSAqIFJlcXVlc3RzIGh5cGVydmlzb3IgdHJhcCB0cmFjaW5nIGFuZCBkZWNsYXJlcyBhIHZpcnR1YWwgQ1BVJ3MgdHJhcAotICogdHJhY2UgYnVmZmVyIHRvIHRoZSBoeXBlcnZpc29yLiAgVGhlIHJlYWwgYWRkcmVzcyBzdXBwbGllcyB0aGUgcmVhbAotICogYmFzZSBhZGRyZXNzIG9mIHRoZSB0cmFwIHRyYWNlIHF1ZXVlIGFuZCBtdXN0IGJlIDY0LWJ5dGUgYWxpZ25lZC4KLSAqIFNwZWNpZnlpbmcgYSB2YWx1ZSBvZiAwIGZvciB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZGlzYWJsZXMgdHJhcAotICogdHJhY2luZyBmb3IgdGhlIGNhbGxpbmcgdmlydHVhbCBDUFUuICBUaGUgYnVmZmVyIGFsbG9jYXRlZCBtdXN0IGJlCi0gKiBzaXplZCBmb3IgYSBwb3dlciBvZiB0d28gbnVtYmVyIG9mIDY0LWJ5dGUgdHJhcCB0cmFjZSBlbnRyaWVzIHBsdXMKLSAqIGFuIGluaXRpYWwgNjQtYnl0ZSBjb250cm9sIHN0cnVjdHVyZS4KLSAqIAotICogVGhpcyBtYXkgYmUgaW52b2tlZCBhbnkgbnVtYmVyIG9mIHRpbWVzIHNvIHRoYXQgYSB2aXJ0dWFsIENQVSBtYXkKLSAqIHJlbG9jYXRlIGEgdHJhcCB0cmFjZSBidWZmZXIgb3IgY3JlYXRlICJzbmFwc2hvdHMiIG9mIGluZm9ybWF0aW9uLgotICoKLSAqIElmIHRoZSByZWFsIGFkZHJlc3MgaXMgaWxsZWdhbCBvciBiYWRseSBhbGlnbmVkLCB0aGVuIHRyYXAgdHJhY2luZwotICogaXMgZGlzYWJsZWQgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkLgotICoKLSAqIFVwb24gZmFpbHVyZSB3aXRoIEVJTlZBTCwgdGhpcyBzZXJ2aWNlIGNhbGwgcmV0dXJucyBpbiBSRVQxIHRoZQotICogbWluaW11bSBudW1iZXIgb2YgYnVmZmVyIGVudHJpZXMgcmVxdWlyZWQuICBVcG9uIG90aGVyIGZhaWx1cmVzCi0gKiBSRVQxIGlzIHVuZGVmaW5lZC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1RUUkFDRV9CVUZfQ09ORgkJMHg5MAotCi0vKiB0dHJhY2VfYnVmX2luZm8oKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9UVFJBQ0VfQlVGX0lORk8KLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJcmVhbCBhZGRyZXNzCi0gKiBSRVQyOglzaXplCi0gKiBFUlJPUlM6CU5vbmUgZGVmaW5lZC4KLSAqCi0gKiBSZXR1cm5zIHRoZSBzaXplIGFuZCBsb2NhdGlvbiBvZiB0aGUgcHJldmlvdXNseSBkZWNsYXJlZCB0cmFwLXRyYWNlCi0gKiBidWZmZXIuICBJbiB0aGUgZXZlbnQgdGhhdCBubyBidWZmZXIgd2FzIHByZXZpb3VzbHkgZGVmaW5lZCwgb3IgdGhlCi0gKiBidWZmZXIgaXMgZGlzYWJsZWQsIHRoaXMgY2FsbCB3aWxsIHJldHVybiBhIHNpemUgb2YgemVybyBieXRlcy4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1RUUkFDRV9CVUZfSU5GTwkJMHg5MQotCi0vKiB0dHJhY2VfZW5hYmxlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfVFRSQUNFX0VOQUJMRQotICogQVJHMDoJZW5hYmxlCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CXByZXZpb3VzIGVuYWJsZSBzdGF0ZQotICogRVJST1JTOglFSU5WQUwJCU5vIHRyYXAgdHJhY2UgYnVmZmVyIGN1cnJlbnRseSBkZWZpbmVkCi0gKgotICogRW5hYmxlIG9yIGRpc2FibGUgdHJhcCB0cmFjaW5nLCBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyBlbmFibGVkCi0gKiBzdGF0ZSBpbiBSRVQxLiAgRnV0dXJlIHN5c3RlbXMgbWF5IGRlZmluZSB2YXJpb3VzIGZsYWdzIGZvciB0aGUKLSAqIGVuYWJsZSBhcmd1bWVudCAoQVJHMCksIGZvciB0aGUgbW9tZW50IGEgZ3Vlc3Qgc2hvdWxkIHBhc3MKLSAqICIodWludDY0X3QpIC0xIiB0byBlbmFibGUsIGFuZCAiKHVpbnQ2NF90KSAwIiB0byBkaXNhYmxlIGFsbAotICogdHJhY2luZyAtIHdoaWNoIHdpbGwgZW5zdXJlIGZ1dHVyZSBjb21wYXRhYmlsaXR5LgotICovCi0jZGVmaW5lIEhWX0ZBU1RfVFRSQUNFX0VOQUJMRQkJMHg5MgotCi0vKiB0dHJhY2VfZnJlZXplKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfVFRSQUNFX0ZSRUVaRQotICogQVJHMDoJZnJlZXplCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CXByZXZpb3VzIGZyZWV6ZSBzdGF0ZQotICogRVJST1JTOglFSU5WQUwJCU5vIHRyYXAgdHJhY2UgYnVmZmVyIGN1cnJlbnRseSBkZWZpbmVkCi0gKgotICogRnJlZXplIG9yIHVuZnJlZXplIHRyYXAgdHJhY2luZywgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyBmcmVlemUKLSAqIHN0YXRlIGluIFJFVDEuICBBIGd1ZXN0IHNob3VsZCBwYXNzIGEgbm9uLXplcm8gdmFsdWUgdG8gZnJlZXplIGFuZAotICogYSB6ZXJvIHZhbHVlIHRvIHVuZnJlZXplIGFsbCB0cmFjaW5nLiAgVGhlIHJldHVybmVkIHByZXZpb3VzIHN0YXRlCi0gKiBpcyAwIGZvciBub3QgZnJvemVuIGFuZCAxIGZvciBmcm96ZW4uCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9UVFJBQ0VfRlJFRVpFCQkweDkzCi0KLS8qIHR0cmFjZV9hZGRlbnRyeSgpCi0gKiBUUkFQOglIVl9UVFJBQ0VfQURERU5UUllfVFJBUAotICogQVJHMDoJdGFnICgxNi1iaXRzKQotICogQVJHMToJZGF0YSB3b3JkIDAKLSAqIEFSRzI6CWRhdGEgd29yZCAxCi0gKiBBUkczOglkYXRhIHdvcmQgMgotICogQVJHNDoJZGF0YSB3b3JkIDMKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCU5vIHRyYXAgdHJhY2UgYnVmZmVyIGN1cnJlbnRseSBkZWZpbmVkCi0gKgotICogQWRkIGFuIGVudHJ5IHRvIHRoZSB0cmFwIHRyYWNlIGJ1ZmZlci4gIFVwb24gcmV0dXJuIG9ubHkgQVJHMC9SRVQwCi0gKiBpcyBtb2RpZmllZCAtIG5vbmUgb2YgdGhlIG90aGVyIHJlZ2lzdGVycyBob2xkaW5nIGFyZ3VtZW50cyBhcmUKLSAqIHZvbGF0aWxlIGFjcm9zcyB0aGlzIGh5cGVydmlzb3Igc2VydmljZS4KLSAqLwotCi0vKiBDb3JlIGR1bXAgc2VydmljZXMuCi0gKgotICogU2luY2UgdGhlIGh5cGVydmlzb3IgdmlyYXVsaXplcyBhbmQgdGh1cyBvYnNjdXJlcyBhIGxvdCBvZiB0aGUKLSAqIHBoeXNpY2FsIG1hY2hpbmUgbGF5b3V0IGFuZCBzdGF0ZSwgdHJhZGl0aW9uYWwgT1MgY3Jhc2ggZHVtcHMgY2FuCi0gKiBiZSBkaWZmaWN1bHQgdG8gZGlhZ25vc2UgZXNwZWNpYWxseSB3aGVuIHRoZSBwcm9ibGVtIGlzIGEKLSAqIGNvbmZpZ3VyYXRpb24gZXJyb3Igb2Ygc29tZSBzb3J0LgotICoKLSAqIFRoZSBkdW1wIHNlcnZpY2VzIHByb3ZpZGUgYW4gb3BhcXVlIGJ1ZmZlciBpbnRvIHdoaWNoIHRoZQotICogaHlwZXJ2aXNvciBjYW4gcGxhY2UgaXQncyBpbnRlcm5hbCBzdGF0ZSBpbiBvcmRlciB0byBhc3Npc3QgaW4KLSAqIGRlYnVnZ2luZyBzdWNoIHNpdHVhdGlvbnMuICBUaGUgY29udGVudHMgYXJlIG9wYXF1ZSBhbmQgZXh0cmVtZWx5Ci0gKiBwbGF0Zm9ybSBhbmQgaHlwZXJ2aXNvciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4gIFRoZSBndWVzdCwgZHVyaW5nCi0gKiBhIGNvcmUgZHVtcCwgcmVxdWVzdHMgdGhhdCB0aGUgaHlwZXJ2aXNvciB1cGRhdGUgYW55IGluZm9ybWF0aW9uIGluCi0gKiB0aGUgZHVtcCBidWZmZXIgaW4gcHJlcGFyYXRpb24gdG8gYmVpbmcgZHVtcGVkIGFzIHBhcnQgb2YgdGhlCi0gKiBkb21haW4ncyBtZW1vcnkgaW1hZ2UuCi0gKi8KLQotLyogZHVtcF9idWZfdXBkYXRlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfRFVNUF9CVUZfVVBEQVRFCi0gKiBBUkcwOglyZWFsIGFkZHJlc3MKLSAqIEFSRzE6CXNpemUKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJcmVxdWlyZWQgc2l6ZSBvZiBkdW1wIGJ1ZmZlcgotICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcwotICoJCUVCQURBTElHTglSZWFsIGFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSA2NC1ieXRlCi0gKgkJCQlib3VuZGFyeQotICoJCUVJTlZBTAkJU2l6ZSBpcyBub24temVybyBidXQgbGVzcyB0aGFuIG1pbmltdW0gc2l6ZQotICoJCQkJcmVxdWlyZWQKLSAqCQlFTk9UU1VQUE9SVEVECU9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIGN1cnJlbnQgbG9naWNhbAotICoJCQkJZG9tYWluCi0gKgotICogRGVjbGFyZSBhIGRvbWFpbiBkdW1wIGJ1ZmZlciB0byB0aGUgaHlwZXJ2aXNvci4gIFRoZSByZWFsIGFkZHJlc3MKLSAqIHByb3ZpZGVkIGZvciB0aGUgZG9tYWluIGR1bXAgYnVmZmVyIG11c3QgYmUgNjQtYnl0ZSBhbGlnbmVkLiAgVGhlCi0gKiBzaXplIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgZHVtcCBidWZmZXIgYW5kIG1heSBiZSBsYXJnZXIgdGhhbgotICogdGhlIG1pbmltdW0gc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uICBUaGUKLSAqIGh5cGVydmlzb3Igd2lsbCBmaWxsIHRoZSBkdW1wIGJ1ZmZlciB3aXRoIG9wYXF1ZSBkYXRhLgotICoKLSAqIE5vdGU6IEEgZ3Vlc3QgbWF5IGVsZWN0IHRvIGluY2x1ZGUgZHVtcCBidWZmZXIgY29udGVudHMgYXMgcGFydCBvZiBhIGNyYXNoCi0gKiAgICAgICBkdW1wIHRvIGFzc2lzdCB3aXRoIGRlYnVnZ2luZy4gIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhbnkgbnVtYmVyCi0gKiAgICAgICBvZiB0aW1lcyBzbyB0aGF0IGEgZ3Vlc3QgbWF5IHJlbG9jYXRlIGEgZHVtcCBidWZmZXIsIG9yIGNyZWF0ZQotICogICAgICAgInNuYXBzaG90cyIgb2YgYW55IGR1bXAtYnVmZmVyIGluZm9ybWF0aW9uLiAgRWFjaCBjYWxsIHRvCi0gKiAgICAgICBkdW1wX2J1Zl91cGRhdGUoKSBhdG9taWNhbGx5IGRlY2xhcmVzIHRoZSBuZXcgZHVtcCBidWZmZXIgdG8gdGhlCi0gKiAgICAgICBoeXBlcnZpc29yLgotICoKLSAqIEEgc3BlY2lmaWVkIHNpemUgb2YgMCB1bmNvbmZpZ3VyZXMgdGhlIGR1bXAgYnVmZmVyLiAgSWYgdGhlIHJlYWwKLSAqIGFkZHJlc3MgaXMgaWxsZWdhbCBvciBiYWRseSBhbGlnbmVkLCB0aGVuIGFueSBjdXJyZW50bHkgYWN0aXZlIGR1bXAKLSAqIGJ1ZmZlciBpcyBkaXNhYmxlZCBhbmQgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCi0gKgotICogSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGNhbGwgZmFpbHMgd2l0aCBFSU5WQUwsIFJFVDEgY29udGFpbnMgdGhlCi0gKiBtaW5pbXVtIHNpemUgcmVxdWlyZXMgYnkgdGhlIGh5cGVydmlzb3IgZm9yIGEgdmFsaWQgZHVtcCBidWZmZXIuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9EVU1QX0JVRl9VUERBVEUJCTB4OTQKLQotLyogZHVtcF9idWZfaW5mbygpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0RVTVBfQlVGX0lORk8KLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJcmVhbCBhZGRyZXNzIG9mIGN1cnJlbnQgZHVtcCBidWZmZXIKLSAqIFJFVDI6CXNpemUgb2YgY3VycmVudCBkdW1wIGJ1ZmZlcgotICogRVJST1JTOglObyBlcnJvcnMgZGVmaW5lZC4KLSAqCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnRseSBjb25maWd1cmVzIGR1bXAgYnVmZmVyIGRlc2NyaXB0aW9uLiAgQQotICogcmV0dXJuZWQgc2l6ZSBvZiAwIGJ5dGVzIGluZGljYXRlcyBhbiB1bmRlZmluZWQgZHVtcCBidWZmZXIuICBJbgotICogdGhpcyBjYXNlIHRoZSByZXR1cm4gYWRkcmVzcyBpbiBSRVQxIGlzIHVuZGVmaW5lZC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0RVTVBfQlVGX0lORk8JCTB4OTUKLQotLyogRGV2aWNlIGludGVycnVwdCBzZXJ2aWNlcy4KLSAqCi0gKiBEZXZpY2UgaW50ZXJydXB0cyBhcmUgYWxsb2NhdGVkIHRvIHN5c3RlbSBidXMgYnJpZGdlcyBieSB0aGUgaHlwZXJ2aXNvciwKLSAqIGFuZCBkZXNjcmliZWQgdG8gT0JQIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uLiAgT0JQIHRoZW4gZGVzY3JpYmVzCi0gKiB0aGVzZSBpbnRlcnJ1cHRzIHRvIHRoZSBPUyB2aWEgcHJvcGVydGllcyBpbiB0aGUgZGV2aWNlIHRyZWUuCi0gKgotICogVGVybWlub2xvZ3k6Ci0gKgotICoJY3B1aWQJCVVuaXF1ZSBvcGFxdWUgdmFsdWUgd2hpY2ggcmVwcmVzZW50cyBhIHRhcmdldCBjcHUuCi0gKgotICoJZGV2aGFuZGxlCURldmljZSBoYW5kbGUuICBJdCB1bmlxdWVseSBpZGVudGlmaWVzIGEgZGV2aWNlLCBhbmQKLSAqCQkJY29uc2lzdGVzIG9mIHRoZSBsb3dlciAyOC1iaXRzIG9mIHRoZSBoaS1jZWxsIG9mIHRoZQotICoJCQlmaXJzdCBlbnRyeSBvZiB0aGUgZGV2aWNlJ3MgInJlZyIgcHJvcGVydHkgaW4gdGhlCi0gKgkJCU9CUCBkZXZpY2UgdHJlZS4KLSAqCi0gKglkZXZpbm8JCURldmljZSBpbnRlcnJ1cHQgbnVtYmVyLiAgU3BlY2lmaWVzIHRoZSByZWxhdGl2ZQotICoJCQlpbnRlcnJ1cHQgbnVtYmVyIHdpdGhpbiB0aGUgZGV2aWNlLiAgVGhlIHVuaXF1ZQotICoJCQljb21iaW5hdGlvbiBvZiBkZXZoYW5kbGUgYW5kIGRldmlubyBhcmUgdXNlZCB0bwotICoJCQlpZGVudGlmeSBhIHNwZWNpZmljIGRldmljZSBpbnRlcnJ1cHQuCi0gKgotICoJCQlOb3RlOiBUaGUgZGV2aW5vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSB2YWx1ZXMgaW4gdGhlCi0gKgkJCSAgICAgICJpbnRlcnJ1cHRzIiBwcm9wZXJ0eSBvciAiaW50ZXJydXB0LW1hcCIgcHJvcGVydHkKLSAqCQkJICAgICAgaW4gdGhlIE9CUCBkZXZpY2UgdHJlZSBmb3IgdGhhdCBkZXZpY2UuCi0gKgotICoJc3lzaW5vCQlTeXN0ZW0gaW50ZXJydXB0IG51bWJlci4gIEEgNjQtYml0IHVuc2lnbmVkIGludGVyZ2VyCi0gKgkJCXJlcHJlc2VudGluZyBhIHVuaXF1ZSBpbnRlcnJ1cHQgd2l0aGluIGEgdmlydHVhbAotICoJCQltYWNoaW5lLgotICoKLSAqCWludHJfc3RhdGUJQSBmbGFnIHJlcHJlc2VudGluZyB0aGUgaW50ZXJydXB0IHN0YXRlIGZvciBhIGdpdmVuCi0gKgkJCXN5c2luby4gIFRoZSBzdGF0ZSB2YWx1ZXMgYXJlIGRlZmluZWQgYmVsb3cuCi0gKgotICoJaW50cl9lbmFibGVkCUEgZmxhZyByZXByZXNlbnRpbmcgdGhlICdlbmFibGVkJyBzdGF0ZSBmb3IgYSBnaXZlbgotICoJCQlzeXNpbm8uICBUaGUgZW5hYmxlIHZhbHVlcyBhcmUgZGVmaW5lZCBiZWxvdy4KLSAqLwotCi0jZGVmaW5lIEhWX0lOVFJfU1RBVEVfSURMRQkJMCAvKiBOb3RoaW5nIHBlbmRpbmcgKi8KLSNkZWZpbmUgSFZfSU5UUl9TVEFURV9SRUNFSVZFRAkJMSAvKiBJbnRlcnJ1cHQgcmVjZWl2ZWQgYnkgaGFyZHdhcmUgKi8KLSNkZWZpbmUgSFZfSU5UUl9TVEFURV9ERUxJVkVSRUQJCTIgLyogSW50ZXJydXB0IGRlbGl2ZXJlZCB0byBxdWV1ZSAqLwotCi0jZGVmaW5lIEhWX0lOVFJfRElTQUJMRUQJCTAgLyogc3lzaW5vIG5vdCBlbmFibGVkICovCi0jZGVmaW5lIEhWX0lOVFJfRU5BQkxFRAkJCTEgLyogc3lzaW5vIGVuYWJsZWQgKi8KLQotLyogaW50cl9kZXZpbm9fdG9fc3lzaW5vKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfSU5UUl9ERVZJTk8yU1lTSU5PCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CWRldmlubwotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglzeXNpbm8KLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS9kZXZpbm8KLSAqCi0gKiBDb252ZXJ0cyBhIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyIG9mIHRoZSBnaXZlbgotICogZGV2aGFuZGxlL2RldmlubyBpbnRvIGEgc3lzdGVtIHNwZWNpZmljIGlubyAoc3lzaW5vKS4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0lOVFJfREVWSU5PMlNZU0lOTwkweGEwCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9kZXZpbm9fdG9fc3lzaW5vKHVuc2lnbmVkIGxvbmcgZGV2aGFuZGxlLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBkZXZpbm8pOwotI2VuZGlmCi0KLS8qIGludHJfZ2V0ZW5hYmxlZCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0lOVFJfR0VURU5BQkxFRAotICogQVJHMDoJc3lzaW5vCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWludHJfZW5hYmxlZCAoSFZfSU5UUl97RElTQUJMRUQsRU5BQkxFRH0pCi0gKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBzeXNpbm8KLSAqCi0gKiBSZXR1cm5zIGludGVycnVwdCBlbmFibGVkIHN0YXRlIGluIFJFVDEgZm9yIHRoZSBpbnRlcnJ1cHQgZGVmaW5lZAotICogYnkgdGhlIGdpdmVuIHN5c2luby4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0lOVFJfR0VURU5BQkxFRAkJMHhhMQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfaW50cl9nZXRlbmFibGVkKHVuc2lnbmVkIGxvbmcgc3lzaW5vKTsKLSNlbmRpZgotCi0vKiBpbnRyX3NldGVuYWJsZWQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9JTlRSX1NFVEVOQUJMRUQKLSAqIEFSRzA6CXN5c2lubwotICogQVJHMToJaW50cl9lbmFibGVkIChIVl9JTlRSX3tESVNBQkxFRCxFTkFCTEVEfSkKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgc3lzaW5vIG9yIGludHJfZW5hYmxlZCB2YWx1ZQotICoKLSAqIFNldCB0aGUgJ2VuYWJsZWQnIHN0YXRlIG9mIHRoZSBpbnRlcnJ1cHQgc3lzaW5vLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfSU5UUl9TRVRFTkFCTEVECQkweGEyCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9pbnRyX3NldGVuYWJsZWQodW5zaWduZWQgbG9uZyBzeXNpbm8sIHVuc2lnbmVkIGxvbmcgaW50cl9lbmFibGVkKTsKLSNlbmRpZgotCi0vKiBpbnRyX2dldHN0YXRlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfSU5UUl9HRVRTVEFURQotICogQVJHMDoJc3lzaW5vCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWludHJfc3RhdGUgKEhWX0lOVFJfU1RBVEVfKikKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHN5c2lubwotICoKLSAqIFJldHVybnMgY3VycmVudCBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0IGRlZmluZWQgYnkgdGhlIGdpdmVuIHN5c2luby4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0lOVFJfR0VUU1RBVEUJCTB4YTMKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2ludHJfZ2V0c3RhdGUodW5zaWduZWQgbG9uZyBzeXNpbm8pOwotI2VuZGlmCi0KLS8qIGludHJfc2V0c3RhdGUoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9JTlRSX1NFVFNUQVRFCi0gKiBBUkcwOglzeXNpbm8KLSAqIEFSRzE6CWludHJfc3RhdGUgKEhWX0lOVFJfU1RBVEVfKikKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgc3lzaW5vIG9yIGludHJfc3RhdGUgdmFsdWUKLSAqCi0gKiBTZXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBpbnRlcnJ1cHQgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBzeXNpbm8KLSAqIHZhbHVlLgotICoKLSAqIE5vdGU6IFNldHRpbmcgdGhlIHN0YXRlIHRvIEhWX0lOVFJfU1RBVEVfSURMRSBjbGVhcnMgYW55IHBlbmRpbmcKLSAqICAgICAgIGludGVycnVwdCBmb3Igc3lzaW5vLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfSU5UUl9TRVRTVEFURQkJMHhhNAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfaW50cl9zZXRzdGF0ZSh1bnNpZ25lZCBsb25nIHN5c2lubywgdW5zaWduZWQgbG9uZyBpbnRyX3N0YXRlKTsKLSNlbmRpZgotCi0vKiBpbnRyX2dldHRhcmdldCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0lOVFJfR0VUVEFSR0VUCi0gKiBBUkcwOglzeXNpbm8KLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJY3B1aWQKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHN5c2lubwotICoKLSAqIFJldHVybnMgQ1BVIHRoYXQgaXMgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIHRoZSBpbnRlcnJ1cHQgZGVmaW5lZCBieQotICogdGhlIGdpdmVuIHN5c2luby4gIFRoZSBDUFUgdmFsdWUgcmV0dXJuZWQgaXMgdW5kZWZpbmVkIGlmIHRoZSB0YXJnZXQKLSAqIGhhcyBub3QgYmVlbiBzZXQgdmlhIGludHJfc2V0dGFyZ2V0KCkuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9JTlRSX0dFVFRBUkdFVAkJMHhhNQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfaW50cl9nZXR0YXJnZXQodW5zaWduZWQgbG9uZyBzeXNpbm8pOwotI2VuZGlmCi0KLS8qIGludHJfc2V0dGFyZ2V0KCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfSU5UUl9TRVRUQVJHRVQKLSAqIEFSRzA6CXN5c2lubwotICogQVJHMToJY3B1aWQKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgc3lzaW5vCi0gKgkJRU5PQ1BVCQlJbnZhbGlkIGNwdWlkCi0gKgotICogU2V0IHRoZSB0YXJnZXQgQ1BVIGZvciB0aGUgaW50ZXJydXB0IGRlZmluZWQgYnkgdGhlIGdpdmVuIHN5c2luby4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0lOVFJfU0VUVEFSR0VUCQkweGE2Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9pbnRyX3NldHRhcmdldCh1bnNpZ25lZCBsb25nIHN5c2lubywgdW5zaWduZWQgbG9uZyBjcHVpZCk7Ci0jZW5kaWYKLQotLyogdmludHJfZ2V0X2Nvb2tpZSgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1ZJTlRSX0dFVF9DT09LSUUKLSAqIEFSRzA6CWRldmljZSBoYW5kbGUKLSAqIEFSRzE6CWRldmljZSBpbm8KLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJY29va2llCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9WSU5UUl9HRVRfQ09PS0lFCTB4YTcKLQotLyogdmludHJfc2V0X2Nvb2tpZSgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1ZJTlRSX1NFVF9DT09LSUUKLSAqIEFSRzA6CWRldmljZSBoYW5kbGUKLSAqIEFSRzE6CWRldmljZSBpbm8KLSAqIEFSRzI6CWNvb2tpZQotICogUkVUMDoJc3RhdHVzCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9WSU5UUl9TRVRfQ09PS0lFCTB4YTgKLQotLyogdmludHJfZ2V0X3ZhbGlkKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfR0VUX1ZBTElECi0gKiBBUkcwOglkZXZpY2UgaGFuZGxlCi0gKiBBUkcxOglkZXZpY2UgaW5vCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CXZhbGlkIHN0YXRlCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9WSU5UUl9HRVRfVkFMSUQJCTB4YTkKLQotLyogdmludHJfc2V0X3ZhbGlkKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfU0VUX1ZBTElECi0gKiBBUkcwOglkZXZpY2UgaGFuZGxlCi0gKiBBUkcxOglkZXZpY2UgaW5vCi0gKiBBUkcyOgl2YWxpZCBzdGF0ZQotICogUkVUMDoJc3RhdHVzCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9WSU5UUl9TRVRfVkFMSUQJCTB4YWEKLQotLyogdmludHJfZ2V0X3N0YXRlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfR0VUX1NUQVRFCi0gKiBBUkcwOglkZXZpY2UgaGFuZGxlCi0gKiBBUkcxOglkZXZpY2UgaW5vCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CXN0YXRlCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9WSU5UUl9HRVRfU1RBVEUJCTB4YWIKLQotLyogdmludHJfc2V0X3N0YXRlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfU0VUX1NUQVRFCi0gKiBBUkcwOglkZXZpY2UgaGFuZGxlCi0gKiBBUkcxOglkZXZpY2UgaW5vCi0gKiBBUkcyOglzdGF0ZQotICogUkVUMDoJc3RhdHVzCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9WSU5UUl9TRVRfU1RBVEUJCTB4YWMKLQotLyogdmludHJfZ2V0X3RhcmdldCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1ZJTlRSX0dFVF9UQVJHRVQKLSAqIEFSRzA6CWRldmljZSBoYW5kbGUKLSAqIEFSRzE6CWRldmljZSBpbm8KLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJY3B1aWQKLSAqLwotI2RlZmluZSBIVl9GQVNUX1ZJTlRSX0dFVF9UQVJHRVQJMHhhZAotCi0vKiB2aW50cl9zZXRfdGFyZ2V0KCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfU0VUX1RBUkdFVAotICogQVJHMDoJZGV2aWNlIGhhbmRsZQotICogQVJHMToJZGV2aWNlIGlubwotICogQVJHMjoJY3B1aWQKLSAqIFJFVDA6CXN0YXR1cwotICovCi0jZGVmaW5lIEhWX0ZBU1RfVklOVFJfU0VUX1RBUkdFVAkweGFlCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl92aW50cl9nZXRfY29va2llKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGV2X2lubywKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmNvb2tpZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl92aW50cl9zZXRfY29va2llKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGV2X2lubywKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgY29va2llKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3ZpbnRyX2dldF92YWxpZCh1bnNpZ25lZCBsb25nIGRldl9oYW5kbGUsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGV2X2lubywKLQkJCQkJICAgdW5zaWduZWQgbG9uZyAqdmFsaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdmludHJfc2V0X3ZhbGlkKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbGlkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3ZpbnRyX2dldF9zdGF0ZSh1bnNpZ25lZCBsb25nIGRldl9oYW5kbGUsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGV2X2lubywKLQkJCQkJICAgdW5zaWduZWQgbG9uZyAqc3RhdGUpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdmludHJfc2V0X3N0YXRlKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXRlKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3ZpbnRyX2dldF90YXJnZXQodW5zaWduZWQgbG9uZyBkZXZfaGFuZGxlLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqY3B1aWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdmludHJfc2V0X3RhcmdldCh1bnNpZ25lZCBsb25nIGRldl9oYW5kbGUsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGRldl9pbm8sCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGNwdWlkKTsKLSNlbmRpZgotCi0vKiBQQ0kgSU8gc2VydmljZXMuCi0gKgotICogU2VlIHRoZSB0ZXJtaW5vbG9neSBkZXNjcmlwdGlvbnMgaW4gdGhlIGRldmljZSBpbnRlcnJ1cHQgc2VydmljZXMKLSAqIHNlY3Rpb24gYWJvdmUgYXMgdGhvc2UgYXBwbHkgaGVyZSB0b28uICBIZXJlIGFyZSB0ZXJtaW5vbG9neQotICogZGVmaW5pdGlvbnMgc3BlY2lmaWMgdG8gdGhlc2UgUENJIElPIHNlcnZpY2VzOgotICoKLSAqCXRzYm51bQkJVFNCIG51bWJlci4gIEluZGVudGlmaWVzIHdoaWNoIGlvLXRzYiBpcyB1c2VkLgotICoJCQlGb3IgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uLCB0c2JudW0KLSAqCQkJbXVzdCBiZSB6ZXJvLgotICoKLSAqCXRzYmluZGV4CVRTQiBpbmRleC4gIElkZW50aWZpZXMgd2hpY2ggZW50cnkgaW4gdGhlIFRTQgotICoJCQlpcyB1c2VkLiAgVGhlIGZpcnN0IGVudHJ5IGlzIHplcm8uCi0gKgotICoJdHNiaWQJCUEgNjQtYml0IGFsaWduZWQgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnMKLSAqCQkJYSB0c2JudW0gYW5kIGEgdHNiaW5kZXguICBCaXRzIDYzOjMyIGNvbnRhaW4gdGhlCi0gKgkJCXRzYm51bSBhbmQgYml0cyAzMTowMCBjb250YWluIHRoZSB0c2JpbmRleC4KLSAqCi0gKgkJCVVzZSB0aGUgSFZfUENJX1RTQklEKCkgbWFjcm8gdG8gY29uc3RydWN0IHN1Y2gKLSAqIAkJCXZhbHVlcy4KLSAqCi0gKglpb19hdHRyaWJ1dGVzCUlPIGF0dHJpYnV0ZXMgZm9yIElPTU1VIG1hcHBpbmdzLiAgT25lIG9mIG1vcmUKLSAqCQkJb2YgdGhlIGF0dHJpdGJ1dGUgYml0cyBhcmUgc3RvcmVzIGluIGEgNjQtYml0Ci0gKgkJCXZhbHVlLiAgVGhlIHZhbHVlcyBhcmUgZGVmaW5lZCBiZWxvdy4KLSAqCi0gKglyX2FkZHIJCTY0LWJpdCByZWFsIGFkZHJlc3MKLSAqCi0gKglwY2lfZGV2aWNlCVBDSSBkZXZpY2UgYWRkcmVzcy4gIEEgUENJIGRldmljZSBhZGRyZXNzIGlkZW50aWZpZXMKLSAqCQkJYSBzcGVjaWZpYyBkZXZpY2Ugb24gYSBzcGVjaWZpYyBQQ0kgYnVzIHNlZ21lbnQuCi0gKgkJCUEgUENJIGRldmljZSBhZGRyZXNzIGlhIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIKLSAqCQkJd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSAqCi0gKgkJCQkwMDAwMDAwMC5iYmJiYmJiYi5kZGRkZGZmZi4wMDAwMDAwMAotICoKLSAqCQkJVXNlIHRoZSBIVl9QQ0lfREVWSUNFX0JVSUxEKCkgbWFjcm8gdG8gY29uc3RydWN0Ci0gKgkJCXN1Y2ggdmFsdWVzLgotICoKLSAqCXBjaV9jb25maWdfb2Zmc2V0Ci0gKgkJCVBDSSBjb25maWd1cmVhdGlvbiBzcGFjZSBvZmZzZXQuICBGb3IgY29udmVudGlvbmFsCi0gKgkJCVBDSSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LiAgRm9yIGV4dGVuZGVkCi0gKgkJCWNvbmZpZ3VyYXRpb24gc3BhY2UsIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCA0MDk1LgotICoKLSAqCQkJTm90ZTogRm9yIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzc2VzLCB0aGUgb2Zmc2V0Ci0gKgkJCSAgICAgIG11c3QgYmUgYWxpZ25lZCB0byB0aGUgYWNjZXNzIHNpemUuCi0gKgotICoJZXJyb3JfZmxhZwlBIHJldHVybiB2YWx1ZSB3aGljaCBzcGVjaWZpZXMgaWYgdGhlIGFjdGlvbiBzdWNjZWVkZWQKLSAqCQkJb3IgZmFpbGVkLiAgMCBtZWFucyBubyBlcnJvciwgbm9uLTAgbWVhbnMgc29tZSBlcnJvcgotICoJCQlvY2N1cnJlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZSBzZXJ2aWNlLgotICoKLSAqCWlvX3N5bmNfZGlyZWN0aW9uCi0gKgkJCURpcmVjdGlvbiBkZWZpbml0aW9uIGZvciBwY2lfZG1hX3N5bmMoKSwgZGVmaW5lZAotICoJCQliZWxvdyBpbiBIVl9QQ0lfU1lOQ18qLgotICoKLSAqCWlvX3BhZ2VfbGlzdAlBIGxpc3Qgb2YgaW9fcGFnZV9hZGRyZXNzZXMsIGFuIGlvX3BhZ2VfYWRkcmVzcyBpcwotICoJCQlhIHJlYWwgYWRkcmVzcy4KLSAqCi0gKglpb19wYWdlX2xpc3RfcAlBIHBvaW50ZXIgdG8gYW4gaW9fcGFnZV9saXN0LgotICoKLSAqCSJzaXplIGJhc2VkIGJ5dGUgc3dhcCIgLSBTb21lIGZ1bmN0aW9ucyBkbyBzaXplIGJhc2VkIGJ5dGUgc3dhcHBpbmcKLSAqCQkJCSB3aGljaCBhbGxvd3Mgc3cgdG8gYWNjZXNzIHBvaW50ZXJzIGFuZAotICoJCQkJIGNvdW50ZXJzIGluIG5hdGl2ZSBmb3JtIHdoZW4gdGhlIHByb2Nlc3NvcgotICoJCQkJIG9wZXJhdGVzIGluIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGUKLSAqCQkJCSBJTyBidXMuICBTaXplLWJhc2VkIGJ5dGUgc3dhcHBpbmcgY29udmVydHMgYQotICoJCQkJIG11bHRpLWJ5dGUgZmllbGQgYmV0d2VlbiBiaWctZW5kaWFuIGFuZAotICoJCQkJIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgotICovCi0KLSNkZWZpbmUgSFZfUENJX01BUF9BVFRSX1JFQUQJCTB4MDEKLSNkZWZpbmUgSFZfUENJX01BUF9BVFRSX1dSSVRFCQkweDAyCi0KLSNkZWZpbmUgSFZfUENJX0RFVklDRV9CVUlMRChiLGQsZikJXAotCSgoKChiKSAmIDB4ZmYpIDw8IDE2KSB8IFwKLQkgKCgoZCkgJiAweDFmKSA8PCAxMSkgfCBcCi0JICgoKGYpICYgMHgwNykgPDwgIDgpKQotCi0jZGVmaW5lIEhWX1BDSV9UU0JJRChfX3RzYl9udW0sIF9fdHNiX2luZGV4KSBcCi0JKCgoKHU2NCkoX190c2JfbnVtKSkgPDwgMzJVTCkgfCAoKHU2NCkoX190c2JfaW5kZXgpKSkKLQotI2RlZmluZSBIVl9QQ0lfU1lOQ19GT1JfREVWSUNFCQkweDAxCi0jZGVmaW5lIEhWX1BDSV9TWU5DX0ZPUl9DUFUJCTB4MDIKLQotLyogcGNpX2lvbW11X21hcCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9JT01NVV9NQVAKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJdHNiaWQKLSAqIEFSRzI6CSN0dGVzCi0gKiBBUkczOglpb19hdHRyaWJ1dGVzCi0gKiBBUkc0Oglpb19wYWdlX2xpc3RfcAotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgkjdHRlcyBtYXBwZWQKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS90c2JudW0vdHNiaW5kZXgvaW9fYXR0cmlidXRlcwotICoJCUVCQURBTElHTglJbXByb3Blcmx5IGFsaWduZWQgcmVhbCBhZGRyZXNzCi0gKgkJRU5PUkFERFIJSW52YWxpZCByZWFsIGFkZHJlc3MKLSAqCi0gKiBDcmVhdGUgSU9NTVUgbWFwcGluZ3MgaW4gdGhlIHN1bjR2IGRldmljZSBkZWZpbmVkIGJ5IHRoZSBnaXZlbgotICogZGV2aGFuZGxlLiAgVGhlIG1hcHBpbmdzIGFyZSBjcmVhdGVkIGluIHRoZSBUU0IgZGVmaW5lZCBieSB0aGUKLSAqIHRzYm51bSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHRzYmlkLiAgVGhlIGZpcnN0IG1hcHBpbmcgaXMgY3JlYXRlZAotICogaW4gdGhlIFRTQiBpIG5kZXggZGVmaW5lZCBieSB0aGUgdHNiaW5kZXggY29tcG9uZW50IG9mIHRoZSBnaXZlbiB0c2JpZC4KLSAqIFRoZSBjYWxsIGNyZWF0ZXMgdXAgdG8gI3R0ZXMgbWFwcGluZ3MsIHRoZSBmaXJzdCBvbmUgYXQgdHNibnVtLCB0c2JpbmRleCwKLSAqIHRoZSBzZWNvbmQgYXQgdHNibnVtLCB0c2JpbmRleCArIDEsIGV0Yy4KLSAqCi0gKiBBbGwgbWFwcGluZ3MgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGJ5IHRoZSBpb19hdHRyaWJ1dGVzCi0gKiBhcmd1bWVudC4gIFRoZSBwYWdlIG1hcHBpbmcgYWRkcmVzc2VzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGlvX3BhZ2VfbGlzdAotICogZGVmaW5lZCBieSB0aGUgZ2l2ZW4gaW9fcGFnZV9saXN0X3AsIHdoaWNoIGlzIGEgcG9pbnRlciB0byB0aGUgaW9fcGFnZV9saXN0LgotICogVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBpb19wYWdlX2xpc3QgaXMgdGhlIGFkZHJlc3MgZm9yIHRoZSBmaXJzdCBpb3R0ZSwgdGhlCi0gKiAybmQgZm9yIHRoZSAybmQgaW90dGUsIGFuZCBzbyBvbi4KLSAqCi0gKiBFYWNoIGlvX3BhZ2VfYWRkcmVzcyBpbiB0aGUgaW9fcGFnZV9saXN0IG11c3QgYmUgYXBwcm9wcmlhdGVseSBhbGlnbmVkLgotICogI3R0ZXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4gIEZvciB0aGlzIHZlcnNpb24gb2YgdGhlIHNwZWMsIHRoZSB0c2JudW0KLSAqIGNvbXBvbmVudCBvZiB0aGUgZ2l2ZW4gdHNiaWQgbXVzdCBiZSB6ZXJvLgotICoKLSAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgbWFwcGluZ3MgY3JlYXRlcywgd2hpY2ggbWF5IGJlIGxlc3MgdGhhbgotICogb3IgZXF1YWwgdG8gdGhlIGFyZ3VtZW50ICN0dGVzLiAgSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSB3aGljaAotICogaXMgbGVzcyB0aGFuIHRoZSAjdHRlcywgdGhlIGNhbGxlciBtYXkgY29udGludXMgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aAotICogYW4gdXBkYXRlZCB0c2JpZCwgI3R0ZXMsIGlvX3BhZ2VfbGlzdF9wIGFyZ3VtZW50cyB1bnRpbCBhbGwgcGFnZXMgYXJlCi0gKiBtYXBwZWQuCi0gKgotICogTm90ZTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBpbXBseSBhbiBpb3R0ZSBjYWNoZSBmbHVzaC4gIFRoZSBndWVzdCBtdXN0Ci0gKiAgICAgICBkZW1hcCBhbiBlbnRyeSBiZWZvcmUgcmUtbWFwcGluZyBpdC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1BDSV9JT01NVV9NQVAJCTB4YjAKLQotLyogcGNpX2lvbW11X2RlbWFwKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX0lPTU1VX0RFTUFQCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CXRzYmlkCi0gKiBBUkcyOgkjdHRlcwotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgkjdHRlcyBkZW1hcHBlZAotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlL3RzYm51bS90c2JpbmRleAotICoKLSAqIERlbWFwIGFuZCBmbHVzaCBJT01NVSBtYXBwaW5ncyBpbiB0aGUgZGV2aWNlIGRlZmluZWQgYnkgdGhlIGdpdmVuCi0gKiBkZXZoYW5kbGUuICBEZW1hcHMgdXAgdG8gI3R0ZXMgZW50cmllcyBpbiB0aGUgVFNCIGRlZmluZWQgYnkgdGhlIHRzYm51bQotICogY29tcG9uZW50IG9mIHRoZSBnaXZlbiB0c2JpZCwgc3RhcnRpbmcgYXQgdGhlIFRTQiBpbmRleCBkZWZpbmVkIGJ5IHRoZQotICogdHNiaW5kZXggY29tcG9uZW50IG9mIHRoZSBnaXZlbiB0c2JpZC4KLSAqCi0gKiBGb3IgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzcGVjLCB0aGUgdHNibnVtIG9mIHRoZSBnaXZlbiB0c2JpZCBtdXN0IGJlIHplcm8uCi0gKiAjdHRlcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgotICoKLSAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgdHRlcyBkZW1hcHBlZCwgd2hpY2ggbWF5IGJlIGxlc3MgdGhhbiBvciBlcXVhbAotICogdG8gdGhlIGFyZ3VtZW50ICN0dGVzLiAgSWYgI3R0ZXMgZGVtYXBwZWQgaXMgbGVzcyB0aGFuICN0dGVzLCB0aGUgY2FsbGVyCi0gKiBtYXkgY29udGludWUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdXBkYXRlZCB0c2JpZCBhbmQgI3R0ZXMgYXJndW1lbnRzCi0gKiB1bnRpbCBhbGwgcGFnZXMgYXJlIGRlbWFwcGVkLgotICoKLSAqIE5vdGU6IEVudHJpZXMgZG8gbm90IGhhdmUgdG8gYmUgbWFwcGVkIHRvIGJlIGRlbWFwcGVkLiAgQSBkZW1hcCBvZiBhbgotICogICAgICAgdW5tYXBwZWQgcGFnZSB3aWxsIGZsdXNoIHRoZSBlbnRyeSBmcm9tIHRoZSB0dGUgY2FjaGUuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfSU9NTVVfREVNQVAJCTB4YjEKLQotLyogcGNpX2lvbW11X2dldG1hcCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9JT01NVV9HRVRNQVAKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJdHNiaWQKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJaW9fYXR0cmlidXRlcwotICogUkVUMjoJcmVhbCBhZGRyZXNzCi0gKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUvdHNibnVtL3RzYmluZGV4Ci0gKgkJRU5PTUFQCQlNYXBwaW5nIGlzIG5vdCB2YWxpZCwgbm8gdHJhbnNsYXRpb24gZXhpc3RzCi0gKgotICogUmVhZCBhbmQgcmV0dXJuIHRoZSBtYXBwaW5nIGluIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUKLSAqIGFuZCB0c2JpZC4gIElmIHN1Y2Nlc3NmdWwsIHRoZSBpb19hdHRyaWJ1dGVzIHNoYWxsIGJlIHJldHVybmVkIGluIFJFVDEKLSAqIGFuZCB0aGUgcGFnZSBhZGRyZXNzIG9mIHRoZSBtYXBwaW5nIHNoYWxsIGJlIHJldHVybmVkIGluIFJFVDIuCi0gKgotICogRm9yIHRoaXMgdmVyc2lvbiBvZiB0aGUgc3BlYywgdGhlIHRzYm51bSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHRzYmlkCi0gKiBtdXN0IGJlIHplcm8uCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfSU9NTVVfR0VUTUFQCTB4YjIKLQotLyogcGNpX2lvbW11X2dldGJ5cGFzcygpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9JT01NVV9HRVRCWVBBU1MKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJcmVhbCBhZGRyZXNzCi0gKiBBUkcyOglpb19hdHRyaWJ1dGVzCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWlvX2FkZHIKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS9pb19hdHRyaWJ1dGVzCi0gKgkJRU5PUkFERFIJSW52YWxpZCByZWFsIGFkZHJlc3MKLSAqCQlFTk9UU1VQUE9SVEVECUZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBDcmVhdGUgYSAic3BlY2lhbCIgbWFwcGluZyBpbiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlLAotICogZm9yIHRoZSBnaXZlbiByZWFsIGFkZHJlc3MgYW5kIGF0dHJpYnV0ZXMuICBSZXR1cm4gdGhlIElPIGFkZHJlc3MgaW4gUkVUMQotICogaWYgc3VjY2Vzc2Z1bC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1BDSV9JT01NVV9HRVRCWVBBU1MJMHhiMwotCi0vKiBwY2lfY29uZmlnX2dldCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9DT05GSUdfR0VUCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CXBjaV9kZXZpY2UKLSAqIEFSRzI6CXBjaV9jb25maWdfb2Zmc2V0Ci0gKiBBUkczOglzaXplCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWVycm9yX2ZsYWcKLSAqIFJFVDI6CWRhdGEKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS9wY2lfZGV2aWNlL29mZnNldC9zaXplCi0gKgkJRUJBREFMSUdOCXBjaV9jb25maWdfb2Zmc2V0IG5vdCBzaXplIGFsaWduZWQKLSAqCQlFTk9BQ0NFU1MJQWNjZXNzIHRvIHRoaXMgb2Zmc2V0IGlzIG5vdCBwZXJtaXR0ZWQKLSAqCi0gKiBSZWFkIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGZvciB0aGUgYWRhcHRlciBkZXNjcmliZWQgYnkgdGhlIGdpdmVuCi0gKiBkZXZoYW5kbGUuICBSZWFkIHNpemUgKDEsIDIsIG9yIDQpIGJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgZ2l2ZW4KLSAqIHBjaV9kZXZpY2UsIGF0IHBjaV9jb25maWdfb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2aWNlJ3MKLSAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuICBJZiB0aGVyZSB3YXMgbm8gZXJyb3IsIFJFVDEgaXMgc2V0IHRvIHplcm8gYW5kCi0gKiBSRVQyIGlzIHNldCB0byB0aGUgZGF0YSByZWFkLiAgSW5zaWduaWZpY2FudCBiaXRzIGluIFJFVDIgYXJlIG5vdAotICogZ3VhcmVudGVlZCB0byBoYXZlIGFueSBzcGVjaWZpYyB2YWx1ZSBhbmQgdGhlcmVmb3JlIG11c3QgYmUgaWdub3JlZC4KLSAqCi0gKiBUaGUgZGF0YSByZXR1cm5lZCBpbiBSRVQyIGlzIHNpemUgYmFzZWQgYnl0ZSBzd2FwcGVkLgotICoKLSAqIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIHJlYWQsIHNldCBSRVQxIHRvIGEgbm9uLXplcm8gdmFsdWUuICBUaGUKLSAqIGdpdmVuIHBjaV9jb25maWdfb2Zmc2V0IG11c3QgYmUgJ3NpemUnIGFsaWduZWQuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfQ09ORklHX0dFVAkJMHhiNAotCi0vKiBwY2lfY29uZmlnX3B1dCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9DT05GSUdfUFVUCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CXBjaV9kZXZpY2UKLSAqIEFSRzI6CXBjaV9jb25maWdfb2Zmc2V0Ci0gKiBBUkczOglzaXplCi0gKiBBUkc0OglkYXRhCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWVycm9yX2ZsYWcKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS9wY2lfZGV2aWNlL29mZnNldC9zaXplCi0gKgkJRUJBREFMSUdOCXBjaV9jb25maWdfb2Zmc2V0IG5vdCBzaXplIGFsaWduZWQKLSAqCQlFTk9BQ0NFU1MJQWNjZXNzIHRvIHRoaXMgb2Zmc2V0IGlzIG5vdCBwZXJtaXR0ZWQKLSAqCi0gKiBXcml0ZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgdGhlIGFkYXB0ZXIgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbgotICogZGV2aGFuZGxlLiAgV3JpdGUgc2l6ZSAoMSwgMiwgb3IgNCkgYnl0ZXMgb2YgZGF0YSBpbiBhIHNpbmdsZSBvcGVyYXRpb24sCi0gKiBhdCBwY2lfY29uZmlnX29mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRldmljZSdzIGNvbmZpZ3VyYXRpb24KLSAqIHNwYWNlLiAgVGhlIGRhdGEgYXJndW1lbnQgY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byBjb25maWd1cmF0aW9uCi0gKiBzcGFjZS4gIFByaW9yIHRvIHdyaXRpbmcsIHRoZSBkYXRhIGlzIHNpemUgYmFzZWQgYnl0ZSBzd2FwcGVkLgotICoKLSAqIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIHdyaXRlIGFjY2VzcywgZG8gbm90IGdlbmVyYXRlIGFuIGVycm9yCi0gKiByZXBvcnQsIGRvIHNldCBSRVQxIHRvIGEgbm9uLXplcm8gdmFsdWUuICBPdGhlcndpc2UgUkVUMSBpcyB6ZXJvLgotICogVGhlIGdpdmVuIHBjaV9jb25maWdfb2Zmc2V0IG11c3QgYmUgJ3NpemUnIGFsaWduZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBwZXJtaXR0ZWQgdG8gcmVhZCBmcm9tIG9mZnNldCB6ZXJvIGluIHRoZSBjb25maWd1cmF0aW9uCi0gKiBzcGFjZSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIHBjaV9kZXZpY2UgaWYgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZQotICogd3JpdGUgYWNjZXNzIHRvIGNvbmZpZyBzcGFjZSBjb21wbGV0ZXMuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfQ09ORklHX1BVVAkJMHhiNQotCi0vKiBwY2lfcGVlaygpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9QRUVLCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CXJlYWwgYWRkcmVzcwotICogQVJHMjoJc2l6ZQotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgllcnJvcl9mbGFnCi0gKiBSRVQyOglkYXRhCi0gKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3Igc2l6ZQotICoJCUVCQURBTElHTglJbXByb3Blcmx5IGFsaWduZWQgcmVhbCBhZGRyZXNzCi0gKgkJRU5PUkFERFIJQmFkIHJlYWwgYWRkcmVzcwotICoJCUVOT0FDQ0VTUwlHdWVzdCBhY2Nlc3MgcHJvaGliaXRlZAotICoKLSAqIEF0dGVtcHQgdG8gcmVhZCB0aGUgSU8gYWRkcmVzcyBnaXZlbiBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlLCByZWFsIGFkZHJlc3MsCi0gKiBhbmQgc2l6ZS4gIFNpemUgbXVzdCBiZSAxLCAyLCA0LCBvciA4LiAgVGhlIHJlYWQgaXMgcGVyZm9ybWVkIGFzIGEgc2luZ2xlCi0gKiBhY2Nlc3Mgb3BlcmF0aW9uIHVzaW5nIHRoZSBnaXZlbiBzaXplLiAgSWYgYW4gZXJyb3Igb2NjdXJzIHdoZW4gcmVhZGluZwotICogZnJvbSB0aGUgZ2l2ZW4gbG9jYXRpb24sIGRvIG5vdCBnZW5lcmF0ZSBhbiBlcnJvciByZXBvcnQsIGJ1dCByZXR1cm4gYQotICogbm9uLXplcm8gdmFsdWUgaW4gUkVUMS4gIElmIHRoZSByZWFkIHdhcyBzdWNjZXNzZnVsLCByZXR1cm4gemVybyBpbiBSRVQxCi0gKiBhbmQgcmV0dXJuIHRoZSBhY3R1YWwgZGF0YSByZWFkIGluIFJFVDIuICBUaGUgZGF0YSByZXR1cm5lZCBpcyBzaXplIGJhc2VkCi0gKiBieXRlIHN3YXBwZWQuCi0gKgotICogTm9uLXNpZ25pZmljYW50IGJpdHMgaW4gUkVUMiBhcmUgbm90IGd1YXJlbnRlZWQgdG8gaGF2ZSBhbnkgc3BlY2lmaWMgdmFsdWUKLSAqIGFuZCB0aGVyZWZvcmUgbXVzdCBiZSBpZ25vcmVkLiAgSWYgUkVUMSBpcyByZXR1cm5lZCBhcyBub24temVybywgdGhlIGRhdGEgCi0gKiB2YWx1ZSBpcyBub3QgZ3VhcmVudGVlZCB0byBoYXZlIGFueSBzcGVjaWZpYyB2YWx1ZSBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhhdmUgcGVybWlzc2lvbiB0byByZWFkIGZyb20gdGhlIGdpdmVuIGRldmhhbmRsZSwgcmVhbAotICogYWRkcmVzcywgd2hpY2ggbXVzdCBiZSBhbiBJTyBhZGRyZXNzLiAgVGhlIGFyZ3VtZW50IHJlYWwgYWRkcmVzcyBtdXN0IGJlIGEKLSAqIHNpemUgYWxpZ25lZCBhZGRyZXNzLgotICoKLSAqIFRoZSBoeXBlcnZpc29yIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBibG9jayBhY2Nlc3MgdG8gYW55Ci0gKiBJTyBhZGRyZXNzIHRoYXQgdGhlIGd1ZXN0IGRvZXMgbm90IGhhdmUgZXhwbGljaXQgcGVybWlzc2lvbiB0byBhY2Nlc3MuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfUEVFSwkJMHhiNgotCi0vKiBwY2lfcG9rZSgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9QT0tFCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CXJlYWwgYWRkcmVzcwotICogQVJHMjoJc2l6ZQotICogQVJHMzoJZGF0YQotICogQVJHNDoJcGNpX2RldmljZQotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgllcnJvcl9mbGFnCi0gKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUsIHNpemUsIG9yIHBjaV9kZXZpY2UKLSAqCQlFQkFEQUxJR04JSW1wcm9wZXJseSBhbGlnbmVkIHJlYWwgYWRkcmVzcwotICoJCUVOT1JBRERSCUJhZCByZWFsIGFkZHJlc3MKLSAqCQlFTk9BQ0NFU1MJR3Vlc3QgYWNjZXNzIHByb2hpYml0ZWQKLSAqCQlFTk9UU1VQUE9SVEVECUZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgaW1wbGVtZW50YXRpb24KLSAqCi0gKiBBdHRlbXB0IHRvIHdyaXRlIGRhdGEgdG8gdGhlIElPIGFkZHJlc3MgZ2l2ZW4gYnkgdGhlIGdpdmVuIGRldmhhbmRsZSwKLSAqIHJlYWwgYWRkcmVzcywgYW5kIHNpemUuICBTaXplIG11c3QgYmUgMSwgMiwgNCwgb3IgOC4gIFRoZSB3cml0ZSBpcwotICogcGVyZm9ybWVkIGFzIGEgc2luZ2xlIGFjY2VzcyBvcGVyYXRpb24gdXNpbmcgdGhlIGdpdmVuIHNpemUuIFByaW9yIHRvCi0gKiB3cml0aW5nIHRoZSBkYXRhIGlzIHNpemUgYmFzZWQgc3dhcHBlZC4KLSAqCi0gKiBJZiBhbiBlcnJvciBvY2N1cnMgd2hlbiB3cml0aW5nIHRvIHRoZSBnaXZlbiBsb2NhdGlvbiwgZG8gbm90IGdlbmVyYXRlIGFuCi0gKiBlcnJvciByZXBvcnQsIGJ1dCByZXR1cm4gYSBub24temVybyB2YWx1ZSBpbiBSRVQxLiAgSWYgdGhlIHdyaXRlIHdhcwotICogc3VjY2Vzc2Z1bCwgcmV0dXJuIHplcm8gaW4gUkVUMS4KLSAqCi0gKiBwY2lfZGV2aWNlIGRlc2NyaWJlcyB0aGUgY29uZmlndXJhdGlvbiBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgYmVpbmcKLSAqIHdyaXR0ZW4gdG8uICBUaGUgaW1wbGVtZW50YXRpb24gbWF5IHNhZmVseSByZWFkIGZyb20gb2Zmc2V0IDAgd2l0aAotICogdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2Ugb2YgdGhlIGRldmljZSBkZXNjcmliZWQgYnkgZGV2aGFuZGxlIGFuZAotICogcGNpX2RldmljZSBpbiBvcmRlciB0byBndWFyYW50ZWUgdGhhdCB0aGUgd3JpdGUgcG9ydGlvbiBvZiB0aGUgb3BlcmF0aW9uCi0gKiBjb21wbGV0ZXMKLSAqCi0gKiBBbnkgZXJyb3IgdGhhdCBvY2N1cnMgZHVlIHRvIHRoZSByZWFkIHNoYWxsIGJlIHJlcG9ydGVkIHVzaW5nIHRoZSBub3JtYWwKLSAqIGVycm9yIHJlcG9ydGluZyBtZWNoYW5pc21zIC4uIHRoZSByZWFkIGVycm9yIGlzIG5vdCBzdXBwcmVzc2VkLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gdGhlIGdpdmVuIGRldmhhbmRsZSwgcmVhbAotICogYWRkcmVzcywgd2hpY2ggbXVzdCBiZSBhbiBJTyBhZGRyZXNzLiAgVGhlIGFyZ3VtZW50IHJlYWwgYWRkcmVzcyBtdXN0IGJlIGEKLSAqIHNpemUgYWxpZ25lZCBhZGRyZXNzLiAgVGhlIGNhbGxlciBtdXN0IGhhdmUgcGVybWlzc2lvbiB0byByZWFkIGZyb20KLSAqIHRoZSBnaXZlbiBkZXZoYW5kbGUsIHBjaV9kZXZpY2UgY29maWd1cmF0aW9uIHNwYWNlIG9mZnNldCAwLgotICoKLSAqIFRoZSBoeXBlcnZpc29yIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBibG9jayBhY2Nlc3MgdG8gYW55Ci0gKiBJTyBhZGRyZXNzIHRoYXQgdGhlIGd1ZXN0IGRvZXMgbm90IGhhdmUgZXhwbGljaXQgcGVybWlzc2lvbiB0byBhY2Nlc3MuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfUE9LRQkJMHhiNwotCi0vKiBwY2lfZG1hX3N5bmMoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfRE1BX1NZTkMKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJcmVhbCBhZGRyZXNzCi0gKiBBUkcyOglzaXplCi0gKiBBUkczOglpb19zeW5jX2RpcmVjdGlvbgotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgkjc3luY2VkCi0gKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgaW9fc3luY19kaXJlY3Rpb24KLSAqCQlFTk9SQUREUglCYWQgcmVhbCBhZGRyZXNzCi0gKgotICogU3luY2hyb25pemUgYSBtZW1vcnkgcmVnaW9uIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gcmVhbCBhZGRyZXNzIGFuZCBzaXplLAotICogZm9yIHRoZSBkZXZpY2UgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIHVzaW5nIHRoZSBkaXJlY3Rpb24ocykKLSAqIGRlZmluZWQgYnkgdGhlIGdpdmVuIGlvX3N5bmNfZGlyZWN0aW9uLiAgVGhlIGFyZ3VtZW50IHNpemUgaXMgdGhlIHNpemUgb2YKLSAqIHRoZSBtZW1vcnkgcmVnaW9uIGluIGJ5dGVzLgotICoKLSAqIFJldHVybiB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyBzeW5jaHJvbml6ZWQgaW4gdGhlIHJldHVybiB2YWx1ZSAjc3luY2VkLAotICogd2hpY2ggbWF5IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYXJndW1lbnQgc2l6ZS4gIElmIHRoZSByZXR1cm4KLSAqIHZhbHVlICNzeW5jZWQgaXMgbGVzcyB0aGFuIHNpemUsIHRoZSBjYWxsZXIgbXVzdCBjb250aW51ZSB0byBjYWxsIHRoaXMKLSAqIGZ1bmN0aW9uIHdpdGggdXBkYXRlZCByZWFsIGFkZHJlc3MgYW5kIHNpemUgYXJndW1lbnRzIHVudGlsIHRoZSBlbnRpcmUKLSAqIG1lbW9yeSByZWdpb24gaXMgc3luY2hyb25pemVkLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfUENJX0RNQV9TWU5DCQkweGI4Ci0KLS8qIFBDSSBNU0kgc2VydmljZXMuICAqLwotCi0jZGVmaW5lIEhWX01TSVRZUEVfTVNJMzIJCTB4MDAKLSNkZWZpbmUgSFZfTVNJVFlQRV9NU0k2NAkJMHgwMQotCi0jZGVmaW5lIEhWX01TSVFTVEFURV9JRExFCQkweDAwCi0jZGVmaW5lIEhWX01TSVFTVEFURV9FUlJPUgkJMHgwMQotCi0jZGVmaW5lIEhWX01TSVFfSU5WQUxJRAkJCTB4MDAKLSNkZWZpbmUgSFZfTVNJUV9WQUxJRAkJCTB4MDEKLQotI2RlZmluZSBIVl9NU0lTVEFURV9JRExFCQkweDAwCi0jZGVmaW5lIEhWX01TSVNUQVRFX0RFTElWRVJFRAkJMHgwMQotCi0jZGVmaW5lIEhWX01TSVZBTElEX0lOVkFMSUQJCTB4MDAKLSNkZWZpbmUgSFZfTVNJVkFMSURfVkFMSUQJCTB4MDEKLQotI2RlZmluZSBIVl9QQ0lFX01TR1RZUEVfUE1FX01TRwkJMHgxOAotI2RlZmluZSBIVl9QQ0lFX01TR1RZUEVfUE1FX0FDS19NU0cJMHgxYgotI2RlZmluZSBIVl9QQ0lFX01TR1RZUEVfQ09SUl9NU0cJMHgzMAotI2RlZmluZSBIVl9QQ0lFX01TR1RZUEVfTk9ORkFUQUxfTVNHCTB4MzEKLSNkZWZpbmUgSFZfUENJRV9NU0dUWVBFX0ZBVEFMX01TRwkweDMzCi0KLSNkZWZpbmUgSFZfTVNHX0lOVkFMSUQJCQkweDAwCi0jZGVmaW5lIEhWX01TR19WQUxJRAkJCTB4MDEKLQotLyogcGNpX21zaXFfY29uZigpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lRX0NPTkYKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJbXNpcWlkCi0gKiBBUkcyOglyZWFsIGFkZHJlc3MKLSAqIEFSRzM6CW51bWJlciBvZiBlbnRyaWVzCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSwgbXNpcWlkIG9yIG5lbnRyaWVzCi0gKgkJRUJBREFMSUdOCUltcHJvcGVybHkgYWxpZ25lZCByZWFsIGFkZHJlc3MKLSAqCQlFTk9SQUREUglCYWQgcmVhbCBhZGRyZXNzCi0gKgotICogQ29uZmlndXJlIHRoZSBNU0kgcXVldWUgZ2l2ZW4gYnkgdGhlIGRldmhhbmRsZSBhbmQgbXNpcWlkIGFyZ3VtZW50cywKLSAqIGFuZCB0byBiZSBwbGFjZWQgYXQgdGhlIGdpdmVuIHJlYWwgYWRkcmVzcyBhbmQgYmUgb2YgdGhlIGdpdmVuCi0gKiBudW1iZXIgb2YgZW50cmllcy4gIFRoZSByZWFsIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkIGV4YWN0bHkgdG8gbWF0Y2gKLSAqIHRoZSBxdWV1ZSBzaXplLiAgRWFjaCBxdWV1ZSBlbnRyeSBpcyA2NC1ieXRlcyBsb25nLCBzbyBmLmUuIGEgMzIgZW50cnkKLSAqIHF1ZXVlIG11c3QgYmUgYWxpZ25lZCBvbiBhIDIwNDggYnl0ZSByZWFsIGFkZHJlc3MgYm91bmRhcnkuICBUaGUgTVNJLUVRCi0gKiBIZWFkIGFuZCBUYWlsIGFyZSBpbml0aWFsaXplZCBzbyB0aGF0IHRoZSBNU0ktRVEgaXMgJ2VtcHR5Jy4KLSAqCi0gKiBJbXBsZW1lbnRhdGlvbiBOb3RlOiBDZXJ0YWluIGltcGxlbWVudGF0aW9ucyBoYXZlIGZpeGVkIHNpemVkIHF1ZXVlcy4gIEluCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNhc2UsIG51bWJlciBvZiBlbnRyaWVzIG11c3QgY29udGFpbiB0aGUgY29ycmVjdAotICogICAgICAgICAgICAgICAgICAgICAgdmFsdWUuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJUV9DT05GCQkweGMwCi0KLS8qIHBjaV9tc2lxX2luZm8oKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJUV9JTkZPCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CW1zaXFpZAotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglyZWFsIGFkZHJlc3MKLSAqIFJFVDI6CW51bWJlciBvZiBlbnRyaWVzCi0gKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpcWlkCi0gKgotICogUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgTVNJIHF1ZXVlIGRlc2NyaWJlZAotICogYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNpcWlkLiAgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgcXVldWUKLSAqIGlzIHJldHVybmVkIGluIEFSRzEgYW5kIHRoZSBudW1iZXIgb2YgZW50cmllcyBpcyByZXR1cm5lZCBpbiBBUkcyLgotICogSWYgdGhlIHF1ZXVlIGlzIHVuY29uZmlndXJlZCwgdGhlIHJlYWwgYWRkcmVzcyBpcyB1bmRlZmluZWQgYW5kIHRoZQotICogbnVtYmVyIG9mIGVudHJpZXMgd2lsbCBiZSByZXR1cm5lZCBhcyB6ZXJvLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfUENJX01TSVFfSU5GTwkJMHhjMQotCi0vKiBwY2lfbXNpcV9nZXR2YWxpZCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lRX0dFVFZBTElECi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CW1zaXFpZAotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgltc2lxdmFsaWQJKEhWX01TSVFfVkFMSUQgb3IgSFZfTVNJUV9JTlZBTElEKQotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZAotICoKLSAqIEdldCB0aGUgdmFsaWQgc3RhdGUgb2YgdGhlIE1TSS1FUSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQKLSAqIG1zaXFpZC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX0dFVFZBTElECTB4YzIKLQotLyogcGNpX21zaXFfc2V0dmFsaWQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJUV9TRVRWQUxJRAotICogQVJHMDoJZGV2aGFuZGxlCi0gKiBBUkcxOgltc2lxaWQKLSAqIEFSRzI6CW1zaXF2YWxpZAkoSFZfTVNJUV9WQUxJRCBvciBIVl9NU0lRX0lOVkFMSUQpCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2lxaWQgb3IgbXNpcXZhbGlkCi0gKgkJCQl2YWx1ZSBvciBNU0kgRVEgaXMgdW5pbml0aWFsaXplZAotICoKLSAqIFNldCB0aGUgdmFsaWQgc3RhdGUgb2YgdGhlIE1TSS1FUSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQKLSAqIG1zaXFpZCB0byB0aGUgZ2l2ZW4gbXNpcXZhbGlkLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfUENJX01TSVFfU0VUVkFMSUQJMHhjMwotCi0vKiBwY2lfbXNpcV9nZXRzdGF0ZSgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lRX0dFVFNUQVRFCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CW1zaXFpZAotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgltc2lxc3RhdGUJKEhWX01TSVFTVEFURV9JRExFIG9yIEhWX01TSVFTVEFURV9FUlJPUikKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2lxaWQKLSAqCi0gKiBHZXQgdGhlIHN0YXRlIG9mIHRoZSBNU0ktRVEgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kCi0gKiBtc2lxaWQuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJUV9HRVRTVEFURQkweGM0Ci0KLS8qIHBjaV9tc2lxX2dldHZhbGlkKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSVFfR0VUVkFMSUQKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJbXNpcWlkCi0gKiBBUkcyOgltc2lxc3RhdGUJKEhWX01TSVFTVEFURV9JRExFIG9yIEhWX01TSVFTVEFURV9FUlJPUikKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZCBvciBtc2lxc3RhdGUKLSAqCQkJCXZhbHVlIG9yIE1TSSBFUSBpcyB1bmluaXRpYWxpemVkCi0gKgotICogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgTVNJLUVRIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZAotICogbXNpcWlkIHRvIHRoZSBnaXZlbiBtc2lxdmFsaWQuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJUV9TRVRTVEFURQkweGM1Ci0KLS8qIHBjaV9tc2lxX2dldGhlYWQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJUV9HRVRIRUFECi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CW1zaXFpZAotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgltc2lxaGVhZAotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZAotICoKLSAqIEdldCB0aGUgY3VycmVudCBNU0kgRVEgcXVldWUgaGVhZCBmb3IgdGhlIE1TSS1FUSBkZXNjcmliZWQgYnkgdGhlCi0gKiBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaXFpZC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX0dFVEhFQUQJMHhjNgotCi0vKiBwY2lfbXNpcV9zZXRoZWFkKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSVFfU0VUSEVBRAotICogQVJHMDoJZGV2aGFuZGxlCi0gKiBBUkcxOgltc2lxaWQKLSAqIEFSRzI6CW1zaXFoZWFkCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2lxaWQgb3IgbXNpcWhlYWQsCi0gKgkJCQlvciBNU0kgRVEgaXMgdW5pbml0aWFsaXplZAotICoKLSAqIFNldCB0aGUgY3VycmVudCBNU0kgRVEgcXVldWUgaGVhZCBmb3IgdGhlIE1TSS1FUSBkZXNjcmliZWQgYnkgdGhlCi0gKiBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaXFpZC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX1NFVEhFQUQJMHhjNwotCi0vKiBwY2lfbXNpcV9nZXR0YWlsKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSVFfR0VUVEFJTAotICogQVJHMDoJZGV2aGFuZGxlCi0gKiBBUkcxOgltc2lxaWQKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJbXNpcXRhaWwKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2lxaWQKLSAqCi0gKiBHZXQgdGhlIGN1cnJlbnQgTVNJIEVRIHF1ZXVlIHRhaWwgZm9yIHRoZSBNU0ktRVEgZGVzY3JpYmVkIGJ5IHRoZQotICogZ2l2ZW4gZGV2aGFuZGxlIGFuZCBtc2lxaWQuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJUV9HRVRUQUlMCTB4YzgKLQotLyogcGNpX21zaV9nZXR2YWxpZCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lfR0VUVkFMSUQKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJbXNpbnVtCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CW1zaXZhbGlkc3RhdGUKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2ludW0KLSAqCi0gKiBHZXQgdGhlIGN1cnJlbnQgdmFsaWQvZW5hYmxlZCBzdGF0ZSBmb3IgdGhlIE1TSSBkZWZpbmVkIGJ5IHRoZQotICogZ2l2ZW4gZGV2aGFuZGxlIGFuZCBtc2ludW0uCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJX0dFVFZBTElECTB4YzkKLQotLyogcGNpX21zaV9zZXR2YWxpZCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lfU0VUVkFMSUQKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJbXNpbnVtCi0gKiBBUkcyOgltc2l2YWxpZHN0YXRlCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2ludW0gb3IgbXNpdmFsaWRzdGF0ZQotICoKLSAqIFNldCB0aGUgY3VycmVudCB2YWxpZC9lbmFibGVkIHN0YXRlIGZvciB0aGUgTVNJIGRlZmluZWQgYnkgdGhlCi0gKiBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaW51bS4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lfU0VUVkFMSUQJMHhjYQotCi0vKiBwY2lfbXNpX2dldG1zaXEoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJX0dFVE1TSVEKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJbXNpbnVtCi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CW1zaXFpZAotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bSBvciBNU0kgaXMgdW5ib3VuZAotICoKLSAqIEdldCB0aGUgTVNJIEVRIHRoYXQgdGhlIE1TSSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kCi0gKiBtc2ludW0gaXMgYm91bmQgdG8uCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJX0dFVE1TSVEJCTB4Y2IKLQotLyogcGNpX21zaV9zZXRtc2lxKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSV9TRVRNU0lRCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CW1zaW51bQotICogQVJHMjoJbXNpdHlwZQotICogQVJHMzoJbXNpcWlkCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2ludW0gb3IgbXNpcWlkCi0gKgotICogU2V0IHRoZSBNU0kgRVEgdGhhdCB0aGUgTVNJIGRlZmluZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQKLSAqIG1zaW51bSBpcyBib3VuZCB0by4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lfU0VUTVNJUQkJMHhjYwotCi0vKiBwY2lfbXNpX2dldHN0YXRlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSV9HRVRTVEFURQotICogQVJHMDoJZGV2aGFuZGxlCi0gKiBBUkcxOgltc2ludW0KLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJbXNpc3RhdGUKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2ludW0KLSAqCi0gKiBHZXQgdGhlIHN0YXRlIG9mIHRoZSBNU0kgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZCBtc2ludW0uCi0gKiBJZiBub3QgaW5pdGlhbGl6ZWQsIHJldHVybiBIVl9NU0lTVEFURV9JRExFLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfUENJX01TSV9HRVRTVEFURQkweGNkCi0KLS8qIHBjaV9tc2lfc2V0c3RhdGUoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJX1NFVFNUQVRFCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CW1zaW51bQotICogQVJHMjoJbXNpc3RhdGUKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bSBvciBtc2lzdGF0ZQotICoKLSAqIFNldCB0aGUgc3RhdGUgb2YgdGhlIE1TSSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaW51bS4KLSAqLwotI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lfU0VUU1RBVEUJMHhjZQotCi0vKiBwY2lfbXNnX2dldG1zaXEoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNHX0dFVE1TSVEKLSAqIEFSRzA6CWRldmhhbmRsZQotICogQVJHMToJbXNndHlwZQotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOgltc2lxaWQKLSAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2d0eXBlCi0gKgotICogR2V0IHRoZSBNU0kgRVEgb2YgdGhlIE1TRyBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zZ3R5cGUuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNHX0dFVE1TSVEJCTB4ZDAKLQotLyogcGNpX21zZ19zZXRtc2lxKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TR19TRVRNU0lRCi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CW1zZ3R5cGUKLSAqIEFSRzI6CW1zaXFpZAotICogUkVUMDoJc3RhdHVzCi0gKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUsIG1zZ3R5cGUsIG9yIG1zaXFpZAotICoKLSAqIFNldCB0aGUgTVNJIEVRIG9mIHRoZSBNU0cgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZCBtc2d0eXBlLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfUENJX01TR19TRVRNU0lRCQkweGQxCi0KLS8qIHBjaV9tc2dfZ2V0dmFsaWQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNHX0dFVFZBTElECi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CW1zZ3R5cGUKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJbXNndmFsaWRzdGF0ZQotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zZ3R5cGUKLSAqCi0gKiBHZXQgdGhlIHZhbGlkL2VuYWJsZWQgc3RhdGUgb2YgdGhlIE1TRyBkZWZpbmVkIGJ5IHRoZSBnaXZlbgotICogZGV2aGFuZGxlIGFuZCBtc2d0eXBlLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfUENJX01TR19HRVRWQUxJRAkweGQyCi0KLS8qIHBjaV9tc2dfc2V0dmFsaWQoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNHX1NFVFZBTElECi0gKiBBUkcwOglkZXZoYW5kbGUKLSAqIEFSRzE6CW1zZ3R5cGUKLSAqIEFSRzI6CW1zZ3ZhbGlkc3RhdGUKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zZ3R5cGUgb3IgbXNndmFsaWRzdGF0ZQotICoKLSAqIFNldCB0aGUgdmFsaWQvZW5hYmxlZCBzdGF0ZSBvZiB0aGUgTVNHIGRlZmluZWQgYnkgdGhlIGdpdmVuCi0gKiBkZXZoYW5kbGUgYW5kIG1zZ3R5cGUuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNHX1NFVFZBTElECTB4ZDMKLQotLyogTG9naWNhbCBEb21haW4gQ2hhbm5lbCBzZXJ2aWNlcy4gICovCi0KLSNkZWZpbmUgTERDX0NIQU5ORUxfRE9XTgkJMAotI2RlZmluZSBMRENfQ0hBTk5FTF9VUAkJCTEKLSNkZWZpbmUgTERDX0NIQU5ORUxfUkVTRVRUSU5HCQkyCi0KLS8qIGxkY190eF9xY29uZigpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19UWF9RQ09ORgotICogQVJHMDoJY2hhbm5lbCBJRAotICogQVJHMToJcmVhbCBhZGRyZXNzIGJhc2Ugb2YgcXVldWUKLSAqIEFSRzI6CW51bSBlbnRyaWVzIGluIHF1ZXVlCi0gKiBSRVQwOglzdGF0dXMKLSAqCi0gKiBDb25maWd1cmUgdHJhbnNtaXQgcXVldWUgZm9yIHRoZSBMREMgZW5kcG9pbnQgc3BlY2lmaWVkIGJ5IHRoZQotICogZ2l2ZW4gY2hhbm5lbCBJRCwgdG8gYmUgcGxhY2VkIGF0IHRoZSBnaXZlbiByZWFsIGFkZHJlc3MsIGFuZAotICogYmUgb2YgdGhlIGdpdmVuIG51bSBlbnRyaWVzLiAgTnVtIGVudHJpZXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KLSAqIFRoZSByZWFsIGFkZHJlc3MgYmFzZSBvZiB0aGUgcXVldWUgbXVzdCBiZSBhbGlnbmVkIG9uIHRoZSBxdWV1ZQotICogc2l6ZS4gIEVhY2ggcXVldWUgZW50cnkgaXMgNjQtYnl0ZXMsIHNvIGZvciBleGFtcGxlLCBhIDMyIGVudHJ5Ci0gKiBxdWV1ZSBtdXN0IGJlIGFsaWduZWQgb24gYSAyMDQ4IGJ5dGUgcmVhbCBhZGRyZXNzIGJvdW5kYXJ5LgotICoKLSAqIFVwb24gY29uZmlndXJhdGlvbiBvZiBhIHZhbGlkIHRyYW5zbWl0IHF1ZXVlIHRoZSBoZWFkIGFuZCB0YWlsCi0gKiBwb2ludGVycyBhcmUgc2V0IHRvIGEgaHlwZXJ2aXNvciBzcGVjaWZpYyBpZGVudGljYWwgdmFsdWUgaW5kaWNhdGluZwotICogdGhhdCB0aGUgcXVldWUgaW5pdGlhbGx5IGlzIGVtcHR5LgotICoKLSAqIFRoZSBlbmRwb2ludCdzIHRyYW5zbWl0IHF1ZXVlIGlzIHVuLWNvbmZpZ3VyZWQgaWYgbnVtIGVudHJpZXMgaXMgemVyby4KLSAqCi0gKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBmb3IgZWFjaCBxdWV1ZSBmb3IgYSBzcGVjaWZpYyBjcHUgbWF5IGJlCi0gKiBkZXRlcm1pbmVkIGZyb20gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uICBBIHRyYW5zbWl0IHF1ZXVlIG1heSBiZQotICogc3BlY2lmaWVkIGV2ZW4gaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExEQyBpcyBkb3duIChwZWVyIGVuZHBvaW50IGhhcyBubwotICogcmVjZWl2ZSBxdWV1ZSBzcGVjaWZpZWQpLiAgVHJhbnNtaXNzaW9uIHdpbGwgYmVnaW4gYXMgc29vbiBhcyB0aGUgcGVlcgotICogZW5kcG9pbnQgZGVmaW5lcyBhIHJlY2VpdmUgcXVldWUuCi0gKgotICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhIGd1ZXN0IHdhaXQgZm9yIGEgdHJhbnNtaXQgcXVldWUgdG8gZW1wdHkgcHJpb3IKLSAqIHRvIHJlY29uZmlndXJpbmcgaXQsIG9yIHVuLWNvbmZpZ3VyaW5nIGl0LiAgUmUgb3IgdW4tY29uZmlndXJpbmcgb2YgYQotICogbm9uLWVtcHR5IHRyYW5zbWl0IHF1ZXVlIGJlaGF2ZXMgZXhhY3RseSBhcyBkZWZpbmVkIGFib3ZlLCBob3dldmVyIGl0Ci0gKiBpcyB1bmRlZmluZWQgYXMgdG8gaG93IG1hbnkgb2YgdGhlIHBlbmRpbmcgZW50cmllcyBpbiB0aGUgb3JpZ2luYWwgcXVldWUKLSAqIHdpbGwgYmUgZGVsaXZlcmVkIHByaW9yIHRvIHRoZSByZS1jb25maWd1cmF0aW9uIHRha2luZyBlZmZlY3QuCi0gKiBGdXJ0aGVybW9yZSwgYXMgdGhlIHF1ZXVlIGNvbmZpZ3VyYXRpb24gY2F1c2VzIGEgcmVzZXQgb2YgdGhlIGhlYWQgYW5kCi0gKiB0YWlsIHBvaW50ZXJzIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBndWVzdCB0byBkZXRlcm1pbmUgaG93IG1hbnkgZW50cmllcwotICogaGF2ZSBiZWVuIHNlbnQgYWZ0ZXIgdGhlIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9uLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTERDX1RYX1FDT05GCQkweGUwCi0KLS8qIGxkY190eF9xaW5mbygpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19UWF9RSU5GTwotICogQVJHMDoJY2hhbm5lbCBJRAotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglyZWFsIGFkZHJlc3MgYmFzZSBvZiBxdWV1ZQotICogUkVUMjoJbnVtIGVudHJpZXMgaW4gcXVldWUKLSAqCi0gKiBSZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gaW5mbyBmb3IgdGhlIHRyYW5zbWl0IHF1ZXVlIG9mIExEQyBlbmRwb2ludAotICogZGVmaW5lZCBieSB0aGUgZ2l2ZW4gY2hhbm5lbCBJRC4gIFRoZSByZWFsIGFkZHJlc3MgaXMgdGhlIGN1cnJlbnRseQotICogZGVmaW5lZCByZWFsIGFkZHJlc3MgYmFzZSBvZiB0aGUgZGVmaW5lZCBxdWV1ZSwgYW5kIG51bSBlbnRyaWVzIGlzIHRoZQotICogc2l6ZSBvZiB0aGUgcXVldWUgaW4gdGVybXMgb2YgbnVtYmVyIG9mIGVudHJpZXMuCi0gKgotICogSWYgdGhlIHNwZWNpZmllZCBjaGFubmVsIElEIGlzIGEgdmFsaWQgZW5kcG9pbnQgbnVtYmVyLCBidXQgbm8gdHJhbnNtaXQKLSAqIHF1ZXVlIGhhcyBiZWVuIGRlZmluZWQgdGhpcyBzZXJ2aWNlIHdpbGwgcmV0dXJuIHN1Y2Nlc3MsIGJ1dCB3aXRoIG51bQotICogZW50cmllcyBzZXQgdG8gemVybyBhbmQgdGhlIHJlYWwgYWRkcmVzcyB3aWxsIGhhdmUgYW4gdW5kZWZpbmVkIHZhbHVlLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTERDX1RYX1FJTkZPCQkweGUxCi0KLS8qIGxkY190eF9nZXRfc3RhdGUoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfVFhfR0VUX1NUQVRFCi0gKiBBUkcwOgljaGFubmVsIElECi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CWhlYWQgb2Zmc2V0Ci0gKiBSRVQyOgl0YWlsIG9mZnNldAotICogUkVUMzoJY2hhbm5lbCBzdGF0ZQotICoKLSAqIFJldHVybiB0aGUgdHJhbnNtaXQgc3RhdGUsIGFuZCB0aGUgaGVhZCBhbmQgdGFpbCBxdWV1ZSBwb2ludGVycywgZm9yCi0gKiB0aGUgdHJhbnNtaXQgcXVldWUgb2YgdGhlIExEQyBlbmRwb2ludCBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBjaGFubmVsIElELgotICogVGhlIGhlYWQgYW5kIHRhaWwgdmFsdWVzIGFyZSB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGhlYWQgYW5kIHRhaWwKLSAqIHBvc2l0aW9ucyBvZiB0aGUgdHJhbnNtaXQgcXVldWUgZm9yIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9MRENfVFhfR0VUX1NUQVRFCTB4ZTIKLQotLyogbGRjX3R4X3NldF9xdGFpbCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19UWF9TRVRfUVRBSUwKLSAqIEFSRzA6CWNoYW5uZWwgSUQKLSAqIEFSRzE6CXRhaWwgb2Zmc2V0Ci0gKiBSRVQwOglzdGF0dXMKLSAqCi0gKiBVcGRhdGUgdGhlIHRhaWwgcG9pbnRlciBmb3IgdGhlIHRyYW5zbWl0IHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgTERDCi0gKiBlbmRwb2ludCBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBjaGFubmVsIElELiAgVGhlIHRhaWwgb2Zmc2V0IHNwZWNpZmllZAotICogbXVzdCBiZSBhbGlnbmVkIG9uIGEgNjQgYnl0ZSBib3VuZGFyeSwgYW5kIGNhbGN1bGF0ZWQgc28gYXMgdG8gaW5jcmVhc2UKLSAqIHRoZSBudW1iZXIgb2YgcGVuZGluZyBlbnRyaWVzIG9uIHRoZSB0cmFuc21pdCBxdWV1ZS4gIEFueSBhdHRlbXB0IHRvCi0gKiBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgdHJhbnNtaXQgcXVldWUgZW50aXJlcyBpcyBjb25zaWRlcmVkCi0gKiBhbiBpbnZhbGlkIHRhaWwgb2Zmc2V0IGFuZCB3aWxsIHJlc3VsdCBpbiBhbiBFSU5WQUwgZXJyb3IuCi0gKgotICogU2luY2UgdGhlIHRhaWwgb2YgdGhlIHRyYW5zbWl0IHF1ZXVlIG1heSBub3QgYmUgbW92ZWQgYmFja3dhcmRzLCB0aGUKLSAqIHRyYW5zbWl0IHF1ZXVlIG1heSBiZSBmbHVzaGVkIGJ5IGNvbmZpZ3VyaW5nIGEgbmV3IHRyYW5zbWl0IHF1ZXVlLAotICogd2hlcmV1cG9uIHRoZSBoeXBlcnZpc29yIHdpbGwgY29uZmlndXJlIHRoZSBpbml0aWFsIHRyYW5zbWl0IGhlYWQgYW5kCi0gKiB0YWlsIHBvaW50ZXJzIHRvIGJlIGVxdWFsLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTERDX1RYX1NFVF9RVEFJTAkweGUzCi0KLS8qIGxkY19yeF9xY29uZigpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19SWF9RQ09ORgotICogQVJHMDoJY2hhbm5lbCBJRAotICogQVJHMToJcmVhbCBhZGRyZXNzIGJhc2Ugb2YgcXVldWUKLSAqIEFSRzI6CW51bSBlbnRyaWVzIGluIHF1ZXVlCi0gKiBSRVQwOglzdGF0dXMKLSAqCi0gKiBDb25maWd1cmUgcmVjZWl2ZSBxdWV1ZSBmb3IgdGhlIExEQyBlbmRwb2ludCBzcGVjaWZpZWQgYnkgdGhlCi0gKiBnaXZlbiBjaGFubmVsIElELCB0byBiZSBwbGFjZWQgYXQgdGhlIGdpdmVuIHJlYWwgYWRkcmVzcywgYW5kCi0gKiBiZSBvZiB0aGUgZ2l2ZW4gbnVtIGVudHJpZXMuICBOdW0gZW50cmllcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgotICogVGhlIHJlYWwgYWRkcmVzcyBiYXNlIG9mIHRoZSBxdWV1ZSBtdXN0IGJlIGFsaWduZWQgb24gdGhlIHF1ZXVlCi0gKiBzaXplLiAgRWFjaCBxdWV1ZSBlbnRyeSBpcyA2NC1ieXRlcywgc28gZm9yIGV4YW1wbGUsIGEgMzIgZW50cnkKLSAqIHF1ZXVlIG11c3QgYmUgYWxpZ25lZCBvbiBhIDIwNDggYnl0ZSByZWFsIGFkZHJlc3MgYm91bmRhcnkuCi0gKgotICogVGhlIGVuZHBvaW50J3MgdHJhbnNtaXQgcXVldWUgaXMgdW4tY29uZmlndXJlZCBpZiBudW0gZW50cmllcyBpcyB6ZXJvLgotICoKLSAqIElmIGEgdmFsaWQgcmVjZWl2ZSBxdWV1ZSBpcyBzcGVjaWZpZWQgZm9yIGEgbG9jYWwgZW5kcG9pbnQgdGhlIExEQyBpcwotICogaW4gdGhlIHVwIHN0YXRlIGZvciB0aGUgcHVycG9zZSBvZiB0cmFuc21pc3Npb24gdG8gdGhpcyBlbmRwb2ludC4KLSAqCi0gKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBmb3IgZWFjaCBxdWV1ZSBmb3IgYSBzcGVjaWZpYyBjcHUgbWF5IGJlCi0gKiBkZXRlcm1pbmVkIGZyb20gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uCi0gKgotICogQXMgcmVjZWl2ZSBxdWV1ZSBjb25maWd1cmF0aW9uIGNhdXNlcyBhIHJlc2V0IG9mIHRoZSBxdWV1ZSdzIGhlYWQgYW5kCi0gKiB0YWlsIHBvaW50ZXJzIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBndWVzIHRvIGRldGVybWluZSBob3cgbWFueSBlbnRyaWVzCi0gKiBoYXZlIGJlZW4gcmVjZWl2ZWQgYmV0d2VlbiBhIHByZWNlZWRpbmcgbGRjX2dldF9yeF9zdGF0ZSgpIEFQSSBjYWxsCi0gKiBhbmQgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9uLiAgSXQgc2hvdWxkIGJlIG5vdGVkCi0gKiB0aGF0IGRhdGFncmFtIGRlbGl2ZXJ5IGlzIG5vdCBndWFyZW50ZWVkIHZpYSBkb21haW4gY2hhbm5lbHMgYW55d2F5LAotICogYW5kIHRoZXJlZm9yZSBhbnkgaGlnaGVyIHByb3RvY29sIHNob3VsZCBiZSByZXNpbGllbnQgdG8gZGF0YWdyYW0KLSAqIGxvc3MgaWYgbmVjZXNzYXJ5LiAgSG93ZXZlciwgdG8gb3ZlcmNvbWUgdGhpcyBzcGVjaWZpYyByYWNlIHBvdGVudGlhbAotICogaXQgaXMgcmVjb21tZW5kZWQsIGZvciBleGFtcGxlLCB0aGF0IGEgaGlnaGVyIGxldmVsIHByb3RvY29sIGJlIGVtcGxveWVkCi0gKiB0byBlbnN1cmUgZWl0aGVyIHJldHJhbnNtaXNzaW9uLCBvciBlbnN1cmUgdGhhdCBubyBkYXRhZ3JhbXMgYXJlIHBlbmRpbmcKLSAqIG9uIHRoZSBwZWVyIGVuZHBvaW50J3MgdHJhbnNtaXQgcXVldWUgcHJpb3IgdG8gdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0xEQ19SWF9RQ09ORgkJMHhlNAotCi0vKiBsZGNfcnhfcWluZm8oKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfUlhfUUlORk8KLSAqIEFSRzA6CWNoYW5uZWwgSUQKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJcmVhbCBhZGRyZXNzIGJhc2Ugb2YgcXVldWUKLSAqIFJFVDI6CW51bSBlbnRyaWVzIGluIHF1ZXVlCi0gKgotICogUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIGluZm8gZm9yIHRoZSByZWNlaXZlIHF1ZXVlIG9mIExEQyBlbmRwb2ludAotICogZGVmaW5lZCBieSB0aGUgZ2l2ZW4gY2hhbm5lbCBJRC4gIFRoZSByZWFsIGFkZHJlc3MgaXMgdGhlIGN1cnJlbnRseQotICogZGVmaW5lZCByZWFsIGFkZHJlc3MgYmFzZSBvZiB0aGUgZGVmaW5lZCBxdWV1ZSwgYW5kIG51bSBlbnRyaWVzIGlzIHRoZQotICogc2l6ZSBvZiB0aGUgcXVldWUgaW4gdGVybXMgb2YgbnVtYmVyIG9mIGVudHJpZXMuCi0gKgotICogSWYgdGhlIHNwZWNpZmllZCBjaGFubmVsIElEIGlzIGEgdmFsaWQgZW5kcG9pbnQgbnVtYmVyLCBidXQgbm8gcmVjZWl2ZQotICogcXVldWUgaGFzIGJlZW4gZGVmaW5lZCB0aGlzIHNlcnZpY2Ugd2lsbCByZXR1cm4gc3VjY2VzcywgYnV0IHdpdGggbnVtCi0gKiBlbnRyaWVzIHNldCB0byB6ZXJvIGFuZCB0aGUgcmVhbCBhZGRyZXNzIHdpbGwgaGF2ZSBhbiB1bmRlZmluZWQgdmFsdWUuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9MRENfUlhfUUlORk8JCTB4ZTUKLQotLyogbGRjX3J4X2dldF9zdGF0ZSgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19SWF9HRVRfU1RBVEUKLSAqIEFSRzA6CWNoYW5uZWwgSUQKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJaGVhZCBvZmZzZXQKLSAqIFJFVDI6CXRhaWwgb2Zmc2V0Ci0gKiBSRVQzOgljaGFubmVsIHN0YXRlCi0gKgotICogUmV0dXJuIHRoZSByZWNlaXZlIHN0YXRlLCBhbmQgdGhlIGhlYWQgYW5kIHRhaWwgcXVldWUgcG9pbnRlcnMsIGZvcgotICogdGhlIHJlY2VpdmUgcXVldWUgb2YgdGhlIExEQyBlbmRwb2ludCBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBjaGFubmVsIElELgotICogVGhlIGhlYWQgYW5kIHRhaWwgdmFsdWVzIGFyZSB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGhlYWQgYW5kIHRhaWwKLSAqIHBvc2l0aW9ucyBvZiB0aGUgcmVjZWl2ZSBxdWV1ZSBmb3IgdGhlIHNwZWNpZmllZCBlbmRwb2ludC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0xEQ19SWF9HRVRfU1RBVEUJMHhlNgotCi0vKiBsZGNfcnhfc2V0X3FoZWFkKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1JYX1NFVF9RSEVBRAotICogQVJHMDoJY2hhbm5lbCBJRAotICogQVJHMToJaGVhZCBvZmZzZXQKLSAqIFJFVDA6CXN0YXR1cwotICoKLSAqIFVwZGF0ZSB0aGUgaGVhZCBwb2ludGVyIGZvciB0aGUgcmVjZWl2ZSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIExEQwotICogZW5kcG9pbnQgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gY2hhbm5lbCBJRC4gIFRoZSBoZWFkIG9mZnNldCBzcGVjaWZpZWQKLSAqIG11c3QgYmUgYWxpZ25lZCBvbiBhIDY0IGJ5dGUgYm91bmRhcnksIGFuZCBjYWxjdWxhdGVkIHNvIGFzIHRvIGRlY3JlYXNlCi0gKiB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgZW50cmllcyBvbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIEFueSBhdHRlbXB0IHRvCi0gKiBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgcmVjZWl2ZSBxdWV1ZSBlbnRpcmVzIGlzIGNvbnNpZGVyZWQKLSAqIGFuIGludmFsaWQgaGVhZCBvZmZzZXQgYW5kIHdpbGwgcmVzdWx0IGluIGFuIEVJTlZBTCBlcnJvci4KLSAqCi0gKiBUaGUgcmVjZWl2ZSBxdWV1ZSBtYXkgYmUgZmx1c2hlZCBieSBzZXR0aW5nIHRoZSBoZWFkIG9mZnNldCBlcXVhbAotICogdG8gdGhlIGN1cnJlbnQgdGFpbCBvZmZzZXQuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9MRENfUlhfU0VUX1FIRUFECTB4ZTcKLQotLyogTERDIE1hcCBUYWJsZSBFbnRyeS4gIEVhY2ggc2xvdCBpcyBkZWZpbmVkIGJ5IGEgdHJhbnNsYXRpb24gdGFibGUKLSAqIGVudHJ5LCBhcyBzcGVjaWZpZWQgYnkgdGhlIExEQ19NVEVfKiBiaXRzIGJlbG93LCBhbmQgYSA2NC1iaXQKLSAqIGh5cGVydmlzb3IgaW52YWxpZGF0aW9uIGNvb2tpZS4KLSAqLwotI2RlZmluZSBMRENfTVRFX1BBRERSCTB4MGZmZmZmZmZmZmZmZTAwMCAvKiBwYVs1NToxM10gICAgICAgICAgKi8KLSNkZWZpbmUgTERDX01URV9DT1BZX1cJMHgwMDAwMDAwMDAwMDAwNDAwIC8qIGNvcHkgd3JpdGUgYWNjZXNzICAqLwotI2RlZmluZSBMRENfTVRFX0NPUFlfUgkweDAwMDAwMDAwMDAwMDAyMDAgLyogY29weSByZWFkIGFjY2VzcyAgICovCi0jZGVmaW5lIExEQ19NVEVfSU9NTVVfVwkweDAwMDAwMDAwMDAwMDAxMDAgLyogSU9NTVUgd3JpdGUgYWNjZXNzICovCi0jZGVmaW5lIExEQ19NVEVfSU9NTVVfUgkweDAwMDAwMDAwMDAwMDAwODAgLyogSU9NTVUgcmVhZCBhY2Nlc3MgICovCi0jZGVmaW5lIExEQ19NVEVfRVhFQwkweDAwMDAwMDAwMDAwMDAwNDAgLyogZXhlY3V0ZSAgICAgICAgICAgICovCi0jZGVmaW5lIExEQ19NVEVfV1JJVEUJMHgwMDAwMDAwMDAwMDAwMDIwIC8qIHJlYWQgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMRENfTVRFX1JFQUQJMHgwMDAwMDAwMDAwMDAwMDEwIC8qIHdyaXRlICAgICAgICAgICAgICAqLwotI2RlZmluZSBMRENfTVRFX1NaQUxMCTB4MDAwMDAwMDAwMDAwMDAwZiAvKiBwYWdlIHNpemUgYml0cyAgICAgKi8KLSNkZWZpbmUgTERDX01URV9TWjE2R0IJMHgwMDAwMDAwMDAwMDAwMDA3IC8qIDE2R0IgcGFnZSAgICAgICAgICAqLwotI2RlZmluZSBMRENfTVRFX1NaMkdCCTB4MDAwMDAwMDAwMDAwMDAwNiAvKiAyR0IgcGFnZSAgICAgICAgICAgKi8KLSNkZWZpbmUgTERDX01URV9TWjI1Nk1CCTB4MDAwMDAwMDAwMDAwMDAwNSAvKiAyNTZNQiBwYWdlICAgICAgICAgKi8KLSNkZWZpbmUgTERDX01URV9TWjMyTUIJMHgwMDAwMDAwMDAwMDAwMDA0IC8qIDMyTUIgcGFnZSAgICAgICAgICAqLwotI2RlZmluZSBMRENfTVRFX1NaNE1CCTB4MDAwMDAwMDAwMDAwMDAwMyAvKiA0TUIgcGFnZSAgICAgICAgICAgKi8KLSNkZWZpbmUgTERDX01URV9TWjUxMksJMHgwMDAwMDAwMDAwMDAwMDAyIC8qIDUxMksgcGFnZSAgICAgICAgICAqLwotI2RlZmluZSBMRENfTVRFX1NaNjRLCTB4MDAwMDAwMDAwMDAwMDAwMSAvKiA2NEsgcGFnZSAgICAgICAgICAgKi8KLSNkZWZpbmUgTERDX01URV9TWjhLCTB4MDAwMDAwMDAwMDAwMDAwMCAvKiA4SyBwYWdlICAgICAgICAgICAgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXN0cnVjdCBsZGNfbXRhYmxlX2VudHJ5IHsKLQl1bnNpZ25lZCBsb25nCW10ZTsKLQl1bnNpZ25lZCBsb25nCWNvb2tpZTsKLX07Ci0jZW5kaWYKLQotLyogbGRjX3NldF9tYXBfdGFibGUoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfU0VUX01BUF9UQUJMRQotICogQVJHMDoJY2hhbm5lbCBJRAotICogQVJHMToJdGFibGUgcmVhbCBhZGRyZXNzCi0gKiBBUkcyOgludW0gZW50cmllcwotICogUkVUMDoJc3RhdHVzCi0gKgotICogUmVnaXN0ZXIgdGhlIE1URSB0YWJsZSBhdCB0aGUgZ2l2ZW4gdGFibGUgcmVhbCBhZGRyZXNzLCB3aXRoIHRoZQotICogc3BlY2lmaWVkIG51bSBlbnRyaWVzLCBmb3IgdGhlIExEQyBpbmRpY2F0ZWQgYnkgdGhlIGdpdmVuIGNoYW5uZWwKLSAqIElELgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTERDX1NFVF9NQVBfVEFCTEUJMHhlYQotCi0vKiBsZGNfZ2V0X21hcF90YWJsZSgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19HRVRfTUFQX1RBQkxFCi0gKiBBUkcwOgljaGFubmVsIElECi0gKiBSRVQwOglzdGF0dXMKLSAqIFJFVDE6CXRhYmxlIHJlYWwgYWRkcmVzcwotICogUkVUMjoJbnVtIGVudHJpZXMKLSAqCi0gKiBSZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGN1cnJlbnQgbWFwcGluZyB0YWJsZSByZWdpc3RlcmVkCi0gKiBmb3IgdGhlIGdpdmVuIGNoYW5uZWwgSUQuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9MRENfR0VUX01BUF9UQUJMRQkweGViCi0KLSNkZWZpbmUgTERDX0NPUFlfSU4JMAotI2RlZmluZSBMRENfQ09QWV9PVVQJMQotCi0vKiBsZGNfY29weSgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19DT1BZCi0gKiBBUkcwOgljaGFubmVsIElECi0gKiBBUkcxOglMRENfQ09QWV8qIGRpcmVjdGlvbiBjb2RlCi0gKiBBUkcyOgl0YXJnZXQgcmVhbCBhZGRyZXNzCi0gKiBBUkczOglsb2NhbCByZWFsIGFkZHJlc3MKLSAqIEFSRzQ6CWxlbmd0aCBpbiBieXRlcwotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglhY3R1YWwgbGVuZ3RoIGluIGJ5dGVzCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9MRENfQ09QWQkJMHhlYwotCi0jZGVmaW5lIExEQ19NRU1fUkVBRAkxCi0jZGVmaW5lIExEQ19NRU1fV1JJVEUJMgotI2RlZmluZSBMRENfTUVNX0VYRUMJNAotCi0vKiBsZGNfbWFwaW4oKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfTUFQSU4KLSAqIEFSRzA6CWNoYW5uZWwgSUQKLSAqIEFSRzE6CWNvb2tpZQotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglyZWFsIGFkZHJlc3MKLSAqIFJFVDI6CUxEQ19NRU1fKiBwZXJtaXNzaW9ucwotICovCi0jZGVmaW5lIEhWX0ZBU1RfTERDX01BUElOCQkweGVkCi0KLS8qIGxkY191bm1hcCgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19VTk1BUAotICogQVJHMDoJcmVhbCBhZGRyZXNzCi0gKiBSRVQwOglzdGF0dXMKLSAqLwotI2RlZmluZSBIVl9GQVNUX0xEQ19VTk1BUAkJMHhlZQotCi0vKiBsZGNfcmV2b2tlKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1JFVk9LRQotICogQVJHMDoJY2hhbm5lbCBJRAotICogQVJHMToJY29va2llCi0gKiBBUkcyOglsZGNfbXRhYmxlX2VudHJ5IGNvb2tpZQotICogUkVUMDoJc3RhdHVzCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9MRENfUkVWT0tFCQkweGVmCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfdHhfcWNvbmYodW5zaWduZWQgbG9uZyBjaGFubmVsLAotCQkJCQl1bnNpZ25lZCBsb25nIHJhLAotCQkJCQl1bnNpZ25lZCBsb25nIG51bV9lbnRyaWVzKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY190eF9xaW5mbyh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKnJhLAotCQkJCQl1bnNpZ25lZCBsb25nICpudW1fZW50cmllcyk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfdHhfZ2V0X3N0YXRlKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmhlYWRfb2ZmLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqdGFpbF9vZmYsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nICpjaGFuX3N0YXRlKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY190eF9zZXRfcXRhaWwodW5zaWduZWQgbG9uZyBjaGFubmVsLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyB0YWlsX29mZik7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfcnhfcWNvbmYodW5zaWduZWQgbG9uZyBjaGFubmVsLAotCQkJCQl1bnNpZ25lZCBsb25nIHJhLAotCQkJCQl1bnNpZ25lZCBsb25nIG51bV9lbnRyaWVzKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY19yeF9xaW5mbyh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKnJhLAotCQkJCQl1bnNpZ25lZCBsb25nICpudW1fZW50cmllcyk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfcnhfZ2V0X3N0YXRlKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmhlYWRfb2ZmLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqdGFpbF9vZmYsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nICpjaGFuX3N0YXRlKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY19yeF9zZXRfcWhlYWQodW5zaWduZWQgbG9uZyBjaGFubmVsLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBoZWFkX29mZik7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfc2V0X21hcF90YWJsZSh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyByYSwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIG51bV9lbnRyaWVzKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY19nZXRfbWFwX3RhYmxlKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nICpyYSwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nICpudW1fZW50cmllcyk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfY29weSh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgZGlyX2NvZGUsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgdGd0X3JhZGRyLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGxjbF9yYWRkciwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBsZW4sCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgKmFjdHVhbF9sZW4pOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX21hcGluKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY29va2llLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqcmEsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nICpwZXJtKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY191bm1hcCh1bnNpZ25lZCBsb25nIHJhKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY19yZXZva2UodW5zaWduZWQgbG9uZyBjaGFubmVsLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY29va2llLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbXRlX2Nvb2tpZSk7Ci0jZW5kaWYKLQotLyogUGVyZm9ybWFuY2UgY291bnRlciBzZXJ2aWNlcy4gICovCi0KLSNkZWZpbmUgSFZfUEVSRl9KQlVTX1BFUkZfQ1RSTF9SRUcJMHgwMAotI2RlZmluZSBIVl9QRVJGX0pCVVNfUEVSRl9DTlRfUkVHCTB4MDEKLSNkZWZpbmUgSFZfUEVSRl9EUkFNX1BFUkZfQ1RSTF9SRUdfMAkweDAyCi0jZGVmaW5lIEhWX1BFUkZfRFJBTV9QRVJGX0NOVF9SRUdfMAkweDAzCi0jZGVmaW5lIEhWX1BFUkZfRFJBTV9QRVJGX0NUUkxfUkVHXzEJMHgwNAotI2RlZmluZSBIVl9QRVJGX0RSQU1fUEVSRl9DTlRfUkVHXzEJMHgwNQotI2RlZmluZSBIVl9QRVJGX0RSQU1fUEVSRl9DVFJMX1JFR18yCTB4MDYKLSNkZWZpbmUgSFZfUEVSRl9EUkFNX1BFUkZfQ05UX1JFR18yCTB4MDcKLSNkZWZpbmUgSFZfUEVSRl9EUkFNX1BFUkZfQ1RSTF9SRUdfMwkweDA4Ci0jZGVmaW5lIEhWX1BFUkZfRFJBTV9QRVJGX0NOVF9SRUdfMwkweDA5Ci0KLS8qIGdldF9wZXJmcmVnKCkKLSAqIFRSQVA6CUhWX0ZBU1RfVFJBUAotICogRlVOQ1RJT046CUhWX0ZBU1RfR0VUX1BFUkZSRUcKLSAqIEFSRzA6CXBlcmZvcm1hbmNlIHJlZyBudW1iZXIKLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJcGVyZm9ybWFuY2UgcmVnIHZhbHVlCi0gKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBwZXJmb3JtYW5jZSByZWdpc3RlciBudW1iZXIKLSAqCQlFTk9BQ0NFU1MJTm8gYWNjZXNzIGFsbG93ZWQgdG8gcGVyZm9ybWFuY2UgY291bnRlcnMKLSAqCi0gKiBSZWFkIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gRFJBTS9KQlVTIHBlcmZvcm1hbmNlIGNvdW50ZXIvY29udHJvbCByZWdpc3Rlci4KLSAqLwotI2RlZmluZSBIVl9GQVNUX0dFVF9QRVJGUkVHCQkweDEwMAotCi0vKiBzZXRfcGVyZnJlZygpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX1NFVF9QRVJGUkVHCi0gKiBBUkcwOglwZXJmb3JtYW5jZSByZWcgbnVtYmVyCi0gKiBBUkcxOglwZXJmb3JtYW5jZSByZWcgdmFsdWUKLSAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgcGVyZm9ybWFuY2UgcmVnaXN0ZXIgbnVtYmVyCi0gKgkJRU5PQUNDRVNTCU5vIGFjY2VzcyBhbGxvd2VkIHRvIHBlcmZvcm1hbmNlIGNvdW50ZXJzCi0gKgotICogV3JpdGUgdGhlIGdpdmVuIHBlcmZvcm1hbmNlIHJlZyB2YWx1ZSB0byB0aGUgZ2l2ZW4gRFJBTS9KQlVTCi0gKiBwZXJmb3JtYW5jZSBjb3VudGVyL2NvbnRyb2wgcmVnaXN0ZXIuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9TRVRfUEVSRlJFRwkJMHgxMDEKLQotLyogTU1VIHN0YXRpc3RpY3Mgc2VydmljZXMuCi0gKgotICogVGhlIGh5cGVydmlzb3IgbWFpbnRhaW5zIE1NVSBzdGF0aXN0aWNzIGFuZCBwcml2aWxlZ2VkIGNvZGUgcHJvdmlkZXMKLSAqIGEgYnVmZmVyIHdoZXJlIHRoZXNlIHN0YXRpc3RpY3MgY2FuIGJlIGNvbGxlY3RlZC4gIEl0IGlzIGNvbnRpbnVhbGx5Ci0gKiB1cGRhdGVkIG9uY2UgY29uZmlndXJlZC4gIFRoZSBsYXlvdXQgaXMgYXMgZm9sbG93czoKLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXN0cnVjdCBodl9tbXVfc3RhdGlzdGljcyB7Ci0JdW5zaWduZWQgbG9uZyBpbW11X3RzYl9oaXRzX2N0eDBfOGtfdHRlOwotCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfdGlja3NfY3R4MF84a190dGU7Ci0JdW5zaWduZWQgbG9uZyBpbW11X3RzYl9oaXRzX2N0eDBfNjRrX3R0ZTsKLQl1bnNpZ25lZCBsb25nIGltbXVfdHNiX3RpY2tzX2N0eDBfNjRrX3R0ZTsKLQl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQxWzJdOwotCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfaGl0c19jdHgwXzRtYl90dGU7Ci0JdW5zaWduZWQgbG9uZyBpbW11X3RzYl90aWNrc19jdHgwXzRtYl90dGU7Ci0JdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkMlsyXTsKLQl1bnNpZ25lZCBsb25nIGltbXVfdHNiX2hpdHNfY3R4MF8yNTZtYl90dGU7Ci0JdW5zaWduZWQgbG9uZyBpbW11X3RzYl90aWNrc19jdHgwXzI1Nm1iX3R0ZTsKLQl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQzWzRdOwotCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfaGl0c19jdHhub24wXzhrX3R0ZTsKLQl1bnNpZ25lZCBsb25nIGltbXVfdHNiX3RpY2tzX2N0eG5vbjBfOGtfdHRlOwotCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfaGl0c19jdHhub24wXzY0a190dGU7Ci0JdW5zaWduZWQgbG9uZyBpbW11X3RzYl90aWNrc19jdHhub24wXzY0a190dGU7Ci0JdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkNFsyXTsKLQl1bnNpZ25lZCBsb25nIGltbXVfdHNiX2hpdHNfY3R4bm9uMF80bWJfdHRlOwotCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfdGlja3NfY3R4bm9uMF80bWJfdHRlOwotCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDVbMl07Ci0JdW5zaWduZWQgbG9uZyBpbW11X3RzYl9oaXRzX2N0eG5vbjBfMjU2bWJfdHRlOwotCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfdGlja3NfY3R4bm9uMF8yNTZtYl90dGU7Ci0JdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkNls0XTsKLQl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX2hpdHNfY3R4MF84a190dGU7Ci0JdW5zaWduZWQgbG9uZyBkbW11X3RzYl90aWNrc19jdHgwXzhrX3R0ZTsKLQl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX2hpdHNfY3R4MF82NGtfdHRlOwotCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4MF82NGtfdHRlOwotCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDdbMl07Ci0JdW5zaWduZWQgbG9uZyBkbW11X3RzYl9oaXRzX2N0eDBfNG1iX3R0ZTsKLQl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX3RpY2tzX2N0eDBfNG1iX3R0ZTsKLQl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQ4WzJdOwotCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfaGl0c19jdHgwXzI1Nm1iX3R0ZTsKLQl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX3RpY2tzX2N0eDBfMjU2bWJfdHRlOwotCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDlbNF07Ci0JdW5zaWduZWQgbG9uZyBkbW11X3RzYl9oaXRzX2N0eG5vbjBfOGtfdHRlOwotCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4bm9uMF84a190dGU7Ci0JdW5zaWduZWQgbG9uZyBkbW11X3RzYl9oaXRzX2N0eG5vbjBfNjRrX3R0ZTsKLQl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX3RpY2tzX2N0eG5vbjBfNjRrX3R0ZTsKLQl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQxMFsyXTsKLQl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX2hpdHNfY3R4bm9uMF80bWJfdHRlOwotCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4bm9uMF80bWJfdHRlOwotCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDExWzJdOwotCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfaGl0c19jdHhub24wXzI1Nm1iX3R0ZTsKLQl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX3RpY2tzX2N0eG5vbjBfMjU2bWJfdHRlOwotCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDEyWzRdOwotfTsKLSNlbmRpZgotCi0vKiBtbXVzdGF0X2NvbmYoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVTVEFUX0NPTkYKLSAqIEFSRzA6CXJlYWwgYWRkcmVzcwotICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglyZWFsIGFkZHJlc3MKLSAqIEVSUk9SUzoJRU5PUkFERFIJSW52YWxpZCByZWFsIGFkZHJlc3MKLSAqCQlFQkFEQUxJR04JUmVhbCBhZGRyZXNzIG5vdCBhbGlnbmVkIG9uIDY0LWJ5dGUgYm91bmRhcnkKLSAqCQlFQkFEVFJBUAlBUEkgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHByb2Nlc3NvcgotICoKLSAqIEVuYWJsZSBNTVUgc3RhdGlzdGljIGdhdGhlcmluZyB1c2luZyB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiByZWFsCi0gKiBhZGRyZXNzIG9uIHRoZSBjdXJyZW50IHZpcnR1YWwgQ1BVLiAgVGhlIG5ldyBidWZmZXIgcmVhbCBhZGRyZXNzCi0gKiBpcyBnaXZlbiBpbiBBUkcxLCBhbmQgdGhlIHByZXZpb3VzbHkgc3BlY2lmaWVkIGJ1ZmZlciByZWFsIGFkZHJlc3MKLSAqIGlzIHJldHVybmVkIGluIFJFVDEsIG9yIGlzIHJldHVybmVkIGFzIHplcm8gZm9yIHRoZSBmaXJzdCBpbnZvY2F0aW9uLgotICoKLSAqIElmIHRoZSBwYXNzZWQgaW4gcmVhbCBhZGRyZXNzIGFyZ3VtZW50IGlzIHplcm8sIHRoaXMgd2lsbCBkaXNhYmxlCi0gKiBNTVUgc3RhdGlzdGljIGNvbGxlY3Rpb24gb24gdGhlIGN1cnJlbnQgdmlydHVhbCBDUFUuICBJZiBhbiBlcnJvciBpcwotICogcmV0dXJuZWQgdGhlbiBubyBzdGF0aXN0aWNzIGFyZSBjb2xsZWN0ZWQuCi0gKgotICogVGhlIGJ1ZmZlciBjb250ZW50cyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9zIGJlZm9yZSBiZWluZwotICogZ2l2ZW4gdG8gdGhlIGh5cGVydmlzb3Igb3IgZWxzZSB0aGUgc3RhdGlzdGljcyB3aWxsIGJlIG1lYW5pbmdsZXNzLgotICovCi0jZGVmaW5lIEhWX0ZBU1RfTU1VU1RBVF9DT05GCQkweDEwMgotCi0vKiBtbXVzdGF0X2luZm8oKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVTVEFUX0lORk8KLSAqIFJFVDA6CXN0YXR1cwotICogUkVUMToJcmVhbCBhZGRyZXNzCi0gKiBFUlJPUlM6CUVCQURUUkFQCUFQSSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcHJvY2Vzc29yCi0gKgotICogUmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIGFuZCByZWFsIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkCi0gKiBNTVUgc3RhdGlzdGljcyBidWZmZXIgb24gdGhlIGN1cnJlbnQgdmlydHVhbCBDUFUuCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9NTVVTVEFUX0lORk8JCTB4MTAzCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9tbXVzdGF0X2NvbmYodW5zaWduZWQgbG9uZyByYSwgdW5zaWduZWQgbG9uZyAqb3JpZ19yYSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9tbXVzdGF0X2luZm8odW5zaWduZWQgbG9uZyAqcmEpOwotI2VuZGlmCi0KLS8qIE5DUyBjcnlwdG8gc2VydmljZXMgICovCi0KLS8qIG5jc19yZXF1ZXN0KCkgc3ViLWZ1bmN0aW9uIG51bWJlcnMgKi8KLSNkZWZpbmUgSFZfTkNTX1FDT05GCQkJMHgwMQotI2RlZmluZSBIVl9OQ1NfUVRBSUxfVVBEQVRFCQkweDAyCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1zdHJ1Y3QgaHZfbmNzX3F1ZXVlX2VudHJ5IHsKLQkvKiBNQVUgQ29udHJvbCBSZWdpc3RlciAqLwotCXVuc2lnbmVkIGxvbmcJbWF1X2NvbnRyb2w7Ci0jZGVmaW5lIE1BVV9DT05UUk9MX0lOVl9QQVJJVFkJMHgwMDAwMDAwMDAwMDAyMDAwCi0jZGVmaW5lIE1BVV9DT05UUk9MX1NUUkFORAkweDAwMDAwMDAwMDAwMDE4MDAKLSNkZWZpbmUgTUFVX0NPTlRST0xfQlVTWQkweDAwMDAwMDAwMDAwMDA0MDAKLSNkZWZpbmUgTUFVX0NPTlRST0xfSU5UCQkweDAwMDAwMDAwMDAwMDAyMDAKLSNkZWZpbmUgTUFVX0NPTlRST0xfT1AJCTB4MDAwMDAwMDAwMDAwMDFjMAotI2RlZmluZSBNQVVfQ09OVFJPTF9PUF9TSElGVAk2Ci0jZGVmaW5lIE1BVV9PUF9MT0FEX01BX01FTU9SWQkweDAKLSNkZWZpbmUgTUFVX09QX1NUT1JFX01BX01FTU9SWQkweDEKLSNkZWZpbmUgTUFVX09QX01PRFVMQVJfTVVMVAkweDIKLSNkZWZpbmUgTUFVX09QX01PRFVMQVJfUkVEVUNFCTB4MwotI2RlZmluZSBNQVVfT1BfTU9EVUxBUl9FWFBfTE9PUAkweDQKLSNkZWZpbmUgTUFVX0NPTlRST0xfTEVOCQkweDAwMDAwMDAwMDAwMDAwM2YKLSNkZWZpbmUgTUFVX0NPTlRST0xfTEVOX1NISUZUCTAKLQotCS8qIFJlYWwgYWRkcmVzcyBvZiBieXRlcyB0byBsb2FkIG9yIHN0b3JlIGJ5dGVzCi0JICogaW50by9vdXQtb2YgdGhlIE1BVS4KLQkgKi8KLQl1bnNpZ25lZCBsb25nCW1hdV9tcGE7Ci0KLQkvKiBNb2R1bGFyIEFyaXRobWV0aWMgTUEgT2Zmc2V0IFJlZ2lzdGVyLiAgKi8KLQl1bnNpZ25lZCBsb25nCW1hdV9tYTsKLQotCS8qIE1vZHVsYXIgQXJpdGhtZXRpYyBOIFByaW1lIFJlZ2lzdGVyLiAgKi8KLQl1bnNpZ25lZCBsb25nCW1hdV9ucDsKLX07Ci0KLXN0cnVjdCBodl9uY3NfcWNvbmZfYXJnIHsKLQl1bnNpZ25lZCBsb25nCW1pZDsgICAgICAvKiBNQVUgSUQsIDEgcGVyIGNvcmUgb24gTmlhZ2FyYSAqLwotCXVuc2lnbmVkIGxvbmcJYmFzZTsgICAgIC8qIFJlYWwgYWRkcmVzcyBiYXNlIG9mIHF1ZXVlICovCi0JdW5zaWduZWQgbG9uZwllbmQ7CSAgLyogUmVhbCBhZGRyZXNzIGVuZCBvZiBxdWV1ZSAqLwotCXVuc2lnbmVkIGxvbmcJbnVtX2VudHM7IC8qIE51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXVlICovCi19OwotCi1zdHJ1Y3QgaHZfbmNzX3F0YWlsX3VwZGF0ZV9hcmcgewotCXVuc2lnbmVkIGxvbmcJbWlkOyAgICAgIC8qIE1BVSBJRCwgMSBwZXIgY29yZSBvbiBOaWFnYXJhICovCi0JdW5zaWduZWQgbG9uZwl0YWlsOyAgICAgLyogTmV3IHRhaWwgaW5kZXggdG8gdXNlICovCi0JdW5zaWduZWQgbG9uZwlzeW5jZmxhZzsgLyogb25seSBTWU5DRkxBR19TWU5DIGlzIGltcGxlbWVudGVkICovCi0jZGVmaW5lIEhWX05DU19TWU5DRkxBR19TWU5DCTB4MDAKLSNkZWZpbmUgSFZfTkNTX1NZTkNGTEFHX0FTWU5DCTB4MDEKLX07Ci0jZW5kaWYKLQotLyogbmNzX3JlcXVlc3QoKQotICogVFJBUDoJSFZfRkFTVF9UUkFQCi0gKiBGVU5DVElPTjoJSFZfRkFTVF9OQ1NfUkVRVUVTVAotICogQVJHMDoJTkNTIHN1Yi1mdW5jdGlvbgotICogQVJHMToJc3ViLWZ1bmN0aW9uIGFyZ3VtZW50IHJlYWwgYWRkcmVzcwotICogQVJHMjoJc2l6ZSBpbiBieXRlcyBvZiBzdWItZnVuY3Rpb24gYXJndW1lbnQKLSAqIFJFVDA6CXN0YXR1cwotICoKLSAqIFRoZSBNQVUgY2hpcCBvZiB0aGUgTmlhZ2FyYSBwcm9jZXNzb3IgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUKLSAqIHRvIHByaXZpbGVnZWQgY29kZSwgaW5zdGVhZCBpdCBpcyBwcm9ncmFtbWVkIGluZGlyZWN0bHkgdmlhIHRoaXMKLSAqIGh5cGVydmlzb3IgQVBJLgotICoKLSAqIFRoZSBpbnRlcmZhY2VzIGRlZmluZXMgYSBxdWV1ZSBvZiBNQVUgb3BlcmF0aW9ucyB0byBwZXJmb3JtLgotICogUHJpdmlsZWdlZCBjb2RlIHJlZ2lzdGVycyBhIHF1ZXVlIHdpdGggdGhlIGh5cGVydmlzb3IgYnkgaW52b2tpbmcKLSAqIHRoaXMgSFZBUEkgd2l0aCB0aGUgSFZfTkNTX1FDT05GIHN1Yi1mdW5jdGlvbiwgd2hpY2ggZGVmaW5lcyB0aGUKLSAqIGJhc2UsIGVuZCwgYW5kIG51bWJlciBvZiBlbnRyaWVzIG9mIHRoZSBxdWV1ZS4gIEVhY2ggcXVldWUgZW50cnkKLSAqIGNvbnRhaW5zIGEgTUFVIHJlZ2lzdGVyIHN0cnVjdCBibG9jay4KLSAqCi0gKiBUaGUgcHJpdmlsZWdlZCBjb2RlIHRoZW4gcHJvY2VlZHMgdG8gYWRkIGVudHJpZXMgdG8gdGhlIHF1ZXVlIGFuZAotICogdGhlbiBpbnZva2UgdGhlIEhWX05DU19RVEFJTF9VUERBVEUgc3ViLWZ1bmN0aW9uLiAgU2luY2Ugb25seQotICogc3luY2hyb25vdXMgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGh5cGVydmlzb3IsCi0gKiBIVl9OQ1NfUVRBSUxfVVBEQVRFIHdpbGwgcnVuIGFsbCB0aGUgcGVuZGluZyBxdWV1ZSBlbnRyaWVzIHRvCi0gKiBjb21wbGV0aW9uIGFuZCByZXR1cm4gSFZfRU9LLCBvciByZXR1cm4gYW4gZXJyb3IgY29kZS4KLSAqCi0gKiBUaGUgcmVhbCBhZGRyZXNzIG9mIHRoZSBzdWItZnVuY3Rpb24gYXJndW1lbnQgbXVzdCBiZSBhbGlnbmVkIG9uIGF0Ci0gKiBsZWFzdCBhbiA4LWJ5dGUgYm91bmRhcnkuCi0gKgotICogVGhlIHRhaWwgYXJndW1lbnQgb2YgSFZfTkNTX1FUQUlMX1VQREFURSBpcyBhbiBpbmRleCwgbm90IGEgYnl0ZQotICogb2Zmc2V0LCBpbnRvIHRoZSBxdWV1ZSBhbmQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlICdudW1fZW50cycKLSAqIGFyZ3VtZW50IGdpdmVuIGluIHRoZSBIVl9OQ1NfUUNPTkYgY2FsbC4KLSAqLwotI2RlZmluZSBIVl9GQVNUX05DU19SRVFVRVNUCQkweDExMAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbmNzX3JlcXVlc3QodW5zaWduZWQgbG9uZyByZXF1ZXN0LAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZ19yYSwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmdfc2l6ZSk7Ci0jZW5kaWYKLQotI2RlZmluZSBIVl9GQVNUX0ZJUkVfR0VUX1BFUkZSRUcJMHgxMjAKLSNkZWZpbmUgSFZfRkFTVF9GSVJFX1NFVF9QRVJGUkVHCTB4MTIxCi0KLS8qIEZ1bmN0aW9uIG51bWJlcnMgZm9yIEhWX0NPUkVfVFJBUC4gICovCi0jZGVmaW5lIEhWX0NPUkVfU0VUX1ZFUgkJCTB4MDAKLSNkZWZpbmUgSFZfQ09SRV9QVVRDSEFSCQkJMHgwMQotI2RlZmluZSBIVl9DT1JFX0VYSVQJCQkweDAyCi0jZGVmaW5lIEhWX0NPUkVfR0VUX1ZFUgkJCTB4MDMKLQotLyogSHlwZXJ2aXNvciBBUEkgZ3JvdXBzIGZvciB1c2Ugd2l0aCBIVl9DT1JFX1NFVF9WRVIgYW5kCi0gKiBIVl9DT1JFX0dFVF9WRVIuCi0gKi8KLSNkZWZpbmUgSFZfR1JQX1NVTjRWCQkJMHgwMDAwCi0jZGVmaW5lIEhWX0dSUF9DT1JFCQkJMHgwMDAxCi0jZGVmaW5lIEhWX0dSUF9JTlRSCQkJMHgwMDAyCi0jZGVmaW5lIEhWX0dSUF9TT0ZUX1NUQVRFCQkweDAwMDMKLSNkZWZpbmUgSFZfR1JQX1BDSQkJCTB4MDEwMAotI2RlZmluZSBIVl9HUlBfTERPTQkJCTB4MDEwMQotI2RlZmluZSBIVl9HUlBfU1ZDX0NIQU4JCQkweDAxMDIKLSNkZWZpbmUgSFZfR1JQX05DUwkJCTB4MDEwMwotI2RlZmluZSBIVl9HUlBfTklBR19QRVJGCQkweDAyMDAKLSNkZWZpbmUgSFZfR1JQX0ZJUkVfUEVSRgkJMHgwMjAxCi0jZGVmaW5lIEhWX0dSUF9ESUFHCQkJMHgwMzAwCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9nZXRfdmVyc2lvbih1bnNpZ25lZCBsb25nIGdyb3VwLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICptYWpvciwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqbWlub3IpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfc2V0X3ZlcnNpb24odW5zaWduZWQgbG9uZyBncm91cCwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBtYWpvciwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBtaW5vciwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqYWN0dWFsX21pbm9yKTsKLQotZXh0ZXJuIGludCBzdW40dl9odmFwaV9yZWdpc3Rlcih1bnNpZ25lZCBsb25nIGdyb3VwLCB1bnNpZ25lZCBsb25nIG1ham9yLAotCQkJCXVuc2lnbmVkIGxvbmcgKm1pbm9yKTsKLWV4dGVybiB2b2lkIHN1bjR2X2h2YXBpX3VucmVnaXN0ZXIodW5zaWduZWQgbG9uZyBncm91cCk7Ci1leHRlcm4gaW50IHN1bjR2X2h2YXBpX2dldCh1bnNpZ25lZCBsb25nIGdyb3VwLAotCQkJICAgdW5zaWduZWQgbG9uZyAqbWFqb3IsCi0JCQkgICB1bnNpZ25lZCBsb25nICptaW5vcik7Ci1leHRlcm4gdm9pZCBzdW40dl9odmFwaV9pbml0KHZvaWQpOwotI2VuZGlmCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X0hZUEVSVklTT1JfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvaHlwZXJ2aXNvci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmgKaW5kZXggMTI4MjY3Ni4uNzEyNTMxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkZS5oCkBAIC0xLDExOCArMSBAQAotLyoKLSAqIGlkZS5oOiBVbHRyYS9QQ0kgc3BlY2lmaWMgSURFIGdsdWUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3ICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggIEVkZGllIEMuIERvc3QgICAoZWNkQHNreW5ldC5iZSkKLSAqLwotCi0jaWZuZGVmIF9TUEFSQzY0X0lERV9ICi0jZGVmaW5lIF9TUEFSQzY0X0lERV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2lmbmRlZiBNQVhfSFdJRlMKLSMgaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCi0jZGVmaW5lIE1BWF9IV0lGUwkxMAotIyBlbHNlCi0jZGVmaW5lIE1BWF9IV0lGUwkyCi0jIGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBfX2lkZV9pbnNsKGRhdGFfcmVnLCBidWZmZXIsIHdjb3VudCkgXAotCV9faWRlX2luc3coZGF0YV9yZWcsIGJ1ZmZlciwgKHdjb3VudCk8PDEpCi0jZGVmaW5lIF9faWRlX291dHNsKGRhdGFfcmVnLCBidWZmZXIsIHdjb3VudCkgXAotCV9faWRlX291dHN3KGRhdGFfcmVnLCBidWZmZXIsICh3Y291bnQpPDwxKQotCi0vKiBPbiBzcGFyYzY0LCBJL08gcG9ydHMgYW5kIE1NSU8gcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBpZGVudGljYWxseS4gICovCi0jZGVmaW5lIF9faWRlX21tX2luc3cJX19pZGVfaW5zdwotI2RlZmluZSBfX2lkZV9tbV9pbnNsCV9faWRlX2luc2wKLSNkZWZpbmUgX19pZGVfbW1fb3V0c3cJX19pZGVfb3V0c3cKLSNkZWZpbmUgX19pZGVfbW1fb3V0c2wJX19pZGVfb3V0c2wKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW53X2JlKHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQl1bnNpZ25lZCBpbnQgcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhIFslMV0gJTIsICUwIgotCQkJICAgICA6ICI9ciIgKHJldCkKLQkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfaW5zdyh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmRzdCwgdTMyIGNvdW50KQotewotI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQotCXVuc2lnbmVkIGxvbmcgZW5kID0gKHVuc2lnbmVkIGxvbmcpZHN0ICsgKGNvdW50IDw8IDEpOwotI2VuZGlmCi0JdTE2ICpwcyA9IGRzdDsKLQl1MzIgKnBpOwotCi0JaWYoKCh1NjQpcHMpICYgMHgyKSB7Ci0JCSpwcysrID0gaW53X2JlKHBvcnQpOwotCQljb3VudC0tOwotCX0KLQlwaSA9ICh1MzIgKilwczsKLQl3aGlsZShjb3VudCA+PSAyKSB7Ci0JCXUzMiB3OwotCi0JCXcgID0gaW53X2JlKHBvcnQpIDw8IDE2OwotCQl3IHw9IGlud19iZShwb3J0KTsKLQkJKnBpKysgPSB3OwotCQljb3VudCAtPSAyOwotCX0KLQlwcyA9ICh1MTYgKilwaTsKLQlpZihjb3VudCkKLQkJKnBzKysgPSBpbndfYmUocG9ydCk7Ci0KLSNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKLQlfX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylkc3QsIGVuZCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG91dHdfYmUodW5zaWduZWQgc2hvcnQgdywgdm9pZCBfX2lvbWVtICphZGRyKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhhICUwLCBbJTFdICUyIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiciIgKHcpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9vdXRzdyh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKnNyYywgdTMyIGNvdW50KQotewotI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQotCXVuc2lnbmVkIGxvbmcgZW5kID0gKHVuc2lnbmVkIGxvbmcpc3JjICsgKGNvdW50IDw8IDEpOwotI2VuZGlmCi0JY29uc3QgdTE2ICpwcyA9IHNyYzsKLQljb25zdCB1MzIgKnBpOwotCi0JaWYoKCh1NjQpc3JjKSAmIDB4MikgewotCQlvdXR3X2JlKCpwcysrLCBwb3J0KTsKLQkJY291bnQtLTsKLQl9Ci0JcGkgPSAoY29uc3QgdTMyICopcHM7Ci0Jd2hpbGUoY291bnQgPj0gMikgewotCQl1MzIgdzsKLQotCQl3ID0gKnBpKys7Ci0JCW91dHdfYmUoKHcgPj4gMTYpLCBwb3J0KTsKLQkJb3V0d19iZSh3LCBwb3J0KTsKLQkJY291bnQgLT0gMjsKLQl9Ci0JcHMgPSAoY29uc3QgdTE2ICopcGk7Ci0JaWYoY291bnQpCi0JCW91dHdfYmUoKnBzLCBwb3J0KTsKLQotI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQotCV9fZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXNyYywgZW5kKTsKLSNlbmRpZgotfQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX1NQQVJDNjRfSURFX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvaWRlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkcHJvbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pZHByb20uaAppbmRleCBhMzYzZmEwLi5jMjJmOWMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkcHJvbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRwcm9tLmgKQEAgLTEsMjUgKzEgQEAKLS8qCi0gKiBpZHByb20uaDogTWFjcm9zIGFuZCBkZWZpbmVzIGZvciBpZHByb20gcm91dGluZXMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfSURQUk9NX0gKLSNkZWZpbmUgX1NQQVJDNjRfSURQUk9NX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCBpZHByb20gewotCXU4CQlpZF9mb3JtYXQ7CS8qIEZvcm1hdCBpZGVudGlmaWVyIChhbHdheXMgMHgwMSkgKi8KLQl1OAkJaWRfbWFjaHR5cGU7CS8qIE1hY2hpbmUgdHlwZSAqLwotCXU4CQlpZF9ldGhhZGRyWzZdOwkvKiBIYXJkd2FyZSBldGhlcm5ldCBhZGRyZXNzICovCi0JczMyCQlpZF9kYXRlOwkvKiBEYXRlIG9mIG1hbnVmYWN0dXJlICovCi0JdTMyCQlpZF9zZXJudW06MjQ7CS8qIFVuaXF1ZSBzZXJpYWwgbnVtYmVyICovCi0JdTgJCWlkX2Nrc3VtOwkvKiBDaGVja3N1bSAtIHhvciBvZiB0aGUgZGF0YSBieXRlcyAqLwotCXU4CQlyZXNlcnZlZFsxNl07Ci19OwotCi1leHRlcm4gc3RydWN0IGlkcHJvbSAqaWRwcm9tOwotZXh0ZXJuIHZvaWQgaWRwcm9tX2luaXQodm9pZCk7Ci0KLSNlbmRpZiAvKiAhKF9TUEFSQ19JRFBST01fSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvaWRwcm9tLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2ludHJfcXVldWUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW50cl9xdWV1ZS5oCmluZGV4IDIwNjA3N2QuLmY3MjI1MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW50cl9xdWV1ZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW50cl9xdWV1ZS5oCkBAIC0xLDE1ICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X0lOVFJfUVVFVUVfSAotI2RlZmluZSBfU1BBUkM2NF9JTlRSX1FVRVVFX0gKLQotLyogU3VuNHYgaW50ZXJydXB0IHF1ZXVlIHJlZ2lzdGVycywgYWNjZXNzZWQgdmlhIEFTSV9RVUVVRS4gICovCi0KLSNkZWZpbmUgSU5UUlFfQ1BVX01PTkRPX0hFQUQJICAweDNjMCAvKiBDUFUgbW9uZG8gaGVhZAkgICAgICAgICAgKi8KLSNkZWZpbmUgSU5UUlFfQ1BVX01PTkRPX1RBSUwJICAweDNjOCAvKiBDUFUgbW9uZG8gdGFpbAkgICAgICAgICAgKi8KLSNkZWZpbmUgSU5UUlFfREVWSUNFX01PTkRPX0hFQUQJICAweDNkMCAvKiBEZXZpY2UgbW9uZG8gaGVhZAkgICAgICAgICAgKi8KLSNkZWZpbmUgSU5UUlFfREVWSUNFX01PTkRPX1RBSUwJICAweDNkOCAvKiBEZXZpY2UgbW9uZG8gdGFpbAkgICAgICAgICAgKi8KLSNkZWZpbmUgSU5UUlFfUkVTVU1fTU9ORE9fSEVBRAkgIDB4M2UwIC8qIFJlc3VtYWJsZSBlcnJvciBtb25kbyBoZWFkICAgICAqLwotI2RlZmluZSBJTlRSUV9SRVNVTV9NT05ET19UQUlMCSAgMHgzZTggLyogUmVzdW1hYmxlIGVycm9yIG1vbmRvIHRhaWwgICAgICovCi0jZGVmaW5lIElOVFJRX05PTlJFU1VNX01PTkRPX0hFQUQgMHgzZjAgLyogTm9uLXJlc3VtYWJsZSBlcnJvciBtb25kbyBoZWFkICovCi0jZGVmaW5lIElOVFJRX05PTlJFU1VNX01PTkRPX1RBSUwgMHgzZjggLyogTm9uLXJlc3VtYWJsZSBlcnJvciBtb25kbyBoZWFkICovCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X0lOVFJfUVVFVUVfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvaW50cl9xdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pby5oCmluZGV4IDMxNTg5NjAuLjI1ZmYyNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvLmgKQEAgLTEsNTExICsxIEBACi0jaWZuZGVmIF9fU1BBUkM2NF9JT19ICi0jZGVmaW5lIF9fU1BBUkM2NF9JT19ICi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPiAgICAgIC8qIElPIGFkZHJlc3MgbWFwcGluZyByb3V0aW5lcyBuZWVkIHRoaXMgKi8KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2FzaS5oPgotCi0vKiBQQyBjcmFwb2xhLi4uICovCi0jZGVmaW5lIF9fU0xPV19ET1dOX0lPCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0xPV19ET1dOX0lPCWRvIHsgfSB3aGlsZSAoMCkKLQotLyogQklPIGxheWVyIGRlZmluaXRpb25zLiAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2Vybl9iYXNlLCBrZXJuX3NpemU7Ci0jZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgQklPX1ZNRVJHRV9CT1VOREFSWQk4MTkyCi0KLXN0YXRpYyBpbmxpbmUgdTggX2luYih1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdTggcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWJhXHRbJTFdICUyLCAlMFx0LyogcGNpX2luYiAqLyIKLQkJCSAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IF9pbncodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXUxNiByZXQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1aGFcdFslMV0gJTIsICUwXHQvKiBwY2lfaW53ICovIgotCQkJICAgICA6ICI9ciIgKHJldCkKLQkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgX2lubCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdTMyIHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9pbmwgKi8iCi0JCQkgICAgIDogIj1yIiAocmV0KQotCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX291dGIodTggYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGJhXHQlcjAsIFslMV0gJTJcdC8qIHBjaV9vdXRiICovIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiSnIiIChiKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9vdXR3KHUxNiB3LCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGFcdCVyMCwgWyUxXSAlMlx0LyogcGNpX291dHcgKi8iCi0JCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJKciIgKHcpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX291dGwodTMyIGwsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfb3V0bCAqLyIKLQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkgICAgIDogIkpyIiAobCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci19Ci0KLSNkZWZpbmUgaW5iKF9fYWRkcikJCShfaW5iKCh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKLSNkZWZpbmUgaW53KF9fYWRkcikJCShfaW53KCh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKLSNkZWZpbmUgaW5sKF9fYWRkcikJCShfaW5sKCh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKLSNkZWZpbmUgb3V0YihfX2IsIF9fYWRkcikJKF9vdXRiKCh1OCkoX19iKSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSBvdXR3KF9fdywgX19hZGRyKQkoX291dHcoKHUxNikoX193KSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSBvdXRsKF9fbCwgX19hZGRyKQkoX291dGwoKHUzMikoX19sKSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotCi0jZGVmaW5lIGluYl9wKF9fYWRkcikgCQlpbmIoX19hZGRyKQotI2RlZmluZSBvdXRiX3AoX19iLCBfX2FkZHIpCW91dGIoX19iLCBfX2FkZHIpCi0jZGVmaW5lIGlud19wKF9fYWRkcikJCWludyhfX2FkZHIpCi0jZGVmaW5lIG91dHdfcChfX3csIF9fYWRkcikJb3V0dyhfX3csIF9fYWRkcikKLSNkZWZpbmUgaW5sX3AoX19hZGRyKQkJaW5sKF9fYWRkcikKLSNkZWZpbmUgb3V0bF9wKF9fbCwgX19hZGRyKQlvdXRsKF9fbCwgX19hZGRyKQotCi1leHRlcm4gdm9pZCBvdXRzYih1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgb3V0c3codW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIG91dHNsKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCBpbnNiKHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCBpbnN3KHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQ4X3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlpbnNiKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgaW9yZWFkMTZfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCWluc3coKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDMyX3JlcCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlpbnNsKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpcG9ydCwgYnVmLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlOF9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0Jb3V0c2IoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUxNl9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0Jb3V0c3coKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUzMl9yZXAodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0Jb3V0c2woKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlwb3J0LCBidWYsIGNvdW50KTsKLX0KLQotLyogTWVtb3J5IGZ1bmN0aW9ucywgc2FtZSBhcyBJL08gYWNjZXNzZXMgb24gVWx0cmEuICovCi1zdGF0aWMgaW5saW5lIHU4IF9yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17CXU4IHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHViYVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yZWFkYiAqLyIKLQkJCSAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewl1MTYgcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhXHRbJTFdICUyLCAlMFx0LyogcGNpX3JlYWR3ICovIgotCQkJICAgICA6ICI9ciIgKHJldCkKLQkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsJdTMyIHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yZWFkbCAqLyIKLQkJCSAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTY0IF9yZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17CXU2NCByZXQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yZWFkcSAqLyIKLQkJCSAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfd3JpdGViKHU4IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGViICovIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiSnIiIChiKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF93cml0ZXcodTE2IHcsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGV3ICovIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiSnIiICh3KSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF93cml0ZWwodTMyIGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGVsICovIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiSnIiIChsKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF93cml0ZXEodTY0IHEsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfd3JpdGVxICovIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiSnIiIChxKSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLX0KLQotI2RlZmluZSByZWFkYihfX2FkZHIpCQlfcmVhZGIoX19hZGRyKQotI2RlZmluZSByZWFkdyhfX2FkZHIpCQlfcmVhZHcoX19hZGRyKQotI2RlZmluZSByZWFkbChfX2FkZHIpCQlfcmVhZGwoX19hZGRyKQotI2RlZmluZSByZWFkcShfX2FkZHIpCQlfcmVhZHEoX19hZGRyKQotI2RlZmluZSByZWFkYl9yZWxheGVkKF9fYWRkcikJX3JlYWRiKF9fYWRkcikKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZChfX2FkZHIpCV9yZWFkdyhfX2FkZHIpCi0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQoX19hZGRyKQlfcmVhZGwoX19hZGRyKQotI2RlZmluZSByZWFkcV9yZWxheGVkKF9fYWRkcikJX3JlYWRxKF9fYWRkcikKLSNkZWZpbmUgd3JpdGViKF9fYiwgX19hZGRyKQlfd3JpdGViKF9fYiwgX19hZGRyKQotI2RlZmluZSB3cml0ZXcoX193LCBfX2FkZHIpCV93cml0ZXcoX193LCBfX2FkZHIpCi0jZGVmaW5lIHdyaXRlbChfX2wsIF9fYWRkcikJX3dyaXRlbChfX2wsIF9fYWRkcikKLSNkZWZpbmUgd3JpdGVxKF9fcSwgX19hZGRyKQlfd3JpdGVxKF9fcSwgX19hZGRyKQotCi0vKiBOb3cgdmVyc2lvbnMgd2l0aG91dCBieXRlLXN3YXBwaW5nLiAqLwotc3RhdGljIGlubGluZSB1OCBfcmF3X3JlYWRiKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl1OCByZXQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1YmFcdFslMV0gJTIsICUwXHQvKiBwY2lfcmF3X3JlYWRiICovIgotCQkJICAgICA6ICI9ciIgKHJldCkKLQkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBfcmF3X3JlYWR3KHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl1MTYgcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhXHRbJTFdICUyLCAlMFx0LyogcGNpX3Jhd19yZWFkdyAqLyIKLQkJCSAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgX3Jhd19yZWFkbCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdTMyIHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yYXdfcmVhZGwgKi8iCi0JCQkgICAgIDogIj1yIiAocmV0KQotCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTY0IF9yYXdfcmVhZHEodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXU2NCByZXQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YVx0WyUxXSAlMiwgJTBcdC8qIHBjaV9yYXdfcmVhZHEgKi8iCi0JCQkgICAgIDogIj1yIiAocmV0KQotCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3dyaXRlYih1OCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YmFcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3Jhd193cml0ZWIgKi8iCi0JCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJKciIgKGIpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3dyaXRldyh1MTYgdywgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhhXHQlcjAsIFslMV0gJTJcdC8qIHBjaV9yYXdfd3JpdGV3ICovIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiSnIiICh3KSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX3Jhd193cml0ZWwodTMyIGwsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBwY2lfcmF3X3dyaXRlbCAqLyIKLQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkgICAgIDogIkpyIiAobCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9yYXdfd3JpdGVxKHU2NCBxLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGFcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3Jhd193cml0ZXEgKi8iCi0JCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJKciIgKHEpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Ci19Ci0KLSNkZWZpbmUgX19yYXdfcmVhZGIoX19hZGRyKQkJKF9yYXdfcmVhZGIoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSBfX3Jhd19yZWFkdyhfX2FkZHIpCQkoX3Jhd19yZWFkdygodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCi0jZGVmaW5lIF9fcmF3X3JlYWRsKF9fYWRkcikJCShfcmF3X3JlYWRsKCh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKLSNkZWZpbmUgX19yYXdfcmVhZHEoX19hZGRyKQkJKF9yYXdfcmVhZHEoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSBfX3Jhd193cml0ZWIoX19iLCBfX2FkZHIpCShfcmF3X3dyaXRlYigodTgpKF9fYiksICh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKLSNkZWZpbmUgX19yYXdfd3JpdGV3KF9fdywgX19hZGRyKQkoX3Jhd193cml0ZXcoKHUxNikoX193KSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSBfX3Jhd193cml0ZWwoX19sLCBfX2FkZHIpCShfcmF3X3dyaXRlbCgodTMyKShfX2wpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCi0jZGVmaW5lIF9fcmF3X3dyaXRlcShfX3EsIF9fYWRkcikJKF9yYXdfd3JpdGVxKCh1NjQpKF9fcSksICh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKLQotLyogVmFsaWQgSS9PIFNwYWNlIHJlZ2lvbnMgYXJlIGFueXdoZXJlLCBiZWNhdXNlIGVhY2ggUENJIGJ1cyBzdXBwb3J0ZWQKLSAqIGNhbiBsaXZlIGluIGFuIGFyYml0cmFyeSBhcmVhIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlLgotICovCi0jZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmZmZmZmZmZmZlVMCi0KLS8qIE5vdywgU0JVUyB2YXJpYW50cywgb25seSBkaWZmZXJlbmNlIGZyb20gUENJIGlzIHRoYXQgd2UgZG8KLSAqIG5vdCB1c2UgbGl0dGxlLWVuZGlhbiBBU0lzLgotICovCi1zdGF0aWMgaW5saW5lIHU4IF9zYnVzX3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQl1OCByZXQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR1YmFcdFslMV0gJTIsICUwXHQvKiBzYnVzX3JlYWRiICovIgotCQkJICAgICA6ICI9ciIgKHJldCkKLQkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IF9zYnVzX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQl1MTYgcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWhhXHRbJTFdICUyLCAlMFx0Lyogc2J1c19yZWFkdyAqLyIKLQkJCSAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBfc2J1c19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JdTMyIHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHNidXNfcmVhZGwgKi8iCi0JCQkgICAgIDogIj1yIiAocmV0KQotCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgX3NidXNfcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCXU2NCByZXQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YVx0WyUxXSAlMiwgJTBcdC8qIHNidXNfcmVhZHEgKi8iCi0JCQkgICAgIDogIj1yIiAocmV0KQotCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YmFcdCVyMCwgWyUxXSAlMlx0Lyogc2J1c193cml0ZWIgKi8iCi0JCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJKciIgKGIpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX3dyaXRldyh1MTYgdywgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhhXHQlcjAsIFslMV0gJTJcdC8qIHNidXNfd3JpdGV3ICovIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiSnIiICh3KSwgInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfc2J1c193cml0ZWwodTMyIGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YVx0JXIwLCBbJTFdICUyXHQvKiBzYnVzX3dyaXRlbCAqLyIKLQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkgICAgIDogIkpyIiAobCksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX3NidXNfd3JpdGVxKHU2NCBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGFcdCVyMCwgWyUxXSAlMlx0Lyogc2J1c193cml0ZXEgKi8iCi0JCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJKciIgKGwpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLX0KLQotI2RlZmluZSBzYnVzX3JlYWRiKF9fYWRkcikJCV9zYnVzX3JlYWRiKF9fYWRkcikKLSNkZWZpbmUgc2J1c19yZWFkdyhfX2FkZHIpCQlfc2J1c19yZWFkdyhfX2FkZHIpCi0jZGVmaW5lIHNidXNfcmVhZGwoX19hZGRyKQkJX3NidXNfcmVhZGwoX19hZGRyKQotI2RlZmluZSBzYnVzX3JlYWRxKF9fYWRkcikJCV9zYnVzX3JlYWRxKF9fYWRkcikKLSNkZWZpbmUgc2J1c193cml0ZWIoX19iLCBfX2FkZHIpCV9zYnVzX3dyaXRlYihfX2IsIF9fYWRkcikKLSNkZWZpbmUgc2J1c193cml0ZXcoX193LCBfX2FkZHIpCV9zYnVzX3dyaXRldyhfX3csIF9fYWRkcikKLSNkZWZpbmUgc2J1c193cml0ZWwoX19sLCBfX2FkZHIpCV9zYnVzX3dyaXRlbChfX2wsIF9fYWRkcikKLSNkZWZpbmUgc2J1c193cml0ZXEoX19sLCBfX2FkZHIpCV9zYnVzX3dyaXRlcShfX2wsIF9fYWRkcikKLQotc3RhdGljIGlubGluZSB2b2lkIF9zYnVzX21lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgaW50IGMsIF9fa2VybmVsX3NpemVfdCBuKQotewotCXdoaWxlKG4tLSkgewotCQlzYnVzX3dyaXRlYihjLCBkc3QpOwotCQlkc3QrKzsKLQl9Ci19Ci0KLSNkZWZpbmUgc2J1c19tZW1zZXRfaW8oZCxjLHN6KQlfc2J1c19tZW1zZXRfaW8oZCxjLHN6KQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGludCBjLCBfX2tlcm5lbF9zaXplX3QgbikKLXsKLQl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmQgPSBkc3Q7Ci0KLQl3aGlsZSAobi0tKSB7Ci0JCXdyaXRlYihjLCBkKTsKLQkJZCsrOwotCX0KLX0KLQotI2RlZmluZSBtZW1zZXRfaW8oZCxjLHN6KQlfbWVtc2V0X2lvKGQsYyxzeikKLQotc3RhdGljIGlubGluZSB2b2lkCi1fbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc3JjLCBfX2tlcm5lbF9zaXplX3QgbikKLXsKLQljaGFyICpkID0gZHN0OwotCi0Jd2hpbGUgKG4tLSkgewotCQljaGFyIHRtcCA9IHJlYWRiKHNyYyk7Ci0JCSpkKysgPSB0bXA7Ci0JCXNyYysrOwotCX0KLX0KLQotI2RlZmluZSBtZW1jcHlfZnJvbWlvKGQscyxzeikJX21lbWNweV9mcm9taW8oZCxzLHN6KQotCi1zdGF0aWMgaW5saW5lIHZvaWQgCi1fbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgX19rZXJuZWxfc2l6ZV90IG4pCi17Ci0JY29uc3QgY2hhciAqcyA9IHNyYzsKLQl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmQgPSBkc3Q7Ci0KLQl3aGlsZSAobi0tKSB7Ci0JCWNoYXIgdG1wID0gKnMrKzsKLQkJd3JpdGViKHRtcCwgZCk7Ci0JCWQrKzsKLQl9Ci19Ci0KLSNkZWZpbmUgbWVtY3B5X3RvaW8oZCxzLHN6KQlfbWVtY3B5X3RvaW8oZCxzLHN6KQotCi0jZGVmaW5lIG1taW93YigpCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qIE9uIHNwYXJjNjQgd2UgaGF2ZSB0aGUgd2hvbGUgcGh5c2ljYWwgSU8gYWRkcmVzcyBzcGFjZSBhY2Nlc3NpYmxlCi0gKiB1c2luZyBwaHlzaWNhbGx5IGFkZHJlc3NlZCBsb2FkcyBhbmQgc3RvcmVzLCBzbyB0aGlzIGRvZXMgbm90aGluZy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKW9mZnNldDsKLX0KLQotI2RlZmluZSBpb3JlbWFwX25vY2FjaGUoWCxZKQkJaW9yZW1hcCgoWCksKFkpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci19Ci0KLSNkZWZpbmUgaW9yZWFkOChYKQkJCXJlYWRiKFgpCi0jZGVmaW5lIGlvcmVhZDE2KFgpCQkJcmVhZHcoWCkKLSNkZWZpbmUgaW9yZWFkMzIoWCkJCQlyZWFkbChYKQotI2RlZmluZSBpb3dyaXRlOCh2YWwsWCkJCQl3cml0ZWIodmFsLFgpCi0jZGVmaW5lIGlvd3JpdGUxNih2YWwsWCkJCXdyaXRldyh2YWwsWCkKLSNkZWZpbmUgaW93cml0ZTMyKHZhbCxYKQkJd3JpdGVsKHZhbCxYKQotCi0vKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhbiBJTyBwb3J0IHJhbmdlICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKTsKLWV4dGVybiB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKik7Ci0KLS8qIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGluZyBjb29raWUgZm9yIGEgUENJIEJBUiAobWVtb3J5IG9yIElPKSAqLwotc3RydWN0IHBjaV9kZXY7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXgpOwotZXh0ZXJuIHZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICopOwotCi0vKiBTaW1pbGFybHkgZm9yIFNCVVMuICovCi0jZGVmaW5lIHNidXNfaW9yZW1hcChfX3JlcywgX19vZmZzZXQsIF9fc2l6ZSwgX19uYW1lKSBcCi0oewl1bnNpZ25lZCBsb25nIF9fcmV0OyBcCi0JX19yZXQgID0gKF9fcmVzKS0+c3RhcnQgKyAoKChfX3JlcyktPmZsYWdzICYgMHgxZmZVTCkgPDwgMzJVTCk7IFwKLQlfX3JldCArPSAodW5zaWduZWQgbG9uZykgKF9fb2Zmc2V0KTsgXAotCWlmICghIHJlcXVlc3RfcmVnaW9uKChfX3JldCksIChfX3NpemUpLCAoX19uYW1lKSkpIFwKLQkJX19yZXQgPSAwVUw7IFwKLQkodm9pZCBfX2lvbWVtICopIF9fcmV0OyBcCi19KQotCi0jZGVmaW5lIHNidXNfaW91bm1hcChfX2FkZHIsIF9fc2l6ZSkJXAotCXJlbGVhc2VfcmVnaW9uKCh1bnNpZ25lZCBsb25nKShfX2FkZHIpLCAoX19zaXplKSkKLQotLyoKLSAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KLSAqIGFjY2VzcwotICovCi0jZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKLQotLyoKLSAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKLSAqLwotI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAotCi0jZW5kaWYKLQotI2VuZGlmIC8qICEoX19TUEFSQzY0X0lPX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2lvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvY3RsLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvY3RsLmgKaW5kZXggZDYzNGMyMS4uMThmYzU2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pb2N0bC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGwuaApAQCAtMSw2NyArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9JT0NUTF9ICi0jZGVmaW5lIF9TUEFSQzY0X0lPQ1RMX0gKLQotLyoKLSAqIE91ciBESVIgYW5kIFNJWkUgb3ZlcmxhcCBpbiBvcmRlciB0byBzaW11bHRlbmVvdXNseSBwcm92aWRlCi0gKiBhIG5vbi16ZXJvIF9JT0NfTk9ORSAoZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5KSBhbmQKLSAqIDE0IGJpdHMgb2Ygc2l6ZSBhcyBvbiBpMzg2LiBIZXJlJ3MgdGhlIGxheW91dDoKLSAqCi0gKiAgIDB4RTAwMDAwMDAgICBESVIKLSAqICAgMHg4MDAwMDAwMCAgICAgRElSID0gV1JJVEUKLSAqICAgMHg0MDAwMDAwMCAgICAgRElSID0gUkVBRAotICogICAweDIwMDAwMDAwICAgICBESVIgPSBOT05FCi0gKiAgIDB4M0ZGRjAwMDAgICBTSVpFIChvdmVybGFwcyBOT05FIGJpdCkKLSAqICAgMHgwMDAwRkYwMCAgIFRZUEUKLSAqICAgMHgwMDAwMDBGRiAgIE5SIChDTUQpCi0gKi8KLQotI2RlZmluZSBfSU9DX05SQklUUyAgICAgIDgKLSNkZWZpbmUgX0lPQ19UWVBFQklUUyAgICA4Ci0jZGVmaW5lIF9JT0NfU0laRUJJVFMgICAxMwkvKiBBY3R1YWxseSAxNCwgc2VlIGJlbG93LiAqLwotI2RlZmluZSBfSU9DX0RJUkJJVFMgICAgIDMKLQotI2RlZmluZSBfSU9DX05STUFTSyAgICAgICgoMSA8PCBfSU9DX05SQklUUyktMSkKLSNkZWZpbmUgX0lPQ19UWVBFTUFTSyAgICAoKDEgPDwgX0lPQ19UWVBFQklUUyktMSkKLSNkZWZpbmUgX0lPQ19TSVpFTUFTSyAgICAoKDEgPDwgX0lPQ19TSVpFQklUUyktMSkKLSNkZWZpbmUgX0lPQ19YU0laRU1BU0sgICAoKDEgPDwgKF9JT0NfU0laRUJJVFMrMSkpLTEpCi0jZGVmaW5lIF9JT0NfRElSTUFTSyAgICAgKCgxIDw8IF9JT0NfRElSQklUUyktMSkKLQotI2RlZmluZSBfSU9DX05SU0hJRlQgICAgIDAKLSNkZWZpbmUgX0lPQ19UWVBFU0hJRlQgICAoX0lPQ19OUlNISUZUICsgX0lPQ19OUkJJVFMpCi0jZGVmaW5lIF9JT0NfU0laRVNISUZUICAgKF9JT0NfVFlQRVNISUZUICsgX0lPQ19UWVBFQklUUykKLSNkZWZpbmUgX0lPQ19ESVJTSElGVCAgICAoX0lPQ19TSVpFU0hJRlQgKyBfSU9DX1NJWkVCSVRTKQotCi0jZGVmaW5lIF9JT0NfTk9ORSAgICAgICAgMVUKLSNkZWZpbmUgX0lPQ19SRUFEICAgICAgICAyVQotI2RlZmluZSBfSU9DX1dSSVRFICAgICAgIDRVCi0KLSNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCi0gICAgICAgICgoKGRpcikgIDw8IF9JT0NfRElSU0hJRlQpIHwgXAotICAgICAgICAgKCh0eXBlKSA8PCBfSU9DX1RZUEVTSElGVCkgfCBcCi0gICAgICAgICAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCi0gICAgICAgICAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKLQotI2RlZmluZSBfSU8odHlwZSxucikgICAgICAgIF9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCi0jZGVmaW5lIF9JT1IodHlwZSxucixzaXplKSAgX0lPQyhfSU9DX1JFQUQsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQotI2RlZmluZSBfSU9XKHR5cGUsbnIsc2l6ZSkgIF9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCi0jZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkgX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCi0KLS8qIFVzZWQgdG8gZGVjb2RlIGlvY3RsIG51bWJlcnMgaW4gZHJpdmVycyBkZXNwaXRlIHRoZSBsZWFkaW5nIHVuZGVyc2NvcmUuLi4gKi8KLSNkZWZpbmUgX0lPQ19ESVIobnIpICAgIFwKLSAoICgoKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKSAmIChfSU9DX1dSSVRFfF9JT0NfUkVBRCkpICE9IDApPyAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiAoX0lPQ19XUklURXxfSU9DX1JFQUQpKTogIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spICkKLSNkZWZpbmUgX0lPQ19UWVBFKG5yKSAgICAgICAoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKLSNkZWZpbmUgX0lPQ19OUihucikgICAgICAgICAoKChucikgPj4gX0lPQ19OUlNISUZUKSAmIF9JT0NfTlJNQVNLKQotI2RlZmluZSBfSU9DX1NJWkUobnIpICAgXAotICgoKCgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIF9JT0NfRElSTUFTSykgJiAoX0lPQ19XUklURXxfSU9DX1JFQUQpKSA9PSAwKT8gICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgIDA6ICgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1hTSVpFTUFTSykpCi0KLS8qIC4uLmFuZCBmb3IgdGhlIFBDTUNJQSBhbmQgc291bmQuICovCi0jZGVmaW5lIElPQ19JTiAgICAgICAgICAoX0lPQ19XUklURSA8PCBfSU9DX0RJUlNISUZUKQotI2RlZmluZSBJT0NfT1VUICAgICAgICAgKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQotI2RlZmluZSBJT0NfSU5PVVQgICAgICAgKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKLSNkZWZpbmUgSU9DU0laRV9NQVNLICAgIChfSU9DX1hTSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKLSNkZWZpbmUgSU9DU0laRV9TSElGVCAgIChfSU9DX1NJWkVTSElGVCkKLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfSU9DVExfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvaW9jdGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvY3Rscy5oCmluZGV4IDk0ZDFiNzUuLmRjZDU1NDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGxzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pb2N0bHMuaApAQCAtMSwxMzYgKzEgQEAKLSNpZm5kZWYgX0FTTV9TUEFSQzY0X0lPQ1RMU19ICi0jZGVmaW5lIF9BU01fU1BBUkM2NF9JT0NUTFNfSAotCi0jaW5jbHVkZSA8YXNtL2lvY3RsLmg+Ci0KLS8qIEJpZyBUICovCi0jZGVmaW5lIFRDR0VUQQkJX0lPUignVCcsIDEsIHN0cnVjdCB0ZXJtaW8pCi0jZGVmaW5lIFRDU0VUQQkJX0lPVygnVCcsIDIsIHN0cnVjdCB0ZXJtaW8pCi0jZGVmaW5lIFRDU0VUQVcJCV9JT1coJ1QnLCAzLCBzdHJ1Y3QgdGVybWlvKQotI2RlZmluZSBUQ1NFVEFGCQlfSU9XKCdUJywgNCwgc3RydWN0IHRlcm1pbykKLSNkZWZpbmUgVENTQlJLCQlfSU8oJ1QnLCA1KQotI2RlZmluZSBUQ1hPTkMJCV9JTygnVCcsIDYpCi0jZGVmaW5lIFRDRkxTSAkJX0lPKCdUJywgNykKLSNkZWZpbmUgVENHRVRTCQlfSU9SKCdUJywgOCwgc3RydWN0IHRlcm1pb3MpCi0jZGVmaW5lIFRDU0VUUwkJX0lPVygnVCcsIDksIHN0cnVjdCB0ZXJtaW9zKQotI2RlZmluZSBUQ1NFVFNXCQlfSU9XKCdUJywgMTAsIHN0cnVjdCB0ZXJtaW9zKQotI2RlZmluZSBUQ1NFVFNGCQlfSU9XKCdUJywgMTEsIHN0cnVjdCB0ZXJtaW9zKQotI2RlZmluZSBUQ0dFVFMyCQlfSU9SKCdUJywgMTIsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsIDEzLCBzdHJ1Y3QgdGVybWlvczIpCi0jZGVmaW5lIFRDU0VUU1cyCV9JT1coJ1QnLCAxNCwgc3RydWN0IHRlcm1pb3MyKQotI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywgMTUsIHN0cnVjdCB0ZXJtaW9zMikKLQotLyogTm90ZSB0aGF0IGFsbCB0aGUgaW9jdGxzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgaW4gTGludXggaGF2ZSBhIAotICogZG91YmxlIHVuZGVyc2NvcmUgb24gdGhlIGZyb250IHRvOiBhKSBhdm9pZCBzb21lIHByb2dyYW1zIHRvCi0gKiB0aGluayB3ZSBzdXBwb3J0IHNvbWUgaW9jdGxzIHVuZGVyIExpbnV4IChhdXRvY29uZmlndXJhdGlvbiBzdHVmZikKLSAqLwotLyogTGl0dGxlIHQgKi8KLSNkZWZpbmUgVElPQ0dFVEQJX0lPUigndCcsIDAsIGludCkKLSNkZWZpbmUgVElPQ1NFVEQJX0lPVygndCcsIDEsIGludCkKLSNkZWZpbmUgX19USU9DSFBDTCAgICAgICAgX0lPKCd0JywgMikgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgX19USU9DTU9ERyAgICAgICAgX0lPUigndCcsIDMsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgX19USU9DTU9EUyAgICAgICAgX0lPVygndCcsIDQsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgX19USU9DR0VUUCAgICAgICAgX0lPUigndCcsIDgsIHN0cnVjdCBzZ3R0eWIpIC8qIFN1bk9TIFNwZWNpZmljICovCi0jZGVmaW5lIF9fVElPQ1NFVFAgICAgICAgIF9JT1coJ3QnLCA5LCBzdHJ1Y3Qgc2d0dHliKSAvKiBTdW5PUyBTcGVjaWZpYyAqLwotI2RlZmluZSBfX1RJT0NTRVROICAgICAgICBfSU9XKCd0JywgMTAsIHN0cnVjdCBzZ3R0eWIpIC8qIFN1bk9TIFNwZWNpZmljICovCi0jZGVmaW5lIFRJT0NFWENMCV9JTygndCcsIDEzKQotI2RlZmluZSBUSU9DTlhDTAlfSU8oJ3QnLCAxNCkKLSNkZWZpbmUgX19USU9DRkxVU0ggICAgICAgX0lPVygndCcsIDE2LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCi0jZGVmaW5lIF9fVElPQ1NFVEMgICAgICAgIF9JT1coJ3QnLCAxNywgc3RydWN0IHRjaGFycykgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgX19USU9DR0VUQyAgICAgICAgX0lPUigndCcsIDE4LCBzdHJ1Y3QgdGNoYXJzKSAvKiBTdW5PUyBTcGVjaWZpYyAqLwotI2RlZmluZSBfX1RJT0NUQ05UTCAgICAgICBfSU9XKCd0JywgMzIsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgX19USU9DU0lHTkFMICAgICAgX0lPVygndCcsIDMzLCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCi0jZGVmaW5lIF9fVElPQ1NFVFggICAgICAgIF9JT1coJ3QnLCAzNCwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLwotI2RlZmluZSBfX1RJT0NHRVRYICAgICAgICBfSU9SKCd0JywgMzUsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgVElPQ0NPTlMJX0lPKCd0JywgMzYpCi0jZGVmaW5lIFRJT0NHU09GVENBUglfSU9SKCd0JywgMTAwLCBpbnQpCi0jZGVmaW5lIFRJT0NTU09GVENBUglfSU9XKCd0JywgMTAxLCBpbnQpCi0jZGVmaW5lIF9fVElPQ1VDTlRMICAgICAgIF9JT1coJ3QnLCAxMDIsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgVElPQ1NXSU5TWglfSU9XKCd0JywgMTAzLCBzdHJ1Y3Qgd2luc2l6ZSkKLSNkZWZpbmUgVElPQ0dXSU5TWglfSU9SKCd0JywgMTA0LCBzdHJ1Y3Qgd2luc2l6ZSkKLSNkZWZpbmUgX19USU9DUkVNT1RFICAgICAgX0lPVygndCcsIDEwNSwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLwotI2RlZmluZSBUSU9DTUdFVAlfSU9SKCd0JywgMTA2LCBpbnQpCi0jZGVmaW5lIFRJT0NNQklDCV9JT1coJ3QnLCAxMDcsIGludCkKLSNkZWZpbmUgVElPQ01CSVMJX0lPVygndCcsIDEwOCwgaW50KQotI2RlZmluZSBUSU9DTVNFVAlfSU9XKCd0JywgMTA5LCBpbnQpCi0jZGVmaW5lIFRJT0NTVEFSVCAgICAgICBfSU8oJ3QnLCAxMTApCi0jZGVmaW5lIFRJT0NTVE9QICAgICAgICBfSU8oJ3QnLCAxMTEpCi0jZGVmaW5lIFRJT0NQS1QJCV9JT1coJ3QnLCAxMTIsIGludCkKLSNkZWZpbmUgVElPQ05PVFRZCV9JTygndCcsIDExMykKLSNkZWZpbmUgVElPQ1NUSQkJX0lPVygndCcsIDExNCwgY2hhcikKLSNkZWZpbmUgVElPQ09VVFEJX0lPUigndCcsIDExNSwgaW50KQotI2RlZmluZSBfX1RJT0NHTFRDICAgICAgICBfSU9SKCd0JywgMTE2LCBzdHJ1Y3QgbHRjaGFycykgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgX19USU9DU0xUQyAgICAgICAgX0lPVygndCcsIDExNywgc3RydWN0IGx0Y2hhcnMpIC8qIFN1bk9TIFNwZWNpZmljICovCi0vKiAxMTggaXMgdGhlIG5vbi1wb3NpeCBzZXRwZ3JwIHR0eSBpb2N0bCAqLwotLyogMTE5IGlzIHRoZSBub24tcG9zaXggZ2V0cGdycCB0dHkgaW9jdGwgKi8KLSNkZWZpbmUgX19USU9DQ0RUUiAgICAgICAgX0lPKCd0JywgMTIwKSAvKiBTdW5PUyBTcGVjaWZpYyAqLwotI2RlZmluZSBfX1RJT0NTRFRSICAgICAgICBfSU8oJ3QnLCAxMjEpIC8qIFN1bk9TIFNwZWNpZmljICovCi0jZGVmaW5lIFRJT0NDQlJLICAgICAgICBfSU8oJ3QnLCAxMjIpCi0jZGVmaW5lIFRJT0NTQlJLICAgICAgICBfSU8oJ3QnLCAxMjMpCi0jZGVmaW5lIF9fVElPQ0xHRVQgICAgICAgIF9JT1coJ3QnLCAxMjQsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgX19USU9DTFNFVCAgICAgICAgX0lPVygndCcsIDEyNSwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLwotI2RlZmluZSBfX1RJT0NMQklDICAgICAgICBfSU9XKCd0JywgMTI2LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCi0jZGVmaW5lIF9fVElPQ0xCSVMgICAgICAgIF9JT1coJ3QnLCAxMjcsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgX19USU9DSVNQQUNFICAgICAgX0lPUigndCcsIDEyOCwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLwotI2RlZmluZSBfX1RJT0NJU0laRSAgICAgICBfSU9SKCd0JywgMTI5LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCi0jZGVmaW5lIFRJT0NTUEdSUAlfSU9XKCd0JywgMTMwLCBpbnQpCi0jZGVmaW5lIFRJT0NHUEdSUAlfSU9SKCd0JywgMTMxLCBpbnQpCi0jZGVmaW5lIFRJT0NTQ1RUWQlfSU8oJ3QnLCAxMzIpCi0jZGVmaW5lIFRJT0NHU0lECV9JT1IoJ3QnLCAxMzMsIGludCkKLS8qIEdldCBtaW5vciBkZXZpY2Ugb2YgYSBwdHkgbWFzdGVyJ3MgRkQgLS0gU29sYXJpcyBlcXVpdiBpcyBJU1BUTSAqLwotI2RlZmluZSBUSU9DR1BUTglfSU9SKCd0JywgMTM0LCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyICovCi0jZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygndCcsIDEzNSwgaW50KSAvKiBMb2NrL3VubG9jayBQVFkgKi8KLQotLyogTGl0dGxlIGYgKi8KLSNkZWZpbmUgRklPQ0xFWAkJX0lPKCdmJywgMSkKLSNkZWZpbmUgRklPTkNMRVgJX0lPKCdmJywgMikKLSNkZWZpbmUgRklPQVNZTkMJX0lPVygnZicsIDEyNSwgaW50KQotI2RlZmluZSBGSU9OQklPCQlfSU9XKCdmJywgMTI2LCBpbnQpCi0jZGVmaW5lIEZJT05SRUFECV9JT1IoJ2YnLCAxMjcsIGludCkKLSNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKLSNkZWZpbmUgRklPUVNJWkUJX0lPUignZicsIDEyOCwgbG9mZl90KQotCi0vKiBTQ0FSWSBSdXRnZXJzIGxvY2FsIFN1bk9TIGtlcm5lbCBoYWNrZXJ5LCBwZXJoYXBzIEkgd2lsbCBzdXBwb3J0IGl0Ci0gKiBzb21lZGF5LiAgVGhpcyBpcyBjb21wbGV0ZWx5IGJvZ3VzLCBJIGtub3cuLi4KLSAqLwotI2RlZmluZSBfX1RDR0VUU1RBVCAgICAgICBfSU8oJ1QnLCAyMDApIC8qIFJ1dGdlcnMgc3BlY2lmaWMgKi8KLSNkZWZpbmUgX19UQ1NFVFNUQVQgICAgICAgX0lPKCdUJywgMjAxKSAvKiBSdXRnZXJzIHNwZWNpZmljICovCi0KLS8qIExpbnV4IHNwZWNpZmljLCBubyBTdW5PUyBlcXVpdmFsZW50LiAqLwotI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCi0jZGVmaW5lIFRJT0NHU0VSSUFMCTB4NTQxRQotI2RlZmluZSBUSU9DU1NFUklBTAkweDU0MUYKLSNkZWZpbmUgVENTQlJLUAkJMHg1NDI1Ci0jZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCi0jZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0NTQKLSNkZWZpbmUgVElPQ1NFUlNXSUxECTB4NTQ1NQotI2RlZmluZSBUSU9DR0xDS1RSTUlPUwkweDU0NTYKLSNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDU3Ci0jZGVmaW5lIFRJT0NTRVJHU1RSVUNUCTB4NTQ1OCAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KLSNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ1OSAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KLSNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLwotI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QyAvKiBXYWl0IGZvciBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KLSNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVEIC8qIFJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KLQotLyogS2VybmVsIGRlZmluaXRpb25zICovCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBUSU9DR0VUQyBfX1RJT0NHRVRDCi0jZGVmaW5lIFRJT0NHRVRQIF9fVElPQ0dFVFAKLSNkZWZpbmUgVElPQ0dMVEMgX19USU9DR0xUQwotI2RlZmluZSBUSU9DU0xUQyBfX1RJT0NTTFRDCi0jZGVmaW5lIFRJT0NTRVRQIF9fVElPQ1NFVFAKLSNkZWZpbmUgVElPQ1NFVE4gX19USU9DU0VUTgotI2RlZmluZSBUSU9DU0VUQyBfX1RJT0NTRVRDCi0jZW5kaWYKLQotLyogVXNlZCBmb3IgcGFja2V0IG1vZGUgKi8KLSNkZWZpbmUgVElPQ1BLVF9EQVRBCQkgMAotI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRAkgMQotI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUJIDIKLSNkZWZpbmUgVElPQ1BLVF9TVE9QCQkgNAotI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAotI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKLSNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCi0KLSNlbmRpZiAvKiAhKF9BU01fU1BBUkM2NF9JT0NUTFNfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvaW9jdGxzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvbW11LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvbW11LmgKaW5kZXggZDdiOWFmYy4uNzYyNTJiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pb21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9tbXUuaApAQCAtMSw2MiArMSBAQAotLyogaW9tbXUuaDogRGVmaW5pdGlvbnMgZm9yIHRoZSBzdW41IElPTU1VLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OSwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCi0gKi8KLSNpZm5kZWYgX1NQQVJDNjRfSU9NTVVfSAotI2RlZmluZSBfU1BBUkM2NF9JT01NVV9ICi0KLS8qIFRoZSBmb3JtYXQgb2YgYW4gaW9wdGUgaW4gdGhlIHBhZ2UgdGFibGVzLiAqLwotI2RlZmluZSBJT1BURV9WQUxJRCAgIDB4ODAwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIElPUFRFXzY0SyAgICAgMHgyMDAwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgSU9QVEVfU1RCVUYgICAweDEwMDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBJT1BURV9JTlRSQSAgIDB4MDgwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIElPUFRFX0NPTlRFWFQgMHgwN2ZmODAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgSU9QVEVfUEFHRSAgICAweDAwMDA3ZmZmZmZmZmUwMDBVTAotI2RlZmluZSBJT1BURV9DQUNIRSAgIDB4MDAwMDAwMDAwMDAwMDAxMFVMCi0jZGVmaW5lIElPUFRFX1dSSVRFICAgMHgwMDAwMDAwMDAwMDAwMDAyVUwKLQotI2RlZmluZSBJT01NVV9OVU1fQ1RYUwk0MDk2Ci0KLXN0cnVjdCBpb21tdV9hcmVuYSB7Ci0JdW5zaWduZWQgbG9uZwkqbWFwOwotCXVuc2lnbmVkIGludAloaW50OwotCXVuc2lnbmVkIGludAlsaW1pdDsKLX07Ci0KLXN0cnVjdCBpb21tdSB7Ci0Jc3BpbmxvY2tfdAkJbG9jazsKLQlzdHJ1Y3QgaW9tbXVfYXJlbmEJYXJlbmE7Ci0Jdm9pZAkJCSgqZmx1c2hfYWxsKShzdHJ1Y3QgaW9tbXUgKik7Ci0JaW9wdGVfdAkJCSpwYWdlX3RhYmxlOwotCXUzMgkJCXBhZ2VfdGFibGVfbWFwX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZwkJaW9tbXVfY29udHJvbDsKLQl1bnNpZ25lZCBsb25nCQlpb21tdV90c2JiYXNlOwotCXVuc2lnbmVkIGxvbmcJCWlvbW11X2ZsdXNoOwotCXVuc2lnbmVkIGxvbmcJCWlvbW11X2ZsdXNoaW52OwotCXVuc2lnbmVkIGxvbmcJCWlvbW11X3RhZ3M7Ci0JdW5zaWduZWQgbG9uZwkJaW9tbXVfY3R4Zmx1c2g7Ci0JdW5zaWduZWQgbG9uZwkJd3JpdGVfY29tcGxldGVfcmVnOwotCXVuc2lnbmVkIGxvbmcJCWR1bW15X3BhZ2U7Ci0JdW5zaWduZWQgbG9uZwkJZHVtbXlfcGFnZV9wYTsKLQl1bnNpZ25lZCBsb25nCQljdHhfbG93ZXN0X2ZyZWU7Ci0JREVDTEFSRV9CSVRNQVAoY3R4X2JpdG1hcCwgSU9NTVVfTlVNX0NUWFMpOwotCXUzMgkJCWRtYV9hZGRyX21hc2s7Ci19OwotCi1zdHJ1Y3Qgc3RyYnVmIHsKLQlpbnQJCQlzdHJidWZfZW5hYmxlZDsKLQl1bnNpZ25lZCBsb25nCQlzdHJidWZfY29udHJvbDsKLQl1bnNpZ25lZCBsb25nCQlzdHJidWZfcGZsdXNoOwotCXVuc2lnbmVkIGxvbmcJCXN0cmJ1Zl9mc3luYzsKLQl1bnNpZ25lZCBsb25nCQlzdHJidWZfY3R4Zmx1c2g7Ci0JdW5zaWduZWQgbG9uZwkJc3RyYnVmX2N0eG1hdGNoX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZwkJc3RyYnVmX2ZsdXNoZmxhZ19wYTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpzdHJidWZfZmx1c2hmbGFnOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJX19mbHVzaGZsYWdfYnVmWyg2NCsoNjQtMSkpIC8gc2l6ZW9mKGxvbmcpXTsKLX07Ci0KLWV4dGVybiBpbnQgaW9tbXVfdGFibGVfaW5pdChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBpbnQgdHNic2l6ZSwKLQkJCSAgICB1MzIgZG1hX29mZnNldCwgdTMyIGRtYV9hZGRyX21hc2ssCi0JCQkgICAgaW50IG51bWFfbm9kZSk7Ci0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X0lPTU1VX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2lvbW11Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lwY2J1Zi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcGNidWYuaAppbmRleCA5YzViZjFiLi40MWRmYWYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lwY2J1Zi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXBjYnVmLmgKQEAgLTEsMjggKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfSVBDQlVGX0gKLSNkZWZpbmUgX1NQQVJDNjRfSVBDQlVGX0gKLQotLyogCi0gKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIHNwYXJjNjQgYXJjaGl0ZWN0dXJlLgotICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCi0gKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KLSAqCi0gKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6Ci0gKiAtIDMyLWJpdCBzZXEKLSAqIC0gMiBtaXNjZWxsYW5lb3VzIDY0LWJpdCB2YWx1ZXMKLSAqLwotCi1zdHJ1Y3QgaXBjNjRfcGVybQotewotCV9fa2VybmVsX2tleV90CWtleTsKLQlfX2tlcm5lbF91aWRfdAl1aWQ7Ci0JX19rZXJuZWxfZ2lkX3QJZ2lkOwotCV9fa2VybmVsX3VpZF90CWN1aWQ7Ci0JX19rZXJuZWxfZ2lkX3QJY2dpZDsKLQlfX2tlcm5lbF9tb2RlX3QJbW9kZTsgCi0JdW5zaWduZWQgc2hvcnQJX19wYWQxOwotCXVuc2lnbmVkIHNob3J0CXNlcTsKLQl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKLQl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKLX07Ci0KLSNlbmRpZiAvKiBfU1BBUkM2NF9JUENCVUZfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9pcGNidWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycS5oCmluZGV4IDBiYjliZjUuLmIyMTAyZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcnEuaApAQCAtMSw5MyArMSBAQAotLyogaXJxLmg6IElSUSByZWdpc3RlcnMgb24gdGhlIDY0LWJpdCBTcGFyYy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQotICogQ29weXJpZ2h0IChDKSAxOTk4IEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfSVJRX0gKLSNkZWZpbmUgX1NQQVJDNjRfSVJRX0gKLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9waWwuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLS8qIElNQVAvSUNMUiByZWdpc3RlciBkZWZpbmVzICovCi0jZGVmaW5lIElNQVBfVkFMSUQJCTB4ODAwMDAwMDBVTAkvKiBJUlEgRW5hYmxlZAkJKi8KLSNkZWZpbmUgSU1BUF9USURfVVBBCQkweDdjMDAwMDAwVUwJLyogVVBBIFRhcmdldElECQkqLwotI2RlZmluZSBJTUFQX1RJRF9KQlVTCQkweDdjMDAwMDAwVUwJLyogSkJVUyBUYXJnZXRJRAkqLwotI2RlZmluZSBJTUFQX1RJRF9TSElGVAkJMjYKLSNkZWZpbmUgSU1BUF9BSURfU0FGQVJJCQkweDdjMDAwMDAwVUwJLyogU2FmYXJpIEFnZW50SUQJKi8KLSNkZWZpbmUgSU1BUF9BSURfU0hJRlQJCTI2Ci0jZGVmaW5lIElNQVBfTklEX1NBRkFSSQkJMHgwM2UwMDAwMFVMCS8qIFNhZmFyaSBOb2RlSUQJKi8KLSNkZWZpbmUgSU1BUF9OSURfU0hJRlQJCTIxCi0jZGVmaW5lIElNQVBfSUdOCQkweDAwMDAwN2MwVUwJLyogSVJRIEdyb3VwIE51bWJlcgkqLwotI2RlZmluZSBJTUFQX0lOTwkJMHgwMDAwMDAzZlVMCS8qIElSUSBOdW1iZXIJCSovCi0jZGVmaW5lIElNQVBfSU5SCQkweDAwMDAwN2ZmVUwJLyogRnVsbCBpbnRlcnJ1cHQgbnVtYmVyKi8KLQotI2RlZmluZSBJQ0xSX0lETEUJCTB4MDAwMDAwMDBVTAkvKiBJZGxlIHN0YXRlCQkqLwotI2RlZmluZSBJQ0xSX1RSQU5TTUlUCQkweDAwMDAwMDAxVUwJLyogVHJhbnNtaXQgc3RhdGUJKi8KLSNkZWZpbmUgSUNMUl9QRU5ESU5HCQkweDAwMDAwMDAzVUwJLyogUGVuZGluZyBzdGF0ZQkqLwotCi0vKiBUaGUgbGFyZ2VzdCBudW1iZXIgb2YgdW5pcXVlIGludGVycnVwdCBzb3VyY2VzIHdlIHN1cHBvcnQuCi0gKiBJZiB0aGlzIG5lZWRzIHRvIGV2ZXIgYmUgbGFyZ2VyIHRoYW4gMjU1LCB5b3UgbmVlZCB0byBjaGFuZ2UKLSAqIHRoZSB0eXBlIG9mIGlub19idWNrZXQtPnZpcnRfaXJxIGFzIGFwcHJvcHJpYXRlLgotICoKLSAqIGlub19idWNrZXQtPnZpcnRfaXJxIGFsbG9jYXRpb24gaXMgbWFkZSBkdXJpbmcge3N1bjR2Xyx9YnVpbGRfaXJxKCkuCi0gKi8KLSNkZWZpbmUgTlJfSVJRUyAgICAyNTUKLQotZXh0ZXJuIHZvaWQgaXJxX2luc3RhbGxfcHJlX2hhbmRsZXIoaW50IHZpcnRfaXJxLAotCQkJCSAgICB2b2lkICgqZnVuYykodW5zaWduZWQgaW50LCB2b2lkICosIHZvaWQgKiksCi0JCQkJICAgIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpOwotI2RlZmluZSBpcnFfY2Fub25pY2FsaXplKGlycSkJKGlycSkKLWV4dGVybiB1bnNpZ25lZCBpbnQgYnVpbGRfaXJxKGludCBpbm9maXh1cCwgdW5zaWduZWQgbG9uZyBpY2xyLCB1bnNpZ25lZCBsb25nIGltYXApOwotZXh0ZXJuIHVuc2lnbmVkIGludCBzdW40dl9idWlsZF9pcnEodTMyIGRldmhhbmRsZSwgdW5zaWduZWQgaW50IGRldmlubyk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHN1bjR2X2J1aWxkX3ZpcnEodTMyIGRldmhhbmRsZSwgdW5zaWduZWQgaW50IGRldmlubyk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHN1bjR2X2J1aWxkX21zaSh1MzIgZGV2aGFuZGxlLCB1bnNpZ25lZCBpbnQgKnZpcnRfaXJxX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCBtc2lfZGV2aW5vX3N0YXJ0LAotCQkJCSAgICB1bnNpZ25lZCBpbnQgbXNpX2Rldmlub19lbmQpOwotZXh0ZXJuIHZvaWQgc3VuNHZfZGVzdHJveV9tc2kodW5zaWduZWQgaW50IHZpcnRfaXJxKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgc3VuNHVfYnVpbGRfbXNpKHUzMiBwb3J0aWQsIHVuc2lnbmVkIGludCAqdmlydF9pcnFfcCwKLQkJCQkgICAgdW5zaWduZWQgaW50IG1zaV9kZXZpbm9fc3RhcnQsCi0JCQkJICAgIHVuc2lnbmVkIGludCBtc2lfZGV2aW5vX2VuZCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBpbWFwX2Jhc2UsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgaWNscl9iYXNlKTsKLWV4dGVybiB2b2lkIHN1bjR1X2Rlc3Ryb3lfbXNpKHVuc2lnbmVkIGludCB2aXJ0X2lycSk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHNidXNfYnVpbGRfaXJxKHZvaWQgKnNidXMsIHVuc2lnbmVkIGludCBpbm8pOwotCi1leHRlcm4gdW5zaWduZWQgY2hhciB2aXJ0X2lycV9hbGxvYyh1bnNpZ25lZCBpbnQgZGV2X2hhbmRsZSwKLQkJCQkgICAgdW5zaWduZWQgaW50IGRldl9pbm8pOwotI2lmZGVmIENPTkZJR19QQ0lfTVNJCi1leHRlcm4gdm9pZCB2aXJ0X2lycV9mcmVlKHVuc2lnbmVkIGludCB2aXJ0X2lycSk7Ci0jZW5kaWYKLQotZXh0ZXJuIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpOwotZXh0ZXJuIHZvaWQgZml4dXBfaXJxcyh2b2lkKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9zb2Z0aW50KHVuc2lnbmVkIGxvbmcgYml0cykKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3IJJTAsIDB4MCwgJSVzZXRfc29mdGludCIKLQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiIChiaXRzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0aW50KHVuc2lnbmVkIGxvbmcgYml0cykKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3IJJTAsIDB4MCwgJSVjbGVhcl9zb2Z0aW50IgotCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiciIgKGJpdHMpKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9zb2Z0aW50KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyByZXR2YWw7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQJJSVzb2Z0aW50LCAlMCIKLQkJCSAgICAgOiAiPXIiIChyZXR2YWwpKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tc3BhcmMvaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycV9yZWdzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycV9yZWdzLmgKaW5kZXggM2RkOWMwYi4uMWUyYjhhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pcnFfcmVncy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxX3JlZ3MuaApAQCAtMSArMSBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lycV9yZWdzLmg+CisjaW5jbHVkZSA8YXNtLXNwYXJjL2lycV9yZWdzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycWZsYWdzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycWZsYWdzLmgKaW5kZXggMDI0ZmM1NC4uMjdiMDkxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pcnFmbGFncy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxZmxhZ3MuaApAQCAtMSw4OSArMSBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNwYXJjNjQvaXJxZmxhZ3MuaAotICoKLSAqIElSUSBmbGFncyBoYW5kbGluZwotICoKLSAqIFRoaXMgZmlsZSBnZXRzIGluY2x1ZGVkIGZyb20gbG93bGV2ZWwgYXNtIGhlYWRlcnMgdG9vLCB0byBwcm92aWRlCi0gKiB3cmFwcGVkIHZlcnNpb25zIG9mIHRoZSBsb2NhbF9pcnFfKigpIEFQSXMsIGJhc2VkIG9uIHRoZQotICogcmF3X2xvY2FsX2lycV8qKCkgZnVuY3Rpb25zIGZyb20gdGhlIGxvd2xldmVsIGhlYWRlcnMuCi0gKi8KLSNpZm5kZWYgX0FTTV9JUlFGTEFHU19ICi0jZGVmaW5lIF9BU01fSVJRRkxBR1NfSAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfc2F2ZV9mbGFncyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInJkcHIJJSVwaWwsICUwIgotCQk6ICI9ciIgKGZsYWdzKQotCSk7Ci0KLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLSNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpIFwKLQkJZG8geyAoZmxhZ3MpID0gX19yYXdfbG9jYWxfc2F2ZV9mbGFncygpOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJ3cnByCSUwLCAlJXBpbCIKLQkJOiAvKiBubyBvdXRwdXQgKi8KLQkJOiAiciIgKGZsYWdzKQotCQk6ICJtZW1vcnkiCi0JKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkid3JwcgkxNSwgJSVwaWwiCi0JCTogLyogbm8gb3V0cHV0cyAqLwotCQk6IC8qIG5vIGlucHV0cyAqLwotCQk6ICJtZW1vcnkiCi0JKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZW5hYmxlKHZvaWQpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJ3cnByCTAsICUlcGlsIgotCQk6IC8qIG5vIG91dHB1dHMgKi8KLQkJOiAvKiBubyBpbnB1dHMgKi8KLQkJOiAibWVtb3J5IgotCSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JcmV0dXJuIChmbGFncyA+IDApOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByYXdfaXJxc19kaXNhYmxlZCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7Ci0KLQlyZXR1cm4gcmF3X2lycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpOwotfQotCi0vKgotICogRm9yIHNwaW5sb2NrcywgZXRjOgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfaXJxX3NhdmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gX19yYXdfbG9jYWxfc2F2ZV9mbGFncygpOwotCi0JcmF3X2xvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLSNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKSBcCi0JCWRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX2lycV9zYXZlKCk7IH0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiAoX19BU1NFTUJMWV9fKSAqLwotCi0jZW5kaWYgLyogIShfQVNNX0lSUUZMQUdTX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL2lycWZsYWdzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9rZGVidWcuaAppbmRleCBmOTA1Yjc3Li43OGNmZDVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva2RlYnVnLmgKQEAgLTEsMTkgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfS0RFQlVHX0gKLSNkZWZpbmUgX1NQQVJDNjRfS0RFQlVHX0gKLQotc3RydWN0IHB0X3JlZ3M7Ci0KLWV4dGVybiB2b2lkIGJhZF90cmFwKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotCi0vKiBHcm9zc2x5IG1pc25hbWVkLiAqLwotZW51bSBkaWVfdmFsIHsKLQlESUVfT09QUyA9IDEsCi0JRElFX0RFQlVHLAkvKiB0YSAweDcwICovCi0JRElFX0RFQlVHXzIsCS8qIHRhIDB4NzEgKi8KLQlESUVfRElFLAotCURJRV9UUkFQLAotCURJRV9UUkFQX1RMMSwKLQlESUVfQ0FMTCwKLX07Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1zcGFyYy9rZGVidWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9rbWFwX3R5cGVzLmgKaW5kZXggMzRjMWQzZC4uMjc2NTMwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rbWFwX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9rbWFwX3R5cGVzLmgKQEAgLTEsMjUgKzEgQEAKLSNpZm5kZWYgX0FTTV9LTUFQX1RZUEVTX0gKLSNkZWZpbmUgX0FTTV9LTUFQX1RZUEVTX0gKLQotLyogRHVtbXkgaGVhZGVyIGp1c3QgdG8gZGVmaW5lIGttX3R5cGUuICBOb25lIG9mIHRoaXMKLSAqIGlzIGFjdHVhbGx5IHVzZWQgb24gc3BhcmM2NC4gIC1EYXZlTQotICovCi0KLWVudW0ga21fdHlwZSB7Ci0JS01fQk9VTkNFX1JFQUQsCi0JS01fU0tCX1NVTlJQQ19EQVRBLAotCUtNX1NLQl9EQVRBX1NPRlRJUlEsCi0JS01fVVNFUjAsCi0JS01fVVNFUjEsCi0JS01fQklPX1NSQ19JUlEsCi0JS01fQklPX0RTVF9JUlEsCi0JS01fUFRFMCwKLQlLTV9QVEUxLAotCUtNX0lSUTAsCi0JS01fSVJRMSwKLQlLTV9TT0ZUSVJRMCwKLQlLTV9TT0ZUSVJRMSwKLQlLTV9UWVBFX05SCi19OwotCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tc3BhcmMva21hcF90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAppbmRleCA1ODc5ZDcxLi5jNTVlNDNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaApAQCAtMSw0OSArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9LUFJPQkVTX0gKLSNkZWZpbmUgX1NQQVJDNjRfS1BST0JFU19ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotCi10eXBlZGVmIHUzMiBrcHJvYmVfb3Bjb2RlX3Q7Ci0KLSNkZWZpbmUgQlJFQUtQT0lOVF9JTlNUUlVDVElPTiAgIDB4OTFkMDIwNzAgLyogdGEgMHg3MCAqLwotI2RlZmluZSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OXzIgMHg5MWQwMjA3MSAvKiB0YSAweDcxICovCi0jZGVmaW5lIE1BWF9JTlNOX1NJWkUgMgotCi0jZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZSAwCi0KLSNkZWZpbmUgYXJjaF9yZW1vdmVfa3Byb2JlKHApCWRvIHt9IHdoaWxlICgwKQotCi0jZGVmaW5lIGZsdXNoX2luc25fc2xvdChwKQkJXAotZG8geyAJZmx1c2hpKCYocCktPmFpbnNuLmluc25bMF0pOwlcCi0JZmx1c2hpKCYocCktPmFpbnNuLmluc25bMV0pOwlcCi19IHdoaWxlICgwKQotCi12b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lKHZvaWQpOwotCi0vKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiovCi1zdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKLQkvKiBjb3B5IG9mIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLwotCWtwcm9iZV9vcGNvZGVfdCBpbnNuW01BWF9JTlNOX1NJWkVdOwotfTsKLQotc3RydWN0IHByZXZfa3Byb2JlIHsKLQlzdHJ1Y3Qga3Byb2JlICprcDsKLQl1bnNpZ25lZCBsb25nIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIG9yaWdfdG5wYzsKLQl1bnNpZ25lZCBsb25nIG9yaWdfdHN0YXRlX3BpbDsKLX07Ci0KLS8qIHBlci1jcHUga3Byb2JlIGNvbnRyb2wgYmxvY2sgKi8KLXN0cnVjdCBrcHJvYmVfY3RsYmxrIHsKLQl1bnNpZ25lZCBsb25nIGtwcm9iZV9zdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBrcHJvYmVfb3JpZ190bnBjOwotCXVuc2lnbmVkIGxvbmcga3Byb2JlX29yaWdfdHN0YXRlX3BpbDsKLQlzdHJ1Y3QgcHRfcmVncyBqcHJvYmVfc2F2ZWRfcmVnczsKLQlzdHJ1Y3QgcHJldl9rcHJvYmUgcHJldl9rcHJvYmU7Ci19OwotCi1leHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKLWV4dGVybiBpbnQga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpOwotI2VuZGlmIC8qIF9TUEFSQzY0X0tQUk9CRVNfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9rcHJvYmVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2t2bS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9rdm0uaAppbmRleCAzODA1MzdhLi41MzU2NGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2t2bS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva3ZtLmgKQEAgLTEsNiArMSBAQAotI2lmbmRlZiBfX0xJTlVYX0tWTV9TUEFSQzY0X0gKLSNkZWZpbmUgX19MSU5VWF9LVk1fU1BBUkM2NF9ICi0KLS8qIHNwYXJjNjQgZG9lcyBub3Qgc3VwcG9ydCBLVk0gKi8KLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLXNwYXJjL2t2bS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9sZGMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbGRjLmgKaW5kZXggYmRiNTI0YS4uNDBmM2YyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9sZGMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2xkYy5oCkBAIC0xLDEzOCArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9MRENfSAotI2RlZmluZSBfU1BBUkM2NF9MRENfSAotCi0jaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KLQotZXh0ZXJuIGludCBsZG9tX2RvbWFpbmluZ19lbmFibGVkOwotZXh0ZXJuIHZvaWQgbGRvbV9zZXRfdmFyKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOwotZXh0ZXJuIHZvaWQgbGRvbV9yZWJvb3QoY29uc3QgY2hhciAqYm9vdF9jb21tYW5kKTsKLWV4dGVybiB2b2lkIGxkb21fcG93ZXJfb2ZmKHZvaWQpOwotCi0vKiBUaGUgZXZlbnQgaGFuZGxlciB3aWxsIGJlIGV2b2tlZCB3aGVuIGxpbmsgc3RhdGUgY2hhbmdlcwotICogb3IgZGF0YSBiZWNvbWVzIGF2YWlsYWJsZSBvbiB0aGUgcmVjZWl2ZSBzaWRlLgotICoKLSAqIEZvciBub24tUkFXIGxpbmtzLCBpZiB0aGUgTERDX0VWRU5UX1JFU0VUIGV2ZW50IGFycml2ZXMgdGhlCi0gKiBkcml2ZXIgc2hvdWxkIHJlc2V0IGFsbCBvZiBpdCdzIGludGVybmFsIHN0YXRlIGFuZCByZWludm9rZQotICogbGRjX2Nvbm5lY3QoKSB0byB0cnkgYW5kIGJyaW5nIHRoZSBsaW5rIHVwIGFnYWluLgotICoKLSAqIEZvciBSQVcgbGlua3MsIGxkY19jb25uZWN0KCkgaXMgbm90IHVzZWQuICBJbnN0ZWFkIHRoZSBkcml2ZXIKLSAqIGp1c3Qgd2FpdHMgZm9yIHRoZSBMRENfRVZFTlRfVVAgZXZlbnQuCi0gKi8KLXN0cnVjdCBsZGNfY2hhbm5lbF9jb25maWcgewotCXZvaWQgKCpldmVudCkodm9pZCAqYXJnLCBpbnQgZXZlbnQpOwotCi0JdTMyCQkJbXR1OwotCXVuc2lnbmVkIGludAkJcnhfaXJxOwotCXVuc2lnbmVkIGludAkJdHhfaXJxOwotCXU4CQkJbW9kZTsKLSNkZWZpbmUgTERDX01PREVfUkFXCQkweDAwCi0jZGVmaW5lIExEQ19NT0RFX1VOUkVMSUFCTEUJMHgwMQotI2RlZmluZSBMRENfTU9ERV9SRVNFUlZFRAkweDAyCi0jZGVmaW5lIExEQ19NT0RFX1NUUkVBTQkJMHgwMwotCi0JdTgJCQlkZWJ1ZzsKLSNkZWZpbmUgTERDX0RFQlVHX0hTCQkweDAxCi0jZGVmaW5lIExEQ19ERUJVR19TVEFURQkJMHgwMgotI2RlZmluZSBMRENfREVCVUdfUlgJCTB4MDQKLSNkZWZpbmUgTERDX0RFQlVHX1RYCQkweDA4Ci0jZGVmaW5lIExEQ19ERUJVR19EQVRBCQkweDEwCi19OwotCi0jZGVmaW5lIExEQ19FVkVOVF9SRVNFVAkJMHgwMQotI2RlZmluZSBMRENfRVZFTlRfVVAJCTB4MDIKLSNkZWZpbmUgTERDX0VWRU5UX0RBVEFfUkVBRFkJMHgwNAotCi0jZGVmaW5lIExEQ19TVEFURV9JTlZBTElECTB4MDAKLSNkZWZpbmUgTERDX1NUQVRFX0lOSVQJCTB4MDEKLSNkZWZpbmUgTERDX1NUQVRFX0JPVU5ECQkweDAyCi0jZGVmaW5lIExEQ19TVEFURV9SRUFEWQkJMHgwMwotI2RlZmluZSBMRENfU1RBVEVfQ09OTkVDVEVECTB4MDQKLQotc3RydWN0IGxkY19jaGFubmVsOwotCi0vKiBBbGxvY2F0ZSBzdGF0ZSBmb3IgYSBjaGFubmVsLiAgKi8KLWV4dGVybiBzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxkY19hbGxvYyh1bnNpZ25lZCBsb25nIGlkLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGxkY19jaGFubmVsX2NvbmZpZyAqY2ZncCwKLQkJCQkgICAgIHZvaWQgKmV2ZW50X2FyZyk7Ci0KLS8qIFNodXQgZG93biBhbmQgZnJlZSBzdGF0ZSBmb3IgYSBjaGFubmVsLiAgKi8KLWV4dGVybiB2b2lkIGxkY19mcmVlKHN0cnVjdCBsZGNfY2hhbm5lbCAqbHApOwotCi0vKiBSZWdpc3RlciBUWCBhbmQgUlggcXVldWVzIG9mIHRoZSBsaW5rIHdpdGggdGhlIGh5cGVydmlzb3IuICAqLwotZXh0ZXJuIGludCBsZGNfYmluZChzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxwLCBjb25zdCBjaGFyICpuYW1lKTsKLQotLyogRm9yIG5vbi1SQVcgcHJvdG9jb2xzIHdlIG5lZWQgdG8gY29tcGxldGUgYSBoYW5kc2hha2UgYmVmb3JlCi0gKiBjb21tdW5pY2F0aW9uIGNhbiBwcm9jZWVkLiAgbGRjX2Nvbm5lY3QoKSBkb2VzIHRoYXQsIGlmIHRoZQotICogaGFuZHNoYWtlIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIGFuIExEQ19FVkVOVF9VUCBldmVudCB3aWxsCi0gKiBiZSBzZW50IHVwIHRvIHRoZSBkcml2ZXIuCi0gKi8KLWV4dGVybiBpbnQgbGRjX2Nvbm5lY3Qoc3RydWN0IGxkY19jaGFubmVsICpscCk7Ci1leHRlcm4gaW50IGxkY19kaXNjb25uZWN0KHN0cnVjdCBsZGNfY2hhbm5lbCAqbHApOwotCi1leHRlcm4gaW50IGxkY19zdGF0ZShzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxwKTsKLQotLyogUmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gIE9ubHkgdmFsaWQgd2hlbiB0aGUgbGluayBpcyB1cC4gICovCi1leHRlcm4gaW50IGxkY193cml0ZShzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxwLCBjb25zdCB2b2lkICpidWYsCi0JCSAgICAgdW5zaWduZWQgaW50IHNpemUpOwotZXh0ZXJuIGludCBsZGNfcmVhZChzdHJ1Y3QgbGRjX2NoYW5uZWwgKmxwLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBzaXplKTsKLQotI2RlZmluZSBMRENfTUFQX1NIQURPVwkweDAxCi0jZGVmaW5lIExEQ19NQVBfRElSRUNUCTB4MDIKLSNkZWZpbmUgTERDX01BUF9JTwkweDA0Ci0jZGVmaW5lIExEQ19NQVBfUgkweDA4Ci0jZGVmaW5lIExEQ19NQVBfVwkweDEwCi0jZGVmaW5lIExEQ19NQVBfWAkweDIwCi0jZGVmaW5lIExEQ19NQVBfUlcJKExEQ19NQVBfUiB8IExEQ19NQVBfVykKLSNkZWZpbmUgTERDX01BUF9SV1gJKExEQ19NQVBfUiB8IExEQ19NQVBfVyB8IExEQ19NQVBfWCkKLSNkZWZpbmUgTERDX01BUF9BTEwJMHgwM2YKLQotc3RydWN0IGxkY190cmFuc19jb29raWUgewotCXU2NAkJCWNvb2tpZV9hZGRyOwotCXU2NAkJCWNvb2tpZV9zaXplOwotfTsKLQotc3RydWN0IHNjYXR0ZXJsaXN0OwotZXh0ZXJuIGludCBsZGNfbWFwX3NnKHN0cnVjdCBsZGNfY2hhbm5lbCAqbHAsCi0JCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBudW1fc2csCi0JCSAgICAgIHN0cnVjdCBsZGNfdHJhbnNfY29va2llICpjb29raWVzLCBpbnQgbmNvb2tpZXMsCi0JCSAgICAgIHVuc2lnbmVkIGludCBtYXBfcGVybSk7Ci0KLWV4dGVybiBpbnQgbGRjX21hcF9zaW5nbGUoc3RydWN0IGxkY19jaGFubmVsICpscCwKLQkJCSAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLAotCQkJICBzdHJ1Y3QgbGRjX3RyYW5zX2Nvb2tpZSAqY29va2llcywgaW50IG5jb29raWVzLAotCQkJICB1bnNpZ25lZCBpbnQgbWFwX3Blcm0pOwotCi1leHRlcm4gdm9pZCBsZGNfdW5tYXAoc3RydWN0IGxkY19jaGFubmVsICpscCwgc3RydWN0IGxkY190cmFuc19jb29raWUgKmNvb2tpZXMsCi0JCSAgICAgIGludCBuY29va2llcyk7Ci0KLWV4dGVybiBpbnQgbGRjX2NvcHkoc3RydWN0IGxkY19jaGFubmVsICpscCwgaW50IGNvcHlfZGlyLAotCQkgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJICAgIHN0cnVjdCBsZGNfdHJhbnNfY29va2llICpjb29raWVzLCBpbnQgbmNvb2tpZXMpOwotCi1zdGF0aWMgaW5saW5lIGludCBsZGNfZ2V0X2RyaW5nX2VudHJ5KHN0cnVjdCBsZGNfY2hhbm5lbCAqbHAsCi0JCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCSAgICAgIHN0cnVjdCBsZGNfdHJhbnNfY29va2llICpjb29raWVzLAotCQkJCSAgICAgIGludCBuY29va2llcykKLXsKLQlyZXR1cm4gbGRjX2NvcHkobHAsIExEQ19DT1BZX0lOLCBidWYsIGxlbiwgb2Zmc2V0LCBjb29raWVzLCBuY29va2llcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGxkY19wdXRfZHJpbmdfZW50cnkoc3RydWN0IGxkY19jaGFubmVsICpscCwKLQkJCQkgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJICAgICAgc3RydWN0IGxkY190cmFuc19jb29raWUgKmNvb2tpZXMsCi0JCQkJICAgICAgaW50IG5jb29raWVzKQotewotCXJldHVybiBsZGNfY29weShscCwgTERDX0NPUFlfT1VULCBidWYsIGxlbiwgb2Zmc2V0LCBjb29raWVzLCBuY29va2llcyk7Ci19Ci0KLWV4dGVybiB2b2lkICpsZGNfYWxsb2NfZXhwX2RyaW5nKHN0cnVjdCBsZGNfY2hhbm5lbCAqbHAsIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJIHN0cnVjdCBsZGNfdHJhbnNfY29va2llICpjb29raWVzLAotCQkJCSBpbnQgKm5jb29raWVzLCB1bnNpZ25lZCBpbnQgbWFwX3Blcm0pOwotCi1leHRlcm4gdm9pZCBsZGNfZnJlZV9leHBfZHJpbmcoc3RydWN0IGxkY19jaGFubmVsICpscCwgdm9pZCAqYnVmLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCi0JCQkgICAgICAgc3RydWN0IGxkY190cmFuc19jb29raWUgKmNvb2tpZXMsIGludCBuY29va2llcyk7Ci0KLSNlbmRpZiAvKiBfU1BBUkM2NF9MRENfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9sZGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9saW5rYWdlLmgKaW5kZXggMjkxYzJkMC4uM2VhNGZkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9saW5rYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9saW5rYWdlLmgKQEAgLTEsNiArMSBAQAotI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKLSNkZWZpbmUgX19BU01fTElOS0FHRV9ICi0KLS8qIE5vdGhpbmcgdG8gc2VlIGhlcmUuLi4gKi8KLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLXNwYXJjL2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbG1iLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2xtYi5oCmluZGV4IDZhMzUyY2IuLjNkMDQ5ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbG1iLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9sbWIuaApAQCAtMSwxMCArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9MTUJfSAotI2RlZmluZSBfU1BBUkM2NF9MTUJfSAotCi0jaW5jbHVkZSA8YXNtL29wbGliLmg+Ci0KLSNkZWZpbmUgTE1CX0RCRyhmbXQuLi4pIHByb21fcHJpbnRmKGZtdCkKLQotI2RlZmluZSBMTUJfUkVBTF9MSU1JVAkwCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X0xNQl9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9sbWIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbHN1LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2xzdS5oCmluZGV4IDcxOTBmOGQuLjRlM2Q4YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbHN1LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9sc3UuaApAQCAtMSwxOSArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9MU1VfSAotI2RlZmluZSBfU1BBUkM2NF9MU1VfSAotCi0jaW5jbHVkZSA8bGludXgvY29uc3QuaD4KLQotLyogTFNVIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTFNVX0NPTlRST0xfUE0gX0FDKDB4MDAwMDAxZmUwMDAwMDAwMCxVTCkgLyogUGh5cy13YXRjaHBvaW50IGJ5dGUgbWFzayovCi0jZGVmaW5lIExTVV9DT05UUk9MX1ZNIF9BQygweDAwMDAwMDAxZmUwMDAwMDAsVUwpIC8qIFZpcnQtd2F0Y2hwb2ludCBieXRlIG1hc2sqLwotI2RlZmluZSBMU1VfQ09OVFJPTF9QUiBfQUMoMHgwMDAwMDAwMDAxMDAwMDAwLFVMKSAvKiBQaHlzLXJkIHdhdGNocG9pbnQgZW5hYmxlKi8KLSNkZWZpbmUgTFNVX0NPTlRST0xfUFcgX0FDKDB4MDAwMDAwMDAwMDgwMDAwMCxVTCkgLyogUGh5cy13ciB3YXRjaHBvaW50IGVuYWJsZSovCi0jZGVmaW5lIExTVV9DT05UUk9MX1ZSIF9BQygweDAwMDAwMDAwMDA0MDAwMDAsVUwpIC8qIFZpcnQtcmQgd2F0Y2hwb2ludCBlbmFibGUqLwotI2RlZmluZSBMU1VfQ09OVFJPTF9WVyBfQUMoMHgwMDAwMDAwMDAwMjAwMDAwLFVMKSAvKiBWaXJ0LXdyIHdhdGNocG9pbnQgZW5hYmxlKi8KLSNkZWZpbmUgTFNVX0NPTlRST0xfRk0gX0FDKDB4MDAwMDAwMDAwMDBmZmZmMCxVTCkgLyogUGFyaXR5IG1hc2sgZW5hYmxlcy4gICAgICovCi0jZGVmaW5lIExTVV9DT05UUk9MX0RNIF9BQygweDAwMDAwMDAwMDAwMDAwMDgsVUwpIC8qIERhdGEgTU1VIGVuYWJsZS4gICAgICAgICAqLwotI2RlZmluZSBMU1VfQ09OVFJPTF9JTSBfQUMoMHgwMDAwMDAwMDAwMDAwMDA0LFVMKSAvKiBJbnN0cnVjdGlvbiBNTVUgZW5hYmxlLiAgKi8KLSNkZWZpbmUgTFNVX0NPTlRST0xfREMgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMixVTCkgLyogRGF0YSBjYWNoZSBlbmFibGUuICAgICAgICovCi0jZGVmaW5lIExTVV9DT05UUk9MX0lDIF9BQygweDAwMDAwMDAwMDAwMDAwMDEsVUwpIC8qIEluc3RydWN0aW9uIGNhY2hlIGVuYWJsZS4qLwotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9MU1VfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvbHN1Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21jMTQ2ODE4cnRjLmgKaW5kZXggZTljMGZjYy4uOTc4NDJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tYzE0NjgxOHJ0Yy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbWMxNDY4MThydGMuaApAQCAtMSwzNCArMSBAQAotLyoKLSAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCi0gKi8KLSNpZm5kZWYgX19BU01fU1BBUkM2NF9NQzE0NjgxOFJUQ19ICi0jZGVmaW5lIF9fQVNNX1NQQVJDNjRfTUMxNDY4MThSVENfSAotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpZm5kZWYgUlRDX1BPUlQKLSNpZmRlZiBDT05GSUdfUENJCi1leHRlcm4gdW5zaWduZWQgbG9uZyBkczEyODdfcmVnczsKLSNlbHNlCi0jZGVmaW5lIGRzMTI4N19yZWdzICgwVUwpCi0jZW5kaWYKLSNkZWZpbmUgUlRDX1BPUlQoeCkJKGRzMTI4N19yZWdzICsgKHgpKQotI2RlZmluZSBSVENfQUxXQVlTX0JDRAkwCi0jZW5kaWYKLQotLyoKLSAqIFRoZSB5ZXQgc3VwcG9ydGVkIG1hY2hpbmVzIGFsbCBhY2Nlc3MgdGhlIFJUQyBpbmRleCByZWdpc3RlciB2aWEKLSAqIGFuIElTQSBwb3J0IGFjY2VzcyBidXQgdGhlIHdheSB0byBhY2Nlc3MgdGhlIGRhdGUgcmVnaXN0ZXIgZGlmZmVycyAuLi4KLSAqLwotI2RlZmluZSBDTU9TX1JFQUQoYWRkcikgKHsgXAotb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKLWluYl9wKFJUQ19QT1JUKDEpKTsgXAotfSkKLSNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpICh7IFwKLW91dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCi1vdXRiX3AoKHZhbCksUlRDX1BPUlQoMSkpOyBcCi19KQotCi0jZGVmaW5lIFJUQ19JUlEgOAotCi0jZW5kaWYgLyogX19BU01fU1BBUkM2NF9NQzE0NjgxOFJUQ19IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL21jMTQ2ODE4cnRjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21kZXNjLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21kZXNjLmgKaW5kZXggMWFjYzcyNy4uMTY1YTE5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tZGVzYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbWRlc2MuaApAQCAtMSw3OCArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9NREVTQ19ICi0jZGVmaW5lIF9TUEFSQzY0X01ERVNDX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0KLXN0cnVjdCBtZGVzY19oYW5kbGU7Ci0KLS8qIE1hY2hpbmUgZGVzY3JpcHRpb24gb3BlcmF0aW9ucyBhcmUgdG8gYmUgc3Vycm91bmRlZCBieSBncmFiIGFuZAotICogcmVsZWFzZSBjYWxscy4gIFRoZSBtZGVzY19oYW5kbGUgcmV0dXJuZWQgZnJvbSB0aGUgZ3JhYiBpcwotICogdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGFsbCBvZiB0aGUgb3BlcmF0aW9uYWwgY2FsbHMgdGhhdCB3b3JrCi0gKiBvbiBtZGVzY3MuCi0gKi8KLWV4dGVybiBzdHJ1Y3QgbWRlc2NfaGFuZGxlICptZGVzY19ncmFiKHZvaWQpOwotZXh0ZXJuIHZvaWQgbWRlc2NfcmVsZWFzZShzdHJ1Y3QgbWRlc2NfaGFuZGxlICopOwotCi0jZGVmaW5lIE1ERVNDX05PREVfTlVMTAkJKH4odTY0KTApCi0KLWV4dGVybiB1NjQgbWRlc2Nfbm9kZV9ieV9uYW1lKHN0cnVjdCBtZGVzY19oYW5kbGUgKmhhbmRsZSwKLQkJCSAgICAgIHU2NCBmcm9tX25vZGUsIGNvbnN0IGNoYXIgKm5hbWUpOwotI2RlZmluZSBtZGVzY19mb3JfZWFjaF9ub2RlX2J5X25hbWUoX19oZGwsIF9fbm9kZSwgX19uYW1lKSBcCi0JZm9yIChfX25vZGUgPSBtZGVzY19ub2RlX2J5X25hbWUoX19oZGwsIE1ERVNDX05PREVfTlVMTCwgX19uYW1lKTsgXAotCSAgICAgKF9fbm9kZSkgIT0gTURFU0NfTk9ERV9OVUxMOyBcCi0JICAgICBfX25vZGUgPSBtZGVzY19ub2RlX2J5X25hbWUoX19oZGwsIF9fbm9kZSwgX19uYW1lKSkKLQotLyogQWNjZXNzIHRvIHByb3BlcnR5IHZhbHVlcyByZXR1cm5lZCBmcm9tIG1kZXNjX2dldF9wcm9wZXJ0eSgpIGFyZQotICogb25seSB2YWxpZCBpbnNpZGUgb2YgYSBtZGVzY19ncmFiKCkvbWRlc2NfcmVsZWFzZSgpIHNlcXVlbmNlLgotICogT25jZSBtZGVzY19yZWxlYXNlKCkgaXMgY2FsbGVkLCB0aGUgbWVtb3J5IGJhY2tlZCB1cCBieSB0aGVzZQotICogcG9pbnRlcnMgbWF5IHJlZmVyZW5jZSBmcmVlZCB1cCBtZW1vcnkuCi0gKgotICogVGhlcmVmb3JlIGNhbGxlcnMgbXVzdCBtYWtlIGNvcGllcyBvZiBhbnkgcHJvcGVydHkgdmFsdWVzCi0gKiB0aGV5IG5lZWQuCi0gKgotICogVGhlc2Ugc2FtZSBydWxlcyBhcHBseSB0byBtZGVzY19ub2RlX25hbWUoKS4KLSAqLwotZXh0ZXJuIGNvbnN0IHZvaWQgKm1kZXNjX2dldF9wcm9wZXJ0eShzdHJ1Y3QgbWRlc2NfaGFuZGxlICpoYW5kbGUsCi0JCQkJICAgICAgdTY0IG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCAqbGVucCk7Ci1leHRlcm4gY29uc3QgY2hhciAqbWRlc2Nfbm9kZV9uYW1lKHN0cnVjdCBtZGVzY19oYW5kbGUgKmhwLCB1NjQgbm9kZSk7Ci0KLS8qIE1EIGFyYyBpdGVyYXRpb24sIHRoZSBzdGFuZGFyZCBzZXF1ZW5jZSBpczoKLSAqCi0gKgl1bnNpZ25lZCBsb25nIGFyYzsKLSAqCW1kZXNjX2Zvcl9lYWNoX2FyYyhhcmMsIGhhbmRsZSwgbm9kZSwgTURFU0NfQVJDX1RZUEVfe0ZXRCxCQUNLfSkgewotICoJCXVuc2lnbmVkIGxvbmcgdGFyZ2V0ID0gbWRlc2NfYXJjX3RhcmdldChoYW5kbGUsIGFyYyk7Ci0gKgkJLi4uCi0gKgl9Ci0gKi8KLQotI2RlZmluZSBNREVTQ19BUkNfVFlQRV9GV0QJImZ3ZCIKLSNkZWZpbmUgTURFU0NfQVJDX1RZUEVfQkFDSwkiYmFjayIKLQotZXh0ZXJuIHU2NCBtZGVzY19uZXh0X2FyYyhzdHJ1Y3QgbWRlc2NfaGFuZGxlICpoYW5kbGUsIHU2NCBmcm9tLAotCQkJICBjb25zdCBjaGFyICphcmNfdHlwZSk7Ci0jZGVmaW5lIG1kZXNjX2Zvcl9lYWNoX2FyYyhfX2FyYywgX19oZGwsIF9fbm9kZSwgX190eXBlKSBcCi0JZm9yIChfX2FyYyA9IG1kZXNjX25leHRfYXJjKF9faGRsLCBfX25vZGUsIF9fdHlwZSk7IFwKLQkgICAgIChfX2FyYykgIT0gTURFU0NfTk9ERV9OVUxMOyBcCi0JICAgICBfX2FyYyA9IG1kZXNjX25leHRfYXJjKF9faGRsLCBfX2FyYywgX190eXBlKSkKLQotZXh0ZXJuIHU2NCBtZGVzY19hcmNfdGFyZ2V0KHN0cnVjdCBtZGVzY19oYW5kbGUgKmhwLCB1NjQgYXJjKTsKLQotZXh0ZXJuIHZvaWQgbWRlc2NfdXBkYXRlKHZvaWQpOwotCi1zdHJ1Y3QgbWRlc2Nfbm90aWZpZXJfY2xpZW50IHsKLQl2b2lkICgqYWRkKShzdHJ1Y3QgbWRlc2NfaGFuZGxlICpoYW5kbGUsIHU2NCBub2RlKTsKLQl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgbWRlc2NfaGFuZGxlICpoYW5kbGUsIHU2NCBub2RlKTsKLQotCWNvbnN0IGNoYXIJCQkqbm9kZV9uYW1lOwotCXN0cnVjdCBtZGVzY19ub3RpZmllcl9jbGllbnQJKm5leHQ7Ci19OwotCi1leHRlcm4gdm9pZCBtZGVzY19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgbWRlc2Nfbm90aWZpZXJfY2xpZW50ICpjbGllbnQpOwotCi1leHRlcm4gdm9pZCBtZGVzY19maWxsX2luX2NwdV9kYXRhKGNwdW1hc2tfdCBtYXNrKTsKLQotZXh0ZXJuIHZvaWQgc3VuNHZfbWRlc2NfaW5pdCh2b2lkKTsKLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLXNwYXJjL21kZXNjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21tYW4uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW1hbi5oCmluZGV4IGQyYWU2N2MuLjE3ZGRiMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW1hbi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW1hbi5oCkBAIC0xLDMxICsxIEBACi0jaWZuZGVmIF9fU1BBUkM2NF9NTUFOX0hfXwotI2RlZmluZSBfX1NQQVJDNjRfTU1BTl9IX18KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4uaD4KLQotLyogU3VuT1MnaWZpZWQuLi4gKi8KLQotI2RlZmluZSBNQVBfUkVOQU1FICAgICAgTUFQX0FOT05ZTU9VUyAgIC8qIEluIFN1bk9TIHRlcm1pbm9sb2d5ICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUgICAweDQwICAgICAgICAgICAgLyogZG9uJ3QgcmVzZXJ2ZSBzd2FwIHBhZ2VzICovCi0jZGVmaW5lIE1BUF9JTkhFUklUICAgICAweDgwICAgICAgICAgICAgLyogU3VuT1MgZG9lc24ndCBkbyB0aGlzLCBidXQuLi4gKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRCAgICAgIDB4MTAwICAgICAgICAgICAvKiBsb2NrIHRoZSBtYXBwaW5nICovCi0jZGVmaW5lIF9NQVBfTkVXICAgICAgICAweDgwMDAwMDAwICAgICAgLyogQmluYXJ5IGNvbXBhdGliaWxpdHkgaXMgZnVuLi4uICovCi0KLSNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAyMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLwotI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDgwMAkJLyogRVRYVEJTWSAqLwotI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDEwMDAJCS8qIG1hcmsgaXQgYXMgYW4gZXhlY3V0YWJsZSAqLwotCi0jZGVmaW5lIE1DTF9DVVJSRU5UICAgICAweDIwMDAgICAgICAgICAgLyogbG9jayBhbGwgY3VycmVudGx5IG1hcHBlZCBwYWdlcyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFICAgICAgMHg0MDAwICAgICAgICAgIC8qIGxvY2sgYWxsIGFkZGl0aW9ucyB0byBhZGRyZXNzIHNwYWNlICovCi0KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCi0jZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIGFyY2hfbW1hcF9jaGVjayhhZGRyLGxlbixmbGFncykJc3BhcmM2NF9tbWFwX2NoZWNrKGFkZHIsbGVuKQotaW50IHNwYXJjNjRfbW1hcF9jaGVjayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX1NQQVJDNjRfTU1BTl9IX18gKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvbW1hbi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW11LmgKaW5kZXggOGFiYzU4Zi4uZTY3N2E2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdS5oCkBAIC0xLDEyNyArMSBAQAotI2lmbmRlZiBfX01NVV9ICi0jZGVmaW5lIF9fTU1VX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgotCi0jZGVmaW5lIENUWF9OUl9CSVRTCQkxMwotCi0jZGVmaW5lIFRBR19DT05URVhUX0JJVFMJKChfQUMoMSxVTCkgPDwgQ1RYX05SX0JJVFMpIC0gX0FDKDEsVUwpKQotCi0vKiBVbHRyYVNQQVJDLUlJSSsgYW5kIGxhdGVyIGhhdmUgYSBmZWF0dXJlIHdoZXJlYnkgeW91IGNhbgotICogc2VsZWN0IHdoYXQgcGFnZSBzaXplIHRoZSB2YXJpb3VzIERhdGEtVExCIGluc3RhbmNlcyBpbiB0aGUKLSAqIGNoaXAuICBJbiBvcmRlciB0byBncmFjZWZ1bGx5IHN1cHBvcnQgdGhpcywgd2UgcHV0IHRoZSB2ZXJzaW9uCi0gKiBmaWVsZCBpbiBhIHNwb3Qgb3V0c2lkZSBvZiB0aGUgYXJlYXMgb2YgdGhlIGNvbnRleHQgcmVnaXN0ZXIKLSAqIHdoZXJlIHRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmllZC4KLSAqLwotI2RlZmluZSBDVFhfVkVSU0lPTl9TSElGVAkyMgotI2RlZmluZSBDVFhfVkVSU0lPTl9NQVNLCSgofjBVTCkgPDwgQ1RYX1ZFUlNJT05fU0hJRlQpCi0KLSNkZWZpbmUgQ1RYX1BHU1pfOEtCCQlfQUMoMHgwLFVMKQotI2RlZmluZSBDVFhfUEdTWl82NEtCCQlfQUMoMHgxLFVMKQotI2RlZmluZSBDVFhfUEdTWl81MTJLQgkJX0FDKDB4MixVTCkKLSNkZWZpbmUgQ1RYX1BHU1pfNE1CCQlfQUMoMHgzLFVMKQotI2RlZmluZSBDVFhfUEdTWl9CSVRTCQlfQUMoMHg3LFVMKQotI2RlZmluZSBDVFhfUEdTWjBfTlVDX1NISUZUCTYxCi0jZGVmaW5lIENUWF9QR1NaMV9OVUNfU0hJRlQJNTgKLSNkZWZpbmUgQ1RYX1BHU1owX1NISUZUCQkxNgotI2RlZmluZSBDVFhfUEdTWjFfU0hJRlQJCTE5Ci0jZGVmaW5lIENUWF9QR1NaX01BU0sJCSgoQ1RYX1BHU1pfQklUUyA8PCBDVFhfUEdTWjBfU0hJRlQpIHwgXAotCQkJCSAoQ1RYX1BHU1pfQklUUyA8PCBDVFhfUEdTWjFfU0hJRlQpKQotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfOEtCKQotI2RlZmluZSBDVFhfUEdTWl9CQVNFCUNUWF9QR1NaXzhLQgotI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNjRLQikKLSNkZWZpbmUgQ1RYX1BHU1pfQkFTRQlDVFhfUEdTWl82NEtCCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV81MTJLQikKLSNkZWZpbmUgQ1RYX1BHU1pfQkFTRQlDVFhfUEdTWl81MTJLQgotI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNE1CKQotI2RlZmluZSBDVFhfUEdTWl9CQVNFCUNUWF9QR1NaXzRNQgotI2Vsc2UKLSNlcnJvciBObyBwYWdlIHNpemUgc3BlY2lmaWVkIGluIGtlcm5lbCBjb25maWd1cmF0aW9uCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQikKLSNkZWZpbmUgQ1RYX1BHU1pfSFVHRQkJQ1RYX1BHU1pfNE1CCi0jZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJLKQotI2RlZmluZSBDVFhfUEdTWl9IVUdFCQlDVFhfUEdTWl81MTJLQgotI2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKQotI2RlZmluZSBDVFhfUEdTWl9IVUdFCQlDVFhfUEdTWl82NEtCCi0jZW5kaWYKLQotI2RlZmluZSBDVFhfUEdTWl9LRVJOCUNUWF9QR1NaXzRNQgotCi0vKiBUaHVzLCB3aGVuIHJ1bm5pbmcgb24gVWx0cmFTUEFSQy1JSUkrIGFuZCBsYXRlciwgd2UgdXNlIHRoZSBmb2xsb3dpbmcKLSAqIFBSSU1BUllfQ09OVEVYVCByZWdpc3RlciB2YWx1ZXMgZm9yIHRoZSBrZXJuZWwgY29udGV4dC4KLSAqLwotI2RlZmluZSBDVFhfQ0hFRVRBSF9QTFVTX05VQyBcCi0JKChDVFhfUEdTWl9LRVJOIDw8IENUWF9QR1NaMF9OVUNfU0hJRlQpIHwgXAotCSAoQ1RYX1BHU1pfQkFTRSA8PCBDVFhfUEdTWjFfTlVDX1NISUZUKSkKLQotI2RlZmluZSBDVFhfQ0hFRVRBSF9QTFVTX0NUWDAgXAotCSgoQ1RYX1BHU1pfS0VSTiA8PCBDVFhfUEdTWjBfU0hJRlQpIHwgXAotCSAoQ1RYX1BHU1pfQkFTRSA8PCBDVFhfUEdTWjFfU0hJRlQpKQotCi0vKiBJZiB5b3Ugd2FudCAidGhlIFRMQiBjb250ZXh0IG51bWJlciIgdXNlIENUWF9OUl9NQVNLLiAgSWYgeW91Ci0gKiB3YW50ICJ0aGUgYml0cyBJIHByb2dyYW0gaW50byB0aGUgY29udGV4dCByZWdpc3RlcnMiIHVzZQotICogQ1RYX0hXX01BU0suCi0gKi8KLSNkZWZpbmUgQ1RYX05SX01BU0sJCVRBR19DT05URVhUX0JJVFMKLSNkZWZpbmUgQ1RYX0hXX01BU0sJCShDVFhfTlJfTUFTSyB8IENUWF9QR1NaX01BU0spCi0KLSNkZWZpbmUgQ1RYX0ZJUlNUX1ZFUlNJT04JKChfQUMoMSxVTCkgPDwgQ1RYX1ZFUlNJT05fU0hJRlQpICsgX0FDKDEsVUwpKQotI2RlZmluZSBDVFhfVkFMSUQoX19jdHgpCVwKLQkgKCEoKChfX2N0eC5zcGFyYzY0X2N0eF92YWwpIF4gdGxiX2NvbnRleHRfY2FjaGUpICYgQ1RYX1ZFUlNJT05fTUFTSykpCi0jZGVmaW5lIENUWF9IV0JJVFMoX19jdHgpCSgoX19jdHguc3BhcmM2NF9jdHhfdmFsKSAmIENUWF9IV19NQVNLKQotI2RlZmluZSBDVFhfTlJCSVRTKF9fY3R4KQkoKF9fY3R4LnNwYXJjNjRfY3R4X3ZhbCkgJiBDVFhfTlJfTUFTSykKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2RlZmluZSBUU0JfRU5UUllfQUxJR05NRU5UCTE2Ci0KLXN0cnVjdCB0c2IgewotCXVuc2lnbmVkIGxvbmcgdGFnOwotCXVuc2lnbmVkIGxvbmcgcHRlOwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFRTQl9FTlRSWV9BTElHTk1FTlQpKSk7Ci0KLWV4dGVybiB2b2lkIF9fdHNiX2luc2VydCh1bnNpZ25lZCBsb25nIGVudCwgdW5zaWduZWQgbG9uZyB0YWcsIHVuc2lnbmVkIGxvbmcgcHRlKTsKLWV4dGVybiB2b2lkIHRzYl9mbHVzaCh1bnNpZ25lZCBsb25nIGVudCwgdW5zaWduZWQgbG9uZyB0YWcpOwotZXh0ZXJuIHZvaWQgdHNiX2luaXQoc3RydWN0IHRzYiAqdHNiLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi1zdHJ1Y3QgdHNiX2NvbmZpZyB7Ci0Jc3RydWN0IHRzYgkJKnRzYjsKLQl1bnNpZ25lZCBsb25nCQl0c2JfcnNzX2xpbWl0OwotCXVuc2lnbmVkIGxvbmcJCXRzYl9uZW50cmllczsKLQl1bnNpZ25lZCBsb25nCQl0c2JfcmVnX3ZhbDsKLQl1bnNpZ25lZCBsb25nCQl0c2JfbWFwX3ZhZGRyOwotCXVuc2lnbmVkIGxvbmcJCXRzYl9tYXBfcHRlOwotfTsKLQotI2RlZmluZSBNTV9UU0JfQkFTRQkwCi0KLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0jZGVmaW5lIE1NX1RTQl9IVUdFCTEKLSNkZWZpbmUgTU1fTlVNX1RTQlMJMgotI2Vsc2UKLSNkZWZpbmUgTU1fTlVNX1RTQlMJMQotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlzcGlubG9ja190CQlsb2NrOwotCXVuc2lnbmVkIGxvbmcJCXNwYXJjNjRfY3R4X3ZhbDsKLQl1bnNpZ25lZCBsb25nCQlodWdlX3B0ZV9jb3VudDsKLQlzdHJ1Y3QgdHNiX2NvbmZpZwl0c2JfYmxvY2tbTU1fTlVNX1RTQlNdOwotCXN0cnVjdCBodl90c2JfZGVzY3IJdHNiX2Rlc2NyW01NX05VTV9UU0JTXTsKLX0gbW1fY29udGV4dF90OwotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIFRTQl9DT05GSUdfVFNCCQkweDAwCi0jZGVmaW5lIFRTQl9DT05GSUdfUlNTX0xJTUlUCTB4MDgKLSNkZWZpbmUgVFNCX0NPTkZJR19ORU5UUklFUwkweDEwCi0jZGVmaW5lIFRTQl9DT05GSUdfUkVHX1ZBTAkweDE4Ci0jZGVmaW5lIFRTQl9DT05GSUdfTUFQX1ZBRERSCTB4MjAKLSNkZWZpbmUgVFNCX0NPTkZJR19NQVBfUFRFCTB4MjgKLQotI2VuZGlmIC8qIF9fTU1VX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvbW11Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdV9jb250ZXh0LmgKaW5kZXggNTY5M2FiNC4uODc3ZmVlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW11X2NvbnRleHQuaApAQCAtMSwxNTUgKzEgQEAKLSNpZm5kZWYgX19TUEFSQzY0X01NVV9DT05URVhUX0gKLSNkZWZpbmUgX19TUEFSQzY0X01NVV9DT05URVhUX0gKLQotLyogRGVyaXZlZCBoZWF2aWx5IGZyb20gTGludXMncyBBbHBoYS9BWFAgQVNOIGNvZGUuLi4gKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci19Ci0KLWV4dGVybiBzcGlubG9ja190IGN0eF9hbGxvY19sb2NrOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGxiX2NvbnRleHRfY2FjaGU7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfY29udGV4dF9ibWFwW107Ci0KLWV4dGVybiB2b2lkIGdldF9uZXdfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiB2b2lkIHNtcF9uZXdfbW11X2NvbnRleHRfdmVyc2lvbih2b2lkKTsKLSNlbHNlCi0jZGVmaW5lIHNtcF9uZXdfbW11X2NvbnRleHRfdmVyc2lvbigpIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi1leHRlcm4gaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLWV4dGVybiB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Ci0KLWV4dGVybiB2b2lkIF9fdHNiX2NvbnRleHRfc3dpdGNoKHVuc2lnbmVkIGxvbmcgcGdkX3BhLAotCQkJCSBzdHJ1Y3QgdHNiX2NvbmZpZyAqdHNiX2Jhc2UsCi0JCQkJIHN0cnVjdCB0c2JfY29uZmlnICp0c2JfaHVnZSwKLQkJCQkgdW5zaWduZWQgbG9uZyB0c2JfZGVzY3JfcGEpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHNiX2NvbnRleHRfc3dpdGNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCV9fdHNiX2NvbnRleHRfc3dpdGNoKF9fcGEobW0tPnBnZCksCi0JCQkgICAgICZtbS0+Y29udGV4dC50c2JfYmxvY2tbMF0sCi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQotCQkJICAgICAobW0tPmNvbnRleHQudHNiX2Jsb2NrWzFdLnRzYiA/Ci0JCQkgICAgICAmbW0tPmNvbnRleHQudHNiX2Jsb2NrWzFdIDoKLQkJCSAgICAgIE5VTEwpCi0jZWxzZQotCQkJICAgICBOVUxMCi0jZW5kaWYKLQkJCSAgICAgLCBfX3BhKCZtbS0+Y29udGV4dC50c2JfZGVzY3JbMF0pKTsKLX0KLQotZXh0ZXJuIHZvaWQgdHNiX2dyb3coc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdHNiX2luZGV4LCB1bnNpZ25lZCBsb25nIG1tX3Jzcyk7Ci0jaWZkZWYgQ09ORklHX1NNUAotZXh0ZXJuIHZvaWQgc21wX3RzYl9zeW5jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLSNlbHNlCi0jZGVmaW5lIHNtcF90c2Jfc3luYyhfX21tKSBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotLyogU2V0IE1NVSBjb250ZXh0IGluIHRoZSBhY3R1YWwgaGFyZHdhcmUuICovCi0jZGVmaW5lIGxvYWRfc2Vjb25kYXJ5X2NvbnRleHQoX19tbSkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCBcCi0JIlxuNjYxOglzdHhhCQklMCwgWyUxXSAlMlxuIiBcCi0JIgkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsIFwiYXhcIlxuIiBcCi0JIgkud29yZAkJNjYxYlxuIiBcCi0JIglzdHhhCQklMCwgWyUxXSAlM1xuIiBcCi0JIgkucHJldmlvdXNcbiIgXAotCSIJZmx1c2gJCSUlZzZcbiIgXAotCTogLyogTm8gb3V0cHV0cyAqLyBcCi0JOiAiciIgKENUWF9IV0JJVFMoKF9fbW0pLT5jb250ZXh0KSksIFwKLQkgICJyIiAoU0VDT05EQVJZX0NPTlRFWFQpLCAiaSIgKEFTSV9ETU1VKSwgImkiIChBU0lfTU1VKSkKLQotZXh0ZXJuIHZvaWQgX19mbHVzaF90bGJfbW0odW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci0KLS8qIFN3aXRjaCB0aGUgY3VycmVudCBNTSBjb250ZXh0LiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuICAqLwotc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpvbGRfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQl1bnNpZ25lZCBsb25nIGN0eF92YWxpZCwgZmxhZ3M7Ci0JaW50IGNwdTsKLQotCWlmICh1bmxpa2VseShtbSA9PSAmaW5pdF9tbSkpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtbS0+Y29udGV4dC5sb2NrLCBmbGFncyk7Ci0JY3R4X3ZhbGlkID0gQ1RYX1ZBTElEKG1tLT5jb250ZXh0KTsKLQlpZiAoIWN0eF92YWxpZCkKLQkJZ2V0X25ld19tbXVfY29udGV4dChtbSk7Ci0KLQkvKiBXZSBoYXZlIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsIGhlcmUgb3IgZWxzZSB3ZSB3aWxsIG1pc3MKLQkgKiBhIFRTQiBncm93IGlmIHdlIHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIGEga2VybmVsCi0JICogdGhyZWFkIGFuZCBhbiBhZGRyZXNzIHNwYWNlIHdoaWNoIGhhcyBpdCdzIFRTQiBzaXplIGluY3JlYXNlZAotCSAqIG9uIGFub3RoZXIgcHJvY2Vzc29yLgotCSAqCi0JICogSXQgaXMgcG9zc2libGUgdG8gcGxheSBzb21lIGdhbWVzIGluIG9yZGVyIHRvIG9wdGltaXplIHRoZQotCSAqIHN3aXRjaCwgYnV0IHRoZSBzYWZlc3QgdGhpbmcgdG8gZG8gaXMgdG8gdW5jb25kaXRpb25hbGx5Ci0JICogcGVyZm9ybSB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgbG9hZCBhbmQgdGhlIFRTQiBjb250ZXh0IHN3aXRjaC4KLQkgKgotCSAqIEZvciByZWZlcmVuY2UgdGhlIGJhZCBjYXNlIGlzLCBmb3IgYWRkcmVzcyBzcGFjZSAiQSI6Ci0JICoKLQkgKgkJQ1BVIDAJCQlDUFUgMQotCSAqCXJ1biBhZGRyZXNzIHNwYWNlIEEKLQkgKglzZXQgY3B1MCdzIGJpdHMgaW4gY3B1X3ZtX21hc2sKLQkgKglzd2l0Y2ggdG8ga2VybmVsIHRocmVhZCwgYm9ycm93Ci0JICoJYWRkcmVzcyBzcGFjZSBBIHZpYSBlbnRyeV9sYXp5X3RsYgotCSAqCQkJCQlydW4gYWRkcmVzcyBzcGFjZSBBCi0JICoJCQkJCXNldCBjcHUxJ3MgYml0IGluIGNwdV92bV9tYXNrCi0JICoJCQkJCWZsdXNoX3RsYl9wZW5kaW5nKCkKLQkgKgkJCQkJcmVzZXQgY3B1X3ZtX21hc2sgdG8ganVzdCBjcHUxCi0JICoJCQkJCVRTQiBncm93Ci0JICoJcnVuIGFkZHJlc3Mgc3BhY2UgQQotCSAqCWNvbnRleHQgd2FzIHZhbGlkLCBzbyBza2lwCi0JICoJVFNCIGNvbnRleHQgc3dpdGNoCi0JICoKLQkgKiBBdCB0aGF0IHBvaW50IGNwdTAgY29udGludWVzIHRvIHVzZSBhIHN0YWxlIFRTQiwgdGhlIG9uZSBmcm9tCi0JICogYmVmb3JlIHRoZSBUU0IgZ3JvdyBwZXJmb3JtZWQgb24gY3B1MS4gIGNwdTEgZGlkIG5vdCBjcm9zcy1jYWxsCi0JICogY3B1MCB0byB1cGRhdGUgaXQncyBUU0IgYmVjYXVzZSBhdCB0aGF0IHBvaW50IHRoZSBjcHVfdm1fbWFzawotCSAqIG9ubHkgaGFkIGNwdTEgc2V0IGluIGl0LgotCSAqLwotCWxvYWRfc2Vjb25kYXJ5X2NvbnRleHQobW0pOwotCXRzYl9jb250ZXh0X3N3aXRjaChtbSk7Ci0KLQkvKiBBbnkgdGltZSBhIHByb2Nlc3NvciBydW5zIGEgY29udGV4dCBvbiBhbiBhZGRyZXNzIHNwYWNlCi0JICogZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBtdXN0IGZsdXNoIHRoYXQgY29udGV4dCBvdXQgb2YgdGhlCi0JICogbG9jYWwgVExCLgotCSAqLwotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpZiAoIWN0eF92YWxpZCB8fCAhY3B1X2lzc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKSkgewotCQljcHVfc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKTsKLQkJX19mbHVzaF90bGJfbW0oQ1RYX0hXQklUUyhtbS0+Y29udGV4dCksCi0JCQkgICAgICAgU0VDT05EQVJZX0NPTlRFWFQpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbS0+Y29udGV4dC5sb2NrLCBmbGFncyk7Ci19Ci0KLSNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKLQotLyogQWN0aXZhdGUgYSBuZXcgTU0gaW5zdGFuY2UgZm9yIHRoZSBjdXJyZW50IHRhc2suICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjcHU7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOwotCWlmICghQ1RYX1ZBTElEKG1tLT5jb250ZXh0KSkKLQkJZ2V0X25ld19tbXVfY29udGV4dChtbSk7Ci0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmICghY3B1X2lzc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKSkKLQkJY3B1X3NldChjcHUsIG1tLT5jcHVfdm1fbWFzayk7Ci0KLQlsb2FkX3NlY29uZGFyeV9jb250ZXh0KG1tKTsKLQlfX2ZsdXNoX3RsYl9tbShDVFhfSFdCSVRTKG1tLT5jb250ZXh0KSwgU0VDT05EQVJZX0NPTlRFWFQpOwotCXRzYl9jb250ZXh0X3N3aXRjaChtbSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOwotfQotCi0jZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCi0KLSNlbmRpZiAvKiAhKF9fU1BBUkM2NF9NTVVfQ09OVEVYVF9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9tbXVfY29udGV4dC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW16b25lLmgKaW5kZXggZWJmNTk4Ni4uNDNhNzEwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tem9uZS5oCkBAIC0xLDE3ICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X01NWk9ORV9ICi0jZGVmaW5lIF9TUEFSQzY0X01NWk9ORV9ICi0KLSNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotCi1leHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbXTsKLQotI2RlZmluZSBOT0RFX0RBVEEobmlkKQkJKG5vZGVfZGF0YVtuaWRdKQotI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCi0jZGVmaW5lIG5vZGVfZW5kX3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9lbmRfcGZuKQotCi1leHRlcm4gaW50IG51bWFfY3B1X2xvb2t1cF90YWJsZVtdOwotZXh0ZXJuIGNwdW1hc2tfdCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW107Ci0KLSNlbmRpZiAvKiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUyAqLwotCi0jZW5kaWYgLyogX1NQQVJDNjRfTU1aT05FX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvbW16b25lLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21vZHVsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tb2R1bGUuaAppbmRleCAzZDc3YmE0Li5hOTYwNmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW9kdWxlLmgKQEAgLTEsNyArMSBAQAotI2lmbmRlZiBfQVNNX1NQQVJDNjRfTU9EVUxFX0gKLSNkZWZpbmUgX0FTTV9TUEFSQzY0X01PRFVMRV9ICi1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeyB9OwotI2RlZmluZSBFbGZfU2hkciBFbGY2NF9TaGRyCi0jZGVmaW5lIEVsZl9TeW0gRWxmNjRfU3ltCi0jZGVmaW5lIEVsZl9FaGRyIEVsZjY0X0VoZHIKLSNlbmRpZiAvKiBfQVNNX1NQQVJDNjRfTU9EVUxFX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21vc3Rlay5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tb3N0ZWsuaAppbmRleCBjNTY1MmRlLi45NWE3NTJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21vc3Rlay5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW9zdGVrLmgKQEAgLTEsMTQzICsxIEBACi0vKiBtb3N0ZWsuaDogIERlc2NyaWJlcyB0aGUgdmFyaW91cyBNb3N0ZWsgdGltZSBvZiBkYXkgY2xvY2sgcmVnaXN0ZXJzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQGVkZW4ucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2lmbmRlZiBfU1BBUkM2NF9NT1NURUtfSAotI2RlZmluZSBfU1BBUkM2NF9NT1NURUtfSAotCi0jaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgotCi0vKiAgICAgICBNNDhUMDIgUmVnaXN0ZXIgTWFwIChhZGFwdGVkIGZyb20gU3VuIE5WUkFNL0hvc3RpZCBGQVEpCi0gKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEKLSAqIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24KLSAqICAgICAgICBCaXQgNyBCaXQgNiBCaXQgNSBCaXQgNEJpdCAzIEJpdCAyIEJpdCAxIEJpdCAwCi0gKiAgIDdmZiAgLSAgICAgLSAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgICAgIFllYXIgMDAtOTkKLSAqICAgN2ZlICAwICAgICAwICAgICAwICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICBNb250aCAwMS0xMgotICogICA3ZmQgIDAgICAgIDAgICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICAgICBEYXRlIDAxLTMxCi0gKiAgIDdmYyAgMCAgICAgRlQgICAgMCAgICAgMCAgICAwICAgICAtICAgICAtICAgICAtICAgICAgICBEYXkgMDEtMDcKLSAqICAgN2ZiICBLUyAgICAwICAgICAtICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgICBIb3VycyAwMC0yMwotICogICA3ZmEgIDAgICAgIC0gICAgIC0gICAgIC0gICAgLSAgICAgLSAgICAgLSAgICAgLSAgICBNaW51dGVzIDAwLTU5Ci0gKiAgIDdmOSAgU1QgICAgLSAgICAgLSAgICAgLSAgICAtICAgICAtICAgICAtICAgICAtICAgIFNlY29uZHMgMDAtNTkKLSAqICAgN2Y4ICBXICAgICBSICAgICBTICAgICAtICAgIC0gICAgIC0gICAgIC0gICAgIC0gICAgQ29udHJvbAotICoKLSAqICAgKiBTVCBpcyBTVE9QIEJJVAotICogICAqIFcgaXMgV1JJVEUgQklUCi0gKiAgICogUiBpcyBSRUFEIEJJVAotICogICAqIFMgaXMgU0lHTiBCSVQKLSAqICAgKiBGVCBpcyBGUkVRIFRFU1QgQklUCi0gKiAgICogS1MgaXMgS0lDSyBTVEFSVCBCSVQKLSAqLwotCi0vKiBUaGUgTW9zdGVrIDQ4dDAyIHJlYWwgdGltZSBjbG9jayBhbmQgTlZSQU0gY2hpcC4gVGhlIHJlZ2lzdGVycwotICogb3RoZXIgdGhhbiB0aGUgY29udHJvbCByZWdpc3RlciBhcmUgaW4gYmluYXJ5IGNvZGVkIGRlY2ltYWwuIFNvbWUKLSAqIGNvbnRyb2wgYml0cyBhbHNvIGxpdmUgb3V0c2lkZSB0aGUgY29udHJvbCByZWdpc3Rlci4KLSAqCi0gKiBXZSBub3cgZGVhbCB3aXRoIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgSS9PIHRvIHRoZSBjaGlwLiAtRGF2ZU0KLSAqLwotc3RhdGljIGlubGluZSB1OCBtb3N0ZWtfcmVhZCh2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JdTggcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWJhCVslMV0gJTIsICUwIgotCQkJICAgICA6ICI9ciIgKHJldCkKLQkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1vc3Rla193cml0ZSh2b2lkIF9faW9tZW0gKmFkZHIsIHU4IHZhbCkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYQklMCwgWyUxXSAlMiIKLQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiICh2YWwpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Ci19Ci0KLSNkZWZpbmUgTU9TVEVLX0VFUFJPTQkJMHgwMDAwVUwKLSNkZWZpbmUgTU9TVEVLX0lEUFJPTQkJMHgwN2Q4VUwKLSNkZWZpbmUgTU9TVEVLX0NSRUcJCTB4MDdmOFVMCi0jZGVmaW5lIE1PU1RFS19TRUMJCTB4MDdmOVVMCi0jZGVmaW5lIE1PU1RFS19NSU4JCTB4MDdmYVVMCi0jZGVmaW5lIE1PU1RFS19IT1VSCQkweDA3ZmJVTAotI2RlZmluZSBNT1NURUtfRE9XCQkweDA3ZmNVTAotI2RlZmluZSBNT1NURUtfRE9NCQkweDA3ZmRVTAotI2RlZmluZSBNT1NURUtfTU9OVEgJCTB4MDdmZVVMCi0jZGVmaW5lIE1PU1RFS19ZRUFSCQkweDA3ZmZVTAotCi1leHRlcm4gc3BpbmxvY2tfdCBtb3N0ZWtfbG9jazsKLWV4dGVybiB2b2lkIF9faW9tZW0gKm1zdGs0OHQwMl9yZWdzOwotCi0vKiBDb250cm9sIHJlZ2lzdGVyIHZhbHVlcy4gKi8KLSNkZWZpbmUJTVNUS19DUkVHX1dSSVRFCTB4ODAJLyogTXVzdCBzZXQgdGhpcyBiZWZvcmUgcGxhY2luZyB2YWx1ZXMuICovCi0jZGVmaW5lCU1TVEtfQ1JFR19SRUFECTB4NDAJLyogU3RvcCB1cGRhdGVzIHRvIGFsbG93IGEgY2xlYW4gcmVhZC4gKi8KLSNkZWZpbmUJTVNUS19DUkVHX1NJR04JMHgyMAkvKiBTbG93L3NwZWVkIGNsb2NrIGluIGNhbGlicmF0aW9uIG1vZGUuICovCi0KLS8qIENvbnRyb2wgYml0cyB0aGF0IGxpdmUgaW4gdGhlIG90aGVyIHJlZ2lzdGVycy4gKi8KLSNkZWZpbmUJTVNUS19TVE9QCTB4ODAJLyogU3RvcCB0aGUgY2xvY2sgb3NjaWxsYXRvci4gKHNlYykgKi8KLSNkZWZpbmUJTVNUS19LSUNLX1NUQVJUCTB4ODAJLyogS2ljayBzdGFydCB0aGUgY2xvY2sgY2hpcC4gKGhvdXIpICovCi0jZGVmaW5lIE1TVEtfRlJFUV9URVNUCTB4NDAJLyogRnJlcXVlbmN5IHRlc3QgbW9kZS4gKGRheSkgKi8KLQotI2RlZmluZSBNU1RLX1lFQVJfWkVSTyAgICAgICAxOTY4ICAgLyogSWYgeWVhciByZWcgaGFzIHplcm8sIGl0IGlzIDE5NjguICovCi0jZGVmaW5lIE1TVEtfQ1ZUX1lFQVIoeXIpICAoKHlyKSArIE1TVEtfWUVBUl9aRVJPKQotCi0vKiBNYXNrcyB0aGF0IGRlZmluZSBob3cgbXVjaCBzcGFjZSBlYWNoIHZhbHVlIHRha2VzIHVwLiAqLwotI2RlZmluZQlNU1RLX1NFQ19NQVNLCTB4N2YKLSNkZWZpbmUJTVNUS19NSU5fTUFTSwkweDdmCi0jZGVmaW5lCU1TVEtfSE9VUl9NQVNLCTB4M2YKLSNkZWZpbmUJTVNUS19ET1dfTUFTSwkweDA3Ci0jZGVmaW5lCU1TVEtfRE9NX01BU0sJMHgzZgotI2RlZmluZQlNU1RLX01PTlRIX01BU0sJMHgxZgotI2RlZmluZQlNU1RLX1lFQVJfTUFTSwkweGZmVQotCi0vKiBCaW5hcnkgY29kZWQgZGVjaW1hbCBjb252ZXJzaW9uIG1hY3Jvcy4gKi8KLSNkZWZpbmUgTVNUS19SRUdWQUxfVE9fREVDSU1BTCh4KSAgKCgoeCkgJiAweDBGKSArIDB4MEEgKiAoKHgpID4+IDB4MDQpKQotI2RlZmluZSBNU1RLX0RFQ0lNQUxfVE9fUkVHVkFMKHgpICAoKCgoeCkgLyAweDBBKSA8PCAweDA0KSArICgoeCkgJSAweDBBKSkKLQotLyogR2VuZXJpYyByZWdpc3RlciBzZXQgYW5kIGdldCBtYWNyb3MgZm9yIGludGVybmFsIHVzZS4gKi8KLSNkZWZpbmUgTVNUS19HRVQocmVncyxuYW1lKQlcCi0JKE1TVEtfUkVHVkFMX1RPX0RFQ0lNQUwobW9zdGVrX3JlYWQocmVncyArIE1PU1RFS18gIyMgbmFtZSkgJiBNU1RLXyAjIyBuYW1lICMjIF9NQVNLKSkKLSNkZWZpbmUgTVNUS19TRVQocmVncyxuYW1lLHZhbHVlKSBcCi1kbyB7CXU4IF9fdmFsID0gbW9zdGVrX3JlYWQocmVncyArIE1PU1RFS18gIyMgbmFtZSk7IFwKLQlfX3ZhbCAmPSB+KE1TVEtfICMjIG5hbWUgIyMgX01BU0spOyBcCi0JX192YWwgfD0gKE1TVEtfREVDSU1BTF9UT19SRUdWQUwodmFsdWUpICYgXAotCQkgIChNU1RLXyAjIyBuYW1lICMjIF9NQVNLKSk7IFwKLQltb3N0ZWtfd3JpdGUocmVncyArIE1PU1RFS18gIyMgbmFtZSwgX192YWwpOyBcCi19IHdoaWxlKDApCi0KLS8qIE1hY3JvcyB0byBtYWtlIHJlZ2lzdGVyIGFjY2VzcyBlYXNpZXIgb24gb3VyIGZpbmdlcnMuIFRoZXNlIGdpdmUgeW91Ci0gKiB0aGUgZGVjaW1hbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgcmVxdWVzdGVkIGlmIGFwcGxpY2FibGUuIFlvdSBwYXNzCi0gKiB0aGUgYSBwb2ludGVyIHRvIGEgJ3N0cnVjdCBtb3N0ZWs0OHQwMicuCi0gKi8KLSNkZWZpbmUJTVNUS19SRUdfQ1JFRyhyZWdzKQkobW9zdGVrX3JlYWQoKHJlZ3MpICsgTU9TVEVLX0NSRUcpKQotI2RlZmluZQlNU1RLX1JFR19TRUMocmVncykJTVNUS19HRVQocmVncyxTRUMpCi0jZGVmaW5lCU1TVEtfUkVHX01JTihyZWdzKQlNU1RLX0dFVChyZWdzLE1JTikKLSNkZWZpbmUJTVNUS19SRUdfSE9VUihyZWdzKQlNU1RLX0dFVChyZWdzLEhPVVIpCi0jZGVmaW5lCU1TVEtfUkVHX0RPVyhyZWdzKQlNU1RLX0dFVChyZWdzLERPVykKLSNkZWZpbmUJTVNUS19SRUdfRE9NKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsRE9NKQotI2RlZmluZQlNU1RLX1JFR19NT05USChyZWdzKQlNU1RLX0dFVChyZWdzLE1PTlRIKQotI2RlZmluZQlNU1RLX1JFR19ZRUFSKHJlZ3MpCU1TVEtfR0VUKHJlZ3MsWUVBUikKLQotI2RlZmluZQlNU1RLX1NFVF9SRUdfU0VDKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsU0VDLHZhbHVlKQotI2RlZmluZQlNU1RLX1NFVF9SRUdfTUlOKHJlZ3MsdmFsdWUpCU1TVEtfU0VUKHJlZ3MsTUlOLHZhbHVlKQotI2RlZmluZQlNU1RLX1NFVF9SRUdfSE9VUihyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLEhPVVIsdmFsdWUpCi0jZGVmaW5lCU1TVEtfU0VUX1JFR19ET1cocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxET1csdmFsdWUpCi0jZGVmaW5lCU1TVEtfU0VUX1JFR19ET00ocmVncyx2YWx1ZSkJTVNUS19TRVQocmVncyxET00sdmFsdWUpCi0jZGVmaW5lCU1TVEtfU0VUX1JFR19NT05USChyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLE1PTlRILHZhbHVlKQotI2RlZmluZQlNU1RLX1NFVF9SRUdfWUVBUihyZWdzLHZhbHVlKQlNU1RLX1NFVChyZWdzLFlFQVIsdmFsdWUpCi0KLQotLyogVGhlIE1vc3RlayA0OHQwOCBjbG9jayBjaGlwLiBGb3VuZCBvbiBTdW40bSdzIEkgdGhpbmsuIEl0IGhhcyB0aGUKLSAqIHNhbWUgKGJhc2ljYWxseSkgbGF5b3V0IG9mIHRoZSA0OHQwMiBjaGlwIGV4Y2VwdCBmb3IgdGhlIGV4dHJhCi0gKiBOVlJBTSBvbiBib2FyZCAoOCBLQiBhZ2FpbnN0IHRoZSA0OHQwMidzIDIgS0IpLgotICovCi0jZGVmaW5lIE1PU1RFS180OFQwOF9PRkZTRVQJMHgwMDAwVUwJLyogTG93ZXIgTlZSQU0gcG9ydGlvbnMgKi8KLSNkZWZpbmUgTU9TVEVLXzQ4VDA4XzQ4VDAyCTB4MTgwMFVMCS8qIE9mZnNldCB0byA0OFQwMiBjaGlwICovCi0KLS8qIFNVTjUgc3lzdGVtcyB1c3VhbGx5IGhhdmUgNDh0NTkgbW9kZWwgY2xvY2sgY2hpcHNldHMuICBCdXQgd2Uga2VlcCB0aGUgb2xkZXIKLSAqIGNsb2NrIGNoaXAgZGVmaW5pdGlvbnMgYXJvdW5kIGp1c3QgaW4gY2FzZS4KLSAqLwotI2RlZmluZSBNT1NURUtfNDhUNTlfT0ZGU0VUCTB4MDAwMFVMCS8qIExvd2VyIE5WUkFNIHBvcnRpb25zICovCi0jZGVmaW5lIE1PU1RFS180OFQ1OV80OFQwMgkweDE4MDBVTAkvKiBPZmZzZXQgdG8gNDhUMDIgY2hpcCAqLwotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9NT1NURUtfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvbW9zdGVrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tc2didWYuaAppbmRleCA1NWMxMDFiLi41YjMzY2M5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21zZ2J1Zi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbXNnYnVmLmgKQEAgLTEsMjcgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfTVNHQlVGX0gKLSNkZWZpbmUgX1NQQVJDNjRfTVNHQlVGX0gKLQotLyogCi0gKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHNwYXJjNjQgYXJjaGl0ZWN0dXJlLgotICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCi0gKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KLSAqCi0gKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6Ci0gKiAtIDIgbWlzY2VsbGFuZW91cyA2NC1iaXQgdmFsdWVzCi0gKi8KLQotc3RydWN0IG1zcWlkNjRfZHMgewotCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOwotCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KLQlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCi0JX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLwotCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCi0JdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLwotCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KLQlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLwotCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLwotCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkMTsKLQl1bnNpZ25lZCBsb25nICBfX3VudXNlZDI7Ci19OwotCi0jZW5kaWYgLyogX1NQQVJDNjRfTVNHQlVGX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvbXNnYnVmLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L211dGV4LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L211dGV4LmgKaW5kZXggNDU4YzFmNy4uYzBjMGY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbXV0ZXguaApAQCAtMSw5ICsxIEBACi0vKgotICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgotICoKLSAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYwotICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYwotICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQotICovCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KKyNpbmNsdWRlIDxhc20tc3BhcmMvbXV0ZXguaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbmFtZWkuaAppbmRleCBjYmMxYjRjLi4xMzQ0YTkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L25hbWVpLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9uYW1laS5oCkBAIC0xLDEzICsxIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tc3BhcmM2NC9uYW1laS5oCi0gKgotICogUm91dGluZXMgdG8gaGFuZGxlIGZhbW91cyAvdXNyL2duZW11bC9zKi4KLSAqIEluY2x1ZGVkIGZyb20gbGludXgvZnMvbmFtZWkuYwotICovCi0KLSNpZm5kZWYgX19TUEFSQzY0X05BTUVJX0gKLSNkZWZpbmUgX19TUEFSQzY0X05BTUVJX0gKLQotI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAotCi0jZW5kaWYgLyogX19TUEFSQzY0X05BTUVJX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvbmFtZWkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbnM4NzMwMy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9uczg3MzAzLmgKaW5kZXggNjg2ZGVmZS4uNWYzNjlkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9uczg3MzAzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9uczg3MzAzLmgKQEAgLTEsMTE4ICsxIEBACi0vKiBuczg3MzAzLmg6IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgRGVzY3JpcHRpb24gZm9yIHRoZQotICogICAgICAgICAgICBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODczMDMgKFN1cGVySU8pLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCi0gKi8KLQotI2lmbmRlZiBfU1BBUkNfTlM4NzMwM19ICi0jZGVmaW5lIF9TUEFSQ19OUzg3MzAzX0ggMQotCi0vKgotICogQ29udHJvbCBSZWdpc3RlciBJbmRleCBWYWx1ZXMKLSAqLwotI2RlZmluZSBGRVIJMHgwMAotI2RlZmluZSBGQVIJMHgwMQotI2RlZmluZSBQVFIJMHgwMgotI2RlZmluZSBGQ1IJMHgwMwotI2RlZmluZSBQQ1IJMHgwNAotI2RlZmluZSBLUlIJMHgwNQotI2RlZmluZSBQTUMJMHgwNgotI2RlZmluZSBUVVAJMHgwNwotI2RlZmluZSBTSUQJMHgwOAotI2RlZmluZSBBU0MJMHgwOQotI2RlZmluZSBDUzBDRjAJMHgwYQotI2RlZmluZSBDUzBDRjEJMHgwYgotI2RlZmluZSBDUzFDRjAJMHgwYwotI2RlZmluZSBDUzFDRjEJMHgwZAotCi0vKiBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKEZFUikgYml0cyAqLwotI2RlZmluZSBGRVJfRURNCQkweDEwCS8qIEVuY29kZWQgRHJpdmUgYW5kIE1vdG9yIHBpbiBpbmZvcm1hdGlvbiAgICovCi0KLS8qIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKEZBUikgYml0cyAqLwotI2RlZmluZSBGQVJfTFBUX01BU0sJMHgwMwotI2RlZmluZSBGQVJfTFBUQgkweDAwCi0jZGVmaW5lIEZBUl9MUFRBCTB4MDEKLSNkZWZpbmUgRkFSX0xQVEMJMHgwMgotCi0vKiBQb3dlciBhbmQgVGVzdCBSZWdpc3RlciAoUFRSKSBiaXRzICovCi0jZGVmaW5lIFBUUl9MUFRCX0lSUTcJMHgwOAotI2RlZmluZSBQVFJfTEVWRUxfSVJRCTB4ODAJLyogV2hlbiBub3QgRUNQL0VQUDogVXNlIGxldmVsIElSUSAgICAgICAgICAgKi8KLSNkZWZpbmUgUFRSX0xQVF9SRUdfRElSCTB4ODAJLyogV2hlbiBFQ1AvRVBQOiBMUFQgQ1RSIGNvbnRyb2xscyBkaXJlY3Rpb24gKi8KLQkJCQkvKiAgICAgICAgICAgICAgIG9mIHRoZSBwYXJhbGxlbCBwb3J0CSAgICAgKi8KLQotLyogRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAoRkNSKSBiaXRzICovCi0jZGVmaW5lIEZDUl9MREUJCTB4MTAJLyogTG9naWNhbCBEcml2ZSBFeGNoYW5nZSAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRkNSX1pXU19FTkEJMHgyMAkvKiBFbmFibGUgc2hvcnQgaG9zdCByZWFkL3dyaXRlIGluIEVDUC9FUFAgICAqLwotCi0vKiBQcmludGVyIENvbnRyb2wgUmVnaXN0ZXIgKFBDUikgYml0cyAqLwotI2RlZmluZSBQQ1JfRVBQX0VOQUJMRQkweDAxCi0jZGVmaW5lIFBDUl9FUFBfSUVFRQkweDAyCS8qIEVuYWJsZSBFUFAgVmVyc2lvbiAxLjkgKElFRUUgMTI4NCkgICAgICAgICovCi0jZGVmaW5lIFBDUl9FQ1BfRU5BQkxFCTB4MDQKLSNkZWZpbmUgUENSX0VDUF9DTEtfRU5BCTB4MDgJLyogSWYgMCBFQ1AgQ2xvY2sgaXMgc3RvcHBlZCBvbiBQb3dlciBkb3duICAgKi8KLSNkZWZpbmUgUENSX0lSUV9QT0xBUgkweDIwCS8qIElmIDAgSVJRIGlzIGxldmVsIGhpZ2ggb3IgbmVnYXRpdmUgcHVsc2UsICovCi0JCQkJLyogaWYgMSBwb2xhcml0eSBpcyBpbnZlcnRlZCAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUENSX0lSUV9PRFJBSU4JMHg0MAkvKiBJZiAxLCBJUlEgaXMgb3BlbiBkcmFpbiAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBUYXBlIFVBUlRzIGFuZCBQYXJhbGxlbCBQb3J0IENvbmZpZyBSZWdpc3RlciAoVFVQKSBiaXRzICovCi0jZGVmaW5lIFRVUF9FUFBfVElNTwkweDAyCS8qIEVuYWJsZSBFUFAgdGltZW91dCBJUlEgICAgICAgICAgICAgICAgICAgICovCi0KLS8qIEFkdmFuY2VkIFN1cGVySU8gQ29uZmlnIFJlZ2lzdGVyIChBU0MpIGJpdHMgKi8KLSNkZWZpbmUgQVNDX0xQVF9JUlE3CTB4MDEJLyogQWx3YXlzIHVzZSBJUlE3IGZvciBMUFQgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBBU0NfRFJWMl9TRUwJMHgwMgkvKiBMb2dpY2FsIERyaXZlIEV4Y2hhbmdlIGNvbnRyb2xsZWQgYnkgVERSICAqLwotCi0jZGVmaW5lIEZFUl9SRVNFUlZFRAkweDAwCi0jZGVmaW5lIEZBUl9SRVNFUlZFRAkweDAwCi0jZGVmaW5lIFBUUl9SRVNFUlZFRAkweDczCi0jZGVmaW5lIEZDUl9SRVNFUlZFRAkweGM0Ci0jZGVmaW5lIFBDUl9SRVNFUlZFRAkweDEwCi0jZGVmaW5lIEtSUl9SRVNFUlZFRAkweDAwCi0jZGVmaW5lIFBNQ19SRVNFUlZFRAkweDk4Ci0jZGVmaW5lIFRVUF9SRVNFUlZFRAkweGZiCi0jZGVmaW5lIFNJUF9SRVNFUlZFRAkweDAwCi0jZGVmaW5lIEFTQ19SRVNFUlZFRAkweDE4Ci0jZGVmaW5lIENTMENGMF9SRVNFUlZFRAkweDAwCi0jZGVmaW5lIENTMENGMV9SRVNFUlZFRAkweDA4Ci0jZGVmaW5lIENTMUNGMF9SRVNFUlZFRAkweDAwCi0jZGVmaW5lIENTMUNGMV9SRVNFUlZFRAkweDA4Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi1leHRlcm4gc3BpbmxvY2tfdCBuczg3MzAzX2xvY2s7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG5zODczMDNfbW9kaWZ5KHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IGluZGV4LAotCQkJCSAgICAgdW5zaWduZWQgY2hhciBjbHIsIHVuc2lnbmVkIGNoYXIgc2V0KQotewotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkW10gPSB7Ci0JCUZFUl9SRVNFUlZFRCwgRkFSX1JFU0VSVkVELCBQVFJfUkVTRVJWRUQsIEZDUl9SRVNFUlZFRCwKLQkJUENSX1JFU0VSVkVELCBLUlJfUkVTRVJWRUQsIFBNQ19SRVNFUlZFRCwgVFVQX1JFU0VSVkVELAotCQlTSVBfUkVTRVJWRUQsIEFTQ19SRVNFUlZFRCwgQ1MwQ0YwX1JFU0VSVkVELCBDUzBDRjFfUkVTRVJWRUQsCi0JCUNTMUNGMF9SRVNFUlZFRCwgQ1MxQ0YxX1JFU0VSVkVECi0JfTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGNoYXIgdmFsdWU7Ci0KLQlpZiAoaW5kZXggPiAweDBkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZuczg3MzAzX2xvY2ssIGZsYWdzKTsKLQotCW91dGIoaW5kZXgsIHBvcnQpOwotCXZhbHVlID0gaW5iKHBvcnQgKyAxKTsKLQl2YWx1ZSAmPSB+KHJlc2VydmVkW2luZGV4XSB8IGNscik7Ci0JdmFsdWUgfD0gc2V0OwotCW91dGIodmFsdWUsIHBvcnQgKyAxKTsKLQlvdXRiKHZhbHVlLCBwb3J0ICsgMSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuczg3MzAzX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogIShfU1BBUkNfTlM4NzMwM19IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9uczg3MzAzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29mX3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29mX3BsYXRmb3JtLmgKaW5kZXggNzhhYTAzMi4uZjdjNDI3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vZl9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvb2ZfcGxhdGZvcm0uaApAQCAtMSwyNSArMSBAQAotI2lmbmRlZiBfQVNNX1NQQVJDNjRfT0ZfUExBVEZPUk1fSAotI2RlZmluZSBfQVNNX1NQQVJDNjRfT0ZfUExBVEZPUk1fSAotLyoKLSAqICAgIENvcHlyaWdodCAoQykgMjAwNiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycC4KLSAqCQkJIDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKiAgICBNb2RpZmllZCBmb3IgU3BhcmMgYnkgbWVyZ2luZyBwYXJ0cyBvZiBhc20tc3BhcmMvb2ZfZGV2aWNlLmgKLSAqCQlieSBTdGVwaGVuIFJvdGh3ZWxsCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLS8qIFRoaXMgaXMganVzdCBoZXJlIGR1cmluZyB0aGUgdHJhbnNpdGlvbiAqLwotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgaXNhX2J1c190eXBlOwotZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBlYnVzX2J1c190eXBlOwotZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBzYnVzX2J1c190eXBlOwotCi0jZGVmaW5lIG9mX2J1c190eXBlCW9mX3BsYXRmb3JtX2J1c190eXBlCS8qIGZvciBjb21wYXRpYmlsaXR5ICovCi0KLSNlbmRpZgkvKiBfQVNNX1NQQVJDNjRfT0ZfUExBVEZPUk1fSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9vZl9wbGF0Zm9ybS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbS5oCmluZGV4IGI2OWU0YTguLmFjZjRiMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BlbnByb20uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wZW5wcm9tLmgKQEAgLTEsMjgwICsxIEBACi0jaWZuZGVmIF9fU1BBUkM2NF9PUEVOUFJPTV9ICi0jZGVmaW5lIF9fU1BBUkM2NF9PUEVOUFJPTV9ICi0KLS8qIG9wZW5wcm9tLmg6ICBQcm9tIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgZm9yIGFjY2VzcyB0byB0aGUgT1BFTkJPT1QKLSAqICAgICAgICAgICAgICBwcm9tIHJvdXRpbmVzIGFuZCBkYXRhIGFyZWFzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLS8qIFYwIHByb20gZGV2aWNlIG9wZXJhdGlvbnMuICovCi1zdHJ1Y3QgbGludXhfZGV2X3YwX2Z1bmNzIHsKLQlpbnQgKCp2MF9kZXZvcGVuKShjaGFyICpkZXZpY2Vfc3RyKTsKLQlpbnQgKCp2MF9kZXZjbG9zZSkoaW50IGRldl9kZXNjKTsKLQlpbnQgKCp2MF9yZGJsa2RldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2Jsa3MsIGludCBibGtfc3QsIGNoYXIgKmJ1Zik7Ci0JaW50ICgqdjBfd3JibGtkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ibGtzLCBpbnQgYmxrX3N0LCBjaGFyICpidWYpOwotCWludCAoKnYwX3dybmV0ZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGNoYXIgKmJ1Zik7Ci0JaW50ICgqdjBfcmRuZXRkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgY2hhciAqYnVmKTsKLQlpbnQgKCp2MF9yZGNoYXJkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgaW50IGR1bW15LCBjaGFyICpidWYpOwotCWludCAoKnYwX3dyY2hhcmRldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2J5dGVzLCBpbnQgZHVtbXksIGNoYXIgKmJ1Zik7Ci0JaW50ICgqdjBfc2Vla2RldikoaW50IGRldl9kZXNjLCBsb25nIGxvZ2ljYWxfb2Zmc3QsIGludCBmcm9tKTsKLX07Ci0KLS8qIFYyIGFuZCBsYXRlciBwcm9tIGRldmljZSBvcGVyYXRpb25zLiAqLwotc3RydWN0IGxpbnV4X2Rldl92Ml9mdW5jcyB7Ci0JaW50ICgqdjJfaW5zdDJwa2cpKGludCBkKTsJLyogQ29udmVydCBpaGFuZGxlIHRvIHBoYW5kbGUgKi8KLQljaGFyICogKCp2Ml9kdW1iX21lbV9hbGxvYykoY2hhciAqdmEsIHVuc2lnbmVkIHN6KTsKLQl2b2lkICgqdjJfZHVtYl9tZW1fZnJlZSkoY2hhciAqdmEsIHVuc2lnbmVkIHN6KTsKLQotCS8qIFRvIG1hcCBkZXZpY2VzIGludG8gdmlydHVhbCBJL08gc3BhY2UuICovCi0JY2hhciAqICgqdjJfZHVtYl9tbWFwKShjaGFyICp2aXJ0YSwgaW50IHdoaWNoX2lvLCB1bnNpZ25lZCBwYWRkciwgdW5zaWduZWQgc3opOwotCXZvaWQgKCp2Ml9kdW1iX211bm1hcCkoY2hhciAqdmlydGEsIHVuc2lnbmVkIHNpemUpOwotCi0JaW50ICgqdjJfZGV2X29wZW4pKGNoYXIgKmRldnBhdGgpOwotCXZvaWQgKCp2Ml9kZXZfY2xvc2UpKGludCBkKTsKLQlpbnQgKCp2Ml9kZXZfcmVhZCkoaW50IGQsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7Ci0JaW50ICgqdjJfZGV2X3dyaXRlKShpbnQgZCwgY2hhciAqYnVmLCBpbnQgbmJ5dGVzKTsKLQlpbnQgKCp2Ml9kZXZfc2VlaykoaW50IGQsIGludCBoaSwgaW50IGxvKTsKLQotCS8qIE5ldmVyIGlzc3VlZCAobXVsdGlzdGFnZSBsb2FkIHN1cHBvcnQpICovCi0Jdm9pZCAoKnYyX3doZWVlMikodm9pZCk7Ci0Jdm9pZCAoKnYyX3doZWVlMykodm9pZCk7Ci19OwotCi1zdHJ1Y3QgbGludXhfbWxpc3RfdjAgewotCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqdGhlcmVzX21vcmU7Ci0JdW5zaWduZWQgc3RhcnRfYWRyOwotCXVuc2lnbmVkIG51bV9ieXRlczsKLX07Ci0KLXN0cnVjdCBsaW51eF9tZW1fdjAgewotCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqKnYwX3RvdHBoeXM7Ci0Jc3RydWN0IGxpbnV4X21saXN0X3YwICoqdjBfcHJvbW1hcDsKLQlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKip2MF9hdmFpbGFibGU7IC8qIFdoYXQgd2UgY2FuIHVzZSAqLwotfTsKLQotLyogQXJndW1lbnRzIHNlbnQgdG8gdGhlIGtlcm5lbCBmcm9tIHRoZSBib290IHByb21wdC4gKi8KLXN0cnVjdCBsaW51eF9hcmd1bWVudHNfdjAgewotCWNoYXIgKmFyZ3ZbOF07Ci0JY2hhciBhcmdzWzEwMF07Ci0JY2hhciBib290X2RldlsyXTsKLQlpbnQgYm9vdF9kZXZfY3RybDsKLQlpbnQgYm9vdF9kZXZfdW5pdDsKLQlpbnQgZGV2X3BhcnRpdGlvbjsKLQljaGFyICprZXJuZWxfZmlsZV9uYW1lOwotCXZvaWQgKmFpZWVlMTsgICAgICAgICAgIC8qIFhYWCAqLwotfTsKLQotLyogVjIgYW5kIHVwIGJvb3QgdGhpbmdzLiAqLwotc3RydWN0IGxpbnV4X2Jvb3RhcmdzX3YyIHsKLQljaGFyICoqYm9vdHBhdGg7Ci0JY2hhciAqKmJvb3RhcmdzOwotCWludCAqZmRfc3RkaW47Ci0JaW50ICpmZF9zdGRvdXQ7Ci19OwotCi0vKiBUaGUgdG9wIGxldmVsIFBST00gdmVjdG9yLiAqLwotc3RydWN0IGxpbnV4X3JvbXZlYyB7Ci0JLyogVmVyc2lvbiBudW1iZXJzLiAqLwotCXVuc2lnbmVkIGludCBwdl9tYWdpY19jb29raWU7Ci0JdW5zaWduZWQgaW50IHB2X3JvbXZlcnM7Ci0JdW5zaWduZWQgaW50IHB2X3BsdWdpbl9yZXZpc2lvbjsKLQl1bnNpZ25lZCBpbnQgcHZfcHJpbnRyZXY7Ci0KLQkvKiBWZXJzaW9uIDAgbWVtb3J5IGRlc2NyaXB0b3JzLiAqLwotCXN0cnVjdCBsaW51eF9tZW1fdjAgcHZfdjBtZW07Ci0KLQkvKiBOb2RlIG9wZXJhdGlvbnMuICovCi0Jc3RydWN0IGxpbnV4X25vZGVvcHMgKnB2X25vZGVvcHM7Ci0KLQljaGFyICoqcHZfYm9vdHN0cjsKLQlzdHJ1Y3QgbGludXhfZGV2X3YwX2Z1bmNzIHB2X3YwZGV2b3BzOwotCi0JY2hhciAqcHZfc3RkaW47Ci0JY2hhciAqcHZfc3Rkb3V0OwotI2RlZmluZQlQUk9NREVWX0tCRAkwCQkvKiBpbnB1dCBmcm9tIGtleWJvYXJkICovCi0jZGVmaW5lCVBST01ERVZfU0NSRUVOCTAJCS8qIG91dHB1dCB0byBzY3JlZW4gKi8KLSNkZWZpbmUJUFJPTURFVl9UVFlBCTEJCS8qIGluL291dCB0byB0dHlhICovCi0jZGVmaW5lCVBST01ERVZfVFRZQgkyCQkvKiBpbi9vdXQgdG8gdHR5YiAqLwotCi0JLyogQmxvY2tpbmcgZ2V0Y2hhci9wdXRjaGFyLiAgTk9UIFJFRU5UUkFOVCEgKGdycikgKi8KLQlpbnQgKCpwdl9nZXRjaGFyKSh2b2lkKTsKLQl2b2lkICgqcHZfcHV0Y2hhcikoaW50IGNoKTsKLQotCS8qIE5vbi1ibG9ja2luZyB2YXJpYW50cy4gKi8KLQlpbnQgKCpwdl9uYmdldGNoYXIpKHZvaWQpOwotCWludCAoKnB2X25icHV0Y2hhcikoaW50IGNoKTsKLQotCXZvaWQgKCpwdl9wdXRzdHIpKGNoYXIgKnN0ciwgaW50IGxlbik7Ci0KLQkvKiBNaXNjZWxsYW55LiAqLwotCXZvaWQgKCpwdl9yZWJvb3QpKGNoYXIgKmJvb3RzdHIpOwotCXZvaWQgKCpwdl9wcmludGYpKF9fY29uc3RfXyBjaGFyICpmbXQsIC4uLik7Ci0Jdm9pZCAoKnB2X2Fib3J0KSh2b2lkKTsKLQlfX3ZvbGF0aWxlX18gaW50ICpwdl90aWNrczsKLQl2b2lkICgqcHZfaGFsdCkodm9pZCk7Ci0Jdm9pZCAoKipwdl9zeW5jaG9vaykodm9pZCk7Ci0KLQkvKiBFdmFsdWF0ZSBhIGZvcnRoIHN0cmluZywgbm90IGRpZmZlcmVudCBwcm90byBmb3IgVjAgYW5kIFYyLT51cC4gKi8KLQl1bmlvbiB7Ci0JCXZvaWQgKCp2MF9ldmFsKShpbnQgbGVuLCBjaGFyICpzdHIpOwotCQl2b2lkICgqdjJfZXZhbCkoY2hhciAqc3RyKTsKLQl9IHB2X2ZvcnRoZXZhbDsKLQotCXN0cnVjdCBsaW51eF9hcmd1bWVudHNfdjAgKipwdl92MGJvb3RhcmdzOwotCi0JLyogR2V0IGV0aGVyIGFkZHJlc3MuICovCi0JdW5zaWduZWQgaW50ICgqcHZfZW5hZGRyKShpbnQgZCwgY2hhciAqZW5hZGRyKTsKLQotCXN0cnVjdCBsaW51eF9ib290YXJnc192MiBwdl92MmJvb3RhcmdzOwotCXN0cnVjdCBsaW51eF9kZXZfdjJfZnVuY3MgcHZfdjJkZXZvcHM7Ci0KLQlpbnQgZmlsbGVyWzE1XTsKLQotCS8qIFRoaXMgb25lIGlzIHN1bjRjL3N1bjQgb25seS4gKi8KLQl2b2lkICgqcHZfc2V0Y3R4dCkoaW50IGN0eHQsIGNoYXIgKnZhLCBpbnQgcG1lZyk7Ci0KLQkvKiBQcm9tIHZlcnNpb24gMyBNdWx0aXByb2Nlc3NvciByb3V0aW5lcy4gVGhpcyBzdHVmZiBpcyBjcmF6eS4KLQkgKiBObyBqb2tlLiBDYWxsaW5nIHRoZXNlIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgY3B1IHByb2JhYmx5Ci0JICogY3Jhc2hlcyB0aGUgbWFjaGluZSwgaGF2ZSB0byB0ZXN0IHRoaXMuIDotKQotCSAqLwotCi0JLyogdjNfY3B1c3RhcnQoKSB3aWxsIHN0YXJ0IHRoZSBjcHUgJ3doaWNoY3B1JyBpbiBtbXUtY29udGV4dAotCSAqICd0aGlzY29udGV4dCcgZXhlY3V0aW5nIGF0IGFkZHJlc3MgJ3Byb2dfY291bnRlcicKLQkgKi8KLQlpbnQgKCp2M19jcHVzdGFydCkodW5zaWduZWQgaW50IHdoaWNoY3B1LCBpbnQgY3R4dGJsX3B0ciwKLQkJCSAgIGludCB0aGlzY29udGV4dCwgY2hhciAqcHJvZ19jb3VudGVyKTsKLQotCS8qIHYzX2NwdXN0b3AoKSB3aWxsIGNhdXNlIGNwdSAnd2hpY2hjcHUnIHRvIHN0b3AgZXhlY3V0aW5nCi0JICogdW50aWwgYSByZXN1bWUgY3B1IGNhbGwgaXMgbWFkZS4KLQkgKi8KLQlpbnQgKCp2M19jcHVzdG9wKSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUpOwotCi0JLyogdjNfY3B1aWRsZSgpIHdpbGwgaWRsZSBjcHUgJ3doaWNoY3B1JyB1bnRpbCBhIHN0b3Agb3IKLQkgKiByZXN1bWUgY3B1IGNhbGwgaXMgbWFkZS4KLQkgKi8KLQlpbnQgKCp2M19jcHVpZGxlKSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUpOwotCi0JLyogdjNfY3B1cmVzdW1lKCkgd2lsbCByZXN1bWUgcHJvY2Vzc29yICd3aGljaGNwdScgZXhlY3V0aW5nCi0JICogc3RhcnRpbmcgd2l0aCB3aGF0ZXZlciAncGMnIGFuZCAnbnBjJyB3ZXJlIGxlZnQgYXQgdGhlCi0JICogbGFzdCAnaWRsZScgb3IgJ3N0b3AnIGNhbGwuCi0JICovCi0JaW50ICgqdjNfY3B1cmVzdW1lKSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUpOwotfTsKLQotLyogUm91dGluZXMgZm9yIHRyYXZlcnNpbmcgdGhlIHByb20gZGV2aWNlIHRyZWUuICovCi1zdHJ1Y3QgbGludXhfbm9kZW9wcyB7Ci0JaW50ICgqbm9fbmV4dG5vZGUpKGludCBub2RlKTsKLQlpbnQgKCpub19jaGlsZCkoaW50IG5vZGUpOwotCWludCAoKm5vX3Byb3BsZW4pKGludCBub2RlLCBjaGFyICpuYW1lKTsKLQlpbnQgKCpub19nZXRwcm9wKShpbnQgbm9kZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsKTsKLQlpbnQgKCpub19zZXRwcm9wKShpbnQgbm9kZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsLCBpbnQgbGVuKTsKLQljaGFyICogKCpub19uZXh0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUpOwotfTsKLQotLyogTW9yZSBmdW4gUFJPTSBzdHJ1Y3R1cmVzIGZvciBkZXZpY2UgcHJvYmluZy4gKi8KLSNkZWZpbmUgUFJPTVJFR19NQVggICAgIDI0Ci0jZGVmaW5lIFBST01WQUREUl9NQVggICAxNgotI2RlZmluZSBQUk9NSU5UUl9NQVggICAgMzIKLQotc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzIHsKLQl1bnNpZ25lZCB3aGljaF9pbzsJLyogaGkgcGFydCBvZiBwaHlzaWNhbCBhZGRyZXNzCQkJKi8KLQl1bnNpZ25lZCBwaHlzX2FkZHI7CS8qIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgcmVnaXN0ZXIJKi8KLQlpbnQgcmVnX3NpemU7CQkvKiBIb3cgbWFueSBieXRlcyBkb2VzIHRoaXMgcmVnaXN0ZXIgdGFrZSB1cD8JKi8KLX07Ci0KLXN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzIHsKLQl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKLQl1bnNpZ25lZCBsb25nIHJlZ19zaXplOwotfTsKLQotc3RydWN0IGxpbnV4X3Byb21faXJxcyB7Ci0JaW50IHByaTsgICAgLyogSVJRIHByaW9yaXR5ICovCi0JaW50IHZlY3RvcjsgLyogVGhpcyBpcyBmb29iYXIsIHdoYXQgZG9lcyBpdCBkbz8gKi8KLX07Ci0KLS8qIEVsZW1lbnQgb2YgdGhlICJyYW5nZXMiIHZlY3RvciAqLwotc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzIHsKLQl1bnNpZ25lZCBpbnQgb3RfY2hpbGRfc3BhY2U7Ci0JdW5zaWduZWQgaW50IG90X2NoaWxkX2Jhc2U7CQkvKiBCdXMgZmVlbHMgdGhpcyAqLwotCXVuc2lnbmVkIGludCBvdF9wYXJlbnRfc3BhY2U7Ci0JdW5zaWduZWQgaW50IG90X3BhcmVudF9iYXNlOwkJLyogQ1BVIGxvb2tzIGZyb20gaGVyZSAqLwotCXVuc2lnbmVkIGludCBvcl9zaXplOwotfTsKLQotc3RydWN0IGxpbnV4X3Byb202NF9yYW5nZXMgewotCXVuc2lnbmVkIGxvbmcgb3RfY2hpbGRfYmFzZTsJCS8qIEJ1cyBmZWVscyB0aGlzICovCi0JdW5zaWduZWQgbG9uZyBvdF9wYXJlbnRfYmFzZTsJCS8qIENQVSBsb29rcyBmcm9tIGhlcmUgKi8KLQl1bnNpZ25lZCBsb25nIG9yX3NpemU7Ci19OwotCi0vKiBSYW5nZXMgYW5kIHJlZyBwcm9wZXJ0aWVzIGFyZSBhIGJpdCBkaWZmZXJlbnQgZm9yIFBDSS4gKi8KLXN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMgewotCXVuc2lnbmVkIGludCBwaHlzX2hpOwotCXVuc2lnbmVkIGludCBwaHlzX21pZDsKLQl1bnNpZ25lZCBpbnQgcGh5c19sbzsKLQotCXVuc2lnbmVkIGludCBzaXplX2hpOwotCXVuc2lnbmVkIGludCBzaXplX2xvOwotfTsKLQotc3RydWN0IGxpbnV4X3Byb21fcGNpX3JhbmdlcyB7Ci0JdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfaGk7CS8qIE9ubHkgY2VydGFpbiBiaXRzIGFyZSBlbmNvZGVkIGhlcmUuICovCi0JdW5zaWduZWQgaW50IGNoaWxkX3BoeXNfbWlkOwotCXVuc2lnbmVkIGludCBjaGlsZF9waHlzX2xvOwotCi0JdW5zaWduZWQgaW50IHBhcmVudF9waHlzX2hpOwotCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKLQotCXVuc2lnbmVkIGludCBzaXplX2hpOwotCXVuc2lnbmVkIGludCBzaXplX2xvOwotfTsKLQotc3RydWN0IGxpbnV4X3Byb21fcGNpX2ludG1hcCB7Ci0JdW5zaWduZWQgaW50IHBoeXNfaGk7Ci0JdW5zaWduZWQgaW50IHBoeXNfbWlkOwotCXVuc2lnbmVkIGludCBwaHlzX2xvOwotCi0JdW5zaWduZWQgaW50IGludGVycnVwdDsKLQotCWludCAgICAgICAgICBjbm9kZTsKLQl1bnNpZ25lZCBpbnQgY2ludGVycnVwdDsKLX07Ci0KLXN0cnVjdCBsaW51eF9wcm9tX3BjaV9pbnRtYXNrIHsKLQl1bnNpZ25lZCBpbnQgcGh5c19oaTsKLQl1bnNpZ25lZCBpbnQgcGh5c19taWQ7Ci0JdW5zaWduZWQgaW50IHBoeXNfbG87Ci0JdW5zaWduZWQgaW50IGludGVycnVwdDsKLX07Ci0KLXN0cnVjdCBsaW51eF9wcm9tX2VidXNfcmFuZ2VzIHsKLQl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19oaTsKLQl1bnNpZ25lZCBpbnQgY2hpbGRfcGh5c19sbzsKLQotCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19oaTsKLQl1bnNpZ25lZCBpbnQgcGFyZW50X3BoeXNfbWlkOwotCXVuc2lnbmVkIGludCBwYXJlbnRfcGh5c19sbzsKLQotCXVuc2lnbmVkIGludCBzaXplOwotfTsKLQotc3RydWN0IGxpbnV4X3Byb21fZWJ1c19pbnRtYXAgewotCXVuc2lnbmVkIGludCBwaHlzX2hpOwotCXVuc2lnbmVkIGludCBwaHlzX2xvOwotCi0JdW5zaWduZWQgaW50IGludGVycnVwdDsKLQotCWludCAgICAgICAgICBjbm9kZTsKLQl1bnNpZ25lZCBpbnQgY2ludGVycnVwdDsKLX07Ci0KLXN0cnVjdCBsaW51eF9wcm9tX2VidXNfaW50bWFzayB7Ci0JdW5zaWduZWQgaW50IHBoeXNfaGk7Ci0JdW5zaWduZWQgaW50IHBoeXNfbG87Ci0JdW5zaWduZWQgaW50IGludGVycnVwdDsKLX07Ci0jZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCi0KLSNlbmRpZiAvKiAhKF9fU1BBUkM2NF9PUEVOUFJPTV9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9vcGVucHJvbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbWlvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wZW5wcm9taW8uaAppbmRleCA4NDdjZTIzLi4xMjJmYWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29wZW5wcm9taW8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wZW5wcm9taW8uaApAQCAtMSw2OSArMSBAQAotI2lmbmRlZglfU1BBUkM2NF9PUEVOUFJPTUlPX0gKLSNkZWZpbmUJX1NQQVJDNjRfT1BFTlBST01JT19ICi0KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyoKLSAqIFN1bk9TIGFuZCBTb2xhcmlzIC9kZXYvb3BlbnByb20gZGVmaW5pdGlvbnMuIFRoZSBpb2N0bCB2YWx1ZXMKLSAqIHdlcmUgY2hvc2VuIHRvIGJlIGV4YWN0bHkgZXF1YWwgdG8gdGhlIFN1bk9TIGVxdWl2YWxlbnRzLgotICovCi0KLXN0cnVjdCBvcGVucHJvbWlvCi17Ci0JdV9pbnQJb3Byb21fc2l6ZTsJCS8qIEFjdHVhbCBzaXplIG9mIHRoZSBvcHJvbV9hcnJheS4gKi8KLQljaGFyCW9wcm9tX2FycmF5WzFdOwkJLyogSG9sZHMgcHJvcGVydHkgbmFtZXMgYW5kIHZhbHVlcy4gKi8KLX07Ci0KLSNkZWZpbmUJT1BST01NQVhQQVJBTQk0MDk2CQkvKiBNYXhpbXVtIHNpemUgb2Ygb3Byb21fYXJyYXkuICovCi0KLSNkZWZpbmUJT1BST01HRVRPUFQJCTB4MjAwMDRGMDEKLSNkZWZpbmUJT1BST01TRVRPUFQJCTB4MjAwMDRGMDIKLSNkZWZpbmUJT1BST01OWFRPUFQJCTB4MjAwMDRGMDMKLSNkZWZpbmUJT1BST01TRVRPUFQyCQkweDIwMDA0RjA0Ci0jZGVmaW5lCU9QUk9NTkVYVAkJMHgyMDAwNEYwNQotI2RlZmluZQlPUFJPTUNISUxECQkweDIwMDA0RjA2Ci0jZGVmaW5lCU9QUk9NR0VUUFJPUAkJMHgyMDAwNEYwNwotI2RlZmluZQlPUFJPTU5YVFBST1AJCTB4MjAwMDRGMDgKLSNkZWZpbmUJT1BST01VMlAJCTB4MjAwMDRGMDkKLSNkZWZpbmUJT1BST01HRVRDT05TCQkweDIwMDA0RjBBCi0jZGVmaW5lCU9QUk9NR0VURkJOQU1FCQkweDIwMDA0RjBCCi0jZGVmaW5lCU9QUk9NR0VUQk9PVEFSR1MJMHgyMDAwNEYwQwotLyogTGludXggZXh0ZW5zaW9ucyAqLwkJCQkvKiBBcmd1bWVudHMgaW4gb3Byb21fYXJyYXk6ICovCi0jZGVmaW5lIE9QUk9NU0VUQ1VSCQkweDIwMDA0RkYwCS8qIGludCBub2RlIC0gU2V0cyBjdXJyZW50IG5vZGUgKi8KLSNkZWZpbmUgT1BST01QQ0kyTk9ERQkJMHgyMDAwNEZGMQkvKiBpbnQgcGNpX2J1cywgcGNpX2RldmZuIC0gU2V0cyBjdXJyZW50IG5vZGUgdG8gUENJIGRldmljZSdzIG5vZGUgKi8KLSNkZWZpbmUgT1BST01QQVRIMk5PREUJCTB4MjAwMDRGRjIJLyogY2hhciBwYXRoW10gLSBTZXQgY3VycmVudCBub2RlIGZyb20gZnVsbHkgcXVhbGlmaWVkIFBST00gcGF0aCAqLwotCi0vKgotICogUmV0dXJuIHZhbHVlcyBmcm9tIE9QUk9NR0VUQ09OUzoKLSAqLwotCi0jZGVmaW5lIE9QUk9NQ09OU19OT1RfV1NDT05TICAgIDAKLSNkZWZpbmUgT1BST01DT05TX1NURElOX0lTX0tCRCAgMHgxICAgICAvKiBzdGRpbiBkZXZpY2UgaXMga2JkICovCi0jZGVmaW5lIE9QUk9NQ09OU19TVERPVVRfSVNfRkIgIDB4MiAgICAgLyogc3Rkb3V0IGlzIGEgZnJhbWVidWZmZXIgKi8KLSNkZWZpbmUgT1BST01DT05TX09QRU5QUk9NICAgICAgMHg0ICAgICAvKiBzdXBwb3J0cyBvcGVuYm9vdCAqLwotCi0KLS8qCi0gKiAgTmV0QlNEL09wZW5CU0QgL2Rldi9vcGVucHJvbSBkZWZpbml0aW9ucy4KLSAqLwotCi1zdHJ1Y3Qgb3Bpb2NkZXNjCi17Ci0JaW50CW9wX25vZGVpZDsJCS8qIFBST00gTm9kZSBJRCAodmFsdWUtcmVzdWx0KSAqLwotCWludAlvcF9uYW1lbGVuOwkJLyogTGVuZ3RoIG9mIG9wX25hbWUuICovCi0JY2hhcglfX3VzZXIgKm9wX25hbWU7CS8qIFBvaW50ZXIgdG8gdGhlIHByb3BlcnR5IG5hbWUuICovCi0JaW50CW9wX2J1ZmxlbjsJCS8qIExlbmd0aCBvZiBvcF9idWYgKHZhbHVlLXJlc3VsdCkgKi8KLQljaGFyCV9fdXNlciAqb3BfYnVmOwkJLyogUG9pbnRlciB0byBidWZmZXIuICovCi19OwotCi0jZGVmaW5lCU9QSU9DR0VUCV9JT1dSKCdPJywgMSwgc3RydWN0IG9waW9jZGVzYykKLSNkZWZpbmUJT1BJT0NTRVQJX0lPVygnTycsIDIsIHN0cnVjdCBvcGlvY2Rlc2MpCi0jZGVmaW5lCU9QSU9DTkVYVFBST1AJX0lPV1IoJ08nLCAzLCBzdHJ1Y3Qgb3Bpb2NkZXNjKQotI2RlZmluZQlPUElPQ0dFVE9QVE5PREUJX0lPUignTycsIDQsIGludCkKLSNkZWZpbmUJT1BJT0NHRVRORVhUCV9JT1dSKCdPJywgNSwgaW50KQotI2RlZmluZQlPUElPQ0dFVENISUxECV9JT1dSKCdPJywgNiwgaW50KQotCi0jZW5kaWYgLyogX1NQQVJDNjRfT1BFTlBST01JT19IICovCi0KKyNpbmNsdWRlIDxhc20tc3BhcmMvb3BlbnByb21pby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oCmluZGV4IDU1YzViYjIuLmQ5M2U0NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BsaWIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wbGliLmgKQEAgLTEsMzIyICsxIEBACi0vKiBvcGxpYi5oOiAgRGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgYW5kIGF2YWlsYWJsZSByb3V0aW5lcyBpbiB0aGUKLSAqICAgICAgICAgICBMaW51eCBQcm9tIGxpYnJhcnkuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LCAyMDA3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKLSAqIENvcHlyaWdodCAoQykgMTk5NiBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQotICovCi0KLSNpZm5kZWYgX19TUEFSQzY0X09QTElCX0gKLSNkZWZpbmUgX19TUEFSQzY0X09QTElCX0gKLQotI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgotCi0vKiBPQlAgdmVyc2lvbiBzdHJpbmcuICovCi1leHRlcm4gY2hhciBwcm9tX3ZlcnNpb25bXTsKLQotLyogUm9vdCBub2RlIG9mIHRoZSBwcm9tIGRldmljZSB0cmVlLCB0aGlzIHN0YXlzIGNvbnN0YW50IGFmdGVyCi0gKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4KLSAqLwotZXh0ZXJuIGludCBwcm9tX3Jvb3Rfbm9kZTsKLQotLyogUFJPTSBzdGRpbiBhbmQgc3Rkb3V0ICovCi1leHRlcm4gaW50IHByb21fc3RkaW4sIHByb21fc3Rkb3V0OwotCi0vKiAvY2hvc2VuIG5vZGUgb2YgdGhlIHByb20gZGV2aWNlIHRyZWUsIHRoaXMgc3RheXMgY29uc3RhbnQgYWZ0ZXIKLSAqIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgotICovCi1leHRlcm4gaW50IHByb21fY2hvc2VuX25vZGU7Ci0KLS8qIEhlbHBlciB2YWx1ZXMgYW5kIHN0cmluZ3MgaW4gYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMgKi8KLWV4dGVybiBjb25zdCBjaGFyIHByb21fcGVlcl9uYW1lW107Ci1leHRlcm4gY29uc3QgY2hhciBwcm9tX2NvbXBhdGlibGVfbmFtZVtdOwotZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9yb290X2NvbXBhdGlibGVbXTsKLWV4dGVybiBjb25zdCBjaGFyIHByb21fY3B1X2NvbXBhdGlibGVbXTsKLWV4dGVybiBjb25zdCBjaGFyIHByb21fZmluZGRldl9uYW1lW107Ci1leHRlcm4gY29uc3QgY2hhciBwcm9tX2Nob3Nlbl9wYXRoW107Ci1leHRlcm4gY29uc3QgY2hhciBwcm9tX2NwdV9wYXRoW107Ci1leHRlcm4gY29uc3QgY2hhciBwcm9tX2dldHByb3BfbmFtZVtdOwotZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9tbXVfbmFtZVtdOwotZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9jYWxsbWV0aG9kX25hbWVbXTsKLWV4dGVybiBjb25zdCBjaGFyIHByb21fdHJhbnNsYXRlX25hbWVbXTsKLWV4dGVybiBjb25zdCBjaGFyIHByb21fbWFwX25hbWVbXTsKLWV4dGVybiBjb25zdCBjaGFyIHByb21fdW5tYXBfbmFtZVtdOwotZXh0ZXJuIGludCBwcm9tX21tdV9paGFuZGxlX2NhY2hlOwotZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9tX2Jvb3RfbWFwcGVkX3BjOwotZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9tX2Jvb3RfbWFwcGluZ19tb2RlOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9ib290X21hcHBpbmdfcGh5c19oaWdoLCBwcm9tX2Jvb3RfbWFwcGluZ19waHlzX2xvdzsKLQotc3RydWN0IGxpbnV4X21saXN0X3AxMjc1IHsKLQlzdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgKnRoZXJlc19tb3JlOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRyOwotCXVuc2lnbmVkIGxvbmcgbnVtX2J5dGVzOwotfTsKLQotc3RydWN0IGxpbnV4X21lbV9wMTI3NSB7Ci0Jc3RydWN0IGxpbnV4X21saXN0X3AxMjc1ICoqcDEyNzVfdG90cGh5czsKLQlzdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgKipwMTI3NV9wcm9tbWFwOwotCXN0cnVjdCBsaW51eF9tbGlzdF9wMTI3NSAqKnAxMjc1X2F2YWlsYWJsZTsgLyogV2hhdCB3ZSBjYW4gdXNlICovCi19OwotCi0vKiBUaGUgZnVuY3Rpb25zLi4uICovCi0KLS8qIFlvdSBtdXN0IGNhbGwgcHJvbV9pbml0KCkgYmVmb3JlIHVzaW5nIGFueSBvZiB0aGUgbGlicmFyeSBzZXJ2aWNlcywKLSAqIHByZWZlcmFibHkgYXMgZWFybHkgYXMgcG9zc2libGUuICBQYXNzIGl0IHRoZSByb212ZWMgcG9pbnRlci4KLSAqLwotZXh0ZXJuIHZvaWQgcHJvbV9pbml0KHZvaWQgKmNpZl9oYW5kbGVyLCB2b2lkICpjaWZfc3RhY2spOwotCi0vKiBCb290IGFyZ3VtZW50IGFjcXVpc2l0aW9uLCByZXR1cm5zIHRoZSBib290IGNvbW1hbmQgbGluZSBzdHJpbmcuICovCi1leHRlcm4gY2hhciAqcHJvbV9nZXRib290YXJncyh2b2lkKTsKLQotLyogRGV2aWNlIHV0aWxpdGllcy4gKi8KLQotLyogRGV2aWNlIG9wZXJhdGlvbnMuICovCi0KLS8qIE9wZW4gdGhlIGRldmljZSBkZXNjcmliZWQgYnkgdGhlIHBhc3NlZCBzdHJpbmcuICBOb3RlLCB0aGF0IHRoZSBmb3JtYXQKLSAqIG9mIHRoZSBzdHJpbmcgaXMgZGlmZmVyZW50IG9uIFYwIHZzLiBWMi0+aGlnaGVyIHByb21zLiAgVGhlIGNhbGxlciBtdXN0Ci0gKiBrbm93IHdoYXQgaGUvc2hlIGlzIGRvaW5nISAgUmV0dXJucyB0aGUgZGV2aWNlIGRlc2NyaXB0b3IsIGFuIGludC4KLSAqLwotZXh0ZXJuIGludCBwcm9tX2Rldm9wZW4oY29uc3QgY2hhciAqZGV2aWNlX3N0cmluZyk7Ci0KLS8qIENsb3NlIGEgcHJldmlvdXNseSBvcGVuZWQgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgcGFzc2VkIGludGVnZXIKLSAqIGRlc2NyaXB0b3IuCi0gKi8KLWV4dGVybiBpbnQgcHJvbV9kZXZjbG9zZShpbnQgZGV2aWNlX2hhbmRsZSk7Ci0KLS8qIERvIGEgc2VlayBvcGVyYXRpb24gb24gdGhlIGRldmljZSBkZXNjcmliZWQgYnkgdGhlIHBhc3NlZCBpbnRlZ2VyCi0gKiBkZXNjcmlwdG9yLgotICovCi1leHRlcm4gdm9pZCBwcm9tX3NlZWsoaW50IGRldmljZV9oYW5kbGUsIHVuc2lnbmVkIGludCBzZWVrX2hpdmFsLAotCQkgICAgICB1bnNpZ25lZCBpbnQgc2Vla19sb3d2YWwpOwotCi0vKiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzLCBkb24ndCByZWFsbHkgZml0IGluIGFueSBjYXRlZ29yeSBwZXIgc2UuICovCi0KLS8qIFJlYm9vdCB0aGUgbWFjaGluZSB3aXRoIHRoZSBjb21tYW5kIGxpbmUgcGFzc2VkLiAqLwotZXh0ZXJuIHZvaWQgcHJvbV9yZWJvb3QoY29uc3QgY2hhciAqYm9vdF9jb21tYW5kKTsKLQotLyogRXZhbHVhdGUgdGhlIGZvcnRoIHN0cmluZyBwYXNzZWQuICovCi1leHRlcm4gdm9pZCBwcm9tX2ZldmFsKGNvbnN0IGNoYXIgKmZvcnRoX3N0cmluZyk7Ci0KLS8qIEVudGVyIHRoZSBwcm9tLCB3aXRoIHBvc3NpYmlsaXR5IG9mIGNvbnRpbnVhdGlvbiB3aXRoIHRoZSAnZ28nCi0gKiBjb21tYW5kIGluIG5ld2VyIHByb21zLgotICovCi1leHRlcm4gdm9pZCBwcm9tX2NtZGxpbmUodm9pZCk7Ci0KLS8qIEVudGVyIHRoZSBwcm9tLCB3aXRoIG5vIGNoYW5jZSBvZiBjb250aW51YXRpb24gZm9yIHRoZSBzdGFuZC1hbG9uZQotICogd2hpY2ggY2FsbHMgdGhpcy4KLSAqLwotZXh0ZXJuIHZvaWQgcHJvbV9oYWx0KHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwotCi0vKiBIYWx0IGFuZCBwb3dlci1vZmYgdGhlIG1hY2hpbmUuICovCi1leHRlcm4gdm9pZCBwcm9tX2hhbHRfcG93ZXJfb2ZmKHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwotCi0vKiBTZXQgdGhlIFBST00gJ3N5bmMnIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBwYXNzZWQgZnVuY3Rpb24gcG9pbnRlci4KLSAqIFdoZW4gdGhlIHVzZXIgZ2l2ZXMgdGhlICdzeW5jJyBjb21tYW5kIGF0IHRoZSBwcm9tIHByb21wdCB3aGlsZSB0aGUKLSAqIGtlcm5lbCBpcyBzdGlsbCBhY3RpdmUsIHRoZSBwcm9tIHdpbGwgY2FsbCB0aGlzIHJvdXRpbmUuCi0gKgotICovCi10eXBlZGVmIGludCAoKmNhbGxiYWNrX2Z1bmNfdCkobG9uZyAqY21kKTsKLWV4dGVybiB2b2lkIHByb21fc2V0Y2FsbGJhY2soY2FsbGJhY2tfZnVuY190IGZ1bmNfcHRyKTsKLQotLyogQWNxdWlyZSB0aGUgSURQUk9NIG9mIHRoZSByb290IG5vZGUgaW4gdGhlIHByb20gZGV2aWNlIHRyZWUuICBUaGlzCi0gKiBnZXRzIHBhc3NlZCBhIGJ1ZmZlciB3aGVyZSB5b3Ugd291bGQgbGlrZSBpdCBzdHVmZmVkLiAgVGhlIHJldHVybiB2YWx1ZQotICogaXMgdGhlIGZvcm1hdCB0eXBlIG9mIHRoaXMgaWRwcm9tIG9yIDB4ZmYgb24gZXJyb3IuCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBjaGFyIHByb21fZ2V0X2lkcHJvbShjaGFyICppZHBfYnVmZmVyLCBpbnQgaWRwYnVmX3NpemUpOwotCi0vKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyB0by9mcm9tIHRoZSBjb25zb2xlLi4uLiAqLwotCi0vKiBOb24tYmxvY2tpbmcgZ2V0IGNoYXJhY3RlciBmcm9tIGNvbnNvbGUuICovCi1leHRlcm4gaW50IHByb21fbmJnZXRjaGFyKHZvaWQpOwotCi0vKiBOb24tYmxvY2tpbmcgcHV0IGNoYXJhY3RlciB0byBjb25zb2xlLiAqLwotZXh0ZXJuIGludCBwcm9tX25icHV0Y2hhcihjaGFyIGNoYXJhY3Rlcik7Ci0KLS8qIEJsb2NraW5nIGdldCBjaGFyYWN0ZXIgZnJvbSBjb25zb2xlLiAqLwotZXh0ZXJuIGNoYXIgcHJvbV9nZXRjaGFyKHZvaWQpOwotCi0vKiBCbG9ja2luZyBwdXQgY2hhcmFjdGVyIHRvIGNvbnNvbGUuICovCi1leHRlcm4gdm9pZCBwcm9tX3B1dGNoYXIoY2hhciBjaGFyYWN0ZXIpOwotCi0vKiBQcm9tJ3MgaW50ZXJuYWwgcm91dGluZXMsIGRvbid0IHVzZSBpbiBrZXJuZWwvYm9vdCBjb2RlLiAqLwotZXh0ZXJuIHZvaWQgcHJvbV9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOwotZXh0ZXJuIHZvaWQgcHJvbV93cml0ZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwotCi0vKiBNdWx0aXByb2Nlc3NvciBvcGVyYXRpb25zLi4uICovCi0jaWZkZWYgQ09ORklHX1NNUAotLyogU3RhcnQgdGhlIENQVSB3aXRoIHRoZSBnaXZlbiBkZXZpY2UgdHJlZSBub2RlIGF0IHRoZSBwYXNzZWQgcHJvZ3JhbQotICogY291bnRlciB3aXRoIHRoZSBnaXZlbiBhcmcgcGFzc2VkIGluIHZpYSByZWdpc3RlciAlbzAuCi0gKi8KLWV4dGVybiB2b2lkIHByb21fc3RhcnRjcHUoaW50IGNwdW5vZGUsIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLQotLyogU3RhcnQgdGhlIENQVSB3aXRoIHRoZSBnaXZlbiBjcHUgSUQgYXQgdGhlIHBhc3NlZCBwcm9ncmFtCi0gKiBjb3VudGVyIHdpdGggdGhlIGdpdmVuIGFyZyBwYXNzZWQgaW4gdmlhIHJlZ2lzdGVyICVvMC4KLSAqLwotZXh0ZXJuIHZvaWQgcHJvbV9zdGFydGNwdV9jcHVpZChpbnQgY3B1aWQsIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLQotLyogU3RvcCB0aGUgQ1BVIHdpdGggdGhlIGdpdmVuIGNwdSBJRC4gICovCi1leHRlcm4gdm9pZCBwcm9tX3N0b3BjcHVfY3B1aWQoaW50IGNwdWlkKTsKLQotLyogU3RvcCB0aGUgY3VycmVudCBDUFUuICovCi1leHRlcm4gdm9pZCBwcm9tX3N0b3BzZWxmKHZvaWQpOwotCi0vKiBJZGxlIHRoZSBjdXJyZW50IENQVS4gKi8KLWV4dGVybiB2b2lkIHByb21faWRsZXNlbGYodm9pZCk7Ci0KLS8qIFJlc3VtZSB0aGUgQ1BVIHdpdGggdGhlIHBhc3NlZCBkZXZpY2UgdHJlZSBub2RlLiAqLwotZXh0ZXJuIHZvaWQgcHJvbV9yZXN1bWVjcHUoaW50IGNwdW5vZGUpOwotI2VuZGlmCi0KLS8qIFBvd2VyIG1hbmFnZW1lbnQgaW50ZXJmYWNlcy4gKi8KLQotLyogUHV0IHRoZSBjdXJyZW50IENQVSB0byBzbGVlcC4gKi8KLWV4dGVybiB2b2lkIHByb21fc2xlZXBzZWxmKHZvaWQpOwotCi0vKiBQdXQgdGhlIGVudGlyZSBzeXN0ZW0gdG8gc2xlZXAuICovCi1leHRlcm4gaW50IHByb21fc2xlZXBzeXN0ZW0odm9pZCk7Ci0KLS8qIEluaXRpYXRlIGEgd2FrZXVwIGV2ZW50LiAqLwotZXh0ZXJuIGludCBwcm9tX3dha2V1cHN5c3RlbSh2b2lkKTsKLQotLyogTU1VIGFuZCBtZW1vcnkgcmVsYXRlZCBPQlAgaW50ZXJmYWNlcy4gKi8KLQotLyogR2V0IHVuaXF1ZSBzdHJpbmcgaWRlbnRpZnlpbmcgU0lNTSBhdCBnaXZlbiBwaHlzaWNhbCBhZGRyZXNzLiAqLwotZXh0ZXJuIGludCBwcm9tX2dldHVudW1iZXIoaW50IHN5bmRyb21lX2NvZGUsCi0JCQkgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKLQkJCSAgIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7Ci0KLS8qIFJldGFpbiBwaHlzaWNhbCBtZW1vcnkgdG8gdGhlIGNhbGxlciBhY3Jvc3Mgc29mdCByZXNldHMuICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBwcm9tX3JldGFpbihjb25zdCBjaGFyICpuYW1lLAotCQkJCSB1bnNpZ25lZCBsb25nIHBhX2xvdywgdW5zaWduZWQgbG9uZyBwYV9oaWdoLAotCQkJCSBsb25nIHNpemUsIGxvbmcgYWxpZ24pOwotCi0vKiBMb2FkIGV4cGxpY2l0IEkvRCBUTEIgZW50cmllcyBpbnRvIHRoZSBjYWxsaW5nIHByb2Nlc3Nvci4gKi8KLWV4dGVybiBsb25nIHByb21faXRsYl9sb2FkKHVuc2lnbmVkIGxvbmcgaW5kZXgsCi0JCQkgICB1bnNpZ25lZCBsb25nIHR0ZV9kYXRhLAotCQkJICAgdW5zaWduZWQgbG9uZyB2YWRkcik7Ci0KLWV4dGVybiBsb25nIHByb21fZHRsYl9sb2FkKHVuc2lnbmVkIGxvbmcgaW5kZXgsCi0JCQkgICB1bnNpZ25lZCBsb25nIHR0ZV9kYXRhLAotCQkJICAgdW5zaWduZWQgbG9uZyB2YWRkcik7Ci0KLS8qIE1hcC9Vbm1hcCBjbGllbnQgcHJvZ3JhbSBhZGRyZXNzIHJhbmdlcy4gIEZpcnN0IHRoZSBmb3JtYXQgb2YKLSAqIHRoZSBtYXBwaW5nIG1vZGUgYXJndW1lbnQuCi0gKi8KLSNkZWZpbmUgUFJPTV9NQVBfV1JJVEUJMHgwMDAxIC8qIFdyaXRhYmxlICovCi0jZGVmaW5lIFBST01fTUFQX1JFQUQJMHgwMDAyIC8qIFJlYWRhYmxlIC0gc3cgKi8KLSNkZWZpbmUgUFJPTV9NQVBfRVhFQwkweDAwMDQgLyogRXhlY3V0YWJsZSAtIHN3ICovCi0jZGVmaW5lIFBST01fTUFQX0xPQ0tFRAkweDAwMTAgLyogTG9ja2VkLCB1c2UgaS9kdGxiIGxvYWQgY2FsbHMgZm9yIHRoaXMgaW5zdGVhZCAqLwotI2RlZmluZSBQUk9NX01BUF9DQUNIRUQJMHgwMDIwIC8qIENhY2hlYWJsZSBpbiBib3RoIEwxIGFuZCBMMiBjYWNoZXMgKi8KLSNkZWZpbmUgUFJPTV9NQVBfU0UJMHgwMDQwIC8qIFNpZGUtRWZmZWN0cyAqLwotI2RlZmluZSBQUk9NX01BUF9HTE9CCTB4MDA4MCAvKiBHbG9iYWwgKi8KLSNkZWZpbmUgUFJPTV9NQVBfSUUJMHgwMTAwIC8qIEludmVydC1FbmRpYW5uZXNzICovCi0jZGVmaW5lIFBST01fTUFQX0RFRkFVTFQgKFBST01fTUFQX1dSSVRFIHwgUFJPTV9NQVBfUkVBRCB8IFBST01fTUFQX0VYRUMgfCBQUk9NX01BUF9DQUNIRUQpCi0KLWV4dGVybiBpbnQgcHJvbV9tYXAoaW50IG1vZGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGFkZHIpOwotZXh0ZXJuIHZvaWQgcHJvbV91bm1hcCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdmFkZHIpOwotCi0KLS8qIFBST00gZGV2aWNlIHRyZWUgdHJhdmVyc2FsIGZ1bmN0aW9ucy4uLiAqLwotCi0jaWZkZWYgUFJPTUxJQl9JTlRFUk5BTAotCi0vKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIHByb21fZ2V0Y2hpbGQuICovCi1leHRlcm4gaW50IF9fcHJvbV9nZXRjaGlsZChpbnQgcGFyZW50X25vZGUpOwotCi0vKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIHByb21fZ2V0c2libGluZy4gKi8KLWV4dGVybiBpbnQgX19wcm9tX2dldHNpYmxpbmcoaW50IG5vZGUpOwotCi0jZW5kaWYKLQotLyogR2V0IHRoZSBjaGlsZCBub2RlIG9mIHRoZSBnaXZlbiBub2RlLCBvciB6ZXJvIGlmIG5vIGNoaWxkIGV4aXN0cy4gKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRjaGlsZChpbnQgcGFyZW50X25vZGUpOwotCi0vKiBHZXQgdGhlIG5leHQgc2libGluZyBub2RlIG9mIHRoZSBnaXZlbiBub2RlLCBvciB6ZXJvIGlmIG5vIGZ1cnRoZXIKLSAqIHNpYmxpbmdzIGV4aXN0LgotICovCi1leHRlcm4gaW50IHByb21fZ2V0c2libGluZyhpbnQgbm9kZSk7Ci0KLS8qIEdldCB0aGUgbGVuZ3RoLCBhdCB0aGUgcGFzc2VkIG5vZGUsIG9mIHRoZSBnaXZlbiBwcm9wZXJ0eSB0eXBlLgotICogUmV0dXJucyAtMSBvbiBlcnJvciAoaWUuIG5vIHN1Y2ggcHJvcGVydHkgYXQgdGhpcyBub2RlKS4KLSAqLwotZXh0ZXJuIGludCBwcm9tX2dldHByb3BsZW4oaW50IHRoaXNub2RlLCBjb25zdCBjaGFyICpwcm9wZXJ0eSk7Ci0KLS8qIEZldGNoIHRoZSByZXF1ZXN0ZWQgcHJvcGVydHkgdXNpbmcgdGhlIGdpdmVuIGJ1ZmZlci4gIFJldHVybnMKLSAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIHByb20gcHV0IGludG8geW91ciBidWZmZXIgb3IgLTEgb24gZXJyb3IuCi0gKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRwcm9wZXJ0eShpbnQgdGhpc25vZGUsIGNvbnN0IGNoYXIgKnByb3BlcnR5LAotCQkJICAgIGNoYXIgKnByb3BfYnVmZmVyLCBpbnQgcHJvcGJ1Zl9zaXplKTsKLQotLyogQWNxdWlyZSBhbiBpbnRlZ2VyIHByb3BlcnR5LiAqLwotZXh0ZXJuIGludCBwcm9tX2dldGludChpbnQgbm9kZSwgY29uc3QgY2hhciAqcHJvcGVydHkpOwotCi0vKiBBY3F1aXJlIGFuIGludGVnZXIgcHJvcGVydHksIHdpdGggYSBkZWZhdWx0IHZhbHVlLiAqLwotZXh0ZXJuIGludCBwcm9tX2dldGludGRlZmF1bHQoaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByb3BlcnR5LCBpbnQgZGVmdmFsKTsKLQotLyogQWNxdWlyZSBhIGJvb2xlYW4gcHJvcGVydHksIDA9RkFMU0UgMT1UUlVFLiAqLwotZXh0ZXJuIGludCBwcm9tX2dldGJvb2woaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByb3ApOwotCi0vKiBBY3F1aXJlIGEgc3RyaW5nIHByb3BlcnR5LCBudWxsIHN0cmluZyBvbiBlcnJvci4gKi8KLWV4dGVybiB2b2lkIHByb21fZ2V0c3RyaW5nKGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wLCBjaGFyICpidWYsIGludCBidWZzaXplKTsKLQotLyogRG9lcyB0aGUgcGFzc2VkIG5vZGUgaGF2ZSB0aGUgZ2l2ZW4gIm5hbWUiPyBZRVM9MSBOTz0wICovCi1leHRlcm4gaW50IHByb21fbm9kZW1hdGNoKGludCB0aGlzbm9kZSwgY29uc3QgY2hhciAqbmFtZSk7Ci0KLS8qIFNlYXJjaCBhbGwgc2libGluZ3Mgc3RhcnRpbmcgYXQgdGhlIHBhc3NlZCBub2RlIGZvciAibmFtZSIgbWF0Y2hpbmcKLSAqIHRoZSBnaXZlbiBzdHJpbmcuICBSZXR1cm5zIHRoZSBub2RlIG9uIHN1Y2Nlc3MsIHplcm8gb24gZmFpbHVyZS4KLSAqLwotZXh0ZXJuIGludCBwcm9tX3NlYXJjaHNpYmxpbmdzKGludCBub2RlX3N0YXJ0LCBjb25zdCBjaGFyICpuYW1lKTsKLQotLyogUmV0dXJuIHRoZSBmaXJzdCBwcm9wZXJ0eSB0eXBlLCBhcyBhIHN0cmluZywgZm9yIHRoZSBnaXZlbiBub2RlLgotICogUmV0dXJucyBhIG51bGwgc3RyaW5nIG9uIGVycm9yLiBCdWZmZXIgc2hvdWxkIGJlIGF0IGxlYXN0IDMyQiBsb25nLgotICovCi1leHRlcm4gY2hhciAqcHJvbV9maXJzdHByb3AoaW50IG5vZGUsIGNoYXIgKmJ1ZmZlcik7Ci0KLS8qIFJldHVybnMgdGhlIG5leHQgcHJvcGVydHkgYWZ0ZXIgdGhlIHBhc3NlZCBwcm9wZXJ0eSBmb3IgdGhlIGdpdmVuCi0gKiBub2RlLiAgUmV0dXJucyBudWxsIHN0cmluZyBvbiBmYWlsdXJlLiBCdWZmZXIgc2hvdWxkIGJlIGF0IGxlYXN0IDMyQiBsb25nLgotICovCi1leHRlcm4gY2hhciAqcHJvbV9uZXh0cHJvcChpbnQgbm9kZSwgY29uc3QgY2hhciAqcHJldl9wcm9wZXJ0eSwgY2hhciAqYnVmZmVyKTsKLQotLyogUmV0dXJucyAxIGlmIHRoZSBzcGVjaWZpZWQgbm9kZSBoYXMgZ2l2ZW4gcHJvcGVydHkuICovCi1leHRlcm4gaW50IHByb21fbm9kZV9oYXNfcHJvcGVydHkoaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByb3BlcnR5KTsKLQotLyogUmV0dXJucyBwaGFuZGxlIG9mIHRoZSBwYXRoIHNwZWNpZmllZCAqLwotZXh0ZXJuIGludCBwcm9tX2ZpbmRkZXZpY2UoY29uc3QgY2hhciAqbmFtZSk7Ci0KLS8qIFNldCB0aGUgaW5kaWNhdGVkIHByb3BlcnR5IGF0IHRoZSBnaXZlbiBub2RlIHdpdGggdGhlIHBhc3NlZCB2YWx1ZS4KLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvZiB5b3VyIHZhbHVlIHRoYXQgdGhlIHByb20gdG9vay4KLSAqLwotZXh0ZXJuIGludCBwcm9tX3NldHByb3AoaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSwgY2hhciAqcHJvcF92YWx1ZSwKLQkJCWludCB2YWx1ZV9zaXplKTsKLQkJCQotZXh0ZXJuIGludCBwcm9tX3BhdGh0b2lub2RlKGNvbnN0IGNoYXIgKnBhdGgpOwotZXh0ZXJuIGludCBwcm9tX2luc3QycGtnKGludCk7Ci1leHRlcm4gaW50IHByb21fc2VydmljZV9leGlzdHMoY29uc3QgY2hhciAqc2VydmljZV9uYW1lKTsKLWV4dGVybiB2b2lkIHByb21fc3VuNHZfZ3Vlc3Rfc29mdF9zdGF0ZSh2b2lkKTsKLQotZXh0ZXJuIGludCBwcm9tX2loYW5kbGUycGF0aChpbnQgaGFuZGxlLCBjaGFyICpidWZmZXIsIGludCBidWZzaXplKTsKLQotLyogQ2xpZW50IGludGVyZmFjZSBsZXZlbCByb3V0aW5lcy4gKi8KLWV4dGVybiBsb25nIHAxMjc1X2NtZChjb25zdCBjaGFyICosIGxvbmcsIC4uLik7Ci0KLSNpZiAwCi0jZGVmaW5lIFAxMjc1X1NJWkUoeCkgKCgoKGxvbmcpKCh4KSAvIDMyKSkgPDwgMzIpIHwgKHgpKQotI2Vsc2UKLSNkZWZpbmUgUDEyNzVfU0laRSh4KSB4Ci0jZW5kaWYKLQotLyogV2Ugc3VwcG9ydCBhdCBtb3N0IDE2IGlucHV0IGFuZCAxIG91dHB1dCBhcmd1bWVudCAqLwotI2RlZmluZSBQMTI3NV9BUkdfTlVNQkVSCQkwCi0jZGVmaW5lIFAxMjc1X0FSR19JTl9TVFJJTkcJCTEKLSNkZWZpbmUgUDEyNzVfQVJHX09VVF9CVUYJCTIKLSNkZWZpbmUgUDEyNzVfQVJHX09VVF8zMkIJCTMKLSNkZWZpbmUgUDEyNzVfQVJHX0lOX0ZVTkNUSU9OCQk0Ci0jZGVmaW5lIFAxMjc1X0FSR19JTl9CVUYJCTUKLSNkZWZpbmUgUDEyNzVfQVJHX0lOXzY0QgkJNgotCi0jZGVmaW5lIFAxMjc1X0lOKHgpICgoeCkgJiAweGYpCi0jZGVmaW5lIFAxMjc1X09VVCh4KSAoKCh4KSA8PCA0KSAmIDB4ZjApCi0jZGVmaW5lIFAxMjc1X0lOT1VUKGksbykgKFAxMjc1X0lOKGkpfFAxMjc1X09VVChvKSkKLSNkZWZpbmUgUDEyNzVfQVJHKG4seCkgKCh4KSA8PCAoKG4pKjMgKyA4KSkKLQotI2VuZGlmIC8qICEoX19TUEFSQzY0X09QTElCX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL29wbGliLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCmluZGV4IDkzZjA4ODEuLmY0NmMxZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCkBAIC0xLDE0MiArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9QQUdFX0gKLSNkZWZpbmUgX1NQQVJDNjRfUEFHRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfOEtCKQotI2RlZmluZSBQQUdFX1NISUZUICAgMTMKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzY0S0IpCi0jZGVmaW5lIFBBR0VfU0hJRlQgICAxNgotI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNTEyS0IpCi0jZGVmaW5lIFBBR0VfU0hJRlQgICAxOQotI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNE1CKQotI2RlZmluZSBQQUdFX1NISUZUICAgMjIKLSNlbHNlCi0jZXJyb3IgTm8gcGFnZSBzaXplIHNwZWNpZmllZCBpbiBrZXJuZWwgY29uZmlndXJhdGlvbgotI2VuZGlmCi0KLSNkZWZpbmUgUEFHRV9TSVpFICAgIChfQUMoMSxVTCkgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgUEFHRV9NQVNLICAgICh+KFBBR0VfU0laRS0xKSkKLQotLyogRmx1c2hpbmcgZm9yIEQtY2FjaGUgYWxpYXMgaGFuZGxpbmcgaXMgb25seSBuZWVkZWQgaWYKLSAqIHRoZSBwYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIDE2Sy4KLSAqLwotI2lmIFBBR0VfU0hJRlQgPCAxNAotI2RlZmluZSBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNE1CKQotI2RlZmluZSBIUEFHRV9TSElGVAkJMjIKLSNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMkspCi0jZGVmaW5lIEhQQUdFX1NISUZUCQkxOQotI2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKQotI2RlZmluZSBIUEFHRV9TSElGVAkJMTYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQotI2RlZmluZSBIUEFHRV9TSVpFCQkoX0FDKDEsVUwpIDw8IEhQQUdFX1NISUZUKQotI2RlZmluZSBIUEFHRV9NQVNLCQkofihIUEFHRV9TSVpFIC0gMVVMKSkKLSNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpCi0jZGVmaW5lIEhBVkVfQVJDSF9IVUdFVExCX1VOTUFQUEVEX0FSRUEKLSNlbmRpZgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1leHRlcm4gdm9pZCBfY2xlYXJfcGFnZSh2b2lkICpwYWdlKTsKLSNkZWZpbmUgY2xlYXJfcGFnZShYKQlfY2xlYXJfcGFnZSgodm9pZCAqKShYKSkKLXN0cnVjdCBwYWdlOwotZXh0ZXJuIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCBwYWdlICpwYWdlKTsKLSNkZWZpbmUgY29weV9wYWdlKFgsWSkJbWVtY3B5KCh2b2lkICopKFgpLCAodm9pZCAqKShZKSwgUEFHRV9TSVpFKQotZXh0ZXJuIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCBwYWdlICp0b3BhZ2UpOwotCi0vKiBVbmxpa2Ugc3BhcmMzMiwgc3BhcmM2NCdzIHBhcmFtZXRlciBwYXNzaW5nIEFQSSBpcyBtb3JlCi0gKiBzYW5lIGluIHRoYXQgc3RydWN0dXJlcyB3aGljaCBhcyBzbWFsbCBlbm91Z2ggYXJlIHBhc3NlZAotICogaW4gcmVnaXN0ZXJzIGluc3RlYWQgb2Ygb24gdGhlIHN0YWNrLiAgVGh1cywgc2V0dGluZwotICogU1RSSUNUX01NX1RZUEVDSEVDS1MgZG9lcyBub3QgZ2VuZXJhdGUgd29yc2UgY29kZSBzbwotICogbGV0J3MgZW5hYmxlIGl0IHRvIGdldCB0aGUgdHlwZSBjaGVja2luZy4KLSAqLwotCi0jZGVmaW5lIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCi0KLSNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUwotLyogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4gKi8KLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7Ci10eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgaW9wdGU7IH0gaW9wdGVfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgaW50IHBtZDsgfSBwbWRfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgaW50IHBnZDsgfSBwZ2RfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7Ci0KLSNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKLSNkZWZpbmUgaW9wdGVfdmFsKHgpCSgoeCkuaW9wdGUpCi0jZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZCkKLSNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKLSNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKLQotI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9ICkKLSNkZWZpbmUgX19pb3B0ZSh4KQkoKGlvcHRlX3QpIHsgKHgpIH0gKQotI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKChwbWRfdCkgeyAoeCkgfSApCi0jZGVmaW5lIF9fcGdkKHgpCSgocGdkX3QpIHsgKHgpIH0gKQotI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKLQotI2Vsc2UKLS8qIC4uIHdoaWxlIHRoZXNlIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBjb21waWxlciAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlvcHRlX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBwbWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50IHBnZF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBncHJvdF90OwotCi0jZGVmaW5lIHB0ZV92YWwoeCkJKHgpCi0jZGVmaW5lIGlvcHRlX3ZhbCh4KQkoeCkKLSNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICh4KQotI2RlZmluZSBwZ2RfdmFsKHgpCSh4KQotI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSh4KQotCi0jZGVmaW5lIF9fcHRlKHgpCSh4KQotI2RlZmluZSBfX2lvcHRlKHgpCSh4KQotI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKHgpCi0jZGVmaW5lIF9fcGdkKHgpCSh4KQotI2RlZmluZSBfX3BncHJvdCh4KQkoeCkKLQotI2VuZGlmIC8qIChTVFJJQ1RfTU1fVFlQRUNIRUNLUykgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwotCi0jZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpID8gXAotCQkJCSAoX0FDKDB4MDAwMDAwMDA3MDAwMDAwMCxVTCkpIDogXAotCQkJCSAoX0FDKDB4ZmZmZmY4MDAwMDAwMDAwMCxVTCkgKyAoMVVMIDw8IDMyVUwpKSkKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgotCi0jZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCi0KLS8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLwotI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCi0KLS8qIFdlIHVzZWQgdG8gc3RpY2sgdGhpcyBpbnRvIGEgaGFyZC1jb2RlZCBnbG9iYWwgcmVnaXN0ZXIgKCVnNCkKLSAqIGJ1dCB0aGF0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgYW55bW9yZS4KLSAqLwotI2RlZmluZSBQQUdFX09GRlNFVAkJX0FDKDB4RkZGRkY4MDAwMDAwMDAwMCxVTCkKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2RlZmluZSBfX3BhKHgpCQkJKCh1bnNpZ25lZCBsb25nKSh4KSAtIFBBR0VfT0ZGU0VUKQotI2RlZmluZSBfX3ZhKHgpCQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSAoeCkgKyBQQUdFX09GRlNFVCkpCi0KLSNkZWZpbmUgcGZuX3RvX2thZGRyKHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQotCi0jZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcik+PlBBR0VfU0hJRlQpCi0KLSNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKLQotI2RlZmluZSB2aXJ0X3RvX3BoeXMgX19wYQotI2RlZmluZSBwaHlzX3RvX3ZpcnQgX192YQotCi0jZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCi0KLSNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAotCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgotCi0jZW5kaWYgLyogX1NQQVJDNjRfUEFHRV9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFyYW0uaAppbmRleCBmMDEyNWNmLi40MGM2ZGMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJhbS5oCkBAIC0xLDIzICsxIEBACi0jaWZuZGVmIF9BU01TUEFSQzY0X1BBUkFNX0gKLSNkZWZpbmUgX0FTTVNQQVJDNjRfUEFSQU1fSAotCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLSMgZGVmaW5lIFVTRVJfSFoJMTAwCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCi0jIGRlZmluZSBDTE9DS1NfUEVSX1NFQyAoVVNFUl9IWikKLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KLSNkZWZpbmUgRVhFQ19QQUdFU0laRQk4MTkyICAgIC8qIFRoYW5rcyBmb3Igc3VuNCdzIHdlIGNhcnJ5IGJhZ2dhZ2UuLi4gKi8KLQotI2lmbmRlZiBOT0dST1VQCi0jZGVmaW5lIE5PR1JPVVAJCSgtMSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KLQotI2VuZGlmIC8qIF9BU01TUEFSQzY0X1BBUkFNX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFycG9ydC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJwb3J0LmgKaW5kZXggZTk1NTViMi4uYjRlNGNhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJwb3J0LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJwb3J0LmgKQEAgLTEsMjQ2ICsxIEBACi0vKiBwYXJwb3J0Lmg6IHNwYXJjNjQgc3BlY2lmaWMgcGFycG9ydCBpbml0aWFsaXphdGlvbiBhbmQgZG1hLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCi0gKi8KLQotI2lmbmRlZiBfQVNNX1NQQVJDNjRfUEFSUE9SVF9ICi0jZGVmaW5lIF9BU01fU1BBUkM2NF9QQVJQT1JUX0ggMQotCi0jaW5jbHVkZSA8YXNtL2VidXMuaD4KLSNpbmNsdWRlIDxhc20vbnM4NzMwMy5oPgotI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotCi0jZGVmaW5lIFBBUlBPUlRfUENfTUFYX1BPUlRTCVBBUlBPUlRfTUFYCi0KLS8qCi0gKiBXaGlsZSBzcGFyYzY0IGRvZXNuJ3QgaGF2ZSBhbiBJU0EgRE1BIEFQSSwgd2UgcHJvdmlkZSBzb21ldGhpbmcgdGhhdCBsb29rcwotICogY2xvc2UgZW5vdWdoIHRvIG1ha2UgcGFycG9ydF9wYyBoYXBweQotICovCi0jZGVmaW5lIEhBU19ETUEKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhkbWFfc3Bpbl9sb2NrKTsKLQotI2RlZmluZSBjbGFpbV9kbWFfbG9jaygpIFwKLSh7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7IFwKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOyBcCi0JZmxhZ3M7IFwKLX0pCi0KLSNkZWZpbmUgcmVsZWFzZV9kbWFfbG9jayhfX2ZsYWdzKSBcCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgX19mbGFncyk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BhcmNfZWJ1c19pbmZvIHsKLQlzdHJ1Y3QgZWJ1c19kbWFfaW5mbyBpbmZvOwotCXVuc2lnbmVkIGludCBhZGRyOwotCXVuc2lnbmVkIGludCBjb3VudDsKLQlpbnQgbG9jazsKLQotCXN0cnVjdCBwYXJwb3J0ICpwb3J0OwotfSBzcGFyY19lYnVzX2RtYXNbUEFSUE9SVF9QQ19NQVhfUE9SVFNdOwotCi1zdGF0aWMgREVDTEFSRV9CSVRNQVAoZG1hX3Nsb3RfbWFwLCBQQVJQT1JUX1BDX01BWF9QT1JUUyk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqZGV2aWNlX2lkKQotewotCWlmIChkbWFuciA+PSBQQVJQT1JUX1BDX01BWF9QT1JUUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHhjaGcoJnNwYXJjX2VidXNfZG1hc1tkbWFucl0ubG9jaywgMSkgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKLXsKLQlpZiAoZG1hbnIgPj0gUEFSUE9SVF9QQ19NQVhfUE9SVFMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVHJ5aW5nIHRvIGZyZWUgRE1BJWRcbiIsIGRtYW5yKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoeGNoZygmc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5sb2NrLCAwKSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlRyeWluZyB0byBmcmVlIGZyZWUgRE1BJWRcbiIsIGRtYW5yKTsKLQkJcmV0dXJuOwotCX0JCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKLXsKLQllYnVzX2RtYV9lbmFibGUoJnNwYXJjX2VidXNfZG1hc1tkbWFucl0uaW5mbywgMSk7Ci0KLQlpZiAoZWJ1c19kbWFfcmVxdWVzdCgmc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5pbmZvLAotCQkJICAgICBzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmFkZHIsCi0JCQkgICAgIHNwYXJjX2VidXNfZG1hc1tkbWFucl0uY291bnQpKQotCQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKLXsKLQllYnVzX2RtYV9lbmFibGUoJnNwYXJjX2VidXNfZG1hc1tkbWFucl0uaW5mbywgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9kbWFfZmYodW5zaWduZWQgaW50IGRtYW5yKQotewotCS8qIG5vdGhpbmcgKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNoYXIgbW9kZSkKLXsKLQllYnVzX2RtYV9wcmVwYXJlKCZzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmluZm8sIChtb2RlICE9IERNQV9NT0RFX1dSSVRFKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZG1hX2FkZHIodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgYWRkcikKLXsKLQlzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmFkZHIgPSBhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQlzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmNvdW50ID0gY291bnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIpCi17Ci0JcmV0dXJuIGVidXNfZG1hX3Jlc2lkdWUoJnNwYXJjX2VidXNfZG1hc1tkbWFucl0uaW5mbyk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGVjcHBfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG9wLT5yZXNvdXJjZVswXS5zdGFydDsKLQl1bnNpZ25lZCBsb25nIGNvbmZpZyA9IG9wLT5yZXNvdXJjZVsxXS5zdGFydDsKLQl1bnNpZ25lZCBsb25nIGRfYmFzZSA9IG9wLT5yZXNvdXJjZVsyXS5zdGFydDsKLQl1bnNpZ25lZCBsb25nIGRfbGVuOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OwotCXN0cnVjdCBwYXJwb3J0ICpwOwotCWludCBzbG90LCBlcnI7Ci0KLQlwYXJlbnQgPSBvcC0+bm9kZS0+cGFyZW50OwotCWlmICghc3RyY21wKHBhcmVudC0+bmFtZSwgImRtYSIpKSB7Ci0JCXAgPSBwYXJwb3J0X3BjX3Byb2JlX3BvcnQoYmFzZSwgYmFzZSArIDB4NDAwLAotCQkJCQkgIG9wLT5pcnFzWzBdLCBQQVJQT1JUX0RNQV9OT0ZJRk8sCi0JCQkJCSAgb3AtPmRldi5wYXJlbnQtPnBhcmVudCk7Ci0JCWlmICghcCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIHApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlmb3IgKHNsb3QgPSAwOyBzbG90IDwgUEFSUE9SVF9QQ19NQVhfUE9SVFM7IHNsb3QrKykgewotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoc2xvdCwgZG1hX3Nsb3RfbWFwKSkKLQkJCWJyZWFrOwotCX0KLQllcnIgPSAtRU5PREVWOwotCWlmIChzbG90ID49IFBBUlBPUlRfUENfTUFYX1BPUlRTKQotCQlnb3RvIG91dF9lcnI7Ci0KLQlzcGluX2xvY2tfaW5pdCgmc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8ubG9jayk7Ci0KLQlkX2xlbiA9IChvcC0+cmVzb3VyY2VbMl0uZW5kIC0gZF9iYXNlKSArIDFVTDsKLQlzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mby5yZWdzID0KLQkJb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzJdLCAwLCBkX2xlbiwgIkVDUFAgRE1BIik7Ci0KLQlpZiAoIXNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvLnJlZ3MpCi0JCWdvdG8gb3V0X2NsZWFyX21hcDsKLQotCXNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvLmZsYWdzID0gMDsKLQlzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mby5jYWxsYmFjayA9IE5VTEw7Ci0Jc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8uY2xpZW50X2Nvb2tpZSA9IE5VTEw7Ci0Jc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8uaXJxID0gMHhkZWFkYmVlZjsKLQlzdHJjcHkoc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8ubmFtZSwgInBhcnBvcnQiKTsKLQlpZiAoZWJ1c19kbWFfcmVnaXN0ZXIoJnNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvKSkKLQkJZ290byBvdXRfdW5tYXBfcmVnczsKLQotCWVidXNfZG1hX2lycV9lbmFibGUoJnNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvLCAxKTsKLQotCS8qIENvbmZpZ3VyZSBJUlEgdG8gUHVzaCBQdWxsLCBMZXZlbCBMb3cgKi8KLQkvKiBFbmFibGUgRUNQLCBzZXQgYml0IDIgb2YgdGhlIENUUiBmaXJzdCAqLwotCW91dGIoMHgwNCwgYmFzZSArIDB4MDIpOwotCW5zODczMDNfbW9kaWZ5KGNvbmZpZywgUENSLAotCQkgICAgICAgUENSX0VQUF9FTkFCTEUgfAotCQkgICAgICAgUENSX0lSUV9PRFJBSU4sCi0JCSAgICAgICBQQ1JfRUNQX0VOQUJMRSB8Ci0JCSAgICAgICBQQ1JfRUNQX0NMS19FTkEgfAotCQkgICAgICAgUENSX0lSUV9QT0xBUik7Ci0KLQkvKiBDVFIgYml0IDUgY29udHJvbHMgZGlyZWN0aW9uIG9mIHBvcnQgKi8KLQluczg3MzAzX21vZGlmeShjb25maWcsIFBUUiwKLQkJICAgICAgIDAsIFBUUl9MUFRfUkVHX0RJUik7Ci0KLQlwID0gcGFycG9ydF9wY19wcm9iZV9wb3J0KGJhc2UsIGJhc2UgKyAweDQwMCwKLQkJCQkgIG9wLT5pcnFzWzBdLAotCQkJCSAgc2xvdCwKLQkJCQkgIG9wLT5kZXYucGFyZW50KTsKLQllcnIgPSAtRU5PTUVNOwotCWlmICghcCkKLQkJZ290byBvdXRfZGlzYWJsZV9pcnE7Ci0KLQlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIHApOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9kaXNhYmxlX2lycToKLQllYnVzX2RtYV9pcnFfZW5hYmxlKCZzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mbywgMCk7Ci0JZWJ1c19kbWFfdW5yZWdpc3Rlcigmc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8pOwotCi1vdXRfdW5tYXBfcmVnczoKLQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMl0sIHNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvLnJlZ3MsIGRfbGVuKTsKLQotb3V0X2NsZWFyX21hcDoKLQljbGVhcl9iaXQoc2xvdCwgZG1hX3Nsb3RfbWFwKTsKLQotb3V0X2VycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBlY3BwX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKLXsKLQlzdHJ1Y3QgcGFycG9ydCAqcCA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7Ci0JaW50IHNsb3QgPSBwLT5kbWE7Ci0KLQlwYXJwb3J0X3BjX3VucmVnaXN0ZXJfcG9ydChwKTsKLQotCWlmIChzbG90ICE9IFBBUlBPUlRfRE1BX05PRklGTykgewotCQl1bnNpZ25lZCBsb25nIGRfYmFzZSA9IG9wLT5yZXNvdXJjZVsyXS5zdGFydDsKLQkJdW5zaWduZWQgbG9uZyBkX2xlbjsKLQotCQlkX2xlbiA9IChvcC0+cmVzb3VyY2VbMl0uZW5kIC0gZF9iYXNlKSArIDFVTDsKLQotCQllYnVzX2RtYV9pcnFfZW5hYmxlKCZzcGFyY19lYnVzX2RtYXNbc2xvdF0uaW5mbywgMCk7Ci0JCWVidXNfZG1hX3VucmVnaXN0ZXIoJnNwYXJjX2VidXNfZG1hc1tzbG90XS5pbmZvKTsKLQkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzJdLAotCQkJICAgc3BhcmNfZWJ1c19kbWFzW3Nsb3RdLmluZm8ucmVncywKLQkJCSAgIGRfbGVuKTsKLQkJY2xlYXJfYml0KHNsb3QsIGRtYV9zbG90X21hcCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVjcHBfbWF0Y2hbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImVjcHAiLAotCX0sCi0JewotCQkubmFtZSA9ICJwYXJhbGxlbCIsCi0JCS5jb21wYXRpYmxlID0gImVjcHAiLAotCX0sCi0JewotCQkubmFtZSA9ICJwYXJhbGxlbCIsCi0JCS5jb21wYXRpYmxlID0gIm5zODczMTctZWNwcCIsCi0JfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGVjcHBfZHJpdmVyID0gewotCS5uYW1lCQkJPSAiZWNwcCIsCi0JLm1hdGNoX3RhYmxlCQk9IGVjcHBfbWF0Y2gsCi0JLnByb2JlCQkJPSBlY3BwX3Byb2JlLAotCS5yZW1vdmUJCQk9IF9fZGV2ZXhpdF9wKGVjcHBfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgcGFycG9ydF9wY19maW5kX25vbnBjaV9wb3J0cyhpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCi17Ci0Jb2ZfcmVnaXN0ZXJfZHJpdmVyKCZlY3BwX2RyaXZlciwgJm9mX2J1c190eXBlKTsKLQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogIShfQVNNX1NQQVJDNjRfUEFSUE9SVF9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3BhcnBvcnQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNpLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BjaS5oCmluZGV4IGY1OWYyNTcuLmRhNTRjNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wY2kuaApAQCAtMSwyMDkgKzEgQEAKLSNpZm5kZWYgX19TUEFSQzY0X1BDSV9ICi0jZGVmaW5lIF9fU1BBUkM2NF9QQ0lfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLQotLyogQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGxvZ2ljIGluIHBjaV9zY2FuX2J1cyBmb3Igc2tpcHBpbmcKLSAqIGFscmVhZHktY29uZmlndXJlZCBidXMgbnVtYmVycyAtIHRvIGJlIHVzZWQgZm9yIGJ1Z2d5IEJJT1NlcwotICogb3IgYXJjaGl0ZWN0dXJlcyB3aXRoIGluY29tcGxldGUgUENJIHNldHVwIGJ5IHRoZSBsb2FkZXIuCi0gKi8KLSNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTAKLSNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAotCi0jZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkwVUwKLSNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkwVUwKLQotI2RlZmluZSBQQ0lfSVJRX05PTkUJCTB4ZmZmZmZmZmYKLQotI2RlZmluZSBQQ0lfQ0FDSEVfTElORV9CWVRFUwk2NAotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JLyogTm8gc3BlY2lhbCBidXMgbWFzdGVyaW5nIHNldHVwIGhhbmRsaW5nICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkKLXsKLQkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLwotfQotCi0vKiBUaGUgUENJIGFkZHJlc3Mgc3BhY2UgZG9lcyBub3QgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeQotICogYWRkcmVzcyBzcGFjZS4gIFRoZSBuZXR3b3JraW5nIGFuZCBibG9jayBkZXZpY2UgbGF5ZXJzIHVzZQotICogdGhpcyBib29sZWFuIGZvciBib3VuY2UgYnVmZmVyIGRlY2lzaW9ucy4KLSAqLwotI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKnBjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkJIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpCi17Ci0JcmV0dXJuIGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBHRlBfQVRPTUlDKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQotewotCXJldHVybiBkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqcHRyLAotCQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQlyZXR1cm4gZG1hX21hcF9zaW5nbGUoJnBkZXYtPmRldiwgcHRyLCBzaXplLAotCQkJICAgICAgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKSBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCi17Ci0JZG1hX3VubWFwX3NpbmdsZSgmcGRldi0+ZGV2LCBkbWFfYWRkciwgc2l6ZSwKLQkJCSAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Ci19Ci0KLSNkZWZpbmUgcGNpX21hcF9wYWdlKGRldiwgcGFnZSwgb2ZmLCBzaXplLCBkaXIpIFwKLQlwY2lfbWFwX3NpbmdsZShkZXYsIChwYWdlX2FkZHJlc3MocGFnZSkgKyAob2ZmKSksIHNpemUsIGRpcikKLSNkZWZpbmUgcGNpX3VubWFwX3BhZ2UoZGV2LGFkZHIsc3osZGlyKSBcCi0JcGNpX3VubWFwX3NpbmdsZShkZXYsYWRkcixzeixkaXIpCi0KLS8qIHBjaV91bm1hcF97c2luZ2xlLHBhZ2V9IGlzIG5vdCBhIG5vcCwgdGh1cy4uLiAqLwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJXAotCWRtYV9hZGRyX3QgQUREUl9OQU1FOwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCQlcCi0JX191MzIgTEVOX05BTUU7Ci0jZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJCVwKLQkoKFBUUiktPkFERFJfTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCQlcCi0JKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkJXAotCSgoUFRSKS0+TEVOX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJCVwKLQkoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKLQotc3RhdGljIGlubGluZSBpbnQgcGNpX21hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQotewotCXJldHVybiBkbWFfbWFwX3NnKCZwZGV2LT5kZXYsIHNnLCBuZW50cywKLQkJCSAgKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKSBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX3VubWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCWludCBuZW50cywgaW50IGRpcmVjdGlvbikKLXsKLQlkbWFfdW5tYXBfc2coJnBkZXYtPmRldiwgc2csIG5lbnRzLAotCQkgICAgIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJICAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZwZGV2LT5kZXYsIGRtYV9oYW5kbGUsIHNpemUsCi0JCQkJKGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKSBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCQkJICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJCQkgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCS8qIE5vIGZsdXNoaW5nIG5lZWRlZCB0byBzeW5jIGNwdSB3cml0ZXMgdG8gdGhlIGRldmljZS4gICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQkJICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQotewotCWRtYV9zeW5jX3NnX2Zvcl9jcHUoJnBkZXYtPmRldiwgc2csIG5lbnRzLAotCQkJICAgIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCQkgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQotewotCS8qIE5vIGZsdXNoaW5nIG5lZWRlZCB0byBzeW5jIGNwdSB3cml0ZXMgdG8gdGhlIGRldmljZS4gICovCi19Ci0KLS8qIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBQQ0kgZGV2aWNlIERNQSBhZGRyZXNzIG1hc2sgY2FuCi0gKiBiZSBzdXBwb3J0ZWQgcHJvcGVybHkuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkZXZpY2UgY2FuCi0gKiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcsIHRoZW4KLSAqIHlvdSB3b3VsZCBwYXNzIDB4MDBmZmZmZmYgYXMgdGhlIG1hc2sgdG8gdGhpcyBmdW5jdGlvbi4KLSAqLwotZXh0ZXJuIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHU2NCBtYXNrKTsKLQotLyogUENJIElPTU1VIG1hcHBpbmcgYnlwYXNzIHN1cHBvcnQuICovCi0KLS8qIFBDSSA2NC1iaXQgYWRkcmVzc2luZyB3b3JrcyBmb3IgYWxsIHNsb3RzIG9uIGFsbCBjb250cm9sbGVyCi0gKiB0eXBlcyBvbiBzcGFyYzY0LiAgSG93ZXZlciwgaXQgcmVxdWlyZXMgdGhhdCB0aGUgZGV2aWNlCi0gKiBjYW4gZHJpdmUgZW5vdWdoIG9mIHRoZSA2NCBiaXRzLgotICovCi0jZGVmaW5lIFBDSTY0X1JFUVVJUkVEX01BU0sJKH4oZG1hNjRfYWRkcl90KTApCi0jZGVmaW5lIFBDSTY0X0FERFJfQkFTRQkJMHhmZmZjMDAwMDAwMDAwMDAwVUwKLQotc3RhdGljIGlubGluZSBpbnQgcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCi17Ci0JcmV0dXJuIGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyKTsKLX0KLQotI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX2J1cnN0X2FkdmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJZW51bSBwY2lfZG1hX2J1cnN0X3N0cmF0ZWd5ICpzdHJhdCwKLQkJCQkJdW5zaWduZWQgbG9uZyAqc3RyYXRlZ3lfcGFyYW1ldGVyKQotewotCXVuc2lnbmVkIGxvbmcgY2FjaGVsaW5lX3NpemU7Ci0JdTggYnl0ZTsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZieXRlKTsKLQlpZiAoYnl0ZSA9PSAwKQotCQljYWNoZWxpbmVfc2l6ZSA9IDEwMjQ7Ci0JZWxzZQotCQljYWNoZWxpbmVfc2l6ZSA9IChpbnQpIGJ5dGUgKiA0OwotCi0JKnN0cmF0ID0gUENJX0RNQV9CVVJTVF9CT1VOREFSWTsKLQkqc3RyYXRlZ3lfcGFyYW1ldGVyID0gY2FjaGVsaW5lX3NpemU7Ci19Ci0jZW5kaWYKLQotLyogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgUENJIGNvbnRyb2xsZXIgZm9yIGRldmljZSBQREVWLiAqLwotCi1leHRlcm4gaW50IHBjaV9kb21haW5fbnIoc3RydWN0IHBjaV9idXMgKmJ1cyk7Ci1zdGF0aWMgaW5saW5lIGludCBwY2lfcHJvY19kb21haW4oc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlyZXR1cm4gMTsKLX0KLQotLyogUGxhdGZvcm0gc3VwcG9ydCBmb3IgL3Byb2MvYnVzL3BjaS9YL1kgbW1hcCgpcy4gKi8KLQotI2RlZmluZSBIQVZFX1BDSV9NTUFQCi0jZGVmaW5lIEhBVkVfQVJDSF9QQ0lfR0VUX1VOTUFQUEVEX0FSRUEKLSNkZWZpbmUgZ2V0X3BjaV91bm1hcHBlZF9hcmVhIGdldF9mYl91bm1hcHBlZF9hcmVhCi0KLWV4dGVybiBpbnQgcGNpX21tYXBfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUsCi0JCQkgICAgICAgaW50IHdyaXRlX2NvbWJpbmUpOwotCi1leHRlcm4gdm9pZAotcGNpYmlvc19yZXNvdXJjZV90b19idXMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24sCi0JCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7Ci0KLWV4dGVybiB2b2lkCi1wY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKTsKLQotZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqcGNpYmlvc19zZWxlY3Rfcm9vdChzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgcmVzb3VyY2UgKik7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNoYW5uZWwpCi17Ci0JcmV0dXJuIFBDSV9JUlFfTk9ORTsKLX0KLQotc3RydWN0IGRldmljZV9ub2RlOwotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNpX2RldmljZV90b19PRl9ub2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLQotI2RlZmluZSBIQVZFX0FSQ0hfUENJX1JFU09VUkNFX1RPX1VTRVIKLWV4dGVybiB2b2lkIHBjaV9yZXNvdXJjZV90b191c2VyKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsCi0JCQkJIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcnNyYywKLQkJCQkgcmVzb3VyY2Vfc2l6ZV90ICpzdGFydCwgcmVzb3VyY2Vfc2l6ZV90ICplbmQpOwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9fU1BBUkM2NF9QQ0lfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9wY2kuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oCmluZGV4IGJlZTY0NTkuLjI5MjcyOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaApAQCAtMSwyOCArMSBAQAotI2lmbmRlZiBfX0FSQ0hfU1BBUkM2NF9QRVJDUFVfXwotI2RlZmluZSBfX0FSQ0hfU1BBUkM2NF9QRVJDUFVfXwotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2xvY2FsX3Blcl9jcHVfb2Zmc2V0IGFzbSgiZzUiKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQotZXh0ZXJuIHZvaWQgcmVhbF9zZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfYmFzZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9zaGlmdDsKLSNkZWZpbmUgX19wZXJfY3B1X29mZnNldChfX2NwdSkgXAotCShfX3Blcl9jcHVfYmFzZSArICgodW5zaWduZWQgbG9uZykoX19jcHUpIDw8IF9fcGVyX2NwdV9zaGlmdCkpCi0jZGVmaW5lIHBlcl9jcHVfb2Zmc2V0KHgpIChfX3Blcl9jcHVfb2Zmc2V0KHgpKQotCi0jZGVmaW5lIF9fbXlfY3B1X29mZnNldCBfX2xvY2FsX3Blcl9jcHVfb2Zmc2V0Ci0KLSNlbHNlIC8qICEgU01QICovCi0KLSNkZWZpbmUgcmVhbF9zZXR1cF9wZXJfY3B1X2FyZWFzKCkJCWRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmCS8qIFNNUCAqLwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+Ci0KLSNlbmRpZiAvKiBfX0FSQ0hfU1BBUkM2NF9QRVJDUFVfXyAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9wZXJjcHUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyZmN0ci5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJmY3RyLmgKaW5kZXggODM2ODczMC4uNTIwNzNhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJmY3RyLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJmY3RyLmgKQEAgLTEsMTczICsxIEBACi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgUEVSRk9STUFOQ0UgSU5TVFJVTUVOVEFUSU9OICAKLSAgR3VpbGxhdW1lIFRob3V2ZW5pbiAgICAgICAgICAgMDgvMTAvOTgKLSAgRGF2aWQgUy4gTWlsbGVyICAgICAgICAgICAgICAgMTAvMDYvOTgKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZm5kZWYgUEVSRl9DT1VOVEVSX0FQSQotI2RlZmluZSBQRVJGX0NPVU5URVJfQVBJCi0KLS8qIHN5c19wZXJmY3RyKCkgaW50ZXJmYWNlLiAgRmlyc3QgYXJnIGlzIG9wZXJhdGlvbiBjb2RlCi0gKiBmcm9tIGVudW1lcmF0aW9uIGJlbG93LiAgVGhlIG1lYW5pbmcgb2YgZnVydGhlciBhcmd1bWVudHMKLSAqIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBvcGVyYXRpb24gY29kZS4KLSAqCi0gKiBpbnQgc3lzX3BlcmZjdHIoaW50IG9wY29kZSwgdW5zaWduZWQgbG9uZyBhcmcwLAotICogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyKQotICoKLSAqIFBvaW50ZXJzIHdoaWNoIGFyZSBwYXNzZWQgYnkgdGhlIHVzZXIgYXJlIHBvaW50ZXJzIHRvIDY0LWJpdAotICogaW50ZWdlcnMuCi0gKgotICogT25jZSBlbmFibGVkLCBwZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRlIGlzIHJldGFpbmVkIHVudGlsIHRoZQotICogcHJvY2VzcyBlaXRoZXIgZXhpdHMgb3IgcGVyZm9ybXMgYW4gZXhlYy4gIFRoYXQgaXMsIHBlcmZvcm1hbmNlCi0gKiBjb3VudGVycyByZW1haW4gZW5hYmxlZCBmb3IgZm9yay9jbG9uZSBjaGlsZHJlbi4KLSAqLwotZW51bSBwZXJmY3RyX29wY29kZSB7Ci0JLyogRW5hYmxlIFVsdHJhU3BhcmMgcGVyZm9ybWFuY2UgY291bnRlcnMsIEFSRzAgaXMgcG9pbnRlcgotCSAqIHRvIDY0LWJpdCBhY2N1bXVsYXRvciBmb3IgRDAgY291bnRlciBpbiBQSUMsIEFSRzEgaXMgcG9pbnRlcgotCSAqIHRvIDY0LWJpdCBhY2N1bXVsYXRvciBmb3IgRDEgY291bnRlci4gIEFSRzIgaXMgYSBwb2ludGVyIHRvCi0JICogdGhlIGluaXRpYWwgUENSIHJlZ2lzdGVyIHZhbHVlIHRvIHVzZS4KLQkgKi8KLQlQRVJGQ1RSX09OLAotCi0JLyogRGlzYWJsZSBVbHRyYVNwYXJjIHBlcmZvcm1hbmNlIGNvdW50ZXJzLiAgVGhlIFBDUiBpcyB3cml0dGVuCi0JICogd2l0aCB6ZXJvIGFuZCB0aGUgdXNlciBjb3VudGVyIGFjY3VtdWxhdG9yIHBvaW50ZXJzIGFuZAotCSAqIHdvcmtpbmcgUENSIHJlZ2lzdGVyIHZhbHVlIGFyZSBmb3Jnb3R0ZW4uCi0JICovCi0JUEVSRkNUUl9PRkYsCi0KLQkvKiBBZGQgY3VycmVudCBEMCBhbmQgRDEgUElDIHZhbHVlcyBpbnRvIHVzZXIgcG9pbnRlcnMgZ2l2ZW4KLQkgKiBpbiBQRVJGQ1RSX09OIG9wZXJhdGlvbi4gIFRoZSBQSUMgaXMgY2xlYXJlZCBiZWZvcmUgcmV0dXJuaW5nLgotCSAqLwotCVBFUkZDVFJfUkVBRCwKLQotCS8qIENsZWFyIHRoZSBQSUMgcmVnaXN0ZXIuICovCi0JUEVSRkNUUl9DTFJQSUMsCi0KLQkvKiBCZWdpbiB1c2luZyBhIG5ldyBQQ1IgdmFsdWUsIHRoZSBwb2ludGVyIHRvIHdoaWNoIGlzIHBhc3NlZAotCSAqIGluIEFSRzAuICBUaGUgUElDIGlzIGFsc28gY2xlYXJlZCBhZnRlciB0aGUgbmV3IFBDUiB2YWx1ZSBpcwotCSAqIHdyaXR0ZW4uCi0JICovCi0JUEVSRkNUUl9TRVRQQ1IsCi0KLQkvKiBTdG9yZSBpbiBwb2ludGVyIGdpdmVuIGluIEFSRzAgdGhlIGN1cnJlbnQgUENSIHJlZ2lzdGVyIHZhbHVlCi0JICogYmVpbmcgdXNlZC4KLQkgKi8KLQlQRVJGQ1RSX0dFVFBDUgotfTsKLQotLyogSSBkb24ndCB3YW50IHRoZSBrZXJuZWwncyBuYW1lc3BhY2UgdG8gYmUgcG9sbHV0ZWQgd2l0aCB0aGlzCi0gKiBzdHVmZiB3aGVuIHRoaXMgZmlsZSBpcyBpbmNsdWRlZC4gIC0tRGF2ZU0KLSAqLwotI2lmbmRlZiBfX0tFUk5FTF9fCi0KLSNkZWZpbmUgIFBSSVYgMHgwMDAwMDAwMQotI2RlZmluZSAgU1lTICAweDAwMDAwMDAyCi0jZGVmaW5lICBVU1IgIDB4MDAwMDAwMDQKLQotLyogUGljLlMwIFNlbGVjdGlvbiBCaXQgRmllbGQgRW5jb2RpbmcsIFVsdHJhLUkvSUkgICovCi0jZGVmaW5lICBDWUNMRV9DTlQgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lICBJTlNUUl9DTlQgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lICBESVNQQVRDSDBfSUNfTUlTUyAgICAweDAwMDAwMDIwCi0jZGVmaW5lICBESVNQQVRDSDBfU1RPUkVCVUYgICAweDAwMDAwMDMwCi0jZGVmaW5lICBJQ19SRUYgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lICBEQ19SRCAgICAgICAgICAgICAgICAweDAwMDAwMDkwCi0jZGVmaW5lICBEQ19XUiAgICAgICAgICAgICAgICAweDAwMDAwMEEwCi0jZGVmaW5lICBMT0FEX1VTRSAgICAgICAgICAgICAweDAwMDAwMEIwCi0jZGVmaW5lICBFQ19SRUYgICAgICAgICAgICAgICAweDAwMDAwMEMwCi0jZGVmaW5lICBFQ19XUklURV9ISVRfUkRPICAgICAweDAwMDAwMEQwCi0jZGVmaW5lICBFQ19TTk9PUF9JTlYgICAgICAgICAweDAwMDAwMEUwCi0jZGVmaW5lICBFQ19SRF9ISVQgICAgICAgICAgICAweDAwMDAwMEYwCi0KLS8qIFBpYy5TMCBTZWxlY3Rpb24gQml0IEZpZWxkIEVuY29kaW5nLCBVbHRyYS1JSUkgICovCi0jZGVmaW5lICBVUzNfQ1lDTEVfQ05UCSAgICAgIAkweDAwMDAwMDAwCi0jZGVmaW5lICBVUzNfSU5TVFJfQ05UCSAgICAgIAkweDAwMDAwMDEwCi0jZGVmaW5lICBVUzNfRElTUEFUQ0gwX0lDX01JU1MJMHgwMDAwMDAyMAotI2RlZmluZSAgVVMzX0RJU1BBVENIMF9CUl9UR1QJMHgwMDAwMDAzMAotI2RlZmluZSAgVVMzX0RJU1BBVENIMF8yTkRfQlIJMHgwMDAwMDA0MAotI2RlZmluZSAgVVMzX1JTVEFMTF9TVE9SRVEJMHgwMDAwMDA1MAotI2RlZmluZSAgVVMzX1JTVEFMTF9JVV9VU0UJMHgwMDAwMDA2MAotI2RlZmluZSAgVVMzX0lDX1JFRgkJMHgwMDAwMDA4MAotI2RlZmluZSAgVVMzX0RDX1JECQkweDAwMDAwMDkwCi0jZGVmaW5lICBVUzNfRENfV1IJCTB4MDAwMDAwYTAKLSNkZWZpbmUgIFVTM19FQ19SRUYJCTB4MDAwMDAwYzAKLSNkZWZpbmUgIFVTM19FQ19XUl9ISVRfUlRPCTB4MDAwMDAwZDAKLSNkZWZpbmUgIFVTM19FQ19TTk9PUF9JTlYJMHgwMDAwMDBlMAotI2RlZmluZSAgVVMzX0VDX1JEX01JU1MJCTB4MDAwMDAwZjAKLSNkZWZpbmUgIFVTM19QQ19QT1JUMF9SRAkweDAwMDAwMTAwCi0jZGVmaW5lICBVUzNfU0lfU05PT1AJCTB4MDAwMDAxMTAKLSNkZWZpbmUgIFVTM19TSV9DSVFfRkxPVwkweDAwMDAwMTIwCi0jZGVmaW5lICBVUzNfU0lfT1dORUQJCTB4MDAwMDAxMzAKLSNkZWZpbmUgIFVTM19TV19DT1VOVF8wCQkweDAwMDAwMTQwCi0jZGVmaW5lICBVUzNfSVVfQlJfTUlTU19UQUtFTgkweDAwMDAwMTUwCi0jZGVmaW5lICBVUzNfSVVfQlJfQ09VTlRfVEFLRU4JMHgwMDAwMDE2MAotI2RlZmluZSAgVVMzX0RJU1BfUlNfTUlTUFJFRAkweDAwMDAwMTcwCi0jZGVmaW5lICBVUzNfRkFfUElQRV9DT01QTAkweDAwMDAwMTgwCi0jZGVmaW5lICBVUzNfTUNfUkVBRFNfMAkJMHgwMDAwMDIwMAotI2RlZmluZSAgVVMzX01DX1JFQURTXzEJCTB4MDAwMDAyMTAKLSNkZWZpbmUgIFVTM19NQ19SRUFEU18yCQkweDAwMDAwMjIwCi0jZGVmaW5lICBVUzNfTUNfUkVBRFNfMwkJMHgwMDAwMDIzMAotI2RlZmluZSAgVVMzX01DX1NUQUxMU18wCTB4MDAwMDAyNDAKLSNkZWZpbmUgIFVTM19NQ19TVEFMTFNfMgkweDAwMDAwMjUwCi0KLS8qIFBpYy5TMSBTZWxlY3Rpb24gQml0IEZpZWxkIEVuY29kaW5nLCBVbHRyYS1JL0lJICAqLwotI2RlZmluZSAgQ1lDTEVfQ05UX0QxICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSAgSU5TVFJfQ05UX0QxICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSAgRElTUEFUQ0gwX0lDX01JU1BSRUQgMHgwMDAwMTAwMAotI2RlZmluZSAgRElTUEFUQ0gwX0ZQX1VTRSAgICAgMHgwMDAwMTgwMAotI2RlZmluZSAgSUNfSElUICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSAgRENfUkRfSElUICAgICAgICAgICAgMHgwMDAwNDgwMAotI2RlZmluZSAgRENfV1JfSElUICAgICAgICAgICAgMHgwMDAwNTAwMAotI2RlZmluZSAgTE9BRF9VU0VfUkFXICAgICAgICAgMHgwMDAwNTgwMAotI2RlZmluZSAgRUNfSElUICAgICAgICAgICAgICAgMHgwMDAwNjAwMAotI2RlZmluZSAgRUNfV0IgICAgICAgICAgICAgICAgMHgwMDAwNjgwMAotI2RlZmluZSAgRUNfU05PT1BfQ0IgICAgICAgICAgMHgwMDAwNzAwMAotI2RlZmluZSAgRUNfSVRfSElUICAgICAgICAgICAgMHgwMDAwNzgwMAotCi0vKiBQaWMuUzEgU2VsZWN0aW9uIEJpdCBGaWVsZCBFbmNvZGluZywgVWx0cmEtSUlJICAqLwotI2RlZmluZSAgVVMzX0NZQ0xFX0NOVF9EMQkweDAwMDAwMDAwCi0jZGVmaW5lICBVUzNfSU5TVFJfQ05UX0QxCTB4MDAwMDA4MDAKLSNkZWZpbmUgIFVTM19ESVNQQVRDSDBfTUlTUFJFRAkweDAwMDAxMDAwCi0jZGVmaW5lICBVUzNfSUNfTUlTU19DQU5DRUxMRUQJMHgwMDAwMTgwMAotI2RlZmluZSAgVVMzX1JFX0VORElBTl9NSVNTCTB4MDAwMDIwMDAKLSNkZWZpbmUgIFVTM19SRV9GUFVfQllQQVNTCTB4MDAwMDI4MDAKLSNkZWZpbmUgIFVTM19SRV9EQ19NSVNTCQkweDAwMDAzMDAwCi0jZGVmaW5lICBVUzNfUkVfRUNfTUlTUwkJMHgwMDAwMzgwMAotI2RlZmluZSAgVVMzX0lDX01JU1MJCTB4MDAwMDQwMDAKLSNkZWZpbmUgIFVTM19EQ19SRF9NSVNTCQkweDAwMDA0ODAwCi0jZGVmaW5lICBVUzNfRENfV1JfTUlTUwkJMHgwMDAwNTAwMAotI2RlZmluZSAgVVMzX1JTVEFMTF9GUF9VU0UJMHgwMDAwNTgwMAotI2RlZmluZSAgVVMzX0VDX01JU1NFUwkJMHgwMDAwNjAwMAotI2RlZmluZSAgVVMzX0VDX1dCCQkweDAwMDA2ODAwCi0jZGVmaW5lICBVUzNfRUNfU05PT1BfQ0IJMHgwMDAwNzAwMAotI2RlZmluZSAgVVMzX0VDX0lDX01JU1MJCTB4MDAwMDc4MDAKLSNkZWZpbmUgIFVTM19SRV9QQ19NSVNTCQkweDAwMDA4MDAwCi0jZGVmaW5lICBVUzNfSVRMQl9NSVNTCQkweDAwMDA4ODAwCi0jZGVmaW5lICBVUzNfRFRMQl9NSVNTCQkweDAwMDA5MDAwCi0jZGVmaW5lICBVUzNfV0NfTUlTUwkJMHgwMDAwOTgwMAotI2RlZmluZSAgVVMzX1dDX1NOT09QX0NCCTB4MDAwMGEwMDAKLSNkZWZpbmUgIFVTM19XQ19TQ1JVQkJFRAkweDAwMDBhODAwCi0jZGVmaW5lICBVUzNfV0NfV0JfV09fUkVBRAkweDAwMDBiMDAwCi0jZGVmaW5lICBVUzNfUENfU09GVF9ISVQJMHgwMDAwYzAwMAotI2RlZmluZSAgVVMzX1BDX1NOT09QX0lOVgkweDAwMDBjODAwCi0jZGVmaW5lICBVUzNfUENfSEFSRF9ISVQJMHgwMDAwZDAwMAotI2RlZmluZSAgVVMzX1BDX1BPUlQxX1JECTB4MDAwMGQ4MDAKLSNkZWZpbmUgIFVTM19TV19DT1VOVF8xCQkweDAwMDBlMDAwCi0jZGVmaW5lICBVUzNfSVVfU1RBVF9CUl9NSVNfVU5UQUtFTgkweDAwMDBlODAwCi0jZGVmaW5lICBVUzNfSVVfU1RBVF9CUl9DT1VOVF9VTlRBS0VOCTB4MDAwMGYwMDAKLSNkZWZpbmUgIFVTM19QQ19NU19NSVNTRVMJMHgwMDAwZjgwMAotI2RlZmluZSAgVVMzX01DX1dSSVRFU18wCTB4MDAwMTA4MDAKLSNkZWZpbmUgIFVTM19NQ19XUklURVNfMQkweDAwMDExMDAwCi0jZGVmaW5lICBVUzNfTUNfV1JJVEVTXzIJMHgwMDAxMTgwMAotI2RlZmluZSAgVVMzX01DX1dSSVRFU18zCTB4MDAwMTIwMDAKLSNkZWZpbmUgIFVTM19NQ19TVEFMTFNfMQkweDAwMDEyODAwCi0jZGVmaW5lICBVUzNfTUNfU1RBTExTXzMJMHgwMDAxMzAwMAotI2RlZmluZSAgVVMzX1JFX1JBV19NSVNTCTB4MDAwMTM4MDAKLSNkZWZpbmUgIFVTM19GTV9QSVBFX0NPTVBMRVRJT04JMHgwMDAxNDAwMAotCi1zdHJ1Y3QgdmNvdW50ZXJfc3RydWN0IHsKLSAgdW5zaWduZWQgbG9uZyBsb25nIHZjbnQwOwotICB1bnNpZ25lZCBsb25nIGxvbmcgdmNudDE7Ci19OwotCi0jZW5kaWYgLyogIShfX0tFUk5FTF9fKSAqLwotCi0jZW5kaWYgLyogIShQRVJGX0NPVU5URVJfQVBJKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9wZXJmY3RyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oCmluZGV4IDMyNmRlMTAuLmJlYzMxNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oCkBAIC0xLDgxICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1BHQUxMT0NfSAotI2RlZmluZSBfU1BBUkM2NF9QR0FMTE9DX0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KLSNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotLyogUGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcuICovCi0KLXN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIE5VTEwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCi17Ci0JcXVpY2tsaXN0X2ZyZWUoMCwgTlVMTCwgcGdkKTsKLX0KLQotI2RlZmluZSBwdWRfcG9wdWxhdGUoTU0sIFBVRCwgUE1EKQlwdWRfc2V0KFBVRCwgUE1EKQotCi1zdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIHF1aWNrbGlzdF9hbGxvYygwLCBHRlBfS0VSTkVMLCBOVUxMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKQotewotCXF1aWNrbGlzdF9mcmVlKDAsIE5VTEwsIHBtZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIE5VTEwpOwotfQotCi1zdGF0aWMgaW5saW5lIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jdm9pZCAqcGc7Ci0KLQlwZyA9IHF1aWNrbGlzdF9hbGxvYygwLCBHRlBfS0VSTkVMLCBOVUxMKTsKLQlpZiAoIXBnKQotCQlyZXR1cm4gTlVMTDsKLQlwYWdlID0gdmlydF90b19wYWdlKHBnKTsKLQlwZ3RhYmxlX3BhZ2VfY3RvcihwYWdlKTsKLQlyZXR1cm4gcGFnZTsKLX0KLQkJCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdGVfdCAqcHRlKQotewotCXF1aWNrbGlzdF9mcmVlKDAsIE5VTEwsIHB0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXBhZ2UpCi17Ci0JcGd0YWJsZV9wYWdlX2R0b3IocHRlcGFnZSk7Ci0JcXVpY2tsaXN0X2ZyZWVfcGFnZSgwLCBOVUxMLCBwdGVwYWdlKTsKLX0KLQotCi0jZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwoTU0sIFBNRCwgUFRFKQlwbWRfc2V0KFBNRCwgUFRFKQotI2RlZmluZSBwbWRfcG9wdWxhdGUoTU0sUE1ELFBURV9QQUdFKQkJXAotCXBtZF9wb3B1bGF0ZV9rZXJuZWwoTU0sUE1ELHBhZ2VfYWRkcmVzcyhQVEVfUEFHRSkpCi0jZGVmaW5lIHBtZF9wZ3RhYmxlKHBtZCkgcG1kX3BhZ2UocG1kKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfcGd0X2NhY2hlKHZvaWQpCi17Ci0JcXVpY2tsaXN0X3RyaW0oMCwgTlVMTCwgMjUsIDE2KTsKLX0KLQotI2VuZGlmIC8qIF9TUEFSQzY0X1BHQUxMT0NfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9wZ2FsbG9jLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCmluZGV4IGI4NzAxNzcuLjlkZWNiZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCkBAIC0xLDc4MSArMSBAQAotLyoKLSAqIHBndGFibGUuaDogU3BpdEZpcmUgcGFnZSB0YWJsZSBvcGVyYXRpb25zLgotICoKLSAqIENvcHlyaWdodCAxOTk2LDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICogQ29weXJpZ2h0IDE5OTcsMTk5OCBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfUEdUQUJMRV9ICi0jZGVmaW5lIF9TUEFSQzY0X1BHVEFCTEVfSAotCi0vKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKLSAqIHRoZSBTcGl0RmlyZSBwYWdlIHRhYmxlcy4KLSAqLwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgotI2luY2x1ZGUgPGFzbS9hc2kuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLS8qIFRoZSBrZXJuZWwgaW1hZ2Ugb2NjdXBpZXMgMHg0MDAwMDAwIHRvIDB4NjAwMDAwMCAoNE1CIC0tPiA5Nk1CKS4KLSAqIFRoZSBwYWdlIGNvcHkgYmxvY2tvcHMgY2FuIHVzZSAweDYwMDAwMDAgdG8gMHg4MDAwMDAwLgotICogVGhlIFRTQiBpcyBtYXBwZWQgaW4gdGhlIDB4ODAwMDAwMCB0byAweGEwMDAwMDAgcmFuZ2UuCi0gKiBUaGUgUFJPTSByZXNpZGVzIGluIGFuIGFyZWEgc3Bhbm5pbmcgMHhmMDAwMDAwMCB0byAweDEwMDAwMDAwMC4KLSAqIFRoZSB2bWFsbG9jIGFyZWEgc3BhbnMgMHgxMDAwMDAwMDAgdG8gMHgyMDAwMDAwMDAuCi0gKiBTaW5jZSBtb2R1bGVzIG5lZWQgdG8gYmUgaW4gdGhlIGxvd2VzdCAzMi1iaXRzIG9mIHRoZSBhZGRyZXNzIHNwYWNlLAotICogd2UgcGxhY2UgdGhlbSByaWdodCBiZWZvcmUgdGhlIE9CUCBhcmVhIGZyb20gMHgxMDAwMDAwMCB0byAweGYwMDAwMDAwLgotICogVGhlcmUgaXMgYSBzaW5nbGUgc3RhdGljIGtlcm5lbCBQTUQgd2hpY2ggbWFwcyBmcm9tIDB4MCB0byBhZGRyZXNzCi0gKiAweDQwMDAwMDAwMC4KLSAqLwotI2RlZmluZQlUTEJURU1QX0JBU0UJCV9BQygweDAwMDAwMDAwMDYwMDAwMDAsVUwpCi0jZGVmaW5lCVRTQk1BUF9CQVNFCQlfQUMoMHgwMDAwMDAwMDA4MDAwMDAwLFVMKQotI2RlZmluZSBNT0RVTEVTX1ZBRERSCQlfQUMoMHgwMDAwMDAwMDEwMDAwMDAwLFVMKQotI2RlZmluZSBNT0RVTEVTX0xFTgkJX0FDKDB4MDAwMDAwMDBlMDAwMDAwMCxVTCkKLSNkZWZpbmUgTU9EVUxFU19FTkQJCV9BQygweDAwMDAwMDAwZjAwMDAwMDAsVUwpCi0jZGVmaW5lIExPV19PQlBfQUREUkVTUwkJX0FDKDB4MDAwMDAwMDBmMDAwMDAwMCxVTCkKLSNkZWZpbmUgSElfT0JQX0FERFJFU1MJCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQlfQUMoMHgwMDAwMDAwMjAwMDAwMDAwLFVMKQotI2RlZmluZSBWTUVNTUFQX0JBU0UJCV9BQygweDAwMDAwMDAyMDAwMDAwMDAsVUwpCi0KLSNkZWZpbmUgdm1lbW1hcAkJCSgoc3RydWN0IHBhZ2UgKilWTUVNTUFQX0JBU0UpCi0KLS8qIFhYWCBBbGwgb2YgdGhpcyBuZWVkcyB0byBiZSByZXRob3VnaHQgc28gd2UgY2FuIHRha2UgYWR2YW50YWdlCi0gKiBYWFggY2hlZXRhaCdzIGZ1bGwgNjQtYml0IHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgaWUuIG5vIG1vcmUgaG9sZQotICogWFhYIGluIHRoZSBtaWRkbGUgbGlrZSBvbiBzcGl0ZmlyZS4gLURhdmVNCi0gKi8KLS8qCi0gKiBHaXZlbiBhIHZpcnR1YWwgYWRkcmVzcywgdGhlIGxvd2VzdCBQQUdFX1NISUZUIGJpdHMgZGV0ZXJtaW5lIG9mZnNldAotICogaW50byB0aGUgcGFnZTsgdGhlIG5leHQgaGlnaGVyIFBBR0VfU0hJRlQtMyBiaXRzIGRldGVybWluZSB0aGUgcHRlIwotICogaW4gdGhlIHByb3BlciBwYWdldGFibGUgKHRoZSAtMyBpcyBmcm9tIHRoZSA4IGJ5dGUgcHRlcywgYW5kIGVhY2ggcGFnZQotICogdGFibGUgaXMgYSBzaW5nbGUgcGFnZSBsb25nKS4gVGhlIG5leHQgaGlnaGVyIFBNRF9CSVRTIGRldGVybWluZSBwbWQjIAotICogaW4gdGhlIHByb3BlciBwbWR0YWJsZSAod2hlcmUgd2UgbXVzdCBoYXZlIFBNRF9CSVRTIDw9IChQQUdFX1NISUZULTIpIAotICogc2luY2UgdGhlIHBtZCBlbnRyaWVzIGFyZSA0IGJ5dGVzLCBhbmQgZWFjaCBwbWQgcGFnZSBpcyBhIHNpbmdsZSBwYWdlIAotICogbG9uZykuIEZpbmFsbHksIHRoZSBoaWdoZXIgZmV3IGJpdHMgZGV0ZXJtaW5lIHBnZGUjLgotICovCi0KLS8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UKLSAqIHRhYmxlIGNhbiBtYXAKLSAqLwotI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVC0zKSkKLSNkZWZpbmUgUE1EX1NJWkUJKF9BQygxLFVMKSA8PCBQTURfU0hJRlQpCi0jZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQotI2RlZmluZSBQTURfQklUUwkoUEFHRV9TSElGVCAtIDIpCi0KLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwotI2RlZmluZSBQR0RJUl9TSElGVAkoUEFHRV9TSElGVCArIChQQUdFX1NISUZULTMpICsgUE1EX0JJVFMpCi0jZGVmaW5lIFBHRElSX1NJWkUJKF9BQygxLFVMKSA8PCBQR0RJUl9TSElGVCkKLSNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQotI2RlZmluZSBQR0RJUl9CSVRTCShQQUdFX1NISUZUIC0gMikKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLS8qIEVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsLiAqLwotI2RlZmluZSBQVFJTX1BFUl9QVEUJKDFVTCA8PCAoUEFHRV9TSElGVC0zKSkKLSNkZWZpbmUgUFRSU19QRVJfUE1ECSgxVUwgPDwgUE1EX0JJVFMpCi0jZGVmaW5lIFBUUlNfUEVSX1BHRAkoMVVMIDw8IFBHRElSX0JJVFMpCi0KLS8qIEtlcm5lbCBoYXMgYSBzZXBhcmF0ZSA0NGJpdCBhZGRyZXNzIHNwYWNlLiAqLwotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAotCi0jZGVmaW5lIHB0ZV9FUlJPUihlKQlfX2J1aWx0aW5fdHJhcCgpCi0jZGVmaW5lIHBtZF9FUlJPUihlKQlfX2J1aWx0aW5fdHJhcCgpCi0jZGVmaW5lIHBnZF9FUlJPUihlKQlfX2J1aWx0aW5fdHJhcCgpCi0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotLyogUFRFIGJpdHMgd2hpY2ggYXJlIHRoZSBzYW1lIGluIFNVTjRVIGFuZCBTVU40ViBmb3JtYXQuICAqLwotI2RlZmluZSBfUEFHRV9WQUxJRAkgIF9BQygweDgwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIFZhbGlkIFRURSAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1IJICAJICBfQUMoMHg4MDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBLZWVwIHJlZiBiaXQgdXB0b2RhdGUqLwotCi0vKiBTVU40VSBwdGUgYml0cy4uLiAqLwotI2RlZmluZSBfUEFHRV9TWjRNQl80VQkgIF9BQygweDYwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIDRNQiBQYWdlICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1NaNTEyS180VQkgIF9BQygweDQwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIDUxMksgUGFnZSAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1NaNjRLXzRVCSAgX0FDKDB4MjAwMDAwMDAwMDAwMDAwMCxVTCkgLyogNjRLIFBhZ2UgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfU1o4S180VQkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIDhLIFBhZ2UgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX05GT180VQkgIF9BQygweDEwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIE5vIEZhdWx0IE9ubHkgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX0lFXzRVCSAgX0FDKDB4MDgwMDAwMDAwMDAwMDAwMCxVTCkgLyogSW52ZXJ0IEVuZGlhbm5lc3MgICAgKi8KLSNkZWZpbmUgX1BBR0VfU09GVDJfNFUJICBfQUMoMHgwN0ZDMDAwMDAwMDAwMDAwLFVMKSAvKiBTb2Z0d2FyZSBiaXRzLCBzZXQgMiAqLwotI2RlZmluZSBfUEFHRV9SRVMxXzRVCSAgX0FDKDB4MDAwMjAwMDAwMDAwMDAwMCxVTCkgLyogUmVzZXJ2ZWQgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfU1ozMk1CXzRVCSAgX0FDKDB4MDAwMTAwMDAwMDAwMDAwMCxVTCkgLyogKFBhbnRoZXIpIDMyTUIgcGFnZSAgKi8KLSNkZWZpbmUgX1BBR0VfU1oyNTZNQl80VSAgX0FDKDB4MjAwMTAwMDAwMDAwMDAwMCxVTCkgLyogKFBhbnRoZXIpIDI1Nk1CIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfU1pBTExfNFUJICBfQUMoMHg2MDAxMDAwMDAwMDAwMDAwLFVMKSAvKiBBbGwgcGdzeiBiaXRzICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9TTl80VQkgIF9BQygweDAwMDA4MDAwMDAwMDAwMDAsVUwpIC8qIChDaGVldGFoKSBTbm9vcCAgICAgICovCi0jZGVmaW5lIF9QQUdFX1JFUzJfNFUJICBfQUMoMHgwMDAwNzgwMDAwMDAwMDAwLFVMKSAvKiBSZXNlcnZlZCAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9QQUREUl80VQkgIF9BQygweDAwMDAwN0ZGRkZGRkUwMDAsVUwpIC8qIChDaGVldGFoKSBwYVs0MjoxM10gICovCi0jZGVmaW5lIF9QQUdFX1NPRlRfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAxRjgwLFVMKSAvKiBTb2Z0d2FyZSBiaXRzOiAgICAgICAqLwotI2RlZmluZSBfUEFHRV9FWEVDXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMTAwMCxVTCkgLyogRXhlY3V0YWJsZSBTVyBiaXQgICAgKi8KLSNkZWZpbmUgX1BBR0VfTU9ESUZJRURfNFUgX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkgLyogTW9kaWZpZWQgKGRpcnR5KSAgICAgKi8KLSNkZWZpbmUgX1BBR0VfRklMRV80VQkgIF9BQygweDAwMDAwMDAwMDAwMDA4MDAsVUwpIC8qIFBhZ2VjYWNoZSBwYWdlICAgICAgICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VEXzRVIF9BQygweDAwMDAwMDAwMDAwMDA0MDAsVUwpIC8qIEFjY2Vzc2VkIChyZWYnZCkgICAgICovCi0jZGVmaW5lIF9QQUdFX1JFQURfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAwMjAwLFVMKSAvKiBSZWFkYWJsZSBTVyBCaXQgICAgICAqLwotI2RlZmluZSBfUEFHRV9XUklURV80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAxMDAsVUwpIC8qIFdyaXRhYmxlIFNXIEJpdCAgICAgICovCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlRfNFUgIF9BQygweDAwMDAwMDAwMDAwMDAwODAsVUwpIC8qIFByZXNlbnQgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX0xfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDQwLFVMKSAvKiBMb2NrZWQgVFRFICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9DUF80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAwMjAsVUwpIC8qIENhY2hlYWJsZSBpbiBQLUNhY2hlICovCi0jZGVmaW5lIF9QQUdFX0NWXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAxMCxVTCkgLyogQ2FjaGVhYmxlIGluIFYtQ2FjaGUgKi8KLSNkZWZpbmUgX1BBR0VfRV80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDgsVUwpIC8qIHNpZGUtRWZmZWN0ICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1BfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDA0LFVMKSAvKiBQcml2aWxlZ2VkIFBhZ2UgICAgICAqLwotI2RlZmluZSBfUEFHRV9XXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMixVTCkgLyogV3JpdGFibGUgICAgICAgICAgICAgKi8KLQotLyogU1VONFYgcHRlIGJpdHMuLi4gKi8KLSNkZWZpbmUgX1BBR0VfTkZPXzRWCSAgX0FDKDB4NDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogTm8gRmF1bHQgT25seSAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfU09GVDJfNFYJICBfQUMoMHgzRjAwMDAwMDAwMDAwMDAwLFVMKSAvKiBTb2Z0d2FyZSBiaXRzLCBzZXQgMiAqLwotI2RlZmluZSBfUEFHRV9NT0RJRklFRF80ViBfQUMoMHgyMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBNb2RpZmllZCAoZGlydHkpICAgICAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRF80ViBfQUMoMHgxMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBBY2Nlc3NlZCAocmVmJ2QpICAgICAqLwotI2RlZmluZSBfUEFHRV9SRUFEXzRWCSAgX0FDKDB4MDgwMDAwMDAwMDAwMDAwMCxVTCkgLyogUmVhZGFibGUgU1cgQml0ICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfV1JJVEVfNFYJICBfQUMoMHgwNDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBXcml0YWJsZSBTVyBCaXQgICAgICAqLwotI2RlZmluZSBfUEFHRV9QQUREUl80VgkgIF9BQygweDAwRkZGRkZGRkZGRkUwMDAsVUwpIC8qIHBhZGRyWzU1OjEzXSAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX0lFXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMTAwMCxVTCkgLyogSW52ZXJ0IEVuZGlhbm5lc3MgICAgKi8KLSNkZWZpbmUgX1BBR0VfRV80VgkgIF9BQygweDAwMDAwMDAwMDAwMDA4MDAsVUwpIC8qIHNpZGUtRWZmZWN0ICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX0NQXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDQwMCxVTCkgLyogQ2FjaGVhYmxlIGluIFAtQ2FjaGUgKi8KLSNkZWZpbmUgX1BBR0VfQ1ZfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMjAwLFVMKSAvKiBDYWNoZWFibGUgaW4gVi1DYWNoZSAqLwotI2RlZmluZSBfUEFHRV9QXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDEwMCxVTCkgLyogUHJpdmlsZWdlZCBQYWdlICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfRVhFQ180VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwODAsVUwpIC8qIEV4ZWN1dGFibGUgUGFnZSAgICAgICovCi0jZGVmaW5lIF9QQUdFX1dfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDQwLFVMKSAvKiBXcml0YWJsZSAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9TT0ZUXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAzMCxVTCkgLyogU29mdHdhcmUgYml0cyAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfRklMRV80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMjAsVUwpIC8qIFBhZ2VjYWNoZSBwYWdlICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlRfNFYgIF9BQygweDAwMDAwMDAwMDAwMDAwMTAsVUwpIC8qIFByZXNlbnQgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1JFU1ZfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDA4LFVMKSAvKiBSZXNlcnZlZCAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9TWjE2R0JfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDA3LFVMKSAvKiAxNkdCIFBhZ2UgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9TWjJHQl80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDYsVUwpIC8qIDJHQiBQYWdlICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1NaMjU2TUJfNFYgIF9BQygweDAwMDAwMDAwMDAwMDAwMDUsVUwpIC8qIDI1Nk1CIFBhZ2UgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1NaMzJNQl80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDQsVUwpIC8qIDMyTUIgUGFnZSAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1NaNE1CXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMyxVTCkgLyogNE1CIFBhZ2UgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfU1o1MTJLXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMixVTCkgLyogNTEySyBQYWdlICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfU1o2NEtfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAxLFVMKSAvKiA2NEsgUGFnZSAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9TWjhLXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogOEsgUGFnZSAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfU1pBTExfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDA3LFVMKSAvKiBBbGwgcGdzeiBiaXRzICAgICAgICAqLwotCi0jaWYgUEFHRV9TSElGVCA9PSAxMwotI2RlZmluZSBfUEFHRV9TWkJJVFNfNFUJX1BBR0VfU1o4S180VQotI2RlZmluZSBfUEFHRV9TWkJJVFNfNFYJX1BBR0VfU1o4S180VgotI2VsaWYgUEFHRV9TSElGVCA9PSAxNgotI2RlZmluZSBfUEFHRV9TWkJJVFNfNFUJX1BBR0VfU1o2NEtfNFUKLSNkZWZpbmUgX1BBR0VfU1pCSVRTXzRWCV9QQUdFX1NaNjRLXzRWCi0jZWxpZiBQQUdFX1NISUZUID09IDE5Ci0jZGVmaW5lIF9QQUdFX1NaQklUU180VQlfUEFHRV9TWjUxMktfNFUKLSNkZWZpbmUgX1BBR0VfU1pCSVRTXzRWCV9QQUdFX1NaNTEyS180VgotI2VsaWYgUEFHRV9TSElGVCA9PSAyMgotI2RlZmluZSBfUEFHRV9TWkJJVFNfNFUJX1BBR0VfU1o0TUJfNFUKLSNkZWZpbmUgX1BBR0VfU1pCSVRTXzRWCV9QQUdFX1NaNE1CXzRWCi0jZWxzZQotI2Vycm9yIFdyb25nIFBBR0VfU0hJRlQgc3BlY2lmaWVkCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQikKLSNkZWZpbmUgX1BBR0VfU1pIVUdFXzRVCV9QQUdFX1NaNE1CXzRVCi0jZGVmaW5lIF9QQUdFX1NaSFVHRV80VglfUEFHRV9TWjRNQl80VgotI2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEySykKLSNkZWZpbmUgX1BBR0VfU1pIVUdFXzRVCV9QQUdFX1NaNTEyS180VQotI2RlZmluZSBfUEFHRV9TWkhVR0VfNFYJX1BBR0VfU1o1MTJLXzRWCi0jZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspCi0jZGVmaW5lIF9QQUdFX1NaSFVHRV80VQlfUEFHRV9TWjY0S180VQotI2RlZmluZSBfUEFHRV9TWkhVR0VfNFYJX1BBR0VfU1o2NEtfNFYKLSNlbmRpZgotCi0vKiBUaGVzZSBhcmUgYWN0dWFsbHkgZmlsbGVkIGluIGF0IGJvb3QgdGltZSBieSBzdW40e3Usdn1fcGdwcm90X2luaXQoKSAqLwotI2RlZmluZSBfX1AwMDAJX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19QMDAxCV9fcGdwcm90KDApCi0jZGVmaW5lIF9fUDAxMAlfX3BncHJvdCgwKQotI2RlZmluZSBfX1AwMTEJX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19QMTAwCV9fcGdwcm90KDApCi0jZGVmaW5lIF9fUDEwMQlfX3BncHJvdCgwKQotI2RlZmluZSBfX1AxMTAJX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19QMTExCV9fcGdwcm90KDApCi0KLSNkZWZpbmUgX19TMDAwCV9fcGdwcm90KDApCi0jZGVmaW5lIF9fUzAwMQlfX3BncHJvdCgwKQotI2RlZmluZSBfX1MwMTAJX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19TMDExCV9fcGdwcm90KDApCi0jZGVmaW5lIF9fUzEwMAlfX3BncHJvdCgwKQotI2RlZmluZSBfX1MxMDEJX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19TMTEwCV9fcGdwcm90KDApCi0jZGVmaW5lIF9fUzExMQlfX3BncHJvdCgwKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1leHRlcm4gcHRlX3QgbWtfcHRlX2lvKHVuc2lnbmVkIGxvbmcsIHBncHJvdF90LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBwdGVfc3pfYml0cyh1bnNpZ25lZCBsb25nIHNpemUpOwotCi1leHRlcm4gcGdwcm90X3QgUEFHRV9LRVJORUw7Ci1leHRlcm4gcGdwcm90X3QgUEFHRV9LRVJORUxfTE9DS0VEOwotZXh0ZXJuIHBncHJvdF90IFBBR0VfQ09QWTsKLWV4dGVybiBwZ3Byb3RfdCBQQUdFX1NIQVJFRDsKLQotLyogWFhYIFRoaXMgdWdseW5lc3MgaXMgZm9yIHRoZSBhdHlmYiBkcml2ZXIncyBzcGFyYyBtbWFwKCkgc3VwcG9ydC4gWFhYICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfUEFHRV9JRTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9QQUdFX0U7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfUEFHRV9DQUNIRTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGdfaW9iaXRzOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX1BBR0VfQUxMX1NaX0JJVFM7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfUEFHRV9TWkJJVFM7Ci0KLWV4dGVybiBzdHJ1Y3QgcGFnZSAqbWVtX21hcF96ZXJvOwotI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpCShtZW1fbWFwX3plcm8pCi0KLS8qIFBGTnMgYXJlIHJlYWwgcGh5c2ljYWwgcGFnZSBudW1iZXJzLiAgSG93ZXZlciwgbWVtX21hcCBvbmx5IGJlZ2lucyB0byByZWNvcmQKLSAqIHBlci1wYWdlIGluZm9ybWF0aW9uIHN0YXJ0aW5nIGF0IHBmbl9iYXNlLiAgVGhpcyBpcyB0byBoYW5kbGUgc3lzdGVtcyB3aGVyZQotICogdGhlIGZpcnN0IHBoeXNpY2FsIHBhZ2UgaW4gdGhlIG1hY2hpbmUgaXMgYXQgc29tZSBodWdlIHBoeXNpY2FsIGFkZHJlc3MsCi0gKiBzdWNoIGFzIDRHQi4gICBUaGlzIGlzIGNvbW1vbiBvbiBhIHBhcnRpdGlvbmVkIEUxMDAwMCwgZm9yIGV4YW1wbGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcGZuX3B0ZSh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkKLXsKLQl1bnNpZ25lZCBsb25nIHBhZGRyID0gcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBzel9iaXRzOwotCi0Jc3pfYml0cyA9IDBVTDsKLQlpZiAoX1BBR0VfU1pCSVRTXzRVICE9IDBVTCB8fCBfUEFHRV9TWkJJVFNfNFYgIT0gMFVMKSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiXG42NjE6CXNldGhpCQklJXVoaSglMSksICUwXG4iCi0JCSIJc2xseAkJJTAsIDMyLCAlMFxuIgotCQkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JCSIJLndvcmQJCTY2MWJcbiIKLQkJIgltb3YJCSUyLCAlMFxuIgotCQkiCW5vcFxuIgotCQkiCS5wcmV2aW91c1xuIgotCQk6ICI9ciIgKHN6X2JpdHMpCi0JCTogImkiIChfUEFHRV9TWkJJVFNfNFUpLCAiaSIgKF9QQUdFX1NaQklUU180VikpOwotCX0KLQlyZXR1cm4gX19wdGUocGFkZHIgfCBzel9iaXRzIHwgcGdwcm90X3ZhbChwcm90KSk7Ci19Ci0jZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQotCi0vKiBUaGlzIG9uZSBjYW4gYmUgZG9uZSB3aXRoIHR3byBzaGlmdHMuICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9wZm4ocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIlxuNjYxOglzbGx4CQklMSwgJTIsICUwXG4iCi0JIglzcmx4CQklMCwgJTMsICUwXG4iCi0JIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgotCSIJLndvcmQJCTY2MWJcbiIKLQkiCXNsbHgJCSUxLCAlNCwgJTBcbiIKLQkiCXNybHgJCSUwLCAlNSwgJTBcbiIKLQkiCS5wcmV2aW91c1xuIgotCTogIj1yIiAocmV0KQotCTogInIiIChwdGVfdmFsKHB0ZSkpLAotCSAgImkiICgyMSksICJpIiAoMjEgKyBQQUdFX1NISUZUKSwKLQkgICJpIiAoOCksICJpIiAoOCArIFBBR0VfU0hJRlQpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIHB0ZV9wYWdlKHgpIHBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCi0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IHByb3QpCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrLCB0bXA7Ci0KLQkvKiBTVU40VTogMHg2MDAzMDdmZmZmZmZlY2I4IChuZWdhdGVkID09IDB4OWZmY2Y4MDAwMDAwMTM0NykKLQkgKiBTVU40VjogMHgzMGZmZmZmZmZmZmZlZTE3IChuZWdhdGVkID09IDB4Y2YwMDAwMDAwMDAwMTFlOCkKLQkgKgotCSAqIEV2ZW4gaWYgd2UgdXNlIG5lZ2F0aW9uIHRyaWNrcyB0aGUgcmVzdWx0IGlzIHN0aWxsIGEgNgotCSAqIGluc3RydWN0aW9uIHNlcXVlbmNlLCBzbyBkb24ndCB0cnkgdG8gcGxheSBmYW5jeSBhbmQganVzdAotCSAqIGRvIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBpbXBsZW1lbnRhdGlvbi4KLQkgKgotCSAqIE5vdGU6IFdlIGVuY29kZSB0aGlzIGludG8gMyBzdW40diAyLWluc24gcGF0Y2ggc2VxdWVuY2VzLgotCSAqLwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIlxuNjYxOglzZXRoaQkJJSV1aGkoJTIpLCAlMVxuIgotCSIJc2V0aGkJCSUlaGkoJTIpLCAlMFxuIgotCSJcbjY2MjoJb3IJCSUxLCAlJXVsbyglMiksICUxXG4iCi0JIglvcgkJJTAsICUlbG8oJTIpLCAlMFxuIgotCSJcbjY2MzoJc2xseAkJJTEsIDMyLCAlMVxuIgotCSIJb3IJCSUwLCAlMSwgJTBcbiIKLQkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JIgkud29yZAkJNjYxYlxuIgotCSIJc2V0aGkJCSUldWhpKCUzKSwgJTFcbiIKLQkiCXNldGhpCQklJWhpKCUzKSwgJTBcbiIKLQkiCS53b3JkCQk2NjJiXG4iCi0JIglvcgkJJTEsICUldWxvKCUzKSwgJTFcbiIKLQkiCW9yCQklMCwgJSVsbyglMyksICUwXG4iCi0JIgkud29yZAkJNjYzYlxuIgotCSIJc2xseAkJJTEsIDMyLCAlMVxuIgotCSIJb3IJCSUwLCAlMSwgJTBcbiIKLQkiCS5wcmV2aW91c1xuIgotCTogIj1yIiAobWFzayksICI9ciIgKHRtcCkKLQk6ICJpIiAoX1BBR0VfUEFERFJfNFUgfCBfUEFHRV9NT0RJRklFRF80VSB8IF9QQUdFX0FDQ0VTU0VEXzRVIHwKLQkgICAgICAgX1BBR0VfQ1BfNFUgfCBfUEFHRV9DVl80VSB8IF9QQUdFX0VfNFUgfCBfUEFHRV9QUkVTRU5UXzRVIHwKLQkgICAgICAgX1BBR0VfU1pCSVRTXzRVKSwKLQkgICJpIiAoX1BBR0VfUEFERFJfNFYgfCBfUEFHRV9NT0RJRklFRF80ViB8IF9QQUdFX0FDQ0VTU0VEXzRWIHwKLQkgICAgICAgX1BBR0VfQ1BfNFYgfCBfUEFHRV9DVl80ViB8IF9QQUdFX0VfNFYgfCBfUEFHRV9QUkVTRU5UXzRWIHwKLQkgICAgICAgX1BBR0VfU1pCSVRTXzRWKSk7Ci0KLQlyZXR1cm4gX19wdGUoKHB0ZV92YWwocHRlKSAmIG1hc2spIHwgKHBncHJvdF92YWwocHJvdCkgJiB+bWFzaykpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHBnb2ZmX3RvX3B0ZSh1bnNpZ25lZCBsb25nIG9mZikKLXsKLQlvZmYgPDw9IFBBR0VfU0hJRlQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiXG42NjE6CW9yCQklMCwgJTIsICUwXG4iCi0JIgkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsIFwiYXhcIlxuIgotCSIJLndvcmQJCTY2MWJcbiIKLQkiCW9yCQklMCwgJTMsICUwXG4iCi0JIgkucHJldmlvdXNcbiIKLQk6ICI9ciIgKG9mZikKLQk6ICIwIiAob2ZmKSwgImkiIChfUEFHRV9GSUxFXzRVKSwgImkiIChfUEFHRV9GSUxFXzRWKSk7Ci0KLQlyZXR1cm4gX19wdGUob2ZmKTsKLX0KLQotc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3Rfbm9uY2FjaGVkKHBncHJvdF90IHByb3QpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSBwZ3Byb3RfdmFsKHByb3QpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIlxuNjYxOglhbmRuCQklMCwgJTIsICUwXG4iCi0JIglvcgkJJTAsICUzLCAlMFxuIgotCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKLQkiCS53b3JkCQk2NjFiXG4iCi0JIglhbmRuCQklMCwgJTQsICUwXG4iCi0JIglvcgkJJTAsICU1LCAlMFxuIgotCSIJLnByZXZpb3VzXG4iCi0JOiAiPXIiICh2YWwpCi0JOiAiMCIgKHZhbCksICJpIiAoX1BBR0VfQ1BfNFUgfCBfUEFHRV9DVl80VSksICJpIiAoX1BBR0VfRV80VSksCi0JICAgICAgICAgICAgICJpIiAoX1BBR0VfQ1BfNFYgfCBfUEFHRV9DVl80ViksICJpIiAoX1BBR0VfRV80VikpOwotCi0JcmV0dXJuIF9fcGdwcm90KHZhbCk7Ci19Ci0vKiBWYXJpb3VzIHBpZWNlcyBvZiBjb2RlIGNoZWNrIGZvciBwbGF0Zm9ybSBzdXBwb3J0IGJ5IGlmZGVmIHRlc3RpbmcKLSAqIG9uICJwZ3Byb3Rfbm9uY2FjaGVkIi4gIFRoYXQncyBicm9rZW4gYW5kIHNob3VsZCBiZSBmaXhlZCwgYnV0IGZvcgotICogbm93Li4uCi0gKi8KLSNkZWZpbmUgcGdwcm90X25vbmNhY2hlZCBwZ3Byb3Rfbm9uY2FjaGVkCi0KLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJcbjY2MToJc2V0aGkJCSUldWhpKCUxKSwgJTBcbiIKLQkiCXNsbHgJCSUwLCAzMiwgJTBcbiIKLQkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JIgkud29yZAkJNjYxYlxuIgotCSIJbW92CQklMiwgJTBcbiIKLQkiCW5vcFxuIgotCSIJLnByZXZpb3VzXG4iCi0JOiAiPXIiIChtYXNrKQotCTogImkiIChfUEFHRV9TWkhVR0VfNFUpLCAiaSIgKF9QQUdFX1NaSFVHRV80VikpOwotCi0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IG1hc2spOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgdmFsID0gcHRlX3ZhbChwdGUpLCB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiXG42NjE6CW9yCQklMCwgJTMsICUwXG4iCi0JIglub3BcbiIKLQkiXG42NjI6CW5vcFxuIgotCSIJbm9wXG4iCi0JIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgotCSIJLndvcmQJCTY2MWJcbiIKLQkiCXNldGhpCQklJXVoaSglNCksICUxXG4iCi0JIglzbGx4CQklMSwgMzIsICUxXG4iCi0JIgkud29yZAkJNjYyYlxuIgotCSIJb3IJCSUxLCAlJWxvKCU0KSwgJTFcbiIKLQkiCW9yCQklMCwgJTEsICUwXG4iCi0JIgkucHJldmlvdXNcbiIKLQk6ICI9ciIgKHZhbCksICI9ciIgKHRtcCkKLQk6ICIwIiAodmFsKSwgImkiIChfUEFHRV9NT0RJRklFRF80VSB8IF9QQUdFX1dfNFUpLAotCSAgImkiIChfUEFHRV9NT0RJRklFRF80ViB8IF9QQUdFX1dfNFYpKTsKLQotCXJldHVybiBfX3B0ZSh2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwocHRlKSwgdG1wOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIlxuNjYxOglhbmRuCQklMCwgJTMsICUwXG4iCi0JIglub3BcbiIKLQkiXG42NjI6CW5vcFxuIgotCSIJbm9wXG4iCi0JIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgotCSIJLndvcmQJCTY2MWJcbiIKLQkiCXNldGhpCQklJXVoaSglNCksICUxXG4iCi0JIglzbGx4CQklMSwgMzIsICUxXG4iCi0JIgkud29yZAkJNjYyYlxuIgotCSIJb3IJCSUxLCAlJWxvKCU0KSwgJTFcbiIKLQkiCWFuZG4JCSUwLCAlMSwgJTBcbiIKLQkiCS5wcmV2aW91c1xuIgotCTogIj1yIiAodmFsKSwgIj1yIiAodG1wKQotCTogIjAiICh2YWwpLCAiaSIgKF9QQUdFX01PRElGSUVEXzRVIHwgX1BBR0VfV180VSksCi0JICAiaSIgKF9QQUdFX01PRElGSUVEXzRWIHwgX1BBR0VfV180VikpOwotCi0JcmV0dXJuIF9fcHRlKHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgdmFsID0gcHRlX3ZhbChwdGUpLCBtYXNrOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIlxuNjYxOgltb3YJCSUxLCAlMFxuIgotCSIJbm9wXG4iCi0JIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgotCSIJLndvcmQJCTY2MWJcbiIKLQkiCXNldGhpCQklJXVoaSglMiksICUwXG4iCi0JIglzbGx4CQklMCwgMzIsICUwXG4iCi0JIgkucHJldmlvdXNcbiIKLQk6ICI9ciIgKG1hc2spCi0JOiAiaSIgKF9QQUdFX1dSSVRFXzRVKSwgImkiIChfUEFHRV9XUklURV80VikpOwotCi0JcmV0dXJuIF9fcHRlKHZhbCB8IG1hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgdmFsID0gcHRlX3ZhbChwdGUpLCB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiXG42NjE6CWFuZG4JCSUwLCAlMywgJTBcbiIKLQkiCW5vcFxuIgotCSJcbjY2MjoJbm9wXG4iCi0JIglub3BcbiIKLQkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JIgkud29yZAkJNjYxYlxuIgotCSIJc2V0aGkJCSUldWhpKCU0KSwgJTFcbiIKLQkiCXNsbHgJCSUxLCAzMiwgJTFcbiIKLQkiCS53b3JkCQk2NjJiXG4iCi0JIglvcgkJJTEsICUlbG8oJTQpLCAlMVxuIgotCSIJYW5kbgkJJTAsICUxLCAlMFxuIgotCSIJLnByZXZpb3VzXG4iCi0JOiAiPXIiICh2YWwpLCAiPXIiICh0bXApCi0JOiAiMCIgKHZhbCksICJpIiAoX1BBR0VfV1JJVEVfNFUgfCBfUEFHRV9XXzRVKSwKLQkgICJpIiAoX1BBR0VfV1JJVEVfNFYgfCBfUEFHRV9XXzRWKSk7Ci0KLQlyZXR1cm4gX19wdGUodmFsKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJcbjY2MToJbW92CQklMSwgJTBcbiIKLQkiCW5vcFxuIgotCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKLQkiCS53b3JkCQk2NjFiXG4iCi0JIglzZXRoaQkJJSV1aGkoJTIpLCAlMFxuIgotCSIJc2xseAkJJTAsIDMyLCAlMFxuIgotCSIJLnByZXZpb3VzXG4iCi0JOiAiPXIiIChtYXNrKQotCTogImkiIChfUEFHRV9BQ0NFU1NFRF80VSksICJpIiAoX1BBR0VfQUNDRVNTRURfNFYpKTsKLQotCW1hc2sgfD0gX1BBR0VfUjsKLQotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+bWFzayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJcbjY2MToJbW92CQklMSwgJTBcbiIKLQkiCW5vcFxuIgotCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKLQkiCS53b3JkCQk2NjFiXG4iCi0JIglzZXRoaQkJJSV1aGkoJTIpLCAlMFxuIgotCSIJc2xseAkJJTAsIDMyLCAlMFxuIgotCSIJLnByZXZpb3VzXG4iCi0JOiAiPXIiIChtYXNrKQotCTogImkiIChfUEFHRV9BQ0NFU1NFRF80VSksICJpIiAoX1BBR0VfQUNDRVNTRURfNFYpKTsKLQotCW1hc2sgfD0gX1BBR0VfUjsKLQotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBtYXNrKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtzcGVjaWFsKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3lvdW5nKHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiXG42NjE6CW1vdgkJJTEsICUwXG4iCi0JIglub3BcbiIKLQkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JIgkud29yZAkJNjYxYlxuIgotCSIJc2V0aGkJCSUldWhpKCUyKSwgJTBcbiIKLQkiCXNsbHgJCSUwLCAzMiwgJTBcbiIKLQkiCS5wcmV2aW91c1xuIgotCTogIj1yIiAobWFzaykKLQk6ICJpIiAoX1BBR0VfQUNDRVNTRURfNFUpLCAiaSIgKF9QQUdFX0FDQ0VTU0VEXzRWKSk7Ci0KLQlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIG1hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX2RpcnR5KHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiXG42NjE6CW1vdgkJJTEsICUwXG4iCi0JIglub3BcbiIKLQkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JIgkud29yZAkJNjYxYlxuIgotCSIJc2V0aGkJCSUldWhpKCUyKSwgJTBcbiIKLQkiCXNsbHgJCSUwLCAzMiwgJTBcbiIKLQkiCS5wcmV2aW91c1xuIgotCTogIj1yIiAobWFzaykKLQk6ICJpIiAoX1BBR0VfTU9ESUZJRURfNFUpLCAiaSIgKF9QQUdFX01PRElGSUVEXzRWKSk7Ci0KLQlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIG1hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3dyaXRlKHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiXG42NjE6CW1vdgkJJTEsICUwXG4iCi0JIglub3BcbiIKLQkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JIgkud29yZAkJNjYxYlxuIgotCSIJc2V0aGkJCSUldWhpKCUyKSwgJTBcbiIKLQkiCXNsbHgJCSUwLCAzMiwgJTBcbiIKLQkiCS5wcmV2aW91c1xuIgotCTogIj1yIiAobWFzaykKLQk6ICJpIiAoX1BBR0VfV1JJVEVfNFUpLCAiaSIgKF9QQUdFX1dSSVRFXzRWKSk7Ci0KLQlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIG1hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX2V4ZWMocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJcbjY2MToJc2V0aGkJCSUlaGkoJTEpLCAlMFxuIgotCSIJLnNlY3Rpb24JLnN1bjR2XzFpbnNuX3BhdGNoLCBcImF4XCJcbiIKLQkiCS53b3JkCQk2NjFiXG4iCi0JIgltb3YJCSUyLCAlMFxuIgotCSIJLnByZXZpb3VzXG4iCi0JOiAiPXIiIChtYXNrKQotCTogImkiIChfUEFHRV9FWEVDXzRVKSwgImkiIChfUEFHRV9FWEVDXzRWKSk7Ci0KLQlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIG1hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX2ZpbGUocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgdmFsID0gcHRlX3ZhbChwdGUpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIlxuNjYxOglhbmQJCSUwLCAlMiwgJTBcbiIKLQkiCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JIgkud29yZAkJNjYxYlxuIgotCSIJYW5kCQklMCwgJTMsICUwXG4iCi0JIgkucHJldmlvdXNcbiIKLQk6ICI9ciIgKHZhbCkKLQk6ICIwIiAodmFsKSwgImkiIChfUEFHRV9GSUxFXzRVKSwgImkiIChfUEFHRV9GSUxFXzRWKSk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3ByZXNlbnQocHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgdmFsID0gcHRlX3ZhbChwdGUpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIlxuNjYxOglhbmQJCSUwLCAlMiwgJTBcbiIKLQkiCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JIgkud29yZAkJNjYxYlxuIgotCSIJYW5kCQklMCwgJTMsICUwXG4iCi0JIgkucHJldmlvdXNcbiIKLQk6ICI9ciIgKHZhbCkKLQk6ICIwIiAodmFsKSwgImkiIChfUEFHRV9QUkVTRU5UXzRVKSwgImkiIChfUEFHRV9QUkVTRU5UXzRWKSk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgcG1kX3NldChwbWRwLCBwdGVwKQlcCi0JKHBtZF92YWwoKihwbWRwKSkgPSAoX19wYSgodW5zaWduZWQgbG9uZykgKHB0ZXApKSA+PiAxMVVMKSkKLSNkZWZpbmUgcHVkX3NldChwdWRwLCBwbWRwKQlcCi0JKHB1ZF92YWwoKihwdWRwKSkgPSAoX19wYSgodW5zaWduZWQgbG9uZykgKHBtZHApKSA+PiAxMVVMKSkKLSNkZWZpbmUgX19wbWRfcGFnZShwbWQpCQlcCi0JKCh1bnNpZ25lZCBsb25nKSBfX3ZhKCgoKHVuc2lnbmVkIGxvbmcpcG1kX3ZhbChwbWQpKTw8MTFVTCkpKQotI2RlZmluZSBwbWRfcGFnZShwbWQpIAkJCXZpcnRfdG9fcGFnZSgodm9pZCAqKV9fcG1kX3BhZ2UocG1kKSkKLSNkZWZpbmUgcHVkX3BhZ2VfdmFkZHIocHVkKQkJXAotCSgodW5zaWduZWQgbG9uZykgX192YSgoKCh1bnNpZ25lZCBsb25nKXB1ZF92YWwocHVkKSk8PDExVUwpKSkKLSNkZWZpbmUgcHVkX3BhZ2UocHVkKSAJCQl2aXJ0X3RvX3BhZ2UoKHZvaWQgKilwdWRfcGFnZV92YWRkcihwdWQpKQotI2RlZmluZSBwbWRfbm9uZShwbWQpCQkJKCFwbWRfdmFsKHBtZCkpCi0jZGVmaW5lIHBtZF9iYWQocG1kKQkJCSgwKQotI2RlZmluZSBwbWRfcHJlc2VudChwbWQpCQkocG1kX3ZhbChwbWQpICE9IDBVKQotI2RlZmluZSBwbWRfY2xlYXIocG1kcCkJCQkocG1kX3ZhbCgqKHBtZHApKSA9IDBVKQotI2RlZmluZSBwdWRfbm9uZShwdWQpCQkJKCFwdWRfdmFsKHB1ZCkpCi0jZGVmaW5lIHB1ZF9iYWQocHVkKQkJCSgwKQotI2RlZmluZSBwdWRfcHJlc2VudChwdWQpCQkocHVkX3ZhbChwdWQpICE9IDBVKQotI2RlZmluZSBwdWRfY2xlYXIocHVkcCkJCQkocHVkX3ZhbCgqKHB1ZHApKSA9IDBVKQotCi0vKiBTYW1lIGluIGJvdGggU1VONFYgYW5kIFNVTjRVLiAgKi8KLSNkZWZpbmUgcHRlX25vbmUocHRlKSAJCQkoIXB0ZV92YWwocHRlKSkKLQotLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5LiAqLwotI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykJKCgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpICYgKFBUUlNfUEVSX1BHRCAtIDEpKQotI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKQkoKG1tKS0+cGdkICsgcGdkX2luZGV4KGFkZHJlc3MpKQotCi0vKiB0byBmaW5kIGFuIGVudHJ5IGluIGEga2VybmVsIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCi0jZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQotCi0vKiBGaW5kIGFuIGVudHJ5IGluIHRoZSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCi0jZGVmaW5lIHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcykJXAotCSgocG1kX3QgKikgcHVkX3BhZ2VfdmFkZHIoKihwdWRwKSkgKyBcCi0JICgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1ELTEpKSkKLQotLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCi0jZGVmaW5lIHB0ZV9pbmRleChkaXIsIGFkZHJlc3MpCVwKLQkoKHB0ZV90ICopIF9fcG1kX3BhZ2UoKihkaXIpKSArIFwKLQkgKChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKSkKLSNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwJCXB0ZV9pbmRleAotI2RlZmluZSBwdGVfb2Zmc2V0X21hcAkJCXB0ZV9pbmRleAotI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQJCXB0ZV9pbmRleAotI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCQlkbyB7IH0gd2hpbGUgKDApCi0KLS8qIEFjdHVhbCBwYWdlIHRhYmxlIFBURSB1cGRhdGVzLiAgKi8KLWV4dGVybiB2b2lkIHRsYl9iYXRjaF9hZGQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBvcmlnKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlwdGVfdCBvcmlnID0gKnB0ZXA7Ci0KLQkqcHRlcCA9IHB0ZTsKLQotCS8qIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGxldCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKCkKLQkgKiBoYW5kbGUgaW5pdF9tbSB0bGIgZmx1c2hlcy4KLQkgKgotCSAqIFNVTjRWIE5PVEU6IF9QQUdFX1ZBTElEIGlzIHRoZSBzYW1lIHZhbHVlIGluIGJvdGggdGhlIFNVTjRVCi0JICogICAgICAgICAgICAgYW5kIFNVTjRWIHB0ZSBsYXlvdXQsIHNvIHRoaXMgaW5saW5lIHRlc3QgaXMgZmluZS4KLQkgKi8KLQlpZiAobGlrZWx5KG1tICE9ICZpbml0X21tKSAmJiAocHRlX3ZhbChvcmlnKSAmIF9QQUdFX1ZBTElEKSkKLQkJdGxiX2JhdGNoX2FkZChtbSwgYWRkciwgcHRlcCwgb3JpZyk7Ci19Ci0KLSNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcCkJCVwKLQlzZXRfcHRlX2F0KChtbSksIChhZGRyKSwgKHB0ZXApLCBfX3B0ZSgwVUwpKQotCi0jaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFCi0jZGVmaW5lIF9fSEFWRV9BUkNIX01PVkVfUFRFCi0jZGVmaW5lIG1vdmVfcHRlKHB0ZSwgcHJvdCwgb2xkX2FkZHIsIG5ld19hZGRyKQkJCQlcCi0oewkJCQkJCQkJCVwKLSAJcHRlX3QgbmV3cHRlID0gKHB0ZSk7CQkJCQkJXAotCWlmICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yICYmIHB0ZV9wcmVzZW50KHB0ZSkpIHsJCVwKLQkJdW5zaWduZWQgbG9uZyB0aGlzX3BmbiA9IHB0ZV9wZm4ocHRlKTsJCQlcCi0JCQkJCQkJCQlcCi0JCWlmIChwZm5fdmFsaWQodGhpc19wZm4pICYmCQkJCVwKLQkJICAgICgoKG9sZF9hZGRyKSBeIChuZXdfYWRkcikpICYgKDEgPDwgMTMpKSkJCVwKLQkJCWZsdXNoX2RjYWNoZV9wYWdlX2FsbChjdXJyZW50LT5tbSwJCVwKLQkJCQkJICAgICAgcGZuX3RvX3BhZ2UodGhpc19wZm4pKTsJXAotCX0JCQkJCQkJCVwKLQluZXdwdGU7CQkJCQkJCQlcCi19KQotI2VuZGlmCi0KLWV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsyMDQ4XTsKLWV4dGVybiBwbWRfdCBzd2FwcGVyX2xvd19wbWRfZGlyWzIwNDhdOwotCi1leHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGZpbmRfZWNhY2hlX2ZsdXNoX3NwYW4odW5zaWduZWQgbG9uZyBzaXplKTsKLQotLyogVGhlc2UgZG8gbm90aGluZyB3aXRoIHRoZSB3YXkgSSBoYXZlIHRoaW5ncyBzZXR1cC4gKi8KLSNkZWZpbmUgbW11X2xvY2thcmVhKHZhZGRyLCBsZW4pCQkodmFkZHIpCi0jZGVmaW5lIG1tdV91bmxvY2thcmVhKHZhZGRyLCBsZW4pCQlkbyB7IH0gd2hpbGUoMCkKLQotc3RydWN0IHZtX2FyZWFfc3RydWN0OwotZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOwotCi0vKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCi0jZGVmaW5lIF9fc3dwX3R5cGUoZW50cnkpCSgoKGVudHJ5KS52YWwgPj4gUEFHRV9TSElGVCkgJiAweGZmVUwpCi0jZGVmaW5lIF9fc3dwX29mZnNldChlbnRyeSkJKChlbnRyeSkudmFsID4+IChQQUdFX1NISUZUICsgOFVMKSkKLSNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQlcCi0JKCAoc3dwX2VudHJ5X3QpIFwKLQkgIHsgXAotCQkoKChsb25nKSh0eXBlKSA8PCBQQUdFX1NISUZUKSB8IFwKLSAgICAgICAgICAgICAgICAgKChsb25nKShvZmZzZXQpIDw8IChQQUdFX1NISUZUICsgOFVMKSkpIFwKLQkgIH0gKQotI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKLSNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKLQotLyogRmlsZSBvZmZzZXQgaW4gUFRFIHN1cHBvcnQuICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBwdGVfZmlsZShwdGVfdCk7Ci0jZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgPj4gUEFHRV9TSElGVCkKLWV4dGVybiBwdGVfdCBwZ29mZl90b19wdGUodW5zaWduZWQgbG9uZyk7Ci0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCSg2NFVMIC0gUEFHRV9TSElGVCAtIDFVTCkKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnNwYXJjNjRfdmFsaWRfYWRkcl9iaXRtYXA7Ci0KLS8qIE5lZWRzIHRvIGJlIGRlZmluZWQgaGVyZSBhbmQgbm90IGluIGxpbnV4L21tLmgsIGFzIGl0IGlzIGFyY2ggZGVwZW5kZW50ICovCi0jZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQlcCi0JKHRlc3RfYml0KF9fcGEoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKT4+MjIsIHNwYXJjNjRfdmFsaWRfYWRkcl9iaXRtYXApKQotCi1leHRlcm4gaW50IHBhZ2VfaW5fcGh5c19hdmFpbCh1bnNpZ25lZCBsb25nIHBhZGRyKTsKLQotZXh0ZXJuIGludCBpb19yZW1hcF9wZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZnJvbSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwotCi0vKgotICogRm9yIHNwYXJjMzImNjQsIHRoZSBwZm4gaW4gaW9fcmVtYXBfcGZuX3JhbmdlKCkgY2FycmllcyA8aW9zcGFjZT4gaW4KLSAqIGl0cyBoaWdoIDQgYml0cy4gIFRoZXNlIG1hY3Jvcy9mdW5jdGlvbnMgcHV0IGl0IHRoZXJlIG9yIGdldCBpdCBmcm9tIHRoZXJlLgotICovCi0jZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4gfCAoc3BhY2UgPDwgKEJJVFNfUEVSX0xPTkcgLSA0KSkpCi0jZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCShwZm4gPj4gKEJJVFNfUEVSX0xPTkcgLSA0KSkKLSNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbiAmIDB4MGZmZmZmZmZmZmZmZmZmZlVMKQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgotCi0vKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gY29wZSB3aXRoIFZBIGhvbGVzIGFuZAotICogU0hNIGFyZWEgY2FjaGUgYWxpYXNpbmcgZm9yIHVzZXJsYW5kLgotICovCi0jZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCi0jZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBX1RPUERPV04KLQotLyogV2UgcHJvdmlkZSBhIHNwZWNpYWwgZ2V0X3VubWFwcGVkX2FyZWEgZm9yIGZyYW1lYnVmZmVyIG1tYXBzIHRvIHRyeSBhbmQgdXNlCi0gKiB0aGUgbGFyZ2VzdCBhbGlnbm1lbnQgcG9zc2libGUgc3VjaCB0aGF0IGxhcmdldCBQVEVzIGNhbiBiZSB1c2VkLgotICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfZmJfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZywKLQkJCQkJICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcpOwotI2RlZmluZSBIQVZFX0FSQ0hfRkJfVU5NQVBQRURfQVJFQQotCi1leHRlcm4gdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBzdW40dl9yZWdpc3Rlcl9mYXVsdF9zdGF0dXModm9pZCk7Ci1leHRlcm4gdm9pZCBzdW40dl9rdHNiX3JlZ2lzdGVyKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IGNoZWV0YWhfZWNhY2hlX2ZsdXNoX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBzdW40dl9wYXRjaF90bGJfaGFuZGxlcnModm9pZCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGNtZGxpbmVfbWVtb3J5X3NpemU7Ci0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfUEdUQUJMRV9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BpbC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9waWwuaAppbmRleCBlYWFjODQyLi5kODA1ZjMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BpbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGlsLmgKQEAgLTEsMjEgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfUElMX0gKLSNkZWZpbmUgX1NQQVJDNjRfUElMX0gKLQotLyogVG8gYXZvaWQgc29tZSBsb2NraW5nIHByb2JsZW1zLCB3ZSBoYXJkIGFsbG9jYXRlIGNlcnRhaW4gUElMcwotICogZm9yIFNNUCBjcm9zcyBjYWxsIG1lc3NhZ2VzIHRoYXQgbXVzdCBkbyBhIGV0cmFwL3J0cmFwLgotICoKLSAqIEEgbG9jYWxfaXJxX2Rpc2FibGUoKSBkb2VzIG5vdCBibG9jayB0aGUgY3Jvc3MgY2FsbCBkZWxpdmVyeSwgc28KLSAqIHdoZW4gU01QIGxvY2tpbmcgaXMgYW4gaXNzdWUgd2UgcmVzY2hlZHVsZSB0aGUgZXZlbnQgaW50byBhIFBJTAotICogaW50ZXJydXB0IHdoaWNoIGlzIGJsb2NrZWQgYnkgbG9jYWxfaXJxX2Rpc2FibGUoKS4KLSAqCi0gKiBJbiBmYWN0IGFueSBYQ0FMTCB3aGljaCBoYXMgdG8gZXRyYXAvcnRyYXAgaGFzIGEgcHJvYmxlbSBiZWNhdXNlCi0gKiBpdCBpcyBkaWZmaWN1bHQgdG8gcHJldmVudCBydHJhcCBmcm9tIHJ1bm5pbmcgQkgncywgYW5kIHRoYXQgd291bGQKLSAqIG5lZWQgdG8gYmUgZG9uZSBpZiB0aGUgWENBTEwgYXJyaXZlZCB3aGlsZSAlcGlsPT0xNS4KLSAqLwotI2RlZmluZSBQSUxfU01QX0NBTExfRlVOQwkxCi0jZGVmaW5lIFBJTF9TTVBfUkVDRUlWRV9TSUdOQUwJMgotI2RlZmluZSBQSUxfU01QX0NBUFRVUkUJCTMKLSNkZWZpbmUgUElMX1NNUF9DVFhfTkVXX1ZFUlNJT04JNAotI2RlZmluZSBQSUxfREVWSUNFX0lSUQkJNQotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9QSUxfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvcGlsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BvbGwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9sbC5oCmluZGV4IGViZWViMzguLjhlMmYzMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9sbC5oCkBAIC0xLDEyICsxIEBACi0jaWZuZGVmIF9fU1BBUkM2NF9QT0xMX0gKLSNkZWZpbmUgX19TUEFSQzY0X1BPTExfSAotCi0jZGVmaW5lIFBPTExXUk5PUk0JUE9MTE9VVAotI2RlZmluZSBQT0xMV1JCQU5ECTI1NgotI2RlZmluZSBQT0xMTVNHCQk1MTIKLSNkZWZpbmUgUE9MTFJFTU9WRQkxMDI0Ci0jZGVmaW5lIFBPTExSREhVUCAgICAgICAyMDQ4Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wb2xsLmg+Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1zcGFyYy9wb2xsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Bvc2l4X3R5cGVzLmgKaW5kZXggNGVhYWEwMS4uOGNlZTk5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wb3NpeF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9zaXhfdHlwZXMuaApAQCAtMSwxMjIgKzEgQEAKLSNpZm5kZWYgX19BUkNIX1NQQVJDNjRfUE9TSVhfVFlQRVNfSAotI2RlZmluZSBfX0FSQ0hfU1BBUkM2NF9QT1NJWF9UWVBFU19ICi0KLS8qCi0gKiBUaGlzIGZpbGUgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSwgc28geW91IG5lZWQgdG8KLSAqIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgbmFtZXNwYWNlIHBvbGx1dGlvbiBldGMuICBBbHNvLCB3ZSBjYW5ub3QKLSAqIGFzc3VtZSBHQ0MgaXMgYmVpbmcgdXNlZC4KLSAqLwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAgX19rZXJuZWxfc2l6ZV90OwotdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX3NzaXplX3Q7Ci10eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfcHRyZGlmZl90OwotdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX3RpbWVfdDsKLXR5cGVkZWYgbG9uZyAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF9jbG9ja190OwotdHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX3BpZF90OwotdHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX2lwY19waWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICBfX2tlcm5lbF91aWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICBfX2tlcm5lbF9naWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICBfX2tlcm5lbF9pbm9fdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICBfX2tlcm5lbF9tb2RlX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgX19rZXJuZWxfdW1vZGVfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICBfX2tlcm5lbF9ubGlua190OwotdHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX2RhZGRyX3Q7Ci10eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgICAgX19rZXJuZWxfb2ZmX3Q7Ci10eXBlZGVmIGNoYXIgKiAgICAgICAgICAgICAgICAgX19rZXJuZWxfY2FkZHJfdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgICAgIF9fa2VybmVsX3VpZDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgICAgICBfX2tlcm5lbF9naWQxNl90OwotdHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgIF9fa2VybmVsX2Nsb2NraWRfdDsKLXR5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICBfX2tlcm5lbF90aW1lcl90OwotCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IAkgICAgICAgX19rZXJuZWxfb2xkX3VpZF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgIF9fa2VybmVsX29sZF9naWRfdDsKLXR5cGVkZWYgX19rZXJuZWxfdWlkX3QJICAgICAgIF9fa2VybmVsX3VpZDMyX3Q7Ci10eXBlZGVmIF9fa2VybmVsX2dpZF90CSAgICAgICBfX2tlcm5lbF9naWQzMl90OwotCi10eXBlZGVmIHVuc2lnbmVkIGludAkgICAgICAgX19rZXJuZWxfb2xkX2Rldl90OwotCi0vKiBOb3RlIHRoaXMgcGllY2Ugb2YgYXN5bW1ldHJ5IGZyb20gdGhlIHY5IEFCSS4gICovCi10eXBlZGVmIGludAkJICAgICAgIF9fa2VybmVsX3N1c2Vjb25kc190OwotCi0jaWZkZWYgX19HTlVDX18KLXR5cGVkZWYgbG9uZyBsb25nICAgICAgICAgICAgICBfX2tlcm5lbF9sb2ZmX3Q7Ci0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgewotCWludAl2YWxbMl07Ci19IF9fa2VybmVsX2ZzaWRfdDsKLQotI2lmIGRlZmluZWQoX19LRVJORUxfXykKLQotI3VuZGVmIF9fRkRfU0VUCi1zdGF0aWMgaW5saW5lIHZvaWQgX19GRF9TRVQodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCi17Ci0JdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7Ci0JdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7Ci0JZmRzZXRwLT5mZHNfYml0c1tfdG1wXSB8PSAoMVVMPDxfcmVtKTsKLX0KLQotI3VuZGVmIF9fRkRfQ0xSCi1zdGF0aWMgaW5saW5lIHZvaWQgX19GRF9DTFIodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCi17Ci0JdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7Ci0JdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7Ci0JZmRzZXRwLT5mZHNfYml0c1tfdG1wXSAmPSB+KDFVTDw8X3JlbSk7Ci19Ci0KLSN1bmRlZiBfX0ZEX0lTU0VUCi1zdGF0aWMgaW5saW5lIGludCBfX0ZEX0lTU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fY29uc3RfXyBfX2tlcm5lbF9mZF9zZXQgKnApCi17IAotCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOwotCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOwotCXJldHVybiAocC0+ZmRzX2JpdHNbX3RtcF0gJiAoMVVMPDxfcmVtKSkgIT0gMDsKLX0KLQotLyoKLSAqIFRoaXMgd2lsbCB1bnJvbGwgdGhlIGxvb3AgZm9yIHRoZSBub3JtYWwgY29uc3RhbnQgY2FzZXMgKDggb3IgMzIgbG9uZ3MsCi0gKiBmb3IgMjU2IGFuZCAxMDI0LWJpdCBmZF9zZXRzIHJlc3BlY3RpdmVseSkKLSAqLwotI3VuZGVmIF9fRkRfWkVSTwotc3RhdGljIGlubGluZSB2b2lkIF9fRkRfWkVSTyhfX2tlcm5lbF9mZF9zZXQgKnApCi17Ci0JdW5zaWduZWQgbG9uZyAqdG1wID0gcC0+ZmRzX2JpdHM7Ci0JaW50IGk7Ci0KLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoX19GRFNFVF9MT05HUykpIHsKLQkJc3dpdGNoIChfX0ZEU0VUX0xPTkdTKSB7Ci0JCQljYXNlIDMyOgotCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKLQkJCSAgdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7Ci0JCQkgIHRtcFsgOF0gPSAwOyB0bXBbIDldID0gMDsgdG1wWzEwXSA9IDA7IHRtcFsxMV0gPSAwOwotCQkJICB0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKLQkJCSAgdG1wWzE2XSA9IDA7IHRtcFsxN10gPSAwOyB0bXBbMThdID0gMDsgdG1wWzE5XSA9IDA7Ci0JCQkgIHRtcFsyMF0gPSAwOyB0bXBbMjFdID0gMDsgdG1wWzIyXSA9IDA7IHRtcFsyM10gPSAwOwotCQkJICB0bXBbMjRdID0gMDsgdG1wWzI1XSA9IDA7IHRtcFsyNl0gPSAwOyB0bXBbMjddID0gMDsKLQkJCSAgdG1wWzI4XSA9IDA7IHRtcFsyOV0gPSAwOyB0bXBbMzBdID0gMDsgdG1wWzMxXSA9IDA7Ci0JCQkgIHJldHVybjsKLQkJCWNhc2UgMTY6Ci0JCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOwotCQkJICB0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKLQkJCSAgdG1wWyA4XSA9IDA7IHRtcFsgOV0gPSAwOyB0bXBbMTBdID0gMDsgdG1wWzExXSA9IDA7Ci0JCQkgIHRtcFsxMl0gPSAwOyB0bXBbMTNdID0gMDsgdG1wWzE0XSA9IDA7IHRtcFsxNV0gPSAwOwotCQkJICByZXR1cm47Ci0JCQljYXNlIDg6Ci0JCQkgIHRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOwotCQkJICB0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKLQkJCSAgcmV0dXJuOwotCQkJY2FzZSA0OgotCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKLQkJCSAgcmV0dXJuOwotCQl9Ci0JfQotCWkgPSBfX0ZEU0VUX0xPTkdTOwotCXdoaWxlIChpKSB7Ci0JCWktLTsKLQkJKnRtcCA9IDA7Ci0JCXRtcCsrOwotCX0KLX0KLQotI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgKi8KLQotI2VuZGlmIC8qICEoX19BUkNIX1NQQVJDNjRfUE9TSVhfVFlQRVNfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvcG9zaXhfdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oCmluZGV4IDI2YjRlNTIuLjIxZGU2Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaApAQCAtMSwyMzcgKzEgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaWZuZGVmIF9fQVNNX1NQQVJDNjRfUFJPQ0VTU09SX0gKLSNkZWZpbmUgX19BU01fU1BBUkM2NF9QUk9DRVNTT1JfSAotCi0vKgotICogU3BhcmM2NCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAotICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgotICovCi0jZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgdm9pZCAqcGM7IF9fYXNtX18oInJkICUlcGMsICUwIiA6ICI9ciIgKHBjKSk7IHBjOyB9KQotCi0jaW5jbHVkZSA8YXNtL2FzaS5oPgotI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotLyogVGhlIHNwYXJjIGhhcyBubyBwcm9ibGVtcyB3aXRoIHdyaXRlIHByb3RlY3Rpb24gKi8KLSNkZWZpbmUgd3Bfd29ya3Nfb2sgMQotI2RlZmluZSB3cF93b3Jrc19va19faXNfYV9tYWNybyAvKiBmb3IgdmVyc2lvbnMgaW4ga3N5bXMuYyAqLwotCi0vKgotICogVXNlciBsaXZlcyBpbiBoaXMgdmVyeSBvd24gY29udGV4dCwgYW5kIGNhbm5vdCByZWZlcmVuY2UgdXMuIE5vdGUKLSAqIHRoYXQgVEFTS19TSVpFIGlzIGEgbWlzbm9tZXIsIGl0IHJlYWxseSBnaXZlcyBtYXhpbXVtIHVzZXIgdmlydHVhbCAKLSAqIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIHdpbGwgYWxsb2NhdGUgb3V0LgotICoKLSAqIFhYWCBObyBsb25nZXIgdXNpbmcgdmlydHVhbCBwYWdlIHRhYmxlcywga2lsbCB0aGlzIHVwcGVyIGxpbWl0Li4uCi0gKi8KLSNkZWZpbmUgVkFfQklUUwkJNDQKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIFZQVEVfU0laRQkoMVVMIDw8IChWQV9CSVRTIC0gUEFHRV9TSElGVCArIDMpKQotI2Vsc2UKLSNkZWZpbmUgVlBURV9TSVpFCSgxIDw8IChWQV9CSVRTIC0gUEFHRV9TSElGVCArIDMpKQotI2VuZGlmCi0KLSNkZWZpbmUgVEFTS19TSVpFCSgodW5zaWduZWQgbG9uZyktVlBURV9TSVpFKQotI2RlZmluZSBUQVNLX1NJWkVfT0YodHNrKSBcCi0JKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzayxUSUZfMzJCSVQpID8gXAotCSAoMVVMIDw8IDMyVUwpIDogVEFTS19TSVpFKQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2RlZmluZSBTVEFDS19UT1AzMgkoKDFVTCA8PCAzMlVMKSAtIFBBR0VfU0laRSkKLSNkZWZpbmUgU1RBQ0tfVE9QNjQJKDB4MDAwMDA4MDAwMDAwMDAwMFVMIC0gKDFVTCA8PCAzMlVMKSkKLQotI2RlZmluZSBTVEFDS19UT1AJKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/IFwKLQkJCSBTVEFDS19UT1AzMiA6IFNUQUNLX1RPUDY0KQotCi0jZGVmaW5lIFNUQUNLX1RPUF9NQVgJU1RBQ0tfVE9QNjQKLQotI2VuZGlmCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIHNlZzsKLX0gbW1fc2VnbWVudF90OwotCi0vKiBUaGUgU3BhcmMgcHJvY2Vzc29yIHNwZWNpZmljIHRocmVhZCBzdHJ1Y3QuICovCi0vKiBYWFggVGhpcyBzaG91bGQgZGllLCBldmVyeXRoaW5nIGNhbiBnbyBpbnRvIHRocmVhZF9pbmZvIG5vdy4gKi8KLXN0cnVjdCB0aHJlYWRfc3RydWN0IHsKLSNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKLQkvKiBIb3cgbWFueSBzcGlubG9ja3MgaGVsZCBieSB0aGlzIHRocmVhZC4KLQkgKiBVc2VkIHdpdGggc3BpbiBsb2NrIGRlYnVnZ2luZyB0byBjYXRjaCB0YXNrcwotCSAqIHNsZWVwaW5nIGlsbGVnYWxseSB3aXRoIGxvY2tzIGhlbGQuCi0JICovCi0JaW50IHNtcF9sb2NrX2NvdW50OwotCXVuc2lnbmVkIGludCBzbXBfbG9ja19wYzsKLSNlbHNlCi0JaW50IGR1bW15OyAvKiBmJ2luIGdjYyBidWcuLi4gKi8KLSNlbmRpZgotfTsKLQotI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotCi0jaWZuZGVmIENPTkZJR19ERUJVR19TUElOTE9DSwotI2RlZmluZSBJTklUX1RIUkVBRCAgewkJCVwKLQkwLAkJCQlcCi19Ci0jZWxzZSAvKiBDT05GSUdfREVCVUdfU1BJTkxPQ0sgKi8KLSNkZWZpbmUgSU5JVF9USFJFQUQgIHsJCQkJCVwKLS8qIHNtcF9sb2NrX2NvdW50LCBzbXBfbG9ja19wYywgKi8JCQlcCi0gICAwLAkJICAgMCwJCQkJCVwKLX0KLSNlbmRpZiAvKiAhKENPTkZJR19ERUJVR19TUElOTE9DSykgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qIFJldHVybiBzYXZlZCBQQyBvZiBhIGJsb2NrZWQgdGhyZWFkLiAqLwotc3RydWN0IHRhc2tfc3RydWN0OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLQotLyogT24gVW5pcHJvY2Vzc29yLCBldmVuIGluIFJNTyBwcm9jZXNzZXMgc2VlIFRTTyBzZW1hbnRpY3MgKi8KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIFRTVEFURV9JTklUSUFMX01NCVRTVEFURV9UU08KLSNlbHNlCi0jZGVmaW5lIFRTVEFURV9JTklUSUFMX01NCVRTVEFURV9STU8KLSNlbmRpZgotCi0vKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXdseSBleGVjdXRlZCB0aHJlYWQuICovCi0jZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBwYywgc3ApIFwKLWRvIHsgXAotCXVuc2lnbmVkIGxvbmcgX19hc2kgPSBBU0lfUE5GOyBcCi0JcmVncy0+dHN0YXRlID0gKHJlZ3MtPnRzdGF0ZSAmIChUU1RBVEVfQ1dQKSkgfCAoVFNUQVRFX0lOSVRJQUxfTU18VFNUQVRFX0lFKSB8IChfX2FzaSA8PCAyNFVMKTsgXAotCXJlZ3MtPnRwYyA9ICgocGMgJiAofjMpKSAtIDQpOyBcCi0JcmVncy0+dG5wYyA9IHJlZ3MtPnRwYyArIDQ7IFwKLQlyZWdzLT55ID0gMDsgXAotCXNldF90aHJlYWRfd3N0YXRlKDEgPDwgMyk7IFwKLQlpZiAoY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMpIHsgXAotCQlpZiAoKihjdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcykgPCAyKSBcCi0JCQlrZnJlZShjdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcyk7IFwKLQkJZWxzZSBcCi0JCQkoKihjdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwcykpLS07IFwKLQkJY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMgPSBOVUxMOyBcCi0JfSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MDBdXG5cdCIgXAotCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgwOF1cblx0IiBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDEwXVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MThdXG5cdCIgXAotCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgyMF1cblx0IiBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDI4XVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MzBdXG5cdCIgXAotCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgzOF1cblx0IiBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDQwXVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NDhdXG5cdCIgXAotCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg1MF1cblx0IiBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDU4XVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NjBdXG5cdCIgXAotCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg2OF1cblx0IiBcCi0JInN0eAkJJTEsICAgWyUwICsgJTIgKyAweDcwXVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NzhdXG5cdCIgXAotCSJ3cnByCQklJWcwLCAoMSA8PCAzKSwgJSV3c3RhdGVcblx0IiBcCi0JOiBcCi0JOiAiciIgKHJlZ3MpLCAiciIgKHNwIC0gc2l6ZW9mKHN0cnVjdCByZWdfd2luZG93KSAtIFNUQUNLX0JJQVMpLCBcCi0JICAiaSIgKChjb25zdCB1bnNpZ25lZCBsb25nKSgmKChzdHJ1Y3QgcHRfcmVncyAqKTApLT51X3JlZ3NbMF0pKSk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc3RhcnRfdGhyZWFkMzIocmVncywgcGMsIHNwKSBcCi1kbyB7IFwKLQl1bnNpZ25lZCBsb25nIF9fYXNpID0gQVNJX1BORjsgXAotCXBjICY9IDB4MDAwMDAwMDBmZmZmZmZmZlVMOyBcCi0Jc3AgJj0gMHgwMDAwMDAwMGZmZmZmZmZmVUw7IFwKLQlyZWdzLT50c3RhdGUgPSAocmVncy0+dHN0YXRlICYgKFRTVEFURV9DV1ApKXwoVFNUQVRFX0lOSVRJQUxfTU18VFNUQVRFX0lFfFRTVEFURV9BTSkgfCAoX19hc2kgPDwgMjRVTCk7IFwKLQlyZWdzLT50cGMgPSAoKHBjICYgKH4zKSkgLSA0KTsgXAotCXJlZ3MtPnRucGMgPSByZWdzLT50cGMgKyA0OyBcCi0JcmVncy0+eSA9IDA7IFwKLQlzZXRfdGhyZWFkX3dzdGF0ZSgyIDw8IDMpOyBcCi0JaWYgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKSB7IFwKLQkJaWYgKCooY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMpIDwgMikgXAotCQkJa2ZyZWUoY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMpOyBcCi0JCWVsc2UgXAotCQkJKCooY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMpKS0tOyBcCi0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzID0gTlVMTDsgXAotCX0gXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDAwXVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MDhdXG5cdCIgXAotCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgxMF1cblx0IiBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDE4XVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MjBdXG5cdCIgXAotCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHgyOF1cblx0IiBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDMwXVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4MzhdXG5cdCIgXAotCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg0MF1cblx0IiBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDQ4XVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NTBdXG5cdCIgXAotCSJzdHgJCSUlZzAsIFslMCArICUyICsgMHg1OF1cblx0IiBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDYwXVxuXHQiIFwKLQkic3R4CQklJWcwLCBbJTAgKyAlMiArIDB4NjhdXG5cdCIgXAotCSJzdHgJCSUxLCAgIFslMCArICUyICsgMHg3MF1cblx0IiBcCi0JInN0eAkJJSVnMCwgWyUwICsgJTIgKyAweDc4XVxuXHQiIFwKLQkid3JwcgkJJSVnMCwgKDIgPDwgMyksICUld3N0YXRlXG5cdCIgXAotCTogXAotCTogInIiIChyZWdzKSwgInIiIChzcCAtIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdzMyKSksIFwKLQkgICJpIiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcpKCYoKHN0cnVjdCBwdF9yZWdzICopMCktPnVfcmVnc1swXSkpKTsgXAotfSB3aGlsZSAoMCkKLQotLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCi0jZGVmaW5lIHJlbGVhc2VfdGhyZWFkKHRzaykJCWRvIHsgfSB3aGlsZSAoMCkKLQotLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KLSNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQotCi1leHRlcm4gcGlkX3Qga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwotCi0jZGVmaW5lIHRhc2tfcHRfcmVncyh0c2spICh0YXNrX3RocmVhZF9pbmZvKHRzayktPmtyZWdzKQotI2RlZmluZSBLU1RLX0VJUCh0c2spICAodGFza19wdF9yZWdzKHRzayktPnRwYykKLSNkZWZpbmUgS1NUS19FU1AodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT51X3JlZ3NbVVJFR19GUF0pCi0KLSNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCi0KLS8qIFByZWZldGNoIHN1cHBvcnQuICBUaGlzIGlzIHR1bmVkIGZvciBVbHRyYVNQQVJDLUlJSSBhbmQgbGF0ZXIuCi0gKiBVbHRyYVNQQVJDLUkgd2lsbCB0cmVhdCB0aGVzZSBhcyBub3BzLCBhbmQgVWx0cmFTUEFSQy1JSSBoYXMKLSAqIGEgc2hhbGxvd2VyIHByZWZldGNoIHF1ZXVlIHRoYW4gbGF0ZXIgY2hpcHMuCi0gKi8KLSNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKLSNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXCi0jZGVmaW5lIEFSQ0hfSEFTX1NQSU5MT0NLX1BSRUZFVENICi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICp4KQotewotCS8qIFdlIGRvIG5vdCB1c2UgdGhlIHJlYWQgcHJlZmV0Y2ggbW5lbW9uaWMgYmVjYXVzZSB0aGF0Ci0JICogcHJlZmV0Y2hlcyBpbnRvIHRoZSBwcmVmZXRjaC1jYWNoZSB3aGljaCBvbmx5IGlzIGFjY2Vzc2libGUKLQkgKiBieSBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIGluIFVsdHJhU1BBUkMtSUlJIGFuZCBsYXRlci4KLQkgKiBCeSBjb250cmFzdCwgIiNvbmVfd3JpdGUiIHByZWZldGNoZXMgaW50byB0aGUgTDIgY2FjaGUKLQkgKiBpbiBzaGFyZWQgc3RhdGUuCi0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInByZWZldGNoIFslMF0sICNvbmVfd3JpdGUiCi0JCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAoeCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3KGNvbnN0IHZvaWQgKngpCi17Ci0JLyogVGhlIG1vc3Qgb3B0aW1hbCBwcmVmZXRjaCB0byB1c2UgZm9yIHdyaXRlcyBpcwotCSAqICIjbl93cml0ZXMiLiAgVGhpcyBicmluZ3MgdGhlIGNhY2hlbGluZSBpbnRvIHRoZQotCSAqIEwyIGNhY2hlIGluICJvd25lZCIgc3RhdGUuCi0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInByZWZldGNoIFslMF0sICNuX3dyaXRlcyIKLQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiICh4KSk7Ci19Ci0KLSNkZWZpbmUgc3Bpbl9sb2NrX3ByZWZldGNoKHgpCXByZWZldGNodyh4KQotCi0jZGVmaW5lIEhBVkVfQVJDSF9QSUNLX01NQVBfTEFZT1VUCi0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotI2VuZGlmIC8qICEoX19BU01fU1BBUkM2NF9QUk9DRVNTT1JfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BzcmNvbXBhdC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wc3Jjb21wYXQuaAppbmRleCA0NGI2MzI3Li41ODc4NDZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BzcmNvbXBhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHNyY29tcGF0LmgKQEAgLTEsNDUgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfUFNSQ09NUEFUX0gKLSNkZWZpbmUgX1NQQVJDNjRfUFNSQ09NUEFUX0gKLQotI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KLQotLyogT2xkIDMyLWJpdCBQU1IgZmllbGRzIGZvciB0aGUgY29tcGF0aWJpbGl0eSBjb252ZXJzaW9uIGNvZGUuICovCi0jZGVmaW5lIFBTUl9DV1AgICAgIDB4MDAwMDAwMWYgICAgICAgICAvKiBjdXJyZW50IHdpbmRvdyBwb2ludGVyICAgICAqLwotI2RlZmluZSBQU1JfRVQgICAgICAweDAwMDAwMDIwICAgICAgICAgLyogZW5hYmxlIHRyYXBzIGZpZWxkICAgICAgICAgKi8KLSNkZWZpbmUgUFNSX1BTICAgICAgMHgwMDAwMDA0MCAgICAgICAgIC8qIHByZXZpb3VzIHByaXZpbGVnZSBsZXZlbCAgICovCi0jZGVmaW5lIFBTUl9TICAgICAgIDB4MDAwMDAwODAgICAgICAgICAvKiBjdXJyZW50IHByaXZpbGVnZSBsZXZlbCAgICAqLwotI2RlZmluZSBQU1JfUElMICAgICAweDAwMDAwZjAwICAgICAgICAgLyogcHJvY2Vzc29yIGludGVycnVwdCBsZXZlbCAgKi8KLSNkZWZpbmUgUFNSX0VGICAgICAgMHgwMDAwMTAwMCAgICAgICAgIC8qIGVuYWJsZSBmbG9hdGluZyBwb2ludCAgICAgICovCi0jZGVmaW5lIFBTUl9FQyAgICAgIDB4MDAwMDIwMDAgICAgICAgICAvKiBlbmFibGUgY28tcHJvY2Vzc29yICAgICAgICAqLwotI2RlZmluZSBQU1JfU1lTQ0FMTCAweDAwMDA0MDAwICAgICAgICAgLyogaW5zaWRlIG9mIGEgc3lzY2FsbCAgICAgICAgKi8KLSNkZWZpbmUgUFNSX0xFICAgICAgMHgwMDAwODAwMCAgICAgICAgIC8qIFN1cGVyU3BhcmNJSSBsaXR0bGUtZW5kaWFuICovCi0jZGVmaW5lIFBTUl9JQ0MgICAgIDB4MDBmMDAwMDAgICAgICAgICAvKiBpbnRlZ2VyIGNvbmRpdGlvbiBjb2RlcyAgICAqLwotI2RlZmluZSBQU1JfQyAgICAgICAweDAwMTAwMDAwICAgICAgICAgLyogY2FycnkgYml0ICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUFNSX1YgICAgICAgMHgwMDIwMDAwMCAgICAgICAgIC8qIG92ZXJmbG93IGJpdCAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBTUl9aICAgICAgIDB4MDA0MDAwMDAgICAgICAgICAvKiB6ZXJvIGJpdCAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBQU1JfTiAgICAgICAweDAwODAwMDAwICAgICAgICAgLyogbmVnYXRpdmUgYml0ICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUFNSX1ZFUlMgICAgMHgwZjAwMDAwMCAgICAgICAgIC8qIGNwdS12ZXJzaW9uIGZpZWxkICAgICAgICAgICovCi0jZGVmaW5lIFBTUl9JTVBMICAgIDB4ZjAwMDAwMDAgICAgICAgICAvKiBjcHUtaW1wbGVtZW50YXRpb24gZmllbGQgICAqLwotCi0jZGVmaW5lIFBTUl9WOFBMVVMgIDB4ZmYwMDAwMDAgICAgICAgICAvKiBmYWtlIGltcGwvdmVyLCBtZWFuaW5nIGEgNjRiaXQgQ1BVIGlzIHByZXNlbnQgKi8KLSNkZWZpbmUgUFNSX1hDQwkgICAgMHgwMDBmMDAwMCAgICAgICAgIC8qIGlmIFBTUl9WOFBMVVMsIHRoaXMgaXMgJXhjYyAqLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0c3RhdGVfdG9fcHNyKHVuc2lnbmVkIGxvbmcgdHN0YXRlKQotewotCXJldHVybiAoKHRzdGF0ZSAmIFRTVEFURV9DV1ApCQkJfAotCQlQU1JfUwkJCQkJfAotCQkoKHRzdGF0ZSAmIFRTVEFURV9JQ0MpID4+IDEyKQkJfAotCQkoKHRzdGF0ZSAmIFRTVEFURV9YQ0MpID4+IDIwKQkJfAotCQkoKHRzdGF0ZSAmIFRTVEFURV9TWVNDQUxMKSA/IFBTUl9TWVNDQUxMIDogMCkgfAotCQlQU1JfVjhQTFVTKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBzcl90b190c3RhdGVfaWNjKHVuc2lnbmVkIGludCBwc3IpCi17Ci0JdW5zaWduZWQgbG9uZyB0c3RhdGUgPSAoKHVuc2lnbmVkIGxvbmcpKHBzciAmIFBTUl9JQ0MpKSA8PCAxMjsKLQlpZiAoKHBzciAmIChQU1JfVkVSU3xQU1JfSU1QTCkpID09IFBTUl9WOFBMVVMpCi0JCXRzdGF0ZSB8PSAoKHVuc2lnbmVkIGxvbmcpKHBzciAmIFBTUl9YQ0MpKSA8PCAyMDsKLQlyZXR1cm4gdHN0YXRlOwotfQotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9QU1JDT01QQVRfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvcHNyY29tcGF0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BzdGF0ZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wc3RhdGUuaAppbmRleCBhMjZhNTM3Li4zY2NmMGJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BzdGF0ZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHN0YXRlLmgKQEAgLTEsOTEgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfUFNUQVRFX0gKLSNkZWZpbmUgX1NQQVJDNjRfUFNUQVRFX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+Ci0KLS8qIFRoZSBWOSBQU1RBVEUgUmVnaXN0ZXIgKHdpdGggU3BpdEZpcmUgZXh0ZW5zaW9ucykuCi0gKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwgUmVzdiB8IElHIHwgTUcgfCBDTEUgfCBUTEUgfCAgTU0gIHwgUkVEIHwgUEVGIHwgQU0gfCBQUklWIHwgSUUgfCBBRyB8Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIDYzICAxMiAgMTEgICAxMCAgICA5ICAgICA4ICAgIDcgICA2ICAgNSAgICAgNCAgICAgMyAgICAgMiAgICAgMSAgICAwCi0gKi8KLSNkZWZpbmUgUFNUQVRFX0lHICAgX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkgLyogSW50ZXJydXB0IEdsb2JhbHMuCSovCi0jZGVmaW5lIFBTVEFURV9NRyAgIF9BQygweDAwMDAwMDAwMDAwMDA0MDAsVUwpIC8qIE1NVSBHbG9iYWxzLgkJKi8KLSNkZWZpbmUgUFNUQVRFX0NMRSAgX0FDKDB4MDAwMDAwMDAwMDAwMDIwMCxVTCkgLyogQ3VycmVudCBMaXR0bGUgRW5kaWFuLiovCi0jZGVmaW5lIFBTVEFURV9UTEUgIF9BQygweDAwMDAwMDAwMDAwMDAxMDAsVUwpIC8qIFRyYXAgTGl0dGxlIEVuZGlhbi4JKi8KLSNkZWZpbmUgUFNUQVRFX01NICAgX0FDKDB4MDAwMDAwMDAwMDAwMDBjMCxVTCkgLyogTWVtb3J5IE1vZGVsLgkJKi8KLSNkZWZpbmUgUFNUQVRFX1RTTyAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogTU06IFRvdGFsU3RvcmVPcmRlcgkqLwotI2RlZmluZSBQU1RBVEVfUFNPICBfQUMoMHgwMDAwMDAwMDAwMDAwMDQwLFVMKSAvKiBNTTogUGFydGlhbFN0b3JlT3JkZXIJKi8KLSNkZWZpbmUgUFNUQVRFX1JNTyAgX0FDKDB4MDAwMDAwMDAwMDAwMDA4MCxVTCkgLyogTU06IFJlbGF4ZWRNZW1vcnlPcmRlciovCi0jZGVmaW5lIFBTVEFURV9SRUQgIF9BQygweDAwMDAwMDAwMDAwMDAwMjAsVUwpIC8qIFJlc2V0IEVycm9yIERlYnVnLgkqLwotI2RlZmluZSBQU1RBVEVfUEVGICBfQUMoMHgwMDAwMDAwMDAwMDAwMDEwLFVMKSAvKiBGbG9hdGluZyBQb2ludCBFbmFibGUuKi8KLSNkZWZpbmUgUFNUQVRFX0FNICAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwOCxVTCkgLyogQWRkcmVzcyBNYXNrLgkJKi8KLSNkZWZpbmUgUFNUQVRFX1BSSVYgX0FDKDB4MDAwMDAwMDAwMDAwMDAwNCxVTCkgLyogUHJpdmlsZWdlLgkJKi8KLSNkZWZpbmUgUFNUQVRFX0lFICAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMixVTCkgLyogSW50ZXJydXB0IEVuYWJsZS4JKi8KLSNkZWZpbmUgUFNUQVRFX0FHICAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMSxVTCkgLyogQWx0ZXJuYXRlIEdsb2JhbHMuCSovCi0KLS8qIFRoZSBWOSBUU1RBVEUgUmVnaXN0ZXIgKHdpdGggU3BpdEZpcmUgYW5kIExpbnV4IGV4dGVuc2lvbnMpLgotICoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogfCAgUmVzdiB8ICBHTCAgfCAgQ0NSICB8ICBBU0kgIHwgICVwaWwgIHwgIFBTVEFURSAgfCAgUmVzdiAgfCAgQ1dQICB8Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICA2MyAgIDQzIDQyICA0MCAzOSAgIDMyIDMxICAgMjQgMjMgICAgMjAgMTkgICAgICAgOCA3ICAgICAgNSA0ICAgICAwCi0gKi8KLSNkZWZpbmUgVFNUQVRFX0dMCV9BQygweDAwMDAwNzAwMDAwMDAwMDAsVUwpIC8qIEdsb2JhbCByZWcgbGV2ZWwgICovCi0jZGVmaW5lIFRTVEFURV9DQ1IJX0FDKDB4MDAwMDAwZmYwMDAwMDAwMCxVTCkgLyogQ29uZGl0aW9uIENvZGVzLgkqLwotI2RlZmluZSBUU1RBVEVfWENDCV9BQygweDAwMDAwMGYwMDAwMDAwMDAsVUwpIC8qIENvbmRpdGlvbiBDb2Rlcy4JKi8KLSNkZWZpbmUgVFNUQVRFX1hORUcJX0FDKDB4MDAwMDAwODAwMDAwMDAwMCxVTCkgLyogJXhjYyBOZWdhdGl2ZS4JKi8KLSNkZWZpbmUgVFNUQVRFX1haRVJPCV9BQygweDAwMDAwMDQwMDAwMDAwMDAsVUwpIC8qICV4Y2MgWmVyby4JKi8KLSNkZWZpbmUgVFNUQVRFX1hPVkZMCV9BQygweDAwMDAwMDIwMDAwMDAwMDAsVUwpIC8qICV4Y2MgT3ZlcmZsb3cuCSovCi0jZGVmaW5lIFRTVEFURV9YQ0FSUlkJX0FDKDB4MDAwMDAwMTAwMDAwMDAwMCxVTCkgLyogJXhjYyBDYXJyeS4JKi8KLSNkZWZpbmUgVFNUQVRFX0lDQwlfQUMoMHgwMDAwMDAwZjAwMDAwMDAwLFVMKSAvKiBDb25kaXRpb24gQ29kZXMuCSovCi0jZGVmaW5lIFRTVEFURV9JTkVHCV9BQygweDAwMDAwMDA4MDAwMDAwMDAsVUwpIC8qICVpY2MgTmVnYXRpdmUuCSovCi0jZGVmaW5lIFRTVEFURV9JWkVSTwlfQUMoMHgwMDAwMDAwNDAwMDAwMDAwLFVMKSAvKiAlaWNjIFplcm8uCSovCi0jZGVmaW5lIFRTVEFURV9JT1ZGTAlfQUMoMHgwMDAwMDAwMjAwMDAwMDAwLFVMKSAvKiAlaWNjIE92ZXJmbG93LgkqLwotI2RlZmluZSBUU1RBVEVfSUNBUlJZCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpIC8qICVpY2MgQ2FycnkuCSovCi0jZGVmaW5lIFRTVEFURV9BU0kJX0FDKDB4MDAwMDAwMDBmZjAwMDAwMCxVTCkgLyogQWRkclNwYWNlIElELgkqLwotI2RlZmluZSBUU1RBVEVfUElMCV9BQygweDAwMDAwMDAwMDBmMDAwMDAsVUwpIC8qICVwaWwgKExpbnV4IHRyYXBzKSovCi0jZGVmaW5lIFRTVEFURV9QU1RBVEUJX0FDKDB4MDAwMDAwMDAwMDBmZmYwMCxVTCkgLyogUFNUQVRFLgkJKi8KLSNkZWZpbmUgVFNUQVRFX0lHCV9BQygweDAwMDAwMDAwMDAwODAwMDAsVUwpIC8qIEludGVycnVwdCBHbG9iYWxzLiovCi0jZGVmaW5lIFRTVEFURV9NRwlfQUMoMHgwMDAwMDAwMDAwMDQwMDAwLFVMKSAvKiBNTVUgR2xvYmFscy4JKi8KLSNkZWZpbmUgVFNUQVRFX0NMRQlfQUMoMHgwMDAwMDAwMDAwMDIwMDAwLFVMKSAvKiBDdXJyTGl0dGxlRW5kaWFuLgkqLwotI2RlZmluZSBUU1RBVEVfVExFCV9BQygweDAwMDAwMDAwMDAwMTAwMDAsVUwpIC8qIFRyYXBMaXR0bGVFbmRpYW4uCSovCi0jZGVmaW5lIFRTVEFURV9NTQlfQUMoMHgwMDAwMDAwMDAwMDBjMDAwLFVMKSAvKiBNZW1vcnkgTW9kZWwuCSovCi0jZGVmaW5lIFRTVEFURV9UU08JX0FDKDB4MDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogTU06IFRTTwkJKi8KLSNkZWZpbmUgVFNUQVRFX1BTTwlfQUMoMHgwMDAwMDAwMDAwMDA0MDAwLFVMKSAvKiBNTTogUFNPCQkqLwotI2RlZmluZSBUU1RBVEVfUk1PCV9BQygweDAwMDAwMDAwMDAwMDgwMDAsVUwpIC8qIE1NOiBSTU8JCSovCi0jZGVmaW5lIFRTVEFURV9SRUQJX0FDKDB4MDAwMDAwMDAwMDAwMjAwMCxVTCkgLyogUmVzZXQgRXJyb3IgRGVidWcuKi8KLSNkZWZpbmUgVFNUQVRFX1BFRglfQUMoMHgwMDAwMDAwMDAwMDAxMDAwLFVMKSAvKiBGUFUgRW5hYmxlLgkqLwotI2RlZmluZSBUU1RBVEVfQU0JX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkgLyogQWRkcmVzcyBNYXNrLgkqLwotI2RlZmluZSBUU1RBVEVfUFJJVglfQUMoMHgwMDAwMDAwMDAwMDAwNDAwLFVMKSAvKiBQcml2aWxlZ2UuCSovCi0jZGVmaW5lIFRTVEFURV9JRQlfQUMoMHgwMDAwMDAwMDAwMDAwMjAwLFVMKSAvKiBJbnRlcnJ1cHQgRW5hYmxlLgkqLwotI2RlZmluZSBUU1RBVEVfQUcJX0FDKDB4MDAwMDAwMDAwMDAwMDEwMCxVTCkgLyogQWx0ZXJuYXRlIEdsb2JhbHMuKi8KLSNkZWZpbmUgVFNUQVRFX1NZU0NBTEwJX0FDKDB4MDAwMDAwMDAwMDAwMDAyMCxVTCkgLyogaW4gc3lzY2FsbCB0cmFwICAgKi8KLSNkZWZpbmUgVFNUQVRFX0NXUAlfQUMoMHgwMDAwMDAwMDAwMDAwMDFmLFVMKSAvKiBDdXJyIFdpbi1Qb2ludGVyLgkqLwotCi0vKiBGbG9hdGluZy1Qb2ludCBSZWdpc3RlcnMgU3RhdGUgUmVnaXN0ZXIuCi0gKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwgIFJlc3YgIHwgIEZFRiAgfCAgRFUgIHwgIERMICB8Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIDYzICAgICAzICAgIDIgICAgICAgMSAgICAgIDAKLSAqLwotI2RlZmluZSBGUFJTX0ZFRglfQUMoMHgwMDAwMDAwMDAwMDAwMDA0LFVMKSAvKiBGUFUgRW5hYmxlLgkqLwotI2RlZmluZSBGUFJTX0RVCQlfQUMoMHgwMDAwMDAwMDAwMDAwMDAyLFVMKSAvKiBEaXJ0eSBVcHBlci4JKi8KLSNkZWZpbmUgRlBSU19ETAkJX0FDKDB4MDAwMDAwMDAwMDAwMDAwMSxVTCkgLyogRGlydHkgTG93ZXIuCSovCi0KLS8qIFZlcnNpb24gUmVnaXN0ZXIuCi0gKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB8IE1BTlVGIHwgSU1QTCB8IE1BU0sgfCBSZXN2IHwgTUFYVEwgfCBSZXN2IHwgTUFYV0lOIHwKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIDYzICAgNDggNDcgIDMyIDMxICAyNCAyMyAgMTYgMTUgICAgOCA3ICAgIDUgNCAgICAgIDAKLSAqLwotI2RlZmluZSBWRVJTX01BTlVGCV9BQygweGZmZmYwMDAwMDAwMDAwMDAsVUwpIC8qIE1hbnVmYWN0dXJlci4JKi8KLSNkZWZpbmUgVkVSU19JTVBMCV9BQygweDAwMDBmZmZmMDAwMDAwMDAsVUwpIC8qIEltcGxlbWVudGF0aW9uLgkqLwotI2RlZmluZSBWRVJTX01BU0sJX0FDKDB4MDAwMDAwMDBmZjAwMDAwMCxVTCkgLyogTWFzayBTZXQgUmV2aXNpb24uKi8KLSNkZWZpbmUgVkVSU19NQVhUTAlfQUMoMHgwMDAwMDAwMDAwMDBmZjAwLFVMKSAvKiBNYXggVHJhcCBMZXZlbC4JKi8KLSNkZWZpbmUgVkVSU19NQVhXSU4JX0FDKDB4MDAwMDAwMDAwMDAwMDAxZixVTCkgLyogTWF4IFJlZ1dpbmRvdyBJZHguKi8KLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfUFNUQVRFX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3BzdGF0ZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHRyYWNlLmgKaW5kZXggYjE2M2RhNy4uMWE1NWI5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3B0cmFjZS5oCkBAIC0xLDM0NiArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9QVFJBQ0VfSAotI2RlZmluZSBfU1BBUkM2NF9QVFJBQ0VfSAotCi0jaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgotCi0vKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZSAKLSAqIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsIGFuZCBiYXNpY2FsbHkgYWxsIHRyYXBzLgotICovCi0KLS8qIFRoaXMgbWFnaWMgdmFsdWUgbXVzdCBoYXZlIHRoZSBsb3cgOSBiaXRzIGNsZWFyLAotICogYXMgdGhhdCBpcyB3aGVyZSB3ZSBlbmNvZGUgdGhlICV0dCB2YWx1ZSwgc2VlIGJlbG93LgotICovCi0jZGVmaW5lIFBUX1JFR1NfTUFHSUMgMHg1N2FjNmMwMAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RydWN0IHB0X3JlZ3MgewotCXVuc2lnbmVkIGxvbmcgdV9yZWdzWzE2XTsgLyogZ2xvYmFscyBhbmQgaW5zICovCi0JdW5zaWduZWQgbG9uZyB0c3RhdGU7Ci0JdW5zaWduZWQgbG9uZyB0cGM7Ci0JdW5zaWduZWQgbG9uZyB0bnBjOwotCXVuc2lnbmVkIGludCB5OwotCi0JLyogV2UgZW5jb2RlIGEgbWFnaWMgbnVtYmVyLCBQVF9SRUdTX01BR0lDLCBhbG9uZwotCSAqIHdpdGggdGhlICV0dCAodHJhcCB0eXBlKSByZWdpc3RlciB2YWx1ZSBhdCB0cmFwCi0JICogZW50cnkgdGltZS4gIFRoZSBtYWdpYyBudW1iZXIgYWxsb3dzIHVzIHRvIGlkZW50aWZ5Ci0JICogYWNjdXJhdGVseSBhIHRyYXAgc3RhY2sgZnJhbWUgaW4gdGhlIHN0YWNrCi0JICogdW53aW5kZXIsIGFuZCB0aGUgJXR0IHZhbHVlIGFsbG93cyB1cyB0byB0ZXN0Ci0JICogdGhpbmdzIGxpa2UgImluIGEgc3lzdGVtIGNhbGwiIGV0Yy4gZm9yIGFuIGFyYml0cmF5Ci0JICogcHJvY2Vzcy4KLQkgKgotCSAqIFRoZSBQVF9SRUdTX01BR0lDIGlzIGNob29zZW4gc3VjaCB0aGF0IGl0IGNhbiBiZQotCSAqIGxvYWRlZCBjb21wbGV0ZWx5IHVzaW5nIGp1c3QgYSBzZXRoaSBpbnN0cnVjdGlvbi4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgbWFnaWM7Ci19OwotCi1zdGF0aWMgaW5saW5lIGludCBwdF9yZWdzX3RyYXBfdHlwZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gcmVncy0+bWFnaWMgJiAweDFmZjsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHB0X3JlZ3NfaXNfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9TWVNDQUxMKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHB0X3JlZ3NfY2xlYXJfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gKHJlZ3MtPnRzdGF0ZSAmPSB+VFNUQVRFX1NZU0NBTEwpOwotfQotCi1zdHJ1Y3QgcHRfcmVnczMyIHsKLQl1bnNpZ25lZCBpbnQgcHNyOwotCXVuc2lnbmVkIGludCBwYzsKLQl1bnNpZ25lZCBpbnQgbnBjOwotCXVuc2lnbmVkIGludCB5OwotCXVuc2lnbmVkIGludCB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KLX07Ci0KLSNkZWZpbmUgVVJFR19HMCAgICAgICAgMAotI2RlZmluZSBVUkVHX0cxICAgICAgICAxCi0jZGVmaW5lIFVSRUdfRzIgICAgICAgIDIKLSNkZWZpbmUgVVJFR19HMyAgICAgICAgMwotI2RlZmluZSBVUkVHX0c0ICAgICAgICA0Ci0jZGVmaW5lIFVSRUdfRzUgICAgICAgIDUKLSNkZWZpbmUgVVJFR19HNiAgICAgICAgNgotI2RlZmluZSBVUkVHX0c3ICAgICAgICA3Ci0jZGVmaW5lIFVSRUdfSTAgICAgICAgIDgKLSNkZWZpbmUgVVJFR19JMSAgICAgICAgOQotI2RlZmluZSBVUkVHX0kyICAgICAgICAxMAotI2RlZmluZSBVUkVHX0kzICAgICAgICAxMQotI2RlZmluZSBVUkVHX0k0ICAgICAgICAxMgotI2RlZmluZSBVUkVHX0k1ICAgICAgICAxMwotI2RlZmluZSBVUkVHX0k2ICAgICAgICAxNAotI2RlZmluZSBVUkVHX0k3ICAgICAgICAxNQotI2RlZmluZSBVUkVHX0ZQICAgICAgICBVUkVHX0k2Ci0jZGVmaW5lIFVSRUdfUkVUUEMgICAgIFVSRUdfSTcKLQotLyogQSBWOSByZWdpc3RlciB3aW5kb3cgKi8KLXN0cnVjdCByZWdfd2luZG93IHsKLQl1bnNpZ25lZCBsb25nIGxvY2Fsc1s4XTsKLQl1bnNpZ25lZCBsb25nIGluc1s4XTsKLX07Ci0KLS8qIEEgMzItYml0IHJlZ2lzdGVyIHdpbmRvdy4gKi8KLXN0cnVjdCByZWdfd2luZG93MzIgewotCXVuc2lnbmVkIGludCBsb2NhbHNbOF07Ci0JdW5zaWduZWQgaW50IGluc1s4XTsKLX07Ci0KLS8qIEEgVjkgU3BhcmMgc3RhY2sgZnJhbWUgKi8KLXN0cnVjdCBzcGFyY19zdGFja2YgewotCXVuc2lnbmVkIGxvbmcgbG9jYWxzWzhdOwotICAgICAgICB1bnNpZ25lZCBsb25nIGluc1s2XTsKLQlzdHJ1Y3Qgc3BhcmNfc3RhY2tmICpmcDsKLQl1bnNpZ25lZCBsb25nIGNhbGxlcnNfcGM7Ci0JY2hhciAqc3RydWN0cHRyOwotCXVuc2lnbmVkIGxvbmcgeGFyZ3NbNl07Ci0JdW5zaWduZWQgbG9uZyB4eGFyZ3NbMV07Ci19OwkKLQotLyogQSAzMi1iaXQgU3BhcmMgc3RhY2sgZnJhbWUgKi8KLXN0cnVjdCBzcGFyY19zdGFja2YzMiB7Ci0JdW5zaWduZWQgaW50IGxvY2Fsc1s4XTsKLSAgICAgICAgdW5zaWduZWQgaW50IGluc1s2XTsKLQl1bnNpZ25lZCBpbnQgZnA7Ci0JdW5zaWduZWQgaW50IGNhbGxlcnNfcGM7Ci0JdW5zaWduZWQgaW50IHN0cnVjdHB0cjsKLQl1bnNpZ25lZCBpbnQgeGFyZ3NbNl07Ci0JdW5zaWduZWQgaW50IHh4YXJnc1sxXTsKLX07CQotCi1zdHJ1Y3Qgc3BhcmNfdHJhcGYgewotCXVuc2lnbmVkIGxvbmcgbG9jYWxzWzhdOwotCXVuc2lnbmVkIGxvbmcgaW5zWzhdOwotCXVuc2lnbmVkIGxvbmcgX3VudXNlZDsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLX07Ci0KLSNkZWZpbmUgVFJBQ0VSRUdfU1oJc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKQotI2RlZmluZSBTVEFDS0ZSQU1FX1NaCXNpemVvZihzdHJ1Y3Qgc3BhcmNfc3RhY2tmKQotCi0jZGVmaW5lIFRSQUNFUkVHMzJfU1oJc2l6ZW9mKHN0cnVjdCBwdF9yZWdzMzIpCi0jZGVmaW5lIFNUQUNLRlJBTUUzMl9TWglzaXplb2Yoc3RydWN0IHNwYXJjX3N0YWNrZjMyKQotCi0jaWZkZWYgX19LRVJORUxfXwotCi1zdHJ1Y3QgZ2xvYmFsX3JlZ19zbmFwc2hvdCB7Ci0JdW5zaWduZWQgbG9uZwkJdHN0YXRlOwotCXVuc2lnbmVkIGxvbmcJCXRwYzsKLQl1bnNpZ25lZCBsb25nCQl0bnBjOwotCXVuc2lnbmVkIGxvbmcJCW83OwotCXVuc2lnbmVkIGxvbmcJCWk3OwotCXN0cnVjdCB0aHJlYWRfaW5mbwkqdGhyZWFkOwotCXVuc2lnbmVkIGxvbmcJCXBhZDE7Ci0JdW5zaWduZWQgbG9uZwkJcGFkMjsKLX07Ci0KLSNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19QVFJBQ0UKLQotI2RlZmluZSBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCkJICAgIFwKLWRvIHsJY3VycmVudF90aHJlYWRfaW5mbygpLT5zeXNjYWxsX25vZXJyb3IgPSAxOyBcCi19IHdoaWxlICgwKQotI2RlZmluZSB1c2VyX21vZGUocmVncykgKCEoKHJlZ3MpLT50c3RhdGUgJiBUU1RBVEVfUFJJVikpCi0jZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+dHBjKQotI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKSAoKHJlZ3MpLT51X3JlZ3NbVVJFR19JMF0pCi0jaWZkZWYgQ09ORklHX1NNUAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqKTsKLSNlbHNlCi0jZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQotI2VuZGlmCi1leHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7Ci1leHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKLSNlbmRpZgotCi0jZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KLS8qIEZvciBhc3NlbWJseSBjb2RlLiAqLwotI2RlZmluZSBUUkFDRVJFR19TWgkJMHhhMAotI2RlZmluZSBTVEFDS0ZSQU1FX1NaCQkweGMwCi0KLSNkZWZpbmUgVFJBQ0VSRUczMl9TWgkJMHg1MAotI2RlZmluZSBTVEFDS0ZSQU1FMzJfU1oJCTB4NjAKLSNlbmRpZgotCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBTVEFDS19CSUFTCQkyMDQ3Ci0jZW5kaWYKLQotLyogVGhlc2UgYXJlIGZvciBwdF9yZWdzLiAqLwotI2RlZmluZSBQVF9WOV9HMCAgICAgMHgwMAotI2RlZmluZSBQVF9WOV9HMSAgICAgMHgwOAotI2RlZmluZSBQVF9WOV9HMiAgICAgMHgxMAotI2RlZmluZSBQVF9WOV9HMyAgICAgMHgxOAotI2RlZmluZSBQVF9WOV9HNCAgICAgMHgyMAotI2RlZmluZSBQVF9WOV9HNSAgICAgMHgyOAotI2RlZmluZSBQVF9WOV9HNiAgICAgMHgzMAotI2RlZmluZSBQVF9WOV9HNyAgICAgMHgzOAotI2RlZmluZSBQVF9WOV9JMCAgICAgMHg0MAotI2RlZmluZSBQVF9WOV9JMSAgICAgMHg0OAotI2RlZmluZSBQVF9WOV9JMiAgICAgMHg1MAotI2RlZmluZSBQVF9WOV9JMyAgICAgMHg1OAotI2RlZmluZSBQVF9WOV9JNCAgICAgMHg2MAotI2RlZmluZSBQVF9WOV9JNSAgICAgMHg2OAotI2RlZmluZSBQVF9WOV9JNiAgICAgMHg3MAotI2RlZmluZSBQVF9WOV9GUCAgICAgUFRfVjlfSTYKLSNkZWZpbmUgUFRfVjlfSTcgICAgIDB4NzgKLSNkZWZpbmUgUFRfVjlfVFNUQVRFIDB4ODAKLSNkZWZpbmUgUFRfVjlfVFBDICAgIDB4ODgKLSNkZWZpbmUgUFRfVjlfVE5QQyAgIDB4OTAKLSNkZWZpbmUgUFRfVjlfWSAgICAgIDB4OTgKLSNkZWZpbmUgUFRfVjlfTUFHSUMgIDB4OWMKLSNkZWZpbmUgUFRfVFNUQVRFCVBUX1Y5X1RTVEFURQotI2RlZmluZSBQVF9UUEMJCVBUX1Y5X1RQQwotI2RlZmluZSBQVF9UTlBDCQlQVF9WOV9UTlBDCi0KLS8qIFRoZXNlIGZvciBwdF9yZWdzMzIuICovCi0jZGVmaW5lIFBUX1BTUiAgICAweDAKLSNkZWZpbmUgUFRfUEMgICAgIDB4NAotI2RlZmluZSBQVF9OUEMgICAgMHg4Ci0jZGVmaW5lIFBUX1kgICAgICAweGMKLSNkZWZpbmUgUFRfRzAgICAgIDB4MTAKLSNkZWZpbmUgUFRfV0lNICAgIFBUX0cwCi0jZGVmaW5lIFBUX0cxICAgICAweDE0Ci0jZGVmaW5lIFBUX0cyICAgICAweDE4Ci0jZGVmaW5lIFBUX0czICAgICAweDFjCi0jZGVmaW5lIFBUX0c0ICAgICAweDIwCi0jZGVmaW5lIFBUX0c1ICAgICAweDI0Ci0jZGVmaW5lIFBUX0c2ICAgICAweDI4Ci0jZGVmaW5lIFBUX0c3ICAgICAweDJjCi0jZGVmaW5lIFBUX0kwICAgICAweDMwCi0jZGVmaW5lIFBUX0kxICAgICAweDM0Ci0jZGVmaW5lIFBUX0kyICAgICAweDM4Ci0jZGVmaW5lIFBUX0kzICAgICAweDNjCi0jZGVmaW5lIFBUX0k0ICAgICAweDQwCi0jZGVmaW5lIFBUX0k1ICAgICAweDQ0Ci0jZGVmaW5lIFBUX0k2ICAgICAweDQ4Ci0jZGVmaW5lIFBUX0ZQICAgICBQVF9JNgotI2RlZmluZSBQVF9JNyAgICAgMHg0YwotCi0vKiBSZWdfd2luZG93IG9mZnNldHMgKi8KLSNkZWZpbmUgUldfVjlfTDAgICAgIDB4MDAKLSNkZWZpbmUgUldfVjlfTDEgICAgIDB4MDgKLSNkZWZpbmUgUldfVjlfTDIgICAgIDB4MTAKLSNkZWZpbmUgUldfVjlfTDMgICAgIDB4MTgKLSNkZWZpbmUgUldfVjlfTDQgICAgIDB4MjAKLSNkZWZpbmUgUldfVjlfTDUgICAgIDB4MjgKLSNkZWZpbmUgUldfVjlfTDYgICAgIDB4MzAKLSNkZWZpbmUgUldfVjlfTDcgICAgIDB4MzgKLSNkZWZpbmUgUldfVjlfSTAgICAgIDB4NDAKLSNkZWZpbmUgUldfVjlfSTEgICAgIDB4NDgKLSNkZWZpbmUgUldfVjlfSTIgICAgIDB4NTAKLSNkZWZpbmUgUldfVjlfSTMgICAgIDB4NTgKLSNkZWZpbmUgUldfVjlfSTQgICAgIDB4NjAKLSNkZWZpbmUgUldfVjlfSTUgICAgIDB4NjgKLSNkZWZpbmUgUldfVjlfSTYgICAgIDB4NzAKLSNkZWZpbmUgUldfVjlfSTcgICAgIDB4NzgKLQotI2RlZmluZSBSV19MMCAgICAgMHgwMAotI2RlZmluZSBSV19MMSAgICAgMHgwNAotI2RlZmluZSBSV19MMiAgICAgMHgwOAotI2RlZmluZSBSV19MMyAgICAgMHgwYwotI2RlZmluZSBSV19MNCAgICAgMHgxMAotI2RlZmluZSBSV19MNSAgICAgMHgxNAotI2RlZmluZSBSV19MNiAgICAgMHgxOAotI2RlZmluZSBSV19MNyAgICAgMHgxYwotI2RlZmluZSBSV19JMCAgICAgMHgyMAotI2RlZmluZSBSV19JMSAgICAgMHgyNAotI2RlZmluZSBSV19JMiAgICAgMHgyOAotI2RlZmluZSBSV19JMyAgICAgMHgyYwotI2RlZmluZSBSV19JNCAgICAgMHgzMAotI2RlZmluZSBSV19JNSAgICAgMHgzNAotI2RlZmluZSBSV19JNiAgICAgMHgzOAotI2RlZmluZSBSV19JNyAgICAgMHgzYwotCi0vKiBTdGFja19mcmFtZSBvZmZzZXRzICovCi0jZGVmaW5lIFNGX1Y5X0wwICAgICAweDAwCi0jZGVmaW5lIFNGX1Y5X0wxICAgICAweDA4Ci0jZGVmaW5lIFNGX1Y5X0wyICAgICAweDEwCi0jZGVmaW5lIFNGX1Y5X0wzICAgICAweDE4Ci0jZGVmaW5lIFNGX1Y5X0w0ICAgICAweDIwCi0jZGVmaW5lIFNGX1Y5X0w1ICAgICAweDI4Ci0jZGVmaW5lIFNGX1Y5X0w2ICAgICAweDMwCi0jZGVmaW5lIFNGX1Y5X0w3ICAgICAweDM4Ci0jZGVmaW5lIFNGX1Y5X0kwICAgICAweDQwCi0jZGVmaW5lIFNGX1Y5X0kxICAgICAweDQ4Ci0jZGVmaW5lIFNGX1Y5X0kyICAgICAweDUwCi0jZGVmaW5lIFNGX1Y5X0kzICAgICAweDU4Ci0jZGVmaW5lIFNGX1Y5X0k0ICAgICAweDYwCi0jZGVmaW5lIFNGX1Y5X0k1ICAgICAweDY4Ci0jZGVmaW5lIFNGX1Y5X0ZQICAgICAweDcwCi0jZGVmaW5lIFNGX1Y5X1BDICAgICAweDc4Ci0jZGVmaW5lIFNGX1Y5X1JFVFAgICAweDgwCi0jZGVmaW5lIFNGX1Y5X1hBUkcwICAweDg4Ci0jZGVmaW5lIFNGX1Y5X1hBUkcxICAweDkwCi0jZGVmaW5lIFNGX1Y5X1hBUkcyICAweDk4Ci0jZGVmaW5lIFNGX1Y5X1hBUkczICAweGEwCi0jZGVmaW5lIFNGX1Y5X1hBUkc0ICAweGE4Ci0jZGVmaW5lIFNGX1Y5X1hBUkc1ICAweGIwCi0jZGVmaW5lIFNGX1Y5X1hYQVJHICAweGI4Ci0KLSNkZWZpbmUgU0ZfTDAgICAgIDB4MDAKLSNkZWZpbmUgU0ZfTDEgICAgIDB4MDQKLSNkZWZpbmUgU0ZfTDIgICAgIDB4MDgKLSNkZWZpbmUgU0ZfTDMgICAgIDB4MGMKLSNkZWZpbmUgU0ZfTDQgICAgIDB4MTAKLSNkZWZpbmUgU0ZfTDUgICAgIDB4MTQKLSNkZWZpbmUgU0ZfTDYgICAgIDB4MTgKLSNkZWZpbmUgU0ZfTDcgICAgIDB4MWMKLSNkZWZpbmUgU0ZfSTAgICAgIDB4MjAKLSNkZWZpbmUgU0ZfSTEgICAgIDB4MjQKLSNkZWZpbmUgU0ZfSTIgICAgIDB4MjgKLSNkZWZpbmUgU0ZfSTMgICAgIDB4MmMKLSNkZWZpbmUgU0ZfSTQgICAgIDB4MzAKLSNkZWZpbmUgU0ZfSTUgICAgIDB4MzQKLSNkZWZpbmUgU0ZfRlAgICAgIDB4MzgKLSNkZWZpbmUgU0ZfUEMgICAgIDB4M2MKLSNkZWZpbmUgU0ZfUkVUUCAgIDB4NDAKLSNkZWZpbmUgU0ZfWEFSRzAgIDB4NDQKLSNkZWZpbmUgU0ZfWEFSRzEgIDB4NDgKLSNkZWZpbmUgU0ZfWEFSRzIgIDB4NGMKLSNkZWZpbmUgU0ZfWEFSRzMgIDB4NTAKLSNkZWZpbmUgU0ZfWEFSRzQgIDB4NTQKLSNkZWZpbmUgU0ZfWEFSRzUgIDB4NTgKLSNkZWZpbmUgU0ZfWFhBUkcgIDB4NWMKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotLyogZ2xvYmFsX3JlZ19zbmFwc2hvdCBvZmZzZXRzICovCi0jZGVmaW5lIEdSX1NOQVBfVFNUQVRFCTB4MDAKLSNkZWZpbmUgR1JfU05BUF9UUEMJMHgwOAotI2RlZmluZSBHUl9TTkFQX1ROUEMJMHgxMAotI2RlZmluZSBHUl9TTkFQX083CTB4MTgKLSNkZWZpbmUgR1JfU05BUF9JNwkweDIwCi0jZGVmaW5lIEdSX1NOQVBfVEhSRUFECTB4MjgKLSNkZWZpbmUgR1JfU05BUF9QQUQxCTB4MzAKLSNkZWZpbmUgR1JfU05BUF9QQUQyCTB4MzgKLQotI2VuZGlmICAvKiAgX19LRVJORUxfXyAgKi8KLQotLyogU3R1ZmYgZm9yIHRoZSBwdHJhY2Ugc3lzdGVtIGNhbGwgKi8KLSNkZWZpbmUgUFRSQUNFX1NQQVJDX0RFVEFDSCAgICAgICAxMQotI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKLSNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAotI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1Ci0jZGVmaW5lIFBUUkFDRV9SRUFEREFUQSAgICAgICAgICAgMTYKLSNkZWZpbmUgUFRSQUNFX1dSSVRFREFUQSAgICAgICAgICAxNwotI2RlZmluZSBQVFJBQ0VfUkVBRFRFWFQgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBUUkFDRV9XUklURVRFWFQgICAgICAgICAgMTkKLSNkZWZpbmUgUFRSQUNFX0dFVEZQQVJFR1MgICAgICAgICAyMAotI2RlZmluZSBQVFJBQ0VfU0VURlBBUkVHUyAgICAgICAgIDIxCi0KLS8qIFRoZXJlIGFyZSBmb3IgZGVidWdnaW5nIDY0LWJpdCBwcm9jZXNzZXMsIGVpdGhlciBmcm9tIGEgMzIgb3IgNjQgYml0Ci0gKiBwYXJlbnQuICBUaHVzIHRoZWlyIGNvbXBsZW1lbnRzIGFyZSBmb3IgZGVidWdnaW5nIDMyLWJpdCBwcm9jZXNzZXMgb25seS4KLSAqLwotCi0jZGVmaW5lIFBUUkFDRV9HRVRSRUdTNjQJICAyMgotI2RlZmluZSBQVFJBQ0VfU0VUUkVHUzY0CSAgMjMKLS8qIFBUUkFDRV9TWVNDQUxMIGlzIDI0ICovCi0jZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1M2NAkgIDI1Ci0jZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1M2NAkgIDI2Ci0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X1BUUkFDRV9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcmVib290LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3JlYm9vdC5oCmluZGV4IDNmM2Y0M2YuLjBkNzJlYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcmVib290LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9yZWJvb3QuaApAQCAtMSw2ICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1JFQk9PVF9ICi0jZGVmaW5lIF9TUEFSQzY0X1JFQk9PVF9ICi0KLWV4dGVybiB2b2lkIG1hY2hpbmVfYWx0X3Bvd2VyX29mZih2b2lkKTsKLQotI2VuZGlmIC8qIF9TUEFSQzY0X1JFQk9PVF9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3JlYm9vdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yZWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcmVnLmgKaW5kZXggNzdhYTQ4MC4uNDk1YmFiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yZWcuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3JlZy5oCkBAIC0xLDU2ICsxIEBACi0vKgotICogbGludXgvYXNtLXNwYXJjNjQvcmVnLmgKLSAqIExheW91dCBvZiB0aGUgcmVnaXN0ZXJzIGFzIGV4cGVjdGVkIGJ5IGdkYiBvbiB0aGUgU3BhcmMKLSAqIHdlIHNob3VsZCByZXBsYWNlIHRoZSB1c2VyLmggZGVmaW5pdGlvbnMgd2l0aCB0aG9zZSBpbgotICogdGhpcyBmaWxlLCB3ZSBkb24ndCBldmVuIHVzZSB0aGUgb3RoZXIgCi0gKiAtbWlndWVsCi0gKgotICogVGhlIG5hbWVzIG9mIHRoZSBzdHJ1Y3R1cmVzLCBjb25zdGFudHMgYW5kIGFsaWFzZXMgaW4gdGhpcyBmaWxlCi0gKiBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBzdW5vcyBvbmVzLCBzb21lIHByb2dyYW1zIHJlbHkgb24gdGhlc2UKLSAqIG5hbWVzIChnZGIgZm9yIGV4YW1wbGUpLgotICoKLSAqLwotCi0jaWZuZGVmIF9fU1BBUkM2NF9SRUdfSAotI2RlZmluZSBfX1NQQVJDNjRfUkVHX0gKLQotc3RydWN0IHJlZ3MgewotICAgICAgICB1bnNpZ25lZCBsb25nIHJfZzE7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcl9nMjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByX2czOwotICAgICAgICB1bnNpZ25lZCBsb25nIHJfZzQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcl9nNTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByX2c2OwotICAgICAgICB1bnNpZ25lZCBsb25nIHJfZzc7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcl9vMDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByX28xOwotICAgICAgICB1bnNpZ25lZCBsb25nIHJfbzI7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcl9vMzsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByX280OwotICAgICAgICB1bnNpZ25lZCBsb25nIHJfbzU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcl9vNjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByX283OwotICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkOwotICAgICAgICB1bnNpZ25lZCBsb25nIHJfdHN0YXRlOwotICAgICAgICB1bnNpZ25lZCBsb25nIHJfdHBjOwotICAgICAgICB1bnNpZ25lZCBsb25nIHJfdG5wYzsKLSAgICAgICAgdW5zaWduZWQgaW50ICByX3k7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgcl9mcHJzOwotfTsKLQotI2RlZmluZSBGUFVfUkVHU19UWVBFIHVuc2lnbmVkIGludAotI2RlZmluZSBGUFVfRlNSX1RZUEUgdW5zaWduZWQgbG9uZwotCi1zdHJ1Y3QgZnBfc3RhdHVzIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmcHVfZnJbMzJdOwotICAgICAgICB1bnNpZ25lZCBsb25nIEZwdV9mc3I7Ci19OwotCi1zdHJ1Y3QgZnB1IHsKLQlzdHJ1Y3QgZnBfc3RhdHVzIGZfZnBzdGF0dXM7Ci19OwotCi0jZGVmaW5lIGZwdV9yZWdzICBmX2Zwc3RhdHVzLmZwdV9mcgotI2RlZmluZSBmcHVfZnNyICAgZl9mcHN0YXR1cy5GcHVfZnNyCi0KLSNlbmRpZiAvKiBfX1NQQVJDNjRfUkVHX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvcmVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Jlc291cmNlLmgKaW5kZXggNGYwOGZiNS4uNDZlM2JjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yZXNvdXJjZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcmVzb3VyY2UuaApAQCAtMSwxOSArMSBAQAotLyoKLSAqIHJlc291cmNlLmg6IFJlc291cmNlIGRlZmluaXRpb25zLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2lmbmRlZiBfU1BBUkM2NF9SRVNPVVJDRV9ICi0jZGVmaW5lIF9TUEFSQzY0X1JFU09VUkNFX0gKLQotLyoKLSAqIFRoZXNlIHR3byByZXNvdXJjZSBsaW1pdCBJRHMgaGF2ZSBhIFNwYXJjL0xpbnV4LXNwZWNpZmljIG9yZGVyaW5nLAotICogdGhlIHJlc3QgY29tZXMgZnJvbSB0aGUgZ2VuZXJpYyBoZWFkZXI6Ci0gKi8KLSNkZWZpbmUgUkxJTUlUX05PRklMRQkJNgkvKiBtYXggbnVtYmVyIG9mIG9wZW4gZmlsZXMgKi8KLSNkZWZpbmUgUkxJTUlUX05QUk9DCQk3CS8qIG1heCBudW1iZXIgb2YgcHJvY2Vzc2VzICovCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9SRVNPVVJDRV9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9yZXNvdXJjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9ydGMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcnRjLmgKaW5kZXggZjllY2IxZi4uZTQ5YTk2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9ydGMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3J0Yy5oCkBAIC0xLDI2ICsxIEBACi0vKgotICogcnRjLmg6IERlZmluaXRpb25zIGZvciBhY2Nlc3MgdG8gdGhlIE1vc3RlayByZWFsIHRpbWUgY2xvY2sKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQGVkZW4ucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2lmbmRlZiBfUlRDX0gKLSNkZWZpbmUgX1JUQ19ICi0KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCi1zdHJ1Y3QgcnRjX3RpbWUKLXsKLQlpbnQJc2VjOwkvKiBTZWNvbmRzICgwLTU5KSAqLwotCWludAltaW47CS8qIE1pbnV0ZXMgKDAtNTkpICovCi0JaW50CWhvdXI7CS8qIEhvdXIgKDAtMjMpICovCi0JaW50CWRvdzsJLyogRGF5IG9mIHRoZSB3ZWVrICgxLTcpICovCi0JaW50CWRvbTsJLyogRGF5IG9mIHRoZSBtb250aCAoMS0zMSkgKi8KLQlpbnQJbW9udGg7CS8qIE1vbnRoIG9mIHllYXIgKDEtMTIpICovCi0JaW50CXllYXI7CS8qIFllYXIgKDAtOTkpICovCi19OwotCi0jZGVmaW5lIFJUQ0dFVCBfSU9SKCdwJywgMjAsIHN0cnVjdCBydGNfdGltZSkKLSNkZWZpbmUgUlRDU0VUIF9JT1coJ3AnLCAyMSwgc3RydWN0IHJ0Y190aW1lKQotCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tc3BhcmMvcnRjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3J3c2VtLWNvbnN0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3J3c2VtLWNvbnN0LmgKaW5kZXggYTMwM2M5ZC4uMmExZGUzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yd3NlbS1jb25zdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcndzZW0tY29uc3QuaApAQCAtMSwxMiArMSBAQAotLyogcndzZW0tY29uc3QuaDogUlcgc2VtYXBob3JlIGNvdW50ZXIgY29uc3RhbnRzLiAgKi8KLSNpZm5kZWYgX1NQQVJDNjRfUldTRU1fQ09OU1RfSAotI2RlZmluZSBfU1BBUkM2NF9SV1NFTV9DT05TVF9ICi0KLSNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCTB4MDAwMDAwMDAKLSNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDEKLSNkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmYKLSNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCQkweGZmZmYwMDAwCi0jZGVmaW5lIFJXU0VNX0FDVElWRV9SRUFEX0JJQVMJCVJXU0VNX0FDVElWRV9CSUFTCi0jZGVmaW5lIFJXU0VNX0FDVElWRV9XUklURV9CSUFTCQkoUldTRU1fV0FJVElOR19CSUFTICsgUldTRU1fQUNUSVZFX0JJQVMpCi0KLSNlbmRpZiAvKiBfU1BBUkM2NF9SV1NFTV9DT05TVF9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3J3c2VtLWNvbnN0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3J3c2VtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3J3c2VtLmgKaW5kZXggMWRjMTI5YS4uNjk0M2M1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yd3NlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcndzZW0uaApAQCAtMSw4NCArMSBAQAotLyoKLSAqIHJ3c2VtLmg6IFIvVyBzZW1hcGhvcmVzIGltcGxlbWVudGVkIHVzaW5nIENBUwotICoKLSAqIFdyaXR0ZW4gYnkgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKSwgMjAwMS4KLSAqIERlcml2ZWQgZnJvbSBhc20taTM4Ni9yd3NlbS5oCi0gKi8KLSNpZm5kZWYgX1NQQVJDNjRfUldTRU1fSAotI2RlZmluZSBfU1BBUkM2NF9SV1NFTV9ICi0KLSNpZm5kZWYgX0xJTlVYX1JXU0VNX0gKLSNlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgYXNtL3J3c2VtLmggZGlyZWN0bHksIHVzZSBsaW51eC9yd3NlbS5oIGluc3RlYWQiCi0jZW5kaWYKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9yd3NlbS1jb25zdC5oPgotCi1zdHJ1Y3QgcndzZW1fd2FpdGVyOwotCi1zdHJ1Y3Qgcndfc2VtYXBob3JlIHsKLQlzaWduZWQgaW50IGNvdW50OwotCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKLSNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwotCXN0cnVjdCBsb2NrZGVwX21hcAlkZXBfbWFwOwotI2VuZGlmCi19OwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKLSMgZGVmaW5lIF9fUldTRU1fREVQX01BUF9JTklUKGxvY2tuYW1lKSAsIC5kZXBfbWFwID0geyAubmFtZSA9ICNsb2NrbmFtZSB9Ci0jZWxzZQotIyBkZWZpbmUgX19SV1NFTV9ERVBfTUFQX0lOSVQobG9ja25hbWUpCi0jZW5kaWYKLQotI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKLXsgUldTRU1fVU5MT0NLRURfVkFMVUUsIFNQSU5fTE9DS19VTkxPQ0tFRCwgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgXAotICBfX1JXU0VNX0RFUF9NQVBfSU5JVChuYW1lKSB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKSBcCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSBuYW1lID0gX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQotCi1leHRlcm4gdm9pZCBfX2luaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBjb25zdCBjaGFyICpuYW1lLAotCQkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKLQotI2RlZmluZSBpbml0X3J3c2VtKHNlbSkJCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQlcCi0JCQkJCQkJCVwKLQlfX2luaXRfcndzZW0oKHNlbSksICNzZW0sICZfX2tleSk7CQkJXAotfSB3aGlsZSAoMCkKLQotZXh0ZXJuIHZvaWQgX19kb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKLWV4dGVybiBpbnQgX19kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOwotZXh0ZXJuIHZvaWQgX19kb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7Ci1leHRlcm4gaW50IF9fZG93bl93cml0ZV90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7Ci1leHRlcm4gdm9pZCBfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKLWV4dGVybiB2b2lkIF9fdXBfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKLWV4dGVybiB2b2lkIF9fZG93bmdyYWRlX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGVfbmVzdGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgaW50IHN1YmNsYXNzKQotewotCV9fZG93bl93cml0ZShzZW0pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByd3NlbV9hdG9taWNfdXBkYXRlKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCXJldHVybiBhdG9taWNfYWRkX3JldHVybihkZWx0YSwgKGF0b21pY190ICopKCZzZW0tPmNvdW50KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCWF0b21pY19hZGQoZGVsdGEsIChhdG9taWNfdCAqKSgmc2VtLT5jb3VudCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByd3NlbV9pc19sb2NrZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCXJldHVybiAoc2VtLT5jb3VudCAhPSAwKTsKLX0KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9TUEFSQzY0X1JXU0VNX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvcndzZW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2J1cy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zYnVzLmgKaW5kZXggMjRhMDRhNS4uMGNhYjBlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zYnVzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zYnVzLmgKQEAgLTEsMTkwICsxIEBACi0vKiBzYnVzLmg6IERlZmluZXMgZm9yIHRoZSBTdW4gU0J1cy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTksIDIwMDcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfU0JVU19ICi0jZGVmaW5lIF9TUEFSQzY0X1NCVVNfSAotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLQotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgotI2luY2x1ZGUgPGFzbS9pb21tdS5oPgotI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgotCi0vKiBXZSBzY2FuIHdoaWNoIGRldmljZXMgYXJlIG9uIHRoZSBTQnVzIHVzaW5nIHRoZSBQUk9NIG5vZGUgZGV2aWNlCi0gKiB0cmVlLiAgU0J1cyBkZXZpY2VzIGFyZSBkZXNjcmliZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgWW91IGNhbgotICogZWl0aGVyIGdldCBhbiBhYnNvbHV0ZSBhZGRyZXNzIGF0IHdoaWNoIHRvIGFjY2VzcyB0aGUgZGV2aWNlLCBvcgotICogeW91IGNhbiBnZXQgYSBTQnVzICdzbG90JyBudW1iZXIgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhhdCBzbG90LgotICovCi0KLS8qIFRoZSBiYXNlIGFkZHJlc3MgYXQgd2hpY2ggdG8gY2FsY3VsYXRlIGRldmljZSBPQklPIGFkZHJlc3Nlcy4gKi8KLSNkZWZpbmUgU1VOX1NCVVNfQlZBRERSICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFNCVVNfT0ZGX01BU0sgICAgICAgICAgMHgwZmZmZmZmZgotCi0vKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgZGV2aWNlIGFkZHJlc3MgZnJvbSBzbG90Ci0gKiBudW1iZXJzICsgb2Zmc2V0cywgYW5kIHZpY2UgdmVyc2EuCi0gKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNidXNfZGV2YWRkcihpbnQgc2xvdG51bSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0gIHJldHVybiAodW5zaWduZWQgbG9uZykgKFNVTl9TQlVTX0JWQUREUisoKHNsb3RudW0pPDwyOCkrKG9mZnNldCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzYnVzX2Rldl9zbG90KHVuc2lnbmVkIGxvbmcgZGV2X2FkZHIpCi17Ci0gIHJldHVybiAoaW50KSAoKChkZXZfYWRkciktU1VOX1NCVVNfQlZBRERSKT4+MjgpOwotfQotCi1zdHJ1Y3Qgc2J1c19idXM7Ci0KLS8qIExpbnV4IFNCVVMgZGV2aWNlIHRhYmxlcyAqLwotc3RydWN0IHNidXNfZGV2IHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlCW9mZGV2OwotCXN0cnVjdCBzYnVzX2J1cwkJKmJ1czsKLQlzdHJ1Y3Qgc2J1c19kZXYJCSpuZXh0OwotCXN0cnVjdCBzYnVzX2RldgkJKmNoaWxkOwotCXN0cnVjdCBzYnVzX2RldgkJKnBhcmVudDsKLQlpbnQgcHJvbV9ub2RlOwkKLQljaGFyIHByb21fbmFtZVs2NF07Ci0JaW50IHNsb3Q7Ci0KLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VbUFJPTVJFR19NQVhdOwotCi0Jc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzIHJlZ19hZGRyc1tQUk9NUkVHX01BWF07Ci0JaW50IG51bV9yZWdpc3RlcnM7Ci0KLQlzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgZGV2aWNlX3Jhbmdlc1tQUk9NUkVHX01BWF07Ci0JaW50IG51bV9kZXZpY2VfcmFuZ2VzOwotCi0JdW5zaWduZWQgaW50IGlycXNbNF07Ci0JaW50IG51bV9pcnFzOwotfTsKLSNkZWZpbmUgdG9fc2J1c19kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBzYnVzX2Rldiwgb2ZkZXYuZGV2KQotCi0vKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgdGhlIFNCdXMocykgZm91bmQgb24gdGhpcyBtYWNoaW5lLiAqLwotc3RydWN0IHNidXNfYnVzIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlCW9mZGV2OwotCXN0cnVjdCBzYnVzX2RldgkJKmRldmljZXM7CS8qIFRyZWUgb2YgU0JVUyBkZXZpY2VzCSovCi0Jc3RydWN0IHNidXNfYnVzCQkqbmV4dDsJCS8qIE5leHQgU0JVUyBpbiBzeXN0ZW0JKi8KLQlpbnQJCQlwcm9tX25vZGU7ICAgICAgLyogT0JQIG5vZGUgb2YgU0JVUwkqLwotCWNoYXIJCQlwcm9tX25hbWVbNjRdOwkvKiBVc3VhbGx5ICJzYnVzIiBvciAic2JpIiAqLwotCWludAkJCWNsb2NrX2ZyZXE7Ci0KLQlzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgc2J1c19yYW5nZXNbUFJPTVJFR19NQVhdOwotCWludCBudW1fc2J1c19yYW5nZXM7Ci0KLQlpbnQgcG9ydGlkOwotfTsKLSNkZWZpbmUgdG9fc2J1cyhkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHNidXNfYnVzLCBvZmRldi5kZXYpCi0KLWV4dGVybiBzdHJ1Y3Qgc2J1c19idXMgKnNidXNfcm9vdDsKLQotLyogRGV2aWNlIHByb2Jpbmcgcm91dGluZXMgY291bGQgZmluZCB0aGVzZSBoYW5keSAqLwotI2RlZmluZSBmb3JfZWFjaF9zYnVzKGJ1cykgXAotICAgICAgICBmb3IoKGJ1cykgPSBzYnVzX3Jvb3Q7IChidXMpOyAoYnVzKT0oYnVzKS0+bmV4dCkKLQotI2RlZmluZSBmb3JfZWFjaF9zYnVzZGV2KGRldmljZSwgYnVzKSBcCi0gICAgICAgIGZvcigoZGV2aWNlKSA9IChidXMpLT5kZXZpY2VzOyAoZGV2aWNlKTsgKGRldmljZSk9KGRldmljZSktPm5leHQpCi0gICAgICAgIAotI2RlZmluZSBmb3JfYWxsX3NidXNkZXYoZGV2aWNlLCBidXMpIFwKLQlmb3IgKChidXMpID0gc2J1c19yb290OyAoYnVzKTsgKGJ1cykgPSAoYnVzKS0+bmV4dCkgXAotCQlmb3IgKChkZXZpY2UpID0gKGJ1cyktPmRldmljZXM7IChkZXZpY2UpOyAoZGV2aWNlKSA9IChkZXZpY2UpLT5uZXh0KQotCi0vKiBEcml2ZXIgRFZNQSBpbnRlcmZhY2VzLiAqLwotI2RlZmluZSBzYnVzX2Nhbl9kbWFfNjRiaXQoc2RldikJKDEpCi0jZGVmaW5lIHNidXNfY2FuX2J1cnN0NjQoc2RldikJCSgxKQotZXh0ZXJuIHZvaWQgc2J1c19zZXRfc2J1czY0KHN0cnVjdCBzYnVzX2RldiAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgc2J1c19maWxsX2RldmljZV9pcnEoc3RydWN0IHNidXNfZGV2ICopOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgKnNidXNfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYgLCBzaXplX3Qgc2l6ZSwKLQkJCQkJICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlKQotewotCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQoJnNkZXYtPm9mZGV2LmRldiwgc2l6ZSwKLQkJCQkgIGRtYV9oYW5kbGUsIEdGUF9BVE9NSUMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2J1c19mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHNidXNfZGV2ICpzZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkJdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlyZXR1cm4gZG1hX2ZyZWVfY29oZXJlbnQoJnNkZXYtPm9mZGV2LmRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwotfQotCi0jZGVmaW5lIFNCVVNfRE1BX0JJRElSRUNUSU9OQUwJRE1BX0JJRElSRUNUSU9OQUwKLSNkZWZpbmUgU0JVU19ETUFfVE9ERVZJQ0UJRE1BX1RPX0RFVklDRQotI2RlZmluZSBTQlVTX0RNQV9GUk9NREVWSUNFCURNQV9GUk9NX0RFVklDRQotI2RlZmluZQlTQlVTX0RNQV9OT05FCQlETUFfTk9ORQotCi0vKiBBbGwgdGhlIHJlc3QgdXNlIHN0cmVhbWluZyBtb2RlIG1hcHBpbmdzLiAqLwotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHNidXNfbWFwX3NpbmdsZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsIHZvaWQgKnB0ciwKLQkJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCXJldHVybiBkbWFfbWFwX3NpbmdsZSgmc2Rldi0+b2ZkZXYuZGV2LCBwdHIsIHNpemUsCi0JCQkgICAgICAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzYnVzX3VubWFwX3NpbmdsZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsCi0JCQkJICAgICBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgIGludCBkaXJlY3Rpb24pCi17Ci0JZG1hX3VubWFwX3NpbmdsZSgmc2Rldi0+b2ZkZXYuZGV2LCBkbWFfYWRkciwgc2l6ZSwKLQkJCSAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNidXNfbWFwX3NnKHN0cnVjdCBzYnVzX2RldiAqc2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgICAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKLXsKLQlyZXR1cm4gZG1hX21hcF9zZygmc2Rldi0+b2ZkZXYuZGV2LCBzZywgbmVudHMsCi0JCQkgIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNidXNfdW5tYXBfc2coc3RydWN0IHNidXNfZGV2ICpzZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCSBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCi17Ci0JZG1hX3VubWFwX3NnKCZzZGV2LT5vZmRldi5kZXYsIHNnLCBuZW50cywKLQkJICAgICAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Ci19Ci0KLS8qIEZpbmFsbHksIGFsbG93IGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiBvZiBzdHJlYW1hYmxlIG1hcHBpbmdzLiAqLwotc3RhdGljIGlubGluZSB2b2lkIHNidXNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHNidXNfZGV2ICpzZGV2LAotCQkJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCi17Ci0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJnNkZXYtPm9mZGV2LmRldiwgZG1hX2hhbmRsZSwgc2l6ZSwKLQkJCQkoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Ci19Ci0jZGVmaW5lIHNidXNfZG1hX3N5bmNfc2luZ2xlIHNidXNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUKLQotc3RhdGljIGlubGluZSB2b2lkIHNidXNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IHNidXNfZGV2ICpzZGV2LAotCQkJCQkJICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCi17Ci0JLyogTm8gZmx1c2hpbmcgbmVlZGVkIHRvIHN5bmMgY3B1IHdyaXRlcyB0byB0aGUgZGV2aWNlLiAgKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNidXNfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsCi0JCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCQkgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQotewotCWRtYV9zeW5jX3NnX2Zvcl9jcHUoJnNkZXYtPm9mZGV2LmRldiwgc2csIG5lbnRzLAotCQkJICAgIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKLX0KLSNkZWZpbmUgc2J1c19kbWFfc3luY19zZyBzYnVzX2RtYV9zeW5jX3NnX2Zvcl9jcHUKLQotc3RhdGljIGlubGluZSB2b2lkIHNidXNfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCQkgICAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQotewotCS8qIE5vIGZsdXNoaW5nIG5lZWRlZCB0byBzeW5jIGNwdSB3cml0ZXMgdG8gdGhlIGRldmljZS4gICovCi19Ci0KLWV4dGVybiB2b2lkIHNidXNfYXJjaF9idXNfcmFuZ2VzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICosIHN0cnVjdCBzYnVzX2J1cyAqKTsKLWV4dGVybiB2b2lkIHNidXNfc2V0dXBfaW9tbXUoc3RydWN0IHNidXNfYnVzICosIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKLWV4dGVybiB2b2lkIHNidXNfc2V0dXBfYXJjaF9wcm9wcyhzdHJ1Y3Qgc2J1c19idXMgKiwgc3RydWN0IGRldmljZV9ub2RlICopOwotZXh0ZXJuIGludCBzYnVzX2FyY2hfcHJlaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHNidXNfYXJjaF9wb3N0aW5pdCh2b2lkKTsKLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfU0JVU19IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9zYnVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NjYXR0ZXJsaXN0LmgKaW5kZXggODFiZDA1OC4uYjdmZWY5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zY2F0dGVybGlzdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2NhdHRlcmxpc3QuaApAQCAtMSwyNyArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9TQ0FUVEVSTElTVF9ICi0jZGVmaW5lIF9TUEFSQzY0X1NDQVRURVJMSVNUX0gKLQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCBzY2F0dGVybGlzdCB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NHCi0JdW5zaWduZWQgbG9uZwlzZ19tYWdpYzsKLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcJcGFnZV9saW5rOwotCXVuc2lnbmVkIGludAlvZmZzZXQ7Ci0KLQl1bnNpZ25lZCBpbnQJbGVuZ3RoOwotCi0JZG1hX2FkZHJfdAlkbWFfYWRkcmVzczsKLQlfX3UzMgkJZG1hX2xlbmd0aDsKLX07Ci0KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKLSNkZWZpbmUgc2dfZG1hX2xlbihzZykgICAgIAkoKHNnKS0+ZG1hX2xlbmd0aCkKLQotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkofjBVTCkKLQotI2RlZmluZSBBUkNIX0hBU19TR19DSEFJTgotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9TQ0FUVEVSTElTVF9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9zY2F0dGVybGlzdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zY3JhdGNocGFkLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NjcmF0Y2hwYWQuaAppbmRleCA1ZThiMDFmLi4yMzY3NWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NjcmF0Y2hwYWQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NjcmF0Y2hwYWQuaApAQCAtMSwxNCArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9TQ1JBVENIUEFEX0gKLSNkZWZpbmUgX1NQQVJDNjRfU0NSQVRDSFBBRF9ICi0KLS8qIFN1bjR2IHNjcmF0Y2hwYWQgcmVnaXN0ZXJzLCBhY2Nlc3NlZCB2aWEgQVNJX1NDUkFUQ0hQQUQuICAqLwotCi0jZGVmaW5lIFNDUkFUQ0hQQURfTU1VX01JU1MJMHgwMCAvKiBTaGFyZWQgd2l0aCBPQlAgLSBzZXQgYnkgT0JQCSAgICAqLwotI2RlZmluZSBTQ1JBVENIUEFEX0NQVUlECTB4MDggLyogU2hhcmVkIHdpdGggT0JQIC0gc2V0IGJ5IGh5cGVydmlzb3IgKi8KLSNkZWZpbmUgU0NSQVRDSFBBRF9VVFNCUkVHMQkweDEwCi0jZGVmaW5lIFNDUkFUQ0hQQURfVVRTQlJFRzIJMHgxOAotCS8qIDB4MjAgYW5kIDB4MjgsIGh5cGVydmlzb3Igb25seS4uLiAqLwotI2RlZmluZSBTQ1JBVENIUEFEX1VOVVNFRDEJMHgzMAotI2RlZmluZSBTQ1JBVENIUEFEX1VOVVNFRDIJMHgzOCAvKiBSZXNlcnZlZCBmb3IgT0JQCQkgICAgKi8KLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfU0NSQVRDSFBBRF9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9zY3JhdGNocGFkLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlY2NvbXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VjY29tcC5oCmluZGV4IDdmY2Q5OTYuLmYyMmYwMmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VjY29tcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VjY29tcC5oCkBAIC0xLDIxICsxIEBACi0jaWZuZGVmIF9BU01fU0VDQ09NUF9ICi0KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPiAvKiBhbHJlYWR5IGRlZmluZXMgVElGXzMyQklUICovCi0KLSNpZm5kZWYgVElGXzMyQklUCi0jZXJyb3IgInVuZXhwZWN0ZWQgVElGXzMyQklUIG9uIHNwYXJjNjQiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotCi0jZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkIF9fTlJfcmVhZAotI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGUgX19OUl93cml0ZQotI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdCBfX05SX2V4aXQKLSNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybiBfX05SX3J0X3NpZ3JldHVybgotCi0jZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkXzMyIF9fTlJfcmVhZAotI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGVfMzIgX19OUl93cml0ZQotI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdF8zMiBfX05SX2V4aXQKLSNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybl8zMiBfX05SX3NpZ3JldHVybgotCi0jZW5kaWYgLyogX0FTTV9TRUNDT01QX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc2VjY29tcC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZWN0aW9ucy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zZWN0aW9ucy5oCmluZGV4IDNmNGI5ZmQuLjcyMTQ5NmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VjdGlvbnMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlY3Rpb25zLmgKQEAgLTEsOSArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9TRUNUSU9OU19ICi0jZGVmaW5lIF9TUEFSQzY0X1NFQ1RJT05TX0gKLQotLyogbm90aGluZyB0byBzZWUsIG1vdmUgYWxvbmcgKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgotCi1leHRlcm4gY2hhciBfc3RhcnRbXTsKLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NlY3Rpb25zLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zZW1hcGhvcmUuaAppbmRleCBkOWIyMDM0Li4zOTM2MmFmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlbWFwaG9yZS5oCkBAIC0xICsxIEBACi0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtLXNwYXJjL3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZW1idWYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VtYnVmLmgKaW5kZXggOTlmMDRlNGUuLmM1NWI5NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VtYnVmLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zZW1idWYuaApAQCAtMSwyMiArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9TRU1CVUZfSAotI2RlZmluZSBfU1BBUkM2NF9TRU1CVUZfSAotCi0vKiAKLSAqIFRoZSBzZW1pZDY0X2RzIHN0cnVjdHVyZSBmb3Igc3BhcmM2NCBhcmNoaXRlY3R1cmUuCi0gKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKLSAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgotICoKLSAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKLSAqIC0gMiBtaXNjZWxsYW5lb3VzIDY0LWJpdCB2YWx1ZXMKLSAqLwotCi1zdHJ1Y3Qgc2VtaWQ2NF9kcyB7Ci0Jc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KLQlfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJLyogbGFzdCBzZW1vcCB0aW1lICovCi0JX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KLQl1bnNpZ25lZCBsb25nCXNlbV9uc2VtczsJCS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCi0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Ci19OwotCi0jZW5kaWYgLyogX1NQQVJDNjRfU0VNQlVGX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc2VtYnVmLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NldHVwLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NldHVwLmgKaW5kZXggNTA1M2RmMy4uNzE0M2QwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZXR1cC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2V0dXAuaApAQCAtMSwxMCArMSBAQAotLyoKLSAqCUp1c3QgYSBwbGFjZSBob2xkZXIuIAotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfU0VUVVBfSAotI2RlZmluZSBfU1BBUkM2NF9TRVRVUF9ICi0KLSNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJMjA0OAotCi0jZW5kaWYgLyogX1NQQVJDNjRfU0VUVVBfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9zZXR1cC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZmFmc3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2ZhZnNyLmgKaW5kZXggZTk2MTM3Yi4uODAzNmZjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZmFmc3IuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NmYWZzci5oCkBAIC0xLDgyICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1NGQUZTUl9ICi0jZGVmaW5lIF9TUEFSQzY0X1NGQUZTUl9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgotCi0vKiBTcGl0ZmlyZSBBc3luY2hyb25vdXMgRmF1bHQgU3RhdHVzIHJlZ2lzdGVyLCBBU0k9MHg0QyBWQTw2MzowPj0weDAgKi8KLQotI2RlZmluZSBTRkFGU1JfTUUJCShfQUMoMSxVTCkgPDwgU0ZBRlNSX01FX1NISUZUKQotI2RlZmluZSBTRkFGU1JfTUVfU0hJRlQJCTMyCi0jZGVmaW5lIFNGQUZTUl9QUklWCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9QUklWX1NISUZUKQotI2RlZmluZSBTRkFGU1JfUFJJVl9TSElGVAkzMQotI2RlZmluZSBTRkFGU1JfSVNBUAkJKF9BQygxLFVMKSA8PCBTRkFGU1JfSVNBUF9TSElGVCkKLSNkZWZpbmUgU0ZBRlNSX0lTQVBfU0hJRlQJMzAKLSNkZWZpbmUgU0ZBRlNSX0VUUAkJKF9BQygxLFVMKSA8PCBTRkFGU1JfRVRQX1NISUZUKQotI2RlZmluZSBTRkFGU1JfRVRQX1NISUZUCTI5Ci0jZGVmaW5lIFNGQUZTUl9JVlVFCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9JVlVFX1NISUZUKQotI2RlZmluZSBTRkFGU1JfSVZVRV9TSElGVAkyOAotI2RlZmluZSBTRkFGU1JfVE8JCShfQUMoMSxVTCkgPDwgU0ZBRlNSX1RPX1NISUZUKQotI2RlZmluZSBTRkFGU1JfVE9fU0hJRlQJCTI3Ci0jZGVmaW5lIFNGQUZTUl9CRVJSCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9CRVJSX1NISUZUKQotI2RlZmluZSBTRkFGU1JfQkVSUl9TSElGVAkyNgotI2RlZmluZSBTRkFGU1JfTERQCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9MRFBfU0hJRlQpCi0jZGVmaW5lIFNGQUZTUl9MRFBfU0hJRlQJMjUKLSNkZWZpbmUgU0ZBRlNSX0NQCQkoX0FDKDEsVUwpIDw8IFNGQUZTUl9DUF9TSElGVCkKLSNkZWZpbmUgU0ZBRlNSX0NQX1NISUZUCQkyNAotI2RlZmluZSBTRkFGU1JfV1AJCShfQUMoMSxVTCkgPDwgU0ZBRlNSX1dQX1NISUZUKQotI2RlZmluZSBTRkFGU1JfV1BfU0hJRlQJCTIzCi0jZGVmaW5lIFNGQUZTUl9FRFAJCShfQUMoMSxVTCkgPDwgU0ZBRlNSX0VEUF9TSElGVCkKLSNkZWZpbmUgU0ZBRlNSX0VEUF9TSElGVAkyMgotI2RlZmluZSBTRkFGU1JfVUUJCShfQUMoMSxVTCkgPDwgU0ZBRlNSX1VFX1NISUZUKQotI2RlZmluZSBTRkFGU1JfVUVfU0hJRlQJCTIxCi0jZGVmaW5lIFNGQUZTUl9DRQkJKF9BQygxLFVMKSA8PCBTRkFGU1JfQ0VfU0hJRlQpCi0jZGVmaW5lIFNGQUZTUl9DRV9TSElGVAkJMjAKLSNkZWZpbmUgU0ZBRlNSX0VUUwkJKF9BQygweGYsVUwpIDw8IFNGQUZTUl9FVFNfU0hJRlQpCi0jZGVmaW5lIFNGQUZTUl9FVFNfU0hJRlQJMTYKLSNkZWZpbmUgU0ZBRlNSX1BTWU5ECQkoX0FDKDB4ZmZmZixVTCkgPDwgU0ZBRlNSX1BTWU5EX1NISUZUKQotI2RlZmluZSBTRkFGU1JfUFNZTkRfU0hJRlQJMAotCi0vKiBVREIgRXJyb3IgUmVnaXN0ZXIsIEFTST0weDdmIFZBPDYzOjA+PTB4MChIaWdoKSwweDE4KExvdykgZm9yIHJlYWQKLSAqICAgICAgICAgICAgICAgICAgICAgQVNJPTB4NzcgVkE8NjM6MD49MHgwKEhpZ2gpLDB4MTgoTG93KSBmb3Igd3JpdGUKLSAqLwotCi0jZGVmaW5lIFVEQkVfVUUJCQkoX0FDKDEsVUwpIDw8IDkpCi0jZGVmaW5lIFVEQkVfQ0UJCQkoX0FDKDEsVUwpIDw8IDgpCi0jZGVmaW5lIFVEQkVfRV9TWU5EUgkJKF9BQygweGZmLFVMKSA8PCAwKQotCi0vKiBUaGUgdHJhcCBoYW5kbGVycyBmb3IgYXN5bmNocm9ub3VzIGVycm9ycyBlbmNvZGUgdGhlIEFGU1IgYW5kCi0gKiBvdGhlciBwaWVjZXMgb2YgaW5mb3JtYXRpb24gaW50byBhIDY0LWJpdCBhcmd1bWVudCBmb3IgQyBjb2RlCi0gKiBlbmNvZGVkIGFzIGZvbGxvd3M6Ci0gKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwgIFVEQl9IICB8ICBVREJfTCAgfCBUTD4xICB8ICBUVCAgfCAgIEFGU1IgICB8Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIDYzICAgICA1NCA1MyAgICAgNDQgICAgNDIgICA0MSAgMzMgMzIgICAgICAgMAotICoKLSAqIFRoZSBBRkFSIGlzIHBhc3NlZCBpbiB1bmNoYW5nZWQuCi0gKi8KLSNkZWZpbmUgU0ZTVEFUX1VEQkhfTUFTSwkoX0FDKDB4M2ZmLFVMKSA8PCBTRlNUQVRfVURCSF9TSElGVCkKLSNkZWZpbmUgU0ZTVEFUX1VEQkhfU0hJRlQJNTQKLSNkZWZpbmUgU0ZTVEFUX1VEQkxfTUFTSwkoX0FDKDB4M2ZmLFVMKSA8PCBTRlNUQVRfVURCSF9TSElGVCkKLSNkZWZpbmUgU0ZTVEFUX1VEQkxfU0hJRlQJNDQKLSNkZWZpbmUgU0ZTVEFUX1RMX0dUX09ORQkoX0FDKDEsVUwpIDw8IFNGU1RBVF9UTF9HVF9PTkVfU0hJRlQpCi0jZGVmaW5lIFNGU1RBVF9UTF9HVF9PTkVfU0hJRlQJNDIKLSNkZWZpbmUgU0ZTVEFUX1RSQVBfVFlQRQkoX0FDKDB4MUZGLFVMKSA8PCBTRlNUQVRfVFJBUF9UWVBFX1NISUZUKQotI2RlZmluZSBTRlNUQVRfVFJBUF9UWVBFX1NISUZUCTMzCi0jZGVmaW5lIFNGU1RBVF9BRlNSX01BU0sJKF9BQygweDFmZmZmZmZmZixVTCkgPDwgU0ZTVEFUX0FGU1JfU0hJRlQpCi0jZGVmaW5lIFNGU1RBVF9BRlNSX1NISUZUCTAKLQotLyogRVNUQVRFIEVycm9yIEVuYWJsZSBSZWdpc3RlciwgQVNJPTB4NGIgVkE8NjM6MD49MHgwICovCi0jZGVmaW5lIEVTVEFURV9FUlJfQ0UJCTB4MSAvKiBDb3JyZWN0YWJsZSBlcnJvcnMgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVTVEFURV9FUlJfTkNFCQkweDIgLyogVE8sIEJFUlIsIExEUCwgRVRQLCBFRFAsIFdQLCBVRSwgSVZVRSAqLwotI2RlZmluZSBFU1RBVEVfRVJSX0lTQVAJCTB4NCAvKiBTeXN0ZW0gYWRkcmVzcyBwYXJpdHkgZXJyb3IgICAgICAgICAgICovCi0jZGVmaW5lIEVTVEFURV9FUlJfQUxMCQkoRVNUQVRFX0VSUl9DRSB8IFwKLQkJCQkgRVNUQVRFX0VSUl9OQ0UgfCBcCi0JCQkJIEVTVEFURV9FUlJfSVNBUCkKLQotLyogVGhlIHZhcmlvdXMgdHJhcCB0eXBlcyB0aGF0IHJlcG9ydCB1c2luZyB0aGUgYWJvdmUgc3RhdGUuICovCi0jZGVmaW5lIFRSQVBfVFlQRV9JQUUJCTB4MDkgLyogSW5zdHJ1Y3Rpb24gQWNjZXNzIEVycm9yICAgICAgICAgICAgICovCi0jZGVmaW5lIFRSQVBfVFlQRV9EQUUJCTB4MzIgLyogRGF0YSBBY2Nlc3MgRXJyb3IgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRSQVBfVFlQRV9DRUUJCTB4NjMgLyogQ29ycmVjdGFibGUgRUNDIEVycm9yICAgICAgICAgICAgICAgICovCi0KLSNlbmRpZiAvKiBfU1BBUkM2NF9TRkFGU1JfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9zZmFmc3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2ZwLW1hY2hpbmUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2ZwLW1hY2hpbmUuaAppbmRleCBjOTMzMWIwLi43YmJjNGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NmcC1tYWNoaW5lLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zZnAtbWFjaGluZS5oCkBAIC0xLDkzICsxIEBACi0vKiBNYWNoaW5lLWRlcGVuZGVudCBzb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBkZWZpbml0aW9ucy4KLSAgIFNwYXJjNjQga2VybmVsIHZlcnNpb24uCi0gICBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCwxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCi0gICBDb250cmlidXRlZCBieSBSaWNoYXJkIEhlbmRlcnNvbiAocnRoQGN5Z251cy5jb20pLAotCQkgIEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KSBhbmQKLQkJICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pLgotCi0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQotICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCi0gICBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KLQotI2lmbmRlZiBfU0ZQX01BQ0hJTkVfSAotI2RlZmluZSBfU0ZQX01BQ0hJTkVfSAotICAgCi0jZGVmaW5lIF9GUF9XX1RZUEVfU0laRQkJNjQKLSNkZWZpbmUgX0ZQX1dfVFlQRQkJdW5zaWduZWQgbG9uZwotI2RlZmluZSBfRlBfV1NfVFlQRQkJc2lnbmVkIGxvbmcKLSNkZWZpbmUgX0ZQX0lfVFlQRQkJbG9uZwotCi0jZGVmaW5lIF9GUF9NVUxfTUVBVF9TKFIsWCxZKQkJCQkJXAotICBfRlBfTVVMX01FQVRfMV9pbW0oX0ZQX1dGUkFDQklUU19TLFIsWCxZKQotI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkJCQkJCVwKLSAgX0ZQX01VTF9NRUFUXzFfd2lkZShfRlBfV0ZSQUNCSVRTX0QsUixYLFksdW11bF9wcG1tKQotI2RlZmluZSBfRlBfTVVMX01FQVRfUShSLFgsWSkJCQkJCVwKLSAgX0ZQX01VTF9NRUFUXzJfd2lkZShfRlBfV0ZSQUNCSVRTX1EsUixYLFksdW11bF9wcG1tKQotCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKQlfRlBfRElWX01FQVRfMV9pbW0oUyxSLFgsWSxfRlBfRElWX0hFTFBfaW1tKQotI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfdWRpdl9ub3JtKEQsUixYLFkpCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF9RKFIsWCxZKQlfRlBfRElWX01FQVRfMl91ZGl2KFEsUixYLFkpCi0KLSNkZWZpbmUgX0ZQX05BTkZSQUNfUwkJKChfRlBfUU5BTkJJVF9TIDw8IDEpIC0gMSkKLSNkZWZpbmUgX0ZQX05BTkZSQUNfRAkJKChfRlBfUU5BTkJJVF9EIDw8IDEpIC0gMSkKLSNkZWZpbmUgX0ZQX05BTkZSQUNfUQkJKChfRlBfUU5BTkJJVF9RIDw8IDEpIC0gMSksIC0xCi0jZGVmaW5lIF9GUF9OQU5TSUdOX1MJCTAKLSNkZWZpbmUgX0ZQX05BTlNJR05fRAkJMAotI2RlZmluZSBfRlBfTkFOU0lHTl9RCQkwCi0KLSNkZWZpbmUgX0ZQX0tFRVBOQU5GUkFDUCAxCi0KLS8qIElmIG9uZSBOYU4gaXMgc2lnbmFsaW5nIGFuZCB0aGUgb3RoZXIgaXMgbm90LAotICogd2UgY2hvb3NlIHRoYXQgb25lLCBvdGhlcndpc2Ugd2UgY2hvb3NlIFguCi0gKi8KLS8qIEZvciBfUXBfKiBhbmQgX1FfKiwgdGhpcyBzaG91bGQgcHJlZmVyIFgsIGZvcgotICogQ1BVIGluc3RydWN0aW9uIGVtdWxhdGlvbiB0aGlzIHNob3VsZCBwcmVmZXIgWS4KLSAqIChzZWUgU1BBTXY5IEIuMi4yIHNlY3Rpb24pLgotICovCi0jZGVmaW5lIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZLCBPUCkJCQlcCi0gIGRvIHsJCQkJCQkJCVwKLSAgICBpZiAoKF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWSkgJiBfRlBfUU5BTkJJVF8jI2ZzKQkJXAotCSYmICEoX0ZQX0ZSQUNfSElHSF9SQVdfIyNmcyhYKSAmIF9GUF9RTkFOQklUXyMjZnMpKQlcCi0gICAgICB7CQkJCQkJCQlcCi0JUiMjX3MgPSBYIyNfczsJCQkJCQlcCi0JX0ZQX0ZSQUNfQ09QWV8jI3djKFIsWCk7CQkJCVwKLSAgICAgIH0JCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCVwKLQlSIyNfcyA9IFkjI19zOwkJCQkJCVwKLQlfRlBfRlJBQ19DT1BZXyMjd2MoUixZKTsJCQkJXAotICAgICAgfQkJCQkJCQkJXAotICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIE9idGFpbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAqLwotI2lmbmRlZiBGUF9ST1VORE1PREUKLSNkZWZpbmUgRlBfUk9VTkRNT0RFCSgoY3VycmVudF90aHJlYWRfaW5mbygpLT54ZnNyWzBdID4+IDMwKSAmIDB4MykKLSNlbmRpZgotCi0vKiBFeGNlcHRpb24gZmxhZ3MuICovCi0jZGVmaW5lIEZQX0VYX0lOVkFMSUQJCSgxIDw8IDQpCi0jZGVmaW5lIEZQX0VYX09WRVJGTE9XCQkoMSA8PCAzKQotI2RlZmluZSBGUF9FWF9VTkRFUkZMT1cJCSgxIDw8IDIpCi0jZGVmaW5lIEZQX0VYX0RJVlpFUk8JCSgxIDw8IDEpCi0jZGVmaW5lIEZQX0VYX0lORVhBQ1QJCSgxIDw8IDApCi0KLSNkZWZpbmUgRlBfSEFORExFX0VYQ0VQVElPTlMgcmV0dXJuIF9mZXgKLQotI2RlZmluZSBGUF9JTkhJQklUX1JFU1VMVFMgKChjdXJyZW50X3RocmVhZF9pbmZvKCktPnhmc3JbMF0gPj4gMjMpICYgX2ZleCkKLQotI2RlZmluZSBGUF9UUkFQUElOR19FWENFUFRJT05TICgoY3VycmVudF90aHJlYWRfaW5mbygpLT54ZnNyWzBdID4+IDIzKSAmIDB4MWYpCi0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1zcGFyYy9zZnAtbWFjaGluZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2htYnVmLmgKaW5kZXggNjFjMmVmNC4uMGM1NGEyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaG1idWYuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NobWJ1Zi5oCkBAIC0xLDM4ICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1NITUJVRl9ICi0jZGVmaW5lIF9TUEFSQzY0X1NITUJVRl9ICi0KLS8qIAotICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciBzcGFyYzY0IGFyY2hpdGVjdHVyZS4KLSAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAotICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCi0gKgotICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgotICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcwotICovCi0KLXN0cnVjdCBzaG1pZDY0X2RzIHsKLQlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCi0JX19rZXJuZWxfdGltZV90CQlzaG1fYXRpbWU7CS8qIGxhc3QgYXR0YWNoIHRpbWUgKi8KLQlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLwotCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCi0Jc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLwotCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KLQlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCi0JdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KLQl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7Ci0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOwotfTsKLQotc3RydWN0IHNobWluZm82NCB7Ci0JdW5zaWduZWQgbG9uZwlzaG1tYXg7Ci0JdW5zaWduZWQgbG9uZwlzaG1taW47Ci0JdW5zaWduZWQgbG9uZwlzaG1tbmk7Ci0JdW5zaWduZWQgbG9uZwlzaG1zZWc7Ci0JdW5zaWduZWQgbG9uZwlzaG1hbGw7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Ci19OwotCi0jZW5kaWYgLyogX1NQQVJDNjRfU0hNQlVGX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc2htYnVmLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NobXBhcmFtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NobXBhcmFtLmgKaW5kZXggMWVkMGQ2Ny4uNWZhM2E5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaG1wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2htcGFyYW0uaApAQCAtMSwxMCArMSBAQAotI2lmbmRlZiBfQVNNU1BBUkM2NF9TSE1QQVJBTV9ICi0jZGVmaW5lIF9BU01TUEFSQzY0X1NITVBBUkFNX0gKLQotI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgotCi0jZGVmaW5lIF9fQVJDSF9GT1JDRV9TSE1MQkEJMQotLyogYXR0YWNoIGFkZHIgYSBtdWx0aXBsZSBvZiB0aGlzICovCi0jZGVmaW5lCVNITUxCQQkoKFBBR0VfU0laRSA+IEwxRENBQ0hFX1NJWkUpID8gUEFHRV9TSVpFIDogTDFEQ0FDSEVfU0laRSkKLQotI2VuZGlmIC8qIF9BU01TUEFSQzY0X1NITVBBUkFNX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc2htcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnY29udGV4dC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdjb250ZXh0LmgKaW5kZXggMWM4NjhkNi4uNWIxNmRjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdjb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdjb250ZXh0LmgKQEAgLTEsODcgKzEgQEAKLSNpZm5kZWYgX19TUEFSQzY0X1NJR0NPTlRFWFRfSAotI2RlZmluZSBfX1NQQVJDNjRfU0lHQ09OVEVYVF9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2VuZGlmCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNkZWZpbmUgX19TVU5PU19NQVhXSU4gICAzMQotCi0vKiBUaGlzIGlzIHdoYXQgU3VuT1MgZG9lcywgc28gc2hhbGwgSSB1bmxlc3Mgd2UgdXNlIG5ldyAzMmJpdCBzaWduYWxzIG9yIHJ0IHNpZ25hbHMuICovCi1zdHJ1Y3Qgc2lnY29udGV4dDMyIHsKLQlpbnQgc2lnY19vbnN0YWNrOyAgICAgIC8qIHN0YXRlIHRvIHJlc3RvcmUgKi8KLQlpbnQgc2lnY19tYXNrOyAgICAgICAgIC8qIHNpZ21hc2sgdG8gcmVzdG9yZSAqLwotCWludCBzaWdjX3NwOyAgICAgICAgICAgLyogc3RhY2sgcG9pbnRlciAqLwotCWludCBzaWdjX3BjOyAgICAgICAgICAgLyogcHJvZ3JhbSBjb3VudGVyICovCi0JaW50IHNpZ2NfbnBjOyAgICAgICAgICAvKiBuZXh0IHByb2dyYW0gY291bnRlciAqLwotCWludCBzaWdjX3BzcjsgICAgICAgICAgLyogZm9yIGNvbmRpdGlvbiBjb2RlcyBldGMgKi8KLQlpbnQgc2lnY19nMTsgICAgICAgICAgIC8qIFVzZXIgdXNlcyB0aGVzZSB0d28gcmVnaXN0ZXJzICovCi0JaW50IHNpZ2NfbzA7ICAgICAgICAgICAvKiB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4gKi8KLQotCS8qIE5vdyBjb21lcyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHVzZXJzIHdpbmRvdyBzZXQKLQkgKiBhdCB0aGUgdGltZSBvZiB0aGUgc2lnbmFsLgotCSAqLwotCWludCBzaWdjX29zd2luczsgICAgICAgLyogb3V0c3RhbmRpbmcgd2luZG93cyAqLwotCi0JLyogc3RhY2sgcHRycyBmb3IgZWFjaCByZWd3aW4gYnVmICovCi0JdW5zaWduZWQgc2lnY19zcGJ1ZltfX1NVTk9TX01BWFdJTl07Ci0KLQkvKiBXaW5kb3dzIHRvIHJlc3RvcmUgYWZ0ZXIgc2lnbmFsICovCi0Jc3RydWN0IHJlZ193aW5kb3czMiBzaWdjX3didWZbX19TVU5PU19NQVhXSU5dOwotfTsKLQotI2VuZGlmCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qIFRoaXMgaXMgd2hhdCB3ZSB1c2UgZm9yIDMyYml0IG5ldyBub24tcnQgc2lnbmFscy4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludCBwc3I7Ci0JCXVuc2lnbmVkIGludCBwYzsKLQkJdW5zaWduZWQgaW50IG5wYzsKLQkJdW5zaWduZWQgaW50IHk7Ci0JCXVuc2lnbmVkIGludCB1X3JlZ3NbMTZdOyAvKiBnbG9iYWxzIGFuZCBpbnMgKi8KLQl9CQkJc2lfcmVnczsKLQlpbnQJCQlzaV9tYXNrOwotfSBfX3NpZ2luZm8zMl90OwotCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkICAgaW50IHNpX2Zsb2F0X3JlZ3MgWzY0XTsKLQl1bnNpZ25lZCAgIGxvbmcgc2lfZnNyOwotCXVuc2lnbmVkICAgbG9uZyBzaV9nc3I7Ci0JdW5zaWduZWQgICBsb25nIHNpX2ZwcnM7Ci19IF9fc2lnaW5mb19mcHVfdDsKLQotLyogVGhpcyBpcyB3aGF0IFN1bk9TIGRvZXNuJ3QsIHNvIHdlIGhhdmUgdG8gd3JpdGUgdGhpcyBhbG9uZQotICAgYW5kIGRvIGl0IHByb3Blcmx5LiAqLwotc3RydWN0IHNpZ2NvbnRleHQgewotCS8qIFRoZSBzaXplIG9mIHRoaXMgYXJyYXkgaGFzIHRvIG1hdGNoIFNJX01BWF9TSVpFIGZyb20gc2lnaW5mby5oICovCi0JY2hhcgkJCXNpZ2NfaW5mb1sxMjhdOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGxvbmcJdV9yZWdzWzE2XTsgLyogZ2xvYmFscyBhbmQgaW5zICovCi0JCXVuc2lnbmVkIGxvbmcJdHN0YXRlOwotCQl1bnNpZ25lZCBsb25nCXRwYzsKLQkJdW5zaWduZWQgbG9uZwl0bnBjOwotCQl1bnNpZ25lZCBpbnQJeTsKLQkJdW5zaWduZWQgaW50CWZwcnM7Ci0JfQkJCXNpZ2NfcmVnczsKLQlfX3NpZ2luZm9fZnB1X3QgKglzaWdjX2ZwdV9zYXZlOwotCXN0cnVjdCB7Ci0JCXZvaWQJKglzc19zcDsKLQkJaW50CQlzc19mbGFnczsKLQkJdW5zaWduZWQgbG9uZwlzc19zaXplOwotCX0JCQlzaWdjX3N0YWNrOwotCXVuc2lnbmVkIGxvbmcJCXNpZ2NfbWFzazsKLX07Ci0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotI2VuZGlmIC8qICEoX19TUEFSQzY0X1NJR0NPTlRFWFRfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc2lnY29udGV4dC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaAppbmRleCBjOTZlNmMzLi44ZmZkNmViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaApAQCAtMSwzMiArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9TSUdJTkZPX0gKLSNkZWZpbmUgX1NQQVJDNjRfU0lHSU5GT19ICi0KLSNkZWZpbmUgU0lfUEFEX1NJWkUzMgkoKFNJX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDMpCi0KLSNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUJKDQgKiBzaXplb2YoaW50KSkKLSNkZWZpbmUgX19BUkNIX1NJX1RSQVBOTwotI2RlZmluZSBfX0FSQ0hfU0lfQkFORF9UIGludAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+Ci0KLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0KLXN0cnVjdCBjb21wYXRfc2lnaW5mbzsKLQotI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2RlZmluZSBTSV9OT0lORk8JMzI3NjcJCS8qIG5vIGluZm9ybWF0aW9uIGluIHNpZ2luZm9fdCAqLwotCi0vKgotICogU0lHRU1UIHNpX2NvZGVzCi0gKi8KLSNkZWZpbmUgRU1UX1RBR09WRgkoX19TSV9GQVVMVHwxKQkvKiB0YWcgb3ZlcmZsb3cgKi8KLSNkZWZpbmUgTlNJR0VNVAkJMQotCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tc3BhcmMvc2lnaW5mby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmgKaW5kZXggMmE3Yzc5My4uNzk3MDVlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ25hbC5oCkBAIC0xLDE5NCArMSBAQAotI2lmbmRlZiBfQVNNU1BBUkM2NF9TSUdOQUxfSAotI2RlZmluZSBfQVNNU1BBUkM2NF9TSUdOQUxfSAotCi0jaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2VuZGlmCi0jZW5kaWYKLQotLyogT24gdGhlIFNwYXJjIHRoZSBzaWduYWwgaGFuZGxlcnMgZ2V0IHBhc3NlZCBhICdzdWItc2lnbmFsJyBjb2RlCi0gKiBmb3IgY2VydGFpbiBzaWduYWwgdHlwZXMsIHdoaWNoIHdlIGRvY3VtZW50IGhlcmUuCi0gKi8KLSNkZWZpbmUgU0lHSFVQCQkgMQotI2RlZmluZSBTSUdJTlQJCSAyCi0jZGVmaW5lIFNJR1FVSVQJCSAzCi0jZGVmaW5lIFNJR0lMTAkJIDQKLSNkZWZpbmUgICAgU1VCU0lHX1NUQUNLICAgICAgIDAKLSNkZWZpbmUgICAgU1VCU0lHX0lMTElOU1QgICAgIDIKLSNkZWZpbmUgICAgU1VCU0lHX1BSSVZJTlNUICAgIDMKLSNkZWZpbmUgICAgU1VCU0lHX0JBRFRSQVAodCkgICgweDgwICsgKHQpKQotCi0jZGVmaW5lIFNJR1RSQVAJCSA1Ci0jZGVmaW5lIFNJR0FCUlQJCSA2Ci0jZGVmaW5lIFNJR0lPVAkJIDYKLQotI2RlZmluZSBTSUdFTVQgICAgICAgICAgIDcKLSNkZWZpbmUgICAgU1VCU0lHX1RBRyAgICAxMAotCi0jZGVmaW5lIFNJR0ZQRQkJIDgKLSNkZWZpbmUgICAgU1VCU0lHX0ZQRElTQUJMRUQgICAgIDB4NDAwCi0jZGVmaW5lICAgIFNVQlNJR19GUEVSUk9SICAgICAgICAweDQwNAotI2RlZmluZSAgICBTVUJTSUdfRlBJTlRPVkZMICAgICAgMHgwMDEKLSNkZWZpbmUgICAgU1VCU0lHX0ZQU1RTSUcgICAgICAgIDB4MDAyCi0jZGVmaW5lICAgIFNVQlNJR19JRElWWkVSTyAgICAgICAweDAxNAotI2RlZmluZSAgICBTVUJTSUdfRlBJTkVYQUNUICAgICAgMHgwYzQKLSNkZWZpbmUgICAgU1VCU0lHX0ZQRElWWkVSTyAgICAgIDB4MGM4Ci0jZGVmaW5lICAgIFNVQlNJR19GUFVORkxPVyAgICAgICAweDBjYwotI2RlZmluZSAgICBTVUJTSUdfRlBPUEVSUk9SICAgICAgMHgwZDAKLSNkZWZpbmUgICAgU1VCU0lHX0ZQT1ZGTE9XICAgICAgIDB4MGQ0Ci0KLSNkZWZpbmUgU0lHS0lMTAkJIDkKLSNkZWZpbmUgU0lHQlVTICAgICAgICAgIDEwCi0jZGVmaW5lICAgIFNVQlNJR19CVVNUSU1FT1VUICAgIDEKLSNkZWZpbmUgICAgU1VCU0lHX0FMSUdOTUVOVCAgICAgMgotI2RlZmluZSAgICBTVUJTSUdfTUlTQ0VSUk9SICAgICA1Ci0KLSNkZWZpbmUgU0lHU0VHVgkJMTEKLSNkZWZpbmUgICAgU1VCU0lHX05PTUFQUElORyAgICAgMwotI2RlZmluZSAgICBTVUJTSUdfUFJPVEVDVElPTiAgICA0Ci0jZGVmaW5lICAgIFNVQlNJR19TRUdFUlJPUiAgICAgIDUKLQotI2RlZmluZSBTSUdTWVMJCTEyCi0KLSNkZWZpbmUgU0lHUElQRQkJMTMKLSNkZWZpbmUgU0lHQUxSTQkJMTQKLSNkZWZpbmUgU0lHVEVSTQkJMTUKLSNkZWZpbmUgU0lHVVJHICAgICAgICAgIDE2Ci0KLS8qIFN1bk9TIHZhbHVlcyB3aGljaCBkZXZpYXRlIGZyb20gdGhlIExpbnV4L2kzODYgb25lcyAqLwotI2RlZmluZSBTSUdTVE9QCQkxNwotI2RlZmluZSBTSUdUU1RQCQkxOAotI2RlZmluZSBTSUdDT05UCQkxOQotI2RlZmluZSBTSUdDSExECQkyMAotI2RlZmluZSBTSUdUVElOCQkyMQotI2RlZmluZSBTSUdUVE9VCQkyMgotI2RlZmluZSBTSUdJTwkJMjMKLSNkZWZpbmUgU0lHUE9MTAkJU0lHSU8gICAvKiBTeXNWIG5hbWUgZm9yIFNJR0lPICovCi0jZGVmaW5lIFNJR1hDUFUJCTI0Ci0jZGVmaW5lIFNJR1hGU1oJCTI1Ci0jZGVmaW5lIFNJR1ZUQUxSTQkyNgotI2RlZmluZSBTSUdQUk9GCQkyNwotI2RlZmluZSBTSUdXSU5DSAkyOAotI2RlZmluZSBTSUdMT1NUCQkyOQotI2RlZmluZSBTSUdQV1IJCVNJR0xPU1QKLSNkZWZpbmUgU0lHVVNSMQkJMzAKLSNkZWZpbmUgU0lHVVNSMgkJMzEKLQotLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKLSAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCi0KLSNkZWZpbmUgX19PTERfTlNJRwkzMgotI2RlZmluZSBfX05FV19OU0lHICAgICAgNjQKLSNkZWZpbmUgX05TSUdfQlBXICAgICAJNjQKLSNkZWZpbmUgX05TSUdfV09SRFMgICAJKF9fTkVXX05TSUcgLyBfTlNJR19CUFcpCi0KLSNkZWZpbmUgU0lHUlRNSU4gICAgICAgMzIKLSNkZWZpbmUgU0lHUlRNQVggICAgICAgX19ORVdfTlNJRwotCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fV0FOVF9QT1NJWDFCX1NJR05BTFNfXykKLSNkZWZpbmUgX05TSUcJCQlfX05FV19OU0lHCi0jZGVmaW5lIF9fbmV3X3NpZ3NldF90CQlzaWdzZXRfdAotI2RlZmluZSBfX25ld19zaWdhY3Rpb24JCXNpZ2FjdGlvbgotI2RlZmluZSBfX25ld19zaWdhY3Rpb24zMglzaWdhY3Rpb24zMgotI2RlZmluZSBfX29sZF9zaWdzZXRfdAkJb2xkX3NpZ3NldF90Ci0jZGVmaW5lIF9fb2xkX3NpZ2FjdGlvbgkJb2xkX3NpZ2FjdGlvbgotI2RlZmluZSBfX29sZF9zaWdhY3Rpb24zMglvbGRfc2lnYWN0aW9uMzIKLSNlbHNlCi0jZGVmaW5lIF9OU0lHCQkJX19PTERfTlNJRwotI2RlZmluZSBOU0lHCQkJX05TSUcKLSNkZWZpbmUgX19vbGRfc2lnc2V0X3QJCXNpZ3NldF90Ci0jZGVmaW5lIF9fb2xkX3NpZ2FjdGlvbgkJc2lnYWN0aW9uCi0jZGVmaW5lIF9fb2xkX3NpZ2FjdGlvbjMyCXNpZ2FjdGlvbjMyCi0jZW5kaWYKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fb2xkX3NpZ3NldF90OyAgICAgICAgICAgIC8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgIHVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKLX0gX19uZXdfc2lnc2V0X3Q7Ci0KLS8qIEEgU3VuT1Mgc2lnc3RhY2sgKi8KLXN0cnVjdCBzaWdzdGFjayB7Ci0JLyogWFhYIDMyLWJpdCBwb2ludGVycyBwaW5oZWFkIFhYWCAqLwotCWNoYXIgKnRoZV9zdGFjazsKLQlpbnQgICBjdXJfc3RhdHVzOwotfTsKLQotLyogU2lndmVjIGZsYWdzICovCi0jZGVmaW5lIF9TVl9TU1RBQ0sgICAgMXUgICAgLyogVGhpcyBzaWduYWwgaGFuZGxlciBzaG91bGQgdXNlIHNpZy1zdGFjayAqLwotI2RlZmluZSBfU1ZfSU5UUiAgICAgIDJ1ICAgIC8qIFNpZyByZXR1cm4gc2hvdWxkIG5vdCByZXN0YXJ0IHN5c3RlbSBjYWxsICovCi0jZGVmaW5lIF9TVl9SRVNFVCAgICAgNHUgICAgLyogU2V0IGhhbmRsZXIgdG8gU0lHX0RGTCB1cG9uIHRha2VuIHNpZ25hbCAqLwotI2RlZmluZSBfU1ZfSUdOQ0hJTEQgIDh1ICAgIC8qIERvIG5vdCBzZW5kIFNJR0NITEQgKi8KLQotLyoKLSAqIHNhX2ZsYWdzIHZhbHVlczogU0FfU1RBQ0sgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQsIGJ1dCB3aWxsIGFsbG93IHRoZQotICogdXNhZ2Ugb2Ygc2lnbmFsIHN0YWNrcyBieSB1c2luZyB0aGUgKG5vdyBvYnNvbGV0ZSkgc2FfcmVzdG9yZXIgZmllbGQgaW4KLSAqIHRoZSBzaWdhY3Rpb24gc3RydWN0dXJlIGFzIGEgc3RhY2sgcG9pbnRlci4gVGhpcyBpcyBub3cgcG9zc2libGUgZHVlIHRvCi0gKiB0aGUgY2hhbmdlcyBpbiBzaWduYWwgaGFuZGxpbmcuIExCVCAwMTA0OTMuCi0gKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKLSAqLwotI2RlZmluZSBTQV9OT0NMRFNUT1AJX1NWX0lHTkNISUxECi0jZGVmaW5lIFNBX1NUQUNLCV9TVl9TU1RBQ0sKLSNkZWZpbmUgU0FfT05TVEFDSwlfU1ZfU1NUQUNLCi0jZGVmaW5lIFNBX1JFU1RBUlQJX1NWX0lOVFIKLSNkZWZpbmUgU0FfT05FU0hPVAlfU1ZfUkVTRVQKLSNkZWZpbmUgU0FfTk9NQVNLCTB4MjB1Ci0jZGVmaW5lIFNBX05PQ0xEV0FJVCAgICAweDEwMHUKLSNkZWZpbmUgU0FfU0lHSU5GTyAgICAgIDB4MjAwdQotCi0KLSNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDB4MDEJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDB4MDIJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMHgwNAkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KLQotLyogCi0gKiBzaWdhbHRzdGFjayBjb250cm9scwotICovCi0jZGVmaW5lIFNTX09OU1RBQ0sJMQotI2RlZmluZSBTU19ESVNBQkxFCTIKLQotI2RlZmluZSBNSU5TSUdTVEtTWgk0MDk2Ci0jZGVmaW5lIFNJR1NUS1NaCTE2Mzg0Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KLQotc3RydWN0IF9fbmV3X3NpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3QJCXNhX2hhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZwkJc2FfZmxhZ3M7Ci0JX19zaWdyZXN0b3JlX3QgCQlzYV9yZXN0b3JlcjsgIC8qIG5vdCB1c2VkIGJ5IExpbnV4L1NQQVJDIHlldCAqLwotCV9fbmV3X3NpZ3NldF90CQlzYV9tYXNrOwotfTsKLQotc3RydWN0IF9fb2xkX3NpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3QgIAlzYV9oYW5kbGVyOwotCV9fb2xkX3NpZ3NldF90ICAJc2FfbWFzazsKLQl1bnNpZ25lZCBsb25nICAgCXNhX2ZsYWdzOwotCXZvaWQgCQkJKCpzYV9yZXN0b3Jlcikodm9pZCk7ICAgICAvKiBub3QgdXNlZCBieSBMaW51eC9TUEFSQyB5ZXQgKi8KLX07Ci0KLXR5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKLQl2b2lkCQkJX191c2VyICpzc19zcDsKLQlpbnQJCQlzc19mbGFnczsKLQlzaXplX3QJCQlzc19zaXplOwotfSBzdGFja190OwotCi0jaWZkZWYgX19LRVJORUxfXwotCi1zdHJ1Y3Qga19zaWdhY3Rpb24gewotCXN0cnVjdCBfX25ld19zaWdhY3Rpb24gCXNhOwotCXZvaWQgX191c2VyCQkqa2FfcmVzdG9yZXI7Ci19OwotCi0jZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qICEoX19LRVJORUxfXykgKi8KLQotI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotCi0jZW5kaWYgLyogIShfQVNNU1BBUkM2NF9TSUdOQUxfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaAppbmRleCBjZDAzMTFiLi41MDk1YTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmgKQEAgLTEsNjQgKzEgQEAKLS8qIHNtcC5oOiBTcGFyYzY0IHNwZWNpZmljIFNNUCBzdHVmZi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDIwMDggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfU01QX0gKLSNkZWZpbmUgX1NQQVJDNjRfU01QX0gKLQotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxhc20vYXNpLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YXJmaXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLQotI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKgotICoJUHJpdmF0ZSByb3V0aW5lcy9kYXRhCi0gKi8KLSAKLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgotCi1ERUNMQVJFX1BFUl9DUFUoY3B1bWFza190LCBjcHVfc2libGluZ19tYXApOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107Ci1leHRlcm4gaW50IHNwYXJjNjRfbXVsdGlfY29yZTsKLQotLyoKLSAqCUdlbmVyYWwgZnVuY3Rpb25zIHRoYXQgZWFjaCBob3N0IHN5c3RlbSBtdXN0IHByb3ZpZGUuCi0gKi8KLQotZXh0ZXJuIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7Ci0jZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQotCi1leHRlcm4gdm9pZCBzbXBfZmlsbF9pbl9zaWJfY29yZV9tYXBzKHZvaWQpOwotZXh0ZXJuIHZvaWQgY3B1X3BsYXlfZGVhZCh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgc21wX2ZldGNoX2dsb2JhbF9yZWdzKHZvaWQpOwotCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1leHRlcm4gaW50IF9fY3B1X2Rpc2FibGUodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7Ci0jZW5kaWYKLQotI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotCi0jZWxzZQotCi0jZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCi0jZGVmaW5lIHNtcF9maWxsX2luX3NpYl9jb3JlX21hcHMoKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNtcF9mZXRjaF9nbG9iYWxfcmVncygpIGRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qICEoQ09ORklHX1NNUCkgKi8KLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfU01QX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NtcC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2V0LmgKaW5kZXggNWFmNjg4Zi4uMTNlMGQ1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NvY2tldC5oCkBAIC0xLDU3ICsxIEBACi0jaWZuZGVmIF9BU01fU09DS0VUX0gKLSNkZWZpbmUgX0FTTV9TT0NLRVRfSAotCi0jaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KLQotLyogRm9yIHNldHNvY2tvcHQoMikgKi8KLSNkZWZpbmUgU09MX1NPQ0tFVAkweGZmZmYKLQotI2RlZmluZSBTT19ERUJVRwkweDAwMDEKLSNkZWZpbmUgU09fUEFTU0NSRUQJMHgwMDAyCi0jZGVmaW5lIFNPX1JFVVNFQUREUgkweDAwMDQKLSNkZWZpbmUgU09fS0VFUEFMSVZFCTB4MDAwOAotI2RlZmluZSBTT19ET05UUk9VVEUJMHgwMDEwCi0jZGVmaW5lIFNPX0JST0FEQ0FTVAkweDAwMjAKLSNkZWZpbmUgU09fUEVFUkNSRUQJMHgwMDQwCi0jZGVmaW5lIFNPX0xJTkdFUgkweDAwODAKLSNkZWZpbmUgU09fT09CSU5MSU5FCTB4MDEwMAotLyogVG8gYWRkIDojZGVmaW5lIFNPX1JFVVNFUE9SVCAweDAyMDAgKi8KLSNkZWZpbmUgU09fQlNEQ09NUEFUICAgIDB4MDQwMAotI2RlZmluZSBTT19SQ1ZMT1dBVCAgICAgMHgwODAwCi0jZGVmaW5lIFNPX1NORExPV0FUICAgICAweDEwMDAKLSNkZWZpbmUgU09fUkNWVElNRU8gICAgIDB4MjAwMAotI2RlZmluZSBTT19TTkRUSU1FTyAgICAgMHg0MDAwCi0jZGVmaW5lIFNPX0FDQ0VQVENPTk4JMHg4MDAwCi0KLSNkZWZpbmUgU09fU05EQlVGCTB4MTAwMQotI2RlZmluZSBTT19SQ1ZCVUYJMHgxMDAyCi0jZGVmaW5lIFNPX1NOREJVRkZPUkNFCTB4MTAwYQotI2RlZmluZSBTT19SQ1ZCVUZGT1JDRQkweDEwMGIKLSNkZWZpbmUgU09fRVJST1IJMHgxMDA3Ci0jZGVmaW5lIFNPX1RZUEUJCTB4MTAwOAotCi0vKiBMaW51eCBzcGVjaWZpYywga2VlcCB0aGUgc2FtZS4gKi8KLSNkZWZpbmUgU09fTk9fQ0hFQ0sJMHgwMDBiCi0jZGVmaW5lIFNPX1BSSU9SSVRZCTB4MDAwYwotCi0jZGVmaW5lIFNPX0JJTkRUT0RFVklDRSAweDAwMGQKLQotI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSCTB4MDAxYQotI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSICAgICAgICAweDAwMWIKLQotI2RlZmluZSBTT19QRUVSTkFNRQkJMHgwMDFjCi0jZGVmaW5lIFNPX1RJTUVTVEFNUAkJMHgwMDFkCi0jZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAotCi0jZGVmaW5lIFNPX1BFRVJTRUMJCTB4MDAxZQotI2RlZmluZSBTT19QQVNTU0VDCQkweDAwMWYKLSNkZWZpbmUgU09fVElNRVNUQU1QTlMJCTB4MDAyMQotI2RlZmluZSBTQ01fVElNRVNUQU1QTlMJCVNPX1RJTUVTVEFNUE5TCi0KLS8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCi0jZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkweDUwMDEKLSNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMHg1MDAyCi0jZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSwkJMHg1MDA0Ci0KLSNkZWZpbmUgU09fTUFSSwkJCTB4MDAyMgotI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NvY2tpb3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2lvcy5oCmluZGV4IGM3ZDk5MDAuLjJjYjRiNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2lvcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2lvcy5oCkBAIC0xLDE0ICsxIEBACi0jaWZuZGVmIF9BU01fU1BBUkM2NF9TT0NLSU9TX0gKLSNkZWZpbmUgX0FTTV9TUEFSQzY0X1NPQ0tJT1NfSAotCi0vKiBTb2NrZXQtbGV2ZWwgSS9PIGNvbnRyb2wgY2FsbHMuICovCi0jZGVmaW5lIEZJT1NFVE9XTiAJMHg4OTAxCi0jZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKLSNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMwotI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0Ci0jZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1Ci0jZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKHRpbWV2YWwpICovCi0jZGVmaW5lIFNJT0NHU1RBTVBOUwkweDg5MDcJCS8qIEdldCBzdGFtcCAodGltZXNwZWMpICovCi0KLSNlbmRpZiAvKiAhKF9BU01fU1BBUkM2NF9TT0NLSU9TX0gpICovCi0KKyNpbmNsdWRlIDxhc20tc3BhcmMvc29ja2lvcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGFyc2VtZW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BhcnNlbWVtLmgKaW5kZXggYjk5ZDRlNC4uZTY4MWYyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGFyc2VtZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwYXJzZW1lbS5oCkBAIC0xLDEyICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1NQQVJTRU1FTV9ICi0jZGVmaW5lIF9TUEFSQzY0X1NQQVJTRU1FTV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMgICAgICAgMzAKLSNkZWZpbmUgTUFYX1BIWVNBRERSX0JJVFMgICAgICAgNDIKLSNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUyAgICAgICAgNDIKLQotI2VuZGlmIC8qICEoX19LRVJORUxfXykgKi8KLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfU1BBUlNFTUVNX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NwYXJzZW1lbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oCmluZGV4IDAwMDZmZTkuLjAxMTViODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmgKQEAgLTEsMjUwICsxIEBACi0vKiBzcGlubG9jay5oOiA2NC1iaXQgU3BhcmMgc3BpbmxvY2sgc3VwcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0KLSNpZm5kZWYgX19TUEFSQzY0X1NQSU5MT0NLX0gKLSNkZWZpbmUgX19TUEFSQzY0X1NQSU5MT0NLX0gKLQotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4JLyogRm9yIE5SX0NQVVMgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogVG8gZ2V0IGRlYnVnZ2luZyBzcGlubG9ja3Mgd2hpY2ggZGV0ZWN0IGFuZCBjYXRjaAotICogZGVhZGxvY2sgc2l0dWF0aW9ucywgc2V0IENPTkZJR19ERUJVR19TUElOTE9DSwotICogYW5kIHJlYnVpbGQgeW91ciBrZXJuZWwuCi0gKi8KLQotLyogQWxsIG9mIHRoZXNlIGxvY2tpbmcgcHJpbWl0aXZlcyBhcmUgZXhwZWN0ZWQgdG8gd29yayBwcm9wZXJseQotICogZXZlbiBpbiBhbiBSTU8gbWVtb3J5IG1vZGVsLCB3aGljaCBjdXJyZW50bHkgaXMgd2hhdCB0aGUga2VybmVsCi0gKiBydW5zIGluLgotICoKLSAqIFRoZXJlIGlzIGFub3RoZXIgaXNzdWUuICBCZWNhdXNlIHdlIHBsYXkgZ2FtZXMgdG8gc2F2ZSBjeWNsZXMKLSAqIGluIHRoZSBub24tY29udGVudGlvbiBjYXNlLCB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhcmVmdWwgYWJvdXQKLSAqIGJyYW5jaCB0YXJnZXRzIGludG8gdGhlICJzcGlubmluZyIgY29kZS4gIFRoZXkgbGl2ZSBpbiB0aGVpcgotICogb3duIHNlY3Rpb24sIGJ1dCB0aGUgbmV3ZXIgVjkgYnJhbmNoZXMgaGF2ZSBhIHNob3J0ZXIgcmFuZ2UKLSAqIHRoYW4gdGhlIHRyYWRpdGlvbmFsIDMyLWJpdCBzcGFyYyBicmFuY2ggdmFyaWFudHMuICBUaGUgcnVsZQotICogaXMgdGhhdCB0aGUgYnJhbmNoZXMgdGhhdCBnbyBpbnRvIGFuZCBvdXQgb2YgdGhlIHNwaW5uZXIgc2VjdGlvbnMKLSAqIG11c3QgYmUgcHJlLVY5IGJyYW5jaGVzLgotICovCi0KLSNkZWZpbmUgX19yYXdfc3Bpbl9pc19sb2NrZWQobHApCSgobHApLT5sb2NrICE9IDApCi0KLSNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChscCkJXAotCWRvIHsJcm1iKCk7CQkJXAotCX0gd2hpbGUoKGxwKS0+bG9jaykKLQotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6CWxkc3R1YgkJWyUxXSwgJTBcbiIKLSIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKLSIJYnJueixwbgkJJTAsIDJmXG4iCi0iCSBub3BcbiIKLSIJLnN1YnNlY3Rpb24JMlxuIgotIjI6CWxkdWIJCVslMV0sICUwXG4iCi0iCW1lbWJhcgkJI0xvYWRMb2FkXG4iCi0iCWJybnoscHQJCSUwLCAyYlxuIgotIgkgbm9wXG4iCi0iCWJhLGEscHQJCSUleGNjLCAxYlxuIgotIgkucHJldmlvdXMiCi0JOiAiPSZyIiAodG1wKQotCTogInIiIChsb2NrKQotCTogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0JdW5zaWduZWQgbG9uZyByZXN1bHQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIJbGRzdHViCQlbJTFdLCAlMFxuIgotIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZSIKLQk6ICI9ciIgKHJlc3VsdCkKLQk6ICJyIiAobG9jaykKLQk6ICJtZW1vcnkiKTsKLQotCXJldHVybiAocmVzdWx0ID09IDBVTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIJbWVtYmFyCQkjU3RvcmVTdG9yZSB8ICNMb2FkU3RvcmVcbiIKLSIJc3RiCQklJWcwLCBbJTBdIgotCTogLyogTm8gb3V0cHV0cyAqLwotCTogInIiIChsb2NrKQotCTogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKHJhd19zcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6CWxkc3R1YgkJWyUyXSwgJTBcbiIKLSIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKLSIJYnJueixwbgkJJTAsIDJmXG4iCi0iCSBub3BcbiIKLSIJLnN1YnNlY3Rpb24JMlxuIgotIjI6CXJkcHIJCSUlcGlsLCAlMVxuIgotIgl3cnByCQklMywgJSVwaWxcbiIKLSIzOglsZHViCQlbJTJdLCAlMFxuIgotIgltZW1iYXIJCSNMb2FkTG9hZFxuIgotIglicm56LHB0CQklMCwgM2JcbiIKLSIJIG5vcFxuIgotIgliYSxwdAkJJSV4Y2MsIDFiXG4iCi0iCSB3cnByCQklMSwgJSVwaWxcbiIKLSIJLnByZXZpb3VzIgotCTogIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKLQk6ICJyIihsb2NrKSwgInIiKGZsYWdzKQotCTogIm1lbW9yeSIpOwotfQotCi0vKiBNdWx0aS1yZWFkZXIgbG9ja3MsIHRoZXNlIGFyZSBtdWNoIHNhbmVyIHRoYW4gdGhlIDMyLWJpdCBTcGFyYyBvbmVzLi4uICovCi0KLXN0YXRpYyB2b2lkIGlubGluZSBfX3JlYWRfbG9jayhyYXdfcndsb2NrX3QgKmxvY2spCi17Ci0JdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotIjE6CWxkc3cJCVslMl0sICUwXG4iCi0iCWJybHoscG4JCSUwLCAyZlxuIgotIjQ6CSBhZGQJCSUwLCAxLCAlMVxuIgotIgljYXMJCVslMl0sICUwLCAlMVxuIgotIgljbXAJCSUwLCAlMVxuIgotIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgotIglibmUscG4JCSUlaWNjLCAxYlxuIgotIgkgbm9wXG4iCi0iCS5zdWJzZWN0aW9uCTJcbiIKLSIyOglsZHN3CQlbJTJdLCAlMFxuIgotIgltZW1iYXIJCSNMb2FkTG9hZFxuIgotIglicmx6LHB0CQklMCwgMmJcbiIKLSIJIG5vcFxuIgotIgliYSxhLHB0CQklJXhjYywgNGJcbiIKLSIJLnByZXZpb3VzIgotCTogIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKLQk6ICJyIiAobG9jaykKLQk6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIGludCBpbmxpbmUgX19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpsb2NrKQotewotCWludCB0bXAxLCB0bXAyOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotIjE6CWxkc3cJCVslMl0sICUwXG4iCi0iCWJybHosYSxwbgklMCwgMmZcbiIKLSIJIG1vdgkJMCwgJTBcbiIKLSIJYWRkCQklMCwgMSwgJTFcbiIKLSIJY2FzCQlbJTJdLCAlMCwgJTFcbiIKLSIJY21wCQklMCwgJTFcbiIKLSIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKLSIJYm5lLHBuCQklJWljYywgMWJcbiIKLSIJIG1vdgkJMSwgJTBcbiIKLSIyOiIKLQk6ICI9JnIiICh0bXAxKSwgIj0mciIgKHRtcDIpCi0JOiAiciIgKGxvY2spCi0JOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gdG1wMTsKLX0KLQotc3RhdGljIHZvaWQgaW5saW5lIF9fcmVhZF91bmxvY2socmF3X3J3bG9ja190ICpsb2NrKQotewotCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotIgltZW1iYXIJI1N0b3JlTG9hZCB8ICNMb2FkTG9hZFxuIgotIjE6CWxkdXcJWyUyXSwgJTBcbiIKLSIJc3ViCSUwLCAxLCAlMVxuIgotIgljYXMJWyUyXSwgJTAsICUxXG4iCi0iCWNtcAklMCwgJTFcbiIKLSIJYm5lLHBuCSUleGNjLCAxYlxuIgotIgkgbm9wIgotCTogIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKLQk6ICJyIiAobG9jaykKLQk6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIHZvaWQgaW5saW5lIF9fd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKmxvY2spCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrLCB0bXAxLCB0bXAyOwotCi0JbWFzayA9IDB4ODAwMDAwMDBVTDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6CWxkdXcJCVslMl0sICUwXG4iCi0iCWJybnoscG4JCSUwLCAyZlxuIgotIjQ6CSBvcgkJJTAsICUzLCAlMVxuIgotIgljYXMJCVslMl0sICUwLCAlMVxuIgotIgljbXAJCSUwLCAlMVxuIgotIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgotIglibmUscG4JCSUlaWNjLCAxYlxuIgotIgkgbm9wXG4iCi0iCS5zdWJzZWN0aW9uCTJcbiIKLSIyOglsZHV3CQlbJTJdLCAlMFxuIgotIgltZW1iYXIJCSNMb2FkTG9hZFxuIgotIglicm56LHB0CQklMCwgMmJcbiIKLSIJIG5vcFxuIgotIgliYSxhLHB0CQklJXhjYywgNGJcbiIKLSIJLnByZXZpb3VzIgotCTogIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKLQk6ICJyIiAobG9jayksICJyIiAobWFzaykKLQk6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIHZvaWQgaW5saW5lIF9fd3JpdGVfdW5sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIJbWVtYmFyCQkjTG9hZFN0b3JlIHwgI1N0b3JlU3RvcmVcbiIKLSIJc3R3CQklJWcwLCBbJTBdIgotCTogLyogbm8gb3V0cHV0cyAqLwotCTogInIiIChsb2NrKQotCTogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW50IGlubGluZSBfX3dyaXRlX3RyeWxvY2socmF3X3J3bG9ja190ICpsb2NrKQotewotCXVuc2lnbmVkIGxvbmcgbWFzaywgdG1wMSwgdG1wMiwgcmVzdWx0OwotCi0JbWFzayA9IDB4ODAwMDAwMDBVTDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotIgltb3YJCTAsICUyXG4iCi0iMToJbGR1dwkJWyUzXSwgJTBcbiIKLSIJYnJueixwbgkJJTAsIDJmXG4iCi0iCSBvcgkJJTAsICU0LCAlMVxuIgotIgljYXMJCVslM10sICUwLCAlMVxuIgotIgljbXAJCSUwLCAlMVxuIgotIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgotIglibmUscG4JCSUlaWNjLCAxYlxuIgotIgkgbm9wXG4iCi0iCW1vdgkJMSwgJTJcbiIKLSIyOiIKLQk6ICI9JnIiICh0bXAxKSwgIj0mciIgKHRtcDIpLCAiPSZyIiAocmVzdWx0KQotCTogInIiIChsb2NrKSwgInIiIChtYXNrKQotCTogIm1lbW9yeSIpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotI2RlZmluZSBfX3Jhd19yZWFkX2xvY2socCkJX19yZWFkX2xvY2socCkKLSNkZWZpbmUgX19yYXdfcmVhZF90cnlsb2NrKHApCV9fcmVhZF90cnlsb2NrKHApCi0jZGVmaW5lIF9fcmF3X3JlYWRfdW5sb2NrKHApCV9fcmVhZF91bmxvY2socCkKLSNkZWZpbmUgX19yYXdfd3JpdGVfbG9jayhwKQlfX3dyaXRlX2xvY2socCkKLSNkZWZpbmUgX19yYXdfd3JpdGVfdW5sb2NrKHApCV9fd3JpdGVfdW5sb2NrKHApCi0jZGVmaW5lIF9fcmF3X3dyaXRlX3RyeWxvY2socCkJX193cml0ZV90cnlsb2NrKHApCi0KLSNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykJCSghKChydyktPmxvY2sgJiAweDgwMDAwMDAwVUwpKQotI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayhydykJKCEocncpLT5sb2NrKQotCi0jZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotCi0jZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCi0KLSNlbmRpZiAvKiAhKF9fU1BBUkM2NF9TUElOTE9DS19IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9ja190eXBlcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9ja190eXBlcy5oCmluZGV4IGUxMjgxMTIuLjQ4ZDgxYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpbmxvY2tfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrX3R5cGVzLmgKQEAgLTEsMjAgKzEgQEAKLSNpZm5kZWYgX19TUEFSQzY0X1NQSU5MT0NLX1RZUEVTX0gKLSNkZWZpbmUgX19TUEFSQzY0X1NQSU5MT0NLX1RZUEVTX0gKLQotI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX0gKLSMgZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBsb2NrOwotfSByYXdfc3BpbmxvY2tfdDsKLQotI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOwotfSByYXdfcndsb2NrX3Q7Ci0KLSNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyAwIH0KLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NwaW5sb2NrX3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaXRmaXJlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaXRmaXJlLmgKaW5kZXggOTg1ZWE3ZS4uNDQzMGQyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGl0ZmlyZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpdGZpcmUuaApAQCAtMSwzNDIgKzEgQEAKLS8qIHNwaXRmaXJlLmg6IFNwaXRGaXJlL0JsYWNrQmlyZC9DaGVldGFoIGlubGluZSBNTVUgb3BlcmF0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfU1BJVEZJUkVfSAotI2RlZmluZSBfU1BBUkM2NF9TUElURklSRV9ICi0KLSNpbmNsdWRlIDxhc20vYXNpLmg+Ci0KLS8qIFRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIgYWRkcmVzc2VzIGFyZSBhY2Nlc3NpYmxlIHZpYSBBU0lfRE1NVQotICogYW5kIEFTSV9JTU1VLCB0aGF0IGlzIHRoZXJlIGlzIGEgZGlzdGluY3QgYW5kIHVuaXF1ZSBjb3B5IG9mCi0gKiBlYWNoIHRoZXNlIHJlZ2lzdGVycyBmb3IgZWFjaCBUTEIuCi0gKi8KLSNkZWZpbmUgVFNCX1RBR19UQVJHRVQJCTB4MDAwMDAwMDAwMDAwMDAwMCAvKiBBbGwgY2hpcHMJCQkJKi8KLSNkZWZpbmUgVExCX1NGU1IJCTB4MDAwMDAwMDAwMDAwMDAxOCAvKiBBbGwgY2hpcHMJCQkJKi8KLSNkZWZpbmUgVFNCX1JFRwkJCTB4MDAwMDAwMDAwMDAwMDAyOCAvKiBBbGwgY2hpcHMJCQkJKi8KLSNkZWZpbmUgVExCX1RBR19BQ0NFU1MJCTB4MDAwMDAwMDAwMDAwMDAzMCAvKiBBbGwgY2hpcHMJCQkJKi8KLSNkZWZpbmUgVklSVF9XQVRDSFBPSU5UCQkweDAwMDAwMDAwMDAwMDAwMzggLyogQWxsIGNoaXBzCQkJCSovCi0jZGVmaW5lIFBIWVNfV0FUQ0hQT0lOVAkJMHgwMDAwMDAwMDAwMDAwMDQwIC8qIEFsbCBjaGlwcwkJCQkqLwotI2RlZmluZSBUU0JfRVhURU5TSU9OX1AJCTB4MDAwMDAwMDAwMDAwMDA0OCAvKiBVbHRyYS1JSUkgYW5kIGxhdGVyCQkqLwotI2RlZmluZSBUU0JfRVhURU5TSU9OX1MJCTB4MDAwMDAwMDAwMDAwMDA1MCAvKiBVbHRyYS1JSUkgYW5kIGxhdGVyLCBELVRMQiBvbmx5CSovCi0jZGVmaW5lIFRTQl9FWFRFTlNJT05fTgkJMHgwMDAwMDAwMDAwMDAwMDU4IC8qIFVsdHJhLUlJSSBhbmQgbGF0ZXIJCSovCi0jZGVmaW5lIFRMQl9UQUdfQUNDRVNTX0VYVAkweDAwMDAwMDAwMDAwMDAwNjAgLyogVWx0cmEtSUlJKyBhbmQgbGF0ZXIJCSovCi0KLS8qIFRoZXNlIHJlZ2lzdGVycyBvbmx5IGV4aXN0IGFzIG9uZSBlbnRpdHksIGFuZCBhcmUgYWNjZXNzZWQKLSAqIHZpYSBBU0lfRE1NVSBvbmx5LgotICovCi0jZGVmaW5lIFBSSU1BUllfQ09OVEVYVAkJMHgwMDAwMDAwMDAwMDAwMDA4Ci0jZGVmaW5lIFNFQ09OREFSWV9DT05URVhUCTB4MDAwMDAwMDAwMDAwMDAxMAotI2RlZmluZSBETU1VX1NGQVIJCTB4MDAwMDAwMDAwMDAwMDAyMAotI2RlZmluZSBWSVJUX1dBVENIUE9JTlQJCTB4MDAwMDAwMDAwMDAwMDAzOAotI2RlZmluZSBQSFlTX1dBVENIUE9JTlQJCTB4MDAwMDAwMDAwMDAwMDA0MAotCi0jZGVmaW5lIFNQSVRGSVJFX0hJR0hFU1RfTE9DS0VEX1RMQkVOVAkoNjQgLSAxKQotI2RlZmluZSBDSEVFVEFIX0hJR0hFU1RfTE9DS0VEX1RMQkVOVAkoMTYgLSAxKQotCi0jZGVmaW5lIEwxRENBQ0hFX1NJWkUJCTB4NDAwMAotCi0jZGVmaW5lIFNVTjRWX0NISVBfSU5WQUxJRAkweDAwCi0jZGVmaW5lIFNVTjRWX0NISVBfTklBR0FSQTEJMHgwMQotI2RlZmluZSBTVU40Vl9DSElQX05JQUdBUkEyCTB4MDIKLSNkZWZpbmUgU1VONFZfQ0hJUF9VTktOT1dOCTB4ZmYKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotZW51bSB1bHRyYV90bGJfbGF5b3V0IHsKLQlzcGl0ZmlyZSA9IDAsCi0JY2hlZXRhaCA9IDEsCi0JY2hlZXRhaF9wbHVzID0gMiwKLQloeXBlcnZpc29yID0gMywKLX07Ci0KLWV4dGVybiBlbnVtIHVsdHJhX3RsYl9sYXlvdXQgdGxiX3R5cGU7Ci0KLWV4dGVybiBpbnQgc3VuNHZfY2hpcF90eXBlOwotCi1leHRlcm4gaW50IGNoZWV0YWhfcGNhY2hlX2ZvcmNlZF9vbjsKLWV4dGVybiB2b2lkIGNoZWV0YWhfZW5hYmxlX3BjYWNoZSh2b2lkKTsKLQotI2RlZmluZSBzcGFyYzY0X2hpZ2hlc3RfbG9ja2VkX3RsYmVudCgpCVwKLQkodGxiX3R5cGUgPT0gc3BpdGZpcmUgPyBcCi0JIFNQSVRGSVJFX0hJR0hFU1RfTE9DS0VEX1RMQkVOVCA6IFwKLQkgQ0hFRVRBSF9ISUdIRVNUX0xPQ0tFRF9UTEJFTlQpCi0KLWV4dGVybiBpbnQgbnVtX2tlcm5lbF9pbWFnZV9tYXBwaW5nczsKLQotLyogVGhlIGRhdGEgY2FjaGUgaXMgd3JpdGUgdGhyb3VnaCwgc28gdGhpcyBqdXN0IGludmFsaWRhdGVzIHRoZQotICogc3BlY2lmaWVkIGxpbmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGl0ZmlyZV9wdXRfZGNhY2hlX3RhZyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgdGFnKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKLQkJCSAgICAgIm1lbWJhcgkjU3luYyIKLQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiICh0YWcpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9EQ0FDSEVfVEFHKSk7Ci19Ci0KLS8qIFRoZSBpbnN0cnVjdGlvbiBjYWNoZSBsaW5lcyBhcmUgZmx1c2hlZCB3aXRoIHRoaXMsIGJ1dCBub3RlIHRoYXQKLSAqIHRoaXMgZG9lcyBub3QgZmx1c2ggdGhlIHBpcGVsaW5lLiAgSXQgaXMgcG9zc2libGUgZm9yIGEgbGluZSB0bwotICogZ2V0IGZsdXNoZWQgYnV0IHN0YWxlIGluc3RydWN0aW9ucyB0byBzdGlsbCBiZSBpbiB0aGUgcGlwZWxpbmUsCi0gKiBhIGZsdXNoIGluc3RydWN0aW9uICh0byBhbnkgYWRkcmVzcykgaXMgc3VmZmljaWVudCB0byBoYW5kbGUKLSAqIHRoaXMgaXNzdWUgYWZ0ZXIgdGhlIGxpbmUgaXMgaW52YWxpZGF0ZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGl0ZmlyZV9wdXRfaWNhY2hlX3RhZyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgdGFnKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKLQkJCSAgICAgIm1lbWJhcgkjU3luYyIKLQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiICh0YWcpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9JQ19UQUcpKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNwaXRmaXJlX2dldF9kdGxiX2RhdGEoaW50IGVudHJ5KQotewotCXVuc2lnbmVkIGxvbmcgZGF0YTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgotCQkJICAgICA6ICI9ciIgKGRhdGEpCi0JCQkgICAgIDogInIiIChlbnRyeSA8PCAzKSwgImkiIChBU0lfRFRMQl9EQVRBX0FDQ0VTUykpOwotCi0JLyogQ2xlYXIgVFRFIGRpYWcgYml0cy4gKi8KLQlkYXRhICY9IH4weDAwMDNmZTAwMDAwMDAwMDBVTDsKLQotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3BpdGZpcmVfZ2V0X2R0bGJfdGFnKGludCBlbnRyeSkKLXsKLQl1bnNpZ25lZCBsb25nIHRhZzsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgotCQkJICAgICA6ICI9ciIgKHRhZykKLQkJCSAgICAgOiAiciIgKGVudHJ5IDw8IDMpLCAiaSIgKEFTSV9EVExCX1RBR19SRUFEKSk7Ci0JcmV0dXJuIHRhZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNwaXRmaXJlX3B1dF9kdGxiX2RhdGEoaW50IGVudHJ5LCB1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgotCQkJICAgICAibWVtYmFyCSNTeW5jIgotCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiciIgKGRhdGEpLCAiciIgKGVudHJ5IDw8IDMpLAotCQkJICAgICAgICJpIiAoQVNJX0RUTEJfREFUQV9BQ0NFU1MpKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNwaXRmaXJlX2dldF9pdGxiX2RhdGEoaW50IGVudHJ5KQotewotCXVuc2lnbmVkIGxvbmcgZGF0YTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgotCQkJICAgICA6ICI9ciIgKGRhdGEpCi0JCQkgICAgIDogInIiIChlbnRyeSA8PCAzKSwgImkiIChBU0lfSVRMQl9EQVRBX0FDQ0VTUykpOwotCi0JLyogQ2xlYXIgVFRFIGRpYWcgYml0cy4gKi8KLQlkYXRhICY9IH4weDAwMDNmZTAwMDAwMDAwMDBVTDsKLQotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3BpdGZpcmVfZ2V0X2l0bGJfdGFnKGludCBlbnRyeSkKLXsKLQl1bnNpZ25lZCBsb25nIHRhZzsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgotCQkJICAgICA6ICI9ciIgKHRhZykKLQkJCSAgICAgOiAiciIgKGVudHJ5IDw8IDMpLCAiaSIgKEFTSV9JVExCX1RBR19SRUFEKSk7Ci0JcmV0dXJuIHRhZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNwaXRmaXJlX3B1dF9pdGxiX2RhdGEoaW50IGVudHJ5LCB1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgotCQkJICAgICAibWVtYmFyCSNTeW5jIgotCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiciIgKGRhdGEpLCAiciIgKGVudHJ5IDw8IDMpLAotCQkJICAgICAgICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNwaXRmaXJlX2ZsdXNoX2R0bGJfbnVjbGV1c19wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKLQkJCSAgICAgIm1lbWJhcgkjU3luYyIKLQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiIChwYWdlIHwgMHgyMCksICJpIiAoQVNJX0RNTVVfREVNQVApKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNwaXRmaXJlX2ZsdXNoX2l0bGJfbnVjbGV1c19wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKLQkJCSAgICAgIm1lbWJhcgkjU3luYyIKLQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiIChwYWdlIHwgMHgyMCksICJpIiAoQVNJX0lNTVVfREVNQVApKTsKLX0KLQotLyogQ2hlZXRhaCBoYXMgImFsbCBub24tbG9ja2VkIiB0bGIgZmx1c2hlcy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVldGFoX2ZsdXNoX2R0bGJfYWxsKHZvaWQpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJSVnMCwgWyUwXSAlMVxuXHQiCi0JCQkgICAgICJtZW1iYXIJI1N5bmMiCi0JCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAoMHg4MCksICJpIiAoQVNJX0RNTVVfREVNQVApKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNoZWV0YWhfZmx1c2hfaXRsYl9hbGwodm9pZCkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKLQkJCSAgICAgIm1lbWJhcgkjU3luYyIKLQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiICgweDgwKSwgImkiIChBU0lfSU1NVV9ERU1BUCkpOwotfQotCi0vKiBDaGVldGFoIGhhcyBhIDQtdGxiIGxheW91dCBzbyBkaXJlY3QgYWNjZXNzIGlzIGEgYml0IGRpZmZlcmVudC4KLSAqIFRoZSBmaXJzdCB0d28gVExCcyBhcmUgZnVsbHkgYXNzb3NjaWF0aXZlLCBob2xkIDE2IGVudHJpZXMsIGFuZCBhcmUKLSAqIHVzZWQgb25seSBmb3IgbG9ja2VkIGFuZCA+OEsgc2l6ZWQgdHJhbnNsYXRpb25zLiAgT25lIGV4aXN0cyBmb3IKLSAqIGRhdGEgYWNjZXNzZXMgYW5kIG9uZSBmb3IgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMuCi0gKgotICogVGhlIHRoaXJkIFRMQiBpcyBmb3IgZGF0YSBhY2Nlc3NlcyB0byA4SyBub24tbG9ja2VkIHRyYW5zbGF0aW9ucywgaXMKLSAqIDIgd2F5IGFzc29zY2lhdGl2ZSwgYW5kIGhvbGRzIDUxMiBlbnRyaWVzLiAgVGhlIGZvdXJ0aCBUTEIgaXMgZm9yCi0gKiBpbnN0cnVjdGlvbiBhY2Nlc3NlcyB0byA4SyBub24tbG9ja2VkIHRyYW5zbGF0aW9ucywgaXMgMiB3YXkKLSAqIGFzc29zY2lhdGl2ZSwgYW5kIGhvbGRzIDEyOCBlbnRyaWVzLgotICoKLSAqIENoZWV0YWggaGFzIHNvbWUgYnVnIHdoZXJlIGJvZ3VzIGRhdGEgY2FuIGJlIHJldHVybmVkIGZyb20KLSAqIEFTSV97RCxJfVRMQl9EQVRBX0FDQ0VTUyBsb2FkcywgZG9pbmcgdGhlIGxvYWQgdHdpY2UgZml4ZXMKLSAqIHRoZSBwcm9ibGVtIGZvciBtZS4gLURhdmVNCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVldGFoX2dldF9sZHRsYl9kYXRhKGludCBlbnRyeSkKLXsKLQl1bnNpZ25lZCBsb25nIGRhdGE7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlJWcwXG5cdCIKLQkJCSAgICAgImxkeGEJWyUxXSAlMiwgJTAiCi0JCQkgICAgIDogIj1yIiAoZGF0YSkKLQkJCSAgICAgOiAiciIgKCgwIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCi0JCQkgICAgICJpIiAoQVNJX0RUTEJfREFUQV9BQ0NFU1MpKTsKLQotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlZXRhaF9nZXRfbGl0bGJfZGF0YShpbnQgZW50cnkpCi17Ci0JdW5zaWduZWQgbG9uZyBkYXRhOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJSVnMFxuXHQiCi0JCQkgICAgICJsZHhhCVslMV0gJTIsICUwIgotCQkJICAgICA6ICI9ciIgKGRhdGEpCi0JCQkgICAgIDogInIiICgoMCA8PCAxNikgfCAoZW50cnkgPDwgMykpLAotCQkJICAgICAiaSIgKEFTSV9JVExCX0RBVEFfQUNDRVNTKSk7Ci0KLQlyZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWV0YWhfZ2V0X2xkdGxiX3RhZyhpbnQgZW50cnkpCi17Ci0JdW5zaWduZWQgbG9uZyB0YWc7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlMCIKLQkJCSAgICAgOiAiPXIiICh0YWcpCi0JCQkgICAgIDogInIiICgoMCA8PCAxNikgfCAoZW50cnkgPDwgMykpLAotCQkJICAgICAiaSIgKEFTSV9EVExCX1RBR19SRUFEKSk7Ci0KLQlyZXR1cm4gdGFnOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlZXRhaF9nZXRfbGl0bGJfdGFnKGludCBlbnRyeSkKLXsKLQl1bnNpZ25lZCBsb25nIHRhZzsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhCVslMV0gJTIsICUwIgotCQkJICAgICA6ICI9ciIgKHRhZykKLQkJCSAgICAgOiAiciIgKCgwIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCi0JCQkgICAgICJpIiAoQVNJX0lUTEJfVEFHX1JFQUQpKTsKLQotCXJldHVybiB0YWc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVldGFoX3B1dF9sZHRsYl9kYXRhKGludCBlbnRyeSwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKLQkJCSAgICAgIm1lbWJhcgkjU3luYyIKLQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiIChkYXRhKSwKLQkJCSAgICAgICAiciIgKCgwIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCi0JCQkgICAgICAgImkiIChBU0lfRFRMQl9EQVRBX0FDQ0VTUykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlZXRhaF9wdXRfbGl0bGJfZGF0YShpbnQgZW50cnksIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCi0JCQkgICAgICJtZW1iYXIJI1N5bmMiCi0JCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAoZGF0YSksCi0JCQkgICAgICAgInIiICgoMCA8PCAxNikgfCAoZW50cnkgPDwgMykpLAotCQkJICAgICAgICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWV0YWhfZ2V0X2R0bGJfZGF0YShpbnQgZW50cnksIGludCB0bGIpCi17Ci0JdW5zaWduZWQgbG9uZyBkYXRhOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJSVnMFxuXHQiCi0JCQkgICAgICJsZHhhCVslMV0gJTIsICUwIgotCQkJICAgICA6ICI9ciIgKGRhdGEpCi0JCQkgICAgIDogInIiICgodGxiIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksICJpIiAoQVNJX0RUTEJfREFUQV9BQ0NFU1MpKTsKLQotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlZXRhaF9nZXRfZHRsYl90YWcoaW50IGVudHJ5LCBpbnQgdGxiKQotewotCXVuc2lnbmVkIGxvbmcgdGFnOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUxXSAlMiwgJTAiCi0JCQkgICAgIDogIj1yIiAodGFnKQotCQkJICAgICA6ICJyIiAoKHRsYiA8PCAxNikgfCAoZW50cnkgPDwgMykpLCAiaSIgKEFTSV9EVExCX1RBR19SRUFEKSk7Ci0JcmV0dXJuIHRhZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNoZWV0YWhfcHV0X2R0bGJfZGF0YShpbnQgZW50cnksIHVuc2lnbmVkIGxvbmcgZGF0YSwgaW50IHRsYikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCi0JCQkgICAgICJtZW1iYXIJI1N5bmMiCi0JCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAoZGF0YSksCi0JCQkgICAgICAgInIiICgodGxiIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCi0JCQkgICAgICAgImkiIChBU0lfRFRMQl9EQVRBX0FDQ0VTUykpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlZXRhaF9nZXRfaXRsYl9kYXRhKGludCBlbnRyeSkKLXsKLQl1bnNpZ25lZCBsb25nIGRhdGE7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlJWcwXG5cdCIKLQkJCSAgICAgImxkeGEJWyUxXSAlMiwgJTAiCi0JCQkgICAgIDogIj1yIiAoZGF0YSkKLQkJCSAgICAgOiAiciIgKCgyIDw8IDE2KSB8IChlbnRyeSA8PCAzKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImkiIChBU0lfSVRMQl9EQVRBX0FDQ0VTUykpOwotCi0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVldGFoX2dldF9pdGxiX3RhZyhpbnQgZW50cnkpCi17Ci0JdW5zaWduZWQgbG9uZyB0YWc7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlMCIKLQkJCSAgICAgOiAiPXIiICh0YWcpCi0JCQkgICAgIDogInIiICgoMiA8PCAxNikgfCAoZW50cnkgPDwgMykpLCAiaSIgKEFTSV9JVExCX1RBR19SRUFEKSk7Ci0JcmV0dXJuIHRhZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNoZWV0YWhfcHV0X2l0bGJfZGF0YShpbnQgZW50cnksIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCi0JCQkgICAgICJtZW1iYXIJI1N5bmMiCi0JCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAoZGF0YSksICJyIiAoKDIgPDwgMTYpIHwgKGVudHJ5IDw8IDMpKSwKLQkJCSAgICAgICAiaSIgKEFTSV9JVExCX0RBVEFfQUNDRVNTKSk7Ci19Ci0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfU1BJVEZJUkVfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc3BpdGZpcmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3N0YXRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NzdGF0ZS5oCmluZGV4IGE3YzM1ZGIuLjk3NzIwY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3N0YXRlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zc3RhdGUuaApAQCAtMSwxMyArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9TU1RBVEVfSAotI2RlZmluZSBfU1BBUkM2NF9TU1RBVEVfSAotCi1leHRlcm4gdm9pZCBzc3RhdGVfYm9vdGluZyh2b2lkKTsKLWV4dGVybiB2b2lkIHNzdGF0ZV9ydW5uaW5nKHZvaWQpOwotZXh0ZXJuIHZvaWQgc3N0YXRlX2hhbHQodm9pZCk7Ci1leHRlcm4gdm9pZCBzc3RhdGVfcG93ZXJvZmYodm9pZCk7Ci1leHRlcm4gdm9pZCBzc3RhdGVfcGFuaWModm9pZCk7Ci1leHRlcm4gdm9pZCBzc3RhdGVfcmVib290KHZvaWQpOwotCi1leHRlcm4gdm9pZCBzdW40dl9zc3RhdGVfaW5pdCh2b2lkKTsKLQotI2VuZGlmIC8qIF9TUEFSQzY0X1NTVEFURV9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3NzdGF0ZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGFja3RyYWNlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YWNrdHJhY2UuaAppbmRleCA2Y2VlMzlhLi5hZGM5YjkyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGFja3RyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGFja3RyYWNlLmgKQEAgLTEsNiArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9TVEFDS1RSQUNFX0gKLSNkZWZpbmUgX1NQQVJDNjRfU1RBQ0tUUkFDRV9ICi0KLWV4dGVybiB2b2lkIHN0YWNrX3RyYWNlX2ZsdXNoKHZvaWQpOwotCi0jZW5kaWYgLyogX1NQQVJDNjRfU1RBQ0tUUkFDRV9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3N0YWNrdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RhcmZpcmUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RhcmZpcmUuaAppbmRleCAwN2JhZmQzLi5kYjk3ZGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YXJmaXJlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGFyZmlyZS5oCkBAIC0xLDIxICsxIEBACi0vKgotICogc3RhcmZpcmUuaDogR3JvdXAgYWxsIHN0YXJmaXJlIHNwZWNpZmljIGNvZGUgdG9nZXRoZXIuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIEFudG9uIEJsYW5jaGFyZCAoYW50b25Ac2FtYmEub3JnKQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfU1RBUkZJUkVfSAotI2RlZmluZSBfU1BBUkM2NF9TVEFSRklSRV9ICi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLWV4dGVybiBpbnQgdGhpc19pc19zdGFyZmlyZTsKLQotZXh0ZXJuIHZvaWQgY2hlY2tfaWZfc3RhcmZpcmUodm9pZCk7Ci1leHRlcm4gdm9pZCBzdGFyZmlyZV9jcHVfc2V0dXAodm9pZCk7Ci1leHRlcm4gaW50IHN0YXJmaXJlX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKLWV4dGVybiB2b2lkIHN0YXJmaXJlX2hvb2t1cChpbnQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBzdGFyZmlyZV90cmFuc2xhdGUodW5zaWduZWQgbG9uZyBpbWFwLCB1bnNpZ25lZCBpbnQgdXBhaWQpOwotCi0jZW5kaWYKLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1zcGFyYy9zdGFyZmlyZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGF0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YXQuaAppbmRleCA5NjUwZmRlLi5iMTA4YTg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YXQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YXQuaApAQCAtMSw0NyArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9TVEFUX0gKLSNkZWZpbmUgX1NQQVJDNjRfU1RBVF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1zdHJ1Y3Qgc3RhdCB7Ci0JdW5zaWduZWQgICBzdF9kZXY7Ci0JaW5vX3QgICBzdF9pbm87Ci0JbW9kZV90ICBzdF9tb2RlOwotCXNob3J0ICAgc3Rfbmxpbms7Ci0JdWlkX3QgICBzdF91aWQ7Ci0JZ2lkX3QgICBzdF9naWQ7Ci0JdW5zaWduZWQgICBzdF9yZGV2OwotCW9mZl90ICAgc3Rfc2l6ZTsKLQl0aW1lX3QgIHN0X2F0aW1lOwotCXRpbWVfdCAgc3RfbXRpbWU7Ci0JdGltZV90ICBzdF9jdGltZTsKLQlvZmZfdCAgIHN0X2Jsa3NpemU7Ci0Jb2ZmX3QgICBzdF9ibG9ja3M7Ci0JdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0WzJdOwotfTsKLQotc3RydWN0IHN0YXQ2NCB7Ci0JdW5zaWduZWQgbG9uZwlzdF9kZXY7Ci0JdW5zaWduZWQgbG9uZwlzdF9pbm87Ci0JdW5zaWduZWQgbG9uZwlzdF9ubGluazsKLQotCXVuc2lnbmVkIGludAlzdF9tb2RlOwotCXVuc2lnbmVkIGludAlzdF91aWQ7Ci0JdW5zaWduZWQgaW50CXN0X2dpZDsKLQl1bnNpZ25lZCBpbnQJX19wYWQwOwotCi0JdW5zaWduZWQgbG9uZwlzdF9yZGV2OwotCWxvbmcJCXN0X3NpemU7Ci0JbG9uZwkJc3RfYmxrc2l6ZTsKLQlsb25nCQlzdF9ibG9ja3M7Ci0KLQl1bnNpZ25lZCBsb25nCXN0X2F0aW1lOwotCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWVfbnNlYzsKLQl1bnNpZ25lZCBsb25nCXN0X210aW1lOwotCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWVfbnNlYzsKLQl1bnNpZ25lZCBsb25nCXN0X2N0aW1lOwotCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWVfbnNlYzsKLQlsb25nCQlfX3VudXNlZFszXTsKLX07Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1zcGFyYy9zdGF0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGF0ZnMuaAppbmRleCA3OWIzYzg5Li41NTAzZDZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YXRmcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RhdGZzLmgKQEAgLTEsNTQgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfU1RBVEZTX0gKLSNkZWZpbmUgX1NQQVJDNjRfU1RBVEZTX0gKLQotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXR5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKLQotI2VuZGlmCi0KLXN0cnVjdCBzdGF0ZnMgewotCWxvbmcgZl90eXBlOwotCWxvbmcgZl9ic2l6ZTsKLQlsb25nIGZfYmxvY2tzOwotCWxvbmcgZl9iZnJlZTsKLQlsb25nIGZfYmF2YWlsOwotCWxvbmcgZl9maWxlczsKLQlsb25nIGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlsb25nIGZfbmFtZWxlbjsKLQlsb25nIGZfZnJzaXplOwotCWxvbmcgZl9zcGFyZVs1XTsKLX07Ci0KLXN0cnVjdCBzdGF0ZnM2NCB7Ci0JbG9uZyBmX3R5cGU7Ci0JbG9uZyBmX2JzaXplOwotCWxvbmcgZl9ibG9ja3M7Ci0JbG9uZyBmX2JmcmVlOwotCWxvbmcgZl9iYXZhaWw7Ci0JbG9uZyBmX2ZpbGVzOwotCWxvbmcgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCWxvbmcgZl9uYW1lbGVuOwotCWxvbmcgZl9mcnNpemU7Ci0JbG9uZyBmX3NwYXJlWzVdOwotfTsKLQotc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7Ci0JX191MzIgZl90eXBlOwotCV9fdTMyIGZfYnNpemU7Ci0JX191NjQgZl9ibG9ja3M7Ci0JX191NjQgZl9iZnJlZTsKLQlfX3U2NCBmX2JhdmFpbDsKLQlfX3U2NCBmX2ZpbGVzOwotCV9fdTY0IGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlfX3UzMiBmX25hbWVsZW47Ci0JX191MzIgZl9mcnNpemU7Ci0JX191MzIgZl9zcGFyZVs1XTsKLX07Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1zcGFyYy9zdGF0ZnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0cmluZy5oCmluZGV4IDQzMTYxZjIuLjUwMThjZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zdHJpbmcuaApAQCAtMSw4MyArMSBAQAotLyoKLSAqIHN0cmluZy5oOiBFeHRlcm5hbCBkZWZpbml0aW9ucyBmb3Igb3B0aW1pemVkIGFzc2VtYmx5IHN0cmluZwotICogICAgICAgICAgIHJvdXRpbmVzIGZvciB0aGUgTGludXggS2VybmVsLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSwxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMTk5NiwxOTk3LDE5OTkgSmFrdWIgSmVsaW5layAoamFrdWJAcmVkaGF0LmNvbSkKLSAqLwotCi0jaWZuZGVmIF9fU1BBUkM2NF9TVFJJTkdfSF9fCi0jZGVmaW5lIF9fU1BBUkM2NF9TVFJJTkdfSF9fCi0KLS8qIFJlYWxseSwgdXNlcmxhbmQva3N5bXMgc2hvdWxkIG5vdCBzZWUgYW55IG9mIHRoaXMgc3R1ZmYuICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vYXNpLmg+Ci0KLWV4dGVybiB2b2lkICpfX21lbXNldCh2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7Ci0KLSNpZm5kZWYgRVhQT1JUX1NZTVRBQl9TVFJPUFMKLQotLyogRmlyc3QgdGhlIG1lbSooKSB0aGluZ3MuICovCi0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTU1PVkUKLWV4dGVybiB2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOwotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQotZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKLWV4dGVybiB2b2lkICpfX2J1aWx0aW5fbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKLQotc3RhdGljIGlubGluZSB2b2lkICpfX2NvbnN0YW50X21lbXNldCh2b2lkICpzLCBpbnQgYywgX19rZXJuZWxfc2l6ZV90IGNvdW50KQotewotCWV4dGVybiBfX2tlcm5lbF9zaXplX3QgX19iemVybyh2b2lkICosIF9fa2VybmVsX3NpemVfdCk7Ci0KLQlpZiAoIWMpIHsKLQkJX19iemVybyhzLCBjb3VudCk7Ci0JCXJldHVybiBzOwotCX0gZWxzZQotCQlyZXR1cm4gX19tZW1zZXQocywgYywgY291bnQpOwotfQotCi0jdW5kZWYgbWVtc2V0Ci0jZGVmaW5lIG1lbXNldChzLCBjLCBjb3VudCkgXAotKChfX2J1aWx0aW5fY29uc3RhbnRfcChjb3VudCkgJiYgKGNvdW50KSA8PSAzMikgPyBcCi0gX19idWlsdGluX21lbXNldCgocyksIChjKSwgKGNvdW50KSkgOiBcCi0gKF9fYnVpbHRpbl9jb25zdGFudF9wKGMpID8gXAotICBfX2NvbnN0YW50X21lbXNldCgocyksIChjKSwgKGNvdW50KSkgOiBcCi0gIF9fbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSkpCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0NBTgotCi0jdW5kZWYgbWVtc2NhbgotI2RlZmluZSBtZW1zY2FuKF9fYXJnMCwgX19jaGFyLCBfX2FyZzIpCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlleHRlcm4gdm9pZCAqX19tZW1zY2FuX3plcm8odm9pZCAqLCBzaXplX3QpOwkJCVwKLQlleHRlcm4gdm9pZCAqX19tZW1zY2FuX2dlbmVyaWModm9pZCAqLCBpbnQsIHNpemVfdCk7CQlcCi0Jdm9pZCAqX19yZXR2YWwsICpfX2FkZHIgPSAoX19hcmcwKTsJCQkJXAotCXNpemVfdCBfX3NpemUgPSAoX19hcmcyKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZihfX2J1aWx0aW5fY29uc3RhbnRfcChfX2NoYXIpICYmICEoX19jaGFyKSkJCQlcCi0JCV9fcmV0dmFsID0gX19tZW1zY2FuX3plcm8oX19hZGRyLCBfX3NpemUpOwkJXAotCWVsc2UJCQkJCQkJCVwKLQkJX19yZXR2YWwgPSBfX21lbXNjYW5fZ2VuZXJpYyhfX2FkZHIsIChfX2NoYXIpLCBfX3NpemUpOwlcCi0JCQkJCQkJCQlcCi0JX19yZXR2YWw7CQkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ01QCi1leHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7Ci0KLS8qIE5vdyB0aGUgc3RyKigpIHN0dWZmLi4uICovCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTgotZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ01QCi1leHRlcm4gaW50IHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9fa2VybmVsX3NpemVfdCk7Ci0KLSNlbmRpZiAvKiAhRVhQT1JUX1NZTVRBQl9TVFJPUFMgKi8KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qICEoX19TUEFSQzY0X1NUUklOR19IX18pICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zdW5icHAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3VuYnBwLmgKaW5kZXggOGUxNzFiNy4uOTYzMmJlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zdW5icHAuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N1bmJwcC5oCkBAIC0xLDgwICsxIEBACi0vKgotICogaW5jbHVkZS9hc20tc3BhcmM2NC9zdW5icHAuaAotICovCi0KLSNpZm5kZWYgX0FTTV9TUEFSQzY0X1NVTkJQUF9ICi0jZGVmaW5lIF9BU01fU1BBUkM2NF9TVU5CUFBfSAotCi1zdHJ1Y3QgYnBwX3JlZ3MgewotICAvKiBETUEgcmVnaXN0ZXJzICovCi0gIF9fdm9sYXRpbGVfXyBfX3UzMiBwX2NzcjsJCS8qIERNQSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwotICBfX3ZvbGF0aWxlX18gX191MzIgcF9hZGRyOwkJLyogQWRkcmVzcyBSZWdpc3RlciAqLwotICBfX3ZvbGF0aWxlX18gX191MzIgcF9iY250OwkJLyogQnl0ZSBDb3VudCBSZWdpc3RlciAqLwotICBfX3ZvbGF0aWxlX18gX191MzIgcF90c3RfY3NyOwkJLyogVGVzdCBDb250cm9sL1N0YXR1cyAoRE1BMiBvbmx5KSAqLwotICAvKiBQYXJhbGxlbCBQb3J0IHJlZ2lzdGVycyAqLwotICBfX3ZvbGF0aWxlX18gX191MTYgcF9oY3I7CQkvKiBIYXJkd2FyZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0gIF9fdm9sYXRpbGVfXyBfX3UxNiBwX29jcjsJCS8qIE9wZXJhdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0gIF9fdm9sYXRpbGVfXyBfX3U4IHBfZHI7CQkvKiBQYXJhbGxlbCBEYXRhIFJlZ2lzdGVyICovCi0gIF9fdm9sYXRpbGVfXyBfX3U4IHBfdGNyOwkJLyogVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLwotICBfX3ZvbGF0aWxlX18gX191OCBwX29yOwkJLyogT3V0cHV0IFJlZ2lzdGVyICovCi0gIF9fdm9sYXRpbGVfXyBfX3U4IHBfaXI7CQkvKiBJbnB1dCBSZWdpc3RlciAqLwotICBfX3ZvbGF0aWxlX18gX191MTYgcF9pY3I7CQkvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLwotfTsKLQotLyogUF9IQ1IuIFRpbWUgaXMgaW4gaW5jcmVtZW50cyBvZiBTQnVzIGNsb2NrLiAqLwotI2RlZmluZSBQX0hDUl9URVNUICAgICAgMHg4MDAwICAgICAgLyogQWxsb3dzIGJ1cmllZCBjb3VudGVycyB0byBiZSByZWFkICovCi0jZGVmaW5lIFBfSENSX0RTVyAgICAgICAweDdmMDAgICAgICAvKiBEYXRhIHN0cm9iZSB3aWR0aCAoaW4gdGlja3MpICovCi0jZGVmaW5lIFBfSENSX0REUyAgICAgICAweDAwN2YgICAgICAvKiBEYXRhIHNldHVwIGJlZm9yZSBzdHJvYmUgKGluIHRpY2tzKSAqLwotCi0vKiBQX09DUi4gKi8KLSNkZWZpbmUgUF9PQ1JfTUVNX0NMUiAgIDB4ODAwMAotI2RlZmluZSBQX09DUl9EQVRBX1NSQyAgMHg0MDAwICAgICAgLyogKSAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBfT0NSX0RTX0RTRUwgICAweDIwMDAgICAgICAvKiApICBCaWRpcmVjdGlvbmFsICAgICAgKi8KLSNkZWZpbmUgUF9PQ1JfQlVTWV9EU0VMIDB4MTAwMCAgICAgIC8qICkgICAgc2VsZWN0cyAgICAgICAgICAgICovCi0jZGVmaW5lIFBfT0NSX0FDS19EU0VMICAweDA4MDAgICAgICAvKiApICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUF9PQ1JfRU5fRElBRyAgIDB4MDQwMAotI2RlZmluZSBQX09DUl9CVVNZX09QICAgMHgwMjAwICAgICAgLyogQnVzeSBvcGVyYXRpb24gKi8KLSNkZWZpbmUgUF9PQ1JfQUNLX09QICAgIDB4MDEwMCAgICAgIC8qIEFjayBvcGVyYXRpb24gKi8KLSNkZWZpbmUgUF9PQ1JfU1JTVCAgICAgIDB4MDA4MCAgICAgIC8qIFJlc2V0IHN0YXRlIG1hY2hpbmVzLiBOb3Qgc2VsZmNsZWFuaW5nLiAqLwotI2RlZmluZSBQX09DUl9JRExFICAgICAgMHgwMDA4ICAgICAgLyogUFAgZGF0YSB0cmFuc2ZlciBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUgKi8KLSNkZWZpbmUgUF9PQ1JfVl9JTENLICAgIDB4MDAwMiAgICAgIC8qIFZlcnNhdGVjIGZhZGVkLiBaZWJyYSBvbmx5LiAqLwotI2RlZmluZSBQX09DUl9FTl9WRVIgICAgMHgwMDAxICAgICAgLyogRW5hYmxlIFZlcnNhdGVjICgwIC0gZW5hYmxlKS4gWmVicmEgb25seS4gKi8KLQotLyogUF9UQ1IgKi8KLSNkZWZpbmUgUF9UQ1JfRElSICAgICAgIDB4MDgKLSNkZWZpbmUgUF9UQ1JfQlVTWSAgICAgIDB4MDQKLSNkZWZpbmUgUF9UQ1JfQUNLICAgICAgIDB4MDIKLSNkZWZpbmUgUF9UQ1JfRFMgICAgICAgIDB4MDEgICAgICAgIC8qIFN0cm9iZSAqLwotCi0vKiBQX09SICovCi0jZGVmaW5lIFBfT1JfVjMgICAgICAgICAweDIwICAgICAgICAvKiApICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBQX09SX1YyICAgICAgICAgMHgxMCAgICAgICAgLyogKSBvbiBaZWJyYSBvbmx5ICAgKi8KLSNkZWZpbmUgUF9PUl9WMSAgICAgICAgIDB4MDggICAgICAgIC8qICkgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBfT1JfSU5JVCAgICAgICAweDA0Ci0jZGVmaW5lIFBfT1JfQUZYTiAgICAgICAweDAyICAgICAgICAvKiBBdXRvIEZlZWQgKi8KLSNkZWZpbmUgUF9PUl9TTENUX0lOICAgIDB4MDEKLQotLyogUF9JUiAqLwotI2RlZmluZSBQX0lSX1BFICAgICAgICAgMHgwNAotI2RlZmluZSBQX0lSX1NMQ1QgICAgICAgMHgwMgotI2RlZmluZSBQX0lSX0VSUiAgICAgICAgMHgwMQotCi0vKiBQX0lDUiAqLwotI2RlZmluZSBQX0RTX0lSUSAgICAgICAgMHg4MDAwICAgICAgLyogUlcxICAqLwotI2RlZmluZSBQX0FDS19JUlEgICAgICAgMHg0MDAwICAgICAgLyogUlcxICAqLwotI2RlZmluZSBQX0JVU1lfSVJRICAgICAgMHgyMDAwICAgICAgLyogUlcxICAqLwotI2RlZmluZSBQX1BFX0lSUSAgICAgICAgMHgxMDAwICAgICAgLyogUlcxICAqLwotI2RlZmluZSBQX1NMQ1RfSVJRICAgICAgMHgwODAwICAgICAgLyogUlcxICAqLwotI2RlZmluZSBQX0VSUl9JUlEgICAgICAgMHgwNDAwICAgICAgLyogUlcxICAqLwotI2RlZmluZSBQX0RTX0lSUV9FTiAgICAgMHgwMjAwICAgICAgLyogUlcgICBBbHdheXMgb24gcmlzaW5nIGVkZ2UgKi8KLSNkZWZpbmUgUF9BQ0tfSVJRX0VOICAgIDB4MDEwMCAgICAgIC8qIFJXICAgQWx3YXlzIG9uIHJpc2luZyBlZGdlICovCi0jZGVmaW5lIFBfQlVTWV9JUlAgICAgICAweDAwODAgICAgICAvKiBSVyAgIDE9IHJpc2luZyBlZGdlICovCi0jZGVmaW5lIFBfQlVTWV9JUlFfRU4gICAweDAwNDAgICAgICAvKiBSVyAgICovCi0jZGVmaW5lIFBfUEVfSVJQICAgICAgICAweDAwMjAgICAgICAvKiBSVyAgIDE9IHJpc2luZyBlZGdlICovCi0jZGVmaW5lIFBfUEVfSVJRX0VOICAgICAweDAwMTAgICAgICAvKiBSVyAgICovCi0jZGVmaW5lIFBfU0xDVF9JUlAgICAgICAweDAwMDggICAgICAvKiBSVyAgIDE9IHJpc2luZyBlZGdlICovCi0jZGVmaW5lIFBfU0xDVF9JUlFfRU4gICAweDAwMDQgICAgICAvKiBSVyAgICovCi0jZGVmaW5lIFBfRVJSX0lSUCAgICAgICAweDAwMDIgICAgICAvKiBSVzEgIDE9IHJpc2luZyBlZGdlICovCi0jZGVmaW5lIFBfRVJSX0lSUV9FTiAgICAweDAwMDEgICAgICAvKiBSVyAgICovCi0KLSNlbmRpZiAvKiAhKF9BU01fU1BBUkM2NF9TVU5CUFBfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc3VuYnBwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c2NhbGxzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c2NhbGxzLmgKaW5kZXggNDVhNDNmNi4uMzQ3N2IxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzY2FsbHMuaApAQCAtMSwxMyArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9TWVNDQUxMU19ICi0jZGVmaW5lIF9TUEFSQzY0X1NZU0NBTExTX0gKLQotc3RydWN0IHB0X3JlZ3M7Ci0KLWV4dGVybiBhc21saW5rYWdlIGxvbmcgc3BhcmNfZG9fZm9yayh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFja19zdGFydCwKLQkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFja19zaXplKTsKLQotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IHNwYXJjX2V4ZWN2ZShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLSNlbmRpZiAvKiBfU1BBUkM2NF9TWVNDQUxMU19IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3N5c2NhbGxzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaAppbmRleCA2ODk3YWMzLi5iZTI2MDNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmgKQEAgLTEsMzU1ICsxIEBACi0jaWZuZGVmIF9fU1BBUkM2NF9TWVNURU1fSAotI2RlZmluZSBfX1NQQVJDNjRfU1lTVEVNX0gKLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3Zpc2FzbS5oPgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jbXB4Y2hnLWxvY2FsLmg+Ci0KLS8qCi0gKiBTcGFyYyAoZ2VuZXJhbCkgQ1BVIHR5cGVzCi0gKi8KLWVudW0gc3BhcmNfY3B1IHsKLSAgc3VuNCAgICAgICAgPSAweDAwLAotICBzdW40YyAgICAgICA9IDB4MDEsCi0gIHN1bjRtICAgICAgID0gMHgwMiwKLSAgc3VuNGQgICAgICAgPSAweDAzLAotICBzdW40ZSAgICAgICA9IDB4MDQsCi0gIHN1bjR1ICAgICAgID0gMHgwNSwgLyogVjggcGxvb3MgcGxvb3MgKi8KLSAgc3VuX3Vua25vd24gPSAweDA2LAotICBhcDEwMDAgICAgICA9IDB4MDcsIC8qIGFsbW9zdCBhIHN1bjRtICovCi19OwotICAgICAgICAgICAgICAgICAgCi0jZGVmaW5lIHNwYXJjX2NwdV9tb2RlbCBzdW40dQotCi0vKiBUaGlzIGNhbm5vdCBldmVyIGJlIGEgc3VuNGMgbm9yIHN1bjQgOikgVGhhdCdzIGp1c3QgaGlzdG9yeS4gKi8KLSNkZWZpbmUgQVJDSF9TVU40Q19TVU40IDAKLSNkZWZpbmUgQVJDSF9TVU40IDAKLQotZXh0ZXJuIGNoYXIgcmVib290X2NvbW1hbmRbXTsKLQotLyogVGhlc2UgYXJlIGhlcmUgaW4gYW4gZWZmb3J0IHRvIG1vcmUgZnVsbHkgd29yayBhcm91bmQgU3BpdGZpcmUgRXJyYXRhCi0gKiAjNTEuICBFc3NlbnRpYWxseSwgaWYgYSBtZW1vcnkgYmFycmllciBvY2N1cnMgc29vbiBhZnRlciBhIG1pc3ByZWRpY3RlZAotICogYnJhbmNoLCB0aGUgY2hpcCBjYW4gc3RvcCBleGVjdXRpbmcgaW5zdHJ1Y3Rpb25zIHVudGlsIGEgdHJhcCBvY2N1cnMuCi0gKiBUaGVyZWZvcmUsIGlmIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB0aGUgY2hpcCBjYW4gaGFuZyBmb3JldmVyLgotICoKLSAqIEl0IHVzZWQgdG8gYmUgYmVsaWV2ZWQgdGhhdCB0aGUgbWVtb3J5IGJhcnJpZXIgaGFkIHRvIGJlIHJpZ2h0IGluIHRoZQotICogZGVsYXkgc2xvdCwgYnV0IGEgY2FzZSBoYXMgYmVlbiB0cmFjZWQgcmVjZW50bHkgd2hlcmVpbiB0aGUgbWVtb3J5IGJhcnJpZXIKLSAqIHdhcyBvbmUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIGJyYW5jaCBkZWxheSBzbG90IGFuZCB0aGUgY2hpcCBzdGlsbCBodW5nLgotICogVGhlIG9mZmVuZGluZyBzZXF1ZW5jZSB3YXMgdGhlIGZvbGxvd2luZyBpbiBzeW1fd2FrZXVwX2RvbmUoKSBvZiB0aGUKLSAqIHN5bTUzYzh4eF8yIGRyaXZlcjoKLSAqCi0gKgljYWxsCXN5bV9jY2JfZnJvbV9kc2EsIDAKLSAqCSBtb3ZnZQklaWNjLCAwLCAlbDAKLSAqCWJyeixwbgklbzAsIC5MTDEzMDMKLSAqCSBtb3YJJW8wLCAlbDIKLSAqCW1lbWJhcgkjTG9hZExvYWQKLSAqCi0gKiBUaGUgYnJhbmNoIGhhcyB0byBiZSBtaXNwcmVkaWN0ZWQgZm9yIHRoZSBidWcgdG8gb2NjdXIuICBUaGVyZWZvcmUsIHdlIHB1dAotICogdGhlIG1lbW9yeSBiYXJyaWVyIGV4cGxpY2l0bHkgaW50byBhICJicmFuY2ggYWx3YXlzLCBwcmVkaWN0ZWQgdGFrZW4iCi0gKiBkZWxheSBzbG90IHRvIGF2b2lkIHRoZSBwcm9ibGVtIGNhc2UuCi0gKi8KLSNkZWZpbmUgbWVtYmFyX3NhZmUodHlwZSkgXAotZG8gewlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYmEscHQJJSV4Y2MsIDFmXG5cdCIgXAotCQkJICAgICAiIG1lbWJhcgkiIHR5cGUgIlxuIiBcCi0JCQkgICAgICIxOlxuIiBcCi0JCQkgICAgIDogOiA6ICJtZW1vcnkiKTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBtYigpCVwKLQltZW1iYXJfc2FmZSgiI0xvYWRMb2FkIHwgI0xvYWRTdG9yZSB8ICNTdG9yZVN0b3JlIHwgI1N0b3JlTG9hZCIpCi0jZGVmaW5lIHJtYigpCVwKLQltZW1iYXJfc2FmZSgiI0xvYWRMb2FkIikKLSNkZWZpbmUgd21iKCkJXAotCW1lbWJhcl9zYWZlKCIjU3RvcmVTdG9yZSIpCi0jZGVmaW5lIG1lbWJhcl9zdG9yZWxvYWQoKSBcCi0JbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQiKQotI2RlZmluZSBtZW1iYXJfc3RvcmVsb2FkX3N0b3Jlc3RvcmUoKSBcCi0JbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZSIpCi0jZGVmaW5lIG1lbWJhcl9zdG9yZWxvYWRfbG9hZGxvYWQoKSBcCi0JbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQgfCAjTG9hZExvYWQiKQotI2RlZmluZSBtZW1iYXJfc3RvcmVzdG9yZV9sb2Fkc3RvcmUoKSBcCi0JbWVtYmFyX3NhZmUoIiNTdG9yZVN0b3JlIHwgI0xvYWRTdG9yZSIpCi0KLSNlbmRpZgotCi0jZGVmaW5lIG5vcCgpIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3AiKQotCi0jZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJCWRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBzZXRfbWIoX192YXIsIF9fdmFsdWUpIFwKLQlkbyB7IF9fdmFyID0gX192YWx1ZTsgbWVtYmFyX3N0b3JlbG9hZF9zdG9yZXN0b3JlKCk7IH0gd2hpbGUoMCkKLQotI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgc21wX21iKCkJbWIoKQotI2RlZmluZSBzbXBfcm1iKCkJcm1iKCkKLSNkZWZpbmUgc21wX3dtYigpCXdtYigpCi0jZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCXJlYWRfYmFycmllcl9kZXBlbmRzKCkKLSNlbHNlCi0jZGVmaW5lIHNtcF9tYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCi0jZGVmaW5lIHNtcF9ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQotI2RlZmluZSBzbXBfd21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKLSNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlKDApCi0jZW5kaWYKLQotI2RlZmluZSBmbHVzaGkoYWRkcikJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbHVzaCAlMCIgOiA6ICJyIiAoYWRkcikgOiAibWVtb3J5IikKLQotI2RlZmluZSBmbHVzaHdfYWxsKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oImZsdXNodyIpCi0KLS8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXIgYWNjZXNzLiAqLwotI2RlZmluZSByZWFkX3BjcihfX3ApICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQJJSVwY3IsICUwIiA6ICI9ciIgKF9fcCkpCi0jZGVmaW5lIHdyaXRlX3BjcihfX3ApIF9fYXNtX18gX192b2xhdGlsZV9fKCJ3cgklMCwgMHgwLCAlJXBjciIgOiA6ICJyIiAoX19wKSkKLSNkZWZpbmUgcmVhZF9waWMoX19wKSAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkICUlcGljLCAlMCIgOiAiPXIiIChfX3ApKQotCi0vKiBCbGFja2JpcmQgZXJyYXRhIHdvcmthcm91bmQuICBTZWUgY29tbWVudGFyeSBpbgotICogYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYzpzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdCgpCi0gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqLwotI2RlZmluZSByZXNldF9waWMoKSAgICAJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImJhLHB0CSV4Y2MsIDk5ZlxuXHQiCQlcCi0JCQkgICAgICIuYWxpZ24JNjRcbiIJCQlcCi0JCQkgICI5OTp3cgklZzAsIDB4MCwgJXBpY1xuXHQiCVwKLQkJCSAgICAgInJkCSVwaWMsICVnMCIpCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLWV4dGVybiB2b2lkIHN1bl9kb19icmVhayh2b2lkKTsKLWV4dGVybiBpbnQgc3RvcF9hX2VuYWJsZWQ7Ci0KLWV4dGVybiB2b2lkIGZhdWx0X2luX3VzZXJfd2luZG93cyh2b2lkKTsKLWV4dGVybiB2b2lkIHN5bmNocm9uaXplX3VzZXJfc3RhY2sodm9pZCk7Ci0KLWV4dGVybiB2b2lkIF9fZmx1c2h3X3VzZXIodm9pZCk7Ci0jZGVmaW5lIGZsdXNod191c2VyKCkgX19mbHVzaHdfdXNlcigpCi0KLSNkZWZpbmUgZmx1c2hfdXNlcl93aW5kb3dzIGZsdXNod191c2VyCi0jZGVmaW5lIGZsdXNoX3JlZ2lzdGVyX3dpbmRvd3MgZmx1c2h3X2FsbAotCi0vKiBEb24ndCBob2xkIHRoZSBydW5xdWV1ZSBsb2NrIG92ZXIgY29udGV4dCBzd2l0Y2ggKi8KLSNkZWZpbmUgX19BUkNIX1dBTlRfVU5MT0NLRURfQ1RYU1cKLSNkZWZpbmUgcHJlcGFyZV9hcmNoX3N3aXRjaChuZXh0KQkJXAotZG8gewkJCQkJCVwKLQlmbHVzaHdfYWxsKCk7CQkJCVwKLX0gd2hpbGUgKDApCi0KLQkvKiBTZWUgd2hhdCBoYXBwZW5zIHdoZW4geW91IGRlc2lnbiB0aGUgY2hpcCBjb3JyZWN0bHk/Ci0JICoKLQkgKiBXZSB0ZWxsIGdjYyB3ZSBjbG9iYmVyIGFsbCBub24tZml4ZWQtdXNhZ2UgcmVnaXN0ZXJzIGV4Y2VwdAotCSAqIGZvciBsMC9sMS4gIEl0IHdpbGwgdXNlIG9uZSBmb3IgJ25leHQnIGFuZCB0aGUgb3RoZXIgdG8gaG9sZAotCSAqIHRoZSBvdXRwdXQgdmFsdWUgb2YgJ2xhc3QnLiAgJ25leHQnIGlzIG5vdCByZWZlcmVuY2VkIGFnYWluCi0JICogcGFzdCB0aGUgaW52b2NhdGlvbiBvZiBzd2l0Y2hfdG8gaW4gdGhlIHNjaGVkdWxlciwgc28gd2UgbmVlZAotCSAqIG5vdCBwcmVzZXJ2ZSBpdCdzIHZhbHVlLiAgSGFpcnksIGJ1dCBpdCBsZXRzIHVzIHJlbW92ZSAyIGxvYWRzCi0JICogYW5kIDIgc3RvcmVzIGluIHRoaXMgY3JpdGljYWwgY29kZSBwYXRoLiAgLURhdmVNCi0JICovCi0jZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KQkJCQkJXAotZG8gewlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUEVSRkNUUikpIHsJCQkJXAotCQl1bnNpZ25lZCBsb25nIF9fdG1wOwkJCQkJXAotCQlyZWFkX3BjcihfX3RtcCk7CQkJCQlcCi0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cGNyX3JlZyA9IF9fdG1wOwkJCVwKLQkJcmVhZF9waWMoX190bXApOwkJCQkJXAotCQljdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5lbF9jbnRkMCArPSAodW5zaWduZWQgaW50KShfX3RtcCk7XAotCQljdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5lbF9jbnRkMSArPSAoKF9fdG1wKSA+PiAzMik7CVwKLQl9CQkJCQkJCQlcCi0JZmx1c2hfdGxiX3BlbmRpbmcoKTsJCQkJCQlcCi0Jc2F2ZV9hbmRfY2xlYXJfZnB1KCk7CQkJCQkJXAotCS8qIElmIHlvdSBhcmUgdGVtcHRlZCB0byBjb25kaXRpb25hbGl6ZSB0aGUgZm9sbG93aW5nICovCVwKLQkvKiBzbyB0aGF0IEFTSSBpcyBvbmx5IHdyaXR0ZW4gaWYgaXQgY2hhbmdlcywgdGhpbmsgYWdhaW4uICovCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3IgJSVnMCwgJTAsICUlYXNpIgkJCVwKLQk6IDogInIiIChfX3RocmVhZF9mbGFnX2J5dGVfcHRyKHRhc2tfdGhyZWFkX2luZm8obmV4dCkpW1RJX0ZMQUdfQllURV9DVVJSRU5UX0RTXSkpO1wKLQl0cmFwX2Jsb2NrW2N1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1XS50aHJlYWQgPQkJCVwKLQkJdGFza190aHJlYWRfaW5mbyhuZXh0KTsJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JIm1vdgklJWc0LCAlJWc3XG5cdCIJCQkJCQlcCi0JInN0eAklJWk2LCBbJSVzcCArIDIwNDcgKyAweDcwXVxuXHQiCQkJCVwKLQkic3R4CSUlaTcsIFslJXNwICsgMjA0NyArIDB4NzhdXG5cdCIJCQkJXAotCSJyZHByCSUld3N0YXRlLCAlJW81XG5cdCIJCQkJCVwKLQkic3R4CSUlbzYsIFslJWc2ICsgJTZdXG5cdCIJCQkJCVwKLQkic3RiCSUlbzUsIFslJWc2ICsgJTVdXG5cdCIJCQkJCVwKLQkicmRwcgklJWN3cCwgJSVvNVxuXHQiCQkJCQlcCi0JInN0YgklJW81LCBbJSVnNiArICU4XVxuXHQiCQkJCQlcCi0JIm1vdgklNCwgJSVnNlxuXHQiCQkJCQkJXAotCSJsZHViCVslNCArICU4XSwgJSVnMVxuXHQiCQkJCQlcCi0JIndycHIJJSVnMSwgJSVjd3Bcblx0IgkJCQkJXAotCSJsZHgJWyUlZzYgKyAlNl0sICUlbzZcblx0IgkJCQkJXAotCSJsZHViCVslJWc2ICsgJTVdLCAlJW81XG5cdCIJCQkJCVwKLQkibGR1YglbJSVnNiArICU3XSwgJSVvN1xuXHQiCQkJCQlcCi0JIndycHIJJSVvNSwgMHgwLCAlJXdzdGF0ZVxuXHQiCQkJCVwKLQkibGR4CVslJXNwICsgMjA0NyArIDB4NzBdLCAlJWk2XG5cdCIJCQkJXAotCSJsZHgJWyUlc3AgKyAyMDQ3ICsgMHg3OF0sICUlaTdcblx0IgkJCQlcCi0JImxkeAlbJSVnNiArICU5XSwgJSVnNFxuXHQiCQkJCQlcCi0JImJyeixwdCAlJW83LCBzd2l0Y2hfdG9fcGNcblx0IgkJCQkJXAotCSIgbW92CSUlZzcsICUwXG5cdCIJCQkJCQlcCi0JInNldGhpCSUlaGkocmV0X2Zyb21fc3lzY2FsbCksICUlZzFcblx0IgkJCVwKLQkiam1wbAklJWcxICsgJSVsbyhyZXRfZnJvbV9zeXNjYWxsKSwgJSVnMFxuXHQiCQlcCi0JIiBub3Bcblx0IgkJCQkJCQlcCi0JIi5nbG9ibCBzd2l0Y2hfdG9fcGNcblx0IgkJCQkJXAotCSJzd2l0Y2hfdG9fcGM6XG5cdCIJCQkJCQlcCi0JOiAiPSZyIiAobGFzdCksICI9ciIgKGN1cnJlbnQpLCAiPXIiIChjdXJyZW50X3RocmVhZF9pbmZvX3JlZyksCVwKLQkgICI9ciIgKF9fbG9jYWxfcGVyX2NwdV9vZmZzZXQpCQkJCQlcCi0JOiAiMCIgKHRhc2tfdGhyZWFkX2luZm8obmV4dCkpLAkJCQkJXAotCSAgImkiIChUSV9XU1RBVEUpLCAiaSIgKFRJX0tTUCksICJpIiAoVElfTkVXX0NISUxEKSwgICAgICAgICAgICBcCi0JICAiaSIgKFRJX0NXUCksICJpIiAoVElfVEFTSykJCQkJCVwKLQk6ICJjYyIsCQkJCQkJCQlcCi0JICAgICAgICAiZzEiLCAiZzIiLCAiZzMiLCAgICAgICAgICAgICAgICAgICAiZzciLAkJXAotCSAgICAgICAgImwxIiwgImwyIiwgImwzIiwgImw0IiwgImw1IiwgImw2IiwgImw3IiwJCVwKLQkgICJpMCIsICJpMSIsICJpMiIsICJpMyIsICJpNCIsICJpNSIsCQkJCVwKLQkgICJvMCIsICJvMSIsICJvMiIsICJvMyIsICJvNCIsICJvNSIsICAgICAgICJvNyIpOwkJXAotCS8qIElmIHlvdSBmdWNrIHdpdGggdGhpcywgdXBkYXRlIHJldF9mcm9tX3N5c2NhbGwgY29kZSB0b28uICovCVwKLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUEVSRkNUUikpIHsJCQkJXAotCQl3cml0ZV9wY3IoY3VycmVudF90aHJlYWRfaW5mbygpLT5wY3JfcmVnKTsJCVwKLQkJcmVzZXRfcGljKCk7CQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUoMCkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHhjaGczMihfX3ZvbGF0aWxlX18gdW5zaWduZWQgaW50ICptLCB1bnNpZ25lZCBpbnQgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjTG9hZExvYWRcbiIKLSIJbW92CQklMCwgJTFcbiIKLSIxOglsZHV3CQlbJTRdLCAlMlxuIgotIgljYXMJCVslNF0sICUyLCAlMFxuIgotIgljbXAJCSUyLCAlMFxuIgotIglibmUsYSxwbgklJWljYywgMWJcbiIKLSIJIG1vdgkJJTEsICUwXG4iCi0iCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCi0JOiAiPSZyIiAodmFsKSwgIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKLQk6ICIwIiAodmFsKSwgInIiIChtKQotCTogImNjIiwgIm1lbW9yeSIpOwotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnNjQoX192b2xhdGlsZV9fIHVuc2lnbmVkIGxvbmcgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjTG9hZExvYWRcbiIKLSIJbW92CQklMCwgJTFcbiIKLSIxOglsZHgJCVslNF0sICUyXG4iCi0iCWNhc3gJCVslNF0sICUyLCAlMFxuIgotIgljbXAJCSUyLCAlMFxuIgotIglibmUsYSxwbgklJXhjYywgMWJcbiIKLSIJIG1vdgkJJTEsICUwXG4iCi0iCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCi0JOiAiPSZyIiAodmFsKSwgIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKLQk6ICIwIiAodmFsKSwgInIiIChtKQotCTogImNjIiwgIm1lbW9yeSIpOwotCXJldHVybiB2YWw7Ci19Ci0KLSNkZWZpbmUgeGNoZyhwdHIseCkgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCi0KLWV4dGVybiB2b2lkIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIF9fdm9sYXRpbGVfXyB2b2lkICogcHRyLAotCQkJCSAgICAgICBpbnQgc2l6ZSkKLXsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDQ6Ci0JCXJldHVybiB4Y2hnMzIocHRyLCB4KTsKLQljYXNlIDg6Ci0JCXJldHVybiB4Y2hnNjQocHRyLCB4KTsKLQl9OwotCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOwotCXJldHVybiB4OwotfQotCi1leHRlcm4gdm9pZCBkaWVfaWZfa2VybmVsKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwotCi0vKiAKLSAqIEF0b21pYyBjb21wYXJlIGFuZCBleGNoYW5nZS4gIENvbXBhcmUgT0xEIHdpdGggTUVNLCBpZiBpZGVudGljYWwsCi0gKiBzdG9yZSBORVcgaW4gTUVNLiAgUmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlIGluIE1FTS4gIFN1Y2Nlc3MgaXMKLSAqIGluZGljYXRlZCBieSBjb21wYXJpbmcgUkVUVVJOIHdpdGggT0xELgotICovCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRyAxCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX19jbXB4Y2hnX3UzMih2b2xhdGlsZSBpbnQgKm0sIGludCBvbGQsIGludCBuZXcpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIm1lbWJhciAjU3RvcmVMb2FkIHwgI0xvYWRMb2FkXG4iCi0JCQkgICAgICJjYXMgWyUyXSwgJTMsICUwXG5cdCIKLQkJCSAgICAgIm1lbWJhciAjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUiCi0JCQkgICAgIDogIj0mciIgKG5ldykKLQkJCSAgICAgOiAiMCIgKG5ldyksICJyIiAobSksICJyIiAob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQotCXJldHVybiBuZXc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX19jbXB4Y2hnX3U2NCh2b2xhdGlsZSBsb25nICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIm1lbWJhciAjU3RvcmVMb2FkIHwgI0xvYWRMb2FkXG4iCi0JCQkgICAgICJjYXN4IFslMl0sICUzLCAlMFxuXHQiCi0JCQkgICAgICJtZW1iYXIgI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIgotCQkJICAgICA6ICI9JnIiIChuZXcpCi0JCQkgICAgIDogIjAiIChuZXcpLCAiciIgKG0pLCAiciIgKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gbmV3OwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKLSAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIGNtcHhjaGcoKS4gICovCi1leHRlcm4gdm9pZCBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKLXsKLQlzd2l0Y2ggKHNpemUpIHsKLQkJY2FzZSA0OgotCQkJcmV0dXJuIF9fY21weGNoZ191MzIocHRyLCBvbGQsIG5ldyk7Ci0JCWNhc2UgODoKLQkJCXJldHVybiBfX2NtcHhjaGdfdTY0KHB0ciwgb2xkLCBuZXcpOwotCX0KLQlfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKLQlyZXR1cm4gb2xkOwotfQotCi0jZGVmaW5lIGNtcHhjaGcocHRyLG8sbikJCQkJCQkgXAotICAoewkJCQkJCQkJCSBcCi0gICAgIF9fdHlwZW9mX18oKihwdHIpKSBfb18gPSAobyk7CQkJCQkgXAotICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX25fID0gKG4pOwkJCQkJIFwKLSAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCQkgXAotCQkJCSAgICAodW5zaWduZWQgbG9uZylfbl8sIHNpemVvZigqKHB0cikpKTsgXAotICB9KQotCi0vKgotICogY21weGNoZ19sb2NhbCBhbmQgY21weGNoZzY0X2xvY2FsIGFyZSBhdG9taWMgd3J0IGN1cnJlbnQgQ1BVLiBBbHdheXMgbWFrZQotICogdGhlbSBhdmFpbGFibGUuCi0gKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ19sb2NhbCh2b2xhdGlsZSB2b2lkICpwdHIsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQotewotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgNDoKLQljYXNlIDg6CXJldHVybiBfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgc2l6ZSk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIF9fY21weGNoZ19sb2NhbF9nZW5lcmljKHB0ciwgb2xkLCBuZXcsIHNpemUpOwotCX0KLQotCXJldHVybiBvbGQ7Ci19Ci0KLSNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG8sIG4pCQkJCSAgCVwKLQkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGdfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJXAotCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSkpCi0jZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pCQkJCQlcCi0gICh7CQkJCQkJCQkJXAotCUJVSUxEX0JVR19PTihzaXplb2YoKihwdHIpKSAhPSA4KTsJCQkJXAotCWNtcHhjaGdfbG9jYWwoKHB0ciksIChvKSwgKG4pKTsJCQkJCVwKLSAgfSkKLQotI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotCi0jZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCi0KLSNlbmRpZiAvKiAhKF9fU1BBUkM2NF9TWVNURU1fSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Rlcm1iaXRzLmgKaW5kZXggZWJlMzFjMS4uZTAzZjk3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGVybWJpdHMuaApAQCAtMSwyNjAgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfVEVSTUJJVFNfSAotI2RlZmluZSBfU1BBUkM2NF9URVJNQklUU19ICi0KLSNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBjY190OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgc3BlZWRfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgIHRjZmxhZ190OwotCi0jZGVmaW5lIE5DQyA4Ci1zdHJ1Y3QgdGVybWlvIHsKLQl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLwotCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLwotCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCi0JdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLwotfTsKLQotI2RlZmluZSBOQ0NTIDE3Ci1zdHJ1Y3QgdGVybWlvcyB7Ci0JdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KLQljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KLQljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIFNJWkVPRl9VU0VSX1RFUk1JT1Mgc2l6ZW9mIChzdHJ1Y3QgdGVybWlvcykgLSAoMipzaXplb2YgKGNjX3QpKQotCWNjX3QgX3hfY2NbMl07ICAgICAgICAgICAgICAgICAgLyogV2UgbmVlZCB0aGVtIHRvIGhvbGQgdm1pbi92dGltZSAqLwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgdGVybWlvczIgewotCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLwotCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCi0JY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCi0JY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCi0JY2NfdCBfeF9jY1syXTsgICAgICAgICAgICAgICAgICAvKiBwYWRkaW5nIHRvIG1hdGNoIGt0ZXJtaW9zICovCi0Jc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCi0Jc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLwotfTsKLQotc3RydWN0IGt0ZXJtaW9zIHsKLQl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLwotCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLwotCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLwotCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLwotCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLwotCWNjX3QgX3hfY2NbMl07ICAgICAgICAgICAgICAgICAgLyogV2UgbmVlZCB0aGVtIHRvIGhvbGQgdm1pbi92dGltZSAqLwotCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLwotCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KLX07Ci0KLS8qIGNfY2MgY2hhcmFjdGVycyAqLwotI2RlZmluZSBWSU5UUiAgICAwCi0jZGVmaW5lIFZRVUlUICAgIDEKLSNkZWZpbmUgVkVSQVNFICAgMgotI2RlZmluZSBWS0lMTCAgICAzCi0jZGVmaW5lIFZFT0YgICAgIDQKLSNkZWZpbmUgVkVPTCAgICAgNQotI2RlZmluZSBWRU9MMiAgICA2Ci0jZGVmaW5lIFZTV1RDICAgIDcKLSNkZWZpbmUgVlNUQVJUICAgOAotI2RlZmluZSBWU1RPUCAgICA5Ci0KLQotCi0jZGVmaW5lIFZTVVNQICAgIDEwCi0jZGVmaW5lIFZEU1VTUCAgIDExICAvKiBTdW5PUyBQT1NJWCBuaWNldHkgSSBkbyBiZWxpZXZlLi4uICovCi0jZGVmaW5lIFZSRVBSSU5UIDEyCi0jZGVmaW5lIFZESVNDQVJEIDEzCi0jZGVmaW5lIFZXRVJBU0UgIDE0Ci0jZGVmaW5lIFZMTkVYVCAgIDE1Ci0KLS8qIEtlcm5lbCBrZWVwcyB2bWluL3Z0aW1lIHNlcGFyYXRlZCwgdXNlciBhcHBzIGFzc3VtZSB2bWluL3Z0aW1lIGlzCi0gKiBzaGFyZWQgd2l0aCBlb2YvZW9sCi0gKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIFZNSU4gICAgIDE2Ci0jZGVmaW5lIFZUSU1FICAgIDE3Ci0jZWxzZQotI2RlZmluZSBWTUlOICAgICBWRU9GCi0jZGVmaW5lIFZUSU1FICAgIFZFT0wKLSNlbmRpZgotCi0vKiBjX2lmbGFnIGJpdHMgKi8KLSNkZWZpbmUgSUdOQlJLCTB4MDAwMDAwMDEKLSNkZWZpbmUgQlJLSU5UCTB4MDAwMDAwMDIKLSNkZWZpbmUgSUdOUEFSCTB4MDAwMDAwMDQKLSNkZWZpbmUgUEFSTVJLCTB4MDAwMDAwMDgKLSNkZWZpbmUgSU5QQ0sJMHgwMDAwMDAxMAotI2RlZmluZSBJU1RSSVAJMHgwMDAwMDAyMAotI2RlZmluZSBJTkxDUgkweDAwMDAwMDQwCi0jZGVmaW5lIElHTkNSCTB4MDAwMDAwODAKLSNkZWZpbmUgSUNSTkwJMHgwMDAwMDEwMAotI2RlZmluZSBJVUNMQwkweDAwMDAwMjAwCi0jZGVmaW5lIElYT04JMHgwMDAwMDQwMAotI2RlZmluZSBJWEFOWQkweDAwMDAwODAwCi0jZGVmaW5lIElYT0ZGCTB4MDAwMDEwMDAKLSNkZWZpbmUgSU1BWEJFTAkweDAwMDAyMDAwCi0jZGVmaW5lIElVVEY4CTB4MDAwMDQwMDAKLQotLyogY19vZmxhZyBiaXRzICovCi0jZGVmaW5lIE9QT1NUCTB4MDAwMDAwMDEKLSNkZWZpbmUgT0xDVUMJMHgwMDAwMDAwMgotI2RlZmluZSBPTkxDUgkweDAwMDAwMDA0Ci0jZGVmaW5lIE9DUk5MCTB4MDAwMDAwMDgKLSNkZWZpbmUgT05PQ1IJMHgwMDAwMDAxMAotI2RlZmluZSBPTkxSRVQJMHgwMDAwMDAyMAotI2RlZmluZSBPRklMTAkweDAwMDAwMDQwCi0jZGVmaW5lIE9GREVMCTB4MDAwMDAwODAKLSNkZWZpbmUgTkxETFkJMHgwMDAwMDEwMAotI2RlZmluZSAgIE5MMAkweDAwMDAwMDAwCi0jZGVmaW5lICAgTkwxCTB4MDAwMDAxMDAKLSNkZWZpbmUgQ1JETFkJMHgwMDAwMDYwMAotI2RlZmluZSAgIENSMAkweDAwMDAwMDAwCi0jZGVmaW5lICAgQ1IxCTB4MDAwMDAyMDAKLSNkZWZpbmUgICBDUjIJMHgwMDAwMDQwMAotI2RlZmluZSAgIENSMwkweDAwMDAwNjAwCi0jZGVmaW5lIFRBQkRMWQkweDAwMDAxODAwCi0jZGVmaW5lICAgVEFCMAkweDAwMDAwMDAwCi0jZGVmaW5lICAgVEFCMQkweDAwMDAwODAwCi0jZGVmaW5lICAgVEFCMgkweDAwMDAxMDAwCi0jZGVmaW5lICAgVEFCMwkweDAwMDAxODAwCi0jZGVmaW5lICAgWFRBQlMJMHgwMDAwMTgwMAotI2RlZmluZSBCU0RMWQkweDAwMDAyMDAwCi0jZGVmaW5lICAgQlMwCTB4MDAwMDAwMDAKLSNkZWZpbmUgICBCUzEJMHgwMDAwMjAwMAotI2RlZmluZSBWVERMWQkweDAwMDA0MDAwCi0jZGVmaW5lICAgVlQwCTB4MDAwMDAwMDAKLSNkZWZpbmUgICBWVDEJMHgwMDAwNDAwMAotI2RlZmluZSBGRkRMWQkweDAwMDA4MDAwCi0jZGVmaW5lICAgRkYwCTB4MDAwMDAwMDAKLSNkZWZpbmUgICBGRjEJMHgwMDAwODAwMAotI2RlZmluZSBQQUdFT1VUIDB4MDAwMTAwMDAgIC8qIFNVTk9TIHNwZWNpZmljICovCi0jZGVmaW5lIFdSQVAgICAgMHgwMDAyMDAwMCAgLyogU1VOT1Mgc3BlY2lmaWMgKi8KLQotLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLwotI2RlZmluZSBDQkFVRAkgIDB4MDAwMDEwMGYKLSNkZWZpbmUgIEIwCSAgMHgwMDAwMDAwMCAgIC8qIGhhbmcgdXAgKi8KLSNkZWZpbmUgIEI1MAkgIDB4MDAwMDAwMDEKLSNkZWZpbmUgIEI3NQkgIDB4MDAwMDAwMDIKLSNkZWZpbmUgIEIxMTAJICAweDAwMDAwMDAzCi0jZGVmaW5lICBCMTM0CSAgMHgwMDAwMDAwNAotI2RlZmluZSAgQjE1MAkgIDB4MDAwMDAwMDUKLSNkZWZpbmUgIEIyMDAJICAweDAwMDAwMDA2Ci0jZGVmaW5lICBCMzAwCSAgMHgwMDAwMDAwNwotI2RlZmluZSAgQjYwMAkgIDB4MDAwMDAwMDgKLSNkZWZpbmUgIEIxMjAwCSAgMHgwMDAwMDAwOQotI2RlZmluZSAgQjE4MDAJICAweDAwMDAwMDBhCi0jZGVmaW5lICBCMjQwMAkgIDB4MDAwMDAwMGIKLSNkZWZpbmUgIEI0ODAwCSAgMHgwMDAwMDAwYwotI2RlZmluZSAgQjk2MDAJICAweDAwMDAwMDBkCi0jZGVmaW5lICBCMTkyMDAJICAweDAwMDAwMDBlCi0jZGVmaW5lICBCMzg0MDAJICAweDAwMDAwMDBmCi0jZGVmaW5lIEVYVEEgICAgICBCMTkyMDAKLSNkZWZpbmUgRVhUQiAgICAgIEIzODQwMAotI2RlZmluZSAgQ1NJWkUgICAgMHgwMDAwMDAzMAotI2RlZmluZSAgIENTNQkgIDB4MDAwMDAwMDAKLSNkZWZpbmUgICBDUzYJICAweDAwMDAwMDEwCi0jZGVmaW5lICAgQ1M3CSAgMHgwMDAwMDAyMAotI2RlZmluZSAgIENTOAkgIDB4MDAwMDAwMzAKLSNkZWZpbmUgQ1NUT1BCCSAgMHgwMDAwMDA0MAotI2RlZmluZSBDUkVBRAkgIDB4MDAwMDAwODAKLSNkZWZpbmUgUEFSRU5CCSAgMHgwMDAwMDEwMAotI2RlZmluZSBQQVJPREQJICAweDAwMDAwMjAwCi0jZGVmaW5lIEhVUENMCSAgMHgwMDAwMDQwMAotI2RlZmluZSBDTE9DQUwJICAweDAwMDAwODAwCi0jZGVmaW5lIENCQVVERVggICAweDAwMDAxMDAwCi0jZGVmaW5lICBCT1RIRVIgICAweDAwMDAxMDAwCi0jZGVmaW5lICBCNTc2MDAgICAweDAwMDAxMDAxCi0jZGVmaW5lICBCMTE1MjAwICAweDAwMDAxMDAyCi0jZGVmaW5lICBCMjMwNDAwICAweDAwMDAxMDAzCi0jZGVmaW5lICBCNDYwODAwICAweDAwMDAxMDA0Ci0vKiBUaGlzIGlzIHdoYXQgd2UgY2FuIGRvIHdpdGggdGhlIFppbG9ncy4gKi8KLSNkZWZpbmUgIEI3NjgwMCAgIDB4MDAwMDEwMDUKLS8qIFRoaXMgaXMgd2hhdCB3ZSBjYW4gZG8gd2l0aCB0aGUgU0FCODI1MzIuICovCi0jZGVmaW5lICBCMTUzNjAwICAweDAwMDAxMDA2Ci0jZGVmaW5lICBCMzA3MjAwICAweDAwMDAxMDA3Ci0jZGVmaW5lICBCNjE0NDAwICAweDAwMDAxMDA4Ci0jZGVmaW5lICBCOTIxNjAwICAweDAwMDAxMDA5Ci0vKiBBbmQgdGhlc2UgYXJlIHRoZSByZXN0Li4uICovCi0jZGVmaW5lICBCNTAwMDAwICAweDAwMDAxMDBhCi0jZGVmaW5lICBCNTc2MDAwICAweDAwMDAxMDBiCi0jZGVmaW5lIEIxMDAwMDAwICAweDAwMDAxMDBjCi0jZGVmaW5lIEIxMTUyMDAwICAweDAwMDAxMDBkCi0jZGVmaW5lIEIxNTAwMDAwICAweDAwMDAxMDBlCi0jZGVmaW5lIEIyMDAwMDAwICAweDAwMDAxMDBmCi0vKiBUaGVzZSBoYXZlIHRvdGFsbHkgYm9ndXMgdmFsdWVzIGFuZCBub2JvZHkgdXNlcyB0aGVtCi0gICBzbyBmYXIuIExhdGVyIG9uIHdlJ2QgaGF2ZSB0byB1c2Ugc2F5IDB4MTAwMDB4IGFuZAotICAgYWRqdXN0IENCQVVEIGNvbnN0YW50IGFuZCBkcml2ZXJzIGFjY29yZGluZ2x5LgotI2RlZmluZSBCMjUwMDAwMCAgMHgwMDAwMTAxMAotI2RlZmluZSBCMzAwMDAwMCAgMHgwMDAwMTAxMQotI2RlZmluZSBCMzUwMDAwMCAgMHgwMDAwMTAxMgotI2RlZmluZSBCNDAwMDAwMCAgMHgwMDAwMTAxMyAgKi8KLSNkZWZpbmUgQ0lCQVVECSAgMHgxMDBmMDAwMCAgLyogaW5wdXQgYmF1ZCByYXRlIChub3QgdXNlZCkgKi8KLSNkZWZpbmUgQ01TUEFSICAgIDB4NDAwMDAwMDAgIC8qIG1hcmsgb3Igc3BhY2UgKHN0aWNrKSBwYXJpdHkgKi8KLSNkZWZpbmUgQ1JUU0NUUwkgIDB4ODAwMDAwMDAgIC8qIGZsb3cgY29udHJvbCAqLwotCi0jZGVmaW5lIElCU0hJRlQJICAxNgkJLyogU2hpZnQgZnJvbSBDQkFVRCB0byBDSUJBVUQgKi8KLQotLyogY19sZmxhZyBiaXRzICovCi0jZGVmaW5lIElTSUcJMHgwMDAwMDAwMQotI2RlZmluZSBJQ0FOT04JMHgwMDAwMDAwMgotI2RlZmluZSBYQ0FTRQkweDAwMDAwMDA0Ci0jZGVmaW5lIEVDSE8JMHgwMDAwMDAwOAotI2RlZmluZSBFQ0hPRQkweDAwMDAwMDEwCi0jZGVmaW5lIEVDSE9LCTB4MDAwMDAwMjAKLSNkZWZpbmUgRUNIT05MCTB4MDAwMDAwNDAKLSNkZWZpbmUgTk9GTFNICTB4MDAwMDAwODAKLSNkZWZpbmUgVE9TVE9QCTB4MDAwMDAxMDAKLSNkZWZpbmUgRUNIT0NUTAkweDAwMDAwMjAwCi0jZGVmaW5lIEVDSE9QUlQJMHgwMDAwMDQwMAotI2RlZmluZSBFQ0hPS0UJMHgwMDAwMDgwMAotI2RlZmluZSBERUZFQ0hPIDB4MDAwMDEwMDAgIC8qIFNVTk9TIHRoaW5nLCB3aGF0IGlzIGl0PyAqLwotI2RlZmluZSBGTFVTSE8JMHgwMDAwMjAwMAotI2RlZmluZSBQRU5ESU4JMHgwMDAwNDAwMAotI2RlZmluZSBJRVhURU4JMHgwMDAwODAwMAotCi0vKiBtb2RlbSBsaW5lcyAqLwotI2RlZmluZSBUSU9DTV9MRQkweDAwMQotI2RlZmluZSBUSU9DTV9EVFIJMHgwMDIKLSNkZWZpbmUgVElPQ01fUlRTCTB4MDA0Ci0jZGVmaW5lIFRJT0NNX1NUCTB4MDA4Ci0jZGVmaW5lIFRJT0NNX1NSCTB4MDEwCi0jZGVmaW5lIFRJT0NNX0NUUwkweDAyMAotI2RlZmluZSBUSU9DTV9DQVIJMHgwNDAKLSNkZWZpbmUgVElPQ01fUk5HCTB4MDgwCi0jZGVmaW5lIFRJT0NNX0RTUgkweDEwMAotI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIKLSNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCi0jZGVmaW5lIFRJT0NNX09VVDEJMHgyMDAwCi0jZGVmaW5lIFRJT0NNX09VVDIJMHg0MDAwCi0jZGVmaW5lIFRJT0NNX0xPT1AJMHg4MDAwCi0KLS8qIGlvY3RsIChmZCwgVElPQ1NFUkdFVExTUiwgJnJlc3VsdCkgd2hlcmUgcmVzdWx0IG1heSBiZSBhcyBiZWxvdyAqLwotI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCi0KLQotLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KLSNkZWZpbmUJVENPT0ZGCQkwCi0jZGVmaW5lCVRDT09OCQkxCi0jZGVmaW5lCVRDSU9GRgkJMgotI2RlZmluZQlUQ0lPTgkJMwotCi0vKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KLSNkZWZpbmUJVENJRkxVU0gJMAotI2RlZmluZQlUQ09GTFVTSAkxCi0jZGVmaW5lCVRDSU9GTFVTSAkyCi0KLS8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCi0jZGVmaW5lCVRDU0FOT1cJCTAKLSNkZWZpbmUJVENTQURSQUlOCTEKLSNkZWZpbmUJVENTQUZMVVNICTIKLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfVEVSTUJJVFNfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvdGVybWJpdHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKaW5kZXggMWY1ZGFiMi4uOTQwNDk1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKQEAgLTEsMTg2ICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1RFUk1JT1NfSAotI2RlZmluZSBfU1BBUkM2NF9URVJNSU9TX0gKLQotI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KLSNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KLQotI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX0RFRklORV9CU0RfVEVSTUlPUykKLXN0cnVjdCBzZ3R0eWIgewotCWNoYXIJc2dfaXNwZWVkOwotCWNoYXIJc2dfb3NwZWVkOwotCWNoYXIJc2dfZXJhc2U7Ci0JY2hhcglzZ19raWxsOwotCXNob3J0CXNnX2ZsYWdzOwotfTsKLQotc3RydWN0IHRjaGFycyB7Ci0JY2hhcgl0X2ludHJjOwotCWNoYXIJdF9xdWl0YzsKLQljaGFyCXRfc3RhcnRjOwotCWNoYXIJdF9zdG9wYzsKLQljaGFyCXRfZW9mYzsKLQljaGFyCXRfYnJrYzsKLX07Ci0KLXN0cnVjdCBsdGNoYXJzIHsKLQljaGFyCXRfc3VzcGM7Ci0JY2hhcgl0X2RzdXNwYzsKLQljaGFyCXRfcnBybnRjOwotCWNoYXIJdF9mbHVzaGM7Ci0JY2hhcgl0X3dlcmFzYzsKLQljaGFyCXRfbG5leHRjOwotfTsKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLXN0cnVjdCB3aW5zaXplIHsKLQl1bnNpZ25lZCBzaG9ydCB3c19yb3c7Ci0JdW5zaWduZWQgc2hvcnQgd3NfY29sOwotCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKLQl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Ci19OwotCi0jaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0vKgotICogY19jYyBjaGFyYWN0ZXJzIGluIHRoZSB0ZXJtaW8gc3RydWN0dXJlLiAgT2gsIGhvdyBJIGxvdmUgYmVpbmcKLSAqIGJhY2t3YXJkbHkgY29tcGF0aWJsZS4gIE5vdGljZSB0aGF0IGNoYXJhY3RlciA0IGFuZCA1IGFyZQotICogaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgSUNBTk9OIGlzIHNldCBpbgotICogY19sZmxhZy4gIElmIGl0J3Mgc2V0LCB0aGV5IGFyZSB1c2VkIGFzIF9WRU9GIGFuZCBfVkVPTCwgb3RoZXJ3aXNlCi0gKiBhcyBfVk1JTiBhbmQgVl9USU1FLiAgVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIE9TRi8xICh3aGljaAotICogaXMgY29tcGF0aWJsZSB3aXRoIHN5c1YpLi4uCi0gKi8KLSNkZWZpbmUgX1ZNSU4JNAotI2RlZmluZSBfVlRJTUUJNQotCi0vKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQotCWVvZj1eRAkJZW9sPVwwCQllb2wyPVwwCQlzeHRjPVwwCi0Jc3RhcnQ9XlEJc3RvcD1eUwkJc3VzcD1eWgkJZHN1c3A9XlkKLQlyZXByaW50PV5SCWRpc2NhcmQ9XlUJd2VyYXNlPV5XCWxuZXh0PV5WCi0Jdm1pbj1cMSAgICAgICAgIHZ0aW1lPVwwCi0qLwotI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDAwMFwwMDBcMDAwXDAyMVwwMjNcMDMyXDAzMVwwMjJcMDI1XDAyN1wwMjZcMDAxIgotCi0vKgotICogVHJhbnNsYXRlIGEgInRlcm1pbyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvcyIuIFVnaC4KLSAqLwotI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKLSh7IFwKLQl1bnNpZ25lZCBzaG9ydCB0bXA7IFwKLQlpbnQgZXJyOyBcCi0JZXJyID0gZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCi0JKHRlcm1pb3MpLT5jX2lmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2lmbGFnKSkgfCB0bXA7IFwKLQllcnIgfD0gZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCi0JKHRlcm1pb3MpLT5jX29mbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX29mbGFnKSkgfCB0bXA7IFwKLQllcnIgfD0gZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCi0JKHRlcm1pb3MpLT5jX2NmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2NmbGFnKSkgfCB0bXA7IFwKLQllcnIgfD0gZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCi0JKHRlcm1pb3MpLT5jX2xmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2xmbGFnKSkgfCB0bXA7IFwKLQllcnIgfD0gY29weV9mcm9tX3VzZXIoKHRlcm1pb3MpLT5jX2NjLCAodGVybWlvKS0+Y19jYywgTkNDKTsgXAotCWVycjsgXAotfSkKLQotLyoKLSAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCi0gKgotICogTm90ZSB0aGUgImZ1biIgX1ZNSU4gb3ZlcmxvYWRpbmcuCi0gKi8KLSNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCi0oeyBcCi0JaW50IGVycjsgXAotCWVyciAgPSBwdXRfdXNlcigodGVybWlvcyktPmNfaWZsYWcsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKLQllcnIgfD0gcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCi0JZXJyIHw9IHB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jZmxhZywgJih0ZXJtaW8pLT5jX2NmbGFnKTsgXAotCWVyciB8PSBwdXRfdXNlcigodGVybWlvcyktPmNfbGZsYWcsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKLQllcnIgfD0gcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKLQllcnIgfD0gY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7IFwKLQlpZiAoISgodGVybWlvcyktPmNfbGZsYWcgJiBJQ0FOT04pKSB7IFwKLQkJZXJyIHw9IHB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jY1tWTUlOXSwgJih0ZXJtaW8pLT5jX2NjW19WTUlOXSk7IFwKLQkJZXJyIHw9IHB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jY1tWVElNRV0sICYodGVybWlvKS0+Y19jY1tfVlRJTUVdKTsgXAotCX0gXAotCWVycjsgXAotfSkKLQotI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgXAotKHsgXAotCWludCBlcnI7IFwKLQllcnIgID0gZ2V0X3VzZXIoKGspLT5jX2lmbGFnLCAmKHUpLT5jX2lmbGFnKTsgXAotCWVyciB8PSBnZXRfdXNlcigoayktPmNfb2ZsYWcsICYodSktPmNfb2ZsYWcpOyBcCi0JZXJyIHw9IGdldF91c2VyKChrKS0+Y19jZmxhZywgJih1KS0+Y19jZmxhZyk7IFwKLQllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2xmbGFnLCAmKHUpLT5jX2xmbGFnKTsgXAotCWVyciB8PSBnZXRfdXNlcigoayktPmNfbGluZSwgICYodSktPmNfbGluZSk7IFwKLQllcnIgfD0gY29weV9mcm9tX3VzZXIoKGspLT5jX2NjLCAodSktPmNfY2MsIE5DQ1MpOyBcCi0JaWYoKGspLT5jX2xmbGFnICYgSUNBTk9OKSB7IFwKLQkJZXJyIHw9IGdldF91c2VyKChrKS0+Y19jY1tWRU9GXSwgJih1KS0+Y19jY1tWRU9GXSk7IFwKLQkJZXJyIHw9IGdldF91c2VyKChrKS0+Y19jY1tWRU9MXSwgJih1KS0+Y19jY1tWRU9MXSk7IFwKLQl9IGVsc2UgeyBcCi0JCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVk1JTl0sICAmKHUpLT5jX2NjW19WTUlOXSk7IFwKLQkJZXJyIHw9IGdldF91c2VyKChrKS0+Y19jY1tWVElNRV0sICYodSktPmNfY2NbX1ZUSU1FXSk7IFwKLQl9IFwKLQllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2lzcGVlZCwgICYodSktPmNfaXNwZWVkKTsgXAotCWVyciB8PSBnZXRfdXNlcigoayktPmNfb3NwZWVkLCAgJih1KS0+Y19vc3BlZWQpOyBcCi0JZXJyOyBcCi19KQotCi0jZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBcCi0oeyBcCi0JaW50IGVycjsgXAotCWVyciAgPSBwdXRfdXNlcigoayktPmNfaWZsYWcsICYodSktPmNfaWZsYWcpOyBcCi0JZXJyIHw9IHB1dF91c2VyKChrKS0+Y19vZmxhZywgJih1KS0+Y19vZmxhZyk7IFwKLQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2NmbGFnLCAmKHUpLT5jX2NmbGFnKTsgXAotCWVyciB8PSBwdXRfdXNlcigoayktPmNfbGZsYWcsICYodSktPmNfbGZsYWcpOyBcCi0JZXJyIHw9IHB1dF91c2VyKChrKS0+Y19saW5lLCAmKHUpLT5jX2xpbmUpOyBcCi0JZXJyIHw9IGNvcHlfdG9fdXNlcigodSktPmNfY2MsIChrKS0+Y19jYywgTkNDUyk7IFwKLQlpZighKChrKS0+Y19sZmxhZyAmIElDQU5PTikpIHsgXAotCQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2NjW1ZNSU5dLCAgJih1KS0+Y19jY1tfVk1JTl0pOyBcCi0JCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVlRJTUVdLCAmKHUpLT5jX2NjW19WVElNRV0pOyBcCi0JfSBlbHNlIHsgXAotCQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2NjW1ZFT0ZdLCAmKHUpLT5jX2NjW1ZFT0ZdKTsgXAotCQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2NjW1ZFT0xdLCAmKHUpLT5jX2NjW1ZFT0xdKTsgXAotCX0gXAotCWVyciB8PSBwdXRfdXNlcigoayktPmNfaXNwZWVkLCAmKHUpLT5jX2lzcGVlZCk7IFwKLQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX29zcGVlZCwgJih1KS0+Y19vc3BlZWQpOyBcCi0JZXJyOyBcCi19KQotCi0jZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKGssIHUpIFwKLSh7IFwKLQlpbnQgZXJyOyBcCi0JZXJyICA9IGdldF91c2VyKChrKS0+Y19pZmxhZywgJih1KS0+Y19pZmxhZyk7IFwKLQllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX29mbGFnLCAmKHUpLT5jX29mbGFnKTsgXAotCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2ZsYWcsICYodSktPmNfY2ZsYWcpOyBcCi0JZXJyIHw9IGdldF91c2VyKChrKS0+Y19sZmxhZywgJih1KS0+Y19sZmxhZyk7IFwKLQllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2xpbmUsICAmKHUpLT5jX2xpbmUpOyBcCi0JZXJyIHw9IGNvcHlfZnJvbV91c2VyKChrKS0+Y19jYywgKHUpLT5jX2NjLCBOQ0NTKTsgXAotCWlmKChrKS0+Y19sZmxhZyAmIElDQU5PTikgeyBcCi0JCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVkVPRl0sICYodSktPmNfY2NbVkVPRl0pOyBcCi0JCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCi0JfSBlbHNlIHsgXAotCQllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2NjW1ZNSU5dLCAgJih1KS0+Y19jY1tfVk1JTl0pOyBcCi0JCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVlRJTUVdLCAmKHUpLT5jX2NjW19WVElNRV0pOyBcCi0JfSBcCi0JZXJyOyBcCi19KQotCi0jZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvc18xKHUsIGspIFwKLSh7IFwKLQlpbnQgZXJyOyBcCi0JZXJyICA9IHB1dF91c2VyKChrKS0+Y19pZmxhZywgJih1KS0+Y19pZmxhZyk7IFwKLQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX29mbGFnLCAmKHUpLT5jX29mbGFnKTsgXAotCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2ZsYWcsICYodSktPmNfY2ZsYWcpOyBcCi0JZXJyIHw9IHB1dF91c2VyKChrKS0+Y19sZmxhZywgJih1KS0+Y19sZmxhZyk7IFwKLQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2xpbmUsICYodSktPmNfbGluZSk7IFwKLQllcnIgfD0gY29weV90b191c2VyKCh1KS0+Y19jYywgKGspLT5jX2NjLCBOQ0NTKTsgXAotCWlmKCEoKGspLT5jX2xmbGFnICYgSUNBTk9OKSkgeyBcCi0JCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVk1JTl0sICAmKHUpLT5jX2NjW19WTUlOXSk7IFwKLQkJZXJyIHw9IHB1dF91c2VyKChrKS0+Y19jY1tWVElNRV0sICYodSktPmNfY2NbX1ZUSU1FXSk7IFwKLQl9IGVsc2UgeyBcCi0JCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVkVPRl0sICYodSktPmNfY2NbVkVPRl0pOyBcCi0JCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCi0JfSBcCi0JZXJyOyBcCi19KQotCi0jZW5kaWYJLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX1NQQVJDNjRfVEVSTUlPU19IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3Rlcm1pb3MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGhyZWFkX2luZm8uaAppbmRleCBlNTg3M2UzLi45MmJlZDc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90aHJlYWRfaW5mby5oCkBAIC0xLDI3NyArMSBAQAotLyogdGhyZWFkX2luZm8uaDogc3BhcmM2NCBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCi0gKi8KLQotI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKLSNkZWZpbmUgX0FTTV9USFJFQURfSU5GT19ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNkZWZpbmUgTlNXSU5TCQk3Ci0KLSNkZWZpbmUgVElfRkxBR19CWVRFX0ZBVUxUX0NPREUJCTAKLSNkZWZpbmUgVElfRkxBR19GQVVMVF9DT0RFX1NISUZUCTU2Ci0jZGVmaW5lIFRJX0ZMQUdfQllURV9XU1RBVEUJCTEKLSNkZWZpbmUgVElfRkxBR19XU1RBVEVfU0hJRlQJCTQ4Ci0jZGVmaW5lIFRJX0ZMQUdfQllURV9DV1AJCTIKLSNkZWZpbmUgVElfRkxBR19DV1BfU0hJRlQJCTQwCi0jZGVmaW5lIFRJX0ZMQUdfQllURV9DVVJSRU5UX0RTCQkzCi0jZGVmaW5lIFRJX0ZMQUdfQ1VSUkVOVF9EU19TSElGVAkzMgotI2RlZmluZSBUSV9GTEFHX0JZVEVfRlBERVBUSAkJNAotI2RlZmluZSBUSV9GTEFHX0ZQREVQVEhfU0hJRlQJCTI0Ci0jZGVmaW5lIFRJX0ZMQUdfQllURV9XU0FWRUQJCTUKLSNkZWZpbmUgVElfRkxBR19XU0FWRURfU0hJRlQJCTE2Ci0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci1zdHJ1Y3QgZXhlY19kb21haW47Ci0KLXN0cnVjdCB0aHJlYWRfaW5mbyB7Ci0JLyogRCQgbGluZSAxICovCi0Jc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCV9fdTgJCQlmcHNhdmVkWzddOwotCV9fdTgJCQlzdGF0dXM7Ci0JdW5zaWduZWQgbG9uZwkJa3NwOwotCi0JLyogRCQgbGluZSAyICovCi0JdW5zaWduZWQgbG9uZwkJZmF1bHRfYWRkcmVzczsKLQlzdHJ1Y3QgcHRfcmVncwkJKmtyZWdzOwotCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47Ci0JaW50CQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCi0JX191OAkJCW5ld19jaGlsZDsKLQlfX3U4CQkJc3lzY2FsbF9ub2Vycm9yOwotCV9fdTE2CQkJY3B1OwotCi0JdW5zaWduZWQgbG9uZwkJKnV0cmFwczsKLQotCXN0cnVjdCByZWdfd2luZG93IAlyZWdfd2luZG93W05TV0lOU107Ci0JdW5zaWduZWQgbG9uZyAJCXJ3YnVmX3N0a3B0cnNbTlNXSU5TXTsKLQotCXVuc2lnbmVkIGxvbmcJCWdzcls3XTsKLQl1bnNpZ25lZCBsb25nCQl4ZnNyWzddOwotCi0JX191NjQJCQlfX3VzZXIgKnVzZXJfY250ZDA7Ci0JX191NjQJCQlfX3VzZXIgKnVzZXJfY250ZDE7Ci0JX191NjQJCQlrZXJuZWxfY250ZDAsIGtlcm5lbF9jbnRkMTsKLQlfX3U2NAkJCXBjcl9yZWc7Ci0KLQlzdHJ1Y3QgcmVzdGFydF9ibG9jawlyZXN0YXJ0X2Jsb2NrOwotCi0Jc3RydWN0IHB0X3JlZ3MJCSprZXJuX3VuYV9yZWdzOwotCXVuc2lnbmVkIGludAkJa2Vybl91bmFfaW5zbjsKLQotCXVuc2lnbmVkIGxvbmcJCWZwcmVnc1swXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg2NCkpKTsKLX07Ci0KLSNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KLQotLyogb2Zmc2V0cyBpbnRvIHRoZSB0aHJlYWRfaW5mbyBzdHJ1Y3QgZm9yIGFzc2VtYmx5IGNvZGUgYWNjZXNzICovCi0jZGVmaW5lIFRJX1RBU0sJCTB4MDAwMDAwMDAKLSNkZWZpbmUgVElfRkxBR1MJMHgwMDAwMDAwOAotI2RlZmluZSBUSV9GQVVMVF9DT0RFCShUSV9GTEFHUyArIFRJX0ZMQUdfQllURV9GQVVMVF9DT0RFKQotI2RlZmluZSBUSV9XU1RBVEUJKFRJX0ZMQUdTICsgVElfRkxBR19CWVRFX1dTVEFURSkKLSNkZWZpbmUgVElfQ1dQCQkoVElfRkxBR1MgKyBUSV9GTEFHX0JZVEVfQ1dQKQotI2RlZmluZSBUSV9DVVJSRU5UX0RTCShUSV9GTEFHUyArIFRJX0ZMQUdfQllURV9DVVJSRU5UX0RTKQotI2RlZmluZSBUSV9GUERFUFRICShUSV9GTEFHUyArIFRJX0ZMQUdfQllURV9GUERFUFRIKQotI2RlZmluZSBUSV9XU0FWRUQJKFRJX0ZMQUdTICsgVElfRkxBR19CWVRFX1dTQVZFRCkKLSNkZWZpbmUgVElfRlBTQVZFRAkweDAwMDAwMDEwCi0jZGVmaW5lIFRJX0tTUAkJMHgwMDAwMDAxOAotI2RlZmluZSBUSV9GQVVMVF9BRERSCTB4MDAwMDAwMjAKLSNkZWZpbmUgVElfS1JFR1MJMHgwMDAwMDAyOAotI2RlZmluZSBUSV9FWEVDX0RPTUFJTgkweDAwMDAwMDMwCi0jZGVmaW5lIFRJX1BSRV9DT1VOVAkweDAwMDAwMDM4Ci0jZGVmaW5lIFRJX05FV19DSElMRAkweDAwMDAwMDNjCi0jZGVmaW5lIFRJX1NZU19OT0VSUk9SCTB4MDAwMDAwM2QKLSNkZWZpbmUgVElfQ1BVCQkweDAwMDAwMDNlCi0jZGVmaW5lIFRJX1VUUkFQUwkweDAwMDAwMDQwCi0jZGVmaW5lIFRJX1JFR19XSU5ET1cJMHgwMDAwMDA0OAotI2RlZmluZSBUSV9SV0lOX1NQVFJTCTB4MDAwMDAzYzgJCi0jZGVmaW5lIFRJX0dTUgkJMHgwMDAwMDQwMAotI2RlZmluZSBUSV9YRlNSCQkweDAwMDAwNDM4Ci0jZGVmaW5lIFRJX1VTRVJfQ05URDAJMHgwMDAwMDQ3MAotI2RlZmluZSBUSV9VU0VSX0NOVEQxCTB4MDAwMDA0NzgKLSNkZWZpbmUgVElfS0VSTl9DTlREMAkweDAwMDAwNDgwCi0jZGVmaW5lIFRJX0tFUk5fQ05URDEJMHgwMDAwMDQ4OAotI2RlZmluZSBUSV9QQ1IJCTB4MDAwMDA0OTAKLSNkZWZpbmUgVElfUkVTVEFSVF9CTE9DSyAweDAwMDAwNDk4Ci0jZGVmaW5lIFRJX0tVTkFfUkVHUwkweDAwMDAwNGMwCi0jZGVmaW5lIFRJX0tVTkFfSU5TTgkweDAwMDAwNGM4Ci0jZGVmaW5lIFRJX0ZQUkVHUwkweDAwMDAwNTAwCi0KLS8qIFdlIGVtYmVkIHRoaXMgaW4gdGhlIHVwcGVybW9zdCBieXRlIG9mIHRocmVhZF9pbmZvLT5mbGFncyAqLwotI2RlZmluZSBGQVVMVF9DT0RFX1dSSVRFCTB4MDEJLyogV3JpdGUgYWNjZXNzLCBpbXBsaWVzIEQtVExCCSAgICovCi0jZGVmaW5lIEZBVUxUX0NPREVfRFRMQgkJMHgwMgkvKiBNaXNzIGhhcHBlbmVkIGluIEQtVExCCSAgICovCi0jZGVmaW5lIEZBVUxUX0NPREVfSVRMQgkJMHgwNAkvKiBNaXNzIGhhcHBlbmVkIGluIEktVExCCSAgICovCi0jZGVmaW5lIEZBVUxUX0NPREVfV0lORklYVVAJMHgwOAkvKiBNaXNzIGhhcHBlbmVkIGR1cmluZyBzcGlsbC9maWxsICovCi0jZGVmaW5lIEZBVUxUX0NPREVfQkxLQ09NTUlUCTB4MTAJLyogVXNlIGJsay1jb21taXQgQVNJIGluIGNvcHlfcGFnZSAqLwotCi0jaWYgUEFHRV9TSElGVCA9PSAxMwotI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCi0jZGVmaW5lIFRIUkVBRF9TSElGVCAoUEFHRV9TSElGVCArIDEpCi0jZWxzZSAvKiBQQUdFX1NISUZUID09IDEzICovCi0jZGVmaW5lIFRIUkVBRF9TSVpFIFBBR0VfU0laRQotI2RlZmluZSBUSFJFQURfU0hJRlQgUEFHRV9TSElGVAotI2VuZGlmIC8qIFBBR0VfU0hJRlQgPT0gMTMgKi8KLQotI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwCi0KLS8qCi0gKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQotICoKLSAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQkJXAotewkJCQkJCQlcCi0JLnRhc2sJCT0JJnRzaywJCQlcCi0JLmZsYWdzCQk9ICgodW5zaWduZWQgbG9uZylBU0lfUCkgPDwgVElfRkxBR19DVVJSRU5UX0RTX1NISUZULAlcCi0JLmV4ZWNfZG9tYWluCT0JJmRlZmF1bHRfZXhlY19kb21haW4sCVwKLQkucHJlZW1wdF9jb3VudAk9CTEsCQkJXAotCS5yZXN0YXJ0X2Jsb2NrCT0gewkJCQlcCi0JCS5mbgk9CWRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAotCX0sCQkJCQkJXAotfQotCi0jZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQotI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCi0KLS8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCi1yZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfdGhyZWFkX2luZm9fcmVnIGFzbSgiZzYiKTsKLSNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCShjdXJyZW50X3RocmVhZF9pbmZvX3JlZykKLQotLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KLSNpZiBQQUdFX1NISUZUID09IDEzCi0jZGVmaW5lIF9fVEhSRUFEX0lORk9fT1JERVIJMQotI2Vsc2UgLyogUEFHRV9TSElGVCA9PSAxMyAqLwotI2RlZmluZSBfX1RIUkVBRF9JTkZPX09SREVSCTAKLSNlbmRpZiAvKiBQQUdFX1NISUZUID09IDEzICovCi0KLSNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJXAotKHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQkJXAotCQkJCQkJCQlcCi0JcmV0ID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQkJCQlcCi0JICBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIF9fVEhSRUFEX0lORk9fT1JERVIpOwlcCi0JaWYgKHJldCkJCQkJCQlcCi0JCW1lbXNldChyZXQsIDAsIFBBR0VfU0laRTw8X19USFJFQURfSU5GT19PUkRFUik7CVwKLQlyZXQ7CQkJCQkJCVwKLX0pCi0jZWxzZQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIFwKLQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgX19USFJFQURfSU5GT19PUkRFUikpCi0jZW5kaWYKLQotI2RlZmluZSBmcmVlX3RocmVhZF9pbmZvKHRpKSBcCi0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykodGkpLF9fVEhSRUFEX0lORk9fT1JERVIpCi0KLSNkZWZpbmUgX190aHJlYWRfZmxhZ19ieXRlX3B0cih0aSkJXAotCSgodW5zaWduZWQgY2hhciAqKSgmKCh0aSktPmZsYWdzKSkpCi0jZGVmaW5lIF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyCV9fdGhyZWFkX2ZsYWdfYnl0ZV9wdHIoY3VycmVudF90aHJlYWRfaW5mbygpKQotCi0jZGVmaW5lIGdldF90aHJlYWRfZmF1bHRfY29kZSgpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0ZBVUxUX0NPREVdKQotI2RlZmluZSBzZXRfdGhyZWFkX2ZhdWx0X2NvZGUodmFsKQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0ZBVUxUX0NPREVdID0gKHZhbCkpCi0jZGVmaW5lIGdldF90aHJlYWRfd3N0YXRlKCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfV1NUQVRFXSkKLSNkZWZpbmUgc2V0X3RocmVhZF93c3RhdGUodmFsKQkJKF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyW1RJX0ZMQUdfQllURV9XU1RBVEVdID0gKHZhbCkpCi0jZGVmaW5lIGdldF90aHJlYWRfY3dwKCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfQ1dQXSkKLSNkZWZpbmUgc2V0X3RocmVhZF9jd3AodmFsKQkJKF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyW1RJX0ZMQUdfQllURV9DV1BdID0gKHZhbCkpCi0jZGVmaW5lIGdldF90aHJlYWRfY3VycmVudF9kcygpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0NVUlJFTlRfRFNdKQotI2RlZmluZSBzZXRfdGhyZWFkX2N1cnJlbnRfZHModmFsKQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0NVUlJFTlRfRFNdID0gKHZhbCkpCi0jZGVmaW5lIGdldF90aHJlYWRfZnBkZXB0aCgpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX0ZQREVQVEhdKQotI2RlZmluZSBzZXRfdGhyZWFkX2ZwZGVwdGgodmFsKQkJKF9fY3VyX3RocmVhZF9mbGFnX2J5dGVfcHRyW1RJX0ZMQUdfQllURV9GUERFUFRIXSA9ICh2YWwpKQotI2RlZmluZSBnZXRfdGhyZWFkX3dzYXZlZCgpCQkoX19jdXJfdGhyZWFkX2ZsYWdfYnl0ZV9wdHJbVElfRkxBR19CWVRFX1dTQVZFRF0pCi0jZGVmaW5lIHNldF90aHJlYWRfd3NhdmVkKHZhbCkJCShfX2N1cl90aHJlYWRfZmxhZ19ieXRlX3B0cltUSV9GTEFHX0JZVEVfV1NBVkVEXSA9ICh2YWwpKQotCi0jZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCi0KLS8qCi0gKiBUaHJlYWQgaW5mb3JtYXRpb24gZmxhZ3MsIG9ubHkgMTYgYml0cyBhcmUgYXZhaWxhYmxlIGFzIHdlIGVuY29kZQotICogb3RoZXIgdmFsdWVzIGludG8gdGhlIHVwcGVyIDYgYnl0ZXMuCi0gKgotICogT24gdHJhcCByZXR1cm4gd2UgbmVlZCB0byB0ZXN0IHNldmVyYWwgdmFsdWVzOgotICoKLSAqIHVzZXI6CW5lZWRfcmVzY2hlZCwgbm90aWZ5X3Jlc3VtZSwgc2lncGVuZGluZywgd3NhdmVkLCBwZXJmY3RyCi0gKiBrZXJuZWw6CWZwZGVwdGgKLSAqCi0gKiBTbyB0byBjaGVjayBmb3Igd29yayBpbiB0aGUga2VybmVsIGNhc2Ugd2Ugc2ltcGx5IGxvYWQgdGhlIGZwZGVwdGgKLSAqIGJ5dGUgb3V0IG9mIHRoZSBmbGFncyBhbmQgdGVzdCBpdC4gIEZvciB0aGUgdXNlciBjYXNlIHdlIGVuY29kZSB0aGUKLSAqIGxvd2VyIDMgYnl0ZXMgb2YgZmxhZ3MgYXMgZm9sbG93czoKLSAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCXwgd3NhdmVkIHwgZmxhZ3MgYnl0ZSAxIHwgZmxhZ3MgYnl0ZSAyIHwKLSAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRoaXMgb3B0aW1pemVzIHRoZSB1c2VyIHRlc3QgaW50bzoKLSAqCWxkeAkJWyVnNiArIFRJX0ZMQUdTXSwgUkVHMQotICoJc2V0aGkJCSVoaShfVElGX1VTRVJfV09SS19NQVNLKSwgUkVHMgotICoJb3IJCVJFRzIsICVsbyhfVElGX1VTRVJfV09SS19NQVNLKSwgUkVHMgotICoJYW5kY2MJCVJFRzEsIFJFRzIsICVnMAotICoJYmUscHQJCW5vX3dvcmtfdG9fZG8KLSAqCSBub3AKLSAqLwotI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCi0vKiBmbGFncyBiaXQgMSBpcyBhdmFpbGFibGUgKi8KLSNkZWZpbmUgVElGX1NJR1BFTkRJTkcJCTIJLyogc2lnbmFsIHBlbmRpbmcgKi8KLSNkZWZpbmUgVElGX05FRURfUkVTQ0hFRAkzCS8qIHJlc2NoZWR1bGluZyBuZWNlc3NhcnkgKi8KLSNkZWZpbmUgVElGX1BFUkZDVFIJCTQJLyogcGVyZm9ybWFuY2UgY291bnRlcnMgYWN0aXZlICovCi0jZGVmaW5lIFRJRl9VTkFMSUdORUQJCTUJLyogYWxsb3dlZCB0byBkbyB1bmFsaWduZWQgYWNjZXNzZXMgKi8KLS8qIGZsYWcgYml0IDYgaXMgYXZhaWxhYmxlICovCi0jZGVmaW5lIFRJRl8zMkJJVAkJNwkvKiAzMi1iaXQgYmluYXJ5ICovCi0vKiBmbGFnIGJpdCA4IGlzIGF2YWlsYWJsZSAqLwotI2RlZmluZSBUSUZfU0VDQ09NUAkJOQkvKiBzZWN1cmUgY29tcHV0aW5nICovCi0jZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTEwCS8qIHN5c2NhbGwgYXVkaXRpbmcgYWN0aXZlICovCi0vKiBmbGFnIGJpdCAxMSBpcyBhdmFpbGFibGUgKi8KLS8qIE5PVEU6IFRocmVhZCBmbGFncyA+PSAxMiBzaG91bGQgYmUgb25lcyB3ZSBoYXZlIG5vIGludGVyZXN0Ci0gKiAgICAgICBpbiB1c2luZyBpbiBhc3NlbWJseSwgZWxzZSB3ZSBjYW4ndCB1c2UgdGhlIG1hc2sgYXMKLSAqICAgICAgIGFuIGltbWVkaWF0ZSB2YWx1ZSBpbiBpbnN0cnVjdGlvbnMgc3VjaCBhcyBhbmRjYy4KLSAqLwotI2RlZmluZSBUSUZfQUJJX1BFTkRJTkcJCTEyCi0jZGVmaW5lIFRJRl9NRU1ESUUJCTEzCi0jZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNAotCi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCi0jZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQotI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKLSNkZWZpbmUgX1RJRl9QRVJGQ1RSCQkoMTw8VElGX1BFUkZDVFIpCi0jZGVmaW5lIF9USUZfVU5BTElHTkVECQkoMTw8VElGX1VOQUxJR05FRCkKLSNkZWZpbmUgX1RJRl8zMkJJVAkJKDE8PFRJRl8zMkJJVCkKLSNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMTw8VElGX1NFQ0NPTVApCi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMTw8VElGX1NZU0NBTExfQVVESVQpCi0jZGVmaW5lIF9USUZfQUJJX1BFTkRJTkcJKDE8PFRJRl9BQklfUEVORElORykKLSNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQotCi0jZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sJKCgweGZmIDw8IFRJX0ZMQUdfV1NBVkVEX1NISUZUKSB8IFwKLQkJCQkgKF9USUZfU0lHUEVORElORyB8IFwKLQkJCQkgIF9USUZfTkVFRF9SRVNDSEVEIHwgX1RJRl9QRVJGQ1RSKSkKLQotLyoKLSAqIFRocmVhZC1zeW5jaHJvbm91cyBzdGF0dXMuCi0gKgotICogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZmxhZ3MgaW4gdGhhdCBub2JvZHkgZWxzZQotICogZXZlciB0b3VjaGVzIG91ciB0aHJlYWQtc3luY2hyb25vdXMgc3RhdHVzLCBzbyB3ZSBkb24ndAotICogaGF2ZSB0byB3b3JyeSBhYm91dCBhdG9taWMgYWNjZXNzZXMuCi0gKgotICogTm90ZSB0aGF0IHRoZXJlIGFyZSBvbmx5IDggYml0cyBhdmFpbGFibGUuCi0gKi8KLSNkZWZpbmUgVFNfUkVTVE9SRV9TSUdNQVNLCTB4MDAwMQkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIEhBVkVfU0VUX1JFU1RPUkVfU0lHTUFTSwkxCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Jlc3RvcmVfc2lnbWFzayh2b2lkKQotewotCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Ci0JdGktPnN0YXR1cyB8PSBUU19SRVNUT1JFX1NJR01BU0s7Ci0Jc2V0X2JpdChUSUZfU0lHUEVORElORywgJnRpLT5mbGFncyk7Ci19Ci0jZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX0FTTV9USFJFQURfSU5GT19IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWVyLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWVyLmgKaW5kZXggNWI3NzlmZC4uODgwMjZkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXIuaApAQCAtMSwzMCArMSBAQAotLyogdGltZXIuaDogU3lzdGVtIHRpbWVyIGRlZmluaXRpb25zIGZvciBzdW41LgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NywgMjAwOCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCi0gKi8KLQotI2lmbmRlZiBfU1BBUkM2NF9USU1FUl9ICi0jZGVmaW5lIF9TUEFSQzY0X1RJTUVSX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi1zdHJ1Y3Qgc3BhcmM2NF90aWNrX29wcyB7Ci0JdW5zaWduZWQgbG9uZyAoKmdldF90aWNrKSh2b2lkKTsKLQlpbnQgKCphZGRfY29tcGFyZSkodW5zaWduZWQgbG9uZyk7Ci0JdW5zaWduZWQgbG9uZyBzb2Z0aW50X21hc2s7Ci0Jdm9pZCAoKmRpc2FibGVfaXJxKSh2b2lkKTsKLQotCXZvaWQgKCppbml0X3RpY2spKHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgKCphZGRfdGljaykodW5zaWduZWQgbG9uZyk7Ci0KLQljaGFyICpuYW1lOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzICp0aWNrX29wczsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3BhcmM2NF9nZXRfY2xvY2tfdGljayh1bnNpZ25lZCBpbnQgY3B1KTsKLWV4dGVybiB2b2lkIF9fZGV2aW5pdCBzZXR1cF9zcGFyYzY0X3RpbWVyKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKTsKLQotI2VuZGlmIC8qIF9TUEFSQzY0X1RJTUVSX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXguaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXguaAppbmRleCBjNjIyNTM1Li44ZGQ1OWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1leC5oCkBAIC0xLDE5ICsxIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1leC5oCi0gKgotICogc3BhcmM2NCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKLSAqLwotI2lmbmRlZiBfQVNNc3BhcmM2NF9USU1FWF9ICi0jZGVmaW5lIF9BU01zcGFyYzY0X1RJTUVYX0gKLQotI2luY2x1ZGUgPGFzbS90aW1lci5oPgotCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KLQotLyogR2V0dGluZyBvbiB0aGUgY3ljbGUgY291bnRlciBvbiBzcGFyYzY0LiAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OwotI2RlZmluZSBnZXRfY3ljbGVzKCkJdGlja19vcHMtPmdldF90aWNrKCkKLQotI2RlZmluZSBBUkNIX0hBU19SRUFEX0NVUlJFTlRfVElNRVIKLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLXNwYXJjL3RpbWV4Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGIuaAppbmRleCBlYzgxY2RlLi5hZTkyZmNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiLmgKQEAgLTEsMTExICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1RMQl9ICi0jZGVmaW5lIF9TUEFSQzY0X1RMQl9ICi0KLSNpbmNsdWRlIDxsaW51eC9zd2FwLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0KLSNkZWZpbmUgVExCX0JBVENIX05SCTE5MgotCi0vKgotICogRm9yIFVQIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgVExCIGZsdXNoCi0gKiBhbmQgcGFnZSBmcmVlIG9yZGVyIHNvIG11Y2guLgotICovCi0jaWZkZWYgQ09ORklHX1NNUAotICAjZGVmaW5lIEZSRUVfUFRFX05SCTUwNgotICAjZGVmaW5lIHRsYl9mYXN0X21vZGUoYnApICgoYnApLT5wYWdlc19uciA9PSB+MFUpCi0jZWxzZQotICAjZGVmaW5lIEZSRUVfUFRFX05SCTEKLSAgI2RlZmluZSB0bGJfZmFzdF9tb2RlKGJwKSAxCi0jZW5kaWYKLQotc3RydWN0IG1tdV9nYXRoZXIgewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXVuc2lnbmVkIGludCBwYWdlc19ucjsKLQl1bnNpZ25lZCBpbnQgbmVlZF9mbHVzaDsKLQl1bnNpZ25lZCBpbnQgZnVsbG1tOwotCXVuc2lnbmVkIGludCB0bGJfbnI7Ci0JdW5zaWduZWQgbG9uZyB2YWRkcnNbVExCX0JBVENIX05SXTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZXNbRlJFRV9QVEVfTlJdOwotfTsKLQotREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1leHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqLAotCQkJCSAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqKTsKLSNlbmRpZgotCi1leHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9wZW5kaW5nKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKik7Ci1leHRlcm4gdm9pZCBmbHVzaF90bGJfcGVuZGluZyh2b2lkKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbW11X2dhdGhlciAqdGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQotewotCXN0cnVjdCBtbXVfZ2F0aGVyICptcCA9ICZnZXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7Ci0KLQlCVUdfT04obXAtPnRsYl9ucik7Ci0KLQltcC0+bW0gPSBtbTsKLQltcC0+cGFnZXNfbnIgPSBudW1fb25saW5lX2NwdXMoKSA+IDEgPyAwVSA6IH4wVTsKLQltcC0+ZnVsbG1tID0gZnVsbF9tbV9mbHVzaDsKLQotCXJldHVybiBtcDsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqbXApCi17Ci0JaWYgKG1wLT5uZWVkX2ZsdXNoKSB7Ci0JCWZyZWVfcGFnZXNfYW5kX3N3YXBfY2FjaGUobXAtPnBhZ2VzLCBtcC0+cGFnZXNfbnIpOwotCQltcC0+cGFnZXNfbnIgPSAwOwotCQltcC0+bmVlZF9mbHVzaCA9IDA7Ci0JfQotCi19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1leHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLSNkZWZpbmUgZG9fZmx1c2hfdGxiX21tKG1tKSBzbXBfZmx1c2hfdGxiX21tKG1tKQotI2Vsc2UKLSNkZWZpbmUgZG9fZmx1c2hfdGxiX21tKG1tKSBfX2ZsdXNoX3RsYl9tbShDVFhfSFdCSVRTKG1tLT5jb250ZXh0KSwgU0VDT05EQVJZX0NPTlRFWFQpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIHRsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICptcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JdGxiX2ZsdXNoX21tdShtcCk7Ci0KLQlpZiAobXAtPmZ1bGxtbSkKLQkJbXAtPmZ1bGxtbSA9IDA7Ci0JZWxzZQotCQlmbHVzaF90bGJfcGVuZGluZygpOwotCi0JLyoga2VlcCB0aGUgcGFnZSB0YWJsZSBjYWNoZSB3aXRoaW4gYm91bmRzICovCi0JY2hlY2tfcGd0X2NhY2hlKCk7Ci0KLQlwdXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKm1wLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlpZiAodGxiX2Zhc3RfbW9kZShtcCkpIHsKLQkJZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpOwotCQlyZXR1cm47Ci0JfQotCW1wLT5uZWVkX2ZsdXNoID0gMTsKLQltcC0+cGFnZXNbbXAtPnBhZ2VzX25yKytdID0gcGFnZTsKLQlpZiAobXAtPnBhZ2VzX25yID49IEZSRUVfUFRFX05SKQotCQl0bGJfZmx1c2hfbW11KG1wKTsKLX0KLQotI2RlZmluZSB0bGJfcmVtb3ZlX3RsYl9lbnRyeShtcCxwdGVwLGFkZHIpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcHRlX2ZyZWVfdGxiKG1wLCBwdGVwYWdlKSBwdGVfZnJlZSgobXApLT5tbSwgcHRlcGFnZSkKLSNkZWZpbmUgcG1kX2ZyZWVfdGxiKG1wLCBwbWRwKSBwbWRfZnJlZSgobXApLT5tbSwgcG1kcCkKLSNkZWZpbmUgcHVkX2ZyZWVfdGxiKHRsYixwdWRwKSBfX3B1ZF9mcmVlX3RsYih0bGIscHVkcCkKLQotI2RlZmluZSB0bGJfbWlncmF0ZV9maW5pc2gobW0pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogX1NQQVJDNjRfVExCX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvdGxiLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmgKaW5kZXggZmJiNjc1ZC4uYTQzOTc5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaApAQCAtMSw0NCArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9UTEJGTFVTSF9ICi0jZGVmaW5lIF9TUEFSQzY0X1RMQkZMVVNIX0gKLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0KLS8qIFRTQiBmbHVzaCBvcGVyYXRpb25zLiAqLwotc3RydWN0IG1tdV9nYXRoZXI7Ci1leHRlcm4gdm9pZCBmbHVzaF90c2Jfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKLWV4dGVybiB2b2lkIGZsdXNoX3RzYl91c2VyKHN0cnVjdCBtbXVfZ2F0aGVyICptcCk7Ci0KLS8qIFRMQiBmbHVzaCBvcGVyYXRpb25zLiAqLwotCi1leHRlcm4gdm9pZCBmbHVzaF90bGJfcGVuZGluZyh2b2lkKTsKLQotI2RlZmluZSBmbHVzaF90bGJfcmFuZ2Uodm1hLHN0YXJ0LGVuZCkJXAotCWRvIHsgKHZvaWQpKHN0YXJ0KTsgZmx1c2hfdGxiX3BlbmRpbmcoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfdGxiX3BhZ2Uodm1hLGFkZHIpCWZsdXNoX3RsYl9wZW5kaW5nKCkKLSNkZWZpbmUgZmx1c2hfdGxiX21tKG1tKQkJZmx1c2hfdGxiX3BlbmRpbmcoKQotCi0vKiBMb2NhbCBjcHUgb25seS4gICovCi1leHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9hbGwodm9pZCk7Ci0KLWV4dGVybiB2b2lkIF9fZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7Ci0KLSNpZm5kZWYgQ09ORklHX1NNUAotCi0jZGVmaW5lIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsZW5kKSBcCi1kbyB7CWZsdXNoX3RzYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsZW5kKTsgXAotCV9fZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCxlbmQpOyBcCi19IHdoaWxlICgwKQotCi0jZWxzZSAvKiBDT05GSUdfU01QICovCi0KLWV4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKLQotI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIFwKLWRvIHsJZmx1c2hfdHNiX2tlcm5lbF9yYW5nZShzdGFydCxlbmQpOyBcCi0Jc21wX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7IFwKLX0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiAhIENPTkZJR19TTVAgKi8KLQotI2VuZGlmIC8qIF9TUEFSQzY0X1RMQkZMVVNIX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvdGxiZmx1c2guaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdG9wb2xvZ3kuaAppbmRleCAwMDFjMDQwLi40Njk5OWI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90b3BvbG9neS5oCkBAIC0xLDg2ICsxIEBACi0jaWZuZGVmIF9BU01fU1BBUkM2NF9UT1BPTE9HWV9ICi0jZGVmaW5lIF9BU01fU1BBUkM2NF9UT1BPTE9HWV9ICi0KLSNpZmRlZiBDT05GSUdfTlVNQQotCi0jaW5jbHVkZSA8YXNtL21tem9uZS5oPgotCi1zdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQotewotCXJldHVybiBudW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XTsKLX0KLQotI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKQkobm9kZSkKLQotc3RhdGljIGlubGluZSBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKQotewotCXJldHVybiBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdOwotfQotCi0vKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY3B1bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLwotI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyKHYsIG5vZGUpCQlcCi0JCWNwdW1hc2tfdCAqdiA9ICYobnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSkKLQotI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyX25leHQodiwgbm9kZSkJXAotCQkJICAgdiA9ICYobnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSkKLQotc3RhdGljIGlubGluZSBpbnQgbm9kZV90b19maXJzdF9jcHUoaW50IG5vZGUpCi17Ci0JY3B1bWFza190IHRtcDsKLQl0bXAgPSBub2RlX3RvX2NwdW1hc2sobm9kZSk7Ci0JcmV0dXJuIGZpcnN0X2NwdSh0bXApOwotfQotCi1zdHJ1Y3QgcGNpX2J1czsKLSNpZmRlZiBDT05GSUdfUENJCi1leHRlcm4gaW50IHBjaWJ1c190b19ub2RlKHN0cnVjdCBwY2lfYnVzICpwYnVzKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBwY2lidXNfdG9fbm9kZShzdHJ1Y3QgcGNpX2J1cyAqcGJ1cykKLXsKLQlyZXR1cm4gLTE7Ci19Ci0jZW5kaWYKLQotI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpCVwKLQkocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/IFwKLQkgQ1BVX01BU0tfQUxMIDogXAotCSBub2RlX3RvX2NwdW1hc2socGNpYnVzX3RvX25vZGUoYnVzKSkpCi0KLSNkZWZpbmUgU0RfTk9ERV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCi0JLm1pbl9pbnRlcnZhbAkJPSA4LAkJCVwKLQkubWF4X2ludGVydmFsCQk9IDMyLAkJCVwKLQkuYnVzeV9mYWN0b3IJCT0gMzIsCQkJXAotCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCi0JLmNhY2hlX25pY2VfdHJpZXMJPSAyLAkJCVwKLQkuYnVzeV9pZHgJCT0gMywJCQlcCi0JLmlkbGVfaWR4CQk9IDIsCQkJXAotCS5uZXdpZGxlX2lkeAkJPSAwLCAJCQlcCi0JLndha2VfaWR4CQk9IDEsCQkJXAotCS5mb3JrZXhlY19pZHgJCT0gMSwJCQlcCi0JLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAotCQkJCXwgU0RfQkFMQU5DRV9GT1JLCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCi0JCQkJfCBTRF9TRVJJQUxJWkUJCVwKLQkJCQl8IFNEX1dBS0VfQkFMQU5DRSwJXAotCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKLQkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAotfQotCi0jZWxzZSAvKiBDT05GSUdfTlVNQSAqLwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KLQotI2VuZGlmIC8qICEoQ09ORklHX05VTUEpICovCi0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIHRvcG9sb2d5X3BoeXNpY2FsX3BhY2thZ2VfaWQoY3B1KQkoY3B1X2RhdGEoY3B1KS5wcm9jX2lkKQotI2RlZmluZSB0b3BvbG9neV9jb3JlX2lkKGNwdSkJCQkoY3B1X2RhdGEoY3B1KS5jb3JlX2lkKQotI2RlZmluZSB0b3BvbG9neV9jb3JlX3NpYmxpbmdzKGNwdSkJCShjcHVfY29yZV9tYXBbY3B1XSkKLSNkZWZpbmUgdG9wb2xvZ3lfdGhyZWFkX3NpYmxpbmdzKGNwdSkJCShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkKLSNkZWZpbmUgbWNfY2FwYWJsZSgpCQkJCShzcGFyYzY0X211bHRpX2NvcmUpCi0jZGVmaW5lIHNtdF9jYXBhYmxlKCkJCQkJKHNwYXJjNjRfbXVsdGlfY29yZSkKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLSNkZWZpbmUgY3B1X2NvcmVncm91cF9tYXAoY3B1KQkJCShjcHVfY29yZV9tYXBbY3B1XSkKLQotI2VuZGlmIC8qIF9BU01fU1BBUkM2NF9UT1BPTE9HWV9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3RvcG9sb2d5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RzYi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90c2IuaAppbmRleCA3NmU0Mjk5Li4zNjc3YTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RzYi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHNiLmgKQEAgLTEsMjgzICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1RTQl9ICi0jZGVmaW5lIF9TUEFSQzY0X1RTQl9ICi0KLS8qIFRoZSBzcGFyYzY0IFRTQiBpcyBzaW1pbGFyIHRvIHRoZSBwb3dlcnBjIGhhc2h0YWJsZXMuICBJdCdzIGEKLSAqIHBvd2VyLW9mLTIgc2l6ZWQgdGFibGUgb2YgVEFHL1BURSBwYWlycy4gIFRoZSBjcHUgcHJlY29tcHV0ZXMKLSAqIHBvaW50ZXJzIGludG8gdGhpcyB0YWJsZSBmb3IgOEsgYW5kIDY0SyBwYWdlIHNpemVzLCBhbmQgYWxzbyBhCi0gKiBjb21wYXJpc29uIFRBRyBiYXNlZCB1cG9uIHRoZSB2aXJ0dWFsIGFkZHJlc3MgYW5kIGNvbnRleHQgd2hpY2gKLSAqIGZhdWx0cy4KLSAqCi0gKiBUTEIgbWlzcyB0cmFwIGhhbmRsZXIgc29mdHdhcmUgZG9lcyB0aGUgYWN0dWFsIGxvb2t1cCB2aWEgc29tZXRoaW5nCi0gKiBvZiB0aGUgZm9ybToKLSAqCi0gKiAJbGR4YQkJWyVnMF0gQVNJX3tELEl9TU1VX1RTQl84S0JfUFRSLCAlZzEKLSAqIAlsZHhhCQlbJWcwXSBBU0lfe0QsSX1NTVUsICVnNgotICoJc2xseAkJJWc2LCAyMiwgJWc2Ci0gKglzcmx4CQklZzYsIDIyLCAlZzYKLSAqIAlsZGRhCQlbJWcxXSBBU0lfTlVDTEVVU19RVUFEX0xERCwgJWc0Ci0gKiAJY21wCQklZzQsICVnNgotICogCWJuZSxwbgkleGNjLCB0c2JfbWlzc197ZCxpfXRsYgotICogCSBtb3YJCUZBVUxUX0NPREVfe0QsSX1UTEIsICVnMwotICogCXN0eGEJCSVnNSwgWyVnMF0gQVNJX3tELEl9VExCX0RBVEFfSU4KLSAqIAlyZXRyeQotICoKLSAqCi0gKiBFYWNoIDE2LWJ5dGUgc2xvdCBvZiB0aGUgVFNCIGlzIHRoZSA4LWJ5dGUgdGFnIGFuZCB0aGVuIHRoZSA4LWJ5dGUKLSAqIFBURS4gIFRoZSBUQUcgaXMgb2YgdGhlIHNhbWUgbGF5b3V0IGFzIHRoZSBUTEIgVEFHIFRBUkdFVCBtbXUKLSAqIHJlZ2lzdGVyIHdoaWNoIGlzOgotICoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwgIC0gIHwgIENPTlRFWFQgfCAgLSAgfCAgICBWQUREUiBiaXRzIDYzOjIyICAgIHwKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICA2MyA2MSA2MCAgICAgIDQ4IDQ3IDQyIDQxICAgICAgICAgICAgICAgICAgICAgMAotICoKLSAqIEJ1dCBhY3R1YWxseSwgc2luY2Ugd2UgdXNlIHBlci1tbSBUU0Incywgd2UgemVybyBvdXQgdGhlIENPTlRFWFQKLSAqIGZpZWxkLgotICoKLSAqIExpa2UgdGhlIHBvd2VycGMgaGFzaHRhYmxlcyB3ZSBuZWVkIHRvIHVzZSBsb2NraW5nIGluIG9yZGVyIHRvCi0gKiBzeW5jaHJvbml6ZSB3aGlsZSB3ZSB1cGRhdGUgdGhlIGVudHJpZXMuICBQVEUgdXBkYXRlcyBuZWVkIGxvY2tpbmcKLSAqIGFzIHdlbGwuCi0gKgotICogV2UgbmVlZCB0byBjYXJlZnVsbHkgY2hvb3NlIGEgbG9jayBiaXRzIGZvciB0aGUgVFNCIGVudHJ5LiAgV2UKLSAqIGNob29zZSB0byB1c2UgYml0IDQ3IGluIHRoZSB0YWcuICBBbHNvLCBzaW5jZSB3ZSBuZXZlciBtYXAgYW55dGhpbmcKLSAqIGF0IHBhZ2UgemVybyBpbiBjb250ZXh0IHplcm8sIHdlIHVzZSB6ZXJvIGFzIGFuIGludmFsaWQgdGFnIGVudHJ5LgotICogV2hlbiB0aGUgbG9jayBiaXQgaXMgc2V0LCB0aGlzIGZvcmNlcyBhIHRhZyBjb21wYXJpc29uIGZhaWx1cmUuCi0gKi8KLQotI2RlZmluZSBUU0JfVEFHX0xPQ0tfQklUCTQ3Ci0jZGVmaW5lIFRTQl9UQUdfTE9DS19ISUdICSgxIDw8IChUU0JfVEFHX0xPQ0tfQklUIC0gMzIpKQotCi0jZGVmaW5lIFRTQl9UQUdfSU5WQUxJRF9CSVQJNDYKLSNkZWZpbmUgVFNCX1RBR19JTlZBTElEX0hJR0gJKDEgPDwgKFRTQl9UQUdfSU5WQUxJRF9CSVQgLSAzMikpCi0KLSNkZWZpbmUgVFNCX01FTUJBUgltZW1iYXIJI1N0b3JlU3RvcmUKLQotLyogU29tZSBjcHVzIHN1cHBvcnQgcGh5c2ljYWwgYWRkcmVzcyBxdWFkIGxvYWRzLiAgV2Ugd2FudCB0byB1c2UKLSAqIHRob3NlIGlmIHBvc3NpYmxlIHNvIHdlIGRvbid0IG5lZWQgdG8gaGFyZC1sb2NrIHRoZSBUU0IgbWFwcGluZwotICogaW50byB0aGUgVExCLiAgV2UgZW5jb2RlIHNvbWUgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgaW4gb3JkZXIgdG8KLSAqIHN1cHBvcnQgdGhpcy4KLSAqCi0gKiBUaGUga2VybmVsIFRTQiBpcyBsb2NrZWQgaW50byB0aGUgVExCIGJ5IHZpcnR1ZSBvZiBiZWluZyBpbiB0aGUKLSAqIGtlcm5lbCBpbWFnZSwgc28gd2UgZG9uJ3QgcGxheSB0aGVzZSBnYW1lcyBmb3Igc3dhcHBlcl90c2IgYWNjZXNzLgotICovCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotc3RydWN0IHRzYl9sZHF1YWRfcGh5c19wYXRjaF9lbnRyeSB7Ci0JdW5zaWduZWQgaW50CWFkZHI7Ci0JdW5zaWduZWQgaW50CXN1bjR1X2luc247Ci0JdW5zaWduZWQgaW50CXN1bjR2X2luc247Ci19OwotZXh0ZXJuIHN0cnVjdCB0c2JfbGRxdWFkX3BoeXNfcGF0Y2hfZW50cnkgX190c2JfbGRxdWFkX3BoeXNfcGF0Y2gsCi0JX190c2JfbGRxdWFkX3BoeXNfcGF0Y2hfZW5kOwotCi1zdHJ1Y3QgdHNiX3BoeXNfcGF0Y2hfZW50cnkgewotCXVuc2lnbmVkIGludAlhZGRyOwotCXVuc2lnbmVkIGludAlpbnNuOwotfTsKLWV4dGVybiBzdHJ1Y3QgdHNiX3BoeXNfcGF0Y2hfZW50cnkgX190c2JfcGh5c19wYXRjaCwgX190c2JfcGh5c19wYXRjaF9lbmQ7Ci0jZW5kaWYKLSNkZWZpbmUgVFNCX0xPQURfUVVBRChUU0IsIFJFRykJXAotNjYxOglsZGRhCQlbVFNCXSBBU0lfTlVDTEVVU19RVUFEX0xERCwgUkVHOyBcCi0JLnNlY3Rpb24JLnRzYl9sZHF1YWRfcGh5c19wYXRjaCwgImF4IjsgXAotCS53b3JkCQk2NjFiOyBcCi0JbGRkYQkJW1RTQl0gQVNJX1FVQURfTEREX1BIWVMsIFJFRzsgXAotCWxkZGEJCVtUU0JdIEFTSV9RVUFEX0xERF9QSFlTXzRWLCBSRUc7IFwKLQkucHJldmlvdXMKLQotI2RlZmluZSBUU0JfTE9BRF9UQUdfSElHSChUU0IsIFJFRykgXAotNjYxOglsZHV3YQkJW1RTQl0gQVNJX04sIFJFRzsgXAotCS5zZWN0aW9uCS50c2JfcGh5c19wYXRjaCwgImF4IjsgXAotCS53b3JkCQk2NjFiOyBcCi0JbGR1d2EJCVtUU0JdIEFTSV9QSFlTX1VTRV9FQywgUkVHOyBcCi0JLnByZXZpb3VzCi0KLSNkZWZpbmUgVFNCX0xPQURfVEFHKFRTQiwgUkVHKSBcCi02NjE6CWxkeGEJCVtUU0JdIEFTSV9OLCBSRUc7IFwKLQkuc2VjdGlvbgkudHNiX3BoeXNfcGF0Y2gsICJheCI7IFwKLQkud29yZAkJNjYxYjsgXAotCWxkeGEJCVtUU0JdIEFTSV9QSFlTX1VTRV9FQywgUkVHOyBcCi0JLnByZXZpb3VzCi0KLSNkZWZpbmUgVFNCX0NBU19UQUdfSElHSChUU0IsIFJFRzEsIFJFRzIpIFwKLTY2MToJY2FzYQkJW1RTQl0gQVNJX04sIFJFRzEsIFJFRzI7IFwKLQkuc2VjdGlvbgkudHNiX3BoeXNfcGF0Y2gsICJheCI7IFwKLQkud29yZAkJNjYxYjsgXAotCWNhc2EJCVtUU0JdIEFTSV9QSFlTX1VTRV9FQywgUkVHMSwgUkVHMjsgXAotCS5wcmV2aW91cwotCi0jZGVmaW5lIFRTQl9DQVNfVEFHKFRTQiwgUkVHMSwgUkVHMikgXAotNjYxOgljYXN4YQkJW1RTQl0gQVNJX04sIFJFRzEsIFJFRzI7IFwKLQkuc2VjdGlvbgkudHNiX3BoeXNfcGF0Y2gsICJheCI7IFwKLQkud29yZAkJNjYxYjsgXAotCWNhc3hhCQlbVFNCXSBBU0lfUEhZU19VU0VfRUMsIFJFRzEsIFJFRzI7IFwKLQkucHJldmlvdXMKLQotI2RlZmluZSBUU0JfU1RPUkUoQUREUiwgVkFMKSBcCi02NjE6CXN0eGEJCVZBTCwgW0FERFJdIEFTSV9OOyBcCi0JLnNlY3Rpb24JLnRzYl9waHlzX3BhdGNoLCAiYXgiOyBcCi0JLndvcmQJCTY2MWI7IFwKLQlzdHhhCQlWQUwsIFtBRERSXSBBU0lfUEhZU19VU0VfRUM7IFwKLQkucHJldmlvdXMKLQotI2RlZmluZSBUU0JfTE9DS19UQUcoVFNCLCBSRUcxLCBSRUcyKQlcCi05OToJVFNCX0xPQURfVEFHX0hJR0goVFNCLCBSRUcxKTsJXAotCXNldGhpCSVoaShUU0JfVEFHX0xPQ0tfSElHSCksIFJFRzI7XAotCWFuZGNjCVJFRzEsIFJFRzIsICVnMDsJXAotCWJuZSxwbgklaWNjLCA5OWI7CQlcCi0JIG5vcDsJCQkJXAotCVRTQl9DQVNfVEFHX0hJR0goVFNCLCBSRUcxLCBSRUcyKTsJXAotCWNtcAlSRUcxLCBSRUcyOwkJXAotCWJuZSxwbgklaWNjLCA5OWI7CQlcCi0JIG5vcDsJCQkJXAotCVRTQl9NRU1CQVIKLQotI2RlZmluZSBUU0JfV1JJVEUoVFNCLCBUVEUsIFRBRykgXAotCWFkZAlUU0IsIDB4OCwgVFNCOyAgIFwKLQlUU0JfU1RPUkUoVFNCLCBUVEUpOyAgICAgXAotCXN1YglUU0IsIDB4OCwgVFNCOyAgIFwKLQlUU0JfTUVNQkFSOyAgICAgICAgICAgICAgXAotCVRTQl9TVE9SRShUU0IsIFRBRyk7Ci0KLSNkZWZpbmUgS1RTQl9MT0FEX1FVQUQoVFNCLCBSRUcpIFwKLQlsZGRhCQlbVFNCXSBBU0lfTlVDTEVVU19RVUFEX0xERCwgUkVHOwotCi0jZGVmaW5lIEtUU0JfU1RPUkUoQUREUiwgVkFMKSBcCi0Jc3R4YQkJVkFMLCBbQUREUl0gQVNJX047Ci0KLSNkZWZpbmUgS1RTQl9MT0NLX1RBRyhUU0IsIFJFRzEsIFJFRzIpCVwKLTk5OglsZHV3YQlbVFNCXSBBU0lfTiwgUkVHMTsJXAotCXNldGhpCSVoaShUU0JfVEFHX0xPQ0tfSElHSCksIFJFRzI7XAotCWFuZGNjCVJFRzEsIFJFRzIsICVnMDsJXAotCWJuZSxwbgklaWNjLCA5OWI7CQlcCi0JIG5vcDsJCQkJXAotCWNhc2EJW1RTQl0gQVNJX04sIFJFRzEsIFJFRzI7XAotCWNtcAlSRUcxLCBSRUcyOwkJXAotCWJuZSxwbgklaWNjLCA5OWI7CQlcCi0JIG5vcDsJCQkJXAotCVRTQl9NRU1CQVIKLQotI2RlZmluZSBLVFNCX1dSSVRFKFRTQiwgVFRFLCBUQUcpIFwKLQlhZGQJVFNCLCAweDgsIFRTQjsgICBcCi0Jc3R4YQlUVEUsIFtUU0JdIEFTSV9OOyAgICAgXAotCXN1YglUU0IsIDB4OCwgVFNCOyAgIFwKLQlUU0JfTUVNQkFSOyAgICAgICAgICAgICAgXAotCXN0eGEJVEFHLCBbVFNCXSBBU0lfTjsKLQotCS8qIERvIGEga2VybmVsIHBhZ2UgdGFibGUgd2Fsay4gIExlYXZlcyBwaHlzaWNhbCBQVEUgcG9pbnRlciBpbgotCSAqIFJFRzEuICBKdW1wcyB0byBGQUlMX0xBQkVMIG9uIGVhcmx5IHBhZ2UgdGFibGUgd2FsayB0ZXJtaW5hdGlvbi4KLQkgKiBWQUREUiB3aWxsIG5vdCBiZSBjbG9iYmVyZWQsIGJ1dCBSRUcyIHdpbGwuCi0JICovCi0jZGVmaW5lIEtFUk5fUEdUQUJMRV9XQUxLKFZBRERSLCBSRUcxLCBSRUcyLCBGQUlMX0xBQkVMKQlcCi0Jc2V0aGkJCSVoaShzd2FwcGVyX3BnX2RpciksIFJFRzE7IFwKLQlvcgkJUkVHMSwgJWxvKHN3YXBwZXJfcGdfZGlyKSwgUkVHMTsgXAotCXNsbHgJCVZBRERSLCA2NCAtIChQR0RJUl9TSElGVCArIFBHRElSX0JJVFMpLCBSRUcyOyBcCi0Jc3JseAkJUkVHMiwgNjQgLSBQQUdFX1NISUZULCBSRUcyOyBcCi0JYW5kbgkJUkVHMiwgMHgzLCBSRUcyOyBcCi0JbGR1dwkJW1JFRzEgKyBSRUcyXSwgUkVHMTsgXAotCWJyeixwbgkJUkVHMSwgRkFJTF9MQUJFTDsgXAotCSBzbGx4CQlWQUREUiwgNjQgLSAoUE1EX1NISUZUICsgUE1EX0JJVFMpLCBSRUcyOyBcCi0Jc3JseAkJUkVHMiwgNjQgLSBQQUdFX1NISUZULCBSRUcyOyBcCi0Jc2xseAkJUkVHMSwgMTEsIFJFRzE7IFwKLQlhbmRuCQlSRUcyLCAweDMsIFJFRzI7IFwKLQlsZHV3YQkJW1JFRzEgKyBSRUcyXSBBU0lfUEhZU19VU0VfRUMsIFJFRzE7IFwKLQlicnoscG4JCVJFRzEsIEZBSUxfTEFCRUw7IFwKLQkgc2xseAkJVkFERFIsIDY0IC0gUE1EX1NISUZULCBSRUcyOyBcCi0Jc3JseAkJUkVHMiwgNjQgLSBQQUdFX1NISUZULCBSRUcyOyBcCi0Jc2xseAkJUkVHMSwgMTEsIFJFRzE7IFwKLQlhbmRuCQlSRUcyLCAweDcsIFJFRzI7IFwKLQlhZGQJCVJFRzEsIFJFRzIsIFJFRzE7Ci0KLQkvKiBEbyBhIHVzZXIgcGFnZSB0YWJsZSB3YWxrIGluIE1NVSBnbG9iYWxzLiAgTGVhdmVzIHBoeXNpY2FsIFBURQotCSAqIHBvaW50ZXIgaW4gUkVHMS4gIEp1bXBzIHRvIEZBSUxfTEFCRUwgb24gZWFybHkgcGFnZSB0YWJsZSB3YWxrCi0JICogdGVybWluYXRpb24uICBQaHlzaWNhbCBiYXNlIG9mIHBhZ2UgdGFibGVzIGlzIGluIFBIWVNfUEdEIHdoaWNoCi0JICogd2lsbCBub3QgYmUgbW9kaWZpZWQuCi0JICoKLQkgKiBWQUREUiB3aWxsIG5vdCBiZSBjbG9iYmVyZWQsIGJ1dCBSRUcxIGFuZCBSRUcyIHdpbGwuCi0JICovCi0jZGVmaW5lIFVTRVJfUEdUQUJMRV9XQUxLX1RMMShWQUREUiwgUEhZU19QR0QsIFJFRzEsIFJFRzIsIEZBSUxfTEFCRUwpCVwKLQlzbGx4CQlWQUREUiwgNjQgLSAoUEdESVJfU0hJRlQgKyBQR0RJUl9CSVRTKSwgUkVHMjsgXAotCXNybHgJCVJFRzIsIDY0IC0gUEFHRV9TSElGVCwgUkVHMjsgXAotCWFuZG4JCVJFRzIsIDB4MywgUkVHMjsgXAotCWxkdXdhCQlbUEhZU19QR0QgKyBSRUcyXSBBU0lfUEhZU19VU0VfRUMsIFJFRzE7IFwKLQlicnoscG4JCVJFRzEsIEZBSUxfTEFCRUw7IFwKLQkgc2xseAkJVkFERFIsIDY0IC0gKFBNRF9TSElGVCArIFBNRF9CSVRTKSwgUkVHMjsgXAotCXNybHgJCVJFRzIsIDY0IC0gUEFHRV9TSElGVCwgUkVHMjsgXAotCXNsbHgJCVJFRzEsIDExLCBSRUcxOyBcCi0JYW5kbgkJUkVHMiwgMHgzLCBSRUcyOyBcCi0JbGR1d2EJCVtSRUcxICsgUkVHMl0gQVNJX1BIWVNfVVNFX0VDLCBSRUcxOyBcCi0JYnJ6LHBuCQlSRUcxLCBGQUlMX0xBQkVMOyBcCi0JIHNsbHgJCVZBRERSLCA2NCAtIFBNRF9TSElGVCwgUkVHMjsgXAotCXNybHgJCVJFRzIsIDY0IC0gUEFHRV9TSElGVCwgUkVHMjsgXAotCXNsbHgJCVJFRzEsIDExLCBSRUcxOyBcCi0JYW5kbgkJUkVHMiwgMHg3LCBSRUcyOyBcCi0JYWRkCQlSRUcxLCBSRUcyLCBSRUcxOwotCi0vKiBMb29rdXAgYSBPQlAgbWFwcGluZyBvbiBWQUREUiBpbiB0aGUgcHJvbV90cmFuc1tdIHRhYmxlIGF0IFRMPjAuCi0gKiBJZiBubyBlbnRyeSBpcyBmb3VuZCwgRkFJTF9MQUJFTCB3aWxsIGJlIGJyYW5jaGVkIHRvLiAgT24gc3VjY2VzcwotICogdGhlIHJlc3VsdGluZyBQVEUgdmFsdWUgd2lsbCBiZSBsZWZ0IGluIFJFRzEuICBWQUREUiBpcyBwcmVzZXJ2ZWQKLSAqIGJ5IHRoaXMgcm91dGluZS4KLSAqLwotI2RlZmluZSBPQlBfVFJBTlNfTE9PS1VQKFZBRERSLCBSRUcxLCBSRUcyLCBSRUczLCBGQUlMX0xBQkVMKSBcCi0Jc2V0aGkJCSVoaShwcm9tX3RyYW5zKSwgUkVHMTsgXAotCW9yCQlSRUcxLCAlbG8ocHJvbV90cmFucyksIFJFRzE7IFwKLTk3OglsZHgJCVtSRUcxICsgMHgwMF0sIFJFRzI7IFwKLQlicnoscG4JCVJFRzIsIEZBSUxfTEFCRUw7IFwKLQkgbm9wOyBcCi0JbGR4CQlbUkVHMSArIDB4MDhdLCBSRUczOyBcCi0JYWRkCQlSRUcyLCBSRUczLCBSRUczOyBcCi0JY21wCQlSRUcyLCBWQUREUjsgXAotCWJndSxwdAkJJXhjYywgOThmOyBcCi0JIGNtcAkJVkFERFIsIFJFRzM7IFwKLQliZ2V1LHB0CQkleGNjLCA5OGY7IFwKLQkgbGR4CQlbUkVHMSArIDB4MTBdLCBSRUczOyBcCi0Jc3ViCQlWQUREUiwgUkVHMiwgUkVHMjsgXAotCWJhLHB0CQkleGNjLCA5OWY7IFwKLQkgYWRkCQlSRUczLCBSRUcyLCBSRUcxOyBcCi05ODoJYmEscHQJCSV4Y2MsIDk3YjsgXAotCSBhZGQJCVJFRzEsICgzICogOCksIFJFRzE7IFwKLTk5OgotCi0JLyogV2UgdXNlIGEgMzJLIFRTQiBmb3IgdGhlIHdob2xlIGtlcm5lbCwgdGhpcyBhbGxvd3MgdG8KLQkgKiBoYW5kbGUgYWJvdXQgMTZNQiBvZiBtb2R1bGVzIGFuZCB2bWFsbG9jIG1hcHBpbmdzIHdpdGhvdXQKLQkgKiBpbmN1cnJpbmcgbWFueSBoYXNoIGNvbmZsaWN0cy4KLQkgKi8KLSNkZWZpbmUgS0VSTkVMX1RTQl9TSVpFX0JZVEVTCSgzMiAqIDEwMjQpCi0jZGVmaW5lIEtFUk5FTF9UU0JfTkVOVFJJRVMJXAotCShLRVJORUxfVFNCX1NJWkVfQllURVMgLyAxNikKLSNkZWZpbmUgS0VSTkVMX1RTQjRNX05FTlRSSUVTCTQwOTYKLQotCS8qIERvIGEga2VybmVsIFRTQiBsb29rdXAgYXQgdGw+MCBvbiBWQUREUitUQUcsIGJyYW5jaCB0byBPS19MQUJFTAotCSAqIG9uIFRTQiBoaXQuICBSRUcxLCBSRUcyLCBSRUczLCBhbmQgUkVHNCBhcmUgdXNlZCBhcyB0ZW1wb3JhcmllcwotCSAqIGFuZCB0aGUgZm91bmQgVFRFIHdpbGwgYmUgbGVmdCBpbiBSRUcxLiAgUkVHMyBhbmQgUkVHNCBtdXN0Ci0JICogYmUgYW4gZXZlbi9vZGQgcGFpciBvZiByZWdpc3RlcnMuCi0JICoKLQkgKiBWQUREUiBhbmQgVEFHIHdpbGwgYmUgcHJlc2VydmVkIGFuZCBub3QgY2xvYmJlcmVkIGJ5IHRoaXMgbWFjcm8uCi0JICovCi0jZGVmaW5lIEtFUk5fVFNCX0xPT0tVUF9UTDEoVkFERFIsIFRBRywgUkVHMSwgUkVHMiwgUkVHMywgUkVHNCwgT0tfTEFCRUwpIFwKLQlzZXRoaQkJJWhpKHN3YXBwZXJfdHNiKSwgUkVHMTsgXAotCW9yCQlSRUcxLCAlbG8oc3dhcHBlcl90c2IpLCBSRUcxOyBcCi0Jc3JseAkJVkFERFIsIFBBR0VfU0hJRlQsIFJFRzI7IFwKLQlhbmQJCVJFRzIsIChLRVJORUxfVFNCX05FTlRSSUVTIC0gMSksIFJFRzI7IFwKLQlzbGx4CQlSRUcyLCA0LCBSRUcyOyBcCi0JYWRkCQlSRUcxLCBSRUcyLCBSRUcyOyBcCi0JS1RTQl9MT0FEX1FVQUQoUkVHMiwgUkVHMyk7IFwKLQljbXAJCVJFRzMsIFRBRzsgXAotCWJlLGEscHQJCSV4Y2MsIE9LX0xBQkVMOyBcCi0JIG1vdgkJUkVHNCwgUkVHMTsKLQotI2lmbmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi0JLyogVGhpcyB2ZXJzaW9uIHVzZXMgYSB0cmljaywgdGhlIFRBRyBpcyBhbHJlYWR5IChWQUREUiA+PiAyMikgc28KLQkgKiB3ZSBjYW4gbWFrZSB1c2Ugb2YgdGhhdCBmb3IgdGhlIGluZGV4IGNvbXB1dGF0aW9uLgotCSAqLwotI2RlZmluZSBLRVJOX1RTQjRNX0xPT0tVUF9UTDEoVEFHLCBSRUcxLCBSRUcyLCBSRUczLCBSRUc0LCBPS19MQUJFTCkgXAotCXNldGhpCQklaGkoc3dhcHBlcl80bV90c2IpLCBSRUcxOyBcCi0Jb3IJCVJFRzEsICVsbyhzd2FwcGVyXzRtX3RzYiksIFJFRzE7IFwKLQlhbmQJCVRBRywgKEtFUk5FTF9UU0I0TV9ORU5UUklFUyAtIDEpLCBSRUcyOyBcCi0Jc2xseAkJUkVHMiwgNCwgUkVHMjsgXAotCWFkZAkJUkVHMSwgUkVHMiwgUkVHMjsgXAotCUtUU0JfTE9BRF9RVUFEKFJFRzIsIFJFRzMpOyBcCi0JY21wCQlSRUczLCBUQUc7IFwKLQliZSxhLHB0CQkleGNjLCBPS19MQUJFTDsgXAotCSBtb3YJCVJFRzQsIFJFRzE7Ci0jZW5kaWYKLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfVFNCX0gpICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3RzYi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmgKaW5kZXggMGJhMTk5NS4uYTU1MGYxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3R0YWJsZS5oCkBAIC0xLDY1OCArMSBAQAotI2lmbmRlZiBfU1BBUkM2NF9UVEFCTEVfSAotI2RlZmluZSBfU1BBUkM2NF9UVEFCTEVfSAotCi0jaW5jbHVkZSA8YXNtL3V0cmFwLmg+Ci0KLSNpZmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1RfS0VSTkVMIGIgc3BhcmM2NF9ib290OyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7Ci0KLS8qIFdlIG5lZWQgYSAiY2xlYW5lZCIgaW5zdHJ1Y3Rpb24uLi4gKi8KLSNkZWZpbmUgQ0xFQU5fV0lORE9XCQkJCQkJCVwKLQlyZHByCSVjbGVhbndpbiwgJWwwOwkJYWRkCSVsMCwgMSwgJWwwOwkJXAotCXdycHIJJWwwLCAweDAsICVjbGVhbndpbjsJCQkJCVwKLQljbHIJJW8wOwljbHIJJW8xOwljbHIJJW8yOwljbHIJJW8zOwlcCi0JY2xyCSVvNDsJY2xyCSVvNTsJY2xyCSVvNjsJY2xyCSVvNzsJXAotCWNscgklbDA7CWNscgklbDE7CWNscgklbDI7CWNscgklbDM7CVwKLQljbHIJJWw0OwljbHIJJWw1OwljbHIJJWw2OwljbHIJJWw3OwlcCi0JcmV0cnk7CQkJCQkJCQlcCi0Jbm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7Ci0KLSNkZWZpbmUgVFJBUChyb3V0aW5lKQkJCQkJXAotCXNldGhpCSVoaSgxMDlmKSwgJWc3OwkJCQlcCi0JYmEscHQJJXhjYywgZXRyYXA7CQkJCVwKLTEwOToJIG9yCSVnNywgJWxvKDEwOWIpLCAlZzc7CQkJXAotCWNhbGwJcm91dGluZTsJCQkJXAotCSBhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzA7CQkJXAotCWJhLHB0CSV4Y2MsIHJ0cmFwOwkJCQlcCi0JIG5vcDsJCQkJCQlcCi0Jbm9wOwotCi0jZGVmaW5lIFRSQVBfN0lOU05TKHJvdXRpbmUpCQkJCVwKLQlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAotCWJhLHB0CSV4Y2MsIGV0cmFwOwkJCQlcCi0xMDk6CSBvcgklZzcsICVsbygxMDliKSwgJWc3OwkJCVwKLQljYWxsCXJvdXRpbmU7CQkJCVwKLQkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKLQliYSxwdAkleGNjLCBydHJhcDsJCQkJXAotCSBub3A7Ci0KLSNkZWZpbmUgVFJBUF9TQVZFRlBVKHJvdXRpbmUpCQkJCVwKLQlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAotCWJhLHB0CSV4Y2MsIGRvX2ZwdHJhcDsJCQlcCi0xMDk6CSBvcgklZzcsICVsbygxMDliKSwgJWc3OwkJCVwKLQljYWxsCXJvdXRpbmU7CQkJCVwKLQkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKLQliYSxwdAkleGNjLCBydHJhcDsJCQkJXAotCSBub3A7CQkJCQkJXAotCW5vcDsKLQotI2RlZmluZSBUUkFQX05PU0FWRShyb3V0aW5lKQkJCQlcCi0JYmEscHQJJXhjYywgcm91dGluZTsJCQkJXAotCSBub3A7CQkJCQkJXAotCW5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7Ci0JCi0jZGVmaW5lIFRSQVBfTk9TQVZFXzdJTlNOUyhyb3V0aW5lKQkJCVwKLQliYSxwdAkleGNjLCByb3V0aW5lOwkJCQlcCi0JIG5vcDsJCQkJCQlcCi0Jbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7Ci0JCi0jZGVmaW5lIFRSQVBUTDEocm91dGluZSkJCQkJXAotCXNldGhpCSVoaSgxMDlmKSwgJWc3OwkJCQlcCi0JYmEscHQJJXhjYywgZXRyYXB0bDE7CQkJCVwKLTEwOToJIG9yCSVnNywgJWxvKDEwOWIpLCAlZzc7CQkJXAotCWNhbGwJcm91dGluZTsJCQkJXAotCSBhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzA7CQkJXAotCWJhLHB0CSV4Y2MsIHJ0cmFwOwkJCQlcCi0JIG5vcDsJCQkJCQlcCi0Jbm9wOwotCQotI2RlZmluZSBUUkFQX0FSRyhyb3V0aW5lLCBhcmcpCQkJCVwKLQlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAotCWJhLHB0CSV4Y2MsIGV0cmFwOwkJCQlcCi0xMDk6CSBvcgklZzcsICVsbygxMDliKSwgJWc3OwkJCVwKLQlhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzA7CQkJXAotCWNhbGwJcm91dGluZTsJCQkJXAotCSBtb3YJYXJnLCAlbzE7CQkJCVwKLQliYSxwdAkleGNjLCBydHJhcDsJCQkJXAotCSBub3A7Ci0JCi0jZGVmaW5lIFRSQVBUTDFfQVJHKHJvdXRpbmUsIGFyZykJCQlcCi0Jc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKLQliYSxwdAkleGNjLCBldHJhcHRsMTsJCQkJXAotMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCi0JYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKLQljYWxsCXJvdXRpbmU7CQkJCVwKLQkgbW92CWFyZywgJW8xOwkJCQlcCi0JYmEscHQJJXhjYywgcnRyYXA7CQkJCVwKLQkgbm9wOwotCQotI2RlZmluZSBTWVNDQUxMX1RSQVAocm91dGluZSwgc3lzdGJsKQkJCVwKLQlyZHByCSVwaWwsICVnMjsJCQkJXAotCW1vdglUU1RBVEVfU1lTQ0FMTCwgJWczOwkJCVwKLQlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAotCWJhLHB0CSV4Y2MsIGV0cmFwX3N5c2NhbGw7CQkJXAotMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCi0Jc2V0aGkJJWhpKHN5c3RibCksICVsNzsJCQlcCi0JYmEscHQJJXhjYywgcm91dGluZTsJCQkJXAotCSBvcgklbDcsICVsbyhzeXN0YmwpLCAlbDc7Ci0JCi0jZGVmaW5lIFRSQVBfVVRSQVAoaGFuZGxlcixsdmwpCQkJCVwKLQltb3YJaGFuZGxlciwgJWczOwkJCQlcCi0JYmEscHQJJXhjYywgdXRyYXBfdHJhcDsJCQlcCi0JIG1vdglsdmwsICVnNDsJCQkJXAotCW5vcDsJCQkJCQlcCi0Jbm9wOwkJCQkJCVwKLQlub3A7CQkJCQkJXAotCW5vcDsJCQkJCQlcCi0Jbm9wOwotCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotI2RlZmluZQlMSU5VWF8zMkJJVF9TWVNDQUxMX1RSQVAgU1lTQ0FMTF9UUkFQKGxpbnV4X3NwYXJjX3N5c2NhbGwzMiwgc3lzX2NhbGxfdGFibGUzMikKLSNlbHNlCi0jZGVmaW5lCUxJTlVYXzMyQklUX1NZU0NBTExfVFJBUCBCVFJBUCgweDExMCkKLSNlbmRpZgotI2RlZmluZSBMSU5VWF82NEJJVF9TWVNDQUxMX1RSQVAgU1lTQ0FMTF9UUkFQKGxpbnV4X3NwYXJjX3N5c2NhbGwsIHN5c19jYWxsX3RhYmxlNjQpCi0jZGVmaW5lIEdFVENDX1RSQVAgVFJBUChnZXRjYykKLSNkZWZpbmUgU0VUQ0NfVFJBUCBUUkFQKHNldGNjKQotI2RlZmluZSBCUkVBS1BPSU5UX1RSQVAgVFJBUChicmVha3BvaW50X3RyYXApCi0KLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQotI2RlZmluZSBUUkFQX0lSUShyb3V0aW5lLCBsZXZlbCkJCQlcCi0JcmRwcgklcGlsLCAlZzI7CQkJCVwKLQl3cnByCSVnMCwgMTUsICVwaWw7CQkJCVwKLQlzZXRoaQklaGkoMWYtNCksICVnNzsJCQkJXAotCWJhLHB0CSV4Y2MsIGV0cmFwX2lycTsJCQlcCi0JIG9yCSVnNywgJWxvKDFmLTQpLCAlZzc7CQkJXAotCW5vcDsJCQkJCQlcCi0Jbm9wOwkJCQkJCVwKLQlub3A7CQkJCQkJXAotCS5zdWJzZWN0aW9uCTI7CQkJCVwKLTE6CWNhbGwJdHJhY2VfaGFyZGlycXNfb2ZmOwkJCVwKLQkgbm9wOwkJCQkJCVwKLQltb3YJbGV2ZWwsICVvMDsJCQkJXAotCWNhbGwJcm91dGluZTsJCQkJXAotCSBhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzE7CQkJXAotCWJhLGEscHQJJXhjYywgcnRyYXBfaXJxOwkJCVwKLQkucHJldmlvdXM7Ci0KLSNlbHNlCi0KLSNkZWZpbmUgVFJBUF9JUlEocm91dGluZSwgbGV2ZWwpCQkJXAotCXJkcHIJJXBpbCwgJWcyOwkJCQlcCi0Jd3JwcgklZzAsIDE1LCAlcGlsOwkJCQlcCi0JYmEscHQJJXhjYywgZXRyYXBfaXJxOwkJCVwKLQkgcmQJJXBjLCAlZzc7CQkJCVwKLQltb3YJbGV2ZWwsICVvMDsJCQkJXAotCWNhbGwJcm91dGluZTsJCQkJXAotCSBhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzE7CQkJXAotCWJhLGEscHQJJXhjYywgcnRyYXBfaXJxOwotCQotI2VuZGlmCi0KLSNkZWZpbmUgVFJBUF9JVkVDIFRSQVBfTk9TQVZFKGRvX2l2ZWMpCi0KLSNkZWZpbmUgQlRSQVAobHZsKSBUUkFQX0FSRyhiYWRfdHJhcCwgbHZsKQotCi0jZGVmaW5lIEJUUkFQVEwxKGx2bCkgVFJBUFRMMV9BUkcoYmFkX3RyYXBfdGwxLCBsdmwpCi0KLSNkZWZpbmUgRkxVU0hfV0lORE9XX1RSQVAJCQkJCQlcCi0JYmEscHQJJXhjYywgZXRyYXA7CQkJCQkJXAotCSByZAklcGMsICVnNzsJCQkJCQlcCi0JZmx1c2h3OwkJCQkJCQkJXAotCWxkeAlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1ROUENdLCAlbDE7CQkJXAotCWFkZAklbDEsIDQsICVsMjsJCQkJCQlcCi0Jc3R4CSVsMSwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UUENdOwkJCVwKLQliYSxwdAkleGNjLCBydHJhcDsJCQkJCQlcCi0JIHN0eAklbDIsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfVE5QQ107Ci0JICAgICAgICAKLSNpZmRlZiBDT05GSUdfS1BST0JFUwotI2RlZmluZSBLUFJPQkVTX1RSQVAobHZsKSBUUkFQX0lSUShrcHJvYmVfdHJhcCwgbHZsKQotI2Vsc2UKLSNkZWZpbmUgS1BST0JFU19UUkFQKGx2bCkgVFJBUF9BUkcoYmFkX3RyYXAsIGx2bCkKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0tHREIKLSNkZWZpbmUgS0dEQl9UUkFQKGx2bCkgVFJBUF9JUlEoa2dkYl90cmFwLCBsdmwpCi0jZWxzZQotI2RlZmluZSBLR0RCX1RSQVAobHZsKSBUUkFQX0FSRyhiYWRfdHJhcCwgbHZsKQotI2VuZGlmCi0KLSNkZWZpbmUgU1VONFZfSVRTQl9NSVNTCQkJCQlcCi0JbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWcyOwkJXAotCWxkeAlbJWcyICsgSFZfRkFVTFRfSV9BRERSX09GRlNFVF0sICVnNDsJXAotCWxkeAlbJWcyICsgSFZfRkFVTFRfSV9DVFhfT0ZGU0VUXSwgJWc1OwlcCi0Jc3JseAklZzQsIDIyLCAlZzY7CQkJCVwKLQliYSxwdAkleGNjLCBzdW40dl9pdHNiX21pc3M7CQkJXAotCSBub3A7CQkJCQkJXAotCW5vcDsJCQkJCQlcCi0Jbm9wOwotCi0jZGVmaW5lIFNVTjRWX0RUU0JfTUlTUwkJCQkJXAotCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnMjsJCVwKLQlsZHgJWyVnMiArIEhWX0ZBVUxUX0RfQUREUl9PRkZTRVRdLCAlZzQ7CVwKLQlsZHgJWyVnMiArIEhWX0ZBVUxUX0RfQ1RYX09GRlNFVF0sICVnNTsJXAotCXNybHgJJWc0LCAyMiwgJWc2OwkJCQlcCi0JYmEscHQJJXhjYywgc3VuNHZfZHRzYl9taXNzOwkJCVwKLQkgbm9wOwkJCQkJCVwKLQlub3A7CQkJCQkJXAotCW5vcDsKLQotLyogQmVmb3JlIHRvdWNoaW5nIHRoZXNlIG1hY3JvcywgeW91IG93ZSBpdCB0byB5b3Vyc2VsZiB0byBnbyBhbmQKLSAqIHNlZSBob3cgYXJjaC9zcGFyYzY0L2tlcm5lbC93aW5maXh1cC5TIHdvcmtzLi4uIC1EYXZlTQotICoKLSAqIEZvciB0aGUgdXNlciBjYXNlcyB3ZSB1c2VkIHRvIHVzZSB0aGUgJWFzaSByZWdpc3RlciwgYnV0Ci0gKiBpdCB0dXJucyBvdXQgdGhhdCB0aGUgIndyIHh4eCwgJWFzaSIgY29zdHMgfjUgY3ljbGVzLCBzbwotICogbm93IHdlIHVzZSBpbW1lZGlhdGUgQVNJIGxvYWRzIGFuZCBzdG9yZXMgaW5zdGVhZC4gIEt1ZG9zCi0gKiB0byBHcmVnIE9udWZlciBmb3IgcG9pbnRpbmcgb3V0IHRoaXMgcGVyZm9ybWFuY2UgYW5vbWFseS4KLSAqCi0gKiBGdXJ0aGVyIG5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlIHRoZSBnMiwgZzQsIGc1LCBhbmQgZzcgYWx0ZXJuYXRlCi0gKiBnbG9iYWxzIGluIHRoZSBzcGlsbCByb3V0aW5lcywgY2hlY2sgb3V0IHRoZSBzYXZlIGluc3RydWN0aW9uIGluCi0gKiBhcmNoL3NwYXJjNjQva2VybmVsL2V0cmFwLlMgdG8gc2VlIHdoYXQgSSBtZWFuIGFib3V0IGcyLCBhbmQKLSAqIGc0L2c1IGFyZSB0aGUgZ2xvYmFscyB3aGljaCBhcmUgcHJlc2VydmVkIGJ5IGV0cmFwIHByb2Nlc3NpbmcKLSAqIGZvciB0aGUgY2FsbGVyIG9mIGl0LiAgVGhlIGc3IHJlZ2lzdGVyIGlzIHRoZSByZXR1cm4gcGMgZm9yCi0gKiBldHJhcC4gIEZpbmFsbHksIGc2IGlzIHRoZSBjdXJyZW50IHRocmVhZCByZWdpc3RlciBzbyB3ZSBjYW5ub3QKLSAqIHVzIGl0IGluIHRoZSBzcGlsbCBoYW5kbGVycyBlaXRoZXIuICBNb3N0IG9mIHRoZXNlIHJ1bGVzIGRvIG5vdAotICogYXBwbHkgdG8gZmlsbCBwcm9jZXNzaW5nLCBvbmx5IGc2IGlzIG5vdCB1c2FibGUuCi0gKi8KLQotLyogTm9ybWFsIGtlcm5lbCBzcGlsbCAqLwotI2RlZmluZSBTUElMTF8wX05PUk1BTAkJCQkJXAotCXN0eAklbDAsIFslc3AgKyBTVEFDS19CSUFTICsgMHgwMF07CQlcCi0Jc3R4CSVsMSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDA4XTsJCVwKLQlzdHgJJWwyLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MTBdOwkJXAotCXN0eAklbDMsIFslc3AgKyBTVEFDS19CSUFTICsgMHgxOF07CQlcCi0Jc3R4CSVsNCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDIwXTsJCVwKLQlzdHgJJWw1LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MjhdOwkJXAotCXN0eAklbDYsIFslc3AgKyBTVEFDS19CSUFTICsgMHgzMF07CQlcCi0Jc3R4CSVsNywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDM4XTsJCVwKLQlzdHgJJWkwLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NDBdOwkJXAotCXN0eAklaTEsIFslc3AgKyBTVEFDS19CSUFTICsgMHg0OF07CQlcCi0Jc3R4CSVpMiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDUwXTsJCVwKLQlzdHgJJWkzLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NThdOwkJXAotCXN0eAklaTQsIFslc3AgKyBTVEFDS19CSUFTICsgMHg2MF07CQlcCi0Jc3R4CSVpNSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDY4XTsJCVwKLQlzdHgJJWk2LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NzBdOwkJXAotCXN0eAklaTcsIFslc3AgKyBTVEFDS19CSUFTICsgMHg3OF07CQlcCi0Jc2F2ZWQ7IHJldHJ5OyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwlcCi0Jbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7Ci0KLSNkZWZpbmUgU1BJTExfMF9OT1JNQUxfRVRSQVAJCQkJXAotZXRyYXBfa2VybmVsX3NwaWxsOgkJCQkJXAotCXN0eAklbDAsIFslc3AgKyBTVEFDS19CSUFTICsgMHgwMF07CQlcCi0Jc3R4CSVsMSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDA4XTsJCVwKLQlzdHgJJWwyLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MTBdOwkJXAotCXN0eAklbDMsIFslc3AgKyBTVEFDS19CSUFTICsgMHgxOF07CQlcCi0Jc3R4CSVsNCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDIwXTsJCVwKLQlzdHgJJWw1LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MjhdOwkJXAotCXN0eAklbDYsIFslc3AgKyBTVEFDS19CSUFTICsgMHgzMF07CQlcCi0Jc3R4CSVsNywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDM4XTsJCVwKLQlzdHgJJWkwLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NDBdOwkJXAotCXN0eAklaTEsIFslc3AgKyBTVEFDS19CSUFTICsgMHg0OF07CQlcCi0Jc3R4CSVpMiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDUwXTsJCVwKLQlzdHgJJWkzLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NThdOwkJXAotCXN0eAklaTQsIFslc3AgKyBTVEFDS19CSUFTICsgMHg2MF07CQlcCi0Jc3R4CSVpNSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDY4XTsJCVwKLQlzdHgJJWk2LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NzBdOwkJXAotCXN0eAklaTcsIFslc3AgKyBTVEFDS19CSUFTICsgMHg3OF07CQlcCi0Jc2F2ZWQ7CQkJCQkJXAotCXN1YgklZzEsIDIsICVnMTsJCQkJXAotCWJhLHB0CSV4Y2MsIGV0cmFwX3NhdmU7CQkJXAotCXdycHIJJWcxLCAlY3dwOwkJCQlcCi0Jbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7CQlcCi0Jbm9wOyBub3A7IG5vcDsgbm9wOwotCi0vKiBOb3JtYWwgNjRiaXQgc3BpbGwgKi8KLSNkZWZpbmUgU1BJTExfMV9HRU5FUklDKEFTSSkJCQkJXAotCWFkZAklc3AsIFNUQUNLX0JJQVMgKyAweDAwLCAlZzE7CQlcCi0Jc3R4YQklbDAsIFslZzEgKyAlZzBdIEFTSTsJCQlcCi0JbW92CTB4MDgsICVnMzsJCQkJXAotCXN0eGEJJWwxLCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAotCXN0eGEJJWwyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0eGEJJWwzLCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAotCXN0eGEJJWw0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0eGEJJWw1LCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAotCXN0eGEJJWw2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0eGEJJWw3LCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAotCXN0eGEJJWkwLCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0eGEJJWkxLCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAotCXN0eGEJJWkyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0eGEJJWkzLCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAotCXN0eGEJJWk0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0eGEJJWk1LCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MTAsICVnMTsJCQkJXAotCXN0eGEJJWk2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0eGEJJWk3LCBbJWcxICsgJWczXSBBU0k7CQkJXAotCXNhdmVkOwkJCQkJCVwKLQlyZXRyeTsgbm9wOyBub3A7CQkJCVwKLQliLGEscHQJJXhjYywgc3BpbGxfZml4dXBfZGF4OwkJCVwKLQliLGEscHQJJXhjYywgc3BpbGxfZml4dXBfbW5hOwkJCVwKLQliLGEscHQJJXhjYywgc3BpbGxfZml4dXA7Ci0KLSNkZWZpbmUgU1BJTExfMV9HRU5FUklDX0VUUkFQCQkJCVwKLWV0cmFwX3VzZXJfc3BpbGxfNjRiaXQ6CQkJCQlcCi0Jc3R4YQklbDAsIFslc3AgKyBTVEFDS19CSUFTICsgMHgwMF0gJWFzaTsJXAotCXN0eGEJJWwxLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MDhdICVhc2k7CVwKLQlzdHhhCSVsMiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDEwXSAlYXNpOwlcCi0Jc3R4YQklbDMsIFslc3AgKyBTVEFDS19CSUFTICsgMHgxOF0gJWFzaTsJXAotCXN0eGEJJWw0LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MjBdICVhc2k7CVwKLQlzdHhhCSVsNSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDI4XSAlYXNpOwlcCi0Jc3R4YQklbDYsIFslc3AgKyBTVEFDS19CSUFTICsgMHgzMF0gJWFzaTsJXAotCXN0eGEJJWw3LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MzhdICVhc2k7CVwKLQlzdHhhCSVpMCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDQwXSAlYXNpOwlcCi0Jc3R4YQklaTEsIFslc3AgKyBTVEFDS19CSUFTICsgMHg0OF0gJWFzaTsJXAotCXN0eGEJJWkyLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NTBdICVhc2k7CVwKLQlzdHhhCSVpMywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDU4XSAlYXNpOwlcCi0Jc3R4YQklaTQsIFslc3AgKyBTVEFDS19CSUFTICsgMHg2MF0gJWFzaTsJXAotCXN0eGEJJWk1LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NjhdICVhc2k7CVwKLQlzdHhhCSVpNiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDcwXSAlYXNpOwlcCi0Jc3R4YQklaTcsIFslc3AgKyBTVEFDS19CSUFTICsgMHg3OF0gJWFzaTsJXAotCXNhdmVkOwkJCQkJCVwKLQlzdWIJJWcxLCAyLCAlZzE7CQkJCVwKLQliYSxwdAkleGNjLCBldHJhcF9zYXZlOwkJCVwKLQkgd3JwcgklZzEsICVjd3A7CQkJCVwKLQlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCi0Jbm9wOyBub3A7IG5vcDsgbm9wOwkJCQlcCi0JYmEsYSxwdAkleGNjLCBldHJhcF9zcGlsbF9maXh1cF82NGJpdDsJCVwKLQliYSxhLHB0CSV4Y2MsIGV0cmFwX3NwaWxsX2ZpeHVwXzY0Yml0OwkJXAotCWJhLGEscHQJJXhjYywgZXRyYXBfc3BpbGxfZml4dXBfNjRiaXQ7Ci0KLSNkZWZpbmUgU1BJTExfMV9HRU5FUklDX0VUUkFQX0ZJWFVQCQkJXAotZXRyYXBfc3BpbGxfZml4dXBfNjRiaXQ6CQkJCVwKLQlsZHViCVslZzYgKyBUSV9XU0FWRURdLCAlZzE7CQkJXAotCXNsbAklZzEsIDMsICVnMzsJCQkJXAotCWFkZAklZzYsICVnMywgJWczOwkJCQlcCi0Jc3R4CSVzcCwgWyVnMyArIFRJX1JXSU5fU1BUUlNdOwkJXAotCXNsbAklZzEsIDcsICVnMzsJCQkJXAotCWFkZAklZzYsICVnMywgJWczOwkJCQlcCi0Jc3R4CSVsMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDAwXTsJXAotCXN0eAklbDEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwOF07CVwKLQlzdHgJJWwyLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MTBdOwlcCi0Jc3R4CSVsMywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDE4XTsJXAotCXN0eAklbDQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyMF07CVwKLQlzdHgJJWw1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjhdOwlcCi0Jc3R4CSVsNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDMwXTsJXAotCXN0eAklbDcsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzOF07CVwKLQlzdHgJJWkwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NDBdOwlcCi0Jc3R4CSVpMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDQ4XTsJXAotCXN0eAklaTIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg1MF07CVwKLQlzdHgJJWkzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NThdOwlcCi0Jc3R4CSVpNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDYwXTsJXAotCXN0eAklaTUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg2OF07CVwKLQlzdHgJJWk2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NzBdOwlcCi0Jc3R4CSVpNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDc4XTsJXAotCWFkZAklZzEsIDEsICVnMTsJCQkJXAotCXN0YgklZzEsIFslZzYgKyBUSV9XU0FWRURdOwkJCVwKLQlzYXZlZDsJCQkJCQlcCi0JcmRwcgklY3dwLCAlZzE7CQkJCVwKLQlzdWIJJWcxLCAyLCAlZzE7CQkJCVwKLQliYSxwdAkleGNjLCBldHJhcF9zYXZlOwkJCVwKLQkgd3JwcgklZzEsICVjd3A7CQkJCVwKLQlub3A7IG5vcDsgbm9wCi0KLS8qIE5vcm1hbCAzMmJpdCBzcGlsbCAqLwotI2RlZmluZSBTUElMTF8yX0dFTkVSSUMoQVNJKQkJCQlcCi0Jc3JsCSVzcCwgMCwgJXNwOwkJCQlcCi0Jc3R3YQklbDAsIFslc3AgKyAlZzBdIEFTSTsJCQlcCi0JbW92CTB4MDQsICVnMzsJCQkJXAotCXN0d2EJJWwxLCBbJXNwICsgJWczXSBBU0k7CQkJXAotCWFkZAklc3AsIDB4MDgsICVnMTsJCQkJXAotCXN0d2EJJWwyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0d2EJJWwzLCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAotCXN0d2EJJWw0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0d2EJJWw1LCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAotCXN0d2EJJWw2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0d2EJJWw3LCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAotCXN0d2EJJWkwLCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0d2EJJWkxLCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAotCXN0d2EJJWkyLCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0d2EJJWkzLCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAotCXN0d2EJJWk0LCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0d2EJJWk1LCBbJWcxICsgJWczXSBBU0k7CQkJXAotCWFkZAklZzEsIDB4MDgsICVnMTsJCQkJXAotCXN0d2EJJWk2LCBbJWcxICsgJWcwXSBBU0k7CQkJXAotCXN0d2EJJWk3LCBbJWcxICsgJWczXSBBU0k7CQkJXAotCXNhdmVkOwkJCQkJCVwKLSAgICAgICAgcmV0cnk7IG5vcDsgbm9wOwkJCQlcCi0JYixhLHB0CSV4Y2MsIHNwaWxsX2ZpeHVwX2RheDsJCQlcCi0JYixhLHB0CSV4Y2MsIHNwaWxsX2ZpeHVwX21uYTsJCQlcCi0JYixhLHB0CSV4Y2MsIHNwaWxsX2ZpeHVwOwotCi0jZGVmaW5lIFNQSUxMXzJfR0VORVJJQ19FVFJBUAkJXAotZXRyYXBfdXNlcl9zcGlsbF8zMmJpdDoJCQlcCi0Jc3JsCSVzcCwgMCwgJXNwOwkJXAotCXN0d2EJJWwwLCBbJXNwICsgMHgwMF0gJWFzaTsJXAotCXN0d2EJJWwxLCBbJXNwICsgMHgwNF0gJWFzaTsJXAotCXN0d2EJJWwyLCBbJXNwICsgMHgwOF0gJWFzaTsJXAotCXN0d2EJJWwzLCBbJXNwICsgMHgwY10gJWFzaTsJXAotCXN0d2EJJWw0LCBbJXNwICsgMHgxMF0gJWFzaTsJXAotCXN0d2EJJWw1LCBbJXNwICsgMHgxNF0gJWFzaTsJXAotCXN0d2EJJWw2LCBbJXNwICsgMHgxOF0gJWFzaTsJXAotCXN0d2EJJWw3LCBbJXNwICsgMHgxY10gJWFzaTsJXAotCXN0d2EJJWkwLCBbJXNwICsgMHgyMF0gJWFzaTsJXAotCXN0d2EJJWkxLCBbJXNwICsgMHgyNF0gJWFzaTsJXAotCXN0d2EJJWkyLCBbJXNwICsgMHgyOF0gJWFzaTsJXAotCXN0d2EJJWkzLCBbJXNwICsgMHgyY10gJWFzaTsJXAotCXN0d2EJJWk0LCBbJXNwICsgMHgzMF0gJWFzaTsJXAotCXN0d2EJJWk1LCBbJXNwICsgMHgzNF0gJWFzaTsJXAotCXN0d2EJJWk2LCBbJXNwICsgMHgzOF0gJWFzaTsJXAotCXN0d2EJJWk3LCBbJXNwICsgMHgzY10gJWFzaTsJXAotCXNhdmVkOwkJCQlcCi0Jc3ViCSVnMSwgMiwgJWcxOwkJXAotCWJhLHB0CSV4Y2MsIGV0cmFwX3NhdmU7CVwKLQkgd3JwcgklZzEsICVjd3A7CQlcCi0Jbm9wOyBub3A7IG5vcDsgbm9wOwkJXAotCW5vcDsgbm9wOyBub3A7IG5vcDsJCVwKLQliYSxhLHB0CSV4Y2MsIGV0cmFwX3NwaWxsX2ZpeHVwXzMyYml0OyBcCi0JYmEsYSxwdAkleGNjLCBldHJhcF9zcGlsbF9maXh1cF8zMmJpdDsgXAotCWJhLGEscHQJJXhjYywgZXRyYXBfc3BpbGxfZml4dXBfMzJiaXQ7Ci0KLSNkZWZpbmUgU1BJTExfMl9HRU5FUklDX0VUUkFQX0ZJWFVQCQkJXAotZXRyYXBfc3BpbGxfZml4dXBfMzJiaXQ6CQkJCVwKLQlsZHViCVslZzYgKyBUSV9XU0FWRURdLCAlZzE7CQkJXAotCXNsbAklZzEsIDMsICVnMzsJCQkJXAotCWFkZAklZzYsICVnMywgJWczOwkJCQlcCi0Jc3R4CSVzcCwgWyVnMyArIFRJX1JXSU5fU1BUUlNdOwkJXAotCXNsbAklZzEsIDcsICVnMzsJCQkJXAotCWFkZAklZzYsICVnMywgJWczOwkJCQlcCi0Jc3R3CSVsMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDAwXTsJXAotCXN0dwklbDEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwNF07CVwKLQlzdHcJJWwyLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MDhdOwlcCi0Jc3R3CSVsMywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDBjXTsJXAotCXN0dwklbDQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxMF07CVwKLQlzdHcJJWw1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MTRdOwlcCi0Jc3R3CSVsNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDE4XTsJXAotCXN0dwklbDcsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxY107CVwKLQlzdHcJJWkwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjBdOwlcCi0Jc3R3CSVpMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDI0XTsJXAotCXN0dwklaTIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyOF07CVwKLQlzdHcJJWkzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MmNdOwlcCi0Jc3R3CSVpNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDMwXTsJXAotCXN0dwklaTUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzNF07CVwKLQlzdHcJJWk2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MzhdOwlcCi0Jc3R3CSVpNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDNjXTsJXAotCWFkZAklZzEsIDEsICVnMTsJCQkJXAotCXN0YgklZzEsIFslZzYgKyBUSV9XU0FWRURdOwkJCVwKLQlzYXZlZDsJCQkJCQlcCi0JcmRwcgklY3dwLCAlZzE7CQkJCVwKLQlzdWIJJWcxLCAyLCAlZzE7CQkJCVwKLQliYSxwdAkleGNjLCBldHJhcF9zYXZlOwkJCVwKLQkgd3JwcgklZzEsICVjd3A7CQkJCVwKLQlub3A7IG5vcDsgbm9wCi0KLSNkZWZpbmUgU1BJTExfMV9OT1JNQUwgU1BJTExfMV9HRU5FUklDKEFTSV9BSVVQKQotI2RlZmluZSBTUElMTF8yX05PUk1BTCBTUElMTF8yX0dFTkVSSUMoQVNJX0FJVVApCi0jZGVmaW5lIFNQSUxMXzNfTk9STUFMIFNQSUxMXzBfTk9STUFMCi0jZGVmaW5lIFNQSUxMXzRfTk9STUFMIFNQSUxMXzBfTk9STUFMCi0jZGVmaW5lIFNQSUxMXzVfTk9STUFMIFNQSUxMXzBfTk9STUFMCi0jZGVmaW5lIFNQSUxMXzZfTk9STUFMIFNQSUxMXzBfTk9STUFMCi0jZGVmaW5lIFNQSUxMXzdfTk9STUFMIFNQSUxMXzBfTk9STUFMCi0KLSNkZWZpbmUgU1BJTExfMF9PVEhFUiBTUElMTF8wX05PUk1BTAotI2RlZmluZSBTUElMTF8xX09USEVSIFNQSUxMXzFfR0VORVJJQyhBU0lfQUlVUykKLSNkZWZpbmUgU1BJTExfMl9PVEhFUiBTUElMTF8yX0dFTkVSSUMoQVNJX0FJVVMpCi0jZGVmaW5lIFNQSUxMXzNfT1RIRVIgU1BJTExfM19OT1JNQUwKLSNkZWZpbmUgU1BJTExfNF9PVEhFUiBTUElMTF80X05PUk1BTAotI2RlZmluZSBTUElMTF81X09USEVSIFNQSUxMXzVfTk9STUFMCi0jZGVmaW5lIFNQSUxMXzZfT1RIRVIgU1BJTExfNl9OT1JNQUwKLSNkZWZpbmUgU1BJTExfN19PVEhFUiBTUElMTF83X05PUk1BTAotCi0vKiBOb3JtYWwga2VybmVsIGZpbGwgKi8KLSNkZWZpbmUgRklMTF8wX05PUk1BTAkJCQkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MDBdLCAlbDA7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgwOF0sICVsMTsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDEwXSwgJWwyOwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MThdLCAlbDM7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgyMF0sICVsNDsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDI4XSwgJWw1OwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MzBdLCAlbDY7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgzOF0sICVsNzsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDQwXSwgJWkwOwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NDhdLCAlaTE7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg1MF0sICVpMjsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDU4XSwgJWkzOwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NjBdLCAlaTQ7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg2OF0sICVpNTsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDcwXSwgJWk2OwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NzhdLCAlaTc7CQlcCi0JcmVzdG9yZWQ7IHJldHJ5OyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwlcCi0Jbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7Ci0KLSNkZWZpbmUgRklMTF8wX05PUk1BTF9SVFJBUAkJCQlcCi1rZXJuX3J0dF9maWxsOgkJCQkJCVwKLQlyZHByCSVjd3AsICVnMTsJCQkJXAotCXN1YgklZzEsIDEsICVnMTsJCQkJXAotCXdycHIJJWcxLCAlY3dwOwkJCQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgwMF0sICVsMDsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDA4XSwgJWwxOwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MTBdLCAlbDI7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgxOF0sICVsMzsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDIwXSwgJWw0OwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MjhdLCAlbDU7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgzMF0sICVsNjsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDM4XSwgJWw3OwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NDBdLCAlaTA7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg0OF0sICVpMTsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDUwXSwgJWkyOwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NThdLCAlaTM7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg2MF0sICVpNDsJCVwKLQlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDY4XSwgJWk1OwkJXAotCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NzBdLCAlaTY7CQlcCi0JbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg3OF0sICVpNzsJCVwKLQlyZXN0b3JlZDsJCQkJCVwKLQlhZGQJJWcxLCAxLCAlZzE7CQkJCVwKLQliYSxwdAkleGNjLCBrZXJuX3J0dF9yZXN0b3JlOwkJCVwKLQkgd3JwcgklZzEsICVjd3A7CQkJCVwKLQlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCi0Jbm9wOyBub3A7IG5vcDsgbm9wOwotCi0KLS8qIE5vcm1hbCA2NGJpdCBmaWxsICovCi0jZGVmaW5lIEZJTExfMV9HRU5FUklDKEFTSSkJCQkJXAotCWFkZAklc3AsIFNUQUNLX0JJQVMgKyAweDAwLCAlZzE7CQlcCi0JbGR4YQlbJWcxICsgJWcwXSBBU0ksICVsMDsJCQlcCi0JbW92CTB4MDgsICVnMjsJCQkJXAotCW1vdgkweDEwLCAlZzM7CQkJCVwKLQlsZHhhCVslZzEgKyAlZzJdIEFTSSwgJWwxOwkJCVwKLQltb3YJMHgxOCwgJWc1OwkJCQlcCi0JbGR4YQlbJWcxICsgJWczXSBBU0ksICVsMjsJCQlcCi0JbGR4YQlbJWcxICsgJWc1XSBBU0ksICVsMzsJCQlcCi0JYWRkCSVnMSwgMHgyMCwgJWcxOwkJCQlcCi0JbGR4YQlbJWcxICsgJWcwXSBBU0ksICVsNDsJCQlcCi0JbGR4YQlbJWcxICsgJWcyXSBBU0ksICVsNTsJCQlcCi0JbGR4YQlbJWcxICsgJWczXSBBU0ksICVsNjsJCQlcCi0JbGR4YQlbJWcxICsgJWc1XSBBU0ksICVsNzsJCQlcCi0JYWRkCSVnMSwgMHgyMCwgJWcxOwkJCQlcCi0JbGR4YQlbJWcxICsgJWcwXSBBU0ksICVpMDsJCQlcCi0JbGR4YQlbJWcxICsgJWcyXSBBU0ksICVpMTsJCQlcCi0JbGR4YQlbJWcxICsgJWczXSBBU0ksICVpMjsJCQlcCi0JbGR4YQlbJWcxICsgJWc1XSBBU0ksICVpMzsJCQlcCi0JYWRkCSVnMSwgMHgyMCwgJWcxOwkJCQlcCi0JbGR4YQlbJWcxICsgJWcwXSBBU0ksICVpNDsJCQlcCi0JbGR4YQlbJWcxICsgJWcyXSBBU0ksICVpNTsJCQlcCi0JbGR4YQlbJWcxICsgJWczXSBBU0ksICVpNjsJCQlcCi0JbGR4YQlbJWcxICsgJWc1XSBBU0ksICVpNzsJCQlcCi0JcmVzdG9yZWQ7CQkJCQlcCi0JcmV0cnk7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCi0JYixhLHB0CSV4Y2MsIGZpbGxfZml4dXBfZGF4OwkJCVwKLQliLGEscHQJJXhjYywgZmlsbF9maXh1cF9tbmE7CQkJXAotCWIsYSxwdAkleGNjLCBmaWxsX2ZpeHVwOwotCi0jZGVmaW5lIEZJTExfMV9HRU5FUklDX1JUUkFQCQkJCVwKLXVzZXJfcnR0X2ZpbGxfNjRiaXQ6CQkJCQlcCi0JbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4MDBdICVhc2ksICVsMDsJXAotCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDA4XSAlYXNpLCAlbDE7CVwKLQlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHgxMF0gJWFzaSwgJWwyOwlcCi0JbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4MThdICVhc2ksICVsMzsJXAotCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDIwXSAlYXNpLCAlbDQ7CVwKLQlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHgyOF0gJWFzaSwgJWw1OwlcCi0JbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4MzBdICVhc2ksICVsNjsJXAotCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDM4XSAlYXNpLCAlbDc7CVwKLQlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHg0MF0gJWFzaSwgJWkwOwlcCi0JbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4NDhdICVhc2ksICVpMTsJXAotCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDUwXSAlYXNpLCAlaTI7CVwKLQlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHg1OF0gJWFzaSwgJWkzOwlcCi0JbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4NjBdICVhc2ksICVpNDsJXAotCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDY4XSAlYXNpLCAlaTU7CVwKLQlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHg3MF0gJWFzaSwgJWk2OwlcCi0JbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4NzhdICVhc2ksICVpNzsJXAotCWJhLHB0CSV4Y2MsIHVzZXJfcnR0X3ByZV9yZXN0b3JlOwkJXAotCSByZXN0b3JlZDsJCQkJCVwKLQlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwkJCVwKLQlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCi0JYmEsYSxwdAkleGNjLCB1c2VyX3J0dF9maWxsX2ZpeHVwOwkJXAotCWJhLGEscHQJJXhjYywgdXNlcl9ydHRfZmlsbF9maXh1cDsJCVwKLQliYSxhLHB0CSV4Y2MsIHVzZXJfcnR0X2ZpbGxfZml4dXA7Ci0KLQotLyogTm9ybWFsIDMyYml0IGZpbGwgKi8KLSNkZWZpbmUgRklMTF8yX0dFTkVSSUMoQVNJKQkJCQlcCi0Jc3JsCSVzcCwgMCwgJXNwOwkJCQlcCi0JbGR1d2EJWyVzcCArICVnMF0gQVNJLCAlbDA7CQkJXAotCW1vdgkweDA0LCAlZzI7CQkJCVwKLQltb3YJMHgwOCwgJWczOwkJCQlcCi0JbGR1d2EJWyVzcCArICVnMl0gQVNJLCAlbDE7CQkJXAotCW1vdgkweDBjLCAlZzU7CQkJCVwKLQlsZHV3YQlbJXNwICsgJWczXSBBU0ksICVsMjsJCQlcCi0JbGR1d2EJWyVzcCArICVnNV0gQVNJLCAlbDM7CQkJXAotCWFkZAklc3AsIDB4MTAsICVnMTsJCQkJXAotCWxkdXdhCVslZzEgKyAlZzBdIEFTSSwgJWw0OwkJCVwKLQlsZHV3YQlbJWcxICsgJWcyXSBBU0ksICVsNTsJCQlcCi0JbGR1d2EJWyVnMSArICVnM10gQVNJLCAlbDY7CQkJXAotCWxkdXdhCVslZzEgKyAlZzVdIEFTSSwgJWw3OwkJCVwKLQlhZGQJJWcxLCAweDEwLCAlZzE7CQkJCVwKLQlsZHV3YQlbJWcxICsgJWcwXSBBU0ksICVpMDsJCQlcCi0JbGR1d2EJWyVnMSArICVnMl0gQVNJLCAlaTE7CQkJXAotCWxkdXdhCVslZzEgKyAlZzNdIEFTSSwgJWkyOwkJCVwKLQlsZHV3YQlbJWcxICsgJWc1XSBBU0ksICVpMzsJCQlcCi0JYWRkCSVnMSwgMHgxMCwgJWcxOwkJCQlcCi0JbGR1d2EJWyVnMSArICVnMF0gQVNJLCAlaTQ7CQkJXAotCWxkdXdhCVslZzEgKyAlZzJdIEFTSSwgJWk1OwkJCVwKLQlsZHV3YQlbJWcxICsgJWczXSBBU0ksICVpNjsJCQlcCi0JbGR1d2EJWyVnMSArICVnNV0gQVNJLCAlaTc7CQkJXAotCXJlc3RvcmVkOwkJCQkJXAotCXJldHJ5OyBub3A7IG5vcDsgbm9wOyBub3A7CQkJXAotCWIsYSxwdAkleGNjLCBmaWxsX2ZpeHVwX2RheDsJCQlcCi0JYixhLHB0CSV4Y2MsIGZpbGxfZml4dXBfbW5hOwkJCVwKLQliLGEscHQJJXhjYywgZmlsbF9maXh1cDsKLQotI2RlZmluZSBGSUxMXzJfR0VORVJJQ19SVFJBUAkJCQlcCi11c2VyX3J0dF9maWxsXzMyYml0OgkJCQkJXAotCXNybAklc3AsIDAsICVzcDsJCQkJXAotCWxkdXdhCVslc3AgKyAweDAwXSAlYXNpLCAlbDA7CQkJXAotCWxkdXdhCVslc3AgKyAweDA0XSAlYXNpLCAlbDE7CQkJXAotCWxkdXdhCVslc3AgKyAweDA4XSAlYXNpLCAlbDI7CQkJXAotCWxkdXdhCVslc3AgKyAweDBjXSAlYXNpLCAlbDM7CQkJXAotCWxkdXdhCVslc3AgKyAweDEwXSAlYXNpLCAlbDQ7CQkJXAotCWxkdXdhCVslc3AgKyAweDE0XSAlYXNpLCAlbDU7CQkJXAotCWxkdXdhCVslc3AgKyAweDE4XSAlYXNpLCAlbDY7CQkJXAotCWxkdXdhCVslc3AgKyAweDFjXSAlYXNpLCAlbDc7CQkJXAotCWxkdXdhCVslc3AgKyAweDIwXSAlYXNpLCAlaTA7CQkJXAotCWxkdXdhCVslc3AgKyAweDI0XSAlYXNpLCAlaTE7CQkJXAotCWxkdXdhCVslc3AgKyAweDI4XSAlYXNpLCAlaTI7CQkJXAotCWxkdXdhCVslc3AgKyAweDJjXSAlYXNpLCAlaTM7CQkJXAotCWxkdXdhCVslc3AgKyAweDMwXSAlYXNpLCAlaTQ7CQkJXAotCWxkdXdhCVslc3AgKyAweDM0XSAlYXNpLCAlaTU7CQkJXAotCWxkdXdhCVslc3AgKyAweDM4XSAlYXNpLCAlaTY7CQkJXAotCWxkdXdhCVslc3AgKyAweDNjXSAlYXNpLCAlaTc7CQkJXAotCWJhLHB0CSV4Y2MsIHVzZXJfcnR0X3ByZV9yZXN0b3JlOwkJXAotCSByZXN0b3JlZDsJCQkJCVwKLQlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCi0Jbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7CQkJXAotCWJhLGEscHQJJXhjYywgdXNlcl9ydHRfZmlsbF9maXh1cDsJCVwKLQliYSxhLHB0CSV4Y2MsIHVzZXJfcnR0X2ZpbGxfZml4dXA7CQlcCi0JYmEsYSxwdAkleGNjLCB1c2VyX3J0dF9maWxsX2ZpeHVwOwotCQkKLQotI2RlZmluZSBGSUxMXzFfTk9STUFMIEZJTExfMV9HRU5FUklDKEFTSV9BSVVQKQotI2RlZmluZSBGSUxMXzJfTk9STUFMIEZJTExfMl9HRU5FUklDKEFTSV9BSVVQKQotI2RlZmluZSBGSUxMXzNfTk9STUFMIEZJTExfMF9OT1JNQUwKLSNkZWZpbmUgRklMTF80X05PUk1BTCBGSUxMXzBfTk9STUFMCi0jZGVmaW5lIEZJTExfNV9OT1JNQUwgRklMTF8wX05PUk1BTAotI2RlZmluZSBGSUxMXzZfTk9STUFMIEZJTExfMF9OT1JNQUwKLSNkZWZpbmUgRklMTF83X05PUk1BTCBGSUxMXzBfTk9STUFMCi0KLSNkZWZpbmUgRklMTF8wX09USEVSIEZJTExfMF9OT1JNQUwKLSNkZWZpbmUgRklMTF8xX09USEVSIEZJTExfMV9HRU5FUklDKEFTSV9BSVVTKQotI2RlZmluZSBGSUxMXzJfT1RIRVIgRklMTF8yX0dFTkVSSUMoQVNJX0FJVVMpCi0jZGVmaW5lIEZJTExfM19PVEhFUiBGSUxMXzNfTk9STUFMCi0jZGVmaW5lIEZJTExfNF9PVEhFUiBGSUxMXzRfTk9STUFMCi0jZGVmaW5lIEZJTExfNV9PVEhFUiBGSUxMXzVfTk9STUFMCi0jZGVmaW5lIEZJTExfNl9PVEhFUiBGSUxMXzZfTk9STUFMCi0jZGVmaW5lIEZJTExfN19PVEhFUiBGSUxMXzdfTk9STUFMCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X1RUQUJMRV9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy90dGFibGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHlwZXMuaAppbmRleCBiMjdjY2M4Li5jZmJmYWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90eXBlcy5oCkBAIC0xLDM0ICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1RZUEVTX0gKLSNkZWZpbmUgX1NQQVJDNjRfVFlQRVNfSAotCi0vKgotICogVGhpcyBmaWxlIGlzIG5ldmVyIGluY2x1ZGVkIGJ5IGFwcGxpY2F0aW9uIHNvZnR3YXJlIHVubGVzcwotICogZXhwbGljaXRseSByZXF1ZXN0ZWQgKGUuZy4sIHZpYSBsaW51eC90eXBlcy5oKSBpbiB3aGljaCBjYXNlIHRoZQotICogYXBwbGljYXRpb24gaXMgTGludXggc3BlY2lmaWMgc28gKHVzZXItKSBuYW1lIHNwYWNlIHBvbGx1dGlvbiBpcwotICogbm90IGEgbWFqb3IgaXNzdWUuICBIb3dldmVyLCBmb3IgaW50ZXJvcGVyYWJpbGl0eSwgbGlicmFyaWVzIHN0aWxsCi0gKiBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gYXZvaWQgYSBuYW1lIGNsYXNoZXMuCi0gKi8KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbDY0Lmg+Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jZGVmaW5lIEJJVFNfUEVSX0xPTkcgNjQKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogRG1hIGFkZHJlc3NlcyBjb21lIGluIGdlbmVyaWMgYW5kIDY0LWJpdCBmbGF2b3Vycy4gICovCi0KLXR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Ci10eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIGRlZmluZWQoX1NQQVJDNjRfVFlQRVNfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91YWNjZXNzLmgKaW5kZXggNWZjYmFmNi4uMjg3MmQyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91YWNjZXNzLmgKQEAgLTEsMjczICsxIEBACi0jaWZuZGVmIF9BU01fVUFDQ0VTU19ICi0jZGVmaW5lIF9BU01fVUFDQ0VTU19ICi0KLS8qCi0gKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCi0gKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL2FzaS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy91YWNjZXNzLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyoKLSAqIFNwYXJjNjQgaXMgc2VnbWVudGVkLCB0aG91Z2ggbW9yZSBsaWtlIHRoZSBNNjhLIHRoYW4gdGhlIEkzODYuIAotICogV2UgdXNlIHRoZSBzZWNvbmRhcnkgQVNJIHRvIGFkZHJlc3MgdXNlciBtZW1vcnksIHdoaWNoIHJlZmVyZW5jZXMgYQotICogY29tcGxldGVseSBkaWZmZXJlbnQgVk0gbWFwLCB0aHVzIHRoZXJlIGlzIHplcm8gY2hhbmNlIG9mIHRoZSB1c2VyCi0gKiBkb2luZyBzb21ldGhpbmcgcXVlZXIgYW5kIHRyaWNraW5nIHVzIGludG8gcG9raW5nIGtlcm5lbCBtZW1vcnkuCi0gKgotICogV2hhdCBpcyBsZWZ0IGhlcmUgaXMgYmFzaWNhbGx5IHdoYXQgaXMgbmVlZGVkIGZvciB0aGUgb3RoZXIgcGFydHMgb2YKLSAqIHRoZSBrZXJuZWwgdGhhdCBleHBlY3QgdG8gYmUgYWJsZSB0byBtYW5pcHVsYXRlLCBlcnVtLCAic2VnbWVudHMiLgotICogT3IgcGVyaGFwcyBtb3JlIHByb3Blcmx5LCBwZXJtaXNzaW9ucy4KLSAqCi0gKiAiRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLiIgLUxpbnVzCi0gKi8KLQotI2RlZmluZSBLRVJORUxfRFMgICAoKG1tX3NlZ21lbnRfdCkgeyBBU0lfUCB9KQotI2RlZmluZSBVU0VSX0RTICAgICAoKG1tX3NlZ21lbnRfdCkgeyBBU0lfQUlVUyB9KQkvKiBoYXIgaGFyIGhhciAqLwotCi0jZGVmaW5lIFZFUklGWV9SRUFECTAKLSNkZWZpbmUgVkVSSUZZX1dSSVRFCTEKLQotI2RlZmluZSBnZXRfZnMoKSAoKG1tX3NlZ21lbnRfdCkgeyBnZXRfdGhyZWFkX2N1cnJlbnRfZHMoKSB9KQotI2RlZmluZSBnZXRfZHMoKSAoS0VSTkVMX0RTKQotCi0jZGVmaW5lIHNlZ21lbnRfZXEoYSxiKSAgKChhKS5zZWcgPT0gKGIpLnNlZykKLQotI2RlZmluZSBzZXRfZnModmFsKQkJCQkJCQkJXAotZG8gewkJCQkJCQkJCQlcCi0Jc2V0X3RocmVhZF9jdXJyZW50X2RzKCh2YWwpLnNlZyk7CQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ3ciAlJWcwLCAlMCwgJSVhc2kiIDogOiAiciIgKCh2YWwpLnNlZykpOwlcCi19IHdoaWxlKDApCi0KLXN0YXRpYyBpbmxpbmUgaW50IF9fYWNjZXNzX29rKGNvbnN0IHZvaWQgX191c2VyICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhY2Nlc3Nfb2soaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybiAxOwotfQotCi0vKgotICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKLSAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcwotICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQotICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0Ci0gKiB3aGF0IHRvIGRvLgotICoKLSAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQotICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKLSAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKLSAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KLSAqLwotCi1zdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5IHsKLSAgICAgICAgdW5zaWduZWQgaW50IGluc24sIGZpeHVwOwotfTsKLQotZXh0ZXJuIHZvaWQgX19yZXRfZWZhdWx0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX19yZXRsX2VmYXVsdCh2b2lkKTsKLQotLyogVWgsIHRoZXNlIHNob3VsZCBiZWNvbWUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLi4KLSAqIFRoZXkgYXV0b21hdGljYWxseSB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodAotICogcG9pbnRlciB0eXBlLi4KLSAqCi0gKiBUaGlzIGdldHMga2luZCBvZiB1Z2x5LiBXZSB3YW50IHRvIHJldHVybiBfdHdvXyB2YWx1ZXMgaW4gImdldF91c2VyKCkiCi0gKiBhbmQgeWV0IHdlIGRvbid0IHdhbnQgdG8gZG8gYW55IHBvaW50ZXJzLCBiZWNhdXNlIHRoYXQgaXMgdG9vIG11Y2gKLSAqIG9mIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaHVzIHdlIGhhdmUgYSBmZXcgcmF0aGVyIHVnbHkgbWFjcm9zIGhlcmUsCi0gKiBhbmQgaGlkZSBhbGwgdGhlIHVnbGluZXNzIGZyb20gdGhlIHVzZXIuCi0gKi8KLSNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpICh7IFwKLXVuc2lnbmVkIGxvbmcgX19wdV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7IFwKLV9fY2hrX3VzZXJfcHRyKHB0cik7IFwKLV9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSxfX3B1X2FkZHIsc2l6ZW9mKCoocHRyKSkpOyB9KQotCi0jZGVmaW5lIGdldF91c2VyKHgscHRyKSAoeyBcCi11bnNpZ25lZCBsb25nIF9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKShwdHIpOyBcCi1fX2Noa191c2VyX3B0cihwdHIpOyBcCi1fX2dldF91c2VyX25vY2hlY2soKHgpLF9fZ3VfYWRkcixzaXplb2YoKihwdHIpKSxfX3R5cGVvZl9fKCoocHRyKSkpOyB9KQotCi0jZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIHB1dF91c2VyKHgscHRyKQotI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSBnZXRfdXNlcih4LHB0cikKLQotc3RydWN0IF9fbGFyZ2Vfc3RydWN0IHsgdW5zaWduZWQgbG9uZyBidWZbMTAwXTsgfTsKLSNkZWZpbmUgX19tKHgpICgoc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKHgpKQotCi0jZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayhkYXRhLGFkZHIsc2l6ZSkgKHsgXAotcmVnaXN0ZXIgaW50IF9fcHVfcmV0OyBcCi1zd2l0Y2ggKHNpemUpIHsgXAotY2FzZSAxOiBfX3B1dF91c2VyX2FzbShkYXRhLGIsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCi1jYXNlIDI6IF9fcHV0X3VzZXJfYXNtKGRhdGEsaCxhZGRyLF9fcHVfcmV0KTsgYnJlYWs7IFwKLWNhc2UgNDogX19wdXRfdXNlcl9hc20oZGF0YSx3LGFkZHIsX19wdV9yZXQpOyBicmVhazsgXAotY2FzZSA4OiBfX3B1dF91c2VyX2FzbShkYXRhLHgsYWRkcixfX3B1X3JldCk7IGJyZWFrOyBcCi1kZWZhdWx0OiBfX3B1X3JldCA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOyBcCi19IF9fcHVfcmV0OyB9KQotCi0jZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsc2l6ZSxhZGRyLHJldCkJCQkJCVwKLV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCi0JIi8qIFB1dCB1c2VyIGFzbSwgaW5saW5lLiAqL1xuIgkJCQkJXAotIjE6XHQiCSJzdCIjc2l6ZSAiYSAlMSwgWyUyXSAlJWFzaVxuXHQiCQkJCVwKLQkiY2xyCSUwXG4iCQkJCQkJCVwKLSIyOlxuXG5cdCIJCQkJCQkJCVwKLQkiLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG5cdCIJCQkJXAotCSIuYWxpZ24JNFxuIgkJCQkJCQlcCi0iMzpcblx0IgkJCQkJCQkJXAotCSJzZXRoaQklJWhpKDJiKSwgJTBcblx0IgkJCQkJXAotCSJqbXBsCSUwICsgJSVsbygyYiksICUlZzBcblx0IgkJCQlcCi0JIiBtb3YJJTMsICUwXG5cblx0IgkJCQkJCVwKLQkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAotCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG5cdCIJCQkJCVwKLQkiLmFsaWduCTRcblx0IgkJCQkJCQlcCi0JIi53b3JkCTFiLCAzYlxuXHQiCQkJCQkJXAotCSIucHJldmlvdXNcblxuXHQiCQkJCQkJXAotICAgICAgIDogIj1yIiAocmV0KSA6ICJyIiAoeCksICJyIiAoX19tKGFkZHIpKSwJCQkJXAotCSAiaSIgKC1FRkFVTFQpKQotCi1leHRlcm4gaW50IF9fcHV0X3VzZXJfYmFkKHZvaWQpOwotCi0jZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayhkYXRhLGFkZHIsc2l6ZSx0eXBlKSAoeyBcCi1yZWdpc3RlciBpbnQgX19ndV9yZXQ7IFwKLXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19ndV92YWw7IFwKLXN3aXRjaCAoc2l6ZSkgeyBcCi1jYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHViLGFkZHIsX19ndV9yZXQpOyBicmVhazsgXAotY2FzZSAyOiBfX2dldF91c2VyX2FzbShfX2d1X3ZhbCx1aCxhZGRyLF9fZ3VfcmV0KTsgYnJlYWs7IFwKLWNhc2UgNDogX19nZXRfdXNlcl9hc20oX19ndV92YWwsdXcsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCi1jYXNlIDg6IF9fZ2V0X3VzZXJfYXNtKF9fZ3VfdmFsLHgsYWRkcixfX2d1X3JldCk7IGJyZWFrOyBcCi1kZWZhdWx0OiBfX2d1X3ZhbCA9IDA7IF9fZ3VfcmV0ID0gX19nZXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKLX0gZGF0YSA9ICh0eXBlKSBfX2d1X3ZhbDsgX19ndV9yZXQ7IH0pCi0KLSNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrX3JldChkYXRhLGFkZHIsc2l6ZSx0eXBlLHJldHZhbCkgKHsgXAotcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbCBfX2FzbV9fICgibDEiKTsgXAotc3dpdGNoIChzaXplKSB7IFwKLWNhc2UgMTogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHViLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKLWNhc2UgMjogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHVoLGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKLWNhc2UgNDogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHV3LGFkZHIscmV0dmFsKTsgYnJlYWs7IFwKLWNhc2UgODogX19nZXRfdXNlcl9hc21fcmV0KF9fZ3VfdmFsLHgsYWRkcixyZXR2YWwpOyBicmVhazsgXAotZGVmYXVsdDogaWYgKF9fZ2V0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IFwKLX0gZGF0YSA9ICh0eXBlKSBfX2d1X3ZhbDsgfSkKLQotI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LHNpemUsYWRkcixyZXQpCQkJCQlcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAotCSIvKiBHZXQgdXNlciBhc20sIGlubGluZS4gKi9cbiIJCQkJCVwKLSIxOlx0IgkibGQiI3NpemUgImEgWyUyXSAlJWFzaSwgJTFcblx0IgkJCQlcCi0JImNscgklMFxuIgkJCQkJCQlcCi0iMjpcblxuXHQiCQkJCQkJCQlcCi0JIi5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0clxuXHQiCQkJCVwKLQkiLmFsaWduCTRcbiIJCQkJCQkJXAotIjM6XG5cdCIJCQkJCQkJCVwKLQkic2V0aGkJJSVoaSgyYiksICUwXG5cdCIJCQkJCVwKLQkiY2xyCSUxXG5cdCIJCQkJCQkJXAotCSJqbXBsCSUwICsgJSVsbygyYiksICUlZzBcblx0IgkJCQlcCi0JIiBtb3YJJTMsICUwXG5cblx0IgkJCQkJCVwKLQkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAotCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG5cdCIJCQkJCVwKLQkiLmFsaWduCTRcblx0IgkJCQkJCQlcCi0JIi53b3JkCTFiLCAzYlxuXG5cdCIJCQkJCQlcCi0JIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKLSAgICAgICA6ICI9ciIgKHJldCksICI9ciIgKHgpIDogInIiIChfX20oYWRkcikpLAkJCVwKLQkgImkiICgtRUZBVUxUKSkKLQotI2RlZmluZSBfX2dldF91c2VyX2FzbV9yZXQoeCxzaXplLGFkZHIscmV0dmFsKQkJCQlcCi1pZiAoX19idWlsdGluX2NvbnN0YW50X3AocmV0dmFsKSAmJiByZXR2YWwgPT0gLUVGQVVMVCkJCQlcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAotCSIvKiBHZXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKLSIxOlx0IgkibGQiI3NpemUgImEgWyUxXSAlJWFzaSwgJTBcblxuXHQiCQkJCVwKLQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuXHQiCQkJCQlcCi0JIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAotCSIud29yZAkxYixfX3JldF9lZmF1bHRcblxuXHQiCQkJCQlcCi0JIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKLSAgICAgICA6ICI9ciIgKHgpIDogInIiIChfX20oYWRkcikpKTsJCQkJCVwKLWVsc2UJCQkJCQkJCQlcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAotCSIvKiBHZXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKLSIxOlx0IgkibGQiI3NpemUgImEgWyUxXSAlJWFzaSwgJTBcblxuXHQiCQkJCVwKLQkiLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG5cdCIJCQkJXAotCSIuYWxpZ24JNFxuIgkJCQkJCQlcCi0iMzpcblx0IgkJCQkJCQkJXAotCSJyZXRcblx0IgkJCQkJCQlcCi0JIiByZXN0b3JlICUlZzAsICUyLCAlJW8wXG5cblx0IgkJCQkJXAotCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCi0JIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcblx0IgkJCQkJXAotCSIuYWxpZ24JNFxuXHQiCQkJCQkJCVwKLQkiLndvcmQJMWIsIDNiXG5cblx0IgkJCQkJCVwKLQkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAotICAgICAgIDogIj1yIiAoeCkgOiAiciIgKF9fbShhZGRyKSksICJpIiAocmV0dmFsKSkKLQotZXh0ZXJuIGludCBfX2dldF91c2VyX2JhZCh2b2lkKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLAotCQkJCQkJICAgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAotCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBjb3B5X2Zyb21fdXNlcl9maXh1cCh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplKTsKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKLWNvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcmV0ID0gX19fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIHNpemUpOwotCi0JaWYgKHVubGlrZWx5KHJldCkpCi0JCXJldCA9IGNvcHlfZnJvbV91c2VyX2ZpeHVwKHRvLCBmcm9tLCBzaXplKTsKLQlyZXR1cm4gcmV0OwotfQotI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyIGNvcHlfZnJvbV91c2VyCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLAotCQkJCQkJICBjb25zdCB2b2lkICpmcm9tLAotCQkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV90b191c2VyX2ZpeHVwKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKLQkJCQkJdW5zaWduZWQgbG9uZyBzaXplKTsKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKLWNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHJldCA9IF9fX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgc2l6ZSk7Ci0KLQlpZiAodW5saWtlbHkocmV0KSkKLQkJcmV0ID0gY29weV90b191c2VyX2ZpeHVwKHRvLCBmcm9tLCBzaXplKTsKLQlyZXR1cm4gcmV0OwotfQotI2RlZmluZSBfX2NvcHlfdG9fdXNlciBjb3B5X3RvX3VzZXIKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fX2NvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqdG8sCi0JCQkJCQkgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAotCQkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29weV9pbl91c2VyX2ZpeHVwKHZvaWQgX191c2VyICp0bywgdm9pZCBfX3VzZXIgKmZyb20sCi0JCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCi1jb3B5X2luX3VzZXIodm9pZCBfX3VzZXIgKnRvLCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcmV0ID0gX19fY29weV9pbl91c2VyKHRvLCBmcm9tLCBzaXplKTsKLQotCWlmICh1bmxpa2VseShyZXQpKQotCQlyZXQgPSBjb3B5X2luX3VzZXJfZml4dXAodG8sIGZyb20sIHNpemUpOwotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIF9fY29weV9pbl91c2VyIGNvcHlfaW5fdXNlcgotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jbGVhcl91c2VyKHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcpOwotCi0jZGVmaW5lIGNsZWFyX3VzZXIgX19jbGVhcl91c2VyCi0KLWV4dGVybiBsb25nIF9fbXVzdF9jaGVjayBfX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpOwotCi0jZGVmaW5lIHN0cm5jcHlfZnJvbV91c2VyIF9fc3RybmNweV9mcm9tX3VzZXIKLQotZXh0ZXJuIGxvbmcgX19zdHJsZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqKTsKLWV4dGVybiBsb25nIF9fc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICosIGxvbmcgbGVuKTsKLQotI2RlZmluZSBzdHJsZW5fdXNlciBfX3N0cmxlbl91c2VyCi0jZGVmaW5lIHN0cm5sZW5fdXNlciBfX3N0cm5sZW5fdXNlcgotI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgotI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKLQotI2VuZGlmICAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9BU01fVUFDQ0VTU19IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdWN0eC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91Y3R4LmgKaW5kZXggZGM5MzdjNy4uOWUxYjU3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC91Y3R4LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91Y3R4LmgKQEAgLTEsNzEgKzEgQEAKLS8qCi0gKiB1Y3R4Lmg6IFNwYXJjNjQge3NldCxnZXR9Y29udGV4dCgpIHJlZ2lzdGVyIHN0YXRlIGxheW91dHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaWZuZGVmIF9fU1BBUkM2NF9VQ1RYX0gKLSNkZWZpbmUgX19TUEFSQzY0X1VDVFhfSAotCi0jZGVmaW5lIE1DX1RTVEFURQkwCi0jZGVmaW5lIE1DX1BDCQkxCi0jZGVmaW5lIE1DX05QQwkJMgotI2RlZmluZSBNQ19ZCQkzCi0jZGVmaW5lIE1DX0cxCQk0Ci0jZGVmaW5lIE1DX0cyCQk1Ci0jZGVmaW5lIE1DX0czCQk2Ci0jZGVmaW5lIE1DX0c0CQk3Ci0jZGVmaW5lIE1DX0c1CQk4Ci0jZGVmaW5lIE1DX0c2CQk5Ci0jZGVmaW5lIE1DX0c3CQkxMAotI2RlZmluZSBNQ19PMAkJMTEKLSNkZWZpbmUgTUNfTzEJCTEyCi0jZGVmaW5lIE1DX08yCQkxMwotI2RlZmluZSBNQ19PMwkJMTQKLSNkZWZpbmUgTUNfTzQJCTE1Ci0jZGVmaW5lIE1DX081CQkxNgotI2RlZmluZSBNQ19PNgkJMTcKLSNkZWZpbmUgTUNfTzcJCTE4Ci0jZGVmaW5lIE1DX05HUkVHCTE5Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBtY19ncmVnX3Q7Ci10eXBlZGVmIG1jX2dyZWdfdCBtY19ncmVnc2V0X3RbTUNfTkdSRUddOwotCi0jZGVmaW5lIE1DX01BWEZQUQkxNgotc3RydWN0IG1jX2ZxIHsKLQl1bnNpZ25lZCBsb25nCSptY2ZxX2FkZHI7Ci0JdW5zaWduZWQgaW50CW1jZnFfaW5zbjsKLX07Ci0KLXN0cnVjdCBtY19mcHUgewotCXVuaW9uIHsKLQkJdW5zaWduZWQgaW50CXNyZWdzWzMyXTsKLQkJdW5zaWduZWQgbG9uZwlkcmVnc1szMl07Ci0JCWxvbmcgZG91YmxlCXFyZWdzWzE2XTsKLQl9IG1jZnB1X2ZyZWdzOwotCXVuc2lnbmVkIGxvbmcJbWNmcHVfZnNyOwotCXVuc2lnbmVkIGxvbmcJbWNmcHVfZnByczsKLQl1bnNpZ25lZCBsb25nCW1jZnB1X2dzcjsKLQlzdHJ1Y3QgbWNfZnEJKm1jZnB1X2ZxOwotCXVuc2lnbmVkIGNoYXIJbWNmcHVfcWNudDsKLQl1bnNpZ25lZCBjaGFyCW1jZnB1X3FlbnRzejsKLQl1bnNpZ25lZCBjaGFyCW1jZnB1X2VuYWI7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgbWNfZnB1IG1jX2ZwdV90OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JbWNfZ3JlZ3NldF90CW1jX2dyZWdzOwotCW1jX2dyZWdfdAltY19mcDsKLQltY19ncmVnX3QJbWNfaTc7Ci0JbWNfZnB1X3QJbWNfZnByZWdzOwotfSBtY29udGV4dF90OwotCi1zdHJ1Y3QgdWNvbnRleHQgewotCXN0cnVjdCB1Y29udGV4dAkJKnVjX2xpbms7Ci0JdW5zaWduZWQgbG9uZwkJdWNfZmxhZ3M7Ci0Jc2lnc2V0X3QJCXVjX3NpZ21hc2s7Ci0JbWNvbnRleHRfdAkJdWNfbWNvbnRleHQ7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgdWNvbnRleHQgdWNvbnRleHRfdDsKLQotI2VuZGlmIC8qIF9fU1BBUkM2NF9VQ1RYX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvdWN0eC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5hbGlnbmVkLmgKaW5kZXggZWRjZWJiMC4uMTlmYmY5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC91bmFsaWduZWQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuYWxpZ25lZC5oCkBAIC0xLDEwICsxIEBACi0jaWZuZGVmIF9BU01fU1BBUkM2NF9VTkFMSUdORURfSAotI2RlZmluZSBfQVNNX1NQQVJDNjRfVU5BTElHTkVEX0gKLQotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9zdHJ1Y3QuaD4KLSNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvbGVfYnl0ZXNoaWZ0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2dlbmVyaWMuaD4KLSNkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKLSNkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfYmUKLQotI2VuZGlmIC8qIF9BU01fU1BBUkM2NF9VTkFMSUdORURfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy91bmFsaWduZWQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCmluZGV4IDEzYmU0NDUuLmFkODZlMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaApAQCAtMSwzNzMgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfVU5JU1REX0gKLSNkZWZpbmUgX1NQQVJDNjRfVU5JU1REX0gKLQotLyoKLSAqIFN5c3RlbSBjYWxscyB1bmRlciB0aGUgU3BhcmMuCi0gKgotICogRG9uJ3QgYmUgc2NhcmVkIGJ5IHRoZSB1Z2x5IGNsb2JiZXJzLCBpdCBpcyB0aGUgb25seSB3YXkgSSBjYW4KLSAqIHRoaW5rIG9mIHJpZ2h0IG5vdyB0byBmb3JjZSB0aGUgYXJndW1lbnRzIGludG8gZml4ZWQgcmVnaXN0ZXJzCi0gKiBiZWZvcmUgdGhlIHRyYXAgaW50byB0aGUgc3lzdGVtIGNhbGwgd2l0aCBnY2MgJ2FzbScgc3RhdGVtZW50cy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQotICoKLSAqIFN1bk9TIGNvbXBhdGliaWxpdHkgYmFzZWQgdXBvbiBwcmVsaW1pbmFyeSB3b3JrIHdoaWNoIGlzOgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBBZHJpYW4gTS4gUm9kcmlndWV6IChhZHJpYW5AcmVtdXMucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAgICAgIDAgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9leGl0ICAgICAgICAgICAgICAgICAxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mb3JrICAgICAgICAgICAgICAgICAyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93cml0ZSAgICAgICAgICAgICAgICA0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9vcGVuICAgICAgICAgICAgICAgICA1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICA2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93YWl0NCAgICAgICAgICAgICAgICA3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jcmVhdCAgICAgICAgICAgICAgICA4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICA5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bmxpbmsgICAgICAgICAgICAgIDEwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9leGVjdiAgICAgICAgICAgICAgIDExIC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgIDEyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaG93bgkJIDEzIC8qIENvbW1vbgkJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9ta25vZCAgICAgICAgICAgICAgIDE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgIDE1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sY2hvd24gICAgICAgICAgICAgIDE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgIDE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wZXJmY3RyICAgICAgICAgICAgIDE4IC8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgb3BlcmF0aW9ucyAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgIDE5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwaWQgICAgICAgICAgICAgIDIwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jYXBnZXQJCSAyMSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwotI2RlZmluZSBfX05SX2NhcHNldAkJIDIyIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfc2V0dWlkICAgICAgICAgICAgICAyMyAvKiBJbXBsZW1lbnRlZCB2aWEgc2V0cmV1aWQgaW4gU3VuT1MgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAyNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdm1zcGxpY2UJICAgICAgICAgMjUgLyogRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KLSNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgIDI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIDI3IC8qIEltcGxlbWVudGVkIHZpYSBzZXRpdGltZXIgaW4gU3VuT1MgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkgMjggLyogQ29tbW9uCQkJCQkgICAqLwotI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgMjkgLyogSXMgc2lnYmxvY2soMCktPnNpZ3BhdXNlKCkgaW4gU3VuT1MgICAgICAgICAqLwotI2RlZmluZSBfX05SX3V0aW1lICAgICAgICAgICAgICAgMzAgLyogSW1wbGVtZW50ZWQgdmlhIHV0aW1lcygpIHVuZGVyIFN1bk9TICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX2xjaG93bjMyICAgICAgICAgMzEgICAgTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX2ZjaG93bjMyICAgICAgICAgMzIgICAgTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2FjY2VzcyAgICAgICAgICAgICAgMzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX25pY2UgICAgICAgICAgICAgICAgMzQgLyogSW1wbGVtZW50ZWQgdmlhIGdldC9zZXRwcmlvcml0eSgpIGluIFN1bk9TICAqLwotLyogI2RlZmluZSBfX05SX2Nob3duMzIgICAgICAgICAgMzUgICAgTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N5bmMgICAgICAgICAgICAgICAgMzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2tpbGwgICAgICAgICAgICAgICAgMzcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N0YXQgICAgICAgICAgICAgICAgMzggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NlbmRmaWxlCQkgMzkgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9sc3RhdCAgICAgICAgICAgICAgIDQwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9kdXAgICAgICAgICAgICAgICAgIDQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgIDQyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90aW1lcyAgICAgICAgICAgICAgIDQzIC8qIEltcGxlbWVudGVkIHZpYSBnZXRydXNhZ2UoKSBpbiBTdW5PUyAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9nZXR1aWQzMiAgICAgICAgIDQ0ICAgIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgIDQ1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRnaWQgICAgICAgICAgICAgIDQ2IC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZWdpZCgpIGluIFN1bk9TICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRnaWQgICAgICAgICAgICAgIDQ3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWduYWwgICAgICAgICAgICAgIDQ4IC8qIEltcGxlbWVudGVkIHZpYSBzaWd2ZWMoKSBpbiBTdW5PUyAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRldWlkICAgICAgICAgICAgIDQ5IC8qIFN1bk9TIGNhbGxzIGdldHVpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRlZ2lkICAgICAgICAgICAgIDUwIC8qIFN1bk9TIGNhbGxzIGdldGdpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hY2N0ICAgICAgICAgICAgICAgIDUxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tZW1vcnlfb3JkZXJpbmcJIDUyIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCi0vKiAjZGVmaW5lIF9fTlJfZ2V0Z2lkMzIgICAgICAgICA1MyAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfaW9jdGwgICAgICAgICAgICAgICA1NCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcmVib290ICAgICAgICAgICAgICA1NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfbW1hcDIJCSA1NiAgICBMaW51eCBzcGFyYzMyIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc3ltbGluayAgICAgICAgICAgICA1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICA1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZXhlY3ZlICAgICAgICAgICAgICA1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdW1hc2sgICAgICAgICAgICAgICA2MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfY2hyb290ICAgICAgICAgICAgICA2MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXQgICAgICAgICAgICAgICA2MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXQ2NCAgICAgICAgICAgICA2MyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUgICAgICAgICA2NCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfbXN5bmMgICAgICAgICAgICAgICA2NSAvKiBDb21tb24gaW4gbmV3ZXIgMS4zLnggcmV2cy4uLiAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdmZvcmsgICAgICAgICAgICAgICA2NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcHJlYWQ2NCAgICAgICAgICAgICA2NyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcHdyaXRlNjQgICAgICAgICAgICA2OCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyICAgICAgICA2OSAgICBMaW51eCBzcGFyYzMyLCBzYnJrIHVuZGVyIFN1bk9TICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyICAgICAgICA3MCAgICBMaW51eCBzcGFyYzMyLCBzc3RrIHVuZGVyIFN1bk9TICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfbW1hcCAgICAgICAgICAgICAgICA3MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMiAgICAgICA3MiAgICBMaW51eCBzcGFyYzMyLCB2YWR2aXNlIHVuZGVyIFN1bk9TICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfbXVubWFwICAgICAgICAgICAgICA3MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfbXByb3RlY3QgICAgICAgICAgICA3NCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfbWFkdmlzZSAgICAgICAgICAgICA3NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdmhhbmd1cCAgICAgICAgICAgICA3NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NCAgICAgICA3NyAgICBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KLSNkZWZpbmUgX19OUl9taW5jb3JlICAgICAgICAgICAgIDc4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRncm91cHMgICAgICAgICAgIDc5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRncm91cHMgICAgICAgICAgIDgwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwZ3JwICAgICAgICAgICAgIDgxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9zZXRncm91cHMzMiAgICAgIDgyICAgIExpbnV4IHNwYXJjMzIsIHNldHBncnAgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRpdGltZXIgICAgICAgICAgIDgzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NCAgICAgIDg0ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMJCQkgICAqLwotI2RlZmluZSBfX05SX3N3YXBvbiAgICAgICAgICAgICAgODUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGl0aW1lciAgICAgICAgICAgODYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX3NldHVpZDMyICAgICAgICAgODcgICAgTGludXggc3BhcmMzMiwgZ2V0aG9zdG5hbWUgdW5kZXIgU3VuT1MgICAgICAqLwotI2RlZmluZSBfX05SX3NldGhvc3RuYW1lICAgICAgICAgODggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX3NldGdpZDMyICAgICAgICAgODkgICAgTGludXggc3BhcmMzMiwgZ2V0ZHRhYmxlc2l6ZSB1bmRlciBTdW5PUyAgICAqLwotI2RlZmluZSBfX05SX2R1cDIgICAgICAgICAgICAgICAgOTAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX3NldGZzdWlkMzIgICAgICAgOTEgICAgTGludXggc3BhcmMzMiwgZ2V0ZG9wdCB1bmRlciBTdW5PUyAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjbnRsICAgICAgICAgICAgICAgOTIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NlbGVjdCAgICAgICAgICAgICAgOTMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX3NldGZzZ2lkMzIgICAgICAgOTQgICAgTGludXggc3BhcmMzMiwgc2V0ZG9wdCB1bmRlciBTdW5PUyAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZzeW5jICAgICAgICAgICAgICAgOTUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHByaW9yaXR5ICAgICAgICAgOTYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NvY2tldCAgICAgICAgICAgICAgOTcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Nvbm5lY3QgICAgICAgICAgICAgOTggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2FjY2VwdCAgICAgICAgICAgICAgOTkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHByaW9yaXR5ICAgICAgICAxMDAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAgICAgICAxMDEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAgICAgICAxMDIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrICAgICAxMDMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgICAgICAxMDQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAgICAxMDUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAgICAxMDYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgICAgICAxMDcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJlc3VpZCAgICAgICAgICAxMDggLyogTGludXggU3BlY2lmaWMsIHNpZ3ZlYyB1bmRlciBTdW5PUwkgICAqLwotI2RlZmluZSBfX05SX2dldHJlc3VpZCAgICAgICAgICAxMDkgLyogTGludXggU3BlY2lmaWMsIHNpZ2Jsb2NrIHVuZGVyIFN1bk9TCSAgICovCi0jZGVmaW5lIF9fTlJfc2V0cmVzZ2lkICAgICAgICAgIDExMCAvKiBMaW51eCBTcGVjaWZpYywgc2lnc2V0bWFzayB1bmRlciBTdW5PUwkgICAqLwotI2RlZmluZSBfX05SX2dldHJlc2dpZCAgICAgICAgICAxMTEgLyogTGludXggU3BlY2lmaWMsIHNpZ3BhdXNlIHVuZGVyIFN1bk9TCSAgICovCi0vKiAjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMiAgICAgICA3NSAgICBMaW51eCBzcGFyYzMyLCBzaWdzdGFjayB1bmRlciBTdW5PUyAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcmVjdm1zZyAgICAgICAgICAgIDExMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2VuZG1zZyAgICAgICAgICAgIDExNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIgICAgIDExNSAgICBMaW51eCBzcGFyYzMyLCB2dHJhY2UgdW5kZXIgU3VuT1MgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5ICAgICAgIDExNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cnVzYWdlICAgICAgICAgIDExNyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0c29ja29wdCAgICAgICAgIDExOCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxMTkgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkdiAgICAgICAgICAgICAgMTIwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93cml0ZXYgICAgICAgICAgICAgMTIxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkgICAgICAgMTIyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mY2hvd24gICAgICAgICAgICAgMTIzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mY2htb2QgICAgICAgICAgICAgMTI0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWN2ZnJvbSAgICAgICAgICAgMTI1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRyZXVpZCAgICAgICAgICAgMTI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRyZWdpZCAgICAgICAgICAgMTI3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZW5hbWUgICAgICAgICAgICAgMTI4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90cnVuY2F0ZSAgICAgICAgICAgMTI5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgICAgICAgICAgMTMwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mbG9jayAgICAgICAgICAgICAgMTMxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sc3RhdDY0CQkxMzIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NlbmR0byAgICAgICAgICAgICAxMzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NodXRkb3duICAgICAgICAgICAxMzQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NvY2tldHBhaXIgICAgICAgICAxMzUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21rZGlyICAgICAgICAgICAgICAxMzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JtZGlyICAgICAgICAgICAgICAxMzcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3V0aW1lcyAgICAgICAgICAgICAxMzggLyogU3VuT1MgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N0YXQ2NAkJMTM5IC8qIExpbnV4IFNwZWNpZmljCQkJICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NlbmRmaWxlNjQgICAgICAgICAxNDAgLyogYWRqdGltZSB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHBlZXJuYW1lICAgICAgICAxNDEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Z1dGV4ICAgICAgICAgICAgICAxNDIgLyogZ2V0aG9zdGlkIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHRpZCAgICAgICAgICAgICAxNDMgLyogRU5PU1lTIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHJsaW1pdAkJMTQ0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRybGltaXQgICAgICAgICAgMTQ1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9waXZvdF9yb290CQkxNDYgLyogTGludXggU3BlY2lmaWMsIGtpbGxwZyB1bmRlciBTdW5PUyAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3ByY3RsCQkxNDcgLyogRU5PU1lTIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3BjaWNvbmZpZ19yZWFkCTE0OCAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcGNpY29uZmlnX3dyaXRlCTE0OSAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgIDE1MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0ICAgICAgIDE1MSAvKiBMaW51eCBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggIDE1MiAvKiBMaW51eCBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgIDE1MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMTU0IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCi0vKiAjZGVmaW5lIF9fTlJfZmNudGw2NCAgICAgICAgIDE1NSAgICBMaW51eCBzcGFyYzMyIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAgIDE1NiAvKiBMaW51eCBzcGVjaWZpYwkJCQkgICAqLwotI2RlZmluZSBfX05SX3N0YXRmcyAgICAgICAgICAgICAxNTcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZzdGF0ZnMgICAgICAgICAgICAxNTggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3Vtb3VudCAgICAgICAgICAgICAxNTkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NjaGVkX3NldF9hZmZpbml0eSAxNjAgLyogTGludXggc3BlY2lmaWMsIGFzeW5jX2RhZW1vbiB1bmRlciBTdW5PUyAgICAqLwotI2RlZmluZSBfX05SX3NjaGVkX2dldF9hZmZpbml0eSAxNjEgLyogTGludXggc3BlY2lmaWMsIGdldGZoIHVuZGVyIFN1bk9TICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGRvbWFpbm5hbWUgICAgICAxNjIgLyogU3VuT1MgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUgICAgICAxNjMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3V0cmFwX2luc3RhbGwJMTY0IC8qIFNZU1YgQUJJL3Y5IHJlcXVpcmVkCQkJICAgKi8KLSNkZWZpbmUgX19OUl9xdW90YWN0bCAgICAgICAgICAgMTY1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MgICAgMTY2IC8qIExpbnV4IHNwZWNpZmljLCBleHBvcnRmcyB1bmRlciBTdW5PUyAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tb3VudCAgICAgICAgICAgICAgMTY3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91c3RhdCAgICAgICAgICAgICAgMTY4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXR4YXR0ciAgICAgICAgICAgMTY5IC8qIFN1bk9TOiBzZW1zeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sc2V0eGF0dHIgICAgICAgICAgMTcwIC8qIFN1bk9TOiBtc2dzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mc2V0eGF0dHIgICAgICAgICAgMTcxIC8qIFN1bk9TOiBzaG1zeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR4YXR0ciAgICAgICAgICAgMTcyIC8qIFN1bk9TOiBhdWRpdHN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sZ2V0eGF0dHIgICAgICAgICAgMTczIC8qIFN1bk9TOiByZnNzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRkZW50cyAgICAgICAgICAgMTc0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRzaWQgICAgICAgICAgICAgMTc1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mY2hkaXIgICAgICAgICAgICAgMTc2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgICAgICAgICAgMTc3IC8qIFN1bk9TOiBmY2hyb290ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9saXN0eGF0dHIgICAgICAgICAgMTc4IC8qIFN1bk9TOiB2cGl4c3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sbGlzdHhhdHRyICAgICAgICAgMTc5IC8qIFN1bk9TOiBhaW9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mbGlzdHhhdHRyICAgICAgICAgMTgwIC8qIFN1bk9TOiBhaW93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZW1vdmV4YXR0ciAgICAgICAgMTgxIC8qIFN1bk9TOiBhaW93YWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIgICAgICAgMTgyIC8qIFN1bk9TOiBhaW9jYW5jZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdwZW5kaW5nICAgICAgICAgMTgzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJMTg0IC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfc2V0cGdpZCAgICAgICAgICAgIDE4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyICAgICAgIDE4NiAvKiBTdW5PUzogcGF0aGNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdGtpbGwgICAgICAgICAgICAgIDE4NyAvKiBTdW5PUzogZnBhdGhjb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMTg4IC8qIExpbnV4IHNwZWNpZmljLCBzeXNjb25mIHVuZGVmIFN1bk9TICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bmFtZSAgICAgICAgICAgICAgMTg5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAgICAgICAgMTkwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAgICAgICAgMTkxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzICAgMTkyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgICAgICAgMTkzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9lcG9sbF9jdGwgICAgICAgICAgMTk0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9lcG9sbF93YWl0ICAgICAgICAgMTk1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pb3ByaW9fc2V0ICAgICAgICAgMTk2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwcGlkICAgICAgICAgICAgMTk3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdhY3Rpb24gICAgICAgICAgMTk4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZ2V0bWFzayAgICAgICAgICAgMTk5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zc2V0bWFzayAgICAgICAgICAgMjAwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdzdXNwZW5kICAgICAgICAgMjAxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9vbGRsc3RhdCAgICAgICAgICAgMjAyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91c2VsaWIgICAgICAgICAgICAgMjAzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkZGlyICAgICAgICAgICAgMjA0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkYWhlYWQgICAgICAgICAgMjA1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zb2NrZXRjYWxsICAgICAgICAgMjA2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgMjA3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAgICAgMjA4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mYWR2aXNlNjQgICAgICAgICAgMjA5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQgICAgICAgMjEwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90Z2tpbGwgICAgICAgICAgICAgMjExIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93YWl0cGlkICAgICAgICAgICAgMjEyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zd2Fwb2ZmICAgICAgICAgICAgMjEzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeXNpbmZvICAgICAgICAgICAgMjE0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pcGMgICAgICAgICAgICAgICAgMjE1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdyZXR1cm4gICAgICAgICAgMjE2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jbG9uZSAgICAgICAgICAgICAgMjE3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0ICAgICAgICAgMjE4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hZGp0aW1leCAgICAgICAgICAgMjE5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdwcm9jbWFzayAgICAgICAgMjIwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlICAgICAgMjIxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlICAgICAgMjIyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgICAgMjIzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwZ2lkICAgICAgICAgICAgMjI0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9iZGZsdXNoICAgICAgICAgICAgMjI1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeXNmcyAgICAgICAgICAgICAgMjI2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAgICAgICAgMjI3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRmc3VpZCAgICAgICAgICAgMjI4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRmc2dpZCAgICAgICAgICAgMjI5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9fbmV3c2VsZWN0ICAgICAgICAgMjMwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIF9fTlJfdGltZQkJMjMxIC8qIExpbnV4IHNwYXJjMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNlbmRpZgotI2RlZmluZSBfX05SX3NwbGljZSAgICAgICAgICAgICAyMzIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N0aW1lICAgICAgICAgICAgICAyMzMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N0YXRmczY0ICAgICAgICAgICAyMzQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZzdGF0ZnM2NCAgICAgICAgICAyMzUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX19sbHNlZWsgICAgICAgICAgICAyMzYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21sb2NrICAgICAgICAgICAgICAyMzcKLSNkZWZpbmUgX19OUl9tdW5sb2NrICAgICAgICAgICAgMjM4Ci0jZGVmaW5lIF9fTlJfbWxvY2thbGwgICAgICAgICAgIDIzOQotI2RlZmluZSBfX05SX211bmxvY2thbGwgICAgICAgICAyNDAKLSNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbSAgICAgMjQxCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gICAgIDI0MgotI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAyNDMKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgMjQ0Ci0jZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgICAgICAgIDI0NQotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggMjQ2Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAyNDcKLSNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgIDI0OAotI2RlZmluZSBfX05SX25hbm9zbGVlcCAgICAgICAgICAyNDkKLSNkZWZpbmUgX19OUl9tcmVtYXAgICAgICAgICAgICAgMjUwCi0jZGVmaW5lIF9fTlJfX3N5c2N0bCAgICAgICAgICAgIDI1MQotI2RlZmluZSBfX05SX2dldHNpZCAgICAgICAgICAgICAyNTIKLSNkZWZpbmUgX19OUl9mZGF0YXN5bmMgICAgICAgICAgMjUzCi0jZGVmaW5lIF9fTlJfbmZzc2VydmN0bCAgICAgICAgIDI1NAotI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkyNTUKLSNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCTI1NgotI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJMjU3Ci0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCTI1OAotI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkyNTkKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkyNjAKLSNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eQkyNjEKLSNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCTI2MgotI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJMjYzCi0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkyNjQKLSNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJMjY1Ci0jZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCTI2NgotLyogI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTI2NyBSZXNlcnZlZCBmb3IgVlNFUlZFUiAqLwotI2RlZmluZSBfX05SX2lvX3NldHVwCQkyNjgKLSNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNjkKLSNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI3MAotI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjcxCi0jZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCTI3MgotI2RlZmluZSBfX05SX21xX29wZW4JCTI3MwotI2RlZmluZSBfX05SX21xX3VubGluawkJMjc0Ci0jZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCTI3NQotI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkyNzYKLSNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCTI3NwotI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJMjc4Ci0jZGVmaW5lIF9fTlJfd2FpdGlkCQkyNzkKLSNkZWZpbmUgX19OUl90ZWUJCTI4MAotI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4MQotI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4MgotI2RlZmluZSBfX05SX2tleWN0bAkJMjgzCi0jZGVmaW5lIF9fTlJfb3BlbmF0CQkyODQKLSNkZWZpbmUgX19OUl9ta2RpcmF0CQkyODUKLSNkZWZpbmUgX19OUl9ta25vZGF0CQkyODYKLSNkZWZpbmUgX19OUl9mY2hvd25hdAkJMjg3Ci0jZGVmaW5lIF9fTlJfZnV0aW1lc2F0CQkyODgKLSNkZWZpbmUgX19OUl9mc3RhdGF0NjQJCTI4OQotI2RlZmluZSBfX05SX3VubGlua2F0CQkyOTAKLSNkZWZpbmUgX19OUl9yZW5hbWVhdAkJMjkxCi0jZGVmaW5lIF9fTlJfbGlua2F0CQkyOTIKLSNkZWZpbmUgX19OUl9zeW1saW5rYXQJCTI5MwotI2RlZmluZSBfX05SX3JlYWRsaW5rYXQJCTI5NAotI2RlZmluZSBfX05SX2ZjaG1vZGF0CQkyOTUKLSNkZWZpbmUgX19OUl9mYWNjZXNzYXQJCTI5NgotI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkyOTcKLSNkZWZpbmUgX19OUl9wcG9sbAkJMjk4Ci0jZGVmaW5lIF9fTlJfdW5zaGFyZQkJMjk5Ci0jZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAotI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMDEKLSNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTMwMgotI2RlZmluZSBfX05SX21iaW5kCQkzMDMKLSNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5CTMwNAotI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kJMzA1Ci0jZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzA2Ci0jZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzA3Ci0jZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMDgKLSNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMDkKLSNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxMAotI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTEKLSNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzMTIKLSNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTMKLSNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCTMxNAotI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkzMTUKLSNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJMzE2Ci0KLSNkZWZpbmUgTlJfU1lTQ0FMTFMJCTMxNwotCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgotI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgotI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKLSNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19SVF9TSUdTVVNQRU5ECi0KLS8qCi0gKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCi0gKgotICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKLSAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAotICovCi0jZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfU1BBUkM2NF9VTklTVERfSCAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy91bmlzdGQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdXBhLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VwYS5oCmluZGV4IDViMTYzMzIuLmFhYjcyOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdXBhLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91cGEuaApAQCAtMSwxMDkgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfVVBBX0gKLSNkZWZpbmUgX1NQQVJDNjRfVVBBX0gKLQotI2luY2x1ZGUgPGFzbS9hc2kuaD4KLQotLyogVVBBIGxldmVsIHJlZ2lzdGVycyBhbmQgZGVmaW5lcy4gKi8KLQotLyogVVBBIENvbmZpZyBSZWdpc3RlciAqLwotI2RlZmluZSBVUEFfQ09ORklHX1JFU1YJCTB4ZmZmZmZmZmZjMDAwMDAwMCAvKiBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFVQQV9DT05GSUdfUENPTgkJMHgwMDAwMDAwMDNmYzAwMDAwIC8qIERlcHRoIG9mIHZhcmlvdXMgc3lzIHF1ZXVlcy4gKi8KLSNkZWZpbmUgVVBBX0NPTkZJR19NSUQJCTB4MDAwMDAwMDAwMDNlMDAwMCAvKiBNb2R1bGUgSUQuICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFVQQV9DT05GSUdfUENBUAkJMHgwMDAwMDAwMDAwMDFmZmZmIC8qIFBvcnQgQ2FwYWJpbGl0aWVzLiAgICAgICAgICAgKi8KLQotLyogVVBBIFBvcnQgSUQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVBBX1BPUlRJRF9GTlAJCTB4ZmYwMDAwMDAwMDAwMDAwMCAvKiBIYXJkY29kZWQgdG8gMHhmYyBvbiB1bHRyYS4gICovCi0jZGVmaW5lIFVQQV9QT1JUSURfUkVTVgkJMHgwMGZmZmZmODAwMDAwMDAwIC8qIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVVBBX1BPUlRJRF9FQ0NWQUxJRCAgICAgMHgwMDAwMDAwNDAwMDAwMDAwIC8qIFplcm8gaWYgbW9kIGNhbiBnZW5lcmF0ZSBFQ0MgKi8KLSNkZWZpbmUgVVBBX1BPUlRJRF9PTkVSRUFEICAgICAgMHgwMDAwMDAwMjAwMDAwMDAwIC8qIFNldCBpZiBtb2QgZ2VuZXJhdGVzIFBfUkFTQiAgKi8KLSNkZWZpbmUgVVBBX1BPUlRJRF9QSU5UUkRRICAgICAgMHgwMDAwMDAwMTgwMDAwMDAwIC8qICMgb3V0c3RhbmRpbmcgUF9JTlRfUkVRJ3MgICAgKi8KLSNkZWZpbmUgVVBBX1BPUlRJRF9QUkVRRFEgICAgICAgMHgwMDAwMDAwMDdlMDAwMDAwIC8qIHNsYXZlLXdyJ3MgdG8gbW9kIHN1cHBvcnRlZCAgKi8KLSNkZWZpbmUgVVBBX1BPUlRJRF9QUkVRUkQgICAgICAgMHgwMDAwMDAwMDAxZTAwMDAwIC8qICMgaW5jb21pbmcgUF9SRVEncyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgVVBBX1BPUlRJRF9VUEFDQVAgICAgICAgMHgwMDAwMDAwMDAwMWYwMDAwIC8qIFVQQSBjYXBhYmlsaXRpZXMgb2YgbW9kICAgICAgKi8KLSNkZWZpbmUgVVBBX1BPUlRJRF9JRCAgICAgICAgICAgMHgwMDAwMDAwMDAwMDBmZmZmIC8qIE1vZHVsZSBJZGVudGlmaWNhdGlvbiBiaXRzICAqLwotCi0vKiBVUEEgSS9PIHNwYWNlIGFjY2Vzc29ycyAqLwotI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIF91cGFfcmVhZGIodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXVuc2lnbmVkIGNoYXIgcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkdWJhXHRbJTFdICUyLCAlMFx0LyogdXBhX3JlYWRiICovIgotCQkJICAgICA6ICI9ciIgKHJldCkKLQkJCSAgICAgOiAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IF91cGFfcmVhZHcodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXVuc2lnbmVkIHNob3J0IHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHVoYVx0WyUxXSAlMiwgJTBcdC8qIHVwYV9yZWFkdyAqLyIKLQkJCSAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX3VwYV9yZWFkbCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdW5zaWduZWQgaW50IHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHV3YVx0WyUxXSAlMiwgJTBcdC8qIHVwYV9yZWFkbCAqLyIKLQkJCSAgICAgOiAiPXIiIChyZXQpCi0JCQkgICAgIDogInIiIChhZGRyKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF91cGFfcmVhZHEodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXVuc2lnbmVkIGxvbmcgcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGFcdFslMV0gJTIsICUwXHQvKiB1cGFfcmVhZHEgKi8iCi0JCQkgICAgIDogIj1yIiAocmV0KQotCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfdXBhX3dyaXRlYih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYVx0JTAsIFslMV0gJTJcdC8qIHVwYV93cml0ZWIgKi8iCi0JCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAoYiksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF91cGFfd3JpdGV3KHVuc2lnbmVkIHNob3J0IHcsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYVx0JTAsIFslMV0gJTJcdC8qIHVwYV93cml0ZXcgKi8iCi0JCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAodyksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF91cGFfd3JpdGVsKHVuc2lnbmVkIGludCBsLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2FcdCUwLCBbJTFdICUyXHQvKiB1cGFfd3JpdGVsICovIgotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiciIgKGwpLCAiciIgKGFkZHIpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfdXBhX3dyaXRlcSh1bnNpZ25lZCBsb25nIHEsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YVx0JTAsIFslMV0gJTJcdC8qIHVwYV93cml0ZXEgKi8iCi0JCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAocSksICJyIiAoYWRkciksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpKTsKLX0KLQotI2RlZmluZSB1cGFfcmVhZGIoX19hZGRyKQkJKF91cGFfcmVhZGIoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSB1cGFfcmVhZHcoX19hZGRyKQkJKF91cGFfcmVhZHcoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSB1cGFfcmVhZGwoX19hZGRyKQkJKF91cGFfcmVhZGwoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSB1cGFfcmVhZHEoX19hZGRyKQkJKF91cGFfcmVhZHEoKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSB1cGFfd3JpdGViKF9fYiwgX19hZGRyKQkJKF91cGFfd3JpdGViKChfX2IpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCi0jZGVmaW5lIHVwYV93cml0ZXcoX193LCBfX2FkZHIpCQkoX3VwYV93cml0ZXcoKF9fdyksICh1bnNpZ25lZCBsb25nKShfX2FkZHIpKSkKLSNkZWZpbmUgdXBhX3dyaXRlbChfX2wsIF9fYWRkcikJCShfdXBhX3dyaXRlbCgoX19sKSwgKHVuc2lnbmVkIGxvbmcpKF9fYWRkcikpKQotI2RlZmluZSB1cGFfd3JpdGVxKF9fcSwgX19hZGRyKQkJKF91cGFfd3JpdGVxKChfX3EpLCAodW5zaWduZWQgbG9uZykoX19hZGRyKSkpCi0jZW5kaWYgLyogX19LRVJORUxfXyAmJiAhX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X1VQQV9IKSAqLworI2luY2x1ZGUgPGFzbS1zcGFyYy91cGEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdXRyYXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdXRyYXAuaAppbmRleCBlNDllNWM0Li5iMDMwYTQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3V0cmFwLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91dHJhcC5oCkBAIC0xLDUxICsxIEBACi0vKgotICogaW5jbHVkZS9hc20tc3BhcmM2NC91dHJhcC5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9TUEFSQzY0X1VUUkFQX0gKLSNkZWZpbmUgX19BU01fU1BBUkM2NF9VVFJBUF9ICi0KLSNkZWZpbmUgVVRfSU5TVFJVQ1RJT05fRVhDRVBUSU9OCQkxCi0jZGVmaW5lIFVUX0lOU1RSVUNUSU9OX0VSUk9SCQkJMgotI2RlZmluZSBVVF9JTlNUUlVDVElPTl9QUk9URUNUSU9OCQkzCi0jZGVmaW5lIFVUX0lMTFRSQVBfSU5TVFJVQ1RJT04JCQk0Ci0jZGVmaW5lIFVUX0lMTEVHQUxfSU5TVFJVQ1RJT04JCQk1Ci0jZGVmaW5lIFVUX1BSSVZJTEVHRURfT1BDT0RFCQkJNgotI2RlZmluZSBVVF9GUF9ESVNBQkxFRAkJCQk3Ci0jZGVmaW5lIFVUX0ZQX0VYQ0VQVElPTl9JRUVFXzc1NAkJOAotI2RlZmluZSBVVF9GUF9FWENFUFRJT05fT1RIRVIJCQk5Ci0jZGVmaW5lIFVUX1RBR19PVkVSVklFVwkJCQkxMAotI2RlZmluZSBVVF9ESVZJU0lPTl9CWV9aRVJPCQkJMTEKLSNkZWZpbmUgVVRfREFUQV9FWENFUFRJT04JCQkxMgotI2RlZmluZSBVVF9EQVRBX0VSUk9SCQkJCTEzCi0jZGVmaW5lIFVUX0RBVEFfUFJPVEVDVElPTgkJCTE0Ci0jZGVmaW5lIFVUX01FTV9BRERSRVNTX05PVF9BTElHTkVECQkxNQotI2RlZmluZSBVVF9QUklWSUxFR0VEX0FDVElPTgkJCTE2Ci0jZGVmaW5lIFVUX0FTWU5DX0RBVEFfRVJST1IJCQkxNwotI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzE2CQkJMTgKLSNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8xNwkJCTE5Ci0jZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMTgJCQkyMAotI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzE5CQkJMjEKLSNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yMAkJCTIyCi0jZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjEJCQkyMwotI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzIyCQkJMjQKLSNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yMwkJCTI1Ci0jZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjQJCQkyNgotI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzI1CQkJMjcKLSNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yNgkJCTI4Ci0jZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMjcJCQkyOQotI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzI4CQkJMzAKLSNkZWZpbmUgVVRfVFJBUF9JTlNUUlVDVElPTl8yOQkJCTMxCi0jZGVmaW5lIFVUX1RSQVBfSU5TVFJVQ1RJT05fMzAJCQkzMgotI2RlZmluZSBVVF9UUkFQX0lOU1RSVUNUSU9OXzMxCQkJMzMKLQotI2RlZmluZQlVVEhfTk9DSEFOR0UJCQkJKC0xKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXyAKLXR5cGVkZWYgaW50IHV0cmFwX2VudHJ5X3Q7Ci10eXBlZGVmIHZvaWQgKnV0cmFwX2hhbmRsZXJfdDsKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qICEoX19BU01fU1BBUkM2NF9QUk9DRVNTT1JfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvdXRyYXAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdmdhLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3ZnYS5oCmluZGV4IGM2OWQ1YjIuLmZiZjRkNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdmdhLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC92Z2EuaApAQCAtMSwzMyArMSBAQAotLyoKLSAqCUFjY2VzcyB0byBWR0EgdmlkZW9yYW0KLSAqCi0gKgkoYykgMTk5OCBNYXJ0aW4gTWFyZXMgPG1qQHVjdy5jej4KLSAqLwotCi0jaWZuZGVmIF9MSU5VWF9BU01fVkdBX0hfCi0jZGVmaW5lIF9MSU5VWF9BU01fVkdBX0hfCi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotI2RlZmluZSBWVF9CVUZfSEFWRV9SVwotCi0jdW5kZWYgc2NyX3dyaXRldwotI3VuZGVmIHNjcl9yZWFkdwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2NyX3dyaXRldyh1MTYgdmFsLCB1MTYgKmFkZHIpCi17Ci0JQlVHX09OKChsb25nKSBhZGRyID49IDApOwotCi0JKmFkZHIgPSB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IHNjcl9yZWFkdyhjb25zdCB1MTYgKmFkZHIpCi17Ci0JQlVHX09OKChsb25nKSBhZGRyID49IDApOwotCi0JcmV0dXJuICphZGRyOwotfQotCi0jZGVmaW5lIFZHQV9NQVBfTUVNKHgscykgKHgpCi0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1zcGFyYy92Z2EuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdmlvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Zpby5oCmluZGV4IGQ0ZGUzMmYuLjI5OWIyNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdmlvLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC92aW8uaApAQCAtMSw0MDYgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfVklPX0gKLSNkZWZpbmUgX1NQQVJDNjRfVklPX0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KLQotI2luY2x1ZGUgPGFzbS9sZGMuaD4KLSNpbmNsdWRlIDxhc20vbWRlc2MuaD4KLQotc3RydWN0IHZpb19tc2dfdGFnIHsKLQl1OAkJCXR5cGU7Ci0jZGVmaW5lIFZJT19UWVBFX0NUUkwJCTB4MDEKLSNkZWZpbmUgVklPX1RZUEVfREFUQQkJMHgwMgotI2RlZmluZSBWSU9fVFlQRV9FUlIJCTB4MDQKLQotCXU4CQkJc3R5cGU7Ci0jZGVmaW5lIFZJT19TVUJUWVBFX0lORk8JMHgwMQotI2RlZmluZSBWSU9fU1VCVFlQRV9BQ0sJCTB4MDIKLSNkZWZpbmUgVklPX1NVQlRZUEVfTkFDSwkweDA0Ci0KLQl1MTYJCQlzdHlwZV9lbnY7Ci0jZGVmaW5lIFZJT19WRVJfSU5GTwkJMHgwMDAxCi0jZGVmaW5lIFZJT19BVFRSX0lORk8JCTB4MDAwMgotI2RlZmluZSBWSU9fRFJJTkdfUkVHCQkweDAwMDMKLSNkZWZpbmUgVklPX0RSSU5HX1VOUkVHCQkweDAwMDQKLSNkZWZpbmUgVklPX1JEWAkJCTB4MDAwNQotI2RlZmluZSBWSU9fUEtUX0RBVEEJCTB4MDA0MAotI2RlZmluZSBWSU9fREVTQ19EQVRBCQkweDAwNDEKLSNkZWZpbmUgVklPX0RSSU5HX0RBVEEJCTB4MDA0MgotI2RlZmluZSBWTkVUX01DQVNUX0lORk8JCTB4MDEwMQotCi0JdTMyCQlzaWQ7Ci19OwotCi1zdHJ1Y3QgdmlvX3JkeCB7Ci0Jc3RydWN0IHZpb19tc2dfdGFnCXRhZzsKLQl1NjQJCQlyZXN2WzZdOwotfTsKLQotc3RydWN0IHZpb192ZXJfaW5mbyB7Ci0Jc3RydWN0IHZpb19tc2dfdGFnCXRhZzsKLQl1MTYJCQltYWpvcjsKLQl1MTYJCQltaW5vcjsKLQl1OAkJCWRldl9jbGFzczsKLSNkZWZpbmUgVkRFVl9ORVRXT1JLCQkweDAxCi0jZGVmaW5lIFZERVZfTkVUV09SS19TV0lUQ0gJMHgwMgotI2RlZmluZSBWREVWX0RJU0sJCTB4MDMKLSNkZWZpbmUgVkRFVl9ESVNLX1NFUlZFUgkweDA0Ci0KLQl1OAkJCXJlc3YxWzNdOwotCXU2NAkJCXJlc3YyWzVdOwotfTsKLQotc3RydWN0IHZpb19kcmluZ19yZWdpc3RlciB7Ci0Jc3RydWN0IHZpb19tc2dfdGFnCXRhZzsKLQl1NjQJCQlkcmluZ19pZGVudDsKLQl1MzIJCQludW1fZGVzY3I7Ci0JdTMyCQkJZGVzY3Jfc2l6ZTsKLQl1MTYJCQlvcHRpb25zOwotI2RlZmluZSBWSU9fVFhfRFJJTkcJCTB4MDAwMQotI2RlZmluZSBWSU9fUlhfRFJJTkcJCTB4MDAwMgotCXUxNgkJCXJlc3Y7Ci0JdTMyCQkJbnVtX2Nvb2tpZXM7Ci0Jc3RydWN0IGxkY190cmFuc19jb29raWUJY29va2llc1swXTsKLX07Ci0KLXN0cnVjdCB2aW9fZHJpbmdfdW5yZWdpc3RlciB7Ci0Jc3RydWN0IHZpb19tc2dfdGFnCXRhZzsKLQl1NjQJCQlkcmluZ19pZGVudDsKLQl1NjQJCQlyZXN2WzVdOwotfTsKLQotLyogRGF0YSB0cmFuc2ZlciBtb2RlcyAqLwotI2RlZmluZSBWSU9fUEtUX01PREUJCTB4MDEgLyogUGFja2V0IGJhc2VkIHRyYW5zZmVyCSovCi0jZGVmaW5lIFZJT19ERVNDX01PREUJCTB4MDIgLyogSW4tYmFuZCBkZXNjcmlwdG9ycwkqLwotI2RlZmluZSBWSU9fRFJJTkdfTU9ERQkJMHgwMyAvKiBEZXNjcmlwdG9yIHJpbmdzCSovCi0KLXN0cnVjdCB2aW9fZHJpbmdfZGF0YSB7Ci0Jc3RydWN0IHZpb19tc2dfdGFnCXRhZzsKLQl1NjQJCQlzZXE7Ci0JdTY0CQkJZHJpbmdfaWRlbnQ7Ci0JdTMyCQkJc3RhcnRfaWR4OwotCXUzMgkJCWVuZF9pZHg7Ci0JdTgJCQlzdGF0ZTsKLSNkZWZpbmUgVklPX0RSSU5HX0FDVElWRQkweDAxCi0jZGVmaW5lIFZJT19EUklOR19TVE9QUEVECTB4MDIKLQotCXU4CQkJX19wYWQxOwotCXUxNgkJCV9fcGFkMjsKLQl1MzIJCQlfX3BhZDM7Ci0JdTY0CQkJX19wYXI0WzJdOwotfTsKLQotc3RydWN0IHZpb19kcmluZ19oZHIgewotCXU4CQkJc3RhdGU7Ci0jZGVmaW5lIFZJT19ERVNDX0ZSRUUJCTB4MDEKLSNkZWZpbmUgVklPX0RFU0NfUkVBRFkJCTB4MDIKLSNkZWZpbmUgVklPX0RFU0NfQUNDRVBURUQJMHgwMwotI2RlZmluZSBWSU9fREVTQ19ET05FCQkweDA0Ci0JdTgJCQlhY2s7Ci0jZGVmaW5lIFZJT19BQ0tfRU5BQkxFCQkweDAxCi0jZGVmaW5lIFZJT19BQ0tfRElTQUJMRQkJMHgwMAotCi0JdTE2CQkJX19wYWQxOwotCXUzMgkJCV9fcGFkMjsKLX07Ci0KLS8qIFZJTyBkaXNrIHNwZWNpZmljIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgKi8KLXN0cnVjdCB2aW9fZGlza19hdHRyX2luZm8gewotCXN0cnVjdCB2aW9fbXNnX3RhZwl0YWc7Ci0JdTgJCQl4ZmVyX21vZGU7Ci0JdTgJCQl2ZGlza190eXBlOwotI2RlZmluZSBWRF9ESVNLX1RZUEVfU0xJQ0UJMHgwMSAvKiBTbGljZSBpbiBibG9jayBkZXZpY2UJKi8KLSNkZWZpbmUgVkRfRElTS19UWVBFX0RJU0sJMHgwMiAvKiBFbnRpcmUgYmxvY2sgZGV2aWNlCSovCi0JdTE2CQkJcmVzdjE7Ci0JdTMyCQkJdmRpc2tfYmxvY2tfc2l6ZTsKLQl1NjQJCQlvcGVyYXRpb25zOwotCXU2NAkJCXZkaXNrX3NpemU7Ci0JdTY0CQkJbWF4X3hmZXJfc2l6ZTsKLQl1NjQJCQlyZXN2MlsyXTsKLX07Ci0KLXN0cnVjdCB2aW9fZGlza19kZXNjIHsKLQlzdHJ1Y3QgdmlvX2RyaW5nX2hkcgloZHI7Ci0JdTY0CQkJcmVxX2lkOwotCXU4CQkJb3BlcmF0aW9uOwotI2RlZmluZSBWRF9PUF9CUkVBRAkJMHgwMSAvKiBCbG9jayByZWFkCQkJKi8KLSNkZWZpbmUgVkRfT1BfQldSSVRFCQkweDAyIC8qIEJsb2NrIHdyaXRlCQkJKi8KLSNkZWZpbmUgVkRfT1BfRkxVU0gJCTB4MDMgLyogRmx1c2ggZGlzayBjb250ZW50cwkJKi8KLSNkZWZpbmUgVkRfT1BfR0VUX1dDRQkJMHgwNCAvKiBHZXQgd3JpdGUtY2FjaGUgc3RhdHVzCQkqLwotI2RlZmluZSBWRF9PUF9TRVRfV0NFCQkweDA1IC8qIEVuYWJsZS9kaXNhYmxlIHdyaXRlLWNhY2hlCSovCi0jZGVmaW5lIFZEX09QX0dFVF9WVE9DCQkweDA2IC8qIEdldCBWVE9DCQkJKi8KLSNkZWZpbmUgVkRfT1BfU0VUX1ZUT0MJCTB4MDcgLyogU2V0IFZUT0MJCQkqLwotI2RlZmluZSBWRF9PUF9HRVRfRElTS0dFT00JMHgwOCAvKiBHZXQgZGlzayBnZW9tZXRyeQkJKi8KLSNkZWZpbmUgVkRfT1BfU0VUX0RJU0tHRU9NCTB4MDkgLyogU2V0IGRpc2sgZ2VvbWV0cnkJCSovCi0jZGVmaW5lIFZEX09QX1NDU0lDTUQJCTB4MGEgLyogU0NTSSBjb250cm9sIGNvbW1hbmQJCSovCi0jZGVmaW5lIFZEX09QX0dFVF9ERVZJRAkJMHgwYiAvKiBHZXQgZGV2aWNlIElECQkJKi8KLSNkZWZpbmUgVkRfT1BfR0VUX0VGSQkJMHgwYyAvKiBHZXQgRUZJCQkJCSovCi0jZGVmaW5lIFZEX09QX1NFVF9FRkkJCTB4MGQgLyogU2V0IEVGSQkJCQkqLwotCXU4CQkJc2xpY2U7Ci0JdTE2CQkJcmVzdjE7Ci0JdTMyCQkJc3RhdHVzOwotCXU2NAkJCW9mZnNldDsKLQl1NjQJCQlzaXplOwotCXUzMgkJCW5jb29raWVzOwotCXUzMgkJCXJlc3YyOwotCXN0cnVjdCBsZGNfdHJhbnNfY29va2llCWNvb2tpZXNbMF07Ci19OwotCi0jZGVmaW5lIFZJT19ESVNLX1ZOQU1FX0xFTgk4Ci0jZGVmaW5lIFZJT19ESVNLX0FMQUJFTF9MRU4JMTI4Ci0jZGVmaW5lIFZJT19ESVNLX05VTV9QQVJUCTgKLQotc3RydWN0IHZpb19kaXNrX3Z0b2MgewotCXU4CQkJdm9sdW1lX25hbWVbVklPX0RJU0tfVk5BTUVfTEVOXTsKLQl1MTYJCQlzZWN0b3Jfc2l6ZTsKLQl1MTYJCQludW1fcGFydGl0aW9uczsKLQl1OAkJCWFzY2lpX2xhYmVsW1ZJT19ESVNLX0FMQUJFTF9MRU5dOwotCXN0cnVjdCB7Ci0JCXUxNgkJaWQ7Ci0JCXUxNgkJcGVybV9mbGFnczsKLQkJdTMyCQlyZXN2OwotCQl1NjQJCXN0YXJ0X2Jsb2NrOwotCQl1NjQJCW51bV9ibG9ja3M7Ci0JfSBwYXJ0aXRpb25zW1ZJT19ESVNLX05VTV9QQVJUXTsKLX07Ci0KLXN0cnVjdCB2aW9fZGlza19nZW9tIHsKLQl1MTYJCQludW1fY3lsOyAvKiBOdW0gZGF0YSBjeWxpbmRlcnMJCSovCi0JdTE2CQkJYWx0X2N5bDsgLyogTnVtIGFsdGVybmF0ZSBjeWxpbmRlcnMJKi8KLQl1MTYJCQliZWdfY3lsOyAvKiBDeWwgb2ZmIG9mIGZpeGVkIGhlYWQgYXJlYQkqLwotCXUxNgkJCW51bV9oZDsgIC8qIE51bSBoZWFkcwkJCSovCi0JdTE2CQkJbnVtX3NlYzsgLyogTnVtIHNlY3RvcnMJCQkqLwotCXUxNgkJCWlmYWN0OyAgIC8qIEludGVybGVhdmUgZmFjdG9yCQkqLwotCXUxNgkJCWFwYzsgICAgIC8qIEFsdHMgcGVyIGN5bGluZGVyIChTQ1NJKQkqLwotCXUxNgkJCXJwbTsJIC8qIFJldm9sdXRpb25zIHBlciBtaW51dGUJKi8KLQl1MTYJCQlwaHlfY3lsOyAvKiBOdW0gcGh5c2ljYWwgY3lsaW5kZXJzCSovCi0JdTE2CQkJd3Jfc2tpcDsgLyogTnVtIHNlY3RzIHRvIHNraXAsIHdyaXRlcwkqLwotCXUxNgkJCXJkX3NraXA7IC8qIE51bSBzZWN0cyB0byBza2lwLCB3cml0ZXMJKi8KLX07Ci0KLXN0cnVjdCB2aW9fZGlza19kZXZpZCB7Ci0JdTE2CQkJcmVzdjsKLQl1MTYJCQl0eXBlOwotCXUzMgkJCWxlbjsKLQljaGFyCQkJaWRbMF07Ci19OwotCi1zdHJ1Y3QgdmlvX2Rpc2tfZWZpIHsKLQl1NjQJCQlsYmE7Ci0JdTY0CQkJbGVuOwotCWNoYXIJCQlkYXRhWzBdOwotfTsKLQotLyogVklPIG5ldCBzcGVjaWZpYyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzICovCi1zdHJ1Y3QgdmlvX25ldF9hdHRyX2luZm8gewotCXN0cnVjdCB2aW9fbXNnX3RhZwl0YWc7Ci0JdTgJCQl4ZmVyX21vZGU7Ci0JdTgJCQlhZGRyX3R5cGU7Ci0jZGVmaW5lIFZORVRfQUREUl9FVEhFUk1BQwkweDAxCi0JdTE2CQkJYWNrX2ZyZXE7Ci0JdTMyCQkJcmVzdjE7Ci0JdTY0CQkJYWRkcjsKLQl1NjQJCQltdHU7Ci0JdTY0CQkJcmVzdjJbM107Ci19OwotCi0jZGVmaW5lIFZORVRfTlVNX01DQVNUCQk3Ci0KLXN0cnVjdCB2aW9fbmV0X21jYXN0X2luZm8gewotCXN0cnVjdCB2aW9fbXNnX3RhZwl0YWc7Ci0JdTgJCQlzZXQ7Ci0JdTgJCQljb3VudDsKLQl1OAkJCW1jYXN0X2FkZHJbVk5FVF9OVU1fTUNBU1QgKiA2XTsKLQl1MzIJCQlyZXN2OwotfTsKLQotc3RydWN0IHZpb19uZXRfZGVzYyB7Ci0Jc3RydWN0IHZpb19kcmluZ19oZHIJaGRyOwotCXUzMgkJCXNpemU7Ci0JdTMyCQkJbmNvb2tpZXM7Ci0Jc3RydWN0IGxkY190cmFuc19jb29raWUJY29va2llc1swXTsKLX07Ci0KLSNkZWZpbmUgVklPX01BWF9SSU5HX0NPT0tJRVMJMjQKLQotc3RydWN0IHZpb19kcmluZ19zdGF0ZSB7Ci0JdTY0CQkJaWRlbnQ7Ci0Jdm9pZAkJCSpiYXNlOwotCXU2NAkJCXNuZF9ueHQ7Ci0JdTY0CQkJcmN2X254dDsKLQl1MzIJCQllbnRyeV9zaXplOwotCXUzMgkJCW51bV9lbnRyaWVzOwotCXUzMgkJCXByb2Q7Ci0JdTMyCQkJY29uczsKLQl1MzIJCQlwZW5kaW5nOwotCWludAkJCW5jb29raWVzOwotCXN0cnVjdCBsZGNfdHJhbnNfY29va2llCWNvb2tpZXNbVklPX01BWF9SSU5HX0NPT0tJRVNdOwotfTsKLQotc3RhdGljIGlubGluZSB2b2lkICp2aW9fZHJpbmdfY3VyKHN0cnVjdCB2aW9fZHJpbmdfc3RhdGUgKmRyKQotewotCXJldHVybiBkci0+YmFzZSArIChkci0+ZW50cnlfc2l6ZSAqIGRyLT5wcm9kKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICp2aW9fZHJpbmdfZW50cnkoc3RydWN0IHZpb19kcmluZ19zdGF0ZSAqZHIsCi0JCQkJICAgIHVuc2lnbmVkIGludCBpbmRleCkKLXsKLQlyZXR1cm4gZHItPmJhc2UgKyAoZHItPmVudHJ5X3NpemUgKiBpbmRleCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHZpb19kcmluZ19hdmFpbChzdHJ1Y3QgdmlvX2RyaW5nX3N0YXRlICpkciwKLQkJCQkgIHVuc2lnbmVkIGludCByaW5nX3NpemUpCi17Ci0JQlVJTERfQlVHX09OKCFpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkpOwotCi0JcmV0dXJuIChkci0+cGVuZGluZyAtCi0JCSgoZHItPnByb2QgLSBkci0+Y29ucykgJiAocmluZ19zaXplIC0gMSkpKTsKLX0KLQotI2RlZmluZSBWSU9fTUFYX1RZUEVfTEVOCTMyCi0jZGVmaW5lIFZJT19NQVhfQ09NUEFUX0xFTgk2NAotCi1zdHJ1Y3QgdmlvX2RldiB7Ci0JdTY0CQkJbXA7Ci0Jc3RydWN0IGRldmljZV9ub2RlCSpkcDsKLQotCWNoYXIJCQl0eXBlW1ZJT19NQVhfVFlQRV9MRU5dOwotCWNoYXIJCQljb21wYXRbVklPX01BWF9DT01QQVRfTEVOXTsKLQlpbnQJCQljb21wYXRfbGVuOwotCi0JdTY0CQkJZGV2X25vOwotCi0JdW5zaWduZWQgbG9uZwkJY2hhbm5lbF9pZDsKLQotCXVuc2lnbmVkIGludAkJdHhfaXJxOwotCXVuc2lnbmVkIGludAkJcnhfaXJxOwotCi0Jc3RydWN0IGRldmljZQkJZGV2OwotfTsKLQotc3RydWN0IHZpb19kcml2ZXIgewotCXN0cnVjdCBsaXN0X2hlYWQJCW5vZGU7Ci0JY29uc3Qgc3RydWN0IHZpb19kZXZpY2VfaWQJKmlkX3RhYmxlOwotCWludCAoKnByb2JlKShzdHJ1Y3QgdmlvX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgdmlvX2RldmljZV9pZCAqaWQpOwotCWludCAoKnJlbW92ZSkoc3RydWN0IHZpb19kZXYgKmRldik7Ci0Jdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdmlvX2RldiAqZGV2KTsKLQl1bnNpZ25lZCBsb25nCQkJZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIJCWRyaXZlcjsKLX07Ci0KLXN0cnVjdCB2aW9fdmVyc2lvbiB7Ci0JdTE2CQltYWpvcjsKLQl1MTYJCW1pbm9yOwotfTsKLQotc3RydWN0IHZpb19kcml2ZXJfc3RhdGU7Ci1zdHJ1Y3QgdmlvX2RyaXZlcl9vcHMgewotCWludAkoKnNlbmRfYXR0cikoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbyk7Ci0JaW50CSgqaGFuZGxlX2F0dHIpKHN0cnVjdCB2aW9fZHJpdmVyX3N0YXRlICp2aW8sIHZvaWQgKnBrdCk7Ci0Jdm9pZAkoKmhhbmRzaGFrZV9jb21wbGV0ZSkoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbyk7Ci19OwotCi1zdHJ1Y3QgdmlvX2NvbXBsZXRpb24gewotCXN0cnVjdCBjb21wbGV0aW9uCWNvbTsKLQlpbnQJCQllcnI7Ci0JaW50CQkJd2FpdGluZ19mb3I7Ci19OwotCi1zdHJ1Y3QgdmlvX2RyaXZlcl9zdGF0ZSB7Ci0JLyogUHJvdGVjdHMgVklPIGhhbmRzaGFrZSBhbmQsIG9wdGlvbmFsbHksIGRyaXZlciBwcml2YXRlIHN0YXRlLiAgKi8KLQlzcGlubG9ja190CQlsb2NrOwotCi0Jc3RydWN0IGxkY19jaGFubmVsCSpscDsKLQotCXUzMgkJCV9wZWVyX3NpZDsKLQl1MzIJCQlfbG9jYWxfc2lkOwotCXN0cnVjdCB2aW9fZHJpbmdfc3RhdGUJZHJpbmdzWzJdOwotI2RlZmluZSBWSU9fRFJJVkVSX1RYX1JJTkcJMAotI2RlZmluZSBWSU9fRFJJVkVSX1JYX1JJTkcJMQotCi0JdTgJCQloc19zdGF0ZTsKLSNkZWZpbmUgVklPX0hTX0lOVkFMSUQJCTB4MDAKLSNkZWZpbmUgVklPX0hTX0dPVFZFUlMJCTB4MDEKLSNkZWZpbmUgVklPX0hTX0dPVF9BVFRSCQkweDA0Ci0jZGVmaW5lIFZJT19IU19TRU5UX0RSRUcJMHgwOAotI2RlZmluZSBWSU9fSFNfU0VOVF9SRFgJCTB4MTAKLSNkZWZpbmUgVklPX0hTX0dPVF9SRFhfQUNLCTB4MjAKLSNkZWZpbmUgVklPX0hTX0dPVF9SRFgJCTB4NDAKLSNkZWZpbmUgVklPX0hTX1NFTlRfUkRYX0FDSwkweDgwCi0jZGVmaW5lIFZJT19IU19DT01QTEVURQkJKFZJT19IU19HT1RfUkRYX0FDSyB8IFZJT19IU19TRU5UX1JEWF9BQ0spCi0KLQl1OAkJCWRldl9jbGFzczsKLQotCXU4CQkJZHJfc3RhdGU7Ci0jZGVmaW5lIFZJT19EUl9TVEFURV9UWFJFRwkweDAxCi0jZGVmaW5lIFZJT19EUl9TVEFURV9SWFJFRwkweDAyCi0jZGVmaW5lIFZJT19EUl9TVEFURV9UWFJFUQkweDEwCi0jZGVmaW5lIFZJT19EUl9TVEFURV9SWFJFUQkweDIwCi0KLQl1OAkJCWRlYnVnOwotI2RlZmluZSBWSU9fREVCVUdfSFMJCTB4MDEKLSNkZWZpbmUgVklPX0RFQlVHX0RBVEEJCTB4MDIKLQotCXZvaWQJCQkqZGVzY19idWY7Ci0JdW5zaWduZWQgaW50CQlkZXNjX2J1Zl9sZW47Ci0KLQlzdHJ1Y3QgdmlvX2NvbXBsZXRpb24JKmNtcDsKLQotCXN0cnVjdCB2aW9fZGV2CQkqdmRldjsKLQotCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwotCi0Jc3RydWN0IHZpb192ZXJzaW9uCXZlcjsKLQotCXN0cnVjdCB2aW9fdmVyc2lvbgkqdmVyX3RhYmxlOwotCWludAkJCXZlcl90YWJsZV9lbnRyaWVzOwotCi0JY2hhcgkJCSpuYW1lOwotCi0Jc3RydWN0IHZpb19kcml2ZXJfb3BzCSpvcHM7Ci19OwotCi0jZGVmaW5lIHZpb2RiZyhUWVBFLCBmLCBhLi4uKSBcCi1kbyB7CWlmICh2aW8tPmRlYnVnICYgVklPX0RFQlVHXyMjVFlQRSkgXAotCQlwcmludGsoS0VSTl9JTkZPICJ2aW86IElEWyVsdV0gIiBmLCBcCi0JCSAgICAgICB2aW8tPnZkZXYtPmNoYW5uZWxfaWQsICMjIGEpOyBcCi19IHdoaWxlICgwKQotCi1leHRlcm4gaW50IHZpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHZpb19kcml2ZXIgKmRydik7Ci1leHRlcm4gdm9pZCB2aW9fdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHZpb19kcml2ZXIgKmRydik7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHZpb19kcml2ZXIgKnRvX3Zpb19kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGRydiwgc3RydWN0IHZpb19kcml2ZXIsIGRyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHZpb19kZXYgKnRvX3Zpb19kZXYoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdmlvX2RldiwgZGV2KTsKLX0KLQotZXh0ZXJuIGludCB2aW9fbGRjX3NlbmQoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbywgdm9pZCAqZGF0YSwgaW50IGxlbik7Ci1leHRlcm4gdm9pZCB2aW9fbGlua19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbywgaW50IGV2ZW50KTsKLWV4dGVybiB2b2lkIHZpb19jb25uX3Jlc2V0KHN0cnVjdCB2aW9fZHJpdmVyX3N0YXRlICp2aW8pOwotZXh0ZXJuIGludCB2aW9fY29udHJvbF9wa3RfZW5naW5lKHN0cnVjdCB2aW9fZHJpdmVyX3N0YXRlICp2aW8sIHZvaWQgKnBrdCk7Ci1leHRlcm4gaW50IHZpb192YWxpZGF0ZV9zaWQoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbywKLQkJCSAgICBzdHJ1Y3QgdmlvX21zZ190YWcgKnRwKTsKLWV4dGVybiB1MzIgdmlvX3NlbmRfc2lkKHN0cnVjdCB2aW9fZHJpdmVyX3N0YXRlICp2aW8pOwotZXh0ZXJuIGludCB2aW9fbGRjX2FsbG9jKHN0cnVjdCB2aW9fZHJpdmVyX3N0YXRlICp2aW8sCi0JCQkgc3RydWN0IGxkY19jaGFubmVsX2NvbmZpZyAqYmFzZV9jZmcsIHZvaWQgKmV2ZW50X2FyZyk7Ci1leHRlcm4gdm9pZCB2aW9fbGRjX2ZyZWUoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbyk7Ci1leHRlcm4gaW50IHZpb19kcml2ZXJfaW5pdChzdHJ1Y3QgdmlvX2RyaXZlcl9zdGF0ZSAqdmlvLCBzdHJ1Y3QgdmlvX2RldiAqdmRldiwKLQkJCSAgIHU4IGRldl9jbGFzcywgc3RydWN0IHZpb192ZXJzaW9uICp2ZXJfdGFibGUsCi0JCQkgICBpbnQgdmVyX3RhYmxlX3NpemUsIHN0cnVjdCB2aW9fZHJpdmVyX29wcyAqb3BzLAotCQkJICAgY2hhciAqbmFtZSk7Ci0KLWV4dGVybiB2b2lkIHZpb19wb3J0X3VwKHN0cnVjdCB2aW9fZHJpdmVyX3N0YXRlICp2aW8pOwotCi0jZW5kaWYgLyogX1NQQVJDNjRfVklPX0ggKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvdmlvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Zpc2FzbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC92aXNhc20uaAppbmRleCAzNGYyZWM2NC4uODM3YTEyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC92aXNhc20uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Zpc2FzbS5oCkBAIC0xLDYyICsxIEBACi0jaWZuZGVmIF9TUEFSQzY0X1ZJU0FTTV9ICi0jZGVmaW5lIF9TUEFSQzY0X1ZJU0FTTV9ICi0KLS8qIHZpc2FzbS5oOiAgRlBVIHNhdmluZyBtYWNyb3MgZm9yIFZJUyByb3V0aW5lcwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKLSAqLwotIAotI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLS8qIENsb2JiZXJzICVvNSwgJWcxLCAlZzIsICVnMywgJWc3LCAlaWNjLCAleGNjICovCi0KLSNkZWZpbmUgVklTRW50cnkJCQkJCVwKLQlyZAkJJWZwcnMsICVvNTsJCQlcCi0JYW5kY2MJCSVvNSwgKEZQUlNfRkVGfEZQUlNfRFUpLCAlZzA7CVwKLQliZSxwdAkJJWljYywgMjk3ZjsJCQlcCi0JIHNldGhpCQklaGkoMjk3ZiksICVnNzsJCQlcCi0Jc2V0aGkJCSVoaShWSVNlbnRlciksICVnMTsJCVwKLQlqbXBsCQklZzEgKyAlbG8oVklTZW50ZXIpLCAlZzA7CVwKLQkgb3IJCSVnNywgJWxvKDI5N2YpLCAlZzc7CQlcCi0yOTc6CXdyCQklZzAsIEZQUlNfRkVGLCAlZnByczsJCVwKLQotI2RlZmluZSBWSVNFeGl0CQkJCQkJXAotCXdyCQklZzAsIDAsICVmcHJzOwotCi0vKiBDbG9iYmVycyAlbzUsICVnMSwgJWcyLCAlZzMsICVnNywgJWljYywgJXhjYy4KLSAqIE11c3QgcHJlc2VydmUgJW81IGJldHdlZW4gVklTRW50cnlIYWxmIGFuZCBWSVNFeGl0SGFsZiAqLwotCi0jZGVmaW5lIFZJU0VudHJ5SGFsZgkJCQkJXAotCXJkCQklZnBycywgJW81OwkJCVwKLQlhbmRjYwkJJW81LCBGUFJTX0ZFRiwgJWcwOwkJXAotCWJlLHB0CQklaWNjLCAyOTdmOwkJCVwKLQkgc2V0aGkJCSVoaSgyOThmKSwgJWc3OwkJCVwKLQlzZXRoaQkJJWhpKFZJU2VudGVyaGFsZiksICVnMTsJCVwKLQlqbXBsCQklZzEgKyAlbG8oVklTZW50ZXJoYWxmKSwgJWcwOwlcCi0JIG9yCQklZzcsICVsbygyOThmKSwgJWc3OwkJXAotCWNscgkJJW81OwkJCQlcCi0yOTc6CXdyCQklbzUsIEZQUlNfRkVGLCAlZnByczsJCVwKLTI5ODoKLQotI2RlZmluZSBWSVNFeGl0SGFsZgkJCQkJXAotCXdyCQklbzUsIDAsICVmcHJzOwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwkKLXN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX2FuZF9jbGVhcl9mcHUodm9pZCkgewotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLSIJCXJkICUlZnBycywgJSVvNVxuIgotIgkJYW5kY2MgJSVvNSwgJTAsICUlZzBcbiIKLSIJCWJlLHB0ICUlaWNjLCAyOTlmXG4iCi0iCQkgc2V0aGkgJSVoaSgyOThmKSwgJSVnN1xuIgotIgkJc2V0aGkgJSVoaShWSVNlbnRlciksICUlZzFcbiIKLSIJCWptcGwgJSVnMSArICUlbG8oVklTZW50ZXIpLCAlJWcwXG4iCi0iCQkgb3IgJSVnNywgJSVsbygyOThmKSwgJSVnN1xuIgotIgkyOTg6CXdyICUlZzAsIDAsICUlZnByc1xuIgotIgkyOTk6XG4iCi0iCQkiIDogOiAiaSIgKEZQUlNfRkVGfEZQUlNfRFUpIDoKLQkJIm81IiwgImcxIiwgImcyIiwgImczIiwgImc3IiwgImNjIik7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9TUEFSQzY0X0FTSV9IICovCisjaW5jbHVkZSA8YXNtLXNwYXJjL3Zpc2FzbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC93YXRjaGRvZy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC93YXRjaGRvZy5oCmluZGV4IDViYWYyZDMuLmIwZjI4NTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvd2F0Y2hkb2cuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3dhdGNoZG9nLmgKQEAgLTEsMzEgKzEgQEAKLS8qCi0gKgotICogd2F0Y2hkb2cgLSBEcml2ZXIgaW50ZXJmYWNlIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXJzCi0gKiBwcmVzZW50IG9uIFN1biBNaWNyb3N5c3RlbXMgYm9hcmRzZXRzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAwIEVyaWMgQnJvd2VyIDxlYnJvd2VyQHVzYS5uZXQ+Ci0gKgotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfV0FUQ0hET0dfSAotI2RlZmluZSBfU1BBUkM2NF9XQVRDSERPR19ICi0KLSNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotCi0vKiBTb2xhcmlzIGNvbXBhdGliaWxpdHkgaW9jdGxzLS0KLSAqIFJlZi4gPGxpbnV4L3dhdGNoZG9nLmg+IGZvciBzdGFuZGFyZCBsaW51eCB3YXRjaGRvZyBpb2N0bHMKLSAqLwotI2RlZmluZSBXSU9DU1RBUlQgX0lPIChXQVRDSERPR19JT0NUTF9CQVNFLCAxMCkJCS8qIFN0YXJ0IFRpbWVyCQkqLwotI2RlZmluZSBXSU9DU1RPUCAgX0lPIChXQVRDSERPR19JT0NUTF9CQVNFLCAxMSkJCS8qIFN0b3AgVGltZXIJCSovCi0jZGVmaW5lIFdJT0NHU1RBVCBfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDEyLCBpbnQpLyogR2V0IFRpbWVyIFN0YXR1cwkqLwotCi0vKiBTdGF0dXMgZmxhZ3MgZnJvbSBXSU9DR1NUQVQgaW9jdGwKLSAqLwotI2RlZmluZSBXRF9GUkVFUlVOCTB4MDEJLyogdGltZXIgaXMgcnVubmluZywgaW50ZXJydXB0cyBkaXNhYmxlZAkqLwotI2RlZmluZSBXRF9FWFBJUkVECTB4MDIJLyogdGltZXIgaGFzIGV4cGlyZWQJCQkJCQkqLwotI2RlZmluZSBXRF9SVU5OSU5HCTB4MDQJLyogdGltZXIgaXMgcnVubmluZywgaW50ZXJydXB0cyBlbmFibGVkCQkqLwotI2RlZmluZSBXRF9TVE9QUEVECTB4MDgJLyogdGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQJCQkJKi8KLSNkZWZpbmUgV0RfU0VSVklDRUQgMHgxMAkvKiB0aW1lciBpbnRlcnJ1cHQgd2FzIHNlcnZpY2VkCQkJCSovCi0KLSNlbmRpZiAvKiBpZm5kZWYgX1NQQVJDNjRfV0FUQ0hET0dfSCAqLwotCisjaW5jbHVkZSA8YXNtLXNwYXJjL3dhdGNoZG9nLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3hvci5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC94b3IuaAppbmRleCBhMDIzMzg4Li5lZjE4N2NjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3hvci5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQveG9yLmgKQEAgLTEsNzAgKzEgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zcGFyYzY0L3hvci5oCi0gKgotICogSGlnaCBzcGVlZCB4b3JfYmxvY2sgb3BlcmF0aW9uIGZvciBSQUlENC81IHV0aWxpemluZyB0aGUKLSAqIFVsdHJhU3BhcmMgVmlzdWFsIEluc3RydWN0aW9uIFNldCBhbmQgTmlhZ2FyYSBibG9jay1pbml0Ci0gKiB0d2luLWxvYWQgaW5zdHJ1Y3Rpb25zLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKLSAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogKGZvciBleGFtcGxlIC91c3Ivc3JjL2xpbnV4L0NPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+Ci0KLWV4dGVybiB2b2lkIHhvcl92aXNfMih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7Ci1leHRlcm4gdm9pZCB4b3JfdmlzXzModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgKik7Ci1leHRlcm4gdm9pZCB4b3JfdmlzXzQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKLWV4dGVybiB2b2lkIHhvcl92aXNfNSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKLQkJICAgICAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7Ci0KLS8qIFhYWCBVZ2gsIHdyaXRlIGNoZWV0YWggdmVyc2lvbnMuLi4gLURhdmVNICovCi0KLXN0YXRpYyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHhvcl9ibG9ja19WSVMgPSB7Ci0gICAgICAgIC5uYW1lCT0gIlZJUyIsCi0gICAgICAgIC5kb18yCT0geG9yX3Zpc18yLAotICAgICAgICAuZG9fMwk9IHhvcl92aXNfMywKLSAgICAgICAgLmRvXzQJPSB4b3JfdmlzXzQsCi0gICAgICAgIC5kb181CT0geG9yX3Zpc181LAotfTsKLQotZXh0ZXJuIHZvaWQgeG9yX25pYWdhcmFfMih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7Ci1leHRlcm4gdm9pZCB4b3JfbmlhZ2FyYV8zKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAotCQkJICB1bnNpZ25lZCBsb25nICopOwotZXh0ZXJuIHZvaWQgeG9yX25pYWdhcmFfNCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKLQkJCSAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOwotZXh0ZXJuIHZvaWQgeG9yX25pYWdhcmFfNSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKLQkJCSAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7Ci0KLXN0YXRpYyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHhvcl9ibG9ja19uaWFnYXJhID0gewotICAgICAgICAubmFtZQk9ICJOaWFnYXJhIiwKLSAgICAgICAgLmRvXzIJPSB4b3JfbmlhZ2FyYV8yLAotICAgICAgICAuZG9fMwk9IHhvcl9uaWFnYXJhXzMsCi0gICAgICAgIC5kb180CT0geG9yX25pYWdhcmFfNCwKLSAgICAgICAgLmRvXzUJPSB4b3JfbmlhZ2FyYV81LAotfTsKLQotI3VuZGVmIFhPUl9UUllfVEVNUExBVEVTCi0jZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTCQkJCVwKLQlkbyB7CQkJCQkJXAotCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19WSVMpOwkJXAotCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19uaWFnYXJhKTsJCVwKLQl9IHdoaWxlICgwKQotCi0vKiBGb3IgVklTIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBOaWFnYXJhLiAgKi8KLSNkZWZpbmUgWE9SX1NFTEVDVF9URU1QTEFURShGQVNURVNUKSBcCi0JKCh0bGJfdHlwZSA9PSBoeXBlcnZpc29yICYmIFwKLQkgIChzdW40dl9jaGlwX3R5cGUgPT0gU1VONFZfQ0hJUF9OSUFHQVJBMSB8fCBcCi0JICAgc3VuNHZfY2hpcF90eXBlID09IFNVTjRWX0NISVBfTklBR0FSQTIpKSA/IFwKLQkgJnhvcl9ibG9ja19uaWFnYXJhIDogXAotCSAmeG9yX2Jsb2NrX1ZJUykKKyNpbmNsdWRlIDxhc20tc3BhcmMveG9yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYW1kX2lvbW11X3R5cGVzLmggYi9pbmNsdWRlL2FzbS14ODYvYW1kX2lvbW11X3R5cGVzLmgKaW5kZXggN2JmY2I0Ny4uMjJhYTU4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2FtZF9pb21tdV90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9hbWRfaW9tbXVfdHlwZXMuaApAQCAtMjcsMTMgKzI3LDEyIEBACiAvKgogICogc29tZSBzaXplIGNhbGN1bGF0aW9uIGNvbnN0YW50cwogICovCi0jZGVmaW5lIERFVl9UQUJMRV9FTlRSWV9TSVpFCQkyNTYKKyNkZWZpbmUgREVWX1RBQkxFX0VOVFJZX1NJWkUJCTMyCiAjZGVmaW5lIEFMSUFTX1RBQkxFX0VOVFJZX1NJWkUJCTIKICNkZWZpbmUgUkxPT0tVUF9UQUJMRV9FTlRSWV9TSVpFCShzaXplb2Yodm9pZCAqKSkKIAogLyogaGVscGVyIG1hY3JvcyAqLwogI2RlZmluZSBMT1dfVTMyKHgpICgoeCkgJiAoKDFVTEwgPDwgMzIpLTEpKQotI2RlZmluZSBISUdIX1UzMih4KSAoTE9XX1UzMigoeCkgPj4gMzIpKQogCiAvKiBMZW5ndGggb2YgdGhlIE1NSU8gcmVnaW9uIGZvciB0aGUgQU1EIElPTU1VICovCiAjZGVmaW5lIE1NSU9fUkVHSU9OX0xFTkdUSCAgICAgICAweDQwMDAKQEAgLTE1OCw3OCArMTU3LDE3MCBAQAogCiAjZGVmaW5lIE1BWF9ET01BSU5fSUQgNjU1MzYKIAorLyoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGdlbmVyaWMgZGF0YSBmb3IgIElPTU1VIHByb3RlY3Rpb24gZG9tYWlucworICogaW5kZXBlbmRlbnQgb2YgdGhlaXIgdXNlLgorICovCiBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gewotCXNwaW5sb2NrX3QgbG9jazsKLQl1MTYgaWQ7Ci0JaW50IG1vZGU7Ci0JdTY0ICpwdF9yb290OwotCXZvaWQgKnByaXY7CisJc3BpbmxvY2tfdCBsb2NrOyAvKiBtb3N0bHkgdXNlZCB0byBsb2NrIHRoZSBwYWdlIHRhYmxlKi8KKwl1MTYgaWQ7CQkgLyogdGhlIGRvbWFpbiBpZCB3cml0dGVuIHRvIHRoZSBkZXZpY2UgdGFibGUgKi8KKwlpbnQgbW9kZTsJIC8qIHBhZ2luZyBtb2RlICgwLTYgbGV2ZWxzKSAqLworCXU2NCAqcHRfcm9vdDsJIC8qIHBhZ2UgdGFibGUgcm9vdCBwb2ludGVyICovCisJdm9pZCAqcHJpdjsJIC8qIHByaXZhdGUgZGF0YSAqLwogfTsKIAorLyoKKyAqIERhdGEgY29udGFpbmVyIGZvciBhIGRtYV9vcHMgc3BlY2lmaWMgcHJvdGVjdGlvbiBkb21haW4KKyAqLwogc3RydWN0IGRtYV9vcHNfZG9tYWluIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKiBnZW5lcmljIHByb3RlY3Rpb24gZG9tYWluIGluZm9ybWF0aW9uICovCiAJc3RydWN0IHByb3RlY3Rpb25fZG9tYWluIGRvbWFpbjsKKworCS8qIHNpemUgb2YgdGhlIGFwZXJ0dXJlIGZvciB0aGUgbWFwcGluZ3MgKi8KIAl1bnNpZ25lZCBsb25nIGFwZXJ0dXJlX3NpemU7CisKKwkvKiBhZGRyZXNzIHdlIHN0YXJ0IHRvIHNlYXJjaCBmb3IgZnJlZSBhZGRyZXNzZXMgKi8KIAl1bnNpZ25lZCBsb25nIG5leHRfYml0OworCisJLyogYWRkcmVzcyBhbGxvY2F0aW9uIGJpdG1hcCAqLwogCXVuc2lnbmVkIGxvbmcgKmJpdG1hcDsKKworCS8qCisJICogQXJyYXkgb2YgUFRFIHBhZ2VzIGZvciB0aGUgYXBlcnR1cmUuIEluIHRoaXMgYXJyYXkgd2Ugc2F2ZSBhbGwgdGhlCisJICogbGVhZiBwYWdlcyBvZiB0aGUgZG9tYWluIHBhZ2UgdGFibGUgdXNlZCBmb3IgdGhlIGFwZXJ0dXJlLiBUaGlzIHdheQorCSAqIHdlIGRvbid0IG5lZWQgdG8gd2FsayB0aGUgcGFnZSB0YWJsZSB0byBmaW5kIGEgc3BlY2lmaWMgUFRFLiBXZSBjYW4KKwkgKiBqdXN0IGNhbGN1bGF0ZSBpdHMgYWRkcmVzcyBpbiBjb25zdGFudCB0aW1lLgorCSAqLwogCXU2NCAqKnB0ZV9wYWdlczsKIH07CiAKKy8qCisgKiBTdHJ1Y3R1cmUgd2hlcmUgd2Ugc2F2ZSBpbmZvcm1hdGlvbiBhYm91dCBvbmUgaGFyZHdhcmUgQU1EIElPTU1VIGluIHRoZQorICogc3lzdGVtLgorICovCiBzdHJ1Y3QgYW1kX2lvbW11IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKiBsb2NrcyB0aGUgYWNjZXNzZXMgdG8gdGhlIGhhcmR3YXJlICovCiAJc3BpbmxvY2tfdCBsb2NrOwogCisJLyogZGV2aWNlIGlkIG9mIHRoaXMgSU9NTVUgKi8KIAl1MTYgZGV2aWQ7CisJLyoKKwkgKiBDYXBhYmlsaXR5IHBvaW50ZXIuIFRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgSU9NTVUgcGVyIFBDSQorCSAqIGRldmljZSBmdW5jdGlvbiBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBBTUQgSU9NTVUgY2FwYWJpbGl0eQorCSAqIHBvaW50ZXJzLgorCSAqLwogCXUxNiBjYXBfcHRyOwogCisJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBNTUlPIHNwYWNlICovCiAJdTY0IG1taW9fcGh5czsKKwkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgTU1JTyBzcGFjZSAqLwogCXU4ICptbWlvX2Jhc2U7CisKKwkvKiBjYXBhYmlsaXRpZXMgb2YgdGhhdCBJT01NVSByZWFkIGZyb20gQUNQSSAqLwogCXUzMiBjYXA7CisKKwkvKiBmaXJzdCBkZXZpY2UgdGhpcyBJT01NVSBoYW5kbGVzLiByZWFkIGZyb20gUENJICovCiAJdTE2IGZpcnN0X2RldmljZTsKKwkvKiBsYXN0IGRldmljZSB0aGlzIElPTU1VIGhhbmRsZXMuIHJlYWQgZnJvbSBQQ0kgKi8KIAl1MTYgbGFzdF9kZXZpY2U7CisKKwkvKiBzdGFydCBvZiBleGNsdXNpb24gcmFuZ2Ugb2YgdGhhdCBJT01NVSAqLwogCXU2NCBleGNsdXNpb25fc3RhcnQ7CisJLyogbGVuZ3RoIG9mIGV4Y2x1c2lvbiByYW5nZSBvZiB0aGF0IElPTU1VICovCiAJdTY0IGV4Y2x1c2lvbl9sZW5ndGg7CiAKKwkvKiBjb21tYW5kIGJ1ZmZlciB2aXJ0dWFsIGFkZHJlc3MgKi8KIAl1OCAqY21kX2J1ZjsKKwkvKiBzaXplIG9mIGNvbW1hbmQgYnVmZmVyICovCiAJdTMyIGNtZF9idWZfc2l6ZTsKIAorCS8qIGlmIG9uZSwgd2UgbmVlZCB0byBzZW5kIGEgY29tcGxldGlvbiB3YWl0IGNvbW1hbmQgKi8KIAlpbnQgbmVlZF9zeW5jOwogCisJLyogZGVmYXVsdCBkbWFfb3BzIGRvbWFpbiBmb3IgdGhhdCBJT01NVSAqLwogCXN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZGVmYXVsdF9kb207CiB9OwogCisvKgorICogTGlzdCB3aXRoIGFsbCBJT01NVXMgaW4gdGhlIHN5c3RlbS4gVGhpcyBsaXN0IGlzIG5vdCBsb2NrZWQgYmVjYXVzZSBpdCBpcworICogb25seSB3cml0dGVuIGFuZCByZWFkIGF0IGRyaXZlciBpbml0aWFsaXphdGlvbiBvciBzdXNwZW5kIHRpbWUKKyAqLwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYW1kX2lvbW11X2xpc3Q7CiAKKy8qCisgKiBTdHJ1Y3R1cmUgZGVmaW5pbmcgb25lIGVudHJ5IGluIHRoZSBkZXZpY2UgdGFibGUKKyAqLwogc3RydWN0IGRldl90YWJsZV9lbnRyeSB7CiAJdTMyIGRhdGFbOF07CiB9OwogCisvKgorICogT25lIGVudHJ5IGZvciB1bml0eSBtYXBwaW5ncyBwYXJzZWQgb3V0IG9mIHRoZSBBQ1BJIHRhYmxlLgorICovCiBzdHJ1Y3QgdW5pdHlfbWFwX2VudHJ5IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKiBzdGFydGluZyBkZXZpY2UgaWQgdGhpcyBlbnRyeSBpcyB1c2VkIGZvciAoaW5jbHVkaW5nKSAqLwogCXUxNiBkZXZpZF9zdGFydDsKKwkvKiBlbmQgZGV2aWNlIGlkIHRoaXMgZW50cnkgaXMgdXNlZCBmb3IgKGluY2x1ZGluZykgKi8KIAl1MTYgZGV2aWRfZW5kOworCisJLyogc3RhcnQgYWRkcmVzcyB0byB1bml0eSBtYXAgKGluY2x1ZGluZykgKi8KIAl1NjQgYWRkcmVzc19zdGFydDsKKwkvKiBlbmQgYWRkcmVzcyB0byB1bml0eSBtYXAgKGluY2x1ZGluZykgKi8KIAl1NjQgYWRkcmVzc19lbmQ7CisKKwkvKiByZXF1aXJlZCBwcm90ZWN0aW9uICovCiAJaW50IHByb3Q7CiB9OwogCisvKgorICogTGlzdCBvZiBhbGwgdW5pdHkgbWFwcGluZ3MuIEl0IGlzIG5vdCBsb2NrZWQgYmVjYXVzZSBhcyBydW50aW1lIGl0IGlzIG9ubHkKKyAqIHJlYWQuIEl0IGlzIGNyZWF0ZWQgYXQgQUNQSSB0YWJsZSBwYXJzaW5nIHRpbWUuCisgKi8KIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGFtZF9pb21tdV91bml0eV9tYXA7CiAKLS8qIGRhdGEgc3RydWN0dXJlcyBmb3IgZGV2aWNlIGhhbmRsaW5nICovCisvKgorICogRGF0YSBzdHJ1Y3R1cmVzIGZvciBkZXZpY2UgaGFuZGxpbmcKKyAqLworCisvKgorICogRGV2aWNlIHRhYmxlIHVzZWQgYnkgaGFyZHdhcmUuIFJlYWQgYW5kIHdyaXRlIGFjY2Vzc2VzIGJ5IHNvZnR3YXJlIGFyZQorICogbG9ja2VkIHdpdGggdGhlIGFtZF9pb21tdV9wZF90YWJsZSBsb2NrLgorICovCiBleHRlcm4gc3RydWN0IGRldl90YWJsZV9lbnRyeSAqYW1kX2lvbW11X2Rldl90YWJsZTsKKworLyoKKyAqIEFsaWFzIHRhYmxlIHRvIGZpbmQgcmVxdWVzdG9yIGlkcyB0byBkZXZpY2UgaWRzLiBOb3QgbG9ja2VkIGJlY2F1c2Ugb25seQorICogcmVhZCBvbiBydW50aW1lLgorICovCiBleHRlcm4gdTE2ICphbWRfaW9tbXVfYWxpYXNfdGFibGU7CisKKy8qCisgKiBSZXZlcnNlIGxvb2t1cCB0YWJsZSB0byBmaW5kIHRoZSBJT01NVSB3aGljaCB0cmFuc2xhdGVzIGEgc3BlY2lmaWMgZGV2aWNlLgorICovCiBleHRlcm4gc3RydWN0IGFtZF9pb21tdSAqKmFtZF9pb21tdV9ybG9va3VwX3RhYmxlOwogCisvKiBzaXplIG9mIHRoZSBkbWFfb3BzIGFwZXJ0dXJlIGFzIHBvd2VyIG9mIDIgKi8KIGV4dGVybiB1bnNpZ25lZCBhbWRfaW9tbXVfYXBlcnR1cmVfb3JkZXI7CiAKKy8qIGxhcmdlc3QgUENJIGRldmljZSBpZCB3ZSBleHBlY3QgdHJhbnNsYXRpb24gcmVxdWVzdHMgZm9yICovCiBleHRlcm4gdTE2IGFtZF9pb21tdV9sYXN0X2JkZjsKIAogLyogZGF0YSBzdHJ1Y3R1cmVzIGZvciBwcm90ZWN0aW9uIGRvbWFpbiBoYW5kbGluZyAqLwogZXh0ZXJuIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqKmFtZF9pb21tdV9wZF90YWJsZTsKKworLyogYWxsb2NhdGlvbiBiaXRtYXAgZm9yIGRvbWFpbiBpZHMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nICphbWRfaW9tbXVfcGRfYWxsb2NfYml0bWFwOwogCisvKiB3aWxsIGJlIDEgaWYgZGV2aWNlIGlzb2xhdGlvbiBpcyBlbmFibGVkICovCiBleHRlcm4gaW50IGFtZF9pb21tdV9pc29sYXRlOwogCisvKiB0YWtlcyBhIFBDSSBkZXZpY2UgaWQgYW5kIHByaW50cyBpdCBvdXQgaW4gYSByZWFkYWJsZSBmb3JtICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfZGV2aWQodTE2IGRldmlkLCBpbnQgbmwpCiB7CiAJaW50IGJ1cyA9IGRldmlkID4+IDg7CkBAIC0yNDEsNCArMzMyLDExIEBACiAJCXByaW50aygiXG4iKTsKIH0KIAorLyogdGFrZXMgYnVzIGFuZCBkZXZpY2UvZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIGRldmljZSBpZAorICogRklYTUU6IHNob3VsZCB0aGF0IGJlIGluIGdlbmVyaWMgUENJIGNvZGU/ICovCitzdGF0aWMgaW5saW5lIHUxNiBjYWxjX2RldmlkKHU4IGJ1cywgdTggZGV2Zm4pCit7CisJcmV0dXJuICgoKHUxNilidXMpIDw8IDgpIHwgZGV2Zm47Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmgKaW5kZXggNGUyYzFlNS4uMTMzYzk5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvYXBpYy5oCkBAIC0zLDYgKzMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtMTAsOCArMTIsNiBAQAogCiAjZGVmaW5lIEFSQ0hfQVBJQ1RJTUVSX1NUT1BTX09OX0MzCTEKIAotI2RlZmluZSBEcHJpbnRrKHguLi4pCi0KIC8qCiAgKiBEZWJ1Z2dpbmcgbWFjcm9zCiAgKi8KQEAgLTM1LDcgKzM1LDcgQEAKIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCi1leHRlcm4gaW50IGFwaWNfdmVyYm9zaXR5OworZXh0ZXJuIHVuc2lnbmVkIGludCBhcGljX3ZlcmJvc2l0eTsKIGV4dGVybiBpbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKIAogZXh0ZXJuIGludCBpb2FwaWNfZm9yY2U7CkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjZWxzZQogI2RlZmluZSBhcGljX3dyaXRlIG5hdGl2ZV9hcGljX3dyaXRlCi0jZGVmaW5lIGFwaWNfd3JpdGVfYXRvbWljIG5hdGl2ZV9hcGljX3dyaXRlX2F0b21pYwogI2RlZmluZSBhcGljX3JlYWQgbmF0aXZlX2FwaWNfcmVhZAogI2RlZmluZSBzZXR1cF9ib290X2Nsb2NrIHNldHVwX2Jvb3RfQVBJQ19jbG9jawogI2RlZmluZSBzZXR1cF9zZWNvbmRhcnlfY2xvY2sgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sKQEAgLTU4LDEyICs1NywxMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2FwaWNfd3JpdGUodW5zaWduZWQgbG9uZyByZWcsIHUzMiB2KQogewotCSooKHZvbGF0aWxlIHUzMiAqKShBUElDX0JBU0UgKyByZWcpKSA9IHY7Ci19CisJdm9sYXRpbGUgdTMyICphZGRyID0gKHZvbGF0aWxlIHUzMiAqKShBUElDX0JBU0UgKyByZWcpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2FwaWNfd3JpdGVfYXRvbWljKHVuc2lnbmVkIGxvbmcgcmVnLCB1MzIgdikKLXsKLQkodm9pZCl4Y2hnKCh1MzIgKikoQVBJQ19CQVNFICsgcmVnKSwgdik7CisJYWx0ZXJuYXRpdmVfaW8oIm1vdmwgJTAsICUxIiwgInhjaGdsICUwLCAlMSIsIFg4Nl9GRUFUVVJFXzExQVAsCisJCSAgICAgICBBU01fT1VUUFVUMigiPXIiICh2KSwgIj1tIiAoKmFkZHIpKSwKKwkJICAgICAgIEFTTV9PVVRQVVQyKCIwIiAodiksICJtIiAoKmFkZHIpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIG5hdGl2ZV9hcGljX3JlYWQodW5zaWduZWQgbG9uZyByZWcpCkBAIC03NSwxNiArNzMsNiBAQAogZXh0ZXJuIHUzMiBzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKTsKIGV4dGVybiBpbnQgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19YODZfR09PRF9BUElDCi0jIGRlZmluZSBGT1JDRV9SRUFEX0FST1VORF9XUklURSAwCi0jIGRlZmluZSBhcGljX3JlYWRfYXJvdW5kKHgpCi0jIGRlZmluZSBhcGljX3dyaXRlX2Fyb3VuZCh4LCB5KSBhcGljX3dyaXRlKCh4KSwgKHkpKQotI2Vsc2UKLSMgZGVmaW5lIEZPUkNFX1JFQURfQVJPVU5EX1dSSVRFIDEKLSMgZGVmaW5lIGFwaWNfcmVhZF9hcm91bmQoeCkgYXBpY19yZWFkKHgpCi0jIGRlZmluZSBhcGljX3dyaXRlX2Fyb3VuZCh4LCB5KSBhcGljX3dyaXRlX2F0b21pYygoeCksICh5KSkKLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNrX0FQSUNfaXJxKHZvaWQpCiB7CiAJLyoKQEAgLTk1LDcgKzgzLDcgQEAKIAkgKi8KIAogCS8qIERvY3Mgc2F5IHVzZSAwIGZvciBmdXR1cmUgY29tcGF0aWJpbGl0eSAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfRU9JLCAwKTsKKwlhcGljX3dyaXRlKEFQSUNfRU9JLCAwKTsKIH0KIAogZXh0ZXJuIGludCBsYXBpY19nZXRfbWF4bHZ0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2FyY2hfaG9va3MuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hcmNoX2hvb2tzLmgKaW5kZXggNzY4YWVlOC4uODQxMTc1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2FyY2hfaG9va3MuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvYXJjaF9ob29rcy5oCkBAIC0yMSw2ICsyMSw3IEBACiBleHRlcm4gdm9pZCBwcmVfaW50cl9pbml0X2hvb2sodm9pZCk7CiBleHRlcm4gdm9pZCBwcmVfc2V0dXBfYXJjaF9ob29rKHZvaWQpOwogZXh0ZXJuIHZvaWQgdHJhcF9pbml0X2hvb2sodm9pZCk7CitleHRlcm4gdm9pZCBwcmVfdGltZV9pbml0X2hvb2sodm9pZCk7CiBleHRlcm4gdm9pZCB0aW1lX2luaXRfaG9vayh2b2lkKTsKIGV4dGVybiB2b2lkIG1jYV9ubWlfaG9vayh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teDg2L2JpdG9wcy5oCmluZGV4IDk2YjE4MjkuLmNmYjJiNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvYml0b3BzLmgKQEAgLTM1Niw3ICszNTYsNyBAQAogICogX19mbHM6IGZpbmQgbGFzdCBzZXQgYml0IGluIHdvcmQKICAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKICAqCi0gKiBVbmRlZmluZWQgaWYgbm8gemVybyBleGlzdHMsIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgfjBVTCBmaXJzdC4KKyAqIFVuZGVmaW5lZCBpZiBubyBzZXQgYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0LgogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mbHModW5zaWduZWQgbG9uZyB3b3JkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2NhbGxpbmcuaCBiL2luY2x1ZGUvYXNtLXg4Ni9jYWxsaW5nLmgKaW5kZXggZjEzZTYyZS4uMmJjMTYyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NhbGxpbmcuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvY2FsbGluZy5oCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkuZW5kaWYKIAkuZW5kbQogCi0JLm1hY3JvIExPQURfQVJHUyBvZmZzZXQKKwkubWFjcm8gTE9BRF9BUkdTIG9mZnNldCwgc2tpcHJheD0wCiAJbW92cSBcb2Zmc2V0KCVyc3ApLCAgICAlcjExCiAJbW92cSBcb2Zmc2V0KzgoJXJzcCksICAlcjEwCiAJbW92cSBcb2Zmc2V0KzE2KCVyc3ApLCAlcjkKQEAgLTExMyw3ICsxMTMsMTAgQEAKIAltb3ZxIFxvZmZzZXQrNDgoJXJzcCksICVyZHgKIAltb3ZxIFxvZmZzZXQrNTYoJXJzcCksICVyc2kKIAltb3ZxIFxvZmZzZXQrNjQoJXJzcCksICVyZGkKKwkuaWYgXHNraXByYXgKKwkuZWxzZQogCW1vdnEgXG9mZnNldCs3MiglcnNwKSwgJXJheAorCS5lbmRpZgogCS5lbmRtCiAKICNkZWZpbmUgUkVTVF9TS0lQCTYqOApAQCAtMTY1LDQgKzE2OCwzIEBACiAJLm1hY3JvIGljZWJwCiAJLmJ5dGUgMHhmMQogCS5lbmRtCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmggYi9pbmNsdWRlL2FzbS14ODYvY3B1ZmVhdHVyZS5oCmluZGV4IDc1ZWY5NTkuLjJmNWE3OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2NwdWZlYXR1cmUuaApAQCAtNzksNiArNzksNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9SRVBfR09PRAkoMyozMisxNikgLyogcmVwIG1pY3JvY29kZSB3b3JrcyB3ZWxsIG9uIHRoaXMgQ1BVICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX01GRU5DRV9SRFRTQyAoMyozMisxNykgLyogTWZlbmNlIHN5bmNocm9uaXplcyBSRFRTQyAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9MRkVOQ0VfUkRUU0MgKDMqMzIrMTgpIC8qIExmZW5jZSBzeW5jaHJvbml6ZXMgUkRUU0MgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfMTFBUAkoMyozMisxOSkgIC8qIEJhZCBsb2NhbCBBUElDIGFrYSAxMUFQICovCiAKIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDAxIChlY3gpLCB3b3JkIDQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMwkoNCozMisgMCkgLyogU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucy0zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXg4Ni9kbWEtbWFwcGluZy5oCmluZGV4IGExYTRkYzcuLmMyZGRkM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9kbWEtbWFwcGluZy5oCkBAIC0xNCw3ICsxNCw2IEBACiBleHRlcm4gaW50IGlvbW11X21lcmdlOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgZmFsbGJhY2tfZGV2OwogZXh0ZXJuIGludCBwYW5pY19vbl9vdmVyZmxvdzsKLWV4dGVybiBpbnQgZm9yYmlkX2RhYzsKIGV4dGVybiBpbnQgZm9yY2VfaW9tbXU7CiAKIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2U4MjAuaCBiL2luY2x1ZGUvYXNtLXg4Ni9lODIwLmgKaW5kZXggMDY2MzNiMC4uMTZhMzFlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2U4MjAuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZTgyMC5oCkBAIC05MCw2ICs5MCwxNCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUVNVEVTVAorZXh0ZXJuIHZvaWQgZWFybHlfbWVtdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X21lbXRlc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisjZW5kaWYKKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kX3VzZXJfcGZuOwogCiBleHRlcm4gdTY0IGZpbmRfZTgyMF9hcmVhKHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsIHU2NCBhbGlnbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzMyLmgKaW5kZXggYWFlMmYwNS4uZjFhYzJiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2ZpeG1hcF8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9maXhtYXBfMzIuaApAQCAtOTAsMTMgKzkwLDEzIEBACiAJICogMjU2IHRlbXBvcmFyeSBib290LXRpbWUgbWFwcGluZ3MsIHVzZWQgYnkgZWFybHlfaW9yZW1hcCgpLAogCSAqIGJlZm9yZSBpb3JlbWFwKCkgaXMgZnVuY3Rpb25hbC4KIAkgKgotCSAqIFdlIHJvdW5kIGl0IHVwIHRvIHRoZSBuZXh0IDUxMiBwYWdlcyBib3VuZGFyeSBzbyB0aGF0IHdlCisJICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKIAkgKiBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKIAkgKi8KICNkZWZpbmUgTlJfRklYX0JUTUFQUwkJNjQKICNkZWZpbmUgRklYX0JUTUFQU19ORVNUSU5HCTQKLQlGSVhfQlRNQVBfRU5EID0gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIDUxMiAtCi0JCQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyAmIDUxMSksCisJRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyAyNTYgLQorCQkJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAyNTUpLAogCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfTkVTVElORyAtIDEsCiAJRklYX1dQX1RFU1QsCiAjaWZkZWYgQ09ORklHX0FDUEkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9mdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9mdHJhY2UuaAppbmRleCBjMTg0NDQxLi41YzY4YjMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2Z0cmFjZS5oCkBAIC0xLDUgKzEsNSBAQAogI2lmbmRlZiBfQVNNX1g4Nl9GVFJBQ0UKLSNkZWZpbmUgX0FTTV9TUEFSQzY0X0ZUUkFDRQorI2RlZmluZSBfQVNNX1g4Nl9GVFJBQ0UKIAogI2lmZGVmIENPTkZJR19GVFJBQ0UKICNkZWZpbmUgTUNPVU5UX0FERFIJCSgobG9uZykobWNvdW50KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9nYXJ0LmggYi9pbmNsdWRlL2FzbS14ODYvZ2FydC5oCmluZGV4IDMzYjlhZWUuLjNmNjJhODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9nYXJ0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2dhcnQuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTV9YODY2NF9HQVJUX0ggMQogCiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KLSNpbmNsdWRlIDxhc20vaW9tbXUuaD4KIAogZXh0ZXJuIHZvaWQgc2V0X3VwX2dhcnRfcmVzdW1lKHUzMiwgdTMyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lvbW11LmggYi9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaAppbmRleCAwNjhjOWE0Li5kNjMxNjZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaApAQCAtMjUsMTAgKzI1LDE4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfZ2FydF9pb21tdV9jaGVjayh2b2lkKQogewogfQotCitzdGF0aWMgaW5saW5lIHZvaWQgZ2FydF9pb21tdV9pbml0KHZvaWQpCit7Cit9CiBzdGF0aWMgaW5saW5lIHZvaWQgZ2FydF9pb21tdV9zaHV0ZG93bih2b2lkKQogewogfQorc3RhdGljIGlubGluZSB2b2lkIGdhcnRfcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGdhcnRfaW9tbXVfaG9sZV9pbml0KHZvaWQpCit7Cit9CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaXBpLmggYi9pbmNsdWRlL2FzbS14ODYvaXBpLmgKaW5kZXggMTk2ZDYzYy4uYmIxYzA5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lwaS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pcGkuaApAQCAtMTIyLDcgKzEyMiw3IEBACiAJICogLSBtYmxpZ2gKIAkgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yX2VhY2hfY3B1X21hc2socXVlcnlfY3B1LCBtYXNrKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIocXVlcnlfY3B1LCBtYXNrKSB7CiAJCV9fc2VuZF9JUElfZGVzdF9maWVsZChwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBxdWVyeV9jcHUpLAogCQkJCSAgICAgIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva3ZtLmggYi9pbmNsdWRlL2FzbS14ODYva3ZtLmgKaW5kZXggODBlZWZlZjIuLjZmMTg0MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rdm0uaAorKysgYi9pbmNsdWRlL2FzbS14ODYva3ZtLmgKQEAgLTIyOCw1ICsyMjgsNiBAQAogI2RlZmluZSBLVk1fVFJDX0NMVFMgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTIpCiAjZGVmaW5lIEtWTV9UUkNfTE1TVyAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxMykKICNkZWZpbmUgS1ZNX1RSQ19BUElDX0FDQ0VTUyAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDE0KQorI2RlZmluZSBLVk1fVFJDX1REUF9GQVVMVCAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTUpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2t2bV9ob3N0LmggYi9pbmNsdWRlL2FzbS14ODYva3ZtX2hvc3QuaAppbmRleCA4NDRmMmE4Li5mZGRlMGJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2FzbS14ODYva3ZtX2hvc3QuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBLVk1fUFJJVkFURV9NRU1fU0xPVFMgNAogCiAjZGVmaW5lIEtWTV9QSU9fUEFHRV9PRkZTRVQgMQorI2RlZmluZSBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQgMgogCiAjZGVmaW5lIENSM19QQUVfUkVTRVJWRURfQklUUyAoKFg4Nl9DUjNfUFdUIHwgWDg2X0NSM19QQ0QpIC0gMSkKICNkZWZpbmUgQ1IzX05PTlBBRV9SRVNFUlZFRF9CSVRTICgoUEFHRV9TSVpFLTEpICYgfihYODZfQ1IzX1BXVCB8IFg4Nl9DUjNfUENEKSkKQEAgLTc5LDYgKzgwLDcgQEAKICNkZWZpbmUgS1ZNX01JTl9GUkVFX01NVV9QQUdFUyA1CiAjZGVmaW5lIEtWTV9SRUZJTExfUEFHRVMgMjUKICNkZWZpbmUgS1ZNX01BWF9DUFVJRF9FTlRSSUVTIDQwCisjZGVmaW5lIEtWTV9OUl9WQVJfTVRSUiA4CiAKIGV4dGVybiBzcGlubG9ja190IGt2bV9sb2NrOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdm1fbGlzdDsKQEAgLTEwOSwxMiArMTExLDEyIEBACiB9OwogCiBlbnVtIHsKLQlWQ1BVX1NSRUdfQ1MsCi0JVkNQVV9TUkVHX0RTLAogCVZDUFVfU1JFR19FUywKKwlWQ1BVX1NSRUdfQ1MsCisJVkNQVV9TUkVHX1NTLAorCVZDUFVfU1JFR19EUywKIAlWQ1BVX1NSRUdfRlMsCiAJVkNQVV9TUkVHX0dTLAotCVZDUFVfU1JFR19TUywKIAlWQ1BVX1NSRUdfVFIsCiAJVkNQVV9TUkVHX0xEVFIsCiB9OwpAQCAtMjQzLDYgKzI0NSw3IEBACiAJZ2ZuX3QgbGFzdF9wdF93cml0ZV9nZm47CiAJaW50ICAgbGFzdF9wdF93cml0ZV9jb3VudDsKIAl1NjQgICpsYXN0X3B0ZV91cGRhdGVkOworCWdmbl90IGxhc3RfcHRlX2dmbjsKIAogCXN0cnVjdCB7CiAJCWdmbl90IGdmbjsJLyogcHJlc3VtZWQgZ2ZuIGR1cmluZyBndWVzdCBwdGUgdXBkYXRlICovCkBAIC0yODcsNiArMjkwLDEwIEBACiAJdW5zaWduZWQgaW50IGh2X2Nsb2NrX3RzY19raHo7CiAJdW5zaWduZWQgaW50IHRpbWVfb2Zmc2V0OwogCXN0cnVjdCBwYWdlICp0aW1lX3BhZ2U7CisKKwlib29sIG5taV9wZW5kaW5nOworCisJdTY0IG10cnJbMHgxMDBdOwogfTsKIAogc3RydWN0IGt2bV9tZW1fYWxpYXMgewpAQCAtMzQ0LDYgKzM1MSw3IEBACiAJdTMyIG1taW9fZXhpdHM7CiAJdTMyIHNpZ25hbF9leGl0czsKIAl1MzIgaXJxX3dpbmRvd19leGl0czsKKwl1MzIgbm1pX3dpbmRvd19leGl0czsKIAl1MzIgaGFsdF9leGl0czsKIAl1MzIgaGFsdF93YWtldXA7CiAJdTMyIHJlcXVlc3RfaXJxX2V4aXRzOwpAQCAtMzc5LDcgKzM4Nyw2IEBACiAJdm9pZCAoKnByZXBhcmVfZ3Vlc3Rfc3dpdGNoKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCp2Y3B1X2xvYWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7CiAJdm9pZCAoKnZjcHVfcHV0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXZvaWQgKCp2Y3B1X2RlY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIAlpbnQgKCpzZXRfZ3Vlc3RfZGVidWcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgICAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpOwpAQCAtNDk3LDYgKzUwNCwxMCBAQAogaW50IGVtdWxhdG9yX3NldF9kcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGRyLAogCQkgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CiAKK3ZvaWQga3ZtX2dldF9zZWdtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpOworaW50IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzZWxlY3RvciwKKwkJCQlpbnQgdHlwZV9iaXRzLCBpbnQgc2VnKTsKKwogaW50IGt2bV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiB0c3Nfc2VsZWN0b3IsIGludCByZWFzb24pOwogCiB2b2lkIGt2bV9zZXRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApOwpAQCAtNTE1LDYgKzUyNiw4IEBACiB2b2lkIGt2bV9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IyLAogCQkJICAgdTMyIGVycm9yX2NvZGUpOwogCit2b2lkIGt2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKIHZvaWQgZnhfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQgZW11bGF0b3JfcmVhZF9zdGQodW5zaWduZWQgbG9uZyBhZGRyLApAQCAtNTU0LDU1ICs1NjcsNTMgQEAKIAlyZXR1cm4gKHN0cnVjdCBrdm1fbW11X3BhZ2UgKilwYWdlX3ByaXZhdGUocGFnZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IHJlYWRfZnModm9pZCkKK3N0YXRpYyBpbmxpbmUgdTE2IGt2bV9yZWFkX2ZzKHZvaWQpCiB7CiAJdTE2IHNlZzsKIAlhc20oIm1vdiAlJWZzLCAlMCIgOiAiPWciKHNlZykpOwogCXJldHVybiBzZWc7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IHJlYWRfZ3Modm9pZCkKK3N0YXRpYyBpbmxpbmUgdTE2IGt2bV9yZWFkX2dzKHZvaWQpCiB7CiAJdTE2IHNlZzsKIAlhc20oIm1vdiAlJWdzLCAlMCIgOiAiPWciKHNlZykpOwogCXJldHVybiBzZWc7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IHJlYWRfbGR0KHZvaWQpCitzdGF0aWMgaW5saW5lIHUxNiBrdm1fcmVhZF9sZHQodm9pZCkKIHsKIAl1MTYgbGR0OwogCWFzbSgic2xkdCAlMCIgOiAiPWciKGxkdCkpOwogCXJldHVybiBsZHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2ZzKHUxNiBzZWwpCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xvYWRfZnModTE2IHNlbCkKIHsKIAlhc20oIm1vdiAlMCwgJSVmcyIgOiA6ICJybSIoc2VsKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2dzKHUxNiBzZWwpCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xvYWRfZ3ModTE2IHNlbCkKIHsKIAlhc20oIm1vdiAlMCwgJSVncyIgOiA6ICJybSIoc2VsKSk7CiB9CiAKLSNpZm5kZWYgbG9hZF9sZHQKLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2xkdCh1MTYgc2VsKQorc3RhdGljIGlubGluZSB2b2lkIGt2bV9sb2FkX2xkdCh1MTYgc2VsKQogewogCWFzbSgibGxkdCAlMCIgOiA6ICJybSIoc2VsKSk7CiB9Ci0jZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIGdldF9pZHQoc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKnRhYmxlKQorc3RhdGljIGlubGluZSB2b2lkIGt2bV9nZXRfaWR0KHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICp0YWJsZSkKIHsKIAlhc20oInNpZHQgJTAiIDogIj1tIigqdGFibGUpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdldF9nZHQoc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKnRhYmxlKQorc3RhdGljIGlubGluZSB2b2lkIGt2bV9nZXRfZ2R0KHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICp0YWJsZSkKIHsKIAlhc20oInNnZHQgJTAiIDogIj1tIigqdGFibGUpKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfdHJfYmFzZSh2b2lkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9yZWFkX3RyX2Jhc2Uodm9pZCkKIHsKIAl1MTYgdHI7CiAJYXNtKCJzdHIgJTAiIDogIj1nIih0cikpOwpAQCAtNjE5LDE3ICs2MzAsMTcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnhfc2F2ZShzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICppbWFnZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZnhfc2F2ZShzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICppbWFnZSkKIHsKIAlhc20oImZ4c2F2ZSAoJTApIjo6ICJyIiAoaW1hZ2UpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZ4X3Jlc3RvcmUoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqaW1hZ2UpCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2Z4X3Jlc3RvcmUoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqaW1hZ2UpCiB7CiAJYXNtKCJmeHJzdG9yICglMCkiOjogInIiIChpbWFnZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnhfZmluaXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZnhfZmluaXQodm9pZCkKIHsKIAlhc20oImZpbml0Iik7CiB9CkBAIC02OTEsNCArNzAyLDMwIEBACiAJdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCiAJCQkJCQl2Y3B1LCAwLCAwLCAwLCAwLCAwLCAwKQogCisjaWZkZWYgQ09ORklHXzY0QklUCisjIGRlZmluZSBLVk1fRVhfRU5UUlkgIi5xdWFkIgorIyBkZWZpbmUgS1ZNX0VYX1BVU0ggInB1c2hxIgorI2Vsc2UKKyMgZGVmaW5lIEtWTV9FWF9FTlRSWSAiLmxvbmciCisjIGRlZmluZSBLVk1fRVhfUFVTSCAicHVzaGwiCisjZW5kaWYKKworLyoKKyAqIEhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMgbWF5IGZhdWx0IGlmIGEKKyAqIHJlYm9vdCB0dXJucyBvZmYgdmlydHVhbGl6YXRpb24gd2hpbGUgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLgorICogVHJhcCB0aGUgZmF1bHQgYW5kIGlnbm9yZSB0aGUgaW5zdHJ1Y3Rpb24gaWYgdGhhdCBoYXBwZW5zLgorICovCithc21saW5rYWdlIHZvaWQga3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3Qodm9pZCk7CisKKyNkZWZpbmUgX19rdm1faGFuZGxlX2ZhdWx0X29uX3JlYm9vdChpbnNuKSBcCisJIjY2NjogIiBpbnNuICJcblx0IiBcCisJIi5wdXNoc2VjdGlvbiAudGV4dC5maXh1cCwgXCJheFwiIFxuIiBcCisJIjY2NzogXG5cdCIgXAorCUtWTV9FWF9QVVNIICIgJDY2NmIgXG5cdCIgXAorCSJqbXAga3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3QgXG5cdCIgXAorCSIucG9wc2VjdGlvbiBcblx0IiBcCisJIi5wdXNoc2VjdGlvbiBfX2V4X3RhYmxlLCBcImFcIiBcblx0IiBcCisJS1ZNX0VYX0VOVFJZICIgNjY2YiwgNjY3YiBcblx0IiBcCisJIi5wb3BzZWN0aW9uIgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9rdm1feDg2X2VtdWxhdGUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9rdm1feDg2X2VtdWxhdGUuaAppbmRleCBiODc3YmJkLi40ZThjMWU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYva3ZtX3g4Nl9lbXVsYXRlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2t2bV94ODZfZW11bGF0ZS5oCkBAIC0xMjQsNyArMTI0LDggQEAKIAl1OCByZXhfcHJlZml4OwogCXN0cnVjdCBvcGVyYW5kIHNyYzsKIAlzdHJ1Y3Qgb3BlcmFuZCBkc3Q7Ci0JdW5zaWduZWQgbG9uZyAqb3ZlcnJpZGVfYmFzZTsKKwlib29sIGhhc19zZWdfb3ZlcnJpZGU7CisJdTggc2VnX292ZXJyaWRlOwogCXVuc2lnbmVkIGludCBkOwogCXVuc2lnbmVkIGxvbmcgcmVnc1tOUl9WQ1BVX1JFR1NdOwogCXVuc2lnbmVkIGxvbmcgZWlwOwpAQCAtMTM0LDYgKzEzNSw3IEBACiAJdTggbW9kcm1fcmVnOwogCXU4IG1vZHJtX3JtOwogCXU4IHVzZV9tb2RybV9lYTsKKwlib29sIHJpcF9yZWxhdGl2ZTsKIAl1bnNpZ25lZCBsb25nIG1vZHJtX2VhOwogCXZvaWQgKm1vZHJtX3B0cjsKIAl1bnNpZ25lZCBsb25nIG1vZHJtX3ZhbDsKQEAgLTE1MCwxMiArMTUyLDcgQEAKIAkvKiBFbXVsYXRlZCBleGVjdXRpb24gbW9kZSwgcmVwcmVzZW50ZWQgYnkgYW4gWDg2RU1VTF9NT0RFIHZhbHVlLiAqLwogCWludCBtb2RlOwogCi0JdW5zaWduZWQgbG9uZyBjc19iYXNlOwotCXVuc2lnbmVkIGxvbmcgZHNfYmFzZTsKLQl1bnNpZ25lZCBsb25nIGVzX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBzc19iYXNlOwotCXVuc2lnbmVkIGxvbmcgZ3NfYmFzZTsKLQl1bnNpZ25lZCBsb25nIGZzX2Jhc2U7CisJdTMyIGNzX2Jhc2U7CiAKIAkvKiBkZWNvZGUgY2FjaGUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtYmlnc21wL21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtYmlnc21wL21hY2hfYXBpYy5oCmluZGV4IDAxN2M4YzEuLmMzYjlkYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWJpZ3NtcC9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1iaWdzbXAvbWFjaF9hcGljLmgKQEAgLTYzLDkgKzYzLDkgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7CiAJdmFsID0gY2FsY3VsYXRlX2xkcihjcHUpOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTERSLCB2YWwpOworCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oCmluZGV4IDBiMmNkZTUuLmYzMjI2YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaApAQCAtNDYsMTAgKzQ2LDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOworCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKIAl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7CiAJdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoMVVMIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19MRFIsIHZhbCk7CisJYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L3NtcGJvb3RfaG9va3MuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oCmluZGV4IDU2ZDAwMWIuLmRiYWIzNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oCkBAIC0xMiwxMSArMTIsMTEgQEAKIHsKIAlDTU9TX1dSSVRFKDB4YSwgMHhmKTsKIAlsb2NhbF9mbHVzaF90bGIoKTsKLQlEcHJpbnRrKCIxLlxuIik7CisJcHJfZGVidWcoIjEuXG4iKTsKIAkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBUUkFNUE9MSU5FX0hJR0gpID0gc3RhcnRfZWlwID4+IDQ7Ci0JRHByaW50aygiMi5cbiIpOworCXByX2RlYnVnKCIyLlxuIik7CiAJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgVFJBTVBPTElORV9MT1cpID0gc3RhcnRfZWlwICYgMHhmOwotCURwcmludGsoIjMuXG4iKTsKKwlwcl9kZWJ1ZygiMy5cbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc21wYm9vdF9yZXN0b3JlX3dhcm1fcmVzZXRfdmVjdG9yKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1lczcwMDAvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1lczcwMDAvbWFjaF9hcGljLmgKaW5kZXggZmJjOGFkMi4uMGEzZmRmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZXM3MDAwL21hY2hfYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWVzNzAwMC9tYWNoX2FwaWMuaApAQCAtNjYsOSArNjYsOSBAQAogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOworCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKIAl2YWwgPSBjYWxjdWxhdGVfbGRyKGNwdSk7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19MRFIsIHZhbCk7CisJYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfWDg2X0dFTkVSSUNBUkNICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfbXBzcGVjLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfbXBzcGVjLmgKaW5kZXggOWVmMGI5NC4uYzgzYzEyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX21wc3BlYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9tcHNwZWMuaApAQCAtNyw0ICs3LDYgQEAKIC8qIE1heGltdW0gMjU2IFBDSSBidXNzZXMsIHBsdXMgMSBJU0EgYnVzIGluIGVhY2ggb2YgNCBjYWJpbmV0cy4gKi8KICNkZWZpbmUgTUFYX01QX0JVU1NFUyAyNjAKIAorZXh0ZXJuIHZvaWQgbnVtYXFfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKKwkJCQljaGFyICpwcm9kdWN0aWQpOwogI2VuZGlmIC8qIF9fQVNNX01BQ0hfTVBTUEVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaAppbmRleCAxZjc2YzJlNy4uNzVkMmM5NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1zdW1taXQvbWFjaF9hcGljLmgKQEAgLTYzLDEwICs2MywxMCBAQAogCSAqIEJJT1MgcHV0cyA1IENQVXMgaW4gb25lIEFQSUMgY2x1c3Rlciwgd2UncmUgaG9zZWQuICovCiAJQlVHX09OKGNvdW50ID49IFhBUElDX0RFU1RfQ1BVU19TSElGVCk7CiAJaWQgPSBteV9jbHVzdGVyIHwgKDFVTCA8PCBjb3VudCk7Ci0JYXBpY193cml0ZV9hcm91bmQoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7CiAJdmFsID0gYXBpY19yZWFkKEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOwogCXZhbCB8PSBTRVRfQVBJQ19MT0dJQ0FMX0lEKGlkKTsKLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xEUiwgdmFsKTsKKwlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL2VudHJ5X2FyY2guaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL2VudHJ5X2FyY2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZiZTU1NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC12aXN3cy9lbnRyeV9hcmNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS8qCi0gKiBWSVNXUyB1c2VzIHRoZSBzdGFuZGFyZCBMaW51eCBlbnRyeSBwb2ludHM6Ci0gKi8KLQotI2luY2x1ZGUgIi4uL21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC12aXN3cy9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL21hY2hfYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTQzZTdhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL21hY2hfYXBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL21hY2hfYXBpY2RlZi5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3MvbWFjaF9hcGljZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNzExZDEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3MvbWFjaF9hcGljZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3Mvc2V0dXBfYXJjaC5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3Mvc2V0dXBfYXJjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTQ3NjZjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL3NldHVwX2FyY2guaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi9tYWNoLWRlZmF1bHQvc2V0dXBfYXJjaC5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3Mvc21wYm9vdF9ob29rcy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3Mvc21wYm9vdF9ob29rcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDQzM2NhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL3NtcGJvb3RfaG9va3MuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlLmgKaW5kZXggMjhkN2I0NS4uNmM4NDYyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGFnZS5oCkBAIC0xOCw4ICsxOCwxMSBAQAogICAgKGllLCAzMi1iaXQgUEFFKS4gKi8KICNkZWZpbmUgUEhZU0lDQUxfUEFHRV9NQVNLCSgoKHNpZ25lZCBsb25nKVBBR0VfTUFTSykgJiBfX1BIWVNJQ0FMX01BU0spCiAKLS8qIFBURV9NQVNLIGV4dHJhY3RzIHRoZSBQRk4gZnJvbSBhIChwdGV8cG1kfHB1ZHxwZ2QpdmFsX3QgKi8KLSNkZWZpbmUgUFRFX01BU0sJCSgocHRldmFsX3QpUEhZU0lDQUxfUEFHRV9NQVNLKQorLyogUFRFX1BGTl9NQVNLIGV4dHJhY3RzIHRoZSBQRk4gZnJvbSBhIChwdGV8cG1kfHB1ZHxwZ2QpdmFsX3QgKi8KKyNkZWZpbmUgUFRFX1BGTl9NQVNLCQkoKHB0ZXZhbF90KVBIWVNJQ0FMX1BBR0VfTUFTSykKKworLyogUFRFX0ZMQUdTX01BU0sgZXh0cmFjdHMgdGhlIGZsYWdzIGZyb20gYSAocHRlfHBtZHxwdWR8cGdkKXZhbF90ICovCisjZGVmaW5lIFBURV9GTEFHU19NQVNLCQkoflBURV9QRk5fTUFTSykKIAogI2RlZmluZSBQTURfUEFHRV9TSVpFCQkoX0FDKDEsIFVMKSA8PCBQTURfU0hJRlQpCiAjZGVmaW5lIFBNRF9QQUdFX01BU0sJCSh+KFBNRF9QQUdFX1NJWkUtMSkpCkBAIC0xNDQsNiArMTQ3LDExIEBACiAJcmV0dXJuIHB0ZS5wdGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgcHRldmFsX3QgbmF0aXZlX3B0ZV9mbGFncyhwdGVfdCBwdGUpCit7CisJcmV0dXJuIG5hdGl2ZV9wdGVfdmFsKHB0ZSkgJiBQVEVfRkxBR1NfTUFTSzsKK30KKwogI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQogI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9ICkKIApAQCAtMTY1LDcgKzE3Myw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBwdGVfdmFsKHgpCW5hdGl2ZV9wdGVfdmFsKHgpCi0jZGVmaW5lIHB0ZV9mbGFncyh4KQluYXRpdmVfcHRlX3ZhbCh4KQorI2RlZmluZSBwdGVfZmxhZ3MoeCkJbmF0aXZlX3B0ZV9mbGFncyh4KQogI2RlZmluZSBfX3B0ZSh4KQluYXRpdmVfbWFrZV9wdGUoeCkKIAogI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhcmF2aXJ0LmggYi9pbmNsdWRlL2FzbS14ODYvcGFyYXZpcnQuaAppbmRleCBlZjVlOGVjLi5mYmJkZTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGFyYXZpcnQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGFyYXZpcnQuaApAQCAtMjA1LDcgKzIwNSw2IEBACiAJICogdGhlc2Ugc2hvdWxkbid0IGJlIGluIHRoaXMgaW50ZXJmYWNlLgogCSAqLwogCXZvaWQgKCphcGljX3dyaXRlKSh1bnNpZ25lZCBsb25nIHJlZywgdTMyIHYpOwotCXZvaWQgKCphcGljX3dyaXRlX2F0b21pYykodW5zaWduZWQgbG9uZyByZWcsIHUzMiB2KTsKIAl1MzIgKCphcGljX3JlYWQpKHVuc2lnbmVkIGxvbmcgcmVnKTsKIAl2b2lkICgqc2V0dXBfYm9vdF9jbG9jaykodm9pZCk7CiAJdm9pZCAoKnNldHVwX3NlY29uZGFyeV9jbG9jaykodm9pZCk7CkBAIC0zMjYsNiArMzI1LDE1IEBACiAJCQkgICB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKTsKIH07CiAKK3N0cnVjdCByYXdfc3BpbmxvY2s7CitzdHJ1Y3QgcHZfbG9ja19vcHMgeworCWludCAoKnNwaW5faXNfbG9ja2VkKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKKwlpbnQgKCpzcGluX2lzX2NvbnRlbmRlZCkoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7CisJdm9pZCAoKnNwaW5fbG9jaykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7CisJaW50ICgqc3Bpbl90cnlsb2NrKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKKwl2b2lkICgqc3Bpbl91bmxvY2spKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOworfTsKKwogLyogVGhpcyBjb250YWlucyBhbGwgdGhlIHBhcmF2aXJ0IHN0cnVjdHVyZXM6IHdlIGdldCBhIGNvbnZlbmllbnQKICAqIG51bWJlciBmb3IgZWFjaCBmdW5jdGlvbiB1c2luZyB0aGUgb2Zmc2V0IHdoaWNoIHdlIHVzZSB0byBpbmRpY2F0ZQogICogd2hhdCB0byBwYXRjaC4gKi8KQEAgLTMzNiw2ICszNDQsNyBAQAogCXN0cnVjdCBwdl9pcnFfb3BzIHB2X2lycV9vcHM7CiAJc3RydWN0IHB2X2FwaWNfb3BzIHB2X2FwaWNfb3BzOwogCXN0cnVjdCBwdl9tbXVfb3BzIHB2X21tdV9vcHM7CisJc3RydWN0IHB2X2xvY2tfb3BzIHB2X2xvY2tfb3BzOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBwdl9pbmZvIHB2X2luZm87CkBAIC0zNDUsNiArMzU0LDcgQEAKIGV4dGVybiBzdHJ1Y3QgcHZfaXJxX29wcyBwdl9pcnFfb3BzOwogZXh0ZXJuIHN0cnVjdCBwdl9hcGljX29wcyBwdl9hcGljX29wczsKIGV4dGVybiBzdHJ1Y3QgcHZfbW11X29wcyBwdl9tbXVfb3BzOworZXh0ZXJuIHN0cnVjdCBwdl9sb2NrX29wcyBwdl9sb2NrX29wczsKIAogI2RlZmluZSBQQVJBVklSVF9QQVRDSCh4KQkJCQkJXAogCShvZmZzZXRvZihzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfdGVtcGxhdGUsIHgpIC8gc2l6ZW9mKHZvaWQgKikpCkBAIC04OTYsMTEgKzkwNiw2IEBACiAJUFZPUF9WQ0FMTDIocHZfYXBpY19vcHMuYXBpY193cml0ZSwgcmVnLCB2KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFwaWNfd3JpdGVfYXRvbWljKHVuc2lnbmVkIGxvbmcgcmVnLCB1MzIgdikKLXsKLQlQVk9QX1ZDQUxMMihwdl9hcGljX29wcy5hcGljX3dyaXRlX2F0b21pYywgcmVnLCB2KTsKLX0KLQogc3RhdGljIGlubGluZSB1MzIgYXBpY19yZWFkKHVuc2lnbmVkIGxvbmcgcmVnKQogewogCXJldHVybiBQVk9QX0NBTEwxKHVuc2lnbmVkIGxvbmcsIHB2X2FwaWNfb3BzLmFwaWNfcmVhZCwgcmVnKTsKQEAgLTEwODMsNiArMTA4OCw5IEBACiAJCXJldCA9IFBWT1BfQ0FMTDEocHRldmFsX3QsIHB2X21tdV9vcHMucHRlX2ZsYWdzLAogCQkJCSBwdGUucHRlKTsKIAorI2lmZGVmIENPTkZJR19QQVJBVklSVF9ERUJVRworCUJVR19PTihyZXQgJiBQVEVfUEZOX01BU0spOworI2VuZGlmCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTM3NCw2ICsxMzgyLDM3IEBACiB2b2lkIF9wYXJhdmlydF9ub3Aodm9pZCk7CiAjZGVmaW5lIHBhcmF2aXJ0X25vcAkoKHZvaWQgKilfcGFyYXZpcnRfbm9wKQogCit2b2lkIHBhcmF2aXJ0X3VzZV9ieXRlbG9ja3Modm9pZCk7CisKKyNpZmRlZiBDT05GSUdfU01QCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCit7CisJcmV0dXJuIFBWT1BfQ0FMTDEoaW50LCBwdl9sb2NrX29wcy5zcGluX2lzX2xvY2tlZCwgbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfY29udGVuZGVkKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCit7CisJcmV0dXJuIFBWT1BfQ0FMTDEoaW50LCBwdl9sb2NrX29wcy5zcGluX2lzX2NvbnRlbmRlZCwgbG9jayk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2soc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3sKKwlQVk9QX1ZDQUxMMShwdl9sb2NrX29wcy5zcGluX2xvY2ssIGxvY2spOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2soc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3sKKwlyZXR1cm4gUFZPUF9DQUxMMShpbnQsIHB2X2xvY2tfb3BzLnNwaW5fdHJ5bG9jaywgbG9jayk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQoreworCVBWT1BfVkNBTEwxKHB2X2xvY2tfb3BzLnNwaW5fdW5sb2NrLCBsb2NrKTsKK30KKworI2VuZGlmCisKIC8qIFRoZXNlIGFsbCBzaXQgaW4gdGhlIC5wYXJhaW5zdHJ1Y3Rpb25zIHNlY3Rpb24gdG8gdGVsbCB1cyB3aGF0IHRvIHBhdGNoLiAqLwogc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgewogCXU4ICppbnN0cjsgCQkvKiBvcmlnaW5hbCBpbnN0cnVjdGlvbnMgKi8KQEAgLTEzOTYsOCArMTQzNSw4IEBACiAgKiBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzIGJ1dCB0aGUgYXJndW1lbnQgcGFyYW1ldGVyICovCiAjZGVmaW5lIFBWX1NBVkVfUkVHUyAicHVzaHEgJSVyZGk7IgogI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MgInBvcHEgJSVyZGk7IgotI2RlZmluZSBQVl9FWFRSQV9DTE9CQkVSUyBFWFRSQV9DTE9CQkVSUywgInJjeCIgLCAicmR4IgotI2RlZmluZSBQVl9WRVhUUkFfQ0xPQkJFUlMgRVhUUkFfQ0xPQkJFUlMsICJyZGkiLCAicmN4IiAsICJyZHgiCisjZGVmaW5lIFBWX0VYVFJBX0NMT0JCRVJTIEVYVFJBX0NMT0JCRVJTLCAicmN4IiAsICJyZHgiLCAicnNpIgorI2RlZmluZSBQVl9WRVhUUkFfQ0xPQkJFUlMgRVhUUkFfQ0xPQkJFUlMsICJyZGkiLCAicmN4IiAsICJyZHgiLCAicnNpIgogI2RlZmluZSBQVl9GTEFHU19BUkcgIkQiCiAjZW5kaWYKIApAQCAtMTQ1OCw2ICsxNDk3LDcgQEAKIAlyZXR1cm4gZjsKIH0KIAorCiAvKiBNYWtlIHN1cmUgYXMgbGl0dGxlIGFzIHBvc3NpYmxlIG9mIHRoaXMgbWVzcyBlc2NhcGVzLiAqLwogI3VuZGVmIFBBUkFWSVJUX0NBTEwKICN1bmRlZiBfX1BWT1BfQ0FMTApAQCAtMTQ4OSw4ICsxNTI5LDI2IEBACiAKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgUFZfU0FWRV9SRUdTICAgcHVzaHEgJXJheDsgcHVzaHEgJXJkaTsgcHVzaHEgJXJjeDsgcHVzaHEgJXJkeAotI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MgcG9wcSAlcmR4OyBwb3BxICVyY3g7IHBvcHEgJXJkaTsgcG9wcSAlcmF4CisjZGVmaW5lIFBWX1NBVkVfUkVHUwkJCQlcCisJcHVzaCAlcmF4OwkJCQlcCisJcHVzaCAlcmN4OwkJCQlcCisJcHVzaCAlcmR4OwkJCQlcCisJcHVzaCAlcnNpOwkJCQlcCisJcHVzaCAlcmRpOwkJCQlcCisJcHVzaCAlcjg7CQkJCVwKKwlwdXNoICVyOTsJCQkJXAorCXB1c2ggJXIxMDsJCQkJXAorCXB1c2ggJXIxMQorI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MJCQkJXAorCXBvcCAlcjExOwkJCQlcCisJcG9wICVyMTA7CQkJCVwKKwlwb3AgJXI5OwkJCQlcCisJcG9wICVyODsJCQkJXAorCXBvcCAlcmRpOwkJCQlcCisJcG9wICVyc2k7CQkJCVwKKwlwb3AgJXJkeDsJCQkJXAorCXBvcCAlcmN4OwkJCQlcCisJcG9wICVyYXgKICNkZWZpbmUgUEFSQV9QQVRDSChzdHJ1Y3QsIG9mZikgICAgICAgICgoUEFSQVZJUlRfUEFUQ0hfIyNzdHJ1Y3QgKyAob2ZmKSkgLyA4KQogI2RlZmluZSBQQVJBX1NJVEUocHR5cGUsIGNsb2JiZXJzLCBvcHMpIF9QVlNJVEUocHR5cGUsIGNsb2JiZXJzLCBvcHMsIC5xdWFkLCA4KQogI2RlZmluZSBQQVJBX0lORElSRUNUKGFkZHIpCSphZGRyKCVyaXApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS14ODYvcGVyY3B1LmgKaW5kZXggOTEyYTNhMS4uNGU5MWVlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wZXJjcHUuaApAQCAtMjIsNiArMjIsMzIgQEAKIAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCB4ODY2NF9wZGEsIHBkYSk7CiAKKy8qCisgKiBUaGVzZSBhcmUgc3VwcG9zZWQgdG8gYmUgaW1wbGVtZW50ZWQgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gd2hpY2gKKyAqIG9wZXJhdGVzIG9uIHRoZSBwZXItY3B1IGRhdGEgYmFzZSBzZWdtZW50LiAgeDg2LTY0IGRvZXNuJ3QgaGF2ZQorICogdGhhdCB5ZXQsIHNvIHRoaXMgaXMgYSBmYWlybHkgaW5lZmZpY2llbnQgd29ya2Fyb3VuZCBmb3IgdGhlCisgKiBtZWFudGltZS4gIFRoZSBzaW5nbGUgaW5zdHJ1Y3Rpb24gaXMgYXRvbWljIHdpdGggcmVzcGVjdCB0bworICogcHJlZW1wdGlvbiBhbmQgaW50ZXJydXB0cywgc28gd2UgbmVlZCB0byBleHBsaWNpdGx5IGRpc2FibGUKKyAqIGludGVycnVwdHMgaGVyZSB0byBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdC4gIEhvd2V2ZXIsIGJlY2F1c2UgaXQKKyAqIGNhbiBiZSB1c2VkIGZyb20gd2l0aGluIGludGVycnVwdC1kaXNhYmxlL2VuYWJsZSwgd2UgY2FuJ3QgYWN0dWFsbHkKKyAqIGRpc2FibGUgaW50ZXJydXB0czsgZGlzYWJsaW5nIHByZWVtcHRpb24gaXMgZW5vdWdoLgorICovCisjZGVmaW5lIHg4Nl9yZWFkX3BlcmNwdSh2YXIpCQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXR5cGVvZihwZXJfY3B1X3Zhcih2YXIpKSBfX3RtcDsJCQkJXAorCQlwcmVlbXB0X2Rpc2FibGUoKTsJCQkJCVwKKwkJX190bXAgPSBfX2dldF9jcHVfdmFyKHZhcik7CQkJCVwKKwkJcHJlZW1wdF9lbmFibGUoKTsJCQkJCVwKKwkJX190bXA7CQkJCQkJCVwKKwl9KQorCisjZGVmaW5lIHg4Nl93cml0ZV9wZXJjcHUodmFyLCB2YWwpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlwcmVlbXB0X2Rpc2FibGUoKTsJCQkJCVwKKwkJX19nZXRfY3B1X3Zhcih2YXIpID0gKHZhbCk7CQkJCVwKKwkJcHJlZW1wdF9lbmFibGUoKTsJCQkJCVwKKwl9IHdoaWxlKDApCisKICNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KIAogI2lmZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUtM2xldmVsLmggYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS0zbGV2ZWwuaAppbmRleCBjOTNkYmI2Li4xMDUwNTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS0zbGV2ZWwuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS0zbGV2ZWwuaApAQCAtMjUsNyArMjUsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBwdWRfYmFkKHB1ZF90IHB1ZCkKIHsKLQlyZXR1cm4gKHB1ZF92YWwocHVkKSAmIH4oUFRFX01BU0sgfCBfS0VSTlBHX1RBQkxFIHwgX1BBR0VfVVNFUikpICE9IDA7CisJcmV0dXJuIChwdWRfdmFsKHB1ZCkgJiB+KFBURV9QRk5fTUFTSyB8IF9LRVJOUEdfVEFCTEUgfCBfUEFHRV9VU0VSKSkgIT0gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcHVkX3ByZXNlbnQocHVkX3QgcHVkKQpAQCAtMTIwLDkgKzEyMCw5IEBACiAJCXdyaXRlX2NyMyhwZ2QpOwogfQogCi0jZGVmaW5lIHB1ZF9wYWdlKHB1ZCkgKChzdHJ1Y3QgcGFnZSAqKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBURV9NQVNLKSkKKyNkZWZpbmUgcHVkX3BhZ2UocHVkKSAoKHN0cnVjdCBwYWdlICopIF9fdmEocHVkX3ZhbChwdWQpICYgUFRFX1BGTl9NQVNLKSkKIAotI2RlZmluZSBwdWRfcGFnZV92YWRkcihwdWQpICgodW5zaWduZWQgbG9uZykgX192YShwdWRfdmFsKHB1ZCkgJiBQVEVfTUFTSykpCisjZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBURV9QRk5fTUFTSykpCiAKIAogLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLwpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcGZuKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIFBURV9NQVNLKSA+PiBQQUdFX1NISUZUOworCXJldHVybiAocHRlX3ZhbChwdGUpICYgUFRFX1BGTl9NQVNLKSA+PiBQQUdFX1NISUZUOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLmgKaW5kZXggNDljYmQ3Ni4uM2U1ZGJjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS5oCkBAIC01Myw3ICs1Myw3IEBACiAJCQkgX1BBR0VfRElSVFkpCiAKIC8qIFNldCBvZiBiaXRzIG5vdCBjaGFuZ2VkIGluIHB0ZV9tb2RpZnkgKi8KLSNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBURV9NQVNLIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUIHwJCVwKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBURV9QRk5fTUFTSyB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCB8CQlcCiAJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKIAogI2RlZmluZSBfUEFHRV9DQUNIRV9NQVNLCShfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCkBAIC0yODYsNyArMjg2LDcgQEAKIAlyZXR1cm4gX19wZ3Byb3QocHJlc2VydmViaXRzIHwgYWRkYml0cyk7CiB9CiAKLSNkZWZpbmUgcHRlX3BncHJvdCh4KSBfX3BncHJvdChwdGVfZmxhZ3MoeCkgJiB+UFRFX01BU0spCisjZGVmaW5lIHB0ZV9wZ3Byb3QoeCkgX19wZ3Byb3QocHRlX2ZsYWdzKHgpICYgUFRFX0ZMQUdTX01BU0spCiAKICNkZWZpbmUgY2Fub25fcGdwcm90KHApIF9fcGdwcm90KHBncHJvdF92YWwocCkgJiBfX3N1cHBvcnRlZF9wdGVfbWFzaykKIApAQCAtMzAyLDYgKzMwMiwxNCBAQAogLyogSW5zdGFsbCBhIHB0ZSBmb3IgYSBwYXJ0aWN1bGFyIHZhZGRyIGluIGtlcm5lbCBzcGFjZS4gKi8KIHZvaWQgc2V0X3B0ZV92YWRkcih1bnNpZ25lZCBsb25nIHZhZGRyLCBwdGVfdCBwdGUpOwogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSk7CitleHRlcm4gdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkge30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjZWxzZSAgLyogIUNPTkZJR19QQVJBVklSVCAqLwpAQCAtMzMzLDYgKzM0MSwxNiBAQAogCiAjZGVmaW5lIHB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXApICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHB0ZV91cGRhdGVfZGVmZXIobW0sIGFkZHIsIHB0ZXApICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGFyYXZpcnRfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKQoreworCW5hdGl2ZV9wYWdldGFibGVfc2V0dXBfc3RhcnQoYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGFyYXZpcnRfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpCit7CisJbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9kb25lKGJhc2UpOworfQogI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLwogCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGVfMzIuaAppbmRleCBlYzg3MWM0Li41YzNiMjY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzMyLmgKQEAgLTg4LDcgKzg4LDcgQEAKIC8qIFRvIGF2b2lkIGhhcm1mdWwgcmFjZXMsIHBtZF9ub25lKHgpIHNob3VsZCBjaGVjayBvbmx5IHRoZSBsb3dlciB3aGVuIFBBRSAqLwogI2RlZmluZSBwbWRfbm9uZSh4KQkoISh1bnNpZ25lZCBsb25nKXBtZF92YWwoKHgpKSkKICNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF92YWwoKHgpKSAmIF9QQUdFX1BSRVNFTlQpCi0jZGVmaW5lIHBtZF9iYWQoeCkgKChwbWRfdmFsKHgpICYgKH5QVEVfTUFTSyAmIH5fUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRSkKKyNkZWZpbmUgcG1kX2JhZCh4KSAoKHBtZF92YWwoeCkgJiAoUFRFX0ZMQUdTX01BU0sgJiB+X1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEUpCiAKICNkZWZpbmUgcGFnZXNfdG9fbWIoeCkgKCh4KSA+PiAoMjAtUEFHRV9TSElGVCkpCiAKQEAgLTEzOSw3ICsxMzksNyBAQAogI2RlZmluZSBwbWRfcGFnZShwbWQpIChwZm5fdG9fcGFnZShwbWRfdmFsKChwbWQpKSA+PiBQQUdFX1NISUZUKSkKIAogI2RlZmluZSBwbWRfcGFnZV92YWRkcihwbWQpCQkJCQlcCi0JKCh1bnNpZ25lZCBsb25nKV9fdmEocG1kX3ZhbCgocG1kKSkgJiBQVEVfTUFTSykpCisJKCh1bnNpZ25lZCBsb25nKV9fdmEocG1kX3ZhbCgocG1kKSkgJiBQVEVfUEZOX01BU0spKQogCiAjaWYgZGVmaW5lZChDT05GSUdfSElHSFBURSkKICNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQkJCQkJXApAQCAtMTcxLDIxICsxNzEsNiBAQAogICovCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpIGRvIHsgfSB3aGlsZSAoMCkKIAotZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSk7Ci1leHRlcm4gdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpOwotCi0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpCi17Ci0JbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChiYXNlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKLXsKLQluYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUoYmFzZSk7Ci19Ci0jZW5kaWYJLyogIUNPTkZJR19QQVJBVklSVCAqLwotCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BndGFibGVfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzY0LmgKaW5kZXggZmE3MjA4Yi4uYWM1ZmZmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BndGFibGVfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV82NC5oCkBAIC0xNiw2ICsxNiw4IEBACiBleHRlcm4gcHVkX3QgbGV2ZWwzX2tlcm5lbF9wZ3RbNTEyXTsKIGV4dGVybiBwdWRfdCBsZXZlbDNfaWRlbnRfcGd0WzUxMl07CiBleHRlcm4gcG1kX3QgbGV2ZWwyX2tlcm5lbF9wZ3RbNTEyXTsKK2V4dGVybiBwbWRfdCBsZXZlbDJfZml4bWFwX3BndFs1MTJdOworZXh0ZXJuIHBtZF90IGxldmVsMl9pZGVudF9wZ3RbNTEyXTsKIGV4dGVybiBwZ2RfdCBpbml0X2xldmVsNF9wZ3RbXTsKIAogI2RlZmluZSBzd2FwcGVyX3BnX2RpciBpbml0X2xldmVsNF9wZ3QKQEAgLTE1NiwxNyArMTU4LDE3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKQogewotCXJldHVybiAocGdkX3ZhbChwZ2QpICYgfihQVEVfTUFTSyB8IF9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFOworCXJldHVybiAocGdkX3ZhbChwZ2QpICYgfihQVEVfUEZOX01BU0sgfCBfUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcHVkX2JhZChwdWRfdCBwdWQpCiB7Ci0JcmV0dXJuIChwdWRfdmFsKHB1ZCkgJiB+KFBURV9NQVNLIHwgX1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEU7CisJcmV0dXJuIChwdWRfdmFsKHB1ZCkgJiB+KFBURV9QRk5fTUFTSyB8IF9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwbWRfYmFkKHBtZF90IHBtZCkKIHsKLQlyZXR1cm4gKHBtZF92YWwocG1kKSAmIH4oUFRFX01BU0sgfCBfUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRTsKKwlyZXR1cm4gKHBtZF92YWwocG1kKSAmIH4oUFRFX1BGTl9NQVNLIHwgX1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEU7CiB9CiAKICNkZWZpbmUgcHRlX25vbmUoeCkJKCFwdGVfdmFsKCh4KSkpCkBAIC0xOTEsNyArMTkzLDcgQEAKICAqIExldmVsIDQgYWNjZXNzLgogICovCiAjZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZCkJCQkJCQlcCi0JKCh1bnNpZ25lZCBsb25nKV9fdmEoKHVuc2lnbmVkIGxvbmcpcGdkX3ZhbCgocGdkKSkgJiBQVEVfTUFTSykpCisJKCh1bnNpZ25lZCBsb25nKV9fdmEoKHVuc2lnbmVkIGxvbmcpcGdkX3ZhbCgocGdkKSkgJiBQVEVfUEZOX01BU0spKQogI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQkocGZuX3RvX3BhZ2UocGdkX3ZhbCgocGdkKSkgPj4gUEFHRV9TSElGVCkpCiAjZGVmaW5lIHBnZF9wcmVzZW50KHBnZCkgKHBnZF92YWwocGdkKSAmIF9QQUdFX1BSRVNFTlQpCiBzdGF0aWMgaW5saW5lIGludCBwZ2RfbGFyZ2UocGdkX3QgcGdkKSB7IHJldHVybiAwOyB9CkBAIC0yMTQsNyArMjE2LDcgQEAKIH0KIAogLyogUE1EICAtIExldmVsIDIgYWNjZXNzICovCi0jZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwoKHBtZCkpICYgUFRFX01BU0spKQorI2RlZmluZSBwbWRfcGFnZV92YWRkcihwbWQpICgodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKChwbWQpKSAmIFBURV9QRk5fTUFTSykpCiAjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCShwZm5fdG9fcGFnZShwbWRfdmFsKChwbWQpKSA+PiBQQUdFX1NISUZUKSkKIAogI2RlZmluZSBwbWRfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaAppbmRleCA1NTQwMmQyLi41ZjU4ZGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3Byb2Nlc3Nvci5oCkBAIC0xMzQsNyArMTM0LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CiAjZGVmaW5lIGNwdV9kYXRhKGNwdSkJCXBlcl9jcHUoY3B1X2luZm8sIGNwdSkKLSNkZWZpbmUgY3VycmVudF9jcHVfZGF0YQljcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpCisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEJX19nZXRfY3B1X3ZhcihjcHVfaW5mbykKICNlbHNlCiAjZGVmaW5lIGNwdV9kYXRhKGNwdSkJCWJvb3RfY3B1X2RhdGEKICNkZWZpbmUgY3VycmVudF9jcHVfZGF0YQlib290X2NwdV9kYXRhCkBAIC03MjIsOCArNzIyLDYgQEAKIAogZXh0ZXJuIHZvaWQgbXdhaXRfaWRsZV93aXRoX2hpbnRzKHVuc2lnbmVkIGxvbmcgZWF4LCB1bnNpZ25lZCBsb25nIGVjeCk7CiAKLWV4dGVybiBpbnQJCQlmb3JjZV9td2FpdDsKLQogZXh0ZXJuIHZvaWQgc2VsZWN0X2lkbGVfcm91dGluZShjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZwkJYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2UtYWJpLmggYi9pbmNsdWRlL2FzbS14ODYvcHRyYWNlLWFiaS5oCmluZGV4IGYyMjRlYjMuLjcyZTdiOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2UtYWJpLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3B0cmFjZS1hYmkuaApAQCAtNzMsMTEgKzczLDExIEBACiAKICNpZmRlZiBfX3g4Nl82NF9fCiAjIGRlZmluZSBQVFJBQ0VfQVJDSF9QUkNUTAkgIDMwCi0jZWxzZQotIyBkZWZpbmUgUFRSQUNFX1NZU0VNVQkJICAzMQotIyBkZWZpbmUgUFRSQUNFX1NZU0VNVV9TSU5HTEVTVEVQIDMyCiAjZW5kaWYKIAorI2RlZmluZSBQVFJBQ0VfU1lTRU1VCQkgIDMxCisjZGVmaW5lIFBUUkFDRV9TWVNFTVVfU0lOR0xFU1RFUCAgMzIKKwogI2RlZmluZSBQVFJBQ0VfU0lOR0xFQkxPQ0sJMzMJLyogcmVzdW1lIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyYW5jaCAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NlZ21lbnQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zZWdtZW50LmgKaW5kZXggZGZjODYwMS4uNjQ2NDUyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NlZ21lbnQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc2VnbWVudC5oCkBAIC0xLDYgKzEsMTUgQEAKICNpZm5kZWYgX0FTTV9YODZfU0VHTUVOVF9IXwogI2RlZmluZSBfQVNNX1g4Nl9TRUdNRU5UX0hfCiAKKy8qIENvbnN0cnVjdG9yIGZvciBhIGNvbnZlbnRpb25hbCBzZWdtZW50IEdEVCAob3IgTERUKSBlbnRyeSAqLworLyogVGhpcyBpcyBhIG1hY3JvIHNvIGl0IGNhbiBiZSB1c2VkIGluIGluaXRpYWxpemVycyAqLworI2RlZmluZSBHRFRfRU5UUlkoZmxhZ3MsIGJhc2UsIGxpbWl0KQkJCVwKKwkoKCgoYmFzZSkgICYgMHhmZjAwMDAwMFVMTCkgPDwgKDU2LTI0KSkgfAlcCisJICgoKGZsYWdzKSAmIDB4MDAwMGYwZmZVTEwpIDw8IDQwKSB8CQlcCisJICgoKGxpbWl0KSAmIDB4MDAwZjAwMDBVTEwpIDw8ICg0OC0xNikpIHwJXAorCSAoKChiYXNlKSAgJiAweDAwZmZmZmZmVUxMKSA8PCAxNikgfAkJXAorCSAoKChsaW1pdCkgJiAweDAwMDBmZmZmVUxMKSkpCisKIC8qIFNpbXBsZSBhbmQgc21hbGwgR0RUIGVudHJpZXMgZm9yIGJvb3Rpbmcgb25seSAqLwogCiAjZGVmaW5lIEdEVF9FTlRSWV9CT09UX0NTCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zZXR1cC5oIGIvaW5jbHVkZS9hc20teDg2L3NldHVwLmgKaW5kZXggOTBhYjIyMi4uYTA3YzZmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NldHVwLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3NldHVwLmgKQEAgLTE5LDEzICsxOSwyOCBAQAogLyoKICAqIEFueSBzZXR1cCBxdWlya3MgdG8gYmUgcGVyZm9ybWVkPwogICovCi1leHRlcm4gaW50ICgqYXJjaF90aW1lX2luaXRfcXVpcmspKHZvaWQpOwotZXh0ZXJuIGludCAoKmFyY2hfcHJlX2ludHJfaW5pdF9xdWlyaykodm9pZCk7Ci1leHRlcm4gaW50ICgqYXJjaF9pbnRyX2luaXRfcXVpcmspKHZvaWQpOwotZXh0ZXJuIGludCAoKmFyY2hfdHJhcF9pbml0X3F1aXJrKSh2b2lkKTsKLWV4dGVybiBjaGFyICogKCphcmNoX21lbW9yeV9zZXR1cF9xdWlyaykodm9pZCk7Ci1leHRlcm4gaW50ICgqbWFjaF9nZXRfc21wX2NvbmZpZ19xdWlyaykodW5zaWduZWQgaW50IGVhcmx5KTsKLWV4dGVybiBpbnQgKCptYWNoX2ZpbmRfc21wX2NvbmZpZ19xdWlyaykodW5zaWduZWQgaW50IHJlc2VydmUpOworc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yOworc3RydWN0IG1wY19jb25maWdfYnVzOworc3RydWN0IG1wX2NvbmZpZ19vZW10YWJsZTsKK3N0cnVjdCB4ODZfcXVpcmtzIHsKKwlpbnQgKCphcmNoX3ByZV90aW1lX2luaXQpKHZvaWQpOworCWludCAoKmFyY2hfdGltZV9pbml0KSh2b2lkKTsKKwlpbnQgKCphcmNoX3ByZV9pbnRyX2luaXQpKHZvaWQpOworCWludCAoKmFyY2hfaW50cl9pbml0KSh2b2lkKTsKKwlpbnQgKCphcmNoX3RyYXBfaW5pdCkodm9pZCk7CisJY2hhciAqICgqYXJjaF9tZW1vcnlfc2V0dXApKHZvaWQpOworCWludCAoKm1hY2hfZ2V0X3NtcF9jb25maWcpKHVuc2lnbmVkIGludCBlYXJseSk7CisJaW50ICgqbWFjaF9maW5kX3NtcF9jb25maWcpKHVuc2lnbmVkIGludCByZXNlcnZlKTsKKworCWludCAqbXBjX3JlY29yZDsKKwlpbnQgKCptcGNfYXBpY19pZCkoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptKTsKKwl2b2lkICgqbXBjX29lbV9idXNfaW5mbykoc3RydWN0IG1wY19jb25maWdfYnVzICptLCBjaGFyICpuYW1lKTsKKwl2b2lkICgqbXBjX29lbV9wY2lfYnVzKShzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0pOworCXZvaWQgKCpzbXBfcmVhZF9tcGNfb2VtKShzdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlICpvZW10YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9lbXNpemUpOworfTsKKworZXh0ZXJuIHN0cnVjdCB4ODZfcXVpcmtzICp4ODZfcXVpcmtzOwogCiAjaWZuZGVmIENPTkZJR19QQVJBVklSVAogI2RlZmluZSBwYXJhdmlydF9wb3N0X2FsbG9jYXRvcl9pbml0KCkJZG8ge30gd2hpbGUgKDApCkBAIC03Niw2ICs5MSw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19lbmQ7CiAKICNlbHNlCit2b2lkIF9faW5pdCB4ODZfNjRfaW5pdF9wZGEodm9pZCk7CiB2b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfa2VybmVsKGNoYXIgKnJlYWxfbW9kZSk7CiB2b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfcmVzZXJ2YXRpb25zKGNoYXIgKnJlYWxfbW9kZV9kYXRhKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20teDg2L3NpZ25hbC5oCmluZGV4IGYxNTE4NmQuLjZkYWM0OTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc2lnbmFsLmgKQEAgLTE4MSwxMiArMTgxLDEyIEBACiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CiAKLSNpZmRlZiBfXzM4Nl9fCisjaWZkZWYgX19pMzg2X18KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9TSUdfQklUT1BTCiAKICNkZWZpbmUgc2lnYWRkc2V0KHNldCxzaWcpCQkgICAgXAotCShfX2J1aWx0aW5fY29uc3RhbnRwKHNpZykJICAgIFwKKwkoX19idWlsdGluX2NvbnN0YW50X3Aoc2lnKQkgICAgXAogCSA/IF9fY29uc3Rfc2lnYWRkc2V0KChzZXQpLCAoc2lnKSkgIFwKIAkgOiBfX2dlbl9zaWdhZGRzZXQoKHNldCksIChzaWcpKSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NtcC5oIGIvaW5jbHVkZS9hc20teDg2L3NtcC5oCmluZGV4IGMyNzg0YjMuLjNjODc3ZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc21wLmgKQEAgLTI1LDYgKzI1LDggQEAKIGV4dGVybiB2b2lkICgqbXRycl9ob29rKSh2b2lkKTsKIGV4dGVybiB2b2lkIHphcF9sb3dfbWFwcGluZ3Modm9pZCk7CiAKK2V4dGVybiBpbnQgX19jcHVpbml0IGdldF9sb2NhbF9wZGEoaW50IGNwdSk7CisKIGV4dGVybiBpbnQgc21wX251bV9zaWJsaW5nczsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NvcnM7CiBleHRlcm4gY3B1bWFza190IGNwdV9pbml0aWFsaXplZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20teDg2L3NwaW5sb2NrLmgKaW5kZXggMjFlODliZi4uNGY5YTk4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3NwaW5sb2NrLmgKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogLyoKICAqIFlvdXIgYmFzaWMgU01QIHNwaW5sb2NrcywgYWxsb3dpbmcgb25seSBhIHNpbmdsZSBDUFUgYW55d2hlcmUKICAqCkBAIC01NCwyMSArNTQsMjEgQEAKICAqIG11Y2ggYmV0d2VlbiB0aGVtIGluIHBlcmZvcm1hbmNlIHRob3VnaCwgZXNwZWNpYWxseSBhcyBsb2NrcyBhcmUgb3V0IG9mIGxpbmUuCiAgKi8KICNpZiAoTlJfQ1BVUyA8IDI1NikKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgX190aWNrZXRfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPnNsb2NrKTsKIAogCXJldHVybiAoKCh0bXAgPj4gOCkgJiAweGZmKSAhPSAodG1wICYgMHhmZikpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCWludCB0bXAgPSBBQ0NFU1NfT05DRShsb2NrLT5zbG9jayk7CiAKIAlyZXR1cm4gKCgodG1wID4+IDgpICYgMHhmZikgLSAodG1wICYgMHhmZikpID4gMTsKIH0KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJc2hvcnQgaW5jID0gMHgwMTAwOwogCkBAIC04Nyw5ICs4Nyw3IEBACiAJCTogIm1lbW9yeSIsICJjYyIpOwogfQogCi0jZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCi0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdGlja2V0X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlpbnQgdG1wOwogCXNob3J0IG5ldzsKQEAgLTExMCw3ICsxMDgsNyBAQAogCXJldHVybiB0bXA7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlhc20gdm9sYXRpbGUoVU5MT0NLX0xPQ0tfUFJFRklYICJpbmNiICUwIgogCQkgICAgIDogIittIiAobG9jay0+c2xvY2spCkBAIC0xMTgsMjEgKzExNiwyMSBAQAogCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgX190aWNrZXRfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPnNsb2NrKTsKIAogCXJldHVybiAoKCh0bXAgPj4gMTYpICYgMHhmZmZmKSAhPSAodG1wICYgMHhmZmZmKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfY29udGVuZGVkKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgX190aWNrZXRfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPnNsb2NrKTsKIAogCXJldHVybiAoKCh0bXAgPj4gMTYpICYgMHhmZmZmKSAtICh0bXAgJiAweGZmZmYpKSA+IDE7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCWludCBpbmMgPSAweDAwMDEwMDAwOwogCWludCB0bXA7CkBAIC0xNTMsOSArMTUxLDcgQEAKIAkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKIH0KIAotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3RpY2tldF9zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHRtcDsKIAlpbnQgbmV3OwpAQCAtMTc3LDcgKzE3Myw3IEBACiAJcmV0dXJuIHRtcDsKIH0KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCWFzbSB2b2xhdGlsZShVTkxPQ0tfTE9DS19QUkVGSVggImluY3cgJTAiCiAJCSAgICAgOiAiK20iIChsb2NrLT5zbG9jaykKQEAgLTE4Niw2ICsxODIsOTggQEAKIH0KICNlbmRpZgogCisjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCisKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKy8qCisgKiBEZWZpbmUgdmlydHVhbGl6YXRpb24tZnJpZW5kbHkgb2xkLXN0eWxlIGxvY2sgYnl0ZSBsb2NrLCBmb3IgdXNlIGluCisgKiBwdl9sb2NrX29wcyBpZiBkZXNpcmVkLgorICoKKyAqIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBwcmUtMi42LjI0IHNwaW5sb2NrIGJ5IGFsd2F5cyB1c2luZyB4Y2hnYgorICogcmF0aGVyIHRoYW4gZGVjYiB0byB0YWtlIHRoZSBsb2NrOyB0aGlzIGFsbG93cyBpdCB0byB1c2UgYQorICogemVyby1pbml0aWFsaXplZCBsb2NrIHN0cnVjdHVyZS4gIEl0IGFsc28gbWFpbnRhaW5zIGEgMS1ieXRlCisgKiBjb250ZW50aW9uIGNvdW50ZXIsIHNvIHRoYXQgd2UgY2FuIGltcGxlbWVudAorICogX19ieXRlX3NwaW5faXNfY29udGVuZGVkLgorICovCitzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrIHsKKwlzOCBsb2NrOworCXM4IHNwaW5uZXJzOworfTsKKworc3RhdGljIGlubGluZSBpbnQgX19ieXRlX3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKmJsID0gKHN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKilsb2NrOworCXJldHVybiBibC0+bG9jayAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2J5dGVfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqYmwgPSAoc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqKWxvY2s7CisJcmV0dXJuIGJsLT5zcGlubmVycyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19ieXRlX3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKKwlzOCB2YWwgPSAxOworCisJYXNtKCIxOiB4Y2hnYiAlMSwgJTBcbiIKKwkgICAgIiAgIHRlc3QgJTEsJTFcbiIKKwkgICAgIiAgIGp6IDNmXG4iCisJICAgICIgICAiIExPQ0tfUFJFRklYICJpbmNiICUyXG4iCisJICAgICIyOiByZXA7bm9wXG4iCisJICAgICIgICBjbXBiICQxLCAlMFxuIgorCSAgICAiICAgamUgMmJcbiIKKwkgICAgIiAgICIgTE9DS19QUkVGSVggImRlY2IgJTJcbiIKKwkgICAgIiAgIGptcCAxYlxuIgorCSAgICAiMzoiCisJICAgIDogIittIiAoYmwtPmxvY2spLCAiK3EiICh2YWwpLCAiK20iIChibC0+c3Bpbm5lcnMpOiA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19ieXRlX3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKKwl1OCBvbGQgPSAxOworCisJYXNtKCJ4Y2hnYiAlMSwlMCIKKwkgICAgOiAiK20iIChibC0+bG9jayksICIrcSIgKG9sZCkgOiA6ICJtZW1vcnkiKTsKKworCXJldHVybiBvbGQgPT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fYnl0ZV9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKKwlzbXBfd21iKCk7CisJYmwtPmxvY2sgPSAwOworfQorI2Vsc2UgIC8qICFDT05GSUdfUEFSQVZJUlQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChsb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKGxvY2spOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fbG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX3RyeWxvY2sobG9jayk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3RpY2tldF9zcGluX3VubG9jayhsb2NrKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfUEFSQVZJUlQgKi8KKwogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJd2hpbGUgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NwaW5sb2NrX3R5cGVzLmggYi9pbmNsdWRlL2FzbS14ODYvc3BpbmxvY2tfdHlwZXMuaAppbmRleCA5MDI5Y2Y3Li4wNmMwNzFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3BpbmxvY2tfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc3BpbmxvY2tfdHlwZXMuaApAQCAtNSw3ICs1LDcgQEAKICMgZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKICNlbmRpZgogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCByYXdfc3BpbmxvY2sgewogCXVuc2lnbmVkIGludCBzbG9jazsKIH0gcmF3X3NwaW5sb2NrX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zd2lvdGxiLmggYi9pbmNsdWRlL2FzbS14ODYvc3dpb3RsYi5oCmluZGV4IGY1ZDllNzQuLmM3MDZhNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zd2lvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3N3aW90bGIuaApAQCAtNDUsMTIgKzQ1LDE0IEBACiAKICNpZmRlZiBDT05GSUdfU1dJT1RMQgogZXh0ZXJuIGludCBzd2lvdGxiOworZXh0ZXJuIHZvaWQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHN3aW90bGIgMAorc3RhdGljIGlubGluZSB2b2lkIHBjaV9zd2lvdGxiX2luaXQodm9pZCkKK3sKK30KICNlbmRpZgogCi1leHRlcm4gdm9pZCBwY2lfc3dpb3RsYl9pbml0KHZvaWQpOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX21hcmtfY2xlYW4odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHt9CiAKICNlbmRpZiAvKiBfQVNNX1NXSU9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS14ODYvdGhyZWFkX2luZm8uaAppbmRleCBkNzAxMjYzLi4zZjJkZTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdGhyZWFkX2luZm8uaApAQCAtNzUsOSArNzUsNyBAQAogI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLwogI2RlZmluZSBUSUZfU0lOR0xFU1RFUAkJNAkvKiByZWVuYWJsZSBzaW5nbGVzdGVwIG9uIHVzZXIgcmV0dXJuKi8KICNkZWZpbmUgVElGX0lSRVQJCTUJLyogZm9yY2UgSVJFVCAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKICNkZWZpbmUgVElGX1NZU0NBTExfRU1VCQk2CS8qIHN5c2NhbGwgZW11bGF0aW9uIGFjdGl2ZSAqLwotI2VuZGlmCiAjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTcJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KICNkZWZpbmUgVElGX1NFQ0NPTVAJCTgJLyogc2VjdXJlIGNvbXB1dGluZyAqLwogI2RlZmluZSBUSUZfTUNFX05PVElGWQkJMTAJLyogbm90aWZ5IHVzZXJzcGFjZSBvZiBhbiBNQ0UgKi8KQEAgLTk5LDExICs5Nyw3IEBACiAjZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDEgPDwgVElGX1NJTkdMRVNURVApCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfSVJFVAkJKDEgPDwgVElGX0lSRVQpCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogI2RlZmluZSBfVElGX1NZU0NBTExfRU1VCSgxIDw8IFRJRl9TWVNDQUxMX0VNVSkKLSNlbHNlCi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9FTVUJMAotI2VuZGlmCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSA8PCBUSUZfU1lTQ0FMTF9BVURJVCkKICNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMSA8PCBUSUZfU0VDQ09NUCkKICNkZWZpbmUgX1RJRl9NQ0VfTk9USUZZCQkoMSA8PCBUSUZfTUNFX05PVElGWSkKQEAgLTExOSwxOCArMTEzLDI3IEBACiAjZGVmaW5lIF9USUZfRFNfQVJFQV9NU1IJKDEgPDwgVElGX0RTX0FSRUFfTVNSKQogI2RlZmluZSBfVElGX0JUU19UUkFDRV9UUwkoMSA8PCBUSUZfQlRTX1RSQUNFX1RTKQogCisvKiB3b3JrIHRvIGRvIGluIHN5c2NhbGxfdHJhY2VfZW50ZXIoKSAqLworI2RlZmluZSBfVElGX1dPUktfU1lTQ0FMTF9FTlRSWQlcCisJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9FTVUgfCBcCisJIF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0VDQ09NUCB8IF9USUZfU0lOR0xFU1RFUCkKKworLyogd29yayB0byBkbyBpbiBzeXNjYWxsX3RyYWNlX2xlYXZlKCkgKi8KKyNkZWZpbmUgX1RJRl9XT1JLX1NZU0NBTExfRVhJVAlcCisJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0lOR0xFU1RFUCkKKwogLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJCQkJCQlcCiAJKDB4MDAwMEZGRkYgJgkJCQkJCQlcCi0JIH4oX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NJTkdMRVNURVB8CVwKLQkgX1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9FTVUpKQorCSB+KF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8CQkJXAorCSAgIF9USUZfU0lOR0xFU1RFUHxfVElGX1NFQ0NPTVB8X1RJRl9TWVNDQUxMX0VNVSkpCiAKIC8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1c2VyIHNwYWNlICovCiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLICgweDAwMDBGRkZGICYgfl9USUZfU0VDQ09NUCkKIAogLyogT25seSB1c2VkIGZvciA2NCBiaXQgKi8KICNkZWZpbmUgX1RJRl9ET19OT1RJRllfTUFTSwkJCQkJCVwKLQkoX1RJRl9TSUdQRU5ESU5HfF9USUZfU0lOR0xFU1RFUHxfVElGX01DRV9OT1RJRlkpCisJKF9USUZfU0lHUEVORElOR3xfVElGX01DRV9OT1RJRlkpCiAKIC8qIGZsYWdzIHRvIGNoZWNrIGluIF9fc3dpdGNoX3RvKCkgKi8KICNkZWZpbmUgX1RJRl9XT1JLX0NUWFNXCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni90cmFwcy5oIGIvaW5jbHVkZS9hc20teDg2L3RyYXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiNjVhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni90cmFwcy5oCkBAIC0wLDAgKzEsNjYgQEAKKyNpZm5kZWYgX0FTTV9YODZfVFJBUFNfSAorI2RlZmluZSBfQVNNX1g4Nl9UUkFQU19ICisKKy8qIENvbW1vbiBpbiBYODZfMzIgYW5kIFg4Nl82NCAqLworYXNtbGlua2FnZSB2b2lkIGRpdmlkZV9lcnJvcih2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBkZWJ1Zyh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBubWkodm9pZCk7Cithc21saW5rYWdlIHZvaWQgaW50Myh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBvdmVyZmxvdyh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBib3VuZHModm9pZCk7Cithc21saW5rYWdlIHZvaWQgaW52YWxpZF9vcCh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBkZXZpY2Vfbm90X2F2YWlsYWJsZSh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4odm9pZCk7Cithc21saW5rYWdlIHZvaWQgaW52YWxpZF9UU1Modm9pZCk7Cithc21saW5rYWdlIHZvaWQgc2VnbWVudF9ub3RfcHJlc2VudCh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBzdGFja19zZWdtZW50KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIGdlbmVyYWxfcHJvdGVjdGlvbih2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBwYWdlX2ZhdWx0KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIGNvcHJvY2Vzc29yX2Vycm9yKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHNpbWRfY29wcm9jZXNzb3JfZXJyb3Iodm9pZCk7Cithc21saW5rYWdlIHZvaWQgYWxpZ25tZW50X2NoZWNrKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHNwdXJpb3VzX2ludGVycnVwdF9idWcodm9pZCk7CisjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKK2FzbWxpbmthZ2Ugdm9pZCBtYWNoaW5lX2NoZWNrKHZvaWQpOworI2VuZGlmIC8qIENPTkZJR19YODZfTUNFICovCisKK3ZvaWQgZG9fZGl2aWRlX2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwordm9pZCBkb19vdmVyZmxvdyhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK3ZvaWQgZG9fYm91bmRzKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwordm9pZCBkb19jb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4oc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Cit2b2lkIGRvX2ludmFsaWRfVFNTKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwordm9pZCBkb19zZWdtZW50X25vdF9wcmVzZW50KHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwordm9pZCBkb19zdGFja19zZWdtZW50KHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwordm9pZCBkb19hbGlnbm1lbnRfY2hlY2soc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Cit2b2lkIGRvX2ludmFsaWRfb3Aoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Cit2b2lkIGRvX2dlbmVyYWxfcHJvdGVjdGlvbihzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK3ZvaWQgZG9fbm1pKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworCitleHRlcm4gaW50IHBhbmljX29uX3VucmVjb3ZlcmVkX25taTsKK2V4dGVybiBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50OworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCit2b2lkIGRvX2lyZXRfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Cit2b2lkIGRvX2ludDMoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Cit2b2lkIGRvX2RlYnVnKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwordm9pZCBtYXRoX2Vycm9yKHZvaWQgX191c2VyICopOwordm9pZCBkb19jb3Byb2Nlc3Nvcl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK3ZvaWQgZG9fc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK3ZvaWQgZG9fc3B1cmlvdXNfaW50ZXJydXB0X2J1ZyhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK3Vuc2lnbmVkIGxvbmcgcGF0Y2hfZXNwZml4X2Rlc2ModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cithc21saW5rYWdlIHZvaWQgbWF0aF9lbXVsYXRlKGxvbmcpOworCisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCisKK2FzbWxpbmthZ2Ugdm9pZCBkb3VibGVfZmF1bHQodm9pZCk7CisKK2FzbWxpbmthZ2Ugdm9pZCBkb19pbnQzKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworYXNtbGlua2FnZSB2b2lkIGRvX3N0YWNrX3NlZ21lbnQoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Cithc21saW5rYWdlIHZvaWQgZG9fZGVidWcoc3RydWN0IHB0X3JlZ3MgKiwgdW5zaWduZWQgbG9uZyk7Cithc21saW5rYWdlIHZvaWQgZG9fY29wcm9jZXNzb3JfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKik7Cithc21saW5rYWdlIHZvaWQgZG9fc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19zcHVyaW91c19pbnRlcnJ1cHRfYnVnKHN0cnVjdCBwdF9yZWdzICopOworCisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworI2VuZGlmIC8qIF9BU01fWDg2X1RSQVBTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91di9iaW9zLmggYi9pbmNsdWRlL2FzbS14ODYvdXYvYmlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzMzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODYvdXYvYmlvcy5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX0FTTV9YODZfQklPU19ICisjZGVmaW5lIF9BU01fWDg2X0JJT1NfSAorCisvKgorICogQklPUyBsYXllciBkZWZpbml0aW9ucy4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisKKyNkZWZpbmUgQklPU19GUkVRX0JBU0UJCQkweDAxMDAwMDAxCisKK2VudW0geworCUJJT1NfRlJFUV9CQVNFX1BMQVRGT1JNID0gMCwKKwlCSU9TX0ZSRVFfQkFTRV9JTlRFUlZBTF9USU1FUiA9IDEsCisJQklPU19GUkVRX0JBU0VfUkVBTFRJTUVfQ0xPQ0sgPSAyCit9OworCisjIGRlZmluZSBCSU9TX0NBTEwocmVzdWx0LCBhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpCQlcCisJZG8gewkJCQkJCQkJXAorCQkvKiBYWFggLSB0aGUgcmVhbCBjYWxsIGdvZXMgaGVyZSAqLwkJCVwKKwkJcmVzdWx0LnN0YXR1cyA9IEJJT1NfU1RBVFVTX1VOSU1QTEVNRU5URUQ7CQlcCisJCWlzcnYudjAgPSAwOwkJCQkJCVwKKwkJaXNydi52MSA9IDA7CQkJCQkJXAorCX0gd2hpbGUgKDApCisKK2VudW0geworCUJJT1NfU1RBVFVTX1NVQ0NFU1MJCT0gIDAsCisJQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRAk9IC0xLAorCUJJT1NfU1RBVFVTX0VJTlZBTAkJPSAtMiwKKwlCSU9TX1NUQVRVU19FUlJPUgkJPSAtMworfTsKKworc3RydWN0IHV2X2Jpb3NfcmV0dmFsIHsKKwkvKgorCSAqIEEgemVybyBzdGF0dXMgdmFsdWUgaW5kaWNhdGVzIGNhbGwgY29tcGxldGVkIHdpdGhvdXQgZXJyb3IuCisJICogQSBuZWdhdGl2ZSBzdGF0dXMgdmFsdWUgaW5kaWNhdGVzIHJlYXNvbiBvZiBjYWxsIGZhaWx1cmUuCisJICogQSBwb3NpdGl2ZSBzdGF0dXMgdmFsdWUgaW5kaWNhdGVzIHN1Y2Nlc3MgYnV0IGFuCisJICogaW5mb3JtYXRpb25hbCB2YWx1ZSBzaG91bGQgYmUgcHJpbnRlZCAoZS5nLiwgInJlYm9vdCBmb3IKKwkgKiBjaGFuZ2UgdG8gdGFrZSBlZmZlY3QiKS4KKwkgKi8KKwlzNjQgc3RhdHVzOworCXU2NCB2MDsKKwl1NjQgdjE7CisJdTY0IHYyOworfTsKKworZXh0ZXJuIGxvbmcKK3g4Nl9iaW9zX2ZyZXFfYmFzZSh1bnNpZ25lZCBsb25nIHdoaWNoLCB1bnNpZ25lZCBsb25nICp0aWNrc19wZXJfc2Vjb25kLAorCQkgICB1bnNpZ25lZCBsb25nICpkcmlmdF9pbmZvKTsKK2V4dGVybiBjb25zdCBjaGFyICp4ODZfYmlvc19zdHJlcnJvcihsb25nIHN0YXR1cyk7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9CSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni92ZHNvLmggYi9pbmNsdWRlL2FzbS14ODYvdmRzby5oCmluZGV4IDg2ZTA4NWUuLjhlMThmYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni92ZHNvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3Zkc28uaApAQCAtMzYsNCArMzYsMTIgQEAKIGV4dGVybiB2b2lkIF9fdXNlciBfX2tlcm5lbF9zaWdyZXR1cm47CiBleHRlcm4gdm9pZCBfX3VzZXIgX19rZXJuZWxfcnRfc2lncmV0dXJuOwogCisvKgorICogVGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCBieSB2ZHNvMzIuUyB0byBtYXJrIHRoZSBib3VuZHMKKyAqIG9mIHRoZSBFTEYgRFNPIGltYWdlcyBpbmNsdWRlZCB0aGVyZWluLgorICovCitleHRlcm4gY29uc3QgY2hhciB2ZHNvMzJfaW50ODBfc3RhcnQsIHZkc28zMl9pbnQ4MF9lbmQ7CitleHRlcm4gY29uc3QgY2hhciB2ZHNvMzJfc3lzY2FsbF9zdGFydCwgdmRzbzMyX3N5c2NhbGxfZW5kOworZXh0ZXJuIGNvbnN0IGNoYXIgdmRzbzMyX3N5c2VudGVyX3N0YXJ0LCB2ZHNvMzJfc3lzZW50ZXJfZW5kOworCiAjZW5kaWYJLyogYXNtLXg4Ni92ZHNvLmggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vZXZlbnRzLmggYi9pbmNsdWRlL2FzbS14ODYveGVuL2V2ZW50cy5oCmluZGV4IGY4ZDU3ZWEuLjhkZWQ3NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vZXZlbnRzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3hlbi9ldmVudHMuaApAQCAtNSw2ICs1LDcgQEAKIAlYRU5fUkVTQ0hFRFVMRV9WRUNUT1IsCiAJWEVOX0NBTExfRlVOQ1RJT05fVkVDVE9SLAogCVhFTl9DQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IsCisJWEVOX1NQSU5fVU5MT0NLX1ZFQ1RPUiwKIAogCVhFTl9OUl9JUElTLAogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vaHlwZXJjYWxsLmggYi9pbmNsdWRlL2FzbS14ODYveGVuL2h5cGVyY2FsbC5oCmluZGV4IDJhNGY5YjQuLjkxY2I3ZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vaHlwZXJjYWxsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3hlbi9oeXBlcmNhbGwuaApAQCAtNDAsODMgKzQwLDE1NyBAQAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uvc2NoZWQuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3BoeXNkZXYuaD4KIAorLyoKKyAqIFRoZSBoeXBlcmNhbGwgYXNtcyBoYXZlIHRvIG1lZXQgc2V2ZXJhbCBjb25zdHJhaW50czoKKyAqIC0gV29yayBvbiAzMi0gYW5kIDY0LWJpdC4KKyAqICAgIFRoZSB0d28gYXJjaGl0ZWN0dXJlcyBwdXQgdGhlaXIgYXJndW1lbnRzIGluIGRpZmZlcmVudCBzZXRzIG9mCisgKiAgICByZWdpc3RlcnMuCisgKgorICogLSBXb3JrIGFyb3VuZCBhc20gc3ludGF4IHF1aXJrcworICogICAgSXQgaXNuJ3QgcG9zc2libGUgdG8gc3BlY2lmeSBvbmUgb2YgdGhlIHJOTiByZWdpc3RlcnMgaW4gYQorICogICAgY29uc3RyYWludCwgc28gd2UgdXNlIGV4cGxpY2l0IHJlZ2lzdGVyIHZhcmlhYmxlcyB0byBnZXQgdGhlCisgKiAgICBhcmdzIGludG8gdGhlIHJpZ2h0IHBsYWNlLgorICoKKyAqIC0gTWFyayBhbGwgcmVnaXN0ZXJzIGFzIHBvdGVudGlhbGx5IGNsb2JiZXJlZAorICogICAgRXZlbiB1bnVzZWQgcGFyYW1ldGVycyBjYW4gYmUgY2xvYmJlcmVkIGJ5IHRoZSBoeXBlcnZpc29yLCBzbyB3ZQorICogICAgbmVlZCB0byBtYWtlIHN1cmUgZ2NjIGtub3dzIGl0LgorICoKKyAqIC0gQXZvaWQgY29tcGlsZXIgYnVncy4KKyAqICAgIFRoaXMgaXMgdGhlIHRyaWNreSBwYXJ0LiAgQmVjYXVzZSB4ODZfMzIgaGFzIHN1Y2ggYSBjb25zdHJhaW5lZAorICogICAgcmVnaXN0ZXIgc2V0LCBnY2MgdmVyc2lvbnMgYmVsb3cgNC4zIGhhdmUgdHJvdWJsZSBnZW5lcmF0aW5nCisgKiAgICBjb2RlIHdoZW4gYWxsIHRoZSBhcmcgcmVnaXN0ZXJzIGFuZCBtZW1vcnkgYXJlIHRyYXNoZWQgYnkgdGhlCisgKiAgICBhc20uICBUaGVyZSBhcmUgc3ludGFjdGljYWxseSBzaW1wbGVyIHdheXMgb2YgYWNoaWV2aW5nIHRoZQorICogICAgc2VtYW50aWNzIGJlbG93LCBidXQgdGhleSBjYXVzZSB0aGUgY29tcGlsZXIgdG8gY3Jhc2guCisgKgorICogICAgVGhlIG9ubHkgY29tYmluYXRpb24gSSBmb3VuZCB3aGljaCB3b3JrcyBpczoKKyAqICAgICAtIGFzc2lnbiB0aGUgX19hcmdYIHZhcmlhYmxlcyBmaXJzdAorICogICAgIC0gbGlzdCBhbGwgYWN0dWFsbHkgdXNlZCBwYXJhbWV0ZXJzIGFzICIrciIgKF9fYXJnWCkKKyAqICAgICAtIGNsb2JiZXIgdGhlIHJlc3QKKyAqCisgKiBUaGUgcmVzdWx0IGNlcnRhaW5seSBpc24ndCBwcmV0dHksIGFuZCBpdCByZWFsbHkgc2hvd3MgdXAgY3BwJ3MKKyAqIHdlYWtuZXNzIGFzIGFzIG1hY3JvIGxhbmd1YWdlLiAgU29ycnkuICAoQnV0IGxldCdzIGp1c3QgZ2l2ZSB0aGFua3MKKyAqIHRoZXJlIGFyZW4ndCBtb3JlIHRoYW4gNSBhcmd1bWVudHMuLi4pCisgKi8KKwogZXh0ZXJuIHN0cnVjdCB7IGNoYXIgX2VudHJ5WzMyXTsgfSBoeXBlcmNhbGxfcGFnZVtdOwogCisjZGVmaW5lIF9fSFlQRVJDQUxMCQkiY2FsbCBoeXBlcmNhbGxfcGFnZSslY1tvZmZzZXRdIgorI2RlZmluZSBfX0hZUEVSQ0FMTF9FTlRSWSh4KQkJCQkJCVwKKwlbb2Zmc2V0XSAiaSIgKF9fSFlQRVJWSVNPUl8jI3ggKiBzaXplb2YoaHlwZXJjYWxsX3BhZ2VbMF0pKQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBfX0hZUEVSQ0FMTF9SRVRSRUcJImVheCIKKyNkZWZpbmUgX19IWVBFUkNBTExfQVJHMVJFRwkiZWJ4IgorI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkcyUkVHCSJlY3giCisjZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzNSRUcJImVkeCIKKyNkZWZpbmUgX19IWVBFUkNBTExfQVJHNFJFRwkiZXNpIgorI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkc1UkVHCSJlZGkiCisjZWxzZQorI2RlZmluZSBfX0hZUEVSQ0FMTF9SRVRSRUcJInJheCIKKyNkZWZpbmUgX19IWVBFUkNBTExfQVJHMVJFRwkicmRpIgorI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkcyUkVHCSJyc2kiCisjZGVmaW5lIF9fSFlQRVJDQUxMX0FSRzNSRUcJInJkeCIKKyNkZWZpbmUgX19IWVBFUkNBTExfQVJHNFJFRwkicjEwIgorI2RlZmluZSBfX0hZUEVSQ0FMTF9BUkc1UkVHCSJyOCIKKyNlbmRpZgorCisjZGVmaW5lIF9fSFlQRVJDQUxMX0RFQ0xTCQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yZXMgIGFzbShfX0hZUEVSQ0FMTF9SRVRSRUcpOwkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hcmcxIGFzbShfX0hZUEVSQ0FMTF9BUkcxUkVHKSA9IF9fYXJnMTsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hcmcyIGFzbShfX0hZUEVSQ0FMTF9BUkcyUkVHKSA9IF9fYXJnMjsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hcmczIGFzbShfX0hZUEVSQ0FMTF9BUkczUkVHKSA9IF9fYXJnMzsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hcmc0IGFzbShfX0hZUEVSQ0FMTF9BUkc0UkVHKSA9IF9fYXJnNDsgXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hcmc1IGFzbShfX0hZUEVSQ0FMTF9BUkc1UkVHKSA9IF9fYXJnNTsKKworI2RlZmluZSBfX0hZUEVSQ0FMTF8wUEFSQU0JIj1yIiAoX19yZXMpCisjZGVmaW5lIF9fSFlQRVJDQUxMXzFQQVJBTQlfX0hZUEVSQ0FMTF8wUEFSQU0sICIrciIgKF9fYXJnMSkKKyNkZWZpbmUgX19IWVBFUkNBTExfMlBBUkFNCV9fSFlQRVJDQUxMXzFQQVJBTSwgIityIiAoX19hcmcyKQorI2RlZmluZSBfX0hZUEVSQ0FMTF8zUEFSQU0JX19IWVBFUkNBTExfMlBBUkFNLCAiK3IiIChfX2FyZzMpCisjZGVmaW5lIF9fSFlQRVJDQUxMXzRQQVJBTQlfX0hZUEVSQ0FMTF8zUEFSQU0sICIrciIgKF9fYXJnNCkKKyNkZWZpbmUgX19IWVBFUkNBTExfNVBBUkFNCV9fSFlQRVJDQUxMXzRQQVJBTSwgIityIiAoX19hcmc1KQorCisjZGVmaW5lIF9fSFlQRVJDQUxMXzBBUkcoKQorI2RlZmluZSBfX0hZUEVSQ0FMTF8xQVJHKGExKQkJCQkJCVwKKwlfX0hZUEVSQ0FMTF8wQVJHKCkJCV9fYXJnMSA9ICh1bnNpZ25lZCBsb25nKShhMSk7CisjZGVmaW5lIF9fSFlQRVJDQUxMXzJBUkcoYTEsYTIpCQkJCQkJXAorCV9fSFlQRVJDQUxMXzFBUkcoYTEpCQlfX2FyZzIgPSAodW5zaWduZWQgbG9uZykoYTIpOworI2RlZmluZSBfX0hZUEVSQ0FMTF8zQVJHKGExLGEyLGEzKQkJCQkJXAorCV9fSFlQRVJDQUxMXzJBUkcoYTEsYTIpCQlfX2FyZzMgPSAodW5zaWduZWQgbG9uZykoYTMpOworI2RlZmluZSBfX0hZUEVSQ0FMTF80QVJHKGExLGEyLGEzLGE0KQkJCQkJXAorCV9fSFlQRVJDQUxMXzNBUkcoYTEsYTIsYTMpCV9fYXJnNCA9ICh1bnNpZ25lZCBsb25nKShhNCk7CisjZGVmaW5lIF9fSFlQRVJDQUxMXzVBUkcoYTEsYTIsYTMsYTQsYTUpCQkJCVwKKwlfX0hZUEVSQ0FMTF80QVJHKGExLGEyLGEzLGE0KQlfX2FyZzUgPSAodW5zaWduZWQgbG9uZykoYTUpOworCisjZGVmaW5lIF9fSFlQRVJDQUxMX0NMT0JCRVI1CSJtZW1vcnkiCisjZGVmaW5lIF9fSFlQRVJDQUxMX0NMT0JCRVI0CV9fSFlQRVJDQUxMX0NMT0JCRVI1LCBfX0hZUEVSQ0FMTF9BUkc1UkVHCisjZGVmaW5lIF9fSFlQRVJDQUxMX0NMT0JCRVIzCV9fSFlQRVJDQUxMX0NMT0JCRVI0LCBfX0hZUEVSQ0FMTF9BUkc0UkVHCisjZGVmaW5lIF9fSFlQRVJDQUxMX0NMT0JCRVIyCV9fSFlQRVJDQUxMX0NMT0JCRVIzLCBfX0hZUEVSQ0FMTF9BUkczUkVHCisjZGVmaW5lIF9fSFlQRVJDQUxMX0NMT0JCRVIxCV9fSFlQRVJDQUxMX0NMT0JCRVIyLCBfX0hZUEVSQ0FMTF9BUkcyUkVHCisjZGVmaW5lIF9fSFlQRVJDQUxMX0NMT0JCRVIwCV9fSFlQRVJDQUxMX0NMT0JCRVIxLCBfX0hZUEVSQ0FMTF9BUkcxUkVHCisKICNkZWZpbmUgX2h5cGVyY2FsbDAodHlwZSwgbmFtZSkJCQkJCQlcCiAoewkJCQkJCQkJCVwKLQlsb25nIF9fcmVzOwkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlICgJCQkJCQkJXAotCQkiY2FsbCAlW2NhbGxdIgkJCQkJCVwKLQkJOiAiPWEiIChfX3JlcykJCQkJCQlcCi0JCTogW2NhbGxdICJtIiAoaHlwZXJjYWxsX3BhZ2VbX19IWVBFUlZJU09SXyMjbmFtZV0pCVwKLQkJOiAibWVtb3J5IiApOwkJCQkJCVwKKwlfX0hZUEVSQ0FMTF9ERUNMUzsJCQkJCQlcCisJX19IWVBFUkNBTExfMEFSRygpOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKF9fSFlQRVJDQUxMCQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfMFBBUkFNCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF9FTlRSWShuYW1lKQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfQ0xPQkJFUjApOwkJCQlcCiAJKHR5cGUpX19yZXM7CQkJCQkJCVwKIH0pCiAKICNkZWZpbmUgX2h5cGVyY2FsbDEodHlwZSwgbmFtZSwgYTEpCQkJCQlcCiAoewkJCQkJCQkJCVwKLQlsb25nIF9fcmVzLCBfX2lnbjE7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSAoCQkJCQkJCVwKLQkJImNhbGwgJVtjYWxsXSIJCQkJCQlcCi0JCTogIj1hIiAoX19yZXMpLCAiPWIiIChfX2lnbjEpCQkJCVwKLQkJOiAiMSIgKChsb25nKShhMSkpLAkJCQkJXAotCQkgIFtjYWxsXSAibSIgKGh5cGVyY2FsbF9wYWdlW19fSFlQRVJWSVNPUl8jI25hbWVdKQlcCi0JCTogIm1lbW9yeSIgKTsJCQkJCQlcCisJX19IWVBFUkNBTExfREVDTFM7CQkJCQkJXAorCV9fSFlQRVJDQUxMXzFBUkcoYTEpOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKF9fSFlQRVJDQUxMCQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfMVBBUkFNCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF9FTlRSWShuYW1lKQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfQ0xPQkJFUjEpOwkJCQlcCiAJKHR5cGUpX19yZXM7CQkJCQkJCVwKIH0pCiAKICNkZWZpbmUgX2h5cGVyY2FsbDIodHlwZSwgbmFtZSwgYTEsIGEyKQkJCQkJXAogKHsJCQkJCQkJCQlcCi0JbG9uZyBfX3JlcywgX19pZ24xLCBfX2lnbjI7CQkJCQlcCi0JYXNtIHZvbGF0aWxlICgJCQkJCQkJXAotCQkiY2FsbCAlW2NhbGxdIgkJCQkJCVwKLQkJOiAiPWEiIChfX3JlcyksICI9YiIgKF9faWduMSksICI9YyIgKF9faWduMikJCVwKLQkJOiAiMSIgKChsb25nKShhMSkpLCAiMiIgKChsb25nKShhMikpLAkJCVwKLQkJICBbY2FsbF0gIm0iIChoeXBlcmNhbGxfcGFnZVtfX0hZUEVSVklTT1JfIyNuYW1lXSkJXAotCQk6ICJtZW1vcnkiICk7CQkJCQkJXAorCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKKwlfX0hZUEVSQ0FMTF8yQVJHKGExLCBhMik7CQkJCQlcCisJYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMXzJQQVJBTQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVIyKTsJCQkJXAogCSh0eXBlKV9fcmVzOwkJCQkJCQlcCiB9KQogCiAjZGVmaW5lIF9oeXBlcmNhbGwzKHR5cGUsIG5hbWUsIGExLCBhMiwgYTMpCQkJCVwKICh7CQkJCQkJCQkJXAotCWxvbmcgX19yZXMsIF9faWduMSwgX19pZ24yLCBfX2lnbjM7CQkJCVwKLQlhc20gdm9sYXRpbGUgKAkJCQkJCQlcCi0JCSJjYWxsICVbY2FsbF0iCQkJCQkJXAotCQk6ICI9YSIgKF9fcmVzKSwgIj1iIiAoX19pZ24xKSwgIj1jIiAoX19pZ24yKSwJCVwKLQkJIj1kIiAoX19pZ24zKQkJCQkJCVwKLQkJOiAiMSIgKChsb25nKShhMSkpLCAiMiIgKChsb25nKShhMikpLAkJCVwKLQkJICAiMyIgKChsb25nKShhMykpLAkJCQkJXAotCQkgIFtjYWxsXSAibSIgKGh5cGVyY2FsbF9wYWdlW19fSFlQRVJWSVNPUl8jI25hbWVdKQlcCi0JCTogIm1lbW9yeSIgKTsJCQkJCQlcCisJX19IWVBFUkNBTExfREVDTFM7CQkJCQkJXAorCV9fSFlQRVJDQUxMXzNBUkcoYTEsIGEyLCBhMyk7CQkJCQlcCisJYXNtIHZvbGF0aWxlIChfX0hZUEVSQ0FMTAkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMXzNQQVJBTQkJCQlcCisJCSAgICAgIDogX19IWVBFUkNBTExfRU5UUlkobmFtZSkJCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0NMT0JCRVIzKTsJCQkJXAogCSh0eXBlKV9fcmVzOwkJCQkJCQlcCiB9KQogCiAjZGVmaW5lIF9oeXBlcmNhbGw0KHR5cGUsIG5hbWUsIGExLCBhMiwgYTMsIGE0KQkJCQlcCiAoewkJCQkJCQkJCVwKLQlsb25nIF9fcmVzLCBfX2lnbjEsIF9faWduMiwgX19pZ24zLCBfX2lnbjQ7CQkJXAotCWFzbSB2b2xhdGlsZSAoCQkJCQkJCVwKLQkJImNhbGwgJVtjYWxsXSIJCQkJCQlcCi0JCTogIj1hIiAoX19yZXMpLCAiPWIiIChfX2lnbjEpLCAiPWMiIChfX2lnbjIpLAkJXAotCQkiPWQiIChfX2lnbjMpLCAiPVMiIChfX2lnbjQpCQkJCVwKLQkJOiAiMSIgKChsb25nKShhMSkpLCAiMiIgKChsb25nKShhMikpLAkJCVwKLQkJICAiMyIgKChsb25nKShhMykpLCAiNCIgKChsb25nKShhNCkpLAkJCVwKLQkJICBbY2FsbF0gIm0iIChoeXBlcmNhbGxfcGFnZVtfX0hZUEVSVklTT1JfIyNuYW1lXSkJXAotCQk6ICJtZW1vcnkiICk7CQkJCQkJXAorCV9fSFlQRVJDQUxMX0RFQ0xTOwkJCQkJCVwKKwlfX0hZUEVSQ0FMTF80QVJHKGExLCBhMiwgYTMsIGE0KTsJCQkJXAorCWFzbSB2b2xhdGlsZSAoX19IWVBFUkNBTEwJCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF80UEFSQU0JCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0VOVFJZKG5hbWUpCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF9DTE9CQkVSNCk7CQkJCVwKIAkodHlwZSlfX3JlczsJCQkJCQkJXAogfSkKIAogI2RlZmluZSBfaHlwZXJjYWxsNSh0eXBlLCBuYW1lLCBhMSwgYTIsIGEzLCBhNCwgYTUpCQkJXAogKHsJCQkJCQkJCQlcCi0JbG9uZyBfX3JlcywgX19pZ24xLCBfX2lnbjIsIF9faWduMywgX19pZ240LCBfX2lnbjU7CQlcCi0JYXNtIHZvbGF0aWxlICgJCQkJCQkJXAotCQkiY2FsbCAlW2NhbGxdIgkJCQkJCVwKLQkJOiAiPWEiIChfX3JlcyksICI9YiIgKF9faWduMSksICI9YyIgKF9faWduMiksCQlcCi0JCSI9ZCIgKF9faWduMyksICI9UyIgKF9faWduNCksICI9RCIgKF9faWduNSkJCVwKLQkJOiAiMSIgKChsb25nKShhMSkpLCAiMiIgKChsb25nKShhMikpLAkJCVwKLQkJICAiMyIgKChsb25nKShhMykpLCAiNCIgKChsb25nKShhNCkpLAkJCVwKLQkJICAiNSIgKChsb25nKShhNSkpLAkJCQkJXAotCQkgIFtjYWxsXSAibSIgKGh5cGVyY2FsbF9wYWdlW19fSFlQRVJWSVNPUl8jI25hbWVdKQlcCi0JCTogIm1lbW9yeSIgKTsJCQkJCQlcCisJX19IWVBFUkNBTExfREVDTFM7CQkJCQkJXAorCV9fSFlQRVJDQUxMXzVBUkcoYTEsIGEyLCBhMywgYTQsIGE1KTsJCQkJXAorCWFzbSB2b2xhdGlsZSAoX19IWVBFUkNBTEwJCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF81UEFSQU0JCQkJXAorCQkgICAgICA6IF9fSFlQRVJDQUxMX0VOVFJZKG5hbWUpCQkJCVwKKwkJICAgICAgOiBfX0hZUEVSQ0FMTF9DTE9CQkVSNSk7CQkJCVwKIAkodHlwZSlfX3JlczsJCQkJCQkJXAogfSkKIApAQCAtMTUyLDYgKzIyNiw3IEBACiAJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc3RhY2tfc3dpdGNoLCBzcywgZXNwKTsKIH0KIAorI2lmZGVmIENPTkZJR19YODZfMzIKIHN0YXRpYyBpbmxpbmUgaW50CiBIWVBFUlZJU09SX3NldF9jYWxsYmFja3ModW5zaWduZWQgbG9uZyBldmVudF9zZWxlY3RvciwKIAkJCSB1bnNpZ25lZCBsb25nIGV2ZW50X2FkZHJlc3MsCkBAIC0xNjIsNiArMjM3LDE3IEBACiAJCQkgICBldmVudF9zZWxlY3RvciwgZXZlbnRfYWRkcmVzcywKIAkJCSAgIGZhaWxzYWZlX3NlbGVjdG9yLCBmYWlsc2FmZV9hZGRyZXNzKTsKIH0KKyNlbHNlICAvKiBDT05GSUdfWDg2XzY0ICovCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9zZXRfY2FsbGJhY2tzKHVuc2lnbmVkIGxvbmcgZXZlbnRfYWRkcmVzcywKKwkJCXVuc2lnbmVkIGxvbmcgZmFpbHNhZmVfYWRkcmVzcywKKwkJCXVuc2lnbmVkIGxvbmcgc3lzY2FsbF9hZGRyZXNzKQoreworCXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIHNldF9jYWxsYmFja3MsCisJCQkgICBldmVudF9hZGRyZXNzLCBmYWlsc2FmZV9hZGRyZXNzLAorCQkJICAgc3lzY2FsbF9hZGRyZXNzKTsKK30KKyNlbmRpZiAgLyogQ09ORklHX1g4Nl97MzIsNjR9ICovCiAKIHN0YXRpYyBpbmxpbmUgaW50CiBIWVBFUlZJU09SX2NhbGxiYWNrX29wKGludCBjbWQsIHZvaWQgKmFyZykKQEAgLTIyMywxMiArMzA5LDEyIEBACiBIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmEsIHB0ZV90IG5ld192YWwsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBwdGVfaGkgPSAwOwotI2lmZGVmIENPTkZJR19YODZfUEFFCi0JcHRlX2hpID0gbmV3X3ZhbC5wdGVfaGlnaDsKLSNlbmRpZgotCXJldHVybiBfaHlwZXJjYWxsNChpbnQsIHVwZGF0ZV92YV9tYXBwaW5nLCB2YSwKLQkJCSAgIG5ld192YWwucHRlX2xvdywgcHRlX2hpLCBmbGFncyk7CisJaWYgKHNpemVvZihuZXdfdmFsKSA9PSBzaXplb2YobG9uZykpCisJCXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIHVwZGF0ZV92YV9tYXBwaW5nLCB2YSwKKwkJCQkgICBuZXdfdmFsLnB0ZSwgZmxhZ3MpOworCWVsc2UKKwkJcmV0dXJuIF9oeXBlcmNhbGw0KGludCwgdXBkYXRlX3ZhX21hcHBpbmcsIHZhLAorCQkJCSAgIG5ld192YWwucHRlLCBuZXdfdmFsLnB0ZSA+PiAzMiwgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMjgxLDEyICszNjcsMTMgQEAKIEhZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21haW4odW5zaWduZWQgbG9uZyB2YSwgcHRlX3QgbmV3X3ZhbCwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGRvbWlkX3QgZG9taWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBwdGVfaGkgPSAwOwotI2lmZGVmIENPTkZJR19YODZfUEFFCi0JcHRlX2hpID0gbmV3X3ZhbC5wdGVfaGlnaDsKLSNlbmRpZgotCXJldHVybiBfaHlwZXJjYWxsNShpbnQsIHVwZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluLCB2YSwKLQkJCSAgIG5ld192YWwucHRlX2xvdywgcHRlX2hpLCBmbGFncywgZG9taWQpOworCWlmIChzaXplb2YobmV3X3ZhbCkgPT0gc2l6ZW9mKGxvbmcpKQorCQlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCB1cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbiwgdmEsCisJCQkJICAgbmV3X3ZhbC5wdGUsIGZsYWdzLCBkb21pZCk7CisJZWxzZQorCQlyZXR1cm4gX2h5cGVyY2FsbDUoaW50LCB1cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbiwgdmEsCisJCQkJICAgbmV3X3ZhbC5wdGUsIG5ld192YWwucHRlID4+IDMyLAorCQkJCSAgIGZsYWdzLCBkb21pZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0zMDEsNiArMzg4LDE0IEBACiAJcmV0dXJuIF9oeXBlcmNhbGwzKGludCwgdmNwdV9vcCwgY21kLCB2Y3B1aWQsIGV4dHJhX2FyZ3MpOwogfQogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfc2V0X3NlZ21lbnRfYmFzZShpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHNldF9zZWdtZW50X2Jhc2UsIHJlZywgdmFsdWUpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgaW50CiBIWVBFUlZJU09SX3N1c3BlbmQodW5zaWduZWQgbG9uZyBzcmVjKQogewpAQCAtMzI3LDE0ICs0MjIsMTQgQEAKIHsKIAltY2wtPm9wID0gX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nOwogCW1jbC0+YXJnc1swXSA9IHZhOwotI2lmZGVmIENPTkZJR19YODZfUEFFCi0JbWNsLT5hcmdzWzFdID0gbmV3X3ZhbC5wdGVfbG93OwotCW1jbC0+YXJnc1syXSA9IG5ld192YWwucHRlX2hpZ2g7Ci0jZWxzZQotCW1jbC0+YXJnc1sxXSA9IG5ld192YWwucHRlX2xvdzsKLQltY2wtPmFyZ3NbMl0gPSAwOwotI2VuZGlmCi0JbWNsLT5hcmdzWzNdID0gZmxhZ3M7CisJaWYgKHNpemVvZihuZXdfdmFsKSA9PSBzaXplb2YobG9uZykpIHsKKwkJbWNsLT5hcmdzWzFdID0gbmV3X3ZhbC5wdGU7CisJCW1jbC0+YXJnc1syXSA9IGZsYWdzOworCX0gZWxzZSB7CisJCW1jbC0+YXJnc1sxXSA9IG5ld192YWwucHRlOworCQltY2wtPmFyZ3NbMl0gPSBuZXdfdmFsLnB0ZSA+PiAzMjsKKwkJbWNsLT5hcmdzWzNdID0gZmxhZ3M7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTM1NCwxNSArNDQ5LDE2IEBACiB7CiAJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbjsKIAltY2wtPmFyZ3NbMF0gPSB2YTsKLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotCW1jbC0+YXJnc1sxXSA9IG5ld192YWwucHRlX2xvdzsKLQltY2wtPmFyZ3NbMl0gPSBuZXdfdmFsLnB0ZV9oaWdoOwotI2Vsc2UKLQltY2wtPmFyZ3NbMV0gPSBuZXdfdmFsLnB0ZV9sb3c7Ci0JbWNsLT5hcmdzWzJdID0gMDsKLSNlbmRpZgotCW1jbC0+YXJnc1szXSA9IGZsYWdzOwotCW1jbC0+YXJnc1s0XSA9IGRvbWlkOworCWlmIChzaXplb2YobmV3X3ZhbCkgPT0gc2l6ZW9mKGxvbmcpKSB7CisJCW1jbC0+YXJnc1sxXSA9IG5ld192YWwucHRlOworCQltY2wtPmFyZ3NbMl0gPSBmbGFnczsKKwkJbWNsLT5hcmdzWzNdID0gZG9taWQ7CisJfSBlbHNlIHsKKwkJbWNsLT5hcmdzWzFdID0gbmV3X3ZhbC5wdGU7CisJCW1jbC0+YXJnc1syXSA9IG5ld192YWwucHRlID4+IDMyOworCQltY2wtPmFyZ3NbM10gPSBmbGFnczsKKwkJbWNsLT5hcmdzWzRdID0gZG9taWQ7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTM3MCwxMCArNDY2LDE1IEBACiAJCQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVzYykKIHsKIAltY2wtPm9wID0gX19IWVBFUlZJU09SX3VwZGF0ZV9kZXNjcmlwdG9yOwotCW1jbC0+YXJnc1swXSA9IG1hZGRyOwotCW1jbC0+YXJnc1sxXSA9IG1hZGRyID4+IDMyOwotCW1jbC0+YXJnc1syXSA9IGRlc2MuYTsKLQltY2wtPmFyZ3NbM10gPSBkZXNjLmI7CisJaWYgKHNpemVvZihtYWRkcikgPT0gc2l6ZW9mKGxvbmcpKSB7CisJCW1jbC0+YXJnc1swXSA9IG1hZGRyOworCQltY2wtPmFyZ3NbMV0gPSAqKHVuc2lnbmVkIGxvbmcgKikmZGVzYzsKKwl9IGVsc2UgeworCQltY2wtPmFyZ3NbMF0gPSBtYWRkcjsKKwkJbWNsLT5hcmdzWzFdID0gbWFkZHIgPj4gMzI7CisJCW1jbC0+YXJnc1syXSA9IGRlc2MuYTsKKwkJbWNsLT5hcmdzWzNdID0gZGVzYy5iOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveGVuL2ludGVyZmFjZS5oIGIvaW5jbHVkZS9hc20teDg2L3hlbi9pbnRlcmZhY2UuaAppbmRleCA2MjI3MDAwLi45ZDgxMGYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYveGVuL2ludGVyZmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vaW50ZXJmYWNlLmgKQEAgLTEsMTMgKzEsMTMgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGFyY2gteDg2XzMyLmgKICAqCi0gKiBHdWVzdCBPUyBpbnRlcmZhY2UgdG8geDg2IDMyLWJpdCBYZW4uCisgKiBHdWVzdCBPUyBpbnRlcmZhY2UgdG8geDg2IFhlbi4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIEsgQSBGcmFzZXIKICAqLwogCi0jaWZuZGVmIF9fWEVOX1BVQkxJQ19BUkNIX1g4Nl8zMl9IX18KLSNkZWZpbmUgX19YRU5fUFVCTElDX0FSQ0hfWDg2XzMyX0hfXworI2lmbmRlZiBfX0FTTV9YODZfWEVOX0lOVEVSRkFDRV9ICisjZGVmaW5lIF9fQVNNX1g4Nl9YRU5fSU5URVJGQUNFX0gKIAogI2lmZGVmIF9fWEVOX18KICNkZWZpbmUgX19ERUZJTkVfR1VFU1RfSEFORExFKG5hbWUsIHR5cGUpIFwKQEAgLTU3LDYgKzU3LDE3IEBACiBERUZJTkVfR1VFU1RfSEFORExFKHZvaWQpOwogI2VuZGlmCiAKKyNpZm5kZWYgSFlQRVJWSVNPUl9WSVJUX1NUQVJUCisjZGVmaW5lIEhZUEVSVklTT1JfVklSVF9TVEFSVCBta191bnNpZ25lZF9sb25nKF9fSFlQRVJWSVNPUl9WSVJUX1NUQVJUKQorI2VuZGlmCisKKyNpZm5kZWYgbWFjaGluZV90b19waHlzX21hcHBpbmcKKyNkZWZpbmUgbWFjaGluZV90b19waHlzX21hcHBpbmcgKCh1bnNpZ25lZCBsb25nICopSFlQRVJWSVNPUl9WSVJUX1NUQVJUKQorI2VuZGlmCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIHZpcnR1YWwgQ1BVcyBpbiBtdWx0aS1wcm9jZXNzb3IgZ3Vlc3RzLiAqLworI2RlZmluZSBNQVhfVklSVF9DUFVTIDMyCisKIC8qCiAgKiBTRUdNRU5UIERFU0NSSVBUT1IgVEFCTEVTCiAgKi8KQEAgLTcxLDU4ICs4MiwyMSBAQAogI2RlZmluZSBGSVJTVF9SRVNFUlZFRF9HRFRfRU5UUlkgKEZJUlNUX1JFU0VSVkVEX0dEVF9CWVRFIC8gOCkKIAogLyoKLSAqIFRoZXNlIGZsYXQgc2VnbWVudHMgYXJlIGluIHRoZSBYZW4tcHJpdmF0ZSBzZWN0aW9uIG9mIGV2ZXJ5IEdEVC4gU2luY2UgdGhlc2UKLSAqIGFyZSBhbHNvIHByZXNlbnQgaW4gdGhlIGluaXRpYWwgR0RULCBtYW55IE9TZXMgd2lsbCBiZSBhYmxlIHRvIGF2b2lkCi0gKiBpbnN0YWxsaW5nIHRoZWlyIG93biBHRFQuCi0gKi8KLSNkZWZpbmUgRkxBVF9SSU5HMV9DUyAweGUwMTkgICAgLyogR0RUIGluZGV4IDI1OSAqLwotI2RlZmluZSBGTEFUX1JJTkcxX0RTIDB4ZTAyMSAgICAvKiBHRFQgaW5kZXggMjYwICovCi0jZGVmaW5lIEZMQVRfUklORzFfU1MgMHhlMDIxICAgIC8qIEdEVCBpbmRleCAyNjAgKi8KLSNkZWZpbmUgRkxBVF9SSU5HM19DUyAweGUwMmIgICAgLyogR0RUIGluZGV4IDI2MSAqLwotI2RlZmluZSBGTEFUX1JJTkczX0RTIDB4ZTAzMyAgICAvKiBHRFQgaW5kZXggMjYyICovCi0jZGVmaW5lIEZMQVRfUklORzNfU1MgMHhlMDMzICAgIC8qIEdEVCBpbmRleCAyNjIgKi8KLQotI2RlZmluZSBGTEFUX0tFUk5FTF9DUyBGTEFUX1JJTkcxX0NTCi0jZGVmaW5lIEZMQVRfS0VSTkVMX0RTIEZMQVRfUklORzFfRFMKLSNkZWZpbmUgRkxBVF9LRVJORUxfU1MgRkxBVF9SSU5HMV9TUwotI2RlZmluZSBGTEFUX1VTRVJfQ1MgICAgRkxBVF9SSU5HM19DUwotI2RlZmluZSBGTEFUX1VTRVJfRFMgICAgRkxBVF9SSU5HM19EUwotI2RlZmluZSBGTEFUX1VTRVJfU1MgICAgRkxBVF9SSU5HM19TUwotCi0vKiBBbmQgdGhlIHRyYXAgdmVjdG9yIGlzLi4uICovCi0jZGVmaW5lIFRSQVBfSU5TVFIgImludCAkMHg4MiIKLQotLyoKLSAqIFZpcnR1YWwgYWRkcmVzc2VzIGJleW9uZCB0aGlzIGFyZSBub3QgbW9kaWZpYWJsZSBieSBndWVzdCBPU2VzLiBUaGUKLSAqIG1hY2hpbmUtPnBoeXNpY2FsIG1hcHBpbmcgdGFibGUgc3RhcnRzIGF0IHRoaXMgYWRkcmVzcywgcmVhZC1vbmx5LgotICovCi0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLSNkZWZpbmUgX19IWVBFUlZJU09SX1ZJUlRfU1RBUlQgMHhGNTgwMDAwMAotI2Vsc2UKLSNkZWZpbmUgX19IWVBFUlZJU09SX1ZJUlRfU1RBUlQgMHhGQzAwMDAwMAotI2VuZGlmCi0KLSNpZm5kZWYgSFlQRVJWSVNPUl9WSVJUX1NUQVJUCi0jZGVmaW5lIEhZUEVSVklTT1JfVklSVF9TVEFSVCBta191bnNpZ25lZF9sb25nKF9fSFlQRVJWSVNPUl9WSVJUX1NUQVJUKQotI2VuZGlmCi0KLSNpZm5kZWYgbWFjaGluZV90b19waHlzX21hcHBpbmcKLSNkZWZpbmUgbWFjaGluZV90b19waHlzX21hcHBpbmcgKCh1bnNpZ25lZCBsb25nICopSFlQRVJWSVNPUl9WSVJUX1NUQVJUKQotI2VuZGlmCi0KLS8qIE1heGltdW0gbnVtYmVyIG9mIHZpcnR1YWwgQ1BVcyBpbiBtdWx0aS1wcm9jZXNzb3IgZ3Vlc3RzLiAqLwotI2RlZmluZSBNQVhfVklSVF9DUFVTIDMyCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qCiAgKiBTZW5kIGFuIGFycmF5IG9mIHRoZXNlIHRvIEhZUEVSVklTT1Jfc2V0X3RyYXBfdGFibGUoKQorICogVGhlIHByaXZpbGVnZSBsZXZlbCBzcGVjaWZpZXMgd2hpY2ggbW9kZXMgbWF5IGVudGVyIGEgdHJhcCB2aWEgYSBzb2Z0d2FyZQorICogaW50ZXJydXB0LiBPbiB4ODYvNjQsIHNpbmNlIHJpbmdzIDEgYW5kIDIgYXJlIHVuYXZhaWxhYmxlLCB3ZSBhbGxvY2F0ZQorICogcHJpdmlsZWdlIGxldmVscyBhcyBmb2xsb3dzOgorICogIExldmVsID09IDA6IE5vb25lIG1heSBlbnRlcgorICogIExldmVsID09IDE6IEtlcm5lbCBtYXkgZW50ZXIKKyAqICBMZXZlbCA9PSAyOiBLZXJuZWwgbWF5IGVudGVyCisgKiAgTGV2ZWwgPT0gMzogRXZlcnlvbmUgbWF5IGVudGVyCiAgKi8KICNkZWZpbmUgVElfR0VUX0RQTChfdGkpCQkoKF90aSktPmZsYWdzICYgMykKICNkZWZpbmUgVElfR0VUX0lGKF90aSkJCSgoX3RpKS0+ZmxhZ3MgJiA0KQogI2RlZmluZSBUSV9TRVRfRFBMKF90aSwgX2RwbCkJKChfdGkpLT5mbGFncyB8PSAoX2RwbCkpCiAjZGVmaW5lIFRJX1NFVF9JRihfdGksIF9pZikJKChfdGkpLT5mbGFncyB8PSAoKCEhKF9pZikpPDwyKSkKIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KIHN0cnVjdCB0cmFwX2luZm8gewogICAgIHVpbnQ4X3QgICAgICAgdmVjdG9yOyAgLyogZXhjZXB0aW9uIHZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgdWludDhfdCAgICAgICBmbGFnczsgICAvKiAwLTM6IHByaXZpbGVnZSBsZXZlbDsgNDogY2xlYXIgZXZlbnQgZW5hYmxlPyAgKi8KQEAgLTEzMSwzMiArMTA1LDIxIEBACiB9OwogREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QodHJhcF9pbmZvKTsKIAotc3RydWN0IGNwdV91c2VyX3JlZ3MgewotICAgIHVpbnQzMl90IGVieDsKLSAgICB1aW50MzJfdCBlY3g7Ci0gICAgdWludDMyX3QgZWR4OwotICAgIHVpbnQzMl90IGVzaTsKLSAgICB1aW50MzJfdCBlZGk7Ci0gICAgdWludDMyX3QgZWJwOwotICAgIHVpbnQzMl90IGVheDsKLSAgICB1aW50MTZfdCBlcnJvcl9jb2RlOyAgICAvKiBwcml2YXRlICovCi0gICAgdWludDE2X3QgZW50cnlfdmVjdG9yOyAgLyogcHJpdmF0ZSAqLwotICAgIHVpbnQzMl90IGVpcDsKLSAgICB1aW50MTZfdCBjczsKLSAgICB1aW50OF90ICBzYXZlZF91cGNhbGxfbWFzazsKLSAgICB1aW50OF90ICBfcGFkMDsKLSAgICB1aW50MzJfdCBlZmxhZ3M7ICAgICAgICAvKiBlZmxhZ3MuSUYgPT0gIXNhdmVkX3VwY2FsbF9tYXNrICovCi0gICAgdWludDMyX3QgZXNwOwotICAgIHVpbnQxNl90IHNzLCBfcGFkMTsKLSAgICB1aW50MTZfdCBlcywgX3BhZDI7Ci0gICAgdWludDE2X3QgZHMsIF9wYWQzOwotICAgIHVpbnQxNl90IGZzLCBfcGFkNDsKLSAgICB1aW50MTZfdCBncywgX3BhZDU7CitzdHJ1Y3QgYXJjaF9zaGFyZWRfaW5mbyB7CisgICAgdW5zaWduZWQgbG9uZyBtYXhfcGZuOyAgICAgICAgICAgICAgICAgIC8qIG1heCBwZm4gdGhhdCBhcHBlYXJzIGluIHRhYmxlICovCisgICAgLyogRnJhbWUgY29udGFpbmluZyBsaXN0IG9mIG1mbnMgY29udGFpbmluZyBsaXN0IG9mIG1mbnMgY29udGFpbmluZyBwMm0uICovCisgICAgdW5zaWduZWQgbG9uZyBwZm5fdG9fbWZuX2ZyYW1lX2xpc3RfbGlzdDsKKyAgICB1bnNpZ25lZCBsb25nIG5taV9yZWFzb247CiB9OwotREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoY3B1X3VzZXJfcmVncyk7CisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwogCi10eXBlZGVmIHVpbnQ2NF90IHRzY190aW1lc3RhbXBfdDsgLyogUkRUU0MgdGltZXN0YW1wICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2luY2x1ZGUgImludGVyZmFjZV8zMi5oIgorI2Vsc2UKKyNpbmNsdWRlICJpbnRlcmZhY2VfNjQuaCIKKyNlbmRpZgogCisjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKICAqIFRoZSBmb2xsb3dpbmcgaXMgYWxsIENQVSBjb250ZXh0LiBOb3RlIHRoYXQgdGhlIGZwdV9jdHh0IGJsb2NrIGlzIGZpbGxlZAogICogaW4gYnkgRlhTQVZFIGlmIHRoZSBDUFUgaGFzIGZlYXR1cmUgRlhTUjsgb3RoZXJ3aXNlIEZTQVZFIGlzIHVzZWQuCkBAIC0xNzMsMzMgKzEzNiwyOSBAQAogICAgIHVuc2lnbmVkIGxvbmcgbGR0X2Jhc2UsIGxkdF9lbnRzOyAgICAgICAvKiBMRFQgKGxpbmVhciBhZGRyZXNzLCAjIGVudHMpICovCiAgICAgdW5zaWduZWQgbG9uZyBnZHRfZnJhbWVzWzE2XSwgZ2R0X2VudHM7IC8qIEdEVCAobWFjaGluZSBmcmFtZXMsICMgZW50cykgKi8KICAgICB1bnNpZ25lZCBsb25nIGtlcm5lbF9zcywga2VybmVsX3NwOyAgICAgLyogVmlydHVhbCBUU1MgKG9ubHkgU1MxL1NQMSkgICAqLworICAgIC8qIE5CLiBVc2VyIHBhZ2V0YWJsZSBvbiB4ODYvNjQgaXMgcGxhY2VkIGluIGN0cmxyZWdbMV0uICovCiAgICAgdW5zaWduZWQgbG9uZyBjdHJscmVnWzhdOyAgICAgICAgICAgICAgIC8qIENSMC1DUjcgKGNvbnRyb2wgcmVnaXN0ZXJzKSAgKi8KICAgICB1bnNpZ25lZCBsb25nIGRlYnVncmVnWzhdOyAgICAgICAgICAgICAgLyogREIwLURCNyAoZGVidWcgcmVnaXN0ZXJzKSAgICAqLworI2lmZGVmIF9faTM4Nl9fCiAgICAgdW5zaWduZWQgbG9uZyBldmVudF9jYWxsYmFja19jczsgICAgICAgIC8qIENTOkVJUCBvZiBldmVudCBjYWxsYmFjayAgICAgKi8KICAgICB1bnNpZ25lZCBsb25nIGV2ZW50X2NhbGxiYWNrX2VpcDsKICAgICB1bnNpZ25lZCBsb25nIGZhaWxzYWZlX2NhbGxiYWNrX2NzOyAgICAgLyogQ1M6RUlQIG9mIGZhaWxzYWZlIGNhbGxiYWNrICAqLwogICAgIHVuc2lnbmVkIGxvbmcgZmFpbHNhZmVfY2FsbGJhY2tfZWlwOworI2Vsc2UKKyAgICB1bnNpZ25lZCBsb25nIGV2ZW50X2NhbGxiYWNrX2VpcDsKKyAgICB1bnNpZ25lZCBsb25nIGZhaWxzYWZlX2NhbGxiYWNrX2VpcDsKKyAgICB1bnNpZ25lZCBsb25nIHN5c2NhbGxfY2FsbGJhY2tfZWlwOworI2VuZGlmCiAgICAgdW5zaWduZWQgbG9uZyB2bV9hc3Npc3Q7ICAgICAgICAgICAgICAgIC8qIFZNQVNTVF9UWVBFXyogYml0bWFwICovCisjaWZkZWYgX194ODZfNjRfXworICAgIC8qIFNlZ21lbnQgYmFzZSBhZGRyZXNzZXMuICovCisgICAgdWludDY0X3QgICAgICBmc19iYXNlOworICAgIHVpbnQ2NF90ICAgICAgZ3NfYmFzZV9rZXJuZWw7CisgICAgdWludDY0X3QgICAgICBnc19iYXNlX3VzZXI7CisjZW5kaWYKIH07CiBERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVCh2Y3B1X2d1ZXN0X2NvbnRleHQpOwotCi1zdHJ1Y3QgYXJjaF9zaGFyZWRfaW5mbyB7Ci0gICAgdW5zaWduZWQgbG9uZyBtYXhfcGZuOyAgICAgICAgICAgICAgICAgIC8qIG1heCBwZm4gdGhhdCBhcHBlYXJzIGluIHRhYmxlICovCi0gICAgLyogRnJhbWUgY29udGFpbmluZyBsaXN0IG9mIG1mbnMgY29udGFpbmluZyBsaXN0IG9mIG1mbnMgY29udGFpbmluZyBwMm0uICovCi0gICAgdW5zaWduZWQgbG9uZyBwZm5fdG9fbWZuX2ZyYW1lX2xpc3RfbGlzdDsKLSAgICB1bnNpZ25lZCBsb25nIG5taV9yZWFzb247Ci19OwotCi1zdHJ1Y3QgYXJjaF92Y3B1X2luZm8gewotICAgIHVuc2lnbmVkIGxvbmcgY3IyOwotICAgIHVuc2lnbmVkIGxvbmcgcGFkWzVdOyAvKiBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykgPT0gNjQgKi8KLX07Ci0KLXN0cnVjdCB4ZW5fY2FsbGJhY2sgewotCXVuc2lnbmVkIGxvbmcgY3M7Ci0JdW5zaWduZWQgbG9uZyBlaXA7Ci19OwotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCiAKIC8qCiAgKiBQcmVmaXggZm9yY2VzIGVtdWxhdGlvbiBvZiBzb21lIG5vbi10cmFwcGluZyBpbnN0cnVjdGlvbnMuCkBAIC0yMTMsNCArMTcyLDQgQEAKICNkZWZpbmUgWEVOX0NQVUlEICAgICAgICAgIFhFTl9FTVVMQVRFX1BSRUZJWCAiY3B1aWQiCiAjZW5kaWYKIAotI2VuZGlmCisjZW5kaWYJLyogX19BU01fWDg2X1hFTl9JTlRFUkZBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3hlbi9pbnRlcmZhY2VfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vaW50ZXJmYWNlXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhYzQxZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vaW50ZXJmYWNlXzMyLmgKQEAgLTAsMCArMSw5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC14ODZfMzIuaAorICoKKyAqIEd1ZXN0IE9TIGludGVyZmFjZSB0byB4ODYgMzItYml0IFhlbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIEsgQSBGcmFzZXIKKyAqLworCisjaWZuZGVmIF9fQVNNX1g4Nl9YRU5fSU5URVJGQUNFXzMyX0gKKyNkZWZpbmUgX19BU01fWDg2X1hFTl9JTlRFUkZBQ0VfMzJfSAorCisKKy8qCisgKiBUaGVzZSBmbGF0IHNlZ21lbnRzIGFyZSBpbiB0aGUgWGVuLXByaXZhdGUgc2VjdGlvbiBvZiBldmVyeSBHRFQuIFNpbmNlIHRoZXNlCisgKiBhcmUgYWxzbyBwcmVzZW50IGluIHRoZSBpbml0aWFsIEdEVCwgbWFueSBPU2VzIHdpbGwgYmUgYWJsZSB0byBhdm9pZAorICogaW5zdGFsbGluZyB0aGVpciBvd24gR0RULgorICovCisjZGVmaW5lIEZMQVRfUklORzFfQ1MgMHhlMDE5ICAgIC8qIEdEVCBpbmRleCAyNTkgKi8KKyNkZWZpbmUgRkxBVF9SSU5HMV9EUyAweGUwMjEgICAgLyogR0RUIGluZGV4IDI2MCAqLworI2RlZmluZSBGTEFUX1JJTkcxX1NTIDB4ZTAyMSAgICAvKiBHRFQgaW5kZXggMjYwICovCisjZGVmaW5lIEZMQVRfUklORzNfQ1MgMHhlMDJiICAgIC8qIEdEVCBpbmRleCAyNjEgKi8KKyNkZWZpbmUgRkxBVF9SSU5HM19EUyAweGUwMzMgICAgLyogR0RUIGluZGV4IDI2MiAqLworI2RlZmluZSBGTEFUX1JJTkczX1NTIDB4ZTAzMyAgICAvKiBHRFQgaW5kZXggMjYyICovCisKKyNkZWZpbmUgRkxBVF9LRVJORUxfQ1MgRkxBVF9SSU5HMV9DUworI2RlZmluZSBGTEFUX0tFUk5FTF9EUyBGTEFUX1JJTkcxX0RTCisjZGVmaW5lIEZMQVRfS0VSTkVMX1NTIEZMQVRfUklORzFfU1MKKyNkZWZpbmUgRkxBVF9VU0VSX0NTICAgIEZMQVRfUklORzNfQ1MKKyNkZWZpbmUgRkxBVF9VU0VSX0RTICAgIEZMQVRfUklORzNfRFMKKyNkZWZpbmUgRkxBVF9VU0VSX1NTICAgIEZMQVRfUklORzNfU1MKKworLyogQW5kIHRoZSB0cmFwIHZlY3RvciBpcy4uLiAqLworI2RlZmluZSBUUkFQX0lOU1RSICJpbnQgJDB4ODIiCisKKy8qCisgKiBWaXJ0dWFsIGFkZHJlc3NlcyBiZXlvbmQgdGhpcyBhcmUgbm90IG1vZGlmaWFibGUgYnkgZ3Vlc3QgT1Nlcy4gVGhlCisgKiBtYWNoaW5lLT5waHlzaWNhbCBtYXBwaW5nIHRhYmxlIHN0YXJ0cyBhdCB0aGlzIGFkZHJlc3MsIHJlYWQtb25seS4KKyAqLworI2RlZmluZSBfX0hZUEVSVklTT1JfVklSVF9TVEFSVCAweEY1ODAwMDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBjcHVfdXNlcl9yZWdzIHsKKyAgICB1aW50MzJfdCBlYng7CisgICAgdWludDMyX3QgZWN4OworICAgIHVpbnQzMl90IGVkeDsKKyAgICB1aW50MzJfdCBlc2k7CisgICAgdWludDMyX3QgZWRpOworICAgIHVpbnQzMl90IGVicDsKKyAgICB1aW50MzJfdCBlYXg7CisgICAgdWludDE2X3QgZXJyb3JfY29kZTsgICAgLyogcHJpdmF0ZSAqLworICAgIHVpbnQxNl90IGVudHJ5X3ZlY3RvcjsgIC8qIHByaXZhdGUgKi8KKyAgICB1aW50MzJfdCBlaXA7CisgICAgdWludDE2X3QgY3M7CisgICAgdWludDhfdCAgc2F2ZWRfdXBjYWxsX21hc2s7CisgICAgdWludDhfdCAgX3BhZDA7CisgICAgdWludDMyX3QgZWZsYWdzOyAgICAgICAgLyogZWZsYWdzLklGID09ICFzYXZlZF91cGNhbGxfbWFzayAqLworICAgIHVpbnQzMl90IGVzcDsKKyAgICB1aW50MTZfdCBzcywgX3BhZDE7CisgICAgdWludDE2X3QgZXMsIF9wYWQyOworICAgIHVpbnQxNl90IGRzLCBfcGFkMzsKKyAgICB1aW50MTZfdCBmcywgX3BhZDQ7CisgICAgdWludDE2X3QgZ3MsIF9wYWQ1OworfTsKK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKGNwdV91c2VyX3JlZ3MpOworCit0eXBlZGVmIHVpbnQ2NF90IHRzY190aW1lc3RhbXBfdDsgLyogUkRUU0MgdGltZXN0YW1wICovCisKK3N0cnVjdCBhcmNoX3ZjcHVfaW5mbyB7CisgICAgdW5zaWduZWQgbG9uZyBjcjI7CisgICAgdW5zaWduZWQgbG9uZyBwYWRbNV07IC8qIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSA9PSA2NCAqLworfTsKKworc3RydWN0IHhlbl9jYWxsYmFjayB7CisJdW5zaWduZWQgbG9uZyBjczsKKwl1bnNpZ25lZCBsb25nIGVpcDsKK307Cit0eXBlZGVmIHN0cnVjdCB4ZW5fY2FsbGJhY2sgeGVuX2NhbGxiYWNrX3Q7CisKKyNkZWZpbmUgWEVOX0NBTExCQUNLKF9fY3MsIF9fZWlwKQkJCQlcCisJKChzdHJ1Y3QgeGVuX2NhbGxiYWNrKXsgLmNzID0gKF9fY3MpLCAuZWlwID0gKHVuc2lnbmVkIGxvbmcpKF9fZWlwKSB9KQorI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworCisvKgorICogUGFnZS1kaXJlY3RvcnkgYWRkcmVzc2VzIGFib3ZlIDRHQiBkbyBub3QgZml0IGludG8gYXJjaGl0ZWN0dXJhbCAlY3IzLgorICogV2hlbiBhY2Nlc3NpbmcgJWNyMywgb3IgZXF1aXZhbGVudCBmaWVsZCBpbiB2Y3B1X2d1ZXN0X2NvbnRleHQsIGd1ZXN0cworICogbXVzdCB1c2UgdGhlIGZvbGxvd2luZyBhY2Nlc3NvciBtYWNyb3MgdG8gcGFjay91bnBhY2sgdmFsaWQgTUZOcy4KKyAqCisgKiBOb3RlIHRoYXQgWGVuIGlzIHVzaW5nIHRoZSBmYWN0IHRoYXQgdGhlIHBhZ2V0YWJsZSBiYXNlIGlzIGFsd2F5cworICogcGFnZS1hbGlnbmVkLCBhbmQgcHV0dGluZyB0aGUgMTIgTVNCIG9mIHRoZSBhZGRyZXNzIGludG8gdGhlIDEyIExTQgorICogb2YgY3IzLgorICovCisjZGVmaW5lIHhlbl9wZm5fdG9fY3IzKHBmbikgKCgodW5zaWduZWQpKHBmbikgPDwgMTIpIHwgKCh1bnNpZ25lZCkocGZuKSA+PiAyMCkpCisjZGVmaW5lIHhlbl9jcjNfdG9fcGZuKGNyMykgKCgodW5zaWduZWQpKGNyMykgPj4gMTIpIHwgKCh1bnNpZ25lZCkoY3IzKSA8PCAyMCkpCisKKyNlbmRpZgkvKiBfX0FTTV9YODZfWEVOX0lOVEVSRkFDRV8zMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveGVuL2ludGVyZmFjZV82NC5oIGIvaW5jbHVkZS9hc20teDg2L3hlbi9pbnRlcmZhY2VfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDIyNjZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2L3hlbi9pbnRlcmZhY2VfNjQuaApAQCAtMCwwICsxLDE1OSBAQAorI2lmbmRlZiBfX0FTTV9YODZfWEVOX0lOVEVSRkFDRV82NF9ICisjZGVmaW5lIF9fQVNNX1g4Nl9YRU5fSU5URVJGQUNFXzY0X0gKKworLyoKKyAqIDY0LWJpdCBzZWdtZW50IHNlbGVjdG9ycworICogVGhlc2UgZmxhdCBzZWdtZW50cyBhcmUgaW4gdGhlIFhlbi1wcml2YXRlIHNlY3Rpb24gb2YgZXZlcnkgR0RULiBTaW5jZSB0aGVzZQorICogYXJlIGFsc28gcHJlc2VudCBpbiB0aGUgaW5pdGlhbCBHRFQsIG1hbnkgT1NlcyB3aWxsIGJlIGFibGUgdG8gYXZvaWQKKyAqIGluc3RhbGxpbmcgdGhlaXIgb3duIEdEVC4KKyAqLworCisjZGVmaW5lIEZMQVRfUklORzNfQ1MzMiAweGUwMjMgIC8qIEdEVCBpbmRleCAyNjAgKi8KKyNkZWZpbmUgRkxBVF9SSU5HM19DUzY0IDB4ZTAzMyAgLyogR0RUIGluZGV4IDI2MSAqLworI2RlZmluZSBGTEFUX1JJTkczX0RTMzIgMHhlMDJiICAvKiBHRFQgaW5kZXggMjYyICovCisjZGVmaW5lIEZMQVRfUklORzNfRFM2NCAweDAwMDAgIC8qIE5VTEwgc2VsZWN0b3IgKi8KKyNkZWZpbmUgRkxBVF9SSU5HM19TUzMyIDB4ZTAyYiAgLyogR0RUIGluZGV4IDI2MiAqLworI2RlZmluZSBGTEFUX1JJTkczX1NTNjQgMHhlMDJiICAvKiBHRFQgaW5kZXggMjYyICovCisKKyNkZWZpbmUgRkxBVF9LRVJORUxfRFM2NCBGTEFUX1JJTkczX0RTNjQKKyNkZWZpbmUgRkxBVF9LRVJORUxfRFMzMiBGTEFUX1JJTkczX0RTMzIKKyNkZWZpbmUgRkxBVF9LRVJORUxfRFMgICBGTEFUX0tFUk5FTF9EUzY0CisjZGVmaW5lIEZMQVRfS0VSTkVMX0NTNjQgRkxBVF9SSU5HM19DUzY0CisjZGVmaW5lIEZMQVRfS0VSTkVMX0NTMzIgRkxBVF9SSU5HM19DUzMyCisjZGVmaW5lIEZMQVRfS0VSTkVMX0NTICAgRkxBVF9LRVJORUxfQ1M2NAorI2RlZmluZSBGTEFUX0tFUk5FTF9TUzY0IEZMQVRfUklORzNfU1M2NAorI2RlZmluZSBGTEFUX0tFUk5FTF9TUzMyIEZMQVRfUklORzNfU1MzMgorI2RlZmluZSBGTEFUX0tFUk5FTF9TUyAgIEZMQVRfS0VSTkVMX1NTNjQKKworI2RlZmluZSBGTEFUX1VTRVJfRFM2NCBGTEFUX1JJTkczX0RTNjQKKyNkZWZpbmUgRkxBVF9VU0VSX0RTMzIgRkxBVF9SSU5HM19EUzMyCisjZGVmaW5lIEZMQVRfVVNFUl9EUyAgIEZMQVRfVVNFUl9EUzY0CisjZGVmaW5lIEZMQVRfVVNFUl9DUzY0IEZMQVRfUklORzNfQ1M2NAorI2RlZmluZSBGTEFUX1VTRVJfQ1MzMiBGTEFUX1JJTkczX0NTMzIKKyNkZWZpbmUgRkxBVF9VU0VSX0NTICAgRkxBVF9VU0VSX0NTNjQKKyNkZWZpbmUgRkxBVF9VU0VSX1NTNjQgRkxBVF9SSU5HM19TUzY0CisjZGVmaW5lIEZMQVRfVVNFUl9TUzMyIEZMQVRfUklORzNfU1MzMgorI2RlZmluZSBGTEFUX1VTRVJfU1MgICBGTEFUX1VTRVJfU1M2NAorCisjZGVmaW5lIF9fSFlQRVJWSVNPUl9WSVJUX1NUQVJUIDB4RkZGRjgwMDAwMDAwMDAwMAorI2RlZmluZSBfX0hZUEVSVklTT1JfVklSVF9FTkQgICAweEZGRkY4ODAwMDAwMDAwMDAKKyNkZWZpbmUgX19NQUNIMlBIWVNfVklSVF9TVEFSVCAgMHhGRkZGODAwMDAwMDAwMDAwCisjZGVmaW5lIF9fTUFDSDJQSFlTX1ZJUlRfRU5EICAgIDB4RkZGRjgwNDAwMDAwMDAwMAorCisjaWZuZGVmIEhZUEVSVklTT1JfVklSVF9TVEFSVAorI2RlZmluZSBIWVBFUlZJU09SX1ZJUlRfU1RBUlQgbWtfdW5zaWduZWRfbG9uZyhfX0hZUEVSVklTT1JfVklSVF9TVEFSVCkKKyNkZWZpbmUgSFlQRVJWSVNPUl9WSVJUX0VORCAgIG1rX3Vuc2lnbmVkX2xvbmcoX19IWVBFUlZJU09SX1ZJUlRfRU5EKQorI2VuZGlmCisKKyNkZWZpbmUgTUFDSDJQSFlTX1ZJUlRfU1RBUlQgIG1rX3Vuc2lnbmVkX2xvbmcoX19NQUNIMlBIWVNfVklSVF9TVEFSVCkKKyNkZWZpbmUgTUFDSDJQSFlTX1ZJUlRfRU5EICAgIG1rX3Vuc2lnbmVkX2xvbmcoX19NQUNIMlBIWVNfVklSVF9FTkQpCisjZGVmaW5lIE1BQ0gyUEhZU19OUl9FTlRSSUVTICAoKE1BQ0gyUEhZU19WSVJUX0VORC1NQUNIMlBIWVNfVklSVF9TVEFSVCk+PjMpCisjaWZuZGVmIG1hY2hpbmVfdG9fcGh5c19tYXBwaW5nCisjZGVmaW5lIG1hY2hpbmVfdG9fcGh5c19tYXBwaW5nICgodW5zaWduZWQgbG9uZyAqKUhZUEVSVklTT1JfVklSVF9TVEFSVCkKKyNlbmRpZgorCisvKgorICogaW50IEhZUEVSVklTT1Jfc2V0X3NlZ21lbnRfYmFzZSh1bnNpZ25lZCBpbnQgd2hpY2gsIHVuc2lnbmVkIGxvbmcgYmFzZSkKKyAqICBAd2hpY2ggPT0gU0VHQkFTRV8qICA7ICBAYmFzZSA9PSA2NC1iaXQgYmFzZSBhZGRyZXNzCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLworI2RlZmluZSBTRUdCQVNFX0ZTICAgICAgICAgIDAKKyNkZWZpbmUgU0VHQkFTRV9HU19VU0VSICAgICAxCisjZGVmaW5lIFNFR0JBU0VfR1NfS0VSTkVMICAgMgorI2RlZmluZSBTRUdCQVNFX0dTX1VTRVJfU0VMIDMgLyogU2V0IHVzZXIgJWdzIHNwZWNpZmllZCBpbiBiYXNlWzE1OjBdICovCisKKy8qCisgKiBpbnQgSFlQRVJWSVNPUl9pcmV0KHZvaWQpCisgKiBBbGwgYXJndW1lbnRzIGFyZSBvbiB0aGUga2VybmVsIHN0YWNrLCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdC4KKyAqIE5ldmVyIHJldHVybnMgaWYgc3VjY2Vzc2Z1bC4gQ3VycmVudCBrZXJuZWwgY29udGV4dCBpcyBsb3N0LgorICogVGhlIHNhdmVkIENTIGlzIG1hcHBlZCBhcyBmb2xsb3dzOgorICogICBSSU5HMCAtPiBSSU5HMyBrZXJuZWwgbW9kZS4KKyAqICAgUklORzEgLT4gUklORzMga2VybmVsIG1vZGUuCisgKiAgIFJJTkcyIC0+IFJJTkczIGtlcm5lbCBtb2RlLgorICogICBSSU5HMyAtPiBSSU5HMyB1c2VyIG1vZGUuCisgKiBIb3dldmVyIFJJTkcwIGluZGljYXRlcyB0aGF0IHRoZSBndWVzdCBrZXJuZWwgc2hvdWxkIHJldHVybiB0byBpdGVzZWxmCisgKiBkaXJlY3RseSB3aXRoCisgKiAgICAgIG9yYiAgICQzLDEqOCglcnNwKQorICogICAgICBpcmV0cQorICogSWYgZmxhZ3MgY29udGFpbnMgVkdDRl9pbl9zeXNjYWxsOgorICogICBSZXN0b3JlIFJBWCwgUklQLCBSRkxBR1MsIFJTUC4KKyAqICAgRGlzY2FyZCBSMTEsIFJDWCwgQ1MsIFNTLgorICogT3RoZXJ3aXNlOgorICogICBSZXN0b3JlIFJBWCwgUjExLCBSQ1gsIENTOlJJUCwgUkZMQUdTLCBTUzpSU1AuCisgKiBBbGwgb3RoZXIgcmVnaXN0ZXJzIGFyZSBzYXZlZCBvbiBoeXBlcmNhbGwgZW50cnkgYW5kIHJlc3RvcmVkIHRvIHVzZXIuCisgKi8KKy8qIEd1ZXN0IGV4aXRlZCBpbiBTWVNDQUxMIGNvbnRleHQ/IFJldHVybiB0byBndWVzdCB3aXRoIFNZU1JFVD8gKi8KKyNkZWZpbmUgX1ZHQ0ZfaW5fc3lzY2FsbCA4CisjZGVmaW5lIFZHQ0ZfaW5fc3lzY2FsbCAgKDE8PF9WR0NGX2luX3N5c2NhbGwpCisjZGVmaW5lIFZHQ0ZfSU5fU1lTQ0FMTCAgVkdDRl9pbl9zeXNjYWxsCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBpcmV0X2NvbnRleHQgeworICAgIC8qIFRvcCBvZiBzdGFjayAoJXJzcCBhdCBwb2ludCBvZiBoeXBlcmNhbGwpLiAqLworICAgIHVpbnQ2NF90IHJheCwgcjExLCByY3gsIGZsYWdzLCByaXAsIGNzLCByZmxhZ3MsIHJzcCwgc3M7CisgICAgLyogQm90dG9tIG9mIGlyZXQgc3RhY2sgZnJhbWUuICovCit9OworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorLyogQW5vbnltb3VzIHVuaW9uIGluY2x1ZGVzIGJvdGggMzItIGFuZCA2NC1iaXQgbmFtZXMgKGUuZy4sIGVheC9yYXgpLiAqLworI2RlZmluZSBfX0RFQ0xfUkVHKG5hbWUpIHVuaW9uIHsgXAorICAgIHVpbnQ2NF90IHIgIyMgbmFtZSwgZSAjIyBuYW1lOyBcCisgICAgdWludDMyX3QgX2UgIyMgbmFtZTsgXAorfQorI2Vsc2UKKy8qIE5vbi1nY2Mgc291cmNlcyBtdXN0IGFsd2F5cyB1c2UgdGhlIHByb3BlciA2NC1iaXQgbmFtZSAoZS5nLiwgcmF4KS4gKi8KKyNkZWZpbmUgX19ERUNMX1JFRyhuYW1lKSB1aW50NjRfdCByICMjIG5hbWUKKyNlbmRpZgorCitzdHJ1Y3QgY3B1X3VzZXJfcmVncyB7CisgICAgdWludDY0X3QgcjE1OworICAgIHVpbnQ2NF90IHIxNDsKKyAgICB1aW50NjRfdCByMTM7CisgICAgdWludDY0X3QgcjEyOworICAgIF9fREVDTF9SRUcoYnApOworICAgIF9fREVDTF9SRUcoYngpOworICAgIHVpbnQ2NF90IHIxMTsKKyAgICB1aW50NjRfdCByMTA7CisgICAgdWludDY0X3Qgcjk7CisgICAgdWludDY0X3Qgcjg7CisgICAgX19ERUNMX1JFRyhheCk7CisgICAgX19ERUNMX1JFRyhjeCk7CisgICAgX19ERUNMX1JFRyhkeCk7CisgICAgX19ERUNMX1JFRyhzaSk7CisgICAgX19ERUNMX1JFRyhkaSk7CisgICAgdWludDMyX3QgZXJyb3JfY29kZTsgICAgLyogcHJpdmF0ZSAqLworICAgIHVpbnQzMl90IGVudHJ5X3ZlY3RvcjsgIC8qIHByaXZhdGUgKi8KKyAgICBfX0RFQ0xfUkVHKGlwKTsKKyAgICB1aW50MTZfdCBjcywgX3BhZDBbMV07CisgICAgdWludDhfdCAgc2F2ZWRfdXBjYWxsX21hc2s7CisgICAgdWludDhfdCAgX3BhZDFbM107CisgICAgX19ERUNMX1JFRyhmbGFncyk7ICAgICAgLyogcmZsYWdzLklGID09ICFzYXZlZF91cGNhbGxfbWFzayAqLworICAgIF9fREVDTF9SRUcoc3ApOworICAgIHVpbnQxNl90IHNzLCBfcGFkMlszXTsKKyAgICB1aW50MTZfdCBlcywgX3BhZDNbM107CisgICAgdWludDE2X3QgZHMsIF9wYWQ0WzNdOworICAgIHVpbnQxNl90IGZzLCBfcGFkNVszXTsgLyogTm9uLXplcm8gPT4gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGZzX2Jhc2UuICAgICAqLworICAgIHVpbnQxNl90IGdzLCBfcGFkNlszXTsgLyogTm9uLXplcm8gPT4gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGdzX2Jhc2VfdXNyLiAqLworfTsKK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKGNwdV91c2VyX3JlZ3MpOworCisjdW5kZWYgX19ERUNMX1JFRworCisjZGVmaW5lIHhlbl9wZm5fdG9fY3IzKHBmbikgKCh1bnNpZ25lZCBsb25nKShwZm4pIDw8IDEyKQorI2RlZmluZSB4ZW5fY3IzX3RvX3BmbihjcjMpICgodW5zaWduZWQgbG9uZykoY3IzKSA+PiAxMikKKworc3RydWN0IGFyY2hfdmNwdV9pbmZvIHsKKyAgICB1bnNpZ25lZCBsb25nIGNyMjsKKyAgICB1bnNpZ25lZCBsb25nIHBhZDsgLyogc2l6ZW9mKHZjcHVfaW5mb190KSA9PSA2NCAqLworfTsKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHhlbl9jYWxsYmFja190OworCisjZGVmaW5lIFhFTl9DQUxMQkFDSyhfX2NzLCBfX3JpcCkJCQkJXAorCSgodW5zaWduZWQgbG9uZykoX19yaXApKQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisKKyNlbmRpZgkvKiBfX0FTTV9YODZfWEVOX0lOVEVSRkFDRV82NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveGVuL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oCmluZGV4IDM3N2MwNDUuLjdiMzgzNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9tZm4ocHRlX3QgcHRlKQogewotCXJldHVybiAocHRlLnB0ZSAmIFBURV9NQVNLKSA+PiBQQUdFX1NISUZUOworCXJldHVybiAocHRlLnB0ZSAmIFBURV9QRk5fTUFTSykgPj4gUEFHRV9TSElGVDsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBtZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwgcGdwcm90X3QgcGdwcm90KQpAQCAtMTQ4LDEzICsxNDgsMTcgQEAKIH0KIAogI2RlZmluZSBwbWRfdmFsX21hKHYpICgodikucG1kKQorI2lmZGVmIF9fUEFHRVRBQkxFX1BVRF9GT0xERUQKICNkZWZpbmUgcHVkX3ZhbF9tYSh2KSAoKHYpLnBnZC5wZ2QpCisjZWxzZQorI2RlZmluZSBwdWRfdmFsX21hKHYpICgodikucHVkKQorI2VuZGlmCiAjZGVmaW5lIF9fcG1kX21hKHgpCSgocG1kX3QpIHsgKHgpIH0gKQogCiAjZGVmaW5lIHBnZF92YWxfbWEoeCkJKCh4KS5wZ2QpCiAKIAoteG1hZGRyX3QgYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworeG1hZGRyX3QgYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSh2b2lkICphZGRyZXNzKTsKIHZvaWQgbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seSh2b2lkICp2YWRkcik7CiB2b2lkIG1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKHZvaWQgKnZhZGRyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hc3luY190eC5oIGIvaW5jbHVkZS9saW51eC9hc3luY190eC5oCmluZGV4IGViNjQwZjAuLjBmNTBkNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXN5bmNfdHguaAorKysgYi9pbmNsdWRlL2xpbnV4L2FzeW5jX3R4LmgKQEAgLTEwMSwyMSArMTAxLDE0IEBACiAKIC8qKgogICogYXN5bmNfdHhfc3luY19lcGlsb2cgLSBhY3Rpb25zIHRvIHRha2UgaWYgYW4gb3BlcmF0aW9uIGlzIHJ1biBzeW5jaHJvbm91c2x5Ci0gKiBAZmxhZ3M6IGFzeW5jX3R4IGZsYWdzCi0gKiBAZGVwZW5kX3R4OiB0cmFuc2FjdGlvbiBkZXBlbmRzIG9uIGRlcGVuZF90eAogICogQGNiX2ZuOiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRlcwogICogQGNiX2ZuX3BhcmFtOiBwYXJhbWV0ZXIgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgcm91dGluZQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLWFzeW5jX3R4X3N5bmNfZXBpbG9nKHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0Jc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXBlbmRfdHgsCi0JZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuLCB2b2lkICpjYl9mbl9wYXJhbSkKK2FzeW5jX3R4X3N5bmNfZXBpbG9nKGRtYV9hc3luY190eF9jYWxsYmFjayBjYl9mbiwgdm9pZCAqY2JfZm5fcGFyYW0pCiB7CiAJaWYgKGNiX2ZuKQogCQljYl9mbihjYl9mbl9wYXJhbSk7Ci0KLQlpZiAoZGVwZW5kX3R4ICYmIChmbGFncyAmIEFTWU5DX1RYX0RFUF9BQ0spKQotCQlhc3luY190eF9hY2soZGVwZW5kX3R4KTsKIH0KIAogdm9pZApAQCAtMTUyLDQgKzE0NSw2IEBACiBhc3luY190cmlnZ2VyX2NhbGxiYWNrKGVudW0gYXN5bmNfdHhfZmxhZ3MgZmxhZ3MsCiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXBlbmRfdHgsCiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuLCB2b2lkICpjYl9mbl9wYXJhbSk7CisKK3ZvaWQgYXN5bmNfdHhfcXVpZXNjZShzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKip0eCk7CiAjZW5kaWYgLyogX0FTWU5DX1RYX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1eHZlYy5oIGIvaW5jbHVkZS9saW51eC9hdXh2ZWMuaAppbmRleCBhZDg5NTQ1Li4wZGExN2QxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1eHZlYy5oCisrKyBiL2luY2x1ZGUvbGludXgvYXV4dmVjLmgKQEAgLTI2LDggKzI2LDEwIEBACiAKICNkZWZpbmUgQVRfU0VDVVJFIDIzICAgLyogc2VjdXJlIG1vZGUgYm9vbGVhbiAqLwogCisjZGVmaW5lIEFUX0VYRUNGTiAgMzEJLyogZmlsZW5hbWUgb2YgcHJvZ3JhbSAqLwogI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgQVRfVkVDVE9SX1NJWkVfQkFTRSAoMTQgKyAyKSAvKiBORVdfQVVYX0VOVCBlbnRyaWVzIGluIGF1eGlsaWFyeSB0YWJsZSAqLworI2RlZmluZSBBVF9WRUNUT1JfU0laRV9CQVNFIDE3IC8qIE5FV19BVVhfRU5UIGVudHJpZXMgaW4gYXV4aWxpYXJ5IHRhYmxlICovCisgIC8qIG51bWJlciBvZiAiI2RlZmluZSBBVF8uKiIgYWJvdmUsIG1pbnVzIHtBVF9OVUxMLCBBVF9JR05PUkUsIEFUX05PVEVMRn0gKi8KICNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX0FVWFZFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JyY21waHkuaCBiL2luY2x1ZGUvbGludXgvYnJjbXBoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjRiNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JyY21waHkuaApAQCAtMCwwICsxLDYgQEAKKyNkZWZpbmUgUEhZX0JSQ01fV0lSRVNQRUVEX0VOQUJMRQkweDAwMDAwMDAxCisjZGVmaW5lIFBIWV9CUkNNX0FVVE9fUFdSRFdOX0VOQUJMRQkweDAwMDAwMDAyCisjZGVmaW5lIFBIWV9CUkNNX0FQRF9DTEsxMjVfRU5BQkxFCTB4MDAwMDAwMDQKKyNkZWZpbmUgUEhZX0JSQ01fU1REX0lCTkRfRElTQUJMRQkweDAwMDAwMDA4CisjZGVmaW5lIFBIWV9CUkNNX0VYVF9JQk5EX1JYX0VOQUJMRQkweDAwMDAwMDEwCisjZGVmaW5lIFBIWV9CUkNNX0VYVF9JQk5EX1RYX0VOQUJMRQkweDAwMDAwMDIwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgKaW5kZXggMDQ4OGY5My4uZDYyYzE5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25maWdmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaApAQCAtMTQ4LDcgKzE0OCw4IEBACiAgKiBpdGVtcy4gIElmIHRoZSBpdGVtIGlzIGEgZ3JvdXAsIGl0IG1heSBzdXBwb3J0IG1rZGlyKDIpLgogICogR3JvdXBzIHN1cHBseSBvbmUgb2YgbWFrZV9ncm91cCgpIGFuZCBtYWtlX2l0ZW0oKS4gIElmIHRoZQogICogZ3JvdXAgc3VwcG9ydHMgbWFrZV9ncm91cCgpLCBvbmUgY2FuIGNyZWF0ZSBncm91cCBjaGlsZHJlbi4gIElmIGl0Ci0gKiBzdXBwb3J0cyBtYWtlX2l0ZW0oKSwgb25lIGNhbiBjcmVhdGUgY29uZmlnX2l0ZW0gY2hpbGRyZW4uICBJZiBpdCBoYXMKKyAqIHN1cHBvcnRzIG1ha2VfaXRlbSgpLCBvbmUgY2FuIGNyZWF0ZSBjb25maWdfaXRlbSBjaGlsZHJlbi4gIG1ha2VfZ3JvdXAoKQorICogYW5kIG1ha2VfaXRlbSgpIHJldHVybiBFUlJfUFRSKCkgb24gZXJyb3JzLiAgSWYgaXQgaGFzCiAgKiBkZWZhdWx0X2dyb3VwcyBvbiBncm91cC0+ZGVmYXVsdF9ncm91cHMsIGl0IGhhcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQKICAqIGdyb3VwIGNoaWxkcmVuLiAgZGVmYXVsdF9ncm91cHMgbWF5IGNvZXhpc3QgYWxvbmdzaXplIG1ha2VfZ3JvdXAoKSBvcgogICogbWFrZV9pdGVtKCksIGJ1dCBpZiB0aGUgZ3JvdXAgd2lzaGVzIHRvIGhhdmUgb25seSBkZWZhdWx0X2dyb3VwcwpAQCAtMTY1LDggKzE2Niw4IEBACiB9OwogCiBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB7Ci0JaW50ICgqbWFrZV9pdGVtKShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqbmV3X2l0ZW0pOwotCWludCAoKm1ha2VfZ3JvdXApKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgY29uZmlnX2dyb3VwICoqbmV3X2dyb3VwKTsKKwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKigqbWFrZV9pdGVtKShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgY29uc3QgY2hhciAqbmFtZSk7CisJc3RydWN0IGNvbmZpZ19ncm91cCAqKCptYWtlX2dyb3VwKShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgY29uc3QgY2hhciAqbmFtZSk7CiAJaW50ICgqY29tbWl0X2l0ZW0pKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSk7CiAJdm9pZCAoKmRpc2Nvbm5lY3Rfbm90aWZ5KShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTsKIAl2b2lkICgqZHJvcF9pdGVtKShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKaW5kZXggZTdlOTFkYi4uMjI3MGNhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKQEAgLTQsOSArNCw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFJ1c3NlbGwgS2luZwogICogICAgICAgICAgICAoQykgMjAwMiAtIDIwMDMgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgogICogICAgICAgICAgICAKLSAqCi0gKiAkSWQ6IGNwdWZyZXEuaCx2IDEuMzYgMjAwMy8wMS8yMCAxNzozMTo0OCBkYiBFeHAgJAotICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaCBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCmluZGV4IGQ2MTRkMjQuLjFiNWM5OGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCkBAIC0xNyw2ICsxNywyMCBAQAogICogRm9yIGRldGFpbHMgb2YgY3B1c19vbnRvKCksIHNlZSBiaXRtYXBfb250byBpbiBsaWIvYml0bWFwLmMuCiAgKiBGb3IgZGV0YWlscyBvZiBjcHVzX2ZvbGQoKSwgc2VlIGJpdG1hcF9mb2xkIGluIGxpYi9iaXRtYXAuYy4KICAqCisgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuCisgKiBOb3RlOiBUaGUgYWx0ZXJuYXRlIG9wZXJhdGlvbnMgd2l0aCB0aGUgc3VmZml4ICJfbnIiIGFyZSB1c2VkCisgKiAgICAgICB0byBsaW1pdCB0aGUgcmFuZ2Ugb2YgdGhlIGxvb3AgdG8gbnJfY3B1X2lkcyBpbnN0ZWFkIG9mCisgKiAgICAgICBOUl9DUFVTIHdoZW4gTlJfQ1BVUyA+IDY0IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICogICAgICAgSWYgTlJfQ1BVUyBpcyA8PSA2NCB0aGVuIG1vc3QgYXNzZW1ibGVyIGJpdG1hc2sKKyAqICAgICAgIG9wZXJhdG9ycyBleGVjdXRlIGZhc3RlciB3aXRoIGEgY29uc3RhbnQgcmFuZ2UsIHNvCisgKiAgICAgICB0aGUgb3BlcmF0b3Igd2lsbCBjb250aW51ZSB0byB1c2UgTlJfQ1BVUy4KKyAqCisgKiAgICAgICBBbm90aGVyIGNvbnNpZGVyYXRpb24gaXMgdGhhdCBucl9jcHVfaWRzIGlzIGluaXRpYWxpemVkCisgKiAgICAgICB0byBOUl9DUFVTIGFuZCBpc24ndCBsb3dlcmVkIHVudGlsIHRoZSBwb3NzaWJsZSBjcHVzIGFyZQorICogICAgICAgZGlzY292ZXJlZCAoaW5jbHVkaW5nIGFueSBkaXNhYmxlZCBjcHVzKS4gIFNvIGVhcmx5IHVzZXMKKyAqICAgICAgIHdpbGwgc3BhbiB0aGUgZW50aXJlIHJhbmdlIG9mIE5SX0NQVVMuCisgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuCisgKgogICogVGhlIGF2YWlsYWJsZSBjcHVtYXNrIG9wZXJhdGlvbnMgYXJlOgogICoKICAqIHZvaWQgY3B1X3NldChjcHUsIG1hc2spCQl0dXJuIG9uIGJpdCAnY3B1JyBpbiBtYXNrCkBAIC0zOCwxOCArNTIsNjAgQEAKICAqIGludCBjcHVzX2VtcHR5KG1hc2spCQkJSXMgbWFzayBlbXB0eSAobm8gYml0cyBzZXRzKT8KICAqIGludCBjcHVzX2Z1bGwobWFzaykJCQlJcyBtYXNrIGZ1bGwgKGFsbCBiaXRzIHNldHMpPwogICogaW50IGNwdXNfd2VpZ2h0KG1hc2spCQlIYW1taW5nIHdlaWdoIC0gbnVtYmVyIG9mIHNldCBiaXRzCisgKiBpbnQgY3B1c193ZWlnaHRfbnIobWFzaykJCVNhbWUgdXNpbmcgbnJfY3B1X2lkcyBpbnN0ZWFkIG9mIE5SX0NQVVMKICAqCiAgKiB2b2lkIGNwdXNfc2hpZnRfcmlnaHQoZHN0LCBzcmMsIG4pCVNoaWZ0IHJpZ2h0CiAgKiB2b2lkIGNwdXNfc2hpZnRfbGVmdChkc3QsIHNyYywgbikJU2hpZnQgbGVmdAogICoKICAqIGludCBmaXJzdF9jcHUobWFzaykJCQlOdW1iZXIgbG93ZXN0IHNldCBiaXQsIG9yIE5SX0NQVVMKICAqIGludCBuZXh0X2NwdShjcHUsIG1hc2spCQlOZXh0IGNwdSBwYXN0ICdjcHUnLCBvciBOUl9DUFVTCisgKiBpbnQgbmV4dF9jcHVfbnIoY3B1LCBtYXNrKQkJTmV4dCBjcHUgcGFzdCAnY3B1Jywgb3IgbnJfY3B1X2lkcwogICoKICAqIGNwdW1hc2tfdCBjcHVtYXNrX29mX2NwdShjcHUpCVJldHVybiBjcHVtYXNrIHdpdGggYml0ICdjcHUnIHNldAorICppZmRlZiBDT05GSUdfSEFTX0NQVU1BU0tfT0ZfQ1BVCisgKiBjcHVtYXNrX29mX2NwdV9wdHJfZGVjbGFyZSh2KQlEZWNsYXJlcyBjcHVtYXNrX3QgKnYKKyAqIGNwdW1hc2tfb2ZfY3B1X3B0cl9uZXh0KHYsIGNwdSkJU2V0cyB2ID0gJmNwdW1hc2tfb2ZfY3B1X21hcFtjcHVdCisgKiBjcHVtYXNrX29mX2NwdV9wdHIodiwgY3B1KQkJQ29tYmluZXMgYWJvdmUgdHdvIG9wZXJhdGlvbnMKKyAqZWxzZQorICogY3B1bWFza19vZl9jcHVfcHRyX2RlY2xhcmUodikJRGVjbGFyZXMgY3B1bWFza190IF92IGFuZCAqdiA9ICZfdgorICogY3B1bWFza19vZl9jcHVfcHRyX25leHQodiwgY3B1KQlTZXRzIF92ID0gY3B1bWFza19vZl9jcHUoY3B1KQorICogY3B1bWFza19vZl9jcHVfcHRyKHYsIGNwdSkJCUNvbWJpbmVzIGFib3ZlIHR3byBvcGVyYXRpb25zCisgKmVuZGlmCiAgKiBDUFVfTUFTS19BTEwJCQkJSW5pdGlhbGl6ZXIgLSBhbGwgYml0cyBzZXQKICAqIENQVV9NQVNLX05PTkUJCQlJbml0aWFsaXplciAtIG5vIGJpdHMgc2V0CiAgKiB1bnNpZ25lZCBsb25nICpjcHVzX2FkZHIobWFzaykJQXJyYXkgb2YgdW5zaWduZWQgbG9uZydzIGluIG1hc2sKICAqCisgKiBDUFVNQVNLX0FMTE9DIGttYWxsb2MncyBhIHN0cnVjdHVyZSB0aGF0IGlzIGEgY29tcG9zaXRlIG9mIG1hbnkgY3B1bWFza190CisgKiB2YXJpYWJsZXMsIGFuZCBDUFVNQVNLX1BUUiBwcm92aWRlcyBwb2ludGVycyB0byBlYWNoIGZpZWxkLgorICoKKyAqIFRoZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGRlZmluZWQgc29tZXRoaW5nIGxpa2UgdGhpczoKKyAqIHN0cnVjdCBteV9jcHVtYXNrcyB7CisgKgljcHVtYXNrX3QgbWFzazE7CisgKgljcHVtYXNrX3QgbWFzazI7CisgKiB9OworICoKKyAqIFVzYWdlIGlzIHRoZW46CisgKglDUFVNQVNLX0FMTE9DKG15X2NwdW1hc2tzKTsKKyAqCUNQVU1BU0tfUFRSKG1hc2sxLCBteV9jcHVtYXNrcyk7CisgKglDUFVNQVNLX1BUUihtYXNrMiwgbXlfY3B1bWFza3MpOworICoKKyAqCS0tLSBETyBOT1QgcmVmZXJlbmNlIGNwdW1hc2tfdCBwb2ludGVycyB1bnRpbCB0aGlzIGNoZWNrIC0tLQorICoJaWYgKG15X2NwdW1hc2tzID09IE5VTEwpCisgKgkJImttYWxsb2MgZmFpbGVkIi4uLgorICoKKyAqIFJlZmVyZW5jZXMgYXJlIG5vdyBwb2ludGVycyB0byB0aGUgY3B1bWFza190IHZhcmlhYmxlcyAoKm1hc2sxLCAuLi4pCisgKgorICppZiBOUl9DUFVTID4gQklUU19QRVJfTE9ORworICogICBDUFVNQVNLX0FMTE9DKG0pCQkJRGVjbGFyZXMgYW5kIGFsbG9jYXRlcyBzdHJ1Y3QgbSAqbSA9CisgKgkJCQkJCWttYWxsb2Moc2l6ZW9mKCptKSwgR0ZQX0tFUk5FTCkKKyAqICAgQ1BVTUFTS19GUkVFKG0pCQkJTWFjcm8gZm9yIGtmcmVlKG0pCisgKmVsc2UKKyAqICAgQ1BVTUFTS19BTExPQyhtKQkJCURlY2xhcmVzIHN0cnVjdCBtIF9tLCAqbSA9ICZfbQorICogICBDUFVNQVNLX0ZSRUUobSkJCQlOb3AKKyAqZW5kaWYKKyAqICAgQ1BVTUFTS19QVFIodiwgbSkJCQlEZWNsYXJlcyBjcHVtYXNrX3QgKnYgPSAmKG0tPnYpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCiAgKiBpbnQgY3B1bWFza19zY25wcmludGYoYnVmLCBsZW4sIG1hc2spIEZvcm1hdCBjcHVtYXNrIGZvciBwcmludGluZwogICogaW50IGNwdW1hc2tfcGFyc2VfdXNlcih1YnVmLCB1bGVuLCBtYXNrKQlQYXJzZSBhc2NpaSBzdHJpbmcgYXMgY3B1bWFzawogICogaW50IGNwdWxpc3Rfc2NucHJpbnRmKGJ1ZiwgbGVuLCBtYXNrKSBGb3JtYXQgY3B1bWFzayBhcyBsaXN0IGZvciBwcmludGluZwpAQCAtNTksNyArMTE1LDggQEAKICAqIHZvaWQgY3B1c19vbnRvKGRzdCwgb3JpZywgcmVsbWFwKQkqZHN0ID0gb3JpZyByZWxhdGl2ZSB0byByZWxtYXAKICAqIHZvaWQgY3B1c19mb2xkKGRzdCwgb3JpZywgc3opCWRzdCBiaXRzID0gb3JpZyBiaXRzIG1vZCBzegogICoKLSAqIGZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykJCWZvci1sb29wIGNwdSBvdmVyIG1hc2sKKyAqIGZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykJCWZvci1sb29wIGNwdSBvdmVyIG1hc2sgdXNpbmcgTlJfQ1BVUworICogZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBtYXNrKQlmb3ItbG9vcCBjcHUgb3ZlciBtYXNrIHVzaW5nIG5yX2NwdV9pZHMKICAqCiAgKiBpbnQgbnVtX29ubGluZV9jcHVzKCkJCU51bWJlciBvZiBvbmxpbmUgQ1BVcwogICogaW50IG51bV9wb3NzaWJsZV9jcHVzKCkJCU51bWJlciBvZiBhbGwgcG9zc2libGUgQ1BVcwpAQCAtMjE2LDIzICsyNzMsMTkgQEAKIAliaXRtYXBfc2hpZnRfbGVmdChkc3RwLT5iaXRzLCBzcmNwLT5iaXRzLCBuLCBuYml0cyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfU01QCi1pbnQgX19maXJzdF9jcHUoY29uc3QgY3B1bWFza190ICpzcmNwKTsKLSNkZWZpbmUgZmlyc3RfY3B1KHNyYykgX19maXJzdF9jcHUoJihzcmMpKQotaW50IF9fbmV4dF9jcHUoaW50IG4sIGNvbnN0IGNwdW1hc2tfdCAqc3JjcCk7Ci0jZGVmaW5lIG5leHRfY3B1KG4sIHNyYykgX19uZXh0X2NwdSgobiksICYoc3JjKSkKLSNlbHNlCi0jZGVmaW5lIGZpcnN0X2NwdShzcmMpCQkoeyAodm9pZCkoc3JjKTsgMDsgfSkKLSNkZWZpbmUgbmV4dF9jcHUobiwgc3JjKQkoeyAodm9pZCkoc3JjKTsgMTsgfSkKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0hBVkVfQ1BVTUFTS19PRl9DUFVfTUFQCiBleHRlcm4gY3B1bWFza190ICpjcHVtYXNrX29mX2NwdV9tYXA7Ci0jZGVmaW5lIGNwdW1hc2tfb2ZfY3B1KGNwdSkgICAgKGNwdW1hc2tfb2ZfY3B1X21hcFtjcHVdKQotCisjZGVmaW5lIGNwdW1hc2tfb2ZfY3B1KGNwdSkJKGNwdW1hc2tfb2ZfY3B1X21hcFtjcHVdKQorI2RlZmluZQljcHVtYXNrX29mX2NwdV9wdHIodiwgY3B1KQkJCQkJXAorCQljb25zdCBjcHVtYXNrX3QgKnYgPSAmY3B1bWFza19vZl9jcHUoY3B1KQorI2RlZmluZQljcHVtYXNrX29mX2NwdV9wdHJfZGVjbGFyZSh2KQkJCQkJXAorCQljb25zdCBjcHVtYXNrX3QgKnYKKyNkZWZpbmUgY3B1bWFza19vZl9jcHVfcHRyX25leHQodiwgY3B1KQkJCQkJXAorCQkJCQl2ID0gJmNwdW1hc2tfb2ZfY3B1KGNwdSkKICNlbHNlCiAjZGVmaW5lIGNwdW1hc2tfb2ZfY3B1KGNwdSkJCQkJCQlcCi0oKih7CQkJCQkJCQkJXAorKHsJCQkJCQkJCQlcCiAJdHlwZW9mKF91bnVzZWRfY3B1bWFza19hcmdfKSBtOwkJCQkJXAogCWlmIChzaXplb2YobSkgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CQkJXAogCQltLmJpdHNbMF0gPSAxVUw8PChjcHUpOwkJCQkJXApAQCAtMjQwLDggKzI5MywxNiBAQAogCQljcHVzX2NsZWFyKG0pOwkJCQkJCVwKIAkJY3B1X3NldCgoY3B1KSwgbSk7CQkJCQlcCiAJfQkJCQkJCQkJXAotCSZtOwkJCQkJCQkJXAotfSkpCisJbTsJCQkJCQkJCVwKK30pCisjZGVmaW5lCWNwdW1hc2tfb2ZfY3B1X3B0cih2LCBjcHUpIAkJCQkJXAorCQljcHVtYXNrX3QgXyMjdiA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CQkJXAorCQljb25zdCBjcHVtYXNrX3QgKnYgPSAmXyMjdgorI2RlZmluZQljcHVtYXNrX29mX2NwdV9wdHJfZGVjbGFyZSh2KQkJCQkJXAorCQljcHVtYXNrX3QgXyMjdjsJCQkJCQlcCisJCWNvbnN0IGNwdW1hc2tfdCAqdiA9ICZfIyN2CisjZGVmaW5lIGNwdW1hc2tfb2ZfY3B1X3B0cl9uZXh0KHYsIGNwdSkJCQkJCVwKKwkJCQkJXyMjdiA9IGNwdW1hc2tfb2ZfY3B1KGNwdSkKICNlbmRpZgogCiAjZGVmaW5lIENQVV9NQVNLX0xBU1RfV09SRCBCSVRNQVBfTEFTVF9XT1JEX01BU0soTlJfQ1BVUykKQEAgLTI4MSw2ICszNDIsMTUgQEAKIAogI2RlZmluZSBjcHVzX2FkZHIoc3JjKSAoKHNyYykuYml0cykKIAorI2lmIE5SX0NQVVMgPiBCSVRTX1BFUl9MT05HCisjZGVmaW5lCUNQVU1BU0tfQUxMT0MobSkJc3RydWN0IG0gKm0gPSBrbWFsbG9jKHNpemVvZigqbSksIEdGUF9LRVJORUwpCisjZGVmaW5lCUNQVU1BU0tfRlJFRShtKQkJa2ZyZWUobSkKKyNlbHNlCisjZGVmaW5lCUNQVU1BU0tfQUxMT0MobSkJc3RydWN0IG0gX20sICptID0gJl9tCisjZGVmaW5lCUNQVU1BU0tfRlJFRShtKQorI2VuZGlmCisjZGVmaW5lCUNQVU1BU0tfUFRSKHYsIG0pIAljcHVtYXNrX3QgKnYgPSAmKG0tPnYpCisKICNkZWZpbmUgY3B1bWFza19zY25wcmludGYoYnVmLCBsZW4sIHNyYykgXAogCQkJX19jcHVtYXNrX3NjbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgTlJfQ1BVUykKIHN0YXRpYyBpbmxpbmUgaW50IF9fY3B1bWFza19zY25wcmludGYoY2hhciAqYnVmLCBpbnQgbGVuLApAQCAtMzQzLDIwICs0MTMsNDkgQEAKIAliaXRtYXBfZm9sZChkc3RwLT5iaXRzLCBvcmlncC0+Yml0cywgc3osIG5iaXRzKTsKIH0KIAotI2lmIE5SX0NQVVMgPiAxCi0jZGVmaW5lIGZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykJCVwKLQlmb3IgKChjcHUpID0gZmlyc3RfY3B1KG1hc2spOwkJXAotCQkoY3B1KSA8IE5SX0NQVVM7CQlcCi0JCShjcHUpID0gbmV4dF9jcHUoKGNwdSksIChtYXNrKSkpCi0jZWxzZSAvKiBOUl9DUFVTID09IDEgKi8KLSNkZWZpbmUgZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKQkJXAorI2lmIE5SX0NQVVMgPT0gMQorCisjZGVmaW5lIG5yX2NwdV9pZHMJCTEKKyNkZWZpbmUgZmlyc3RfY3B1KHNyYykJCSh7ICh2b2lkKShzcmMpOyAwOyB9KQorI2RlZmluZSBuZXh0X2NwdShuLCBzcmMpCSh7ICh2b2lkKShzcmMpOyAxOyB9KQorI2RlZmluZSBhbnlfb25saW5lX2NwdShtYXNrKQkwCisjZGVmaW5lIGZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykJXAogCWZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyssICh2b2lkKW1hc2spCi0jZW5kaWYgLyogTlJfQ1BVUyAqLworCisjZWxzZSAvKiBOUl9DUFVTID4gMSAqLworCitleHRlcm4gaW50IG5yX2NwdV9pZHM7CitpbnQgX19maXJzdF9jcHUoY29uc3QgY3B1bWFza190ICpzcmNwKTsKK2ludCBfX25leHRfY3B1KGludCBuLCBjb25zdCBjcHVtYXNrX3QgKnNyY3ApOworaW50IF9fYW55X29ubGluZV9jcHUoY29uc3QgY3B1bWFza190ICptYXNrKTsKKworI2RlZmluZSBmaXJzdF9jcHUoc3JjKQkJX19maXJzdF9jcHUoJihzcmMpKQorI2RlZmluZSBuZXh0X2NwdShuLCBzcmMpCV9fbmV4dF9jcHUoKG4pLCAmKHNyYykpCisjZGVmaW5lIGFueV9vbmxpbmVfY3B1KG1hc2spIF9fYW55X29ubGluZV9jcHUoJihtYXNrKSkKKyNkZWZpbmUgZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKQkJCVwKKwlmb3IgKChjcHUpID0gLTE7CQkJCVwKKwkJKGNwdSkgPSBuZXh0X2NwdSgoY3B1KSwgKG1hc2spKSwJXAorCQkoY3B1KSA8IE5SX0NQVVM7ICkKKyNlbmRpZgorCisjaWYgTlJfQ1BVUyA8PSA2NAogCiAjZGVmaW5lIG5leHRfY3B1X25yKG4sIHNyYykJCW5leHRfY3B1KG4sIHNyYykKICNkZWZpbmUgY3B1c193ZWlnaHRfbnIoY3B1bWFzaykJCWNwdXNfd2VpZ2h0KGNwdW1hc2spCiAjZGVmaW5lIGZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbWFzaykJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKQogCisjZWxzZSAvKiBOUl9DUFVTID4gNjQgKi8KKworaW50IF9fbmV4dF9jcHVfbnIoaW50IG4sIGNvbnN0IGNwdW1hc2tfdCAqc3JjcCk7CisjZGVmaW5lIG5leHRfY3B1X25yKG4sIHNyYykJX19uZXh0X2NwdV9ucigobiksICYoc3JjKSkKKyNkZWZpbmUgY3B1c193ZWlnaHRfbnIoY3B1bWFzaykJX19jcHVzX3dlaWdodCgmKGNwdW1hc2spLCBucl9jcHVfaWRzKQorI2RlZmluZSBmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIG1hc2spCQkJXAorCWZvciAoKGNwdSkgPSAtMTsJCQkJXAorCQkoY3B1KSA9IG5leHRfY3B1X25yKChjcHUpLCAobWFzaykpLAlcCisJCShjcHUpIDwgbnJfY3B1X2lkczsgKQorCisjZW5kaWYgLyogTlJfQ1BVUyA+IDY0ICovCisKIC8qCiAgKiBUaGUgZm9sbG93aW5nIHBhcnRpY3VsYXIgc3lzdGVtIGNwdW1hc2tzIGFuZCBvcGVyYXRpb25zIG1hbmFnZQogICogcG9zc2libGUsIHByZXNlbnQsIGFjdGl2ZSBhbmQgb25saW5lIGNwdXMuICBFYWNoIG9mIHRoZW0gaXMgYSBmaXhlZCBzaXplCkBAIC00MjAsOSArNTE5LDkgQEAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2FjdGl2ZV9tYXA7CiAKICNpZiBOUl9DUFVTID4gMQotI2RlZmluZSBudW1fb25saW5lX2NwdXMoKQljcHVzX3dlaWdodChjcHVfb25saW5lX21hcCkKLSNkZWZpbmUgbnVtX3Bvc3NpYmxlX2NwdXMoKQljcHVzX3dlaWdodChjcHVfcG9zc2libGVfbWFwKQotI2RlZmluZSBudW1fcHJlc2VudF9jcHVzKCkJY3B1c193ZWlnaHQoY3B1X3ByZXNlbnRfbWFwKQorI2RlZmluZSBudW1fb25saW5lX2NwdXMoKQljcHVzX3dlaWdodF9ucihjcHVfb25saW5lX21hcCkKKyNkZWZpbmUgbnVtX3Bvc3NpYmxlX2NwdXMoKQljcHVzX3dlaWdodF9ucihjcHVfcG9zc2libGVfbWFwKQorI2RlZmluZSBudW1fcHJlc2VudF9jcHVzKCkJY3B1c193ZWlnaHRfbnIoY3B1X3ByZXNlbnRfbWFwKQogI2RlZmluZSBjcHVfb25saW5lKGNwdSkJCWNwdV9pc3NldCgoY3B1KSwgY3B1X29ubGluZV9tYXApCiAjZGVmaW5lIGNwdV9wb3NzaWJsZShjcHUpCWNwdV9pc3NldCgoY3B1KSwgY3B1X3Bvc3NpYmxlX21hcCkKICNkZWZpbmUgY3B1X3ByZXNlbnQoY3B1KQljcHVfaXNzZXQoKGNwdSksIGNwdV9wcmVzZW50X21hcCkKQEAgLTQzOSwxNyArNTM4LDggQEAKIAogI2RlZmluZSBjcHVfaXNfb2ZmbGluZShjcHUpCXVubGlrZWx5KCFjcHVfb25saW5lKGNwdSkpCiAKLSNpZmRlZiBDT05GSUdfU01QCi1leHRlcm4gaW50IG5yX2NwdV9pZHM7Ci0jZGVmaW5lIGFueV9vbmxpbmVfY3B1KG1hc2spIF9fYW55X29ubGluZV9jcHUoJihtYXNrKSkKLWludCBfX2FueV9vbmxpbmVfY3B1KGNvbnN0IGNwdW1hc2tfdCAqbWFzayk7Ci0jZWxzZQotI2RlZmluZSBucl9jcHVfaWRzCQkJMQotI2RlZmluZSBhbnlfb25saW5lX2NwdShtYXNrKQkJMAotI2VuZGlmCi0KLSNkZWZpbmUgZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfcG9zc2libGVfbWFwKQotI2RlZmluZSBmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfb25saW5lX21hcCkKLSNkZWZpbmUgZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSBmb3JfZWFjaF9jcHVfbWFzaygoY3B1KSwgY3B1X3ByZXNlbnRfbWFwKQorI2RlZmluZSBmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSBmb3JfZWFjaF9jcHVfbWFza19ucigoY3B1KSwgY3B1X3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgZm9yX2VhY2hfb25saW5lX2NwdShjcHUpICAgZm9yX2VhY2hfY3B1X21hc2tfbnIoKGNwdSksIGNwdV9vbmxpbmVfbWFwKQorI2RlZmluZSBmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpICBmb3JfZWFjaF9jcHVfbWFza19ucigoY3B1KSwgY3B1X3ByZXNlbnRfbWFwKQogCiAjZW5kaWYgLyogX19MSU5VWF9DUFVNQVNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaCBiL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaAppbmRleCA1MDRjYjJjLi4yZDNkMWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCkBAIC01NTAsMTEgKzU1MCwxMSBAQAogCiBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCB7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgbWFnaWM7CisJc3RydWN0IHR0eV9wb3J0CQlwb3J0OwogCXN0cnVjdCBjeWNsYWRlc19jYXJkCSpjYXJkOwogCWludAkJCWxpbmU7CiAJaW50CQkJZmxhZ3M7IAkJLyogZGVmaW5lZCBpbiB0dHkuaCAqLwogCWludCAgICAgICAgICAgICAgICAgICAgIHR5cGU7CQkvKiBVQVJUIHR5cGUgKi8KLQlzdHJ1Y3QgdHR5X3N0cnVjdCAJKnR0eTsKIAlpbnQJCQlyZWFkX3N0YXR1c19tYXNrOwogCWludAkJCWlnbm9yZV9zdGF0dXNfbWFzazsKIAlpbnQJCQl0aW1lb3V0OwpAQCAtNTY3LDEzICs1NjcsOCBAQAogCWludAkJCWNoaXBfcmV2OwogCWludAkJCWN1c3RvbV9kaXZpc29yOwogCXU4CQkJeF9jaGFyOyAvKiB0byBiZSBwdXNoZWQgb3V0IEFTQVAgKi8KLQlpbnQJCQljbG9zZV9kZWxheTsKLQl1bnNpZ25lZCBzaG9ydAkJY2xvc2luZ193YWl0OwotCWludAkJCWNvdW50OwkvKiAjIG9mIGZkIG9uIGRldmljZSAqLwogCWludCAgICAgICAgICAgICAgICAgICAgIGJyZWFrb247CiAJaW50ICAgICAgICAgICAgICAgICAgICAgYnJlYWtvZmY7Ci0JaW50CQkJYmxvY2tlZF9vcGVuOyAvKiAjIG9mIGJsb2NrZWQgb3BlbnMgKi8KLQl1bnNpZ25lZCBjaGFyIAkJKnhtaXRfYnVmOwogCWludAkJCXhtaXRfaGVhZDsKIAlpbnQJCQl4bWl0X3RhaWw7CiAJaW50CQkJeG1pdF9jbnQ7CkBAIC01ODMsMTYgKzU3OCwxNCBAQAogCXN0cnVjdCBjeWNsYWRlc19tb25pdG9yCW1vbjsKIAlzdHJ1Y3QgY3ljbGFkZXNfaWRsZV9zdGF0cwlpZGxlX3N0YXRzOwogCXN0cnVjdCBjeWNsYWRlc19pY291bnQJaWNvdW50OwotCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIG9wZW5fd2FpdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBjbG9zZV93YWl0OwogCXN0cnVjdCBjb21wbGV0aW9uICAgICAgIHNodXRkb3duX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgZGVsdGFfbXNyX3dhaXQ7CiAJaW50IHRocm90dGxlOwogfTsKIAogI2RlZmluZQlDTE9TSU5HX1dBSVRfREVMQVkJMzAqSFoKLSNkZWZpbmUgQ1lfQ0xPU0lOR19XQUlUX05PTkUJNjU1MzUKLSNkZWZpbmUgQ1lfQ0xPU0lOR19XQUlUX0lORgkwCisjZGVmaW5lIENZX0NMT1NJTkdfV0FJVF9OT05FCUFTWU5DX0NMT1NJTkdfV0FJVF9OT05FCisjZGVmaW5lIENZX0NMT1NJTkdfV0FJVF9JTkYJQVNZTkNfQ0xPU0lOR19XQUlUX0lORgogCiAKICNkZWZpbmUgQ3lNQVhfQ0hJUFNfUEVSX0NBUkQJOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2EuaCBiL2luY2x1ZGUvbGludXgvZGNhLmgKaW5kZXggYWY2MWNkMS4uYjAwYTc1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2EuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYS5oCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIERDQV9QUk9WSURFUl9SRU1PVkUgIDB4MDAwMgogCiBzdHJ1Y3QgZGNhX3Byb3ZpZGVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CiAJc3RydWN0IGRjYV9vcHMJCSpvcHM7CiAJc3RydWN0IGRldmljZSAJCSpjZDsKIAlpbnQJCQkgaWQ7CkBAIC0xOCw3ICsxOSw5IEBACiBzdHJ1Y3QgZGNhX29wcyB7CiAJaW50CSgqYWRkX3JlcXVlc3RlcikgICAgKHN0cnVjdCBkY2FfcHJvdmlkZXIgKiwgc3RydWN0IGRldmljZSAqKTsKIAlpbnQJKCpyZW1vdmVfcmVxdWVzdGVyKSAoc3RydWN0IGRjYV9wcm92aWRlciAqLCBzdHJ1Y3QgZGV2aWNlICopOwotCXU4CSgqZ2V0X3RhZykJICAgIChzdHJ1Y3QgZGNhX3Byb3ZpZGVyICosIGludCBjcHUpOworCXU4CSgqZ2V0X3RhZykJICAgIChzdHJ1Y3QgZGNhX3Byb3ZpZGVyICosIHN0cnVjdCBkZXZpY2UgKiwKKwkJCQkgICAgIGludCBjcHUpOworCWludAkoKmRldl9tYW5hZ2VkKSAgICAgIChzdHJ1Y3QgZGNhX3Byb3ZpZGVyICosIHN0cnVjdCBkZXZpY2UgKik7CiB9OwogCiBzdHJ1Y3QgZGNhX3Byb3ZpZGVyICphbGxvY19kY2FfcHJvdmlkZXIoc3RydWN0IGRjYV9vcHMgKm9wcywgaW50IHByaXZfc2l6ZSk7CkBAIC0zMiw5ICszNSwxMSBAQAogfQogCiAvKiBSZXF1ZXN0ZXIgQVBJICovCisjZGVmaW5lIERDQV9HRVRfVEFHX1RXT19BUkdTCiBpbnQgZGNhX2FkZF9yZXF1ZXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBkY2FfcmVtb3ZlX3JlcXVlc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdTggZGNhX2dldF90YWcoaW50IGNwdSk7Cit1OCBkY2EzX2dldF90YWcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgY3B1KTsKIAogLyogaW50ZXJuYWwgc3R1ZmYgKi8KIGludCBfX2luaXQgZGNhX3N5c2ZzX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjY3AuaCBiL2luY2x1ZGUvbGludXgvZGNjcC5oCmluZGV4IGFhMDczNzAuLjYwODA0NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNjcC5oCkBAIC0zNjQsOCArMzY0LDYgQEAKIC8qIEZJWE1FOiBmb3Igbm93IHdlJ3JlIGRlZmF1bHQgdG8gMSBidXQgaXQgc2hvdWxkIHJlYWxseSBiZSAwICovCiAjZGVmaW5lIERDQ1BGX0lOSVRJQUxfU0VORF9ORFBfQ09VTlQJCTEKIAotI2RlZmluZSBEQ0NQX05EUF9MSU1JVCAweEZGRkZGRgotCiAvKioKICAgKiBzdHJ1Y3QgZGNjcF9taW5pc29jayAtIE1pbmltYWwgRENDUCBjb25uZWN0aW9uIHJlcHJlc2VudGF0aW9uCiAgICoKQEAgLTQzNyw3ICs0MzUsNyBAQAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0cnVjdCBkY2NwX29wdGlvbnNfcmVjZWl2ZWQgewotCXUzMglkY2Nwb3JfbmRwOyAvKiBvbmx5IDI0IGJpdHMgKi8KKwl1NjQJZGNjcG9yX25kcDo0ODsKIAl1MzIJZGNjcG9yX3RpbWVzdGFtcDsKIAl1MzIJZGNjcG9yX3RpbWVzdGFtcF9lY2hvOwogCXUzMglkY2Nwb3JfZWxhcHNlZF90aW1lOwpAQCAtNTMzLDcgKzUzMSw3IEBACiAJX191MTYJCQkJZGNjcHNfcl9hY2tfcmF0aW87CiAJX191MTYJCQkJZGNjcHNfcGNzbGVuOwogCV9fdTE2CQkJCWRjY3BzX3BjcmxlbjsKLQl1bnNpZ25lZCBsb25nCQkJZGNjcHNfbmRwX2NvdW50OworCV9fdTY0CQkJCWRjY3BzX25kcF9jb3VudDo0ODsKIAl1bnNpZ25lZCBsb25nCQkJZGNjcHNfcmF0ZV9sYXN0OwogCXN0cnVjdCBkY2NwX21pbmlzb2NrCQlkY2Nwc19taW5pc29jazsKIAlzdHJ1Y3QgZGNjcF9hY2t2ZWMJCSpkY2Nwc19oY19yeF9hY2t2ZWM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaCBiL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCmluZGV4IDcyNjYxMjQuLmUxYTZjMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCkBAIC0yNiw2ICsyNiw4IEBACiAJdW5zaWduZWQgbG9uZyBzaXplOwogfTsKIAorZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmFyY2hfZGVidWdmc19kaXI7CisKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAogLyogZGVjbGFyZWQgb3ZlciBpbiBmaWxlLmMgKi8KQEAgLTQyLDYgKzQ0LDcgQEAKIAkJCQkgICAgICBjb25zdCBjaGFyICpkZXN0KTsKIAogdm9pZCBkZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwordm9pZCBkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAogc3RydWN0IGRlbnRyeSAqZGVidWdmc19yZW5hbWUoc3RydWN0IGRlbnRyeSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGlyLCBjb25zdCBjaGFyICpuZXdfbmFtZSk7CkBAIC05OSw2ICsxMDIsOSBAQAogc3RhdGljIGlubGluZSB2b2lkIGRlYnVnZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsgfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sgfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcmVuYW1lKHN0cnVjdCBkZW50cnkgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAgICAgICAgICAgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RpciwgY2hhciAqbmV3X25hbWUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IDBkOGQ0MTkuLmE5MDIyMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC05LDExICs5LDEzIEBACiAjZGVmaW5lIF9MSU5VWF9ERVZJQ0VfTUFQUEVSX0gKIAogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogCiBzdHJ1Y3QgZG1fdGFyZ2V0Owogc3RydWN0IGRtX3RhYmxlOwogc3RydWN0IGRtX2RldjsKIHN0cnVjdCBtYXBwZWRfZGV2aWNlOworc3RydWN0IGJpb192ZWM7CiAKIHR5cGVkZWYgZW51bSB7IFNUQVRVU1RZUEVfSU5GTywgU1RBVFVTVFlQRV9UQUJMRSB9IHN0YXR1c190eXBlX3Q7CiAKQEAgLTcyLDYgKzc0LDkgQEAKIAkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAKK3R5cGVkZWYgaW50ICgqZG1fbWVyZ2VfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJ2ZWNfbWVyZ2VfZGF0YSAqYnZtLAorCQkJICAgIHN0cnVjdCBiaW9fdmVjICpiaW92ZWMsIGludCBtYXhfc2l6ZSk7CisKIHZvaWQgZG1fZXJyb3IoY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qCkBAIC0xMDcsNiArMTEyLDcgQEAKIAlkbV9zdGF0dXNfZm4gc3RhdHVzOwogCWRtX21lc3NhZ2VfZm4gbWVzc2FnZTsKIAlkbV9pb2N0bF9mbiBpb2N0bDsKKwlkbV9tZXJnZV9mbiBtZXJnZTsKIH07CiAKIHN0cnVjdCBpb19yZXN0cmljdGlvbnMgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggZjcxYTc4ZC4uZDI0YTQ3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yNCwxNyArMjUsMTMgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2RldmljZS5oPgogCi0jZGVmaW5lIERFVklDRV9OQU1FX1NJWkUJNTAKLS8qIERFVklDRV9OQU1FX0hBTEYgaXMgcmVhbGx5IGxlc3MgdGhhbiBoYWxmIHRvIGFjY29tbW9kYXRlIHNsb3AgKi8KLSNkZWZpbmUgREVWSUNFX05BTUVfSEFMRglfX3N0cmluZ2lmeSgyMCkKLSNkZWZpbmUgREVWSUNFX0lEX1NJWkUJCTMyCi0jZGVmaW5lIEJVU19JRF9TSVpFCQlLT0JKX05BTUVfTEVOCi0KKyNkZWZpbmUgQlVTX0lEX1NJWkUJCTIwCiAKIHN0cnVjdCBkZXZpY2U7CiBzdHJ1Y3QgZGV2aWNlX2RyaXZlcjsKIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZTsKIHN0cnVjdCBjbGFzczsKK3N0cnVjdCBjbGFzc19wcml2YXRlOwogc3RydWN0IGJ1c190eXBlOwogc3RydWN0IGJ1c190eXBlX3ByaXZhdGU7CiAKQEAgLTE4NiwxMyArMTgzLDkgQEAKIAljb25zdCBjaGFyCQkqbmFtZTsKIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAKLQlzdHJ1Y3Qga3NldAkJc3Vic3lzOwotCXN0cnVjdCBsaXN0X2hlYWQJZGV2aWNlczsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWludGVyZmFjZXM7Ci0Jc3RydWN0IGtzZXQJCWNsYXNzX2RpcnM7Ci0Jc3RydWN0IHNlbWFwaG9yZQlzZW07IC8qIGxvY2tzIGNoaWxkcmVuLCBkZXZpY2VzLCBpbnRlcmZhY2VzICovCiAJc3RydWN0IGNsYXNzX2F0dHJpYnV0ZQkJKmNsYXNzX2F0dHJzOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCQkqZGV2X2F0dHJzOworCXN0cnVjdCBrb2JqZWN0CQkJKmRldl9rb2JqOwogCiAJaW50ICgqZGV2X3VldmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwogCkBAIC0yMDMsMTMgKzE5NiwyOCBAQAogCWludCAoKnJlc3VtZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAogCXN0cnVjdCBwbV9vcHMgKnBtOworCXN0cnVjdCBjbGFzc19wcml2YXRlICpwOwogfTsKIAotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgY2xhc3NfcmVnaXN0ZXIoc3RydWN0IGNsYXNzICpjbGFzcyk7CitleHRlcm4gc3RydWN0IGtvYmplY3QgKnN5c2ZzX2Rldl9ibG9ja19rb2JqOworZXh0ZXJuIHN0cnVjdCBrb2JqZWN0ICpzeXNmc19kZXZfY2hhcl9rb2JqOworZXh0ZXJuIGludCBfX211c3RfY2hlY2sgX19jbGFzc19yZWdpc3RlcihzdHJ1Y3QgY2xhc3MgKmNsYXNzLAorCQkJCQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwogZXh0ZXJuIHZvaWQgY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3QgY2xhc3MgKmNsYXNzKTsKLWV4dGVybiBpbnQgY2xhc3NfZm9yX2VhY2hfZGV2aWNlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIHZvaWQgKmRhdGEsCisKKy8qIFRoaXMgaXMgYSAjZGVmaW5lIHRvIGtlZXAgdGhlIGNvbXBpbGVyIGZyb20gbWVyZ2luZyBkaWZmZXJlbnQKKyAqIGluc3RhbmNlcyBvZiB0aGUgX19rZXkgdmFyaWFibGUgKi8KKyNkZWZpbmUgY2xhc3NfcmVnaXN0ZXIoY2xhc3MpCQkJXAorKHsJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJXAorCV9fY2xhc3NfcmVnaXN0ZXIoY2xhc3MsICZfX2tleSk7CVwKK30pCisKK2V4dGVybiBpbnQgY2xhc3NfZm9yX2VhY2hfZGV2aWNlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIHN0cnVjdCBkZXZpY2UgKnN0YXJ0LAorCQkJCSB2b2lkICpkYXRhLAogCQkJCSBpbnQgKCpmbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKSk7Ci1leHRlcm4gc3RydWN0IGRldmljZSAqY2xhc3NfZmluZF9kZXZpY2Uoc3RydWN0IGNsYXNzICpjbGFzcywgdm9pZCAqZGF0YSwKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlICpjbGFzc19maW5kX2RldmljZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLAorCQkJCQlzdHJ1Y3QgZGV2aWNlICpzdGFydCwgdm9pZCAqZGF0YSwKIAkJCQkJaW50ICgqbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSk7CiAKIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgewpAQCAtMjM3LDkgKzI0NSwxOSBAQAogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgY2xhc3NfaW50ZXJmYWNlX3JlZ2lzdGVyKHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKik7CiBleHRlcm4gdm9pZCBjbGFzc19pbnRlcmZhY2VfdW5yZWdpc3RlcihzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICopOwogCi1leHRlcm4gc3RydWN0IGNsYXNzICpjbGFzc19jcmVhdGUoc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHN0cnVjdCBjbGFzcyAqIF9fbXVzdF9jaGVjayBfX2NsYXNzX2NyZWF0ZShzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJCSAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwogZXh0ZXJuIHZvaWQgY2xhc3NfZGVzdHJveShzdHJ1Y3QgY2xhc3MgKmNscyk7CiAKKy8qIFRoaXMgaXMgYSAjZGVmaW5lIHRvIGtlZXAgdGhlIGNvbXBpbGVyIGZyb20gbWVyZ2luZyBkaWZmZXJlbnQKKyAqIGluc3RhbmNlcyBvZiB0aGUgX19rZXkgdmFyaWFibGUgKi8KKyNkZWZpbmUgY2xhc3NfY3JlYXRlKG93bmVyLCBuYW1lKQkJXAorKHsJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJXAorCV9fY2xhc3NfY3JlYXRlKG93bmVyLCBuYW1lLCAmX19rZXkpOwlcCit9KQorCiAvKgogICogVGhlIHR5cGUgb2YgZGV2aWNlLCAic3RydWN0IGRldmljZSIgaXMgZW1iZWRkZWQgaW4uIEEgY2xhc3MKICAqIG9yIGJ1cyBjYW4gY29udGFpbiBkZXZpY2VzIG9mIGRpZmZlcmVudCB0eXBlcwpAQCAtNDY4LDE0ICs0ODYsMTAgQEAKIAkJCQkJICBjb25zdCBjaGFyICpmbXQsCiAJCQkJCSAgdmFfbGlzdCB2YXJncyk7CiBleHRlcm4gc3RydWN0IGRldmljZSAqZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgY2xhc3MgKmNscywgc3RydWN0IGRldmljZSAqcGFyZW50LAotCQkJCSAgICBkZXZfdCBkZXZ0LCBjb25zdCBjaGFyICpmbXQsIC4uLikKLQkJCQkgICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgNCwgNSkpKTsKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlICpkZXZpY2VfY3JlYXRlX2RydmRhdGEoc3RydWN0IGNsYXNzICpjbHMsCi0JCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCi0JCQkJCSAgICBkZXZfdCBkZXZ0LAotCQkJCQkgICAgdm9pZCAqZHJ2ZGF0YSwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCQkJCSAgICBkZXZfdCBkZXZ0LCB2b2lkICpkcnZkYXRhLAorCQkJCSAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKIAkJCQkgICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgNSwgNikpKTsKKyNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9kcnZkYXRhCWRldmljZV9jcmVhdGUKIGV4dGVybiB2b2lkIGRldmljZV9kZXN0cm95KHN0cnVjdCBjbGFzcyAqY2xzLCBkZXZfdCBkZXZ0KTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaCBiL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAppbmRleCBiMDNjNDFiLi4yOGMyOTQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCkBAIC0yNTYsOSArMjU2LDkgQEAKICNkZWZpbmUgRE1fREVWX1NFVF9HRU9NRVRSWQlfSU9XUihETV9JT0NUTCwgRE1fREVWX1NFVF9HRU9NRVRSWV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKIAogI2RlZmluZSBETV9WRVJTSU9OX01BSk9SCTQKLSNkZWZpbmUgRE1fVkVSU0lPTl9NSU5PUgkxMworI2RlZmluZSBETV9WRVJTSU9OX01JTk9SCTE0CiAjZGVmaW5lIERNX1ZFUlNJT05fUEFUQ0hMRVZFTAkwCi0jZGVmaW5lIERNX1ZFUlNJT05fRVhUUkEJIi1pb2N0bCAoMjAwNy0xMC0xOCkiCisjZGVmaW5lIERNX1ZFUlNJT05fRVhUUkEJIi1pb2N0bCAoMjAwOC0wNC0yMykiCiAKIC8qIFN0YXR1cyBiaXRzICovCiAjZGVmaW5lIERNX1JFQURPTkxZX0ZMQUcJKDEgPDwgMCkgLyogSW4vT3V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtOTAwMC5oIGIvaW5jbHVkZS9saW51eC9kbTkwMDAuaAppbmRleCBhMzc1MDQ2Li5mYzgyNDQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtOTAwMC5oCisrKyBiL2luY2x1ZGUvbGludXgvZG05MDAwLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgRE05MDAwX1BMQVRGXzMyQklUT05MWQkoMHgwMDA0KQogI2RlZmluZSBETTkwMDBfUExBVEZfRVhUX1BIWQkoMHgwMDA4KQogI2RlZmluZSBETTkwMDBfUExBVEZfTk9fRUVQUk9NCSgweDAwMTApCisjZGVmaW5lIERNOTAwMF9QTEFURl9TSU1QTEVfUEhZICgweDAwMjApICAvKiBVc2UgTlNSIHRvIGZpbmQgTGlua1N0YXR1cyAqLwogCiAvKiBwbGF0ZnJvbSBkYXRhIGZvciBwbGF0ZnJvbSBkZXZpY2Ugc3RydWN0dXJlJ3MgcGxhdGZyb21fZGF0YSBmaWVsZCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1hdHRycy5oIGIvaW5jbHVkZS9saW51eC9kbWEtYXR0cnMuaAppbmRleCAxNjc3ZTJiLi43MWFkMzRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1hdHRycy5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWF0dHJzLmgKQEAgLTEyLDYgKzEyLDcgQEAKICAqLwogZW51bSBkbWFfYXR0ciB7CiAJRE1BX0FUVFJfV1JJVEVfQkFSUklFUiwKKwlETUFfQVRUUl9XRUFLX09SREVSSU5HLAogCURNQV9BVFRSX01BWCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmggYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCmluZGV4IGQwOGE1YzUuLmFkYjBiMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaApAQCAtODksMTAgKzg5LDIzIEBACiAJRE1BX01FTVNFVCwKIAlETUFfTUVNQ1BZX0NSQzMyQywKIAlETUFfSU5URVJSVVBULAorCURNQV9TTEFWRSwKIH07CiAKIC8qIGxhc3QgdHJhbnNhY3Rpb24gdHlwZSBmb3IgY3JlYXRpb24gb2YgdGhlIGNhcGFiaWxpdGllcyBtYXNrICovCi0jZGVmaW5lIERNQV9UWF9UWVBFX0VORCAoRE1BX0lOVEVSUlVQVCArIDEpCisjZGVmaW5lIERNQV9UWF9UWVBFX0VORCAoRE1BX1NMQVZFICsgMSkKKworLyoqCisgKiBlbnVtIGRtYV9zbGF2ZV93aWR0aCAtIERNQSBzbGF2ZSByZWdpc3RlciBhY2Nlc3Mgd2lkdGguCisgKiBARE1BX1NMQVZFX1dJRFRIXzhCSVQ6IERvIDgtYml0IHNsYXZlIHJlZ2lzdGVyIGFjY2Vzc2VzCisgKiBARE1BX1NMQVZFX1dJRFRIXzE2QklUOiBEbyAxNi1iaXQgc2xhdmUgcmVnaXN0ZXIgYWNjZXNzZXMKKyAqIEBETUFfU0xBVkVfV0lEVEhfMzJCSVQ6IERvIDMyLWJpdCBzbGF2ZSByZWdpc3RlciBhY2Nlc3NlcworICovCitlbnVtIGRtYV9zbGF2ZV93aWR0aCB7CisJRE1BX1NMQVZFX1dJRFRIXzhCSVQsCisJRE1BX1NMQVZFX1dJRFRIXzE2QklULAorCURNQV9TTEFWRV9XSURUSF8zMkJJVCwKK307CiAKIC8qKgogICogZW51bSBkbWFfY3RybF9mbGFncyAtIERNQSBmbGFncyB0byBhdWdtZW50IG9wZXJhdGlvbiBwcmVwYXJhdGlvbiwKQEAgLTEwMiwxMCArMTE1LDE0IEBACiAgKiBARE1BX0NUUkxfQUNLIC0gdGhlIGRlc2NyaXB0b3IgY2Fubm90IGJlIHJldXNlZCB1bnRpbCB0aGUgY2xpZW50CiAgKiAJYWNrbm93bGVkZ2VzIHJlY2VpcHQsIGkuZS4gaGFzIGhhcyBhIGNoYW5jZSB0byBlc3RhYmxpc2ggYW55CiAgKiAJZGVwZW5kZW5jeSBjaGFpbnMKKyAqIEBETUFfQ09NUExfU0tJUF9TUkNfVU5NQVAgLSBzZXQgdG8gZGlzYWJsZSBkbWEtdW5tYXBwaW5nIHRoZSBzb3VyY2UgYnVmZmVyKHMpCisgKiBARE1BX0NPTVBMX1NLSVBfREVTVF9VTk1BUCAtIHNldCB0byBkaXNhYmxlIGRtYS11bm1hcHBpbmcgdGhlIGRlc3RpbmF0aW9uKHMpCiAgKi8KIGVudW0gZG1hX2N0cmxfZmxhZ3MgewogCURNQV9QUkVQX0lOVEVSUlVQVCA9ICgxIDw8IDApLAogCURNQV9DVFJMX0FDSyA9ICgxIDw8IDEpLAorCURNQV9DT01QTF9TS0lQX1NSQ19VTk1BUCA9ICgxIDw8IDIpLAorCURNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVAgPSAoMSA8PCAzKSwKIH07CiAKIC8qKgpAQCAtMTE1LDYgKzEzMiwzMiBAQAogdHlwZWRlZiBzdHJ1Y3QgeyBERUNMQVJFX0JJVE1BUChiaXRzLCBETUFfVFhfVFlQRV9FTkQpOyB9IGRtYV9jYXBfbWFza190OwogCiAvKioKKyAqIHN0cnVjdCBkbWFfc2xhdmUgLSBJbmZvcm1hdGlvbiBhYm91dCBhIERNQSBzbGF2ZQorICogQGRldjogZGV2aWNlIGFjdGluZyBhcyBETUEgc2xhdmUKKyAqIEBkbWFfZGV2OiByZXF1aXJlZCBETUEgbWFzdGVyIGRldmljZS4gSWYgbm9uLU5VTEwsIHRoZSBjbGllbnQgY2FuIG5vdCBiZQorICoJYm91bmQgdG8gb3RoZXIgbWFzdGVycyB0aGFuIHRoaXMuCisgKiBAdHhfcmVnOiBwaHlzaWNhbCBhZGRyZXNzIG9mIGRhdGEgcmVnaXN0ZXIgdXNlZCBmb3IKKyAqCW1lbW9yeS10by1wZXJpcGhlcmFsIHRyYW5zZmVycworICogQHJ4X3JlZzogcGh5c2ljYWwgYWRkcmVzcyBvZiBkYXRhIHJlZ2lzdGVyIHVzZWQgZm9yCisgKglwZXJpcGhlcmFsLXRvLW1lbW9yeSB0cmFuc2ZlcnMKKyAqIEByZWdfd2lkdGg6IHBlcmlwaGVyYWwgcmVnaXN0ZXIgd2lkdGgKKyAqCisgKiBJZiBkbWFfZGV2IGlzIG5vbi1OVUxMLCB0aGUgY2xpZW50IGNhbiBub3QgYmUgYm91bmQgdG8gb3RoZXIgRE1BCisgKiBtYXN0ZXJzIHRoYW4gdGhlIG9uZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZGV2aWNlLiBUaGUgRE1BIG1hc3RlcgorICogZHJpdmVyIG1heSB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgY29udHJvbGxlci1zcGVjaWZpYworICogZGF0YSB3cmFwcGVkIGFyb3VuZCB0aGlzIHN0cnVjdC4gRHJpdmVycyBvZiBwbGF0Zm9ybSBjb2RlIHRoYXQgc2V0cworICogdGhlIGRtYV9kZXYgZmllbGQgbXVzdCB0aGVyZWZvcmUgbWFrZSBzdXJlIHRvIHVzZSBhbiBhcHByb3ByaWF0ZQorICogY29udHJvbGxlci1zcGVjaWZpYyBkbWEgc2xhdmUgc3RydWN0dXJlIHdyYXBwaW5nIHRoaXMgc3RydWN0LgorICovCitzdHJ1Y3QgZG1hX3NsYXZlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBkZXZpY2UJCSpkbWFfZGV2OworCWRtYV9hZGRyX3QJCXR4X3JlZzsKKwlkbWFfYWRkcl90CQlyeF9yZWc7CisJZW51bSBkbWFfc2xhdmVfd2lkdGgJcmVnX3dpZHRoOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgZG1hX2NoYW5fcGVyY3B1IC0gdGhlIHBlci1DUFUgcGFydCBvZiBzdHJ1Y3QgZG1hX2NoYW4KICAqIEByZWZjb3VudDogbG9jYWxfdCB1c2VkIGZvciBvcGVuLWNvZGVkICJiaWdyZWYiIGNvdW50aW5nCiAgKiBAbWVtY3B5X2NvdW50OiB0cmFuc2FjdGlvbiBjb3VudGVyCkBAIC0xMzksNiArMTgyLDcgQEAKICAqIEByY3U6IHRoZSBETUEgY2hhbm5lbCdzIFJDVSBoZWFkCiAgKiBAZGV2aWNlX25vZGU6IHVzZWQgdG8gYWRkIHRoaXMgdG8gdGhlIGRldmljZSBjaGFuIGxpc3QKICAqIEBsb2NhbDogcGVyLWNwdSBwb2ludGVyIHRvIGEgc3RydWN0IGRtYV9jaGFuX3BlcmNwdQorICogQGNsaWVudC1jb3VudDogaG93IG1hbnkgY2xpZW50cyBhcmUgdXNpbmcgdGhpcyBjaGFubmVsCiAgKi8KIHN0cnVjdCBkbWFfY2hhbiB7CiAJc3RydWN0IGRtYV9kZXZpY2UgKmRldmljZTsKQEAgLTE1NCw2ICsxOTgsNyBAQAogCiAJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2Vfbm9kZTsKIAlzdHJ1Y3QgZG1hX2NoYW5fcGVyY3B1ICpsb2NhbDsKKwlpbnQgY2xpZW50X2NvdW50OwogfTsKIAogI2RlZmluZSB0b19kbWFfY2hhbihwKSBjb250YWluZXJfb2YocCwgc3RydWN0IGRtYV9jaGFuLCBkZXYpCkBAIC0yMDIsMTEgKzI0NywxNCBAQAogICogQGV2ZW50X2NhbGxiYWNrOiBmdW5jIHB0ciB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMKICAqIEBjYXBfbWFzazogb25seSByZXR1cm4gY2hhbm5lbHMgdGhhdCBzYXRpc2Z5IHRoZSByZXF1ZXN0ZWQgY2FwYWJpbGl0aWVzCiAgKiAgYSB2YWx1ZSBvZiB6ZXJvIGNvcnJlc3BvbmRzIHRvIGFueSBjYXBhYmlsaXR5CisgKiBAc2xhdmU6IGRhdGEgZm9yIHByZXBhcmluZyBzbGF2ZSB0cmFuc2Zlci4gTXVzdCBiZSBub24tTlVMTCBpZmYgdGhlCisgKiAgRE1BX1NMQVZFIGNhcGFiaWxpdHkgaXMgcmVxdWVzdGVkLgogICogQGdsb2JhbF9ub2RlOiBsaXN0X2hlYWQgZm9yIGdsb2JhbCBkbWFfY2xpZW50X2xpc3QKICAqLwogc3RydWN0IGRtYV9jbGllbnQgewogCWRtYV9ldmVudF9jYWxsYmFjawlldmVudF9jYWxsYmFjazsKIAlkbWFfY2FwX21hc2tfdAkJY2FwX21hc2s7CisJc3RydWN0IGRtYV9zbGF2ZQkqc2xhdmU7CiAJc3RydWN0IGxpc3RfaGVhZAlnbG9iYWxfbm9kZTsKIH07CiAKQEAgLTI2Myw2ICszMTEsOCBAQAogICogQGRldmljZV9wcmVwX2RtYV96ZXJvX3N1bTogcHJlcGFyZXMgYSB6ZXJvX3N1bSBvcGVyYXRpb24KICAqIEBkZXZpY2VfcHJlcF9kbWFfbWVtc2V0OiBwcmVwYXJlcyBhIG1lbXNldCBvcGVyYXRpb24KICAqIEBkZXZpY2VfcHJlcF9kbWFfaW50ZXJydXB0OiBwcmVwYXJlcyBhbiBlbmQgb2YgY2hhaW4gaW50ZXJydXB0IG9wZXJhdGlvbgorICogQGRldmljZV9wcmVwX3NsYXZlX3NnOiBwcmVwYXJlcyBhIHNsYXZlIGRtYSBvcGVyYXRpb24KKyAqIEBkZXZpY2VfdGVybWluYXRlX2FsbDogdGVybWluYXRlIGFsbCBwZW5kaW5nIG9wZXJhdGlvbnMKICAqIEBkZXZpY2VfaXNzdWVfcGVuZGluZzogcHVzaCBwZW5kaW5nIHRyYW5zYWN0aW9ucyB0byBoYXJkd2FyZQogICovCiBzdHJ1Y3QgZG1hX2RldmljZSB7CkBAIC0yNzksNyArMzI5LDggQEAKIAlpbnQgZGV2X2lkOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCWludCAoKmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcykoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKKwlpbnQgKCpkZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMpKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCXN0cnVjdCBkbWFfY2xpZW50ICpjbGllbnQpOwogCXZvaWQgKCpkZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcykoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKIAogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqKCpkZXZpY2VfcHJlcF9kbWFfbWVtY3B5KSgKQEAgLTI5Nyw2ICszNDgsMTIgQEAKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKigqZGV2aWNlX3ByZXBfZG1hX2ludGVycnVwdCkoCiAJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKigqZGV2aWNlX3ByZXBfc2xhdmVfc2cpKAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQl1bnNpZ25lZCBpbnQgc2dfbGVuLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCXZvaWQgKCpkZXZpY2VfdGVybWluYXRlX2FsbCkoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKKwogCWVudW0gZG1hX3N0YXR1cyAoKmRldmljZV9pc190eF9jb21wbGV0ZSkoc3RydWN0IGRtYV9jaGFuICpjaGFuLAogCQkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgZG1hX2Nvb2tpZV90ICpsYXN0LAogCQkJZG1hX2Nvb2tpZV90ICp1c2VkKTsKQEAgLTMxOCwxNiArMzc1LDE0IEBACiB2b2lkIGRtYV9hc3luY190eF9kZXNjcmlwdG9yX2luaXQoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCwKIAlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOwogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFzeW5jX3R4X2FjayhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQorc3RhdGljIGlubGluZSB2b2lkIGFzeW5jX3R4X2FjayhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQogewogCXR4LT5mbGFncyB8PSBETUFfQ1RSTF9BQ0s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1hc3luY190eF90ZXN0X2FjayhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQorc3RhdGljIGlubGluZSBib29sIGFzeW5jX3R4X3Rlc3RfYWNrKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7Ci0JcmV0dXJuIHR4LT5mbGFncyAmIERNQV9DVFJMX0FDSzsKKwlyZXR1cm4gKHR4LT5mbGFncyAmIERNQV9DVFJMX0FDSykgPT0gRE1BX0NUUkxfQUNLOwogfQogCiAjZGVmaW5lIGZpcnN0X2RtYV9jYXAobWFzaykgX19maXJzdF9kbWFfY2FwKCYobWFzaykpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R3X2RtYWMuaCBiL2luY2x1ZGUvbGludXgvZHdfZG1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZDIxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2R3X2RtYWMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBETUEgQ29udHJvbGxlciAoYWthIERNQUNBIG9uCisgKiBBVlIzMiBzeXN0ZW1zLikKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIERXX0RNQUNfSAorI2RlZmluZSBEV19ETUFDX0gKKworI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorCisvKioKKyAqIHN0cnVjdCBkd19kbWFfcGxhdGZvcm1fZGF0YSAtIENvbnRyb2xsZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisgKiBAbnJfY2hhbm5lbHM6IE51bWJlciBvZiBjaGFubmVscyBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgKG1heCA4KQorICovCitzdHJ1Y3QgZHdfZG1hX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludAlucl9jaGFubmVsczsKK307CisKKy8qKgorICogc3RydWN0IGR3X2RtYV9zbGF2ZSAtIENvbnRyb2xsZXItc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgYSBzbGF2ZQorICogQHNsYXZlOiBHZW5lcmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbGF2ZQorICogQGN0bF9sbzogUGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXIgZm9yIHRoZSBDVExfTE8gcmVnaXN0ZXIKKyAqIEBjZmdfaGk6IFBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVyIGZvciB0aGUgQ0ZHX0hJIHJlZ2lzdGVyCisgKiBAY2ZnX2xvOiBQbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplciBmb3IgdGhlIENGR19MTyByZWdpc3RlcgorICovCitzdHJ1Y3QgZHdfZG1hX3NsYXZlIHsKKwlzdHJ1Y3QgZG1hX3NsYXZlCXNsYXZlOworCXUzMgkJCWNmZ19oaTsKKwl1MzIJCQljZmdfbG87Cit9OworCisvKiBQbGF0Zm9ybS1jb25maWd1cmFibGUgYml0cyBpbiBDRkdfSEkgKi8KKyNkZWZpbmUgRFdDX0NGR0hfRkNNT0RFCQkoMSA8PCAwKQorI2RlZmluZSBEV0NfQ0ZHSF9GSUZPX01PREUJKDEgPDwgMSkKKyNkZWZpbmUgRFdDX0NGR0hfUFJPVENUTCh4KQkoKHgpIDw8IDIpCisjZGVmaW5lIERXQ19DRkdIX1NSQ19QRVIoeCkJKCh4KSA8PCA3KQorI2RlZmluZSBEV0NfQ0ZHSF9EU1RfUEVSKHgpCSgoeCkgPDwgMTEpCisKKy8qIFBsYXRmb3JtLWNvbmZpZ3VyYWJsZSBiaXRzIGluIENGR19MTyAqLworI2RlZmluZSBEV0NfQ0ZHTF9QUklPKHgpCSgoeCkgPDwgNSkJLyogcHJpb3JpdHkgKi8KKyNkZWZpbmUgRFdDX0NGR0xfTE9DS19DSF9YRkVSCSgwIDw8IDEyKQkvKiBzY29wZSBvZiBMT0NLX0NIICovCisjZGVmaW5lIERXQ19DRkdMX0xPQ0tfQ0hfQkxPQ0sJKDEgPDwgMTIpCisjZGVmaW5lIERXQ19DRkdMX0xPQ0tfQ0hfWEFDVAkoMiA8PCAxMikKKyNkZWZpbmUgRFdDX0NGR0xfTE9DS19CVVNfWEZFUgkoMCA8PCAxNCkJLyogc2NvcGUgb2YgTE9DS19CVVMgKi8KKyNkZWZpbmUgRFdDX0NGR0xfTE9DS19CVVNfQkxPQ0sJKDEgPDwgMTQpCisjZGVmaW5lIERXQ19DRkdMX0xPQ0tfQlVTX1hBQ1QJKDIgPDwgMTQpCisjZGVmaW5lIERXQ19DRkdMX0xPQ0tfQ0gJKDEgPDwgMTUpCS8qIGNoYW5uZWwgbG9ja291dCAqLworI2RlZmluZSBEV0NfQ0ZHTF9MT0NLX0JVUwkoMSA8PCAxNikJLyogYnVzbWFzdGVyIGxvY2tvdXQgKi8KKyNkZWZpbmUgRFdDX0NGR0xfSFNfRFNUX1BPTAkoMSA8PCAxOCkJLyogZHN0IGhhbmRzaGFrZSBhY3RpdmUgbG93ICovCisjZGVmaW5lIERXQ19DRkdMX0hTX1NSQ19QT0wJKDEgPDwgMTkpCS8qIHNyYyBoYW5kc2hha2UgYWN0aXZlIGxvdyAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkd19kbWFfc2xhdmUgKnRvX2R3X2RtYV9zbGF2ZShzdHJ1Y3QgZG1hX3NsYXZlICpzbGF2ZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNsYXZlLCBzdHJ1Y3QgZHdfZG1hX3NsYXZlLCBzbGF2ZSk7Cit9CisKKyNlbmRpZiAvKiBEV19ETUFDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWlzYS5oIGIvaW5jbHVkZS9saW51eC9laXNhLmgKaW5kZXggZmU4MDZiNi4uZTYxYzBiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9laXNhLmgKKysrIGIvaW5jbHVkZS9saW51eC9laXNhLmgKQEAgLTQwLDcgKzQwLDcgQEAKIAl1NjQgICAgICAgICAgICAgICAgICAgZG1hX21hc2s7CiAJc3RydWN0IGRldmljZSAgICAgICAgIGRldjsgLyogZ2VuZXJpYyBkZXZpY2UgKi8KICNpZmRlZiBDT05GSUdfRUlTQV9OQU1FUwotCWNoYXIJCSAgICAgIHByZXR0eV9uYW1lW0RFVklDRV9OQU1FX1NJWkVdOworCWNoYXIJCSAgICAgIHByZXR0eV9uYW1lWzUwXTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCBjOGQyMTYzLi44YmI1ZTg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtMjcyLDYgKzI3MiwxMiBAQAogCUVUSF9GTEFHX0xSTwkJPSAoMSA8PCAxNSksCS8qIExSTyBpcyBlbmFibGVkICovCiB9OwogCitzdHJ1Y3QgZXRodG9vbF9yeG5mYyB7CisJX191MzIJCWNtZDsKKwlfX3UzMgkJZmxvd190eXBlOworCV9fdTY0CQlkYXRhOworfTsKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogc3RydWN0IG5ldF9kZXZpY2U7CkBAIC0zOTYsNiArNDAyLDggQEAKIAkvKiB0aGUgZm9sbG93aW5nIGhvb2tzIGFyZSBvYnNvbGV0ZSAqLwogCWludAkoKnNlbGZfdGVzdF9jb3VudCkoc3RydWN0IG5ldF9kZXZpY2UgKik7LyogdXNlIGdldF9zc2V0X2NvdW50ICovCiAJaW50CSgqZ2V0X3N0YXRzX2NvdW50KShzdHJ1Y3QgbmV0X2RldmljZSAqKTsvKiB1c2UgZ2V0X3NzZXRfY291bnQgKi8KKwlpbnQJKCpnZXRfcnhoYXNoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKKwlpbnQJKCpzZXRfcnhoYXNoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKIH07CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCkBAIC00NDIsNiArNDUwLDkgQEAKICNkZWZpbmUgRVRIVE9PTF9HUEZMQUdTCQkweDAwMDAwMDI3IC8qIEdldCBkcml2ZXItcHJpdmF0ZSBmbGFncyBiaXRtYXAgKi8KICNkZWZpbmUgRVRIVE9PTF9TUEZMQUdTCQkweDAwMDAwMDI4IC8qIFNldCBkcml2ZXItcHJpdmF0ZSBmbGFncyBiaXRtYXAgKi8KIAorI2RlZmluZQlFVEhUT09MX0dSWEZICQkweDAwMDAwMDI5IC8qIEdldCBSWCBmbG93IGhhc2ggY29uZmlndXJhdGlvbiAqLworI2RlZmluZQlFVEhUT09MX1NSWEZICQkweDAwMDAwMDJhIC8qIFNldCBSWCBmbG93IGhhc2ggY29uZmlndXJhdGlvbiAqLworCiAvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCiAjZGVmaW5lIFNQQVJDX0VUSF9TU0VUCQlFVEhUT09MX1NTRVQKQEAgLTUyOCw0ICs1MzksMjYgQEAKICNkZWZpbmUgV0FLRV9NQUdJQwkJKDEgPDwgNSkKICNkZWZpbmUgV0FLRV9NQUdJQ1NFQ1VSRQkoMSA8PCA2KSAvKiBvbmx5IG1lYW5pbmdmdWwgaWYgV0FLRV9NQUdJQyAqLwogCisvKiBMMy1MNCBuZXR3b3JrIHRyYWZmaWMgZmxvdyB0eXBlcyAqLworI2RlZmluZQlUQ1BfVjRfRkxPVwkweDAxCisjZGVmaW5lCVVEUF9WNF9GTE9XCTB4MDIKKyNkZWZpbmUJU0NUUF9WNF9GTE9XCTB4MDMKKyNkZWZpbmUJQUhfRVNQX1Y0X0ZMT1cJMHgwNAorI2RlZmluZQlUQ1BfVjZfRkxPVwkweDA1CisjZGVmaW5lCVVEUF9WNl9GTE9XCTB4MDYKKyNkZWZpbmUJU0NUUF9WNl9GTE9XCTB4MDcKKyNkZWZpbmUJQUhfRVNQX1Y2X0ZMT1cJMHgwOAorCisvKiBMMy1MNCBuZXR3b3JrIHRyYWZmaWMgZmxvdyBoYXNoIG9wdGlvbnMgKi8KKyNkZWZpbmUJUlhIX0RFVl9QT1JUCSgxIDw8IDApCisjZGVmaW5lCVJYSF9MMkRBCSgxIDw8IDEpCisjZGVmaW5lCVJYSF9WTEFOCSgxIDw8IDIpCisjZGVmaW5lCVJYSF9MM19QUk9UTwkoMSA8PCAzKQorI2RlZmluZQlSWEhfSVBfU1JDCSgxIDw8IDQpCisjZGVmaW5lCVJYSF9JUF9EU1QJKDEgPDwgNSkKKyNkZWZpbmUJUlhIX0w0X0JfMF8xCSgxIDw8IDYpIC8qIHNyYyBwb3J0IGluIGNhc2Ugb2YgVENQL1VEUC9TQ1RQICovCisjZGVmaW5lCVJYSF9MNF9CXzJfMwkoMSA8PCA3KSAvKiBkc3QgcG9ydCBpbiBjYXNlIG9mIFRDUC9VRFAvU0NUUCAqLworI2RlZmluZQlSWEhfRElTQ0FSRAkoMSA8PCAzMSkKKworCiAjZW5kaWYgLyogX0xJTlVYX0VUSFRPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGM2NDU1ZGEuLjljMmFjNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTkxOCwxMiArOTE4LDEyIEBACiAJc3RydWN0IGxpc3RfaGVhZCBmbF9saW5rOwkvKiBkb3VibHkgbGlua2VkIGxpc3Qgb2YgYWxsIGxvY2tzICovCiAJc3RydWN0IGxpc3RfaGVhZCBmbF9ibG9jazsJLyogY2lyY3VsYXIgbGlzdCBvZiBibG9ja2VkIHByb2Nlc3NlcyAqLwogCWZsX293bmVyX3QgZmxfb3duZXI7CisJdW5zaWduZWQgY2hhciBmbF9mbGFnczsKKwl1bnNpZ25lZCBjaGFyIGZsX3R5cGU7CiAJdW5zaWduZWQgaW50IGZsX3BpZDsKIAlzdHJ1Y3QgcGlkICpmbF9uc3BpZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBmbF93YWl0OwogCXN0cnVjdCBmaWxlICpmbF9maWxlOwotCXVuc2lnbmVkIGNoYXIgZmxfZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciBmbF90eXBlOwogCWxvZmZfdCBmbF9zdGFydDsKIAlsb2ZmX3QgZmxfZW5kOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2VuZXRfcGQuaCBiL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oCmluZGV4IDliYzA0NWIuLjgzMDBjYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oCkBAIC0xMDMsMTAgKzEwMyw2IEBACiAJc3RydWN0IGZzX21paV9iaXQgCW1kaW9fZGlyOwogCXN0cnVjdCBmc19taWlfYml0IAltZGlvX2RhdDsKIAlzdHJ1Y3QgZnNfbWlpX2JpdAltZGNfZGF0OwotCWludCBtZGlvX3BvcnQ7CS8qIHBvcnQgJiBiaXQgZm9yIE1ESU8gKi8KLQlpbnQgbWRpb19iaXQ7Ci0JaW50IG1kY19wb3J0OwkvKiBwb3J0ICYgYml0IGZvciBNREMgICovCi0JaW50IG1kY19iaXQ7CiAJaW50IGRlbGF5OwkvKiBkZWxheSBpbiB1cyAgICAgICAgICovCiAJaW50IGlycVszMl07IAkvKiBpcnFzIHBlciBwaHkncyAqLwogfTsKQEAgLTEzNSwxMSArMTMxLDcgQEAKIAl1MzIgZGV2aWNlX2ZsYWdzOwogCiAJaW50IHBoeV9hZGRyOwkJLyogdGhlIHBoeSBhZGRyZXNzICgtMSBubyBwaHkpICovCi0jaWZkZWYgQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcKIAljaGFyIGJ1c19pZFsxNl07Ci0jZWxzZQotCWNvbnN0IGNoYXIqCWJ1c19pZDsKLSNlbmRpZgogCWludCBwaHlfaXJxOwkJLyogdGhlIHBoeSBpcnEgKGlmIGl0IGV4aXN0cykgICovCiAKIAljb25zdCBzdHJ1Y3QgZnNfbWlpX2J1c19pbmZvICpidXNfaW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaCBiL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAppbmRleCBjNDE1YTQ5Li40ZTYyNWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCkBAIC02OSw2ICs2OSw3IEBACiAjZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTgkJMHgwMDAwMDAyMAogI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0VYVEVOREVEX0hBU0gJMHgwMDAwMDA0MAogI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX1BBRERJTkcJCTB4MDAwMDAwODAKKyNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQJMHgwMDAwMDEwMAogCiAvKiBGbGFncyBpbiBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKi8KICNkZWZpbmUgRlNMX0dJQU5GQVJfQlJEX0hBU19QSFlfSU5UUgkweDAwMDAwMDAxIC8qIHNldCBvciB1c2UgYSB0aW1lciAqLwpAQCAtMTI1LDQgKzEyNiwxMCBAQAogCWludCgqdm9sdGFnZV9zZXQpKGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKTsKIH07CiAKKy8qIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIGN1cnJlbnQgc3VzcGVuZCBvcGVyYXRpb24gd291bGQKKyAqIGxlYWQgdG8gYSBkZWVwIHNsZWVwIChpLmUuIHBvd2VyIHJlbW92ZWQgZnJvbSB0aGUgY29yZSwKKyAqIGluc3RlYWQgb2YganVzdCB0aGUgY2xvY2spLgorICovCitpbnQgZnNsX2RlZXBfc2xlZXAodm9pZCk7CisKICNlbmRpZiAvKiBfRlNMX0RFVklDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oIGIvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCmluZGV4IGFmYWQ5NTIuLmY2NGUyOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKQEAgLTY4LDcgKzY4LDYgQEAKIAogaW50IGdhbWVwb3J0X29wZW4oc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2LCBpbnQgbW9kZSk7CiB2b2lkIGdhbWVwb3J0X2Nsb3NlKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpOwotdm9pZCBnYW1lcG9ydF9yZXNjYW4oc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19HQU1FUE9SVCkgfHwgKGRlZmluZWQoTU9EVUxFKSAmJiBkZWZpbmVkKENPTkZJR19HQU1FUE9SVF9NT0RVTEUpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmgKaW5kZXggMTEwODMzNi4uNGNjOTEzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5lcmljX3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaApAQCAtMTQsNiArMTQsNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKIHN0cnVjdCByZWFsX2RyaXZlciB7CiAgIHZvaWQgICAgICAgICAgICAgICAgICAgICgqZGlzYWJsZV90eF9pbnRlcnJ1cHRzKSAodm9pZCAqKTsKQEAgLTMzLDE3ICszNCwxMiBAQAogCiBzdHJ1Y3QgZ3NfcG9ydCB7CiAgIGludCAgICAgICAgICAgICAgICAgICAgIG1hZ2ljOworICBzdHJ1Y3QgdHR5X3BvcnQJICBwb3J0OwogICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAqeG1pdF9idWY7IAogICBpbnQgICAgICAgICAgICAgICAgICAgICB4bWl0X2hlYWQ7CiAgIGludCAgICAgICAgICAgICAgICAgICAgIHhtaXRfdGFpbDsKICAgaW50ICAgICAgICAgICAgICAgICAgICAgeG1pdF9jbnQ7CiAgIHN0cnVjdCBtdXRleCAgICAgICAgICAgIHBvcnRfd3JpdGVfbXV0ZXg7Ci0gIGludCAgICAgICAgICAgICAgICAgICAgIGZsYWdzOwotICB3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBvcGVuX3dhaXQ7Ci0gIHdhaXRfcXVldWVfaGVhZF90ICAgICAgIGNsb3NlX3dhaXQ7Ci0gIGludCAgICAgICAgICAgICAgICAgICAgIGNvdW50OwotICBpbnQgICAgICAgICAgICAgICAgICAgICBibG9ja2VkX29wZW47Ci0gIHN0cnVjdCB0dHlfc3RydWN0ICAgICAgICp0dHk7CiAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGV2ZW50OwogICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBjbG9zaW5nX3dhaXQ7CiAgIGludCAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2RlbGF5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvX2tleXMuaCBiL2luY2x1ZGUvbGludXgvZ3Bpb19rZXlzLmgKaW5kZXggYzZkM2E5ZC4uZWM2ZWNkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ncGlvX2tleXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW9fa2V5cy5oCkBAIC05LDYgKzksNyBAQAogCWNoYXIgKmRlc2M7CiAJaW50IHR5cGU7CQkvKiBpbnB1dCBldmVudCB0eXBlIChFVl9LRVksIEVWX1NXKSAqLwogCWludCB3YWtldXA7CQkvKiBjb25maWd1cmUgdGhlIGJ1dHRvbiBhcyBhIHdha2UtdXAgc291cmNlICovCisJaW50IGRlYm91bmNlX2ludGVydmFsOwkvKiBkZWJvdW5jZSB0aWNrcyBpbnRlcnZhbCBpbiBtc2VjcyAqLwogfTsKIAogc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGF5ZXNlc3AuaCBiL2luY2x1ZGUvbGludXgvaGF5ZXNlc3AuaAppbmRleCAyMTc3ZWU1Li45NDBhZWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hheWVzZXNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9oYXllc2VzcC5oCkBAIC03NiwxMSArNzYsMTAgQEAKIAogc3RydWN0IGVzcF9zdHJ1Y3QgewogCWludAkJCW1hZ2ljOworCXN0cnVjdCB0dHlfcG9ydAkJcG9ydDsKIAlzcGlubG9ja190CQlsb2NrOwotCWludAkJCXBvcnQ7CisJaW50CQkJaW9fcG9ydDsKIAlpbnQJCQlpcnE7Ci0JaW50CQkJZmxhZ3M7IAkJLyogZGVmaW5lZCBpbiB0dHkuaCAqLwotCXN0cnVjdCB0dHlfc3RydWN0IAkqdHR5OwogCWludAkJCXJlYWRfc3RhdHVzX21hc2s7CiAJaW50CQkJaWdub3JlX3N0YXR1c19tYXNrOwogCWludAkJCXRpbWVvdXQ7CkBAIC05MywxNCArOTIsMTAgQEAKIAlpbnQJCQlNQ1I7IAkvKiBNb2RlbSBjb250cm9sIHJlZ2lzdGVyICovCiAJdW5zaWduZWQgbG9uZwkJbGFzdF9hY3RpdmU7CiAJaW50CQkJbGluZTsKLQlpbnQJCQljb3VudDsJICAgIC8qICMgb2YgZmQgb24gZGV2aWNlICovCi0JaW50CQkJYmxvY2tlZF9vcGVuOyAvKiAjIG9mIGJsb2NrZWQgb3BlbnMgKi8KIAl1bnNpZ25lZCBjaGFyIAkJKnhtaXRfYnVmOwogCWludAkJCXhtaXRfaGVhZDsKIAlpbnQJCQl4bWl0X3RhaWw7CiAJaW50CQkJeG1pdF9jbnQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90CWNsb3NlX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJZGVsdGFfbXNyX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJYnJlYWtfd2FpdDsKIAlzdHJ1Y3QgYXN5bmNfaWNvdW50CWljb3VudDsJLyoga2VybmVsIGNvdW50ZXJzIGZvciB0aGUgNCBpbnB1dCBpbnRlcnJ1cHRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGMuaCBiL2luY2x1ZGUvbGludXgvaGRsYy5oCmluZGV4IDYxMTU1NDUuLmM1OTc2OTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRsYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRsYy5oCkBAIC00NSw3ICs0NSw2IEBACiAKIC8qIFBvaW50ZWQgdG8gYnkgZGV2LT5wcml2ICovCiB0eXBlZGVmIHN0cnVjdCBoZGxjX2RldmljZSB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJLyogdXNlZCBieSBIRExDIGxheWVyIHRvIHRha2UgY29udHJvbCBvdmVyIEhETEMgZGV2aWNlIGZyb20gaHcgZHJpdmVyKi8KIAlpbnQgKCphdHRhY2gpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGVuY29kaW5nLCB1bnNpZ25lZCBzaG9ydCBwYXJpdHkpOwpAQCAtMTA5LDEyICsxMDgsNiBAQAogLyogTWF5IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHRvIGdhaW4gY29udHJvbCBvdmVyIEhETEMgZGV2aWNlICovCiB2b2lkIGRldGFjaF9oZGxjX3Byb3RvY29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaGRsY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAmZGV2X3RvX2hkbGMoZGV2KS0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIF9faW5saW5lX18gX19iZTE2IGhkbGNfdHlwZV90cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZC5oCmluZGV4IGZlNTZiODYuLmFjNGU2NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQuaApAQCAtNTEyLDcgKzUxMiw3IEBACiAKIC8qIEFwcGxpY2F0aW9ucyBmcm9tIEhJRCBVc2FnZSBUYWJsZXMgNC84Lzk5IFZlcnNpb24gMS4xICovCiAvKiBXZSBpZ25vcmUgYSBmZXcgaW5wdXQgYXBwbGljYXRpb25zIHRoYXQgYXJlIG5vdCB3aWRlbHkgdXNlZCAqLwotI2RlZmluZSBJU19JTlBVVF9BUFBMSUNBVElPTihhKSAoKChhID49IDB4MDAwMTAwMDApICYmIChhIDw9IDB4MDAwMTAwMDgpKSB8fCAoYSA9PSAweDAwMDEwMDgwKSB8fCAoYSA9PSAweDAwMGMwMDAxKSkKKyNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKCgoYSA+PSAweDAwMDEwMDAwKSAmJiAoYSA8PSAweDAwMDEwMDA4KSkgfHwgKGEgPT0gMHgwMDAxMDA4MCkgfHwgKGEgPT0gMHgwMDBjMDAwMSkgfHwgKGEgPT0gMHgwMDBkMDAwMikpCiAKIC8qIEhJRCBjb3JlIEFQSSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCBlZjEzYjdjNi4uNDg2MjM5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCkBAIC0zMywxNSArMzMsMTEgQEAKIAogI2RlZmluZSBJMkNfRFJJVkVSSURfTVNQMzQwMAkgMQogI2RlZmluZSBJMkNfRFJJVkVSSURfVFVORVIJIDIKLSNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTg0MjUJIDQJLyogc3RlcmVvIHNvdW5kIHByb2Nlc3NvcgkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfVEVBNjQyMAkgNQkvKiBhdWRpbyBtYXRyaXggc3dpdGNoCQkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfVEVBNjQxNUMJIDYJLyogdmlkZW8gbWF0cml4IHN3aXRjaAkJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTk4NDAJIDcJLyogc3RlcmVvIHNvdW5kIHByb2Nlc3NvcgkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzExMUEJIDgJLyogdmlkZW8gaW5wdXQgcHJvY2Vzc29yCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTg1QgkxMwkvKiB2aWRlbyBlbmNvZGVyCQkqLwotI2RlZmluZSBJMkNfRFJJVkVSSURfVEVBNjMwMAkxOAkvKiBhdWRpbyBtaXhlcgkJCSovCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODUwCTIwCS8qIGF1ZGlvIG1peGVyCQkJKi8KLSNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTk4NTUJMjEJLyogYXVkaW8gbWl4ZXIJCQkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzExMAkyMgkvKiB2aWRlbyBkZWNvZGVyCQkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfTUdBVFZPCTIzCS8qIE1hdHJveCBUVk91dAkJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE1MjQ5CTI0CS8qIFNBQTUyNDkgYW5kIGNvbXBhdGlibGVzCSovCkBAIC01MCw5ICs0Niw3IEBACiAjZGVmaW5lIEkyQ19EUklWRVJJRF9UREE3NDMyCTI3CS8qIFN0ZXJlbyBzb3VuZCBwcm9jZXNzb3IJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1RWTUlYRVIgICAgMjggICAgICAvKiBNaXhlciBkcml2ZXIgZm9yIHR2IGNhcmRzICAgICovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9UVkFVRElPICAgIDI5ICAgICAgLyogR2VuZXJpYyBUViBzb3VuZCBkcml2ZXIgICAgICAqLwotI2RlZmluZSBJMkNfRFJJVkVSSURfVERBOTg3MyAgICAzMSAgICAgIC8qIFRWIHNvdW5kIGRlY29kZXIgY2hpcCAgICAgICAgKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTk4NzUgICAgMzIgICAgICAvKiBUViBzb3VuZCBkZWNvZGVyIGNoaXAgICAgICAgICovCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9QSUMxNkM1NF9QVjkgMzMgICAgLyogQXVkaW8gbXV4L2lyIHJlY2VpdmVyICAgICAgICAqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQlQ4MTkJNDAgICAgIC8qIHZpZGVvIGRlY29kZXIJCQkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQlQ4NTYJNDEgICAgIC8qIHZpZGVvIGVuY29kZXIJCQkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfVlBYMzIyMAk0MiAgICAgLyogdmlkZW8gZGVjb2Rlcit2YmkvdnR4dAkqLwpAQCAtNjMsNyArNTcsNiBAQAogI2RlZmluZSBJMkNfRFJJVkVSSURfSU5EWUNBTQk1OAkvKiBTR0kgSW5keUNhbQkJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9PVkNBTUNISVAJNjEJLyogT21uaVZpc2lvbiBDTU9TIGltYWdlIHNlbnMuCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9NQVg2OTAwCTYzCS8qIE1BWDY5MDAgcmVhbC10aW1lIGNsb2NrCSovCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODc0CTY2CS8qIFRWIHNvdW5kIGRlY29kZXIJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE2NzUySFMJNjcJLyogTVBFRzIgZW5jb2RlcgkJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1RWRUVQUk9NCTY4CS8qIFRWIEVFUFJPTQkJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9XTTg3NzUJNjkJLyogd204Nzc1IGF1ZGlvIHByb2Nlc3NvcgkqLwpAQCAtMTU4LDcgKzE1MSw2IEBACiAjZGVmaW5lIEkyQ19IV19TTUJVU19XOTk2OENGCTB4MDQwMDBkCiAjZGVmaW5lIEkyQ19IV19TTUJVU19PVjUxMQkweDA0MDAwZSAvKiBPVjUxMSgrKSBVU0IgMS4xIHdlYmNhbSBJQ3MgKi8KICNkZWZpbmUgSTJDX0hXX1NNQlVTX09WNTE4CTB4MDQwMDBmIC8qIE9WNTE4KCspIFVTQiAxLjEgd2ViY2FtIElDcyAqLwotI2RlZmluZSBJMkNfSFdfU01CVVNfT1ZGWDIJMHgwNDAwMTEgLyogQ3lwcmVzcy9PbW5pVmlzaW9uIEZYMiB3ZWJjYW0gKi8KICNkZWZpbmUgSTJDX0hXX1NNQlVTX0NBRkUJMHgwNDAwMTIgLyogTWFydmVsbCA4OEFMUDAxICJDQUZFIiBjYW0gICovCiAjZGVmaW5lIEkyQ19IV19TTUJVU19BTEkxNTYzCTB4MDQwMDEzCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDQ3MjYxMjYuLmQ2N2NjY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMTc4LDYgKzE3OCw3IEBACiAJaWRlX2Fja19pbnRyX3QJKmFja19pbnRyOwkJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCiAJaHdpZl9jaGlwc2V0X3QgIGNoaXBzZXQ7CiAJc3RydWN0IGRldmljZQkqZGV2LCAqcGFyZW50OworCXVuc2lnbmVkIGxvbmcJY29uZmlnOwogfSBod19yZWdzX3Q7CiAKIHZvaWQgaWRlX2luaXRfcG9ydF9kYXRhKHN0cnVjdCBod2lmX3MgKiwgdW5zaWduZWQgaW50KTsKQEAgLTMwNyw3ICszMDgsNjUgQEAKIHN0cnVjdCBpZGVfYWNwaV9od2lmX2xpbms7CiAjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgaWRlX2RyaXZlX3MgeworLyogQVRBUEkgZGV2aWNlIGZsYWdzICovCitlbnVtIHsKKwlJREVfQUZMQUdfRFJRX0lOVEVSUlVQVAkJPSAoMSA8PCAwKSwKKwlJREVfQUZMQUdfTUVESUFfQ0hBTkdFRAkJPSAoMSA8PCAxKSwKKworCS8qIGlkZS1jZCAqLworCS8qIERyaXZlIGNhbm5vdCBsb2NrIHRoZSBkb29yLiAqLworCUlERV9BRkxBR19OT19ET09STE9DSwkJPSAoMSA8PCAyKSwKKwkvKiBEcml2ZSBjYW5ub3QgZWplY3QgdGhlIGRpc2MuICovCisJSURFX0FGTEFHX05PX0VKRUNUCQk9ICgxIDw8IDMpLAorCS8qIERyaXZlIGlzIGEgcHJlIEFUQVBJIDEuMiBkcml2ZS4gKi8KKwlJREVfQUZMQUdfUFJFX0FUQVBJMTIJCT0gKDEgPDwgNCksCisJLyogVE9DIGFkZHJlc3NlcyBhcmUgaW4gQkNELiAqLworCUlERV9BRkxBR19UT0NBRERSX0FTX0JDRAk9ICgxIDw8IDUpLAorCS8qIFRPQyB0cmFjayBudW1iZXJzIGFyZSBpbiBCQ0QuICovCisJSURFX0FGTEFHX1RPQ1RSQUNLU19BU19CQ0QJPSAoMSA8PCA2KSwKKwkvKgorCSAqIERyaXZlIGRvZXMgbm90IHByb3ZpZGUgZGF0YSBpbiBtdWx0aXBsZXMgb2YgU0VDVE9SX1NJWkUKKwkgKiB3aGVuIG1vcmUgdGhhbiBvbmUgaW50ZXJydXB0IGlzIG5lZWRlZC4KKwkgKi8KKwlJREVfQUZMQUdfTElNSVRfTkZSQU1FUwkJPSAoMSA8PCA3KSwKKwkvKiBTZWVraW5nIGluIHByb2dyZXNzLiAqLworCUlERV9BRkxBR19TRUVLSU5HCQk9ICgxIDw8IDgpLAorCS8qIFNhdmVkIFRPQyBpbmZvcm1hdGlvbiBpcyBjdXJyZW50LiAqLworCUlERV9BRkxBR19UT0NfVkFMSUQJCT0gKDEgPDwgOSksCisJLyogV2UgdGhpbmsgdGhhdCB0aGUgZHJpdmUgZG9vciBpcyBsb2NrZWQuICovCisJSURFX0FGTEFHX0RPT1JfTE9DS0VECQk9ICgxIDw8IDEwKSwKKwkvKiBTRVRfQ0RfU1BFRUQgY29tbWFuZCBpcyB1bnN1cHBvcnRlZC4gKi8KKwlJREVfQUZMQUdfTk9fU1BFRURfU0VMRUNUCT0gKDEgPDwgMTEpLAorCUlERV9BRkxBR19WRVJUT1NfMzAwX1NTRAk9ICgxIDw8IDEyKSwKKwlJREVfQUZMQUdfVkVSVE9TXzYwMF9FU0QJPSAoMSA8PCAxMyksCisJSURFX0FGTEFHX1NBTllPXzNDRAkJPSAoMSA8PCAxNCksCisJSURFX0FGTEFHX0ZVTExfQ0FQU19QQUdFCT0gKDEgPDwgMTUpLAorCUlERV9BRkxBR19QTEFZX0FVRElPX09LCQk9ICgxIDw8IDE2KSwKKwlJREVfQUZMQUdfTEVfU1BFRURfRklFTERTCT0gKDEgPDwgMTcpLAorCisJLyogaWRlLWZsb3BweSAqLworCS8qIEZvcm1hdCBpbiBwcm9ncmVzcyAqLworCUlERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1MJPSAoMSA8PCAxOCksCisJLyogQXZvaWQgY29tbWFuZHMgbm90IHN1cHBvcnRlZCBpbiBDbGlrIGRyaXZlICovCisJSURFX0FGTEFHX0NMSUtfRFJJVkUJCT0gKDEgPDwgMTkpLAorCS8qIFJlcXVpcmVzIEJIIGFsZ29yaXRobSBmb3IgcGFja2V0cyAqLworCUlERV9BRkxBR19aSVBfRFJJVkUJCT0gKDEgPDwgMjApLAorCisJLyogaWRlLXRhcGUgKi8KKwlJREVfQUZMQUdfSUdOT1JFX0RTQwkJPSAoMSA8PCAyMSksCisJLyogMCBXaGVuIHRoZSB0YXBlIHBvc2l0aW9uIGlzIHVua25vd24gKi8KKwlJREVfQUZMQUdfQUREUkVTU19WQUxJRAkJPSAoMSA8PAkyMiksCisJLyogRGV2aWNlIGFscmVhZHkgb3BlbmVkICovCisJSURFX0FGTEFHX0JVU1kJCQk9ICgxIDw8IDIzKSwKKwkvKiBBdHRlbXB0IHRvIGF1dG8tZGV0ZWN0IHRoZSBjdXJyZW50IHVzZXIgYmxvY2sgc2l6ZSAqLworCUlERV9BRkxBR19ERVRFQ1RfQlMJCT0gKDEgPDwgMjQpLAorCS8qIEN1cnJlbnRseSBvbiBhIGZpbGVtYXJrICovCisJSURFX0FGTEFHX0ZJTEVNQVJLCQk9ICgxIDw8IDI1KSwKKwkvKiAwID0gbm8gdGFwZSBpcyBsb2FkZWQsIHNvIHdlIGRvbid0IHJld2luZCBhZnRlciBlamVjdGluZyAqLworCUlERV9BRkxBR19NRURJVU1fUFJFU0VOVAk9ICgxIDw8IDI2KQorfTsKKworc3RydWN0IGlkZV9kcml2ZV9zIHsKIAljaGFyCQluYW1lWzRdOwkvKiBkcml2ZSBuYW1lLCBzdWNoIGFzICJoZGEiICovCiAgICAgICAgIGNoYXIgICAgICAgICAgICBkcml2ZXJfcmVxWzEwXTsJLyogcmVxdWVzdHMgc3BlY2lmaWMgZHJpdmVyICovCiAKQEAgLTM1NSw3ICs0MTQsNiBAQAogCXVuc2lnbmVkIG5vZG1hCQk6IDE7CS8qIGRpc2FsbG93IERNQSAqLwogCXVuc2lnbmVkIHJlbWFwXzBfdG9fMQk6IDE7CS8qIDA9bm9yZW1hcCwgMT1yZW1hcCAwLT4xIChmb3IgRVpEcml2ZSkgKi8KIAl1bnNpZ25lZCBibG9ja2VkICAgICAgICA6IDE7CS8qIDE9cG93ZXJtYW5hZ21lbnQgdG9sZCB1cyBub3QgdG8gZG8gYW55dGhpbmcsIHNvIHNsZWVwIG5pY2VseSAqLwotCXVuc2lnbmVkIHZkbWEJCTogMTsJLyogMT1kb2luZyBQSU8gb3ZlciBETUEgMD1kb2luZyBub3JtYWwgRE1BICovCiAJdW5zaWduZWQgc2NzaQkJOiAxOwkvKiAwPWRlZmF1bHQsIDE9aWRlLXNjc2kgZW11bGF0aW9uICovCiAJdW5zaWduZWQgc2xlZXBpbmcJOiAxOwkvKiAxPXNsZWVwaW5nICYgc2xlZXAgZmllbGQgdmFsaWQgKi8KIAl1bnNpZ25lZCBwb3N0X3Jlc2V0CTogMTsKQEAgLTQwMCw3ICs0NTgsMTQgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGRldmljZQlnZW5kZXY7CiAJc3RydWN0IGNvbXBsZXRpb24gZ2VuZGV2X3JlbF9jb21wOwkvKiB0byBkZWFsIHdpdGggZGV2aWNlIHJlbGVhc2UoKSAqLwotfSBpZGVfZHJpdmVfdDsKKworCS8qIGNhbGxiYWNrIGZvciBwYWNrZXQgY29tbWFuZHMgKi8KKwl2b2lkICgqcGNfY2FsbGJhY2spKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKworCXVuc2lnbmVkIGxvbmcgYXRhcGlfZmxhZ3M7Cit9OworCit0eXBlZGVmIHN0cnVjdCBpZGVfZHJpdmVfcyBpZGVfZHJpdmVfdDsKIAogI2RlZmluZSB0b19pZGVfZGV2aWNlKGRldiljb250YWluZXJfb2YoZGV2LCBpZGVfZHJpdmVfdCwgZ2VuZGV2KQogCkBAIC00MDgsOCArNDczLDI4IEBACiAgICAgKCgxPDxpZGVfcGNpKXwoMTw8aWRlX2NtZDY0Nil8KDE8PGlkZV9hbGkxNHh4KSkKICNkZWZpbmUgSURFX0NISVBTRVRfSVNfUENJKGMpCSgoSURFX0NISVBTRVRfUENJX01BU0sgPj4gKGMpKSAmIDEpCiAKK3N0cnVjdCBpZGVfdGFza19zOwogc3RydWN0IGlkZV9wb3J0X2luZm87CiAKK3N0cnVjdCBpZGVfdHBfb3BzIHsKKwl2b2lkCSgqZXhlY19jb21tYW5kKShzdHJ1Y3QgaHdpZl9zICosIHU4KTsKKwl1OAkoKnJlYWRfc3RhdHVzKShzdHJ1Y3QgaHdpZl9zICopOworCXU4CSgqcmVhZF9hbHRzdGF0dXMpKHN0cnVjdCBod2lmX3MgKik7CisJdTgJKCpyZWFkX3NmZl9kbWFfc3RhdHVzKShzdHJ1Y3QgaHdpZl9zICopOworCisJdm9pZAkoKnNldF9pcnEpKHN0cnVjdCBod2lmX3MgKiwgaW50KTsKKworCXZvaWQJKCp0Zl9sb2FkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX3Rhc2tfcyAqKTsKKwl2b2lkCSgqdGZfcmVhZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV90YXNrX3MgKik7CisKKwl2b2lkCSgqaW5wdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLAorCQkJICAgICAgdW5zaWduZWQgaW50KTsKKwl2b2lkCSgqb3V0cHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQpOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzOworCiBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHsKIAkvKiBob3N0IHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9mIGEgZGV2aWNlICovCiAJdm9pZAkoKmluaXRfZGV2KShpZGVfZHJpdmVfdCAqKTsKQEAgLTQ0Nyw4ICs1MzIsNiBAQAogCXZvaWQJKCpkbWFfdGltZW91dCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogfTsKIAotc3RydWN0IGlkZV90YXNrX3M7Ci0KIHR5cGVkZWYgc3RydWN0IGh3aWZfcyB7CiAJc3RydWN0IGh3aWZfcyAqbmV4dDsJCS8qIGZvciBsaW5rZWQtbGlzdCBpbiBpZGVfaHdncm91cF90ICovCiAJc3RydWN0IGh3aWZfcyAqbWF0ZTsJCS8qIG90aGVyIGh3aWYgZnJvbSBzYW1lIFBDSSBjaGlwICovCkBAIC00ODYsMjIgKzU2OSwxMiBAQAogCiAJdm9pZCAoKnJ3X2Rpc2spKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMJCSp0cF9vcHM7CiAJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcwkqcG9ydF9vcHM7CiAJY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzCSpkbWFfb3BzOwogCi0Jdm9pZCAoKnRmX2xvYWQpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfdGFza19zICopOwotCXZvaWQgKCp0Zl9yZWFkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX3Rhc2tfcyAqKTsKLQotCXZvaWQgKCppbnB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB2b2lkICosIHVuc2lnbmVkKTsKLQl2b2lkICgqb3V0cHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwgdW5zaWduZWQpOwotCiAJdm9pZCAoKmlkZV9kbWFfY2xlYXJfaXJxKShpZGVfZHJpdmVfdCAqZHJpdmUpOwogCi0Jdm9pZCAoKk9VVEIpKHU4IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0Jdm9pZCAoKk9VVEJTWU5DKShzdHJ1Y3QgaHdpZl9zICpod2lmLCB1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCi0JdTggICgqSU5CKSh1bnNpZ25lZCBsb25nIHBvcnQpOwotCiAJLyogZG1hIHBoeXNpY2FsIHJlZ2lvbiBkZXNjcmlwdG9yIHRhYmxlIChjcHUgdmlldykgKi8KIAl1bnNpZ25lZCBpbnQJKmRtYXRhYmxlX2NwdTsKIAkvKiBkbWEgcGh5c2ljYWwgcmVnaW9uIGRlc2NyaXB0b3IgdGFibGUgKGRtYSB2aWV3KSAqLwpAQCAtNTI0LDggKzU5Nyw2IEBACiAJaW50CQlpcnE7CQkvKiBvdXIgaXJxIG51bWJlciAqLwogCiAJdW5zaWduZWQgbG9uZwlkbWFfYmFzZTsJLyogYmFzZSBhZGRyIGZvciBkbWEgcG9ydHMgKi8KLQl1bnNpZ25lZCBsb25nCWRtYV9jb21tYW5kOwkvKiBkbWEgY29tbWFuZCByZWdpc3RlciAqLwotCXVuc2lnbmVkIGxvbmcJZG1hX3N0YXR1czsJLyogZG1hIHN0YXR1cyByZWdpc3RlciAqLwogCiAJdW5zaWduZWQgbG9uZwljb25maWdfZGF0YTsJLyogZm9yIHVzZSBieSBjaGlwc2V0LXNwZWNpZmljIGNvZGUgKi8KIAl1bnNpZ25lZCBsb25nCXNlbGVjdF9kYXRhOwkvKiBmb3IgdXNlIGJ5IGNoaXBzZXQtc3BlY2lmaWMgY29kZSAqLwpAQCAtNTUyLDYgKzYyMywxMSBAQAogI2VuZGlmCiB9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXAgaWRlX2h3aWZfdDsKIAorc3RydWN0IGlkZV9ob3N0IHsKKwlpZGVfaHdpZl90CSpwb3J0c1tNQVhfSFdJRlNdOworCXVuc2lnbmVkIGludAluX3BvcnRzOworfTsKKwogLyoKICAqICBpbnRlcm5hbCBpZGUgaW50ZXJydXB0IGhhbmRsZXIgdHlwZQogICovCkBAIC02MTEsOCArNjg3LDYgQEAKIAlQQ19GTEFHX1dSSVRJTkcJCQk9ICgxIDw8IDYpLAogCS8qIGNvbW1hbmQgdGltZWQgb3V0ICovCiAJUENfRkxBR19USU1FRE9VVAkJPSAoMSA8PCA3KSwKLQlQQ19GTEFHX1pJUF9EUklWRQkJPSAoMSA8PCA4KSwKLQlQQ19GTEFHX0RSUV9JTlRFUlJVUFQJCT0gKDEgPDwgOSksCiB9OwogCiBzdHJ1Y3QgaWRlX2F0YXBpX3BjIHsKQEAgLTY0Niw4ICs3MjAsNiBAQAogCSAqLwogCXU4IHBjX2J1ZlsyNTZdOwogCi0Jdm9pZCAoKmNhbGxiYWNrKShpZGVfZHJpdmVfdCAqKTsKLQogCS8qIGlkZXRhcGUgb25seSAqLwogCXN0cnVjdCBpZGV0YXBlX2JoICpiaDsKIAljaGFyICpiX2RhdGE7CkBAIC04MDcsMTMgKzg3OSw2IEBACiBleHRlcm4gaW50IGlkZV92bGJfY2xrOwogZXh0ZXJuIGludCBpZGVfcGNpX2NsazsKIAotaWRlX2h3aWZfdCAqaWRlX2ZpbmRfcG9ydF9zbG90KGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOwotCi1zdGF0aWMgaW5saW5lIGlkZV9od2lmX3QgKmlkZV9maW5kX3BvcnQodm9pZCkKLXsKLQlyZXR1cm4gaWRlX2ZpbmRfcG9ydF9zbG90KE5VTEwpOwotfQotCiBleHRlcm4gaW50IGlkZV9lbmRfcmVxdWVzdCAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucnNlY3MpOwogaW50IGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCSAgICAgaW50IHVwdG9kYXRlLCBpbnQgbnJfc2VjdG9ycyk7CkBAIC04ODQsNiArOTQ5LDcgQEAKIAlJREVfVEZMQUdfSU5fSE9CCQk9IElERV9URkxBR19JTl9IT0JfRkVBVFVSRSB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQl9MQkEsCisJSURFX1RGTEFHX0lOX0ZFQVRVUkUJCT0gKDEgPDwgMSksCiAJSURFX1RGTEFHX0lOX05TRUNUCQk9ICgxIDw8IDI1KSwKIAlJREVfVEZMQUdfSU5fTEJBTAkJPSAoMSA8PCAyNiksCiAJSURFX1RGTEFHX0lOX0xCQU0JCT0gKDEgPDwgMjcpLApAQCAtOTQ4LDkgKzEwMTQsMjUgQEAKIAogdm9pZCBpZGVfdGZfZHVtcChjb25zdCBjaGFyICosIHN0cnVjdCBpZGVfdGFza2ZpbGUgKik7CiAKK3ZvaWQgaWRlX2V4ZWNfY29tbWFuZChpZGVfaHdpZl90ICosIHU4KTsKK3U4IGlkZV9yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICopOwordTggaWRlX3JlYWRfYWx0c3RhdHVzKGlkZV9od2lmX3QgKik7Cit1OCBpZGVfcmVhZF9zZmZfZG1hX3N0YXR1cyhpZGVfaHdpZl90ICopOworCit2b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKiwgaW50KTsKKwordm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOwordm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOworCit2b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKK3ZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKKwogZXh0ZXJuIHZvaWQgU0VMRUNUX0RSSVZFKGlkZV9kcml2ZV90ICopOwogdm9pZCBTRUxFQ1RfTUFTSyhpZGVfZHJpdmVfdCAqLCBpbnQpOwogCit1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqKTsKK3ZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICosIHUxNiAqLCB1OCAqKTsKKwogZXh0ZXJuIGludCBkcml2ZV9pc19yZWFkeShpZGVfZHJpdmVfdCAqKTsKIAogdm9pZCBpZGVfcGt0Y21kX3RmX2xvYWQoaWRlX2RyaXZlX3QgKiwgdTMyLCB1MTYsIHU4KTsKQEAgLTEwMDAsMTIgKzEwODIsMTUgQEAKICNkZWZpbmUgaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZCkgcGNpX3JlZ2lzdGVyX2RyaXZlcihkKQogI2VuZGlmCiAKLXZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqLCBpbnQsIHU4ICopOwordm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosIGludCwKKwkJCSBod19yZWdzX3QgKiwgaHdfcmVnc190ICoqKTsKIHZvaWQgaWRlX3NldHVwX3BjaV9ub2lzZShzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqKTsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0kKIGludCBpZGVfcGNpX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKiwgY29uc3QgY2hhciAqKTsKIHVuc2lnbmVkIGxvbmcgaWRlX3BjaV9kbWFfYmFzZShpZGVfaHdpZl90ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZmZfZG1hX29wczsKK2ludCBpZGVfcGNpX2NoZWNrX3NpbXBsZXgoaWRlX2h3aWZfdCAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqKTsKIGludCBpZGVfaHdpZl9zZXR1cF9kbWEoaWRlX2h3aWZfdCAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBpZGVfaHdpZl9zZXR1cF9kbWEoaWRlX2h3aWZfdCAqaHdpZiwKQEAgLTEwMTUsMTAgKzExMDAsNiBAQAogfQogI2VuZGlmCiAKLWV4dGVybiB2b2lkIGRlZmF1bHRfaHdpZl9pb3BzKGlkZV9od2lmX3QgKik7Ci1leHRlcm4gdm9pZCBkZWZhdWx0X2h3aWZfbW1pb3BzKGlkZV9od2lmX3QgKik7Ci1leHRlcm4gdm9pZCBkZWZhdWx0X2h3aWZfdHJhbnNwb3J0KGlkZV9od2lmX3QgKik7Ci0KIHR5cGVkZWYgc3RydWN0IGlkZV9wY2lfZW5hYmxlYml0X3MgewogCXU4CXJlZzsJLyogYnl0ZSBwY2kgcmVnIGhvbGRpbmcgdGhlIGVuYWJsZS1iaXQgKi8KIAl1OAltYXNrOwkvKiBtYXNrIHRvIGlzb2xhdGUgdGhlIGVuYWJsZS1iaXQgKi8KQEAgLTEwODEsNyArMTE2Miw2IEBACiAJSURFX0hGTEFHX0lPXzMyQklUCQk9ICgxIDw8IDI0KSwKIAkvKiB1bm1hc2sgSVJRcyAqLwogCUlERV9IRkxBR19VTk1BU0tfSVJRUwkJPSAoMSA8PCAyNSksCi0JSURFX0hGTEFHX0FCVVNFX1NFVF9ETUFfTU9ERQk9ICgxIDw8IDI2KSwKIAkvKiBzZXJpYWxpemUgcG9ydHMgaWYgRE1BIGlzIHBvc3NpYmxlIChmb3Igc2w4MmMxMDUpICovCiAJSURFX0hGTEFHX1NFUklBTElaRV9ETUEJCT0gKDEgPDwgMjcpLAogCS8qIGZvcmNlIGhvc3Qgb3V0IG9mICJzaW1wbGV4IiBtb2RlICovCkBAIC0xMDkyLDggKzExNzIsNiBAQAogCUlERV9IRkxBR19OT19JT18zMkJJVAkJPSAoMSA8PCAzMCksCiAJLyogbmV2ZXIgdW5tYXNrIElSUXMgKi8KIAlJREVfSEZMQUdfTk9fVU5NQVNLX0lSUVMJPSAoMSA8PCAzMSksCi0JLyogaG9zdCB1c2VzIFZETUEgKGRpc2FibGVkIGZvciBub3cpICovCi0JSURFX0hGTEFHX1ZETUEJCQk9IDAsCiB9OwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQKQEAgLTExMTAsNiArMTE4OCw3IEBACiAJaW50CQkJKCppbml0X2RtYSkoaWRlX2h3aWZfdCAqLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKik7CiAKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcwkJKnRwX29wczsKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzCSpwb3J0X29wczsKIAljb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMJKmRtYV9vcHM7CiAKQEAgLTExNjMsNyArMTI0Miw2IEBACiBleHRlcm4gaW50IGlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIGludCBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShpZGVfaHdpZl90ICopOwogdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKik7Ci12b2lkIGlkZV9zZXR1cF9kbWEoaWRlX2h3aWZfdCAqLCB1bnNpZ25lZCBsb25nKTsKIAogdm9pZCBpZGVfZG1hX2hvc3Rfc2V0KGlkZV9kcml2ZV90ICosIGludCk7CiBleHRlcm4gaW50IGlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKik7CkBAIC0xMjE3LDggKzEyOTUsMTQgQEAKIAogdm9pZCBpZGVfcG9ydF9hcHBseV9wYXJhbXMoaWRlX2h3aWZfdCAqKTsKIAotaW50IGlkZV9kZXZpY2VfYWRkX2FsbCh1OCAqaWR4LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqKTsKLWludCBpZGVfZGV2aWNlX2FkZCh1OCBpZHhbNF0sIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOworc3RydWN0IGlkZV9ob3N0ICppZGVfaG9zdF9hbGxvY19hbGwoY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKiwgaHdfcmVnc190ICoqKTsKK3N0cnVjdCBpZGVfaG9zdCAqaWRlX2hvc3RfYWxsb2MoY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKiwgaHdfcmVnc190ICoqKTsKK3ZvaWQgaWRlX2hvc3RfZnJlZShzdHJ1Y3QgaWRlX2hvc3QgKik7CitpbnQgaWRlX2hvc3RfcmVnaXN0ZXIoc3RydWN0IGlkZV9ob3N0ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosCisJCSAgICAgIGh3X3JlZ3NfdCAqKik7CitpbnQgaWRlX2hvc3RfYWRkKGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosIGh3X3JlZ3NfdCAqKiwKKwkJIHN0cnVjdCBpZGVfaG9zdCAqKik7Cit2b2lkIGlkZV9ob3N0X3JlbW92ZShzdHJ1Y3QgaWRlX2hvc3QgKik7CiBpbnQgaWRlX2xlZ2FjeV9kZXZpY2VfYWRkKGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosIHVuc2lnbmVkIGxvbmcpOwogdm9pZCBpZGVfcG9ydF91bnJlZ2lzdGVyX2RldmljZXMoaWRlX2h3aWZfdCAqKTsKIHZvaWQgaWRlX3BvcnRfc2NhbihpZGVfaHdpZl90ICopOwpAQCAtMTM1MCwzMyArMTQzNCw0IEBACiAKIAlyZXR1cm4gJmh3aWYtPmRyaXZlc1soZHJpdmUtPmRuIF4gMSkgJiAxXTsKIH0KLQotc3RhdGljIGlubGluZSB2b2lkIGlkZV9zZXRfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQotCWh3aWYtPk9VVEJTWU5DKGh3aWYsIEFUQV9ERVZDVExfT0JTIHwgKG9uID8gMCA6IDIpLAotCQkgICAgICAgaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IGlkZV9yZWFkX3N0YXR1cyhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JcmV0dXJuIGh3aWYtPklOQihod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggaWRlX3JlYWRfYWx0c3RhdHVzKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlyZXR1cm4gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JcmV0dXJuIGh3aWYtPklOQihod2lmLT5pb19wb3J0cy5lcnJvcl9hZGRyKTsKLX0KICNlbmRpZiAvKiBfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCmluZGV4IDBiNWUwM2UuLmExNjMwYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtOTgsNiArOTgsOSBAQAogCiAjZGVmaW5lIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4JCTMyCiAjZGVmaW5lIElFRUU4MDIxMV9NQVhfTUVTSF9JRF9MRU4JMzIKKyNkZWZpbmUgSUVFRTgwMjExX1FPU19DVExfTEVOCQkyCisjZGVmaW5lIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLCTB4MDAwRgorI2RlZmluZSBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLCTB4MDAwNwogCiBzdHJ1Y3QgaWVlZTgwMjExX2hkciB7CiAJX19sZTE2IGZyYW1lX2NvbnRyb2w7CkBAIC0xMDksNiArMTEyLDM1NSBAQAogCXU4IGFkZHI0WzZdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qKgorICogaWVlZTgwMjExX2hhc190b2RzIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZDVExfVE9EUyBpcyBzZXQKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaGFzX3RvZHMoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTKSkgIT0gMDsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaGFzX2Zyb21kcyAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyBpcyBzZXQKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaGFzX2Zyb21kcyhfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUykpICE9IDA7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2hhc19hNCAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX1RPRFMgYW5kIElFRUU4MDIxMV9GQ1RMX0ZST01EUyBhcmUgc2V0CisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2hhc19hNChfX2xlMTYgZmMpCit7CisJX19sZTE2IHRtcCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpOworCXJldHVybiAoZmMgJiB0bXApID09IHRtcDsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaGFzX21vcmVmcmFncyAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUyBpcyBzZXQKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaGFzX21vcmVmcmFncyhfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykpICE9IDA7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2hhc19yZXRyeSAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX1JFVFJZIGlzIHNldAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9oYXNfcmV0cnkoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSkpICE9IDA7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2hhc19wbSAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX1BNIGlzIHNldAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9oYXNfcG0oX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSkpICE9IDA7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2hhc19tb3JlZGF0YSAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBIGlzIHNldAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9oYXNfbW9yZWRhdGEoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFREFUQSkpICE9IDA7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQgLSBjaGVjayBpZiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQgaXMgc2V0CisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKSAhPSAwOworfQorCisvKioKKyAqIGllZWU4MDIxMV9oYXNfb3JkZXIgLSBjaGVjayBpZiBJRUVFODAyMTFfRkNUTF9PUkRFUiBpcyBzZXQKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaGFzX29yZGVyKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfT1JERVIpKSAhPSAwOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19tZ210IC0gY2hlY2sgaWYgdHlwZSBpcyBJRUVFODAyMTFfRlRZUEVfTUdNVAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19tZ210KF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2N0bCAtIGNoZWNrIGlmIHR5cGUgaXMgSUVFRTgwMjExX0ZUWVBFX0NUTAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19jdGwoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19kYXRhIC0gY2hlY2sgaWYgdHlwZSBpcyBJRUVFODAyMTFfRlRZUEVfREFUQQorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19kYXRhKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2RhdGFfcW9zIC0gY2hlY2sgaWYgdHlwZSBpcyBJRUVFODAyMTFfRlRZUEVfREFUQSBhbmQgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBIGlzIHNldAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19kYXRhX3FvcyhfX2xlMTYgZmMpCit7CisJLyoKKwkgKiBtYXNrIHdpdGggUU9TX0RBVEEgcmF0aGVyIHRoYW4gSUVFRTgwMjExX0ZDVExfU1RZUEUgYXMgd2UganVzdCBuZWVkCisJICogdG8gY2hlY2sgdGhlIG9uZSBiaXQKKwkgKi8KKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudCAtIGNoZWNrIGlmIHR5cGUgaXMgSUVFRTgwMjExX0ZUWVBFX0RBVEEgYW5kIGhhcyBkYXRhCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChfX2xlMTYgZmMpCit7CisJLyoKKwkgKiBtYXNrIHdpdGggMHg0MCBhbmQgdGVzdCB0aGF0IHRoYXQgYml0IGlzIGNsZWFyIHRvIG9ubHkgcmV0dXJuIHRydWUKKwkgKiBmb3IgdGhlIGRhdGEtY29udGFpbmluZyBzdWJzdHlwZXMuCisJICovCisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgMHg0MCkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfYXNzb2NfcmVxIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUQorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19hc3NvY19yZXEoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfYXNzb2NfcmVzcCAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9NR01UICYmIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2Fzc29jX3Jlc3AoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3AoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfcHJvYmVfcmVxIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUQorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19wcm9iZV9yZXEoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcCAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9NR01UICYmIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2JlYWNvbiAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9NR01UICYmIElFRUU4MDIxMV9TVFlQRV9CRUFDT04KKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfYmVhY29uKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2F0aW0gLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBJRUVFODAyMTFfU1RZUEVfQVRJTQorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19hdGltKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0FUSU0pOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19kaXNhc3NvYyAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9NR01UICYmIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQworICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19kaXNhc3NvYyhfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQyk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2F1dGggLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBJRUVFODAyMTFfU1RZUEVfQVVUSAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19hdXRoKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0FVVEgpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19kZWF1dGggLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBJRUVFODAyMTFfU1RZUEVfREVBVVRICisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2RlYXV0aChfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19hY3Rpb24gLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBJRUVFODAyMTFfU1RZUEVfQUNUSU9OCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2FjdGlvbihfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19iYWNrX3JlcSAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9DVEwgJiYgSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVRCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2JhY2tfcmVxKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19iYWNrIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX0NUTCAmJiBJRUVFODAyMTFfU1RZUEVfQkFDSworICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19iYWNrKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfQkFDSyk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX3BzcG9sbCAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9DVEwgJiYgSUVFRTgwMjExX1NUWVBFX1BTUE9MTAorICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19wc3BvbGwoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19ydHMgLSBjaGVjayBpZiBJRUVFODAyMTFfRlRZUEVfQ1RMICYmIElFRUU4MDIxMV9TVFlQRV9SVFMKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfcnRzKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUlRTKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfaXNfY3RzIC0gY2hlY2sgaWYgSUVFRTgwMjExX0ZUWVBFX0NUTCAmJiBJRUVFODAyMTFfU1RZUEVfQ1RTCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2N0cyhfX2xlMTYgZmMpCit7CisJcmV0dXJuIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKSA9PQorCSAgICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX0NUUyk7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2lzX2FjayAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9DVEwgJiYgSUVFRTgwMjExX1NUWVBFX0FDSworICogQGZjOiBmcmFtZSBjb250cm9sIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZW9yZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19hY2soX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9BQ0spOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19jZmVuZCAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9DVEwgJiYgSUVFRTgwMjExX1NUWVBFX0NGRU5ECisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2NmZW5kKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfQ0ZFTkQpOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19jZmVuZGFjayAtIGNoZWNrIGlmIElFRUU4MDIxMV9GVFlQRV9DVEwgJiYgSUVFRTgwMjExX1NUWVBFX0NGRU5EQUNLCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2NmZW5kYWNrKF9fbGUxNiBmYykKK3sKKwlyZXR1cm4gKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlRZUEUgfCBJRUVFODAyMTFfRkNUTF9TVFlQRSkpID09CisJICAgICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0spOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pc19udWxsZnVuYyAtIGNoZWNrIGlmIEZUWVBFPUlFRUU4MDIxMV9GVFlQRV9EQVRBIGFuZCBTVFlQRT1JRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMKKyAqIEBmYzogZnJhbWUgY29udHJvbCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGVvcmRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfbnVsbGZ1bmMoX19sZTE2IGZjKQoreworCXJldHVybiAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgPT0KKwkgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMpOworfQogCiBzdHJ1Y3QgaWVlZTgwMjExc19oZHIgewogCXU4IGZsYWdzOwpAQCAtMTE5LDYgKzQ3MSw0MCBAQAogCXU4IGVhZGRyM1s2XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfcXVpZXRfaWUKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZWZlcnMgdG8gIlF1aWV0IGluZm9ybWF0aW9uIGVsZW1lbnQiCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfcXVpZXRfaWUgeworCXU4IGNvdW50OworCXU4IHBlcmlvZDsKKwlfX2xlMTYgZHVyYXRpb247CisJX19sZTE2IG9mZnNldDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfbXNybWVudF9pZQorICoKKyAqIFRoaXMgc3RydWN0dXJlIHJlZmVycyB0byAiTWVhc3VyZW1lbnQgUmVxdWVzdC9SZXBvcnQgaW5mb3JtYXRpb24gZWxlbWVudCIKKyAqLworc3RydWN0IGllZWU4MDIxMV9tc3JtZW50X2llIHsKKwl1OCB0b2tlbjsKKwl1OCBtb2RlOworCXU4IHR5cGU7CisJdTggcmVxdWVzdFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZQorICoKKyAqIFRoaXMgc3RydWN0dXJlIHJlZmVycyB0byAiQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IGluZm9ybWF0aW9uIGVsZW1lbnQiCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSB7CisJdTggbW9kZTsKKwl1OCBuZXdfY2hfbnVtOworCXU4IGNvdW50OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpZWVlODAyMTFfbWdtdCB7CiAJX19sZTE2IGZyYW1lX2NvbnRyb2w7CkBAIC0xOTQsMTMgKzU4MCwxOCBAQAogCQkJCQl1OCBhY3Rpb25fY29kZTsKIAkJCQkJdTggZWxlbWVudF9pZDsKIAkJCQkJdTggbGVuZ3RoOwotCQkJCQl1OCBzd2l0Y2hfbW9kZTsKLQkJCQkJdTggbmV3X2NoYW47Ci0JCQkJCXU4IHN3aXRjaF9jb3VudDsKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llIHN3X2VsZW07CiAJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBjaGFuX3N3aXRjaDsKIAkJCQlzdHJ1Y3R7CiAJCQkJCXU4IGFjdGlvbl9jb2RlOwogCQkJCQl1OCBkaWFsb2dfdG9rZW47CisJCQkJCXU4IGVsZW1lbnRfaWQ7CisJCQkJCXU4IGxlbmd0aDsKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9tc3JtZW50X2llIG1zcl9lbGVtOworCQkJCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbWVhc3VyZW1lbnQ7CisJCQkJc3RydWN0eworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJdTggZGlhbG9nX3Rva2VuOwogCQkJCQlfX2xlMTYgY2FwYWI7CiAJCQkJCV9fbGUxNiB0aW1lb3V0OwogCQkJCQlfX2xlMTYgc3RhcnRfc2VxX251bTsKQEAgLTI2OSw2ICs2NjAsMTAgQEAKIAlfX2xlMTYgc3RhcnRfc2VxX251bTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKKy8qIDgwMi4xMSBCQVIgY29udHJvbCBtYXNrcyAqLworI2RlZmluZSBJRUVFODAyMTFfQkFSX0NUUkxfQUNLX1BPTElDWV9OT1JNQUwgICAgIDB4MDAwMAorI2RlZmluZSBJRUVFODAyMTFfQkFSX0NUUkxfQ0JNVElEX0NPTVBSRVNTRURfQkEgIDB4MDAwNAorCiAvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwIC0gSFQgY2FwYWJpbGl0aWVzCiAgKgpAQCAtMzA2LDIwICs3MDEsMzMgQEAKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAJCQkweDAwNDAKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9ERUxBWV9CQQkJMHgwNDAwCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVCQkweDA4MDAKKy8qIDgwMi4xMW4gSFQgY2FwYWJpbGl0eSBBTVBEVSBzZXR0aW5ncyAqLwogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0FNUERVX0ZBQ1RPUgkJMHgwMwogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0FNUERVX0RFTlNJVFkJCTB4MUMKKy8qIDgwMi4xMW4gSFQgY2FwYWJpbGl0eSBNU0Mgc2V0ICovCisjZGVmaW5lIElFRUU4MDIxMV9TVVBQX01DU19TRVRfVUVRTQkJNAorI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX01BWF9TVFJFQU1TCQk0CisjZGVmaW5lIElFRUU4MDIxMV9TVVBQX01DU19TRVRfTEVOCQkxMAorLyogbWF4aW11bSBzdHJlYW1zIHRoZSBzcGVjIGFsbG93cyAqLworI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX01DU19UWF9ERUZJTkVECQkweDAxCisjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfTUNTX1RYX1JYX0RJRkYJCTB4MDIKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9NQ1NfVFhfU1RSRUFNUwkJMHgwQworI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX01DU19UWF9VRVFNCQkweDEwCiAvKiA4MDIuMTFuIEhUIElFIG1hc2tzICovCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9JRV9DSEFfU0VDX09GRlNFVAkJMHgwMworI2RlZmluZSBJRUVFODAyMTFfSFRfSUVfQ0hBX1NFQ19OT05FCSAJMHgwMAorI2RlZmluZSBJRUVFODAyMTFfSFRfSUVfQ0hBX1NFQ19BQk9WRSAJCTB4MDEKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0lFX0NIQV9TRUNfQkVMT1cgCQkweDAzCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9JRV9DSEFfV0lEVEgJCTB4MDQKICNkZWZpbmUgSUVFRTgwMjExX0hUX0lFX0hUX1BST1RFQ1RJT04JCTB4MDAwMwogI2RlZmluZSBJRUVFODAyMTFfSFRfSUVfTk9OX0dGX1NUQV9QUlNOVAkweDAwMDQKICNkZWZpbmUgSUVFRTgwMjExX0hUX0lFX05PTl9IVF9TVEFfUFJTTlQJMHgwMDEwCiAKIC8qIE1JTU8gUG93ZXIgU2F2ZSBNb2RlcyAqLwotI2RlZmluZSBXTEFOX0hUX0NBUF9NSU1PX1BTX1NUQVRJQyAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9IVF9DQVBfTUlNT19QU19EWU5BTUlDICAgICAgICAxCi0jZGVmaW5lIFdMQU5fSFRfQ0FQX01JTU9fUFNfSU5WQUxJRCAgICAgICAgMgotI2RlZmluZSBXTEFOX0hUX0NBUF9NSU1PX1BTX0RJU0FCTEVEICAgICAgIDMKKyNkZWZpbmUgV0xBTl9IVF9DQVBfTUlNT19QU19TVEFUSUMJMAorI2RlZmluZSBXTEFOX0hUX0NBUF9NSU1PX1BTX0RZTkFNSUMJMQorI2RlZmluZSBXTEFOX0hUX0NBUF9NSU1PX1BTX0lOVkFMSUQJMgorI2RlZmluZSBXTEFOX0hUX0NBUF9NSU1PX1BTX0RJU0FCTEVECTMKIAogLyogQXV0aGVudGljYXRpb24gYWxnb3JpdGhtcyAqLwogI2RlZmluZSBXTEFOX0FVVEhfT1BFTiAwCkBAIC0zMzcsMTEgKzc0NSwyMSBAQAogI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUJKDE8PDUpCiAjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9QQkNDCQkoMTw8NikKICNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0NIQU5ORUxfQUdJTElUWQkoMTw8NykKKwogLyogODAyLjExaCAqLwogI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVAkoMTw8OCkKICNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX1FPUwkJKDE8PDkpCiAjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUJKDE8PDEwKQogI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfRFNTU19PRkRNCSgxPDwxMykKKy8qIG1lYXN1cmVtZW50ICovCisjZGVmaW5lIElFRUU4MDIxMV9TUENUX01TUl9SUFJUX01PREVfTEFURQkoMTw8MCkKKyNkZWZpbmUgSUVFRTgwMjExX1NQQ1RfTVNSX1JQUlRfTU9ERV9JTkNBUEFCTEUJKDE8PDEpCisjZGVmaW5lIElFRUU4MDIxMV9TUENUX01TUl9SUFJUX01PREVfUkVGVVNFRAkoMTw8MikKKworI2RlZmluZSBJRUVFODAyMTFfU1BDVF9NU1JfUlBSVF9UWVBFX0JBU0lDCTAKKyNkZWZpbmUgSUVFRTgwMjExX1NQQ1RfTVNSX1JQUlRfVFlQRV9DQ0EJMQorI2RlZmluZSBJRUVFODAyMTFfU1BDVF9NU1JfUlBSVF9UWVBFX1JQSQkyCisKIAogLyogODAyLjExZyBFUlAgaW5mb3JtYXRpb24gZWxlbWVudCAqLwogI2RlZmluZSBXTEFOX0VSUF9OT05fRVJQX1BSRVNFTlQgKDE8PDApCkBAIC01MTIsNiArOTMwLDE1IEBACiAJV0xBTl9DQVRFR09SWV9XTU0gPSAxNywKIH07CiAKKy8qIFNQRUNUUlVNX01HTVQgYWN0aW9uIGNvZGUgKi8KK2VudW0gaWVlZTgwMjExX3NwZWN0cnVtX21nbXRfYWN0aW9uY29kZSB7CisJV0xBTl9BQ1RJT05fU1BDVF9NU1JfUkVRID0gMCwKKwlXTEFOX0FDVElPTl9TUENUX01TUl9SUFJUID0gMSwKKwlXTEFOX0FDVElPTl9TUENUX1RQQ19SRVEgPSAyLAorCVdMQU5fQUNUSU9OX1NQQ1RfVFBDX1JQUlQgPSAzLAorCVdMQU5fQUNUSU9OX1NQQ1RfQ0hMX1NXSVRDSCA9IDQsCit9OworCiAvKiBCQUNLIGFjdGlvbiBjb2RlICovCiBlbnVtIGllZWU4MDIxMV9iYWNrX2FjdGlvbmNvZGUgewogCVdMQU5fQUNUSU9OX0FEREJBX1JFUSA9IDAsCkBAIC01NDAsNjMgKzk2Nyw1NyBAQAogI2RlZmluZSBXTEFOX01BWF9LRVlfTEVOCQkzMgogCiAvKioKKyAqIGllZWU4MDIxMV9nZXRfcW9zX2N0bCAtIGdldCBwb2ludGVyIHRvIHFvcyBjb250cm9sIGJ5dGVzCisgKiBAaGRyOiB0aGUgZnJhbWUKKyAqCisgKiBUaGUgcW9zIGN0cmwgYnl0ZXMgY29tZSBhZnRlciB0aGUgZnJhbWVfY29udHJvbCwgZHVyYXRpb24sIHNlcV9udW0KKyAqIGFuZCAzIG9yIDQgYWRkcmVzc2VzIG9mIGxlbmd0aCBFVEhfQUxFTi4KKyAqIDMgYWRkcjogMiArIDIgKyAyICsgMyo2ID0gMjQKKyAqIDQgYWRkcjogMiArIDIgKyAyICsgNCo2ID0gMzAKKyAqLworc3RhdGljIGlubGluZSB1OCAqaWVlZTgwMjExX2dldF9xb3NfY3RsKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJaWYgKGllZWU4MDIxMV9oYXNfYTQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuICh1OCAqKWhkciArIDMwOworCWVsc2UKKwkJcmV0dXJuICh1OCAqKWhkciArIDI0OworfQorCisvKioKICAqIGllZWU4MDIxMV9nZXRfU0EgLSBnZXQgcG9pbnRlciB0byBTQQorICogQGhkcjogdGhlIGZyYW1lCiAgKgogICogR2l2ZW4gYW4gODAyLjExIGZyYW1lLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldAogICogdG8gdGhlIHNvdXJjZSBhZGRyZXNzIChTQSkuIEl0IGRvZXMgbm90IHZlcmlmeSB0aGF0IHRoZQogICogaGVhZGVyIGlzIGxvbmcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGFkZHJlc3MsIGFuZCB0aGUKICAqIGhlYWRlciBtdXN0IGJlIGxvbmcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGZyYW1lIGNvbnRyb2wKICAqIGZpZWxkLgotICoKLSAqIEBoZHI6IHRoZSBmcmFtZQogICovCiBzdGF0aWMgaW5saW5lIHU4ICppZWVlODAyMTFfZ2V0X1NBKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7Ci0JdTggKnJhdyA9ICh1OCAqKSBoZHI7Ci0JdTggdG9mcm9tID0gKCoocmF3KzEpKSAmIDM7IC8qIGdldCB0aGUgVE9EUyBhbmQgRlJPTURTIGJpdHMgKi8KLQotCXN3aXRjaCAodG9mcm9tKSB7Ci0JCWNhc2UgMjoKLQkJCXJldHVybiBoZHItPmFkZHIzOwotCQljYXNlIDM6Ci0JCQlyZXR1cm4gaGRyLT5hZGRyNDsKLQl9CisJaWYgKGllZWU4MDIxMV9oYXNfYTQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIGhkci0+YWRkcjQ7CisJaWYgKGllZWU4MDIxMV9oYXNfZnJvbWRzKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiBoZHItPmFkZHIzOwogCXJldHVybiBoZHItPmFkZHIyOwogfQogCiAvKioKICAqIGllZWU4MDIxMV9nZXRfREEgLSBnZXQgcG9pbnRlciB0byBEQQorICogQGhkcjogdGhlIGZyYW1lCiAgKgogICogR2l2ZW4gYW4gODAyLjExIGZyYW1lLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldAogICogdG8gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgKERBKS4gSXQgZG9lcyBub3QgdmVyaWZ5IHRoYXQKICAqIHRoZSBoZWFkZXIgaXMgbG9uZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgYWRkcmVzcywgYW5kIHRoZQogICogaGVhZGVyIG11c3QgYmUgbG9uZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgZnJhbWUgY29udHJvbAogICogZmllbGQuCi0gKgotICogQGhkcjogdGhlIGZyYW1lCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTggKmllZWU4MDIxMV9nZXRfREEoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKLQl1OCAqcmF3ID0gKHU4ICopIGhkcjsKLQl1OCB0b19kcyA9ICgqKHJhdysxKSkgJiAxOyAvKiBnZXQgdGhlIFRPRFMgYml0ICovCi0KLQlpZiAodG9fZHMpCisJaWYgKGllZWU4MDIxMV9oYXNfdG9kcyhoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm4gaGRyLT5hZGRyMzsKLQlyZXR1cm4gaGRyLT5hZGRyMTsKLX0KLQotLyoqCi0gKiBpZWVlODAyMTFfZ2V0X21vcmVmcmFnIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIE1PUkVGUkFHUyBiaXQgaXMgc2V0Ci0gKgotICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlICJtb3JlIGZyYWdtZW50cyIgYml0IGlzIHNldAotICogaW4gdGhlIGZyYW1lLgotICoKLSAqIEBoZHI6IHRoZSBmcmFtZQotICovCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZ2V0X21vcmVmcmFnKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCi17Ci0JcmV0dXJuIChsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpICYKLQkJSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSAhPSAwOworCWVsc2UKKwkJcmV0dXJuIGhkci0+YWRkcjE7CiB9CiAKICNlbmRpZiAvKiBJRUVFODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKaW5kZXggOTUwZTEzZC4uNmJhZGIzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCkBAIC00LDggKzQsNiBAQAogICoJQXV0aG9yczoKICAqCUxlbm5lcnQgQnV5dGVuaGVrCQk8YnV5dGVuaEBnbnUub3JnPgogICoKLSAqCSRJZDogaWZfYnJpZGdlLmgsdiAxLjEgMjAwMC8wMi8xOCAxNjo0NzowMSBkYXZlbSBFeHAgJAotICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmggYi9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oCmluZGV4IGFkMDk2MDkuLjE4ZGIwNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaApAQCAtNDMsNiArNDMsOSBAQAogI2RlZmluZSBQQUNLRVRfQ09QWV9USFJFU0gJCTcKICNkZWZpbmUgUEFDS0VUX0FVWERBVEEJCQk4CiAjZGVmaW5lIFBBQ0tFVF9PUklHREVWCQkJOQorI2RlZmluZSBQQUNLRVRfVkVSU0lPTgkJCTEwCisjZGVmaW5lIFBBQ0tFVF9IRFJMRU4JCQkxMQorI2RlZmluZSBQQUNLRVRfUkVTRVJWRQkJCTEyCiAKIHN0cnVjdCB0cGFja2V0X3N0YXRzCiB7CkBAIC01Nyw2ICs2MCw3IEBACiAJX191MzIJCXRwX3NuYXBsZW47CiAJX191MTYJCXRwX21hYzsKIAlfX3UxNgkJdHBfbmV0OworCV9fdTE2CQl0cF92bGFuX3RjaTsKIH07CiAKIHN0cnVjdCB0cGFja2V0X2hkcgpAQCAtNzksNiArODMsMjYgQEAKICNkZWZpbmUgVFBBQ0tFVF9BTElHTih4KQkoKCh4KStUUEFDS0VUX0FMSUdOTUVOVC0xKSZ+KFRQQUNLRVRfQUxJR05NRU5ULTEpKQogI2RlZmluZSBUUEFDS0VUX0hEUkxFTgkJKFRQQUNLRVRfQUxJR04oc2l6ZW9mKHN0cnVjdCB0cGFja2V0X2hkcikpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpCiAKK3N0cnVjdCB0cGFja2V0Ml9oZHIKK3sKKwlfX3UzMgkJdHBfc3RhdHVzOworCV9fdTMyCQl0cF9sZW47CisJX191MzIJCXRwX3NuYXBsZW47CisJX191MTYJCXRwX21hYzsKKwlfX3UxNgkJdHBfbmV0OworCV9fdTMyCQl0cF9zZWM7CisJX191MzIJCXRwX25zZWM7CisJX191MTYJCXRwX3ZsYW5fdGNpOworfTsKKworI2RlZmluZSBUUEFDS0VUMl9IRFJMRU4JCShUUEFDS0VUX0FMSUdOKHNpemVvZihzdHJ1Y3QgdHBhY2tldDJfaGRyKSkgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSkKKworZW51bSB0cGFja2V0X3ZlcnNpb25zCit7CisJVFBBQ0tFVF9WMSwKKwlUUEFDS0VUX1YyLAorfTsKKwogLyoKICAgIEZyYW1lIHN0cnVjdHVyZToKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wcHAuaCBiL2luY2x1ZGUvbGludXgvaWZfcHBwLmgKaW5kZXggMGYyZjcwZC4uYzNiMWY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wcHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BwcC5oCkBAIC0xLDUgKzEsMyBAQAotLyoJJElkOiBpZl9wcHAuaCx2IDEuMjEgMjAwMC8wMy8yNyAwNjowMzozNiBwYXVsdXMgRXhwICQJKi8KLQogLyoKICAqIGlmX3BwcC5oIC0gUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgZGVmaW5pdGlvbnMuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKaW5kZXggOGM3MWZlMi4uNGM2MzA3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC0xMSwxNCArMTEsMTMgQEAKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICRJZDogaWZfdHVuLmgsdiAxLjIgMjAwMS8wNi8wMSAxODozOTo0NyBkYXZlbSBFeHAgJAogICovCiAKICNpZm5kZWYgX19JRl9UVU5fSAogI2RlZmluZSBfX0lGX1RVTl9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKIC8qIFJlYWQgcXVldWUgc2l6ZSAqLwogI2RlZmluZSBUVU5fUkVBRFFfU0laRQk1MDAKQEAgLTMzLDYgKzMyLDcgQEAKICNkZWZpbmUgVFVOX05PX1BJCTB4MDA0MAogI2RlZmluZSBUVU5fT05FX1FVRVVFCTB4MDA4MAogI2RlZmluZSBUVU5fUEVSU0lTVCAJMHgwMTAwCQorI2RlZmluZSBUVU5fVk5FVF9IRFIgCTB4MDIwMAogCiAvKiBJb2N0bCBkZWZpbmVzICovCiAjZGVmaW5lIFRVTlNFVE5PQ1NVTSAgX0lPVygnVCcsIDIwMCwgaW50KSAKQEAgLTQyLDE3ICs0Miw0MyBAQAogI2RlZmluZSBUVU5TRVRPV05FUiAgIF9JT1coJ1QnLCAyMDQsIGludCkKICNkZWZpbmUgVFVOU0VUTElOSyAgICBfSU9XKCdUJywgMjA1LCBpbnQpCiAjZGVmaW5lIFRVTlNFVEdST1VQICAgX0lPVygnVCcsIDIwNiwgaW50KQorI2RlZmluZSBUVU5HRVRGRUFUVVJFUyBfSU9SKCdUJywgMjA3LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFRVTlNFVE9GRkxPQUQgIF9JT1coJ1QnLCAyMDgsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVFVOU0VUVFhGSUxURVIgX0lPVygnVCcsIDIwOSwgdW5zaWduZWQgaW50KQogCiAvKiBUVU5TRVRJRkYgaWZyIGZsYWdzICovCiAjZGVmaW5lIElGRl9UVU4JCTB4MDAwMQogI2RlZmluZSBJRkZfVEFQCQkweDAwMDIKICNkZWZpbmUgSUZGX05PX1BJCTB4MTAwMAogI2RlZmluZSBJRkZfT05FX1FVRVVFCTB4MjAwMAorI2RlZmluZSBJRkZfVk5FVF9IRFIJMHg0MDAwCiAKKy8qIEZlYXR1cmVzIGZvciBHU08gKFRVTlNFVE9GRkxPQUQpLiAqLworI2RlZmluZSBUVU5fRl9DU1VNCTB4MDEJLyogWW91IGNhbiBoYW5kIG1lIHVuY2hlY2tzdW1tZWQgcGFja2V0cy4gKi8KKyNkZWZpbmUgVFVOX0ZfVFNPNAkweDAyCS8qIEkgY2FuIGhhbmRsZSBUU08gZm9yIElQdjQgcGFja2V0cyAqLworI2RlZmluZSBUVU5fRl9UU082CTB4MDQJLyogSSBjYW4gaGFuZGxlIFRTTyBmb3IgSVB2NiBwYWNrZXRzICovCisjZGVmaW5lIFRVTl9GX1RTT19FQ04JMHgwOAkvKiBJIGNhbiBoYW5kbGUgVFNPIHdpdGggRUNOIGJpdHMuICovCisKKy8qIFByb3RvY29sIGluZm8gcHJlcGVuZGVkIHRvIHRoZSBwYWNrZXRzICh3aGVuIElGRl9OT19QSSBpcyBub3Qgc2V0KSAqLworI2RlZmluZSBUVU5fUEtUX1NUUklQCTB4MDAwMQogc3RydWN0IHR1bl9waSB7Ci0JdW5zaWduZWQgc2hvcnQgZmxhZ3M7CisJX191MTYgIGZsYWdzOwogCV9fYmUxNiBwcm90bzsKIH07Ci0jZGVmaW5lIFRVTl9QS1RfU1RSSVAJMHgwMDAxCisKKy8qCisgKiBGaWx0ZXIgc3BlYyAodXNlZCBmb3IgU0VUWFhGSUxURVIgaW9jdGxzKQorICogVGhpcyBzdHVmZiBpcyBhcHBsaWNhYmxlIG9ubHkgdG8gdGhlIFRBUCAoRXRoZXJuZXQpIGRldmljZXMuCisgKiBJZiB0aGUgY291bnQgaXMgemVybyB0aGUgZmlsdGVyIGlzIGRpc2FibGVkIGFuZCB0aGUgZHJpdmVyIGFjY2VwdHMKKyAqIGFsbCBwYWNrZXRzIChwcm9taXNjIG1vZGUpLgorICogSWYgdGhlIGZpbHRlciBpcyBlbmFibGVkIGluIG9yZGVyIHRvIGFjY2VwdCBicm9hZGNhc3QgcGFja2V0cworICogYnJvYWRjYXN0IGFkZHIgbXVzdCBiZSBleHBsaWNpdGx5IGluY2x1ZGVkIGluIHRoZSBhZGRyIGxpc3QuCisgKi8KKyNkZWZpbmUgVFVOX0ZMVF9BTExNVUxUSSAweDAwMDEgLyogQWNjZXB0IGFsbCBtdWx0aWNhc3QgcGFja2V0cyAqLworc3RydWN0IHR1bl9maWx0ZXIgeworCV9fdTE2ICBmbGFnczsgLyogVFVOX0ZMVF8gZmxhZ3Mgc2VlIGFib3ZlICovCisJX191MTYgIGNvdW50OyAvKiBOdW1iZXIgb2YgYWRkcmVzc2VzICovCisJX191OCAgIGFkZHJbMF1bRVRIX0FMRU5dOworfTsKIAogI2VuZGlmIC8qIF9fSUZfVFVOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKaW5kZXggMTVhY2UwMi4uOWU3YjQ5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKQEAgLTE0LDEwICsxNCw2IEBACiAjZGVmaW5lIF9MSU5VWF9JRl9WTEFOX0hfCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qIGV4dGVybmFsbHkgZGVmaW5lZCBzdHJ1Y3RzICovCi1zdHJ1Y3QgaGxpc3Rfbm9kZTsKLQogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAKQEAgLTkxLDcgKzg3LDcgQEAKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZ3JvdXBfZ2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHZsYW5faWQpCisJCQkJCQkgICAgICAgdTE2IHZsYW5faWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTsKIAlhcnJheSA9IHZnLT52bGFuX2RldmljZXNfYXJyYXlzW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTsKQEAgLTk5LDcgKzk1LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3JvdXBfc2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsCi0JCQkJCSB1bnNpZ25lZCBpbnQgdmxhbl9pZCwKKwkJCQkJIHUxNiB2bGFuX2lkLAogCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqKmFycmF5OwpAQCAtMTA5LDE2NCArMTA1LDgxIEBACiAJYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gZGV2OwogfQogCi1zdHJ1Y3Qgdmxhbl9wcmlvcml0eV90Y2lfbWFwcGluZyB7Ci0JdTMyIHByaW9yaXR5OwotCXVuc2lnbmVkIHNob3J0IHZsYW5fcW9zOyAvKiBUaGlzIHNob3VsZCBiZSBzaGlmdGVkIHdoZW4gZmlyc3Qgc2V0LCBzbyB3ZSBvbmx5IGRvIGl0Ci0JCQkJICAqIGF0IHByb3Zpc2lvbmluZyB0aW1lLgotCQkJCSAgKiAoKHNrYi0+cHJpb3JpdHkgPDwgMTMpICYgMHhFMDAwKQotCQkJCSAgKi8KLQlzdHJ1Y3Qgdmxhbl9wcmlvcml0eV90Y2lfbWFwcGluZyAqbmV4dDsKLX07CisjZGVmaW5lIHZsYW5fdHhfdGFnX3ByZXNlbnQoX19za2IpCSgoX19za2IpLT52bGFuX3RjaSkKKyNkZWZpbmUgdmxhbl90eF90YWdfZ2V0KF9fc2tiKQkJKChfX3NrYiktPnZsYW5fdGNpKQogCi0vKiBIb2xkcyBpbmZvcm1hdGlvbiB0aGF0IG1ha2VzIHNlbnNlIGlmIHRoaXMgZGV2aWNlIGlzIGEgVkxBTiBkZXZpY2UuICovCi1zdHJ1Y3Qgdmxhbl9kZXZfaW5mbyB7Ci0JLyoqIFRoaXMgd2lsbCBiZSB0aGUgbWFwcGluZyB0aGF0IGNvcnJlbGF0ZXMgc2tiLT5wcmlvcml0eSB0bwotCSAqIDMgYml0cyBvZiBWTEFOIFFPUyB0YWdzLi4uCi0JICovCi0JdW5zaWduZWQgaW50IG5yX2luZ3Jlc3NfbWFwcGluZ3M7Ci0JdTMyIGluZ3Jlc3NfcHJpb3JpdHlfbWFwWzhdOworI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQorZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2Rldl9yZWFsX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB1MTYgdmxhbl9kZXZfdmxhbl9pZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotCXVuc2lnbmVkIGludCBucl9lZ3Jlc3NfbWFwcGluZ3M7Ci0Jc3RydWN0IHZsYW5fcHJpb3JpdHlfdGNpX21hcHBpbmcgKmVncmVzc19wcmlvcml0eV9tYXBbMTZdOyAvKiBoYXNoIHRhYmxlICovCi0KLQl1bnNpZ25lZCBzaG9ydCB2bGFuX2lkOyAgICAgICAgLyogIFRoZSBWTEFOIElkZW50aWZpZXIgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLwotCXVuc2lnbmVkIHNob3J0IGZsYWdzOyAgICAgICAgICAvKiAoMSA8PCAwKSByZV9vcmRlcl9oZWFkZXIgICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBWTEFOIGNvZGUgdG8gbW92ZSBhcm91bmQgdGhlIGV0aGVybmV0IGhlYWRlciBvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBpbmdyZXNzIHRvIG1ha2UgdGhlIHNrYiBsb29rICoqZXhhY3RseSoqIGxpa2UgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgY2FtZSBpbiBmcm9tIGFuIGV0aGVybmV0IHBvcnQuICBUaGlzIGRlc3Ryb3lzIHNvbWUgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdGhlIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHNrYiwgYnV0IGl0IGZpeGVzIHByb2dyYW1zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGxpa2UgREhDUCB0aGF0IHVzZSBwYWNrZXQtZmlsdGVyaW5nIGFuZCBkb24ndCB1bmRlcnN0YW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIDgwMi4xUQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0Jc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2OyAgICAvKiB0aGUgdW5kZXJseWluZyBkZXZpY2UvaW50ZXJmYWNlICovCi0JdW5zaWduZWQgY2hhciByZWFsX2Rldl9hZGRyW0VUSF9BTEVOXTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlbnQ7ICAgIC8qIEhvbGRzIHRoZSBwcm9jIGRhdGEgKi8KLQl1bnNpZ25lZCBsb25nIGNudF9pbmNfaGVhZHJvb21fb25fdHg7IC8qIEhvdyBtYW55IHRpbWVzIGRpZCB3ZSBoYXZlIHRvIGdyb3cgdGhlIHNrYiBvbiBUWC4gKi8KLQl1bnNpZ25lZCBsb25nIGNudF9lbmNhcF9vbl94bWl0OyAgICAgIC8qIEhvdyBtYW55IHRpbWVzIGRpZCB3ZSBoYXZlIHRvIGVuY2Fwc3VsYXRlIHRoZSBza2Igb24gVFguICovCi19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB2bGFuX2Rldl9pbmZvICp2bGFuX2Rldl9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitleHRlcm4gaW50IF9fdmxhbl9od2FjY2VsX3J4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCisJCQkgICAgIHUxNiB2bGFuX3RjaSwgaW50IHBvbGxpbmcpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2X3JlYWxfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIG5ldGRldl9wcml2KGRldik7CisJQlVHKCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKLS8qIGlubGluZSBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgX191MzIgdmxhbl9nZXRfaW5ncmVzc19wcmlvcml0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgICB1bnNpZ25lZCBzaG9ydCB2bGFuX3RhZykKK3N0YXRpYyBpbmxpbmUgdTE2IHZsYW5fZGV2X3ZsYW5faWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmlwID0gdmxhbl9kZXZfaW5mbyhkZXYpOwotCi0JcmV0dXJuIHZpcC0+aW5ncmVzc19wcmlvcml0eV9tYXBbKHZsYW5fdGFnID4+IDEzKSAmIDB4N107CisJQlVHKCk7CisJcmV0dXJuIDA7CiB9CiAKLS8qIFZMQU4gdHggaHcgYWNjZWxlcmF0aW9uIGhlbHBlcnMuICovCi1zdHJ1Y3Qgdmxhbl9za2JfdHhfY29va2llIHsKLQl1MzIJbWFnaWM7Ci0JdTMyCXZsYW5fdGFnOwotfTsKLQotI2RlZmluZSBWTEFOX1RYX0NPT0tJRV9NQUdJQwkweDU2NGM0MTRlCS8qICJWTEFOIiBpbiBhc2NpaS4gKi8KLSNkZWZpbmUgVkxBTl9UWF9TS0JfQ0IoX19za2IpCSgoc3RydWN0IHZsYW5fc2tiX3R4X2Nvb2tpZSAqKSYoKF9fc2tiKS0+Y2JbMF0pKQotI2RlZmluZSB2bGFuX3R4X3RhZ19wcmVzZW50KF9fc2tiKSBcCi0JKFZMQU5fVFhfU0tCX0NCKF9fc2tiKS0+bWFnaWMgPT0gVkxBTl9UWF9DT09LSUVfTUFHSUMpCi0jZGVmaW5lIHZsYW5fdHhfdGFnX2dldChfX3NrYikJKFZMQU5fVFhfU0tCX0NCKF9fc2tiKS0+dmxhbl90YWcpCi0KLS8qIFZMQU4gcnggaHcgYWNjZWxlcmF0aW9uIGhlbHBlci4gIFRoaXMgYWN0cyBsaWtlIG5ldGlmX3tyeCxyZWNlaXZlX3NrYn0oKS4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9od2FjY2VsX3J4KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCi0JCQkJICAgIHVuc2lnbmVkIHNob3J0IHZsYW5fdGFnLCBpbnQgcG9sbGluZykKK3N0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9od2FjY2VsX3J4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCisJCQkJICAgIHUxNiB2bGFuX3RjaSwgaW50IHBvbGxpbmcpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwotCi0JaWYgKHNrYl9ib25kX3Nob3VsZF9kcm9wKHNrYikpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOwotCX0KLQotCXNrYi0+ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGdycCwgdmxhbl90YWcgJiBWTEFOX1ZJRF9NQVNLKTsKLQlpZiAoc2tiLT5kZXYgPT0gTlVMTCkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCi0JCS8qIE5vdCBORVRfUlhfRFJPUCwgdGhpcyBpcyBub3QgYmVpbmcgZHJvcHBlZAotCQkgKiBkdWUgdG8gY29uZ2VzdGlvbi4KLQkJICovCi0JCXJldHVybiAwOwotCX0KLQotCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQotCXN0YXRzID0gJnNrYi0+ZGV2LT5zdGF0czsKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQotCXNrYi0+cHJpb3JpdHkgPSB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHNrYi0+ZGV2LCB2bGFuX3RhZyk7Ci0Jc3dpdGNoIChza2ItPnBrdF90eXBlKSB7Ci0JY2FzZSBQQUNLRVRfQlJPQURDQVNUOgotCQlicmVhazsKLQotCWNhc2UgUEFDS0VUX01VTFRJQ0FTVDoKLQkJc3RhdHMtPm11bHRpY2FzdCsrOwotCQlicmVhazsKLQotCWNhc2UgUEFDS0VUX09USEVSSE9TVDoKLQkJLyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0J3MgbWFrZSBzdXJlLgotCQkgKiBUaGlzIGFsbG93cyB0aGUgVkxBTiB0byBoYXZlIGEgZGlmZmVyZW50IE1BQyB0aGFuIHRoZSB1bmRlcmx5aW5nCi0JCSAqIGRldmljZSwgYW5kIHN0aWxsIHJvdXRlIGNvcnJlY3RseS4KLQkJICovCi0JCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0+aF9kZXN0LAotCQkJCSAgICAgICAJc2tiLT5kZXYtPmRldl9hZGRyKSkKLQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKLQkJYnJlYWs7Ci0JfTsKLQotCXJldHVybiAocG9sbGluZyA/IG5ldGlmX3JlY2VpdmVfc2tiKHNrYikgOiBuZXRpZl9yeChza2IpKTsKKwlCVUcoKTsKKwlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KKyNlbmRpZgogCisvKioKKyAqIHZsYW5faHdhY2NlbF9yeCAtIG5ldGlmX3J4IHdyYXBwZXIgZm9yIFZMQU4gUlggYWNjZWxlcmF0aW9uCisgKiBAc2tiOiBidWZmZXIKKyAqIEBncnA6IHZsYW4gZ3JvdXAKKyAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgYXMgcmVjZWl2ZWQgZnJvbSB0aGUgY2FyZAorICovCiBzdGF0aWMgaW5saW5lIGludCB2bGFuX2h3YWNjZWxfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCi0JCQkJICB1bnNpZ25lZCBzaG9ydCB2bGFuX3RhZykKKwkJCQkgIHUxNiB2bGFuX3RjaSkKIHsKLQlyZXR1cm4gX192bGFuX2h3YWNjZWxfcngoc2tiLCBncnAsIHZsYW5fdGFnLCAwKTsKKwlyZXR1cm4gX192bGFuX2h3YWNjZWxfcngoc2tiLCBncnAsIHZsYW5fdGNpLCAwKTsKIH0KIAorLyoqCisgKiB2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2IgLSBuZXRpZl9yZWNlaXZlX3NrYiB3cmFwcGVyIGZvciBWTEFOIFJYIGFjY2VsZXJhdGlvbgorICogQHNrYjogYnVmZmVyCisgKiBAZ3JwOiB2bGFuIGdyb3VwCisgKiBAdmxhbl90Y2k6IFZMQU4gVENJIGFzIHJlY2VpdmVkIGZyb20gdGhlIGNhcmQKKyAqLwogc3RhdGljIGlubGluZSBpbnQgdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCi0JCQkJCSAgIHVuc2lnbmVkIHNob3J0IHZsYW5fdGFnKQorCQkJCQkgICB1MTYgdmxhbl90Y2kpCiB7Ci0JcmV0dXJuIF9fdmxhbl9od2FjY2VsX3J4KHNrYiwgZ3JwLCB2bGFuX3RhZywgMSk7CisJcmV0dXJuIF9fdmxhbl9od2FjY2VsX3J4KHNrYiwgZ3JwLCB2bGFuX3RjaSwgMSk7CiB9CiAKIC8qKgogICogX192bGFuX3B1dF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZwogICogQHNrYjogc2tidWZmIHRvIHRhZwotICogQHRhZzogVkxBTiB0YWcgdG8gaW5zZXJ0CisgKiBAdmxhbl90Y2k6IFZMQU4gVENJIHRvIGluc2VydAogICoKICAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkCiAgKiBSZXR1cm5zIGEgVkxBTiB0YWdnZWQgc2tiLiBJZiBhIG5ldyBza2IgaXMgY3JlYXRlZCwgQHNrYiBpcyBmcmVlZC4KLSAqIAorICoKICAqIEZvbGxvd2luZyB0aGUgc2tiX3Vuc2hhcmUoKSBleGFtcGxlLCBpbiBjYXNlIG9mIGVycm9yLCB0aGUgY2FsbGluZyBmdW5jdGlvbgogICogZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZyZWVpbmcgdGhlIG9yaWdpbmFsIHNrYi4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX192bGFuX3B1dF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgdGFnKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX192bGFuX3B1dF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHZsYW5fdGNpKQogewogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDsKIAotCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IFZMQU5fSExFTikgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tfdG1wID0gc2tiOwotCQlza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza190bXAsIFZMQU5fSExFTik7Ci0JCWtmcmVlX3NrYihza190bXApOwotCQlpZiAoIXNrYikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ2bGFuOiBmYWlsZWQgdG8gcmVhbGxvYyBoZWFkcm9vbVxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0gZWxzZSB7Ci0JCXNrYiA9IHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7Ci0JCWlmICghc2tiKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInZsYW46IGZhaWxlZCB0byB1bnNoYXJlIHNrYnVmZlxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQorCWlmIChza2JfY293X2hlYWQoc2tiLCBWTEFOX0hMRU4pIDwgMCkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQotCiAJdmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2JfcHVzaChza2IsIFZMQU5fSExFTik7CiAKIAkvKiBNb3ZlIHRoZSBtYWMgYWRkcmVzc2VzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldyBoZWFkZXIuICovCkBAIC0yNzUsMTIgKzE4OCwxMCBAQAogCS8qIGZpcnN0LCB0aGUgZXRoZXJuZXQgdHlwZSAqLwogCXZldGgtPmhfdmxhbl9wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTsKIAotCS8qIG5vdywgdGhlIHRhZyAqLwotCXZldGgtPmhfdmxhbl9UQ0kgPSBodG9ucyh0YWcpOworCS8qIG5vdywgdGhlIFRDSSAqLworCXZldGgtPmhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7CiAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyMVEpOwotCXNrYi0+bWFjX2hlYWRlciAtPSBWTEFOX0hMRU47Ci0Jc2tiLT5uZXR3b3JrX2hlYWRlciAtPSBWTEFOX0hMRU47CiAKIAlyZXR1cm4gc2tiOwogfQpAQCAtMjg4LDE4ICsxOTksMTQgQEAKIC8qKgogICogX192bGFuX2h3YWNjZWxfcHV0X3RhZyAtIGhhcmR3YXJlIGFjY2VsZXJhdGVkIFZMQU4gaW5zZXJ0aW5nCiAgKiBAc2tiOiBza2J1ZmYgdG8gdGFnCi0gKiBAdGFnOiBWTEFOIHRhZyB0byBpbnNlcnQKKyAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0CiAgKgotICogUHV0cyB0aGUgVkxBTiB0YWcgaW4gQHNrYi0+Y2JbXSBhbmQgbGV0cyB0aGUgZGV2aWNlIGRvIHRoZSByZXN0CisgKiBQdXRzIHRoZSBWTEFOIFRDSSBpbiBAc2tiLT52bGFuX3RjaSBhbmQgbGV0cyB0aGUgZGV2aWNlIGRvIHRoZSByZXN0CiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fdmxhbl9od2FjY2VsX3B1dF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgdGFnKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX192bGFuX2h3YWNjZWxfcHV0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgICB1MTYgdmxhbl90Y2kpCiB7Ci0Jc3RydWN0IHZsYW5fc2tiX3R4X2Nvb2tpZSAqY29va2llOwotCi0JY29va2llID0gVkxBTl9UWF9TS0JfQ0Ioc2tiKTsKLQljb29raWUtPm1hZ2ljID0gVkxBTl9UWF9DT09LSUVfTUFHSUM7Ci0JY29va2llLT52bGFuX3RhZyA9IHRhZzsKLQorCXNrYi0+dmxhbl90Y2kgPSB2bGFuX3RjaTsKIAlyZXR1cm4gc2tiOwogfQogCkBAIC0zMDgsMjggKzIxNSwyOCBAQAogLyoqCiAgKiB2bGFuX3B1dF90YWcgLSBpbnNlcnRzIFZMQU4gdGFnIGFjY29yZGluZyB0byBkZXZpY2UgZmVhdHVyZXMKICAqIEBza2I6IHNrYnVmZiB0byB0YWcKLSAqIEB0YWc6IFZMQU4gdGFnIHRvIGluc2VydAorICogQHZsYW5fdGNpOiBWTEFOIFRDSSB0byBpbnNlcnQKICAqCiAgKiBBc3N1bWVzIHNrYi0+ZGV2IGlzIHRoZSB0YXJnZXQgdGhhdCB3aWxsIHhtaXQgdGhpcyBmcmFtZS4KICAqIFJldHVybnMgYSBWTEFOIHRhZ2dlZCBza2IuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5fcHV0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCB0YWcpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX3B1dF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHZsYW5fdGNpKQogewogCWlmIChza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fVFgpIHsKLQkJcmV0dXJuIF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB0YWcpOworCQlyZXR1cm4gX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZsYW5fdGNpKTsKIAl9IGVsc2UgewotCQlyZXR1cm4gX192bGFuX3B1dF90YWcoc2tiLCB0YWcpOworCQlyZXR1cm4gX192bGFuX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAJfQogfQogCiAvKioKICAqIF9fdmxhbl9nZXRfdGFnIC0gZ2V0IHRoZSBWTEFOIElEIHRoYXQgaXMgcGFydCBvZiB0aGUgcGF5bG9hZAogICogQHNrYjogc2tidWZmIHRvIHF1ZXJ5Ci0gKiBAdGFnOiBidWZmZXIgdG8gc3RvcmUgdmxhdWUKLSAqIAorICogQHZsYW5fdGNpOiBidWZmZXIgdG8gc3RvcmUgdmxhdWUKKyAqCiAgKiBSZXR1cm5zIGVycm9yIGlmIHRoZSBza2IgaXMgbm90IG9mIFZMQU4gdHlwZQogICovCi1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5fZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCAqdGFnKQorc3RhdGljIGlubGluZSBpbnQgX192bGFuX2dldF90YWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICp2bGFuX3RjaSkKIHsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOwogCkBAIC0zMzcsMjkgKzI0NCwyNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkqdGFnID0gbnRvaHModmV0aC0+aF92bGFuX1RDSSk7Ci0KKwkqdmxhbl90Y2kgPSBudG9ocyh2ZXRoLT5oX3ZsYW5fVENJKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBfX3ZsYW5faHdhY2NlbF9nZXRfdGFnIC0gZ2V0IHRoZSBWTEFOIElEIHRoYXQgaXMgaW4gQHNrYi0+Y2JbXQogICogQHNrYjogc2tidWZmIHRvIHF1ZXJ5Ci0gKiBAdGFnOiBidWZmZXIgdG8gc3RvcmUgdmxhdWUKLSAqIAotICogUmV0dXJucyBlcnJvciBpZiBAc2tiLT5jYltdIGlzIG5vdCBzZXQgY29ycmVjdGx5CisgKiBAdmxhbl90Y2k6IGJ1ZmZlciB0byBzdG9yZSB2bGF1ZQorICoKKyAqIFJldHVybnMgZXJyb3IgaWYgQHNrYi0+dmxhbl90Y2kgaXMgbm90IHNldCBjb3JyZWN0bHkKICAqLwogc3RhdGljIGlubGluZSBpbnQgX192bGFuX2h3YWNjZWxfZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgdW5zaWduZWQgc2hvcnQgKnRhZykKKwkJCQkJIHUxNiAqdmxhbl90Y2kpCiB7Ci0Jc3RydWN0IHZsYW5fc2tiX3R4X2Nvb2tpZSAqY29va2llOwotCi0JY29va2llID0gVkxBTl9UWF9TS0JfQ0Ioc2tiKTsKLQlpZiAoY29va2llLT5tYWdpYyA9PSBWTEFOX1RYX0NPT0tJRV9NQUdJQykgewotCQkqdGFnID0gY29va2llLT52bGFuX3RhZzsKKwlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCSp2bGFuX3RjaSA9IHNrYi0+dmxhbl90Y2k7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7Ci0JCSp0YWcgPSAwOworCQkqdmxhbl90Y2kgPSAwOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiB9CkBAIC0zNjksMTYgKzI3MiwxNiBAQAogLyoqCiAgKiB2bGFuX2dldF90YWcgLSBnZXQgdGhlIFZMQU4gSUQgZnJvbSB0aGUgc2tiCiAgKiBAc2tiOiBza2J1ZmYgdG8gcXVlcnkKLSAqIEB0YWc6IGJ1ZmZlciB0byBzdG9yZSB2bGF1ZQotICogCisgKiBAdmxhbl90Y2k6IGJ1ZmZlciB0byBzdG9yZSB2bGF1ZQorICoKICAqIFJldHVybnMgZXJyb3IgaWYgdGhlIHNrYiBpcyBub3QgVkxBTiB0YWdnZWQKICAqLwotc3RhdGljIGlubGluZSBpbnQgdmxhbl9nZXRfdGFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIHNob3J0ICp0YWcpCitzdGF0aWMgaW5saW5lIGludCB2bGFuX2dldF90YWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICp2bGFuX3RjaSkKIHsKIAlpZiAoc2tiLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKSB7Ci0JCXJldHVybiBfX3ZsYW5faHdhY2NlbF9nZXRfdGFnKHNrYiwgdGFnKTsKKwkJcmV0dXJuIF9fdmxhbl9od2FjY2VsX2dldF90YWcoc2tiLCB2bGFuX3RjaSk7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIF9fdmxhbl9nZXRfdGFnKHNrYiwgdGFnKTsKKwkJcmV0dXJuIF9fdmxhbl9nZXRfdGFnKHNrYiwgdmxhbl90Y2kpOwogCX0KIH0KIApAQCAtNDAyLDYgKzMwNSw3IEBACiAKIGVudW0gdmxhbl9mbGFncyB7CiAJVkxBTl9GTEFHX1JFT1JERVJfSERSCT0gMHgxLAorCVZMQU5fRkxBR19HVlJQCQk9IDB4MiwKIH07CiAKIGVudW0gdmxhbl9uYW1lX3R5cGVzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKaW5kZXggZjVhMWEwZC4uN2JiM2MwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTIyOCw3ICsyMjgsNiBAQAogZXh0ZXJuIGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsCiAJCXN0cnVjdCBncm91cF9maWx0ZXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CiBleHRlcm4gaW50IGlwX21jX3NmX2FsbG93KHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGxvY2FsLCBfX2JlMzIgcm10LCBpbnQgZGlmKTsKLWV4dGVybiB2b2lkIGlwX21yX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpcF9tY19pbml0X2RldihzdHJ1Y3QgaW5fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIGlwX21jX3VwKHN0cnVjdCBpbl9kZXZpY2UgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggZDE1MGM1Ny4uYTU4MDJjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtMzczLDYgKzM3Myw4IEBACiAKICNkZWZpbmUgS0VZX1dJTUFYCQkyNDYKIAorLyogUmFuZ2UgMjQ4IC0gMjU1IGlzIHJlc2VydmVkIGZvciBzcGVjaWFsIG5lZWRzIG9mIEFUIGtleWJvYXJkIGRyaXZlciAqLworCiAjZGVmaW5lIEJUTl9NSVNDCQkweDEwMAogI2RlZmluZSBCVE5fMAkJCTB4MTAwCiAjZGVmaW5lIEJUTl8xCQkJMHgxMDEKQEAgLTY0MCw2ICs2NDIsOCBAQAogI2RlZmluZSBTV19SRktJTExfQUxMCQkweDAzICAvKiByZmtpbGwgbWFzdGVyIHN3aXRjaCwgdHlwZSAiYW55IgogCQkJCQkgc2V0ID0gcmFkaW8gZW5hYmxlZCAqLwogI2RlZmluZSBTV19SQURJTwkJU1dfUkZLSUxMX0FMTAkvKiBkZXByZWNhdGVkICovCisjZGVmaW5lIFNXX01JQ1JPUEhPTkVfSU5TRVJUCTB4MDQgIC8qIHNldCA9IGluc2VydGVkICovCisjZGVmaW5lIFNXX0RPQ0sJCQkweDA1ICAvKiBzZXQgPSBwbHVnZ2VkIGludG8gZG9jayAqLwogI2RlZmluZSBTV19NQVgJCQkweDBmCiAjZGVmaW5lIFNXX0NOVAkJCShTV19NQVgrMSkKIApAQCAtMTIxNSwxMSArMTIxOSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAloX25vZGU7CiB9OwogCi0jZGVmaW5lIHRvX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IGlucHV0X2Rldiwgbm9kZSkKLSNkZWZpbmUgdG9faGFuZGxlcihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IGlucHV0X2hhbmRsZXIsIG5vZGUpCi0jZGVmaW5lIHRvX2hhbmRsZShuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IGlucHV0X2hhbmRsZSwgZF9ub2RlKQotI2RlZmluZSB0b19oYW5kbGVfaChuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IGlucHV0X2hhbmRsZSwgaF9ub2RlKQotCiBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9hbGxvY2F0ZV9kZXZpY2Uodm9pZCk7CiB2b2lkIGlucHV0X2ZyZWVfZGV2aWNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXA2X3R1bm5lbC5oIGIvaW5jbHVkZS9saW51eC9pcDZfdHVubmVsLmgKaW5kZXggYWYzZjRhNy4uMWU3Y2M0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcDZfdHVubmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcDZfdHVubmVsLmgKQEAgLTEsNyArMSwzIEBACi0vKgotICogJElkJAotICovCi0KICNpZm5kZWYgX0lQNl9UVU5ORUxfSAogI2RlZmluZSBfSVA2X1RVTk5FTF9ICiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKaW5kZXggY2RlMDU2ZS4uNjQxZTAyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcHY2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogCXN0cnVjdAlpbjZfYWRkcglkYWRkcjsKIH07CiAKKyNpZmRlZiBfX0tFUk5FTF9fCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgY29uZmlndXJhdGlvbiBvcHRpb25zIHBlciBJUHY2IGxpbmsuCiAgKi8KQEAgLTE2Myw4ICsxNjQsMTEgQEAKICNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEUKIAlfX3MzMgkJbWNfZm9yd2FyZGluZzsKICNlbmRpZgorCV9fczMyCQlkaXNhYmxlX2lwdjY7CisJX19zMzIJCWFjY2VwdF9kYWQ7CiAJdm9pZAkJKnN5c2N0bDsKIH07CisjZW5kaWYKIAogLyogaW5kZXggdmFsdWVzIGZvciB0aGUgdmFyaWFibGVzIGluIGlwdjZfZGV2Y29uZiAqLwogZW51bSB7CkBAIC0xOTQsNiArMTk4LDggQEAKIAlERVZDT05GX09QVElNSVNUSUNfREFELAogCURFVkNPTkZfQUNDRVBUX1NPVVJDRV9ST1VURSwKIAlERVZDT05GX01DX0ZPUldBUkRJTkcsCisJREVWQ09ORl9ESVNBQkxFX0lQVjYsCisJREVWQ09ORl9BQ0NFUFRfREFELAogCURFVkNPTkZfTUFYCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oIGIvaW5jbHVkZS9saW51eC9pc3RhbGxpb24uaAppbmRleCA1YTg0ZmU5Li4wZDE4NDA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXN0YWxsaW9uLmgKQEAgLTUxLDI1ICs1MSwyMSBAQAogICovCiBzdHJ1Y3Qgc3RsaXBvcnQgewogCXVuc2lnbmVkIGxvbmcJCW1hZ2ljOworCXN0cnVjdCB0dHlfcG9ydAkJcG9ydDsKIAl1bnNpZ25lZCBpbnQJCXBvcnRucjsKIAl1bnNpZ25lZCBpbnQJCXBhbmVsbnI7CiAJdW5zaWduZWQgaW50CQlicmRucjsKIAl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKIAl1bnNpZ25lZCBpbnQJCWRldm5yOwotCWludAkJCWZsYWdzOwogCWludAkJCWJhdWRfYmFzZTsKIAlpbnQJCQljdXN0b21fZGl2aXNvcjsKIAlpbnQJCQljbG9zZV9kZWxheTsKIAlpbnQJCQljbG9zaW5nX3dhaXQ7Ci0JaW50CQkJcmVmY291bnQ7CiAJaW50CQkJb3BlbndhaXRjbnQ7CiAJaW50CQkJcmM7CiAJaW50CQkJYXJnc2l6ZTsKIAl2b2lkCQkJKmFyZ3A7CiAJdW5zaWduZWQgaW50CQlyeG1hcmttc2s7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKLQl3YWl0X3F1ZXVlX2hlYWRfdAlvcGVuX3dhaXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlyYXdfd2FpdDsKIAlzdHJ1Y3QgYXN5c2lncwkJYXNpZzsKIAl1bnNpZ25lZCBsb25nCQlhZGRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qb3lzdGljay5oIGIvaW5jbHVkZS9saW51eC9qb3lzdGljay5oCmluZGV4IGUyZDNhMTguLmI1ZTA1MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvam95c3RpY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmgKQEAgLTIsOCArMiw2IEBACiAjZGVmaW5lIF9MSU5VWF9KT1lTVElDS19ICiAKIC8qCi0gKiAkSWQ6IGpveXN0aWNrLmgsdiAxLjMgMjAwMC8xMS8zMCAxMTowNzowNSB2b2p0ZWNoIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFZvanRlY2ggUGF2bGlrCiAgKgogICogIFNwb25zb3JlZCBieSBTdVNFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttb2QuaCBiL2luY2x1ZGUvbGludXgva21vZC5oCmluZGV4IDVkYzEzODQuLjA1MDljNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21vZC5oCisrKyBiL2luY2x1ZGUvbGludXgva21vZC5oCkBAIC0yNSwxNSArMjUsMTYgQEAKIAogI2RlZmluZSBLTU9EX1BBVEhfTEVOIDI1NgogCi0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogLyogbW9kcHJvYmUgZXhpdCBzdGF0dXMgb24gc3VjY2VzcywgLXZlIG9uIGVycm9yLiAgUmV0dXJuIHZhbHVlCiAgKiB1c3VhbGx5IHVzZWxlc3MgdGhvdWdoLiAqLwogZXh0ZXJuIGludCByZXF1ZXN0X21vZHVsZShjb25zdCBjaGFyICogbmFtZSwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisjZGVmaW5lIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHgsIG1vZC4uLikgKCh4KSA/OiAocmVxdWVzdF9tb2R1bGUobW9kKSwgKHgpKSkKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCByZXF1ZXN0X21vZHVsZShjb25zdCBjaGFyICogbmFtZSwgLi4uKSB7IHJldHVybiAtRU5PU1lTOyB9CisjZGVmaW5lIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHgsIG1vZC4uLikgKHgpCiAjZW5kaWYKIAotI2RlZmluZSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4LCBtb2QuLi4pICgoeCkgPzogKHJlcXVlc3RfbW9kdWxlKG1vZCksICh4KSkpCiAKIHN0cnVjdCBrZXk7CiBzdHJ1Y3QgZmlsZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva29iamVjdC5oIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKaW5kZXggMzllNzA5Zi4uNjBmMGQ0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi0jZGVmaW5lIEtPQkpfTkFNRV9MRU4JCQkyMAogI2RlZmluZSBVRVZFTlRfSEVMUEVSX1BBVEhfTEVOCQkyNTYKICNkZWZpbmUgVUVWRU5UX05VTV9FTlZQCQkJMzIJLyogbnVtYmVyIG9mIGVudiBwb2ludGVycyAqLwogI2RlZmluZSBVRVZFTlRfQlVGRkVSX1NJWkUJCTIwNDgJLyogYnVmZmVyIGZvciB0aGUgdmFyaWFibGVzICovCkBAIC01OSwxMiArNTgsMTIgQEAKIAogc3RydWN0IGtvYmplY3QgewogCWNvbnN0IGNoYXIJCSpuYW1lOwotCXN0cnVjdCBrcmVmCQlrcmVmOwogCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CiAJc3RydWN0IGtvYmplY3QJCSpwYXJlbnQ7CiAJc3RydWN0IGtzZXQJCSprc2V0OwogCXN0cnVjdCBrb2JqX3R5cGUJKmt0eXBlOwogCXN0cnVjdCBzeXNmc19kaXJlbnQJKnNkOworCXN0cnVjdCBrcmVmCQlrcmVmOwogCXVuc2lnbmVkIGludCBzdGF0ZV9pbml0aWFsaXplZDoxOwogCXVuc2lnbmVkIGludCBzdGF0ZV9pbl9zeXNmczoxOwogCXVuc2lnbmVkIGludCBzdGF0ZV9hZGRfdWV2ZW50X3NlbnQ6MTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtLmggYi9pbmNsdWRlL2xpbnV4L2t2bS5oCmluZGV4IGEyODFhZmUuLjBlYTA2NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtLmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm0uaApAQCAtMTczLDYgKzE3MywzMCBAQAogCX07CiB9OwogCisvKiBmb3IgS1ZNX1JFR0lTVEVSX0NPQUxFU0NFRF9NTUlPIC8gS1ZNX1VOUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gKi8KKworc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lIHsKKwlfX3U2NCBhZGRyOworCV9fdTMyIHNpemU7CisJX191MzIgcGFkOworfTsKKworc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pbyB7CisJX191NjQgcGh5c19hZGRyOworCV9fdTMyIGxlbjsKKwlfX3UzMiBwYWQ7CisJX191OCAgZGF0YVs4XTsKK307CisKK3N0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fcmluZyB7CisJX191MzIgZmlyc3QsIGxhc3Q7CisJc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pbyBjb2FsZXNjZWRfbW1pb1swXTsKK307CisKKyNkZWZpbmUgS1ZNX0NPQUxFU0NFRF9NTUlPX01BWCBcCisJKChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19yaW5nKSkgLyBcCisJIHNpemVvZihzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvKSkKKwogLyogZm9yIEtWTV9UUkFOU0xBVEUgKi8KIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24gewogCS8qIGluICovCkBAIC0yOTQsMTQgKzMxOCwxNCBAQAogCV9fdTMyIHZjcHVfaWQ7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJX191MzIgY3ljbGVfbG8sIGN5Y2xlX2hpOworCQkJX191NjQgY3ljbGVfdTY0OwogCQkJX191MzIgZXh0cmFfdTMyW0tWTV9UUkNfRVhUUkFfTUFYXTsKIAkJfSBjeWNsZTsKIAkJc3RydWN0IHsKIAkJCV9fdTMyIGV4dHJhX3UzMltLVk1fVFJDX0VYVFJBX01BWF07CiAJCX0gbm9jeWNsZTsKIAl9IHU7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2RlZmluZSBLVk1JTyAweEFFCiAKQEAgLTM0Niw2ICszNzAsNyBAQAogI2RlZmluZSBLVk1fQ0FQX05PUF9JT19ERUxBWSAxMgogI2RlZmluZSBLVk1fQ0FQX1BWX01NVSAxMwogI2RlZmluZSBLVk1fQ0FQX01QX1NUQVRFIDE0CisjZGVmaW5lIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU8gMTUKIAogLyoKICAqIGlvY3RscyBmb3IgVk0gZmRzCkBAIC0zNzEsNiArMzk2LDEwIEBACiAjZGVmaW5lIEtWTV9DUkVBVEVfUElUCQkgIF9JTyhLVk1JTywgIDB4NjQpCiAjZGVmaW5lIEtWTV9HRVRfUElUCQkgIF9JT1dSKEtWTUlPLCAweDY1LCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSkKICNkZWZpbmUgS1ZNX1NFVF9QSVQJCSAgX0lPUihLVk1JTywgIDB4NjYsIHN0cnVjdCBrdm1fcGl0X3N0YXRlKQorI2RlZmluZSBLVk1fUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gXAorCQkJX0lPVyhLVk1JTywgIDB4NjcsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKKyNkZWZpbmUgS1ZNX1VOUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gXAorCQkJX0lPVyhLVk1JTywgIDB4NjgsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKIAogLyoKICAqIGlvY3RscyBmb3IgdmNwdSBmZHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBkZTlkMWRmLi4wN2Q2OGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC01Miw3ICs1Miw4IEBACiAKIHZvaWQga3ZtX2lvX2J1c19pbml0KHN0cnVjdCBrdm1faW9fYnVzICpidXMpOwogdm9pZCBrdm1faW9fYnVzX2Rlc3Ryb3koc3RydWN0IGt2bV9pb19idXMgKmJ1cyk7Ci1zdHJ1Y3Qga3ZtX2lvX2RldmljZSAqa3ZtX2lvX2J1c19maW5kX2RldihzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLCBncGFfdCBhZGRyKTsKK3N0cnVjdCBrdm1faW9fZGV2aWNlICprdm1faW9fYnVzX2ZpbmRfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCisJCQkJCSAgZ3BhX3QgYWRkciwgaW50IGxlbiwgaW50IGlzX3dyaXRlKTsKIHZvaWQga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bV9pb19idXMgKmJ1cywKIAkJCSAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7CiAKQEAgLTExNiw2ICsxMTcsMTAgQEAKIAlzdHJ1Y3Qga3ZtX3ZtX3N0YXQgc3RhdDsKIAlzdHJ1Y3Qga3ZtX2FyY2ggYXJjaDsKIAlhdG9taWNfdCB1c2Vyc19jb3VudDsKKyNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqY29hbGVzY2VkX21taW9fZGV2OworCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fcmluZyAqY29hbGVzY2VkX21taW9fcmluZzsKKyNlbmRpZgogfTsKIAogLyogVGhlIGd1ZXN0IGRpZCBzb21ldGhpbmcgd2UgZG9uJ3Qgc3VwcG9ydC4gKi8KQEAgLTEzNSw5ICsxNDAsNiBAQAogdm9pZCB2Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotdm9pZCBkZWNhY2hlX3ZjcHVzX29uX2NwdShpbnQgY3B1KTsKLQotCiBpbnQga3ZtX2luaXQodm9pZCAqb3BhcXVlLCB1bnNpZ25lZCBpbnQgdmNwdV9zaXplLAogCQkgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7CiB2b2lkIGt2bV9leGl0KHZvaWQpOwpAQCAtMTY2LDYgKzE2OCw3IEBACiAJCQkJc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiAqbWVtLAogCQkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3Qgb2xkLAogCQkJCWludCB1c2VyX2FsbG9jKTsKK3ZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93KHN0cnVjdCBrdm0gKmt2bSk7CiBnZm5fdCB1bmFsaWFzX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CiBzdHJ1Y3QgcGFnZSAqZ2ZuX3RvX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOwogdW5zaWduZWQgbG9uZyBnZm5fdG9faHZhKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlicHMyLmggYi9pbmNsdWRlL2xpbnV4L2xpYnBzMi5oCmluZGV4IGY2ZjMwMWUuLmFmYzQxMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlicHMyLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJwczIuaApAQCAtNDMsNyArNDMsNiBAQAogaW50IHBzMl9zZW5kYnl0ZShzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgYnl0ZSwgaW50IHRpbWVvdXQpOwogdm9pZCBwczJfZHJhaW4oc3RydWN0IHBzMmRldiAqcHMyZGV2LCBpbnQgbWF4Ynl0ZXMsIGludCB0aW1lb3V0KTsKIGludCBwczJfY29tbWFuZChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgKnBhcmFtLCBpbnQgY29tbWFuZCk7Ci1pbnQgcHMyX3NjaGVkdWxlX2NvbW1hbmQoc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1bnNpZ25lZCBjaGFyICpwYXJhbSwgaW50IGNvbW1hbmQpOwogaW50IHBzMl9oYW5kbGVfYWNrKHN0cnVjdCBwczJkZXYgKnBzMmRldiwgdW5zaWduZWQgY2hhciBkYXRhKTsKIGludCBwczJfaGFuZGxlX3Jlc3BvbnNlKHN0cnVjdCBwczJkZXYgKnBzMmRldiwgdW5zaWduZWQgY2hhciBkYXRhKTsKIHZvaWQgcHMyX2NtZF9hYm9ydGVkKHN0cnVjdCBwczJkZXYgKnBzMmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKaW5kZXggMTAyZDkyOC4uZGJiODdhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaApAQCAtMjAwLDEwICsyMDAsMTIgQEAKICAqIFNlcnZlci1zaWRlIGxvY2sgaGFuZGxpbmcKICAqLwogX19iZTMyCQkgIG5sbXN2Y19sb2NrKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3QgbmxtX2ZpbGUgKiwKLQkJCQkJc3RydWN0IG5sbV9sb2NrICosIGludCwgc3RydWN0IG5sbV9jb29raWUgKik7CisJCQkgICAgICBzdHJ1Y3QgbmxtX2hvc3QgKiwgc3RydWN0IG5sbV9sb2NrICosIGludCwKKwkJCSAgICAgIHN0cnVjdCBubG1fY29va2llICopOwogX19iZTMyCQkgIG5sbXN2Y191bmxvY2soc3RydWN0IG5sbV9maWxlICosIHN0cnVjdCBubG1fbG9jayAqKTsKIF9fYmUzMgkJICBubG1zdmNfdGVzdGxvY2soc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBubG1fZmlsZSAqLAotCQkJc3RydWN0IG5sbV9sb2NrICosIHN0cnVjdCBubG1fbG9jayAqLCBzdHJ1Y3QgbmxtX2Nvb2tpZSAqKTsKKwkJCXN0cnVjdCBubG1faG9zdCAqLCBzdHJ1Y3QgbmxtX2xvY2sgKiwKKwkJCXN0cnVjdCBubG1fbG9jayAqLCBzdHJ1Y3QgbmxtX2Nvb2tpZSAqKTsKIF9fYmUzMgkJICBubG1zdmNfY2FuY2VsX2Jsb2NrZWQoc3RydWN0IG5sbV9maWxlICosIHN0cnVjdCBubG1fbG9jayAqKTsKIHVuc2lnbmVkIGxvbmcJICBubG1zdmNfcmV0cnlfYmxvY2tlZCh2b2lkKTsKIHZvaWQJCSAgbmxtc3ZjX3RyYXZlcnNlX2Jsb2NrcyhzdHJ1Y3QgbmxtX2hvc3QgKiwgc3RydWN0IG5sbV9maWxlICosCkBAIC0yMjQsNyArMjI2LDcgQEAKICAqIENsdXN0ZXIgZmFpbG92ZXIgc3VwcG9ydAogICovCiBpbnQgICAgICAgICAgIG5sbXN2Y191bmxvY2tfYWxsX2J5X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwotaW50ICAgICAgICAgICBubG1zdmNfdW5sb2NrX2FsbF9ieV9pcChfX2JlMzIgc2VydmVyX2FkZHIpOworaW50ICAgICAgICAgICBubG1zdmNfdW5sb2NrX2FsbF9ieV9pcChzdHJ1Y3Qgc29ja2FkZHIgKnNlcnZlcl9hZGRyKTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKm5sbXN2Y19maWxlX2lub2RlKHN0cnVjdCBubG1fZmlsZSAqZmlsZSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2FzaWMzLmggYi9pbmNsdWRlL2xpbnV4L21mZC9hc2ljMy5oCmluZGV4IDRhYjIxNjIuLjMyMmNkNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL2FzaWMzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvYXNpYzMuaApAQCAtOCw3ICs4LDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIENvcHlyaWdodCAyMDAxIENvbXBhcSBDb21wdXRlciBDb3Jwb3JhdGlvbi4KLSAqIENvcHlyaWdodCAyMDA3IE9wZW5kSGFuZC4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDggT3BlbmVkSGFuZCBMdGQuCiAgKi8KIAogI2lmbmRlZiBfX0FTSUMzX0hfXwpAQCAtMTYsNDMgKzE2LDIyIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi1zdHJ1Y3QgYXNpYzMgewotCXZvaWQgX19pb21lbSAqbWFwcGluZzsKLQl1bnNpZ25lZCBpbnQgYnVzX3NoaWZ0OwotCXVuc2lnbmVkIGludCBpcnFfbnI7Ci0JdW5zaWduZWQgaW50IGlycV9iYXNlOwotCXNwaW5sb2NrX3QgbG9jazsKLQl1MTYgaXJxX2JvdGhlZGdlWzRdOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLX07Ci0KIHN0cnVjdCBhc2ljM19wbGF0Zm9ybV9kYXRhIHsKLQlzdHJ1Y3QgewotCQl1MzIgZGlyOwotCQl1MzIgaW5pdDsKLQkJdTMyIHNsZWVwX21hc2s7Ci0JCXUzMiBzbGVlcF9vdXQ7Ci0JCXUzMiBiYXR0X2ZhdWx0X291dDsKLQkJdTMyIHNsZWVwX2NvbmY7Ci0JCXUzMiBhbHRfZnVuY3Rpb247Ci0JfSBncGlvX2EsIGdwaW9fYiwgZ3Bpb19jLCBncGlvX2Q7Ci0KLQl1bnNpZ25lZCBpbnQgYnVzX3NoaWZ0OworCXUxNiAqZ3Bpb19jb25maWc7CisJdW5zaWduZWQgaW50IGdwaW9fY29uZmlnX251bTsKIAogCXVuc2lnbmVkIGludCBpcnFfYmFzZTsKIAotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipjaGlsZHJlbjsKLQl1bnNpZ25lZCBpbnQgbl9jaGlsZHJlbjsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19iYXNlOwogfTsKIAotaW50IGFzaWMzX2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBhc2ljMyAqYXNpYywgdW5zaWduZWQgZ3Bpbyk7Ci12b2lkIGFzaWMzX2dwaW9fc2V0X3ZhbHVlKHN0cnVjdCBhc2ljMyAqYXNpYywgdW5zaWduZWQgZ3BpbywgaW50IHZhbCk7Ci0KICNkZWZpbmUgQVNJQzNfTlVNX0dQSU9fQkFOS1MJNAogI2RlZmluZSBBU0lDM19HUElPU19QRVJfQkFOSwkxNgogI2RlZmluZSBBU0lDM19OVU1fR1BJT1MJCTY0CiAjZGVmaW5lIEFTSUMzX05SX0lSUVMJCUFTSUMzX05VTV9HUElPUyArIDYKIAorI2RlZmluZSBBU0lDM19UT19HUElPKGdwaW8pIChOUl9CVUlMVElOX0dQSU8gKyAoZ3BpbykpCisKICNkZWZpbmUgQVNJQzNfR1BJT19CQU5LX0EJMAogI2RlZmluZSBBU0lDM19HUElPX0JBTktfQgkxCiAjZGVmaW5lIEFTSUMzX0dQSU9fQkFOS19DCTIKQEAgLTY0LDMyICs0Myw4OSBAQAogLyogQWxsIG9mZnNldHMgYmVsb3cgYXJlIHNwZWNpZmllZCB3aXRoIHRoaXMgYWRkcmVzcyBidXMgc2hpZnQgKi8KICNkZWZpbmUgQVNJQzNfREVGQVVMVF9BRERSX1NISUZUIDIKIAotI2RlZmluZSBBU0lDM19PRkZTRVQoYmFzZSwgcmVnKSAoQVNJQzNfIyNiYXNlIyNfQmFzZSArIEFTSUMzXyMjYmFzZSMjXyMjcmVnKQorI2RlZmluZSBBU0lDM19PRkZTRVQoYmFzZSwgcmVnKSAoQVNJQzNfIyNiYXNlIyNfQkFTRSArIEFTSUMzXyMjYmFzZSMjXyMjcmVnKQogI2RlZmluZSBBU0lDM19HUElPX09GRlNFVChiYXNlLCByZWcpIFwKLQkoQVNJQzNfR1BJT18jI2Jhc2UjI19CYXNlICsgQVNJQzNfR1BJT18jI3JlZykKKwkoQVNJQzNfR1BJT18jI2Jhc2UjI19CQVNFICsgQVNJQzNfR1BJT18jI3JlZykKIAotI2RlZmluZSBBU0lDM19HUElPX0FfQmFzZSAgICAgIDB4MDAwMAotI2RlZmluZSBBU0lDM19HUElPX0JfQmFzZSAgICAgIDB4MDEwMAotI2RlZmluZSBBU0lDM19HUElPX0NfQmFzZSAgICAgIDB4MDIwMAotI2RlZmluZSBBU0lDM19HUElPX0RfQmFzZSAgICAgIDB4MDMwMAorI2RlZmluZSBBU0lDM19HUElPX0FfQkFTRSAgICAgIDB4MDAwMAorI2RlZmluZSBBU0lDM19HUElPX0JfQkFTRSAgICAgIDB4MDEwMAorI2RlZmluZSBBU0lDM19HUElPX0NfQkFTRSAgICAgIDB4MDIwMAorI2RlZmluZSBBU0lDM19HUElPX0RfQkFTRSAgICAgIDB4MDMwMAogCi0jZGVmaW5lIEFTSUMzX0dQSU9fTWFzayAgICAgICAgICAweDAwICAgIC8qIFIvVyAwOmRvbid0IG1hc2sgKi8KLSNkZWZpbmUgQVNJQzNfR1BJT19EaXJlY3Rpb24gICAgIDB4MDQgICAgLyogUi9XIDA6aW5wdXQgKi8KLSNkZWZpbmUgQVNJQzNfR1BJT19PdXQgICAgICAgICAgIDB4MDggICAgLyogUi9XIDA6b3V0cHV0IGxvdyAqLwotI2RlZmluZSBBU0lDM19HUElPX1RyaWdnZXJUeXBlICAgMHgwYyAgICAvKiBSL1cgMDpsZXZlbCAqLwotI2RlZmluZSBBU0lDM19HUElPX0VkZ2VUcmlnZ2VyICAgMHgxMCAgICAvKiBSL1cgMDpmYWxsaW5nICovCi0jZGVmaW5lIEFTSUMzX0dQSU9fTGV2ZWxUcmlnZ2VyICAweDE0ICAgIC8qIFIvVyAwOmxvdyBsZXZlbCBkZXRlY3QgKi8KLSNkZWZpbmUgQVNJQzNfR1BJT19TbGVlcE1hc2sgICAgIDB4MTggICAgLyogUi9XIDA6ZG9uJ3QgbWFzayBpbiBzbGVlcCBtb2RlICovCi0jZGVmaW5lIEFTSUMzX0dQSU9fU2xlZXBPdXQgICAgICAweDFjICAgIC8qIFIvVyBsZXZlbCAwOmxvdyBpbiBzbGVlcCBtb2RlICovCi0jZGVmaW5lIEFTSUMzX0dQSU9fQmF0dEZhdWx0T3V0ICAweDIwICAgIC8qIFIvVyBsZXZlbCAwOmxvdyBpbiBiYXR0X2ZhdWx0ICovCi0jZGVmaW5lIEFTSUMzX0dQSU9fSW50U3RhdHVzICAgICAweDI0ICAgIC8qIFIvVyAwOm5vbmUsIDE6ZGV0ZWN0ICovCi0jZGVmaW5lIEFTSUMzX0dQSU9fQWx0RnVuY3Rpb24gICAweDI4CSAvKiBSL1cgMTpMRUQgcmVnaXN0ZXIgY29udHJvbCAqLwotI2RlZmluZSBBU0lDM19HUElPX1NsZWVwQ29uZiAgICAgMHgyYyAgICAvKgorI2RlZmluZSBBU0lDM19HUElPX1RPX0JBTksoZ3BpbykgKChncGlvKSA+PiA0KQorI2RlZmluZSBBU0lDM19HUElPX1RPX0JJVChncGlvKSAgKChncGlvKSAtIFwKKwkJCQkgIChBU0lDM19HUElPU19QRVJfQkFOSyAqICgoZ3BpbykgPj4gNCkpKQorI2RlZmluZSBBU0lDM19HUElPX1RPX01BU0soZ3BpbykgKDEgPDwgQVNJQzNfR1BJT19UT19CSVQoZ3BpbykpCisjZGVmaW5lIEFTSUMzX0dQSU9fVE9fQkFTRShncGlvKSAoQVNJQzNfR1BJT19BX0JBU0UgKyAoKChncGlvKSA+PiA0KSAqIDB4MDEwMCkpCisjZGVmaW5lIEFTSUMzX0JBTktfVE9fQkFTRShiYW5rKSAoQVNJQzNfR1BJT19BX0JBU0UgKyAoKGJhbmspICogMHgxMDApKQorCisjZGVmaW5lIEFTSUMzX0dQSU9fTUFTSyAgICAgICAgICAweDAwICAgIC8qIFIvVyAwOmRvbid0IG1hc2sgKi8KKyNkZWZpbmUgQVNJQzNfR1BJT19ESVJFQ1RJT04gICAgIDB4MDQgICAgLyogUi9XIDA6aW5wdXQgKi8KKyNkZWZpbmUgQVNJQzNfR1BJT19PVVQgICAgICAgICAgIDB4MDggICAgLyogUi9XIDA6b3V0cHV0IGxvdyAqLworI2RlZmluZSBBU0lDM19HUElPX1RSSUdHRVJfVFlQRSAgMHgwYyAgICAvKiBSL1cgMDpsZXZlbCAqLworI2RlZmluZSBBU0lDM19HUElPX0VER0VfVFJJR0dFUiAgMHgxMCAgICAvKiBSL1cgMDpmYWxsaW5nICovCisjZGVmaW5lIEFTSUMzX0dQSU9fTEVWRUxfVFJJR0dFUiAweDE0ICAgIC8qIFIvVyAwOmxvdyBsZXZlbCBkZXRlY3QgKi8KKyNkZWZpbmUgQVNJQzNfR1BJT19TTEVFUF9NQVNLICAgIDB4MTggICAgLyogUi9XIDA6ZG9uJ3QgbWFzayBpbiBzbGVlcCBtb2RlICovCisjZGVmaW5lIEFTSUMzX0dQSU9fU0xFRVBfT1VUICAgICAweDFjICAgIC8qIFIvVyBsZXZlbCAwOmxvdyBpbiBzbGVlcCBtb2RlICovCisjZGVmaW5lIEFTSUMzX0dQSU9fQkFUX0ZBVUxUX09VVCAweDIwICAgIC8qIFIvVyBsZXZlbCAwOmxvdyBpbiBiYXR0X2ZhdWx0ICovCisjZGVmaW5lIEFTSUMzX0dQSU9fSU5UX1NUQVRVUyAgICAweDI0ICAgIC8qIFIvVyAwOm5vbmUsIDE6ZGV0ZWN0ICovCisjZGVmaW5lIEFTSUMzX0dQSU9fQUxUX0ZVTkNUSU9OICAweDI4CSAvKiBSL1cgMTpMRUQgcmVnaXN0ZXIgY29udHJvbCAqLworI2RlZmluZSBBU0lDM19HUElPX1NMRUVQX0NPTkYgICAgMHgyYyAgICAvKgogCQkJCQkgICogUi9XIGJpdCAxOiBhdXRvc2xlZXAKIAkJCQkJICAqIDA6IGRpc2FibGUgZ3Bvc2xwb3V0IGluIG5vcm1hbCBtb2RlLAogCQkJCQkgICogZW5hYmxlIGdwb3NscG91dCBpbiBzbGVlcCBtb2RlLgogCQkJCQkgICovCi0jZGVmaW5lIEFTSUMzX0dQSU9fU3RhdHVzICAgICAgICAweDMwICAgIC8qIFIgICBQaW4gc3RhdHVzICovCisjZGVmaW5lIEFTSUMzX0dQSU9fU1RBVFVTICAgICAgICAweDMwICAgIC8qIFIgICBQaW4gc3RhdHVzICovCisKKy8qCisgKiBBU0lDMyBHUElPIGNvbmZpZworICoKKyAqIEJpdHMgMC4uNiAgIGdwaW8gbnVtYmVyCisgKiBCaXRzIDcuLjEzICBBbHRlcm5hdGUgZnVuY3Rpb24KKyAqIEJpdCAgMTQgICAgIERpcmVjdGlvbgorICogQml0ICAxNSAgICAgSW5pdGlhbCB2YWx1ZQorICoKKyAqLworI2RlZmluZSBBU0lDM19DT05GSUdfR1BJT19QSU4oY29uZmlnKSAoKGNvbmZpZykgJiAweDdmKQorI2RlZmluZSBBU0lDM19DT05GSUdfR1BJT19BTFQoY29uZmlnKSAgKCgoY29uZmlnKSAmICgweDdmIDw8IDcpKSA+PiA3KQorI2RlZmluZSBBU0lDM19DT05GSUdfR1BJT19ESVIoY29uZmlnKSAgKChjb25maWcgJiAoMSA8PCAxNCkpID4+IDE0KQorI2RlZmluZSBBU0lDM19DT05GSUdfR1BJT19JTklUKGNvbmZpZykgKChjb25maWcgJiAoMSA8PCAxNSkpID4+IDE1KQorI2RlZmluZSBBU0lDM19DT05GSUdfR1BJTyhncGlvLCBhbHQsIGRpciwgaW5pdCkgKCgoZ3BpbykgJiAweDdmKSBcCisJfCAoKChhbHQpICYgMHg3ZikgPDwgNykgfCAoKChkaXIpICYgMHgxKSA8PCAxNCkgXAorCXwgKCgoaW5pdCkgJiAweDEpIDw8IDE1KSkKKyNkZWZpbmUgQVNJQzNfQ09ORklHX0dQSU9fREVGQVVMVChncGlvLCBkaXIsIGluaXQpIFwKKwlBU0lDM19DT05GSUdfR1BJTygoZ3BpbyksIDAsIChkaXIpLCAoaW5pdCkpCisjZGVmaW5lIEFTSUMzX0NPTkZJR19HUElPX0RFRkFVTFRfT1VUKGdwaW8sIGluaXQpIFwKKwlBU0lDM19DT05GSUdfR1BJTygoZ3BpbyksIDAsIDEsIChpbml0KSkKKworLyoKKyAqIEFsdGVybmF0ZSBmdW5jdGlvbnMKKyAqLworI2RlZmluZSBBU0lDM19HUElPQTExX1BXTTAJCUFTSUMzX0NPTkZJR19HUElPKDExLCAxLCAxLCAwKQorI2RlZmluZSBBU0lDM19HUElPQTEyX1BXTTEJCUFTSUMzX0NPTkZJR19HUElPKDEyLCAxLCAxLCAwKQorI2RlZmluZSBBU0lDM19HUElPQTE1X0NPTlRST0xfQ1gJQVNJQzNfQ09ORklHX0dQSU8oMTUsIDEsIDEsIDApCisjZGVmaW5lIEFTSUMzX0dQSU9DMF9MRUQwCQlBU0lDM19DT05GSUdfR1BJTygzMiwgMSwgMSwgMCkKKyNkZWZpbmUgQVNJQzNfR1BJT0MxX0xFRDEJCUFTSUMzX0NPTkZJR19HUElPKDMzLCAxLCAxLCAwKQorI2RlZmluZSBBU0lDM19HUElPQzJfTEVEMgkJQVNJQzNfQ09ORklHX0dQSU8oMzQsIDEsIDEsIDApCisjZGVmaW5lIEFTSUMzX0dQSU9DM19TUElfUlhECQlBU0lDM19DT05GSUdfR1BJTygzNSwgMSwgMCwgMCkKKyNkZWZpbmUgQVNJQzNfR1BJT0M0X0NGX25DRAkJQVNJQzNfQ09ORklHX0dQSU8oMzYsIDEsIDAsIDApCisjZGVmaW5lIEFTSUMzX0dQSU9DNF9TUElfVFhECQlBU0lDM19DT05GSUdfR1BJTygzNiwgMSwgMSwgMCkKKyNkZWZpbmUgQVNJQzNfR1BJT0M1X1NQSV9DTEsJCUFTSUMzX0NPTkZJR19HUElPKDM3LCAxLCAxLCAwKQorI2RlZmluZSBBU0lDM19HUElPQzVfbkNJT1cJCUFTSUMzX0NPTkZJR19HUElPKDM3LCAxLCAxLCAwKQorI2RlZmluZSBBU0lDM19HUElPQzZfbkNJT1IJCUFTSUMzX0NPTkZJR19HUElPKDM4LCAxLCAxLCAwKQorI2RlZmluZSBBU0lDM19HUElPQzdfblBDRV8xCQlBU0lDM19DT05GSUdfR1BJTygzOSwgMSwgMCwgMCkKKyNkZWZpbmUgQVNJQzNfR1BJT0M4X25QQ0VfMgkJQVNJQzNfQ09ORklHX0dQSU8oNDAsIDEsIDAsIDApCisjZGVmaW5lIEFTSUMzX0dQSU9DOV9uUE9FCQlBU0lDM19DT05GSUdfR1BJTyg0MSwgMSwgMCwgMCkKKyNkZWZpbmUgQVNJQzNfR1BJT0MxMF9uUFdFCQlBU0lDM19DT05GSUdfR1BJTyg0MiwgMSwgMCwgMCkKKyNkZWZpbmUgQVNJQzNfR1BJT0MxMV9QU0tUU0VMCQlBU0lDM19DT05GSUdfR1BJTyg0MywgMSwgMCwgMCkKKyNkZWZpbmUgQVNJQzNfR1BJT0MxMl9uUFJFRwkJQVNJQzNfQ09ORklHX0dQSU8oNDQsIDEsIDAsIDApCisjZGVmaW5lIEFTSUMzX0dQSU9DMTNfblBXQUlUCQlBU0lDM19DT05GSUdfR1BJTyg0NSwgMSwgMSwgMCkKKyNkZWZpbmUgQVNJQzNfR1BJT0MxNF9uUElPSVMxNgkJQVNJQzNfQ09ORklHX0dQSU8oNDYsIDEsIDEsIDApCisjZGVmaW5lIEFTSUMzX0dQSU9DMTVfblBJT1IJCUFTSUMzX0NPTkZJR19HUElPKDQ3LCAxLCAwLCAwKQorI2RlZmluZSBBU0lDM19HUElPRDExX25DSU9JUzE2CQlBU0lDM19DT05GSUdfR1BJTyg1OSwgMSwgMCwgMCkKKyNkZWZpbmUgQVNJQzNfR1BJT0QxMl9uQ1dBSVQJCUFTSUMzX0NPTkZJR19HUElPKDYwLCAxLCAwLCAwKQorI2RlZmluZSBBU0lDM19HUElPRDE1X25QSU9XCQlBU0lDM19DT05GSUdfR1BJTyg2MywgMSwgMCwgMCkKKwogCiAjZGVmaW5lIEFTSUMzX1NQSV9CYXNlCQkgICAgICAweDA0MDAKICNkZWZpbmUgQVNJQzNfU1BJX0NvbnRyb2wgICAgICAgICAgICAgICAweDAwMDAKQEAgLTEyOCw3ICsxNjQsNyBAQAogI2RlZmluZSBMRURfQVVUT1NUT1AJKDEgPDwgNSkgLyogTEVEIE9OL09GRiBhdXRvIHN0b3AgMDpkaXNhYmxlLCAxOmVuYWJsZSAqLwogI2RlZmluZSBMRURfQUxXQVlTCSgxIDw8IDYpIC8qIExFRCBJbnRlcnJ1cHQgTWFzayAwOk5vIG1hc2ssIDE6bWFzayAqLwogCi0jZGVmaW5lIEFTSUMzX0NMT0NLX0Jhc2UJCTB4MEEwMAorI2RlZmluZSBBU0lDM19DTE9DS19CQVNFCSAgIDB4MEEwMAogI2RlZmluZSBBU0lDM19DTE9DS19DREVYICAgICAgICAgICAweDAwCiAjZGVmaW5lIEFTSUMzX0NMT0NLX1NFTCAgICAgICAgICAgIDB4MDQKIApAQCAtMTU5LDEyICsxOTUsMTIgQEAKICNkZWZpbmUgQ0xPQ0tfU0VMX0NYICAgICAgICAgICAgKDEgPDwgMikKIAogCi0jZGVmaW5lIEFTSUMzX0lOVFJfQmFzZQkJMHgwQjAwCisjZGVmaW5lIEFTSUMzX0lOVFJfQkFTRQkJMHgwQjAwCiAKLSNkZWZpbmUgQVNJQzNfSU5UUl9JbnRNYXNrICAgICAgIDB4MDAgIC8qIEludGVycnVwdCBtYXNrIGNvbnRyb2wgKi8KLSNkZWZpbmUgQVNJQzNfSU5UUl9QSW50U3RhdCAgICAgIDB4MDQgIC8qIFBlcmlwaGVyYWwgaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSBBU0lDM19JTlRSX0ludENQUyAgICAgICAgMHgwOCAgLyogSW50ZXJydXB0IHRpbWVyIGNsb2NrIHByZS1zY2FsZSAqLwotI2RlZmluZSBBU0lDM19JTlRSX0ludFRCUyAgICAgICAgMHgwYyAgLyogSW50ZXJydXB0IHRpbWVyIHNldCAqLworI2RlZmluZSBBU0lDM19JTlRSX0lOVF9NQVNLICAgICAgIDB4MDAgIC8qIEludGVycnVwdCBtYXNrIGNvbnRyb2wgKi8KKyNkZWZpbmUgQVNJQzNfSU5UUl9QX0lOVF9TVEFUICAgICAweDA0ICAvKiBQZXJpcGhlcmFsIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgQVNJQzNfSU5UUl9JTlRfQ1BTICAgICAgICAweDA4ICAvKiBJbnRlcnJ1cHQgdGltZXIgY2xvY2sgcHJlLXNjYWxlICovCisjZGVmaW5lIEFTSUMzX0lOVFJfSU5UX1RCUyAgICAgICAgMHgwYyAgLyogSW50ZXJydXB0IHRpbWVyIHNldCAqLwogCiAjZGVmaW5lIEFTSUMzX0lOVE1BU0tfR0lOVE1BU0sgICAgKDEgPDwgMCkgIC8qIEdsb2JhbCBJTlRzIG1hc2sgMTplbmFibGUgKi8KICNkZWZpbmUgQVNJQzNfSU5UTUFTS19HSU5URUwgICAgICAoMSA8PCAxKSAgLyogMTogcmlzaW5nIGVkZ2UsIDA6IGhpIGxldmVsICovCkBAIC0yMjcsNDQgKzI2MywxMiBAQAogI2RlZmluZSBBU0lDM19FWFRDRl9DRl9TTEVFUCAgICAgICAgICAgICAoMSA8PCAxNSkgLyogQ0Ygc2xlZXAgbW9kZSBjb250cm9sICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBUaGUgT25ld2lyZSBpbnRlcmZhY2UgcmVnaXN0ZXJzCi0gKgotICogIE9XTV9DTUQKLSAqICBPV01fREFUCi0gKiAgT1dNX0lOVFIKLSAqICBPV01fSU5URU4KLSAqICBPV01fQ0xLRElWCisgKiAgVGhlIE9uZXdpcmUgaW50ZXJmYWNlIChEUzFXTSkgaXMgaGFuZGxlZAorICogIGJ5IHRoZSBkczF3bSBkcml2ZXIuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBBU0lDM19PV01fQmFzZQkJMHhDMDAKLQotI2RlZmluZSBBU0lDM19PV01fQ01EICAgICAgICAgMHgwMAotI2RlZmluZSBBU0lDM19PV01fREFUICAgICAgICAgMHgwNAotI2RlZmluZSBBU0lDM19PV01fSU5UUiAgICAgICAgMHgwOAotI2RlZmluZSBBU0lDM19PV01fSU5URU4gICAgICAgMHgwQwotI2RlZmluZSBBU0lDM19PV01fQ0xLRElWICAgICAgMHgxMAotCi0jZGVmaW5lIEFTSUMzX09XTV9DTURfT05FV1IgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBBU0lDM19PV01fQ01EX1NSQSAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgQVNJQzNfT1dNX0NNRF9EUU8gICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIEFTSUMzX09XTV9DTURfRFFJICAgICAgICAgICAoMSA8PCAzKQotCi0jZGVmaW5lIEFTSUMzX09XTV9JTlRSX1BEICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIEFTSUMzX09XTV9JTlRSX1BEUiAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIEFTSUMzX09XTV9JTlRSX1RCRSAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIEFTSUMzX09XTV9JTlRSX1RFTVAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIEFTSUMzX09XTV9JTlRSX1JCRiAgICAgICAgICgxIDw8IDQpCi0KLSNkZWZpbmUgQVNJQzNfT1dNX0lOVEVOX0VQRCAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgQVNJQzNfT1dNX0lOVEVOX0lBUyAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgQVNJQzNfT1dNX0lOVEVOX0VUQkUgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgQVNJQzNfT1dNX0lOVEVOX0VUTVQgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgQVNJQzNfT1dNX0lOVEVOX0VSQkYgICAgICAgKDEgPDwgNCkKLQotI2RlZmluZSBBU0lDM19PV01fQ0xLRElWX1BSRSAgICAgICAoMyA8PCAwKSAvKiB0d28gYml0cyB3aWRlIGF0IGJpdCAwICovCi0jZGVmaW5lIEFTSUMzX09XTV9DTEtESVZfRElWICAgICAgICg3IDw8IDIpIC8qIDMgYml0cyB3aWRlIGF0IGJpdCAyICovCi0KKyNkZWZpbmUgQVNJQzNfT1dNX0JBU0UJCTB4QzAwCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogIFRoZSBTRCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBhcmUgYXQgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBsb2NhdGlvbgpAQCAtNDkyLDYgKzQ5Niw3IEBACiAjZGVmaW5lIEFTSUMzX1NESU9fQ1RSTF9MRURDdHJsICAgICAgICAgICAgICAweDdDCiAjZGVmaW5lIEFTSUMzX1NESU9fQ1RSTF9Tb2Z0d2FyZVJlc2V0ICAgICAgICAweDFDMAogCi0jZGVmaW5lIEFTSUMzX01BUF9TSVpFCSAgICAgCQkgICAgIDB4MjAwMAorI2RlZmluZSBBU0lDM19NQVBfU0laRV8zMkJJVAkweDIwMDAKKyNkZWZpbmUgQVNJQzNfTUFQX1NJWkVfMTZCSVQJMHgxMDAwCiAKICNlbmRpZiAvKiBfX0FTSUMzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiM2RkMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oCkBAIC0wLDAgKzEsNTUgQEAKKyNpZm5kZWYgTUZEX0NPUkVfSAorI2RlZmluZSBNRkRfQ09SRV9ICisvKgorICogZHJpdmVycy9tZmQvbWZkLWNvcmUuaAorICoKKyAqIGNvcmUgTUZEIHN1cHBvcnQKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJYW4gTW9sdG9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRG1pdHJ5IEJhcnlzaGtvdgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworLyoKKyAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyB0aGUgTUZEIHBhcnQgKCJjZWxsIikuCisgKiBBZnRlciByZWdpc3RyYXRpb24gdGhlIGNvcHkgb2YgdGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZWNvbWUgdGhlIHBsYXRmb3JtIGRhdGEKKyAqIG9mIHRoZSByZXN1bHRpbmcgcGxhdGZvcm1fZGV2aWNlCisgKi8KK3N0cnVjdCBtZmRfY2VsbCB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisKKwlpbnQJCQkoKmVuYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKKwlpbnQJCQkoKmRpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CisJaW50CQkJKCpzdXNwZW5kKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworCWludAkJCSgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworCisJdm9pZAkJCSpkcml2ZXJfZGF0YTsgLyogZHJpdmVyLXNwZWNpZmljIGRhdGEgKi8KKworCS8qCisJICogVGhpcyByZXNvdXJjZXMgY2FuIGJlIHNwZWNpZmllZCByZWxhdGlldmx5IHRvIHRoZSBwYXJlbnQgZGV2aWNlLgorCSAqIEZvciBhY2Nlc3NpbmcgZGV2aWNlIHlvdSBzaG91bGQgdXNlIHJlc291cmNlcyBmcm9tIGRldmljZQorCSAqLworCWludAkJCW51bV9yZXNvdXJjZXM7CisJY29uc3Qgc3RydWN0IHJlc291cmNlCSpyZXNvdXJjZXM7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZmRfY2VsbCAqCittZmRfZ2V0X2NlbGwoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gKHN0cnVjdCBtZmRfY2VsbCAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworfQorCitleHRlcm4gaW50IG1mZF9hZGRfZGV2aWNlcygKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFyZW50LAorCQljb25zdCBzdHJ1Y3QgbWZkX2NlbGwgKmNlbGxzLCBpbnQgbl9kZXZzLAorCQlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9iYXNlLAorCQlpbnQgaXJxX2Jhc2UpOworCitleHRlcm4gdm9pZCBtZmRfcmVtb3ZlX2RldmljZXMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFyZW50KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90YzYzOTN4Yi5oIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2MzkzeGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2M4MjRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2MzkzeGIuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogVG9zaGliYSBUQzYzOTNYQiBTb0Mgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodChjKSAyMDA1LTIwMDYgQ2hyaXMgSHVtYmVydAorICogQ29weXJpZ2h0KGMpIDIwMDUgRGlyayBPcGZlcgorICogQ29weXJpZ2h0KGMpIDIwMDUgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KKyAqIENvcHlyaWdodChjKSAyMDA3IERtaXRyeSBCYXJ5c2hrb3YKKyAqCisgKiBCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkgU2hhcnAvTGluZW8gZm9yIDIuNCBrZXJuZWxzCisgKiBCYXNlZCBvbiBsb2NvbW8uYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBUQzYzOTNYQl9ICisjZGVmaW5lIFRDNjM5M1hCX0gKKworLyogQWxzbyBvbmUgc2hvdWxkIHByb3ZpZGUgdGhlIENLM1A2TUkgY2xvY2sgKi8KK3N0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhIHsKKwl1MTYJc2NyX3BsbDJjcjsJLyogUExMMiBDb250cm9sICovCisJdTE2CXNjcl9ncGVyOwkvKiBHUCBFbmFibGUgKi8KKwl1MzIJc2NyX2dwb19kb2VjcjsJLyogR1BPIERhdGEgT0UgQ29udHJvbCAqLworCXUzMglzY3JfZ3BvX2RzcjsJLyogR1BPIERhdGEgU2V0ICovCisKKwlpbnQJKCplbmFibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CisJaW50CSgqZGlzYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKKwlpbnQJKCpzdXNwZW5kKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworCWludAkoKnJlc3VtZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKKworCWludAlpcnFfYmFzZTsJLyogYSBiYXNlIGZvciBjYXNjYWRlZCBpcnEgKi8KKwlpbnQJZ3Bpb19iYXNlOworCisJc3RydWN0IHRtaW9fbmFuZF9kYXRhCSpuYW5kX2RhdGE7Cit9OworCisvKgorICogUmVsYXRpdmUgdG8gaXJxX2Jhc2UKKyAqLworI2RlZmluZQlJUlFfVEM2MzkzX05BTkQJCTAKKyNkZWZpbmUJSVJRX1RDNjM5M19NTUMJCTEKKyNkZWZpbmUJSVJRX1RDNjM5M19PSENJCQkyCisjZGVmaW5lCUlSUV9UQzYzOTNfU0VSSUFMCTMKKyNkZWZpbmUJSVJRX1RDNjM5M19GQgkJNAorCisjZGVmaW5lCVRDNjM5M1hCX05SX0lSUVMJOAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDM4ZDhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdG1pby5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgTUZEX1RNSU9fSAorI2RlZmluZSBNRkRfVE1JT19ICisKKy8qCisgKiBkYXRhIGZvciB0aGUgTkFORCBjb250cm9sbGVyCisgKi8KK3N0cnVjdCB0bWlvX25hbmRfZGF0YSB7CisJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyCSpiYWRibG9ja19wYXR0ZXJuOworCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0aXRpb247CisJdW5zaWduZWQgaW50CQludW1fcGFydGl0aW9uczsKK307CisKKyNkZWZpbmUgVE1JT19OQU5EX0NPTkZJRwkidG1pby1uYW5kLWNvbmZpZyIKKyNkZWZpbmUgVE1JT19OQU5EX0NPTlRST0wJInRtaW8tbmFuZC1jb250cm9sIgorI2RlZmluZSBUTUlPX05BTkRfSVJRCQkidG1pby1uYW5kIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IDNlMDNiMWEuLmZjZTE1ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtMjQ5LDI3ICsyNDksMzAgQEAKIAogCS8qIEV4cG9ydGVkIHN5bWJvbHMgKi8KIAljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3ltczsKLQl1bnNpZ25lZCBpbnQgbnVtX3N5bXM7CiAJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjczsKKwl1bnNpZ25lZCBpbnQgbnVtX3N5bXM7CiAKIAkvKiBHUEwtb25seSBleHBvcnRlZCBzeW1ib2xzLiAqLwotCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpncGxfc3ltczsKIAl1bnNpZ25lZCBpbnQgbnVtX2dwbF9zeW1zOworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpncGxfc3ltczsKIAljb25zdCB1bnNpZ25lZCBsb25nICpncGxfY3JjczsKIAorI2lmZGVmIENPTkZJR19VTlVTRURfU1lNQk9MUwogCS8qIHVudXNlZCBleHBvcnRlZCBzeW1ib2xzLiAqLwogCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICp1bnVzZWRfc3ltczsKLQl1bnNpZ25lZCBpbnQgbnVtX3VudXNlZF9zeW1zOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnVudXNlZF9jcmNzOworCXVuc2lnbmVkIGludCBudW1fdW51c2VkX3N5bXM7CisKIAkvKiBHUEwtb25seSwgdW51c2VkIGV4cG9ydGVkIHN5bWJvbHMuICovCi0JY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnVudXNlZF9ncGxfc3ltczsKIAl1bnNpZ25lZCBpbnQgbnVtX3VudXNlZF9ncGxfc3ltczsKKwljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqdW51c2VkX2dwbF9zeW1zOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnVudXNlZF9ncGxfY3JjczsKKyNlbmRpZgogCiAJLyogc3ltYm9scyB0aGF0IHdpbGwgYmUgR1BMLW9ubHkgaW4gdGhlIG5lYXIgZnV0dXJlLiAqLwogCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpncGxfZnV0dXJlX3N5bXM7Ci0JdW5zaWduZWQgaW50IG51bV9ncGxfZnV0dXJlX3N5bXM7CiAJY29uc3QgdW5zaWduZWQgbG9uZyAqZ3BsX2Z1dHVyZV9jcmNzOworCXVuc2lnbmVkIGludCBudW1fZ3BsX2Z1dHVyZV9zeW1zOwogCiAJLyogRXhjZXB0aW9uIHRhYmxlICovCiAJdW5zaWduZWQgaW50IG51bV9leGVudHJpZXM7CkBAIC0yODUsMTAgKzI4OCwxMCBAQAogCXZvaWQgKm1vZHVsZV9jb3JlOwogCiAJLyogSGVyZSBhcmUgdGhlIHNpemVzIG9mIHRoZSBpbml0IGFuZCBjb3JlIHNlY3Rpb25zICovCi0JdW5zaWduZWQgbG9uZyBpbml0X3NpemUsIGNvcmVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaW5pdF9zaXplLCBjb3JlX3NpemU7CiAKIAkvKiBUaGUgc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZSBjb2RlIGluIGVhY2ggc2VjdGlvbi4gICovCi0JdW5zaWduZWQgbG9uZyBpbml0X3RleHRfc2l6ZSwgY29yZV90ZXh0X3NpemU7CisJdW5zaWduZWQgaW50IGluaXRfdGV4dF9zaXplLCBjb3JlX3RleHRfc2l6ZTsKIAogCS8qIFRoZSBoYW5kbGUgcmV0dXJuZWQgZnJvbSB1bndpbmRfYWRkX3RhYmxlLiAqLwogCXZvaWQgKnVud2luZF9pbmZvOwpAQCAtMzAwLDI5ICszMDMsMTUgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0JVRwogCS8qIFN1cHBvcnQgZm9yIEJVRyAqLworCXVuc2lnbmVkIG51bV9idWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgYnVnX2xpc3Q7CiAJc3RydWN0IGJ1Z19lbnRyeSAqYnVnX3RhYmxlOwotCXVuc2lnbmVkIG51bV9idWdzOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAotCS8qIFJlZmVyZW5jZSBjb3VudHMgKi8KLQlzdHJ1Y3QgbW9kdWxlX3JlZiByZWZbTlJfQ1BVU107Ci0KLQkvKiBXaGF0IG1vZHVsZXMgZGVwZW5kIG9uIG1lPyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbW9kdWxlc193aGljaF91c2VfbWU7Ci0KLQkvKiBXaG8gaXMgd2FpdGluZyBmb3IgdXMgdG8gYmUgdW5sb2FkZWQgKi8KLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKndhaXRlcjsKLQotCS8qIERlc3RydWN0aW9uIGZ1bmN0aW9uLiAqLwotCXZvaWQgKCpleGl0KSh2b2lkKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tBTExTWU1TCiAJLyogV2Uga2VlcCB0aGUgc3ltYm9sIGFuZCBzdHJpbmcgdGFibGVzIGZvciBrYWxsc3ltcy4gKi8KIAlFbGZfU3ltICpzeW10YWI7Ci0JdW5zaWduZWQgbG9uZyBudW1fc3ltdGFiOworCXVuc2lnbmVkIGludCBudW1fc3ltdGFiOwogCWNoYXIgKnN0cnRhYjsKIAogCS8qIFNlY3Rpb24gYXR0cmlidXRlcyAqLwpAQCAtMzQyLDYgKzMzMSwyMSBAQAogCXN0cnVjdCBtYXJrZXIgKm1hcmtlcnM7CiAJdW5zaWduZWQgaW50IG51bV9tYXJrZXJzOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAorCS8qIFdoYXQgbW9kdWxlcyBkZXBlbmQgb24gbWU/ICovCisJc3RydWN0IGxpc3RfaGVhZCBtb2R1bGVzX3doaWNoX3VzZV9tZTsKKworCS8qIFdobyBpcyB3YWl0aW5nIGZvciB1cyB0byBiZSB1bmxvYWRlZCAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqd2FpdGVyOworCisJLyogRGVzdHJ1Y3Rpb24gZnVuY3Rpb24uICovCisJdm9pZCAoKmV4aXQpKHZvaWQpOworCisJLyogUmVmZXJlbmNlIGNvdW50cyAqLworCXN0cnVjdCBtb2R1bGVfcmVmIHJlZltOUl9DUFVTXTsKKyNlbmRpZgorCiB9OwogI2lmbmRlZiBNT0RVTEVfQVJDSF9JTklUCiAjZGVmaW5lIE1PRFVMRV9BUkNIX0lOSVQge30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCmluZGV4IGRlNGRlY2YuLjA3MTEyZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaApAQCAtMTQ0LDExICsxNDQsMzcgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0lQX01ST1VURQogZXh0ZXJuIGludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqLCBpbnQsIGNoYXIgX191c2VyICosIGludCk7CiBleHRlcm4gaW50IGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKIGV4dGVybiBpbnQgaXBtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwotZXh0ZXJuIHZvaWQgaXBfbXJfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgaXBfbXJfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lCitpbnQgaXBfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNvY2ssCisJCQkgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJcmV0dXJuIC1FTk9QUk9UT09QVDsKK30KIAorc3RhdGljIGlubGluZQoraW50IGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzb2NrLAorCQkJIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJcmV0dXJuIC1FTk9QUk9UT09QVDsKK30KKworc3RhdGljIGlubGluZQoraW50IGlwbXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlwX21yX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiBzdHJ1Y3QgdmlmX2RldmljZQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAppbmRleCBlNzk4OTU5Li41Y2Y1MDQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaApAQCAtMTMxLDExICsxMzEsNDQgQEAKIAogc3RydWN0IHNvY2s7CiAKKyNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEUKIGV4dGVybiBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50KTsKIGV4dGVybiBpbnQgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKIGV4dGVybiBpbnQgaXA2X21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwotZXh0ZXJuIHZvaWQgaXA2X21yX2luaXQodm9pZCk7CitleHRlcm4gaW50IGlwNl9tcl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgaXA2X21yX2NsZWFudXAodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZQoraW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywKKwkJCSAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJcmV0dXJuIC1FTk9QUk9UT09QVDsKK30KKworc3RhdGljIGlubGluZQoraW50IGlwNl9tcm91dGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywKKwkJCSAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlyZXR1cm4gLUVOT1BST1RPT1BUOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlwNl9tcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcDZfbXJfY2xlYW51cCh2b2lkKQoreworCXJldHVybjsKK30KKyNlbmRpZgogCiBzdHJ1Y3QgbWlmX2RldmljZQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbWFwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaAppbmRleCBhOWZhZTAzLi45YzFkOTU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaApAQCAtMTg5LDcgKzE4OSw3IEBACiAqLwogCiBzdHJ1Y3QgbWFwX2luZm8gewotCWNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZTsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJcmVzb3VyY2Vfc2l6ZV90IHBoeXM7CiAjZGVmaW5lIE5PX1hJUCAoLTFVTCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKaW5kZXggMjQ1ZjkwOS4uOGI1ZDQ5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKQEAgLTEyMSw3ICsxMjEsNyBAQAogCXVfaW50MzJfdCBvb2JhdmFpbDsgIC8vIEF2YWlsYWJsZSBPT0IgYnl0ZXMgcGVyIGJsb2NrCiAKIAkvLyBLZXJuZWwtb25seSBzdHVmZiBzdGFydHMgaGVyZS4KLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGluZGV4OwogCiAJLyogZWNjIGxheW91dCBzdHJ1Y3R1cmUgcG9pbnRlciAtIHJlYWQgb25seSAhICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L212NjQzeHhfZXRoLmggYi9pbmNsdWRlL2xpbnV4L212NjQzeHhfZXRoLmgKaW5kZXggYTE1Y2RkNC4uMTIwNzg1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdjY0M3h4X2V0aC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXY2NDN4eF9ldGguaApAQCAtMTcsMzAgKzE3LDU5IEBACiAKIHN0cnVjdCBtdjY0M3h4X2V0aF9zaGFyZWRfcGxhdGZvcm1fZGF0YSB7CiAJc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbwkqZHJhbTsKLQl1bnNpZ25lZCBpbnQJdF9jbGs7CisJdW5zaWduZWQgaW50CQl0X2NsazsKIH07CiAKIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHsKKwkvKgorCSAqIFBvaW50ZXIgYmFjayB0byBvdXIgcGFyZW50IGluc3RhbmNlLCBhbmQgb3VyIHBvcnQgbnVtYmVyLgorCSAqLwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnNoYXJlZDsKLQlpbnQJCXBvcnRfbnVtYmVyOworCWludAkJCXBvcnRfbnVtYmVyOwogCisJLyoKKwkgKiBXaGV0aGVyIGEgUEhZIGlzIHByZXNlbnQsIGFuZCBpZiB5ZXMsIGF0IHdoaWNoIGFkZHJlc3MuCisJICovCiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqc2hhcmVkX3NtaTsKKwlpbnQJCQlmb3JjZV9waHlfYWRkcjsKKwlpbnQJCQlwaHlfYWRkcjsKIAotCXUxNgkJZm9yY2VfcGh5X2FkZHI7CS8qIGZvcmNlIG92ZXJyaWRlIGlmIHBoeV9hZGRyID09IDAgKi8KLQl1MTYJCXBoeV9hZGRyOworCS8qCisJICogVXNlIHRoaXMgTUFDIGFkZHJlc3MgaWYgaXQgaXMgdmFsaWQsIG92ZXJyaWRpbmcgdGhlCisJICogYWRkcmVzcyB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIGhhcmR3YXJlLgorCSAqLworCXU4CQkJbWFjX2FkZHJbNl07CiAKLQkvKiBJZiBzcGVlZCBpcyAwLCB0aGVuIHNwZWVkIGFuZCBkdXBsZXggYXJlIGF1dG9uZWdvdGlhdGVkLiAqLwotCWludAkJc3BlZWQ7CQkvKiAwLCBTUEVFRF8xMCwgU1BFRURfMTAwLCBTUEVFRF8xMDAwICovCi0JaW50CQlkdXBsZXg7CQkvKiBEVVBMRVhfSEFMRiBvciBEVVBMRVhfRlVMTCAqLworCS8qCisJICogSWYgc3BlZWQgaXMgMCwgYXV0b25lZ290aWF0aW9uIGlzIGVuYWJsZWQuCisJICogICBWYWxpZCB2YWx1ZXMgZm9yIHNwZWVkOiAwLCBTUEVFRF8xMCwgU1BFRURfMTAwLCBTUEVFRF8xMDAwLgorCSAqICAgVmFsaWQgdmFsdWVzIGZvciBkdXBsZXg6IERVUExFWF9IQUxGLCBEVVBMRVhfRlVMTC4KKwkgKi8KKwlpbnQJCQlzcGVlZDsKKwlpbnQJCQlkdXBsZXg7CiAKLQkvKiBub24temVybyB2YWx1ZXMgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHMgb3ZlcnJpZGUgZGVmYXVsdHMgKi8KLQl1MzIJCXR4X3F1ZXVlX3NpemU7Ci0JdTMyCQlyeF9xdWV1ZV9zaXplOwotCXUzMgkJdHhfc3JhbV9hZGRyOwotCXUzMgkJdHhfc3JhbV9zaXplOwotCXUzMgkJcnhfc3JhbV9hZGRyOwotCXUzMgkJcnhfc3JhbV9zaXplOwotCXU4CQltYWNfYWRkcls2XTsJLyogbWFjIGFkZHJlc3MgaWYgbm9uLXplcm8qLworCS8qCisJICogV2hpY2ggUlgvVFggcXVldWVzIHRvIHVzZS4KKwkgKi8KKwlpbnQJCQlyeF9xdWV1ZV9tYXNrOworCWludAkJCXR4X3F1ZXVlX21hc2s7CisKKwkvKgorCSAqIE92ZXJyaWRlIGRlZmF1bHQgUlgvVFggcXVldWUgc2l6ZXMgaWYgbm9uemVyby4KKwkgKi8KKwlpbnQJCQlyeF9xdWV1ZV9zaXplOworCWludAkJCXR4X3F1ZXVlX3NpemU7CisKKwkvKgorCSAqIFVzZSBvbi1jaGlwIFNSQU0gZm9yIFJYL1RYIGRlc2NyaXB0b3JzIGlmIHNpemUgaXMgbm9uemVybworCSAqIGFuZCBzdWZmaWNpZW50IHRvIGNvbnRhaW4gYWxsIGRlc2NyaXB0b3JzIGZvciB0aGUgcmVxdWVzdGVkCisJICogcmluZyBzaXplcy4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlyeF9zcmFtX2FkZHI7CisJaW50CQkJcnhfc3JhbV9zaXplOworCXVuc2lnbmVkIGxvbmcJCXR4X3NyYW1fYWRkcjsKKwlpbnQJCQl0eF9zcmFtX3NpemU7CiB9OwogCi0jZW5kaWYgLyogX19MSU5VWF9NVjY0M1hYX0VUSF9IICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggNzFmN2RkNS4uMTUwYTQ4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oCkBAIC0xMDYsMjMgKzEwNiwyMyBAQAogLyoqCiAgKiAgc3RydWN0IHNvY2tldCAtIGdlbmVyYWwgQlNEIHNvY2tldAogICogIEBzdGF0ZTogc29ja2V0IHN0YXRlICglU1NfQ09OTkVDVEVELCBldGMpCisgKiAgQHR5cGU6IHNvY2tldCB0eXBlICglU09DS19TVFJFQU0sIGV0YykKICAqICBAZmxhZ3M6IHNvY2tldCBmbGFncyAoJVNPQ0tfQVNZTkNfTk9TUEFDRSwgZXRjKQogICogIEBvcHM6IHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBvcGVyYXRpb25zCiAgKiAgQGZhc3luY19saXN0OiBBc3luY2hyb25vdXMgd2FrZSB1cCBsaXN0CiAgKiAgQGZpbGU6IEZpbGUgYmFjayBwb2ludGVyIGZvciBnYwogICogIEBzazogaW50ZXJuYWwgbmV0d29ya2luZyBwcm90b2NvbCBhZ25vc3RpYyBzb2NrZXQgcmVwcmVzZW50YXRpb24KICAqICBAd2FpdDogd2FpdCBxdWV1ZSBmb3Igc2V2ZXJhbCB1c2VzCi0gKiAgQHR5cGU6IHNvY2tldCB0eXBlICglU09DS19TVFJFQU0sIGV0YykKICAqLwogc3RydWN0IHNvY2tldCB7CiAJc29ja2V0X3N0YXRlCQlzdGF0ZTsKKwlzaG9ydAkJCXR5cGU7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJY29uc3Qgc3RydWN0IHByb3RvX29wcwkqb3BzOwogCXN0cnVjdCBmYXN5bmNfc3RydWN0CSpmYXN5bmNfbGlzdDsKIAlzdHJ1Y3QgZmlsZQkJKmZpbGU7CiAJc3RydWN0IHNvY2sJCSpzazsKIAl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwotCXNob3J0CQkJdHlwZTsKIH07CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDI1Zjg3MTAuLmI0ZDA1NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMTE4LDE0ICsxMTgsNiBAQAogCiAjZW5kaWYgIC8qICBfX0tFUk5FTF9fICAqLwogCi1zdHJ1Y3QgbmV0X2RldmljZV9zdWJxdWV1ZQotewotCS8qIEdpdmUgYSBjb250cm9sIHN0YXRlIGZvciBlYWNoIHF1ZXVlLiAgVGhpcyBzdHJ1Y3QgbWF5IGNvbnRhaW4KLQkgKiBwZXItcXVldWUgbG9ja3MgaW4gdGhlIGZ1dHVyZS4KLQkgKi8KLQl1bnNpZ25lZCBsb25nICAgc3RhdGU7Ci19OwotCiAvKgogICoJTmV0d29yayBkZXZpY2Ugc3RhdGlzdGljcy4gQWtpbiB0byB0aGUgMi4wIGV0aGVyIHN0YXRzIGJ1dAogICoJd2l0aCBieXRlIGNvdW50ZXJzLgpAQCAtMjgxLDE0ICsyNzMsMTEgQEAKIAogZW51bSBuZXRkZXZfc3RhdGVfdAogewotCV9fTElOS19TVEFURV9YT0ZGPTAsCiAJX19MSU5LX1NUQVRFX1NUQVJULAogCV9fTElOS19TVEFURV9QUkVTRU5ULAotCV9fTElOS19TVEFURV9TQ0hFRCwKIAlfX0xJTktfU1RBVEVfTk9DQVJSSUVSLAogCV9fTElOS19TVEFURV9MSU5LV0FUQ0hfUEVORElORywKIAlfX0xJTktfU1RBVEVfRE9STUFOVCwKLQlfX0xJTktfU1RBVEVfUURJU0NfUlVOTklORywKIH07CiAKIApAQCAtNDQ4LDYgKzQzNywyMCBAQAogIyBkZWZpbmUgbmFwaV9zeW5jaHJvbml6ZShuKQliYXJyaWVyKCkKICNlbmRpZgogCitlbnVtIG5ldGRldl9xdWV1ZV9zdGF0ZV90Cit7CisJX19RVUVVRV9TVEFURV9YT0ZGLAorfTsKKworc3RydWN0IG5ldGRldl9xdWV1ZSB7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgUWRpc2MJCSpxZGlzYzsKKwl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKKwlzcGlubG9ja190CQlfeG1pdF9sb2NrOworCWludAkJCXhtaXRfbG9ja19vd25lcjsKKwlzdHJ1Y3QgUWRpc2MJCSpxZGlzY19zbGVlcGluZzsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwogLyoKICAqCVRoZSBERVZJQ0Ugc3RydWN0dXJlLgogICoJQWN0dWFsbHksIHRoaXMgd2hvbGUgc3RydWN0dXJlIGlzIGEgYmlnIG1pc3Rha2UuICBJdCBtaXhlcyBJL08KQEAgLTUxNiw3ICs1MTksNiBAQAogI2RlZmluZSBORVRJRl9GX0xMVFgJCTQwOTYJLyogTG9ja0xlc3MgVFggLSBkZXByZWNhdGVkLiBQbGVhc2UgKi8KIAkJCQkJLyogZG8gbm90IHVzZSBMTFRYIGluIG5ldyBkcml2ZXJzICovCiAjZGVmaW5lIE5FVElGX0ZfTkVUTlNfTE9DQUwJODE5MgkvKiBEb2VzIG5vdCBjaGFuZ2UgbmV0d29yayBuYW1lc3BhY2VzICovCi0jZGVmaW5lIE5FVElGX0ZfTVVMVElfUVVFVUUJMTYzODQJLyogSGFzIG11bHRpcGxlIFRYL1JYIHF1ZXVlcyAqLwogI2RlZmluZSBORVRJRl9GX0xSTwkJMzI3NjgJLyogbGFyZ2UgcmVjZWl2ZSBvZmZsb2FkICovCiAKIAkvKiBTZWdtZW50YXRpb24gb2ZmbG9hZCBmZWF0dXJlcyAqLwpAQCAtNTM3LDggKzUzOSw2IEBACiAjZGVmaW5lIE5FVElGX0ZfVjZfQ1NVTQkJKE5FVElGX0ZfR0VOX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSkKICNkZWZpbmUgTkVUSUZfRl9BTExfQ1NVTQkoTkVUSUZfRl9WNF9DU1VNIHwgTkVUSUZfRl9WNl9DU1VNKQogCi0Jc3RydWN0IG5ldF9kZXZpY2UJKm5leHRfc2NoZWQ7Ci0KIAkvKiBJbnRlcmZhY2UgaW5kZXguIFVuaXF1ZSBkZXZpY2UgaWRlbnRpZmllcgkqLwogCWludAkJCWlmaW5kZXg7CiAJaW50CQkJaWZsaW5rOwpAQCAtNTk0LDEzICs1OTQsMTQgQEAKIAl1bnNpZ25lZCBjaGFyCQlhZGRyX2xlbjsJLyogaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGgJKi8KIAl1bnNpZ25lZCBzaG9ydCAgICAgICAgICBkZXZfaWQ7CQkvKiBmb3Igc2hhcmVkIG5ldHdvcmsgY2FyZHMgKi8KIAorCXNwaW5sb2NrX3QJCWFkZHJfbGlzdF9sb2NrOwogCXN0cnVjdCBkZXZfYWRkcl9saXN0CSp1Y19saXN0OwkvKiBTZWNvbmRhcnkgdW5pY2FzdCBtYWMgYWRkcmVzc2VzICovCiAJaW50CQkJdWNfY291bnQ7CS8qIE51bWJlciBvZiBpbnN0YWxsZWQgdWNhc3RzCSovCiAJaW50CQkJdWNfcHJvbWlzYzsKIAlzdHJ1Y3QgZGV2X2FkZHJfbGlzdAkqbWNfbGlzdDsJLyogTXVsdGljYXN0IG1hYyBhZGRyZXNzZXMJKi8KIAlpbnQJCQltY19jb3VudDsJLyogTnVtYmVyIG9mIGluc3RhbGxlZCBtY2FzdHMJKi8KLQlpbnQJCQlwcm9taXNjdWl0eTsKLQlpbnQJCQlhbGxtdWx0aTsKKwl1bnNpZ25lZCBpbnQJCXByb21pc2N1aXR5OworCXVuc2lnbmVkIGludAkJYWxsbXVsdGk7CiAKIAogCS8qIFByb3RvY29sIHNwZWNpZmljIHBvaW50ZXJzICovCkBAIC02MjQsMzIgKzYyNSwyMSBAQAogCiAJdW5zaWduZWQgY2hhcgkJYnJvYWRjYXN0W01BWF9BRERSX0xFTl07CS8qIGh3IGJjYXN0IGFkZAkqLwogCi0JLyogaW5ncmVzcyBwYXRoIHN5bmNocm9uaXplciAqLwotCXNwaW5sb2NrX3QJCWluZ3Jlc3NfbG9jazsKLQlzdHJ1Y3QgUWRpc2MJCSpxZGlzY19pbmdyZXNzOworCXN0cnVjdCBuZXRkZXZfcXVldWUJcnhfcXVldWU7CiAKLS8qCi0gKiBDYWNoZSBsaW5lIG1vc3RseSB1c2VkIG9uIHF1ZXVlIHRyYW5zbWl0IHBhdGggKHFkaXNjKQotICovCi0JLyogZGV2aWNlIHF1ZXVlIGxvY2sgKi8KLQlzcGlubG9ja190CQlxdWV1ZV9sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci0Jc3RydWN0IFFkaXNjCQkqcWRpc2M7Ci0Jc3RydWN0IFFkaXNjCQkqcWRpc2Nfc2xlZXBpbmc7Ci0Jc3RydWN0IGxpc3RfaGVhZAlxZGlzY19saXN0OworCXN0cnVjdCBuZXRkZXZfcXVldWUJKl90eCBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCisJLyogTnVtYmVyIG9mIFRYIHF1ZXVlcyBhbGxvY2F0ZWQgYXQgYWxsb2NfbmV0ZGV2X21xKCkgdGltZSAgKi8KKwl1bnNpZ25lZCBpbnQJCW51bV90eF9xdWV1ZXM7CisKKwkvKiBOdW1iZXIgb2YgVFggcXVldWVzIGN1cnJlbnRseSBhY3RpdmUgaW4gZGV2aWNlICAqLworCXVuc2lnbmVkIGludAkJcmVhbF9udW1fdHhfcXVldWVzOworCiAJdW5zaWduZWQgbG9uZwkJdHhfcXVldWVfbGVuOwkvKiBNYXggZnJhbWVzIHBlciBxdWV1ZSBhbGxvd2VkICovCiAKLQkvKiBQYXJ0aWFsbHkgdHJhbnNtaXR0ZWQgR1NPIHBhY2tldC4gKi8KLQlzdHJ1Y3Qgc2tfYnVmZgkJKmdzb19za2I7Ci0KIC8qCiAgKiBPbmUgcGFydCBpcyBtb3N0bHkgdXNlZCBvbiB4bWl0IHBhdGggKGRldmljZSkKICAqLwotCS8qIGhhcmRfc3RhcnRfeG1pdCBzeW5jaHJvbml6ZXIgKi8KLQlzcGlubG9ja190CQlfeG1pdF9sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci0JLyogY3B1IGlkIG9mIHByb2Nlc3NvciBlbnRlcmVkIHRvIGhhcmRfc3RhcnRfeG1pdCBvciAtMSwKLQkgICBpZiBub2JvZHkgZW50ZXJlZCB0aGVyZS4KLQkgKi8KLQlpbnQJCQl4bWl0X2xvY2tfb3duZXI7CiAJdm9pZAkJCSpwcml2OwkvKiBwb2ludGVyIHRvIHByaXZhdGUgZGF0YQkqLwogCWludAkJCSgqaGFyZF9zdGFydF94bWl0KSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTcyOCw2ICs3MTgsOSBAQAogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqcG9sbF9jb250cm9sbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgogCisJdTE2CQkJKCpzZWxlY3RfcXVldWUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwogI2lmZGVmIENPTkZJR19ORVRfTlMKIAkvKiBOZXR3b3JrIG5hbWVzcGFjZSB0aGlzIG5ldHdvcmsgZGV2aWNlIGlzIGluc2lkZSAqLwogCXN0cnVjdCBuZXQJCSpuZF9uZXQ7CkBAIC03NDAsNiArNzMzLDggQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0CSpicl9wb3J0OwogCS8qIG1hY3ZsYW4gKi8KIAlzdHJ1Y3QgbWFjdmxhbl9wb3J0CSptYWN2bGFuX3BvcnQ7CisJLyogR0FSUCAqLworCXN0cnVjdCBnYXJwX3BvcnQJKmdhcnBfcG9ydDsKIAogCS8qIGNsYXNzL25ldC9uYW1lIGVudHJ5ICovCiAJc3RydWN0IGRldmljZQkJZGV2OwpAQCAtNzU1LDE2ICs3NTAsMzEgQEAKIAkvKiBmb3Igc2V0dGluZyBrZXJuZWwgc29jayBhdHRyaWJ1dGUgb24gVENQIGNvbm5lY3Rpb24gc2V0dXAgKi8KICNkZWZpbmUgR1NPX01BWF9TSVpFCQk2NTUzNgogCXVuc2lnbmVkIGludAkJZ3NvX21heF9zaXplOwotCi0JLyogVGhlIFRYIHF1ZXVlIGNvbnRyb2wgc3RydWN0dXJlcyAqLwotCXVuc2lnbmVkIGludAkJCWVncmVzc19zdWJxdWV1ZV9jb3VudDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdWJxdWV1ZQllZ3Jlc3Nfc3VicXVldWVbMV07CiB9OwogI2RlZmluZSB0b19uZXRfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbmV0X2RldmljZSwgZGV2KQogCiAjZGVmaW5lCU5FVERFVl9BTElHTgkJMzIKICNkZWZpbmUJTkVUREVWX0FMSUdOX0NPTlNUCShORVRERVZfQUxJR04gLSAxKQogCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpuZXRkZXZfZ2V0X3R4X3F1ZXVlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJcmV0dXJuICZkZXYtPl90eFtpbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfZm9yX2VhY2hfdHhfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHZvaWQgKCpmKShzdHJ1Y3QgbmV0X2RldmljZSAqLAorCQkJCQkJICAgICAgc3RydWN0IG5ldGRldl9xdWV1ZSAqLAorCQkJCQkJICAgICAgdm9pZCAqKSwKKwkJCQkJICAgIHZvaWQgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJZihkZXYsICZkZXYtPl90eFtpXSwgYXJnKTsKK30KKwogLyoKICAqIE5ldCBuYW1lc3BhY2UgaW5saW5lcwogICovCkBAIC03OTUsNyArODA1LDkgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkICpuZXRkZXZfcHJpdihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBkZXYtPnByaXY7CisJcmV0dXJuIChjaGFyICopZGV2ICsgKChzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpCisJCQkgICAgICAgKyBORVRERVZfQUxJR05fQ09OU1QpCisJCQkgICAgICAmIH5ORVRERVZfQUxJR05fQ09OU1QpOwogfQogCiAvKiBTZXQgdGhlIHN5c2ZzIHBoeXNpY2FsIGRldmljZSByZWZlcmVuY2UgZm9yIHRoZSBuZXR3b3JrIGxvZ2ljYWwgZGV2aWNlCkBAIC04MzAsNiArODQyLDE5IEBACiAJc2V0X2JpdChOQVBJX1NUQVRFX1NDSEVELCAmbmFwaS0+c3RhdGUpOwogfQogCisvKioKKyAqICBuZXRpZl9uYXBpX2RlbCAtIHJlbW92ZSBhIG5hcGkgY29udGV4dAorICogIEBuYXBpOiBuYXBpIGNvbnRleHQKKyAqCisgKiAgbmV0aWZfbmFwaV9kZWwoKSByZW1vdmVzIGEgbmFwaSBjb250ZXh0IGZyb20gdGhlIG5ldHdvcmsgZGV2aWNlIG5hcGkgbGlzdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfbmFwaV9kZWwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQoreworI2lmZGVmIENPTkZJR19ORVRQT0xMCisJbGlzdF9kZWwoJm5hcGktPmRldl9saXN0KTsKKyNlbmRpZgorfQorCiBzdHJ1Y3QgcGFja2V0X3R5cGUgewogCV9fYmUxNgkJCXR5cGU7CS8qIFRoaXMgaXMgcmVhbGx5IGh0b25zKGV0aGVyX3R5cGUpLiAqLwogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CS8qIE5VTEwgaXMgd2lsZGNhcmRlZCBoZXJlCSAgICAgKi8KQEAgLTg5MCw2ICs5MTUsNyBAQAogZXh0ZXJuIGludAkJZGV2X2FsbG9jX25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gaW50CQlkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQJCWRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkCQlkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50CQlkZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCXJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkCQl1bnJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTkzOSw3ICs5NjUsNyBAQAogICovCiBzdHJ1Y3Qgc29mdG5ldF9kYXRhCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UJKm91dHB1dF9xdWV1ZTsKKwlzdHJ1Y3QgUWRpc2MJCSpvdXRwdXRfcXVldWU7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlpbnB1dF9wa3RfcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZAlwb2xsX2xpc3Q7CiAJc3RydWN0IHNrX2J1ZmYJCSpjb21wbGV0aW9uX3F1ZXVlOwpAQCAtOTU0LDEyICs5ODAsMjUgQEAKIAogI2RlZmluZSBIQVZFX05FVElGX1FVRVVFCiAKLWV4dGVybiB2b2lkIF9fbmV0aWZfc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBfX25ldGlmX3NjaGVkdWxlKHN0cnVjdCBRZGlzYyAqcSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zY2hlZHVsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3NjaGVkdWxlX3F1ZXVlKHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSkKIHsKLQlpZiAoIXRlc3RfYml0KF9fTElOS19TVEFURV9YT0ZGLCAmZGV2LT5zdGF0ZSkpCi0JCV9fbmV0aWZfc2NoZWR1bGUoZGV2KTsKKwlpZiAoIXRlc3RfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJnR4cS0+c3RhdGUpKQorCQlfX25ldGlmX3NjaGVkdWxlKHR4cS0+cWRpc2MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfdHhfc2NoZWR1bGVfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fdHhfcXVldWVzOyBpKyspCisJCW5ldGlmX3NjaGVkdWxlX3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl90eF9zdGFydF9xdWV1ZShzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUpCit7CisJY2xlYXJfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJmRldl9xdWV1ZS0+c3RhdGUpOwogfQogCiAvKioKQEAgLTk3MCw3ICsxMDA5LDI5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zdGFydF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfWE9GRiwgJmRldi0+c3RhdGUpOworCW5ldGlmX3R4X3N0YXJ0X3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOworCQluZXRpZl90eF9zdGFydF9xdWV1ZSh0eHEpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3R4X3dha2VfcXVldWUoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlKQoreworI2lmZGVmIENPTkZJR19ORVRQT0xMX1RSQVAKKwlpZiAobmV0cG9sbF90cmFwKCkpIHsKKwkJY2xlYXJfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJmRldl9xdWV1ZS0+c3RhdGUpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX1FVRVVFX1NUQVRFX1hPRkYsICZkZXZfcXVldWUtPnN0YXRlKSkKKwkJX19uZXRpZl9zY2hlZHVsZShkZXZfcXVldWUtPnFkaXNjKTsKIH0KIAogLyoqCkBAIC05ODIsMTQgKzEwNDMsMjIgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3dha2VfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSNpZmRlZiBDT05GSUdfTkVUUE9MTF9UUkFQCi0JaWYgKG5ldHBvbGxfdHJhcCgpKSB7Ci0JCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfWE9GRiwgJmRldi0+c3RhdGUpOwotCQlyZXR1cm47CisJbmV0aWZfdHhfd2FrZV9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOworCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CiAJfQotI2VuZGlmCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX0xJTktfU1RBVEVfWE9GRiwgJmRldi0+c3RhdGUpKQotCQlfX25ldGlmX3NjaGVkdWxlKGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl90eF9zdG9wX3F1ZXVlKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSkKK3sKKwlzZXRfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJmRldl9xdWV1ZS0+c3RhdGUpOwogfQogCiAvKioKQEAgLTEwMDEsNyArMTA3MCwyMiBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfc3RvcF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXNldF9iaXQoX19MSU5LX1NUQVRFX1hPRkYsICZkZXYtPnN0YXRlKTsKKwluZXRpZl90eF9zdG9wX3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoY29uc3Qgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlKQoreworCXJldHVybiB0ZXN0X2JpdChfX1FVRVVFX1NUQVRFX1hPRkYsICZkZXZfcXVldWUtPnN0YXRlKTsKIH0KIAogLyoqCkBAIC0xMDEyLDcgKzEwOTYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBuZXRpZl9xdWV1ZV9zdG9wcGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIHRlc3RfYml0KF9fTElOS19TVEFURV9YT0ZGLCAmZGV2LT5zdGF0ZSk7CisJcmV0dXJuIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQobmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApKTsKIH0KIAogLyoqCkBAIC0xMDQyLDkgKzExMjYsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfc3RhcnRfc3VicXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2luZGV4KQogewotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKLQljbGVhcl9iaXQoX19MSU5LX1NUQVRFX1hPRkYsICZkZXYtPmVncmVzc19zdWJxdWV1ZVtxdWV1ZV9pbmRleF0uc3RhdGUpOwotI2VuZGlmCisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHF1ZXVlX2luZGV4KTsKKwljbGVhcl9iaXQoX19RVUVVRV9TVEFURV9YT0ZGLCAmdHhxLT5zdGF0ZSk7CiB9CiAKIC8qKgpAQCAtMTA1NiwxMyArMTEzOSwxMiBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfc3RvcF9zdWJxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaW5kZXgpCiB7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxdWV1ZV9pbmRleCk7CiAjaWZkZWYgQ09ORklHX05FVFBPTExfVFJBUAogCWlmIChuZXRwb2xsX3RyYXAoKSkKIAkJcmV0dXJuOwogI2VuZGlmCi0Jc2V0X2JpdChfX0xJTktfU1RBVEVfWE9GRiwgJmRldi0+ZWdyZXNzX3N1YnF1ZXVlW3F1ZXVlX2luZGV4XS5zdGF0ZSk7Ci0jZW5kaWYKKwlzZXRfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJnR4cS0+c3RhdGUpOwogfQogCiAvKioKQEAgLTEwNzUsMTIgKzExNTcsOCBAQAogc3RhdGljIGlubGluZSBpbnQgX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSB1MTYgcXVldWVfaW5kZXgpCiB7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCXJldHVybiB0ZXN0X2JpdChfX0xJTktfU1RBVEVfWE9GRiwKLQkJCSZkZXYtPmVncmVzc19zdWJxdWV1ZVtxdWV1ZV9pbmRleF0uc3RhdGUpOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgorCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxdWV1ZV9pbmRleCk7CisJcmV0dXJuIHRlc3RfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJnR4cS0+c3RhdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xMDk4LDE1ICsxMTc2LDEzIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl93YWtlX3N1YnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pbmRleCkKIHsKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHF1ZXVlX2luZGV4KTsKICNpZmRlZiBDT05GSUdfTkVUUE9MTF9UUkFQCiAJaWYgKG5ldHBvbGxfdHJhcCgpKQogCQlyZXR1cm47CiAjZW5kaWYKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fTElOS19TVEFURV9YT0ZGLAotCQkJICAgICAgICZkZXYtPmVncmVzc19zdWJxdWV1ZVtxdWV1ZV9pbmRleF0uc3RhdGUpKQotCQlfX25ldGlmX3NjaGVkdWxlKGRldik7Ci0jZW5kaWYKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJnR4cS0+c3RhdGUpKQorCQlfX25ldGlmX3NjaGVkdWxlKHR4cS0+cWRpc2MpOwogfQogCiAvKioKQEAgLTExMTQsMTUgKzExOTAsMTAgQEAKICAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCiAgKgogICogQ2hlY2sgaWYgZGV2aWNlIGhhcyBtdWx0aXBsZSB0cmFuc21pdCBxdWV1ZXMKLSAqIEFsd2F5cyBmYWxscyBpZiBORVRERVZJQ0VfTVVMVElRVUVVRSBpcyBub3QgY29uZmlndXJlZAogICovCiBzdGF0aWMgaW5saW5lIGludCBuZXRpZl9pc19tdWx0aXF1ZXVlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0jaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQotCXJldHVybiAoISEoTkVUSUZfRl9NVUxUSV9RVUVVRSAmIGRldi0+ZmVhdHVyZXMpKTsKLSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYKKwlyZXR1cm4gKGRldi0+bnVtX3R4X3F1ZXVlcyA+IDEpOwogfQogCiAvKiBVc2UgdGhpcyB2YXJpYW50IHdoZW4gaXQgaXMga25vd24gZm9yIHN1cmUgdGhhdCBpdApAQCAtMTE0Miw2ICsxMjEzLDcgQEAKIGV4dGVybiBpbnQJCW5ldGlmX3J4X25pKHN0cnVjdCBza19idWZmICpza2IpOwogI2RlZmluZSBIQVZFX05FVElGX1JFQ0VJVkVfU0tCIDEKIGV4dGVybiBpbnQJCW5ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQJCW5ldGlmX25pdF9kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludAkJZGV2X3ZhbGlkX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gaW50CQlkZXZfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqKTsKIGV4dGVybiBpbnQJCWRldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICopOwpAQCAtMTE1NCw3ICsxMjI2LDggQEAKIGV4dGVybiBpbnQJCWRldl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqKTsKIGV4dGVybiBpbnQJCWRldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSk7CiAKIGV4dGVybiBpbnQJCW5ldGRldl9idWRnZXQ7CiAKQEAgLTEzOTAsNiArMTQ2MywxOCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfdHhfbG9jayhzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEsIGludCBjcHUpCit7CisJc3Bpbl9sb2NrKCZ0eHEtPl94bWl0X2xvY2spOworCXR4cS0+eG1pdF9sb2NrX293bmVyID0gY3B1OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl90eF9sb2NrX2JoKHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSkKK3sKKwlzcGluX2xvY2tfYmgoJnR4cS0+X3htaXRfbG9jayk7CisJdHhxLT54bWl0X2xvY2tfb3duZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Cit9CisKIC8qKgogICoJbmV0aWZfdHhfbG9jayAtIGdyYWIgbmV0d29yayBkZXZpY2UgdHJhbnNtaXQgbG9jawogICoJQGRldjogbmV0d29yayBkZXZpY2UKQEAgLTEzOTcsNjIgKzE0ODIsMTA5IEBACiAgKgogICogR2V0IG5ldHdvcmsgZGV2aWNlIHRyYW5zbWl0IGxvY2sKICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfdHhfbG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY3B1KQotewotCXNwaW5fbG9jaygmZGV2LT5feG1pdF9sb2NrKTsKLQlkZXYtPnhtaXRfbG9ja19vd25lciA9IGNwdTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3R4X2xvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlfX25ldGlmX3R4X2xvY2soZGV2LCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOworCQlfX25ldGlmX3R4X2xvY2sodHhxLCBjcHUpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3R4X2xvY2tfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzcGluX2xvY2tfYmgoJmRldi0+X3htaXRfbG9jayk7Ci0JZGV2LT54bWl0X2xvY2tfb3duZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbG9jYWxfYmhfZGlzYWJsZSgpOworCW5ldGlmX3R4X2xvY2soZGV2KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19uZXRpZl90eF90cnlsb2NrKHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSkKK3sKKwlpbnQgb2sgPSBzcGluX3RyeWxvY2soJnR4cS0+X3htaXRfbG9jayk7CisJaWYgKGxpa2VseShvaykpCisJCXR4cS0+eG1pdF9sb2NrX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXJldHVybiBvazsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbmV0aWZfdHhfdHJ5bG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCBvayA9IHNwaW5fdHJ5bG9jaygmZGV2LT5feG1pdF9sb2NrKTsKLQlpZiAobGlrZWx5KG9rKSkKLQkJZGV2LT54bWl0X2xvY2tfb3duZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JcmV0dXJuIG9rOworCXJldHVybiBfX25ldGlmX3R4X3RyeWxvY2sobmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfdHhfdW5sb2NrKHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSkKK3sKKwl0eHEtPnhtaXRfbG9ja19vd25lciA9IC0xOworCXNwaW5fdW5sb2NrKCZ0eHEtPl94bWl0X2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl90eF91bmxvY2tfYmgoc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxKQoreworCXR4cS0+eG1pdF9sb2NrX293bmVyID0gLTE7CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+X3htaXRfbG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl90eF91bmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPnhtaXRfbG9ja19vd25lciA9IC0xOwotCXNwaW5fdW5sb2NrKCZkZXYtPl94bWl0X2xvY2spOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKKwkJX19uZXRpZl90eF91bmxvY2sodHhxKTsKKwl9CisKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3R4X3VubG9ja19iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+eG1pdF9sb2NrX293bmVyID0gLTE7Ci0Jc3Bpbl91bmxvY2tfYmgoJmRldi0+X3htaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrKGRldik7CisJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKLSNkZWZpbmUgSEFSRF9UWF9MT0NLKGRldiwgY3B1KSB7CQkJXAorI2RlZmluZSBIQVJEX1RYX0xPQ0soZGV2LCB0eHEsIGNwdSkgewkJCVwKIAlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xMVFgpID09IDApIHsJXAotCQlfX25ldGlmX3R4X2xvY2soZGV2LCBjcHUpOwkJCVwKKwkJX19uZXRpZl90eF9sb2NrKHR4cSwgY3B1KTsJCVwKIAl9CQkJCQkJXAogfQogCi0jZGVmaW5lIEhBUkRfVFhfVU5MT0NLKGRldikgewkJCQlcCisjZGVmaW5lIEhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKSB7CQkJXAogCWlmICgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTExUWCkgPT0gMCkgewlcCi0JCW5ldGlmX3R4X3VubG9jayhkZXYpOwkJCVwKKwkJX19uZXRpZl90eF91bmxvY2sodHhxKTsJCQlcCiAJfQkJCQkJCVwKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3R4X2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwl1bnNpZ25lZCBpbnQgaTsKKwogCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOworCX0KIAluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2FkZHJfbG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXNwaW5fbG9jaygmZGV2LT5hZGRyX2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9hZGRyX2xvY2tfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfYmgoJmRldi0+YWRkcl9saXN0X2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfYWRkcl91bmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzcGluX3VubG9jaygmZGV2LT5hZGRyX2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9hZGRyX3VubG9ja19iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmFkZHJfbGlzdF9sb2NrKTsKK30KKwogLyogVGhlc2UgZnVuY3Rpb25zIGxpdmUgZWxzZXdoZXJlIChkcml2ZXJzL25ldC9uZXRfaW5pdC5jLCBidXQgcmVsYXRlZCkgKi8KIAogZXh0ZXJuIHZvaWQJCWV0aGVyX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTQ4MCw5ICsxNjEyLDEwIEBACiBleHRlcm4gaW50CQlfX2Rldl9hZGRyX2FkZChzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqKmxpc3QsIGludCAqY291bnQsIHZvaWQgKmFkZHIsIGludCBhbGVuLCBpbnQgbmV3b25seSk7CiBleHRlcm4gaW50CQlfX2Rldl9hZGRyX3N5bmMoc3RydWN0IGRldl9hZGRyX2xpc3QgKip0bywgaW50ICp0b19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKipmcm9tLCBpbnQgKmZyb21fY291bnQpOwogZXh0ZXJuIHZvaWQJCV9fZGV2X2FkZHJfdW5zeW5jKHN0cnVjdCBkZXZfYWRkcl9saXN0ICoqdG8sIGludCAqdG9fY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICoqZnJvbSwgaW50ICpmcm9tX2NvdW50KTsKLWV4dGVybiB2b2lkCQlkZXZfc2V0X3Byb21pc2N1aXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpOwotZXh0ZXJuIHZvaWQJCWRldl9zZXRfYWxsbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluYyk7CitleHRlcm4gaW50CQlkZXZfc2V0X3Byb21pc2N1aXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpOworZXh0ZXJuIGludAkJZGV2X3NldF9hbGxtdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKTsKIGV4dGVybiB2b2lkCQluZXRkZXZfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQJCW5ldGRldl9ib25kaW5nX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkCQluZXRkZXZfZmVhdHVyZXNfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogLyogTG9hZCBhIGRldmljZSB2aWEgdGhlIGttb2QgKi8KIGV4dGVybiB2b2lkCQlkZXZfbG9hZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpOwpAQCAtMTUwOSw2ICsxNjQyLDExIEBACiBleHRlcm4gdm9pZCBkZXZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpOwogI2VuZGlmCiAKK2V4dGVybiBpbnQgbmV0ZGV2X2NsYXNzX2NyZWF0ZV9maWxlKHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIpOworZXh0ZXJuIHZvaWQgbmV0ZGV2X2NsYXNzX3JlbW92ZV9maWxlKHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIpOworCitleHRlcm4gY2hhciAqbmV0ZGV2X2RyaXZlcm5hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqYnVmZmVyLCBpbnQgbGVuKTsKKwogZXh0ZXJuIHZvaWQgbGlua3dhdGNoX3J1bl9xdWV1ZSh2b2lkKTsKIAogZXh0ZXJuIGludCBuZXRkZXZfY29tcHV0ZV9mZWF0dXJlcyh1bnNpZ25lZCBsb25nIGFsbCwgdW5zaWduZWQgbG9uZyBvbmUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCmluZGV4IGJhZDFlYjcuLjg4NWNiZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKQEAgLTEyMiw3ICsxMjIsNyBAQAogCUlQQ1RfTkFUSU5GT19CSVQgPSAxMCwKIAlJUENUX05BVElORk8gPSAoMSA8PCBJUENUX05BVElORk9fQklUKSwKIAotCS8qIENvdW50ZXIgaGlnaGVzdCBiaXQgaGFzIGJlZW4gc2V0ICovCisJLyogQ291bnRlciBoaWdoZXN0IGJpdCBoYXMgYmVlbiBzZXQsIHVudXNlZCAqLwogCUlQQ1RfQ09VTlRFUl9GSUxMSU5HX0JJVCA9IDExLAogCUlQQ1RfQ09VTlRFUl9GSUxMSU5HID0gKDEgPDwgSVBDVF9DT1VOVEVSX0ZJTExJTkdfQklUKSwKIApAQCAtMTQ1LDEyICsxNDUsNiBAQAogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCBpcF9jb25udHJhY2tfY291bnRlcgotewotCXVfaW50MzJfdCBwYWNrZXRzOwotCXVfaW50MzJfdCBieXRlczsKLX07Ci0KIHN0cnVjdCBpcF9jb25udHJhY2tfc3RhdAogewogCXVuc2lnbmVkIGludCBzZWFyY2hlZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaAppbmRleCAwYTM4M2FjLi5jMTk1OTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCkBAIC04MSw2ICs4MSw3IEBACiAJQ1RBX1BST1RPSU5GT19VTlNQRUMsCiAJQ1RBX1BST1RPSU5GT19UQ1AsCiAJQ1RBX1BST1RPSU5GT19EQ0NQLAorCUNUQV9QUk9UT0lORk9fU0NUUCwKIAlfX0NUQV9QUk9UT0lORk9fTUFYCiB9OwogI2RlZmluZSBDVEFfUFJPVE9JTkZPX01BWCAoX19DVEFfUFJPVE9JTkZPX01BWCAtIDEpCkBAIC0xMDMsMTIgKzEwNCwyMSBAQAogfTsKICNkZWZpbmUgQ1RBX1BST1RPSU5GT19EQ0NQX01BWCAoX19DVEFfUFJPVE9JTkZPX0RDQ1BfTUFYIC0gMSkKIAorZW51bSBjdGF0dHJfcHJvdG9pbmZvX3NjdHAgeworCUNUQV9QUk9UT0lORk9fU0NUUF9VTlNQRUMsCisJQ1RBX1BST1RPSU5GT19TQ1RQX1NUQVRFLAorCUNUQV9QUk9UT0lORk9fU0NUUF9WVEFHX09SSUdJTkFMLAorCUNUQV9QUk9UT0lORk9fU0NUUF9WVEFHX1JFUExZLAorCV9fQ1RBX1BST1RPSU5GT19TQ1RQX01BWAorfTsKKyNkZWZpbmUgQ1RBX1BST1RPSU5GT19TQ1RQX01BWCAoX19DVEFfUFJPVE9JTkZPX1NDVFBfTUFYIC0gMSkKKwogZW51bSBjdGF0dHJfY291bnRlcnMgewogCUNUQV9DT1VOVEVSU19VTlNQRUMsCi0JQ1RBX0NPVU5URVJTX1BBQ0tFVFMsCQkvKiBvbGQgNjRiaXQgY291bnRlcnMgKi8KLQlDVEFfQ09VTlRFUlNfQllURVMsCQkvKiBvbGQgNjRiaXQgY291bnRlcnMgKi8KLQlDVEFfQ09VTlRFUlMzMl9QQUNLRVRTLAotCUNUQV9DT1VOVEVSUzMyX0JZVEVTLAorCUNUQV9DT1VOVEVSU19QQUNLRVRTLAkJLyogNjRiaXQgY291bnRlcnMgKi8KKwlDVEFfQ09VTlRFUlNfQllURVMsCQkvKiA2NGJpdCBjb3VudGVycyAqLworCUNUQV9DT1VOVEVSUzMyX1BBQ0tFVFMsCQkvKiBvbGQgMzJiaXQgY291bnRlcnMsIHVudXNlZCAqLworCUNUQV9DT1VOVEVSUzMyX0JZVEVTLAkJLyogb2xkIDMyYml0IGNvdW50ZXJzLCB1bnVzZWQgKi8KIAlfX0NUQV9DT1VOVEVSU19NQVgKIH07CiAjZGVmaW5lIENUQV9DT1VOVEVSU19NQVggKF9fQ1RBX0NPVU5URVJTX01BWCAtIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKaW5kZXggYTg1NzIxMy4uZjY2MTczMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaApAQCAtNDgsNiArNDgsOSBAQAogCU5GVUxBX1NFUSwJCQkvKiBpbnN0YW5jZS1sb2NhbCBzZXF1ZW5jZSBudW1iZXIgKi8KIAlORlVMQV9TRVFfR0xPQkFMLAkJLyogZ2xvYmFsIHNlcXVlbmNlIG51bWJlciAqLwogCU5GVUxBX0dJRCwJCQkvKiBncm91cCBpZCBvZiBzb2NrZXQgKi8KKwlORlVMQV9IV1RZUEUsCQkJLyogaGFyZHdhcmUgdHlwZSAqLworCU5GVUxBX0hXSEVBREVSLAkJCS8qIGhhcmR3YXJlIGhlYWRlciAqLworCU5GVUxBX0hXTEVOLAkJCS8qIGhhcmR3YXJlIGhlYWRlciBsZW5ndGggKi8KIAogCV9fTkZVTEFfTUFYCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaAppbmRleCBiYjIxZGQxLi44YTZiYTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaApAQCAtNCw2ICs0LDExIEBACiAjZGVmaW5lIFhUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFIDEyOAogI2RlZmluZSBYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFIDE2CiAKK2VudW0geworCVhUX1NUUklOR19GTEFHX0lOVkVSVAkJPSAweDAxLAorCVhUX1NUUklOR19GTEFHX0lHTk9SRUNBU0UJPSAweDAyCit9OworCiBzdHJ1Y3QgeHRfc3RyaW5nX2luZm8KIHsKIAl1X2ludDE2X3QgZnJvbV9vZmZzZXQ7CkBAIC0xMSw3ICsxNiwxNSBAQAogCWNoYXIJICBhbGdvW1hUX1NUUklOR19NQVhfQUxHT19OQU1FX1NJWkVdOwogCWNoYXIgCSAgcGF0dGVybltYVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRV07CiAJdV9pbnQ4X3QgIHBhdGxlbjsKLQl1X2ludDhfdCAgaW52ZXJ0OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50OF90ICBpbnZlcnQ7CisJCX0gdjA7CisKKwkJc3RydWN0IHsKKwkJCXVfaW50OF90ICBmbGFnczsKKwkJfSB2MTsKKwl9IHU7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCXN0cnVjdCB0c19jb25maWcgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpICpjb25maWc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2lwNi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9pcDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjczYzNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9pcDYuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogIGVidF9pcDYKKyAqCisgKglBdXRob3JzOgorICogS3VvLUxhbmcgVHNlbmcgPGt1by1sYW5nLnRzZW5nQGludGVsLmNvbT4KKyAqIE1hbm9oYXIgQ2FzdGVsaW5vIDxtYW5vaGFyLnIuY2FzdGVsaW5vQGludGVsLmNvbT4KKyAqCisgKiAgSmFuIDExLCAyMDA4CisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9CUklER0VfRUJUX0lQNl9ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9JUDZfSAorCisjZGVmaW5lIEVCVF9JUDZfU09VUkNFIDB4MDEKKyNkZWZpbmUgRUJUX0lQNl9ERVNUIDB4MDIKKyNkZWZpbmUgRUJUX0lQNl9UQ0xBU1MgMHgwNAorI2RlZmluZSBFQlRfSVA2X1BST1RPIDB4MDgKKyNkZWZpbmUgRUJUX0lQNl9TUE9SVCAweDEwCisjZGVmaW5lIEVCVF9JUDZfRFBPUlQgMHgyMAorI2RlZmluZSBFQlRfSVA2X01BU0sgKEVCVF9JUDZfU09VUkNFIHwgRUJUX0lQNl9ERVNUIHwgRUJUX0lQNl9UQ0xBU1MgfFwKKwkJICAgICAgRUJUX0lQNl9QUk9UTyB8IEVCVF9JUDZfU1BPUlQgfCBFQlRfSVA2X0RQT1JUKQorI2RlZmluZSBFQlRfSVA2X01BVENIICJpcDYiCisKKy8qIHRoZSBzYW1lIHZhbHVlcyBhcmUgdXNlZCBmb3IgdGhlIGludmZsYWdzICovCitzdHJ1Y3QgZWJ0X2lwNl9pbmZvCit7CisJc3RydWN0IGluNl9hZGRyIHNhZGRyOworCXN0cnVjdCBpbjZfYWRkciBkYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgc21zazsKKwlzdHJ1Y3QgaW42X2FkZHIgZG1zazsKKwl1aW50OF90ICB0Y2xhc3M7CisJdWludDhfdCAgcHJvdG9jb2w7CisJdWludDhfdCAgYml0bWFzazsKKwl1aW50OF90ICBpbnZmbGFnczsKKwl1aW50MTZfdCBzcG9ydFsyXTsKKwl1aW50MTZfdCBkcG9ydFsyXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9sb2cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbG9nLmgKaW5kZXggOTZlMjMxYS4uYjc2ZTY1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9sb2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2xvZy5oCkBAIC00LDcgKzQsOCBAQAogI2RlZmluZSBFQlRfTE9HX0lQIDB4MDEgLyogaWYgdGhlIGZyYW1lIGlzIG1hZGUgYnkgaXAsIGxvZyB0aGUgaXAgaW5mb3JtYXRpb24gKi8KICNkZWZpbmUgRUJUX0xPR19BUlAgMHgwMgogI2RlZmluZSBFQlRfTE9HX05GTE9HIDB4MDQKLSNkZWZpbmUgRUJUX0xPR19NQVNLIChFQlRfTE9HX0lQIHwgRUJUX0xPR19BUlApCisjZGVmaW5lIEVCVF9MT0dfSVA2IDB4MDgKKyNkZWZpbmUgRUJUX0xPR19NQVNLIChFQlRfTE9HX0lQIHwgRUJUX0xPR19BUlAgfCBFQlRfTE9HX0lQNikKICNkZWZpbmUgRUJUX0xPR19QUkVGSVhfU0laRSAzMAogI2RlZmluZSBFQlRfTE9HX1dBVENIRVIgImxvZyIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCmluZGV4IDY1MDMxOGIuLjI5Yzc3MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKQEAgLTYwLDYgKzYwLDcgQEAKIAlORl9JUF9QUklfTUFOR0xFID0gLTE1MCwKIAlORl9JUF9QUklfTkFUX0RTVCA9IC0xMDAsCiAJTkZfSVBfUFJJX0ZJTFRFUiA9IDAsCisJTkZfSVBfUFJJX1NFQ1VSSVRZID0gNTAsCiAJTkZfSVBfUFJJX05BVF9TUkMgPSAxMDAsCiAJTkZfSVBfUFJJX1NFTElOVVhfTEFTVCA9IDIyNSwKIAlORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0gPSBJTlRfTUFYLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCmluZGV4IDM0NzVhNjUuLmQ2NTQ4NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKQEAgLTY0LDExICs2NCwxNCBAQAogCU5GX0lQNl9QUklfTUFOR0xFID0gLTE1MCwKIAlORl9JUDZfUFJJX05BVF9EU1QgPSAtMTAwLAogCU5GX0lQNl9QUklfRklMVEVSID0gMCwKKwlORl9JUDZfUFJJX1NFQ1VSSVRZID0gNTAsCiAJTkZfSVA2X1BSSV9OQVRfU1JDID0gMTAwLAogCU5GX0lQNl9QUklfU0VMSU5VWF9MQVNUID0gMjI1LAogCU5GX0lQNl9QUklfTEFTVCA9IElOVF9NQVgsCiB9OwogCisjaWZkZWYgIF9fS0VSTkVMX18KKwogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIGV4dGVybiBpbnQgaXA2X3JvdXRlX21lX2hhcmRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBfX3N1bTE2IG5mX2lwNl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKQEAgLTgxLDQgKzg0LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X25ldGZpbHRlcl9maW5pKHZvaWQpIHsgcmV0dXJuOyB9CiAjZW5kaWYgLyogQ09ORklHX05FVEZJTFRFUiAqLwogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYgLypfX0xJTlVYX0lQNl9ORVRGSUxURVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCmluZGV4IGJlYzEwNjIuLjlmZjFiNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCkBAIC0xOTMsNyArMTkzLDcgQEAKIAogLyogZmluZWdyYWluZWQgdW5pY2FzdCBoZWxwZXJzOiAqLwogc3RydWN0IHNvY2sgKm5ldGxpbmtfZ2V0c29ja2J5ZmlscChzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1pbnQgbmV0bGlua19hdHRhY2hza2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbm9uYmxvY2ssCitpbnQgbmV0bGlua19hdHRhY2hza2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICBsb25nICp0aW1lbywgc3RydWN0IHNvY2sgKnNzayk7CiB2b2lkIG5ldGxpbmtfZGV0YWNoc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgbmV0bGlua19zZW5kc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczQuaCBiL2luY2x1ZGUvbGludXgvbmZzNC5oCmluZGV4IDg3MjY0OTEuLmVhMDM2NjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzNC5oCkBAIC02NSw5ICs2NSw2IEBACiAjZGVmaW5lIE5GUzRfQUNFX1NVQ0NFU1NGVUxfQUNDRVNTX0FDRV9GTEFHICAgMHgwMDAwMDAxMAogI2RlZmluZSBORlM0X0FDRV9GQUlMRURfQUNDRVNTX0FDRV9GTEFHICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUCAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIE5GUzRfQUNFX09XTkVSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBORlM0X0FDRV9HUk9VUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgTkZTNF9BQ0VfRVZFUllPTkUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCiAKICNkZWZpbmUgTkZTNF9BQ0VfUkVBRF9EQVRBICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIE5GUzRfQUNFX0xJU1RfRElSRUNUT1JZICAgICAgICAgICAgICAgMHgwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKaW5kZXggNDFkMzBjOS4uYTI4NjFkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCkBAIC0yOCwyMCArMjgsMjAgQEAKICNkZWZpbmUgTkZTRF9TVVBQT1JURURfTUlOT1JfVkVSU0lPTgkwCiAKIC8qCi0gKiBTcGVjaWFsIGZsYWdzIGZvciBuZnNkX3Blcm1pc3Npb24uIFRoZXNlIG11c3QgYmUgZGlmZmVyZW50IGZyb20gTUFZX1JFQUQsCi0gKiBNQVlfV1JJVEUsIGFuZCBNQVlfRVhFQy4KKyAqIEZsYWdzIGZvciBuZnNkX3Blcm1pc3Npb24KICAqLwotI2RlZmluZSBNQVlfTk9QCQkJMAotI2RlZmluZSBNQVlfU0FUVFIJCTgKLSNkZWZpbmUgTUFZX1RSVU5DCQkxNgotI2RlZmluZSBNQVlfTE9DSwkJMzIKLSNkZWZpbmUgTUFZX09XTkVSX09WRVJSSURFCTY0Ci0jZGVmaW5lCU1BWV9MT0NBTF9BQ0NFU1MJMTI4IC8qIElSSVggZG9pbmcgbG9jYWwgYWNjZXNzIGNoZWNrIG9uIGRldmljZSBzcGVjaWFsIGZpbGUqLwotI2lmIChNQVlfU0FUVFIgfCBNQVlfVFJVTkMgfCBNQVlfTE9DSyB8IE1BWV9PV05FUl9PVkVSUklERSB8IE1BWV9MT0NBTF9BQ0NFU1MpICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpCi0jIGVycm9yICJwbGVhc2UgdXNlIGEgZGlmZmVyZW50IHZhbHVlIGZvciBNQVlfU0FUVFIgb3IgTUFZX1RSVU5DIG9yIE1BWV9MT0NLIG9yIE1BWV9MT0NBTF9BQ0NFU1Mgb3IgTUFZX09XTkVSX09WRVJSSURFLiIKLSNlbmRpZgotI2RlZmluZSBNQVlfQ1JFQVRFCQkoTUFZX0VYRUN8TUFZX1dSSVRFKQotI2RlZmluZSBNQVlfUkVNT1ZFCQkoTUFZX0VYRUN8TUFZX1dSSVRFfE1BWV9UUlVOQykKKyNkZWZpbmUgTkZTRF9NQVlfTk9QCQkwCisjZGVmaW5lIE5GU0RfTUFZX0VYRUMJCTEgLyogPT0gTUFZX0VYRUMgKi8KKyNkZWZpbmUgTkZTRF9NQVlfV1JJVEUJCTIgLyogPT0gTUFZX1dSSVRFICovCisjZGVmaW5lIE5GU0RfTUFZX1JFQUQJCTQgLyogPT0gTUFZX1JFQUQgKi8KKyNkZWZpbmUgTkZTRF9NQVlfU0FUVFIJCTgKKyNkZWZpbmUgTkZTRF9NQVlfVFJVTkMJCTE2CisjZGVmaW5lIE5GU0RfTUFZX0xPQ0sJCTMyCisjZGVmaW5lIE5GU0RfTUFZX09XTkVSX09WRVJSSURFCTY0CisjZGVmaW5lIE5GU0RfTUFZX0xPQ0FMX0FDQ0VTUwkxMjggLyogSVJJWCBkb2luZyBsb2NhbCBhY2Nlc3MgY2hlY2sgb24gZGV2aWNlIHNwZWNpYWwgZmlsZSovCisKKyNkZWZpbmUgTkZTRF9NQVlfQ1JFQVRFCQkoTkZTRF9NQVlfRVhFQ3xORlNEX01BWV9XUklURSkKKyNkZWZpbmUgTkZTRF9NQVlfUkVNT1ZFCQkoTkZTRF9NQVlfRVhFQ3xORlNEX01BWV9XUklURXxORlNEX01BWV9UUlVOQykKIAogLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciByZWFkZGlyCkBAIC01NCw2ICs1NCw3IEBACiBleHRlcm4gc3RydWN0IHN2Y19wcm9ncmFtCW5mc2RfcHJvZ3JhbTsKIGV4dGVybiBzdHJ1Y3Qgc3ZjX3ZlcnNpb24JbmZzZF92ZXJzaW9uMiwgbmZzZF92ZXJzaW9uMywKIAkJCQluZnNkX3ZlcnNpb240OworZXh0ZXJuIHN0cnVjdCBtdXRleAkJbmZzZF9tdXRleDsKIGV4dGVybiBzdHJ1Y3Qgc3ZjX3NlcnYJCSpuZnNkX3NlcnY7CiAKIGV4dGVybiBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX2V4cG9ydHNfb3A7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdGUuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oCmluZGV4IGRiMzQ4ZjcuLmQwZmUyZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oCkBAIC05OCw4ICs5OCw2IEBACiAJdTMyICAgICAgICAgICAgICAgICAgICAgY2JfaWRlbnQ7CiAJLyogUlBDIGNsaWVudCBpbmZvICovCiAJYXRvbWljX3QJCWNiX3NldDsgICAgIC8qIHN1Y2Nlc3NmdWwgQ0JfTlVMTCBjYWxsICovCi0Jc3RydWN0IHJwY19wcm9ncmFtICAgICAgY2JfcHJvZ3JhbTsKLQlzdHJ1Y3QgcnBjX3N0YXQgICAgICAgICBjYl9zdGF0OwogCXN0cnVjdCBycGNfY2xudCAqICAgICAgIGNiX2NsaWVudDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKaW5kZXggZWE2NTE3ZS4uMmJlN2M2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKQEAgLTEyMiwxMyArMTIyLDEzIEBACiAJTkw4MDIxMV9DTURfTkVXX1NUQVRJT04sCiAJTkw4MDIxMV9DTURfREVMX1NUQVRJT04sCiAKLQkvKiBhZGQgY29tbWFuZHMgaGVyZSAqLwotCiAJTkw4MDIxMV9DTURfR0VUX01QQVRILAogCU5MODAyMTFfQ01EX1NFVF9NUEFUSCwKIAlOTDgwMjExX0NNRF9ORVdfTVBBVEgsCiAJTkw4MDIxMV9DTURfREVMX01QQVRILAogCisJLyogYWRkIGNvbW1hbmRzIGhlcmUgKi8KKwogCS8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqLwogCV9fTkw4MDIxMV9DTURfQUZURVJfTEFTVCwKIAlOTDgwMjExX0NNRF9NQVggPSBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1QgLSAxCkBAIC0yMzAsMTggKzIzMCwyMSBAQAogCiAJTkw4MDIxMV9BVFRSX01OVFJfRkxBR1MsCiAKLQkvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi8KLQogCU5MODAyMTFfQVRUUl9NRVNIX0lELAogCU5MODAyMTFfQVRUUl9TVEFfUExJTktfQUNUSU9OLAogCU5MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUCwKIAlOTDgwMjExX0FUVFJfTVBBVEhfSU5GTywKIAorCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLworCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKIAlOTDgwMjExX0FUVFJfTUFYID0gX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCAtIDEKIH07CiAKLSNkZWZpbmUgTkw4MDIxMV9NQVhfU1VQUF9SQVRFUwkzMgorI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX1JBVEVTCQkJMzIKKyNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZCTAKKyNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVkJMTYKKyNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkJMjQKIAogLyoqCiAgKiBlbnVtIG5sODAyMTFfaWZ0eXBlIC0gKHZpcnR1YWwpIGludGVyZmFjZSB0eXBlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ub3RpZmllci5oIGIvaW5jbHVkZS9saW51eC9ub3RpZmllci5oCmluZGV4IDBmZjYyMjQuLmJkM2Q3MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgKQEAgLTE5Nyw2ICsxOTcsNyBAQAogI2RlZmluZSBORVRERVZfR09JTkdfRE9XTgkweDAwMDkKICNkZWZpbmUgTkVUREVWX0NIQU5HRU5BTUUJMHgwMDBBCiAjZGVmaW5lIE5FVERFVl9GRUFUX0NIQU5HRQkweDAwMEIKKyNkZWZpbmUgTkVUREVWX0JPTkRJTkdfRkFJTE9WRVIgMHgwMDBDCiAKICNkZWZpbmUgU1lTX0RPV04JMHgwMDAxCS8qIE5vdGlmeSBvZiBzeXN0ZW0gZG93biAqLwogI2RlZmluZSBTWVNfUkVTVEFSVAlTWVNfRE9XTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L29mX2dwaW8uaAppbmRleCAyZWU5N2U5Li42N2RiMTAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX2dwaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX2dwaW8uaApAQCAtMTUsNyArMTUsNyBAQAogI2RlZmluZSBfX0xJTlVYX09GX0dQSU9fSAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2lmZGVmIENPTkZJR19PRl9HUElPCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggNmJlNmE3OS4uMTE5YWU3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTE5NTAsNiArMTk1MCw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlgyXzU3MDgJCTB4MTY0YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAyRkUJMHgxNjRkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzEwCQkweDE2NGUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OWDJfNTc3MTEJCTB4MTY0ZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05YMl81NzcxMUUJMHgxNjUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDUJMHgxNjUzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDVfMgkweDE2NTQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcyMAkweDE2NTgKQEAgLTE5ODIsNiArMTk4NCw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODdNCTB4MTY5MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgyCTB4MTY5NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg0CTB4MTY5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg1CTB4MTY5OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg2CTB4MTY5YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3CTB4MTY5YgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg4CTB4MTY5YwpAQCAtMjM2OCw2ICsyMzcxLDE0IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV83CTB4MjkxNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfOAkweDI5MTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg1NVBNX0hCCTB4MzM0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfVEJHNAkweDM0MjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1RCRzUJMHgzNDJhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9UQkc2CTB4MzQyYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfVEJHNwkweDM0MmMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1RCRzAJMHgzNDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9UQkcxCTB4MzQzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfVEJHMgkweDM0MzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1RCRzMJMHgzNDMzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MzBfSEIJMHgzNTc1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MzBfQ0dDCTB4MzU3NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1R01fSEIJMHgzNTgwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaCBiL2luY2x1ZGUvbGludXgvcGt0X2Nscy5oCmluZGV4IDk5ZWZiZWQuLjdjZjc4MjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaApAQCAtMzc0LDYgKzM3NCw3IEBACiAJVENBX0ZMT1dfQUNULAogCVRDQV9GTE9XX1BPTElDRSwKIAlUQ0FfRkxPV19FTUFUQ0hFUywKKwlUQ0FfRkxPV19QRVJUVVJCLAogCV9fVENBX0ZMT1dfTUFYCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9wa3Rfc2NoZWQuaAppbmRleCBkYmI3YWMzLi5lNWRlNDIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgKQEAgLTg1LDYgKzg1LDI2IEBACiAKICNkZWZpbmUgVENfUlRBQl9TSVpFCTEwMjQKIAorc3RydWN0IHRjX3NpemVzcGVjIHsKKwl1bnNpZ25lZCBjaGFyCWNlbGxfbG9nOworCXVuc2lnbmVkIGNoYXIJc2l6ZV9sb2c7CisJc2hvcnQJCWNlbGxfYWxpZ247CisJaW50CQlvdmVyaGVhZDsKKwl1bnNpZ25lZCBpbnQJbGlua2xheWVyOworCXVuc2lnbmVkIGludAltcHU7CisJdW5zaWduZWQgaW50CW10dTsKKwl1bnNpZ25lZCBpbnQJdHNpemU7Cit9OworCitlbnVtIHsKKwlUQ0FfU1RBQl9VTlNQRUMsCisJVENBX1NUQUJfQkFTRSwKKwlUQ0FfU1RBQl9EQVRBLAorCV9fVENBX1NUQUJfTUFYCit9OworCisjZGVmaW5lIFRDQV9TVEFCX01BWCAoX19UQ0FfU1RBQl9NQVggLSAxKQorCiAvKiBGSUZPIHNlY3Rpb24gKi8KIAogc3RydWN0IHRjX2ZpZm9fcW9wdApAQCAtMTAzLDE1ICsxMjMsNiBAQAogCV9fdTgJcHJpb21hcFtUQ19QUklPX01BWCsxXTsJLyogTWFwOiBsb2dpY2FsIHByaW9yaXR5IC0+IFBSSU8gYmFuZCAqLwogfTsKIAotZW51bQotewotCVRDQV9QUklPX1VOU1BFQywKLQlUQ0FfUFJJT19NUSwKLQlfX1RDQV9QUklPX01BWAotfTsKLQotI2RlZmluZSBUQ0FfUFJJT19NQVggICAgKF9fVENBX1BSSU9fTUFYIC0gMSkKLQogLyogVEJGIHNlY3Rpb24gKi8KIAogc3RydWN0IHRjX3RiZl9xb3B0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcC1jb21wLmggYi9pbmNsdWRlL2xpbnV4L3BwcC1jb21wLmgKaW5kZXggZTg2YTdhNS4uYjhkNGRkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcHAtY29tcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHBwLWNvbXAuaApAQCAtMjMsOCArMjMsNiBAQAogICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBBVVNUUkFMSUFOIE5BVElPTkFMIFVOSVZFUlNJVFkgSEFTIE5PCiAgKiBPQkxJR0FUSU9OIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywKICAqIE9SIE1PRElGSUNBVElPTlMuCi0gKgotICogJElkOiBwcHAtY29tcC5oLHYgMS42IDE5OTcvMTEvMjcgMDY6MDQ6NDQgcGF1bHVzIEV4cCAkCiAgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaAppbmRleCBjNmIxM2ZmLi42ZThhZGM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCkBAIC0xLDUgKzEsMyBAQAotLyoJJElkOiBwcHBfZGVmcy5oLHYgMS4yIDE5OTQvMDkvMjEgMDE6MzE6MDYgcGF1bHVzIEV4cCAkCSovCi0KIC8qCiAgKiBwcHBfZGVmcy5oIC0gUFBQIGRlZmluaXRpb25zLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKaW5kZXggZmZmMWQyNy4uMTVhOWVhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKQEAgLTMwNSw4ICszMDUsNiBAQAogCXJldHVybiBwZGUtPnBhcmVudC0+ZGF0YTsKIH0KIAotc3RydWN0IG5ldCAqZ2V0X3Byb2NfbmV0KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCiBzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgewogCXN0cnVjdCBwaWQgKnBpZDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmgKaW5kZXggNzhiZmRlYS4uZTk4OTAwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL2JpdG1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaApAQCAtMjIxLDYgKzIyMSw3IEBACiAJdW5zaWduZWQgbG9uZyBzeW5jY2h1bms7CiAKIAlfX3U2NAlldmVudHNfY2xlYXJlZDsKKwlpbnQgbmVlZF9zeW5jOwogCiAJLyogYml0bWFwIHNwaW5sb2NrICovCiAJc3BpbmxvY2tfdCBsb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oIGIvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oCmluZGV4IGJhMTU0NjkuLjdlMzc1MTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbGluZWFyLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAlzdHJ1Y3QgbGluZWFyX3ByaXZhdGVfZGF0YSAqcHJldjsJLyogZWFybGllciB2ZXJzaW9uICovCiAJZGV2X2luZm9fdAkJKipoYXNoX3RhYmxlOwogCXNlY3Rvcl90CQloYXNoX3NwYWNpbmc7Ci0Jc2VjdG9yX3QJCWFycmF5X3NpemU7CisJc2VjdG9yX3QJCWFycmF5X3NlY3RvcnM7CiAJaW50CQkJcHJlc2hpZnQ7IC8qIHNoaWZ0IGJlZm9yZSBkaXZpZGluZyBieSBoYXNoX3NwYWNpbmcgKi8KIAlkZXZfaW5mb190CQlkaXNrc1swXTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCmluZGV4IGI3Mzg2YWUuLmRjMGUzZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCkBAIC05NSw3ICs5NSw3IEBACiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJ3KTsKIGV4dGVybiB2b2lkIG1kX2RvX3N5bmMobWRkZXZfdCAqbWRkZXYpOwogZXh0ZXJuIHZvaWQgbWRfbmV3X2V2ZW50KG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiB2b2lkIG1kX2FsbG93X3dyaXRlKG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiBpbnQgbWRfYWxsb3dfd3JpdGUobWRkZXZfdCAqbWRkZXYpOwogZXh0ZXJuIHZvaWQgbWRfd2FpdF9mb3JfYmxvY2tlZF9yZGV2KG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KTsKIAogI2VuZGlmIC8qIENPTkZJR19NRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9rLmgKaW5kZXggM2RlYTlmNS4uOWYyNTQ5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oCkBAIC01OSw3ICs1OSw3IEBACiAJaW50CQlzYl9sb2FkZWQ7CiAJX191NjQJCXNiX2V2ZW50czsKIAlzZWN0b3JfdAlkYXRhX29mZnNldDsJLyogc3RhcnQgb2YgZGF0YSBpbiBhcnJheSAqLwotCXNlY3Rvcl90CXNiX29mZnNldDsKKwlzZWN0b3JfdCAJc2Jfc3RhcnQ7CS8qIG9mZnNldCBvZiB0aGUgc3VwZXIgYmxvY2sgKGluIDUxMmJ5dGUgc2VjdG9ycykgKi8KIAlpbnQJCXNiX3NpemU7CS8qIGJ5dGVzIGluIHRoZSBzdXBlcmJsb2NrICovCiAJaW50CQlwcmVmZXJyZWRfbWlub3I7CS8qIGF1dG9ydW4gc3VwcG9ydCAqLwogCkBAIC04Nyw2ICs4Nyw5IEBACiAjZGVmaW5lIEJsb2NrZWQJCTgJCS8qIEFuIGVycm9yIG9jY3VyZWQgb24gYW4gZXh0ZXJuYWxseQogCQkJCQkgKiBtYW5hZ2VkIGFycmF5LCBkb24ndCBhbGxvdyB3cml0ZXMKIAkJCQkJICogdW50aWwgaXQgaXMgY2xlYXJlZCAqLworI2RlZmluZSBTdGF0ZUNoYW5nZWQJOQkJLyogRmF1bHR5IG9yIEJsb2NrZWQgaGFzIGNoYW5nZWQgZHVyaW5nCisJCQkJCSAqIGludGVycnVwdCwgc28gaXQgbmVlZHMgdG8gYmUKKwkJCQkJICogbm90aWZpZWQgYnkgdGhlIHRocmVhZCAqLwogCXdhaXRfcXVldWVfaGVhZF90IGJsb2NrZWRfd2FpdDsKIAogCWludCBkZXNjX25yOwkJCS8qIGRlc2NyaXB0b3IgaW5kZXggaW4gdGhlIHN1cGVyYmxvY2sgKi8KQEAgLTE0Nyw3ICsxNTAsNyBAQAogCWludAkJCQlyYWlkX2Rpc2tzOwogCWludAkJCQltYXhfZGlza3M7CiAJc2VjdG9yX3QJCQlzaXplOyAvKiB1c2VkIHNpemUgb2YgY29tcG9uZW50IGRldmljZXMgKi8KLQlzZWN0b3JfdAkJCWFycmF5X3NpemU7IC8qIGV4cG9ydGVkIGFycmF5IHNpemUgKi8KKwlzZWN0b3JfdAkJCWFycmF5X3NlY3RvcnM7IC8qIGV4cG9ydGVkIGFycmF5IHNpemUgKi8KIAlfX3U2NAkJCQlldmVudHM7CiAKIAljaGFyCQkJCXV1aWRbMTZdOwpAQCAtMTg4LDYgKzE5MSw3IEBACiAJICogTkVFREVEOiAgIHdlIG1pZ2h0IG5lZWQgdG8gc3RhcnQgYSByZXN5bmMvcmVjb3ZlcgogCSAqIFJVTk5JTkc6ICBhIHRocmVhZCBpcyBydW5uaW5nLCBvciBhYm91dCB0byBiZSBzdGFydGVkCiAJICogU1lOQzogICAgIGFjdHVhbGx5IGRvaW5nIGEgcmVzeW5jLCBub3QgYSByZWNvdmVyeQorCSAqIFJFQ09WRVI6ICBkb2luZyByZWNvdmVyeSwgb3IgbmVlZCB0byB0cnkgaXQuCiAJICogSU5UUjogICAgIHJlc3luYyBuZWVkcyB0byBiZSBhYm9ydGVkIGZvciBzb21lIHJlYXNvbgogCSAqIERPTkU6ICAgICB0aHJlYWQgaXMgZG9uZSBhbmQgaXMgd2FpdGluZyB0byBiZSByZWFwZWQKIAkgKiBSRVFVRVNUOiAgdXNlci1zcGFjZSBoYXMgcmVxdWVzdGVkIGEgc3luYyAodXNlZCB3aXRoIFNZTkMpCkBAIC0xOTgsNiArMjAyLDcgQEAKIAkgKi8KICNkZWZpbmUJTURfUkVDT1ZFUllfUlVOTklORwkwCiAjZGVmaW5lCU1EX1JFQ09WRVJZX1NZTkMJMQorI2RlZmluZQlNRF9SRUNPVkVSWV9SRUNPVkVSCTIKICNkZWZpbmUJTURfUkVDT1ZFUllfSU5UUgkzCiAjZGVmaW5lCU1EX1JFQ09WRVJZX0RPTkUJNAogI2RlZmluZQlNRF9SRUNPVkVSWV9ORUVERUQJNQpAQCAtMjEwLDcgKzIxNSw4IEBACiAKIAlpbnQJCQkJaW5fc3luYzsJLyoga25vdyB0byBub3QgbmVlZCByZXN5bmMgKi8KIAlzdHJ1Y3QgbXV0ZXgJCQlyZWNvbmZpZ19tdXRleDsKLQlhdG9taWNfdAkJCWFjdGl2ZTsKKwlhdG9taWNfdAkJCWFjdGl2ZTsJCS8qIGdlbmVyYWwgcmVmY291bnQgKi8KKwlhdG9taWNfdAkJCW9wZW5lcnM7CS8qIG51bWJlciBvZiBhY3RpdmUgb3BlbnMgKi8KIAogCWludAkJCQljaGFuZ2VkOwkvKiB0cnVlIGlmIHdlIG1pZ2h0IG5lZWQgdG8gcmVyZWFkIHBhcnRpdGlvbiBpbmZvICovCiAJaW50CQkJCWRlZ3JhZGVkOwkvKiB3aGV0aGVyIG1kIHNob3VsZCBjb25zaWRlcgpAQCAtMjI3LDYgKzIzMyw4IEBACiAJYXRvbWljX3QJCQlyZWNvdmVyeV9hY3RpdmU7IC8qIGJsb2NrcyBzY2hlZHVsZWQsIGJ1dCBub3Qgd3JpdHRlbiAqLwogCXdhaXRfcXVldWVfaGVhZF90CQlyZWNvdmVyeV93YWl0OwogCXNlY3Rvcl90CQkJcmVjb3ZlcnlfY3A7CisJc2VjdG9yX3QJCQlyZXN5bmNfbWluOwkvKiB1c2VyIHJlcXVlc3RlZCBzeW5jCisJCQkJCQkJICogc3RhcnRzIGhlcmUgKi8KIAlzZWN0b3JfdAkJCXJlc3luY19tYXg7CS8qIHJlc3luYyBzaG91bGQgcGF1c2UKIAkJCQkJCQkgKiB3aGVuIGl0IGdldHMgaGVyZSAqLwogCkBAIC0zMzEsNiArMzM5LDkgQEAKICNkZWZpbmUgcmRldl9mb3JfZWFjaChyZGV2LCB0bXAsIG1kZGV2KQkJCQlcCiAJcmRldl9mb3JfZWFjaF9saXN0KHJkZXYsIHRtcCwgKG1kZGV2KS0+ZGlza3MpCiAKKyNkZWZpbmUgcmRldl9mb3JfZWFjaF9yY3UocmRldiwgbWRkZXYpCQkJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCAmKChtZGRldiktPmRpc2tzKSwgc2FtZV9zZXQpCisKIHR5cGVkZWYgc3RydWN0IG1ka190aHJlYWRfcyB7CiAJdm9pZAkJCSgqcnVuKSAobWRkZXZfdCAqbWRkZXYpOwogCW1kZGV2X3QJCQkqbWRkZXY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaAppbmRleCAzZjJjZDk4Li44YjRkZTRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKQEAgLTQzLDE0ICs0MywxMSBAQAogICovCiAjZGVmaW5lIE1EX1JFU0VSVkVEX0JZVEVTCQkoNjQgKiAxMDI0KQogI2RlZmluZSBNRF9SRVNFUlZFRF9TRUNUT1JTCQkoTURfUkVTRVJWRURfQllURVMgLyA1MTIpCi0jZGVmaW5lIE1EX1JFU0VSVkVEX0JMT0NLUwkJKE1EX1JFU0VSVkVEX0JZVEVTIC8gQkxPQ0tfU0laRSkKIAogI2RlZmluZSBNRF9ORVdfU0laRV9TRUNUT1JTKHgpCQkoKHggJiB+KE1EX1JFU0VSVkVEX1NFQ1RPUlMgLSAxKSkgLSBNRF9SRVNFUlZFRF9TRUNUT1JTKQotI2RlZmluZSBNRF9ORVdfU0laRV9CTE9DS1MoeCkJCSgoeCAmIH4oTURfUkVTRVJWRURfQkxPQ0tTIC0gMSkpIC0gTURfUkVTRVJWRURfQkxPQ0tTKQogCiAjZGVmaW5lIE1EX1NCX0JZVEVTCQkJNDA5NgogI2RlZmluZSBNRF9TQl9XT1JEUwkJCShNRF9TQl9CWVRFUyAvIDQpCi0jZGVmaW5lIE1EX1NCX0JMT0NLUwkJCShNRF9TQl9CWVRFUyAvIEJMT0NLX1NJWkUpCiAjZGVmaW5lIE1EX1NCX1NFQ1RPUlMJCQkoTURfU0JfQllURVMgLyA1MTIpCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oCmluZGV4IGYwODI3ZDMuLjNiMjY3MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oCkBAIC0xNTgsNiArMTU4LDQzIEBACiAgKiAgICB0aGUgY29tcHV0ZSBibG9jayBjb21wbGV0ZXMuCiAgKi8KIAorLyoKKyAqIE9wZXJhdGlvbnMgc3RhdGUgLSBpbnRlcm1lZGlhdGUgc3RhdGVzIHRoYXQgYXJlIHZpc2libGUgb3V0c2lkZSBvZiBzaC0+bG9jaworICogSW4gZ2VuZXJhbCBfaWRsZSBpbmRpY2F0ZXMgbm90aGluZyBpcyBydW5uaW5nLCBfcnVuIGluZGljYXRlcyBhIGRhdGEKKyAqIHByb2Nlc3Npbmcgb3BlcmF0aW9uIGlzIGFjdGl2ZSwgYW5kIF9yZXN1bHQgbWVhbnMgdGhlIGRhdGEgcHJvY2Vzc2luZyByZXN1bHQKKyAqIGlzIHN0YWJsZSBhbmQgY2FuIGJlIGFjdGVkIHVwb24uICBGb3Igc2ltcGxlIG9wZXJhdGlvbnMgbGlrZSBiaW9maWxsIGFuZAorICogY29tcHV0ZSB0aGF0IG9ubHkgaGF2ZSBhbiBfaWRsZSBhbmQgX3J1biBzdGF0ZSB0aGV5IGFyZSBpbmRpY2F0ZWQgd2l0aAorICogc2gtPnN0YXRlIGZsYWdzIChTVFJJUEVfQklPRklMTF9SVU4gYW5kIFNUUklQRV9DT01QVVRFX1JVTikKKyAqLworLyoqCisgKiBlbnVtIGNoZWNrX3N0YXRlcyAtIGhhbmRsZXMgc3luY2luZyAvIHJlcGFpcmluZyBhIHN0cmlwZQorICogQGNoZWNrX3N0YXRlX2lkbGUgLSBjaGVjayBvcGVyYXRpb25zIGFyZSBxdWllc2NlZAorICogQGNoZWNrX3N0YXRlX3J1biAtIGNoZWNrIG9wZXJhdGlvbiBpcyBydW5uaW5nCisgKiBAY2hlY2tfc3RhdGVfcmVzdWx0IC0gc2V0IG91dHNpZGUgbG9jayB3aGVuIGNoZWNrIHJlc3VsdCBpcyB2YWxpZAorICogQGNoZWNrX3N0YXRlX2NvbXB1dGVfcnVuIC0gY2hlY2sgZmFpbGVkIGFuZCB3ZSBhcmUgcmVwYWlyaW5nCisgKiBAY2hlY2tfc3RhdGVfY29tcHV0ZV9yZXN1bHQgLSBzZXQgb3V0c2lkZSBsb2NrIHdoZW4gY29tcHV0ZSByZXN1bHQgaXMgdmFsaWQKKyAqLworZW51bSBjaGVja19zdGF0ZXMgeworCWNoZWNrX3N0YXRlX2lkbGUgPSAwLAorCWNoZWNrX3N0YXRlX3J1biwgLyogcGFyaXR5IGNoZWNrICovCisJY2hlY2tfc3RhdGVfY2hlY2tfcmVzdWx0LAorCWNoZWNrX3N0YXRlX2NvbXB1dGVfcnVuLCAvKiBwYXJpdHkgcmVwYWlyICovCisJY2hlY2tfc3RhdGVfY29tcHV0ZV9yZXN1bHQsCit9OworCisvKioKKyAqIGVudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIC0gaGFuZGxlcyB3cml0aW5nIG9yIGV4cGFuZGluZyBhIHN0cmlwZQorICovCitlbnVtIHJlY29uc3RydWN0X3N0YXRlcyB7CisJcmVjb25zdHJ1Y3Rfc3RhdGVfaWRsZSA9IDAsCisJcmVjb25zdHJ1Y3Rfc3RhdGVfcHJleG9yX2RyYWluX3J1biwJLyogcHJleG9yLXdyaXRlICovCisJcmVjb25zdHJ1Y3Rfc3RhdGVfZHJhaW5fcnVuLAkJLyogd3JpdGUgKi8KKwlyZWNvbnN0cnVjdF9zdGF0ZV9ydW4sCQkJLyogZXhwYW5kICovCisJcmVjb25zdHJ1Y3Rfc3RhdGVfcHJleG9yX2RyYWluX3Jlc3VsdCwKKwlyZWNvbnN0cnVjdF9zdGF0ZV9kcmFpbl9yZXN1bHQsCisJcmVjb25zdHJ1Y3Rfc3RhdGVfcmVzdWx0LAorfTsKKwogc3RydWN0IHN0cmlwZV9oZWFkIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQloYXNoOwogCXN0cnVjdCBsaXN0X2hlYWQJbHJ1OwkJCS8qIGluYWN0aXZlX2xpc3Qgb3IgaGFuZGxlX2xpc3QgKi8KQEAgLTE2OSwxOSArMjA2LDEzIEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIAlpbnQJCQlibV9zZXE7CS8qIHNlcXVlbmNlIG51bWJlciBmb3IgYml0bWFwIGZsdXNoZXMgKi8KIAlpbnQJCQlkaXNrczsJCQkvKiBkaXNrcyBpbiBzdHJpcGUgKi8KKwllbnVtIGNoZWNrX3N0YXRlcwljaGVja19zdGF0ZTsKKwllbnVtIHJlY29uc3RydWN0X3N0YXRlcyByZWNvbnN0cnVjdF9zdGF0ZTsKIAkvKiBzdHJpcGVfb3BlcmF0aW9ucwotCSAqIEBwZW5kaW5nIC0gcGVuZGluZyBvcHMgZmxhZ3MgKHNldCBmb3IgcmVxdWVzdC0+aXNzdWUtPmNvbXBsZXRlKQotCSAqIEBhY2sgLSBzdWJtaXR0ZWQgb3BzIGZsYWdzIChzZXQgZm9yIGlzc3VlLT5jb21wbGV0ZSkKLQkgKiBAY29tcGxldGUgLSBjb21wbGV0ZWQgb3BzIGZsYWdzIChzZXQgZm9yIGNvbXBsZXRlKQogCSAqIEB0YXJnZXQgLSBTVFJJUEVfT1BfQ09NUFVURV9CTEsgdGFyZ2V0Ci0JICogQGNvdW50IC0gcmFpZDVfcnVuc19vcHMgaXMgc2V0IHRvIHJ1biB3aGVuIHRoaXMgaXMgbm9uLXplcm8KIAkgKi8KIAlzdHJ1Y3Qgc3RyaXBlX29wZXJhdGlvbnMgewotCQl1bnNpZ25lZCBsb25nCSAgIHBlbmRpbmc7Ci0JCXVuc2lnbmVkIGxvbmcJICAgYWNrOwotCQl1bnNpZ25lZCBsb25nCSAgIGNvbXBsZXRlOwogCQlpbnQJCSAgIHRhcmdldDsKLQkJaW50CQkgICBjb3VudDsKIAkJdTMyCQkgICB6ZXJvX3N1bV9yZXN1bHQ7CiAJfSBvcHM7CiAJc3RydWN0IHI1ZGV2IHsKQEAgLTIwMiw2ICsyMzMsNyBAQAogCWludCBsb2NrZWQsIHVwdG9kYXRlLCB0b19yZWFkLCB0b193cml0ZSwgZmFpbGVkLCB3cml0dGVuOwogCWludCB0b19maWxsLCBjb21wdXRlLCByZXFfY29tcHV0ZSwgbm9uX292ZXJ3cml0ZTsKIAlpbnQgZmFpbGVkX251bTsKKwl1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0OwogfTsKIAogLyogcjZfc3RhdGUgLSBleHRyYSBzdGF0ZSBkYXRhIG9ubHkgcmVsZXZhbnQgdG8gcjYgKi8KQEAgLTIyOCw5ICsyNjAsNyBAQAogI2RlZmluZQlSNV9XYW50ZmlsbAkxMiAvKiBkZXYtPnRvcmVhZCBjb250YWlucyBhIGJpbyB0aGF0IG5lZWRzCiAJCQkJICAgICogZmlsbGluZwogCQkJCSAgICAqLwotI2RlZmluZQlSNV9XYW50cHJleG9yCTEzIC8qIGRpc3Rpbmd1aXNoIGJsb2NrcyByZWFkeSBmb3Igcm13IGZyb20KLQkJCQkgICAgKiBvdGhlciAidG93cml0ZXMiCi0JCQkJICAgICovCisjZGVmaW5lIFI1X1dhbnRkcmFpbgkxMyAvKiBkZXYtPnRvd3JpdGUgbmVlZHMgdG8gYmUgZHJhaW5lZCAqLwogLyoKICAqIFdyaXRlIG1ldGhvZAogICovCkBAIC0yNTQsOCArMjg0LDEwIEBACiAjZGVmaW5lCVNUUklQRV9FWFBBTkRfUkVBRFkJMTEKICNkZWZpbmUJU1RSSVBFX0lPX1NUQVJURUQJMTIgLyogZG8gbm90IGNvdW50IHRvd2FyZHMgJ2J5cGFzc19jb3VudCcgKi8KICNkZWZpbmUJU1RSSVBFX0ZVTExfV1JJVEUJMTMgLyogYWxsIGJsb2NrcyBhcmUgc2V0IHRvIGJlIG92ZXJ3cml0dGVuICovCisjZGVmaW5lCVNUUklQRV9CSU9GSUxMX1JVTgkxNAorI2RlZmluZQlTVFJJUEVfQ09NUFVURV9SVU4JMTUKIC8qCi0gKiBPcGVyYXRpb25zIGZsYWdzIChpbiBpc3N1ZSBvcmRlcikKKyAqIE9wZXJhdGlvbiByZXF1ZXN0IGZsYWdzCiAgKi8KICNkZWZpbmUgU1RSSVBFX09QX0JJT0ZJTEwJMAogI2RlZmluZSBTVFJJUEVfT1BfQ09NUFVURV9CTEsJMQpAQCAtMjYzLDE0ICsyOTUsNiBAQAogI2RlZmluZSBTVFJJUEVfT1BfQklPRFJBSU4JMwogI2RlZmluZSBTVFJJUEVfT1BfUE9TVFhPUgk0CiAjZGVmaW5lIFNUUklQRV9PUF9DSEVDSwk1Ci0jZGVmaW5lIFNUUklQRV9PUF9JTwkJNgotCi0vKiBtb2RpZmllcnMgdG8gdGhlIGJhc2Ugb3BlcmF0aW9ucwotICogU1RSSVBFX09QX01PRF9SRVBBSVJfUEQgLSBjb21wdXRlIHRoZSBwYXJpdHkgYmxvY2sgYW5kIHdyaXRlIGl0IGJhY2sKLSAqIFNUUklQRV9PUF9NT0RfRE1BX0NIRUNLIC0gcGFyaXR5IGlzIG5vdCBjb3JydXB0ZWQgYnkgdGhlIGNoZWNrCi0gKi8KLSNkZWZpbmUgU1RSSVBFX09QX01PRF9SRVBBSVJfUEQgNwotI2RlZmluZSBTVFJJUEVfT1BfTU9EX0RNQV9DSEVDSyA4CiAKIC8qCiAgKiBQbHVnZ2luZzoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmZraWxsLmggYi9pbmNsdWRlL2xpbnV4L3Jma2lsbC5oCmluZGV4IGUzYWIyMWQuLmM1ZjZlNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmZraWxsLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZmtpbGwuaApAQCAtMzQsMjYgKzM0LDM3IEBACiAgKiBSRktJTExfVFlQRV9CTFVFVE9PVEg6IHN3aXRjaCBpcyBvbiBhIGJsdWV0b290aCBkZXZpY2UuCiAgKiBSRktJTExfVFlQRV9VV0I6IHN3aXRjaCBpcyBvbiBhIHVsdHJhIHdpZGViYW5kIGRldmljZS4KICAqIFJGS0lMTF9UWVBFX1dJTUFYOiBzd2l0Y2ggaXMgb24gYSBXaU1BWCBkZXZpY2UuCisgKiBSRktJTExfVFlQRV9XV0FOOiBzd2l0Y2ggaXMgb24gYSB3aXJlbGVzcyBXQU4gZGV2aWNlLgogICovCiBlbnVtIHJma2lsbF90eXBlIHsKIAlSRktJTExfVFlQRV9XTEFOICwKIAlSRktJTExfVFlQRV9CTFVFVE9PVEgsCiAJUkZLSUxMX1RZUEVfVVdCLAogCVJGS0lMTF9UWVBFX1dJTUFYLAorCVJGS0lMTF9UWVBFX1dXQU4sCiAJUkZLSUxMX1RZUEVfTUFYLAogfTsKIAogZW51bSByZmtpbGxfc3RhdGUgewotCVJGS0lMTF9TVEFURV9PRkYJPSAwLAotCVJGS0lMTF9TVEFURV9PTgkJPSAxLAorCVJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQgPSAwLAkvKiBSYWRpbyBvdXRwdXQgYmxvY2tlZCAqLworCVJGS0lMTF9TVEFURV9VTkJMT0NLRUQgICAgPSAxLAkvKiBSYWRpbyBvdXRwdXQgYWxsb3dlZCAqLworCVJGS0lMTF9TVEFURV9IQVJEX0JMT0NLRUQgPSAyLAkvKiBPdXRwdXQgYmxvY2tlZCwgbm9uLW92ZXJyaWRlYWJsZSAqLwogfTsKIAorLyoKKyAqIFRoZXNlIGFyZSBERVBSRUNBVEVELCBkcml2ZXJzIHVzaW5nIHRoZW0gc2hvdWxkIGJlIHZlcmlmaWVkIHRvCisgKiBjb21wbHkgd2l0aCB0aGUgcmZraWxsIHVzYWdlIGd1aWRlbGluZXMgaW4gRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0CisgKiBhbmQgdGhlbiBjb252ZXJ0ZWQgdG8gdXNlIHRoZSBuZXcgbmFtZXMgZm9yIHJma2lsbF9zdGF0ZQorICovCisjZGVmaW5lIFJGS0lMTF9TVEFURV9PRkYgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRAorI2RlZmluZSBSRktJTExfU1RBVEVfT04gIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQKKwogLyoqCiAgKiBzdHJ1Y3QgcmZraWxsIC0gcmZraWxsIGNvbnRyb2wgc3RydWN0dXJlLgogICogQG5hbWU6IE5hbWUgb2YgdGhlIHN3aXRjaC4KICAqIEB0eXBlOiBSYWRpbyB0eXBlIHdoaWNoIHRoZSBidXR0b24gY29udHJvbHMsIHRoZSB2YWx1ZSBzdG9yZWQKICAqCWhlcmUgc2hvdWxkIGJlIGEgdmFsdWUgZnJvbSBlbnVtIHJma2lsbF90eXBlLgotICogQHN0YXRlOiBTdGF0ZSBvZiB0aGUgc3dpdGNoIChvbi9vZmYpLgorICogQHN0YXRlOiBTdGF0ZSBvZiB0aGUgc3dpdGNoLCAiVU5CTE9DS0VEIiBtZWFucyByYWRpbyBjYW4gb3BlcmF0ZS4KICAqIEB1c2VyX2NsYWltX3Vuc3VwcG9ydGVkOiBXaGV0aGVyIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBleGNsdXNpdmUKICAqCVJGLWtpbGwgY29udHJvbCBieSB1c2Vyc3BhY2UuIFNldCB0aGlzIGJlZm9yZSByZWdpc3RlcmluZy4KICAqIEB1c2VyX2NsYWltOiBTZXQgd2hlbiB0aGUgc3dpdGNoIGlzIGNvbnRyb2xsZWQgZXhsdXNpdmVseSBieSB1c2Vyc3BhY2UuCkBAIC02MSw2ICs3MiwxMiBAQAogICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIFJGIGJ1dHRvbiBkcml2ZXJzIHByaXZhdGUgZGF0YSB3aGljaCB3aWxsIGJlCiAgKglwYXNzZWQgYWxvbmcgd2hlbiB0b2dnbGluZyByYWRpbyBzdGF0ZS4KICAqIEB0b2dnbGVfcmFkaW8oKTogTWFuZGF0b3J5IGhhbmRsZXIgdG8gY29udHJvbCBzdGF0ZSBvZiB0aGUgcmFkaW8uCisgKglvbmx5IFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQgYW5kIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQgYXJlCisgKgl2YWxpZCBwYXJhbWV0ZXJzLgorICogQGdldF9zdGF0ZSgpOiBoYW5kbGVyIHRvIHJlYWQgY3VycmVudCByYWRpbyBzdGF0ZSBmcm9tIGhhcmR3YXJlLAorICogICAgICBtYXkgYmUgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQsIHNob3VsZCByZXR1cm4gMCBvbiBzdWNjZXNzLgorICogICAgICBFaXRoZXIgdGhpcyBoYW5kbGVyIE9SIGp1ZGljaW91cyB1c2Ugb2YgcmZraWxsX2ZvcmNlX3N0YXRlKCkgaXMKKyAqICAgICAgTUFOREFUT1JZIGZvciBhbnkgZHJpdmVyIGNhcGFibGUgb2YgUkZLSUxMX1NUQVRFX0hBUkRfQkxPQ0tFRC4KICAqIEBsZWRfdHJpZ2dlcjogQSBMRUQgdHJpZ2dlciBmb3IgdGhpcyBidXR0b24ncyBMRUQuCiAgKiBAZGV2OiBEZXZpY2Ugc3RydWN0dXJlIGludGVncmF0aW5nIHRoZSBzd2l0Y2ggaW50byBkZXZpY2UgdHJlZS4KICAqIEBub2RlOiBVc2VkIHRvIHBsYWNlIHN3aXRjaCBpbnRvIGxpc3Qgb2YgYWxsIHN3aXRjaGVzIGtub3duIHRvIHRoZQpAQCAtODAsNiArOTcsNyBAQAogCiAJdm9pZCAqZGF0YTsKIAlpbnQgKCp0b2dnbGVfcmFkaW8pKHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKTsKKwlpbnQgKCpnZXRfc3RhdGUpKHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlICpzdGF0ZSk7CiAKICNpZmRlZiBDT05GSUdfUkZLSUxMX0xFRFMKIAlzdHJ1Y3QgbGVkX3RyaWdnZXIgbGVkX3RyaWdnZXI7CkBAIC05NSw2ICsxMTMsMjEgQEAKIGludCByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJma2lsbCAqcmZraWxsKTsKIHZvaWQgcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IHJma2lsbCAqcmZraWxsKTsKIAoraW50IHJma2lsbF9mb3JjZV9zdGF0ZShzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKTsKKworLyoqCisgKiByZmtpbGxfc3RhdGVfY29tcGxlbWVudCAtIHJldHVybiBjb21wbGVtZW50YXIgc3RhdGUKKyAqIEBzdGF0ZTogc3RhdGUgdG8gcmV0dXJuIHRoZSBjb21wbGVtZW50IG9mCisgKgorICogUmV0dXJucyBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEIGlmIEBzdGF0ZSBpcyBSRktJTExfU1RBVEVfVU5CTE9DS0VELAorICogcmV0dXJucyBSRktJTExfU1RBVEVfVU5CTE9DS0VEIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBlbnVtIHJma2lsbF9zdGF0ZSByZmtpbGxfc3RhdGVfY29tcGxlbWVudChlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKK3sKKwlyZXR1cm4gKHN0YXRlID09IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpID8KKwkJUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCA6IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7Cit9CisKIC8qKgogICogcmZraWxsX2dldF9sZWRfbmFtZSAtIEdldCB0aGUgTEVEIHRyaWdnZXIgbmFtZSBmb3IgdGhlIGJ1dHRvbidzIExFRC4KICAqIFRoaXMgZnVuY3Rpb24gbWlnaHQgcmV0dXJuIGEgTlVMTCBwb2ludGVyIGlmIHJlZ2lzdGVyaW5nIG9mIHRoZQpAQCAtMTEwLDQgKzE0MywxMSBAQAogI2VuZGlmCiB9CiAKKy8qIHJma2lsbCBub3RpZmljYXRpb24gY2hhaW4gKi8KKyNkZWZpbmUgUkZLSUxMX1NUQVRFX0NIQU5HRUQJCTB4MDAwMQkvKiBzdGF0ZSBvZiBhIG5vcm1hbCByZmtpbGwKKwkJCQkJCSAgIHN3aXRjaCBoYXMgY2hhbmdlZCAqLworCitpbnQgcmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworaW50IHVucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworCiAjZW5kaWYgLyogUkZLSUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IGIzNThjNzAuLmY0ZDM4NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtNDgyLDYgKzQ4Miw3IEBACiAJVENBX1JBVEUsCiAJVENBX0ZDTlQsCiAJVENBX1NUQVRTMiwKKwlUQ0FfU1RBQiwKIAlfX1RDQV9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvbGludXgvc2NhdHRlcmxpc3QuaAppbmRleCA3MWZjODEzLi5lNTk5Njk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjYXR0ZXJsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2F0dGVybGlzdC5oCkBAIC0yMjQsNCArMjI0LDQyIEBACiAgKi8KICNkZWZpbmUgU0dfTUFYX1NJTkdMRV9BTExPQwkJKFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpKQogCisKKy8qCisgKiBNYXBwaW5nIHNnIGl0ZXJhdG9yCisgKgorICogSXRlcmF0ZXMgb3ZlciBzZyBlbnRyaWVzIG1hcHBpbmcgcGFnZS1ieS1wYWdlLiAgT24gZWFjaCBzdWNjZXNzZnVsCisgKiBpdGVyYXRpb24sIEBtaXRlci0+cGFnZSBwb2ludHMgdG8gdGhlIG1hcHBlZCBwYWdlIGFuZAorICogQG1pdGVyLT5sZW5ndGggYnl0ZXMgb2YgZGF0YSBjYW4gYmUgYWNjZXNzZWQgYXQgQG1pdGVyLT5hZGRyLiAgQXMKKyAqIGxvbmcgYXMgYW4gaW50ZXJhdGlvbiBpcyBlbmNsb3NlZCBiZXR3ZWVuIHN0YXJ0IGFuZCBzdG9wLCB0aGUgdXNlcgorICogaXMgZnJlZSB0byBjaG9vc2UgY29udHJvbCBzdHJ1Y3R1cmUgYW5kIHdoZW4gdG8gc3RvcC4KKyAqCisgKiBAbWl0ZXItPmNvbnN1bWVkIGlzIHNldCB0byBAbWl0ZXItPmxlbmd0aCBvbiBlYWNoIGl0ZXJhdGlvbi4gIEl0CisgKiBjYW4gYmUgYWRqdXN0ZWQgaWYgdGhlIHVzZXIgY2FuJ3QgY29uc3VtZSBhbGwgdGhlIGJ5dGVzIGluIG9uZSBnby4KKyAqIEFsc28sIGEgc3RvcHBlZCBpdGVyYXRpb24gY2FuIGJlIHJlc3VtZWQgYnkgY2FsbGluZyBuZXh0IG9uIGl0LgorICogVGhpcyBpcyB1c2VmdWwgd2hlbiBpdGVyYXRpb24gbmVlZHMgdG8gcmVsZWFzZSBhbGwgcmVzb3VyY2VzIGFuZAorICogY29udGludWUgbGF0ZXIgKGUuZy4gYXQgdGhlIG5leHQgaW50ZXJydXB0KS4KKyAqLworCisjZGVmaW5lIFNHX01JVEVSX0FUT01JQwkJKDEgPDwgMCkJIC8qIHVzZSBrbWFwX2F0b21pYyAqLworCitzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyIHsKKwkvKiB0aGUgZm9sbG93aW5nIHRocmVlIGZpZWxkcyBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgKi8KKwlzdHJ1Y3QgcGFnZQkJKnBhZ2U7CQkvKiBjdXJyZW50bHkgbWFwcGVkIHBhZ2UgKi8KKwl2b2lkCQkJKmFkZHI7CQkvKiBwb2ludGVyIHRvIHRoZSBtYXBwZWQgYXJlYSAqLworCXNpemVfdAkJCWxlbmd0aDsJCS8qIGxlbmd0aCBvZiB0aGUgbWFwcGVkIGFyZWEgKi8KKwlzaXplX3QJCQljb25zdW1lZDsJLyogbnVtYmVyIG9mIGNvbnN1bWVkIGJ5dGVzICovCisKKwkvKiB0aGVzZSBhcmUgaW50ZXJuYWwgc3RhdGVzLCBrZWVwIGF3YXkgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKl9fc2c7CQkvKiBjdXJyZW50IGVudHJ5ICovCisJdW5zaWduZWQgaW50CQlfX25lbnRzOwkvKiBuciBvZiByZW1haW5pbmcgZW50cmllcyAqLworCXVuc2lnbmVkIGludAkJX19vZmZzZXQ7CS8qIG9mZnNldCB3aXRoaW4gc2cgKi8KKwl1bnNpZ25lZCBpbnQJCV9fZmxhZ3M7Cit9OworCit2b2lkIHNnX21pdGVyX3N0YXJ0KHN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIgKm1pdGVyLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJICAgIHVuc2lnbmVkIGludCBuZW50cywgdW5zaWduZWQgaW50IGZsYWdzKTsKK2Jvb2wgc2dfbWl0ZXJfbmV4dChzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyICptaXRlcik7Cit2b2lkIHNnX21pdGVyX3N0b3Aoc3RydWN0IHNnX21hcHBpbmdfaXRlciAqbWl0ZXIpOworCiAjZW5kaWYgLyogX0xJTlVYX1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAyNmRhOTIxLi5kYzdlNTkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0yOTUsMTAgKzI5NSwxMSBAQAogZXh0ZXJuIHZvaWQgc3Bhd25fc29mdGxvY2t1cF90YXNrKHZvaWQpOwogZXh0ZXJuIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKTsKIGV4dGVybiB2b2lkIHRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncyh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nICBzb2Z0bG9ja3VwX3RocmVzaDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHNvZnRsb2NrdXBfcGFuaWM7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNjdGxfaHVuZ190YXNrX2NoZWNrX2NvdW50OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzY3RsX2h1bmdfdGFza190aW1lb3V0X3NlY3M7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNjdGxfaHVuZ190YXNrX3dhcm5pbmdzOworZXh0ZXJuIGludCBzb2Z0bG9ja3VwX3RocmVzaDsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc29mdGxvY2t1cF90aWNrKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlX25ldC5oIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZV9uZXQuaAppbmRleCA0YWM1MjU0Li4zMmM4OWJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGVfbmV0LmgKQEAgLTE0LDcgKzE0LDEwIEBACiAKIGludCBzZXFfb3Blbl9uZXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosCiAJCSBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgKiwgaW50KTsKK2ludCBzaW5nbGVfb3Blbl9uZXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICpmaWxlLAorCQlpbnQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKSk7CiBpbnQgc2VxX3JlbGVhc2VfbmV0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK2ludCBzaW5nbGVfcmVsZWFzZV9uZXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpzZXFfZmlsZV9uZXQoc3RydWN0IHNlcV9maWxlICpzZXEpCiB7CiAjaWZkZWYgQ09ORklHX05FVF9OUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IGQ4ZjMxZGUuLmYzYTFjMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTE5MCw2ICsxOTAsNyBAQAogCXZvaWQJCSgqYnJlYWtfY3RsKShzdHJ1Y3QgdWFydF9wb3J0ICosIGludCBjdGwpOwogCWludAkJKCpzdGFydHVwKShzdHJ1Y3QgdWFydF9wb3J0ICopOwogCXZvaWQJCSgqc2h1dGRvd24pKHN0cnVjdCB1YXJ0X3BvcnQgKik7CisJdm9pZAkJKCpmbHVzaF9idWZmZXIpKHN0cnVjdCB1YXJ0X3BvcnQgKik7CiAJdm9pZAkJKCpzZXRfdGVybWlvcykoc3RydWN0IHVhcnRfcG9ydCAqLCBzdHJ1Y3Qga3Rlcm1pb3MgKm5ldywKIAkJCQkgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwogCXZvaWQJCSgqc2V0X2xkaXNjKShzdHJ1Y3QgdWFydF9wb3J0ICopOwpAQCAtMzQzLDEzICszNDQsMTUgQEAKICAqIHN0dWZmIGhlcmUuCiAgKi8KIHN0cnVjdCB1YXJ0X2luZm8gewotCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CisJc3RydWN0IHR0eV9wb3J0CQlwb3J0OwogCXN0cnVjdCBjaXJjX2J1ZgkJeG1pdDsKIAl1aWZfdAkJCWZsYWdzOwogCiAvKgogICogRGVmaW5pdGlvbnMgZm9yIGluZm8tPmZsYWdzLiAgVGhlc2UgYXJlIF9wcml2YXRlXyB0byBzZXJpYWxfY29yZSwgYW5kCiAgKiBhcmUgc3BlY2lmaWMgdG8gdGhpcyBzdHJ1Y3R1cmUuICBUaGV5IG1heSBiZSBxdWVyaWVkIGJ5IGxvdyBsZXZlbCBkcml2ZXJzLgorICoKKyAqIEZJWE1FOiB1c2UgdGhlIEFTWV8gZGVmaW5pdGlvbnMKICAqLwogI2RlZmluZSBVSUZfQ0hFQ0tfQ0QJCSgoX19mb3JjZSB1aWZfdCkgKDEgPDwgMjUpKQogI2RlZmluZSBVSUZfQ1RTX0ZMT1cJCSgoX19mb3JjZSB1aWZfdCkgKDEgPDwgMjYpKQpAQCAtMzU3LDExICszNjAsNyBAQAogI2RlZmluZSBVSUZfSU5JVElBTElaRUQJCSgoX19mb3JjZSB1aWZfdCkgKDEgPDwgMzEpKQogI2RlZmluZSBVSUZfU1VTUEVOREVECQkoKF9fZm9yY2UgdWlmX3QpICgxIDw8IDMwKSkKIAotCWludAkJCWJsb2NrZWRfb3BlbjsKLQogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0bGV0OwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0OwogCXdhaXRfcXVldWVfaGVhZF90CWRlbHRhX21zcl93YWl0OwogfTsKIApAQCAtNDM4LDggKzQzNyw4IEBACiAjZGVmaW5lIHVhcnRfY2lyY19jaGFyc19mcmVlKGNpcmMpCVwKIAkoQ0lSQ19TUEFDRSgoY2lyYyktPmhlYWQsIChjaXJjKS0+dGFpbCwgVUFSVF9YTUlUX1NJWkUpKQogCi0jZGVmaW5lIHVhcnRfdHhfc3RvcHBlZChwb3J0KQkJXAotCSgocG9ydCktPmluZm8tPnR0eS0+c3RvcHBlZCB8fCAocG9ydCktPmluZm8tPnR0eS0+aHdfc3RvcHBlZCkKKyNkZWZpbmUgdWFydF90eF9zdG9wcGVkKHBvcnRwKQkJXAorCSgocG9ydHApLT5pbmZvLT5wb3J0LnR0eS0+c3RvcHBlZCB8fCAocG9ydHApLT5pbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCkKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgYXJlIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBsb3cgbGV2ZWwgZHJpdmVycy4KQEAgLTQ1MCw3ICs0NDksNyBAQAogI2lmZGVmIFNVUFBPUlRfU1lTUlEKIAlpZiAocG9ydC0+c3lzcnEpIHsKIAkJaWYgKGNoICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHBvcnQtPnN5c3JxKSkgewotCQkJaGFuZGxlX3N5c3JxKGNoLCBwb3J0LT5pbmZvID8gcG9ydC0+aW5mby0+dHR5IDogTlVMTCk7CisJCQloYW5kbGVfc3lzcnEoY2gsIHBvcnQtPmluZm8gPyBwb3J0LT5pbmZvLT5wb3J0LnR0eSA6IE5VTEwpOwogCQkJcG9ydC0+c3lzcnEgPSAwOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTQ3OSw3ICs0NzgsNyBAQAogCX0KICNlbmRpZgogCWlmIChwb3J0LT5mbGFncyAmIFVQRl9TQUspCi0JCWRvX1NBSyhpbmZvLT50dHkpOworCQlkb19TQUsoaW5mby0+cG9ydC50dHkpOwogCXJldHVybiAwOwogfQogCkBAIC01MDIsOSArNTAxLDkgQEAKIAogCWlmIChpbmZvLT5mbGFncyAmIFVJRl9DSEVDS19DRCkgewogCQlpZiAoc3RhdHVzKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwotCQllbHNlIGlmIChpbmZvLT50dHkpCi0JCQl0dHlfaGFuZ3VwKGluZm8tPnR0eSk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKKwkJZWxzZSBpZiAoaW5mby0+cG9ydC50dHkpCisJCQl0dHlfaGFuZ3VwKGluZm8tPnBvcnQudHR5KTsKIAl9CiB9CiAKQEAgLTUxNyw3ICs1MTYsNyBAQAogdWFydF9oYW5kbGVfY3RzX2NoYW5nZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgc3RhdHVzKQogewogCXN0cnVjdCB1YXJ0X2luZm8gKmluZm8gPSBwb3J0LT5pbmZvOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwogCiAJcG9ydC0+aWNvdW50LmN0cysrOwogCkBAIC01NDMsNyArNTQyLDcgQEAKIHVhcnRfaW5zZXJ0X2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHN0YXR1cywKIAkJIHVuc2lnbmVkIGludCBvdmVycnVuLCB1bnNpZ25lZCBpbnQgY2gsIHVuc2lnbmVkIGludCBmbGFnKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OwogCiAJaWYgKChzdGF0dXMgJiBwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJiB+b3ZlcnJ1bikgPT0gMCkKIAkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgZmxhZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlvLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKaW5kZXggOTU2NzRkOS4uZTcyNzE2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpby5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaW8uaApAQCAtMTc1LDcgKzE3NSw3IEBACiAjZGVmaW5lIFNFUklPXzgwNDJfWEwJMHgwNgogCiAvKgotICogU2VyaW8gdHlwZXMKKyAqIFNlcmlvIHByb3RvY29scwogICovCiAjZGVmaW5lIFNFUklPX1VOS05PV04JMHgwMAogI2RlZmluZSBTRVJJT19NU0MJMHgwMQpAQCAtMjEyLDUgKzIxMiw3IEBACiAjZGVmaW5lIFNFUklPX1RBT1NFVk0JMHgzNAogI2RlZmluZSBTRVJJT19GVUpJVFNVCTB4MzUKICNkZWZpbmUgU0VSSU9fWkhFTkhVQQkweDM2CisjZGVmaW5lIFNFUklPX0lORVhJTwkweDM3CisjZGVmaW5lIFNFUklPX1RPVUNISVQyMTMJMHgzNwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDI5OWVjNGIuLjdlYTQ0ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMjQ2LDYgKzI0Niw3IEBACiAgKglAZG1hX2Nvb2tpZTogYSBjb29raWUgdG8gb25lIG9mIHNldmVyYWwgcG9zc2libGUgRE1BIG9wZXJhdGlvbnMKICAqCQlkb25lIGJ5IHNrYiBETUEgZnVuY3Rpb25zCiAgKglAc2VjbWFyazogc2VjdXJpdHkgbWFya2luZworICoJQHZsYW5fdGNpOiB2bGFuIHRhZyBjb250cm9sIGluZm9ybWF0aW9uCiAgKi8KIAogc3RydWN0IHNrX2J1ZmYgewpAQCAtMzA1LDkgKzMwNiw3IEBACiAjZW5kaWYKIAogCWludAkJCWlpZjsKLSNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCiAJX191MTYJCQlxdWV1ZV9tYXBwaW5nOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9TQ0hFRAogCV9fdTE2CQkJdGNfaW5kZXg7CS8qIHRyYWZmaWMgY29udHJvbCBpbmRleCAqLwogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVApAQCAtMzI4LDYgKzMyNyw4IEBACiAKIAlfX3UzMgkJCW1hcms7CiAKKwlfX3UxNgkJCXZsYW5fdGNpOworCiAJc2tfYnVmZl9kYXRhX3QJCXRyYW5zcG9ydF9oZWFkZXI7CiAJc2tfYnVmZl9kYXRhX3QJCW5ldHdvcmtfaGVhZGVyOwogCXNrX2J1ZmZfZGF0YV90CQltYWNfaGVhZGVyOwpAQCAtMTY3MSwyNSArMTY3MiwxNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBxdWV1ZV9tYXBwaW5nKQogewotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKIAlza2ItPnF1ZXVlX21hcHBpbmcgPSBxdWV1ZV9tYXBwaW5nOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdTE2IHNrYl9nZXRfcXVldWVfbWFwcGluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKIAlyZXR1cm4gc2tiLT5xdWV1ZV9tYXBwaW5nOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2NvcHlfcXVldWVfbWFwcGluZyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKQogewotI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKIAl0by0+cXVldWVfbWFwcGluZyA9IGZyb20tPnF1ZXVlX21hcHBpbmc7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2tiX2lzX2dzbyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTcwMiw2ICsxNjk1LDIwIEBACiAJcmV0dXJuIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY2OwogfQogCitleHRlcm4gdm9pZCBfX3NrYl93YXJuX2xyb19mb3J3YXJkaW5nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3dhcm5faWZfbHJvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJLyogTFJPIHNldHMgZ3NvX3NpemUgYnV0IG5vdCBnc29fdHlwZSwgd2hlcmVhcyBpZiBHU08gaXMgcmVhbGx5CisJICogd2FudGVkIHRoZW4gZ3NvX3R5cGUgd2lsbCBiZSBzZXQuICovCisJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpOworCWlmIChzaGluZm8tPmdzb19zaXplICE9IDAgJiYgdW5saWtlbHkoc2hpbmZvLT5nc29fdHlwZSA9PSAwKSkgeworCQlfX3NrYl93YXJuX2xyb19mb3J3YXJkaW5nKHNrYik7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZm9yd2FyZF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyogVW5mb3J0dW5hdGVseSB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgb25lLiAgQW55IGJyYXZlIHNvdWxzPyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbWM5MTF4LmggYi9pbmNsdWRlL2xpbnV4L3NtYzkxMXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNThmNTRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zbWM5MTF4LmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX1NNQzkxMVhfSF9fCisjZGVmaW5lIF9fU01DOTExWF9IX18KKworI2RlZmluZSBTTUM5MTFYX1VTRV8xNkJJVCAoMSA8PCAwKQorI2RlZmluZSBTTUM5MTFYX1VTRV8zMkJJVCAoMSA8PCAxKQorCitzdHJ1Y3Qgc21jOTExeF9wbGF0ZGF0YSB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsgLyogSVJRRl8uLi4gKi8KK307CisKKyNlbmRpZiAvKiBfX1NNQzkxMVhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtYzkxeC5oIGIvaW5jbHVkZS9saW51eC9zbWM5MXguaAppbmRleCA4ZTA1NTZiLi4zODI3YjkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtYzkxeC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21jOTF4LmgKQEAgLTUsOSArNSwxOSBAQAogI2RlZmluZSBTTUM5MVhfVVNFXzE2QklUICgxIDw8IDEpCiAjZGVmaW5lIFNNQzkxWF9VU0VfMzJCSVQgKDEgPDwgMikKIAorI2RlZmluZSBTTUM5MVhfTk9XQUlUCQkoMSA8PCAzKQorCisvKiB0d28gYml0cyBmb3IgSU9fU0hJRlQsIGxldCdzIGhvcGUgbGF0ZXIgZGVzaWducyB3aWxsIGtlZXAgdGhpcyBzYW5lICovCisjZGVmaW5lIFNNQzkxWF9JT19TSElGVF8wCSgwIDw8IDQpCisjZGVmaW5lIFNNQzkxWF9JT19TSElGVF8xCSgxIDw8IDQpCisjZGVmaW5lIFNNQzkxWF9JT19TSElGVF8yCSgyIDw8IDQpCisjZGVmaW5lIFNNQzkxWF9JT19TSElGVF8zCSgzIDw8IDQpCisjZGVmaW5lIFNNQzkxWF9JT19TSElGVCh4KQkoKCh4KSA+PiA0KSAmIDB4MykKKworI2RlZmluZSBTTUM5MVhfVVNFX0RNQQkJKDEgPDwgNikKKwogc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsgLyogSVJRRl8uLi4gKi8KIH07CiAKICNlbmRpZiAvKiBfX1NNQzkxWF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCmluZGV4IGJkMmIzMGEuLjk1MGFmNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaApAQCAtMzA2LDEwICszMDYsMTAgQEAKIAkJCQkJICBpbnQgb2Zmc2V0LCAKIAkJCQkJICB1bnNpZ25lZCBpbnQgbGVuLCBfX3dzdW0gKmNzdW1wKTsKIAotZXh0ZXJuIGludCB2ZXJpZnlfaW92ZWMoc3RydWN0IG1zZ2hkciAqbSwgc3RydWN0IGlvdmVjICppb3YsIGNoYXIgKmFkZHJlc3MsIGludCBtb2RlKTsKK2V4dGVybiBpbnQgdmVyaWZ5X2lvdmVjKHN0cnVjdCBtc2doZHIgKm0sIHN0cnVjdCBpb3ZlYyAqaW92LCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsIGludCBtb2RlKTsKIGV4dGVybiBpbnQgbWVtY3B5X3RvaW92ZWMoc3RydWN0IGlvdmVjICp2LCB1bnNpZ25lZCBjaGFyICprZGF0YSwgaW50IGxlbik7Ci1leHRlcm4gaW50IG1vdmVfYWRkcl90b191c2VyKHZvaWQgKmthZGRyLCBpbnQga2xlbiwgdm9pZCBfX3VzZXIgKnVhZGRyLCBpbnQgX191c2VyICp1bGVuKTsKLWV4dGVybiBpbnQgbW92ZV9hZGRyX3RvX2tlcm5lbCh2b2lkIF9fdXNlciAqdWFkZHIsIGludCB1bGVuLCB2b2lkICprYWRkcik7CitleHRlcm4gaW50IG1vdmVfYWRkcl90b191c2VyKHN0cnVjdCBzb2NrYWRkciAqa2FkZHIsIGludCBrbGVuLCB2b2lkIF9fdXNlciAqdWFkZHIsIGludCBfX3VzZXIgKnVsZW4pOworZXh0ZXJuIGludCBtb3ZlX2FkZHJfdG9fa2VybmVsKHZvaWQgX191c2VyICp1YWRkciwgaW50IHVsZW4sIHN0cnVjdCBzb2NrYWRkciAqa2FkZHIpOwogZXh0ZXJuIGludCBwdXRfY21zZyhzdHJ1Y3QgbXNnaGRyKiwgaW50IGxldmVsLCBpbnQgdHlwZSwgaW50IGxlbiwgdm9pZCAqZGF0YSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb25ldC5oIGIvaW5jbHVkZS9saW51eC9zb25ldC5oCmluZGV4IDc1MzY4MDIuLjY3YWQxMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvbmV0LmgKQEAgLTM0LDcgKzM0LDcgQEAKIAkJCQkJLyogY2xlYXIgZXJyb3IgaW5zZXJ0aW9uICovCiAjZGVmaW5lIFNPTkVUX0dFVERJQUcJX0lPUignYScsQVRNSU9DX1BIWVRZUCs0LGludCkKIAkJCQkJLyogcXVlcnkgZXJyb3IgaW5zZXJ0aW9uICovCi0jZGVmaW5lIFNPTkVUX1NFVEZSQU1JTkcgX0lPKCdhJyxBVE1JT0NfUEhZVFlQKzUpCisjZGVmaW5lIFNPTkVUX1NFVEZSQU1JTkcgX0lPVygnYScsQVRNSU9DX1BIWVRZUCs1LGludCkKIAkJCQkJLyogc2V0IGZyYW1pbmcgbW9kZSAoU09ORVQvU0RIKSAqLwogI2RlZmluZSBTT05FVF9HRVRGUkFNSU5HIF9JT1IoJ2EnLEFUTUlPQ19QSFlUWVArNixpbnQpCiAJCQkJCS8qIGdldCBmcmFtaW5nIG1vZGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL21heDczMDEuaCBiL2luY2x1ZGUvbGludXgvc3BpL21heDczMDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGZkODNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvbWF4NzMwMS5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBMSU5VWF9TUElfTUFYNzMwMV9ICisjZGVmaW5lIExJTlVYX1NQSV9NQVg3MzAxX0gKKworc3RydWN0IG1heDczMDFfcGxhdGZvcm1fZGF0YSB7CisJLyogbnVtYmVyIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBHUElPICovCisJdW5zaWduZWQJYmFzZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvc3BpLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGkuaAppbmRleCAzODdlNDI4Li5iOWE3NmM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGkuaApAQCAtNzMzLDcgKzczMyw3IEBACiAJICogY29udHJvbGxlcl9kYXRhIGdvZXMgdG8gc3BpX2RldmljZS5jb250cm9sbGVyX2RhdGEsCiAJICogaXJxIGlzIGNvcGllZCB0b28KIAkgKi8KLQljaGFyCQltb2RhbGlhc1tLT0JKX05BTUVfTEVOXTsKKwljaGFyCQltb2RhbGlhc1szMl07CiAJY29uc3Qgdm9pZAkqcGxhdGZvcm1fZGF0YTsKIAl2b2lkCQkqY29udHJvbGxlcl9kYXRhOwogCWludAkJaXJxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaAppbmRleCA1MGRmZDBkLi40YmY4Y2FkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX3JlZ3MuaD4KIApAQCAtMTM3LDkgKzEzOCw2IEBACiAJY29uc3Qgc3RydWN0IHNzYl9idXNfb3BzICpvcHM7CiAKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JLyogUG9pbnRlciB0byB0aGUgZGV2aWNlIHRoYXQgaGFzIHRvIGJlIHVzZWQgZm9yCi0JICogYW55IERNQSByZWxhdGVkIG9wZXJhdGlvbi4gKi8KLQlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2OwogCiAJc3RydWN0IHNzYl9idXMgKmJ1czsKIAlzdHJ1Y3Qgc3NiX2RldmljZV9pZCBpZDsKQEAgLTM5OSwxMyArMzk3LDE1MSBAQAogI2VuZGlmIC8qIENPTkZJR19TU0JfQkxPQ0tJTyAqLwogCiAKKy8qIFRoZSBTU0IgRE1BIEFQSS4gVXNlIHRoaXMgQVBJIGZvciBhbnkgRE1BIG9wZXJhdGlvbiBvbiB0aGUgZGV2aWNlLgorICogVGhpcyBBUEkgYmFzaWNhbGx5IGlzIGEgd3JhcHBlciB0aGF0IGNhbGxzIHRoZSBjb3JyZWN0IERNQSBBUEkgZm9yCisgKiB0aGUgaG9zdCBkZXZpY2UgdHlwZSB0aGUgU1NCIGRldmljZSBpcyBhdHRhY2hlZCB0by4gKi8KKwogLyogVHJhbnNsYXRpb24gKHJvdXRpbmcpIGJpdHMgdGhhdCBuZWVkIHRvIGJlIE9SZWQgdG8gRE1BCiAgKiBhZGRyZXNzZXMgYmVmb3JlIHRoZXkgYXJlIGdpdmVuIHRvIGEgZGV2aWNlLiAqLwogZXh0ZXJuIHUzMiBzc2JfZG1hX3RyYW5zbGF0aW9uKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYpOwogI2RlZmluZSBTU0JfRE1BX1RSQU5TTEFUSU9OX01BU0sJMHhDMDAwMDAwMAogI2RlZmluZSBTU0JfRE1BX1RSQU5TTEFUSU9OX1NISUZUCTMwCiAKLWV4dGVybiBpbnQgc3NiX2RtYV9zZXRfbWFzayhzdHJ1Y3Qgc3NiX2RldmljZSAqc3NiX2RldiwgdTY0IG1hc2spOworZXh0ZXJuIGludCBzc2JfZG1hX3NldF9tYXNrKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKKworZXh0ZXJuIHZvaWQgKiBzc2JfZG1hX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcF9mbGFncyk7CitleHRlcm4gdm9pZCBzc2JfZG1hX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fY29sZCBfX3NzYl9kbWFfbm90X2ltcGxlbWVudGVkKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYpCit7CisjaWZkZWYgQ09ORklHX1NTQl9ERUJVRworCXByaW50ayhLRVJOX0VSUiAiU1NCOiBCVUchIENhbGxpbmcgRE1BIEFQSSBmb3IgIgorCSAgICAgICAidW5zdXBwb3J0ZWQgYnVzdHlwZSAlZFxuIiwgZGV2LT5idXMtPmJ1c3R5cGUpOworI2VuZGlmIC8qIERFQlVHICovCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNzYl9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIpCit7CisJc3dpdGNoIChkZXYtPmJ1cy0+YnVzdHlwZSkgeworCWNhc2UgU1NCX0JVU1RZUEVfUENJOgorCQlyZXR1cm4gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGFkZHIpOworCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgorCQlyZXR1cm4gZG1hX21hcHBpbmdfZXJyb3IoYWRkcik7CisJZGVmYXVsdDoKKwkJX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChkZXYpOworCX0KKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHNzYl9kbWFfbWFwX3NpbmdsZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB2b2lkICpwLAorCQkJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7CisJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6CisJCXJldHVybiBwY2lfbWFwX3NpbmdsZShkZXYtPmJ1cy0+aG9zdF9wY2ksIHAsIHNpemUsIGRpcik7CisJY2FzZSBTU0JfQlVTVFlQRV9TU0I6CisJCXJldHVybiBkbWFfbWFwX3NpbmdsZShkZXYtPmRldiwgcCwgc2l6ZSwgZGlyKTsKKwlkZWZhdWx0OgorCQlfX3NzYl9kbWFfbm90X2ltcGxlbWVudGVkKGRldik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3NiX2RtYV91bm1hcF9zaW5nbGUoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7CisJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6CisJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5idXMtPmhvc3RfcGNpLCBkbWFfYWRkciwgc2l6ZSwgZGlyKTsKKwkJcmV0dXJuOworCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgorCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCV9fc3NiX2RtYV9ub3RfaW1wbGVtZW50ZWQoZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7CisJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYtPmJ1cy0+aG9zdF9wY2ksIGRtYV9hZGRyLAorCQkJCQkgICAgc2l6ZSwgZGlyKTsKKwkJcmV0dXJuOworCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgorCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYtPmRldiwgZG1hX2FkZHIsIHNpemUsIGRpcik7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlfX3NzYl9kbWFfbm90X2ltcGxlbWVudGVkKGRldik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3NiX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsCisJCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkJCQkgIHNpemVfdCBzaXplLAorCQkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3dpdGNoIChkZXYtPmJ1cy0+YnVzdHlwZSkgeworCWNhc2UgU1NCX0JVU1RZUEVfUENJOgorCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LT5idXMtPmhvc3RfcGNpLCBkbWFfYWRkciwKKwkJCQkJICAgICAgIHNpemUsIGRpcik7CisJCXJldHVybjsKKwljYXNlIFNTQl9CVVNUWVBFX1NTQjoKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LT5kZXYsIGRtYV9hZGRyLCBzaXplLCBkaXIpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChkZXYpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHNzYl9kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LAorCQkJCQkJICAgICBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCSAgICAgc2l6ZV90IHNpemUsCisJCQkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7CisJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6CisJCS8qIEp1c3Qgc3luYyBldmVyeXRoaW5nLiBUaGF0J3MgYWxsIHRoZSBQQ0kgQVBJIGNhbiBkby4gKi8KKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldi0+YnVzLT5ob3N0X3BjaSwgZG1hX2FkZHIsCisJCQkJCSAgICBvZmZzZXQgKyBzaXplLCBkaXIpOworCQlyZXR1cm47CisJY2FzZSBTU0JfQlVTVFlQRV9TU0I6CisJCWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KGRldi0+ZGV2LCBkbWFfYWRkciwgb2Zmc2V0LAorCQkJCQkgICAgICBzaXplLCBkaXIpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJX19zc2JfZG1hX25vdF9pbXBsZW1lbnRlZChkZXYpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHNzYl9kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LAorCQkJCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQkJc2l6ZV90IHNpemUsCisJCQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN3aXRjaCAoZGV2LT5idXMtPmJ1c3R5cGUpIHsKKwljYXNlIFNTQl9CVVNUWVBFX1BDSToKKwkJLyogSnVzdCBzeW5jIGV2ZXJ5dGhpbmcuIFRoYXQncyBhbGwgdGhlIFBDSSBBUEkgY2FuIGRvLiAqLworCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LT5idXMtPmhvc3RfcGNpLCBkbWFfYWRkciwKKwkJCQkJICAgICAgIG9mZnNldCArIHNpemUsIGRpcik7CisJCXJldHVybjsKKwljYXNlIFNTQl9CVVNUWVBFX1NTQjoKKwkJZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoZGV2LT5kZXYsIGRtYV9hZGRyLCBvZmZzZXQsCisJCQkJCQkgc2l6ZSwgZGlyKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCV9fc3NiX2RtYV9ub3RfaW1wbGVtZW50ZWQoZGV2KTsKKwl9Cit9CiAKIAogI2lmZGVmIENPTkZJR19TU0JfUENJSE9TVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdGFsbGlvbi5oIGIvaW5jbHVkZS9saW51eC9zdGFsbGlvbi5oCmluZGV4IDA0MjRkNzUuLjMzNmFmMzNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdGFsbGlvbi5oCkBAIC02OSw2ICs2OSw3IEBACiAgKi8KIHN0cnVjdCBzdGxwb3J0IHsKIAl1bnNpZ25lZCBsb25nCQltYWdpYzsKKwlzdHJ1Y3QgdHR5X3BvcnQJCXBvcnQ7CiAJdW5zaWduZWQgaW50CQlwb3J0bnI7CiAJdW5zaWduZWQgaW50CQlwYW5lbG5yOwogCXVuc2lnbmVkIGludAkJYnJkbnI7CkBAIC03NiwxMiArNzcsMTAgQEAKIAlpbnQJCQl1YXJ0YWRkcjsKIAl1bnNpZ25lZCBpbnQJCXBhZ2VucjsKIAl1bnNpZ25lZCBsb25nCQlpc3RhdGU7Ci0JaW50CQkJZmxhZ3M7CiAJaW50CQkJYmF1ZF9iYXNlOwogCWludAkJCWN1c3RvbV9kaXZpc29yOwogCWludAkJCWNsb3NlX2RlbGF5OwogCWludAkJCWNsb3Npbmdfd2FpdDsKLQlpbnQJCQlyZWZjb3VudDsKIAlpbnQJCQlvcGVud2FpdGNudDsKIAlpbnQJCQlicmtsZW47CiAJdW5zaWduZWQgaW50CQlzaWdzOwpAQCAtOTIsOSArOTEsNiBAQAogCXVuc2lnbmVkIGxvbmcJCWNsazsKIAl1bnNpZ25lZCBsb25nCQlod2lkOwogCXZvaWQJCQkqdWFydHA7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKLQl3YWl0X3F1ZXVlX2hlYWRfdAlvcGVuX3dhaXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsKIAljb21zdGF0c190CQlzdGF0czsKIAlzdHJ1Y3Qgc3RscnEJCXR4OwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGhfZ3NzLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoX2dzcy5oCmluZGV4IGZlYzY4OTkuLmQ0OGQ0ZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGhfZ3NzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aF9nc3MuaApAQCAtNyw4ICs3LDYgQEAKICAqIEFuZHkgQWRhbXNvbiA8YW5kcm9zQHVtaWNoLmVkdT4KICAqIEJydWNlIEZpZWxkcyA8YmZpZWxkc0B1bWljaC5lZHU+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4KLSAqCi0gKiAkSWQkCiAgKi8KIAogI2lmbmRlZiBfTElOVVhfU1VOUlBDX0FVVEhfR1NTX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19hcGkuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19hcGkuaAppbmRleCA0NTljNWZjLi4wM2YzMzMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3NfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX2FwaS5oCkBAIC03LDggKzcsNiBAQAogICogQW5keSBBZGFtc29uIDxhbmRyb3NAdW1pY2guZWR1PgogICogQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHVtaWNoLmVkdT4KICAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbgotICoKLSAqICRJZCQKICAqLwogCiAjaWZuZGVmIF9MSU5VWF9TVU5SUENfR1NTX0FQSV9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3Nfa3JiNS5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX2tyYjUuaAppbmRleCBhMTBmMWZiLi5lN2JiZGJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3Nfa3JiNS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19rcmI1LmgKQEAgLTUxLDYgKzUxLDkgQEAKIAogZXh0ZXJuIHNwaW5sb2NrX3Qga3JiNV9zZXFfbG9jazsKIAorLyogVGhlIGxlbmd0aCBvZiB0aGUgS2VyYmVyb3MgR1NTIHRva2VuIGhlYWRlciAqLworI2RlZmluZSBHU1NfS1JCNV9UT0tfSERSX0xFTgkoMTYpCisKICNkZWZpbmUgS0dfVE9LX01JQ19NU0cgICAgMHgwMTAxCiAjZGVmaW5lIEtHX1RPS19XUkFQX01TRyAgIDB4MDIwMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCmluZGV4IDRiNTRjNWYuLmRjNjkwNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCkBAIC0yMiw3ICsyMiw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgUlBDIHNlcnZlciB0aHJlYWQgZnVuY3Rpb24gcHJvdG90eXBlCiAgKi8KLXR5cGVkZWYgdm9pZAkJKCpzdmNfdGhyZWFkX2ZuKShzdHJ1Y3Qgc3ZjX3Jxc3QgKik7Cit0eXBlZGVmIGludAkJKCpzdmNfdGhyZWFkX2ZuKSh2b2lkICopOwogCiAvKgogICoKQEAgLTgwLDcgKzgwLDYgQEAKIAlzdHJ1Y3QgbW9kdWxlICoJCXN2X21vZHVsZTsJLyogb3B0aW9uYWwgbW9kdWxlIHRvIGNvdW50IHdoZW4KIAkJCQkJCSAqIGFkZGluZyB0aHJlYWRzICovCiAJc3ZjX3RocmVhZF9mbgkJc3ZfZnVuY3Rpb247CS8qIG1haW4gZnVuY3Rpb24gZm9yIHRocmVhZHMgKi8KLQlpbnQJCQlzdl9raWxsX3NpZ25hbDsJLyogc2lnbmFsIHRvIGtpbGwgdGhyZWFkcyAqLwogfTsKIAogLyoKQEAgLTM4OCw4ICszODcsOCBAQAogCQkJCQlzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wpOwogdm9pZAkJICAgc3ZjX2V4aXRfdGhyZWFkKHN0cnVjdCBzdmNfcnFzdCAqKTsKIHN0cnVjdCBzdmNfc2VydiAqICBzdmNfY3JlYXRlX3Bvb2xlZChzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiwgdW5zaWduZWQgaW50LAotCQkJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYqKSwKLQkJCXN2Y190aHJlYWRfZm4sIGludCBzaWcsIHN0cnVjdCBtb2R1bGUgKik7CisJCQl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzdmNfc2VydiopLCBzdmNfdGhyZWFkX2ZuLAorCQkJc3RydWN0IG1vZHVsZSAqKTsKIGludAkJICAgc3ZjX3NldF9udW1fdGhyZWFkcyhzdHJ1Y3Qgc3ZjX3NlcnYgKiwgc3RydWN0IHN2Y19wb29sICosIGludCk7CiB2b2lkCQkgICBzdmNfZGVzdHJveShzdHJ1Y3Qgc3ZjX3NlcnYgKik7CiBpbnQJCSAgIHN2Y19wcm9jZXNzKHN0cnVjdCBzdmNfcnFzdCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y19yZG1hLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfcmRtYS5oCmluZGV4IDA1ZWI0NjYuLmVmMmUzYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y19yZG1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3JkbWEuaApAQCAtNzIsNyArNzIsNyBAQAogICovCiBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCB7CiAJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKnJlYWRfaGRyOwotCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OworCWludCBoZHJfY291bnQ7CiAJc3RydWN0IHhkcl9idWYgYXJnOwogCXN0cnVjdCBsaXN0X2hlYWQgZHRvX3E7CiAJZW51bSBpYl93cl9vcGNvZGUgd3Jfb3A7CkBAIC04Niw2ICs4NiwzMSBAQAogCXN0cnVjdCBwYWdlICpwYWdlc1tSUENTVkNfTUFYUEFHRVNdOwogfTsKIAorLyoKKyAqIE5GU18gcmVxdWVzdHMgYXJlIG1hcHBlZCBvbiB0aGUgY2xpZW50IHNpZGUgYnkgdGhlIGNodW5rIGxpc3RzIGluCisgKiB0aGUgUlBDUkRNQSBoZWFkZXIuIER1cmluZyB0aGUgZmV0Y2hpbmcgb2YgdGhlIFJQQyBmcm9tIHRoZSBjbGllbnQKKyAqIGFuZCB0aGUgd3JpdGluZyBvZiB0aGUgcmVwbHkgdG8gdGhlIGNsaWVudCwgdGhlIG1lbW9yeSBpbiB0aGUKKyAqIGNsaWVudCBhbmQgdGhlIG1lbW9yeSBpbiB0aGUgc2VydmVyIG11c3QgYmUgbWFwcGVkIGFzIGNvbnRpZ3VvdXMKKyAqIHZhZGRyL2xlbiBmb3IgYWNjZXNzIGJ5IHRoZSBoYXJkd2FyZS4gVGhlc2UgZGF0YSBzdHJ1Y3VyZXMga2VlcAorICogdGhlc2UgbWFwcGluZ3MuCisgKgorICogRm9yIGFuIFJETUFfV1JJVEUsIHRoZSAnc2dlJyBtYXBzIHRoZSBSUEMgUkVQTFkuIEZvciBSRE1BX1JFQUQsIHRoZQorICogJ3NnZScgaW4gdGhlIHN2Y19yZG1hX3JlcV9tYXAgbWFwcyB0aGUgc2VydmVyIHNpZGUgUlBDIHJlcGx5IGFuZCB0aGUKKyAqICdjaCcgZmllbGQgbWFwcyB0aGUgcmVhZC1saXN0IG9mIHRoZSBSUENSRE1BIGhlYWRlciB0byB0aGUgJ3NnZScKKyAqIG1hcHBpbmcgb2YgdGhlIHJlcGx5LgorICovCitzdHJ1Y3Qgc3ZjX3JkbWFfY2h1bmtfc2dlIHsKKwlpbnQgc3RhcnQ7CQkvKiBzZ2Ugbm8gZm9yIHRoaXMgY2h1bmsgKi8KKwlpbnQgY291bnQ7CQkvKiBzZ2UgY291bnQgZm9yIHRoaXMgY2h1bmsgKi8KK307CitzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCB7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1bmlvbiB7CisJCXN0cnVjdCBrdmVjIHNnZVtSUENTVkNfTUFYUEFHRVNdOworCQlzdHJ1Y3Qgc3ZjX3JkbWFfY2h1bmtfc2dlIGNoW1JQQ1NWQ19NQVhQQUdFU107CisJfTsKK307CisKICNkZWZpbmUgUkRNQUNUWFRfRl9MQVNUX0NUWFQJMgogCiBzdHJ1Y3Qgc3ZjeHBydF9yZG1hIHsKQEAgLTkzLDcgKzExOCw2IEBACiAJc3RydWN0IHJkbWFfY21faWQgICAgKnNjX2NtX2lkOwkJLyogUkRNQSBjb25uZWN0aW9uIGlkICovCiAJc3RydWN0IGxpc3RfaGVhZCAgICAgc2NfYWNjZXB0X3E7CS8qIENvbm4uIHdhaXRpbmcgYWNjZXB0ICovCiAJaW50CQkgICAgIHNjX29yZDsJCS8qIFJETUEgcmVhZCBsaW1pdCAqLwotCXdhaXRfcXVldWVfaGVhZF90ICAgIHNjX3JlYWRfd2FpdDsKIAlpbnQgICAgICAgICAgICAgICAgICBzY19tYXhfc2dlOwogCiAJaW50ICAgICAgICAgICAgICAgICAgc2Nfc3FfZGVwdGg7CS8qIERlcHRoIG9mIFNRICovCkBAIC0xMDQsMTIgKzEyOCw4IEBACiAKIAlzdHJ1Y3QgaWJfcGQgICAgICAgICAqc2NfcGQ7CiAKKwlhdG9taWNfdAkgICAgIHNjX2RtYV91c2VkOwogCWF0b21pY190CSAgICAgc2NfY3R4dF91c2VkOwotCXN0cnVjdCBsaXN0X2hlYWQgICAgIHNjX2N0eHRfZnJlZTsKLQlpbnQJCSAgICAgc2NfY3R4dF9jbnQ7Ci0JaW50CQkgICAgIHNjX2N0eHRfYnVtcDsKLQlpbnQJCSAgICAgc2NfY3R4dF9tYXg7Ci0Jc3BpbmxvY2tfdAkgICAgIHNjX2N0eHRfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICBzY19ycV9kdG9fcTsKIAlzcGlubG9ja190CSAgICAgc2NfcnFfZHRvX2xvY2s7CiAJc3RydWN0IGliX3FwICAgICAgICAgKnNjX3FwOwpAQCAtMTczLDYgKzE5Myw4IEBACiBleHRlcm4gaW50IHN2Y19yZG1hX2NyZWF0ZV9saXN0ZW4oc3RydWN0IHN2Y19zZXJ2ICosIGludCwgc3RydWN0IHNvY2thZGRyICopOwogZXh0ZXJuIHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpzdmNfcmRtYV9nZXRfY29udGV4dChzdHJ1Y3Qgc3ZjeHBydF9yZG1hICopOwogZXh0ZXJuIHZvaWQgc3ZjX3JkbWFfcHV0X2NvbnRleHQoc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqc3ZjX3JkbWFfZ2V0X3JlcV9tYXAodm9pZCk7CitleHRlcm4gdm9pZCBzdmNfcmRtYV9wdXRfcmVxX21hcChzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqKTsKIGV4dGVybiB2b2lkIHN2Y19zcV9yZWFwKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKik7CiBleHRlcm4gdm9pZCBzdmNfcnFfcmVhcChzdHJ1Y3Qgc3ZjeHBydF9yZG1hICopOwogZXh0ZXJuIHN0cnVjdCBzdmNfeHBydF9jbGFzcyBzdmNfcmRtYV9jbGFzczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoX2dzcy5oCmluZGV4IDQxN2ExZGUuLmM5MTY1ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjYXV0aF9nc3MuaApAQCAtMyw5ICszLDYgQEAKICAqCiAgKiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAdW1pY2guZWR1PgogICogQ29weXJpZ2h0IChjKSAyMDAyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbnZpZXJzaXR5IG9mIE1pY2hpZ2FuCi0gKgotICogJElkJAotICoKICAqLwogCiAjaWZuZGVmIF9MSU5VWF9TVU5SUENfU1ZDQVVUSF9HU1NfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeW5jbGluay5oIGIvaW5jbHVkZS9saW51eC9zeW5jbGluay5oCmluZGV4IDQ1ZjZiYzguLmM4NDRhMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3luY2xpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5bmNsaW5rLmgKQEAgLTEzNiw2ICsxMzYsNyBAQAogI2RlZmluZSBNR1NMX0lOVEVSRkFDRV9SVFNfRU4gICAweDEwCiAjZGVmaW5lIE1HU0xfSU5URVJGQUNFX0xMICAgICAgIDB4MjAKICNkZWZpbmUgTUdTTF9JTlRFUkZBQ0VfUkwgICAgICAgMHg0MAorI2RlZmluZSBNR1NMX0lOVEVSRkFDRV9NU0JfRklSU1QgMHg4MAogCiB0eXBlZGVmIHN0cnVjdCBfTUdTTF9QQVJBTVMKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZGV2LmggYi9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oCmluZGV4IGYyNzY3YmMuLmYzOTViYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNkZXYuaApAQCAtOTksOCArOTksOSBAQAogCiBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSB7IAogCXN0cnVjdCBhdHRyaWJ1dGUJYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IHN5c19kZXZpY2UgKiwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBzeXNfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IHN5c19kZXZpY2UgKiwgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBzeXNfZGV2aWNlICosIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICosCisJCQkgY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKIAogCkBAIC0xMTgsNCArMTE5LDM4IEBACiBleHRlcm4gaW50IHN5c2Rldl9jcmVhdGVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqKTsKIGV4dGVybiB2b2lkIHN5c2Rldl9yZW1vdmVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqKTsKIAorc3RydWN0IHN5c2Rldl9leHRfYXR0cmlidXRlIHsKKwlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBhdHRyOworCXZvaWQgKnZhcjsKK307CisKKy8qCisgKiBTdXBwb3J0IGZvciBzaW1wbGUgdmFyaWFibGUgc3lzZGV2IGF0dHJpYnV0ZXMuCisgKiBUaGUgcG9pbnRlciB0byB0aGUgdmFyaWFibGUgaXMgc3RvcmVkIGluIGEgc3lzZGV2X2V4dF9hdHRyaWJ1dGUKKyAqLworCisvKiBBZGQgbW9yZSB0eXBlcyBhcyBuZWVkZWQgKi8KKworZXh0ZXJuIHNzaXplX3Qgc3lzZGV2X3Nob3dfdWxvbmcoc3RydWN0IHN5c19kZXZpY2UgKiwgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiwKKwkJCQljaGFyICopOworZXh0ZXJuIHNzaXplX3Qgc3lzZGV2X3N0b3JlX3Vsb25nKHN0cnVjdCBzeXNfZGV2aWNlICosCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gc3NpemVfdCBzeXNkZXZfc2hvd19pbnQoc3RydWN0IHN5c19kZXZpY2UgKiwgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiwKKwkJCQljaGFyICopOworZXh0ZXJuIHNzaXplX3Qgc3lzZGV2X3N0b3JlX2ludChzdHJ1Y3Qgc3lzX2RldmljZSAqLAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworCisjZGVmaW5lIF9TWVNERVZfVUxPTkdfQVRUUihfbmFtZSwgX21vZGUsIF92YXIpCQkJCVwKKwl7IF9TWVNERVZfQVRUUihfbmFtZSwgX21vZGUsIHN5c2Rldl9zaG93X3Vsb25nLCBzeXNkZXZfc3RvcmVfdWxvbmcpLCBcCisJICAmKF92YXIpIH0KKyNkZWZpbmUgU1lTREVWX1VMT05HX0FUVFIoX25hbWUsIF9tb2RlLCBfdmFyKQkJCVwKKwlzdHJ1Y3Qgc3lzZGV2X2V4dF9hdHRyaWJ1dGUgYXR0cl8jI19uYW1lID0gCQlcCisJCV9TWVNERVZfVUxPTkdfQVRUUihfbmFtZSwgX21vZGUsIF92YXIpOworI2RlZmluZSBfU1lTREVWX0lOVF9BVFRSKF9uYW1lLCBfbW9kZSwgX3ZhcikJCQkJXAorCXsgX1NZU0RFVl9BVFRSKF9uYW1lLCBfbW9kZSwgc3lzZGV2X3Nob3dfaW50LCBzeXNkZXZfc3RvcmVfaW50KSwgXAorCSAgJihfdmFyKSB9CisjZGVmaW5lIFNZU0RFVl9JTlRfQVRUUihfbmFtZSwgX21vZGUsIF92YXIpCQkJXAorCXN0cnVjdCBzeXNkZXZfZXh0X2F0dHJpYnV0ZSBhdHRyXyMjX25hbWUgPSAJCVwKKwkJX1NZU0RFVl9JTlRfQVRUUihfbmFtZSwgX21vZGUsIF92YXIpOworCiAjZW5kaWYgLyogX1NZU0RFVl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IDc4NThlYWMuLjM3ZmEyNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTEwMSw2ICsxMDEsOSBAQAogCiBpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2NyZWF0ZV9saW5rKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29iamVjdCAqdGFyZ2V0LAogCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpOworaW50IF9fbXVzdF9jaGVjayBzeXNmc19jcmVhdGVfbGlua19ub3dhcm4oc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJCSAgc3RydWN0IGtvYmplY3QgKnRhcmdldCwKKwkJCQkJICBjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgc3lzZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKm5hbWUpOwogCiBpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2NyZWF0ZV9ncm91cChzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTE4MCw2ICsxODMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc3lzZnNfY3JlYXRlX2xpbmtfbm93YXJuKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCQkgICBzdHJ1Y3Qga29iamVjdCAqdGFyZ2V0LAorCQkJCQkgICBjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaAppbmRleCBiMzFiNmI3Li4yZTI1NTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTIyNCw2ICsyMjQsMTIgQEAKIAl1MTYJbXNzX2NsYW1wOwkvKiBNYXhpbWFsIG1zcywgbmVnb3RpYXRlZCBhdCBjb25uZWN0aW9uIHNldHVwICovCiB9OwogCisvKiBUaGlzIGlzIHRoZSBtYXggbnVtYmVyIG9mIFNBQ0tTIHRoYXQgd2UnbGwgZ2VuZXJhdGUgYW5kIHByb2Nlc3MuIEl0J3Mgc2FmZQorICogdG8gaW5jcmVzZSB0aGlzLCBhbHRob3VnaCBzaW5jZToKKyAqICAgc2l6ZSA9IFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQgKDQpICsgbiAqIFRDUE9MRU5fU0FDS19QRVJCTE9DSyAoOCkKKyAqIG9ubHkgZm91ciBvcHRpb25zIHdpbGwgZml0IGluIGEgc3RhbmRhcmQgVENQIGhlYWRlciAqLworI2RlZmluZSBUQ1BfTlVNX1NBQ0tTIDQKKwogc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgewogCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAJcmVxOwogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCkBAIC0yOTEsMTAgKzI5Nyw5IEBACiAJdTMyCXJjdl9zc3RocmVzaDsJLyogQ3VycmVudCB3aW5kb3cgY2xhbXAJCQkqLwogCiAJdTMyCWZydG9faGlnaG1hcms7CS8qIHNuZF9ueHQgd2hlbiBSVE8gb2NjdXJyZWQgKi8KLQl1OAlyZW9yZGVyaW5nOwkvKiBQYWNrZXQgcmVvcmRlcmluZyBtZXRyaWMuCQkqLworCXUxNglhZHZtc3M7CQkvKiBBZHZlcnRpc2VkIE1TUwkJCSovCiAJdTgJZnJ0b19jb3VudGVyOwkvKiBOdW1iZXIgb2YgbmV3IGFja3MgYWZ0ZXIgUlRPICovCiAJdTgJbm9uYWdsZTsJLyogRGlzYWJsZSBOYWdsZSBhbGdvcml0aG0/ICAgICAgICAgICAgICovCi0JdTgJa2VlcGFsaXZlX3Byb2JlczsgLyogbnVtIG9mIGFsbG93ZWQga2VlcCBhbGl2ZSBwcm9iZXMJKi8KIAogLyogUlRUIG1lYXN1cmVtZW50ICovCiAJdTMyCXNydHQ7CQkvKiBzbW9vdGhlZCByb3VuZCB0cmlwIHRpbWUgPDwgMwkqLwpAQCAtMzA1LDYgKzMxMCwxMCBAQAogCiAJdTMyCXBhY2tldHNfb3V0OwkvKiBQYWNrZXRzIHdoaWNoIGFyZSAiaW4gZmxpZ2h0IgkqLwogCXUzMglyZXRyYW5zX291dDsJLyogUmV0cmFuc21pdHRlZCBwYWNrZXRzIG91dAkJKi8KKworCXUxNgl1cmdfZGF0YTsJLyogU2F2ZWQgb2N0ZXQgb2YgT09CIGRhdGEgYW5kIGNvbnRyb2wgZmxhZ3MgKi8KKwl1OAl1cmdfbW9kZTsJLyogSW4gdXJnZW50IG1vZGUJCSovCisJdTgJZWNuX2ZsYWdzOwkvKiBFQ04gc3RhdHVzIGJpdHMuCQkJKi8KIC8qCiAgKiAgICAgIE9wdGlvbnMgcmVjZWl2ZWQgKHVzdWFsbHkgb24gbGFzdCBwYWNrZXQsIHNvbWUgb25seSBvbiBTWU4gcGFja2V0cykuCiAgKi8KQEAgLTMyMCwxMyArMzI5LDI0IEBACiAJdTMyCXNuZF9jd25kX3VzZWQ7CiAJdTMyCXNuZF9jd25kX3N0YW1wOwogCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlvdXRfb2Zfb3JkZXJfcXVldWU7IC8qIE91dCBvZiBvcmRlciBzZWdtZW50cyBnbyBoZXJlICovCi0KICAJdTMyCXJjdl93bmQ7CS8qIEN1cnJlbnQgcmVjZWl2ZXIgd2luZG93CQkqLwogCXUzMgl3cml0ZV9zZXE7CS8qIFRhaWwoKzEpIG9mIGRhdGEgaGVsZCBpbiB0Y3Agc2VuZCBidWZmZXIgKi8KIAl1MzIJcHVzaGVkX3NlcTsJLyogTGFzdCBwdXNoZWQgc2VxLCByZXF1aXJlZCB0byB0YWxrIHRvIHdpbmRvd3MgKi8KKwl1MzIJbG9zdF9vdXQ7CS8qIExvc3QgcGFja2V0cwkJCSovCisJdTMyCXNhY2tlZF9vdXQ7CS8qIFNBQ0snZCBwYWNrZXRzCQkJKi8KKwl1MzIJZmFja2V0c19vdXQ7CS8qIEZBQ0snZCBwYWNrZXRzCQkJKi8KKwl1MzIJdHNvX2RlZmVycmVkOworCXUzMglieXRlc19hY2tlZDsJLyogQXBwcm9wcmlhdGUgQnl0ZSBDb3VudGluZyAtIFJGQzM0NjUgKi8KIAotLyoJU0FDS3MgZGF0YQkqLworCS8qIGZyb20gU1RDUCwgcmV0cmFucyBxdWV1ZSBoaW50aW5nICovCisJc3RydWN0IHNrX2J1ZmYqIGxvc3Rfc2tiX2hpbnQ7CisJc3RydWN0IHNrX2J1ZmYgKnNjb3JlYm9hcmRfc2tiX2hpbnQ7CisJc3RydWN0IHNrX2J1ZmYgKnJldHJhbnNtaXRfc2tiX2hpbnQ7CisJc3RydWN0IHNrX2J1ZmYgKmZvcndhcmRfc2tiX2hpbnQ7CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCW91dF9vZl9vcmRlcl9xdWV1ZTsgLyogT3V0IG9mIG9yZGVyIHNlZ21lbnRzIGdvIGhlcmUgKi8KKworCS8qIFNBQ0tzIGRhdGEsIHRoZXNlIDIgbmVlZCB0byBiZSB0b2dldGhlciAoc2VlIHRjcF9idWlsZF9hbmRfdXBkYXRlX29wdGlvbnMpICovCiAJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIGR1cGxpY2F0ZV9zYWNrWzFdOyAvKiBELVNBQ0sgYmxvY2sgKi8KIAlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgc2VsZWN0aXZlX2Fja3NbNF07IC8qIFRoZSBTQUNLUyB0aGVtc2VsdmVzKi8KIApAQCAtMzM3LDIzICszNTcsMTQgQEAKIAkJCQkJICogc2Fja2VkX291dCA+IDApCiAJCQkJCSAqLwogCi0JLyogZnJvbSBTVENQLCByZXRyYW5zIHF1ZXVlIGhpbnRpbmcgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiogbG9zdF9za2JfaGludDsKLQotCXN0cnVjdCBza19idWZmICpzY29yZWJvYXJkX3NrYl9oaW50OwotCXN0cnVjdCBza19idWZmICpyZXRyYW5zbWl0X3NrYl9oaW50OwotCXN0cnVjdCBza19idWZmICpmb3J3YXJkX3NrYl9oaW50OwotCiAJaW50ICAgICBsb3N0X2NudF9oaW50OwogCWludCAgICAgcmV0cmFuc21pdF9jbnRfaGludDsKIAogCXUzMglsb3N0X3JldHJhbnNfbG93OwkvKiBTZW50IHNlcSBhZnRlciBhbnkgcnhtaXQgKGxvd2VzdCkgKi8KIAotCXUxNglhZHZtc3M7CQkvKiBBZHZlcnRpc2VkIE1TUwkJCSovCisJdTgJcmVvcmRlcmluZzsJLyogUGFja2V0IHJlb3JkZXJpbmcgbWV0cmljLgkJKi8KKwl1OAlrZWVwYWxpdmVfcHJvYmVzOyAvKiBudW0gb2YgYWxsb3dlZCBrZWVwIGFsaXZlIHByb2JlcwkqLwogCXUzMglwcmlvcl9zc3RocmVzaDsgLyogc3N0aHJlc2ggc2F2ZWQgYXQgcmVjb3Zlcnkgc3RhcnQJKi8KLQl1MzIJbG9zdF9vdXQ7CS8qIExvc3QgcGFja2V0cwkJCSovCi0JdTMyCXNhY2tlZF9vdXQ7CS8qIFNBQ0snZCBwYWNrZXRzCQkJKi8KLQl1MzIJZmFja2V0c19vdXQ7CS8qIEZBQ0snZCBwYWNrZXRzCQkJKi8KIAl1MzIJaGlnaF9zZXE7CS8qIHNuZF9ueHQgYXQgb25zZXQgb2YgY29uZ2VzdGlvbgkqLwogCiAJdTMyCXJldHJhbnNfc3RhbXA7CS8qIFRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZXRyYW5zbWl0LApAQCAtMzYxLDIzICszNzIsMTYgQEAKIAkJCQkgKiB0aGUgZmlyc3QgU1lOLiAqLwogCXUzMgl1bmRvX21hcmtlcjsJLyogdHJhY2tpbmcgcmV0cmFucyBzdGFydGVkIGhlcmUuICovCiAJaW50CXVuZG9fcmV0cmFuczsJLyogbnVtYmVyIG9mIHVuZG9hYmxlIHJldHJhbnNtaXNzaW9ucy4gKi8KLQl1MzIJdXJnX3NlcTsJLyogU2VxIG9mIHJlY2VpdmVkIHVyZ2VudCBwb2ludGVyICovCi0JdTE2CXVyZ19kYXRhOwkvKiBTYXZlZCBvY3RldCBvZiBPT0IgZGF0YSBhbmQgY29udHJvbCBmbGFncyAqLwotCXU4CXVyZ19tb2RlOwkvKiBJbiB1cmdlbnQgbW9kZQkJKi8KLQl1OAllY25fZmxhZ3M7CS8qIEVDTiBzdGF0dXMgYml0cy4JCQkqLwotCXUzMglzbmRfdXA7CQkvKiBVcmdlbnQgcG9pbnRlcgkJKi8KLQogCXUzMgl0b3RhbF9yZXRyYW5zOwkvKiBUb3RhbCByZXRyYW5zbWl0cyBmb3IgZW50aXJlIGNvbm5lY3Rpb24gKi8KLQl1MzIJYnl0ZXNfYWNrZWQ7CS8qIEFwcHJvcHJpYXRlIEJ5dGUgQ291bnRpbmcgLSBSRkMzNDY1ICovCisKKwl1MzIJdXJnX3NlcTsJLyogU2VxIG9mIHJlY2VpdmVkIHVyZ2VudCBwb2ludGVyICovCisJdTMyCXNuZF91cDsJCS8qIFVyZ2VudCBwb2ludGVyCQkqLwogCiAJdW5zaWduZWQgaW50CQlrZWVwYWxpdmVfdGltZTsJICAvKiB0aW1lIGJlZm9yZSBrZWVwIGFsaXZlIHRha2VzIHBsYWNlICovCiAJdW5zaWduZWQgaW50CQlrZWVwYWxpdmVfaW50dmw7ICAvKiB0aW1lIGludGVydmFsIGJldHdlZW4ga2VlcCBhbGl2ZSBwcm9iZXMgKi8KLQlpbnQJCQlsaW5nZXIyOwogCiAJdW5zaWduZWQgbG9uZyBsYXN0X3N5bnFfb3ZlcmZsb3c7IAogCi0JdTMyCXRzb19kZWZlcnJlZDsKLQogLyogUmVjZWl2ZXIgc2lkZSBSVFQgZXN0aW1hdGlvbiAqLwogCXN0cnVjdCB7CiAJCXUzMglydHQ7CkBAIC00MDUsNiArNDA5LDggQEAKIC8qIFRDUCBNRDUgU2lnbmFndXJlIE9wdGlvbiBpbmZvcm1hdGlvbiAqLwogCXN0cnVjdCB0Y3BfbWQ1c2lnX2luZm8JKm1kNXNpZ19pbmZvOwogI2VuZGlmCisKKwlpbnQJCQlsaW5nZXIyOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGNwX3NvY2sgKnRjcF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RleHRzZWFyY2guaCBiL2luY2x1ZGUvbGludXgvdGV4dHNlYXJjaC5oCmluZGV4IDZmMzcxZjIuLmQ5YTg1ZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGV4dHNlYXJjaC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGV4dHNlYXJjaC5oCkBAIC0xMCwxMCArMTAsOCBAQAogCiBzdHJ1Y3QgdHNfY29uZmlnOwogCi0vKioKLSAqIFRTX0FVVE9MT0FEIC0gQXV0b21hdGljYWxseSBsb2FkIHRleHRzZWFyY2ggbW9kdWxlcyB3aGVuIG5lZWRlZAotICovCi0jZGVmaW5lIFRTX0FVVE9MT0FECTEKKyNkZWZpbmUgVFNfQVVUT0xPQUQJMSAvKiBBdXRvbWF0aWNhbGx5IGxvYWQgdGV4dHNlYXJjaCBtb2R1bGVzIHdoZW4gbmVlZGVkICovCisjZGVmaW5lIFRTX0lHTk9SRUNBU0UJMiAvKiBTZWFyY2hlcyBzdHJpbmcgY2FzZSBpbnNlbnNpdGl2ZWx5ICovCiAKIC8qKgogICogc3RydWN0IHRzX3N0YXRlIC0gc2VhcmNoIHN0YXRlCkBAIC0zOSw3ICszNyw3IEBACiBzdHJ1Y3QgdHNfb3BzCiB7CiAJY29uc3QgY2hhcgkJKm5hbWU7Ci0Jc3RydWN0IHRzX2NvbmZpZyAqCSgqaW5pdCkoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBpbnQsIGdmcF90KTsKKwlzdHJ1Y3QgdHNfY29uZmlnICoJKCppbml0KShjb25zdCB2b2lkICosIHVuc2lnbmVkIGludCwgZ2ZwX3QsIGludCk7CiAJdW5zaWduZWQgaW50CQkoKmZpbmQpKHN0cnVjdCB0c19jb25maWcgKiwKIAkJCQkJc3RydWN0IHRzX3N0YXRlICopOwogCXZvaWQJCQkoKmRlc3Ryb3kpKHN0cnVjdCB0c19jb25maWcgKik7CkBAIC01MiwxMiArNTAsMTQgQEAKIC8qKgogICogc3RydWN0IHRzX2NvbmZpZyAtIHNlYXJjaCBjb25maWd1cmF0aW9uCiAgKiBAb3BzOiBvcGVyYXRpb25zIG9mIGNob3NlbiBhbGdvcml0aG0KKyAqIEBmbGFnczogZmxhZ3MKICAqIEBnZXRfbmV4dF9ibG9jazogY2FsbGJhY2sgdG8gZmV0Y2ggdGhlIG5leHQgYmxvY2sgdG8gc2VhcmNoIGluCiAgKiBAZmluaXNoOiBjYWxsYmFjayB0byBmaW5hbGl6ZSBhIHNlYXJjaAogICovCiBzdHJ1Y3QgdHNfY29uZmlnCiB7CiAJc3RydWN0IHRzX29wcwkJKm9wczsKKwlpbnQgCQkJZmxhZ3M7CiAKIAkvKioKIAkgKiBnZXRfbmV4dF9ibG9jayAtIGZldGNoIG5leHQgYmxvY2sgb2YgZGF0YQpAQCAtMTYyLDExICsxNjIsMTAgQEAKIHsKIAlzdHJ1Y3QgdHNfY29uZmlnICpjb25mOwogCi0JY29uZiA9IGttYWxsb2MoVFNfUFJJVl9BTElHTihzaXplb2YoKmNvbmYpKSArIHBheWxvYWQsIGdmcF9tYXNrKTsKKwljb25mID0ga3phbGxvYyhUU19QUklWX0FMSUdOKHNpemVvZigqY29uZikpICsgcGF5bG9hZCwgZ2ZwX21hc2spOwogCWlmIChjb25mID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JbWVtc2V0KGNvbmYsIDAsIFRTX1BSSVZfQUxJR04oc2l6ZW9mKCpjb25mKSkgKyBwYXlsb2FkKTsKIAlyZXR1cm4gY29uZjsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aXBjX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC90aXBjX2NvbmZpZy5oCmluZGV4IGIwYzkxNmQuLjJiYzZmYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGlwY19jb25maWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpcGNfY29uZmlnLmgKQEAgLTIsNyArMiw3IEBACiAgKiBpbmNsdWRlL2xpbnV4L3RpcGNfY29uZmlnLmg6IEluY2x1ZGUgZmlsZSBmb3IgVElQQyBjb25maWd1cmF0aW9uIGludGVyZmFjZQogICogCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiwgRXJpY3Nzb24gQUIKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgV2luZCBSaXZlciBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNywgV2luZCBSaXZlciBTeXN0ZW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTM2LDYgKzEzNiwxNCBAQAogI2RlZmluZSAgVElQQ19DTURfU0VUX05FVElEICAgICAgICAgMHg4MDBCICAgIC8qIHR4IHVuc2lnbmVkLCByeCBub25lICovCiAKIC8qCisgKiBSZXNlcnZlZCBjb21tYW5kczoKKyAqIE1heSBub3QgYmUgaXNzdWVkIGJ5IGFueSBwcm9jZXNzLgorICogVXNlZCBpbnRlcm5hbGx5IGJ5IFRJUEMuCisgKi8KKworI2RlZmluZSAgVElQQ19DTURfTk9UX05FVF9BRE1JTiAgICAgMHhDMDAxICAgIC8qIHR4IG5vbmUsIHJ4IG5vbmUgKi8KKworLyoKICAqIFRMViB0eXBlcyBkZWZpbmVkIGZvciBUSVBDCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggMzI0YTNiMi4uZTM1NzljYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC03MSw3ICs3MSw4IEBACiAJc3RydWN0IHR0eV9idWZmZXIgKmhlYWQ7CS8qIFF1ZXVlIGhlYWQgKi8KIAlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGFpbDsJLyogQWN0aXZlIGJ1ZmZlciAqLwogCXN0cnVjdCB0dHlfYnVmZmVyICpmcmVlOwkvKiBGcmVlIHF1ZXVlIGhlYWQgKi8KLQlpbnQgbWVtb3J5X3VzZWQ7CQkvKiBCdWZmZXIgc3BhY2UgdXNlZCBleGNsdWRpbmcgZnJlZSBxdWV1ZSAqLworCWludCBtZW1vcnlfdXNlZDsJCS8qIEJ1ZmZlciBzcGFjZSB1c2VkIGV4Y2x1ZGluZworCQkJCQkJCQlmcmVlIHF1ZXVlICovCiB9OwogLyoKICAqIFdoZW4gYSBicmVhaywgZnJhbWUgZXJyb3IsIG9yIHBhcml0eSBlcnJvciBoYXBwZW5zLCB0aGVzZSBjb2RlcyBhcmUKQEAgLTEwMSw3MSArMTAyLDk2IEBACiAjZGVmaW5lIExORVhUX0NIQVIodHR5KQkoKHR0eSktPnRlcm1pb3MtPmNfY2NbVkxORVhUXSkKICNkZWZpbmUgRU9MMl9DSEFSKHR0eSkgKCh0dHkpLT50ZXJtaW9zLT5jX2NjW1ZFT0wyXSkKIAotI2RlZmluZSBfSV9GTEFHKHR0eSxmKQkoKHR0eSktPnRlcm1pb3MtPmNfaWZsYWcgJiAoZikpCi0jZGVmaW5lIF9PX0ZMQUcodHR5LGYpCSgodHR5KS0+dGVybWlvcy0+Y19vZmxhZyAmIChmKSkKLSNkZWZpbmUgX0NfRkxBRyh0dHksZikJKCh0dHkpLT50ZXJtaW9zLT5jX2NmbGFnICYgKGYpKQotI2RlZmluZSBfTF9GTEFHKHR0eSxmKQkoKHR0eSktPnRlcm1pb3MtPmNfbGZsYWcgJiAoZikpCisjZGVmaW5lIF9JX0ZMQUcodHR5LCBmKQkoKHR0eSktPnRlcm1pb3MtPmNfaWZsYWcgJiAoZikpCisjZGVmaW5lIF9PX0ZMQUcodHR5LCBmKQkoKHR0eSktPnRlcm1pb3MtPmNfb2ZsYWcgJiAoZikpCisjZGVmaW5lIF9DX0ZMQUcodHR5LCBmKQkoKHR0eSktPnRlcm1pb3MtPmNfY2ZsYWcgJiAoZikpCisjZGVmaW5lIF9MX0ZMQUcodHR5LCBmKQkoKHR0eSktPnRlcm1pb3MtPmNfbGZsYWcgJiAoZikpCiAKLSNkZWZpbmUgSV9JR05CUksodHR5KQlfSV9GTEFHKCh0dHkpLElHTkJSSykKLSNkZWZpbmUgSV9CUktJTlQodHR5KQlfSV9GTEFHKCh0dHkpLEJSS0lOVCkKLSNkZWZpbmUgSV9JR05QQVIodHR5KQlfSV9GTEFHKCh0dHkpLElHTlBBUikKLSNkZWZpbmUgSV9QQVJNUksodHR5KQlfSV9GTEFHKCh0dHkpLFBBUk1SSykKLSNkZWZpbmUgSV9JTlBDSyh0dHkpCV9JX0ZMQUcoKHR0eSksSU5QQ0spCi0jZGVmaW5lIElfSVNUUklQKHR0eSkJX0lfRkxBRygodHR5KSxJU1RSSVApCi0jZGVmaW5lIElfSU5MQ1IodHR5KQlfSV9GTEFHKCh0dHkpLElOTENSKQotI2RlZmluZSBJX0lHTkNSKHR0eSkJX0lfRkxBRygodHR5KSxJR05DUikKLSNkZWZpbmUgSV9JQ1JOTCh0dHkpCV9JX0ZMQUcoKHR0eSksSUNSTkwpCi0jZGVmaW5lIElfSVVDTEModHR5KQlfSV9GTEFHKCh0dHkpLElVQ0xDKQotI2RlZmluZSBJX0lYT04odHR5KQlfSV9GTEFHKCh0dHkpLElYT04pCi0jZGVmaW5lIElfSVhBTlkodHR5KQlfSV9GTEFHKCh0dHkpLElYQU5ZKQotI2RlZmluZSBJX0lYT0ZGKHR0eSkJX0lfRkxBRygodHR5KSxJWE9GRikKLSNkZWZpbmUgSV9JTUFYQkVMKHR0eSkJX0lfRkxBRygodHR5KSxJTUFYQkVMKQotI2RlZmluZSBJX0lVVEY4KHR0eSkJX0lfRkxBRygodHR5KSxJVVRGOCkKKyNkZWZpbmUgSV9JR05CUksodHR5KQlfSV9GTEFHKCh0dHkpLCBJR05CUkspCisjZGVmaW5lIElfQlJLSU5UKHR0eSkJX0lfRkxBRygodHR5KSwgQlJLSU5UKQorI2RlZmluZSBJX0lHTlBBUih0dHkpCV9JX0ZMQUcoKHR0eSksIElHTlBBUikKKyNkZWZpbmUgSV9QQVJNUksodHR5KQlfSV9GTEFHKCh0dHkpLCBQQVJNUkspCisjZGVmaW5lIElfSU5QQ0sodHR5KQlfSV9GTEFHKCh0dHkpLCBJTlBDSykKKyNkZWZpbmUgSV9JU1RSSVAodHR5KQlfSV9GTEFHKCh0dHkpLCBJU1RSSVApCisjZGVmaW5lIElfSU5MQ1IodHR5KQlfSV9GTEFHKCh0dHkpLCBJTkxDUikKKyNkZWZpbmUgSV9JR05DUih0dHkpCV9JX0ZMQUcoKHR0eSksIElHTkNSKQorI2RlZmluZSBJX0lDUk5MKHR0eSkJX0lfRkxBRygodHR5KSwgSUNSTkwpCisjZGVmaW5lIElfSVVDTEModHR5KQlfSV9GTEFHKCh0dHkpLCBJVUNMQykKKyNkZWZpbmUgSV9JWE9OKHR0eSkJX0lfRkxBRygodHR5KSwgSVhPTikKKyNkZWZpbmUgSV9JWEFOWSh0dHkpCV9JX0ZMQUcoKHR0eSksIElYQU5ZKQorI2RlZmluZSBJX0lYT0ZGKHR0eSkJX0lfRkxBRygodHR5KSwgSVhPRkYpCisjZGVmaW5lIElfSU1BWEJFTCh0dHkpCV9JX0ZMQUcoKHR0eSksIElNQVhCRUwpCisjZGVmaW5lIElfSVVURjgodHR5KQlfSV9GTEFHKCh0dHkpLCBJVVRGOCkKIAotI2RlZmluZSBPX09QT1NUKHR0eSkJX09fRkxBRygodHR5KSxPUE9TVCkKLSNkZWZpbmUgT19PTENVQyh0dHkpCV9PX0ZMQUcoKHR0eSksT0xDVUMpCi0jZGVmaW5lIE9fT05MQ1IodHR5KQlfT19GTEFHKCh0dHkpLE9OTENSKQotI2RlZmluZSBPX09DUk5MKHR0eSkJX09fRkxBRygodHR5KSxPQ1JOTCkKLSNkZWZpbmUgT19PTk9DUih0dHkpCV9PX0ZMQUcoKHR0eSksT05PQ1IpCi0jZGVmaW5lIE9fT05MUkVUKHR0eSkJX09fRkxBRygodHR5KSxPTkxSRVQpCi0jZGVmaW5lIE9fT0ZJTEwodHR5KQlfT19GTEFHKCh0dHkpLE9GSUxMKQotI2RlZmluZSBPX09GREVMKHR0eSkJX09fRkxBRygodHR5KSxPRkRFTCkKLSNkZWZpbmUgT19OTERMWSh0dHkpCV9PX0ZMQUcoKHR0eSksTkxETFkpCi0jZGVmaW5lIE9fQ1JETFkodHR5KQlfT19GTEFHKCh0dHkpLENSRExZKQotI2RlZmluZSBPX1RBQkRMWSh0dHkpCV9PX0ZMQUcoKHR0eSksVEFCRExZKQotI2RlZmluZSBPX0JTRExZKHR0eSkJX09fRkxBRygodHR5KSxCU0RMWSkKLSNkZWZpbmUgT19WVERMWSh0dHkpCV9PX0ZMQUcoKHR0eSksVlRETFkpCi0jZGVmaW5lIE9fRkZETFkodHR5KQlfT19GTEFHKCh0dHkpLEZGRExZKQorI2RlZmluZSBPX09QT1NUKHR0eSkJX09fRkxBRygodHR5KSwgT1BPU1QpCisjZGVmaW5lIE9fT0xDVUModHR5KQlfT19GTEFHKCh0dHkpLCBPTENVQykKKyNkZWZpbmUgT19PTkxDUih0dHkpCV9PX0ZMQUcoKHR0eSksIE9OTENSKQorI2RlZmluZSBPX09DUk5MKHR0eSkJX09fRkxBRygodHR5KSwgT0NSTkwpCisjZGVmaW5lIE9fT05PQ1IodHR5KQlfT19GTEFHKCh0dHkpLCBPTk9DUikKKyNkZWZpbmUgT19PTkxSRVQodHR5KQlfT19GTEFHKCh0dHkpLCBPTkxSRVQpCisjZGVmaW5lIE9fT0ZJTEwodHR5KQlfT19GTEFHKCh0dHkpLCBPRklMTCkKKyNkZWZpbmUgT19PRkRFTCh0dHkpCV9PX0ZMQUcoKHR0eSksIE9GREVMKQorI2RlZmluZSBPX05MRExZKHR0eSkJX09fRkxBRygodHR5KSwgTkxETFkpCisjZGVmaW5lIE9fQ1JETFkodHR5KQlfT19GTEFHKCh0dHkpLCBDUkRMWSkKKyNkZWZpbmUgT19UQUJETFkodHR5KQlfT19GTEFHKCh0dHkpLCBUQUJETFkpCisjZGVmaW5lIE9fQlNETFkodHR5KQlfT19GTEFHKCh0dHkpLCBCU0RMWSkKKyNkZWZpbmUgT19WVERMWSh0dHkpCV9PX0ZMQUcoKHR0eSksIFZURExZKQorI2RlZmluZSBPX0ZGRExZKHR0eSkJX09fRkxBRygodHR5KSwgRkZETFkpCiAKLSNkZWZpbmUgQ19CQVVEKHR0eSkJX0NfRkxBRygodHR5KSxDQkFVRCkKLSNkZWZpbmUgQ19DU0laRSh0dHkpCV9DX0ZMQUcoKHR0eSksQ1NJWkUpCi0jZGVmaW5lIENfQ1NUT1BCKHR0eSkJX0NfRkxBRygodHR5KSxDU1RPUEIpCi0jZGVmaW5lIENfQ1JFQUQodHR5KQlfQ19GTEFHKCh0dHkpLENSRUFEKQotI2RlZmluZSBDX1BBUkVOQih0dHkpCV9DX0ZMQUcoKHR0eSksUEFSRU5CKQotI2RlZmluZSBDX1BBUk9ERCh0dHkpCV9DX0ZMQUcoKHR0eSksUEFST0REKQotI2RlZmluZSBDX0hVUENMKHR0eSkJX0NfRkxBRygodHR5KSxIVVBDTCkKLSNkZWZpbmUgQ19DTE9DQUwodHR5KQlfQ19GTEFHKCh0dHkpLENMT0NBTCkKLSNkZWZpbmUgQ19DSUJBVUQodHR5KQlfQ19GTEFHKCh0dHkpLENJQkFVRCkKLSNkZWZpbmUgQ19DUlRTQ1RTKHR0eSkJX0NfRkxBRygodHR5KSxDUlRTQ1RTKQorI2RlZmluZSBDX0JBVUQodHR5KQlfQ19GTEFHKCh0dHkpLCBDQkFVRCkKKyNkZWZpbmUgQ19DU0laRSh0dHkpCV9DX0ZMQUcoKHR0eSksIENTSVpFKQorI2RlZmluZSBDX0NTVE9QQih0dHkpCV9DX0ZMQUcoKHR0eSksIENTVE9QQikKKyNkZWZpbmUgQ19DUkVBRCh0dHkpCV9DX0ZMQUcoKHR0eSksIENSRUFEKQorI2RlZmluZSBDX1BBUkVOQih0dHkpCV9DX0ZMQUcoKHR0eSksIFBBUkVOQikKKyNkZWZpbmUgQ19QQVJPREQodHR5KQlfQ19GTEFHKCh0dHkpLCBQQVJPREQpCisjZGVmaW5lIENfSFVQQ0wodHR5KQlfQ19GTEFHKCh0dHkpLCBIVVBDTCkKKyNkZWZpbmUgQ19DTE9DQUwodHR5KQlfQ19GTEFHKCh0dHkpLCBDTE9DQUwpCisjZGVmaW5lIENfQ0lCQVVEKHR0eSkJX0NfRkxBRygodHR5KSwgQ0lCQVVEKQorI2RlZmluZSBDX0NSVFNDVFModHR5KQlfQ19GTEFHKCh0dHkpLCBDUlRTQ1RTKQogCi0jZGVmaW5lIExfSVNJRyh0dHkpCV9MX0ZMQUcoKHR0eSksSVNJRykKLSNkZWZpbmUgTF9JQ0FOT04odHR5KQlfTF9GTEFHKCh0dHkpLElDQU5PTikKLSNkZWZpbmUgTF9YQ0FTRSh0dHkpCV9MX0ZMQUcoKHR0eSksWENBU0UpCi0jZGVmaW5lIExfRUNITyh0dHkpCV9MX0ZMQUcoKHR0eSksRUNITykKLSNkZWZpbmUgTF9FQ0hPRSh0dHkpCV9MX0ZMQUcoKHR0eSksRUNIT0UpCi0jZGVmaW5lIExfRUNIT0sodHR5KQlfTF9GTEFHKCh0dHkpLEVDSE9LKQotI2RlZmluZSBMX0VDSE9OTCh0dHkpCV9MX0ZMQUcoKHR0eSksRUNIT05MKQotI2RlZmluZSBMX05PRkxTSCh0dHkpCV9MX0ZMQUcoKHR0eSksTk9GTFNIKQotI2RlZmluZSBMX1RPU1RPUCh0dHkpCV9MX0ZMQUcoKHR0eSksVE9TVE9QKQotI2RlZmluZSBMX0VDSE9DVEwodHR5KQlfTF9GTEFHKCh0dHkpLEVDSE9DVEwpCi0jZGVmaW5lIExfRUNIT1BSVCh0dHkpCV9MX0ZMQUcoKHR0eSksRUNIT1BSVCkKLSNkZWZpbmUgTF9FQ0hPS0UodHR5KQlfTF9GTEFHKCh0dHkpLEVDSE9LRSkKLSNkZWZpbmUgTF9GTFVTSE8odHR5KQlfTF9GTEFHKCh0dHkpLEZMVVNITykKLSNkZWZpbmUgTF9QRU5ESU4odHR5KQlfTF9GTEFHKCh0dHkpLFBFTkRJTikKLSNkZWZpbmUgTF9JRVhURU4odHR5KQlfTF9GTEFHKCh0dHkpLElFWFRFTikKKyNkZWZpbmUgTF9JU0lHKHR0eSkJX0xfRkxBRygodHR5KSwgSVNJRykKKyNkZWZpbmUgTF9JQ0FOT04odHR5KQlfTF9GTEFHKCh0dHkpLCBJQ0FOT04pCisjZGVmaW5lIExfWENBU0UodHR5KQlfTF9GTEFHKCh0dHkpLCBYQ0FTRSkKKyNkZWZpbmUgTF9FQ0hPKHR0eSkJX0xfRkxBRygodHR5KSwgRUNITykKKyNkZWZpbmUgTF9FQ0hPRSh0dHkpCV9MX0ZMQUcoKHR0eSksIEVDSE9FKQorI2RlZmluZSBMX0VDSE9LKHR0eSkJX0xfRkxBRygodHR5KSwgRUNIT0spCisjZGVmaW5lIExfRUNIT05MKHR0eSkJX0xfRkxBRygodHR5KSwgRUNIT05MKQorI2RlZmluZSBMX05PRkxTSCh0dHkpCV9MX0ZMQUcoKHR0eSksIE5PRkxTSCkKKyNkZWZpbmUgTF9UT1NUT1AodHR5KQlfTF9GTEFHKCh0dHkpLCBUT1NUT1ApCisjZGVmaW5lIExfRUNIT0NUTCh0dHkpCV9MX0ZMQUcoKHR0eSksIEVDSE9DVEwpCisjZGVmaW5lIExfRUNIT1BSVCh0dHkpCV9MX0ZMQUcoKHR0eSksIEVDSE9QUlQpCisjZGVmaW5lIExfRUNIT0tFKHR0eSkJX0xfRkxBRygodHR5KSwgRUNIT0tFKQorI2RlZmluZSBMX0ZMVVNITyh0dHkpCV9MX0ZMQUcoKHR0eSksIEZMVVNITykKKyNkZWZpbmUgTF9QRU5ESU4odHR5KQlfTF9GTEFHKCh0dHkpLCBQRU5ESU4pCisjZGVmaW5lIExfSUVYVEVOKHR0eSkJX0xfRkxBRygodHR5KSwgSUVYVEVOKQogCiBzdHJ1Y3QgZGV2aWNlOwogc3RydWN0IHNpZ25hbF9zdHJ1Y3Q7CisKKy8qCisgKiBQb3J0IGxldmVsIGluZm9ybWF0aW9uLiBFYWNoIGRldmljZSBrZWVwcyBpdHMgb3duIHBvcnQgbGV2ZWwgaW5mb3JtYXRpb24KKyAqIHNvIHByb3ZpZGUgYSBjb21tb24gc3RydWN0dXJlIGZvciB0aG9zZSBwb3J0cyB3YW50aW5nIHRvIHVzZSBjb21tb24gc3VwcG9ydAorICogcm91dGluZXMuCisgKgorICogVGhlIHR0eSBwb3J0IGhhcyBhIGRpZmZlcmVudCBsaWZldGltZSB0byB0aGUgdHR5IHNvIG11c3QgYmUga2VwdCBhcGFydC4KKyAqIEluIGFkZGl0aW9uIGJlIGNhcmVmdWwgYXMgdHR5IC0+IHBvcnQgbWFwcGluZ3MgYXJlIHZhbGlkIGZvciB0aGUgbGlmZQorICogb2YgdGhlIHR0eSBvYmplY3QgYnV0IGluIG1hbnkgY2FzZXMgcG9ydCAtPiB0dHkgbWFwcGluZ3MgYXJlIHZhbGlkIG9ubHkKKyAqIHVudGlsIGEgaGFuZ3VwIHNvIGRvbid0IHVzZSB0aGUgd3JvbmcgcGF0aC4KKyAqLworCitzdHJ1Y3QgdHR5X3BvcnQgeworCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CQkvKiBCYWNrIHBvaW50ZXIgKi8KKwlpbnQJCQlibG9ja2VkX29wZW47CS8qIFdhaXRpbmcgdG8gb3BlbiAqLworCWludAkJCWNvdW50OwkJLyogVXNhZ2UgY291bnQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlvcGVuX3dhaXQ7CS8qIE9wZW4gd2FpdGVycyAqLworCXdhaXRfcXVldWVfaGVhZF90CWNsb3NlX3dhaXQ7CS8qIENsb3NlIHdhaXRlcnMgKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIFRUWSBmbGFncyBBU1lfKi8KKwlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwkJLyogTG9ja2luZyAqLworCXVuc2lnbmVkIGNoYXIJCSp4bWl0X2J1ZjsJLyogT3B0aW9uYWwgYnVmZmVyICovCisJaW50CQkJY2xvc2VfZGVsYXk7CS8qIENsb3NlIHBvcnQgZGVsYXkgKi8KKwlpbnQJCQljbG9zaW5nX3dhaXQ7CS8qIERlbGF5IGZvciBvdXRwdXQgKi8KK307CisKIC8qCiAgKiBXaGVyZSBhbGwgb2YgdGhlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHR0eSBpcyBrZXB0IHdoaWxlIHRoZSB0dHkKICAqIGlzIG9wZW4uICBTaW5jZSB0aGUgdGVybWlvcyBzdGF0ZSBzaG91bGQgYmUga2VwdCBldmVuIGlmIHRoZSB0dHkKQEAgLTE4NSw2ICsyMTEsNyBAQAogCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXI7CiAJY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zICpvcHM7CiAJaW50IGluZGV4OworCS8qIFRoZSBsZGlzYyBvYmplY3RzIGFyZSBwcm90ZWN0ZWQgYnkgdHR5X2xkaXNjX2xvY2sgYXQgdGhlIG1vbWVudCAqLwogCXN0cnVjdCB0dHlfbGRpc2MgbGRpc2M7CiAJc3RydWN0IG11dGV4IHRlcm1pb3NfbXV0ZXg7CiAJc3BpbmxvY2tfdCBjdHJsX2xvY2s7CkBAIC0yMTMsNyArMjQwLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHR0eV9maWxlczsKIAogI2RlZmluZSBOX1RUWV9CVUZfU0laRSA0MDk2Ci0JCisKIAkvKgogCSAqIFRoZSBmb2xsb3dpbmcgaXMgZGF0YSBmb3IgdGhlIE5fVFRZIGxpbmUgZGlzY2lwbGluZS4gIEZvcgogCSAqIGhpc3RvcmljYWwgcmVhc29ucywgdGhpcyBpcyBpbmNsdWRlZCBpbiB0aGUgdHR5IHN0cnVjdHVyZS4KQEAgLTI0MSw2ICsyNjgsNyBAQAogCXNwaW5sb2NrX3QgcmVhZF9sb2NrOwogCS8qIElmIHRoZSB0dHkgaGFzIGEgcGVuZGluZyBkb19TQUssIHF1ZXVlIGl0IGhlcmUgLSBha3BtICovCiAJc3RydWN0IHdvcmtfc3RydWN0IFNBS193b3JrOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydDsKIH07CiAKIC8qIHR0eSBtYWdpYyBudW1iZXIgKi8KQEAgLTI0OCwxNCArMjc2LDE0IEBACiAKIC8qCiAgKiBUaGVzZSBiaXRzIGFyZSB1c2VkIGluIHRoZSBmbGFncyBmaWVsZCBvZiB0aGUgdHR5IHN0cnVjdHVyZS4KLSAqIAorICoKICAqIFNvIHRoYXQgaW50ZXJydXB0cyB3b24ndCBiZSBhYmxlIHRvIG1lc3MgdXAgdGhlIHF1ZXVlcywKICAqIGNvcHlfdG9fY29va2VkIG11c3QgYmUgYXRvbWljIHdpdGggcmVzcGVjdCB0byBpdHNlbGYsIGFzIG11c3QKICAqIHR0eS0+d3JpdGUuICBUaHVzLCB5b3UgbXVzdCB1c2UgdGhlIGlubGluZSBmdW5jdGlvbnMgc2V0X2JpdCgpIGFuZAogICogY2xlYXJfYml0KCkgdG8gbWFrZSB0aGluZ3MgYXRvbWljLgogICovCiAjZGVmaW5lIFRUWV9USFJPVFRMRUQgCQkwCS8qIENhbGwgdW50aHJvdHRsZSgpIGF0IHRocmVzaG9sZCBtaW4gKi8KLSNkZWZpbmUgVFRZX0lPX0VSUk9SIAkJMQkvKiBDYW5zZSBhbiBJL08gZXJyb3IgKG1heSBiZSBubyBsZGlzYyB0b28pICovCisjZGVmaW5lIFRUWV9JT19FUlJPUiAJCTEJLyogQ2F1c2UgYW4gSS9PIGVycm9yIChtYXkgYmUgbm8gbGRpc2MgdG9vKSAqLwogI2RlZmluZSBUVFlfT1RIRVJfQ0xPU0VEIAkyCS8qIE90aGVyIHNpZGUgKGlmIGFueSkgaGFzIGNsb3NlZCAqLwogI2RlZmluZSBUVFlfRVhDTFVTSVZFIAkJMwkvKiBFeGNsdXNpdmUgb3BlbiBtb2RlICovCiAjZGVmaW5lIFRUWV9ERUJVRyAJCTQJLyogRGVidWdnaW5nICovCkBAIC0yODUsMTIgKzMxMywxMCBAQAogZXh0ZXJuIGludCB0dHlfcGFyYW5vaWFfY2hlY2soc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKnJvdXRpbmUpOwogZXh0ZXJuIGNoYXIgKnR0eV9uYW1lKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKmJ1Zik7Ci1leHRlcm4gdm9pZCB0dHlfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBsb25nIHRpbWVvdXQpOwotZXh0ZXJuIGludCB0dHlfY2hlY2tfY2hhbmdlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKLWV4dGVybiB2b2lkIHN0b3BfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKLWV4dGVybiB2b2lkIHN0YXJ0X3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7Ci1leHRlcm4gaW50IHR0eV9yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYywgc3RydWN0IHR0eV9sZGlzYyAqbmV3X2xkaXNjKTsKLWV4dGVybiBpbnQgdHR5X3VucmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MpOworZXh0ZXJuIHZvaWQgdHR5X3dhaXRfdW50aWxfc2VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBsb25nIHRpbWVvdXQpOworZXh0ZXJuIGludCB0dHlfY2hlY2tfY2hhbmdlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgc3RvcF90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gdm9pZCBzdGFydF90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gaW50IHR0eV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcik7CiBleHRlcm4gaW50IHR0eV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyKTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlICp0dHlfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCkBAIC0zMTAsMTAgKzMzNiwxMCBAQAogZXh0ZXJuIHN0cnVjdCBwaWQgKnR0eV9nZXRfcGdycChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiBpbnQgaXNfaWdub3JlZChpbnQgc2lnKTsKIGV4dGVybiBpbnQgdHR5X3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLWV4dGVybiB2b2lkIHR0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwotZXh0ZXJuIHZvaWQgdHR5X3ZoYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOworZXh0ZXJuIHZvaWQgdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgdHR5X3VuaGFuZ3VwKHN0cnVjdCBmaWxlICpmaWxwKTsKLWV4dGVybiBpbnQgdHR5X2h1bmdfdXBfcChzdHJ1Y3QgZmlsZSAqIGZpbHApOworZXh0ZXJuIGludCB0dHlfaHVuZ191cF9wKHN0cnVjdCBmaWxlICpmaWxwKTsKIGV4dGVybiB2b2lkIGRvX1NBSyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIF9fZG9fU0FLKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgZGlzYXNzb2NpYXRlX2N0dHkoaW50IHByaXYpOwpAQCAtMzIyLDE3ICszNDgsMTcgQEAKIGV4dGVybiBzcGVlZF90IHR0eV9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHNwZWVkX3QgdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcyk7CiBleHRlcm4gc3BlZWRfdCB0dHlfdGVybWlvc19pbnB1dF9iYXVkX3JhdGUoc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zKTsKLWV4dGVybiB2b2lkIHR0eV90ZXJtaW9zX2VuY29kZV9iYXVkX3JhdGUoc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLCBzcGVlZF90IGliYXVkLCBzcGVlZF90IG9iYXVkKTsKLWV4dGVybiB2b2lkIHR0eV9lbmNvZGVfYmF1ZF9yYXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHNwZWVkX3QgaWJhdWQsIHNwZWVkX3Qgb2JhdWQpOworZXh0ZXJuIHZvaWQgdHR5X3Rlcm1pb3NfZW5jb2RlX2JhdWRfcmF0ZShzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkJCQlzcGVlZF90IGliYXVkLCBzcGVlZF90IG9iYXVkKTsKK2V4dGVybiB2b2lkIHR0eV9lbmNvZGVfYmF1ZF9yYXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCQlzcGVlZF90IGliYXVkLCBzcGVlZF90IG9iYXVkKTsKIGV4dGVybiB2b2lkIHR0eV90ZXJtaW9zX2NvcHlfaHcoc3RydWN0IGt0ZXJtaW9zICpuZXcsIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKIGV4dGVybiBpbnQgdHR5X3Rlcm1pb3NfaHdfY2hhbmdlKHN0cnVjdCBrdGVybWlvcyAqYSwgc3RydWN0IGt0ZXJtaW9zICpiKTsKIAogZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWYoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB0dHlfbGRpc2NfZGVyZWYoc3RydWN0IHR0eV9sZGlzYyAqKTsKIGV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjICp0dHlfbGRpc2NfcmVmX3dhaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKik7Ci0KLWV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjICp0dHlfbGRpc2NfZ2V0KGludCk7Ci1leHRlcm4gdm9pZCB0dHlfbGRpc2NfcHV0KGludCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dHlfbGRpc2NzX3Byb2NfZm9wczsKIAogZXh0ZXJuIHZvaWQgdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIHR0eV9sZGlzY19mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKQEAgLTM1MSwxMCArMzc3LDIzIEBACiBleHRlcm4gaW50IHR0eV93cml0ZV9sb2NrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBuZGVsYXkpOwogI2RlZmluZSB0dHlfaXNfd3JpdGVsb2NrZWQodHR5KSAgKG11dGV4X2lzX2xvY2tlZCgmdHR5LT5hdG9taWNfd3JpdGVfbG9jaykpCiAKK2V4dGVybiB2b2lkIHR0eV9wb3J0X2luaXQoc3RydWN0IHR0eV9wb3J0ICpwb3J0KTsKK2V4dGVybiBpbnQgdHR5X3BvcnRfYWxsb2NfeG1pdF9idWYoc3RydWN0IHR0eV9wb3J0ICpwb3J0KTsKK2V4dGVybiB2b2lkIHR0eV9wb3J0X2ZyZWVfeG1pdF9idWYoc3RydWN0IHR0eV9wb3J0ICpwb3J0KTsKKworZXh0ZXJuIGludCB0dHlfcmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MsIHN0cnVjdCB0dHlfbGRpc2Nfb3BzICpuZXdfbGRpc2MpOworZXh0ZXJuIGludCB0dHlfdW5yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYyk7CitleHRlcm4gaW50IHR0eV9zZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGxkaXNjKTsKK2V4dGVybiBpbnQgdHR5X2xkaXNjX3NldHVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfc3RydWN0ICpvX3R0eSk7CitleHRlcm4gdm9pZCB0dHlfbGRpc2NfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqb190dHkpOworZXh0ZXJuIHZvaWQgdHR5X2xkaXNjX2luaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gdm9pZCB0dHlfbGRpc2NfYmVnaW4odm9pZCk7CisvKiBUaGlzIGxhc3Qgb25lIGlzIGp1c3QgZm9yIHRoZSB0dHkgbGF5ZXIgaW50ZXJuYWxzIGFuZCBzaG91bGRuJ3QgYmUgdXNlZCBlbHNld2hlcmUgKi8KK2V4dGVybiB2b2lkIHR0eV9sZGlzY19lbmFibGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKIAogLyogbl90dHkuYyAqLwotZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgdHR5X2xkaXNjX05fVFRZOworZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHR0eV9sZGlzY19OX1RUWTsKIAogLyogdHR5X2F1ZGl0LmMgKi8KICNpZmRlZiBDT05GSUdfQVVESVQKQEAgLTM2Myw3ICs0MDIsOCBAQAogZXh0ZXJuIHZvaWQgdHR5X2F1ZGl0X2V4aXQodm9pZCk7CiBleHRlcm4gdm9pZCB0dHlfYXVkaXRfZm9yayhzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKTsKIGV4dGVybiB2b2lkIHR0eV9hdWRpdF9wdXNoKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotZXh0ZXJuIHZvaWQgdHR5X2F1ZGl0X3B1c2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdWlkX3QgbG9naW51aWQsIHUzMiBzZXNzaW9uaWQpOworZXh0ZXJuIHZvaWQgdHR5X2F1ZGl0X3B1c2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJdWlkX3QgbG9naW51aWQsIHUzMiBzZXNzaW9uaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB0dHlfYXVkaXRfYWRkX2RhdGEoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkKQEAgLTM3OCwxOSArNDE4LDIwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdHR5X2F1ZGl0X3B1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0dHlfYXVkaXRfcHVzaF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNlc3Npb25pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0dHlfYXVkaXRfcHVzaF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQl1aWRfdCBsb2dpbnVpZCwgdTMyIHNlc3Npb25pZCkKIHsKIH0KICNlbmRpZgogCiAvKiB0dHlfaW9jdGwuYyAqLwotZXh0ZXJuIGludCBuX3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAorZXh0ZXJuIGludCBuX3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogLyogc2VyaWFsLmMgKi8KIAogZXh0ZXJuIHZvaWQgc2VyaWFsX2NvbnNvbGVfaW5pdCh2b2lkKTsKLSAKKwogLyogcGN4eC5jICovCiAKIGV4dGVybiBpbnQgcGN4ZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKQEAgLTQwMSw3ICs0NDIsNyBAQAogCiAvKiB2dC5jICovCiAKLWV4dGVybiBpbnQgdnRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAorZXh0ZXJuIGludCB2dF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKaW5kZXggZDJhMDAzNS4uZTEwNjVhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKQEAgLTEzNSw3ICsxMzUsNyBAQAogICoKICAqCU9wdGlvbmFsOgogICoKLSAqIHZvaWQgKCpicmVha19jdGwpKHN0cnVjdCB0dHlfc3R1Y3QgKnR0eSwgaW50IHN0YXRlKTsKKyAqIGludCAoKmJyZWFrX2N0bCkoc3RydWN0IHR0eV9zdHVjdCAqdHR5LCBpbnQgc3RhdGUpOwogICoKICAqIAlUaGlzIG9wdGlvbmFsIHJvdXRpbmUgcmVxdWVzdHMgdGhlIHR0eSBkcml2ZXIgdG8gdHVybiBvbiBvcgogICogCW9mZiBCUkVBSyBzdGF0dXMgb24gdGhlIFJTLTIzMiBwb3J0LiAgSWYgc3RhdGUgaXMgLTEsCkBAIC0xNDYsNiArMTQ2LDEwIEBACiAgKiAJaGFuZGxlIHRoZSBmb2xsb3dpbmcgaW9jdGxzOiBUQ1NCUkssIFRDU0JSS1AsIFRJT0NTQlJLLAogICogCVRJT0NDQlJLLgogICoKKyAqCUlmIHRoZSBkcml2ZXIgc2V0cyBUVFlfRFJJVkVSX0hBUkRXQVJFX0JSRUFLIHRoZW4gdGhlIGludGVyZmFjZQorICoJd2lsbCBhbHNvIGJlIGNhbGxlZCB3aXRoIGFjdHVhbCB0aW1lcyBhbmQgdGhlIGhhcmR3YXJlIGlzIGV4cGVjdGVkCisgKgl0byBkbyB0aGUgZGVsYXkgd29yayBpdHNlbGYuIDAgYW5kIC0xIGFyZSBzdGlsbCB1c2VkIGZvciBvbi9vZmYuCisgKgogICoJT3B0aW9uYWw6IFJlcXVpcmVkIGZvciBUQ1NCUksvQlJLUC9ldGMgaGFuZGxpbmcuCiAgKgogICogdm9pZCAoKndhaXRfdW50aWxfc2VudCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpOwpAQCAtMTkyLDcgKzE5Niw3IEBACiAJdm9pZCAoKnN0b3ApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCXZvaWQgKCpzdGFydCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJdm9pZCAoKmhhbmd1cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci0Jdm9pZCAoKmJyZWFrX2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKTsKKwlpbnQgKCpicmVha19jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSk7CiAJdm9pZCAoKmZsdXNoX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJdm9pZCAoKnNldF9sZGlzYykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJdm9pZCAoKndhaXRfdW50aWxfc2VudCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpOwpAQCAtMjg1LDEyICsyODksMTggQEAKICAqIFRUWV9EUklWRVJfREVWUFRTX01FTSAtLSBkb24ndCB1c2UgdGhlIHN0YW5kYXJkIGFycmF5cywgaW5zdGVhZAogICoJdXNlIGR5bmFtaWMgbWVtb3J5IGtleWVkIHRocm91Z2ggdGhlIGRldnB0cyBmaWxlc3lzdGVtLiAgVGhpcwogICoJaXMgb25seSBhcHBsaWNhYmxlIHRvIHRoZSBwdHkgZHJpdmVyLgorICoKKyAqIFRUWV9EUklWRVJfSEFSRFdBUkVfQlJFQUsgLS0gaGFyZHdhcmUgaGFuZGxlcyBicmVhayBzaWduYWxzLiBQYXNzCisgKgl0aGUgcmVxdWVzdGVkIHRpbWVvdXQgdG8gdGhlIGNhbGxlciBpbnN0ZWFkIG9mIHVzaW5nIGEgc2ltcGxlCisgKglvbi9vZmYgaW50ZXJmYWNlLgorICoKICAqLwogI2RlZmluZSBUVFlfRFJJVkVSX0lOU1RBTExFRAkJMHgwMDAxCiAjZGVmaW5lIFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUwkweDAwMDIKICNkZWZpbmUgVFRZX0RSSVZFUl9SRUFMX1JBVwkJMHgwMDA0CiAjZGVmaW5lIFRUWV9EUklWRVJfRFlOQU1JQ19ERVYJCTB4MDAwOAogI2RlZmluZSBUVFlfRFJJVkVSX0RFVlBUU19NRU0JCTB4MDAxMAorI2RlZmluZSBUVFlfRFJJVkVSX0hBUkRXQVJFX0JSRUFLCTB4MDAyMAogCiAvKiB0dHkgZHJpdmVyIHR5cGVzICovCiAjZGVmaW5lIFRUWV9EUklWRVJfVFlQRV9TWVNURU0JCTB4MDAwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCBiL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKaW5kZXggNjIyNjUwNC4uNDBmMzhkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCkBAIC0xMDQsNyArMTA0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAotc3RydWN0IHR0eV9sZGlzYyB7CitzdHJ1Y3QgdHR5X2xkaXNjX29wcyB7CiAJaW50CW1hZ2ljOwogCWNoYXIJKm5hbWU7CiAJaW50CW51bTsKQEAgLTE0Miw2ICsxNDIsMTEgQEAKIAlpbnQgcmVmY291bnQ7CiB9OwogCitzdHJ1Y3QgdHR5X2xkaXNjIHsKKwlzdHJ1Y3QgdHR5X2xkaXNjX29wcyAqb3BzOworCWludCByZWZjb3VudDsKK307CisKICNkZWZpbmUgVFRZX0xESVNDX01BR0lDCTB4NTQwMwogCiAjZGVmaW5lIExESVNDX0ZMQUdfREVGSU5FRAkweDAwMDAwMDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkcC5oIGIvaW5jbHVkZS9saW51eC91ZHAuaAppbmRleCA1ODFjYTJjLi4wY2Y1YzRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdWRwLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9oYXNoLmg+CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHVkcGhkciAqdWRwX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNDYsNiArNDcsMTEgQEAKIAogI2RlZmluZSBVRFBfSFRBQkxFX1NJWkUJCTEyOAogCitzdGF0aWMgaW5saW5lIGludCB1ZHBfaGFzaGZuKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgdW5zaWduZWQgbnVtKQoreworCXJldHVybiAobnVtICsgbmV0X2hhc2hfbWl4KG5ldCkpICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpOworfQorCiBzdHJ1Y3QgdWRwX3NvY2sgewogCS8qIGluZXRfc29jayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciAqLwogCXN0cnVjdCBpbmV0X3NvY2sgaW5ldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC91aW9fZHJpdmVyLmgKaW5kZXggOTczMzg2ZC4uY2RmMzM4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91aW9fZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC91aW9fZHJpdmVyLmgKQEAgLTM2LDcgKzM2LDcgQEAKIAlzdHJ1Y3QgdWlvX21hcAkJKm1hcDsKIH07CiAKLSNkZWZpbmUgTUFYX1VJT19NQVBTIAk1CisjZGVmaW5lIE1BWF9VSU9fTUFQUwk1CiAKIHN0cnVjdCB1aW9fZGV2aWNlOwogCkBAIC01Myw2ICs1Myw3IEBACiAgKiBAbW1hcDoJCW1tYXAgb3BlcmF0aW9uIGZvciB0aGlzIHVpbyBkZXZpY2UKICAqIEBvcGVuOgkJb3BlbiBvcGVyYXRpb24gZm9yIHRoaXMgdWlvIGRldmljZQogICogQHJlbGVhc2U6CQlyZWxlYXNlIG9wZXJhdGlvbiBmb3IgdGhpcyB1aW8gZGV2aWNlCisgKiBAaXJxY29udHJvbDoJCWRpc2FibGUvZW5hYmxlIGlycXMgd2hlbiAwLzEgaXMgd3JpdHRlbiB0byAvZGV2L3Vpb1gKICAqLwogc3RydWN0IHVpb19pbmZvIHsKIAlzdHJ1Y3QgdWlvX2RldmljZQkqdWlvX2RldjsKQEAgLTY2LDYgKzY3LDcgQEAKIAlpbnQgKCptbWFwKShzdHJ1Y3QgdWlvX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIAlpbnQgKCpvcGVuKShzdHJ1Y3QgdWlvX2luZm8gKmluZm8sIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCWludCAoKnJlbGVhc2UpKHN0cnVjdCB1aW9faW5mbyAqaW5mbywgc3RydWN0IGlub2RlICppbm9kZSk7CisJaW50ICgqaXJxY29udHJvbCkoc3RydWN0IHVpb19pbmZvICppbmZvLCBzMzIgaXJxX29uKTsKIH07CiAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrCkBAIC04MCwxMSArODIsMTEgQEAKIGV4dGVybiB2b2lkIHVpb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdWlvX2luZm8gKmluZm8pOwogZXh0ZXJuIHZvaWQgdWlvX2V2ZW50X25vdGlmeShzdHJ1Y3QgdWlvX2luZm8gKmluZm8pOwogCi0vKiBkZWZpbmVzIGZvciB1aW9fZGV2aWNlLT5pcnEgKi8KKy8qIGRlZmluZXMgZm9yIHVpb19pbmZvLT5pcnEgKi8KICNkZWZpbmUgVUlPX0lSUV9DVVNUT00JLTEKICNkZWZpbmUgVUlPX0lSUV9OT05FCS0yCiAKLS8qIGRlZmluZXMgZm9yIHVpb19kZXZpY2UtPm1lbXR5cGUgKi8KKy8qIGRlZmluZXMgZm9yIHVpb19tZW0tPm1lbXR5cGUgKi8KICNkZWZpbmUgVUlPX01FTV9OT05FCTAKICNkZWZpbmUgVUlPX01FTV9QSFlTCTEKICNkZWZpbmUgVUlPX01FTV9MT0dJQ0FMCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oCmluZGV4IGMwODY4OWUuLjU4MTFjNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IuaApAQCAtMTYwLDYgKzE2MCw3IEBACiAJdW5zaWduZWQgaXNfYWN0aXZlOjE7CQkvKiB0aGUgaW50ZXJmYWNlIGlzIG5vdCBzdXNwZW5kZWQgKi8KIAl1bnNpZ25lZCBzeXNmc19maWxlc19jcmVhdGVkOjE7CS8qIHRoZSBzeXNmcyBhdHRyaWJ1dGVzIGV4aXN0ICovCiAJdW5zaWduZWQgbmVlZHNfcmVtb3RlX3dha2V1cDoxOwkvKiBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCAqLworCXVuc2lnbmVkIG5lZWRzX2JpbmRpbmc6MTsJLyogbmVlZHMgZGVsYXllZCB1bmJpbmQvcmViaW5kICovCiAKIAlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIGludGVyZmFjZSBzcGVjaWZpYyBkZXZpY2UgaW5mbyAqLwogCXN0cnVjdCBkZXZpY2UgKnVzYl9kZXY7CkBAIC0yOTMsNyArMjk0LDcgQEAKIHN0cnVjdCB1c2JfYnVzIHsKIAlzdHJ1Y3QgZGV2aWNlICpjb250cm9sbGVyOwkvKiBob3N0L21hc3RlciBzaWRlIGhhcmR3YXJlICovCiAJaW50IGJ1c251bTsJCQkvKiBCdXMgbnVtYmVyIChpbiBvcmRlciBvZiByZWcpICovCi0JY2hhciAqYnVzX25hbWU7CQkJLyogc3RhYmxlIGlkIChQQ0kgc2xvdF9uYW1lIGV0YykgKi8KKwljb25zdCBjaGFyICpidXNfbmFtZTsJCS8qIHN0YWJsZSBpZCAoUENJIHNsb3RfbmFtZSBldGMpICovCiAJdTggdXNlc19kbWE7CQkJLyogRG9lcyB0aGUgaG9zdCBjb250cm9sbGVyIHVzZSBETUE/ICovCiAJdTggb3RnX3BvcnQ7CQkJLyogMCwgb3IgbnVtYmVyIG9mIE9URy9ITlAgcG9ydCAqLwogCXVuc2lnbmVkIGlzX2JfaG9zdDoxOwkJLyogdHJ1ZSBkdXJpbmcgc29tZSBITlAgcm9sZXN3aXRjaGVzICovCkBAIC00OTcsOCArNDk4LDYgQEAKIAogLyogVVNCIHBvcnQgcmVzZXQgZm9yIGRldmljZSByZWluaXRpYWxpemF0aW9uICovCiBleHRlcm4gaW50IHVzYl9yZXNldF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IHVzYl9yZXNldF9jb21wb3NpdGVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CiAKIGV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2ZpbmRfZGV2aWNlKHUxNiB2ZW5kb3JfaWQsIHUxNiBwcm9kdWN0X2lkKTsKIApAQCAtOTU4LDkgKzk1Nyw5IEBACiAgKiBAcmVzdW1lOiBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGJlaW5nIHJlc3VtZWQgYnkgdGhlIHN5c3RlbS4KICAqIEByZXNldF9yZXN1bWU6IENhbGxlZCB3aGVuIHRoZSBzdXNwZW5kZWQgZGV2aWNlIGhhcyBiZWVuIHJlc2V0IGluc3RlYWQKICAqCW9mIGJlaW5nIHJlc3VtZWQuCi0gKiBAcHJlX3Jlc2V0OiBDYWxsZWQgYnkgdXNiX3Jlc2V0X2NvbXBvc2l0ZV9kZXZpY2UoKSB3aGVuIHRoZSBkZXZpY2UKKyAqIEBwcmVfcmVzZXQ6IENhbGxlZCBieSB1c2JfcmVzZXRfZGV2aWNlKCkgd2hlbiB0aGUgZGV2aWNlCiAgKglpcyBhYm91dCB0byBiZSByZXNldC4KLSAqIEBwb3N0X3Jlc2V0OiBDYWxsZWQgYnkgdXNiX3Jlc2V0X2NvbXBvc2l0ZV9kZXZpY2UoKSBhZnRlciB0aGUgZGV2aWNlCisgKiBAcG9zdF9yZXNldDogQ2FsbGVkIGJ5IHVzYl9yZXNldF9kZXZpY2UoKSBhZnRlciB0aGUgZGV2aWNlCiAgKgloYXMgYmVlbiByZXNldAogICogQGlkX3RhYmxlOiBVU0IgZHJpdmVycyB1c2UgSUQgdGFibGUgdG8gc3VwcG9ydCBob3RwbHVnZ2luZy4KICAqCUV4cG9ydCB0aGlzIHdpdGggTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsLi4uKS4gIFRoaXMgbXVzdCBiZSBzZXQKQEAgLTk3Miw2ICs5NzEsOCBAQAogICoJYWRkZWQgdG8gdGhpcyBkcml2ZXIgYnkgcHJldmVudGluZyB0aGUgc3lzZnMgZmlsZSBmcm9tIGJlaW5nIGNyZWF0ZWQuCiAgKiBAc3VwcG9ydHNfYXV0b3N1c3BlbmQ6IGlmIHNldCB0byAwLCB0aGUgVVNCIGNvcmUgd2lsbCBub3QgYWxsb3cgYXV0b3N1c3BlbmQKICAqCWZvciBpbnRlcmZhY2VzIGJvdW5kIHRvIHRoaXMgZHJpdmVyLgorICogQHNvZnRfdW5iaW5kOiBpZiBzZXQgdG8gMSwgdGhlIFVTQiBjb3JlIHdpbGwgbm90IGtpbGwgVVJCcyBhbmQgZGlzYWJsZQorICoJZW5kcG9pbnRzIGJlZm9yZSBjYWxsaW5nIHRoZSBkcml2ZXIncyBkaXNjb25uZWN0IG1ldGhvZC4KICAqCiAgKiBVU0IgaW50ZXJmYWNlIGRyaXZlcnMgbXVzdCBwcm92aWRlIGEgbmFtZSwgcHJvYmUoKSBhbmQgZGlzY29ubmVjdCgpCiAgKiBtZXRob2RzLCBhbmQgYW4gaWRfdGFibGUuICBPdGhlciBkcml2ZXIgZmllbGRzIGFyZSBvcHRpb25hbC4KQEAgLTEwMTIsNiArMTAxMyw3IEBACiAJc3RydWN0IHVzYmRydl93cmFwIGRydndyYXA7CiAJdW5zaWduZWQgaW50IG5vX2R5bmFtaWNfaWQ6MTsKIAl1bnNpZ25lZCBpbnQgc3VwcG9ydHNfYXV0b3N1c3BlbmQ6MTsKKwl1bnNpZ25lZCBpbnQgc29mdF91bmJpbmQ6MTsKIH07CiAjZGVmaW5lCXRvX3VzYl9kcml2ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2JfZHJpdmVyLCBkcnZ3cmFwLmRyaXZlcikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDdjM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBjb21wb3NpdGUuaCAtLSBmcmFtZXdvcmsgZm9yIHVzYiBnYWRnZXRzIHdoaWNoIGFyZSBjb21wb3NpdGUgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmCV9fTElOVVhfVVNCX0NPTVBPU0lURV9ICisjZGVmaW5lCV9fTElOVVhfVVNCX0NPTVBPU0lURV9ICisKKy8qCisgKiBUaGlzIGZyYW1ld29yayBpcyBhbiBvcHRpb25hbCBsYXllciBvbiB0b3Agb2YgdGhlIFVTQiBHYWRnZXQgaW50ZXJmYWNlLAorICogbWFraW5nIGl0IGVhc2llciB0byBidWlsZCAoYSkgQ29tcG9zaXRlIGRldmljZXMsIHN1cHBvcnRpbmcgbXVsdGlwbGUKKyAqIGZ1bmN0aW9ucyB3aXRoaW4gYW55IHNpbmdsZSBjb25maWd1cmF0aW9uLCBhbmQgKGIpIE11bHRpLWNvbmZpZ3VyYXRpb24KKyAqIGRldmljZXMsIGFsc28gc3VwcG9ydGluZyBtdWx0aXBsZSBmdW5jdGlvbnMgYnV0IHdpdGhvdXQgbmVjZXNzYXJpbHkKKyAqIGhhdmluZyBtb3JlIHRoYW4gb25lIGZ1bmN0aW9uIHBlciBjb25maWd1cmF0aW9uLgorICoKKyAqIEV4YW1wbGU6ICBhIGRldmljZSB3aXRoIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gc3VwcG9ydGluZyBib3RoIG5ldHdvcmsKKyAqIGxpbmsgYW5kIG1hc3Mgc3RvcmFnZSBmdW5jdGlvbnMgaXMgYSBjb21wb3NpdGUgZGV2aWNlLiAgVGhvc2UgZnVuY3Rpb25zCisgKiBtaWdodCBhbHRlcm5hdGl2ZWx5IGJlIHBhY2thZ2VkIGluIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbnMsIGJ1dCBpbgorICogdGhlIGNvbXBvc2l0ZSBtb2RlbCB0aGUgaG9zdCBjYW4gdXNlIGJvdGggZnVuY3Rpb25zIGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisKKworc3RydWN0IHVzYl9jb25maWd1cmF0aW9uOworCisvKioKKyAqIHN0cnVjdCB1c2JfZnVuY3Rpb24gLSBkZXNjcmliZXMgb25lIGZ1bmN0aW9uIG9mIGEgY29uZmlndXJhdGlvbgorICogQG5hbWU6IEZvciBkaWFnbm9zdGljcywgaWRlbnRpZmllcyB0aGUgZnVuY3Rpb24uCisgKiBAc3RyaW5nczogdGFibGVzIG9mIHN0cmluZ3MsIGtleWVkIGJ5IGlkZW50aWZpZXJzIGFzc2lnbmVkIGR1cmluZyBiaW5kKCkKKyAqCWFuZCBieSBsYW5ndWFnZSBJRHMgcHJvdmlkZWQgaW4gY29udHJvbCByZXF1ZXN0cworICogQGRlc2NyaXB0b3JzOiBUYWJsZSBvZiBmdWxsIChvciBsb3cpIHNwZWVkIGRlc2NyaXB0b3JzLCB1c2luZyBpbnRlcmZhY2UgYW5kCisgKglzdHJpbmcgaWRlbnRpZmllcnMgYXNzaWduZWQgZHVyaW5nIEBiaW5kKCkuICBJZiB0aGlzIHBvaW50ZXIgaXMgbnVsbCwKKyAqCXRoZSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBhdmFpbGFibGUgYXQgZnVsbCBzcGVlZCAob3IgYXQgbG93IHNwZWVkKS4KKyAqIEBoc19kZXNjcmlwdG9yczogVGFibGUgb2YgaGlnaCBzcGVlZCBkZXNjcmlwdG9ycywgdXNpbmcgaW50ZXJmYWNlIGFuZAorICoJc3RyaW5nIGlkZW50aWZpZXJzIGFzc2lnbmVkIGR1cmluZyBAYmluZCgpLiAgSWYgdGhpcyBwb2ludGVyIGlzIG51bGwsCisgKgl0aGUgZnVuY3Rpb24gd2lsbCBub3QgYmUgYXZhaWxhYmxlIGF0IGhpZ2ggc3BlZWQuCisgKiBAY29uZmlnOiBhc3NpZ25lZCB3aGVuIEB1c2JfYWRkX2Z1bmN0aW9uKCkgaXMgY2FsbGVkOyB0aGlzIGlzIHRoZQorICoJY29uZmlndXJhdGlvbiB3aXRoIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgYXNzb2NpYXRlZC4KKyAqIEBiaW5kOiBCZWZvcmUgdGhlIGdhZGdldCBjYW4gcmVnaXN0ZXIsIGFsbCBvZiBpdHMgZnVuY3Rpb25zIGJpbmQoKSB0byB0aGUKKyAqCWF2YWlsYWJsZSByZXNvdXJjZXMgaW5jbHVkaW5nIHN0cmluZyBhbmQgaW50ZXJmYWNlIGlkZW50aWZpZXJzIHVzZWQKKyAqCWluIGludGVyZmFjZSBvciBjbGFzcyBkZXNjcmlwdG9yczsgZW5kcG9pbnRzOyBJL08gYnVmZmVyczsgYW5kIHNvIG9uLgorICogQHVuYmluZDogUmV2ZXJzZXMgQGJpbmQ7IGNhbGxlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHVucmVnaXN0ZXJpbmcgdGhlCisgKglkcml2ZXIgd2hpY2ggYWRkZWQgdGhpcyBmdW5jdGlvbi4KKyAqIEBzZXRfYWx0OiAoUkVRVUlSRUQpIFJlY29uZmlndXJlcyBhbHRzZXR0aW5nczsgZnVuY3Rpb24gZHJpdmVycyBtYXkKKyAqCWluaXRpYWxpemUgdXNiX2VwLmRyaXZlciBkYXRhIGF0IHRoaXMgdGltZSAod2hlbiBpdCBpcyB1c2VkKS4KKyAqCU5vdGUgdGhhdCBzZXR0aW5nIGFuIGludGVyZmFjZSB0byBpdHMgY3VycmVudCBhbHRzZXR0aW5nIHJlc2V0cworICoJaW50ZXJmYWNlIHN0YXRlLCBhbmQgdGhhdCBhbGwgaW50ZXJmYWNlcyBoYXZlIGEgZGlzYWJsZWQgc3RhdGUuCisgKiBAZ2V0X2FsdDogUmV0dXJucyB0aGUgYWN0aXZlIGFsdHNldHRpbmcuICBJZiB0aGlzIGlzIG5vdCBwcm92aWRlZCwKKyAqCXRoZW4gb25seSBhbHRzZXR0aW5nIHplcm8gaXMgc3VwcG9ydGVkLgorICogQGRpc2FibGU6IChSRVFVSVJFRCkgSW5kaWNhdGVzIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQuICBSZWFzb25zCisgKglpbmNsdWRlIGhvc3QgcmVzZXR0aW5nIG9yIHJlY29uZmlndXJpbmcgdGhlIGdhZGdldCwgYW5kIGRpc2Nvbm5lY3Rpb24uCisgKiBAc2V0dXA6IFVzZWQgZm9yIGludGVyZmFjZS1zcGVjaWZpYyBjb250cm9sIHJlcXVlc3RzLgorICogQHN1c3BlbmQ6IE5vdGlmaWVzIGZ1bmN0aW9ucyB3aGVuIHRoZSBob3N0IHN0b3BzIHNlbmRpbmcgVVNCIHRyYWZmaWMuCisgKiBAcmVzdW1lOiBOb3RpZmllcyBmdW5jdGlvbnMgd2hlbiB0aGUgaG9zdCByZXN0YXJ0cyBVU0IgdHJhZmZpYy4KKyAqCisgKiBBIHNpbmdsZSBVU0IgZnVuY3Rpb24gdXNlcyBvbmUgb3IgbW9yZSBpbnRlcmZhY2VzLCBhbmQgc2hvdWxkIGluIG1vc3QKKyAqIGNhc2VzIHN1cHBvcnQgb3BlcmF0aW9uIGF0IGJvdGggZnVsbCBhbmQgaGlnaCBzcGVlZHMuICBFYWNoIGZ1bmN0aW9uIGlzCisgKiBhc3NvY2lhdGVkIGJ5IEB1c2JfYWRkX2Z1bmN0aW9uKCkgd2l0aCBhIG9uZSBjb25maWd1cmF0aW9uOyB0aGF0IGZ1bmN0aW9uCisgKiBjYXVzZXMgQGJpbmQoKSB0byBiZSBjYWxsZWQgc28gcmVzb3VyY2VzIGNhbiBiZSBhbGxvY2F0ZWQgYXMgcGFydCBvZgorICogc2V0dGluZyB1cCBhIGdhZGdldCBkcml2ZXIuICBUaG9zZSByZXNvdXJjZXMgaW5jbHVkZSBlbmRwb2ludHMsIHdoaWNoCisgKiBzaG91bGQgYmUgYWxsb2NhdGVkIHVzaW5nIEB1c2JfZXBfYXV0b2NvbmZpZygpLgorICoKKyAqIFRvIHN1cHBvcnQgZHVhbCBzcGVlZCBvcGVyYXRpb24sIGEgZnVuY3Rpb24gZHJpdmVyIHByb3ZpZGVzIGRlc2NyaXB0b3JzCisgKiBmb3IgYm90aCBoaWdoIGFuZCBmdWxsIHNwZWVkIG9wZXJhdGlvbi4gIEV4Y2VwdCBpbiByYXJlIGNhc2VzIHRoYXQgZG9uJ3QKKyAqIGludm9sdmUgYnVsayBlbmRwb2ludHMsIGVhY2ggc3BlZWQgbmVlZHMgZGlmZmVyZW50IGVuZHBvaW50IGRlc2NyaXB0b3JzLgorICoKKyAqIEZ1bmN0aW9uIGRyaXZlcnMgY2hvb3NlIHRoZWlyIG93biBzdHJhdGVnaWVzIGZvciBtYW5hZ2luZyBpbnN0YW5jZSBkYXRhLgorICogVGhlIHNpbXBsZXN0IHN0cmF0ZWd5IGp1c3QgZGVjbGFyZXMgaXQgInN0YXRpYycsIHdoaWNoIG1lYW5zIHRoZSBmdW5jdGlvbgorICogY2FuIG9ubHkgYmUgYWN0aXZhdGVkIG9uY2UuICBJZiB0aGUgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZXhwb3NlZCBpbiBtb3JlCisgKiB0aGFuIG9uZSBjb25maWd1cmF0aW9uIGF0IGEgZ2l2ZW4gc3BlZWQsIGl0IG5lZWRzIHRvIHN1cHBvcnQgbXVsdGlwbGUKKyAqIHVzYl9mdW5jdGlvbiBzdHJ1Y3R1cmVzIChvbmUgZm9yIGVhY2ggY29uZmlndXJhdGlvbikuCisgKgorICogQSBtb3JlIGNvbXBsZXggc3RyYXRlZ3kgbWlnaHQgZW5jYXBzdWxhdGUgYSBAdXNiX2Z1bmN0aW9uIHN0cnVjdHVyZSBpbnNpZGUKKyAqIGEgZHJpdmVyLXNwZWNpZmljIGluc3RhbmNlIHN0cnVjdHVyZSB0byBhbGxvd3MgbXVsdGlwbGUgYWN0aXZhdGlvbnMuICBBbgorICogZXhhbXBsZSBvZiBtdWx0aXBsZSBhY3RpdmF0aW9ucyBtaWdodCBiZSBhIENEQyBBQ00gZnVuY3Rpb24gdGhhdCBzdXBwb3J0cworICogdHdvIG9yIG1vcmUgZGlzdGluY3QgaW5zdGFuY2VzIHdpdGhpbiB0aGUgc2FtZSBjb25maWd1cmF0aW9uLCBwcm92aWRpbmcKKyAqIHNldmVyYWwgaW5kZXBlbmRlbnQgbG9naWNhbCBkYXRhIGxpbmtzIHRvIGEgVVNCIGhvc3QuCisgKi8KK3N0cnVjdCB1c2JfZnVuY3Rpb24geworCWNvbnN0IGNoYXIJCQkqbmFtZTsKKwlzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzCSoqc3RyaW5nczsKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyCSoqZGVzY3JpcHRvcnM7CisJc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcgkqKmhzX2Rlc2NyaXB0b3JzOworCisJc3RydWN0IHVzYl9jb25maWd1cmF0aW9uCSpjb25maWc7CisKKwkvKiBSRVZJU0lUOiAgYmluZCgpIGZ1bmN0aW9ucyBjYW4gYmUgbWFya2VkIF9faW5pdCwgd2hpY2gKKwkgKiBtYWtlcyB0cm91YmxlIGZvciBzZWN0aW9uIG1pc21hdGNoIGFuYWx5c2lzLiAgU2VlIGlmCisJICogd2UgY2FuJ3QgcmVzdHJ1Y3R1cmUgdGhpbmdzIHRvIGF2b2lkIG1pc21hdGNoaW5nLgorCSAqIFJlbGF0ZWQ6ICB1bmJpbmQoKSBtYXkga2ZyZWUoKSBidXQgYmluZCgpIHdvbid0Li4uCisJICovCisKKwkvKiBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQ6ICBiaW5kL3VuYmluZCAqLworCWludAkJCSgqYmluZCkoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICosCisJCQkJCXN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CisJdm9pZAkJCSgqdW5iaW5kKShzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKiwKKwkJCQkJc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKKworCS8qIHJ1bnRpbWUgc3RhdGUgbWFuYWdlbWVudCAqLworCWludAkJCSgqc2V0X2FsdCkoc3RydWN0IHVzYl9mdW5jdGlvbiAqLAorCQkJCQl1bnNpZ25lZCBpbnRlcmZhY2UsIHVuc2lnbmVkIGFsdCk7CisJaW50CQkJKCpnZXRfYWx0KShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICosCisJCQkJCXVuc2lnbmVkIGludGVyZmFjZSk7CisJdm9pZAkJCSgqZGlzYWJsZSkoc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKKwlpbnQJCQkoKnNldHVwKShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICosCisJCQkJCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKik7CisJdm9pZAkJCSgqc3VzcGVuZCkoc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKKwl2b2lkCQkJKCpyZXN1bWUpKHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CisKKwkvKiBpbnRlcm5hbHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OworfTsKKworaW50IHVzYl9hZGRfZnVuY3Rpb24oc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICosIHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CisKK2ludCB1c2JfaW50ZXJmYWNlX2lkKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICopOworCisvKioKKyAqIGVwX2Nob29zZSAtIHNlbGVjdCBkZXNjcmlwdG9yIGVuZHBvaW50IGF0IGN1cnJlbnQgZGV2aWNlIHNwZWVkCisgKiBAZzogZ2FkZ2V0LCBjb25uZWN0ZWQgYW5kIHJ1bm5pbmcgYXQgc29tZSBzcGVlZAorICogQGhzOiBkZXNjcmlwdG9yIHRvIHVzZSBmb3IgaGlnaCBzcGVlZCBvcGVyYXRpb24KKyAqIEBmczogZGVzY3JpcHRvciB0byB1c2UgZm9yIGZ1bGwgb3IgbG93IHNwZWVkIG9wZXJhdGlvbgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqCitlcF9jaG9vc2Uoc3RydWN0IHVzYl9nYWRnZXQgKmcsIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqaHMsCisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZnMpCit7CisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoZykgJiYgZy0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCXJldHVybiBoczsKKwlyZXR1cm4gZnM7Cit9CisKKyNkZWZpbmUJTUFYX0NPTkZJR19JTlRFUkZBQ0VTCQkxNgkvKiBhcmJpdHJhcnk7IG1heCAyNTUgKi8KKworLyoqCisgKiBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gLSByZXByZXNlbnRzIG9uZSBnYWRnZXQgY29uZmlndXJhdGlvbgorICogQGxhYmVsOiBGb3IgZGlhZ25vc3RpY3MsIGRlc2NyaWJlcyB0aGUgY29uZmlndXJhdGlvbi4KKyAqIEBzdHJpbmdzOiBUYWJsZXMgb2Ygc3RyaW5ncywga2V5ZWQgYnkgaWRlbnRpZmllcnMgYXNzaWduZWQgZHVyaW5nIEBiaW5kKCkKKyAqCWFuZCBieSBsYW5ndWFnZSBJRHMgcHJvdmlkZWQgaW4gY29udHJvbCByZXF1ZXN0cy4KKyAqIEBkZXNjcmlwdG9yczogVGFibGUgb2YgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCBmdW5jdGlvbiBkZXNjcmlwdG9ycy4KKyAqCUV4YW1wbGVzIGluY2x1ZGUgT1RHIGFuZCB2ZW5kb3Itc3BlY2lmaWMgZGVzY3JpcHRvcnMuCisgKiBAYmluZDogQ2FsbGVkIGZyb20gQHVzYl9hZGRfY29uZmlnKCkgdG8gYWxsb2NhdGUgcmVzb3VyY2VzIHVuaXF1ZSB0byB0aGlzCisgKgljb25maWd1cmF0aW9uIGFuZCB0byBjYWxsIEB1c2JfYWRkX2Z1bmN0aW9uKCkgZm9yIGVhY2ggZnVuY3Rpb24gdXNlZC4KKyAqIEB1bmJpbmQ6IFJldmVyc2VzIEBiaW5kOyBjYWxsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1bnJlZ2lzdGVyaW5nIHRoZQorICoJZHJpdmVyIHdoaWNoIGFkZGVkIHRoaXMgY29uZmlndXJhdGlvbi4KKyAqIEBzZXR1cDogVXNlZCB0byBkZWxlZ2F0ZSBjb250cm9sIHJlcXVlc3RzIHRoYXQgYXJlbid0IGhhbmRsZWQgYnkgc3RhbmRhcmQKKyAqCWRldmljZSBpbmZyYXN0cnVjdHVyZSBvciBkaXJlY3RlZCBhdCBhIHNwZWNpZmljIGludGVyZmFjZS4KKyAqIEBiQ29uZmlndXJhdGlvblZhbHVlOiBDb3BpZWQgaW50byBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IuCisgKiBAaUNvbmZpZ3VyYXRpb246IENvcGllZCBpbnRvIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvci4KKyAqIEBibUF0dHJpYnV0ZXM6IENvcGllZCBpbnRvIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvci4KKyAqIEBiTWF4UG93ZXI6IENvcGllZCBpbnRvIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvci4KKyAqIEBjZGV2OiBhc3NpZ25lZCBieSBAdXNiX2FkZF9jb25maWcoKSBiZWZvcmUgY2FsbGluZyBAYmluZCgpOyB0aGlzIGlzCisgKgl0aGUgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24uCisgKgorICogQ29uZmlndXJhdGlvbnMgYXJlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgZ2FkZ2V0IGRyaXZlcnMgc3RydWN0dXJlZCBhcm91bmQKKyAqIGZ1bmN0aW9uIGRyaXZlcnMuICBTaW1wbGUgVVNCIGdhZGdldHMgcmVxdWlyZSBvbmx5IG9uZSBmdW5jdGlvbiBhbmQgb25lCisgKiBjb25maWd1cmF0aW9uLCBhbmQgaGFuZGxlIGR1YWwtc3BlZWQgaGFyZHdhcmUgYnkgYWx3YXlzIHByb3ZpZGluZyB0aGUgc2FtZQorICogZnVuY3Rpb25hbGl0eS4gIFNsaWdodGx5IG1vcmUgY29tcGxleCBnYWRnZXRzIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUKKyAqIHNpbmdsZS1mdW5jdGlvbiBjb25maWd1cmF0aW9uIGF0IGEgZ2l2ZW4gc3BlZWQ7IG9yIGhhdmUgY29uZmlndXJhdGlvbnMKKyAqIHRoYXQgb25seSB3b3JrIGF0IG9uZSBzcGVlZC4KKyAqCisgKiBDb21wb3NpdGUgZGV2aWNlcyBhcmUsIGJ5IGRlZmluaXRpb24sIG9uZXMgd2l0aCBjb25maWd1cmF0aW9ucyB3aGljaAorICogaW5jbHVkZSBtb3JlIHRoYW4gb25lIGZ1bmN0aW9uLgorICoKKyAqIFRoZSBsaWZlY3ljbGUgb2YgYSB1c2JfY29uZmlndXJhdGlvbiBpbmNsdWRlcyBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbgorICogb2YgdGhlIGZpZWxkcyBkZXNjcmliZWQgYWJvdmUsIGFuZCBjYWxsaW5nIEB1c2JfYWRkX2NvbmZpZygpIHRvIHNldCB1cAorICogaW50ZXJuYWwgZGF0YSBhbmQgYmluZCBpdCB0byBhIHNwZWNpZmljIGRldmljZS4gIFRoZSBjb25maWd1cmF0aW9uJ3MKKyAqIEBiaW5kKCkgbWV0aG9kIGlzIHRoZW4gdXNlZCB0byBpbml0aWFsaXplIGFsbCB0aGUgZnVuY3Rpb25zIGFuZCB0aGVuCisgKiBjYWxsIEB1c2JfYWRkX2Z1bmN0aW9uKCkgZm9yIHRoZW0uCisgKgorICogVGhvc2UgZnVuY3Rpb25zIHdvdWxkIG5vcm1hbGx5IGJlIGluZGVwZW5kYW50IG9mIGVhY2ggb3RoZXIsIGJ1dCB0aGF0J3MKKyAqIG5vdCBtYW5kYXRvcnkuICBDREMgV01DIGRldmljZXMgYXJlIGFuIGV4YW1wbGUgd2hlcmUgZnVuY3Rpb25zIG9mdGVuCisgKiBkZXBlbmQgb24gb3RoZXIgZnVuY3Rpb25zLCB3aXRoIHNvbWUgZnVuY3Rpb25zIHN1YnNpZGlhcnkgdG8gb3RoZXJzLgorICogU3VjaCBpbnRlcmRlcGVuZGVuY3kgbWF5IGJlIG1hbmFnZWQgaW4gYW55IHdheSwgc28gbG9uZyBhcyBhbGwgb2YgdGhlCisgKiBkZXNjcmlwdG9ycyBjb21wbGV0ZSBieSB0aGUgdGltZSB0aGUgY29tcG9zaXRlIGRyaXZlciByZXR1cm5zIGZyb20KKyAqIGl0cyBiaW5kKCkgcm91dGluZS4KKyAqLworc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIHsKKwljb25zdCBjaGFyCQkJKmxhYmVsOworCXN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MJKipzdHJpbmdzOworCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipkZXNjcmlwdG9yczsKKworCS8qIFJFVklTSVQ6ICBiaW5kKCkgZnVuY3Rpb25zIGNhbiBiZSBtYXJrZWQgX19pbml0LCB3aGljaAorCSAqIG1ha2VzIHRyb3VibGUgZm9yIHNlY3Rpb24gbWlzbWF0Y2ggYW5hbHlzaXMuICBTZWUgaWYKKwkgKiB3ZSBjYW4ndCByZXN0cnVjdHVyZSB0aGluZ3MgdG8gYXZvaWQgbWlzbWF0Y2hpbmcuLi4KKwkgKi8KKworCS8qIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudDogIGJpbmQvdW5iaW5kICovCisJaW50CQkJKCpiaW5kKShzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKik7CisJdm9pZAkJCSgqdW5iaW5kKShzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKik7CisJaW50CQkJKCpzZXR1cCkoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICosCisJCQkJCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKik7CisKKwkvKiBmaWVsZHMgaW4gdGhlIGNvbmZpZyBkZXNjcmlwdG9yICovCisJdTgJCQliQ29uZmlndXJhdGlvblZhbHVlOworCXU4CQkJaUNvbmZpZ3VyYXRpb247CisJdTgJCQlibUF0dHJpYnV0ZXM7CisJdTgJCQliTWF4UG93ZXI7CisKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXY7CisKKwkvKiBpbnRlcm5hbHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlmdW5jdGlvbnM7CisJdTgJCQluZXh0X2ludGVyZmFjZV9pZDsKKwl1bnNpZ25lZAkJaGlnaHNwZWVkOjE7CisJdW5zaWduZWQJCWZ1bGxzcGVlZDoxOworCXN0cnVjdCB1c2JfZnVuY3Rpb24JKmludGVyZmFjZVtNQVhfQ09ORklHX0lOVEVSRkFDRVNdOworfTsKKworaW50IHVzYl9hZGRfY29uZmlnKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqLAorCQlzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKik7CisKKy8qKgorICogc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyIC0gZ3JvdXBzIGNvbmZpZ3VyYXRpb25zIGludG8gYSBnYWRnZXQKKyAqIEBuYW1lOiBGb3IgZGlhZ25vc3RpY3MsIGlkZW50aWZpZXMgdGhlIGRyaXZlci4KKyAqIEBkZXY6IFRlbXBsYXRlIGRlc2NyaXB0b3IgZm9yIHRoZSBkZXZpY2UsIGluY2x1ZGluZyBkZWZhdWx0IGRldmljZQorICoJaWRlbnRpZmllcnMuCisgKiBAc3RyaW5nczogdGFibGVzIG9mIHN0cmluZ3MsIGtleWVkIGJ5IGlkZW50aWZpZXJzIGFzc2lnbmVkIGR1cmluZyBiaW5kKCkKKyAqCWFuZCBsYW5ndWFnZSBJRHMgcHJvdmlkZWQgaW4gY29udHJvbCByZXF1ZXN0cworICogQGJpbmQ6IChSRVFVSVJFRCkgVXNlZCB0byBhbGxvY2F0ZSByZXNvdXJjZXMgdGhhdCBhcmUgc2hhcmVkIGFjcm9zcyB0aGUKKyAqCXdob2xlIGRldmljZSwgc3VjaCBhcyBzdHJpbmcgSURzLCBhbmQgYWRkIGl0cyBjb25maWd1cmF0aW9ucyB1c2luZworICoJQHVzYl9hZGRfY29uZmlnKCkuICBUaGlzIG1heSBmYWlsIGJ5IHJldHVybmluZyBhIG5lZ2F0aXZlIGVycm5vCisgKgl2YWx1ZTsgaXQgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCisgKiBAdW5iaW5kOiBSZXZlcnNlcyBAYmluZCgpOyBjYWxsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1bnJlZ2lzdGVyaW5nCisgKgl0aGlzIGRyaXZlci4KKyAqCisgKiBEZXZpY2VzIGRlZmF1bHQgdG8gcmVwb3J0aW5nIHNlbGYgcG93ZXJlZCBvcGVyYXRpb24uICBEZXZpY2VzIHdoaWNoIHJlbHkKKyAqIG9uIGJ1cyBwb3dlcmVkIG9wZXJhdGlvbiBzaG91bGQgcmVwb3J0IHRoaXMgaW4gdGhlaXIgQGJpbmQoKSBtZXRob2QuCisgKgorICogQmVmb3JlIHJldHVybmluZyBmcm9tIEBiaW5kLCB2YXJpb3VzIGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgZGVzY3JpcHRvcgorICogbWF5IGJlIG92ZXJyaWRkZW4uICBUaGVzZSBpbmNsdWRlIHRoZSBpZFZlbmRvci9pZFByb2R1Y3QvYmNkRGV2aWNlIHZhbHVlcworICogbm9ybWFsbHkgdG8gYmluZCB0aGUgYXBwcm9wcmlhdGUgaG9zdCBzaWRlIGRyaXZlciwgYW5kIHRoZSB0aHJlZSBzdHJpbmdzCisgKiAoaU1hbnVmYWN0dXJlciwgaVByb2R1Y3QsIGlTZXJpYWxOdW1iZXIpIG5vcm1hbGx5IHVzZWQgdG8gcHJvdmlkZSB1c2VyCisgKiBtZWFuaW5nZnVsIGRldmljZSBpZGVudGlmaWVycy4gIChUaGUgc3RyaW5ncyB3aWxsIG5vdCBiZSBkZWZpbmVkIHVubGVzcworICogdGhleSBhcmUgZGVmaW5lZCBpbiBAZGV2IGFuZCBAc3RyaW5ncy4pICBUaGUgY29ycmVjdCBlcDAgbWF4cGFja2V0IHNpemUKKyAqIGlzIGFsc28gcmVwb3J0ZWQsIGFzIGRlZmluZWQgYnkgdGhlIHVuZGVybHlpbmcgY29udHJvbGxlciBkcml2ZXIuCisgKi8KK3N0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciB7CisJY29uc3QgY2hhcgkJCQkqbmFtZTsKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yCSpkZXY7CisJc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncwkJKipzdHJpbmdzOworCisJLyogUkVWSVNJVDogIGJpbmQoKSBmdW5jdGlvbnMgY2FuIGJlIG1hcmtlZCBfX2luaXQsIHdoaWNoCisJICogbWFrZXMgdHJvdWJsZSBmb3Igc2VjdGlvbiBtaXNtYXRjaCBhbmFseXNpcy4gIFNlZSBpZgorCSAqIHdlIGNhbid0IHJlc3RydWN0dXJlIHRoaW5ncyB0byBhdm9pZCBtaXNtYXRjaGluZy4uLgorCSAqLworCisJaW50CQkJKCpiaW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKik7CisJaW50CQkJKCp1bmJpbmQpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKK307CisKK2V4dGVybiBpbnQgdXNiX2NvbXBvc2l0ZV9yZWdpc3RlcihzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgKik7CitleHRlcm4gdm9pZCB1c2JfY29tcG9zaXRlX3VucmVnaXN0ZXIoc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyICopOworCisKKy8qKgorICogc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2aWNlIC0gcmVwcmVzZW50cyBvbmUgY29tcG9zaXRlIHVzYiBnYWRnZXQKKyAqIEBnYWRnZXQ6IHJlYWQtb25seSwgYWJzdHJhY3RzIHRoZSBnYWRnZXQncyB1c2IgcGVyaXBoZXJhbCBjb250cm9sbGVyCisgKiBAcmVxOiB1c2VkIGZvciBjb250cm9sIHJlc3BvbnNlczsgYnVmZmVyIGlzIHByZS1hbGxvY2F0ZWQKKyAqIEBidWZzaXo6IHNpemUgb2YgYnVmZmVyIHByZS1hbGxvY2F0ZWQgaW4gQHJlcQorICogQGNvbmZpZzogdGhlIGN1cnJlbnRseSBhY3RpdmUgY29uZmlndXJhdGlvbgorICoKKyAqIE9uZSBvZiB0aGVzZSBkZXZpY2VzIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZQorICogYXNzb2NpYXRlZCBkZXZpY2UgZHJpdmVyJ3MgYmluZCgpIGlzIGNhbGxlZC4KKyAqCisgKiBPUEVOIElTU1VFOiAgaXQgYXBwZWFycyB0aGF0IHNvbWUgV1VTQiBkZXZpY2VzIHdpbGwgbmVlZCB0byBiZQorICogYnVpbHQgYnkgY29tYmluaW5nIGEgbm9ybWFsICh3aXJlZCkgZ2FkZ2V0IHdpdGggYSB3aXJlbGVzcyBvbmUuCisgKiBUaGlzIHJldmlzaW9uIG9mIHRoZSBnYWRnZXQgZnJhbWV3b3JrIHNob3VsZCBwcm9iYWJseSB0cnkgdG8gbWFrZQorICogc3VyZSBkb2luZyB0aGF0IHdvbid0IGh1cnQgdG9vIG11Y2guCisgKgorICogT25lIG5vdGlvbiBmb3IgaG93IHRvIGhhbmRsZSBXaXJlbGVzcyBVU0IgZGV2aWNlcyBpbnZvbHZlczoKKyAqIChhKSBhIHNlY29uZCBnYWRnZXQgaGVyZSwgZGlzY292ZXJ5IG1lY2hhbmlzbSBUQkQsIGJ1dCBsaWtlbHkKKyAqICAgICBuZWVkaW5nIHNlcGFyYXRlICJyZWdpc3Rlci91bnJlZ2lzdGVyIFdVU0IgZ2FkZ2V0IiBjYWxsczsKKyAqIChiKSB1cGRhdGVzIHRvIHVzYl9nYWRnZXQgdG8gaW5jbHVkZSBmbGFncyAiaXMgaXQgd2lyZWxlc3MiLAorICogICAgICJpcyBpdCB3aXJlZCIsIHBsdXMgKHByZXN1bWFibHkgaW4gYSB3cmFwcGVyIHN0cnVjdHVyZSkKKyAqICAgICBiYW5kZ3JvdXAgYW5kIFBIWSBpbmZvOworICogKGMpIHByZXN1bWFibHkgYSB3aXJlbGVzc19lcCB3cmFwcGluZyBhIHVzYl9lcCwgYW5kIHJlcG9ydGluZworICogICAgIHdpcmVsZXNzLXNwZWNpZmljIHBhcmFtZXRlcnMgbGlrZSBtYXhidXJzdCBhbmQgbWF4c2VxdWVuY2U7CisgKiAoZCkgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gd2lyZWxlc3MgbGlua3M7CisgKiAoZSkgZnVuY3Rpb24gZHJpdmVycyB0aGF0IHVuZGVyc3RhbmQgd2lyZWxlc3MgY29uZmlncyBhbmQgd2lsbAorICogICAgIHN1cHBvcnQgd2lyZWxlc3MgZm9yIChhZGRpdGlvbmFsKSBmdW5jdGlvbiBpbnN0YW5jZXM7CisgKiAoZikgYSBmdW5jdGlvbiB0byBzdXBwb3J0IGFzc29jaWF0aW9uIHNldHVwIChsaWtlIENCQUYpLCBub3QKKyAqICAgICBuZWNlc3NhcmlseSByZXF1aXJpbmcgYSB3aXJlbGVzcyBhZGFwdGVyOworICogKGcpIGNvbXBvc2l0ZSBkZXZpY2Ugc2V0dXAgdGhhdCBjYW4gY3JlYXRlIG9uZSBvciBtb3JlIHdpcmVsZXNzCisgKiAgICAgY29uZmlncywgaW5jbHVkaW5nIGFwcHJvcHJpYXRlIGFzc29jaWF0aW9uIHNldHVwIHN1cHBvcnQ7CisgKiAoaCkgbW9yZSwgVEJELgorICovCitzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgeworCXN0cnVjdCB1c2JfZ2FkZ2V0CQkqZ2FkZ2V0OworCXN0cnVjdCB1c2JfcmVxdWVzdAkJKnJlcTsKKwl1bnNpZ25lZAkJCWJ1ZnNpejsKKworCXN0cnVjdCB1c2JfY29uZmlndXJhdGlvbgkqY29uZmlnOworCisJLyogaW50ZXJuYWxzICovCisJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcglkZXNjOworCXN0cnVjdCBsaXN0X2hlYWQJCWNvbmZpZ3M7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyCSpkcml2ZXI7CisJdTgJCQkJbmV4dF9zdHJpbmdfaWQ7CisKKwlzcGlubG9ja190CQkJbG9jazsKKworCS8qIFJFVklTSVQgdXNlIGFuZCBleGlzdGVuY2Ugb2YgbG9jayAuLi4gKi8KK307CisKK2V4dGVybiBpbnQgdXNiX3N0cmluZ19pZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmMpOworCisvKiBtZXNzYWdpbmcgdXRpbHMgKi8KKyNkZWZpbmUgREJHKGQsIGZtdCwgYXJncy4uLikgXAorCWRldl9kYmcoJihkKS0+Z2FkZ2V0LT5kZXYgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBWREJHKGQsIGZtdCwgYXJncy4uLikgXAorCWRldl92ZGJnKCYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgRVJST1IoZCwgZm10LCBhcmdzLi4uKSBcCisJZGV2X2VycigmKGQpLT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIFdBUk4oZCwgZm10LCBhcmdzLi4uKSBcCisJZGV2X3dhcm4oJihkKS0+Z2FkZ2V0LT5kZXYgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJTkZPKGQsIGZtdCwgYXJncy4uLikgXAorCWRldl9pbmZvKCYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKKworI2VuZGlmCS8qIF9fTElOVVhfVVNCX0NPTVBPU0lURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCmluZGV4IGNmNDY4ZmIuLjA0NjBhNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCkBAIC0zMyw3ICszMyw4IEBACiAgKiBAc2hvcnRfbm90X29rOiBXaGVuIHJlYWRpbmcgZGF0YSwgbWFrZXMgc2hvcnQgcGFja2V0cyBiZQogICogICAgIHRyZWF0ZWQgYXMgZXJyb3JzIChxdWV1ZSBzdG9wcyBhZHZhbmNpbmcgdGlsbCBjbGVhbnVwKS4KICAqIEBjb21wbGV0ZTogRnVuY3Rpb24gY2FsbGVkIHdoZW4gcmVxdWVzdCBjb21wbGV0ZXMsIHNvIHRoaXMgcmVxdWVzdCBhbmQKLSAqCWl0cyBidWZmZXIgbWF5IGJlIHJlLXVzZWQuCisgKglpdHMgYnVmZmVyIG1heSBiZSByZS11c2VkLiAgVGhlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3aXRoCisgKglpbnRlcnJ1cHRzIGRpc2FibGVkLCBhbmQgaXQgbXVzdCBub3Qgc2xlZXAuCiAgKglSZWFkcyB0ZXJtaW5hdGUgd2l0aCBhIHNob3J0IHBhY2tldCwgb3Igd2hlbiB0aGUgYnVmZmVyIGZpbGxzLAogICoJd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgV2hlbiB3cml0ZXMgdGVybWluYXRlLCBzb21lIGRhdGEgYnl0ZXMKICAqCXdpbGwgdXN1YWxseSBzdGlsbCBiZSBpbiBmbGlnaHQgKG9mdGVuIGluIGEgaGFyZHdhcmUgZmlmbykuCkBAIC0yNzEsNyArMjcyLDEwIEBACiAgKiAoTm90ZSB0aGF0IHNvbWUgVVNCIGRldmljZSBjb250cm9sbGVycyBkaXNhbGxvdyBwcm90b2NvbCBzdGFsbCByZXNwb25zZXMKICAqIGluIHNvbWUgY2FzZXMuKSAgV2hlbiBjb250cm9sIHJlc3BvbnNlcyBhcmUgZGVmZXJyZWQgKHRoZSByZXNwb25zZSBpcwogICogd3JpdHRlbiBhZnRlciB0aGUgc2V0dXAgY2FsbGJhY2sgcmV0dXJucyksIHRoZW4gdXNiX2VwX3NldF9oYWx0KCkgbWF5IGJlCi0gKiB1c2VkIG9uIGVwMCB0byB0cmlnZ2VyIHByb3RvY29sIHN0YWxscy4KKyAqIHVzZWQgb24gZXAwIHRvIHRyaWdnZXIgcHJvdG9jb2wgc3RhbGxzLiAgRGVwZW5kaW5nIG9uIHRoZSBjb250cm9sbGVyLAorICogaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byB0cmlnZ2VyIGEgc3RhdHVzLXN0YWdlIHByb3RvY29sIHN0YWxsIHdoZW4gdGhlCisgKiBkYXRhIHN0YWdlIGlzIG92ZXIsIHRoYXQgaXMsIGZyb20gd2l0aGluIHRoZSByZXNwb25zZSdzIGNvbXBsZXRpb24KKyAqIHJvdXRpbmUuCiAgKgogICogRm9yIHBlcmlvZGljIGVuZHBvaW50cywgbGlrZSBpbnRlcnJ1cHQgb3IgaXNvY2hyb25vdXMgb25lcywgdGhlIHVzYiBob3N0CiAgKiBhcnJhbmdlcyB0byBwb2xsIG9uY2UgcGVyIGludGVydmFsLCBhbmQgdGhlIGdhZGdldCBkcml2ZXIgdXN1YWxseSB3aWxsCkBAIC04NTgsNiArODYyLDI1IEBACiBpbnQgdXNiX2dhZGdldF9jb25maWdfYnVmKGNvbnN0IHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmNvbmZpZywKIAl2b2lkICpidWYsIHVuc2lnbmVkIGJ1ZmxlbiwgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKmRlc2MpOwogCisvKiBjb3B5IGEgTlVMTC10ZXJtaW5hdGVkIHZlY3RvciBvZiBkZXNjcmlwdG9ycyAqLworc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKnVzYl9jb3B5X2Rlc2NyaXB0b3JzKAorCQlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICoqKTsKKworLyogcmV0dXJuIGNvcHkgb2YgZW5kcG9pbnQgZGVzY3JpcHRvciBnaXZlbiBvcmlnaW5hbCBkZXNjcmlwdG9yIHNldCAqLworc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICp1c2JfZmluZF9lbmRwb2ludCgKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICoqc3JjLAorCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipjb3B5LAorCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqbWF0Y2gpOworCisvKioKKyAqIHVzYl9mcmVlX2Rlc2NyaXB0b3JzIC0gZnJlZSBkZXNjcmlwdG9ycyByZXR1cm5lZCBieSB1c2JfY29weV9kZXNjcmlwdG9ycygpCisgKiBAdjogdmVjdG9yIG9mIGRlc2NyaXB0b3JzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfZnJlZV9kZXNjcmlwdG9ycyhzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICoqdikKK3sKKwlrZnJlZSh2KTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogdXRpbGl0eSB3cmFwcGluZyBhIHNpbXBsZSBlbmRwb2ludCBzZWxlY3Rpb24gcG9saWN5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9pcmRhLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9pcmRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0NWNlYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2lyZGEuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIFVTQiBJckRBIEJyaWRnZSBEZXZpY2UgRGVmaW5pdGlvbgorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfSVJEQV9ICisjZGVmaW5lIF9fTElOVVhfVVNCX0lSREFfSAorCisvKiBUaGlzIGRldmljZSBzaG91bGQgdXNlIEFwcGxpY2F0aW9uLXNwZWNpZmljIGNsYXNzICovCisKKyNkZWZpbmUgVVNCX1NVQkNMQVNTX0lSREEJCQkweDAyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIENsYXNzLVNwZWNpZmljIHJlcXVlc3RzIChiUmVxdWVzdCBmaWVsZCkgKi8KKworI2RlZmluZSBVU0JfUkVRX0NTX0lSREFfUkVDRUlWSU5HCQkxCisjZGVmaW5lIFVTQl9SRVFfQ1NfSVJEQV9DSEVDS19NRURJQV9CVVNZCTMKKyNkZWZpbmUgVVNCX1JFUV9DU19JUkRBX1JBVEVfU05JRkYJCTQKKyNkZWZpbmUgVVNCX1JFUV9DU19JUkRBX1VOSUNBU1RfTElTVAkJNQorI2RlZmluZSBVU0JfUkVRX0NTX0lSREFfR0VUX0NMQVNTX0RFU0MJCTYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ2xhc3MtU3BlY2lmaWMgZGVzY3JpcHRvciAqLworCisjZGVmaW5lIFVTQl9EVF9DU19JUkRBCQkJCTB4MjEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRGF0YSBzaXplcyAqLworCisjZGVmaW5lIFVTQl9JUkRBX0RTXzIwNDgJCQkoMSA8PCA1KQorI2RlZmluZSBVU0JfSVJEQV9EU18xMDI0CQkJKDEgPDwgNCkKKyNkZWZpbmUgVVNCX0lSREFfRFNfNTEyCQkJCSgxIDw8IDMpCisjZGVmaW5lIFVTQl9JUkRBX0RTXzI1NgkJCQkoMSA8PCAyKQorI2RlZmluZSBVU0JfSVJEQV9EU18xMjgJCQkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCX0lSREFfRFNfNjQJCQkJKDEgPDwgMCkKKworLyogV2luZG93IHNpemVzICovCisKKyNkZWZpbmUgVVNCX0lSREFfV1NfNwkJCQkoMSA8PCA2KQorI2RlZmluZSBVU0JfSVJEQV9XU182CQkJCSgxIDw8IDUpCisjZGVmaW5lIFVTQl9JUkRBX1dTXzUJCQkJKDEgPDwgNCkKKyNkZWZpbmUgVVNCX0lSREFfV1NfNAkJCQkoMSA8PCAzKQorI2RlZmluZSBVU0JfSVJEQV9XU18zCQkJCSgxIDw8IDIpCisjZGVmaW5lIFVTQl9JUkRBX1dTXzIJCQkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCX0lSREFfV1NfMQkJCQkoMSA8PCAwKQorCisvKiBNaW4gdHVybmFyb3VuZCB0aW1lcyBpbiB1c2VjcyAqLworCisjZGVmaW5lIFVTQl9JUkRBX01UVF8wCQkJCSgxIDw8IDcpCisjZGVmaW5lIFVTQl9JUkRBX01UVF8xMAkJCQkoMSA8PCA2KQorI2RlZmluZSBVU0JfSVJEQV9NVFRfNTAJCQkJKDEgPDwgNSkKKyNkZWZpbmUgVVNCX0lSREFfTVRUXzEwMAkJCSgxIDw8IDQpCisjZGVmaW5lIFVTQl9JUkRBX01UVF81MDAJCQkoMSA8PCAzKQorI2RlZmluZSBVU0JfSVJEQV9NVFRfMTAwMAkJCSgxIDw8IDIpCisjZGVmaW5lIFVTQl9JUkRBX01UVF81MDAwCQkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCX0lSREFfTVRUXzEwMDAwCQkJKDEgPDwgMCkKKworLyogQmF1ZCByYXRlcyAqLworCisjZGVmaW5lIFVTQl9JUkRBX0JSXzQwMDAwMDAJCQkoMSA8PCA4KQorI2RlZmluZSBVU0JfSVJEQV9CUl8xMTUyMDAwCQkJKDEgPDwgNykKKyNkZWZpbmUgVVNCX0lSREFfQlJfNTc2MDAwCQkJKDEgPDwgNikKKyNkZWZpbmUgVVNCX0lSREFfQlJfMTE1MjAwCQkJKDEgPDwgNSkKKyNkZWZpbmUgVVNCX0lSREFfQlJfNTc2MDAJCQkoMSA8PCA0KQorI2RlZmluZSBVU0JfSVJEQV9CUl8zODQwMAkJCSgxIDw8IDMpCisjZGVmaW5lIFVTQl9JUkRBX0JSXzE5MjAwCQkJKDEgPDwgMikKKyNkZWZpbmUgVVNCX0lSREFfQlJfOTYwMAkJCSgxIDw8IDEpCisjZGVmaW5lIFVTQl9JUkRBX0JSXzI0MDAJCQkoMSA8PCAwKQorCisvKiBBZGRpdGlvbmFsIEJPRnMgKi8KKworI2RlZmluZSBVU0JfSVJEQV9BQl8wCQkJCSgxIDw8IDcpCisjZGVmaW5lIFVTQl9JUkRBX0FCXzEJCQkJKDEgPDwgNikKKyNkZWZpbmUgVVNCX0lSREFfQUJfMgkJCQkoMSA8PCA1KQorI2RlZmluZSBVU0JfSVJEQV9BQl8zCQkJCSgxIDw8IDQpCisjZGVmaW5lIFVTQl9JUkRBX0FCXzYJCQkJKDEgPDwgMykKKyNkZWZpbmUgVVNCX0lSREFfQUJfMTIJCQkJKDEgPDwgMikKKyNkZWZpbmUgVVNCX0lSREFfQUJfMjQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCX0lSREFfQUJfNDgJCQkJKDEgPDwgMCkKKworLyogSVJEQSBSYXRlIFNuaWZmICovCisKKyNkZWZpbmUgVVNCX0lSREFfUkFURV9TTklGRgkJCTEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IHVzYl9pcmRhX2NzX2Rlc2NyaXB0b3IgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKworCV9fbGUxNgliY2RTcGVjUmV2aXNpb247CisJX191OAlibURhdGFTaXplOworCV9fdTgJYm1XaW5kb3dTaXplOworCV9fdTgJYm1NaW5UdXJuYXJvdW5kVGltZTsKKwlfX2xlMTYJd0JhdWRSYXRlOworCV9fdTgJYm1BZGRpdGlvbmFsQk9GczsKKwlfX3U4CWJJcmRhUmF0ZVNuaWZmOworCV9fdTgJYk1heFVuaWNhc3RMaXN0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERhdGEgRm9ybWF0ICovCisKKyNkZWZpbmUgVVNCX0lSREFfU1RBVFVTX01FRElBX0JVU1kJKDEgPDwgNykKKworLyogVGhlIGZvbGxvd2luZyBpcyBhIDQtYml0IHZhbHVlIHVzZWQgZm9yIGJvdGgKKyAqIGluYm91bmQgYW5kIG91dGJvdW5kIGhlYWRlcnM6CisgKgorICogMCAtIHNwZWVkIGlnbm9yZWQKKyAqIDEgLSAyNDAwIGJwcworICogMiAtIDk2MDAgYnBzCisgKiAzIC0gMTkyMDAgYnBzCisgKiA0IC0gMzg0MDAgYnBzCisgKiA1IC0gNTc2MDAgYnBzCisgKiA2IC0gMTE1MjAwIGJwcworICogNyAtIDU3NjAwMCBicHMKKyAqIDggLSAxLjE1MiBNYnBzCisgKiA5IC0gNSBtYnBzCisgKiAxMC4uMTUgLSBSZXNlcnZlZAorICovCisjZGVmaW5lIFVTQl9JUkRBX1NUQVRVU19MSU5LX1NQRUVECTB4MGYKKworLyogVGhlIGZvbGxvd2luZyBpcyBhIDQtYml0IHZhbHVlIHVzZWQgb25seSBmb3IKKyAqIG91dGJvdW5kIGhlYWRlcjoKKyAqCisgKiAwIC0gTm8gY2hhbmdlIChCT0YgaWdub3JlZCkKKyAqIDEgLSA0OCBCT0ZzCisgKiAyIC0gMjQgQk9GcworICogMyAtIDEyIEJPRnMKKyAqIDQgLSA2IEJPRnMKKyAqIDUgLSAzIEJPRnMKKyAqIDYgLSAyIEJPRnMKKyAqIDcgLSAxIEJPRnMKKyAqIDggLSAwIEJPRnMKKyAqIDkuLjE1IC0gUmVzZXJ2ZWQKKyAqLworI2RlZmluZSBVU0JfSVJEQV9FWFRSQV9CT0ZTCQkweGYwCisKK3N0cnVjdCB1c2JfaXJkYV9pbmJvdW5kX2hlYWRlciB7CisJX191OAkJYm1TdGF0dXM7Cit9OworCitzdHJ1Y3QgdXNiX2lyZGFfb3V0Ym91bmRfaGVhZGVyIHsKKwlfX3U4CQlibUNoYW5nZTsKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9JUkRBX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oIGIvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCmluZGV4IDI5ZDY0NTguLjBhNmU2ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKQEAgLTI2MCw3ICsyNjAsOCBAQAogCiAKIGV4dGVybiB2b2lkIHJuZGlzX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYik7Ci1leHRlcm4gaW50IHJuZGlzX2NvbW1hbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgcm5kaXNfbXNnX2hkciAqYnVmKTsKK2V4dGVybiBpbnQKK3JuZGlzX2NvbW1hbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgcm5kaXNfbXNnX2hkciAqYnVmLCBpbnQgYnVmbGVuKTsKIGV4dGVybiBpbnQKIGdlbmVyaWNfcm5kaXNfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgcm5kaXNfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCA4Zjg5MWNiLi4wOWEzZTZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtNjIsNyArNjIsNyBAQAogICovCiBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsOwotCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CisJc3RydWN0IHR0eV9wb3J0CQlwb3J0OwogCXNwaW5sb2NrX3QJCWxvY2s7CiAJc3RydWN0IG11dGV4ICAgICAgICAgICAgbXV0ZXg7CiAJdW5zaWduZWQgY2hhcgkJbnVtYmVyOwpAQCAtODksNyArODksNiBAQAogCiAJd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKLQlpbnQJCQlvcGVuX2NvdW50OwogCWNoYXIJCQl0aHJvdHRsZWQ7CiAJY2hhcgkJCXRocm90dGxlX3JlcTsKIAljaGFyCQkJY29uc29sZTsKQEAgLTIxNywyMiArMjE2LDI3IEBACiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIAogCS8qIHNlcmlhbCBmdW5jdGlvbiBjYWxscyAqLwotCWludCAgKCpvcGVuKShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci0Jdm9pZCAoKmNsb3NlKShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci0JaW50ICAoKndyaXRlKShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCi0JCSAgICAgIGludCBjb3VudCk7Ci0JaW50ICAoKndyaXRlX3Jvb20pKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotCWludCAgKCppb2N0bCkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJLyogQ2FsbGVkIGJ5IGNvbnNvbGUgd2l0aCB0dHkgPSBOVUxMIGFuZCBieSB0dHkgKi8KKwlpbnQgICgqb3Blbikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKKwl2b2lkICgqY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CisJaW50ICAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworCS8qIENhbGxlZCBvbmx5IGJ5IHRoZSB0dHkgbGF5ZXIgKi8KKwlpbnQgICgqd3JpdGVfcm9vbSkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJaW50ICAoKmlvY3RsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCXZvaWQgKCpzZXRfdGVybWlvcykoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwotCXZvaWQgKCpicmVha19jdGwpKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSk7Ci0JaW50ICAoKmNoYXJzX2luX2J1ZmZlcikoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci0Jdm9pZCAoKnRocm90dGxlKShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLQl2b2lkICgqdW50aHJvdHRsZSkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci0JaW50ICAoKnRpb2NtZ2V0KShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci0JaW50ICAoKnRpb2Ntc2V0KShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwl2b2lkICgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CisJdm9pZCAoKmJyZWFrX2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKKwlpbnQgICgqY2hhcnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwl2b2lkICgqdGhyb3R0bGUpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCXZvaWQgKCp1bnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwlpbnQgICgqdGlvY21nZXQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKKwlpbnQgICgqdGlvY21zZXQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7Ci0KKwkvKiBVU0IgZXZlbnRzICovCiAJdm9pZCAoKnJlYWRfaW50X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICp1cmIpOwogCXZvaWQgKCp3cml0ZV9pbnRfY2FsbGJhY2spKHN0cnVjdCB1cmIgKnVyYik7CiAJdm9pZCAoKnJlYWRfYnVsa19jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiKTsKQEAgLTI3MCwxOSArMjc0LDE5IEBACiAvKiBGdW5jdGlvbnMgbmVlZGVkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSB1c2JzZXJpYWwgY29yZSAqLwogZXh0ZXJuIHN0cnVjdCB1c2Jfc2VyaWFsICp1c2Jfc2VyaWFsX2dldF9ieV9pbmRleCh1bnNpZ25lZCBpbnQgbWlub3IpOwogZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9wdXQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1leHRlcm4gaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJICAgc3RydWN0IGZpbGUgKmZpbHApOwotZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwotZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBleHRlcm4gaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1leHRlcm4gaW50IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9nZW5lcmljX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIGV4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7Ci1leHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfdGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1leHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfdW50aHJvdHRsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY190aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY191bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVnaXN0ZXIoaW50IGRlYnVnKTsKIGV4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19kZXJlZ2lzdGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaCBiL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKaW5kZXggMzExOGVkZS4uMDA0NGQ5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCkBAIC0yMiw4ICsyMiw2IEBACiAgKgogICogIEhpc3Rvcnk6CiAgKiAgIDAuMSAgMDQuMDEuMjAwMCAgQ3JlYXRlZAotICoKLSAqICAkSWQ6IHVzYmRldmljZV9mcy5oLHYgMS4xIDIwMDAvMDEvMDYgMTg6NDA6NDEgdG9tIEV4cCAkCiAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggNGE1MzVlYS4uMmU2NmE5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC0yNDYsNiArMjQ2LDcgQEAKICNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQJMHgwMDAwMDA4MCAgLyogSXMgYSBzbGljZWQgVkJJIG91dHB1dCBkZXZpY2UgKi8KICNkZWZpbmUgVjRMMl9DQVBfUkRTX0NBUFRVUkUJCTB4MDAwMDAxMDAgIC8qIFJEUyBkYXRhIGNhcHR1cmUgKi8KICNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUX09WRVJMQVkJMHgwMDAwMDIwMCAgLyogQ2FuIGRvIHZpZGVvIG91dHB1dCBvdmVybGF5ICovCisjZGVmaW5lIFY0TDJfQ0FQX0hXX0ZSRVFfU0VFSwkJMHgwMDAwMDQwMCAgLyogQ2FuIGRvIGhhcmR3YXJlIGZyZXF1ZW5jeSBzZWVrICAqLwogCiAjZGVmaW5lIFY0TDJfQ0FQX1RVTkVSCQkJMHgwMDAxMDAwMCAgLyogaGFzIGEgdHVuZXIgKi8KICNkZWZpbmUgVjRMMl9DQVBfQVVESU8JCQkweDAwMDIwMDAwICAvKiBoYXMgYXVkaW8gc3VwcG9ydCAqLwpAQCAtMzA5LDYgKzMxMCw3IEBACiAKIC8qIHNlZSBodHRwOi8vd3d3LnNpbGljb25pbWFnaW5nLmNvbS9SR0IlMjBCYXllci5odG0gKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSOCAgdjRsMl9mb3VyY2MoJ0InLCdBJywnOCcsJzEnKSAvKiAgOCAgQkdCRy4uIEdSR1IuLiAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkc4ICB2NGwyX2ZvdXJjYygnRycsJ0InLCdSJywnRycpIC8qICA4ICBHQkdCLi4gUkdSRy4uICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjE2IHY0bDJfZm91cmNjKCdCJywnWScsJ1InLCcyJykgLyogMTYgIEJHQkcuLiBHUkdSLi4gKi8KIAogLyogY29tcHJlc3NlZCBmb3JtYXRzICovCkBAIC0zMjMsNiArMzI1LDkgQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1BXQzEgICAgIHY0bDJfZm91cmNjKCdQJywnVycsJ0MnLCcxJykgLyogcHdjIG9sZGVyIHdlYmNhbSAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMiAgICAgdjRsMl9mb3VyY2MoJ1AnLCdXJywnQycsJzInKSAvKiBwd2MgbmV3ZXIgd2ViY2FtICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9FVDYxWDI1MSB2NGwyX2ZvdXJjYygnRScsJzYnLCcyJywnNScpIC8qIEVUNjFYMjUxIGNvbXByZXNzaW9uICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTAxICB2NGwyX2ZvdXJjYygnUycsJzUnLCcwJywnMScpIC8qIFlVWVYgcGVyIGxpbmUgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1NjEgIHY0bDJfZm91cmNjKCdTJywnNScsJzYnLCcxJykgLyogY29tcHJlc3NlZCBHQlJHIGJheWVyICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9QQUMyMDcgICB2NGwyX2ZvdXJjYygnUCcsJzInLCcwJywnNycpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLwogCiAvKgogICoJRiBPIFIgTSBBIFQgICBFIE4gVSBNIEUgUiBBIFQgSSBPIE4KQEAgLTExNTYsNiArMTE2MSwxNCBAQAogCV9fdTMyCQkgICAgICByZXNlcnZlZFs4XTsKIH07CiAKK3N0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayB7CisJX191MzIJCSAgICAgIHR1bmVyOworCWVudW0gdjRsMl90dW5lcl90eXBlICB0eXBlOworCV9fdTMyCQkgICAgICBzZWVrX3Vwd2FyZDsKKwlfX3UzMgkJICAgICAgd3JhcF9hcm91bmQ7CisJX191MzIJCSAgICAgIHJlc2VydmVkWzhdOworfTsKKwogLyoKICAqCUEgVSBEIEkgTwogICovCkBAIC0xNDQxLDYgKzE0NTQsNyBAQAogCiAjZGVmaW5lIFZJRElPQ19HX0NISVBfSURFTlQgICAgIF9JT1dSICgnVicsIDgxLCBzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50KQogI2VuZGlmCisjZGVmaW5lIFZJRElPQ19TX0hXX0ZSRVFfU0VFSwlfSU9XICAoJ1YnLCA4Miwgc3RydWN0IHY0bDJfaHdfZnJlcV9zZWVrKQogCiAjaWZkZWYgX19PTERfVklESU9DXwogLyogZm9yIGNvbXBhdGliaWxpdHksIHdpbGwgZ28gYXdheSBzb21lIGRheSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YW5yb3V0ZXIuaCBiL2luY2x1ZGUvbGludXgvd2Fucm91dGVyLmgKaW5kZXggM2FkZDg3NC4uZTBhYTM5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93YW5yb3V0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dhbnJvdXRlci5oCkBAIC01MjIsNyArNTIyLDcgQEAKIGV4dGVybiB2b2lkIHdhbnJvdXRlcl9wcm9jX2NsZWFudXAodm9pZCk7CiBleHRlcm4gaW50IHdhbnJvdXRlcl9wcm9jX2FkZChzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2KTsKIGV4dGVybiBpbnQgd2Fucm91dGVyX3Byb2NfZGVsZXRlKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYpOwotZXh0ZXJuIGludCB3YW5yb3V0ZXJfaW9jdGwoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gbG9uZyB3YW5yb3V0ZXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogLyogUHVibGljIERhdGEgKi8KIC8qIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKaW5kZXggMGE5YjViNC4uZDc5NThmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaApAQCAtNjExLDYgKzYxMSw3IEBACiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfV0VQCTEKICNkZWZpbmUgSVdfRU5DT0RFX0FMR19US0lQCTIKICNkZWZpbmUgSVdfRU5DT0RFX0FMR19DQ01QCTMKKyNkZWZpbmUgSVdfRU5DT0RFX0FMR19QTUsJNAogLyogc3RydWN0IGl3X2VuY29kZV9leHQgLT5leHRfZmxhZ3MgKi8KICNkZWZpbmUgSVdfRU5DT0RFX0VYVF9UWF9TRVFfVkFMSUQJMHgwMDAwMDAwMQogI2RlZmluZSBJV19FTkNPREVfRVhUX1JYX1NFUV9WQUxJRAkweDAwMDAwMDAyCkBAIC02MzAsNiArNjMxLDcgQEAKICNkZWZpbmUgSVdfRU5DX0NBUEFfV1BBMgkweDAwMDAwMDAyCiAjZGVmaW5lIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQCTB4MDAwMDAwMDQKICNkZWZpbmUgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVAJMHgwMDAwMDAwOAorI2RlZmluZSBJV19FTkNfQ0FQQV80V0FZX0hBTkRTSEFLRQkweDAwMDAwMDEwCiAKIC8qIEV2ZW50IGNhcGFiaWxpdHkgbWFjcm9zIC0gaW4gKHN0cnVjdCBpd19yYW5nZSAqKS0+ZXZlbnRfY2FwYQogICogQmVjYXVzZSB3ZSBoYXZlIG1vcmUgdGhhbiAzMiBwb3NzaWJsZSBldmVudHMsIHdlIHVzZSBhbiBhcnJheSBvZgpAQCAtNjc1LDYgKzY3NywxOSBAQAogICBfX3UxNgkJZmxhZ3M7CQkvKiBPcHRpb25hbCBwYXJhbXMgKi8KIH07CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisKK3N0cnVjdCBjb21wYXRfaXdfcG9pbnQgeworCWNvbXBhdF9jYWRkcl90IHBvaW50ZXI7CisJX191MTYgbGVuZ3RoOworCV9fdTE2IGZsYWdzOworfTsKKyNlbmRpZgorI2VuZGlmCisKIC8qCiAgKglBIGZyZXF1ZW5jeQogICoJRm9yIG51bWJlcnMgbG93ZXIgdGhhbiAxMF45LCB3ZSBlbmNvZGUgdGhlIG51bWJlciBpbiAnbScgYW5kCkBAIC0xMDk4LDYgKzExMTMsMjEgQEAKICNkZWZpbmUgSVdfRVZfUE9JTlRfTEVOCShJV19FVl9MQ1BfTEVOICsgc2l6ZW9mKHN0cnVjdCBpd19wb2ludCkgLSBcCiAJCQkgSVdfRVZfUE9JTlRfT0ZGKQogCisjaWZkZWYgX19LRVJORUxfXworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBfX2NvbXBhdF9pd19ldmVudCB7CisJX191MTYJCWxlbjsJCQkvKiBSZWFsIGxlbmd0aCBvZiB0aGlzIHN0dWZmICovCisJX191MTYJCWNtZDsJCQkvKiBXaXJlbGVzcyBJT0NUTCAqLworCWNvbXBhdF9jYWRkcl90CXBvaW50ZXI7Cit9OworI2RlZmluZSBJV19FVl9DT01QQVRfTENQX0xFTiBvZmZzZXRvZihzdHJ1Y3QgX19jb21wYXRfaXdfZXZlbnQsIHBvaW50ZXIpCisjZGVmaW5lIElXX0VWX0NPTVBBVF9QT0lOVF9PRkYgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9pd19wb2ludCwgbGVuZ3RoKQorI2RlZmluZSBJV19FVl9DT01QQVRfUE9JTlRfTEVOCVwKKwkoSVdfRVZfQ09NUEFUX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGNvbXBhdF9pd19wb2ludCkgLSBcCisJIElXX0VWX0NPTVBBVF9QT0lOVF9PRkYpCisjZW5kaWYKKyNlbmRpZgorCiAvKiBTaXplIG9mIHRoZSBFdmVudCBwcmVmaXggd2hlbiBwYWNrZWQgaW4gc3RyZWFtICovCiAjZGVmaW5lIElXX0VWX0xDUF9QS19MRU4JKDQpCiAvKiBTaXplIG9mIHRoZSB2YXJpb3VzIGV2ZW50cyB3aGVuIHBhY2tlZCBpbiBzdHJlYW0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvY3gyMzQxeC5oIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKaW5kZXggNWY0NjA4ZS4uOWVjNGQ1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogZW51bSBjeDIzNDF4X2NhcCB7CiAJQ1gyMzQxWF9DQVBfSEFTX1NMSUNFRF9WQkkgPSAxIDw8IDAsCisJQ1gyMzQxWF9DQVBfSEFTX1RTIAkgICA9IDEgPDwgMSwKIH07CiAKIHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zIHsKQEAgLTg4LDEzICs4OSwxMyBAQAogaW50IGN4MjM0MXhfdXBkYXRlKHZvaWQgKnByaXYsIGN4MjM0MXhfbWJveF9mdW5jIGZ1bmMsCiAJCWNvbnN0IHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpvbGQsCiAJCWNvbnN0IHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpuZXcpOwotaW50IGN4MjM0MXhfY3RybF9xdWVyeShzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcGFyYW1zLAoraW50IGN4MjM0MXhfY3RybF9xdWVyeShjb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcGFyYW1zLAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKTsKLWNvbnN0IGNoYXIgKipjeDIzNDF4X2N0cmxfZ2V0X21lbnUodTMyIGlkKTsKK2NvbnN0IGNoYXIgKipjeDIzNDF4X2N0cmxfZ2V0X21lbnUoY29uc3Qgc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnAsIHUzMiBpZCk7CiBpbnQgY3gyMzQxeF9leHRfY3RybHMoc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnBhcmFtcywgaW50IGJ1c3ksCiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMsIHVuc2lnbmVkIGludCBjbWQpOwogdm9pZCBjeDIzNDF4X2ZpbGxfZGVmYXVsdHMoc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnApOwotdm9pZCBjeDIzNDF4X2xvZ19zdGF0dXMoc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnAsIGNvbnN0IGNoYXIgKnByZWZpeCk7Cit2b2lkIGN4MjM0MXhfbG9nX3N0YXR1cyhjb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcCwgY29uc3QgY2hhciAqcHJlZml4KTsKIAogLyogRmlybXdhcmUgbmFtZXMgKi8KICNkZWZpbmUgQ1gyMzQxWF9GSVJNX0VOQ19GSUxFTkFNRSAidjRsLWN4MjM0MXgtZW5jLmZ3IgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmggYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAppbmRleCBhNDU1ZjdjLi4wMGZhNTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaApAQCAtMTksNyArMTksNCBAQAogCWNoYXIgICAgICAgICAgICAgICAgICAgcGh5c1szMl07CiAJaW50ICAgICAgICAgICAgICAgICAgICAoKmdldF9rZXkpKHN0cnVjdCBJUl9pMmMqLCB1MzIqLCB1MzIqKTsKIH07Ci0KLWludCBnZXRfa2V5X3Bpbm5hY2xlX2dyZXkoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3Jhdyk7Ci1pbnQgZ2V0X2tleV9waW5uYWNsZV9jb2xvcihzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9wd2MtaW9jdGwuaCBiL2luY2x1ZGUvbWVkaWEvcHdjLWlvY3RsLmgKaW5kZXggYWRjMTI1NC4uMGYxOTc3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9wd2MtaW9jdGwuaAorKysgYi9pbmNsdWRlL21lZGlhL3B3Yy1pb2N0bC5oCkBAIC01NSw4ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKLQotIC8qIEVudW1lcmF0aW9uIG9mIGltYWdlIHNpemVzICovCisvKiBFbnVtZXJhdGlvbiBvZiBpbWFnZSBzaXplcyAqLwogI2RlZmluZSBQU1pfU1FDSUYJMHgwMAogI2RlZmluZSBQU1pfUVNJRgkweDAxCiAjZGVmaW5lIFBTWl9RQ0lGCTB4MDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKaW5kZXggODhiMmI1YS4uMmY2OGY0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKQEAgLTUzLDcgKzUzLDcgQEAKIC8qIHNhYTcxNDYgcGFnZSB0YWJsZSAqLwogc3RydWN0IHNhYTcxNDZfcGd0YWJsZSB7CiAJdW5zaWduZWQgaW50CXNpemU7Ci0JdTMyCQkqY3B1OworCV9fbGUzMgkJKmNwdTsKIAlkbWFfYWRkcl90CWRtYTsKIAkvKiB1c2VkIGZvciBvZmZzZXRzIGZvciB1LHYgcGxhbmVzIGZvciBwbGFuYXIgY2FwdHVyZSBtb2RlcyAqLwogCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OwpAQCAtMTAxLDcgKzEwMSw3IEBACiBzdHJ1Y3Qgc2FhNzE0Nl9kbWEKIHsKIAlkbWFfYWRkcl90CWRtYV9oYW5kbGU7Ci0JdTMyCQkqY3B1X2FkZHI7CisJX19sZTMyCQkqY3B1X2FkZHI7CiB9OwogCiBzdHJ1Y3Qgc2FhNzE0Nl9kZXYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0YTQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19BU01fU0hfTU9CSUxFX0NFVV9IX18KKyNkZWZpbmUgX19BU01fU0hfTU9CSUxFX0NFVV9IX18KKworI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKworc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsgLyogU09DQU1fLi4uICovCisJdm9pZCAoKmVuYWJsZV9jYW1lcmEpKHZvaWQpOworCXZvaWQgKCpkaXNhYmxlX2NhbWVyYSkodm9pZCk7Cit9OworCisjZW5kaWYgLyogX19BU01fU0hfTU9CSUxFX0NFVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggNmE4YzhiZTcuLjFkZTk4ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCkBAIC0xMyw3ICsxMyw3IEBACiAjZGVmaW5lIFNPQ19DQU1FUkFfSAogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgogCiBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTQ4LDE1ICs0OCwxMiBAQAogc3RydWN0IHNvY19jYW1lcmFfZmlsZSB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlIHZiX3ZpZHE7Ci0Jc3BpbmxvY2tfdCAqbG9jazsKIH07CiAKIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIAl1bnNpZ25lZCBjaGFyIG5yOwkJCQkvKiBIb3N0IG51bWJlciAqLwotCXNpemVfdCBtc2l6ZTsKLQlzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzICp2YnFfb3BzOwogCXZvaWQgKnByaXY7CiAJY2hhciAqZHJ2X25hbWU7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdF9vcHMgKm9wczsKQEAgLTY5LDEzICs2NiwxMyBAQAogCWludCAoKnNldF9mbXRfY2FwKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIsCiAJCQkgICBzdHJ1Y3QgdjRsMl9yZWN0ICopOwogCWludCAoKnRyeV9mbXRfY2FwKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOworCXZvaWQgKCppbml0X3ZpZGVvYnVmKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKiwKKwkJCSAgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKIAlpbnQgKCpyZXFidWZzKShzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICosIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICopOwogCWludCAoKnF1ZXJ5Y2FwKShzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICosIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKik7CiAJaW50ICgqdHJ5X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIF9fdTMyKTsKIAlpbnQgKCpzZXRfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIpOwogCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7Ci0Jc3BpbmxvY2tfdCogKCpzcGlubG9ja19hbGxvYykoc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqKTsKLQl2b2lkICgqc3BpbmxvY2tfZnJlZSkoc3BpbmxvY2tfdCAqKTsKIH07CiAKIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgewpAQCAtMTU2LDExICsxNTMsMTIgQEAKICNkZWZpbmUgU09DQU1fREFUQVdJRFRIXzgJCSgxIDw8IDYpCiAjZGVmaW5lIFNPQ0FNX0RBVEFXSURUSF85CQkoMSA8PCA3KQogI2RlZmluZSBTT0NBTV9EQVRBV0lEVEhfMTAJCSgxIDw8IDgpCi0jZGVmaW5lIFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORwkoMSA8PCA5KQotI2RlZmluZSBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HCSgxIDw8IDEwKQorI2RlZmluZSBTT0NBTV9EQVRBV0lEVEhfMTYJCSgxIDw8IDkpCisjZGVmaW5lIFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORwkoMSA8PCAxMCkKKyNkZWZpbmUgU09DQU1fUENMS19TQU1QTEVfRkFMTElORwkoMSA8PCAxMSkKIAogI2RlZmluZSBTT0NBTV9EQVRBV0lEVEhfTUFTSyAoU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9EQVRBV0lEVEhfOSB8IFwKLQkJCSAgICAgIFNPQ0FNX0RBVEFXSURUSF8xMCkKKwkJCSAgICAgIFNPQ0FNX0RBVEFXSURUSF8xMCB8IFNPQ0FNX0RBVEFXSURUSF8xNikKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoCiAJCQl1bnNpZ25lZCBsb25nIGNhbWVyYV9mbGFncywgdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MWYxODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9fU09DX0NBTUVSQV9IX18KKyNkZWZpbmUgX19TT0NfQ0FNRVJBX0hfXworCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKK3N0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8geworCWludCBpZmFjZTsKKwljaGFyICpmb3JtYXRfbmFtZTsKKwl1bnNpZ25lZCBsb25nIGZvcm1hdF9kZXB0aDsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZvcm1hdDsKKwl1bnNpZ25lZCBsb25nIGJ1c19wYXJhbTsKKwlpbnQgKCpzZXRfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbywgaW50IGVuYWJsZSk7Cit9OworCisjZW5kaWYgLyogX19TT0NfQ0FNRVJBX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCmluZGV4IDg1OWY3YTYuLjMzZjM3OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKQEAgLTU5LDggKzU5LDggQEAKIGludCB2NGwyX3ByaW9fY2hlY2soc3RydWN0IHY0bDJfcHJpb19zdGF0ZSAqZ2xvYmFsLCBlbnVtIHY0bDJfcHJpb3JpdHkgKmxvY2FsKTsKIAogLyogbmFtZXMgZm9yIGZhbmN5IGRlYnVnIG91dHB1dCAqLwotZXh0ZXJuIGNoYXIgKnY0bDJfZmllbGRfbmFtZXNbXTsKLWV4dGVybiBjaGFyICp2NGwyX3R5cGVfbmFtZXNbXTsKK2V4dGVybiBjb25zdCBjaGFyICp2NGwyX2ZpZWxkX25hbWVzW107CitleHRlcm4gY29uc3QgY2hhciAqdjRsMl90eXBlX25hbWVzW107CiAKIC8qICBDb21wYXRpYmlsaXR5IGxheWVyIGludGVyZmFjZSAgLS0gIHY0bDEtY29tcGF0IG1vZHVsZSAqLwogdHlwZWRlZiBpbnQgKCp2NGwyX2tpb2N0bCkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCkBAIC05Niw2ICs5Niw4IEBACiAJaW50IHR5cGU7ICAgICAgIC8qIHY0bDEgKi8KIAlpbnQgdHlwZTI7ICAgICAgLyogdjRsMiAqLwogCWludCBtaW5vcjsKKwkvKiBhdHRyaWJ1dGUgdG8gZGlmZXJlbnRpYXRlIG11bHRpcGxlIGluZGV4cyBvbiBvbmUgcGh5c2ljYWwgZGV2aWNlICovCisJaW50IGluZGV4OwogCiAJaW50IGRlYnVnOwkvKiBBY3RpdmF0ZXMgZGVidWcgbGV2ZWwqLwogCkBAIC0xMTgsNzQgKzEyMCw3NiBAQAogCQkJCSAgICBlbnVtIHY0bDJfcHJpb3JpdHkgcCk7CiAKIAkvKiBWSURJT0NfRU5VTV9GTVQgaGFuZGxlcnMgKi8KLQlpbnQgKCp2aWRpb2NfZW51bV9mbXRfY2FwKSAgICAgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX2VudW1fZm10X3ZpZF9jYXApICAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZik7Ci0JaW50ICgqdmlkaW9jX2VudW1fZm10X292ZXJsYXkpICAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCWludCAoKnZpZGlvY19lbnVtX2ZtdF92aWRfb3ZlcmxheSkgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpOwotCWludCAoKnZpZGlvY19lbnVtX2ZtdF92YmkpICAgICAgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlpbnQgKCp2aWRpb2NfZW51bV9mbXRfdmlkX291dCkgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKTsKLQlpbnQgKCp2aWRpb2NfZW51bV9mbXRfdmJpX2NhcHR1cmUpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisjaWYgMQorCS8qIGRlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZCBpbiAyLjYuMjggKi8KKwlpbnQgKCp2aWRpb2NfZW51bV9mbXRfdmJpX2NhcCkgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKTsKLQlpbnQgKCp2aWRpb2NfZW51bV9mbXRfdmlkZW9fb3V0cHV0KShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCi0JCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKTsKLQlpbnQgKCp2aWRpb2NfZW51bV9mbXRfb3V0cHV0X292ZXJsYXkpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCi0JCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKTsKLQlpbnQgKCp2aWRpb2NfZW51bV9mbXRfdmJpX291dHB1dCkgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCi0JCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKTsKKyNlbmRpZgogCWludCAoKnZpZGlvY19lbnVtX2ZtdF90eXBlX3ByaXZhdGUpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpOwogCiAJLyogVklESU9DX0dfRk1UIGhhbmRsZXJzICovCi0JaW50ICgqdmlkaW9jX2dfZm10X2NhcCkgICAgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX2dfZm10X3ZpZF9jYXApICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7Ci0JaW50ICgqdmlkaW9jX2dfZm10X292ZXJsYXkpICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5KShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7Ci0JaW50ICgqdmlkaW9jX2dfZm10X3ZiaSkgICAgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX2dfZm10X3ZpZF9vdXQpICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7Ci0JaW50ICgqdmlkaW9jX2dfZm10X3ZiaV9vdXRwdXQpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX2dfZm10X3ZpZF9vdXRfb3ZlcmxheSkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwotCWludCAoKnZpZGlvY19nX2ZtdF92YmlfY2FwdHVyZSkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCWludCAoKnZpZGlvY19nX2ZtdF92YmlfY2FwKSAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwotCWludCAoKnZpZGlvY19nX2ZtdF92aWRlb19vdXRwdXQpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlpbnQgKCp2aWRpb2NfZ19mbXRfdmJpX291dCkgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKLQlpbnQgKCp2aWRpb2NfZ19mbXRfb3V0cHV0X292ZXJsYXkpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX2dfZm10X3NsaWNlZF92YmlfY2FwKShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7CisJaW50ICgqdmlkaW9jX2dfZm10X3NsaWNlZF92Ymlfb3V0KShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7CiAJaW50ICgqdmlkaW9jX2dfZm10X3R5cGVfcHJpdmF0ZSkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwogCiAJLyogVklESU9DX1NfRk1UIGhhbmRsZXJzICovCi0JaW50ICgqdmlkaW9jX3NfZm10X2NhcCkgICAgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX3NfZm10X3ZpZF9jYXApICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7Ci0KLQlpbnQgKCp2aWRpb2Nfc19mbXRfb3ZlcmxheSkgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlpbnQgKCp2aWRpb2Nfc19mbXRfdmlkX292ZXJsYXkpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKLQlpbnQgKCp2aWRpb2Nfc19mbXRfdmJpKSAgICAgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlpbnQgKCp2aWRpb2Nfc19mbXRfdmlkX291dCkgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKLQlpbnQgKCp2aWRpb2Nfc19mbXRfdmJpX291dHB1dCkgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlpbnQgKCp2aWRpb2Nfc19mbXRfdmlkX291dF9vdmVybGF5KShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7Ci0JaW50ICgqdmlkaW9jX3NfZm10X3ZiaV9jYXB0dXJlKShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX3NfZm10X3ZiaV9jYXApICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7Ci0JaW50ICgqdmlkaW9jX3NfZm10X3ZpZGVvX291dHB1dCkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCWludCAoKnZpZGlvY19zX2ZtdF92Ymlfb3V0KSAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwotCWludCAoKnZpZGlvY19zX2ZtdF9vdXRwdXRfb3ZlcmxheSkgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlpbnQgKCp2aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9jYXApKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKKwlpbnQgKCp2aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9vdXQpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKIAlpbnQgKCp2aWRpb2Nfc19mbXRfdHlwZV9wcml2YXRlKShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7CiAKIAkvKiBWSURJT0NfVFJZX0ZNVCBoYW5kbGVycyAqLwotCWludCAoKnZpZGlvY190cnlfZm10X2NhcCkgICAgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCkgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwotCWludCAoKnZpZGlvY190cnlfZm10X292ZXJsYXkpICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwotCWludCAoKnZpZGlvY190cnlfZm10X3ZiaSkgICAgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX3RyeV9mbXRfdmlkX291dCkgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwotCWludCAoKnZpZGlvY190cnlfZm10X3ZiaV9vdXRwdXQpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJaW50ICgqdmlkaW9jX3RyeV9mbXRfdmlkX291dF9vdmVybGF5KShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKLQlpbnQgKCp2aWRpb2NfdHJ5X2ZtdF92YmlfY2FwdHVyZSkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCWludCAoKnZpZGlvY190cnlfZm10X3ZiaV9jYXApICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKLQlpbnQgKCp2aWRpb2NfdHJ5X2ZtdF92aWRlb19vdXRwdXQpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlpbnQgKCp2aWRpb2NfdHJ5X2ZtdF92Ymlfb3V0KSAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7Ci0JaW50ICgqdmlkaW9jX3RyeV9mbXRfb3V0cHV0X292ZXJsYXkpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlpbnQgKCp2aWRpb2NfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcCkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7CisJaW50ICgqdmlkaW9jX3RyeV9mbXRfc2xpY2VkX3ZiaV9vdXQpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwogCWludCAoKnZpZGlvY190cnlfZm10X3R5cGVfcHJpdmF0ZSkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7CkBAIC0yMTIsOCArMjE2LDkgQEAKIAlpbnQgKCp2aWRpb2Nfc3RyZWFtb2ZmKShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIGVudW0gdjRsMl9idWZfdHlwZSBpKTsKIAogCQkvKiBTdGFuZGFyZCBoYW5kbGluZwotCQkJR19TVEQgYW5kIEVOVU1TVEQgYXJlIGhhbmRsZWQgYnkgdmlkZW9kZXYuYworCQkJRU5VTVNURCBpcyBoYW5kbGVkIGJ5IHZpZGVvZGV2LmMKIAkJICovCisJaW50ICgqdmlkaW9jX2dfc3RkKSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqbm9ybSk7CiAJaW50ICgqdmlkaW9jX3Nfc3RkKSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqbm9ybSk7CiAJaW50ICgqdmlkaW9jX3F1ZXJ5c3RkKSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqYSk7CiAKQEAgLTIyNCw3ICsyMjksNyBAQAogCWludCAoKnZpZGlvY19zX2lucHV0KSAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpKTsKIAogCQkvKiBPdXRwdXQgaGFuZGxpbmcgKi8KLQlpbnQgKCp2aWRpb2NfZW51bW91dHB1dCkgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlpbnQgKCp2aWRpb2NfZW51bV9vdXRwdXQpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJICBzdHJ1Y3QgdjRsMl9vdXRwdXQgKmEpOwogCWludCAoKnZpZGlvY19nX291dHB1dCkgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmkpOwogCWludCAoKnZpZGlvY19zX291dHB1dCkgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaSk7CkBAIC0zMDYsNiArMzExLDggQEAKIAkvKiBMb2cgc3RhdHVzIGlvY3RsICovCiAJaW50ICgqdmlkaW9jX2xvZ19zdGF0dXMpICAgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgpOwogCisJaW50ICgqdmlkaW9jX3NfaHdfZnJlcV9zZWVrKSAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayAqYSk7CiAKIAkvKiBEZWJ1Z2dpbmcgaW9jdGxzICovCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwpAQCAtMzQyLDYgKzM0OSw4IEBACiAKIC8qIFZlcnNpb24gMiBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IHR5cGUsIGludCBucik7CitpbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IHR5cGUsIGludCBuciwKKwkJCQkJaW50IGluZGV4KTsKIHZvaWQgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqKTsKIGV4dGVybiBpbnQgdmlkZW9faW9jdGwyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CkBAIC0zNjYsNyArMzc1LDcgQEAKIHsKIAlpbnQgcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZmQtPmNsYXNzX2RldiwgYXR0cik7CiAJaWYgKHJldCA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGVycm9yOiAlZFxuIiwgX19GVU5DVElPTl9fLCByZXQpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBlcnJvcjogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmgKaW5kZXggODc4NTYyMi4uOTc1ZmZiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmgKQEAgLTY4LDcgKzY4LDYgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWtmcmVlKGNsaWVudCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDkzODY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGhlbHBlciBmdW5jdGlvbnMgZm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBjYXB0dXJlIGJ1ZmZlcnMKKyAqCisgKiBUaGUgZnVuY3Rpb25zIHN1cHBvcnQgaGFyZHdhcmUgbGFja2luZyBzY2F0dGVyIGdhdGhlciBzdXBwb3J0CisgKiAoaS5lLiB0aGUgYnVmZmVycyBtdXN0IGJlIGxpbmVhciBpbiBwaHlzaWNhbCBtZW1vcnkpCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKi8KKyNpZm5kZWYgX1ZJREVPQlVGX0RNQV9DT05USUdfSAorI2RlZmluZSBfVklERU9CVUZfRE1BX0NPTlRJR19ICisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWNvcmUuaD4KKwordm9pZCB2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzICpvcHMsCisJCQkJICAgIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3BpbmxvY2tfdCAqaXJxbG9jaywKKwkJCQkgICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCisJCQkJICAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCwKKwkJCQkgICAgdW5zaWduZWQgaW50IG1zaXplLAorCQkJCSAgICB2b2lkICpwcml2KTsKKworZG1hX2FkZHJfdCB2aWRlb2J1Zl90b19kbWFfY29udGlnKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7Cit2b2lkIHZpZGVvYnVmX2RtYV9jb250aWdfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOworCisjZW5kaWYgLyogX1ZJREVPQlVGX0RNQV9DT05USUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kbWEtc2cuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtZG1hLXNnLmgKaW5kZXggYmU4ZGEyNi4uOTBlZGQyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kbWEtc2cuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGhlbHBlciBmdW5jdGlvbnMgZm9yIFNHIERNQSB2aWRlbzRsaW51eCBjYXB0dXJlIGJ1ZmZlcnMKICAqCi0gKiBUaGUgZnVuY3Rpb25zIGV4cGVjdCB0aGUgaGFyZHdhcmUgYmVpbmcgYWJsZSB0byBzY2F0dGVyIGdhdHRlcgorICogVGhlIGZ1bmN0aW9ucyBleHBlY3QgdGhlIGhhcmR3YXJlIGJlaW5nIGFibGUgdG8gc2NhdHRlciBnYXRoZXIKICAqIChpLmUuIHRoZSBidWZmZXJzIGFyZSBub3QgbGluZWFyIGluIHBoeXNpY2FsIG1lbW9yeSwgYnV0IGZyYWdtZW50ZWQKICAqIGludG8gUEFHRV9TSVpFIGNodW5rcykuICBUaGV5IGFsc28gYXNzdW1lIHRoZSBkcml2ZXIgZG9lcyBub3QgbmVlZAogICogdG8gdG91Y2ggdGhlIHZpZGVvIGRhdGEuCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oCmluZGV4IGFlZDM5NDYuLmU4NzIyMmM2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi12bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi12bWFsbG9jLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogaGVscGVyIGZ1bmN0aW9ucyBmb3Igdm1hbGxvYyBjYXB0dXJlIGJ1ZmZlcnMKICAqCi0gKiBUaGUgZnVuY3Rpb25zIGV4cGVjdCB0aGUgaGFyZHdhcmUgYmVpbmcgYWJsZSB0byBzY2F0dGVyIGdhdHRlcgorICogVGhlIGZ1bmN0aW9ucyBleHBlY3QgdGhlIGhhcmR3YXJlIGJlaW5nIGFibGUgdG8gc2NhdHRlciBnYXRoZXIKICAqIChpLmUuIHRoZSBidWZmZXJzIGFyZSBub3QgbGluZWFyIGluIHBoeXNpY2FsIG1lbW9yeSwgYnV0IGZyYWdtZW50ZWQKICAqIGludG8gUEFHRV9TSVpFIGNodW5rcykuICBUaGV5IGFsc28gYXNzdW1lIHRoZSBkcml2ZXIgZG9lcyBub3QgbmVlZAogICogdG8gdG91Y2ggdGhlIHZpZGVvIGRhdGEuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCBiYmQzZDU4Li4wNmIyODE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTEyMSw3ICsxMjEsOCBAQAogICovCiBleHRlcm4gaW50CQkJaXB2Nl9hZGRyX2xhYmVsX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZAkJCWlwdjZfYWRkcl9sYWJlbF9ydG5sX3JlZ2lzdGVyKHZvaWQpOwotZXh0ZXJuIHUzMgkJCWlwdjZfYWRkcl9sYWJlbChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCitleHRlcm4gdTMyCQkJaXB2Nl9hZGRyX2xhYmVsKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCQkJCWludCB0eXBlLCBpbnQgaWZpbmRleCk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKaW5kZXggNzUwNjQ4ZC4uNmY4NDE4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaApAQCAtMTIxLDYgKzEyMSw3IEBACiB2b2lkIGJ0X3NvY2tfdW5saW5rKHN0cnVjdCBidF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzKTsKIGludCAgYnRfc29ja19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOwogdWludCBidF9zb2NrX3BvbGwoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3YWl0KTsKK2ludCAgYnRfc29ja19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBpbnQgIGJ0X3NvY2tfd2FpdF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1lbyk7CiAKIHZvaWQgYnRfYWNjZXB0X2VucXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCwgc3RydWN0IHNvY2sgKnNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAppbmRleCBhOGE5ZWI2Li4zY2MyOTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCkBAIC03Miw4ICs3Miw2IEBACiAJSENJX0lOUVVJUlksCiAKIAlIQ0lfUkFXLAotCi0JSENJX1NFQ01HUgogfTsKIAogLyogSENJIGlvY3RsIGRlZmluZXMgKi8KQEAgLTg2LDYgKzg0LDcgQEAKICNkZWZpbmUgSENJR0VUREVWSU5GTwlfSU9SKCdIJywgMjExLCBpbnQpCiAjZGVmaW5lIEhDSUdFVENPTk5MSVNUCV9JT1IoJ0gnLCAyMTIsIGludCkKICNkZWZpbmUgSENJR0VUQ09OTklORk8JX0lPUignSCcsIDIxMywgaW50KQorI2RlZmluZSBIQ0lHRVRBVVRISU5GTwlfSU9SKCdIJywgMjE1LCBpbnQpCiAKICNkZWZpbmUgSENJU0VUUkFXCV9JT1coJ0gnLCAyMjAsIGludCkKICNkZWZpbmUgSENJU0VUU0NBTglfSU9XKCdIJywgMjIxLCBpbnQpCkBAIC05Nyw4ICs5Niw2IEBACiAjZGVmaW5lIEhDSVNFVEFDTE1UVQlfSU9XKCdIJywgMjI3LCBpbnQpCiAjZGVmaW5lIEhDSVNFVFNDT01UVQlfSU9XKCdIJywgMjI4LCBpbnQpCiAKLSNkZWZpbmUgSENJU0VUU0VDTUdSCV9JT1coJ0gnLCAyMzAsIGludCkKLQogI2RlZmluZSBIQ0lJTlFVSVJZCV9JT1IoJ0gnLCAyNDAsIGludCkKIAogLyogSENJIHRpbWVvdXRzICovCkBAIC0xMzcsNiArMTM0LDggQEAKICNkZWZpbmUgRVNDT19FVjQJMHgwMDEwCiAjZGVmaW5lIEVTQ09fRVY1CTB4MDAyMAogCisjZGVmaW5lIFNDT19FU0NPX01BU0sgIChFU0NPX0hWMSB8IEVTQ09fSFYyIHwgRVNDT19IVjMpCisKIC8qIEFDTCBmbGFncyAqLwogI2RlZmluZSBBQ0xfQ09OVAkJMHgwMQogI2RlZmluZSBBQ0xfU1RBUlQJCTB4MDIKQEAgLTE3OCw2ICsxNzcsOCBAQAogCiAjZGVmaW5lIExNUF9TTklGRl9TVUJSCTB4MDIKIAorI2RlZmluZSBMTVBfU0lNUExFX1BBSVIJMHgwOAorCiAvKiBDb25uZWN0aW9uIG1vZGVzICovCiAjZGVmaW5lIEhDSV9DTV9BQ1RJVkUJMHgwMDAwCiAjZGVmaW5lIEhDSV9DTV9IT0xECTB4MDAwMQpAQCAtMTk5LDYgKzIwMCwxNCBAQAogI2RlZmluZSBIQ0lfTE1fUkVMSUFCTEUJMHgwMDEwCiAjZGVmaW5lIEhDSV9MTV9TRUNVUkUJMHgwMDIwCiAKKy8qIEF1dGhlbnRpY2F0aW9uIHR5cGVzICovCisjZGVmaW5lIEhDSV9BVF9OT19CT05ESU5HCQkweDAwCisjZGVmaW5lIEhDSV9BVF9OT19CT05ESU5HX01JVE0JCTB4MDEKKyNkZWZpbmUgSENJX0FUX0RFRElDQVRFRF9CT05ESU5HCTB4MDIKKyNkZWZpbmUgSENJX0FUX0RFRElDQVRFRF9CT05ESU5HX01JVE0JMHgwMworI2RlZmluZSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HCQkweDA0CisjZGVmaW5lIEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTQkweDA1CisKIC8qIC0tLS0tICBIQ0kgQ29tbWFuZHMgLS0tLSAqLwogI2RlZmluZSBIQ0lfT1BfSU5RVUlSWQkJCTB4MDQwMQogc3RydWN0IGhjaV9jcF9pbnF1aXJ5IHsKQEAgLTQwMiw2ICs0MTEsMTcgQEAKIAlfX2xlMTYgICBoYW5kbGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBIQ0lfT1BfUkVBRF9ERUZfTElOS19QT0xJQ1kJMHgwODBlCitzdHJ1Y3QgaGNpX3JwX3JlYWRfZGVmX2xpbmtfcG9saWN5IHsKKwlfX3U4ICAgICBzdGF0dXM7CisJX19sZTE2ICAgcG9saWN5OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSENJX09QX1dSSVRFX0RFRl9MSU5LX1BPTElDWQkweDA4MGYKK3N0cnVjdCBoY2lfY3Bfd3JpdGVfZGVmX2xpbmtfcG9saWN5IHsKKwlfX2xlMTYgICBwb2xpY3k7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogI2RlZmluZSBIQ0lfT1BfU05JRkZfU1VCUkFURQkJMHgwODExCiBzdHJ1Y3QgaGNpX2NwX3NuaWZmX3N1YnJhdGUgewogCV9fbGUxNiAgIGhhbmRsZTsKQEAgLTUwMSw2ICs1MjEsMTcgQEAKIAlfX2xlMTYgICBzY29fbWF4X3BrdDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIEhDSV9PUF9SRUFEX1NTUF9NT0RFCQkweDBjNTUKK3N0cnVjdCBoY2lfcnBfcmVhZF9zc3BfbW9kZSB7CisJX191OCAgICAgc3RhdHVzOworCV9fdTggICAgIG1vZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBIQ0lfT1BfV1JJVEVfU1NQX01PREUJCTB4MGM1Ngorc3RydWN0IGhjaV9jcF93cml0ZV9zc3BfbW9kZSB7CisJX191OCAgICAgbW9kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAjZGVmaW5lIEhDSV9PUF9SRUFEX0xPQ0FMX1ZFUlNJT04JMHgxMDAxCiBzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfdmVyc2lvbiB7CiAJX191OCAgICAgc3RhdHVzOwpAQCAtNjk2LDYgKzcyNywxMyBAQAogCV9fbGUxNiAgIGNsb2NrX29mZnNldDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIEhDSV9FVl9QS1RfVFlQRV9DSEFOR0UJCTB4MWQKK3N0cnVjdCBoY2lfZXZfcGt0X3R5cGVfY2hhbmdlIHsKKwlfX3U4ICAgICBzdGF0dXM7CisJX19sZTE2ICAgaGFuZGxlOworCV9fbGUxNiAgIHBrdF90eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKICNkZWZpbmUgSENJX0VWX1BTQ0FOX1JFUF9NT0RFCQkweDIwCiBzdHJ1Y3QgaGNpX2V2X3BzY2FuX3JlcF9tb2RlIHsKIAliZGFkZHJfdCBiZGFkZHI7CkBAIC03NzQsNiArODEyLDIzIEBACiAJX191OCAgICAgZGF0YVsyNDBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgSENJX0VWX0lPX0NBUEFfUkVRVUVTVAkJMHgzMQorc3RydWN0IGhjaV9ldl9pb19jYXBhX3JlcXVlc3QgeworCWJkYWRkcl90IGJkYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEhDSV9FVl9TSU1QTEVfUEFJUl9DT01QTEVURQkweDM2CitzdHJ1Y3QgaGNpX2V2X3NpbXBsZV9wYWlyX2NvbXBsZXRlIHsKKwlfX3U4ICAgICBzdGF0dXM7CisJYmRhZGRyX3QgYmRhZGRyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSENJX0VWX1JFTU9URV9IT1NUX0ZFQVRVUkVTCTB4M2QKK3N0cnVjdCBoY2lfZXZfcmVtb3RlX2hvc3RfZmVhdHVyZXMgeworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4ICAgICBmZWF0dXJlc1s4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKiBJbnRlcm5hbCBldmVudHMgZ2VuZXJhdGVkIGJ5IEJsdWV0b290aCBzdGFjayAqLwogI2RlZmluZSBIQ0lfRVZfU1RBQ0tfSU5URVJOQUwJMHhmZAogc3RydWN0IGhjaV9ldl9zdGFja19pbnRlcm5hbCB7CkBAIC05NTEsNiArMTAwNiwxMSBAQAogCXN0cnVjdCAgIGhjaV9jb25uX2luZm8gY29ubl9pbmZvWzBdOwogfTsKIAorc3RydWN0IGhjaV9hdXRoX2luZm9fcmVxIHsKKwliZGFkZHJfdCBiZGFkZHI7CisJX191OCAgICAgdHlwZTsKK307CisKIHN0cnVjdCBoY2lfaW5xdWlyeV9yZXEgewogCV9fdTE2IGRldl9pZDsKIAlfX3UxNiBmbGFnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKaW5kZXggZWExM2JhYS4uY2JmNzUxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAlfX3U4CQlkZXZfY2xhc3NbM107CiAJX19sZTE2CQljbG9ja19vZmZzZXQ7CiAJX19zOAkJcnNzaTsKKwlfX3U4CQlzc3BfbW9kZTsKIH07CiAKIHN0cnVjdCBpbnF1aXJ5X2VudHJ5IHsKQEAgLTc1LDYgKzc2LDcgQEAKIAlfX3U4CQlkZXZfY2xhc3NbM107CiAJX191OAkJZmVhdHVyZXNbOF07CiAJX191OAkJY29tbWFuZHNbNjRdOworCV9fdTgJCXNzcF9tb2RlOwogCV9fdTgJCWhjaV92ZXI7CiAJX191MTYJCWhjaV9yZXY7CiAJX191MTYJCW1hbnVmYWN0dXJlcjsKQEAgLTE2MSw5ICsxNjMsMTIgQEAKIAlfX3U4CQkgYXR0ZW1wdDsKIAlfX3U4CQkgZGV2X2NsYXNzWzNdOwogCV9fdTggICAgICAgICAgICAgZmVhdHVyZXNbOF07CisJX191OCAgICAgICAgICAgICBzc3BfbW9kZTsKIAlfX3UxNiAgICAgICAgICAgIGludGVydmFsOworCV9fdTE2ICAgICAgICAgICAgcGt0X3R5cGU7CiAJX191MTYgICAgICAgICAgICBsaW5rX3BvbGljeTsKIAlfX3UzMgkJIGxpbmtfbW9kZTsKKwlfX3U4ICAgICAgICAgICAgIGF1dGhfdHlwZTsKIAlfX3U4ICAgICAgICAgICAgIHBvd2VyX3NhdmU7CiAJdW5zaWduZWQgbG9uZwkgcGVuZDsKIApAQCAtMzQ0LDcgKzM0OSw3IEBACiAJCQlpZiAoY29ubi0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEKSB7CiAJCQkJdGltZW8gPSBtc2Vjc190b19qaWZmaWVzKEhDSV9ESVNDT05OX1RJTUVPVVQpOwogCQkJCWlmICghY29ubi0+b3V0KQotCQkJCQl0aW1lbyAqPSAyOworCQkJCQl0aW1lbyAqPSA1OwogCQkJfSBlbHNlCiAJCQkJdGltZW8gPSBtc2Vjc190b19qaWZmaWVzKDEwKTsKIAkJfSBlbHNlCkBAIC00MTgsNiArNDIzLDcgQEAKIGludCBoY2lfZ2V0X2Rldl9pbmZvKHZvaWQgX191c2VyICphcmcpOwogaW50IGhjaV9nZXRfY29ubl9saXN0KHZvaWQgX191c2VyICphcmcpOwogaW50IGhjaV9nZXRfY29ubl9pbmZvKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkIF9fdXNlciAqYXJnKTsKK2ludCBoY2lfZ2V0X2F1dGhfaW5mbyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCBfX3VzZXIgKmFyZyk7CiBpbnQgaGNpX2lucXVpcnkodm9pZCBfX3VzZXIgKmFyZyk7CiAKIHZvaWQgaGNpX2V2ZW50X3BhY2tldChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC00NTksNiArNDY1LDcgQEAKICNkZWZpbmUgbG1wX3NuaWZmX2NhcGFibGUoZGV2KSAgICAgKChkZXYpLT5mZWF0dXJlc1swXSAmIExNUF9TTklGRikKICNkZWZpbmUgbG1wX3NuaWZmc3Vicl9jYXBhYmxlKGRldikgKChkZXYpLT5mZWF0dXJlc1s1XSAmIExNUF9TTklGRl9TVUJSKQogI2RlZmluZSBsbXBfZXNjb19jYXBhYmxlKGRldikgICAgICAoKGRldiktPmZlYXR1cmVzWzNdICYgTE1QX0VTQ08pCisjZGVmaW5lIGxtcF9zc3BfY2FwYWJsZShkZXYpICAgICAgICgoZGV2KS0+ZmVhdHVyZXNbNl0gJiBMTVBfU0lNUExFX1BBSVIpCiAKIC8qIC0tLS0tIEhDSSBwcm90b2NvbHMgLS0tLS0gKi8KIHN0cnVjdCBoY2lfcHJvdG8gewpAQCAtNDc0LDcgKzQ4MSw3IEBACiAJaW50ICgqcmVjdl9hY2xkYXRhKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncyk7CiAJaW50ICgqcmVjdl9zY29kYXRhKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQgKCphdXRoX2NmbSkJCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKTsKLQlpbnQgKCplbmNyeXB0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOworCWludCAoKmVuY3J5cHRfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGhjaV9wcm90b19jb25uZWN0X2luZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKQpAQCAtNTMyLDE3ICs1MzksMTcgQEAKIAkJaHAtPmF1dGhfY2ZtKGNvbm4sIHN0YXR1cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KQogewogCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOwogCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKIAlpZiAoaHAgJiYgaHAtPmVuY3J5cHRfY2ZtKQotCQlocC0+ZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzKTsKKwkJaHAtPmVuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKIAlpZiAoaHAgJiYgaHAtPmVuY3J5cHRfY2ZtKQotCQlocC0+ZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzKTsKKwkJaHAtPmVuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiB9CiAKIGludCBoY2lfcmVnaXN0ZXJfcHJvdG8oc3RydWN0IGhjaV9wcm90byAqaHByb3RvKTsKQEAgLTU3OSw3ICs1ODYsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CiAKLQloY2lfcHJvdG9fZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzKTsKKwloY2lfcHJvdG9fZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCXJlYWRfbG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwLCAmaGNpX2NiX2xpc3QpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAppbmRleCA5OGVjN2EzLi40ZGM4ZDkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCkBAIC0xODAsNyArMTgwLDkgQEAKIAl1OCAgICAgICAgICAgIGFkZHI7CiAJdTggICAgICAgICAgICBwcmlvcml0eTsKIAl1OCAgICAgICAgICAgIHYyNF9zaWc7CisJdTggICAgICAgICAgICByZW1vdGVfdjI0X3NpZzsKIAl1OCAgICAgICAgICAgIG1zY2V4OworCXU4ICAgICAgICAgICAgb3V0OwogCiAJdTMyICAgICAgICAgICBsaW5rX21vZGU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvbXBhdC5oIGIvaW5jbHVkZS9uZXQvY29tcGF0LmgKaW5kZXggMTY0Y2I2OC4uNWJiZjhiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9uZXQvY29tcGF0LmgKQEAgLTMyLDcgKzMyLDcgQEAKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19DT01QQVQpICovCiAKIGV4dGVybiBpbnQgZ2V0X2NvbXBhdF9tc2doZHIoc3RydWN0IG1zZ2hkciAqLCBzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKik7Ci1leHRlcm4gaW50IHZlcmlmeV9jb21wYXRfaW92ZWMoc3RydWN0IG1zZ2hkciAqLCBzdHJ1Y3QgaW92ZWMgKiwgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCB2ZXJpZnlfY29tcGF0X2lvdmVjKHN0cnVjdCBtc2doZHIgKiwgc3RydWN0IGlvdmVjICosIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpOwogZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NlbmRtc2coaW50LHN0cnVjdCBjb21wYXRfbXNnaGRyIF9fdXNlciAqLHVuc2lnbmVkKTsKIGV4dGVybiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19yZWN2bXNnKGludCxzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKix1bnNpZ25lZCk7CiBleHRlcm4gYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfZ2V0c29ja29wdChpbnQsIGludCwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHN0LmggYi9pbmNsdWRlL25ldC9kc3QuaAppbmRleCAwMDI1MDBlLi5jNWMzMThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc3QuaAorKysgYi9pbmNsdWRlL25ldC9kc3QuaApAQCAtMTI4LDYgKzEyOCwxOCBAQAogCXJldHVybiBtdHU7CiB9CiAKKy8qIFJUVCBtZXRyaWNzIGFyZSBzdG9yZWQgaW4gbWlsbGlzZWNvbmRzIGZvciB1c2VyIEFCSSwgYnV0IHVzZWQgYXMgamlmZmllcyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRzdF9tZXRyaWNfcnR0KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgaW50IG1ldHJpYykKK3sKKwlyZXR1cm4gbXNlY3NfdG9famlmZmllcyhkc3RfbWV0cmljKGRzdCwgbWV0cmljKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZHN0X21ldHJpY19ydHQoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBpbnQgbWV0cmljLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcnR0KQoreworCWRzdC0+bWV0cmljc1ttZXRyaWMtMV0gPSBqaWZmaWVzX3RvX21zZWNzKHJ0dCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTMyCiBkc3RfYWxsZnJhZyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9maWJfcnVsZXMuaCBiL2luY2x1ZGUvbmV0L2ZpYl9ydWxlcy5oCmluZGV4IGE1YzZjY2MuLmMyYmI1Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2ZpYl9ydWxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2ZpYl9ydWxlcy5oCkBAIC02Miw3ICs2Miw3IEBACiAKIAkvKiBDYWxsZWQgYWZ0ZXIgbW9kaWZpY2F0aW9ucyB0byB0aGUgcnVsZXMgc2V0LCBtdXN0IGZsdXNoCiAJICogdGhlIHJvdXRlIGNhY2hlIGlmIG9uZSBleGlzdHMuICovCi0Jdm9pZAkJCSgqZmx1c2hfY2FjaGUpKHZvaWQpOworCXZvaWQJCQkoKmZsdXNoX2NhY2hlKShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKTsKIAogCWludAkJCW5sZ3JvdXA7CiAJY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kJKnBvbGljeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dhcnAuaCBiL2luY2x1ZGUvbmV0L2dhcnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjVmMTcyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvZ2FycC5oCkBAIC0wLDAgKzEsMTI4IEBACisjaWZuZGVmIF9ORVRfR0FSUF9ICisjZGVmaW5lIF9ORVRfR0FSUF9ICisKKyNpbmNsdWRlIDxuZXQvc3RwLmg+CisKKyNkZWZpbmUgR0FSUF9QUk9UT0NPTF9JRAkweDEKKyNkZWZpbmUgR0FSUF9FTkRfTUFSSwkJMHgwCisKK3N0cnVjdCBnYXJwX3BkdV9oZHIgeworCV9fYmUxNglwcm90b2NvbDsKK307CisKK3N0cnVjdCBnYXJwX21zZ19oZHIgeworCXU4CWF0dHJ0eXBlOworfTsKKworZW51bSBnYXJwX2F0dHJfZXZlbnQgeworCUdBUlBfTEVBVkVfQUxMLAorCUdBUlBfSk9JTl9FTVBUWSwKKwlHQVJQX0pPSU5fSU4sCisJR0FSUF9MRUFWRV9FTVBUWSwKKwlHQVJQX0xFQVZFX0lOLAorCUdBUlBfRU1QVFksCit9OworCitzdHJ1Y3QgZ2FycF9hdHRyX2hkciB7CisJdTgJbGVuOworCXU4CWV2ZW50OworCXU4CWRhdGFbXTsKK307CisKK3N0cnVjdCBnYXJwX3NrYl9jYiB7CisJdTgJY3VyX3R5cGU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBnYXJwX3NrYl9jYiAqZ2FycF9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGdhcnBfc2tiX2NiKSA+CisJCSAgICAgRklFTERfU0laRU9GKHN0cnVjdCBza19idWZmLCBjYikpOworCXJldHVybiAoc3RydWN0IGdhcnBfc2tiX2NiICopc2tiLT5jYjsKK30KKworZW51bSBnYXJwX2FwcGxpY2FudF9zdGF0ZSB7CisJR0FSUF9BUFBMSUNBTlRfSU5WQUxJRCwKKwlHQVJQX0FQUExJQ0FOVF9WQSwKKwlHQVJQX0FQUExJQ0FOVF9BQSwKKwlHQVJQX0FQUExJQ0FOVF9RQSwKKwlHQVJQX0FQUExJQ0FOVF9MQSwKKwlHQVJQX0FQUExJQ0FOVF9WUCwKKwlHQVJQX0FQUExJQ0FOVF9BUCwKKwlHQVJQX0FQUExJQ0FOVF9RUCwKKwlHQVJQX0FQUExJQ0FOVF9WTywKKwlHQVJQX0FQUExJQ0FOVF9BTywKKwlHQVJQX0FQUExJQ0FOVF9RTywKKwlfX0dBUlBfQVBQTElDQU5UX01BWAorfTsKKyNkZWZpbmUgR0FSUF9BUFBMSUNBTlRfTUFYCShfX0dBUlBfQVBQTElDQU5UX01BWCAtIDEpCisKK2VudW0gZ2FycF9ldmVudCB7CisJR0FSUF9FVkVOVF9SRVFfSk9JTiwKKwlHQVJQX0VWRU5UX1JFUV9MRUFWRSwKKwlHQVJQX0VWRU5UX1JfSk9JTl9JTiwKKwlHQVJQX0VWRU5UX1JfSk9JTl9FTVBUWSwKKwlHQVJQX0VWRU5UX1JfRU1QVFksCisJR0FSUF9FVkVOVF9SX0xFQVZFX0lOLAorCUdBUlBfRVZFTlRfUl9MRUFWRV9FTVBUWSwKKwlHQVJQX0VWRU5UX1RSQU5TTUlUX1BEVSwKKwlfX0dBUlBfRVZFTlRfTUFYCit9OworI2RlZmluZSBHQVJQX0VWRU5UX01BWAkJKF9fR0FSUF9FVkVOVF9NQVggLSAxKQorCitlbnVtIGdhcnBfYWN0aW9uIHsKKwlHQVJQX0FDVElPTl9OT05FLAorCUdBUlBfQUNUSU9OX1NfSk9JTl9JTiwKKwlHQVJQX0FDVElPTl9TX0xFQVZFX0VNUFRZLAorfTsKKworc3RydWN0IGdhcnBfYXR0ciB7CisJc3RydWN0IHJiX25vZGUJCQlub2RlOworCWVudW0gZ2FycF9hcHBsaWNhbnRfc3RhdGUJc3RhdGU7CisJdTgJCQkJdHlwZTsKKwl1OAkJCQlkbGVuOworCXVuc2lnbmVkIGNoYXIJCQlkYXRhW107Cit9OworCitlbnVtIGdhcnBfYXBwbGljYXRpb25zIHsKKwlHQVJQX0FQUExJQ0FUSU9OX0dWUlAsCisJX19HQVJQX0FQUExJQ0FUSU9OX01BWAorfTsKKyNkZWZpbmUgR0FSUF9BUFBMSUNBVElPTl9NQVgJKF9fR0FSUF9BUFBMSUNBVElPTl9NQVggLSAxKQorCitzdHJ1Y3QgZ2FycF9hcHBsaWNhdGlvbiB7CisJZW51bSBnYXJwX2FwcGxpY2F0aW9ucwl0eXBlOworCXVuc2lnbmVkIGludAkJbWF4YXR0cjsKKwlzdHJ1Y3Qgc3RwX3Byb3RvCXByb3RvOworfTsKKworc3RydWN0IGdhcnBfYXBwbGljYW50IHsKKwlzdHJ1Y3QgZ2FycF9hcHBsaWNhdGlvbgkqYXBwOworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJc3RydWN0IHRpbWVyX2xpc3QJam9pbl90aW1lcjsKKworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlxdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnBkdTsKKwlzdHJ1Y3QgcmJfcm9vdAkJZ2lkOworfTsKKworc3RydWN0IGdhcnBfcG9ydCB7CisJc3RydWN0IGdhcnBfYXBwbGljYW50CSphcHBsaWNhbnRzW0dBUlBfQVBQTElDQVRJT05fTUFYICsgMV07Cit9OworCitleHRlcm4gaW50CWdhcnBfcmVnaXN0ZXJfYXBwbGljYXRpb24oc3RydWN0IGdhcnBfYXBwbGljYXRpb24gKmFwcCk7CitleHRlcm4gdm9pZAlnYXJwX3VucmVnaXN0ZXJfYXBwbGljYXRpb24oc3RydWN0IGdhcnBfYXBwbGljYXRpb24gKmFwcCk7CisKK2V4dGVybiBpbnQJZ2FycF9pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZ2FycF9hcHBsaWNhdGlvbiAqYXBwKTsKK2V4dGVybiB2b2lkCWdhcnBfdW5pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBnYXJwX2FwcGxpY2F0aW9uICphcHApOworCitleHRlcm4gaW50CWdhcnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3QgZ2FycF9hcHBsaWNhdGlvbiAqYXBwLAorCQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgdTggbGVuLCB1OCB0eXBlKTsKK2V4dGVybiB2b2lkCWdhcnBfcmVxdWVzdF9sZWF2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBnYXJwX2FwcGxpY2F0aW9uICphcHAsCisJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgdTggbGVuLCB1OCB0eXBlKTsKKworI2VuZGlmIC8qIF9ORVRfR0FSUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pY21wLmggYi9pbmNsdWRlL25ldC9pY21wLmgKaW5kZXggZGRkYjgzOS4uZGZhNzJkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWNtcC5oCisrKyBiL2luY2x1ZGUvbmV0L2ljbXAuaApAQCAtMjksMjcgKzI5LDIxIEBACiB9OwogCiBleHRlcm4gc3RydWN0IGljbXBfZXJyIGljbXBfZXJyX2NvbnZlcnRbXTsKLURFQ0xBUkVfU05NUF9TVEFUKHN0cnVjdCBpY21wX21pYiwgaWNtcF9zdGF0aXN0aWNzKTsKLURFQ0xBUkVfU05NUF9TVEFUKHN0cnVjdCBpY21wbXNnX21pYiwgaWNtcG1zZ19zdGF0aXN0aWNzKTsKLSNkZWZpbmUgSUNNUF9JTkNfU1RBVFMoZmllbGQpCQlTTk1QX0lOQ19TVEFUUyhpY21wX3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBJQ01QX0lOQ19TVEFUU19CSChmaWVsZCkJU05NUF9JTkNfU1RBVFNfQkgoaWNtcF9zdGF0aXN0aWNzLCBmaWVsZCkKLSNkZWZpbmUgSUNNUF9JTkNfU1RBVFNfVVNFUihmaWVsZCkgCVNOTVBfSU5DX1NUQVRTX1VTRVIoaWNtcF9zdGF0aXN0aWNzLCBmaWVsZCkKLSNkZWZpbmUgSUNNUE1TR09VVF9JTkNfU1RBVFMoZmllbGQpCVNOTVBfSU5DX1NUQVRTKGljbXBtc2dfc3RhdGlzdGljcywgZmllbGQrMjU2KQotI2RlZmluZSBJQ01QTVNHT1VUX0lOQ19TVEFUU19CSChmaWVsZCkJU05NUF9JTkNfU1RBVFNfQkgoaWNtcG1zZ19zdGF0aXN0aWNzLCBmaWVsZCsyNTYpCi0jZGVmaW5lIElDTVBNU0dPVVRfSU5DX1NUQVRTX1VTRVIoZmllbGQpIAlTTk1QX0lOQ19TVEFUU19VU0VSKGljbXBtc2dfc3RhdGlzdGljcywgZmllbGQrMjU2KQotI2RlZmluZSBJQ01QTVNHSU5fSU5DX1NUQVRTKGZpZWxkKQlTTk1QX0lOQ19TVEFUUyhpY21wbXNnX3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBJQ01QTVNHSU5fSU5DX1NUQVRTX0JIKGZpZWxkKQlTTk1QX0lOQ19TVEFUU19CSChpY21wbXNnX3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBJQ01QTVNHSU5fSU5DX1NUQVRTX1VTRVIoZmllbGQpIFNOTVBfSU5DX1NUQVRTX1VTRVIoaWNtcG1zZ19zdGF0aXN0aWNzLCBmaWVsZCkKKyNkZWZpbmUgSUNNUF9JTkNfU1RBVFMobmV0LCBmaWVsZCkJU05NUF9JTkNfU1RBVFMoKG5ldCktPm1pYi5pY21wX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBJQ01QX0lOQ19TVEFUU19CSChuZXQsIGZpZWxkKQlTTk1QX0lOQ19TVEFUU19CSCgobmV0KS0+bWliLmljbXBfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIElDTVBNU0dPVVRfSU5DX1NUQVRTKG5ldCwgZmllbGQpCVNOTVBfSU5DX1NUQVRTKChuZXQpLT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLCBmaWVsZCsyNTYpCisjZGVmaW5lIElDTVBNU0dJTl9JTkNfU1RBVFNfQkgobmV0LCBmaWVsZCkJU05NUF9JTkNfU1RBVFNfQkgoKG5ldCktPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsIGZpZWxkKQogCiBzdHJ1Y3QgZHN0X2VudHJ5Owogc3RydWN0IG5ldF9wcm90b19mYW1pbHk7CiBzdHJ1Y3Qgc2tfYnVmZjsKK3N0cnVjdCBuZXQ7CiAKIGV4dGVybiB2b2lkCWljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCAgaW50IHR5cGUsIGludCBjb2RlLCBfX2JlMzIgaW5mbyk7CiBleHRlcm4gaW50CWljbXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludAlpY21wX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogZXh0ZXJuIGludAlpY21wX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZAlpY21wX291dF9jb3VudCh1bnNpZ25lZCBjaGFyIHR5cGUpOworZXh0ZXJuIHZvaWQJaWNtcF9vdXRfY291bnQoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBjaGFyIHR5cGUpOwogCiAvKiBNb3ZlIGludG8gZHN0LmggPyAqLwogZXh0ZXJuIGludCAJeHJsaW1fYWxsb3coc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBpbnQgdGltZW91dCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oCmluZGV4IDUyOTgxNmIuLmIzMTM5OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oCkBAIC0xMjYyLDkgKzEyNjIsNiBAQAogLyogaWVlZTgwMjExX3R4LmMgKi8KIGV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKik7Ci1leHRlcm4gaW50IGllZWU4MDIxMV90eF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpmcmFtZSwgaW50IGhkcl9sZW4sCi0JCQkgICAgICBpbnQgdG90YWxfbGVuLCBpbnQgZW5jcnlwdF9tcGR1KTsKIAogLyogaWVlZTgwMjExX3J4LmMgKi8KIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9hbnkoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCkBAIC0xMzEyLDE0ICsxMzA5LDYgQEAKIGV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGVleHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJCSBjaGFyICpleHRyYSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJCSBjaGFyICpleHRyYSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfaW5jcmVtZW50X3NjYW5zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaCBiL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKaW5kZXggYjJjZmM0OS4uYzhlZmZhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaAorKysgYi9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCkBAIC0xNDgsNyArMTQ4LDYgQEAKICNkZWZpbmUJSUZBX0hPU1QJSVBWNl9BRERSX0xPT1BCQUNLCiAjZGVmaW5lCUlGQV9MSU5LCUlQVjZfQUREUl9MSU5LTE9DQUwKICNkZWZpbmUJSUZBX1NJVEUJSVBWNl9BRERSX1NJVEVMT0NBTAotI2RlZmluZQlJRkFfR0xPQkFMCTB4MDAwMFUKIAogc3RydWN0IGlwdjZfZGV2c3RhdCB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX2Rpcl9lbnRyeTsKQEAgLTE5NCw4ICsxOTMsNiBAQAogCXN0cnVjdCByY3VfaGVhZAkJcmN1OwogfTsKIAotZXh0ZXJuIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl9ldGhfbWNfbWFwKHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmKQogewogCS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKaW5kZXggNjJhNWI2OS4uZTQ4OTg5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaApAQCAtMjQsMTggKzI0LDIwIEBACiAjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgogCiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvaGFzaC5oPgogCiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbzsKIAogLyogSSBoYXZlIG5vIGlkZWEgaWYgdGhpcyBpcyBhIGdvb2QgaGFzaCBmb3IgdjYgb3Igbm90LiAtRGF2ZU0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGluZXQ2X2VoYXNoZm4oY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkciwgY29uc3QgdTE2IGxwb3J0LAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW5ldDZfZWhhc2hmbihzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkciwgY29uc3QgdTE2IGxwb3J0LAogCQkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZmFkZHIsIGNvbnN0IF9fYmUxNiBmcG9ydCkKIHsKIAl1MzIgcG9ydHMgPSAobHBvcnQgXiAoX19mb3JjZSB1MTYpZnBvcnQpOwogCiAJcmV0dXJuIGpoYXNoXzN3b3JkcygoX19mb3JjZSB1MzIpbGFkZHItPnM2X2FkZHIzMlszXSwKIAkJCSAgICAoX19mb3JjZSB1MzIpZmFkZHItPnM2X2FkZHIzMlszXSwKLQkJCSAgICBwb3J0cywgaW5ldF9laGFzaF9zZWNyZXQpOworCQkJICAgIHBvcnRzLCBpbmV0X2VoYXNoX3NlY3JldCArIG5ldF9oYXNoX21peChuZXQpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaW5ldDZfc2tfZWhhc2hmbihjb25zdCBzdHJ1Y3Qgc29jayAqc2spCkBAIC00Niw3ICs0OCw5IEBACiAJY29uc3Qgc3RydWN0IGluNl9hZGRyICpmYWRkciA9ICZucC0+ZGFkZHI7CiAJY29uc3QgX191MTYgbHBvcnQgPSBpbmV0LT5udW07CiAJY29uc3QgX19iZTE2IGZwb3J0ID0gaW5ldC0+ZHBvcnQ7Ci0JcmV0dXJuIGluZXQ2X2VoYXNoZm4obGFkZHIsIGxwb3J0LCBmYWRkciwgZnBvcnQpOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKworCXJldHVybiBpbmV0Nl9laGFzaGZuKG5ldCwgbGFkZHIsIGxwb3J0LCBmYWRkciwgZnBvcnQpOwogfQogCiBleHRlcm4gdm9pZCBfX2luZXQ2X2hhc2goc3RydWN0IHNvY2sgKnNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKaW5kZXggNzM1YjkyNi4uYmI2MTlkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9oYXNoLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtMjAxLDIzICsyMDIsMjQgQEAKIGV4dGVybiB2b2lkIGluZXRfYmluZF9idWNrZXRfZGVzdHJveShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAogCQkJCSAgICAgc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiKTsKIAotc3RhdGljIGlubGluZSBpbnQgaW5ldF9iaGFzaGZuKGNvbnN0IF9fdTE2IGxwb3J0LCBjb25zdCBpbnQgYmhhc2hfc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGluZXRfYmhhc2hmbihzdHJ1Y3QgbmV0ICpuZXQsCisJCWNvbnN0IF9fdTE2IGxwb3J0LCBjb25zdCBpbnQgYmhhc2hfc2l6ZSkKIHsKLQlyZXR1cm4gbHBvcnQgJiAoYmhhc2hfc2l6ZSAtIDEpOworCXJldHVybiAobHBvcnQgKyBuZXRfaGFzaF9taXgobmV0KSkgJiAoYmhhc2hfc2l6ZSAtIDEpOwogfQogCiBleHRlcm4gdm9pZCBpbmV0X2JpbmRfaGFzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YiwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNudW0pOwogCiAvKiBUaGVzZSBjYW4gaGF2ZSB3aWxkY2FyZHMsIGRvbid0IHRyeSB0b28gaGFyZC4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGluZXRfbGhhc2hmbihjb25zdCB1bnNpZ25lZCBzaG9ydCBudW0pCitzdGF0aWMgaW5saW5lIGludCBpbmV0X2xoYXNoZm4oc3RydWN0IG5ldCAqbmV0LCBjb25zdCB1bnNpZ25lZCBzaG9ydCBudW0pCiB7Ci0JcmV0dXJuIG51bSAmIChJTkVUX0xIVEFCTEVfU0laRSAtIDEpOworCXJldHVybiAobnVtICsgbmV0X2hhc2hfbWl4KG5ldCkpICYgKElORVRfTEhUQUJMRV9TSVpFIC0gMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGluZXRfc2tfbGlzdGVuX2hhc2hmbihjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JcmV0dXJuIGluZXRfbGhhc2hmbihpbmV0X3NrKHNrKS0+bnVtKTsKKwlyZXR1cm4gaW5ldF9saGFzaGZuKHNvY2tfbmV0KHNrKSwgaW5ldF9zayhzayktPm51bSk7CiB9CiAKIC8qIENhbGxlciBtdXN0IGRpc2FibGUgbG9jYWwgQkggcHJvY2Vzc2luZy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggOWZhYmU1Yi4uNjQzZTI2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvaGFzaC5oPgogCiAvKiogc3RydWN0IGlwX29wdGlvbnMgLSBJUCBPcHRpb25zCiAgKgpAQCAtMTcxLDEzICsxNzIsMTQgQEAKIGV4dGVybiB1MzIgaW5ldF9laGFzaF9zZWNyZXQ7CiBleHRlcm4gdm9pZCBidWlsZF9laGFzaF9zZWNyZXQodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGluZXRfZWhhc2hmbihjb25zdCBfX2JlMzIgbGFkZHIsIGNvbnN0IF9fdTE2IGxwb3J0LAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW5ldF9laGFzaGZuKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJY29uc3QgX19iZTMyIGxhZGRyLCBjb25zdCBfX3UxNiBscG9ydCwKIAkJCQkJY29uc3QgX19iZTMyIGZhZGRyLCBjb25zdCBfX2JlMTYgZnBvcnQpCiB7CiAJcmV0dXJuIGpoYXNoXzN3b3JkcygoX19mb3JjZSBfX3UzMikgbGFkZHIsCiAJCQkgICAgKF9fZm9yY2UgX191MzIpIGZhZGRyLAogCQkJICAgICgoX191MzIpIGxwb3J0KSA8PCAxNiB8IChfX2ZvcmNlIF9fdTMyKWZwb3J0LAotCQkJICAgIGluZXRfZWhhc2hfc2VjcmV0KTsKKwkJCSAgICBpbmV0X2VoYXNoX3NlY3JldCArIG5ldF9oYXNoX21peChuZXQpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaW5ldF9za19laGFzaGZuKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKQEAgLTE4Nyw4ICsxODksOSBAQAogCWNvbnN0IF9fdTE2IGxwb3J0ID0gaW5ldC0+bnVtOwogCWNvbnN0IF9fYmUzMiBmYWRkciA9IGluZXQtPmRhZGRyOwogCWNvbnN0IF9fYmUxNiBmcG9ydCA9IGluZXQtPmRwb3J0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAotCXJldHVybiBpbmV0X2VoYXNoZm4obGFkZHIsIGxwb3J0LCBmYWRkciwgZnBvcnQpOworCXJldHVybiBpbmV0X2VoYXNoZm4obmV0LCBsYWRkciwgbHBvcnQsIGZhZGRyLCBmcG9ydCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaCBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKaW5kZXggYWQ4NDA0Yi4uMTVlMWY4ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaApAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKgkJSU5FVFBFRVIgLSBBIHN0b3JhZ2UgZm9yIHBlcm1hbmVudCBpbmZvcm1hdGlvbiBhYm91dCBwZWVycwogICoKLSAqICBWZXJzaW9uOgkkSWQ6IGluZXRwZWVyLmgsdiAxLjIgMjAwMi8wMS8xMiAwNzo1NDo1NiBkYXZlbSBFeHAgJAotICoKICAqICBBdXRob3JzOglBbmRyZXkgVi4gU2F2b2Noa2luIDxzYXdAbXN1LnJ1PgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDNiNDBiYzIuLmI1ODYyYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtMTU2LDE3ICsxNTYsMTQgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgaXB2NF9jb25maWcgaXB2NF9jb25maWc7Ci1ERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgaXBzdGF0c19taWIsIGlwX3N0YXRpc3RpY3MpOwotI2RlZmluZSBJUF9JTkNfU1RBVFMoZmllbGQpCQlTTk1QX0lOQ19TVEFUUyhpcF9zdGF0aXN0aWNzLCBmaWVsZCkKLSNkZWZpbmUgSVBfSU5DX1NUQVRTX0JIKGZpZWxkKQkJU05NUF9JTkNfU1RBVFNfQkgoaXBfc3RhdGlzdGljcywgZmllbGQpCi0jZGVmaW5lIElQX0lOQ19TVEFUU19VU0VSKGZpZWxkKSAJU05NUF9JTkNfU1RBVFNfVVNFUihpcF9zdGF0aXN0aWNzLCBmaWVsZCkKLSNkZWZpbmUgSVBfQUREX1NUQVRTX0JIKGZpZWxkLCB2YWwpCVNOTVBfQUREX1NUQVRTX0JIKGlwX3N0YXRpc3RpY3MsIGZpZWxkLCB2YWwpCi1ERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgbGludXhfbWliLCBuZXRfc3RhdGlzdGljcyk7Ci0jZGVmaW5lIE5FVF9JTkNfU1RBVFMoZmllbGQpCQlTTk1QX0lOQ19TVEFUUyhuZXRfc3RhdGlzdGljcywgZmllbGQpCi0jZGVmaW5lIE5FVF9JTkNfU1RBVFNfQkgoZmllbGQpCQlTTk1QX0lOQ19TVEFUU19CSChuZXRfc3RhdGlzdGljcywgZmllbGQpCi0jZGVmaW5lIE5FVF9JTkNfU1RBVFNfVVNFUihmaWVsZCkgCVNOTVBfSU5DX1NUQVRTX1VTRVIobmV0X3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBORVRfQUREX1NUQVRTX0JIKGZpZWxkLCBhZG5kKQlTTk1QX0FERF9TVEFUU19CSChuZXRfc3RhdGlzdGljcywgZmllbGQsIGFkbmQpCi0jZGVmaW5lIE5FVF9BRERfU1RBVFNfVVNFUihmaWVsZCwgYWRuZCkJU05NUF9BRERfU1RBVFNfVVNFUihuZXRfc3RhdGlzdGljcywgZmllbGQsIGFkbmQpCisjZGVmaW5lIElQX0lOQ19TVEFUUyhuZXQsIGZpZWxkKQlTTk1QX0lOQ19TVEFUUygobmV0KS0+bWliLmlwX3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBJUF9JTkNfU1RBVFNfQkgobmV0LCBmaWVsZCkJU05NUF9JTkNfU1RBVFNfQkgoKG5ldCktPm1pYi5pcF9zdGF0aXN0aWNzLCBmaWVsZCkKKyNkZWZpbmUgSVBfQUREX1NUQVRTX0JIKG5ldCwgZmllbGQsIHZhbCkgU05NUF9BRERfU1RBVFNfQkgoKG5ldCktPm1pYi5pcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQorI2RlZmluZSBORVRfSU5DX1NUQVRTKG5ldCwgZmllbGQpCVNOTVBfSU5DX1NUQVRTKChuZXQpLT5taWIubmV0X3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBORVRfSU5DX1NUQVRTX0JIKG5ldCwgZmllbGQpCVNOTVBfSU5DX1NUQVRTX0JIKChuZXQpLT5taWIubmV0X3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBORVRfSU5DX1NUQVRTX1VTRVIobmV0LCBmaWVsZCkgCVNOTVBfSU5DX1NUQVRTX1VTRVIoKG5ldCktPm1pYi5uZXRfc3RhdGlzdGljcywgZmllbGQpCisjZGVmaW5lIE5FVF9BRERfU1RBVFNfQkgobmV0LCBmaWVsZCwgYWRuZCkgU05NUF9BRERfU1RBVFNfQkgoKG5ldCktPm1pYi5uZXRfc3RhdGlzdGljcywgZmllbGQsIGFkbmQpCisjZGVmaW5lIE5FVF9BRERfU1RBVFNfVVNFUihuZXQsIGZpZWxkLCBhZG5kKSBTTk1QX0FERF9TVEFUU19VU0VSKChuZXQpLT5taWIubmV0X3N0YXRpc3RpY3MsIGZpZWxkLCBhZG5kKQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzbm1wX2ZvbGRfZmllbGQodm9pZCAqbWliW10sIGludCBvZmZ0KTsKIGV4dGVybiBpbnQgc25tcF9taWJfaW5pdCh2b2lkICpwdHJbMl0sIHNpemVfdCBtaWJzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggOTMxMzQ5MS4uMmY4YjNjMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC02OCw3ICs2OCw3IEBACiBleHRlcm4gc3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKIAkJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7Ci1leHRlcm4gaW50IGljbXA2X2RzdF9nYyhpbnQgKm1vcmUpOworZXh0ZXJuIGludCBpY21wNl9kc3RfZ2Modm9pZCk7CiAKIGV4dGVybiB2b2lkIGZpYjZfZm9yY2Vfc3RhcnRfZ2Moc3RydWN0IG5ldCAqbmV0KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCmluZGV4IDY1MTJkODUuLjgzYjRlMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKQEAgLTEsNyArMSwzIEBACi0vKgotICogJElkJAotICovCi0KICNpZm5kZWYgX05FVF9JUDZfVFVOTkVMX0gKICNkZWZpbmUgX05FVF9JUDZfVFVOTkVMX0gKIApAQCAtMTksNyArMTUsNiBAQAogc3RydWN0IGlwNl90bmwgewogCXN0cnVjdCBpcDZfdG5sICpuZXh0OwkvKiBuZXh0IHR1bm5lbCBpbiBsaXN0ICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsJLyogdmlydHVhbCBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHR1bm5lbCAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXQ7CS8qIHN0YXRpc3RpY3MgZm9yIHR1bm5lbCBkZXZpY2UgKi8KIAlpbnQgcmVjdXJzaW9uOwkJLyogZGVwdGggb2YgaGFyZF9zdGFydF94bWl0IHJlY3Vyc2lvbiAqLwogCXN0cnVjdCBpcDZfdG5sX3Bhcm0gcGFybXM7CS8qIHR1bm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KIAlzdHJ1Y3QgZmxvd2kgZmw7CS8qIGZsb3dpIHRlbXBsYXRlIGZvciB4bWl0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcGNvbmZpZy5oIGIvaW5jbHVkZS9uZXQvaXBjb25maWcuaAppbmRleCAzOTI0ZDdkLi5jNzRjYzFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcGNvbmZpZy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwY29uZmlnLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogICRJZDogaXBjb25maWcuaCx2IDEuNCAyMDAxLzA0LzMwIDA0OjUxOjQ2IGRhdmVtIEV4cCAkCi0gKgogICogIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gTWFyZXMKICAqCiAgKiAgQXV0b21hdGljIElQIExheWVyIENvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwaXAuaCBiL2luY2x1ZGUvbmV0L2lwaXAuaAppbmRleCA2MzNlZDRkLi5hODViZGE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcGlwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBpcC5oCkBAIC0xMSw3ICsxMSw2IEBACiB7CiAJc3RydWN0IGlwX3R1bm5lbAkqbmV4dDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXQ7CiAKIAlpbnQJCQlyZWN1cnNpb247CS8qIERlcHRoIG9mIGhhcmRfc3RhcnRfeG1pdCByZWN1cnNpb24gKi8KIAlpbnQJCQllcnJfY291bnQ7CS8qIE51bWJlciBvZiBhcnJpdmVkIElDTVAgZXJyb3JzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKaW5kZXggZjQyMmY3Mi4uMmQ1YzE4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtNCw4ICs0LDYgQEAKICAqCUF1dGhvcnM6CiAgKglQZWRybyBSb3F1ZQkJPHJvcXVlQGRpLmZjLnVsLnB0PgogICoKLSAqCSRJZDogaXB2Ni5oLHYgMS4xIDIwMDIvMDUvMjAgMTU6MTM6MDcgamdyaW1tIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTEzMyw3ICsxMzEsNiBAQAogCiAjZGVmaW5lIElQNl9JTkNfU1RBVFMoaWRldixmaWVsZCkJX0RFVklOQyhpcHY2LCAsIGlkZXYsIGZpZWxkKQogI2RlZmluZSBJUDZfSU5DX1NUQVRTX0JIKGlkZXYsZmllbGQpCV9ERVZJTkMoaXB2NiwgX0JILCBpZGV2LCBmaWVsZCkKLSNkZWZpbmUgSVA2X0lOQ19TVEFUU19VU0VSKGlkZXYsZmllbGQpCV9ERVZJTkMoaXB2NiwgX1VTRVIsIGlkZXYsIGZpZWxkKQogI2RlZmluZSBJUDZfQUREX1NUQVRTX0JIKGlkZXYsZmllbGQsdmFsKSBfREVWQUREKGlwdjYsIF9CSCwgaWRldiwgZmllbGQsIHZhbCkKIAogREVDTEFSRV9TTk1QX1NUQVQoc3RydWN0IGljbXB2Nl9taWIsIGljbXB2Nl9zdGF0aXN0aWNzKTsKQEAgLTE0MSwyMCArMTM4LDE1IEBACiAKICNkZWZpbmUgSUNNUDZfSU5DX1NUQVRTKGlkZXYsIGZpZWxkKQlfREVWSU5DKGljbXB2NiwgLCBpZGV2LCBmaWVsZCkKICNkZWZpbmUgSUNNUDZfSU5DX1NUQVRTX0JIKGlkZXYsIGZpZWxkKQlfREVWSU5DKGljbXB2NiwgX0JILCBpZGV2LCBmaWVsZCkKLSNkZWZpbmUgSUNNUDZfSU5DX1NUQVRTX1VTRVIoaWRldiwgZmllbGQpIF9ERVZJTkMoaWNtcHY2LCBfVVNFUiwgaWRldiwgZmllbGQpCiAKICNkZWZpbmUgSUNNUDZNU0dPVVRfSU5DX1NUQVRTKGlkZXYsIGZpZWxkKSBcCiAJX0RFVklOQyhpY21wdjZtc2csICwgaWRldiwgZmllbGQgKzI1NikKICNkZWZpbmUgSUNNUDZNU0dPVVRfSU5DX1NUQVRTX0JIKGlkZXYsIGZpZWxkKSBcCiAJX0RFVklOQyhpY21wdjZtc2csIF9CSCwgaWRldiwgZmllbGQgKzI1NikKLSNkZWZpbmUgSUNNUDZNU0dPVVRfSU5DX1NUQVRTX1VTRVIoaWRldiwgZmllbGQpIFwKLQlfREVWSU5DKGljbXB2Nm1zZywgX1VTRVIsIGlkZXYsIGZpZWxkICsyNTYpCiAjZGVmaW5lIElDTVA2TVNHSU5fSU5DX1NUQVRTKGlkZXYsIGZpZWxkKSBcCiAJIF9ERVZJTkMoaWNtcHY2bXNnLCAsIGlkZXYsIGZpZWxkKQogI2RlZmluZSBJQ01QNk1TR0lOX0lOQ19TVEFUU19CSChpZGV2LCBmaWVsZCkgXAogCV9ERVZJTkMoaWNtcHY2bXNnLCBfQkgsIGlkZXYsIGZpZWxkKQotI2RlZmluZSBJQ01QNk1TR0lOX0lOQ19TVEFUU19VU0VSKGlkZXYsIGZpZWxkKSBcCi0JX0RFVklOQyhpY21wdjZtc2csIF9VU0VSLCBpZGV2LCBmaWVsZCkKIAogc3RydWN0IGlwNl9yYV9jaGFpbgogewpAQCAtMjI5LDkgKzIyMSw3IEBACiAJCWF0b21pY19kZWMoJmZsLT51c2Vycyk7CiB9CiAKLWV4dGVybiBpbnQgCQkJaXA2X3JhX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBpbnQgc2VsLAotCQkJCQkgICAgICAgdm9pZCAoKmRlc3RydWN0b3IpKHN0cnVjdCBzb2NrICopKTsKLQorZXh0ZXJuIGludCAJCQlpcDZfcmFfY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssIGludCBzZWwpOwogCiBleHRlcm4gaW50CQkJaXB2Nl9wYXJzZV9ob3BvcHRzKHN0cnVjdCBza19idWZmICpza2IpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmgKaW5kZXggZjcwZTliMy4uMzAyNWFlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYV9kZXZpY2UuaApAQCAtMjIzLDcgKzIyMyw3IEBACiAvKiBJbnRlcmZhY2UgZm9yIGludGVybmFsIHVzZSAqLwogc3RhdGljIGlubGluZSBpbnQgaXJkYV9kZXZpY2VfdHhxdWV1ZV9lbXB0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBza2JfcXVldWVfZW1wdHkoJmRldi0+cWRpc2MtPnEpOworCXJldHVybiBxZGlzY19hbGxfdHhfZW1wdHkoZGV2KTsKIH0KIGludCAgaXJkYV9kZXZpY2Vfc2V0X3Jhd19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlKiBzZWxmLCBpbnQgc3RhdHVzKTsKIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pcmRhZGV2KGludCBzaXplb2ZfcHJpdik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmggYi9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKaW5kZXggMzY5ZDUwZS4uNTFiOWEzN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2l3X2hhbmRsZXIuaAorKysgYi9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKQEAgLTI1Niw3ICsyNTYsNyBAQAogI2RlZmluZSBFSVdDT01NSVQJRUlOUFJPR1JFU1MKIAogLyogRmxhZ3MgYXZhaWxhYmxlIGluIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKi8KLSNkZWZpbmUgSVdfUkVRVUVTVF9GTEFHX05PTkUJMHgwMDAwCS8qIE5vIGZsYWcgc28gZmFyICovCisjZGVmaW5lIElXX1JFUVVFU1RfRkxBR19DT01QQVQJMHgwMDAxCS8qIENvbXBhdCBpb2N0bCBjYWxsICovCiAKIC8qIFR5cGUgb2YgaGVhZGVycyB3ZSBrbm93IGFib3V0IChiYXNpY2FsbHkgdW5pb24gaXdyZXFfZGF0YSkgKi8KICNkZWZpbmUgSVdfSEVBREVSX1RZUEVfTlVMTAkwCS8qIE5vdCBhdmFpbGFibGUgKi8KQEAgLTQ3OCwyNCArNDc4LDU2IEBACiAgKiBGdW5jdGlvbiB0aGF0IGFyZSBzbyBzaW1wbGUgdGhhdCBpdCdzIG1vcmUgZWZmaWNpZW50IGlubGluaW5nIHRoZW0KICAqLwogCitzdGF0aWMgaW5saW5lIGludCBpd2Vfc3RyZWFtX2xjcF9sZW4oc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbykKK3sKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJaWYgKGluZm8tPmZsYWdzICYgSVdfUkVRVUVTVF9GTEFHX0NPTVBBVCkKKwkJcmV0dXJuIElXX0VWX0NPTVBBVF9MQ1BfTEVOOworI2VuZGlmCisJcmV0dXJuIElXX0VWX0xDUF9MRU47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGl3ZV9zdHJlYW1fcG9pbnRfbGVuKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8pCit7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWlmIChpbmZvLT5mbGFncyAmIElXX1JFUVVFU1RfRkxBR19DT01QQVQpCisJCXJldHVybiBJV19FVl9DT01QQVRfUE9JTlRfTEVOOworI2VuZGlmCisJcmV0dXJuIElXX0VWX1BPSU5UX0xFTjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXdlX3N0cmVhbV9ldmVudF9sZW5fYWRqdXN0KHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJCSAgICAgIGludCBldmVudF9sZW4pCit7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWlmIChpbmZvLT5mbGFncyAmIElXX1JFUVVFU1RfRkxBR19DT01QQVQpIHsKKwkJZXZlbnRfbGVuIC09IElXX0VWX0xDUF9MRU47CisJCWV2ZW50X2xlbiArPSBJV19FVl9DT01QQVRfTENQX0xFTjsKKwl9CisjZW5kaWYKKworCXJldHVybiBldmVudF9sZW47Cit9CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBXcmFwcGVyIHRvIGFkZCBhbiBXaXJlbGVzcyBFdmVudCB0byBhIHN0cmVhbSBvZiBldmVudHMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgY2hhciAqCi1pd2Vfc3RyZWFtX2FkZF9ldmVudChjaGFyICoJc3RyZWFtLAkJLyogU3RyZWFtIG9mIGV2ZW50cyAqLwotCQkgICAgIGNoYXIgKgllbmRzLAkJLyogRW5kIG9mIHN0cmVhbSAqLwotCQkgICAgIHN0cnVjdCBpd19ldmVudCAqaXdlLAkvKiBQYXlsb2FkICovCi0JCSAgICAgaW50CWV2ZW50X2xlbikJLyogUmVhbCBzaXplIG9mIHBheWxvYWQgKi8KK2l3ZV9zdHJlYW1fYWRkX2V2ZW50KHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKnN0cmVhbSwgY2hhciAqZW5kcywKKwkJICAgICBzdHJ1Y3QgaXdfZXZlbnQgKml3ZSwgaW50IGV2ZW50X2xlbikKIHsKKwlpbnQgbGNwX2xlbiA9IGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKKworCWV2ZW50X2xlbiA9IGl3ZV9zdHJlYW1fZXZlbnRfbGVuX2FkanVzdChpbmZvLCBldmVudF9sZW4pOworCiAJLyogQ2hlY2sgaWYgaXQncyBwb3NzaWJsZSAqLwogCWlmKGxpa2VseSgoc3RyZWFtICsgZXZlbnRfbGVuKSA8IGVuZHMpKSB7CiAJCWl3ZS0+bGVuID0gZXZlbnRfbGVuOwogCQkvKiBCZXdhcmUgb2YgYWxpZ25lbWVudCBpc3N1ZXMgb24gNjQgYml0cyAqLwogCQltZW1jcHkoc3RyZWFtLCAoY2hhciAqKSBpd2UsIElXX0VWX0xDUF9QS19MRU4pOwotCQltZW1jcHkoc3RyZWFtICsgSVdfRVZfTENQX0xFTiwKLQkJICAgICAgICgoY2hhciAqKSBpd2UpICsgSVdfRVZfTENQX0xFTiwKLQkJICAgICAgIGV2ZW50X2xlbiAtIElXX0VWX0xDUF9MRU4pOworCQltZW1jcHkoc3RyZWFtICsgbGNwX2xlbiwgJml3ZS0+dSwKKwkJICAgICAgIGV2ZW50X2xlbiAtIGxjcF9sZW4pOwogCQlzdHJlYW0gKz0gZXZlbnRfbGVuOwogCX0KIAlyZXR1cm4gc3RyZWFtOwpAQCAtNTA3LDIwICs1MzksMjEgQEAKICAqIHN0cmVhbSBvZiBldmVudHMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgY2hhciAqCi1pd2Vfc3RyZWFtX2FkZF9wb2ludChjaGFyICoJc3RyZWFtLAkJLyogU3RyZWFtIG9mIGV2ZW50cyAqLwotCQkgICAgIGNoYXIgKgllbmRzLAkJLyogRW5kIG9mIHN0cmVhbSAqLwotCQkgICAgIHN0cnVjdCBpd19ldmVudCAqaXdlLAkvKiBQYXlsb2FkIGxlbmd0aCArIGZsYWdzICovCi0JCSAgICAgY2hhciAqCWV4dHJhKQkJLyogTW9yZSBwYXlsb2FkICovCitpd2Vfc3RyZWFtX2FkZF9wb2ludChzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpzdHJlYW0sIGNoYXIgKmVuZHMsCisJCSAgICAgc3RydWN0IGl3X2V2ZW50ICppd2UsIGNoYXIgKmV4dHJhKQogewotCWludAlldmVudF9sZW4gPSBJV19FVl9QT0lOVF9MRU4gKyBpd2UtPnUuZGF0YS5sZW5ndGg7CisJaW50IGV2ZW50X2xlbiA9IGl3ZV9zdHJlYW1fcG9pbnRfbGVuKGluZm8pICsgaXdlLT51LmRhdGEubGVuZ3RoOworCWludCBwb2ludF9sZW4gPSBpd2Vfc3RyZWFtX3BvaW50X2xlbihpbmZvKTsKKwlpbnQgbGNwX2xlbiAgID0gaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOworCiAJLyogQ2hlY2sgaWYgaXQncyBwb3NzaWJsZSAqLwogCWlmKGxpa2VseSgoc3RyZWFtICsgZXZlbnRfbGVuKSA8IGVuZHMpKSB7CiAJCWl3ZS0+bGVuID0gZXZlbnRfbGVuOwogCQltZW1jcHkoc3RyZWFtLCAoY2hhciAqKSBpd2UsIElXX0VWX0xDUF9QS19MRU4pOwotCQltZW1jcHkoc3RyZWFtICsgSVdfRVZfTENQX0xFTiwKLQkJICAgICAgICgoY2hhciAqKSBpd2UpICsgSVdfRVZfTENQX0xFTiArIElXX0VWX1BPSU5UX09GRiwKKwkJbWVtY3B5KHN0cmVhbSArIGxjcF9sZW4sCisJCSAgICAgICAoKGNoYXIgKikgJml3ZS0+dSkgKyBJV19FVl9QT0lOVF9PRkYsCiAJCSAgICAgICBJV19FVl9QT0lOVF9QS19MRU4gLSBJV19FVl9MQ1BfUEtfTEVOKTsKLQkJbWVtY3B5KHN0cmVhbSArIElXX0VWX1BPSU5UX0xFTiwgZXh0cmEsIGl3ZS0+dS5kYXRhLmxlbmd0aCk7CisJCW1lbWNweShzdHJlYW0gKyBwb2ludF9sZW4sIGV4dHJhLCBpd2UtPnUuZGF0YS5sZW5ndGgpOwogCQlzdHJlYW0gKz0gZXZlbnRfbGVuOwogCX0KIAlyZXR1cm4gc3RyZWFtOwpAQCAtNTMzLDExMCArNTY2LDI0IEBACiAgKiBBdCB0aGUgZmlyc3QgcnVuLCB5b3UgbmVlZCB0byBoYXZlICh2YWx1ZSA9IGV2ZW50ICsgSVdfRVZfTENQX0xFTikuCiAgKi8KIHN0YXRpYyBpbmxpbmUgY2hhciAqCi1pd2Vfc3RyZWFtX2FkZF92YWx1ZShjaGFyICoJZXZlbnQsCQkvKiBFdmVudCBpbiB0aGUgc3RyZWFtICovCi0JCSAgICAgY2hhciAqCXZhbHVlLAkJLyogVmFsdWUgaW4gZXZlbnQgKi8KLQkJICAgICBjaGFyICoJZW5kcywJCS8qIEVuZCBvZiBzdHJlYW0gKi8KLQkJICAgICBzdHJ1Y3QgaXdfZXZlbnQgKml3ZSwJLyogUGF5bG9hZCAqLwotCQkgICAgIGludAlldmVudF9sZW4pCS8qIFJlYWwgc2l6ZSBvZiBwYXlsb2FkICovCitpd2Vfc3RyZWFtX2FkZF92YWx1ZShzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpldmVudCwgY2hhciAqdmFsdWUsCisJCSAgICAgY2hhciAqZW5kcywgc3RydWN0IGl3X2V2ZW50ICppd2UsIGludCBldmVudF9sZW4pCiB7CisJaW50IGxjcF9sZW4gPSBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7CisKIAkvKiBEb24ndCBkdXBsaWNhdGUgTENQICovCiAJZXZlbnRfbGVuIC09IElXX0VWX0xDUF9MRU47CiAKIAkvKiBDaGVjayBpZiBpdCdzIHBvc3NpYmxlICovCiAJaWYobGlrZWx5KCh2YWx1ZSArIGV2ZW50X2xlbikgPCBlbmRzKSkgewogCQkvKiBBZGQgbmV3IHZhbHVlICovCi0JCW1lbWNweSh2YWx1ZSwgKGNoYXIgKikgaXdlICsgSVdfRVZfTENQX0xFTiwgZXZlbnRfbGVuKTsKKwkJbWVtY3B5KHZhbHVlLCAmaXdlLT51LCBldmVudF9sZW4pOwogCQl2YWx1ZSArPSBldmVudF9sZW47CiAJCS8qIFBhdGNoIExDUCAqLwogCQlpd2UtPmxlbiA9IHZhbHVlIC0gZXZlbnQ7Ci0JCW1lbWNweShldmVudCwgKGNoYXIgKikgaXdlLCBJV19FVl9MQ1BfTEVOKTsKKwkJbWVtY3B5KGV2ZW50LCAoY2hhciAqKSBpd2UsIGxjcF9sZW4pOwogCX0KIAlyZXR1cm4gdmFsdWU7CiB9CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiBXcmFwcGVyIHRvIGFkZCBhbiBXaXJlbGVzcyBFdmVudCB0byBhIHN0cmVhbSBvZiBldmVudHMuCi0gKiBTYW1lIGFzIGFib3ZlLCB3aXRoIGV4cGxpY2l0IGVycm9yIGNoZWNrLi4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgY2hhciAqCi1pd2Vfc3RyZWFtX2NoZWNrX2FkZF9ldmVudChjaGFyICoJc3RyZWFtLAkJLyogU3RyZWFtIG9mIGV2ZW50cyAqLwotCQkJICAgY2hhciAqCWVuZHMsCQkvKiBFbmQgb2Ygc3RyZWFtICovCi0JCQkgICBzdHJ1Y3QgaXdfZXZlbnQgKml3ZSwJLyogUGF5bG9hZCAqLwotCQkJICAgaW50CQlldmVudF9sZW4sCS8qIFNpemUgb2YgcGF5bG9hZCAqLwotCQkJICAgaW50ICoJcGVycikJCS8qIEVycm9yIHJlcG9ydCAqLwotewotCS8qIENoZWNrIGlmIGl0J3MgcG9zc2libGUsIHNldCBlcnJvciBpZiBub3QgKi8KLQlpZihsaWtlbHkoKHN0cmVhbSArIGV2ZW50X2xlbikgPCBlbmRzKSkgewotCQlpd2UtPmxlbiA9IGV2ZW50X2xlbjsKLQkJLyogQmV3YXJlIG9mIGFsaWduZW1lbnQgaXNzdWVzIG9uIDY0IGJpdHMgKi8KLQkJbWVtY3B5KHN0cmVhbSwgKGNoYXIgKikgaXdlLCBJV19FVl9MQ1BfUEtfTEVOKTsKLQkJbWVtY3B5KHN0cmVhbSArIElXX0VWX0xDUF9MRU4sCi0JCSAgICAgICAoKGNoYXIgKikgaXdlKSArIElXX0VWX0xDUF9MRU4sCi0JCSAgICAgICBldmVudF9sZW4gLSBJV19FVl9MQ1BfTEVOKTsKLQkJc3RyZWFtICs9IGV2ZW50X2xlbjsKLQl9IGVsc2UKLQkJKnBlcnIgPSAtRTJCSUc7Ci0JcmV0dXJuIHN0cmVhbTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIFdyYXBwZXIgdG8gYWRkIGFuIHNob3J0IFdpcmVsZXNzIEV2ZW50IGNvbnRhaW5pbmcgYSBwb2ludGVyIHRvIGEKLSAqIHN0cmVhbSBvZiBldmVudHMuCi0gKiBTYW1lIGFzIGFib3ZlLCB3aXRoIGV4cGxpY2l0IGVycm9yIGNoZWNrLi4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgY2hhciAqCi1pd2Vfc3RyZWFtX2NoZWNrX2FkZF9wb2ludChjaGFyICoJc3RyZWFtLAkJLyogU3RyZWFtIG9mIGV2ZW50cyAqLwotCQkJICAgY2hhciAqCWVuZHMsCQkvKiBFbmQgb2Ygc3RyZWFtICovCi0JCQkgICBzdHJ1Y3QgaXdfZXZlbnQgKml3ZSwJLyogUGF5bG9hZCBsZW5ndGggKyBmbGFncyAqLwotCQkJICAgY2hhciAqCWV4dHJhLAkJLyogTW9yZSBwYXlsb2FkICovCi0JCQkgICBpbnQgKglwZXJyKQkJLyogRXJyb3IgcmVwb3J0ICovCi17Ci0JaW50CWV2ZW50X2xlbiA9IElXX0VWX1BPSU5UX0xFTiArIGl3ZS0+dS5kYXRhLmxlbmd0aDsKLQkvKiBDaGVjayBpZiBpdCdzIHBvc3NpYmxlICovCi0JaWYobGlrZWx5KChzdHJlYW0gKyBldmVudF9sZW4pIDwgZW5kcykpIHsKLQkJaXdlLT5sZW4gPSBldmVudF9sZW47Ci0JCW1lbWNweShzdHJlYW0sIChjaGFyICopIGl3ZSwgSVdfRVZfTENQX1BLX0xFTik7Ci0JCW1lbWNweShzdHJlYW0gKyBJV19FVl9MQ1BfTEVOLAotCQkgICAgICAgKChjaGFyICopIGl3ZSkgKyBJV19FVl9MQ1BfTEVOICsgSVdfRVZfUE9JTlRfT0ZGLAotCQkgICAgICAgSVdfRVZfUE9JTlRfUEtfTEVOIC0gSVdfRVZfTENQX1BLX0xFTik7Ci0JCW1lbWNweShzdHJlYW0gKyBJV19FVl9QT0lOVF9MRU4sIGV4dHJhLCBpd2UtPnUuZGF0YS5sZW5ndGgpOwotCQlzdHJlYW0gKz0gZXZlbnRfbGVuOwotCX0gZWxzZQotCQkqcGVyciA9IC1FMkJJRzsKLQlyZXR1cm4gc3RyZWFtOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogV3JhcHBlciB0byBhZGQgYSB2YWx1ZSB0byBhIFdpcmVsZXNzIEV2ZW50IGluIGEgc3RyZWFtIG9mIGV2ZW50cy4KLSAqIEJlIGNhcmVmdWwsIHRoaXMgb25lIGlzIHRyaWNreSB0byB1c2UgcHJvcGVybHkgOgotICogQXQgdGhlIGZpcnN0IHJ1biwgeW91IG5lZWQgdG8gaGF2ZSAodmFsdWUgPSBldmVudCArIElXX0VWX0xDUF9MRU4pLgotICogU2FtZSBhcyBhYm92ZSwgd2l0aCBleHBsaWNpdCBlcnJvciBjaGVjay4uLgotICovCi1zdGF0aWMgaW5saW5lIGNoYXIgKgotaXdlX3N0cmVhbV9jaGVja19hZGRfdmFsdWUoY2hhciAqCWV2ZW50LAkJLyogRXZlbnQgaW4gdGhlIHN0cmVhbSAqLwotCQkJICAgY2hhciAqCXZhbHVlLAkJLyogVmFsdWUgaW4gZXZlbnQgKi8KLQkJCSAgIGNoYXIgKgllbmRzLAkJLyogRW5kIG9mIHN0cmVhbSAqLwotCQkJICAgc3RydWN0IGl3X2V2ZW50ICppd2UsCS8qIFBheWxvYWQgKi8KLQkJCSAgIGludAkJZXZlbnRfbGVuLAkvKiBTaXplIG9mIHBheWxvYWQgKi8KLQkJCSAgIGludCAqCXBlcnIpCQkvKiBFcnJvciByZXBvcnQgKi8KLXsKLQkvKiBEb24ndCBkdXBsaWNhdGUgTENQICovCi0JZXZlbnRfbGVuIC09IElXX0VWX0xDUF9MRU47Ci0KLQkvKiBDaGVjayBpZiBpdCdzIHBvc3NpYmxlICovCi0JaWYobGlrZWx5KCh2YWx1ZSArIGV2ZW50X2xlbikgPCBlbmRzKSkgewotCQkvKiBBZGQgbmV3IHZhbHVlICovCi0JCW1lbWNweSh2YWx1ZSwgKGNoYXIgKikgaXdlICsgSVdfRVZfTENQX0xFTiwgZXZlbnRfbGVuKTsKLQkJdmFsdWUgKz0gZXZlbnRfbGVuOwotCQkvKiBQYXRjaCBMQ1AgKi8KLQkJaXdlLT5sZW4gPSB2YWx1ZSAtIGV2ZW50OwotCQltZW1jcHkoZXZlbnQsIChjaGFyICopIGl3ZSwgSVdfRVZfTENQX0xFTik7Ci0JfSBlbHNlCi0JCSpwZXJyID0gLUUyQklHOwotCXJldHVybiB2YWx1ZTsKLX0KLQogI2VuZGlmCS8qIF9JV19IQU5ETEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IGJjZDE2MjMuLjRkZDNkOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtNDIsNyArNDIsNyBAQAogICogdGFza2xldCBmdW5jdGlvbi4KICAqCiAgKiBOT1RFOiBJZiB0aGUgZHJpdmVyIG9wdHMgdG8gdXNlIHRoZSBfaXJxc2FmZSgpIGZ1bmN0aW9ucywgaXQgbWF5IG5vdCBhbHNvCi0gKgkgdXNlIHRoZSBub24taXJxc2FmZSBmdW5jdGlvbnMhCisgKgkgdXNlIHRoZSBub24tSVJRLXNhZmUgZnVuY3Rpb25zIQogICovCiAKIC8qKgpAQCAtODUsNyArODUsNyBAQAogICogc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyAtIGRlc2NyaWJpbmcgQlNTJ3MgSFQgY2hhcmFjdGVyaXN0aWNzCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIG1vc3QgZXNzZW50aWFsIHBhcmFtZXRlcnMgbmVlZGVkCi0gKiB0byBkZXNjcmliZSA4MDIuMTFuIEhUIGNoYXJhY3RlcmlzdGljcyBpbiBhIEJTUworICogdG8gZGVzY3JpYmUgODAyLjExbiBIVCBjaGFyYWN0ZXJpc3RpY3MgaW4gYSBCU1MuCiAgKgogICogQHByaW1hcnlfY2hhbm5lbDogY2hhbm5lbCBudW1iZXIgb2YgcHJpbWVyeSBjaGFubmVsCiAgKiBAYnNzX2NhcDogODAyLjExbidzIGdlbmVyYWwgQlNTIGNhcGFiaWxpdGllcyAoZS5nLiBjaGFubmVsIHdpZHRoKQpAQCAtOTgsNzcgKzk4LDQ5IEBACiB9OwogCiAvKioKKyAqIGVudW0gaWVlZTgwMjExX21heF9xdWV1ZXMgLSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMKKyAqCisgKiBASUVFRTgwMjExX01BWF9RVUVVRVM6IE1heGltdW0gbnVtYmVyIG9mIHJlZ3VsYXIgZGV2aWNlIHF1ZXVlcy4KKyAqIEBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUzogTWF4aW11bSBudW1iZXIgb2YgcXVldWVzIHVzYWJsZQorICoJZm9yIEEtTVBEVSBvcGVyYXRpb24uCisgKi8KK2VudW0gaWVlZTgwMjExX21heF9xdWV1ZXMgeworCUlFRUU4MDIxMV9NQVhfUVVFVUVTID0JCTE2LAorCUlFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTID0JMTYsCit9OworCisvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIC0gdHJhbnNtaXQgcXVldWUgY29uZmlndXJhdGlvbgogICoKICAqIFRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiB0aGlzIHN0cnVjdHVyZSBpcyByZXF1aXJlZCBmb3IgUW9TCiAgKiB0cmFuc21pdCBxdWV1ZSBjb25maWd1cmF0aW9uLiBDZi4gSUVFRSA4MDIuMTEgNy4zLjIuMjkuCiAgKgotICogQGFpZnM6IGFyYml0cmF0aW9uIGludGVyZmFjZSBzcGFjZSBbMC4uMjU1LCAtMTogdXNlIGRlZmF1bHRdCi0gKiBAY3dfbWluOiBtaW5pbXVtIGNvbnRlbnRpb24gd2luZG93IFt3aWxsIGJlIGEgdmFsdWUgb2YgdGhlIGZvcm0KLSAqCTJebi0xIGluIHRoZSByYW5nZSAxLi4xMDIzOyAwOiB1c2UgZGVmYXVsdF0KKyAqIEBhaWZzOiBhcmJpdHJhdGlvbiBpbnRlcmZhY2Ugc3BhY2UgWzAuLjI1NV0KKyAqIEBjd19taW46IG1pbmltdW0gY29udGVudGlvbiB3aW5kb3cgW2EgdmFsdWUgb2YgdGhlIGZvcm0KKyAqCTJebi0xIGluIHRoZSByYW5nZSAxLi4zMjc2N10KICAqIEBjd19tYXg6IG1heGltdW0gY29udGVudGlvbiB3aW5kb3cgW2xpa2UgQGN3X21pbl0KICAqIEB0eG9wOiBtYXhpbXVtIGJ1cnN0IHRpbWUgaW4gdW5pdHMgb2YgMzIgdXNlY3MsIDAgbWVhbmluZyBkaXNhYmxlZAogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyB7Ci0JczE2IGFpZnM7CisJdTE2IHR4b3A7CiAJdTE2IGN3X21pbjsKIAl1MTYgY3dfbWF4OwotCXUxNiB0eG9wOworCXU4IGFpZnM7CiB9OwogCiAvKioKLSAqIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHNfZGF0YSAtIHRyYW5zbWl0IHF1ZXVlIHN0YXRpc3RpY3MKKyAqIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgLSB0cmFuc21pdCBxdWV1ZSBzdGF0aXN0aWNzCiAgKgogICogQGxlbjogbnVtYmVyIG9mIHBhY2tldHMgaW4gcXVldWUKICAqIEBsaW1pdDogcXVldWUgbGVuZ3RoIGxpbWl0CiAgKiBAY291bnQ6IG51bWJlciBvZiBmcmFtZXMgc2VudAogICovCi1zdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzX2RhdGEgeworc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB7CiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBpbnQgbGltaXQ7CiAJdW5zaWduZWQgaW50IGNvdW50OwogfTsKIAotLyoqCi0gKiBlbnVtIGllZWU4MDIxMV90eF9xdWV1ZSAtIHRyYW5zbWl0IHF1ZXVlIG51bWJlcgotICoKLSAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCB3aXRoIHNvbWUgY2FsbGJhY2tzIHRoYXQgdGFrZSBhCi0gKiBxdWV1ZSBudW1iZXIgdG8gc2V0IHBhcmFtZXRlcnMgZm9yIGEgcXVldWUuCi0gKgotICogQElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMDogZGF0YSBxdWV1ZSAwCi0gKiBASUVFRTgwMjExX1RYX1FVRVVFX0RBVEExOiBkYXRhIHF1ZXVlIDEKLSAqIEBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTI6IGRhdGEgcXVldWUgMgotICogQElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMzogZGF0YSBxdWV1ZSAzCi0gKiBASUVFRTgwMjExX1RYX1FVRVVFX0RBVEE0OiBkYXRhIHF1ZXVlIDQKLSAqIEBJRUVFODAyMTFfVFhfUVVFVUVfU1ZQOiA/PwotICogQE5VTV9UWF9EQVRBX1FVRVVFUzogbnVtYmVyIG9mIGRhdGEgcXVldWVzCi0gKiBASUVFRTgwMjExX1RYX1FVRVVFX0FGVEVSX0JFQUNPTjogdHJhbnNtaXQgcXVldWUgZm9yIGZyYW1lcyB0byBiZQotICoJc2VudCBhZnRlciBhIGJlYWNvbgotICogQElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT046IHRyYW5zbWl0IHF1ZXVlIGZvciBiZWFjb24gZnJhbWVzCi0gKiBATlVNX1RYX0RBVEFfUVVFVUVTX0FNUERVOiBhZGRpbmcgbW9yZSBxdWV1ZXMgZm9yIEEtTVBEVQotICovCi1lbnVtIGllZWU4MDIxMV90eF9xdWV1ZSB7Ci0JSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwLAotCUlFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMSwKLQlJRUVFODAyMTFfVFhfUVVFVUVfREFUQTIsCi0JSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEzLAotCUlFRUU4MDIxMV9UWF9RVUVVRV9EQVRBNCwKLQlJRUVFODAyMTFfVFhfUVVFVUVfU1ZQLAotCi0JTlVNX1RYX0RBVEFfUVVFVUVTLAotCi0vKiBkdWUgdG8gc3R1cGlkaXR5IGluIHRoZSBzdWItaW9jdGwgdXNlcnNwYWNlIGludGVyZmFjZSwgdGhlIGl0ZW1zIGluCi0gKiB0aGlzIHN0cnVjdCBuZWVkIHRvIGhhdmUgZml4ZWQgdmFsdWVzLiBBcyBzb29uIGFzIGl0IGlzIHJlbW92ZWQsIHdlIGNhbgotICogZml4IHRoZXNlIGVudHJpZXMuICovCi0JSUVFRTgwMjExX1RYX1FVRVVFX0FGVEVSX0JFQUNPTiA9IDYsCi0JSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTiA9IDcsCi0JTlVNX1RYX0RBVEFfUVVFVUVTX0FNUERVID0gMTYKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgewotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHNfZGF0YSBkYXRhW05VTV9UWF9EQVRBX1FVRVVFU19BTVBEVV07Ci19OwotCiBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyB7CiAJdW5zaWduZWQgaW50IGRvdDExQUNLRmFpbHVyZUNvdW50OwogCXVuc2lnbmVkIGludCBkb3QxMVJUU0ZhaWx1cmVDb3VudDsKQEAgLTIyOSw5MSArMjAxLDE1MSBAQAogfTsKIAogLyoqCi0gKiBlbnVtIG1hYzgwMjExX3R4X2NvbnRyb2xfZmxhZ3MgLSBmbGFncyB0byBkZXNjcmliZSBUeCBjb25maWd1cmF0aW9uIGZvcgotICogCQkJCSAgICB0aGUgVHggZnJhbWUKKyAqIGVudW0gbWFjODAyMTFfdHhfY29udHJvbF9mbGFncyAtIGZsYWdzIHRvIGRlc2NyaWJlIHRyYW5zbWlzc2lvbiBpbmZvcm1hdGlvbi9zdGF0dXMKICAqCi0gKiBUaGVzZSBmbGFncyBhcmUgdXNlZCB3aXRoIHRoZSBAZmxhZ3MgbWVtYmVyIG9mICZpZWVlODAyMTFfdHhfY29udHJvbAorICogVGhlc2UgZmxhZ3MgYXJlIHVzZWQgd2l0aCB0aGUgQGZsYWdzIG1lbWJlciBvZiAmaWVlZTgwMjExX3R4X2luZm8uCiAgKgotICogQElFRUU4MDIxMV9UWENUTF9SRVFfVFhfU1RBVFVTOiByZXF1ZXN0IFRYIHN0YXR1cyBjYWxsYmFjayBmb3IgdGhpcyBmcmFtZS4KLSAqIEBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQ6IHNlbmQgdGhpcyBmcmFtZSB3aXRob3V0IGVuY3J5cHRpb247Ci0gKiAJCQkJICAgIGUuZy4sIGZvciBFQVBPTCBmcmFtZQotICogQElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUzogdXNlIFJUUy1DVFMgYmVmb3JlIHNlbmRpbmcgZnJhbWUKLSAqIEBJRUVFODAyMTFfVFhDVExfVVNFX0NUU19QUk9URUNUOiB1c2UgQ1RTIHByb3RlY3Rpb24gZm9yIHRoZSBmcmFtZSAoZS5nLiwKLSAqIAkJCQkgICAgIGZvciBjb21iaW5lZCA4MDIuMTFnIC8gODAyLjExYiBuZXR3b3JrcykKLSAqIEBJRUVFODAyMTFfVFhDVExfTk9fQUNLOiB0ZWxsIHRoZSBsb3cgbGV2ZWwgbm90IHRvIHdhaXQgZm9yIGFuIGFjawotICogQElFRUU4MDIxMV9UWENUTF9SQVRFX0NUUkxfUFJPQkUKLSAqIEBFRUU4MDIxMV9UWENUTF9DTEVBUl9QU19GSUxUOiBjbGVhciBwb3dlcnNhdmUgZmlsdGVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uCi0gKiBASUVFRTgwMjExX1RYQ1RMX1JFUVVFVUU6Ci0gKiBASUVFRTgwMjExX1RYQ1RMX0ZJUlNUX0ZSQUdNRU5UOiB0aGlzIGlzIGEgZmlyc3QgZnJhZ21lbnQgb2YgdGhlIGZyYW1lCi0gKiBASUVFRTgwMjExX1RYQ1RMX0xPTkdfUkVUUllfTElNSVQ6IHRoaXMgZnJhbWUgc2hvdWxkIGJlIHNlbmQgdXNpbmcgdGhlCi0gKiAJCQkJICAgICAgdGhyb3VnaCBzZXRfcmV0cnlfbGltaXQgY29uZmlndXJlZCBsb25nCi0gKiAJCQkJICAgICAgcmV0cnkgdmFsdWUKLSAqIEBJRUVFODAyMTFfVFhDVExfRUFQT0xfRlJBTUU6IGludGVybmFsIHRvIG1hYzgwMjExCi0gKiBASUVFRTgwMjExX1RYQ1RMX1NFTkRfQUZURVJfRFRJTTogc2VuZCB0aGlzIGZyYW1lIGFmdGVyIERUSU0gYmVhY29uCi0gKiBASUVFRTgwMjExX1RYQ1RMX0FNUERVOiB0aGlzIGZyYW1lIHNob3VsZCBiZSBzZW50IGFzIHBhcnQgb2YgYW4gQS1NUERVCi0gKiBASUVFRTgwMjExX1RYQ1RMX09GRE1fSFQ6IHRoaXMgZnJhbWUgY2FuIGJlIHNlbnQgaW4gSFQgT0ZETSByYXRlcy4gbnVtYmVyCi0gKiAJCQkgICAgIG9mIHN0cmVhbXMgd2hlbiB0aGlzIGZsYWcgaXMgb24gY2FuIGJlIGV4dHJhY3RlZAotICoJCQkgICAgIGZyb20gYW50ZW5uYV9zZWxfdHgsIHNvIGlmIDEgYW50ZW5uYSBpcyBtYXJrZWQKLSAqCQkJICAgICB1c2UgU0lTTywgMiBhbnRlbm5hcyBtYXJrZWQgdXNlIE1JTU8sIG4gYW50ZW5uYXMKLSAqCQkJICAgICBtYXJrZWQgdXNlIE1JTU9fbi4KLSAqIEBJRUVFODAyMTFfVFhDVExfR1JFRU5fRklFTEQ6IHVzZSBncmVlbiBmaWVsZCBwcm90ZWN0aW9uIGZvciB0aGlzIGZyYW1lCi0gKiBASUVFRTgwMjExX1RYQ1RMXzQwX01IWl9XSURUSDogc2VuZCB0aGlzIGZyYW1lIHVzaW5nIDQwIE1oeiBjaGFubmVsIHdpZHRoCi0gKiBASUVFRTgwMjExX1RYQ1RMX0RVUF9EQVRBOiBkdXBsaWNhdGUgZGF0YSBmcmFtZSBvbiBib3RoIDIwIE1oeiBjaGFubmVscwotICogQElFRUU4MDIxMV9UWENUTF9TSE9SVF9HSTogc2VuZCB0aGlzIGZyYW1lIHVzaW5nIHNob3J0IGd1YXJkIGludGVydmFsCisgKiBASUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOiByZXF1ZXN0IFRYIHN0YXR1cyBjYWxsYmFjayBmb3IgdGhpcyBmcmFtZS4KKyAqIEBJRUVFODAyMTFfVFhfQ1RMX0RPX05PVF9FTkNSWVBUOiBzZW5kIHRoaXMgZnJhbWUgd2l0aG91dCBlbmNyeXB0aW9uOworICoJZS5nLiwgZm9yIEVBUE9MIGZyYW1lCisgKiBASUVFRTgwMjExX1RYX0NUTF9VU0VfUlRTX0NUUzogdXNlIFJUUy1DVFMgYmVmb3JlIHNlbmRpbmcgZnJhbWUKKyAqIEBJRUVFODAyMTFfVFhfQ1RMX1VTRV9DVFNfUFJPVEVDVDogdXNlIENUUyBwcm90ZWN0aW9uIGZvciB0aGUgZnJhbWUgKGUuZy4sCisgKglmb3IgY29tYmluZWQgODAyLjExZyAvIDgwMi4xMWIgbmV0d29ya3MpCisgKiBASUVFRTgwMjExX1RYX0NUTF9OT19BQ0s6IHRlbGwgdGhlIGxvdyBsZXZlbCBub3QgdG8gd2FpdCBmb3IgYW4gYWNrCisgKiBASUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkU6IFRCRAorICogQElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVDogY2xlYXIgcG93ZXJzYXZlIGZpbHRlciBmb3IgZGVzdGluYXRpb24KKyAqCXN0YXRpb24KKyAqIEBJRUVFODAyMTFfVFhfQ1RMX1JFUVVFVUU6IFRCRAorICogQElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQ6IHRoaXMgaXMgYSBmaXJzdCBmcmFnbWVudCBvZiB0aGUgZnJhbWUKKyAqIEBJRUVFODAyMTFfVFhfQ1RMX1NIT1JUX1BSRUFNQkxFOiBUQkQKKyAqIEBJRUVFODAyMTFfVFhfQ1RMX0xPTkdfUkVUUllfTElNSVQ6IHRoaXMgZnJhbWUgc2hvdWxkIGJlIHNlbmQgdXNpbmcgdGhlCisgKgl0aHJvdWdoIHNldF9yZXRyeV9saW1pdCBjb25maWd1cmVkIGxvbmcgcmV0cnkgdmFsdWUKKyAqIEBJRUVFODAyMTFfVFhfQ1RMX0VBUE9MX0ZSQU1FOiBpbnRlcm5hbCB0byBtYWM4MDIxMQorICogQElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNOiBzZW5kIHRoaXMgZnJhbWUgYWZ0ZXIgRFRJTSBiZWFjb24KKyAqIEBJRUVFODAyMTFfVFhfQ1RMX0FNUERVOiB0aGlzIGZyYW1lIHNob3VsZCBiZSBzZW50IGFzIHBhcnQgb2YgYW4gQS1NUERVCisgKiBASUVFRTgwMjExX1RYX0NUTF9PRkRNX0hUOiB0aGlzIGZyYW1lIGNhbiBiZSBzZW50IGluIEhUIE9GRE0gcmF0ZXMuIG51bWJlcgorICoJb2Ygc3RyZWFtcyB3aGVuIHRoaXMgZmxhZyBpcyBvbiBjYW4gYmUgZXh0cmFjdGVkIGZyb20gYW50ZW5uYV9zZWxfdHgsCisgKglzbyBpZiAxIGFudGVubmEgaXMgbWFya2VkIHVzZSBTSVNPLCAyIGFudGVubmFzIG1hcmtlZCB1c2UgTUlNTywgbgorICoJYW50ZW5uYXMgbWFya2VkIHVzZSBNSU1PX24uCisgKiBASUVFRTgwMjExX1RYX0NUTF9HUkVFTl9GSUVMRDogdXNlIGdyZWVuIGZpZWxkIHByb3RlY3Rpb24gZm9yIHRoaXMgZnJhbWUKKyAqIEBJRUVFODAyMTFfVFhfQ1RMXzQwX01IWl9XSURUSDogc2VuZCB0aGlzIGZyYW1lIHVzaW5nIDQwIE1oeiBjaGFubmVsIHdpZHRoCisgKiBASUVFRTgwMjExX1RYX0NUTF9EVVBfREFUQTogZHVwbGljYXRlIGRhdGEgZnJhbWUgb24gYm90aCAyMCBNaHogY2hhbm5lbHMKKyAqIEBJRUVFODAyMTFfVFhfQ1RMX1NIT1JUX0dJOiBzZW5kIHRoaXMgZnJhbWUgdXNpbmcgc2hvcnQgZ3VhcmQgaW50ZXJ2YWwKKyAqIEBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEOiBUQkQKKyAqIEBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDogVGhlIGZyYW1lIHdhcyBub3QgdHJhbnNtaXR0ZWQKKyAqCWJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIFNUQSB3YXMgaW4gcG93ZXJzYXZlIG1vZGUuCisgKiBASUVFRTgwMjExX1RYX1NUQVRfQUNLOiBGcmFtZSB3YXMgYWNrbm93bGVkZ2VkCisgKiBASUVFRTgwMjExX1RYX1NUQVRfQU1QRFU6IFRoZSBmcmFtZSB3YXMgYWdncmVnYXRlZCwgc28gc3RhdHVzCisgKiAJaXMgZm9yIHRoZSB3aG9sZSBhZ2dyZWdhdGlvbi4KKyAqIEBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLOiBubyBibG9jayBhY2sgd2FzIHJldHVybmVkLAorICogCXNvIGNvbnNpZGVyIHVzaW5nIGJsb2NrIGFjayByZXF1ZXN0IChCQVIpLgorICogQElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUTogVGhlIGRyaXZlciBoYXMgdG8gYXNzaWduIGEgc2VxdWVuY2UKKyAqCW51bWJlciB0byB0aGlzIGZyYW1lLCB0YWtpbmcgY2FyZSBvZiBub3Qgb3ZlcndyaXRpbmcgdGhlIGZyYWdtZW50CisgKgludW1iZXIgYW5kIGluY3JlYXNpbmcgdGhlIHNlcXVlbmNlIG51bWJlciBvbmx5IHdoZW4gdGhlCisgKglJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UIGZsYWdzIGlzIHNldC4gbWFjODAyMTEgd2lsbCBwcm9wZXJseQorICoJYXNzaWduIHNlcXVlbmNlIG51bWJlcnMgdG8gUW9TLWRhdGEgZnJhbWVzIGJ1dCBjYW5ub3QgZG8gc28gY29ycmVjdGx5CisgKglmb3Igbm9uLVFvUy1kYXRhIGFuZCBtYW5hZ2VtZW50IGZyYW1lcyBiZWNhdXNlIGJlYWNvbnMgbmVlZCB0aGVtIGZyb20KKyAqCXRoYXQgY291bnRlciBhcyB3ZWxsIGFuZCBtYWM4MDIxMSBjYW5ub3QgZ3VhcmFudGVlIHByb3BlciBzZXF1ZW5jaW5nLgorICoJSWYgdGhpcyBmbGFnIGlzIHNldCwgdGhlIGRyaXZlciBzaG91bGQgaW5zdHJ1Y3QgdGhlIGhhcmR3YXJlIHRvCisgKglhc3NpZ24gYSBzZXF1ZW5jZSBudW1iZXIgdG8gdGhlIGZyYW1lIG9yIGFzc2lnbiBvbmUgaXRzZWxmLiBDZi4gSUVFRQorICoJODAyLjExLTIwMDcgNy4xLjMuNC4xIHBhcmFncmFwaCAzLiBUaGlzIGZsYWcgd2lsbCBhbHdheXMgYmUgc2V0IGZvcgorICoJYmVhY29ucyBhbHdheXMgYmUgY2xlYXIgZm9yIGZyYW1lcyB3aXRob3V0IGEgc2VxdWVuY2UgbnVtYmVyIGZpZWxkLgogICovCiBlbnVtIG1hYzgwMjExX3R4X2NvbnRyb2xfZmxhZ3MgewotCUlFRUU4MDIxMV9UWENUTF9SRVFfVFhfU1RBVFVTCQk9ICgxPDwwKSwKLQlJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQJCT0gKDE8PDEpLAotCUlFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUwkJPSAoMTw8MiksCi0JSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVAkJPSAoMTw8MyksCi0JSUVFRTgwMjExX1RYQ1RMX05PX0FDSwkJCT0gKDE8PDQpLAotCUlFRUU4MDIxMV9UWENUTF9SQVRFX0NUUkxfUFJPQkUJCT0gKDE8PDUpLAotCUlFRUU4MDIxMV9UWENUTF9DTEVBUl9QU19GSUxUCQk9ICgxPDw2KSwKLQlJRUVFODAyMTFfVFhDVExfUkVRVUVVRQkJCT0gKDE8PDcpLAotCUlFRUU4MDIxMV9UWENUTF9GSVJTVF9GUkFHTUVOVAkJPSAoMTw8OCksCi0JSUVFRTgwMjExX1RYQ1RMX1NIT1JUX1BSRUFNQkxFCQk9ICgxPDw5KSwKLQlJRUVFODAyMTFfVFhDVExfTE9OR19SRVRSWV9MSU1JVAk9ICgxPDwxMCksCi0JSUVFRTgwMjExX1RYQ1RMX0VBUE9MX0ZSQU1FCQk9ICgxPDwxMSksCi0JSUVFRTgwMjExX1RYQ1RMX1NFTkRfQUZURVJfRFRJTQkJPSAoMTw8MTIpLAotCUlFRUU4MDIxMV9UWENUTF9BTVBEVQkJCT0gKDE8PDEzKSwKLQlJRUVFODAyMTFfVFhDVExfT0ZETV9IVAkJCT0gKDE8PDE0KSwKLQlJRUVFODAyMTFfVFhDVExfR1JFRU5fRklFTEQJCT0gKDE8PDE1KSwKLQlJRUVFODAyMTFfVFhDVExfNDBfTUhaX1dJRFRICQk9ICgxPDwxNiksCi0JSUVFRTgwMjExX1RYQ1RMX0RVUF9EQVRBCQk9ICgxPDwxNyksCi0JSUVFRTgwMjExX1RYQ1RMX1NIT1JUX0dJCQk9ICgxPDwxOCksCisJSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTCQk9IEJJVCgwKSwKKwlJRUVFODAyMTFfVFhfQ1RMX0RPX05PVF9FTkNSWVBUCQk9IEJJVCgxKSwKKwlJRUVFODAyMTFfVFhfQ1RMX1VTRV9SVFNfQ1RTCQk9IEJJVCgyKSwKKwlJRUVFODAyMTFfVFhfQ1RMX1VTRV9DVFNfUFJPVEVDVAk9IEJJVCgzKSwKKwlJRUVFODAyMTFfVFhfQ1RMX05PX0FDSwkJCT0gQklUKDQpLAorCUlFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFCT0gQklUKDUpLAorCUlFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVAkJPSBCSVQoNiksCisJSUVFRTgwMjExX1RYX0NUTF9SRVFVRVVFCQk9IEJJVCg3KSwKKwlJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UCQk9IEJJVCg4KSwKKwlJRUVFODAyMTFfVFhfQ1RMX1NIT1JUX1BSRUFNQkxFCQk9IEJJVCg5KSwKKwlJRUVFODAyMTFfVFhfQ1RMX0xPTkdfUkVUUllfTElNSVQJPSBCSVQoMTApLAorCUlFRUU4MDIxMV9UWF9DVExfRUFQT0xfRlJBTUUJCT0gQklUKDExKSwKKwlJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTQk9IEJJVCgxMiksCisJSUVFRTgwMjExX1RYX0NUTF9BTVBEVQkJCT0gQklUKDEzKSwKKwlJRUVFODAyMTFfVFhfQ1RMX09GRE1fSFQJCT0gQklUKDE0KSwKKwlJRUVFODAyMTFfVFhfQ1RMX0dSRUVOX0ZJRUxECQk9IEJJVCgxNSksCisJSUVFRTgwMjExX1RYX0NUTF80MF9NSFpfV0lEVEgJCT0gQklUKDE2KSwKKwlJRUVFODAyMTFfVFhfQ1RMX0RVUF9EQVRBCQk9IEJJVCgxNyksCisJSUVFRTgwMjExX1RYX0NUTF9TSE9SVF9HSQkJPSBCSVQoMTgpLAorCUlFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQJCT0gQklUKDE5KSwKKwlJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRAkJPSBCSVQoMjApLAorCUlFRUU4MDIxMV9UWF9TVEFUX0FDSwkJCT0gQklUKDIxKSwKKwlJRUVFODAyMTFfVFhfU1RBVF9BTVBEVQkJCT0gQklUKDIyKSwKKwlJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLCQk9IEJJVCgyMyksCisJSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRCQk9IEJJVCgyNCksCiB9OwogCi0vKiBUcmFuc21pdCBjb250cm9sIGZpZWxkcy4gVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gbG93LWxldmVsIGRyaXZlcgotICogd2l0aCBlYWNoIFRYIGZyYW1lLiBUaGUgbG93LWxldmVsIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcKLSAqIHRoZSBoYXJkd2FyZSB0byB1c2UgZ2l2ZW4gdmFsdWVzIChkZXBlbmRpbmcgb24gd2hhdCBpcyBzdXBwb3J0ZWQpLiAqLwogCi1zdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgewotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICp0eF9yYXRlOworI2RlZmluZSBJRUVFODAyMTFfVFhfSU5GT19EUklWRVJfREFUQV9TSVpFIFwKKwkoc2l6ZW9mKCgoc3RydWN0IHNrX2J1ZmYgKikwKS0+Y2IpIC0gOCkKKyNkZWZpbmUgSUVFRTgwMjExX1RYX0lORk9fRFJJVkVSX0RBVEFfUFRSUyBcCisJKElFRUU4MDIxMV9UWF9JTkZPX0RSSVZFUl9EQVRBX1NJWkUgLyBzaXplb2Yodm9pZCAqKSkKIAotCS8qIFRyYW5zbWl0IHJhdGUgZm9yIFJUUy9DVFMgZnJhbWUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJ0c19jdHNfcmF0ZTsKKy8qKgorICogc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIC0gc2tiIHRyYW5zbWl0IGluZm9ybWF0aW9uCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGluIHNrYi0+Y2IgZm9yIHRocmVlIHVzZXM6CisgKiAgKDEpIG1hYzgwMjExIFRYIGNvbnRyb2wgLSBtYWM4MDIxMSB0ZWxscyB0aGUgZHJpdmVyIHdoYXQgdG8gZG8KKyAqICAoMikgZHJpdmVyIGludGVybmFsIHVzZSAoaWYgYXBwbGljYWJsZSkKKyAqICAoMykgVFggc3RhdHVzIGluZm9ybWF0aW9uIC0gZHJpdmVyIHRlbGxzIG1hYzgwMjExIHdoYXQgaGFwcGVuZWQKKyAqCisgKiBAZmxhZ3M6IHRyYW5zbWl0IGluZm8gZmxhZ3MsIGRlZmluZWQgYWJvdmUKKyAqIEBiYW5kOiBUQkQKKyAqIEB0eF9yYXRlX2lkeDogVEJECisgKiBAYW50ZW5uYV9zZWxfdHg6IFRCRAorICogQGNvbnRyb2w6IHVuaW9uIGZvciBjb250cm9sIGRhdGEKKyAqIEBzdGF0dXM6IHVuaW9uIGZvciBzdGF0dXMgZGF0YQorICogQGRyaXZlcl9kYXRhOiBhcnJheSBvZiBkcml2ZXJfZGF0YSBwb2ludGVycworICogQHJldHJ5X2NvdW50OiBudW1iZXIgb2YgcmV0cmllcworICogQGV4Y2Vzc2l2ZV9yZXRyaWVzOiBzZXQgdG8gMSBpZiB0aGUgZnJhbWUgd2FzIHJldHJpZWQgbWFueSB0aW1lcworICoJYnV0IG5vdCBhY2tub3dsZWRnZWQKKyAqIEBhbXBkdV9hY2tfbGVuOiBudW1iZXIgb2YgYWdncmVnYXRlZCBmcmFtZXMuCisgKiAJcmVsZXZhbnQgb25seSBpZiBJRUVFODAyMTFfVFhfU1RBVFVTX0FNUERVIHdhcyBzZXQuCisgKiBAYW1wZHVfYWNrX21hcDogYmxvY2sgYWNrIGJpdCBtYXAgZm9yIHRoZSBhZ2dyZWdhdGlvbi4KKyAqIAlyZWxldmFudCBvbmx5IGlmIElFRUU4MDIxMV9UWF9TVEFUVVNfQU1QRFUgd2FzIHNldC4KKyAqIEBhY2tfc2lnbmFsOiBzaWduYWwgc3RyZW5ndGggb2YgdGhlIEFDSyBmcmFtZQorICovCitzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8geworCS8qIGNvbW1vbiBpbmZvcm1hdGlvbiAqLworCXUzMiBmbGFnczsKKwl1OCBiYW5kOworCXM4IHR4X3JhdGVfaWR4OworCXU4IGFudGVubmFfc2VsX3R4OwogCi0JLyogcmV0cnkgcmF0ZSBmb3IgdGhlIGxhc3QgcmV0cmllcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYWx0X3JldHJ5X3JhdGU7CisJLyogMSBieXRlIGhvbGUgKi8KIAotCXUzMiBmbGFnczsJCS8qIHR4IGNvbnRyb2wgZmxhZ3MgZGVmaW5lZCBhYm92ZSAqLwotCXU4IGtleV9pZHg7CQkvKiBrZXlpZHggZnJvbSBody0+c2V0X2tleSgpLCB1bmRlZmluZWQgaWYKLQkJCQkgKiBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQgaXMgc2V0ICovCi0JdTggcmV0cnlfbGltaXQ7CQkvKiAxID0gb25seSBmaXJzdCBhdHRlbXB0LCAyID0gb25lIHJldHJ5LCAuLgotCQkJCSAqIFRoaXMgY291bGQgYmUgdXNlZCB3aGVuIHNldF9yZXRyeV9saW1pdAotCQkJCSAqIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyICovCi0JdTggYW50ZW5uYV9zZWxfdHg7IAkvKiAwID0gZGVmYXVsdC9kaXZlcnNpdHksIG90aGVyd2lzZSBiaXQKLQkJCQkgKiBwb3NpdGlvbiByZXByZXNlbnRzIGFudGVubmEgbnVtYmVyIHVzZWQgKi8KLQl1OCBpY3ZfbGVuOwkJLyogbGVuZ3RoIG9mIHRoZSBJQ1YvTUlDIGZpZWxkIGluIG9jdGV0cyAqLwotCXU4IGl2X2xlbjsJCS8qIGxlbmd0aCBvZiB0aGUgSVYgZmllbGQgaW4gb2N0ZXRzICovCi0JdTggcXVldWU7CQkvKiBoYXJkd2FyZSBxdWV1ZSB0byB1c2UgZm9yIHRoaXMgZnJhbWU7Ci0JCQkJICogMCA9IGhpZ2hlc3QsIGh3LT5xdWV1ZXMtMSA9IGxvd2VzdCAqLwotCXUxNiBhaWQ7CQkvKiBTdGF0aW9uIEFJRCAqLwotCWludCB0eXBlOwkvKiBpbnRlcm5hbCAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXk7CisJCQl1bnNpZ25lZCBsb25nIGppZmZpZXM7CisJCQlpbnQgaWZpbmRleDsKKwkJCXUxNiBhaWQ7CisJCQlzOCBydHNfY3RzX3JhdGVfaWR4LCBhbHRfcmV0cnlfcmF0ZV9pZHg7CisJCQl1OCByZXRyeV9saW1pdDsKKwkJCXU4IGljdl9sZW47CisJCQl1OCBpdl9sZW47CisJCX0gY29udHJvbDsKKwkJc3RydWN0IHsKKwkJCXU2NCBhbXBkdV9hY2tfbWFwOworCQkJaW50IGFja19zaWduYWw7CisJCQl1OCByZXRyeV9jb3VudDsKKwkJCWJvb2wgZXhjZXNzaXZlX3JldHJpZXM7CisJCQl1OCBhbXBkdV9hY2tfbGVuOworCQl9IHN0YXR1czsKKwkJdm9pZCAqZHJpdmVyX2RhdGFbSUVFRTgwMjExX1RYX0lORk9fRFJJVkVSX0RBVEFfUFRSU107CisJfTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpJRUVFODAyMTFfU0tCX0NCKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKilza2ItPmNiOworfQorCiAKIC8qKgogICogZW51bSBtYWM4MDIxMV9yeF9mbGFncyAtIHJlY2VpdmUgZmxhZ3MKQEAgLTM1MywxMyArMzg1LDE2IEBACiAgKiBUaGUgbG93LWxldmVsIGRyaXZlciBzaG91bGQgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uICh0aGUgc3Vic2V0CiAgKiBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUpIHRvIHRoZSA4MDIuMTEgY29kZSB3aXRoIGVhY2ggcmVjZWl2ZWQKICAqIGZyYW1lLgorICoKICAqIEBtYWN0aW1lOiB2YWx1ZSBpbiBtaWNyb3NlY29uZHMgb2YgdGhlIDY0LWJpdCBUaW1lIFN5bmNocm9uaXphdGlvbiBGdW5jdGlvbgogICogCShUU0YpIHRpbWVyIHdoZW4gdGhlIGZpcnN0IGRhdGEgc3ltYm9sIChNUERVKSBhcnJpdmVkIGF0IHRoZSBoYXJkd2FyZS4KICAqIEBiYW5kOiB0aGUgYWN0aXZlIGJhbmQgd2hlbiB0aGlzIGZyYW1lIHdhcyByZWNlaXZlZAogICogQGZyZXE6IGZyZXF1ZW5jeSB0aGUgcmFkaW8gd2FzIHR1bmVkIHRvIHdoZW4gcmVjZWl2aW5nIHRoaXMgZnJhbWUsIGluIE1IegotICogQHNzaTogc2lnbmFsIHN0cmVuZ3RoIHdoZW4gcmVjZWl2aW5nIHRoaXMgZnJhbWUKLSAqIEBzaWduYWw6IHVzZWQgYXMgJ3F1YWwnIGluIHN0YXRpc3RpY3MgcmVwb3J0aW5nCi0gKiBAbm9pc2U6IFBIWSBub2lzZSB3aGVuIHJlY2VpdmluZyB0aGlzIGZyYW1lCisgKiBAc2lnbmFsOiBzaWduYWwgc3RyZW5ndGggd2hlbiByZWNlaXZpbmcgdGhpcyBmcmFtZSwgZWl0aGVyIGluIGRCbSwgaW4gZEIgb3IKKyAqCXVuc3BlY2lmaWVkIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGZsYWdzCisgKglASUVFRTgwMjExX0hXX1NJR05BTF8qCisgKiBAbm9pc2U6IG5vaXNlIHdoZW4gcmVjZWl2aW5nIHRoaXMgZnJhbWUsIGluIGRCbS4KKyAqIEBxdWFsOiBvdmVyYWxsIHNpZ25hbCBxdWFsaXR5IGluZGljYXRpb24sIGluIHBlcmNlbnQgKDAtMTAwKS4KICAqIEBhbnRlbm5hOiBhbnRlbm5hIHVzZWQKICAqIEByYXRlX2lkeDogaW5kZXggb2YgZGF0YSByYXRlIGludG8gYmFuZCdzIHN1cHBvcnRlZCByYXRlcwogICogQGZsYWc6ICVSWF9GTEFHXyoKQEAgLTM2OCw2NCArNDAzLDE1IEBACiAJdTY0IG1hY3RpbWU7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCWludCBmcmVxOwotCWludCBzc2k7CiAJaW50IHNpZ25hbDsKIAlpbnQgbm9pc2U7CisJaW50IHF1YWw7CiAJaW50IGFudGVubmE7CiAJaW50IHJhdGVfaWR4OwogCWludCBmbGFnOwogfTsKIAogLyoqCi0gKiBlbnVtIGllZWU4MDIxMV90eF9zdGF0dXNfZmxhZ3MgLSB0cmFuc21pdCBzdGF0dXMgZmxhZ3MKLSAqCi0gKiBTdGF0dXMgZmxhZ3MgdG8gaW5kaWNhdGUgdmFyaW91cyB0cmFuc21pdCBjb25kaXRpb25zLgotICoKLSAqIEBJRUVFODAyMTFfVFhfU1RBVFVTX1RYX0ZJTFRFUkVEOiBUaGUgZnJhbWUgd2FzIG5vdCB0cmFuc21pdHRlZAotICoJYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gU1RBIHdhcyBpbiBwb3dlcnNhdmUgbW9kZS4KLSAqIEBJRUVFODAyMTFfVFhfU1RBVFVTX0FDSzogRnJhbWUgd2FzIGFja25vd2xlZGdlZAotICogQElFRUU4MDIxMV9UWF9TVEFUVVNfQU1QRFU6IFRoZSBmcmFtZSB3YXMgYWdncmVnYXRlZCwgc28gc3RhdHVzCi0gKiAJaXMgZm9yIHRoZSB3aG9sZSBhZ2dyZWdhdGlvbi4KLSAqLwotZW51bSBpZWVlODAyMTFfdHhfc3RhdHVzX2ZsYWdzIHsKLQlJRUVFODAyMTFfVFhfU1RBVFVTX1RYX0ZJTFRFUkVECT0gMTw8MCwKLQlJRUVFODAyMTFfVFhfU1RBVFVTX0FDSwkJPSAxPDwxLAotCUlFRUU4MDIxMV9UWF9TVEFUVVNfQU1QRFUJPSAxPDwyLAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAtIHRyYW5zbWl0IHN0YXR1cwotICoKLSAqIEFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGUgc2hvdWxkIGJlIHByb3ZpZGVkIGZvciBlYWNoIHRyYW5zbWl0dGVkCi0gKiBmcmFtZSB3aXRoIGllZWU4MDIxMV90eF9zdGF0dXMoKS4KLSAqCi0gKiBAY29udHJvbDogYSBjb3B5IG9mIHRoZSAmc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIHBhc3NlZCB0byB0aGUgZHJpdmVyCi0gKglpbiB0aGUgdHgoKSBjYWxsYmFjay4KLSAqIEBmbGFnczogdHJhbnNtaXQgc3RhdHVzIGZsYWdzLCBkZWZpbmVkIGFib3ZlCi0gKiBAcmV0cnlfY291bnQ6IG51bWJlciBvZiByZXRyaWVzCi0gKiBAZXhjZXNzaXZlX3JldHJpZXM6IHNldCB0byAxIGlmIHRoZSBmcmFtZSB3YXMgcmV0cmllZCBtYW55IHRpbWVzCi0gKglidXQgbm90IGFja25vd2xlZGdlZAotICogQGFtcGR1X2Fja19sZW46IG51bWJlciBvZiBhZ2dyZWdhdGVkIGZyYW1lcy4KLSAqIAlyZWxldmFudCBvbmx5IGlmIElFRUU4MDIxMV9UWF9TVEFUVVNfQU1QRFUgd2FzIHNldC4KLSAqIEBhbXBkdV9hY2tfbWFwOiBibG9jayBhY2sgYml0IG1hcCBmb3IgdGhlIGFnZ3JlZ2F0aW9uLgotICogCXJlbGV2YW50IG9ubHkgaWYgSUVFRTgwMjExX1RYX1NUQVRVU19BTVBEVSB3YXMgc2V0LgotICogQGFja19zaWduYWw6IHNpZ25hbCBzdHJlbmd0aCBvZiB0aGUgQUNLIGZyYW1lCi0gKiBAcXVldWVfbGVuZ3RoOiA/PyBSRU1PVkUKLSAqIEBxdWV1ZV9udW1iZXI6ID8/IFJFTU9WRQotICovCi1zdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyB7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIGNvbnRyb2w7Ci0JdTggZmxhZ3M7Ci0JdTggcmV0cnlfY291bnQ7Ci0JYm9vbCBleGNlc3NpdmVfcmV0cmllczsKLQl1OCBhbXBkdV9hY2tfbGVuOwotCXU2NCBhbXBkdV9hY2tfbWFwOwotCWludCBhY2tfc2lnbmFsOwotCWludCBxdWV1ZV9sZW5ndGg7Ci0JaW50IHF1ZXVlX251bWJlcjsKLX07Ci0KLS8qKgogICogZW51bSBpZWVlODAyMTFfY29uZl9mbGFncyAtIGNvbmZpZ3VyYXRpb24gZmxhZ3MKICAqCiAgKiBGbGFncyB0byBkZWZpbmUgUEhZIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwpAQCAtNDMzLDExICs0MTksMTMgQEAKICAqIEBJRUVFODAyMTFfQ09ORl9TSE9SVF9TTE9UX1RJTUU6IHVzZSA4MDIuMTFnIHNob3J0IHNsb3QgdGltZQogICogQElFRUU4MDIxMV9DT05GX1JBRElPVEFQOiBhZGQgcmFkaW90YXAgaGVhZGVyIGF0IHJlY2VpdmUgdGltZSAoaWYgc3VwcG9ydGVkKQogICogQElFRUU4MDIxMV9DT05GX1NVUFBPUlRfSFRfTU9ERTogdXNlIDgwMi4xMW4gSFQgY2FwYWJpbGl0aWVzIChpZiBzdXBwb3J0ZWQpCisgKiBASUVFRTgwMjExX0NPTkZfUFM6IEVuYWJsZSA4MDIuMTEgcG93ZXIgc2F2ZSBtb2RlCiAgKi8KIGVudW0gaWVlZTgwMjExX2NvbmZfZmxhZ3MgewogCUlFRUU4MDIxMV9DT05GX1NIT1JUX1NMT1RfVElNRQk9ICgxPDwwKSwKIAlJRUVFODAyMTFfQ09ORl9SQURJT1RBUAkJPSAoMTw8MSksCiAJSUVFRTgwMjExX0NPTkZfU1VQUE9SVF9IVF9NT0RFCT0gKDE8PDIpLAorCUlFRUU4MDIxMV9DT05GX1BTCQk9ICgxPDwzKSwKIH07CiAKIC8qKgpAQCAtNTUzLDM0ICs1NDEsMzggQEAKIH07CiAKIC8qKgorICogZW51bSBpZWVlODAyMTFfaWZfY29uZl9jaGFuZ2UgLSBpbnRlcmZhY2UgY29uZmlnIGNoYW5nZSBmbGFncworICoKKyAqIEBJRUVFODAyMTFfSUZDQ19CU1NJRDogVGhlIEJTU0lEIGNoYW5nZWQuCisgKiBASUVFRTgwMjExX0lGQ0NfU1NJRDogVGhlIFNTSUQgY2hhbmdlZC4KKyAqIEBJRUVFODAyMTFfSUZDQ19CRUFDT046IFRoZSBiZWFjb24gZm9yIHRoaXMgaW50ZXJmYWNlIGNoYW5nZWQKKyAqCShjdXJyZW50bHkgQVAgYW5kIE1FU0ggb25seSksIHVzZSBpZWVlODAyMTFfYmVhY29uX2dldCgpLgorICovCitlbnVtIGllZWU4MDIxMV9pZl9jb25mX2NoYW5nZSB7CisJSUVFRTgwMjExX0lGQ0NfQlNTSUQJPSBCSVQoMCksCisJSUVFRTgwMjExX0lGQ0NfU1NJRAk9IEJJVCgxKSwKKwlJRUVFODAyMTFfSUZDQ19CRUFDT04JPSBCSVQoMiksCit9OworCisvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAtIGNvbmZpZ3VyYXRpb24gb2YgYW4gaW50ZXJmYWNlCiAgKgotICogQHR5cGU6IHR5cGUgb2YgdGhlIGludGVyZmFjZS4gVGhpcyBpcyBhbHdheXMgdGhlIHNhbWUgYXMgd2FzIHNwZWNpZmllZCBpbgotICoJJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLiBUaGUgdHlwZSBvZiBhbiBpbnRlcmZhY2UgbmV2ZXIgY2hhbmdlcwotICoJZHVyaW5nIHRoZSBsaWZlIG9mIHRoZSBpbnRlcmZhY2U7IHRoaXMgZmllbGQgaXMgcHJlc2VudCBvbmx5IGZvcgotICoJY29udmVuaWVuY2UuCisgKiBAY2hhbmdlZDogcGFyYW1ldGVycyB0aGF0IGhhdmUgY2hhbmdlZCwgc2VlICZlbnVtIGllZWU4MDIxMV9pZl9jb25mX2NoYW5nZS4KICAqIEBic3NpZDogQlNTSUQgb2YgdGhlIG5ldHdvcmsgd2UgYXJlIGFzc29jaWF0ZWQgdG8vY3JlYXRpbmcuCiAgKiBAc3NpZDogdXNlZCAodG9nZXRoZXIgd2l0aCBAc3NpZF9sZW4pIGJ5IGRyaXZlcnMgZm9yIGhhcmR3YXJlIHRoYXQKICAqCWdlbmVyYXRlIGJlYWNvbnMgaW5kZXBlbmRlbnRseS4gVGhlIHBvaW50ZXIgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlCiAgKgljb25maWdfaW50ZXJmYWNlKCkgY2FsbCwgc28gY29weSB0aGUgdmFsdWUgc29tZXdoZXJlIGlmIHlvdSBuZWVkCiAgKglpdC4KICAqIEBzc2lkX2xlbjogbGVuZ3RoIG9mIHRoZSBAc3NpZCBmaWVsZC4KLSAqIEBiZWFjb246IGJlYWNvbiB0ZW1wbGF0ZS4gVmFsaWQgb25seSBpZiBAaG9zdF9nZW5fYmVhY29uX3RlbXBsYXRlIGluCi0gKgkmc3RydWN0IGllZWU4MDIxMV9odyBpcyBzZXQuIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgb2YgZnJlZWluZwotICoJdGhlIHNrX2J1ZmYuCi0gKiBAYmVhY29uX2NvbnRyb2w6IHR4X2NvbnRyb2wgZm9yIHRoZSBiZWFjb24gdGVtcGxhdGUsIHRoaXMgZmllbGQgaXMgb25seQotICoJdmFsaWQgd2hlbiB0aGUgQGJlYWNvbiBmaWVsZCB3YXMgc2V0LgogICoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0byB0aGUgY29uZmlnX2ludGVyZmFjZSgpIGNhbGxiYWNrIG9mCiAgKiAmc3RydWN0IGllZWU4MDIxMV9ody4KICAqLwogc3RydWN0IGllZWU4MDIxMV9pZl9jb25mIHsKLQlpbnQgdHlwZTsKKwl1MzIgY2hhbmdlZDsKIAl1OCAqYnNzaWQ7CiAJdTggKnNzaWQ7CiAJc2l6ZV90IHNzaWRfbGVuOwotCXN0cnVjdCBza19idWZmICpiZWFjb247Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpiZWFjb25fY29udHJvbDsKIH07CiAKIC8qKgpAQCAtNTk3LDggKzU4OSw4IEBACiAKIC8qKgogICogZW51bSBpZWVlODAyMTFfa2V5X2xlbiAtIGtleSBsZW5ndGgKLSAqIEBXRVA0MDogV0VQIDUgYnl0ZSBsb25nIGtleQotICogQFdFUDEwNDogV0VQIDEzIGJ5dGUgbG9uZyBrZXkKKyAqIEBMRU5fV0VQNDA6IFdFUCA1LWJ5dGUgbG9uZyBrZXkKKyAqIEBMRU5fV0VQMTA0OiBXRVAgMTMtYnl0ZSBsb25nIGtleQogICovCiBlbnVtIGllZWU4MDIxMV9rZXlfbGVuIHsKIAlMRU5fV0VQNDAgPSA1LApAQCAtNjE5LDExICs2MTEsMTQgQEAKICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQzogVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYnkKICAqCXRoZSBkcml2ZXIgZm9yIGEgVEtJUCBrZXkgaWYgaXQgcmVxdWlyZXMgTWljaGFlbCBNSUMKICAqCWdlbmVyYXRpb24gaW4gc29mdHdhcmUuCisgKiBASUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFOiBTZXQgYnkgbWFjODAyMTEsIHRoaXMgZmxhZyBpbmRpY2F0ZXMKKyAqCXRoYXQgdGhlIGtleSBpcyBwYWlyd2lzZSByYXRoZXIgdGhlbiBhIHNoYXJlZCBrZXkuCiAgKi8KIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7CiAJSUVFRTgwMjExX0tFWV9GTEFHX1dNTV9TVEEJPSAxPDwwLAogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVgk9IDE8PDEsCiAJSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM9IDE8PDIsCisJSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFCT0gMTw8MywKIH07CiAKIC8qKgpAQCAtNjM5LDcgKzYzNCwxMiBAQAogICogQGZsYWdzOiBrZXkgZmxhZ3MsIHNlZSAmZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzLgogICogQGtleWlkeDogdGhlIGtleSBpbmRleCAoMC0zKQogICogQGtleWxlbjoga2V5IG1hdGVyaWFsIGxlbmd0aAotICogQGtleToga2V5IG1hdGVyaWFsCisgKiBAa2V5OiBrZXkgbWF0ZXJpYWwuIEZvciBBTEdfVEtJUCB0aGUga2V5IGlzIGVuY29kZWQgYXMgYSAyNTYtYml0ICgzMiBieXRlKQorICogCWRhdGEgYmxvY2s6CisgKiAJLSBUZW1wb3JhbCBFbmNyeXB0aW9uIEtleSAoMTI4IGJpdHMpCisgKiAJLSBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFR4IE1JQyBLZXkgKDY0IGJpdHMpCisgKiAJLSBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFJ4IE1JQyBLZXkgKDY0IGJpdHMpCisgKgogICovCiBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mIHsKIAllbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZzsKQEAgLTY2Nyw3ICs2NjcsNyBAQAogICogZW51bSBzdGFfbm90aWZ5X2NtZCAtIHN0YSBub3RpZnkgY29tbWFuZAogICoKICAqIFVzZWQgd2l0aCB0aGUgc3RhX25vdGlmeSgpIGNhbGxiYWNrIGluICZzdHJ1Y3QgaWVlZTgwMjExX29wcywgdGhpcwotICogaW5kaWNhdGVzIGFkZGl0aW9uIGFuZCByZW1vdmFsIG9mIGEgc3RhdGlvbiB0byBzdGF0aW9uIHRhYmxlCisgKiBpbmRpY2F0ZXMgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgYSBzdGF0aW9uIHRvIHN0YXRpb24gdGFibGUuCiAgKgogICogQFNUQV9OT1RJRllfQUREOiBhIHN0YXRpb24gd2FzIGFkZGVkIHRvIHRoZSBzdGF0aW9uIHRhYmxlCiAgKiBAU1RBX05PVElGWV9SRU1PVkU6IGEgc3RhdGlvbiBiZWluZyByZW1vdmVkIGZyb20gdGhlIHN0YXRpb24gdGFibGUKQEAgLTcwMCwxNSArNzAwLDYgQEAKICAqIGFueSBwYXJ0aWN1bGFyIGZsYWdzLiBUaGVyZSBhcmUgc29tZSBleGNlcHRpb25zIHRvIHRoaXMgcnVsZSwKICAqIGhvd2V2ZXIsIHNvIHlvdSBhcmUgYWR2aXNlZCB0byByZXZpZXcgdGhlc2UgZmxhZ3MgY2FyZWZ1bGx5LgogICoKLSAqIEBJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFOgotICoJVGhlIGRldmljZSBvbmx5IG5lZWRzIHRvIGJlIHN1cHBsaWVkIHdpdGggYSBiZWFjb24gdGVtcGxhdGUuCi0gKglJZiB5b3UgbmVlZCB0aGUgaG9zdCB0byBnZW5lcmF0ZSBlYWNoIGJlYWNvbiB0aGVuIGRvbid0IHVzZQotICoJdGhpcyBmbGFnIGFuZCBjYWxsIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgd2hlbiB5b3UgbmVlZCB0aGUKLSAqCW5leHQgYmVhY29uIGZyYW1lLiBOb3RlIHRoYXQgaWYgeW91IHNldCB0aGlzIGZsYWcsIHlvdSBtdXN0Ci0gKglpbXBsZW1lbnQgdGhlIHNldF90aW0oKSBjYWxsYmFjayBmb3IgcG93ZXJzYXZlIG1vZGUgdG8gd29yawotICoJcHJvcGVybHkuCi0gKglUaGlzIGZsYWcgaXMgb25seSByZWxldmFudCBmb3IgYWNjZXNzLXBvaW50IG1vZGUuCi0gKgogICogQElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1M6CiAgKglJbmRpY2F0ZXMgdGhhdCByZWNlaXZlZCBmcmFtZXMgcGFzc2VkIHRvIHRoZSBzdGFjayBpbmNsdWRlCiAgKgl0aGUgRkNTIGF0IHRoZSBlbmQuCkBAIC03MzAsNiArNzIxLDI5IEBACiAgKiBASUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfUFJFQU1CTEVfSU5DQVBBQkxFOgogICoJSGFyZHdhcmUgaXMgbm90IGNhcGFibGUgb2YgcmVjZWl2aW5nIGZyYW1lcyB3aXRoIHNob3J0IHByZWFtYmxlIG9uCiAgKgl0aGUgMi40IEdIeiBiYW5kLgorICoKKyAqIEBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQzoKKyAqCUhhcmR3YXJlIGNhbiBwcm92aWRlIHNpZ25hbCB2YWx1ZXMgYnV0IHdlIGRvbid0IGtub3cgaXRzIHVuaXRzLiBXZQorICoJZXhwZWN0IHZhbHVlcyBiZXR3ZWVuIDAgYW5kIEBtYXhfc2lnbmFsLgorICoJSWYgcG9zc2libGUgcGxlYXNlIHByb3ZpZGUgZEIgb3IgZEJtIGluc3RlYWQuCisgKgorICogQElFRUU4MDIxMV9IV19TSUdOQUxfREI6CisgKglIYXJkd2FyZSBnaXZlcyBzaWduYWwgdmFsdWVzIGluIGRCLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbSBhbgorICoJYXJiaXRyYXJ5LCBmaXhlZCByZWZlcmVuY2UuIFdlIGV4cGVjdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCBAbWF4X3NpZ25hbC4KKyAqCUlmIHBvc3NpYmxlIHBsZWFzZSBwcm92aWRlIGRCbSBpbnN0ZWFkLgorICoKKyAqIEBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTToKKyAqCUhhcmR3YXJlIGdpdmVzIHNpZ25hbCB2YWx1ZXMgaW4gZEJtLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbQorICoJb25lIG1pbGxpd2F0dC4gVGhpcyBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBzaW5jZSBpdCBpcyBzdGFuZGFyZGl6ZWQKKyAqCWJldHdlZW4gZGlmZmVyZW50IGRldmljZXMuIEBtYXhfc2lnbmFsIGRvZXMgbm90IG5lZWQgdG8gYmUgc2V0LgorICoKKyAqIEBJRUVFODAyMTFfSFdfTk9JU0VfREJNOgorICoJSGFyZHdhcmUgY2FuIHByb3ZpZGUgbm9pc2UgKHJhZGlvIGludGVyZmVyZW5jZSkgdmFsdWVzIGluIHVuaXRzIGRCbSwKKyAqICAgICAgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20gb25lIG1pbGxpd2F0dC4KKyAqCisgKiBASUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ6CisgKiAJSGFyZHdhcmUgc3VwcG9ydHMgc3BlY3RydW0gbWFuYWdlbWVudCBkZWZpbmVkIGluIDgwMi4xMWgKKyAqIAlNZWFzdXJlbWVudCwgQ2hhbm5lbCBTd2l0Y2gsIFF1aWV0aW5nLCBUUEMKICAqLwogZW51bSBpZWVlODAyMTFfaHdfZmxhZ3MgewogCUlFRUU4MDIxMV9IV19IT1NUX0dFTl9CRUFDT05fVEVNUExBVEUJCT0gMTw8MCwKQEAgLTczNyw2ICs3NTEsMTEgQEAKIAlJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HCT0gMTw8MiwKIAlJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9TTE9UX0lOQ0FQQUJMRQkJPSAxPDwzLAogCUlFRUU4MDIxMV9IV18yR0haX1NIT1JUX1BSRUFNQkxFX0lOQ0FQQUJMRQk9IDE8PDQsCisJSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMJCQk9IDE8PDUsCisJSUVFRTgwMjExX0hXX1NJR05BTF9EQgkJCQk9IDE8PDYsCisJSUVFRTgwMjExX0hXX1NJR05BTF9EQk0JCQkJPSAxPDw3LAorCUlFRUU4MDIxMV9IV19OT0lTRV9EQk0JCQkJPSAxPDw4LAorCUlFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UCQkJPSAxPDw5LAogfTsKIAogLyoqCkBAIC03NTQsOCArNzczLDExIEBACiAgKiBAY29uZjogJnN0cnVjdCBpZWVlODAyMTFfY29uZiwgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGRvbid0IHVzZS4KICAqCiAgKiBAd29ya3F1ZXVlOiBzaW5nbGUgdGhyZWFkZWQgd29ya3F1ZXVlIGF2YWlsYWJsZSBmb3IgZHJpdmVyIHVzZSwKLSAqCWFsbG9jYXRlZCBieSBtYWM4MDIxMSBvbiByZWdpc3RyYXRpb24gYW5kIGZsdXNoZWQgb24KLSAqCXVucmVnaXN0cmF0aW9uLgorICoJYWxsb2NhdGVkIGJ5IG1hYzgwMjExIG9uIHJlZ2lzdHJhdGlvbiBhbmQgZmx1c2hlZCB3aGVuIGFuCisgKglpbnRlcmZhY2UgaXMgcmVtb3ZlZC4KKyAqCU5PVElDRTogQWxsIHdvcmsgcGVyZm9ybWVkIG9uIHRoaXMgd29ya3F1ZXVlIHNob3VsZCBORVZFUgorICoJYWNxdWlyZSB0aGUgUlROTCBsb2NrIChpLmUuIERvbid0IHVzZSB0aGUgZnVuY3Rpb24KKyAqCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKCkpCiAgKgogICogQHByaXY6IHBvaW50ZXIgdG8gcHJpdmF0ZSBhcmVhIHRoYXQgd2FzIGFsbG9jYXRlZCBmb3IgZHJpdmVyIHVzZQogICoJYWxvbmcgd2l0aCB0aGlzIHN0cnVjdHVyZS4KQEAgLTc2NywxNSArNzg5LDE4IEBACiAgKgogICogQGNoYW5uZWxfY2hhbmdlX3RpbWU6IHRpbWUgKGluIG1pY3Jvc2Vjb25kcykgaXQgdGFrZXMgdG8gY2hhbmdlIGNoYW5uZWxzLgogICoKLSAqIEBtYXhfcnNzaTogTWF4aW11bSB2YWx1ZSBmb3Igc3NpIGluIFJYIGluZm9ybWF0aW9uLCB1c2UKLSAqCW5lZ2F0aXZlIG51bWJlcnMgZm9yIGRCbSBhbmQgMCB0byBpbmRpY2F0ZSBubyBzdXBwb3J0LgotICoKLSAqIEBtYXhfc2lnbmFsOiBsaWtlIEBtYXhfcnNzaSwgYnV0IGZvciB0aGUgc2lnbmFsIHZhbHVlLgotICoKLSAqIEBtYXhfbm9pc2U6IGxpa2UgQG1heF9yc3NpLCBidXQgZm9yIHRoZSBub2lzZSB2YWx1ZS4KKyAqIEBtYXhfc2lnbmFsOiBNYXhpbXVtIHZhbHVlIGZvciBzaWduYWwgKHJzc2kpIGluIFJYIGluZm9ybWF0aW9uLCB1c2VkCisgKiAgICAgb25seSB3aGVuIEBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQyBvciBASUVFRTgwMjExX0hXX1NJR05BTF9EQgogICoKICAqIEBxdWV1ZXM6IG51bWJlciBvZiBhdmFpbGFibGUgaGFyZHdhcmUgdHJhbnNtaXQgcXVldWVzIGZvcgotICoJZGF0YSBwYWNrZXRzLiBXTU0vUW9TIHJlcXVpcmVzIGF0IGxlYXN0IGZvdXIuCisgKglkYXRhIHBhY2tldHMuIFdNTS9Rb1MgcmVxdWlyZXMgYXQgbGVhc3QgZm91ciwgdGhlc2UKKyAqCXF1ZXVlcyBuZWVkIHRvIGhhdmUgY29uZmlndXJhYmxlIGFjY2VzcyBwYXJhbWV0ZXJzLgorICoKKyAqIEBhbXBkdV9xdWV1ZXM6IG51bWJlciBvZiBhdmFpbGFibGUgaGFyZHdhcmUgdHJhbnNtaXQgcXVldWVzCisgKglmb3IgQS1NUERVIHBhY2tldHMsIHRoZXNlIGhhdmUgbm8gYWNjZXNzIHBhcmFtZXRlcnMKKyAqCWJlY2F1c2UgdGhleSdyZSB1c2VkIG9ubHkgZm9yIEEtTVBEVSBmcmFtZXMuIE5vdGUgdGhhdAorICoJbWFjODAyMTEgd2lsbCBub3QgY3VycmVudGx5IHVzZSBhbnkgb2YgdGhlIHJlZ3VsYXIgcXVldWVzCisgKglmb3IgYWdncmVnYXRpb24uCiAgKgogICogQHJhdGVfY29udHJvbF9hbGdvcml0aG06IHJhdGUgY29udHJvbCBhbGdvcml0aG0gZm9yIHRoaXMgaGFyZHdhcmUuCiAgKglJZiB1bnNldCAoTlVMTCksIHRoZSBkZWZhdWx0IGFsZ29yaXRobSB3aWxsIGJlIHVzZWQuIE11c3QgYmUKQEAgLTc5NCwxMCArODE5LDggQEAKIAl1bnNpZ25lZCBpbnQgZXh0cmFfdHhfaGVhZHJvb207CiAJaW50IGNoYW5uZWxfY2hhbmdlX3RpbWU7CiAJaW50IHZpZl9kYXRhX3NpemU7Ci0JdTggcXVldWVzOwotCXM4IG1heF9yc3NpOworCXUxNiBxdWV1ZXMsIGFtcGR1X3F1ZXVlczsKIAlzOCBtYXhfc2lnbmFsOwotCXM4IG1heF9ub2lzZTsKIH07CiAKIC8qKgpAQCAtODIyLDYgKzg0NSw0MyBAQAogCW1lbWNweShody0+d2lwaHktPnBlcm1fYWRkciwgYWRkciwgRVRIX0FMRU4pOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVybiBody0+cXVldWVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlyZXR1cm4gaHctPnF1ZXVlcyArIGh3LT5hbXBkdV9xdWV1ZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9yYXRlICoKK2llZWU4MDIxMV9nZXRfdHhfcmF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjKQoreworCWlmIChXQVJOX09OKGMtPnR4X3JhdGVfaWR4IDwgMCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiAmaHctPndpcGh5LT5iYW5kc1tjLT5iYW5kXS0+Yml0cmF0ZXNbYy0+dHhfcmF0ZV9pZHhdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqCitpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqYykKK3sKKwlpZiAoYy0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4IDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZody0+d2lwaHktPmJhbmRzW2MtPmJhbmRdLT5iaXRyYXRlc1tjLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHhdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqCitpZWVlODAyMTFfZ2V0X2FsdF9yZXRyeV9yYXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmMpCit7CisJaWYgKGMtPmNvbnRyb2wuYWx0X3JldHJ5X3JhdGVfaWR4IDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZody0+d2lwaHktPmJhbmRzW2MtPmJhbmRdLT5iaXRyYXRlc1tjLT5jb250cm9sLmFsdF9yZXRyeV9yYXRlX2lkeF07Cit9CisKIC8qKgogICogRE9DOiBIYXJkd2FyZSBjcnlwdG8gYWNjZWxlcmF0aW9uCiAgKgpAQCAtOTc5LDggKzEwMzksMTAgQEAKICAqIEB0eDogSGFuZGxlciB0aGF0IDgwMi4xMSBtb2R1bGUgY2FsbHMgZm9yIGVhY2ggdHJhbnNtaXR0ZWQgZnJhbWUuCiAgKglza2IgY29udGFpbnMgdGhlIGJ1ZmZlciBzdGFydGluZyBmcm9tIHRoZSBJRUVFIDgwMi4xMSBoZWFkZXIuCiAgKglUaGUgbG93LWxldmVsIGRyaXZlciBzaG91bGQgc2VuZCB0aGUgZnJhbWUgb3V0IGJhc2VkIG9uCi0gKgljb25maWd1cmF0aW9uIGluIHRoZSBUWCBjb250cm9sIGRhdGEuIE11c3QgYmUgaW1wbGVtZW50ZWQgYW5kCi0gKglhdG9taWMuCisgKgljb25maWd1cmF0aW9uIGluIHRoZSBUWCBjb250cm9sIGRhdGEuIFRoaXMgaGFuZGxlciBzaG91bGQsCisgKglwcmVmZXJhYmx5LCBuZXZlciBmYWlsIGFuZCBzdG9wIHF1ZXVlcyBhcHByb3ByaWF0ZWx5LCBtb3JlCisgKglpbXBvcnRhbnRseSwgaG93ZXZlciwgaXQgbXVzdCBuZXZlciBmYWlsIGZvciBBLU1QRFUtcXVldWVzLgorICoJTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgYXRvbWljLgogICoKICAqIEBzdGFydDogQ2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBoYXJkd2FyZQogICoJaXMgZW5hYmxlZC4gVGhpcyBzaG91bGQgdHVybiBvbiB0aGUgaGFyZHdhcmUgYW5kIG11c3QgdHVybiBvbgpAQCAtMTA3MiwxNSArMTEzNCwxMyBAQAogICoJb2YgYXNzb2NhaXRlZCBzdGF0aW9uIG9yIEFQLgogICoKICAqIEBjb25mX3R4OiBDb25maWd1cmUgVFggcXVldWUgcGFyYW1ldGVycyAoRURDRiAoYWlmcywgY3dfbWluLCBjd19tYXgpLAotICoJYnVyc3RpbmcpIGZvciBhIGhhcmR3YXJlIFRYIHF1ZXVlLiBUaGUgQHF1ZXVlIHBhcmFtZXRlciB1c2VzIHRoZQotICoJJUlFRUU4MDIxMV9UWF9RVUVVRV8qIGNvbnN0YW50cy4gTXVzdCBiZSBhdG9taWMuCisgKglidXJzdGluZykgZm9yIGEgaGFyZHdhcmUgVFggcXVldWUuIE11c3QgYmUgYXRvbWljLgogICoKICAqIEBnZXRfdHhfc3RhdHM6IEdldCBzdGF0aXN0aWNzIG9mIHRoZSBjdXJyZW50IFRYIHF1ZXVlIHN0YXR1cy4gVGhpcyBpcyB1c2VkCiAgKgl0byBnZXQgbnVtYmVyIG9mIGN1cnJlbnRseSBxdWV1ZWQgcGFja2V0cyAocXVldWUgbGVuZ3RoKSwgbWF4aW11bSBxdWV1ZQogICoJc2l6ZSAobGltaXQpLCBhbmQgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgc2VudCB1c2luZyBlYWNoIFRYIHF1ZXVlCi0gKgkoY291bnQpLiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgZm9yIFdNTSB0byBmaW5kIG91dCB3aGljaCBUWAotICoJcXVldWVzIGhhdmUgcm9vbSBmb3IgbW9yZSBwYWNrZXRzIGFuZCBieSBob3N0YXBkIHRvIHByb3ZpZGUKLSAqCXN0YXRpc3RpY3MgYWJvdXQgdGhlIGN1cnJlbnQgcXVldWVpbmcgc3RhdGUgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuCisgKgkoY291bnQpLiBUaGUgJ3N0YXRzJyBwb2ludGVyIHBvaW50cyB0byBhbiBhcnJheSB0aGF0IGhhcyBody0+cXVldWVzICsKKyAqCWh3LT5hbXBkdV9xdWV1ZXMgaXRlbXMuCiAgKgogICogQGdldF90c2Y6IEdldCB0aGUgY3VycmVudCBUU0YgdGltZXIgdmFsdWUgZnJvbSBmaXJtd2FyZS9oYXJkd2FyZS4gQ3VycmVudGx5LAogICoJdGhpcyBpcyBvbmx5IHVzZWQgZm9yIElCU1MgbW9kZSBkZWJ1Z2dpbmcgYW5kLCBhcyBzdWNoLCBpcyBub3QgYQpAQCAtMTA5MSwxNyArMTE1MSw2IEBACiAgKglmdW5jdGlvbiBpcyBvcHRpb25hbCBpZiB0aGUgZmlybXdhcmUvaGFyZHdhcmUgdGFrZXMgZnVsbCBjYXJlIG9mCiAgKglUU0Ygc3luY2hyb25pemF0aW9uLgogICoKLSAqIEBiZWFjb25fdXBkYXRlOiBTZXR1cCBiZWFjb24gZGF0YSBmb3IgSUJTUyBiZWFjb25zLiBVbmxpa2UgYWNjZXNzIHBvaW50LAotICoJSUJTUyB1c2VzIGEgZml4ZWQgYmVhY29uIGZyYW1lIHdoaWNoIGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhpcwotICoJZnVuY3Rpb24uCi0gKglJZiB0aGUgZHJpdmVyIHJldHVybnMgc3VjY2VzcyAoMCkgZnJvbSB0aGlzIGNhbGxiYWNrLCBpdCBvd25zCi0gKgl0aGUgc2tiLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgdG8ga2ZyZWVfc2tiKCkgaXQuCi0gKglUaGUgY29udHJvbCBzdHJ1Y3R1cmUgaXMgbm90IGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gVGhhdCBtZWFucyB0aGUKLSAqCWRyaXZlciBkb2VzIG5vdCBvd24gdGhlIHBvaW50ZXIgYW5kIGlmIGl0IG5lZWRzIGl0IHNvbWV3aGVyZQotICoJb3V0c2lkZSBvZiB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLCBpdCBtdXN0IGNvcHkgaXQKLSAqCXNvbWV3aGVyZSBlbHNlLgotICoJVGhpcyBoYW5kbGVyIGlzIHJlcXVpcmVkIG9ubHkgZm9yIElCU1MgbW9kZS4KLSAqCiAgKiBAdHhfbGFzdF9iZWFjb246IERldGVybWluZSB3aGV0aGVyIHRoZSBsYXN0IElCU1MgYmVhY29uIHdhcyBzZW50IGJ5IHVzLgogICoJVGhpcyBpcyBuZWVkZWQgb25seSBmb3IgSUJTUyBtb2RlIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMKICAqCXVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVwbHkgdG8gUHJvYmUgUmVxdWVzdHMuCkBAIC0xMTE2LDggKzExNjUsNyBAQAogICogCXRoYXQgVFgvUlhfU1RPUCBjYW4gcGFzcyBOVUxMIGZvciB0aGlzIHBhcmFtZXRlci4KICAqLwogc3RydWN0IGllZWU4MDIxMV9vcHMgewotCWludCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpOworCWludCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50ICgqc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAl2b2lkICgqc3RvcCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWludCAoKmFkZF9pbnRlcmZhY2UpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTE1NCwxNSArMTIwMiwxMiBAQAogCQkJICAgICAgIHUzMiBzaG9ydF9yZXRyeSwgdTMyIGxvbmdfcmV0cik7CiAJdm9pZCAoKnN0YV9ub3RpZnkpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJZW51bSBzdGFfbm90aWZ5X2NtZCwgY29uc3QgdTggKmFkZHIpOwotCWludCAoKmNvbmZfdHgpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUsCisJaW50ICgqY29uZl90eCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpOwogCWludCAoKmdldF90eF9zdGF0cykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogCXU2NCAoKmdldF90c2YpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAl2b2lkICgqcmVzZXRfdHNmKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci0JaW50ICgqYmVhY29uX3VwZGF0ZSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCk7CiAJaW50ICgqdHhfbGFzdF9iZWFjb24pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCphbXBkdV9hY3Rpb24pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKQEAgLTEyOTIsNyArMTMzNyw3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBmcmVlcyBldmVyeXRoaW5nIHRoYXQgd2FzIGFsbG9jYXRlZCwgaW5jbHVkaW5nIHRoZQogICogcHJpdmF0ZSBkYXRhIGZvciB0aGUgZHJpdmVyLiBZb3UgbXVzdCBjYWxsIGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KCkKLSAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKgogICogQGh3OiB0aGUgaGFyZHdhcmUgdG8gZnJlZQogICovCkBAIC0xMzU4LDE2ICsxNDAzLDEyIEBACiAgKgogICogQGh3OiB0aGUgaGFyZHdhcmUgdGhlIGZyYW1lIHdhcyB0cmFuc21pdHRlZCBieQogICogQHNrYjogdGhlIGZyYW1lIHRoYXQgd2FzIHRyYW5zbWl0dGVkLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKLSAqIEBzdGF0dXM6IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBmcmFtZTsgdGhlIHN0YXR1cyBwb2ludGVyIG5lZWQgbm90Ci0gKgliZSB2YWxpZCBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW5kIGlzIG5vdCBmcmVlZCBieSBtYWM4MDIxMSwKLSAqCWl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaXQgcG9pbnRzIHRvIGEgc3RhY2sgYXJlYQogICovCiB2b2lkIGllZWU4MDIxMV90eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqc3RhdHVzKTsKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoqCi0gKiBpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUgLSBpcnEtc2FmZSB0cmFuc21pdCBzdGF0dXMgY2FsbGJhY2sKKyAqIGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZSAtIElSUS1zYWZlIHRyYW5zbWl0IHN0YXR1cyBjYWxsYmFjawogICoKICAqIExpa2UgaWVlZTgwMjExX3R4X3N0YXR1cygpIGJ1dCBjYW4gYmUgY2FsbGVkIGluIElSUSBjb250ZXh0CiAgKiAoaW50ZXJuYWxseSBkZWZlcnMgdG8gYSB0YXNrbGV0LikKQEAgLTEzNzcsMTMgKzE0MTgsOSBAQAogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoZSBmcmFtZSB3YXMgdHJhbnNtaXR0ZWQgYnkKICAqIEBza2I6IHRoZSBmcmFtZSB0aGF0IHdhcyB0cmFuc21pdHRlZCwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsCi0gKiBAc3RhdHVzOiBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoaXMgZnJhbWU7IHRoZSBzdGF0dXMgcG9pbnRlciBuZWVkIG5vdAotICoJYmUgdmFsaWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuZCBpcyBub3QgZnJlZWQgYnkgbWFjODAyMTEsCi0gKglpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGl0IHBvaW50cyB0byBhIHN0YWNrIGFyZWEKICAqLwogdm9pZCBpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzdGF0dXMpOworCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfYmVhY29uX2dldCAtIGJlYWNvbiBnZW5lcmF0aW9uIGZ1bmN0aW9uCkBAIC0xMzk5LDggKzE0MzYsNyBAQAogICogaXMgcmVzcG9uc2libGUgb2YgZnJlZWluZyBpdC4KICAqLwogc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9iZWFjb25fZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCk7CisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfcnRzX2dldCAtIFJUUyBmcmFtZSBnZW5lcmF0aW9uIGZ1bmN0aW9uCkBAIC0xNDA4LDcgKzE0NDQsNyBAQAogICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCiAgKiBAZnJhbWU6IHBvaW50ZXIgdG8gdGhlIGZyYW1lIHRoYXQgaXMgZ29pbmcgdG8gYmUgcHJvdGVjdGVkIGJ5IHRoZSBSVFMuCiAgKiBAZnJhbWVfbGVuOiB0aGUgZnJhbWUgbGVuZ3RoIChpbiBvY3RldHMpLgotICogQGZyYW1lX3R4Y3RsOiAmc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIG9mIHRoZSBmcmFtZS4KKyAqIEBmcmFtZV90eGN0bDogJnN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyBvZiB0aGUgZnJhbWUuCiAgKiBAcnRzOiBUaGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSBSVFMgZnJhbWUuCiAgKgogICogSWYgdGhlIFJUUyBmcmFtZXMgYXJlIGdlbmVyYXRlZCBieSB0aGUgaG9zdCBzeXN0ZW0gKGkuZS4sIG5vdCBpbgpAQCAtMTQxOCw3ICsxNDU0LDcgQEAKICAqLwogdm9pZCBpZWVlODAyMTFfcnRzX2dldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICAgICAgIGNvbnN0IHZvaWQgKmZyYW1lLCBzaXplX3QgZnJhbWVfbGVuLAotCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpmcmFtZV90eGN0bCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqZnJhbWVfdHhjdGwsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J0cyAqcnRzKTsKIAogLyoqCkBAIC0xNDI2LDcgKzE0NjIsNyBAQAogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCiAgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KICAqIEBmcmFtZV9sZW46IHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIHRoYXQgaXMgZ29pbmcgdG8gYmUgcHJvdGVjdGVkIGJ5IHRoZSBSVFMuCi0gKiBAZnJhbWVfdHhjdGw6ICZzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgb2YgdGhlIGZyYW1lLgorICogQGZyYW1lX3R4Y3RsOiAmc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIG9mIHRoZSBmcmFtZS4KICAqCiAgKiBJZiB0aGUgUlRTIGlzIGdlbmVyYXRlZCBpbiBmaXJtd2FyZSwgYnV0IHRoZSBob3N0IHN5c3RlbSBtdXN0IHByb3ZpZGUKICAqIHRoZSBkdXJhdGlvbiBmaWVsZCwgdGhlIGxvdy1sZXZlbCBkcml2ZXIgdXNlcyB0aGlzIGZ1bmN0aW9uIHRvIHJlY2VpdmUKQEAgLTE0MzQsNyArMTQ3MCw3IEBACiAgKi8KIF9fbGUxNiBpZWVlODAyMTFfcnRzX2R1cmF0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc2l6ZV90IGZyYW1lX2xlbiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqZnJhbWVfdHhjdGwpOworCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpmcmFtZV90eGN0bCk7CiAKIC8qKgogICogaWVlZTgwMjExX2N0c3Rvc2VsZl9nZXQgLSBDVFMtdG8tc2VsZiBmcmFtZSBnZW5lcmF0aW9uIGZ1bmN0aW9uCkBAIC0xNDQyLDcgKzE0NzgsNyBAQAogICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCiAgKiBAZnJhbWU6IHBvaW50ZXIgdG8gdGhlIGZyYW1lIHRoYXQgaXMgZ29pbmcgdG8gYmUgcHJvdGVjdGVkIGJ5IHRoZSBDVFMtdG8tc2VsZi4KICAqIEBmcmFtZV9sZW46IHRoZSBmcmFtZSBsZW5ndGggKGluIG9jdGV0cykuCi0gKiBAZnJhbWVfdHhjdGw6ICZzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgb2YgdGhlIGZyYW1lLgorICogQGZyYW1lX3R4Y3RsOiAmc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIG9mIHRoZSBmcmFtZS4KICAqIEBjdHM6IFRoZSBidWZmZXIgd2hlcmUgdG8gc3RvcmUgdGhlIENUUy10by1zZWxmIGZyYW1lLgogICoKICAqIElmIHRoZSBDVFMtdG8tc2VsZiBmcmFtZXMgYXJlIGdlbmVyYXRlZCBieSB0aGUgaG9zdCBzeXN0ZW0gKGkuZS4sIG5vdCBpbgpAQCAtMTQ1Myw3ICsxNDg5LDcgQEAKIHZvaWQgaWVlZTgwMjExX2N0c3Rvc2VsZl9nZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkgICAgIGNvbnN0IHZvaWQgKmZyYW1lLCBzaXplX3QgZnJhbWVfbGVuLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmZyYW1lX3R4Y3RsLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmZyYW1lX3R4Y3RsLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2N0cyAqY3RzKTsKIAogLyoqCkBAIC0xNDYxLDcgKzE0OTcsNyBAQAogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCiAgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KICAqIEBmcmFtZV9sZW46IHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIHRoYXQgaXMgZ29pbmcgdG8gYmUgcHJvdGVjdGVkIGJ5IHRoZSBDVFMtdG8tc2VsZi4KLSAqIEBmcmFtZV90eGN0bDogJnN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBvZiB0aGUgZnJhbWUuCisgKiBAZnJhbWVfdHhjdGw6ICZzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gb2YgdGhlIGZyYW1lLgogICoKICAqIElmIHRoZSBDVFMtdG8tc2VsZiBpcyBnZW5lcmF0ZWQgaW4gZmlybXdhcmUsIGJ1dCB0aGUgaG9zdCBzeXN0ZW0gbXVzdCBwcm92aWRlCiAgKiB0aGUgZHVyYXRpb24gZmllbGQsIHRoZSBsb3ctbGV2ZWwgZHJpdmVyIHVzZXMgdGhpcyBmdW5jdGlvbiB0byByZWNlaXZlCkBAIC0xNDcwLDcgKzE1MDYsNyBAQAogX19sZTE2IGllZWU4MDIxMV9jdHN0b3NlbGZfZHVyYXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJICAgIHNpemVfdCBmcmFtZV9sZW4sCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqZnJhbWVfdHhjdGwpOworCQkJCSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmZyYW1lX3R4Y3RsKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbiAtIENhbGN1bGF0ZSB0aGUgZHVyYXRpb24gZmllbGQgZm9yIGEgZnJhbWUKQEAgLTE1MDksOCArMTU0NSw3IEBACiAgKiB1c2UgY29tbW9uIGNvZGUgZm9yIGFsbCBiZWFjb25zLgogICovCiBzdHJ1Y3Qgc2tfYnVmZiAqCi1pZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpOworaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiAKIC8qKgogICogaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2IgLSBnZXQgaGVhZGVyIGxlbmd0aCBmcm9tIGRhdGEKQEAgLTE1MjIsNyArMTU1Nyw3IEBACiAgKgogICogQHNrYjogdGhlIGZyYW1lCiAgKi8KLWludCBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3Vuc2lnbmVkIGludCBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfZ2V0X2hkcmxlbiAtIGdldCBoZWFkZXIgbGVuZ3RoIGZyb20gZnJhbWUgY29udHJvbApAQCAtMTUzNSw2ICsxNTcwLDEyIEBACiBpbnQgaWVlZTgwMjExX2dldF9oZHJsZW4odTE2IGZjKTsKIAogLyoqCisgKiBpZWVlODAyMTFfaGRybGVuIC0gZ2V0IGhlYWRlciBsZW5ndGggaW4gYnl0ZXMgZnJvbSBmcmFtZSBjb250cm9sCisgKiBAZmM6IGZyYW1lIGNvbnRyb2wgZmllbGQgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQKKyAqLwordW5zaWduZWQgaW50IGllZWU4MDIxMV9oZHJsZW4oX19sZTE2IGZjKTsKKworLyoqCiAgKiBpZWVlODAyMTFfZ2V0X3RraXBfa2V5IC0gZ2V0IGEgVEtJUCByYzQgZm9yIHNrYgogICoKICAqIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgYSBUS0lQIHJjNCBrZXkgZm9yIGFuIHNrYi4gSXQgY29tcHV0ZXMKQEAgLTE1NDUsNiArMTU4Niw4IEBACiAgKiBAa2V5Y29uZjogdGhlIHBhcmFtZXRlciBwYXNzZWQgd2l0aCB0aGUgc2V0IGtleQogICogQHNrYjogdGhlIHNrYiBmb3Igd2hpY2ggdGhlIGtleSBpcyBuZWVkZWQKICAqIEByYzRrZXk6IGEgYnVmZmVyIHRvIHdoaWNoIHRoZSBrZXkgd2lsbCBiZSB3cml0dGVuCisgKiBAdHlwZTogVEJECisgKiBAa2V5OiBUQkQKICAqLwogdm9pZCBpZWVlODAyMTFfZ2V0X3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTE1NjgsMTQgKzE2MTEsNiBAQAogdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlKTsKIAogLyoqCi0gKiBpZWVlODAyMTFfc3RhcnRfcXVldWVzIC0gc3RhcnQgYWxsIHF1ZXVlcwotICogQGh3OiBwb2ludGVyIHRvIGFzIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCi0gKgotICogRHJpdmVycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBuZXRpZl9zdGFydF9xdWV1ZS4KLSAqLwotdm9pZCBpZWVlODAyMTFfc3RhcnRfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLQotLyoqCiAgKiBpZWVlODAyMTFfc3RvcF9xdWV1ZXMgLSBzdG9wIGFsbCBxdWV1ZXMKICAqIEBodzogcG9pbnRlciBhcyBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgogICoKQEAgLTE2MDMsNyArMTYzOCw3IEBACiB2b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKIC8qKgotICogaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMtIGl0ZXJhdGUgYWN0aXZlIGludGVyZmFjZXMKKyAqIGllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzIC0gaXRlcmF0ZSBhY3RpdmUgaW50ZXJmYWNlcwogICoKICAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciB0aGUgaW50ZXJmYWNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbgogICogaGFyZHdhcmUgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBhbmQgY2FsbHMgdGhlIGNhbGxiYWNrIGZvciB0aGVtLgpAQCAtMTY3MCw3ICsxNzA1LDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IGxvdyBsZXZlbCBkcml2ZXIgb25jZSBpdCBoYXMKICAqIGZpbmlzaGVkIHdpdGggcHJlcGFyYXRpb25zIGZvciB0aGUgQkEgc2Vzc2lvbi4KLSAqIFRoaXMgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gaXMgaXJxIHNhZmUuCisgKiBUaGlzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGlzIElSUS1zYWZlLgogICovCiB2b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqcmEsCiAJCQkJICAgICAgdTE2IHRpZCk7CkBAIC0xNzEwLDcgKzE3NDUsNyBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgbG93IGxldmVsIGRyaXZlciBvbmNlIGl0IGhhcwogICogZmluaXNoZWQgd2l0aCBwcmVwYXJhdGlvbnMgZm9yIHRoZSBCQSBzZXNzaW9uIHRlYXIgZG93bi4KLSAqIFRoaXMgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gaXMgaXJxIHNhZmUuCisgKiBUaGlzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGlzIElSUS1zYWZlLgogICovCiB2b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpyYSwKIAkJCQkgICAgIHUxNiB0aWQpOwpAQCAtMTcxOCw3ICsxNzUzLDcgQEAKIC8qKgogICogaWVlZTgwMjExX25vdGlmeV9tYWMgLSBsb3cgbGV2ZWwgZHJpdmVyIG5vdGlmaWNhdGlvbgogICogQGh3OiBwb2ludGVyIGFzIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCi0gKiBAbm90aWZpY2F0aW9uX3R5cGVzOiBlbnVtIGllZWU4MDIxMV9ub3RpZmljYXRpb25fdHlwZXMKKyAqIEBub3RpZl90eXBlOiBlbnVtIGllZWU4MDIxMV9ub3RpZmljYXRpb25fdHlwZXMKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IGxvdyBsZXZlbCBkcml2ZXIgdG8gaW5mb3JtIG1hYzgwMjExIG9mCiAgKiBsb3cgbGV2ZWwgZHJpdmVyIHN0YXR1cyBjaGFuZ2Ugb3IgZm9yY2UgbWFjODAyMTEgdG8gcmUtYXNzb2MgZm9yIGxvdwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmggYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAppbmRleCBkYzQyMGZlLi5hYTRiNzA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAorKysgYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaApAQCAtNzUsNyArNzUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZGVzdHJveXM7CQkvKiBudW1iZXIgb2YgZGVzdHJveWVkIG5laWdocyAqLwogCXVuc2lnbmVkIGxvbmcgaGFzaF9ncm93czsJLyogbnVtYmVyIG9mIGhhc2ggcmVzaXplcyAqLwogCi0JdW5zaWduZWQgbG9uZyByZXNfZmFpbGVkOwkvKiBub21iZXIgb2YgZmFpbGVkIHJlc29sdXRpb25zICovCisJdW5zaWduZWQgbG9uZyByZXNfZmFpbGVkOwkvKiBudW1iZXIgb2YgZmFpbGVkIHJlc29sdXRpb25zICovCiAKIAl1bnNpZ25lZCBsb25nIGxvb2t1cHM7CQkvKiBudW1iZXIgb2YgbG9va3VwcyAqLwogCXVuc2lnbmVkIGxvbmcgaGl0czsJCS8qIG51bWJlciBvZiBoaXRzIChhbW9uZyBsb29rdXBzKSAqLwpAQCAtODUsNiArODUsOCBAQAogCiAJdW5zaWduZWQgbG9uZyBwZXJpb2RpY19nY19ydW5zOwkvKiBudW1iZXIgb2YgcGVyaW9kaWMgR0MgcnVucyAqLwogCXVuc2lnbmVkIGxvbmcgZm9yY2VkX2djX3J1bnM7CS8qIG51bWJlciBvZiBmb3JjZWQgR0MgcnVucyAqLworCisJdW5zaWduZWQgbG9uZyB1bnJlc19kaXNjYXJkczsJLyogbnVtYmVyIG9mIHVucmVzb2x2ZWQgZHJvcHMgKi8KIH07CiAKICNkZWZpbmUgTkVJR0hfQ0FDSEVfU1RBVF9JTkModGJsLCBmaWVsZCkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCmluZGV4IGQ5ZGQwZjcuLjM4NTU2MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaAorKysgYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjaW5jbHVkZSA8bmV0L25ldG5zL2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvbWliLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL3VuaXguaD4KICNpbmNsdWRlIDxuZXQvbmV0bnMvcGFja2V0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2lwdjQuaD4KQEAgLTUyLDYgKzUzLDcgQEAKIAlzdHJ1Y3Qgc29jayAJCSpydG5sOwkJCS8qIHJ0bmV0bGluayBzb2NrZXQgKi8KIAogCXN0cnVjdCBuZXRuc19jb3JlCWNvcmU7CisJc3RydWN0IG5ldG5zX21pYgltaWI7CiAJc3RydWN0IG5ldG5zX3BhY2tldAlwYWNrZXQ7CiAJc3RydWN0IG5ldG5zX3VuaXgJdW54OwogCXN0cnVjdCBuZXRuc19pcHY0CWlwdjQ7CkBAIC0yMTIsOCArMjE0LDExIEBACiBzdHJ1Y3QgY3RsX3BhdGg7CiBzdHJ1Y3QgY3RsX3RhYmxlOwogc3RydWN0IGN0bF90YWJsZV9oZWFkZXI7CisKIGV4dGVybiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCiAJY29uc3Qgc3RydWN0IGN0bF9wYXRoICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSk7CitleHRlcm4gc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfcm90YWJsZSgKKwljb25zdCBzdHJ1Y3QgY3RsX3BhdGggKnBhdGgsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyKTsKIAogI2VuZGlmIC8qIF9fTkVUX05FVF9OQU1FU1BBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0LmgKaW5kZXggOWJmMDU5OC4uNzU3M2Q1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oCkBAIC05LDggKzksNiBAQAogI2lmbmRlZiBfTkZfQ09OTlRSQUNLX0lQVjRfSAogI2RlZmluZSBfTkZfQ09OTlRSQUNLX0lQVjRfSAogCi0vKiBSZXR1cm5zIG5ldyBza19idWZmLCBvciBOVUxMICovCi1zdHJ1Y3Qgc2tfYnVmZiAqbmZfY3RfaXB2NF9jdF9nYXRoZXJfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCmluZGV4IDJkYmQ2YzAuLjA3NDFhZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKQEAgLTg4LDcgKzg4LDYgQEAKIAl1OCBleHBlY3RpbmdbTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTXTsKIH07CiAKLQogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCkBAIC0xMTEsMTEgKzExMCw2IEBACiAJLyogVGltZXIgZnVuY3Rpb247IGRyb3BzIHJlZmNudCB3aGVuIGl0IGdvZXMgb2ZmLiAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVvdXQ7CiAKLSNpZmRlZiBDT05GSUdfTkZfQ1RfQUNDVAotCS8qIEFjY291bnRpbmcgSW5mb3JtYXRpb24gKHNhbWUgY2FjaGUgbGluZSBhcyBvdGhlciB3cml0dGVuIG1lbWJlcnMpICovCi0Jc3RydWN0IGlwX2Nvbm50cmFja19jb3VudGVyIGNvdW50ZXJzW0lQX0NUX0RJUl9NQVhdOwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykKIAl1X2ludDMyX3QgbWFyazsKICNlbmRpZgpAQCAtMjIzLDYgKzIxNywyNSBAQAogCV9fbmZfY3RfcmVmcmVzaF9hY2N0KGN0LCAwLCBza2IsIGV4dHJhX2ppZmZpZXMsIDApOwogfQogCitleHRlcm4gYm9vbCBfX25mX2N0X2tpbGxfYWNjdChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBpbnQgZG9fYWNjdCk7CisKKy8qIGtpbGwgY29ubnRyYWNrIGFuZCBkbyBhY2NvdW50aW5nICovCitzdGF0aWMgaW5saW5lIGJvb2wgbmZfY3Rfa2lsbF9hY2N0KHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBfX25mX2N0X2tpbGxfYWNjdChjdCwgY3RpbmZvLCBza2IsIDEpOworfQorCisvKiBraWxsIGNvbm50cmFjayB3aXRob3V0IGFjY291bnRpbmcgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBuZl9jdF9raWxsKHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlyZXR1cm4gX19uZl9jdF9raWxsX2FjY3QoY3QsIDAsIE5VTEwsIDApOworfQorCiAvKiBUaGVzZSBhcmUgZm9yIE5BVC4gIElja3kuICovCiAvKiBVcGRhdGUgVENQIHdpbmRvdyB0cmFja2luZyBkYXRhIHdoZW4gTkFUIG1hbmdsZXMgdGhlIHBhY2tldCAqLwogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX3RjcF91cGRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTIzOSw3ICsyNTIsOCBAQAogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2ZyZWUoc3RydWN0IG5mX2Nvbm4gKmN0KTsKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubiAqCiBuZl9jb25udHJhY2tfYWxsb2MoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZywKLQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcmVwbCk7CisJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnJlcGwsCisJCSAgIGdmcF90IGdmcCk7CiAKIC8qIEl0J3MgY29uZmlybWVkIGlmIGl0IGlzLCBvciBoYXMgYmVlbiBpbiB0aGUgaGFzaCB0YWJsZS4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IG5mX2N0X2lzX2NvbmZpcm1lZChzdHJ1Y3QgbmZfY29ubiAqY3QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNWFlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogKEMpIDIwMDggS3J6eXN6dG9mIFBpb3RyIE9sZWR6a2kgPG9sZUBhbnMucGw+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfQUNDVF9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfQUNDVF9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmg+CisKK3N0cnVjdCBuZl9jb25uX2NvdW50ZXIgeworCXVfaW50NjRfdCBwYWNrZXRzOworCXVfaW50NjRfdCBieXRlczsKK307CisKK2V4dGVybiBpbnQgbmZfY3RfYWNjdDsKKworc3RhdGljIGlubGluZQorc3RydWN0IG5mX2Nvbm5fY291bnRlciAqbmZfY29ubl9hY2N0X2ZpbmQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXJldHVybiBuZl9jdF9leHRfZmluZChjdCwgTkZfQ1RfRVhUX0FDQ1QpOworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgbmZfY29ubl9jb3VudGVyICpuZl9jdF9hY2N0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApCit7CisJc3RydWN0IG5mX2Nvbm5fY291bnRlciAqYWNjdDsKKworCWlmICghbmZfY3RfYWNjdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhY2N0ID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX0FDQ1QsIGdmcCk7CisJaWYgKCFhY2N0KQorCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGFkZCBhY2NvdW50aW5nIGV4dGVuc2lvbiBhcmVhIik7CisKKworCXJldHVybiBhY2N0OworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludAorc2VxX3ByaW50X2FjY3Qoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGludCBkaXIpOworCitleHRlcm4gaW50IG5mX2Nvbm50cmFja19hY2N0X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBuZl9jb25udHJhY2tfYWNjdF9maW5pKHZvaWQpOworCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19BQ0NUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oCmluZGV4IGY4MGMwZWQuLmRhOGVlNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaApAQCAtNywxMSArNywxMyBAQAogewogCU5GX0NUX0VYVF9IRUxQRVIsCiAJTkZfQ1RfRVhUX05BVCwKKwlORl9DVF9FWFRfQUNDVCwKIAlORl9DVF9FWFRfTlVNLAogfTsKIAogI2RlZmluZSBORl9DVF9FWFRfSEVMUEVSX1RZUEUgc3RydWN0IG5mX2Nvbm5faGVscAogI2RlZmluZSBORl9DVF9FWFRfTkFUX1RZUEUgc3RydWN0IG5mX2Nvbm5fbmF0CisjZGVmaW5lIE5GX0NUX0VYVF9BQ0NUX1RZUEUgc3RydWN0IG5mX2Nvbm5fY291bnRlcgogCiAvKiBFeHRlbnNpb25zOiBvcHRpb25hbCBzdHVmZiB3aGljaCBpc24ndCBwZXJtYW5lbnRseSBpbiBzdHJ1Y3QuICovCiBzdHJ1Y3QgbmZfY3RfZXh0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L25ldGxpbmsuaAppbmRleCBkZmMzNzAxLi4xODAyNGI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCkBAIC04OTYsNiArODk2LDkgQEAKICNkZWZpbmUgTkxBX1BVVF9VNjQoc2tiLCBhdHRydHlwZSwgdmFsdWUpIFwKIAlOTEFfUFVUX1RZUEUoc2tiLCB1NjQsIGF0dHJ0eXBlLCB2YWx1ZSkKIAorI2RlZmluZSBOTEFfUFVUX0JFNjQoc2tiLCBhdHRydHlwZSwgdmFsdWUpIFwKKwlOTEFfUFVUX1RZUEUoc2tiLCBfX2JlNjQsIGF0dHJ0eXBlLCB2YWx1ZSkKKwogI2RlZmluZSBOTEFfUFVUX1NUUklORyhza2IsIGF0dHJ0eXBlLCB2YWx1ZSkgXAogCU5MQV9QVVQoc2tiLCBhdHRydHlwZSwgc3RybGVuKHZhbHVlKSArIDEsIHZhbHVlKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9oYXNoLmggYi9pbmNsdWRlL25ldC9uZXRucy9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4ZDc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2hhc2guaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9fTkVUX05TX0hBU0hfSF9fCisjZGVmaW5lIF9fTkVUX05TX0hBU0hfSF9fCisKKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKworc3RydWN0IG5ldDsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBuZXRfaGFzaF9taXgoc3RydWN0IG5ldCAqbmV0KQoreworI2lmZGVmIENPTkZJR19ORVRfTlMKKwkvKgorCSAqIHNoaWZ0IHRoaXMgcmlnaHQgdG8gZWxpbWluYXRlIGJpdHMsIHRoYXQgYXJlCisJICogYWx3YXlzIHplcm9lZAorCSAqLworCisJcmV0dXJuICh1bnNpZ25lZCkoKCh1bnNpZ25lZCBsb25nKW5ldCkgPj4gTDFfQ0FDSEVfU0hJRlQpOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmggYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKaW5kZXggMzRlZTM0OC4uYTZlZDgzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaApAQCAtMTgsNiArMTgsNyBAQAogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyCSpmb3J3X2hkcjsKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcgkqZnJhZ3NfaGRyOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyCSppcHY0X2hkcjsKKwlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcm91dGVfaGRyOwogI2VuZGlmCiAJc3RydWN0IGlwdjRfZGV2Y29uZgkqZGV2Y29uZl9hbGw7CiAJc3RydWN0IGlwdjRfZGV2Y29uZgkqZGV2Y29uZl9kZmx0OwpAQCAtMzYsNiArMzcsNyBAQAogCXN0cnVjdCB4dF90YWJsZQkJKmlwdGFibGVfbWFuZ2xlOwogCXN0cnVjdCB4dF90YWJsZQkJKmlwdGFibGVfcmF3OwogCXN0cnVjdCB4dF90YWJsZQkJKmFycHRhYmxlX2ZpbHRlcjsKKwlzdHJ1Y3QgeHRfdGFibGUJCSppcHRhYmxlX3NlY3VyaXR5OwogI2VuZGlmCiAKIAlpbnQgc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYWxsOwpAQCAtNDQsNSArNDYsOCBAQAogCWludCBzeXNjdGxfaWNtcF9yYXRlbGltaXQ7CiAJaW50IHN5c2N0bF9pY21wX3JhdGVtYXNrOwogCWludCBzeXNjdGxfaWNtcF9lcnJvcnNfdXNlX2luYm91bmRfaWZhZGRyOworCisJc3RydWN0IHRpbWVyX2xpc3QgcnRfc2VjcmV0X3RpbWVyOworCWF0b21pY190IHJ0X2dlbmlkOwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oCmluZGV4IGFjMDUzYmUuLjI5MzI3MjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgKQEAgLTM1LDEwICszNSwxMSBAQAogCXN0cnVjdCB4dF90YWJsZQkJKmlwNnRhYmxlX2ZpbHRlcjsKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcDZ0YWJsZV9tYW5nbGU7CiAJc3RydWN0IHh0X3RhYmxlCQkqaXA2dGFibGVfcmF3OworCXN0cnVjdCB4dF90YWJsZQkJKmlwNnRhYmxlX3NlY3VyaXR5OwogI2VuZGlmCiAJc3RydWN0IHJ0Nl9pbmZvICAgICAgICAgKmlwNl9udWxsX2VudHJ5OwogCXN0cnVjdCBydDZfc3RhdGlzdGljcyAgICpydDZfc3RhdHM7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgICAgICAgKmlwNl9maWJfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgaXA2X2ZpYl90aW1lcjsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAgICAgICAqZmliX3RhYmxlX2hhc2g7CiAJc3RydWN0IGZpYjZfdGFibGUgICAgICAgKmZpYjZfbWFpbl90Ymw7CiAJc3RydWN0IGRzdF9vcHMJCSppcDZfZHN0X29wczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL21pYi5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5MTQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL21pYi5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX19ORVROU19NSUJfSF9fCisjZGVmaW5lIF9fTkVUTlNfTUlCX0hfXworCisjaW5jbHVkZSA8bmV0L3NubXAuaD4KKworc3RydWN0IG5ldG5zX21pYiB7CisJREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgdGNwX21pYiwgdGNwX3N0YXRpc3RpY3MpOworCURFRklORV9TTk1QX1NUQVQoc3RydWN0IGlwc3RhdHNfbWliLCBpcF9zdGF0aXN0aWNzKTsKKwlERUZJTkVfU05NUF9TVEFUKHN0cnVjdCBsaW51eF9taWIsIG5ldF9zdGF0aXN0aWNzKTsKKwlERUZJTkVfU05NUF9TVEFUKHN0cnVjdCB1ZHBfbWliLCB1ZHBfc3RhdGlzdGljcyk7CisJREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgdWRwX21pYiwgdWRwbGl0ZV9zdGF0aXN0aWNzKTsKKwlERUZJTkVfU05NUF9TVEFUKHN0cnVjdCBpY21wX21pYiwgaWNtcF9zdGF0aXN0aWNzKTsKKwlERUZJTkVfU05NUF9TVEFUKHN0cnVjdCBpY21wbXNnX21pYiwgaWNtcG1zZ19zdGF0aXN0aWNzKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAppbmRleCA0NmZiNGQ4Li42YWZmY2ZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAorKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtNzIsNiArNzIsMTAgQEAKIGV4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX3FkaXNjX29wczsKIGV4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIGJmaWZvX3FkaXNjX29wczsKIAorZXh0ZXJuIGludCBmaWZvX3NldF9saW1pdChzdHJ1Y3QgUWRpc2MgKnEsIHVuc2lnbmVkIGludCBsaW1pdCk7CitleHRlcm4gc3RydWN0IFFkaXNjICpmaWZvX2NyZWF0ZV9kZmx0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGxpbWl0KTsKKwogZXh0ZXJuIGludCByZWdpc3Rlcl9xZGlzYyhzdHJ1Y3QgUWRpc2Nfb3BzICpxb3BzKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9xZGlzYyhzdHJ1Y3QgUWRpc2Nfb3BzICpxb3BzKTsKIGV4dGVybiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgaGFuZGxlKTsKQEAgLTc5LDE0ICs4MywxNCBAQAogZXh0ZXJuIHN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpxZGlzY19nZXRfcnRhYihzdHJ1Y3QgdGNfcmF0ZXNwZWMgKnIsCiAJCXN0cnVjdCBubGF0dHIgKnRhYik7CiBleHRlcm4gdm9pZCBxZGlzY19wdXRfcnRhYihzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqdGFiKTsKK2V4dGVybiB2b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpOwogCi1leHRlcm4gdm9pZCBfX3FkaXNjX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIF9fcWRpc2NfcnVuKHN0cnVjdCBRZGlzYyAqcSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBxZGlzY19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBxZGlzY19ydW4oc3RydWN0IFFkaXNjICpxKQogewotCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmCi0JICAgICF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19TVEFURV9RRElTQ19SVU5OSU5HLCAmZGV2LT5zdGF0ZSkpCi0JCV9fcWRpc2NfcnVuKGRldik7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fUURJU0NfU1RBVEVfUlVOTklORywgJnEtPnN0YXRlKSkKKwkJX19xZGlzY19ydW4ocSk7CiB9CiAKIGV4dGVybiBpbnQgdGNfY2xhc3NpZnlfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm9zZS5oIGIvaW5jbHVkZS9uZXQvcm9zZS5oCmluZGV4IGU1YmIwODQuLmNiZDUzNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Jvc2UuaAorKysgYi9pbmNsdWRlL25ldC9yb3NlLmgKQEAgLTIwMSw3ICsyMDEsNyBAQAogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpyb3NlX2Rldl9maXJzdCh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqcm9zZV9kZXZfZ2V0KHJvc2VfYWRkcmVzcyAqKTsKIGV4dGVybiBzdHJ1Y3Qgcm9zZV9yb3V0ZSAqcm9zZV9yb3V0ZV9mcmVlX2xjaSh1bnNpZ25lZCBpbnQsIHN0cnVjdCByb3NlX25laWdoICopOwotZXh0ZXJuIHN0cnVjdCByb3NlX25laWdoICpyb3NlX2dldF9uZWlnaChyb3NlX2FkZHJlc3MgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIHN0cnVjdCByb3NlX25laWdoICpyb3NlX2dldF9uZWlnaChyb3NlX2FkZHJlc3MgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CiBleHRlcm4gaW50ICByb3NlX3J0X2lvY3RsKHVuc2lnbmVkIGludCwgdm9pZCBfX3VzZXIgKik7CiBleHRlcm4gdm9pZCByb3NlX2xpbmtfZmFpbGVkKGF4MjVfY2IgKiwgaW50KTsKIGV4dGVybiBpbnQgIHJvc2Vfcm91dGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JvdXRlLmggYi9pbmNsdWRlL25ldC9yb3V0ZS5oCmluZGV4IGZjODM2ZmYuLjMxNDBjYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvcm91dGUuaApAQCAtMTExLDcgKzExMSw3IEBACiBleHRlcm4gaW50CQlpcF9ydF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQJCWlwX3J0X3JlZGlyZWN0KF9fYmUzMiBvbGRfZ3csIF9fYmUzMiBkc3QsIF9fYmUzMiBuZXdfZ3csCiAJCQkJICAgICAgIF9fYmUzMiBzcmMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQJCXJ0X2NhY2hlX2ZsdXNoKGludCBob3cpOworZXh0ZXJuIHZvaWQJCXJ0X2NhY2hlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgaW50IGhvdyk7CiBleHRlcm4gaW50CQlfX2lwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcnRhYmxlICoqLCBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZscCk7CiBleHRlcm4gaW50CQlpcF9yb3V0ZV9vdXRwdXRfa2V5KHN0cnVjdCBuZXQgKiwgc3RydWN0IHJ0YWJsZSAqKiwgc3RydWN0IGZsb3dpICpmbHApOwogZXh0ZXJuIGludAkJaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcnRhYmxlICoqcnAsIHN0cnVjdCBmbG93aSAqZmxwLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCBhODdmYzAzLi5iNWY0MGQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTIzLDYgKzIzLDE5IEBACiAJaW50CQlyZWZjbnQ7CiB9OwogCitlbnVtIHFkaXNjX3N0YXRlX3QKK3sKKwlfX1FESVNDX1NUQVRFX1JVTk5JTkcsCisJX19RRElTQ19TVEFURV9TQ0hFRCwKK307CisKK3N0cnVjdCBxZGlzY19zaXplX3RhYmxlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHRjX3NpemVzcGVjCXN6b3B0czsKKwlpbnQJCQlyZWZjbnQ7CisJdTE2CQkJZGF0YVtdOworfTsKKwogc3RydWN0IFFkaXNjCiB7CiAJaW50IAkJCSgqZW5xdWV1ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpkZXYpOwpAQCAtMzMsMjEgKzQ2LDI2IEBACiAjZGVmaW5lIFRDUV9GX0lOR1JFU1MJNAogCWludAkJCXBhZGRlZDsKIAlzdHJ1Y3QgUWRpc2Nfb3BzCSpvcHM7CisJc3RydWN0IHFkaXNjX3NpemVfdGFibGUJKnN0YWI7CiAJdTMyCQkJaGFuZGxlOwogCXUzMgkJCXBhcmVudDsKIAlhdG9taWNfdAkJcmVmY250OworCXVuc2lnbmVkIGxvbmcJCXN0YXRlOworCXN0cnVjdCBza19idWZmCQkqZ3NvX3NrYjsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXE7Ci0Jc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlCSpkZXZfcXVldWU7CisJc3RydWN0IFFkaXNjCQkqbmV4dF9zY2hlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAKIAlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYwlic3RhdHM7CiAJc3RydWN0IGduZXRfc3RhdHNfcXVldWUJcXN0YXRzOwogCXN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0CXJhdGVfZXN0OwotCXNwaW5sb2NrX3QJCSpzdGF0c19sb2NrOwogCXN0cnVjdCByY3VfaGVhZCAJcV9yY3U7CiAJaW50CQkJKCpyZXNoYXBlX2ZhaWwpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCXN0cnVjdCBRZGlzYyAqcSk7CiAKKwl2b2lkCQkJKnUzMl9ub2RlOworCiAJLyogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLCBidXQgaXQgaXMgc3RpbGwgdXNlZCBieSBDQlEKIAkgKiBhbmQgaXQgd2lsbCBsaXZlIHVudGlsIGJldHRlciBzb2x1dGlvbiB3aWxsIGJlIGludmVudGVkLgogCSAqLwpAQCAtMTU1LDE4ICsxNzMsOTYgQEAKIAlzdHJ1Y3QgdGNmX3Byb3RvX29wcwkqb3BzOwogfTsKIAorc3RydWN0IHFkaXNjX3NrYl9jYiB7CisJdW5zaWduZWQgaW50CQlwa3RfbGVuOworCWNoYXIJCQlkYXRhW107Cit9OwogCi1leHRlcm4gdm9pZCBxZGlzY19sb2NrX3RyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBxZGlzY191bmxvY2tfdHJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHFkaXNjX3NrYl9jYiAqcWRpc2Nfc2tiX2NiKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgcWRpc2Nfc2tiX2NiICopc2tiLT5jYjsKK30KIAotI2RlZmluZSBzY2hfdHJlZV9sb2NrKHEpCXFkaXNjX2xvY2tfdHJlZSgocSktPmRldikKLSNkZWZpbmUgc2NoX3RyZWVfdW5sb2NrKHEpCXFkaXNjX3VubG9ja190cmVlKChxKS0+ZGV2KQotI2RlZmluZSB0Y2ZfdHJlZV9sb2NrKHRwKQlxZGlzY19sb2NrX3RyZWUoKHRwKS0+cS0+ZGV2KQotI2RlZmluZSB0Y2ZfdHJlZV91bmxvY2sodHApCXFkaXNjX3VubG9ja190cmVlKCh0cCktPnEtPmRldikKK3N0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqcWRpc2NfbG9jayhzdHJ1Y3QgUWRpc2MgKnFkaXNjKQoreworCXJldHVybiAmcWRpc2MtPnEubG9jazsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgUWRpc2MgKnFkaXNjX3Jvb3Qoc3RydWN0IFFkaXNjICpxZGlzYykKK3sKKwlyZXR1cm4gcWRpc2MtPmRldl9xdWV1ZS0+cWRpc2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqcWRpc2Nfcm9vdF9sb2NrKHN0cnVjdCBRZGlzYyAqcWRpc2MpCit7CisJc3RydWN0IFFkaXNjICpyb290ID0gcWRpc2Nfcm9vdChxZGlzYyk7CisKKwlyZXR1cm4gcWRpc2NfbG9jayhyb290KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqcWRpc2NfZGV2KHN0cnVjdCBRZGlzYyAqcWRpc2MpCit7CisJcmV0dXJuIHFkaXNjLT5kZXZfcXVldWUtPmRldjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNjaF90cmVlX2xvY2soc3RydWN0IFFkaXNjICpxKQoreworCXNwaW5fbG9ja19iaChxZGlzY19yb290X2xvY2socSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2NoX3RyZWVfdW5sb2NrKHN0cnVjdCBRZGlzYyAqcSkKK3sKKwlzcGluX3VubG9ja19iaChxZGlzY19yb290X2xvY2socSkpOworfQorCisjZGVmaW5lIHRjZl90cmVlX2xvY2sodHApCXNjaF90cmVlX2xvY2soKHRwKS0+cSkKKyNkZWZpbmUgdGNmX3RyZWVfdW5sb2NrKHRwKQlzY2hfdHJlZV91bmxvY2soKHRwKS0+cSkKIAogZXh0ZXJuIHN0cnVjdCBRZGlzYyBub29wX3FkaXNjOwogZXh0ZXJuIHN0cnVjdCBRZGlzY19vcHMgbm9vcF9xZGlzY19vcHM7CiAKK3N0cnVjdCBRZGlzY19jbGFzc19jb21tb24KK3sKKwl1MzIJCQljbGFzc2lkOworCXN0cnVjdCBobGlzdF9ub2RlCWhub2RlOworfTsKKworc3RydWN0IFFkaXNjX2NsYXNzX2hhc2gKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZAkqaGFzaDsKKwl1bnNpZ25lZCBpbnQJCWhhc2hzaXplOworCXVuc2lnbmVkIGludAkJaGFzaG1hc2s7CisJdW5zaWduZWQgaW50CQloYXNoZWxlbXM7Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19jbGFzc19oYXNoKHUzMiBpZCwgdTMyIG1hc2spCit7CisJaWQgXj0gaWQgPj4gODsKKwlpZCBePSBpZCA+PiA0OworCXJldHVybiBpZCAmIG1hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbiAqCitxZGlzY19jbGFzc19maW5kKHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpoYXNoLCB1MzIgaWQpCit7CisJc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbiAqY2w7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisJdW5zaWduZWQgaW50IGg7CisKKwloID0gcWRpc2NfY2xhc3NfaGFzaChpZCwgaGFzaC0+aGFzaG1hc2spOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsLCBuLCAmaGFzaC0+aGFzaFtoXSwgaG5vZGUpIHsKKwkJaWYgKGNsLT5jbGFzc2lkID09IGlkKQorCQkJcmV0dXJuIGNsOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworZXh0ZXJuIGludCBxZGlzY19jbGFzc19oYXNoX2luaXQoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKik7CitleHRlcm4gdm9pZCBxZGlzY19jbGFzc19oYXNoX2luc2VydChzdHJ1Y3QgUWRpc2NfY2xhc3NfaGFzaCAqLCBzdHJ1Y3QgUWRpc2NfY2xhc3NfY29tbW9uICopOworZXh0ZXJuIHZvaWQgcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKiwgc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbiAqKTsKK2V4dGVybiB2b2lkIHFkaXNjX2NsYXNzX2hhc2hfZ3JvdyhzdHJ1Y3QgUWRpc2MgKiwgc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKik7CitleHRlcm4gdm9pZCBxZGlzY19jbGFzc19oYXNoX2Rlc3Ryb3koc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKik7CisKIGV4dGVybiB2b2lkIGRldl9pbml0X3NjaGVkdWxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRldl9zaHV0ZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRldl9hY3RpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTE3NCwxOCArMjcwLDg4IEBACiBleHRlcm4gdm9pZCBxZGlzY19yZXNldChzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKIGV4dGVybiB2b2lkIHFkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYyk7CiBleHRlcm4gdm9pZCBxZGlzY190cmVlX2RlY3JlYXNlX3FsZW4oc3RydWN0IFFkaXNjICpxZGlzYywgdW5zaWduZWQgaW50IG4pOwotZXh0ZXJuIHN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IFFkaXNjX29wcyAqb3BzKTsKK2V4dGVybiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2FsbG9jKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSwKKwkJCQkgc3RydWN0IFFkaXNjX29wcyAqb3BzKTsKIGV4dGVybiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSwKIAkJCQkgICAgICAgc3RydWN0IFFkaXNjX29wcyAqb3BzLCB1MzIgcGFyZW50aWQpOworZXh0ZXJuIHZvaWQgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYik7CiBleHRlcm4gdm9pZCB0Y2ZfZGVzdHJveShzdHJ1Y3QgdGNmX3Byb3RvICp0cCk7CiBleHRlcm4gdm9pZCB0Y2ZfZGVzdHJveV9jaGFpbihzdHJ1Y3QgdGNmX3Byb3RvICoqZmwpOwogCisvKiBSZXNldCBhbGwgVFggcWRpc2NzIG9mIGEgZGV2aWNlLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBxZGlzY19yZXNldF9hbGxfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fdHhfcXVldWVzOyBpKyspCisJCXFkaXNjX3Jlc2V0KG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKS0+cWRpc2MpOworfQorCisvKiBBcmUgYWxsIFRYIHF1ZXVlcyBvZiB0aGUgZGV2aWNlIGVtcHR5PyAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBxZGlzY19hbGxfdHhfZW1wdHkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOworCQljb25zdCBzdHJ1Y3QgUWRpc2MgKnEgPSB0eHEtPnFkaXNjOworCisJCWlmIChxLT5xLnFsZW4pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKiBBcmUgYW55IG9mIHRoZSBUWCBxZGlzY3MgY2hhbmdpbmc/ICAqLworc3RhdGljIGlubGluZSBib29sIHFkaXNjX3R4X2NoYW5naW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKKwkJaWYgKHR4cS0+cWRpc2MgIT0gdHhxLT5xZGlzY19zbGVlcGluZykKKwkJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIElzIHRoZSBkZXZpY2UgdXNpbmcgdGhlIG5vb3AgcWRpc2Mgb24gYWxsIHF1ZXVlcz8gICovCitzdGF0aWMgaW5saW5lIGJvb2wgcWRpc2NfdHhfaXNfbm9vcChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CisJCWlmICh0eHEtPnFkaXNjICE9ICZub29wX3FkaXNjKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcWRpc2NfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBxZGlzY19za2JfY2Ioc2tiKS0+cGt0X2xlbjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcWRpc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKyNpZmRlZiBDT05GSUdfTkVUX1NDSEVECisJaWYgKHNjaC0+c3RhYikKKwkJcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc2tiLCBzY2gtPnN0YWIpOworI2VuZGlmCisJcmV0dXJuIHNjaC0+ZW5xdWV1ZShza2IsIHNjaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHFkaXNjX2VucXVldWVfcm9vdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlxZGlzY19za2JfY2Ioc2tiKS0+cGt0X2xlbiA9IHNrYi0+bGVuOworCXJldHVybiBxZGlzY19lbnF1ZXVlKHNrYiwgc2NoKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgX19xZGlzY19lbnF1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsCiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCiB7CiAJX19za2JfcXVldWVfdGFpbChsaXN0LCBza2IpOwotCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gc2tiLT5sZW47Ci0Jc2NoLT5ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7CisJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwogCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwpAQCAtMjAyLDcgKzM2OCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCk7CiAKIAlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkKLQkJc2NoLT5xc3RhdHMuYmFja2xvZyAtPSBza2ItPmxlbjsKKwkJc2NoLT5xc3RhdHMuYmFja2xvZyAtPSBxZGlzY19wa3RfbGVuKHNrYik7CiAKIAlyZXR1cm4gc2tiOwogfQpAQCAtMjE4LDcgKzM4NCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWVfdGFpbChsaXN0KTsKIAogCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKQotCQlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IHNrYi0+bGVuOworCQlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAogCXJldHVybiBza2I7CiB9CkBAIC0yMzIsNyArMzk4LDcgQEAKIAkJCQkgIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCiB7CiAJX19za2JfcXVldWVfaGVhZChsaXN0LCBza2IpOwotCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gc2tiLT5sZW47CisJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJc2NoLT5xc3RhdHMucmVxdWV1ZXMrKzsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwpAQCAtMjUwLDcgKzQxNiw3IEBACiAJICogV2UgZG8gbm90IGtub3cgdGhlIGJhY2tsb2cgaW4gYnl0ZXMgb2YgdGhpcyBsaXN0LCBpdAogCSAqIGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gY29ycmVjdCBpdAogCSAqLwotCXNrYl9xdWV1ZV9wdXJnZShsaXN0KTsKKwlfX3NrYl9xdWV1ZV9wdXJnZShsaXN0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3Jlc2V0X3F1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKQpAQCAtMjY1LDcgKzQzMSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fcWRpc2NfZGVxdWV1ZV90YWlsKHNjaCwgbGlzdCk7CiAKIAlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgewotCQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CisJCXVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gbGVuOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY2hlY2tzdW0uaCBiL2luY2x1ZGUvbmV0L3NjdHAvY2hlY2tzdW0uaAppbmRleCBiYTc1YzY3Li5iNzk5ZmIyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY2hlY2tzdW0uaApAQCAtNDYsOSArNDYsMTQgQEAKICNpbmNsdWRlIDxuZXQvc2N0cC9zY3RwLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzJjLmg+CiAKLXN0YXRpYyBpbmxpbmUgX191MzIgc2N0cF9zdGFydF9ja3N1bShfX3U4ICpidWZmZXIsIF9fdTE2IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgX19iZTMyIHNjdHBfY3JjMzJjKF9fYmUzMiBjcmMsIHU4ICpidWZmZXIsIHUxNiBsZW5ndGgpCiB7Ci0JX191MzIgY3JjID0gfihfX3UzMikgMDsKKwlyZXR1cm4gKF9fZm9yY2UgX19iZTMyKWNyYzMyYygoX19mb3JjZSB1MzIpY3JjLCBidWZmZXIsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19iZTMyIHNjdHBfc3RhcnRfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgpCit7CisJX19iZTMyIGNyYyA9IH5jcHVfdG9fYmUzMigwKTsKIAlfX3U4ICB6ZXJvW3NpemVvZihfX3UzMildID0gezB9OwogCiAJLyogT3B0aW1pemUgdGhpcyByb3V0aW5lIHRvIGJlIFNDVFAgc3BlY2lmaWMsIGtub3dpbmcgaG93CkBAIC01NiwyMyArNjEsMjMgQEAKIAkgKi8KIAogCS8qIENhbGN1bGF0ZSBDUkMgdXAgdG8gdGhlIGNoZWNrc3VtLiAqLwotCWNyYyA9IGNyYzMyYyhjcmMsIGJ1ZmZlciwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSAtIHNpemVvZihfX3UzMikpOworCWNyYyA9IHNjdHBfY3JjMzJjKGNyYywgYnVmZmVyLCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpIC0gc2l6ZW9mKF9fdTMyKSk7CiAKIAkvKiBTa2lwIGNoZWNrc3VtIGZpZWxkIG9mIHRoZSBoZWFkZXIuICovCi0JY3JjID0gY3JjMzJjKGNyYywgemVybywgc2l6ZW9mKF9fdTMyKSk7CisJY3JjID0gc2N0cF9jcmMzMmMoY3JjLCB6ZXJvLCBzaXplb2YoX191MzIpKTsKIAogCS8qIENhbGN1bGF0ZSB0aGUgcmVzdCBvZiB0aGUgQ1JDLiAqLwotCWNyYyA9IGNyYzMyYyhjcmMsICZidWZmZXJbc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKV0sCisJY3JjID0gc2N0cF9jcmMzMmMoY3JjLCAmYnVmZmVyW3NpemVvZihzdHJ1Y3Qgc2N0cGhkcildLAogCQkJICAgIGxlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOwogCXJldHVybiBjcmM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191MzIgc2N0cF91cGRhdGVfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgsIF9fdTMyIGNyYzMyKQorc3RhdGljIGlubGluZSBfX2JlMzIgc2N0cF91cGRhdGVfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgsIF9fYmUzMiBjcmMzMikKIHsKLQlyZXR1cm4gY3JjMzJjKGNyYzMyLCBidWZmZXIsIGxlbmd0aCk7CisJcmV0dXJuIHNjdHBfY3JjMzJjKGNyYzMyLCBidWZmZXIsIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191MzIgc2N0cF9lbmRfY2tzdW0oX191MzIgY3JjMzIpCitzdGF0aWMgaW5saW5lIF9fYmUzMiBzY3RwX2VuZF9ja3N1bShfX2JlMzIgY3JjMzIpCiB7Ci0JcmV0dXJuIG50b2hsKH5jcmMzMik7CisJcmV0dXJuIH5jcmMzMjsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKaW5kZXggOTBiMWU4ZC4uMTdiOTMyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKQEAgLTE3OSw2ICsxNzksOCBAQAogdm9pZCBzY3RwX2Vwc19wcm9jX2V4aXQodm9pZCk7CiBpbnQgc2N0cF9hc3NvY3NfcHJvY19pbml0KHZvaWQpOwogdm9pZCBzY3RwX2Fzc29jc19wcm9jX2V4aXQodm9pZCk7CitpbnQgc2N0cF9yZW1hZGRyX3Byb2NfaW5pdCh2b2lkKTsKK3ZvaWQgc2N0cF9yZW1hZGRyX3Byb2NfZXhpdCh2b2lkKTsKIAogCiAvKgpAQCAtMjE4LDggKzIyMCw2IEBACiAjZGVmaW5lIHNjdHBfcmVsZWFzZV9zb2NrKHNrKSAgICByZWxlYXNlX3NvY2soc2spCiAjZGVmaW5lIHNjdHBfYmhfbG9ja19zb2NrKHNrKSAgICBiaF9sb2NrX3NvY2soc2spCiAjZGVmaW5lIHNjdHBfYmhfdW5sb2NrX3NvY2soc2spICBiaF91bmxvY2tfc29jayhzaykKLSNkZWZpbmUgU0NUUF9TT0NLX1NMRUVQX1BSRShzaykgIFNPQ0tfU0xFRVBfUFJFKHNrKQotI2RlZmluZSBTQ1RQX1NPQ0tfU0xFRVBfUE9TVChzaykgU09DS19TTEVFUF9QT1NUKHNrKQogCiAvKiBTQ1RQIFNOTVAgTUlCIHN0YXRzIGhhbmRsZXJzICovCiBERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3Qgc2N0cF9taWIsIHNjdHBfc3RhdGlzdGljcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDdmMjUxOTUuLjUzNWExOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0zMDAsNiArMzAwLDcgQEAKIAogCS8qIFRoZSBkZWZhdWx0IFNBQ0sgZGVsYXkgdGltZW91dCBmb3IgbmV3IGFzc29jaWF0aW9ucy4gKi8KIAlfX3UzMiBzYWNrZGVsYXk7CisJX191MzIgc2Fja2ZyZXE7CiAKIAkvKiBGbGFncyBjb250cm9sbGluZyBIZWFydGJlYXQsIFNBQ0sgZGVsYXksIGFuZCBQYXRoIE1UVSBEaXNjb3ZlcnkuICovCiAJX191MzIgcGFyYW1fZmxhZ3M7CkBAIC04MjYsNyArODI3LDcgQEAKIAkJCQkgICAgIF9fdTE2IHNwb3J0LCBfX3UxNiBkcG9ydCk7CiBzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnNjdHBfcGFja2V0X2NvbmZpZyhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKiwgX191MzIgdnRhZywgaW50KTsKIHNjdHBfeG1pdF90IHNjdHBfcGFja2V0X3RyYW5zbWl0X2NodW5rKHN0cnVjdCBzY3RwX3BhY2tldCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqLCBpbnQpOwogc2N0cF94bWl0X3Qgc2N0cF9wYWNrZXRfYXBwZW5kX2NodW5rKHN0cnVjdCBzY3RwX3BhY2tldCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2NodW5rICopOwogaW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqKTsKQEAgLTk0Niw2ICs5NDcsNyBAQAogCiAJLyogU0FDSyBkZWxheSB0aW1lb3V0ICovCiAJdW5zaWduZWQgbG9uZyBzYWNrZGVsYXk7CisJX191MzIgc2Fja2ZyZXE7CiAKIAkvKiBXaGVuIHdhcyB0aGUgbGFzdCB0aW1lIChpbiBqaWZmaWVzKSB0aGF0IHdlIGhlYXJkIGZyb20gdGhpcwogCSAqIHRyYW5zcG9ydD8gIFdlIHVzZSB0aGlzIHRvIHBpY2sgbmV3IGFjdGl2ZSBhbmQgcmV0cmFuIHBhdGhzLgpAQCAtMTE1OSw3ICsxMTYxLDYgQEAKIHZvaWQgc2N0cF9vdXRxX3RlYXJkb3duKHN0cnVjdCBzY3RwX291dHEgKik7CiB2b2lkIHNjdHBfb3V0cV9mcmVlKHN0cnVjdCBzY3RwX291dHEqKTsKIGludCBzY3RwX291dHFfdGFpbChzdHJ1Y3Qgc2N0cF9vdXRxICosIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayk7Ci1pbnQgc2N0cF9vdXRxX2ZsdXNoKHN0cnVjdCBzY3RwX291dHEgKiwgaW50KTsKIGludCBzY3RwX291dHFfc2FjayhzdHJ1Y3Qgc2N0cF9vdXRxICosIHN0cnVjdCBzY3RwX3NhY2toZHIgKik7CiBpbnQgc2N0cF9vdXRxX2lzX2VtcHR5KGNvbnN0IHN0cnVjdCBzY3RwX291dHEgKik7CiB2b2lkIHNjdHBfb3V0cV9yZXN0YXJ0KHN0cnVjdCBzY3RwX291dHEgKik7CkBAIC0xMjA5LDYgKzEyMTAsOCBAQAogaW50IHNjdHBfZGVsX2JpbmRfYWRkcihzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKiwgdW5pb24gc2N0cF9hZGRyICopOwogaW50IHNjdHBfYmluZF9hZGRyX21hdGNoKHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqLCBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKiwKIAkJCSBzdHJ1Y3Qgc2N0cF9zb2NrICopOworaW50IHNjdHBfYmluZF9hZGRyX2NvbmZsaWN0KHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqLCBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKiwKKwkJCSBzdHJ1Y3Qgc2N0cF9zb2NrICosIHN0cnVjdCBzY3RwX3NvY2sgKik7CiBpbnQgc2N0cF9iaW5kX2FkZHJfc3RhdGUoY29uc3Qgc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCwKIAkJCSBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIpOwogdW5pb24gc2N0cF9hZGRyICpzY3RwX2ZpbmRfdW5tYXRjaF9hZGRyKHN0cnVjdCBzY3RwX2JpbmRfYWRkcgkqYnAsCkBAIC0xNTUzLDYgKzE1NTYsNyBAQAogCQkgKiAgICAgICAgICAgICA6IFNBQ0sncyBhcmUgbm90IGRlbGF5ZWQgKHNlZSBTZWN0aW9uIDYpLgogCQkgKi8KIAkJX191OCAgICBzYWNrX25lZWRlZDsgICAgIC8qIERvIHdlIG5lZWQgdG8gc2FjayB0aGUgcGVlcj8gKi8KKwkJX191MzIJc2Fja19jbnQ7CiAKIAkJLyogVGhlc2UgYXJlIGNhcGFiaWxpdGllcyB3aGljaCBvdXIgcGVlciBhZHZlcnRpc2VkLiAgKi8KIAkJX191OAllY25fY2FwYWJsZTsJIC8qIENhbiBwZWVyIGRvIEVDTj8gKi8KQEAgLTE2NjIsNiArMTY2Niw3IEBACiAKIAkvKiBTQUNLIGRlbGF5IHRpbWVvdXQgKi8KIAl1bnNpZ25lZCBsb25nIHNhY2tkZWxheTsKKwlfX3UzMiBzYWNrZnJlcTsKIAogCiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0c1tTQ1RQX05VTV9USU1FT1VUX1RZUEVTXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oIGIvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKaW5kZXggOTYxOWI5ZC4uZjIwNWIxMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oCkBAIC05Myw4ICs5Myw5IEBACiAjZGVmaW5lIFNDVFBfU1RBVFVTIFNDVFBfU1RBVFVTCiAJU0NUUF9HRVRfUEVFUl9BRERSX0lORk8sCiAjZGVmaW5lIFNDVFBfR0VUX1BFRVJfQUREUl9JTkZPIFNDVFBfR0VUX1BFRVJfQUREUl9JTkZPCi0JU0NUUF9ERUxBWUVEX0FDS19USU1FLAotI2RlZmluZSBTQ1RQX0RFTEFZRURfQUNLX1RJTUUgU0NUUF9ERUxBWUVEX0FDS19USU1FCisJU0NUUF9ERUxBWUVEX0FDSywKKyNkZWZpbmUgU0NUUF9ERUxBWUVEX0FDS19USU1FIFNDVFBfREVMQVlFRF9BQ0sKKyNkZWZpbmUgU0NUUF9ERUxBWUVEX0FDSyBTQ1RQX0RFTEFZRURfQUNLCiAJU0NUUF9DT05URVhULAkvKiBSZWNlaXZlIENvbnRleHQgKi8KICNkZWZpbmUgU0NUUF9DT05URVhUIFNDVFBfQ09OVEVYVAogCVNDVFBfRlJBR01FTlRfSU5URVJMRUFWRSwKQEAgLTEzNiwxMiArMTM3LDE0IEBACiAjZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJTX05VTV9PTEQJU0NUUF9HRVRfTE9DQUxfQUREUlNfTlVNX09MRAogCVNDVFBfR0VUX0xPQ0FMX0FERFJTX09MRCwgCS8qIEdldCBhbGwgbG9jYWwgYWRkcmVzc3MuICovCiAjZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJTX09MRAlTQ1RQX0dFVF9MT0NBTF9BRERSU19PTEQKLQlTQ1RQX1NPQ0tPUFRfQ09OTkVDVFgsIC8qIENPTk5FQ1RYIHJlcXVlc3RzLiAqLwotI2RlZmluZSBTQ1RQX1NPQ0tPUFRfQ09OTkVDVFgJU0NUUF9TT0NLT1BUX0NPTk5FQ1RYCisJU0NUUF9TT0NLT1BUX0NPTk5FQ1RYX09MRCwgLyogQ09OTkVDVFggb2xkIHJlcXVlc3RzLiAqLworI2RlZmluZSBTQ1RQX1NPQ0tPUFRfQ09OTkVDVFhfT0xECVNDVFBfU09DS09QVF9DT05ORUNUWF9PTEQKIAlTQ1RQX0dFVF9QRUVSX0FERFJTLCAJLyogR2V0IGFsbCBwZWVyIGFkZHJlc3NzLiAqLwogI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJTCVNDVFBfR0VUX1BFRVJfQUREUlMKIAlTQ1RQX0dFVF9MT0NBTF9BRERSUywgCS8qIEdldCBhbGwgbG9jYWwgYWRkcmVzc3MuICovCiAjZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJTCVNDVFBfR0VUX0xPQ0FMX0FERFJTCisJU0NUUF9TT0NLT1BUX0NPTk5FQ1RYLCAvKiBDT05ORUNUWCByZXF1ZXN0cy4gKi8KKyNkZWZpbmUgU0NUUF9TT0NLT1BUX0NPTk5FQ1RYCVNDVFBfU09DS09QVF9DT05ORUNUWAogfTsKIAogLyoKQEAgLTYxOCwxMyArNjIxLDI2IEBACiB9OwogCiAKLS8qIDcuMS4yMy4gRGVsYXllZCBBY2sgVGltZXIgKFNDVFBfREVMQVlFRF9BQ0tfVElNRSkKKy8qCisgKiA3LjEuMjMuICBHZXQgb3Igc2V0IGRlbGF5ZWQgYWNrIHRpbWVyIChTQ1RQX0RFTEFZRURfU0FDSykKICAqCi0gKiAgIFRoaXMgb3B0aW9ucyB3aWxsIGdldCBvciBzZXQgdGhlIGRlbGF5ZWQgYWNrIHRpbWVyLiAgVGhlIHRpbWUgaXMgc2V0Ci0gKiAgIGluIG1pbGxpc2Vjb25kcy4gIElmIHRoZSBhc3NvY19pZCBpcyAwLCB0aGVuIHRoaXMgc2V0cyBvciBnZXRzIHRoZQotICogICBlbmRwb2ludHMgZGVmYXVsdCBkZWxheWVkIGFjayB0aW1lciB2YWx1ZS4gIElmIHRoZSBhc3NvY19pZCBmaWVsZCBpcwotICogICBub24temVybywgdGhlbiB0aGUgc2V0IG9yIGdldCBlZmZlY3RzIHRoZSBzcGVjaWZpZWQgYXNzb2NpYXRpb24uCisgKiBUaGlzIG9wdGlvbiB3aWxsIGVmZmVjdCB0aGUgd2F5IGRlbGF5ZWQgYWNrcyBhcmUgcGVyZm9ybWVkLiAgVGhpcworICogb3B0aW9uIGFsbG93cyB5b3UgdG8gZ2V0IG9yIHNldCB0aGUgZGVsYXllZCBhY2sgdGltZSwgaW4KKyAqIG1pbGxpc2Vjb25kcy4gIEl0IGFsc28gYWxsb3dzIGNoYW5naW5nIHRoZSBkZWxheWVkIGFjayBmcmVxdWVuY3kuCisgKiBDaGFuZ2luZyB0aGUgZnJlcXVlbmN5IHRvIDEgZGlzYWJsZXMgdGhlIGRlbGF5ZWQgc2FjayBhbGdvcml0aG0uICBJZgorICogdGhlIGFzc29jX2lkIGlzIDAsIHRoZW4gdGhpcyBzZXRzIG9yIGdldHMgdGhlIGVuZHBvaW50cyBkZWZhdWx0CisgKiB2YWx1ZXMuICBJZiB0aGUgYXNzb2NfaWQgZmllbGQgaXMgbm9uLXplcm8sIHRoZW4gdGhlIHNldCBvciBnZXQKKyAqIGVmZmVjdHMgdGhlIHNwZWNpZmllZCBhc3NvY2lhdGlvbiBmb3IgdGhlIG9uZSB0byBtYW55IG1vZGVsICh0aGUKKyAqIGFzc29jX2lkIGZpZWxkIGlzIGlnbm9yZWQgYnkgdGhlIG9uZSB0byBvbmUgbW9kZWwpLiAgTm90ZSB0aGF0IGlmCisgKiBzYWNrX2RlbGF5IG9yIHNhY2tfZnJlcSBhcmUgMCB3aGVuIHNldHRpbmcgdGhpcyBvcHRpb24sIHRoZW4gdGhlCisgKiBjdXJyZW50IHZhbHVlcyB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuCiAgKi8KK3N0cnVjdCBzY3RwX3NhY2tfaW5mbyB7CisJc2N0cF9hc3NvY190CXNhY2tfYXNzb2NfaWQ7CisJdWludDMyX3QJc2Fja19kZWxheTsKKwl1aW50MzJfdAlzYWNrX2ZyZXE7Cit9OworCiBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB7CiAgICAgc2N0cF9hc3NvY190ICAgICAgICAgICAgYXNzb2NfaWQ7CiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgYXNzb2NfdmFsdWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zbm1wLmggYi9pbmNsdWRlL25ldC9zbm1wLmgKaW5kZXggY2UyZjQ4NS4uNTdjOTM2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc25tcC5oCisrKyBiL2luY2x1ZGUvbmV0L3NubXAuaApAQCAtMTQsOCArMTQsNiBAQAogICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICoJCSRJZDogc25tcC5oLHYgMS4xOSAyMDAxLzA2LzE0IDEzOjQwOjQ2IGRhdmVtIEV4cCAkCi0gKgogICovCiAgCiAjaWZuZGVmIF9TTk1QX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCBkYzQyYjQ0Li4wNmM1MjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC0xNjYsNyArMTY2LDcgQEAKICAgKglAc2tfZXJyOiBsYXN0IGVycm9yCiAgICoJQHNrX2Vycl9zb2Z0OiBlcnJvcnMgdGhhdCBkb24ndCBjYXVzZSBmYWlsdXJlIGJ1dCBhcmUgdGhlIGNhdXNlIG9mIGEKICAgKgkJICAgICAgcGVyc2lzdGVudCBmYWlsdXJlIG5vdCBqdXN0ICd0aW1lZCBvdXQnCi0gICoJQHNrX2Ryb3BzOiByYXcgZHJvcHMgY291bnRlcgorICAqCUBza19kcm9wczogcmF3L3VkcCBkcm9wcyBjb3VudGVyCiAgICoJQHNrX2Fja19iYWNrbG9nOiBjdXJyZW50IGxpc3RlbiBiYWNrbG9nCiAgICoJQHNrX21heF9hY2tfYmFja2xvZzogbGlzdGVuIGJhY2tsb2cgc2V0IGluIGxpc3RlbigpCiAgICoJQHNrX3ByaW9yaXR5OiAlU09fUFJJT1JJVFkgc2V0dGluZwpAQCAtNTI0LDcgKzUyNCw3IEBACiAJaW50CQkJKCppb2N0bCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLAogCQkJCQkgdW5zaWduZWQgbG9uZyBhcmcpOwogCWludAkJCSgqaW5pdCkoc3RydWN0IHNvY2sgKnNrKTsKLQlpbnQJCQkoKmRlc3Ryb3kpKHN0cnVjdCBzb2NrICpzayk7CisJdm9pZAkJCSgqZGVzdHJveSkoc3RydWN0IHNvY2sgKnNrKTsKIAl2b2lkCQkJKCpzaHV0ZG93bikoc3RydWN0IHNvY2sgKnNrLCBpbnQgaG93KTsKIAlpbnQJCQkoKnNldHNvY2tvcHQpKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCAKIAkJCQkJaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCkBAIC01NjUsNyArNTY1LDcgQEAKICNlbmRpZgogCiAJLyogTWVtb3J5IHByZXNzdXJlICovCi0Jdm9pZAkJCSgqZW50ZXJfbWVtb3J5X3ByZXNzdXJlKSh2b2lkKTsKKwl2b2lkCQkJKCplbnRlcl9tZW1vcnlfcHJlc3N1cmUpKHN0cnVjdCBzb2NrICpzayk7CiAJYXRvbWljX3QJCSptZW1vcnlfYWxsb2NhdGVkOwkvKiBDdXJyZW50IGFsbG9jYXRlZCBtZW1vcnkuICovCiAJYXRvbWljX3QJCSpzb2NrZXRzX2FsbG9jYXRlZDsJLyogQ3VycmVudCBudW1iZXIgb2Ygc29ja2V0cy4gKi8KIAkvKgpAQCAtOTkwLDYgKzk5MCwxMSBAQAogZXh0ZXJuIGludCBza19yZWNlaXZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIGNvbnN0IGludCBuZXN0ZWQpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgc2tfc2V0X3NvY2tldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJc2stPnNrX3NvY2tldCA9IHNvY2s7Cit9CisKIC8qIERldGFjaCBzb2NrZXQgZnJvbSBwcm9jZXNzIGNvbnRleHQuCiAgKiBBbm5vdW5jZSBzb2NrZXQgZGVhZCwgZGV0YWNoIGl0IGZyb20gd2FpdCBxdWV1ZSBhbmQgaW5vZGUuCiAgKiBOb3RlIHRoYXQgcGFyZW50IGlub2RlIGhlbGQgcmVmZXJlbmNlIGNvdW50IG9uIHRoaXMgc3RydWN0IHNvY2ssCkBAIC0xMDAxLDcgKzEwMDYsNyBAQAogewogCXdyaXRlX2xvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpOwotCXNrLT5za19zb2NrZXQgPSBOVUxMOworCXNrX3NldF9zb2NrZXQoc2ssIE5VTEwpOwogCXNrLT5za19zbGVlcCAgPSBOVUxMOwogCXdyaXRlX3VubG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogfQpAQCAtMTAxMSw3ICsxMDE2LDcgQEAKIAl3cml0ZV9sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJc2stPnNrX3NsZWVwID0gJnBhcmVudC0+d2FpdDsKIAlwYXJlbnQtPnNrID0gc2s7Ci0Jc2stPnNrX3NvY2tldCA9IHBhcmVudDsKKwlza19zZXRfc29ja2V0KHNrLCBwYXJlbnQpOwogCXNlY3VyaXR5X3NvY2tfZ3JhZnQoc2ssIHBhcmVudCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CkBAIC0xMjA1LDcgKzEyMTAsNyBAQAogCiAJcGFnZSA9IGFsbG9jX3BhZ2VzKHNrLT5za19hbGxvY2F0aW9uLCAwKTsKIAlpZiAoIXBhZ2UpIHsKLQkJc2stPnNrX3Byb3QtPmVudGVyX21lbW9yeV9wcmVzc3VyZSgpOworCQlzay0+c2tfcHJvdC0+ZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHNrKTsKIAkJc2tfc3RyZWFtX21vZGVyYXRlX3NuZGJ1Zihzayk7CiAJfQogCXJldHVybiBwYWdlOwpAQCAtMTMzMSwzMCArMTMzNiw2IEBACiAjZGVmaW5lIExJTUlUX05FVERFQlVHKGZtdCwgYXJncy4uLikgXAogCWRvIHsgaWYgKG5ldF9tc2dfd2FybiAmJiBuZXRfcmF0ZWxpbWl0KCkpIHByaW50ayhmbXQsIyNhcmdzKTsgfSB3aGlsZSgwKQogCi0vKgotICogTWFjcm9zIGZvciBzbGVlcGluZyBvbiBhIHNvY2tldC4gVXNlIHRoZW0gbGlrZSB0aGlzOgotICoKLSAqIFNPQ0tfU0xFRVBfUFJFKHNrKQotICogaWYgKGNvbmRpdGlvbikKLSAqIAlzY2hlZHVsZSgpOwotICogU09DS19TTEVFUF9QT1NUKHNrKQotICoKLSAqIE4uQi4gVGhlc2UgYXJlIG5vdyBvYnNvbGV0ZSBhbmQgd2VyZSwgYWZhaWssIG9ubHkgZXZlciB1c2VkIGluIERFQ25ldAotICogYW5kIHdoZW4gdGhlIGxhc3QgdXNlIG9mIHRoZW0gaW4gREVDbmV0IGhhcyBnb25lLCBJJ20gaW50ZW5kaW5nIHRvCi0gKiByZW1vdmUgdGhlbS4KLSAqLwotCi0jZGVmaW5lIFNPQ0tfU0xFRVBfUFJFKHNrKSAJeyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7IFwKLQkJCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOyBcCi0JCQkJdHNrLT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsgXAotCQkJCWFkZF93YWl0X3F1ZXVlKChzayktPnNrX3NsZWVwLCAmd2FpdCk7IFwKLQkJCQlyZWxlYXNlX3NvY2soc2spOwotCi0jZGVmaW5lIFNPQ0tfU0xFRVBfUE9TVChzaykJdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsgXAotCQkJCXJlbW92ZV93YWl0X3F1ZXVlKChzayktPnNrX3NsZWVwLCAmd2FpdCk7IFwKLQkJCQlsb2NrX3NvY2soc2spOyBcCi0JCQkJfQotCiBleHRlcm4gX191MzIgc3lzY3RsX3dtZW1fbWF4OwogZXh0ZXJuIF9fdTMyIHN5c2N0bF9ybWVtX21heDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc3RwLmggYi9pbmNsdWRlL25ldC9zdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQ0N2YxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvc3RwLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfTkVUX1NUUF9ICisjZGVmaW5lIF9ORVRfU1RQX0gKKworc3RydWN0IHN0cF9wcm90byB7CisJdW5zaWduZWQgY2hhcglncm91cF9hZGRyZXNzW0VUSF9BTEVOXTsKKwl2b2lkCQkoKnJjdikoY29uc3Qgc3RydWN0IHN0cF9wcm90byAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICopOworCXZvaWQJCSpkYXRhOworfTsKKworZXh0ZXJuIGludCBzdHBfcHJvdG9fcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN0cF9wcm90byAqcHJvdG8pOworZXh0ZXJuIHZvaWQgc3RwX3Byb3RvX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN0cF9wcm90byAqcHJvdG8pOworCisjZW5kaWYgLyogX05FVF9TVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCBjZjU0MDM0Li44OTgzMzg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNTAsNiArNTAsNyBAQAogZXh0ZXJuIHZvaWQgdGNwX3RpbWVfd2FpdChzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSwgaW50IHRpbWVvKTsKIAogI2RlZmluZSBNQVhfVENQX0hFQURFUgkoMTI4ICsgTUFYX0hFQURFUikKKyNkZWZpbmUgTUFYX1RDUF9PUFRJT05fU1BBQ0UgNDAKIAogLyogCiAgKiBOZXZlciBvZmZlciBhIHdpbmRvdyBvdmVyIDMyNzY3IHdpdGhvdXQgdXNpbmcgd2luZG93IHNjYWxpbmcuIFNvbWUKQEAgLTE4NCw2ICsxODUsNyBAQAogI2RlZmluZSBUQ1BPTEVOX1NBQ0tfQkFTRV9BTElHTkVECTQKICNkZWZpbmUgVENQT0xFTl9TQUNLX1BFUkJMT0NLCQk4CiAjZGVmaW5lIFRDUE9MRU5fTUQ1U0lHX0FMSUdORUQJCTIwCisjZGVmaW5lIFRDUE9MRU5fTVNTX0FMSUdORUQJCTQKIAogLyogRmxhZ3MgaW4gdHAtPm5vbmFnbGUgKi8KICNkZWZpbmUgVENQX05BR0xFX09GRgkJMQkvKiBOYWdsZSdzIGFsZ28gaXMgZGlzYWJsZWQgKi8KQEAgLTI2NSwxMyArMjY3LDEwIEBACiAKIGV4dGVybiBzdHJ1Y3QgcHJvdG8gdGNwX3Byb3Q7CiAKLURFQ0xBUkVfU05NUF9TVEFUKHN0cnVjdCB0Y3BfbWliLCB0Y3Bfc3RhdGlzdGljcyk7Ci0jZGVmaW5lIFRDUF9JTkNfU1RBVFMoZmllbGQpCQlTTk1QX0lOQ19TVEFUUyh0Y3Bfc3RhdGlzdGljcywgZmllbGQpCi0jZGVmaW5lIFRDUF9JTkNfU1RBVFNfQkgoZmllbGQpCQlTTk1QX0lOQ19TVEFUU19CSCh0Y3Bfc3RhdGlzdGljcywgZmllbGQpCi0jZGVmaW5lIFRDUF9JTkNfU1RBVFNfVVNFUihmaWVsZCkgCVNOTVBfSU5DX1NUQVRTX1VTRVIodGNwX3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBUQ1BfREVDX1NUQVRTKGZpZWxkKQkJU05NUF9ERUNfU1RBVFModGNwX3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBUQ1BfQUREX1NUQVRTX0JIKGZpZWxkLCB2YWwpCVNOTVBfQUREX1NUQVRTX0JIKHRjcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQotI2RlZmluZSBUQ1BfQUREX1NUQVRTX1VTRVIoZmllbGQsIHZhbCkJU05NUF9BRERfU1RBVFNfVVNFUih0Y3Bfc3RhdGlzdGljcywgZmllbGQsIHZhbCkKKyNkZWZpbmUgVENQX0lOQ19TVEFUUyhuZXQsIGZpZWxkKQlTTk1QX0lOQ19TVEFUUygobmV0KS0+bWliLnRjcF9zdGF0aXN0aWNzLCBmaWVsZCkKKyNkZWZpbmUgVENQX0lOQ19TVEFUU19CSChuZXQsIGZpZWxkKQlTTk1QX0lOQ19TVEFUU19CSCgobmV0KS0+bWliLnRjcF9zdGF0aXN0aWNzLCBmaWVsZCkKKyNkZWZpbmUgVENQX0RFQ19TVEFUUyhuZXQsIGZpZWxkKQlTTk1QX0RFQ19TVEFUUygobmV0KS0+bWliLnRjcF9zdGF0aXN0aWNzLCBmaWVsZCkKKyNkZWZpbmUgVENQX0FERF9TVEFUU19VU0VSKG5ldCwgZmllbGQsIHZhbCkgU05NUF9BRERfU1RBVFNfVVNFUigobmV0KS0+bWliLnRjcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQogCiBleHRlcm4gdm9pZAkJCXRjcF92NF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyKTsKIApAQCAtMzk4LDYgKzM5Nyw4IEBACiAJCQkJCQkgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqb3B0X3J4LAogCQkJCQkJICBpbnQgZXN0YWIpOwogCitleHRlcm4gdTgJCQkqdGNwX3BhcnNlX21kNXNpZ19vcHRpb24oc3RydWN0IHRjcGhkciAqdGgpOworCiAvKgogICoJVENQIHY0IGZ1bmN0aW9ucyBleHBvcnRlZCBmb3IgdGhlIGluZXQ2IEFQSQogICovCkBAIC04OTQsNyArODk1LDcgQEAKIAogCQkJd2hpbGUgKChza2IxID0gX19za2JfZGVxdWV1ZSgmdHAtPnVjb3B5LnByZXF1ZXVlKSkgIT0gTlVMTCkgewogCQkJCXNrLT5za19iYWNrbG9nX3Jjdihzaywgc2tiMSk7Ci0JCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQUFJFUVVFVUVEUk9QUEVEKTsKKwkJCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFBSRVFVRVVFRFJPUFBFRCk7CiAJCQl9CiAKIAkJCXRwLT51Y29weS5tZW1vcnkgPSAwOwpAQCAtOTc1LDcgKzk3Niw3IEBACiAJaXJlcS0+cm10X3BvcnQgPSB0Y3BfaGRyKHNrYiktPnNvdXJjZTsKIH0KIAotZXh0ZXJuIHZvaWQgdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZSh2b2lkKTsKK2V4dGVybiB2b2lkIHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKTsKIAogc3RhdGljIGlubGluZSBpbnQga2VlcGFsaXZlX2ludHZsX3doZW4oY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKQEAgLTEwMjQsMTMgKzEwMjUsMTMgQEAKIAogI2RlZmluZSBUQ1BfQ0hFQ0tfVElNRVIoc2spIGRvIHsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9taWJfaW5pdCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9taWJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJLyogU2VlIFJGQyAyMDEyICovCi0JVENQX0FERF9TVEFUU19VU0VSKFRDUF9NSUJfUlRPQUxHT1JJVEhNLCAxKTsKLQlUQ1BfQUREX1NUQVRTX1VTRVIoVENQX01JQl9SVE9NSU4sIFRDUF9SVE9fTUlOKjEwMDAvSFopOwotCVRDUF9BRERfU1RBVFNfVVNFUihUQ1BfTUlCX1JUT01BWCwgVENQX1JUT19NQVgqMTAwMC9IWik7Ci0JVENQX0FERF9TVEFUU19VU0VSKFRDUF9NSUJfTUFYQ09OTiwgLTEpOworCVRDUF9BRERfU1RBVFNfVVNFUihuZXQsIFRDUF9NSUJfUlRPQUxHT1JJVEhNLCAxKTsKKwlUQ1BfQUREX1NUQVRTX1VTRVIobmV0LCBUQ1BfTUlCX1JUT01JTiwgVENQX1JUT19NSU4qMTAwMC9IWik7CisJVENQX0FERF9TVEFUU19VU0VSKG5ldCwgVENQX01JQl9SVE9NQVgsIFRDUF9SVE9fTUFYKjEwMDAvSFopOworCVRDUF9BRERfU1RBVFNfVVNFUihuZXQsIFRDUF9NSUJfTUFYQ09OTiwgLTEpOwogfQogCiAvKiBmcm9tIFNUQ1AgKi8KQEAgLTExMTMsMTQgKzExMTQsMTIgQEAKICNkZWZpbmUgVENQX01ENVNJR19NQVhLRVlTCSh+KHUzMikwKQkvKiByZWFsbHk/ISAqLwogCiAvKiAtIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGludAkJCXRjcF92NF9jYWxjX21kNV9oYXNoKGNoYXIgKm1kNV9oYXNoLAotCQkJCQkJICAgICBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleSwKLQkJCQkJCSAgICAgc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCi0JCQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCQkJCSAgICAgc3RydWN0IHRjcGhkciAqdGgsCi0JCQkJCQkgICAgIGludCBwcm90b2NvbCwKLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHRjcGxlbik7CitleHRlcm4gaW50CQkJdGNwX3Y0X21kNV9oYXNoX3NrYihjaGFyICptZDVfaGFzaCwKKwkJCQkJCSAgICBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleSwKKwkJCQkJCSAgICBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOworCiBleHRlcm4gc3RydWN0IHRjcF9tZDVzaWdfa2V5CSp0Y3BfdjRfbWQ1X2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkgICBzdHJ1Y3Qgc29jayAqYWRkcl9zayk7CiAKQEAgLTExMzIsMTEgKzExMzEsMjYgQEAKIGV4dGVybiBpbnQJCQl0Y3BfdjRfbWQ1X2RvX2RlbChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkgIF9fYmUzMiBhZGRyKTsKIAorI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisjZGVmaW5lIHRjcF90d3NrX21kNV9rZXkodHdzaykJKCh0d3NrKS0+dHdfbWQ1X2tleWxlbiA/IAkJIFwKKwkJCQkgJihzdHJ1Y3QgdGNwX21kNXNpZ19rZXkpIHsJCSBcCisJCQkJCS5rZXkgPSAodHdzayktPnR3X21kNV9rZXksCSBcCisJCQkJCS5rZXlsZW4gPSAodHdzayktPnR3X21kNV9rZXlsZW4sIFwKKwkJCQl9IDogTlVMTCkKKyNlbHNlCisjZGVmaW5lIHRjcF90d3NrX21kNV9rZXkodHdzaykJTlVMTAorI2VuZGlmCisKIGV4dGVybiBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sCSoqdGNwX2FsbG9jX21kNXNpZ19wb29sKHZvaWQpOwogZXh0ZXJuIHZvaWQJCQl0Y3BfZnJlZV9tZDVzaWdfcG9vbCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wJKl9fdGNwX2dldF9tZDVzaWdfcG9vbChpbnQgY3B1KTsKIGV4dGVybiB2b2lkCQkJX190Y3BfcHV0X21kNXNpZ19wb29sKHZvaWQpOworZXh0ZXJuIGludCB0Y3BfbWQ1X2hhc2hfaGVhZGVyKHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKiwgc3RydWN0IHRjcGhkciAqKTsKK2V4dGVybiBpbnQgdGNwX21kNV9oYXNoX3NrYl9kYXRhKHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKiwgc3RydWN0IHNrX2J1ZmYgKiwKKwkJCQkgdW5zaWduZWQgaGVhZGVyX2xlbik7CitleHRlcm4gaW50IHRjcF9tZDVfaGFzaF9rZXkoc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqaHAsCisJCQkgICAgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXkpOwogCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sCQkqdGNwX2dldF9tZDVzaWdfcG9vbCh2b2lkKQpAQCAtMTM0OCw3ICsxMzYyLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyB0Y3BfcmVxdWVzdF9zb2NrX29wczsKIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyB0Y3A2X3JlcXVlc3Rfc29ja19vcHM7CiAKLWV4dGVybiBpbnQgdGNwX3Y0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQgdGNwX3Y0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOwogCiBleHRlcm4gaW50IHRjcF92NF9nc29fc2VuZF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX3Rzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcyk7CkBAIC0xMzY2LDExICsxMzgwLDggQEAKIAlpbnQJCQkoKmNhbGNfbWQ1X2hhc2gpIChjaGFyICpsb2NhdGlvbiwKIAkJCQkJCSAgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICptZDUsCiAJCQkJCQkgIHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCSAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJCQkJICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCi0JCQkJCQkgIHN0cnVjdCB0Y3BoZHIgKnRoLAotCQkJCQkJICBpbnQgcHJvdG9jb2wsCi0JCQkJCQkgIHVuc2lnbmVkIGludCBsZW4pOworCQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQJCQkoKm1kNV9hZGQpIChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICBzdHJ1Y3Qgc29jayAqYWRkcl9zaywKIAkJCQkJICAgIHU4ICpuZXdrZXksCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90aXBjL3RpcGNfcG9ydC5oIGIvaW5jbHVkZS9uZXQvdGlwYy90aXBjX3BvcnQuaAppbmRleCAxMTEwNWJjLi5jNTQ5MTdjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGlwYy90aXBjX3BvcnQuaAorKysgYi9pbmNsdWRlL25ldC90aXBjL3RpcGNfcG9ydC5oCkBAIC0yLDcgKzIsNyBAQAogICogaW5jbHVkZS9uZXQvdGlwYy90aXBjX3BvcnQuaDogSW5jbHVkZSBmaWxlIGZvciBwcml2aWxlZ2VkIGFjY2VzcyB0byBUSVBDIHBvcnRzCiAgKiAKICAqIENvcHlyaWdodCAoYykgMTk5NC0yMDA3LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDgsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc1LDEzICs3NSw3IEBACiB9OwogCiAKLS8qKgotICogdGlwY19jcmVhdGVwb3J0X3JhdyAtIGNyZWF0ZSBhIG5hdGl2ZSBUSVBDIHBvcnQgYW5kIHJldHVybiBpdCdzIHJlZmVyZW5jZQotICoKLSAqIE5vdGU6ICdkaXNwYXRjaGVyJyBhbmQgJ3dha2V1cCcgZGVsaXZlciBhIGxvY2tlZCBwb3J0LgotICovCi0KLXUzMiB0aXBjX2NyZWF0ZXBvcnRfcmF3KHZvaWQgKnVzcl9oYW5kbGUsCitzdHJ1Y3QgdGlwY19wb3J0ICp0aXBjX2NyZWF0ZXBvcnRfcmF3KHZvaWQgKnVzcl9oYW5kbGUsCiAJCQl1MzIgKCpkaXNwYXRjaGVyKShzdHJ1Y3QgdGlwY19wb3J0ICosIHN0cnVjdCBza19idWZmICopLAogCQkJdm9pZCAoKndha2V1cCkoc3RydWN0IHRpcGNfcG9ydCAqKSwKIAkJCWNvbnN0IHUzMiBpbXBvcnRhbmNlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oIGIvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKaW5kZXggMTEyOTM0YS4uODc2YjZmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKKysrIGIvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKQEAgLTUzLDcgKzUzLDcgQEAKICAqLwogZXh0ZXJuIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2NF9zcGVjaWZpYzsKIAotZXh0ZXJuIGludCBpbmV0Nl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIGluZXQ2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdWRwLmggYi9pbmNsdWRlL25ldC91ZHAuaAppbmRleCBjY2NlODM3Li5hZGRjZGM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC91ZHAuaAorKysgYi9pbmNsdWRlL25ldC91ZHAuaApAQCAtMTQ4LDI3ICsxNDgsMjUgQEAKIAkJCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuLAogCQkJCSAgIGludCAoKnB1c2hfcGVuZGluZ19mcmFtZXMpKHN0cnVjdCBzb2NrICopKTsKIAotREVDTEFSRV9TTk1QX1NUQVQoc3RydWN0IHVkcF9taWIsIHVkcF9zdGF0aXN0aWNzKTsKIERFQ0xBUkVfU05NUF9TVEFUKHN0cnVjdCB1ZHBfbWliLCB1ZHBfc3RhdHNfaW42KTsKIAogLyogVURQLUxpdGUgZG9lcyBub3QgaGF2ZSBhIHN0YW5kYXJkaXplZCBNSUIgeWV0LCBzbyB3ZSBpbmhlcml0IGZyb20gVURQICovCi1ERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgdWRwX21pYiwgdWRwbGl0ZV9zdGF0aXN0aWNzKTsKIERFQ0xBUkVfU05NUF9TVEFUKHN0cnVjdCB1ZHBfbWliLCB1ZHBsaXRlX3N0YXRzX2luNik7CiAKIC8qCiAgKiAJU05NUCBzdGF0aXN0aWNzIGZvciBVRFAgYW5kIFVEUC1MaXRlCiAgKi8KLSNkZWZpbmUgVURQX0lOQ19TVEFUU19VU0VSKGZpZWxkLCBpc191ZHBsaXRlKQkJCSAgICAgICBkbyB7ICAgXAotCWlmIChpc191ZHBsaXRlKSBTTk1QX0lOQ19TVEFUU19VU0VSKHVkcGxpdGVfc3RhdGlzdGljcywgZmllbGQpOyAgICAgICBcCi0JZWxzZQkJU05NUF9JTkNfU1RBVFNfVVNFUih1ZHBfc3RhdGlzdGljcywgZmllbGQpOyAgfSAgd2hpbGUoMCkKLSNkZWZpbmUgVURQX0lOQ19TVEFUU19CSChmaWVsZCwgaXNfdWRwbGl0ZSkgCQkJICAgICAgIGRvICB7ICBcCi0JaWYgKGlzX3VkcGxpdGUpIFNOTVBfSU5DX1NUQVRTX0JIKHVkcGxpdGVfc3RhdGlzdGljcywgZmllbGQpOyAgICAgICAgIFwKLQllbHNlCQlTTk1QX0lOQ19TVEFUU19CSCh1ZHBfc3RhdGlzdGljcywgZmllbGQpOyAgICB9ICB3aGlsZSgwKQorI2RlZmluZSBVRFBfSU5DX1NUQVRTX1VTRVIobmV0LCBmaWVsZCwgaXNfdWRwbGl0ZSkJICAgICAgZG8geyBcCisJaWYgKGlzX3VkcGxpdGUpIFNOTVBfSU5DX1NUQVRTX1VTRVIoKG5ldCktPm1pYi51ZHBsaXRlX3N0YXRpc3RpY3MsIGZpZWxkKTsgICAgICAgXAorCWVsc2UJCVNOTVBfSU5DX1NUQVRTX1VTRVIoKG5ldCktPm1pYi51ZHBfc3RhdGlzdGljcywgZmllbGQpOyAgfSAgd2hpbGUoMCkKKyNkZWZpbmUgVURQX0lOQ19TVEFUU19CSChuZXQsIGZpZWxkLCBpc191ZHBsaXRlKSAJICAgICAgZG8geyBcCisJaWYgKGlzX3VkcGxpdGUpIFNOTVBfSU5DX1NUQVRTX0JIKChuZXQpLT5taWIudWRwbGl0ZV9zdGF0aXN0aWNzLCBmaWVsZCk7ICAgICAgICAgXAorCWVsc2UJCVNOTVBfSU5DX1NUQVRTX0JIKChuZXQpLT5taWIudWRwX3N0YXRpc3RpY3MsIGZpZWxkKTsgICAgfSAgd2hpbGUoMCkKIAotI2RlZmluZSBVRFA2X0lOQ19TVEFUU19CSChmaWVsZCwgaXNfdWRwbGl0ZSkgCQkJICAgICAgZG8gIHsgIFwKKyNkZWZpbmUgVURQNl9JTkNfU1RBVFNfQkgobmV0LCBmaWVsZCwgaXNfdWRwbGl0ZSkgCSAgICBkbyB7ICh2b2lkKW5ldDsgIFwKIAlpZiAoaXNfdWRwbGl0ZSkgU05NUF9JTkNfU1RBVFNfQkgodWRwbGl0ZV9zdGF0c19pbjYsIGZpZWxkKTsgICAgICAgICBcCiAJZWxzZQkJU05NUF9JTkNfU1RBVFNfQkgodWRwX3N0YXRzX2luNiwgZmllbGQpOyAgICB9IHdoaWxlKDApCi0jZGVmaW5lIFVEUDZfSU5DX1NUQVRTX1VTRVIoZmllbGQsIGlzX3VkcGxpdGUpCQkJICAgICAgIGRvIHsgICAgXAorI2RlZmluZSBVRFA2X0lOQ19TVEFUU19VU0VSKG5ldCwgZmllbGQsIGlzX3VkcGxpdGUpCSAgICBkbyB7ICh2b2lkKW5ldDsgICAgXAogCWlmIChpc191ZHBsaXRlKSBTTk1QX0lOQ19TVEFUU19VU0VSKHVkcGxpdGVfc3RhdHNfaW42LCBmaWVsZCk7ICAgICAgICAgXAogCWVsc2UJCVNOTVBfSU5DX1NUQVRTX1VTRVIodWRwX3N0YXRzX2luNiwgZmllbGQpOyAgICB9IHdoaWxlKDApCiAKQEAgLTE3NiwxMiArMTc0LDEyIEBACiAjZGVmaW5lIFVEUFhfSU5DX1NUQVRTX0JIKHNrLCBmaWVsZCkgXAogCWRvIHsgXAogCQlpZiAoKHNrKS0+c2tfZmFtaWx5ID09IEFGX0lORVQpIFwKLQkJCVVEUF9JTkNfU1RBVFNfQkgoZmllbGQsIDApOyBcCisJCQlVRFBfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgZmllbGQsIDApOyBcCiAJCWVsc2UgXAotCQkJVURQNl9JTkNfU1RBVFNfQkgoZmllbGQsIDApOyBcCisJCQlVRFA2X0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIGZpZWxkLCAwKTsgXAogCX0gd2hpbGUgKDApOwogI2Vsc2UKLSNkZWZpbmUgVURQWF9JTkNfU1RBVFNfQkgoc2ssIGZpZWxkKSBVRFBfSU5DX1NUQVRTX0JIKGZpZWxkLCAwKQorI2RlZmluZSBVRFBYX0lOQ19TVEFUU19CSChzaywgZmllbGQpIFVEUF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBmaWVsZCwgMCkKICNlbmRpZgogCiAvKiAvcHJvYyAqLwpAQCAtMTk2LDggKzE5NCw4IEBACiBzdHJ1Y3QgdWRwX2l0ZXJfc3RhdGUgewogCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgIHA7CiAJc2FfZmFtaWx5X3QJCWZhbWlseTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZAkqaGFzaHRhYmxlOwogCWludAkJCWJ1Y2tldDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAkqaGFzaHRhYmxlOwogfTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC93ZXh0LmggYi9pbmNsdWRlL25ldC93ZXh0LmgKaW5kZXggODBiMzFkOC4uNmQ3NmEzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvd2V4dC5oCisrKyBiL2luY2x1ZGUvbmV0L3dleHQuaApAQCAtMTIsNiArMTIsOCBAQAogZXh0ZXJuIHZvaWQgd2V4dF9wcm9jX2V4aXQoc3RydWN0IG5ldCAqbmV0KTsKIGV4dGVybiBpbnQgd2V4dF9oYW5kbGVfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50IGNvbXBhdF93ZXh0X2hhbmRsZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCB3ZXh0X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CkBAIC0yNiw2ICsyOCwxMSBAQAogewogCXJldHVybiAtRUlOVkFMOwogfQorc3RhdGljIGlubGluZSBpbnQgY29tcGF0X3dleHRfaGFuZGxlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fTkVUX1dFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaCBiL2luY2x1ZGUvbmV0L3dpcmVsZXNzLmgKaW5kZXggNjY3YjQwOC4uOTMyNGY4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaAorKysgYi9pbmNsdWRlL25ldC93aXJlbGVzcy5oCkBAIC0zOSwxMiArMzksMTggQEAKICAqCW9uIHRoaXMgY2hhbm5lbC4KICAqIEBJRUVFODAyMTFfQ0hBTl9OT19JQlNTOiBJQlNTIGlzIG5vdCBhbGxvd2VkIG9uIHRoaXMgY2hhbm5lbC4KICAqIEBJRUVFODAyMTFfQ0hBTl9SQURBUjogUmFkYXIgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkIG9uIHRoaXMgY2hhbm5lbC4KKyAqIEBJRUVFODAyMTFfQ0hBTl9OT19GQVRfQUJPVkU6IGV4dGVuc2lvbiBjaGFubmVsIGFib3ZlIHRoaXMgY2hhbm5lbAorICogCWlzIG5vdCBwZXJtaXR0ZWQuCisgKiBASUVFRTgwMjExX0NIQU5fTk9fRkFUX0JFTE9XOiBleHRlbnNpb24gY2hhbm5lbCBiZWxvdyB0aGlzIGNoYW5uZWwKKyAqIAlpcyBub3QgcGVybWl0dGVkLgogICovCiBlbnVtIGllZWU4MDIxMV9jaGFubmVsX2ZsYWdzIHsKIAlJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRAkJPSAxPDwwLAogCUlFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTgk9IDE8PDEsCiAJSUVFRTgwMjExX0NIQU5fTk9fSUJTUwkJPSAxPDwyLAogCUlFRUU4MDIxMV9DSEFOX1JBREFSCQk9IDE8PDMsCisJSUVFRTgwMjExX0NIQU5fTk9fRkFUX0FCT1ZFCT0gMTw8NCwKKwlJRUVFODAyMTFfQ0hBTl9OT19GQVRfQkVMT1cJPSAxPDw1LAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggMTgzNGZkZi4uYTU5NGJhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtNjIzLDcgKzYyMyw3IEBACiAJLyoKIAkgKiBPcHRpb25hbCB3b3JrIHF1ZXVlIHRvIGJlIHV0aWxpemVkIGJ5IHRoZSB0cmFuc3BvcnQKIAkgKi8KLQljaGFyIHdvcmtfcV9uYW1lW0tPQkpfTkFNRV9MRU5dOworCWNoYXIgd29ya19xX25hbWVbMjBdOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3E7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaAppbmRleCAwNmY3MmJhLi44NzgzNzNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaApAQCAtNDg5LDkgKzQ4OSw5IEBACiAJdTE2IG5waXZfdnBvcnRzX2ludXNlOwogCiAJLyogd29yayBxdWV1ZXMgZm9yIHJwb3J0IHN0YXRlIG1hbmlwdWxhdGlvbiAqLwotCWNoYXIgd29ya19xX25hbWVbS09CSl9OQU1FX0xFTl07CisJY2hhciB3b3JrX3FfbmFtZVsyMF07CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtfcTsKLQljaGFyIGRldmxvc3Nfd29ya19xX25hbWVbS09CSl9OQU1FX0xFTl07CisJY2hhciBkZXZsb3NzX3dvcmtfcV9uYW1lWzIwXTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGV2bG9zc193b3JrX3E7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCmluZGV4IGY1NDQ0ZTAuLjhiNmM5MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlhdG9taWNfdCBucl9zY2FuczsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNjYW5fd29ya3E7Ci0JY2hhciBzY2FuX3dvcmtxX25hbWVbS09CSl9OQU1FX0xFTl07CisJY2hhciBzY2FuX3dvcmtxX25hbWVbMjBdOwogfTsKIAogZXh0ZXJuIHZvaWQgaXNjc2lfaG9zdF9mb3JfZWFjaF9zZXNzaW9uKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vZXZlbnRzLmggYi9pbmNsdWRlL3hlbi9ldmVudHMuaAppbmRleCA2N2M0NDM2Li40NjgwZmYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi9ldmVudHMuaAorKysgYi9pbmNsdWRlL3hlbi9ldmVudHMuaApAQCAtNDQsNCArNDQsMTEgQEAKIAogZXh0ZXJuIHZvaWQgeGVuX2lycV9yZXN1bWUodm9pZCk7CiAKKy8qIENsZWFyIGFuIGlycSdzIHBlbmRpbmcgc3RhdGUsIGluIHByZXBhcmF0aW9uIGZvciBwb2xsaW5nIG9uIGl0ICovCit2b2lkIHhlbl9jbGVhcl9pcnFfcGVuZGluZyhpbnQgaXJxKTsKKworLyogUG9sbCB3YWl0aW5nIGZvciBhbiBpcnEgdG8gYmVjb21lIHBlbmRpbmcuICBJbiB0aGUgdXN1YWwgY2FzZSwgdGhlCisgICBpcnEgd2lsbCBiZSBkaXNhYmxlZCBzbyBpdCB3b24ndCBkZWxpdmVyIGFuIGludGVycnVwdC4gKi8KK3ZvaWQgeGVuX3BvbGxfaXJxKGludCBpcnEpOworCiAjZW5kaWYJLyogX1hFTl9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vaHZjLWNvbnNvbGUuaCBiL2luY2x1ZGUveGVuL2h2Yy1jb25zb2xlLmgKaW5kZXggOThiNzliYy4uYzNhZGRlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4vaHZjLWNvbnNvbGUuaAorKysgYi9pbmNsdWRlL3hlbi9odmMtY29uc29sZS5oCkBAIC01LDExICs1LDEyIEBACiAKICNpZmRlZiBDT05GSUdfSFZDX1hFTgogdm9pZCB4ZW5fY29uc29sZV9yZXN1bWUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHhlbl9jb25zb2xlX3Jlc3VtZSh2b2lkKSB7IH0KLSNlbmRpZgotCiB2b2lkIHhlbl9yYXdfY29uc29sZV93cml0ZShjb25zdCBjaGFyICpzdHIpOwogdm9pZCB4ZW5fcmF3X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHhlbl9jb25zb2xlX3Jlc3VtZSh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fcmF3X2NvbnNvbGVfd3JpdGUoY29uc3QgY2hhciAqc3RyKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fcmF3X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgeyB9CisjZW5kaWYKIAogI2VuZGlmCS8qIFhFTl9IVkNfQ09OU09MRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvY2FsbGJhY2suaCBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9jYWxsYmFjay5oCmluZGV4IDRhYWRjYmEuLjJhZTNjZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS9jYWxsYmFjay5oCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9jYWxsYmFjay5oCkBAIC04Miw5ICs4Miw5IEBACiAgKi8KICNkZWZpbmUgQ0FMTEJBQ0tPUF9yZWdpc3RlciAgICAgICAgICAgICAgICAwCiBzdHJ1Y3QgY2FsbGJhY2tfcmVnaXN0ZXIgewotICAgIHVpbnQxNl90IHR5cGU7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgc3RydWN0IHhlbl9jYWxsYmFjayBhZGRyZXNzOworCXVpbnQxNl90IHR5cGU7CisJdWludDE2X3QgZmxhZ3M7CisJeGVuX2NhbGxiYWNrX3QgYWRkcmVzczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi94ZW4tb3BzLmggYi9pbmNsdWRlL3hlbi94ZW4tb3BzLmgKaW5kZXggYTcwNmQ2YS4uODgzYTIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4veGVuLW9wcy5oCisrKyBiL2luY2x1ZGUveGVuL3hlbi1vcHMuaApAQCAtMTEsNCArMTEsNyBAQAogdm9pZCB4ZW5fbW1fcGluX2FsbCh2b2lkKTsKIHZvaWQgeGVuX21tX3VucGluX2FsbCh2b2lkKTsKIAordm9pZCB4ZW5fdGltZXJfcmVzdW1lKHZvaWQpOwordm9pZCB4ZW5fYXJjaF9yZXN1bWUodm9pZCk7CisKICNlbmRpZiAvKiBJTkNMVURFX1hFTl9PUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDYxOTlkMTEuLmE1MGJkZmVkIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC04NTYsOCArODU2LDggQEAKIAloZWxwCiAJICBXaXRob3V0IHRoaXMgb3B0aW9uIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHVubG9hZCBhbnkKIAkgIG1vZHVsZXMgKG5vdGUgdGhhdCBzb21lIG1vZHVsZXMgbWF5IG5vdCBiZSB1bmxvYWRhYmxlCi0JICBhbnl3YXkpLCB3aGljaCBtYWtlcyB5b3VyIGtlcm5lbCBzbGlnaHRseSBzbWFsbGVyIGFuZAotCSAgc2ltcGxlci4gIElmIHVuc3VyZSwgc2F5IFkuCisJICBhbnl3YXkpLCB3aGljaCBtYWtlcyB5b3VyIGtlcm5lbCBzbWFsbGVyLCBmYXN0ZXIKKwkgIGFuZCBzaW1wbGVyLiAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIE1PRFVMRV9GT1JDRV9VTkxPQUQKIAlib29sICJGb3JjZWQgbW9kdWxlIHVubG9hZGluZyIKQEAgLTg5MywxNiArODkzLDExIEBACiAJICB3aWxsIGJlIGNyZWF0ZWQgZm9yIGFsbCBtb2R1bGVzLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIEtNT0QKLQlib29sICJBdXRvbWF0aWMga2VybmVsIG1vZHVsZSBsb2FkaW5nIgorCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE1PRFVMRVMKIAloZWxwCi0JICBOb3JtYWxseSB3aGVuIHlvdSBoYXZlIHNlbGVjdGVkIHNvbWUgcGFydHMgb2YgdGhlIGtlcm5lbCB0bwotCSAgYmUgY3JlYXRlZCBhcyBrZXJuZWwgbW9kdWxlcywgeW91IG11c3QgbG9hZCB0aGVtICh1c2luZyB0aGUKLQkgICJtb2Rwcm9iZSIgY29tbWFuZCkgYmVmb3JlIHlvdSBjYW4gdXNlIHRoZW0uIElmIHlvdSBzYXkgWQotCSAgaGVyZSwgc29tZSBwYXJ0cyBvZiB0aGUga2VybmVsIHdpbGwgYmUgYWJsZSB0byBsb2FkIG1vZHVsZXMKLQkgIGF1dG9tYXRpY2FsbHk6IHdoZW4gYSBwYXJ0IG9mIHRoZSBrZXJuZWwgbmVlZHMgYSBtb2R1bGUsIGl0Ci0JICBydW5zIG1vZHByb2JlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50cywgdGhlcmVieQotCSAgbG9hZGluZyB0aGUgbW9kdWxlIGlmIGl0IGlzIGF2YWlsYWJsZS4gIElmIHVuc3VyZSwgc2F5IFkuCisJICBUaGlzIGlzIGJlaW5nIHJlbW92ZWQgc29vbi4gIFRoZXNlIGRheXMsIENPTkZJR19NT0RVTEVTCisJICBpbXBsaWVzIENPTkZJR19LTU9ELCBzbyB1c2UgdGhhdCBpbnN0ZWFkLgogCiBjb25maWcgU1RPUF9NQUNISU5FCiAJYm9vbApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCBkZDI1MjU5Li4yNzY5ZGMwIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtNjM3LDkgKzYzNywxMCBAQAogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJaWYgKGluaXRyZF9zdGFydCAmJiAhaW5pdHJkX2JlbG93X3N0YXJ0X29rICYmCi0JCQlpbml0cmRfc3RhcnQgPCBtaW5fbG93X3BmbiA8PCBQQUdFX1NISUZUKSB7CisJICAgIHBhZ2VfdG9fcGZuKHZpcnRfdG9fcGFnZShpbml0cmRfc3RhcnQpKSA8IG1pbl9sb3dfcGZuKSB7CiAJCXByaW50ayhLRVJOX0NSSVQgImluaXRyZCBvdmVyd3JpdHRlbiAoMHglMDhseCA8IDB4JTA4bHgpIC0gIgotCQkgICAgImRpc2FibGluZyBpdC5cbiIsaW5pdHJkX3N0YXJ0LG1pbl9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpOworCQkgICAgImRpc2FibGluZyBpdC5cbiIsCisJCSAgICBwYWdlX3RvX3Bmbih2aXJ0X3RvX3BhZ2UoaW5pdHJkX3N0YXJ0KSksIG1pbl9sb3dfcGZuKTsKIAkJaW5pdHJkX3N0YXJ0ID0gMDsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCBiM2I2OWZkLi4zZTg0Yjk1IDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC0xMDU0LDcgKzEwNTQsNyBAQAogCQkJfQogCiAJCQl0aW1lbyA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwotCQkJcmV0ID0gbmV0bGlua19hdHRhY2hza2Ioc29jaywgbmMsIDAsICZ0aW1lbywgTlVMTCk7CisJCQlyZXQgPSBuZXRsaW5rX2F0dGFjaHNrYihzb2NrLCBuYywgJnRpbWVvLCBOVUxMKTsKIAkJCWlmIChyZXQgPT0gMSkKIAkJICAgICAgIAkJZ290byByZXRyeTsKIAkJCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCAwMzM2MDNjLi4yY2M0MDljIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC00NDEsNyArNDQxLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlwcmludGsoIkVuYWJsaW5nIG5vbi1ib290IENQVXMgLi4uXG4iKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGZyb3plbl9jcHVzKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBmcm96ZW5fY3B1cykgewogCQllcnJvciA9IF9jcHVfdXAoY3B1LCAxKTsKIAkJaWYgKCFlcnJvcikgewogCQkJcHJpbnRrKCJDUFUlZCBpcyB1cFxuIiwgY3B1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCAzYzNlZjAyLi5kNTczODkxIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC02NzksNyArNjc5LDkgQEAKIAkJCQlpZiAoYXBuID09IGItPnBuKSB7CiAJCQkJCWNwdXNfb3IoKmRwLCAqZHAsIGItPmNwdXNfYWxsb3dlZCk7CiAJCQkJCWItPnBuID0gLTE7Ci0JCQkJCXVwZGF0ZV9kb21haW5fYXR0cihkYXR0ciwgYik7CisJCQkJCWlmIChkYXR0cikKKwkJCQkJCXVwZGF0ZV9kb21haW5fYXR0cihkYXR0cgorCQkJCQkJCQkgICArIG5zbG90LCBiKTsKIAkJCQl9CiAJCQl9CiAJCQluc2xvdCsrOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4ZWNfZG9tYWluLmMgYi9rZXJuZWwvZXhlY19kb21haW4uYwppbmRleCBhOWU2YmFkLi5jMWVmMTkyIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhlY19kb21haW4uYworKysgYi9rZXJuZWwvZXhlY19kb21haW4uYwpAQCAtNjUsNyArNjUsNyBAQAogCQkJCWdvdG8gb3V0OwogCX0KIAotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlyZWFkX3VubG9jaygmZXhlY19kb21haW5zX2xvY2spOwogCXJlcXVlc3RfbW9kdWxlKCJwZXJzb25hbGl0eS0lbGQiLCBwZXJzKTsKIAlyZWFkX2xvY2soJmV4ZWNfZG9tYWluc19sb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDc3YTUxYmUuLjNjZmMwZmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMjE3LDYgKzIxNywxNyBAQAogfQogRVhQT1JUX1NZTUJPTChlbmFibGVfaXJxKTsKIAoraW50IHNldF9pcnFfd2FrZV9yZWFsKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpbnQgcmV0ID0gLUVOWElPOworCisJaWYgKGRlc2MtPmNoaXAtPnNldF93YWtlKQorCQlyZXQgPSBkZXNjLT5jaGlwLT5zZXRfd2FrZShpcnEsIG9uKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICoJc2V0X2lycV93YWtlIC0gY29udHJvbCBpcnEgcG93ZXIgbWFuYWdlbWVudCB3YWtldXAKICAqCUBpcnE6CWludGVycnVwdCB0byBjb250cm9sCkBAIC0yMzMsMzAgKzI0NCwzNCBAQAogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FTlhJTzsKLQlpbnQgKCpzZXRfd2FrZSkodW5zaWduZWQsIHVuc2lnbmVkKSA9IGRlc2MtPmNoaXAtPnNldF93YWtlOworCWludCByZXQgPSAwOwogCiAJLyogd2FrZXVwLWNhcGFibGUgaXJxcyBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZHJpdmVycyB0aGF0CiAJICogZG9uJ3QgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHNsZWVwIG1vZGUgYmVoYXZpb3JzLgogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJaWYgKG9uKSB7Ci0JCWlmIChkZXNjLT53YWtlX2RlcHRoKysgPT0gMCkKLQkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfV0FLRVVQOwotCQllbHNlCi0JCQlzZXRfd2FrZSA9IE5VTEw7CisJCWlmIChkZXNjLT53YWtlX2RlcHRoKysgPT0gMCkgeworCQkJcmV0ID0gc2V0X2lycV93YWtlX3JlYWwoaXJxLCBvbik7CisJCQlpZiAocmV0KQorCQkJCWRlc2MtPndha2VfZGVwdGggPSAwOworCQkJZWxzZQorCQkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfV0FLRVVQOworCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGRlc2MtPndha2VfZGVwdGggPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5iYWxhbmNlZCBJUlEgJWQgIgogCQkJCQkid2FrZSBkaXNhYmxlXG4iLCBpcnEpOwogCQkJV0FSTl9PTigxKTsKLQkJfSBlbHNlIGlmICgtLWRlc2MtPndha2VfZGVwdGggPT0gMCkKLQkJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1dBS0VVUDsKLQkJZWxzZQotCQkJc2V0X3dha2UgPSBOVUxMOworCQl9IGVsc2UgaWYgKC0tZGVzYy0+d2FrZV9kZXB0aCA9PSAwKSB7CisJCQlyZXQgPSBzZXRfaXJxX3dha2VfcmVhbChpcnEsIG9uKTsKKwkJCWlmIChyZXQpCisJCQkJZGVzYy0+d2FrZV9kZXB0aCA9IDE7CisJCQllbHNlCisJCQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfV0FLRVVQOworCQl9CiAJfQotCWlmIChzZXRfd2FrZSkKLQkJcmV0ID0gZGVzYy0+Y2hpcC0+c2V0X3dha2UoaXJxLCBvbik7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDhkZjk3ZDMuLjkwZDdhZjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtNDIsNyArNDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtoZWxwZXJfd3E7CiAKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAKIC8qCiAJbW9kcHJvYmVfcGF0aCBpcyBzZXQgdmlhIC9wcm9jL3N5cy4KZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCA1ZjgwNDc4Li5kOGI1NjA1IDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC03MCw2ICs3MCw5IEBACiAKIHN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKG1vZHVsZV9ub3RpZnlfbGlzdCk7CiAKKy8qIEJvdW5kcyBvZiBtb2R1bGUgYWxsb2NhdGlvbiwgZm9yIHNwZWVkaW5nIF9fbW9kdWxlX3RleHRfYWRkcmVzcyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2FkZHJfbWluID0gLTFVTCwgbW9kdWxlX2FkZHJfbWF4ID0gMDsKKwogaW50IHJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYikKIHsKIAlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm1vZHVsZV9ub3RpZnlfbGlzdCwgbmIpOwpAQCAtMTM0LDE3ICsxMzcsMTkgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0b3BfX19rc3ltdGFiX2dwbFtdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sIF9fc3RhcnRfX19rc3ltdGFiX2dwbF9mdXR1cmVbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0b3BfX19rc3ltdGFiX2dwbF9mdXR1cmVbXTsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWRbXTsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0b3BfX19rc3ltdGFiX3VudXNlZFtdOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sIF9fc3RhcnRfX19rc3ltdGFiX3VudXNlZF9ncGxbXTsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0b3BfX19rc3ltdGFiX3VudXNlZF9ncGxbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0YXJ0X19fa3N5bXRhYl9ncGxfZnV0dXJlW107CiBleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdG9wX19fa3N5bXRhYl9ncGxfZnV0dXJlW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBfX3N0YXJ0X19fa2NyY3RhYltdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgX19zdGFydF9fX2tjcmN0YWJfZ3BsW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBfX3N0YXJ0X19fa2NyY3RhYl9ncGxfZnV0dXJlW107CisjaWZkZWYgQ09ORklHX1VOVVNFRF9TWU1CT0xTCitleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdGFydF9fX2tzeW10YWJfdW51c2VkW107CitleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdG9wX19fa3N5bXRhYl91bnVzZWRbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWRfZ3BsW107CitleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdG9wX19fa3N5bXRhYl91bnVzZWRfZ3BsW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBfX3N0YXJ0X19fa2NyY3RhYl91bnVzZWRbXTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIF9fc3RhcnRfX19rY3JjdGFiX3VudXNlZF9ncGxbXTsKKyNlbmRpZgogCiAjaWZuZGVmIENPTkZJR19NT0RWRVJTSU9OUwogI2RlZmluZSBzeW12ZXJzaW9uKGJhc2UsIGlkeCkgTlVMTApAQCAtMTUyLDYgKzE1NywxNzQgQEAKICNkZWZpbmUgc3ltdmVyc2lvbihiYXNlLCBpZHgpICgoYmFzZSAhPSBOVUxMKSA/ICgoYmFzZSkgKyAoaWR4KSkgOiBOVUxMKQogI2VuZGlmCiAKK3N0cnVjdCBzeW1zZWFyY2ggeworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzdGFydCwgKnN0b3A7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjczsKKwllbnVtIHsKKwkJTk9UX0dQTF9PTkxZLAorCQlHUExfT05MWSwKKwkJV0lMTF9CRV9HUExfT05MWSwKKwl9IGxpY2VuY2U7CisJYm9vbCB1bnVzZWQ7Cit9OworCitzdGF0aWMgYm9vbCBlYWNoX3N5bWJvbF9pbl9zZWN0aW9uKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKmFyciwKKwkJCQkgICB1bnNpZ25lZCBpbnQgYXJyc2l6ZSwKKwkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCQkgICBib29sICgqZm4pKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKnN5bXMsCisJCQkJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGludCBpLCBqOworCisJZm9yIChqID0gMDsgaiA8IGFycnNpemU7IGorKykgeworCQlmb3IgKGkgPSAwOyBpIDwgYXJyW2pdLnN0b3AgLSBhcnJbal0uc3RhcnQ7IGkrKykKKwkJCWlmIChmbigmYXJyW2pdLCBvd25lciwgaSwgZGF0YSkpCisJCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1cm5zIHRydWUgYXMgc29vbiBhcyBmbiByZXR1cm5zIHRydWUsIG90aGVyd2lzZSBmYWxzZS4gKi8KK3N0YXRpYyBib29sIGVhY2hfc3ltYm9sKGJvb2wgKCpmbikoY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqYXJyLAorCQkJCSAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJCSAgIHVuc2lnbmVkIGludCBzeW1udW0sIHZvaWQgKmRhdGEpLAorCQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbW9kdWxlICptb2Q7CisJY29uc3Qgc3RydWN0IHN5bXNlYXJjaCBhcnJbXSA9IHsKKwkJeyBfX3N0YXJ0X19fa3N5bXRhYiwgX19zdG9wX19fa3N5bXRhYiwgX19zdGFydF9fX2tjcmN0YWIsCisJCSAgTk9UX0dQTF9PTkxZLCBmYWxzZSB9LAorCQl7IF9fc3RhcnRfX19rc3ltdGFiX2dwbCwgX19zdG9wX19fa3N5bXRhYl9ncGwsCisJCSAgX19zdGFydF9fX2tjcmN0YWJfZ3BsLAorCQkgIEdQTF9PTkxZLCBmYWxzZSB9LAorCQl7IF9fc3RhcnRfX19rc3ltdGFiX2dwbF9mdXR1cmUsIF9fc3RvcF9fX2tzeW10YWJfZ3BsX2Z1dHVyZSwKKwkJICBfX3N0YXJ0X19fa2NyY3RhYl9ncGxfZnV0dXJlLAorCQkgIFdJTExfQkVfR1BMX09OTFksIGZhbHNlIH0sCisjaWZkZWYgQ09ORklHX1VOVVNFRF9TWU1CT0xTCisJCXsgX19zdGFydF9fX2tzeW10YWJfdW51c2VkLCBfX3N0b3BfX19rc3ltdGFiX3VudXNlZCwKKwkJICBfX3N0YXJ0X19fa2NyY3RhYl91bnVzZWQsCisJCSAgTk9UX0dQTF9PTkxZLCB0cnVlIH0sCisJCXsgX19zdGFydF9fX2tzeW10YWJfdW51c2VkX2dwbCwgX19zdG9wX19fa3N5bXRhYl91bnVzZWRfZ3BsLAorCQkgIF9fc3RhcnRfX19rY3JjdGFiX3VudXNlZF9ncGwsCisJCSAgR1BMX09OTFksIHRydWUgfSwKKyNlbmRpZgorCX07CisKKwlpZiAoZWFjaF9zeW1ib2xfaW5fc2VjdGlvbihhcnIsIEFSUkFZX1NJWkUoYXJyKSwgTlVMTCwgZm4sIGRhdGEpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkgeworCQlzdHJ1Y3Qgc3ltc2VhcmNoIGFycltdID0geworCQkJeyBtb2QtPnN5bXMsIG1vZC0+c3ltcyArIG1vZC0+bnVtX3N5bXMsIG1vZC0+Y3JjcywKKwkJCSAgTk9UX0dQTF9PTkxZLCBmYWxzZSB9LAorCQkJeyBtb2QtPmdwbF9zeW1zLCBtb2QtPmdwbF9zeW1zICsgbW9kLT5udW1fZ3BsX3N5bXMsCisJCQkgIG1vZC0+Z3BsX2NyY3MsCisJCQkgIEdQTF9PTkxZLCBmYWxzZSB9LAorCQkJeyBtb2QtPmdwbF9mdXR1cmVfc3ltcywKKwkJCSAgbW9kLT5ncGxfZnV0dXJlX3N5bXMgKyBtb2QtPm51bV9ncGxfZnV0dXJlX3N5bXMsCisJCQkgIG1vZC0+Z3BsX2Z1dHVyZV9jcmNzLAorCQkJICBXSUxMX0JFX0dQTF9PTkxZLCBmYWxzZSB9LAorI2lmZGVmIENPTkZJR19VTlVTRURfU1lNQk9MUworCQkJeyBtb2QtPnVudXNlZF9zeW1zLAorCQkJICBtb2QtPnVudXNlZF9zeW1zICsgbW9kLT5udW1fdW51c2VkX3N5bXMsCisJCQkgIG1vZC0+dW51c2VkX2NyY3MsCisJCQkgIE5PVF9HUExfT05MWSwgdHJ1ZSB9LAorCQkJeyBtb2QtPnVudXNlZF9ncGxfc3ltcywKKwkJCSAgbW9kLT51bnVzZWRfZ3BsX3N5bXMgKyBtb2QtPm51bV91bnVzZWRfZ3BsX3N5bXMsCisJCQkgIG1vZC0+dW51c2VkX2dwbF9jcmNzLAorCQkJICBHUExfT05MWSwgdHJ1ZSB9LAorI2VuZGlmCisJCX07CisKKwkJaWYgKGVhY2hfc3ltYm9sX2luX3NlY3Rpb24oYXJyLCBBUlJBWV9TSVpFKGFyciksIG1vZCwgZm4sIGRhdGEpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RydWN0IGZpbmRfc3ltYm9sX2FyZyB7CisJLyogSW5wdXQgKi8KKwljb25zdCBjaGFyICpuYW1lOworCWJvb2wgZ3Bsb2s7CisJYm9vbCB3YXJuOworCisJLyogT3V0cHV0ICovCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7Cit9OworCitzdGF0aWMgYm9vbCBmaW5kX3N5bWJvbF9pbl9zZWN0aW9uKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKnN5bXMsCisJCQkJICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCQkJICAgdW5zaWduZWQgaW50IHN5bW51bSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnICpmc2EgPSBkYXRhOworCisJaWYgKHN0cmNtcChzeW1zLT5zdGFydFtzeW1udW1dLm5hbWUsIGZzYS0+bmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFmc2EtPmdwbG9rKSB7CisJCWlmIChzeW1zLT5saWNlbmNlID09IEdQTF9PTkxZKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoc3ltcy0+bGljZW5jZSA9PSBXSUxMX0JFX0dQTF9PTkxZICYmIGZzYS0+d2FybikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU3ltYm9sICVzIGlzIGJlaW5nIHVzZWQgIgorCQkJICAgICAgICJieSBhIG5vbi1HUEwgbW9kdWxlLCB3aGljaCB3aWxsIG5vdCAiCisJCQkgICAgICAgImJlIGFsbG93ZWQgaW4gdGhlIGZ1dHVyZVxuIiwgZnNhLT5uYW1lKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBsZWFzZSBzZWUgdGhlIGZpbGUgIgorCQkJICAgICAgICJEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgIgorCQkJICAgICAgICJpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBtb3JlIGRldGFpbHMuXG4iKTsKKwkJfQorCX0KKworI2lmZGVmIENPTkZJR19VTlVTRURfU1lNQk9MUworCWlmIChzeW1zLT51bnVzZWQgJiYgZnNhLT53YXJuKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlN5bWJvbCAlcyBpcyBtYXJrZWQgYXMgVU5VU0VELCAiCisJCSAgICAgICAiaG93ZXZlciB0aGlzIG1vZHVsZSBpcyB1c2luZyBpdC5cbiIsIGZzYS0+bmFtZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJUaGlzIHN5bWJvbCB3aWxsIGdvIGF3YXkgaW4gdGhlIGZ1dHVyZS5cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiUGxlYXNlIGV2YWx1dGUgaWYgdGhpcyBpcyB0aGUgcmlnaHQgYXBpIHRvIHVzZSBhbmQgaWYgIgorCQkgICAgICAgIml0IHJlYWxseSBpcywgc3VibWl0IGEgcmVwb3J0IHRoZSBsaW51eCBrZXJuZWwgIgorCQkgICAgICAgIm1haWxpbmdsaXN0IHRvZ2V0aGVyIHdpdGggc3VibWl0dGluZyB5b3VyIGNvZGUgZm9yICIKKwkJICAgICAgICJpbmNsdXNpb24uXG4iKTsKKwl9CisjZW5kaWYKKworCWZzYS0+b3duZXIgPSBvd25lcjsKKwlmc2EtPmNyYyA9IHN5bXZlcnNpb24oc3ltcy0+Y3Jjcywgc3ltbnVtKTsKKwlmc2EtPnZhbHVlID0gc3ltcy0+c3RhcnRbc3ltbnVtXS52YWx1ZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogRmluZCBhIHN5bWJvbCwgcmV0dXJuIHZhbHVlLCAob3B0aW9uYWwpIGNyYyBhbmQgKG9wdGlvbmFsKSBtb2R1bGUKKyAqIHdoaWNoIG93bnMgaXQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHN0cnVjdCBtb2R1bGUgKipvd25lciwKKwkJCQkgY29uc3QgdW5zaWduZWQgbG9uZyAqKmNyYywKKwkJCQkgYm9vbCBncGxvaywKKwkJCQkgYm9vbCB3YXJuKQoreworCXN0cnVjdCBmaW5kX3N5bWJvbF9hcmcgZnNhOworCisJZnNhLm5hbWUgPSBuYW1lOworCWZzYS5ncGxvayA9IGdwbG9rOworCWZzYS53YXJuID0gd2FybjsKKworCWlmIChlYWNoX3N5bWJvbChmaW5kX3N5bWJvbF9pbl9zZWN0aW9uLCAmZnNhKSkgeworCQlpZiAob3duZXIpCisJCQkqb3duZXIgPSBmc2Eub3duZXI7CisJCWlmIChjcmMpCisJCQkqY3JjID0gZnNhLmNyYzsKKwkJcmV0dXJuIGZzYS52YWx1ZTsKKwl9CisKKwlERUJVR1AoIkZhaWxlZCB0byBmaW5kIHN5bWJvbCAlc1xuIiwgbmFtZSk7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKIC8qIGxvb2t1cCBzeW1ib2wgaW4gZ2l2ZW4gcmFuZ2Ugb2Yga2VybmVsX3N5bWJvbHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqbG9va3VwX3N5bWJvbChjb25zdCBjaGFyICpuYW1lLAogCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzdGFydCwKQEAgLTE2NCwxNDQgKzMzNyw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBib29sIGFsd2F5c19vayhib29sIGdwbG9rLCBib29sIHdhcm4sIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHByaW50a191bnVzZWRfd2FybmluZyhib29sIGdwbG9rLCBib29sIHdhcm4sIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaWYgKHdhcm4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU3ltYm9sICVzIGlzIG1hcmtlZCBhcyBVTlVTRUQsICIKLQkJICAgICAgICJob3dldmVyIHRoaXMgbW9kdWxlIGlzIHVzaW5nIGl0LlxuIiwgbmFtZSk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJUaGlzIHN5bWJvbCB3aWxsIGdvIGF3YXkgaW4gdGhlIGZ1dHVyZS5cbiIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiUGxlYXNlIGV2YWx1dGUgaWYgdGhpcyBpcyB0aGUgcmlnaHQgYXBpIHRvIHVzZSBhbmQgaWYgIgotCQkgICAgICAgIml0IHJlYWxseSBpcywgc3VibWl0IGEgcmVwb3J0IHRoZSBsaW51eCBrZXJuZWwgIgotCQkgICAgICAgIm1haWxpbmdsaXN0IHRvZ2V0aGVyIHdpdGggc3VibWl0dGluZyB5b3VyIGNvZGUgZm9yICIKLQkJICAgICAgICJpbmNsdXNpb24uXG4iKTsKLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGdwbF9vbmx5X3VudXNlZF93YXJuaW5nKGJvb2wgZ3Bsb2ssIGJvb2wgd2FybiwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlpZiAoIWdwbG9rKQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHByaW50a191bnVzZWRfd2FybmluZyhncGxvaywgd2FybiwgbmFtZSk7Ci19Ci0KLXN0YXRpYyBib29sIGdwbF9vbmx5KGJvb2wgZ3Bsb2ssIGJvb2wgd2FybiwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlyZXR1cm4gZ3Bsb2s7Ci19Ci0KLXN0YXRpYyBib29sIHdhcm5faWZfbm90X2dwbChib29sIGdwbG9rLCBib29sIHdhcm4sIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaWYgKCFncGxvayAmJiB3YXJuKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlN5bWJvbCAlcyBpcyBiZWluZyB1c2VkICIKLQkJICAgICAgICJieSBhIG5vbi1HUEwgbW9kdWxlLCB3aGljaCB3aWxsIG5vdCAiCi0JCSAgICAgICAiYmUgYWxsb3dlZCBpbiB0aGUgZnV0dXJlXG4iLCBuYW1lKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUGxlYXNlIHNlZSB0aGUgZmlsZSAiCi0JCSAgICAgICAiRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0ICIKLQkJICAgICAgICJpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBtb3JlIGRldGFpbHMuXG4iKTsKLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0cnVjdCBzeW1zZWFyY2ggewotCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzdGFydCwgKnN0b3A7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjczsKLQlib29sICgqY2hlY2spKGJvb2wgZ3Bsb2ssIGJvb2wgd2FybiwgY29uc3QgY2hhciAqbmFtZSk7Ci19OwotCi0vKiBMb29rIHRocm91Z2ggdGhpcyBhcnJheSBvZiBzeW1ib2wgdGFibGVzIGZvciBhIHN5bWJvbCBtYXRjaCB3aGljaAotICogcGFzc2VzIHRoZSBjaGVjayBmdW5jdGlvbi4gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc2VhcmNoX3N5bWFycmF5cyhjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICphcnIsCi0JCQkJCQkgICAgdW5zaWduZWQgaW50IG51bSwKLQkJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLAotCQkJCQkJICAgIGJvb2wgZ3Bsb2ssCi0JCQkJCQkgICAgYm9vbCB3YXJuLAotCQkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKipjcmMpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmtzOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCWtzID0gbG9va3VwX3N5bWJvbChuYW1lLCBhcnJbaV0uc3RhcnQsIGFycltpXS5zdG9wKTsKLQkJaWYgKCFrcyB8fCAhYXJyW2ldLmNoZWNrKGdwbG9rLCB3YXJuLCBuYW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjcmMpCi0JCQkqY3JjID0gc3ltdmVyc2lvbihhcnJbaV0uY3Jjcywga3MgLSBhcnJbaV0uc3RhcnQpOwotCQlyZXR1cm4ga3M7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0vKiBGaW5kIGEgc3ltYm9sLCByZXR1cm4gdmFsdWUsIChvcHRpb25hbCkgY3JjIGFuZCAob3B0aW9uYWwpIG1vZHVsZQotICogd2hpY2ggb3ducyBpdCAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgc3RydWN0IG1vZHVsZSAqKm93bmVyLAotCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICoqY3JjLAotCQkJCSBib29sIGdwbG9rLAotCQkJCSBib29sIHdhcm4pCi17Ci0Jc3RydWN0IG1vZHVsZSAqbW9kOwotCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICprczsKLQljb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoIGFycltdID0gewotCQl7IF9fc3RhcnRfX19rc3ltdGFiLCBfX3N0b3BfX19rc3ltdGFiLCBfX3N0YXJ0X19fa2NyY3RhYiwKLQkJICBhbHdheXNfb2sgfSwKLQkJeyBfX3N0YXJ0X19fa3N5bXRhYl9ncGwsIF9fc3RvcF9fX2tzeW10YWJfZ3BsLAotCQkgIF9fc3RhcnRfX19rY3JjdGFiX2dwbCwgZ3BsX29ubHkgfSwKLQkJeyBfX3N0YXJ0X19fa3N5bXRhYl9ncGxfZnV0dXJlLCBfX3N0b3BfX19rc3ltdGFiX2dwbF9mdXR1cmUsCi0JCSAgX19zdGFydF9fX2tjcmN0YWJfZ3BsX2Z1dHVyZSwgd2Fybl9pZl9ub3RfZ3BsIH0sCi0JCXsgX19zdGFydF9fX2tzeW10YWJfdW51c2VkLCBfX3N0b3BfX19rc3ltdGFiX3VudXNlZCwKLQkJICBfX3N0YXJ0X19fa2NyY3RhYl91bnVzZWQsIHByaW50a191bnVzZWRfd2FybmluZyB9LAotCQl7IF9fc3RhcnRfX19rc3ltdGFiX3VudXNlZF9ncGwsIF9fc3RvcF9fX2tzeW10YWJfdW51c2VkX2dwbCwKLQkJICBfX3N0YXJ0X19fa2NyY3RhYl91bnVzZWRfZ3BsLCBncGxfb25seV91bnVzZWRfd2FybmluZyB9LAotCX07Ci0KLQkvKiBDb3JlIGtlcm5lbCBmaXJzdC4gKi8KLQlrcyA9IHNlYXJjaF9zeW1hcnJheXMoYXJyLCBBUlJBWV9TSVpFKGFyciksIG5hbWUsIGdwbG9rLCB3YXJuLCBjcmMpOwotCWlmIChrcykgewotCQlpZiAob3duZXIpCi0JCQkqb3duZXIgPSBOVUxMOwotCQlyZXR1cm4ga3MtPnZhbHVlOwotCX0KLQotCS8qIE5vdyB0cnkgbW9kdWxlcy4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpIHsKLQkJc3RydWN0IHN5bXNlYXJjaCBhcnJbXSA9IHsKLQkJCXsgbW9kLT5zeW1zLCBtb2QtPnN5bXMgKyBtb2QtPm51bV9zeW1zLCBtb2QtPmNyY3MsCi0JCQkgIGFsd2F5c19vayB9LAotCQkJeyBtb2QtPmdwbF9zeW1zLCBtb2QtPmdwbF9zeW1zICsgbW9kLT5udW1fZ3BsX3N5bXMsCi0JCQkgIG1vZC0+Z3BsX2NyY3MsIGdwbF9vbmx5IH0sCi0JCQl7IG1vZC0+Z3BsX2Z1dHVyZV9zeW1zLAotCQkJICBtb2QtPmdwbF9mdXR1cmVfc3ltcyArIG1vZC0+bnVtX2dwbF9mdXR1cmVfc3ltcywKLQkJCSAgbW9kLT5ncGxfZnV0dXJlX2NyY3MsIHdhcm5faWZfbm90X2dwbCB9LAotCQkJeyBtb2QtPnVudXNlZF9zeW1zLAotCQkJICBtb2QtPnVudXNlZF9zeW1zICsgbW9kLT5udW1fdW51c2VkX3N5bXMsCi0JCQkgIG1vZC0+dW51c2VkX2NyY3MsIHByaW50a191bnVzZWRfd2FybmluZyB9LAotCQkJeyBtb2QtPnVudXNlZF9ncGxfc3ltcywKLQkJCSAgbW9kLT51bnVzZWRfZ3BsX3N5bXMgKyBtb2QtPm51bV91bnVzZWRfZ3BsX3N5bXMsCi0JCQkgIG1vZC0+dW51c2VkX2dwbF9jcmNzLCBncGxfb25seV91bnVzZWRfd2FybmluZyB9LAotCQl9OwotCi0JCWtzID0gc2VhcmNoX3N5bWFycmF5cyhhcnIsIEFSUkFZX1NJWkUoYXJyKSwKLQkJCQkgICAgICBuYW1lLCBncGxvaywgd2FybiwgY3JjKTsKLQkJaWYgKGtzKSB7Ci0JCQlpZiAob3duZXIpCi0JCQkJKm93bmVyID0gbW9kOwotCQkJcmV0dXJuIGtzLT52YWx1ZTsKLQkJfQotCX0KLQotCURFQlVHUCgiRmFpbGVkIHRvIGZpbmQgc3ltYm9sICVzXG4iLCBuYW1lKTsKLQlyZXR1cm4gLUVOT0VOVDsKLX0KLQogLyogU2VhcmNoIGZvciBtb2R1bGUgYnkgbmFtZTogbXVzdCBob2xkIG1vZHVsZV9tdXRleC4gKi8KIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpmaW5kX21vZHVsZShjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNjM5LDggKzY3NCw4IEBACiB7CiAJc3RydWN0IHN0b3ByZWYgKnNyZWYgPSBfc3JlZjsKIAotCS8qIElmIGl0J3Mgbm90IHVudXNlZCwgcXVpdCB1bmxlc3Mgd2UgYXJlIHRvbGQgdG8gYmxvY2suICovCi0JaWYgKChzcmVmLT5mbGFncyAmIE9fTk9OQkxPQ0spICYmIG1vZHVsZV9yZWZjb3VudChzcmVmLT5tb2QpICE9IDApIHsKKwkvKiBJZiBpdCdzIG5vdCB1bnVzZWQsIHF1aXQgdW5sZXNzIHdlJ3JlIGZvcmNpbmcuICovCisJaWYgKG1vZHVsZV9yZWZjb3VudChzcmVmLT5tb2QpICE9IDApIHsKIAkJaWYgKCEoKnNyZWYtPmZvcmNlZCA9IHRyeV9mb3JjZV91bmxvYWQoc3JlZi0+ZmxhZ3MpKSkKIAkJCXJldHVybiAtRVdPVUxEQkxPQ0s7CiAJfQpAQCAtNjUyLDkgKzY4NywxNiBAQAogCiBzdGF0aWMgaW50IHRyeV9zdG9wX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIGludCBmbGFncywgaW50ICpmb3JjZWQpCiB7Ci0Jc3RydWN0IHN0b3ByZWYgc3JlZiA9IHsgbW9kLCBmbGFncywgZm9yY2VkIH07CisJaWYgKGZsYWdzICYgT19OT05CTE9DSykgeworCQlzdHJ1Y3Qgc3RvcHJlZiBzcmVmID0geyBtb2QsIGZsYWdzLCBmb3JjZWQgfTsKIAotCXJldHVybiBzdG9wX21hY2hpbmVfcnVuKF9fdHJ5X3N0b3BfbW9kdWxlLCAmc3JlZiwgTlJfQ1BVUyk7CisJCXJldHVybiBzdG9wX21hY2hpbmVfcnVuKF9fdHJ5X3N0b3BfbW9kdWxlLCAmc3JlZiwgTlJfQ1BVUyk7CisJfSBlbHNlIHsKKwkJLyogV2UgZG9uJ3QgbmVlZCB0byBzdG9wIHRoZSBtYWNoaW5lIGZvciB0aGlzLiAqLworCQltb2QtPnN0YXRlID0gTU9EVUxFX1NUQVRFX0dPSU5HOworCQlzeW5jaHJvbml6ZV9zY2hlZCgpOworCQlyZXR1cm4gMDsKKwl9CiB9CiAKIHVuc2lnbmVkIGludCBtb2R1bGVfcmVmY291bnQoc3RydWN0IG1vZHVsZSAqbW9kKQpAQCAtMTQ0NSw4ICsxNDg3LDEwIEBACiAJCXsgbW9kLT5zeW1zLCBtb2QtPm51bV9zeW1zIH0sCiAJCXsgbW9kLT5ncGxfc3ltcywgbW9kLT5udW1fZ3BsX3N5bXMgfSwKIAkJeyBtb2QtPmdwbF9mdXR1cmVfc3ltcywgbW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zIH0sCisjaWZkZWYgQ09ORklHX1VOVVNFRF9TWU1CT0xTCiAJCXsgbW9kLT51bnVzZWRfc3ltcywgbW9kLT5udW1fdW51c2VkX3N5bXMgfSwKIAkJeyBtb2QtPnVudXNlZF9ncGxfc3ltcywgbW9kLT5udW1fdW51c2VkX2dwbF9zeW1zIH0sCisjZW5kaWYKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXJyKTsgaSsrKSB7CkBAIC0xNTI2LDcgKzE1NzAsNyBAQAogfQogCiAvKiBVcGRhdGUgc2l6ZSB3aXRoIHRoaXMgc2VjdGlvbjogcmV0dXJuIG9mZnNldC4gKi8KLXN0YXRpYyBsb25nIGdldF9vZmZzZXQodW5zaWduZWQgbG9uZyAqc2l6ZSwgRWxmX1NoZHIgKnNlY2hkcikKK3N0YXRpYyBsb25nIGdldF9vZmZzZXQodW5zaWduZWQgaW50ICpzaXplLCBFbGZfU2hkciAqc2VjaGRyKQogewogCWxvbmcgcmV0OwogCkBAIC0xNzM4LDYgKzE3ODIsMjAgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIAorc3RhdGljIHZvaWQgKm1vZHVsZV9hbGxvY191cGRhdGVfYm91bmRzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICpyZXQgPSBtb2R1bGVfYWxsb2Moc2l6ZSk7CisKKwlpZiAocmV0KSB7CisJCS8qIFVwZGF0ZSBtb2R1bGUgYm91bmRzLiAqLworCQlpZiAoKHVuc2lnbmVkIGxvbmcpcmV0IDwgbW9kdWxlX2FkZHJfbWluKQorCQkJbW9kdWxlX2FkZHJfbWluID0gKHVuc2lnbmVkIGxvbmcpcmV0OworCQlpZiAoKHVuc2lnbmVkIGxvbmcpcmV0ICsgc2l6ZSA+IG1vZHVsZV9hZGRyX21heCkKKwkJCW1vZHVsZV9hZGRyX21heCA9ICh1bnNpZ25lZCBsb25nKXJldCArIHNpemU7CisJfQorCXJldHVybiByZXQ7Cit9CisKIC8qIEFsbG9jYXRlIGFuZCBsb2FkIHRoZSBtb2R1bGU6IG5vdGUgdGhhdCBzaXplIG9mIHNlY3Rpb24gMCBpcyBhbHdheXMKICAgIHplcm8sIGFuZCB3ZSByZWx5IG9uIHRoaXMgZm9yIG9wdGlvbmFsIHNlY3Rpb25zLiAqLwogc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxvYWRfbW9kdWxlKHZvaWQgX191c2VyICp1bW9kLApAQCAtMTc2NCwxMCArMTgyMiwxMiBAQAogCXVuc2lnbmVkIGludCBncGxmdXR1cmVpbmRleDsKIAl1bnNpZ25lZCBpbnQgZ3BsZnV0dXJlY3JjaW5kZXg7CiAJdW5zaWduZWQgaW50IHVud2luZGV4ID0gMDsKKyNpZmRlZiBDT05GSUdfVU5VU0VEX1NZTUJPTFMKIAl1bnNpZ25lZCBpbnQgdW51c2VkaW5kZXg7CiAJdW5zaWduZWQgaW50IHVudXNlZGNyY2luZGV4OwogCXVuc2lnbmVkIGludCB1bnVzZWRncGxpbmRleDsKIAl1bnNpZ25lZCBpbnQgdW51c2VkZ3BsY3JjaW5kZXg7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQgbWFya2Vyc2luZGV4OwogCXVuc2lnbmVkIGludCBtYXJrZXJzc3RyaW5nc2luZGV4OwogCXN0cnVjdCBtb2R1bGUgKm1vZDsKQEAgLTE4NTAsMTMgKzE5MTAsMTUgQEAKIAlleHBvcnRpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYiIpOwogCWdwbGluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rc3ltdGFiX2dwbCIpOwogCWdwbGZ1dHVyZWluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rc3ltdGFiX2dwbF9mdXR1cmUiKTsKLQl1bnVzZWRpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYl91bnVzZWQiKTsKLQl1bnVzZWRncGxpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYl91bnVzZWRfZ3BsIik7CiAJY3JjaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tjcmN0YWIiKTsKIAlncGxjcmNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa2NyY3RhYl9ncGwiKTsKIAlncGxmdXR1cmVjcmNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa2NyY3RhYl9ncGxfZnV0dXJlIik7CisjaWZkZWYgQ09ORklHX1VOVVNFRF9TWU1CT0xTCisJdW51c2VkaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tzeW10YWJfdW51c2VkIik7CisJdW51c2VkZ3BsaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tzeW10YWJfdW51c2VkX2dwbCIpOwogCXVudXNlZGNyY2luZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiX3VudXNlZCIpOwogCXVudXNlZGdwbGNyY2luZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiX3VudXNlZF9ncGwiKTsKKyNlbmRpZgogCXNldHVwaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX3BhcmFtIik7CiAJZXhpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fZXhfdGFibGUiKTsKIAlvYnNwYXJtaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX29ic3Bhcm0iKTsKQEAgLTE5MzUsNyArMTk5Nyw3IEBACiAJbGF5b3V0X3NlY3Rpb25zKG1vZCwgaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzKTsKIAogCS8qIERvIHRoZSBhbGxvY3MuICovCi0JcHRyID0gbW9kdWxlX2FsbG9jKG1vZC0+Y29yZV9zaXplKTsKKwlwdHIgPSBtb2R1bGVfYWxsb2NfdXBkYXRlX2JvdW5kcyhtb2QtPmNvcmVfc2l6ZSk7CiAJaWYgKCFwdHIpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmcmVlX3BlcmNwdTsKQEAgLTE5NDMsNyArMjAwNSw3IEBACiAJbWVtc2V0KHB0ciwgMCwgbW9kLT5jb3JlX3NpemUpOwogCW1vZC0+bW9kdWxlX2NvcmUgPSBwdHI7CiAKLQlwdHIgPSBtb2R1bGVfYWxsb2MobW9kLT5pbml0X3NpemUpOworCXB0ciA9IG1vZHVsZV9hbGxvY191cGRhdGVfYm91bmRzKG1vZC0+aW5pdF9zaXplKTsKIAlpZiAoIXB0ciAmJiBtb2QtPmluaXRfc2l6ZSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWVfY29yZTsKQEAgLTIwMTgsMTQgKzIwODAsMTUgQEAKIAkJbW9kLT5ncGxfY3JjcyA9ICh2b2lkICopc2VjaGRyc1tncGxjcmNpbmRleF0uc2hfYWRkcjsKIAltb2QtPm51bV9ncGxfZnV0dXJlX3N5bXMgPSBzZWNoZHJzW2dwbGZ1dHVyZWluZGV4XS5zaF9zaXplIC8KIAkJCQkJc2l6ZW9mKCptb2QtPmdwbF9mdXR1cmVfc3ltcyk7Ci0JbW9kLT5udW1fdW51c2VkX3N5bXMgPSBzZWNoZHJzW3VudXNlZGluZGV4XS5zaF9zaXplIC8KLQkJCQkJc2l6ZW9mKCptb2QtPnVudXNlZF9zeW1zKTsKLQltb2QtPm51bV91bnVzZWRfZ3BsX3N5bXMgPSBzZWNoZHJzW3VudXNlZGdwbGluZGV4XS5zaF9zaXplIC8KLQkJCQkJc2l6ZW9mKCptb2QtPnVudXNlZF9ncGxfc3ltcyk7CiAJbW9kLT5ncGxfZnV0dXJlX3N5bXMgPSAodm9pZCAqKXNlY2hkcnNbZ3BsZnV0dXJlaW5kZXhdLnNoX2FkZHI7CiAJaWYgKGdwbGZ1dHVyZWNyY2luZGV4KQogCQltb2QtPmdwbF9mdXR1cmVfY3JjcyA9ICh2b2lkICopc2VjaGRyc1tncGxmdXR1cmVjcmNpbmRleF0uc2hfYWRkcjsKIAorI2lmZGVmIENPTkZJR19VTlVTRURfU1lNQk9MUworCW1vZC0+bnVtX3VudXNlZF9zeW1zID0gc2VjaGRyc1t1bnVzZWRpbmRleF0uc2hfc2l6ZSAvCisJCQkJCXNpemVvZigqbW9kLT51bnVzZWRfc3ltcyk7CisJbW9kLT5udW1fdW51c2VkX2dwbF9zeW1zID0gc2VjaGRyc1t1bnVzZWRncGxpbmRleF0uc2hfc2l6ZSAvCisJCQkJCXNpemVvZigqbW9kLT51bnVzZWRfZ3BsX3N5bXMpOwogCW1vZC0+dW51c2VkX3N5bXMgPSAodm9pZCAqKXNlY2hkcnNbdW51c2VkaW5kZXhdLnNoX2FkZHI7CiAJaWYgKHVudXNlZGNyY2luZGV4KQogCQltb2QtPnVudXNlZF9jcmNzID0gKHZvaWQgKilzZWNoZHJzW3VudXNlZGNyY2luZGV4XS5zaF9hZGRyOwpAQCAtMjAzMywxMyArMjA5NiwxNyBAQAogCWlmICh1bnVzZWRncGxjcmNpbmRleCkKIAkJbW9kLT51bnVzZWRfZ3BsX2NyY3MKIAkJCT0gKHZvaWQgKilzZWNoZHJzW3VudXNlZGdwbGNyY2luZGV4XS5zaF9hZGRyOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlMKLQlpZiAoKG1vZC0+bnVtX3N5bXMgJiYgIWNyY2luZGV4KSB8fAotCSAgICAobW9kLT5udW1fZ3BsX3N5bXMgJiYgIWdwbGNyY2luZGV4KSB8fAotCSAgICAobW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zICYmICFncGxmdXR1cmVjcmNpbmRleCkgfHwKLQkgICAgKG1vZC0+bnVtX3VudXNlZF9zeW1zICYmICF1bnVzZWRjcmNpbmRleCkgfHwKLQkgICAgKG1vZC0+bnVtX3VudXNlZF9ncGxfc3ltcyAmJiAhdW51c2VkZ3BsY3JjaW5kZXgpKSB7CisJaWYgKChtb2QtPm51bV9zeW1zICYmICFjcmNpbmRleCkKKwkgICAgfHwgKG1vZC0+bnVtX2dwbF9zeW1zICYmICFncGxjcmNpbmRleCkKKwkgICAgfHwgKG1vZC0+bnVtX2dwbF9mdXR1cmVfc3ltcyAmJiAhZ3BsZnV0dXJlY3JjaW5kZXgpCisjaWZkZWYgQ09ORklHX1VOVVNFRF9TWU1CT0xTCisJICAgIHx8IChtb2QtPm51bV91bnVzZWRfc3ltcyAmJiAhdW51c2VkY3JjaW5kZXgpCisJICAgIHx8IChtb2QtPm51bV91bnVzZWRfZ3BsX3N5bXMgJiYgIXVudXNlZGdwbGNyY2luZGV4KQorI2VuZGlmCisJCSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm8gdmVyc2lvbnMgZm9yIGV4cG9ydGVkIHN5bWJvbHMuXG4iLCBtb2QtPm5hbWUpOwogCQllcnIgPSB0cnlfdG9fZm9yY2VfbG9hZChtb2QsICJub2NyYyIpOwogCQlpZiAoZXJyKQpAQCAtMjUxMiw3ICsyNTc5LDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICptb2QgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBtb2R1bGUsIGxpc3QpOwogCWNoYXIgYnVmWzhdOwogCi0Jc2VxX3ByaW50ZihtLCAiJXMgJWx1IiwKKwlzZXFfcHJpbnRmKG0sICIlcyAldSIsCiAJCSAgIG1vZC0+bmFtZSwgbW9kLT5pbml0X3NpemUgKyBtb2QtPmNvcmVfc2l6ZSk7CiAJcHJpbnRfdW5sb2FkX2luZm8obSwgbW9kKTsKIApAQCAtMjU5NSw2ICsyNjYyLDkgQEAKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAKKwlpZiAoYWRkciA8IG1vZHVsZV9hZGRyX21pbiB8fCBhZGRyID4gbW9kdWxlX2FkZHJfbWF4KQorCQlyZXR1cm4gTlVMTDsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkKIAkJaWYgKHdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9pbml0LCBtb2QtPmluaXRfdGV4dF9zaXplKQogCQkgICAgfHwgd2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV90ZXh0X3NpemUpKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCBiNDVkYTQwLi41OWRmZGYxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtODIsNyArODIsNyBAQAogCiBjb25maWcgUE1fU0xFRVAKIAlib29sCi0JZGVwZW5kcyBvbiBTVVNQRU5EIHx8IEhJQkVSTkFUSU9OCisJZGVwZW5kcyBvbiBTVVNQRU5EIHx8IEhJQkVSTkFUSU9OIHx8IFhFTl9TQVZFX1JFU1RPUkUKIAlkZWZhdWx0IHkKIAogY29uZmlnIFNVU1BFTkQKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VjbGFzc2ljLmMgYi9rZXJuZWwvcmN1Y2xhc3NpYy5jCmluZGV4IDE2ZWVlYWEuLjZmODY5NmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VjbGFzc2ljLmMKKysrIGIva2VybmVsL3JjdWNsYXNzaWMuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJCSAqLwogCQljcHVzX2FuZChjcHVtYXNrLCByY3AtPmNwdW1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKIAkJY3B1X2NsZWFyKHJkcC0+Y3B1LCBjcHVtYXNrKTsKLQkJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVtYXNrKQorCQlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIGNwdW1hc2spCiAJCQlzbXBfc2VuZF9yZXNjaGVkdWxlKGNwdSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXByZWVtcHQuYyBiL2tlcm5lbC9yY3VwcmVlbXB0LmMKaW5kZXggNmY2MmI3Ny4uMjc4Mjc5MyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXByZWVtcHQuYworKysgYi9rZXJuZWwvcmN1cHJlZW1wdC5jCkBAIC03NTYsNyArNzU2LDcgQEAKIAogCS8qIE5vdyBhc2sgZWFjaCBDUFUgZm9yIGFja25vd2xlZGdlbWVudCBvZiB0aGUgZmxpcC4gKi8KIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgcmN1X2NwdV9vbmxpbmVfbWFwKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCByY3VfY3B1X29ubGluZV9tYXApIHsKIAkJcGVyX2NwdShyY3VfZmxpcF9mbGFnLCBjcHUpID0gcmN1X2ZsaXBwZWQ7CiAJCWR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKGNwdSk7CiAJfQpAQCAtNzc0LDcgKzc3NCw3IEBACiAJaW50IGNwdTsKIAogCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2ExKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIHJjdV9jcHVfb25saW5lX21hcCkKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIHJjdV9jcHVfb25saW5lX21hcCkKIAkJaWYgKHJjdV90cnlfZmxpcF93YWl0YWNrX25lZWRlZChjcHUpICYmCiAJCSAgICBwZXJfY3B1KHJjdV9mbGlwX2ZsYWcsIGNwdSkgIT0gcmN1X2ZsaXBfc2VlbikgewogCQkJUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfYWUxKTsKQEAgLTgwNiw3ICs4MDYsNyBAQAogCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc3VtIG9mIHRoZSAibGFzdCIgY291bnRlcnMgaXMgemVyby4gKi8KIAogCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX3oxKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIHJjdV9jcHVfb25saW5lX21hcCkKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIHJjdV9jcHVfb25saW5lX21hcCkKIAkJc3VtICs9IFJDVV9EQVRBX0NQVShjcHUpLT5yY3VfZmxpcGN0cltsYXN0aWR4XTsKIAlpZiAoc3VtICE9IDApIHsKIAkJUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfemUxKTsKQEAgLTgyMSw3ICs4MjEsNyBAQAogCXNtcF9tYigpOyAgLyogIF5eXl5eXl5eXl5eXiAqLwogCiAJLyogQ2FsbCBmb3IgYSBtZW1vcnkgYmFycmllciBmcm9tIGVhY2ggQ1BVLiAqLwotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgcmN1X2NwdV9vbmxpbmVfbWFwKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCByY3VfY3B1X29ubGluZV9tYXApIHsKIAkJcGVyX2NwdShyY3VfbWJfZmxhZywgY3B1KSA9IHJjdV9tYl9uZWVkZWQ7CiAJCWR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKGNwdSk7CiAJfQpAQCAtODQxLDcgKzg0MSw3IEBACiAJaW50IGNwdTsKIAogCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX20xKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIHJjdV9jcHVfb25saW5lX21hcCkKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIHJjdV9jcHVfb25saW5lX21hcCkKIAkJaWYgKHJjdV90cnlfZmxpcF93YWl0bWJfbmVlZGVkKGNwdSkgJiYKIAkJICAgIHBlcl9jcHUocmN1X21iX2ZsYWcsIGNwdSkgIT0gcmN1X21iX2RvbmUpIHsKIAkJCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX21lMSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcnRtdXRleC10ZXN0ZXIuYyBiL2tlcm5lbC9ydG11dGV4LXRlc3Rlci5jCmluZGV4IDA5MmU0YzYuLmE1NmY2MjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ydG11dGV4LXRlc3Rlci5jCisrKyBiL2tlcm5lbC9ydG11dGV4LXRlc3Rlci5jCkBAIC0yOTcsOCArMjk3LDggQEAKICAqCiAgKiBvcGNvZGU6ZGF0YQogICovCi1zdGF0aWMgc3NpemVfdCBzeXNmc190ZXN0X2NvbW1hbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAotCQkJCSAgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc3lzZnNfdGVzdF9jb21tYW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHNjaGVkX3BhcmFtIHNjaGVkcGFyOwogCXN0cnVjdCB0ZXN0X3RocmVhZF9kYXRhICp0ZDsKQEAgLTM2MCw3ICszNjAsOCBAQAogICogQGRldjoJdGhyZWFkIHRvIHF1ZXJ5CiAgKiBAYnVmOgljaGFyIGJ1ZmZlciB0byBiZSBmaWxsZWQgd2l0aCB0aHJlYWQgc3RhdHVzIGluZm8KICAqLwotc3RhdGljIHNzaXplX3Qgc3lzZnNfdGVzdF9zdGF0dXMoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc3lzZnNfdGVzdF9zdGF0dXMoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdGVzdF90aHJlYWRfZGF0YSAqdGQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDYyYjFiOGUuLjZhY2Y3NDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0yMDI5LDcgKzIwMjksNyBAQAogCQkvKiBUYWxseSB1cCB0aGUgbG9hZCBvZiBhbGwgQ1BVcyBpbiB0aGUgZ3JvdXAgKi8KIAkJYXZnX2xvYWQgPSAwOwogCi0JCWZvcl9lYWNoX2NwdV9tYXNrKGksIGdyb3VwLT5jcHVtYXNrKSB7CisJCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksIGdyb3VwLT5jcHVtYXNrKSB7CiAJCQkvKiBCaWFzIGJhbGFuY2luZyB0b3dhcmQgY3B1cyBvZiBvdXIgZG9tYWluICovCiAJCQlpZiAobG9jYWxfZ3JvdXApCiAJCQkJbG9hZCA9IHNvdXJjZV9sb2FkKGksIGxvYWRfaWR4KTsKQEAgLTIwNzEsNyArMjA3MSw3IEBACiAJLyogVHJhdmVyc2Ugb25seSB0aGUgYWxsb3dlZCBDUFVzICovCiAJY3B1c19hbmQoKnRtcCwgZ3JvdXAtPmNwdW1hc2ssIHAtPmNwdXNfYWxsb3dlZCk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCAqdG1wKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgKnRtcCkgewogCQlsb2FkID0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKIAogCQlpZiAobG9hZCA8IG1pbl9sb2FkIHx8IChsb2FkID09IG1pbl9sb2FkICYmIGkgPT0gdGhpc19jcHUpKSB7CkBAIC0zMDg5LDcgKzMwODksNyBAQAogCQltYXhfY3B1X2xvYWQgPSAwOwogCQltaW5fY3B1X2xvYWQgPSB+MFVMOwogCi0JCWZvcl9lYWNoX2NwdV9tYXNrKGksIGdyb3VwLT5jcHVtYXNrKSB7CisJCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksIGdyb3VwLT5jcHVtYXNrKSB7CiAJCQlzdHJ1Y3QgcnEgKnJxOwogCiAJCQlpZiAoIWNwdV9pc3NldChpLCAqY3B1cykpCkBAIC0zMzY4LDcgKzMzNjgsNyBAQAogCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQgPSAwOwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgZ3JvdXAtPmNwdW1hc2spIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBncm91cC0+Y3B1bWFzaykgewogCQl1bnNpZ25lZCBsb25nIHdsOwogCiAJCWlmICghY3B1X2lzc2V0KGksICpjcHVzKSkKQEAgLTM5MTAsNyArMzkxMCw3IEBACiAJCWludCBiYWxhbmNlX2NwdTsKIAogCQljcHVfY2xlYXIodGhpc19jcHUsIGNwdXMpOwotCQlmb3JfZWFjaF9jcHVfbWFzayhiYWxhbmNlX2NwdSwgY3B1cykgeworCQlmb3JfZWFjaF9jcHVfbWFza19ucihiYWxhbmNlX2NwdSwgY3B1cykgewogCQkJLyoKIAkJCSAqIElmIHRoaXMgY3B1IGdldHMgd29yayB0byBkbywgc3RvcCB0aGUgbG9hZCBiYWxhbmNpbmcKIAkJCSAqIHdvcmsgYmVpbmcgZG9uZSBmb3Igb3RoZXIgY3B1cy4gTmV4dCBsb2FkCkBAIC02NzIxLDcgKzY3MjEsNyBAQAogCiAJY3B1c19jbGVhcigqY292ZXJlZCk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCAqc3BhbikgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksICpzcGFuKSB7CiAJCXN0cnVjdCBzY2hlZF9ncm91cCAqc2c7CiAJCWludCBncm91cCA9IGdyb3VwX2ZuKGksIGNwdV9tYXAsICZzZywgdG1wbWFzayk7CiAJCWludCBqOwpAQCAtNjczMiw3ICs2NzMyLDcgQEAKIAkJY3B1c19jbGVhcihzZy0+Y3B1bWFzayk7CiAJCXNnLT5fX2NwdV9wb3dlciA9IDA7CiAKLQkJZm9yX2VhY2hfY3B1X21hc2soaiwgKnNwYW4pIHsKKwkJZm9yX2VhY2hfY3B1X21hc2tfbnIoaiwgKnNwYW4pIHsKIAkJCWlmIChncm91cF9mbihqLCBjcHVfbWFwLCBOVUxMLCB0bXBtYXNrKSAhPSBncm91cCkKIAkJCQljb250aW51ZTsKIApAQCAtNjkzMiw3ICs2OTMyLDcgQEAKIAlpZiAoIXNnKQogCQlyZXR1cm47CiAJZG8gewotCQlmb3JfZWFjaF9jcHVfbWFzayhqLCBzZy0+Y3B1bWFzaykgeworCQlmb3JfZWFjaF9jcHVfbWFza19ucihqLCBzZy0+Y3B1bWFzaykgewogCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAKIAkJCXNkID0gJnBlcl9jcHUocGh5c19kb21haW5zLCBqKTsKQEAgLTY5NTcsNyArNjk1Nyw3IEBACiB7CiAJaW50IGNwdSwgaTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgKmNwdV9tYXApIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsICpjcHVfbWFwKSB7CiAJCXN0cnVjdCBzY2hlZF9ncm91cCAqKnNjaGVkX2dyb3VwX25vZGVzCiAJCQk9IHNjaGVkX2dyb3VwX25vZGVzX2J5Y3B1W2NwdV07CiAKQEAgLTcxOTYsNyArNzE5Niw3IEBACiAJLyoKIAkgKiBTZXQgdXAgZG9tYWlucyBmb3IgY3B1cyBzcGVjaWZpZWQgYnkgdGhlIGNwdV9tYXAuCiAJICovCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgKmNwdV9tYXApIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCAqY3B1X21hcCkgewogCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IE5VTEwsICpwOwogCQlTQ0hFRF9DUFVNQVNLX1ZBUihub2RlbWFzaywgYWxsbWFza3MpOwogCkBAIC03MjYzLDcgKzcyNjMsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAogCS8qIFNldCB1cCBDUFUgKHNpYmxpbmcpIGdyb3VwcyAqLwotCWZvcl9lYWNoX2NwdV9tYXNrKGksICpjcHVfbWFwKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgKmNwdV9tYXApIHsKIAkJU0NIRURfQ1BVTUFTS19WQVIodGhpc19zaWJsaW5nX21hcCwgYWxsbWFza3MpOwogCQlTQ0hFRF9DUFVNQVNLX1ZBUihzZW5kX2NvdmVyZWQsIGFsbG1hc2tzKTsKIApAQCAtNzI4MCw3ICs3MjgwLDcgQEAKIAogI2lmZGVmIENPTkZJR19TQ0hFRF9NQwogCS8qIFNldCB1cCBtdWx0aS1jb3JlIGdyb3VwcyAqLwotCWZvcl9lYWNoX2NwdV9tYXNrKGksICpjcHVfbWFwKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgKmNwdV9tYXApIHsKIAkJU0NIRURfQ1BVTUFTS19WQVIodGhpc19jb3JlX21hcCwgYWxsbWFza3MpOwogCQlTQ0hFRF9DUFVNQVNLX1ZBUihzZW5kX2NvdmVyZWQsIGFsbG1hc2tzKTsKIApAQCAtNzM0Nyw3ICs3MzQ3LDcgQEAKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJc2NoZWRfZ3JvdXBfbm9kZXNbaV0gPSBzZzsKLQkJZm9yX2VhY2hfY3B1X21hc2soaiwgKm5vZGVtYXNrKSB7CisJCWZvcl9lYWNoX2NwdV9tYXNrX25yKGosICpub2RlbWFzaykgewogCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAKIAkJCXNkID0gJnBlcl9jcHUobm9kZV9kb21haW5zLCBqKTsKQEAgLTczOTMsMjEgKzczOTMsMjEgQEAKIAogCS8qIENhbGN1bGF0ZSBDUFUgcG93ZXIgZm9yIHBoeXNpY2FsIHBhY2thZ2VzIGFuZCBub2RlcyAqLwogI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCAqY3B1X21hcCkgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksICpjcHVfbWFwKSB7CiAJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpOwogCiAJCWluaXRfc2NoZWRfZ3JvdXBzX3Bvd2VyKGksIHNkKTsKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU0NIRURfTUMKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCAqY3B1X21hcCkgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksICpjcHVfbWFwKSB7CiAJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gJnBlcl9jcHUoY29yZV9kb21haW5zLCBpKTsKIAogCQlpbml0X3NjaGVkX2dyb3Vwc19wb3dlcihpLCBzZCk7CiAJfQogI2VuZGlmCiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCAqY3B1X21hcCkgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksICpjcHVfbWFwKSB7CiAJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gJnBlcl9jcHUocGh5c19kb21haW5zLCBpKTsKIAogCQlpbml0X3NjaGVkX2dyb3Vwc19wb3dlcihpLCBzZCk7CkBAIC03NDI3LDcgKzc0MjcsNyBAQAogI2VuZGlmCiAKIAkvKiBBdHRhY2ggdGhlIGRvbWFpbnMgKi8KLQlmb3JfZWFjaF9jcHVfbWFzayhpLCAqY3B1X21hcCkgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksICpjcHVfbWFwKSB7CiAJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKIAkJc2QgPSAmcGVyX2NwdShjcHVfZG9tYWlucywgaSk7CkBAIC03NTEwLDcgKzc1MTAsNyBAQAogCiAJdW5yZWdpc3Rlcl9zY2hlZF9kb21haW5fc3lzY3RsKCk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCAqY3B1X21hcCkKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCAqY3B1X21hcCkKIAkJY3B1X2F0dGFjaF9kb21haW4oTlVMTCwgJmRlZl9yb290X2RvbWFpbiwgaSk7CiAJc3luY2hyb25pemVfc2NoZWQoKTsKIAlhcmNoX2Rlc3Ryb3lfc2NoZWRfZG9tYWlucyhjcHVfbWFwLCAmdG1wbWFzayk7CkBAIC03NjQxLDExICs3NjQxLDEzIEBACiB9CiAKICNpZmRlZiBDT05GSUdfU0NIRURfTUMKLXN0YXRpYyBzc2l6ZV90IHNjaGVkX21jX3Bvd2VyX3NhdmluZ3Nfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpwYWdlKQorc3RhdGljIHNzaXplX3Qgc2NoZWRfbWNfcG93ZXJfc2F2aW5nc19zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnBhZ2UpCiB7CiAJcmV0dXJuIHNwcmludGYocGFnZSwgIiV1XG4iLCBzY2hlZF9tY19wb3dlcl9zYXZpbmdzKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHNjaGVkX21jX3Bvd2VyX3NhdmluZ3Nfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJcmV0dXJuIHNjaGVkX3Bvd2VyX3NhdmluZ3Nfc3RvcmUoYnVmLCBjb3VudCwgMCk7CkBAIC03NjU1LDExICs3NjU3LDEzIEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKLXN0YXRpYyBzc2l6ZV90IHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqcGFnZSkKK3N0YXRpYyBzc2l6ZV90IHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKIHsKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXVcbiIsIHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJcmV0dXJuIHNjaGVkX3Bvd2VyX3NhdmluZ3Nfc3RvcmUoYnVmLCBjb3VudCwgMSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCA3ZjcwMDI2Li5jZjJjZDZjIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTEwMzMsNyArMTAzMyw3IEBACiAJCQkmJiAhdGFza19ob3QocCwgdGFza19ycShwKS0+Y2xvY2ssIHNkKSkpIHsKIAkJCWNwdXNfYW5kKHRtcCwgc2QtPnNwYW4sIHAtPmNwdXNfYWxsb3dlZCk7CiAJCQljcHVzX2FuZCh0bXAsIHRtcCwgY3B1X2FjdGl2ZV9tYXApOwotCQkJZm9yX2VhY2hfY3B1X21hc2soaSwgdG1wKSB7CisJCQlmb3JfZWFjaF9jcHVfbWFza19ucihpLCB0bXApIHsKIAkJCQlpZiAoaWRsZV9jcHUoaSkpIHsKIAkJCQkJaWYgKGkgIT0gdGFza19jcHUocCkpIHsKIAkJCQkJCXNjaGVkc3RhdF9pbmMocCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggMjQ2MjFjZS4uZjg1YTc2MyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCiAJc3Bpbl9sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOwogCXJ0X3BlcmlvZCA9IGt0aW1lX3RvX25zKHJ0X2ItPnJ0X3BlcmlvZCk7Ci0JZm9yX2VhY2hfY3B1X21hc2soaSwgcmQtPnNwYW4pIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihpLCByZC0+c3BhbikgewogCQlzdHJ1Y3QgcnRfcnEgKml0ZXIgPSBzY2hlZF9ydF9wZXJpb2RfcnRfcnEocnRfYiwgaSk7CiAJCXM2NCBkaWZmOwogCkBAIC0xMTI4LDcgKzExMjgsNyBAQAogCiAJbmV4dCA9IHBpY2tfbmV4dF90YXNrX3J0KHRoaXNfcnEpOwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCB0aGlzX3JxLT5yZC0+cnRvX21hc2spIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIHRoaXNfcnEtPnJkLT5ydG9fbWFzaykgewogCQlpZiAodGhpc19jcHUgPT0gY3B1KQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMgYi9rZXJuZWwvc29mdGxvY2t1cC5jCmluZGV4IGEyNzJkNzguLjdiZDhkMWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMKKysrIGIva2VybmVsL3NvZnRsb2NrdXAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApAQCAtMjUsNyArMjYsMjIgQEAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgd2F0Y2hkb2dfdGFzayk7CiAKIHN0YXRpYyBpbnQgX19yZWFkX21vc3RseSBkaWRfcGFuaWM7Ci11bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgc29mdGxvY2t1cF90aHJlc2ggPSA2MDsKK2ludCBfX3JlYWRfbW9zdGx5IHNvZnRsb2NrdXBfdGhyZXNoID0gNjA7CisKKy8qCisgKiBTaG91bGQgd2UgcGFuaWMgKGFuZCByZWJvb3QsIGlmIHBhbmljX3RpbWVvdXQ9IGlzIHNldCkgd2hlbiBhCisgKiBzb2Z0LWxvY2t1cCBvY2N1cnM6CisgKi8KK3Vuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHNvZnRsb2NrdXBfcGFuaWMgPQorCQkJCUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRTsKKworc3RhdGljIGludCBfX2luaXQgc29mdGxvY2t1cF9wYW5pY19zZXR1cChjaGFyICpzdHIpCit7CisJc29mdGxvY2t1cF9wYW5pYyA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCk7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInNvZnRsb2NrdXBfcGFuaWM9Iiwgc29mdGxvY2t1cF9wYW5pY19zZXR1cCk7CiAKIHN0YXRpYyBpbnQKIHNvZnRsb2NrX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQpAQCAtODQsNiArMTAwLDE0IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAl1bnNpZ25lZCBsb25nIG5vdzsKIAorCS8qIElzIGRldGVjdGlvbiBzd2l0Y2hlZCBvZmY/ICovCisJaWYgKCFwZXJfY3B1KHdhdGNoZG9nX3Rhc2ssIHRoaXNfY3B1KSB8fCBzb2Z0bG9ja3VwX3RocmVzaCA8PSAwKSB7CisJCS8qIEJlIHN1cmUgd2UgZG9uJ3QgZmFsc2UgdHJpZ2dlciBpZiBzd2l0Y2hlZCBiYWNrIG9uICovCisJCWlmICh0b3VjaF90aW1lc3RhbXApCisJCQlwZXJfY3B1KHRvdWNoX3RpbWVzdGFtcCwgdGhpc19jcHUpID0gMDsKKwkJcmV0dXJuOworCX0KKwogCWlmICh0b3VjaF90aW1lc3RhbXAgPT0gMCkgewogCQlfX3RvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAkJcmV0dXJuOwpAQCAtOTIsMTEgKzExNiw4IEBACiAJcHJpbnRfdGltZXN0YW1wID0gcGVyX2NwdShwcmludF90aW1lc3RhbXAsIHRoaXNfY3B1KTsKIAogCS8qIHJlcG9ydCBhdCBtb3N0IG9uY2UgYSBzZWNvbmQgKi8KLQlpZiAoKHByaW50X3RpbWVzdGFtcCA+PSB0b3VjaF90aW1lc3RhbXAgJiYKLQkJCXByaW50X3RpbWVzdGFtcCA8ICh0b3VjaF90aW1lc3RhbXAgKyAxKSkgfHwKLQkJCWRpZF9wYW5pYyB8fCAhcGVyX2NwdSh3YXRjaGRvZ190YXNrLCB0aGlzX2NwdSkpIHsKKwlpZiAocHJpbnRfdGltZXN0YW1wID09IHRvdWNoX3RpbWVzdGFtcCB8fCBkaWRfcGFuaWMpCiAJCXJldHVybjsKLQl9CiAKIAkvKiBkbyBub3QgcHJpbnQgZHVyaW5nIGVhcmx5IGJvb3R1cDogKi8KIAlpZiAodW5saWtlbHkoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9SVU5OSU5HKSkgewpAQCAtMTA2LDggKzEyNywxMSBAQAogCiAJbm93ID0gZ2V0X3RpbWVzdGFtcCh0aGlzX2NwdSk7CiAKLQkvKiBXYWtlIHVwIHRoZSBoaWdoLXByaW8gd2F0Y2hkb2cgdGFzayBldmVyeSBzZWNvbmQ6ICovCi0JaWYgKG5vdyA+ICh0b3VjaF90aW1lc3RhbXAgKyAxKSkKKwkvKgorCSAqIFdha2UgdXAgdGhlIGhpZ2gtcHJpbyB3YXRjaGRvZyB0YXNrIHR3aWNlIHBlcgorCSAqIHRocmVzaG9sZCB0aW1lc3Bhbi4KKwkgKi8KKwlpZiAobm93ID4gdG91Y2hfdGltZXN0YW1wICsgc29mdGxvY2t1cF90aHJlc2gvMikKIAkJd2FrZV91cF9wcm9jZXNzKHBlcl9jcHUod2F0Y2hkb2dfdGFzaywgdGhpc19jcHUpKTsKIAogCS8qIFdhcm4gYWJvdXQgdW5yZWFzb25hYmxlIGRlbGF5czogKi8KQEAgLTEyMSwxMSArMTQ1LDE1IEBACiAJCQl0aGlzX2NwdSwgbm93IC0gdG91Y2hfdGltZXN0YW1wLAogCQkJY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOwogCXByaW50X21vZHVsZXMoKTsKKwlwcmludF9pcnF0cmFjZV9ldmVudHMoY3VycmVudCk7CiAJaWYgKHJlZ3MpCiAJCXNob3dfcmVncyhyZWdzKTsKIAllbHNlCiAJCWR1bXBfc3RhY2soKTsKIAlzcGluX3VubG9jaygmcHJpbnRfbG9jayk7CisKKwlpZiAoc29mdGxvY2t1cF9wYW5pYykKKwkJcGFuaWMoInNvZnRsb2NrdXA6IGh1bmcgdGFza3MiKTsKIH0KIAogLyoKQEAgLTE3OCw2ICsyMDYsOSBAQAogCiAJdC0+bGFzdF9zd2l0Y2hfdGltZXN0YW1wID0gbm93OwogCXRvdWNoX25taV93YXRjaGRvZygpOworCisJaWYgKHNvZnRsb2NrdXBfcGFuaWMpCisJCXBhbmljKCJzb2Z0bG9ja3VwOiBibG9ja2VkIHRhc2tzIik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKaW5kZXggYmE5YjIwNS4uNzM4YjQxMSAxMDA2NDQKLS0tIGEva2VybmVsL3N0b3BfbWFjaGluZS5jCisrKyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwpAQCAtMzMsOCArMzMsOSBAQAogewogCWludCBpcnFzX2Rpc2FibGVkID0gMDsKIAlpbnQgcHJlcGFyZWQgPSAwOworCWNwdW1hc2tfb2ZfY3B1X3B0cihjcHVtYXNrLCAoaW50KShsb25nKWNwdSk7CiAKLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoKGludCkobG9uZyljcHUpKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrKTsKIAogCS8qIEFjazogd2UgYXJlIGFsaXZlICovCiAJc21wX21iKCk7IC8qIFRoZW9yZXRpY2FsbHkgdGhlIGFjayA9IDAgbWlnaHQgbm90IGJlIG9uIHRoaXMgQ1BVIHlldC4gKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCA1YjliNDY3Li4wZmVhMGVlIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzX25pLmMKKysrIGIva2VybmVsL3N5c19uaS5jCkBAIC01OSw2ICs1OSw3IEBACiBjb25kX3N5c2NhbGwoc3lzX2Vwb2xsX2N0bCk7CiBjb25kX3N5c2NhbGwoc3lzX2Vwb2xsX3dhaXQpOwogY29uZF9zeXNjYWxsKHN5c19lcG9sbF9wd2FpdCk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19lcG9sbF9wd2FpdCk7CiBjb25kX3N5c2NhbGwoc3lzX3NlbWdldCk7CiBjb25kX3N5c2NhbGwoc3lzX3NlbW9wKTsKIGNvbmRfc3lzY2FsbChzeXNfc2VtdGltZWRvcCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggNmIxNmUxNi4uMmE3YjlkOCAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtODgsMTIgKzg4LDEzIEBACiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUICovCiAKIC8qIENvbnN0YW50cyB1c2VkIGZvciBtaW5pbXVtIGFuZCAgbWF4aW11bSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQKSB8fCBkZWZpbmVkKENPTkZJR19ISUdITUVNKQorI2lmIGRlZmluZWQoQ09ORklHX0hJR0hNRU0pIHx8IGRlZmluZWQoQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQKQogc3RhdGljIGludCBvbmUgPSAxOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAKIHN0YXRpYyBpbnQgc2l4dHkgPSA2MDsKK3N0YXRpYyBpbnQgbmVnX29uZSA9IC0xOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTU1VCkBAIC0xMTAsNyArMTExLDcgQEAKIAogc3RhdGljIGludCBuZ3JvdXBzX21heCA9IE5HUk9VUFNfTUFYOwogCi0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogZXh0ZXJuIGNoYXIgbW9kcHJvYmVfcGF0aFtdOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NIUl9ERVZfU0cKQEAgLTQ3NSw3ICs0NzYsNyBAQAogCQkucHJvY19oYW5kbGVyCT0gJmZ0cmFjZV9lbmFibGVfc3lzY3RsLAogCX0sCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJewogCQkuY3RsX25hbWUJPSBLRVJOX01PRFBST0JFLAogCQkucHJvY25hbWUJPSAibW9kcHJvYmUiLApAQCAtNzM5LDEzICs3NDAsMjQgQEAKICNpZmRlZiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAic29mdGxvY2t1cF9wYW5pYyIsCisJCS5kYXRhCQk9ICZzb2Z0bG9ja3VwX3BhbmljLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmb25lLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gInNvZnRsb2NrdXBfdGhyZXNoIiwKIAkJLmRhdGEJCT0gJnNvZnRsb2NrdXBfdGhyZXNoLAotCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAogCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKLQkJLmV4dHJhMQkJPSAmb25lLAorCQkuZXh0cmExCQk9ICZuZWdfb25lLAogCQkuZXh0cmEyCQk9ICZzaXh0eSwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL2tlcm5lbC90YXNrc3RhdHMuYyBiL2tlcm5lbC90YXNrc3RhdHMuYwppbmRleCA0YTIzNTE3Li4wNmIxNzU0NyAxMDA2NDQKLS0tIGEva2VybmVsL3Rhc2tzdGF0cy5jCisrKyBiL2tlcm5lbC90YXNrc3RhdHMuYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGlzYWRkID09IFJFR0lTVEVSKSB7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgeworCQlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIG1hc2spIHsKIAkJCXMgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBsaXN0ZW5lciksIEdGUF9LRVJORUwsCiAJCQkJCSBjcHVfdG9fbm9kZShjcHUpKTsKIAkJCWlmICghcykKQEAgLTMyMCw3ICszMjAsNyBAQAogCiAJLyogRGVyZWdpc3RlciBvciBjbGVhbnVwICovCiBjbGVhbnVwOgotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgeworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbWFzaykgewogCQlsaXN0ZW5lcnMgPSAmcGVyX2NwdShsaXN0ZW5lcl9hcnJheSwgY3B1KTsKIAkJZG93bl93cml0ZSgmbGlzdGVuZXJzLT5zZW0pOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocywgdG1wLCAmbGlzdGVuZXJzLT5saXN0LCBsaXN0KSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCBkYWRkZTUzLi4wOTNkNGFjIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTE0NSw5ICsxNDUsOSBAQAogCQkgKiBDeWNsZSB0aHJvdWdoIENQVXMgdG8gY2hlY2sgaWYgdGhlIENQVXMgc3RheQogCQkgKiBzeW5jaHJvbml6ZWQgdG8gZWFjaCBvdGhlci4KIAkJICovCi0JCWludCBuZXh0X2NwdSA9IG5leHRfY3B1KHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKKwkJaW50IG5leHRfY3B1ID0gbmV4dF9jcHVfbnIocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOwogCi0JCWlmIChuZXh0X2NwdSA+PSBOUl9DUFVTKQorCQlpZiAobmV4dF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJCW5leHRfY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKIAkJd2F0Y2hkb2dfdGltZXIuZXhwaXJlcyArPSBXQVRDSERPR19JTlRFUlZBTDsKIAkJYWRkX3RpbWVyX29uKCZ3YXRjaGRvZ190aW1lciwgbmV4dF9jcHUpOwpAQCAtMzc2LDcgKzM3Niw4IEBACiAgKiBQcm92aWRlcyBzeXNmcyBpbnRlcmZhY2UgZm9yIGxpc3RpbmcgY3VycmVudCBjbG9ja3NvdXJjZS4KICAqLwogc3RhdGljIHNzaXplX3QKLXN5c2ZzX3Nob3dfY3VycmVudF9jbG9ja3NvdXJjZXMoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3lzZnNfc2hvd19jdXJyZW50X2Nsb2Nrc291cmNlcyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3NpemVfdCBjb3VudCA9IDA7CiAKQEAgLTM5Nyw2ICszOTgsNyBAQAogICogY2xvY2tzb3VyY2Ugc2VsY3Rpb24uCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHN5c2ZzX292ZXJyaWRlX2Nsb2Nrc291cmNlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsb2Nrc291cmNlICpvdnIgPSBOVUxMOwpAQCAtNDQ5LDcgKzQ1MSw5IEBACiAgKiBQcm92aWRlcyBzeXNmcyBpbnRlcmZhY2UgZm9yIGxpc3RpbmcgcmVnaXN0ZXJlZCBjbG9ja3NvdXJjZXMKICAqLwogc3RhdGljIHNzaXplX3QKLXN5c2ZzX3Nob3dfYXZhaWxhYmxlX2Nsb2Nrc291cmNlcyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzeXNmc19zaG93X2F2YWlsYWJsZV9jbG9ja3NvdXJjZXMoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCSAgY2hhciAqYnVmKQogewogCXN0cnVjdCBjbG9ja3NvdXJjZSAqc3JjOwogCXNzaXplX3QgY291bnQgPSAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKaW5kZXggZjQ4ZDBmMC4uMzE0NjNkMyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYworKysgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCkBAIC0zOTksOCArMzk5LDcgQEAKIAltYXNrID0gQ1BVX01BU0tfTk9ORTsKIAlub3cgPSBrdGltZV9nZXQoKTsKIAkvKiBGaW5kIGFsbCBleHBpcmVkIGV2ZW50cyAqLwotCWZvciAoY3B1ID0gZmlyc3RfY3B1KHRpY2tfYnJvYWRjYXN0X29uZXNob3RfbWFzayk7IGNwdSAhPSBOUl9DUFVTOwotCSAgICAgY3B1ID0gbmV4dF9jcHUoY3B1LCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2spKSB7CisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2spIHsKIAkJdGQgPSAmcGVyX2NwdSh0aWNrX2NwdV9kZXZpY2UsIGNwdSk7CiAJCWlmICh0ZC0+ZXZ0ZGV2LT5uZXh0X2V2ZW50LnR2NjQgPD0gbm93LnR2NjQpCiAJCQljcHVfc2V0KGNwdSwgbWFzayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jIGIva2VybmVsL3RpbWUvdGljay1jb21tb24uYwppbmRleCA0ZjM4ODY1Li5iZjQzMjg0IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogICovCiBzdGF0aWMgdm9pZCB0aWNrX3NldHVwX2RldmljZShzdHJ1Y3QgdGlja19kZXZpY2UgKnRkLAogCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbmV3ZGV2LCBpbnQgY3B1LAotCQkJICAgICAgY3B1bWFza190IGNwdW1hc2spCisJCQkgICAgICBjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCiB7CiAJa3RpbWVfdCBuZXh0X2V2ZW50OwogCXZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICopID0gTlVMTDsKQEAgLTE2OSw4ICsxNjksOCBAQAogCSAqIFdoZW4gdGhlIGRldmljZSBpcyBub3QgcGVyIGNwdSwgcGluIHRoZSBpbnRlcnJ1cHQgdG8gdGhlCiAJICogY3VycmVudCBjcHU6CiAJICovCi0JaWYgKCFjcHVzX2VxdWFsKG5ld2Rldi0+Y3B1bWFzaywgY3B1bWFzaykpCi0JCWlycV9zZXRfYWZmaW5pdHkobmV3ZGV2LT5pcnEsIGNwdW1hc2spOworCWlmICghY3B1c19lcXVhbChuZXdkZXYtPmNwdW1hc2ssICpjcHVtYXNrKSkKKwkJaXJxX3NldF9hZmZpbml0eShuZXdkZXYtPmlycSwgKmNwdW1hc2spOwogCiAJLyoKIAkgKiBXaGVuIGdsb2JhbCBicm9hZGNhc3RpbmcgaXMgYWN0aXZlLCBjaGVjayBpZiB0aGUgY3VycmVudApAQCAtMTk2LDIwICsxOTYsMjAgQEAKIAlzdHJ1Y3QgdGlja19kZXZpY2UgKnRkOwogCWludCBjcHUsIHJldCA9IE5PVElGWV9PSzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNwdW1hc2tfdCBjcHVtYXNrOworCWNwdW1hc2tfb2ZfY3B1X3B0cl9kZWNsYXJlKGNwdW1hc2spOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwljcHVtYXNrX29mX2NwdV9wdHJfbmV4dChjcHVtYXNrLCBjcHUpOwogCWlmICghY3B1X2lzc2V0KGNwdSwgbmV3ZGV2LT5jcHVtYXNrKSkKIAkJZ290byBvdXRfYmM7CiAKIAl0ZCA9ICZwZXJfY3B1KHRpY2tfY3B1X2RldmljZSwgY3B1KTsKIAljdXJkZXYgPSB0ZC0+ZXZ0ZGV2OwotCWNwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShjcHUpOwogCiAJLyogY3B1IGxvY2FsIGRldmljZSA/ICovCi0JaWYgKCFjcHVzX2VxdWFsKG5ld2Rldi0+Y3B1bWFzaywgY3B1bWFzaykpIHsKKwlpZiAoIWNwdXNfZXF1YWwobmV3ZGV2LT5jcHVtYXNrLCAqY3B1bWFzaykpIHsKIAogCQkvKgogCQkgKiBJZiB0aGUgY3B1IGFmZmluaXR5IG9mIHRoZSBkZXZpY2UgaW50ZXJydXB0IGNhbiBub3QKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQkgKiBJZiB3ZSBoYXZlIGEgY3B1IGxvY2FsIGRldmljZSBhbHJlYWR5LCBkbyBub3QgcmVwbGFjZSBpdAogCQkgKiBieSBhIG5vbiBjcHUgbG9jYWwgZGV2aWNlCiAJCSAqLwotCQlpZiAoY3VyZGV2ICYmIGNwdXNfZXF1YWwoY3VyZGV2LT5jcHVtYXNrLCBjcHVtYXNrKSkKKwkJaWYgKGN1cmRldiAmJiBjcHVzX2VxdWFsKGN1cmRldi0+Y3B1bWFzaywgKmNwdW1hc2spKQogCQkJZ290byBvdXRfYmM7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggYmVlZjdjYy4uOTQyZmM3YyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtMTQwLDggKzE0MCw2IEBACiAJaWYgKCF0cy0+dGlja19zdG9wcGVkKQogCQlyZXR1cm47CiAKLQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0KIAljcHVfY2xlYXIoY3B1LCBub2h6X2NwdV9tYXNrKTsKIAlub3cgPSBrdGltZV9nZXQoKTsKIAl0cy0+aWRsZV93YWtldGltZSA9IG5vdzsKQEAgLTE0OSw2ICsxNDcsOCBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAl0aWNrX2RvX3VwZGF0ZV9qaWZmaWVzNjQobm93KTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiB9CiAKIHZvaWQgdGlja19ub2h6X3N0b3BfaWRsZShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKaW5kZXggMjMwMWUxZS4uNjM1MjgwOCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCkBAIC0yMTMsNyArMjEzLDkgQEAKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCQljcHVtYXNrX29mX2NwdV9wdHIobmV3X21hc2ssIGNwdSk7CisKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbmV3X21hc2spOwogCQlzdGFydF9zdGFja190aW1lcihjcHUpOwogCX0KIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmc2F2ZWRfbWFzayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggY2U3Nzk5NS4uYTZkMzYzNCAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJbWlnaHRfc2xlZXAoKTsKIAlsb2NrX2FjcXVpcmUoJndxLT5sb2NrZGVwX21hcCwgMCwgMCwgMCwgMiwgX1RISVNfSVBfKTsKIAlsb2NrX3JlbGVhc2UoJndxLT5sb2NrZGVwX21hcCwgMSwgX1RISVNfSVBfKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsICpjcHVfbWFwKQorCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgKmNwdV9tYXApCiAJCWZsdXNoX2NwdV93b3JrcXVldWUocGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmbHVzaF93b3JrcXVldWUpOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJd3EgPSBjd3EtPndxOwogCWNwdV9tYXAgPSB3cV9jcHVfbWFwKHdxKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgKmNwdV9tYXApCisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCAqY3B1X21hcCkKIAkJd2FpdF9vbl9jcHVfd29yayhwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpLCB3b3JrKTsKIH0KIApAQCAtODEzLDcgKzgxMyw3IEBACiAJbGlzdF9kZWwoJndxLT5saXN0KTsKIAlzcGluX3VubG9jaygmd29ya3F1ZXVlX2xvY2spOwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCAqY3B1X21hcCkKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsICpjcHVfbWFwKQogCQljbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQocGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KSk7CiAJcHV0X29ubGluZV9jcHVzKCk7CiAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggZGYyNzEzMi4uODgyYzUxMCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTc0LDYgKzc0LDkgQEAKIAkgIGRlYnVnZ2luZyBmaWxlcyBpbnRvLiAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQKIAkgIHdyaXRlIHRvIHRoZXNlIGZpbGVzLgogCisJICBGb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgZGVidWdmcyBBUEksIHNlZQorCSAgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2ZpbGVzeXN0ZW1zLgorCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSEVBREVSU19DSEVDSwpAQCAtMTQ3LDcgKzE1MCw3IEBACiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGtlcm5lbCB0byBkZXRlY3QgInNvZnQgbG9ja3VwcyIsCiAJICB3aGljaCBhcmUgYnVncyB0aGF0IGNhdXNlIHRoZSBrZXJuZWwgdG8gbG9vcCBpbiBrZXJuZWwKLQkgIG1vZGUgZm9yIG1vcmUgdGhhbiAxMCBzZWNvbmRzLCB3aXRob3V0IGdpdmluZyBvdGhlciB0YXNrcyBhCisJICBtb2RlIGZvciBtb3JlIHRoYW4gNjAgc2Vjb25kcywgd2l0aG91dCBnaXZpbmcgb3RoZXIgdGFza3MgYQogCSAgY2hhbmNlIHRvIHJ1bi4KIAogCSAgV2hlbiBhIHNvZnQtbG9ja3VwIGlzIGRldGVjdGVkLCB0aGUga2VybmVsIHdpbGwgcHJpbnQgdGhlCkBAIC0xNTksNiArMTYyLDMwIEBACiAJICAgY2FuIGJlIGRldGVjdGVkIHZpYSB0aGUgTk1JLXdhdGNoZG9nLCBvbiBwbGF0Zm9ybXMgdGhhdAogCSAgIHN1cHBvcnQgaXQuKQogCitjb25maWcgQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMKKwlib29sICJQYW5pYyAoUmVib290KSBPbiBTb2Z0IExvY2t1cHMiCisJZGVwZW5kcyBvbiBERVRFQ1RfU09GVExPQ0tVUAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXJuZWwgdG8gcGFuaWMgb24gInNvZnQgbG9ja3VwcyIsCisJICB3aGljaCBhcmUgYnVncyB0aGF0IGNhdXNlIHRoZSBrZXJuZWwgdG8gbG9vcCBpbiBrZXJuZWwKKwkgIG1vZGUgZm9yIG1vcmUgdGhhbiA2MCBzZWNvbmRzLCB3aXRob3V0IGdpdmluZyBvdGhlciB0YXNrcyBhCisJICBjaGFuY2UgdG8gcnVuLgorCisJICBUaGUgcGFuaWMgY2FuIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBwYW5pY190aW1lb3V0LAorCSAgdG8gY2F1c2UgdGhlIHN5c3RlbSB0byByZWJvb3QgYXV0b21hdGljYWxseSBhZnRlciBhCisJICBsb2NrdXAgaGFzIGJlZW4gZGV0ZWN0ZWQuIFRoaXMgZmVhdHVyZSBpcyB1c2VmdWwgZm9yCisJICBoaWdoLWF2YWlsYWJpbGl0eSBzeXN0ZW1zIHRoYXQgaGF2ZSB1cHRpbWUgZ3VhcmFudGVlcyBhbmQKKwkgIHdoZXJlIGEgbG9ja3VwIG11c3QgYmUgcmVzb2x2ZWQgQVNBUC4KKworCSAgU2F5IE4gaWYgdW5zdXJlLgorCitjb25maWcgQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUUKKwlpbnQKKwlkZXBlbmRzIG9uIERFVEVDVF9TT0ZUTE9DS1VQCisJcmFuZ2UgMCAxCisJZGVmYXVsdCAwIGlmICFCT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQworCWRlZmF1bHQgMSBpZiBCT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQworCiBjb25maWcgU0NIRURfREVCVUcKIAlib29sICJDb2xsZWN0IHNjaGVkdWxlciBkZWJ1Z2dpbmcgaW5mbyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBQUk9DX0ZTCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5rZ2RiIGIvbGliL0tjb25maWcua2dkYgppbmRleCBhNWQ0YjFkLi4yY2ZkMjcyIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5rZ2RiCisrKyBiL2xpYi9LY29uZmlnLmtnZGIKQEAgLTEsNyArMSw0IEBACiAKLWNvbmZpZyBIQVZFX0FSQ0hfS0dEQl9TSEFET1dfSU5GTwotCWJvb2wKLQogY29uZmlnIEhBVkVfQVJDSF9LR0RCCiAJYm9vbAogCmRpZmYgLS1naXQgYS9saWIvY3B1bWFzay5jIGIvbGliL2NwdW1hc2suYwppbmRleCBiYjRmNzZkLi41Zjk3ZGMyIDEwMDY0NAotLS0gYS9saWIvY3B1bWFzay5jCisrKyBiL2xpYi9jcHVtYXNrLmMKQEAgLTE1LDYgKzE1LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fbmV4dF9jcHUpOwogCisjaWYgTlJfQ1BVUyA+IDY0CitpbnQgX19uZXh0X2NwdV9ucihpbnQgbiwgY29uc3QgY3B1bWFza190ICpzcmNwKQoreworCXJldHVybiBtaW5fdChpbnQsIG5yX2NwdV9pZHMsCisJCQkJZmluZF9uZXh0X2JpdChzcmNwLT5iaXRzLCBucl9jcHVfaWRzLCBuKzEpKTsKK30KK0VYUE9SVF9TWU1CT0woX19uZXh0X2NwdV9ucik7CisjZW5kaWYKKwogaW50IF9fYW55X29ubGluZV9jcHUoY29uc3QgY3B1bWFza190ICptYXNrKQogewogCWludCBjcHU7CmRpZmYgLS1naXQgYS9saWIva29iamVjdC5jIGIvbGliL2tvYmplY3QuYwppbmRleCBkY2FkZTA1Li43NDQ0MDE1IDEwMDY0NAotLS0gYS9saWIva29iamVjdC5jCisrKyBiL2xpYi9rb2JqZWN0LmMKQEAgLTIxNiwxMyArMjE2LDE5IEBACiBzdGF0aWMgaW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKIAkJCQkgIHZhX2xpc3QgdmFyZ3MpCiB7Ci0JLyogRnJlZSB0aGUgb2xkIG5hbWUsIGlmIG5lY2Vzc2FyeS4gKi8KLQlrZnJlZShrb2JqLT5uYW1lKTsKKwljb25zdCBjaGFyICpvbGRfbmFtZSA9IGtvYmotPm5hbWU7CisJY2hhciAqczsKIAogCWtvYmotPm5hbWUgPSBrdmFzcHJpbnRmKEdGUF9LRVJORUwsIGZtdCwgdmFyZ3MpOwogCWlmICgha29iai0+bmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKiBld3d3Li4uIHNvbWUgb2YgdGhlc2UgYnVnZ2VycyBoYXZlICcvJyBpbiB0aGUgbmFtZSAuLi4gKi8KKwlzID0gc3RyY2hyKGtvYmotPm5hbWUsICcvJyk7CisJaWYgKHMpCisJCXNbMF0gPSAnISc7CisKKwlrZnJlZShvbGRfbmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0X3VldmVudC5jIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKaW5kZXggMmZhNTQ1YS4uOWY4ZDU5OSAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKQEAgLTI0NSw3ICsyNDUsOCBAQAogCQlpZiAocmV0dmFsKQogCQkJZ290byBleGl0OwogCi0JCWNhbGxfdXNlcm1vZGVoZWxwZXIoYXJndlswXSwgYXJndiwgZW52LT5lbnZwLCBVTUhfV0FJVF9FWEVDKTsKKwkJcmV0dmFsID0gY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LAorCQkJCQkgICAgIGVudi0+ZW52cCwgVU1IX1dBSVRfRVhFQyk7CiAJfQogCiBleGl0OgpkaWZmIC0tZ2l0IGEvbGliL3NjYXR0ZXJsaXN0LmMgYi9saWIvc2NhdHRlcmxpc3QuYwppbmRleCBiODBjMjExLi44NzZiYTZkIDEwMDY0NAotLS0gYS9saWIvc2NhdHRlcmxpc3QuYworKysgYi9saWIvc2NhdHRlcmxpc3QuYwpAQCAtMjk1LDYgKzI5NSwxMTcgQEAKIEVYUE9SVF9TWU1CT0woc2dfYWxsb2NfdGFibGUpOwogCiAvKioKKyAqIHNnX21pdGVyX3N0YXJ0IC0gc3RhcnQgbWFwcGluZyBpdGVyYXRpb24gb3ZlciBhIHNnIGxpc3QKKyAqIEBtaXRlcjogc2cgbWFwcGluZyBpdGVyIHRvIGJlIHN0YXJ0ZWQKKyAqIEBzZ2w6IHNnIGxpc3QgdG8gaXRlcmF0ZSBvdmVyCisgKiBAbmVudHM6IG51bWJlciBvZiBzZyBlbnRyaWVzCisgKgorICogRGVzY3JpcHRpb246CisgKiAgIFN0YXJ0cyBtYXBwaW5nIGl0ZXJhdG9yIEBtaXRlci4KKyAqCisgKiBDb250ZXh0OgorICogICBEb24ndCBjYXJlLgorICovCit2b2lkIHNnX21pdGVyX3N0YXJ0KHN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIgKm1pdGVyLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJICAgIHVuc2lnbmVkIGludCBuZW50cywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCW1lbXNldChtaXRlciwgMCwgc2l6ZW9mKHN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIpKTsKKworCW1pdGVyLT5fX3NnID0gc2dsOworCW1pdGVyLT5fX25lbnRzID0gbmVudHM7CisJbWl0ZXItPl9fb2Zmc2V0ID0gMDsKKwltaXRlci0+X19mbGFncyA9IGZsYWdzOworfQorRVhQT1JUX1NZTUJPTChzZ19taXRlcl9zdGFydCk7CisKKy8qKgorICogc2dfbWl0ZXJfbmV4dCAtIHByb2NlZWQgbWFwcGluZyBpdGVyYXRvciB0byB0aGUgbmV4dCBtYXBwaW5nCisgKiBAbWl0ZXI6IHNnIG1hcHBpbmcgaXRlciB0byBwcm9jZWVkCisgKgorICogRGVzY3JpcHRpb246CisgKiAgIFByb2NlZWRzIEBtaXRlckAgdG8gdGhlIG5leHQgbWFwcGluZy4gIEBtaXRlckAgc2hvdWxkIGhhdmUgYmVlbgorICogICBzdGFydGVkIHVzaW5nIHNnX21pdGVyX3N0YXJ0KCkuICBPbiBzdWNjZXNzZnVsIHJldHVybiwKKyAqICAgQG1pdGVyQC0+cGFnZSwgQG1pdGVyQC0+YWRkciBhbmQgQG1pdGVyQC0+bGVuZ3RoIHBvaW50IHRvIHRoZQorICogICBjdXJyZW50IG1hcHBpbmcuCisgKgorICogQ29udGV4dDoKKyAqICAgSVJRIGRpc2FibGVkIGlmIFNHX01JVEVSX0FUT01JQy4gIElSUSBtdXN0IHN0YXkgZGlzYWJsZWQgdGlsbAorICogICBAbWl0ZXJAIGlzIHN0b3BwZWQuICBNYXkgc2xlZXAgaWYgIVNHX01JVEVSX0FUT01JQy4KKyAqCisgKiBSZXR1cm5zOgorICogICB0cnVlIGlmIEBtaXRlciBjb250YWlucyB0aGUgbmV4dCBtYXBwaW5nLiAgZmFsc2UgaWYgZW5kIG9mIHNnCisgKiAgIGxpc3QgaXMgcmVhY2hlZC4KKyAqLworYm9vbCBzZ19taXRlcl9uZXh0KHN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIgKm1pdGVyKQoreworCXVuc2lnbmVkIGludCBvZmYsIGxlbjsKKworCS8qIGNoZWNrIGZvciBlbmQgYW5kIGRyb3AgcmVzb3VyY2VzIGZyb20gdGhlIGxhc3QgaXRlcmF0aW9uICovCisJaWYgKCFtaXRlci0+X19uZW50cykKKwkJcmV0dXJuIGZhbHNlOworCisJc2dfbWl0ZXJfc3RvcChtaXRlcik7CisKKwkvKiBnZXQgdG8gdGhlIG5leHQgc2cgaWYgbmVjZXNzYXJ5LiAgX19vZmZzZXQgaXMgYWRqdXN0ZWQgYnkgc3RvcCAqLworCWlmIChtaXRlci0+X19vZmZzZXQgPT0gbWl0ZXItPl9fc2ctPmxlbmd0aCAmJiAtLW1pdGVyLT5fX25lbnRzKSB7CisJCW1pdGVyLT5fX3NnID0gc2dfbmV4dChtaXRlci0+X19zZyk7CisJCW1pdGVyLT5fX29mZnNldCA9IDA7CisJfQorCisJLyogbWFwIHRoZSBuZXh0IHBhZ2UgKi8KKwlvZmYgPSBtaXRlci0+X19zZy0+b2Zmc2V0ICsgbWl0ZXItPl9fb2Zmc2V0OworCWxlbiA9IG1pdGVyLT5fX3NnLT5sZW5ndGggLSBtaXRlci0+X19vZmZzZXQ7CisKKwltaXRlci0+cGFnZSA9IG50aF9wYWdlKHNnX3BhZ2UobWl0ZXItPl9fc2cpLCBvZmYgPj4gUEFHRV9TSElGVCk7CisJb2ZmICY9IH5QQUdFX01BU0s7CisJbWl0ZXItPmxlbmd0aCA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmYpOworCW1pdGVyLT5jb25zdW1lZCA9IG1pdGVyLT5sZW5ndGg7CisKKwlpZiAobWl0ZXItPl9fZmxhZ3MgJiBTR19NSVRFUl9BVE9NSUMpCisJCW1pdGVyLT5hZGRyID0ga21hcF9hdG9taWMobWl0ZXItPnBhZ2UsIEtNX0JJT19TUkNfSVJRKSArIG9mZjsKKwllbHNlCisJCW1pdGVyLT5hZGRyID0ga21hcChtaXRlci0+cGFnZSkgKyBvZmY7CisKKwlyZXR1cm4gdHJ1ZTsKK30KK0VYUE9SVF9TWU1CT0woc2dfbWl0ZXJfbmV4dCk7CisKKy8qKgorICogc2dfbWl0ZXJfc3RvcCAtIHN0b3AgbWFwcGluZyBpdGVyYXRpb24KKyAqIEBtaXRlcjogc2cgbWFwcGluZyBpdGVyIHRvIGJlIHN0b3BwZWQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgU3RvcHMgbWFwcGluZyBpdGVyYXRvciBAbWl0ZXIuICBAbWl0ZXIgc2hvdWxkIGhhdmUgYmVlbiBzdGFydGVkCisgKiAgIHN0YXJ0ZWQgdXNpbmcgc2dfbWl0ZXJfc3RhcnQoKS4gIEEgc3RvcHBlZCBpdGVyYXRpb24gY2FuIGJlCisgKiAgIHJlc3VtZWQgYnkgY2FsbGluZyBzZ19taXRlcl9uZXh0KCkgb24gaXQuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCisgKiAgIHJlc291cmNlcyAoa21hcCkgbmVlZCB0byBiZSByZWxlYXNlZCBkdXJpbmcgaXRlcmF0aW9uLgorICoKKyAqIENvbnRleHQ6CisgKiAgIElSUSBkaXNhYmxlZCBpZiB0aGUgU0dfTUlURVJfQVRPTUlDIGlzIHNldC4gIERvbid0IGNhcmUgb3RoZXJ3aXNlLgorICovCit2b2lkIHNnX21pdGVyX3N0b3Aoc3RydWN0IHNnX21hcHBpbmdfaXRlciAqbWl0ZXIpCit7CisJV0FSTl9PTihtaXRlci0+Y29uc3VtZWQgPiBtaXRlci0+bGVuZ3RoKTsKKworCS8qIGRyb3AgcmVzb3VyY2VzIGZyb20gdGhlIGxhc3QgaXRlcmF0aW9uICovCisJaWYgKG1pdGVyLT5hZGRyKSB7CisJCW1pdGVyLT5fX29mZnNldCArPSBtaXRlci0+Y29uc3VtZWQ7CisKKwkJaWYgKG1pdGVyLT5fX2ZsYWdzICYgU0dfTUlURVJfQVRPTUlDKSB7CisJCQlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCQkJa3VubWFwX2F0b21pYyhtaXRlci0+YWRkciwgS01fQklPX1NSQ19JUlEpOworCQl9IGVsc2UKKwkJCWt1bm1hcChtaXRlci0+YWRkcik7CisKKwkJbWl0ZXItPnBhZ2UgPSBOVUxMOworCQltaXRlci0+YWRkciA9IE5VTEw7CisJCW1pdGVyLT5sZW5ndGggPSAwOworCQltaXRlci0+Y29uc3VtZWQgPSAwOworCX0KK30KK0VYUE9SVF9TWU1CT0woc2dfbWl0ZXJfc3RvcCk7CisKKy8qKgogICogc2dfY29weV9idWZmZXIgLSBDb3B5IGRhdGEgYmV0d2VlbiBhIGxpbmVhciBidWZmZXIgYW5kIGFuIFNHIGxpc3QKICAqIEBzZ2w6CQkgVGhlIFNHIGxpc3QKICAqIEBuZW50czoJCSBOdW1iZXIgb2YgU0cgZW50cmllcwpAQCAtMzA5LDU2ICs0MjAsMjkgQEAKIHN0YXRpYyBzaXplX3Qgc2dfY29weV9idWZmZXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBuZW50cywKIAkJCSAgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCBpbnQgdG9fYnVmZmVyKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0Jc2l6ZV90IGJ1Zl9vZmYgPSAwOwotCWludCBpOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOworCXN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIgbWl0ZXI7CiAKLQlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCXNnX21pdGVyX3N0YXJ0KCZtaXRlciwgc2dsLCBuZW50cywgU0dfTUlURVJfQVRPTUlDKTsKIAotCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBpKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCQlpbnQgbiA9IDA7Ci0JCXVuc2lnbmVkIGludCBzZ19vZmYgPSBzZy0+b2Zmc2V0OwotCQl1bnNpZ25lZCBpbnQgc2dfY29weSA9IHNnLT5sZW5ndGg7CisJd2hpbGUgKHNnX21pdGVyX25leHQoJm1pdGVyKSAmJiBvZmZzZXQgPCBidWZsZW4pIHsKKwkJdW5zaWduZWQgaW50IGxlbjsKIAotCQlpZiAoc2dfY29weSA+IGJ1ZmxlbikKLQkJCXNnX2NvcHkgPSBidWZsZW47Ci0JCWJ1ZmxlbiAtPSBzZ19jb3B5OworCQlsZW4gPSBtaW4obWl0ZXIubGVuZ3RoLCBidWZsZW4gLSBvZmZzZXQpOwogCi0JCXdoaWxlIChzZ19jb3B5ID4gMCkgewotCQkJdW5zaWduZWQgaW50IHBhZ2VfY29weTsKLQkJCXZvaWQgKnA7Ci0KLQkJCXBhZ2VfY29weSA9IFBBR0VfU0laRSAtIHNnX29mZjsKLQkJCWlmIChwYWdlX2NvcHkgPiBzZ19jb3B5KQotCQkJCXBhZ2VfY29weSA9IHNnX2NvcHk7Ci0KLQkJCXBhZ2UgPSBudGhfcGFnZShzZ19wYWdlKHNnKSwgbik7Ci0JCQlwID0ga21hcF9hdG9taWMocGFnZSwgS01fQklPX1NSQ19JUlEpOwotCi0JCQlpZiAodG9fYnVmZmVyKQotCQkJCW1lbWNweShidWYgKyBidWZfb2ZmLCBwICsgc2dfb2ZmLCBwYWdlX2NvcHkpOwotCQkJZWxzZSB7Ci0JCQkJbWVtY3B5KHAgKyBzZ19vZmYsIGJ1ZiArIGJ1Zl9vZmYsIHBhZ2VfY29weSk7Ci0JCQkJZmx1c2hfa2VybmVsX2RjYWNoZV9wYWdlKHBhZ2UpOwotCQkJfQotCi0JCQlrdW5tYXBfYXRvbWljKHAsIEtNX0JJT19TUkNfSVJRKTsKLQotCQkJYnVmX29mZiArPSBwYWdlX2NvcHk7Ci0JCQlzZ19vZmYgKz0gcGFnZV9jb3B5OwotCQkJaWYgKHNnX29mZiA9PSBQQUdFX1NJWkUpIHsKLQkJCQlzZ19vZmYgPSAwOwotCQkJCW4rKzsKLQkJCX0KLQkJCXNnX2NvcHkgLT0gcGFnZV9jb3B5OworCQlpZiAodG9fYnVmZmVyKQorCQkJbWVtY3B5KGJ1ZiArIG9mZnNldCwgbWl0ZXIuYWRkciwgbGVuKTsKKwkJZWxzZSB7CisJCQltZW1jcHkobWl0ZXIuYWRkciwgYnVmICsgb2Zmc2V0LCBsZW4pOworCQkJZmx1c2hfa2VybmVsX2RjYWNoZV9wYWdlKG1pdGVyLnBhZ2UpOwogCQl9CiAKLQkJaWYgKCFidWZsZW4pCi0JCQlicmVhazsKKwkJb2Zmc2V0ICs9IGxlbjsKIAl9CiAKLQlyZXR1cm4gYnVmX29mZjsKKwlzZ19taXRlcl9zdG9wKCZtaXRlcik7CisKKwlyZXR1cm4gb2Zmc2V0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2xpYi9zbXBfcHJvY2Vzc29yX2lkLmMgYi9saWIvc21wX3Byb2Nlc3Nvcl9pZC5jCmluZGV4IDNiNGRjMDkuLmM0MzgxZDkgMTAwNjQ0Ci0tLSBhL2xpYi9zbXBfcHJvY2Vzc29yX2lkLmMKKysrIGIvbGliL3NtcF9wcm9jZXNzb3JfaWQuYwpAQCAtMTEsNyArMTEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgcHJlZW1wdF9jb3VudCA9IHByZWVtcHRfY291bnQoKTsKIAlpbnQgdGhpc19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWNwdW1hc2tfdCB0aGlzX21hc2s7CisJY3B1bWFza19vZl9jcHVfcHRyX2RlY2xhcmUodGhpc19tYXNrKTsKIAogCWlmIChsaWtlbHkocHJlZW1wdF9jb3VudCkpCiAJCWdvdG8gb3V0OwpAQCAtMjMsOSArMjMsOSBAQAogCSAqIEtlcm5lbCB0aHJlYWRzIGJvdW5kIHRvIGEgc2luZ2xlIENQVSBjYW4gc2FmZWx5IHVzZQogCSAqIHNtcF9wcm9jZXNzb3JfaWQoKToKIAkgKi8KLQl0aGlzX21hc2sgPSBjcHVtYXNrX29mX2NwdSh0aGlzX2NwdSk7CisJY3B1bWFza19vZl9jcHVfcHRyX25leHQodGhpc19tYXNrLCB0aGlzX2NwdSk7CiAKLQlpZiAoY3B1c19lcXVhbChjdXJyZW50LT5jcHVzX2FsbG93ZWQsIHRoaXNfbWFzaykpCisJaWYgKGNwdXNfZXF1YWwoY3VycmVudC0+Y3B1c19hbGxvd2VkLCAqdGhpc19tYXNrKSkKIAkJZ290byBvdXQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbGliL3RleHRzZWFyY2guYyBiL2xpYi90ZXh0c2VhcmNoLmMKaW5kZXggYTNlNTAwYS4uOWZiY2I0NCAxMDA2NDQKLS0tIGEvbGliL3RleHRzZWFyY2guYworKysgYi9saWIvdGV4dHNlYXJjaC5jCkBAIC01NCwxMCArNTQsMTMgQEAKICAqIFVTQUdFCiAgKgogICogICBCZWZvcmUgYSBzZWFyY2ggY2FuIGJlIHBlcmZvcm1lZCwgYSBjb25maWd1cmF0aW9uIG11c3QgYmUgY3JlYXRlZAotICogICBieSBjYWxsaW5nIHRleHRzZWFyY2hfcHJlcGFyZSgpIHNwZWN5ZmluZyB0aGUgc2VhcmNoaW5nIGFsZ29yaXRobSBhbmQKLSAqICAgdGhlIHBhdHRlcm4gdG8gbG9vayBmb3IuIFRoZSByZXR1cm5lZCBjb25maWd1cmF0aW9uIG1heSB0aGVuIGJlIHVzZWQKLSAqICAgZm9yIGFuIGFyYml0YXJ5IGFtb3VudCBvZiB0aW1lcyBhbmQgZXZlbiBpbiBwYXJhbGxlbCBhcyBsb25nIGFzIGEKLSAqICAgc2VwYXJhdGUgc3RydWN0IHRzX3N0YXRlIHZhcmlhYmxlIGlzIHByb3ZpZGVkIHRvIGV2ZXJ5IGluc3RhbmNlLgorICogICBieSBjYWxsaW5nIHRleHRzZWFyY2hfcHJlcGFyZSgpIHNwZWNpZnlpbmcgdGhlIHNlYXJjaGluZyBhbGdvcml0aG0sCisgKiAgIHRoZSBwYXR0ZXJuIHRvIGxvb2sgZm9yIGFuZCBmbGFncy4gQXMgYSBmbGFnLCB5b3UgY2FuIHNldCBUU19JR05PUkVDQVNFCisgKiAgIHRvIHBlcmZvcm0gY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZy4gQnV0IGl0IG1pZ2h0IHNsb3cgZG93bgorICogICBwZXJmb3JtYW5jZSBvZiBhbGdvcml0aG0sIHNvIHlvdSBzaG91bGQgdXNlIGl0IGF0IG93biB5b3VyIHJpc2suCisgKiAgIFRoZSByZXR1cm5lZCBjb25maWd1cmF0aW9uIG1heSB0aGVuIGJlIHVzZWQgZm9yIGFuIGFyYml0YXJ5CisgKiAgIGFtb3VudCBvZiB0aW1lcyBhbmQgZXZlbiBpbiBwYXJhbGxlbCBhcyBsb25nIGFzIGEgc2VwYXJhdGUgc3RydWN0CisgKiAgIHRzX3N0YXRlIHZhcmlhYmxlIGlzIHByb3ZpZGVkIHRvIGV2ZXJ5IGluc3RhbmNlLgogICoKICAqICAgVGhlIGFjdHVhbCBzZWFyY2ggaXMgcGVyZm9ybWVkIGJ5IGVpdGhlciBjYWxsaW5nIHRleHRzZWFyY2hfZmluZF8tCiAgKiAgIGNvbnRpbnVvdXMoKSBmb3IgbGluZWFyIGRhdGEgb3IgYnkgcHJvdmlkaW5nIGFuIG93biBnZXRfbmV4dF9ibG9jaygpCkBAIC04OSw3ICs5Miw2IEBACiAgKiAgICAgICBwYW5pYygiT2ggbXkgZ29kLCBkYW5jaW5nIGNoaWNrZW5zIGF0ICVkXG4iLCBwb3MpOwogICoKICAqICAgdGV4dHNlYXJjaF9kZXN0cm95KGNvbmYpOwotICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIApAQCAtMjY1LDcgKzI2Nyw3IEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJb3BzID0gbG9va3VwX3RzX2FsZ28oYWxnbyk7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCS8qCiAJICogV2h5IG5vdCBhbHdheXMgYXV0b2xvYWQgeW91IG1heSBhc2suIFNvbWUgdXNlcnMgYXJlCiAJICogaW4gYSBzaXR1YXRpb24gd2hlcmUgcmVxdWVzdGluZyBhIG1vZHVsZSBtYXkgZGVhZGxvY2ssCkBAIC0yODAsNyArMjgyLDcgQEAKIAlpZiAob3BzID09IE5VTEwpCiAJCWdvdG8gZXJyb3V0OwogCi0JY29uZiA9IG9wcy0+aW5pdChwYXR0ZXJuLCBsZW4sIGdmcF9tYXNrKTsKKwljb25mID0gb3BzLT5pbml0KHBhdHRlcm4sIGxlbiwgZ2ZwX21hc2ssIGZsYWdzKTsKIAlpZiAoSVNfRVJSKGNvbmYpKSB7CiAJCWVyciA9IFBUUl9FUlIoY29uZik7CiAJCWdvdG8gZXJyb3V0OwpkaWZmIC0tZ2l0IGEvbGliL3RzX2JtLmMgYi9saWIvdHNfYm0uYwppbmRleCA0YTdmY2U3Li45ZTY2ZWU0IDEwMDY0NAotLS0gYS9saWIvdHNfYm0uYworKysgYi9saWIvdHNfYm0uYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC90ZXh0c2VhcmNoLmg+CiAKIC8qIEFscGhhYmV0IHNpemUsIHVzZSBBU0NJSSAqLwpAQCAtNjQsNiArNjUsNyBAQAogCXVuc2lnbmVkIGludCBpLCB0ZXh0X2xlbiwgY29uc3VtZWQgPSBzdGF0ZS0+b2Zmc2V0OwogCWNvbnN0IHU4ICp0ZXh0OwogCWludCBzaGlmdCA9IGJtLT5wYXRsZW4gLSAxLCBiczsKKwljb25zdCB1OCBpY2FzZSA9IGNvbmYtPmZsYWdzICYgVFNfSUdOT1JFQ0FTRTsKIAogCWZvciAoOzspIHsKIAkJdGV4dF9sZW4gPSBjb25mLT5nZXRfbmV4dF9ibG9jayhjb25zdW1lZCwgJnRleHQsIGNvbmYsIHN0YXRlKTsKQEAgLTc1LDcgKzc3LDkgQEAKIAkJCURFQlVHUCgiU2VhcmNoaW5nIGluIHBvc2l0aW9uICVkICglYylcbiIsIAogCQkJCXNoaWZ0LCB0ZXh0W3NoaWZ0XSk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgYm0tPnBhdGxlbjsgaSsrKSAKLQkJCSAgICAgaWYgKHRleHRbc2hpZnQtaV0gIT0gYm0tPnBhdHRlcm5bYm0tPnBhdGxlbi0xLWldKQorCQkJCWlmICgoaWNhc2UgPyB0b3VwcGVyKHRleHRbc2hpZnQtaV0pCisJCQkJICAgIDogdGV4dFtzaGlmdC1pXSkKKwkJCQkJIT0gYm0tPnBhdHRlcm5bYm0tPnBhdGxlbi0xLWldKQogCQkJCSAgICAgZ290byBuZXh0OwogCiAJCQkvKiBMb25kb24gY2FsbGluZy4uLiAqLwpAQCAtMTExLDE0ICsxMTUsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBjb21wdXRlX3ByZWZpeF90Ymwoc3RydWN0IHRzX2JtICpibSkKK3N0YXRpYyB2b2lkIGNvbXB1dGVfcHJlZml4X3RibChzdHJ1Y3QgdHNfYm0gKmJtLCBpbnQgZmxhZ3MpCiB7CiAJaW50IGksIGosIGc7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVNJWkU7IGkrKykKIAkJYm0tPmJhZF9zaGlmdFtpXSA9IGJtLT5wYXRsZW47Ci0JZm9yIChpID0gMDsgaSA8IGJtLT5wYXRsZW4gLSAxOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGJtLT5wYXRsZW4gLSAxOyBpKyspIHsKIAkJYm0tPmJhZF9zaGlmdFtibS0+cGF0dGVybltpXV0gPSBibS0+cGF0bGVuIC0gMSAtIGk7CisJCWlmIChmbGFncyAmIFRTX0lHTk9SRUNBU0UpCisJCQlibS0+YmFkX3NoaWZ0W3RvbG93ZXIoYm0tPnBhdHRlcm5baV0pXQorCQkJICAgID0gYm0tPnBhdGxlbiAtIDEgLSBpOworCX0KIAogCS8qIENvbXB1dGUgdGhlIGdvb2Qgc2hpZnQgYXJyYXksIHVzZWQgdG8gbWF0Y2ggcmVvY3VycmVuY2VzIAogCSAqIG9mIGEgc3VicGF0dGVybiAqLwpAQCAtMTM1LDEwICsxNDMsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB0c19jb25maWcgKmJtX2luaXQoY29uc3Qgdm9pZCAqcGF0dGVybiwgdW5zaWduZWQgaW50IGxlbiwKLQkJCQkgZ2ZwX3QgZ2ZwX21hc2spCisJCQkJIGdmcF90IGdmcF9tYXNrLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHRzX2NvbmZpZyAqY29uZjsKIAlzdHJ1Y3QgdHNfYm0gKmJtOworCWludCBpOwogCXVuc2lnbmVkIGludCBwcmVmaXhfdGJsX2xlbiA9IGxlbiAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwogCXNpemVfdCBwcml2X3NpemUgPSBzaXplb2YoKmJtKSArIGxlbiArIHByZWZpeF90YmxfbGVuOwogCkBAIC0xNDYsMTEgKzE1NSwxNiBAQAogCWlmIChJU19FUlIoY29uZikpCiAJCXJldHVybiBjb25mOwogCisJY29uZi0+ZmxhZ3MgPSBmbGFnczsKIAlibSA9IHRzX2NvbmZpZ19wcml2KGNvbmYpOwogCWJtLT5wYXRsZW4gPSBsZW47CiAJYm0tPnBhdHRlcm4gPSAodTggKikgYm0tPmdvb2Rfc2hpZnQgKyBwcmVmaXhfdGJsX2xlbjsKLQltZW1jcHkoYm0tPnBhdHRlcm4sIHBhdHRlcm4sIGxlbik7Ci0JY29tcHV0ZV9wcmVmaXhfdGJsKGJtKTsKKwlpZiAoZmxhZ3MgJiBUU19JR05PUkVDQVNFKQorCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQlibS0+cGF0dGVybltpXSA9IHRvdXBwZXIoKCh1OCAqKXBhdHRlcm4pW2ldKTsKKwllbHNlCisJCW1lbWNweShibS0+cGF0dGVybiwgcGF0dGVybiwgbGVuKTsKKwljb21wdXRlX3ByZWZpeF90YmwoYm0sIGZsYWdzKTsKIAogCXJldHVybiBjb25mOwogfQpkaWZmIC0tZ2l0IGEvbGliL3RzX2ZzbS5jIGIvbGliL3RzX2ZzbS5jCmluZGV4IGFmNTc1YjYuLjU2OTZhMzUgMTAwNjQ0Ci0tLSBhL2xpYi90c19mc20uYworKysgYi9saWIvdHNfZnNtLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHRzX2NvbmZpZyAqZnNtX2luaXQoY29uc3Qgdm9pZCAqcGF0dGVybiwgdW5zaWduZWQgaW50IGxlbiwKLQkJCQkgICAgIGdmcF90IGdmcF9tYXNrKQorCQkJCSAgICBnZnBfdCBnZnBfbWFzaywgaW50IGZsYWdzKQogewogCWludCBpLCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCB0c19jb25maWcgKmNvbmY7CkBAIC0yNjksNiArMjY5LDkgQEAKIAlpZiAobGVuICAlIHNpemVvZihzdHJ1Y3QgdHNfZnNtX3Rva2VuKSB8fCBudG9rZW5zIDwgMSkKIAkJZ290byBlcnJvdXQ7CiAKKwlpZiAoZmxhZ3MgJiBUU19JR05PUkVDQVNFKQorCQlnb3RvIGVycm91dDsKKwogCWZvciAoaSA9IDA7IGkgPCBudG9rZW5zOyBpKyspIHsKIAkJc3RydWN0IHRzX2ZzbV90b2tlbiAqdCA9ICZ0b2tlbnNbaV07CiAKQEAgLTI4NCw2ICsyODcsNyBAQAogCWlmIChJU19FUlIoY29uZikpCiAJCXJldHVybiBjb25mOwogCisJY29uZi0+ZmxhZ3MgPSBmbGFnczsKIAlmc20gPSB0c19jb25maWdfcHJpdihjb25mKTsKIAlmc20tPm50b2tlbnMgPSBudG9rZW5zOwogCW1lbWNweShmc20tPnRva2VucywgcGF0dGVybiwgbGVuKTsKZGlmZiAtLWdpdCBhL2xpYi90c19rbXAuYyBiL2xpYi90c19rbXAuYwppbmRleCAzY2VkNjI4Li42MzJmNzgzIDEwMDY0NAotLS0gYS9saWIvdHNfa21wLmMKKysrIGIvbGliL3RzX2ttcC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RleHRzZWFyY2guaD4KIAogc3RydWN0IHRzX2ttcApAQCAtNDcsNiArNDgsNyBAQAogCXN0cnVjdCB0c19rbXAgKmttcCA9IHRzX2NvbmZpZ19wcml2KGNvbmYpOwogCXVuc2lnbmVkIGludCBpLCBxID0gMCwgdGV4dF9sZW4sIGNvbnN1bWVkID0gc3RhdGUtPm9mZnNldDsKIAljb25zdCB1OCAqdGV4dDsKKwljb25zdCBpbnQgaWNhc2UgPSBjb25mLT5mbGFncyAmIFRTX0lHTk9SRUNBU0U7CiAKIAlmb3IgKDs7KSB7CiAJCXRleHRfbGVuID0gY29uZi0+Z2V0X25leHRfYmxvY2soY29uc3VtZWQsICZ0ZXh0LCBjb25mLCBzdGF0ZSk7CkBAIC01NSw5ICs1NywxMSBAQAogCQkJYnJlYWs7CiAKIAkJZm9yIChpID0gMDsgaSA8IHRleHRfbGVuOyBpKyspIHsKLQkJCXdoaWxlIChxID4gMCAmJiBrbXAtPnBhdHRlcm5bcV0gIT0gdGV4dFtpXSkKKwkJCXdoaWxlIChxID4gMCAmJiBrbXAtPnBhdHRlcm5bcV0KKwkJCSAgICAhPSAoaWNhc2UgPyB0b3VwcGVyKHRleHRbaV0pIDogdGV4dFtpXSkpCiAJCQkJcSA9IGttcC0+cHJlZml4X3RibFtxIC0gMV07Ci0JCQlpZiAoa21wLT5wYXR0ZXJuW3FdID09IHRleHRbaV0pCisJCQlpZiAoa21wLT5wYXR0ZXJuW3FdCisJCQkgICAgPT0gKGljYXNlID8gdG91cHBlcih0ZXh0W2ldKSA6IHRleHRbaV0pKQogCQkJCXErKzsKIAkJCWlmICh1bmxpa2VseShxID09IGttcC0+cGF0dGVybl9sZW4pKSB7CiAJCQkJc3RhdGUtPm9mZnNldCA9IGNvbnN1bWVkICsgaSArIDE7CkBAIC03MiwyNCArNzYsMjggQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVfcHJlZml4X3RibChjb25zdCB1OCAqcGF0dGVybiwgdW5zaWduZWQgaW50IGxlbiwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnByZWZpeF90YmwpCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpwcmVmaXhfdGJsLCBpbnQgZmxhZ3MpCiB7CiAJdW5zaWduZWQgaW50IGssIHE7CisJY29uc3QgdTggaWNhc2UgPSBmbGFncyAmIFRTX0lHTk9SRUNBU0U7CiAKIAlmb3IgKGsgPSAwLCBxID0gMTsgcSA8IGxlbjsgcSsrKSB7Ci0JCXdoaWxlIChrID4gMCAmJiBwYXR0ZXJuW2tdICE9IHBhdHRlcm5bcV0pCisJCXdoaWxlIChrID4gMCAmJiAoaWNhc2UgPyB0b3VwcGVyKHBhdHRlcm5ba10pIDogcGF0dGVybltrXSkKKwkJICAgICE9IChpY2FzZSA/IHRvdXBwZXIocGF0dGVybltxXSkgOiBwYXR0ZXJuW3FdKSkKIAkJCWsgPSBwcmVmaXhfdGJsW2stMV07Ci0JCWlmIChwYXR0ZXJuW2tdID09IHBhdHRlcm5bcV0pCisJCWlmICgoaWNhc2UgPyB0b3VwcGVyKHBhdHRlcm5ba10pIDogcGF0dGVybltrXSkKKwkJICAgID09IChpY2FzZSA/IHRvdXBwZXIocGF0dGVybltxXSkgOiBwYXR0ZXJuW3FdKSkKIAkJCWsrKzsKIAkJcHJlZml4X3RibFtxXSA9IGs7CiAJfQogfQogCiBzdGF0aWMgc3RydWN0IHRzX2NvbmZpZyAqa21wX2luaXQoY29uc3Qgdm9pZCAqcGF0dGVybiwgdW5zaWduZWQgaW50IGxlbiwKLQkJCQkgIGdmcF90IGdmcF9tYXNrKQorCQkJCSAgZ2ZwX3QgZ2ZwX21hc2ssIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgdHNfY29uZmlnICpjb25mOwogCXN0cnVjdCB0c19rbXAgKmttcDsKKwlpbnQgaTsKIAl1bnNpZ25lZCBpbnQgcHJlZml4X3RibF9sZW4gPSBsZW4gKiBzaXplb2YodW5zaWduZWQgaW50KTsKIAlzaXplX3QgcHJpdl9zaXplID0gc2l6ZW9mKCprbXApICsgbGVuICsgcHJlZml4X3RibF9sZW47CiAKQEAgLTk3LDExICsxMDUsMTYgQEAKIAlpZiAoSVNfRVJSKGNvbmYpKQogCQlyZXR1cm4gY29uZjsKIAorCWNvbmYtPmZsYWdzID0gZmxhZ3M7CiAJa21wID0gdHNfY29uZmlnX3ByaXYoY29uZik7CiAJa21wLT5wYXR0ZXJuX2xlbiA9IGxlbjsKLQljb21wdXRlX3ByZWZpeF90YmwocGF0dGVybiwgbGVuLCBrbXAtPnByZWZpeF90YmwpOworCWNvbXB1dGVfcHJlZml4X3RibChwYXR0ZXJuLCBsZW4sIGttcC0+cHJlZml4X3RibCwgZmxhZ3MpOwogCWttcC0+cGF0dGVybiA9ICh1OCAqKSBrbXAtPnByZWZpeF90YmwgKyBwcmVmaXhfdGJsX2xlbjsKLQltZW1jcHkoa21wLT5wYXR0ZXJuLCBwYXR0ZXJuLCBsZW4pOworCWlmIChmbGFncyAmIFRTX0lHTk9SRUNBU0UpCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCWttcC0+cGF0dGVybltpXSA9IHRvdXBwZXIoKCh1OCAqKXBhdHRlcm4pW2ldKTsKKwllbHNlCisJCW1lbWNweShrbXAtPnBhdHRlcm4sIHBhdHRlcm4sIGxlbik7CiAKIAlyZXR1cm4gY29uZjsKIH0KZGlmZiAtLWdpdCBhL21tL2FsbG9jcGVyY3B1LmMgYi9tbS9hbGxvY3BlcmNwdS5jCmluZGV4IDA1ZjJiNDAuLjg0MzM2NDUgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jcGVyY3B1LmMKKysrIGIvbW0vYWxsb2NwZXJjcHUuYwpAQCAtMzUsNyArMzUsNyBAQAogdm9pZCBfX3BlcmNwdV9kZXBvcHVsYXRlX21hc2sodm9pZCAqX19wZGF0YSwgY3B1bWFza190ICptYXNrKQogewogCWludCBjcHU7Ci0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCAqbWFzaykKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsICptYXNrKQogCQlwZXJjcHVfZGVwb3B1bGF0ZShfX3BkYXRhLCBjcHUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19wZXJjcHVfZGVwb3B1bGF0ZV9tYXNrKTsKQEAgLTg2LDcgKzg2LDcgQEAKIAlpbnQgY3B1OwogCiAJY3B1c19jbGVhcihwb3B1bGF0ZWQpOwotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgKm1hc2spCisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCAqbWFzaykKIAkJaWYgKHVubGlrZWx5KCFwZXJjcHVfcG9wdWxhdGUoX19wZGF0YSwgc2l6ZSwgZ2ZwLCBjcHUpKSkgewogCQkJX19wZXJjcHVfZGVwb3B1bGF0ZV9tYXNrKF9fcGRhdGEsICZwb3B1bGF0ZWQpOwogCQkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggN2RhNGE3Yi4uZTE2ZTE1MiAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtNDAsNiArNDAsNyBAQAogI2lmZGVmIENPTkZJR19ISUdITUVNCiAKIHVuc2lnbmVkIGxvbmcgdG90YWxoaWdoX3BhZ2VzIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKHRvdGFsaGlnaF9wYWdlcyk7CiAKIHVuc2lnbmVkIGludCBucl9mcmVlX2hpZ2hwYWdlcyAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCAzNWFiMzhhLi42ZDRhNDljIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC00OTIsNyArNDkyLDcgQEAKIAlpZiAocCA+IGFkZHIgKyAxNikKIAkJcHJpbnRfc2VjdGlvbigiQnl0ZXMgYjQiLCBwIC0gMTYsIDE2KTsKIAotCXByaW50X3NlY3Rpb24oIk9iamVjdCIsIHAsIG1pbihzLT5vYmpzaXplLCAxMjgpKTsKKwlwcmludF9zZWN0aW9uKCJPYmplY3QiLCBwLCBtaW5fdCh1bnNpZ25lZCBsb25nLCBzLT5vYmpzaXplLCBQQUdFX1NJWkUpKTsKIAogCWlmIChzLT5mbGFncyAmIFNMQUJfUkVEX1pPTkUpCiAJCXByaW50X3NlY3Rpb24oIlJlZHpvbmUiLCBwICsgcy0+b2Jqc2l6ZSwKQEAgLTE0OTUsMTUgKzE0OTUsNyBAQAogCiBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpCiB7Ci0jaWZkZWYgQ09ORklHX1NNUAogCW9uX2VhY2hfY3B1KGZsdXNoX2NwdV9zbGFiLCBzLCAxKTsKLSNlbHNlCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlmbHVzaF9jcHVfc2xhYihzKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggZGI5ZWFiYi4uYzNkNGE3OCAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTI2LDcgKzI2LDcgQEAKIAogCW1lbXNldChyZXQsIDAsIE5SX1ZNX0VWRU5UX0lURU1TICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgKmNwdW1hc2spIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsICpjcHVtYXNrKSB7CiAJCXN0cnVjdCB2bV9ldmVudF9zdGF0ZSAqdGhpcyA9ICZwZXJfY3B1KHZtX2V2ZW50X3N0YXRlcywgY3B1KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTlJfVk1fRVZFTlRfSVRFTVM7IGkrKykKZGlmZiAtLWdpdCBhL25ldC84MDIvS2NvbmZpZyBiL25ldC84MDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTMzZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0LzgwMi9LY29uZmlnCkBAIC0wLDAgKzEsNyBAQAorY29uZmlnIFNUUAorCXRyaXN0YXRlCisJc2VsZWN0IExMQworCitjb25maWcgR0FSUAorCXRyaXN0YXRlCisJc2VsZWN0IFNUUApkaWZmIC0tZ2l0IGEvbmV0LzgwMi9NYWtlZmlsZSBiL25ldC84MDIvTWFrZWZpbGUKaW5kZXggNjg1NjlmZi4uNzg5M2Q2NyAxMDA2NDQKLS0tIGEvbmV0LzgwMi9NYWtlZmlsZQorKysgYi9uZXQvODAyL01ha2VmaWxlCkBAIC0xMCwzICsxMCw1IEBACiBvYmotJChDT05GSUdfSElQUEkpCSs9ICAgICAgICAgICAgICAgICBoaXBwaS5vCiBvYmotJChDT05GSUdfSVBYKQkrPSBwODAyMi5vIHBzbmFwLm8gcDgwMjMubwogb2JqLSQoQ09ORklHX0FUQUxLKQkrPSBwODAyMi5vIHBzbmFwLm8KK29iai0kKENPTkZJR19TVFApCSs9IHN0cC5vCitvYmotJChDT05GSUdfR0FSUCkJKz0gZ2FycC5vCmRpZmYgLS1naXQgYS9uZXQvODAyL2dhcnAuYyBiL25ldC84MDIvZ2FycC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkY2IwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvODAyL2dhcnAuYwpAQCAtMCwwICsxLDYzNiBAQAorLyoKKyAqCUlFRUUgODAyLjFEIEdlbmVyaWMgQXR0cmlidXRlIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCAoR0FSUCkKKyAqCisgKglDb3B5cmlnaHQgKGMpIDIwMDggUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCXZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9sbGMuaD4KKyNpbmNsdWRlIDxuZXQvbGxjLmg+CisjaW5jbHVkZSA8bmV0L2xsY19wZHUuaD4KKyNpbmNsdWRlIDxuZXQvZ2FycC5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCBnYXJwX2pvaW5fdGltZSBfX3JlYWRfbW9zdGx5ID0gMjAwOworbW9kdWxlX3BhcmFtKGdhcnBfam9pbl90aW1lLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZ2FycF9qb2luX3RpbWUsICJKb2luIHRpbWUgaW4gbXMgKGRlZmF1bHQgMjAwbXMpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2FycF9zdGF0ZV90cmFucyB7CisJdTgJc3RhdGU7CisJdTgJYWN0aW9uOworfSBnYXJwX2FwcGxpY2FudF9zdGF0ZV90YWJsZVtHQVJQX0FQUExJQ0FOVF9NQVggKyAxXVtHQVJQX0VWRU5UX01BWCArIDFdID0geworCVtHQVJQX0FQUExJQ0FOVF9WQV0gPSB7CisJCVtHQVJQX0VWRU5UX1RSQU5TTUlUX1BEVV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX0FBLAorCQkJCQkJICAgIC5hY3Rpb24gPSBHQVJQX0FDVElPTl9TX0pPSU5fSU4gfSwKKwkJW0dBUlBfRVZFTlRfUl9KT0lOX0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX0FBIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZBIH0sCisJCVtHQVJQX0VWRU5UX1JfRU1QVFldCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVkEgfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WQSB9LAorCQlbR0FSUF9FVkVOVF9SX0xFQVZFX0VNUFRZXQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVlAgfSwKKwkJW0dBUlBfRVZFTlRfUkVRX0pPSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfSU5WQUxJRCB9LAorCQlbR0FSUF9FVkVOVF9SRVFfTEVBVkVdCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfTEEgfSwKKwl9LAorCVtHQVJQX0FQUExJQ0FOVF9BQV0gPSB7CisJCVtHQVJQX0VWRU5UX1RSQU5TTUlUX1BEVV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1FBLAorCQkJCQkJICAgIC5hY3Rpb24gPSBHQVJQX0FDVElPTl9TX0pPSU5fSU4gfSwKKwkJW0dBUlBfRVZFTlRfUl9KT0lOX0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1FBIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZBIH0sCisJCVtHQVJQX0VWRU5UX1JfRU1QVFldCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVkEgfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WQSB9LAorCQlbR0FSUF9FVkVOVF9SX0xFQVZFX0VNUFRZXQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVlAgfSwKKwkJW0dBUlBfRVZFTlRfUkVRX0pPSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfSU5WQUxJRCB9LAorCQlbR0FSUF9FVkVOVF9SRVFfTEVBVkVdCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfTEEgfSwKKwl9LAorCVtHQVJQX0FQUExJQ0FOVF9RQV0gPSB7CisJCVtHQVJQX0VWRU5UX1RSQU5TTUlUX1BEVV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX0lOVkFMSUQgfSwKKwkJW0dBUlBfRVZFTlRfUl9KT0lOX0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1FBIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZBIH0sCisJCVtHQVJQX0VWRU5UX1JfRU1QVFldCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVkEgfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WUCB9LAorCQlbR0FSUF9FVkVOVF9SX0xFQVZFX0VNUFRZXQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVlAgfSwKKwkJW0dBUlBfRVZFTlRfUkVRX0pPSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfSU5WQUxJRCB9LAorCQlbR0FSUF9FVkVOVF9SRVFfTEVBVkVdCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfTEEgfSwKKwl9LAorCVtHQVJQX0FQUExJQ0FOVF9MQV0gPSB7CisJCVtHQVJQX0VWRU5UX1RSQU5TTUlUX1BEVV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPLAorCQkJCQkJICAgIC5hY3Rpb24gPSBHQVJQX0FDVElPTl9TX0xFQVZFX0VNUFRZIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9MQSB9LAorCQlbR0FSUF9FVkVOVF9SX0pPSU5fRU1QVFldCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WTyB9LAorCQlbR0FSUF9FVkVOVF9SX0VNUFRZXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX0xBIH0sCisJCVtHQVJQX0VWRU5UX1JfTEVBVkVfSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfTEEgfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9KT0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZBIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9MRUFWRV0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9JTlZBTElEIH0sCisJfSwKKwlbR0FSUF9BUFBMSUNBTlRfVlBdID0geworCQlbR0FSUF9FVkVOVF9UUkFOU01JVF9QRFVdCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9BQSwKKwkJCQkJCSAgICAuYWN0aW9uID0gR0FSUF9BQ1RJT05fU19KT0lOX0lOIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9BUCB9LAorCQlbR0FSUF9FVkVOVF9SX0pPSU5fRU1QVFldCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WUCB9LAorCQlbR0FSUF9FVkVOVF9SX0VNUFRZXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZQIH0sCisJCVtHQVJQX0VWRU5UX1JfTEVBVkVfSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVlAgfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZQIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9KT0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX0lOVkFMSUQgfSwKKwkJW0dBUlBfRVZFTlRfUkVRX0xFQVZFXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPIH0sCisJfSwKKwlbR0FSUF9BUFBMSUNBTlRfQVBdID0geworCQlbR0FSUF9FVkVOVF9UUkFOU01JVF9QRFVdCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9RQSwKKwkJCQkJCSAgICAuYWN0aW9uID0gR0FSUF9BQ1RJT05fU19KT0lOX0lOIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9RUCB9LAorCQlbR0FSUF9FVkVOVF9SX0pPSU5fRU1QVFldCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WUCB9LAorCQlbR0FSUF9FVkVOVF9SX0VNUFRZXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZQIH0sCisJCVtHQVJQX0VWRU5UX1JfTEVBVkVfSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVlAgfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZQIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9KT0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX0lOVkFMSUQgfSwKKwkJW0dBUlBfRVZFTlRfUkVRX0xFQVZFXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX0FPIH0sCisJfSwKKwlbR0FSUF9BUFBMSUNBTlRfUVBdID0geworCQlbR0FSUF9FVkVOVF9UUkFOU01JVF9QRFVdCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9JTlZBTElEIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9RUCB9LAorCQlbR0FSUF9FVkVOVF9SX0pPSU5fRU1QVFldCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WUCB9LAorCQlbR0FSUF9FVkVOVF9SX0VNUFRZXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZQIH0sCisJCVtHQVJQX0VWRU5UX1JfTEVBVkVfSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVlAgfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZQIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9KT0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX0lOVkFMSUQgfSwKKwkJW0dBUlBfRVZFTlRfUkVRX0xFQVZFXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1FPIH0sCisJfSwKKwlbR0FSUF9BUFBMSUNBTlRfVk9dID0geworCQlbR0FSUF9FVkVOVF9UUkFOU01JVF9QRFVdCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9JTlZBTElEIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9BTyB9LAorCQlbR0FSUF9FVkVOVF9SX0pPSU5fRU1QVFldCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WTyB9LAorCQlbR0FSUF9FVkVOVF9SX0VNUFRZXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPIH0sCisJCVtHQVJQX0VWRU5UX1JfTEVBVkVfSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVk8gfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9KT0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZQIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9MRUFWRV0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9JTlZBTElEIH0sCisJfSwKKwlbR0FSUF9BUFBMSUNBTlRfQU9dID0geworCQlbR0FSUF9FVkVOVF9UUkFOU01JVF9QRFVdCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9JTlZBTElEIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9RTyB9LAorCQlbR0FSUF9FVkVOVF9SX0pPSU5fRU1QVFldCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WTyB9LAorCQlbR0FSUF9FVkVOVF9SX0VNUFRZXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPIH0sCisJCVtHQVJQX0VWRU5UX1JfTEVBVkVfSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVk8gfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9KT0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX0FQIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9MRUFWRV0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9JTlZBTElEIH0sCisJfSwKKwlbR0FSUF9BUFBMSUNBTlRfUU9dID0geworCQlbR0FSUF9FVkVOVF9UUkFOU01JVF9QRFVdCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9JTlZBTElEIH0sCisJCVtHQVJQX0VWRU5UX1JfSk9JTl9JTl0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9RTyB9LAorCQlbR0FSUF9FVkVOVF9SX0pPSU5fRU1QVFldCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9WTyB9LAorCQlbR0FSUF9FVkVOVF9SX0VNUFRZXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPIH0sCisJCVtHQVJQX0VWRU5UX1JfTEVBVkVfSU5dCQk9IHsgLnN0YXRlID0gR0FSUF9BUFBMSUNBTlRfVk8gfSwKKwkJW0dBUlBfRVZFTlRfUl9MRUFWRV9FTVBUWV0JPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9KT0lOXQkJPSB7IC5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1FQIH0sCisJCVtHQVJQX0VWRU5UX1JFUV9MRUFWRV0JCT0geyAuc3RhdGUgPSBHQVJQX0FQUExJQ0FOVF9JTlZBTElEIH0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgZ2FycF9hdHRyX2NtcChjb25zdCBzdHJ1Y3QgZ2FycF9hdHRyICphdHRyLAorCQkJIGNvbnN0IHZvaWQgKmRhdGEsIHU4IGxlbiwgdTggdHlwZSkKK3sKKwlpZiAoYXR0ci0+dHlwZSAhPSB0eXBlKQorCQlyZXR1cm4gYXR0ci0+dHlwZSAtIHR5cGU7CisJaWYgKGF0dHItPmRsZW4gIT0gbGVuKQorCQlyZXR1cm4gYXR0ci0+ZGxlbiAtIGxlbjsKKwlyZXR1cm4gbWVtY21wKGF0dHItPmRhdGEsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ2FycF9hdHRyICpnYXJwX2F0dHJfbG9va3VwKGNvbnN0IHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwLAorCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHU4IGxlbiwgdTggdHlwZSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gYXBwLT5naWQucmJfbm9kZTsKKwlzdHJ1Y3QgZ2FycF9hdHRyICphdHRyOworCWludCBkOworCisJd2hpbGUgKHBhcmVudCkgeworCQlhdHRyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZ2FycF9hdHRyLCBub2RlKTsKKwkJZCA9IGdhcnBfYXR0cl9jbXAoYXR0ciwgZGF0YSwgbGVuLCB0eXBlKTsKKwkJaWYgKGQgPCAwKQorCQkJcGFyZW50ID0gcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChkID4gMCkKKwkJCXBhcmVudCA9IHBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBhdHRyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZ2FycF9hdHRyX2luc2VydChzdHJ1Y3QgZ2FycF9hcHBsaWNhbnQgKmFwcCwgc3RydWN0IGdhcnBfYXR0ciAqbmV3KQoreworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMLCAqKnAgPSAmYXBwLT5naWQucmJfbm9kZTsKKwlzdHJ1Y3QgZ2FycF9hdHRyICphdHRyOworCWludCBkOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQlhdHRyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZ2FycF9hdHRyLCBub2RlKTsKKwkJZCA9IGdhcnBfYXR0cl9jbXAoYXR0ciwgbmV3LT5kYXRhLCBuZXctPmRsZW4sIG5ldy0+dHlwZSk7CisJCWlmIChkIDwgMCkKKwkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChkID4gMCkKKwkJCXAgPSAmcGFyZW50LT5yYl9yaWdodDsKKwl9CisJcmJfbGlua19ub2RlKCZuZXctPm5vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZuZXctPm5vZGUsICZhcHAtPmdpZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ2FycF9hdHRyICpnYXJwX2F0dHJfY3JlYXRlKHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwLAorCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHU4IGxlbiwgdTggdHlwZSkKK3sKKwlzdHJ1Y3QgZ2FycF9hdHRyICphdHRyOworCisJYXR0ciA9IGttYWxsb2Moc2l6ZW9mKCphdHRyKSArIGxlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFhdHRyKQorCQlyZXR1cm4gYXR0cjsKKwlhdHRyLT5zdGF0ZSA9IEdBUlBfQVBQTElDQU5UX1ZPOworCWF0dHItPnR5cGUgID0gdHlwZTsKKwlhdHRyLT5kbGVuICA9IGxlbjsKKwltZW1jcHkoYXR0ci0+ZGF0YSwgZGF0YSwgbGVuKTsKKwlnYXJwX2F0dHJfaW5zZXJ0KGFwcCwgYXR0cik7CisJcmV0dXJuIGF0dHI7Cit9CisKK3N0YXRpYyB2b2lkIGdhcnBfYXR0cl9kZXN0cm95KHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwLCBzdHJ1Y3QgZ2FycF9hdHRyICphdHRyKQoreworCXJiX2VyYXNlKCZhdHRyLT5ub2RlLCAmYXBwLT5naWQpOworCWtmcmVlKGF0dHIpOworfQorCitzdGF0aWMgaW50IGdhcnBfcGR1X2luaXQoc3RydWN0IGdhcnBfYXBwbGljYW50ICphcHApCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgZ2FycF9wZHVfaGRyICpncDsKKworI2RlZmluZSBMTENfUkVTRVJWRQlzaXplb2Yoc3RydWN0IGxsY19wZHVfdW4pCisJc2tiID0gYWxsb2Nfc2tiKGFwcC0+ZGV2LT5tdHUgKyBMTF9SRVNFUlZFRF9TUEFDRShhcHAtPmRldiksCisJCQlHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlza2ItPmRldiA9IGFwcC0+ZGV2OworCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CisJc2tiX3Jlc2VydmUoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShhcHAtPmRldikgKyBMTENfUkVTRVJWRSk7CisKKwlncCA9IChzdHJ1Y3QgZ2FycF9wZHVfaGRyICopX19za2JfcHV0KHNrYiwgc2l6ZW9mKCpncCkpOworCXB1dF91bmFsaWduZWQoaHRvbnMoR0FSUF9QUk9UT0NPTF9JRCksICZncC0+cHJvdG9jb2wpOworCisJYXBwLT5wZHUgPSBza2I7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2FycF9wZHVfYXBwZW5kX2VuZF9tYXJrKHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwKQoreworCWlmIChza2JfdGFpbHJvb20oYXBwLT5wZHUpIDwgc2l6ZW9mKHU4KSkKKwkJcmV0dXJuIC0xOworCSoodTggKilfX3NrYl9wdXQoYXBwLT5wZHUsIHNpemVvZih1OCkpID0gR0FSUF9FTkRfTUFSSzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2FycF9wZHVfcXVldWUoc3RydWN0IGdhcnBfYXBwbGljYW50ICphcHApCit7CisJaWYgKCFhcHAtPnBkdSkKKwkJcmV0dXJuOworCisJZ2FycF9wZHVfYXBwZW5kX2VuZF9tYXJrKGFwcCk7CisJZ2FycF9wZHVfYXBwZW5kX2VuZF9tYXJrKGFwcCk7CisKKwlsbGNfcGR1X2hlYWRlcl9pbml0KGFwcC0+cGR1LCBMTENfUERVX1RZUEVfVSwgTExDX1NBUF9CU1BBTiwKKwkJCSAgICBMTENfU0FQX0JTUEFOLCBMTENfUERVX0NNRCk7CisJbGxjX3BkdV9pbml0X2FzX3VpX2NtZChhcHAtPnBkdSk7CisJbGxjX21hY19oZHJfaW5pdChhcHAtPnBkdSwgYXBwLT5kZXYtPmRldl9hZGRyLAorCQkJIGFwcC0+YXBwLT5wcm90by5ncm91cF9hZGRyZXNzKTsKKworCXNrYl9xdWV1ZV90YWlsKCZhcHAtPnF1ZXVlLCBhcHAtPnBkdSk7CisJYXBwLT5wZHUgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBnYXJwX3F1ZXVlX3htaXQoc3RydWN0IGdhcnBfYXBwbGljYW50ICphcHApCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmFwcC0+cXVldWUpKSkKKwkJZGV2X3F1ZXVlX3htaXQoc2tiKTsKK30KKworc3RhdGljIGludCBnYXJwX3BkdV9hcHBlbmRfbXNnKHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwLCB1OCBhdHRydHlwZSkKK3sKKwlzdHJ1Y3QgZ2FycF9tc2dfaGRyICpnbTsKKworCWlmIChza2JfdGFpbHJvb20oYXBwLT5wZHUpIDwgc2l6ZW9mKCpnbSkpCisJCXJldHVybiAtMTsKKwlnbSA9IChzdHJ1Y3QgZ2FycF9tc2dfaGRyICopX19za2JfcHV0KGFwcC0+cGR1LCBzaXplb2YoKmdtKSk7CisJZ20tPmF0dHJ0eXBlID0gYXR0cnR5cGU7CisJZ2FycF9jYihhcHAtPnBkdSktPmN1cl90eXBlID0gYXR0cnR5cGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2FycF9wZHVfYXBwZW5kX2F0dHIoc3RydWN0IGdhcnBfYXBwbGljYW50ICphcHAsCisJCQkJY29uc3Qgc3RydWN0IGdhcnBfYXR0ciAqYXR0ciwKKwkJCQllbnVtIGdhcnBfYXR0cl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgZ2FycF9hdHRyX2hkciAqZ2E7CisJdW5zaWduZWQgaW50IGxlbjsKKwlpbnQgZXJyOworYWdhaW46CisJaWYgKCFhcHAtPnBkdSkgeworCQllcnIgPSBnYXJwX3BkdV9pbml0KGFwcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoZ2FycF9jYihhcHAtPnBkdSktPmN1cl90eXBlICE9IGF0dHItPnR5cGUpIHsKKwkJaWYgKGdhcnBfY2IoYXBwLT5wZHUpLT5jdXJfdHlwZSAmJgorCQkgICAgZ2FycF9wZHVfYXBwZW5kX2VuZF9tYXJrKGFwcCkgPCAwKQorCQkJZ290byBxdWV1ZTsKKwkJaWYgKGdhcnBfcGR1X2FwcGVuZF9tc2coYXBwLCBhdHRyLT50eXBlKSA8IDApCisJCQlnb3RvIHF1ZXVlOworCX0KKworCWxlbiA9IHNpemVvZigqZ2EpICsgYXR0ci0+ZGxlbjsKKwlpZiAoc2tiX3RhaWxyb29tKGFwcC0+cGR1KSA8IGxlbikKKwkJZ290byBxdWV1ZTsKKwlnYSA9IChzdHJ1Y3QgZ2FycF9hdHRyX2hkciAqKV9fc2tiX3B1dChhcHAtPnBkdSwgbGVuKTsKKwlnYS0+bGVuICAgPSBsZW47CisJZ2EtPmV2ZW50ID0gZXZlbnQ7CisJbWVtY3B5KGdhLT5kYXRhLCBhdHRyLT5kYXRhLCBhdHRyLT5kbGVuKTsKKwlyZXR1cm4gMDsKKworcXVldWU6CisJZ2FycF9wZHVfcXVldWUoYXBwKTsKKwlnb3RvIGFnYWluOworfQorCitzdGF0aWMgdm9pZCBnYXJwX2F0dHJfZXZlbnQoc3RydWN0IGdhcnBfYXBwbGljYW50ICphcHAsCisJCQkgICAgc3RydWN0IGdhcnBfYXR0ciAqYXR0ciwgZW51bSBnYXJwX2V2ZW50IGV2ZW50KQoreworCWVudW0gZ2FycF9hcHBsaWNhbnRfc3RhdGUgc3RhdGU7CisKKwlzdGF0ZSA9IGdhcnBfYXBwbGljYW50X3N0YXRlX3RhYmxlW2F0dHItPnN0YXRlXVtldmVudF0uc3RhdGU7CisJaWYgKHN0YXRlID09IEdBUlBfQVBQTElDQU5UX0lOVkFMSUQpCisJCXJldHVybjsKKworCXN3aXRjaCAoZ2FycF9hcHBsaWNhbnRfc3RhdGVfdGFibGVbYXR0ci0+c3RhdGVdW2V2ZW50XS5hY3Rpb24pIHsKKwljYXNlIEdBUlBfQUNUSU9OX05PTkU6CisJCWJyZWFrOworCWNhc2UgR0FSUF9BQ1RJT05fU19KT0lOX0lOOgorCQkvKiBXaGVuIGFwcGVuZGluZyB0aGUgYXR0cmlidXRlIGZhaWxzLCBkb24ndCB1cGRhdGUgc3RhdGUgaW4KKwkJICogb3JkZXIgdG8gcmV0cnkgb24gbmV4dCBUUkFOU01JVF9QRFUgZXZlbnQuICovCisJCWlmIChnYXJwX3BkdV9hcHBlbmRfYXR0cihhcHAsIGF0dHIsIEdBUlBfSk9JTl9JTikgPCAwKQorCQkJcmV0dXJuOworCQlicmVhazsKKwljYXNlIEdBUlBfQUNUSU9OX1NfTEVBVkVfRU1QVFk6CisJCWdhcnBfcGR1X2FwcGVuZF9hdHRyKGFwcCwgYXR0ciwgR0FSUF9MRUFWRV9FTVBUWSk7CisJCS8qIEFzIGEgcHVyZSBhcHBsaWNhbnQsIHNlbmRpbmcgYSBsZWF2ZSBtZXNzYWdlIGltcGxpZXMgdGhhdAorCQkgKiB0aGUgYXR0cmlidXRlIHdhcyB1bnJlZ2lzdGVyZWQgYW5kIGNhbiBiZSBkZXN0cm95ZWQuICovCisJCWdhcnBfYXR0cl9kZXN0cm95KGFwcCwgYXR0cik7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCX0KKworCWF0dHItPnN0YXRlID0gc3RhdGU7Cit9CisKK2ludCBnYXJwX3JlcXVlc3Rfam9pbihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZ2FycF9hcHBsaWNhdGlvbiAqYXBwbCwKKwkJICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgdTggbGVuLCB1OCB0eXBlKQoreworCXN0cnVjdCBnYXJwX3BvcnQgKnBvcnQgPSBkZXYtPmdhcnBfcG9ydDsKKwlzdHJ1Y3QgZ2FycF9hcHBsaWNhbnQgKmFwcCA9IHBvcnQtPmFwcGxpY2FudHNbYXBwbC0+dHlwZV07CisJc3RydWN0IGdhcnBfYXR0ciAqYXR0cjsKKworCXNwaW5fbG9ja19iaCgmYXBwLT5sb2NrKTsKKwlhdHRyID0gZ2FycF9hdHRyX2NyZWF0ZShhcHAsIGRhdGEsIGxlbiwgdHlwZSk7CisJaWYgKCFhdHRyKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZhcHAtPmxvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZ2FycF9hdHRyX2V2ZW50KGFwcCwgYXR0ciwgR0FSUF9FVkVOVF9SRVFfSk9JTik7CisJc3Bpbl91bmxvY2tfYmgoJmFwcC0+bG9jayk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnYXJwX3JlcXVlc3Rfam9pbik7CisKK3ZvaWQgZ2FycF9yZXF1ZXN0X2xlYXZlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQljb25zdCBzdHJ1Y3QgZ2FycF9hcHBsaWNhdGlvbiAqYXBwbCwKKwkJCWNvbnN0IHZvaWQgKmRhdGEsIHU4IGxlbiwgdTggdHlwZSkKK3sKKwlzdHJ1Y3QgZ2FycF9wb3J0ICpwb3J0ID0gZGV2LT5nYXJwX3BvcnQ7CisJc3RydWN0IGdhcnBfYXBwbGljYW50ICphcHAgPSBwb3J0LT5hcHBsaWNhbnRzW2FwcGwtPnR5cGVdOworCXN0cnVjdCBnYXJwX2F0dHIgKmF0dHI7CisKKwlzcGluX2xvY2tfYmgoJmFwcC0+bG9jayk7CisJYXR0ciA9IGdhcnBfYXR0cl9sb29rdXAoYXBwLCBkYXRhLCBsZW4sIHR5cGUpOworCWlmICghYXR0cikgeworCQlzcGluX3VubG9ja19iaCgmYXBwLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlnYXJwX2F0dHJfZXZlbnQoYXBwLCBhdHRyLCBHQVJQX0VWRU5UX1JFUV9MRUFWRSk7CisJc3Bpbl91bmxvY2tfYmgoJmFwcC0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnYXJwX3JlcXVlc3RfbGVhdmUpOworCitzdGF0aWMgdm9pZCBnYXJwX2dpZF9ldmVudChzdHJ1Y3QgZ2FycF9hcHBsaWNhbnQgKmFwcCwgZW51bSBnYXJwX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDsKKwlzdHJ1Y3QgZ2FycF9hdHRyICphdHRyOworCisJZm9yIChub2RlID0gcmJfZmlyc3QoJmFwcC0+Z2lkKTsKKwkgICAgIG5leHQgPSBub2RlID8gcmJfbmV4dChub2RlKSA6IE5VTEwsIG5vZGUgIT0gTlVMTDsKKwkgICAgIG5vZGUgPSBuZXh0KSB7CisJCWF0dHIgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgZ2FycF9hdHRyLCBub2RlKTsKKwkJZ2FycF9hdHRyX2V2ZW50KGFwcCwgYXR0ciwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQgZ2FycF9qb2luX3RpbWVyX2FybShzdHJ1Y3QgZ2FycF9hcHBsaWNhbnQgKmFwcCkKK3sKKwl1bnNpZ25lZCBsb25nIGRlbGF5OworCisJZGVsYXkgPSAodTY0KW1zZWNzX3RvX2ppZmZpZXMoZ2FycF9qb2luX3RpbWUpICogbmV0X3JhbmRvbSgpID4+IDMyOworCW1vZF90aW1lcigmYXBwLT5qb2luX3RpbWVyLCBqaWZmaWVzICsgZGVsYXkpOworfQorCitzdGF0aWMgdm9pZCBnYXJwX2pvaW5fdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwID0gKHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqKWRhdGE7CisKKwlzcGluX2xvY2soJmFwcC0+bG9jayk7CisJZ2FycF9naWRfZXZlbnQoYXBwLCBHQVJQX0VWRU5UX1RSQU5TTUlUX1BEVSk7CisJZ2FycF9wZHVfcXVldWUoYXBwKTsKKwlzcGluX3VubG9jaygmYXBwLT5sb2NrKTsKKworCWdhcnBfcXVldWVfeG1pdChhcHApOworCWdhcnBfam9pbl90aW1lcl9hcm0oYXBwKTsKK30KKworc3RhdGljIGludCBnYXJwX3BkdV9wYXJzZV9lbmRfbWFyayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZih1OCkpKQorCQlyZXR1cm4gLTE7CisJaWYgKCpza2ItPmRhdGEgPT0gR0FSUF9FTkRfTUFSSykgeworCQlza2JfcHVsbChza2IsIHNpemVvZih1OCkpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdhcnBfcGR1X3BhcnNlX2F0dHIoc3RydWN0IGdhcnBfYXBwbGljYW50ICphcHAsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgdTggYXR0cnR5cGUpCit7CisJY29uc3Qgc3RydWN0IGdhcnBfYXR0cl9oZHIgKmdhOworCXN0cnVjdCBnYXJwX2F0dHIgKmF0dHI7CisJZW51bSBnYXJwX2V2ZW50IGV2ZW50OworCXVuc2lnbmVkIGludCBkbGVuOworCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpnYSkpKQorCQlyZXR1cm4gLTE7CisJZ2EgPSAoc3RydWN0IGdhcnBfYXR0cl9oZHIgKilza2ItPmRhdGE7CisJaWYgKGdhLT5sZW4gPCBzaXplb2YoKmdhKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgZ2EtPmxlbikpCisJCXJldHVybiAtMTsKKwlza2JfcHVsbChza2IsIGdhLT5sZW4pOworCWRsZW4gPSBzaXplb2YoKmdhKSAtIGdhLT5sZW47CisKKwlpZiAoYXR0cnR5cGUgPiBhcHAtPmFwcC0+bWF4YXR0cikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGdhLT5ldmVudCkgeworCWNhc2UgR0FSUF9MRUFWRV9BTEw6CisJCWlmIChkbGVuICE9IDApCisJCQlyZXR1cm4gLTE7CisJCWdhcnBfZ2lkX2V2ZW50KGFwcCwgR0FSUF9FVkVOVF9SX0xFQVZFX0VNUFRZKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBHQVJQX0pPSU5fRU1QVFk6CisJCWV2ZW50ID0gR0FSUF9FVkVOVF9SX0pPSU5fRU1QVFk7CisJCWJyZWFrOworCWNhc2UgR0FSUF9KT0lOX0lOOgorCQlldmVudCA9IEdBUlBfRVZFTlRfUl9KT0lOX0lOOworCQlicmVhazsKKwljYXNlIEdBUlBfTEVBVkVfRU1QVFk6CisJCWV2ZW50ID0gR0FSUF9FVkVOVF9SX0xFQVZFX0VNUFRZOworCQlicmVhazsKKwljYXNlIEdBUlBfRU1QVFk6CisJCWV2ZW50ID0gR0FSUF9FVkVOVF9SX0VNUFRZOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGxlbiA9PSAwKQorCQlyZXR1cm4gLTE7CisJYXR0ciA9IGdhcnBfYXR0cl9sb29rdXAoYXBwLCBnYS0+ZGF0YSwgZGxlbiwgYXR0cnR5cGUpOworCWlmIChhdHRyID09IE5VTEwpCisJCXJldHVybiAwOworCWdhcnBfYXR0cl9ldmVudChhcHAsIGF0dHIsIGV2ZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnYXJwX3BkdV9wYXJzZV9tc2coc3RydWN0IGdhcnBfYXBwbGljYW50ICphcHAsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IGdhcnBfbXNnX2hkciAqZ207CisKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmdtKSkpCisJCXJldHVybiAtMTsKKwlnbSA9IChzdHJ1Y3QgZ2FycF9tc2dfaGRyICopc2tiLT5kYXRhOworCWlmIChnbS0+YXR0cnR5cGUgPT0gMCkKKwkJcmV0dXJuIC0xOworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpnbSkpOworCisJd2hpbGUgKHNrYi0+bGVuID4gMCkgeworCQlpZiAoZ2FycF9wZHVfcGFyc2VfYXR0cihhcHAsIHNrYiwgZ20tPmF0dHJ0eXBlKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChnYXJwX3BkdV9wYXJzZV9lbmRfbWFyayhza2IpIDwgMCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2FycF9wZHVfcmN2KGNvbnN0IHN0cnVjdCBzdHBfcHJvdG8gKnByb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdhcnBfYXBwbGljYXRpb24gKmFwcGwgPSBwcm90by0+ZGF0YTsKKwlzdHJ1Y3QgZ2FycF9wb3J0ICpwb3J0OworCXN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwOworCWNvbnN0IHN0cnVjdCBnYXJwX3BkdV9oZHIgKmdwOworCisJcG9ydCA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmdhcnBfcG9ydCk7CisJaWYgKCFwb3J0KQorCQlnb3RvIGVycjsKKwlhcHAgPSByY3VfZGVyZWZlcmVuY2UocG9ydC0+YXBwbGljYW50c1thcHBsLT50eXBlXSk7CisJaWYgKCFhcHApCisJCWdvdG8gZXJyOworCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpncCkpKQorCQlnb3RvIGVycjsKKwlncCA9IChzdHJ1Y3QgZ2FycF9wZHVfaGRyICopc2tiLT5kYXRhOworCWlmIChnZXRfdW5hbGlnbmVkKCZncC0+cHJvdG9jb2wpICE9IGh0b25zKEdBUlBfUFJPVE9DT0xfSUQpKQorCQlnb3RvIGVycjsKKwlza2JfcHVsbChza2IsIHNpemVvZigqZ3ApKTsKKworCXNwaW5fbG9jaygmYXBwLT5sb2NrKTsKKwl3aGlsZSAoc2tiLT5sZW4gPiAwKSB7CisJCWlmIChnYXJwX3BkdV9wYXJzZV9tc2coYXBwLCBza2IpIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoZ2FycF9wZHVfcGFyc2VfZW5kX21hcmsoc2tiKSA8IDApCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJmFwcC0+bG9jayk7CitlcnI6CisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyBpbnQgZ2FycF9pbml0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ2FycF9wb3J0ICpwb3J0OworCisJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKCpwb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0KQorCQlyZXR1cm4gLUVOT01FTTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LT5nYXJwX3BvcnQsIHBvcnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnYXJwX3JlbGVhc2VfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnYXJwX3BvcnQgKnBvcnQgPSBkZXYtPmdhcnBfcG9ydDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPD0gR0FSUF9BUFBMSUNBVElPTl9NQVg7IGkrKykgeworCQlpZiAocG9ydC0+YXBwbGljYW50c1tpXSkKKwkJCXJldHVybjsKKwl9CisJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+Z2FycF9wb3J0LCBOVUxMKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwlrZnJlZShwb3J0KTsKK30KKworaW50IGdhcnBfaW5pdF9hcHBsaWNhbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGdhcnBfYXBwbGljYXRpb24gKmFwcGwpCit7CisJc3RydWN0IGdhcnBfYXBwbGljYW50ICphcHA7CisJaW50IGVycjsKKworCUFTU0VSVF9SVE5MKCk7CisKKwlpZiAoIWRldi0+Z2FycF9wb3J0KSB7CisJCWVyciA9IGdhcnBfaW5pdF9wb3J0KGRldik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIxOworCX0KKworCWVyciA9IC1FTk9NRU07CisJYXBwID0ga3phbGxvYyhzaXplb2YoKmFwcCksIEdGUF9LRVJORUwpOworCWlmICghYXBwKQorCQlnb3RvIGVycjI7CisKKwllcnIgPSBkZXZfbWNfYWRkKGRldiwgYXBwbC0+cHJvdG8uZ3JvdXBfYWRkcmVzcywgRVRIX0FMRU4sIDApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycjM7CisKKwlhcHAtPmRldiA9IGRldjsKKwlhcHAtPmFwcCA9IGFwcGw7CisJYXBwLT5naWQgPSBSQl9ST09UOworCXNwaW5fbG9ja19pbml0KCZhcHAtPmxvY2spOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFwcC0+cXVldWUpOworCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPmdhcnBfcG9ydC0+YXBwbGljYW50c1thcHBsLT50eXBlXSwgYXBwKTsKKwlzZXR1cF90aW1lcigmYXBwLT5qb2luX3RpbWVyLCBnYXJwX2pvaW5fdGltZXIsICh1bnNpZ25lZCBsb25nKWFwcCk7CisJZ2FycF9qb2luX3RpbWVyX2FybShhcHApOworCXJldHVybiAwOworCitlcnIzOgorCWtmcmVlKGFwcCk7CitlcnIyOgorCWdhcnBfcmVsZWFzZV9wb3J0KGRldik7CitlcnIxOgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnYXJwX2luaXRfYXBwbGljYW50KTsKKwordm9pZCBnYXJwX3VuaW5pdF9hcHBsaWNhbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGdhcnBfYXBwbGljYXRpb24gKmFwcGwpCit7CisJc3RydWN0IGdhcnBfcG9ydCAqcG9ydCA9IGRldi0+Z2FycF9wb3J0OworCXN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwID0gcG9ydC0+YXBwbGljYW50c1thcHBsLT50eXBlXTsKKworCUFTU0VSVF9SVE5MKCk7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIocG9ydC0+YXBwbGljYW50c1thcHBsLT50eXBlXSwgTlVMTCk7CisJc3luY2hyb25pemVfcmN1KCk7CisKKwkvKiBEZWxldGUgdGltZXIgYW5kIGdlbmVyYXRlIGEgZmluYWwgVFJBTlNNSVRfUERVIGV2ZW50IHRvIGZsdXNoIG91dAorCSAqIGFsbCBwZW5kaW5nIG1lc3NhZ2VzIGJlZm9yZSB0aGUgYXBwbGljYW50IGlzIGdvbmUuICovCisJZGVsX3RpbWVyX3N5bmMoJmFwcC0+am9pbl90aW1lcik7CisJZ2FycF9naWRfZXZlbnQoYXBwLCBHQVJQX0VWRU5UX1RSQU5TTUlUX1BEVSk7CisJZ2FycF9wZHVfcXVldWUoYXBwKTsKKwlnYXJwX3F1ZXVlX3htaXQoYXBwKTsKKworCWRldl9tY19kZWxldGUoZGV2LCBhcHBsLT5wcm90by5ncm91cF9hZGRyZXNzLCBFVEhfQUxFTiwgMCk7CisJa2ZyZWUoYXBwKTsKKwlnYXJwX3JlbGVhc2VfcG9ydChkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2FycF91bmluaXRfYXBwbGljYW50KTsKKworaW50IGdhcnBfcmVnaXN0ZXJfYXBwbGljYXRpb24oc3RydWN0IGdhcnBfYXBwbGljYXRpb24gKmFwcGwpCit7CisJYXBwbC0+cHJvdG8ucmN2ID0gZ2FycF9wZHVfcmN2OworCWFwcGwtPnByb3RvLmRhdGEgPSBhcHBsOworCXJldHVybiBzdHBfcHJvdG9fcmVnaXN0ZXIoJmFwcGwtPnByb3RvKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGdhcnBfcmVnaXN0ZXJfYXBwbGljYXRpb24pOworCit2b2lkIGdhcnBfdW5yZWdpc3Rlcl9hcHBsaWNhdGlvbihzdHJ1Y3QgZ2FycF9hcHBsaWNhdGlvbiAqYXBwbCkKK3sKKwlzdHBfcHJvdG9fdW5yZWdpc3RlcigmYXBwbC0+cHJvdG8pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2FycF91bnJlZ2lzdGVyX2FwcGxpY2F0aW9uKTsKZGlmZiAtLWdpdCBhL25ldC84MDIvc3RwLmMgYi9uZXQvODAyL3N0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiN2EyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvODAyL3N0cC5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICoJU1RQIFNBUCBkZW11eAorICoKKyAqCUNvcHlyaWdodCAoYykgMjAwOCBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xsYy5oPgorI2luY2x1ZGUgPG5ldC9sbGMuaD4KKyNpbmNsdWRlIDxuZXQvbGxjX3BkdS5oPgorI2luY2x1ZGUgPG5ldC9zdHAuaD4KKworLyogMDE6ODA6YzI6MDA6MDA6MjAgLSAwMTo4MDpjMjowMDowMDoyRiAqLworI2RlZmluZSBHQVJQX0FERFJfTUlOCTB4MjAKKyNkZWZpbmUgR0FSUF9BRERSX01BWAkweDJGCisjZGVmaW5lIEdBUlBfQUREUl9SQU5HRQkoR0FSUF9BRERSX01BWCAtIEdBUlBfQUREUl9NSU4pCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RwX3Byb3RvICpnYXJwX3Byb3Rvc1tHQVJQX0FERFJfUkFOR0UgKyAxXSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHBfcHJvdG8gKnN0cF9wcm90byBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgc3RydWN0IGxsY19zYXAgKnNhcCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHVuc2lnbmVkIGludCBzYXBfcmVnaXN0ZXJlZDsKK3N0YXRpYyBERUZJTkVfTVVURVgoc3RwX3Byb3RvX211dGV4KTsKKworLyogQ2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2sgZnJvbSBMTEMgKi8KK3N0YXRpYyBpbnQgc3RwX3BkdV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3sKKwljb25zdCBzdHJ1Y3QgZXRoaGRyICplaCA9IGV0aF9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3Qgc3RwX3Byb3RvICpwcm90bzsKKworCWlmIChwZHUtPnNzYXAgIT0gTExDX1NBUF9CU1BBTiB8fAorCSAgICBwZHUtPmRzYXAgIT0gTExDX1NBUF9CU1BBTiB8fAorCSAgICBwZHUtPmN0cmxfMSAhPSBMTENfUERVX1RZUEVfVSkKKwkJZ290byBlcnI7CisKKwlpZiAoZWgtPmhfZGVzdFs1XSA+PSBHQVJQX0FERFJfTUlOICYmIGVoLT5oX2Rlc3RbNV0gPD0gR0FSUF9BRERSX01BWCkgeworCQlwcm90byA9IHJjdV9kZXJlZmVyZW5jZShnYXJwX3Byb3Rvc1tlaC0+aF9kZXN0WzVdIC0KKwkJCQkJCSAgICBHQVJQX0FERFJfTUlOXSk7CisJCWlmIChwcm90byAmJgorCQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKGVoLT5oX2Rlc3QsIHByb3RvLT5ncm91cF9hZGRyZXNzKSkKKwkJCWdvdG8gZXJyOworCX0gZWxzZQorCQlwcm90byA9IHJjdV9kZXJlZmVyZW5jZShzdHBfcHJvdG8pOworCisJaWYgKCFwcm90bykKKwkJZ290byBlcnI7CisKKwlwcm90by0+cmN2KHByb3RvLCBza2IsIGRldik7CisJcmV0dXJuIDA7CisKK2VycjoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHN0cF9wcm90b19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3RwX3Byb3RvICpwcm90bykKK3sKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJnN0cF9wcm90b19tdXRleCk7CisJaWYgKHNhcF9yZWdpc3RlcmVkKysgPT0gMCkgeworCQlzYXAgPSBsbGNfc2FwX29wZW4oTExDX1NBUF9CU1BBTiwgc3RwX3BkdV9yY3YpOworCQlpZiAoIXNhcCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWlmIChpc196ZXJvX2V0aGVyX2FkZHIocHJvdG8tPmdyb3VwX2FkZHJlc3MpKQorCQlyY3VfYXNzaWduX3BvaW50ZXIoc3RwX3Byb3RvLCBwcm90byk7CisJZWxzZQorCQlyY3VfYXNzaWduX3BvaW50ZXIoZ2FycF9wcm90b3NbcHJvdG8tPmdyb3VwX2FkZHJlc3NbNV0gLQorCQkJCQkgICAgICAgR0FSUF9BRERSX01JTl0sIHByb3RvKTsKK291dDoKKwltdXRleF91bmxvY2soJnN0cF9wcm90b19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN0cF9wcm90b19yZWdpc3Rlcik7CisKK3ZvaWQgc3RwX3Byb3RvX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN0cF9wcm90byAqcHJvdG8pCit7CisJbXV0ZXhfbG9jaygmc3RwX3Byb3RvX211dGV4KTsKKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKHByb3RvLT5ncm91cF9hZGRyZXNzKSkKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHN0cF9wcm90bywgTlVMTCk7CisJZWxzZQorCQlyY3VfYXNzaWduX3BvaW50ZXIoZ2FycF9wcm90b3NbcHJvdG8tPmdyb3VwX2FkZHJlc3NbNV0gLQorCQkJCQkgICAgICAgR0FSUF9BRERSX01JTl0sIE5VTEwpOworCXN5bmNocm9uaXplX3JjdSgpOworCisJaWYgKC0tc2FwX3JlZ2lzdGVyZWQgPT0gMCkKKwkJbGxjX3NhcF9wdXQoc2FwKTsKKwltdXRleF91bmxvY2soJnN0cF9wcm90b19tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzdHBfcHJvdG9fdW5yZWdpc3Rlcik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS9LY29uZmlnIGIvbmV0LzgwMjFxL0tjb25maWcKaW5kZXggYzRhMzgyZS4uZmEwNzNhNSAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL0tjb25maWcKKysrIGIvbmV0LzgwMjFxL0tjb25maWcKQEAgLTE3LDMgKzE3LDEzIEBACiAJICB3aWxsIGJlIGNhbGxlZCA4MDIxcS4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFZMQU5fODAyMVFfR1ZSUAorCWJvb2wgIkdWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWTEFOXzgwMjFRCisJc2VsZWN0IEdBUlAKKwloZWxwCisJICBTZWxlY3QgdGhpcyB0byBlbmFibGUgR1ZSUCBlbmQtc3lzdGVtIHN1cHBvcnQuIEdWUlAgaXMgdXNlZCBmb3IKKwkgIGF1dG9tYXRpYyBwcm9wYWdhdGlvbiBvZiByZWdpc3RlcmVkIFZMQU5zIHRvIHN3aXRjaGVzLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL01ha2VmaWxlIGIvbmV0LzgwMjFxL01ha2VmaWxlCmluZGV4IDEwY2E3ZjQuLjlmNGYxNzQgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS9NYWtlZmlsZQorKysgYi9uZXQvODAyMXEvTWFrZWZpbGUKQEAgLTEsMTIgKzEsMTAgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBWTEFOIGxheWVyLgogIworb2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX1ZMQU5fODAyMVEpKQkrPSB2bGFuX2NvcmUubworb2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpCQkrPSA4MDIxcS5vCiAKLW9iai0kKENPTkZJR19WTEFOXzgwMjFRKSArPSA4MDIxcS5vCi0KLTgwMjFxLW9ianMgOj0gdmxhbi5vIHZsYW5fZGV2Lm8gdmxhbl9uZXRsaW5rLm8KLQotaWZlcSAoJChDT05GSUdfUFJPQ19GUykseSkKLTgwMjFxLW9ianMgKz0gdmxhbnByb2MubwotZW5kaWYKKzgwMjFxLXkJCQkJCTo9IHZsYW4ubyB2bGFuX2Rldi5vIHZsYW5fbmV0bGluay5vCis4MDIxcS0kKENPTkZJR19WTEFOXzgwMjFRX0dWUlApCQkrPSB2bGFuX2d2cnAubworODAyMXEtJChDT05GSUdfUFJPQ19GUykJCQkrPSB2bGFucHJvYy5vCiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDA4ZjE0ZjYuLmI2NjFmNDcgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtMTgsMjIgKzE4LDIwIEBACiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4gLyogZm9yIGNvcHlfZnJvbV91c2VyICovCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPG5ldC9kYXRhbGluay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPG5ldC9wODAyMi5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlICJ2bGFuLmgiCkBAIC04NCwxMyArODIsMTIgQEAKICAqCiAgKiBNdXN0IGJlIGludm9rZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIChubyBwcmVlbXB0KQogICovCi1zdHJ1Y3QgbmV0X2RldmljZSAqX19maW5kX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiwKLQkJCQkgICB1bnNpZ25lZCBzaG9ydCBWSUQpCitzdHJ1Y3QgbmV0X2RldmljZSAqX19maW5kX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiwgdTE2IHZsYW5faWQpCiB7CiAJc3RydWN0IHZsYW5fZ3JvdXAgKmdycCA9IF9fdmxhbl9maW5kX2dyb3VwKHJlYWxfZGV2KTsKIAogCWlmIChncnApCi0JCXJldHVybiB2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCBWSUQpOworCQlyZXR1cm4gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGdycCwgdmxhbl9pZCk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTExOCwxNCArMTE1LDE0IEBACiAJcmV0dXJuIGdycDsKIH0KIAotc3RhdGljIGludCB2bGFuX2dyb3VwX3ByZWFsbG9jX3ZpZChzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcsIGludCB2aWQpCitzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywgdTE2IHZsYW5faWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQlhcnJheSA9IHZnLT52bGFuX2RldmljZXNfYXJyYXlzW3ZpZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dOworCWFycmF5ID0gdmctPnZsYW5fZGV2aWNlc19hcnJheXNbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dOwogCWlmIChhcnJheSAhPSBOVUxMKQogCQlyZXR1cm4gMDsKIApAQCAtMTM0LDcgKzEzMSw3IEBACiAJaWYgKGFycmF5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PQlVGUzsKIAotCXZnLT52bGFuX2RldmljZXNfYXJyYXlzW3ZpZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gYXJyYXk7CisJdmctPnZsYW5fZGV2aWNlc19hcnJheXNbdmxhbl9pZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gYXJyYXk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0OCw3ICsxNDUsNyBAQAogCXN0cnVjdCB2bGFuX2Rldl9pbmZvICp2bGFuID0gdmxhbl9kZXZfaW5mbyhkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tPnJlYWxfZGV2OwogCXN0cnVjdCB2bGFuX2dyb3VwICpncnA7Ci0JdW5zaWduZWQgc2hvcnQgdmxhbl9pZCA9IHZsYW4tPnZsYW5faWQ7CisJdTE2IHZsYW5faWQgPSB2bGFuLT52bGFuX2lkOwogCiAJQVNTRVJUX1JUTkwoKTsKIApAQCAtMTY2LDggKzE2MywxMiBAQAogCiAJc3luY2hyb25pemVfbmV0KCk7CiAKKwl1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpOworCiAJLyogSWYgdGhlIGdyb3VwIGlzIG5vdyBlbXB0eSwga2lsbCBvZmYgdGhlIGdyb3VwLiAqLwogCWlmIChncnAtPm5yX3ZsYW5zID09IDApIHsKKwkJdmxhbl9ndnJwX3VuaW5pdF9hcHBsaWNhbnQocmVhbF9kZXYpOworCiAJCWlmIChyZWFsX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCiAJCQlyZWFsX2Rldi0+dmxhbl9yeF9yZWdpc3RlcihyZWFsX2RldiwgTlVMTCk7CiAKQEAgLTE3OSw4ICsxODAsNiBAQAogCiAJLyogR2V0IHJpZCBvZiB0aGUgdmxhbidzIHJlZmVyZW5jZSB0byByZWFsX2RldiAqLwogCWRldl9wdXQocmVhbF9kZXYpOwotCi0JdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgdmxhbl90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIwNCw3ICsyMDMsNyBAQAogCX0KIH0KIAotaW50IHZsYW5fY2hlY2tfcmVhbF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LCB1bnNpZ25lZCBzaG9ydCB2bGFuX2lkKQoraW50IHZsYW5fY2hlY2tfcmVhbF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LCB1MTYgdmxhbl9pZCkKIHsKIAljaGFyICpuYW1lID0gcmVhbF9kZXYtPm5hbWU7CiAKQEAgLTI0MSw3ICsyNDAsNyBAQAogewogCXN0cnVjdCB2bGFuX2Rldl9pbmZvICp2bGFuID0gdmxhbl9kZXZfaW5mbyhkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tPnJlYWxfZGV2OwotCXVuc2lnbmVkIHNob3J0IHZsYW5faWQgPSB2bGFuLT52bGFuX2lkOworCXUxNiB2bGFuX2lkID0gdmxhbi0+dmxhbl9pZDsKIAlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLCAqbmdycCA9IE5VTEw7CiAJaW50IGVycjsKIApAQCAtMjUwLDE1ICsyNDksMTggQEAKIAkJbmdycCA9IGdycCA9IHZsYW5fZ3JvdXBfYWxsb2MocmVhbF9kZXYpOwogCQlpZiAoIWdycCkKIAkJCXJldHVybiAtRU5PQlVGUzsKKwkJZXJyID0gdmxhbl9ndnJwX2luaXRfYXBwbGljYW50KHJlYWxfZGV2KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dF9mcmVlX2dyb3VwOwogCX0KIAogCWVyciA9IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKGdycCwgdmxhbl9pZCk7CiAJaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfZ3JvdXA7CisJCWdvdG8gb3V0X3VuaW5pdF9hcHBsaWNhbnQ7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXRfZnJlZV9ncm91cDsKKwkJZ290byBvdXRfdW5pbml0X2FwcGxpY2FudDsKIAogCS8qIEFjY291bnQgZm9yIHJlZmVyZW5jZSBpbiBzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqLwogCWRldl9ob2xkKHJlYWxfZGV2KTsKQEAgLTI3OSw2ICsyODEsOSBAQAogCiAJcmV0dXJuIDA7CiAKK291dF91bmluaXRfYXBwbGljYW50OgorCWlmIChuZ3JwKQorCQl2bGFuX2d2cnBfdW5pbml0X2FwcGxpY2FudChyZWFsX2Rldik7CiBvdXRfZnJlZV9ncm91cDoKIAlpZiAobmdycCkKIAkJdmxhbl9ncm91cF9mcmVlKG5ncnApOwpAQCAtMjg4LDggKzI5Myw3IEBACiAvKiAgQXR0YWNoIGEgVkxBTiBkZXZpY2UgdG8gYSBtYWMgYWRkcmVzcyAoaWUgRXRoZXJuZXQgQ2FyZCkuCiAgKiAgUmV0dXJucyAwIGlmIHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCByZWdpc3Rlcl92bGFuX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsCi0JCQkJdW5zaWduZWQgc2hvcnQgVkxBTl9JRCkKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfdmxhbl9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LCB1MTYgdmxhbl9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV3X2RldjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHJlYWxfZGV2KTsKQEAgLTI5NywxMCArMzAxLDEwIEBACiAJY2hhciBuYW1lW0lGTkFNU0laXTsKIAlpbnQgZXJyOwogCi0JaWYgKFZMQU5fSUQgPj0gVkxBTl9WSURfTUFTSykKKwlpZiAodmxhbl9pZCA+PSBWTEFOX1ZJRF9NQVNLKQogCQlyZXR1cm4gLUVSQU5HRTsKIAotCWVyciA9IHZsYW5fY2hlY2tfcmVhbF9kZXYocmVhbF9kZXYsIFZMQU5fSUQpOworCWVyciA9IHZsYW5fY2hlY2tfcmVhbF9kZXYocmVhbF9kZXYsIHZsYW5faWQpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zMDgsMjYgKzMxMiwyNiBAQAogCXN3aXRjaCAodm4tPm5hbWVfdHlwZSkgewogCWNhc2UgVkxBTl9OQU1FX1RZUEVfUkFXX1BMVVNfVklEOgogCQkvKiBuYW1lIHdpbGwgbG9vayBsaWtlOgkgZXRoMS4wMDA1ICovCi0JCXNucHJpbnRmKG5hbWUsIElGTkFNU0laLCAiJXMuJS40aSIsIHJlYWxfZGV2LT5uYW1lLCBWTEFOX0lEKTsKKwkJc25wcmludGYobmFtZSwgSUZOQU1TSVosICIlcy4lLjRpIiwgcmVhbF9kZXYtPm5hbWUsIHZsYW5faWQpOwogCQlicmVhazsKIAljYXNlIFZMQU5fTkFNRV9UWVBFX1BMVVNfVklEX05PX1BBRDoKIAkJLyogUHV0IG91ciB2bGFuLlZJRCBpbiB0aGUgbmFtZS4KIAkJICogTmFtZSB3aWxsIGxvb2sgbGlrZToJIHZsYW41CiAJCSAqLwotCQlzbnByaW50ZihuYW1lLCBJRk5BTVNJWiwgInZsYW4laSIsIFZMQU5fSUQpOworCQlzbnByaW50ZihuYW1lLCBJRk5BTVNJWiwgInZsYW4laSIsIHZsYW5faWQpOwogCQlicmVhazsKIAljYXNlIFZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF9OT19QQUQ6CiAJCS8qIFB1dCBvdXIgdmxhbi5WSUQgaW4gdGhlIG5hbWUuCiAJCSAqIE5hbWUgd2lsbCBsb29rIGxpa2U6CSBldGgwLjUKIAkJICovCi0JCXNucHJpbnRmKG5hbWUsIElGTkFNU0laLCAiJXMuJWkiLCByZWFsX2Rldi0+bmFtZSwgVkxBTl9JRCk7CisJCXNucHJpbnRmKG5hbWUsIElGTkFNU0laLCAiJXMuJWkiLCByZWFsX2Rldi0+bmFtZSwgdmxhbl9pZCk7CiAJCWJyZWFrOwogCWNhc2UgVkxBTl9OQU1FX1RZUEVfUExVU19WSUQ6CiAJCS8qIFB1dCBvdXIgdmxhbi5WSUQgaW4gdGhlIG5hbWUuCiAJCSAqIE5hbWUgd2lsbCBsb29rIGxpa2U6CSB2bGFuMDAwNQogCQkgKi8KIAlkZWZhdWx0OgotCQlzbnByaW50ZihuYW1lLCBJRk5BTVNJWiwgInZsYW4lLjRpIiwgVkxBTl9JRCk7CisJCXNucHJpbnRmKG5hbWUsIElGTkFNU0laLCAidmxhbiUuNGkiLCB2bGFuX2lkKTsKIAl9CiAKIAluZXdfZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyksIG5hbWUsCkBAIC0zNDIsNyArMzQ2LDcgQEAKIAkgKi8KIAluZXdfZGV2LT5tdHUgPSByZWFsX2Rldi0+bXR1OwogCi0Jdmxhbl9kZXZfaW5mbyhuZXdfZGV2KS0+dmxhbl9pZCA9IFZMQU5fSUQ7IC8qIDEgdGhyb3VnaCBWTEFOX1ZJRF9NQVNLICovCisJdmxhbl9kZXZfaW5mbyhuZXdfZGV2KS0+dmxhbl9pZCA9IHZsYW5faWQ7CiAJdmxhbl9kZXZfaW5mbyhuZXdfZGV2KS0+cmVhbF9kZXYgPSByZWFsX2RldjsKIAl2bGFuX2Rldl9pbmZvKG5ld19kZXYpLT5kZW50ID0gTlVMTDsKIAl2bGFuX2Rldl9pbmZvKG5ld19kZXYpLT5mbGFncyA9IFZMQU5fRkxBR19SRU9SREVSX0hEUjsKQEAgLTUzNiw3ICs1NDAsNiBAQAogc3RhdGljIGludCB2bGFuX2lvY3RsX2hhbmRsZXIoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqYXJnKQogewogCWludCBlcnI7Ci0JdW5zaWduZWQgc2hvcnQgdmlkID0gMDsKIAlzdHJ1Y3Qgdmxhbl9pb2N0bF9hcmdzIGFyZ3M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAKQEAgLTU2Myw4ICs1NjYsNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJZXJyID0gLUVJTlZBTDsKLQkJaWYgKGFyZ3MuY21kICE9IEFERF9WTEFOX0NNRCAmJgotCQkgICAgIShkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pKQorCQlpZiAoYXJncy5jbWQgIT0gQUREX1ZMQU5fQ01EICYmICFpc192bGFuX2RldihkZXYpKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC01OTIsOSArNTk0LDkgQEAKIAkJZXJyID0gLUVQRVJNOwogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlicmVhazsKLQkJZXJyID0gdmxhbl9kZXZfc2V0X3ZsYW5fZmxhZyhkZXYsCi0JCQkJCSAgICAgYXJncy51LmZsYWcsCi0JCQkJCSAgICAgYXJncy52bGFuX3Fvcyk7CisJCWVyciA9IHZsYW5fZGV2X2NoYW5nZV9mbGFncyhkZXYsCisJCQkJCSAgICBhcmdzLnZsYW5fcW9zID8gYXJncy51LmZsYWcgOiAwLAorCQkJCQkgICAgYXJncy51LmZsYWcpOwogCQlicmVhazsKIAogCWNhc2UgU0VUX1ZMQU5fTkFNRV9UWVBFX0NNRDoKQEAgLTYzOCw4ICs2NDAsNyBAQAogCiAJY2FzZSBHRVRfVkxBTl9WSURfQ01EOgogCQllcnIgPSAwOwotCQl2bGFuX2Rldl9nZXRfdmlkKGRldiwgJnZpZCk7Ci0JCWFyZ3MudS5WSUQgPSB2aWQ7CisJCWFyZ3MudS5WSUQgPSB2bGFuX2Rldl92bGFuX2lkKGRldik7CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYXJncywKIAkJCQkgc2l6ZW9mKHN0cnVjdCB2bGFuX2lvY3RsX2FyZ3MpKSkKIAkJICAgICAgZXJyID0gLUVGQVVMVDsKQEAgLTcxNCwxNCArNzE1LDIwIEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyMjsKIAotCWVyciA9IHZsYW5fbmV0bGlua19pbml0KCk7CisJZXJyID0gdmxhbl9ndnJwX2luaXQoKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnIzOwogCisJZXJyID0gdmxhbl9uZXRsaW5rX2luaXQoKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnI0OworCiAJZGV2X2FkZF9wYWNrKCZ2bGFuX3BhY2tldF90eXBlKTsKIAl2bGFuX2lvY3RsX3NldCh2bGFuX2lvY3RsX2hhbmRsZXIpOwogCXJldHVybiAwOwogCitlcnI0OgorCXZsYW5fZ3ZycF91bmluaXQoKTsKIGVycjM6CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnZsYW5fbm90aWZpZXJfYmxvY2spOwogZXJyMjoKQEAgLTc0Niw4ICs3NTMsOSBAQAogCQlCVUdfT04oIWhsaXN0X2VtcHR5KCZ2bGFuX2dyb3VwX2hhc2hbaV0pKTsKIAogCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2Uodmxhbl9uZXRfaWQsICZ2bGFuX25ldF9vcHMpOwotCiAJc3luY2hyb25pemVfbmV0KCk7CisKKwl2bGFuX2d2cnBfdW5pbml0KCk7CiB9CiAKIG1vZHVsZV9pbml0KHZsYW5fcHJvdG9faW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaAppbmRleCA1MjI5YTcyLi5hNjYwM2E0IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCisrKyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTMsNiArMyw1NSBAQAogCiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogCisKKy8qKgorICoJc3RydWN0IHZsYW5fcHJpb3JpdHlfdGNpX21hcHBpbmcgLSB2bGFuIGVncmVzcyBwcmlvcml0eSBtYXBwaW5ncworICoJQHByaW9yaXR5OiBza2IgcHJpb3JpdHkKKyAqCUB2bGFuX3FvczogdmxhbiBwcmlvcml0eTogKHNrYi0+cHJpb3JpdHkgPDwgMTMpICYgMHhFMDAwCisgKglAbmV4dDogcG9pbnRlciB0byBuZXh0IHN0cnVjdAorICovCitzdHJ1Y3Qgdmxhbl9wcmlvcml0eV90Y2lfbWFwcGluZyB7CisJdTMyCQkJCQlwcmlvcml0eTsKKwl1MTYJCQkJCXZsYW5fcW9zOworCXN0cnVjdCB2bGFuX3ByaW9yaXR5X3RjaV9tYXBwaW5nCSpuZXh0OworfTsKKworLyoqCisgKglzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAtIFZMQU4gcHJpdmF0ZSBkZXZpY2UgZGF0YQorICoJQG5yX2luZ3Jlc3NfbWFwcGluZ3M6IG51bWJlciBvZiBpbmdyZXNzIHByaW9yaXR5IG1hcHBpbmdzCisgKglAaW5ncmVzc19wcmlvcml0eV9tYXA6IGluZ3Jlc3MgcHJpb3JpdHkgbWFwcGluZ3MKKyAqCUBucl9lZ3Jlc3NfbWFwcGluZ3M6IG51bWJlciBvZiBlZ3Jlc3MgcHJpb3JpdHkgbWFwcGluZ3MKKyAqCUBlZ3Jlc3NfcHJpb3JpdHlfbWFwOiBoYXNoIG9mIGVncmVzcyBwcmlvcml0eSBtYXBwaW5ncworICoJQHZsYW5faWQ6IFZMQU4gaWRlbnRpZmllcgorICoJQGZsYWdzOiBkZXZpY2UgZmxhZ3MKKyAqCUByZWFsX2RldjogdW5kZXJseWluZyBuZXRkZXZpY2UKKyAqCUByZWFsX2Rldl9hZGRyOiBhZGRyZXNzIG9mIHVuZGVybHlpbmcgbmV0ZGV2aWNlCisgKglAZGVudDogcHJvYyBkaXIgZW50cnkKKyAqCUBjbnRfaW5jX2hlYWRyb29tX29uX3R4OiBzdGF0aXN0aWMgLSBudW1iZXIgb2Ygc2tiIGV4cGFuc2lvbnMgb24gVFgKKyAqCUBjbnRfZW5jYXBfb25feG1pdDogc3RhdGlzdGljIC0gbnVtYmVyIG9mIHNrYiBlbmNhcHN1bGF0aW9ucyBvbiBUWAorICovCitzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyB7CisJdW5zaWduZWQgaW50CQkJCW5yX2luZ3Jlc3NfbWFwcGluZ3M7CisJdTMyCQkJCQlpbmdyZXNzX3ByaW9yaXR5X21hcFs4XTsKKwl1bnNpZ25lZCBpbnQJCQkJbnJfZWdyZXNzX21hcHBpbmdzOworCXN0cnVjdCB2bGFuX3ByaW9yaXR5X3RjaV9tYXBwaW5nCSplZ3Jlc3NfcHJpb3JpdHlfbWFwWzE2XTsKKworCXUxNgkJCQkJdmxhbl9pZDsKKwl1MTYJCQkJCWZsYWdzOworCisJc3RydWN0IG5ldF9kZXZpY2UJCQkqcmVhbF9kZXY7CisJdW5zaWduZWQgY2hhcgkJCQlyZWFsX2Rldl9hZGRyW0VUSF9BTEVOXTsKKworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkJCSpkZW50OworCXVuc2lnbmVkIGxvbmcJCQkJY250X2luY19oZWFkcm9vbV9vbl90eDsKKwl1bnNpZ25lZCBsb25nCQkJCWNudF9lbmNhcF9vbl94bWl0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbl9kZXZfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBuZXRkZXZfcHJpdihkZXYpOworfQorCiAjZGVmaW5lIFZMQU5fR1JQX0hBU0hfU0hJRlQJNQogI2RlZmluZSBWTEFOX0dSUF9IQVNIX1NJWkUJKDEgPDwgVkxBTl9HUlBfSEFTSF9TSElGVCkKICNkZWZpbmUgVkxBTl9HUlBfSEFTSF9NQVNLCShWTEFOX0dSUF9IQVNIX1NJWkUgLSAxKQpAQCAtMTgsMjYgKzY3LDQ3IEBACiAgKiAgTXVzdCBiZSBpbnZva2VkIHdpdGggcmN1X3JlYWRfbG9jayAoaWUgcHJlZW1wdCBkaXNhYmxlZCkKICAqICBvciB3aXRoIFJUTkwuCiAgKi8KLXN0cnVjdCBuZXRfZGV2aWNlICpfX2ZpbmRfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LAotCQkJCSAgIHVuc2lnbmVkIHNob3J0IFZJRCk7IC8qIHZsYW4uYyAqLworc3RydWN0IG5ldF9kZXZpY2UgKl9fZmluZF92bGFuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsIHUxNiB2bGFuX2lkKTsKIAogLyogZm91bmQgaW4gdmxhbl9kZXYuYyAqLwogaW50IHZsYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogdm9pZCB2bGFuX2Rldl9zZXRfaW5ncmVzc19wcmlvcml0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHUzMiBza2JfcHJpbywgc2hvcnQgdmxhbl9wcmlvKTsKKwkJCQkgICB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pOwogaW50IHZsYW5fZGV2X3NldF9lZ3Jlc3NfcHJpb3JpdHkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgdTMyIHNrYl9wcmlvLCBzaG9ydCB2bGFuX3ByaW8pOwotaW50IHZsYW5fZGV2X3NldF92bGFuX2ZsYWcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgIHUzMiBmbGFnLCBzaG9ydCBmbGFnX3ZhbCk7CisJCQkJIHUzMiBza2JfcHJpbywgdTE2IHZsYW5fcHJpbyk7CitpbnQgdmxhbl9kZXZfY2hhbmdlX2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmbGFnLCB1MzIgbWFzayk7CiB2b2lkIHZsYW5fZGV2X2dldF9yZWFsZGV2X25hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqcmVzdWx0KTsKLXZvaWQgdmxhbl9kZXZfZ2V0X3ZpZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCAqcmVzdWx0KTsKIAotaW50IHZsYW5fY2hlY2tfcmVhbF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LCB1bnNpZ25lZCBzaG9ydCB2bGFuX2lkKTsKK2ludCB2bGFuX2NoZWNrX3JlYWxfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiwgdTE2IHZsYW5faWQpOwogdm9pZCB2bGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IHJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCB1bnJlZ2lzdGVyX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCitzdGF0aWMgaW5saW5lIHUzMiB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICB1MTYgdmxhbl90Y2kpCit7CisJc3RydWN0IHZsYW5fZGV2X2luZm8gKnZpcCA9IHZsYW5fZGV2X2luZm8oZGV2KTsKKworCXJldHVybiB2aXAtPmluZ3Jlc3NfcHJpb3JpdHlfbWFwWyh2bGFuX3RjaSA+PiAxMykgJiAweDddOworfQorCisjaWZkZWYgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUAorZXh0ZXJuIGludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHZsYW5fZ3ZycF9pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHZsYW5fZ3ZycF91bmluaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCB2bGFuX2d2cnBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHZsYW5fZ3ZycF91bmluaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgdmxhbl9ndnJwX3JlcXVlc3Rfam9pbihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgaW50IHZsYW5fZ3ZycF9pbml0X2FwcGxpY2FudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9ndnJwX3VuaW5pdF9hcHBsaWNhbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgaW50IHZsYW5fZ3ZycF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2d2cnBfdW5pbml0KHZvaWQpIHt9CisjZW5kaWYKKwogaW50IHZsYW5fbmV0bGlua19pbml0KHZvaWQpOwogdm9pZCB2bGFuX25ldGxpbmtfZmluaSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjA2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTAsMCArMSw2NCBAQAorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlICJ2bGFuLmgiCisKKy8qIFZMQU4gcnggaHcgYWNjZWxlcmF0aW9uIGhlbHBlci4gIFRoaXMgYWN0cyBsaWtlIG5ldGlmX3tyeCxyZWNlaXZlX3NrYn0oKS4gKi8KK2ludCBfX3ZsYW5faHdhY2NlbF9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLAorCQkgICAgICB1MTYgdmxhbl90Y2ksIGludCBwb2xsaW5nKQoreworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKKworCWlmIChza2JfYm9uZF9zaG91bGRfZHJvcChza2IpKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiBORVRfUlhfRFJPUDsKKwl9CisKKwlza2ItPnZsYW5fdGNpID0gdmxhbl90Y2k7CisJbmV0aWZfbml0X2RlbGl2ZXIoc2tiKTsKKworCXNrYi0+ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGdycCwgdmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLKTsKKwlpZiAoc2tiLT5kZXYgPT0gTlVMTCkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkvKiBOb3QgTkVUX1JYX0RST1AsIHRoaXMgaXMgbm90IGJlaW5nIGRyb3BwZWQKKwkJICogZHVlIHRvIGNvbmdlc3Rpb24uICovCisJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKKwl9CisJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCXNrYi0+dmxhbl90Y2kgPSAwOworCisJc3RhdHMgPSAmc2tiLT5kZXYtPnN0YXRzOworCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCisJc2tiLT5wcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkoc2tiLT5kZXYsIHZsYW5fdGNpKTsKKwlzd2l0Y2ggKHNrYi0+cGt0X3R5cGUpIHsKKwljYXNlIFBBQ0tFVF9CUk9BRENBU1Q6CisJCWJyZWFrOworCWNhc2UgUEFDS0VUX01VTFRJQ0FTVDoKKwkJc3RhdHMtPm11bHRpY2FzdCsrOworCQlicmVhazsKKwljYXNlIFBBQ0tFVF9PVEhFUkhPU1Q6CisJCS8qIE91ciBsb3dlciBsYXllciB0aGlua3MgdGhpcyBpcyBub3QgbG9jYWwsIGxldCdzIG1ha2Ugc3VyZS4KKwkJICogVGhpcyBhbGxvd3MgdGhlIFZMQU4gdG8gaGF2ZSBhIGRpZmZlcmVudCBNQUMgdGhhbiB0aGUKKwkJICogdW5kZXJseWluZyBkZXZpY2UsIGFuZCBzdGlsbCByb3V0ZSBjb3JyZWN0bHkuICovCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0+aF9kZXN0LAorCQkJCQlza2ItPmRldi0+ZGV2X2FkZHIpKQorCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCQlicmVhazsKKwl9OworCXJldHVybiAocG9sbGluZyA/IG5ldGlmX3JlY2VpdmVfc2tiKHNrYikgOiBuZXRpZl9yeChza2IpKTsKK30KK0VYUE9SVF9TWU1CT0woX192bGFuX2h3YWNjZWxfcngpOworCitzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXZfcmVhbF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZsYW5fZGV2X3JlYWxfZGV2KTsKKwordTE2IHZsYW5fZGV2X3ZsYW5faWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX2lkOworfQorRVhQT1JUX1NZTUJPTF9HUEwodmxhbl9kZXZfdmxhbl9pZCk7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IDVkMDU1YzIuLjRiZjAxNGUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC0yMSwyMSArMjEsMTUgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPiAvKiBmb3IgY29weV9mcm9tX3VzZXIgKi8KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPG5ldC9kYXRhbGluay5oPgotI2luY2x1ZGUgPG5ldC9wODAyMi5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAKICNpbmNsdWRlICJ2bGFuLmgiCiAjaW5jbHVkZSAidmxhbnByb2MuaCIKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+Ci0jaW5jbHVkZSA8bmV0L2lwLmg+CiAKIC8qCiAgKglSZWJ1aWxkIHRoZSBFdGhlcm5ldCBNQUMgaGVhZGVyLiBUaGlzIGlzIGNhbGxlZCBhZnRlciBhbiBBUlAKQEAgLTczLDExICs2Nyw4IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2NoZWNrX3Jlb3JkZXJfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKHZsYW5fZGV2X2luZm8oc2tiLT5kZXYpLT5mbGFncyAmIFZMQU5fRkxBR19SRU9SREVSX0hEUikgewotCQlpZiAoc2tiX3NoYXJlZChza2IpIHx8IHNrYl9jbG9uZWQoc2tiKSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlza2IgPSBuc2tiOwotCQl9CisJCWlmIChza2JfY293KHNrYiwgc2tiX2hlYWRyb29tKHNrYikpIDwgMCkKKwkJCXNrYiA9IE5VTEw7CiAJCWlmIChza2IpIHsKIAkJCS8qIExpZnRlZCBmcm9tIEdsZWIncyBWTEFOIGNvZGUuLi4gKi8KIAkJCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sCkBAIC0xNDksOSArMTQwLDkgQEAKIAkJICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CiAJc3RydWN0IHZsYW5faGRyICp2aGRyOwotCXVuc2lnbmVkIHNob3J0IHZpZDsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7Ci0JdW5zaWduZWQgc2hvcnQgdmxhbl9UQ0k7CisJdTE2IHZsYW5faWQ7CisJdTE2IHZsYW5fdGNpOwogCiAJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQpAQCAtMTYxLDE0ICsxNTIsMTQgQEAKIAkJZ290byBlcnJfZnJlZTsKIAogCXZoZHIgPSAoc3RydWN0IHZsYW5faGRyICopc2tiLT5kYXRhOwotCXZsYW5fVENJID0gbnRvaHModmhkci0+aF92bGFuX1RDSSk7Ci0JdmlkID0gKHZsYW5fVENJICYgVkxBTl9WSURfTUFTSyk7CisJdmxhbl90Y2kgPSBudG9ocyh2aGRyLT5oX3ZsYW5fVENJKTsKKwl2bGFuX2lkID0gdmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXNrYi0+ZGV2ID0gX19maW5kX3ZsYW5fZGV2KGRldiwgdmlkKTsKKwlza2ItPmRldiA9IF9fZmluZF92bGFuX2RldihkZXYsIHZsYW5faWQpOwogCWlmICghc2tiLT5kZXYpIHsKIAkJcHJfZGVidWcoIiVzOiBFUlJPUjogTm8gbmV0X2RldmljZSBmb3IgVklEOiAldSBvbiBkZXY6ICVzXG4iLAotCQkJIF9fZnVuY19fLCAodW5zaWduZWQgaW50KXZpZCwgZGV2LT5uYW1lKTsKKwkJCSBfX2Z1bmNfXywgdmxhbl9pZCwgZGV2LT5uYW1lKTsKIAkJZ290byBlcnJfdW5sb2NrOwogCX0KIApAQCAtMTgwLDExICsxNzEsMTAgQEAKIAogCXNrYl9wdWxsX3Jjc3VtKHNrYiwgVkxBTl9ITEVOKTsKIAotCXNrYi0+cHJpb3JpdHkgPSB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHNrYi0+ZGV2LAotCQkJCQkJICBudG9ocyh2aGRyLT5oX3ZsYW5fVENJKSk7CisJc2tiLT5wcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkoc2tiLT5kZXYsIHZsYW5fdGNpKTsKIAogCXByX2RlYnVnKCIlczogcHJpb3JpdHk6ICV1IGZvciBUQ0k6ICVodVxuIiwKLQkJIF9fZnVuY19fLCBza2ItPnByaW9yaXR5LCBudG9ocyh2aGRyLT5oX3ZsYW5fVENJKSk7CisJCSBfX2Z1bmNfXywgc2tiLT5wcmlvcml0eSwgdmxhbl90Y2kpOwogCiAJc3dpdGNoIChza2ItPnBrdF90eXBlKSB7CiAJY2FzZSBQQUNLRVRfQlJPQURDQVNUOiAvKiBZZWFoLCBzdGF0cyBjb2xsZWN0IHRoZXNlIHRvZ2V0aGVyLi4gKi8KQEAgLTIyNyw3ICsyMTcsNyBAQAogCXJldHVybiBORVRfUlhfRFJPUDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydAorc3RhdGljIGlubGluZSB1MTYKIHZsYW5fZGV2X2dldF9lZ3Jlc3NfcW9zX21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgdmxhbl9wcmlvcml0eV90Y2lfbWFwcGluZyAqbXA7CkBAIC0yNTksMTAzICsyNDksNDQgQEAKIAkJCQl1bnNpZ25lZCBpbnQgbGVuKQogewogCXN0cnVjdCB2bGFuX2hkciAqdmhkcjsKLQl1bnNpZ25lZCBzaG9ydCB2ZXRoX1RDSSA9IDA7Ci0JaW50IHJjID0gMDsKLQlpbnQgYnVpbGRfdmxhbl9oZWFkZXIgPSAwOwotCXN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2ID0gZGV2OworCXVuc2lnbmVkIGludCB2aGRybGVuID0gMDsKKwl1MTYgdmxhbl90Y2kgPSAwOworCWludCByYzsKIAotCXByX2RlYnVnKCIlczogc2tiOiAlcCB0eXBlOiAlaHggbGVuOiAldSB2bGFuX2lkOiAlaHgsIGRhZGRyOiAlcFxuIiwKLQkJIF9fZnVuY19fLCBza2IsIHR5cGUsIGxlbiwgdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX2lkLAotCQkgZGFkZHIpOworCWlmIChXQVJOX09OKHNrYl9oZWFkcm9vbShza2IpIDwgZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQorCQlyZXR1cm4gLUVOT1NQQzsKIAotCS8qIGJ1aWxkIHZsYW4gaGVhZGVyIG9ubHkgaWYgcmVfb3JkZXJfaGVhZGVyIGZsYWcgaXMgTk9UIHNldC4gIFRoaXMKLQkgKiBmaXhlcyBzb21lIHByb2dyYW1zIHRoYXQgZ2V0IGNvbmZ1c2VkIHdoZW4gdGhleSBzZWUgYSBWTEFOIGRldmljZQotCSAqIHNlbmRpbmcgYSBmcmFtZSB0aGF0IGlzIFZMQU4gZW5jb2RlZCAodGhlIGNvbnNlbnN1cyBpcyB0aGF0IHRoZSBWTEFOCi0JICogZGV2aWNlIHNob3VsZCBsb29rIGNvbXBsZXRlbHkgbGlrZSBhbiBFdGhlcm5ldCBkZXZpY2Ugd2hlbiB0aGUKLQkgKiBSRU9SREVSX0hFQURFUiBmbGFnIGlzIHNldCkJVGhlIGRyYXdiYWNrIHRvIHRoaXMgaXMgc29tZSBleHRyYQotCSAqIGhlYWRlciBzaHVmZmxpbmcgaW4gdGhlIGhhcmRfc3RhcnRfeG1pdC4gIFVzZXJzIGNhbiB0dXJuIG9mZiB0aGlzCi0JICogUkVPUkRFUiBiZWhhdmlvdXIgd2l0aCB0aGUgdmNvbmZpZyB0b29sLgotCSAqLwotCWlmICghKHZsYW5fZGV2X2luZm8oZGV2KS0+ZmxhZ3MgJiBWTEFOX0ZMQUdfUkVPUkRFUl9IRFIpKQotCQlidWlsZF92bGFuX2hlYWRlciA9IDE7Ci0KLQlpZiAoYnVpbGRfdmxhbl9oZWFkZXIpIHsKKwlpZiAoISh2bGFuX2Rldl9pbmZvKGRldiktPmZsYWdzICYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSkgewogCQl2aGRyID0gKHN0cnVjdCB2bGFuX2hkciAqKSBza2JfcHVzaChza2IsIFZMQU5fSExFTik7CiAKLQkJLyogYnVpbGQgdGhlIGZvdXIgYnl0ZXMgdGhhdCBtYWtlIHRoaXMgYSBWTEFOIGhlYWRlci4gKi8KLQotCQkvKiBOb3csIGNvbnN0cnVjdCB0aGUgc2Vjb25kIHR3byBieXRlcy4gVGhpcyBmaWVsZCBsb29rcwotCQkgKiBzb21ldGhpbmcgbGlrZToKLQkJICogdXNyX3ByaW9yaXR5OiAzIGJpdHMJIChoaWdoIGJpdHMpCi0JCSAqIENGSQkJIDEgYml0Ci0JCSAqIFZMQU4gSUQJIDEyIGJpdHMgKGxvdyBiaXRzKQotCQkgKgotCQkgKi8KLQkJdmV0aF9UQ0kgPSB2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5faWQ7Ci0JCXZldGhfVENJIHw9IHZsYW5fZGV2X2dldF9lZ3Jlc3NfcW9zX21hc2soZGV2LCBza2IpOwotCi0JCXZoZHItPmhfdmxhbl9UQ0kgPSBodG9ucyh2ZXRoX1RDSSk7CisJCXZsYW5fdGNpID0gdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX2lkOworCQl2bGFuX3RjaSB8PSB2bGFuX2Rldl9nZXRfZWdyZXNzX3Fvc19tYXNrKGRldiwgc2tiKTsKKwkJdmhkci0+aF92bGFuX1RDSSA9IGh0b25zKHZsYW5fdGNpKTsKIAogCQkvKgogCQkgKiAgU2V0IHRoZSBwcm90b2NvbCB0eXBlLiBGb3IgYSBwYWNrZXQgb2YgdHlwZSBFVEhfUF84MDJfMyB3ZQogCQkgKiAgcHV0IHRoZSBsZW5ndGggaW4gaGVyZSBpbnN0ZWFkLiBJdCBpcyB1cCB0byB0aGUgODAyLjIKIAkJICogIGxheWVyIHRvIGNhcnJ5IHByb3RvY29sIGluZm9ybWF0aW9uLgogCQkgKi8KLQogCQlpZiAodHlwZSAhPSBFVEhfUF84MDJfMykKIAkJCXZoZHItPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBodG9ucyh0eXBlKTsKIAkJZWxzZQogCQkJdmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IGh0b25zKGxlbik7CiAKIAkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMjFRKTsKLQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJCXR5cGUgPSBFVEhfUF84MDIxUTsKKwkJdmhkcmxlbiA9IFZMQU5fSExFTjsKIAl9CiAKIAkvKiBCZWZvcmUgZGVsZWdhdGluZyB3b3JrIHRvIHRoZSBsb3dlciBsYXllciwgZW50ZXIgb3VyIE1BQy1hZGRyZXNzICovCiAJaWYgKHNhZGRyID09IE5VTEwpCiAJCXNhZGRyID0gZGV2LT5kZXZfYWRkcjsKIAorCS8qIE5vdyBtYWtlIHRoZSB1bmRlcmx5aW5nIHJlYWwgaGFyZCBoZWFkZXIgKi8KIAlkZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OwotCi0JLyogTVBMUyBjYW4gc2VuZCB1cyBza2J1ZmZzIHcvb3V0IGVub3VnaCBzcGFjZS4JVGhpcyBjaGVjayB3aWxsIGdyb3cKLQkgKiB0aGUgc2tiIGlmIGl0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaGVhZHJvb20uIE5vdCBhIGJlYXV0aWZ1bCBzb2x1dGlvbiwKLQkgKiBzbyBJJ2xsIHRpY2sgYSBjb3VudGVyIHNvIHRoYXQgdXNlcnMgY2FuIGtub3cgaXQncyBoYXBwZW5pbmcuLi4KLQkgKiBJZiB0aGV5IGNhcmUuLi4KLQkgKi8KLQotCS8qIE5PVEU6IFRoaXMgbWF5IHN0aWxsIGJyZWFrIGlmIHRoZSB1bmRlcmx5aW5nIGRldmljZSBpcyBub3QgdGhlIGZpbmFsCi0JICogZGV2aWNlIChhbmQgdGh1cyB0aGVyZSBhcmUgbW9yZSBoZWFkZXJzIHRvIGFkZC4uLikgSXQgc2hvdWxkIHdvcmsgZm9yCi0JICogZ29vZC1vbGUtZXRoZXJuZXQgdGhvdWdoLgotCSAqLwotCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IGRldi0+aGFyZF9oZWFkZXJfbGVuKSB7Ci0JCXN0cnVjdCBza19idWZmICpza190bXAgPSBza2I7Ci0JCXNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrX3RtcCwgZGV2LT5oYXJkX2hlYWRlcl9sZW4pOwotCQlrZnJlZV9za2Ioc2tfdG1wKTsKLQkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdmRldi0+c3RhdHM7Ci0JCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJdmxhbl9kZXZfaW5mbyh2ZGV2KS0+Y250X2luY19oZWFkcm9vbV9vbl90eCsrOwotCQlwcl9kZWJ1ZygiJXM6ICVzOiBoYWQgdG8gZ3JvdyBza2JcbiIsIF9fZnVuY19fLCB2ZGV2LT5uYW1lKTsKLQl9Ci0KLQlpZiAoYnVpbGRfdmxhbl9oZWFkZXIpIHsKLQkJLyogTm93IG1ha2UgdGhlIHVuZGVybHlpbmcgcmVhbCBoYXJkIGhlYWRlciAqLwotCQlyYyA9IGRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfODAyMVEsIGRhZGRyLCBzYWRkciwKLQkJCQkgICAgIGxlbiArIFZMQU5fSExFTik7Ci0JCWlmIChyYyA+IDApCi0JCQlyYyArPSBWTEFOX0hMRU47Ci0JCWVsc2UgaWYgKHJjIDwgMCkKLQkJCXJjIC09IFZMQU5fSExFTjsKLQl9IGVsc2UKLQkJLyogSWYgaGVyZSwgdGhlbiB3ZSdsbCBqdXN0IG1ha2UgYSBub3JtYWwgbG9va2luZyBldGhlcm5ldAotCQkgKiBmcmFtZSwgYnV0LCB0aGUgaGFyZF9zdGFydF94bWl0IG1ldGhvZCB3aWxsIGluc2VydCB0aGUgdGFnCi0JCSAqIChpdCBoYXMgdG8gYmUgYWJsZSB0byBkbyB0aGlzIGZvciBicmlkZ2VkIGFuZCBvdGhlciBza2JzCi0JCSAqIHRoYXQgZG9uJ3QgY29tZSBkb3duIHRoZSBwcm90b2NvbCBzdGFjayBpbiBhbiBvcmRlcmx5IG1hbm5lci4KLQkJICovCi0JCXJjID0gZGV2X2hhcmRfaGVhZGVyKHNrYiwgZGV2LCB0eXBlLCBkYWRkciwgc2FkZHIsIGxlbik7Ci0KKwlyYyA9IGRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgdHlwZSwgZGFkZHIsIHNhZGRyLCBsZW4gKyB2aGRybGVuKTsKKwlpZiAocmMgPiAwKQorCQlyYyArPSB2aGRybGVuOwogCXJldHVybiByYzsKIH0KIApAQCAtMzY5LDc4ICszMDAsNDkgQEAKIAkgKiBOT1RFOiBUSElTIEFTU1VNRVMgRElYIEVUSEVSTkVULCBTUEVDSUZJQ0FMTFkgTk9UIFNVUFBPUlRJTkcKIAkgKiBPVEhFUiBUSElOR1MgTElLRSBGRERJL1Rva2VuUmluZy84MDIuMyBTTkFQcy4uLgogCSAqLwotCiAJaWYgKHZldGgtPmhfdmxhbl9wcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkgfHwKLQkJdmxhbl9kZXZfaW5mbyhkZXYpLT5mbGFncyAmIFZMQU5fRkxBR19SRU9SREVSX0hEUikgewotCQlpbnQgb3JpZ19oZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpOwotCQl1bnNpZ25lZCBzaG9ydCB2ZXRoX1RDSTsKKwkgICAgdmxhbl9kZXZfaW5mbyhkZXYpLT5mbGFncyAmIFZMQU5fRkxBR19SRU9SREVSX0hEUikgeworCQl1bnNpZ25lZCBpbnQgb3JpZ19oZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpOworCQl1MTYgdmxhbl90Y2k7CiAKLQkJLyogVGhpcyBpcyBub3QgYSBWTEFOIGZyYW1lLi4uYnV0IHdlIGNhbiBmaXggdGhhdCEgKi8KIAkJdmxhbl9kZXZfaW5mbyhkZXYpLT5jbnRfZW5jYXBfb25feG1pdCsrOwogCi0JCXByX2RlYnVnKCIlczogcHJvdG8gdG8gZW5jYXA6IDB4JWh4XG4iLAotCQkJIF9fZnVuY19fLCBudG9ocyh2ZXRoLT5oX3ZsYW5fcHJvdG8pKTsKLQkJLyogQ29uc3RydWN0IHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiBUaGlzIGZpZWxkIGxvb2tzIHNvbWV0aGluZwotCQkgKiBsaWtlOgotCQkgKiB1c3JfcHJpb3JpdHk6IDMgYml0cwkgKGhpZ2ggYml0cykKLQkJICogQ0ZJCQkgMSBiaXQKLQkJICogVkxBTiBJRAkgMTIgYml0cyAobG93IGJpdHMpCi0JCSAqLwotCQl2ZXRoX1RDSSA9IHZsYW5fZGV2X2luZm8oZGV2KS0+dmxhbl9pZDsKLQkJdmV0aF9UQ0kgfD0gdmxhbl9kZXZfZ2V0X2VncmVzc19xb3NfbWFzayhkZXYsIHNrYik7Ci0KLQkJc2tiID0gX192bGFuX3B1dF90YWcoc2tiLCB2ZXRoX1RDSSk7CisJCXZsYW5fdGNpID0gdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX2lkOworCQl2bGFuX3RjaSB8PSB2bGFuX2Rldl9nZXRfZWdyZXNzX3Fvc19tYXNrKGRldiwgc2tiKTsKKwkJc2tiID0gX192bGFuX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAJCWlmICghc2tiKSB7CiAJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAKIAkJaWYgKG9yaWdfaGVhZHJvb20gPCBWTEFOX0hMRU4pCiAJCQl2bGFuX2Rldl9pbmZvKGRldiktPmNudF9pbmNfaGVhZHJvb21fb25fdHgrKzsKIAl9CiAKLQlwcl9kZWJ1ZygiJXM6IGFib3V0IHRvIHNlbmQgc2tiOiAlcCB0byBkZXY6ICVzXG4iLAotCQlfX2Z1bmNfXywgc2tiLCBza2ItPmRldi0+bmFtZSk7Ci0JcHJfZGVidWcoIiAgIiBNQUNfRk1UICIgIiBNQUNfRk1UICIgJTRoeCAlNGh4ICU0aHhcbiIsCi0JCSB2ZXRoLT5oX2Rlc3RbMF0sIHZldGgtPmhfZGVzdFsxXSwgdmV0aC0+aF9kZXN0WzJdLAotCQkgdmV0aC0+aF9kZXN0WzNdLCB2ZXRoLT5oX2Rlc3RbNF0sIHZldGgtPmhfZGVzdFs1XSwKLQkJIHZldGgtPmhfc291cmNlWzBdLCB2ZXRoLT5oX3NvdXJjZVsxXSwgdmV0aC0+aF9zb3VyY2VbMl0sCi0JCSB2ZXRoLT5oX3NvdXJjZVszXSwgdmV0aC0+aF9zb3VyY2VbNF0sIHZldGgtPmhfc291cmNlWzVdLAotCQkgdmV0aC0+aF92bGFuX3Byb3RvLCB2ZXRoLT5oX3ZsYW5fVENJLAotCQkgdmV0aC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byk7Ci0KLQlzdGF0cy0+dHhfcGFja2V0cysrOyAvKiBmb3Igc3RhdGljcyBvbmx5ICovCisJc3RhdHMtPnR4X3BhY2tldHMrKzsKIAlzdGF0cy0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlza2ItPmRldiA9IHZsYW5fZGV2X2luZm8oZGV2KS0+cmVhbF9kZXY7CiAJZGV2X3F1ZXVlX3htaXQoc2tiKTsKLQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgdmxhbl9kZXZfaHdhY2NlbF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7Ci0JdW5zaWduZWQgc2hvcnQgdmV0aF9UQ0k7CisJdTE2IHZsYW5fdGNpOwogCi0JLyogQ29uc3RydWN0IHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiBUaGlzIGZpZWxkIGxvb2tzIHNvbWV0aGluZwotCSAqIGxpa2U6Ci0JICogdXNyX3ByaW9yaXR5OiAzIGJpdHMJIChoaWdoIGJpdHMpCi0JICogQ0ZJCQkgMSBiaXQKLQkgKiBWTEFOIElECSAxMiBiaXRzIChsb3cgYml0cykKLQkgKi8KLQl2ZXRoX1RDSSA9IHZsYW5fZGV2X2luZm8oZGV2KS0+dmxhbl9pZDsKLQl2ZXRoX1RDSSB8PSB2bGFuX2Rldl9nZXRfZWdyZXNzX3Fvc19tYXNrKGRldiwgc2tiKTsKLQlza2IgPSBfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmV0aF9UQ0kpOworCXZsYW5fdGNpID0gdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX2lkOworCXZsYW5fdGNpIHw9IHZsYW5fZGV2X2dldF9lZ3Jlc3NfcW9zX21hc2soZGV2LCBza2IpOworCXNrYiA9IF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAKIAlzdGF0cy0+dHhfcGFja2V0cysrOwogCXN0YXRzLT50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCXNrYi0+ZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKIAlkZXZfcXVldWVfeG1pdChza2IpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCB2bGFuX2Rldl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQpAQCAtNDU3LDcgKzM1OSw3IEBACiB9CiAKIHZvaWQgdmxhbl9kZXZfc2V0X2luZ3Jlc3NfcHJpb3JpdHkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICB1MzIgc2tiX3ByaW8sIHNob3J0IHZsYW5fcHJpbykKKwkJCQkgICB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pCiB7CiAJc3RydWN0IHZsYW5fZGV2X2luZm8gKnZsYW4gPSB2bGFuX2Rldl9pbmZvKGRldik7CiAKQEAgLTQ3MCw3ICszNzIsNyBAQAogfQogCiBpbnQgdmxhbl9kZXZfc2V0X2VncmVzc19wcmlvcml0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSB1MzIgc2tiX3ByaW8sIHNob3J0IHZsYW5fcHJpbykKKwkJCQkgdTMyIHNrYl9wcmlvLCB1MTYgdmxhbl9wcmlvKQogewogCXN0cnVjdCB2bGFuX2Rldl9pbmZvICp2bGFuID0gdmxhbl9kZXZfaW5mbyhkZXYpOwogCXN0cnVjdCB2bGFuX3ByaW9yaXR5X3RjaV9tYXBwaW5nICptcCA9IE5VTEw7CkBAIC01MDcsMTggKzQwOSwyMyBAQAogfQogCiAvKiBGbGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgdmxhbl9mbGFncyBlbnVtIGluIGluY2x1ZGUvbGludXgvaWZfdmxhbi5oIGZpbGUuICovCi1pbnQgdmxhbl9kZXZfc2V0X3ZsYW5fZmxhZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgdTMyIGZsYWcsIHNob3J0IGZsYWdfdmFsKQoraW50IHZsYW5fZGV2X2NoYW5nZV9mbGFncyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmxhZ3MsIHUzMiBtYXNrKQogewotCS8qIHZlcmlmeSBmbGFnIGlzIHN1cHBvcnRlZCAqLwotCWlmIChmbGFnID09IFZMQU5fRkxBR19SRU9SREVSX0hEUikgewotCQlpZiAoZmxhZ192YWwpCi0JCQl2bGFuX2Rldl9pbmZvKGRldiktPmZsYWdzIHw9IFZMQU5fRkxBR19SRU9SREVSX0hEUjsKKwlzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKKwl1MzIgb2xkX2ZsYWdzID0gdmxhbi0+ZmxhZ3M7CisKKwlpZiAobWFzayAmIH4oVkxBTl9GTEFHX1JFT1JERVJfSERSIHwgVkxBTl9GTEFHX0dWUlApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZsYW4tPmZsYWdzID0gKG9sZF9mbGFncyAmIH5tYXNrKSB8IChmbGFncyAmIG1hc2spOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSAmJiAodmxhbi0+ZmxhZ3MgXiBvbGRfZmxhZ3MpICYgVkxBTl9GTEFHX0dWUlApIHsKKwkJaWYgKHZsYW4tPmZsYWdzICYgVkxBTl9GTEFHX0dWUlApCisJCQl2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGRldik7CiAJCWVsc2UKLQkJCXZsYW5fZGV2X2luZm8oZGV2KS0+ZmxhZ3MgJj0gflZMQU5fRkxBR19SRU9SREVSX0hEUjsKLQkJcmV0dXJuIDA7CisJCQl2bGFuX2d2cnBfcmVxdWVzdF9sZWF2ZShkZXYpOwogCX0KLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCB2bGFuX2Rldl9nZXRfcmVhbGRldl9uYW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKnJlc3VsdCkKQEAgLTUyNiwxMSArNDMzLDYgQEAKIAlzdHJuY3B5KHJlc3VsdCwgdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2Rldi0+bmFtZSwgMjMpOwogfQogCi12b2lkIHZsYW5fZGV2X2dldF92aWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgKnJlc3VsdCkKLXsKLQkqcmVzdWx0ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX2lkOwotfQotCiBzdGF0aWMgaW50IHZsYW5fZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKQEAgLTU0MywyMSArNDQ1LDQ0IEBACiAJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyLCByZWFsX2Rldi0+ZGV2X2FkZHIpKSB7CiAJCWVyciA9IGRldl91bmljYXN0X2FkZChyZWFsX2RldiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIG91dDsKIAl9CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQllcnIgPSBkZXZfc2V0X2FsbG11bHRpKHJlYWxfZGV2LCAxKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGRlbF91bmljYXN0OworCX0KKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCWVyciA9IGRldl9zZXRfcHJvbWlzY3VpdHkocmVhbF9kZXYsIDEpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gY2xlYXJfYWxsbXVsdGk7CisJfQorCiAJbWVtY3B5KHZsYW4tPnJlYWxfZGV2X2FkZHIsIHJlYWxfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCi0JCWRldl9zZXRfYWxsbXVsdGkocmVhbF9kZXYsIDEpOwotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCWRldl9zZXRfcHJvbWlzY3VpdHkocmVhbF9kZXYsIDEpOworCWlmICh2bGFuLT5mbGFncyAmIFZMQU5fRkxBR19HVlJQKQorCQl2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGRldik7CiAKIAlyZXR1cm4gMDsKKworY2xlYXJfYWxsbXVsdGk6CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCWRldl9zZXRfYWxsbXVsdGkocmVhbF9kZXYsIC0xKTsKK2RlbF91bmljYXN0OgorCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkciwgcmVhbF9kZXYtPmRldl9hZGRyKSkKKwkJZGV2X3VuaWNhc3RfZGVsZXRlKHJlYWxfZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCB2bGFuX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKKwlzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLT5yZWFsX2RldjsKKworCWlmICh2bGFuLT5mbGFncyAmIFZMQU5fRkxBR19HVlJQKQorCQl2bGFuX2d2cnBfcmVxdWVzdF9sZWF2ZShkZXYpOwogCiAJZGV2X21jX3Vuc3luYyhyZWFsX2RldiwgZGV2KTsKIAlkZXZfdW5pY2FzdF91bnN5bmMocmVhbF9kZXYsIGRldik7CkBAIC02NDQsNiArNTY5LDI0IEBACiAgKiBzZXBhcmF0ZSBjbGFzcyBzaW5jZSB0aGV5IGFsd2F5cyBuZXN0LgogICovCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHZsYW5fbmV0ZGV2X3htaXRfbG9ja19rZXk7CitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHZsYW5fbmV0ZGV2X2FkZHJfbG9ja19rZXk7CisKK3N0YXRpYyB2b2lkIHZsYW5fZGV2X3NldF9sb2NrZGVwX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLAorCQkJCSAgICAgdm9pZCAqX3N1YmNsYXNzKQoreworCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9zdWJjbGFzcygmdHhxLT5feG1pdF9sb2NrLAorCQkJCSAgICAgICAmdmxhbl9uZXRkZXZfeG1pdF9sb2NrX2tleSwKKwkJCQkgICAgICAgKihpbnQgKilfc3ViY2xhc3MpOworfQorCitzdGF0aWMgdm9pZCB2bGFuX2Rldl9zZXRfbG9ja2RlcF9jbGFzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3ViY2xhc3MpCit7CisJbG9ja2RlcF9zZXRfY2xhc3NfYW5kX3N1YmNsYXNzKCZkZXYtPmFkZHJfbGlzdF9sb2NrLAorCQkJCSAgICAgICAmdmxhbl9uZXRkZXZfYWRkcl9sb2NrX2tleSwKKwkJCQkgICAgICAgc3ViY2xhc3MpOworCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIHZsYW5fZGV2X3NldF9sb2NrZGVwX29uZSwgJnN1YmNsYXNzKTsKK30KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIHZsYW5faGVhZGVyX29wcyA9IHsKIAkuY3JlYXRlCSA9IHZsYW5fZGV2X2hhcmRfaGVhZGVyLApAQCAtNjgzLDExICs2MjYsMTAgQEAKIAkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2bGFuX2Rldl9oYXJkX3N0YXJ0X3htaXQ7CiAJfQogCi0JaWYgKHJlYWxfZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKQorCWlmIChpc192bGFuX2RldihyZWFsX2RldikpCiAJCXN1YmNsYXNzID0gMTsKIAotCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9zdWJjbGFzcygmZGV2LT5feG1pdF9sb2NrLAotCQkJCSZ2bGFuX25ldGRldl94bWl0X2xvY2tfa2V5LCBzdWJjbGFzcyk7CisJdmxhbl9kZXZfc2V0X2xvY2tkZXBfY2xhc3MoZGV2LCBzdWJjbGFzcyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcwNSw2ICs2NDcsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyB1MzIgdmxhbl9ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IHZsYW5fZGV2X2luZm8gKnZsYW4gPSB2bGFuX2Rldl9pbmZvKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbi0+cmVhbF9kZXY7CisKKwlpZiAocmVhbF9kZXYtPmV0aHRvb2xfb3BzID09IE5VTEwgfHwKKwkgICAgcmVhbF9kZXYtPmV0aHRvb2xfb3BzLT5nZXRfcnhfY3N1bSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVhbF9kZXYtPmV0aHRvb2xfb3BzLT5nZXRfcnhfY3N1bShyZWFsX2Rldik7Cit9CisKK3N0YXRpYyB1MzIgdmxhbl9ldGh0b29sX2dldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCB2bGFuX2Rldl9pbmZvICp2bGFuID0gdmxhbl9kZXZfaW5mbyhkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tPnJlYWxfZGV2OworCisJaWYgKCEocmVhbF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKSB8fAorCSAgICByZWFsX2Rldi0+ZXRodG9vbF9vcHMgPT0gTlVMTCB8fAorCSAgICByZWFsX2Rldi0+ZXRodG9vbF9vcHMtPmdldF9mbGFncyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVhbF9kZXYtPmV0aHRvb2xfb3BzLT5nZXRfZmxhZ3MocmVhbF9kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZsYW5fZXRodG9vbF9vcHMgPSB7CisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9yeF9jc3VtCQk9IHZsYW5fZXRodG9vbF9nZXRfcnhfY3N1bSwKKwkuZ2V0X2ZsYWdzCQk9IHZsYW5fZXRodG9vbF9nZXRfZmxhZ3MsCit9OworCiB2b2lkIHZsYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cChkZXYpOwpAQCAtNzIzLDYgKzY5NCw3IEBACiAJZGV2LT5jaGFuZ2VfcnhfZmxhZ3MJPSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3M7CiAJZGV2LT5kb19pb2N0bAkJPSB2bGFuX2Rldl9pb2N0bDsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CisJZGV2LT5ldGh0b29sX29wcwk9ICZ2bGFuX2V0aHRvb2xfb3BzOwogCiAJbWVtc2V0KGRldi0+YnJvYWRjYXN0LCAwLCBFVEhfQUxFTik7CiB9CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9ndnJwLmMgYi9uZXQvODAyMXEvdmxhbl9ndnJwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxY2VjZQotLS0gL2Rldi9udWxsCisrKyBiL25ldC84MDIxcS92bGFuX2d2cnAuYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogCUlFRUUgODAyLjFRIEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wgKEdWUlApCisgKgorICogCUNvcHlyaWdodCAoYykgMjAwOCBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bmV0L2dhcnAuaD4KKyNpbmNsdWRlICJ2bGFuLmgiCisKKyNkZWZpbmUgR0FSUF9HVlJQX0FERFJFU1MJeyAweDAxLCAweDgwLCAweGMyLCAweDAwLCAweDAwLCAweDIxIH0KKworZW51bSBndnJwX2F0dHJpYnV0ZXMgeworCUdWUlBfQVRUUl9JTlZBTElELAorCUdWUlBfQVRUUl9WSUQsCisJX19HVlJQX0FUVFJfTUFYCit9OworI2RlZmluZSBHVlJQX0FUVFJfTUFYCShfX0dWUlBfQVRUUl9NQVggLSAxKQorCitzdGF0aWMgc3RydWN0IGdhcnBfYXBwbGljYXRpb24gdmxhbl9ndnJwX2FwcCBfX3JlYWRfbW9zdGx5ID0geworCS5wcm90by5ncm91cF9hZGRyZXNzCT0gR0FSUF9HVlJQX0FERFJFU1MsCisJLm1heGF0dHIJCT0gR1ZSUF9BVFRSX01BWCwKKwkudHlwZQkJCT0gR0FSUF9BUFBMSUNBVElPTl9HVlJQLAorfTsKKworaW50IHZsYW5fZ3ZycF9yZXF1ZXN0X2pvaW4oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKKwlfX2JlMTYgdmxhbl9pZCA9IGh0b25zKHZsYW4tPnZsYW5faWQpOworCisJcmV0dXJuIGdhcnBfcmVxdWVzdF9qb2luKHZsYW4tPnJlYWxfZGV2LCAmdmxhbl9ndnJwX2FwcCwKKwkJCQkgJnZsYW5faWQsIHNpemVvZih2bGFuX2lkKSwgR1ZSUF9BVFRSX1ZJRCk7Cit9CisKK3ZvaWQgdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKKwlfX2JlMTYgdmxhbl9pZCA9IGh0b25zKHZsYW4tPnZsYW5faWQpOworCisJZ2FycF9yZXF1ZXN0X2xlYXZlKHZsYW4tPnJlYWxfZGV2LCAmdmxhbl9ndnJwX2FwcCwKKwkJCSAgICZ2bGFuX2lkLCBzaXplb2Yodmxhbl9pZCksIEdWUlBfQVRUUl9WSUQpOworfQorCitpbnQgdmxhbl9ndnJwX2luaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGdhcnBfaW5pdF9hcHBsaWNhbnQoZGV2LCAmdmxhbl9ndnJwX2FwcCk7Cit9CisKK3ZvaWQgdmxhbl9ndnJwX3VuaW5pdF9hcHBsaWNhbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlnYXJwX3VuaW5pdF9hcHBsaWNhbnQoZGV2LCAmdmxhbl9ndnJwX2FwcCk7Cit9CisKK2ludCBfX2luaXQgdmxhbl9ndnJwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZ2FycF9yZWdpc3Rlcl9hcHBsaWNhdGlvbigmdmxhbl9ndnJwX2FwcCk7Cit9CisKK3ZvaWQgdmxhbl9ndnJwX3VuaW5pdCh2b2lkKQoreworCWdhcnBfdW5yZWdpc3Rlcl9hcHBsaWNhdGlvbigmdmxhbl9ndnJwX2FwcCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMgYi9uZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMKaW5kZXggYzkzZTY5ZS4uZTljOTFkYyAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jCisrKyBiL25ldC84MDIxcS92bGFuX25ldGxpbmsuYwpAQCAtNTksNyArNTksOCBAQAogCX0KIAlpZiAoZGF0YVtJRkxBX1ZMQU5fRkxBR1NdKSB7CiAJCWZsYWdzID0gbmxhX2RhdGEoZGF0YVtJRkxBX1ZMQU5fRkxBR1NdKTsKLQkJaWYgKChmbGFncy0+ZmxhZ3MgJiBmbGFncy0+bWFzaykgJiB+VkxBTl9GTEFHX1JFT1JERVJfSERSKQorCQlpZiAoKGZsYWdzLT5mbGFncyAmIGZsYWdzLT5tYXNrKSAmCisJCSAgICB+KFZMQU5fRkxBR19SRU9SREVSX0hEUiB8IFZMQU5fRkxBR19HVlJQKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzUsNyArNzYsNiBAQAogc3RhdGljIGludCB2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKIHsKLQlzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKIAlzdHJ1Y3QgaWZsYV92bGFuX2ZsYWdzICpmbGFnczsKIAlzdHJ1Y3QgaWZsYV92bGFuX3Fvc19tYXBwaW5nICptOwogCXN0cnVjdCBubGF0dHIgKmF0dHI7CkBAIC04Myw4ICs4Myw3IEBACiAKIAlpZiAoZGF0YVtJRkxBX1ZMQU5fRkxBR1NdKSB7CiAJCWZsYWdzID0gbmxhX2RhdGEoZGF0YVtJRkxBX1ZMQU5fRkxBR1NdKTsKLQkJdmxhbi0+ZmxhZ3MgPSAodmxhbi0+ZmxhZ3MgJiB+ZmxhZ3MtPm1hc2spIHwKLQkJCSAgICAgIChmbGFncy0+ZmxhZ3MgJiBmbGFncy0+bWFzayk7CisJCXZsYW5fZGV2X2NoYW5nZV9mbGFncyhkZXYsIGZsYWdzLT5mbGFncywgZmxhZ3MtPm1hc2spOwogCX0KIAlpZiAoZGF0YVtJRkxBX1ZMQU5fSU5HUkVTU19RT1NdKSB7CiAJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgZGF0YVtJRkxBX1ZMQU5fSU5HUkVTU19RT1NdLCByZW0pIHsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFucHJvYy5jIGIvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKaW5kZXggMDhiNTRiNS4uMGZlZWZhNCAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKQEAgLTE4LDE2ICsxOCw5IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyoga21hbGxvYygpLCBrZnJlZSgpICovCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbSosIHN0ciogZnVuY3Rpb25zICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogX19pbml0ZnVuYyBldCBhbC4gKi8KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5X3RvX3VzZXIgKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMjkwLDcgKzI4Myw3IEBACiAJc3RhdGljIGNvbnN0IGNoYXIgZm10W10gPSAiJTMwcyAlMTJsdVxuIjsKIAlpbnQgaTsKIAotCWlmICghKHZsYW5kZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pKQorCWlmICghaXNfdmxhbl9kZXYodmxhbmRldikpCiAJCXJldHVybiAwOwogCiAJc2VxX3ByaW50ZihzZXEsCmRpZmYgLS1naXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnCmluZGV4IGFjYmY3YzYwLi5iOTg2Njg3IDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtMTgxLDYgKzE4MSw3IEBACiBzb3VyY2UgIm5ldC9zY3RwL0tjb25maWciCiBzb3VyY2UgIm5ldC90aXBjL0tjb25maWciCiBzb3VyY2UgIm5ldC9hdG0vS2NvbmZpZyIKK3NvdXJjZSAibmV0LzgwMi9LY29uZmlnIgogc291cmNlICJuZXQvYnJpZGdlL0tjb25maWciCiBzb3VyY2UgIm5ldC84MDIxcS9LY29uZmlnIgogc291cmNlICJuZXQvZGVjbmV0L0tjb25maWciCmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGUKaW5kZXggYjdhMTM2NC4uNGY0M2U3ZiAxMDA2NDQKLS0tIGEvbmV0L01ha2VmaWxlCisrKyBiL25ldC9NYWtlZmlsZQpAQCAtNDIsNyArNDIsOSBAQAogb2JqLSQoQ09ORklHX0FUTSkJCSs9IGF0bS8KIG9iai0kKENPTkZJR19ERUNORVQpCQkrPSBkZWNuZXQvCiBvYmotJChDT05GSUdfRUNPTkVUKQkJKz0gZWNvbmV0Lwotb2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpCSs9IDgwMjFxLworaWZuZXEgKCQoQ09ORklHX1ZMQU5fODAyMVEpLCkKK29iai15CQkJCSs9IDgwMjFxLworZW5kaWYKIG9iai0kKENPTkZJR19JUF9EQ0NQKQkJKz0gZGNjcC8KIG9iai0kKENPTkZJR19JUF9TQ1RQKQkJKz0gc2N0cC8KIG9iai15CQkJCSs9IHdpcmVsZXNzLwpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9hYXJwLmMgYi9uZXQvYXBwbGV0YWxrL2FhcnAuYwppbmRleCAyNWFhMzdjLi5iMjVjMWU5IDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2FhcnAuYworKysgYi9uZXQvYXBwbGV0YWxrL2FhcnAuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAlpbnQgY3Q7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChldmVudCA9PSBORVRERVZfRE9XTikgewpAQCAtNzE2LDcgKzcxNiw3IEBACiAJc3RydWN0IGF0YWxrX2FkZHIgc2EsICptYSwgZGE7CiAJc3RydWN0IGF0YWxrX2lmYWNlICppZmE7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCWdvdG8gb3V0MDsKIAogCS8qIFdlIG9ubHkgZG8gRXRoZXJuZXQgU05BUCBBQVJQLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9kZHAuYyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKaW5kZXggNDRjZDQyZi4uMDdiNWI4MiAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9kZHAuYworKysgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgPT0gTkVUREVWX0RPV04pCkBAIC0xNDA1LDcgKzE0MDUsNyBAQAogCWludCBvcmlnbGVuOwogCV9fdTE2IGxlbl9ob3BzOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlnb3RvIGZyZWVpdDsKIAogCS8qIERvbid0IG1hbmdsZSBidWZmZXIgaWYgc2hhcmVkICovCkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogc3RhdGljIGludCBsdGFsa19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlnb3RvIGZyZWVpdDsKIAogCS8qIEV4cGFuZCBhbnkgc2hvcnQgZm9ybSBmcmFtZXMgKi8KZGlmZiAtLWdpdCBhL25ldC9hdG0vYWRkci5jIGIvbmV0L2F0bS9hZGRyLmMKaW5kZXggNmFmYTc3ZC4uODJlODVhYiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9hZGRyLmMKKysrIGIvbmV0L2F0bS9hZGRyLmMKQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSAic2lnbmFsaW5nLmgiCiAjaW5jbHVkZSAiYWRkci5oIgogCi1zdGF0aWMgaW50IGNoZWNrX2FkZHIoc3RydWN0IHNvY2thZGRyX2F0bXN2YyAqYWRkcikKK3N0YXRpYyBpbnQgY2hlY2tfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICphZGRyKQogewogCWludCBpOwogCkBAIC0yMyw3ICsyMyw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgaWRlbnRpY2FsKHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmEsIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmIpCitzdGF0aWMgaW50IGlkZW50aWNhbChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICphLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICpiKQogewogCWlmICgqYS0+c2FzX2FkZHIucHJ2KQogCQlpZiAobWVtY21wKGEtPnNhc19hZGRyLnBydiwgYi0+c2FzX2FkZHIucHJ2LCBBVE1fRVNBX0xFTikpCkBAIC0zNSw3ICszNSw3IEBACiAJcmV0dXJuICFzdHJjbXAoYS0+c2FzX2FkZHIucHViLCBiLT5zYXNfYWRkci5wdWIpOwogfQogCi1zdGF0aWMgdm9pZCBub3RpZnlfc2lnZChzdHJ1Y3QgYXRtX2RldiAqZGV2KQorc3RhdGljIHZvaWQgbm90aWZ5X3NpZ2QoY29uc3Qgc3RydWN0IGF0bV9kZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjIHB2YzsKIApAQCAtNjMsNyArNjMsNyBAQAogCQlub3RpZnlfc2lnZChkZXYpOwogfQogCi1pbnQgYXRtX2FkZF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIsCitpbnQgYXRtX2FkZF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIsCiAJCSBlbnVtIGF0bV9hZGRyX3R5cGVfdCBhdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtOTgsNyArOTgsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYXRtX2RlbF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIsCitpbnQgYXRtX2RlbF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIsCiAJCSBlbnVtIGF0bV9hZGRyX3R5cGVfdCBhdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9hZGRyLmggYi9uZXQvYXRtL2FkZHIuaAppbmRleCBmMzk0MzNhLi42ODM3ZTllIDEwMDY0NAotLS0gYS9uZXQvYXRtL2FkZHIuaAorKysgYi9uZXQvYXRtL2FkZHIuaApAQCAtMTAsOSArMTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgogCiB2b2lkIGF0bV9yZXNldF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGVudW0gYXRtX2FkZHJfdHlwZV90IHR5cGUpOwotaW50IGF0bV9hZGRfYWRkcihzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICphZGRyLAoraW50IGF0bV9hZGRfYWRkcihzdHJ1Y3QgYXRtX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICphZGRyLAogCQkgZW51bSBhdG1fYWRkcl90eXBlX3QgdHlwZSk7Ci1pbnQgYXRtX2RlbF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIsCitpbnQgYXRtX2RlbF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIsCiAJCSBlbnVtIGF0bV9hZGRyX3R5cGVfdCB0eXBlKTsKIGludCBhdG1fZ2V0X2FkZHIoc3RydWN0IGF0bV9kZXYgKmRldiwgc3RydWN0IHNvY2thZGRyX2F0bXN2YyBfX3VzZXIgKmJ1ZiwKIAkJIHNpemVfdCBzaXplLCBlbnVtIGF0bV9hZGRyX3R5cGVfdCB0eXBlKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vYnIyNjg0LmMgYi9uZXQvYXRtL2JyMjY4NC5jCmluZGV4IDA1ZmFmZGMuLjhkOWE2ZjEgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vYnIyNjg0LmMKKysrIGIvbmV0L2F0bS9icjI2ODQuYwpAQCAtNTIsMTIgKzUyLDEyIEBACiAjZGVmaW5lIEVUSEVSVFlQRV9JUFY2CTB4ODYsIDB4ZGQKICNkZWZpbmUgUEFEX0JSSURHRUQJMHgwMCwgMHgwMAogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBldGhlcnR5cGVfaXB2NFtdID0geyBFVEhFUlRZUEVfSVBWNCB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgZXRoZXJ0eXBlX2lwdjZbXSA9IHsgRVRIRVJUWVBFX0lQVjYgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxsY19vdWlfcGlkX3BhZFtdID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGV0aGVydHlwZV9pcHY0W10gPSB7IEVUSEVSVFlQRV9JUFY0IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBldGhlcnR5cGVfaXB2NltdID0geyBFVEhFUlRZUEVfSVBWNiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbGxjX291aV9waWRfcGFkW10gPQogCQkJeyBMTEMsIFNOQVBfQlJJREdFRCwgUElEX0VUSEVSTkVULCBQQURfQlJJREdFRCB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgbGxjX291aV9pcHY0W10gPSB7IExMQywgU05BUF9ST1VURUQsIEVUSEVSVFlQRV9JUFY0IH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBsbGNfb3VpX2lwdjZbXSA9IHsgTExDLCBTTkFQX1JPVVRFRCwgRVRIRVJUWVBFX0lQVjYgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGxsY19vdWlfaXB2NFtdID0geyBMTEMsIFNOQVBfUk9VVEVELCBFVEhFUlRZUEVfSVBWNCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbGxjX291aV9pcHY2W10gPSB7IExMQywgU05BUF9ST1VURUQsIEVUSEVSVFlQRV9JUFY2IH07CiAKIGVudW0gYnIyNjg0X2VuY2FwcyB7CiAJZV92YyA9IEJSMjY4NF9FTkNBUFNfVkMsCkBAIC0yMTcsOCArMjE3LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgYnIyNjg0X3ZjYyAqcGlja19vdXRnb2luZ192Y2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCSAgIHN0cnVjdCBicjI2ODRfZGV2ICpicmRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJyMjY4NF92Y2MgKnBpY2tfb3V0Z29pbmdfdmNjKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYpCiB7CiAJcmV0dXJuIGxpc3RfZW1wdHkoJmJyZGV2LT5icnZjY3MpID8gTlVMTCA6IGxpc3RfZW50cnlfYnJ2Y2MoYnJkZXYtPmJydmNjcy5uZXh0KTsJLyogMSB2Y2MvZGV2IHJpZ2h0IG5vdyAqLwogfQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jbGlwLmMgYi9uZXQvYXRtL2NsaXAuYwppbmRleCA2ZjgyMjNlLi41YjViOTYzIDEwMDY0NAotLS0gYS9uZXQvYXRtL2NsaXAuYworKysgYi9uZXQvYXRtL2NsaXAuYwpAQCAtNjEyLDcgKzYxMiw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFyZzsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGV2ZW50ID09IE5FVERFVl9VTlJFR0lTVEVSKSB7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NvbW1vbi5jIGIvbmV0L2F0bS9jb21tb24uYwppbmRleCBjODY1NTE3Li5kMzRlZGJlIDEwMDY0NAotLS0gYS9uZXQvYXRtL2NvbW1vbi5jCisrKyBiL25ldC9hdG0vY29tbW9uLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgY2hlY2tfY2koc3RydWN0IGF0bV92Y2MgKnZjYywgc2hvcnQgdnBpLCBpbnQgdmNpKQorc3RhdGljIGludCBjaGVja19jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCB2cGksIGludCB2Y2kpCiB7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmdmNjX2hhc2hbdmNpICYKIAkJCQkJKFZDQ19IVEFCTEVfU0laRSAtIDEpXTsKQEAgLTI5MCw3ICsyOTAsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgZmluZF9jaShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSkKK3N0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSkKIHsKIAlzdGF0aWMgc2hvcnQgcDsgICAgICAgIC8qIHBvb3IgbWFuJ3MgcGVyLWRldmljZSBjYWNoZSAqLwogCXN0YXRpYyBpbnQgYzsKQEAgLTY0Niw3ICs2NDYsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgY2hlY2tfdHAoc3RydWN0IGF0bV90cmFmcHJtICp0cCkKK3N0YXRpYyBpbnQgY2hlY2tfdHAoY29uc3Qgc3RydWN0IGF0bV90cmFmcHJtICp0cCkKIHsKIAkvKiBAQEAgU2hvdWxkIGJlIG1lcmdlZCB3aXRoIGFkanVzdF90cCAqLwogCWlmICghdHAtPnRyYWZmaWNfY2xhc3MgfHwgdHAtPnRyYWZmaWNfY2xhc3MgPT0gQVRNX0FOWUNMQVNTKSByZXR1cm4gMDsKQEAgLTY2Myw3ICs2NjMsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgY2hlY2tfcW9zKHN0cnVjdCBhdG1fcW9zICpxb3MpCitzdGF0aWMgaW50IGNoZWNrX3Fvcyhjb25zdCBzdHJ1Y3QgYXRtX3FvcyAqcW9zKQogewogCWludCBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvbmV0L2F0bS9sZWMuYyBiL25ldC9hdG0vbGVjLmMKaW5kZXggNjUzYWNhMy4uNTc5OWZiNSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9sZWMuYworKysgYi9uZXQvYXRtL2xlYy5jCkBAIC02NSwzNiArNjUsMzYgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGVjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGxlY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBsZWNfYXJwX3RhYmxlICpsZWNfYXJwX2ZpbmQoc3RydWN0IGxlY19wcml2ICpwcml2LAotCQkJCQkgIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKTsKKwkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICptYWNfYWRkcik7CiBzdGF0aWMgaW50IGxlY19hcnBfcmVtb3ZlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKIAkJCSAgc3RydWN0IGxlY19hcnBfdGFibGUgKnRvX3JlbW92ZSk7CiAvKiBMQU5FMiBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIGxhbmUyX2Fzc29jaWF0ZV9pbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm1hY19hZGRyZXNzLAotCQkJCXU4ICp0bHZzLCB1MzIgc2l6ZW9mdGx2cyk7Ci1zdGF0aWMgaW50IGxhbmUyX3Jlc29sdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmRzdF9tYWMsIGludCBmb3JjZSwKK3N0YXRpYyB2b2lkIGxhbmUyX2Fzc29jaWF0ZV9pbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyZXNzLAorCQkJCWNvbnN0IHU4ICp0bHZzLCB1MzIgc2l6ZW9mdGx2cyk7CitzdGF0aWMgaW50IGxhbmUyX3Jlc29sdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRzdF9tYWMsIGludCBmb3JjZSwKIAkJCSB1OCAqKnRsdnMsIHUzMiAqc2l6ZW9mdGx2cyk7Ci1zdGF0aWMgaW50IGxhbmUyX2Fzc29jaWF0ZV9yZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmxhbl9kc3QsCi0JCQkgICAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKTsKK3N0YXRpYyBpbnQgbGFuZTJfYXNzb2NpYXRlX3JlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbGFuX2RzdCwKKwkJCSAgICAgICBjb25zdCB1OCAqdGx2cywgdTMyIHNpemVvZnRsdnMpOwogCi1zdGF0aWMgaW50IGxlY19hZGRyX2RlbGV0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLAorc3RhdGljIGludCBsZWNfYWRkcl9kZWxldGUoc3RydWN0IGxlY19wcml2ICpwcml2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgcGVybWFuZW50KTsKIHN0YXRpYyB2b2lkIGxlY19hcnBfY2hlY2tfZW1wdGllcyhzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCiAJCQkJICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIGxlY19hcnBfZGVzdHJveShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYpOwogc3RhdGljIHZvaWQgbGVjX2FycF9pbml0KHN0cnVjdCBsZWNfcHJpdiAqcHJpdik7CiBzdGF0aWMgc3RydWN0IGF0bV92Y2MgKmxlY19hcnBfcmVzb2x2ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCi0JCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKm1hY190b19maW5kLAorCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptYWNfdG9fZmluZCwKIAkJCQkgICAgICAgaW50IGlzX3JkZXNjLAogCQkJCSAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqKnJldF9lbnRyeSk7Ci1zdGF0aWMgdm9pZCBsZWNfYXJwX3VwZGF0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyLAotCQkJICAgdW5zaWduZWQgY2hhciAqYXRtX2FkZHIsIHVuc2lnbmVkIGxvbmcgcmVtb3RlZmxhZywKK3N0YXRpYyB2b2lkIGxlY19hcnBfdXBkYXRlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwgdW5zaWduZWQgbG9uZyByZW1vdGVmbGFnLAogCQkJICAgdW5zaWduZWQgaW50IHRhcmdldGxlc3NfbGVfYXJwKTsKIHN0YXRpYyB2b2lkIGxlY19mbHVzaF9jb21wbGV0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgdHJhbl9pZCk7CiBzdGF0aWMgaW50IGxlY19tY2FzdF9tYWtlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgc3RydWN0IGF0bV92Y2MgKnZjYyk7CiBzdGF0aWMgdm9pZCBsZWNfc2V0X2ZsdXNoX3RyYW5faWQoc3RydWN0IGxlY19wcml2ICpwcml2LAotCQkJCSAgdW5zaWduZWQgY2hhciAqYXRtX2FkZHIsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgdHJhbl9pZCk7Ci1zdGF0aWMgdm9pZCBsZWNfdmNjX2FkZGVkKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgc3RydWN0IGF0bWxlY19pb2MgKmlvY19kYXRhLAorc3RhdGljIHZvaWQgbGVjX3ZjY19hZGRlZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIGNvbnN0IHN0cnVjdCBhdG1sZWNfaW9jICppb2NfZGF0YSwKIAkJCSAgc3RydWN0IGF0bV92Y2MgKnZjYywKIAkJCSAgdm9pZCAoKm9sZF9wdXNoKSAoc3RydWN0IGF0bV92Y2MgKnZjYywKIAkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpKTsKQEAgLTYzNCw3ICs2MzQsNyBAQAogICovCiBzdGF0aWMgaW50CiBzZW5kX3RvX2xlY2Qoc3RydWN0IGxlY19wcml2ICpwcml2LCBhdG1sZWNfbXNnX3R5cGUgdHlwZSwKLQkgICAgIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyLCB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwKKwkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyLCBjb25zdCB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwKIAkgICAgIHN0cnVjdCBza19idWZmICpkYXRhKQogewogCXN0cnVjdCBzb2NrICpzazsKQEAgLTcwNSwxMCArNzA1LDkgQEAKIAlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxlY19zZXRfbXVsdGljYXN0X2xpc3Q7CiAJZGV2LT5kb19pb2N0bCA9IE5VTEw7CiAJcHJpbnRrKCIlczogSW5pdGlhbGl6ZWQhXG4iLCBkZXYtPm5hbWUpOwotCXJldHVybjsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgbGVjX2N0cmxfbWFnaWNbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGxlY19jdHJsX21hZ2ljW10gPSB7CiAJMHhmZiwKIAkweDAwLAogCTB4MDEsCkBAIC0xMjc2LDcgKzEyNzUsNyBAQAogICogbGVjIHdpbGwgYmUgdXNlZC4KICAqIElmIGRzdF9tYWMgPT0gTlVMTCwgdGFyZ2V0bGVzcyBMRV9BUlAgd2lsbCBiZSBzZW50CiAgKi8KLXN0YXRpYyBpbnQgbGFuZTJfcmVzb2x2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqZHN0X21hYywgaW50IGZvcmNlLAorc3RhdGljIGludCBsYW5lMl9yZXNvbHZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkc3RfbWFjLCBpbnQgZm9yY2UsCiAJCQkgdTggKip0bHZzLCB1MzIgKnNpemVvZnRsdnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzMjIsOCArMTMyMSw4IEBACiAgKiBSZXR1cm5zIDEgZm9yIHN1Y2Nlc3MsIDAgZm9yIGZhaWx1cmUgKG91dCBvZiBtZW1vcnkpCiAgKgogICovCi1zdGF0aWMgaW50IGxhbmUyX2Fzc29jaWF0ZV9yZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmxhbl9kc3QsCi0JCQkgICAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKQorc3RhdGljIGludCBsYW5lMl9hc3NvY2lhdGVfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpsYW5fZHN0LAorCQkJICAgICAgIGNvbnN0IHU4ICp0bHZzLCB1MzIgc2l6ZW9mdGx2cykKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMzU4LDggKzEzNTcsOCBAQAogICogTEFORTI6IDMuMS41LCBMRV9BU1NPQ0lBVEUuaW5kaWNhdGlvbgogICoKICAqLwotc3RhdGljIHZvaWQgbGFuZTJfYXNzb2NpYXRlX2luZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqbWFjX2FkZHIsCi0JCQkJdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKQorc3RhdGljIHZvaWQgbGFuZTJfYXNzb2NpYXRlX2luZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQkJY29uc3QgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKQogewogI2lmIDAKIAlpbnQgaSA9IDA7CkBAIC0xNzQ0LDcgKzE3NDMsNyBAQAogICogRmluZCBlbnRyeSBieSBtYWNfYWRkcmVzcwogICovCiBzdGF0aWMgc3RydWN0IGxlY19hcnBfdGFibGUgKmxlY19hcnBfZmluZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCi0JCQkJCSAgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpCisJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpCiB7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CkBAIC0xNzY0LDcgKzE3NjMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGxlY19hcnBfdGFibGUgKm1ha2VfZW50cnkoc3RydWN0IGxlY19wcml2ICpwcml2LAotCQkJCQl1bnNpZ25lZCBjaGFyICptYWNfYWRkcikKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpCiB7CiAJc3RydWN0IGxlY19hcnBfdGFibGUgKnRvX3JldHVybjsKIApAQCAtMTkyMSw3ICsxOTIwLDcgQEAKICAqCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyAqbGVjX2FycF9yZXNvbHZlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqbWFjX3RvX2ZpbmQsIGludCBpc19yZGVzYywKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX3RvX2ZpbmQsIGludCBpc19yZGVzYywKIAkJCQkgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKipyZXRfZW50cnkpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwMTcsNyArMjAxNiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxlY19hZGRyX2RlbGV0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLAorbGVjX2FkZHJfZGVsZXRlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgY29uc3QgdW5zaWduZWQgY2hhciAqYXRtX2FkZHIsCiAJCXVuc2lnbmVkIGxvbmcgcGVybWFuZW50KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yMDQ3LDggKzIwNDYsOCBAQAogICogTm90aWZpZXM6ICBSZXNwb25zZSB0byBhcnBfcmVxdWVzdCAoYXRtX2FkZHIgIT0gTlVMTCkKICAqLwogc3RhdGljIHZvaWQKLWxlY19hcnBfdXBkYXRlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIsCi0JICAgICAgIHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLCB1bnNpZ25lZCBsb25nIHJlbW90ZWZsYWcsCitsZWNfYXJwX3VwZGF0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyLAorCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwgdW5zaWduZWQgbG9uZyByZW1vdGVmbGFnLAogCSAgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0bGVzc19sZV9hcnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIxNDgsNyArMjE0Nyw3IEBACiAgKiBOb3RpZmllczogVmNjIHNldHVwIHJlYWR5CiAgKi8KIHN0YXRpYyB2b2lkCi1sZWNfdmNjX2FkZGVkKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgc3RydWN0IGF0bWxlY19pb2MgKmlvY19kYXRhLAorbGVjX3ZjY19hZGRlZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIGNvbnN0IHN0cnVjdCBhdG1sZWNfaW9jICppb2NfZGF0YSwKIAkgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLAogCSAgICAgIHZvaWQgKCpvbGRfcHVzaCkgKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpKQogewpAQCAtMjMzNiw3ICsyMzM1LDcgQEAKIAogc3RhdGljIHZvaWQKIGxlY19zZXRfZmx1c2hfdHJhbl9pZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCi0JCSAgICAgIHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLCB1bnNpZ25lZCBsb25nIHRyYW5faWQpCisJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLCB1bnNpZ25lZCBsb25nIHRyYW5faWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmggYi9uZXQvYXRtL2xlYy5oCmluZGV4IGI0MWNkYTcuLjBkMzc2NjggMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmgKKysrIGIvbmV0L2F0bS9sZWMuaApAQCAtNDIsMTIgKzQyLDEyIEBACiAgKgogICovCiBzdHJ1Y3QgbGFuZTJfb3BzIHsKLQlpbnQgKCpyZXNvbHZlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmRzdF9tYWMsIGludCBmb3JjZSwKKwlpbnQgKCpyZXNvbHZlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRzdF9tYWMsIGludCBmb3JjZSwKIAkJCXU4ICoqdGx2cywgdTMyICpzaXplb2Z0bHZzKTsKLQlpbnQgKCphc3NvY2lhdGVfcmVxKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmxhbl9kc3QsCi0JCQkgICAgICB1OCAqdGx2cywgdTMyIHNpemVvZnRsdnMpOwotCXZvaWQgKCphc3NvY2lhdGVfaW5kaWNhdG9yKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm1hY19hZGRyLAotCQkJCSAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKTsKKwlpbnQgKCphc3NvY2lhdGVfcmVxKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmxhbl9kc3QsCisJCQkgICAgICBjb25zdCB1OCAqdGx2cywgdTMyIHNpemVvZnRsdnMpOworCXZvaWQgKCphc3NvY2lhdGVfaW5kaWNhdG9yKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLAorCQkJCSAgICAgY29uc3QgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKTsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCA5ZGIzMzJlLi40ZmNjYWExIDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTk2NCw3ICs5NjQsNyBAQAogCiAJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X3B0cjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGRldi0+bmFtZSA9PSBOVUxMIHx8IHN0cm5jbXAoZGV2LT5uYW1lLCAibGVjIiwgMykpCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggMjcxMjU0NC4uMDFjODNlMiAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtMTE2LDcgKzExNiw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJLyogUmVqZWN0IG5vbiBBWC4yNSBkZXZpY2VzICovCkBAIC04OTMsMTMgKzg5MywxMSBAQAogCiAJc2stPnNrX2Rlc3RydWN0ID0gYXgyNV9mcmVlX3NvY2s7CiAJc2stPnNrX3R5cGUgICAgID0gb3NrLT5za190eXBlOwotCXNrLT5za19zb2NrZXQgICA9IG9zay0+c2tfc29ja2V0OwogCXNrLT5za19wcmlvcml0eSA9IG9zay0+c2tfcHJpb3JpdHk7CiAJc2stPnNrX3Byb3RvY29sID0gb3NrLT5za19wcm90b2NvbDsKIAlzay0+c2tfcmN2YnVmICAgPSBvc2stPnNrX3JjdmJ1ZjsKIAlzay0+c2tfc25kYnVmICAgPSBvc2stPnNrX3NuZGJ1ZjsKIAlzay0+c2tfc3RhdGUgICAgPSBUQ1BfRVNUQUJMSVNIRUQ7Ci0Jc2stPnNrX3NsZWVwICAgID0gb3NrLT5za19zbGVlcDsKIAlzb2NrX2NvcHlfZmxhZ3Moc2ssIG9zayk7CiAKIAlvYXgyNSA9IGF4MjVfc2sob3NrKTsKQEAgLTEzNjEsMTMgKzEzNTksMTEgQEAKIAkJZ290byBvdXQ7CiAKIAluZXdzawkJID0gc2tiLT5zazsKLQluZXdzay0+c2tfc29ja2V0ID0gbmV3c29jazsKLQluZXdzay0+c2tfc2xlZXAJID0gJm5ld3NvY2stPndhaXQ7CisJc29ja19ncmFmdChuZXdzaywgbmV3c29jayk7CiAKIAkvKiBOb3cgYXR0YWNoIHVwIHRoZSBuZXcgc29ja2V0ICovCiAJa2ZyZWVfc2tiKHNrYik7CiAJc2stPnNrX2Fja19iYWNrbG9nLS07Ci0JbmV3c29jay0+c2sgICAgPSBuZXdzazsKIAluZXdzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9pbi5jIGIvbmV0L2F4MjUvYXgyNV9pbi5jCmluZGV4IDMzNzkwYTguLjRhNWJhOTcgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfaW4uYworKysgYi9uZXQvYXgyNS9heDI1X2luLmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCXNrYi0+c2sgPSBOVUxMOwkJLyogSW5pdGlhbGx5IHdlIGRvbid0IGtub3cgd2hvIGl0J3MgZm9yICovCiAJc2tiLT5kZXN0cnVjdG9yID0gTlVMTDsJLyogV2hvIGluaXRpYWxpemVzIHRoaXMsIGRhbW1pdD8hICovCiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkgeworCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9zdGRfdGltZXIuYyBiL25ldC9heDI1L2F4MjVfc3RkX3RpbWVyLmMKaW5kZXggOTZlNGI5Mi4uY2RjN2U3NSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9zdGRfdGltZXIuYworKysgYi9uZXQvYXgyNS9heDI1X3N0ZF90aW1lci5jCkBAIC0zOSwxMSArMzksOSBAQAogCiAJc3dpdGNoIChheDI1LT5zdGF0ZSkgewogCWNhc2UgQVgyNV9TVEFURV8wOgotCQkvKiBNYWdpYyBoZXJlOiBJZiB3ZSBsaXN0ZW4oKSBhbmQgYSBuZXcgbGluayBkaWVzIGJlZm9yZSBpdAotCQkgICBpcyBhY2NlcHRlZCgpIGl0IGlzbid0ICdkZWFkJyBzbyBkb2Vzbid0IGdldCByZW1vdmVkLiAqLwotCQlpZiAoIXNrIHx8IHNvY2tfZmxhZyhzaywgU09DS19ERVNUUk9ZKSB8fAotCQkgICAgKHNrLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOICYmCi0JCSAgICAgc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSkgeworCQlpZiAoIXNrIHx8CisJCSAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVTVFJPWSkgfHwKKwkJICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkgewogCQkJaWYgKHNrKSB7CiAJCQkJc29ja19ob2xkKHNrKTsKIAkJCQlheDI1X2Rlc3Ryb3lfc29ja2V0KGF4MjUpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKaW5kZXggZDM2NjQyMy4uNGU1OWRmNSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYworKysgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0tNT0QpCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgpAQCAtNDgsNyArNDksNyBAQAogI2RlZmluZSBCVF9EQkcoRC4uLikKICNlbmRpZgogCi0jZGVmaW5lIFZFUlNJT04gIjIuMTEiCisjZGVmaW5lIFZFUlNJT04gIjIuMTIiCiAKIC8qIEJsdWV0b290aCBzb2NrZXRzICovCiAjZGVmaW5lIEJUX01BWF9QUk9UTwk4CkBAIC0yNjYsNiArMjY3LDggQEAKIAogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCAwLCBtc2ctPm1zZ19pb3YsIGNvcGllZCk7CisJaWYgKGVyciA9PSAwKQorCQlzb2NrX3JlY3ZfdGltZXN0YW1wKG1zZywgc2ssIHNrYik7CiAKIAlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKIApAQCAtMzI5LDYgKzMzMiw1NCBAQAogfQogRVhQT1JUX1NZTUJPTChidF9zb2NrX3BvbGwpOwogCitpbnQgYnRfc29ja19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWxvbmcgYW1vdW50OworCWludCBlcnI7CisKKwlCVF9EQkcoInNrICVwIGNtZCAleCBhcmcgJWx4Iiwgc2ssIGNtZCwgYXJnKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DT1VUUToKKwkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9MSVNURU4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlhbW91bnQgPSBzay0+c2tfc25kYnVmIC0gYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKTsKKwkJaWYgKGFtb3VudCA8IDApCisJCQlhbW91bnQgPSAwOworCQllcnIgPSBwdXRfdXNlcihhbW91bnQsIChpbnQgX191c2VyICopIGFyZyk7CisJCWJyZWFrOworCisJY2FzZSBUSU9DSU5ROgorCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0xJU1RFTikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWxvY2tfc29jayhzayk7CisJCXNrYiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJCWFtb3VudCA9IHNrYiA/IHNrYi0+bGVuIDogMDsKKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwkJZXJyID0gcHV0X3VzZXIoYW1vdW50LCAoaW50IF9fdXNlciAqKSBhcmcpOworCQlicmVhazsKKworCWNhc2UgU0lPQ0dTVEFNUDoKKwkJZXJyID0gc29ja19nZXRfdGltZXN0YW1wKHNrLCAoc3RydWN0IHRpbWV2YWwgX191c2VyICopIGFyZyk7CisJCWJyZWFrOworCisJY2FzZSBTSU9DR1NUQU1QTlM6CisJCWVyciA9IHNvY2tfZ2V0X3RpbWVzdGFtcG5zKHNrLCAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSBhcmcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woYnRfc29ja19pb2N0bCk7CisKIGludCBidF9zb2NrX3dhaXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUsIHVuc2lnbmVkIGxvbmcgdGltZW8pCiB7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvYm5lcC5oIGIvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaAppbmRleCBlNjkyNDRkZC4uYjY5YmY0ZSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaAorKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvYm5lcC5oCkBAIC0xNiwxMCArMTYsNiBAQAogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICovCiAKLS8qCi0gKiAkSWQ6IGJuZXAuaCx2IDEuNSAyMDAyLzA4LzA0IDIxOjIzOjU4IG1heGsgRXhwICQKLSAqLwotCiAjaWZuZGVmIF9CTkVQX0gKICNkZWZpbmUgX0JORVBfSAogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwppbmRleCBmODVkOTQ2Li4wMjExNzJjMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCkBAIC0yNSwxMCArMjUsNiBAQAogICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KICovCiAKLS8qCi0gKiAkSWQ6IGNvcmUuYyx2IDEuMjAgMjAwMi8wOC8wNCAyMToyMzo1OCBtYXhrIEV4cCAkCi0gKi8KLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01MDcsNiArNTAzLDExIEBACiAJLyogRGVsZXRlIG5ldHdvcmsgZGV2aWNlICovCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAorCS8qIFdha2V1cCB1c2VyLXNwYWNlIHBvbGxpbmcgZm9yIHNvY2tldCBlcnJvcnMgKi8KKwlzLT5zb2NrLT5zay0+c2tfZXJyID0gRVVOQVRDSDsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZShzLT5zb2NrLT5zay0+c2tfc2xlZXApOworCiAJLyogUmVsZWFzZSB0aGUgc29ja2V0ICovCiAJZnB1dChzLT5zb2NrLT5maWxlKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jIGIvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jCmluZGV4IDk1ZTM4MzcuLmQ5ZmEwYWIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMKQEAgLTI1LDEwICsyNSw2IEBACiAgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgogKi8KIAotLyoKLSAqICRJZDogbmV0ZGV2LmMsdiAxLjggMjAwMi8wOC8wNCAyMToyMzo1OCBtYXhrIEV4cCAkCi0gKi8KLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jIGIvbmV0L2JsdWV0b290aC9ibmVwL3NvY2suYwppbmRleCAyMDFlNWIxLi44ZmZiNTdmIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvYm5lcC9zb2NrLmMKQEAgLTI0LDEwICsyNCw2IEBACiAgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgogKi8KIAotLyoKLSAqICRJZDogc29jay5jLHYgMS40IDIwMDIvMDgvMDQgMjE6MjM6NTggbWF4ayBFeHAgJAotICovCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKaW5kZXggZjg4ODAyNi4uY2E4ZDA1MiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwpAQCAtNTksMjQgKzU5LDMxIEBACiAJQlRfREJHKCIlcCIsIGNvbm4pOwogCiAJY29ubi0+c3RhdGUgPSBCVF9DT05ORUNUOwotCWNvbm4tPm91dCAgID0gMTsKKwljb25uLT5vdXQgPSAxOworCiAJY29ubi0+bGlua19tb2RlID0gSENJX0xNX01BU1RFUjsKIAogCWNvbm4tPmF0dGVtcHQrKzsKIAorCWNvbm4tPmxpbmtfcG9saWN5ID0gaGRldi0+bGlua19wb2xpY3k7CisKIAltZW1zZXQoJmNwLCAwLCBzaXplb2YoY3ApKTsKIAliYWNweSgmY3AuYmRhZGRyLCAmY29ubi0+ZHN0KTsKIAljcC5wc2Nhbl9yZXBfbW9kZSA9IDB4MDI7CiAKLQlpZiAoKGllID0gaGNpX2lucXVpcnlfY2FjaGVfbG9va3VwKGhkZXYsICZjb25uLT5kc3QpKSAmJgotCQkJaW5xdWlyeV9lbnRyeV9hZ2UoaWUpIDw9IElOUVVJUllfRU5UUllfQUdFX01BWCkgewotCQljcC5wc2Nhbl9yZXBfbW9kZSA9IGllLT5kYXRhLnBzY2FuX3JlcF9tb2RlOwotCQljcC5wc2Nhbl9tb2RlICAgICA9IGllLT5kYXRhLnBzY2FuX21vZGU7Ci0JCWNwLmNsb2NrX29mZnNldCAgID0gaWUtPmRhdGEuY2xvY2tfb2Zmc2V0IHwgY3B1X3RvX2xlMTYoMHg4MDAwKTsKKwlpZiAoKGllID0gaGNpX2lucXVpcnlfY2FjaGVfbG9va3VwKGhkZXYsICZjb25uLT5kc3QpKSkgeworCQlpZiAoaW5xdWlyeV9lbnRyeV9hZ2UoaWUpIDw9IElOUVVJUllfRU5UUllfQUdFX01BWCkgeworCQkJY3AucHNjYW5fcmVwX21vZGUgPSBpZS0+ZGF0YS5wc2Nhbl9yZXBfbW9kZTsKKwkJCWNwLnBzY2FuX21vZGUgICAgID0gaWUtPmRhdGEucHNjYW5fbW9kZTsKKwkJCWNwLmNsb2NrX29mZnNldCAgID0gaWUtPmRhdGEuY2xvY2tfb2Zmc2V0IHwKKwkJCQkJCQljcHVfdG9fbGUxNigweDgwMDApOworCQl9CisKIAkJbWVtY3B5KGNvbm4tPmRldl9jbGFzcywgaWUtPmRhdGEuZGV2X2NsYXNzLCAzKTsKKwkJY29ubi0+c3NwX21vZGUgPSBpZS0+ZGF0YS5zc3BfbW9kZTsKIAl9CiAKLQljcC5wa3RfdHlwZSA9IGNwdV90b19sZTE2KGhkZXYtPnBrdF90eXBlICYgQUNMX1BUWVBFX01BU0spOworCWNwLnBrdF90eXBlID0gY3B1X3RvX2xlMTYoY29ubi0+cGt0X3R5cGUpOwogCWlmIChsbXBfcnN3aXRjaF9jYXBhYmxlKGhkZXYpICYmICEoaGRldi0+bGlua19tb2RlICYgSENJX0xNX01BU1RFUikpCiAJCWNwLnJvbGVfc3dpdGNoID0gMHgwMTsKIAllbHNlCkBAIC0xMjIsNyArMTI5LDcgQEAKIAljb25uLT5vdXQgPSAxOwogCiAJY3AuaGFuZGxlICAgPSBjcHVfdG9fbGUxNihoYW5kbGUpOwotCWNwLnBrdF90eXBlID0gY3B1X3RvX2xlMTYoaGRldi0+cGt0X3R5cGUgJiBTQ09fUFRZUEVfTUFTSyk7CisJY3AucGt0X3R5cGUgPSBjcHVfdG9fbGUxNihjb25uLT5wa3RfdHlwZSk7CiAKIAloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX0FERF9TQ08sIHNpemVvZihjcCksICZjcCk7CiB9CkBAIC0xMzgsNyArMTQ1LDcgQEAKIAljb25uLT5vdXQgPSAxOwogCiAJY3AuaGFuZGxlICAgPSBjcHVfdG9fbGUxNihoYW5kbGUpOwotCWNwLnBrdF90eXBlID0gY3B1X3RvX2xlMTYoaGRldi0+ZXNjb190eXBlKTsKKwljcC5wa3RfdHlwZSA9IGNwdV90b19sZTE2KGNvbm4tPnBrdF90eXBlKTsKIAogCWNwLnR4X2JhbmR3aWR0aCAgID0gY3B1X3RvX2xlMzIoMHgwMDAwMWY0MCk7CiAJY3AucnhfYmFuZHdpZHRoICAgPSBjcHVfdG9fbGUzMigweDAwMDAxZjQwKTsKQEAgLTE2MywxMSArMTcwLDEzIEBACiAKIAlzd2l0Y2ggKGNvbm4tPnN0YXRlKSB7CiAJY2FzZSBCVF9DT05ORUNUOgorCWNhc2UgQlRfQ09OTkVDVDI6CiAJCWlmIChjb25uLT50eXBlID09IEFDTF9MSU5LKQogCQkJaGNpX2FjbF9jb25uZWN0X2NhbmNlbChjb25uKTsKIAkJZWxzZQogCQkJaGNpX2FjbF9kaXNjb25uKGNvbm4sIDB4MTMpOwogCQlicmVhazsKKwljYXNlIEJUX0NPTkZJRzoKIAljYXNlIEJUX0NPTk5FQ1RFRDoKIAkJaGNpX2FjbF9kaXNjb25uKGNvbm4sIDB4MTMpOwogCQlicmVhazsKQEAgLTE5OSwxMyArMjA4LDI4IEBACiAJCXJldHVybiBOVUxMOwogCiAJYmFjcHkoJmNvbm4tPmRzdCwgZHN0KTsKLQljb25uLT5oZGV2ICAgPSBoZGV2OwotCWNvbm4tPnR5cGUgICA9IHR5cGU7Ci0JY29ubi0+bW9kZSAgID0gSENJX0NNX0FDVElWRTsKLQljb25uLT5zdGF0ZSAgPSBCVF9PUEVOOworCWNvbm4tPmhkZXYgID0gaGRldjsKKwljb25uLT50eXBlICA9IHR5cGU7CisJY29ubi0+bW9kZSAgPSBIQ0lfQ01fQUNUSVZFOworCWNvbm4tPnN0YXRlID0gQlRfT1BFTjsKIAogCWNvbm4tPnBvd2VyX3NhdmUgPSAxOwogCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBQ0xfTElOSzoKKwkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5wa3RfdHlwZSAmIEFDTF9QVFlQRV9NQVNLOworCQlicmVhazsKKwljYXNlIFNDT19MSU5LOgorCQlpZiAobG1wX2VzY29fY2FwYWJsZShoZGV2KSkKKwkJCWNvbm4tPnBrdF90eXBlID0gaGRldi0+ZXNjb190eXBlICYgU0NPX0VTQ09fTUFTSzsKKwkJZWxzZQorCQkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5wa3RfdHlwZSAmIFNDT19QVFlQRV9NQVNLOworCQlicmVhazsKKwljYXNlIEVTQ09fTElOSzoKKwkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5lc2NvX3R5cGU7CisJCWJyZWFrOworCX0KKwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNvbm4tPmRhdGFfcSk7CiAKIAlzZXR1cF90aW1lcigmY29ubi0+ZGlzY190aW1lciwgaGNpX2Nvbm5fdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpY29ubik7CkBAIC0yMjEsOCArMjQ1LDYgQEAKIAlpZiAoaGRldi0+bm90aWZ5KQogCQloZGV2LT5ub3RpZnkoaGRldiwgSENJX05PVElGWV9DT05OX0FERCk7CiAKLQloY2lfY29ubl9hZGRfc3lzZnMoY29ubik7Ci0KIAl0YXNrbGV0X2VuYWJsZSgmaGRldi0+dHhfdGFzayk7CiAKIAlyZXR1cm4gY29ubjsKQEAgLTI1NCwxMiArMjc2LDE0IEBACiAJfQogCiAJdGFza2xldF9kaXNhYmxlKCZoZGV2LT50eF90YXNrKTsKKwogCWhjaV9jb25uX2hhc2hfZGVsKGhkZXYsIGNvbm4pOwogCWlmIChoZGV2LT5ub3RpZnkpCiAJCWhkZXYtPm5vdGlmeShoZGV2LCBIQ0lfTk9USUZZX0NPTk5fREVMKTsKKwogCXRhc2tsZXRfZW5hYmxlKCZoZGV2LT50eF90YXNrKTsKKwogCXNrYl9xdWV1ZV9wdXJnZSgmY29ubi0+ZGF0YV9xKTsKLQloY2lfY29ubl9kZWxfc3lzZnMoY29ubik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1NSwxMyArMzc5LDIxIEBACiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKKwlpZiAoY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPmhkZXYtPnNzcF9tb2RlID4gMCkgeworCQlpZiAoIShjb25uLT5hdXRoX3R5cGUgJiAweDAxKSkgeworCQkJY29ubi0+YXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQkJY29ubi0+bGlua19tb2RlICY9IH5IQ0lfTE1fQVVUSDsKKwkJfQorCX0KKwogCWlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fQVVUSCkKIAkJcmV0dXJuIDE7CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKIAkJc3RydWN0IGhjaV9jcF9hdXRoX3JlcXVlc3RlZCBjcDsKIAkJY3AuaGFuZGxlID0gY3B1X3RvX2xlMTYoY29ubi0+aGFuZGxlKTsKLQkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwgc2l6ZW9mKGNwKSwgJmNwKTsKKwkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwKKwkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTM3Myw3ICs0MDUsNyBAQAogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCiAJaWYgKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubik7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkKIAkJcmV0dXJuIDA7CkBAIC0zODIsNyArNDE0LDggQEAKIAkJc3RydWN0IGhjaV9jcF9zZXRfY29ubl9lbmNyeXB0IGNwOwogCQljcC5oYW5kbGUgID0gY3B1X3RvX2xlMTYoY29ubi0+aGFuZGxlKTsKIAkJY3AuZW5jcnlwdCA9IDE7Ci0JCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfU0VUX0NPTk5fRU5DUllQVCwgc2l6ZW9mKGNwKSwgJmNwKTsKKwkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9TRVRfQ09OTl9FTkNSWVBULAorCQkJCQkJCXNpemVvZihjcCksICZjcCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzk2LDcgKzQyOSw4IEBACiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPnBlbmQpKSB7CiAJCXN0cnVjdCBoY2lfY3BfY2hhbmdlX2Nvbm5fbGlua19rZXkgY3A7CiAJCWNwLmhhbmRsZSA9IGNwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7Ci0JCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfQ0hBTkdFX0NPTk5fTElOS19LRVksIHNpemVvZihjcCksICZjcCk7CisJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfQ0hBTkdFX0NPTk5fTElOS19LRVksCisJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00OTgsNiArNTMyLDggQEAKIAogCQljLT5zdGF0ZSA9IEJUX0NMT1NFRDsKIAorCQloY2lfY29ubl9kZWxfc3lzZnMoYyk7CisKIAkJaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKGMsIDB4MTYpOwogCQloY2lfY29ubl9kZWwoYyk7CiAJfQpAQCAtNjAwLDMgKzYzNiwyMyBAQAogCiAJcmV0dXJuIGNvcHlfdG9fdXNlcihwdHIsICZjaSwgc2l6ZW9mKGNpKSkgPyAtRUZBVUxUIDogMDsKIH0KKworaW50IGhjaV9nZXRfYXV0aF9pbmZvKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBoY2lfYXV0aF9pbmZvX3JlcSByZXE7CisJc3RydWN0IGhjaV9jb25uICpjb25uOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsIGFyZywgc2l6ZW9mKHJlcSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKwljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssICZyZXEuYmRhZGRyKTsKKwlpZiAoY29ubikKKwkJcmVxLnR5cGUgPSBjb25uLT5hdXRoX3R5cGU7CisJaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisKKwlpZiAoIWNvbm4pCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZyZXEsIHNpemVvZihyZXEpKSA/IC1FRkFVTFQgOiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IGFlYzY5MjkuLmY1YjIxY2IgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTI3OSwxMCArMjc5LDIwIEBACiAKIAlCVF9EQkcoIiVzICV4IiwgaGRldi0+bmFtZSwgZW5jcnlwdCk7CiAKLQkvKiBBdXRoZW50aWNhdGlvbiAqLworCS8qIEVuY3J5cHRpb24gKi8KIAloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1dSSVRFX0VOQ1JZUFRfTU9ERSwgMSwgJmVuY3J5cHQpOwogfQogCitzdGF0aWMgdm9pZCBoY2lfbGlua3BvbF9yZXEoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVuc2lnbmVkIGxvbmcgb3B0KQoreworCV9fbGUxNiBwb2xpY3kgPSBjcHVfdG9fbGUxNihvcHQpOworCisJQlRfREJHKCIlcyAleCIsIGhkZXYtPm5hbWUsIG9wdCk7CisKKwkvKiBEZWZhdWx0IGxpbmsgcG9saWN5ICovCisJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9XUklURV9ERUZfTElOS19QT0xJQ1ksIDIsICZwb2xpY3kpOworfQorCiAvKiBHZXQgSENJIGRldmljZSBieSBpbmRleC4KICAqIERldmljZSBpcyBoZWxkIG9uIHJldHVybi4gKi8KIHN0cnVjdCBoY2lfZGV2ICpoY2lfZGV2X2dldChpbnQgaW5kZXgpCkBAIC02OTQsMzIgKzcwNCwzNSBAQAogCQkJCQltc2Vjc190b19qaWZmaWVzKEhDSV9JTklUX1RJTUVPVVQpKTsKIAkJYnJlYWs7CiAKKwljYXNlIEhDSVNFVExJTktQT0w6CisJCWVyciA9IGhjaV9yZXF1ZXN0KGhkZXYsIGhjaV9saW5rcG9sX3JlcSwgZHIuZGV2X29wdCwKKwkJCQkJbXNlY3NfdG9famlmZmllcyhIQ0lfSU5JVF9USU1FT1VUKSk7CisJCWJyZWFrOworCisJY2FzZSBIQ0lTRVRMSU5LTU9ERToKKwkJaGRldi0+bGlua19tb2RlID0gKChfX3UxNikgZHIuZGV2X29wdCkgJgorCQkJCQkoSENJX0xNX01BU1RFUiB8IEhDSV9MTV9BQ0NFUFQpOworCQlicmVhazsKKwogCWNhc2UgSENJU0VUUFRZUEU6CiAJCWhkZXYtPnBrdF90eXBlID0gKF9fdTE2KSBkci5kZXZfb3B0OwogCQlicmVhazsKIAotCWNhc2UgSENJU0VUTElOS1BPTDoKLQkJaGRldi0+bGlua19wb2xpY3kgPSAoX191MTYpIGRyLmRldl9vcHQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBIQ0lTRVRMSU5LTU9ERToKLQkJaGRldi0+bGlua19tb2RlID0gKChfX3UxNikgZHIuZGV2X29wdCkgJiAoSENJX0xNX01BU1RFUiB8IEhDSV9MTV9BQ0NFUFQpOwotCQlicmVhazsKLQogCWNhc2UgSENJU0VUQUNMTVRVOgotCQloZGV2LT5hY2xfbXR1ICA9ICooKF9fdTE2ICopJmRyLmRldl9vcHQgKyAxKTsKLQkJaGRldi0+YWNsX3BrdHMgPSAqKChfX3UxNiAqKSZkci5kZXZfb3B0ICsgMCk7CisJCWhkZXYtPmFjbF9tdHUgID0gKigoX191MTYgKikgJmRyLmRldl9vcHQgKyAxKTsKKwkJaGRldi0+YWNsX3BrdHMgPSAqKChfX3UxNiAqKSAmZHIuZGV2X29wdCArIDApOwogCQlicmVhazsKIAogCWNhc2UgSENJU0VUU0NPTVRVOgotCQloZGV2LT5zY29fbXR1ICA9ICooKF9fdTE2ICopJmRyLmRldl9vcHQgKyAxKTsKLQkJaGRldi0+c2NvX3BrdHMgPSAqKChfX3UxNiAqKSZkci5kZXZfb3B0ICsgMCk7CisJCWhkZXYtPnNjb19tdHUgID0gKigoX191MTYgKikgJmRyLmRldl9vcHQgKyAxKTsKKwkJaGRldi0+c2NvX3BrdHMgPSAqKChfX3UxNiAqKSAmZHIuZGV2X29wdCArIDApOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KKwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xMjcwLDkgKzEyODMsMTIgQEAKIAkJc3RydWN0IGhjaV9jb25uICpjOwogCQljID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGNpX2Nvbm4sIGxpc3QpOwogCi0JCWlmIChjLT50eXBlICE9IHR5cGUgfHwgYy0+c3RhdGUgIT0gQlRfQ09OTkVDVEVECi0JCQkJfHwgc2tiX3F1ZXVlX2VtcHR5KCZjLT5kYXRhX3EpKQorCQlpZiAoYy0+dHlwZSAhPSB0eXBlIHx8IHNrYl9xdWV1ZV9lbXB0eSgmYy0+ZGF0YV9xKSkKIAkJCWNvbnRpbnVlOworCisJCWlmIChjLT5zdGF0ZSAhPSBCVF9DT05ORUNURUQgJiYgYy0+c3RhdGUgIT0gQlRfQ09ORklHKQorCQkJY29udGludWU7CisKIAkJbnVtKys7CiAKIAkJaWYgKGMtPnNlbnQgPCBtaW4pIHsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IDZhZWY4ZjIuLjBlM2RiMjggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtMTEwLDYgKzExMCwyNSBAQAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCitzdGF0aWMgdm9pZCBoY2lfY2NfcmVhZF9saW5rX3BvbGljeShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGNpX3JwX3JlYWRfbGlua19wb2xpY3kgKnJwID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKKworCUJUX0RCRygiJXMgc3RhdHVzIDB4JXgiLCBoZGV2LT5uYW1lLCBycC0+c3RhdHVzKTsKKworCWlmIChycC0+c3RhdHVzKQorCQlyZXR1cm47CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUocnAtPmhhbmRsZSkpOworCWlmIChjb25uKQorCQljb25uLT5saW5rX3BvbGljeSA9IF9fbGUxNl90b19jcHUocnAtPnBvbGljeSk7CisKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKK30KKwogc3RhdGljIHZvaWQgaGNpX2NjX3dyaXRlX2xpbmtfcG9saWN5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBoY2lfcnBfd3JpdGVfbGlua19wb2xpY3kgKnJwID0gKHZvaWQgKikgc2tiLT5kYXRhOwpAQCAtMTI4LDEzICsxNDcsNDEgQEAKIAloY2lfZGV2X2xvY2soaGRldik7CiAKIAljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUocnAtPmhhbmRsZSkpOwotCWlmIChjb25uKSB7CisJaWYgKGNvbm4pCiAJCWNvbm4tPmxpbmtfcG9saWN5ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNlbnQgKyAyKTsKLQl9CiAKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgaGNpX2NjX3JlYWRfZGVmX2xpbmtfcG9saWN5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoY2lfcnBfcmVhZF9kZWZfbGlua19wb2xpY3kgKnJwID0gKHZvaWQgKikgc2tiLT5kYXRhOworCisJQlRfREJHKCIlcyBzdGF0dXMgMHgleCIsIGhkZXYtPm5hbWUsIHJwLT5zdGF0dXMpOworCisJaWYgKHJwLT5zdGF0dXMpCisJCXJldHVybjsKKworCWhkZXYtPmxpbmtfcG9saWN5ID0gX19sZTE2X3RvX2NwdShycC0+cG9saWN5KTsKK30KKworc3RhdGljIHZvaWQgaGNpX2NjX3dyaXRlX2RlZl9saW5rX3BvbGljeShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlfX3U4IHN0YXR1cyA9ICooKF9fdTggKikgc2tiLT5kYXRhKTsKKwl2b2lkICpzZW50OworCisJQlRfREJHKCIlcyBzdGF0dXMgMHgleCIsIGhkZXYtPm5hbWUsIHN0YXR1cyk7CisKKwlzZW50ID0gaGNpX3NlbnRfY21kX2RhdGEoaGRldiwgSENJX09QX1dSSVRFX0RFRl9MSU5LX1BPTElDWSk7CisJaWYgKCFzZW50KQorCQlyZXR1cm47CisKKwlpZiAoIXN0YXR1cykKKwkJaGRldi0+bGlua19wb2xpY3kgPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2VudCk7CisKKwloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIHN0YXR1cyk7Cit9CisKIHN0YXRpYyB2b2lkIGhjaV9jY19yZXNldChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlfX3U4IHN0YXR1cyA9ICooKF9fdTggKikgc2tiLT5kYXRhKTsKQEAgLTE1MSwxMiArMTk4LDE0IEBACiAKIAlCVF9EQkcoIiVzIHN0YXR1cyAweCV4IiwgaGRldi0+bmFtZSwgc3RhdHVzKTsKIAorCWlmIChzdGF0dXMpCisJCXJldHVybjsKKwogCXNlbnQgPSBoY2lfc2VudF9jbWRfZGF0YShoZGV2LCBIQ0lfT1BfV1JJVEVfTE9DQUxfTkFNRSk7CiAJaWYgKCFzZW50KQogCQlyZXR1cm47CiAKLQlpZiAoIXN0YXR1cykKLQkJbWVtY3B5KGhkZXYtPmRldl9uYW1lLCBzZW50LCAyNDgpOworCW1lbWNweShoZGV2LT5kZXZfbmFtZSwgc2VudCwgMjQ4KTsKIH0KIAogc3RhdGljIHZvaWQgaGNpX2NjX3JlYWRfbG9jYWxfbmFtZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI2NiwxMiArMzE1LDE0IEBACiAKIAlCVF9EQkcoIiVzIHN0YXR1cyAweCV4IiwgaGRldi0+bmFtZSwgc3RhdHVzKTsKIAorCWlmIChzdGF0dXMpCisJCXJldHVybjsKKwogCXNlbnQgPSBoY2lfc2VudF9jbWRfZGF0YShoZGV2LCBIQ0lfT1BfV1JJVEVfQ0xBU1NfT0ZfREVWKTsKIAlpZiAoIXNlbnQpCiAJCXJldHVybjsKIAotCWlmICghc3RhdHVzKQotCQltZW1jcHkoaGRldi0+ZGV2X2NsYXNzLCBzZW50LCAzKTsKKwltZW1jcHkoaGRldi0+ZGV2X2NsYXNzLCBzZW50LCAzKTsKIH0KIAogc3RhdGljIHZvaWQgaGNpX2NjX3JlYWRfdm9pY2Vfc2V0dGluZyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI4Niw3ICszMzcsNyBAQAogCiAJc2V0dGluZyA9IF9fbGUxNl90b19jcHUocnAtPnZvaWNlX3NldHRpbmcpOwogCi0JaWYgKGhkZXYtPnZvaWNlX3NldHRpbmcgPT0gc2V0dGluZyApCisJaWYgKGhkZXYtPnZvaWNlX3NldHRpbmcgPT0gc2V0dGluZykKIAkJcmV0dXJuOwogCiAJaGRldi0+dm9pY2Vfc2V0dGluZyA9IHNldHRpbmc7CkBAIC0zMDMsMjggKzM1NCwzMSBAQAogc3RhdGljIHZvaWQgaGNpX2NjX3dyaXRlX3ZvaWNlX3NldHRpbmcoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJX191OCBzdGF0dXMgPSAqKChfX3U4ICopIHNrYi0+ZGF0YSk7CisJX191MTYgc2V0dGluZzsKIAl2b2lkICpzZW50OwogCiAJQlRfREJHKCIlcyBzdGF0dXMgMHgleCIsIGhkZXYtPm5hbWUsIHN0YXR1cyk7CiAKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm47CisKIAlzZW50ID0gaGNpX3NlbnRfY21kX2RhdGEoaGRldiwgSENJX09QX1dSSVRFX1ZPSUNFX1NFVFRJTkcpOwogCWlmICghc2VudCkKIAkJcmV0dXJuOwogCi0JaWYgKCFzdGF0dXMpIHsKLQkJX191MTYgc2V0dGluZyA9IGdldF91bmFsaWduZWRfbGUxNihzZW50KTsKKwlzZXR0aW5nID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNlbnQpOwogCi0JCWlmIChoZGV2LT52b2ljZV9zZXR0aW5nICE9IHNldHRpbmcpIHsKLQkJCWhkZXYtPnZvaWNlX3NldHRpbmcgPSBzZXR0aW5nOworCWlmIChoZGV2LT52b2ljZV9zZXR0aW5nID09IHNldHRpbmcpCisJCXJldHVybjsKIAotCQkJQlRfREJHKCIlcyB2b2ljZSBzZXR0aW5nIDB4JTA0eCIsIGhkZXYtPm5hbWUsIHNldHRpbmcpOworCWhkZXYtPnZvaWNlX3NldHRpbmcgPSBzZXR0aW5nOwogCi0JCQlpZiAoaGRldi0+bm90aWZ5KSB7Ci0JCQkJdGFza2xldF9kaXNhYmxlKCZoZGV2LT50eF90YXNrKTsKLQkJCQloZGV2LT5ub3RpZnkoaGRldiwgSENJX05PVElGWV9WT0lDRV9TRVRUSU5HKTsKLQkJCQl0YXNrbGV0X2VuYWJsZSgmaGRldi0+dHhfdGFzayk7Ci0JCQl9Ci0JCX0KKwlCVF9EQkcoIiVzIHZvaWNlIHNldHRpbmcgMHglMDR4IiwgaGRldi0+bmFtZSwgc2V0dGluZyk7CisKKwlpZiAoaGRldi0+bm90aWZ5KSB7CisJCXRhc2tsZXRfZGlzYWJsZSgmaGRldi0+dHhfdGFzayk7CisJCWhkZXYtPm5vdGlmeShoZGV2LCBIQ0lfTk9USUZZX1ZPSUNFX1NFVFRJTkcpOworCQl0YXNrbGV0X2VuYWJsZSgmaGRldi0+dHhfdGFzayk7CiAJfQogfQogCkBAIC0zMzcsNiArMzkxLDM1IEBACiAJaGNpX3JlcV9jb21wbGV0ZShoZGV2LCBzdGF0dXMpOwogfQogCitzdGF0aWMgdm9pZCBoY2lfY2NfcmVhZF9zc3BfbW9kZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGNpX3JwX3JlYWRfc3NwX21vZGUgKnJwID0gKHZvaWQgKikgc2tiLT5kYXRhOworCisJQlRfREJHKCIlcyBzdGF0dXMgMHgleCIsIGhkZXYtPm5hbWUsIHJwLT5zdGF0dXMpOworCisJaWYgKHJwLT5zdGF0dXMpCisJCXJldHVybjsKKworCWhkZXYtPnNzcF9tb2RlID0gcnAtPm1vZGU7Cit9CisKK3N0YXRpYyB2b2lkIGhjaV9jY193cml0ZV9zc3BfbW9kZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlfX3U4IHN0YXR1cyA9ICooKF9fdTggKikgc2tiLT5kYXRhKTsKKwl2b2lkICpzZW50OworCisJQlRfREJHKCIlcyBzdGF0dXMgMHgleCIsIGhkZXYtPm5hbWUsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm47CisKKwlzZW50ID0gaGNpX3NlbnRfY21kX2RhdGEoaGRldiwgSENJX09QX1dSSVRFX1NTUF9NT0RFKTsKKwlpZiAoIXNlbnQpCisJCXJldHVybjsKKworCWhkZXYtPnNzcF9tb2RlID0gKigoX191OCAqKSBzZW50KTsKK30KKwogc3RhdGljIHZvaWQgaGNpX2NjX3JlYWRfbG9jYWxfdmVyc2lvbihzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfdmVyc2lvbiAqcnAgPSAodm9pZCAqKSBza2ItPmRhdGE7CkBAIC0zNDcsOCArNDMwLDggQEAKIAkJcmV0dXJuOwogCiAJaGRldi0+aGNpX3ZlciA9IHJwLT5oY2lfdmVyOwotCWhkZXYtPmhjaV9yZXYgPSBidG9ocyhycC0+aGNpX3Jldik7Ci0JaGRldi0+bWFudWZhY3R1cmVyID0gYnRvaHMocnAtPm1hbnVmYWN0dXJlcik7CisJaGRldi0+aGNpX3JldiA9IF9fbGUxNl90b19jcHUocnAtPmhjaV9yZXYpOworCWhkZXYtPm1hbnVmYWN0dXJlciA9IF9fbGUxNl90b19jcHUocnAtPm1hbnVmYWN0dXJlcik7CiAKIAlCVF9EQkcoIiVzIG1hbnVmYWN0dXJlciAlZCBoY2kgdmVyICVkOiVkIiwgaGRldi0+bmFtZSwKIAkJCQkJaGRldi0+bWFudWZhY3R1cmVyLApAQCAtNTM2LDExICs2MTksMTE5IEBACiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIGhjaV9jc19hdXRoX3JlcXVlc3RlZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgX191OCBzdGF0dXMpCit7CisJc3RydWN0IGhjaV9jcF9hdXRoX3JlcXVlc3RlZCAqY3A7CisJc3RydWN0IGhjaV9jb25uICpjb25uOworCisJQlRfREJHKCIlcyBzdGF0dXMgMHgleCIsIGhkZXYtPm5hbWUsIHN0YXR1cyk7CisKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuOworCisJY3AgPSBoY2lfc2VudF9jbWRfZGF0YShoZGV2LCBIQ0lfT1BfQVVUSF9SRVFVRVNURUQpOworCWlmICghY3ApCisJCXJldHVybjsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgX19sZTE2X3RvX2NwdShjcC0+aGFuZGxlKSk7CisJaWYgKGNvbm4pIHsKKwkJaWYgKGNvbm4tPnN0YXRlID09IEJUX0NPTkZJRykgeworCQkJaGNpX3Byb3RvX2Nvbm5lY3RfY2ZtKGNvbm4sIHN0YXR1cyk7CisJCQloY2lfY29ubl9wdXQoY29ubik7CisJCX0KKwl9CisKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKK30KKworc3RhdGljIHZvaWQgaGNpX2NzX3NldF9jb25uX2VuY3J5cHQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIF9fdTggc3RhdHVzKQoreworCXN0cnVjdCBoY2lfY3Bfc2V0X2Nvbm5fZW5jcnlwdCAqY3A7CisJc3RydWN0IGhjaV9jb25uICpjb25uOworCisJQlRfREJHKCIlcyBzdGF0dXMgMHgleCIsIGhkZXYtPm5hbWUsIHN0YXR1cyk7CisKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuOworCisJY3AgPSBoY2lfc2VudF9jbWRfZGF0YShoZGV2LCBIQ0lfT1BfU0VUX0NPTk5fRU5DUllQVCk7CisJaWYgKCFjcCkKKwkJcmV0dXJuOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGNwLT5oYW5kbGUpKTsKKwlpZiAoY29ubikgeworCQlpZiAoY29ubi0+c3RhdGUgPT0gQlRfQ09ORklHKSB7CisJCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgc3RhdHVzKTsKKwkJCWhjaV9jb25uX3B1dChjb25uKTsKKwkJfQorCX0KKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworfQorCiBzdGF0aWMgdm9pZCBoY2lfY3NfcmVtb3RlX25hbWVfcmVxKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3U4IHN0YXR1cykKIHsKIAlCVF9EQkcoIiVzIHN0YXR1cyAweCV4IiwgaGRldi0+bmFtZSwgc3RhdHVzKTsKIH0KIAorc3RhdGljIHZvaWQgaGNpX2NzX3JlYWRfcmVtb3RlX2ZlYXR1cmVzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3U4IHN0YXR1cykKK3sKKwlzdHJ1Y3QgaGNpX2NwX3JlYWRfcmVtb3RlX2ZlYXR1cmVzICpjcDsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKKwlCVF9EQkcoIiVzIHN0YXR1cyAweCV4IiwgaGRldi0+bmFtZSwgc3RhdHVzKTsKKworCWlmICghc3RhdHVzKQorCQlyZXR1cm47CisKKwljcCA9IGhjaV9zZW50X2NtZF9kYXRhKGhkZXYsIEhDSV9PUF9SRUFEX1JFTU9URV9GRUFUVVJFUyk7CisJaWYgKCFjcCkKKwkJcmV0dXJuOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGNwLT5oYW5kbGUpKTsKKwlpZiAoY29ubikgeworCQlpZiAoY29ubi0+c3RhdGUgPT0gQlRfQ09ORklHKSB7CisJCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgc3RhdHVzKTsKKwkJCWhjaV9jb25uX3B1dChjb25uKTsKKwkJfQorCX0KKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworfQorCitzdGF0aWMgdm9pZCBoY2lfY3NfcmVhZF9yZW1vdGVfZXh0X2ZlYXR1cmVzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3U4IHN0YXR1cykKK3sKKwlzdHJ1Y3QgaGNpX2NwX3JlYWRfcmVtb3RlX2V4dF9mZWF0dXJlcyAqY3A7CisJc3RydWN0IGhjaV9jb25uICpjb25uOworCisJQlRfREJHKCIlcyBzdGF0dXMgMHgleCIsIGhkZXYtPm5hbWUsIHN0YXR1cyk7CisKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuOworCisJY3AgPSBoY2lfc2VudF9jbWRfZGF0YShoZGV2LCBIQ0lfT1BfUkVBRF9SRU1PVEVfRVhUX0ZFQVRVUkVTKTsKKwlpZiAoIWNwKQorCQlyZXR1cm47CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUoY3AtPmhhbmRsZSkpOworCWlmIChjb25uKSB7CisJCWlmIChjb25uLT5zdGF0ZSA9PSBCVF9DT05GSUcpIHsKKwkJCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBzdGF0dXMpOworCQkJaGNpX2Nvbm5fcHV0KGNvbm4pOworCQl9CisJfQorCisJaGNpX2Rldl91bmxvY2soaGRldik7Cit9CisKIHN0YXRpYyB2b2lkIGhjaV9jc19zZXR1cF9zeW5jX2Nvbm4oc3RydWN0IGhjaV9kZXYgKmhkZXYsIF9fdTggc3RhdHVzKQogewogCXN0cnVjdCBoY2lfY3Bfc2V0dXBfc3luY19jb25uICpjcDsKQEAgLTY1Myw2ICs4NDQsNyBAQAogCQltZW1jcHkoZGF0YS5kZXZfY2xhc3MsIGluZm8tPmRldl9jbGFzcywgMyk7CiAJCWRhdGEuY2xvY2tfb2Zmc2V0CT0gaW5mby0+Y2xvY2tfb2Zmc2V0OwogCQlkYXRhLnJzc2kJCT0gMHgwMDsKKwkJZGF0YS5zc3BfbW9kZQkJPSAweDAwOwogCQlpbmZvKys7CiAJCWhjaV9pbnF1aXJ5X2NhY2hlX3VwZGF0ZShoZGV2LCAmZGF0YSk7CiAJfQpAQCAtNjc1LDcgKzg2NywxNCBAQAogCiAJaWYgKCFldi0+c3RhdHVzKSB7CiAJCWNvbm4tPmhhbmRsZSA9IF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSk7Ci0JCWNvbm4tPnN0YXRlICA9IEJUX0NPTk5FQ1RFRDsKKworCQlpZiAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSykgeworCQkJY29ubi0+c3RhdGUgPSBCVF9DT05GSUc7CisJCQloY2lfY29ubl9ob2xkKGNvbm4pOworCQl9IGVsc2UKKwkJCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVEVEOworCisJCWhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTsKIAogCQlpZiAodGVzdF9iaXQoSENJX0FVVEgsICZoZGV2LT5mbGFncykpCiAJCQljb25uLT5saW5rX21vZGUgfD0gSENJX0xNX0FVVEg7CkBAIC02ODcsMzAgKzg4NiwxNyBAQAogCQlpZiAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSykgewogCQkJc3RydWN0IGhjaV9jcF9yZWFkX3JlbW90ZV9mZWF0dXJlcyBjcDsKIAkJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7Ci0JCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1JFQURfUkVNT1RFX0ZFQVRVUkVTLCBzaXplb2YoY3ApLCAmY3ApOwotCQl9Ci0KLQkJLyogU2V0IGxpbmsgcG9saWN5ICovCi0JCWlmIChjb25uLT50eXBlID09IEFDTF9MSU5LICYmIGhkZXYtPmxpbmtfcG9saWN5KSB7Ci0JCQlzdHJ1Y3QgaGNpX2NwX3dyaXRlX2xpbmtfcG9saWN5IGNwOwotCQkJY3AuaGFuZGxlID0gZXYtPmhhbmRsZTsKLQkJCWNwLnBvbGljeSA9IGNwdV90b19sZTE2KGhkZXYtPmxpbmtfcG9saWN5KTsKLQkJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfV1JJVEVfTElOS19QT0xJQ1ksIHNpemVvZihjcCksICZjcCk7CisJCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1JFQURfUkVNT1RFX0ZFQVRVUkVTLAorCQkJCQkJCXNpemVvZihjcCksICZjcCk7CiAJCX0KIAogCQkvKiBTZXQgcGFja2V0IHR5cGUgZm9yIGluY29taW5nIGNvbm5lY3Rpb24gKi8KLQkJaWYgKCFjb25uLT5vdXQpIHsKKwkJaWYgKCFjb25uLT5vdXQgJiYgaGRldi0+aGNpX3ZlciA8IDMpIHsKIAkJCXN0cnVjdCBoY2lfY3BfY2hhbmdlX2Nvbm5fcHR5cGUgY3A7CiAJCQljcC5oYW5kbGUgPSBldi0+aGFuZGxlOwotCQkJY3AucGt0X3R5cGUgPSAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSykgPwotCQkJCWNwdV90b19sZTE2KGhkZXYtPnBrdF90eXBlICYgQUNMX1BUWVBFX01BU0spOgotCQkJCWNwdV90b19sZTE2KGhkZXYtPnBrdF90eXBlICYgU0NPX1BUWVBFX01BU0spOwotCi0JCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX0NIQU5HRV9DT05OX1BUWVBFLCBzaXplb2YoY3ApLCAmY3ApOwotCQl9IGVsc2UgewotCQkJLyogVXBkYXRlIGRpc2Nvbm5lY3QgdGltZXIgKi8KLQkJCWhjaV9jb25uX2hvbGQoY29ubik7Ci0JCQloY2lfY29ubl9wdXQoY29ubik7CisJCQljcC5wa3RfdHlwZSA9IGNwdV90b19sZTE2KGNvbm4tPnBrdF90eXBlKTsKKwkJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfQ0hBTkdFX0NPTk5fUFRZUEUsCisJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAkJfQogCX0gZWxzZQogCQljb25uLT5zdGF0ZSA9IEJUX0NMT1NFRDsKQEAgLTczMCw5ICs5MTYsMTAgQEAKIAkJfQogCX0KIAotCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBldi0+c3RhdHVzKTsKLQlpZiAoZXYtPnN0YXR1cykKKwlpZiAoZXYtPnN0YXR1cykgeworCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CiAJCWhjaV9jb25uX2RlbChjb25uKTsKKwl9CiAKIHVubG9jazoKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKQEAgLTc1MiwxMCArOTM5LDE0IEBACiAKIAlpZiAobWFzayAmIEhDSV9MTV9BQ0NFUFQpIHsKIAkJLyogQ29ubmVjdGlvbiBhY2NlcHRlZCAqLworCQlzdHJ1Y3QgaW5xdWlyeV9lbnRyeSAqaWU7CiAJCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKIAogCQloY2lfZGV2X2xvY2soaGRldik7CiAKKwkJaWYgKChpZSA9IGhjaV9pbnF1aXJ5X2NhY2hlX2xvb2t1cChoZGV2LCAmZXYtPmJkYWRkcikpKQorCQkJbWVtY3B5KGllLT5kYXRhLmRldl9jbGFzcywgZXYtPmRldl9jbGFzcywgMyk7CisKIAkJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2JhKGhkZXYsIGV2LT5saW5rX3R5cGUsICZldi0+YmRhZGRyKTsKIAkJaWYgKCFjb25uKSB7CiAJCQlpZiAoIShjb25uID0gaGNpX2Nvbm5fYWRkKGhkZXYsIGV2LT5saW5rX3R5cGUsICZldi0+YmRhZGRyKSkpIHsKQEAgLTc4Niw3ICs5NzcsNyBAQAogCQkJc3RydWN0IGhjaV9jcF9hY2NlcHRfc3luY19jb25uX3JlcSBjcDsKIAogCQkJYmFjcHkoJmNwLmJkYWRkciwgJmV2LT5iZGFkZHIpOwotCQkJY3AucGt0X3R5cGUgPSBjcHVfdG9fbGUxNihoZGV2LT5lc2NvX3R5cGUpOworCQkJY3AucGt0X3R5cGUgPSBjcHVfdG9fbGUxNihjb25uLT5wa3RfdHlwZSk7CiAKIAkJCWNwLnR4X2JhbmR3aWR0aCAgID0gY3B1X3RvX2xlMzIoMHgwMDAwMWY0MCk7CiAJCQljcC5yeF9iYW5kd2lkdGggICA9IGNwdV90b19sZTMyKDB4MDAwMDFmNDApOwpAQCAtODIyLDYgKzEwMTMsOSBAQAogCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKSk7CiAJaWYgKGNvbm4pIHsKIAkJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CisKKwkJaGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pOworCiAJCWhjaV9wcm90b19kaXNjb25uX2luZChjb25uLCBldi0+cmVhc29uKTsKIAkJaGNpX2Nvbm5fZGVsKGNvbm4pOwogCX0KQEAgLTg0NSwxNSArMTAzOSwyOSBAQAogCiAJCWNsZWFyX2JpdChIQ0lfQ09OTl9BVVRIX1BFTkQsICZjb25uLT5wZW5kKTsKIAotCQloY2lfYXV0aF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CisJCWlmIChjb25uLT5zdGF0ZSA9PSBCVF9DT05GSUcpIHsKKwkJCWlmICghZXYtPnN0YXR1cyAmJiBoZGV2LT5zc3BfbW9kZSA+IDAgJiYKKwkJCQkJCQljb25uLT5zc3BfbW9kZSA+IDApIHsKKwkJCQlzdHJ1Y3QgaGNpX2NwX3NldF9jb25uX2VuY3J5cHQgY3A7CisJCQkJY3AuaGFuZGxlICA9IGV2LT5oYW5kbGU7CisJCQkJY3AuZW5jcnlwdCA9IDB4MDE7CisJCQkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9TRVRfQ09OTl9FTkNSWVBULAorCQkJCQkJCXNpemVvZihjcCksICZjcCk7CisJCQl9IGVsc2UgeworCQkJCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVEVEOworCQkJCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBldi0+c3RhdHVzKTsKKwkJCQloY2lfY29ubl9wdXQoY29ubik7CisJCQl9CisJCX0gZWxzZQorCQkJaGNpX2F1dGhfY2ZtKGNvbm4sIGV2LT5zdGF0dXMpOwogCiAJCWlmICh0ZXN0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkgewogCQkJaWYgKCFldi0+c3RhdHVzKSB7CiAJCQkJc3RydWN0IGhjaV9jcF9zZXRfY29ubl9lbmNyeXB0IGNwOwotCQkJCWNwLmhhbmRsZSAgPSBjcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOwotCQkJCWNwLmVuY3J5cHQgPSAxOwotCQkJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LAotCQkJCQlIQ0lfT1BfU0VUX0NPTk5fRU5DUllQVCwgc2l6ZW9mKGNwKSwgJmNwKTsKKwkJCQljcC5oYW5kbGUgID0gZXYtPmhhbmRsZTsKKwkJCQljcC5lbmNyeXB0ID0gMHgwMTsKKwkJCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1NFVF9DT05OX0VOQ1JZUFQsCisJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2xlYXJfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpOwogCQkJCWhjaV9lbmNyeXB0X2NmbShjb25uLCBldi0+c3RhdHVzLCAweDAwKTsKQEAgLTg4MywxNSArMTA5MSwyNCBAQAogCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKSk7CiAJaWYgKGNvbm4pIHsKIAkJaWYgKCFldi0+c3RhdHVzKSB7Ci0JCQlpZiAoZXYtPmVuY3J5cHQpCisJCQlpZiAoZXYtPmVuY3J5cHQpIHsKKwkJCQkvKiBFbmNyeXB0aW9uIGltcGxpZXMgYXV0aGVudGljYXRpb24gKi8KKwkJCQljb25uLT5saW5rX21vZGUgfD0gSENJX0xNX0FVVEg7CiAJCQkJY29ubi0+bGlua19tb2RlIHw9IEhDSV9MTV9FTkNSWVBUOwotCQkJZWxzZQorCQkJfSBlbHNlCiAJCQkJY29ubi0+bGlua19tb2RlICY9IH5IQ0lfTE1fRU5DUllQVDsKIAkJfQogCiAJCWNsZWFyX2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKTsKIAotCQloY2lfZW5jcnlwdF9jZm0oY29ubiwgZXYtPnN0YXR1cywgZXYtPmVuY3J5cHQpOworCQlpZiAoY29ubi0+c3RhdGUgPT0gQlRfQ09ORklHKSB7CisJCQlpZiAoIWV2LT5zdGF0dXMpCisJCQkJY29ubi0+c3RhdGUgPSBCVF9DT05ORUNURUQ7CisKKwkJCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBldi0+c3RhdHVzKTsKKwkJCWhjaV9jb25uX3B1dChjb25uKTsKKwkJfSBlbHNlCisJCQloY2lfZW5jcnlwdF9jZm0oY29ubiwgZXYtPnN0YXR1cywgZXYtPmVuY3J5cHQpOwogCX0KIAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwpAQCAtOTI2LDE0ICsxMTQzLDI5IEBACiAKIAlCVF9EQkcoIiVzIHN0YXR1cyAlZCIsIGhkZXYtPm5hbWUsIGV2LT5zdGF0dXMpOwogCi0JaWYgKGV2LT5zdGF0dXMpCi0JCXJldHVybjsKLQogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKSk7Ci0JaWYgKGNvbm4pCi0JCW1lbWNweShjb25uLT5mZWF0dXJlcywgZXYtPmZlYXR1cmVzLCA4KTsKKwlpZiAoY29ubikgeworCQlpZiAoIWV2LT5zdGF0dXMpCisJCQltZW1jcHkoY29ubi0+ZmVhdHVyZXMsIGV2LT5mZWF0dXJlcywgOCk7CisKKwkJaWYgKGNvbm4tPnN0YXRlID09IEJUX0NPTkZJRykgeworCQkJaWYgKCFldi0+c3RhdHVzICYmIGxtcF9zc3BfY2FwYWJsZShoZGV2KSAmJgorCQkJCQkJbG1wX3NzcF9jYXBhYmxlKGNvbm4pKSB7CisJCQkJc3RydWN0IGhjaV9jcF9yZWFkX3JlbW90ZV9leHRfZmVhdHVyZXMgY3A7CisJCQkJY3AuaGFuZGxlID0gZXYtPmhhbmRsZTsKKwkJCQljcC5wYWdlID0gMHgwMTsKKwkJCQloY2lfc2VuZF9jbWQoaGRldiwKKwkJCQkJSENJX09QX1JFQURfUkVNT1RFX0VYVF9GRUFUVVJFUywKKwkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOworCQkJfSBlbHNlIHsKKwkJCQljb25uLT5zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKKwkJCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CisJCQkJaGNpX2Nvbm5fcHV0KGNvbm4pOworCQkJfQorCQl9CisJfQogCiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CkBAIC05NzQsMTAgKzEyMDYsMjIgQEAKIAkJaGNpX2NjX3JvbGVfZGlzY292ZXJ5KGhkZXYsIHNrYik7CiAJCWJyZWFrOwogCisJY2FzZSBIQ0lfT1BfUkVBRF9MSU5LX1BPTElDWToKKwkJaGNpX2NjX3JlYWRfbGlua19wb2xpY3koaGRldiwgc2tiKTsKKwkJYnJlYWs7CisKIAljYXNlIEhDSV9PUF9XUklURV9MSU5LX1BPTElDWToKIAkJaGNpX2NjX3dyaXRlX2xpbmtfcG9saWN5KGhkZXYsIHNrYik7CiAJCWJyZWFrOwogCisJY2FzZSBIQ0lfT1BfUkVBRF9ERUZfTElOS19QT0xJQ1k6CisJCWhjaV9jY19yZWFkX2RlZl9saW5rX3BvbGljeShoZGV2LCBza2IpOworCQlicmVhazsKKworCWNhc2UgSENJX09QX1dSSVRFX0RFRl9MSU5LX1BPTElDWToKKwkJaGNpX2NjX3dyaXRlX2RlZl9saW5rX3BvbGljeShoZGV2LCBza2IpOworCQlicmVhazsKKwogCWNhc2UgSENJX09QX1JFU0VUOgogCQloY2lfY2NfcmVzZXQoaGRldiwgc2tiKTsKIAkJYnJlYWs7CkBAIC0xMDIyLDYgKzEyNjYsMTQgQEAKIAkJaGNpX2NjX2hvc3RfYnVmZmVyX3NpemUoaGRldiwgc2tiKTsKIAkJYnJlYWs7CiAKKwljYXNlIEhDSV9PUF9SRUFEX1NTUF9NT0RFOgorCQloY2lfY2NfcmVhZF9zc3BfbW9kZShoZGV2LCBza2IpOworCQlicmVhazsKKworCWNhc2UgSENJX09QX1dSSVRFX1NTUF9NT0RFOgorCQloY2lfY2Nfd3JpdGVfc3NwX21vZGUoaGRldiwgc2tiKTsKKwkJYnJlYWs7CisKIAljYXNlIEhDSV9PUF9SRUFEX0xPQ0FMX1ZFUlNJT046CiAJCWhjaV9jY19yZWFkX2xvY2FsX3ZlcnNpb24oaGRldiwgc2tiKTsKIAkJYnJlYWs7CkBAIC0xMDc2LDEwICsxMzI4LDI2IEBACiAJCWhjaV9jc19hZGRfc2NvKGhkZXYsIGV2LT5zdGF0dXMpOwogCQlicmVhazsKIAorCWNhc2UgSENJX09QX0FVVEhfUkVRVUVTVEVEOgorCQloY2lfY3NfYXV0aF9yZXF1ZXN0ZWQoaGRldiwgZXYtPnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBIQ0lfT1BfU0VUX0NPTk5fRU5DUllQVDoKKwkJaGNpX2NzX3NldF9jb25uX2VuY3J5cHQoaGRldiwgZXYtPnN0YXR1cyk7CisJCWJyZWFrOworCiAJY2FzZSBIQ0lfT1BfUkVNT1RFX05BTUVfUkVROgogCQloY2lfY3NfcmVtb3RlX25hbWVfcmVxKGhkZXYsIGV2LT5zdGF0dXMpOwogCQlicmVhazsKIAorCWNhc2UgSENJX09QX1JFQURfUkVNT1RFX0ZFQVRVUkVTOgorCQloY2lfY3NfcmVhZF9yZW1vdGVfZmVhdHVyZXMoaGRldiwgZXYtPnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBIQ0lfT1BfUkVBRF9SRU1PVEVfRVhUX0ZFQVRVUkVTOgorCQloY2lfY3NfcmVhZF9yZW1vdGVfZXh0X2ZlYXR1cmVzKGhkZXYsIGV2LT5zdGF0dXMpOworCQlicmVhazsKKwogCWNhc2UgSENJX09QX1NFVFVQX1NZTkNfQ09OTjoKIAkJaGNpX2NzX3NldHVwX3N5bmNfY29ubihoZGV2LCBldi0+c3RhdHVzKTsKIAkJYnJlYWs7CkBAIC0xMjM1LDYgKzE1MDMsMjIgQEAKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGhjaV9wa3RfdHlwZV9jaGFuZ2VfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoY2lfZXZfcGt0X3R5cGVfY2hhbmdlICpldiA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKKwlCVF9EQkcoIiVzIHN0YXR1cyAlZCIsIGhkZXYtPm5hbWUsIGV2LT5zdGF0dXMpOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpKTsKKwlpZiAoY29ubiAmJiAhZXYtPnN0YXR1cykKKwkJY29ubi0+cGt0X3R5cGUgPSBfX2xlMTZfdG9fY3B1KGV2LT5wa3RfdHlwZSk7CisKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGhjaV9wc2Nhbl9yZXBfbW9kZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGhjaV9ldl9wc2Nhbl9yZXBfbW9kZSAqZXYgPSAodm9pZCAqKSBza2ItPmRhdGE7CkBAIC0xMjc1LDYgKzE1NTksNyBAQAogCQkJbWVtY3B5KGRhdGEuZGV2X2NsYXNzLCBpbmZvLT5kZXZfY2xhc3MsIDMpOwogCQkJZGF0YS5jbG9ja19vZmZzZXQJPSBpbmZvLT5jbG9ja19vZmZzZXQ7CiAJCQlkYXRhLnJzc2kJCT0gaW5mby0+cnNzaTsKKwkJCWRhdGEuc3NwX21vZGUJCT0gMHgwMDsKIAkJCWluZm8rKzsKIAkJCWhjaV9pbnF1aXJ5X2NhY2hlX3VwZGF0ZShoZGV2LCAmZGF0YSk7CiAJCX0KQEAgLTEyODksNiArMTU3NCw3IEBACiAJCQltZW1jcHkoZGF0YS5kZXZfY2xhc3MsIGluZm8tPmRldl9jbGFzcywgMyk7CiAJCQlkYXRhLmNsb2NrX29mZnNldAk9IGluZm8tPmNsb2NrX29mZnNldDsKIAkJCWRhdGEucnNzaQkJPSBpbmZvLT5yc3NpOworCQkJZGF0YS5zc3BfbW9kZQkJPSAweDAwOwogCQkJaW5mbysrOwogCQkJaGNpX2lucXVpcnlfY2FjaGVfdXBkYXRlKGhkZXYsICZkYXRhKTsKIAkJfQpAQCAtMTI5OSw3ICsxNTg1LDQzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcmVtb3RlX2V4dF9mZWF0dXJlc19ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGhjaV9ldl9yZW1vdGVfZXh0X2ZlYXR1cmVzICpldiA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKIAlCVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSkpOworCWlmIChjb25uKSB7CisJCWlmICghZXYtPnN0YXR1cyAmJiBldi0+cGFnZSA9PSAweDAxKSB7CisJCQlzdHJ1Y3QgaW5xdWlyeV9lbnRyeSAqaWU7CisKKwkJCWlmICgoaWUgPSBoY2lfaW5xdWlyeV9jYWNoZV9sb29rdXAoaGRldiwgJmNvbm4tPmRzdCkpKQorCQkJCWllLT5kYXRhLnNzcF9tb2RlID0gKGV2LT5mZWF0dXJlc1swXSAmIDB4MDEpOworCisJCQljb25uLT5zc3BfbW9kZSA9IChldi0+ZmVhdHVyZXNbMF0gJiAweDAxKTsKKwkJfQorCisJCWlmIChjb25uLT5zdGF0ZSA9PSBCVF9DT05GSUcpIHsKKwkJCWlmICghZXYtPnN0YXR1cyAmJiBoZGV2LT5zc3BfbW9kZSA+IDAgJiYKKwkJCQkJCQljb25uLT5zc3BfbW9kZSA+IDApIHsKKwkJCQlpZiAoY29ubi0+b3V0KSB7CisJCQkJCXN0cnVjdCBoY2lfY3BfYXV0aF9yZXF1ZXN0ZWQgY3A7CisJCQkJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7CisJCQkJCWhjaV9zZW5kX2NtZChoZGV2LAorCQkJCQkJSENJX09QX0FVVEhfUkVRVUVTVEVELAorCQkJCQkJCXNpemVvZihjcCksICZjcCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQljb25uLT5zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKKwkJCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CisJCQkJaGNpX2Nvbm5fcHV0KGNvbm4pOworCQkJfQorCQl9CisJfQorCisJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfc3luY19jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTEzMTIsMTIgKzE2MzQsMjIgQEAKIAloY2lfZGV2X2xvY2soaGRldik7CiAKIAljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgZXYtPmxpbmtfdHlwZSwgJmV2LT5iZGFkZHIpOwotCWlmICghY29ubikKLQkJZ290byB1bmxvY2s7CisJaWYgKCFjb25uKSB7CisJCWlmIChldi0+bGlua190eXBlID09IEVTQ09fTElOSykKKwkJCWdvdG8gdW5sb2NrOworCisJCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBFU0NPX0xJTkssICZldi0+YmRhZGRyKTsKKwkJaWYgKCFjb25uKQorCQkJZ290byB1bmxvY2s7CisKKwkJY29ubi0+dHlwZSA9IFNDT19MSU5LOworCX0KIAogCWlmICghZXYtPnN0YXR1cykgewogCQljb25uLT5oYW5kbGUgPSBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpOwogCQljb25uLT5zdGF0ZSAgPSBCVF9DT05ORUNURUQ7CisKKwkJaGNpX2Nvbm5fYWRkX3N5c2ZzKGNvbm4pOwogCX0gZWxzZQogCQljb25uLT5zdGF0ZSA9IEJUX0NMT1NFRDsKIApAQCAtMTM3MSw2ICsxNzAzLDcgQEAKIAkJbWVtY3B5KGRhdGEuZGV2X2NsYXNzLCBpbmZvLT5kZXZfY2xhc3MsIDMpOwogCQlkYXRhLmNsb2NrX29mZnNldCAgICAgICA9IGluZm8tPmNsb2NrX29mZnNldDsKIAkJZGF0YS5yc3NpICAgICAgICAgICAgICAgPSBpbmZvLT5yc3NpOworCQlkYXRhLnNzcF9tb2RlCQk9IDB4MDE7CiAJCWluZm8rKzsKIAkJaGNpX2lucXVpcnlfY2FjaGVfdXBkYXRlKGhkZXYsICZkYXRhKTsKIAl9CkBAIC0xMzc4LDYgKzE3MTEsNTMgQEAKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGhjaV9pb19jYXBhX3JlcXVlc3RfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoY2lfZXZfaW9fY2FwYV9yZXF1ZXN0ICpldiA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKKwlCVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssICZldi0+YmRhZGRyKTsKKwlpZiAoY29ubikKKwkJaGNpX2Nvbm5faG9sZChjb25uKTsKKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3NpbXBsZV9wYWlyX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGNpX2V2X3NpbXBsZV9wYWlyX2NvbXBsZXRlICpldiA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKKwlCVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssICZldi0+YmRhZGRyKTsKKwlpZiAoY29ubikKKwkJaGNpX2Nvbm5fcHV0KGNvbm4pOworCisJaGNpX2Rldl91bmxvY2soaGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcmVtb3RlX2hvc3RfZmVhdHVyZXNfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoY2lfZXZfcmVtb3RlX2hvc3RfZmVhdHVyZXMgKmV2ID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpbnF1aXJ5X2VudHJ5ICppZTsKKworCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWlmICgoaWUgPSBoY2lfaW5xdWlyeV9jYWNoZV9sb29rdXAoaGRldiwgJmV2LT5iZGFkZHIpKSkKKwkJaWUtPmRhdGEuc3NwX21vZGUgPSAoZXYtPmZlYXR1cmVzWzBdICYgMHgwMSk7CisKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKK30KKwogdm9pZCBoY2lfZXZlbnRfcGFja2V0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBoY2lfZXZlbnRfaGRyICpoZHIgPSAodm9pZCAqKSBza2ItPmRhdGE7CkBAIC0xNDcwLDYgKzE4NTAsMTAgQEAKIAkJaGNpX2Nsb2NrX29mZnNldF9ldnQoaGRldiwgc2tiKTsKIAkJYnJlYWs7CiAKKwljYXNlIEhDSV9FVl9QS1RfVFlQRV9DSEFOR0U6CisJCWhjaV9wa3RfdHlwZV9jaGFuZ2VfZXZ0KGhkZXYsIHNrYik7CisJCWJyZWFrOworCiAJY2FzZSBIQ0lfRVZfUFNDQU5fUkVQX01PREU6CiAJCWhjaV9wc2Nhbl9yZXBfbW9kZV9ldnQoaGRldiwgc2tiKTsKIAkJYnJlYWs7CkBAIC0xNDk4LDYgKzE4ODIsMTggQEAKIAkJaGNpX2V4dGVuZGVkX2lucXVpcnlfcmVzdWx0X2V2dChoZGV2LCBza2IpOwogCQlicmVhazsKIAorCWNhc2UgSENJX0VWX0lPX0NBUEFfUkVRVUVTVDoKKwkJaGNpX2lvX2NhcGFfcmVxdWVzdF9ldnQoaGRldiwgc2tiKTsKKwkJYnJlYWs7CisKKwljYXNlIEhDSV9FVl9TSU1QTEVfUEFJUl9DT01QTEVURToKKwkJaGNpX3NpbXBsZV9wYWlyX2NvbXBsZXRlX2V2dChoZGV2LCBza2IpOworCQlicmVhazsKKworCWNhc2UgSENJX0VWX1JFTU9URV9IT1NUX0ZFQVRVUkVTOgorCQloY2lfcmVtb3RlX2hvc3RfZmVhdHVyZXNfZXZ0KGhkZXYsIHNrYik7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJQlRfREJHKCIlcyBldmVudCAweCV4IiwgaGRldi0+bmFtZSwgZXZlbnQpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwppbmRleCA3NDdmYWJkLi5kNjI1NzliIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCkBAIC0xOTMsMTkgKzE5MywxMSBAQAogCiAJCXJldHVybiAwOwogCi0JY2FzZSBIQ0lTRVRTRUNNR1I6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRUFDQ0VTOwotCi0JCWlmIChhcmcpCi0JCQlzZXRfYml0KEhDSV9TRUNNR1IsICZoZGV2LT5mbGFncyk7Ci0JCWVsc2UKLQkJCWNsZWFyX2JpdChIQ0lfU0VDTUdSLCAmaGRldi0+ZmxhZ3MpOwotCi0JCXJldHVybiAwOwotCiAJY2FzZSBIQ0lHRVRDT05OSU5GTzoKLQkJcmV0dXJuIGhjaV9nZXRfY29ubl9pbmZvKGhkZXYsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJCXJldHVybiBoY2lfZ2V0X2Nvbm5faW5mbyhoZGV2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKKworCWNhc2UgSENJR0VUQVVUSElORk86CisJCXJldHVybiBoY2lfZ2V0X2F1dGhfaW5mbyhoZGV2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKIAogCWRlZmF1bHQ6CiAJCWlmIChoZGV2LT5pb2N0bCkKQEAgLTIxNyw3ICsyMDksNyBAQAogc3RhdGljIGludCBoY2lfc29ja19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CiAJaW50IGVycjsKIAogCUJUX0RCRygiY21kICV4IGFyZyAlbHgiLCBjbWQsIGFyZyk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwppbmRleCA4NDM2MGMxLi5jODViZjhmIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKQEAgLTExMywxMSArMTEzLDEzIEBACiAJCXN0cnVjdCBpbnF1aXJ5X2RhdGEgKmRhdGEgPSAmZS0+ZGF0YTsKIAkJYmRhZGRyX3QgYmRhZGRyOwogCQliYXN3YXAoJmJkYWRkciwgJmRhdGEtPmJkYWRkcik7Ci0JCW4gKz0gc3ByaW50ZihidWYgKyBuLCAiJXMgJWQgJWQgJWQgMHglLjJ4JS4yeCUuMnggMHglLjR4ICVkICV1XG4iLAorCQluICs9IHNwcmludGYoYnVmICsgbiwgIiVzICVkICVkICVkIDB4JS4yeCUuMnglLjJ4IDB4JS40eCAlZCAlZCAldVxuIiwKIAkJCQliYXRvc3RyKCZiZGFkZHIpLAotCQkJCWRhdGEtPnBzY2FuX3JlcF9tb2RlLCBkYXRhLT5wc2Nhbl9wZXJpb2RfbW9kZSwgZGF0YS0+cHNjYW5fbW9kZSwKLQkJCQlkYXRhLT5kZXZfY2xhc3NbMl0sIGRhdGEtPmRldl9jbGFzc1sxXSwgZGF0YS0+ZGV2X2NsYXNzWzBdLAotCQkJCV9fbGUxNl90b19jcHUoZGF0YS0+Y2xvY2tfb2Zmc2V0KSwgZGF0YS0+cnNzaSwgZS0+dGltZXN0YW1wKTsKKwkJCQlkYXRhLT5wc2Nhbl9yZXBfbW9kZSwgZGF0YS0+cHNjYW5fcGVyaW9kX21vZGUsCisJCQkJZGF0YS0+cHNjYW5fbW9kZSwgZGF0YS0+ZGV2X2NsYXNzWzJdLAorCQkJCWRhdGEtPmRldl9jbGFzc1sxXSwgZGF0YS0+ZGV2X2NsYXNzWzBdLAorCQkJCV9fbGUxNl90b19jcHUoZGF0YS0+Y2xvY2tfb2Zmc2V0KSwKKwkJCQlkYXRhLT5yc3NpLCBkYXRhLT5zc3BfbW9kZSwgZS0+dGltZXN0YW1wKTsKIAl9CiAKIAloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKQEAgLTI0OSwxNSArMjUxLDI4IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGJhdG9zdHIoJmJkYWRkcikpOwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X2Nvbm5fZmVhdHVyZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBoY2lfY29ubiAqY29ubiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCQljb25uLT5mZWF0dXJlc1swXSwgY29ubi0+ZmVhdHVyZXNbMV0sCisJCQkJY29ubi0+ZmVhdHVyZXNbMl0sIGNvbm4tPmZlYXR1cmVzWzNdLAorCQkJCWNvbm4tPmZlYXR1cmVzWzRdLCBjb25uLT5mZWF0dXJlc1s1XSwKKwkJCQljb25uLT5mZWF0dXJlc1s2XSwgY29ubi0+ZmVhdHVyZXNbN10pOworfQorCiAjZGVmaW5lIENPTk5fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpIFwKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGNvbm5fYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKIAogc3RhdGljIENPTk5fQVRUUih0eXBlLCBTX0lSVUdPLCBzaG93X2Nvbm5fdHlwZSwgTlVMTCk7CiBzdGF0aWMgQ09OTl9BVFRSKGFkZHJlc3MsIFNfSVJVR08sIHNob3dfY29ubl9hZGRyZXNzLCBOVUxMKTsKK3N0YXRpYyBDT05OX0FUVFIoZmVhdHVyZXMsIFNfSVJVR08sIHNob3dfY29ubl9mZWF0dXJlcywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqY29ubl9hdHRyc1tdID0gewogCSZjb25uX2F0dHJfdHlwZSwKIAkmY29ubl9hdHRyX2FkZHJlc3MsCisJJmNvbm5fYXR0cl9mZWF0dXJlcywKIAlOVUxMCiB9OwogCkBAIC0yOTYsNyArMzExLDYgQEAKIHZvaWQgaGNpX2Nvbm5fYWRkX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIHsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tPmhkZXY7Ci0JYmRhZGRyX3QgKmJhID0gJmNvbm4tPmRzdDsKIAogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCkBAIC0zMDUsMTEgKzMxOSw4IEBACiAKIAljb25uLT5kZXYucmVsZWFzZSA9IGJ0X3JlbGVhc2U7CiAKLQlzbnByaW50Zihjb25uLT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwKLQkJCSIlcyUyLjJYJTIuMlglMi4yWCUyLjJYJTIuMlglMi4yWCIsCi0JCQljb25uLT50eXBlID09IEFDTF9MSU5LID8gImFjbCIgOiAic2NvIiwKLQkJCWJhLT5iWzVdLCBiYS0+Yls0XSwgYmEtPmJbM10sCi0JCQliYS0+YlsyXSwgYmEtPmJbMV0sIGJhLT5iWzBdKTsKKwlzbnByaW50Zihjb25uLT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgIiVzOiVkIiwKKwkJCQkJaGRldi0+bmFtZSwgY29ubi0+aGFuZGxlKTsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmY29ubi0+ZGV2LCBjb25uKTsKIApAQCAtMzg3LDEwICszOTgsNiBAQAogCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgYnRfYXR0cnNbaV0pIDwgMCkKIAkJCUJUX0VSUigiRmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2UgYXR0cmlidXRlIik7CiAKLQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJmJ0X2NsYXNzLT5zdWJzeXMua29iaiwKLQkJCQkmZGV2LT5rb2JqLCBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpIDwgMCkKLQkJQlRfRVJSKCJGYWlsZWQgdG8gY3JlYXRlIGNsYXNzIHN5bWxpbmsiKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0zOTgsOSArNDA1LDYgQEAKIHsKIAlCVF9EQkcoIiVwIG5hbWUgJXMgdHlwZSAlZCIsIGhkZXYsIGhkZXYtPm5hbWUsIGhkZXYtPnR5cGUpOwogCi0Jc3lzZnNfcmVtb3ZlX2xpbmsoJmJ0X2NsYXNzLT5zdWJzeXMua29iaiwKLQkJCQkJa29iamVjdF9uYW1lKCZoZGV2LT5kZXYua29iaikpOwotCiAJZGV2aWNlX2RlbCgmaGRldi0+ZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggNTE5Y2RiOS4uOTY0MzRkNyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC01ODEsNiArNTgxLDEyIEBACiAJCWhpZF9mcmVlX2RldmljZShzZXNzaW9uLT5oaWQpOwogCX0KIAorCS8qIFdha2V1cCB1c2VyLXNwYWNlIHBvbGxpbmcgZm9yIHNvY2tldCBlcnJvcnMgKi8KKwlzZXNzaW9uLT5pbnRyX3NvY2stPnNrLT5za19lcnIgPSBFVU5BVENIOworCXNlc3Npb24tPmN0cmxfc29jay0+c2stPnNrX2VyciA9IEVVTkFUQ0g7CisKKwloaWRwX3NjaGVkdWxlKHNlc3Npb24pOworCiAJZnB1dChzZXNzaW9uLT5pbnRyX3NvY2stPmZpbGUpOwogCiAJd2FpdF9ldmVudF90aW1lb3V0KCooY3RybF9zay0+c2tfc2xlZXApLApAQCAtODc5LDYgKzg4NSwxMCBAQAogCQkJc2tiX3F1ZXVlX3B1cmdlKCZzZXNzaW9uLT5jdHJsX3RyYW5zbWl0KTsKIAkJCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+aW50cl90cmFuc21pdCk7CiAKKwkJCS8qIFdha2V1cCB1c2VyLXNwYWNlIHBvbGxpbmcgZm9yIHNvY2tldCBlcnJvcnMgKi8KKwkJCXNlc3Npb24tPmludHJfc29jay0+c2stPnNrX2VyciA9IEVVTkFUQ0g7CisJCQlzZXNzaW9uLT5jdHJsX3NvY2stPnNrLT5za19lcnIgPSBFVU5BVENIOworCiAJCQkvKiBLaWxsIHNlc3Npb24gdGhyZWFkICovCiAJCQlhdG9taWNfaW5jKCZzZXNzaW9uLT50ZXJtaW5hdGUpOwogCQkJaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCA2ZTE4MGQyLi5jMTIzOTg1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC01NSw3ICs1NSw3IEBACiAjZGVmaW5lIEJUX0RCRyhELi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgVkVSU0lPTiAiMi45IgorI2RlZmluZSBWRVJTSU9OICIyLjEwIgogCiBzdGF0aWMgdTMyIGwyY2FwX2ZlYXRfbWFzayA9IDB4MDAwMDsKIApAQCAtNzYsMTEgKzc2LDIxIEBACiBzdGF0aWMgdm9pZCBsMmNhcF9zb2NrX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopIGFyZzsKKwlpbnQgcmVhc29uOwogCiAJQlRfREJHKCJzb2NrICVwIHN0YXRlICVkIiwgc2ssIHNrLT5za19zdGF0ZSk7CiAKIAliaF9sb2NrX3NvY2soc2spOwotCV9fbDJjYXBfc29ja19jbG9zZShzaywgRVRJTUVET1VUKTsKKworCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCAmJgorCQkJKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgKEwyQ0FQX0xNX0FVVEggfAorCQkJCQlMMkNBUF9MTV9FTkNSWVBUIHwgTDJDQVBfTE1fU0VDVVJFKSkpCisJCXJlYXNvbiA9IEVDT05OUkVGVVNFRDsKKwllbHNlCisJCXJlYXNvbiA9IEVUSU1FRE9VVDsKKworCV9fbDJjYXBfc29ja19jbG9zZShzaywgcmVhc29uKTsKKwogCWJoX3VubG9ja19zb2NrKHNrKTsKIAogCWwyY2FwX3NvY2tfa2lsbChzayk7CkBAIC0yNDAsNyArMjUwLDcgQEAKIAkJaGNpX2Nvbm5fcHV0KGNvbm4tPmhjb24pOwogCX0KIAotCXNrLT5za19zdGF0ZSAgPSBCVF9DTE9TRUQ7CisJc2stPnNrX3N0YXRlID0gQlRfQ0xPU0VEOwogCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKIAogCWlmIChlcnIpCkBAIC0yNTMsNiArMjYzLDIxIEBACiAJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOwogfQogCisvKiBTZXJ2aWNlIGxldmVsIHNlY3VyaXR5ICovCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jaGVja19saW5rX21vZGUoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCisJaWYgKChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX0VOQ1JZUFQpIHx8CisJCQkJKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fU0VDVVJFKSkKKwkJcmV0dXJuIGhjaV9jb25uX2VuY3J5cHQoY29ubi0+aGNvbik7CisKKwlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9BVVRIKQorCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uLT5oY29uKTsKKworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW5saW5lIHU4IGwyY2FwX2dldF9pZGVudChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKIHsKIAl1OCBpZDsKQEAgLTI4Nyw2ICszMTIsMzYgQEAKIAlyZXR1cm4gaGNpX3NlbmRfYWNsKGNvbm4tPmhjb24sIHNrYiwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIGwyY2FwX2RvX3N0YXJ0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKworCWlmIChjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQpIHsKKwkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKKwkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7CisJCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOworCisJCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOworCisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAorCQkJCQlMMkNBUF9DT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IGwyY2FwX2luZm9fcmVxIHJlcTsKKwkJcmVxLnR5cGUgPSBjcHVfdG9fbGUxNihMMkNBUF9JVF9GRUFUX01BU0spOworCisJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQ7CisJCWNvbm4tPmluZm9faWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7CisKKwkJbW9kX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyLCBqaWZmaWVzICsKKwkJCQkJbXNlY3NfdG9famlmZmllcyhMMkNBUF9JTkZPX1RJTUVPVVQpKTsKKworCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjb25uLT5pbmZvX2lkZW50LAorCQkJCQlMMkNBUF9JTkZPX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOworCX0KK30KKwogLyogLS0tLSBMMkNBUCBjb25uZWN0aW9ucyAtLS0tICovCiBzdGF0aWMgdm9pZCBsMmNhcF9jb25uX3N0YXJ0KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKQogewpAQCAtMzAxLDE3ICszNTYsNjMgQEAKIAkJYmhfbG9ja19zb2NrKHNrKTsKIAogCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQpIHsKKwkJCWJoX3VubG9ja19zb2NrKHNrKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKSB7CisJCQlpZiAobDJjYXBfY2hlY2tfbGlua19tb2RlKHNrKSkgeworCQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7CisJCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOworCQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CisKKwkJCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOworCisJCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKKwkJCQkJTDJDQVBfQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIpIHsKKwkJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CisJCQlyc3Auc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJCQlyc3AuZGNpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisKKwkJCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7CisJCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOworCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKKwkJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJCQl9IGVsc2UgeworCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9QRU5EKTsKKwkJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfQVVUSEVOX1BFTkQpOworCQkJfQorCisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAorCQkJCQlMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOworCQl9CisKKwkJYmhfdW5sb2NrX3NvY2soc2spOworCX0KKworCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbDJjYXBfY29ubl9yZWFkeShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKK3sKKwlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsID0gJmNvbm4tPmNoYW5fbGlzdDsKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKKworCXJlYWRfbG9jaygmbC0+bG9jayk7CisKKwlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKKwkJYmhfbG9ja19zb2NrKHNrKTsKKworCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQpIHsKIAkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwogCQkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVEVEOwogCQkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7Ci0JCX0gZWxzZSBpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QpIHsKLQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7Ci0JCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOwotCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJcmVxLnBzbSAgPSBsMmNhcF9waShzayktPnBzbTsKLQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCi0JCQkJCUwyQ0FQX0NPTk5fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7Ci0JCX0KKwkJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCkKKwkJCWwyY2FwX2RvX3N0YXJ0KHNrKTsKIAogCQliaF91bmxvY2tfc29jayhzayk7CiAJfQpAQCAtMzE5LDI2ICs0MjAsNiBAQAogCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgbDJjYXBfY29ubl9yZWFkeShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKLXsKLQlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKLQotCWlmIChjb25uLT5jaGFuX2xpc3QuaGVhZCB8fCAhaGxpc3RfZW1wdHkoJmwyY2FwX3NrX2xpc3QuaGVhZCkpIHsKLQkJc3RydWN0IGwyY2FwX2luZm9fcmVxIHJlcTsKLQotCQlyZXEudHlwZSA9IGNwdV90b19sZTE2KEwyQ0FQX0lUX0ZFQVRfTUFTSyk7Ci0KLQkJY29ubi0+aW5mb19zdGF0ZSB8PSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVDsKLQkJY29ubi0+aW5mb19pZGVudCA9IGwyY2FwX2dldF9pZGVudChjb25uKTsKLQotCQltb2RfdGltZXIoJmNvbm4tPmluZm9fdGltZXIsCi0JCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhMMkNBUF9JTkZPX1RJTUVPVVQpKTsKLQotCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjb25uLT5pbmZvX2lkZW50LAotCQkJCQlMMkNBUF9JTkZPX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOwotCX0KLX0KLQogLyogTm90aWZ5IHNvY2tldHMgdGhhdCB3ZSBjYW5ub3QgZ3VhcmFudHkgcmVsaWFiaWxpdHkgYW55bW9yZSAqLwogc3RhdGljIHZvaWQgbDJjYXBfY29ubl91bnJlbGlhYmxlKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBpbnQgZXJyKQogewpAQCAtMzg4LDcgKzQ2OSw4IEBACiAKIAljb25uLT5mZWF0X21hc2sgPSAwOwogCi0Jc2V0dXBfdGltZXIoJmNvbm4tPmluZm9fdGltZXIsIGwyY2FwX2luZm9fdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpY29ubik7CisJc2V0dXBfdGltZXIoJmNvbm4tPmluZm9fdGltZXIsIGwyY2FwX2luZm9fdGltZW91dCwKKwkJCQkJCSh1bnNpZ25lZCBsb25nKSBjb25uKTsKIAogCXNwaW5fbG9ja19pbml0KCZjb25uLT5sb2NrKTsKIAlyd2xvY2tfaW5pdCgmY29ubi0+Y2hhbl9saXN0LmxvY2spOwpAQCAtNTAwLDcgKzU4Miw3IEBACiAJd2hpbGUgKChzayA9IGJ0X2FjY2VwdF9kZXF1ZXVlKHBhcmVudCwgTlVMTCkpKQogCQlsMmNhcF9zb2NrX2Nsb3NlKHNrKTsKIAotCXBhcmVudC0+c2tfc3RhdGUgID0gQlRfQ0xPU0VEOworCXBhcmVudC0+c2tfc3RhdGUgPSBCVF9DTE9TRUQ7CiAJc29ja19zZXRfZmxhZyhwYXJlbnQsIFNPQ0tfWkFQUEVEKTsKIH0KIApAQCAtNTQzLDkgKzYyNSw4IEBACiAJCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CiAJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksCiAJCQkJCUwyQ0FQX0RJU0NPTk5fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7Ci0JCX0gZWxzZSB7CisJCX0gZWxzZQogCQkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7Ci0JCX0KIAkJYnJlYWs7CiAKIAljYXNlIEJUX0NPTk5FQ1Q6CkBAIC02MTQsOSArNjk1LDkgQEAKIAlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKIAogCXNrLT5za19wcm90b2NvbCA9IHByb3RvOwotCXNrLT5za19zdGF0ZSAgICA9IEJUX09QRU47CisJc2stPnNrX3N0YXRlID0gQlRfT1BFTjsKIAotCXNldHVwX3RpbWVyKCZzay0+c2tfdGltZXIsIGwyY2FwX3NvY2tfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpc2spOworCXNldHVwX3RpbWVyKCZzay0+c2tfdGltZXIsIGwyY2FwX3NvY2tfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpIHNrKTsKIAogCWJ0X3NvY2tfbGluaygmbDJjYXBfc2tfbGlzdCwgc2spOwogCXJldHVybiBzazsKQEAgLTcyOSwyMiArODEwLDExIEBACiAJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIHNrLT5za19zbmR0aW1lbyk7CiAKIAlpZiAoaGNvbi0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEKSB7Ci0JCWlmICghKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVCkpIHsKLQkJCWwyY2FwX2Nvbm5fcmVhZHkoY29ubik7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQotCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKLQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7Ci0JCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOwotCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJcmVxLnBzbSAgPSBsMmNhcF9waShzayktPnBzbTsKLQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCi0JCQkJCUwyQ0FQX0NPTk5fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7Ci0JCX0gZWxzZSB7CisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCkgewogCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CiAJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNURUQ7Ci0JCX0KKwkJfSBlbHNlCisJCQlsMmNhcF9kb19zdGFydChzayk7CiAJfQogCiBkb25lOgpAQCAtMTE0NSw3ICsxMjE1LDggQEAKIAkJX19sMmNhcF9zb2NrX2Nsb3NlKHNrLCAwKTsKIAogCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0xJTkdFUikgJiYgc2stPnNrX2xpbmdlcnRpbWUpCi0JCQllcnIgPSBidF9zb2NrX3dhaXRfc3RhdGUoc2ssIEJUX0NMT1NFRCwgc2stPnNrX2xpbmdlcnRpbWUpOworCQkJZXJyID0gYnRfc29ja193YWl0X3N0YXRlKHNrLCBCVF9DTE9TRUQsCisJCQkJCQkJc2stPnNrX2xpbmdlcnRpbWUpOwogCX0KIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnI7CkBAIC0xMTg5LDYgKzEyNjAsMTEgQEAKIAkJICovCiAJCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOwogCX0KKworCWlmIChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1NFQ1VSRSkgeworCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwkJaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KGNvbm4tPmhjb24pOworCX0KIH0KIAogLyogQ29weSBmcmFtZSB0byBhbGwgcmF3IHNvY2tldHMgb24gdGhhdCBjb25uZWN0aW9uICovCkBAIC0xNDc3LDcgKzE1NTMsNyBAQAogCXN0cnVjdCBsMmNhcF9jb25uX3JlcSAqcmVxID0gKHN0cnVjdCBsMmNhcF9jb25uX3JlcSAqKSBkYXRhOwogCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CiAJc3RydWN0IHNvY2sgKnNrLCAqcGFyZW50OwotCWludCByZXN1bHQgPSAwLCBzdGF0dXMgPSAwOworCWludCByZXN1bHQsIHN0YXR1cyA9IDA7CiAKIAl1MTYgZGNpZCA9IDAsIHNjaWQgPSBfX2xlMTZfdG9fY3B1KHJlcS0+c2NpZCk7CiAJX19sZTE2IHBzbSAgPSByZXEtPnBzbTsKQEAgLTE1MjYsMjUgKzE2MDIsMjQgQEAKIAogCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBzay0+c2tfc25kdGltZW8pOwogCi0JLyogU2VydmljZSBsZXZlbCBzZWN1cml0eSAqLwotCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7Ci0Jc3RhdHVzID0gTDJDQVBfQ1NfQVVUSEVOX1BFTkQ7Ci0Jc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVDI7CiAJbDJjYXBfcGkoc2spLT5pZGVudCA9IGNtZC0+aWRlbnQ7CiAKLQlpZiAoKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fRU5DUllQVCkgfHwKLQkJCShsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1NFQ1VSRSkpIHsKLQkJaWYgKCFoY2lfY29ubl9lbmNyeXB0KGNvbm4tPmhjb24pKQotCQkJZ290byBkb25lOwotCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9BVVRIKSB7Ci0JCWlmICghaGNpX2Nvbm5fYXV0aChjb25uLT5oY29uKSkKLQkJCWdvdG8gZG9uZTsKKwlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UKSB7CisJCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7CisJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7CisJCQlyZXN1bHQgPSBMMkNBUF9DUl9TVUNDRVNTOworCQkJc3RhdHVzID0gTDJDQVBfQ1NfTk9fSU5GTzsKKwkJfSBlbHNlIHsKKwkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1QyOworCQkJcmVzdWx0ID0gTDJDQVBfQ1JfUEVORDsKKwkJCXN0YXR1cyA9IEwyQ0FQX0NTX0FVVEhFTl9QRU5EOworCQl9CisJfSBlbHNlIHsKKwkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVDI7CisJCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7CisJCXN0YXR1cyA9IEwyQ0FQX0NTX05PX0lORk87CiAJfQogCi0Jc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCXJlc3VsdCA9IHN0YXR1cyA9IDA7Ci0KLWRvbmU6CiAJd3JpdGVfdW5sb2NrX2JoKCZsaXN0LT5sb2NrKTsKIAogcmVzcG9uc2U6CkBAIC0xNTU2LDYgKzE2MzEsMjEgQEAKIAlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKIAlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKIAlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LCBMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOworCisJaWYgKHJlc3VsdCA9PSBMMkNBUF9DUl9QRU5EICYmIHN0YXR1cyA9PSBMMkNBUF9DU19OT19JTkZPKSB7CisJCXN0cnVjdCBsMmNhcF9pbmZvX3JlcSBpbmZvOworCQlpbmZvLnR5cGUgPSBjcHVfdG9fbGUxNihMMkNBUF9JVF9GRUFUX01BU0spOworCisJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQ7CisJCWNvbm4tPmluZm9faWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7CisKKwkJbW9kX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyLCBqaWZmaWVzICsKKwkJCQkJbXNlY3NfdG9famlmZmllcyhMMkNBUF9JTkZPX1RJTUVPVVQpKTsKKworCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjb25uLT5pbmZvX2lkZW50LAorCQkJCQlMMkNBUF9JTkZPX1JFUSwgc2l6ZW9mKGluZm8pLCAmaW5mbyk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NjQsOSArMTc1NCw5IEBACiAJfQogCiAJaWYgKCEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkpIHsKLQkJdTggcmVxWzY0XTsKKwkJdTggYnVmWzY0XTsKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKLQkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIHJlcSksIHJlcSk7CisJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKHNrLCBidWYpLCBidWYpOwogCX0KIAogdW5sb2NrOgpAQCAtMTcwOCw3ICsxNzk4LDcgQEAKIAogCWRlZmF1bHQ6CiAJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47Ci0JCXNrLT5za19lcnIgICA9IEVDT05OUkVTRVQ7CisJCXNrLT5za19lcnIgPSBFQ09OTlJFU0VUOwogCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogKiA1KTsKIAkJewogCQkJc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcmVxIHJlcTsKQEAgLTIwODAsMTAgKzIxNzAsOCBAQAogc3RhdGljIGludCBsMmNhcF9hdXRoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cykKIHsKIAlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsOwotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7Ci0Jc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7CiAJc3RydWN0IHNvY2sgKnNrOwotCWludCByZXN1bHQ7CiAKIAlpZiAoIWNvbm4pCiAJCXJldHVybiAwOwpAQCAtMjA5NSw0NSArMjE4Myw2NSBAQAogCXJlYWRfbG9jaygmbC0+bG9jayk7CiAKIAlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKKwkJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwogCQliaF9sb2NrX3NvY2soc2spOwogCi0JCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVDIgfHwKLQkJCQkobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9FTkNSWVBUKSB8fAotCQkJCShsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1NFQ1VSRSkpIHsKKwkJaWYgKChwaS0+bGlua19tb2RlICYgKEwyQ0FQX0xNX0VOQ1JZUFQgfCBMMkNBUF9MTV9TRUNVUkUpKSAmJgorCQkJCQkhKGhjb24tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKSAmJgorCQkJCQkJCQkhc3RhdHVzKSB7CiAJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghc3RhdHVzKSB7Ci0JCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7Ci0JCQlyZXN1bHQgPSAwOwotCQl9IGVsc2UgewotCQkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKLQkJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWi8xMCk7Ci0JCQlyZXN1bHQgPSBMMkNBUF9DUl9TRUNfQkxPQ0s7Ci0JCX0KKwkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKSB7CisJCQlpZiAoIXN0YXR1cykgeworCQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7CisJCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOworCQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CiAKLQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7Ci0JCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKLQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KDApOwotCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CisJCQkJbDJjYXBfcGkoc2spLT5pZGVudCA9IGwyY2FwX2dldF9pZGVudChjb25uKTsKKworCQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCisJCQkJCUwyQ0FQX0NPTk5fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7CisJCQl9IGVsc2UgeworCQkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOworCQkJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWiAvIDEwKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIpIHsKKwkJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CisJCQlfX3UxNiByZXN1bHQ7CisKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOworCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NVQ0NFU1M7CisJCQl9IGVsc2UgeworCQkJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47CisJCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaIC8gMTApOworCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKKwkJCX0KKworCQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihyZXN1bHQpOworCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KDApOworCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKKwkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKwkJfQogCiAJCWJoX3VubG9ja19zb2NrKHNrKTsKIAl9CiAKIAlyZWFkX3VubG9jaygmbC0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9lbmNyeXB0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cykKK3N0YXRpYyBpbnQgbDJjYXBfZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCBzdGF0dXMsIHU4IGVuY3J5cHQpCiB7CiAJc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbDsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7Ci0Jc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKIAlzdHJ1Y3Qgc29jayAqc2s7Ci0JaW50IHJlc3VsdDsKIAogCWlmICghY29ubikKIAkJcmV0dXJuIDA7CkBAIC0yMTQ1LDM2ICsyMjUzLDU5IEBACiAJcmVhZF9sb2NrKCZsLT5sb2NrKTsKIAogCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgeworCQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOworCiAJCWJoX2xvY2tfc29jayhzayk7CiAKLQkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNUMikgeworCQlpZiAoKHBpLT5saW5rX21vZGUgJiAoTDJDQVBfTE1fRU5DUllQVCB8IEwyQ0FQX0xNX1NFQ1VSRSkpICYmCisJCQkJCShzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8CisJCQkJCQlzay0+c2tfc3RhdGUgPT0gQlRfQ09ORklHKSAmJgorCQkJCQkJIXN0YXR1cyAmJiBlbmNyeXB0ID09IDB4MDApIHsKKwkJCV9fbDJjYXBfc29ja19jbG9zZShzaywgRUNPTk5SRUZVU0VEKTsKIAkJCWJoX3VubG9ja19zb2NrKHNrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFzdGF0dXMpIHsKLQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKLQkJCXJlc3VsdCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzay0+c2tfc3RhdGUgPSBCVF9ESVNDT05OOwotCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaLzEwKTsKLQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKKwkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKSB7CisJCQlpZiAoIXN0YXR1cykgeworCQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7CisJCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOworCQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CisKKwkJCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOworCisJCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKKwkJCQkJTDJDQVBfQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKKwkJCX0gZWxzZSB7CisJCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CisJCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaIC8gMTApOworCQkJfQorCQl9IGVsc2UgaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMikgeworCQkJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwkJCV9fdTE2IHJlc3VsdDsKKworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7CisJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU1VDQ0VTUzsKKwkJCX0gZWxzZSB7CisJCQkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKKwkJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogLyAxMCk7CisJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOworCQkJfQorCisJCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKKwkJCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOworCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7CisJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoMCk7CisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAorCQkJCQlMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOwogCQl9CiAKLQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7Ci0JCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKLQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KDApOwotCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7Ci0KLQkJaWYgKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fU0VDVVJFKQotCQkJaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KGhjb24pOwotCiAJCWJoX3VubG9ja19zb2NrKHNrKTsKIAl9CiAKIAlyZWFkX3VubG9jaygmbC0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMwMSw5ICsyNDMyLDkgQEAKIAkuc2VuZG1zZwk9IGwyY2FwX3NvY2tfc2VuZG1zZywKIAkucmVjdm1zZwk9IGJ0X3NvY2tfcmVjdm1zZywKIAkucG9sbAkJPSBidF9zb2NrX3BvbGwsCisJLmlvY3RsCQk9IGJ0X3NvY2tfaW9jdGwsCiAJLm1tYXAJCT0gc29ja19ub19tbWFwLAogCS5zb2NrZXRwYWlyCT0gc29ja19ub19zb2NrZXRwYWlyLAotCS5pb2N0bAkJPSBzb2NrX25vX2lvY3RsLAogCS5zaHV0ZG93bgk9IGwyY2FwX3NvY2tfc2h1dGRvd24sCiAJLnNldHNvY2tvcHQJPSBsMmNhcF9zb2NrX3NldHNvY2tvcHQsCiAJLmdldHNvY2tvcHQJPSBsMmNhcF9zb2NrX2dldHNvY2tvcHQKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwppbmRleCAwYzJjOTM3Li42Y2ZjN2JhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCkBAIC0yMyw4ICsyMyw2IEBACiAKIC8qCiAgKiBCbHVldG9vdGggUkZDT01NIGNvcmUuCi0gKgotICogJElkOiBjb3JlLmMsdiAxLjQyIDIwMDIvMTAvMDEgMjM6MjY6MjUgbWF4ayBFeHAgJAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTUzLDcgKzUxLDcgQEAKICNkZWZpbmUgQlRfREJHKEQuLi4pCiAjZW5kaWYKIAotI2RlZmluZSBWRVJTSU9OICIxLjgiCisjZGVmaW5lIFZFUlNJT04gIjEuMTAiCiAKIHN0YXRpYyBpbnQgZGlzYWJsZV9jZmMgPSAwOwogc3RhdGljIGludCBjaGFubmVsX210dSA9IC0xOwpAQCAtMjMwLDYgKzIyOCwyMSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJmY29tbV9jaGVja19saW5rX21vZGUoc3RydWN0IHJmY29tbV9kbGMgKmQpCit7CisJc3RydWN0IHNvY2sgKnNrID0gZC0+c2Vzc2lvbi0+c29jay0+c2s7CisKKwlpZiAoZC0+bGlua19tb2RlICYgKFJGQ09NTV9MTV9FTkNSWVBUIHwgUkZDT01NX0xNX1NFQ1VSRSkpIHsKKwkJaWYgKCFoY2lfY29ubl9lbmNyeXB0KGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbikpCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGQtPmxpbmtfbW9kZSAmIFJGQ09NTV9MTV9BVVRIKSB7CisJCWlmICghaGNpX2Nvbm5fYXV0aChsMmNhcF9waShzayktPmNvbm4tPmhjb24pKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIC0tLS0gUkZDT01NIERMQ3MgLS0tLSAqLwogc3RhdGljIHZvaWQgcmZjb21tX2RsY190aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMzcxLDE1ICszODQsMjMgQEAKIAlkLT5hZGRyICAgICA9IF9fYWRkcihzLT5pbml0aWF0b3IsIGRsY2kpOwogCWQtPnByaW9yaXR5ID0gNzsKIAotCWQtPnN0YXRlICAgID0gQlRfQ09ORklHOworCWQtPnN0YXRlID0gQlRfQ09ORklHOwogCXJmY29tbV9kbGNfbGluayhzLCBkKTsKIAorCWQtPm91dCA9IDE7CisKIAlkLT5tdHUgPSBzLT5tdHU7CiAJZC0+Y2ZjID0gKHMtPmNmYyA9PSBSRkNPTU1fQ0ZDX1VOS05PV04pID8gMCA6IHMtPmNmYzsKIAotCWlmIChzLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQpCi0JCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOworCWlmIChzLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQpIHsKKwkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpCisJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CisJCWVsc2UKKwkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOworCX0KKwogCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9DT05OX1RJTUVPVVQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNDYsMjEgKzExNjcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCByZmNvbW1fY2hlY2tfbGlua19tb2RlKHN0cnVjdCByZmNvbW1fZGxjICpkKQotewotCXN0cnVjdCBzb2NrICpzayA9IGQtPnNlc3Npb24tPnNvY2stPnNrOwotCi0JaWYgKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSB7Ci0JCWlmICghaGNpX2Nvbm5fZW5jcnlwdChsMmNhcF9waShzayktPmNvbm4tPmhjb24pKQotCQkJcmV0dXJuIDE7Ci0JfSBlbHNlIGlmIChkLT5saW5rX21vZGUgJiBSRkNPTU1fTE1fQVVUSCkgewotCQlpZiAoIWhjaV9jb25uX2F1dGgobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKSkKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCByZmNvbW1fZGxjX2FjY2VwdChzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBkLT5zZXNzaW9uLT5zb2NrLT5zazsKQEAgLTEyMDUsMTAgKzEyMTEsOCBAQAogCQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpIHsKIAkJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CiAJCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0KLQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCQkJfSBlbHNlCisJCQkJcmZjb21tX2RsY19hY2NlcHQoZCk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTIyMywxMCArMTIyNyw4IEBACiAJCWlmIChyZmNvbW1fY2hlY2tfbGlua19tb2RlKGQpKSB7CiAJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CiAJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJcmZjb21tX2RsY19hY2NlcHQoZCk7CisJCX0gZWxzZQorCQkJcmZjb21tX2RsY19hY2NlcHQoZCk7CiAJfSBlbHNlIHsKIAkJcmZjb21tX3NlbmRfZG0ocywgZGxjaSk7CiAJfQpAQCAtMTQ1OSw4ICsxNDYxLDEyIEBACiAJCQljbGVhcl9iaXQoUkZDT01NX1RYX1RIUk9UVExFRCwgJmQtPmZsYWdzKTsKIAogCQlyZmNvbW1fZGxjX2xvY2soZCk7CisKKwkJZC0+cmVtb3RlX3YyNF9zaWcgPSBtc2MtPnYyNF9zaWc7CisKIAkJaWYgKGQtPm1vZGVtX3N0YXR1cykKIAkJCWQtPm1vZGVtX3N0YXR1cyhkLCBtc2MtPnYyNF9zaWcpOworCiAJCXJmY29tbV9kbGNfdW5sb2NrKGQpOwogCiAJCXJmY29tbV9zZW5kX21zYyhzLCAwLCBkbGNpLCBtc2MtPnYyNF9zaWcpOwpAQCAtMTYzNiw3ICsxNjQyLDExIEBACiAJCWQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fZGxjLCBsaXN0KTsKIAkJaWYgKGQtPnN0YXRlID09IEJUX0NPTkZJRykgewogCQkJZC0+bXR1ID0gcy0+bXR1OwotCQkJcmZjb21tX3NlbmRfcG4ocywgMSwgZCk7CisJCQlpZiAocmZjb21tX2NoZWNrX2xpbmtfbW9kZShkKSkgeworCQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKKwkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKwkJCX0gZWxzZQorCQkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOwogCQl9CiAJfQogfQpAQCAtMTcwOSw3ICsxNzE5LDExIEBACiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fQVVUSF9BQ0NFUFQsICZkLT5mbGFncykpIHsKIAkJCXJmY29tbV9kbGNfY2xlYXJfdGltZXIoZCk7Ci0JCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKKwkJCWlmIChkLT5vdXQpIHsKKwkJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKKwkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQ09OTl9USU1FT1VUKTsKKwkJCX0gZWxzZQorCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOwogCQkJaWYgKGQtPmxpbmtfbW9kZSAmIFJGQ09NTV9MTV9TRUNVUkUpIHsKIAkJCQlzdHJ1Y3Qgc29jayAqc2sgPSBzLT5zb2NrLT5zazsKIAkJCQloY2lfY29ubl9jaGFuZ2VfbGlua19rZXkobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKTsKQEAgLTE3MTcsNyArMTczMSwxMCBAQAogCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKSkgewogCQkJcmZjb21tX2RsY19jbGVhcl90aW1lcihkKTsKLQkJCXJmY29tbV9zZW5kX2RtKHMsIGQtPmRsY2kpOworCQkJaWYgKCFkLT5vdXQpCisJCQkJcmZjb21tX3NlbmRfZG0ocywgZC0+ZGxjaSk7CisJCQllbHNlCisJCQkJZC0+c3RhdGUgPSBCVF9DTE9TRUQ7CiAJCQlfX3JmY29tbV9kbGNfY2xvc2UoZCwgRUNPTk5SRUZVU0VEKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xNzI2LDcgKzE3NDMsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKChkLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgZC0+c3RhdGUgPT0gQlRfRElTQ09OTikgJiYKLQkJCQlkLT5tc2NleCA9PSBSRkNPTU1fTVNDRVhfT0spCisJCQkJCQlkLT5tc2NleCA9PSBSRkNPTU1fTVNDRVhfT0spCiAJCQlyZmNvbW1fcHJvY2Vzc190eChkKTsKIAl9CiB9CkBAIC0xOTU0LDcgKzE5NzEsOCBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmcy0+ZGxjcykgewogCQlkID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgcmZjb21tX2RsYywgbGlzdCk7CiAKLQkJaWYgKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKQorCQlpZiAoKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSAmJgorCQkJCSEoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpICYmICFzdGF0dXMpCiAJCQljb250aW51ZTsKIAogCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpKQpAQCAtMTk4OCw2ICsyMDA2LDE0IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZzLT5kbGNzKSB7CiAJCWQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fZGxjLCBsaXN0KTsKIAorCQlpZiAoKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSAmJgorCQkJCQkoZC0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8CisJCQkJCQlkLT5zdGF0ZSA9PSBCVF9DT05GSUcpICYmCisJCQkJCQkhc3RhdHVzICYmIGVuY3J5cHQgPT0gMHgwMCkgeworCQkJX19yZmNvbW1fZGxjX2Nsb3NlKGQsIEVDT05OUkVGVVNFRCk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncykpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCmluZGV4IDUwODNhZGMuLjhhOTcyYjYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKQEAgLTIzLDggKzIzLDYgQEAKIAogLyoKICAqIFJGQ09NTSBzb2NrZXRzLgotICoKLSAqICRJZDogc29jay5jLHYgMS4yNCAyMDAyLzEwLzAzIDAxOjAwOjM0IG1heGsgRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zMDksMTMgKzMwNywxMyBAQAogCXNrLT5za19kZXN0cnVjdCA9IHJmY29tbV9zb2NrX2Rlc3RydWN0OwogCXNrLT5za19zbmR0aW1lbyA9IFJGQ09NTV9DT05OX1RJTUVPVVQ7CiAKLQlzay0+c2tfc25kYnVmICAgPSBSRkNPTU1fTUFYX0NSRURJVFMgKiBSRkNPTU1fREVGQVVMVF9NVFUgKiAxMDsKLQlzay0+c2tfcmN2YnVmICAgPSBSRkNPTU1fTUFYX0NSRURJVFMgKiBSRkNPTU1fREVGQVVMVF9NVFUgKiAxMDsKKwlzay0+c2tfc25kYnVmID0gUkZDT01NX01BWF9DUkVESVRTICogUkZDT01NX0RFRkFVTFRfTVRVICogMTA7CisJc2stPnNrX3JjdmJ1ZiA9IFJGQ09NTV9NQVhfQ1JFRElUUyAqIFJGQ09NTV9ERUZBVUxUX01UVSAqIDEwOwogCiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7CiAKIAlzay0+c2tfcHJvdG9jb2wgPSBwcm90bzsKLQlzay0+c2tfc3RhdGUJPSBCVF9PUEVOOworCXNrLT5za19zdGF0ZSAgICA9IEJUX09QRU47CiAKIAlidF9zb2NrX2xpbmsoJnJmY29tbV9za19saXN0LCBzayk7CiAKQEAgLTQxMyw2ICs0MTEsOCBAQAogCWJhY3B5KCZidF9zayhzayktPmRzdCwgJnNhLT5yY19iZGFkZHIpOwogCXJmY29tbV9waShzayktPmNoYW5uZWwgPSBzYS0+cmNfY2hhbm5lbDsKIAorCWQtPmxpbmtfbW9kZSA9IHJmY29tbV9waShzayktPmxpbmtfbW9kZTsKKwogCWVyciA9IHJmY29tbV9kbGNfb3BlbihkLCAmYnRfc2soc2spLT5zcmMsICZzYS0+cmNfYmRhZGRyLCBzYS0+cmNfY2hhbm5lbCk7CiAJaWYgKCFlcnIpCiAJCWVyciA9IGJ0X3NvY2tfd2FpdF9zdGF0ZShzaywgQlRfQ09OTkVDVEVELApAQCAtNjg4LDYgKzY4OCw4IEBACiAJCWNvcGllZCArPSBjaHVuazsKIAkJc2l6ZSAgIC09IGNodW5rOwogCisJCXNvY2tfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgc2tiKTsKKwogCQlpZiAoIShmbGFncyAmIE1TR19QRUVLKSkgewogCQkJYXRvbWljX3N1YihjaHVuaywgJnNrLT5za19ybWVtX2FsbG9jKTsKIApAQCAtNzkzLDE1ICs3OTUsMjAgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlpbnQgZXJyOwogCi0JbG9ja19zb2NrKHNrKTsKKwlCVF9EQkcoInNrICVwIGNtZCAleCBhcmcgJWx4Iiwgc2ssIGNtZCwgYXJnKTsKIAorCWVyciA9IGJ0X3NvY2tfaW9jdGwoc29jaywgY21kLCBhcmcpOworCisJaWYgKGVyciA9PSAtRU5PSU9DVExDTUQpIHsKICNpZmRlZiBDT05GSUdfQlRfUkZDT01NX1RUWQotCWVyciA9IHJmY29tbV9kZXZfaW9jdGwoc2ssIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJbG9ja19zb2NrKHNrKTsKKwkJZXJyID0gcmZjb21tX2Rldl9pb2N0bChzaywgY21kLCAodm9pZCBfX3VzZXIgKikgYXJnKTsKKwkJcmVsZWFzZV9zb2NrKHNrKTsKICNlbHNlCi0JZXJyID0gLUVPUE5PVFNVUFA7CisJCWVyciA9IC1FT1BOT1RTVVBQOwogI2VuZGlmCisJfQogCi0JcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IGM5MTkxODcuLmQzMzQwZGQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC0yMyw4ICsyMyw2IEBACiAKIC8qCiAgKiBSRkNPTU0gVFRZLgotICoKLSAqICRJZDogdHR5LmMsdiAxLjI0IDIwMDIvMTAvMDMgMDE6NTQ6MzggaG9sdG1hbm4gRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC03Nyw2ICs3NSw4IEBACiAJc3RydWN0IGRldmljZQkJKnR0eV9kZXY7CiAKIAlhdG9taWNfdCAJCXdtZW1fYWxsb2M7CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXBlbmRpbmc7CiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKHJmY29tbV9kZXZfbGlzdCk7CkBAIC0yNjQsMTMgKzI2NCwzNCBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdCk7CiAJdGFza2xldF9pbml0KCZkZXYtPndha2V1cF90YXNrLCByZmNvbW1fdHR5X3dha2V1cCwgKHVuc2lnbmVkIGxvbmcpIGRldik7CiAKKwlza2JfcXVldWVfaGVhZF9pbml0KCZkZXYtPnBlbmRpbmcpOworCiAJcmZjb21tX2RsY19sb2NrKGRsYyk7CisKKwlpZiAocmVxLT5mbGFncyAmICgxIDw8IFJGQ09NTV9SRVVTRV9ETEMpKSB7CisJCXN0cnVjdCBzb2NrICpzayA9IGRsYy0+b3duZXI7CisJCXN0cnVjdCBza19idWZmICpza2I7CisKKwkJQlVHX09OKCFzayk7CisKKwkJcmZjb21tX2RsY190aHJvdHRsZShkbGMpOworCisJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkpIHsKKwkJCXNrYl9vcnBoYW4oc2tiKTsKKwkJCXNrYl9xdWV1ZV90YWlsKCZkZXYtPnBlbmRpbmcsIHNrYik7CisJCQlhdG9taWNfc3ViKHNrYi0+bGVuLCAmc2stPnNrX3JtZW1fYWxsb2MpOworCQl9CisJfQorCiAJZGxjLT5kYXRhX3JlYWR5ICAgPSByZmNvbW1fZGV2X2RhdGFfcmVhZHk7CiAJZGxjLT5zdGF0ZV9jaGFuZ2UgPSByZmNvbW1fZGV2X3N0YXRlX2NoYW5nZTsKIAlkbGMtPm1vZGVtX3N0YXR1cyA9IHJmY29tbV9kZXZfbW9kZW1fc3RhdHVzOwogCiAJZGxjLT5vd25lciA9IGRldjsKIAlkZXYtPmRsYyAgID0gZGxjOworCisJcmZjb21tX2Rldl9tb2RlbV9zdGF0dXMoZGxjLCBkbGMtPnJlbW90ZV92MjRfc2lnKTsKKwogCXJmY29tbV9kbGNfdW5sb2NrKGRsYyk7CiAKIAkvKiBJdCdzIHNhZmUgdG8gY2FsbCBfX21vZHVsZV9nZXQoKSBoZXJlIGJlY2F1c2Ugc29ja2V0IGFscmVhZHkKQEAgLTUzOSwxMSArNTYwLDE2IEBACiAJc3RydWN0IHJmY29tbV9kZXYgKmRldiA9IGRsYy0+b3duZXI7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAotCWlmICghZGV2IHx8ICEodHR5ID0gZGV2LT50dHkpKSB7CisJaWYgKCFkZXYpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CiAKKwlpZiAoISh0dHkgPSBkZXYtPnR0eSkgfHwgIXNrYl9xdWV1ZV9lbXB0eSgmZGV2LT5wZW5kaW5nKSkgeworCQlza2JfcXVldWVfdGFpbCgmZGV2LT5wZW5kaW5nLCBza2IpOworCQlyZXR1cm47CisJfQorCiAJQlRfREJHKCJkbGMgJXAgdHR5ICVwIGxlbiAlZCIsIGRsYywgdHR5LCBza2ItPmxlbik7CiAKIAl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CkBAIC02MTcsMTQgKzY0MywzMSBAQAogCQlyZXR1cm47CiAKIAlCVF9EQkcoImRldiAlcCB0dHkgJXAiLCBkZXYsIHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOworfQogCi0JaWYgKHRlc3RfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKSAmJiB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOworc3RhdGljIHZvaWQgcmZjb21tX3R0eV9jb3B5X3BlbmRpbmcoc3RydWN0IHJmY29tbV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gZGV2LT50dHk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgaW5zZXJ0ZWQgPSAwOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotI2lmZGVmIFNFUklBTF9IQVZFX1BPTExfV0FJVAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5wb2xsX3dhaXQpOwotI2VuZGlmCisJaWYgKCF0dHkpCisJCXJldHVybjsKKworCUJUX0RCRygiZGV2ICVwIHR0eSAlcCIsIGRldiwgdHR5KTsKKworCXJmY29tbV9kbGNfbG9jayhkZXYtPmRsYyk7CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZkZXYtPnBlbmRpbmcpKSkgeworCQlpbnNlcnRlZCArPSB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCWtmcmVlX3NrYihza2IpOworCX0KKworCXJmY29tbV9kbGNfdW5sb2NrKGRldi0+ZGxjKTsKKworCWlmIChpbnNlcnRlZCA+IDApCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiB9CiAKIHN0YXRpYyBpbnQgcmZjb21tX3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtNjkxLDYgKzczNCwxMCBAQAogCWlmIChlcnIgPT0gMCkKIAkJZGV2aWNlX21vdmUoZGV2LT50dHlfZGV2LCByZmNvbW1fZ2V0X2RldmljZShkZXYpKTsKIAorCXJmY29tbV90dHlfY29weV9wZW5kaW5nKGRldik7CisKKwlyZmNvbW1fZGxjX3VudGhyb3R0bGUoZGV2LT5kbGMpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTAwNSw5ICsxMDUyLDcgQEAKIAkJcmV0dXJuOwogCiAJc2tiX3F1ZXVlX3B1cmdlKCZkZXYtPmRsYy0+dHhfcXVldWUpOwotCi0JaWYgKHRlc3RfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKSAmJiB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJdHR5LT5sZGlzYy53cml0ZV93YWtldXAodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJmY29tbV90dHlfc2VuZF94Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKQpAQCAtMTEyMyw2ICsxMTY4LDcgQEAKIAlyZmNvbW1fdHR5X2RyaXZlci0+ZmxhZ3MJPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAlyZmNvbW1fdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zCT0gdHR5X3N0ZF90ZXJtaW9zOwogCXJmY29tbV90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZwk9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwlyZmNvbW1fdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfbGZsYWcgJj0gfklDQU5PTjsKIAl0dHlfc2V0X29wZXJhdGlvbnMocmZjb21tX3R0eV9kcml2ZXIsICZyZmNvbW1fb3BzKTsKIAogCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKHJmY29tbV90dHlfZHJpdmVyKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggYjBkNDg3ZS4uOGNkYTQ5OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC01Myw3ICs1Myw5IEBACiAjZGVmaW5lIEJUX0RCRyhELi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC41IgorI2RlZmluZSBWRVJTSU9OICIwLjYiCisKK3N0YXRpYyBpbnQgZGlzYWJsZV9lc2NvID0gMDsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc2NvX3NvY2tfb3BzOwogCkBAIC0xOTMsNyArMTk1LDEwIEBACiAKIAllcnIgPSAtRU5PTUVNOwogCi0JdHlwZSA9IGxtcF9lc2NvX2NhcGFibGUoaGRldikgPyBFU0NPX0xJTksgOiBTQ09fTElOSzsKKwlpZiAobG1wX2VzY29fY2FwYWJsZShoZGV2KSAmJiAhZGlzYWJsZV9lc2NvKQorCQl0eXBlID0gRVNDT19MSU5LOworCWVsc2UKKwkJdHlwZSA9IFNDT19MSU5LOwogCiAJaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIHR5cGUsIGRzdCk7CiAJaWYgKCFoY29uKQpAQCAtOTIxLDcgKzkyNiw3IEBACiAJLnNlbmRtc2cJPSBzY29fc29ja19zZW5kbXNnLAogCS5yZWN2bXNnCT0gYnRfc29ja19yZWN2bXNnLAogCS5wb2xsCQk9IGJ0X3NvY2tfcG9sbCwKLQkuaW9jdGwJCT0gc29ja19ub19pb2N0bCwKKwkuaW9jdGwJCT0gYnRfc29ja19pb2N0bCwKIAkubW1hcAkJPSBzb2NrX25vX21tYXAsCiAJLnNvY2tldHBhaXIJPSBzb2NrX25vX3NvY2tldHBhaXIsCiAJLnNodXRkb3duCT0gc29ja19ub19zaHV0ZG93biwKQEAgLTk5NCw2ICs5OTksOSBAQAogbW9kdWxlX2luaXQoc2NvX2luaXQpOwogbW9kdWxlX2V4aXQoc2NvX2V4aXQpOwogCittb2R1bGVfcGFyYW0oZGlzYWJsZV9lc2NvLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9lc2NvLCAiRGlzYWJsZSBlU0NPIGNvbm5lY3Rpb24gY3JlYXRpb24iKTsKKwogTU9EVUxFX0FVVEhPUigiTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29tPiwgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJCbHVldG9vdGggU0NPIHZlciAiIFZFUlNJT04pOwogTU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL0tjb25maWcgYi9uZXQvYnJpZGdlL0tjb25maWcKaW5kZXggMTIyNjVhZi4uZTE0M2NhNiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9LY29uZmlnCisrKyBiL25ldC9icmlkZ2UvS2NvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIGNvbmZpZyBCUklER0UKIAl0cmlzdGF0ZSAiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nIgogCXNlbGVjdCBMTEMKKwlzZWxlY3QgU1RQCiAJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhbgogCSAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXQKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnIuYyBiL25ldC9icmlkZ2UvYnIuYwppbmRleCA4ZjNjNThlLi41NzNhY2RmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyLmMKKysrIGIvbmV0L2JyaWRnZS9ici5jCkBAIC01LDggKzUsNiBAQAogICoJQXV0aG9yczoKICAqCUxlbm5lcnQgQnV5dGVuaGVrCQk8YnV5dGVuaEBnbnUub3JnPgogICoKLSAqCSRJZDogYnIuYyx2IDEuNDcgMjAwMS8xMi8yNCAwMDo1Njo0MSBkYXZlbSBFeHAgJAotICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTIwLDIxICsxOCwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9sbGMuaD4KICNpbmNsdWRlIDxuZXQvbGxjLmg+CisjaW5jbHVkZSA8bmV0L3N0cC5oPgogCiAjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgogCiBpbnQgKCpicl9zaG91bGRfcm91dGVfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLXN0YXRpYyBzdHJ1Y3QgbGxjX3NhcCAqYnJfc3RwX3NhcDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RwX3Byb3RvIGJyX3N0cF9wcm90byA9IHsKKwkucmN2CT0gYnJfc3RwX3JjdiwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGJyX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JYnJfc3RwX3NhcCA9IGxsY19zYXBfb3BlbihMTENfU0FQX0JTUEFOLCBicl9zdHBfcmN2KTsKLQlpZiAoIWJyX3N0cF9zYXApIHsKKwllcnIgPSBzdHBfcHJvdG9fcmVnaXN0ZXIoJmJyX3N0cF9wcm90byk7CisJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJicmlkZ2U6IGNhbid0IHJlZ2lzdGVyIHNhcCBmb3IgU1RQXG4iKTsKLQkJcmV0dXJuIC1FQUREUklOVVNFOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWVyciA9IGJyX2ZkYl9pbml0KCk7CkBAIC02NywxMyArNjgsMTMgQEAKIGVycl9vdXQxOgogCWJyX2ZkYl9maW5pKCk7CiBlcnJfb3V0OgotCWxsY19zYXBfcHV0KGJyX3N0cF9zYXApOworCXN0cF9wcm90b191bnJlZ2lzdGVyKCZicl9zdHBfcHJvdG8pOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBicl9kZWluaXQodm9pZCkKIHsKLQlyY3VfYXNzaWduX3BvaW50ZXIoYnJfc3RwX3NhcC0+cmN2X2Z1bmMsIE5VTEwpOworCXN0cF9wcm90b191bnJlZ2lzdGVyKCZicl9zdHBfcHJvdG8pOwogCiAJYnJfbmV0bGlua19maW5pKCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmJyX2RldmljZV9ub3RpZmllcik7CkBAIC04NCw3ICs4NSw2IEBACiAJc3luY2hyb25pemVfbmV0KCk7CiAKIAlicl9uZXRmaWx0ZXJfZmluaSgpOwotCWxsY19zYXBfcHV0KGJyX3N0cF9zYXApOwogCWJyX2ZkYl9nZXRfaG9vayA9IE5VTEw7CiAJYnJfZmRiX3B1dF9ob29rID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKaW5kZXggYmY3Nzg3My4uZDk0NDlkZiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYworKysgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCkBAIC01LDggKzUsNiBAQAogICoJQXV0aG9yczoKICAqCUxlbm5lcnQgQnV5dGVuaGVrCQk8YnV5dGVuaEBnbnUub3JnPgogICoKLSAqCSRJZDogYnJfZGV2aWNlLmMsdiAxLjYgMjAwMS8xMi8yNCAwMDo1OTo1NSBkYXZlbSBFeHAgJAotICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTIxLDEyICsxOSw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYnJfZGV2X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZici0+c3RhdGlzdGljczsKLX0KLQogLyogbmV0IGRldmljZSB0cmFuc21pdCBhbHdheXMgY2FsbGVkIHdpdGggbm8gQkggKHByZWVtcHRfZGlzYWJsZWQpICovCiBpbnQgYnJfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTM0LDggKzI2LDggQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc2tiLT5kYXRhOwogCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZHN0OwogCi0JYnItPnN0YXRpc3RpY3MudHhfcGFja2V0cysrOwotCWJyLT5zdGF0aXN0aWNzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCXNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pOwpAQCAtOTUsNiArODcsNyBAQAogCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CiAJYnJfc3RwX2NoYW5nZV9icmlkZ2VfaWQoYnIsIGFkZHItPnNhX2RhdGEpOworCWJyLT5mbGFncyB8PSBCUl9TRVRfTUFDX0FERFI7CiAJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtMTYxLDcgKzE1NCw2IEBACiAJZXRoZXJfc2V0dXAoZGV2KTsKIAogCWRldi0+ZG9faW9jdGwgPSBicl9kZXZfaW9jdGw7Ci0JZGV2LT5nZXRfc3RhdHMgPSBicl9kZXZfZ2V0X3N0YXRzOwogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYnJfZGV2X3htaXQ7CiAJZGV2LT5vcGVuID0gYnJfZGV2X29wZW47CiAJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBicl9kZXZfc2V0X211bHRpY2FzdF9saXN0OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mZGIuYyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKaW5kZXggMTQyMDYwZi4uYTQ4ZjVlZiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCkBAIC01LDggKzUsNiBAQAogICoJQXV0aG9yczoKICAqCUxlbm5lcnQgQnV5dGVuaGVrCQk8YnV5dGVuaEBnbnUub3JnPgogICoKLSAqCSRJZDogYnJfZmRiLmMsdiAxLjYgMjAwMi8wMS8xNyAwMDo1NzowNyBkYXZlbSBFeHAgJAotICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jIGIvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMKaW5kZXggYmRkN2MzNS4uYmRkOWNjZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMKKysrIGIvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMKQEAgLTUsOCArNSw2IEBACiAgKglBdXRob3JzOgogICoJTGVubmVydCBCdXl0ZW5oZWsJCTxidXl0ZW5oQGdudS5vcmc+CiAgKgotICoJJElkOiBicl9mb3J3YXJkLmMsdiAxLjQgMjAwMS8wOC8xNCAyMjowNTo1NyBkYXZlbSBFeHAgJAotICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTkxLDcgKzg5LDcgQEAKIC8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8KIHZvaWQgYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0bywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoc2hvdWxkX2RlbGl2ZXIodG8sIHNrYikpIHsKKwlpZiAoIXNrYl93YXJuX2lmX2xybyhza2IpICYmIHNob3VsZF9kZWxpdmVyKHRvLCBza2IpKSB7CiAJCV9fYnJfZm9yd2FyZCh0bywgc2tiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTExNSw3ICsxMTMsNyBAQAogCQkJCXN0cnVjdCBza19idWZmICpza2IyOwogCiAJCQkJaWYgKChza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKLQkJCQkJYnItPnN0YXRpc3RpY3MudHhfZHJvcHBlZCsrOworCQkJCQlici0+ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCQlyZXR1cm47CiAJCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jCmluZGV4IGYzOGNjNTMuLmEwNzJlYTUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX2lmLmMKQEAgLTUsOCArNSw2IEBACiAgKglBdXRob3JzOgogICoJTGVubmVydCBCdXl0ZW5oZWsJCTxidXl0ZW5oQGdudS5vcmc+CiAgKgotICoJJElkOiBicl9pZi5jLHYgMS43IDIwMDEvMTIvMjQgMDA6NTk6NTUgZGF2ZW0gRXhwICQKLSAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCkBAIC0zNzUsNiArMzczLDEwIEBACiAJaWYgKElTX0VSUihwKSkKIAkJcmV0dXJuIFBUUl9FUlIocCk7CiAKKwllcnIgPSBkZXZfc2V0X3Byb21pc2N1aXR5KGRldiwgMSk7CisJaWYgKGVycikKKwkJZ290byBwdXRfYmFjazsKKwogCWVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZwLT5rb2JqLCAmYnJwb3J0X2t0eXBlLCAmKGRldi0+ZGV2LmtvYmopLAogCQkJCSAgIFNZU0ZTX0JSSURHRV9QT1JUX0FUVFIpOwogCWlmIChlcnIpCkBAIC0zODksNyArMzkxLDcgQEAKIAkJZ290byBlcnIyOwogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+YnJfcG9ydCwgcCk7Ci0JZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIDEpOworCWRldl9kaXNhYmxlX2xybyhkZXYpOwogCiAJbGlzdF9hZGRfcmN1KCZwLT5saXN0LCAmYnItPnBvcnRfbGlzdCk7CiAKQEAgLTQxMywxMiArNDE1LDEyIEBACiAJYnJfZmRiX2RlbGV0ZV9ieV9wb3J0KGJyLCBwLCAxKTsKIGVycjE6CiAJa29iamVjdF9kZWwoJnAtPmtvYmopOwotCWdvdG8gcHV0X2JhY2s7CiBlcnIwOgogCWtvYmplY3RfcHV0KCZwLT5rb2JqKTsKLQorCWRldl9zZXRfcHJvbWlzY3VpdHkoZGV2LCAtMSk7CiBwdXRfYmFjazoKIAlkZXZfcHV0KGRldik7CisJa2ZyZWUocCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IDI1NWMwMGYuLjMwYjg4NzcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYworKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKQEAgLTUsOCArNSw2IEBACiAgKglBdXRob3JzOgogICoJTGVubmVydCBCdXl0ZW5oZWsJCTxidXl0ZW5oQGdudS5vcmc+CiAgKgotICoJJElkOiBicl9pbnB1dC5jLHYgMS4xMCAyMDAxLzEyLzI0IDA0OjUwOjIwIGRhdmVtIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtMjQsMTMgKzIyLDEzIEBACiAKIHN0YXRpYyB2b2lkIGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICppbmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXYsICpicmRldiA9IGJyLT5kZXY7CiAKLQlici0+c3RhdGlzdGljcy5yeF9wYWNrZXRzKys7Ci0JYnItPnN0YXRpc3RpY3MucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJYnJkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlicmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlpbmRldiA9IHNrYi0+ZGV2OwotCXNrYi0+ZGV2ID0gYnItPmRldjsKKwlza2ItPmRldiA9IGJyZGV2OwogCiAJTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX0xPQ0FMX0lOLCBza2IsIGluZGV2LCBOVUxMLAogCQluZXRpZl9yZWNlaXZlX3NrYik7CkBAIC02NCw3ICs2Miw3IEBACiAJZHN0ID0gTlVMTDsKIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkZXN0KSkgewotCQlici0+c3RhdGlzdGljcy5tdWx0aWNhc3QrKzsKKwkJYnItPmRldi0+c3RhdHMubXVsdGljYXN0Kys7CiAJCXNrYjIgPSBza2I7CiAJfSBlbHNlIGlmICgoZHN0ID0gX19icl9mZGJfZ2V0KGJyLCBkZXN0KSkgJiYgZHN0LT5pc19sb2NhbCkgewogCQlza2IyID0gc2tiOwpAQCAtMTM2LDE0ICsxMzQsMTEgQEAKIAkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUEFVU0UpKQogCQkJZ290byBkcm9wOwogCi0JCS8qIFByb2Nlc3MgU1RQIEJQRFUncyB0aHJvdWdoIG5vcm1hbCBuZXRpZl9yZWNlaXZlX3NrYigpIHBhdGggKi8KLQkJaWYgKHAtPmJyLT5zdHBfZW5hYmxlZCAhPSBCUl9OT19TVFApIHsKLQkJCWlmIChORl9IT09LKFBGX0JSSURHRSwgTkZfQlJfTE9DQUxfSU4sIHNrYiwgc2tiLT5kZXYsCi0JCQkJICAgIE5VTEwsIGJyX2hhbmRsZV9sb2NhbF9maW5pc2gpKQotCQkJCXJldHVybiBOVUxMOwotCQkJZWxzZQotCQkJCXJldHVybiBza2I7Ci0JCX0KKwkJaWYgKE5GX0hPT0soUEZfQlJJREdFLCBORl9CUl9MT0NBTF9JTiwgc2tiLCBza2ItPmRldiwKKwkJCSAgICBOVUxMLCBicl9oYW5kbGVfbG9jYWxfZmluaXNoKSkKKwkJCXJldHVybiBOVUxMOwkvKiBmcmFtZSBjb25zdW1lZCBieSBmaWx0ZXIgKi8KKwkJZWxzZQorCQkJcmV0dXJuIHNrYjsJLyogY29udGludWUgcHJvY2Vzc2luZyAqLwogCX0KIAogCXN3aXRjaCAocC0+c3RhdGUpIHsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW9jdGwuYyBiL25ldC9icmlkZ2UvYnJfaW9jdGwuYwppbmRleCAwNjU1YTVmLi5lZWVlMjE4IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lvY3RsLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pb2N0bC5jCkBAIC01LDggKzUsNiBAQAogICoJQXV0aG9yczoKICAqCUxlbm5lcnQgQnV5dGVuaGVrCQk8YnV5dGVuaEBnbnUub3JnPgogICoKLSAqCSRJZDogYnJfaW9jdGwuYyx2IDEuNCAyMDAwLzExLzA4IDA1OjE2OjQwIGRhdmVtIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9ub3RpZnkuYyBiL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKaW5kZXggMDA2NDRhNS4uNzYzNDBiZCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9ub3RpZnkuYworKysgYi9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCkBAIC01LDggKzUsNiBAQAogICoJQXV0aG9yczoKICAqCUxlbm5lcnQgQnV5dGVuaGVrCQk8YnV5dGVuaEBnbnUub3JnPgogICoKLSAqCSRJZDogYnJfbm90aWZ5LmMsdiAxLjIgMjAwMC8wMi8yMSAxNTo1MTozNCBkYXZlbSBFeHAgJAotICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTM3LDcgKzM1LDcgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gZGV2LT5icl9wb3J0OwogCXN0cnVjdCBuZXRfYnJpZGdlICpicjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJLyogbm90IGEgcG9ydCBvZiBhIGJyaWRnZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCBjMTFiNTU0Li44MTVlZDM4IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAorKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtNCw4ICs0LDYgQEAKICAqCUF1dGhvcnM6CiAgKglMZW5uZXJ0IEJ1eXRlbmhlawkJPGJ1eXRlbmhAZ251Lm9yZz4KICAqCi0gKgkkSWQ6IGJyX3ByaXZhdGUuaCx2IDEuNyAyMDAxLzEyLzI0IDAwOjU5OjU1IGRhdmVtIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtOTAsMTEgKzg4LDEyIEBACiAJc3BpbmxvY2tfdAkJCWxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAkJcG9ydF9saXN0OwogCXN0cnVjdCBuZXRfZGV2aWNlCQkqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCQlzdGF0aXN0aWNzOwogCXNwaW5sb2NrX3QJCQloYXNoX2xvY2s7CiAJc3RydWN0IGhsaXN0X2hlYWQJCWhhc2hbQlJfSEFTSF9TSVpFXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlhZ2VfbGlzdDsKIAl1bnNpZ25lZCBsb25nCQkJZmVhdHVyZV9tYXNrOworCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKKyNkZWZpbmUgQlJfU0VUX01BQ19BRERSCQkweDAwMDAwMDAxCiAKIAkvKiBTVFAgKi8KIAlicmlkZ2VfaWQJCQlkZXNpZ25hdGVkX3Jvb3Q7CkBAIC0yMjcsOCArMjI2LDkgQEAKIGV4dGVybiBzc2l6ZV90IGJyX3Nob3dfYnJpZGdlX2lkKGNoYXIgKmJ1ZiwgY29uc3Qgc3RydWN0IGJyaWRnZV9pZCAqaWQpOwogCiAvKiBicl9zdHBfYnBkdS5jICovCi1leHRlcm4gaW50IGJyX3N0cF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKK3N0cnVjdCBzdHBfcHJvdG87CitleHRlcm4gdm9pZCBicl9zdHBfcmN2KGNvbnN0IHN0cnVjdCBzdHBfcHJvdG8gKnByb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIGJyX3N0cF90aW1lci5jICovCiBleHRlcm4gdm9pZCBicl9zdHBfdGltZXJfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlX3N0cC5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlX3N0cC5oCmluZGV4IGUyOWYwMWEuLjhiNjUwZjcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZV9zdHAuaAorKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGVfc3RwLmgKQEAgLTQsOCArNCw2IEBACiAgKglBdXRob3JzOgogICoJTGVubmVydCBCdXl0ZW5oZWsJCTxidXl0ZW5oQGdudS5vcmc+CiAgKgotICoJJElkOiBicl9wcml2YXRlX3N0cC5oLHYgMS4zIDIwMDEvMDIvMDUgMDY6MDM6NDcgZGF2ZW0gRXhwICQKLSAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N0cC5jIGIvbmV0L2JyaWRnZS9icl9zdHAuYwppbmRleCA5ZTk2ZmZjLi45MjFiYmU1IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N0cC5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3RwLmMKQEAgLTUsOCArNSw2IEBACiAgKglBdXRob3JzOgogICoJTGVubmVydCBCdXl0ZW5oZWsJCTxidXl0ZW5oQGdudS5vcmc+CiAgKgotICoJJElkOiBicl9zdHAuYyx2IDEuNCAyMDAwLzA2LzE5IDEwOjEzOjM1IGRhdmVtIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jIGIvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jCmluZGV4IGRkZWI2ZTUuLjhiMjAwZjkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMKQEAgLTUsOCArNSw2IEBACiAgKglBdXRob3JzOgogICoJTGVubmVydCBCdXl0ZW5oZWsJCTxidXl0ZW5oQGdudS5vcmc+CiAgKgotICoJJElkOiBicl9zdHBfYnBkdS5jLHYgMS4zIDIwMDEvMTEvMTAgMDI6MzU6MjUgZGF2ZW0gRXhwICQKLSAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCkBAIC0yMCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvbGxjLmg+CiAjaW5jbHVkZSA8bmV0L2xsY19wZHUuaD4KKyNpbmNsdWRlIDxuZXQvc3RwLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgpAQCAtMTMzLDI2ICsxMzIsMjAgQEAKICAqCiAgKiBOTyBsb2NrcywgYnV0IHJjdV9yZWFkX2xvY2sgKHByZWVtcHRfZGlzYWJsZWQpCiAgKi8KLWludCBicl9zdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3ZvaWQgYnJfc3RwX3Jjdihjb25zdCBzdHJ1Y3Qgc3RwX3Byb3RvICpwcm90bywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQljb25zdCBzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkZXN0ID0gZXRoX2hkcihza2IpLT5oX2Rlc3Q7CiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmJyX3BvcnQpOwogCXN0cnVjdCBuZXRfYnJpZGdlICpicjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpidWY7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCWdvdG8gZXJyOwogCiAJaWYgKCFwKQogCQlnb3RvIGVycjsKIAotCWlmIChwZHUtPnNzYXAgIT0gTExDX1NBUF9CU1BBTgotCSAgICB8fCBwZHUtPmRzYXAgIT0gTExDX1NBUF9CU1BBTgotCSAgICB8fCBwZHUtPmN0cmxfMSAhPSBMTENfUERVX1RZUEVfVSkKLQkJZ290byBlcnI7Ci0KIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCA0KSkKIAkJZ290byBlcnI7CiAKQEAgLTIyNiw1ICsyMTksNCBAQAogCXNwaW5fdW5sb2NrKCZici0+bG9jayk7CiAgZXJyOgogCWtmcmVlX3NrYihza2IpOwotCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYyBiL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKaW5kZXggMWE0MzBlYy4uOWE1MmFjNSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCkBAIC01LDggKzUsNiBAQAogICoJQXV0aG9yczoKICAqCUxlbm5lcnQgQnV5dGVuaGVrCQk8YnV5dGVuaEBnbnUub3JnPgogICoKLSAqCSRJZDogYnJfc3RwX2lmLmMsdiAxLjQgMjAwMS8wNC8xNCAyMToxNDozOSBkYXZlbSBFeHAgJAotICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTIxNiw2ICsyMTQsMTAgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyID0gYnJfbWFjX3plcm87CiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKIAorCS8qIHVzZXIgaGFzIGNob3NlbiBhIHZhbHVlIHNvIGtlZXAgaXQgKi8KKwlpZiAoYnItPmZsYWdzICYgQlJfU0VUX01BQ19BRERSKQorCQlyZXR1cm47CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZici0+cG9ydF9saXN0LCBsaXN0KSB7CiAJCWlmIChhZGRyID09IGJyX21hY196ZXJvIHx8CiAJCSAgICBtZW1jbXAocC0+ZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pIDwgMCkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwX3RpbWVyLmMgYi9uZXQvYnJpZGdlL2JyX3N0cF90aW1lci5jCmluZGV4IDc3ZjUyNTUuLjc3MmExNDAgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwX3RpbWVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHBfdGltZXIuYwpAQCAtNSw4ICs1LDYgQEAKICAqCUF1dGhvcnM6CiAgKglMZW5uZXJ0IEJ1eXRlbmhlawkJPGJ1eXRlbmhAZ251Lm9yZz4KICAqCi0gKgkkSWQ6IGJyX3N0cF90aW1lci5jLHYgMS4zIDIwMDAvMDUvMDUgMDI6MTc6MTcgZGF2ZW0gRXhwICQKLSAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA3YmVlZWZhLi45MDk0Nzk3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTgzLDYgKzgzLDE1IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgQlJJREdFX0VCVF9JUDYKKwl0cmlzdGF0ZSAiZWJ0OiBJUDYgZmlsdGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBCUklER0VfTkZfRUJUQUJMRVMgJiYgSVBWNgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIElQNiBtYXRjaCwgd2hpY2ggYWxsb3dzIGJhc2ljIElQVjYgaGVhZGVyIGZpZWxkCisJICBmaWx0ZXJpbmcuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgQlJJREdFX0VCVF9MSU1JVAogCXRyaXN0YXRlICJlYnQ6IGxpbWl0IG1hdGNoIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCUklER0VfTkZfRUJUQUJMRVMKQEAgLTIyMSw3ICsyMzAsNyBAQAogCSAgZWl0aGVyIHRoZSBvbGQgTE9HIHRhcmdldCwgdGhlIG9sZCBVTE9HIHRhcmdldCBvciBuZm5ldGxpbmtfbG9nCiAJICBhcyBiYWNrZW5kLgogCi0JICBUaGlzIG9wdGlvbiBhZGRzIHRoZSB1bG9nIHdhdGNoZXIsIHRoYXQgeW91IGNhbiB1c2UgaW4gYW55IHJ1bGUKKwkgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIG5mbG9nIHdhdGNoZXIsIHRoYXQgeW91IGNhbiB1c2UgaW4gYW55IHJ1bGUKIAkgIGluIGFueSBlYnRhYmxlcyB0YWJsZS4KIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDgzNzE1ZDcuLjA3MTg2OTkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiBvYmotJChDT05GSUdfQlJJREdFX0VCVF9BTU9ORykgKz0gZWJ0X2Ftb25nLm8KIG9iai0kKENPTkZJR19CUklER0VfRUJUX0FSUCkgKz0gZWJ0X2FycC5vCiBvYmotJChDT05GSUdfQlJJREdFX0VCVF9JUCkgKz0gZWJ0X2lwLm8KK29iai0kKENPTkZJR19CUklER0VfRUJUX0lQNikgKz0gZWJ0X2lwNi5vCiBvYmotJChDT05GSUdfQlJJREdFX0VCVF9MSU1JVCkgKz0gZWJ0X2xpbWl0Lm8KIG9iai0kKENPTkZJR19CUklER0VfRUJUX01BUkspICs9IGVidF9tYXJrX20ubwogb2JqLSQoQ09ORklHX0JSSURHRV9FQlRfUEtUVFlQRSkgKz0gZWJ0X3BrdHR5cGUubwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2lwNi5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2lwNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZWZiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfaXA2LmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiAgZWJ0X2lwNgorICoKKyAqCUF1dGhvcnM6CisgKglNYW5vaGFyIENhc3RlbGlubyA8bWFub2hhci5yLmNhc3RlbGlub0BpbnRlbC5jb20+CisgKglLdW8tTGFuZyBUc2VuZyA8a3VvLWxhbmcudHNlbmdAaW50ZWwuY29tPgorICoJSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAY29tcHV0ZXJnbWJoLmRlPgorICoKKyAqIFN1bW1hcnk6CisgKiBUaGlzIGlzIGp1c3QgYSBtb2RpZmljYXRpb24gb2YgdGhlIElQdjQgY29kZSB3cml0dGVuIGJ5CisgKiBCYXJ0IERlIFNjaHV5bWVyIDxiZHNjaHV5bUBwYW5kb3JhLmJlPgorICogd2l0aCB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBzdXBwb3J0IElQdjYKKyAqCisgKiAgSmFuLCAyMDA4CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9pcDYuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPG5ldC9kc2ZpZWxkLmg+CisKK3N0cnVjdCB0Y3B1ZHBoZHIgeworCV9fYmUxNiBzcmM7CisJX19iZTE2IGRzdDsKK307CisKK3N0YXRpYyBpbnQgZWJ0X2ZpbHRlcl9pcDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKyAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKyAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsIGNvbnN0IHZvaWQgKmRhdGEsCisgICB1bnNpZ25lZCBpbnQgZGF0YWxlbikKK3sKKwljb25zdCBzdHJ1Y3QgZWJ0X2lwNl9pbmZvICppbmZvID0gKHN0cnVjdCBlYnRfaXA2X2luZm8gKilkYXRhOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppaDY7CisJc3RydWN0IGlwdjZoZHIgX2lwNmg7CisJY29uc3Qgc3RydWN0IHRjcHVkcGhkciAqcHB0cjsKKwlzdHJ1Y3QgdGNwdWRwaGRyIF9wb3J0czsKKwlzdHJ1Y3QgaW42X2FkZHIgdG1wX2FkZHI7CisJaW50IGk7CisKKwlpaDYgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCAwLCBzaXplb2YoX2lwNmgpLCAmX2lwNmgpOworCWlmIChpaDYgPT0gTlVMTCkKKwkJcmV0dXJuIEVCVF9OT01BVENIOworCWlmIChpbmZvLT5iaXRtYXNrICYgRUJUX0lQNl9UQ0xBU1MgJiYKKwkgICBGV0lOVihpbmZvLT50Y2xhc3MgIT0gaXB2Nl9nZXRfZHNmaWVsZChpaDYpLCBFQlRfSVA2X1RDTEFTUykpCisJCXJldHVybiBFQlRfTk9NQVRDSDsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQl0bXBfYWRkci5pbjZfdS51Nl9hZGRyMzJbaV0gPSBpaDYtPnNhZGRyLmluNl91LnU2X2FkZHIzMltpXSAmCisJCQlpbmZvLT5zbXNrLmluNl91LnU2X2FkZHIzMltpXTsKKwlpZiAoaW5mby0+Yml0bWFzayAmIEVCVF9JUDZfU09VUkNFICYmCisJCUZXSU5WKChpcHY2X2FkZHJfY21wKCZ0bXBfYWRkciwgJmluZm8tPnNhZGRyKSAhPSAwKSwKKwkJCUVCVF9JUDZfU09VUkNFKSkKKwkJcmV0dXJuIEVCVF9OT01BVENIOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXRtcF9hZGRyLmluNl91LnU2X2FkZHIzMltpXSA9IGloNi0+ZGFkZHIuaW42X3UudTZfYWRkcjMyW2ldICYKKwkJCWluZm8tPmRtc2suaW42X3UudTZfYWRkcjMyW2ldOworCWlmIChpbmZvLT5iaXRtYXNrICYgRUJUX0lQNl9ERVNUICYmCisJICAgRldJTlYoKGlwdjZfYWRkcl9jbXAoJnRtcF9hZGRyLCAmaW5mby0+ZGFkZHIpICE9IDApLCBFQlRfSVA2X0RFU1QpKQorCQlyZXR1cm4gRUJUX05PTUFUQ0g7CisJaWYgKGluZm8tPmJpdG1hc2sgJiBFQlRfSVA2X1BST1RPKSB7CisJCXVpbnQ4X3QgbmV4dGhkciA9IGloNi0+bmV4dGhkcjsKKwkJaW50IG9mZnNldF9waDsKKworCQlvZmZzZXRfcGggPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgc2l6ZW9mKF9pcDZoKSwgJm5leHRoZHIpOworCQlpZiAob2Zmc2V0X3BoID09IC0xKQorCQkJcmV0dXJuIEVCVF9OT01BVENIOworCQlpZiAoRldJTlYoaW5mby0+cHJvdG9jb2wgIT0gbmV4dGhkciwgRUJUX0lQNl9QUk9UTykpCisJCQlyZXR1cm4gRUJUX05PTUFUQ0g7CisJCWlmICghKGluZm8tPmJpdG1hc2sgJiBFQlRfSVA2X0RQT1JUKSAmJgorCQkgICAgIShpbmZvLT5iaXRtYXNrICYgRUJUX0lQNl9TUE9SVCkpCisJCQlyZXR1cm4gRUJUX01BVENIOworCQlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0X3BoLCBzaXplb2YoX3BvcnRzKSwKKwkJCQkJICAmX3BvcnRzKTsKKwkJaWYgKHBwdHIgPT0gTlVMTCkKKwkJCXJldHVybiBFQlRfTk9NQVRDSDsKKwkJaWYgKGluZm8tPmJpdG1hc2sgJiBFQlRfSVA2X0RQT1JUKSB7CisJCQl1MzIgZHN0ID0gbnRvaHMocHB0ci0+ZHN0KTsKKwkJCWlmIChGV0lOVihkc3QgPCBpbmZvLT5kcG9ydFswXSB8fAorCQkJCSAgZHN0ID4gaW5mby0+ZHBvcnRbMV0sIEVCVF9JUDZfRFBPUlQpKQorCQkJCXJldHVybiBFQlRfTk9NQVRDSDsKKwkJfQorCQlpZiAoaW5mby0+Yml0bWFzayAmIEVCVF9JUDZfU1BPUlQpIHsKKwkJCXUzMiBzcmMgPSBudG9ocyhwcHRyLT5zcmMpOworCQkJaWYgKEZXSU5WKHNyYyA8IGluZm8tPnNwb3J0WzBdIHx8CisJCQkJICBzcmMgPiBpbmZvLT5zcG9ydFsxXSwgRUJUX0lQNl9TUE9SVCkpCisJCQlyZXR1cm4gRUJUX05PTUFUQ0g7CisJCX0KKwkJcmV0dXJuIEVCVF9NQVRDSDsKKwl9CisJcmV0dXJuIEVCVF9NQVRDSDsKK30KKworc3RhdGljIGludCBlYnRfaXA2X2NoZWNrKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwgdW5zaWduZWQgaW50IGhvb2ttYXNrLAorICAgY29uc3Qgc3RydWN0IGVidF9lbnRyeSAqZSwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4pCit7CisJc3RydWN0IGVidF9pcDZfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgZWJ0X2lwNl9pbmZvICopZGF0YTsKKworCWlmIChkYXRhbGVuICE9IEVCVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9pcDZfaW5mbykpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZS0+ZXRocHJvdG8gIT0gaHRvbnMoRVRIX1BfSVBWNikgfHwgZS0+aW52ZmxhZ3MgJiBFQlRfSVBST1RPKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaW5mby0+Yml0bWFzayAmIH5FQlRfSVA2X01BU0sgfHwgaW5mby0+aW52ZmxhZ3MgJiB+RUJUX0lQNl9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaW5mby0+Yml0bWFzayAmIChFQlRfSVA2X0RQT1JUIHwgRUJUX0lQNl9TUE9SVCkpIHsKKwkJaWYgKGluZm8tPmludmZsYWdzICYgRUJUX0lQNl9QUk9UTykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoaW5mby0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJiYKKwkJICAgIGluZm8tPnByb3RvY29sICE9IElQUFJPVE9fVURQICYmCisJCSAgICBpbmZvLT5wcm90b2NvbCAhPSBJUFBST1RPX1VEUExJVEUgJiYKKwkJICAgIGluZm8tPnByb3RvY29sICE9IElQUFJPVE9fU0NUUCAmJgorCQkgICAgaW5mby0+cHJvdG9jb2wgIT0gSVBQUk9UT19EQ0NQKQorCQkJIHJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoaW5mby0+Yml0bWFzayAmIEVCVF9JUDZfRFBPUlQgJiYgaW5mby0+ZHBvcnRbMF0gPiBpbmZvLT5kcG9ydFsxXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGluZm8tPmJpdG1hc2sgJiBFQlRfSVA2X1NQT1JUICYmIGluZm8tPnNwb3J0WzBdID4gaW5mby0+c3BvcnRbMV0pCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGVidF9tYXRjaCBmaWx0ZXJfaXA2ID0KK3sKKwkubmFtZQkJPSBFQlRfSVA2X01BVENILAorCS5tYXRjaAkJPSBlYnRfZmlsdGVyX2lwNiwKKwkuY2hlY2sJCT0gZWJ0X2lwNl9jaGVjaywKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlYnRfaXA2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZWJ0X3JlZ2lzdGVyX21hdGNoKCZmaWx0ZXJfaXA2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVidF9pcDZfZmluaSh2b2lkKQoreworCWVidF91bnJlZ2lzdGVyX21hdGNoKCZmaWx0ZXJfaXA2KTsKK30KKworbW9kdWxlX2luaXQoZWJ0X2lwNl9pbml0KTsKK21vZHVsZV9leGl0KGVidF9pcDZfZmluaSk7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVidGFibGVzOiBJUHY2IHByb3RvY29sIHBhY2tldCBtYXRjaCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCmluZGV4IDBiMjA5ZTQuLjJmNDMwZDQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKQEAgLTE4LDYgKzE4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbG9nLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZWJ0X2xvZ19sb2NrKTsKIApAQCAtNTgsNiArNjEsMjcgQEAKIAkJcHJpbnRrKCIlMDJ4JWMiLCAqcCwgaSA9PSBFVEhfQUxFTiAtIDEgPyAnICc6JzonKTsKIH0KIAorc3RhdGljIHZvaWQKK3ByaW50X3BvcnRzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVpbnQ4X3QgcHJvdG9jb2wsIGludCBvZmZzZXQpCit7CisJaWYgKHByb3RvY29sID09IElQUFJPVE9fVENQIHx8CisJICAgIHByb3RvY29sID09IElQUFJPVE9fVURQIHx8CisJICAgIHByb3RvY29sID09IElQUFJPVE9fVURQTElURSB8fAorCSAgICBwcm90b2NvbCA9PSBJUFBST1RPX1NDVFAgfHwKKwkgICAgcHJvdG9jb2wgPT0gSVBQUk9UT19EQ0NQKSB7CisJCWNvbnN0IHN0cnVjdCB0Y3B1ZHBoZHIgKnBwdHI7CisJCXN0cnVjdCB0Y3B1ZHBoZHIgX3BvcnRzOworCisJCXBwdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsCisJCQkJCSAgc2l6ZW9mKF9wb3J0cyksICZfcG9ydHMpOworCQlpZiAocHB0ciA9PSBOVUxMKSB7CisJCQlwcmludGsoIiBJTkNPTVBMRVRFIFRDUC9VRFAgaGVhZGVyIik7CisJCQlyZXR1cm47CisJCX0KKwkJcHJpbnRrKCIgU1BUPSV1IERQVD0ldSIsIG50b2hzKHBwdHItPnNyYyksIG50b2hzKHBwdHItPmRzdCkpOworCX0KK30KKwogI2RlZmluZSBteU5JUFFVQUQoYSkgYVswXSwgYVsxXSwgYVsyXSwgYVszXQogc3RhdGljIHZvaWQKIGVidF9sb2dfcGFja2V0KHVuc2lnbmVkIGludCBwZiwgdW5zaWduZWQgaW50IGhvb2tudW0sCkBAIC05NSwyNiArMTE5LDM2IEBACiAJCXByaW50aygiIElQIFNSQz0ldS4ldS4ldS4ldSBJUCBEU1Q9JXUuJXUuJXUuJXUsIElQICIKIAkJICAgICAgICJ0b3M9MHglMDJYLCBJUCBwcm90bz0lZCIsIE5JUFFVQUQoaWgtPnNhZGRyKSwKIAkJICAgICAgIE5JUFFVQUQoaWgtPmRhZGRyKSwgaWgtPnRvcywgaWgtPnByb3RvY29sKTsKLQkJaWYgKGloLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fAotCQkgICAgaWgtPnByb3RvY29sID09IElQUFJPVE9fVURQIHx8Ci0JCSAgICBpaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFBMSVRFIHx8Ci0JCSAgICBpaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQIHx8Ci0JCSAgICBpaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19EQ0NQKSB7Ci0JCQljb25zdCBzdHJ1Y3QgdGNwdWRwaGRyICpwcHRyOwotCQkJc3RydWN0IHRjcHVkcGhkciBfcG9ydHM7Ci0KLQkJCXBwdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBpaC0+aWhsKjQsCi0JCQkJCQkgIHNpemVvZihfcG9ydHMpLCAmX3BvcnRzKTsKLQkJCWlmIChwcHRyID09IE5VTEwpIHsKLQkJCQlwcmludGsoIiBJTkNPTVBMRVRFIFRDUC9VRFAgaGVhZGVyIik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlwcmludGsoIiBTUFQ9JXUgRFBUPSV1IiwgbnRvaHMocHB0ci0+c3JjKSwKLQkJCSAgIG50b2hzKHBwdHItPmRzdCkpOwotCQl9CisJCXByaW50X3BvcnRzKHNrYiwgaWgtPnByb3RvY29sLCBpaC0+aWhsKjQpOwogCQlnb3RvIG91dDsKIAl9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19CUklER0VfRUJUX0lQNikgfHwgZGVmaW5lZChDT05GSUdfQlJJREdFX0VCVF9JUDZfTU9EVUxFKQorCWlmICgoYml0bWFzayAmIEVCVF9MT0dfSVA2KSAmJiBldGhfaGRyKHNrYiktPmhfcHJvdG8gPT0KKwkgICBodG9ucyhFVEhfUF9JUFY2KSkgeworCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaWg7CisJCXN0cnVjdCBpcHY2aGRyIF9pcGg7CisJCXVpbnQ4X3QgbmV4dGhkcjsKKwkJaW50IG9mZnNldF9waDsKKworCQlpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIHNpemVvZihfaXBoKSwgJl9pcGgpOworCQlpZiAoaWggPT0gTlVMTCkgeworCQkJcHJpbnRrKCIgSU5DT01QTEVURSBJUHY2IGhlYWRlciIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcHJpbnRrKCIgSVB2NiBTUkM9JXg6JXg6JXg6JXg6JXg6JXg6JXg6JXggIgorCQkgICAgICAgIklQdjYgRFNUPSV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4LCBJUHY2ICIKKwkJICAgICAgICJwcmlvcml0eT0weCUwMVgsIE5leHQgSGVhZGVyPSVkIiwgTklQNihpaC0+c2FkZHIpLAorCQkgICAgICAgTklQNihpaC0+ZGFkZHIpLCBpaC0+cHJpb3JpdHksIGloLT5uZXh0aGRyKTsKKwkJbmV4dGhkciA9IGloLT5uZXh0aGRyOworCQlvZmZzZXRfcGggPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgc2l6ZW9mKF9pcGgpLCAmbmV4dGhkcik7CisJCWlmIChvZmZzZXRfcGggPT0gLTEpCisJCQlnb3RvIG91dDsKKwkJcHJpbnRfcG9ydHMoc2tiLCBuZXh0aGRyLCBvZmZzZXRfcGgpOworCQlnb3RvIG91dDsKKwl9CisjZW5kaWYKKwogCWlmICgoYml0bWFzayAmIEVCVF9MT0dfQVJQKSAmJgogCSAgICAoKGV0aF9oZHIoc2tiKS0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9BUlApKSB8fAogCSAgICAgKGV0aF9oZHIoc2tiKS0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9SQVJQKSkpKSB7CmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA0ODRiYmY2Li44MDM1ZmJmNSAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9hZl9jYW4uYworKysgYi9uZXQvY2FuL2FmX2Nhbi5jCkBAIC02MTUsNyArNjE1LDcgQEAKIAlzdHJ1Y3QgY2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopc2tiLT5kYXRhOwogCWludCBtYXRjaGVzOwogCi0JaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQ0FOIHx8IGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpIHsKKwlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9DQU4gfHwgIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KQEAgLTcyOCw3ICs3MjgsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwogCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9DQU4pCmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uYwppbmRleCA3MmMyY2U5Li5kMGRkMzgyIDEwMDY0NAotLS0gYS9uZXQvY2FuL2JjbS5jCisrKyBiL25ldC9jYW4vYmNtLmMKQEAgLTEzMDMsNyArMTMwMyw3IEBACiAJc3RydWN0IGJjbV9vcCAqb3A7CiAJaW50IG5vdGlmeV9lbm9kZXYgPSAwOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9DQU4pCmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuYwppbmRleCAzZTQ2ZWUzLi42ZTA2NjNmIDEwMDY0NAotLS0gYS9uZXQvY2FuL3Jhdy5jCisrKyBiL25ldC9jYW4vcmF3LmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogCXN0cnVjdCByYXdfc29jayAqcm8gPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCByYXdfc29jaywgbm90aWZpZXIpOwogCXN0cnVjdCBzb2NrICpzayA9ICZyby0+c2s7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0NBTikKZGlmZiAtLWdpdCBhL25ldC9jb21wYXQuYyBiL25ldC9jb21wYXQuYwppbmRleCBjODIzZjZmLi42ZTFiMDNiIDEwMDY0NAotLS0gYS9uZXQvY29tcGF0LmMKKysrIGIvbmV0L2NvbXBhdC5jCkBAIC03NSw3ICs3NSw3IEBACiAKIC8qIEkndmUgbmFtZWQgdGhlIGFyZ3Mgc28gaXQgaXMgZWFzeSB0byB0ZWxsIHdob3NlIHNwYWNlIHRoZSBwb2ludGVycyBhcmUgaW4uICovCiBpbnQgdmVyaWZ5X2NvbXBhdF9pb3ZlYyhzdHJ1Y3QgbXNnaGRyICprZXJuX21zZywgc3RydWN0IGlvdmVjICprZXJuX2lvdiwKLQkJICAgY2hhciAqa2Vybl9hZGRyZXNzLCBpbnQgbW9kZSkKKwkJICAgc3RydWN0IHNvY2thZGRyICprZXJuX2FkZHJlc3MsIGludCBtb2RlKQogewogCWludCB0b3RfbGVuOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDgyMWNiMTYuLjc0NjNhMjEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC05MCw2ICs5MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CkBAIC0xMjAsNiArMTIxLDExIEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiAjaW5jbHVkZSAibmV0LXN5c2ZzLmgiCiAKQEAgLTI1NSw5ICsyNjEsOSBAQAogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29mdG5ldF9kYXRhLCBzb2Z0bmV0X2RhdGEpOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAogLyoKLSAqIHJlZ2lzdGVyX25ldGRldmljZSgpIGluaXRzIGRldi0+X3htaXRfbG9jayBhbmQgc2V0cyBsb2NrZGVwIGNsYXNzCisgKiByZWdpc3Rlcl9uZXRkZXZpY2UoKSBpbml0cyB0eHEtPl94bWl0X2xvY2sgYW5kIHNldHMgbG9ja2RlcCBjbGFzcwogICogYWNjb3JkaW5nIHRvIGRldi0+dHlwZQogICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbmV0ZGV2X2xvY2tfdHlwZVtdID0KQEAgLTI5NSw2ICszMDEsNyBAQAogCSAiX3htaXRfTk9ORSJ9OwogCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG5ldGRldl94bWl0X2xvY2tfa2V5W0FSUkFZX1NJWkUobmV0ZGV2X2xvY2tfdHlwZSldOworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBuZXRkZXZfYWRkcl9sb2NrX2tleVtBUlJBWV9TSVpFKG5ldGRldl9sb2NrX3R5cGUpXTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBuZXRkZXZfbG9ja19wb3ModW5zaWduZWQgc2hvcnQgZGV2X3R5cGUpCiB7CkBAIC0zMDcsOCArMzE0LDggQEAKIAlyZXR1cm4gQVJSQVlfU0laRShuZXRkZXZfbG9ja190eXBlKSAtIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfc2V0X2xvY2tkZXBfY2xhc3Moc3BpbmxvY2tfdCAqbG9jaywKLQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGRldl90eXBlKQorc3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9zZXRfeG1pdF9sb2NrZGVwX2NsYXNzKHNwaW5sb2NrX3QgKmxvY2ssCisJCQkJCQkgdW5zaWduZWQgc2hvcnQgZGV2X3R5cGUpCiB7CiAJaW50IGk7CiAKQEAgLTMxNiw5ICszMjMsMjIgQEAKIAlsb2NrZGVwX3NldF9jbGFzc19hbmRfbmFtZShsb2NrLCAmbmV0ZGV2X3htaXRfbG9ja19rZXlbaV0sCiAJCQkJICAgbmV0ZGV2X2xvY2tfbmFtZVtpXSk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfc2V0X2FkZHJfbG9ja2RlcF9jbGFzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBpOworCisJaSA9IG5ldGRldl9sb2NrX3BvcyhkZXYtPnR5cGUpOworCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKCZkZXYtPmFkZHJfbGlzdF9sb2NrLAorCQkJCSAgICZuZXRkZXZfYWRkcl9sb2NrX2tleVtpXSwKKwkJCQkgICBuZXRkZXZfbG9ja19uYW1lW2ldKTsKK30KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3NldF9sb2NrZGVwX2NsYXNzKHNwaW5sb2NrX3QgKmxvY2ssCi0JCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBkZXZfdHlwZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfc2V0X3htaXRfbG9ja2RlcF9jbGFzcyhzcGlubG9ja190ICpsb2NrLAorCQkJCQkJIHVuc2lnbmVkIHNob3J0IGRldl90eXBlKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9zZXRfYWRkcl9sb2NrZGVwX2NsYXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiB9CiAjZW5kaWYKQEAgLTk2MSw2ICs5ODEsMTIgQEAKIAl9CiB9CiAKK3ZvaWQgbmV0ZGV2X2JvbmRpbmdfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9CT05ESU5HX0ZBSUxPVkVSLCBkZXYpOworfQorRVhQT1JUX1NZTUJPTChuZXRkZXZfYm9uZGluZ19jaGFuZ2UpOworCiAvKioKICAqCWRldl9sb2FkIAktIGxvYWQgYSBuZXR3b3JrIG1vZHVsZQogICoJQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZQpAQCAtMTExNyw2ICsxMTQzLDI5IEBACiB9CiAKIAorLyoqCisgKglkZXZfZGlzYWJsZV9scm8gLSBkaXNhYmxlIExhcmdlIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQorICoJQGRldjogZGV2aWNlCisgKgorICoJRGlzYWJsZSBMYXJnZSBSZWNlaXZlIE9mZmxvYWQgKExSTykgb24gYSBuZXQgZGV2aWNlLiAgTXVzdCBiZQorICoJY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZCBwYWNrZXRzIG1heSBiZQorICoJZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLgorICovCit2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPmV0aHRvb2xfb3BzICYmIGRldi0+ZXRodG9vbF9vcHMtPmdldF9mbGFncyAmJgorCSAgICBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfZmxhZ3MpIHsKKwkJdTMyIGZsYWdzID0gZGV2LT5ldGh0b29sX29wcy0+Z2V0X2ZsYWdzKGRldik7CisJCWlmIChmbGFncyAmIEVUSF9GTEFHX0xSTykgeworCQkJZmxhZ3MgJj0gfkVUSF9GTEFHX0xSTzsKKwkJCWRldi0+ZXRodG9vbF9vcHMtPnNldF9mbGFncyhkZXYsIGZsYWdzKTsKKwkJfQorCX0KKwlXQVJOX09OKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTyk7Cit9CitFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2xybyk7CisKKwogc3RhdGljIGludCBkZXZfYm9vdF9waGFzZSA9IDE7CiAKIC8qCkBAIC0xMjkwLDE2ICsxMzM5LDE5IEBACiB9CiAKIAotdm9pZCBfX25ldGlmX3NjaGVkdWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit2b2lkIF9fbmV0aWZfc2NoZWR1bGUoc3RydWN0IFFkaXNjICpxKQogewotCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX0xJTktfU1RBVEVfU0NIRUQsICZkZXYtPnN0YXRlKSkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlmIChXQVJOX09OX09OQ0UocSA9PSAmbm9vcF9xZGlzYykpCisJCXJldHVybjsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX1FESVNDX1NUQVRFX1NDSEVELCAmcS0+c3RhdGUpKSB7CiAJCXN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJc2QgPSAmX19nZXRfY3B1X3Zhcihzb2Z0bmV0X2RhdGEpOwotCQlkZXYtPm5leHRfc2NoZWQgPSBzZC0+b3V0cHV0X3F1ZXVlOwotCQlzZC0+b3V0cHV0X3F1ZXVlID0gZGV2OworCQlxLT5uZXh0X3NjaGVkID0gc2QtPm91dHB1dF9xdWV1ZTsKKwkJc2QtPm91dHB1dF9xdWV1ZSA9IHE7CiAJCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9UWF9TT0ZUSVJRKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KQEAgLTE1NjYsNyArMTYxOCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBkZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxKQogewogCWlmIChsaWtlbHkoIXNrYi0+bmV4dCkpIHsKIAkJaWYgKCFsaXN0X2VtcHR5KCZwdHlwZV9hbGwpKQpAQCAtMTU5NSw5ICsxNjQ4LDcgQEAKIAkJCXNrYi0+bmV4dCA9IG5za2I7CiAJCQlyZXR1cm4gcmM7CiAJCX0KLQkJaWYgKHVubGlrZWx5KChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgfHwKLQkJCSAgICAgbmV0aWZfc3VicXVldWVfc3RvcHBlZChkZXYsIHNrYikpICYmCi0JCQkgICAgIHNrYi0+bmV4dCkpCisJCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgJiYgc2tiLT5uZXh0KSkKIAkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9IHdoaWxlIChza2ItPm5leHQpOwogCkBAIC0xNjA4LDYgKzE2NTksNzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUzMiBzaW1wbGVfdHhfaGFzaHJuZDsKK3N0YXRpYyBpbnQgc2ltcGxlX3R4X2hhc2hybmRfaW5pdGlhbGl6ZWQgPSAwOworCitzdGF0aWMgdTE2IHNpbXBsZV90eF9oYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdTMyIGFkZHIxLCBhZGRyMiwgcG9ydHM7CisJdTMyIGhhc2gsIGlobDsKKwl1OCBpcF9wcm90bzsKKworCWlmICh1bmxpa2VseSghc2ltcGxlX3R4X2hhc2hybmRfaW5pdGlhbGl6ZWQpKSB7CisJCWdldF9yYW5kb21fYnl0ZXMoJnNpbXBsZV90eF9oYXNocm5kLCA0KTsKKwkJc2ltcGxlX3R4X2hhc2hybmRfaW5pdGlhbGl6ZWQgPSAxOworCX0KKworCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgeworCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCWlwX3Byb3RvID0gaXBfaGRyKHNrYiktPnByb3RvY29sOworCQlhZGRyMSA9IGlwX2hkcihza2IpLT5zYWRkcjsKKwkJYWRkcjIgPSBpcF9oZHIoc2tiKS0+ZGFkZHI7CisJCWlobCA9IGlwX2hkcihza2IpLT5paGw7CisJCWJyZWFrOworCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwkJaXBfcHJvdG8gPSBpcHY2X2hkcihza2IpLT5uZXh0aGRyOworCQlhZGRyMSA9IGlwdjZfaGRyKHNrYiktPnNhZGRyLnM2X2FkZHIzMlszXTsKKwkJYWRkcjIgPSBpcHY2X2hkcihza2IpLT5kYWRkci5zNl9hZGRyMzJbM107CisJCWlobCA9ICg0MCA+PiAyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisKKwlzd2l0Y2ggKGlwX3Byb3RvKSB7CisJY2FzZSBJUFBST1RPX1RDUDoKKwljYXNlIElQUFJPVE9fVURQOgorCWNhc2UgSVBQUk9UT19EQ0NQOgorCWNhc2UgSVBQUk9UT19FU1A6CisJY2FzZSBJUFBST1RPX0FIOgorCWNhc2UgSVBQUk9UT19TQ1RQOgorCWNhc2UgSVBQUk9UT19VRFBMSVRFOgorCQlwb3J0cyA9ICooKHUzMiAqKSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyAoaWhsICogNCkpKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwb3J0cyA9IDA7CisJCWJyZWFrOworCX0KKworCWhhc2ggPSBqaGFzaF8zd29yZHMoYWRkcjEsIGFkZHIyLCBwb3J0cywgc2ltcGxlX3R4X2hhc2hybmQpOworCisJcmV0dXJuICh1MTYpICgoKHU2NCkgaGFzaCAqIGRldi0+cmVhbF9udW1fdHhfcXVldWVzKSA+PiAzMik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcGlja190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXUxNiBxdWV1ZV9pbmRleCA9IDA7CisKKwlpZiAoZGV2LT5zZWxlY3RfcXVldWUpCisJCXF1ZXVlX2luZGV4ID0gZGV2LT5zZWxlY3RfcXVldWUoZGV2LCBza2IpOworCWVsc2UgaWYgKGRldi0+cmVhbF9udW1fdHhfcXVldWVzID4gMSkKKwkJcXVldWVfaW5kZXggPSBzaW1wbGVfdHhfaGFzaChkZXYsIHNrYik7CisKKwlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZV9pbmRleCk7CisJcmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxdWV1ZV9pbmRleCk7Cit9CisKIC8qKgogICoJZGV2X3F1ZXVlX3htaXQgLSB0cmFuc21pdCBhIGJ1ZmZlcgogICoJQHNrYjogYnVmZmVyIHRvIHRyYW5zbWl0CkBAIC0xNjMzLDEwICsxNzUxLDEwIEBACiAgKiAgICAgIHRoZSBCSCBlbmFibGUgY29kZSBtdXN0IGhhdmUgSVJRcyBlbmFibGVkIHNvIHRoYXQgaXQgd2lsbCBub3QgZGVhZGxvY2suCiAgKiAgICAgICAgICAtLUJMRwogICovCi0KIGludCBkZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJc3RydWN0IFFkaXNjICpxOwogCWludCByYyA9IC1FTk9NRU07CiAKQEAgLTE2NjksNDQgKzE3ODcsMjkgQEAKIAl9CiAKIGdzbzoKLQlzcGluX2xvY2tfcHJlZmV0Y2goJmRldi0+cXVldWVfbG9jayk7Ci0KIAkvKiBEaXNhYmxlIHNvZnQgaXJxcyBmb3IgdmFyaW91cyBsb2NrcyBiZWxvdy4gQWxzbwogCSAqIHN0b3BzIHByZWVtcHRpb24gZm9yIFJDVS4KIAkgKi8KIAlyY3VfcmVhZF9sb2NrX2JoKCk7CiAKLQkvKiBVcGRhdGVzIG9mIHFkaXNjIGFyZSBzZXJpYWxpemVkIGJ5IHF1ZXVlX2xvY2suCi0JICogVGhlIHN0cnVjdCBRZGlzYyB3aGljaCBpcyBwb2ludGVkIHRvIGJ5IHFkaXNjIGlzIG5vdyBhCi0JICogcmN1IHN0cnVjdHVyZSAtIGl0IG1heSBiZSBhY2Nlc3NlZCB3aXRob3V0IGFjcXVpcmluZwotCSAqIGEgbG9jayAoYnV0IHRoZSBzdHJ1Y3R1cmUgbWF5IGJlIHN0YWxlLikgVGhlIGZyZWVpbmcgb2YgdGhlCi0JICogcWRpc2Mgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBpdCdzIGtub3duIHRoYXQgdGhlcmUgYXJlIG5vCi0JICogbW9yZSByZWZlcmVuY2VzIHRvIGl0LgotCSAqCi0JICogSWYgdGhlIHFkaXNjIGhhcyBhbiBlbnF1ZXVlIGZ1bmN0aW9uLCB3ZSBzdGlsbCBuZWVkIHRvCi0JICogaG9sZCB0aGUgcXVldWVfbG9jayBiZWZvcmUgY2FsbGluZyBpdCwgc2luY2UgcXVldWVfbG9jawotCSAqIGFsc28gc2VyaWFsaXplcyBhY2Nlc3MgdG8gdGhlIGRldmljZSBxdWV1ZS4KLQkgKi8KKwl0eHEgPSBkZXZfcGlja190eChkZXYsIHNrYik7CisJcSA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKIAotCXEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5xZGlzYyk7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJc2tiLT50Y192ZXJkID0gU0VUX1RDX0FUKHNrYi0+dGNfdmVyZCxBVF9FR1JFU1MpOwogI2VuZGlmCiAJaWYgKHEtPmVucXVldWUpIHsKLQkJLyogR3JhYiBkZXZpY2UgcXVldWUgKi8KLQkJc3Bpbl9sb2NrKCZkZXYtPnF1ZXVlX2xvY2spOwotCQlxID0gZGV2LT5xZGlzYzsKLQkJaWYgKHEtPmVucXVldWUpIHsKLQkJCS8qIHJlc2V0IHF1ZXVlX21hcHBpbmcgdG8gemVybyAqLwotCQkJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgMCk7Ci0JCQlyYyA9IHEtPmVucXVldWUoc2tiLCBxKTsKLQkJCXFkaXNjX3J1bihkZXYpOwotCQkJc3Bpbl91bmxvY2soJmRldi0+cXVldWVfbG9jayk7CisJCXNwaW5sb2NrX3QgKnJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayhxKTsKIAotCQkJcmMgPSByYyA9PSBORVRfWE1JVF9CWVBBU1MgPyBORVRfWE1JVF9TVUNDRVNTIDogcmM7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlzcGluX3VubG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKHJvb3RfbG9jayk7CisKKwkJcmMgPSBxZGlzY19lbnF1ZXVlX3Jvb3Qoc2tiLCBxKTsKKwkJcWRpc2NfcnVuKHEpOworCisJCXNwaW5fdW5sb2NrKHJvb3RfbG9jayk7CisKKwkJcmMgPSByYyA9PSBORVRfWE1JVF9CWVBBU1MgPyBORVRfWE1JVF9TVUNDRVNTIDogcmM7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIFRoZSBkZXZpY2UgaGFzIG5vIHF1ZXVlLiBDb21tb24gY2FzZSBmb3Igc29mdHdhcmUgZGV2aWNlczoKQEAgLTE3MjQsMTkgKzE4MjcsMTggQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkgewogCQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOyAvKiBvayBiZWNhdXNlIEJIcyBhcmUgb2ZmICovCiAKLQkJaWYgKGRldi0+eG1pdF9sb2NrX293bmVyICE9IGNwdSkgeworCQlpZiAodHhxLT54bWl0X2xvY2tfb3duZXIgIT0gY3B1KSB7CiAKLQkJCUhBUkRfVFhfTE9DSyhkZXYsIGNwdSk7CisJCQlIQVJEX1RYX0xPQ0soZGV2LCB0eHEsIGNwdSk7CiAKLQkJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmCi0JCQkgICAgIW5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoZGV2LCBza2IpKSB7CisJCQlpZiAoIW5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgewogCQkJCXJjID0gMDsKLQkJCQlpZiAoIWRldl9oYXJkX3N0YXJ0X3htaXQoc2tiLCBkZXYpKSB7Ci0JCQkJCUhBUkRfVFhfVU5MT0NLKGRldik7CisJCQkJaWYgKCFkZXZfaGFyZF9zdGFydF94bWl0KHNrYiwgZGV2LCB0eHEpKSB7CisJCQkJCUhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQogCQkJfQotCQkJSEFSRF9UWF9VTkxPQ0soZGV2KTsKKwkJCUhBUkRfVFhfVU5MT0NLKGRldiwgdHhxKTsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fQ1JJVCAiVmlydHVhbCBkZXZpY2UgJXMgYXNrcyB0byAiCiAJCQkJICAgICAgICJxdWV1ZSBwYWNrZXQhXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTg4MCw3ICsxOTgyLDcgQEAKIAl9CiAKIAlpZiAoc2QtPm91dHB1dF9xdWV1ZSkgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqaGVhZDsKKwkJc3RydWN0IFFkaXNjICpoZWFkOwogCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWhlYWQgPSBzZC0+b3V0cHV0X3F1ZXVlOwpAQCAtMTg4OCwxNyArMTk5MCwyMCBAQAogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAkJd2hpbGUgKGhlYWQpIHsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBoZWFkOworCQkJc3RydWN0IFFkaXNjICpxID0gaGVhZDsKKwkJCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKKwogCQkJaGVhZCA9IGhlYWQtPm5leHRfc2NoZWQ7CiAKIAkJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCQkJY2xlYXJfYml0KF9fTElOS19TVEFURV9TQ0hFRCwgJmRldi0+c3RhdGUpOworCQkJY2xlYXJfYml0KF9fUURJU0NfU1RBVEVfU0NIRUQsICZxLT5zdGF0ZSk7CiAKLQkJCWlmIChzcGluX3RyeWxvY2soJmRldi0+cXVldWVfbG9jaykpIHsKLQkJCQlxZGlzY19ydW4oZGV2KTsKLQkJCQlzcGluX3VubG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsKKwkJCXJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayhxKTsKKwkJCWlmIChzcGluX3RyeWxvY2socm9vdF9sb2NrKSkgeworCQkJCXFkaXNjX3J1bihxKTsKKwkJCQlzcGluX3VubG9jayhyb290X2xvY2spOwogCQkJfSBlbHNlIHsKLQkJCQluZXRpZl9zY2hlZHVsZShkZXYpOworCQkJCV9fbmV0aWZfc2NoZWR1bGUocSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xOTc5LDEwICsyMDg0LDExIEBACiAgKi8KIHN0YXRpYyBpbnQgaW5nX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBRZGlzYyAqcTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0JaW50IHJlc3VsdCA9IFRDX0FDVF9PSzsKIAl1MzIgdHRsID0gR19UQ19SVFRMKHNrYi0+dGNfdmVyZCk7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqcnhxOworCWludCByZXN1bHQgPSBUQ19BQ1RfT0s7CisJc3RydWN0IFFkaXNjICpxOwogCiAJaWYgKE1BWF9SRURfTE9PUCA8IHR0bCsrKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTE5OTQsMTAgKzIxMDAsMTQgQEAKIAlza2ItPnRjX3ZlcmQgPSBTRVRfVENfUlRUTChza2ItPnRjX3ZlcmQsIHR0bCk7CiAJc2tiLT50Y192ZXJkID0gU0VUX1RDX0FUKHNrYi0+dGNfdmVyZCwgQVRfSU5HUkVTUyk7CiAKLQlzcGluX2xvY2soJmRldi0+aW5ncmVzc19sb2NrKTsKLQlpZiAoKHEgPSBkZXYtPnFkaXNjX2luZ3Jlc3MpICE9IE5VTEwpCi0JCXJlc3VsdCA9IHEtPmVucXVldWUoc2tiLCBxKTsKLQlzcGluX3VubG9jaygmZGV2LT5pbmdyZXNzX2xvY2spOworCXJ4cSA9ICZkZXYtPnJ4X3F1ZXVlOworCisJcSA9IHJ4cS0+cWRpc2M7CisJaWYgKHEpIHsKKwkJc3Bpbl9sb2NrKHFkaXNjX2xvY2socSkpOworCQlyZXN1bHQgPSBxZGlzY19lbnF1ZXVlX3Jvb3Qoc2tiLCBxKTsKKwkJc3Bpbl91bmxvY2socWRpc2NfbG9jayhxKSk7CisJfQogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIwMDYsNyArMjExNiw3IEBACiAJCQkJCSBzdHJ1Y3QgcGFja2V0X3R5cGUgKipwdF9wcmV2LAogCQkJCQkgaW50ICpyZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlpZiAoIXNrYi0+ZGV2LT5xZGlzY19pbmdyZXNzKQorCWlmICghc2tiLT5kZXYtPnJ4X3F1ZXVlLnFkaXNjKQogCQlnb3RvIG91dDsKIAogCWlmICgqcHRfcHJldikgewpAQCAtMjAzMCw2ICsyMTQwLDMzIEBACiB9CiAjZW5kaWYKIAorLyoKKyAqIAluZXRpZl9uaXRfZGVsaXZlciAtIGRlbGl2ZXIgcmVjZWl2ZWQgcGFja2V0cyB0byBuZXR3b3JrIHRhcHMKKyAqIAlAc2tiOiBidWZmZXIKKyAqCisgKiAJVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRlbGl2ZXIgaW5jb21pbmcgcGFja2V0cyB0byBuZXR3b3JrCisgKiAJdGFwcy4gSXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgbm9ybWFsIG5ldGlmX3JlY2VpdmVfc2tiIHBhdGgKKyAqIAlpcyBieXBhc3NlZCwgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBWTEFOIGFjY2VsZXJhdGlvbi4KKyAqLwordm9pZCBuZXRpZl9uaXRfZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGU7CisKKwlpZiAobGlzdF9lbXB0eSgmcHR5cGVfYWxsKSkKKwkJcmV0dXJuOworCisJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwlza2ItPm1hY19sZW4gPSBza2ItPm5ldHdvcmtfaGVhZGVyIC0gc2tiLT5tYWNfaGVhZGVyOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0eXBlLCAmcHR5cGVfYWxsLCBsaXN0KSB7CisJCWlmICghcHR5cGUtPmRldiB8fCBwdHlwZS0+ZGV2ID09IHNrYi0+ZGV2KQorCQkJZGVsaXZlcl9za2Ioc2tiLCBwdHlwZSwgc2tiLT5kZXYpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKwogLyoqCiAgKgluZXRpZl9yZWNlaXZlX3NrYiAtIHByb2Nlc3MgcmVjZWl2ZSBidWZmZXIgZnJvbSBuZXR3b3JrCiAgKglAc2tiOiBidWZmZXIgdG8gcHJvY2VzcwpAQCAtMjI2MSw3ICsyMzk4LDcgQEAKIAkgKi8KIAlpZiAoIWNwdXNfZW1wdHkobmV0X2RtYS5jaGFubmVsX21hc2spKSB7CiAJCWludCBjaGFuX2lkeDsKLQkJZm9yX2VhY2hfY3B1X21hc2soY2hhbl9pZHgsIG5ldF9kbWEuY2hhbm5lbF9tYXNrKSB7CisJCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNoYW5faWR4LCBuZXRfZG1hLmNoYW5uZWxfbWFzaykgewogCQkJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gbmV0X2RtYS5jaGFubmVsc1tjaGFuX2lkeF07CiAJCQlpZiAoY2hhbikKIAkJCQlkbWFfYXN5bmNfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbik7CkBAIC0yNzY5LDE2ICsyOTA2LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKQorc3RhdGljIGludCBfX2Rldl9zZXRfcHJvbWlzY3VpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluYykKIHsKIAl1bnNpZ25lZCBzaG9ydCBvbGRfZmxhZ3MgPSBkZXYtPmZsYWdzOwogCiAJQVNTRVJUX1JUTkwoKTsKIAotCWlmICgoZGV2LT5wcm9taXNjdWl0eSArPSBpbmMpID09IDApCi0JCWRldi0+ZmxhZ3MgJj0gfklGRl9QUk9NSVNDOwotCWVsc2UKLQkJZGV2LT5mbGFncyB8PSBJRkZfUFJPTUlTQzsKKwlkZXYtPmZsYWdzIHw9IElGRl9QUk9NSVNDOworCWRldi0+cHJvbWlzY3VpdHkgKz0gaW5jOworCWlmIChkZXYtPnByb21pc2N1aXR5ID09IDApIHsKKwkJLyoKKwkJICogQXZvaWQgb3ZlcmZsb3cuCisJCSAqIElmIGluYyBjYXVzZXMgb3ZlcmZsb3csIHVudG91Y2ggcHJvbWlzYyBhbmQgcmV0dXJuIGVycm9yLgorCQkgKi8KKwkJaWYgKGluYyA8IDApCisJCQlkZXYtPmZsYWdzICY9IH5JRkZfUFJPTUlTQzsKKwkJZWxzZSB7CisJCQlkZXYtPnByb21pc2N1aXR5IC09IGluYzsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBwcm9taXNjdWl0eSB0b3VjaGVzIHJvb2YsICIKKwkJCQkic2V0IHByb21pc2N1aXR5IGZhaWxlZCwgcHJvbWlzY3VpdHkgZmVhdHVyZSAiCisJCQkJIm9mIGRldmljZSBtaWdodCBiZSBicm9rZW4uXG4iLCBkZXYtPm5hbWUpOworCQkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJCX0KKwl9CiAJaWYgKGRldi0+ZmxhZ3MgIT0gb2xkX2ZsYWdzKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImRldmljZSAlcyAlcyBwcm9taXNjdW91cyBtb2RlXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSA/ICJlbnRlcmVkIiA6CkBAIC0yNzk2LDYgKzI5NDYsNyBAQAogCQlpZiAoZGV2LT5jaGFuZ2VfcnhfZmxhZ3MpCiAJCQlkZXYtPmNoYW5nZV9yeF9mbGFncyhkZXYsIElGRl9QUk9NSVNDKTsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjgwNywxNCArMjk1OCwxOSBAQAogICoJcmVtYWlucyBhYm92ZSB6ZXJvIHRoZSBpbnRlcmZhY2UgcmVtYWlucyBwcm9taXNjdW91cy4gT25jZSBpdCBoaXRzIHplcm8KICAqCXRoZSBkZXZpY2UgcmV2ZXJ0cyBiYWNrIHRvIG5vcm1hbCBmaWx0ZXJpbmcgb3BlcmF0aW9uLiBBIG5lZ2F0aXZlIGluYwogICoJdmFsdWUgaXMgdXNlZCB0byBkcm9wIHByb21pc2N1aXR5IG9uIHRoZSBkZXZpY2UuCisgKglSZXR1cm4gMCBpZiBzdWNjZXNzZnVsIG9yIGEgbmVnYXRpdmUgZXJybm8gY29kZSBvbiBlcnJvci4KICAqLwotdm9pZCBkZXZfc2V0X3Byb21pc2N1aXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpCitpbnQgZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKQogewogCXVuc2lnbmVkIHNob3J0IG9sZF9mbGFncyA9IGRldi0+ZmxhZ3M7CisJaW50IGVycjsKIAotCV9fZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIGluYyk7CisJZXJyID0gX19kZXZfc2V0X3Byb21pc2N1aXR5KGRldiwgaW5jKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoZGV2LT5mbGFncyAhPSBvbGRfZmxhZ3MpCiAJCWRldl9zZXRfcnhfbW9kZShkZXYpOworCXJldHVybiBlcnI7CiB9CiAKIC8qKgpAQCAtMjgyNywyMiArMjk4MywzOCBAQAogICoJdG8gYWxsIGludGVyZmFjZXMuIE9uY2UgaXQgaGl0cyB6ZXJvIHRoZSBkZXZpY2UgcmV2ZXJ0cyBiYWNrIHRvIG5vcm1hbAogICoJZmlsdGVyaW5nIG9wZXJhdGlvbi4gQSBuZWdhdGl2ZSBAaW5jIHZhbHVlIGlzIHVzZWQgdG8gZHJvcCB0aGUgY291bnRlcgogICoJd2hlbiByZWxlYXNpbmcgYSByZXNvdXJjZSBuZWVkaW5nIGFsbCBtdWx0aWNhc3RzLgorICoJUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCBvciBhIG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZXJyb3IuCiAgKi8KIAotdm9pZCBkZXZfc2V0X2FsbG11bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpCitpbnQgZGV2X3NldF9hbGxtdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKQogewogCXVuc2lnbmVkIHNob3J0IG9sZF9mbGFncyA9IGRldi0+ZmxhZ3M7CiAKIAlBU1NFUlRfUlROTCgpOwogCiAJZGV2LT5mbGFncyB8PSBJRkZfQUxMTVVMVEk7Ci0JaWYgKChkZXYtPmFsbG11bHRpICs9IGluYykgPT0gMCkKLQkJZGV2LT5mbGFncyAmPSB+SUZGX0FMTE1VTFRJOworCWRldi0+YWxsbXVsdGkgKz0gaW5jOworCWlmIChkZXYtPmFsbG11bHRpID09IDApIHsKKwkJLyoKKwkJICogQXZvaWQgb3ZlcmZsb3cuCisJCSAqIElmIGluYyBjYXVzZXMgb3ZlcmZsb3csIHVudG91Y2ggYWxsbXVsdGkgYW5kIHJldHVybiBlcnJvci4KKwkJICovCisJCWlmIChpbmMgPCAwKQorCQkJZGV2LT5mbGFncyAmPSB+SUZGX0FMTE1VTFRJOworCQllbHNlIHsKKwkJCWRldi0+YWxsbXVsdGkgLT0gaW5jOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGFsbG11bHRpIHRvdWNoZXMgcm9vZiwgIgorCQkJCSJzZXQgYWxsbXVsdGkgZmFpbGVkLCBhbGxtdWx0aSBmZWF0dXJlIG9mICIKKwkJCQkiZGV2aWNlIG1pZ2h0IGJlIGJyb2tlbi5cbiIsIGRldi0+bmFtZSk7CisJCQlyZXR1cm4gLUVPVkVSRkxPVzsKKwkJfQorCX0KIAlpZiAoZGV2LT5mbGFncyBeIG9sZF9mbGFncykgewogCQlpZiAoZGV2LT5jaGFuZ2VfcnhfZmxhZ3MpCiAJCQlkZXYtPmNoYW5nZV9yeF9mbGFncyhkZXYsIElGRl9BTExNVUxUSSk7CiAJCWRldl9zZXRfcnhfbW9kZShkZXYpOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTI4ODEsOSArMzA1Myw5IEBACiAKIHZvaWQgZGV2X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JbmV0aWZfdHhfbG9ja19iaChkZXYpOworCW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwogCV9fZGV2X3NldF9yeF9tb2RlKGRldik7Ci0JbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKIH0KIAogaW50IF9fZGV2X2FkZHJfZGVsZXRlKHN0cnVjdCBkZXZfYWRkcl9saXN0ICoqbGlzdCwgaW50ICpjb3VudCwKQEAgLTI5NjEsMTEgKzMxMzMsMTEgQEAKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQluZXRpZl90eF9sb2NrX2JoKGRldik7CisJbmV0aWZfYWRkcl9sb2NrX2JoKGRldik7CiAJZXJyID0gX19kZXZfYWRkcl9kZWxldGUoJmRldi0+dWNfbGlzdCwgJmRldi0+dWNfY291bnQsIGFkZHIsIGFsZW4sIDApOwogCWlmICghZXJyKQogCQlfX2Rldl9zZXRfcnhfbW9kZShkZXYpOwotCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOworCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woZGV2X3VuaWNhc3RfZGVsZXRlKTsKQEAgLTI5ODcsMTEgKzMxNTksMTEgQEAKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQluZXRpZl90eF9sb2NrX2JoKGRldik7CisJbmV0aWZfYWRkcl9sb2NrX2JoKGRldik7CiAJZXJyID0gX19kZXZfYWRkcl9hZGQoJmRldi0+dWNfbGlzdCwgJmRldi0+dWNfY291bnQsIGFkZHIsIGFsZW4sIDApOwogCWlmICghZXJyKQogCQlfX2Rldl9zZXRfcnhfbW9kZShkZXYpOwotCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOworCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woZGV2X3VuaWNhc3RfYWRkKTsKQEAgLTMwNTgsMTIgKzMyMzAsMTIgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCW5ldGlmX3R4X2xvY2tfYmgodG8pOworCW5ldGlmX2FkZHJfbG9ja19iaCh0byk7CiAJZXJyID0gX19kZXZfYWRkcl9zeW5jKCZ0by0+dWNfbGlzdCwgJnRvLT51Y19jb3VudCwKIAkJCSAgICAgICZmcm9tLT51Y19saXN0LCAmZnJvbS0+dWNfY291bnQpOwogCWlmICghZXJyKQogCQlfX2Rldl9zZXRfcnhfbW9kZSh0byk7Ci0JbmV0aWZfdHhfdW5sb2NrX2JoKHRvKTsKKwluZXRpZl9hZGRyX3VubG9ja19iaCh0byk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woZGV2X3VuaWNhc3Rfc3luYyk7CkBAIC0zMDc5LDE1ICszMjUxLDE1IEBACiAgKi8KIHZvaWQgZGV2X3VuaWNhc3RfdW5zeW5jKHN0cnVjdCBuZXRfZGV2aWNlICp0bywgc3RydWN0IG5ldF9kZXZpY2UgKmZyb20pCiB7Ci0JbmV0aWZfdHhfbG9ja19iaChmcm9tKTsKLQluZXRpZl90eF9sb2NrX2JoKHRvKTsKKwluZXRpZl9hZGRyX2xvY2tfYmgoZnJvbSk7CisJbmV0aWZfYWRkcl9sb2NrKHRvKTsKIAogCV9fZGV2X2FkZHJfdW5zeW5jKCZ0by0+dWNfbGlzdCwgJnRvLT51Y19jb3VudCwKIAkJCSAgJmZyb20tPnVjX2xpc3QsICZmcm9tLT51Y19jb3VudCk7CiAJX19kZXZfc2V0X3J4X21vZGUodG8pOwogCi0JbmV0aWZfdHhfdW5sb2NrX2JoKHRvKTsKLQluZXRpZl90eF91bmxvY2tfYmgoZnJvbSk7CisJbmV0aWZfYWRkcl91bmxvY2sodG8pOworCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGZyb20pOwogfQogRVhQT1JUX1NZTUJPTChkZXZfdW5pY2FzdF91bnN5bmMpOwogCkBAIC0zMTA3LDcgKzMyNzksNyBAQAogCiBzdGF0aWMgdm9pZCBkZXZfYWRkcl9kaXNjYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JbmV0aWZfdHhfbG9ja19iaChkZXYpOworCW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwogCiAJX19kZXZfYWRkcl9kaXNjYXJkKCZkZXYtPnVjX2xpc3QpOwogCWRldi0+dWNfY291bnQgPSAwOwpAQCAtMzExNSw3ICszMjg3LDcgQEAKIAlfX2Rldl9hZGRyX2Rpc2NhcmQoJmRldi0+bWNfbGlzdCk7CiAJZGV2LT5tY19jb3VudCA9IDA7CiAKLQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwogfQogCiB1bnNpZ25lZCBkZXZfZ2V0X2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNjg4LDYgKzM4NjAsMjEgQEAKIAlkZXZfcHV0KGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIF9fbmV0ZGV2X2luaXRfcXVldWVfbG9ja3Nfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAorCQkJCQkgIHZvaWQgKl91bnVzZWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9xdWV1ZS0+X3htaXRfbG9jayk7CisJbmV0ZGV2X3NldF94bWl0X2xvY2tkZXBfY2xhc3MoJmRldl9xdWV1ZS0+X3htaXRfbG9jaywgZGV2LT50eXBlKTsKKwlkZXZfcXVldWUtPnhtaXRfbG9ja19vd25lciA9IC0xOworfQorCitzdGF0aWMgdm9pZCBuZXRkZXZfaW5pdF9xdWV1ZV9sb2NrcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIF9fbmV0ZGV2X2luaXRfcXVldWVfbG9ja3Nfb25lLCBOVUxMKTsKKwlfX25ldGRldl9pbml0X3F1ZXVlX2xvY2tzX29uZShkZXYsICZkZXYtPnJ4X3F1ZXVlLCBOVUxMKTsKK30KKwogLyoqCiAgKglyZWdpc3Rlcl9uZXRkZXZpY2UJLSByZWdpc3RlciBhIG5ldHdvcmsgZGV2aWNlCiAgKglAZGV2OiBkZXZpY2UgdG8gcmVnaXN0ZXIKQEAgLTM3MjIsMTEgKzM5MDksOSBAQAogCUJVR19PTighZGV2X25ldChkZXYpKTsKIAluZXQgPSBkZXZfbmV0KGRldik7CiAKLQlzcGluX2xvY2tfaW5pdCgmZGV2LT5xdWV1ZV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmZGV2LT5feG1pdF9sb2NrKTsKLQluZXRkZXZfc2V0X2xvY2tkZXBfY2xhc3MoJmRldi0+X3htaXRfbG9jaywgZGV2LT50eXBlKTsKLQlkZXYtPnhtaXRfbG9ja19vd25lciA9IC0xOwotCXNwaW5fbG9ja19pbml0KCZkZXYtPmluZ3Jlc3NfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+YWRkcl9saXN0X2xvY2spOworCW5ldGRldl9zZXRfYWRkcl9sb2NrZGVwX2NsYXNzKGRldik7CisJbmV0ZGV2X2luaXRfcXVldWVfbG9ja3MoZGV2KTsKIAogCWRldi0+aWZsaW5rID0gLTE7CiAKQEAgLTQwMDcsNiArNDE5MiwxOSBAQAogCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAorc3RhdGljIHZvaWQgbmV0ZGV2X2luaXRfb25lX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpxdWV1ZSwKKwkJCQkgIHZvaWQgKl91bnVzZWQpCit7CisJcXVldWUtPmRldiA9IGRldjsKK30KKworc3RhdGljIHZvaWQgbmV0ZGV2X2luaXRfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbmV0ZGV2X2luaXRfb25lX3F1ZXVlKGRldiwgJmRldi0+cnhfcXVldWUsIE5VTEwpOworCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIG5ldGRldl9pbml0X29uZV9xdWV1ZSwgTlVMTCk7Cit9CisKIC8qKgogICoJYWxsb2NfbmV0ZGV2X21xIC0gYWxsb2NhdGUgbmV0d29yayBkZXZpY2UKICAqCUBzaXplb2ZfcHJpdjoJc2l6ZSBvZiBwcml2YXRlIGRhdGEgdG8gYWxsb2NhdGUgc3BhY2UgZm9yCkBAIC00MDIxLDE0ICs0MjE5LDE0IEBACiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSwKIAkJdm9pZCAoKnNldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqKSwgdW5zaWduZWQgaW50IHF1ZXVlX2NvdW50KQogewotCXZvaWQgKnA7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHg7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgYWxsb2Nfc2l6ZTsKKwlzaXplX3QgYWxsb2Nfc2l6ZTsKKwl2b2lkICpwOwogCiAJQlVHX09OKHN0cmxlbihuYW1lKSA+PSBzaXplb2YoZGV2LT5uYW1lKSk7CiAKLQlhbGxvY19zaXplID0gc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSArCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N1YnF1ZXVlKSAqIChxdWV1ZV9jb3VudCAtIDEpOworCWFsbG9jX3NpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpOwogCWlmIChzaXplb2ZfcHJpdikgewogCQkvKiBlbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2YgcHJpdmF0ZSBhcmVhICovCiAJCWFsbG9jX3NpemUgPSAoYWxsb2Nfc2l6ZSArIE5FVERFVl9BTElHTl9DT05TVCkgJiB+TkVUREVWX0FMSUdOX0NPTlNUOwpAQCAtNDA0MywyMiArNDI0MSwzMyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwl0eCA9IGtjYWxsb2MocXVldWVfY291bnQsIHNpemVvZihzdHJ1Y3QgbmV0ZGV2X3F1ZXVlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0eCkgeworCQlwcmludGsoS0VSTl9FUlIgImFsbG9jX25ldGRldjogVW5hYmxlIHRvIGFsbG9jYXRlICIKKwkJICAgICAgICJ0eCBxZGlzY3MuXG4iKTsKKwkJa2ZyZWUocCk7CisJCXJldHVybiBOVUxMOworCX0KKwogCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKQogCQkoKChsb25nKXAgKyBORVRERVZfQUxJR05fQ09OU1QpICYgfk5FVERFVl9BTElHTl9DT05TVCk7CiAJZGV2LT5wYWRkZWQgPSAoY2hhciAqKWRldiAtIChjaGFyICopcDsKIAlkZXZfbmV0X3NldChkZXYsICZpbml0X25ldCk7CiAKKwlkZXYtPl90eCA9IHR4OworCWRldi0+bnVtX3R4X3F1ZXVlcyA9IHF1ZXVlX2NvdW50OworCWRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gcXVldWVfY291bnQ7CisKIAlpZiAoc2l6ZW9mX3ByaXYpIHsKIAkJZGV2LT5wcml2ID0gKChjaGFyICopZGV2ICsKLQkJCSAgICAgKChzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpICsKLQkJCSAgICAgICAoc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N1YnF1ZXVlKSAqCi0JCQkJKHF1ZXVlX2NvdW50IC0gMSkpICsgTkVUREVWX0FMSUdOX0NPTlNUKQorCQkJICAgICAoKHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSkgKyBORVRERVZfQUxJR05fQ09OU1QpCiAJCQkgICAgICAmIH5ORVRERVZfQUxJR05fQ09OU1QpKTsKIAl9CiAKLQlkZXYtPmVncmVzc19zdWJxdWV1ZV9jb3VudCA9IHF1ZXVlX2NvdW50OwogCWRldi0+Z3NvX21heF9zaXplID0gR1NPX01BWF9TSVpFOwogCisJbmV0ZGV2X2luaXRfcXVldWVzKGRldik7CisKIAlkZXYtPmdldF9zdGF0cyA9IGludGVybmFsX3N0YXRzOwogCW5ldHBvbGxfbmV0ZGV2X2luaXQoZGV2KTsKIAlzZXR1cChkZXYpOwpAQCAtNDA3OSw2ICs0Mjg4LDggQEAKIHsKIAlyZWxlYXNlX25ldChkZXZfbmV0KGRldikpOwogCisJa2ZyZWUoZGV2LT5fdHgpOworCiAJLyogIENvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzICovCiAJaWYgKGRldi0+cmVnX3N0YXRlID09IE5FVFJFR19VTklOSVRJQUxJWkVEKSB7CiAJCWtmcmVlKChjaGFyICopZGV2IC0gZGV2LT5wYWRkZWQpOwpAQCAtNDI2MCw3ICs0NDcxLDcgQEAKIAkJCSAgICB2b2lkICpvY3B1KQogewogCXN0cnVjdCBza19idWZmICoqbGlzdF9za2I7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKipsaXN0X25ldDsKKwlzdHJ1Y3QgUWRpc2MgKipsaXN0X25ldDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBjcHUsIG9sZGNwdSA9ICh1bnNpZ25lZCBsb25nKW9jcHU7CiAJc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsICpvbGRzZDsKQEAgLTQzMjIsNyArNDUzMyw3IEBACiAJaSA9IDA7CiAJY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNoYW5faWR4LCBuZXRfZG1hLT5jaGFubmVsX21hc2spIHsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjaGFuX2lkeCwgbmV0X2RtYS0+Y2hhbm5lbF9tYXNrKSB7CiAJCWNoYW4gPSBuZXRfZG1hLT5jaGFubmVsc1tjaGFuX2lkeF07CiAKIAkJbiA9ICgobnVtX29ubGluZV9jcHVzKCkgLyBjcHVzX3dlaWdodChuZXRfZG1hLT5jaGFubmVsX21hc2spKQpAQCAtNDQ4OSw2ICs0NzAwLDI2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK2NoYXIgKm5ldGRldl9kcml2ZXJuYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKKworCWlmIChsZW4gPD0gMCB8fCAhYnVmZmVyKQorCQlyZXR1cm4gYnVmZmVyOworCWJ1ZmZlclswXSA9IDA7CisKKwlwYXJlbnQgPSBkZXYtPmRldi5wYXJlbnQ7CisKKwlpZiAoIXBhcmVudCkKKwkJcmV0dXJuIGJ1ZmZlcjsKKworCWRyaXZlciA9IHBhcmVudC0+ZHJpdmVyOworCWlmIChkcml2ZXIgJiYgZHJpdmVyLT5uYW1lKQorCQlzdHJsY3B5KGJ1ZmZlciwgZHJpdmVyLT5uYW1lLCBsZW4pOworCXJldHVybiBidWZmZXI7Cit9CisKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgbmV0ZGV2X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCWtmcmVlKG5ldC0+ZGV2X25hbWVfaGVhZCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfbWNhc3QuYyBiL25ldC9jb3JlL2Rldl9tY2FzdC5jCmluZGV4IGY4YTM0NTUuLjU0MDJiM2IgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldl9tY2FzdC5jCisrKyBiL25ldC9jb3JlL2Rldl9tY2FzdC5jCkBAIC03Miw3ICs3Miw3IEBACiB7CiAJaW50IGVycjsKIAotCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKKwluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKIAllcnIgPSBfX2Rldl9hZGRyX2RlbGV0ZSgmZGV2LT5tY19saXN0LCAmZGV2LT5tY19jb3VudCwKIAkJCQlhZGRyLCBhbGVuLCBnbGJsKTsKIAlpZiAoIWVycikgewpAQCAtODMsNyArODMsNyBAQAogCiAJCV9fZGV2X3NldF9yeF9tb2RlKGRldik7CiAJfQotCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOworCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTUsMTEgKzk1LDExIEBACiB7CiAJaW50IGVycjsKIAotCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKKwluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKIAllcnIgPSBfX2Rldl9hZGRyX2FkZCgmZGV2LT5tY19saXN0LCAmZGV2LT5tY19jb3VudCwgYWRkciwgYWxlbiwgZ2xibCk7CiAJaWYgKCFlcnIpCiAJCV9fZGV2X3NldF9yeF9tb2RlKGRldik7Ci0JbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTksMTIgKzExOSwxMiBAQAogewogCWludCBlcnIgPSAwOwogCi0JbmV0aWZfdHhfbG9ja19iaCh0byk7CisJbmV0aWZfYWRkcl9sb2NrX2JoKHRvKTsKIAllcnIgPSBfX2Rldl9hZGRyX3N5bmMoJnRvLT5tY19saXN0LCAmdG8tPm1jX2NvdW50LAogCQkJICAgICAgJmZyb20tPm1jX2xpc3QsICZmcm9tLT5tY19jb3VudCk7CiAJaWYgKCFlcnIpCiAJCV9fZGV2X3NldF9yeF9tb2RlKHRvKTsKLQluZXRpZl90eF91bmxvY2tfYmgodG8pOworCW5ldGlmX2FkZHJfdW5sb2NrX2JoKHRvKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xNDMsMTUgKzE0MywxNSBAQAogICovCiB2b2lkIGRldl9tY191bnN5bmMoc3RydWN0IG5ldF9kZXZpY2UgKnRvLCBzdHJ1Y3QgbmV0X2RldmljZSAqZnJvbSkKIHsKLQluZXRpZl90eF9sb2NrX2JoKGZyb20pOwotCW5ldGlmX3R4X2xvY2tfYmgodG8pOworCW5ldGlmX2FkZHJfbG9ja19iaChmcm9tKTsKKwluZXRpZl9hZGRyX2xvY2sodG8pOwogCiAJX19kZXZfYWRkcl91bnN5bmMoJnRvLT5tY19saXN0LCAmdG8tPm1jX2NvdW50LAogCQkJICAmZnJvbS0+bWNfbGlzdCwgJmZyb20tPm1jX2NvdW50KTsKIAlfX2Rldl9zZXRfcnhfbW9kZSh0byk7CiAKLQluZXRpZl90eF91bmxvY2tfYmgodG8pOwotCW5ldGlmX3R4X3VubG9ja19iaChmcm9tKTsKKwluZXRpZl9hZGRyX3VubG9jayh0byk7CisJbmV0aWZfYWRkcl91bmxvY2tfYmgoZnJvbSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRldl9tY191bnN5bmMpOwogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXJldHVybiAwOwogCi0JbmV0aWZfdHhfbG9ja19iaChkZXYpOworCW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwogCWZvciAobSA9IGRldi0+bWNfbGlzdDsgbTsgbSA9IG0tPm5leHQpIHsKIAkJaW50IGk7CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiAJCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CiAJfQotCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOworCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2V0aHRvb2wuYyBiL25ldC9jb3JlL2V0aHRvb2wuYwppbmRleCAwMTMzYjVlLi4xNGFkYTUzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ldGh0b29sLmMKKysrIGIvbmV0L2NvcmUvZXRodG9vbC5jCkBAIC0yMDksNiArMjA5LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXRodG9vbF9zZXRfcnhoYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3sKKwlzdHJ1Y3QgZXRodG9vbF9yeG5mYyBjbWQ7CisKKwlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPnNldF9yeGhhc2gpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyYWRkciwgc2l6ZW9mKGNtZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcnhoYXNoKGRldiwgJmNtZCk7Cit9CisKK3N0YXRpYyBpbnQgZXRodG9vbF9nZXRfcnhoYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3sKKwlzdHJ1Y3QgZXRodG9vbF9yeG5mYyBpbmZvOworCisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfcnhoYXNoKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIHVzZXJhZGRyLCBzaXplb2YoaW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWRldi0+ZXRodG9vbF9vcHMtPmdldF9yeGhhc2goZGV2LCAmaW5mbyk7CisKKwlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfcmVncyByZWdzOwpAQCAtODI2LDYgKzg1Niw3IEBACiAJY2FzZSBFVEhUT09MX0dHU086CiAJY2FzZSBFVEhUT09MX0dGTEFHUzoKIAljYXNlIEVUSFRPT0xfR1BGTEFHUzoKKwljYXNlIEVUSFRPT0xfR1JYRkg6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKQEAgLTk3Nyw2ICsxMDA4LDEyIEBACiAJCXJjID0gZXRodG9vbF9zZXRfdmFsdWUoZGV2LCB1c2VyYWRkciwKIAkJCQkgICAgICAgZGV2LT5ldGh0b29sX29wcy0+c2V0X3ByaXZfZmxhZ3MpOwogCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYRkg6CisJCXJjID0gZXRodG9vbF9nZXRfcnhoYXNoKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfU1JYRkg6CisJCXJjID0gZXRodG9vbF9zZXRfcnhoYXNoKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jIGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKaW5kZXggMjc3YTIzMC4uNzlkZTNiMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmliX3J1bGVzLmMKKysrIGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKQEAgLTY5LDcgKzY5LDcgQEAKIHN0YXRpYyB2b2lkIGZsdXNoX3JvdXRlX2NhY2hlKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpCiB7CiAJaWYgKG9wcy0+Zmx1c2hfY2FjaGUpCi0JCW9wcy0+Zmx1c2hfY2FjaGUoKTsKKwkJb3BzLT5mbHVzaF9jYWNoZShvcHMpOwogfQogCiBpbnQgZmliX3J1bGVzX3JlZ2lzdGVyKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9pb3ZlYy5jIGIvbmV0L2NvcmUvaW92ZWMuYwppbmRleCA3NTVjMzdmLi40YzljMDEyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9pb3ZlYy5jCisrKyBiL25ldC9jb3JlL2lvdmVjLmMKQEAgLTM2LDcgKzM2LDcgQEAKICAqCWluIGFueSBjYXNlLgogICovCiAKLWludCB2ZXJpZnlfaW92ZWMoc3RydWN0IG1zZ2hkciAqbSwgc3RydWN0IGlvdmVjICppb3YsIGNoYXIgKmFkZHJlc3MsIGludCBtb2RlKQoraW50IHZlcmlmeV9pb3ZlYyhzdHJ1Y3QgbXNnaGRyICptLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgbW9kZSkKIHsKIAlpbnQgc2l6ZSwgZXJyLCBjdDsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbGlua193YXRjaC5jIGIvbmV0L2NvcmUvbGlua193YXRjaC5jCmluZGV4IGE1ZTM3MmIuLmJmOGY3YWYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2xpbmtfd2F0Y2guYworKysgYi9uZXQvY29yZS9saW5rX3dhdGNoLmMKQEAgLTc3LDEwICs3NywxMCBAQAogfQogCiAKLXN0YXRpYyBpbnQgbGlua3dhdGNoX3VyZ2VudF9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGJvb2wgbGlua3dhdGNoX3VyZ2VudF9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiBuZXRpZl9ydW5uaW5nKGRldikgJiYgbmV0aWZfY2Fycmllcl9vayhkZXYpICYmCi0JICAgICAgIGRldi0+cWRpc2MgIT0gZGV2LT5xZGlzY19zbGVlcGluZzsKKwkJcWRpc2NfdHhfY2hhbmdpbmcoZGV2KTsKIH0KIAogCkBAIC0xODAsMTAgKzE4MCw5IEBACiAKIAkJcmZjMjg2M19wb2xpY3koZGV2KTsKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJCQlXQVJOX09OKGRldi0+cWRpc2Nfc2xlZXBpbmcgPT0gJm5vb3BfcWRpc2MpOworCQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKIAkJCQlkZXZfYWN0aXZhdGUoZGV2KTsKLQkJCX0gZWxzZQorCQkJZWxzZQogCQkJCWRldl9kZWFjdGl2YXRlKGRldik7CiAKIAkJCW5ldGRldl9zdGF0ZV9jaGFuZ2UoZGV2KTsKQEAgLTIxNCw3ICsyMTMsNyBAQAogCiB2b2lkIGxpbmt3YXRjaF9maXJlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHVyZ2VudCA9IGxpbmt3YXRjaF91cmdlbnRfZXZlbnQoZGV2KTsKKwlib29sIHVyZ2VudCA9IGxpbmt3YXRjaF91cmdlbnRfZXZlbnQoZGV2KTsKIAogCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX0xJTktfU1RBVEVfTElOS1dBVENIX1BFTkRJTkcsICZkZXYtPnN0YXRlKSkgewogCQlkZXZfaG9sZChkZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCA2NWYwMWY3Li5mNjJjOGFmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtOTMwLDYgKzkzMCw3IEBACiAJCQkJYnVmZiA9IG5laWdoLT5hcnBfcXVldWUubmV4dDsKIAkJCQlfX3NrYl91bmxpbmsoYnVmZiwgJm5laWdoLT5hcnBfcXVldWUpOwogCQkJCWtmcmVlX3NrYihidWZmKTsKKwkJCQlORUlHSF9DQUNIRV9TVEFUX0lOQyhuZWlnaC0+dGJsLCB1bnJlc19kaXNjYXJkcyk7CiAJCQl9CiAJCQlfX3NrYl9xdWV1ZV90YWlsKCZuZWlnaC0+YXJwX3F1ZXVlLCBza2IpOwogCQl9CkBAIC0yNDYyLDEyICsyNDYzLDEyIEBACiAJc3RydWN0IG5laWdoX3N0YXRpc3RpY3MgKnN0ID0gdjsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewotCQlzZXFfcHJpbnRmKHNlcSwgImVudHJpZXMgIGFsbG9jcyBkZXN0cm95cyBoYXNoX2dyb3dzICBsb29rdXBzIGhpdHMgIHJlc19mYWlsZWQgIHJjdl9wcm9iZXNfbWNhc3QgcmN2X3Byb2Jlc191Y2FzdCAgcGVyaW9kaWNfZ2NfcnVucyBmb3JjZWRfZ2NfcnVuc1xuIik7CisJCXNlcV9wcmludGYoc2VxLCAiZW50cmllcyAgYWxsb2NzIGRlc3Ryb3lzIGhhc2hfZ3Jvd3MgIGxvb2t1cHMgaGl0cyAgcmVzX2ZhaWxlZCAgcmN2X3Byb2Jlc19tY2FzdCByY3ZfcHJvYmVzX3VjYXN0ICBwZXJpb2RpY19nY19ydW5zIGZvcmNlZF9nY19ydW5zIHVucmVzb2x2ZWRfZGlzY2FyZHNcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlzZXFfcHJpbnRmKHNlcSwgIiUwOHggICUwOGx4ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseCAgJTA4bHggICIKLQkJCSIlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsCisJCQkiJTA4bHggJTA4bHggICUwOGx4ICUwOGx4ICUwOGx4XG4iLAogCQkgICBhdG9taWNfcmVhZCgmdGJsLT5lbnRyaWVzKSwKIAogCQkgICBzdC0+YWxsb2NzLApAQCAtMjQ4Myw3ICsyNDg0LDggQEAKIAkJICAgc3QtPnJjdl9wcm9iZXNfdWNhc3QsCiAKIAkJICAgc3QtPnBlcmlvZGljX2djX3J1bnMsCi0JCSAgIHN0LT5mb3JjZWRfZ2NfcnVucworCQkgICBzdC0+Zm9yY2VkX2djX3J1bnMsCisJCSAgIHN0LT51bnJlc19kaXNjYXJkcwogCQkgICApOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDkwZTIxNzcuLmMxZjRlMGQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0yNDIsMTEgKzI0MiwxMSBAQAogCQkJb2Zmc2V0ICUgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICE9IDApOwogCiAJcmVhZF9sb2NrKCZkZXZfYmFzZV9sb2NrKTsKLQlpZiAoZGV2X2lzYWxpdmUoZGV2KSAmJiBkZXYtPmdldF9zdGF0cyAmJgotCSAgICAoc3RhdHMgPSAoKmRldi0+Z2V0X3N0YXRzKShkZXYpKSkKKwlpZiAoZGV2X2lzYWxpdmUoZGV2KSkgeworCQlzdGF0cyA9IGRldi0+Z2V0X3N0YXRzKGRldik7CiAJCXJldCA9IHNwcmludGYoYnVmLCBmbXRfdWxvbmcsCiAJCQkgICAgICAqKHVuc2lnbmVkIGxvbmcgKikoKCh1OCAqKSBzdGF0cykgKyBvZmZzZXQpKTsKLQorCX0KIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTMxOCw3ICszMTgsNyBAQAogCS5hdHRycyAgPSBuZXRzdGF0X2F0dHJzLAogfTsKIAotI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTCiAvKiBoZWxwZXIgZnVuY3Rpb24gdGhhdCBkb2VzIGFsbCB0aGUgbG9ja2luZyBldGMgZm9yIHdpcmVsZXNzIHN0YXRzICovCiBzdGF0aWMgc3NpemVfdCB3aXJlbGVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIGNoYXIgKmJ1ZiwKIAkJCSAgICAgc3NpemVfdCAoKmZvcm1hdCkoY29uc3Qgc3RydWN0IGl3X3N0YXRpc3RpY3MgKiwKQEAgLTQ1NywxMCArNDU3LDkgQEAKIAlzdHJsY3B5KGRldi0+YnVzX2lkLCBuZXQtPm5hbWUsIEJVU19JRF9TSVpFKTsKIAogI2lmZGVmIENPTkZJR19TWVNGUwotCWlmIChuZXQtPmdldF9zdGF0cykKLQkJKmdyb3VwcysrID0gJm5ldHN0YXRfZ3JvdXA7CisJKmdyb3VwcysrID0gJm5ldHN0YXRfZ3JvdXA7CiAKLSNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUwogCWlmIChuZXQtPndpcmVsZXNzX2hhbmRsZXJzICYmIG5ldC0+d2lyZWxlc3NfaGFuZGxlcnMtPmdldF93aXJlbGVzc19zdGF0cykKIAkJKmdyb3VwcysrID0gJndpcmVsZXNzX2dyb3VwOwogI2VuZGlmCkBAIC00NjksNiArNDY4LDE5IEBACiAJcmV0dXJuIGRldmljZV9hZGQoZGV2KTsKIH0KIAoraW50IG5ldGRldl9jbGFzc19jcmVhdGVfZmlsZShzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICpjbGFzc19hdHRyKQoreworCXJldHVybiBjbGFzc19jcmVhdGVfZmlsZSgmbmV0X2NsYXNzLCBjbGFzc19hdHRyKTsKK30KKwordm9pZCBuZXRkZXZfY2xhc3NfcmVtb3ZlX2ZpbGUoc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqY2xhc3NfYXR0cikKK3sKKwljbGFzc19yZW1vdmVfZmlsZSgmbmV0X2NsYXNzLCBjbGFzc19hdHRyKTsKK30KKworRVhQT1JUX1NZTUJPTChuZXRkZXZfY2xhc3NfY3JlYXRlX2ZpbGUpOworRVhQT1JUX1NZTUJPTChuZXRkZXZfY2xhc3NfcmVtb3ZlX2ZpbGUpOworCiB2b2lkIG5ldGRldl9pbml0aWFsaXplX2tvYmplY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmKG5ldC0+ZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCA4ZmIxMzRkLi5jMTI3MjA4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC01OCwyNSArNTgsMjcgQEAKIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJm5waW5mby0+dHhxKSkpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OworCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAKIAkJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCV9fa2ZyZWVfc2tiKHNrYik7CiAJCQljb250aW51ZTsKIAkJfQogCisJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CisKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQluZXRpZl90eF9sb2NrKGRldik7Ci0JCWlmICgobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpIHx8Ci0JCSAgICAgbmV0aWZfc3VicXVldWVfc3RvcHBlZChkZXYsIHNrYikpIHx8Ci0JCSAgICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQoc2tiLCBkZXYpICE9IE5FVERFVl9UWF9PSykgeworCQlfX25ldGlmX3R4X2xvY2sodHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpIHx8CisJCSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdChza2IsIGRldikgIT0gTkVUREVWX1RYX09LKSB7CiAJCQlza2JfcXVldWVfaGVhZCgmbnBpbmZvLT50eHEsIHNrYik7Ci0JCQluZXRpZl90eF91bmxvY2soZGV2KTsKKwkJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CiAJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbnBpbmZvLT50eF93b3JrLCBIWi8xMCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJbmV0aWZfdHhfdW5sb2NrKGRldik7CisJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CkBAIC0yNzgsMTcgKzI4MCwxOSBAQAogCiAJLyogZG9uJ3QgZ2V0IG1lc3NhZ2VzIG91dCBvZiBvcmRlciwgYW5kIG5vIHJlY3Vyc2lvbiAqLwogCWlmIChza2JfcXVldWVfbGVuKCZucGluZm8tPnR4cSkgPT0gMCAmJiAhbmV0cG9sbF9vd25lcl9hY3RpdmUoZGV2KSkgeworCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCS8qIHRyeSB1bnRpbCBuZXh0IGNsb2NrIHRpY2sgKi8KIAkJZm9yICh0cmllcyA9IGppZmZpZXNfdG9fdXNlY3MoMSkvVVNFQ19QRVJfUE9MTDsKIAkJICAgICB0cmllcyA+IDA7IC0tdHJpZXMpIHsKLQkJCWlmIChuZXRpZl90eF90cnlsb2NrKGRldikpIHsKLQkJCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJgotCQkJCSAgICAhbmV0aWZfc3VicXVldWVfc3RvcHBlZChkZXYsIHNrYikpCisJCQlpZiAoX19uZXRpZl90eF90cnlsb2NrKHR4cSkpIHsKKwkJCQlpZiAoIW5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkKIAkJCQkJc3RhdHVzID0gZGV2LT5oYXJkX3N0YXJ0X3htaXQoc2tiLCBkZXYpOwotCQkJCW5ldGlmX3R4X3VubG9jayhkZXYpOworCQkJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CiAKIAkJCQlpZiAoc3RhdHVzID09IE5FVERFVl9UWF9PSykKIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IGZkZjUzNzcuLmM3ZDQ4NGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0xODc1LDcgKzE4NzUsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCS8qIEl0IGlzIE9LIHRoYXQgd2UgZG8gbm90IGhvbGQgdGhlIGdyb3VwIGxvY2sgcmlnaHQgbm93LApAQCAtMjEyMyw2ICsyMTIzLDI0IEBACiAJfQogfQogI2VuZGlmCitzdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKK3sKKwlpZiAocGt0X2Rldi0+cXVldWVfbWFwX21pbiA8IHBrdF9kZXYtPnF1ZXVlX21hcF9tYXgpIHsKKwkJX191MTYgdDsKKwkJaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9RVUVVRV9NQVBfUk5EKSB7CisJCQl0ID0gcmFuZG9tMzIoKSAlCisJCQkJKHBrdF9kZXYtPnF1ZXVlX21hcF9tYXggLQorCQkJCSBwa3RfZGV2LT5xdWV1ZV9tYXBfbWluICsgMSkKKwkJCQkrIHBrdF9kZXYtPnF1ZXVlX21hcF9taW47CisJCX0gZWxzZSB7CisJCQl0ID0gcGt0X2Rldi0+Y3VyX3F1ZXVlX21hcCArIDE7CisJCQlpZiAodCA+IHBrdF9kZXYtPnF1ZXVlX21hcF9tYXgpCisJCQkJdCA9IHBrdF9kZXYtPnF1ZXVlX21hcF9taW47CisJCX0KKwkJcGt0X2Rldi0+Y3VyX3F1ZXVlX21hcCA9IHQ7CisJfQorfQorCiAvKiBJbmNyZW1lbnQvcmFuZG9taXplIGhlYWRlcnMgYWNjb3JkaW5nIHRvIGZsYWdzIGFuZCBjdXJyZW50IHZhbHVlcwogICogZm9yIElQIHNyYy9kZXN0LCBVRFAgc3JjL2RzdCBwb3J0LCBNQUMtQWRkciBzcmMvZHN0CiAgKi8KQEAgLTIzMjUsMTkgKzIzNDMsNyBAQAogCQlwa3RfZGV2LT5jdXJfcGt0X3NpemUgPSB0OwogCX0KIAotCWlmIChwa3RfZGV2LT5xdWV1ZV9tYXBfbWluIDwgcGt0X2Rldi0+cXVldWVfbWFwX21heCkgewotCQlfX3UxNiB0OwotCQlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX1FVRVVFX01BUF9STkQpIHsKLQkJCXQgPSByYW5kb20zMigpICUKLQkJCQkocGt0X2Rldi0+cXVldWVfbWFwX21heCAtIHBrdF9kZXYtPnF1ZXVlX21hcF9taW4gKyAxKQotCQkJCSsgcGt0X2Rldi0+cXVldWVfbWFwX21pbjsKLQkJfSBlbHNlIHsKLQkJCXQgPSBwa3RfZGV2LT5jdXJfcXVldWVfbWFwICsgMTsKLQkJCWlmICh0ID4gcGt0X2Rldi0+cXVldWVfbWFwX21heCkKLQkJCQl0ID0gcGt0X2Rldi0+cXVldWVfbWFwX21pbjsKLQkJfQotCQlwa3RfZGV2LT5jdXJfcXVldWVfbWFwID0gdDsKLQl9CisJc2V0X2N1cl9xdWV1ZV9tYXAocGt0X2Rldik7CiAKIAlwa3RfZGV2LT5mbG93c1tmbG93XS5jb3VudCsrOwogfQpAQCAtMjQ1OCw3ICsyNDY0LDcgQEAKIAlfX2JlMTYgKnZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gTlVMTDsgIC8qIHBhY2tldCB0eXBlIElEIGZpZWxkIChvciBsZW4pIGZvciBWTEFOIHRhZyAqLwogCV9fYmUxNiAqc3ZsYW5fdGNpID0gTlVMTDsgICAgICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVzIHByaW9yaXR5IGFuZCBTVkxBTiBJRCAqLwogCV9fYmUxNiAqc3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gTlVMTDsgLyogcGFja2V0IHR5cGUgSUQgZmllbGQgKG9yIGxlbikgZm9yIFNWTEFOIHRhZyAqLwotCisJdTE2IHF1ZXVlX21hcDsKIAogCWlmIChwa3RfZGV2LT5ucl9sYWJlbHMpCiAJCXByb3RvY29sID0gaHRvbnMoRVRIX1BfTVBMU19VQyk7CkBAIC0yNDY5LDYgKzI0NzUsNyBAQAogCS8qIFVwZGF0ZSBhbnkgb2YgdGhlIHZhbHVlcywgdXNlZCB3aGVuIHdlJ3JlIGluY3JlbWVudGluZyB2YXJpb3VzCiAJICogZmllbGRzLgogCSAqLworCXF1ZXVlX21hcCA9IHBrdF9kZXYtPmN1cl9xdWV1ZV9tYXA7CiAJbW9kX2N1cl9oZWFkZXJzKHBrdF9kZXYpOwogCiAJZGF0YWxlbiA9IChvZGV2LT5oYXJkX2hlYWRlcl9sZW4gKyAxNikgJiB+MHhmOwpAQCAtMjUwNyw3ICsyNTE0LDcgQEAKIAlza2ItPm5ldHdvcmtfaGVhZGVyID0gc2tiLT50YWlsOwogCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bmV0d29ya19oZWFkZXIgKyBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwotCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHBrdF9kZXYtPmN1cl9xdWV1ZV9tYXApOworCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlX21hcCk7CiAJaXBoID0gaXBfaGRyKHNrYik7CiAJdWRwaCA9IHVkcF9oZHIoc2tiKTsKIApAQCAtMjc5Nyw2ICsyODA0LDcgQEAKIAlfX2JlMTYgKnZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gTlVMTDsgIC8qIHBhY2tldCB0eXBlIElEIGZpZWxkIChvciBsZW4pIGZvciBWTEFOIHRhZyAqLwogCV9fYmUxNiAqc3ZsYW5fdGNpID0gTlVMTDsgICAgICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVzIHByaW9yaXR5IGFuZCBTVkxBTiBJRCAqLwogCV9fYmUxNiAqc3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gTlVMTDsgLyogcGFja2V0IHR5cGUgSUQgZmllbGQgKG9yIGxlbikgZm9yIFNWTEFOIHRhZyAqLworCXUxNiBxdWV1ZV9tYXA7CiAKIAlpZiAocGt0X2Rldi0+bnJfbGFiZWxzKQogCQlwcm90b2NvbCA9IGh0b25zKEVUSF9QX01QTFNfVUMpOwpAQCAtMjgwNyw2ICsyODE1LDcgQEAKIAkvKiBVcGRhdGUgYW55IG9mIHRoZSB2YWx1ZXMsIHVzZWQgd2hlbiB3ZSdyZSBpbmNyZW1lbnRpbmcgdmFyaW91cwogCSAqIGZpZWxkcy4KIAkgKi8KKwlxdWV1ZV9tYXAgPSBwa3RfZGV2LT5jdXJfcXVldWVfbWFwOwogCW1vZF9jdXJfaGVhZGVycyhwa3RfZGV2KTsKIAogCXNrYiA9IGFsbG9jX3NrYihwa3RfZGV2LT5jdXJfcGt0X3NpemUgKyA2NCArIDE2ICsKQEAgLTI4NDQsNyArMjg1Myw3IEBACiAJc2tiLT5uZXR3b3JrX2hlYWRlciA9IHNrYi0+dGFpbDsKIAlza2ItPnRyYW5zcG9ydF9oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7Ci0Jc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcGt0X2Rldi0+Y3VyX3F1ZXVlX21hcCk7CisJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWVfbWFwKTsKIAlpcGggPSBpcHY2X2hkcihza2IpOwogCXVkcGggPSB1ZHBfaGRyKHNrYik7CiAKQEAgLTMyNjMsNyArMzI3Miw5IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpvZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJX191NjQgaWRsZV9zdGFydCA9IDA7CisJdTE2IHF1ZXVlX21hcDsKIAlpbnQgcmV0OwogCiAJb2RldiA9IHBrdF9kZXYtPm9kZXY7CkBAIC0zMjg1LDkgKzMyOTYsMTUgQEAKIAkJfQogCX0KIAotCWlmICgobmV0aWZfcXVldWVfc3RvcHBlZChvZGV2KSB8fAotCSAgICAgKHBrdF9kZXYtPnNrYiAmJgotCSAgICAgIG5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQob2RldiwgcGt0X2Rldi0+c2tiKSkpIHx8CisJaWYgKCFwa3RfZGV2LT5za2IpIHsKKwkJc2V0X2N1cl9xdWV1ZV9tYXAocGt0X2Rldik7CisJCXF1ZXVlX21hcCA9IHBrdF9kZXYtPmN1cl9xdWV1ZV9tYXA7CisJfSBlbHNlIHsKKwkJcXVldWVfbWFwID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHBrdF9kZXYtPnNrYik7CisJfQorCisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShvZGV2LCBxdWV1ZV9tYXApOworCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgfHwKIAkgICAgbmVlZF9yZXNjaGVkKCkpIHsKIAkJaWRsZV9zdGFydCA9IGdldEN1clVzKCk7CiAKQEAgLTMzMDMsOCArMzMyMCw3IEBACiAKIAkJcGt0X2Rldi0+aWRsZV9hY2MgKz0gZ2V0Q3VyVXMoKSAtIGlkbGVfc3RhcnQ7CiAKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQob2RldikgfHwKLQkJICAgIG5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQob2RldiwgcGt0X2Rldi0+c2tiKSkgeworCQlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7CiAJCQlwa3RfZGV2LT5uZXh0X3R4X3VzID0gZ2V0Q3VyVXMoKTsJLyogVE9ETyAqLwogCQkJcGt0X2Rldi0+bmV4dF90eF9ucyA9IDA7CiAJCQlnb3RvIG91dDsJLyogVHJ5IHRoZSBuZXh0IGludGVyZmFjZSAqLwpAQCAtMzMzMSw5ICszMzQ3LDEyIEBACiAJCX0KIAl9CiAKLQluZXRpZl90eF9sb2NrX2JoKG9kZXYpOwotCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChvZGV2KSAmJgotCSAgICAhbmV0aWZfc3VicXVldWVfc3RvcHBlZChvZGV2LCBwa3RfZGV2LT5za2IpKSB7CisJLyogZmlsbF9wYWNrZXQoKSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHF1ZXVlICovCisJcXVldWVfbWFwID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHBrdF9kZXYtPnNrYik7CisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShvZGV2LCBxdWV1ZV9tYXApOworCisJX19uZXRpZl90eF9sb2NrX2JoKHR4cSk7CisJaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpIHsKIAogCQlhdG9taWNfaW5jKCYocGt0X2Rldi0+c2tiLT51c2VycykpOwogCSAgICAgIHJldHJ5X25vdzoKQEAgLTMzNzcsNyArMzM5Niw3IEBACiAJCXBrdF9kZXYtPm5leHRfdHhfbnMgPSAwOwogCX0KIAotCW5ldGlmX3R4X3VubG9ja19iaChvZGV2KTsKKwlfX25ldGlmX3R4X3VubG9ja19iaCh0eHEpOwogCiAJLyogSWYgcGt0X2Rldi0+Y291bnQgaXMgemVybywgdGhlbiBydW4gZm9yZXZlciAqLwogCWlmICgocGt0X2Rldi0+Y291bnQgIT0gMCkgJiYgKHBrdF9kZXYtPnNvZmFyID49IHBrdF9kZXYtPmNvdW50KSkgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCBhOWE3NzIxLi43MWVkYjhiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtNjA1LDggKzYwNSwxMSBAQAogCQkJICAgIGludCB0eXBlLCB1MzIgcGlkLCB1MzIgc2VxLCB1MzIgY2hhbmdlLAogCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJc3RydWN0IGlmaW5mb21zZyAqaWZtOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgbmxhdHRyICphdHRyOwogCiAJbmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIHNpemVvZigqaWZtKSwgZmxhZ3MpOwogCWlmIChubGggPT0gTlVMTCkKQEAgLTYzMyw4ICs2MzYsOSBAQAogCWlmIChkZXYtPm1hc3RlcikKIAkJTkxBX1BVVF9VMzIoc2tiLCBJRkxBX01BU1RFUiwgZGV2LT5tYXN0ZXItPmlmaW5kZXgpOwogCi0JaWYgKGRldi0+cWRpc2Nfc2xlZXBpbmcpCi0JCU5MQV9QVVRfU1RSSU5HKHNrYiwgSUZMQV9RRElTQywgZGV2LT5xZGlzY19zbGVlcGluZy0+b3BzLT5pZCk7CisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOworCWlmICh0eHEtPnFkaXNjX3NsZWVwaW5nKQorCQlOTEFfUFVUX1NUUklORyhza2IsIElGTEFfUURJU0MsIHR4cS0+cWRpc2Nfc2xlZXBpbmctPm9wcy0+aWQpOwogCiAJaWYgKDEpIHsKIAkJc3RydWN0IHJ0bmxfbGlua19pZm1hcCBtYXAgPSB7CkBAIC02NTMsMTkgKzY1NywxMyBAQAogCQlOTEFfUFVUKHNrYiwgSUZMQV9CUk9BRENBU1QsIGRldi0+YWRkcl9sZW4sIGRldi0+YnJvYWRjYXN0KTsKIAl9CiAKLQlpZiAoZGV2LT5nZXRfc3RhdHMpIHsKLQkJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gZGV2LT5nZXRfc3RhdHMoZGV2KTsKLQkJaWYgKHN0YXRzKSB7Ci0JCQlzdHJ1Y3QgbmxhdHRyICphdHRyOworCWF0dHIgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfU1RBVFMsCisJCQlzaXplb2Yoc3RydWN0IHJ0bmxfbGlua19zdGF0cykpOworCWlmIChhdHRyID09IE5VTEwpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JCQlhdHRyID0gbmxhX3Jlc2VydmUoc2tiLCBJRkxBX1NUQVRTLAotCQkJCQkgICBzaXplb2Yoc3RydWN0IHJ0bmxfbGlua19zdGF0cykpOwotCQkJaWYgKGF0dHIgPT0gTlVMTCkKLQkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQotCQkJY29weV9ydG5sX2xpbmtfc3RhdHMobmxhX2RhdGEoYXR0ciksIHN0YXRzKTsKLQkJfQotCX0KKwlzdGF0cyA9IGRldi0+Z2V0X3N0YXRzKGRldik7CisJY29weV9ydG5sX2xpbmtfc3RhdHMobmxhX2RhdGEoYXR0ciksIHN0YXRzKTsKIAogCWlmIChkZXYtPnJ0bmxfbGlua19vcHMpIHsKIAkJaWYgKHJ0bmxfbGlua19maWxsKHNrYiwgZGV2KSA8IDApCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDM2NjYyMTYuLmU0MTE1NjcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC00LDggKzQsNiBAQAogICoJQXV0aG9yczoJQWxhbiBDb3ggPGlpaXRhY0BweXIuc3dhbi5hYy51az4KICAqCQkJRmxvcmlhbiBMYSBSb2NoZSA8cnpzZmxAcnoudW5pLXNiLmRlPgogICoKLSAqCVZlcnNpb246CSRJZDogc2tidWZmLmMsdiAxLjkwIDIwMDEvMTEvMDcgMDU6NTY6MTkgZGF2ZW0gRXhwICQKLSAqCiAgKglGaXhlczoKICAqCQlBbGFuIENveAk6CUZpeGVkIHRoZSB3b3JzdCBvZiB0aGUgbG9hZAogICoJCQkJCWJhbGFuY2VyIGJ1Z3MuCkBAIC00NjEsNiArNDU5LDggQEAKIAluZXctPnRjX3ZlcmQJCT0gb2xkLT50Y192ZXJkOwogI2VuZGlmCiAjZW5kaWYKKwluZXctPnZsYW5fdGNpCQk9IG9sZC0+dmxhbl90Y2k7CisKIAlza2JfY29weV9zZWNtYXJrKG5ldywgb2xkKTsKIH0KIApAQCAtMTI4MiwxMTQgKzEyODIsODMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fc2VnbWVudF9zZWVrKHN0cnVjdCBwYWdlICoqcGFnZSwgdW5zaWduZWQgaW50ICpwb2ZmLAorCQkJCSAgdW5zaWduZWQgaW50ICpwbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCSpwb2ZmICs9IG9mZjsKKwkqcGFnZSArPSAqcG9mZiAvIFBBR0VfU0laRTsKKwkqcG9mZiA9ICpwb2ZmICUgUEFHRV9TSVpFOworCSpwbGVuIC09IG9mZjsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19zcGxpY2Vfc2VnbWVudChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IHBvZmYsCisJCQkJICAgdW5zaWduZWQgaW50IHBsZW4sIHVuc2lnbmVkIGludCAqb2ZmLAorCQkJCSAgIHVuc2lnbmVkIGludCAqbGVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICpzcGQpCit7CisJaWYgKCEqbGVuKQorCQlyZXR1cm4gMTsKKworCS8qIHNraXAgdGhpcyBzZWdtZW50IGlmIGFscmVhZHkgcHJvY2Vzc2VkICovCisJaWYgKCpvZmYgPj0gcGxlbikgeworCQkqb2ZmIC09IHBsZW47CisJCXJldHVybiAwOworCX0KKworCS8qIGlnbm9yZSBhbnkgYml0cyB3ZSBhbHJlYWR5IHByb2Nlc3NlZCAqLworCWlmICgqb2ZmKSB7CisJCV9fc2VnbWVudF9zZWVrKCZwYWdlLCAmcG9mZiwgJnBsZW4sICpvZmYpOworCQkqb2ZmID0gMDsKKwl9CisKKwlkbyB7CisJCXVuc2lnbmVkIGludCBmbGVuID0gbWluKCpsZW4sIHBsZW4pOworCisJCS8qIHRoZSBsaW5lYXIgcmVnaW9uIG1heSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgcGFnZXMgICovCisJCWZsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGZsZW4sIFBBR0VfU0laRSAtIHBvZmYpOworCisJCWlmIChzcGRfZmlsbF9wYWdlKHNwZCwgcGFnZSwgZmxlbiwgcG9mZiwgc2tiKSkKKwkJCXJldHVybiAxOworCisJCV9fc2VnbWVudF9zZWVrKCZwYWdlLCAmcG9mZiwgJnBsZW4sIGZsZW4pOworCQkqbGVuIC09IGZsZW47CisKKwl9IHdoaWxlICgqbGVuICYmIHBsZW4pOworCisJcmV0dXJuIDA7Cit9CisKIC8qCi0gKiBNYXAgbGluZWFyIGFuZCBmcmFnbWVudCBkYXRhIGZyb20gdGhlIHNrYiB0byBzcGQuIFJldHVybnMgbnVtYmVyIG9mCi0gKiBwYWdlcyBtYXBwZWQuCisgKiBNYXAgbGluZWFyIGFuZCBmcmFnbWVudCBkYXRhIGZyb20gdGhlIHNrYiB0byBzcGQuIEl0IHJlcG9ydHMgZmFpbHVyZSBpZiB0aGUKKyAqIHBpcGUgaXMgZnVsbCBvciBpZiB3ZSBhbHJlYWR5IHNwbGljZWQgdGhlIHJlcXVlc3RlZCBsZW5ndGguCiAgKi8KIHN0YXRpYyBpbnQgX19za2Jfc3BsaWNlX2JpdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpvZmZzZXQsCi0JCQkgICAgIHVuc2lnbmVkIGludCAqdG90YWxfbGVuLAotCQkJICAgICBzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqc3BkKQorCQkgICAgICB1bnNpZ25lZCBpbnQgKmxlbiwKKwkJICAgICAgc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKnNwZCkKIHsKLQl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBzcGQtPm5yX3BhZ2VzOwotCXVuc2lnbmVkIGludCBwb2ZmLCBwbGVuLCBsZW4sIHRvZmYsIHRsZW47Ci0JaW50IGhlYWRsZW4sIHNlZywgZXJyb3IgPSAwOwotCi0JdG9mZiA9ICpvZmZzZXQ7Ci0JdGxlbiA9ICp0b3RhbF9sZW47Ci0JaWYgKCF0bGVuKSB7Ci0JCWVycm9yID0gMTsKLQkJZ290byBlcnI7Ci0JfQorCWludCBzZWc7CiAKIAkvKgotCSAqIGlmIHRoZSBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW5lYXIgcGFydCwgZ28gZGlyZWN0bHkgdG8KLQkgKiB0aGUgZnJhZ21lbnRzLgorCSAqIG1hcCB0aGUgbGluZWFyIHBhcnQKIAkgKi8KLQloZWFkbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKLQlpZiAodG9mZiA+PSBoZWFkbGVuKSB7Ci0JCXRvZmYgLT0gaGVhZGxlbjsKLQkJZ290byBtYXBfZnJhZzsKLQl9Ci0KLQkvKgotCSAqIGZpcnN0IG1hcCB0aGUgbGluZWFyIHJlZ2lvbiBpbnRvIHRoZSBwYWdlcy9wYXJ0aWFsIG1hcCwgc2tpcHBpbmcKLQkgKiBhbnkgcG90ZW50aWFsIGluaXRpYWwgb2Zmc2V0LgotCSAqLwotCWxlbiA9IDA7Ci0Jd2hpbGUgKGxlbiA8IGhlYWRsZW4pIHsKLQkJdm9pZCAqcCA9IHNrYi0+ZGF0YSArIGxlbjsKLQotCQlwb2ZmID0gKHVuc2lnbmVkIGxvbmcpIHAgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCXBsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGhlYWRsZW4gLSBsZW4sIFBBR0VfU0laRSAtIHBvZmYpOwotCQlsZW4gKz0gcGxlbjsKLQotCQlpZiAodG9mZikgewotCQkJaWYgKHBsZW4gPD0gdG9mZikgewotCQkJCXRvZmYgLT0gcGxlbjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXBsZW4gLT0gdG9mZjsKLQkJCXBvZmYgKz0gdG9mZjsKLQkJCXRvZmYgPSAwOwotCQl9Ci0KLQkJcGxlbiA9IG1pbihwbGVuLCB0bGVuKTsKLQkJaWYgKCFwbGVuKQotCQkJYnJlYWs7Ci0KLQkJLyoKLQkJICoganVzdCBqdW1wIGRpcmVjdGx5IHRvIHVwZGF0ZSBhbmQgcmV0dXJuLCBubyBwb2ludAotCQkgKiBpbiBnb2luZyBvdmVyIGZyYWdtZW50cyB3aGVuIHRoZSBvdXRwdXQgaXMgZnVsbC4KLQkJICovCi0JCWVycm9yID0gc3BkX2ZpbGxfcGFnZShzcGQsIHZpcnRfdG9fcGFnZShwKSwgcGxlbiwgcG9mZiwgc2tiKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBkb25lOwotCi0JCXRsZW4gLT0gcGxlbjsKLQl9CisJaWYgKF9fc3BsaWNlX3NlZ21lbnQodmlydF90b19wYWdlKHNrYi0+ZGF0YSksCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGEgJiAoUEFHRV9TSVpFIC0gMSksCisJCQkgICAgIHNrYl9oZWFkbGVuKHNrYiksCisJCQkgICAgIG9mZnNldCwgbGVuLCBza2IsIHNwZCkpCisJCXJldHVybiAxOwogCiAJLyoKIAkgKiB0aGVuIG1hcCB0aGUgZnJhZ21lbnRzCiAJICovCi1tYXBfZnJhZzoKIAlmb3IgKHNlZyA9IDA7IHNlZyA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IHNlZysrKSB7CiAJCWNvbnN0IHNrYl9mcmFnX3QgKmYgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tzZWddOwogCi0JCXBsZW4gPSBmLT5zaXplOwotCQlwb2ZmID0gZi0+cGFnZV9vZmZzZXQ7Ci0KLQkJaWYgKHRvZmYpIHsKLQkJCWlmIChwbGVuIDw9IHRvZmYpIHsKLQkJCQl0b2ZmIC09IHBsZW47Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlwbGVuIC09IHRvZmY7Ci0JCQlwb2ZmICs9IHRvZmY7Ci0JCQl0b2ZmID0gMDsKLQkJfQotCi0JCXBsZW4gPSBtaW4ocGxlbiwgdGxlbik7Ci0JCWlmICghcGxlbikKLQkJCWJyZWFrOwotCi0JCWVycm9yID0gc3BkX2ZpbGxfcGFnZShzcGQsIGYtPnBhZ2UsIHBsZW4sIHBvZmYsIHNrYik7Ci0JCWlmIChlcnJvcikKLQkJCWJyZWFrOwotCi0JCXRsZW4gLT0gcGxlbjsKKwkJaWYgKF9fc3BsaWNlX3NlZ21lbnQoZi0+cGFnZSwgZi0+cGFnZV9vZmZzZXQsIGYtPnNpemUsCisJCQkJICAgICBvZmZzZXQsIGxlbiwgc2tiLCBzcGQpKQorCQkJcmV0dXJuIDE7CiAJfQogCi1kb25lOgotCWlmIChzcGQtPm5yX3BhZ2VzIC0gbnJfcGFnZXMpIHsKLQkJKm9mZnNldCA9IDA7Ci0JCSp0b3RhbF9sZW4gPSB0bGVuOwotCQlyZXR1cm4gMDsKLQl9Ci1lcnI6Ci0JLyogdXBkYXRlIHRoZSBvZmZzZXQgdG8gcmVmbGVjdCB0aGUgbGluZWFyIHBhcnQgc2tpcCwgaWYgYW55ICovCi0JaWYgKCFlcnJvcikKLQkJKm9mZnNldCA9IHRvZmY7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjI4OCw2ICsyMjU3LDcgQEAKIAkJc2tiX2NvcHlfcXVldWVfbWFwcGluZyhuc2tiLCBza2IpOwogCQluc2tiLT5wcmlvcml0eSA9IHNrYi0+cHJpb3JpdHk7CiAJCW5za2ItPnByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKKwkJbnNrYi0+dmxhbl90Y2kgPSBza2ItPnZsYW5fdGNpOwogCQluc2tiLT5kc3QgPSBkc3RfY2xvbmUoc2tiLT5kc3QpOwogCQltZW1jcHkobnNrYi0+Y2IsIHNrYi0+Y2IsIHNpemVvZihza2ItPmNiKSk7CiAJCW5za2ItPnBrdF90eXBlID0gc2tiLT5wa3RfdHlwZTsKQEAgLTI1OTIsNiArMjU2MiwxMyBAQAogCXJldHVybiB0cnVlOwogfQogCit2b2lkIF9fc2tiX3dhcm5fbHJvX2ZvcndhcmRpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlwcl93YXJuaW5nKCIlczogcmVjZWl2ZWQgcGFja2V0cyBjYW5ub3QgYmUgZm9yd2FyZGVkIgorCQkJICAgIiB3aGlsZSBMUk8gaXMgZW5hYmxlZFxuIiwgc2tiLT5kZXYtPm5hbWUpOworfQorCiBFWFBPUlRfU1lNQk9MKF9fX3Bza2JfdHJpbSk7CiBFWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTsKIEVYUE9SVF9TWU1CT0woa2ZyZWVfc2tiKTsKQEAgLTI2MjUsNiArMjYwMiw3IEBACiBFWFBPUlRfU1lNQk9MKHNrYl9hYm9ydF9zZXFfcmVhZCk7CiBFWFBPUlRfU1lNQk9MKHNrYl9maW5kX3RleHQpOwogRVhQT1JUX1NZTUJPTChza2JfYXBwZW5kX2RhdGF0b19mcmFncyk7CitFWFBPUlRfU1lNQk9MKF9fc2tiX3dhcm5fbHJvX2ZvcndhcmRpbmcpOwogCiBFWFBPUlRfU1lNQk9MX0dQTChza2JfdG9fc2d2ZWMpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2Nvd19kYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCA4ODA5NGNiLi4xMGE2NGQ1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC03LDggKzcsNiBAQAogICoJCWhhbmRsZXIgZm9yIHByb3RvY29scyB0byB1c2UgYW5kIGdlbmVyaWMgb3B0aW9uIGhhbmRsZXIuCiAgKgogICoKLSAqIFZlcnNpb246CSRJZDogc29jay5jLHYgMS4xMTcgMjAwMi8wMi8wMSAyMjowMTowMyBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUZsb3JpYW4gTGEgUm9jaGUsIDxmbGxhQHN0dWQudW5pLXNiLmRlPgpAQCAtMTA2OCw3ICsxMDY2LDcgQEAKIAkJICogdG8gYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGFsbCBjYWxsZXJzLiAtYWNtZQogCQkgKi8KIAkJc2tfcmVmY250X2RlYnVnX2luYyhuZXdzayk7Ci0JCW5ld3NrLT5za19zb2NrZXQgPSBOVUxMOworCQlza19zZXRfc29ja2V0KG5ld3NrLCBOVUxMKTsKIAkJbmV3c2stPnNrX3NsZWVwCSA9IE5VTEw7CiAKIAkJaWYgKG5ld3NrLT5za19wcm90LT5zb2NrZXRzX2FsbG9jYXRlZCkKQEAgLTE0NDQsNyArMTQ0Miw3IEBACiAJLyogVW5kZXIgcHJlc3N1cmUuICovCiAJaWYgKGFsbG9jYXRlZCA+IHByb3QtPnN5c2N0bF9tZW1bMV0pCiAJCWlmIChwcm90LT5lbnRlcl9tZW1vcnlfcHJlc3N1cmUpCi0JCQlwcm90LT5lbnRlcl9tZW1vcnlfcHJlc3N1cmUoKTsKKwkJCXByb3QtPmVudGVyX21lbW9yeV9wcmVzc3VyZShzayk7CiAKIAkvKiBPdmVyIGhhcmQgbGltaXQuICovCiAJaWYgKGFsbG9jYXRlZCA+IHByb3QtPnN5c2N0bF9tZW1bMl0pCkBAIC0xNzA0LDcgKzE3MDIsNyBAQAogCXNrLT5za19yY3ZidWYJCT0Jc3lzY3RsX3JtZW1fZGVmYXVsdDsKIAlzay0+c2tfc25kYnVmCQk9CXN5c2N0bF93bWVtX2RlZmF1bHQ7CiAJc2stPnNrX3N0YXRlCQk9CVRDUF9DTE9TRTsKLQlzay0+c2tfc29ja2V0CQk9CXNvY2s7CisJc2tfc2V0X3NvY2tldChzaywgc29jayk7CiAKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggNWZjODAxMC4uYTU3MGUyYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTEyNSwxNCArMTI1LDYgQEAKICNlbmRpZiAvKiBDT05GSUdfWEZSTSAqLwogI2VuZGlmIC8qIENPTkZJR19ORVQgKi8KIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9DT1JFX1NPTUFYQ09OTiwKLQkJLnByb2NuYW1lCT0gInNvbWF4Y29ubiIsCi0JCS5kYXRhCQk9ICZpbml0X25ldC5jb3JlLnN5c2N0bF9zb21heGNvbm4sCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYwotCX0sCi0JewogCQkuY3RsX25hbWUJPSBORVRfQ09SRV9CVURHRVQsCiAJCS5wcm9jbmFtZQk9ICJuZXRkZXZfYnVkZ2V0IiwKIAkJLmRhdGEJCT0gJm5ldGRldl9idWRnZXQsCkBAIC0xNTEsNiArMTQzLDE4IEBACiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9DT1JFX1NPTUFYQ09OTiwKKwkJLnByb2NuYW1lCT0gInNvbWF4Y29ubiIsCisJCS5kYXRhCQk9ICZpbml0X25ldC5jb3JlLnN5c2N0bF9zb21heGNvbm4sCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYworCX0sCisJeyAuY3RsX25hbWUgPSAwIH0KK307CisKIHN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgY3RsX3BhdGggbmV0X2NvcmVfcGF0aFtdID0gewogCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCiAJeyAucHJvY25hbWUgPSAiY29yZSIsIC5jdGxfbmFtZSA9IE5FVF9DT1JFLCB9LApAQCAtMTU5LDIzICsxNjMsMTcgQEAKIAogc3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3QgY3RsX3RhYmxlICp0YmwsICp0bXA7CisJc3RydWN0IGN0bF90YWJsZSAqdGJsOwogCiAJbmV0LT5jb3JlLnN5c2N0bF9zb21heGNvbm4gPSBTT01BWENPTk47CiAKLQl0YmwgPSBuZXRfY29yZV90YWJsZTsKKwl0YmwgPSBuZXRuc19jb3JlX3RhYmxlOwogCWlmIChuZXQgIT0gJmluaXRfbmV0KSB7Ci0JCXRibCA9IGttZW1kdXAodGJsLCBzaXplb2YobmV0X2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwkJdGJsID0ga21lbWR1cCh0YmwsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICh0YmwgPT0gTlVMTCkKIAkJCWdvdG8gZXJyX2R1cDsKIAotCQlmb3IgKHRtcCA9IHRibDsgdG1wLT5wcm9jbmFtZTsgdG1wKyspIHsKLQkJCWlmICh0bXAtPmRhdGEgPj0gKHZvaWQgKikmaW5pdF9uZXQgJiYKLQkJCQkJdG1wLT5kYXRhIDwgKHZvaWQgKikoJmluaXRfbmV0ICsgMSkpCi0JCQkJdG1wLT5kYXRhICs9IChjaGFyICopbmV0IC0gKGNoYXIgKikmaW5pdF9uZXQ7Ci0JCQllbHNlCi0JCQkJdG1wLT5tb2RlICY9IH4wMjIyOwotCQl9CisJCXRibFswXS5kYXRhID0gJm5ldC0+Y29yZS5zeXNjdGxfc29tYXhjb25uOwogCX0KIAogCW5ldC0+Y29yZS5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQsCkBAIC0xODYsNyArMTg0LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX3JlZzoKLQlpZiAodGJsICE9IG5ldF9jb3JlX3RhYmxlKQorCWlmICh0YmwgIT0gbmV0bnNfY29yZV90YWJsZSkKIAkJa2ZyZWUodGJsKTsKIGVycl9kdXA6CiAJcmV0dXJuIC1FTk9NRU07CkBAIC0xOTgsNyArMTk2LDcgQEAKIAogCXRibCA9IG5ldC0+Y29yZS5zeXNjdGxfaGRyLT5jdGxfdGFibGVfYXJnOwogCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQtPmNvcmUuc3lzY3RsX2hkcik7Ci0JQlVHX09OKHRibCA9PSBuZXRfY29yZV90YWJsZSk7CisJQlVHX09OKHRibCA9PSBuZXRuc19jb3JlX3RhYmxlKTsKIAlrZnJlZSh0YmwpOwogfQogCkBAIC0yMDksNiArMjA3LDcgQEAKIAogc3RhdGljIF9faW5pdCBpbnQgc3lzY3RsX2NvcmVfaW5pdCh2b2lkKQogeworCXJlZ2lzdGVyX25ldF9zeXNjdGxfcm90YWJsZShuZXRfY29yZV9wYXRoLCBuZXRfY29yZV90YWJsZSk7CiAJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnN5c2N0bF9jb3JlX29wcyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3VzZXJfZG1hLmMgYi9uZXQvY29yZS91c2VyX2RtYS5jCmluZGV4IGM3N2FmZjkuLjhjNmI3MDYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3VzZXJfZG1hLmMKKysrIGIvbmV0L2NvcmUvdXNlcl9kbWEuYwpAQCAtMzQsNiArMzQsNyBAQAogI2RlZmluZSBORVRfRE1BX0RFRkFVTFRfQ09QWUJSRUFLIDQwOTYKIAogaW50IHN5c2N0bF90Y3BfZG1hX2NvcHlicmVhayA9IE5FVF9ETUFfREVGQVVMVF9DT1BZQlJFQUs7CitFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfZG1hX2NvcHlicmVhayk7CiAKIC8qKgogICoJZG1hX3NrYl9jb3B5X2RhdGFncmFtX2lvdmVjIC0gQ29weSBhIGRhdGFncmFtIHRvIGFuIGlvdmVjLgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKaW5kZXggYTE5MjlmMy4uZjY3NTZlMCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYworKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCkBAIC03OTQsNyArNzk0LDcgQEAKIHsKIAlzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayAqaGNyeCA9IGNjaWQzX2hjX3J4X3NrKHNrKTsKIAllbnVtIGNjaWQzX2ZiYWNrX3R5cGUgZG9fZmVlZGJhY2sgPSBDQ0lEM19GQkFDS19OT05FOwotCWNvbnN0IHUzMiBuZHAgPSBkY2NwX3NrKHNrKS0+ZGNjcHNfb3B0aW9uc19yZWNlaXZlZC5kY2Nwb3JfbmRwOworCWNvbnN0IHU2NCBuZHAgPSBkY2NwX3NrKHNrKS0+ZGNjcHNfb3B0aW9uc19yZWNlaXZlZC5kY2Nwb3JfbmRwOwogCWNvbnN0IGJvb2wgaXNfZGF0YV9wYWNrZXQgPSBkY2NwX2RhdGFfcGFja2V0KHNrYik7CiAKIAlpZiAodW5saWtlbHkoaGNyeC0+Y2NpZDNoY3J4X3N0YXRlID09IFRGUkNfUlNUQVRFX05PX0RBVEEpKSB7CkBAIC04MjUsMTggKzgyNSwxNiBAQAogCX0KIAogCS8qCi0JICogSGFuZGxlIHBlbmRpbmcgbG9zc2VzIGFuZCBvdGhlcndpc2UgY2hlY2sgZm9yIG5ldyBsb3NzCisJICogUGVyZm9ybSBsb3NzIGRldGVjdGlvbiBhbmQgaGFuZGxlIHBlbmRpbmcgbG9zc2VzCiAJICovCi0JaWYgKHRmcmNfcnhfaGlzdF9sb3NzX3BlbmRpbmcoJmhjcngtPmNjaWQzaGNyeF9oaXN0KSAmJgotCSAgICB0ZnJjX3J4X2hhbmRsZV9sb3NzKCZoY3J4LT5jY2lkM2hjcnhfaGlzdCwKLQkJCQkmaGNyeC0+Y2NpZDNoY3J4X2xpX2hpc3QsCi0JCQkJc2tiLCBuZHAsIGNjaWQzX2ZpcnN0X2xpLCBzaykgKSB7CisJaWYgKHRmcmNfcnhfaGFuZGxlX2xvc3MoJmhjcngtPmNjaWQzaGNyeF9oaXN0LCAmaGNyeC0+Y2NpZDNoY3J4X2xpX2hpc3QsCisJCQkJc2tiLCBuZHAsIGNjaWQzX2ZpcnN0X2xpLCBzaykpIHsKIAkJZG9fZmVlZGJhY2sgPSBDQ0lEM19GQkFDS19QQVJBTV9DSEFOR0U7CiAJCWdvdG8gZG9uZV9yZWNlaXZpbmc7CiAJfQogCi0JaWYgKHRmcmNfcnhfaGlzdF9uZXdfbG9zc19pbmRpY2F0ZWQoJmhjcngtPmNjaWQzaGNyeF9oaXN0LCBza2IsIG5kcCkpCi0JCWdvdG8gdXBkYXRlX3JlY29yZHM7CisJaWYgKHRmcmNfcnhfaGlzdF9sb3NzX3BlbmRpbmcoJmhjcngtPmNjaWQzaGNyeF9oaXN0KSkKKwkJcmV0dXJuOyAvKiBkb25lIHJlY2VpdmluZyAqLwogCiAJLyoKIAkgKiBIYW5kbGUgZGF0YSBwYWNrZXRzOiBSVFQgc2FtcGxpbmcgYW5kIG1vbml0b3JpbmcgcApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuYyBiL25ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmMKaW5kZXggODQ5ZTE4MS4uYmNkNmFjNCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuYworKysgYi9uZXQvZGNjcC9jY2lkcy9saWIvbG9zc19pbnRlcnZhbC5jCkBAIC05MCwxNCArOTAsMTQgQEAKIHsKIAlzdHJ1Y3QgdGZyY19sb3NzX2ludGVydmFsICpjdXIgPSB0ZnJjX2xoX3BlZWsobGgpOwogCXUzMiBvbGRfaV9tZWFuID0gbGgtPmlfbWVhbjsKLQlzNjQgbGVuZ3RoOworCXM2NCBsZW47CiAKIAlpZiAoY3VyID09IE5VTEwpCQkJLyogbm90IGluaXRpYWxpc2VkICovCiAJCXJldHVybiAwOwogCi0JbGVuZ3RoID0gZGNjcF9kZWx0YV9zZXFubyhjdXItPmxpX3NlcW5vLCBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEpOworCWxlbiA9IGRjY3BfZGVsdGFfc2Vxbm8oY3VyLT5saV9zZXFubywgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxKSArIDE7CiAKLQlpZiAobGVuZ3RoIC0gY3VyLT5saV9sZW5ndGggPD0gMCkJLyogZHVwbGljYXRlIG9yIHJlb3JkZXJlZCAqLworCWlmIChsZW4gLSAoczY0KWN1ci0+bGlfbGVuZ3RoIDw9IDApCS8qIGR1cGxpY2F0ZSBvciByZW9yZGVyZWQgKi8KIAkJcmV0dXJuIDA7CiAKIAlpZiAoU1VCMTYoZGNjcF9oZHIoc2tiKS0+ZGNjcGhfY2N2YWwsIGN1ci0+bGlfY2N2YWwpID4gNCkKQEAgLTExNCw3ICsxMTQsNyBAQAogCWlmICh0ZnJjX2xoX2xlbmd0aChsaCkgPT0gMSkJCS8qIGR1ZSB0byBSRkMgMzQ0OCwgNi4zLjEgKi8KIAkJcmV0dXJuIDA7CiAKLQljdXItPmxpX2xlbmd0aCA9IGxlbmd0aDsKKwljdXItPmxpX2xlbmd0aCA9IGxlbjsKIAl0ZnJjX2xoX2NhbGNfaV9tZWFuKGxoKTsKIAogCXJldHVybiAobGgtPmlfbWVhbiA8IG9sZF9pX21lYW4pOwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJZWxzZSB7CiAJCWN1ci0+bGlfbGVuZ3RoID0gZGNjcF9kZWx0YV9zZXFubyhjdXItPmxpX3NlcW5vLCBuZXctPmxpX3NlcW5vKTsKIAkJbmV3LT5saV9sZW5ndGggPSBkY2NwX2RlbHRhX3NlcW5vKG5ldy0+bGlfc2Vxbm8sCi0JCQkJICB0ZnJjX3J4X2hpc3RfbGFzdF9yY3YocmgpLT50ZnJjaHJ4X3NlcW5vKTsKKwkJCQkgIHRmcmNfcnhfaGlzdF9sYXN0X3JjdihyaCktPnRmcmNocnhfc2Vxbm8pICsgMTsKIAkJaWYgKGxoLT5jb3VudGVyID4gKDIqTElIX1NJWkUpKQogCQkJbGgtPmNvdW50ZXIgLT0gTElIX1NJWkU7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5jIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmMKaW5kZXggMjBhZjFhNi4uNmNjMTA4YSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmMKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGZyY19yeF9oaXN0X2VudHJ5X2Zyb21fc2tiKHN0cnVjdCB0ZnJjX3J4X2hpc3RfZW50cnkgKmVudHJ5LAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgICAgIGNvbnN0IHUzMiBuZHApCisJCQkJCSAgICAgICBjb25zdCB1NjQgbmRwKQogewogCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOwogCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogdm9pZCB0ZnJjX3J4X2hpc3RfYWRkX3BhY2tldChzdHJ1Y3QgdGZyY19yeF9oaXN0ICpoLAogCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICBjb25zdCB1MzIgbmRwKQorCQkJICAgICBjb25zdCB1NjQgbmRwKQogewogCXN0cnVjdCB0ZnJjX3J4X2hpc3RfZW50cnkgKmVudHJ5ID0gdGZyY19yeF9oaXN0X2xhc3RfcmN2KGgpOwogCkBAIC0yMDYsMzEgKzIwNiwzOSBAQAogICoKICAqIEluIHRoZSBkZXNjcmlwdGlvbnMsIGBTaScgcmVmZXJzIHRvIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgZW50cnkgbnVtYmVyIGksCiAgKiB3aG9zZSBORFAgY291bnQgaXMgYE5pJyAobG93ZXIgY2FzZSBpcyB1c2VkIGZvciB2YXJpYWJsZXMpLgotICogTm90ZTogQWxsIF9fYWZ0ZXJfbG9zcyBmdW5jdGlvbnMgZXhwZWN0IHRoYXQgYSB0ZXN0IGFnYWluc3QgZHVwbGljYXRlcyBoYXMKLSAqICAgICAgIGJlZW4gcGVyZm9ybWVkIGFscmVhZHk6IHRoZSBzZXFubyBvZiB0aGUgc2tiIG11c3Qgbm90IGJlIGxlc3MgdGhhbiB0aGUKLSAqICAgICAgIHNlcW5vIG9mIGxvc3NfcHJldjsgYW5kIGl0IG11c3Qgbm90IGVxdWFsIHRoYXQgb2YgYW55IHZhbGlkIGhpc3RfZW50cnkuCisgKiBOb3RlOiBBbGwgX194eHhfbG9zcyBmdW5jdGlvbnMgZXhwZWN0IHRoYXQgYSB0ZXN0IGFnYWluc3QgZHVwbGljYXRlcyBoYXMgYmVlbgorICogICAgICAgcGVyZm9ybWVkIGFscmVhZHk6IHRoZSBzZXFubyBvZiB0aGUgc2tiIG11c3Qgbm90IGJlIGxlc3MgdGhhbiB0aGUgc2Vxbm8KKyAqICAgICAgIG9mIGxvc3NfcHJldjsgYW5kIGl0IG11c3Qgbm90IGVxdWFsIHRoYXQgb2YgYW55IHZhbGlkIGhpc3RvcnkgZW50cnkuCiAgKi8KK3N0YXRpYyB2b2lkIF9fZG9fdHJhY2tfbG9zcyhzdHJ1Y3QgdGZyY19yeF9oaXN0ICpoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgbjEpCit7CisJdTY0IHMwID0gdGZyY19yeF9oaXN0X2xvc3NfcHJldihoKS0+dGZyY2hyeF9zZXFubywKKwkgICAgczEgPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7CisKKwlpZiAoIWRjY3BfbG9zc19mcmVlKHMwLCBzMSwgbjEpKSB7CS8qIGdhcCBiZXR3ZWVuIFMwIGFuZCBTMSAqLworCQloLT5sb3NzX2NvdW50ID0gMTsKKwkJdGZyY19yeF9oaXN0X2VudHJ5X2Zyb21fc2tiKHRmcmNfcnhfaGlzdF9lbnRyeShoLCAxKSwgc2tiLCBuMSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBfX29uZV9hZnRlcl9sb3NzKHN0cnVjdCB0ZnJjX3J4X2hpc3QgKmgsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuMikKIHsKIAl1NjQgczAgPSB0ZnJjX3J4X2hpc3RfbG9zc19wcmV2KGgpLT50ZnJjaHJ4X3NlcW5vLAogCSAgICBzMSA9IHRmcmNfcnhfaGlzdF9lbnRyeShoLCAxKS0+dGZyY2hyeF9zZXFubywKIAkgICAgczIgPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7Ci0JaW50IG4xID0gdGZyY19yeF9oaXN0X2VudHJ5KGgsIDEpLT50ZnJjaHJ4X25kcCwKLQkgICBkMTIgPSBkY2NwX2RlbHRhX3NlcW5vKHMxLCBzMiksIGQyOwogCi0JaWYgKGQxMiA+IDApIHsJCQkvKiBTMSAgPCAgUzIgKi8KKwlpZiAobGlrZWx5KGRjY3BfZGVsdGFfc2Vxbm8oczEsIHMyKSA+IDApKSB7CS8qIFMxICA8ICBTMiAqLwogCQloLT5sb3NzX2NvdW50ID0gMjsKIAkJdGZyY19yeF9oaXN0X2VudHJ5X2Zyb21fc2tiKHRmcmNfcnhfaGlzdF9lbnRyeShoLCAyKSwgc2tiLCBuMik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBTMCAgPCAgUzIgIDwgIFMxICovCi0JZDIgPSBkY2NwX2RlbHRhX3NlcW5vKHMwLCBzMik7CiAKLQlpZiAoZDIgPT0gMSB8fCBuMiA+PSBkMikgewkvKiBTMiBpcyBkaXJlY3Qgc3VjY2Vzc29yIG9mIFMwICovCi0JCWludCBkMjEgPSAtZDEyOworCWlmIChkY2NwX2xvc3NfZnJlZShzMCwgczIsIG4yKSkgeworCQl1NjQgbjEgPSB0ZnJjX3J4X2hpc3RfZW50cnkoaCwgMSktPnRmcmNocnhfbmRwOwogCi0JCWlmIChkMjEgPT0gMSB8fCBuMSA+PSBkMjEpIHsKKwkJaWYgKGRjY3BfbG9zc19mcmVlKHMyLCBzMSwgbjEpKSB7CiAJCQkvKiBob2xlIGlzIGZpbGxlZDogUzAsIFMyLCBhbmQgUzEgYXJlIGNvbnNlY3V0aXZlICovCiAJCQloLT5sb3NzX2NvdW50ID0gMDsKIAkJCWgtPmxvc3Nfc3RhcnQgPSB0ZnJjX3J4X2hpc3RfaW5kZXgoaCwgMSk7CkBAIC0yMzgsOSArMjQ2LDkgQEAKIAkJCS8qIGdhcCBiZXR3ZWVuIFMyIGFuZCBTMToganVzdCB1cGRhdGUgbG9zc19wcmV2ICovCiAJCQl0ZnJjX3J4X2hpc3RfZW50cnlfZnJvbV9za2IodGZyY19yeF9oaXN0X2xvc3NfcHJldihoKSwgc2tiLCBuMik7CiAKLQl9IGVsc2UgewkJCS8qIGhvbGUgYmV0d2VlbiBTMCBhbmQgUzIgKi8KKwl9IGVsc2UgewkvKiBnYXAgYmV0d2VlbiBTMCBhbmQgUzIgKi8KIAkJLyoKLQkJICogUmVvcmRlciBoaXN0b3J5IHRvIGluc2VydCBTMiBiZXR3ZWVuIFMwIGFuZCBzMQorCQkgKiBSZW9yZGVyIGhpc3RvcnkgdG8gaW5zZXJ0IFMyIGJldHdlZW4gUzAgYW5kIFMxCiAJCSAqLwogCQl0ZnJjX3J4X2hpc3Rfc3dhcChoLCAwLCAzKTsKIAkJaC0+bG9zc19zdGFydCA9IHRmcmNfcnhfaGlzdF9pbmRleChoLCAzKTsKQEAgLTI1NiwyMiArMjY0LDE4IEBACiAJICAgIHMxID0gdGZyY19yeF9oaXN0X2VudHJ5KGgsIDEpLT50ZnJjaHJ4X3NlcW5vLAogCSAgICBzMiA9IHRmcmNfcnhfaGlzdF9lbnRyeShoLCAyKS0+dGZyY2hyeF9zZXFubywKIAkgICAgczMgPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7Ci0JaW50IG4xID0gdGZyY19yeF9oaXN0X2VudHJ5KGgsIDEpLT50ZnJjaHJ4X25kcCwKLQkgICBkMjMgPSBkY2NwX2RlbHRhX3NlcW5vKHMyLCBzMyksIGQxMywgZDMsIGQzMTsKIAotCWlmIChkMjMgPiAwKSB7CQkJLyogUzIgIDwgIFMzICovCisJaWYgKGxpa2VseShkY2NwX2RlbHRhX3NlcW5vKHMyLCBzMykgPiAwKSkgewkvKiBTMiAgPCAgUzMgKi8KIAkJaC0+bG9zc19jb3VudCA9IDM7CiAJCXRmcmNfcnhfaGlzdF9lbnRyeV9mcm9tX3NrYih0ZnJjX3J4X2hpc3RfZW50cnkoaCwgMyksIHNrYiwgbjMpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBTMyAgPCAgUzIgKi8KLQlkMTMgPSBkY2NwX2RlbHRhX3NlcW5vKHMxLCBzMyk7CiAKLQlpZiAoZDEzID4gMCkgeworCWlmIChkY2NwX2RlbHRhX3NlcW5vKHMxLCBzMykgPiAwKSB7CQkvKiBTMSAgPCAgUzMgIDwgIFMyICovCiAJCS8qCi0JCSAqIFRoZSBzZXF1ZW5jZSBudW1iZXIgb3JkZXIgaXMgUzEsIFMzLCBTMgotCQkgKiBSZW9yZGVyIGhpc3RvcnkgdG8gaW5zZXJ0IGVudHJ5IGJldHdlZW4gUzEgYW5kIFMyCisJCSAqIFJlb3JkZXIgaGlzdG9yeSB0byBpbnNlcnQgUzMgYmV0d2VlbiBTMSBhbmQgUzIKIAkJICovCiAJCXRmcmNfcnhfaGlzdF9zd2FwKGgsIDIsIDMpOwogCQl0ZnJjX3J4X2hpc3RfZW50cnlfZnJvbV9za2IodGZyY19yeF9oaXN0X2VudHJ5KGgsIDIpLCBza2IsIG4zKTsKQEAgLTI4MCwxNyArMjg0LDE1IEBACiAJfQogCiAJLyogUzAgIDwgIFMzICA8ICBTMSAqLwotCWQzMSA9IC1kMTM7Ci0JZDMgID0gZGNjcF9kZWx0YV9zZXFubyhzMCwgczMpOwogCi0JaWYgKGQzID09IDEgfHwgbjMgPj0gZDMpIHsJLyogUzMgaXMgYSBzdWNjZXNzb3Igb2YgUzAgKi8KKwlpZiAoZGNjcF9sb3NzX2ZyZWUoczAsIHMzLCBuMykpIHsKKwkJdTY0IG4xID0gdGZyY19yeF9oaXN0X2VudHJ5KGgsIDEpLT50ZnJjaHJ4X25kcDsKIAotCQlpZiAoZDMxID09IDEgfHwgbjEgPj0gZDMxKSB7CisJCWlmIChkY2NwX2xvc3NfZnJlZShzMywgczEsIG4xKSkgewogCQkJLyogaG9sZSBiZXR3ZWVuIFMwIGFuZCBTMSBmaWxsZWQgYnkgUzMgKi8KLQkJCWludCAgZDIgPSBkY2NwX2RlbHRhX3NlcW5vKHMxLCBzMiksCi0JCQkgICAgIG4yID0gdGZyY19yeF9oaXN0X2VudHJ5KGgsIDIpLT50ZnJjaHJ4X25kcDsKKwkJCXU2NCBuMiA9IHRmcmNfcnhfaGlzdF9lbnRyeShoLCAyKS0+dGZyY2hyeF9uZHA7CiAKLQkJCWlmIChkMiA9PSAxIHx8IG4yID49IGQyKSB7CisJCQlpZiAoZGNjcF9sb3NzX2ZyZWUoczEsIHMyLCBuMikpIHsKIAkJCQkvKiBlbnRpcmUgaG9sZSBmaWxsZWQgYnkgUzAsIFMzLCBTMSwgUzIgKi8KIAkJCQloLT5sb3NzX3N0YXJ0ID0gdGZyY19yeF9oaXN0X2luZGV4KGgsIDIpOwogCQkJCWgtPmxvc3NfY291bnQgPSAwOwpAQCAtMzA3LDggKzMwOSw4IEBACiAJfQogCiAJLyoKLQkgKiBUaGUgcmVtYWluaW5nIGNhc2U6IFMzIGlzIG5vdCBhIHN1Y2Nlc3NvciBvZiBTMC4KLQkgKiBTZXF1ZW5jZSBvcmRlciBpcyBTMCwgUzMsIFMxLCBTMjsgcmVvcmRlciB0byBpbnNlcnQgYmV0d2VlbiBTMCBhbmQgUzEKKwkgKiBUaGUgcmVtYWluaW5nIGNhc2U6ICBTMCAgPCAgUzMgIDwgIFMxICA8ICBTMjsgIGdhcCBiZXR3ZWVuIFMwIGFuZCBTMworCSAqIFJlb3JkZXIgaGlzdG9yeSB0byBpbnNlcnQgUzMgYmV0d2VlbiBTMCBhbmQgUzEuCiAJICovCiAJdGZyY19yeF9oaXN0X3N3YXAoaCwgMCwgMyk7CiAJaC0+bG9zc19zdGFydCA9IHRmcmNfcnhfaGlzdF9pbmRleChoLCAzKTsKQEAgLTMxOCwzMyArMzIwLDI1IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIHJldHVybiB0aGUgc2lnbmVkIG1vZHVsby0yXjQ4IHNlcXVlbmNlIG51bWJlciBkaXN0YW5jZSBmcm9tIGVudHJ5IGUxIHRvIGUyICovCi1zdGF0aWMgczY0IHRmcmNfcnhfaGlzdF9kZWx0YV9zZXFubyhzdHJ1Y3QgdGZyY19yeF9oaXN0ICpoLCB1OCBlMSwgdTggZTIpCi17Ci0JRENDUF9CVUdfT04oZTEgPiBoLT5sb3NzX2NvdW50IHx8IGUyID4gaC0+bG9zc19jb3VudCk7Ci0KLQlyZXR1cm4gZGNjcF9kZWx0YV9zZXFubyh0ZnJjX3J4X2hpc3RfZW50cnkoaCwgZTEpLT50ZnJjaHJ4X3NlcW5vLAotCQkJCXRmcmNfcnhfaGlzdF9lbnRyeShoLCBlMiktPnRmcmNocnhfc2Vxbm8pOwotfQotCiAvKiByZWN5Y2xlIFJYIGhpc3RvcnkgcmVjb3JkcyB0byBjb250aW51ZSBsb3NzIGRldGVjdGlvbiBpZiBuZWNlc3NhcnkgKi8KIHN0YXRpYyB2b2lkIF9fdGhyZWVfYWZ0ZXJfbG9zcyhzdHJ1Y3QgdGZyY19yeF9oaXN0ICpoKQogewogCS8qCi0JICogVGhlIGRpc3RhbmNlIGJldHdlZW4gUzAgYW5kIFMxIGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gMSBhbmQgdGhlIE5EUAotCSAqIGNvdW50IG9mIFMxIGlzIHNtYWxsZXIgdGhhbiB0aGlzIGRpc3RhbmNlLiBPdGhlcndpc2UgdGhlcmUgd291bGQKLQkgKiBoYXZlIGJlZW4gbm8gbG9zcy4gSGVuY2UgaXQgaXMgb25seSBuZWNlc3NhcnkgdG8gc2VlIHdoZXRoZXIgdGhlcmUKLQkgKiBhcmUgZnVydGhlciBtaXNzaW5nIGRhdGEgcGFja2V0cyBiZXR3ZWVuIFMxL1MyIGFuZCBTMi9TMy4KKwkgKiBBdCB0aGlzIHN0YWdlIHdlIGtub3cgYWxyZWFkeSB0aGF0IHRoZXJlIGlzIGEgZ2FwIGJldHdlZW4gUzAgYW5kIFMxCisJICogKHNpbmNlIFMwIHdhcyB0aGUgaGlnaGVzdCBzZXF1ZW5jZSBudW1iZXIgcmVjZWl2ZWQgYmVmb3JlIGRldGVjdGluZworCSAqIHRoZSBsb3NzKS4gVG8gcmVjeWNsZSB0aGUgbG9zcyByZWNvcmQsIGl0IGlzCXRodXMgb25seSBuZWNlc3NhcnkgdG8KKwkgKiBjaGVjayBmb3Igb3RoZXIgcG9zc2libGUgZ2FwcyBiZXR3ZWVuIFMxL1MyIGFuZCBiZXR3ZWVuIFMyL1MzLgogCSAqLwotCWludCBkMiA9IHRmcmNfcnhfaGlzdF9kZWx0YV9zZXFubyhoLCAxLCAyKSwKLQkgICAgZDMgPSB0ZnJjX3J4X2hpc3RfZGVsdGFfc2Vxbm8oaCwgMiwgMyksCi0JICAgIG4yID0gdGZyY19yeF9oaXN0X2VudHJ5KGgsIDIpLT50ZnJjaHJ4X25kcCwKKwl1NjQgczEgPSB0ZnJjX3J4X2hpc3RfZW50cnkoaCwgMSktPnRmcmNocnhfc2Vxbm8sCisJICAgIHMyID0gdGZyY19yeF9oaXN0X2VudHJ5KGgsIDIpLT50ZnJjaHJ4X3NlcW5vLAorCSAgICBzMyA9IHRmcmNfcnhfaGlzdF9lbnRyeShoLCAzKS0+dGZyY2hyeF9zZXFubzsKKwl1NjQgbjIgPSB0ZnJjX3J4X2hpc3RfZW50cnkoaCwgMiktPnRmcmNocnhfbmRwLAogCSAgICBuMyA9IHRmcmNfcnhfaGlzdF9lbnRyeShoLCAzKS0+dGZyY2hyeF9uZHA7CiAKLQlpZiAoZDIgPT0gMSB8fCBuMiA+PSBkMikgewkvKiBTMiBpcyBzdWNjZXNzb3IgdG8gUzEgKi8KKwlpZiAoZGNjcF9sb3NzX2ZyZWUoczEsIHMyLCBuMikpIHsKIAotCQlpZiAoZDMgPT0gMSB8fCBuMyA+PSBkMykgewotCQkJLyogUzMgaXMgc3VjY2Vzc29yIG9mIFMyOiBlbnRpcmUgaG9sZSBpcyBmaWxsZWQgKi8KKwkJaWYgKGRjY3BfbG9zc19mcmVlKHMyLCBzMywgbjMpKSB7CisJCQkvKiBubyBnYXAgYmV0d2VlbiBTMiBhbmQgUzM6IGVudGlyZSBob2xlIGlzIGZpbGxlZCAqLwogCQkJaC0+bG9zc19zdGFydCA9IHRmcmNfcnhfaGlzdF9pbmRleChoLCAzKTsKIAkJCWgtPmxvc3NfY291bnQgPSAwOwogCQl9IGVsc2UgewpAQCAtMzUzLDcgKzM0Nyw3IEBACiAJCQloLT5sb3NzX2NvdW50ID0gMTsKIAkJfQogCi0JfSBlbHNlIHsJCQkvKiBnYXAgYmV0d2VlbiBTMSBhbmQgUzIgKi8KKwl9IGVsc2UgewkvKiBnYXAgYmV0d2VlbiBTMSBhbmQgUzIgKi8KIAkJaC0+bG9zc19zdGFydCA9IHRmcmNfcnhfaGlzdF9pbmRleChoLCAxKTsKIAkJaC0+bG9zc19jb3VudCA9IDI7CiAJfQpAQCAtMzcwLDE1ICszNjQsMjAgQEAKICAqICBDaG9vc2VzIGFjdGlvbiBhY2NvcmRpbmcgdG8gcGVuZGluZyBsb3NzLCB1cGRhdGVzIExJIGRhdGFiYXNlIHdoZW4gYSBuZXcKICAqICBsb3NzIHdhcyBkZXRlY3RlZCwgYW5kIGRvZXMgcmVxdWlyZWQgcG9zdC1wcm9jZXNzaW5nLiBSZXR1cm5zIDEgd2hlbiBjYWxsZXIKICAqICBzaG91bGQgc2VuZCBmZWVkYmFjaywgMCBvdGhlcndpc2UuCisgKiAgU2luY2UgaXQgYWxzbyB0YWtlcyBjYXJlIG9mIHJlb3JkZXJpbmcgZHVyaW5nIGxvc3MgZGV0ZWN0aW9uIGFuZCB1cGRhdGVzIHRoZQorICogIHJlY29yZHMgYWNjb3JkaW5nbHksIHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBwZXJmb3JtIGFueSBtb3JlIFJYIGhpc3RvcnkKKyAqICBvcGVyYXRpb25zIHdoZW4gbG9zc19jb3VudCBpcyBncmVhdGVyIHRoYW4gMCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKi8KIGludCB0ZnJjX3J4X2hhbmRsZV9sb3NzKHN0cnVjdCB0ZnJjX3J4X2hpc3QgKmgsCiAJCQlzdHJ1Y3QgdGZyY19sb3NzX2hpc3QgKmxoLAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5kcCwKKwkJCXN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU2NCBuZHAsCiAJCQl1MzIgKCpjYWxjX2ZpcnN0X2xpKShzdHJ1Y3Qgc29jayAqKSwgc3RydWN0IHNvY2sgKnNrKQogewogCWludCBpc19uZXdfbG9zcyA9IDA7CiAKLQlpZiAoaC0+bG9zc19jb3VudCA9PSAxKSB7CisJaWYgKGgtPmxvc3NfY291bnQgPT0gMCkgeworCQlfX2RvX3RyYWNrX2xvc3MoaCwgc2tiLCBuZHApOworCX0gZWxzZSBpZiAoaC0+bG9zc19jb3VudCA9PSAxKSB7CiAJCV9fb25lX2FmdGVyX2xvc3MoaCwgc2tiLCBuZHApOwogCX0gZWxzZSBpZiAoaC0+bG9zc19jb3VudCAhPSAyKSB7CiAJCURDQ1BfQlVHKCJpbnZhbGlkIGxvc3NfY291bnQgJWQiLCBoLT5sb3NzX2NvdW50KTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5oIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmgKaW5kZXggYzdlZWRhNC4uNDYxY2M5MSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmgKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmgKQEAgLTY0LDcgKzY0LDcgQEAKIAl1NjQJCSB0ZnJjaHJ4X3NlcW5vOjQ4LAogCQkJIHRmcmNocnhfY2N2YWw6NCwKIAkJCSB0ZnJjaHJ4X3R5cGU6NDsKLQl1MzIJCSB0ZnJjaHJ4X25kcDsgLyogSW4gZmFjdCBpdCBpcyBmcm9tIDggdG8gMjQgYml0cyAqLworCXU2NAkJIHRmcmNocnhfbmRwOjQ4OwogCWt0aW1lX3QJCSB0ZnJjaHJ4X3RzdGFtcDsKIH07CiAKQEAgLTExOCw0MSArMTE4LDIxIEBACiAJcmV0dXJuIGgtPnJpbmdbaC0+bG9zc19zdGFydF07CiB9CiAKLS8qIGluaXRpYWxpc2UgbG9zcyBkZXRlY3Rpb24gYW5kIGRpc2FibGUgUlRUIHNhbXBsaW5nICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdGZyY19yeF9oaXN0X2xvc3NfaW5kaWNhdGVkKHN0cnVjdCB0ZnJjX3J4X2hpc3QgKmgpCi17Ci0JaC0+bG9zc19jb3VudCA9IDE7Ci19Ci0KIC8qIGluZGljYXRlIHdoZXRoZXIgcHJldmlvdXNseSBhIHBhY2tldCB3YXMgZGV0ZWN0ZWQgbWlzc2luZyAqLwotc3RhdGljIGlubGluZSBpbnQgdGZyY19yeF9oaXN0X2xvc3NfcGVuZGluZyhjb25zdCBzdHJ1Y3QgdGZyY19yeF9oaXN0ICpoKQorc3RhdGljIGlubGluZSBib29sIHRmcmNfcnhfaGlzdF9sb3NzX3BlbmRpbmcoY29uc3Qgc3RydWN0IHRmcmNfcnhfaGlzdCAqaCkKIHsKLQlyZXR1cm4gaC0+bG9zc19jb3VudDsKLX0KLQotLyogYW55IGRhdGEgcGFja2V0cyBtaXNzaW5nIGJldHdlZW4gbGFzdCByZWNlcHRpb24gYW5kIHNrYiA/ICovCi1zdGF0aWMgaW5saW5lIGludCB0ZnJjX3J4X2hpc3RfbmV3X2xvc3NfaW5kaWNhdGVkKHN0cnVjdCB0ZnJjX3J4X2hpc3QgKmgsCi0JCQkJCQkgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQkgIHUzMiBuZHApCi17Ci0JaW50IGRlbHRhID0gZGNjcF9kZWx0YV9zZXFubyh0ZnJjX3J4X2hpc3RfbGFzdF9yY3YoaCktPnRmcmNocnhfc2Vxbm8sCi0JCQkJICAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEpOwotCi0JaWYgKGRlbHRhID4gMSAmJiBuZHAgPCBkZWx0YSkKLQkJdGZyY19yeF9oaXN0X2xvc3NfaW5kaWNhdGVkKGgpOwotCi0JcmV0dXJuIHRmcmNfcnhfaGlzdF9sb3NzX3BlbmRpbmcoaCk7CisJcmV0dXJuIGgtPmxvc3NfY291bnQgPiAwOwogfQogCiBleHRlcm4gdm9pZCB0ZnJjX3J4X2hpc3RfYWRkX3BhY2tldChzdHJ1Y3QgdGZyY19yeF9oaXN0ICpoLAotCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgbmRwKTsKKwkJCQkgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTY0IG5kcCk7CiAKIGV4dGVybiBpbnQgdGZyY19yeF9oaXN0X2R1cGxpY2F0ZShzdHJ1Y3QgdGZyY19yeF9oaXN0ICpoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogc3RydWN0IHRmcmNfbG9zc19oaXN0OwogZXh0ZXJuIGludCAgdGZyY19yeF9oYW5kbGVfbG9zcyhzdHJ1Y3QgdGZyY19yeF9oaXN0ICpoLAogCQkJCXN0cnVjdCB0ZnJjX2xvc3NfaGlzdCAqbGgsCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5kcCwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1NjQgbmRwLAogCQkJCXUzMiAoKmZpcnN0X2xpKShzdHJ1Y3Qgc29jayAqc2spLAogCQkJCXN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gdTMyIHRmcmNfcnhfaGlzdF9zYW1wbGVfcnR0KHN0cnVjdCB0ZnJjX3J4X2hpc3QgKmgsCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9kY2NwLmggYi9uZXQvZGNjcC9kY2NwLmgKaW5kZXggZjQ0ZDQ5Mi4uMzI2MTdlMCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGNjcC5oCisrKyBiL25ldC9kY2NwL2RjY3AuaApAQCAtMTUzLDYgKzE1MywyMSBAQAogCXJldHVybiBhZnRlcjQ4KHNlcTEsIHNlcTIpID8gc2VxMSA6IHNlcTI7CiB9CiAKKy8qKgorICogZGNjcF9sb3NzX2ZyZWUgIC0gIEV2YWx1YXRlcyBjb25kaXRpb24gZm9yIGRhdGEgbG9zcyBmcm9tIFJGQyA0MzQwLCA3LjcuMQorICogQHMxOgkgc3RhcnQgc2VxdWVuY2UgbnVtYmVyCisgKiBAczI6ICBlbmQgc2VxdWVuY2UgbnVtYmVyCisgKiBAbmRwOiBORFAgY291bnQgb24gcGFja2V0IHdpdGggc2VxdWVuY2UgbnVtYmVyIEBzMgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZXF1ZW5jZSByYW5nZSBzMS4uLnMyIGhhcyBubyBkYXRhIGxvc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBkY2NwX2xvc3NfZnJlZShjb25zdCB1NjQgczEsIGNvbnN0IHU2NCBzMiwgY29uc3QgdTY0IG5kcCkKK3sKKwlzNjQgZGVsdGEgPSBkY2NwX2RlbHRhX3NlcW5vKHMxLCBzMik7CisKKwlCVUdfVFJBUChkZWx0YSA+PSAwKTsKKwlyZXR1cm4gKHU2NClkZWx0YSA8PSBuZHAgKyAxOworfQorCiBlbnVtIHsKIAlEQ0NQX01JQl9OVU0gPSAwLAogCURDQ1BfTUlCX0FDVElWRU9QRU5TLAkJCS8qIEFjdGl2ZU9wZW5zICovCkBAIC0yNjIsNyArMjc3LDcgQEAKIAkJCQljb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoLCBjb25zdCB1bnNpZ25lZCBsZW4pOwogCiBleHRlcm4gaW50IGRjY3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaywgY29uc3QgX191OCBjdGxfc29ja19pbml0aWFsaXplZCk7Ci1leHRlcm4gaW50IGRjY3BfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gdm9pZCBkY2NwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOwogCiBleHRlcm4gdm9pZAkJZGNjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYJKmRjY3BfbWFrZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY0LmMgYi9uZXQvZGNjcC9pcHY0LmMKaW5kZXggMzdkMjdiYy4uMjYyMmFjZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2NC5jCisrKyBiL25ldC9kY2NwL2lwdjQuYwpAQCAtMjA1LDE3ICsyMDUsMTggQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJX191NjQgc2VxOwogCWludCBlcnI7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAlpZiAoc2tiLT5sZW4gPCAoaXBoLT5paGwgPDwgMikgKyA4KSB7Ci0JCUlDTVBfSU5DX1NUQVRTX0JIKElDTVBfTUlCX0lORVJST1JTKTsKKwkJSUNNUF9JTkNfU1RBVFNfQkgobmV0LCBJQ01QX01JQl9JTkVSUk9SUyk7CiAJCXJldHVybjsKIAl9CiAKLQlzayA9IGluZXRfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCAmZGNjcF9oYXNoaW5mbywKKwlzayA9IGluZXRfbG9va3VwKG5ldCwgJmRjY3BfaGFzaGluZm8sCiAJCQlpcGgtPmRhZGRyLCBkaC0+ZGNjcGhfZHBvcnQsCiAJCQlpcGgtPnNhZGRyLCBkaC0+ZGNjcGhfc3BvcnQsIGluZXRfaWlmKHNrYikpOwogCWlmIChzayA9PSBOVUxMKSB7Ci0JCUlDTVBfSU5DX1NUQVRTX0JIKElDTVBfTUlCX0lORVJST1JTKTsKKwkJSUNNUF9JTkNfU1RBVFNfQkgobmV0LCBJQ01QX01JQl9JTkVSUk9SUyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyOSw3ICsyMzAsNyBAQAogCSAqIHNlcnZlcnMgdGhpcyBuZWVkcyB0byBiZSBzb2x2ZWQgZGlmZmVyZW50bHkuCiAJICovCiAJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpCi0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0xPQ0tEUk9QUEVESUNNUFMpOworCQlORVRfSU5DX1NUQVRTX0JIKG5ldCwgTElOVVhfTUlCX0xPQ0tEUk9QUEVESUNNUFMpOwogCiAJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX0NMT1NFRCkKIAkJZ290byBvdXQ7CkBAIC0yMzgsNyArMjM5LDcgQEAKIAlzZXEgPSBkY2NwX2hkcl9zZXEoZGgpOwogCWlmICgoMSA8PCBzay0+c2tfc3RhdGUpICYgfihEQ0NQRl9SRVFVRVNUSU5HIHwgRENDUEZfTElTVEVOKSAmJgogCSAgICAhYmV0d2VlbjQ4KHNlcSwgZHAtPmRjY3BzX3N3bCwgZHAtPmRjY3BzX3N3aCkpIHsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfT1VUT0ZXSU5ET1dJQ01QUyk7CisJCU5FVF9JTkNfU1RBVFNfQkgobmV0LCBMSU5VWF9NSUJfT1VUT0ZXSU5ET1dJQ01QUyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjg1LDcgKzI4Niw3IEBACiAJCUJVR19UUkFQKCFyZXEtPnNrKTsKIAogCQlpZiAoc2VxICE9IGRjY3BfcnNrKHJlcSktPmRyZXFfaXNzKSB7Ci0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9PVVRPRldJTkRPV0lDTVBTKTsKKwkJCU5FVF9JTkNfU1RBVFNfQkgobmV0LCBMSU5VWF9NSUJfT1VUT0ZXSU5ET1dJQ01QUyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCQkvKgpAQCAtNDA4LDkgKzQwOSw5IEBACiAJcmV0dXJuIG5ld3NrOwogCiBleGl0X292ZXJmbG93OgotCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0xJU1RFTk9WRVJGTE9XUyk7CisJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9MSVNURU5PVkVSRkxPV1MpOwogZXhpdDoKLQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9MSVNURU5EUk9QUyk7CisJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9MSVNURU5EUk9QUyk7CiAJZHN0X3JlbGVhc2UoZHN0KTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTQ2NCw3ICs0NjUsNyBAQAogCiAJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCAmZmwpOwogCWlmIChpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsICZydCwgJmZsLCBzaywgMCkpIHsKLQkJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKKwkJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCBmN2ZlMmE1Li5iNzRlOGIyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC05Myw4ICs5Myw5IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCWludCBlcnI7CiAJX191NjQgc2VxOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCi0Jc2sgPSBpbmV0Nl9sb29rdXAoZGV2X25ldChza2ItPmRldiksICZkY2NwX2hhc2hpbmZvLAorCXNrID0gaW5ldDZfbG9va3VwKG5ldCwgJmRjY3BfaGFzaGluZm8sCiAJCQkmaGRyLT5kYWRkciwgZGgtPmRjY3BoX2Rwb3J0LAogCQkJJmhkci0+c2FkZHIsIGRoLT5kY2NwaF9zcG9ydCwgaW5ldDZfaWlmKHNrYikpOwogCkBAIC0xMTAsNyArMTExLDcgQEAKIAogCWJoX2xvY2tfc29jayhzayk7CiAJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpCi0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0xPQ0tEUk9QUEVESUNNUFMpOworCQlORVRfSU5DX1NUQVRTX0JIKG5ldCwgTElOVVhfTUlCX0xPQ0tEUk9QUEVESUNNUFMpOwogCiAJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX0NMT1NFRCkKIAkJZ290byBvdXQ7CkBAIC0xODgsNyArMTg5LDcgQEAKIAkJQlVHX1RSQVAocmVxLT5zayA9PSBOVUxMKTsKIAogCQlpZiAoc2VxICE9IGRjY3BfcnNrKHJlcSktPmRyZXFfaXNzKSB7Ci0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9PVVRPRldJTkRPV0lDTVBTKTsKKwkJCU5FVF9JTkNfU1RBVFNfQkgobmV0LCBMSU5VWF9NSUJfT1VUT0ZXSU5ET1dJQ01QUyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC02MjksOSArNjMwLDkgQEAKIAlyZXR1cm4gbmV3c2s7CiAKIG91dF9vdmVyZmxvdzoKLQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9MSVNURU5PVkVSRkxPV1MpOworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfTElTVEVOT1ZFUkZMT1dTKTsKIG91dDoKLQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9MSVNURU5EUk9QUyk7CisJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9MSVNURU5EUk9QUyk7CiAJaWYgKG9wdCAhPSBOVUxMICYmIG9wdCAhPSBucC0+b3B0KQogCQlzb2NrX2tmcmVlX3Moc2ssIG9wdCwgb3B0LT50b3RfbGVuKTsKIAlkc3RfcmVsZWFzZShkc3QpOwpAQCAtMTA5MSwxMCArMTA5MiwxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZGNjcF92Nl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgZGNjcF92Nl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKQogewogCWRjY3BfZGVzdHJveV9zb2NrKHNrKTsKLQlyZXR1cm4gaW5ldDZfZGVzdHJveV9zb2NrKHNrKTsKKwlpbmV0Nl9kZXN0cm95X3NvY2soc2spOwogfQogCiBzdGF0aWMgc3RydWN0IHRpbWV3YWl0X3NvY2tfb3BzIGRjY3A2X3RpbWV3YWl0X3NvY2tfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3B0aW9ucy5jIGIvbmV0L2RjY3Avb3B0aW9ucy5jCmluZGV4IDQzYmMyNGUuLmRjN2MxNTggMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL29wdGlvbnMuYworKysgYi9uZXQvZGNjcC9vcHRpb25zLmMKQEAgLTEyNCwxMiArMTI0LDEyIEBACiAJCQkJbWFuZGF0b3J5ID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIERDQ1BPX05EUF9DT1VOVDoKLQkJCWlmIChsZW4gPiAzKQorCQkJaWYgKGxlbiA+IDYpCiAJCQkJZ290byBvdXRfaW52YWxpZF9vcHRpb247CiAKIAkJCW9wdF9yZWN2LT5kY2Nwb3JfbmRwID0gZGNjcF9kZWNvZGVfdmFsdWVfdmFyKHZhbHVlLCBsZW4pOwotCQkJZGNjcF9wcl9kZWJ1ZygiJXMgcnggb3B0OiBORFAgY291bnQ9JWRcbiIsIGRjY3Bfcm9sZShzayksCi0JCQkJICAgICAgb3B0X3JlY3YtPmRjY3Bvcl9uZHApOworCQkJZGNjcF9wcl9kZWJ1ZygiJXMgb3B0OiBORFAgY291bnQ9JWxsdVxuIiwgZGNjcF9yb2xlKHNrKSwKKwkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9wdF9yZWN2LT5kY2Nwb3JfbmRwKTsKIAkJCWJyZWFrOwogCQljYXNlIERDQ1BPX0NIQU5HRV9MOgogCQkJLyogZmFsbCB0aHJvdWdoICovCkBAIC0zMDcsOSArMzA3LDExIEBACiAJCSp0bysrID0gKHZhbHVlICYgMHhGRik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRjY3BfbmRwX2xlbihjb25zdCBpbnQgbmRwKQorc3RhdGljIGlubGluZSB1OCBkY2NwX25kcF9sZW4oY29uc3QgdTY0IG5kcCkKIHsKLQlyZXR1cm4gbGlrZWx5KG5kcCA8PSAweEZGKSA/IDEgOiBuZHAgPD0gMHhGRkZGID8gMiA6IDM7CisJaWYgKGxpa2VseShuZHAgPD0gMHhGRikpCisJCXJldHVybiAxOworCXJldHVybiBsaWtlbHkobmRwIDw9IFVTSE9SVF9NQVgpID8gMiA6IChuZHAgPD0gVUlOVF9NQVggPyA0IDogNik7CiB9CiAKIGludCBkY2NwX2luc2VydF9vcHRpb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMzM2LDcgKzMzOCw3IEBACiBzdGF0aWMgaW50IGRjY3BfaW5zZXJ0X29wdGlvbl9uZHAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JaW50IG5kcCA9IGRwLT5kY2Nwc19uZHBfY291bnQ7CisJdTY0IG5kcCA9IGRwLT5kY2Nwc19uZHBfY291bnQ7CiAKIAlpZiAoZGNjcF9ub25fZGF0YV9wYWNrZXQoc2tiKSkKIAkJKytkcC0+ZGNjcHNfbmRwX2NvdW50OwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggOWRmZTI0Ny4uYTBiNTYwMCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9pbml0X3NvY2spOwogCi1pbnQgZGNjcF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKQordm9pZCBkY2NwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayA9IGRjY3BfbXNrKHNrKTsKQEAgLTI2OCw4ICsyNjgsNiBAQAogCiAJLyogY2xlYW4gdXAgZmVhdHVyZSBuZWdvdGlhdGlvbiBzdGF0ZSAqLwogCWRjY3BfZmVhdF9jbGVhbihkbXNrKTsKLQotCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2Rlc3Ryb3lfc29jayk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC90aW1lci5jIGIvbmV0L2RjY3AvdGltZXIuYwppbmRleCA4NzAzYTc5Li4zNjA4ZDUzIDEwMDY0NAotLS0gYS9uZXQvZGNjcC90aW1lci5jCisrKyBiL25ldC9kY2NwL3RpbWVyLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCWlmIChzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CiAJCS8qIFRyeSBhZ2FpbiBsYXRlci4gKi8KIAkJaWNzay0+aWNza19hY2suYmxvY2tlZCA9IDE7Ci0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0RFTEFZRURBQ0tMT0NLRUQpOworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX0RFTEFZRURBQ0tMT0NLRUQpOwogCQlza19yZXNldF90aW1lcihzaywgJmljc2stPmljc2tfZGVsYWNrX3RpbWVyLAogCQkJICAgICAgIGppZmZpZXMgKyBUQ1BfREVMQUNLX01JTik7CiAJCWdvdG8gb3V0OwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJCQlpY3NrLT5pY3NrX2Fjay5hdG8gPSBUQ1BfQVRPX01JTjsKIAkJfQogCQlkY2NwX3NlbmRfYWNrKHNrKTsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfREVMQVlFREFDS1MpOworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX0RFTEFZRURBQ0tTKTsKIAl9CiBvdXQ6CiAJYmhfdW5sb2NrX3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKaW5kZXggZmMyZWZlOC4uM2MyM2FiMyAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCkBAIC00NTEsNyArNDUxLDcgQEAKIAogc3RhdGljIGludCBkbl9tZW1vcnlfcHJlc3N1cmU7CiAKLXN0YXRpYyB2b2lkIGRuX2VudGVyX21lbW9yeV9wcmVzc3VyZSh2b2lkKQorc3RhdGljIHZvaWQgZG5fZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZiAoIWRuX21lbW9yeV9wcmVzc3VyZSkgewogCQlkbl9tZW1vcnlfcHJlc3N1cmUgPSAxOwpAQCAtMTcxOSw2ICsxNzE5LDggQEAKIAkgKiBTZWUgaWYgdGhlcmUgaXMgZGF0YSByZWFkeSB0byByZWFkLCBzbGVlcCBpZiB0aGVyZSBpc24ndAogCSAqLwogCWZvcig7OykgeworCQlERUZJTkVfV0FJVCh3YWl0KTsKKwogCQlpZiAoc2stPnNrX2VycikKIAkJCWdvdG8gb3V0OwogCkBAIC0xNzQ4LDE0ICsxNzUwLDExIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXNldF9iaXQoU09DS19BU1lOQ19XQUlUREFUQSwgJnNvY2stPmZsYWdzKTsKLQkJU09DS19TTEVFUF9QUkUoc2spCi0KLQkJaWYgKCFkbl9kYXRhX3JlYWR5KHNrLCBxdWV1ZSwgZmxhZ3MsIHRhcmdldCkpCi0JCQlzY2hlZHVsZSgpOwotCi0JCVNPQ0tfU0xFRVBfUE9TVChzaykKLQkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzb2NrLT5mbGFncyk7CisJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzZXRfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCXNrX3dhaXRfZXZlbnQoc2ssICZ0aW1lbywgZG5fZGF0YV9yZWFkeShzaywgcXVldWUsIGZsYWdzLCB0YXJnZXQpKTsKKwkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCWZpbmlzaF93YWl0KHNrLT5za19zbGVlcCwgJndhaXQpOwogCX0KIAogCWZvcihza2IgPSBxdWV1ZS0+bmV4dDsgc2tiICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKXF1ZXVlOyBza2IgPSBuc2tiKSB7CkBAIC0yMDAyLDE4ICsyMDAxLDE5IEBACiAJCSAqIHNpemUuCiAJCSAqLwogCQlpZiAoZG5fcXVldWVfdG9vX2xvbmcoc2NwLCBxdWV1ZSwgZmxhZ3MpKSB7CisJCQlERUZJTkVfV0FJVCh3YWl0KTsKKwogCQkJaWYgKGZsYWdzICYgTVNHX0RPTlRXQUlUKSB7CiAJCQkJZXJyID0gLUVXT1VMREJMT0NLOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCi0JCQlTT0NLX1NMRUVQX1BSRShzaykKLQotCQkJaWYgKGRuX3F1ZXVlX3Rvb19sb25nKHNjcCwgcXVldWUsIGZsYWdzKSkKLQkJCQlzY2hlZHVsZSgpOwotCi0JCQlTT0NLX1NMRUVQX1BPU1Qoc2spCi0KKwkJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJc2V0X2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCQkJc2tfd2FpdF9ldmVudChzaywgJnRpbWVvLAorCQkJCSAgICAgICFkbl9xdWV1ZV90b29fbG9uZyhzY3AsIHF1ZXVlLCBmbGFncykpOworCQkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCQlmaW5pc2hfd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIwODksNyArMjA4OSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJc3dpdGNoKGV2ZW50KSB7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggZjUwZTg4Yi4uODIxYmQxYyAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtNTgwLDcgKzU4MCw3IEBACiAJc3RydWN0IGRuX2RldiAqZG4gPSAoc3RydWN0IGRuX2RldiAqKWRldi0+ZG5fcHRyOwogCXVuc2lnbmVkIGNoYXIgcGFkbGVuID0gMDsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJZ290byBkdW1wX2l0OwogCiAJaWYgKGRuID09IE5VTEwpCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3J1bGVzLmMgYi9uZXQvZGVjbmV0L2RuX3J1bGVzLmMKaW5kZXggNWI3NTM5Yi4uMTRmYmNhNSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9ydWxlcy5jCisrKyBiL25ldC9kZWNuZXQvZG5fcnVsZXMuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRuX2ZpYl9ydWxlX2ZsdXNoX2NhY2hlKHZvaWQpCitzdGF0aWMgdm9pZCBkbl9maWJfcnVsZV9mbHVzaF9jYWNoZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKQogewogCWRuX3J0X2NhY2hlX2ZsdXNoKC0xKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCmluZGV4IDdjOWJiMTMuLjg3ODlkMmIgMTAwNjQ0Ci0tLSBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKKysrIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwpAQCAtNTczLDkgKzU3Myw3IEBACiAKIAlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsJLyogSXQgaXMgdXNlbGVzcy4gSnVzdCBmb3Igc2FuaXR5LiAqLwogCi0Jc29jay0+c2sgPSBOVUxMOwotCXNrLT5za19zb2NrZXQgPSBOVUxMOwotCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CisJc29ja19vcnBoYW4oc2spOwogCiAJLyogUHVyZ2UgcXVldWVzICovCiAKQEAgLTEwNjQsNyArMTA2Miw3IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBlY19kZXZpY2UgKmVkZXYgPSBkZXYtPmVjX3B0cjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJZ290byBkcm9wOwogCiAJaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX09USEVSSE9TVCkKQEAgLTExMjEsNyArMTExOSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CiAJc3RydWN0IGVjX2RldmljZSAqZWRldjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJc3dpdGNoIChtc2cpIHsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IDIwMGVlMWUuLjY5ZGJjMzQgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAKIAkJd3N0YXRzLnVwZGF0ZWQgPSAwOwogCQlpZiAocnhfc3RhdHMtPm1hc2sgJiBJRUVFODAyMTFfU1RBVE1BU0tfUlNTSSkgewotCQkJd3N0YXRzLmxldmVsID0gcnhfc3RhdHMtPnJzc2k7CisJCQl3c3RhdHMubGV2ZWwgPSByeF9zdGF0cy0+c2lnbmFsOwogCQkJd3N0YXRzLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOwogCQl9IGVsc2UKIAkJCXdzdGF0cy51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCmluZGV4IGQ4YjAyNjAuLmQ5OTY1NDcgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtNTQyLDkwICs1NDIsNCBAQAogCXJldHVybiAxOwogfQogCi0vKiBJbmNvbWluZyA4MDIuMTEgc3RydWN1cmUgaXMgY29udmVydGVkIHRvIGEgVFhCCi0gKiBhIGJsb2NrIG9mIDgwMi4xMSBmcmFnbWVudCBwYWNrZXRzIChzdG9yZWQgYXMgc2ticykgKi8KLWludCBpZWVlODAyMTFfdHhfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZnJhbWUsIGludCBoZHJfbGVuLCBpbnQgdG90YWxfbGVuLAotCQkgICAgICAgaW50IGVuY3J5cHRfbXBkdSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZpZWVlLT5zdGF0czsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWc7Ci0JaW50IHByaW9yaXR5ID0gLTE7Ci0JaW50IGZyYWdsZW4gPSB0b3RhbF9sZW47Ci0JaW50IGhlYWRyb29tID0gaWVlZS0+dHhfaGVhZHJvb207Ci0Jc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCA9IGllZWUtPmNyeXB0W2llZWUtPnR4X2tleWlkeF07Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGVuY3J5cHRfbXBkdSAmJiAoIWllZWUtPnNlYy5lbmNyeXB0IHx8ICFjcnlwdCkpCi0JCWVuY3J5cHRfbXBkdSA9IDA7Ci0KLQkvKiBJZiB0aGVyZSBpcyBubyBkcml2ZXIgaGFuZGxlciB0byB0YWtlIHRoZSBUWEIsIGRvbnQnIGJvdGhlcgotCSAqIGNyZWF0aW5nIGl0Li4uICovCi0JaWYgKCFpZWVlLT5oYXJkX3N0YXJ0X3htaXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHhtaXQgaGFuZGxlci5cbiIsIGllZWUtPmRldi0+bmFtZSk7Ci0JCWdvdG8gc3VjY2VzczsKLQl9Ci0KLQlpZiAodW5saWtlbHkodG90YWxfbGVuIDwgMjQpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBza2IgdG9vIHNtYWxsICglZCkuXG4iLAotCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCB0b3RhbF9sZW4pOwotCQlnb3RvIHN1Y2Nlc3M7Ci0JfQotCi0JaWYgKGVuY3J5cHRfbXBkdSkgewotCQlmcmFtZS0+ZnJhbWVfY3RsIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7Ci0JCWZyYWdsZW4gKz0gY3J5cHQtPm9wcy0+ZXh0cmFfbXBkdV9wcmVmaXhfbGVuICsKLQkJCSAgIGNyeXB0LT5vcHMtPmV4dHJhX21wZHVfcG9zdGZpeF9sZW47Ci0JCWhlYWRyb29tICs9IGNyeXB0LT5vcHMtPmV4dHJhX21wZHVfcHJlZml4X2xlbjsKLQl9Ci0KLQkvKiBXaGVuIHdlIGFsbG9jYXRlIHRoZSBUWEIgd2UgYWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgcmVzZXJ2ZQotCSAqIGFuZCBmdWxsIGZyYWdtZW50IGJ5dGVzIChieXRlc19wZXJfZnJhZyBkb2Vzbid0IGluY2x1ZGUgcHJlZml4LAotCSAqIHBvc3RmaXgsIGhlYWRlciwgRkNTLCBldGMuKSAqLwotCXR4YiA9IGllZWU4MDIxMV9hbGxvY190eGIoMSwgZnJhZ2xlbiwgaGVhZHJvb20sIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghdHhiKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IGFsbG9jYXRlIFRYQlxuIiwKLQkJICAgICAgIGllZWUtPmRldi0+bmFtZSk7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQl0eGItPmVuY3J5cHRlZCA9IDA7Ci0JdHhiLT5wYXlsb2FkX3NpemUgPSBmcmFnbGVuOwotCi0Jc2tiX2ZyYWcgPSB0eGItPmZyYWdtZW50c1swXTsKLQotCW1lbWNweShza2JfcHV0KHNrYl9mcmFnLCB0b3RhbF9sZW4pLCBmcmFtZSwgdG90YWxfbGVuKTsKLQotCWlmIChpZWVlLT5jb25maWcgJgotCSAgICAoQ0ZHX0lFRUU4MDIxMV9DT01QVVRFX0ZDUyB8IENGR19JRUVFODAyMTFfUkVTRVJWRV9GQ1MpKQotCQlza2JfcHV0KHNrYl9mcmFnLCA0KTsKLQotCS8qIFRvIGF2b2lkIG92ZXJjb21wbGljYXRpbmcgdGhpbmdzLCB3ZSBkbyB0aGUgY29ybmVyLWNhc2UgZnJhbWUKLQkgKiBlbmNyeXB0aW9uIGluIHNvZnR3YXJlLiBUaGUgb25seSByZWFsIHNpdHVhdGlvbiB3aGVyZSBlbmNyeXB0aW9uIGlzCi0JICogbmVlZGVkIGhlcmUgaXMgZHVyaW5nIHNvZnR3YXJlLWJhc2VkIHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24uICovCi0JaWYgKGVuY3J5cHRfbXBkdSkKLQkJaWVlZTgwMjExX2VuY3J5cHRfZnJhZ21lbnQoaWVlZSwgc2tiX2ZyYWcsIGhkcl9sZW4pOwotCi0gICAgICBzdWNjZXNzOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKLQotCWlmICh0eGIpIHsKLQkJaWYgKCgqaWVlZS0+aGFyZF9zdGFydF94bWl0KSAodHhiLCBpZWVlLT5kZXYsIHByaW9yaXR5KSA9PSAwKSB7Ci0JCQlzdGF0cy0+dHhfcGFja2V0cysrOwotCQkJc3RhdHMtPnR4X2J5dGVzICs9IHR4Yi0+cGF5bG9hZF9zaXplOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWVlZTgwMjExX3R4Yl9mcmVlKHR4Yik7Ci0JfQotCXJldHVybiAwOwotCi0gICAgICBmYWlsZWQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwotCXN0YXRzLT50eF9lcnJvcnMrKzsKLQlyZXR1cm4gMTsKLX0KLQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhfZnJhbWUpOwogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhiX2ZyZWUpOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggNjIzNDg5YS4uOTczODMyZCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC00Myw4ICs0Myw5IEBACiAKICNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKIHN0YXRpYyBjaGFyICppZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJCSAgIGNoYXIgKnN0YXJ0LCBjaGFyICpzdG9wLAotCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkJICAgICAgY2hhciAqc3RhcnQsIGNoYXIgKnN0b3AsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrLAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8pCiB7CiAJY2hhciBjdXN0b21bTUFYX0NVU1RPTV9MRU5dOwogCWNoYXIgKnA7CkBAIC01Nyw3ICs1OCw3IEBACiAJaXdlLmNtZCA9IFNJT0NHSVdBUDsKIAlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBuZXR3b3JrLT5ic3NpZCwgRVRIX0FMRU4pOwotCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKwlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CiAKIAkvKiBSZW1haW5pbmcgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgcHJvdmlkZSB0aGVtICovCiAKQEAgLTY2LDE3ICs2NywxOSBAQAogCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwogCWlmIChuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfRU1QVFlfRVNTSUQpIHsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBzaXplb2YoIjxoaWRkZW4+Iik7Ci0JCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsICI8aGlkZGVuPiIpOworCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLAorCQkJCQkgICAgICZpd2UsICI8aGlkZGVuPiIpOwogCX0gZWxzZSB7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gbWluKG5ldHdvcmstPnNzaWRfbGVuLCAodTgpIDMyKTsKLQkJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgbmV0d29yay0+c3NpZCk7CisJCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsCisJCQkJCSAgICAgJml3ZSwgbmV0d29yay0+c3NpZCk7CiAJfQogCiAJLyogQWRkIHRoZSBwcm90b2NvbCBuYW1lICovCiAJaXdlLmNtZCA9IFNJT0NHSVdOQU1FOwogCXNucHJpbnRmKGl3ZS51Lm5hbWUsIElGTkFNU0laLCAiSUVFRSA4MDIuMTElcyIsCiAJCSBpZWVlODAyMTFfbW9kZXNbbmV0d29yay0+bW9kZV0pOwotCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX0NIQVJfTEVOKTsKKwlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9DSEFSX0xFTik7CiAKIAkvKiBBZGQgbW9kZSAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKQEAgLTg2LDcgKzg5LDggQEAKIAkJZWxzZQogCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CiAKLQkJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLAorCQkJCQkgICAgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKIAl9CiAKIAkvKiBBZGQgY2hhbm5lbCBhbmQgZnJlcXVlbmN5ICovCkBAIC05NSw3ICs5OSw3IEBACiAJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcShpZWVlLCBuZXR3b3JrLT5jaGFubmVsKTsKIAlpd2UudS5mcmVxLmUgPSA2OwogCWl3ZS51LmZyZXEuaSA9IDA7Ci0Jc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKIAogCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKQEAgLTEwNCwxMiArMTA4LDEzIEBACiAJZWxzZQogCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKLQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBuZXR3b3JrLT5zc2lkKTsKKwlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLAorCQkJCSAgICAgJml3ZSwgbmV0d29yay0+c3NpZCk7CiAKIAkvKiBBZGQgYmFzaWMgYW5kIGV4dGVuZGVkIHJhdGVzICovCiAJLyogUmF0ZSA6IHN0dWZmaW5nIG11bHRpcGxlIHZhbHVlcyBpbiBhIHNpbmdsZSBldmVudCByZXF1aXJlIGEgYml0CiAJICogbW9yZSBvZiBtYWdpYyAtIEplYW4gSUkgKi8KLQljdXJyZW50X3ZhbCA9IHN0YXJ0ICsgSVdfRVZfTENQX0xFTjsKKwljdXJyZW50X3ZhbCA9IHN0YXJ0ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOwogCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKIAkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KIAlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CkBAIC0xMjQsMTcgKzEyOSwxOSBAQAogCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLwogCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChyYXRlICYgMHg3ZikgKiA1MDAwMDApOwogCQkvKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCi0JCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoc3RhcnQsIGN1cnJlbnRfdmFsLCBzdG9wLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOworCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIHN0YXJ0LCBjdXJyZW50X3ZhbCwKKwkJCQkJCSAgIHN0b3AsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CiAJfQogCWZvciAoOyBqIDwgbmV0d29yay0+cmF0ZXNfZXhfbGVuOyBqKyspIHsKIAkJcmF0ZSA9IG5ldHdvcmstPnJhdGVzX2V4W2pdICYgMHg3RjsKIAkJLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KIAkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgocmF0ZSAmIDB4N2YpICogNTAwMDAwKTsKIAkJLyogQWRkIG5ldyB2YWx1ZSB0byBldmVudCAqLwotCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKHN0YXJ0LCBjdXJyZW50X3ZhbCwgc3RvcCwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKKwkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBzdGFydCwgY3VycmVudF92YWwsCisJCQkJCQkgICBzdG9wLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwogCX0KIAkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgcmF0ZSAqLwotCWlmKChjdXJyZW50X3ZhbCAtIHN0YXJ0KSA+IElXX0VWX0xDUF9MRU4pCisJaWYgKChjdXJyZW50X3ZhbCAtIHN0YXJ0KSA+IGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkKIAkJc3RhcnQgPSBjdXJyZW50X3ZhbDsKIAogCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KQEAgLTE4MSwxNCArMTg4LDE0IEBACiAJCWl3ZS51LnF1YWwubGV2ZWwgPSBuZXR3b3JrLT5zdGF0cy5zaWduYWw7CiAJfQogCi0Jc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKIAogCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwogCXAgPSBjdXN0b207CiAKIAlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207CiAJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOworCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwogCiAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAlpZiAobmV0d29yay0+d3BhX2llX2xlbikgewpAQCAtMTk2LDcgKzIwMyw3IEBACiAJCW1lbWNweShidWYsIG5ldHdvcmstPndwYV9pZSwgbmV0d29yay0+d3BhX2llX2xlbik7CiAJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gbmV0d29yay0+d3BhX2llX2xlbjsKLQkJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKKwkJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKIAl9CiAKIAltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwpAQCAtMjA1LDcgKzIxMiw3IEBACiAJCW1lbWNweShidWYsIG5ldHdvcmstPnJzbl9pZSwgbmV0d29yay0+cnNuX2llX2xlbik7CiAJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gbmV0d29yay0+cnNuX2llX2xlbjsKLQkJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKKwkJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKIAl9CiAKIAkvKiBBZGQgRVhUUkE6IEFnZSB0byBkaXNwbGF5IHNlY29uZHMgc2luY2UgbGFzdCBiZWFjb24vcHJvYmUgcmVzcG9uc2UKQEAgLTIxNyw3ICsyMjQsNyBAQAogCQkgICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpKTsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207CiAJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOworCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwogCiAJLyogQWRkIHNwZWN0cnVtIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gKi8KIAlpd2UuY21kID0gLTE7CkBAIC0yMzgsNyArMjQ1LDcgQEAKIAogCWlmIChpd2UuY21kID09IElXRVZDVVNUT00pIHsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBwIC0gY3VzdG9tOwotCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOworCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwogCX0KIAogCXJldHVybiBzdGFydDsKQEAgLTI3Miw3ICsyNzksOCBAQAogCiAJCWlmIChpZWVlLT5zY2FuX2FnZSA9PSAwIHx8CiAJCSAgICB0aW1lX2FmdGVyKG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCArIGllZWUtPnNjYW5fYWdlLCBqaWZmaWVzKSkKLQkJCWV2ID0gaWVlZTgwMjExX3RyYW5zbGF0ZV9zY2FuKGllZWUsIGV2LCBzdG9wLCBuZXR3b3JrKTsKKwkJCWV2ID0gaWVlZTgwMjExX3RyYW5zbGF0ZV9zY2FuKGllZWUsIGV2LCBzdG9wLCBuZXR3b3JrLAorCQkJCQkJICAgICAgaW5mbyk7CiAJCWVsc2UKIAkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJOb3Qgc2hvd2luZyBuZXR3b3JrICclcyAoIgogCQkJCQkgICAgICIlcyknIGR1ZSB0byBhZ2UgKCVkbXMpLlxuIiwKQEAgLTc0NCw5OCArNzUyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGllZWU4MDIxMV93eF9zZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7Ci0KLQlzd2l0Y2ggKHdycXUtPnBhcmFtLmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewotCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6Ci0JY2FzZSBJV19BVVRIX0tFWV9NR01UOgotCQkvKgotCQkgKiBIb3N0IEFQIGRyaXZlciBkb2VzIG5vdCB1c2UgdGhlc2UgcGFyYW1ldGVycyBhbmQgYWxsb3dzCi0JCSAqIHdwYV9zdXBwbGljYW50IHRvIGNvbnRyb2wgdGhlbSBpbnRlcm5hbGx5LgotCQkgKi8KLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgotCQlicmVhazsJCS8qIEZJWE1FICovCi0JY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6Ci0JCWllZWUtPmRyb3BfdW5lbmNyeXB0ZWQgPSAhIXdycXUtPnBhcmFtLnZhbHVlOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWJyZWFrOwkJLyogRklYTUUgKi8KLQljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0JCWllZWUtPnByaXZhY3lfaW52b2tlZCA9IGllZWUtPndwYV9lbmFibGVkID0gISF3cnF1LT5wYXJhbS52YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgotCQlpZWVlLT5pZWVlODAyXzF4ID0gISF3cnF1LT5wYXJhbS52YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLQkJaWVlZS0+cHJpdmFjeV9pbnZva2VkID0gISF3cnF1LT5wYXJhbS52YWx1ZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGllZWU4MDIxMV93eF9nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7Ci0KLQlzd2l0Y2ggKHdycXUtPnBhcmFtLmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewotCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6Ci0JY2FzZSBJV19BVVRIX0tFWV9NR01UOgotCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoJCS8qIEZJWE1FICovCi0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgkJCS8qIEZJWE1FICovCi0JCS8qCi0JCSAqIEhvc3QgQVAgZHJpdmVyIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzIGFuZCBhbGxvd3MKLQkJICogd3BhX3N1cHBsaWNhbnQgdG8gY29udHJvbCB0aGVtIGludGVybmFsbHkuCi0JCSAqLwotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6Ci0JCXdycXUtPnBhcmFtLnZhbHVlID0gaWVlZS0+ZHJvcF91bmVuY3J5cHRlZDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgotCQl3cnF1LT5wYXJhbS52YWx1ZSA9IGllZWUtPndwYV9lbmFibGVkOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6Ci0JCXdycXUtPnBhcmFtLnZhbHVlID0gaWVlZS0+aWVlZTgwMl8xeDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2VuY29kZWV4dCk7CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KTsKIAogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X3NjYW4pOwogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2VuY29kZSk7CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZW5jb2RlKTsKLQotRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX3d4X3NldF9hdXRoKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV93eF9nZXRfYXV0aCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggMjRlY2EyMy4uZGQ5MTlkOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtNSw4ICs1LDYgQEAKICAqCiAgKgkJUEZfSU5FVCBwcm90b2NvbCBmYW1pbHkgc29ja2V0IGhhbmRsZXIuCiAgKgotICogVmVyc2lvbjoJJElkOiBhZl9pbmV0LmMsdiAxLjEzNyAyMDAyLzAyLzAxIDIyOjAxOjAzIGRhdmVtIEV4cCAkCi0gKgogICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJRmxvcmlhbiBMYSBSb2NoZSwgPGZsbGFAc3R1ZC51bmktc2IuZGU+CkBAIC0xMTIsMTIgKzExMCwxMSBAQAogI2luY2x1ZGUgPG5ldC9pcGlwLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2lmZGVmIENPTkZJR19JUF9NUk9VVEUKICNpbmNsdWRlIDxsaW51eC9tcm91dGUuaD4KICNlbmRpZgogCi1ERUZJTkVfU05NUF9TVEFUKHN0cnVjdCBsaW51eF9taWIsIG5ldF9zdGF0aXN0aWNzKSBfX3JlYWRfbW9zdGx5OwotCiBleHRlcm4gdm9pZCBpcF9tY19kcm9wX3NvY2tldChzdHJ1Y3Qgc29jayAqc2spOwogCiAvKiBUaGUgaW5ldHN3IHRhYmxlIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgdGhhdCBpbmV0X2NyZWF0ZSBuZWVkcyB0bwpAQCAtMTM0MSw1MCArMTMzOCw3MCBAQAogCS5uZXRuc19vayA9CTEsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2lwdjRfbWlicyh2b2lkKQorc3RhdGljIF9fbmV0X2luaXQgaW50IGlwdjRfbWliX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXRfc3RhdGlzdGljcywKLQkJCSAgc2l6ZW9mKHN0cnVjdCBsaW51eF9taWIpKSA8IDApCi0JCWdvdG8gZXJyX25ldF9taWI7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopaXBfc3RhdGlzdGljcywKLQkJCSAgc2l6ZW9mKHN0cnVjdCBpcHN0YXRzX21pYikpIDwgMCkKLQkJZ290byBlcnJfaXBfbWliOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKWljbXBfc3RhdGlzdGljcywKLQkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wX21pYikpIDwgMCkKLQkJZ290byBlcnJfaWNtcF9taWI7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopaWNtcG1zZ19zdGF0aXN0aWNzLAotCQkJICBzaXplb2Yoc3RydWN0IGljbXBtc2dfbWliKSkgPCAwKQotCQlnb3RvIGVycl9pY21wbXNnX21pYjsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKil0Y3Bfc3RhdGlzdGljcywKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXQtPm1pYi50Y3Bfc3RhdGlzdGljcywKIAkJCSAgc2l6ZW9mKHN0cnVjdCB0Y3BfbWliKSkgPCAwKQogCQlnb3RvIGVycl90Y3BfbWliOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKXVkcF9zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLmlwX3N0YXRpc3RpY3MsCisJCQkgIHNpemVvZihzdHJ1Y3QgaXBzdGF0c19taWIpKSA8IDApCisJCWdvdG8gZXJyX2lwX21pYjsKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcywKKwkJCSAgc2l6ZW9mKHN0cnVjdCBsaW51eF9taWIpKSA8IDApCisJCWdvdG8gZXJyX25ldF9taWI7CisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MsCiAJCQkgIHNpemVvZihzdHJ1Y3QgdWRwX21pYikpIDwgMCkKIAkJZ290byBlcnJfdWRwX21pYjsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKil1ZHBsaXRlX3N0YXRpc3RpY3MsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IHVkcF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX3VkcGxpdGVfbWliOworCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLmljbXBfc3RhdGlzdGljcywKKwkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wX21pYikpIDwgMCkKKwkJZ290byBlcnJfaWNtcF9taWI7CisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLAorCQkJICBzaXplb2Yoc3RydWN0IGljbXBtc2dfbWliKSkgPCAwKQorCQlnb3RvIGVycl9pY21wbXNnX21pYjsKIAotCXRjcF9taWJfaW5pdCgpOwotCisJdGNwX21pYl9pbml0KG5ldCk7CiAJcmV0dXJuIDA7CiAKLWVycl91ZHBsaXRlX21pYjoKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKXVkcF9zdGF0aXN0aWNzKTsKLWVycl91ZHBfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopdGNwX3N0YXRpc3RpY3MpOwotZXJyX3RjcF9taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKilpY21wbXNnX3N0YXRpc3RpY3MpOwogZXJyX2ljbXBtc2dfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopaWNtcF9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmljbXBfc3RhdGlzdGljcyk7CiBlcnJfaWNtcF9taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKilpcF9zdGF0aXN0aWNzKTsKLWVycl9pcF9taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXRfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRpc3RpY3MpOworZXJyX3VkcGxpdGVfbWliOgorCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MpOworZXJyX3VkcF9taWI6CisJc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcyk7CiBlcnJfbmV0X21pYjoKKwlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmlwX3N0YXRpc3RpY3MpOworZXJyX2lwX21pYjoKKwlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzKTsKK2Vycl90Y3BfbWliOgogCXJldHVybiAtRU5PTUVNOwogfQogCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIGlwdjRfbWliX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmljbXBtc2dfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLnVkcF9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLm5ldF9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmlwX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudGNwX3N0YXRpc3RpY3MpOworfQorCitzdGF0aWMgX19uZXRfaW5pdGRhdGEgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdjRfbWliX29wcyA9IHsKKwkuaW5pdCA9IGlwdjRfbWliX2luaXRfbmV0LAorCS5leGl0ID0gaXB2NF9taWJfZXhpdF9uZXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2lwdjRfbWlicyh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHY0X21pYl9vcHMpOworfQorCiBzdGF0aWMgaW50IGlwdjRfcHJvY19pbml0KHZvaWQpOwogCiAvKgpAQCAtMTQ4MSwxNCArMTQ5OCwxNSBAQAogCSAqCUluaXRpYWxpc2UgdGhlIG11bHRpY2FzdCByb3V0ZXIKIAkgKi8KICNpZiBkZWZpbmVkKENPTkZJR19JUF9NUk9VVEUpCi0JaXBfbXJfaW5pdCgpOworCWlmIChpcF9tcl9pbml0KCkpCisJCXByaW50ayhLRVJOX0NSSVQgImluZXRfaW5pdDogQ2Fubm90IGluaXQgaXB2NCBtcm91dGVcbiIpOwogI2VuZGlmCiAJLyoKIAkgKglJbml0aWFsaXNlIHBlci1jcHUgaXB2NCBtaWJzCiAJICovCiAKIAlpZiAoaW5pdF9pcHY0X21pYnMoKSkKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiaW5ldF9pbml0OiBDYW5ub3QgaW5pdCBpcHY0IG1pYnNcbiIpOyA7CisJCXByaW50ayhLRVJOX0NSSVQgImluZXRfaW5pdDogQ2Fubm90IGluaXQgaXB2NCBtaWJzXG4iKTsKIAogCWlwdjRfcHJvY19pbml0KCk7CiAKQEAgLTE1NjAsNSArMTU3OCw0IEBACiBFWFBPUlRfU1lNQk9MKGluZXRfc3RyZWFtX2Nvbm5lY3QpOwogRVhQT1JUX1NZTUJPTChpbmV0X3N0cmVhbV9vcHMpOwogRVhQT1JUX1NZTUJPTChpbmV0X3VucmVnaXN0ZXJfcHJvdG9zdyk7Ci1FWFBPUlRfU1lNQk9MKG5ldF9zdGF0aXN0aWNzKTsKIEVYUE9SVF9TWU1CT0woc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCA5YjUzOWZhLi5iMDQzZWRhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMSw3ICsxLDUgQEAKIC8qIGxpbnV4L25ldC9pcHY0L2FycC5jCiAgKgotICogVmVyc2lvbjoJJElkOiBhcnAuYyx2IDEuOTkgMjAwMS8wOC8zMCAyMjo1NTo0MiBkYXZlbSBFeHAgJAotICoKICAqIENvcHlyaWdodCAoQykgMTk5NCBieSBGbG9yaWFuICBMYSBSb2NoZQogICoKICAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIEFkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbCBBUlAgKFJGQyA4MjYpLApAQCAtNDIzLDExICs0MjEsMTIgQEAKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlpbnQgZmxhZyA9IDA7CiAJLyp1bnNpZ25lZCBsb25nIG5vdzsgKi8KKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAKLQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSA8IDApCisJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkgPCAwKQogCQlyZXR1cm4gMTsKIAlpZiAocnQtPnUuZHN0LmRldiAhPSBkZXYpIHsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfQVJQRklMVEVSKTsKKwkJTkVUX0lOQ19TVEFUU19CSChuZXQsIExJTlVYX01JQl9BUlBGSUxURVIpOwogCQlmbGFnID0gMTsKIAl9CiAJaXBfcnRfcHV0KHJ0KTsKQEAgLTExOTksNyArMTE5OCw3IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTkVUREVWX0NIQU5HRUFERFI6CiAJCW5laWdoX2NoYW5nZWFkZHIoJmFycF90YmwsIGRldik7Ci0JCXJ0X2NhY2hlX2ZsdXNoKDApOworCQlydF9jYWNoZV9mbHVzaChkZXZfbmV0KGRldiksIDApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RhdGFncmFtLmMgYi9uZXQvaXB2NC9kYXRhZ3JhbS5jCmluZGV4IDBjMGM3M2YuLjVlNmM1YTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RhdGFncmFtLmMKKysrIGIvbmV0L2lwdjQvZGF0YWdyYW0uYwpAQCAtNTIsNyArNTIsNyBAQAogCQkJICAgICAgIGluZXQtPnNwb3J0LCB1c2luLT5zaW5fcG9ydCwgc2ssIDEpOwogCWlmIChlcnIpIHsKIAkJaWYgKGVyciA9PSAtRU5FVFVOUkVBQ0gpCi0JCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworCQkJSVBfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOwogCQlyZXR1cm4gZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDc5YTdlZjYuLjJlNjY3ZTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTEsOCArMSw2IEBACiAvKgogICoJTkVUMwlJUCBkZXZpY2Ugc3VwcG9ydCByb3V0aW5lcy4KICAqCi0gKglWZXJzaW9uOiAkSWQ6IGRldmluZXQuYyx2IDEuNDQgMjAwMS8xMC8zMSAyMTo1NTo1NCBkYXZlbSBFeHAgJAotICoKICAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTE3MCw2ICsxNjgsOCBAQAogCWluX2Rldi0+ZGV2ID0gZGV2OwogCWlmICgoaW5fZGV2LT5hcnBfcGFybXMgPSBuZWlnaF9wYXJtc19hbGxvYyhkZXYsICZhcnBfdGJsKSkgPT0gTlVMTCkKIAkJZ290byBvdXRfa2ZyZWU7CisJaWYgKElQVjRfREVWQ09ORihpbl9kZXYtPmNuZiwgRk9SV0FSRElORykpCisJCWRldl9kaXNhYmxlX2xybyhkZXYpOwogCS8qIFJlZmVyZW5jZSBpbl9kZXYtPmRldiAqLwogCWRldl9ob2xkKGRldik7CiAJLyogQWNjb3VudCBmb3IgcmVmZXJlbmNlIGRldi0+aXBfcHRyIChiZWxvdykgKi8KQEAgLTEwMTMsNyArMTAxMyw3IEBACiAJCW1lbWNweShvbGQsIGlmYS0+aWZhX2xhYmVsLCBJRk5BTVNJWik7CiAJCW1lbWNweShpZmEtPmlmYV9sYWJlbCwgZGV2LT5uYW1lLCBJRk5BTVNJWik7CiAJCWlmIChuYW1lZCsrID09IDApCi0JCQljb250aW51ZTsKKwkJCWdvdG8gc2tpcDsKIAkJZG90ID0gc3RyY2hyKG9sZCwgJzonKTsKIAkJaWYgKGRvdCA9PSBOVUxMKSB7CiAJCQlzcHJpbnRmKG9sZCwgIjolZCIsIG5hbWVkKTsKQEAgLTEwMjQsNiArMTAyNCw4IEBACiAJCX0gZWxzZSB7CiAJCQlzdHJjcHkoaWZhLT5pZmFfbGFiZWwgKyAoSUZOQU1TSVogLSBzdHJsZW4oZG90KSAtIDEpLCBkb3QpOwogCQl9Citza2lwOgorCQlydG1zZ19pZmEoUlRNX05FV0FERFIsIGlmYSwgTlVMTCwgMCk7CiAJfQogfQogCkBAIC0xMjQxLDYgKzEyNDMsOCBAQAogCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7CiAJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKKwkJaWYgKG9uKQorCQkJZGV2X2Rpc2FibGVfbHJvKGRldik7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCQlpZiAoaW5fZGV2KQpAQCAtMTI0OCw4ICsxMjUyLDYgQEAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKLQotCXJ0X2NhY2hlX2ZsdXNoKDApOwogfQogCiBzdGF0aWMgaW50IGRldmluZXRfY29uZl9wcm9jKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsCkBAIC0xMzM1LDEwICsxMzM3LDE5IEBACiAJaWYgKHdyaXRlICYmICp2YWxwICE9IHZhbCkgewogCQlzdHJ1Y3QgbmV0ICpuZXQgPSBjdGwtPmV4dHJhMjsKIAotCQlpZiAodmFscCA9PSAmSVBWNF9ERVZDT05GX0FMTChuZXQsIEZPUldBUkRJTkcpKQotCQkJaW5ldF9mb3J3YXJkX2NoYW5nZShuZXQpOwotCQllbHNlIGlmICh2YWxwICE9ICZJUFY0X0RFVkNPTkZfREZMVChuZXQsIEZPUldBUkRJTkcpKQotCQkJcnRfY2FjaGVfZmx1c2goMCk7CisJCWlmICh2YWxwICE9ICZJUFY0X0RFVkNPTkZfREZMVChuZXQsIEZPUldBUkRJTkcpKSB7CisJCQlydG5sX2xvY2soKTsKKwkJCWlmICh2YWxwID09ICZJUFY0X0RFVkNPTkZfQUxMKG5ldCwgRk9SV0FSRElORykpIHsKKwkJCQlpbmV0X2ZvcndhcmRfY2hhbmdlKG5ldCk7CisJCQl9IGVsc2UgaWYgKCp2YWxwKSB7CisJCQkJc3RydWN0IGlwdjRfZGV2Y29uZiAqY25mID0gY3RsLT5leHRyYTE7CisJCQkJc3RydWN0IGluX2RldmljZSAqaWRldiA9CisJCQkJCWNvbnRhaW5lcl9vZihjbmYsIHN0cnVjdCBpbl9kZXZpY2UsIGNuZik7CisJCQkJZGV2X2Rpc2FibGVfbHJvKGlkZXYtPmRldik7CisJCQl9CisJCQlydG5sX3VubG9jaygpOworCQkJcnRfY2FjaGVfZmx1c2gobmV0LCAwKTsKKwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMzUxLDkgKzEzNjIsMTAgQEAKIAlpbnQgKnZhbHAgPSBjdGwtPmRhdGE7CiAJaW50IHZhbCA9ICp2YWxwOwogCWludCByZXQgPSBwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJc3RydWN0IG5ldCAqbmV0ID0gY3RsLT5leHRyYTI7CiAKIAlpZiAod3JpdGUgJiYgKnZhbHAgIT0gdmFsKQotCQlydF9jYWNoZV9mbHVzaCgwKTsKKwkJcnRfY2FjaGVfZmx1c2gobmV0LCAwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMzY0LDkgKzEzNzYsMTAgQEAKIHsKIAlpbnQgcmV0ID0gZGV2aW5ldF9jb25mX3N5c2N0bCh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLAogCQkJCSAgICAgIG5ld3ZhbCwgbmV3bGVuKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSB0YWJsZS0+ZXh0cmEyOwogCiAJaWYgKHJldCA9PSAxKQotCQlydF9jYWNoZV9mbHVzaCgwKTsKKwkJcnRfY2FjaGVfZmx1c2gobmV0LCAwKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IDBiMmFjNmEuLjY1YzE1MDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC01LDggKzUsNiBAQAogICoKICAqCQlJUHY0IEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZTogRklCIGZyb250ZW5kLgogICoKLSAqIFZlcnNpb246CSRJZDogZmliX2Zyb250ZW5kLmMsdiAxLjI2IDIwMDEvMTAvMzEgMjE6NTU6NTQgZGF2ZW0gRXhwICQKLSAqCiAgKiBBdXRob3JzOglBbGV4ZXkgS3V6bmV0c292LCA8a3V6bmV0QG1zMi5pbnIuYWMucnU+CiAgKgogICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE0Niw3ICsxNDQsNyBAQAogCX0KIAogCWlmIChmbHVzaGVkKQotCQlydF9jYWNoZV9mbHVzaCgtMSk7CisJCXJ0X2NhY2hlX2ZsdXNoKG5ldCwgLTEpOwogfQogCiAvKgpAQCAtODk5LDIxICs4OTcsMjIgQEAKIHsKIAlpZiAoZmliX3N5bmNfZG93bl9kZXYoZGV2LCBmb3JjZSkpCiAJCWZpYl9mbHVzaChkZXZfbmV0KGRldikpOwotCXJ0X2NhY2hlX2ZsdXNoKDApOworCXJ0X2NhY2hlX2ZsdXNoKGRldl9uZXQoZGV2KSwgMCk7CiAJYXJwX2lmZG93bihkZXYpOwogfQogCiBzdGF0aWMgaW50IGZpYl9pbmV0YWRkcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSAoc3RydWN0IGluX2lmYWRkciopcHRyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZmEtPmlmYV9kZXYtPmRldjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9VUDoKIAkJZmliX2FkZF9pZmFkZHIoaWZhKTsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRICi0JCWZpYl9zeW5jX3VwKGlmYS0+aWZhX2Rldi0+ZGV2KTsKKwkJZmliX3N5bmNfdXAoZGV2KTsKICNlbmRpZgotCQlydF9jYWNoZV9mbHVzaCgtMSk7CisJCXJ0X2NhY2hlX2ZsdXNoKGRldl9uZXQoZGV2KSwgLTEpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQlmaWJfZGVsX2lmYWRkcihpZmEpOwpAQCAtOTIxLDkgKzkyMCw5IEBACiAJCQkvKiBMYXN0IGFkZHJlc3Mgd2FzIGRlbGV0ZWQgZnJvbSB0aGlzIGludGVyZmFjZS4KIAkJCSAgIERpc2FibGUgSVAuCiAJCQkgKi8KLQkJCWZpYl9kaXNhYmxlX2lwKGlmYS0+aWZhX2Rldi0+ZGV2LCAxKTsKKwkJCWZpYl9kaXNhYmxlX2lwKGRldiwgMSk7CiAJCX0gZWxzZSB7Ci0JCQlydF9jYWNoZV9mbHVzaCgtMSk7CisJCQlydF9jYWNoZV9mbHVzaChkZXZfbmV0KGRldiksIC0xKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC05NTEsMTQgKzk1MCwxNCBAQAogI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEgKIAkJZmliX3N5bmNfdXAoZGV2KTsKICNlbmRpZgotCQlydF9jYWNoZV9mbHVzaCgtMSk7CisJCXJ0X2NhY2hlX2ZsdXNoKGRldl9uZXQoZGV2KSwgLTEpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQlmaWJfZGlzYWJsZV9pcChkZXYsIDApOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9DSEFOR0VNVFU6CiAJY2FzZSBORVRERVZfQ0hBTkdFOgotCQlydF9jYWNoZV9mbHVzaCgwKTsKKwkJcnRfY2FjaGVfZmx1c2goZGV2X25ldChkZXYpLCAwKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfRE9ORTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9oYXNoLmMgYi9uZXQvaXB2NC9maWJfaGFzaC5jCmluZGV4IDJlMmZjMzMuLmM4Y2FjNmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9oYXNoLmMKKysrIGIvbmV0L2lwdjQvZmliX2hhc2guYwpAQCAtNSw4ICs1LDYgQEAKICAqCiAgKgkJSVB2NCBGSUI6IGxvb2t1cCBlbmdpbmUgYW5kIG1haW50ZW5hbmNlIHJvdXRpbmVzLgogICoKLSAqIFZlcnNpb246CSRJZDogZmliX2hhc2guYyx2IDEuMTMgMjAwMS8xMC8zMSAyMTo1NTo1NCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CUFsZXhleSBLdXpuZXRzb3YsIDxrdXpuZXRAbXMyLmluci5hYy5ydT4KICAqCiAgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDc0LDcgKzQ3Miw3IEBACiAKIAkJCWZpYl9yZWxlYXNlX2luZm8oZmlfZHJvcCk7CiAJCQlpZiAoc3RhdGUgJiBGQV9TX0FDQ0VTU0VEKQotCQkJCXJ0X2NhY2hlX2ZsdXNoKC0xKTsKKwkJCQlydF9jYWNoZV9mbHVzaChjZmctPmZjX25saW5mby5ubF9uZXQsIC0xKTsKIAkJCXJ0bXNnX2ZpYihSVE1fTkVXUk9VVEUsIGtleSwgZmEsIGNmZy0+ZmNfZHN0X2xlbiwgdGItPnRiX2lkLAogCQkJCSAgJmNmZy0+ZmNfbmxpbmZvLCBOTE1fRl9SRVBMQUNFKTsKIAkJCXJldHVybiAwOwpAQCAtNTM0LDcgKzUzMiw3IEBACiAKIAlpZiAobmV3X2YpCiAJCWZ6LT5mel9uZW50Kys7Ci0JcnRfY2FjaGVfZmx1c2goLTEpOworCXJ0X2NhY2hlX2ZsdXNoKGNmZy0+ZmNfbmxpbmZvLm5sX25ldCwgLTEpOwogCiAJcnRtc2dfZmliKFJUTV9ORVdST1VURSwga2V5LCBuZXdfZmEsIGNmZy0+ZmNfZHN0X2xlbiwgdGItPnRiX2lkLAogCQkgICZjZmctPmZjX25saW5mbywgMCk7CkBAIC02MTYsNyArNjE0LDcgQEAKIAkJd3JpdGVfdW5sb2NrX2JoKCZmaWJfaGFzaF9sb2NrKTsKIAogCQlpZiAoZmEtPmZhX3N0YXRlICYgRkFfU19BQ0NFU1NFRCkKLQkJCXJ0X2NhY2hlX2ZsdXNoKC0xKTsKKwkJCXJ0X2NhY2hlX2ZsdXNoKGNmZy0+ZmNfbmxpbmZvLm5sX25ldCwgLTEpOwogCQlmbl9mcmVlX2FsaWFzKGZhLCBmKTsKIAkJaWYgKGtpbGxfZm4pIHsKIAkJCWZuX2ZyZWVfbm9kZShmKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9ydWxlcy5jIGIvbmV0L2lwdjQvZmliX3J1bGVzLmMKaW5kZXggMWZiNTY4Ny4uNjA4MGQ3MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3J1bGVzLmMKKysrIGIvbmV0L2lwdjQvZmliX3J1bGVzLmMKQEAgLTI1OCw5ICsyNTgsOSBAQAogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpOyAvKiBmbG93ICovCiB9CiAKLXN0YXRpYyB2b2lkIGZpYjRfcnVsZV9mbHVzaF9jYWNoZSh2b2lkKQorc3RhdGljIHZvaWQgZmliNF9ydWxlX2ZsdXNoX2NhY2hlKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpCiB7Ci0JcnRfY2FjaGVfZmx1c2goLTEpOworCXJ0X2NhY2hlX2ZsdXNoKG9wcy0+ZnJvX25ldCwgLTEpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpYl9ydWxlc19vcHMgZmliNF9ydWxlc19vcHNfdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggMGQ0ZDcyOC4uZGVkMmFlMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtNSw4ICs1LDYgQEAKICAqCiAgKgkJSVB2NCBGb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2U6IHNlbWFudGljcy4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IGZpYl9zZW1hbnRpY3MuYyx2IDEuMTkgMjAwMi8wMS8xMiAwNzo1NDo1NiBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CUFsZXhleSBLdXpuZXRzb3YsIDxrdXpuZXRAbXMyLmluci5hYy5ydT4KICAqCiAgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3RyaWUuYyBiL25ldC9pcHY0L2ZpYl90cmllLmMKaW5kZXggZTE2MDBhZC4uNWNiNzI3OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3RyaWUuYworKysgYi9uZXQvaXB2NC9maWJfdHJpZS5jCkBAIC0yMiw4ICsyMiw2IEBACiAgKiBJUC1hZGRyZXNzIGxvb2t1cCB1c2luZyBMQy10cmllcy4gU3RlZmFuIE5pbHNzb24gYW5kIEd1bm5hciBLYXJsc3NvbgogICogSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsIEp1bmUgMTk5OQogICoKLSAqIFZlcnNpb246CSRJZDogZmliX3RyaWUuYyx2IDEuMyAyMDA1LzA2LzA4IDE0OjIwOjAxIHJvYmVydCBFeHAgJAotICoKICAqCiAgKiBDb2RlIGZyb20gZmliX2hhc2ggaGFzIGJlZW4gcmV1c2VkIHdoaWNoIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgaGVhZGVyOgogICoKQEAgLTEyNzMsNyArMTI3MSw3IEBACiAKIAkJCWZpYl9yZWxlYXNlX2luZm8oZmlfZHJvcCk7CiAJCQlpZiAoc3RhdGUgJiBGQV9TX0FDQ0VTU0VEKQotCQkJCXJ0X2NhY2hlX2ZsdXNoKC0xKTsKKwkJCQlydF9jYWNoZV9mbHVzaChjZmctPmZjX25saW5mby5ubF9uZXQsIC0xKTsKIAkJCXJ0bXNnX2ZpYihSVE1fTkVXUk9VVEUsIGh0b25sKGtleSksIG5ld19mYSwgcGxlbiwKIAkJCQl0Yi0+dGJfaWQsICZjZmctPmZjX25saW5mbywgTkxNX0ZfUkVQTEFDRSk7CiAKQEAgLTEzMTgsNyArMTMxNiw3IEBACiAJbGlzdF9hZGRfdGFpbF9yY3UoJm5ld19mYS0+ZmFfbGlzdCwKIAkJCSAgKGZhID8gJmZhLT5mYV9saXN0IDogZmFfaGVhZCkpOwogCi0JcnRfY2FjaGVfZmx1c2goLTEpOworCXJ0X2NhY2hlX2ZsdXNoKGNmZy0+ZmNfbmxpbmZvLm5sX25ldCwgLTEpOwogCXJ0bXNnX2ZpYihSVE1fTkVXUk9VVEUsIGh0b25sKGtleSksIG5ld19mYSwgcGxlbiwgdGItPnRiX2lkLAogCQkgICZjZmctPmZjX25saW5mbywgMCk7CiBzdWNjZWVkZWQ6CkBAIC0xNjYxLDcgKzE2NTksNyBAQAogCQl0cmllX2xlYWZfcmVtb3ZlKHQsIGwpOwogCiAJaWYgKGZhLT5mYV9zdGF0ZSAmIEZBX1NfQUNDRVNTRUQpCi0JCXJ0X2NhY2hlX2ZsdXNoKC0xKTsKKwkJcnRfY2FjaGVfZmx1c2goY2ZnLT5mY19ubGluZm8ubmxfbmV0LCAtMSk7CiAKIAlmaWJfcmVsZWFzZV9pbmZvKGZhLT5mYV9pbmZvKTsKIAlhbGlhc19mcmVlX21lbV9yY3UoZmEpOwpAQCAtMjI1MywyNSArMjI1MSw3IEBACiAKIHN0YXRpYyBpbnQgZmliX3RyaWVzdGF0X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBlcnI7Ci0Jc3RydWN0IG5ldCAqbmV0OwotCi0JbmV0ID0gZ2V0X3Byb2NfbmV0KGlub2RlKTsKLQlpZiAobmV0ID09IE5VTEwpCi0JCXJldHVybiAtRU5YSU87Ci0JZXJyID0gc2luZ2xlX29wZW4oZmlsZSwgZmliX3RyaWVzdGF0X3NlcV9zaG93LCBuZXQpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXB1dF9uZXQobmV0KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZmliX3RyaWVzdGF0X3NlcV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZikKLXsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGYtPnByaXZhdGVfZGF0YTsKLQlwdXRfbmV0KHNlcS0+cHJpdmF0ZSk7Ci0JcmV0dXJuIHNpbmdsZV9yZWxlYXNlKGlubywgZik7CisJcmV0dXJuIHNpbmdsZV9vcGVuX25ldChpbm9kZSwgZmlsZSwgZmliX3RyaWVzdGF0X3NlcV9zaG93KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmliX3RyaWVzdGF0X2ZvcHMgPSB7CkBAIC0yMjc5LDcgKzIyNTksNyBAQAogCS5vcGVuCT0gZmliX3RyaWVzdGF0X3NlcV9vcGVuLAogCS5yZWFkCT0gc2VxX3JlYWQsCiAJLmxsc2Vlawk9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IGZpYl90cmllc3RhdF9zZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlX25ldCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgbm9kZSAqZmliX3RyaWVfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuYwppbmRleCA4NzM5NzM1Li44NjA1NTg2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC0zLDggKzMsNiBAQAogICoKICAqCQlBbGFuIENveCwgPGFsYW5AcmVkaGF0LmNvbT4KICAqCi0gKglWZXJzaW9uOiAkSWQ6IGljbXAuYyx2IDEuODUgMjAwMi8wMi8wMSAyMjowMTowMyBkYXZlbSBFeHAgJAotICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTExMywxMiArMTExLDYgQEAKIAl1bnNpZ25lZCBjaGFyICBvcHRidWZbNDBdOwogfTsKIAotLyoKLSAqCVN0YXRpc3RpY3MKLSAqLwotREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgaWNtcF9taWIsIGljbXBfc3RhdGlzdGljcykgX19yZWFkX21vc3RseTsKLURFRklORV9TTk1QX1NUQVQoc3RydWN0IGljbXBtc2dfbWliLCBpY21wbXNnX3N0YXRpc3RpY3MpIF9fcmVhZF9tb3N0bHk7Ci0KIC8qIEFuIGFycmF5IG9mIGVycm5vIGZvciBlcnJvciBtZXNzYWdlcyBmcm9tIGRlc3QgdW5yZWFjaC4gKi8KIC8qIFJGQyAxMTIyOiAzLjIuMi4xIFN0YXRlcyB0aGF0IE5FVF9VTlJFQUNILCBIT1NUX1VOUkVBQ0ggYW5kIFNSX0ZBSUxFRCBNVVNUIGJlIGNvbnNpZGVyZWQgJ3RyYW5zaWVudCBlcnJzJy4gKi8KIApAQCAtMjk4LDEwICsyOTAsMTAgQEAKIC8qCiAgKglNYWludGFpbiB0aGUgY291bnRlcnMgdXNlZCBpbiB0aGUgU05NUCBzdGF0aXN0aWNzIGZvciBvdXRnb2luZyBJQ01QCiAgKi8KLXZvaWQgaWNtcF9vdXRfY291bnQodW5zaWduZWQgY2hhciB0eXBlKQordm9pZCBpY21wX291dF9jb3VudChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGNoYXIgdHlwZSkKIHsKLQlJQ01QTVNHT1VUX0lOQ19TVEFUUyh0eXBlKTsKLQlJQ01QX0lOQ19TVEFUUyhJQ01QX01JQl9PVVRNU0dTKTsKKwlJQ01QTVNHT1VUX0lOQ19TVEFUUyhuZXQsIHR5cGUpOworCUlDTVBfSU5DX1NUQVRTKG5ldCwgSUNNUF9NSUJfT1VUTVNHUyk7CiB9CiAKIC8qCkBAIC03NjUsNyArNzU3LDcgQEAKIG91dDoKIAlyZXR1cm47CiBvdXRfZXJyOgotCUlDTVBfSU5DX1NUQVRTX0JIKElDTVBfTUlCX0lORVJST1JTKTsKKwlJQ01QX0lOQ19TVEFUU19CSChuZXQsIElDTVBfTUlCX0lORVJST1JTKTsKIAlnb3RvIG91dDsKIH0KIApAQCAtODA1LDcgKzc5Nyw3IEBACiBvdXQ6CiAJcmV0dXJuOwogb3V0X2VycjoKLQlJQ01QX0lOQ19TVEFUU19CSChJQ01QX01JQl9JTkVSUk9SUyk7CisJSUNNUF9JTkNfU1RBVFNfQkgoZGV2X25ldChza2ItPmRldiksIElDTVBfTUlCX0lORVJST1JTKTsKIAlnb3RvIG91dDsKIH0KIApAQCAtODc2LDcgKzg2OCw3IEBACiBvdXQ6CiAJcmV0dXJuOwogb3V0X2VycjoKLQlJQ01QX0lOQ19TVEFUU19CSChJQ01QX01JQl9JTkVSUk9SUyk7CisJSUNNUF9JTkNfU1RBVFNfQkgoZGV2X25ldChza2ItPmRzdC0+ZGV2KSwgSUNNUF9NSUJfSU5FUlJPUlMpOwogCWdvdG8gb3V0OwogfQogCkBAIC05NzUsNiArOTY3LDcgQEAKIHsKIAlzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHJ0LT51LmRzdC5kZXYpOwogCiAJaWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHsKIAkJaW50IG5oOwpAQCAtOTk1LDcgKzk4OCw3IEBACiAJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBuaCk7CiAJfQogCi0JSUNNUF9JTkNfU1RBVFNfQkgoSUNNUF9NSUJfSU5NU0dTKTsKKwlJQ01QX0lOQ19TVEFUU19CSChuZXQsIElDTVBfTUlCX0lOTVNHUyk7CiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKQEAgLTEwMTMsNyArMTAwNiw3IEBACiAKIAlpY21waCA9IGljbXBfaGRyKHNrYik7CiAKLQlJQ01QTVNHSU5fSU5DX1NUQVRTX0JIKGljbXBoLT50eXBlKTsKKwlJQ01QTVNHSU5fSU5DX1NUQVRTX0JIKG5ldCwgaWNtcGgtPnR5cGUpOwogCS8qCiAJICoJMTggaXMgdGhlIGhpZ2hlc3QgJ2tub3duJyBJQ01QIHR5cGUuIEFueXRoaW5nIGVsc2UgaXMgYSBteXN0ZXJ5CiAJICoKQEAgLTEwMjksOSArMTAyMiw2IEBACiAJICovCiAKIAlpZiAocnQtPnJ0X2ZsYWdzICYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKSB7Ci0JCXN0cnVjdCBuZXQgKm5ldDsKLQotCQluZXQgPSBkZXZfbmV0KHJ0LT51LmRzdC5kZXYpOwogCQkvKgogCQkgKglSRkMgMTEyMjogMy4yLjIuNiBBbiBJQ01QX0VDSE8gdG8gYnJvYWRjYXN0IE1BWSBiZQogCQkgKgkgIHNpbGVudGx5IGlnbm9yZWQgKHdlIGxldCB1c2VyIGRlY2lkZSB3aXRoIGEgc3lzY3RsKS4KQEAgLTEwNTcsNyArMTA0Nyw3IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiBlcnJvcjoKLQlJQ01QX0lOQ19TVEFUU19CSChJQ01QX01JQl9JTkVSUk9SUyk7CisJSUNNUF9JTkNfU1RBVFNfQkgobmV0LCBJQ01QX01JQl9JTkVSUk9SUyk7CiAJZ290byBkcm9wOwogfQogCkBAIC0xMjE3LDUgKzEyMDcsNCBAQAogCiBFWFBPUlRfU1lNQk9MKGljbXBfZXJyX2NvbnZlcnQpOwogRVhQT1JUX1NZTUJPTChpY21wX3NlbmQpOwotRVhQT1JUX1NZTUJPTChpY21wX3N0YXRpc3RpY3MpOwogRVhQT1JUX1NZTUJPTCh4cmxpbV9hbGxvdyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggMjc2OWRjNC4uNjIwM2VjZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCisrKyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtOCw4ICs4LDYgQEAKICAqCXRoZSBvbGRlciB2ZXJzaW9uIGRpZG4ndCBjb21lIG91dCByaWdodCB1c2luZyBnY2MgMi41LjgsIHRoZSBuZXdlciBvbmUKICAqCXNlZW1zIHRvIGZhbGwgb3V0IHdpdGggZ2NjIDIuNi4yLgogICoKLSAqCVZlcnNpb246ICRJZDogaWdtcC5jLHYgMS40NyAyMDAyLzAyLzAxIDIyOjAxOjAzIGRhdmVtIEV4cCAkCi0gKgogICoJQXV0aG9yczoKICAqCQlBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPgogICoKQEAgLTExOTgsNyArMTE5Niw3IEBACiAKIAlBU1NFUlRfUlROTCgpOwogCi0JaWYgKGRldl9uZXQoaW5fZGV2LT5kZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGluX2Rldi0+ZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuOwogCiAJZm9yIChpbT1pbl9kZXYtPm1jX2xpc3Q7IGltOyBpbT1pbS0+bmV4dCkgewpAQCAtMTI4MCw3ICsxMjc4LDcgQEAKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQlpZiAoZGV2X25ldChpbl9kZXYtPmRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoaW5fZGV2LT5kZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm47CiAKIAlmb3IgKGlwPSZpbl9kZXYtPm1jX2xpc3Q7IChpPSppcCkhPU5VTEw7IGlwPSZpLT5uZXh0KSB7CkBAIC0xMzEwLDcgKzEzMDgsNyBAQAogCiAJQVNTRVJUX1JUTkwoKTsKIAotCWlmIChkZXZfbmV0KGluX2Rldi0+ZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChpbl9kZXYtPmRldiksICZpbml0X25ldCkpCiAJCXJldHVybjsKIAogCWZvciAoaT1pbl9kZXYtPm1jX2xpc3Q7IGk7IGk9aS0+bmV4dCkKQEAgLTEzMzMsNyArMTMzMSw3IEBACiB7CiAJQVNTRVJUX1JUTkwoKTsKIAotCWlmIChkZXZfbmV0KGluX2Rldi0+ZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChpbl9kZXYtPmRldiksICZpbml0X25ldCkpCiAJCXJldHVybjsKIAogCWluX2Rldi0+bWNfdG9tYiA9IE5VTEw7CkBAIC0xMzU5LDcgKzEzNTcsNyBAQAogCiAJQVNTRVJUX1JUTkwoKTsKIAotCWlmIChkZXZfbmV0KGluX2Rldi0+ZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChpbl9kZXYtPmRldiksICZpbml0X25ldCkpCiAJCXJldHVybjsKIAogCWlwX21jX2luY19ncm91cChpbl9kZXYsIElHTVBfQUxMX0hPU1RTKTsKQEAgLTEzNzgsNyArMTM3Niw3IEBACiAKIAlBU1NFUlRfUlROTCgpOwogCi0JaWYgKGRldl9uZXQoaW5fZGV2LT5kZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGluX2Rldi0+ZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuOwogCiAJLyogRGVhY3RpdmF0ZSB0aW1lcnMgKi8KQEAgLTE3NjIsNyArMTc2MCw3IEBACiAJaWYgKCFpcHY0X2lzX211bHRpY2FzdChhZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc29ja19uZXQoc2spICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShzb2NrX25ldChzayksICZpbml0X25ldCkpCiAJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwogCiAJcnRubF9sb2NrKCk7CkBAIC0xODMzLDcgKzE4MzEsNyBAQAogCXUzMiBpZmluZGV4OwogCWludCByZXQgPSAtRUFERFJOT1RBVkFJTDsKIAotCWlmIChzb2NrX25ldChzaykgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAKIAlydG5sX2xvY2soKTsKQEAgLTE4ODEsNyArMTg3OSw3IEBACiAJaWYgKCFpcHY0X2lzX211bHRpY2FzdChhZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc29ja19uZXQoc2spICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShzb2NrX25ldChzayksICZpbml0X25ldCkpCiAJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwogCiAJcnRubF9sb2NrKCk7CkBAIC0yMDE3LDcgKzIwMTUsNyBAQAogCSAgICBtc2YtPmltc2ZfZm1vZGUgIT0gTUNBU1RfRVhDTFVERSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc29ja19uZXQoc2spICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShzb2NrX25ldChzayksICZpbml0X25ldCkpCiAJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwogCiAJcnRubF9sb2NrKCk7CkBAIC0yMTAwLDcgKzIwOTgsNyBAQAogCWlmICghaXB2NF9pc19tdWx0aWNhc3QoYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHNvY2tfbmV0KHNrKSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAogCXJ0bmxfbG9jaygpOwpAQCAtMjE2NSw3ICsyMTYzLDcgQEAKIAlpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGFkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChzb2NrX25ldChzaykgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAKIAlydG5sX2xvY2soKTsKQEAgLTIyNTIsNyArMjI1MCw3IEBACiAJaWYgKGluZXQtPm1jX2xpc3QgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaWYgKHNvY2tfbmV0KHNrKSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCAmaW5pdF9uZXQpKQogCQlyZXR1cm47CiAKIAlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IGVjODM0NDguLmJiODFjOTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwpAQCAtMTAzLDcgKzEwMyw4IEBACiAJCXJvdmVyID0gbmV0X3JhbmRvbSgpICUgcmVtYWluaW5nICsgbG93OwogCiAJCWRvIHsKLQkJCWhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbihyb3ZlciwgaGFzaGluZm8tPmJoYXNoX3NpemUpXTsKKwkJCWhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbihuZXQsIHJvdmVyLAorCQkJCQloYXNoaW5mby0+Ymhhc2hfc2l6ZSldOwogCQkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKIAkJCWluZXRfYmluZF9idWNrZXRfZm9yX2VhY2godGIsIG5vZGUsICZoZWFkLT5jaGFpbikKIAkJCQlpZiAodGItPmliX25ldCA9PSBuZXQgJiYgdGItPnBvcnQgPT0gcm92ZXIpCkBAIC0xMzAsNyArMTMxLDggQEAKIAkJICovCiAJCXNudW0gPSByb3ZlcjsKIAl9IGVsc2UgewotCQloZWFkID0gJmhhc2hpbmZvLT5iaGFzaFtpbmV0X2JoYXNoZm4oc251bSwgaGFzaGluZm8tPmJoYXNoX3NpemUpXTsKKwkJaGVhZCA9ICZoYXNoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKG5ldCwgc251bSwKKwkJCQloYXNoaW5mby0+Ymhhc2hfc2l6ZSldOwogCQlzcGluX2xvY2soJmhlYWQtPmxvY2spOwogCQlpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiLCBub2RlLCAmaGVhZC0+Y2hhaW4pCiAJCQlpZiAodGItPmliX25ldCA9PSBuZXQgJiYgdGItPnBvcnQgPT0gc251bSkKQEAgLTMzNiwxNSArMzM4LDE2IEBACiAJCQkgICAgLnVsaV91ID0geyAucG9ydHMgPQogCQkJCSAgICAgICB7IC5zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydCwKIAkJCQkJIC5kcG9ydCA9IGlyZXEtPnJtdF9wb3J0IH0gfSB9OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKLQlpZiAoaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCAmcnQsICZmbCwgc2ssIDApKSB7Ci0JCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CisJaWYgKGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgJnJ0LCAmZmwsIHNrLCAwKSkgeworCQlJUF9JTkNfU1RBVFNfQkgobmV0LCBJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlpZiAob3B0ICYmIG9wdC0+aXNfc3RyaWN0cm91dGUgJiYgcnQtPnJ0X2RzdCAhPSBydC0+cnRfZ2F0ZXdheSkgewogCQlpcF9ydF9wdXQocnQpOwotCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworCQlJUF9JTkNfU1RBVFNfQkgobmV0LCBJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlyZXR1cm4gJnJ0LT51LmRzdDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggZGE5NzY5NS4uYzEwMDM2ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogaW5ldF9kaWFnLmMJTW9kdWxlIGZvciBtb25pdG9yaW5nIElORVQgdHJhbnNwb3J0IHByb3RvY29scyBzb2NrZXRzLgogICoKLSAqIFZlcnNpb246CSRJZDogaW5ldF9kaWFnLmMsdiAxLjMgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CUFsZXhleSBLdXpuZXRzb3YsIDxrdXpuZXRAbXMyLmluci5hYy5ydT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCmluZGV4IDIwMjNkMzcuLjExNWY1MzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCkBAIC03MCw3ICs3MCw4IEBACiBzdGF0aWMgdm9pZCBfX2luZXRfcHV0X3BvcnQoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbyA9IHNrLT5za19wcm90LT5oLmhhc2hpbmZvOwotCWNvbnN0IGludCBiaGFzaCA9IGluZXRfYmhhc2hmbihpbmV0X3NrKHNrKS0+bnVtLCBoYXNoaW5mby0+Ymhhc2hfc2l6ZSk7CisJY29uc3QgaW50IGJoYXNoID0gaW5ldF9iaGFzaGZuKHNvY2tfbmV0KHNrKSwgaW5ldF9zayhzayktPm51bSwKKwkJCWhhc2hpbmZvLT5iaGFzaF9zaXplKTsKIAlzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2JoYXNoXTsKIAlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7CiAKQEAgLTk1LDcgKzk2LDggQEAKIHZvaWQgX19pbmV0X2luaGVyaXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpjaGlsZCkKIHsKIAlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqdGFibGUgPSBzay0+c2tfcHJvdC0+aC5oYXNoaW5mbzsKLQljb25zdCBpbnQgYmhhc2ggPSBpbmV0X2JoYXNoZm4oaW5ldF9zayhjaGlsZCktPm51bSwgdGFibGUtPmJoYXNoX3NpemUpOworCWNvbnN0IGludCBiaGFzaCA9IGluZXRfYmhhc2hmbihzb2NrX25ldChzayksIGluZXRfc2soY2hpbGQpLT5udW0sCisJCQl0YWJsZS0+Ymhhc2hfc2l6ZSk7CiAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICpoZWFkID0gJnRhYmxlLT5iaGFzaFtiaGFzaF07CiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiOwogCkBAIC0xOTIsNyArMTk0LDcgQEAKIAljb25zdCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAogCXJlYWRfbG9jaygmaGFzaGluZm8tPmxoYXNoX2xvY2spOwotCWhlYWQgPSAmaGFzaGluZm8tPmxpc3RlbmluZ19oYXNoW2luZXRfbGhhc2hmbihobnVtKV07CisJaGVhZCA9ICZoYXNoaW5mby0+bGlzdGVuaW5nX2hhc2hbaW5ldF9saGFzaGZuKG5ldCwgaG51bSldOwogCWlmICghaGxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJY29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soKHNrID0gX19za19oZWFkKGhlYWQpKSk7CiAKQEAgLTIyNSw3ICsyMjcsNyBAQAogCS8qIE9wdGltaXplIGhlcmUgZm9yIGRpcmVjdCBoaXQsIG9ubHkgbGlzdGVuaW5nIGNvbm5lY3Rpb25zIGNhbgogCSAqIGhhdmUgd2lsZGNhcmRzIGFueXdheXMuCiAJICovCi0JdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0X2VoYXNoZm4oZGFkZHIsIGhudW0sIHNhZGRyLCBzcG9ydCk7CisJdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0X2VoYXNoZm4obmV0LCBkYWRkciwgaG51bSwgc2FkZHIsIHNwb3J0KTsKIAlzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQgKmhlYWQgPSBpbmV0X2VoYXNoX2J1Y2tldChoYXNoaW5mbywgaGFzaCk7CiAJcndsb2NrX3QgKmxvY2sgPSBpbmV0X2VoYXNoX2xvY2twKGhhc2hpbmZvLCBoYXNoKTsKIApAQCAtMjY1LDEzICsyNjcsMTMgQEAKIAlpbnQgZGlmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAlJTkVUX0FERFJfQ09PS0lFKGFjb29raWUsIHNhZGRyLCBkYWRkcikKIAljb25zdCBfX3BvcnRwYWlyIHBvcnRzID0gSU5FVF9DT01CSU5FRF9QT1JUUyhpbmV0LT5kcG9ydCwgbHBvcnQpOwotCXVuc2lnbmVkIGludCBoYXNoID0gaW5ldF9laGFzaGZuKGRhZGRyLCBscG9ydCwgc2FkZHIsIGluZXQtPmRwb3J0KTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0X2VoYXNoZm4obmV0LCBkYWRkciwgbHBvcnQsIHNhZGRyLCBpbmV0LT5kcG9ydCk7CiAJc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICpoZWFkID0gaW5ldF9laGFzaF9idWNrZXQoaGluZm8sIGhhc2gpOwogCXJ3bG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoaW5mbywgaGFzaCk7CiAJc3RydWN0IHNvY2sgKnNrMjsKIAljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dzsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7CiAJd3JpdGVfbG9jayhsb2NrKTsKQEAgLTMxMCwxMSArMzEyLDExIEBACiAKIAlpZiAodHdwKSB7CiAJCSp0d3AgPSB0dzsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CisJCU5FVF9JTkNfU1RBVFNfQkgobmV0LCBMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CiAJfSBlbHNlIGlmICh0dykgewogCQkvKiBTaWxseS4gU2hvdWxkIGhhc2gtZGFuY2UgaW5zdGVhZC4uLiAqLwogCQlpbmV0X3R3c2tfZGVzY2hlZHVsZSh0dywgZGVhdGhfcm93KTsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CisJCU5FVF9JTkNfU1RBVFNfQkgobmV0LCBMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CiAKIAkJaW5ldF90d3NrX3B1dCh0dyk7CiAJfQpAQCAtNDM4LDcgKzQ0MCw4IEBACiAJCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAkJZm9yIChpID0gMTsgaSA8PSByZW1haW5pbmc7IGkrKykgewogCQkJcG9ydCA9IGxvdyArIChpICsgb2Zmc2V0KSAlIHJlbWFpbmluZzsKLQkJCWhlYWQgPSAmaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbihwb3J0LCBoaW5mby0+Ymhhc2hfc2l6ZSldOworCQkJaGVhZCA9ICZoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKG5ldCwgcG9ydCwKKwkJCQkJaGluZm8tPmJoYXNoX3NpemUpXTsKIAkJCXNwaW5fbG9jaygmaGVhZC0+bG9jayk7CiAKIAkJCS8qIERvZXMgbm90IGJvdGhlciB3aXRoIHJjdl9zYWRkciBjaGVja3MsCkBAIC00OTMsNyArNDk2LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaGVhZCA9ICZoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKHNudW0sIGhpbmZvLT5iaGFzaF9zaXplKV07CisJaGVhZCA9ICZoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKG5ldCwgc251bSwgaGluZm8tPmJoYXNoX3NpemUpXTsKIAl0YiAgPSBpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoOwogCXNwaW5fbG9ja19iaCgmaGVhZC0+bG9jayk7CiAJaWYgKHNrX2hlYWQoJnRiLT5vd25lcnMpID09IHNrICYmICFzay0+c2tfYmluZF9ub2RlLm5leHQpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jIGIvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMKaW5kZXggY2UxNmU5YS4uNzVjMmRlZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMKKysrIGIvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMKQEAgLTMyLDcgKzMyLDggQEAKIAl3cml0ZV91bmxvY2sobG9jayk7CiAKIAkvKiBEaXNhc3NvY2lhdGUgd2l0aCBiaW5kIGJ1Y2tldC4gKi8KLQliaGVhZCA9ICZoYXNoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKHR3LT50d19udW0sIGhhc2hpbmZvLT5iaGFzaF9zaXplKV07CisJYmhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbih0d3NrX25ldCh0dyksIHR3LT50d19udW0sCisJCQloYXNoaW5mby0+Ymhhc2hfc2l6ZSldOwogCXNwaW5fbG9jaygmYmhlYWQtPmxvY2spOwogCXRiID0gdHctPnR3X3RiOwogCV9faGxpc3RfZGVsKCZ0dy0+dHdfYmluZF9ub2RlKTsKQEAgLTgxLDcgKzgyLDggQEAKIAkgICBOb3RlLCB0aGF0IGFueSBzb2NrZXQgd2l0aCBpbmV0LT5udW0gIT0gMCBNVVNUIGJlIGJvdW5kIGluCiAJICAgYmluZGluZyBjYWNoZSwgZXZlbiBpZiBpdCBpcyBjbG9zZWQuCiAJICovCi0JYmhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbihpbmV0LT5udW0sIGhhc2hpbmZvLT5iaGFzaF9zaXplKV07CisJYmhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbih0d3NrX25ldCh0dyksIGluZXQtPm51bSwKKwkJCWhhc2hpbmZvLT5iaGFzaF9zaXplKV07CiAJc3Bpbl9sb2NrKCZiaGVhZC0+bG9jayk7CiAJdHctPnR3X3RiID0gaWNzay0+aWNza19iaW5kX2hhc2g7CiAJQlVHX1RSQVAoaWNzay0+aWNza19iaW5kX2hhc2gpOwpAQCAtMTU4LDYgKzE2MCw5IEBACiAJCV9faW5ldF90d3NrX2RlbF9kZWFkX25vZGUodHcpOwogCQlzcGluX3VubG9jaygmdHdkci0+ZGVhdGhfbG9jayk7CiAJCV9faW5ldF90d3NrX2tpbGwodHcsIHR3ZHItPmhhc2hpbmZvKTsKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJCU5FVF9JTkNfU1RBVFNfQkgodHdza19uZXQodHcpLCBMSU5VWF9NSUJfVElNRVdBSVRFRCk7CisjZW5kaWYKIAkJaW5ldF90d3NrX3B1dCh0dyk7CiAJCWtpbGxlZCsrOwogCQlzcGluX2xvY2soJnR3ZHItPmRlYXRoX2xvY2spOwpAQCAtMTc2LDggKzE4MSw5IEBACiAJfQogCiAJdHdkci0+dHdfY291bnQgLT0ga2lsbGVkOwotCU5FVF9BRERfU1RBVFNfQkgoTElOVVhfTUlCX1RJTUVXQUlURUQsIGtpbGxlZCk7Ci0KKyNpZm5kZWYgQ09ORklHX05FVF9OUworCU5FVF9BRERfU1RBVFNfQkgoJmluaXRfbmV0LCBMSU5VWF9NSUJfVElNRVdBSVRFRCwga2lsbGVkKTsKKyNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM3MCw2ICszNzYsOSBAQAogCQkJCQkJICAgICAgICZ0d2RyLT50d2NhbF9yb3dbc2xvdF0pIHsKIAkJCQlfX2luZXRfdHdza19kZWxfZGVhZF9ub2RlKHR3KTsKIAkJCQlfX2luZXRfdHdza19raWxsKHR3LCB0d2RyLT5oYXNoaW5mbyk7CisjaWZkZWYgQ09ORklHX05FVF9OUworCQkJCU5FVF9JTkNfU1RBVFNfQkgodHdza19uZXQodHcpLCBMSU5VWF9NSUJfVElNRVdBSVRLSUxMRUQpOworI2VuZGlmCiAJCQkJaW5ldF90d3NrX3B1dCh0dyk7CiAJCQkJa2lsbGVkKys7CiAJCQl9CkBAIC0zOTMsNyArNDAyLDkgQEAKIG91dDoKIAlpZiAoKHR3ZHItPnR3X2NvdW50IC09IGtpbGxlZCkgPT0gMCkKIAkJZGVsX3RpbWVyKCZ0d2RyLT50d190aW1lcik7Ci0JTkVUX0FERF9TVEFUU19CSChMSU5VWF9NSUJfVElNRVdBSVRLSUxMRUQsIGtpbGxlZCk7CisjaWZuZGVmIENPTkZJR19ORVRfTlMKKwlORVRfQUREX1NUQVRTX0JIKCZpbml0X25ldCwgTElOVVhfTUlCX1RJTUVXQUlUS0lMTEVELCBraWxsZWQpOworI2VuZGlmCiAJc3Bpbl91bmxvY2soJnR3ZHItPmRlYXRoX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwppbmRleCBhZjk5NTE5Li5hNDU2Y2VlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0cGVlci5jCisrKyBiL25ldC9pcHY0L2luZXRwZWVyLmMKQEAgLTMsOCArMyw2IEBACiAgKgogICogIFRoaXMgc291cmNlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHUEwsIHRoZSBzYW1lIGFzIGFsbCBrZXJuZWwgc291cmNlcy4KICAqCi0gKiAgVmVyc2lvbjoJJElkOiBpbmV0cGVlci5jLHYgMS43IDIwMDEvMDkvMjAgMjE6MjI6NTAgZGF2ZW0gRXhwICQKLSAqCiAgKiAgQXV0aG9yczoJQW5kcmV5IFYuIFNhdm9jaGtpbiA8c2F3QG1zdS5ydT4KICAqLwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggNDgxM2MzOS4uNDUwMDE2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwpAQCAtNSw4ICs1LDYgQEAKICAqCiAgKgkJVGhlIElQIGZvcndhcmRpbmcgZnVuY3Rpb25hbGl0eS4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IGlwX2ZvcndhcmQuYyx2IDEuNDggMjAwMC8xMi8xMyAxODozMTo0OCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CXNlZSBpcC5jCiAgKgogICogRml4ZXM6CkBAIC00NCw3ICs0Miw3IEBACiB7CiAJc3RydWN0IGlwX29wdGlvbnMgKiBvcHQJPSAmKElQQ0Ioc2tiKS0+b3B0KTsKIAotCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9PVVRGT1JXREFUQUdSQU1TKTsKKwlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChza2ItPmRzdC0+ZGV2KSwgSVBTVEFUU19NSUJfT1VURk9SV0RBVEFHUkFNUyk7CiAKIAlpZiAodW5saWtlbHkob3B0LT5vcHRsZW4pKQogCQlpcF9mb3J3YXJkX29wdGlvbnMoc2tiKTsKQEAgLTU4LDYgKzU2LDkgQEAKIAlzdHJ1Y3QgcnRhYmxlICpydDsJLyogUm91dGUgd2UgdXNlICovCiAJc3RydWN0IGlwX29wdGlvbnMgKiBvcHQJPSAmKElQQ0Ioc2tiKS0+b3B0KTsKIAorCWlmIChza2Jfd2Fybl9pZl9scm8oc2tiKSkKKwkJZ290byBkcm9wOworCiAJaWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfRldELCBza2IpKQogCQlnb3RvIGRyb3A7CiAKQEAgLTg3LDcgKzg4LDcgQEAKIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA+IGRzdF9tdHUoJnJ0LT51LmRzdCkgJiYgIXNrYl9pc19nc28oc2tiKSAmJgogCQkgICAgIChpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERikpKSAmJiAhc2tiLT5sb2NhbF9kZikgewotCQlJUF9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTsKKwkJSVBfSU5DX1NUQVRTKGRldl9uZXQocnQtPnUuZHN0LmRldiksIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CiAJCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELAogCQkJICBodG9ubChkc3RfbXR1KCZydC0+dS5kc3QpKSk7CiAJCWdvdG8gZHJvcDsKQEAgLTEyMiw3ICsxMjMsNyBAQAogCiB0b29fbWFueV9ob3BzOgogCS8qIFRlbGwgdGhlIHNlbmRlciBpdHMgcGFja2V0IGRpZWQuLi4gKi8KLQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOworCUlQX0lOQ19TVEFUU19CSChkZXZfbmV0KHNrYi0+ZHN0LT5kZXYpLCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJaWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApOwogZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDM3MjIxZjYuLjM4ZDM4ZjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtNSw4ICs1LDYgQEAKICAqCiAgKgkJVGhlIElQIGZyYWdtZW50YXRpb24gZnVuY3Rpb25hbGl0eS4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IGlwX2ZyYWdtZW50LmMsdiAxLjU5IDIwMDIvMDEvMTIgMDc6NTQ6NTYgZGF2ZW0gRXhwICQKLSAqCiAgKiBBdXRob3JzOglGcmVkIE4uIHZhbiBLZW1wZW4gPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+CiAgKgpAQCAtMTgwLDcgKzE3OCw3IEBACiAKIAlldmljdGVkID0gaW5ldF9mcmFnX2V2aWN0b3IoJm5ldC0+aXB2NC5mcmFncywgJmlwNF9mcmFncyk7CiAJaWYgKGV2aWN0ZWQpCi0JCUlQX0FERF9TVEFUU19CSChJUFNUQVRTX01JQl9SRUFTTUZBSUxTLCBldmljdGVkKTsKKwkJSVBfQUREX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfUkVBU01GQUlMUywgZXZpY3RlZCk7CiB9CiAKIC8qCkBAIC0xODksOCArMTg3LDEwIEBACiBzdGF0aWMgdm9pZCBpcF9leHBpcmUodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGlwcSAqcXA7CisJc3RydWN0IG5ldCAqbmV0OwogCiAJcXAgPSBjb250YWluZXJfb2YoKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKikgYXJnLCBzdHJ1Y3QgaXBxLCBxKTsKKwluZXQgPSBjb250YWluZXJfb2YocXAtPnEubmV0LCBzdHJ1Y3QgbmV0LCBpcHY0LmZyYWdzKTsKIAogCXNwaW5fbG9jaygmcXAtPnEubG9jayk7CiAKQEAgLTE5OSwxNCArMTk5LDEyIEBACiAKIAlpcHFfa2lsbChxcCk7CiAKLQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01USU1FT1VUKTsKLQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CisJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfUkVBU01USU1FT1VUKTsKKwlJUF9JTkNfU1RBVFNfQkgobmV0LCBJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTsKIAogCWlmICgocXAtPnEubGFzdF9pbiAmIElORVRfRlJBR19GSVJTVF9JTikgJiYgcXAtPnEuZnJhZ21lbnRzICE9IE5VTEwpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKmhlYWQgPSBxcC0+cS5mcmFnbWVudHM7Ci0JCXN0cnVjdCBuZXQgKm5ldDsKIAotCQluZXQgPSBjb250YWluZXJfb2YocXAtPnEubmV0LCBzdHJ1Y3QgbmV0LCBpcHY0LmZyYWdzKTsKIAkJLyogU2VuZCBhbiBJQ01QICJGcmFnbWVudCBSZWFzc2VtYmx5IFRpbWVvdXQiIG1lc3NhZ2UuICovCiAJCWlmICgoaGVhZC0+ZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIHFwLT5paWYpKSAhPSBOVUxMKSB7CiAJCQlpY21wX3NlbmQoaGVhZCwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19GUkFHVElNRSwgMCk7CkBAIC0yNjMsNyArMjYxLDEwIEBACiAJcmMgPSBxcC0+cS5mcmFnbWVudHMgJiYgKGVuZCAtIHN0YXJ0KSA+IG1heDsKIAogCWlmIChyYykgewotCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CisJCXN0cnVjdCBuZXQgKm5ldDsKKworCQluZXQgPSBjb250YWluZXJfb2YocXAtPnEubmV0LCBzdHJ1Y3QgbmV0LCBpcHY0LmZyYWdzKTsKKwkJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CiAJfQogCiAJcmV0dXJuIHJjOwpAQCAtNTQ3LDcgKzU0OCw3IEBACiAJaXBoID0gaXBfaGRyKGhlYWQpOwogCWlwaC0+ZnJhZ19vZmYgPSAwOwogCWlwaC0+dG90X2xlbiA9IGh0b25zKGxlbik7Ci0JSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX1JFQVNNT0tTKTsKKwlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9SRUFTTU9LUyk7CiAJcXAtPnEuZnJhZ21lbnRzID0gTlVMTDsKIAlyZXR1cm4gMDsKIApAQCAtNTYyLDcgKzU2Myw3IEBACiAJCQkiT3ZlcnNpemVkIElQIHBhY2tldCBmcm9tICIgTklQUVVBRF9GTVQgIi5cbiIsCiAJCQlOSVBRVUFEKHFwLT5zYWRkcikpOwogb3V0X2ZhaWw6Ci0JSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOworCUlQX0lOQ19TVEFUU19CSChkZXZfbmV0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTU3Miw5ICs1NzMsOSBAQAogCXN0cnVjdCBpcHEgKnFwOwogCXN0cnVjdCBuZXQgKm5ldDsKIAotCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9SRUFTTVJFUURTKTsKLQogCW5ldCA9IHNrYi0+ZGV2ID8gZGV2X25ldChza2ItPmRldikgOiBkZXZfbmV0KHNrYi0+ZHN0LT5kZXYpOworCUlQX0lOQ19TVEFUU19CSChuZXQsIElQU1RBVFNfTUlCX1JFQVNNUkVRRFMpOworCiAJLyogU3RhcnQgYnkgY2xlYW5pbmcgdXAgdGhlIG1lbW9yeS4gKi8KIAlpZiAoYXRvbWljX3JlYWQoJm5ldC0+aXB2NC5mcmFncy5tZW0pID4gbmV0LT5pcHY0LmZyYWdzLmhpZ2hfdGhyZXNoKQogCQlpcF9ldmljdG9yKG5ldCk7CkBAIC01OTIsNyArNTkzLDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CisJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC02MDAsNyArNjAxLDcgQEAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiBzdGF0aWMgaW50IHplcm87CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwNF9mcmFnc19jdGxfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwNF9mcmFnc19uc19jdGxfdGFibGVbXSA9IHsKIAl7CiAJCS5jdGxfbmFtZQk9IE5FVF9JUFY0X0lQRlJBR19ISUdIX1RIUkVTSCwKIAkJLnByb2NuYW1lCT0gImlwZnJhZ19oaWdoX3RocmVzaCIsCkBAIC02MjYsNiArNjI3LDEwIEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ppZmZpZXMKIAl9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXA0X2ZyYWdzX2N0bF90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfSVBGUkFHX1NFQ1JFVF9JTlRFUlZBTCwKIAkJLnByb2NuYW1lCT0gImlwZnJhZ19zZWNyZXRfaW50ZXJ2YWwiLApAQCAtNjQ2LDIyICs2NTEsMjAgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBpbnQgaXA0X2ZyYWdzX2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IGlwNF9mcmFnc19uc19jdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7CiAKLQl0YWJsZSA9IGlwNF9mcmFnc19jdGxfdGFibGU7CisJdGFibGUgPSBpcDRfZnJhZ3NfbnNfY3RsX3RhYmxlOwogCWlmIChuZXQgIT0gJmluaXRfbmV0KSB7Ci0JCXRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKGlwNF9mcmFnc19jdGxfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwkJdGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoaXA0X2ZyYWdzX25zX2N0bF90YWJsZSksIEdGUF9LRVJORUwpOwogCQlpZiAodGFibGUgPT0gTlVMTCkKIAkJCWdvdG8gZXJyX2FsbG9jOwogCiAJCXRhYmxlWzBdLmRhdGEgPSAmbmV0LT5pcHY0LmZyYWdzLmhpZ2hfdGhyZXNoOwogCQl0YWJsZVsxXS5kYXRhID0gJm5ldC0+aXB2NC5mcmFncy5sb3dfdGhyZXNoOwogCQl0YWJsZVsyXS5kYXRhID0gJm5ldC0+aXB2NC5mcmFncy50aW1lb3V0OwotCQl0YWJsZVszXS5tb2RlICY9IH4wMjIyOwotCQl0YWJsZVs0XS5tb2RlICY9IH4wMjIyOwogCX0KIAogCWhkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LCBuZXRfaXB2NF9jdGxfcGF0aCwgdGFibGUpOwpAQCAtNjc4LDcgKzY4MSw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIGlwNF9mcmFnc19jdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBpcDRfZnJhZ3NfbnNfY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCkBAIC02ODYsMTMgKzY4OSwyMiBAQAogCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQtPmlwdjQuZnJhZ3NfaGRyKTsKIAlrZnJlZSh0YWJsZSk7CiB9CisKK3N0YXRpYyB2b2lkIGlwNF9mcmFnc19jdGxfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZWdpc3Rlcl9uZXRfc3lzY3RsX3JvdGFibGUobmV0X2lwdjRfY3RsX3BhdGgsIGlwNF9mcmFnc19jdGxfdGFibGUpOworfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGlwNF9mcmFnc19jdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGlubGluZSBpbnQgaXA0X2ZyYWdzX25zX2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcDRfZnJhZ3NfY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGlubGluZSB2b2lkIGlwNF9mcmFnc19uc19jdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcDRfZnJhZ3NfY3RsX3JlZ2lzdGVyKHZvaWQpCiB7CiB9CiAjZW5kaWYKQEAgLTcxNiwxMiArNzI4LDEyIEBACiAKIAlpbmV0X2ZyYWdzX2luaXRfbmV0KCZuZXQtPmlwdjQuZnJhZ3MpOwogCi0JcmV0dXJuIGlwNF9mcmFnc19jdGxfcmVnaXN0ZXIobmV0KTsKKwlyZXR1cm4gaXA0X2ZyYWdzX25zX2N0bF9yZWdpc3RlcihuZXQpOwogfQogCiBzdGF0aWMgdm9pZCBpcHY0X2ZyYWdzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpcDRfZnJhZ3NfY3RsX3VucmVnaXN0ZXIobmV0KTsKKwlpcDRfZnJhZ3NfbnNfY3RsX3VucmVnaXN0ZXIobmV0KTsKIAlpbmV0X2ZyYWdzX2V4aXRfbmV0KCZuZXQtPmlwdjQuZnJhZ3MsICZpcDRfZnJhZ3MpOwogfQogCkBAIC03MzIsNiArNzQ0LDcgQEAKIAogdm9pZCBfX2luaXQgaXBmcmFnX2luaXQodm9pZCkKIHsKKwlpcDRfZnJhZ3NfY3RsX3JlZ2lzdGVyKCk7CiAJcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA0X2ZyYWdzX29wcyk7CiAJaXA0X2ZyYWdzLmhhc2hmbiA9IGlwNF9oYXNoZm47CiAJaXA0X2ZyYWdzLmNvbnN0cnVjdG9yID0gaXA0X2ZyYWdfaW5pdDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggNDM0MmNiYS4uMmE2MTE1OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTQ3Myw2ICs0NzMsOCBAQAogCXJlYWRfbG9jaygmaXBncmVfbG9jayk7CiAJaWYgKCh0dW5uZWwgPSBpcGdyZV90dW5uZWxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLAogCQkJCQlpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCBrZXkpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPmRldi0+c3RhdHM7CisKIAkJc2VjcGF0aF9yZXNldChza2IpOwogCiAJCXNrYi0+cHJvdG9jb2wgPSAqKF9fYmUxNiopKGggKyAyKTsKQEAgLTQ5NywyOCArNDk5LDI4IEBACiAJCQkvKiBMb29wZWQgYmFjayBwYWNrZXQsIGRyb3AgaXQhICovCiAJCQlpZiAoc2tiLT5ydGFibGUtPmZsLmlpZiA9PSAwKQogCQkJCWdvdG8gZHJvcDsKLQkJCXR1bm5lbC0+c3RhdC5tdWx0aWNhc3QrKzsKKwkJCXN0YXRzLT5tdWx0aWNhc3QrKzsKIAkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfQlJPQURDQVNUOwogCQl9CiAjZW5kaWYKIAogCQlpZiAoKChmbGFncyZHUkVfQ1NVTSkgJiYgY3N1bSkgfHwKIAkJICAgICghKGZsYWdzJkdSRV9DU1VNKSAmJiB0dW5uZWwtPnBhcm1zLmlfZmxhZ3MmR1JFX0NTVU0pKSB7Ci0JCQl0dW5uZWwtPnN0YXQucnhfY3JjX2Vycm9ycysrOwotCQkJdHVubmVsLT5zdGF0LnJ4X2Vycm9ycysrOworCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCQlpZiAodHVubmVsLT5wYXJtcy5pX2ZsYWdzJkdSRV9TRVEpIHsKIAkJCWlmICghKGZsYWdzJkdSRV9TRVEpIHx8CiAJCQkgICAgKHR1bm5lbC0+aV9zZXFubyAmJiAoczMyKShzZXFubyAtIHR1bm5lbC0+aV9zZXFubykgPCAwKSkgewotCQkJCXR1bm5lbC0+c3RhdC5yeF9maWZvX2Vycm9ycysrOwotCQkJCXR1bm5lbC0+c3RhdC5yeF9lcnJvcnMrKzsKKwkJCQlzdGF0cy0+cnhfZmlmb19lcnJvcnMrKzsKKwkJCQlzdGF0cy0+cnhfZXJyb3JzKys7CiAJCQkJZ290byBkcm9wOwogCQkJfQogCQkJdHVubmVsLT5pX3NlcW5vID0gc2Vxbm8gKyAxOwogCQl9Ci0JCXR1bm5lbC0+c3RhdC5yeF9wYWNrZXRzKys7Ci0JCXR1bm5lbC0+c3RhdC5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwkJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQlza2ItPmRldiA9IHR1bm5lbC0+ZGV2OwogCQlkc3RfcmVsZWFzZShza2ItPmRzdCk7CiAJCXNrYi0+ZHN0ID0gTlVMTDsKQEAgLTU0MCw3ICs1NDIsNyBAQAogc3RhdGljIGludCBpcGdyZV90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnR1bm5lbC0+c3RhdDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdHVubmVsLT5kZXYtPnN0YXRzOwogCXN0cnVjdCBpcGhkciAgKm9sZF9pcGggPSBpcF9oZHIoc2tiKTsKIAlzdHJ1Y3QgaXBoZHIgICp0aXBoOwogCXU4ICAgICB0b3M7CkBAIC01NTQsNyArNTU2LDcgQEAKIAlpbnQgICAgbXR1OwogCiAJaWYgKHR1bm5lbC0+cmVjdXJzaW9uKyspIHsKLQkJdHVubmVsLT5zdGF0LmNvbGxpc2lvbnMrKzsKKwkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKIAkJZ290byB0eF9lcnJvcjsKIAl9CiAKQEAgLTU3MCw3ICs1NzIsNyBAQAogCQkvKiBOQk1BIHR1bm5lbCAqLwogCiAJCWlmIChza2ItPmRzdCA9PSBOVUxMKSB7Ci0JCQl0dW5uZWwtPnN0YXQudHhfZmlmb19lcnJvcnMrKzsKKwkJCXN0YXRzLT50eF9maWZvX2Vycm9ycysrOwogCQkJZ290byB0eF9lcnJvcjsKIAkJfQogCkBAIC02MjEsNyArNjIzLDcgQEAKIAkJCQkJCS50b3MgPSBSVF9UT1ModG9zKSB9IH0sCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fR1JFIH07CiAJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoZGV2KSwgJnJ0LCAmZmwpKSB7Ci0JCQl0dW5uZWwtPnN0YXQudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJZ290byB0eF9lcnJvcjsKIAkJfQogCX0KQEAgLTYyOSw3ICs2MzEsNyBAQAogCiAJaWYgKHRkZXYgPT0gZGV2KSB7CiAJCWlwX3J0X3B1dChydCk7Ci0JCXR1bm5lbC0+c3RhdC5jb2xsaXNpb25zKys7CisJCXN0YXRzLT5jb2xsaXNpb25zKys7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC05NTQsMTEgKzk1Niw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppcGdyZV90dW5uZWxfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICYoKChzdHJ1Y3QgaXBfdHVubmVsKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdCk7Ci19Ci0KIHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEwODQsNyArMTA4MSw2IEBACiAJZGV2LT51bmluaXQJCT0gaXBncmVfdHVubmVsX3VuaW5pdDsKIAlkZXYtPmRlc3RydWN0b3IgCT0gZnJlZV9uZXRkZXY7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBpcGdyZV90dW5uZWxfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSBpcGdyZV90dW5uZWxfZ2V0X3N0YXRzOwogCWRldi0+ZG9faW9jdGwJCT0gaXBncmVfdHVubmVsX2lvY3RsOwogCWRldi0+Y2hhbmdlX210dQkJPSBpcGdyZV90dW5uZWxfY2hhbmdlX210dTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfaW5wdXQuYyBiL25ldC9pcHY0L2lwX2lucHV0LmMKaW5kZXggZmY3N2E0YS4uZTBiZWQ1NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfaW5wdXQuYworKysgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCkBAIC01LDggKzUsNiBAQAogICoKICAqCQlUaGUgSW50ZXJuZXQgUHJvdG9jb2wgKElQKSBtb2R1bGUuCiAgKgotICogVmVyc2lvbjoJJElkOiBpcF9pbnB1dC5jLHYgMS41NSAyMDAyLzAxLzEyIDA3OjM5OjQ1IGRhdmVtIEV4cCAkCi0gKgogICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJRG9uYWxkIEJlY2tlciwgPGJlY2tlckBzdXBlci5vcmc+CkBAIC0xNDcsMTIgKzE0NSw2IEBACiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogCiAvKgotICoJU05NUCBtYW5hZ2VtZW50IHN0YXRpc3RpY3MKLSAqLwotCi1ERUZJTkVfU05NUF9TVEFUKHN0cnVjdCBpcHN0YXRzX21pYiwgaXBfc3RhdGlzdGljcykgX19yZWFkX21vc3RseTsKLQotLyoKICAqCVByb2Nlc3MgUm91dGVyIEF0dGVudGlvbiBJUCBvcHRpb24KICAqLwogaW50IGlwX2NhbGxfcmFfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTIzMiwxNiArMjI0LDE2IEBACiAJCQkJcHJvdG9jb2wgPSAtcmV0OwogCQkJCWdvdG8gcmVzdWJtaXQ7CiAJCQl9Ci0JCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5ERUxJVkVSUyk7CisJCQlJUF9JTkNfU1RBVFNfQkgobmV0LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTsKIAkJfSBlbHNlIHsKIAkJCWlmICghcmF3KSB7CiAJCQkJaWYgKHhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkgewotCQkJCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5VTktOT1dOUFJPVE9TKTsKKwkJCQkJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfSU5VTktOT1dOUFJPVE9TKTsKIAkJCQkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsCiAJCQkJCQkgIElDTVBfUFJPVF9VTlJFQUNILCAwKTsKIAkJCQl9CiAJCQl9IGVsc2UKLQkJCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5ERUxJVkVSUyk7CisJCQkJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfSU5ERUxJVkVSUyk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfQogCX0KQEAgLTI4Myw3ICsyNzUsNyBAQAogCQkJCQkgICAgICAtLUFOSyAoOTgwODEzKQogCSovCiAJaWYgKHNrYl9jb3coc2tiLCBza2JfaGVhZHJvb20oc2tiKSkpIHsKLQkJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lORElTQ0FSRFMpOworCQlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTsKIAkJZ290byBkcm9wOwogCX0KIApAQCAtMjkyLDcgKzI4NCw3IEBACiAJb3B0LT5vcHRsZW4gPSBpcGgtPmlobCo0IC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiAKIAlpZiAoaXBfb3B0aW9uc19jb21waWxlKGRldl9uZXQoZGV2KSwgb3B0LCBza2IpKSB7Ci0JCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJCUlQX0lOQ19TVEFUU19CSChkZXZfbmV0KGRldiksIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJZ290byBkcm9wOwogCX0KIApAQCAtMzM2LDkgKzMyOCwxMSBAQAogCQkJCQkgc2tiLT5kZXYpOwogCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJaWYgKGVyciA9PSAtRUhPU1RVTlJFQUNIKQotCQkJCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpOworCQkJCUlQX0lOQ19TVEFUU19CSChkZXZfbmV0KHNrYi0+ZGV2KSwKKwkJCQkJCUlQU1RBVFNfTUlCX0lOQUREUkVSUk9SUyk7CiAJCQllbHNlIGlmIChlcnIgPT0gLUVORVRVTlJFQUNIKQotCQkJCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTk5PUk9VVEVTKTsKKwkJCQlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChza2ItPmRldiksCisJCQkJCQlJUFNUQVRTX01JQl9JTk5PUk9VVEVTKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCX0KQEAgLTM1OSw5ICszNTMsOSBAQAogCiAJcnQgPSBza2ItPnJ0YWJsZTsKIAlpZiAocnQtPnJ0X3R5cGUgPT0gUlROX01VTFRJQ0FTVCkKLQkJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOTUNBU1RQS1RTKTsKKwkJSVBfSU5DX1NUQVRTX0JIKGRldl9uZXQocnQtPnUuZHN0LmRldiksIElQU1RBVFNfTUlCX0lOTUNBU1RQS1RTKTsKIAllbHNlIGlmIChydC0+cnRfdHlwZSA9PSBSVE5fQlJPQURDQVNUKQotCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5CQ0FTVFBLVFMpOworCQlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChydC0+dS5kc3QuZGV2KSwgSVBTVEFUU19NSUJfSU5CQ0FTVFBLVFMpOwogCiAJcmV0dXJuIGRzdF9pbnB1dChza2IpOwogCkBAIC0zODQsMTAgKzM3OCwxMCBAQAogCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QpCiAJCWdvdG8gZHJvcDsKIAotCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTlJFQ0VJVkVTKTsKKwlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9JTlJFQ0VJVkVTKTsKIAogCWlmICgoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKLQkJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lORElTQ0FSRFMpOworCQlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00MjAsNyArNDE0LDcgQEAKIAogCWxlbiA9IG50b2hzKGlwaC0+dG90X2xlbik7CiAJaWYgKHNrYi0+bGVuIDwgbGVuKSB7Ci0JCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTlRSVU5DQVRFRFBLVFMpOworCQlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9JTlRSVU5DQVRFRFBLVFMpOwogCQlnb3RvIGRyb3A7CiAJfSBlbHNlIGlmIChsZW4gPCAoaXBoLT5paGwqNCkpCiAJCWdvdG8gaW5oZHJfZXJyb3I7CkBAIC00MzAsNyArNDI0LDcgQEAKIAkgKiBOb3RlIHRoaXMgbm93IG1lYW5zIHNrYi0+bGVuIGhvbGRzIG50b2hzKGlwaC0+dG90X2xlbikuCiAJICovCiAJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIGxlbikpIHsKLQkJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lORElTQ0FSRFMpOworCQlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTsKIAkJZ290byBkcm9wOwogCX0KIApAQCAtNDQxLDExICs0MzUsOSBAQAogCQkgICAgICAgaXBfcmN2X2ZpbmlzaCk7CiAKIGluaGRyX2Vycm9yOgotCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJSVBfSU5DX1NUQVRTX0JIKGRldl9uZXQoZGV2KSwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIG91dDoKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9Ci0KLUVYUE9SVF9TWU1CT0woaXBfc3RhdGlzdGljcyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggMzMxMjZhZC4uYmUzZjE4YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtNSw4ICs1LDYgQEAKICAqCiAgKgkJVGhlIG9wdGlvbnMgcHJvY2Vzc2luZyBtb2R1bGUgZm9yIGlwLmMKICAqCi0gKiBWZXJzaW9uOgkkSWQ6IGlwX29wdGlvbnMuYyx2IDEuMjEgMjAwMS8wOS8wMSAwMDozMTo1MCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CUEuTi5LdXpuZXRzb3YKICAqCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggZTUyNzYyOC4uNDY1NTQ0ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTUsOCArNSw2IEBACiAgKgogICoJCVRoZSBJbnRlcm5ldCBQcm90b2NvbCAoSVApIG91dHB1dCBtb2R1bGUuCiAgKgotICogVmVyc2lvbjoJJElkOiBpcF9vdXRwdXQuYyx2IDEuMTAwIDIwMDIvMDIvMDEgMjI6MDE6MDMgZGF2ZW0gRXhwICQKLSAqCiAgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQlEb25hbGQgQmVja2VyLCA8YmVja2VyQHN1cGVyLm9yZz4KQEAgLTE4NCw5ICsxODIsOSBAQAogCXVuc2lnbmVkIGludCBoaF9sZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpOwogCiAJaWYgKHJ0LT5ydF90eXBlID09IFJUTl9NVUxUSUNBU1QpCi0JCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRNQ0FTVFBLVFMpOworCQlJUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9PVVRNQ0FTVFBLVFMpOwogCWVsc2UgaWYgKHJ0LT5ydF90eXBlID09IFJUTl9CUk9BRENBU1QpCi0JCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRCQ0FTVFBLVFMpOworCQlJUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9PVVRCQ0FTVFBLVFMpOwogCiAJLyogQmUgcGFyYW5vaWQsIHJhdGhlciB0aGFuIHRvbyBjbGV2ZXIuICovCiAJaWYgKHVubGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIDwgaGhfbGVuICYmIGRldi0+aGVhZGVyX29wcykpIHsKQEAgLTI0Niw3ICsyNDQsNyBAQAogCS8qCiAJICoJSWYgdGhlIGluZGljYXRlZCBpbnRlcmZhY2UgaXMgdXAgYW5kIHJ1bm5pbmcsIHNlbmQgdGhlIHBhY2tldC4KIAkgKi8KLQlJUF9JTkNfU1RBVFMoSVBTVEFUU19NSUJfT1VUUkVRVUVTVFMpOworCUlQX0lOQ19TVEFUUyhkZXZfbmV0KGRldiksIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTsKIAogCXNrYi0+ZGV2ID0gZGV2OwogCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CkBAIC0zMDAsNyArMjk4LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kc3QtPmRldjsKIAotCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CisJSVBfSU5DX1NUQVRTKGRldl9uZXQoZGV2KSwgSVBTVEFUU19NSUJfT1VUUkVRVUVTVFMpOwogCiAJc2tiLT5kZXYgPSBkZXY7CiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKQEAgLTM5MSw3ICszODksNyBAQAogCXJldHVybiBpcF9sb2NhbF9vdXQoc2tiKTsKIAogbm9fcm91dGU6Ci0JSVBfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKKwlJUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CiB9CkBAIC00NTMsNyArNDUxLDcgQEAKIAlpcGggPSBpcF9oZHIoc2tiKTsKIAogCWlmICh1bmxpa2VseSgoaXBoLT5mcmFnX29mZiAmIGh0b25zKElQX0RGKSkgJiYgIXNrYi0+bG9jYWxfZGYpKSB7Ci0JCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHRkFJTFMpOworCQlJUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9GUkFHRkFJTFMpOwogCQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9GUkFHX05FRURFRCwKIAkJCSAgaHRvbmwoaXBfc2tiX2RzdF9tdHUoc2tiKSkpOwogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTU0NCw3ICs1NDIsNyBAQAogCQkJZXJyID0gb3V0cHV0KHNrYik7CiAKIAkJCWlmICghZXJyKQotCQkJCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHQ1JFQVRFUyk7CisJCQkJSVBfSU5DX1NUQVRTKGRldl9uZXQoZGV2KSwgSVBTVEFUU19NSUJfRlJBR0NSRUFURVMpOwogCQkJaWYgKGVyciB8fCAhZnJhZykKIAkJCQlicmVhazsKIApAQCAtNTU0LDcgKzU1Miw3IEBACiAJCX0KIAogCQlpZiAoZXJyID09IDApIHsKLQkJCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHT0tTKTsKKwkJCUlQX0lOQ19TVEFUUyhkZXZfbmV0KGRldiksIElQU1RBVFNfTUlCX0ZSQUdPS1MpOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtNTYzLDcgKzU2MSw3IEBACiAJCQlrZnJlZV9za2IoZnJhZyk7CiAJCQlmcmFnID0gc2tiOwogCQl9Ci0JCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHRkFJTFMpOworCQlJUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9GUkFHRkFJTFMpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNjc1LDE1ICs2NzMsMTUgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZmFpbDsKIAotCQlJUF9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR0NSRUFURVMpOworCQlJUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9GUkFHQ1JFQVRFUyk7CiAJfQogCWtmcmVlX3NrYihza2IpOwotCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHT0tTKTsKKwlJUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9GUkFHT0tTKTsKIAlyZXR1cm4gZXJyOwogCiBmYWlsOgogCWtmcmVlX3NrYihza2IpOwotCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHRkFJTFMpOworCUlQX0lOQ19TVEFUUyhkZXZfbmV0KGRldiksIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA0OSw3ICsxMDQ3LDcgQEAKIAogZXJyb3I6CiAJaW5ldC0+Y29yay5sZW5ndGggLT0gbGVuZ3RoOwotCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CisJSVBfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExOTEsNyArMTE4OSw3IEBACiAKIGVycm9yOgogCWluZXQtPmNvcmsubGVuZ3RoIC09IHNpemU7Ci0JSVBfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwlJUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTIxMyw2ICsxMjExLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wX3NrYjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnRhaWxfc2tiOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IE5VTEw7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWluZXQtPmNvcmsuZHN0OwogCXN0cnVjdCBpcGhkciAqaXBoOwpAQCAtMTI4Miw3ICsxMjgxLDcgQEAKIAlza2ItPmRzdCA9IGRzdF9jbG9uZSgmcnQtPnUuZHN0KTsKIAogCWlmIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fSUNNUCkKLQkJaWNtcF9vdXRfY291bnQoKChzdHJ1Y3QgaWNtcGhkciAqKQorCQlpY21wX291dF9jb3VudChuZXQsICgoc3RydWN0IGljbXBoZHIgKikKIAkJCXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikpLT50eXBlKTsKIAogCS8qIE5ldGZpbHRlciBnZXRzIHdob2xlIHRoZSBub3QgZnJhZ21lbnRlZCBza2IuICovCkBAIC0xMjk5LDcgKzEyOTgsNyBAQAogCXJldHVybiBlcnI7CiAKIGVycm9yOgotCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CisJSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOwogCWdvdG8gb3V0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCBlMDUxNGU4Li4xMDVkOTJhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTUsOCArNSw2IEBACiAgKgogICoJCVRoZSBJUCB0byBBUEkgZ2x1ZS4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IGlwX3NvY2tnbHVlLmMsdiAxLjYyIDIwMDIvMDIvMDEgMjI6MDE6MDQgZGF2ZW0gRXhwICQKLSAqCiAgKiBBdXRob3JzOglzZWUgaXAuYwogICoKICAqIEZpeGVzOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb25maWcuYyBiL25ldC9pcHY0L2lwY29uZmlnLmMKaW5kZXggZWQ0NTAzNy4uNDIwNjVmZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb25maWcuYworKysgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICAkSWQ6IGlwY29uZmlnLmMsdiAxLjQ2IDIwMDIvMDIvMDEgMjI6MDE6MDQgZGF2ZW0gRXhwICQKLSAqCiAgKiAgQXV0b21hdGljIENvbmZpZ3VyYXRpb24gb2YgSVAgLS0gdXNlIERIQ1AsIEJPT1RQLCBSQVJQLCBvcgogICogIHVzZXItc3VwcGxpZWQgaW5mb3JtYXRpb24gdG8gY29uZmlndXJlIG93biBJUCBhZGRyZXNzIGFuZCByb3V0ZXMuCiAgKgpAQCAtNDM0LDcgKzQzMiw3IEBACiAJdW5zaWduZWQgY2hhciAqc2hhLCAqdGhhOwkJLyogcyBmb3IgInNvdXJjZSIsIHQgZm9yICJ0YXJnZXQiICovCiAJc3RydWN0IGljX2RldmljZSAqZDsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJZ290byBkcm9wOwogCiAJaWYgKChza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKQEAgLTg1NCw3ICs4NTIsNyBAQAogCXN0cnVjdCBpY19kZXZpY2UgKmQ7CiAJaW50IGxlbiwgZXh0X2xlbjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJZ290byBkcm9wOwogCiAJLyogUGVyZm9ybSB2ZXJpZmljYXRpb25zIGJlZm9yZSB0YWtpbmcgdGhlIGxvY2suICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jCmluZGV4IGFmNWNiNTMuLjRjNmQyY2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYworKysgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICoJTGludXggTkVUMzoJSVAvSVAgcHJvdG9jb2wgZGVjb2Rlci4KICAqCi0gKglWZXJzaW9uOiAkSWQ6IGlwaXAuYyx2IDEuNTAgMjAwMS8xMC8wMiAwMjoyMjozNiBkYXZlbSBFeHAgJAotICoKICAqCUF1dGhvcnM6CiAgKgkJU2FtIExhbnRpbmdhIChzbG91a2VuQGNzLnVjZGF2aXMuZWR1KSAgMDIvMDEvOTUKICAqCkBAIC0zNjgsOCArMzY2LDggQEAKIAkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCi0JCXR1bm5lbC0+c3RhdC5yeF9wYWNrZXRzKys7Ci0JCXR1bm5lbC0+c3RhdC5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJdHVubmVsLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJdHVubmVsLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQlza2ItPmRldiA9IHR1bm5lbC0+ZGV2OwogCQlkc3RfcmVsZWFzZShza2ItPmRzdCk7CiAJCXNrYi0+ZHN0ID0gTlVMTDsKQEAgLTM5Miw3ICszOTAsNyBAQAogc3RhdGljIGludCBpcGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdHVubmVsLT5zdGF0OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPmRldi0+c3RhdHM7CiAJc3RydWN0IGlwaGRyICAqdGlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAl1OCAgICAgdG9zID0gdHVubmVsLT5wYXJtcy5pcGgudG9zOwogCV9fYmUxNiBkZiA9IHRpcGgtPmZyYWdfb2ZmOwpAQCAtNDA1LDcgKzQwMyw3IEBACiAJaW50ICAgIG10dTsKIAogCWlmICh0dW5uZWwtPnJlY3Vyc2lvbisrKSB7Ci0JCXR1bm5lbC0+c3RhdC5jb2xsaXNpb25zKys7CisJCXN0YXRzLT5jb2xsaXNpb25zKys7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC00MTgsNyArNDE2LDcgQEAKIAlpZiAoIWRzdCkgewogCQkvKiBOQk1BIHR1bm5lbCAqLwogCQlpZiAoKHJ0ID0gc2tiLT5ydGFibGUpID09IE5VTEwpIHsKLQkJCXR1bm5lbC0+c3RhdC50eF9maWZvX2Vycm9ycysrOworCQkJc3RhdHMtPnR4X2ZpZm9fZXJyb3JzKys7CiAJCQlnb3RvIHR4X2Vycm9yOwogCQl9CiAJCWlmICgoZHN0ID0gcnQtPnJ0X2dhdGV3YXkpID09IDApCkBAIC00MzMsNyArNDMxLDcgQEAKIAkJCQkJCS50b3MgPSBSVF9UT1ModG9zKSB9IH0sCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fSVBJUCB9OwogCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSkgewotCQkJdHVubmVsLT5zdGF0LnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAkJfQogCX0KQEAgLTQ0MSw3ICs0MzksNyBAQAogCiAJaWYgKHRkZXYgPT0gZGV2KSB7CiAJCWlwX3J0X3B1dChydCk7Ci0JCXR1bm5lbC0+c3RhdC5jb2xsaXNpb25zKys7CisJCXN0YXRzLT5jb2xsaXNpb25zKys7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC00NTEsNyArNDQ5LDcgQEAKIAkJbXR1ID0gc2tiLT5kc3QgPyBkc3RfbXR1KHNrYi0+ZHN0KSA6IGRldi0+bXR1OwogCiAJaWYgKG10dSA8IDY4KSB7Ci0JCXR1bm5lbC0+c3RhdC5jb2xsaXNpb25zKys7CisJCXN0YXRzLT5jb2xsaXNpb25zKys7CiAJCWlwX3J0X3B1dChydCk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQpAQCAtNjg1LDExICs2ODMsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXBpcF90dW5uZWxfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICYoKChzdHJ1Y3QgaXBfdHVubmVsKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdCk7Ci19Ci0KIHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpZiAobmV3X210dSA8IDY4IHx8IG5ld19tdHUgPiAweEZGRjggLSBzaXplb2Yoc3RydWN0IGlwaGRyKSkKQEAgLTcwMiw3ICs2OTUsNiBAQAogewogCWRldi0+dW5pbml0CQk9IGlwaXBfdHVubmVsX3VuaW5pdDsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGlwaXBfdHVubmVsX3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gaXBpcF90dW5uZWxfZ2V0X3N0YXRzOwogCWRldi0+ZG9faW9jdGwJCT0gaXBpcF90dW5uZWxfaW9jdGw7CiAJZGV2LT5jaGFuZ2VfbXR1CQk9IGlwaXBfdHVubmVsX2NoYW5nZV9tdHU7CiAJZGV2LT5kZXN0cnVjdG9yCQk9IGZyZWVfbmV0ZGV2OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDExNzAwYTQuLmM1MTliOGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTksOCArOSw2IEBACiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICoJVmVyc2lvbjogJElkOiBpcG1yLmMsdiAxLjY1IDIwMDEvMTAvMzEgMjE6NTU6NTQgZGF2ZW0gRXhwICQKLSAqCiAgKglGaXhlczoKICAqCU1pY2hhZWwgQ2hhc3RhaW4JOglJbmNvcnJlY3Qgc2l6ZSBvZiBjb3B5aW5nLgogICoJQWxhbiBDb3gJCToJQWRkZWQgdGhlIGNhY2hlIG1hbmFnZXIgY29kZQpAQCAtMTIwLDYgKzExOCwzMSBAQAogCiAvKiBTZXJ2aWNlIHJvdXRpbmVzIGNyZWF0aW5nIHZpcnR1YWwgaW50ZXJmYWNlczogRFZNUlAgdHVubmVscyBhbmQgUElNUkVHICovCiAKK3N0YXRpYyB2b2lkIGlwbXJfZGVsX3R1bm5lbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgdmlmY3RsICp2KQoreworCWRldl9jbG9zZShkZXYpOworCisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCAidHVubDAiKTsKKwlpZiAoZGV2KSB7CisJCXN0cnVjdCBpZnJlcSBpZnI7CisJCW1tX3NlZ21lbnRfdAlvbGRmczsKKwkJc3RydWN0IGlwX3R1bm5lbF9wYXJtIHA7CisKKwkJbWVtc2V0KCZwLCAwLCBzaXplb2YocCkpOworCQlwLmlwaC5kYWRkciA9IHYtPnZpZmNfcm10X2FkZHIuc19hZGRyOworCQlwLmlwaC5zYWRkciA9IHYtPnZpZmNfbGNsX2FkZHIuc19hZGRyOworCQlwLmlwaC52ZXJzaW9uID0gNDsKKwkJcC5pcGguaWhsID0gNTsKKwkJcC5pcGgucHJvdG9jb2wgPSBJUFBST1RPX0lQSVA7CisJCXNwcmludGYocC5uYW1lLCAiZHZtcnAlZCIsIHYtPnZpZmNfdmlmaSk7CisJCWlmci5pZnJfaWZydS5pZnJ1X2RhdGEgPSAoX19mb3JjZSB2b2lkIF9fdXNlciAqKSZwOworCisJCW9sZGZzID0gZ2V0X2ZzKCk7IHNldF9mcyhLRVJORUxfRFMpOworCQlkZXYtPmRvX2lvY3RsKGRldiwgJmlmciwgU0lPQ0RFTFRVTk5FTCk7CisJCXNldF9mcyhvbGRmcyk7CisJfQorfQorCiBzdGF0aWMKIHN0cnVjdCBuZXRfZGV2aWNlICppcG1yX25ld190dW5uZWwoc3RydWN0IHZpZmN0bCAqdikKIHsKQEAgLTE2MSw2ICsxODQsNyBAQAogCiAJCQlpZiAoZGV2X29wZW4oZGV2KSkKIAkJCQlnb3RvIGZhaWx1cmU7CisJCQlkZXZfaG9sZChkZXYpOwogCQl9CiAJfQogCXJldHVybiBkZXY7CkBAIC0xODEsMjYgKzIwNSwyMCBAQAogc3RhdGljIGludCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiluZXRkZXZfcHJpdihkZXYpKS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYoZGV2KSktPnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWlwbXJfY2FjaGVfcmVwb3J0KHNrYiwgcmVnX3ZpZl9udW0sIElHTVBNU0dfV0hPTEVQS1QpOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcmVnX3ZpZl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiluZXRkZXZfcHJpdihkZXYpOwotfQotCiBzdGF0aWMgdm9pZCByZWdfdmlmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT50eXBlCQk9IEFSUEhSRF9QSU1SRUc7CiAJZGV2LT5tdHUJCT0gRVRIX0RBVEFfTEVOIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgLSA4OwogCWRldi0+ZmxhZ3MJCT0gSUZGX05PQVJQOwogCWRldi0+aGFyZF9zdGFydF94bWl0CT0gcmVnX3ZpZl94bWl0OwotCWRldi0+Z2V0X3N0YXRzCQk9IHJlZ192aWZfZ2V0X3N0YXRzOwogCWRldi0+ZGVzdHJ1Y3RvcgkJPSBmcmVlX25ldGRldjsKIH0KIApAQCAtMjA5LDggKzIyNyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAKLQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSwgInBpbXJlZyIsCi0JCQkgICByZWdfdmlmX3NldHVwKTsKKwlkZXYgPSBhbGxvY19uZXRkZXYoMCwgInBpbXJlZyIsIHJlZ192aWZfc2V0dXApOwogCiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTIzNCw2ICsyNTEsOCBAQAogCWlmIChkZXZfb3BlbihkZXYpKQogCQlnb3RvIGZhaWx1cmU7CiAKKwlkZXZfaG9sZChkZXYpOworCiAJcmV0dXJuIGRldjsKIAogZmFpbHVyZToKQEAgLTI0OCw5ICsyNjcsMTAgQEAKIAogLyoKICAqCURlbGV0ZSBhIFZJRiBlbnRyeQorICoJQG5vdGlmeTogU2V0IHRvIDEsIGlmIHRoZSBjYWxsZXIgaXMgYSBub3RpZmllcl9jYWxsCiAgKi8KIAotc3RhdGljIGludCB2aWZfZGVsZXRlKGludCB2aWZpKQorc3RhdGljIGludCB2aWZfZGVsZXRlKGludCB2aWZpLCBpbnQgbm90aWZ5KQogewogCXN0cnVjdCB2aWZfZGV2aWNlICp2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0yOTMsNyArMzEzLDcgQEAKIAkJaXBfcnRfbXVsdGljYXN0X2V2ZW50KGluX2Rldik7CiAJfQogCi0JaWYgKHYtPmZsYWdzJihWSUZGX1RVTk5FTHxWSUZGX1JFR0lTVEVSKSkKKwlpZiAodi0+ZmxhZ3MmKFZJRkZfVFVOTkVMfFZJRkZfUkVHSVNURVIpICYmICFub3RpZnkpCiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAKIAlkZXZfcHV0KGRldik7CkBAIC0zOTgsNiArNDE4LDcgQEAKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdiA9ICZ2aWZfdGFibGVbdmlmaV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CisJaW50IGVycjsKIAogCS8qIElzIHZpZiBidXN5ID8gKi8KIAlpZiAoVklGX0VYSVNUUyh2aWZpKSkKQEAgLTQxNSwxOCArNDM2LDM0IEBACiAJCWRldiA9IGlwbXJfcmVnX3ZpZigpOwogCQlpZiAoIWRldikKIAkJCXJldHVybiAtRU5PQlVGUzsKKwkJZXJyID0gZGV2X3NldF9hbGxtdWx0aShkZXYsIDEpOworCQlpZiAoZXJyKSB7CisJCQl1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpOworCQkJZGV2X3B1dChkZXYpOworCQkJcmV0dXJuIGVycjsKKwkJfQogCQlicmVhazsKICNlbmRpZgogCWNhc2UgVklGRl9UVU5ORUw6CiAJCWRldiA9IGlwbXJfbmV3X3R1bm5lbCh2aWZjKTsKIAkJaWYgKCFkZXYpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CisJCWVyciA9IGRldl9zZXRfYWxsbXVsdGkoZGV2LCAxKTsKKwkJaWYgKGVycikgeworCQkJaXBtcl9kZWxfdHVubmVsKGRldiwgdmlmYyk7CisJCQlkZXZfcHV0KGRldik7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJCWJyZWFrOwogCWNhc2UgMDoKIAkJZGV2ID0gaXBfZGV2X2ZpbmQoJmluaXRfbmV0LCB2aWZjLT52aWZjX2xjbF9hZGRyLnNfYWRkcik7CiAJCWlmICghZGV2KQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCQlkZXZfcHV0KGRldik7CisJCWVyciA9IGRldl9zZXRfYWxsbXVsdGkoZGV2LCAxKTsKKwkJaWYgKGVycikgeworCQkJZGV2X3B1dChkZXYpOworCQkJcmV0dXJuIGVycjsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQzNSw3ICs0NzIsNiBAQAogCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCUlQVjRfREVWQ09ORihpbl9kZXYtPmNuZiwgTUNfRk9SV0FSRElORykrKzsKLQlkZXZfc2V0X2FsbG11bHRpKGRldiwgKzEpOwogCWlwX3J0X211bHRpY2FzdF9ldmVudChpbl9kZXYpOwogCiAJLyoKQEAgLTQ1OCw3ICs0OTQsNiBAQAogCiAJLyogQW5kIGZpbmlzaCB1cGRhdGUgd3JpdGluZyBjcml0aWNhbCBkYXRhICovCiAJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwotCWRldl9ob2xkKGRldik7CiAJdi0+ZGV2PWRldjsKICNpZmRlZiBDT05GSUdfSVBfUElNU00KIAlpZiAodi0+ZmxhZ3MmVklGRl9SRUdJU1RFUikKQEAgLTgwNSw3ICs4NDAsNyBAQAogCSAqLwogCWZvciAoaT0wOyBpPG1heHZpZjsgaSsrKSB7CiAJCWlmICghKHZpZl90YWJsZVtpXS5mbGFncyZWSUZGX1NUQVRJQykpCi0JCQl2aWZfZGVsZXRlKGkpOworCQkJdmlmX2RlbGV0ZShpLCAwKTsKIAl9CiAKIAkvKgpAQCAtOTE4LDcgKzk1Myw3IEBACiAJCWlmIChvcHRuYW1lPT1NUlRfQUREX1ZJRikgewogCQkJcmV0ID0gdmlmX2FkZCgmdmlmLCBzaz09bXJvdXRlX3NvY2tldCk7CiAJCX0gZWxzZSB7Ci0JCQlyZXQgPSB2aWZfZGVsZXRlKHZpZi52aWZjX3ZpZmkpOworCQkJcmV0ID0gdmlmX2RlbGV0ZSh2aWYudmlmY192aWZpLCAwKTsKIAkJfQogCQlydG5sX3VubG9jaygpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTA4OSw3ICsxMTI0LDcgQEAKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdjsKIAlpbnQgY3Q7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChldmVudCAhPSBORVRERVZfVU5SRUdJU1RFUikKQEAgLTEwOTcsNyArMTEzMiw3IEBACiAJdj0mdmlmX3RhYmxlWzBdOwogCWZvciAoY3Q9MDtjdDxtYXh2aWY7Y3QrKyx2KyspIHsKIAkJaWYgKHYtPmRldj09ZGV2KQotCQkJdmlmX2RlbGV0ZShjdCk7CisJCQl2aWZfZGVsZXRlKGN0LCAxKTsKIAl9CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpAQCAtMTE0Myw3ICsxMTc4LDcgQEAKIHsKIAlzdHJ1Y3QgaXBfb3B0aW9ucyAqIG9wdAk9ICYoSVBDQihza2IpLT5vcHQpOwogCi0JSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX09VVEZPUldEQVRBR1JBTVMpOworCUlQX0lOQ19TVEFUU19CSChkZXZfbmV0KHNrYi0+ZHN0LT5kZXYpLCBJUFNUQVRTX01JQl9PVVRGT1JXREFUQUdSQU1TKTsKIAogCWlmICh1bmxpa2VseShvcHQtPm9wdGxlbikpCiAJCWlwX2ZvcndhcmRfb3B0aW9ucyhza2IpOwpAQCAtMTE3MCw4ICsxMjA1LDggQEAKIAlpZiAodmlmLT5mbGFncyAmIFZJRkZfUkVHSVNURVIpIHsKIAkJdmlmLT5wa3Rfb3V0Kys7CiAJCXZpZi0+Ynl0ZXNfb3V0Kz1za2ItPmxlbjsKLQkJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYodmlmLT5kZXYpKS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKW5ldGRldl9wcml2KHZpZi0+ZGV2KSktPnR4X3BhY2tldHMrKzsKKwkJdmlmLT5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQl2aWYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQlpcG1yX2NhY2hlX3JlcG9ydChza2IsIHZpZmksIElHTVBNU0dfV0hPTEVQS1QpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwpAQCAtMTIwNiw3ICsxMjQxLDcgQEAKIAkJICAgdG8gYmxhY2tob2xlLgogCQkgKi8KIAotCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTsKKwkJSVBfSU5DX1NUQVRTX0JIKGRldl9uZXQoZGV2KSwgSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTsKIAkJaXBfcnRfcHV0KHJ0KTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CkBAIC0xMjMwLDggKzEyNjUsOCBAQAogCWlmICh2aWYtPmZsYWdzICYgVklGRl9UVU5ORUwpIHsKIAkJaXBfZW5jYXAoc2tiLCB2aWYtPmxvY2FsLCB2aWYtPnJlbW90ZSk7CiAJCS8qIEZJWE1FOiBleHRyYSBvdXRwdXQgZmlyZXdhbGwgc3RlcCB1c2VkIHRvIGJlIGhlcmUuIC0tUlIgKi8KLQkJKChzdHJ1Y3QgaXBfdHVubmVsICopbmV0ZGV2X3ByaXYodmlmLT5kZXYpKS0+c3RhdC50eF9wYWNrZXRzKys7Ci0JCSgoc3RydWN0IGlwX3R1bm5lbCAqKW5ldGRldl9wcml2KHZpZi0+ZGV2KSktPnN0YXQudHhfYnl0ZXMrPXNrYi0+bGVuOworCQl2aWYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQl2aWYtPmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJfQogCiAJSVBDQihza2IpLT5mbGFncyB8PSBJUFNLQl9GT1JXQVJERUQ7CkBAIC0xNDg3LDggKzE1MjIsOCBAQAogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAlkc3RfcmVsZWFzZShza2ItPmRzdCk7CiAJc2tiLT5kc3QgPSBOVUxMOwotCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKW5ldGRldl9wcml2KHJlZ19kZXYpKS0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyopbmV0ZGV2X3ByaXYocmVnX2RldikpLT5yeF9wYWNrZXRzKys7CisJcmVnX2Rldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJcmVnX2Rldi0+c3RhdHMucnhfcGFja2V0cysrOwogCW5mX3Jlc2V0KHNrYik7CiAJbmV0aWZfcngoc2tiKTsKIAlkZXZfcHV0KHJlZ19kZXYpOwpAQCAtMTU0Miw4ICsxNTc3LDggQEAKIAlza2ItPmlwX3N1bW1lZCA9IDA7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCWRzdF9yZWxlYXNlKHNrYi0+ZHN0KTsKLQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiluZXRkZXZfcHJpdihyZWdfZGV2KSktPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqKW5ldGRldl9wcml2KHJlZ19kZXYpKS0+cnhfcGFja2V0cysrOworCXJlZ19kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXJlZ19kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlza2ItPmRzdCA9IE5VTEw7CiAJbmZfcmVzZXQoc2tiKTsKIAluZXRpZl9yeChza2IpOwpAQCAtMTg4NywxNiArMTkyMiwzNiBAQAogICoJU2V0dXAgZm9yIElQIG11bHRpY2FzdCByb3V0aW5nCiAgKi8KIAotdm9pZCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKQoraW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpCiB7CisJaW50IGVycjsKKwogCW1ydF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaXBfbXJ0X2NhY2hlIiwKIAkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtZmNfY2FjaGUpLAogCQkJCSAgICAgICAwLCBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywKIAkJCQkgICAgICAgTlVMTCk7CisJaWYgKCFtcnRfY2FjaGVwKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXNldHVwX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lciwgaXBtcl9leHBpcmVfcHJvY2VzcywgMCk7Ci0JcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcF9tcl9ub3RpZmllcik7CisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcF9tcl9ub3RpZmllcik7CisJaWYgKGVycikKKwkJZ290byByZWdfbm90aWZfZmFpbDsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwX21yX3ZpZiIsIDAsICZpcG1yX3ZpZl9mb3BzKTsKLQlwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJpcF9tcl9jYWNoZSIsIDAsICZpcG1yX21mY19mb3BzKTsKKwllcnIgPSAtRU5PTUVNOworCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAiaXBfbXJfdmlmIiwgMCwgJmlwbXJfdmlmX2ZvcHMpKQorCQlnb3RvIHByb2NfdmlmX2ZhaWw7CisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJpcF9tcl9jYWNoZSIsIDAsICZpcG1yX21mY19mb3BzKSkKKwkJZ290byBwcm9jX2NhY2hlX2ZhaWw7CiAjZW5kaWYKKwlyZXR1cm4gMDsKK3JlZ19ub3RpZl9mYWlsOgorCWttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworcHJvY192aWZfZmFpbDoKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXBfbXJfbm90aWZpZXIpOworcHJvY19jYWNoZV9mYWlsOgorCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJpcF9tcl92aWYiKTsKKyNlbmRpZgorCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19hcHAuYwppbmRleCA1MzVhYmUwLi4xZjE4OTdhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2FwcC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfYXBwLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogaXBfdnNfYXBwLmM6IEFwcGxpY2F0aW9uIG1vZHVsZSBzdXBwb3J0IGZvciBJUFZTCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfYXBwLmMsdiAxLjE3IDIwMDMvMDMvMjIgMDY6MzE6MjEgd2Vuc29uZyBFeHAgJAotICoKICAqIEF1dGhvcnM6ICAgICBXZW5zb25nIFpoYW5nIDx3ZW5zb25nQGxpbnV4dmlydHVhbHNlcnZlci5vcmc+CiAgKgogICogICAgICAgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jb25uLmMKaW5kZXggNjVmMWJhMTEuLmY4YmRhZTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY29ubi5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfY29ubi5jCkBAIC01LDggKzUsNiBAQAogICogICAgICAgICAgICAgIGhpZ2gtcGVyZm9ybWFuY2UgYW5kIGhpZ2hseSBhdmFpbGFibGUgc2VydmVyIGJhc2VkIG9uIGEKICAqICAgICAgICAgICAgICBjbHVzdGVyIG9mIHNlcnZlcnMuCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfY29ubi5jLHYgMS4zMSAyMDAzLzA0LzE4IDA5OjAzOjE2IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOiAgICAgV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BsaW51eHZpcnR1YWxzZXJ2ZXIub3JnPgogICogICAgICAgICAgICAgIFBldGVyIEtlc2UgPHBldGVyLmtlc2VAaWpzLnNpPgogICogICAgICAgICAgICAgIEp1bGlhbiBBbmFzdGFzb3YgPGphQHNzaS5iZz4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jb3JlLmMKaW5kZXggOTYzOTgxYS4uYTc4NzllYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jb3JlLmMKQEAgLTUsOCArNSw2IEBACiAgKiAgICAgICAgICAgICAgaGlnaC1wZXJmb3JtYW5jZSBhbmQgaGlnaGx5IGF2YWlsYWJsZSBzZXJ2ZXIgYmFzZWQgb24gYQogICogICAgICAgICAgICAgIGNsdXN0ZXIgb2Ygc2VydmVycy4KICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBpcF92c19jb3JlLmMsdiAxLjM0IDIwMDMvMDUvMTAgMDM6MDU6MjMgd2Vuc29uZyBFeHAgJAotICoKICAqIEF1dGhvcnM6ICAgICBXZW5zb25nIFpoYW5nIDx3ZW5zb25nQGxpbnV4dmlydHVhbHNlcnZlci5vcmc+CiAgKiAgICAgICAgICAgICAgUGV0ZXIgS2VzZSA8cGV0ZXIua2VzZUBpanMuc2k+CiAgKiAgICAgICAgICAgICAgSnVsaWFuIEFuYXN0YXNvdiA8amFAc3NpLmJnPgpAQCAtOTkzLDcgKzk5MSw4IEBACiAJICAgICAgID09IHN5c2N0bF9pcF92c19zeW5jX3RocmVzaG9sZFswXSkpIHx8CiAJICAgICAoKGNwLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgJiYgKGNwLT5vbGRfc3RhdGUgIT0gY3AtPnN0YXRlKSAmJgogCSAgICAgICgoY3AtPnN0YXRlID09IElQX1ZTX1RDUF9TX0ZJTl9XQUlUKSB8fAotCSAgICAgICAoY3AtPnN0YXRlID09IElQX1ZTX1RDUF9TX0NMT1NFKSkpKSkKKwkgICAgICAgKGNwLT5zdGF0ZSA9PSBJUF9WU19UQ1BfU19DTE9TRV9XQUlUKSB8fAorCSAgICAgICAoY3AtPnN0YXRlID09IElQX1ZTX1RDUF9TX1RJTUVfV0FJVCkpKSkpCiAJCWlwX3ZzX3N5bmNfY29ubihjcCk7CiAJY3AtPm9sZF9zdGF0ZSA9IGNwLT5zdGF0ZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19jdGwuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggOTRjNTc2Ny4uOWE1YWNlMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19jdGwuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2N0bC5jCkBAIC01LDggKzUsNiBAQAogICogICAgICAgICAgICAgIGhpZ2gtcGVyZm9ybWFuY2UgYW5kIGhpZ2hseSBhdmFpbGFibGUgc2VydmVyIGJhc2VkIG9uIGEKICAqICAgICAgICAgICAgICBjbHVzdGVyIG9mIHNlcnZlcnMuCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfY3RsLmMsdiAxLjM2IDIwMDMvMDYvMDggMDk6MzE6MTkgd2Vuc29uZyBFeHAgJAotICoKICAqIEF1dGhvcnM6ICAgICBXZW5zb25nIFpoYW5nIDx3ZW5zb25nQGxpbnV4dmlydHVhbHNlcnZlci5vcmc+CiAgKiAgICAgICAgICAgICAgUGV0ZXIgS2VzZSA8cGV0ZXIua2VzZUBpanMuc2k+CiAgKiAgICAgICAgICAgICAgSnVsaWFuIEFuYXN0YXNvdiA8amFAc3NpLmJnPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19kaC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19kaC5jCmluZGV4IGRjZjVkNDYuLjhhZmMxNTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfZGguYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2RoLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogSVBWUzogICAgICAgIERlc3RpbmF0aW9uIEhhc2hpbmcgc2NoZWR1bGluZyBtb2R1bGUKICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBpcF92c19kaC5jLHYgMS41IDIwMDIvMDkvMTUgMDg6MTQ6MDggd2Vuc29uZyBFeHAgJAotICoKICAqIEF1dGhvcnM6ICAgICBXZW5zb25nIFpoYW5nIDx3ZW5zb25nQGdudWNoaW5hLm9yZz4KICAqCiAgKiAgICAgICAgICAgICAgSW5zcGlyZWQgYnkgdGhlIGNvbnNpc3RlbnQgaGFzaGluZyBzY2hlZHVsZXIgcGF0Y2ggZnJvbQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19lc3QuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfZXN0LmMKaW5kZXggZGZhMGQ3MS4uYmMwNGVlZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19lc3QuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2VzdC5jCkBAIC0xLDggKzEsNiBAQAogLyoKICAqIGlwX3ZzX2VzdC5jOiBzaW1wbGUgcmF0ZSBlc3RpbWF0b3IgZm9yIElQVlMKICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBpcF92c19lc3QuYyx2IDEuNCAyMDAyLzExLzMwIDAxOjUwOjM1IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOiAgICAgV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BsaW51eHZpcnR1YWxzZXJ2ZXIub3JnPgogICoKICAqICAgICAgICAgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Z0cC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19mdHAuYwppbmRleCA1OWFhMTY2Li5jMWM3NThlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Z0cC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfZnRwLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogaXBfdnNfZnRwLmM6IElQVlMgZnRwIGFwcGxpY2F0aW9uIG1vZHVsZQogICoKLSAqIFZlcnNpb246CSRJZDogaXBfdnNfZnRwLmMsdiAxLjEzIDIwMDIvMDkvMTUgMDg6MTQ6MDggd2Vuc29uZyBFeHAgJAotICoKICAqIEF1dGhvcnM6CVdlbnNvbmcgWmhhbmcgPHdlbnNvbmdAbGludXh2aXJ0dWFsc2VydmVyLm9yZz4KICAqCiAgKiBDaGFuZ2VzOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGMuYwppbmRleCAzODg4NjQyLi4wZWZhM2RiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGMuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGMuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBJUFZTOiAgICAgICAgTG9jYWxpdHktQmFzZWQgTGVhc3QtQ29ubmVjdGlvbiBzY2hlZHVsaW5nIG1vZHVsZQogICoKLSAqIFZlcnNpb246ICAgICAkSWQ6IGlwX3ZzX2xibGMuYyx2IDEuMTAgMjAwMi8wOS8xNSAwODoxNDowOCB3ZW5zb25nIEV4cCAkCi0gKgogICogQXV0aG9yczogICAgIFdlbnNvbmcgWmhhbmcgPHdlbnNvbmdAZ251Y2hpbmEub3JnPgogICoKICAqICAgICAgICAgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGNyLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggZGFhMjYwZS4uOGUzYmJlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjci5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfbGJsY3IuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBJUFZTOiAgICAgICAgTG9jYWxpdHktQmFzZWQgTGVhc3QtQ29ubmVjdGlvbiB3aXRoIFJlcGxpY2F0aW9uIHNjaGVkdWxlcgogICoKLSAqIFZlcnNpb246ICAgICAkSWQ6IGlwX3ZzX2xibGNyLmMsdiAxLjExIDIwMDIvMDkvMTUgMDg6MTQ6MDggd2Vuc29uZyBFeHAgJAotICoKICAqIEF1dGhvcnM6ICAgICBXZW5zb25nIFpoYW5nIDx3ZW5zb25nQGdudWNoaW5hLm9yZz4KICAqCiAgKiAgICAgICAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19sYy5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19sYy5jCmluZGV4IGQ4OGZlZjkuLmFjOWYwOGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfbGMuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xjLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogSVBWUzogICAgICAgIExlYXN0LUNvbm5lY3Rpb24gU2NoZWR1bGluZyBtb2R1bGUKICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBpcF92c19sYy5jLHYgMS4xMCAyMDAzLzA0LzE4IDA5OjAzOjE2IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOiAgICAgV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BsaW51eHZpcnR1YWxzZXJ2ZXIub3JnPgogICoKICAqICAgICAgICAgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX25xLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX25xLmMKaW5kZXggYmMyYTllNS4uYTQ2YmYyNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19ucS5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfbnEuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBJUFZTOiAgICAgICAgTmV2ZXIgUXVldWUgc2NoZWR1bGluZyBtb2R1bGUKICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBpcF92c19ucS5jLHYgMS4yIDIwMDMvMDYvMDggMDk6MzE6MTkgd2Vuc29uZyBFeHAgJAotICoKICAqIEF1dGhvcnM6ICAgICBXZW5zb25nIFpoYW5nIDx3ZW5zb25nQGxpbnV4dmlydHVhbHNlcnZlci5vcmc+CiAgKgogICogICAgICAgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG8uYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG8uYwppbmRleCA0YjFjMTZjLi44NzY3MTRmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90by5jCkBAIC0xLDggKzEsNiBAQAogLyoKICAqIGlwX3ZzX3Byb3RvLmM6IHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0IGZvciBJUFZTCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfcHJvdG8uYyx2IDEuMiAyMDAzLzA0LzE4IDA5OjAzOjE2IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOiAgICAgV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BsaW51eHZpcnR1YWxzZXJ2ZXIub3JnPgogICogICAgICAgICAgICAgIEp1bGlhbiBBbmFzdGFzb3YgPGphQHNzaS5iZz4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX2FoLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX2FoLmMKaW5kZXggNGJmODM1ZS4uNzNlMGVhOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b19haC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fYWguYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBpcF92c19wcm90b19haC5jOglBSCBJUFNlYyBsb2FkIGJhbGFuY2luZyBzdXBwb3J0IGZvciBJUFZTCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfcHJvdG9fYWguYyx2IDEuMSAyMDAzLzA3LzA0IDE1OjA0OjM3IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOglKdWxpYW4gQW5hc3Rhc292IDxqYUBzc2kuYmc+LCBGZWJydWFyeSAyMDAyCiAgKgkJV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BsaW51eHZpcnR1YWxzZXJ2ZXIub3JnPgogICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fZXNwLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX2VzcC5jCmluZGV4IGRiNmE2YjcuLjIxZDcwYzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fZXNwLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b19lc3AuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBpcF92c19wcm90b19lc3AuYzoJRVNQIElQU2VjIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQgZm9yIElQVlMKICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBpcF92c19wcm90b19lc3AuYyx2IDEuMSAyMDAzLzA3LzA0IDE1OjA0OjM3IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOglKdWxpYW4gQW5hc3Rhc292IDxqYUBzc2kuYmc+LCBGZWJydWFyeSAyMDAyCiAgKgkJV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BsaW51eHZpcnR1YWxzZXJ2ZXIub3JnPgogICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCmluZGV4IGI4M2RjMTQuLmQwZWE0NjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b190Y3AuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBpcF92c19wcm90b190Y3AuYzoJVENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQgZm9yIElQVlMKICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBpcF92c19wcm90b190Y3AuYyx2IDEuMyAyMDAyLzExLzMwIDAxOjUwOjM1IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOiAgICAgV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BsaW51eHZpcnR1YWxzZXJ2ZXIub3JnPgogICogICAgICAgICAgICAgIEp1bGlhbiBBbmFzdGFzb3YgPGphQHNzaS5iZz4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b191ZHAuYwppbmRleCA3NTc3MWNiLi5jNmJlNWQ1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogaXBfdnNfcHJvdG9fdWRwLmM6CVVEUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0IGZvciBJUFZTCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfcHJvdG9fdWRwLmMsdiAxLjMgMjAwMi8xMS8zMCAwMTo1MDozNSB3ZW5zb25nIEV4cCAkCi0gKgogICogQXV0aG9yczogICAgIFdlbnNvbmcgWmhhbmcgPHdlbnNvbmdAbGludXh2aXJ0dWFsc2VydmVyLm9yZz4KICAqICAgICAgICAgICAgICBKdWxpYW4gQW5hc3Rhc292IDxqYUBzc2kuYmc+CiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19yci5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19yci5jCmluZGV4IDQzM2Y4YTkuLmM4ZGIxMmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcnIuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3JyLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogSVBWUzogICAgICAgIFJvdW5kLVJvYmluIFNjaGVkdWxpbmcgbW9kdWxlCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfcnIuYyx2IDEuOSAyMDAyLzA5LzE1IDA4OjE0OjA4IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOiAgICAgV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BsaW51eHZpcnR1YWxzZXJ2ZXIub3JnPgogICogICAgICAgICAgICAgIFBldGVyIEtlc2UgPHBldGVyLmtlc2VAaWpzLnNpPgogICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc2NoZWQuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfc2NoZWQuYwppbmRleCAxMjFhMzJiLi5iNjQ3NjczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3NjaGVkLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zY2hlZC5jCkBAIC01LDggKzUsNiBAQAogICogICAgICAgICAgICAgIGhpZ2gtcGVyZm9ybWFuY2UgYW5kIGhpZ2hseSBhdmFpbGFibGUgc2VydmVyIGJhc2VkIG9uIGEKICAqICAgICAgICAgICAgICBjbHVzdGVyIG9mIHNlcnZlcnMuCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfc2NoZWQuYyx2IDEuMTMgMjAwMy8wNS8xMCAwMzowNToyMyB3ZW5zb25nIEV4cCAkCi0gKgogICogQXV0aG9yczogICAgIFdlbnNvbmcgWmhhbmcgPHdlbnNvbmdAbGludXh2aXJ0dWFsc2VydmVyLm9yZz4KICAqICAgICAgICAgICAgICBQZXRlciBLZXNlIDxwZXRlci5rZXNlQGlqcy5zaT4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3NlZC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zZWQuYwppbmRleCBkZDdjMTI4Li4yYTdkMzEzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3NlZC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfc2VkLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogSVBWUzogICAgICAgIFNob3J0ZXN0IEV4cGVjdGVkIERlbGF5IHNjaGVkdWxpbmcgbW9kdWxlCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfc2VkLmMsdiAxLjEgMjAwMy8wNS8xMCAwMzowNjowOCB3ZW5zb25nIEV4cCAkCi0gKgogICogQXV0aG9yczogICAgIFdlbnNvbmcgWmhhbmcgPHdlbnNvbmdAbGludXh2aXJ0dWFsc2VydmVyLm9yZz4KICAqCiAgKiAgICAgICAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19zaC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zaC5jCmluZGV4IDFiMjViMDAuLmI4ZmRmYWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc2guYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3NoLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogSVBWUzogICAgICAgIFNvdXJjZSBIYXNoaW5nIHNjaGVkdWxpbmcgbW9kdWxlCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfc2guYyx2IDEuNSAyMDAyLzA5LzE1IDA4OjE0OjA4IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOiAgICAgV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BnbnVjaGluYS5vcmc+CiAgKgogICogICAgICAgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggZWZmNTRlZi4uNDVlOWJkOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKQEAgLTUsOCArNSw2IEBACiAgKiAgICAgICAgICAgICAgaGlnaC1wZXJmb3JtYW5jZSBhbmQgaGlnaGx5IGF2YWlsYWJsZSBzZXJ2ZXIgYmFzZWQgb24gYQogICogICAgICAgICAgICAgIGNsdXN0ZXIgb2Ygc2VydmVycy4KICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBpcF92c19zeW5jLmMsdiAxLjEzIDIwMDMvMDYvMDggMDk6MzE6MTkgd2Vuc29uZyBFeHAgJAotICoKICAqIEF1dGhvcnM6ICAgICBXZW5zb25nIFpoYW5nIDx3ZW5zb25nQGxpbnV4dmlydHVhbHNlcnZlci5vcmc+CiAgKgogICogaXBfdnNfc3luYzogIHN5bmMgY29ubmVjdGlvbiBpbmZvIGZyb20gbWFzdGVyIGxvYWQgYmFsYW5jZXIgdG8gYmFja3VwcwpAQCAtMjksMTAgKzI3LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pZ21wLmg+ICAgICAgICAgICAgICAgICAvKiBmb3IgaXBfbWNfam9pbl9ncm91cCAqLwogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+ICAgICAgICAgICAgICAgIC8qIGZvciBnZXRfZnMgYW5kIHNldF9mcyAqLwogCiAjaW5jbHVkZSA8bmV0L2lwX3ZzLmg+CiAKQEAgLTY4LDggKzY4LDggQEAKIH07CiAKIHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhIHsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqc3RhcnR1cDsKLQlpbnQgc3RhdGU7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwljaGFyICpidWY7CiB9OwogCiAjZGVmaW5lIFNJTVBMRV9DT05OX1NJWkUgIChzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubikpCkBAIC0xNDAsMTggKzE0MCwxOSBAQAogY2hhciBpcF92c19tYXN0ZXJfbWNhc3RfaWZuW0lQX1ZTX0lGTkFNRV9NQVhMRU5dOwogY2hhciBpcF92c19iYWNrdXBfbWNhc3RfaWZuW0lQX1ZTX0lGTkFNRV9NQVhMRU5dOwogCisvKiBzeW5jIGRhZW1vbiB0YXNrcyAqLworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3luY19tYXN0ZXJfdGhyZWFkOworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3luY19iYWNrdXBfdGhyZWFkOworCiAvKiBtdWx0aWNhc3QgYWRkciAqLwotc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBtY2FzdF9hZGRyOworc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBtY2FzdF9hZGRyID0geworCS5zaW5fZmFtaWx5CQk9IEFGX0lORVQsCisJLnNpbl9wb3J0CQk9IF9fY29uc3RhbnRfaHRvbnMoSVBfVlNfU1lOQ19QT1JUKSwKKwkuc2luX2FkZHIuc19hZGRyCT0gX19jb25zdGFudF9odG9ubChJUF9WU19TWU5DX0dST1VQKSwKK307CiAKIAotc3RhdGljIGlubGluZSB2b2lkIHNiX3F1ZXVlX3RhaWwoc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2IpCi17Ci0Jc3Bpbl9sb2NrKCZpcF92c19zeW5jX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJnNiLT5saXN0LCAmaXBfdnNfc3luY19xdWV1ZSk7Ci0Jc3Bpbl91bmxvY2soJmlwX3ZzX3N5bmNfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqIHNiX2RlcXVldWUodm9pZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2JfZGVxdWV1ZSh2b2lkKQogewogCXN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiOwogCkBAIC0xOTUsNiArMTk2LDE2IEBACiAJa2ZyZWUoc2IpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2JfcXVldWVfdGFpbChzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYikKK3sKKwlzcGluX2xvY2soJmlwX3ZzX3N5bmNfbG9jayk7CisJaWYgKGlwX3ZzX3N5bmNfc3RhdGUgJiBJUF9WU19TVEFURV9NQVNURVIpCisJCWxpc3RfYWRkX3RhaWwoJnNiLT5saXN0LCAmaXBfdnNfc3luY19xdWV1ZSk7CisJZWxzZQorCQlpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7CisJc3Bpbl91bmxvY2soJmlwX3ZzX3N5bmNfbG9jayk7Cit9CisKIC8qCiAgKglHZXQgdGhlIGN1cnJlbnQgc3luYyBidWZmZXIgaWYgaXQgaGFzIGJlZW4gY3JlYXRlZCBmb3IgbW9yZQogICoJdGhhbiB0aGUgc3BlY2lmaWVkIHRpbWUgb3IgdGhlIHNwZWNpZmllZCB0aW1lIGlzIHplcm8uCkBAIC01NzQsMTQgKzU4NSwxNyBAQAogc3RhdGljIHN0cnVjdCBzb2NrZXQgKiBtYWtlX3NlbmRfc29jayh2b2lkKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJaW50IHJlc3VsdDsKIAogCS8qIEZpcnN0IGNyZWF0ZSBhIHNvY2tldCAqLwotCWlmIChzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAmc29jaykgPCAwKSB7CisJcmVzdWx0ID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCUlQX1ZTX0VSUigiRXJyb3IgZHVyaW5nIGNyZWF0aW9uIG9mIHNvY2tldDsgdGVybWluYXRpbmdcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9CiAKLQlpZiAoc2V0X21jYXN0X2lmKHNvY2stPnNrLCBpcF92c19tYXN0ZXJfbWNhc3RfaWZuKSA8IDApIHsKKwlyZXN1bHQgPSBzZXRfbWNhc3RfaWYoc29jay0+c2ssIGlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4pOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCUlQX1ZTX0VSUigiRXJyb3Igc2V0dGluZyBvdXRib3VuZCBtY2FzdCBpbnRlcmZhY2VcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTU4OSwxNCArNjAzLDE1IEBACiAJc2V0X21jYXN0X2xvb3Aoc29jay0+c2ssIDApOwogCXNldF9tY2FzdF90dGwoc29jay0+c2ssIDEpOwogCi0JaWYgKGJpbmRfbWNhc3RpZl9hZGRyKHNvY2ssIGlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4pIDwgMCkgeworCXJlc3VsdCA9IGJpbmRfbWNhc3RpZl9hZGRyKHNvY2ssIGlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4pOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCUlQX1ZTX0VSUigiRXJyb3IgYmluZGluZyBhZGRyZXNzIG9mIHRoZSBtY2FzdCBpbnRlcmZhY2VcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmIChzb2NrLT5vcHMtPmNvbm5lY3Qoc29jaywKLQkJCSAgICAgICAoc3RydWN0IHNvY2thZGRyKikmbWNhc3RfYWRkciwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSwgMCkgPCAwKSB7CisJcmVzdWx0ID0gc29jay0+b3BzLT5jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJm1jYXN0X2FkZHIsCisJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyKSwgMCk7CisJaWYgKHJlc3VsdCA8IDApIHsKIAkJSVBfVlNfRVJSKCJFcnJvciBjb25uZWN0aW5nIHRvIHRoZSBtdWx0aWNhc3QgYWRkclxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtNjA1LDcgKzYyMCw3IEBACiAKICAgZXJyb3I6CiAJc29ja19yZWxlYXNlKHNvY2spOwotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiB9CiAKIApAQCAtNjE1LDI3ICs2MzAsMzAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICogbWFrZV9yZWNlaXZlX3NvY2sodm9pZCkKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCWludCByZXN1bHQ7CiAKIAkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgKi8KLQlpZiAoc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spIDwgMCkgeworCXJlc3VsdCA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrKTsKKwlpZiAocmVzdWx0IDwgMCkgewogCQlJUF9WU19FUlIoIkVycm9yIGR1cmluZyBjcmVhdGlvbiBvZiBzb2NrZXQ7IHRlcm1pbmF0aW5nXG4iKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiAJfQogCiAJLyogaXQgaXMgZXF1aXZhbGVudCB0byB0aGUgUkVVU0VBRERSIG9wdGlvbiBpbiB1c2VyLXNwYWNlICovCiAJc29jay0+c2stPnNrX3JldXNlID0gMTsKIAotCWlmIChzb2NrLT5vcHMtPmJpbmQoc29jaywKLQkJCSAgICAoc3RydWN0IHNvY2thZGRyKikmbWNhc3RfYWRkciwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkgPCAwKSB7CisJcmVzdWx0ID0gc29jay0+b3BzLT5iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJm1jYXN0X2FkZHIsCisJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJaWYgKHJlc3VsdCA8IDApIHsKIAkJSVBfVlNfRVJSKCJFcnJvciBiaW5kaW5nIHRvIHRoZSBtdWx0aWNhc3QgYWRkclxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJLyogam9pbiB0aGUgbXVsdGljYXN0IGdyb3VwICovCi0JaWYgKGpvaW5fbWNhc3RfZ3JvdXAoc29jay0+c2ssCi0JCQkgICAgIChzdHJ1Y3QgaW5fYWRkciopJm1jYXN0X2FkZHIuc2luX2FkZHIsCi0JCQkgICAgIGlwX3ZzX2JhY2t1cF9tY2FzdF9pZm4pIDwgMCkgeworCXJlc3VsdCA9IGpvaW5fbWNhc3RfZ3JvdXAoc29jay0+c2ssCisJCQkoc3RydWN0IGluX2FkZHIgKikgJm1jYXN0X2FkZHIuc2luX2FkZHIsCisJCQlpcF92c19iYWNrdXBfbWNhc3RfaWZuKTsKKwlpZiAocmVzdWx0IDwgMCkgewogCQlJUF9WU19FUlIoIkVycm9yIGpvaW5pbmcgdG8gdGhlIG11bHRpY2FzdCBncm91cFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtNjQ0LDcgKzY2Miw3IEBACiAKICAgZXJyb3I6CiAJc29ja19yZWxlYXNlKHNvY2spOwotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiB9CiAKIApAQCAtNzAyLDQ0ICs3MjAsMjkgQEAKIH0KIAogCi1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoc3luY193YWl0KTsKLXN0YXRpYyBwaWRfdCBzeW5jX21hc3Rlcl9waWQgPSAwOwotc3RhdGljIHBpZF90IHN5bmNfYmFja3VwX3BpZCA9IDA7Ci0KLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChzdG9wX3N5bmNfd2FpdCk7Ci1zdGF0aWMgaW50IHN0b3BfbWFzdGVyX3N5bmMgPSAwOwotc3RhdGljIGludCBzdG9wX2JhY2t1cF9zeW5jID0gMDsKLQotc3RhdGljIHZvaWQgc3luY19tYXN0ZXJfbG9vcCh2b2lkKQorc3RhdGljIGludCBzeW5jX3RocmVhZF9tYXN0ZXIodm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aW5mbyA9IGRhdGE7CiAJc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7CiAKLQkvKiBjcmVhdGUgdGhlIHNlbmRpbmcgbXVsdGljYXN0IHNvY2tldCAqLwotCXNvY2sgPSBtYWtlX3NlbmRfc29jaygpOwotCWlmICghc29jaykKLQkJcmV0dXJuOwotCiAJSVBfVlNfSU5GTygic3luYyB0aHJlYWQgc3RhcnRlZDogc3RhdGUgPSBNQVNURVIsIG1jYXN0X2lmbiA9ICVzLCAiCiAJCSAgICJzeW5jaWQgPSAlZFxuIiwKIAkJICAgaXBfdnNfbWFzdGVyX21jYXN0X2lmbiwgaXBfdnNfbWFzdGVyX3N5bmNpZCk7CiAKLQlmb3IgKDs7KSB7Ci0JCXdoaWxlICgoc2I9c2JfZGVxdWV1ZSgpKSkgewotCQkJaXBfdnNfc2VuZF9zeW5jX21zZyhzb2NrLCBzYi0+bWVzZyk7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJd2hpbGUgKChzYiA9IHNiX2RlcXVldWUoKSkpIHsKKwkJCWlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tPnNvY2ssIHNiLT5tZXNnKTsKIAkJCWlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTsKIAkJfQogCiAJCS8qIGNoZWNrIGlmIGVudHJpZXMgc3RheSBpbiBjdXJyX3NiIGZvciAyIHNlY29uZHMgKi8KLQkJaWYgKChzYiA9IGdldF9jdXJyX3N5bmNfYnVmZigyKkhaKSkpIHsKLQkJCWlwX3ZzX3NlbmRfc3luY19tc2coc29jaywgc2ItPm1lc2cpOworCQlzYiA9IGdldF9jdXJyX3N5bmNfYnVmZigyICogSFopOworCQlpZiAoc2IpIHsKKwkJCWlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tPnNvY2ssIHNiLT5tZXNnKTsKIAkJCWlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTsKIAkJfQogCi0JCWlmIChzdG9wX21hc3Rlcl9zeW5jKQotCQkJYnJlYWs7Ci0KLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwMCk7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWik7CiAJfQogCiAJLyogY2xlYW4gdXAgdGhlIHN5bmNfYnVmZiBxdWV1ZSAqLwpAQCAtNzUzLDE4NSArNzU2LDQ4IEBACiAJfQogCiAJLyogcmVsZWFzZSB0aGUgc2VuZGluZyBtdWx0aWNhc3Qgc29ja2V0ICovCi0Jc29ja19yZWxlYXNlKHNvY2spOworCXNvY2tfcmVsZWFzZSh0aW5mby0+c29jayk7CisJa2ZyZWUodGluZm8pOworCisJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIHZvaWQgc3luY19iYWNrdXBfbG9vcCh2b2lkKQorc3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCWNoYXIgKmJ1ZjsKKwlzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGluZm8gPSBkYXRhOwogCWludCBsZW47CiAKLQlpZiAoIShidWYgPSBrbWFsbG9jKHN5bmNfcmVjdl9tZXNnX21heGxlbiwgR0ZQX0FUT01JQykpKSB7Ci0JCUlQX1ZTX0VSUigic3luY19iYWNrdXBfbG9vcDoga21hbGxvYyBlcnJvclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjcmVhdGUgdGhlIHJlY2VpdmluZyBtdWx0aWNhc3Qgc29ja2V0ICovCi0Jc29jayA9IG1ha2VfcmVjZWl2ZV9zb2NrKCk7Ci0JaWYgKCFzb2NrKQotCQlnb3RvIG91dDsKLQogCUlQX1ZTX0lORk8oInN5bmMgdGhyZWFkIHN0YXJ0ZWQ6IHN0YXRlID0gQkFDS1VQLCBtY2FzdF9pZm4gPSAlcywgIgogCQkgICAic3luY2lkID0gJWRcbiIsCiAJCSAgIGlwX3ZzX2JhY2t1cF9tY2FzdF9pZm4sIGlwX3ZzX2JhY2t1cF9zeW5jaWQpOwogCi0JZm9yICg7OykgewotCQkvKiBkbyB5b3UgaGF2ZSBkYXRhIG5vdz8gKi8KLQkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJihzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkpKSB7Ci0JCQlpZiAoKGxlbiA9Ci0JCQkgICAgIGlwX3ZzX3JlY2VpdmUoc29jaywgYnVmLAotCQkJCQkgICBzeW5jX3JlY3ZfbWVzZ19tYXhsZW4pKSA8PSAwKSB7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCp0aW5mby0+c29jay0+c2stPnNrX3NsZWVwLAorCQkJICFza2JfcXVldWVfZW1wdHkoJnRpbmZvLT5zb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkKKwkJCSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOworCisJCS8qIGRvIHdlIGhhdmUgZGF0YSBub3c/ICovCisJCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCYodGluZm8tPnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkpIHsKKwkJCWxlbiA9IGlwX3ZzX3JlY2VpdmUodGluZm8tPnNvY2ssIHRpbmZvLT5idWYsCisJCQkJCXN5bmNfcmVjdl9tZXNnX21heGxlbik7CisJCQlpZiAobGVuIDw9IDApIHsKIAkJCQlJUF9WU19FUlIoInJlY2VpdmluZyBtZXNzYWdlIGVycm9yXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCS8qIGRpc2FibGUgYm90dG9tIGhhbGYsIGJlY2F1c2UgaXQgYWNjZXNzZWQgdGhlIGRhdGEKKworCQkJLyogZGlzYWJsZSBib3R0b20gaGFsZiwgYmVjYXVzZSBpdCBhY2Nlc3NlcyB0aGUgZGF0YQogCQkJICAgc2hhcmVkIGJ5IHNvZnRpcnEgd2hpbGUgZ2V0dGluZy9jcmVhdGluZyBjb25ucyAqLwogCQkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQkJaXBfdnNfcHJvY2Vzc19tZXNzYWdlKGJ1ZiwgbGVuKTsKKwkJCWlwX3ZzX3Byb2Nlc3NfbWVzc2FnZSh0aW5mby0+YnVmLCBsZW4pOwogCQkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCX0KLQotCQlpZiAoc3RvcF9iYWNrdXBfc3luYykKLQkJCWJyZWFrOwotCi0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApOwogCX0KIAogCS8qIHJlbGVhc2UgdGhlIHNlbmRpbmcgbXVsdGljYXN0IHNvY2tldCAqLwotCXNvY2tfcmVsZWFzZShzb2NrKTsKLQotICBvdXQ6Ci0Ja2ZyZWUoYnVmKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBzZXRfc3luY19waWQoaW50IHN5bmNfc3RhdGUsIHBpZF90IHN5bmNfcGlkKQotewotCWlmIChzeW5jX3N0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikKLQkJc3luY19tYXN0ZXJfcGlkID0gc3luY19waWQ7Ci0JZWxzZSBpZiAoc3luY19zdGF0ZSA9PSBJUF9WU19TVEFURV9CQUNLVVApCi0JCXN5bmNfYmFja3VwX3BpZCA9IHN5bmNfcGlkOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfc3RvcF9zeW5jKGludCBzeW5jX3N0YXRlLCBpbnQgc2V0KQotewotCWlmIChzeW5jX3N0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikKLQkJc3RvcF9tYXN0ZXJfc3luYyA9IHNldDsKLQllbHNlIGlmIChzeW5jX3N0YXRlID09IElQX1ZTX1NUQVRFX0JBQ0tVUCkKLQkJc3RvcF9iYWNrdXBfc3luYyA9IHNldDsKLQllbHNlIHsKLQkJc3RvcF9tYXN0ZXJfc3luYyA9IHNldDsKLQkJc3RvcF9iYWNrdXBfc3luYyA9IHNldDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc3luY190aHJlYWQodm9pZCAqc3RhcnR1cCkKLXsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQltbV9zZWdtZW50X3Qgb2xkbW07Ci0JaW50IHN0YXRlOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0Jc3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gc3RhcnR1cDsKLQotCS8qIGluY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCi0JaXBfdnNfdXNlX2NvdW50X2luYygpOwotCi0JaWYgKGlwX3ZzX3N5bmNfc3RhdGUgJiBJUF9WU19TVEFURV9NQVNURVIgJiYgIXN5bmNfbWFzdGVyX3BpZCkgewotCQlzdGF0ZSA9IElQX1ZTX1NUQVRFX01BU1RFUjsKLQkJbmFtZSA9ICJpcHZzX3N5bmNtYXN0ZXIiOwotCX0gZWxzZSBpZiAoaXBfdnNfc3luY19zdGF0ZSAmIElQX1ZTX1NUQVRFX0JBQ0tVUCAmJiAhc3luY19iYWNrdXBfcGlkKSB7Ci0JCXN0YXRlID0gSVBfVlNfU1RBVEVfQkFDS1VQOwotCQluYW1lID0gImlwdnNfc3luY2JhY2t1cCI7Ci0JfSBlbHNlIHsKLQkJSVBfVlNfQlVHKCk7Ci0JCWlwX3ZzX3VzZV9jb3VudF9kZWMoKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGFlbW9uaXplKG5hbWUpOwotCi0Jb2xkbW0gPSBnZXRfZnMoKTsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQotCS8qIEJsb2NrIGFsbCBzaWduYWxzICovCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2lnaW5pdHNldGludigmY3VycmVudC0+YmxvY2tlZCwgMCk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JLyogc2V0IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBzeW5jIG1lc3NhZ2UgKi8KLQlzZXRfc3luY19tZXNnX21heGxlbihzdGF0ZSk7Ci0KLQkvKiBzZXQgdXAgbXVsdGljYXN0IGFkZHJlc3MgKi8KLQltY2FzdF9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCW1jYXN0X2FkZHIuc2luX3BvcnQgPSBodG9ucyhJUF9WU19TWU5DX1BPUlQpOwotCW1jYXN0X2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSVBfVlNfU1lOQ19HUk9VUCk7Ci0KLQlhZGRfd2FpdF9xdWV1ZSgmc3luY193YWl0LCAmd2FpdCk7Ci0KLQlzZXRfc3luY19waWQoc3RhdGUsIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQljb21wbGV0ZSh0aW5mby0+c3RhcnR1cCk7Ci0KLQkvKgotCSAqIG9uY2Ugd2UgY2FsbCB0aGUgY29tcGxldGlvbiBxdWV1ZSBhYm92ZSwgd2Ugc2hvdWxkCi0JICogbnVsbCBvdXQgdGhhdCByZWZlcmVuY2UsIHNpbmNlIGl0cyBhbGxvY2F0ZWQgb24gdGhlCi0JICogc3RhY2sgb2YgdGhlIGNyZWF0aW5nIGtlcm5lbCB0aHJlYWQKLQkgKi8KLQl0aW5mby0+c3RhcnR1cCA9IE5VTEw7Ci0KLQkvKiBwcm9jZXNzaW5nIG1hc3Rlci9iYWNrdXAgbG9vcCBoZXJlICovCi0JaWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikKLQkJc3luY19tYXN0ZXJfbG9vcCgpOwotCWVsc2UgaWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX0JBQ0tVUCkKLQkJc3luY19iYWNrdXBfbG9vcCgpOwotCWVsc2UgSVBfVlNfQlVHKCk7Ci0KLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc3luY193YWl0LCAmd2FpdCk7Ci0KLQkvKiB0aHJlYWQgZXhpdHMgKi8KLQotCS8qCi0JICogSWYgd2Ugd2VyZW4ndCBleHBsaWNpdGx5IHN0b3BwZWQsIHRoZW4gd2UKLQkgKiBleGl0ZWQgaW4gZXJyb3IsIGFuZCBzaG91bGQgdW5kbyBvdXIgc3RhdGUKLQkgKi8KLQlpZiAoKCFzdG9wX21hc3Rlcl9zeW5jKSAmJiAoIXN0b3BfYmFja3VwX3N5bmMpKQotCQlpcF92c19zeW5jX3N0YXRlIC09IHRpbmZvLT5zdGF0ZTsKLQotCXNldF9zeW5jX3BpZChzdGF0ZSwgMCk7Ci0JSVBfVlNfSU5GTygic3luYyB0aHJlYWQgc3RvcHBlZCFcbiIpOwotCi0Jc2V0X2ZzKG9sZG1tKTsKLQotCS8qIGRlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCi0JaXBfdnNfdXNlX2NvdW50X2RlYygpOwotCi0Jc2V0X3N0b3Bfc3luYyhzdGF0ZSwgMCk7Ci0Jd2FrZV91cCgmc3RvcF9zeW5jX3dhaXQpOwotCi0JLyoKLQkgKiB3ZSBuZWVkIHRvIGZyZWUgdGhlIHN0cnVjdHVyZSB0aGF0IHdhcyBhbGxvY2F0ZWQKLQkgKiBmb3IgdXMgaW4gc3RhcnRfc3luY190aHJlYWQKLQkgKi8KKwlzb2NrX3JlbGVhc2UodGluZm8tPnNvY2spOworCWtmcmVlKHRpbmZvLT5idWYpOwogCWtmcmVlKHRpbmZvKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGZvcmtfc3luY190aHJlYWQodm9pZCAqc3RhcnR1cCkKLXsKLQlwaWRfdCBwaWQ7Ci0KLQkvKiBmb3JrIHRoZSBzeW5jIHRocmVhZCBoZXJlLCB0aGVuIHRoZSBwYXJlbnQgcHJvY2VzcyBvZiB0aGUKLQkgICBzeW5jIHRocmVhZCBpcyB0aGUgaW5pdCBwcm9jZXNzIGFmdGVyIHRoaXMgdGhyZWFkIGV4aXRzLiAqLwotICByZXBlYXQ6Ci0JaWYgKChwaWQgPSBrZXJuZWxfdGhyZWFkKHN5bmNfdGhyZWFkLCBzdGFydHVwLCAwKSkgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiY291bGQgbm90IGNyZWF0ZSBzeW5jX3RocmVhZCBkdWUgdG8gJWQuLi4gIgotCQkJICAicmV0cnlpbmcuXG4iLCBwaWQpOwotCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDAwKTsKLQkJZ290byByZXBlYXQ7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzksODEgKzgwNSwxMjYgQEAKIAogaW50IHN0YXJ0X3N5bmNfdGhyZWFkKGludCBzdGF0ZSwgY2hhciAqbWNhc3RfaWZuLCBfX3U4IHN5bmNpZCkKIHsKLQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhzdGFydHVwKTsKLQlwaWRfdCBwaWQ7CiAJc3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvOwotCi0JaWYgKChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIgJiYgc3luY19tYXN0ZXJfcGlkKSB8fAotCSAgICAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfQkFDS1VQICYmIHN5bmNfYmFja3VwX3BpZCkpCi0JCXJldHVybiAtRUVYSVNUOwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgdGluZm8gd2lsbCBiZSBmcmVlZCBpbiBzeW5jX3RocmVhZCBvbiBleGl0Ci0JICovCi0JdGluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghdGluZm8pCi0JCXJldHVybiAtRU5PTUVNOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqKnJlYWx0YXNrLCAqdGFzazsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCWNoYXIgKm5hbWUsICpidWYgPSBOVUxMOworCWludCAoKnRocmVhZGZuKSh2b2lkICpkYXRhKTsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKIAogCUlQX1ZTX0RCRyg3LCAiJXM6IHBpZCAlZFxuIiwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQlJUF9WU19EQkcoNywgIkVhY2ggaXBfdnNfc3luY19jb25uIGVudHJ5IG5lZWQgJVpkIGJ5dGVzXG4iLAorCUlQX1ZTX0RCRyg3LCAiRWFjaCBpcF92c19zeW5jX2Nvbm4gZW50cnkgbmVlZHMgJVpkIGJ5dGVzXG4iLAogCQkgIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uKSk7CiAKLQlpcF92c19zeW5jX3N0YXRlIHw9IHN0YXRlOwogCWlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpIHsKKwkJaWYgKHN5bmNfbWFzdGVyX3RocmVhZCkKKwkJCXJldHVybiAtRUVYSVNUOworCiAJCXN0cmxjcHkoaXBfdnNfbWFzdGVyX21jYXN0X2lmbiwgbWNhc3RfaWZuLAogCQkJc2l6ZW9mKGlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4pKTsKIAkJaXBfdnNfbWFzdGVyX3N5bmNpZCA9IHN5bmNpZDsKLQl9IGVsc2UgeworCQlyZWFsdGFzayA9ICZzeW5jX21hc3Rlcl90aHJlYWQ7CisJCW5hbWUgPSAiaXB2c19zeW5jbWFzdGVyIjsKKwkJdGhyZWFkZm4gPSBzeW5jX3RocmVhZF9tYXN0ZXI7CisJCXNvY2sgPSBtYWtlX3NlbmRfc29jaygpOworCX0gZWxzZSBpZiAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfQkFDS1VQKSB7CisJCWlmIChzeW5jX2JhY2t1cF90aHJlYWQpCisJCQlyZXR1cm4gLUVFWElTVDsKKwogCQlzdHJsY3B5KGlwX3ZzX2JhY2t1cF9tY2FzdF9pZm4sIG1jYXN0X2lmbiwKIAkJCXNpemVvZihpcF92c19iYWNrdXBfbWNhc3RfaWZuKSk7CiAJCWlwX3ZzX2JhY2t1cF9zeW5jaWQgPSBzeW5jaWQ7CisJCXJlYWx0YXNrID0gJnN5bmNfYmFja3VwX3RocmVhZDsKKwkJbmFtZSA9ICJpcHZzX3N5bmNiYWNrdXAiOworCQl0aHJlYWRmbiA9IHN5bmNfdGhyZWFkX2JhY2t1cDsKKwkJc29jayA9IG1ha2VfcmVjZWl2ZV9zb2NrKCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdGluZm8tPnN0YXRlID0gc3RhdGU7Ci0JdGluZm8tPnN0YXJ0dXAgPSAmc3RhcnR1cDsKLQotICByZXBlYXQ6Ci0JaWYgKChwaWQgPSBrZXJuZWxfdGhyZWFkKGZvcmtfc3luY190aHJlYWQsIHRpbmZvLCAwKSkgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiY291bGQgbm90IGNyZWF0ZSBmb3JrX3N5bmNfdGhyZWFkIGR1ZSB0byAlZC4uLiAiCi0JCQkgICJyZXRyeWluZy5cbiIsIHBpZCk7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApOwotCQlnb3RvIHJlcGVhdDsKKwlpZiAoSVNfRVJSKHNvY2spKSB7CisJCXJlc3VsdCA9IFBUUl9FUlIoc29jayk7CisJCWdvdG8gb3V0OwogCX0KIAotCXdhaXRfZm9yX2NvbXBsZXRpb24oJnN0YXJ0dXApOworCXNldF9zeW5jX21lc2dfbWF4bGVuKHN0YXRlKTsKKwlpZiAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfQkFDS1VQKSB7CisJCWJ1ZiA9IGttYWxsb2Moc3luY19yZWN2X21lc2dfbWF4bGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYpCisJCQlnb3RvIG91dHNvY2tldDsKKwl9CisKKwl0aW5mbyA9IGttYWxsb2Moc2l6ZW9mKCp0aW5mbyksIEdGUF9LRVJORUwpOworCWlmICghdGluZm8pCisJCWdvdG8gb3V0YnVmOworCisJdGluZm8tPnNvY2sgPSBzb2NrOworCXRpbmZvLT5idWYgPSBidWY7CisKKwl0YXNrID0ga3RocmVhZF9ydW4odGhyZWFkZm4sIHRpbmZvLCBuYW1lKTsKKwlpZiAoSVNfRVJSKHRhc2spKSB7CisJCXJlc3VsdCA9IFBUUl9FUlIodGFzayk7CisJCWdvdG8gb3V0dGluZm87CisJfQorCisJLyogbWFyayBhcyBhY3RpdmUgKi8KKwkqcmVhbHRhc2sgPSB0YXNrOworCWlwX3ZzX3N5bmNfc3RhdGUgfD0gc3RhdGU7CisKKwkvKiBpbmNyZWFzZSB0aGUgbW9kdWxlIHVzZSBjb3VudCAqLworCWlwX3ZzX3VzZV9jb3VudF9pbmMoKTsKIAogCXJldHVybiAwOworCitvdXR0aW5mbzoKKwlrZnJlZSh0aW5mbyk7CitvdXRidWY6CisJa2ZyZWUoYnVmKTsKK291dHNvY2tldDoKKwlzb2NrX3JlbGVhc2Uoc29jayk7CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogCiBpbnQgc3RvcF9zeW5jX3RocmVhZChpbnQgc3RhdGUpCiB7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlpZiAoKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUiAmJiAhc3luY19tYXN0ZXJfcGlkKSB8fAotCSAgICAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfQkFDS1VQICYmICFzeW5jX2JhY2t1cF9waWQpKQotCQlyZXR1cm4gLUVTUkNIOwotCiAJSVBfVlNfREJHKDcsICIlczogcGlkICVkXG4iLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCkpOwotCUlQX1ZTX0lORk8oInN0b3BwaW5nIHN5bmMgdGhyZWFkICVkIC4uLlxuIiwKLQkJICAgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikgPwotCQkgICBzeW5jX21hc3Rlcl9waWQgOiBzeW5jX2JhY2t1cF9waWQpOwogCi0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JYWRkX3dhaXRfcXVldWUoJnN0b3Bfc3luY193YWl0LCAmd2FpdCk7Ci0Jc2V0X3N0b3Bfc3luYyhzdGF0ZSwgMSk7Ci0JaXBfdnNfc3luY19zdGF0ZSAtPSBzdGF0ZTsKLQl3YWtlX3VwKCZzeW5jX3dhaXQpOwotCXNjaGVkdWxlKCk7Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZzdG9wX3N5bmNfd2FpdCwgJndhaXQpOworCWlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpIHsKKwkJaWYgKCFzeW5jX21hc3Rlcl90aHJlYWQpCisJCQlyZXR1cm4gLUVTUkNIOwogCi0JLyogTm90ZTogbm8gbmVlZCB0byByZWFwIHRoZSBzeW5jIHRocmVhZCwgYmVjYXVzZSBpdHMgcGFyZW50Ci0JICAgcHJvY2VzcyBpcyB0aGUgaW5pdCBwcm9jZXNzICovCisJCUlQX1ZTX0lORk8oInN0b3BwaW5nIG1hc3RlciBzeW5jIHRocmVhZCAlZCAuLi5cbiIsCisJCQkgICB0YXNrX3BpZF9ucihzeW5jX21hc3Rlcl90aHJlYWQpKTsKIAotCWlmICgoc3RhdGUgPT0gSVBfVlNfU1RBVEVfTUFTVEVSICYmIHN0b3BfbWFzdGVyX3N5bmMpIHx8Ci0JICAgIChzdGF0ZSA9PSBJUF9WU19TVEFURV9CQUNLVVAgJiYgc3RvcF9iYWNrdXBfc3luYykpCi0JCUlQX1ZTX0JVRygpOworCQkvKgorCQkgKiBUaGUgbG9jayBzeW5jaHJvbml6ZXMgd2l0aCBzYl9xdWV1ZV90YWlsKCksIHNvIHRoYXQgd2UgZG9uJ3QKKwkJICogYWRkIHN5bmMgYnVmZmVycyB0byB0aGUgcXVldWUsIHdoZW4gd2UgYXJlIGFscmVhZHkgaW4KKwkJICogcHJvZ3Jlc3Mgb2Ygc3RvcHBpbmcgdGhlIG1hc3RlciBzeW5jIGRhZW1vbi4KKwkJICovCisKKwkJc3Bpbl9sb2NrKCZpcF92c19zeW5jX2xvY2spOworCQlpcF92c19zeW5jX3N0YXRlICY9IH5JUF9WU19TVEFURV9NQVNURVI7CisJCXNwaW5fdW5sb2NrKCZpcF92c19zeW5jX2xvY2spOworCQlrdGhyZWFkX3N0b3Aoc3luY19tYXN0ZXJfdGhyZWFkKTsKKwkJc3luY19tYXN0ZXJfdGhyZWFkID0gTlVMTDsKKwl9IGVsc2UgaWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX0JBQ0tVUCkgeworCQlpZiAoIXN5bmNfYmFja3VwX3RocmVhZCkKKwkJCXJldHVybiAtRVNSQ0g7CisKKwkJSVBfVlNfSU5GTygic3RvcHBpbmcgYmFja3VwIHN5bmMgdGhyZWFkICVkIC4uLlxuIiwKKwkJCSAgIHRhc2tfcGlkX25yKHN5bmNfYmFja3VwX3RocmVhZCkpOworCisJCWlwX3ZzX3N5bmNfc3RhdGUgJj0gfklQX1ZTX1NUQVRFX0JBQ0tVUDsKKwkJa3RocmVhZF9zdG9wKHN5bmNfYmFja3VwX3RocmVhZCk7CisJCXN5bmNfYmFja3VwX3RocmVhZCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogZGVjcmVhc2UgdGhlIG1vZHVsZSB1c2UgY291bnQgKi8KKwlpcF92c191c2VfY291bnRfZGVjKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfd2xjLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3dsYy5jCmluZGV4IDhhOWQ5MTMuLjc3MmMzY2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfd2xjLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c193bGMuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBJUFZTOiAgICAgICAgV2VpZ2h0ZWQgTGVhc3QtQ29ubmVjdGlvbiBTY2hlZHVsaW5nIG1vZHVsZQogICoKLSAqIFZlcnNpb246ICAgICAkSWQ6IGlwX3ZzX3dsYy5jLHYgMS4xMyAyMDAzLzA0LzE4IDA5OjAzOjE2IHdlbnNvbmcgRXhwICQKLSAqCiAgKiBBdXRob3JzOiAgICAgV2Vuc29uZyBaaGFuZyA8d2Vuc29uZ0BsaW51eHZpcnR1YWxzZXJ2ZXIub3JnPgogICogICAgICAgICAgICAgIFBldGVyIEtlc2UgPHBldGVyLmtlc2VAaWpzLnNpPgogICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfd3JyLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3dyci5jCmluZGV4IDg1YzY4MGEuLjFkNjkzMmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfd3JyLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c193cnIuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBJUFZTOiAgICAgICAgV2VpZ2h0ZWQgUm91bmQtUm9iaW4gU2NoZWR1bGluZyBtb2R1bGUKICAqCi0gKiBWZXJzaW9uOiAgICAgJElkOiBpcF92c193cnIuYyx2IDEuMTIgMjAwMi8wOS8xNSAwODoxNDowOCB3ZW5zb25nIEV4cCAkCi0gKgogICogQXV0aG9yczogICAgIFdlbnNvbmcgWmhhbmcgPHdlbnNvbmdAbGludXh2aXJ0dWFsc2VydmVyLm9yZz4KICAqCiAgKiAgICAgICAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3htaXQuYwppbmRleCBmNjMwMDZjYWUuLjk4OTJkNGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfeG1pdC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfeG1pdC5jCkBAIC0xLDggKzEsNiBAQAogLyoKICAqIGlwX3ZzX3htaXQuYzogdmFyaW91cyBwYWNrZXQgdHJhbnNtaXR0ZXJzIGZvciBJUFZTCiAgKgotICogVmVyc2lvbjogICAgICRJZDogaXBfdnNfeG1pdC5jLHYgMS4yIDIwMDIvMTEvMzAgMDE6NTA6MzUgd2Vuc29uZyBFeHAgJAotICoKICAqIEF1dGhvcnM6ICAgICBXZW5zb25nIFpoYW5nIDx3ZW5zb25nQGxpbnV4dmlydHVhbHNlcnZlci5vcmc+CiAgKiAgICAgICAgICAgICAgSnVsaWFuIEFuYXN0YXNvdiA8amFAc3NpLmJnPgogICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggMjc2Nzg0MS4uZjIzZTYwYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTIxMyw4ICsyMTMsNyBAQAogCWhlbHAKIAkgIE5FVE1BUCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBzdGF0aWMgMToxIE5BVCBtYXBwaW5nIG9mIG5ldHdvcmsKIAkgIGFkZHJlc3Nlcy4gSXQgbWFwcyB0aGUgbmV0d29yayBhZGRyZXNzIHBhcnQsIHdoaWxlIGtlZXBpbmcgdGhlIGhvc3QKLQkgIGFkZHJlc3MgcGFydCBpbnRhY3QuIEl0IGlzIHNpbWlsYXIgdG8gRmFzdCBOQVQsIGV4Y2VwdCB0aGF0Ci0JICBOZXRmaWx0ZXIncyBjb25uZWN0aW9uIHRyYWNraW5nIGRvZXNuJ3Qgd29yayB3ZWxsIHdpdGggRmFzdCBOQVQuCisJICBhZGRyZXNzIHBhcnQgaW50YWN0LgogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtMzY1LDYgKzM2NCwxOCBAQAogCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQ+LiAgSWYgdW5zdXJlLCBzYXkgYE4nLgogCisjIHNlY3VyaXR5IHRhYmxlIGZvciBNQUMgcG9saWN5Citjb25maWcgSVBfTkZfU0VDVVJJVFkKKwl0cmlzdGF0ZSAiU2VjdXJpdHkgdGFibGUiCisJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUworCWRlcGVuZHMgb24gU0VDVVJJVFkKKwlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGEgYHNlY3VyaXR5JyB0YWJsZSB0byBpcHRhYmxlcywgZm9yIHVzZQorCSAgd2l0aCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgKE1BQykgcG9saWN5LgorCSAKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKICMgQVJQIHRhYmxlcwogY29uZmlnIElQX05GX0FSUFRBQkxFUwogCXRyaXN0YXRlICJBUlAgdGFibGVzIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggZDliOTJmYi4uM2YzMTI5MWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTQyLDYgKzQyLDcgQEAKIG9iai0kKENPTkZJR19JUF9ORl9NQU5HTEUpICs9IGlwdGFibGVfbWFuZ2xlLm8KIG9iai0kKENPTkZJR19ORl9OQVQpICs9IGlwdGFibGVfbmF0Lm8KIG9iai0kKENPTkZJR19JUF9ORl9SQVcpICs9IGlwdGFibGVfcmF3Lm8KK29iai0kKENPTkZJR19JUF9ORl9TRUNVUklUWSkgKz0gaXB0YWJsZV9zZWN1cml0eS5vCiAKICMgbWF0Y2hlcwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFKSArPSBpcHRfYWRkcnR5cGUubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwppbmRleCAyNmEzN2NlLi40MzJjZTlkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwpAQCAtMTU2LDcgKzE1Niw2IEBACiAJY2FzZSBJUFFfQ09QWV9NRVRBOgogCWNhc2UgSVBRX0NPUFlfTk9ORToKIAkJc2l6ZSA9IE5MTVNHX1NQQUNFKHNpemVvZigqcG1zZykpOwotCQlkYXRhX2xlbiA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBJUFFfQ09QWV9QQUNLRVQ6CkBAIC0yMjQsOCArMjIzLDYgQEAKIAlyZXR1cm4gc2tiOwogCiBubG1zZ19mYWlsdXJlOgotCWlmIChza2IpCi0JCWtmcmVlX3NrYihza2IpOwogCSplcnJwID0gLUVJTlZBTDsKIAlwcmludGsoS0VSTl9FUlIgImlwX3F1ZXVlOiBlcnJvciBjcmVhdGluZyBwYWNrZXQgbWVzc2FnZVxuIik7CiAJcmV0dXJuIE5VTEw7CkBAIC00ODAsNyArNDc3LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAkvKiBEcm9wIGFueSBwYWNrZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZG93bmVkIGRldmljZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwppbmRleCA4NGMyNmRkLi4wODQxYWVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGV2ZW50ID09IE5FVERFVl9ET1dOKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQ3MmFjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqICJzZWN1cml0eSIgdGFibGUKKyAqCisgKiBUaGlzIGlzIGZvciB1c2UgYnkgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIChNQUMpIHNlY3VyaXR5IG1vZGVscywKKyAqIHdoaWNoIG5lZWQgdG8gYmUgYWJsZSB0byBtYW5hZ2Ugc2VjdXJpdHkgcG9saWN5IGluIHNlcGFyYXRlIGNvbnRleHQKKyAqIHRvIERBQy4KKyAqCisgKiBCYXNlZCBvbiBpcHRhYmxlX21hbmdsZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IFBhdWwgYFJ1c3R5JyBSdXNzZWxsICYgTWljaGFlbCBKLiBOZXVsaW5nCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbSA8YXQ+IG5ldGZpbHRlci5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiwgSmFtZXMgTW9ycmlzIDxqbW9ycmlzIDxhdD4gcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphbWVzIE1vcnJpcyA8am1vcnJpcyA8YXQ+IHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImlwdGFibGVzIHNlY3VyaXR5IHRhYmxlLCBmb3IgTUFDIHJ1bGVzIik7CisKKyNkZWZpbmUgU0VDVVJJVFlfVkFMSURfSE9PS1MJKDEgPDwgTkZfSU5FVF9MT0NBTF9JTikgfCBcCisJCQkJKDEgPDwgTkZfSU5FVF9GT1JXQVJEKSB8IFwKKwkJCQkoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkKKworc3RhdGljIHN0cnVjdAoreworCXN0cnVjdCBpcHRfcmVwbGFjZSByZXBsOworCXN0cnVjdCBpcHRfc3RhbmRhcmQgZW50cmllc1szXTsKKwlzdHJ1Y3QgaXB0X2Vycm9yIHRlcm07Cit9IGluaXRpYWxfdGFibGUgX19pbml0ZGF0YSA9IHsKKwkucmVwbCA9IHsKKwkJLm5hbWUgPSAic2VjdXJpdHkiLAorCQkudmFsaWRfaG9va3MgPSBTRUNVUklUWV9WQUxJRF9IT09LUywKKwkJLm51bV9lbnRyaWVzID0gNCwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAzICsgc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAorCQkuaG9va19lbnRyeSA9IHsKKwkJCVtORl9JTkVUX0xPQ0FMX0lOXSAJPSAwLAorCQkJW05GX0lORVRfRk9SV0FSRF0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAorCQkJW05GX0lORVRfTE9DQUxfT1VUXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyLAorCQl9LAorCQkudW5kZXJmbG93ID0geworCQkJW05GX0lORVRfTE9DQUxfSU5dIAk9IDAsCisJCQlbTkZfSU5FVF9GT1JXQVJEXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCisJCQlbTkZfSU5FVF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIsCisJCX0sCisJfSwKKwkuZW50cmllcyA9IHsKKwkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KKwkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLworCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KKwl9LAorCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgc2VjdXJpdHlfdGFibGUgPSB7CisJLm5hbWUJCT0gInNlY3VyaXR5IiwKKwkudmFsaWRfaG9va3MJPSBTRUNVUklUWV9WQUxJRF9IT09LUywKKwkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQoc2VjdXJpdHlfdGFibGUubG9jayksCisJLm1lCQk9IFRISVNfTU9EVUxFLAorCS5hZgkJPSBBRl9JTkVULAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludAoraXB0X2xvY2FsX2luX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCisJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKKwkJCSAgICBuZl9sb2NhbF9pbl9uZXQoaW4sIG91dCktPmlwdjQuaXB0YWJsZV9zZWN1cml0eSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2lwdF9mb3J3YXJkX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCisJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgIG5mX2ZvcndhcmRfbmV0KGluLCBvdXQpLT5pcHY0LmlwdGFibGVfc2VjdXJpdHkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitpcHRfbG9jYWxfb3V0X2hvb2sodW5zaWduZWQgaW50IGhvb2ssCisJCSAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJLyogU29tZWJvZHkgaXMgcGxheWluZyB3aXRoIHJhdyBzb2NrZXRzLiAqLworCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpCisJICAgIHx8IGlwX2hkcmxlbihza2IpIDwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0lORk8gImlwdGFibGVfc2VjdXJpdHk6IGlnbm9yaW5nIHNob3J0ICIKKwkJCSAgICAgICAiU09DS19SQVcgcGFja2V0LlxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgIG5mX2xvY2FsX291dF9uZXQoaW4sIG91dCktPmlwdjQuaXB0YWJsZV9zZWN1cml0eSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB0X29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7CisJeworCQkuaG9vawkJPSBpcHRfbG9jYWxfaW5faG9vaywKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfU0VDVVJJVFksCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdF9mb3J3YXJkX2hvb2ssCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSU5FVF9GT1JXQVJELAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfU0VDVVJJVFksCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdF9sb2NhbF9vdXRfaG9vaywKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX1NFQ1VSSVRZLAorCX0sCit9OworCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaXB0YWJsZV9zZWN1cml0eV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJbmV0LT5pcHY0LmlwdGFibGVfc2VjdXJpdHkgPQorCQlpcHRfcmVnaXN0ZXJfdGFibGUobmV0LCAmc2VjdXJpdHlfdGFibGUsICZpbml0aWFsX3RhYmxlLnJlcGwpOworCisJaWYgKElTX0VSUihuZXQtPmlwdjQuaXB0YWJsZV9zZWN1cml0eSkpCisJCXJldHVybiBQVFJfRVJSKG5ldC0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdGFibGVfc2VjdXJpdHlfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCWlwdF91bnJlZ2lzdGVyX3RhYmxlKG5ldC0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5KTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHRhYmxlX3NlY3VyaXR5X25ldF9vcHMgPSB7CisJLmluaXQgPSBpcHRhYmxlX3NlY3VyaXR5X25ldF9pbml0LAorCS5leGl0ID0gaXB0YWJsZV9zZWN1cml0eV9uZXRfZXhpdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlwdGFibGVfc2VjdXJpdHlfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHRhYmxlX3NlY3VyaXR5X25ldF9vcHMpOworICAgICAgICBpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfdGFibGU7CisKKwlyZXR1cm4gcmV0OworCitjbGVhbnVwX3RhYmxlOgorCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB0YWJsZV9zZWN1cml0eV9uZXRfb3BzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXB0YWJsZV9zZWN1cml0eV9maW5pKHZvaWQpCit7CisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdGFibGVfc2VjdXJpdHlfbmV0X29wcyk7Cit9CisKK21vZHVsZV9pbml0KGlwdGFibGVfc2VjdXJpdHlfaW5pdCk7Cittb2R1bGVfZXhpdChpcHRhYmxlX3NlY3VyaXR5X2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfY29tcGF0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYwppbmRleCA0MGE0NmQ0Li4zYTAyMDcyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYwpAQCAtMTgsMTkgKzE4LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgotCi0jaWZkZWYgQ09ORklHX05GX0NUX0FDQ1QKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXNlcV9wcmludF9jb3VudGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCi0JCSAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfY291bnRlciAqY291bnRlcikKLXsKLQlyZXR1cm4gc2VxX3ByaW50ZihzLCAicGFja2V0cz0lbGx1IGJ5dGVzPSVsbHUgIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyljb3VudGVyLT5wYWNrZXRzLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWNvdW50ZXItPmJ5dGVzKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHNlcV9wcmludF9jb3VudGVycyh4LCB5KQkwCi0jZW5kaWYKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0Lmg+CiAKIHN0cnVjdCBjdF9pdGVyX3N0YXRlIHsKIAl1bnNpZ25lZCBpbnQgYnVja2V0OwpAQCAtMTI3LDcgKzExNSw3IEBACiAJCQlsM3Byb3RvLCBsNHByb3RvKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKLQlpZiAoc2VxX3ByaW50X2NvdW50ZXJzKHMsICZjdC0+Y291bnRlcnNbSVBfQ1RfRElSX09SSUdJTkFMXSkpCisJaWYgKHNlcV9wcmludF9hY2N0KHMsIGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCWlmICghKHRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKSkKQEAgLTEzOCw3ICsxMjYsNyBAQAogCQkJbDNwcm90bywgbDRwcm90bykpCiAJCXJldHVybiAtRU5PU1BDOwogCi0JaWYgKHNlcV9wcmludF9jb3VudGVycyhzLCAmY3QtPmNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0pKQorCWlmIChzZXFfcHJpbnRfYWNjdChzLCBjdCwgSVBfQ1RfRElSX1JFUExZKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAlpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCAmY3QtPnN0YXR1cykpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCmluZGV4IDc4YWIxOWEuLjk3NzkxMDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCkBAIC04Nyw5ICs4Nyw4IEBACiAJICAgbWVhbnMgdGhpcyB3aWxsIG9ubHkgcnVuIG9uY2UgZXZlbiBpZiBjb3VudCBoaXRzIHplcm8gdHdpY2UKIAkgICAodGhlb3JldGljYWxseSBwb3NzaWJsZSB3aXRoIFNNUCkgKi8KIAlpZiAoQ1RJTkZPMkRJUihjdGluZm8pID09IElQX0NUX0RJUl9SRVBMWSkgewotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3QtPnByb3RvLmljbXAuY291bnQpCi0JCSAgICAmJiBkZWxfdGltZXIoJmN0LT50aW1lb3V0KSkKLQkJCWN0LT50aW1lb3V0LmZ1bmN0aW9uKCh1bnNpZ25lZCBsb25nKWN0KTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0LT5wcm90by5pY21wLmNvdW50KSkKKwkJCW5mX2N0X2tpbGxfYWNjdChjdCwgY3RpbmZvLCBza2IpOwogCX0gZWxzZSB7CiAJCWF0b21pY19pbmMoJmN0LT5wcm90by5pY21wLmNvdW50KTsKIAkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfUFJPVE9JTkZPX1ZPTEFUSUxFLCBza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwppbmRleCBkMmE4ODdmLi42YzZhM2NiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMjQwLDEyICsyNDAsMTIgQEAKIAkgICBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgZm9yIHNvdXJjZSAoaWUuIE5BVC9tYXNxKSBtYXBwaW5ncy4KIAkgICBTbyBmYXIsIHdlIGRvbid0IGRvIGxvY2FsIHNvdXJjZSBtYXBwaW5ncywgc28gbXVsdGlwbGUKIAkgICBtYW5pcHMgbm90IGFuIGlzc3VlLiAgKi8KLQlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpIHsKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMgJiYKKwkgICAgIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fUkFORE9NKSkgewogCQlpZiAoZmluZF9hcHByb3ByaWF0ZV9zcmMob3JpZ190dXBsZSwgdHVwbGUsIHJhbmdlKSkgewogCQkJcHJfZGVidWcoImdldF91bmlxdWVfdHVwbGU6IEZvdW5kIGN1cnJlbnQgc3JjIG1hcFxuIik7Ci0JCQlpZiAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fUkFORE9NKSkKLQkJCQlpZiAoIW5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCi0JCQkJCXJldHVybjsKKwkJCWlmICghbmZfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGN0KSkKKwkJCQlyZXR1cm47CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fc2N0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19zY3RwLmMKaW5kZXggODJlNGMwZS4uNjVlNDcwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19zY3RwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19zY3RwLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAlzY3RwX3NjdHBoZHJfdCAqaGRyOwogCXVuc2lnbmVkIGludCBoZHJvZmYgPSBpcGhkcm9mZiArIGlwaC0+aWhsKjQ7CiAJX19iZTMyIG9sZGlwLCBuZXdpcDsKLQl1MzIgY3JjMzI7CisJX19iZTMyIGNyYzMyOwogCiAJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIGhkcm9mZiArIHNpemVvZigqaGRyKSkpCiAJCXJldHVybiBmYWxzZTsKQEAgLTYxLDcgKzYxLDcgQEAKIAkJY3JjMzIgPSBzY3RwX3VwZGF0ZV9ja3N1bSgodTggKilza2ItPmRhdGEsIHNrYl9oZWFkbGVuKHNrYiksCiAJCQkJCSAgY3JjMzIpOwogCWNyYzMyID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOwotCWhkci0+Y2hlY2tzdW0gPSBodG9ubChjcmMzMik7CisJaGRyLT5jaGVja3N1bSA9IGNyYzMyOwogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYwppbmRleCA0MzM0ZDVjLi4xNDU0NDMyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc2lwLmMKQEAgLTMxOCwxMSArMzE4LDExIEBACiAJCQkgICAgIGJ1ZmZlciwgYnVmbGVuKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIG1hbmdsZV9zZHBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGNoYXIgKipkcHRyLAotCQkJCSAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKLQkJCQkgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0eXBlLAotCQkJCSAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHRlcm0sCi0JCQkJICBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCitzdGF0aWMgaW50IG1hbmdsZV9zZHBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGNoYXIgKipkcHRyLAorCQkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJICAgICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdHlwZSwKKwkJCSAgICAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHRlcm0sCisJCQkgICAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKIHsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKQEAgLTMzMCw5ICszMzAsOSBAQAogCiAJaWYgKGN0X3NpcF9nZXRfc2RwX2hlYWRlcihjdCwgKmRwdHIsIGRhdGFvZmYsICpkYXRhbGVuLCB0eXBlLCB0ZXJtLAogCQkJCSAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4pIDw9IDApCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0VOVDsKIAlyZXR1cm4gbWFuZ2xlX3BhY2tldChza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKLQkJCSAgICAgYnVmZmVyLCBidWZsZW4pOworCQkJICAgICBidWZmZXIsIGJ1ZmxlbikgPyAwIDogLUVJTlZBTDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2RwX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgY2hhciAqKmRwdHIsCkBAIC0zNDYsOCArMzQ2LDggQEAKIAl1bnNpZ25lZCBpbnQgYnVmbGVuOwogCiAJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsIE5JUFFVQURfRk1ULCBOSVBRVUFEKGFkZHItPmlwKSk7Ci0JaWYgKCFtYW5nbGVfc2RwX3BhY2tldChza2IsIGRwdHIsIGRhdGFvZmYsIGRhdGFsZW4sIHR5cGUsIHRlcm0sCi0JCQkgICAgICAgYnVmZmVyLCBidWZsZW4pKQorCWlmIChtYW5nbGVfc2RwX3BhY2tldChza2IsIGRwdHIsIGRhdGFvZmYsIGRhdGFsZW4sIHR5cGUsIHRlcm0sCisJCQkgICAgICBidWZmZXIsIGJ1ZmxlbikpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIG1hbmdsZV9jb250ZW50X2xlbihza2IsIGRwdHIsIGRhdGFsZW4pOwpAQCAtMzgxLDE1ICszODEsMjcgQEAKIAogCS8qIE1hbmdsZSBzZXNzaW9uIGRlc2NyaXB0aW9uIG93bmVyIGFuZCBjb250YWN0IGFkZHJlc3NlcyAqLwogCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUuJXUuJXUuJXUiLCBOSVBRVUFEKGFkZHItPmlwKSk7Ci0JaWYgKCFtYW5nbGVfc2RwX3BhY2tldChza2IsIGRwdHIsIGRhdGFvZmYsIGRhdGFsZW4sCisJaWYgKG1hbmdsZV9zZHBfcGFja2V0KHNrYiwgZHB0ciwgZGF0YW9mZiwgZGF0YWxlbiwKIAkJCSAgICAgICBTRFBfSERSX09XTkVSX0lQNCwgU0RQX0hEUl9NRURJQSwKIAkJCSAgICAgICBidWZmZXIsIGJ1ZmxlbikpCiAJCXJldHVybiAwOwogCi0JaWYgKCFtYW5nbGVfc2RwX3BhY2tldChza2IsIGRwdHIsIGRhdGFvZmYsIGRhdGFsZW4sCi0JCQkgICAgICAgU0RQX0hEUl9DT05ORUNUSU9OX0lQNCwgU0RQX0hEUl9NRURJQSwKLQkJCSAgICAgICBidWZmZXIsIGJ1ZmxlbikpCisJc3dpdGNoIChtYW5nbGVfc2RwX3BhY2tldChza2IsIGRwdHIsIGRhdGFvZmYsIGRhdGFsZW4sCisJCQkJICBTRFBfSERSX0NPTk5FQ1RJT05fSVA0LCBTRFBfSERSX01FRElBLAorCQkJCSAgYnVmZmVyLCBidWZsZW4pKSB7CisJY2FzZSAwOgorCS8qCisJICogUkZDIDIzMjc6CisJICoKKwkgKiBTZXNzaW9uIGRlc2NyaXB0aW9uCisJICoKKwkgKiBjPSogKGNvbm5lY3Rpb24gaW5mb3JtYXRpb24gLSBub3QgcmVxdWlyZWQgaWYgaW5jbHVkZWQgaW4gYWxsIG1lZGlhKQorCSAqLworCWNhc2UgLUVOT0VOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CisJfQogCiAJcmV0dXJuIG1hbmdsZV9jb250ZW50X2xlbihza2IsIGRwdHIsIGRhdGFsZW4pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvYy5jIGIvbmV0L2lwdjQvcHJvYy5jCmluZGV4IDU1MjE2OWIuLjgzNDM1NmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Byb2MuYworKysgYi9uZXQvaXB2NC9wcm9jLmMKQEAgLTcsOCArNyw2IEBACiAgKgkJUFJPQyBmaWxlIHN5c3RlbS4gIEl0IGlzIG1haW5seSB1c2VkIGZvciBkZWJ1Z2dpbmcgYW5kCiAgKgkJc3RhdGlzdGljcy4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IHByb2MuYyx2IDEuNDUgMjAwMS8wNS8xNiAxNjo0NTozNSBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUdlcmFsZCBKLiBIZWltLCA8aGVpbUBwZWFudXRzLmluZm9ybWF0aWsudW5pLXR1ZWJpbmdlbi5kZT4KICAqCQlGcmVkIEJhdW1nYXJ0ZW4sIDxkYzZpcUBpbnN1MS5ldGVjLnVuaS1rYXJsc3J1aGUuZGU+CkBAIC03MywzMiArNzEsNyBAQAogCiBzdGF0aWMgaW50IHNvY2tzdGF0X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBlcnI7Ci0Jc3RydWN0IG5ldCAqbmV0OwotCi0JZXJyID0gLUVOWElPOwotCW5ldCA9IGdldF9wcm9jX25ldChpbm9kZSk7Ci0JaWYgKG5ldCA9PSBOVUxMKQotCQlnb3RvIGVycl9uZXQ7Ci0KLQllcnIgPSBzaW5nbGVfb3BlbihmaWxlLCBzb2Nrc3RhdF9zZXFfc2hvdywgbmV0KTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfb3BlbjsKLQotCXJldHVybiAwOwotCi1lcnJfb3BlbjoKLQlwdXRfbmV0KG5ldCk7Ci1lcnJfbmV0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc29ja3N0YXRfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IG5ldCAqbmV0ID0gKChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGEpLT5wcml2YXRlOwotCi0JcHV0X25ldChuZXQpOwotCXJldHVybiBzaW5nbGVfcmVsZWFzZShpbm9kZSwgZmlsZSk7CisJcmV0dXJuIHNpbmdsZV9vcGVuX25ldChpbm9kZSwgZmlsZSwgc29ja3N0YXRfc2VxX3Nob3cpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzb2Nrc3RhdF9zZXFfZm9wcyA9IHsKQEAgLTEwNiw3ICs3OSw3IEBACiAJLm9wZW4JID0gc29ja3N0YXRfc2VxX29wZW4sCiAJLnJlYWQJID0gc2VxX3JlYWQsCiAJLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzb2Nrc3RhdF9zZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlX25ldCwKIH07CiAKIC8qIHNubXAgaXRlbXMgKi8KQEAgLTI2OCwxMSArMjQxLDEyIEBACiAKIAlpbnQgaiwgaSwgY291bnQ7CiAJc3RhdGljIGludCBvdXRbUEVSTElORV07CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxLT5wcml2YXRlOwogCiAJY291bnQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBJQ01QTVNHX01JQl9NQVg7IGkrKykgewogCi0JCWlmIChzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIGljbXBtc2dfc3RhdGlzdGljcywgaSkpCisJCWlmIChzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIG5ldC0+bWliLmljbXBtc2dfc3RhdGlzdGljcywgaSkpCiAJCQlvdXRbY291bnQrK10gPSBpOwogCQlpZiAoY291bnQgPCBQRVJMSU5FKQogCQkJY29udGludWU7CkBAIC0yODQsNyArMjU4LDcgQEAKIAkJc2VxX3ByaW50ZihzZXEsICJcbkljbXBNc2c6ICIpOwogCQlmb3IgKGogPSAwOyBqIDwgUEVSTElORTsgKytqKQogCQkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIGljbXBtc2dfc3RhdGlzdGljcywKKwkJCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIG5ldC0+bWliLmljbXBtc2dfc3RhdGlzdGljcywKIAkJCQlvdXRbal0pKTsKIAkJc2VxX3B1dGMoc2VxLCAnXG4nKTsKIAl9CkBAIC0yOTYsNyArMjcwLDcgQEAKIAkJc2VxX3ByaW50ZihzZXEsICJcbkljbXBNc2c6Iik7CiAJCWZvciAoaiA9IDA7IGogPCBjb3VudDsgKytqKQogCQkJc2VxX3ByaW50ZihzZXEsICIgJWx1Iiwgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKQotCQkJCWljbXBtc2dfc3RhdGlzdGljcywgb3V0W2pdKSk7CisJCQkJbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLCBvdXRbal0pKTsKIAl9CiAKICN1bmRlZiBQRVJMSU5FCkBAIC0zMDUsNiArMjc5LDcgQEAKIHN0YXRpYyB2b2lkIGljbXBfcHV0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewogCWludCBpOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcS0+cHJpdmF0ZTsKIAogCXNlcV9wdXRzKHNlcSwgIlxuSWNtcDogSW5Nc2dzIEluRXJyb3JzIik7CiAJZm9yIChpPTA7IGljbXBtaWJtYXBbaV0ubmFtZSAhPSBOVUxMOyBpKyspCkBAIC0zMTMsMTggKzI4OCwxOCBAQAogCWZvciAoaT0wOyBpY21wbWlibWFwW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiBPdXQlcyIsIGljbXBtaWJtYXBbaV0ubmFtZSk7CiAJc2VxX3ByaW50ZihzZXEsICJcbkljbXA6ICVsdSAlbHUiLAotCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIGljbXBfc3RhdGlzdGljcywgSUNNUF9NSUJfSU5NU0dTKSwKLQkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKSBpY21wX3N0YXRpc3RpY3MsIElDTVBfTUlCX0lORVJST1JTKSk7CisJCXNubXBfZm9sZF9maWVsZCgodm9pZCAqKikgbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzLCBJQ01QX01JQl9JTk1TR1MpLAorCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIG5ldC0+bWliLmljbXBfc3RhdGlzdGljcywgSUNNUF9NSUJfSU5FUlJPUlMpKTsKIAlmb3IgKGk9MDsgaWNtcG1pYm1hcFtpXS5uYW1lICE9IE5VTEw7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCXNubXBfZm9sZF9maWVsZCgodm9pZCAqKikgaWNtcG1zZ19zdGF0aXN0aWNzLAorCQkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKSBuZXQtPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsCiAJCQkJaWNtcG1pYm1hcFtpXS5pbmRleCkpOwogCXNlcV9wcmludGYoc2VxLCAiICVsdSAlbHUiLAotCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIGljbXBfc3RhdGlzdGljcywgSUNNUF9NSUJfT1VUTVNHUyksCi0JCXNubXBfZm9sZF9maWVsZCgodm9pZCAqKikgaWNtcF9zdGF0aXN0aWNzLCBJQ01QX01JQl9PVVRFUlJPUlMpKTsKKwkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKSBuZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsIElDTVBfTUlCX09VVE1TR1MpLAorCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIG5ldC0+bWliLmljbXBfc3RhdGlzdGljcywgSUNNUF9NSUJfT1VURVJST1JTKSk7CiAJZm9yIChpPTA7IGljbXBtaWJtYXBbaV0ubmFtZSAhPSBOVUxMOyBpKyspCiAJCXNlcV9wcmludGYoc2VxLCAiICVsdSIsCi0JCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIGljbXBtc2dfc3RhdGlzdGljcywKKwkJCXNubXBfZm9sZF9maWVsZCgodm9pZCAqKikgbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLAogCQkJCWljbXBtaWJtYXBbaV0uaW5kZXggfCAweDEwMCkpOwogfQogCkBAIC0zMzQsNiArMzA5LDcgQEAKIHN0YXRpYyBpbnQgc25tcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlpbnQgaTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXEtPnByaXZhdGU7CiAKIAlzZXFfcHV0cyhzZXEsICJJcDogRm9yd2FyZGluZyBEZWZhdWx0VFRMIik7CiAKQEAgLTM0MSwxMiArMzE3LDEyIEBACiAJCXNlcV9wcmludGYoc2VxLCAiICVzIiwgc25tcDRfaXBzdGF0c19saXN0W2ldLm5hbWUpOwogCiAJc2VxX3ByaW50ZihzZXEsICJcbklwOiAlZCAlZCIsCi0JCSAgIElQVjRfREVWQ09ORl9BTEwoJmluaXRfbmV0LCBGT1JXQVJESU5HKSA/IDEgOiAyLAorCQkgICBJUFY0X0RFVkNPTkZfQUxMKG5ldCwgRk9SV0FSRElORykgPyAxIDogMiwKIAkJICAgc3lzY3RsX2lwX2RlZmF1bHRfdHRsKTsKIAogCWZvciAoaSA9IDA7IHNubXA0X2lwc3RhdHNfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKilpcF9zdGF0aXN0aWNzLAorCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKW5ldC0+bWliLmlwX3N0YXRpc3RpY3MsCiAJCQkJCSAgIHNubXA0X2lwc3RhdHNfbGlzdFtpXS5lbnRyeSkpOwogCiAJaWNtcF9wdXQoc2VxKTsJLyogUkZDIDIwMTEgY29tcGF0aWJpbGl0eSAqLwpAQCAtMzYxLDExICszMzcsMTEgQEAKIAkJLyogTWF4Q29ubiBmaWVsZCBpcyBzaWduZWQsIFJGQyAyMDEyICovCiAJCWlmIChzbm1wNF90Y3BfbGlzdFtpXS5lbnRyeSA9PSBUQ1BfTUlCX01BWENPTk4pCiAJCQlzZXFfcHJpbnRmKHNlcSwgIiAlbGQiLAotCQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKil0Y3Bfc3RhdGlzdGljcywKKwkJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0LT5taWIudGNwX3N0YXRpc3RpY3MsCiAJCQkJCQkgICBzbm1wNF90Y3BfbGlzdFtpXS5lbnRyeSkpOwogCQllbHNlCiAJCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKil0Y3Bfc3RhdGlzdGljcywKKwkJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0LT5taWIudGNwX3N0YXRpc3RpY3MsCiAJCQkJCQkgICBzbm1wNF90Y3BfbGlzdFtpXS5lbnRyeSkpOwogCX0KIApAQCAtMzc2LDcgKzM1Miw3IEBACiAJc2VxX3B1dHMoc2VxLCAiXG5VZHA6Iik7CiAJZm9yIChpID0gMDsgc25tcDRfdWRwX2xpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCiAJCXNlcV9wcmludGYoc2VxLCAiICVsdSIsCi0JCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopdWRwX3N0YXRpc3RpY3MsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MsCiAJCQkJCSAgIHNubXA0X3VkcF9saXN0W2ldLmVudHJ5KSk7CiAKIAkvKiB0aGUgVURQIGFuZCBVRFAtTGl0ZSBNSUJzIGFyZSB0aGUgc2FtZSAqLwpAQCAtMzg3LDcgKzM2Myw3IEBACiAJc2VxX3B1dHMoc2VxLCAiXG5VZHBMaXRlOiIpOwogCWZvciAoaSA9IDA7IHNubXA0X3VkcF9saXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKXVkcGxpdGVfc3RhdGlzdGljcywKKwkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRpc3RpY3MsCiAJCQkJCSAgIHNubXA0X3VkcF9saXN0W2ldLmVudHJ5KSk7CiAKIAlzZXFfcHV0YyhzZXEsICdcbicpOwpAQCAtMzk2LDcgKzM3Miw3IEBACiAKIHN0YXRpYyBpbnQgc25tcF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc25tcF9zZXFfc2hvdywgTlVMTCk7CisJcmV0dXJuIHNpbmdsZV9vcGVuX25ldChpbm9kZSwgZmlsZSwgc25tcF9zZXFfc2hvdyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNubXBfc2VxX2ZvcHMgPSB7CkBAIC00MDQsNyArMzgwLDcgQEAKIAkub3BlbgkgPSBzbm1wX3NlcV9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLAogCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZV9uZXQsCiB9OwogCiAKQEAgLTQxNSw2ICszOTEsNyBAQAogc3RhdGljIGludCBuZXRzdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCWludCBpOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcS0+cHJpdmF0ZTsKIAogCXNlcV9wdXRzKHNlcSwgIlRjcEV4dDoiKTsKIAlmb3IgKGkgPSAwOyBzbm1wNF9uZXRfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKQEAgLTQyMyw3ICs0MDAsNyBAQAogCXNlcV9wdXRzKHNlcSwgIlxuVGNwRXh0OiIpOwogCWZvciAoaSA9IDA7IHNubXA0X25ldF9saXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKW5ldF9zdGF0aXN0aWNzLAorCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKW5ldC0+bWliLm5ldF9zdGF0aXN0aWNzLAogCQkJCQkgICBzbm1wNF9uZXRfbGlzdFtpXS5lbnRyeSkpOwogCiAJc2VxX3B1dHMoc2VxLCAiXG5JcEV4dDoiKTsKQEAgLTQzMyw3ICs0MTAsNyBAQAogCXNlcV9wdXRzKHNlcSwgIlxuSXBFeHQ6Iik7CiAJZm9yIChpID0gMDsgc25tcDRfaXBleHRzdGF0c19saXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKWlwX3N0YXRpc3RpY3MsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcywKIAkJCQkJICAgc25tcDRfaXBleHRzdGF0c19saXN0W2ldLmVudHJ5KSk7CiAKIAlzZXFfcHV0YyhzZXEsICdcbicpOwpAQCAtNDQyLDcgKzQxOSw3IEBACiAKIHN0YXRpYyBpbnQgbmV0c3RhdF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbmV0c3RhdF9zZXFfc2hvdywgTlVMTCk7CisJcmV0dXJuIHNpbmdsZV9vcGVuX25ldChpbm9kZSwgZmlsZSwgbmV0c3RhdF9zZXFfc2hvdyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5ldHN0YXRfc2VxX2ZvcHMgPSB7CkBAIC00NTAsMTggKzQyNywzMiBAQAogCS5vcGVuCSA9IG5ldHN0YXRfc2VxX29wZW4sCiAJLnJlYWQJID0gc2VxX3JlYWQsCiAJLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlX25ldCwKIH07CiAKIHN0YXRpYyBfX25ldF9pbml0IGludCBpcF9wcm9jX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgInNvY2tzdGF0IiwgU19JUlVHTywgJnNvY2tzdGF0X3NlcV9mb3BzKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0X3NvY2tzdGF0OworCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAibmV0c3RhdCIsIFNfSVJVR08sICZuZXRzdGF0X3NlcV9mb3BzKSkKKwkJZ290byBvdXRfbmV0c3RhdDsKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgInNubXAiLCBTX0lSVUdPLCAmc25tcF9zZXFfZm9wcykpCisJCWdvdG8gb3V0X3NubXA7CisKIAlyZXR1cm4gMDsKKworb3V0X3NubXA6CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgIm5ldHN0YXQiKTsKK291dF9uZXRzdGF0OgorCXByb2NfbmV0X3JlbW92ZShuZXQsICJzb2Nrc3RhdCIpOworb3V0X3NvY2tzdGF0OgorCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIGlwX3Byb2NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogeworCXByb2NfbmV0X3JlbW92ZShuZXQsICJzbm1wIik7CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgIm5ldHN0YXQiKTsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAic29ja3N0YXQiKTsKIH0KIApAQCAtNDcyLDI0ICs0NjMsNiBAQAogCiBpbnQgX19pbml0IGlwX21pc2NfcHJvY19pbml0KHZvaWQpCiB7Ci0JaW50IHJjID0gMDsKLQotCWlmIChyZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcF9wcm9jX29wcykpCi0JCWdvdG8gb3V0X3Blcm5ldDsKLQotCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAibmV0c3RhdCIsIFNfSVJVR08sICZuZXRzdGF0X3NlcV9mb3BzKSkKLQkJZ290byBvdXRfbmV0c3RhdDsKLQotCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAic25tcCIsIFNfSVJVR08sICZzbm1wX3NlcV9mb3BzKSkKLQkJZ290byBvdXRfc25tcDsKLW91dDoKLQlyZXR1cm4gcmM7Ci1vdXRfc25tcDoKLQlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCAibmV0c3RhdCIpOwotb3V0X25ldHN0YXQ6Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcF9wcm9jX29wcyk7Ci1vdXRfcGVybmV0OgotCXJjID0gLUVOT01FTTsKLQlnb3RvIG91dDsKKwlyZXR1cm4gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBfcHJvY19vcHMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9wcm90b2NvbC5jIGIvbmV0L2lwdjQvcHJvdG9jb2wuYwppbmRleCA5NzFhYjkzLi5lYTUwZGEwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9wcm90b2NvbC5jCisrKyBiL25ldC9pcHY0L3Byb3RvY29sLmMKQEAgLTUsOCArNSw2IEBACiAgKgogICoJCUlORVQgcHJvdG9jb2wgZGlzcGF0Y2ggdGFibGVzLgogICoKLSAqIFZlcnNpb246CSRJZDogcHJvdG9jb2wuYyx2IDEuMTQgMjAwMS8wNS8xOCAwMjoyNTo0OSBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggMzdhMWVjZC4uY2Q5NzU3NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTUsOCArNSw2IEBACiAgKgogICoJCVJBVyAtIGltcGxlbWVudGF0aW9uIG9mIElQICJyYXciIHNvY2tldHMuCiAgKgotICogVmVyc2lvbjoJJElkOiByYXcuYyx2IDEuNjQgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoKQEAgLTMyMiw2ICszMjAsNyBAQAogCQkJdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgaXBobGVuOwpAQCAtMzcwLDcgKzM2OSw3IEBACiAJCWlwaC0+Y2hlY2sgPSBpcF9mYXN0X2NzdW0oKHVuc2lnbmVkIGNoYXIgKilpcGgsIGlwaC0+aWhsKTsKIAl9CiAJaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKQotCQlpY21wX291dF9jb3VudCgoKHN0cnVjdCBpY21waGRyICopCisJCWljbXBfb3V0X2NvdW50KG5ldCwgKChzdHJ1Y3QgaWNtcGhkciAqKQogCQkJc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktPnR5cGUpOwogCiAJZXJyID0gTkZfSE9PSyhQRl9JTkVULCBORl9JTkVUX0xPQ0FMX09VVCwgc2tiLCBOVUxMLCBydC0+dS5kc3QuZGV2LApAQCAtMzg2LDcgKzM4NSw3IEBACiAJZXJyID0gLUVGQVVMVDsKIAlrZnJlZV9za2Ioc2tiKTsKIGVycm9yOgotCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CisJSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTYwOCwxMiArNjA3LDExIEBACiAJc2tfY29tbW9uX3JlbGVhc2Uoc2spOwogfQogCi1zdGF0aWMgaW50IHJhd19kZXN0cm95KHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIHJhd19kZXN0cm95KHN0cnVjdCBzb2NrICpzaykKIHsKIAlsb2NrX3NvY2soc2spOwogCWlwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKIAlyZWxlYXNlX3NvY2soc2spOwotCXJldHVybiAwOwogfQogCiAvKiBUaGlzIGdldHMgcmlkIG9mIGFsbCB0aGUgbmFzdGllcyBpbiBhZl9pbmV0LiAtRGF2ZU0gKi8KQEAgLTk0Nyw3ICs5NDUsNyBAQAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJc2VxX3ByaW50ZihzZXEsICIgIHNsICBsb2NhbF9hZGRyZXNzIHJlbV9hZGRyZXNzICAgc3QgdHhfcXVldWUgIgogCQkJCSJyeF9xdWV1ZSB0ciB0bS0+d2hlbiByZXRybnNtdCAgIHVpZCAgdGltZW91dCAiCi0JCQkJImlub2RlICBkcm9wc1xuIik7CisJCQkJImlub2RlIHJlZiBwb2ludGVyIGRyb3BzXG4iKTsKIAllbHNlCiAJCXJhd19zb2NrX3NlcV9zaG93KHNlcSwgdiwgcmF3X3NlcV9wcml2YXRlKHNlcSktPmJ1Y2tldCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCA5NmJlMzM2Li5lNGFiMGFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTUsOCArNSw2IEBACiAgKgogICoJCVJPVVRFIC0gaW1wbGVtZW50YXRpb24gb2YgdGhlIElQIHJvdXRlci4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IHJvdXRlLmMsdiAxLjEwMyAyMDAyLzAxLzEyIDA3OjQ0OjA5IGRhdmVtIEV4cCAkCi0gKgogICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJQWxhbiBDb3gsIDxndzRwdHNAZ3c0cHRzLmFtcHIub3JnPgpAQCAtMTM0LDcgKzEzMiw2IEBACiAKIHN0YXRpYyB2b2lkIHJ0X3dvcmtlcl9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoZXhwaXJlc193b3JrLCBydF93b3JrZXJfZnVuYyk7Ci1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgcnRfc2VjcmV0X3RpbWVyOwogCiAvKgogICoJSW50ZXJmYWNlIHRvIGdlbmVyaWMgZGVzdGluYXRpb24gY2FjaGUuCkBAIC0yNTMsMjAgKzI1MCwyNSBAQAogc3RhdGljIHN0cnVjdCBydF9oYXNoX2J1Y2tldCAJKnJ0X2hhc2hfdGFibGUgX19yZWFkX21vc3RseTsKIHN0YXRpYyB1bnNpZ25lZAkJCXJ0X2hhc2hfbWFzayBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHVuc2lnbmVkIGludAkJcnRfaGFzaF9sb2cgIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgYXRvbWljX3QJCQlydF9nZW5pZCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJ0X2NhY2hlX3N0YXQsIHJ0X2NhY2hlX3N0YXQpOwogI2RlZmluZSBSVF9DQUNIRV9TVEFUX0lOQyhmaWVsZCkgXAogCShfX3Jhd19nZXRfY3B1X3ZhcihydF9jYWNoZV9zdGF0KS5maWVsZCsrKQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBydF9oYXNoKF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLCBpbnQgaWR4KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcnRfaGFzaChfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwgaW50IGlkeCwKKwkJaW50IGdlbmlkKQogewogCXJldHVybiBqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKShfX2JlMzIpKGRhZGRyKSwKIAkJCSAgICAoX19mb3JjZSB1MzIpKF9fYmUzMikoc2FkZHIpLAotCQkJICAgIGlkeCwgYXRvbWljX3JlYWQoJnJ0X2dlbmlkKSkKKwkJCSAgICBpZHgsIGdlbmlkKQogCQkmIHJ0X2hhc2hfbWFzazsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcnRfZ2VuaWQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBhdG9taWNfcmVhZCgmbmV0LT5pcHY0LnJ0X2dlbmlkKTsKK30KKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdHJ1Y3QgcnRfY2FjaGVfaXRlcl9zdGF0ZSB7CiAJc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwOwpAQCAtMzM2LDcgKzMzOCw3IEBACiAJc3RydWN0IHJ0X2NhY2hlX2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOwogCWlmICgqcG9zKQogCQlyZXR1cm4gcnRfY2FjaGVfZ2V0X2lkeChzZXEsICpwb3MgLSAxKTsKLQlzdC0+Z2VuaWQgPSBhdG9taWNfcmVhZCgmcnRfZ2VuaWQpOworCXN0LT5nZW5pZCA9IHJ0X2dlbmlkKHNlcV9maWxlX25ldChzZXEpKTsKIAlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwogfQogCkBAIC02ODMsNiArNjg1LDExIEBACiAJcmV0dXJuIGRldl9uZXQocnQxLT51LmRzdC5kZXYpID09IGRldl9uZXQocnQyLT51LmRzdC5kZXYpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBydF9pc19leHBpcmVkKHN0cnVjdCBydGFibGUgKnJ0aCkKK3sKKwlyZXR1cm4gcnRoLT5ydF9nZW5pZCAhPSBydF9nZW5pZChkZXZfbmV0KHJ0aC0+dS5kc3QuZGV2KSk7Cit9CisKIC8qCiAgKiBQZXJmb3JtIGEgZnVsbCBzY2FuIG9mIGhhc2ggdGFibGUgYW5kIGZyZWUgYWxsIGVudHJpZXMuCiAgKiBDYW4gYmUgY2FsbGVkIGJ5IGEgc29mdGlycSBvciBhIHByb2Nlc3MuCkBAIC02OTIsNiArNjk5LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3QgcnRhYmxlICpydGgsICpuZXh0OworCXN0cnVjdCBydGFibGUgKiB0YWlsOwogCiAJZm9yIChpID0gMDsgaSA8PSBydF9oYXNoX21hc2s7IGkrKykgewogCQlpZiAocHJvY2Vzc19jb250ZXh0ICYmIG5lZWRfcmVzY2hlZCgpKQpAQCAtNzAxLDExICs3MDksMzkgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9ja19iaChydF9oYXNoX2xvY2tfYWRkcihpKSk7CisjaWZkZWYgQ09ORklHX05FVF9OUworCQl7CisJCXN0cnVjdCBydGFibGUgKiogcHJldiwgKiBwOworCisJCXJ0aCA9IHJ0X2hhc2hfdGFibGVbaV0uY2hhaW47CisKKwkJLyogZGVmZXIgcmVsZWFzaW5nIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGFmdGVyIHNwaW5fdW5sb2NrICovCisJCWZvciAodGFpbCA9IHJ0aDsgdGFpbDsgdGFpbCA9IHRhaWwtPnUuZHN0LnJ0X25leHQpCisJCQlpZiAoIXJ0X2lzX2V4cGlyZWQodGFpbCkpCisJCQkJYnJlYWs7CisJCWlmIChydGggIT0gdGFpbCkKKwkJCXJ0X2hhc2hfdGFibGVbaV0uY2hhaW4gPSB0YWlsOworCisJCS8qIGNhbGwgcnRfZnJlZSBvbiBlbnRyaWVzIGFmdGVyIHRoZSB0YWlsIHJlcXVpcmluZyBmbHVzaCAqLworCQlwcmV2ID0gJnJ0X2hhc2hfdGFibGVbaV0uY2hhaW47CisJCWZvciAocCA9ICpwcmV2OyBwOyBwID0gbmV4dCkgeworCQkJbmV4dCA9IHAtPnUuZHN0LnJ0X25leHQ7CisJCQlpZiAoIXJ0X2lzX2V4cGlyZWQocCkpIHsKKwkJCQlwcmV2ID0gJnAtPnUuZHN0LnJ0X25leHQ7CisJCQl9IGVsc2UgeworCQkJCSpwcmV2ID0gbmV4dDsKKwkJCQlydF9mcmVlKHApOworCQkJfQorCQl9CisJCX0KKyNlbHNlCiAJCXJ0aCA9IHJ0X2hhc2hfdGFibGVbaV0uY2hhaW47CiAJCXJ0X2hhc2hfdGFibGVbaV0uY2hhaW4gPSBOVUxMOworCQl0YWlsID0gTlVMTDsKKyNlbmRpZgogCQlzcGluX3VubG9ja19iaChydF9oYXNoX2xvY2tfYWRkcihpKSk7CiAKLQkJZm9yICg7IHJ0aDsgcnRoID0gbmV4dCkgeworCQlmb3IgKDsgcnRoICE9IHRhaWw7IHJ0aCA9IG5leHQpIHsKIAkJCW5leHQgPSBydGgtPnUuZHN0LnJ0X25leHQ7CiAJCQlydF9mcmVlKHJ0aCk7CiAJCX0KQEAgLTczOCw3ICs3NzQsNyBAQAogCQkJY29udGludWU7CiAJCXNwaW5fbG9ja19iaChydF9oYXNoX2xvY2tfYWRkcihpKSk7CiAJCXdoaWxlICgocnRoID0gKnJ0aHApICE9IE5VTEwpIHsKLQkJCWlmIChydGgtPnJ0X2dlbmlkICE9IGF0b21pY19yZWFkKCZydF9nZW5pZCkpIHsKKwkJCWlmIChydF9pc19leHBpcmVkKHJ0aCkpIHsKIAkJCQkqcnRocCA9IHJ0aC0+dS5kc3QucnRfbmV4dDsKIAkJCQlydF9mcmVlKHJ0aCk7CiAJCQkJY29udGludWU7CkBAIC03ODEsMjEgKzgxNywyMSBAQAogICogbWFueSB0aW1lcyAoMl4yNCkgd2l0aG91dCBnaXZpbmcgcmVjZW50IHJ0X2dlbmlkLgogICogSmVua2lucyBoYXNoIGlzIHN0cm9uZyBlbm91Z2ggdGhhdCBsaXRsZSBjaGFuZ2VzIG9mIHJ0X2dlbmlkIGFyZSBPSy4KICAqLwotc3RhdGljIHZvaWQgcnRfY2FjaGVfaW52YWxpZGF0ZSh2b2lkKQorc3RhdGljIHZvaWQgcnRfY2FjaGVfaW52YWxpZGF0ZShzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJdW5zaWduZWQgY2hhciBzaHVmZmxlOwogCiAJZ2V0X3JhbmRvbV9ieXRlcygmc2h1ZmZsZSwgc2l6ZW9mKHNodWZmbGUpKTsKLQlhdG9taWNfYWRkKHNodWZmbGUgKyAxVSwgJnJ0X2dlbmlkKTsKKwlhdG9taWNfYWRkKHNodWZmbGUgKyAxVSwgJm5ldC0+aXB2NC5ydF9nZW5pZCk7CiB9CiAKIC8qCiAgKiBkZWxheSA8IDAgIDogaW52YWxpZGF0ZSBjYWNoZSAoZmFzdCA6IGVudHJpZXMgd2lsbCBiZSBkZWxldGVkIGxhdGVyKQogICogZGVsYXkgPj0gMCA6IGludmFsaWRhdGUgJiBmbHVzaCBjYWNoZSAoY2FuIGJlIGxvbmcpCiAgKi8KLXZvaWQgcnRfY2FjaGVfZmx1c2goaW50IGRlbGF5KQordm9pZCBydF9jYWNoZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIGludCBkZWxheSkKIHsKLQlydF9jYWNoZV9pbnZhbGlkYXRlKCk7CisJcnRfY2FjaGVfaW52YWxpZGF0ZShuZXQpOwogCWlmIChkZWxheSA+PSAwKQogCQlydF9kb19mbHVzaCghaW5fc29mdGlycSgpKTsKIH0KQEAgLTgwMywxMCArODM5LDExIEBACiAvKgogICogV2UgY2hhbmdlIHJ0X2dlbmlkIGFuZCBsZXQgZ2MgZG8gdGhlIGNsZWFudXAKICAqLwotc3RhdGljIHZvaWQgcnRfc2VjcmV0X3JlYnVpbGQodW5zaWduZWQgbG9uZyBkdW1teSkKK3N0YXRpYyB2b2lkIHJ0X3NlY3JldF9yZWJ1aWxkKHVuc2lnbmVkIGxvbmcgX19uZXQpCiB7Ci0JcnRfY2FjaGVfaW52YWxpZGF0ZSgpOwotCW1vZF90aW1lcigmcnRfc2VjcmV0X3RpbWVyLCBqaWZmaWVzICsgaXBfcnRfc2VjcmV0X2ludGVydmFsKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSAoc3RydWN0IG5ldCAqKV9fbmV0OworCXJ0X2NhY2hlX2ludmFsaWRhdGUobmV0KTsKKwltb2RfdGltZXIoJm5ldC0+aXB2NC5ydF9zZWNyZXRfdGltZXIsIGppZmZpZXMgKyBpcF9ydF9zZWNyZXRfaW50ZXJ2YWwpOwogfQogCiAvKgpAQCAtODgyLDcgKzkxOSw3IEBACiAJCQlydGhwID0gJnJ0X2hhc2hfdGFibGVba10uY2hhaW47CiAJCQlzcGluX2xvY2tfYmgocnRfaGFzaF9sb2NrX2FkZHIoaykpOwogCQkJd2hpbGUgKChydGggPSAqcnRocCkgIT0gTlVMTCkgewotCQkJCWlmIChydGgtPnJ0X2dlbmlkID09IGF0b21pY19yZWFkKCZydF9nZW5pZCkgJiYKKwkJCQlpZiAoIXJ0X2lzX2V4cGlyZWQocnRoKSAmJgogCQkJCQkhcnRfbWF5X2V4cGlyZShydGgsIHRtbywgZXhwaXJlKSkgewogCQkJCQl0bW8gPj49IDE7CiAJCQkJCXJ0aHAgPSAmcnRoLT51LmRzdC5ydF9uZXh0OwpAQCAtOTY0LDcgKzEwMDEsNyBAQAogCiAJc3Bpbl9sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGhhc2gpKTsKIAl3aGlsZSAoKHJ0aCA9ICpydGhwKSAhPSBOVUxMKSB7Ci0JCWlmIChydGgtPnJ0X2dlbmlkICE9IGF0b21pY19yZWFkKCZydF9nZW5pZCkpIHsKKwkJaWYgKHJ0X2lzX2V4cGlyZWQocnRoKSkgewogCQkJKnJ0aHAgPSBydGgtPnUuZHN0LnJ0X25leHQ7CiAJCQlydF9mcmVlKHJ0aCk7CiAJCQljb250aW51ZTsKQEAgLTExNDAsNyArMTE3Nyw3IEBACiAJc3Bpbl9sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGhhc2gpKTsKIAlpcF9ydF9wdXQocnQpOwogCXdoaWxlICgoYXV4ID0gKnJ0aHApICE9IE5VTEwpIHsKLQkJaWYgKGF1eCA9PSBydCB8fCAoYXV4LT5ydF9nZW5pZCAhPSBhdG9taWNfcmVhZCgmcnRfZ2VuaWQpKSkgeworCQlpZiAoYXV4ID09IHJ0IHx8IHJ0X2lzX2V4cGlyZWQoYXV4KSkgewogCQkJKnJ0aHAgPSBhdXgtPnUuZHN0LnJ0X25leHQ7CiAJCQlydF9mcmVlKGF1eCk7CiAJCQljb250aW51ZTsKQEAgLTExODIsNyArMTIxOSw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWZvciAoayA9IDA7IGsgPCAyOyBrKyspIHsKLQkJCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoKGRhZGRyLCBza2V5c1tpXSwgaWtleXNba10pOworCQkJdW5zaWduZWQgaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNrZXlzW2ldLCBpa2V5c1trXSwKKwkJCQkJCXJ0X2dlbmlkKG5ldCkpOwogCiAJCQlydGhwPSZydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluOwogCkBAIC0xMTk0LDcgKzEyMzIsNyBAQAogCQkJCSAgICBydGgtPmZsLmZsNF9zcmMgIT0gc2tleXNbaV0gfHwKIAkJCQkgICAgcnRoLT5mbC5vaWYgIT0gaWtleXNba10gfHwKIAkJCQkgICAgcnRoLT5mbC5paWYgIT0gMCB8fAotCQkJCSAgICBydGgtPnJ0X2dlbmlkICE9IGF0b21pY19yZWFkKCZydF9nZW5pZCkgfHwKKwkJCQkgICAgcnRfaXNfZXhwaXJlZChydGgpIHx8CiAJCQkJICAgICFuZXRfZXEoZGV2X25ldChydGgtPnUuZHN0LmRldiksIG5ldCkpIHsKIAkJCQkJcnRocCA9ICZydGgtPnUuZHN0LnJ0X25leHQ7CiAJCQkJCWNvbnRpbnVlOwpAQCAtMTIzMyw3ICsxMjcxLDcgQEAKIAkJCQlydC0+dS5kc3QubmVpZ2hib3VyCT0gTlVMTDsKIAkJCQlydC0+dS5kc3QuaGgJCT0gTlVMTDsKIAkJCQlydC0+dS5kc3QueGZybQkJPSBOVUxMOwotCQkJCXJ0LT5ydF9nZW5pZAkJPSBhdG9taWNfcmVhZCgmcnRfZ2VuaWQpOworCQkJCXJ0LT5ydF9nZW5pZAkJPSBydF9nZW5pZChuZXQpOwogCQkJCXJ0LT5ydF9mbGFncwkJfD0gUlRDRl9SRURJUkVDVEVEOwogCiAJCQkJLyogR2F0ZXdheSBpcyBkaWZmZXJlbnQgLi4uICovCkBAIC0xMjk3LDcgKzEzMzUsOCBAQAogCQl9IGVsc2UgaWYgKChydC0+cnRfZmxhZ3MgJiBSVENGX1JFRElSRUNURUQpIHx8CiAJCQkgICBydC0+dS5kc3QuZXhwaXJlcykgewogCQkJdW5zaWduZWQgaGFzaCA9IHJ0X2hhc2gocnQtPmZsLmZsNF9kc3QsIHJ0LT5mbC5mbDRfc3JjLAotCQkJCQkJcnQtPmZsLm9pZik7CisJCQkJCQlydC0+Zmwub2lmLAorCQkJCQkJcnRfZ2VuaWQoZGV2X25ldChkc3QtPmRldikpKTsKICNpZiBSVF9DQUNIRV9ERUJVRyA+PSAxCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiaXB2NF9uZWdhdGl2ZV9hZHZpY2U6IHJlZGlyZWN0IHRvICIKIAkJCQkJICBOSVBRVUFEX0ZNVCAiLyUwMnggZHJvcHBlZFxuIiwKQEAgLTEzOTAsNyArMTQyOSw4IEBACiAJCQlicmVhazsKIAkJY2FzZSBFTkVUVU5SRUFDSDoKIAkJCWNvZGUgPSBJQ01QX05FVF9VTlJFQUNIOwotCQkJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOTk9ST1VURVMpOworCQkJSVBfSU5DX1NUQVRTX0JIKGRldl9uZXQocnQtPnUuZHN0LmRldiksCisJCQkJCUlQU1RBVFNfTUlCX0lOTk9ST1VURVMpOwogCQkJYnJlYWs7CiAJCWNhc2UgRUFDQ0VTOgogCQkJY29kZSA9IElDTVBfUEtUX0ZJTFRFUkVEOwpAQCAtMTQ0Niw3ICsxNDg2LDggQEAKIAogCWZvciAoayA9IDA7IGsgPCAyOyBrKyspIHsKIAkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQkJdW5zaWduZWQgaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNrZXlzW2ldLCBpa2V5c1trXSk7CisJCQl1bnNpZ25lZCBoYXNoID0gcnRfaGFzaChkYWRkciwgc2tleXNbaV0sIGlrZXlzW2tdLAorCQkJCQkJcnRfZ2VuaWQobmV0KSk7CiAKIAkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7CkBAIC0xNDYxLDcgKzE1MDIsNyBAQAogCQkJCSAgICBydGgtPmZsLmlpZiAhPSAwIHx8CiAJCQkJICAgIGRzdF9tZXRyaWNfbG9ja2VkKCZydGgtPnUuZHN0LCBSVEFYX01UVSkgfHwKIAkJCQkgICAgIW5ldF9lcShkZXZfbmV0KHJ0aC0+dS5kc3QuZGV2KSwgbmV0KSB8fAotCQkJCSAgICBydGgtPnJ0X2dlbmlkICE9IGF0b21pY19yZWFkKCZydF9nZW5pZCkpCisJCQkJICAgICFydF9pc19leHBpcmVkKHJ0aCkpCiAJCQkJCWNvbnRpbnVlOwogCiAJCQkJaWYgKG5ld19tdHUgPCA2OCB8fCBuZXdfbXR1ID49IG9sZF9tdHUpIHsKQEAgLTE2OTYsNyArMTczNyw3IEBACiAJcnRoLT5mbC5vaWYJPSAwOwogCXJ0aC0+cnRfZ2F0ZXdheQk9IGRhZGRyOwogCXJ0aC0+cnRfc3BlY19kc3Q9IHNwZWNfZHN0OwotCXJ0aC0+cnRfZ2VuaWQJPSBhdG9taWNfcmVhZCgmcnRfZ2VuaWQpOworCXJ0aC0+cnRfZ2VuaWQJPSBydF9nZW5pZChkZXZfbmV0KGRldikpOwogCXJ0aC0+cnRfZmxhZ3MJPSBSVENGX01VTFRJQ0FTVDsKIAlydGgtPnJ0X3R5cGUJPSBSVE5fTVVMVElDQVNUOwogCWlmIChvdXIpIHsKQEAgLTE3MTEsNyArMTc1Miw3IEBACiAJUlRfQ0FDSEVfU1RBVF9JTkMoaW5fc2xvd19tYyk7CiAKIAlpbl9kZXZfcHV0KGluX2Rldik7Ci0JaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNhZGRyLCBkZXYtPmlmaW5kZXgpOworCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgZGV2LT5pZmluZGV4LCBydF9nZW5pZChkZXZfbmV0KGRldikpKTsKIAlyZXR1cm4gcnRfaW50ZXJuX2hhc2goaGFzaCwgcnRoLCAmc2tiLT5ydGFibGUpOwogCiBlX25vYnVmczoKQEAgLTE4MzcsNyArMTg3OCw3IEBACiAKIAlydGgtPnUuZHN0LmlucHV0ID0gaXBfZm9yd2FyZDsKIAlydGgtPnUuZHN0Lm91dHB1dCA9IGlwX291dHB1dDsKLQlydGgtPnJ0X2dlbmlkID0gYXRvbWljX3JlYWQoJnJ0X2dlbmlkKTsKKwlydGgtPnJ0X2dlbmlkID0gcnRfZ2VuaWQoZGV2X25ldChydGgtPnUuZHN0LmRldikpOwogCiAJcnRfc2V0X25leHRob3AocnRoLCByZXMsIGl0YWcpOwogCkBAIC0xODcyLDcgKzE5MTMsOCBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogcHV0IGl0IGludG8gdGhlIGNhY2hlICovCi0JaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNhZGRyLCBmbC0+aWlmKTsKKwloYXNoID0gcnRfaGFzaChkYWRkciwgc2FkZHIsIGZsLT5paWYsCisJCSAgICAgICBydF9nZW5pZChkZXZfbmV0KHJ0aC0+dS5kc3QuZGV2KSkpOwogCXJldHVybiBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsICZza2ItPnJ0YWJsZSk7CiB9CiAKQEAgLTE5OTgsNyArMjA0MCw3IEBACiAJCWdvdG8gZV9ub2J1ZnM7CiAKIAlydGgtPnUuZHN0Lm91dHB1dD0gaXBfcnRfYnVnOwotCXJ0aC0+cnRfZ2VuaWQgPSBhdG9taWNfcmVhZCgmcnRfZ2VuaWQpOworCXJ0aC0+cnRfZ2VuaWQgPSBydF9nZW5pZChuZXQpOwogCiAJYXRvbWljX3NldCgmcnRoLT51LmRzdC5fX3JlZmNudCwgMSk7CiAJcnRoLT51LmRzdC5mbGFncz0gRFNUX0hPU1Q7CkBAIC0yMDI4LDcgKzIwNzAsNyBAQAogCQlydGgtPnJ0X2ZsYWdzIAkmPSB+UlRDRl9MT0NBTDsKIAl9CiAJcnRoLT5ydF90eXBlCT0gcmVzLnR5cGU7Ci0JaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNhZGRyLCBmbC5paWYpOworCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgZmwuaWlmLCBydF9nZW5pZChuZXQpKTsKIAllcnIgPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsICZza2ItPnJ0YWJsZSk7CiAJZ290byBkb25lOwogCkBAIC0yMDc5LDcgKzIxMjEsNyBAQAogCiAJbmV0ID0gZGV2X25ldChkZXYpOwogCXRvcyAmPSBJUFRPU19SVF9NQVNLOwotCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgaWlmKTsKKwloYXNoID0gcnRfaGFzaChkYWRkciwgc2FkZHIsIGlpZiwgcnRfZ2VuaWQobmV0KSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChydGggPSByY3VfZGVyZWZlcmVuY2UocnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0aDsKQEAgLTIwOTEsNyArMjEzMyw3IEBACiAJCSAgICAgKHJ0aC0+ZmwuZmw0X3RvcyBeIHRvcykpID09IDAgJiYKIAkJICAgIHJ0aC0+ZmwubWFyayA9PSBza2ItPm1hcmsgJiYKIAkJICAgIG5ldF9lcShkZXZfbmV0KHJ0aC0+dS5kc3QuZGV2KSwgbmV0KSAmJgotCQkgICAgcnRoLT5ydF9nZW5pZCA9PSBhdG9taWNfcmVhZCgmcnRfZ2VuaWQpKSB7CisJCSAgICAhcnRfaXNfZXhwaXJlZChydGgpKSB7CiAJCQlkc3RfdXNlKCZydGgtPnUuZHN0LCBqaWZmaWVzKTsKIAkJCVJUX0NBQ0hFX1NUQVRfSU5DKGluX2hpdCk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTIyMTksNyArMjI2MSw3IEBACiAJcnRoLT5ydF9zcGVjX2RzdD0gZmwtPmZsNF9zcmM7CiAKIAlydGgtPnUuZHN0Lm91dHB1dD1pcF9vdXRwdXQ7Ci0JcnRoLT5ydF9nZW5pZCA9IGF0b21pY19yZWFkKCZydF9nZW5pZCk7CisJcnRoLT5ydF9nZW5pZCA9IHJ0X2dlbmlkKGRldl9uZXQoZGV2X291dCkpOwogCiAJUlRfQ0FDSEVfU1RBVF9JTkMob3V0X3Nsb3dfdG90KTsKIApAQCAtMjI2OCw3ICsyMzEwLDggQEAKIAlpbnQgZXJyID0gX19ta3JvdXRlX291dHB1dCgmcnRoLCByZXMsIGZsLCBvbGRmbHAsIGRldl9vdXQsIGZsYWdzKTsKIAl1bnNpZ25lZCBoYXNoOwogCWlmIChlcnIgPT0gMCkgewotCQloYXNoID0gcnRfaGFzaChvbGRmbHAtPmZsNF9kc3QsIG9sZGZscC0+Zmw0X3NyYywgb2xkZmxwLT5vaWYpOworCQloYXNoID0gcnRfaGFzaChvbGRmbHAtPmZsNF9kc3QsIG9sZGZscC0+Zmw0X3NyYywgb2xkZmxwLT5vaWYsCisJCQkgICAgICAgcnRfZ2VuaWQoZGV2X25ldChkZXZfb3V0KSkpOwogCQllcnIgPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIHJwKTsKIAl9CiAKQEAgLTI0ODAsNyArMjUyMyw3IEBACiAJdW5zaWduZWQgaGFzaDsKIAlzdHJ1Y3QgcnRhYmxlICpydGg7CiAKLQloYXNoID0gcnRfaGFzaChmbHAtPmZsNF9kc3QsIGZscC0+Zmw0X3NyYywgZmxwLT5vaWYpOworCWhhc2ggPSBydF9oYXNoKGZscC0+Zmw0X2RzdCwgZmxwLT5mbDRfc3JjLCBmbHAtPm9pZiwgcnRfZ2VuaWQobmV0KSk7CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJZm9yIChydGggPSByY3VfZGVyZWZlcmVuY2UocnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0aDsKQEAgLTI0OTMsNyArMjUzNiw3IEBACiAJCSAgICAhKChydGgtPmZsLmZsNF90b3MgXiBmbHAtPmZsNF90b3MpICYKIAkJCSAgICAoSVBUT1NfUlRfTUFTSyB8IFJUT19PTkxJTkspKSAmJgogCQkgICAgbmV0X2VxKGRldl9uZXQocnRoLT51LmRzdC5kZXYpLCBuZXQpICYmCi0JCSAgICBydGgtPnJ0X2dlbmlkID09IGF0b21pY19yZWFkKCZydF9nZW5pZCkpIHsKKwkJICAgICFydF9pc19leHBpcmVkKHJ0aCkpIHsKIAkJCWRzdF91c2UoJnJ0aC0+dS5kc3QsIGppZmZpZXMpOwogCQkJUlRfQ0FDSEVfU1RBVF9JTkMob3V0X2hpdCk7CiAJCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKQEAgLTI1MjQsNyArMjU2Nyw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgaXB2NF9kc3RfYmxhY2tob2xlKHN0cnVjdCBydGFibGUgKipycCwgc3RydWN0IGZsb3dpICpmbHApCitzdGF0aWMgaW50IGlwdjRfZHN0X2JsYWNraG9sZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKipycCwgc3RydWN0IGZsb3dpICpmbHApCiB7CiAJc3RydWN0IHJ0YWJsZSAqb3J0ID0gKnJwOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKikKQEAgLTI1NDgsNyArMjU5MSw3IEBACiAJCXJ0LT5pZGV2ID0gb3J0LT5pZGV2OwogCQlpZiAocnQtPmlkZXYpCiAJCQlpbl9kZXZfaG9sZChydC0+aWRldik7Ci0JCXJ0LT5ydF9nZW5pZCA9IGF0b21pY19yZWFkKCZydF9nZW5pZCk7CisJCXJ0LT5ydF9nZW5pZCA9IHJ0X2dlbmlkKG5ldCk7CiAJCXJ0LT5ydF9mbGFncyA9IG9ydC0+cnRfZmxhZ3M7CiAJCXJ0LT5ydF90eXBlID0gb3J0LT5ydF90eXBlOwogCQlydC0+cnRfZHN0ID0gb3J0LT5ydF9kc3Q7CkBAIC0yNTg0LDcgKzI2MjcsNyBAQAogCQllcnIgPSBfX3hmcm1fbG9va3VwKChzdHJ1Y3QgZHN0X2VudHJ5ICoqKXJwLCBmbHAsIHNrLAogCQkJCSAgICBmbGFncyA/IFhGUk1fTE9PS1VQX1dBSVQgOiAwKTsKIAkJaWYgKGVyciA9PSAtRVJFTU9URSkKLQkJCWVyciA9IGlwdjRfZHN0X2JsYWNraG9sZShycCwgZmxwKTsKKwkJCWVyciA9IGlwdjRfZHN0X2JsYWNraG9sZShuZXQsIHJwLCBmbHApOwogCiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMjgwMyw3ICsyODQ2LDcgQEAKIAkJICAgICBydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QucnRfbmV4dCksIGlkeCsrKSB7CiAJCQlpZiAoIW5ldF9lcShkZXZfbmV0KHJ0LT51LmRzdC5kZXYpLCBuZXQpIHx8IGlkeCA8IHNfaWR4KQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKHJ0LT5ydF9nZW5pZCAhPSBhdG9taWNfcmVhZCgmcnRfZ2VuaWQpKQorCQkJaWYgKHJ0X2lzX2V4cGlyZWQocnQpKQogCQkJCWNvbnRpbnVlOwogCQkJc2tiLT5kc3QgPSBkc3RfY2xvbmUoJnJ0LT51LmRzdCk7CiAJCQlpZiAocnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCkBAIC0yODI3LDE5ICsyODcwLDI1IEBACiAKIHZvaWQgaXBfcnRfbXVsdGljYXN0X2V2ZW50KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldikKIHsKLQlydF9jYWNoZV9mbHVzaCgwKTsKKwlydF9jYWNoZV9mbHVzaChkZXZfbmV0KGluX2Rldi0+ZGV2KSwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi1zdGF0aWMgaW50IGZsdXNoX2RlbGF5OwotCi1zdGF0aWMgaW50IGlwdjRfc3lzY3RsX3J0Y2FjaGVfZmx1c2goY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKK3N0YXRpYyBpbnQgaXB2NF9zeXNjdGxfcnRjYWNoZV9mbHVzaChjdGxfdGFibGUgKl9fY3RsLCBpbnQgd3JpdGUsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYnVmZmVyLAogCQkJCQlzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlpZiAod3JpdGUpIHsKLQkJcHJvY19kb2ludHZlYyhjdGwsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOwotCQlydF9jYWNoZV9mbHVzaChmbHVzaF9kZWxheSk7CisJCWludCBmbHVzaF9kZWxheTsKKwkJY3RsX3RhYmxlIGN0bDsKKwkJc3RydWN0IG5ldCAqbmV0OworCisJCW1lbWNweSgmY3RsLCBfX2N0bCwgc2l6ZW9mKGN0bCkpOworCQljdGwuZGF0YSA9ICZmbHVzaF9kZWxheTsKKwkJcHJvY19kb2ludHZlYygmY3RsLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKworCQluZXQgPSAoc3RydWN0IG5ldCAqKV9fY3RsLT5leHRyYTE7CisJCXJ0X2NhY2hlX2ZsdXNoKG5ldCwgZmx1c2hfZGVsYXkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI4NTUsMjUgKzI5MDQsMTggQEAKIAkJCQkJCXNpemVfdCBuZXdsZW4pCiB7CiAJaW50IGRlbGF5OworCXN0cnVjdCBuZXQgKm5ldDsKIAlpZiAobmV3bGVuICE9IHNpemVvZihpbnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZ2V0X3VzZXIoZGVsYXksIChpbnQgX191c2VyICopbmV3dmFsKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JcnRfY2FjaGVfZmx1c2goZGVsYXkpOworCW5ldCA9IChzdHJ1Y3QgbmV0ICopdGFibGUtPmV4dHJhMTsKKwlydF9jYWNoZV9mbHVzaChuZXQsIGRlbGF5KTsKIAlyZXR1cm4gMDsKIH0KIAogY3RsX3RhYmxlIGlwdjRfcm91dGVfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZSAJPSBORVRfSVBWNF9ST1VURV9GTFVTSCwKLQkJLnByb2NuYW1lCT0gImZsdXNoIiwKLQkJLmRhdGEJCT0gJmZsdXNoX2RlbGF5LAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwMjAwLAotCQkucHJvY19oYW5kbGVyCT0gJmlwdjRfc3lzY3RsX3J0Y2FjaGVfZmx1c2gsCi0JCS5zdHJhdGVneQk9ICZpcHY0X3N5c2N0bF9ydGNhY2hlX2ZsdXNoX3N0cmF0ZWd5LAotCX0sCi0JewogCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ST1VURV9HQ19USFJFU0gsCiAJCS5wcm9jbmFtZQk9ICJnY190aHJlc2giLAogCQkuZGF0YQkJPSAmaXB2NF9kc3Rfb3BzLmdjX3RocmVzaCwKQEAgLTMwMTEsOCArMzA1Myw5NyBAQAogCX0sCiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CisKK3N0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgY3RsX3BhdGggaXB2NF9yb3V0ZV9wYXRoW10gPSB7CisJeyAucHJvY25hbWUgPSAibmV0IiwgLmN0bF9uYW1lID0gQ1RMX05FVCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJpcHY0IiwgLmN0bF9uYW1lID0gTkVUX0lQVjQsIH0sCisJeyAucHJvY25hbWUgPSAicm91dGUiLCAuY3RsX25hbWUgPSBORVRfSVBWNF9ST1VURSwgfSwKKwl7IH0sCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfcm91dGVfZmx1c2hfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZSAJPSBORVRfSVBWNF9ST1VURV9GTFVTSCwKKwkJLnByb2NuYW1lCT0gImZsdXNoIiwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDIwMCwKKwkJLnByb2NfaGFuZGxlcgk9ICZpcHY0X3N5c2N0bF9ydGNhY2hlX2ZsdXNoLAorCQkuc3RyYXRlZ3kJPSAmaXB2NF9zeXNjdGxfcnRjYWNoZV9mbHVzaF9zdHJhdGVneSwKKwl9LAorCXsgLmN0bF9uYW1lID0gMCB9LAorfTsKKworc3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9yb3V0ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGN0bF90YWJsZSAqdGJsOworCisJdGJsID0gaXB2NF9yb3V0ZV9mbHVzaF90YWJsZTsKKwlpZiAobmV0ICE9ICZpbml0X25ldCkgeworCQl0YmwgPSBrbWVtZHVwKHRibCwgc2l6ZW9mKGlwdjRfcm91dGVfZmx1c2hfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHRibCA9PSBOVUxMKQorCQkJZ290byBlcnJfZHVwOworCX0KKwl0YmxbMF0uZXh0cmExID0gbmV0OworCisJbmV0LT5pcHY0LnJvdXRlX2hkciA9CisJCXJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LCBpcHY0X3JvdXRlX3BhdGgsIHRibCk7CisJaWYgKG5ldC0+aXB2NC5yb3V0ZV9oZHIgPT0gTlVMTCkKKwkJZ290byBlcnJfcmVnOworCXJldHVybiAwOworCitlcnJfcmVnOgorCWlmICh0YmwgIT0gaXB2NF9yb3V0ZV9mbHVzaF90YWJsZSkKKwkJa2ZyZWUodGJsKTsKK2Vycl9kdXA6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBfX25ldF9leGl0IHZvaWQgc3lzY3RsX3JvdXRlX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgY3RsX3RhYmxlICp0Ymw7CisKKwl0YmwgPSBuZXQtPmlwdjQucm91dGVfaGRyLT5jdGxfdGFibGVfYXJnOworCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQtPmlwdjQucm91dGVfaGRyKTsKKwlCVUdfT04odGJsID09IGlwdjRfcm91dGVfZmx1c2hfdGFibGUpOworCWtmcmVlKHRibCk7Cit9CisKK3N0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgc3lzY3RsX3JvdXRlX29wcyA9IHsKKwkuaW5pdCA9IHN5c2N0bF9yb3V0ZV9uZXRfaW5pdCwKKwkuZXhpdCA9IHN5c2N0bF9yb3V0ZV9uZXRfZXhpdCwKK307CiAjZW5kaWYKIAorCitzdGF0aWMgX19uZXRfaW5pdCBpbnQgcnRfc2VjcmV0X3RpbWVyX2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCWF0b21pY19zZXQoJm5ldC0+aXB2NC5ydF9nZW5pZCwKKwkJCShpbnQpICgobnVtX3BoeXNwYWdlcyBeIChudW1fcGh5c3BhZ2VzPj44KSkgXgorCQkJKGppZmZpZXMgXiAoamlmZmllcyA+PiA3KSkpKTsKKworCW5ldC0+aXB2NC5ydF9zZWNyZXRfdGltZXIuZnVuY3Rpb24gPSBydF9zZWNyZXRfcmVidWlsZDsKKwluZXQtPmlwdjQucnRfc2VjcmV0X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyluZXQ7CisJaW5pdF90aW1lcl9kZWZlcnJhYmxlKCZuZXQtPmlwdjQucnRfc2VjcmV0X3RpbWVyKTsKKworCW5ldC0+aXB2NC5ydF9zZWNyZXRfdGltZXIuZXhwaXJlcyA9CisJCWppZmZpZXMgKyBuZXRfcmFuZG9tKCkgJSBpcF9ydF9zZWNyZXRfaW50ZXJ2YWwgKworCQlpcF9ydF9zZWNyZXRfaW50ZXJ2YWw7CisJYWRkX3RpbWVyKCZuZXQtPmlwdjQucnRfc2VjcmV0X3RpbWVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBydF9zZWNyZXRfdGltZXJfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJZGVsX3RpbWVyX3N5bmMoJm5ldC0+aXB2NC5ydF9zZWNyZXRfdGltZXIpOworfQorCitzdGF0aWMgX19uZXRfaW5pdGRhdGEgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHJ0X3NlY3JldF90aW1lcl9vcHMgPSB7CisJLmluaXQgPSBydF9zZWNyZXRfdGltZXJfaW5pdCwKKwkuZXhpdCA9IHJ0X3NlY3JldF90aW1lcl9leGl0LAorfTsKKworCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfUk9VVEUKIHN0cnVjdCBpcF9ydF9hY2N0ICppcF9ydF9hY2N0IF9fcmVhZF9tb3N0bHk7CiAjZW5kaWYgLyogQ09ORklHX05FVF9DTFNfUk9VVEUgKi8KQEAgLTMwMzEsOSArMzE2Miw2IEBACiB7CiAJaW50IHJjID0gMDsKIAotCWF0b21pY19zZXQoJnJ0X2dlbmlkLCAoaW50KSAoKG51bV9waHlzcGFnZXMgXiAobnVtX3BoeXNwYWdlcz4+OCkpIF4KLQkJCSAgICAgKGppZmZpZXMgXiAoamlmZmllcyA+PiA3KSkpKTsKLQogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiAJaXBfcnRfYWNjdCA9IF9fYWxsb2NfcGVyY3B1KDI1NiAqIHNpemVvZihzdHJ1Y3QgaXBfcnRfYWNjdCkpOwogCWlmICghaXBfcnRfYWNjdCkKQEAgLTMwNjUsMTkgKzMxOTMsMTQgQEAKIAlkZXZpbmV0X2luaXQoKTsKIAlpcF9maWJfaW5pdCgpOwogCi0JcnRfc2VjcmV0X3RpbWVyLmZ1bmN0aW9uID0gcnRfc2VjcmV0X3JlYnVpbGQ7Ci0JcnRfc2VjcmV0X3RpbWVyLmRhdGEgPSAwOwotCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmcnRfc2VjcmV0X3RpbWVyKTsKLQogCS8qIEFsbCB0aGUgdGltZXJzLCBzdGFydGVkIGF0IHN5c3RlbSBzdGFydHVwIHRlbmQKIAkgICB0byBzeW5jaHJvbml6ZS4gUGVydHVyYiBpdCBhIGJpdC4KIAkgKi8KIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmV4cGlyZXNfd29yaywKIAkJbmV0X3JhbmRvbSgpICUgaXBfcnRfZ2NfaW50ZXJ2YWwgKyBpcF9ydF9nY19pbnRlcnZhbCk7CiAKLQlydF9zZWNyZXRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBuZXRfcmFuZG9tKCkgJSBpcF9ydF9zZWNyZXRfaW50ZXJ2YWwgKwotCQlpcF9ydF9zZWNyZXRfaW50ZXJ2YWw7Ci0JYWRkX3RpbWVyKCZydF9zZWNyZXRfdGltZXIpOworCWlmIChyZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZydF9zZWNyZXRfdGltZXJfb3BzKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gc2V0dXAgcnRfc2VjcmV0X3RpbWVyXG4iKTsKIAogCWlmIChpcF9ydF9wcm9jX2luaXQoKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIHJvdXRlIHByb2MgZmlsZXNcbiIpOwpAQCAtMzA4Nyw2ICszMjEwLDkgQEAKICNlbmRpZgogCXJ0bmxfcmVnaXN0ZXIoUEZfSU5FVCwgUlRNX0dFVFJPVVRFLCBpbmV0X3J0bV9nZXRyb3V0ZSwgTlVMTCk7CiAKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmc3lzY3RsX3JvdXRlX29wcyk7CisjZW5kaWYKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwppbmRleCBkMTgyYTJhLi41MWJjMjRkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjQvc3luY29va2llcy5jCkBAIC04LDggKzgsNiBAQAogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgJElkOiBzeW5jb29raWVzLmMsdiAxLjE4IDIwMDIvMDIvMDEgMjI6MDE6MDQgZGF2ZW0gRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CkBAIC0xNzUsNyArMTczLDcgQEAKIAkJOwogCSptc3NwID0gbXNzdGFiW21zc2luZF0gKyAxOwogCi0JTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfU1lOQ09PS0lFU1NFTlQpOworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfU1lOQ09PS0lFU1NFTlQpOwogCiAJcmV0dXJuIHNlY3VyZV90Y3Bfc3luX2Nvb2tpZShpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAogCQkJCSAgICAgdGgtPnNvdXJjZSwgdGgtPmRlc3QsIG50b2hsKHRoLT5zZXEpLApAQCAtMjcxLDExICsyNjksMTEgQEAKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRwLT5sYXN0X3N5bnFfb3ZlcmZsb3cgKyBUQ1BfVElNRU9VVF9JTklUKSB8fAogCSAgICAobXNzID0gY29va2llX2NoZWNrKHNrYiwgY29va2llKSkgPT0gMCkgewotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9TWU5DT09LSUVTRkFJTEVEKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9TWU5DT09LSUVTRkFJTEVEKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfU1lOQ09PS0lFU1JFQ1YpOworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfU1lOQ09PS0lFU1JFQ1YpOwogCiAJLyogY2hlY2sgZm9yIHRpbWVzdGFtcCBjb29raWUgc3VwcG9ydCAqLwogCW1lbXNldCgmdGNwX29wdCwgMCwgc2l6ZW9mKHRjcF9vcHQpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKaW5kZXggYzQzN2Y4MDQuLjE0ZWYyMDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC0xLDggKzEsNiBAQAogLyoKICAqIHN5c2N0bF9uZXRfaXB2NC5jOiBzeXNjdGwgaW50ZXJmYWNlIHRvIG5ldCBJUFY0IHN1YnN5c3RlbS4KICAqCi0gKiAkSWQ6IHN5c2N0bF9uZXRfaXB2NC5jLHYgMS41MCAyMDAxLzEwLzIwIDAwOjAwOjExIGRhdmVtIEV4cCAkCi0gKgogICogQmVndW4gQXByaWwgMSwgMTk5NiwgTWlrZSBTaGF2ZXIuCiAgKiBBZGRlZCAvcHJvYy9zeXMvbmV0L2lwdjQgZGlyZWN0b3J5IGVudHJ5IChlbXB0eSA9KSApLiBbTVNdCiAgKi8KQEAgLTc5NSw3ICs3OTMsOCBAQAogCQkuZGF0YQkJPSAmaW5pdF9uZXQuaXB2NC5zeXNjdGxfaWNtcF9yYXRlbGltaXQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYworCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbXNfamlmZmllcywKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9tc19qaWZmaWVzCiAJfSwKIAl7CiAJCS5jdGxfbmFtZQk9IE5FVF9JUFY0X0lDTVBfUkFURU1BU0ssCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDFkNzIzZGUxLi4wYjQ5MWJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtNSw4ICs1LDYgQEAKICAqCiAgKgkJSW1wbGVtZW50YXRpb24gb2YgdGhlIFRyYW5zbWlzc2lvbiBDb250cm9sIFByb3RvY29sKFRDUCkuCiAgKgotICogVmVyc2lvbjoJJElkOiB0Y3AuYyx2IDEuMjE2IDIwMDIvMDIvMDEgMjI6MDE6MDQgZGF2ZW0gRXhwICQKLSAqCiAgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQlNYXJrIEV2YW5zLCA8ZXZhbnNtcEB1aHVyYS5hc3Rvbi5hYy51az4KQEAgLTI3OSw4ICsyNzcsNiBAQAogCiBpbnQgc3lzY3RsX3RjcF9maW5fdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gVENQX0ZJTl9USU1FT1VUOwogCi1ERUZJTkVfU05NUF9TVEFUKHN0cnVjdCB0Y3BfbWliLCB0Y3Bfc3RhdGlzdGljcykgX19yZWFkX21vc3RseTsKLQogYXRvbWljX3QgdGNwX29ycGhhbl9jb3VudCA9IEFUT01JQ19JTklUKDApOwogCiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfb3JwaGFuX2NvdW50KTsKQEAgLTMxOCwxMCArMzE0LDEwIEBACiAKIEVYUE9SVF9TWU1CT0wodGNwX21lbW9yeV9wcmVzc3VyZSk7CiAKLXZvaWQgdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZSh2b2lkKQordm9pZCB0Y3BfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZiAoIXRjcF9tZW1vcnlfcHJlc3N1cmUpIHsKLQkJTkVUX0lOQ19TVEFUUyhMSU5VWF9NSUJfVENQTUVNT1JZUFJFU1NVUkVTKTsKKwkJTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BNRU1PUllQUkVTU1VSRVMpOwogCQl0Y3BfbWVtb3J5X3ByZXNzdXJlID0gMTsKIAl9CiB9CkBAIC0zNDYsOCArMzQyLDggQEAKIAkJcmV0dXJuIGluZXRfY3NrX2xpc3Rlbl9wb2xsKHNrKTsKIAogCS8qIFNvY2tldCBpcyBub3QgbG9ja2VkLiBXZSBhcmUgcHJvdGVjdGVkIGZyb20gYXN5bmMgZXZlbnRzCi0JICAgYnkgcG9sbCBsb2dpYyBhbmQgY29ycmVjdCBoYW5kbGluZyBvZiBzdGF0ZSBjaGFuZ2VzCi0JICAgbWFkZSBieSBhbm90aGVyIHRocmVhZHMgaXMgaW1wb3NzaWJsZSBpbiBhbnkgY2FzZS4KKwkgKiBieSBwb2xsIGxvZ2ljIGFuZCBjb3JyZWN0IGhhbmRsaW5nIG9mIHN0YXRlIGNoYW5nZXMKKwkgKiBtYWRlIGJ5IG90aGVyIHRocmVhZHMgaXMgaW1wb3NzaWJsZSBpbiBhbnkgY2FzZS4KIAkgKi8KIAogCW1hc2sgPSAwOwpAQCAtMzczLDEwICszNjksMTAgQEAKIAkgKiBpbiBzdGF0ZSBDTE9TRV9XQUlULiBPbmUgc29sdXRpb24gaXMgZXZpZGVudCAtLS0gdG8gc2V0IFBPTExIVVAKIAkgKiBpZiBhbmQgb25seSBpZiBzaHV0ZG93biBoYXMgYmVlbiBtYWRlIGluIGJvdGggZGlyZWN0aW9ucy4KIAkgKiBBY3R1YWxseSwgaXQgaXMgaW50ZXJlc3RpbmcgdG8gbG9vayBob3cgU29sYXJpcyBhbmQgRFVYCi0JICogc29sdmUgdGhpcyBkaWxlbW1hLiBJIHdvdWxkIHByZWZlciwgaWYgUFVMTEhVUCB3ZXJlIG1hc2thYmxlLAorCSAqIHNvbHZlIHRoaXMgZGlsZW1tYS4gSSB3b3VsZCBwcmVmZXIsIGlmIFBPTExIVVAgd2VyZSBtYXNrYWJsZSwKIAkgKiB0aGVuIHdlIGNvdWxkIHNldCBpdCBvbiBTTkRfU0hVVERPV04uIEJUVyBleGFtcGxlcyBnaXZlbgogCSAqIGluIFN0ZXZlbnMnIGJvb2tzIGFzc3VtZSBleGFjdGx5IHRoaXMgYmVoYXZpb3VyLCBpdCBleHBsYWlucwotCSAqIHdoeSBQVUxMSFVQIGlzIGluY29tcGF0aWJsZSB3aXRoIFBPTExPVVQuCS0tQU5LCisJICogd2h5IFBPTExIVVAgaXMgaW5jb21wYXRpYmxlIHdpdGggUE9MTE9VVC4JLS1BTksKIAkgKgogCSAqIE5PVEUuIENoZWNrIGZvciBUQ1BfQ0xPU0UgaXMgYWRkZWQuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQKIAkgKiBibG9ja2luZyBvbiBmcmVzaCBub3QtY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZCBzb2NrZXQuIC0tQU5LCkBAIC02NTEsNyArNjQ3LDcgQEAKIAkJfQogCQlfX2tmcmVlX3NrYihza2IpOwogCX0gZWxzZSB7Ci0JCXNrLT5za19wcm90LT5lbnRlcl9tZW1vcnlfcHJlc3N1cmUoKTsKKwkJc2stPnNrX3Byb3QtPmVudGVyX21lbW9yeV9wcmVzc3VyZShzayk7CiAJCXNrX3N0cmVhbV9tb2RlcmF0ZV9zbmRidWYoc2spOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTExNTUsNyArMTE1MSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAotCU5FVF9JTkNfU1RBVFNfVVNFUihMSU5VWF9NSUJfVENQUFJFUVVFVUVEKTsKKwlORVRfSU5DX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUFJFUVVFVUVEKTsKIAogCS8qIFJYIHByb2Nlc3Mgd2FudHMgdG8gcnVuIHdpdGggZGlzYWJsZWQgQkhzLCB0aG91Z2ggaXQgaXMgbm90CiAJICogbmVjZXNzYXJ5ICovCkBAIC0xNDc3LDcgKzE0NzMsNyBAQAogCQkJLyogX18gUmVzdG9yZSBub3JtYWwgcG9saWN5IGluIHNjaGVkdWxlciBfXyAqLwogCiAJCQlpZiAoKGNodW5rID0gbGVuIC0gdHAtPnVjb3B5LmxlbikgIT0gMCkgewotCQkJCU5FVF9BRERfU1RBVFNfVVNFUihMSU5VWF9NSUJfVENQRElSRUNUQ09QWUZST01CQUNLTE9HLCBjaHVuayk7CisJCQkJTkVUX0FERF9TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUERJUkVDVENPUFlGUk9NQkFDS0xPRywgY2h1bmspOwogCQkJCWxlbiAtPSBjaHVuazsKIAkJCQljb3BpZWQgKz0gY2h1bms7CiAJCQl9CkBAIC0xNDg4LDcgKzE0ODQsNyBAQAogCQkJCXRjcF9wcmVxdWV1ZV9wcm9jZXNzKHNrKTsKIAogCQkJCWlmICgoY2h1bmsgPSBsZW4gLSB0cC0+dWNvcHkubGVuKSAhPSAwKSB7Ci0JCQkJCU5FVF9BRERfU1RBVFNfVVNFUihMSU5VWF9NSUJfVENQRElSRUNUQ09QWUZST01QUkVRVUVVRSwgY2h1bmspOworCQkJCQlORVRfQUREX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQRElSRUNUQ09QWUZST01QUkVRVUVVRSwgY2h1bmspOwogCQkJCQlsZW4gLT0gY2h1bms7CiAJCQkJCWNvcGllZCArPSBjaHVuazsKIAkJCQl9CkBAIC0xNjAzLDcgKzE1OTksNyBAQAogCQkJdGNwX3ByZXF1ZXVlX3Byb2Nlc3Moc2spOwogCiAJCQlpZiAoY29waWVkID4gMCAmJiAoY2h1bmsgPSBsZW4gLSB0cC0+dWNvcHkubGVuKSAhPSAwKSB7Ci0JCQkJTkVUX0FERF9TVEFUU19VU0VSKExJTlVYX01JQl9UQ1BESVJFQ1RDT1BZRlJPTVBSRVFVRVVFLCBjaHVuayk7CisJCQkJTkVUX0FERF9TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUERJUkVDVENPUFlGUk9NUFJFUVVFVUUsIGNodW5rKTsKIAkJCQlsZW4gLT0gY2h1bms7CiAJCQkJY29waWVkICs9IGNodW5rOwogCQkJfQpAQCAtMTY3MCwxMiArMTY2NiwxMiBAQAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIFRDUF9FU1RBQkxJU0hFRDoKIAkJaWYgKG9sZHN0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkKLQkJCVRDUF9JTkNfU1RBVFMoVENQX01JQl9DVVJSRVNUQUIpOworCQkJVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfQ1VSUkVTVEFCKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRDUF9DTE9TRToKIAkJaWYgKG9sZHN0YXRlID09IFRDUF9DTE9TRV9XQUlUIHx8IG9sZHN0YXRlID09IFRDUF9FU1RBQkxJU0hFRCkKLQkJCVRDUF9JTkNfU1RBVFMoVENQX01JQl9FU1RBQlJFU0VUUyk7CisJCQlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9FU1RBQlJFU0VUUyk7CiAKIAkJc2stPnNrX3Byb3QtPnVuaGFzaChzayk7CiAJCWlmIChpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoICYmCkBAIC0xNjg0LDcgKzE2ODAsNyBAQAogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQlpZiAob2xkc3RhdGU9PVRDUF9FU1RBQkxJU0hFRCkKLQkJCVRDUF9ERUNfU1RBVFMoVENQX01JQl9DVVJSRVNUQUIpOworCQkJVENQX0RFQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfQ1VSUkVTVEFCKTsKIAl9CiAKIAkvKiBDaGFuZ2Ugc3RhdGUgQUZURVIgc29ja2V0IGlzIHVuaGFzaGVkIHRvIGF2b2lkIGNsb3NlZApAQCAtMTc5NSwxMyArMTc5MSwxMyBAQAogCSAqLwogCWlmIChkYXRhX3dhc191bnJlYWQpIHsKIAkJLyogVW5yZWFkIGRhdGEgd2FzIHRvc3NlZCwgemFwIHRoZSBjb25uZWN0aW9uLiAqLwotCQlORVRfSU5DX1NUQVRTX1VTRVIoTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSk7CisJCU5FVF9JTkNfU1RBVFNfVVNFUihzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OQ0xPU0UpOwogCQl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpOwogCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9LRVJORUwpOwogCX0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX0xJTkdFUikgJiYgIXNrLT5za19saW5nZXJ0aW1lKSB7CiAJCS8qIENoZWNrIHplcm8gbGluZ2VyIF9hZnRlcl8gY2hlY2tpbmcgZm9yIHVucmVhZCBkYXRhLiAqLwogCQlzay0+c2tfcHJvdC0+ZGlzY29ubmVjdChzaywgMCk7Ci0JCU5FVF9JTkNfU1RBVFNfVVNFUihMSU5VWF9NSUJfVENQQUJPUlRPTkRBVEEpOworCQlORVRfSU5DX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTkRBVEEpOwogCX0gZWxzZSBpZiAodGNwX2Nsb3NlX3N0YXRlKHNrKSkgewogCQkvKiBXZSBGSU4gaWYgdGhlIGFwcGxpY2F0aW9uIGF0ZSBhbGwgdGhlIGRhdGEgYmVmb3JlCiAJCSAqIHphcHBpbmcgdGhlIGNvbm5lY3Rpb24uCkBAIC0xODczLDcgKzE4NjksOCBAQAogCQlpZiAodHAtPmxpbmdlcjIgPCAwKSB7CiAJCQl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpOwogCQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDKTsKLQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIpOworCQkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksCisJCQkJCUxJTlVYX01JQl9UQ1BBQk9SVE9OTElOR0VSKTsKIAkJfSBlbHNlIHsKIAkJCWNvbnN0IGludCB0bW8gPSB0Y3BfZmluX3RpbWUoc2spOwogCkBAIC0xODk1LDcgKzE4OTIsOCBAQAogCQkJCSAgICAgICAic29ja2V0c1xuIik7CiAJCQl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpOwogCQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDKTsKLQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUEFCT1JUT05NRU1PUlkpOworCQkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksCisJCQkJCUxJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTsKIAkJfQogCX0KIApAQCAtMjU5MCwxMiArMjU4OCw2OSBAQAogfQogCiBFWFBPUlRfU1lNQk9MKF9fdGNwX3B1dF9tZDVzaWdfcG9vbCk7CisKK2ludCB0Y3BfbWQ1X2hhc2hfaGVhZGVyKHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwLAorCQkJc3RydWN0IHRjcGhkciAqdGgpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCWludCBlcnI7CisKKwlfX3N1bTE2IG9sZF9jaGVja3N1bSA9IHRoLT5jaGVjazsKKwl0aC0+Y2hlY2sgPSAwOworCS8qIG9wdGlvbnMgYXJlbid0IGluY2x1ZGVkIGluIHRoZSBoYXNoICovCisJc2dfaW5pdF9vbmUoJnNnLCB0aCwgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKTsKKwllcnIgPSBjcnlwdG9faGFzaF91cGRhdGUoJmhwLT5tZDVfZGVzYywgJnNnLCBzaXplb2Yoc3RydWN0IHRjcGhkcikpOworCXRoLT5jaGVjayA9IG9sZF9jaGVja3N1bTsKKwlyZXR1cm4gZXJyOworfQorCitFWFBPUlRfU1lNQk9MKHRjcF9tZDVfaGFzaF9oZWFkZXIpOworCitpbnQgdGNwX21kNV9oYXNoX3NrYl9kYXRhKHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwLAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBoZWFkZXJfbGVuKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwljb25zdCBzdHJ1Y3QgdGNwaGRyICp0cCA9IHRjcF9oZHIoc2tiKTsKKwlzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjID0gJmhwLT5tZDVfZGVzYzsKKwl1bnNpZ25lZCBpOworCWNvbnN0IHVuc2lnbmVkIGhlYWRfZGF0YV9sZW4gPSBza2JfaGVhZGxlbihza2IpID4gaGVhZGVyX2xlbiA/CisJCQkJICAgICAgIHNrYl9oZWFkbGVuKHNrYikgLSBoZWFkZXJfbGVuIDogMDsKKwljb25zdCBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGkgPSBza2Jfc2hpbmZvKHNrYik7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisKKwlzZ19zZXRfYnVmKCZzZywgKCh1OCAqKSB0cCkgKyBoZWFkZXJfbGVuLCBoZWFkX2RhdGFfbGVuKTsKKwlpZiAoY3J5cHRvX2hhc2hfdXBkYXRlKGRlc2MsICZzZywgaGVhZF9kYXRhX2xlbikpCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IHNoaS0+bnJfZnJhZ3M7ICsraSkgeworCQljb25zdCBzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmID0gJnNoaS0+ZnJhZ3NbaV07CisJCXNnX3NldF9wYWdlKCZzZywgZi0+cGFnZSwgZi0+c2l6ZSwgZi0+cGFnZV9vZmZzZXQpOworCQlpZiAoY3J5cHRvX2hhc2hfdXBkYXRlKGRlc2MsICZzZywgZi0+c2l6ZSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTCh0Y3BfbWQ1X2hhc2hfc2tiX2RhdGEpOworCitpbnQgdGNwX21kNV9oYXNoX2tleShzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICpocCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXkpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJc2dfaW5pdF9vbmUoJnNnLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOworCXJldHVybiBjcnlwdG9faGFzaF91cGRhdGUoJmhwLT5tZDVfZGVzYywgJnNnLCBrZXktPmtleWxlbik7Cit9CisKK0VYUE9SVF9TWU1CT0wodGNwX21kNV9oYXNoX2tleSk7CisKICNlbmRpZgogCiB2b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZihzay0+c2tfc3RhdGUgPT0gVENQX1NZTl9TRU5UIHx8IHNrLT5za19zdGF0ZSA9PSBUQ1BfU1lOX1JFQ1YpCi0JCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9BVFRFTVBURkFJTFMpOworCQlUQ1BfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVENQX01JQl9BVFRFTVBURkFJTFMpOwogCiAJdGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTsKIAl0Y3BfY2xlYXJfeG1pdF90aW1lcnMoc2spOwpAQCAtMjczMiw0ICsyNzg3LDMgQEAKIEVYUE9SVF9TWU1CT0wodGNwX3NlbmRwYWdlKTsKIEVYUE9SVF9TWU1CT0wodGNwX3NldHNvY2tvcHQpOwogRVhQT1JUX1NZTUJPTCh0Y3Bfc2h1dGRvd24pOwotRVhQT1JUX1NZTUJPTCh0Y3Bfc3RhdGlzdGljcyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGlhZy5jIGIvbmV0L2lwdjQvdGNwX2RpYWcuYwppbmRleCAyZmJjYzdkLi44MzhkNDkxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfZGlhZy5jCisrKyBiL25ldC9pcHY0L3RjcF9kaWFnLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogdGNwX2RpYWcuYwlNb2R1bGUgZm9yIG1vbml0b3JpbmcgVENQIHRyYW5zcG9ydCBwcm90b2NvbHMgc29ja2V0cy4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IHRjcF9kaWFnLmMsdiAxLjMgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CUFsZXhleSBLdXpuZXRzb3YsIDxrdXpuZXRAbXMyLmluci5hYy5ydT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGNhZDczYjcuLjFmNWU2MDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC01LDggKzUsNiBAQAogICoKICAqCQlJbXBsZW1lbnRhdGlvbiBvZiB0aGUgVHJhbnNtaXNzaW9uIENvbnRyb2wgUHJvdG9jb2woVENQKS4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IHRjcF9pbnB1dC5jLHYgMS4yNDMgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCU1hcmsgRXZhbnMsIDxldmFuc21wQHVodXJhLmFzdG9uLmFjLnVrPgpAQCAtNjA0LDcgKzYwMiw3IEBACiAJdTMyIHJ0b19taW4gPSBUQ1BfUlRPX01JTjsKIAogCWlmIChkc3QgJiYgZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX1JUT19NSU4pKQotCQlydG9fbWluID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfUlRPX01JTik7CisJCXJ0b19taW4gPSBkc3RfbWV0cmljX3J0dChkc3QsIFJUQVhfUlRPX01JTik7CiAJcmV0dXJuIHJ0b19taW47CiB9CiAKQEAgLTczMSw2ICs3MjksNyBAQAogCWlmIChkc3QgJiYgKGRzdC0+ZmxhZ3MgJiBEU1RfSE9TVCkpIHsKIAkJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCQlpbnQgbTsKKwkJdW5zaWduZWQgbG9uZyBydHQ7CiAKIAkJaWYgKGljc2stPmljc2tfYmFja29mZiB8fCAhdHAtPnNydHQpIHsKIAkJCS8qIFRoaXMgc2Vzc2lvbiBmYWlsZWQgdG8gZXN0aW1hdGUgcnR0LiBXaHk/CkBAIC03NDIsNyArNzQxLDggQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCW0gPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9SVFQpIC0gdHAtPnNydHQ7CisJCXJ0dCA9IGRzdF9tZXRyaWNfcnR0KGRzdCwgUlRBWF9SVFQpOworCQltID0gcnR0IC0gdHAtPnNydHQ7CiAKIAkJLyogSWYgbmV3bHkgY2FsY3VsYXRlZCBydHQgbGFyZ2VyIHRoYW4gc3RvcmVkIG9uZSwKIAkJICogc3RvcmUgbmV3IG9uZS4gT3RoZXJ3aXNlLCB1c2UgRVdNQS4gUmVtZW1iZXIsCkBAIC03NTAsMTIgKzc1MCwxMyBAQAogCQkgKi8KIAkJaWYgKCEoZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX1JUVCkpKSB7CiAJCQlpZiAobSA8PSAwKQotCQkJCWRzdC0+bWV0cmljc1tSVEFYX1JUVCAtIDFdID0gdHAtPnNydHQ7CisJCQkJc2V0X2RzdF9tZXRyaWNfcnR0KGRzdCwgUlRBWF9SVFQsIHRwLT5zcnR0KTsKIAkJCWVsc2UKLQkJCQlkc3QtPm1ldHJpY3NbUlRBWF9SVFQgLSAxXSAtPSAobSA+PiAzKTsKKwkJCQlzZXRfZHN0X21ldHJpY19ydHQoZHN0LCBSVEFYX1JUVCwgcnR0IC0gKG0gPj4gMykpOwogCQl9CiAKIAkJaWYgKCEoZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX1JUVFZBUikpKSB7CisJCQl1bnNpZ25lZCBsb25nIHZhcjsKIAkJCWlmIChtIDwgMCkKIAkJCQltID0gLW07CiAKQEAgLTc2NCwxMSArNzY1LDEzIEBACiAJCQlpZiAobSA8IHRwLT5tZGV2KQogCQkJCW0gPSB0cC0+bWRldjsKIAotCQkJaWYgKG0gPj0gZHN0X21ldHJpYyhkc3QsIFJUQVhfUlRUVkFSKSkKLQkJCQlkc3QtPm1ldHJpY3NbUlRBWF9SVFRWQVIgLSAxXSA9IG07CisJCQl2YXIgPSBkc3RfbWV0cmljX3J0dChkc3QsIFJUQVhfUlRUVkFSKTsKKwkJCWlmIChtID49IHZhcikKKwkJCQl2YXIgPSBtOwogCQkJZWxzZQotCQkJCWRzdC0+bWV0cmljc1tSVEFYX1JUVFZBUi0xXSAtPQotCQkJCQkoZHN0X21ldHJpYyhkc3QsIFJUQVhfUlRUVkFSKSAtIG0pPj4yOworCQkJCXZhciAtPSAodmFyIC0gbSkgPj4gMjsKKworCQkJc2V0X2RzdF9tZXRyaWNfcnR0KGRzdCwgUlRBWF9SVFRWQVIsIHZhcik7CiAJCX0KIAogCQlpZiAodHAtPnNuZF9zc3RocmVzaCA+PSAweEZGRkYpIHsKQEAgLTg5OSw3ICs5MDIsNyBAQAogCWlmIChkc3RfbWV0cmljKGRzdCwgUlRBWF9SVFQpID09IDApCiAJCWdvdG8gcmVzZXQ7CiAKLQlpZiAoIXRwLT5zcnR0ICYmIGRzdF9tZXRyaWMoZHN0LCBSVEFYX1JUVCkgPCAoVENQX1RJTUVPVVRfSU5JVCA8PCAzKSkKKwlpZiAoIXRwLT5zcnR0ICYmIGRzdF9tZXRyaWNfcnR0KGRzdCwgUlRBWF9SVFQpIDwgKFRDUF9USU1FT1VUX0lOSVQgPDwgMykpCiAJCWdvdG8gcmVzZXQ7CiAKIAkvKiBJbml0aWFsIHJ0dCBpcyBkZXRlcm1pbmVkIGZyb20gU1lOLFNZTi1BQ0suCkBAIC05MTYsMTIgKzkxOSwxMiBAQAogCSAqIHRvIGxvdyB2YWx1ZSwgYW5kIHRoZW4gYWJydXB0bHkgc3RvcHMgdG8gZG8gaXQgYW5kIHN0YXJ0cyB0byBkZWxheQogCSAqIEFDS3MsIHdhaXQgZm9yIHRyb3VibGVzLgogCSAqLwotCWlmIChkc3RfbWV0cmljKGRzdCwgUlRBWF9SVFQpID4gdHAtPnNydHQpIHsKLQkJdHAtPnNydHQgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9SVFQpOworCWlmIChkc3RfbWV0cmljX3J0dChkc3QsIFJUQVhfUlRUKSA+IHRwLT5zcnR0KSB7CisJCXRwLT5zcnR0ID0gZHN0X21ldHJpY19ydHQoZHN0LCBSVEFYX1JUVCk7CiAJCXRwLT5ydHRfc2VxID0gdHAtPnNuZF9ueHQ7CiAJfQotCWlmIChkc3RfbWV0cmljKGRzdCwgUlRBWF9SVFRWQVIpID4gdHAtPm1kZXYpIHsKLQkJdHAtPm1kZXYgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9SVFRWQVIpOworCWlmIChkc3RfbWV0cmljX3J0dChkc3QsIFJUQVhfUlRUVkFSKSA+IHRwLT5tZGV2KSB7CisJCXRwLT5tZGV2ID0gZHN0X21ldHJpY19ydHQoZHN0LCBSVEFYX1JUVFZBUik7CiAJCXRwLT5tZGV2X21heCA9IHRwLT5ydHR2YXIgPSBtYXgodHAtPm1kZXYsIHRjcF9ydG9fbWluKHNrKSk7CiAJfQogCXRjcF9zZXRfcnRvKHNrKTsKQEAgLTk0OSwxNyArOTUyLDIxIEBACiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJaWYgKG1ldHJpYyA+IHRwLT5yZW9yZGVyaW5nKSB7CisJCWludCBtaWJfaWR4OworCiAJCXRwLT5yZW9yZGVyaW5nID0gbWluKFRDUF9NQVhfUkVPUkRFUklORywgbWV0cmljKTsKIAogCQkvKiBUaGlzIGV4Y2l0aW5nIGV2ZW50IGlzIHdvcnRoIHRvIGJlIHJlbWVtYmVyZWQuIDgpICovCiAJCWlmICh0cykKLQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUFRTUkVPUkRFUik7CisJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFRTUkVPUkRFUjsKIAkJZWxzZSBpZiAodGNwX2lzX3Jlbm8odHApKQotCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQUkVOT1JFT1JERVIpOworCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PUkVPUkRFUjsKIAkJZWxzZSBpZiAodGNwX2lzX2ZhY2sodHApKQotCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQRkFDS1JFT1JERVIpOworCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BGQUNLUkVPUkRFUjsKIAkJZWxzZQotCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQU0FDS1JFT1JERVIpOworCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLUkVPUkRFUjsKKworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgbWliX2lkeCk7CiAjaWYgRkFTVFJFVFJBTlNfREVCVUcgPiAxCiAJCXByaW50ayhLRVJOX0RFQlVHICJEaXNvcmRlciVkICVkICV1IGYldSBzJXUgcnIlZFxuIiwKIAkJICAgICAgIHRwLT5yeF9vcHQuc2Fja19vaywgaW5ldF9jc2soc2spLT5pY3NrX2NhX3N0YXRlLApAQCAtMTE1NSw3ICsxMTYyLDcgQEAKIAkJCQl0cC0+bG9zdF9vdXQgKz0gdGNwX3NrYl9wY291bnQoc2tiKTsKIAkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCB8PSBUQ1BDQl9MT1NUOwogCQkJfQotCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQTE9TVFJFVFJBTlNNSVQpOworCQkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BMT1NUUkVUUkFOU01JVCk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoYmVmb3JlKGFja19zZXEsIG5ld19sb3dfc2VxKSkKIAkJCQluZXdfbG93X3NlcSA9IGFja19zZXE7CkBAIC0xMTY3LDEwICsxMTc0LDExIEBACiAJCXRwLT5sb3N0X3JldHJhbnNfbG93ID0gbmV3X2xvd19zZXE7CiB9CiAKLXN0YXRpYyBpbnQgdGNwX2NoZWNrX2RzYWNrKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHN0cnVjdCBza19idWZmICphY2tfc2tiLAorc3RhdGljIGludCB0Y3BfY2hlY2tfZHNhY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqYWNrX3NrYiwKIAkJCSAgIHN0cnVjdCB0Y3Bfc2Fja19ibG9ja193aXJlICpzcCwgaW50IG51bV9zYWNrcywKIAkJCSAgIHUzMiBwcmlvcl9zbmRfdW5hKQogeworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXUzMiBzdGFydF9zZXFfMCA9IGdldF91bmFsaWduZWRfYmUzMigmc3BbMF0uc3RhcnRfc2VxKTsKIAl1MzIgZW5kX3NlcV8wID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZzcFswXS5lbmRfc2VxKTsKIAlpbnQgZHVwX3NhY2sgPSAwOwpAQCAtMTE3OCw3ICsxMTg2LDcgQEAKIAlpZiAoYmVmb3JlKHN0YXJ0X3NlcV8wLCBUQ1BfU0tCX0NCKGFja19za2IpLT5hY2tfc2VxKSkgewogCQlkdXBfc2FjayA9IDE7CiAJCXRjcF9kc2Fja19zZWVuKHRwKTsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQRFNBQ0tSRUNWKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BEU0FDS1JFQ1YpOwogCX0gZWxzZSBpZiAobnVtX3NhY2tzID4gMSkgewogCQl1MzIgZW5kX3NlcV8xID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZzcFsxXS5lbmRfc2VxKTsKIAkJdTMyIHN0YXJ0X3NlcV8xID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZzcFsxXS5zdGFydF9zZXEpOwpAQCAtMTE4Nyw3ICsxMTk1LDggQEAKIAkJICAgICFiZWZvcmUoc3RhcnRfc2VxXzAsIHN0YXJ0X3NlcV8xKSkgewogCQkJZHVwX3NhY2sgPSAxOwogCQkJdGNwX2RzYWNrX3NlZW4odHApOwotCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQRFNBQ0tPRk9SRUNWKTsKKwkJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLAorCQkJCQlMSU5VWF9NSUJfVENQRFNBQ0tPRk9SRUNWKTsKIAkJfQogCX0KIApAQCAtMTQxNCwxMCArMTQyMywxMCBAQAogCXVuc2lnbmVkIGNoYXIgKnB0ciA9IChza2JfdHJhbnNwb3J0X2hlYWRlcihhY2tfc2tiKSArCiAJCQkgICAgICBUQ1BfU0tCX0NCKGFja19za2IpLT5zYWNrZWQpOwogCXN0cnVjdCB0Y3Bfc2Fja19ibG9ja193aXJlICpzcF93aXJlID0gKHN0cnVjdCB0Y3Bfc2Fja19ibG9ja193aXJlICopKHB0cisyKTsKLQlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgc3BbNF07CisJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHNwW1RDUF9OVU1fU0FDS1NdOwogCXN0cnVjdCB0Y3Bfc2Fja19ibG9jayAqY2FjaGU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbnVtX3NhY2tzID0gKHB0clsxXSAtIFRDUE9MRU5fU0FDS19CQVNFKSA+PiAzOworCWludCBudW1fc2Fja3MgPSBtaW4oVENQX05VTV9TQUNLUywgKHB0clsxXSAtIFRDUE9MRU5fU0FDS19CQVNFKSA+PiAzKTsKIAlpbnQgdXNlZF9zYWNrczsKIAlpbnQgcmVvcmQgPSB0cC0+cGFja2V0c19vdXQ7CiAJaW50IGZsYWcgPSAwOwpAQCAtMTQzMiw3ICsxNDQxLDcgQEAKIAkJdGNwX2hpZ2hlc3Rfc2Fja19yZXNldChzayk7CiAJfQogCi0JZm91bmRfZHVwX3NhY2sgPSB0Y3BfY2hlY2tfZHNhY2sodHAsIGFja19za2IsIHNwX3dpcmUsCisJZm91bmRfZHVwX3NhY2sgPSB0Y3BfY2hlY2tfZHNhY2soc2ssIGFja19za2IsIHNwX3dpcmUsCiAJCQkJCSBudW1fc2Fja3MsIHByaW9yX3NuZF91bmEpOwogCWlmIChmb3VuZF9kdXBfc2FjaykKIAkJZmxhZyB8PSBGTEFHX0RTQUNLSU5HX0FDSzsKQEAgLTE0NTgsMTggKzE0NjcsMjIgQEAKIAkJaWYgKCF0Y3BfaXNfc2Fja2Jsb2NrX3ZhbGlkKHRwLCBkdXBfc2FjaywKIAkJCQkJICAgIHNwW3VzZWRfc2Fja3NdLnN0YXJ0X3NlcSwKIAkJCQkJICAgIHNwW3VzZWRfc2Fja3NdLmVuZF9zZXEpKSB7CisJCQlpbnQgbWliX2lkeDsKKwogCQkJaWYgKGR1cF9zYWNrKSB7CiAJCQkJaWYgKCF0cC0+dW5kb19tYXJrZXIpCi0JCQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUERTQUNLSUdOT1JFRE5PVU5ETyk7CisJCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQRFNBQ0tJR05PUkVETk9VTkRPOwogCQkJCWVsc2UKLQkJCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQRFNBQ0tJR05PUkVET0xEKTsKKwkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BEU0FDS0lHTk9SRURPTEQ7CiAJCQl9IGVsc2UgewogCQkJCS8qIERvbid0IGNvdW50IG9sZHMgY2F1c2VkIGJ5IEFDSyByZW9yZGVyaW5nICovCiAJCQkJaWYgKChUQ1BfU0tCX0NCKGFja19za2IpLT5hY2tfc2VxICE9IHRwLT5zbmRfdW5hKSAmJgogCQkJCSAgICAhYWZ0ZXIoc3BbdXNlZF9zYWNrc10uZW5kX3NlcSwgdHAtPnNuZF91bmEpKQogCQkJCQljb250aW51ZTsKLQkJCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BTQUNLRElTQ0FSRCk7CisJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLRElTQ0FSRDsKIAkJCX0KKworCQkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIG1pYl9pZHgpOwogCQkJaWYgKGkgPT0gMCkKIAkJCQlmaXJzdF9zYWNrX2luZGV4ID0gLTE7CiAJCQljb250aW51ZTsKQEAgLTE5NjIsNyArMTk3NSw3IEBACiB7CiAJaWYgKGZsYWcgJiBGTEFHX1NBQ0tfUkVORUdJTkcpIHsKIAkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BTQUNLUkVORUdJTkcpOworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFNBQ0tSRU5FR0lORyk7CiAKIAkJdGNwX2VudGVyX2xvc3Moc2ssIDEpOwogCQlpY3NrLT5pY3NrX3JldHJhbnNtaXRzKys7CkBAIC0yMzgyLDE1ICsyMzk1LDE5IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKIAlpZiAodGNwX21heV91bmRvKHRwKSkgeworCQlpbnQgbWliX2lkeDsKKwogCQkvKiBIYXBweSBlbmQhIFdlIGRpZCBub3QgcmV0cmFuc21pdCBhbnl0aGluZwogCQkgKiBvciBvdXIgb3JpZ2luYWwgdHJhbnNtaXNzaW9uIHN1Y2NlZWRlZC4KIAkJICovCiAJCURCR1VORE8oc2ssIGluZXRfY3NrKHNrKS0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfTG9zcyA/ICJsb3NzIiA6ICJyZXRyYW5zIik7CiAJCXRjcF91bmRvX2N3cihzaywgMSk7CiAJCWlmIChpbmV0X2NzayhzayktPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0xvc3MpCi0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BMT1NTVU5ETyk7CisJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUExPU1NVTkRPOwogCQllbHNlCi0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BGVUxMVU5ETyk7CisJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUEZVTExVTkRPOworCisJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBtaWJfaWR4KTsKIAkJdHAtPnVuZG9fbWFya2VyID0gMDsKIAl9CiAJaWYgKHRwLT5zbmRfdW5hID09IHRwLT5oaWdoX3NlcSAmJiB0Y3BfaXNfcmVubyh0cCkpIHsKQEAgLTI0MTMsNyArMjQzMCw3IEBACiAJCURCR1VORE8oc2ssICJELVNBQ0siKTsKIAkJdGNwX3VuZG9fY3dyKHNrLCAxKTsKIAkJdHAtPnVuZG9fbWFya2VyID0gMDsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQRFNBQ0tVTkRPKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BEU0FDS1VORE8pOwogCX0KIH0KIApAQCAtMjQzNiw3ICsyNDUzLDcgQEAKIAogCQlEQkdVTkRPKHNrLCAiSG9lIik7CiAJCXRjcF91bmRvX2N3cihzaywgMCk7Ci0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUFBBUlRJQUxVTkRPKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BQQVJUSUFMVU5ETyk7CiAKIAkJLyogU28uLi4gRG8gbm90IG1ha2UgSG9lJ3MgcmV0cmFuc21pdCB5ZXQuCiAJCSAqIElmIHRoZSBmaXJzdCBwYWNrZXQgd2FzIGRlbGF5ZWQsIHRoZSByZXN0CkBAIC0yNDY1LDcgKzI0ODIsNyBAQAogCQlEQkdVTkRPKHNrLCAicGFydGlhbCBsb3NzIik7CiAJCXRwLT5sb3N0X291dCA9IDA7CiAJCXRjcF91bmRvX2N3cihzaywgMSk7Ci0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUExPU1NVTkRPKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BMT1NTVU5ETyk7CiAJCWluZXRfY3NrKHNrKS0+aWNza19yZXRyYW5zbWl0cyA9IDA7CiAJCXRwLT51bmRvX21hcmtlciA9IDA7CiAJCWlmICh0Y3BfaXNfc2Fjayh0cCkpCkBAIC0yNTYyLDcgKzI1NzksNyBAQAogCWludCBpc19kdXBhY2sgPSAhKGZsYWcgJiAoRkxBR19TTkRfVU5BX0FEVkFOQ0VEIHwgRkxBR19OT1RfRFVQKSk7CiAJaW50IGRvX2xvc3QgPSBpc19kdXBhY2sgfHwgKChmbGFnICYgRkxBR19EQVRBX1NBQ0tFRCkgJiYKIAkJCQkgICAgKHRjcF9mYWNrZXRzX291dCh0cCkgPiB0cC0+cmVvcmRlcmluZykpOwotCWludCBmYXN0X3JleG1pdCA9IDA7CisJaW50IGZhc3RfcmV4bWl0ID0gMCwgbWliX2lkeDsKIAogCWlmIChXQVJOX09OKCF0cC0+cGFja2V0c19vdXQgJiYgdHAtPnNhY2tlZF9vdXQpKQogCQl0cC0+c2Fja2VkX291dCA9IDA7CkBAIC0yNTg0LDcgKzI2MDEsNyBAQAogCSAgICBpY3NrLT5pY3NrX2NhX3N0YXRlICE9IFRDUF9DQV9PcGVuICYmCiAJICAgIHRwLT5mYWNrZXRzX291dCA+IHRwLT5yZW9yZGVyaW5nKSB7CiAJCXRjcF9tYXJrX2hlYWRfbG9zdChzaywgdHAtPmZhY2tldHNfb3V0IC0gdHAtPnJlb3JkZXJpbmcpOwotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BMT1NTKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BMT1NTKTsKIAl9CiAKIAkvKiBELiBDaGVjayBjb25zaXN0ZW5jeSBvZiB0aGUgY3VycmVudCBzdGF0ZS4gKi8KQEAgLTI2ODUsOSArMjcwMiwxMSBAQAogCQkvKiBPdGhlcndpc2UgZW50ZXIgUmVjb3Zlcnkgc3RhdGUgKi8KIAogCQlpZiAodGNwX2lzX3Jlbm8odHApKQotCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQUkVOT1JFQ09WRVJZKTsKKwkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQUkVOT1JFQ09WRVJZOwogCQllbHNlCi0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BTQUNLUkVDT1ZFUlkpOworCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLUkVDT1ZFUlk7CisKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIG1pYl9pZHgpOwogCiAJCXRwLT5oaWdoX3NlcSA9IHRwLT5zbmRfbnh0OwogCQl0cC0+cHJpb3Jfc3N0aHJlc2ggPSAwOwpAQCAtMzE5OCw3ICszMjE3LDcgQEAKIAkJfQogCQl0cC0+ZnJ0b19jb3VudGVyID0gMDsKIAkJdHAtPnVuZG9fbWFya2VyID0gMDsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQU1BVUklPVVNSVE9TKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BTUFVSSU9VU1JUT1MpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMyNTEsMTIgKzMyNzAsMTIgQEAKIAogCQl0Y3BfY2FfZXZlbnQoc2ssIENBX0VWRU5UX0ZBU1RfQUNLKTsKIAotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BIUEFDS1MpOworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEhQQUNLUyk7CiAJfSBlbHNlIHsKIAkJaWYgKGFja19zZXEgIT0gVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKQogCQkJZmxhZyB8PSBGTEFHX0RBVEE7CiAJCWVsc2UKLQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUFBVUkVBQ0tTKTsKKwkJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUFVSRUFDS1MpOwogCiAJCWZsYWcgfD0gdGNwX2Fja191cGRhdGVfd2luZG93KHNrLCBza2IsIGFjaywgYWNrX3NlcSk7CiAKQEAgLTM0NTAsNiArMzQ2OSw0MyBAQAogCXJldHVybiAxOwogfQogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKy8qCisgKiBQYXJzZSBNRDUgU2lnbmF0dXJlIG9wdGlvbgorICovCit1OCAqdGNwX3BhcnNlX21kNXNpZ19vcHRpb24oc3RydWN0IHRjcGhkciAqdGgpCit7CisJaW50IGxlbmd0aCA9ICh0aC0+ZG9mZiA8PCAyKSAtIHNpemVvZiAoKnRoKTsKKwl1OCAqcHRyID0gKHU4KikodGggKyAxKTsKKworCS8qIElmIHRoZSBUQ1Agb3B0aW9uIGlzIHRvbyBzaG9ydCwgd2UgY2FuIHNob3J0IGN1dCAqLworCWlmIChsZW5ndGggPCBUQ1BPTEVOX01ENVNJRykKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQlpbnQgb3Bjb2RlID0gKnB0cisrOworCQlpbnQgb3BzaXplOworCisJCXN3aXRjaChvcGNvZGUpIHsKKwkJY2FzZSBUQ1BPUFRfRU9MOgorCQkJcmV0dXJuIE5VTEw7CisJCWNhc2UgVENQT1BUX05PUDoKKwkJCWxlbmd0aC0tOworCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQlvcHNpemUgPSAqcHRyKys7CisJCQlpZiAob3BzaXplIDwgMiB8fCBvcHNpemUgPiBsZW5ndGgpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpZiAob3Bjb2RlID09IFRDUE9QVF9NRDVTSUcpCisJCQkJcmV0dXJuIHB0cjsKKwkJfQorCQlwdHIgKz0gb3BzaXplIC0gMjsKKwkJbGVuZ3RoIC09IG9wc2l6ZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSB2b2lkIHRjcF9zdG9yZV90c19yZWNlbnQoc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAl0cC0+cnhfb3B0LnRzX3JlY2VudCA9IHRwLT5yeF9vcHQucmN2X3RzdmFsOwpAQCAtMzY2MiwyNiArMzcxOCwzMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfZHNhY2tfc2V0KHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzZXEsIHUzMiBlbmRfc2VxKQorc3RhdGljIHZvaWQgdGNwX2RzYWNrX3NldChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzZXEsIHUzMiBlbmRfc2VxKQogeworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCiAJaWYgKHRjcF9pc19zYWNrKHRwKSAmJiBzeXNjdGxfdGNwX2RzYWNrKSB7CisJCWludCBtaWJfaWR4OworCiAJCWlmIChiZWZvcmUoc2VxLCB0cC0+cmN2X254dCkpCi0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BEU0FDS09MRFNFTlQpOworCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BEU0FDS09MRFNFTlQ7CiAJCWVsc2UKLQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUERTQUNLT0ZPU0VOVCk7CisJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUERTQUNLT0ZPU0VOVDsKKworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgbWliX2lkeCk7CiAKIAkJdHAtPnJ4X29wdC5kc2FjayA9IDE7CiAJCXRwLT5kdXBsaWNhdGVfc2Fja1swXS5zdGFydF9zZXEgPSBzZXE7CiAJCXRwLT5kdXBsaWNhdGVfc2Fja1swXS5lbmRfc2VxID0gZW5kX3NlcTsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSBtaW4odHAtPnJ4X29wdC5udW1fc2Fja3MgKyAxLAotCQkJCQkgICA0IC0gdHAtPnJ4X29wdC50c3RhbXBfb2spOworCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsgMTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHRjcF9kc2Fja19leHRlbmQoc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHNlcSwgdTMyIGVuZF9zZXEpCitzdGF0aWMgdm9pZCB0Y3BfZHNhY2tfZXh0ZW5kKHN0cnVjdCBzb2NrICpzaywgdTMyIHNlcSwgdTMyIGVuZF9zZXEpCiB7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisKIAlpZiAoIXRwLT5yeF9vcHQuZHNhY2spCi0JCXRjcF9kc2Fja19zZXQodHAsIHNlcSwgZW5kX3NlcSk7CisJCXRjcF9kc2Fja19zZXQoc2ssIHNlcSwgZW5kX3NlcSk7CiAJZWxzZQogCQl0Y3Bfc2Fja19leHRlbmQodHAtPmR1cGxpY2F0ZV9zYWNrLCBzZXEsIGVuZF9zZXEpOwogfQpAQCAtMzY5Miw3ICszNzU1LDcgQEAKIAogCWlmIChUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgIT0gVENQX1NLQl9DQihza2IpLT5zZXEgJiYKIAkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLCB0cC0+cmN2X254dCkpIHsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfREVMQVlFREFDS0xPU1QpOworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX0RFTEFZRURBQ0tMT1NUKTsKIAkJdGNwX2VudGVyX3F1aWNrYWNrX21vZGUoc2spOwogCiAJCWlmICh0Y3BfaXNfc2Fjayh0cCkgJiYgc3lzY3RsX3RjcF9kc2FjaykgewpAQCAtMzcwMCw3ICszNzYzLDcgQEAKIAogCQkJaWYgKGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwgdHAtPnJjdl9ueHQpKQogCQkJCWVuZF9zZXEgPSB0cC0+cmN2X254dDsKLQkJCXRjcF9kc2Fja19zZXQodHAsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLCBlbmRfc2VxKTsKKwkJCXRjcF9kc2Fja19zZXQoc2ssIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLCBlbmRfc2VxKTsKIAkJfQogCX0KIApAQCAtMzcyNyw5ICszNzkwLDggQEAKIAkJCSAqIERlY3JlYXNlIG51bV9zYWNrcy4KIAkJCSAqLwogCQkJdHAtPnJ4X29wdC5udW1fc2Fja3MtLTsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gbWluKHRwLT5yeF9vcHQubnVtX3NhY2tzICsKLQkJCQkJCSAgIHRwLT5yeF9vcHQuZHNhY2ssCi0JCQkJCQkgICA0IC0gdHAtPnJ4X29wdC50c3RhbXBfb2spOworCQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArCisJCQkJCSAgICAgICB0cC0+cnhfb3B0LmRzYWNrOwogCQkJZm9yIChpID0gdGhpc19zYWNrOyBpIDwgdHAtPnJ4X29wdC5udW1fc2Fja3M7IGkrKykKIAkJCQlzcFtpXSA9IHNwW2kgKyAxXTsKIAkJCWNvbnRpbnVlOwpAQCAtMzc3OSw3ICszODQxLDcgQEAKIAkgKgogCSAqIElmIHRoZSBzYWNrIGFycmF5IGlzIGZ1bGwsIGZvcmdldCBhYm91dCB0aGUgbGFzdCBvbmUuCiAJICovCi0JaWYgKHRoaXNfc2FjayA+PSA0KSB7CisJaWYgKHRoaXNfc2FjayA+PSBUQ1BfTlVNX1NBQ0tTKSB7CiAJCXRoaXNfc2Fjay0tOwogCQl0cC0+cnhfb3B0Lm51bV9zYWNrcy0tOwogCQlzcC0tOwpAQCAtMzc5Miw4ICszODU0LDcgQEAKIAlzcC0+c3RhcnRfc2VxID0gc2VxOwogCXNwLT5lbmRfc2VxID0gZW5kX3NlcTsKIAl0cC0+cnhfb3B0Lm51bV9zYWNrcysrOwotCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gbWluKHRwLT5yeF9vcHQubnVtX3NhY2tzICsgdHAtPnJ4X29wdC5kc2FjaywKLQkJCQkgICA0IC0gdHAtPnJ4X29wdC50c3RhbXBfb2spOworCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3MgKyB0cC0+cnhfb3B0LmRzYWNrOwogfQogCiAvKiBSQ1YuTlhUIGFkdmFuY2VzLCBzb21lIFNBQ0tzIHNob3VsZCBiZSBlYXRlbi4gKi8KQEAgLTM4MzAsOSArMzg5MSw4IEBACiAJfQogCWlmIChudW1fc2Fja3MgIT0gdHAtPnJ4X29wdC5udW1fc2Fja3MpIHsKIAkJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSBudW1fc2Fja3M7Ci0JCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gbWluKHRwLT5yeF9vcHQubnVtX3NhY2tzICsKLQkJCQkJICAgdHAtPnJ4X29wdC5kc2FjaywKLQkJCQkJICAgNCAtIHRwLT5yeF9vcHQudHN0YW1wX29rKTsKKwkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArCisJCQkJICAgICAgIHRwLT5yeF9vcHQuZHNhY2s7CiAJfQogfQogCkBAIC0zODUzLDcgKzM5MTMsNyBAQAogCQkJX191MzIgZHNhY2sgPSBkc2Fja19oaWdoOwogCQkJaWYgKGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEsIGRzYWNrX2hpZ2gpKQogCQkJCWRzYWNrX2hpZ2ggPSBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXE7Ci0JCQl0Y3BfZHNhY2tfZXh0ZW5kKHRwLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSwgZHNhY2spOworCQkJdGNwX2RzYWNrX2V4dGVuZChzaywgVENQX1NLQl9DQihza2IpLT5zZXEsIGRzYWNrKTsKIAkJfQogCiAJCWlmICghYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCB0cC0+cmN2X254dCkpIHsKQEAgLTM5MTEsOCArMzk3MSw3IEBACiAKIAlpZiAodHAtPnJ4X29wdC5kc2FjaykgewogCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHRwLT5yeF9vcHQubnVtX3NhY2tzLAotCQkJCQkgICAgIDQgLSB0cC0+cnhfb3B0LnRzdGFtcF9vayk7CisJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3M7CiAJfQogCiAJLyogIFF1ZXVlIGRhdGEgZm9yIGRlbGl2ZXJ5IHRvIHRoZSB1c2VyLgpAQCAtMzk4MSw4ICs0MDQwLDggQEAKIAogCWlmICghYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCB0cC0+cmN2X254dCkpIHsKIAkJLyogQSByZXRyYW5zbWl0LCAybmQgbW9zdCBjb21tb24gY2FzZS4gIEZvcmNlIGFuIGltbWVkaWF0ZSBhY2suICovCi0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0RFTEFZRURBQ0tMT1NUKTsKLQkJdGNwX2RzYWNrX3NldCh0cCwgVENQX1NLQl9DQihza2IpLT5zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSk7CisJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfREVMQVlFREFDS0xPU1QpOworCQl0Y3BfZHNhY2tfc2V0KHNrLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKTsKIAogb3V0X29mX3dpbmRvdzoKIAkJdGNwX2VudGVyX3F1aWNrYWNrX21vZGUoc2spOwpAQCAtNDAwNCw3ICs0MDYzLDcgQEAKIAkJCSAgIHRwLT5yY3Zfbnh0LCBUQ1BfU0tCX0NCKHNrYiktPnNlcSwKIAkJCSAgIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSk7CiAKLQkJdGNwX2RzYWNrX3NldCh0cCwgVENQX1NLQl9DQihza2IpLT5zZXEsIHRwLT5yY3Zfbnh0KTsKKwkJdGNwX2RzYWNrX3NldChzaywgVENQX1NLQl9DQihza2IpLT5zZXEsIHRwLT5yY3Zfbnh0KTsKIAogCQkvKiBJZiB3aW5kb3cgaXMgY2xvc2VkLCBkcm9wIHRhaWwgb2YgcGFja2V0LiBCdXQgYWZ0ZXIKIAkJICogcmVtZW1iZXJpbmcgRC1TQUNLIGZvciBpdHMgaGVhZCBtYWRlIGluIHByZXZpb3VzIGxpbmUuCkBAIC00MDY5LDEyICs0MTI4LDEyIEBACiAJCQlpZiAoIWFmdGVyKGVuZF9zZXEsIFRDUF9TS0JfQ0Ioc2tiMSktPmVuZF9zZXEpKSB7CiAJCQkJLyogQWxsIHRoZSBiaXRzIGFyZSBwcmVzZW50LiBEcm9wLiAqLwogCQkJCV9fa2ZyZWVfc2tiKHNrYik7Ci0JCQkJdGNwX2RzYWNrX3NldCh0cCwgc2VxLCBlbmRfc2VxKTsKKwkJCQl0Y3BfZHNhY2tfc2V0KHNrLCBzZXEsIGVuZF9zZXEpOwogCQkJCWdvdG8gYWRkX3NhY2s7CiAJCQl9CiAJCQlpZiAoYWZ0ZXIoc2VxLCBUQ1BfU0tCX0NCKHNrYjEpLT5zZXEpKSB7CiAJCQkJLyogUGFydGlhbCBvdmVybGFwLiAqLwotCQkJCXRjcF9kc2Fja19zZXQodHAsIHNlcSwKKwkJCQl0Y3BfZHNhY2tfc2V0KHNrLCBzZXEsCiAJCQkJCSAgICAgIFRDUF9TS0JfQ0Ioc2tiMSktPmVuZF9zZXEpOwogCQkJfSBlbHNlIHsKIAkJCQlza2IxID0gc2tiMS0+cHJldjsKQEAgLTQwODcsMTIgKzQxNDYsMTIgQEAKIAkJICAgICAgIChzdHJ1Y3Qgc2tfYnVmZiAqKSZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlICYmCiAJCSAgICAgICBhZnRlcihlbmRfc2VxLCBUQ1BfU0tCX0NCKHNrYjEpLT5zZXEpKSB7CiAJCQlpZiAoYmVmb3JlKGVuZF9zZXEsIFRDUF9TS0JfQ0Ioc2tiMSktPmVuZF9zZXEpKSB7Ci0JCQkJdGNwX2RzYWNrX2V4dGVuZCh0cCwgVENQX1NLQl9DQihza2IxKS0+c2VxLAorCQkJCXRjcF9kc2Fja19leHRlbmQoc2ssIFRDUF9TS0JfQ0Ioc2tiMSktPnNlcSwKIAkJCQkJCSBlbmRfc2VxKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCV9fc2tiX3VubGluayhza2IxLCAmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSk7Ci0JCQl0Y3BfZHNhY2tfZXh0ZW5kKHRwLCBUQ1BfU0tCX0NCKHNrYjEpLT5zZXEsCisJCQl0Y3BfZHNhY2tfZXh0ZW5kKHNrLCBUQ1BfU0tCX0NCKHNrYjEpLT5zZXEsCiAJCQkJCSBUQ1BfU0tCX0NCKHNrYjEpLT5lbmRfc2VxKTsKIAkJCV9fa2ZyZWVfc2tiKHNrYjEpOwogCQl9CkBAIC00MTIzLDcgKzQxODIsNyBAQAogCQkJc3RydWN0IHNrX2J1ZmYgKm5leHQgPSBza2ItPm5leHQ7CiAJCQlfX3NrYl91bmxpbmsoc2tiLCBsaXN0KTsKIAkJCV9fa2ZyZWVfc2tiKHNrYik7Ci0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BSQ1ZDT0xMQVBTRUQpOworCQkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BSQ1ZDT0xMQVBTRUQpOwogCQkJc2tiID0gbmV4dDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC00MTkxLDcgKzQyNTAsNyBAQAogCQkJCXN0cnVjdCBza19idWZmICpuZXh0ID0gc2tiLT5uZXh0OwogCQkJCV9fc2tiX3VubGluayhza2IsIGxpc3QpOwogCQkJCV9fa2ZyZWVfc2tiKHNrYik7Ci0JCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQUkNWQ09MTEFQU0VEKTsKKwkJCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFJDVkNPTExBUFNFRCk7CiAJCQkJc2tiID0gbmV4dDsKIAkJCQlpZiAoc2tiID09IHRhaWwgfHwKIAkJCQkgICAgdGNwX2hkcihza2IpLT5zeW4gfHwKQEAgLTQyNTQsNyArNDMxMyw3IEBACiAJaW50IHJlcyA9IDA7CiAKIAlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSkpIHsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfT0ZPUFJVTkVEKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9PRk9QUlVORUQpOwogCQlfX3NrYl9xdWV1ZV9wdXJnZSgmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSk7CiAKIAkJLyogUmVzZXQgU0FDSyBzdGF0ZS4gIEEgY29uZm9ybWluZyBTQUNLIGltcGxlbWVudGF0aW9uIHdpbGwKQEAgLTQyODMsNyArNDM0Miw3IEBACiAKIAlTT0NLX0RFQlVHKHNrLCAicHJ1bmVfcXVldWU6IGM9JXhcbiIsIHRwLT5jb3BpZWRfc2VxKTsKIAotCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1BSVU5FQ0FMTEVEKTsKKwlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1BSVU5FQ0FMTEVEKTsKIAogCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpID49IHNrLT5za19yY3ZidWYpCiAJCXRjcF9jbGFtcF93aW5kb3coc2spOwpAQCAtNDMxMiw3ICs0MzcxLDcgQEAKIAkgKiBkcm9wIHJlY2VpdmUgZGF0YSBvbiB0aGUgZmxvb3IuICBJdCB3aWxsIGdldCByZXRyYW5zbWl0dGVkCiAJICogYW5kIGhvcGVmdWxseSB0aGVuIHdlJ2xsIGhhdmUgc3VmZmljaWVudCBzcGFjZS4KIAkgKi8KLQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9SQ1ZQUlVORUQpOworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfUkNWUFJVTkVEKTsKIAogCS8qIE1hc3NpdmUgYnVmZmVyIG92ZXJjb21taXQuICovCiAJdHAtPnByZWRfZmxhZ3MgPSAwOwpAQCAtNDc0Miw3ICs0ODAxLDcgQEAKIAkJCQl0Y3BfZGF0YV9zbmRfY2hlY2soc2spOwogCQkJCXJldHVybiAwOwogCQkJfSBlbHNlIHsgLyogSGVhZGVyIHRvbyBzbWFsbCAqLwotCQkJCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9JTkVSUlMpOworCQkJCVRDUF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBUQ1BfTUlCX0lORVJSUyk7CiAJCQkJZ290byBkaXNjYXJkOwogCQkJfQogCQl9IGVsc2UgewpAQCAtNDc3OSw3ICs0ODM4LDcgQEAKIAogCQkJCQlfX3NrYl9wdWxsKHNrYiwgdGNwX2hlYWRlcl9sZW4pOwogCQkJCQl0cC0+cmN2X254dCA9IFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcTsKLQkJCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQSFBISVRTVE9VU0VSKTsKKwkJCQkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BIUEhJVFNUT1VTRVIpOwogCQkJCX0KIAkJCQlpZiAoY29waWVkX2Vhcmx5KQogCQkJCQl0Y3BfY2xlYW51cF9yYnVmKHNrLCBza2ItPmxlbik7CkBAIC00ODAyLDcgKzQ4NjEsNyBAQAogCQkJCWlmICgoaW50KXNrYi0+dHJ1ZXNpemUgPiBzay0+c2tfZm9yd2FyZF9hbGxvYykKIAkJCQkJZ290byBzdGVwNTsKIAotCQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUEhQSElUUyk7CisJCQkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BIUEhJVFMpOwogCiAJCQkJLyogQnVsayBkYXRhIHRyYW5zZmVyOiByZWNlaXZlciAqLwogCQkJCV9fc2tiX3B1bGwoc2tiLCB0Y3BfaGVhZGVyX2xlbik7CkBAIC00ODQ2LDcgKzQ5MDUsNyBAQAogCWlmICh0Y3BfZmFzdF9wYXJzZV9vcHRpb25zKHNrYiwgdGgsIHRwKSAmJiB0cC0+cnhfb3B0LnNhd190c3RhbXAgJiYKIAkgICAgdGNwX3Bhd3NfZGlzY2FyZChzaywgc2tiKSkgewogCQlpZiAoIXRoLT5yc3QpIHsKLQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1BBV1NFU1RBQlJFSkVDVEVEKTsKKwkJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfUEFXU0VTVEFCUkVKRUNURUQpOwogCQkJdGNwX3NlbmRfZHVwYWNrKHNrLCBza2IpOwogCQkJZ290byBkaXNjYXJkOwogCQl9CkBAIC00ODgxLDggKzQ5NDAsOCBAQAogCXRjcF9yZXBsYWNlX3RzX3JlY2VudCh0cCwgVENQX1NLQl9DQihza2IpLT5zZXEpOwogCiAJaWYgKHRoLT5zeW4gJiYgIWJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwgdHAtPnJjdl9ueHQpKSB7Ci0JCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9JTkVSUlMpOwotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BBQk9SVE9OU1lOKTsKKwkJVENQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OU1lOKTsKIAkJdGNwX3Jlc2V0KHNrKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDkwNCw3ICs0OTYzLDcgQEAKIAlyZXR1cm4gMDsKIAogY3N1bV9lcnJvcjoKLQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfSU5FUlJTKTsKKwlUQ1BfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpOwogCiBkaXNjYXJkOgogCV9fa2ZyZWVfc2tiKHNrYik7CkBAIC00OTM4LDcgKzQ5OTcsNyBAQAogCQlpZiAodHAtPnJ4X29wdC5zYXdfdHN0YW1wICYmIHRwLT5yeF9vcHQucmN2X3RzZWNyICYmCiAJCSAgICAhYmV0d2Vlbih0cC0+cnhfb3B0LnJjdl90c2VjciwgdHAtPnJldHJhbnNfc3RhbXAsCiAJCQkgICAgIHRjcF90aW1lX3N0YW1wKSkgewotCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfUEFXU0FDVElWRVJFSkVDVEVEKTsKKwkJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfUEFXU0FDVElWRVJFSkVDVEVEKTsKIAkJCWdvdG8gcmVzZXRfYW5kX3VuZG87CiAJCX0KIApAQCAtNTIyMiw3ICs1MjgxLDcgQEAKIAlpZiAodGNwX2Zhc3RfcGFyc2Vfb3B0aW9ucyhza2IsIHRoLCB0cCkgJiYgdHAtPnJ4X29wdC5zYXdfdHN0YW1wICYmCiAJICAgIHRjcF9wYXdzX2Rpc2NhcmQoc2ssIHNrYikpIHsKIAkJaWYgKCF0aC0+cnN0KSB7Ci0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9QQVdTRVNUQUJSRUpFQ1RFRCk7CisJCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1BBV1NFU1RBQlJFSkVDVEVEKTsKIAkJCXRjcF9zZW5kX2R1cGFjayhzaywgc2tiKTsKIAkJCWdvdG8gZGlzY2FyZDsKIAkJfQpAQCAtNTI1MSw3ICs1MzEwLDcgQEAKIAkgKglDaGVjayBmb3IgYSBTWU4gaW4gd2luZG93LgogCSAqLwogCWlmICh0aC0+c3luICYmICFiZWZvcmUoVENQX1NLQl9DQihza2IpLT5zZXEsIHRwLT5yY3Zfbnh0KSkgewotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BBQk9SVE9OU1lOKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OU1lOKTsKIAkJdGNwX3Jlc2V0KHNrKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNTMzMyw3ICs1MzkyLDcgQEAKIAkJCQkJICAgIChUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgIT0gVENQX1NLQl9DQihza2IpLT5zZXEgJiYKIAkJCQkJICAgICBhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgLSB0aC0+ZmluLCB0cC0+cmN2X254dCkpKSB7CiAJCQkJCQl0Y3BfZG9uZShzayk7Ci0JCQkJCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BBQk9SVE9OREFUQSk7CisJCQkJCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05EQVRBKTsKIAkJCQkJCXJldHVybiAxOwogCQkJCQl9CiAKQEAgLTUzOTMsNyArNTQ1Miw3IEBACiAJCWlmIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pIHsKIAkJCWlmIChUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgIT0gVENQX1NLQl9DQihza2IpLT5zZXEgJiYKIAkJCSAgICBhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgLSB0aC0+ZmluLCB0cC0+cmN2X254dCkpIHsKLQkJCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BBQk9SVE9OREFUQSk7CisJCQkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OREFUQSk7CiAJCQkJdGNwX3Jlc2V0KHNrKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KQEAgLTU0MjIsNiArNTQ4MSw5IEBACiBFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfcmVvcmRlcmluZyk7CiBFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfYWR2X3dpbl9zY2FsZSk7CiBFWFBPUlRfU1lNQk9MKHRjcF9wYXJzZV9vcHRpb25zKTsKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworRVhQT1JUX1NZTUJPTCh0Y3BfcGFyc2VfbWQ1c2lnX29wdGlvbik7CisjZW5kaWYKIEVYUE9SVF9TWU1CT0wodGNwX3Jjdl9lc3RhYmxpc2hlZCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9yY3Zfc3RhdGVfcHJvY2Vzcyk7CiBFWFBPUlRfU1lNQk9MKHRjcF9pbml0aWFsaXplX3Jjdl9tc3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggZmZlODY5YS4uYTgyZGY2MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC01LDggKzUsNiBAQAogICoKICAqCQlJbXBsZW1lbnRhdGlvbiBvZiB0aGUgVHJhbnNtaXNzaW9uIENvbnRyb2wgUHJvdG9jb2woVENQKS4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IHRjcF9pcHY0LmMsdiAxLjI0MCAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCi0gKgogICoJCUlQdjQgc3BlY2lmaWMgZnVuY3Rpb25zCiAgKgogICoKQEAgLTg5LDEwICs4NywxNCBAQAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiBzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICp0Y3BfdjRfbWQ1X2RvX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkgICBfX2JlMzIgYWRkcik7Ci1zdGF0aWMgaW50IHRjcF92NF9kb19jYWxjX21kNV9oYXNoKGNoYXIgKm1kNV9oYXNoLCBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleSwKLQkJCQkgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKLQkJCQkgICBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHByb3RvY29sLAotCQkJCSAgIHVuc2lnbmVkIGludCB0Y3BsZW4pOworc3RhdGljIGludCB0Y3BfdjRfbWQ1X2hhc2hfaGRyKGNoYXIgKm1kNV9oYXNoLCBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleSwKKwkJCSAgICAgICBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwgc3RydWN0IHRjcGhkciAqdGgpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqdGNwX3Y0X21kNV9kb19sb29rdXAoc3RydWN0IHNvY2sgKnNrLCBfX2JlMzIgYWRkcikKK3sKKwlyZXR1cm4gTlVMTDsKK30KICNlbmRpZgogCiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbyBfX2NhY2hlbGluZV9hbGlnbmVkIHRjcF9oYXNoaW5mbyA9IHsKQEAgLTE3Miw3ICsxNzQsNyBAQAogCQkJICAgICAgIGluZXQtPnNwb3J0LCB1c2luLT5zaW5fcG9ydCwgc2ssIDEpOwogCWlmICh0bXAgPCAwKSB7CiAJCWlmICh0bXAgPT0gLUVORVRVTlJFQUNIKQotCQkJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKKwkJCUlQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKIAkJcmV0dXJuIHRtcDsKIAl9CiAKQEAgLTM0MCwxNiArMzQyLDE3IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCV9fdTMyIHNlcTsKIAlpbnQgZXJyOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCiAJaWYgKHNrYi0+bGVuIDwgKGlwaC0+aWhsIDw8IDIpICsgOCkgewotCQlJQ01QX0lOQ19TVEFUU19CSChJQ01QX01JQl9JTkVSUk9SUyk7CisJCUlDTVBfSU5DX1NUQVRTX0JIKG5ldCwgSUNNUF9NSUJfSU5FUlJPUlMpOwogCQlyZXR1cm47CiAJfQogCi0Jc2sgPSBpbmV0X2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwgJnRjcF9oYXNoaW5mbywgaXBoLT5kYWRkciwgdGgtPmRlc3QsCisJc2sgPSBpbmV0X2xvb2t1cChuZXQsICZ0Y3BfaGFzaGluZm8sIGlwaC0+ZGFkZHIsIHRoLT5kZXN0LAogCQkJaXBoLT5zYWRkciwgdGgtPnNvdXJjZSwgaW5ldF9paWYoc2tiKSk7CiAJaWYgKCFzaykgewotCQlJQ01QX0lOQ19TVEFUU19CSChJQ01QX01JQl9JTkVSUk9SUyk7CisJCUlDTVBfSU5DX1NUQVRTX0JIKG5ldCwgSUNNUF9NSUJfSU5FUlJPUlMpOwogCQlyZXR1cm47CiAJfQogCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkgewpAQCAtMzYyLDcgKzM2NSw3IEBACiAJICogc2VydmVycyB0aGlzIG5lZWRzIHRvIGJlIHNvbHZlZCBkaWZmZXJlbnRseS4KIAkgKi8KIAlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfTE9DS0RST1BQRURJQ01QUyk7CisJCU5FVF9JTkNfU1RBVFNfQkgobmV0LCBMSU5VWF9NSUJfTE9DS0RST1BQRURJQ01QUyk7CiAKIAlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkKIAkJZ290byBvdXQ7CkBAIC0zNzEsNyArMzc0LDcgQEAKIAlzZXEgPSBudG9obCh0aC0+c2VxKTsKIAlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKIAkgICAgIWJldHdlZW4oc2VxLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpKSB7Ci0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX09VVE9GV0lORE9XSUNNUFMpOworCQlORVRfSU5DX1NUQVRTX0JIKG5ldCwgTElOVVhfTUlCX09VVE9GV0lORE9XSUNNUFMpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTQxOCw3ICs0MjEsNyBAQAogCQlCVUdfVFJBUCghcmVxLT5zayk7CiAKIAkJaWYgKHNlcSAhPSB0Y3BfcnNrKHJlcSktPnNudF9pc24pIHsKLQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX09VVE9GV0lORE9XSUNNUFMpOworCQkJTkVUX0lOQ19TVEFUU19CSChuZXQsIExJTlVYX01JQl9PVVRPRldJTkRPV0lDTVBTKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTU0MCw2ICs1NDMsNyBAQAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiAJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXk7CiAjZW5kaWYKKwlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAkvKiBOZXZlciBzZW5kIGEgcmVzZXQgaW4gcmVzcG9uc2UgdG8gYSByZXNldC4gKi8KIAlpZiAodGgtPnJzdCkKQEAgLTU3OCwxMiArNTgyLDkgQEAKIAkJYXJnLmlvdlswXS5pb3ZfbGVuICs9IFRDUE9MRU5fTUQ1U0lHX0FMSUdORUQ7CiAJCXJlcC50aC5kb2ZmID0gYXJnLmlvdlswXS5pb3ZfbGVuIC8gNDsKIAotCQl0Y3BfdjRfZG9fY2FsY19tZDVfaGFzaCgoX191OCAqKSZyZXAub3B0WzFdLAotCQkJCQlrZXksCi0JCQkJCWlwX2hkcihza2IpLT5kYWRkciwKLQkJCQkJaXBfaGRyKHNrYiktPnNhZGRyLAotCQkJCQkmcmVwLnRoLCBJUFBST1RPX1RDUCwKLQkJCQkJYXJnLmlvdlswXS5pb3ZfbGVuKTsKKwkJdGNwX3Y0X21kNV9oYXNoX2hkcigoX191OCAqKSAmcmVwLm9wdFsxXSwKKwkJCQkgICAgIGtleSwgaXBfaGRyKHNrYiktPmRhZGRyLAorCQkJCSAgICAgaXBfaGRyKHNrYiktPnNhZGRyLCAmcmVwLnRoKTsKIAl9CiAjZW5kaWYKIAlhcmcuY3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChpcF9oZHIoc2tiKS0+ZGFkZHIsCkBAIC01OTEsMjAgKzU5MiwyMSBAQAogCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSwgSVBQUk9UT19UQ1AsIDApOwogCWFyZy5jc3Vtb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIC8gMjsKIAotCWlwX3NlbmRfcmVwbHkoZGV2X25ldChza2ItPmRzdC0+ZGV2KS0+aXB2NC50Y3Bfc29jaywgc2tiLAorCW5ldCA9IGRldl9uZXQoc2tiLT5kc3QtPmRldik7CisJaXBfc2VuZF9yZXBseShuZXQtPmlwdjQudGNwX3NvY2ssIHNrYiwKIAkJICAgICAgJmFyZywgYXJnLmlvdlswXS5pb3ZfbGVuKTsKIAotCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9PVVRTRUdTKTsKLQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfT1VUUlNUUyk7CisJVENQX0lOQ19TVEFUU19CSChuZXQsIFRDUF9NSUJfT1VUU0VHUyk7CisJVENQX0lOQ19TVEFUU19CSChuZXQsIFRDUF9NSUJfT1VUUlNUUyk7CiB9CiAKIC8qIFRoZSBjb2RlIGZvbGxvd2luZyBiZWxvdyBzZW5kaW5nIEFDS3MgaW4gU1lOLVJFQ1YgYW5kIFRJTUUtV0FJVCBzdGF0ZXMKICAgIG91dHNpZGUgc29ja2V0IGNvbnRleHQgaXMgdWdseSwgY2VydGFpbmx5LiBXaGF0IGNhbiBJIGRvPwogICovCiAKLXN0YXRpYyB2b2lkIHRjcF92NF9zZW5kX2FjayhzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnR3c2ssCi0JCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHNlcSwgdTMyIGFjaywKLQkJCSAgICB1MzIgd2luLCB1MzIgdHMpCitzdGF0aWMgdm9pZCB0Y3BfdjRfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHNlcSwgdTMyIGFjaywKKwkJCSAgICB1MzIgd2luLCB1MzIgdHMsIGludCBvaWYsCisJCQkgICAgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXkpCiB7CiAJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiAJc3RydWN0IHsKQEAgLTYxNiwxMCArNjE4LDcgQEAKIAkJCV07CiAJfSByZXA7CiAJc3RydWN0IGlwX3JlcGx5X2FyZyBhcmc7Ci0jaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKLQlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleTsKLQlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgdHdfa2V5OwotI2VuZGlmCisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAltZW1zZXQoJnJlcC50aCwgMCwgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKTsKIAltZW1zZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOwpAQCAtNjQ1LDIzICs2NDQsNiBAQAogCXJlcC50aC53aW5kb3cgID0gaHRvbnMod2luKTsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi0JLyoKLQkgKiBUaGUgU0tCIGhvbGRzIGFuIGltY29taW5nIHBhY2tldCwgYnV0IG1heSBub3QgaGF2ZSBhIHZhbGlkIC0+c2sKLQkgKiBwb2ludGVyLiBUaGlzIGlzIGVzcGVjaWFsbHkgdGhlIGNhc2Ugd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYQotCSAqIFRJTUVfV0FJVCBhY2ssIGJlY2F1c2UgdGhlIHNrIHN0cnVjdHVyZSBpcyBsb25nIGdvbmUsIGFuZCBvbmx5Ci0JICogdGhlIHRjcF90aW1ld2FpdF9zb2NrIHJlbWFpbnMuIFNvIHRoZSBtZDUga2V5IGlzIHN0YXNoZWQgaW4gdGhhdAotCSAqIHN0cnVjdHVyZSwgYW5kIHdlIHVzZSBpdCBpbiBwcmVmZXJlbmNlLiAgSSBiZWxpZXZlIHRoYXQgKHR3c2sgfHwKLQkgKiBza2ItPnNrKSBob2xkcyB0cnVlLCBidXQgd2UgcHJvZ3JhbSBkZWZlbnNpdmVseS4KLQkgKi8KLQlpZiAoIXR3c2sgJiYgc2tiLT5zaykgewotCQlrZXkgPSB0Y3BfdjRfbWQ1X2RvX2xvb2t1cChza2ItPnNrLCBpcF9oZHIoc2tiKS0+ZGFkZHIpOwotCX0gZWxzZSBpZiAodHdzayAmJiB0d3NrLT50d19tZDVfa2V5bGVuKSB7Ci0JCXR3X2tleS5rZXkgPSB0d3NrLT50d19tZDVfa2V5OwotCQl0d19rZXkua2V5bGVuID0gdHdzay0+dHdfbWQ1X2tleWxlbjsKLQkJa2V5ID0gJnR3X2tleTsKLQl9IGVsc2UKLQkJa2V5ID0gTlVMTDsKLQogCWlmIChrZXkpIHsKIAkJaW50IG9mZnNldCA9ICh0cykgPyAzIDogMDsKIApAQCAtNjcyLDI1ICs2NTQsMjIgQEAKIAkJYXJnLmlvdlswXS5pb3ZfbGVuICs9IFRDUE9MRU5fTUQ1U0lHX0FMSUdORUQ7CiAJCXJlcC50aC5kb2ZmID0gYXJnLmlvdlswXS5pb3ZfbGVuLzQ7CiAKLQkJdGNwX3Y0X2RvX2NhbGNfbWQ1X2hhc2goKF9fdTggKikmcmVwLm9wdFtvZmZzZXRdLAotCQkJCQlrZXksCi0JCQkJCWlwX2hkcihza2IpLT5kYWRkciwKLQkJCQkJaXBfaGRyKHNrYiktPnNhZGRyLAotCQkJCQkmcmVwLnRoLCBJUFBST1RPX1RDUCwKLQkJCQkJYXJnLmlvdlswXS5pb3ZfbGVuKTsKKwkJdGNwX3Y0X21kNV9oYXNoX2hkcigoX191OCAqKSAmcmVwLm9wdFtvZmZzZXRdLAorCQkJCSAgICBrZXksIGlwX2hkcihza2IpLT5kYWRkciwKKwkJCQkgICAgaXBfaGRyKHNrYiktPnNhZGRyLCAmcmVwLnRoKTsKIAl9CiAjZW5kaWYKIAlhcmcuY3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChpcF9oZHIoc2tiKS0+ZGFkZHIsCiAJCQkJICAgICAgaXBfaGRyKHNrYiktPnNhZGRyLCAvKiBYWFggKi8KIAkJCQkgICAgICBhcmcuaW92WzBdLmlvdl9sZW4sIElQUFJPVE9fVENQLCAwKTsKIAlhcmcuY3N1bW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSAvIDI7Ci0JaWYgKHR3c2spCi0JCWFyZy5ib3VuZF9kZXZfaWYgPSB0d3NrLT50d19zay50d19ib3VuZF9kZXZfaWY7CisJaWYgKG9pZikKKwkJYXJnLmJvdW5kX2Rldl9pZiA9IG9pZjsKIAotCWlwX3NlbmRfcmVwbHkoZGV2X25ldChza2ItPmRldiktPmlwdjQudGNwX3NvY2ssIHNrYiwKKwlpcF9zZW5kX3JlcGx5KG5ldC0+aXB2NC50Y3Bfc29jaywgc2tiLAogCQkgICAgICAmYXJnLCBhcmcuaW92WzBdLmlvdl9sZW4pOwogCi0JVENQX0lOQ19TVEFUU19CSChUQ1BfTUlCX09VVFNFR1MpOworCVRDUF9JTkNfU1RBVFNfQkgobmV0LCBUQ1BfTUlCX09VVFNFR1MpOwogfQogCiBzdGF0aWMgdm9pZCB0Y3BfdjRfdGltZXdhaXRfYWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTY5OCw5ICs2NzcsMTIgQEAKIAlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7CiAJc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrICp0Y3B0dyA9IHRjcF90d3NrKHNrKTsKIAotCXRjcF92NF9zZW5kX2Fjayh0Y3B0dywgc2tiLCB0Y3B0dy0+dHdfc25kX254dCwgdGNwdHctPnR3X3Jjdl9ueHQsCisJdGNwX3Y0X3NlbmRfYWNrKHNrYiwgdGNwdHctPnR3X3NuZF9ueHQsIHRjcHR3LT50d19yY3Zfbnh0LAogCQkJdGNwdHctPnR3X3Jjdl93bmQgPj4gdHctPnR3X3Jjdl93c2NhbGUsCi0JCQl0Y3B0dy0+dHdfdHNfcmVjZW50KTsKKwkJCXRjcHR3LT50d190c19yZWNlbnQsCisJCQl0dy0+dHdfYm91bmRfZGV2X2lmLAorCQkJdGNwX3R3c2tfbWQ1X2tleSh0Y3B0dykKKwkJCSk7CiAKIAlpbmV0X3R3c2tfcHV0KHR3KTsKIH0KQEAgLTcwOCw5ICs2OTAsMTEgQEAKIHN0YXRpYyB2b2lkIHRjcF92NF9yZXFza19zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCXRjcF92NF9zZW5kX2FjayhOVUxMLCBza2IsIHRjcF9yc2socmVxKS0+c250X2lzbiArIDEsCisJdGNwX3Y0X3NlbmRfYWNrKHNrYiwgdGNwX3JzayhyZXEpLT5zbnRfaXNuICsgMSwKIAkJCXRjcF9yc2socmVxKS0+cmN2X2lzbiArIDEsIHJlcS0+cmN2X3duZCwKLQkJCXJlcS0+dHNfcmVjZW50KTsKKwkJCXJlcS0+dHNfcmVjZW50LAorCQkJMCwKKwkJCXRjcF92NF9tZDVfZG9fbG9va3VwKHNrYi0+c2ssIGlwX2hkcihza2IpLT5kYWRkcikpOwogfQogCiAvKgpAQCAtMTAwMCwzMiArOTg0LDEzIEBACiAJCQkJIG5ld2tleSwgY21kLnRjcG1fa2V5bGVuKTsKIH0KIAotc3RhdGljIGludCB0Y3BfdjRfZG9fY2FsY19tZDVfaGFzaChjaGFyICptZDVfaGFzaCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCi0JCQkJICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJICAgc3RydWN0IHRjcGhkciAqdGgsIGludCBwcm90b2NvbCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdGNwbGVuKQorc3RhdGljIGludCB0Y3BfdjRfbWQ1X2hhc2hfcHNldWRvaGVhZGVyKHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwLAorCQkJCQlfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwgaW50IG5ieXRlcykKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbNF07Ci0JX191MTYgZGF0YV9sZW47Ci0JaW50IGJsb2NrID0gMDsKLQlfX3N1bTE2IG9sZF9jaGVja3N1bTsKLQlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICpocDsKIAlzdHJ1Y3QgdGNwNF9wc2V1ZG9oZHIgKmJwOwotCXN0cnVjdCBoYXNoX2Rlc2MgKmRlc2M7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gMDsKLQotCS8qCi0JICogT2theSwgc28gUkZDMjM4NSBpcyB0dXJuZWQgb24gZm9yIHRoaXMgY29ubmVjdGlvbiwKLQkgKiBzbyB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZSBNRDUgaGFzaCBmb3IgdGhlIHBhY2tldCBub3cuCi0JICovCi0KLQlocCA9IHRjcF9nZXRfbWQ1c2lnX3Bvb2woKTsKLQlpZiAoIWhwKQotCQlnb3RvIGNsZWFyX2hhc2hfbm9wdXQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwogCiAJYnAgPSAmaHAtPm1kNV9ibGsuaXA0OwotCWRlc2MgPSAmaHAtPm1kNV9kZXNjOwogCiAJLyoKIAkgKiAxLiB0aGUgVENQIHBzZXVkby1oZWFkZXIgKGluIHRoZSBvcmRlcjogc291cmNlIElQIGFkZHJlc3MsCkBAIC0xMDM1LDg2ICsxMDAwLDk2IEBACiAJYnAtPnNhZGRyID0gc2FkZHI7CiAJYnAtPmRhZGRyID0gZGFkZHI7CiAJYnAtPnBhZCA9IDA7Ci0JYnAtPnByb3RvY29sID0gcHJvdG9jb2w7Ci0JYnAtPmxlbiA9IGh0b25zKHRjcGxlbik7CisJYnAtPnByb3RvY29sID0gSVBQUk9UT19UQ1A7CisJYnAtPmxlbiA9IGNwdV90b19iZTE2KG5ieXRlcyk7CiAKLQlzZ19pbml0X3RhYmxlKHNnLCA0KTsKKwlzZ19pbml0X29uZSgmc2csIGJwLCBzaXplb2YoKmJwKSk7CisJcmV0dXJuIGNyeXB0b19oYXNoX3VwZGF0ZSgmaHAtPm1kNV9kZXNjLCAmc2csIHNpemVvZigqYnApKTsKK30KIAotCXNnX3NldF9idWYoJnNnW2Jsb2NrKytdLCBicCwgc2l6ZW9mKCpicCkpOwotCW5ieXRlcyArPSBzaXplb2YoKmJwKTsKK3N0YXRpYyBpbnQgdGNwX3Y0X21kNV9oYXNoX2hkcihjaGFyICptZDVfaGFzaCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCisJCQkgICAgICAgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsIHN0cnVjdCB0Y3BoZHIgKnRoKQoreworCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwOworCXN0cnVjdCBoYXNoX2Rlc2MgKmRlc2M7CiAKLQkvKiAyLiB0aGUgVENQIGhlYWRlciwgZXhjbHVkaW5nIG9wdGlvbnMsIGFuZCBhc3N1bWluZyBhCi0JICogY2hlY2tzdW0gb2YgemVyby8KLQkgKi8KLQlvbGRfY2hlY2tzdW0gPSB0aC0+Y2hlY2s7Ci0JdGgtPmNoZWNrID0gMDsKLQlzZ19zZXRfYnVmKCZzZ1tibG9jaysrXSwgdGgsIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSk7Ci0JbmJ5dGVzICs9IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKKwlocCA9IHRjcF9nZXRfbWQ1c2lnX3Bvb2woKTsKKwlpZiAoIWhwKQorCQlnb3RvIGNsZWFyX2hhc2hfbm9wdXQ7CisJZGVzYyA9ICZocC0+bWQ1X2Rlc2M7CiAKLQkvKiAzLiB0aGUgVENQIHNlZ21lbnQgZGF0YSAoaWYgYW55KSAqLwotCWRhdGFfbGVuID0gdGNwbGVuIC0gKHRoLT5kb2ZmIDw8IDIpOwotCWlmIChkYXRhX2xlbiA+IDApIHsKLQkJdW5zaWduZWQgY2hhciAqZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopdGggKyAodGgtPmRvZmYgPDwgMik7Ci0JCXNnX3NldF9idWYoJnNnW2Jsb2NrKytdLCBkYXRhLCBkYXRhX2xlbik7Ci0JCW5ieXRlcyArPSBkYXRhX2xlbjsKLQl9Ci0KLQkvKiA0LiBhbiBpbmRlcGVuZGVudGx5LXNwZWNpZmllZCBrZXkgb3IgcGFzc3dvcmQsIGtub3duIHRvIGJvdGgKLQkgKiBUQ1BzIGFuZCBwcmVzdW1hYmx5IGNvbm5lY3Rpb24tc3BlY2lmaWMKLQkgKi8KLQlzZ19zZXRfYnVmKCZzZ1tibG9jaysrXSwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKLQluYnl0ZXMgKz0ga2V5LT5rZXlsZW47Ci0KLQlzZ19tYXJrX2VuZCgmc2dbYmxvY2sgLSAxXSk7Ci0KLQkvKiBOb3cgc3RvcmUgdGhlIEhhc2ggaW50byB0aGUgcGFja2V0ICovCi0JZXJyID0gY3J5cHRvX2hhc2hfaW5pdChkZXNjKTsKLQlpZiAoZXJyKQorCWlmIChjcnlwdG9faGFzaF9pbml0KGRlc2MpKQogCQlnb3RvIGNsZWFyX2hhc2g7Ci0JZXJyID0gY3J5cHRvX2hhc2hfdXBkYXRlKGRlc2MsIHNnLCBuYnl0ZXMpOwotCWlmIChlcnIpCisJaWYgKHRjcF92NF9tZDVfaGFzaF9wc2V1ZG9oZWFkZXIoaHAsIGRhZGRyLCBzYWRkciwgdGgtPmRvZmYgPDwgMikpCiAJCWdvdG8gY2xlYXJfaGFzaDsKLQllcnIgPSBjcnlwdG9faGFzaF9maW5hbChkZXNjLCBtZDVfaGFzaCk7Ci0JaWYgKGVycikKKwlpZiAodGNwX21kNV9oYXNoX2hlYWRlcihocCwgdGgpKQorCQlnb3RvIGNsZWFyX2hhc2g7CisJaWYgKHRjcF9tZDVfaGFzaF9rZXkoaHAsIGtleSkpCisJCWdvdG8gY2xlYXJfaGFzaDsKKwlpZiAoY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgbWQ1X2hhc2gpKQogCQlnb3RvIGNsZWFyX2hhc2g7CiAKLQkvKiBSZXNldCBoZWFkZXIsIGFuZCBmcmVlIHVwIHRoZSBjcnlwdG8gKi8KIAl0Y3BfcHV0X21kNXNpZ19wb29sKCk7Ci0JdGgtPmNoZWNrID0gb2xkX2NoZWNrc3VtOwotCi1vdXQ6CiAJcmV0dXJuIDA7CisKIGNsZWFyX2hhc2g6CiAJdGNwX3B1dF9tZDVzaWdfcG9vbCgpOwogY2xlYXJfaGFzaF9ub3B1dDoKIAltZW1zZXQobWQ1X2hhc2gsIDAsIDE2KTsKLQlnb3RvIG91dDsKKwlyZXR1cm4gMTsKIH0KIAotaW50IHRjcF92NF9jYWxjX21kNV9oYXNoKGNoYXIgKm1kNV9oYXNoLCBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleSwKLQkJCSBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCSBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHByb3RvY29sLAotCQkJIHVuc2lnbmVkIGludCB0Y3BsZW4pCitpbnQgdGNwX3Y0X21kNV9oYXNoX3NrYihjaGFyICptZDVfaGFzaCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCisJCQlzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCXN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqaHA7CisJc3RydWN0IGhhc2hfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKIAlfX2JlMzIgc2FkZHIsIGRhZGRyOwogCiAJaWYgKHNrKSB7CiAJCXNhZGRyID0gaW5ldF9zayhzayktPnNhZGRyOwogCQlkYWRkciA9IGluZXRfc2soc2spLT5kYWRkcjsKKwl9IGVsc2UgaWYgKHJlcSkgeworCQlzYWRkciA9IGluZXRfcnNrKHJlcSktPmxvY19hZGRyOworCQlkYWRkciA9IGluZXRfcnNrKHJlcSktPnJtdF9hZGRyOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilkc3Q7Ci0JCUJVR19PTighcnQpOwotCQlzYWRkciA9IHJ0LT5ydF9zcmM7Ci0JCWRhZGRyID0gcnQtPnJ0X2RzdDsKKwkJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKKwkJc2FkZHIgPSBpcGgtPnNhZGRyOworCQlkYWRkciA9IGlwaC0+ZGFkZHI7CiAJfQotCXJldHVybiB0Y3BfdjRfZG9fY2FsY19tZDVfaGFzaChtZDVfaGFzaCwga2V5LAotCQkJCSAgICAgICBzYWRkciwgZGFkZHIsCi0JCQkJICAgICAgIHRoLCBwcm90b2NvbCwgdGNwbGVuKTsKKworCWhwID0gdGNwX2dldF9tZDVzaWdfcG9vbCgpOworCWlmICghaHApCisJCWdvdG8gY2xlYXJfaGFzaF9ub3B1dDsKKwlkZXNjID0gJmhwLT5tZDVfZGVzYzsKKworCWlmIChjcnlwdG9faGFzaF9pbml0KGRlc2MpKQorCQlnb3RvIGNsZWFyX2hhc2g7CisKKwlpZiAodGNwX3Y0X21kNV9oYXNoX3BzZXVkb2hlYWRlcihocCwgZGFkZHIsIHNhZGRyLCBza2ItPmxlbikpCisJCWdvdG8gY2xlYXJfaGFzaDsKKwlpZiAodGNwX21kNV9oYXNoX2hlYWRlcihocCwgdGgpKQorCQlnb3RvIGNsZWFyX2hhc2g7CisJaWYgKHRjcF9tZDVfaGFzaF9za2JfZGF0YShocCwgc2tiLCB0aC0+ZG9mZiA8PCAyKSkKKwkJZ290byBjbGVhcl9oYXNoOworCWlmICh0Y3BfbWQ1X2hhc2hfa2V5KGhwLCBrZXkpKQorCQlnb3RvIGNsZWFyX2hhc2g7CisJaWYgKGNyeXB0b19oYXNoX2ZpbmFsKGRlc2MsIG1kNV9oYXNoKSkKKwkJZ290byBjbGVhcl9oYXNoOworCisJdGNwX3B1dF9tZDVzaWdfcG9vbCgpOworCXJldHVybiAwOworCitjbGVhcl9oYXNoOgorCXRjcF9wdXRfbWQ1c2lnX3Bvb2woKTsKK2NsZWFyX2hhc2hfbm9wdXQ6CisJbWVtc2V0KG1kNV9oYXNoLCAwLCAxNik7CisJcmV0dXJuIDE7CiB9CiAKLUVYUE9SVF9TWU1CT0wodGNwX3Y0X2NhbGNfbWQ1X2hhc2gpOworRVhQT1JUX1NZTUJPTCh0Y3BfdjRfbWQ1X2hhc2hfc2tiKTsKIAogc3RhdGljIGludCB0Y3BfdjRfaW5ib3VuZF9tZDVfaGFzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xMTMwLDUyICsxMTA1LDEyIEBACiAJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICpoYXNoX2V4cGVjdGVkOwogCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7Ci0JaW50IGxlbmd0aCA9ICh0aC0+ZG9mZiA8PCAyKSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKIAlpbnQgZ2VuaGFzaDsKLQl1bnNpZ25lZCBjaGFyICpwdHI7CiAJdW5zaWduZWQgY2hhciBuZXdoYXNoWzE2XTsKIAogCWhhc2hfZXhwZWN0ZWQgPSB0Y3BfdjRfbWQ1X2RvX2xvb2t1cChzaywgaXBoLT5zYWRkcik7CisJaGFzaF9sb2NhdGlvbiA9IHRjcF9wYXJzZV9tZDVzaWdfb3B0aW9uKHRoKTsKIAotCS8qCi0JICogSWYgdGhlIFRDUCBvcHRpb24gbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgVENQX01ENVNJRwotCSAqIG9wdGlvbiBsZW5ndGgsIHRoZW4gd2UgY2FuIHNob3J0Y3V0Ci0JICovCi0JaWYgKGxlbmd0aCA8IFRDUE9MRU5fTUQ1U0lHKSB7Ci0JCWlmIChoYXNoX2V4cGVjdGVkKQotCQkJcmV0dXJuIDE7Ci0JCWVsc2UKLQkJCXJldHVybiAwOwotCX0KLQotCS8qIE9rYXksIHdlIGNhbid0IHNob3J0Y3V0IC0gd2UgaGF2ZSB0byBncnViIHRocm91Z2ggdGhlIG9wdGlvbnMgKi8KLQlwdHIgPSAodW5zaWduZWQgY2hhciAqKSh0aCArIDEpOwotCXdoaWxlIChsZW5ndGggPiAwKSB7Ci0JCWludCBvcGNvZGUgPSAqcHRyKys7Ci0JCWludCBvcHNpemU7Ci0KLQkJc3dpdGNoIChvcGNvZGUpIHsKLQkJY2FzZSBUQ1BPUFRfRU9MOgotCQkJZ290byBkb25lX29wdHM7Ci0JCWNhc2UgVENQT1BUX05PUDoKLQkJCWxlbmd0aC0tOwotCQkJY29udGludWU7Ci0JCWRlZmF1bHQ6Ci0JCQlvcHNpemUgPSAqcHRyKys7Ci0JCQlpZiAob3BzaXplIDwgMikKLQkJCQlnb3RvIGRvbmVfb3B0czsKLQkJCWlmIChvcHNpemUgPiBsZW5ndGgpCi0JCQkJZ290byBkb25lX29wdHM7Ci0KLQkJCWlmIChvcGNvZGUgPT0gVENQT1BUX01ENVNJRykgewotCQkJCWhhc2hfbG9jYXRpb24gPSBwdHI7Ci0JCQkJZ290byBkb25lX29wdHM7Ci0JCQl9Ci0JCX0KLQkJcHRyICs9IG9wc2l6ZS0yOwotCQlsZW5ndGggLT0gb3BzaXplOwotCX0KLWRvbmVfb3B0czoKIAkvKiBXZSd2ZSBwYXJzZWQgdGhlIG9wdGlvbnMgLSBkbyB3ZSBoYXZlIGEgaGFzaD8gKi8KIAlpZiAoIWhhc2hfZXhwZWN0ZWQgJiYgIWhhc2hfbG9jYXRpb24pCiAJCXJldHVybiAwOwpAQCAtMTE5OSwxMSArMTEzNCw5IEBACiAJLyogT2theSwgc28gdGhpcyBpcyBoYXNoX2V4cGVjdGVkIGFuZCBoYXNoX2xvY2F0aW9uIC0KIAkgKiBzbyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0uCiAJICovCi0JZ2VuaGFzaCA9IHRjcF92NF9kb19jYWxjX21kNV9oYXNoKG5ld2hhc2gsCi0JCQkJCSAgaGFzaF9leHBlY3RlZCwKLQkJCQkJICBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAotCQkJCQkgIHRoLCBzay0+c2tfcHJvdG9jb2wsCi0JCQkJCSAgc2tiLT5sZW4pOworCWdlbmhhc2ggPSB0Y3BfdjRfbWQ1X2hhc2hfc2tiKG5ld2hhc2gsCisJCQkJICAgICAgaGFzaF9leHBlY3RlZCwKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBza2IpOwogCiAJaWYgKGdlbmhhc2ggfHwgbWVtY21wKGhhc2hfbG9jYXRpb24sIG5ld2hhc2gsIDE2KSAhPSAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKQEAgLTEzNDcsNyArMTI4MCw3IEBACiAJCQlpZiAoZ2V0X3NlY29uZHMoKSA8IHBlZXItPnRjcF90c19zdGFtcCArIFRDUF9QQVdTX01TTCAmJgogCQkJICAgIChzMzIpKHBlZXItPnRjcF90cyAtIHJlcS0+dHNfcmVjZW50KSA+CiAJCQkJCQkJVENQX1BBV1NfV0lORE9XKSB7Ci0JCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfUEFXU1BBU1NJVkVSRUpFQ1RFRCk7CisJCQkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9QQVdTUEFTU0lWRVJFSkVDVEVEKTsKIAkJCQlnb3RvIGRyb3BfYW5kX3JlbGVhc2U7CiAJCQl9CiAJCX0KQEAgLTE0NTIsNiArMTM4NSw3IEBACiAJCWlmIChuZXdrZXkgIT0gTlVMTCkKIAkJCXRjcF92NF9tZDVfZG9fYWRkKG5ld3NrLCBpbmV0X3NrKHNrKS0+ZGFkZHIsCiAJCQkJCSAgbmV3a2V5LCBrZXktPmtleWxlbik7CisJCW5ld3NrLT5za19yb3V0ZV9jYXBzICY9IH5ORVRJRl9GX0dTT19NQVNLOwogCX0KICNlbmRpZgogCkBAIC0xNDYxLDkgKzEzOTUsOSBAQAogCXJldHVybiBuZXdzazsKIAogZXhpdF9vdmVyZmxvdzoKLQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9MSVNURU5PVkVSRkxPV1MpOworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfTElTVEVOT1ZFUkZMT1dTKTsKIGV4aXQ6Ci0JTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfTElTVEVORFJPUFMpOworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfTElTVEVORFJPUFMpOwogCWRzdF9yZWxlYXNlKGRzdCk7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNTkwLDcgKzE1MjQsNyBAQAogCXJldHVybiAwOwogCiBjc3VtX2VycjoKLQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfSU5FUlJTKTsKKwlUQ1BfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpOwogCWdvdG8gZGlzY2FyZDsKIH0KIApAQCAtMTYwNCwxMiArMTUzOCwxMyBAQAogCXN0cnVjdCB0Y3BoZHIgKnRoOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgcmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCiAJaWYgKHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0hPU1QpCiAJCWdvdG8gZGlzY2FyZF9pdDsKIAogCS8qIENvdW50IGl0IGV2ZW4gaWYgaXQncyBiYWQgKi8KLQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfSU5TRUdTKTsKKwlUQ1BfSU5DX1NUQVRTX0JIKG5ldCwgVENQX01JQl9JTlNFR1MpOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKSkKIAkJZ290byBkaXNjYXJkX2l0OwpAQCAtMTYzOCw3ICsxNTczLDcgQEAKIAlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzCSA9IGlwaC0+dG9zOwogCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkCSA9IDA7CiAKLQlzayA9IF9faW5ldF9sb29rdXAoZGV2X25ldChza2ItPmRldiksICZ0Y3BfaGFzaGluZm8sIGlwaC0+c2FkZHIsCisJc2sgPSBfX2luZXRfbG9va3VwKG5ldCwgJnRjcF9oYXNoaW5mbywgaXBoLT5zYWRkciwKIAkJCXRoLT5zb3VyY2UsIGlwaC0+ZGFkZHIsIHRoLT5kZXN0LCBpbmV0X2lpZihza2IpKTsKIAlpZiAoIXNrKQogCQlnb3RvIG5vX3RjcF9zb2NrZXQ7CkBAIC0xNjg1LDcgKzE2MjAsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgKHRoLT5kb2ZmIDw8IDIpIHx8IHRjcF9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CiBiYWRfcGFja2V0OgotCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfSU5FUlJTKTsKKwkJVENQX0lOQ19TVEFUU19CSChuZXQsIFRDUF9NSUJfSU5FUlJTKTsKIAl9IGVsc2UgewogCQl0Y3BfdjRfc2VuZF9yZXNldChOVUxMLCBza2IpOwogCX0KQEAgLTE3MDYsNyArMTY0MSw3IEBACiAJfQogCiAJaWYgKHNrYi0+bGVuIDwgKHRoLT5kb2ZmIDw8IDIpIHx8IHRjcF9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7Ci0JCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9JTkVSUlMpOworCQlUQ1BfSU5DX1NUQVRTX0JIKG5ldCwgVENQX01JQl9JTkVSUlMpOwogCQlpbmV0X3R3c2tfcHV0KGluZXRfdHdzayhzaykpOwogCQlnb3RvIGRpc2NhcmRfaXQ7CiAJfQpAQCAtMTgxNCw3ICsxNzQ5LDcgQEAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwogc3RhdGljIHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2NF9zcGVjaWZpYyA9IHsKIAkubWQ1X2xvb2t1cAkJPSB0Y3BfdjRfbWQ1X2xvb2t1cCwKLQkuY2FsY19tZDVfaGFzaAkJPSB0Y3BfdjRfY2FsY19tZDVfaGFzaCwKKwkuY2FsY19tZDVfaGFzaAkJPSB0Y3BfdjRfbWQ1X2hhc2hfc2tiLAogCS5tZDVfYWRkCQk9IHRjcF92NF9tZDVfYWRkX2Z1bmMsCiAJLm1kNV9wYXJzZQkJPSB0Y3BfdjRfcGFyc2VfbWQ1X2tleXMsCiB9OwpAQCAtMTg3MSw3ICsxODA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHRjcF92NF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKQordm9pZCB0Y3BfdjRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIApAQCAtMTkxNSw4ICsxODUwLDYgQEAKIAl9CiAKIAlhdG9taWNfZGVjKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpOwotCi0JcmV0dXJuIDA7CiB9CiAKIEVYUE9SVF9TWU1CT0wodGNwX3Y0X2Rlc3Ryb3lfc29jayk7CkBAIC0xOTU5LDggKzE4OTIsNyBAQAogCQlyZXEgPSByZXEtPmRsX25leHQ7CiAJCXdoaWxlICgxKSB7CiAJCQl3aGlsZSAocmVxKSB7Ci0JCQkJaWYgKHJlcS0+cnNrX29wcy0+ZmFtaWx5ID09IHN0LT5mYW1pbHkgJiYKLQkJCQkgICAgbmV0X2VxKHNvY2tfbmV0KHJlcS0+c2spLCBuZXQpKSB7CisJCQkJaWYgKHJlcS0+cnNrX29wcy0+ZmFtaWx5ID09IHN0LT5mYW1pbHkpIHsKIAkJCQkJY3VyID0gcmVxOwogCQkJCQlnb3RvIG91dDsKIAkJCQl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggODI0NTI0Ny4uMjA0YzQyMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtNSw4ICs1LDYgQEAKICAqCiAgKgkJSW1wbGVtZW50YXRpb24gb2YgdGhlIFRyYW5zbWlzc2lvbiBDb250cm9sIFByb3RvY29sKFRDUCkuCiAgKgotICogVmVyc2lvbjoJJElkOiB0Y3BfbWluaXNvY2tzLmMsdiAxLjE1IDIwMDIvMDIvMDEgMjI6MDE6MDQgZGF2ZW0gRXhwICQKLSAqCiAgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQlNYXJrIEV2YW5zLCA8ZXZhbnNtcEB1aHVyYS5hc3Rvbi5hYy51az4KQEAgLTI0Niw3ICsyNDQsNyBAQAogCX0KIAogCWlmIChwYXdzX3JlamVjdCkKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfUEFXU0VTVEFCUkVKRUNURUQpOworCQlORVRfSU5DX1NUQVRTX0JIKHR3c2tfbmV0KHR3KSwgTElOVVhfTUlCX1BBV1NFU1RBQlJFSkVDVEVEKTsKIAogCWlmICghdGgtPnJzdCkgewogCQkvKiBJbiB0aGlzIGNhc2Ugd2UgbXVzdCByZXNldCB0aGUgVElNRVdBSVQgdGltZXIuCkBAIC00ODIsNyArNDgwLDcgQEAKIAkJbmV3dHAtPnJ4X29wdC5tc3NfY2xhbXAgPSByZXEtPm1zczsKIAkJVENQX0VDTl9vcGVucmVxX2NoaWxkKG5ld3RwLCByZXEpOwogCi0JCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9QQVNTSVZFT1BFTlMpOworCQlUQ1BfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVENQX01JQl9QQVNTSVZFT1BFTlMpOwogCX0KIAlyZXR1cm4gbmV3c2s7CiB9CkBAIC02MTMsNyArNjExLDcgQEAKIAkJaWYgKCEoZmxnICYgVENQX0ZMQUdfUlNUKSkKIAkJCXJlcS0+cnNrX29wcy0+c2VuZF9hY2soc2tiLCByZXEpOwogCQlpZiAocGF3c19yZWplY3QpCi0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9QQVdTRVNUQUJSRUpFQ1RFRCk7CisJCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1BBV1NFU1RBQlJFSkVDVEVEKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC02MzIsNyArNjMwLDcgQEAKIAkJICoJICAgImZvdXJ0aCwgY2hlY2sgdGhlIFNZTiBiaXQiCiAJCSAqLwogCQlpZiAoZmxnICYgKFRDUF9GTEFHX1JTVHxUQ1BfRkxBR19TWU4pKSB7Ci0JCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfQVRURU1QVEZBSUxTKTsKKwkJCVRDUF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBUQ1BfTUlCX0FUVEVNUFRGQUlMUyk7CiAJCQlnb3RvIGVtYnJ5b25pY19yZXNldDsKIAkJfQogCkBAIC02OTcsNyArNjk1LDcgQEAKIAkJfQogCiAJZW1icnlvbmljX3Jlc2V0OgotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9FTUJSWU9OSUNSU1RTKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9FTUJSWU9OSUNSU1RTKTsKIAkJaWYgKCEoZmxnICYgVENQX0ZMQUdfUlNUKSkKIAkJCXJlcS0+cnNrX29wcy0+c2VuZF9yZXNldChzaywgc2tiKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGFkOTkzZWMuLmEwMDUzMmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTUsOCArNSw2IEBACiAgKgogICoJCUltcGxlbWVudGF0aW9uIG9mIHRoZSBUcmFuc21pc3Npb24gQ29udHJvbCBQcm90b2NvbChUQ1ApLgogICoKLSAqIFZlcnNpb246CSRJZDogdGNwX291dHB1dC5jLHYgMS4xNDYgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCU1hcmsgRXZhbnMsIDxldmFuc21wQHVodXJhLmFzdG9uLmFjLnVrPgpAQCAtMzQ3LDI4ICszNDUsODIgQEAKIAlUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgPSBzZXE7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcF9idWlsZF9hbmRfdXBkYXRlX29wdGlvbnMoX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsCi0JCQkJCSBfX3UzMiB0c3RhbXAsIF9fdTggKiptZDVfaGFzaCkKLXsKLQlpZiAodHAtPnJ4X29wdC50c3RhbXBfb2spIHsKKyNkZWZpbmUgT1BUSU9OX1NBQ0tfQURWRVJUSVNFCSgxIDw8IDApCisjZGVmaW5lIE9QVElPTl9UUwkJKDEgPDwgMSkKKyNkZWZpbmUgT1BUSU9OX01ENQkJKDEgPDwgMikKKworc3RydWN0IHRjcF9vdXRfb3B0aW9ucyB7CisJdTggb3B0aW9uczsJCS8qIGJpdCBmaWVsZCBvZiBPUFRJT05fKiAqLworCXU4IHdzOwkJCS8qIHdpbmRvdyBzY2FsZSwgMCB0byBkaXNhYmxlICovCisJdTggbnVtX3NhY2tfYmxvY2tzOwkvKiBudW1iZXIgb2YgU0FDSyBibG9ja3MgdG8gaW5jbHVkZSAqLworCXUxNiBtc3M7CQkvKiAwIHRvIGRpc2FibGUgKi8KKwlfX3UzMiB0c3ZhbCwgdHNlY3I7CS8qIG5lZWQgdG8gaW5jbHVkZSBPUFRJT05fVFMgKi8KK307CisKK3N0YXRpYyB2b2lkIHRjcF9vcHRpb25zX3dyaXRlKF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cywKKwkJCSAgICAgIF9fdTggKiptZDVfaGFzaCkgeworCWlmICh1bmxpa2VseShPUFRJT05fTUQ1ICYgb3B0cy0+b3B0aW9ucykpIHsKIAkJKnB0cisrID0gaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwKIAkJCSAgICAgICAoVENQT1BUX05PUCA8PCAxNikgfAotCQkJICAgICAgIChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpIHwKLQkJCSAgICAgICBUQ1BPTEVOX1RJTUVTVEFNUCk7Ci0JCSpwdHIrKyA9IGh0b25sKHRzdGFtcCk7Ci0JCSpwdHIrKyA9IGh0b25sKHRwLT5yeF9vcHQudHNfcmVjZW50KTsKKwkJCSAgICAgICAoVENQT1BUX01ENVNJRyA8PCA4KSB8CisJCQkgICAgICAgVENQT0xFTl9NRDVTSUcpOworCQkqbWQ1X2hhc2ggPSAoX191OCAqKXB0cjsKKwkJcHRyICs9IDQ7CisJfSBlbHNlIHsKKwkJKm1kNV9oYXNoID0gTlVMTDsKIAl9Ci0JaWYgKHRwLT5yeF9vcHQuZWZmX3NhY2tzKSB7Ci0JCXN0cnVjdCB0Y3Bfc2Fja19ibG9jayAqc3AgPSB0cC0+cnhfb3B0LmRzYWNrID8gdHAtPmR1cGxpY2F0ZV9zYWNrIDogdHAtPnNlbGVjdGl2ZV9hY2tzOworCisJaWYgKGxpa2VseShPUFRJT05fVFMgJiBvcHRzLT5vcHRpb25zKSkgeworCQlpZiAodW5saWtlbHkoT1BUSU9OX1NBQ0tfQURWRVJUSVNFICYgb3B0cy0+b3B0aW9ucykpIHsKKwkJCSpwdHIrKyA9IGh0b25sKChUQ1BPUFRfU0FDS19QRVJNIDw8IDI0KSB8CisJCQkJICAgICAgIChUQ1BPTEVOX1NBQ0tfUEVSTSA8PCAxNikgfAorCQkJCSAgICAgICAoVENQT1BUX1RJTUVTVEFNUCA8PCA4KSB8CisJCQkJICAgICAgIFRDUE9MRU5fVElNRVNUQU1QKTsKKwkJfSBlbHNlIHsKKwkJCSpwdHIrKyA9IGh0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8CisJCQkJICAgICAgIChUQ1BPUFRfTk9QIDw8IDE2KSB8CisJCQkJICAgICAgIChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpIHwKKwkJCQkgICAgICAgVENQT0xFTl9USU1FU1RBTVApOworCQl9CisJCSpwdHIrKyA9IGh0b25sKG9wdHMtPnRzdmFsKTsKKwkJKnB0cisrID0gaHRvbmwob3B0cy0+dHNlY3IpOworCX0KKworCWlmICh1bmxpa2VseShvcHRzLT5tc3MpKSB7CisJCSpwdHIrKyA9IGh0b25sKChUQ1BPUFRfTVNTIDw8IDI0KSB8CisJCQkgICAgICAgKFRDUE9MRU5fTVNTIDw8IDE2KSB8CisJCQkgICAgICAgb3B0cy0+bXNzKTsKKwl9CisKKwlpZiAodW5saWtlbHkoT1BUSU9OX1NBQ0tfQURWRVJUSVNFICYgb3B0cy0+b3B0aW9ucyAmJgorCQkgICAgICEoT1BUSU9OX1RTICYgb3B0cy0+b3B0aW9ucykpKSB7CisJCSpwdHIrKyA9IGh0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8CisJCQkgICAgICAgKFRDUE9QVF9OT1AgPDwgMTYpIHwKKwkJCSAgICAgICAoVENQT1BUX1NBQ0tfUEVSTSA8PCA4KSB8CisJCQkgICAgICAgVENQT0xFTl9TQUNLX1BFUk0pOworCX0KKworCWlmICh1bmxpa2VseShvcHRzLT53cykpIHsKKwkJKnB0cisrID0gaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwKKwkJCSAgICAgICAoVENQT1BUX1dJTkRPVyA8PCAxNikgfAorCQkJICAgICAgIChUQ1BPTEVOX1dJTkRPVyA8PCA4KSB8CisJCQkgICAgICAgb3B0cy0+d3MpOworCX0KKworCWlmICh1bmxpa2VseShvcHRzLT5udW1fc2Fja19ibG9ja3MpKSB7CisJCXN0cnVjdCB0Y3Bfc2Fja19ibG9jayAqc3AgPSB0cC0+cnhfb3B0LmRzYWNrID8KKwkJCXRwLT5kdXBsaWNhdGVfc2FjayA6IHRwLT5zZWxlY3RpdmVfYWNrczsKIAkJaW50IHRoaXNfc2FjazsKIAogCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX05PUCAgPDwgMjQpIHwKIAkJCSAgICAgICAoVENQT1BUX05PUCAgPDwgMTYpIHwKIAkJCSAgICAgICAoVENQT1BUX1NBQ0sgPDwgIDgpIHwKLQkJCSAgICAgICAoVENQT0xFTl9TQUNLX0JBU0UgKyAodHAtPnJ4X29wdC5lZmZfc2Fja3MgKgorCQkJICAgICAgIChUQ1BPTEVOX1NBQ0tfQkFTRSArIChvcHRzLT5udW1fc2Fja19ibG9ja3MgKgogCQkJCQkJICAgICBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0spKSk7CiAKLQkJZm9yICh0aGlzX3NhY2sgPSAwOyB0aGlzX3NhY2sgPCB0cC0+cnhfb3B0LmVmZl9zYWNrczsgdGhpc19zYWNrKyspIHsKKwkJZm9yICh0aGlzX3NhY2sgPSAwOyB0aGlzX3NhY2sgPCBvcHRzLT5udW1fc2Fja19ibG9ja3M7CisJCSAgICAgKyt0aGlzX3NhY2spIHsKIAkJCSpwdHIrKyA9IGh0b25sKHNwW3RoaXNfc2Fja10uc3RhcnRfc2VxKTsKIAkJCSpwdHIrKyA9IGh0b25sKHNwW3RoaXNfc2Fja10uZW5kX3NlcSk7CiAJCX0KQEAgLTM3OCw4MSArNDMwLDEzNyBAQAogCQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MtLTsKIAkJfQogCX0KLSNpZmRlZiBDT05GSUdfVENQX01ENVNJRwotCWlmIChtZDVfaGFzaCkgewotCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfAotCQkJICAgICAgIChUQ1BPUFRfTk9QIDw8IDE2KSB8Ci0JCQkgICAgICAgKFRDUE9QVF9NRDVTSUcgPDwgOCkgfAotCQkJICAgICAgIFRDUE9MRU5fTUQ1U0lHKTsKLQkJKm1kNV9oYXNoID0gKF9fdTggKilwdHI7Ci0JfQotI2VuZGlmCiB9CiAKLS8qIENvbnN0cnVjdCBhIHRjcCBvcHRpb25zIGhlYWRlciBmb3IgYSBTWU4gb3IgU1lOX0FDSyBwYWNrZXQuCi0gKiBJZiB0aGlzIGlzIGV2ZXJ5IGNoYW5nZWQgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZgotICogTUFYX1NZTl9TSVpFIHRvIG1hdGNoIHRoZSBuZXcgbWF4aW11bSBudW1iZXIgb2Ygb3B0aW9ucyB0aGF0IHlvdQotICogY2FuIGdlbmVyYXRlLgotICoKLSAqIE5vdGUgLSB0aGF0IHdpdGggdGhlIFJGQzIzODUgVENQIG9wdGlvbiwgd2UgbWFrZSByb29tIGZvciB0aGUKLSAqIDE2IGJ5dGUgTUQ1IGhhc2guIFRoaXMgd2lsbCBiZSBmaWxsZWQgaW4gbGF0ZXIsIHNvIHRoZSBwb2ludGVyIGZvciB0aGUKLSAqIGxvY2F0aW9uIHRvIGJlIGZpbGxlZCBpcyBwYXNzZWQgYmFjayB1cC4KLSAqLwotc3RhdGljIHZvaWQgdGNwX3N5bl9idWlsZF9vcHRpb25zKF9fYmUzMiAqcHRyLCBpbnQgbXNzLCBpbnQgdHMsIGludCBzYWNrLAotCQkJCSAgaW50IG9mZmVyX3dzY2FsZSwgaW50IHdzY2FsZSwgX191MzIgdHN0YW1wLAotCQkJCSAgX191MzIgdHNfcmVjZW50LCBfX3U4ICoqbWQ1X2hhc2gpCi17Ci0JLyogV2UgYWx3YXlzIGdldCBhbiBNU1Mgb3B0aW9uLgotCSAqIFRoZSBvcHRpb24gYnl0ZXMgd2hpY2ggd2lsbCBiZSBzZWVuIGluIG5vcm1hbCBkYXRhCi0JICogcGFja2V0cyBzaG91bGQgdGltZXN0YW1wcyBiZSB1c2VkLCBtdXN0IGJlIGluIHRoZSBNU1MKLQkgKiBhZHZlcnRpc2VkLiAgQnV0IHdlIHN1YnRyYWN0IHRoZW0gZnJvbSB0cC0+bXNzX2NhY2hlIHNvCi0JICogdGhhdCBjYWxjdWxhdGlvbnMgaW4gdGNwX3NlbmRtc2cgYXJlIHNpbXBsZXIgZXRjLgotCSAqIFNvIGFjY291bnQgZm9yIHRoaXMgZmFjdCBoZXJlIGlmIG5lY2Vzc2FyeS4gIElmIHdlCi0JICogZG9uJ3QgZG8gdGhpcyBjb3JyZWN0bHksIGFzIGEgcmVjZWl2ZXIgd2Ugd29uJ3QKLQkgKiByZWNvZ25pemUgZGF0YSBwYWNrZXRzIGFzIGJlaW5nIGZ1bGwgc2l6ZWQgd2hlbiB3ZQotCSAqIHNob3VsZCwgYW5kIHRodXMgd2Ugd29uJ3QgYWJpZGUgYnkgdGhlIGRlbGF5ZWQgQUNLCi0JICogcnVsZXMgY29ycmVjdGx5LgotCSAqIFNBQ0tzIGRvbid0IG1hdHRlciwgd2UgbmV2ZXIgZGVsYXkgYW4gQUNLIHdoZW4gd2UKLQkgKiBoYXZlIGFueSBvZiB0aG9zZSBnb2luZyBvdXQuCi0JICovCi0JKnB0cisrID0gaHRvbmwoKFRDUE9QVF9NU1MgPDwgMjQpIHwgKFRDUE9MRU5fTVNTIDw8IDE2KSB8IG1zcyk7Ci0JaWYgKHRzKSB7Ci0JCWlmIChzYWNrKQotCQkJKnB0cisrID0gaHRvbmwoKFRDUE9QVF9TQUNLX1BFUk0gPDwgMjQpIHwKLQkJCQkgICAgICAgKFRDUE9MRU5fU0FDS19QRVJNIDw8IDE2KSB8Ci0JCQkJICAgICAgIChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpIHwKLQkJCQkgICAgICAgVENQT0xFTl9USU1FU1RBTVApOwotCQllbHNlCi0JCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfAotCQkJCSAgICAgICAoVENQT1BUX05PUCA8PCAxNikgfAotCQkJCSAgICAgICAoVENQT1BUX1RJTUVTVEFNUCA8PCA4KSB8Ci0JCQkJICAgICAgIFRDUE9MRU5fVElNRVNUQU1QKTsKLQkJKnB0cisrID0gaHRvbmwodHN0YW1wKTsJCS8qIFRTVkFMICovCi0JCSpwdHIrKyA9IGh0b25sKHRzX3JlY2VudCk7CS8qIFRTRUNSICovCi0JfSBlbHNlIGlmIChzYWNrKQotCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfAotCQkJICAgICAgIChUQ1BPUFRfTk9QIDw8IDE2KSB8Ci0JCQkgICAgICAgKFRDUE9QVF9TQUNLX1BFUk0gPDwgOCkgfAotCQkJICAgICAgIFRDUE9MRU5fU0FDS19QRVJNKTsKLQlpZiAob2ZmZXJfd3NjYWxlKQotCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfAotCQkJICAgICAgIChUQ1BPUFRfV0lORE9XIDw8IDE2KSB8Ci0JCQkgICAgICAgKFRDUE9MRU5fV0lORE9XIDw8IDgpIHwKLQkJCSAgICAgICAod3NjYWxlKSk7CitzdGF0aWMgdW5zaWduZWQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLAorCQkJCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqKm1kNSkgeworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXVuc2lnbmVkIHNpemUgPSAwOworCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKLQkvKgotCSAqIElmIE1ENSBpcyBlbmFibGVkLCB0aGVuIHdlIHNldCB0aGUgb3B0aW9uLCBhbmQgaW5jbHVkZSB0aGUgc2l6ZQotCSAqIChhbHdheXMgMTgpLiBUaGUgYWN0dWFsIE1ENSBoYXNoIGlzIGFkZGVkIGp1c3QgYmVmb3JlIHRoZQotCSAqIHBhY2tldCBpcyBzZW50LgotCSAqLwotCWlmIChtZDVfaGFzaCkgewotCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfAotCQkJICAgICAgIChUQ1BPUFRfTk9QIDw8IDE2KSB8Ci0JCQkgICAgICAgKFRDUE9QVF9NRDVTSUcgPDwgOCkgfAotCQkJICAgICAgIFRDUE9MRU5fTUQ1U0lHKTsKLQkJKm1kNV9oYXNoID0gKF9fdTggKilwdHI7CisJKm1kNSA9IHRwLT5hZl9zcGVjaWZpYy0+bWQ1X2xvb2t1cChzaywgc2spOworCWlmICgqbWQ1KSB7CisJCW9wdHMtPm9wdGlvbnMgfD0gT1BUSU9OX01ENTsKKwkJc2l6ZSArPSBUQ1BPTEVOX01ENVNJR19BTElHTkVEOwogCX0KKyNlbHNlCisJKm1kNSA9IE5VTEw7CiAjZW5kaWYKKworCS8qIFdlIGFsd2F5cyBnZXQgYW4gTVNTIG9wdGlvbi4gIFRoZSBvcHRpb24gYnl0ZXMgd2hpY2ggd2lsbCBiZSBzZWVuIGluCisJICogbm9ybWFsIGRhdGEgcGFja2V0cyBzaG91bGQgdGltZXN0YW1wcyBiZSB1c2VkLCBtdXN0IGJlIGluIHRoZSBNU1MKKwkgKiBhZHZlcnRpc2VkLiAgQnV0IHdlIHN1YnRyYWN0IHRoZW0gZnJvbSB0cC0+bXNzX2NhY2hlIHNvIHRoYXQKKwkgKiBjYWxjdWxhdGlvbnMgaW4gdGNwX3NlbmRtc2cgYXJlIHNpbXBsZXIgZXRjLiAgU28gYWNjb3VudCBmb3IgdGhpcworCSAqIGZhY3QgaGVyZSBpZiBuZWNlc3NhcnkuICBJZiB3ZSBkb24ndCBkbyB0aGlzIGNvcnJlY3RseSwgYXMgYQorCSAqIHJlY2VpdmVyIHdlIHdvbid0IHJlY29nbml6ZSBkYXRhIHBhY2tldHMgYXMgYmVpbmcgZnVsbCBzaXplZCB3aGVuIHdlCisJICogc2hvdWxkLCBhbmQgdGh1cyB3ZSB3b24ndCBhYmlkZSBieSB0aGUgZGVsYXllZCBBQ0sgcnVsZXMgY29ycmVjdGx5LgorCSAqIFNBQ0tzIGRvbid0IG1hdHRlciwgd2UgbmV2ZXIgZGVsYXkgYW4gQUNLIHdoZW4gd2UgaGF2ZSBhbnkgb2YgdGhvc2UKKwkgKiBnb2luZyBvdXQuICAqLworCW9wdHMtPm1zcyA9IHRjcF9hZHZlcnRpc2VfbXNzKHNrKTsKKwlzaXplICs9IFRDUE9MRU5fTVNTX0FMSUdORUQ7CisKKwlpZiAobGlrZWx5KHN5c2N0bF90Y3BfdGltZXN0YW1wcyAmJiAqbWQ1ID09IE5VTEwpKSB7CisJCW9wdHMtPm9wdGlvbnMgfD0gT1BUSU9OX1RTOworCQlvcHRzLT50c3ZhbCA9IFRDUF9TS0JfQ0Ioc2tiKS0+d2hlbjsKKwkJb3B0cy0+dHNlY3IgPSB0cC0+cnhfb3B0LnRzX3JlY2VudDsKKwkJc2l6ZSArPSBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEOworCX0KKwlpZiAobGlrZWx5KHN5c2N0bF90Y3Bfd2luZG93X3NjYWxpbmcpKSB7CisJCW9wdHMtPndzID0gdHAtPnJ4X29wdC5yY3Zfd3NjYWxlOworCQlzaXplICs9IFRDUE9MRU5fV1NDQUxFX0FMSUdORUQ7CisJfQorCWlmIChsaWtlbHkoc3lzY3RsX3RjcF9zYWNrKSkgeworCQlvcHRzLT5vcHRpb25zIHw9IE9QVElPTl9TQUNLX0FEVkVSVElTRTsKKwkJaWYgKHVubGlrZWx5KCEoT1BUSU9OX1RTICYgb3B0cy0+b3B0aW9ucykpKQorCQkJc2l6ZSArPSBUQ1BPTEVOX1NBQ0tQRVJNX0FMSUdORUQ7CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB0Y3Bfc3luYWNrX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCQkgICB1bnNpZ25lZCBtc3MsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cywKKwkJCQkgICBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKiptZDUpIHsKKwl1bnNpZ25lZCBzaXplID0gMDsKKwlzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpOworCWNoYXIgZG9pbmdfdHM7CisKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCSptZDUgPSB0Y3BfcnNrKHJlcSktPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCByZXEpOworCWlmICgqbWQ1KSB7CisJCW9wdHMtPm9wdGlvbnMgfD0gT1BUSU9OX01ENTsKKwkJc2l6ZSArPSBUQ1BPTEVOX01ENVNJR19BTElHTkVEOworCX0KKyNlbHNlCisJKm1kNSA9IE5VTEw7CisjZW5kaWYKKworCS8qIHdlIGNhbid0IGZpdCBhbnkgU0FDSyBibG9ja3MgaW4gYSBwYWNrZXQgd2l0aCBNRDUgKyBUUworCSAgIG9wdGlvbnMuIFRoZXJlIHdhcyBkaXNjdXNzaW9uIGFib3V0IGRpc2FibGluZyBTQUNLIHJhdGhlciB0aGFuIFRTIGluCisJICAgb3JkZXIgdG8gZml0IGluIGJldHRlciB3aXRoIG9sZCwgYnVnZ3kga2VybmVscywgYnV0IHRoYXQgd2FzIGRlZW1lZAorCSAgIHRvIGJlIHVubmVjZXNzYXJ5LiAqLworCWRvaW5nX3RzID0gaXJlcS0+dHN0YW1wX29rICYmICEoKm1kNSAmJiBpcmVxLT5zYWNrX29rKTsKKworCW9wdHMtPm1zcyA9IG1zczsKKwlzaXplICs9IFRDUE9MRU5fTVNTX0FMSUdORUQ7CisKKwlpZiAobGlrZWx5KGlyZXEtPndzY2FsZV9vaykpIHsKKwkJb3B0cy0+d3MgPSBpcmVxLT5yY3Zfd3NjYWxlOworCQlzaXplICs9IFRDUE9MRU5fV1NDQUxFX0FMSUdORUQ7CisJfQorCWlmIChsaWtlbHkoZG9pbmdfdHMpKSB7CisJCW9wdHMtPm9wdGlvbnMgfD0gT1BUSU9OX1RTOworCQlvcHRzLT50c3ZhbCA9IFRDUF9TS0JfQ0Ioc2tiKS0+d2hlbjsKKwkJb3B0cy0+dHNlY3IgPSByZXEtPnRzX3JlY2VudDsKKwkJc2l6ZSArPSBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEOworCX0KKwlpZiAobGlrZWx5KGlyZXEtPnNhY2tfb2spKSB7CisJCW9wdHMtPm9wdGlvbnMgfD0gT1BUSU9OX1NBQ0tfQURWRVJUSVNFOworCQlpZiAodW5saWtlbHkoIWRvaW5nX3RzKSkKKwkJCXNpemUgKz0gVENQT0xFTl9TQUNLUEVSTV9BTElHTkVEOworCX0KKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdW5zaWduZWQgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLAorCQkJCQlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKiptZDUpIHsKKwlzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiID0gc2tiID8gVENQX1NLQl9DQihza2IpIDogTlVMTDsKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwl1bnNpZ25lZCBzaXplID0gMDsKKworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJKm1kNSA9IHRwLT5hZl9zcGVjaWZpYy0+bWQ1X2xvb2t1cChzaywgc2spOworCWlmICh1bmxpa2VseSgqbWQ1KSkgeworCQlvcHRzLT5vcHRpb25zIHw9IE9QVElPTl9NRDU7CisJCXNpemUgKz0gVENQT0xFTl9NRDVTSUdfQUxJR05FRDsKKwl9CisjZWxzZQorCSptZDUgPSBOVUxMOworI2VuZGlmCisKKwlpZiAobGlrZWx5KHRwLT5yeF9vcHQudHN0YW1wX29rKSkgeworCQlvcHRzLT5vcHRpb25zIHw9IE9QVElPTl9UUzsKKwkJb3B0cy0+dHN2YWwgPSB0Y2IgPyB0Y2ItPndoZW4gOiAwOworCQlvcHRzLT50c2VjciA9IHRwLT5yeF9vcHQudHNfcmVjZW50OworCQlzaXplICs9IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7CisJfQorCisJaWYgKHVubGlrZWx5KHRwLT5yeF9vcHQuZWZmX3NhY2tzKSkgeworCQljb25zdCB1bnNpZ25lZCByZW1haW5pbmcgPSBNQVhfVENQX09QVElPTl9TUEFDRSAtIHNpemU7CisJCW9wdHMtPm51bV9zYWNrX2Jsb2NrcyA9CisJCQltaW5fdCh1bnNpZ25lZCwgdHAtPnJ4X29wdC5lZmZfc2Fja3MsCisJCQkgICAgICAocmVtYWluaW5nIC0gVENQT0xFTl9TQUNLX0JBU0VfQUxJR05FRCkgLworCQkJICAgICAgVENQT0xFTl9TQUNLX1BFUkJMT0NLKTsKKwkJc2l6ZSArPSBUQ1BPTEVOX1NBQ0tfQkFTRV9BTElHTkVEICsKKwkJCW9wdHMtPm51bV9zYWNrX2Jsb2NrcyAqIFRDUE9MRU5fU0FDS19QRVJCTE9DSzsKKwl9CisKKwlyZXR1cm4gc2l6ZTsKIH0KIAogLyogVGhpcyByb3V0aW5lIGFjdHVhbGx5IHRyYW5zbWl0cyBUQ1AgcGFja2V0cyBxdWV1ZWQgaW4gYnkKQEAgLTQ3MywxMyArNTgxLDExIEBACiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwOwogCXN0cnVjdCB0Y3Bfc2tiX2NiICp0Y2I7Ci0JaW50IHRjcF9oZWFkZXJfc2l6ZTsKLSNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCXN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0czsKKwl1bnNpZ25lZCB0Y3Bfb3B0aW9uc19zaXplLCB0Y3BfaGVhZGVyX3NpemU7CiAJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICptZDU7CiAJX191OCAqbWQ1X2hhc2hfbG9jYXRpb247Ci0jZW5kaWYKIAlzdHJ1Y3QgdGNwaGRyICp0aDsKLQlpbnQgc3lzY3RsX2ZsYWdzOwogCWludCBlcnI7CiAKIAlCVUdfT04oIXNrYiB8fCAhdGNwX3NrYl9wY291bnQoc2tiKSk7CkBAIC01MDIsNTAgKzYwOCwxOCBAQAogCWluZXQgPSBpbmV0X3NrKHNrKTsKIAl0cCA9IHRjcF9zayhzayk7CiAJdGNiID0gVENQX1NLQl9DQihza2IpOwotCXRjcF9oZWFkZXJfc2l6ZSA9IHRwLT50Y3BfaGVhZGVyX2xlbjsKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CiAKLSNkZWZpbmUgU1lTQ1RMX0ZMQUdfVFNUQU1QUwkweDEKLSNkZWZpbmUgU1lTQ1RMX0ZMQUdfV1NDQUxFCTB4MgotI2RlZmluZSBTWVNDVExfRkxBR19TQUNLCTB4NAotCi0Jc3lzY3RsX2ZsYWdzID0gMDsKLQlpZiAodW5saWtlbHkodGNiLT5mbGFncyAmIFRDUENCX0ZMQUdfU1lOKSkgewotCQl0Y3BfaGVhZGVyX3NpemUgPSBzaXplb2Yoc3RydWN0IHRjcGhkcikgKyBUQ1BPTEVOX01TUzsKLQkJaWYgKHN5c2N0bF90Y3BfdGltZXN0YW1wcykgewotCQkJdGNwX2hlYWRlcl9zaXplICs9IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7Ci0JCQlzeXNjdGxfZmxhZ3MgfD0gU1lTQ1RMX0ZMQUdfVFNUQU1QUzsKLQkJfQotCQlpZiAoc3lzY3RsX3RjcF93aW5kb3dfc2NhbGluZykgewotCQkJdGNwX2hlYWRlcl9zaXplICs9IFRDUE9MRU5fV1NDQUxFX0FMSUdORUQ7Ci0JCQlzeXNjdGxfZmxhZ3MgfD0gU1lTQ1RMX0ZMQUdfV1NDQUxFOwotCQl9Ci0JCWlmIChzeXNjdGxfdGNwX3NhY2spIHsKLQkJCXN5c2N0bF9mbGFncyB8PSBTWVNDVExfRkxBR19TQUNLOwotCQkJaWYgKCEoc3lzY3RsX2ZsYWdzICYgU1lTQ1RMX0ZMQUdfVFNUQU1QUykpCi0JCQkJdGNwX2hlYWRlcl9zaXplICs9IFRDUE9MRU5fU0FDS1BFUk1fQUxJR05FRDsKLQkJfQotCX0gZWxzZSBpZiAodW5saWtlbHkodHAtPnJ4X29wdC5lZmZfc2Fja3MpKSB7Ci0JCS8qIEEgU0FDSyBpcyAyIHBhZCBieXRlcywgYSAyIGJ5dGUgaGVhZGVyLCBwbHVzCi0JCSAqIDIgMzItYml0IHNlcXVlbmNlIG51bWJlcnMgZm9yIGVhY2ggU0FDSyBibG9jay4KLQkJICovCi0JCXRjcF9oZWFkZXJfc2l6ZSArPSAoVENQT0xFTl9TQUNLX0JBU0VfQUxJR05FRCArCi0JCQkJICAgICh0cC0+cnhfb3B0LmVmZl9zYWNrcyAqCi0JCQkJICAgICBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0spKTsKLQl9CisJaWYgKHVubGlrZWx5KHRjYi0+ZmxhZ3MgJiBUQ1BDQl9GTEFHX1NZTikpCisJCXRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgJm9wdHMsICZtZDUpOworCWVsc2UKKwkJdGNwX29wdGlvbnNfc2l6ZSA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBza2IsICZvcHRzLAorCQkJCQkJCSAgICZtZDUpOworCXRjcF9oZWFkZXJfc2l6ZSA9IHRjcF9vcHRpb25zX3NpemUgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CiAKIAlpZiAodGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSA9PSAwKQogCQl0Y3BfY2FfZXZlbnQoc2ssIENBX0VWRU5UX1RYX1NUQVJUKTsKIAotI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi0JLyoKLQkgKiBBcmUgd2UgZG9pbmcgTUQ1IG9uIHRoaXMgc2VnbWVudD8gSWYgc28gLSBtYWtlCi0JICogcm9vbSBmb3IgaXQuCi0JICovCi0JbWQ1ID0gdHAtPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCBzayk7Ci0JaWYgKG1kNSkKLQkJdGNwX2hlYWRlcl9zaXplICs9IFRDUE9MRU5fTUQ1U0lHX0FMSUdORUQ7Ci0jZW5kaWYKLQogCXNrYl9wdXNoKHNrYiwgdGNwX2hlYWRlcl9zaXplKTsKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCXNrYl9zZXRfb3duZXJfdyhza2IsIHNrKTsKQEAgLTU3NiwzOSArNjUwLDE2IEBACiAJCXRoLT51cmcJCQk9IDE7CiAJfQogCi0JaWYgKHVubGlrZWx5KHRjYi0+ZmxhZ3MgJiBUQ1BDQl9GTEFHX1NZTikpIHsKLQkJdGNwX3N5bl9idWlsZF9vcHRpb25zKChfX2JlMzIgKikodGggKyAxKSwKLQkJCQkgICAgICB0Y3BfYWR2ZXJ0aXNlX21zcyhzayksCi0JCQkJICAgICAgKHN5c2N0bF9mbGFncyAmIFNZU0NUTF9GTEFHX1RTVEFNUFMpLAotCQkJCSAgICAgIChzeXNjdGxfZmxhZ3MgJiBTWVNDVExfRkxBR19TQUNLKSwKLQkJCQkgICAgICAoc3lzY3RsX2ZsYWdzICYgU1lTQ1RMX0ZMQUdfV1NDQUxFKSwKLQkJCQkgICAgICB0cC0+cnhfb3B0LnJjdl93c2NhbGUsCi0JCQkJICAgICAgdGNiLT53aGVuLAotCQkJCSAgICAgIHRwLT5yeF9vcHQudHNfcmVjZW50LAotCi0jaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKLQkJCQkgICAgICBtZDUgPyAmbWQ1X2hhc2hfbG9jYXRpb24gOgotI2VuZGlmCi0JCQkJICAgICAgTlVMTCk7Ci0JfSBlbHNlIHsKLQkJdGNwX2J1aWxkX2FuZF91cGRhdGVfb3B0aW9ucygoX19iZTMyICopKHRoICsgMSksCi0JCQkJCSAgICAgdHAsIHRjYi0+d2hlbiwKLSNpZmRlZiBDT05GSUdfVENQX01ENVNJRwotCQkJCQkgICAgIG1kNSA/ICZtZDVfaGFzaF9sb2NhdGlvbiA6Ci0jZW5kaWYKLQkJCQkJICAgICBOVUxMKTsKKwl0Y3Bfb3B0aW9uc193cml0ZSgoX19iZTMyICopKHRoICsgMSksIHRwLCAmb3B0cywgJm1kNV9oYXNoX2xvY2F0aW9uKTsKKwlpZiAobGlrZWx5KCh0Y2ItPmZsYWdzICYgVENQQ0JfRkxBR19TWU4pID09IDApKQogCQlUQ1BfRUNOX3NlbmQoc2ssIHNrYiwgdGNwX2hlYWRlcl9zaXplKTsKLQl9CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwogCS8qIENhbGN1bGF0ZSB0aGUgTUQ1IGhhc2gsIGFzIHdlIGhhdmUgYWxsIHdlIG5lZWQgbm93ICovCiAJaWYgKG1kNSkgeworCQlzay0+c2tfcm91dGVfY2FwcyAmPSB+TkVUSUZfRl9HU09fTUFTSzsKIAkJdHAtPmFmX3NwZWNpZmljLT5jYWxjX21kNV9oYXNoKG1kNV9oYXNoX2xvY2F0aW9uLAotCQkJCQkgICAgICAgbWQ1LAotCQkJCQkgICAgICAgc2ssIE5VTEwsIE5VTEwsCi0JCQkJCSAgICAgICB0Y3BfaGRyKHNrYiksCi0JCQkJCSAgICAgICBzay0+c2tfcHJvdG9jb2wsCi0JCQkJCSAgICAgICBza2ItPmxlbik7CisJCQkJCSAgICAgICBtZDUsIHNrLCBOVUxMLCBza2IpOwogCX0KICNlbmRpZgogCkBAIC02MjEsNyArNjcyLDcgQEAKIAkJdGNwX2V2ZW50X2RhdGFfc2VudCh0cCwgc2tiLCBzayk7CiAKIAlpZiAoYWZ0ZXIodGNiLT5lbmRfc2VxLCB0cC0+c25kX254dCkgfHwgdGNiLT5zZXEgPT0gdGNiLT5lbmRfc2VxKQotCQlUQ1BfSU5DX1NUQVRTKFRDUF9NSUJfT1VUU0VHUyk7CisJCVRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX09VVFNFR1MpOwogCiAJZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCAwKTsKIAlpZiAobGlrZWx5KGVyciA8PSAwKSkKQEAgLTYzMCwxMCArNjgxLDYgQEAKIAl0Y3BfZW50ZXJfY3dyKHNrLCAxKTsKIAogCXJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7Ci0KLSN1bmRlZiBTWVNDVExfRkxBR19UU1RBTVBTCi0jdW5kZWYgU1lTQ1RMX0ZMQUdfV1NDQUxFCi0jdW5kZWYgU1lTQ1RMX0ZMQUdfU0FDSwogfQogCiAvKiBUaGlzIHJvdXRpbmUganVzdCBxdWV1ZSdzIHRoZSBidWZmZXIKQEAgLTk3NCw2ICsxMDIxLDkgQEAKIAl1MzIgbXNzX25vdzsKIAl1MTYgeG1pdF9zaXplX2dvYWw7CiAJaW50IGRvaW5nX3RzbyA9IDA7CisJdW5zaWduZWQgaGVhZGVyX2xlbjsKKwlzdHJ1Y3QgdGNwX291dF9vcHRpb25zIG9wdHM7CisJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICptZDU7CiAKIAltc3Nfbm93ID0gdHAtPm1zc19jYWNoZTsKIApAQCAtOTg2LDE0ICsxMDM2LDE2IEBACiAJCQltc3Nfbm93ID0gdGNwX3N5bmNfbXNzKHNrLCBtdHUpOwogCX0KIAotCWlmICh0cC0+cnhfb3B0LmVmZl9zYWNrcykKLQkJbXNzX25vdyAtPSAoVENQT0xFTl9TQUNLX0JBU0VfQUxJR05FRCArCi0JCQkgICAgKHRwLT5yeF9vcHQuZWZmX3NhY2tzICogVENQT0xFTl9TQUNLX1BFUkJMT0NLKSk7Ci0KLSNpZmRlZiBDT05GSUdfVENQX01ENVNJRwotCWlmICh0cC0+YWZfc3BlY2lmaWMtPm1kNV9sb29rdXAoc2ssIHNrKSkKLQkJbXNzX25vdyAtPSBUQ1BPTEVOX01ENVNJR19BTElHTkVEOwotI2VuZGlmCisJaGVhZGVyX2xlbiA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBOVUxMLCAmb3B0cywgJm1kNSkgKworCQkgICAgIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKKwkvKiBUaGUgbXNzX2NhY2hlIGlzIHNpemVkIGJhc2VkIG9uIHRwLT50Y3BfaGVhZGVyX2xlbiwgd2hpY2ggYXNzdW1lcworCSAqIHNvbWUgY29tbW9uIG9wdGlvbnMuIElmIHRoaXMgaXMgYW4gb2RkIHBhY2tldCAoYmVjYXVzZSB3ZSBoYXZlIFNBQ0sKKwkgKiBibG9ja3MgZXRjKSB0aGVuIG91ciBjYWxjdWxhdGVkIGhlYWRlcl9sZW4gd2lsbCBiZSBkaWZmZXJlbnQsIGFuZAorCSAqIHdlIGhhdmUgdG8gYWRqdXN0IG1zc19ub3cgY29ycmVzcG9uZGluZ2x5ICovCisJaWYgKGhlYWRlcl9sZW4gIT0gdHAtPnRjcF9oZWFkZXJfbGVuKSB7CisJCWludCBkZWx0YSA9IChpbnQpIGhlYWRlcl9sZW4gLSB0cC0+dGNwX2hlYWRlcl9sZW47CisJCW1zc19ub3cgLT0gZGVsdGE7CisJfQogCiAJeG1pdF9zaXplX2dvYWwgPSBtc3Nfbm93OwogCkBAIC0xOTEzLDcgKzE5NjUsNyBAQAogCiAJaWYgKGVyciA9PSAwKSB7CiAJCS8qIFVwZGF0ZSBnbG9iYWwgVENQIHN0YXRpc3RpY3MuICovCi0JCVRDUF9JTkNfU1RBVFMoVENQX01JQl9SRVRSQU5TU0VHUyk7CisJCVRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX1JFVFJBTlNTRUdTKTsKIAogCQl0cC0+dG90YWxfcmV0cmFucysrOwogCkBAIC0xOTg4LDE0ICsyMDQwLDE3IEBACiAKIAkJCWlmIChzYWNrZWQgJiBUQ1BDQl9MT1NUKSB7CiAJCQkJaWYgKCEoc2Fja2VkICYgKFRDUENCX1NBQ0tFRF9BQ0tFRHxUQ1BDQl9TQUNLRURfUkVUUkFOUykpKSB7CisJCQkJCWludCBtaWJfaWR4OworCiAJCQkJCWlmICh0Y3BfcmV0cmFuc21pdF9za2Ioc2ssIHNrYikpIHsKIAkJCQkJCXRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDsKIAkJCQkJCXJldHVybjsKIAkJCQkJfQogCQkJCQlpZiAoaWNzay0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfTG9zcykKLQkJCQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUEZBU1RSRVRSQU5TKTsKKwkJCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQRkFTVFJFVFJBTlM7CiAJCQkJCWVsc2UKLQkJCQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUFNMT1dTVEFSVFJFVFJBTlMpOworCQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTTE9XU1RBUlRSRVRSQU5TOworCQkJCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgbWliX2lkeCk7CiAKIAkJCQkJaWYgKHNrYiA9PSB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzaykpCiAJCQkJCQlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUywKQEAgLTIwNjUsNyArMjEyMCw3IEBACiAJCQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19ydG8sCiAJCQkJCQkgIFRDUF9SVE9fTUFYKTsKIAotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BGT1JXQVJEUkVUUkFOUyk7CisJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQRk9SV0FSRFJFVFJBTlMpOwogCX0KIH0KIApAQCAtMjExOSw3ICsyMTc0LDcgQEAKIAkvKiBOT1RFOiBObyBUQ1Agb3B0aW9ucyBhdHRhY2hlZCBhbmQgd2UgbmV2ZXIgcmV0cmFuc21pdCB0aGlzLiAqLwogCXNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgcHJpb3JpdHkpOwogCWlmICghc2tiKSB7Ci0JCU5FVF9JTkNfU1RBVFMoTElOVVhfTUlCX1RDUEFCT1JURkFJTEVEKTsKKwkJTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxMzAsOSArMjE4NSw5IEBACiAJLyogU2VuZCBpdCBvZmYuICovCiAJVENQX1NLQl9DQihza2IpLT53aGVuID0gdGNwX3RpbWVfc3RhbXA7CiAJaWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgcHJpb3JpdHkpKQotCQlORVRfSU5DX1NUQVRTKExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7CisJCU5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpOwogCi0JVENQX0lOQ19TVEFUUyhUQ1BfTUlCX09VVFJTVFMpOworCVRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX09VVFJTVFMpOwogfQogCiAvKiBXQVJOSU5HOiBUaGlzIHJvdXRpbmUgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHdlIGhhdmUgYWxyZWFkeSBzZW50CkBAIC0yMTgwLDExICsyMjM1LDEwIEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHRjcGhkciAqdGg7CiAJaW50IHRjcF9oZWFkZXJfc2l6ZTsKKwlzdHJ1Y3QgdGNwX291dF9vcHRpb25zIG9wdHM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLSNpZmRlZiBDT05GSUdfVENQX01ENVNJRwogCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqbWQ1OwogCV9fdTggKm1kNV9oYXNoX2xvY2F0aW9uOwotI2VuZGlmCiAKIAlza2IgPSBzb2NrX3dtYWxsb2Moc2ssIE1BWF9UQ1BfSEVBREVSICsgMTUsIDEsIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKQEAgLTIxOTUsMTggKzIyNDksMjcgQEAKIAogCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKGRzdCk7CiAKLQl0Y3BfaGVhZGVyX3NpemUgPSAoc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICsgVENQT0xFTl9NU1MgKwotCQkJICAgKGlyZXEtPnRzdGFtcF9vayA/IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQgOiAwKSArCi0JCQkgICAoaXJlcS0+d3NjYWxlX29rID8gVENQT0xFTl9XU0NBTEVfQUxJR05FRCA6IDApICsKLQkJCSAgIC8qIFNBQ0tfUEVSTSBpcyBpbiB0aGUgcGxhY2Ugb2YgTk9QIE5PUCBvZiBUUyAqLwotCQkJICAgKChpcmVxLT5zYWNrX29rICYmICFpcmVxLT50c3RhbXBfb2spID8gVENQT0xFTl9TQUNLUEVSTV9BTElHTkVEIDogMCkpOworCWlmIChyZXEtPnJjdl93bmQgPT0gMCkgeyAvKiBpZ25vcmVkIGZvciByZXRyYW5zbWl0dGVkIHN5bnMgKi8KKwkJX191OCByY3Zfd3NjYWxlOworCQkvKiBTZXQgdGhpcyB1cCBvbiB0aGUgZmlyc3QgY2FsbCBvbmx5ICovCisJCXJlcS0+d2luZG93X2NsYW1wID0gdHAtPndpbmRvd19jbGFtcCA/IDogZHN0X21ldHJpYyhkc3QsIFJUQVhfV0lORE9XKTsKKwkJLyogdGNwX2Z1bGxfc3BhY2UgYmVjYXVzZSBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSBmaXJzdCBwYWNrZXQgKi8KKwkJdGNwX3NlbGVjdF9pbml0aWFsX3dpbmRvdyh0Y3BfZnVsbF9zcGFjZShzayksCisJCQlkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpIC0gKGlyZXEtPnRzdGFtcF9vayA/IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQgOiAwKSwKKwkJCSZyZXEtPnJjdl93bmQsCisJCQkmcmVxLT53aW5kb3dfY2xhbXAsCisJCQlpcmVxLT53c2NhbGVfb2ssCisJCQkmcmN2X3dzY2FsZSk7CisJCWlyZXEtPnJjdl93c2NhbGUgPSByY3Zfd3NjYWxlOworCX0KIAotI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi0JLyogQXJlIHdlIGRvaW5nIE1ENSBvbiB0aGlzIHNlZ21lbnQ/IElmIHNvIC0gbWFrZSByb29tIGZvciBpdCAqLwotCW1kNSA9IHRjcF9yc2socmVxKS0+YWZfc3BlY2lmaWMtPm1kNV9sb29rdXAoc2ssIHJlcSk7Ci0JaWYgKG1kNSkKLQkJdGNwX2hlYWRlcl9zaXplICs9IFRDUE9MRU5fTUQ1U0lHX0FMSUdORUQ7Ci0jZW5kaWYKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJVENQX1NLQl9DQihza2IpLT53aGVuID0gdGNwX3RpbWVfc3RhbXA7CisJdGNwX2hlYWRlcl9zaXplID0gdGNwX3N5bmFja19vcHRpb25zKHNrLCByZXEsCisJCQkJCSAgICAgZHN0X21ldHJpYyhkc3QsIFJUQVhfQURWTVNTKSwKKwkJCQkJICAgICBza2IsICZvcHRzLCAmbWQ1KSArCisJCQkgIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKKwogCXNrYl9wdXNoKHNrYiwgdGNwX2hlYWRlcl9zaXplKTsKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCkBAIC0yMjI0LDE5ICsyMjg3LDYgQEAKIAkJCSAgICAgVENQQ0JfRkxBR19TWU4gfCBUQ1BDQl9GTEFHX0FDSyk7CiAJdGgtPnNlcSA9IGh0b25sKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKIAl0aC0+YWNrX3NlcSA9IGh0b25sKHRjcF9yc2socmVxKS0+cmN2X2lzbiArIDEpOwotCWlmIChyZXEtPnJjdl93bmQgPT0gMCkgeyAvKiBpZ25vcmVkIGZvciByZXRyYW5zbWl0dGVkIHN5bnMgKi8KLQkJX191OCByY3Zfd3NjYWxlOwotCQkvKiBTZXQgdGhpcyB1cCBvbiB0aGUgZmlyc3QgY2FsbCBvbmx5ICovCi0JCXJlcS0+d2luZG93X2NsYW1wID0gdHAtPndpbmRvd19jbGFtcCA/IDogZHN0X21ldHJpYyhkc3QsIFJUQVhfV0lORE9XKTsKLQkJLyogdGNwX2Z1bGxfc3BhY2UgYmVjYXVzZSBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSBmaXJzdCBwYWNrZXQgKi8KLQkJdGNwX3NlbGVjdF9pbml0aWFsX3dpbmRvdyh0Y3BfZnVsbF9zcGFjZShzayksCi0JCQlkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpIC0gKGlyZXEtPnRzdGFtcF9vayA/IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQgOiAwKSwKLQkJCSZyZXEtPnJjdl93bmQsCi0JCQkmcmVxLT53aW5kb3dfY2xhbXAsCi0JCQlpcmVxLT53c2NhbGVfb2ssCi0JCQkmcmN2X3dzY2FsZSk7Ci0JCWlyZXEtPnJjdl93c2NhbGUgPSByY3Zfd3NjYWxlOwotCX0KIAogCS8qIFJGQzEzMjM6IFRoZSB3aW5kb3cgaW4gU1lOICYgU1lOL0FDSyBzZWdtZW50cyBpcyBuZXZlciBzY2FsZWQuICovCiAJdGgtPndpbmRvdyA9IGh0b25zKG1pbihyZXEtPnJjdl93bmQsIDY1NTM1VSkpOwpAQCAtMjI0NSwyOSArMjI5NSwxNSBAQAogCQlUQ1BfU0tCX0NCKHNrYiktPndoZW4gPSBjb29raWVfaW5pdF90aW1lc3RhbXAocmVxKTsKIAllbHNlCiAjZW5kaWYKLQlUQ1BfU0tCX0NCKHNrYiktPndoZW4gPSB0Y3BfdGltZV9zdGFtcDsKLQl0Y3Bfc3luX2J1aWxkX29wdGlvbnMoKF9fYmUzMiAqKSh0aCArIDEpLCBkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpLCBpcmVxLT50c3RhbXBfb2ssCi0JCQkgICAgICBpcmVxLT5zYWNrX29rLCBpcmVxLT53c2NhbGVfb2ssIGlyZXEtPnJjdl93c2NhbGUsCi0JCQkgICAgICBUQ1BfU0tCX0NCKHNrYiktPndoZW4sCi0JCQkgICAgICByZXEtPnRzX3JlY2VudCwKLQkJCSAgICAgICgKLSNpZmRlZiBDT05GSUdfVENQX01ENVNJRwotCQkJICAgICAgIG1kNSA/ICZtZDVfaGFzaF9sb2NhdGlvbiA6Ci0jZW5kaWYKLQkJCSAgICAgICBOVUxMKQotCQkJICAgICAgKTsKLQorCXRjcF9vcHRpb25zX3dyaXRlKChfX2JlMzIgKikodGggKyAxKSwgdHAsICZvcHRzLCAmbWQ1X2hhc2hfbG9jYXRpb24pOwogCXRoLT5kb2ZmID0gKHRjcF9oZWFkZXJfc2l6ZSA+PiAyKTsKLQlUQ1BfSU5DX1NUQVRTKFRDUF9NSUJfT1VUU0VHUyk7CisJVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfT1VUU0VHUyk7CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwogCS8qIE9rYXksIHdlIGhhdmUgYWxsIHdlIG5lZWQgLSBkbyB0aGUgbWQ1IGhhc2ggaWYgbmVlZGVkICovCiAJaWYgKG1kNSkgewogCQl0cC0+YWZfc3BlY2lmaWMtPmNhbGNfbWQ1X2hhc2gobWQ1X2hhc2hfbG9jYXRpb24sCi0JCQkJCSAgICAgICBtZDUsCi0JCQkJCSAgICAgICBOVUxMLCBkc3QsIHJlcSwKLQkJCQkJICAgICAgIHRjcF9oZHIoc2tiKSwgc2stPnNrX3Byb3RvY29sLAotCQkJCQkgICAgICAgc2tiLT5sZW4pOworCQkJCQkgICAgICAgbWQ1LCBOVUxMLCByZXEsIHNrYik7CiAJfQogI2VuZGlmCiAKQEAgLTIzNjcsNyArMjQwMyw3IEBACiAJICovCiAJdHAtPnNuZF9ueHQgPSB0cC0+d3JpdGVfc2VxOwogCXRwLT5wdXNoZWRfc2VxID0gdHAtPndyaXRlX3NlcTsKLQlUQ1BfSU5DX1NUQVRTKFRDUF9NSUJfQUNUSVZFT1BFTlMpOworCVRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0FDVElWRU9QRU5TKTsKIAogCS8qIFRpbWVyIGZvciByZXBlYXRpbmcgdGhlIFNZTiB1bnRpbCBhbiBhbnN3ZXIuICovCiAJaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDYzZWQ5ZDYuLjMyOGUwY2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC01LDggKzUsNiBAQAogICoKICAqCQlJbXBsZW1lbnRhdGlvbiBvZiB0aGUgVHJhbnNtaXNzaW9uIENvbnRyb2wgUHJvdG9jb2woVENQKS4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IHRjcF90aW1lci5jLHYgMS44OCAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCi0gKgogICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJTWFyayBFdmFucywgPGV2YW5zbXBAdWh1cmEuYXN0b24uYWMudWs+CkBAIC01MCw3ICs0OCw3IEBACiAJc2stPnNrX2Vycm9yX3JlcG9ydChzayk7CiAKIAl0Y3BfZG9uZShzayk7Ci0JTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQQUJPUlRPTlRJTUVPVVQpOworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTlRJTUVPVVQpOwogfQogCiAvKiBEbyBub3QgYWxsb3cgb3JwaGFuZWQgc29ja2V0cyB0byBlYXQgYWxsIG91ciByZXNvdXJjZXMuCkBAIC05MSw3ICs4OSw3IEBACiAJCWlmIChkb19yZXNldCkKIAkJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyk7CiAJCXRjcF9kb25lKHNrKTsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7CisJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE4MSw3ICsxNzksNyBAQAogCWlmIChzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CiAJCS8qIFRyeSBhZ2FpbiBsYXRlci4gKi8KIAkJaWNzay0+aWNza19hY2suYmxvY2tlZCA9IDE7Ci0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0RFTEFZRURBQ0tMT0NLRUQpOworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX0RFTEFZRURBQ0tMT0NLRUQpOwogCQlza19yZXNldF90aW1lcihzaywgJmljc2stPmljc2tfZGVsYWNrX3RpbWVyLCBqaWZmaWVzICsgVENQX0RFTEFDS19NSU4pOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtMjAwLDcgKzE5OCw3IEBACiAJaWYgKCFza2JfcXVldWVfZW1wdHkoJnRwLT51Y29weS5wcmVxdWV1ZSkpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BTQ0hFRFVMRVJGQUlMRUQpOworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFNDSEVEVUxFUkZBSUxFRCk7CiAKIAkJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZ0cC0+dWNvcHkucHJlcXVldWUpKSAhPSBOVUxMKQogCQkJc2stPnNrX2JhY2tsb2dfcmN2KHNrLCBza2IpOwpAQCAtMjIwLDcgKzIxOCw3IEBACiAJCQlpY3NrLT5pY3NrX2Fjay5hdG8gICAgICA9IFRDUF9BVE9fTUlOOwogCQl9CiAJCXRjcF9zZW5kX2Fjayhzayk7Ci0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0RFTEFZRURBQ0tTKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9ERUxBWUVEQUNLUyk7CiAJfQogCVRDUF9DSEVDS19USU1FUihzayk7CiAKQEAgLTMyOCwyNCArMzI2LDI3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKGljc2stPmljc2tfcmV0cmFuc21pdHMgPT0gMCkgeworCQlpbnQgbWliX2lkeDsKKwogCQlpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfRGlzb3JkZXIgfHwKIAkJICAgIGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KSB7CiAJCQlpZiAodGNwX2lzX3NhY2sodHApKSB7CiAJCQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KQotCQkJCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BTQUNLUkVDT1ZFUllGQUlMKTsKKwkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLUkVDT1ZFUllGQUlMOwogCQkJCWVsc2UKLQkJCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQU0FDS0ZBSUxVUkVTKTsKKwkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLRkFJTFVSRVM7CiAJCQl9IGVsc2UgewogCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkKLQkJCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQUkVOT1JFQ09WRVJZRkFJTCk7CisJCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQUkVOT1JFQ09WRVJZRkFJTDsKIAkJCQllbHNlCi0JCQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUFJFTk9GQUlMVVJFUyk7CisJCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQUkVOT0ZBSUxVUkVTOwogCQkJfQogCQl9IGVsc2UgaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0xvc3MpIHsKLQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUExPU1NGQUlMVVJFUyk7CisJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUExPU1NGQUlMVVJFUzsKIAkJfSBlbHNlIHsKLQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUFRJTUVPVVRTKTsKKwkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQVElNRU9VVFM7CiAJCX0KKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIG1pYl9pZHgpOwogCX0KIAogCWlmICh0Y3BfdXNlX2ZydG8oc2spKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IDU2ZmNkYTMuLjM4M2QxNzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC01LDggKzUsNiBAQAogICoKICAqCQlUaGUgVXNlciBEYXRhZ3JhbSBQcm90b2NvbCAoVURQKS4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IHVkcC5jLHYgMS4xMDIgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUFybnQgR3VsYnJhbmRzZW4sIDxhZ3VsYnJhQG52Zy51bml0Lm5vPgpAQCAtMTEwLDkgKzEwOCw2IEBACiAgKglTbm1wIE1JQiBmb3IgdGhlIFVEUCBsYXllcgogICovCiAKLURFRklORV9TTk1QX1NUQVQoc3RydWN0IHVkcF9taWIsIHVkcF9zdGF0aXN0aWNzKSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTCh1ZHBfc3RhdGlzdGljcyk7Ci0KIERFRklORV9TTk1QX1NUQVQoc3RydWN0IHVkcF9taWIsIHVkcF9zdGF0c19pbjYpIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKHVkcF9zdGF0c19pbjYpOwogCkBAIC0xMzYsNyArMTMxLDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJnVkcHRhYmxlW251bSAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV0pCisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZ1ZHB0YWJsZVt1ZHBfaGFzaGZuKG5ldCwgbnVtKV0pCiAJCWlmIChuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpICYmIHNrLT5za19oYXNoID09IG51bSkKIAkJCXJldHVybiAxOwogCXJldHVybiAwOwpAQCAtMTc2LDcgKzE3MSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBVRFBfSFRBQkxFX1NJWkU7IGkrKykgewogCQkJaW50IHNpemUgPSAwOwogCi0JCQloZWFkID0gJnVkcHRhYmxlW3JvdmVyICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXTsKKwkJCWhlYWQgPSAmdWRwdGFibGVbdWRwX2hhc2hmbihuZXQsIHJvdmVyKV07CiAJCQlpZiAoaGxpc3RfZW1wdHkoaGVhZCkpCiAJCQkJZ290byBnb3RpdDsKIApAQCAtMjEzLDcgKzIwOCw3IEBACiBnb3RpdDoKIAkJc251bSA9IHJvdmVyOwogCX0gZWxzZSB7Ci0JCWhlYWQgPSAmdWRwdGFibGVbc251bSAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV07CisJCWhlYWQgPSAmdWRwdGFibGVbdWRwX2hhc2hmbihuZXQsIHNudW0pXTsKIAogCQlza19mb3JfZWFjaChzazIsIG5vZGUsIGhlYWQpCiAJCQlpZiAoc2syLT5za19oYXNoID09IHNudW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCkBAIC0yMjksNyArMjI0LDcgQEAKIAlpbmV0X3NrKHNrKS0+bnVtID0gc251bTsKIAlzay0+c2tfaGFzaCA9IHNudW07CiAJaWYgKHNrX3VuaGFzaGVkKHNrKSkgewotCQloZWFkID0gJnVkcHRhYmxlW3NudW0gJiAoVURQX0hUQUJMRV9TSVpFIC0gMSldOworCQloZWFkID0gJnVkcHRhYmxlW3VkcF9oYXNoZm4obmV0LCBzbnVtKV07CiAJCXNrX2FkZF9ub2RlKHNrLCBoZWFkKTsKIAkJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAxKTsKIAl9CkBAIC0yNjYsNyArMjYxLDcgQEAKIAlpbnQgYmFkbmVzcyA9IC0xOwogCiAJcmVhZF9sb2NrKCZ1ZHBfaGFzaF9sb2NrKTsKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJnVkcHRhYmxlW2hudW0gJiAoVURQX0hUQUJMRV9TSVpFIC0gMSldKSB7CisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZ1ZHB0YWJsZVt1ZHBfaGFzaGZuKG5ldCwgaG51bSldKSB7CiAJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAogCQlpZiAobmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSAmJiBzay0+c2tfaGFzaCA9PSBobnVtICYmCkBAIC0zNTYsMTEgKzM1MSwxMiBAQAogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgaGFyZGVycjsKIAlpbnQgZXJyOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCi0Jc2sgPSBfX3VkcDRfbGliX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwgaXBoLT5kYWRkciwgdWgtPmRlc3QsCisJc2sgPSBfX3VkcDRfbGliX2xvb2t1cChuZXQsIGlwaC0+ZGFkZHIsIHVoLT5kZXN0LAogCQkJaXBoLT5zYWRkciwgdWgtPnNvdXJjZSwgc2tiLT5kZXYtPmlmaW5kZXgsIHVkcHRhYmxlKTsKIAlpZiAoc2sgPT0gTlVMTCkgewotCQlJQ01QX0lOQ19TVEFUU19CSChJQ01QX01JQl9JTkVSUk9SUyk7CisJCUlDTVBfSU5DX1NUQVRTX0JIKG5ldCwgSUNNUF9NSUJfSU5FUlJPUlMpOwogCQlyZXR1cm47CS8qIE5vIHNvY2tldCBmb3IgZXJyb3IgKi8KIAl9CiAKQEAgLTUyOCw3ICs1MjQsOCBAQAogCXVwLT5sZW4gPSAwOwogCXVwLT5wZW5kaW5nID0gMDsKIAlpZiAoIWVycikKLQkJVURQX0lOQ19TVEFUU19VU0VSKFVEUF9NSUJfT1VUREFUQUdSQU1TLCBpc191ZHBsaXRlKTsKKwkJVURQX0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwKKwkJCQlVRFBfTUlCX09VVERBVEFHUkFNUywgaXNfdWRwbGl0ZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjU2LDExICs2NTMsMTMgQEAKIAkJCQkgICAgLnVsaV91ID0geyAucG9ydHMgPQogCQkJCQkgICAgICAgeyAuc3BvcnQgPSBpbmV0LT5zcG9ydCwKIAkJCQkJCSAuZHBvcnQgPSBkcG9ydCB9IH0gfTsKKwkJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCiAJCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssICZmbCk7Ci0JCWVyciA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgJnJ0LCAmZmwsIHNrLCAxKTsKKwkJZXJyID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCAmcnQsICZmbCwgc2ssIDEpOwogCQlpZiAoZXJyKSB7CiAJCQlpZiAoZXJyID09IC1FTkVUVU5SRUFDSCkKLQkJCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworCQkJCUlQX0lOQ19TVEFUU19CSChuZXQsIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTcyNyw3ICs3MjYsOCBAQAogCSAqIHNlZW1zIGxpa2Ugb3ZlcmtpbGwuCiAJICovCiAJaWYgKGVyciA9PSAtRU5PQlVGUyB8fCB0ZXN0X2JpdChTT0NLX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncykpIHsKLQkJVURQX0lOQ19TVEFUU19VU0VSKFVEUF9NSUJfU05EQlVGRVJST1JTLCBpc191ZHBsaXRlKTsKKwkJVURQX0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwKKwkJCQlVRFBfTUlCX1NOREJVRkVSUk9SUywgaXNfdWRwbGl0ZSk7CiAJfQogCXJldHVybiBlcnI7CiAKQEAgLTg5MCw3ICs4OTAsOCBAQAogCQlnb3RvIG91dF9mcmVlOwogCiAJaWYgKCFwZWVrZWQpCi0JCVVEUF9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX0lOREFUQUdSQU1TLCBpc191ZHBsaXRlKTsKKwkJVURQX0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwKKwkJCQlVRFBfTUlCX0lOREFUQUdSQU1TLCBpc191ZHBsaXRlKTsKIAogCXNvY2tfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgc2tiKTsKIApAQCAtOTE5LDcgKzkyMCw3IEBACiBjc3VtX2NvcHlfZXJyOgogCWxvY2tfc29jayhzayk7CiAJaWYgKCFza2Jfa2lsbF9kYXRhZ3JhbShzaywgc2tiLCBmbGFncykpCi0JCVVEUF9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX0lORVJST1JTLCBpc191ZHBsaXRlKTsKKwkJVURQX0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwgVURQX01JQl9JTkVSUk9SUywgaXNfdWRwbGl0ZSk7CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAogCWlmIChub2Jsb2NrKQpAQCAtOTkwLDcgKzk5MSw4IEBACiAKIAkJCXJldCA9ICgqdXAtPmVuY2FwX3Jjdikoc2ssIHNrYik7CiAJCQlpZiAocmV0IDw9IDApIHsKLQkJCQlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5EQVRBR1JBTVMsCisJCQkJVURQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksCisJCQkJCQkgVURQX01JQl9JTkRBVEFHUkFNUywKIAkJCQkJCSBpc191ZHBsaXRlKTsKIAkJCQlyZXR1cm4gLXJldDsKIAkJCX0KQEAgLTEwNDIsMTUgKzEwNDQsMTggQEAKIAogCWlmICgocmMgPSBzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssc2tiKSkgPCAwKSB7CiAJCS8qIE5vdGUgdGhhdCBhbiBFTk9NRU0gZXJyb3IgaXMgY2hhcmdlZCB0d2ljZSAqLwotCQlpZiAocmMgPT0gLUVOT01FTSkKLQkJCVVEUF9JTkNfU1RBVFNfQkgoVURQX01JQl9SQ1ZCVUZFUlJPUlMsIGlzX3VkcGxpdGUpOworCQlpZiAocmMgPT0gLUVOT01FTSkgeworCQkJVURQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksCisJCQkJCVVEUF9NSUJfUkNWQlVGRVJST1JTLCBpc191ZHBsaXRlKTsKKwkJCWF0b21pY19pbmMoJnNrLT5za19kcm9wcyk7CisJCX0KIAkJZ290byBkcm9wOwogCX0KIAogCXJldHVybiAwOwogCiBkcm9wOgotCVVEUF9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkVSUk9SUywgaXNfdWRwbGl0ZSk7CisJVURQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIFVEUF9NSUJfSU5FUlJPUlMsIGlzX3VkcGxpdGUpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAtMTsKIH0KQEAgLTEwNjEsNyArMTA2Niw3IEBACiAgKglOb3RlOiBjYWxsZWQgb25seSBmcm9tIHRoZSBCSCBoYW5kbGVyIGNvbnRleHQsCiAgKglzbyB3ZSBkb24ndCBuZWVkIHRvIGxvY2sgdGhlIGhhc2hlcy4KICAqLwotc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgc3RydWN0IHVkcGhkciAgKnVoLAogCQkJCSAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkgICAgc3RydWN0IGhsaXN0X2hlYWQgdWRwdGFibGVbXSkKQEAgLTEwNzAsNyArMTA3NSw3IEBACiAJaW50IGRpZjsKIAogCXJlYWRfbG9jaygmdWRwX2hhc2hfbG9jayk7Ci0Jc2sgPSBza19oZWFkKCZ1ZHB0YWJsZVtudG9ocyh1aC0+ZGVzdCkgJiAoVURQX0hUQUJMRV9TSVpFIC0gMSldKTsKKwlzayA9IHNrX2hlYWQoJnVkcHRhYmxlW3VkcF9oYXNoZm4obmV0LCBudG9ocyh1aC0+ZGVzdCkpXSk7CiAJZGlmID0gc2tiLT5kZXYtPmlmaW5kZXg7CiAJc2sgPSB1ZHBfdjRfbWNhc3RfbmV4dChzaywgdWgtPmRlc3QsIGRhZGRyLCB1aC0+c291cmNlLCBzYWRkciwgZGlmKTsKIAlpZiAoc2spIHsKQEAgLTExNTgsNiArMTE2Myw3IEBACiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3Q7CiAJX19iZTMyIHNhZGRyID0gaXBfaGRyKHNrYiktPnNhZGRyOwogCV9fYmUzMiBkYWRkciA9IGlwX2hkcihza2IpLT5kYWRkcjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAogCS8qCiAJICogIFZhbGlkYXRlIHRoZSBwYWNrZXQuCkBAIC0xMTgwLDkgKzExODYsMTAgQEAKIAkJZ290byBjc3VtX2Vycm9yOwogCiAJaWYgKHJ0LT5ydF9mbGFncyAmIChSVENGX0JST0FEQ0FTVHxSVENGX01VTFRJQ0FTVCkpCi0JCXJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc2tiLCB1aCwgc2FkZHIsIGRhZGRyLCB1ZHB0YWJsZSk7CisJCXJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIobmV0LCBza2IsIHVoLAorCQkJCXNhZGRyLCBkYWRkciwgdWRwdGFibGUpOwogCi0Jc2sgPSBfX3VkcDRfbGliX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwgc2FkZHIsIHVoLT5zb3VyY2UsIGRhZGRyLAorCXNrID0gX191ZHA0X2xpYl9sb29rdXAobmV0LCBzYWRkciwgdWgtPnNvdXJjZSwgZGFkZHIsCiAJCQl1aC0+ZGVzdCwgaW5ldF9paWYoc2tiKSwgdWRwdGFibGUpOwogCiAJaWYgKHNrICE9IE5VTEwpIHsKQEAgLTEyMTEsNyArMTIxOCw3IEBACiAJaWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJZ290byBjc3VtX2Vycm9yOwogCi0JVURQX0lOQ19TVEFUU19CSChVRFBfTUlCX05PUE9SVFMsIHByb3RvID09IElQUFJPVE9fVURQTElURSk7CisJVURQX0lOQ19TVEFUU19CSChuZXQsIFVEUF9NSUJfTk9QT1JUUywgcHJvdG8gPT0gSVBQUk9UT19VRFBMSVRFKTsKIAlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApOwogCiAJLyoKQEAgLTEyNDUsNyArMTI1Miw3IEBACiAJCSAgICAgICBudG9ocyh1aC0+ZGVzdCksCiAJCSAgICAgICB1bGVuKTsKIGRyb3A6Ci0JVURQX0lOQ19TVEFUU19CSChVRFBfTUlCX0lORVJST1JTLCBwcm90byA9PSBJUFBST1RPX1VEUExJVEUpOworCVVEUF9JTkNfU1RBVFNfQkgobmV0LCBVRFBfTUlCX0lORVJST1JTLCBwcm90byA9PSBJUFBST1RPX1VEUExJVEUpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQpAQCAtMTI1NSwxMiArMTI2MiwxMSBAQAogCXJldHVybiBfX3VkcDRfbGliX3Jjdihza2IsIHVkcF9oYXNoLCBJUFBST1RPX1VEUCk7CiB9CiAKLWludCB1ZHBfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKK3ZvaWQgdWRwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJbG9ja19zb2NrKHNrKTsKIAl1ZHBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2spOwogCXJlbGVhc2Vfc29jayhzayk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMzE5LDYgKzEzMjUsOCBAQAogCQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAkJaWYgKHZhbCAhPSAwICYmIHZhbCA8IDgpIC8qIElsbGVnYWwgY292ZXJhZ2U6IHVzZSBkZWZhdWx0ICg4KSAqLwogCQkJdmFsID0gODsKKwkJZWxzZSBpZiAodmFsID4gVVNIT1JUX01BWCkKKwkJCXZhbCA9IFVTSE9SVF9NQVg7CiAJCXVwLT5wY3NsZW4gPSB2YWw7CiAJCXVwLT5wY2ZsYWcgfD0gVURQTElURV9TRU5EX0NDOwogCQlicmVhazsKQEAgLTEzMzEsNiArMTMzOSw4IEBACiAJCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCQlpZiAodmFsICE9IDAgJiYgdmFsIDwgOCkgLyogQXZvaWQgc2lsbHkgbWluaW1hbCB2YWx1ZXMuICAgICAgICovCiAJCQl2YWwgPSA4OworCQllbHNlIGlmICh2YWwgPiBVU0hPUlRfTUFYKQorCQkJdmFsID0gVVNIT1JUX01BWDsKIAkJdXAtPnBjcmxlbiA9IHZhbDsKIAkJdXAtPnBjZmxhZyB8PSBVRFBMSVRFX1JFQ1ZfQ0M7CiAJCWJyZWFrOwpAQCAtMTQ1Myw3ICsxNDYzLDggQEAKIAkJc3Bpbl9sb2NrX2JoKCZyY3ZxLT5sb2NrKTsKIAkJd2hpbGUgKChza2IgPSBza2JfcGVlayhyY3ZxKSkgIT0gTlVMTCAmJgogCQkgICAgICAgdWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7Ci0JCQlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMsIGlzX2xpdGUpOworCQkJVURQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksCisJCQkJCVVEUF9NSUJfSU5FUlJPUlMsIGlzX2xpdGUpOwogCQkJX19za2JfdW5saW5rKHNrYiwgcmN2cSk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfQpAQCAtMTYyOSwxMiArMTY0MCwxMyBAQAogCV9fdTE2IHNyY3AJICA9IG50b2hzKGluZXQtPnNwb3J0KTsKIAogCXNlcV9wcmludGYoZiwgIiU0ZDogJTA4WDolMDRYICUwOFg6JTA0WCIKLQkJIiAlMDJYICUwOFg6JTA4WCAlMDJYOiUwOGxYICUwOFggJTVkICU4ZCAlbHUgJWQgJXAlbiIsCisJCSIgJTAyWCAlMDhYOiUwOFggJTAyWDolMDhsWCAlMDhYICU1ZCAlOGQgJWx1ICVkICVwICVkJW4iLAogCQlidWNrZXQsIHNyYywgc3JjcCwgZGVzdCwgZGVzdHAsIHNwLT5za19zdGF0ZSwKIAkJYXRvbWljX3JlYWQoJnNwLT5za193bWVtX2FsbG9jKSwKIAkJYXRvbWljX3JlYWQoJnNwLT5za19ybWVtX2FsbG9jKSwKIAkJMCwgMEwsIDAsIHNvY2tfaV91aWQoc3ApLCAwLCBzb2NrX2lfaW5vKHNwKSwKLQkJYXRvbWljX3JlYWQoJnNwLT5za19yZWZjbnQpLCBzcCwgbGVuKTsKKwkJYXRvbWljX3JlYWQoJnNwLT5za19yZWZjbnQpLCBzcCwKKwkJYXRvbWljX3JlYWQoJnNwLT5za19kcm9wcyksIGxlbik7CiB9CiAKIGludCB1ZHA0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMTY0Myw3ICsxNjU1LDcgQEAKIAkJc2VxX3ByaW50ZihzZXEsICIlLTEyN3NcbiIsCiAJCQkgICAiICBzbCAgbG9jYWxfYWRkcmVzcyByZW1fYWRkcmVzcyAgIHN0IHR4X3F1ZXVlICIKIAkJCSAgICJyeF9xdWV1ZSB0ciB0bS0+d2hlbiByZXRybnNtdCAgIHVpZCAgdGltZW91dCAiCi0JCQkgICAiaW5vZGUiKTsKKwkJCSAgICJpbm9kZSByZWYgcG9pbnRlciBkcm9wcyIpOwogCWVsc2UgewogCQlzdHJ1Y3QgdWRwX2l0ZXJfc3RhdGUgKnN0YXRlID0gc2VxLT5wcml2YXRlOwogCQlpbnQgbGVuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwX2ltcGwuaCBiL25ldC9pcHY0L3VkcF9pbXBsLmgKaW5kZXggNzI4OGJmNy4uMmU5YmFkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwX2ltcGwuaAorKysgYi9uZXQvaXB2NC91ZHBfaW1wbC5oCkBAIC0yNiw3ICsyNiw3IEBACiBleHRlcm4gaW50CXVkcF9zZW5kcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2Zmc2V0LAogCQkJICAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQJdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gaW50CXVkcF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkCXVkcF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBleHRlcm4gaW50CXVkcDRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwbGl0ZS5jIGIvbmV0L2lwdjQvdWRwbGl0ZS5jCmluZGV4IDcyY2UyNmIuLjNjODA3OTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcGxpdGUuYworKysgYi9uZXQvaXB2NC91ZHBsaXRlLmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogIFVEUExJVEUgICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBVRFAtTGl0ZSBwcm90b2NvbCAoUkZDIDM4MjgpLgogICoKLSAqICBWZXJzaW9uOiAgICAkSWQ6IHVkcGxpdGUuYyx2IDEuMjUgMjAwNi8xMC8xOSAwNzoyMjozNiBnZXJyaXQgRXhwICQKLSAqCiAgKiAgQXV0aG9yczogICAgR2Vycml0IFJlbmtlciAgICAgICA8Z2Vycml0QGVyZy5hYmRuLmFjLnVrPgogICoKICAqICBDaGFuZ2VzOgpAQCAtMTMsNyArMTEsNiBAQAogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KICNpbmNsdWRlICJ1ZHBfaW1wbC5oIgotREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgdWRwX21pYiwgdWRwbGl0ZV9zdGF0aXN0aWNzKQlfX3JlYWRfbW9zdGx5OwogCiBzdHJ1Y3QgaGxpc3RfaGVhZCAJdWRwbGl0ZV9oYXNoW1VEUF9IVEFCTEVfU0laRV07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGZmNjFhNWMuLjc0ZDU0M2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtNiw4ICs2LDYgQEAKICAqCVBlZHJvIFJvcXVlCQk8cm9xdWVAZGkuZmMudWwucHQ+CiAgKglBbGV4ZXkgS3V6bmV0c292CTxrdXpuZXRAbXMyLmluci5hYy5ydT4KICAqCi0gKgkkSWQ6IGFkZHJjb25mLmMsdiAxLjY5IDIwMDEvMTAvMzEgMjE6NTU6NTQgZGF2ZW0gRXhwICQKLSAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtMTIxLDYgKzExOSw3IEBACiBzdGF0aWMgaW50IGRlc3luY19mYWN0b3IgPSBNQVhfREVTWU5DX0ZBQ1RPUiAqIEhaOwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgaXB2Nl9nZW5lcmF0ZV9ldWk2NCh1OCAqZXVpLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaXB2Nl9jb3VudF9hZGRyZXNzZXMoc3RydWN0IGluZXQ2X2RldiAqaWRldik7CiAKIC8qCkBAIC0xNTQsNyArMTUzLDcgQEAKIAogc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKGluZXQ2YWRkcl9jaGFpbik7CiAKLXN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mIF9fcmVhZF9tb3N0bHkgPSB7CitzdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmYgX19yZWFkX21vc3RseSA9IHsKIAkuZm9yd2FyZGluZwkJPSAwLAogCS5ob3BfbGltaXQJCT0gSVBWNl9ERUZBVUxUX0hPUExJTUlULAogCS5tdHU2CQkJPSBJUFY2X01JTl9NVFUsCkBAIC0xODUsNiArMTg0LDggQEAKICNlbmRpZgogCS5wcm94eV9uZHAJCT0gMCwKIAkuYWNjZXB0X3NvdXJjZV9yb3V0ZQk9IDAsCS8qIHdlIGRvIG5vdCBhY2NlcHQgUkgwIGJ5IGRlZmF1bHQuICovCisJLmRpc2FibGVfaXB2NgkJPSAwLAorCS5hY2NlcHRfZGFkCQk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtMjE3LDYgKzIxOCw4IEBACiAjZW5kaWYKIAkucHJveHlfbmRwCQk9IDAsCiAJLmFjY2VwdF9zb3VyY2Vfcm91dGUJPSAwLAkvKiB3ZSBkbyBub3QgYWNjZXB0IFJIMCBieSBkZWZhdWx0LiAqLworCS5kaXNhYmxlX2lwdjYJCT0gMCwKKwkuYWNjZXB0X2RhZAkJPSAxLAogfTsKIAogLyogSVB2NiBXaWxkY2FyZCBBZGRyZXNzIGFuZCBMb29wYmFjayBBZGRyZXNzIGRlZmluZWQgYnkgUkZDMjU1MyAqLwpAQCAtMjI2LDkgKzIyOSwxNSBAQAogY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbGlua2xvY2FsX2FsbHJvdXRlcnMgPSBJTjZBRERSX0xJTktMT0NBTF9BTExST1VURVJTX0lOSVQ7CiAKIC8qIENoZWNrIGlmIGEgdmFsaWQgcWRpc2MgaXMgYXZhaWxhYmxlICovCi1zdGF0aWMgaW5saW5lIGludCBhZGRyY29uZl9xZGlzY19vayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBib29sIGFkZHJjb25mX3FkaXNjX29rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChkZXYtPnFkaXNjICE9ICZub29wX3FkaXNjKTsKKwlyZXR1cm4gIXFkaXNjX3R4X2lzX25vb3AoZGV2KTsKK30KKworLyogQ2hlY2sgaWYgYSByb3V0ZSBpcyB2YWxpZCBwcmVmaXggcm91dGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFkZHJjb25mX2lzX3ByZWZpeF9yb3V0ZShjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQoreworCXJldHVybiAoKHJ0LT5ydDZpX2ZsYWdzICYgKFJURl9HQVRFV0FZIHwgUlRGX0RFRkFVTFQpKSA9PSAwKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkcmNvbmZfZGVsX3RpbWVyKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKQEAgLTM0NCw2ICszNTMsOCBAQAogCQlrZnJlZShuZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCWlmIChuZGV2LT5jbmYuZm9yd2FyZGluZykKKwkJZGV2X2Rpc2FibGVfbHJvKGRldik7CiAJLyogV2UgcmVmZXIgdG8gdGhlIGRldmljZSAqLwogCWRldl9ob2xkKGRldik7CiAKQEAgLTM3Miw2ICszODMsOSBAQAogCSAqLwogCWluNl9kZXZfaG9sZChuZGV2KTsKIAorCWlmIChkZXYtPmZsYWdzICYgKElGRl9OT0FSUCB8IElGRl9MT09QQkFDSykpCisJCW5kZXYtPmNuZi5hY2NlcHRfZGFkID0gLTE7CisKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2X1NJVCkgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9TSVRfTU9EVUxFKQogCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX1NJVCAmJiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0lTQVRBUCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwpAQCAtNDM4LDYgKzQ1Miw4IEBACiAJaWYgKCFpZGV2KQogCQlyZXR1cm47CiAJZGV2ID0gaWRldi0+ZGV2OworCWlmIChpZGV2LT5jbmYuZm9yd2FyZGluZykKKwkJZGV2X2Rpc2FibGVfbHJvKGRldik7CiAJaWYgKGRldiAmJiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpKSB7CiAJCWlmIChpZGV2LT5jbmYuZm9yd2FyZGluZykKIAkJCWlwdjZfZGV2X21jX2luYyhkZXYsICZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTsKQEAgLTQ4MywxMiArNDk5LDE0IEBACiAJaWYgKHAgPT0gJm5ldC0+aXB2Ni5kZXZjb25mX2RmbHQtPmZvcndhcmRpbmcpCiAJCXJldHVybjsKIAorCXJ0bmxfbG9jaygpOwogCWlmIChwID09ICZuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmZvcndhcmRpbmcpIHsKIAkJX19zMzIgbmV3ZiA9IG5ldC0+aXB2Ni5kZXZjb25mX2FsbC0+Zm9yd2FyZGluZzsKIAkJbmV0LT5pcHY2LmRldmNvbmZfZGZsdC0+Zm9yd2FyZGluZyA9IG5ld2Y7CiAJCWFkZHJjb25mX2ZvcndhcmRfY2hhbmdlKG5ldCwgbmV3Zik7CiAJfSBlbHNlIGlmICgoISpwKSBeICghb2xkKSkKIAkJZGV2X2ZvcndhcmRfY2hhbmdlKChzdHJ1Y3QgaW5ldDZfZGV2ICopdGFibGUtPmV4dHJhMSk7CisJcnRubF91bmxvY2soKTsKIAogCWlmICgqcCkKIAkJcnQ2X3B1cmdlX2RmbHRfcm91dGVycyhuZXQpOwpAQCAtNTY4LDYgKzU4NiwxMyBAQAogCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAJaW50IGhhc2g7CiAJaW50IGVyciA9IDA7CisJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKGFkZHIpOworCisJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZIHx8CisJICAgIGFkZHJfdHlwZSAmIElQVjZfQUREUl9NVUxUSUNBU1QgfHwKKwkgICAgKCEoaWRldi0+ZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykgJiYKKwkgICAgIGFkZHJfdHlwZSAmIElQVjZfQUREUl9MT09QQkFDSykpCisJCXJldHVybiBFUlJfUFRSKC1FQUREUk5PVEFWQUlMKTsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAlpZiAoaWRldi0+ZGVhZCkgewpAQCAtNzc3LDcgKzgwMiw3IEBACiAJCWlwdjZfYWRkcl9wcmVmaXgoJnByZWZpeCwgJmlmcC0+YWRkciwgaWZwLT5wcmVmaXhfbGVuKTsKIAkJcnQgPSBydDZfbG9va3VwKG5ldCwgJnByZWZpeCwgTlVMTCwgaWZwLT5pZGV2LT5kZXYtPmlmaW5kZXgsIDEpOwogCi0JCWlmIChydCAmJiAoKHJ0LT5ydDZpX2ZsYWdzICYgKFJURl9HQVRFV0FZIHwgUlRGX0RFRkFVTFQpKSA9PSAwKSkgeworCQlpZiAocnQgJiYgYWRkcmNvbmZfaXNfcHJlZml4X3JvdXRlKHJ0KSkgewogCQkJaWYgKG9ubGluayA9PSAwKSB7CiAJCQkJaXA2X2RlbF9ydChydCk7CiAJCQkJcnQgPSBOVUxMOwpAQCAtOTU4LDcgKzk4Myw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXB2Nl9nZXRfc2FkZHJfZXZhbChzdHJ1Y3QgaXB2Nl9zYWRkcl9zY29yZSAqc2NvcmUsCitzdGF0aWMgaW50IGlwdjZfZ2V0X3NhZGRyX2V2YWwoc3RydWN0IG5ldCAqbmV0LAorCQkJICAgICAgIHN0cnVjdCBpcHY2X3NhZGRyX3Njb3JlICpzY29yZSwKIAkJCSAgICAgICBzdHJ1Y3QgaXB2Nl9zYWRkcl9kc3QgKmRzdCwKIAkJCSAgICAgICBpbnQgaSkKIHsKQEAgLTEwMzcsNyArMTA2Myw4IEBACiAJCWJyZWFrOwogCWNhc2UgSVBWNl9TQUREUl9SVUxFX0xBQkVMOgogCQkvKiBSdWxlIDY6IFByZWZlciBtYXRjaGluZyBsYWJlbCAqLwotCQlyZXQgPSBpcHY2X2FkZHJfbGFiZWwoJnNjb3JlLT5pZmEtPmFkZHIsIHNjb3JlLT5hZGRyX3R5cGUsCisJCXJldCA9IGlwdjZfYWRkcl9sYWJlbChuZXQsCisJCQkJICAgICAgJnNjb3JlLT5pZmEtPmFkZHIsIHNjb3JlLT5hZGRyX3R5cGUsCiAJCQkJICAgICAgc2NvcmUtPmlmYS0+aWRldi0+ZGV2LT5pZmluZGV4KSA9PSBkc3QtPmxhYmVsOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSVBWNl9QUklWQUNZCkBAIC0xMDkxLDcgKzExMTgsNyBAQAogCWRzdC5hZGRyID0gZGFkZHI7CiAJZHN0LmlmaW5kZXggPSBkc3RfZGV2ID8gZHN0X2Rldi0+aWZpbmRleCA6IDA7CiAJZHN0LnNjb3BlID0gX19pcHY2X2FkZHJfc3JjX3Njb3BlKGRzdF90eXBlKTsKLQlkc3QubGFiZWwgPSBpcHY2X2FkZHJfbGFiZWwoZGFkZHIsIGRzdF90eXBlLCBkc3QuaWZpbmRleCk7CisJZHN0LmxhYmVsID0gaXB2Nl9hZGRyX2xhYmVsKG5ldCwgZGFkZHIsIGRzdF90eXBlLCBkc3QuaWZpbmRleCk7CiAJZHN0LnByZWZzID0gcHJlZnM7CiAKIAloaXNjb3JlLT5ydWxlID0gLTE7CkBAIC0xMTU5LDggKzExODYsOCBAQAogCQkJZm9yIChpID0gMDsgaSA8IElQVjZfU0FERFJfUlVMRV9NQVg7IGkrKykgewogCQkJCWludCBtaW5paGlzY29yZSwgbWluaXNjb3JlOwogCi0JCQkJbWluaWhpc2NvcmUgPSBpcHY2X2dldF9zYWRkcl9ldmFsKGhpc2NvcmUsICZkc3QsIGkpOwotCQkJCW1pbmlzY29yZSA9IGlwdjZfZ2V0X3NhZGRyX2V2YWwoc2NvcmUsICZkc3QsIGkpOworCQkJCW1pbmloaXNjb3JlID0gaXB2Nl9nZXRfc2FkZHJfZXZhbChuZXQsIGhpc2NvcmUsICZkc3QsIGkpOworCQkJCW1pbmlzY29yZSA9IGlwdjZfZ2V0X3NhZGRyX2V2YWwobmV0LCBzY29yZSwgJmRzdCwgaSk7CiAKIAkJCQlpZiAobWluaWhpc2NvcmUgPiBtaW5pc2NvcmUpIHsKIAkJCQkJaWYgKGkgPT0gSVBWNl9TQUREUl9SVUxFX1NDT1BFICYmCkBAIC0xNDAwLDYgKzE0MjcsMjAgQEAKIAogdm9pZCBhZGRyY29uZl9kYWRfZmFpbHVyZShzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnApCiB7CisJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGlmcC0+aWRldjsKKwlpZiAoaWRldi0+Y25mLmFjY2VwdF9kYWQgPiAxICYmICFpZGV2LT5jbmYuZGlzYWJsZV9pcHY2KSB7CisJCXN0cnVjdCBpbjZfYWRkciBhZGRyOworCisJCWFkZHIuczZfYWRkcjMyWzBdID0gaHRvbmwoMHhmZTgwMDAwMCk7CisJCWFkZHIuczZfYWRkcjMyWzFdID0gMDsKKworCQlpZiAoIWlwdjZfZ2VuZXJhdGVfZXVpNjQoYWRkci5zNl9hZGRyICsgOCwgaWRldi0+ZGV2KSAmJgorCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZpZnAtPmFkZHIsICZhZGRyKSkgeworCQkJLyogREFEIGZhaWxlZCBmb3IgbGluay1sb2NhbCBiYXNlZCBvbiBNQUMgYWRkcmVzcyAqLworCQkJaWRldi0+Y25mLmRpc2FibGVfaXB2NiA9IDE7CisJCX0KKwl9CisKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQlwcmludGsoS0VSTl9JTkZPICIlczogZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0ZWQhXG4iLCBpZnAtPmlkZXYtPmRldi0+bmFtZSk7CiAJYWRkcmNvbmZfZGFkX3N0b3AoaWZwKTsKQEAgLTE3ODgsNyArMTgyOSw3IEBACiAJCXJ0ID0gcnQ2X2xvb2t1cChkZXZfbmV0KGRldiksICZwaW5mby0+cHJlZml4LCBOVUxMLAogCQkJCWRldi0+aWZpbmRleCwgMSk7CiAKLQkJaWYgKHJ0ICYmICgocnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0dBVEVXQVkgfCBSVEZfREVGQVVMVCkpID09IDApKSB7CisJCWlmIChydCAmJiBhZGRyY29uZl9pc19wcmVmaXhfcm91dGUocnQpKSB7CiAJCQkvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi8KIAkJCWlmICh2YWxpZF9sZnQgPT0gMCkgewogCQkJCWlwNl9kZWxfcnQocnQpOwpAQCAtMTgyMiw2ICsxODYzLDcgQEAKIAkJc3RydWN0IGluZXQ2X2lmYWRkciAqIGlmcDsKIAkJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAJCWludCBjcmVhdGUgPSAwLCB1cGRhdGVfbGZ0ID0gMDsKKwkJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCiAJCWlmIChwaW5mby0+cHJlZml4X2xlbiA9PSA2NCkgewogCQkJbWVtY3B5KCZhZGRyLCAmcGluZm8tPnByZWZpeCwgOCk7CkBAIC0xODQwLDcgKzE4ODIsNyBAQAogCiBvazoKIAotCQlpZnAgPSBpcHY2X2dldF9pZmFkZHIoZGV2X25ldChkZXYpLCAmYWRkciwgZGV2LCAxKTsKKwkJaWZwID0gaXB2Nl9nZXRfaWZhZGRyKG5ldCwgJmFkZHIsIGRldiwgMSk7CiAKIAkJaWYgKGlmcCA9PSBOVUxMICYmIHZhbGlkX2xmdCkgewogCQkJaW50IG1heF9hZGRyZXNzZXMgPSBpbjZfZGV2LT5jbmYubWF4X2FkZHJlc3NlczsKQEAgLTE4NDgsNyArMTg5MCw3IEBACiAKICNpZmRlZiBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRAogCQkJaWYgKGluNl9kZXYtPmNuZi5vcHRpbWlzdGljX2RhZCAmJgotCQkJICAgICFpcHY2X2RldmNvbmYuZm9yd2FyZGluZykKKwkJCSAgICAhbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5mb3J3YXJkaW5nKQogCQkJCWFkZHJfZmxhZ3MgPSBJRkFfRl9PUFRJTUlTVElDOwogI2VuZGlmCiAKQEAgLTIyNzcsNyArMjMxOSw3IEBACiAKICNpZmRlZiBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRAogCWlmIChpZGV2LT5jbmYub3B0aW1pc3RpY19kYWQgJiYKLQkgICAgIWlwdjZfZGV2Y29uZi5mb3J3YXJkaW5nKQorCSAgICAhZGV2X25ldChpZGV2LT5kZXYpLT5pcHY2LmRldmNvbmZfYWxsLT5mb3J3YXJkaW5nKQogCQlhZGRyX2ZsYWdzIHw9IElGQV9GX09QVElNSVNUSUM7CiAjZW5kaWYKIApAQCAtMjczMiw2ICsyNzc0LDcgQEAKIAlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CiAKIAlpZiAoZGV2LT5mbGFncyYoSUZGX05PQVJQfElGRl9MT09QQkFDSykgfHwKKwkgICAgaWRldi0+Y25mLmFjY2VwdF9kYWQgPCAxIHx8CiAJICAgICEoaWZwLT5mbGFncyZJRkFfRl9URU5UQVRJVkUpIHx8CiAJICAgIGlmcC0+ZmxhZ3MgJiBJRkFfRl9OT0RBRCkgewogCQlpZnAtPmZsYWdzICY9IH4oSUZBX0ZfVEVOVEFUSVZFfElGQV9GX09QVElNSVNUSUMpOwpAQCAtMjc3OSw2ICsyODIyLDExIEBACiAJCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAkJZ290byBvdXQ7CiAJfQorCWlmIChpZGV2LT5jbmYuYWNjZXB0X2RhZCA+IDEgJiYgaWRldi0+Y25mLmRpc2FibGVfaXB2NikgeworCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CisJCWFkZHJjb25mX2RhZF9mYWlsdXJlKGlmcCk7CisJCXJldHVybjsKKwl9CiAJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwogCWlmIChpZnAtPnByb2JlcyA9PSAwKSB7CiAJCS8qCkBAIC0zNjM4LDYgKzM2ODYsOCBAQAogI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQogCWFycmF5W0RFVkNPTkZfTUNfRk9SV0FSRElOR10gPSBjbmYtPm1jX2ZvcndhcmRpbmc7CiAjZW5kaWYKKwlhcnJheVtERVZDT05GX0RJU0FCTEVfSVBWNl0gPSBjbmYtPmRpc2FibGVfaXB2NjsKKwlhcnJheVtERVZDT05GX0FDQ0VQVF9EQURdID0gY25mLT5hY2NlcHRfZGFkOwogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBpbmV0Nl9pZl9ubG1zZ19zaXplKHZvaWQpCkBAIC00MTk3LDYgKzQyNDcsMjIgQEAKIAkJfSwKICNlbmRpZgogCQl7CisJCQkuY3RsX25hbWUJPQlDVExfVU5OVU1CRVJFRCwKKwkJCS5wcm9jbmFtZQk9CSJkaXNhYmxlX2lwdjYiLAorCQkJLmRhdGEJCT0JJmlwdjZfZGV2Y29uZi5kaXNhYmxlX2lwdjYsCisJCQkubWF4bGVuCQk9CXNpemVvZihpbnQpLAorCQkJLm1vZGUJCT0JMDY0NCwKKwkJCS5wcm9jX2hhbmRsZXIJPQkmcHJvY19kb2ludHZlYywKKwkJfSwKKwkJeworCQkJLmN0bF9uYW1lCT0JQ1RMX1VOTlVNQkVSRUQsCisJCQkucHJvY25hbWUJPQkiYWNjZXB0X2RhZCIsCisJCQkuZGF0YQkJPQkmaXB2Nl9kZXZjb25mLmFjY2VwdF9kYWQsCisJCQkubWF4bGVuCQk9CXNpemVvZihpbnQpLAorCQkJLm1vZGUJCT0JMDY0NCwKKwkJCS5wcm9jX2hhbmRsZXIJPQkmcHJvY19kb2ludHZlYywKKwkJfSwKKwkJewogCQkJLmN0bF9uYW1lCT0JMCwJLyogc2VudGluZWwgKi8KIAkJfQogCX0sCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRybGFiZWwuYyBiL25ldC9pcHY2L2FkZHJsYWJlbC5jCmluZGV4IDliZmE4ODQuLjA4OTA5MDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJsYWJlbC5jCisrKyBiL25ldC9pcHY2L2FkZHJsYWJlbC5jCkBAIC0yOSw2ICsyOSw5IEBACiAgKi8KIHN0cnVjdCBpcDZhZGRybGJsX2VudHJ5CiB7CisjaWZkZWYgQ09ORklHX05FVF9OUworCXN0cnVjdCBuZXQgKmxibF9uZXQ7CisjZW5kaWYKIAlzdHJ1Y3QgaW42X2FkZHIgcHJlZml4OwogCWludCBwcmVmaXhsZW47CiAJaW50IGlmaW5kZXg7CkBAIC00Niw2ICs0OSwxNiBAQAogCXUzMiBzZXE7CiB9IGlwNmFkZHJsYmxfdGFibGU7CiAKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBuZXQgKmlwNmFkZHJsYmxfbmV0KGNvbnN0IHN0cnVjdCBpcDZhZGRybGJsX2VudHJ5ICpsYmwpCit7CisjaWZkZWYgQ09ORklHX05FVF9OUworCXJldHVybiBsYmwtPmxibF9uZXQ7CisjZWxzZQorCXJldHVybiAmaW5pdF9uZXQ7CisjZW5kaWYKK30KKwogLyoKICAqIERlZmF1bHQgcG9saWN5IHRhYmxlIChSRkMzNDg0ICsgZXh0ZW5zaW9ucykKICAqCkBAIC02NSw3ICs3OCw3IEBACiAKICNkZWZpbmUgSVBWNl9BRERSX0xBQkVMX0RFRkFVTFQJMHhmZmZmZmZmZlVMCiAKLXN0YXRpYyBjb25zdCBfX2luaXRkYXRhIHN0cnVjdCBpcDZhZGRybGJsX2luaXRfdGFibGUKK3N0YXRpYyBjb25zdCBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgaXA2YWRkcmxibF9pbml0X3RhYmxlCiB7CiAJY29uc3Qgc3RydWN0IGluNl9hZGRyICpwcmVmaXg7CiAJaW50IHByZWZpeGxlbjsKQEAgLTEwOCw2ICsxMjEsOSBAQAogLyogT2JqZWN0IG1hbmFnZW1lbnQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcDZhZGRybGJsX2ZyZWUoc3RydWN0IGlwNmFkZHJsYmxfZW50cnkgKnApCiB7CisjaWZkZWYgQ09ORklHX05FVF9OUworCXJlbGVhc2VfbmV0KHAtPmxibF9uZXQpOworI2VuZGlmCiAJa2ZyZWUocCk7CiB9CiAKQEAgLTEyOCwxMCArMTQ0LDEzIEBACiB9CiAKIC8qIEZpbmQgbGFiZWwgKi8KLXN0YXRpYyBpbnQgX19pcDZhZGRybGJsX21hdGNoKHN0cnVjdCBpcDZhZGRybGJsX2VudHJ5ICpwLAorc3RhdGljIGludCBfX2lwNmFkZHJsYmxfbWF0Y2goc3RydWN0IG5ldCAqbmV0LAorCQkJICAgICAgc3RydWN0IGlwNmFkZHJsYmxfZW50cnkgKnAsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCQkgICAgICBpbnQgYWRkcnR5cGUsIGludCBpZmluZGV4KQogeworCWlmICghbmV0X2VxKGlwNmFkZHJsYmxfbmV0KHApLCBuZXQpKQorCQlyZXR1cm4gMDsKIAlpZiAocC0+aWZpbmRleCAmJiBwLT5pZmluZGV4ICE9IGlmaW5kZXgpCiAJCXJldHVybiAwOwogCWlmIChwLT5hZGRydHlwZSAmJiBwLT5hZGRydHlwZSAhPSBhZGRydHlwZSkKQEAgLTE0MSwxOSArMTYwLDIxIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXA2YWRkcmxibF9lbnRyeSAqX19pcHY2X2FkZHJfbGFiZWwoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorc3RhdGljIHN0cnVjdCBpcDZhZGRybGJsX2VudHJ5ICpfX2lwdjZfYWRkcl9sYWJlbChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCQkJCSAgaW50IHR5cGUsIGludCBpZmluZGV4KQogewogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAJc3RydWN0IGlwNmFkZHJsYmxfZW50cnkgKnA7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIHBvcywgJmlwNmFkZHJsYmxfdGFibGUuaGVhZCwgbGlzdCkgewotCQlpZiAoX19pcDZhZGRybGJsX21hdGNoKHAsIGFkZHIsIHR5cGUsIGlmaW5kZXgpKQorCQlpZiAoX19pcDZhZGRybGJsX21hdGNoKG5ldCwgcCwgYWRkciwgdHlwZSwgaWZpbmRleCkpCiAJCQlyZXR1cm4gcDsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXUzMiBpcHY2X2FkZHJfbGFiZWwoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBpbnQgdHlwZSwgaW50IGlmaW5kZXgpCit1MzIgaXB2Nl9hZGRyX2xhYmVsKHN0cnVjdCBuZXQgKm5ldCwKKwkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgaW50IHR5cGUsIGludCBpZmluZGV4KQogewogCXUzMiBsYWJlbDsKIAlzdHJ1Y3QgaXA2YWRkcmxibF9lbnRyeSAqcDsKQEAgLTE2MSw3ICsxODIsNyBAQAogCXR5cGUgJj0gSVBWNl9BRERSX01BUFBFRCB8IElQVjZfQUREUl9DT01QQVR2NCB8IElQVjZfQUREUl9MT09QQkFDSzsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlwID0gX19pcHY2X2FkZHJfbGFiZWwoYWRkciwgdHlwZSwgaWZpbmRleCk7CisJcCA9IF9faXB2Nl9hZGRyX2xhYmVsKG5ldCwgYWRkciwgdHlwZSwgaWZpbmRleCk7CiAJbGFiZWwgPSBwID8gcC0+bGFiZWwgOiBJUFY2X0FERFJfTEFCRUxfREVGQVVMVDsKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtMTc0LDcgKzE5NSw4IEBACiB9CiAKIC8qIGFsbG9jYXRlIG9uZSBlbnRyeSAqLwotc3RhdGljIHN0cnVjdCBpcDZhZGRybGJsX2VudHJ5ICppcDZhZGRybGJsX2FsbG9jKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LAorc3RhdGljIHN0cnVjdCBpcDZhZGRybGJsX2VudHJ5ICppcDZhZGRybGJsX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwKIAkJCQkJCSBpbnQgcHJlZml4bGVuLCBpbnQgaWZpbmRleCwKIAkJCQkJCSB1MzIgbGFiZWwpCiB7CkBAIC0yMTYsNiArMjM4LDkgQEAKIAluZXdwLT5hZGRydHlwZSA9IGFkZHJ0eXBlOwogCW5ld3AtPmxhYmVsID0gbGFiZWw7CiAJSU5JVF9ITElTVF9OT0RFKCZuZXdwLT5saXN0KTsKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJbmV3cC0+bGJsX25ldCA9IGhvbGRfbmV0KG5ldCk7CisjZW5kaWYKIAlhdG9taWNfc2V0KCZuZXdwLT5yZWZjbnQsIDEpOwogCXJldHVybiBuZXdwOwogfQpAQCAtMjM3LDYgKzI2Miw3IEBACiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgcG9zLCBuLAogCQkJCQkgICZpcDZhZGRybGJsX3RhYmxlLmhlYWQsIGxpc3QpIHsKIAkJCWlmIChwLT5wcmVmaXhsZW4gPT0gbmV3cC0+cHJlZml4bGVuICYmCisJCQkgICAgbmV0X2VxKGlwNmFkZHJsYmxfbmV0KHApLCBpcDZhZGRybGJsX25ldChuZXdwKSkgJiYKIAkJCSAgICBwLT5pZmluZGV4ID09IG5ld3AtPmlmaW5kZXggJiYKIAkJCSAgICBpcHY2X2FkZHJfZXF1YWwoJnAtPnByZWZpeCwgJm5ld3AtPnByZWZpeCkpIHsKIAkJCQlpZiAoIXJlcGxhY2UpIHsKQEAgLTI2MSw3ICsyODcsOCBAQAogfQogCiAvKiBhZGQgYSBsYWJlbCAqLwotc3RhdGljIGludCBpcDZhZGRybGJsX2FkZChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKK3N0YXRpYyBpbnQgaXA2YWRkcmxibF9hZGQoc3RydWN0IG5ldCAqbmV0LAorCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKIAkJCSAgaW50IGlmaW5kZXgsIHUzMiBsYWJlbCwgaW50IHJlcGxhY2UpCiB7CiAJc3RydWN0IGlwNmFkZHJsYmxfZW50cnkgKm5ld3A7CkBAIC0yNzQsNyArMzAxLDcgQEAKIAkJCSh1bnNpZ25lZCBpbnQpbGFiZWwsCiAJCQlyZXBsYWNlKTsKIAotCW5ld3AgPSBpcDZhZGRybGJsX2FsbG9jKHByZWZpeCwgcHJlZml4bGVuLCBpZmluZGV4LCBsYWJlbCk7CisJbmV3cCA9IGlwNmFkZHJsYmxfYWxsb2MobmV0LCBwcmVmaXgsIHByZWZpeGxlbiwgaWZpbmRleCwgbGFiZWwpOwogCWlmIChJU19FUlIobmV3cCkpCiAJCXJldHVybiBQVFJfRVJSKG5ld3ApOwogCXNwaW5fbG9jaygmaXA2YWRkcmxibF90YWJsZS5sb2NrKTsKQEAgLTI4Niw3ICszMTMsOCBAQAogfQogCiAvKiByZW1vdmUgYSBsYWJlbCAqLwotc3RhdGljIGludCBfX2lwNmFkZHJsYmxfZGVsKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLAorc3RhdGljIGludCBfX2lwNmFkZHJsYmxfZGVsKHN0cnVjdCBuZXQgKm5ldCwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKIAkJCSAgICBpbnQgaWZpbmRleCkKIHsKIAlzdHJ1Y3QgaXA2YWRkcmxibF9lbnRyeSAqcCA9IE5VTEw7CkBAIC0zMDAsNiArMzI4LDcgQEAKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgcG9zLCBuLCAmaXA2YWRkcmxibF90YWJsZS5oZWFkLCBsaXN0KSB7CiAJCWlmIChwLT5wcmVmaXhsZW4gPT0gcHJlZml4bGVuICYmCisJCSAgICBuZXRfZXEoaXA2YWRkcmxibF9uZXQocCksIG5ldCkgJiYKIAkJICAgIHAtPmlmaW5kZXggPT0gaWZpbmRleCAmJgogCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZwLT5wcmVmaXgsIHByZWZpeCkpIHsKIAkJCWhsaXN0X2RlbF9yY3UoJnAtPmxpc3QpOwpAQCAtMzExLDcgKzM0MCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpcDZhZGRybGJsX2RlbChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKK3N0YXRpYyBpbnQgaXA2YWRkcmxibF9kZWwoc3RydWN0IG5ldCAqbmV0LAorCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKIAkJCSAgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IGluNl9hZGRyIHByZWZpeF9idWY7CkBAIC0zMjQsMTMgKzM1NCwxMyBAQAogCiAJaXB2Nl9hZGRyX3ByZWZpeCgmcHJlZml4X2J1ZiwgcHJlZml4LCBwcmVmaXhsZW4pOwogCXNwaW5fbG9jaygmaXA2YWRkcmxibF90YWJsZS5sb2NrKTsKLQlyZXQgPSBfX2lwNmFkZHJsYmxfZGVsKCZwcmVmaXhfYnVmLCBwcmVmaXhsZW4sIGlmaW5kZXgpOworCXJldCA9IF9faXA2YWRkcmxibF9kZWwobmV0LCAmcHJlZml4X2J1ZiwgcHJlZml4bGVuLCBpZmluZGV4KTsKIAlzcGluX3VubG9jaygmaXA2YWRkcmxibF90YWJsZS5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKiBhZGQgZGVmYXVsdCBsYWJlbCAqLwotc3RhdGljIF9faW5pdCBpbnQgaXA2YWRkcmxibF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2YWRkcmxibF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGVyciA9IDA7CiAJaW50IGk7CkBAIC0zMzgsNyArMzY4LDggQEAKIAlBRERSTEFCRUwoS0VSTl9ERUJVRyAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXA2YWRkcmxibF9pbml0X3RhYmxlKTsgaSsrKSB7Ci0JCWludCByZXQgPSBpcDZhZGRybGJsX2FkZChpcDZhZGRybGJsX2luaXRfdGFibGVbaV0ucHJlZml4LAorCQlpbnQgcmV0ID0gaXA2YWRkcmxibF9hZGQobmV0LAorCQkJCQkgaXA2YWRkcmxibF9pbml0X3RhYmxlW2ldLnByZWZpeCwKIAkJCQkJIGlwNmFkZHJsYmxfaW5pdF90YWJsZVtpXS5wcmVmaXhsZW4sCiAJCQkJCSAwLAogCQkJCQkgaXA2YWRkcmxibF9pbml0X3RhYmxlW2ldLmxhYmVsLCAwKTsKQEAgLTM0OSwxMSArMzgwLDMyIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZhZGRybGJsX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgaXA2YWRkcmxibF9lbnRyeSAqcCA9IE5VTEw7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvcywgKm47CisKKwkvKiBSZW1vdmUgYWxsIGxhYmVscyBiZWxvbmdpbmcgdG8gdGhlIGV4aXRpbmcgbmV0ICovCisJc3Bpbl9sb2NrKCZpcDZhZGRybGJsX3RhYmxlLmxvY2spOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgcG9zLCBuLCAmaXA2YWRkcmxibF90YWJsZS5oZWFkLCBsaXN0KSB7CisJCWlmIChuZXRfZXEoaXA2YWRkcmxibF9uZXQocCksIG5ldCkpIHsKKwkJCWhsaXN0X2RlbF9yY3UoJnAtPmxpc3QpOworCQkJaXA2YWRkcmxibF9wdXQocCk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmlwNmFkZHJsYmxfdGFibGUubG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2Nl9hZGRyX2xhYmVsX29wcyA9IHsKKwkuaW5pdCA9IGlwNmFkZHJsYmxfbmV0X2luaXQsCisJLmV4aXQgPSBpcDZhZGRybGJsX25ldF9leGl0LAorfTsKKwogaW50IF9faW5pdCBpcHY2X2FkZHJfbGFiZWxfaW5pdCh2b2lkKQogewogCXNwaW5fbG9ja19pbml0KCZpcDZhZGRybGJsX3RhYmxlLmxvY2spOwogCi0JcmV0dXJuIGlwNmFkZHJsYmxfaW5pdCgpOworCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHY2X2FkZHJfbGFiZWxfb3BzKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlmYWxfcG9saWN5W0lGQUxfTUFYKzFdID0gewpAQCAtMzcxLDkgKzQyMyw2IEBACiAJdTMyIGxhYmVsOwogCWludCBlcnIgPSAwOwogCi0JaWYgKG5ldCAhPSAmaW5pdF9uZXQpCi0JCXJldHVybiAwOwotCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmYWwpLCB0YiwgSUZBTF9NQVgsIGlmYWxfcG9saWN5KTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTM4NSw3ICs0MzQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChpZmFsLT5pZmFsX2luZGV4ICYmCi0JICAgICFfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmFsLT5pZmFsX2luZGV4KSkKKwkgICAgIV9fZGV2X2dldF9ieV9pbmRleChuZXQsIGlmYWwtPmlmYWxfaW5kZXgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghdGJbSUZBTF9BRERSRVNTXSkKQEAgLTQwMywxMiArNDUyLDEyIEBACiAKIAlzd2l0Y2gobmxoLT5ubG1zZ190eXBlKSB7CiAJY2FzZSBSVE1fTkVXQUREUkxBQkVMOgotCQllcnIgPSBpcDZhZGRybGJsX2FkZChwZngsIGlmYWwtPmlmYWxfcHJlZml4bGVuLAorCQllcnIgPSBpcDZhZGRybGJsX2FkZChuZXQsIHBmeCwgaWZhbC0+aWZhbF9wcmVmaXhsZW4sCiAJCQkJICAgICBpZmFsLT5pZmFsX2luZGV4LCBsYWJlbCwKIAkJCQkgICAgIG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9SRVBMQUNFKTsKIAkJYnJlYWs7CiAJY2FzZSBSVE1fREVMQUREUkxBQkVMOgotCQllcnIgPSBpcDZhZGRybGJsX2RlbChwZngsIGlmYWwtPmlmYWxfcHJlZml4bGVuLAorCQllcnIgPSBpcDZhZGRybGJsX2RlbChuZXQsIHBmeCwgaWZhbC0+aWZhbF9wcmVmaXhsZW4sCiAJCQkJICAgICBpZmFsLT5pZmFsX2luZGV4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTQ1OCwxMiArNTA3LDEwIEBACiAJaW50IGlkeCA9IDAsIHNfaWR4ID0gY2ItPmFyZ3NbMF07CiAJaW50IGVycjsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gMDsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgcG9zLCAmaXA2YWRkcmxibF90YWJsZS5oZWFkLCBsaXN0KSB7Ci0JCWlmIChpZHggPj0gc19pZHgpIHsKKwkJaWYgKGlkeCA+PSBzX2lkeCAmJgorCQkgICAgbmV0X2VxKGlwNmFkZHJsYmxfbmV0KHApLCBuZXQpKSB7CiAJCQlpZiAoKGVyciA9IGlwNmFkZHJsYmxfZmlsbChza2IsIHAsCiAJCQkJCQkgICBpcDZhZGRybGJsX3RhYmxlLnNlcSwKIAkJCQkJCSAgIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLApAQCAtNDk5LDkgKzU0Niw2IEBACiAJc3RydWN0IGlwNmFkZHJsYmxfZW50cnkgKnA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gMDsKLQogCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZmFsKSwgdGIsIElGQUxfTUFYLCBpZmFsX3BvbGljeSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC01MTMsNyArNTU3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaWZhbC0+aWZhbF9pbmRleCAmJgotCSAgICAhX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZhbC0+aWZhbF9pbmRleCkpCisJICAgICFfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBpZmFsLT5pZmFsX2luZGV4KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIXRiW0lGQUxfQUREUkVTU10pCkBAIC01MjQsNyArNTY4LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JcCA9IF9faXB2Nl9hZGRyX2xhYmVsKGFkZHIsIGlwdjZfYWRkcl90eXBlKGFkZHIpLCBpZmFsLT5pZmFsX2luZGV4KTsKKwlwID0gX19pcHY2X2FkZHJfbGFiZWwobmV0LCBhZGRyLCBpcHY2X2FkZHJfdHlwZShhZGRyKSwgaWZhbC0+aWZhbF9pbmRleCk7CiAJaWYgKHAgJiYgaXA2YWRkcmxibF9ob2xkKHApKQogCQlwID0gTlVMTDsKIAlsc2VxID0gaXA2YWRkcmxibF90YWJsZS5zZXE7CkBAIC01NTIsNyArNTk2LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gcnRubF91bmljYXN0KHNrYiwgJmluaXRfbmV0LCBORVRMSU5LX0NCKGluX3NrYikucGlkKTsKKwllcnIgPSBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCBlODRiM2ZkLi4zZDgyOGJjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTcsOCArNyw2IEBACiAgKgogICoJQWRhcHRlZCBmcm9tIGxpbnV4L25ldC9pcHY0L2FmX2luZXQuYwogICoKLSAqCSRJZDogYWZfaW5ldDYuYyx2IDEuNjYgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAotICoKICAqIAlGaXhlczoKICAqCXBpZ2d5LCBLYXJsIEtudXRzb24JOglTb2NrZXQgcHJvdG9jb2wgdGFibGUKICAqIAlIaWRlYWtpIFlPU0hJRlVKSQk6CXNpbjZfc2NvcGVfaWQgc3VwcG9ydApAQCAtNjEsOSArNTksNyBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFCiAjaW5jbHVkZSA8bGludXgvbXJvdXRlNi5oPgotI2VuZGlmCiAKIE1PRFVMRV9BVVRIT1IoIkNhc3Qgb2YgZG96ZW5zIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklQdjYgcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4Iik7CkBAIC0zNzMsNyArMzY5LDcgQEAKIAogRVhQT1JUX1NZTUJPTChpbmV0Nl9yZWxlYXNlKTsKIAotaW50IGluZXQ2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCit2b2lkIGluZXQ2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0zOTEsOCArMzg3LDYgQEAKIAogCWlmICgob3B0ID0geGNoZygmbnAtPm9wdCwgTlVMTCkpICE9IE5VTEwpCiAJCXNvY2tfa2ZyZWVfcyhzaywgb3B0LCBvcHQtPnRvdF9sZW4pOwotCi0JcmV0dXJuIDA7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGluZXQ2X2Rlc3Ryb3lfc29jayk7CkBAIC05NTYsOSArOTUwLDkgQEAKIAllcnIgPSBpY21wdjZfaW5pdCgpOwogCWlmIChlcnIpCiAJCWdvdG8gaWNtcF9mYWlsOwotI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQotCWlwNl9tcl9pbml0KCk7Ci0jZW5kaWYKKwllcnIgPSBpcDZfbXJfaW5pdCgpOworCWlmIChlcnIpCisJCWdvdG8gaXBtcl9mYWlsOwogCWVyciA9IG5kaXNjX2luaXQoKTsKIAlpZiAoZXJyKQogCQlnb3RvIG5kaXNjX2ZhaWw7CkBAIC0xMDYxLDYgKzEwNTUsOCBAQAogaWdtcF9mYWlsOgogCW5kaXNjX2NsZWFudXAoKTsKIG5kaXNjX2ZhaWw6CisJaXA2X21yX2NsZWFudXAoKTsKK2lwbXJfZmFpbDoKIAlpY21wdjZfY2xlYW51cCgpOwogaWNtcF9mYWlsOgogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaW5ldDZfbmV0X29wcyk7CkBAIC0xMTE1LDYgKzExMTEsNyBAQAogCWlwdjZfbmV0ZmlsdGVyX2ZpbmkoKTsKIAlpZ21wNl9jbGVhbnVwKCk7CiAJbmRpc2NfY2xlYW51cCgpOworCWlwNl9tcl9jbGVhbnVwKCk7CiAJaWNtcHY2X2NsZWFudXAoKTsKIAlyYXd2Nl9leGl0KCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FueWNhc3QuYyBiL25ldC9pcHY2L2FueWNhc3QuYwppbmRleCA0ZTFiMjlmLi44MzM2Y2Q4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hbnljYXN0LmMKKysrIGIvbmV0L2lwdjYvYW55Y2FzdC5jCkBAIC02MCw3ICs2MCw3IEBACiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaXB2Nl9hY19zb2NrbGlzdCAqcGFjOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKLQlpbnQJaXNob3N0ID0gIWlwdjZfZGV2Y29uZi5mb3J3YXJkaW5nOworCWludAlpc2hvc3QgPSAhbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5mb3J3YXJkaW5nOwogCWludAllcnIgPSAwOwogCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZGF0YWdyYW0uYyBiL25ldC9pcHY2L2RhdGFncmFtLmMKaW5kZXggMGYwZjk0YS4uZjdiNTM1ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZGF0YWdyYW0uYworKysgYi9uZXQvaXB2Ni9kYXRhZ3JhbS5jCkBAIC01LDggKzUsNiBAQAogICoJQXV0aG9yczoKICAqCVBlZHJvIFJvcXVlCQk8cm9xdWVAZGkuZmMudWwucHQ+CiAgKgotICoJJElkOiBkYXRhZ3JhbS5jLHYgMS4yNCAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCBkY2Y5NGZkLi44MzdjODMwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKKysrIGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC03LDggKzcsNiBAQAogICoJQW5kaSBLbGVlbgkJPGFrQG11Yy5kZT4KICAqCUFsZXhleSBLdXpuZXRzb3YJPGt1em5ldEBtczIuaW5yLmFjLnJ1PgogICoKLSAqCSRJZDogZXh0aGRycy5jLHYgMS4xMyAyMDAxLzA2LzE5IDE1OjU4OjU2IGRhdmVtIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTMyMSw3ICszMTksNyBAQAogCWludCBuLCBpOwogCXN0cnVjdCBpcHY2X3J0X2hkciAqaGRyOwogCXN0cnVjdCBydDBfaGRyICpydGhkcjsKLQlpbnQgYWNjZXB0X3NvdXJjZV9yb3V0ZSA9IGlwdjZfZGV2Y29uZi5hY2NlcHRfc291cmNlX3JvdXRlOworCWludCBhY2NlcHRfc291cmNlX3JvdXRlID0gZGV2X25ldChza2ItPmRldiktPmlwdjYuZGV2Y29uZl9hbGwtPmFjY2VwdF9zb3VyY2Vfcm91dGU7CiAKIAlpZGV2ID0gaW42X2Rldl9nZXQoc2tiLT5kZXYpOwogCWlmIChpZGV2KSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmMKaW5kZXggZDQyZGQxNi4uYWJlZGY5NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaWNtcC5jCisrKyBiL25ldC9pcHY2L2ljbXAuYwpAQCAtNSw4ICs1LDYgQEAKICAqCUF1dGhvcnM6CiAgKglQZWRybyBSb3F1ZQkJPHJvcXVlQGRpLmZjLnVsLnB0PgogICoKLSAqCSRJZDogaWNtcC5jLHYgMS4zOCAyMDAyLzAyLzA4IDAzOjU3OjE5IGRhdmVtIEV4cCAkCi0gKgogICoJQmFzZWQgb24gbmV0L2lwdjQvaWNtcC5jCiAgKgogICoJUkZDIDE4ODUKQEAgLTk1Niw3ICs5NTQsOCBAQAogCQkuZGF0YQkJPSAmaW5pdF9uZXQuaXB2Ni5zeXNjdGwuaWNtcHY2X3RpbWUsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYworCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbXNfamlmZmllcywKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9tc19qaWZmaWVzCiAJfSwKIAl7IC5jdGxfbmFtZSA9IDAgfSwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKaW5kZXggNTgwMDE0YS4uMDBhOGE1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwpAQCAtNjgsNyArNjgsNyBAQAogCS8qIE9wdGltaXplIGhlcmUgZm9yIGRpcmVjdCBoaXQsIG9ubHkgbGlzdGVuaW5nIGNvbm5lY3Rpb25zIGNhbgogCSAqIGhhdmUgd2lsZGNhcmRzIGFueXdheXMuCiAJICovCi0JdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9laGFzaGZuKGRhZGRyLCBobnVtLCBzYWRkciwgc3BvcnQpOworCXVuc2lnbmVkIGludCBoYXNoID0gaW5ldDZfZWhhc2hmbihuZXQsIGRhZGRyLCBobnVtLCBzYWRkciwgc3BvcnQpOwogCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhhc2hpbmZvLCBoYXNoKTsKIAlyd2xvY2tfdCAqbG9jayA9IGluZXRfZWhhc2hfbG9ja3AoaGFzaGluZm8sIGhhc2gpOwogCkBAIC0xMDQsNyArMTA0LDggQEAKIAlpbnQgc2NvcmUsIGhpc2NvcmUgPSAwOwogCiAJcmVhZF9sb2NrKCZoYXNoaW5mby0+bGhhc2hfbG9jayk7Ci0Jc2tfZm9yX2VhY2goc2ssIG5vZGUsICZoYXNoaW5mby0+bGlzdGVuaW5nX2hhc2hbaW5ldF9saGFzaGZuKGhudW0pXSkgeworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLAorCQkJJmhhc2hpbmZvLT5saXN0ZW5pbmdfaGFzaFtpbmV0X2xoYXNoZm4obmV0LCBobnVtKV0pIHsKIAkJaWYgKG5ldF9lcShzb2NrX25ldChzayksIG5ldCkgJiYgaW5ldF9zayhzayktPm51bSA9PSBobnVtICYmCiAJCQkJc2stPnNrX2ZhbWlseSA9PSBQRl9JTkVUNikgewogCQkJY29uc3Qgc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwpAQCAtMTY1LDE0ICsxNjYsMTQgQEAKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gJm5wLT5kYWRkcjsKIAljb25zdCBpbnQgZGlmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAljb25zdCBfX3BvcnRwYWlyIHBvcnRzID0gSU5FVF9DT01CSU5FRF9QT1JUUyhpbmV0LT5kcG9ydCwgbHBvcnQpOwotCWNvbnN0IHVuc2lnbmVkIGludCBoYXNoID0gaW5ldDZfZWhhc2hmbihkYWRkciwgbHBvcnQsIHNhZGRyLAorCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwljb25zdCB1bnNpZ25lZCBpbnQgaGFzaCA9IGluZXQ2X2VoYXNoZm4obmV0LCBkYWRkciwgbHBvcnQsIHNhZGRyLAogCQkJCQkJaW5ldC0+ZHBvcnQpOwogCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhpbmZvLCBoYXNoKTsKIAlyd2xvY2tfdCAqbG9jayA9IGluZXRfZWhhc2hfbG9ja3AoaGluZm8sIGhhc2gpOwogCXN0cnVjdCBzb2NrICpzazI7CiAJY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHc7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJcHJlZmV0Y2goaGVhZC0+Y2hhaW4uZmlyc3QpOwogCXdyaXRlX2xvY2sobG9jayk7CkBAIC0yMDksMTEgKzIxMCwxMSBAQAogCiAJaWYgKHR3cCAhPSBOVUxMKSB7CiAJCSp0d3AgPSB0dzsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CisJCU5FVF9JTkNfU1RBVFNfQkgodHdza19uZXQodHcpLCBMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CiAJfSBlbHNlIGlmICh0dyAhPSBOVUxMKSB7CiAJCS8qIFNpbGx5LiBTaG91bGQgaGFzaC1kYW5jZSBpbnN0ZWFkLi4uICovCiAJCWluZXRfdHdza19kZXNjaGVkdWxlKHR3LCBkZWF0aF9yb3cpOwotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9USU1FV0FJVFJFQ1lDTEVEKTsKKwkJTkVUX0lOQ19TVEFUU19CSCh0d3NrX25ldCh0dyksIExJTlVYX01JQl9USU1FV0FJVFJFQ1lDTEVEKTsKIAogCQlpbmV0X3R3c2tfcHV0KHR3KTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggMWVlNGZhMS4uMDhlYTJkZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCisrKyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtNSw4ICs1LDYgQEAKICAqCUF1dGhvcnM6CiAgKglQZWRybyBSb3F1ZQkJPHJvcXVlQGRpLmZjLnVsLnB0PgogICoKLSAqCSRJZDogaXA2X2ZpYi5jLHYgMS4yNSAyMDAxLzEwLzMxIDIxOjU1OjU1IGRhdmVtIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTY2MywxNyArNjYxLDE3IEBACiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgZmliNl9zdGFydF9nYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7Ci0JaWYgKG5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyLT5leHBpcmVzID09IDAgJiYKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJm5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyKSAmJgogCSAgICAocnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0VYUElSRVN8UlRGX0NBQ0hFKSkpCi0JCW1vZF90aW1lcihuZXQtPmlwdjYuaXA2X2ZpYl90aW1lciwgamlmZmllcyArCi0JCQkgIG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKTsKKwkJbW9kX3RpbWVyKCZuZXQtPmlwdjYuaXA2X2ZpYl90aW1lciwKKwkJCSAgamlmZmllcyArIG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKTsKIH0KIAogdm9pZCBmaWI2X2ZvcmNlX3N0YXJ0X2djKHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpZiAobmV0LT5pcHY2LmlwNl9maWJfdGltZXItPmV4cGlyZXMgPT0gMCkKLQkJbW9kX3RpbWVyKG5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyLCBqaWZmaWVzICsKLQkJCSAgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWwpOworCWlmICghdGltZXJfcGVuZGluZygmbmV0LT5pcHY2LmlwNl9maWJfdGltZXIpKQorCQltb2RfdGltZXIoJm5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyLAorCQkJICBqaWZmaWVzICsgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWwpOwogfQogCiAvKgpAQCAtMTQ0OSwyNyArMTQ0NywyMyBAQAogCQlnY19hcmdzLnRpbWVvdXQgPSBleHBpcmVzID8gKGludClleHBpcmVzIDoKIAkJCW5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsOwogCX0gZWxzZSB7Ci0JCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkJaWYgKCFzcGluX3RyeWxvY2soJmZpYjZfZ2NfbG9jaykpIHsKLQkJCW1vZF90aW1lcihuZXQtPmlwdjYuaXA2X2ZpYl90aW1lciwgamlmZmllcyArIEhaKTsKLQkJCWxvY2FsX2JoX2VuYWJsZSgpOworCQlpZiAoIXNwaW5fdHJ5bG9ja19iaCgmZmliNl9nY19sb2NrKSkgeworCQkJbW9kX3RpbWVyKCZuZXQtPmlwdjYuaXA2X2ZpYl90aW1lciwgamlmZmllcyArIEhaKTsKIAkJCXJldHVybjsKIAkJfQogCQlnY19hcmdzLnRpbWVvdXQgPSBuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19pbnRlcnZhbDsKIAl9Ci0JZ2NfYXJncy5tb3JlID0gMDsKIAotCWljbXA2X2RzdF9nYygmZ2NfYXJncy5tb3JlKTsKKwlnY19hcmdzLm1vcmUgPSBpY21wNl9kc3RfZ2MoKTsKIAogCWZpYjZfY2xlYW5fYWxsKG5ldCwgZmliNl9hZ2UsIDAsIE5VTEwpOwogCiAJaWYgKGdjX2FyZ3MubW9yZSkKLQkJbW9kX3RpbWVyKG5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyLCBqaWZmaWVzICsKLQkJCSAgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWwpOwotCWVsc2UgewotCQlkZWxfdGltZXIobmV0LT5pcHY2LmlwNl9maWJfdGltZXIpOwotCQluZXQtPmlwdjYuaXA2X2ZpYl90aW1lci0+ZXhwaXJlcyA9IDA7Ci0JfQorCQltb2RfdGltZXIoJm5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyLAorCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMKKwkJCQkJKyBuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19pbnRlcnZhbCkpOworCWVsc2UKKwkJZGVsX3RpbWVyKCZuZXQtPmlwdjYuaXA2X2ZpYl90aW1lcik7CiAJc3Bpbl91bmxvY2tfYmgoJmZpYjZfZ2NfbG9jayk7CiB9CiAKQEAgLTE0ODAsMjQgKzE0NzQsMTUgQEAKIAogc3RhdGljIGludCBmaWI2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcjsKLQotCXJldCA9IC1FTk9NRU07Ci0JdGltZXIgPSBremFsbG9jKHNpemVvZigqdGltZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRpbWVyKQotCQlnb3RvIG91dDsKLQotCXNldHVwX3RpbWVyKHRpbWVyLCBmaWI2X2djX3RpbWVyX2NiLCAodW5zaWduZWQgbG9uZyluZXQpOwotCW5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyID0gdGltZXI7CisJc2V0dXBfdGltZXIoJm5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyLCBmaWI2X2djX3RpbWVyX2NiLCAodW5zaWduZWQgbG9uZyluZXQpOwogCiAJbmV0LT5pcHY2LnJ0Nl9zdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXQtPmlwdjYucnQ2X3N0YXRzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXQtPmlwdjYucnQ2X3N0YXRzKQogCQlnb3RvIG91dF90aW1lcjsKIAotCW5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaCA9Ci0JCWt6YWxsb2Moc2l6ZW9mKCpuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2gpKkZJQl9UQUJMRV9IQVNIU1osCi0JCQlHRlBfS0VSTkVMKTsKKwluZXQtPmlwdjYuZmliX3RhYmxlX2hhc2ggPSBrY2FsbG9jKEZJQl9UQUJMRV9IQVNIU1osCisJCQkJCSAgIHNpemVvZigqbmV0LT5pcHY2LmZpYl90YWJsZV9oYXNoKSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2gpCiAJCWdvdG8gb3V0X3J0Nl9zdGF0czsKIApAQCAtMTUyMyw5ICsxNTA4LDcgQEAKICNlbmRpZgogCWZpYjZfdGFibGVzX2luaXQobmV0KTsKIAotCXJldCA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogI2lmZGVmIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUwogb3V0X2ZpYjZfbWFpbl90Ymw6CkBAIC0xNTM2LDE1ICsxNTE5LDE0IEBACiBvdXRfcnQ2X3N0YXRzOgogCWtmcmVlKG5ldC0+aXB2Ni5ydDZfc3RhdHMpOwogb3V0X3RpbWVyOgotCWtmcmVlKHRpbWVyKTsKLQlnb3RvIG91dDsKKwlyZXR1cm4gLUVOT01FTTsKICB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCXJ0Nl9pZmRvd24obmV0LCBOVUxMKTsKLQlkZWxfdGltZXJfc3luYyhuZXQtPmlwdjYuaXA2X2ZpYl90aW1lcik7Ci0Ja2ZyZWUobmV0LT5pcHY2LmlwNl9maWJfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZuZXQtPmlwdjYuaXA2X2ZpYl90aW1lcik7CisKICNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKIAlrZnJlZShuZXQtPmlwdjYuZmliNl9sb2NhbF90YmwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IDE3ZWI0OGIuLjdlMTRjY2MgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC02LDggKzYsNiBAQAogICoJUGVkcm8gUm9xdWUJCTxyb3F1ZUBkaS5mYy51bC5wdD4KICAqCUlhbiBQLiBNb3JyaXMJCTxJLlAuTW9ycmlzQHNvdG9uLmFjLnVrPgogICoKLSAqCSRJZDogaXA2X2lucHV0LmMsdiAxLjE5IDIwMDAvMTIvMTMgMTg6MzE6NTAgZGF2ZW0gRXhwICQKLSAqCiAgKglCYXNlZCBpbiBsaW51eC9uZXQvaXB2NC9pcF9pbnB1dC5jCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzMsNyArNzEsOCBAQAogCiAJSVA2X0lOQ19TVEFUU19CSChpZGV2LCBJUFNUQVRTX01JQl9JTlJFQ0VJVkVTKTsKIAotCWlmICgoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKKwlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSA9PSBOVUxMIHx8CisJICAgICFpZGV2IHx8IHVubGlrZWx5KGlkZXYtPmNuZi5kaXNhYmxlX2lwdjYpKSB7CiAJCUlQNl9JTkNfU1RBVFNfQkgoaWRldiwgSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlnb3RvIG91dDsKQEAgLTI1MCw3ICsyNDksNyBAQAogCS8qCiAJICogICAgICBJUHY2IG11bHRpY2FzdCByb3V0ZXIgbW9kZSBpcyBub3cgc3VwcG9ydGVkIDspCiAJICovCi0JaWYgKGlwdjZfZGV2Y29uZi5tY19mb3J3YXJkaW5nICYmCisJaWYgKGRldl9uZXQoc2tiLT5kZXYpLT5pcHY2LmRldmNvbmZfYWxsLT5tY19mb3J3YXJkaW5nICYmCiAJICAgIGxpa2VseSghKElQNkNCKHNrYiktPmZsYWdzICYgSVA2U0tCX0ZPUldBUkRFRCkpKSB7CiAJCS8qCiAJCSAqIE9rYXksIHdlIHRyeSB0byBmb3J3YXJkIC0gc3BsaXQgYW5kIGR1cGxpY2F0ZQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDQ4Y2RjZTkuLjY0MDdjNjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTUsOCArNSw2IEBACiAgKglBdXRob3JzOgogICoJUGVkcm8gUm9xdWUJCTxyb3F1ZUBkaS5mYy51bC5wdD4KICAqCi0gKgkkSWQ6IGlwNl9vdXRwdXQuYyx2IDEuMzQgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAotICoKICAqCUJhc2VkIG9uIGxpbnV4L25ldC9pcHY0L2lwX291dHB1dC5jCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTc1LDYgKzE3MywxMyBAQAogCiBpbnQgaXA2X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpcDZfZHN0X2lkZXYoc2tiLT5kc3QpOworCWlmICh1bmxpa2VseShpZGV2LT5jbmYuZGlzYWJsZV9pcHY2KSkgeworCQlJUDZfSU5DX1NUQVRTKGlkZXYsIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKwogCWlmICgoc2tiLT5sZW4gPiBpcDZfc2tiX2RzdF9tdHUoc2tiKSAmJiAhc2tiX2lzX2dzbyhza2IpKSB8fAogCQkJCWRzdF9hbGxmcmFnKHNrYi0+ZHN0KSkKIAkJcmV0dXJuIGlwNl9mcmFnbWVudChza2IsIGlwNl9vdXRwdXQyKTsKQEAgLTQwNiw5ICs0MTEsMTIgQEAKIAlzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkc3QtPmRldik7CiAKLQlpZiAoaXB2Nl9kZXZjb25mLmZvcndhcmRpbmcgPT0gMCkKKwlpZiAobmV0LT5pcHY2LmRldmNvbmZfYWxsLT5mb3J3YXJkaW5nID09IDApCiAJCWdvdG8gZXJyb3I7CiAKKwlpZiAoc2tiX3dhcm5faWZfbHJvKHNrYikpCisJCWdvdG8gZHJvcDsKKwogCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0ZXRCwgc2tiKSkgewogCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldihkc3QpLCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTsKIAkJZ290byBkcm9wOwpAQCAtNDUwLDcgKzQ1OCw3IEBACiAJfQogCiAJLyogWFhYOiBpZGV2LT5jbmYucHJveHlfbmRwPyAqLwotCWlmIChpcHY2X2RldmNvbmYucHJveHlfbmRwICYmCisJaWYgKG5ldC0+aXB2Ni5kZXZjb25mX2FsbC0+cHJveHlfbmRwICYmCiAJICAgIHBuZWlnaF9sb29rdXAoJm5kX3RibCwgbmV0LCAmaGRyLT5kYWRkciwgc2tiLT5kZXYsIDApKSB7CiAJCWludCBwcm94aWVkID0gaXA2X2ZvcndhcmRfcHJveHlfY2hlY2soc2tiKTsKIAkJaWYgKHByb3hpZWQgPiAwKQpAQCAtNDk3LDcgKzUwNSw4IEBACiAJCWludCBhZGRydHlwZSA9IGlwdjZfYWRkcl90eXBlKCZoZHItPnNhZGRyKTsKIAogCQkvKiBUaGlzIGNoZWNrIGlzIHNlY3VyaXR5IGNyaXRpY2FsLiAqLwotCQlpZiAoYWRkcnR5cGUgJiAoSVBWNl9BRERSX01VTFRJQ0FTVHxJUFY2X0FERFJfTE9PUEJBQ0spKQorCQlpZiAoYWRkcnR5cGUgPT0gSVBWNl9BRERSX0FOWSB8fAorCQkgICAgYWRkcnR5cGUgJiAoSVBWNl9BRERSX01VTFRJQ0FTVCB8IElQVjZfQUREUl9MT09QQkFDSykpCiAJCQlnb3RvIGVycm9yOwogCQlpZiAoYWRkcnR5cGUgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSB7CiAJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggMmJkYTNiYS4uMTdjN2IwOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtNiw4ICs2LDYgQEAKICAqCVZpbGxlIE51b3J2YWxhCQk8dm51b3J2YWxAdGNzLmh1dC5maT4KICAqCVlhc3V5dWtpIEtvemFrYWkJPGtvemFrYWlAbGludXgtaXB2Ni5vcmc+CiAgKgotICoJJElkJAotICoKICAqICAgICAgQmFzZWQgb246CiAgKiAgICAgIGxpbnV4L25ldC9pcHY2L3NpdC5jIGFuZCBsaW51eC9uZXQvaXB2NC9pcGlwLmMKICAqCkBAIC03MTEsNyArNzA5LDcgQEAKIAkJfQogCiAJCWlmICghaXA2X3RubF9yY3ZfY3RsKHQpKSB7Ci0JCQl0LT5zdGF0LnJ4X2Ryb3BwZWQrKzsKKwkJCXQtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJcmVhZF91bmxvY2soJmlwNl90bmxfbG9jayk7CiAJCQlnb3RvIGRpc2NhcmQ7CiAJCX0KQEAgLTcyOCw4ICs3MjYsOCBAQAogCiAJCWRzY3BfZWNuX2RlY2Fwc3VsYXRlKHQsIGlwdjZoLCBza2IpOwogCi0JCXQtPnN0YXQucnhfcGFja2V0cysrOwotCQl0LT5zdGF0LnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQl0LT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJdC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKIAkJcmVhZF91bmxvY2soJmlwNl90bmxfbG9jayk7CiAJCXJldHVybiAwOwpAQCAtODQ5LDcgKzg0Nyw3IEBACiAJCQkgX191MzIgKnBtdHUpCiB7CiAJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0LT5zdGF0OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0LT5kZXYtPnN0YXRzOwogCXN0cnVjdCBpcHY2aGRyICppcHY2aCA9IGlwdjZfaGRyKHNrYik7CiAJc3RydWN0IGlwdjZfdGVsX3R4b3B0aW9uIG9wdDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CkBAIC0xMDQzLDExICsxMDQxLDExIEBACiBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnQtPnN0YXQ7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnQtPmRldi0+c3RhdHM7CiAJaW50IHJldDsKIAogCWlmICh0LT5yZWN1cnNpb24rKykgewotCQl0LT5zdGF0LmNvbGxpc2lvbnMrKzsKKwkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKIAkJZ290byB0eF9lcnI7CiAJfQogCkBAIC0xMjg5LDE5ICsxMjg3LDYgQEAKIH0KIAogLyoqCi0gKiBpcDZfdG5sX2dldF9zdGF0cyAtIHJldHVybiB0aGUgc3RhdHMgZm9yIHR1bm5lbCBkZXZpY2UKLSAqICAgQGRldjogdmlydHVhbCBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHR1bm5lbAotICoKLSAqIFJldHVybjogc3RhdHMgZm9yIGRldmljZQotICoqLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotaXA2X3RubF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJigoKHN0cnVjdCBpcDZfdG5sICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXQpOwotfQotCi0vKioKICAqIGlwNl90bmxfY2hhbmdlX210dSAtIGNoYW5nZSBtdHUgbWFudWFsbHkgZm9yIHR1bm5lbCBkZXZpY2UKICAqICAgQGRldjogdmlydHVhbCBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHR1bm5lbAogICogICBAbmV3X210dTogdGhlIG5ldyBtdHUKQEAgLTEzMzQsNyArMTMxOSw2IEBACiAJZGV2LT51bmluaXQgPSBpcDZfdG5sX2Rldl91bmluaXQ7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpcDZfdG5sX3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSBpcDZfdG5sX2dldF9zdGF0czsKIAlkZXYtPmRvX2lvY3RsID0gaXA2X3RubF9pb2N0bDsKIAlkZXYtPmNoYW5nZV9tdHUgPSBpcDZfdG5sX2NoYW5nZV9tdHU7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDE0Nzk2MTguLjA5NWJjNDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKKysrIGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtMzg4LDggKzM4OCw4IEBACiAJc2tiLT5pcF9zdW1tZWQgPSAwOwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAlkc3RfcmVsZWFzZShza2ItPmRzdCk7Ci0JKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKW5ldGRldl9wcml2KHJlZ19kZXYpKS0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKW5ldGRldl9wcml2KHJlZ19kZXYpKS0+cnhfcGFja2V0cysrOworCXJlZ19kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXJlZ19kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlza2ItPmRzdCA9IE5VTEw7CiAJbmZfcmVzZXQoc2tiKTsKIAluZXRpZl9yeChza2IpOwpAQCAtNDA5LDI2ICs0MDksMjAgQEAKIHN0YXRpYyBpbnQgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKW5ldGRldl9wcml2KGRldikpLT50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopbmV0ZGV2X3ByaXYoZGV2KSktPnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWlwNm1yX2NhY2hlX3JlcG9ydChza2IsIHJlZ192aWZfbnVtLCBNUlQ2TVNHX1dIT0xFUEtUKTsKIAlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJlZ192aWZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKW5ldGRldl9wcml2KGRldik7Ci19Ci0KIHN0YXRpYyB2b2lkIHJlZ192aWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX1BJTVJFRzsKIAlkZXYtPm10dQkJPSAxNTAwIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAtIDg7CiAJZGV2LT5mbGFncwkJPSBJRkZfTk9BUlA7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSByZWdfdmlmX3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gcmVnX3ZpZl9nZXRfc3RhdHM7CiAJZGV2LT5kZXN0cnVjdG9yCQk9IGZyZWVfbmV0ZGV2OwogfQogCkBAIC00MzYsOSArNDMwLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyksICJwaW02cmVnIiwKLQkJCSAgIHJlZ192aWZfc2V0dXApOwotCisJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsICJwaW02cmVnIiwgcmVnX3ZpZl9zZXR1cCk7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNDUxLDYgKzQ0Myw3IEBACiAJaWYgKGRldl9vcGVuKGRldikpCiAJCWdvdG8gZmFpbHVyZTsKIAorCWRldl9ob2xkKGRldik7CiAJcmV0dXJuIGRldjsKIAogZmFpbHVyZToKQEAgLTYwMyw2ICs1OTYsNyBAQAogCWludCB2aWZpID0gdmlmYy0+bWlmNmNfbWlmaTsKIAlzdHJ1Y3QgbWlmX2RldmljZSAqdiA9ICZ2aWY2X3RhYmxlW3ZpZmldOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGVycjsKIAogCS8qIElzIHZpZiBidXN5ID8gKi8KIAlpZiAoTUlGX0VYSVNUUyh2aWZpKSkKQEAgLTYyMCwyMCArNjE0LDI4IEBACiAJCWRldiA9IGlwNm1yX3JlZ192aWYoKTsKIAkJaWYgKCFkZXYpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CisJCWVyciA9IGRldl9zZXRfYWxsbXVsdGkoZGV2LCAxKTsKKwkJaWYgKGVycikgeworCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKKwkJCWRldl9wdXQoZGV2KTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAkJYnJlYWs7CiAjZW5kaWYKIAljYXNlIDA6CiAJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCB2aWZjLT5taWY2Y19waWZpKTsKIAkJaWYgKCFkZXYpCiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Ci0JCWRldl9wdXQoZGV2KTsKKwkJZXJyID0gZGV2X3NldF9hbGxtdWx0aShkZXYsIDEpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfcHV0KGRldik7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRldl9zZXRfYWxsbXVsdGkoZGV2LCAxKTsKLQogCS8qCiAJICoJRmlsbCBpbiB0aGUgVklGIHN0cnVjdHVyZXMKIAkgKi8KQEAgLTY1Miw3ICs2NTQsNiBAQAogCiAJLyogQW5kIGZpbmlzaCB1cGRhdGUgd3JpdGluZyBjcml0aWNhbCBkYXRhICovCiAJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwotCWRldl9ob2xkKGRldik7CiAJdi0+ZGV2ID0gZGV2OwogI2lmZGVmIENPTkZJR19JUFY2X1BJTVNNX1YyCiAJaWYgKHYtPmZsYWdzICYgTUlGRl9SRUdJU1RFUikKQEAgLTkzNCw3ICs5MzUsNyBAQAogCXN0cnVjdCBtaWZfZGV2aWNlICp2OwogCWludCBjdDsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGV2ZW50ICE9IE5FVERFVl9VTlJFR0lTVEVSKQpAQCAtOTU2LDIzICs5NTcsNTEgQEAKICAqCVNldHVwIGZvciBJUCBtdWx0aWNhc3Qgcm91dGluZwogICovCiAKLXZvaWQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpCitpbnQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpCiB7CisJaW50IGVycjsKKwogCW1ydF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaXA2X21ydF9jYWNoZSIsCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWZjNl9jYWNoZSksCiAJCQkJICAgICAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwKIAkJCQkgICAgICAgTlVMTCk7CiAJaWYgKCFtcnRfY2FjaGVwKQotCQlwYW5pYygiY2Fubm90IGFsbG9jYXRlIGlwNl9tcnRfY2FjaGUiKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzZXR1cF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIsIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIDApOwotCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXA2X21yX25vdGlmaWVyKTsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwNl9tcl9ub3RpZmllcik7CisJaWYgKGVycikKKwkJZ290byByZWdfbm90aWZfZmFpbDsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwNl9tcl92aWYiLCAwLCAmaXA2bXJfdmlmX2ZvcHMpOwotCXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwNl9tcl9jYWNoZSIsIDAsICZpcDZtcl9tZmNfZm9wcyk7CisJZXJyID0gLUVOT01FTTsKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwNl9tcl92aWYiLCAwLCAmaXA2bXJfdmlmX2ZvcHMpKQorCQlnb3RvIHByb2NfdmlmX2ZhaWw7CisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJpcDZfbXJfY2FjaGUiLAorCQkJCSAgICAgMCwgJmlwNm1yX21mY19mb3BzKSkKKwkJZ290byBwcm9jX2NhY2hlX2ZhaWw7CiAjZW5kaWYKKwlyZXR1cm4gMDsKK3JlZ19ub3RpZl9mYWlsOgorCWttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworcHJvY192aWZfZmFpbDoKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXA2X21yX25vdGlmaWVyKTsKK3Byb2NfY2FjaGVfZmFpbDoKKwlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCAiaXA2X21yX3ZpZiIpOworI2VuZGlmCisJcmV0dXJuIGVycjsKIH0KIAordm9pZCBpcDZfbXJfY2xlYW51cCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgImlwNl9tcl9jYWNoZSIpOworCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJpcDZfbXJfdmlmIik7CisjZW5kaWYKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXA2X21yX25vdGlmaWVyKTsKKwlkZWxfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7Cit9CiAKIHN0YXRpYyBpbnQgaXA2bXJfbWZjX2FkZChzdHJ1Y3QgbWY2Y2N0bCAqbWZjLCBpbnQgbXJ0c29jaykKIHsKQEAgLTEyNDgsNyArMTI3Nyw3IEBACiAKICNlbmRpZgogCS8qCi0JICoJU3B1cmlvdXMgY29tbWFuZCwgb3IgTVJUX1ZFUlNJT04gd2hpY2ggeW91IGNhbm5vdAorCSAqCVNwdXJpb3VzIGNvbW1hbmQsIG9yIE1SVDZfVkVSU0lPTiB3aGljaCB5b3UgY2Fubm90CiAJICoJc2V0LgogCSAqLwogCWRlZmF1bHQ6CkBAIC0xMzc3LDggKzE0MDYsOCBAQAogCWlmICh2aWYtPmZsYWdzICYgTUlGRl9SRUdJU1RFUikgewogCQl2aWYtPnBrdF9vdXQrKzsKIAkJdmlmLT5ieXRlc19vdXQgKz0gc2tiLT5sZW47Ci0JCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiluZXRkZXZfcHJpdih2aWYtPmRldikpLT50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKW5ldGRldl9wcml2KHZpZi0+ZGV2KSktPnR4X3BhY2tldHMrKzsKKwkJdmlmLT5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQl2aWYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQlpcDZtcl9jYWNoZV9yZXBvcnQoc2tiLCB2aWZpLCBNUlQ2TVNHX1dIT0xFUEtUKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IDg2ZTI4YTcuLmVhMzNiMjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYworKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTcsOCArNyw2IEBACiAgKgogICoJQmFzZWQgb24gbGludXgvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwogICoKLSAqCSRJZDogaXB2Nl9zb2NrZ2x1ZS5jLHYgMS40MSAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTYxLDcgKzU5LDcgQEAKIHN0cnVjdCBpcDZfcmFfY2hhaW4gKmlwNl9yYV9jaGFpbjsKIERFRklORV9SV0xPQ0soaXA2X3JhX2xvY2spOwogCi1pbnQgaXA2X3JhX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBpbnQgc2VsLCB2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNvY2sgKikpCitpbnQgaXA2X3JhX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBpbnQgc2VsKQogewogCXN0cnVjdCBpcDZfcmFfY2hhaW4gKnJhLCAqbmV3X3JhLCAqKnJhcDsKIApAQCAtODMsOCArODEsNiBAQAogCQkJKnJhcCA9IHJhLT5uZXh0OwogCQkJd3JpdGVfdW5sb2NrX2JoKCZpcDZfcmFfbG9jayk7CiAKLQkJCWlmIChyYS0+ZGVzdHJ1Y3RvcikKLQkJCQlyYS0+ZGVzdHJ1Y3Rvcihzayk7CiAJCQlzb2NrX3B1dChzayk7CiAJCQlrZnJlZShyYSk7CiAJCQlyZXR1cm4gMDsKQEAgLTk2LDcgKzkyLDYgQEAKIAl9CiAJbmV3X3JhLT5zayA9IHNrOwogCW5ld19yYS0+c2VsID0gc2VsOwotCW5ld19yYS0+ZGVzdHJ1Y3RvciA9IGRlc3RydWN0b3I7CiAJbmV3X3JhLT5uZXh0ID0gcmE7CiAJKnJhcCA9IG5ld19yYTsKIAlzb2NrX2hvbGQoc2spOwpAQCAtNjM0LDcgKzYyOSw3IEBACiAJY2FzZSBJUFY2X1JPVVRFUl9BTEVSVDoKIAkJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQogCQkJZ290byBlX2ludmFsOwotCQlyZXR2ID0gaXA2X3JhX2NvbnRyb2woc2ssIHZhbCwgTlVMTCk7CisJCXJldHYgPSBpcDZfcmFfY29udHJvbChzaywgdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBJUFY2X01UVV9ESVNDT1ZFUjoKIAkJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQpAQCAtMTA0Myw3ICsxMDM4LDcgQEAKIAkJCWRzdF9yZWxlYXNlKGRzdCk7CiAJCX0KIAkJaWYgKHZhbCA8IDApCi0JCQl2YWwgPSBpcHY2X2RldmNvbmYuaG9wX2xpbWl0OworCQkJdmFsID0gc29ja19uZXQoc2spLT5pcHY2LmRldmNvbmZfYWxsLT5ob3BfbGltaXQ7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggZmQ2MzJkZC4uZTdjMDNiYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWNhc3QuYworKysgYi9uZXQvaXB2Ni9tY2FzdC5jCkBAIC01LDggKzUsNiBAQAogICoJQXV0aG9yczoKICAqCVBlZHJvIFJvcXVlCQk8cm9xdWVAZGkuZmMudWwucHQ+CiAgKgotICoJJElkOiBtY2FzdC5jLHYgMS40MCAyMDAyLzAyLzA4IDAzOjU3OjE5IGRhdmVtIEV4cCAkCi0gKgogICoJQmFzZWQgb24gbGludXgvaXB2NC9pZ21wLmMgYW5kIGxpbnV4L2lwdjQvaXBfc29ja2dsdWUuYwogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE1Myw3ICsxNTEsNyBAQAogI2RlZmluZSBJR01QNl9VTlNPTElDSVRFRF9JVkFMCSgxMCpIWikKICNkZWZpbmUgTUxEX1FSVl9ERUZBVUxUCQkyCiAKLSNkZWZpbmUgTUxEX1YxX1NFRU4oaWRldikgKGlwdjZfZGV2Y29uZi5mb3JjZV9tbGRfdmVyc2lvbiA9PSAxIHx8IFwKKyNkZWZpbmUgTUxEX1YxX1NFRU4oaWRldikgKGRldl9uZXQoKGlkZXYpLT5kZXYpLT5pcHY2LmRldmNvbmZfYWxsLT5mb3JjZV9tbGRfdmVyc2lvbiA9PSAxIHx8IFwKIAkJKGlkZXYpLT5jbmYuZm9yY2VfbWxkX3ZlcnNpb24gPT0gMSB8fCBcCiAJCSgoaWRldiktPm1jX3YxX3NlZW4gJiYgXAogCQl0aW1lX2JlZm9yZShqaWZmaWVzLCAoaWRldiktPm1jX3YxX3NlZW4pKSkKQEAgLTE2NCw3ICsxNjIsNiBAQAogCSgoTUxEVjJfTUFTSyh2YWx1ZSwgbmJtYW50KSB8ICgxPDwobmJtYW50KSkpIDw8IFwKIAkoTUxEVjJfTUFTSygodmFsdWUpID4+IChuYm1hbnQpLCBuYmV4cCkgKyAobmJleHApKSkpCiAKLSNkZWZpbmUgTUxEVjJfUVFJQyh2YWx1ZSkgTUxEVjJfRVhQKDB4ODAsIDQsIDMsIHZhbHVlKQogI2RlZmluZSBNTERWMl9NUkModmFsdWUpIE1MRFYyX0VYUCgweDgwMDAsIDEyLCAzLCB2YWx1ZSkKIAogI2RlZmluZSBJUFY2X01MRF9NQVhfTVNGCTY0CkBAIC0zNzAsMTAgKzM2Nyw2IEBACiAJaW50IHBtY2xvY2tlZCA9IDA7CiAJaW50IGVycjsKIAotCWlmIChwZ3NyLT5nc3JfZ3JvdXAuc3NfZmFtaWx5ICE9IEFGX0lORVQ2IHx8Ci0JICAgIHBnc3ItPmdzcl9zb3VyY2Uuc3NfZmFtaWx5ICE9IEFGX0lORVQ2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCXNvdXJjZSA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcGdzci0+Z3NyX3NvdXJjZSktPnNpbjZfYWRkcjsKIAlncm91cCA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcGdzci0+Z3NyX2dyb3VwKS0+c2luNl9hZGRyOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCAyODJmZGIzLi5iZWI0OGUzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCisrKyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTc4NCwxNSArNzg0LDE3IEBACiAKIAkJaWRldiA9IGlmcC0+aWRldjsKIAl9IGVsc2UgeworCQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisKIAkJaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CiAJCWlmICghaWRldikgewogCQkJLyogWFhYOiBjb3VudCB0aGlzIGRyb3A/ICovCiAJCQlyZXR1cm47CiAJCX0KIAotCQlpZiAoaXB2Nl9jaGtfYWNhc3RfYWRkcihkZXZfbmV0KGRldiksIGRldiwgJm1zZy0+dGFyZ2V0KSB8fAorCQlpZiAoaXB2Nl9jaGtfYWNhc3RfYWRkcihuZXQsIGRldiwgJm1zZy0+dGFyZ2V0KSB8fAogCQkgICAgKGlkZXYtPmNuZi5mb3J3YXJkaW5nICYmCi0JCSAgICAgKGlwdjZfZGV2Y29uZi5wcm94eV9uZHAgfHwgaWRldi0+Y25mLnByb3h5X25kcCkgJiYKKwkJICAgICAobmV0LT5pcHY2LmRldmNvbmZfYWxsLT5wcm94eV9uZHAgfHwgaWRldi0+Y25mLnByb3h5X25kcCkgJiYKIAkJICAgICAoaXNfcm91dGVyID0gcG5kaXNjX2lzX3JvdXRlcigmbXNnLT50YXJnZXQsIGRldikpID49IDApKSB7CiAJCQlpZiAoIShORUlHSF9DQihza2IpLT5mbGFncyAmIExPQ0FMTFlfRU5RVUVVRUQpICYmCiAJCQkgICAgc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfSE9TVCAmJgpAQCAtOTIxLDYgKzkyMyw3IEBACiAKIAlpZiAobmVpZ2gpIHsKIAkJdTggb2xkX2ZsYWdzID0gbmVpZ2gtPmZsYWdzOworCQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAKIAkJaWYgKG5laWdoLT5udWRfc3RhdGUgJiBOVURfRkFJTEVEKQogCQkJZ290byBvdXQ7CkBAIC05MzEsOCArOTM0LDggQEAKIAkJICogaGFzIGFscmVhZHkgc2VudCBhIE5BIHRvIHVzLgogCQkgKi8KIAkJaWYgKGxsYWRkciAmJiAhbWVtY21wKGxsYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbikgJiYKLQkJICAgIGlwdjZfZGV2Y29uZi5mb3J3YXJkaW5nICYmIGlwdjZfZGV2Y29uZi5wcm94eV9uZHAgJiYKLQkJICAgIHBuZWlnaF9sb29rdXAoJm5kX3RibCwgZGV2X25ldChkZXYpLCAmbXNnLT50YXJnZXQsIGRldiwgMCkpIHsKKwkJICAgIG5ldC0+aXB2Ni5kZXZjb25mX2FsbC0+Zm9yd2FyZGluZyAmJiBuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPnByb3h5X25kcCAmJgorCQkgICAgcG5laWdoX2xvb2t1cCgmbmRfdGJsLCBuZXQsICZtc2ctPnRhcmdldCwgZGV2LCAwKSkgewogCQkJLyogWFhYOiBpZGV2LT5jbmYucHJpeHlfbmRwICovCiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA2Y2FlNTQ3Li42ODlkZWM4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMjA4LDUgKzIwOCwxNyBAQAogCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQ+LiAgSWYgdW5zdXJlLCBzYXkgYE4nLgogCisjIHNlY3VyaXR5IHRhYmxlIGZvciBNQUMgcG9saWN5Citjb25maWcgSVA2X05GX1NFQ1VSSVRZCisgICAgICAgdHJpc3RhdGUgIlNlY3VyaXR5IHRhYmxlIgorICAgICAgIGRlcGVuZHMgb24gSVA2X05GX0lQVEFCTEVTCisgICAgICAgZGVwZW5kcyBvbiBTRUNVUklUWQorICAgICAgIGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9bgorICAgICAgIGhlbHAKKyAgICAgICAgIFRoaXMgb3B0aW9uIGFkZHMgYSBgc2VjdXJpdHknIHRhYmxlIHRvIGlwdGFibGVzLCBmb3IgdXNlCisgICAgICAgICB3aXRoIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCAoTUFDKSBwb2xpY3kuCisgICAgICAgIAorICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KKwogZW5kbWVudQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggZmJmMmMxNC4uM2YxN2M5NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtOCw2ICs4LDcgQEAKIG9iai0kKENPTkZJR19JUDZfTkZfTUFOR0xFKSArPSBpcDZ0YWJsZV9tYW5nbGUubwogb2JqLSQoQ09ORklHX0lQNl9ORl9RVUVVRSkgKz0gaXA2X3F1ZXVlLm8KIG9iai0kKENPTkZJR19JUDZfTkZfUkFXKSArPSBpcDZ0YWJsZV9yYXcubworb2JqLSQoQ09ORklHX0lQNl9ORl9TRUNVUklUWSkgKz0gaXA2dGFibGVfc2VjdXJpdHkubwogCiAjIG9iamVjdHMgZm9yIGwzIGluZGVwZW5kZW50IGNvbm50cmFjawogbmZfY29ubnRyYWNrX2lwdjYtb2JqcyAgOj0gIG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYubyBuZl9jb25udHJhY2tfcHJvdG9faWNtcHY2Lm8gbmZfY29ubnRyYWNrX3JlYXNtLm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwppbmRleCAyZWZmM2FlLi41ODU5YzA0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCkBAIC0xNTksNyArMTU5LDYgQEAKIAljYXNlIElQUV9DT1BZX01FVEE6CiAJY2FzZSBJUFFfQ09QWV9OT05FOgogCQlzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKCpwbXNnKSk7Ci0JCWRhdGFfbGVuID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIElQUV9DT1BZX1BBQ0tFVDoKQEAgLTIyNiw4ICsyMjUsNiBAQAogCXJldHVybiBza2I7CiAKIG5sbXNnX2ZhaWx1cmU6Ci0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CiAJKmVycnAgPSAtRUlOVkFMOwogCXByaW50ayhLRVJOX0VSUiAiaXA2X3F1ZXVlOiBlcnJvciBjcmVhdGluZyBwYWNrZXQgbWVzc2FnZVxuIik7CiAJcmV0dXJuIE5VTEw7CkBAIC00ODMsNyArNDgwLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAkvKiBEcm9wIGFueSBwYWNrZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZG93bmVkIGRldmljZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCmluZGV4IGY5NzllNDguLjU1YTJjMjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKQEAgLTYxLDEzICs2MSwyNSBAQAogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1pcDZ0X2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JIHN0cnVjdCBza19idWZmICpza2IsCi0JIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCitpcDZ0X2xvY2FsX2luX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCisJCSAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LCBpbml0X25ldC5pcHY2LmlwNnRhYmxlX2ZpbHRlcik7CisJcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgICBuZl9sb2NhbF9pbl9uZXQoaW4sIG91dCktPmlwdjYuaXA2dGFibGVfZmlsdGVyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraXA2dF9mb3J3YXJkX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCisJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCisJCQkgICAgIG5mX2ZvcndhcmRfbmV0KGluLCBvdXQpLT5pcHY2LmlwNnRhYmxlX2ZpbHRlcik7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKQEAgLTg3LDE5ICs5OSwyMCBAQAogCX0KICNlbmRpZgogCi0JcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LCBpbml0X25ldC5pcHY2LmlwNnRhYmxlX2ZpbHRlcik7CisJcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgICBuZl9sb2NhbF9vdXRfbmV0KGluLCBvdXQpLT5pcHY2LmlwNnRhYmxlX2ZpbHRlcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXA2dF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewogCXsKLQkJLmhvb2sJCT0gaXA2dF9ob29rLAorCQkuaG9vawkJPSBpcDZ0X2xvY2FsX2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQ2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfRklMVEVSLAogCX0sCiAJewotCQkuaG9vawkJPSBpcDZ0X2hvb2ssCisJCS5ob29rCQk9IGlwNnRfZm9yd2FyZF9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBQRl9JTkVUNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwN2FiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYwpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqICJzZWN1cml0eSIgdGFibGUgZm9yIElQdjYKKyAqCisgKiBUaGlzIGlzIGZvciB1c2UgYnkgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIChNQUMpIHNlY3VyaXR5IG1vZGVscywKKyAqIHdoaWNoIG5lZWQgdG8gYmUgYWJsZSB0byBtYW5hZ2Ugc2VjdXJpdHkgcG9saWN5IGluIHNlcGFyYXRlIGNvbnRleHQKKyAqIHRvIERBQy4KKyAqCisgKiBCYXNlZCBvbiBpcHRhYmxlX21hbmdsZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IFBhdWwgYFJ1c3R5JyBSdXNzZWxsICYgTWljaGFlbCBKLiBOZXVsaW5nCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbSA8YXQ+IG5ldGZpbHRlci5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiwgSmFtZXMgTW9ycmlzIDxqbW9ycmlzIDxhdD4gcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYW1lcyBNb3JyaXMgPGptb3JyaXMgPGF0PiByZWRoYXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJpcDZ0YWJsZXMgc2VjdXJpdHkgdGFibGUsIGZvciBNQUMgcnVsZXMiKTsKKworI2RlZmluZSBTRUNVUklUWV9WQUxJRF9IT09LUwkoMSA8PCBORl9JTkVUX0xPQ0FMX0lOKSB8IFwKKwkJCQkoMSA8PCBORl9JTkVUX0ZPUldBUkQpIHwgXAorCQkJCSgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKQorCitzdGF0aWMgc3RydWN0Cit7CisJc3RydWN0IGlwNnRfcmVwbGFjZSByZXBsOworCXN0cnVjdCBpcDZ0X3N0YW5kYXJkIGVudHJpZXNbM107CisJc3RydWN0IGlwNnRfZXJyb3IgdGVybTsKK30gaW5pdGlhbF90YWJsZSBfX2luaXRkYXRhID0geworCS5yZXBsID0geworCQkubmFtZSA9ICJzZWN1cml0eSIsCisJCS52YWxpZF9ob29rcyA9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAorCQkubnVtX2VudHJpZXMgPSA0LAorCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAzICsgc2l6ZW9mKHN0cnVjdCBpcDZ0X2Vycm9yKSwKKwkJLmhvb2tfZW50cnkgPSB7CisJCQlbTkZfSU5FVF9MT0NBTF9JTl0gCT0gMCwKKwkJCVtORl9JTkVUX0ZPUldBUkRdIAk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCisJCQlbTkZfSU5FVF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAyLAorCQl9LAorCQkudW5kZXJmbG93ID0geworCQkJW05GX0lORVRfTE9DQUxfSU5dIAk9IDAsCisJCQlbTkZfSU5FVF9GT1JXQVJEXSAJPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpLAorCQkJW05GX0lORVRfTE9DQUxfT1VUXSAJPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMiwKKwkJfSwKKwl9LAorCS5lbnRyaWVzID0geworCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KKwkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIEZPUldBUkQgKi8KKwkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIExPQ0FMX09VVCAqLworCX0sCisJLnRlcm0gPSBJUDZUX0VSUk9SX0lOSVQsCQkvKiBFUlJPUiAqLworfTsKKworc3RhdGljIHN0cnVjdCB4dF90YWJsZSBzZWN1cml0eV90YWJsZSA9IHsKKwkubmFtZQkJPSAic2VjdXJpdHkiLAorCS52YWxpZF9ob29rcwk9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAorCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChzZWN1cml0eV90YWJsZS5sb2NrKSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCisJLmFmCQk9IEFGX0lORVQ2LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludAoraXA2dF9sb2NhbF9pbl9ob29rKHVuc2lnbmVkIGludCBob29rLAorCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCXJldHVybiBpcDZ0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKKwkJCSAgICAgbmZfbG9jYWxfaW5fbmV0KGluLCBvdXQpLT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraXA2dF9mb3J3YXJkX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCisJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCisJCQkgICAgIG5mX2ZvcndhcmRfbmV0KGluLCBvdXQpLT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraXA2dF9sb2NhbF9vdXRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKKwkJICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJLyogVEJEOiBoYW5kbGUgc2hvcnQgcGFja2V0cyB2aWEgcmF3IHNvY2tldCAqLworCXJldHVybiBpcDZ0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKKwkJCSAgICAgbmZfbG9jYWxfb3V0X25ldChpbiwgb3V0KS0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXA2dF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0geworCXsKKwkJLmhvb2sJCT0gaXA2dF9sb2NhbF9pbl9ob29rLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX1NFQ1VSSVRZLAorCX0sCisJeworCQkuaG9vawkJPSBpcDZ0X2ZvcndhcmRfaG9vaywKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVDYsCisJCS5ob29rbnVtCT0gTkZfSU5FVF9GT1JXQVJELAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX1NFQ1VSSVRZLAorCX0sCisJeworCQkuaG9vawkJPSBpcDZ0X2xvY2FsX291dF9ob29rLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9TRUNVUklUWSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX25ldF9pbml0IGlwNnRhYmxlX3NlY3VyaXR5X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwluZXQtPmlwdjYuaXA2dGFibGVfc2VjdXJpdHkgPQorCQlpcDZ0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnNlY3VyaXR5X3RhYmxlLCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKworCWlmIChJU19FUlIobmV0LT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KSkKKwkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNnRhYmxlX3NlY3VyaXR5X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpcDZ0X3VucmVnaXN0ZXJfdGFibGUobmV0LT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcDZ0YWJsZV9zZWN1cml0eV9uZXRfb3BzID0geworCS5pbml0ID0gaXA2dGFibGVfc2VjdXJpdHlfbmV0X2luaXQsCisJLmV4aXQgPSBpcDZ0YWJsZV9zZWN1cml0eV9uZXRfZXhpdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlwNnRhYmxlX3NlY3VyaXR5X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA2dGFibGVfc2VjdXJpdHlfbmV0X29wcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfdGFibGU7CisKKwlyZXR1cm4gcmV0OworCitjbGVhbnVwX3RhYmxlOgorCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA2dGFibGVfc2VjdXJpdHlfbmV0X29wcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlwNnRhYmxlX3NlY3VyaXR5X2Zpbmkodm9pZCkKK3sKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwNnRfb3BzLCBBUlJBWV9TSVpFKGlwNnRfb3BzKSk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcDZ0YWJsZV9zZWN1cml0eV9uZXRfb3BzKTsKK30KKworbW9kdWxlX2luaXQoaXA2dGFibGVfc2VjdXJpdHlfaW5pdCk7Cittb2R1bGVfZXhpdChpcDZ0YWJsZV9zZWN1cml0eV9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IGVlNzEzYjAuLjE0ZDQ3ZDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtODksOSArODksOCBAQAogCSAgIG1lYW5zIHRoaXMgd2lsbCBvbmx5IHJ1biBvbmNlIGV2ZW4gaWYgY291bnQgaGl0cyB6ZXJvIHR3aWNlCiAJICAgKHRoZW9yZXRpY2FsbHkgcG9zc2libGUgd2l0aCBTTVApICovCiAJaWYgKENUSU5GTzJESVIoY3RpbmZvKSA9PSBJUF9DVF9ESVJfUkVQTFkpIHsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0LT5wcm90by5pY21wLmNvdW50KQotCQkgICAgJiYgZGVsX3RpbWVyKCZjdC0+dGltZW91dCkpCi0JCQljdC0+dGltZW91dC5mdW5jdGlvbigodW5zaWduZWQgbG9uZyljdCk7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjdC0+cHJvdG8uaWNtcC5jb3VudCkpCisJCQluZl9jdF9raWxsX2FjY3QoY3QsIGN0aW5mbywgc2tiKTsKIAl9IGVsc2UgewogCQlhdG9taWNfaW5jKCZjdC0+cHJvdG8uaWNtcC5jb3VudCk7CiAJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1BST1RPSU5GT19WT0xBVElMRSwgc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Byb2MuYyBiL25ldC9pcHY2L3Byb2MuYwppbmRleCBkZjA3MzZhLi5mODJmNjA3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9wcm9jLmMKKysrIGIvbmV0L2lwdjYvcHJvYy5jCkBAIC03LDggKzcsNiBAQAogICoJCVBST0MgZmlsZSBzeXN0ZW0uICBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgSVB2NCB2ZXJzaW9uLAogICoJCWV4Y2VwdCBpdCByZXBvcnRzIHRoZSBzb2NrZXRzIGluIHRoZSBJTkVUNiBhZGRyZXNzIGZhbWlseS4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IHByb2MuYyx2IDEuMTcgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CURhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqIAkJWU9TSElGVUpJIEhpZGVha2kgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgogICoKQEAgLTE4NSwzMiArMTgzLDcgQEAKIAogc3RhdGljIGludCBzb2Nrc3RhdDZfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbmV0ICpuZXQ7Ci0KLQllcnIgPSAtRU5YSU87Ci0JbmV0ID0gZ2V0X3Byb2NfbmV0KGlub2RlKTsKLQlpZiAobmV0ID09IE5VTEwpCi0JCWdvdG8gZXJyX25ldDsKLQotCWVyciA9IHNpbmdsZV9vcGVuKGZpbGUsIHNvY2tzdGF0Nl9zZXFfc2hvdywgbmV0KTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfb3BlbjsKLQotCXJldHVybiAwOwotCi1lcnJfb3BlbjoKLQlwdXRfbmV0KG5ldCk7Ci1lcnJfbmV0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc29ja3N0YXQ2X3NlcV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBuZXQgKm5ldCA9ICgoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhKS0+cHJpdmF0ZTsKLQotCXB1dF9uZXQobmV0KTsKLQlyZXR1cm4gc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbGUpOworCXJldHVybiBzaW5nbGVfb3Blbl9uZXQoaW5vZGUsIGZpbGUsIHNvY2tzdGF0Nl9zZXFfc2hvdyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNvY2tzdGF0Nl9zZXFfZm9wcyA9IHsKQEAgLTIxOCw3ICsxOTEsNyBAQAogCS5vcGVuCSA9IHNvY2tzdGF0Nl9zZXFfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKIAkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNvY2tzdGF0Nl9zZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlX25ldCwKIH07CiAKIHN0YXRpYyBpbnQgc25tcDZfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0yNDEsNyArMjE0LDcgQEAKIAlpZiAoIWlkZXYgfHwgIWlkZXYtPmRldikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZGV2X25ldChpZGV2LT5kZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGlkZXYtPmRldiksICZpbml0X25ldCkpCiAJCXJldHVybiAwOwogCiAJaWYgKCFwcm9jX25ldF9kZXZzbm1wNikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Byb3RvY29sLmMgYi9uZXQvaXB2Ni9wcm90b2NvbC5jCmluZGV4IGY5MjlmNDcuLjlhYjc4OTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Byb3RvY29sLmMKKysrIGIvbmV0L2lwdjYvcHJvdG9jb2wuYwpAQCAtNSw4ICs1LDYgQEAKICAqCiAgKgkJUEZfSU5FVDYgcHJvdG9jb2wgZGlzcGF0Y2ggdGFibGVzLgogICoKLSAqIFZlcnNpb246CSRJZDogcHJvdG9jb2wuYyx2IDEuMTAgMjAwMS8wNS8xOCAwMjoyNTo0OSBkYXZlbSBFeHAgJAotICoKICAqIEF1dGhvcnM6CVBlZHJvIFJvcXVlCTxyb3F1ZUBkaS5mYy51bC5wdD4KICAqCiAgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCAzYWVlMTIzLi4wMWQ0NzY3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtNyw4ICs3LDYgQEAKICAqCiAgKglBZGFwdGVkIGZyb20gbGludXgvbmV0L2lwdjQvcmF3LmMKICAqCi0gKgkkSWQ6IHJhdy5jLHYgMS41MSAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCi0gKgogICoJRml4ZXM6CiAgKglIaWRlYWtpIFlPU0hJRlVKSQk6CXNpbjZfc2NvcGVfaWQgc3VwcG9ydAogICoJWU9TSElGVUpJLEguQFVTQUdJCToJcmF3IGNoZWNrc3VtIChSRkMyMjkyKGJpcykgY29tcGxpYW5jZSkKQEAgLTExNTksMTggKzExNTcsMTggQEAKIHN0YXRpYyB2b2lkIHJhd3Y2X2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQogewogCWlmIChpbmV0X3NrKHNrKS0+bnVtID09IElQUFJPVE9fUkFXKQotCQlpcDZfcmFfY29udHJvbChzaywgLTEsIE5VTEwpOworCQlpcDZfcmFfY29udHJvbChzaywgLTEpOwogCWlwNm1yX3NrX2RvbmUoc2spOwogCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKIH0KIAotc3RhdGljIGludCByYXc2X2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgcmF3Nl9kZXN0cm95KHN0cnVjdCBzb2NrICpzaykKIHsKIAlsb2NrX3NvY2soc2spOwogCWlwNl9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAotCXJldHVybiBpbmV0Nl9kZXN0cm95X3NvY2soc2spOworCWluZXQ2X2Rlc3Ryb3lfc29jayhzayk7CiB9CiAKIHN0YXRpYyBpbnQgcmF3djZfaW5pdF9zayhzdHJ1Y3Qgc29jayAqc2spCkBAIC0xMjUzLDcgKzEyNTEsNyBAQAogCQkJICAgImxvY2FsX2FkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgIgogCQkJICAgInJlbW90ZV9hZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgIgogCQkJICAgInN0IHR4X3F1ZXVlIHJ4X3F1ZXVlIHRyIHRtLT53aGVuIHJldHJuc210IgotCQkJICAgIiAgIHVpZCAgdGltZW91dCBpbm9kZSAgZHJvcHNcbiIpOworCQkJICAgIiAgIHVpZCAgdGltZW91dCBpbm9kZSByZWYgcG9pbnRlciBkcm9wc1xuIik7CiAJZWxzZQogCQlyYXc2X3NvY2tfc2VxX3Nob3coc2VxLCB2LCByYXdfc2VxX3ByaXZhdGUoc2VxKS0+YnVja2V0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwppbmRleCBhNjBkN2QxLi42YWI5NTdlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKKysrIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCkBAIC01LDggKzUsNiBAQAogICoJQXV0aG9yczoKICAqCVBlZHJvIFJvcXVlCQk8cm9xdWVAZGkuZmMudWwucHQ+CiAgKgotICoJJElkOiByZWFzc2VtYmx5LmMsdiAxLjI2IDIwMDEvMDMvMDcgMjI6MDA6NTcgZGF2ZW0gRXhwICQKLSAqCiAgKglCYXNlZCBvbjogbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTYzNCw3ICs2MzIsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwNl9mcmFnc19jdGxfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwNl9mcmFnc19uc19jdGxfdGFibGVbXSA9IHsKIAl7CiAJCS5jdGxfbmFtZQk9IE5FVF9JUFY2X0lQNkZSQUdfSElHSF9USFJFU0gsCiAJCS5wcm9jbmFtZQk9ICJpcDZmcmFnX2hpZ2hfdGhyZXNoIiwKQEAgLTY2MCw2ICs2NTgsMTAgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJCS5zdHJhdGVneQk9ICZzeXNjdGxfamlmZmllcywKIAl9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXA2X2ZyYWdzX2N0bF90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gTkVUX0lQVjZfSVA2RlJBR19TRUNSRVRfSU5URVJWQUwsCiAJCS5wcm9jbmFtZQk9ICJpcDZmcmFnX3NlY3JldF9pbnRlcnZhbCIsCkBAIC02NzIsMjEgKzY3NCwyMCBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCBpcDZfZnJhZ3Nfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgaXA2X2ZyYWdzX25zX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjsKIAotCXRhYmxlID0gaXA2X2ZyYWdzX2N0bF90YWJsZTsKKwl0YWJsZSA9IGlwNl9mcmFnc19uc19jdGxfdGFibGU7CiAJaWYgKG5ldCAhPSAmaW5pdF9uZXQpIHsKLQkJdGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoaXA2X2ZyYWdzX2N0bF90YWJsZSksIEdGUF9LRVJORUwpOworCQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihpcDZfZnJhZ3NfbnNfY3RsX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICh0YWJsZSA9PSBOVUxMKQogCQkJZ290byBlcnJfYWxsb2M7CiAKIAkJdGFibGVbMF0uZGF0YSA9ICZuZXQtPmlwdjYuZnJhZ3MuaGlnaF90aHJlc2g7CiAJCXRhYmxlWzFdLmRhdGEgPSAmbmV0LT5pcHY2LmZyYWdzLmxvd190aHJlc2g7CiAJCXRhYmxlWzJdLmRhdGEgPSAmbmV0LT5pcHY2LmZyYWdzLnRpbWVvdXQ7Ci0JCXRhYmxlWzNdLm1vZGUgJj0gfjAyMjI7CiAJfQogCiAJaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQsIG5ldF9pcHY2X2N0bF9wYXRoLCB0YWJsZSk7CkBAIC03MDMsNyArNzA0LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgaXA2X2ZyYWdzX3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIGlwNl9mcmFnc19uc19zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKQEAgLTcxMSwxMyArNzEyLDM2IEBACiAJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKG5ldC0+aXB2Ni5zeXNjdGwuZnJhZ3NfaGRyKTsKIAlrZnJlZSh0YWJsZSk7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaXA2X2N0bF9oZWFkZXI7CisKK3N0YXRpYyBpbnQgaXA2X2ZyYWdzX3N5c2N0bF9yZWdpc3Rlcih2b2lkKQoreworCWlwNl9jdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9yb3RhYmxlKG5ldF9pcHY2X2N0bF9wYXRoLAorCQkJaXA2X2ZyYWdzX2N0bF90YWJsZSk7CisJcmV0dXJuIGlwNl9jdGxfaGVhZGVyID09IE5VTEwgPyAtRU5PTUVNIDogMDsKK30KKworc3RhdGljIHZvaWQgaXA2X2ZyYWdzX3N5c2N0bF91bnJlZ2lzdGVyKHZvaWQpCit7CisJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGlwNl9jdGxfaGVhZGVyKTsKK30KICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpcDZfZnJhZ3Nfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbmxpbmUgaW50IGlwNl9mcmFnc19uc19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXA2X2ZyYWdzX3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcDZfZnJhZ3NfbnNfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBpcDZfZnJhZ3Nfc3lzY3RsX3JlZ2lzdGVyKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcDZfZnJhZ3Nfc3lzY3RsX3VucmVnaXN0ZXIodm9pZCkKIHsKIH0KICNlbmRpZgpAQCAtNzMwLDEyICs3NTQsMTIgQEAKIAogCWluZXRfZnJhZ3NfaW5pdF9uZXQoJm5ldC0+aXB2Ni5mcmFncyk7CiAKLQlyZXR1cm4gaXA2X2ZyYWdzX3N5c2N0bF9yZWdpc3RlcihuZXQpOworCXJldHVybiBpcDZfZnJhZ3NfbnNfc3lzY3RsX3JlZ2lzdGVyKG5ldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdjZfZnJhZ3NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlwNl9mcmFnc19zeXNjdGxfdW5yZWdpc3RlcihuZXQpOworCWlwNl9mcmFnc19uc19zeXNjdGxfdW5yZWdpc3RlcihuZXQpOwogCWluZXRfZnJhZ3NfZXhpdF9uZXQoJm5ldC0+aXB2Ni5mcmFncywgJmlwNl9mcmFncyk7CiB9CiAKQEAgLTc1Miw3ICs3NzYsMTMgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwNl9mcmFnc19vcHMpOworCXJldCA9IGlwNl9mcmFnc19zeXNjdGxfcmVnaXN0ZXIoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9zeXNjdGw7CisKKwlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcDZfZnJhZ3Nfb3BzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wZXJuZXQ7CiAKIAlpcDZfZnJhZ3MuaGFzaGZuID0gaXA2X2hhc2hmbjsKIAlpcDZfZnJhZ3MuY29uc3RydWN0b3IgPSBpcDZfZnJhZ19pbml0OwpAQCAtNzY1LDExICs3OTUsMTggQEAKIAlpbmV0X2ZyYWdzX2luaXQoJmlwNl9mcmFncyk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKKworZXJyX3Blcm5ldDoKKwlpcDZfZnJhZ3Nfc3lzY3RsX3VucmVnaXN0ZXIoKTsKK2Vycl9zeXNjdGw6CisJaW5ldDZfZGVsX3Byb3RvY29sKCZmcmFnX3Byb3RvY29sLCBJUFBST1RPX0ZSQUdNRU5UKTsKKwlnb3RvIG91dDsKIH0KIAogdm9pZCBpcHY2X2ZyYWdfZXhpdCh2b2lkKQogewogCWluZXRfZnJhZ3NfZmluaSgmaXA2X2ZyYWdzKTsKKwlpcDZfZnJhZ3Nfc3lzY3RsX3VucmVnaXN0ZXIoKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwNl9mcmFnc19vcHMpOwogCWluZXQ2X2RlbF9wcm90b2NvbCgmZnJhZ19wcm90b2NvbCwgSVBQUk9UT19GUkFHTUVOVCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCA3ZmY2ODcwLi44NjU0MGIyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTUsOCArNSw2IEBACiAgKglBdXRob3JzOgogICoJUGVkcm8gUm9xdWUJCTxyb3F1ZUBkaS5mYy51bC5wdD4KICAqCi0gKgkkSWQ6IHJvdXRlLmMsdiAxLjU2IDIwMDEvMTAvMzEgMjE6NTU6NTUgZGF2ZW0gRXhwICQKLSAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtMjMwLDcgKzIyOCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBydDZfbmVlZF9zdHJpY3Qoc3RydWN0IGluNl9hZGRyICpkYWRkcikKIHsKIAlyZXR1cm4gKGlwdjZfYWRkcl90eXBlKGRhZGRyKSAmCi0JCShJUFY2X0FERFJfTVVMVElDQVNUIHwgSVBWNl9BRERSX0xJTktMT0NBTCkpOworCQkoSVBWNl9BRERSX01VTFRJQ0FTVCB8IElQVjZfQUREUl9MSU5LTE9DQUwgfCBJUFY2X0FERFJfTE9PUEJBQ0spKTsKIH0KIAogLyoKQEAgLTIzOSwxNSArMjM3LDIwIEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0Nl9pbmZvICpydDZfZGV2aWNlX21hdGNoKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCSAgICBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAorCQkJCQkJICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkJCQkgICAgaW50IG9pZiwKIAkJCQkJCSAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpsb2NhbCA9IE5VTEw7CiAJc3RydWN0IHJ0Nl9pbmZvICpzcHJ0OwogCi0JaWYgKG9pZikgewotCQlmb3IgKHNwcnQgPSBydDsgc3BydDsgc3BydCA9IHNwcnQtPnUuZHN0LnJ0Nl9uZXh0KSB7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3BydC0+cnQ2aV9kZXY7CisJaWYgKCFvaWYgJiYgaXB2Nl9hZGRyX2FueShzYWRkcikpCisJCWdvdG8gb3V0OworCisJZm9yIChzcHJ0ID0gcnQ7IHNwcnQ7IHNwcnQgPSBzcHJ0LT51LmRzdC5ydDZfbmV4dCkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3BydC0+cnQ2aV9kZXY7CisKKwkJaWYgKG9pZikgewogCQkJaWYgKGRldi0+aWZpbmRleCA9PSBvaWYpCiAJCQkJcmV0dXJuIHNwcnQ7CiAJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykgewpAQCAtMjYxLDE0ICsyNjQsMjEgQEAKIAkJCQl9CiAJCQkJbG9jYWwgPSBzcHJ0OwogCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGlwdjZfY2hrX2FkZHIobmV0LCBzYWRkciwgZGV2LAorCQkJCQkgIGZsYWdzICYgUlQ2X0xPT0tVUF9GX0lGQUNFKSkKKwkJCQlyZXR1cm4gc3BydDsKIAkJfQorCX0KIAorCWlmIChvaWYpIHsKIAkJaWYgKGxvY2FsKQogCQkJcmV0dXJuIGxvY2FsOwogCiAJCWlmIChmbGFncyAmIFJUNl9MT09LVVBfRl9JRkFDRSkKIAkJCXJldHVybiBuZXQtPmlwdjYuaXA2X251bGxfZW50cnk7CiAJfQorb3V0OgogCXJldHVybiBydDsKIH0KIApAQCAtNTQxLDcgKzU1MSw3IEBACiAJZm4gPSBmaWI2X2xvb2t1cCgmdGFibGUtPnRiNl9yb290LCAmZmwtPmZsNl9kc3QsICZmbC0+Zmw2X3NyYyk7CiByZXN0YXJ0OgogCXJ0ID0gZm4tPmxlYWY7Ci0JcnQgPSBydDZfZGV2aWNlX21hdGNoKG5ldCwgcnQsIGZsLT5vaWYsIGZsYWdzKTsKKwlydCA9IHJ0Nl9kZXZpY2VfbWF0Y2gobmV0LCBydCwgJmZsLT5mbDZfc3JjLCBmbC0+b2lmLCBmbGFncyk7CiAJQkFDS1RSQUNLKG5ldCwgJmZsLT5mbDZfc3JjKTsKIG91dDoKIAlkc3RfdXNlKCZydC0+dS5kc3QsIGppZmZpZXMpOwpAQCAtNjY2LDcgKzY3Niw3IEBACiAJaW50IHN0cmljdCA9IDA7CiAJaW50IGF0dGVtcHRzID0gMzsKIAlpbnQgZXJyOwotCWludCByZWFjaGFibGUgPSBpcHY2X2RldmNvbmYuZm9yd2FyZGluZyA/IDAgOiBSVDZfTE9PS1VQX0ZfUkVBQ0hBQkxFOworCWludCByZWFjaGFibGUgPSBuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmZvcndhcmRpbmcgPyAwIDogUlQ2X0xPT0tVUF9GX1JFQUNIQUJMRTsKIAogCXN0cmljdCB8PSBmbGFncyAmIFJUNl9MT09LVVBfRl9JRkFDRTsKIApAQCAtOTY4LDEzICs5NzgsMTIgQEAKIAlyZXR1cm4gJnJ0LT51LmRzdDsKIH0KIAotaW50IGljbXA2X2RzdF9nYyhpbnQgKm1vcmUpCitpbnQgaWNtcDZfZHN0X2djKHZvaWQpCiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0LCAqbmV4dCwgKipwcHJldjsKLQlpbnQgZnJlZWQ7CisJaW50IG1vcmUgPSAwOwogCiAJbmV4dCA9IE5VTEw7Ci0JZnJlZWQgPSAwOwogCiAJc3Bpbl9sb2NrX2JoKCZpY21wNl9kc3RfbG9jayk7CiAJcHByZXYgPSAmaWNtcDZfZHN0X2djX2xpc3Q7CkBAIC05ODMsMTYgKzk5MiwxNSBAQAogCQlpZiAoIWF0b21pY19yZWFkKCZkc3QtPl9fcmVmY250KSkgewogCQkJKnBwcmV2ID0gZHN0LT5uZXh0OwogCQkJZHN0X2ZyZWUoZHN0KTsKLQkJCWZyZWVkKys7CiAJCX0gZWxzZSB7CiAJCQlwcHJldiA9ICZkc3QtPm5leHQ7Ci0JCQkoKm1vcmUpKys7CisJCQkrK21vcmU7CiAJCX0KIAl9CiAKIAlzcGluX3VubG9ja19iaCgmaWNtcDZfZHN0X2xvY2spOwogCi0JcmV0dXJuIGZyZWVkOworCXJldHVybiBtb3JlOwogfQogCiBzdGF0aWMgaW50IGlwNl9kc3RfZ2Moc3RydWN0IGRzdF9vcHMgKm9wcykKQEAgLTEwNDgsNyArMTA1Niw3IEBACiAJCQlob3BsaW1pdCA9IGlkZXYtPmNuZi5ob3BfbGltaXQ7CiAJCQlpbjZfZGV2X3B1dChpZGV2KTsKIAkJfSBlbHNlCi0JCQlob3BsaW1pdCA9IGlwdjZfZGV2Y29uZi5ob3BfbGltaXQ7CisJCQlob3BsaW1pdCA9IGRldl9uZXQoZGV2KS0+aXB2Ni5kZXZjb25mX2FsbC0+aG9wX2xpbWl0OwogCX0KIAlyZXR1cm4gaG9wbGltaXQ7CiB9CkBAIC0yNDA2LDI2ICsyNDE0LDcgQEAKIAogc3RhdGljIGludCBpcHY2X3JvdXRlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBnZXRfcHJvY19uZXQoaW5vZGUpOwotCWlmICghbmV0KQotCQlyZXR1cm4gLUVOWElPOwotCi0JZXJyID0gc2luZ2xlX29wZW4oZmlsZSwgaXB2Nl9yb3V0ZV9zaG93LCBuZXQpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXB1dF9uZXQobmV0KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpcHY2X3JvdXRlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2VxLT5wcml2YXRlOwotCXB1dF9uZXQobmV0KTsKLQlyZXR1cm4gc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbGUpOworCXJldHVybiBzaW5nbGVfb3Blbl9uZXQoaW5vZGUsIGZpbGUsIGlwdjZfcm91dGVfc2hvdyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwdjZfcm91dGVfcHJvY19mb3BzID0gewpAQCAtMjQzMyw3ICsyNDIyLDcgQEAKIAkub3BlbgkJPSBpcHY2X3JvdXRlX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBpcHY2X3JvdXRlX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZV9uZXQsCiB9OwogCiBzdGF0aWMgaW50IHJ0Nl9zdGF0c19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTI0NTMsMjYgKzI0NDIsNyBAQAogCiBzdGF0aWMgaW50IHJ0Nl9zdGF0c19zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgZXJyOwotCXN0cnVjdCBuZXQgKm5ldCA9IGdldF9wcm9jX25ldChpbm9kZSk7Ci0JaWYgKCFuZXQpCi0JCXJldHVybiAtRU5YSU87Ci0KLQllcnIgPSBzaW5nbGVfb3BlbihmaWxlLCBydDZfc3RhdHNfc2VxX3Nob3csIG5ldCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJcHV0X25ldChuZXQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0Nl9zdGF0c19zZXFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSAoc3RydWN0IG5ldCAqKXNlcS0+cHJpdmF0ZTsKLQlwdXRfbmV0KG5ldCk7Ci0JcmV0dXJuIHNpbmdsZV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKKwlyZXR1cm4gc2luZ2xlX29wZW5fbmV0KGlub2RlLCBmaWxlLCBydDZfc3RhdHNfc2VxX3Nob3cpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydDZfc3RhdHNfc2VxX2ZvcHMgPSB7CkBAIC0yNDgwLDcgKzI0NTAsNyBAQAogCS5vcGVuCSA9IHJ0Nl9zdGF0c19zZXFfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKIAkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHJ0Nl9zdGF0c19zZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlX25ldCwKIH07CiAjZW5kaWYJLyogQ09ORklHX1BST0NfRlMgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCAzMmU4NzFhLi5iN2E1MGU5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtNiw4ICs2LDYgQEAKICAqCVBlZHJvIFJvcXVlCQk8cm9xdWVAZGkuZmMudWwucHQ+CiAgKglBbGV4ZXkgS3V6bmV0c292CTxrdXpuZXRAbXMyLmluci5hYy5ydT4KICAqCi0gKgkkSWQ6IHNpdC5jLHYgMS41MyAyMDAxLzA5LzI1IDA1OjA5OjUzIGRhdmVtIEV4cCAkCi0gKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KQEAgLTQ5MywxMyArNDkxLDEzIEBACiAKIAkJaWYgKCh0dW5uZWwtPmRldi0+cHJpdl9mbGFncyAmIElGRl9JU0FUQVApICYmCiAJCSAgICAhaXNhdGFwX2Noa3NyYyhza2IsIGlwaCwgdHVubmVsKSkgewotCQkJdHVubmVsLT5zdGF0LnJ4X2Vycm9ycysrOworCQkJdHVubmVsLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJcmVhZF91bmxvY2soJmlwaXA2X2xvY2spOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQl0dW5uZWwtPnN0YXQucnhfcGFja2V0cysrOwotCQl0dW5uZWwtPnN0YXQucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCXR1bm5lbC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCXR1bm5lbC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJc2tiLT5kZXYgPSB0dW5uZWwtPmRldjsKIAkJZHN0X3JlbGVhc2Uoc2tiLT5kc3QpOwogCQlza2ItPmRzdCA9IE5VTEw7CkBAIC01MzksNyArNTM3LDcgQEAKIHN0YXRpYyBpbnQgaXBpcDZfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPnN0YXQ7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnR1bm5lbC0+ZGV2LT5zdGF0czsKIAlzdHJ1Y3QgaXBoZHIgICp0aXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwogCXN0cnVjdCBpcHY2aGRyICppcGg2ID0gaXB2Nl9oZHIoc2tiKTsKIAl1OCAgICAgdG9zID0gdHVubmVsLT5wYXJtcy5pcGgudG9zOwpAQCAtNTUzLDcgKzU1MSw3IEBACiAJaW50IGFkZHJfdHlwZTsKIAogCWlmICh0dW5uZWwtPnJlY3Vyc2lvbisrKSB7Ci0JCXR1bm5lbC0+c3RhdC5jb2xsaXNpb25zKys7CisJCXN0YXRzLT5jb2xsaXNpb25zKys7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC02MjAsMjAgKzYxOCwyMCBAQAogCQkJCSAgICAub2lmID0gdHVubmVsLT5wYXJtcy5saW5rLAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lQVjYgfTsKIAkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCAmcnQsICZmbCkpIHsKLQkJCXR1bm5lbC0+c3RhdC50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAJCX0KIAl9CiAJaWYgKHJ0LT5ydF90eXBlICE9IFJUTl9VTklDQVNUKSB7CiAJCWlwX3J0X3B1dChydCk7Ci0JCXR1bm5lbC0+c3RhdC50eF9jYXJyaWVyX2Vycm9ycysrOworCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCX0KIAl0ZGV2ID0gcnQtPnUuZHN0LmRldjsKIAogCWlmICh0ZGV2ID09IGRldikgewogCQlpcF9ydF9wdXQocnQpOwotCQl0dW5uZWwtPnN0YXQuY29sbGlzaW9ucysrOworCQlzdGF0cy0+Y29sbGlzaW9ucysrOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIApAQCAtNjQzLDcgKzY0MSw3IEBACiAJCW10dSA9IHNrYi0+ZHN0ID8gZHN0X210dShza2ItPmRzdCkgOiBkZXYtPm10dTsKIAogCWlmIChtdHUgPCA2OCkgewotCQl0dW5uZWwtPnN0YXQuY29sbGlzaW9ucysrOworCQlzdGF0cy0+Y29sbGlzaW9ucysrOwogCQlpcF9ydF9wdXQocnQpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KQEAgLTkyMCwxMSArOTE4LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlwaXA2X3R1bm5lbF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJigoKHN0cnVjdCBpcF90dW5uZWwqKW5ldGRldl9wcml2KGRldikpLT5zdGF0KTsKLX0KLQogc3RhdGljIGludCBpcGlwNl90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpZiAobmV3X210dSA8IElQVjZfTUlOX01UVSB8fCBuZXdfbXR1ID4gMHhGRkY4IC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpCkBAIC05MzgsNyArOTMxLDYgQEAKIAlkZXYtPnVuaW5pdAkJPSBpcGlwNl90dW5uZWxfdW5pbml0OwogCWRldi0+ZGVzdHJ1Y3RvciAJPSBmcmVlX25ldGRldjsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGlwaXA2X3R1bm5lbF94bWl0OwotCWRldi0+Z2V0X3N0YXRzCQk9IGlwaXA2X3R1bm5lbF9nZXRfc3RhdHM7CiAJZGV2LT5kb19pb2N0bAkJPSBpcGlwNl90dW5uZWxfaW9jdGw7CiAJZGV2LT5jaGFuZ2VfbXR1CQk9IGlwaXA2X3R1bm5lbF9jaGFuZ2VfbXR1OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKaW5kZXggM2VjYzExNS4uNmE2OGVlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCTsKIAkqbXNzcCA9IG1zc3RhYlttc3NpbmRdICsgMTsKIAotCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1NZTkNPT0tJRVNTRU5UKTsKKwlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1NZTkNPT0tJRVNTRU5UKTsKIAogCXJldHVybiBzZWN1cmVfdGNwX3N5bl9jb29raWUoJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLCB0aC0+c291cmNlLAogCQkJCSAgICAgdGgtPmRlc3QsIG50b2hsKHRoLT5zZXEpLApAQCAtMTc3LDExICsxNzcsMTEgQEAKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRwLT5sYXN0X3N5bnFfb3ZlcmZsb3cgKyBUQ1BfVElNRU9VVF9JTklUKSB8fAogCQkobXNzID0gY29va2llX2NoZWNrKHNrYiwgY29va2llKSkgPT0gMCkgewotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9TWU5DT09LSUVTRkFJTEVEKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9TWU5DT09LSUVTRkFJTEVEKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfU1lOQ09PS0lFU1JFQ1YpOworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfU1lOQ09PS0lFU1JFQ1YpOwogCiAJLyogY2hlY2sgZm9yIHRpbWVzdGFtcCBjb29raWUgc3VwcG9ydCAqLwogCW1lbXNldCgmdGNwX29wdCwgMCwgc2l6ZW9mKHRjcF9vcHQpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKaW5kZXggMzgwNGRjYi4uNWM5OTI3NDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCkBAIC0zNyw2ICszNywxMCBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKIAl9LAorCXsgLmN0bF9uYW1lID0gMCB9Cit9OworCitzdGF0aWMgY3RsX3RhYmxlIGlwdjZfdGFibGVbXSA9IHsKIAl7CiAJCS5jdGxfbmFtZQk9IE5FVF9JUFY2X01MRF9NQVhfTVNGLAogCQkucHJvY25hbWUJPSAibWxkX21heF9tc2YiLApAQCAtODAsMTIgKzg0LDYgQEAKIAogCWlwdjZfdGFibGVbMl0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmJpbmR2Nm9ubHk7CiAKLQkvKiBXZSBkb24ndCB3YW50IHRoaXMgdmFsdWUgdG8gYmUgcGVyIG5hbWVzcGFjZSwgaXQgc2hvdWxkIGJlIGdsb2JhbAotCSAgIHRvIGFsbCBuYW1lc3BhY2VzLCBzbyBtYWtlIGl0IHJlYWQtb25seSB3aGVuIHdlIGFyZSBub3QgaW4gdGhlCi0JICAgaW5pdCBuZXR3b3JrIG5hbWVzcGFjZSAqLwotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlpcHY2X3RhYmxlWzNdLm1vZGUgPSAwNDQ0OwotCiAJbmV0LT5pcHY2LnN5c2N0bC50YWJsZSA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LCBuZXRfaXB2Nl9jdGxfcGF0aCwKIAkJCQkJCQkgICBpcHY2X3RhYmxlKTsKIAlpZiAoIW5ldC0+aXB2Ni5zeXNjdGwudGFibGUpCkBAIC0xMjYsMTIgKzEyNCwyOSBAQAogCS5leGl0ID0gaXB2Nl9zeXNjdGxfbmV0X2V4aXQsCiB9OwogCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmlwNl9oZWFkZXI7CisKIGludCBpcHY2X3N5c2N0bF9yZWdpc3Rlcih2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHY2X3N5c2N0bF9uZXRfb3BzKTsKKwlpbnQgZXJyID0gLUVOT01FTTs7CisKKwlpcDZfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9yb3RhYmxlKG5ldF9pcHY2X2N0bF9wYXRoLCBpcHY2X3RhYmxlKTsKKwlpZiAoaXA2X2hlYWRlciA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdjZfc3lzY3RsX25ldF9vcHMpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3Blcm5ldDsKK291dDoKKwlyZXR1cm4gZXJyOworCitlcnJfcGVybmV0OgorCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShpcDZfaGVhZGVyKTsKKwlnb3RvIG91dDsKIH0KIAogdm9pZCBpcHY2X3N5c2N0bF91bnJlZ2lzdGVyKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGlwNl9oZWFkZXIpOwogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2Nl9zeXNjdGxfbmV0X29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCA0MGVhOWMzLi5hZTQ1Zjk4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTUsOCArNSw2IEBACiAgKglBdXRob3JzOgogICoJUGVkcm8gUm9xdWUJCTxyb3F1ZUBkaS5mYy51bC5wdD4KICAqCi0gKgkkSWQ6IHRjcF9pcHY2LmMsdiAxLjE0NCAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCi0gKgogICoJQmFzZWQgb246CiAgKglsaW51eC9uZXQvaXB2NC90Y3AuYwogICoJbGludXgvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTcyLDggKzcwLDYgQEAKIAogc3RhdGljIHZvaWQJdGNwX3Y2X3NlbmRfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkCXRjcF92Nl9yZXFza19zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwotc3RhdGljIHZvaWQJdGNwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLAotCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBpbnQJdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCkBAIC04Miw2ICs3OCwxMiBAQAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiBzdGF0aWMgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X3NwZWNpZmljOwogc3RhdGljIHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2Nl9tYXBwZWRfc3BlY2lmaWM7CisjZWxzZQorc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqdGNwX3Y2X21kNV9kb19sb29rdXAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCXJldHVybiBOVUxMOworfQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHRjcF92Nl9oYXNoKHN0cnVjdCBzb2NrICpzaykKQEAgLTMyMSw4ICszMjMsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IHRjcF9zb2NrICp0cDsKIAlfX3UzMiBzZXE7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKLQlzayA9IGluZXQ2X2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwgJnRjcF9oYXNoaW5mbywgJmhkci0+ZGFkZHIsCisJc2sgPSBpbmV0Nl9sb29rdXAobmV0LCAmdGNwX2hhc2hpbmZvLCAmaGRyLT5kYWRkciwKIAkJCXRoLT5kZXN0LCAmaGRyLT5zYWRkciwgdGgtPnNvdXJjZSwgc2tiLT5kZXYtPmlmaW5kZXgpOwogCiAJaWYgKHNrID09IE5VTEwpIHsKQEAgLTMzNyw3ICszNDAsNyBAQAogCiAJYmhfbG9ja19zb2NrKHNrKTsKIAlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfTE9DS0RST1BQRURJQ01QUyk7CisJCU5FVF9JTkNfU1RBVFNfQkgobmV0LCBMSU5VWF9NSUJfTE9DS0RST1BQRURJQ01QUyk7CiAKIAlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkKIAkJZ290byBvdXQ7CkBAIC0zNDYsNyArMzQ5LDcgQEAKIAlzZXEgPSBudG9obCh0aC0+c2VxKTsKIAlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKIAkgICAgIWJldHdlZW4oc2VxLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpKSB7Ci0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX09VVE9GV0lORE9XSUNNUFMpOworCQlORVRfSU5DX1NUQVRTX0JIKG5ldCwgTElOVVhfTUlCX09VVE9GV0lORE9XSUNNUFMpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTQyMSw3ICs0MjQsNyBAQAogCQlCVUdfVFJBUChyZXEtPnNrID09IE5VTEwpOwogCiAJCWlmIChzZXEgIT0gdGNwX3JzayhyZXEpLT5zbnRfaXNuKSB7Ci0JCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9PVVRPRldJTkRPV0lDTVBTKTsKKwkJCU5FVF9JTkNfU1RBVFNfQkgobmV0LCBMSU5VWF9NSUJfT1VUT0ZXSU5ET1dJQ01QUyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC03MzMsMTA5ICs3MzYsMTA1IEBACiAJcmV0dXJuIHRjcF92Nl9tZDVfZG9fYWRkKHNrLCAmc2luNi0+c2luNl9hZGRyLCBuZXdrZXksIGNtZC50Y3BtX2tleWxlbik7CiB9CiAKLXN0YXRpYyBpbnQgdGNwX3Y2X2RvX2NhbGNfbWQ1X2hhc2goY2hhciAqbWQ1X2hhc2gsIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqa2V5LAotCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCQkgICBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHByb3RvY29sLAotCQkJCSAgIHVuc2lnbmVkIGludCB0Y3BsZW4pCitzdGF0aWMgaW50IHRjcF92Nl9tZDVfaGFzaF9wc2V1ZG9oZWFkZXIoc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqaHAsCisJCQkJCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGludCBuYnl0ZXMpCiB7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzRdOwotCV9fdTE2IGRhdGFfbGVuOwotCWludCBibG9jayA9IDA7Ci0JX19zdW0xNiBja3N1bTsKLQlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICpocDsKIAlzdHJ1Y3QgdGNwNl9wc2V1ZG9oZHIgKmJwOwotCXN0cnVjdCBoYXNoX2Rlc2MgKmRlc2M7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gMDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAKLQlocCA9IHRjcF9nZXRfbWQ1c2lnX3Bvb2woKTsKLQlpZiAoIWhwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCk6IGhhc2ggcG9vbCBub3QgZm91bmQuLi5cbiIsIF9fZnVuY19fKTsKLQkJZ290byBjbGVhcl9oYXNoX25vcHV0OwotCX0KIAlicCA9ICZocC0+bWQ1X2Jsay5pcDY7Ci0JZGVzYyA9ICZocC0+bWQ1X2Rlc2M7Ci0KIAkvKiAxLiBUQ1AgcHNldWRvLWhlYWRlciAoUkZDMjQ2MCkgKi8KIAlpcHY2X2FkZHJfY29weSgmYnAtPnNhZGRyLCBzYWRkcik7CiAJaXB2Nl9hZGRyX2NvcHkoJmJwLT5kYWRkciwgZGFkZHIpOwotCWJwLT5sZW4gPSBodG9ubCh0Y3BsZW4pOwotCWJwLT5wcm90b2NvbCA9IGh0b25sKHByb3RvY29sKTsKKwlicC0+cHJvdG9jb2wgPSBjcHVfdG9fYmUzMihJUFBST1RPX1RDUCk7CisJYnAtPmxlbiA9IGNwdV90b19iZTE2KG5ieXRlcyk7CiAKLQlzZ19pbml0X3RhYmxlKHNnLCA0KTsKKwlzZ19pbml0X29uZSgmc2csIGJwLCBzaXplb2YoKmJwKSk7CisJcmV0dXJuIGNyeXB0b19oYXNoX3VwZGF0ZSgmaHAtPm1kNV9kZXNjLCAmc2csIHNpemVvZigqYnApKTsKK30KIAotCXNnX3NldF9idWYoJnNnW2Jsb2NrKytdLCBicCwgc2l6ZW9mKCpicCkpOwotCW5ieXRlcyArPSBzaXplb2YoKmJwKTsKK3N0YXRpYyBpbnQgdGNwX3Y2X21kNV9oYXNoX2hkcihjaGFyICptZDVfaGFzaCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCisJCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCSAgICAgICBzdHJ1Y3QgdGNwaGRyICp0aCkKK3sKKwlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICpocDsKKwlzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjOwogCi0JLyogMi4gVENQIGhlYWRlciwgZXhjbHVkaW5nIG9wdGlvbnMgKi8KLQlja3N1bSA9IHRoLT5jaGVjazsKLQl0aC0+Y2hlY2sgPSAwOwotCXNnX3NldF9idWYoJnNnW2Jsb2NrKytdLCB0aCwgc2l6ZW9mKCp0aCkpOwotCW5ieXRlcyArPSBzaXplb2YoKnRoKTsKKwlocCA9IHRjcF9nZXRfbWQ1c2lnX3Bvb2woKTsKKwlpZiAoIWhwKQorCQlnb3RvIGNsZWFyX2hhc2hfbm9wdXQ7CisJZGVzYyA9ICZocC0+bWQ1X2Rlc2M7CiAKLQkvKiAzLiBUQ1Agc2VnbWVudCBkYXRhIChpZiBhbnkpICovCi0JZGF0YV9sZW4gPSB0Y3BsZW4gLSAodGgtPmRvZmYgPDwgMik7Ci0JaWYgKGRhdGFfbGVuID4gMCkgewotCQl1OCAqZGF0YSA9ICh1OCAqKXRoICsgKHRoLT5kb2ZmIDw8IDIpOwotCQlzZ19zZXRfYnVmKCZzZ1tibG9jaysrXSwgZGF0YSwgZGF0YV9sZW4pOwotCQluYnl0ZXMgKz0gZGF0YV9sZW47Ci0JfQotCi0JLyogNC4gc2hhcmVkIGtleSAqLwotCXNnX3NldF9idWYoJnNnW2Jsb2NrKytdLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwotCW5ieXRlcyArPSBrZXktPmtleWxlbjsKLQotCXNnX21hcmtfZW5kKCZzZ1tibG9jayAtIDFdKTsKLQotCS8qIE5vdyBzdG9yZSB0aGUgaGFzaCBpbnRvIHRoZSBwYWNrZXQgKi8KLQllcnIgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMoKTogaGFzaF9pbml0IGZhaWxlZFxuIiwgX19mdW5jX18pOworCWlmIChjcnlwdG9faGFzaF9pbml0KGRlc2MpKQogCQlnb3RvIGNsZWFyX2hhc2g7Ci0JfQotCWVyciA9IGNyeXB0b19oYXNoX3VwZGF0ZShkZXNjLCBzZywgbmJ5dGVzKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCk6IGhhc2hfdXBkYXRlIGZhaWxlZFxuIiwgX19mdW5jX18pOworCWlmICh0Y3BfdjZfbWQ1X2hhc2hfcHNldWRvaGVhZGVyKGhwLCBkYWRkciwgc2FkZHIsIHRoLT5kb2ZmIDw8IDIpKQogCQlnb3RvIGNsZWFyX2hhc2g7Ci0JfQotCWVyciA9IGNyeXB0b19oYXNoX2ZpbmFsKGRlc2MsIG1kNV9oYXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCk6IGhhc2hfZmluYWwgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJaWYgKHRjcF9tZDVfaGFzaF9oZWFkZXIoaHAsIHRoKSkKIAkJZ290byBjbGVhcl9oYXNoOwotCX0KKwlpZiAodGNwX21kNV9oYXNoX2tleShocCwga2V5KSkKKwkJZ290byBjbGVhcl9oYXNoOworCWlmIChjcnlwdG9faGFzaF9maW5hbChkZXNjLCBtZDVfaGFzaCkpCisJCWdvdG8gY2xlYXJfaGFzaDsKIAotCS8qIFJlc2V0IGhlYWRlciwgYW5kIGZyZWUgdXAgdGhlIGNyeXB0byAqLwogCXRjcF9wdXRfbWQ1c2lnX3Bvb2woKTsKLQl0aC0+Y2hlY2sgPSBja3N1bTsKLW91dDoKIAlyZXR1cm4gMDsKKwogY2xlYXJfaGFzaDoKIAl0Y3BfcHV0X21kNXNpZ19wb29sKCk7CiBjbGVhcl9oYXNoX25vcHV0OgogCW1lbXNldChtZDVfaGFzaCwgMCwgMTYpOwotCWdvdG8gb3V0OworCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHRjcF92Nl9jYWxjX21kNV9oYXNoKGNoYXIgKm1kNV9oYXNoLCBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleSwKLQkJCQlzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCQlzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHByb3RvY29sLAotCQkJCXVuc2lnbmVkIGludCB0Y3BsZW4pCitzdGF0aWMgaW50IHRjcF92Nl9tZDVfaGFzaF9za2IoY2hhciAqbWQ1X2hhc2gsIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqa2V5LAorCQkJICAgICAgIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyOworCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwOworCXN0cnVjdCBoYXNoX2Rlc2MgKmRlc2M7CisJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiAKIAlpZiAoc2spIHsKIAkJc2FkZHIgPSAmaW5ldDZfc2soc2spLT5zYWRkcjsKIAkJZGFkZHIgPSAmaW5ldDZfc2soc2spLT5kYWRkcjsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAocmVxKSB7CiAJCXNhZGRyID0gJmluZXQ2X3JzayhyZXEpLT5sb2NfYWRkcjsKIAkJZGFkZHIgPSAmaW5ldDZfcnNrKHJlcSktPnJtdF9hZGRyOworCX0gZWxzZSB7CisJCXN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKKwkJc2FkZHIgPSAmaXA2aC0+c2FkZHI7CisJCWRhZGRyID0gJmlwNmgtPmRhZGRyOwogCX0KLQlyZXR1cm4gdGNwX3Y2X2RvX2NhbGNfbWQ1X2hhc2gobWQ1X2hhc2gsIGtleSwKLQkJCQkgICAgICAgc2FkZHIsIGRhZGRyLAotCQkJCSAgICAgICB0aCwgcHJvdG9jb2wsIHRjcGxlbik7CisKKwlocCA9IHRjcF9nZXRfbWQ1c2lnX3Bvb2woKTsKKwlpZiAoIWhwKQorCQlnb3RvIGNsZWFyX2hhc2hfbm9wdXQ7CisJZGVzYyA9ICZocC0+bWQ1X2Rlc2M7CisKKwlpZiAoY3J5cHRvX2hhc2hfaW5pdChkZXNjKSkKKwkJZ290byBjbGVhcl9oYXNoOworCisJaWYgKHRjcF92Nl9tZDVfaGFzaF9wc2V1ZG9oZWFkZXIoaHAsIGRhZGRyLCBzYWRkciwgc2tiLT5sZW4pKQorCQlnb3RvIGNsZWFyX2hhc2g7CisJaWYgKHRjcF9tZDVfaGFzaF9oZWFkZXIoaHAsIHRoKSkKKwkJZ290byBjbGVhcl9oYXNoOworCWlmICh0Y3BfbWQ1X2hhc2hfc2tiX2RhdGEoaHAsIHNrYiwgdGgtPmRvZmYgPDwgMikpCisJCWdvdG8gY2xlYXJfaGFzaDsKKwlpZiAodGNwX21kNV9oYXNoX2tleShocCwga2V5KSkKKwkJZ290byBjbGVhcl9oYXNoOworCWlmIChjcnlwdG9faGFzaF9maW5hbChkZXNjLCBtZDVfaGFzaCkpCisJCWdvdG8gY2xlYXJfaGFzaDsKKworCXRjcF9wdXRfbWQ1c2lnX3Bvb2woKTsKKwlyZXR1cm4gMDsKKworY2xlYXJfaGFzaDoKKwl0Y3BfcHV0X21kNXNpZ19wb29sKCk7CitjbGVhcl9oYXNoX25vcHV0OgorCW1lbXNldChtZDVfaGFzaCwgMCwgMTYpOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IHRjcF92Nl9pbmJvdW5kX21kNV9oYXNoIChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCkBAIC04NDQsNDMgKzg0MywxMiBAQAogCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqaGFzaF9leHBlY3RlZDsKIAlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7Ci0JaW50IGxlbmd0aCA9ICh0aC0+ZG9mZiA8PCAyKSAtIHNpemVvZiAoKnRoKTsKIAlpbnQgZ2VuaGFzaDsKLQl1OCAqcHRyOwogCXU4IG5ld2hhc2hbMTZdOwogCiAJaGFzaF9leHBlY3RlZCA9IHRjcF92Nl9tZDVfZG9fbG9va3VwKHNrLCAmaXA2aC0+c2FkZHIpOworCWhhc2hfbG9jYXRpb24gPSB0Y3BfcGFyc2VfbWQ1c2lnX29wdGlvbih0aCk7CiAKLQkvKiBJZiB0aGUgVENQIG9wdGlvbiBpcyB0b28gc2hvcnQsIHdlIGNhbiBzaG9ydCBjdXQgKi8KLQlpZiAobGVuZ3RoIDwgVENQT0xFTl9NRDVTSUcpCi0JCXJldHVybiBoYXNoX2V4cGVjdGVkID8gMSA6IDA7Ci0KLQkvKiBwYXJzZSBvcHRpb25zICovCi0JcHRyID0gKHU4KikodGggKyAxKTsKLQl3aGlsZSAobGVuZ3RoID4gMCkgewotCQlpbnQgb3Bjb2RlID0gKnB0cisrOwotCQlpbnQgb3BzaXplOwotCi0JCXN3aXRjaChvcGNvZGUpIHsKLQkJY2FzZSBUQ1BPUFRfRU9MOgotCQkJZ290byBkb25lX29wdHM7Ci0JCWNhc2UgVENQT1BUX05PUDoKLQkJCWxlbmd0aC0tOwotCQkJY29udGludWU7Ci0JCWRlZmF1bHQ6Ci0JCQlvcHNpemUgPSAqcHRyKys7Ci0JCQlpZiAob3BzaXplIDwgMiB8fCBvcHNpemUgPiBsZW5ndGgpCi0JCQkJZ290byBkb25lX29wdHM7Ci0JCQlpZiAob3Bjb2RlID09IFRDUE9QVF9NRDVTSUcpIHsKLQkJCQloYXNoX2xvY2F0aW9uID0gcHRyOwotCQkJCWdvdG8gZG9uZV9vcHRzOwotCQkJfQotCQl9Ci0JCXB0ciArPSBvcHNpemUgLSAyOwotCQlsZW5ndGggLT0gb3BzaXplOwotCX0KLQotZG9uZV9vcHRzOgogCS8qIGRvIHdlIGhhdmUgYSBoYXNoIGFzIGV4cGVjdGVkPyAqLwogCWlmICghaGFzaF9leHBlY3RlZCkgewogCQlpZiAoIWhhc2hfbG9jYXRpb24pCkBAIC05MDcsMTEgKzg3NSwxMCBAQAogCX0KIAogCS8qIGNoZWNrIHRoZSBzaWduYXR1cmUgKi8KLQlnZW5oYXNoID0gdGNwX3Y2X2RvX2NhbGNfbWQ1X2hhc2gobmV3aGFzaCwKLQkJCQkJICBoYXNoX2V4cGVjdGVkLAotCQkJCQkgICZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAotCQkJCQkgIHRoLCBzay0+c2tfcHJvdG9jb2wsCi0JCQkJCSAgc2tiLT5sZW4pOworCWdlbmhhc2ggPSB0Y3BfdjZfbWQ1X2hhc2hfc2tiKG5ld2hhc2gsCisJCQkJICAgICAgaGFzaF9leHBlY3RlZCwKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBza2IpOworCiAJaWYgKGdlbmhhc2ggfHwgbWVtY21wKGhhc2hfbG9jYXRpb24sIG5ld2hhc2gsIDE2KSAhPSAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIk1ENSBIYXNoICVzIGZvciAiCkBAIC0xMDQ4LDEwICsxMDE1LDkgQEAKIAkJCSAgICAgICAoVENQT1BUX05PUCA8PCAxNikgfAogCQkJICAgICAgIChUQ1BPUFRfTUQ1U0lHIDw8IDgpIHwKIAkJCSAgICAgICBUQ1BPTEVOX01ENVNJRyk7Ci0JCXRjcF92Nl9kb19jYWxjX21kNV9oYXNoKChfX3U4ICopJm9wdFsxXSwga2V5LAotCQkJCQkmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwKLQkJCQkJdDEsIElQUFJPVE9fVENQLCB0b3RfbGVuKTsKKwkJdGNwX3Y2X21kNV9oYXNoX2hkcigoX191OCAqKSZvcHRbMV0sIGtleSwKKwkJCQkgICAgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAorCQkJCSAgICAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsIHQxKTsKIAl9CiAjZW5kaWYKIApAQCAtMTA3OSw4ICsxMDQ1LDggQEAKIAogCQlpZiAoeGZybV9sb29rdXAoJmJ1ZmYtPmRzdCwgJmZsLCBOVUxMLCAwKSA+PSAwKSB7CiAJCQlpcDZfeG1pdChjdGxfc2ssIGJ1ZmYsICZmbCwgTlVMTCwgMCk7Ci0JCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfT1VUU0VHUyk7Ci0JCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfT1VUUlNUUyk7CisJCQlUQ1BfSU5DX1NUQVRTX0JIKG5ldCwgVENQX01JQl9PVVRTRUdTKTsKKwkJCVRDUF9JTkNfU1RBVFNfQkgobmV0LCBUQ1BfTUlCX09VVFJTVFMpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTA4OCw4ICsxMDU0LDggQEAKIAlrZnJlZV9za2IoYnVmZik7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcF92Nl9zZW5kX2FjayhzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnR3LAotCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzZXEsIHUzMiBhY2ssIHUzMiB3aW4sIHUzMiB0cykKK3N0YXRpYyB2b2lkIHRjcF92Nl9zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgc2VxLCB1MzIgYWNrLCB1MzIgd2luLCB1MzIgdHMsCisJCQkgICAgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXkpCiB7CiAJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYiksICp0MTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKQEAgLTEwOTgsMjIgKzEwNjQsNiBAQAogCXN0cnVjdCBzb2NrICpjdGxfc2sgPSBuZXQtPmlwdjYudGNwX3NrOwogCXVuc2lnbmVkIGludCB0b3RfbGVuID0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCV9fYmUzMiAqdG9wdDsKLSNpZmRlZiBDT05GSUdfVENQX01ENVNJRwotCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqa2V5OwotCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSB0d19rZXk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi0JaWYgKCF0dyAmJiBza2ItPnNrKSB7Ci0JCWtleSA9IHRjcF92Nl9tZDVfZG9fbG9va3VwKHNrYi0+c2ssICZpcHY2X2hkcihza2IpLT5kYWRkcik7Ci0JfSBlbHNlIGlmICh0dyAmJiB0dy0+dHdfbWQ1X2tleWxlbikgewotCQl0d19rZXkua2V5ID0gdHctPnR3X21kNV9rZXk7Ci0JCXR3X2tleS5rZXlsZW4gPSB0dy0+dHdfbWQ1X2tleWxlbjsKLQkJa2V5ID0gJnR3X2tleTsKLQl9IGVsc2UgewotCQlrZXkgPSBOVUxMOwotCX0KLSNlbmRpZgogCiAJaWYgKHRzKQogCQl0b3RfbGVuICs9IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7CkBAIC0xMTU0LDEwICsxMTA0LDkgQEAKIAlpZiAoa2V5KSB7CiAJCSp0b3B0KysgPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfCAoVENQT1BUX05PUCA8PCAxNikgfAogCQkJCShUQ1BPUFRfTUQ1U0lHIDw8IDgpIHwgVENQT0xFTl9NRDVTSUcpOwotCQl0Y3BfdjZfZG9fY2FsY19tZDVfaGFzaCgoX191OCAqKXRvcHQsIGtleSwKLQkJCQkJJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCQkmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsCi0JCQkJCXQxLCBJUFBST1RPX1RDUCwgdG90X2xlbik7CisJCXRjcF92Nl9tZDVfaGFzaF9oZHIoKF9fdTggKil0b3B0LCBrZXksCisJCQkJICAgICZpcHY2X2hkcihza2IpLT5kYWRkciwKKwkJCQkgICAgJmlwdjZfaGRyKHNrYiktPnNhZGRyLCB0MSk7CiAJfQogI2VuZGlmCiAKQEAgLTExODAsNyArMTEyOSw3IEBACiAJaWYgKCFpcDZfZHN0X2xvb2t1cChjdGxfc2ssICZidWZmLT5kc3QsICZmbCkpIHsKIAkJaWYgKHhmcm1fbG9va3VwKCZidWZmLT5kc3QsICZmbCwgTlVMTCwgMCkgPj0gMCkgewogCQkJaXA2X3htaXQoY3RsX3NrLCBidWZmLCAmZmwsIE5VTEwsIDApOwotCQkJVENQX0lOQ19TVEFUU19CSChUQ1BfTUlCX09VVFNFR1MpOworCQkJVENQX0lOQ19TVEFUU19CSChuZXQsIFRDUF9NSUJfT1VUU0VHUyk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0xMTkzLDE2ICsxMTQyLDE3IEBACiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOwogCXN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayAqdGNwdHcgPSB0Y3BfdHdzayhzayk7CiAKLQl0Y3BfdjZfc2VuZF9hY2sodGNwdHcsIHNrYiwgdGNwdHctPnR3X3NuZF9ueHQsIHRjcHR3LT50d19yY3Zfbnh0LAorCXRjcF92Nl9zZW5kX2Fjayhza2IsIHRjcHR3LT50d19zbmRfbnh0LCB0Y3B0dy0+dHdfcmN2X254dCwKIAkJCXRjcHR3LT50d19yY3Zfd25kID4+IHR3LT50d19yY3Zfd3NjYWxlLAotCQkJdGNwdHctPnR3X3RzX3JlY2VudCk7CisJCQl0Y3B0dy0+dHdfdHNfcmVjZW50LCB0Y3BfdHdza19tZDVfa2V5KHRjcHR3KSk7CiAKIAlpbmV0X3R3c2tfcHV0KHR3KTsKIH0KIAogc3RhdGljIHZvaWQgdGNwX3Y2X3JlcXNrX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKLQl0Y3BfdjZfc2VuZF9hY2soTlVMTCwgc2tiLCB0Y3BfcnNrKHJlcSktPnNudF9pc24gKyAxLCB0Y3BfcnNrKHJlcSktPnJjdl9pc24gKyAxLCByZXEtPnJjdl93bmQsIHJlcS0+dHNfcmVjZW50KTsKKwl0Y3BfdjZfc2VuZF9hY2soc2tiLCB0Y3BfcnNrKHJlcSktPnNudF9pc24gKyAxLCB0Y3BfcnNrKHJlcSktPnJjdl9pc24gKyAxLCByZXEtPnJjdl93bmQsIHJlcS0+dHNfcmVjZW50LAorCQkJdGNwX3Y2X21kNV9kb19sb29rdXAoc2tiLT5zaywgJmlwdjZfaGRyKHNrYiktPmRhZGRyKSk7CiB9CiAKIApAQCAtMTUzOCw5ICsxNDg4LDkgQEAKIAlyZXR1cm4gbmV3c2s7CiAKIG91dF9vdmVyZmxvdzoKLQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9MSVNURU5PVkVSRkxPV1MpOworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfTElTVEVOT1ZFUkZMT1dTKTsKIG91dDoKLQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9MSVNURU5EUk9QUyk7CisJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9MSVNURU5EUk9QUyk7CiAJaWYgKG9wdCAmJiBvcHQgIT0gbnAtPm9wdCkKIAkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CiAJZHN0X3JlbGVhc2UoZHN0KTsKQEAgLTE2NjksNyArMTYxOSw3IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiBjc3VtX2VycjoKLQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfSU5FUlJTKTsKKwlUQ1BfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpOwogCWdvdG8gZGlzY2FyZDsKIAogCkBAIC0xNzA3LDYgKzE2NTcsNyBAQAogCXN0cnVjdCB0Y3BoZHIgKnRoOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgcmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCiAJaWYgKHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0hPU1QpCiAJCWdvdG8gZGlzY2FyZF9pdDsKQEAgLTE3MTQsNyArMTY2NSw3IEBACiAJLyoKIAkgKglDb3VudCBpdCBldmVuIGlmIGl0J3MgYmFkLgogCSAqLwotCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9JTlNFR1MpOworCVRDUF9JTkNfU1RBVFNfQkgobmV0LCBUQ1BfTUlCX0lOU0VHUyk7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHRjcGhkcikpKQogCQlnb3RvIGRpc2NhcmRfaXQ7CkBAIC0xNzM4LDcgKzE2ODksNyBAQAogCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgPSBpcHY2X2dldF9kc2ZpZWxkKGlwdjZfaGRyKHNrYikpOwogCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkID0gMDsKIAotCXNrID0gX19pbmV0Nl9sb29rdXAoZGV2X25ldChza2ItPmRldiksICZ0Y3BfaGFzaGluZm8sCisJc2sgPSBfX2luZXQ2X2xvb2t1cChuZXQsICZ0Y3BfaGFzaGluZm8sCiAJCQkmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsIHRoLT5zb3VyY2UsCiAJCQkmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsIG50b2hzKHRoLT5kZXN0KSwKIAkJCWluZXQ2X2lpZihza2IpKTsKQEAgLTE3ODYsNyArMTczNyw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCAodGgtPmRvZmY8PDIpIHx8IHRjcF9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CiBiYWRfcGFja2V0OgotCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfSU5FUlJTKTsKKwkJVENQX0lOQ19TVEFUU19CSChuZXQsIFRDUF9NSUJfSU5FUlJTKTsKIAl9IGVsc2UgewogCQl0Y3BfdjZfc2VuZF9yZXNldChOVUxMLCBza2IpOwogCX0KQEAgLTE4MTEsNyArMTc2Miw3IEBACiAJfQogCiAJaWYgKHNrYi0+bGVuIDwgKHRoLT5kb2ZmPDwyKSB8fCB0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewotCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfSU5FUlJTKTsKKwkJVENQX0lOQ19TVEFUU19CSChuZXQsIFRDUF9NSUJfSU5FUlJTKTsKIAkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKIAkJZ290byBkaXNjYXJkX2l0OwogCX0KQEAgLTE4NzEsNyArMTgyMiw3IEBACiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIHN0YXRpYyBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjZfc3BlY2lmaWMgPSB7CiAJLm1kNV9sb29rdXAJPQl0Y3BfdjZfbWQ1X2xvb2t1cCwKLQkuY2FsY19tZDVfaGFzaAk9CXRjcF92Nl9jYWxjX21kNV9oYXNoLAorCS5jYWxjX21kNV9oYXNoCT0JdGNwX3Y2X21kNV9oYXNoX3NrYiwKIAkubWQ1X2FkZAk9CXRjcF92Nl9tZDVfYWRkX2Z1bmMsCiAJLm1kNV9wYXJzZQk9CXRjcF92Nl9wYXJzZV9tZDVfa2V5cywKIH07CkBAIC0xOTAzLDcgKzE4NTQsNyBAQAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiBzdGF0aWMgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X21hcHBlZF9zcGVjaWZpYyA9IHsKIAkubWQ1X2xvb2t1cAk9CXRjcF92NF9tZDVfbG9va3VwLAotCS5jYWxjX21kNV9oYXNoCT0JdGNwX3Y0X2NhbGNfbWQ1X2hhc2gsCisJLmNhbGNfbWQ1X2hhc2gJPQl0Y3BfdjRfbWQ1X2hhc2hfc2tiLAogCS5tZDVfYWRkCT0JdGNwX3Y2X21kNV9hZGRfZnVuYywKIAkubWQ1X3BhcnNlCT0JdGNwX3Y2X3BhcnNlX21kNV9rZXlzLAogfTsKQEAgLTE5NjAsNyArMTkxMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGNwX3Y2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCB0Y3BfdjZfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwogCS8qIENsZWFuIHVwIHRoZSBNRDUga2V5IGxpc3QgKi8KQEAgLTE5NjgsNyArMTkxOSw3IEBACiAJCXRjcF92Nl9jbGVhcl9tZDVfbGlzdChzayk7CiAjZW5kaWYKIAl0Y3BfdjRfZGVzdHJveV9zb2NrKHNrKTsKLQlyZXR1cm4gaW5ldDZfZGVzdHJveV9zb2NrKHNrKTsKKwlpbmV0Nl9kZXN0cm95X3NvY2soc2spOwogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggZGQzMDk2Mi4uZDE0NzdiMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTcsOCArNyw2IEBACiAgKgogICoJQmFzZWQgb24gbGludXgvaXB2NC91ZHAuYwogICoKLSAqCSRJZDogdWRwLmMsdiAxLjY1IDIwMDIvMDIvMDEgMjI6MDE6MDQgZGF2ZW0gRXhwICQKLSAqCiAgKglGaXhlczoKICAqCUhpZGVha2kgWU9TSElGVUpJCToJc2luNl9zY29wZV9pZCBzdXBwb3J0CiAgKglZT1NISUZVSkkgSGlkZWFraSBAVVNBR0kgYW5kOglTdXBwb3J0IElQVjZfVjZPTkxZIHNvY2tldCBvcHRpb24sIHdoaWNoCkBAIC02Nyw3ICs2NSw3IEBACiAJaW50IGJhZG5lc3MgPSAtMTsKIAogCXJlYWRfbG9jaygmdWRwX2hhc2hfbG9jayk7Ci0Jc2tfZm9yX2VhY2goc2ssIG5vZGUsICZ1ZHB0YWJsZVtobnVtICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXSkgeworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmdWRwdGFibGVbdWRwX2hhc2hmbihuZXQsIGhudW0pXSkgewogCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAKIAkJaWYgKG5ldF9lcShzb2NrX25ldChzayksIG5ldCkgJiYgc2stPnNrX2hhc2ggPT0gaG51bSAmJgpAQCAtMTY4LDcgKzE2Niw4IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAlpZiAoIXBlZWtlZCkKLQkJVURQNl9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX0lOREFUQUdSQU1TLCBpc191ZHBsaXRlKTsKKwkJVURQNl9JTkNfU1RBVFNfVVNFUihzb2NrX25ldChzayksCisJCQkJVURQX01JQl9JTkRBVEFHUkFNUywgaXNfdWRwbGl0ZSk7CiAKIAlzb2NrX3JlY3ZfdGltZXN0YW1wKG1zZywgc2ssIHNrYik7CiAKQEAgLTIxNSw3ICsyMTQsNyBAQAogY3N1bV9jb3B5X2VycjoKIAlsb2NrX3NvY2soc2spOwogCWlmICghc2tiX2tpbGxfZGF0YWdyYW0oc2ssIHNrYiwgZmxhZ3MpKQotCQlVRFA2X0lOQ19TVEFUU19VU0VSKFVEUF9NSUJfSU5FUlJPUlMsIGlzX3VkcGxpdGUpOworCQlVRFA2X0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwgVURQX01JQl9JTkVSUk9SUywgaXNfdWRwbGl0ZSk7CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAogCWlmIChmbGFncyAmIE1TR19ET05UV0FJVCkKQEAgLTI5OSwxNCArMjk4LDE3IEBACiAKIAlpZiAoKHJjID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLHNrYikpIDwgMCkgewogCQkvKiBOb3RlIHRoYXQgYW4gRU5PTUVNIGVycm9yIGlzIGNoYXJnZWQgdHdpY2UgKi8KLQkJaWYgKHJjID09IC1FTk9NRU0pCi0JCQlVRFA2X0lOQ19TVEFUU19CSChVRFBfTUlCX1JDVkJVRkVSUk9SUywgaXNfdWRwbGl0ZSk7CisJCWlmIChyYyA9PSAtRU5PTUVNKSB7CisJCQlVRFA2X0lOQ19TVEFUU19CSChzb2NrX25ldChzayksCisJCQkJCVVEUF9NSUJfUkNWQlVGRVJST1JTLCBpc191ZHBsaXRlKTsKKwkJCWF0b21pY19pbmMoJnNrLT5za19kcm9wcyk7CisJCX0KIAkJZ290byBkcm9wOwogCX0KIAogCXJldHVybiAwOwogZHJvcDoKLQlVRFA2X0lOQ19TVEFUU19CSChVRFBfTUlCX0lORVJST1JTLCBpc191ZHBsaXRlKTsKKwlVRFA2X0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIFVEUF9NSUJfSU5FUlJPUlMsIGlzX3VkcGxpdGUpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAtMTsKIH0KQEAgLTM1NSwxNSArMzU3LDE2IEBACiAgKiBOb3RlOiBjYWxsZWQgb25seSBmcm9tIHRoZSBCSCBoYW5kbGVyIGNvbnRleHQsCiAgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvY2sgdGhlIGhhc2hlcy4KICAqLwotc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIHN0cnVjdCBobGlzdF9oZWFkIHVkcHRhYmxlW10pCitzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCisJCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCXN0cnVjdCBobGlzdF9oZWFkIHVkcHRhYmxlW10pCiB7CiAJc3RydWN0IHNvY2sgKnNrLCAqc2syOwogCWNvbnN0IHN0cnVjdCB1ZHBoZHIgKnVoID0gdWRwX2hkcihza2IpOwogCWludCBkaWY7CiAKIAlyZWFkX2xvY2soJnVkcF9oYXNoX2xvY2spOwotCXNrID0gc2tfaGVhZCgmdWRwdGFibGVbbnRvaHModWgtPmRlc3QpICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXSk7CisJc2sgPSBza19oZWFkKCZ1ZHB0YWJsZVt1ZHBfaGFzaGZuKG5ldCwgbnRvaHModWgtPmRlc3QpKV0pOwogCWRpZiA9IGluZXQ2X2lpZihza2IpOwogCXNrID0gdWRwX3Y2X21jYXN0X25leHQoc2ssIHVoLT5kZXN0LCBkYWRkciwgdWgtPnNvdXJjZSwgc2FkZHIsIGRpZik7CiAJaWYgKCFzaykgewpAQCAtNDM3LDYgKzQ0MCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwogCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsICpkYWRkcjsKIAl1MzIgdWxlbiA9IDA7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpKQogCQlnb3RvIHNob3J0X3BhY2tldDsKQEAgLTQ3NSw3ICs0NzksOCBAQAogCSAqCU11bHRpY2FzdCByZWNlaXZlIGNvZGUKIAkgKi8KIAlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChkYWRkcikpCi0JCXJldHVybiBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc2tiLCBzYWRkciwgZGFkZHIsIHVkcHRhYmxlKTsKKwkJcmV0dXJuIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwKKwkJCQlzYWRkciwgZGFkZHIsIHVkcHRhYmxlKTsKIAogCS8qIFVuaWNhc3QgKi8KIApAQCAtNDgzLDcgKzQ4OCw3IEBACiAJICogY2hlY2sgc29ja2V0IGNhY2hlIC4uLiBtdXN0IHRhbGsgdG8gQWxhbiBhYm91dCBoaXMgcGxhbnMKIAkgKiBmb3Igc29jayBjYWNoZXMuLi4gaSdsbCBza2lwIHRoaXMgZm9yIG5vdy4KIAkgKi8KLQlzayA9IF9fdWRwNl9saWJfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCBzYWRkciwgdWgtPnNvdXJjZSwKKwlzayA9IF9fdWRwNl9saWJfbG9va3VwKG5ldCwgc2FkZHIsIHVoLT5zb3VyY2UsCiAJCQkgICAgICAgZGFkZHIsIHVoLT5kZXN0LCBpbmV0Nl9paWYoc2tiKSwgdWRwdGFibGUpOwogCiAJaWYgKHNrID09IE5VTEwpIHsKQEAgLTQ5Miw3ICs0OTcsOCBAQAogCiAJCWlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGRpc2NhcmQ7Ci0JCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfTk9QT1JUUywgcHJvdG8gPT0gSVBQUk9UT19VRFBMSVRFKTsKKwkJVURQNl9JTkNfU1RBVFNfQkgobmV0LCBVRFBfTUlCX05PUE9SVFMsCisJCQkJcHJvdG8gPT0gSVBQUk9UT19VRFBMSVRFKTsKIAogCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDAsIGRldik7CiAKQEAgLTUxNyw3ICs1MjMsNyBAQAogCQkgICAgICAgdWxlbiwgc2tiLT5sZW4pOwogCiBkaXNjYXJkOgotCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMsIHByb3RvID09IElQUFJPVE9fVURQTElURSk7CisJVURQNl9JTkNfU1RBVFNfQkgobmV0LCBVRFBfTUlCX0lORVJST1JTLCBwcm90byA9PSBJUFBST1RPX1VEUExJVEUpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQpAQCAtNTg3LDcgKzU5Myw4IEBACiAJdXAtPmxlbiA9IDA7CiAJdXAtPnBlbmRpbmcgPSAwOwogCWlmICghZXJyKQotCQlVRFA2X0lOQ19TVEFUU19VU0VSKFVEUF9NSUJfT1VUREFUQUdSQU1TLCBpc191ZHBsaXRlKTsKKwkJVURQNl9JTkNfU1RBVFNfVVNFUihzb2NrX25ldChzayksCisJCQkJVURQX01JQl9PVVREQVRBR1JBTVMsIGlzX3VkcGxpdGUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg2OSw3ICs4NzYsOCBAQAogCSAqIHNlZW1zIGxpa2Ugb3ZlcmtpbGwuCiAJICovCiAJaWYgKGVyciA9PSAtRU5PQlVGUyB8fCB0ZXN0X2JpdChTT0NLX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncykpIHsKLQkJVURQNl9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX1NOREJVRkVSUk9SUywgaXNfdWRwbGl0ZSk7CisJCVVEUDZfSU5DX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLAorCQkJCVVEUF9NSUJfU05EQlVGRVJST1JTLCBpc191ZHBsaXRlKTsKIAl9CiAJcmV0dXJuIGVycjsKIApAQCAtODgxLDE1ICs4ODksMTMgQEAKIAlnb3RvIG91dDsKIH0KIAotaW50IHVkcHY2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCit2b2lkIHVkcHY2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJbG9ja19zb2NrKHNrKTsKIAl1ZHBfdjZfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2spOwogCXJlbGVhc2Vfc29jayhzayk7CiAKIAlpbmV0Nl9kZXN0cm95X3NvY2soc2spOwotCi0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC05NTUsNyArOTYxLDcgQEAKIAlzcmNwICA9IG50b2hzKGluZXQtPnNwb3J0KTsKIAlzZXFfcHJpbnRmKHNlcSwKIAkJICAgIiU0ZDogJTA4WCUwOFglMDhYJTA4WDolMDRYICUwOFglMDhYJTA4WCUwOFg6JTA0WCAiCi0JCSAgICIlMDJYICUwOFg6JTA4WCAlMDJYOiUwOGxYICUwOFggJTVkICU4ZCAlbHUgJWQgJXBcbiIsCisJCSAgICIlMDJYICUwOFg6JTA4WCAlMDJYOiUwOGxYICUwOFggJTVkICU4ZCAlbHUgJWQgJXAgJWRcbiIsCiAJCSAgIGJ1Y2tldCwKIAkJICAgc3JjLT5zNl9hZGRyMzJbMF0sIHNyYy0+czZfYWRkcjMyWzFdLAogCQkgICBzcmMtPnM2X2FkZHIzMlsyXSwgc3JjLT5zNl9hZGRyMzJbM10sIHNyY3AsCkBAIC05NjcsNyArOTczLDggQEAKIAkJICAgMCwgMEwsIDAsCiAJCSAgIHNvY2tfaV91aWQoc3ApLCAwLAogCQkgICBzb2NrX2lfaW5vKHNwKSwKLQkJICAgYXRvbWljX3JlYWQoJnNwLT5za19yZWZjbnQpLCBzcCk7CisJCSAgIGF0b21pY19yZWFkKCZzcC0+c2tfcmVmY250KSwgc3AsCisJCSAgIGF0b21pY19yZWFkKCZzcC0+c2tfZHJvcHMpKTsKIH0KIAogaW50IHVkcDZfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC05NzgsNyArOTg1LDcgQEAKIAkJCSAgICJsb2NhbF9hZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICIKIAkJCSAgICJyZW1vdGVfYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICIKIAkJCSAgICJzdCB0eF9xdWV1ZSByeF9xdWV1ZSB0ciB0bS0+d2hlbiByZXRybnNtdCIKLQkJCSAgICIgICB1aWQgIHRpbWVvdXQgaW5vZGVcbiIpOworCQkJICAgIiAgIHVpZCAgdGltZW91dCBpbm9kZSByZWYgcG9pbnRlciBkcm9wc1xuIik7CiAJZWxzZQogCQl1ZHA2X3NvY2tfc2VxX3Nob3coc2VxLCB2LCAoKHN0cnVjdCB1ZHBfaXRlcl9zdGF0ZSAqKXNlcS0+cHJpdmF0ZSktPmJ1Y2tldCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHBfaW1wbC5oIGIvbmV0L2lwdjYvdWRwX2ltcGwuaAppbmRleCAzMjFiODFhLi45MmRkN2RhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHBfaW1wbC5oCisrKyBiL25ldC9pcHY2L3VkcF9pbXBsLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAkJCSAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJCSAgICAgIGludCBub2Jsb2NrLCBpbnQgZmxhZ3MsIGludCAqYWRkcl9sZW4pOwogZXh0ZXJuIGludAl1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICogc2ssIHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIGludAl1ZHB2Nl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkCXVkcHY2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIGV4dGVybiBpbnQJdWRwNl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHBsaXRlLmMgYi9uZXQvaXB2Ni91ZHBsaXRlLmMKaW5kZXggNDkxZWZkMC4uZjZjZGNiMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwbGl0ZS5jCisrKyBiL25ldC9pcHY2L3VkcGxpdGUuYwpAQCAtMiw4ICsyLDYgQEAKICAqICBVRFBMSVRFdjYgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVURQLUxpdGUgcHJvdG9jb2wgb3ZlciBJUHY2LgogICogICAgICAgICAgICAgIFNlZSBhbHNvIG5ldC9pcHY0L3VkcGxpdGUuYwogICoKLSAqICBWZXJzaW9uOiAgICAkSWQ6IHVkcGxpdGUuYyx2IDEuOSAyMDA2LzEwLzE5IDA4OjI4OjEwIGdlcnJpdCBFeHAgJAotICoKICAqICBBdXRob3JzOiAgICBHZXJyaXQgUmVua2VyICAgICAgIDxnZXJyaXRAZXJnLmFiZG4uYWMudWs+CiAgKgogICogIENoYW5nZXM6CmRpZmYgLS1naXQgYS9uZXQvaXB4L2FmX2lweC5jIGIvbmV0L2lweC9hZl9pcHguYwppbmRleCA4MWFlODczLi5iNmU3MGY5IDEwMDY0NAotLS0gYS9uZXQvaXB4L2FmX2lweC5jCisrKyBiL25ldC9pcHgvYWZfaXB4LmMKQEAgLTMzNSw3ICszMzUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAJc3RydWN0IGlweF9pbnRlcmZhY2UgKmksICp0bXA7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChldmVudCAhPSBORVRERVZfRE9XTiAmJiBldmVudCAhPSBORVRERVZfVVApCkBAIC0xNjM2LDcgKzE2MzYsNyBAQAogCXUxNiBpcHhfcGt0c2l6ZTsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlnb3RvIGRyb3A7CiAKIAkvKiBOb3Qgb3VycyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKaW5kZXggNzZjMzA1Ny4uZTRlMmNhZSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYworKysgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCkBAIC02NTAsMTIgKzY1MCw3IEBACiAJfQogCiAJLyogQ2hlY2sgaWYgdXNlciAoc3RpbGwpIHdhbnRzIHRvIGJlIHdha2VuIHVwICovCi0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCXsKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwotCX0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtMTE0MSw2ICsxMTM2LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGluc3RhbmNlOworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIApAQCAtMTE3Myw3ICsxMTY5LDExIEBACiAJICogaW52b2x2ZSB0aGUgZmxpcCBidWZmZXJzLCBzaW5jZSB3ZSBhcmUgbm90IHJ1bm5pbmcgaW4gYW4gaW50ZXJydXB0CiAJICogaGFuZGxlcgogCSAqLwotCXNlbGYtPnR0eS0+bGRpc2MucmVjZWl2ZV9idWYoc2VsZi0+dHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKKworCWxkID0gdHR5X2xkaXNjX3JlZihzZWxmLT50dHkpOworCWlmIChsZCkKKwkJbGQtPm9wcy0+cmVjZWl2ZV9idWYoc2VsZi0+dHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKKwl0dHlfbGRpc2NfZGVyZWYobGQpOwogCiAJLyogTm8gbmVlZCB0byBrZnJlZV9za2IgLSBzZWUgaXJjb21tX3R0cF9kYXRhX2luZGljYXRpb24oKSAqLwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jIGIvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYwppbmRleCA5MDg5NDUzLi5mMTdiNjVhIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jCisrKyBiL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMKQEAgLTEzMjYsNyArMTMyNiw3IEBACiAJaW50IGNvbW1hbmQ7CiAJX191OCBjb250cm9sOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlnb3RvIG91dDsKIAogCS8qIEZJWE1FOiBzaG91bGQgd2UgZ2V0IG91ciBvd24gZmllbGQ/ICovCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYyBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCmluZGV4IGU4NGE3MGQuLjZkOGFlMDMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCisrKyBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCkBAIC02MzEsOCArNjMxLDggQEAKICAqIFRoaXMgaXMgdGhlIHdheSBwcHBkIGNvbmZpZ3VyZSB1cyBhbmQgY29udHJvbCB1cyB3aGlsZSB0aGUgUFBQCiAgKiBpbnN0YW5jZSBpcyBhY3RpdmUuCiAgKi8KLXN0YXRpYyBpbnQKLWRldl9pcm5ldF9pb2N0bChzdHJ1Y3QgaW5vZGUgKglpbm9kZSwKK3N0YXRpYyBsb25nCitkZXZfaXJuZXRfaW9jdGwoCiAJCXN0cnVjdCBmaWxlICoJZmlsZSwKIAkJdW5zaWduZWQgaW50CWNtZCwKIAkJdW5zaWduZWQgbG9uZwlhcmcpCkBAIC02NjMsNiArNjYzLDcgQEAKIAl7CiAJICBERUJVRyhGU19JTkZPLCAiRW50ZXJpbmcgUFBQIGRpc2NpcGxpbmUuXG4iKTsKIAkgIC8qIFBQUCBjaGFubmVsIHNldHVwIChhcC0+Y2hhbiBpbiBjb25maWd1ZWQgaW4gZGV2X2lybmV0X29wZW4oKSkqLworCSAgbG9ja19rZXJuZWwoKTsKIAkgIGVyciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKCZhcC0+Y2hhbik7CiAJICBpZihlcnIgPT0gMCkKIAkgICAgewpAQCAtNjc1LDEyICs2NzYsMTQgQEAKIAkgICAgfQogCSAgZWxzZQogCSAgICBERVJST1IoRlNfRVJST1IsICJDYW4ndCBzZXR1cCBQUFAgY2hhbm5lbC4uLlxuIik7CisgICAgICAgICAgdW5sb2NrX2tlcm5lbCgpOwogCX0KICAgICAgIGVsc2UKIAl7CiAJICAvKiBJbiB0aGVvcnksIHNob3VsZCBiZSBOX1RUWSAqLwogCSAgREVCVUcoRlNfSU5GTywgIkV4aXRpbmcgUFBQIGRpc2NpcGxpbmUuXG4iKTsKIAkgIC8qIERpc2Nvbm5lY3QgZnJvbSB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIgKi8KKwkgIGxvY2tfa2VybmVsKCk7CiAJICBpZihhcC0+cHBwX29wZW4pCiAJICAgIHsKIAkgICAgICBhcC0+cHBwX29wZW4gPSAwOwpAQCAtNjg5LDI0ICs2OTIsMjAgQEAKIAkgIGVsc2UKIAkgICAgREVSUk9SKEZTX0VSUk9SLCAiQ2hhbm5lbCBub3QgcmVnaXN0ZXJlZCAhXG4iKTsKIAkgIGVyciA9IDA7CisJICB1bmxvY2tfa2VybmVsKCk7CiAJfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIFF1ZXJ5IFBQUCBjaGFubmVsIGFuZCB1bml0IG51bWJlciAqLwogICAgIGNhc2UgUFBQSU9DR0NIQU46Ci0gICAgICBpZighYXAtPnBwcF9vcGVuKQotCWJyZWFrOwotICAgICAgaWYocHV0X3VzZXIocHBwX2NoYW5uZWxfaW5kZXgoJmFwLT5jaGFuKSwgKGludCBfX3VzZXIgKilhcmdwKSkKLQlicmVhazsKLSAgICAgIERFQlVHKEZTX0lORk8sICJRdWVyeSBjaGFubmVsLlxuIik7Ci0gICAgICBlcnIgPSAwOworICAgICAgaWYoYXAtPnBwcF9vcGVuICYmICFwdXRfdXNlcihwcHBfY2hhbm5lbF9pbmRleCgmYXAtPmNoYW4pLAorCQkJCQkJKGludCBfX3VzZXIgKilhcmdwKSkKKwllcnIgPSAwOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUFBJT0NHVU5JVDoKLSAgICAgIGlmKCFhcC0+cHBwX29wZW4pCi0JYnJlYWs7Ci0gICAgICBpZihwdXRfdXNlcihwcHBfdW5pdF9udW1iZXIoJmFwLT5jaGFuKSwgKGludCBfX3VzZXIgKilhcmdwKSkKLQlicmVhazsKLSAgICAgIERFQlVHKEZTX0lORk8sICJRdWVyeSB1bml0IG51bWJlci5cbiIpOworICAgICAgbG9ja19rZXJuZWwoKTsKKyAgICAgIGlmKGFwLT5wcHBfb3BlbiAmJiAhcHV0X3VzZXIocHBwX3VuaXRfbnVtYmVyKCZhcC0+Y2hhbiksCisJCQkJCQkoaW50IF9fdXNlciAqKWFyZ3ApKQogICAgICAgZXJyID0gMDsKICAgICAgIGJyZWFrOwogCkBAIC03MjYsMzQgKzcyNSwzOSBAQAogICAgICAgREVCVUcoRlNfSU5GTywgIlN0YW5kYXJkIFBQUCBpb2N0bC5cbiIpOwogICAgICAgaWYoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJZXJyID0gLUVQRVJNOwotICAgICAgZWxzZQorICAgICAgZWxzZSB7CisJbG9ja19rZXJuZWwoKTsKIAllcnIgPSBwcHBfaXJuZXRfaW9jdGwoJmFwLT5jaGFuLCBjbWQsIGFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIFRUWSBJT0NUTHMgOiBQcmV0ZW5kIHRoYXQgd2UgYXJlIGEgdHR5LCB0byBrZWVwIHBwcGQgaGFwcHkgKi8KICAgICAgIC8qIEdldCB0ZXJtaW9zICovCiAgICAgY2FzZSBUQ0dFVFM6CiAgICAgICBERUJVRyhGU19JTkZPLCAiR2V0IHRlcm1pb3MuXG4iKTsKKyAgICAgIGxvY2tfa2VybmVsKCk7CiAjaWZuZGVmIFRDR0VUUzIKLSAgICAgIGlmKGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcygoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJncCwgJmFwLT50ZXJtaW9zKSkKLQlicmVhazsKKyAgICAgIGlmKCFrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3MoKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZ3AsICZhcC0+dGVybWlvcykpCisJZXJyID0gMDsKICNlbHNlCiAgICAgICBpZihrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3NfMSgoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJncCwgJmFwLT50ZXJtaW9zKSkKLQlicmVhazsKKwllcnIgPSAwOwogI2VuZGlmCi0gICAgICBlcnIgPSAwOworICAgICAgdW5sb2NrX2tlcm5lbCgpOwogICAgICAgYnJlYWs7CiAgICAgICAvKiBTZXQgdGVybWlvcyAqLwogICAgIGNhc2UgVENTRVRTRjoKICAgICAgIERFQlVHKEZTX0lORk8sICJTZXQgdGVybWlvcy5cbiIpOworICAgICAgbG9ja19rZXJuZWwoKTsKICNpZm5kZWYgVENHRVRTMgotICAgICAgaWYodXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKCZhcC0+dGVybWlvcywgKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZ3ApKQotCWJyZWFrOworICAgICAgaWYoIXVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcygmYXAtPnRlcm1pb3MsIChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmdwKSkKKwllcnIgPSAwOwogI2Vsc2UKLSAgICAgIGlmKHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKCZhcC0+dGVybWlvcywgKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZ3ApKQotCWJyZWFrOworICAgICAgaWYoIXVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKCZhcC0+dGVybWlvcywgKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZ3ApKQorCWVyciA9IDA7CiAjZW5kaWYKLSAgICAgIGVyciA9IDA7CisgICAgICB1bmxvY2tfa2VybmVsKCk7CiAgICAgICBicmVhazsKIAogICAgICAgLyogU2V0IERUUi9SVFMgKi8KQEAgLTc3Niw3ICs3ODAsOSBAQAogICAgICAgICogV2Ugc2hvdWxkIGFsc28gd29ycnkgdGhhdCB3ZSBkb24ndCBhY2NlcHQganVuayBoZXJlIGFuZCB0aGF0CiAgICAgICAgKiB3ZSBnZXQgcmlkIG9mIG91ciBvd24gYnVmZmVycyAqLwogI2lmZGVmIEZMVVNIX1RPX1BQUAorICAgICAgbG9ja19rZXJuZWwoKTsKICAgICAgIHBwcF9vdXRwdXRfd2FrZXVwKCZhcC0+Y2hhbik7CisgICAgICB1bmxvY2tfa2VybmVsKCk7CiAjZW5kaWYgLyogRkxVU0hfVE9fUFBQICovCiAgICAgICBlcnIgPSAwOwogICAgICAgYnJlYWs7CkBAIC03OTEsNyArNzk3LDcgQEAKIAogICAgIGRlZmF1bHQ6CiAgICAgICBERVJST1IoRlNfRVJST1IsICJVbnN1cHBvcnRlZCBpb2N0bCAoMHglWClcbiIsIGNtZCk7Ci0gICAgICBlcnIgPSAtRU5PSU9DVExDTUQ7CisgICAgICBlcnIgPSAtRU5PVFRZOwogICAgIH0KIAogICBERVhJVChGU19UUkFDRSwgIiAtIGVyciA9IDB4JVhcbiIsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuaCBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5oCmluZGV4IGQyYmViN2QuLmQ5ZjhiZDQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5oCisrKyBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5oCkBAIC03Niw5ICs3Niw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50CiAJZGV2X2lybmV0X3BvbGwoc3RydWN0IGZpbGUgKiwKIAkJICAgICAgIHBvbGxfdGFibGUgKik7Ci1zdGF0aWMgaW50Ci0JZGV2X2lybmV0X2lvY3RsKHN0cnVjdCBpbm9kZSAqLAotCQkJc3RydWN0IGZpbGUgKiwKK3N0YXRpYyBsb25nCisJZGV2X2lybmV0X2lvY3RsKHN0cnVjdCBmaWxlICosCiAJCQl1bnNpZ25lZCBpbnQsCiAJCQl1bnNpZ25lZCBsb25nKTsKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQUFAgSU5URVJGQUNFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTAyLDcgKzEwMSw3IEBACiAJLnJlYWQJCT0gZGV2X2lybmV0X3JlYWQsCiAJLndyaXRlCQk9IGRldl9pcm5ldF93cml0ZSwKIAkucG9sbAkJPSBkZXZfaXJuZXRfcG9sbCwKLQkuaW9jdGwJCT0gZGV2X2lybmV0X2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IGRldl9pcm5ldF9pb2N0bCwKIAkub3BlbgkJPSBkZXZfaXJuZXRfb3BlbiwKIAkucmVsZWFzZQk9IGRldl9pcm5ldF9jbG9zZQogICAvKiBBbHNvIDogbGxzZWVrLCByZWFkZGlyLCBtbWFwLCBmbHVzaCwgZnN5bmMsIGZhc3luYywgbG9jaywgcmVhZHYsIHdyaXRldiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGJkYTcxMDEuLjI5ZjdiYWEgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYworKysgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTY0NCw2ICs2NDQsNyBAQAogCQl9CiAKIAkJdHhtc2cuY2xhc3MgPSAwOworCQltZW1jcHkoJnR4bXNnLmNsYXNzLCBza2ItPmRhdGEsIHNrYi0+bGVuID49IDQgPyA0IDogc2tiLT5sZW4pOwogCQl0eG1zZy50YWcgPSBpdWN2LT5zZW5kX3RhZysrOwogCQltZW1jcHkoc2tiLT5jYiwgJnR4bXNnLnRhZywgNCk7CiAJCXNrYl9xdWV1ZV90YWlsKCZpdWN2LT5zZW5kX3NrYl9xLCBza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvaXVjdi5jIGIvbmV0L2l1Y3YvaXVjdi5jCmluZGV4IGNjMzRhYzcuLjcwNTk1OWIgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2l1Y3YuYworKysgYi9uZXQvaXVjdi9pdWN2LmMKQEAgLTQ3NCwxNCArNDc0LDE0IEBACiB7CiAJaW50IGNwdTsKIAotCXByZWVtcHRfZGlzYWJsZSgpOworCWdldF9vbmxpbmVfY3B1cygpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQkvKiBFbmFibGUgYWxsIGNwdXMgd2l0aCBhIGRlY2xhcmVkIGJ1ZmZlci4gKi8KIAkJaWYgKGNwdV9pc3NldChjcHUsIGl1Y3ZfYnVmZmVyX2NwdW1hc2spICYmCiAJCSAgICAhY3B1X2lzc2V0KGNwdSwgaXVjdl9pcnFfY3B1bWFzaykpCiAJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBpdWN2X2FsbG93X2NwdSwKIAkJCQkJCSBOVUxMLCAxKTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCXB1dF9vbmxpbmVfY3B1cygpOwogfQogCiAvKioKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCS8qIERpc2FibGUgYWxsIGNwdSBidXQgdGhlIGZpcnN0IGluIGNwdV9pcnFfY3B1bWFzay4gKi8KIAljcHVtYXNrID0gaXVjdl9pcnFfY3B1bWFzazsKIAljcHVfY2xlYXIoZmlyc3RfY3B1KGl1Y3ZfaXJxX2NwdW1hc2spLCBjcHVtYXNrKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGNwdW1hc2spCisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBjcHVtYXNrKQogCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBpdWN2X2Jsb2NrX2NwdSwgTlVMTCwgMSk7CiB9CiAKQEAgLTUyMSwxNiArNTIxLDE4IEBACiAJCWdvdG8gb3V0OwogCS8qIERlY2xhcmUgcGVyIGNwdSBidWZmZXJzLiAqLwogCXJjID0gLUVJTzsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKKwlnZXRfb25saW5lX2NwdXMoKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKIAkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgaXVjdl9kZWNsYXJlX2NwdSwgTlVMTCwgMSk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIAlpZiAoY3B1c19lbXB0eShpdWN2X2J1ZmZlcl9jcHVtYXNrKSkKIAkJLyogTm8gY3B1IGNvdWxkIGRlY2xhcmUgYW4gaXVjdiBidWZmZXIuICovCiAJCWdvdG8gb3V0X3BhdGg7CisJcHV0X29ubGluZV9jcHVzKCk7CiAJcmV0dXJuIDA7CiAKIG91dF9wYXRoOgorCXB1dF9vbmxpbmVfY3B1cygpOwogCWtmcmVlKGl1Y3ZfcGF0aF90YWJsZSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtNTY0LDggKzU2NiwxMSBAQAogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CiAJCWl1Y3ZfcGFyYW1bY3B1XSA9IGttYWxsb2Nfbm9kZShzaXplb2YodW5pb24gaXVjdl9wYXJhbSksCiAJCQkJICAgICBHRlBfS0VSTkVMfEdGUF9ETUEsIGNwdV90b19ub2RlKGNwdSkpOwotCQlpZiAoIWl1Y3ZfcGFyYW1bY3B1XSkKKwkJaWYgKCFpdWN2X3BhcmFtW2NwdV0pIHsKKwkJCWtmcmVlKGl1Y3ZfaXJxX2RhdGFbY3B1XSk7CisJCQlpdWN2X2lycV9kYXRhW2NwdV0gPSBOVUxMOwogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgpAQCAtNTk4LDcgKzYwMyw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIGl1Y3ZfY3B1X25vdGlmaWVyID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX3JlZmRhdGEgaXVjdl9jcHVfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBpdWN2X2NwdV9ub3RpZnksCiB9OwogCmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuYwppbmRleCA3NDcwZTM2Li5mMGZjNDZjIDEwMDY0NAotLS0gYS9uZXQva2V5L2FmX2tleS5jCisrKyBiL25ldC9rZXkvYWZfa2V5LmMKQEAgLTU3OSwyNSArNTc5LDQzIEBACiAJcmV0dXJuIChwcm90byA/IHByb3RvIDogSVBTRUNfUFJPVE9fQU5ZKTsKIH0KIAotc3RhdGljIGludCBwZmtleV9zYWRiX2FkZHIyeGZybV9hZGRyKHN0cnVjdCBzYWRiX2FkZHJlc3MgKmFkZHIsCi0JCQkJICAgICB4ZnJtX2FkZHJlc3NfdCAqeGFkZHIpCitzdGF0aWMgaW5saW5lIGludCBwZmtleV9zb2NrYWRkcl9sZW4oc2FfZmFtaWx5X3QgZmFtaWx5KQogewotCXN3aXRjaCAoKChzdHJ1Y3Qgc29ja2FkZHIqKShhZGRyICsgMSkpLT5zYV9mYW1pbHkpIHsKKwlzd2l0Y2ggKGZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYworaW50IHBma2V5X3NvY2thZGRyX2V4dHJhY3QoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwgeGZybV9hZGRyZXNzX3QgKnhhZGRyKQoreworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKIAkJeGFkZHItPmE0ID0KLQkJCSgoc3RydWN0IHNvY2thZGRyX2luICopKGFkZHIgKyAxKSktPnNpbl9hZGRyLnNfYWRkcjsKKwkJCSgoc3RydWN0IHNvY2thZGRyX2luICopc2EpLT5zaW5fYWRkci5zX2FkZHI7CiAJCXJldHVybiBBRl9JTkVUOwogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCWNhc2UgQUZfSU5FVDY6CiAJCW1lbWNweSh4YWRkci0+YTYsCi0JCSAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGFkZHIgKyAxKSktPnNpbjZfYWRkciwKKwkJICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktPnNpbjZfYWRkciwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJcmV0dXJuIEFGX0lORVQ2OwogI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7CiAJfQotCS8qIE5PVFJFQUNIRUQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljCitpbnQgcGZrZXlfc2FkYl9hZGRyMnhmcm1fYWRkcihzdHJ1Y3Qgc2FkYl9hZGRyZXNzICphZGRyLCB4ZnJtX2FkZHJlc3NfdCAqeGFkZHIpCit7CisJcmV0dXJuIHBma2V5X3NvY2thZGRyX2V4dHJhY3QoKHN0cnVjdCBzb2NrYWRkciAqKShhZGRyICsgMSksCisJCQkJICAgICAgeGFkZHIpOwogfQogCiBzdGF0aWMgc3RydWN0ICB4ZnJtX3N0YXRlICpwZmtleV94ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3Qgc2FkYl9tc2cgKmhkciwgdm9pZCAqKmV4dF9oZHJzKQpAQCAtNjQyLDIwICs2NjAsMTEgQEAKIH0KIAogI2RlZmluZSBQRktFWV9BTElHTjgoYSkgKDEgKyAoKChhKSAtIDEpIHwgKDggLSAxKSkpCisKIHN0YXRpYyBpbnQKIHBma2V5X3NvY2thZGRyX3NpemUoc2FfZmFtaWx5X3QgZmFtaWx5KQogewotCXN3aXRjaCAoZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgotCQlyZXR1cm4gUEZLRVlfQUxJR044KHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gUEZLRVlfQUxJR044KHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci0JLyogTk9UUkVBQ0hFRCAqLworCXJldHVybiBQRktFWV9BTElHTjgocGZrZXlfc29ja2FkZHJfbGVuKGZhbWlseSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwZmtleV9tb2RlX2Zyb21feGZybShpbnQgbW9kZSkKQEAgLTY4Nyw2ICs2OTYsMzYgQEAKIAl9CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGZrZXlfc29ja2FkZHJfZmlsbCh4ZnJtX2FkZHJlc3NfdCAqeGFkZHIsIF9fYmUxNiBwb3J0LAorCQkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhLAorCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJc3dpdGNoIChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJICAgIHsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7CisJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisJCXNpbi0+c2luX3BvcnQgPSBwb3J0OworCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHhhZGRyLT5hNDsKKwkJbWVtc2V0KHNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7CisJCXJldHVybiAzMjsKKwkgICAgfQorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWNhc2UgQUZfSU5FVDY6CisJICAgIHsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisJCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJCXNpbjYtPnNpbjZfcG9ydCA9IHBvcnQ7CisJCXNpbjYtPnNpbjZfZmxvd2luZm8gPSAwOworCQlpcHY2X2FkZHJfY29weSgmc2luNi0+c2luNl9hZGRyLCAoc3RydWN0IGluNl9hZGRyICopeGFkZHItPmE2KTsKKwkJc2luNi0+c2luNl9zY29wZV9pZCA9IDA7CisJCXJldHVybiAxMjg7CisJICAgIH0KKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBza19idWZmICpfX3Bma2V5X3hmcm1fc3RhdGUybXNnKHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQkJCQkgICAgICBpbnQgYWRkX2tleXMsIGludCBoc2MpCiB7CkBAIC02OTcsMTMgKzczNiw5IEBACiAJc3RydWN0IHNhZGJfYWRkcmVzcyAqYWRkcjsKIAlzdHJ1Y3Qgc2FkYl9rZXkgKmtleTsKIAlzdHJ1Y3Qgc2FkYl94X3NhMiAqc2EyOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwogCXN0cnVjdCBzYWRiX3hfc2VjX2N0eCAqc2VjX2N0eDsKIAlzdHJ1Y3QgeGZybV9zZWNfY3R4ICp4ZnJtX2N0eDsKIAlpbnQgY3R4X3NpemUgPSAwOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0jZW5kaWYKIAlpbnQgc2l6ZTsKIAlpbnQgYXV0aF9rZXlfc2l6ZSA9IDA7CiAJaW50IGVuY3J5cHRfa2V5X3NpemUgPSAwOwpAQCAtNzMyLDE0ICs3NjcsNyBAQAogCX0KIAogCS8qIGlkZW50aXR5ICYgc2Vuc2l0aXZpdHkgKi8KLQotCWlmICgoeC0+cHJvcHMuZmFtaWx5ID09IEFGX0lORVQgJiYKLQkgICAgIHgtPnNlbC5zYWRkci5hNCAhPSB4LT5wcm9wcy5zYWRkci5hNCkKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQkgICAgfHwgKHgtPnByb3BzLmZhbWlseSA9PSBBRl9JTkVUNiAmJgotCQltZW1jbXAgKHgtPnNlbC5zYWRkci5hNiwgeC0+cHJvcHMuc2FkZHIuYTYsIHNpemVvZiAoc3RydWN0IGluNl9hZGRyKSkpCi0jZW5kaWYKLQkJKQorCWlmICh4ZnJtX2FkZHJfY21wKCZ4LT5zZWwuc2FkZHIsICZ4LT5wcm9wcy5zYWRkciwgeC0+cHJvcHMuZmFtaWx5KSkKIAkJc2l6ZSArPSBzaXplb2Yoc3RydWN0IHNhZGJfYWRkcmVzcykgKyBzb2NrYWRkcl9zaXplOwogCiAJaWYgKGFkZF9rZXlzKSB7CkBAIC04NjEsMjkgKzg4OSwxMiBAQAogCSAgIHByb3RvY29sJ3MgbnVtYmVyLiIgLSBSRkMyMzY3ICovCiAJYWRkci0+c2FkYl9hZGRyZXNzX3Byb3RvID0gMDsKIAlhZGRyLT5zYWRiX2FkZHJlc3NfcmVzZXJ2ZWQgPSAwOwotCWlmICh4LT5wcm9wcy5mYW1pbHkgPT0gQUZfSU5FVCkgewotCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0gMzI7CiAKLQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAoYWRkciArIDEpOwotCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHgtPnByb3BzLnNhZGRyLmE0OwotCQlzaW4tPnNpbl9wb3J0ID0gMDsKLQkJbWVtc2V0KHNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7Ci0JfQotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCWVsc2UgaWYgKHgtPnByb3BzLmZhbWlseSA9PSBBRl9JTkVUNikgewotCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0gMTI4OwotCi0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAoYWRkciArIDEpOwotCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCQlzaW42LT5zaW42X3BvcnQgPSAwOwotCQlzaW42LT5zaW42X2Zsb3dpbmZvID0gMDsKLQkJbWVtY3B5KCZzaW42LT5zaW42X2FkZHIsIHgtPnByb3BzLnNhZGRyLmE2LAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwotCQlzaW42LT5zaW42X3Njb3BlX2lkID0gMDsKLQl9Ci0jZW5kaWYKLQllbHNlCisJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9CisJCXBma2V5X3NvY2thZGRyX2ZpbGwoJngtPnByb3BzLnNhZGRyLCAwLAorCQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopIChhZGRyICsgMSksCisJCQkJICAgIHgtPnByb3BzLmZhbWlseSk7CisJaWYgKCFhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuKQogCQlCVUcoKTsKIAogCS8qIGRzdCBhZGRyZXNzICovCkBAIC04OTQsNzEgKzkwNSwzMyBAQAogCQkJc2l6ZW9mKHVpbnQ2NF90KTsKIAlhZGRyLT5zYWRiX2FkZHJlc3NfZXh0dHlwZSA9IFNBREJfRVhUX0FERFJFU1NfRFNUOwogCWFkZHItPnNhZGJfYWRkcmVzc19wcm90byA9IDA7Ci0JYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IDMyOyAvKiBYWFggKi8KIAlhZGRyLT5zYWRiX2FkZHJlc3NfcmVzZXJ2ZWQgPSAwOwotCWlmICh4LT5wcm9wcy5mYW1pbHkgPT0gQUZfSU5FVCkgewotCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopIChhZGRyICsgMSk7Ci0JCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCXNpbi0+c2luX2FkZHIuc19hZGRyID0geC0+aWQuZGFkZHIuYTQ7Ci0JCXNpbi0+c2luX3BvcnQgPSAwOwotCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKIAotCQlpZiAoeC0+c2VsLnNhZGRyLmE0ICE9IHgtPnByb3BzLnNhZGRyLmE0KSB7Ci0JCQlhZGRyID0gKHN0cnVjdCBzYWRiX2FkZHJlc3MqKSBza2JfcHV0KHNrYiwKLQkJCQlzaXplb2Yoc3RydWN0IHNhZGJfYWRkcmVzcykrc29ja2FkZHJfc2l6ZSk7Ci0JCQlhZGRyLT5zYWRiX2FkZHJlc3NfbGVuID0KLQkJCQkoc2l6ZW9mKHN0cnVjdCBzYWRiX2FkZHJlc3MpK3NvY2thZGRyX3NpemUpLwotCQkJCXNpemVvZih1aW50NjRfdCk7Ci0JCQlhZGRyLT5zYWRiX2FkZHJlc3NfZXh0dHlwZSA9IFNBREJfRVhUX0FERFJFU1NfUFJPWFk7Ci0JCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJvdG8gPQotCQkJCXBma2V5X3Byb3RvX2Zyb21feGZybSh4LT5zZWwucHJvdG8pOwotCQkJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IHgtPnNlbC5wcmVmaXhsZW5fczsKLQkJCWFkZHItPnNhZGJfYWRkcmVzc19yZXNlcnZlZCA9IDA7Ci0KLQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgKGFkZHIgKyAxKTsKLQkJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHgtPnNlbC5zYWRkci5hNDsKLQkJCXNpbi0+c2luX3BvcnQgPSB4LT5zZWwuc3BvcnQ7Ci0JCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKLQkJfQotCX0KLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQllbHNlIGlmICh4LT5wcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IDEyODsKLQotCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgKGFkZHIgKyAxKTsKLQkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQkJc2luNi0+c2luNl9wb3J0ID0gMDsKLQkJc2luNi0+c2luNl9mbG93aW5mbyA9IDA7Ci0JCW1lbWNweSgmc2luNi0+c2luNl9hZGRyLCB4LT5pZC5kYWRkci5hNiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwotCQlzaW42LT5zaW42X3Njb3BlX2lkID0gMDsKLQotCQlpZiAobWVtY21wICh4LT5zZWwuc2FkZHIuYTYsIHgtPnByb3BzLnNhZGRyLmE2LAotCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSkgewotCQkJYWRkciA9IChzdHJ1Y3Qgc2FkYl9hZGRyZXNzICopIHNrYl9wdXQoc2tiLAotCQkJCXNpemVvZihzdHJ1Y3Qgc2FkYl9hZGRyZXNzKStzb2NrYWRkcl9zaXplKTsKLQkJCWFkZHItPnNhZGJfYWRkcmVzc19sZW4gPQotCQkJCShzaXplb2Yoc3RydWN0IHNhZGJfYWRkcmVzcykrc29ja2FkZHJfc2l6ZSkvCi0JCQkJc2l6ZW9mKHVpbnQ2NF90KTsKLQkJCWFkZHItPnNhZGJfYWRkcmVzc19leHR0eXBlID0gU0FEQl9FWFRfQUREUkVTU19QUk9YWTsKLQkJCWFkZHItPnNhZGJfYWRkcmVzc19wcm90byA9Ci0JCQkJcGZrZXlfcHJvdG9fZnJvbV94ZnJtKHgtPnNlbC5wcm90byk7Ci0JCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0geC0+c2VsLnByZWZpeGxlbl9zOwotCQkJYWRkci0+c2FkYl9hZGRyZXNzX3Jlc2VydmVkID0gMDsKLQotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIChhZGRyICsgMSk7Ci0JCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCQkJc2luNi0+c2luNl9wb3J0ID0geC0+c2VsLnNwb3J0OwotCQkJc2luNi0+c2luNl9mbG93aW5mbyA9IDA7Ci0JCQltZW1jcHkoJnNpbjYtPnNpbjZfYWRkciwgeC0+c2VsLnNhZGRyLmE2LAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwotCQl9Ci0JfQotI2VuZGlmCi0JZWxzZQorCWFkZHItPnNhZGJfYWRkcmVzc19wcmVmaXhsZW4gPQorCQlwZmtleV9zb2NrYWRkcl9maWxsKCZ4LT5pZC5kYWRkciwgMCwKKwkJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAoYWRkciArIDEpLAorCQkJCSAgICB4LT5wcm9wcy5mYW1pbHkpOworCWlmICghYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbikKIAkJQlVHKCk7CiAKKwlpZiAoeGZybV9hZGRyX2NtcCgmeC0+c2VsLnNhZGRyLCAmeC0+cHJvcHMuc2FkZHIsCisJCQkgIHgtPnByb3BzLmZhbWlseSkpIHsKKwkJYWRkciA9IChzdHJ1Y3Qgc2FkYl9hZGRyZXNzKikgc2tiX3B1dChza2IsCisJCQlzaXplb2Yoc3RydWN0IHNhZGJfYWRkcmVzcykrc29ja2FkZHJfc2l6ZSk7CisJCWFkZHItPnNhZGJfYWRkcmVzc19sZW4gPQorCQkJKHNpemVvZihzdHJ1Y3Qgc2FkYl9hZGRyZXNzKStzb2NrYWRkcl9zaXplKS8KKwkJCXNpemVvZih1aW50NjRfdCk7CisJCWFkZHItPnNhZGJfYWRkcmVzc19leHR0eXBlID0gU0FEQl9FWFRfQUREUkVTU19QUk9YWTsKKwkJYWRkci0+c2FkYl9hZGRyZXNzX3Byb3RvID0KKwkJCXBma2V5X3Byb3RvX2Zyb21feGZybSh4LT5zZWwucHJvdG8pOworCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0geC0+c2VsLnByZWZpeGxlbl9zOworCQlhZGRyLT5zYWRiX2FkZHJlc3NfcmVzZXJ2ZWQgPSAwOworCisJCXBma2V5X3NvY2thZGRyX2ZpbGwoJngtPnNlbC5zYWRkciwgeC0+c2VsLnNwb3J0LAorCQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopIChhZGRyICsgMSksCisJCQkJICAgIHgtPnByb3BzLmZhbWlseSk7CisJfQorCiAJLyogYXV0aCBrZXkgKi8KIAlpZiAoYWRkX2tleXMgJiYgYXV0aF9rZXlfc2l6ZSkgewogCQlrZXkgPSAoc3RydWN0IHNhZGJfa2V5ICopIHNrYl9wdXQoc2tiLApAQCAtMTg1MywxMCArMTgyNiw2IEBACiBwYXJzZV9pcHNlY3JlcXVlc3Qoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QgKnJxKQogewogCXN0cnVjdCB4ZnJtX3RtcGwgKnQgPSB4cC0+eGZybV92ZWMgKyB4cC0+eGZybV9ucjsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotI2VuZGlmCiAJaW50IG1vZGU7CiAKIAlpZiAoeHAtPnhmcm1fbnIgPj0gWEZSTV9NQVhfREVQVEgpCkBAIC0xODgxLDMxICsxODUwLDE5IEBACiAKIAkvKiBhZGRyZXNzZXMgcHJlc2VudCBvbmx5IGluIHR1bm5lbCBtb2RlICovCiAJaWYgKHQtPm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTCkgewotCQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikocnErMSk7Ci0JCXN3aXRjaChzYS0+c2FfZmFtaWx5KSB7Ci0JCWNhc2UgQUZfSU5FVDoKLQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKXNhOwotCQkJdC0+c2FkZHIuYTQgPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKLQkJCXNpbisrOwotCQkJaWYgKHNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJdC0+aWQuZGFkZHIuYTQgPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKLQkJCWJyZWFrOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCQljYXNlIEFGX0lORVQ2OgotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42KilzYTsKLQkJCW1lbWNweSh0LT5zYWRkci5hNiwgJnNpbjYtPnNpbjZfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwotCQkJc2luNisrOwotCQkJaWYgKHNpbjYtPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtY3B5KHQtPmlkLmRhZGRyLmE2LCAmc2luNi0+c2luNl9hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgorCQl1OCAqc2EgPSAodTggKikgKHJxICsgMSk7CisJCWludCBmYW1pbHksIHNvY2tsZW47CisKKwkJZmFtaWx5ID0gcGZrZXlfc29ja2FkZHJfZXh0cmFjdCgoc3RydWN0IHNvY2thZGRyICopc2EsCisJCQkJCQkmdC0+c2FkZHIpOworCQlpZiAoIWZhbWlseSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXQtPmVuY2FwX2ZhbWlseSA9IHNhLT5zYV9mYW1pbHk7CisKKwkJc29ja2xlbiA9IHBma2V5X3NvY2thZGRyX2xlbihmYW1pbHkpOworCQlpZiAocGZrZXlfc29ja2FkZHJfZXh0cmFjdCgoc3RydWN0IHNvY2thZGRyICopKHNhICsgc29ja2xlbiksCisJCQkJCSAgICZ0LT5pZC5kYWRkcikgIT0gZmFtaWx5KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXQtPmVuY2FwX2ZhbWlseSA9IGZhbWlseTsKIAl9IGVsc2UKIAkJdC0+ZW5jYXBfZmFtaWx5ID0geHAtPmZhbWlseTsKIApAQCAtMTk1Miw5ICsxOTA5LDcgQEAKIAogCWZvciAoaT0wOyBpPHhwLT54ZnJtX25yOyBpKyspIHsKIAkJdCA9IHhwLT54ZnJtX3ZlYyArIGk7Ci0JCXNvY2tsZW4gKz0gKHQtPmVuY2FwX2ZhbWlseSA9PSBBRl9JTkVUID8KLQkJCSAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSA6Ci0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJc29ja2xlbiArPSBwZmtleV9zb2NrYWRkcl9sZW4odC0+ZW5jYXBfZmFtaWx5KTsKIAl9CiAKIAlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzYWRiX21zZykgKwpAQCAtMTk4NywxOCArMTk0MiwxMiBAQAogCXN0cnVjdCBzYWRiX2FkZHJlc3MgKmFkZHI7CiAJc3RydWN0IHNhZGJfbGlmZXRpbWUgKmxpZmV0aW1lOwogCXN0cnVjdCBzYWRiX3hfcG9saWN5ICpwb2w7Ci0Jc3RydWN0IHNvY2thZGRyX2luICAgKnNpbjsKIAlzdHJ1Y3Qgc2FkYl94X3NlY19jdHggKnNlY19jdHg7CiAJc3RydWN0IHhmcm1fc2VjX2N0eCAqeGZybV9jdHg7Ci0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi0Jc3RydWN0IHNvY2thZGRyX2luNiAgKnNpbjY7Ci0jZW5kaWYKIAlpbnQgaTsKIAlpbnQgc2l6ZTsKIAlpbnQgc29ja2FkZHJfc2l6ZSA9IHBma2V5X3NvY2thZGRyX3NpemUoeHAtPmZhbWlseSk7Ci0JaW50IHNvY2tsZW4gPSAoeHAtPmZhbWlseSA9PSBBRl9JTkVUID8KLQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDoKLQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJaW50IHNvY2tsZW4gPSBwZmtleV9zb2NrYWRkcl9sZW4oeHAtPmZhbWlseSk7CiAKIAlzaXplID0gcGZrZXlfeGZybV9wb2xpY3kybXNnX3NpemUoeHApOwogCkBAIC0yMDE2LDI2ICsxOTY1LDEwIEBACiAJYWRkci0+c2FkYl9hZGRyZXNzX3Byb3RvID0gcGZrZXlfcHJvdG9fZnJvbV94ZnJtKHhwLT5zZWxlY3Rvci5wcm90byk7CiAJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IHhwLT5zZWxlY3Rvci5wcmVmaXhsZW5fczsKIAlhZGRyLT5zYWRiX2FkZHJlc3NfcmVzZXJ2ZWQgPSAwOwotCS8qIHNyYyBhZGRyZXNzICovCi0JaWYgKHhwLT5mYW1pbHkgPT0gQUZfSU5FVCkgewotCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopIChhZGRyICsgMSk7Ci0JCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCXNpbi0+c2luX2FkZHIuc19hZGRyID0geHAtPnNlbGVjdG9yLnNhZGRyLmE0OwotCQlzaW4tPnNpbl9wb3J0ID0geHAtPnNlbGVjdG9yLnNwb3J0OwotCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKLQl9Ci0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi0JZWxzZSBpZiAoeHAtPmZhbWlseSA9PSBBRl9JTkVUNikgewotCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgKGFkZHIgKyAxKTsKLQkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQkJc2luNi0+c2luNl9wb3J0ID0geHAtPnNlbGVjdG9yLnNwb3J0OwotCQlzaW42LT5zaW42X2Zsb3dpbmZvID0gMDsKLQkJbWVtY3B5KCZzaW42LT5zaW42X2FkZHIsIHhwLT5zZWxlY3Rvci5zYWRkci5hNiwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJc2luNi0+c2luNl9zY29wZV9pZCA9IDA7Ci0JfQotI2VuZGlmCi0JZWxzZQorCWlmICghcGZrZXlfc29ja2FkZHJfZmlsbCgmeHAtPnNlbGVjdG9yLnNhZGRyLAorCQkJCSB4cC0+c2VsZWN0b3Iuc3BvcnQsCisJCQkJIChzdHJ1Y3Qgc29ja2FkZHIgKikgKGFkZHIgKyAxKSwKKwkJCQkgeHAtPmZhbWlseSkpCiAJCUJVRygpOwogCiAJLyogZHN0IGFkZHJlc3MgKi8KQEAgLTIwNDgsMjYgKzE5ODEsMTAgQEAKIAlhZGRyLT5zYWRiX2FkZHJlc3NfcHJvdG8gPSBwZmtleV9wcm90b19mcm9tX3hmcm0oeHAtPnNlbGVjdG9yLnByb3RvKTsKIAlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0geHAtPnNlbGVjdG9yLnByZWZpeGxlbl9kOwogCWFkZHItPnNhZGJfYWRkcmVzc19yZXNlcnZlZCA9IDA7Ci0JaWYgKHhwLT5mYW1pbHkgPT0gQUZfSU5FVCkgewotCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopIChhZGRyICsgMSk7Ci0JCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCXNpbi0+c2luX2FkZHIuc19hZGRyID0geHAtPnNlbGVjdG9yLmRhZGRyLmE0OwotCQlzaW4tPnNpbl9wb3J0ID0geHAtPnNlbGVjdG9yLmRwb3J0OwotCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKLQl9Ci0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi0JZWxzZSBpZiAoeHAtPmZhbWlseSA9PSBBRl9JTkVUNikgewotCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgKGFkZHIgKyAxKTsKLQkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQkJc2luNi0+c2luNl9wb3J0ID0geHAtPnNlbGVjdG9yLmRwb3J0OwotCQlzaW42LT5zaW42X2Zsb3dpbmZvID0gMDsKLQkJbWVtY3B5KCZzaW42LT5zaW42X2FkZHIsIHhwLT5zZWxlY3Rvci5kYWRkci5hNiwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJc2luNi0+c2luNl9zY29wZV9pZCA9IDA7Ci0JfQotI2VuZGlmCi0JZWxzZQotCQlCVUcoKTsKKworCXBma2V5X3NvY2thZGRyX2ZpbGwoJnhwLT5zZWxlY3Rvci5kYWRkciwgeHAtPnNlbGVjdG9yLmRwb3J0LAorCQkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikgKGFkZHIgKyAxKSwKKwkJCSAgICB4cC0+ZmFtaWx5KTsKIAogCS8qIGhhcmQgdGltZSAqLwogCWxpZmV0aW1lID0gKHN0cnVjdCBzYWRiX2xpZmV0aW1lICopICBza2JfcHV0KHNrYiwKQEAgLTIxMjEsMTIgKzIwMzgsMTMgQEAKIAkJaW50IG1vZGU7CiAKIAkJcmVxX3NpemUgPSBzaXplb2Yoc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QpOwotCQlpZiAodC0+bW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKQotCQkJcmVxX3NpemUgKz0gKCh0LT5lbmNhcF9mYW1pbHkgPT0gQUZfSU5FVCA/Ci0JCQkJICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSA6Ci0JCQkJICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpICogMik7Ci0JCWVsc2UKKwkJaWYgKHQtPm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTCkgeworCQkJc29ja2xlbiA9IHBma2V5X3NvY2thZGRyX2xlbih0LT5lbmNhcF9mYW1pbHkpOworCQkJcmVxX3NpemUgKz0gc29ja2xlbiAqIDI7CisJCX0gZWxzZSB7CiAJCQlzaXplIC09IDIqc29ja2xlbjsKKwkJCXNvY2tsZW4gPSAwOworCQl9CiAJCXJxID0gKHZvaWQqKXNrYl9wdXQoc2tiLCByZXFfc2l6ZSk7CiAJCXBvbC0+c2FkYl94X3BvbGljeV9sZW4gKz0gcmVxX3NpemUvODsKIAkJbWVtc2V0KHJxLCAwLCBzaXplb2YoKnJxKSk7CkBAIC0yMTQxLDQyICsyMDU5LDE1IEBACiAJCWlmICh0LT5vcHRpb25hbCkKIAkJCXJxLT5zYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsID0gSVBTRUNfTEVWRUxfVVNFOwogCQlycS0+c2FkYl94X2lwc2VjcmVxdWVzdF9yZXFpZCA9IHQtPnJlcWlkOwotCQlpZiAodC0+bW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7Ci0JCQlzd2l0Y2ggKHQtPmVuY2FwX2ZhbWlseSkgewotCQkJY2FzZSBBRl9JTkVUOgotCQkJCXNpbiA9ICh2b2lkKikocnErMSk7Ci0JCQkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHQtPnNhZGRyLmE0OwotCQkJCXNpbi0+c2luX3BvcnQgPSAwOwotCQkJCW1lbXNldChzaW4tPnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLT5zaW5femVybykpOwotCQkJCXNpbisrOwotCQkJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB0LT5pZC5kYWRkci5hNDsKLQkJCQlzaW4tPnNpbl9wb3J0ID0gMDsKLQkJCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKLQkJCQlicmVhazsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJc2luNiA9ICh2b2lkKikocnErMSk7Ci0JCQkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQkJCQlzaW42LT5zaW42X3BvcnQgPSAwOwotCQkJCXNpbjYtPnNpbjZfZmxvd2luZm8gPSAwOwotCQkJCW1lbWNweSgmc2luNi0+c2luNl9hZGRyLCB0LT5zYWRkci5hNiwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwotCQkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwogCi0JCQkJc2luNisrOwotCQkJCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCQkJc2luNi0+c2luNl9wb3J0ID0gMDsKLQkJCQlzaW42LT5zaW42X2Zsb3dpbmZvID0gMDsKLQkJCQltZW1jcHkoJnNpbjYtPnNpbjZfYWRkciwgdC0+aWQuZGFkZHIuYTYsCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJCQlzaW42LT5zaW42X3Njb3BlX2lkID0gMDsKLQkJCQlicmVhazsKLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KKwkJaWYgKHQtPm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTCkgeworCQkJdTggKnNhID0gKHZvaWQgKikocnEgKyAxKTsKKwkJCXBma2V5X3NvY2thZGRyX2ZpbGwoJnQtPnNhZGRyLCAwLAorCQkJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKXNhLAorCQkJCQkgICAgdC0+ZW5jYXBfZmFtaWx5KTsKKwkJCXBma2V5X3NvY2thZGRyX2ZpbGwoJnQtPmlkLmRhZGRyLCAwLAorCQkJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAoc2EgKyBzb2NrbGVuKSwKKwkJCQkJICAgIHQtPmVuY2FwX2ZhbWlseSk7CiAJCX0KIAl9CiAKQEAgLTI0NTksNjEgKzIzNTAsMzEgQEAKICNpZmRlZiBDT05GSUdfTkVUX0tFWV9NSUdSQVRFCiBzdGF0aWMgaW50IHBma2V5X3NvY2thZGRyX3BhaXJfc2l6ZShzYV9mYW1pbHlfdCBmYW1pbHkpCiB7Ci0Jc3dpdGNoIChmYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCXJldHVybiBQRktFWV9BTElHTjgoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgKiAyKTsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gUEZLRVlfQUxJR044KHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSAqIDIpOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCS8qIE5PVFJFQUNIRUQgKi8KKwlyZXR1cm4gUEZLRVlfQUxJR044KHBma2V5X3NvY2thZGRyX2xlbihmYW1pbHkpICogMik7CiB9CiAKIHN0YXRpYyBpbnQgcGFyc2Vfc29ja2FkZHJfcGFpcihzdHJ1Y3Qgc2FkYl94X2lwc2VjcmVxdWVzdCAqcnEsCiAJCQkgICAgICAgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiAJCQkgICAgICAgdTE2ICpmYW1pbHkpCiB7Ci0Jc3RydWN0IHNvY2thZGRyICpzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikocnEgKyAxKTsKKwl1OCAqc2EgPSAodTggKikgKHJxICsgMSk7CisJaW50IGFmLCBzb2NrbGVuOworCiAJaWYgKHJxLT5zYWRiX3hfaXBzZWNyZXF1ZXN0X2xlbiA8Ci0JICAgIHBma2V5X3NvY2thZGRyX3BhaXJfc2l6ZShzYS0+c2FfZmFtaWx5KSkKKwkgICAgcGZrZXlfc29ja2FkZHJfcGFpcl9zaXplKCgoc3RydWN0IHNvY2thZGRyICopc2EpLT5zYV9mYW1pbHkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJewotCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0JCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7Ci0JCQlpZiAoKHNpbisxKS0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtY3B5KCZzYWRkci0+YTQsICZzaW4tPnNpbl9hZGRyLCBzaXplb2Yoc2FkZHItPmE0KSk7Ci0JCQlzaW4rKzsKLQkJCW1lbWNweSgmZGFkZHItPmE0LCAmc2luLT5zaW5fYWRkciwgc2l6ZW9mKGRhZGRyLT5hNCkpOwotCQkJKmZhbWlseSA9IEFGX0lORVQ7Ci0JCQlicmVhazsKLQkJfQotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0JCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKLQkJCWlmICgoc2luNisxKS0+c2luNl9mYW1pbHkgIT0gQUZfSU5FVDYpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1jcHkoJnNhZGRyLT5hNiwgJnNpbjYtPnNpbjZfYWRkciwKLQkJCSAgICAgICBzaXplb2Yoc2FkZHItPmE2KSk7Ci0JCQlzaW42Kys7Ci0JCQltZW1jcHkoJmRhZGRyLT5hNiwgJnNpbjYtPnNpbjZfYWRkciwKLQkJCSAgICAgICBzaXplb2YoZGFkZHItPmE2KSk7Ci0JCQkqZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCi0JZGVmYXVsdDoKKwlhZiA9IHBma2V5X3NvY2thZGRyX2V4dHJhY3QoKHN0cnVjdCBzb2NrYWRkciAqKSBzYSwKKwkJCQkgICAgc2FkZHIpOworCWlmICghYWYpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAorCXNvY2tsZW4gPSBwZmtleV9zb2NrYWRkcl9sZW4oYWYpOworCWlmIChwZmtleV9zb2NrYWRkcl9leHRyYWN0KChzdHJ1Y3Qgc29ja2FkZHIgKikgKHNhICsgc29ja2xlbiksCisJCQkJICAgZGFkZHIpICE9IGFmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpmYW1pbHkgPSBhZjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA5NCwxMCArMjk1NSw2IEBACiAJc3RydWN0IHNhZGJfbXNnICpoZHI7CiAJc3RydWN0IHNhZGJfYWRkcmVzcyAqYWRkcjsKIAlzdHJ1Y3Qgc2FkYl94X3BvbGljeSAqcG9sOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0jZW5kaWYKIAlpbnQgc29ja2FkZHJfc2l6ZTsKIAlpbnQgc2l6ZTsKIAlzdHJ1Y3Qgc2FkYl94X3NlY19jdHggKnNlY19jdHg7CkBAIC0zMTQ2LDI5ICszMDAzLDExIEBACiAJYWRkci0+c2FkYl9hZGRyZXNzX2V4dHR5cGUgPSBTQURCX0VYVF9BRERSRVNTX1NSQzsKIAlhZGRyLT5zYWRiX2FkZHJlc3NfcHJvdG8gPSAwOwogCWFkZHItPnNhZGJfYWRkcmVzc19yZXNlcnZlZCA9IDA7Ci0JaWYgKHgtPnByb3BzLmZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCWFkZHItPnNhZGJfYWRkcmVzc19wcmVmaXhsZW4gPSAzMjsKLQotCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopIChhZGRyICsgMSk7Ci0JCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCXNpbi0+c2luX2FkZHIuc19hZGRyID0geC0+cHJvcHMuc2FkZHIuYTQ7Ci0JCXNpbi0+c2luX3BvcnQgPSAwOwotCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKLQl9Ci0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi0JZWxzZSBpZiAoeC0+cHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCWFkZHItPnNhZGJfYWRkcmVzc19wcmVmaXhsZW4gPSAxMjg7Ci0KLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIChhZGRyICsgMSk7Ci0JCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCXNpbjYtPnNpbjZfcG9ydCA9IDA7Ci0JCXNpbjYtPnNpbjZfZmxvd2luZm8gPSAwOwotCQltZW1jcHkoJnNpbjYtPnNpbjZfYWRkciwKLQkJICAgICAgIHgtPnByb3BzLnNhZGRyLmE2LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwotCX0KLSNlbmRpZgotCWVsc2UKKwlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0KKwkJcGZrZXlfc29ja2FkZHJfZmlsbCgmeC0+cHJvcHMuc2FkZHIsIDAsCisJCQkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikgKGFkZHIgKyAxKSwKKwkJCQkgICAgeC0+cHJvcHMuZmFtaWx5KTsKKwlpZiAoIWFkZHItPnNhZGJfYWRkcmVzc19wcmVmaXhsZW4pCiAJCUJVRygpOwogCiAJLyogZHN0IGFkZHJlc3MgKi8KQEAgLTMxODAsMjkgKzMwMTksMTEgQEAKIAlhZGRyLT5zYWRiX2FkZHJlc3NfZXh0dHlwZSA9IFNBREJfRVhUX0FERFJFU1NfRFNUOwogCWFkZHItPnNhZGJfYWRkcmVzc19wcm90byA9IDA7CiAJYWRkci0+c2FkYl9hZGRyZXNzX3Jlc2VydmVkID0gMDsKLQlpZiAoeC0+cHJvcHMuZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IDMyOwotCi0JCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgKGFkZHIgKyAxKTsKLQkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB4LT5pZC5kYWRkci5hNDsKLQkJc2luLT5zaW5fcG9ydCA9IDA7Ci0JCW1lbXNldChzaW4tPnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLT5zaW5femVybykpOwotCX0KLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQllbHNlIGlmICh4LT5wcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IDEyODsKLQotCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgKGFkZHIgKyAxKTsKLQkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQkJc2luNi0+c2luNl9wb3J0ID0gMDsKLQkJc2luNi0+c2luNl9mbG93aW5mbyA9IDA7Ci0JCW1lbWNweSgmc2luNi0+c2luNl9hZGRyLAotCQkgICAgICAgeC0+aWQuZGFkZHIuYTYsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJc2luNi0+c2luNl9zY29wZV9pZCA9IDA7Ci0JfQotI2VuZGlmCi0JZWxzZQorCWFkZHItPnNhZGJfYWRkcmVzc19wcmVmaXhsZW4gPQorCQlwZmtleV9zb2NrYWRkcl9maWxsKCZ4LT5pZC5kYWRkciwgMCwKKwkJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAoYWRkciArIDEpLAorCQkJCSAgICB4LT5wcm9wcy5mYW1pbHkpOworCWlmICghYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbikKIAkJQlVHKCk7CiAKIAlwb2wgPSAoc3RydWN0IHNhZGJfeF9wb2xpY3kgKikgIHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IHNhZGJfeF9wb2xpY3kpKTsKQEAgLTMzMjgsMTAgKzMxNDksNiBAQAogCXN0cnVjdCBzYWRiX3NhICpzYTsKIAlzdHJ1Y3Qgc2FkYl9hZGRyZXNzICphZGRyOwogCXN0cnVjdCBzYWRiX3hfbmF0X3RfcG9ydCAqbl9wb3J0OwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0jZW5kaWYKIAlpbnQgc29ja2FkZHJfc2l6ZTsKIAlpbnQgc2l6ZTsKIAlfX3U4IHNhdHlwZSA9ICh4LT5pZC5wcm90byA9PSBJUFBST1RPX0VTUCA/IFNBREJfU0FUWVBFX0VTUCA6IDApOwpAQCAtMzM5NSwyOSArMzIxMiwxMSBAQAogCWFkZHItPnNhZGJfYWRkcmVzc19leHR0eXBlID0gU0FEQl9FWFRfQUREUkVTU19TUkM7CiAJYWRkci0+c2FkYl9hZGRyZXNzX3Byb3RvID0gMDsKIAlhZGRyLT5zYWRiX2FkZHJlc3NfcmVzZXJ2ZWQgPSAwOwotCWlmICh4LT5wcm9wcy5mYW1pbHkgPT0gQUZfSU5FVCkgewotCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0gMzI7Ci0KLQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAoYWRkciArIDEpOwotCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHgtPnByb3BzLnNhZGRyLmE0OwotCQlzaW4tPnNpbl9wb3J0ID0gMDsKLQkJbWVtc2V0KHNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7Ci0JfQotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCWVsc2UgaWYgKHgtPnByb3BzLmZhbWlseSA9PSBBRl9JTkVUNikgewotCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0gMTI4OwotCi0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAoYWRkciArIDEpOwotCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCQlzaW42LT5zaW42X3BvcnQgPSAwOwotCQlzaW42LT5zaW42X2Zsb3dpbmZvID0gMDsKLQkJbWVtY3B5KCZzaW42LT5zaW42X2FkZHIsCi0JCSAgICAgICB4LT5wcm9wcy5zYWRkci5hNiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwotCQlzaW42LT5zaW42X3Njb3BlX2lkID0gMDsKLQl9Ci0jZW5kaWYKLQllbHNlCisJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9CisJCXBma2V5X3NvY2thZGRyX2ZpbGwoJngtPnByb3BzLnNhZGRyLCAwLAorCQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopIChhZGRyICsgMSksCisJCQkJICAgIHgtPnByb3BzLmZhbWlseSk7CisJaWYgKCFhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuKQogCQlCVUcoKTsKIAogCS8qIE5BVF9UX1NQT1JUIChvbGQgcG9ydCkgKi8KQEAgLTM0MzYsMjggKzMyMzUsMTEgQEAKIAlhZGRyLT5zYWRiX2FkZHJlc3NfZXh0dHlwZSA9IFNBREJfRVhUX0FERFJFU1NfRFNUOwogCWFkZHItPnNhZGJfYWRkcmVzc19wcm90byA9IDA7CiAJYWRkci0+c2FkYl9hZGRyZXNzX3Jlc2VydmVkID0gMDsKLQlpZiAoeC0+cHJvcHMuZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IDMyOwotCi0JCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgKGFkZHIgKyAxKTsKLQkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpcGFkZHItPmE0OwotCQlzaW4tPnNpbl9wb3J0ID0gMDsKLQkJbWVtc2V0KHNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7Ci0JfQotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCWVsc2UgaWYgKHgtPnByb3BzLmZhbWlseSA9PSBBRl9JTkVUNikgewotCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0gMTI4OwotCi0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAoYWRkciArIDEpOwotCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCQlzaW42LT5zaW42X3BvcnQgPSAwOwotCQlzaW42LT5zaW42X2Zsb3dpbmZvID0gMDsKLQkJbWVtY3B5KCZzaW42LT5zaW42X2FkZHIsICZpcGFkZHItPmE2LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwotCX0KLSNlbmRpZgotCWVsc2UKKwlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0KKwkJcGZrZXlfc29ja2FkZHJfZmlsbChpcGFkZHIsIDAsCisJCQkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikgKGFkZHIgKyAxKSwKKwkJCQkgICAgeC0+cHJvcHMuZmFtaWx5KTsKKwlpZiAoIWFkZHItPnNhZGJfYWRkcmVzc19wcmVmaXhsZW4pCiAJCUJVRygpOwogCiAJLyogTkFUX1RfRFBPUlQgKG5ldyBwb3J0KSAqLwpAQCAtMzQ3NSwxMCArMzI1Nyw2IEBACiAJCQkgICAgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCkKIHsKIAlzdHJ1Y3Qgc2FkYl9hZGRyZXNzICphZGRyOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0jZW5kaWYKIAlhZGRyID0gKHN0cnVjdCBzYWRiX2FkZHJlc3MgKilza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBzYWRiX2FkZHJlc3MpICsgc2FzaXplKTsKIAlhZGRyLT5zYWRiX2FkZHJlc3NfbGVuID0gKHNpemVvZihzdHJ1Y3Qgc2FkYl9hZGRyZXNzKSArIHNhc2l6ZSkvODsKIAlhZGRyLT5zYWRiX2FkZHJlc3NfZXh0dHlwZSA9IHR5cGU7CkBAIC0zNDg3LDUwICszMjY1LDE2IEBACiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFNBREJfRVhUX0FERFJFU1NfU1JDOgotCQlpZiAoc2VsLT5mYW1pbHkgPT0gQUZfSU5FVCkgewotCQkJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IHNlbC0+cHJlZml4bGVuX3M7Ci0JCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopKGFkZHIgKyAxKTsKLQkJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCQltZW1jcHkoJnNpbi0+c2luX2FkZHIuc19hZGRyLCAmc2VsLT5zYWRkciwKLQkJCSAgICAgICBzaXplb2Yoc2luLT5zaW5fYWRkci5zX2FkZHIpKTsKLQkJCXNpbi0+c2luX3BvcnQgPSAwOwotCQkJbWVtc2V0KHNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7Ci0JCX0KLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQkJZWxzZSBpZiAoc2VsLT5mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCWFkZHItPnNhZGJfYWRkcmVzc19wcmVmaXhsZW4gPSBzZWwtPnByZWZpeGxlbl9zOwotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGFkZHIgKyAxKTsKLQkJCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCQlzaW42LT5zaW42X3BvcnQgPSAwOwotCQkJc2luNi0+c2luNl9mbG93aW5mbyA9IDA7Ci0JCQlzaW42LT5zaW42X3Njb3BlX2lkID0gMDsKLQkJCW1lbWNweSgmc2luNi0+c2luNl9hZGRyLnM2X2FkZHIsICZzZWwtPnNhZGRyLAotCQkJICAgICAgIHNpemVvZihzaW42LT5zaW42X2FkZHIuczZfYWRkcikpOwotCQl9Ci0jZW5kaWYKKwkJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IHNlbC0+cHJlZml4bGVuX3M7CisJCXBma2V5X3NvY2thZGRyX2ZpbGwoJnNlbC0+c2FkZHIsIDAsCisJCQkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikoYWRkciArIDEpLAorCQkJCSAgICBzZWwtPmZhbWlseSk7CiAJCWJyZWFrOwogCWNhc2UgU0FEQl9FWFRfQUREUkVTU19EU1Q6Ci0JCWlmIChzZWwtPmZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0gc2VsLT5wcmVmaXhsZW5fZDsKLQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikoYWRkciArIDEpOwotCQkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJCW1lbWNweSgmc2luLT5zaW5fYWRkci5zX2FkZHIsICZzZWwtPmRhZGRyLAotCQkJICAgICAgIHNpemVvZihzaW4tPnNpbl9hZGRyLnNfYWRkcikpOwotCQkJc2luLT5zaW5fcG9ydCA9IDA7Ci0JCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKLQkJfQotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCQllbHNlIGlmIChzZWwtPmZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJYWRkci0+c2FkYl9hZGRyZXNzX3ByZWZpeGxlbiA9IHNlbC0+cHJlZml4bGVuX2Q7Ci0JCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoYWRkciArIDEpOwotCQkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQkJCXNpbjYtPnNpbjZfcG9ydCA9IDA7Ci0JCQlzaW42LT5zaW42X2Zsb3dpbmZvID0gMDsKLQkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwotCQkJbWVtY3B5KCZzaW42LT5zaW42X2FkZHIuczZfYWRkciwgJnNlbC0+ZGFkZHIsCi0JCQkgICAgICAgc2l6ZW9mKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyKSk7Ci0JCX0KLSNlbmRpZgorCQlhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuID0gc2VsLT5wcmVmaXhsZW5fZDsKKwkJcGZrZXlfc29ja2FkZHJfZmlsbCgmc2VsLT5kYWRkciwgMCwKKwkJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKShhZGRyICsgMSksCisJCQkJICAgIHNlbC0+ZmFtaWx5KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNTQ1LDEwICszMjg5LDggQEAKIAkJCSAgICB4ZnJtX2FkZHJlc3NfdCAqc3JjLCB4ZnJtX2FkZHJlc3NfdCAqZHN0KQogewogCXN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0ICpycTsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotI2VuZGlmCisJdTggKnNhOworCWludCBzb2NrbGVuID0gcGZrZXlfc29ja2FkZHJfbGVuKGZhbWlseSk7CiAJaW50IHNpemVfcmVxOwogCiAJc2l6ZV9yZXEgPSBzaXplb2Yoc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QpICsKQEAgLTM1NjIsMzggKzMzMDQsMTAgQEAKIAlycS0+c2FkYl94X2lwc2VjcmVxdWVzdF9sZXZlbCA9IGxldmVsOwogCXJxLT5zYWRiX3hfaXBzZWNyZXF1ZXN0X3JlcWlkID0gcmVxaWQ7CiAKLQlzd2l0Y2ggKGZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShycSArIDEpOwotCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQltZW1jcHkoJnNpbi0+c2luX2FkZHIuc19hZGRyLCBzcmMsCi0JCSAgICAgICBzaXplb2Yoc2luLT5zaW5fYWRkci5zX2FkZHIpKTsKLQkJc2luKys7Ci0JCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCW1lbWNweSgmc2luLT5zaW5fYWRkci5zX2FkZHIsIGRzdCwKLQkJICAgICAgIHNpemVvZihzaW4tPnNpbl9hZGRyLnNfYWRkcikpOwotCQlicmVhazsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQljYXNlIEFGX0lORVQ2OgotCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikocnEgKyAxKTsKLQkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQkJc2luNi0+c2luNl9wb3J0ID0gMDsKLQkJc2luNi0+c2luNl9mbG93aW5mbyA9IDA7Ci0JCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwotCQltZW1jcHkoJnNpbjYtPnNpbjZfYWRkci5zNl9hZGRyLCBzcmMsCi0JCSAgICAgICBzaXplb2Yoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIpKTsKLQkJc2luNisrOwotCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCQlzaW42LT5zaW42X3BvcnQgPSAwOwotCQlzaW42LT5zaW42X2Zsb3dpbmZvID0gMDsKLQkJc2luNi0+c2luNl9zY29wZV9pZCA9IDA7Ci0JCW1lbWNweSgmc2luNi0+c2luNl9hZGRyLnM2X2FkZHIsIGRzdCwKLQkJICAgICAgIHNpemVvZihzaW42LT5zaW42X2FkZHIuczZfYWRkcikpOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6CisJc2EgPSAodTggKikgKHJxICsgMSk7CisJaWYgKCFwZmtleV9zb2NrYWRkcl9maWxsKHNyYywgMCwgKHN0cnVjdCBzb2NrYWRkciAqKXNhLCBmYW1pbHkpIHx8CisJICAgICFwZmtleV9zb2NrYWRkcl9maWxsKGRzdCwgMCwgKHN0cnVjdCBzb2NrYWRkciAqKShzYSArIHNvY2tsZW4pLCBmYW1pbHkpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDk3MTAxZGMuLjViY2M0NTIgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMTI4LDEwICsxMjgsOCBAQAogCiBzdGF0aWMgdm9pZCBsbGNfdWlfc2tfaW5pdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29jayAqc2spCiB7CisJc29ja19ncmFmdChzaywgc29jayk7CiAJc2stPnNrX3R5cGUJPSBzb2NrLT50eXBlOwotCXNrLT5za19zbGVlcAk9ICZzb2NrLT53YWl0OwotCXNrLT5za19zb2NrZXQJPSBzb2NrOwotCXNvY2stPnNrCT0gc2s7CiAJc29jay0+b3BzCT0gJmxsY191aV9vcHM7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2lucHV0LmMgYi9uZXQvbGxjL2xsY19pbnB1dC5jCmluZGV4IDFjNDVmMTcuLjU3YWQ5NzQgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2lucHV0LmMKKysrIGIvbmV0L2xsYy9sbGNfaW5wdXQuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJaW50ICgqcmN2KShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCWdvdG8gZHJvcDsKIAogCS8qCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvS2NvbmZpZyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCmluZGV4IGEyNGI0NTkuLjgwZDY5MzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9LY29uZmlnCisrKyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCkBAIC03LDcgKzcsNiBAQAogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgQ0ZHODAyMTEKLQlzZWxlY3QgTkVUX1NDSF9GSUZPCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTEKIAkgIG5ldHdvcmtpbmcgc3RhY2suCkBAIC0xNSw2ICsxNCwxNCBAQAogbWVudSAiUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24iCiAJZGVwZW5kcyBvbiBNQUM4MDIxMSAhPSBuCiAKK2NvbmZpZyBNQUM4MDIxMV9SQ19QSUQKKwlib29sICJQSUQgY29udHJvbGxlciBiYXNlZCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIiBpZiBFTUJFRERFRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBUWCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGZvcgorCSAgbWFjODAyMTEgdGhhdCB1c2VzIGEgUElEIGNvbnRyb2xsZXIgdG8gc2VsZWN0IHRoZSBUWAorCSAgcmF0ZS4KKwogY2hvaWNlCiAJcHJvbXB0ICJEZWZhdWx0IHJhdGUgY29udHJvbCBhbGdvcml0aG0iCiAJZGVmYXVsdCBNQUM4MDIxMV9SQ19ERUZBVUxUX1BJRApAQCAtMjYsNDAgKzMzLDE5IEBACiAKIGNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX1BJRAogCWJvb2wgIlBJRCBjb250cm9sbGVyIGJhc2VkIHJhdGUgY29udHJvbCBhbGdvcml0aG0iCi0Jc2VsZWN0IE1BQzgwMjExX1JDX1BJRAorCWRlcGVuZHMgb24gTUFDODAyMTFfUkNfUElECiAJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoZSBQSUQgY29udHJvbGxlciBiYXNlZCByYXRlIGNvbnRyb2wgYXMgdGhlCiAJICBkZWZhdWx0IHJhdGUgY29udHJvbCBhbGdvcml0aG0uIFlvdSBzaG91bGQgY2hvb3NlCiAJICB0aGlzIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAKLWNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX05PTkUKLQlib29sICJObyBkZWZhdWx0IGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIEVNQkVEREVECi0JaGVscAotCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIHdpbGwgc2VsZWN0IG5vIGRlZmF1bHQgYWxnb3JpdGhtCi0JICBhbmQgYWxsb3cgeW91IHRvIG5vdCBidWlsZCBhbnkuIERvIG5vdCBjaG9vc2UgdGhpcwotCSAgb3B0aW9uIHVubGVzcyB5b3Uga25vdyB5b3VyIGRyaXZlciBjb21lcyB3aXRoIGFub3RoZXIKLQkgIHN1aXRhYmxlIGFsZ29yaXRobS4KIGVuZGNob2ljZQogCi1jb21tZW50ICJTZWxlY3RpbmcgJ3knIGZvciBhbiBhbGdvcml0aG0gd2lsbCIKLWNvbW1lbnQgImJ1aWxkIHRoZSBhbGdvcml0aG0gaW50byBtYWM4MDIxMS4iCi0KIGNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUCiAJc3RyaW5nCiAJZGVmYXVsdCAicGlkIiBpZiBNQUM4MDIxMV9SQ19ERUZBVUxUX1BJRAogCWRlZmF1bHQgIiIKIAotY29uZmlnIE1BQzgwMjExX1JDX1BJRAotCXRyaXN0YXRlICJQSUQgY29udHJvbGxlciBiYXNlZCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBUWCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGZvcgotCSAgbWFjODAyMTEgdGhhdCB1c2VzIGEgUElEIGNvbnRyb2xsZXIgdG8gc2VsZWN0IHRoZSBUWAotCSAgcmF0ZS4KLQotCSAgU2F5IFkgb3IgTSB1bmxlc3MgeW91J3JlIHN1cmUgeW91IHdhbnQgdG8gdXNlIGEKLQkgIGRpZmZlcmVudCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtLgotCiBlbmRtZW51CiAKIGNvbmZpZyBNQUM4MDIxMV9NRVNICkBAIC04OSwxMCArNzUsMTYgQEAKIAogCSAgU2F5IE4gdW5sZXNzIHlvdSBrbm93IHlvdSBuZWVkIHRoaXMuCiAKK21lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVQorCWJvb2wgIlNlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXMiCisJZGVwZW5kcyBvbiBNQUM4MDIxMQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGNvbGxlY3RzIHZhcmlvdXMgbWFjODAyMTEgZGVidWcgc2V0dGluZ3MuCisKIGNvbmZpZyBNQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UCiAJYm9vbCAiRW5hYmxlIHBhY2tldCBhbGlnbm1lbnQgZGVidWdnaW5nIgotCWRlcGVuZHMgb24gTUFDODAyMTEKLQloZWxwCisJZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VCisJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gaXMgcmVjb21tZW5kZWQgZm9yIGRyaXZlciBhdXRob3JzIGFuZCBzdHJvbmdseQogCSAgZGlzY291cmFnZWQgZm9yIGV2ZXJ5Ym9keSBlbHNlLCBpdCB3aWxsIHRyaWdnZXIgYSB3YXJuaW5nCiAJICB3aGVuIGEgZHJpdmVyIGhhbmRzIG1hYzgwMjExIGEgYnVmZmVyIHRoYXQgaXMgYWxpZ25lZCBpbgpAQCAtMTAxLDMzICs5Myw5NSBAQAogCiAJICBTYXkgTiB1bmxlc3MgeW91J3JlIHdyaXRpbmcgYSBtYWM4MDIxMSBiYXNlZCBkcml2ZXIuCiAKLWNvbmZpZyBNQUM4MDIxMV9ERUJVRwotCWJvb2wgIkVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IgotCWRlcGVuZHMgb24gTUFDODAyMTEKK2NvbmZpZyBNQUM4MDIxMV9OT0lOTElORQorCWJvb2wgIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnMiCisJZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VCiAJLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgZGVidWcgdHJhY2luZyBvdXRwdXQgZm9yIHRoZQotCSAgaWVlZTgwMjExIG5ldHdvcmsgc3RhY2suCisJICBUaGlzIG9wdGlvbiBhZmZlY3RzIGNvZGUgZ2VuZXJhdGlvbiBpbiBtYWM4MDIxMSwgd2hlbgorCSAgc2VsZWN0ZWQgc29tZSBmdW5jdGlvbnMgYXJlIG1hcmtlZCAibm9pbmxpbmUiIHRvIGFsbG93CisJICBlYXNpZXIgZGVidWdnaW5nIG9mIHByb2JsZW1zIGluIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZQorCSAgcGF0aHMuCiAKLQkgIElmIHlvdSBhcmUgbm90IHRyeWluZyB0byBkZWJ1ZyBvciBkZXZlbG9wIHRoZSBpZWVlODAyMTEKLQkgIHN1YnN5c3RlbSwgeW91IG1vc3QgbGlrZWx5IHdhbnQgdG8gc2F5IE4gaGVyZS4KKwkgIFRoaXMgb3B0aW9uIGluY3JlYXNlcyBjb2RlIHNpemUgYSBiaXQgYW5kIGluc2VydHMgYSBsb3QKKwkgIG9mIGZ1bmN0aW9uIGNhbGxzIGluIHRoZSBjb2RlLCBidXQgaXMgb3RoZXJ3aXNlIHNhZmUgdG8KKwkgIGVuYWJsZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTiB1bmxlc3MgeW91IGV4cGVjdCB0byBiZSBmaW5kaW5nIHByb2JsZW1zCisJICBpbiBtYWM4MDIxMS4KKworY29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwlib29sICJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQiCisJZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VCisJLS0taGVscC0tLQorCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGNhdXNlcyBtYWM4MDIxMSB0byBwcmludCBvdXQKKwkgIG1hbnkgZGVidWdnaW5nIG1lc3NhZ2VzLiBJdCBzaG91bGQgbm90IGJlIHNlbGVjdGVkCisJICBvbiBwcm9kdWN0aW9uIHN5c3RlbXMgYXMgc29tZSBvZiB0aGUgbWVzc2FnZXMgYXJlCisJICByZW1vdGVseSB0cmlnZ2VyYWJsZS4KKworCSAgRG8gbm90IHNlbGVjdCB0aGlzIG9wdGlvbi4KIAogY29uZmlnIE1BQzgwMjExX0hUX0RFQlVHCi0JYm9vbCAiRW5hYmxlIEhUIGRlYnVnZ2luZyBvdXRwdXQiCi0JZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVRworCWJvb2wgIlZlcmJvc2UgSFQgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgODAyLjExbiBIaWdoIFRocm91Z2hwdXQgZmVhdHVyZXMKIAkgIGRlYnVnIHRyYWNpbmcgb3V0cHV0LgogCi0JICBJZiB5b3UgYXJlIG5vdCB0cnlpbmcgdG8gZGVidWcgb2YgZGV2ZWxvcCB0aGUgaWVlZTgwMjExCi0JICBzdWJzeXN0ZW0sIHlvdSBtb3N0IGxpa2VseSB3YW50IHRvIHNheSBOIGhlcmUuCisJICBJdCBzaG91bGQgbm90IGJlIHNlbGVjdGVkIG9uIHByb2R1Y3Rpb24gc3lzdGVtcyBhcyBzb21lCisJICBvZiB0aGUgbWVzc2FnZXMgYXJlIHJlbW90ZWx5IHRyaWdnZXJhYmxlLgogCi1jb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCWJvb2wgIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dCIKLQlkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHCisJICBEbyBub3Qgc2VsZWN0IHRoaXMgb3B0aW9uLgorCitjb25maWcgTUFDODAyMTFfVEtJUF9ERUJVRworCWJvb2wgIlZlcmJvc2UgVEtJUCBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VCisJLS0taGVscC0tLQorCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGNhdXNlcyBtYWM4MDIxMSB0byBwcmludCBvdXQKKwkgIHZlcnkgdmVyYm9zZSBUS0lQIGRlYnVnZ2luZyBtZXNzYWdlcy4gSXQgc2hvdWxkIG5vdAorCSAgYmUgc2VsZWN0ZWQgb24gcHJvZHVjdGlvbiBzeXN0ZW1zIGFzIHRob3NlIG1lc3NhZ2VzCisJICBhcmUgcmVtb3RlbHkgdHJpZ2dlcmFibGUuCisKKwkgIERvIG5vdCBzZWxlY3QgdGhpcyBvcHRpb24uCisKK2NvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHCisJYm9vbCAiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlUKKwktLS1oZWxwLS0tCisJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gY2F1c2VzIG1hYzgwMjExIHRvIHByaW50IG91dAorCSAgdmVyeSB2ZXJib3NlIElCU1MgZGVidWdnaW5nIG1lc3NhZ2VzLiBJdCBzaG91bGQgbm90CisJICBiZSBzZWxlY3RlZCBvbiBwcm9kdWN0aW9uIHN5c3RlbXMgYXMgdGhvc2UgbWVzc2FnZXMKKwkgIGFyZSByZW1vdGVseSB0cmlnZ2VyYWJsZS4KKworCSAgRG8gbm90IHNlbGVjdCB0aGlzIG9wdGlvbi4KKworY29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKKwlib29sICJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlUKKwktLS1oZWxwLS0tCisJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gY2F1c2VzIG1hYzgwMjExIHRvIHByaW50IG91dCB2ZXJ5CisJICB2ZXJib3NlIHBvd2VyIHNhdmUgbW9kZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgKHdoZW4gbWFjODAyMTEKKwkgIGlzIGFuIEFQIGFuZCBoYXMgcG93ZXIgc2F2aW5nIHN0YXRpb25zLikKKwkgIEl0IHNob3VsZCBub3QgYmUgc2VsZWN0ZWQgb24gcHJvZHVjdGlvbiBzeXN0ZW1zIGFzIHRob3NlCisJICBtZXNzYWdlcyBhcmUgcmVtb3RlbHkgdHJpZ2dlcmFibGUuCisKKwkgIERvIG5vdCBzZWxlY3QgdGhpcyBvcHRpb24uCisKK2NvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX01QTF9ERUJVRworCWJvb2wgIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVQorCWRlcGVuZHMgb24gTUFDODAyMTFfTUVTSAorCS0tLWhlbHAtLS0KKwkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBjYXVzZXMgbWFjODAyMTEgdG8gcHJpbnQgb3V0IHZlcnkKKwkgIHZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nIG1lc3NhZ2VzICh3aGVuIG1hYzgwMjExCisJICBpcyB0YWtpbmcgcGFydCBpbiBhIG1lc2ggbmV0d29yaykuCisJICBJdCBzaG91bGQgbm90IGJlIHNlbGVjdGVkIG9uIHByb2R1Y3Rpb24gc3lzdGVtcyBhcyB0aG9zZQorCSAgbWVzc2FnZXMgYXJlIHJlbW90ZWx5IHRyaWdnZXJhYmxlLgorCisJICBEbyBub3Qgc2VsZWN0IHRoaXMgb3B0aW9uLgogCiBjb25maWcgTUFDODAyMTFfTE9XVFhfRlJBTUVfRFVNUAogCWJvb2wgIkRlYnVnIGZyYW1lIGR1bXBpbmciCi0JZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVRworCWRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVQogCS0tLWhlbHAtLS0KIAkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBzdGFjayB0bwogCSAgcHJpbnQgYSBtZXNzYWdlIGZvciBlYWNoIGZyYW1lIHRoYXQgaXMgaGFuZGVkCkBAIC0xMzgsMzAgKzE5MiwyMCBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTiBhbmQgaW5zZXJ0IHRoZSBkZWJ1Z2dpbmcgY29kZQogCSAgeW91IHJlcXVpcmUgaW50byB0aGUgZHJpdmVyIHlvdSBhcmUgZGVidWdnaW5nLgogCi1jb25maWcgVEtJUF9ERUJVRwotCWJvb2wgIlRLSVAgZGVidWdnaW5nIgotCWRlcGVuZHMgb24gTUFDODAyMTFfREVCVUcKLQogY29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTCiAJYm9vbCAiRXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nIgotCWRlcGVuZHMgb24gTUFDODAyMTFfREVCVUcKLQotY29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUcKLQlib29sICJTdXBwb3J0IGZvciBJQlNTIHRlc3RpbmciCi0JZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVRworCWRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVQorCWRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdGUwogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBkZWJ1ZyB0aGUgSUJTUyBjb2RlLgorCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGNhdXNlcyBtYWM4MDIxMSB0byBrZWVwIGFkZGl0aW9uYWwKKwkgIGFuZCB2ZXJ5IHZlcmJvc2Ugc3RhdGlzdGljcyBhYm91dCBUWCBhbmQgUlggaGFuZGxlciB1c2UKKwkgIGFuZCBzaG93IHRoZW0gaW4gZGVidWdmcy4KIAotY29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKLQlib29sICJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZyIKLQlkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSB0byBwcmludCBvdXQgdmVyYm9zZSBwb3dlcnNhdmUKLQkgIG1vZGUgZGVidWcgbWVzc2FnZXMuCisJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgTUFDODAyMTFfVkVSQk9TRV9NUExfREVCVUcKLQlib29sICJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZyIKLQlkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHICYmIE1BQzgwMjExX01FU0gKK2NvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX1NQRUNUX01HTVRfREVCVUcKKwlib29sICJWZXJib3NlIFNwZWN0cnVtIE1hbmFnZW1lbnQgKElFRUUgODAyLjExaClkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VCiAJLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSB0byBwcmludCBvdXQgdmVyYm9zZSBtZXNoIHBlZXIgbGluaworCSAgU2F5IFkgaGVyZSB0byBwcmludCBvdXQgdmVyYm9zZSBTcGVjdHJ1bSBNYW5hZ2VtZW50IChJRUVFIDgwMi4xMWgpCiAJICBkZWJ1ZyBtZXNzYWdlcy4KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCA0ZTU4NDdmLi5hMTY5YjAyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC0xLDEzICsxLDUgQEAKIG9iai0kKENPTkZJR19NQUM4MDIxMSkgKz0gbWFjODAyMTEubwogCi0jIG9iamVjdHMgZm9yIFBJRCBhbGdvcml0aG0KLXJjODAyMTFfcGlkLXkgOj0gcmM4MDIxMV9waWRfYWxnby5vCi1yYzgwMjExX3BpZC0kKENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTKSArPSByYzgwMjExX3BpZF9kZWJ1Z2ZzLm8KLQotIyBidWlsZCBoZWxwZXIgZm9yIFBJRCBhbGdvcml0aG0KLXJjLXBpZC15IDo9ICQocmM4MDIxMV9waWQteSkKLXJjLXBpZC1tIDo9IHJjODAyMTFfcGlkLm8KLQogIyBtYWM4MDIxMSBvYmplY3RzCiBtYWM4MDIxMS15IDo9IFwKIAltYWluLm8gXApAQCAtMjYsMTAgKzE4LDEwIEBACiAJdHgubyBcCiAJa2V5Lm8gXAogCXV0aWwubyBcCisJd21lLm8gXAogCWV2ZW50Lm8KIAogbWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTEVEUykgKz0gbGVkLm8KLW1hYzgwMjExLSQoQ09ORklHX05FVF9TQ0hFRCkgKz0gd21lLm8KIG1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IFwKIAlkZWJ1Z2ZzLm8gXAogCWRlYnVnZnNfc3RhLm8gXApAQCAtNDIsMTAgKzM0LDggQEAKIAltZXNoX3BsaW5rLm8gXAogCW1lc2hfaHdtcC5vCiAKKyMgb2JqZWN0cyBmb3IgUElEIGFsZ29yaXRobQorcmM4MDIxMV9waWQteSA6PSByYzgwMjExX3BpZF9hbGdvLm8KK3JjODAyMTFfcGlkLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IHJjODAyMTFfcGlkX2RlYnVnZnMubwogCi0jIEJ1aWxkIHJhdGUgY29udHJvbCBhbGdvcml0aG0ocykKLUNGTEFHU19yYzgwMjExX3BpZF9hbGdvLm8gKz0gLURSQzgwMjExX1BJRF9DT01QSUxFCi1tYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9SQ19QSUQpICs9ICQocmMtcGlkLSQoQ09ORklHX01BQzgwMjExX1JDX1BJRCkpCi0KLSMgTW9kdWxhciByYXRlIGFsZ29yaXRobXMgYXJlIGFzc2lnbmVkIHRvIG1hYzgwMjExLW0gLSBtYWtlIHNlcGFyYXRlIG1vZHVsZXMKLW9iai1tICs9ICQobWFjODAyMTEtbSkKK21hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX1JDX1BJRCkgKz0gJChyYzgwMjExX3BpZC15KQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2Flc19jY20uYyBiL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMKaW5kZXggNTlmMTY5MS4uYTg3Y2IzYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2Flc19jY20uYworKysgYi9uZXQvbWFjODAyMTEvYWVzX2NjbS5jCkBAIC0xNiwzMSArMTYsMjggQEAKICNpbmNsdWRlICJrZXkuaCIKICNpbmNsdWRlICJhZXNfY2NtLmgiCiAKLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX2Flc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCi0JCQkJICBjb25zdCB1OCBwdFsxNl0sIHU4IGN0WzE2XSkKLXsKLQljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKHRmbSwgY3QsIHB0KTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWVzX2NjbV9wcmVwYXJlKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpiXzAsIHU4ICphYWQsCi0JCQkJICAgdTggKmIsIHU4ICpzXzAsIHU4ICphKQorc3RhdGljIHZvaWQgYWVzX2NjbV9wcmVwYXJlKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpzY3JhdGNoLCB1OCAqYSkKIHsKIAlpbnQgaTsKKwl1OCAqYl8wLCAqYWFkLCAqYiwgKnNfMDsKIAotCWllZWU4MDIxMV9hZXNfZW5jcnlwdCh0Zm0sIGJfMCwgYik7CisJYl8wID0gc2NyYXRjaCArIDMgKiBBRVNfQkxPQ0tfTEVOOworCWFhZCA9IHNjcmF0Y2ggKyA0ICogQUVTX0JMT0NLX0xFTjsKKwliID0gc2NyYXRjaDsKKwlzXzAgPSBzY3JhdGNoICsgQUVTX0JMT0NLX0xFTjsKKworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBiLCBiXzApOwogCiAJLyogRXh0cmEgQXV0aGVudGljYXRlLW9ubHkgZGF0YSAoYWx3YXlzIHR3byBBRVMgYmxvY2tzKSAqLwogCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOOyBpKyspCiAJCWFhZFtpXSBePSBiW2ldOwotCWllZWU4MDIxMV9hZXNfZW5jcnlwdCh0Zm0sIGFhZCwgYik7CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIGIsIGFhZCk7CiAKIAlhYWQgKz0gQUVTX0JMT0NLX0xFTjsKIAogCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOOyBpKyspCiAJCWFhZFtpXSBePSBiW2ldOwotCWllZWU4MDIxMV9hZXNfZW5jcnlwdCh0Zm0sIGFhZCwgYSk7CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIGEsIGFhZCk7CiAKIAkvKiBNYXNrIG91dCBiaXRzIGZyb20gYXV0aC1vbmx5LWJfMCAqLwogCWJfMFswXSAmPSAweDA3OwpAQCAtNDgsMjQgKzQ1LDI2IEBACiAJLyogU18wIGlzIHVzZWQgdG8gZW5jcnlwdCBUICg9IE1JQykgKi8KIAliXzBbMTRdID0gMDsKIAliXzBbMTVdID0gMDsKLQlpZWVlODAyMTFfYWVzX2VuY3J5cHQodGZtLCBiXzAsIHNfMCk7CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIHNfMCwgYl8wKTsKIH0KIAogCiB2b2lkIGllZWU4MDIxMV9hZXNfY2NtX2VuY3J5cHQoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsCi0JCQkgICAgICAgdTggKmJfMCwgdTggKmFhZCwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKKwkJCSAgICAgICB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAogCQkJICAgICAgIHU4ICpjZGF0YSwgdTggKm1pYykKIHsKIAlpbnQgaSwgaiwgbGFzdF9sZW4sIG51bV9ibG9ja3M7Ci0JdTggKnBvcywgKmNwb3MsICpiLCAqc18wLCAqZTsKKwl1OCAqcG9zLCAqY3BvcywgKmIsICpzXzAsICplLCAqYl8wLCAqYWFkOwogCiAJYiA9IHNjcmF0Y2g7CiAJc18wID0gc2NyYXRjaCArIEFFU19CTE9DS19MRU47CiAJZSA9IHNjcmF0Y2ggKyAyICogQUVTX0JMT0NLX0xFTjsKKwliXzAgPSBzY3JhdGNoICsgMyAqIEFFU19CTE9DS19MRU47CisJYWFkID0gc2NyYXRjaCArIDQgKiBBRVNfQkxPQ0tfTEVOOwogCiAJbnVtX2Jsb2NrcyA9IERJVl9ST1VORF9VUChkYXRhX2xlbiwgQUVTX0JMT0NLX0xFTik7CiAJbGFzdF9sZW4gPSBkYXRhX2xlbiAlIEFFU19CTE9DS19MRU47Ci0JYWVzX2NjbV9wcmVwYXJlKHRmbSwgYl8wLCBhYWQsIGIsIHNfMCwgYik7CisJYWVzX2NjbV9wcmVwYXJlKHRmbSwgc2NyYXRjaCwgYik7CiAKIAkvKiBQcm9jZXNzIHBheWxvYWQgYmxvY2tzICovCiAJcG9zID0gZGF0YTsKQEAgLTc3LDExICs3NiwxMSBAQAogCQkvKiBBdXRoZW50aWNhdGlvbiBmb2xsb3dlZCBieSBlbmNyeXB0aW9uICovCiAJCWZvciAoaSA9IDA7IGkgPCBibGVuOyBpKyspCiAJCQliW2ldIF49IHBvc1tpXTsKLQkJaWVlZTgwMjExX2Flc19lbmNyeXB0KHRmbSwgYiwgYik7CisJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBiLCBiKTsKIAogCQliXzBbMTRdID0gKGogPj4gOCkgJiAweGZmOwogCQliXzBbMTVdID0gaiAmIDB4ZmY7Ci0JCWllZWU4MDIxMV9hZXNfZW5jcnlwdCh0Zm0sIGJfMCwgZSk7CisJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBlLCBiXzApOwogCQlmb3IgKGkgPSAwOyBpIDwgYmxlbjsgaSsrKQogCQkJKmNwb3MrKyA9ICpwb3MrKyBeIGVbaV07CiAJfQpAQCAtOTIsMTkgKzkxLDIwIEBACiAKIAogaW50IGllZWU4MDIxMV9hZXNfY2NtX2RlY3J5cHQoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsCi0JCQkgICAgICB1OCAqYl8wLCB1OCAqYWFkLCB1OCAqY2RhdGEsIHNpemVfdCBkYXRhX2xlbiwKLQkJCSAgICAgIHU4ICptaWMsIHU4ICpkYXRhKQorCQkJICAgICAgdTggKmNkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMsIHU4ICpkYXRhKQogewogCWludCBpLCBqLCBsYXN0X2xlbiwgbnVtX2Jsb2NrczsKLQl1OCAqcG9zLCAqY3BvcywgKmIsICpzXzAsICphOworCXU4ICpwb3MsICpjcG9zLCAqYiwgKnNfMCwgKmEsICpiXzAsICphYWQ7CiAKIAliID0gc2NyYXRjaDsKIAlzXzAgPSBzY3JhdGNoICsgQUVTX0JMT0NLX0xFTjsKIAlhID0gc2NyYXRjaCArIDIgKiBBRVNfQkxPQ0tfTEVOOworCWJfMCA9IHNjcmF0Y2ggKyAzICogQUVTX0JMT0NLX0xFTjsKKwlhYWQgPSBzY3JhdGNoICsgNCAqIEFFU19CTE9DS19MRU47CiAKIAludW1fYmxvY2tzID0gRElWX1JPVU5EX1VQKGRhdGFfbGVuLCBBRVNfQkxPQ0tfTEVOKTsKIAlsYXN0X2xlbiA9IGRhdGFfbGVuICUgQUVTX0JMT0NLX0xFTjsKLQlhZXNfY2NtX3ByZXBhcmUodGZtLCBiXzAsIGFhZCwgYiwgc18wLCBhKTsKKwlhZXNfY2NtX3ByZXBhcmUodGZtLCBzY3JhdGNoLCBhKTsKIAogCS8qIFByb2Nlc3MgcGF5bG9hZCBibG9ja3MgKi8KIAljcG9zID0gY2RhdGE7CkBAIC0xMTYsMTMgKzExNiwxMiBAQAogCQkvKiBEZWNyeXB0aW9uIGZvbGxvd2VkIGJ5IGF1dGhlbnRpY2F0aW9uICovCiAJCWJfMFsxNF0gPSAoaiA+PiA4KSAmIDB4ZmY7CiAJCWJfMFsxNV0gPSBqICYgMHhmZjsKLQkJaWVlZTgwMjExX2Flc19lbmNyeXB0KHRmbSwgYl8wLCBiKTsKKwkJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIGIsIGJfMCk7CiAJCWZvciAoaSA9IDA7IGkgPCBibGVuOyBpKyspIHsKIAkJCSpwb3MgPSAqY3BvcysrIF4gYltpXTsKIAkJCWFbaV0gXj0gKnBvcysrOwogCQl9Ci0KLQkJaWVlZTgwMjExX2Flc19lbmNyeXB0KHRmbSwgYSwgYSk7CisJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBhLCBhKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ0NNUF9NSUNfTEVOOyBpKyspIHsKQEAgLTEzNCw3ICsxMzMsNyBAQAogfQogCiAKLXN0cnVjdCBjcnlwdG9fY2lwaGVyICogaWVlZTgwMjExX2Flc19rZXlfc2V0dXBfZW5jcnlwdChjb25zdCB1OCBrZXlbXSkKK3N0cnVjdCBjcnlwdG9fY2lwaGVyICppZWVlODAyMTFfYWVzX2tleV9zZXR1cF9lbmNyeXB0KGNvbnN0IHU4IGtleVtdKQogewogCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm07CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmggYi9uZXQvbWFjODAyMTEvYWVzX2NjbS5oCmluZGV4IDg4NWYxOTAuLjZlNzgyMGUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmgKKysrIGIvbmV0L21hYzgwMjExL2Flc19jY20uaApAQCAtMTQsMTIgKzE0LDEyIEBACiAKICNkZWZpbmUgQUVTX0JMT0NLX0xFTiAxNgogCi1zdHJ1Y3QgY3J5cHRvX2NpcGhlciAqIGllZWU4MDIxMV9hZXNfa2V5X3NldHVwX2VuY3J5cHQoY29uc3QgdTgga2V5W10pOworc3RydWN0IGNyeXB0b19jaXBoZXIgKmllZWU4MDIxMV9hZXNfa2V5X3NldHVwX2VuY3J5cHQoY29uc3QgdTgga2V5W10pOwogdm9pZCBpZWVlODAyMTFfYWVzX2NjbV9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpzY3JhdGNoLAotCQkJICAgICAgIHU4ICpiXzAsIHU4ICphYWQsIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sCisJCQkgICAgICAgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKIAkJCSAgICAgICB1OCAqY2RhdGEsIHU4ICptaWMpOwogaW50IGllZWU4MDIxMV9hZXNfY2NtX2RlY3J5cHQoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsCi0JCQkgICAgICB1OCAqYl8wLCB1OCAqYWFkLCB1OCAqY2RhdGEsIHNpemVfdCBkYXRhX2xlbiwKKwkJCSAgICAgIHU4ICpjZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAogCQkJICAgICAgdTggKm1pYywgdTggKmRhdGEpOwogdm9pZCBpZWVlODAyMTFfYWVzX2tleV9mcmVlKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0pOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggYTlmY2U0YS4uOGU3YmEwZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtNTAsMTQgKzUwLDExIEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IGVycjsKIAotCWlmICh1bmxpa2VseShsb2NhbC0+cmVnX3N0YXRlICE9IElFRUU4MDIxMV9ERVZfUkVHSVNURVJFRCkpCi0JCXJldHVybiAtRU5PREVWOwotCiAJaXR5cGUgPSBubDgwMjExX3R5cGVfdG9fbWFjODAyMTFfdHlwZSh0eXBlKTsKIAlpZiAoaXR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSU5WQUxJRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBpZWVlODAyMTFfaWZfYWRkKGxvY2FsLT5tZGV2LCBuYW1lLCAmZGV2LCBpdHlwZSwgcGFyYW1zKTsKKwllcnIgPSBpZWVlODAyMTFfaWZfYWRkKGxvY2FsLCBuYW1lLCAmZGV2LCBpdHlwZSwgcGFyYW1zKTsKIAlpZiAoZXJyIHx8IGl0eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX01OVFIgfHwgIWZsYWdzKQogCQlyZXR1cm4gZXJyOwogCkBAIC02OCw1NCArNjUsNDEgQEAKIAogc3RhdGljIGludCBpZWVlODAyMTFfZGVsX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCBpZmluZGV4KQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQljaGFyICpuYW1lOwotCi0JaWYgKHVubGlrZWx5KGxvY2FsLT5yZWdfc3RhdGUgIT0gSUVFRTgwMjExX0RFVl9SRUdJU1RFUkVEKSkKLQkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiB3ZSdyZSB1bmRlciBSVE5MICovCiAJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7CiAJaWYgKCFkZXYpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAotCW5hbWUgPSBkZXYtPm5hbWU7CisJaWVlZTgwMjExX2lmX3JlbW92ZShkZXYpOwogCi0JcmV0dXJuIGllZWU4MDIxMV9pZl9yZW1vdmUobG9jYWwtPm1kZXYsIG5hbWUsIC0xKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCBpZmluZGV4LAogCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAogCQkJCSAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJZW51bSBpZWVlODAyMTFfaWZfdHlwZXMgaXR5cGU7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KLQlpZiAodW5saWtlbHkobG9jYWwtPnJlZ19zdGF0ZSAhPSBJRUVFODAyMTFfREVWX1JFR0lTVEVSRUQpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpbnQgcmV0OwogCiAJLyogd2UncmUgdW5kZXIgUlROTCAqLwogCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRUJVU1k7Ci0KIAlpdHlwZSA9IG5sODAyMTFfdHlwZV90b19tYWM4MDIxMV90eXBlKHR5cGUpOwogCWlmIChpdHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JTlZBTElEKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWVlZTgwMjExX2lmX3JlaW5pdChkZXYpOwotCWllZWU4MDIxMV9pZl9zZXRfdHlwZShkZXYsIGl0eXBlKTsKKwlyZXQgPSBpZWVlODAyMTFfaWZfY2hhbmdlX3R5cGUoc2RhdGEsIGl0eXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikgJiYgcGFyYW1zLT5tZXNoX2lkX2xlbikKIAkJaWVlZTgwMjExX2lmX3N0YV9zZXRfbWVzaF9pZCgmc2RhdGEtPnUuc3RhLApAQCAtMjU2LDggKzI0MCw4IEBACiAJY2FzZSBBTEdfVEtJUDoKIAkJcGFyYW1zLmNpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA7CiAKLQkJaXYzMiA9IGtleS0+dS50a2lwLml2MzI7Ci0JCWl2MTYgPSBrZXktPnUudGtpcC5pdjE2OworCQlpdjMyID0ga2V5LT51LnRraXAudHguaXYzMjsKKwkJaXYxNiA9IGtleS0+dS50a2lwLnR4Lml2MTY7CiAKIAkJaWYgKGtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSAmJgogCQkgICAgc2RhdGEtPmxvY2FsLT5vcHMtPmdldF90a2lwX3NlcSkKQEAgLTQ4NSw3ICs0NjksNyBAQAogCiAJa2ZyZWUob2xkKTsKIAotCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnX2JlYWNvbihzZGF0YS0+ZGV2KTsKKwlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNTM5LDcgKzUyMyw3IEBACiAJc3luY2hyb25pemVfcmN1KCk7CiAJa2ZyZWUob2xkKTsKIAotCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnX2JlYWNvbihkZXYpOworCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOwogfQogCiAvKiBMYXllciAyIFVwZGF0ZSBmcmFtZSAoODAyLjIgVHlwZSAxIExMQyBYSUQgVXBkYXRlIHJlc3BvbnNlKSAqLwpAQCAtNjAyLDYgKzU4Niw3IEBACiAJICovCiAKIAlpZiAocGFyYW1zLT5zdGF0aW9uX2ZsYWdzICYgU1RBVElPTl9GTEFHX0NIQU5HRUQpIHsKKwkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCQlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9BVVRIT1JJWkVEOwogCQlpZiAocGFyYW1zLT5zdGF0aW9uX2ZsYWdzICYgU1RBVElPTl9GTEFHX0FVVEhPUklaRUQpCiAJCQlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX0FVVEhPUklaRUQ7CkBAIC02MTMsNiArNTk4LDcgQEAKIAkJc3RhLT5mbGFncyAmPSB+V0xBTl9TVEFfV01FOwogCQlpZiAocGFyYW1zLT5zdGF0aW9uX2ZsYWdzICYgU1RBVElPTl9GTEFHX1dNRSkKIAkJCXN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfV01FOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKaW5kZXggMWNjY2JmZC4uZWU1MDlmMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCkBAIC03MCwxNiArNzAsNiBAQAogCiAvKiBzdGF0aXN0aWNzIHN0dWZmICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHJ0bmxfbG9ja19sb2NhbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQlydG5sX2xvY2soKTsKLQlpZiAodW5saWtlbHkobG9jYWwtPnJlZ19zdGF0ZSAhPSBJRUVFODAyMTFfREVWX1JFR0lTVEVSRUQpKSB7Ci0JCXJ0bmxfdW5sb2NrKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogI2RlZmluZSBERUJVR0ZTX1NUQVRTX0ZJTEUobmFtZSwgYnVmbGVuLCBmbXQsIHZhbHVlLi4uKQkJCVwKIAlERUJVR0ZTX1JFQURPTkxZX0ZJTEUoc3RhdHNfICMjbmFtZSwgYnVmbGVuLCBmbXQsICMjdmFsdWUpCiAKQEAgLTk2LDEwICs4Niw3IEBACiAJaWYgKCFsb2NhbC0+b3BzLT5nZXRfc3RhdHMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlcyA9IHJ0bmxfbG9ja19sb2NhbChsb2NhbCk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQorCXJ0bmxfbG9jaygpOwogCXJlcyA9IGxvY2FsLT5vcHMtPmdldF9zdGF0cyhsb2NhbF90b19odyhsb2NhbCksICZzdGF0cyk7CiAJcnRubF91bmxvY2soKTsKIAlpZiAoIXJlcykKQEAgLTE5Nyw0NSArMTg0LDYgQEAKIERFQlVHRlNfU1RBVFNfRklMRSh0eF9zdGF0dXNfZHJvcCwgMjAsICIldSIsCiAJCSAgIGxvY2FsLT50eF9zdGF0dXNfZHJvcCk7CiAKLXN0YXRpYyBzc2l6ZV90IHN0YXRzX3dtZV9yeF9xdWV1ZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgICAgICBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKLQkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbTlVNX1JYX0RBVEFfUVVFVUVTKjE1XSwgKnAgPSBidWY7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0RBVEFfUVVFVUVTOyBpKyspCi0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAotCQkJICAgICAgICIldVxuIiwgbG9jYWwtPndtZV9yeF9xdWV1ZVtpXSk7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcC1idWYpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGF0c193bWVfcnhfcXVldWVfb3BzID0gewotCS5yZWFkID0gc3RhdHNfd21lX3J4X3F1ZXVlX3JlYWQsCi0JLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYywKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHN0YXRzX3dtZV90eF9xdWV1ZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgICAgICBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKLQkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbTlVNX1RYX0RBVEFfUVVFVUVTKjE1XSwgKnAgPSBidWY7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RBVEFfUVVFVUVTOyBpKyspCi0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAotCQkJICAgICAgICIldVxuIiwgbG9jYWwtPndtZV90eF9xdWV1ZVtpXSk7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcC1idWYpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGF0c193bWVfdHhfcXVldWVfb3BzID0gewotCS5yZWFkID0gc3RhdHNfd21lX3R4X3F1ZXVlX3JlYWQsCi0JLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYywKLX07CiAjZW5kaWYKIAogREVCVUdGU19ERVZTVEFUU19GSUxFKGRvdDExQUNLRmFpbHVyZUNvdW50KTsKQEAgLTMwMyw4ICsyNTEsNiBAQAogCURFQlVHRlNfU1RBVFNfQUREKHJ4X2V4cGFuZF9za2JfaGVhZDIpOwogCURFQlVHRlNfU1RBVFNfQUREKHJ4X2hhbmRsZXJzX2ZyYWdtZW50cyk7CiAJREVCVUdGU19TVEFUU19BREQodHhfc3RhdHVzX2Ryb3ApOwotCURFQlVHRlNfU1RBVFNfQUREKHdtZV90eF9xdWV1ZSk7Ci0JREVCVUdGU19TVEFUU19BREQod21lX3J4X3F1ZXVlKTsKICNlbmRpZgogCURFQlVHRlNfU1RBVFNfQUREKGRvdDExQUNLRmFpbHVyZUNvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0FERChkb3QxMVJUU0ZhaWx1cmVDb3VudCk7CkBAIC0zNTYsOCArMzAyLDYgQEAKIAlERUJVR0ZTX1NUQVRTX0RFTChyeF9leHBhbmRfc2tiX2hlYWQyKTsKIAlERUJVR0ZTX1NUQVRTX0RFTChyeF9oYW5kbGVyc19mcmFnbWVudHMpOwogCURFQlVHRlNfU1RBVFNfREVMKHR4X3N0YXR1c19kcm9wKTsKLQlERUJVR0ZTX1NUQVRTX0RFTCh3bWVfdHhfcXVldWUpOwotCURFQlVHRlNfU1RBVFNfREVMKHdtZV9yeF9xdWV1ZSk7CiAjZW5kaWYKIAlERUJVR0ZTX1NUQVRTX0RFTChkb3QxMUFDS0ZhaWx1cmVDb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwoZG90MTFSVFNGYWlsdXJlQ291bnQpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwppbmRleCAxOWVmYzNhLi43NDM5YjYzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwpAQCAtOTcsOCArOTcsOCBAQAogCQlicmVhazsKIAljYXNlIEFMR19US0lQOgogCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwOHggJTA0eFxuIiwKLQkJCQlrZXktPnUudGtpcC5pdjMyLAotCQkJCWtleS0+dS50a2lwLml2MTYpOworCQkJCWtleS0+dS50a2lwLnR4Lml2MzIsCisJCQkJa2V5LT51LnRraXAudHguaXYxNik7CiAJCWJyZWFrOwogCWNhc2UgQUxHX0NDTVA6CiAJCXRwbiA9IGtleS0+dS5jY21wLnR4X3BuOwpAQCAtMTI4LDggKzEyOCw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfREFUQV9RVUVVRVM7IGkrKykKIAkJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAogCQkJCSAgICAgICAiJTA4eCAlMDR4XG4iLAotCQkJCSAgICAgICBrZXktPnUudGtpcC5pdjMyX3J4W2ldLAotCQkJCSAgICAgICBrZXktPnUudGtpcC5pdjE2X3J4W2ldKTsKKwkJCQkgICAgICAga2V5LT51LnRraXAucnhbaV0uaXYzMiwKKwkJCQkgICAgICAga2V5LT51LnRraXAucnhbaV0uaXYxNik7CiAJCWxlbiA9IHAgLSBidWY7CiAJCWJyZWFrOwogCWNhc2UgQUxHX0NDTVA6CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCmluZGV4IGUzMzI2ZDAuLjQ3NWY4OWEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCkBAIC0xNTUsOCArMTU1LDkgQEAKIAkJX19JRUVFODAyMTFfSUZfV0ZJTEUobmFtZSkKIAogLyogY29tbW9uIGF0dHJpYnV0ZXMgKi8KLUlFRUU4MDIxMV9JRl9GSUxFKGNoYW5uZWxfdXNlLCBjaGFubmVsX3VzZSwgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKGRyb3BfdW5lbmNyeXB0ZWQsIGRyb3BfdW5lbmNyeXB0ZWQsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShmb3JjZV91bmljYXN0X3JhdGVpZHgsIGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKG1heF9yYXRlY3RybF9yYXRlaWR4LCBtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgREVDKTsKIAogLyogU1RBL0lCU1MgYXR0cmlidXRlcyAqLwogSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUuc3RhLnN0YXRlLCBERUMpOwpAQCAtMTkyLDggKzE5Myw2IEBACiBJRUVFODAyMTFfSUZfRklMRShudW1fc3RhX3BzLCB1LmFwLm51bV9zdGFfcHMsIEFUT01JQyk7CiBJRUVFODAyMTFfSUZfRklMRShkdGltX2NvdW50LCB1LmFwLmR0aW1fY291bnQsIERFQyk7CiBJRUVFODAyMTFfSUZfRklMRShudW1fYmVhY29ucywgdS5hcC5udW1fYmVhY29ucywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgdS5hcC5mb3JjZV91bmljYXN0X3JhdGVpZHgsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgdS5hcC5tYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgREVDKTsKIAogc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX2ZtdF9udW1fYnVmZmVyZWRfbXVsdGljYXN0KAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpidWYsIGludCBidWZsZW4pCkBAIC0yNDgsOCArMjQ3LDEwIEBACiAKIHN0YXRpYyB2b2lkIGFkZF9zdGFfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JREVCVUdGU19BREQoY2hhbm5lbF91c2UsIHN0YSk7CiAJREVCVUdGU19BREQoZHJvcF91bmVuY3J5cHRlZCwgc3RhKTsKKwlERUJVR0ZTX0FERChmb3JjZV91bmljYXN0X3JhdGVpZHgsIGFwKTsKKwlERUJVR0ZTX0FERChtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgYXApOworCiAJREVCVUdGU19BREQoc3RhdGUsIHN0YSk7CiAJREVCVUdGU19BREQoYnNzaWQsIHN0YSk7CiAJREVCVUdGU19BREQocHJldl9ic3NpZCwgc3RhKTsKQEAgLTI2OSwyNyArMjcwLDMwIEBACiAKIHN0YXRpYyB2b2lkIGFkZF9hcF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlERUJVR0ZTX0FERChjaGFubmVsX3VzZSwgYXApOwogCURFQlVHRlNfQUREKGRyb3BfdW5lbmNyeXB0ZWQsIGFwKTsKKwlERUJVR0ZTX0FERChmb3JjZV91bmljYXN0X3JhdGVpZHgsIGFwKTsKKwlERUJVR0ZTX0FERChtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgYXApOworCiAJREVCVUdGU19BREQobnVtX3N0YV9wcywgYXApOwogCURFQlVHRlNfQUREKGR0aW1fY291bnQsIGFwKTsKIAlERUJVR0ZTX0FERChudW1fYmVhY29ucywgYXApOwotCURFQlVHRlNfQUREKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgYXApOwotCURFQlVHRlNfQUREKG1heF9yYXRlY3RybF9yYXRlaWR4LCBhcCk7CiAJREVCVUdGU19BREQobnVtX2J1ZmZlcmVkX211bHRpY2FzdCwgYXApOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfd2RzX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCURFQlVHRlNfQUREKGNoYW5uZWxfdXNlLCB3ZHMpOwogCURFQlVHRlNfQUREKGRyb3BfdW5lbmNyeXB0ZWQsIHdkcyk7CisJREVCVUdGU19BREQoZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCBhcCk7CisJREVCVUdGU19BREQobWF4X3JhdGVjdHJsX3JhdGVpZHgsIGFwKTsKKwogCURFQlVHRlNfQUREKHBlZXIsIHdkcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF92bGFuX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCURFQlVHRlNfQUREKGNoYW5uZWxfdXNlLCB2bGFuKTsKIAlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkLCB2bGFuKTsKKwlERUJVR0ZTX0FERChmb3JjZV91bmljYXN0X3JhdGVpZHgsIGFwKTsKKwlERUJVR0ZTX0FERChtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgYXApOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfbW9uaXRvcl9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKQEAgLTM3Niw4ICszODAsMTAgQEAKIAogc3RhdGljIHZvaWQgZGVsX3N0YV9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlERUJVR0ZTX0RFTChjaGFubmVsX3VzZSwgc3RhKTsKIAlERUJVR0ZTX0RFTChkcm9wX3VuZW5jcnlwdGVkLCBzdGEpOworCURFQlVHRlNfREVMKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgYXApOworCURFQlVHRlNfREVMKG1heF9yYXRlY3RybF9yYXRlaWR4LCBhcCk7CisKIAlERUJVR0ZTX0RFTChzdGF0ZSwgc3RhKTsKIAlERUJVR0ZTX0RFTChic3NpZCwgc3RhKTsKIAlERUJVR0ZTX0RFTChwcmV2X2Jzc2lkLCBzdGEpOwpAQCAtMzk3LDI3ICs0MDMsMzAgQEAKIAogc3RhdGljIHZvaWQgZGVsX2FwX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCURFQlVHRlNfREVMKGNoYW5uZWxfdXNlLCBhcCk7CiAJREVCVUdGU19ERUwoZHJvcF91bmVuY3J5cHRlZCwgYXApOworCURFQlVHRlNfREVMKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgYXApOworCURFQlVHRlNfREVMKG1heF9yYXRlY3RybF9yYXRlaWR4LCBhcCk7CisKIAlERUJVR0ZTX0RFTChudW1fc3RhX3BzLCBhcCk7CiAJREVCVUdGU19ERUwoZHRpbV9jb3VudCwgYXApOwogCURFQlVHRlNfREVMKG51bV9iZWFjb25zLCBhcCk7Ci0JREVCVUdGU19ERUwoZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCBhcCk7Ci0JREVCVUdGU19ERUwobWF4X3JhdGVjdHJsX3JhdGVpZHgsIGFwKTsKIAlERUJVR0ZTX0RFTChudW1fYnVmZmVyZWRfbXVsdGljYXN0LCBhcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlbF93ZHNfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JREVCVUdGU19ERUwoY2hhbm5lbF91c2UsIHdkcyk7CiAJREVCVUdGU19ERUwoZHJvcF91bmVuY3J5cHRlZCwgd2RzKTsKKwlERUJVR0ZTX0RFTChmb3JjZV91bmljYXN0X3JhdGVpZHgsIGFwKTsKKwlERUJVR0ZTX0RFTChtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgYXApOworCiAJREVCVUdGU19ERUwocGVlciwgd2RzKTsKIH0KIAogc3RhdGljIHZvaWQgZGVsX3ZsYW5fZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JREVCVUdGU19ERUwoY2hhbm5lbF91c2UsIHZsYW4pOwogCURFQlVHRlNfREVMKGRyb3BfdW5lbmNyeXB0ZWQsIHZsYW4pOworCURFQlVHRlNfREVMKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgYXApOworCURFQlVHRlNfREVMKG1heF9yYXRlY3RybF9yYXRlaWR4LCBhcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlbF9tb25pdG9yX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtNDY3LDEyICs0NzYsMTIgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBkZWxfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCB0eXBlKQorc3RhdGljIHZvaWQgZGVsX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCWlmICghc2RhdGEtPmRlYnVnZnNkaXIpCiAJCXJldHVybjsKIAotCXN3aXRjaCAodHlwZSkgeworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UOgogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJCWRlbF9tZXNoX3N0YXRzKHNkYXRhKTsKQEAgLTUxMiwyOSArNTIxLDIzIEBACiAJc3ByaW50ZihidWYsICJuZXRkZXY6JXMiLCBzZGF0YS0+ZGV2LT5uYW1lKTsKIAlzZGF0YS0+ZGVidWdmc2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihidWYsCiAJCXNkYXRhLT5sb2NhbC0+aHcud2lwaHktPmRlYnVnZnNkaXIpOworCWFkZF9maWxlcyhzZGF0YSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfcmVtb3ZlX25ldGRldihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlkZWxfZmlsZXMoc2RhdGEsIHNkYXRhLT52aWYudHlwZSk7CisJZGVsX2ZpbGVzKHNkYXRhKTsKIAlkZWJ1Z2ZzX3JlbW92ZShzZGF0YS0+ZGVidWdmc2Rpcik7CiAJc2RhdGEtPmRlYnVnZnNkaXIgPSBOVUxMOwogfQogCi12b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2NoYW5nZV9pZl90eXBlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgIGludCBvbGR0eXBlKQotewotCWRlbF9maWxlcyhzZGF0YSwgb2xkdHlwZSk7Ci0JYWRkX2ZpbGVzKHNkYXRhKTsKLX0KLQotc3RhdGljIGludCBuZXRkZXZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iLAorc3RhdGljIGludCBuZXRkZXZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJCQkgdW5zaWduZWQgbG9uZyBzdGF0ZSwKIAkJCSB2b2lkICpuZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZGV2OwogCXN0cnVjdCBkZW50cnkgKmRpcjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJY2hhciBidWZbMTArSUZOQU1TSVpdOwogCiAJaWYgKHN0YXRlICE9IE5FVERFVl9DSEFOR0VOQU1FKQpAQCAtNTQ2LDYgKzU0OSw4IEBACiAJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHktPnByaXZpZCAhPSBtYWM4MDIxMV93aXBoeV9wcml2aWQpCiAJCXJldHVybiAwOwogCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCiAJc3ByaW50ZihidWYsICJuZXRkZXY6JXMiLCBkZXYtPm5hbWUpOwogCWRpciA9IHNkYXRhLT5kZWJ1Z2ZzZGlyOwogCWlmICghZGVidWdmc19yZW5hbWUoZGlyLT5kX3BhcmVudCwgZGlyLCBkaXItPmRfcGFyZW50LCBidWYpKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmggYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuaAppbmRleCBhNjkwMDcxLi43YWY3MzFmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuaAorKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuaApAQCAtNiw4ICs2LDYgQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19hZGRfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfcmVtb3ZlX25ldGRldihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci12b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2NoYW5nZV9pZl90eXBlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgaW50IG9sZHR5cGUpOwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfaW5pdCh2b2lkKTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2V4aXQodm9pZCk7CiAjZWxzZQpAQCAtMTcsOSArMTUsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX3JlbW92ZV9uZXRkZXYoCiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7fQotc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2NoYW5nZV9pZl90eXBlKAotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgb2xkdHlwZSkKLXt9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2luaXQodm9pZCkKIHt9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKaW5kZXggNmQ0N2ExZC4uNzlhMDYyNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTYzLDEwICs2Myw5IEBACiBTVEFfRklMRSh0eF9maWx0ZXJlZCwgdHhfZmlsdGVyZWRfY291bnQsIExVKTsKIFNUQV9GSUxFKHR4X3JldHJ5X2ZhaWxlZCwgdHhfcmV0cnlfZmFpbGVkLCBMVSk7CiBTVEFfRklMRSh0eF9yZXRyeV9jb3VudCwgdHhfcmV0cnlfY291bnQsIExVKTsKLVNUQV9GSUxFKGxhc3RfcnNzaSwgbGFzdF9yc3NpLCBEKTsKIFNUQV9GSUxFKGxhc3Rfc2lnbmFsLCBsYXN0X3NpZ25hbCwgRCk7CitTVEFfRklMRShsYXN0X3F1YWwsIGxhc3RfcXVhbCwgRCk7CiBTVEFfRklMRShsYXN0X25vaXNlLCBsYXN0X25vaXNlLCBEKTsKLVNUQV9GSUxFKGNoYW5uZWxfdXNlLCBjaGFubmVsX3VzZSwgRCk7CiBTVEFfRklMRSh3ZXBfd2Vha19pdl9jb3VudCwgd2VwX3dlYWtfaXZfY291bnQsIExVKTsKIAogc3RhdGljIHNzaXplX3Qgc3RhX2ZsYWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLApAQCAtNzQsMTQgKzczLDE1IEBACiB7CiAJY2hhciBidWZbMTAwXTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1MzIgc3RhZmxhZ3MgPSBnZXRfc3RhX2ZsYWdzKHN0YSk7CiAJaW50IHJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcyVzJXMlcyVzJXMiLAotCQlzdGEtPmZsYWdzICYgV0xBTl9TVEFfQVVUSCA/ICJBVVRIXG4iIDogIiIsCi0JCXN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9BU1NPQyA/ICJBU1NPQ1xuIiA6ICIiLAotCQlzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMgPyAiUFNcbiIgOiAiIiwKLQkJc3RhLT5mbGFncyAmIFdMQU5fU1RBX0FVVEhPUklaRUQgPyAiQVVUSE9SSVpFRFxuIiA6ICIiLAotCQlzdGEtPmZsYWdzICYgV0xBTl9TVEFfU0hPUlRfUFJFQU1CTEUgPyAiU0hPUlQgUFJFQU1CTEVcbiIgOiAiIiwKLQkJc3RhLT5mbGFncyAmIFdMQU5fU1RBX1dNRSA/ICJXTUVcbiIgOiAiIiwKLQkJc3RhLT5mbGFncyAmIFdMQU5fU1RBX1dEUyA/ICJXRFNcbiIgOiAiIik7CisJCXN0YWZsYWdzICYgV0xBTl9TVEFfQVVUSCA/ICJBVVRIXG4iIDogIiIsCisJCXN0YWZsYWdzICYgV0xBTl9TVEFfQVNTT0MgPyAiQVNTT0NcbiIgOiAiIiwKKwkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9QUyA/ICJQU1xuIiA6ICIiLAorCQlzdGFmbGFncyAmIFdMQU5fU1RBX0FVVEhPUklaRUQgPyAiQVVUSE9SSVpFRFxuIiA6ICIiLAorCQlzdGFmbGFncyAmIFdMQU5fU1RBX1NIT1JUX1BSRUFNQkxFID8gIlNIT1JUIFBSRUFNQkxFXG4iIDogIiIsCisJCXN0YWZsYWdzICYgV0xBTl9TVEFfV01FID8gIldNRVxuIiA6ICIiLAorCQlzdGFmbGFncyAmIFdMQU5fU1RBX1dEUyA/ICJXRFNcbiIgOiAiIik7CiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CiB9CiBTVEFfT1BTKGZsYWdzKTsKQEAgLTEyMywzNiArMTIzLDYgQEAKIH0KIFNUQV9PUFMobGFzdF9zZXFfY3RybCk7CiAKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKLXN0YXRpYyBzc2l6ZV90IHN0YV93bWVfcnhfcXVldWVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCi0JCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyIGJ1ZlsxNSpOVU1fUlhfREFUQV9RVUVVRVNdLCAqcCA9IGJ1ZjsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0RBVEFfUVVFVUVTOyBpKyspCi0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiJXUgIiwKLQkJCSAgICAgICBzdGEtPndtZV9yeF9xdWV1ZVtpXSk7Ci0JcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiIpOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwIC0gYnVmKTsKLX0KLVNUQV9PUFMod21lX3J4X3F1ZXVlKTsKLQotc3RhdGljIHNzaXplX3Qgc3RhX3dtZV90eF9xdWV1ZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKLQkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgYnVmWzE1Kk5VTV9UWF9EQVRBX1FVRVVFU10sICpwID0gYnVmOwotCWludCBpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfREFUQV9RVUVVRVM7IGkrKykKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIldSAiLAotCQkJICAgICAgIHN0YS0+d21lX3R4X3F1ZXVlW2ldKTsKLQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuIik7Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpOwotfQotU1RBX09QUyh3bWVfdHhfcXVldWUpOwotI2VuZGlmCi0KIHN0YXRpYyBzc2l6ZV90IHN0YV9hZ2dfc3RhdHVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAogCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTI5MywxMCArMjYzLDYgQEAKIAlERUJVR0ZTX0FERChudW1fcHNfYnVmX2ZyYW1lcyk7CiAJREVCVUdGU19BREQoaW5hY3RpdmVfbXMpOwogCURFQlVHRlNfQUREKGxhc3Rfc2VxX2N0cmwpOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSUwotCURFQlVHRlNfQUREKHdtZV9yeF9xdWV1ZSk7Ci0JREVCVUdGU19BREQod21lX3R4X3F1ZXVlKTsKLSNlbmRpZgogCURFQlVHRlNfQUREKGFnZ19zdGF0dXMpOwogfQogCkBAIC0zMDYsMTAgKzI3Miw2IEBACiAJREVCVUdGU19ERUwobnVtX3BzX2J1Zl9mcmFtZXMpOwogCURFQlVHRlNfREVMKGluYWN0aXZlX21zKTsKIAlERUJVR0ZTX0RFTChsYXN0X3NlcV9jdHJsKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKLQlERUJVR0ZTX0RFTCh3bWVfcnhfcXVldWUpOwotCURFQlVHRlNfREVMKHdtZV90eF9xdWV1ZSk7Ci0jZW5kaWYKIAlERUJVR0ZTX0RFTChhZ2dfc3RhdHVzKTsKIAogCWRlYnVnZnNfcmVtb3ZlKHN0YS0+ZGVidWdmcy5kaXIpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCAwMDY0ODZiLi5hNGY5YTgzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAyMDAyLTIwMDUsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KICAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgogICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMyw2ICsyNCw4IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAia2V5LmgiCiAjaW5jbHVkZSAic3RhX2luZm8uaCIKIApAQCAtODIsNyArODUsNyBAQAogCXUxNiBjYXBhYmlsaXR5OyAvKiBob3N0IGJ5dGUgb3JkZXIgKi8KIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJaW50IGZyZXE7Ci0JaW50IHJzc2ksIHNpZ25hbCwgbm9pc2U7CisJaW50IHNpZ25hbCwgbm9pc2UsIHF1YWw7CiAJdTggKndwYV9pZTsKIAlzaXplX3Qgd3BhX2llX2xlbjsKIAl1OCAqcnNuX2llOwpAQCAtOTEsNiArOTQsOCBAQAogCXNpemVfdCB3bW1faWVfbGVuOwogCXU4ICpodF9pZTsKIAlzaXplX3QgaHRfaWVfbGVuOworCXU4ICpodF9hZGRfaWU7CisJc2l6ZV90IGh0X2FkZF9pZV9sZW47CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAl1OCAqbWVzaF9pZDsKIAlzaXplX3QgbWVzaF9pZF9sZW47CkBAIC0xNDcsNyArMTUyLDYgQEAKICNkZWZpbmUgSUVFRTgwMjExX1RYX1VOSUNBU1QJCUJJVCgxKQogI2RlZmluZSBJRUVFODAyMTFfVFhfUFNfQlVGRkVSRUQJQklUKDIpCiAjZGVmaW5lIElFRUU4MDIxMV9UWF9QUk9CRV9MQVNUX0ZSQUcJQklUKDMpCi0jZGVmaW5lIElFRUU4MDIxMV9UWF9JTkpFQ1RFRAkJQklUKDQpCiAKIHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE1NywxMyArMTYxLDEyIEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKIAotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOworCXM4IHJhdGVfaWR4OwogCS8qIHVzZSB0aGlzIHJhdGUgKGlmIHNldCkgZm9yIGxhc3QgZnJhZ21lbnQ7IHJhdGUgY2FuCiAJICogYmUgc2V0IHRvIGxvd2VyIHJhdGUgZm9yIHRoZSBmaXJzdCBmcmFnbWVudHMsIGUuZy4sCiAJICogd2hlbiB1c2luZyBDVFMgcHJvdGVjdGlvbiB3aXRoIElFRUUgODAyLjExZy4gKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmxhc3RfZnJhZ19yYXRlOworCXM4IGxhc3RfZnJhZ19yYXRlX2lkeDsKIAogCS8qIEV4dHJhIGZyYWdtZW50cyAoaW4gYWRkaXRpb24gdG8gdGhlIGZpcnN0IGZyYWdtZW50CiAJICogaW4gc2tiKSAqLwpAQCAtMjAyLDMyICsyMDUsMTYgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJaW50IHNlbnRfcHNfYnVmZmVyZWQ7CiAJaW50IHF1ZXVlOwotCWludCBsb2FkOwogCXUzMiB0a2lwX2l2MzI7CiAJdTE2IHRraXBfaXYxNjsKIH07CiAKLS8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YS5mbGFncyAqLwotI2RlZmluZSBJRUVFODAyMTFfVFhQRF9SRVFfVFhfU1RBVFVTCUJJVCgwKQotI2RlZmluZSBJRUVFODAyMTFfVFhQRF9ET19OT1RfRU5DUllQVAlCSVQoMSkKLSNkZWZpbmUgSUVFRTgwMjExX1RYUERfUkVRVUVVRQkJQklUKDIpCi0jZGVmaW5lIElFRUU4MDIxMV9UWFBEX0VBUE9MX0ZSQU1FCUJJVCgzKQotI2RlZmluZSBJRUVFODAyMTFfVFhQRF9BTVBEVQkJQklUKDQpCi0vKiBTdG9yZWQgaW4gc2tfYnVmZi0+Y2IgKi8KLXN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgewotCWludCBpZmluZGV4OwotCXVuc2lnbmVkIGxvbmcgamlmZmllczsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdTggcXVldWU7Ci19OwotCiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0b3JlZF9wYWNrZXQgewotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBjb250cm9sOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHNrX2J1ZmYgKipleHRyYV9mcmFnOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqbGFzdF9mcmFnX3JhdGU7CisJczggbGFzdF9mcmFnX3JhdGVfaWR4OwogCWludCBudW1fZXh0cmFfZnJhZzsKLQl1bnNpZ25lZCBpbnQgbGFzdF9mcmFnX3JhdGVfY3RybF9wcm9iZTsKKwlib29sIGxhc3RfZnJhZ19yYXRlX2N0cmxfcHJvYmU7CiB9OwogCiBzdHJ1Y3QgYmVhY29uX2RhdGEgewpAQCAtMjUxLDggKzIzOCw2IEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBwc19iY19idWY7CiAJYXRvbWljX3QgbnVtX3N0YV9wczsgLyogbnVtYmVyIG9mIHN0YXRpb25zIGluIFBTIG1vZGUgKi8KIAlpbnQgZHRpbV9jb3VudDsKLQlpbnQgZm9yY2VfdW5pY2FzdF9yYXRlaWR4OyAvKiBmb3JjZWQgVFggcmF0ZWlkeCBmb3IgdW5pY2FzdCBmcmFtZXMgKi8KLQlpbnQgbWF4X3JhdGVjdHJsX3JhdGVpZHg7IC8qIG1heCBUWCByYXRlaWR4IGZvciByYXRlIGNvbnRyb2wgKi8KIAlpbnQgbnVtX2JlYWNvbnM7IC8qIG51bWJlciBvZiBUWGVkIGJlYWNvbiBmcmFtZXMgZm9yIHRoaXMgQlNTICovCiB9OwogCkBAIC0yNjIsNyArMjQ3LDYgQEAKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfaWZfdmxhbiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqYXA7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtNDM2LDggKzQyMCw2IEBACiAJICovCiAJdTY0IGJhc2ljX3JhdGVzOwogCi0JdTE2IHNlcXVlbmNlOwotCiAJLyogRnJhZ21lbnQgdGFibGUgZm9yIGhvc3QtYmFzZWQgcmVhc3NlbWJseSAqLwogCXN0cnVjdCBpZWVlODAyMTFfZnJhZ21lbnRfZW50cnkJZnJhZ21lbnRzW0lFRUU4MDIxMV9GUkFHTUVOVF9NQVhdOwogCXVuc2lnbmVkIGludCBmcmFnbWVudF9uZXh0OwpAQCAtNDQ2LDE2ICs0MjgsMTggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5c1tOVU1fREVGQVVMVF9LRVlTXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqZGVmYXVsdF9rZXk7CiAKLQkvKgotCSAqIEJTUyBjb25maWd1cmF0aW9uIGZvciB0aGlzIGludGVyZmFjZS4KLQkgKgotCSAqIEZJWE1FOiBJIGZlZWwgYmFkIHB1dHRpbmcgdGhpcyBoZXJlIHdoZW4gd2UgYWxyZWFkeSBoYXZlIGEKLQkgKgkgIGJzcyBwb2ludGVyLCBidXQgdGhlIGJzcyBwb2ludGVyIGlzIGp1c3Qgd3Jvbmcgd2hlbgotCSAqCSAgeW91IGhhdmUgbXVsdGlwbGUgdmlydHVhbCBTVEEgbW9kZSBpbnRlcmZhY2VzLi4uCi0JICoJICBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkLgotCSAqLworCS8qIEJTUyBjb25maWd1cmF0aW9uIGZvciB0aGlzIGludGVyZmFjZS4gKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIGJzc19jb25mOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmJzczsgLyogQlNTIHRoYXQgdGhpcyBkZXZpY2UgYmVsb25ncyB0byAqLworCisJLyoKKwkgKiBBUCB0aGlzIGJlbG9uZ3MgdG86IHNlbGYgaW4gQVAgbW9kZSBhbmQKKwkgKiBjb3JyZXNwb25kaW5nIEFQIGluIFZMQU4gbW9kZSwgTlVMTCBmb3IKKwkgKiBhbGwgb3RoZXJzIChtaWdodCBiZSBuZWVkZWQgbGF0ZXIgaW4gSUJTUykKKwkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICpic3M7CisKKwlpbnQgZm9yY2VfdW5pY2FzdF9yYXRlaWR4OyAvKiBmb3JjZWQgVFggcmF0ZWlkeCBmb3IgdW5pY2FzdCBmcmFtZXMgKi8KKwlpbnQgbWF4X3JhdGVjdHJsX3JhdGVpZHg7IC8qIG1heCBUWCByYXRlaWR4IGZvciByYXRlIGNvbnRyb2wgKi8KIAogCXVuaW9uIHsKIAkJc3RydWN0IGllZWU4MDIxMV9pZl9hcCBhcDsKQEAgLTQ2NCwxNCArNDQ4LDExIEBACiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhIHN0YTsKIAkJdTMyIG1udHJfZmxhZ3M7CiAJfSB1OwotCWludCBjaGFubmVsX3VzZTsKLQlpbnQgY2hhbm5lbF91c2VfcmF3OwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyOwogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXN0cnVjdCBkZW50cnkgKmNoYW5uZWxfdXNlOwogCQkJc3RydWN0IGRlbnRyeSAqZHJvcF91bmVuY3J5cHRlZDsKIAkJCXN0cnVjdCBkZW50cnkgKnN0YXRlOwogCQkJc3RydWN0IGRlbnRyeSAqYnNzaWQ7CkBAIC00OTAsNyArNDcxLDYgQEAKIAkJCXN0cnVjdCBkZW50cnkgKm51bV9iZWFjb25zX3N0YTsKIAkJfSBzdGE7CiAJCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICpjaGFubmVsX3VzZTsKIAkJCXN0cnVjdCBkZW50cnkgKmRyb3BfdW5lbmNyeXB0ZWQ7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpudW1fc3RhX3BzOwogCQkJc3RydWN0IGRlbnRyeSAqZHRpbV9jb3VudDsKQEAgLTUwMCwxMiArNDgwLDEwIEBACiAJCQlzdHJ1Y3QgZGVudHJ5ICpudW1fYnVmZmVyZWRfbXVsdGljYXN0OwogCQl9IGFwOwogCQlzdHJ1Y3QgewotCQkJc3RydWN0IGRlbnRyeSAqY2hhbm5lbF91c2U7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpkcm9wX3VuZW5jcnlwdGVkOwogCQkJc3RydWN0IGRlbnRyeSAqcGVlcjsKIAkJfSB3ZHM7CiAJCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICpjaGFubmVsX3VzZTsKIAkJCXN0cnVjdCBkZW50cnkgKmRyb3BfdW5lbmNyeXB0ZWQ7CiAJCX0gdmxhbjsKIAkJc3RydWN0IHsKQEAgLTU1Myw4ICs1MzEsNiBAQAogCXJldHVybiBjb250YWluZXJfb2YocCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdmlmKTsKIH0KIAotI2RlZmluZSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpIG5ldGRldl9wcml2KGRldikKLQogZW51bSB7CiAJSUVFRTgwMjExX1JYX01TRwk9IDEsCiAJSUVFRTgwMjExX1RYX1NUQVRVU19NU0cJPSAyLApAQCAtNTYyLDYgKzUzOCw5IEBACiAJSUVFRTgwMjExX0FEREJBX01TRwk9IDQsCiB9OwogCisvKiBtYXhpbXVtIG51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgd2Ugc3VwcG9ydC4gKi8KKyNkZWZpbmUgUURfTUFYX1FVRVVFUyAoSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMgKyBJRUVFODAyMTFfTUFYX1FVRVVFUykKKwogc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7CiAJLyogZW1iZWQgdGhlIGRyaXZlciB2aXNpYmxlIHBhcnQuCiAJICogZG9uJ3QgY2FzdCAodXNlIHRoZSBzdGF0aWMgaW5saW5lcyBiZWxvdyksIGJ1dCB3ZSBrZWVwCkBAIC01NzAsNiArNTQ5LDggQEAKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7CiAKKwl1bnNpZ25lZCBsb25nIHF1ZXVlX3Bvb2xbQklUU19UT19MT05HUyhRRF9NQVhfUVVFVUVTKV07CisKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbWRldjsgLyogd21hc3RlciMgLSAibWFzdGVyIiA4MDIuMTEgZGV2aWNlICovCiAJaW50IG9wZW5fY291bnQ7CiAJaW50IG1vbml0b3JzLCBjb29rZWRfbW50cnM7CkBAIC01ODEsMTIgKzU2Miw2IEBACiAJYm9vbCB0aW1faW5fbG9ja2VkX3NlY3Rpb247IC8qIHNlZSBpZWVlODAyMTFfYmVhY29uX2dldCgpICovCiAJaW50IHR4X2hlYWRyb29tOyAvKiByZXF1aXJlZCBoZWFkcm9vbSBmb3IgaGFyZHdhcmUvcmFkaW90YXAgKi8KIAotCWVudW0gewotCQlJRUVFODAyMTFfREVWX1VOSU5JVElBTElaRUQgPSAwLAotCQlJRUVFODAyMTFfREVWX1JFR0lTVEVSRUQsCi0JCUlFRUU4MDIxMV9ERVZfVU5SRUdJU1RFUkVELAotCX0gcmVnX3N0YXRlOwotCiAJLyogVGFza2xldCBhbmQgc2tiIHF1ZXVlIHRvIHByb2Nlc3MgY2FsbHMgZnJvbSBJUlEgbW9kZS4gQWxsIGZyYW1lcwogCSAqIGFkZGVkIHRvIHNrYl9xdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCwgYnV0IGZyYW1lcyBpbgogCSAqIHNrYl9xdWV1ZV91bnJlbGlhYmxlIG1heSBiZSBkcm9wcGVkIGlmIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlc2UKQEAgLTYxMCw4ICs1ODUsOCBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhX2hhc2hbU1RBX0hBU0hfU0laRV07CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhX2NsZWFudXA7CiAKLQl1bnNpZ25lZCBsb25nIHN0YXRlW05VTV9UWF9EQVRBX1FVRVVFU19BTVBEVV07Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdG9yZWRfcGFja2V0IHBlbmRpbmdfcGFja2V0W05VTV9UWF9EQVRBX1FVRVVFU19BTVBEVV07CisJdW5zaWduZWQgbG9uZyBxdWV1ZXNfcGVuZGluZ1tCSVRTX1RPX0xPTkdTKElFRUU4MDIxMV9NQVhfUVVFVUVTKV07CisJc3RydWN0IGllZWU4MDIxMV90eF9zdG9yZWRfcGFja2V0IHBlbmRpbmdfcGFja2V0W0lFRUU4MDIxMV9NQVhfUVVFVUVTXTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfcGVuZGluZ190YXNrbGV0OwogCiAJLyogbnVtYmVyIG9mIGludGVyZmFjZXMgd2l0aCBjb3JyZXNwb25kaW5nIElGRl8gZmxhZ3MgKi8KQEAgLTY3Nyw5ICs2NTIsNiBAQAogCSAgICAgYXNzb2NfbGVkX25hbWVbMzJdLCByYWRpb19sZWRfbmFtZVszMl07CiAjZW5kaWYKIAotCXUzMiBjaGFubmVsX3VzZTsKLQl1MzIgY2hhbm5lbF91c2VfcmF3OwotCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhX2RlYnVnZnNfYWRkOwogI2VuZGlmCkBAIC03MDUsOCArNjc3LDYgQEAKIAl1bnNpZ25lZCBpbnQgcnhfZXhwYW5kX3NrYl9oZWFkMjsKIAl1bnNpZ25lZCBpbnQgcnhfaGFuZGxlcnNfZnJhZ21lbnRzOwogCXVuc2lnbmVkIGludCB0eF9zdGF0dXNfZHJvcDsKLQl1bnNpZ25lZCBpbnQgd21lX3J4X3F1ZXVlW05VTV9SWF9EQVRBX1FVRVVFU107Ci0JdW5zaWduZWQgaW50IHdtZV90eF9xdWV1ZVtOVU1fUlhfREFUQV9RVUVVRVNdOwogI2RlZmluZSBJODAyX0RFQlVHX0lOQyhjKSAoYykrKwogI2Vsc2UgLyogQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTICovCiAjZGVmaW5lIEk4MDJfREVCVUdfSU5DKGMpIGRvIHsgfSB3aGlsZSAoMCkKQEAgLTc2NCw4ICs3MzQsNiBAQAogCQkJc3RydWN0IGRlbnRyeSAqcnhfZXhwYW5kX3NrYl9oZWFkMjsKIAkJCXN0cnVjdCBkZW50cnkgKnJ4X2hhbmRsZXJzX2ZyYWdtZW50czsKIAkJCXN0cnVjdCBkZW50cnkgKnR4X3N0YXR1c19kcm9wOwotCQkJc3RydWN0IGRlbnRyeSAqd21lX3R4X3F1ZXVlOwotCQkJc3RydWN0IGRlbnRyeSAqd21lX3J4X3F1ZXVlOwogI2VuZGlmCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkb3QxMUFDS0ZhaWx1cmVDb3VudDsKIAkJCXN0cnVjdCBkZW50cnkgKmRvdDExUlRTRmFpbHVyZUNvdW50OwpAQCAtNzc4LDYgKzc0NiwxNiBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKgorSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCisJQlVHX09OKCFsb2NhbCB8fCBsb2NhbC0+bWRldiA9PSBkZXYpOworCisJcmV0dXJuIG5ldGRldl9wcml2KGRldik7Cit9CisKIC8qIHRoaXMgc3RydWN0IHJlcHJlc2VudHMgODAyLjExbidzIFJBL1RJRCBjb21iaW5hdGlvbiAqLwogc3RydWN0IGllZWU4MDIxMV9yYV90aWQgewogCXU4IHJhW0VUSF9BTEVOXTsKQEAgLTgwOSw2ICs3ODcsMTAgQEAKIAl1OCAqcHJlcTsKIAl1OCAqcHJlcDsKIAl1OCAqcGVycjsKKwl1OCAqY2hfc3dpdGNoX2VsZW07CisJdTggKmNvdW50cnlfZWxlbTsKKwl1OCAqcHdyX2NvbnN0cl9lbGVtOworCXU4ICpxdWlldF9lbGVtOyAJLyogZmlyc3QgcXVpdGUgZWxlbWVudCAqLwogCiAJLyogbGVuZ3RoIG9mIHRoZW0sIHJlc3BlY3RpdmVseSAqLwogCXU4IHNzaWRfbGVuOwpAQCAtODMzLDYgKzgxNSwxMSBAQAogCXU4IHByZXFfbGVuOwogCXU4IHByZXBfbGVuOwogCXU4IHBlcnJfbGVuOworCXU4IGNoX3N3aXRjaF9lbGVtX2xlbjsKKwl1OCBjb3VudHJ5X2VsZW1fbGVuOworCXU4IHB3cl9jb25zdHJfZWxlbV9sZW47CisJdTggcXVpZXRfZWxlbV9sZW47CisJdTggbnVtX29mX3F1aWV0X2VsZW07CS8qIGNhbiBiZSBtb3JlIHRoZSBvbmUgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqaHdfdG9fbG9jYWwoCkBAIC04NDcsMTEgKzgzNCw2IEBACiAJcmV0dXJuICZsb2NhbC0+aHc7CiB9CiAKLWVudW0gaWVlZTgwMjExX2xpbmtfc3RhdGVfdCB7Ci0JSUVFRTgwMjExX0xJTktfU1RBVEVfWE9GRiA9IDAsCi0JSUVFRTgwMjExX0xJTktfU1RBVEVfUEVORElORywKLX07Ci0KIHN0cnVjdCBzdGFfYXR0cmlidXRlIHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAJc3NpemVfdCAoKnNob3cpKGNvbnN0IHN0cnVjdCBzdGFfaW5mbyAqLCBjaGFyICpidWYpOwpAQCAtODY3LDM5ICs4NDksMTYgQEAKIAogLyogaWVlZTgwMjExLmMgKi8KIGludCBpZWVlODAyMTFfaHdfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKLWludCBpZWVlODAyMTFfaWZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGllZWU4MDIxMV9pZl9jb25maWdfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGllZWU4MDIxMV9pZl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUzMiBjaGFuZ2VkKTsKIHZvaWQgaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7Ci12b2lkIGllZWU4MDIxMV9pZl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHUzMiBpZWVlODAyMTFfaGFuZGxlX2h0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgZW5hYmxlX2h0LAogCQkJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpyZXFfaHRfY2FwLAogCQkJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyAqcmVxX2Jzc19jYXApOwogCiAvKiBpZWVlODAyMTFfaW9jdGwuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7Ci0KLQotLyogTGVhc3QgY29tbW9uIG11bHRpcGxlIG9mIHRoZSB1c2VkIHJhdGVzIChpbiAxMDAga2JwcykuIFRoaXMgaXMgdXNlZCB0bwotICogY2FsY3VsYXRlIHJhdGVfaW52IHZhbHVlcyBmb3IgZWFjaCByYXRlIHNvIHRoYXQgb25seSBpbnRlZ2VycyBhcmUgbmVlZGVkLiAqLwotI2RlZmluZSBDSEFOX1VUSUxfUkFURV9MQ00gOTUwNDAKLS8qIDEgdXNlYyBpcyAxLzggKiAoOTUwNDAvMTApID0gMTE4OCAqLwotI2RlZmluZSBDSEFOX1VUSUxfUEVSX1VTRUMgMTE4OAotLyogQW1vdW50IG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCByaWdodCB0byBzY2FsZSB0aGUgdG90YWwgdXRpbGl6YXRpb24KLSAqIHRvIHZhbHVlcyB0aGF0IHdpbGwgbm90IHdyYXAgYXJvdW5kIDMyLWJpdCBpbnRlZ2Vycy4gKi8KLSNkZWZpbmUgQ0hBTl9VVElMX1NISUZUIDkKLS8qIFRoZW9yZXRpY2FsIG1heGltdW0gb2YgY2hhbm5lbCB1dGlsaXphdGlvbiBjb3VudGVyIGluIDEwIG1zIChzdGF0X3RpbWU9MSk6Ci0gKiAoQ0hBTl9VVElMX1BFUl9VU0VDICogMTAwMDApID4+IENIQU5fVVRJTF9TSElGVCA9IDIzMjAzLiBTbyBkaXZpZGluZyB0aGUKLSAqIHJhdyB2YWx1ZSB3aXRoIGFib3V0IDIzIHNob3VsZCBnaXZlIHV0aWxpemF0aW9uIGluIDEwdGggb2YgYSBwZXJjZW50YWdlCi0gKiAoMS8xMDAwKS4gSG93ZXZlciwgdXRpbGl6YXRpb24gaXMgb25seSBlc3RpbWF0ZWQgYW5kIG5vdCBhbGwgaW50ZXJ2YWxzCi0gKiBiZXR3ZWVuIGZyYW1lcyBldGMuIGFyZSBjYWxjdWxhdGVkLiAxOCBzZWVtcyB0byBnaXZlIG51bWJlcnMgdGhhdCBhcmUgY2xvc2VyCi0gKiB0byB0aGUgcmVhbCBtYXhpbXVtLiAqLwotI2RlZmluZSBDSEFOX1VUSUxfUEVSXzEwTVMgMTgKLSNkZWZpbmUgQ0hBTl9VVElMX0hEUl9MT05HICgyMDIgKiBDSEFOX1VUSUxfUEVSX1VTRUMpCi0jZGVmaW5lIENIQU5fVVRJTF9IRFJfU0hPUlQgKDQwICogQ0hBTl9VVElMX1BFUl9VU0VDKQotCi0KLS8qIGllZWU4MDIxMV9pb2N0bC5jICovCiBpbnQgaWVlZTgwMjExX3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmcmVxKTsKKwogLyogaWVlZTgwMjExX3N0YS5jICovCiB2b2lkIGllZWU4MDIxMV9zdGFfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgaWVlZTgwMjExX3N0YV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CkBAIC05MTIsMjEgKzg3MSwyMyBAQAogaW50IGllZWU4MDIxMV9zdGFfcmVxX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7CiB2b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpOwotaW50IGllZWU4MDIxMV9zdGFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CitpbnQgaWVlZTgwMjExX3N0YV9zY2FuX3Jlc3VsdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiBpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV9zdGFfcnhfc2NhbigKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOwotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwordm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICppZSwgc2l6ZV90IGxlbik7Ci1zdHJ1Y3Qgc3RhX2luZm8gKiBpZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqYnNzaWQsCi0JCQkJCSB1OCAqYWRkcik7CitzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmJzc2lkLAorCQkJCQl1OCAqYWRkciwgdTY0IHN1cHBfcmF0ZXMpOwogaW50IGllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbik7CiBpbnQgaWVlZTgwMjExX3N0YV9kaXNhc3NvY2lhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbik7CiB2b2lkIGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgICAgIHUzMiBjaGFuZ2VkKTsKLXZvaWQgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordTMyIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBpZWVlODAyMTFfaHRfY2FwX2llX3RvX2h0X2luZm8oc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcF9pZSwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8pOwogaW50IGllZWU4MDIxMV9odF9hZGR0X2luZm9faWVfdG9faHRfYnNzX2luZm8oCkBAIC05MzcsMTAgKzg5OCwxMCBAQAogCQkJCSAgdTE2IGFnZ19zaXplLCB1MTYgdGltZW91dCk7CiB2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKIAkJCQl1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpOwordm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKTsKIAogdm9pZCBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqZGEsCiAJCQkJdTE2IHRpZCwgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7Ci12b2lkIHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiB2b2lkIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmFkZHIpOwogdTY0IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtOTU4LDE3ICs5MTksMTUgQEAKIHt9CiAjZW5kaWYKIAotLyogaWVlZTgwMjExX2lmYWNlLmMgKi8KLWludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZXdfZGV2LCBpbnQgdHlwZSwKKy8qIGludGVyZmFjZSBoYW5kbGluZyAqLwordm9pZCBpZWVlODAyMTFfaWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKm5ld19kZXYsIGVudW0gaWVlZTgwMjExX2lmX3R5cGVzIHR5cGUsCiAJCSAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7Ci12b2lkIGllZWU4MDIxMV9pZl9zZXRfdHlwZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdHlwZSk7Ci12b2lkIGllZWU4MDIxMV9pZl9yZWluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIF9faWVlZTgwMjExX2lmX2RlbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLWludCBpZWVlODAyMTFfaWZfcmVtb3ZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCk7Ci12b2lkIGllZWU4MDIxMV9pZl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBpZWVlODAyMTFfaWZfc2RhdGFfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CitpbnQgaWVlZTgwMjExX2lmX2NoYW5nZV90eXBlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBlbnVtIGllZWU4MDIxMV9pZl90eXBlcyB0eXBlKTsKK3ZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgaWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIAogLyogdHggaGFuZGxpbmcgKi8KIHZvaWQgaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwpAQCAtOTg4LDQgKzk0NywxMCBAQAogdm9pZCBtYWM4MDIxMV9ldl9taWNoYWVsX21pY19mYWlsdXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBrZXlpZHgsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKTsKIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9OT0lOTElORQorI2RlZmluZSBkZWJ1Z19ub2lubGluZSBub2lubGluZQorI2Vsc2UKKyNkZWZpbmUgZGVidWdfbm9pbmxpbmUKKyNlbmRpZgorCiAjZW5kaWYgLyogSUVFRTgwMjExX0lfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCAwNmU4OGE1Li42MTBlZDFkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAyMDAyLTIwMDUsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KICAqIENvcHlyaWdodCAyMDA1LTIwMDYsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xNywzOCArMTgsMTY0IEBACiAjaW5jbHVkZSAiZGVidWdmc19uZXRkZXYuaCIKICNpbmNsdWRlICJtZXNoLmgiCiAKLXZvaWQgaWVlZTgwMjExX2lmX3NkYXRhX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIG5ldGRldiBpcyByZW1vdmVkIG9yLCBieSB0aGUgY29kZSBiZWxvdywgYmVmb3JlCisgKiB0aGUgaW50ZXJmYWNlIHR5cGUgY2hhbmdlcy4KKyAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBiZWFjb25fZGF0YSAqYmVhY29uOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGZsdXNoZWQ7CiAJaW50IGk7CiAKLQkvKiBEZWZhdWx0IHZhbHVlcyBmb3Igc3ViLWludGVyZmFjZSBwYXJhbWV0ZXJzICovCi0Jc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOworCWllZWU4MDIxMV9kZWJ1Z2ZzX3JlbW92ZV9uZXRkZXYoc2RhdGEpOworCisJLyogZnJlZSBleHRyYSBkYXRhICovCisJaWVlZTgwMjExX2ZyZWVfa2V5cyhzZGF0YSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX0ZSQUdNRU5UX01BWDsgaSsrKQotCQlza2JfcXVldWVfaGVhZF9pbml0KCZzZGF0YS0+ZnJhZ21lbnRzW2ldLnNrYl9saXN0KTsKLQotCUlOSVRfTElTVF9IRUFEKCZzZGF0YS0+a2V5X2xpc3QpOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZfc2RhdGFfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9GUkFHTUVOVF9NQVg7IGkrKykgewogCQlfX3NrYl9xdWV1ZV9wdXJnZSgmc2RhdGEtPmZyYWdtZW50c1tpXS5za2JfbGlzdCk7CisJc2RhdGEtPmZyYWdtZW50X25leHQgPSAwOworCisJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0FQOgorCQliZWFjb24gPSBzZGF0YS0+dS5hcC5iZWFjb247CisJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+dS5hcC5iZWFjb24sIE5VTEwpOworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJa2ZyZWUoYmVhY29uKTsKKworCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzZGF0YS0+dS5hcC5wc19iY19idWYpKSkgeworCQkJbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkLS07CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCX0KKworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQ6CisJCS8qIEFsbG93IGNvbXBpbGVyIHRvIGVsaWRlIG1lc2hfcm1jX2ZyZWUgY2FsbC4gKi8KKwkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCisJCQltZXNoX3JtY19mcmVlKGRldik7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgorCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSUJTUzoKKwkJa2ZyZWUoc2RhdGEtPnUuc3RhLmV4dHJhX2llKTsKKwkJa2ZyZWUoc2RhdGEtPnUuc3RhLmFzc29jcmVxX2llcyk7CisJCWtmcmVlKHNkYXRhLT51LnN0YS5hc3NvY3Jlc3BfaWVzKTsKKwkJa2ZyZWVfc2tiKHNkYXRhLT51LnN0YS5wcm9iZV9yZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOOgorCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTU5UUjoKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JTlZBTElEOgorCQlCVUcoKTsKKwkJYnJlYWs7CiAJfQorCisJZmx1c2hlZCA9IHN0YV9pbmZvX2ZsdXNoKGxvY2FsLCBzZGF0YSk7CisJV0FSTl9PTihmbHVzaGVkKTsKIH0KIAotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBydG5sIGxvY2sgaGVsZC4gKi8KLWludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZXdfZGV2LCBpbnQgdHlwZSwKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gaW5pdGlhbGlzZSBhbiBpbnRlcmZhY2UgdG8gYSBzcGVjaWZpYyB0eXBlLgorICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBlbnVtIGllZWU4MDIxMV9pZl90eXBlcyB0eXBlKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKworCS8qIGNsZWFyIHR5cGUtZGVwZW5kZW50IHVuaW9uICovCisJbWVtc2V0KCZzZGF0YS0+dSwgMCwgc2l6ZW9mKHNkYXRhLT51KSk7CisKKwkvKiBhbmQgc2V0IHNvbWUgdHlwZS1kZXBlbmRlbnQgdmFsdWVzICovCisJc2RhdGEtPnZpZi50eXBlID0gdHlwZTsKKworCS8qIG9ubHkgbW9uaXRvciBkaWZmZXJzICovCisJc2RhdGEtPmRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfQVA6CisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNkYXRhLT51LmFwLnBzX2JjX2J1Zik7CisJCUlOSVRfTElTVF9IRUFEKCZzZGF0YS0+dS5hcC52bGFucyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVDoKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6CisJCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwkJSU5JVF9XT1JLKCZpZnN0YS0+d29yaywgaWVlZTgwMjExX3N0YV93b3JrKTsKKwkJc2V0dXBfdGltZXIoJmlmc3RhLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKKwkJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOworCQlza2JfcXVldWVfaGVhZF9pbml0KCZpZnN0YS0+c2tiX3F1ZXVlKTsKKworCQlpZnN0YS0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCQlpZnN0YS0+YXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX09QRU4gfAorCQkJSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVk7CisJCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKKwkJCUlFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAorCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOworCQlpZiAoaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcygmc2RhdGEtPmxvY2FsLT5odykgPj0gNCkKKwkJCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEOworCisJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQorCQkJaWVlZTgwMjExX21lc2hfaW5pdF9zZGF0YShzZGF0YSk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTU5UUjoKKwkJc2RhdGEtPmRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7CisJCXNkYXRhLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQ7CisJCXNkYXRhLT51Lm1udHJfZmxhZ3MgPSBNT05JVE9SX0ZMQUdfQ09OVFJPTCB8CisJCQkJICAgICAgTU9OSVRPUl9GTEFHX09USEVSX0JTUzsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOOgorCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lOVkFMSUQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisKKwlpZWVlODAyMTFfZGVidWdmc19hZGRfbmV0ZGV2KHNkYXRhKTsKK30KKworaW50IGllZWU4MDIxMV9pZl9jaGFuZ2VfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgZW51bSBpZWVlODAyMTFfaWZfdHlwZXMgdHlwZSkKK3sKKwlBU1NFUlRfUlROTCgpOworCisJaWYgKHR5cGUgPT0gc2RhdGEtPnZpZi50eXBlKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2UgY291bGQsIGhlcmUsIG9uIGNoYW5nZXMgYmV0d2VlbiBJQlNTL1NUQS9NRVNIIG1vZGVzLAorCSAqIGludm9rZSBhbiBNTE1FIGZ1bmN0aW9uIGluc3RlYWQgdGhhdCBkaXNhc3NvY2lhdGVzIGV0Yy4KKwkgKiBhbmQgZ29lcyBpbnRvIHRoZSByZXF1ZXN0ZWQgbW9kZS4KKwkgKi8KKworCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogUHVyZ2UgYW5kIHJlc2V0IHR5cGUtZGVwZW5kZW50IHN0YXRlLiAqLworCWllZWU4MDIxMV90ZWFyZG93bl9zZGF0YShzZGF0YS0+ZGV2KTsKKwlpZWVlODAyMTFfc2V0dXBfc2RhdGEoc2RhdGEsIHR5cGUpOworCisJLyogcmVzZXQgc29tZSB2YWx1ZXMgdGhhdCBzaG91bGRuJ3QgYmUga2VwdCBhY3Jvc3MgdHlwZSBjaGFuZ2VzICovCisJc2RhdGEtPmJhc2ljX3JhdGVzID0gMDsKKwlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGllZWU4MDIxMV9pZl9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZXdfZGV2LCBlbnVtIGllZWU4MDIxMV9pZl90eXBlcyB0eXBlLAogCQkgICAgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IE5VTEw7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCiAJQVNTRVJUX1JUTkwoKTsKKwogCW5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpzZGF0YSkgKyBsb2NhbC0+aHcudmlmX2RhdGFfc2l6ZSwKIAkJCSAgICBuYW1lLCBpZWVlODAyMTFfaWZfc2V0dXApOwogCWlmICghbmRldikKQEAgLTY4LDI2ICsxOTUsMzMgQEAKIAkJZ290byBmYWlsOwogCiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwotCW5kZXYtPmJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCW5kZXYtPmlycSA9IGRldi0+aXJxOwotCW5kZXYtPm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0OwotCW5kZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9lbmQ7CiAJU0VUX05FVERFVl9ERVYobmRldiwgd2lwaHlfZGV2KGxvY2FsLT5ody53aXBoeSkpOwogCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihuZGV2KTsKKwkvKiBkb24ndCB1c2UgSUVFRTgwMjExX0RFVl9UT19TVUJfSUYgYmVjYXVzZSBpdCBjaGVja3MgdG9vIG11Y2ggKi8KKwlzZGF0YSA9IG5ldGRldl9wcml2KG5kZXYpOwogCW5kZXYtPmllZWU4MDIxMV9wdHIgPSAmc2RhdGEtPndkZXY7CisKKwkvKiBpbml0aWFsaXNlIHR5cGUtaW5kZXBlbmRlbnQgZGF0YSAqLwogCXNkYXRhLT53ZGV2LndpcGh5ID0gbG9jYWwtPmh3LndpcGh5OwotCXNkYXRhLT52aWYudHlwZSA9IElFRUU4MDIxMV9JRl9UWVBFX0FQOwotCXNkYXRhLT5kZXYgPSBuZGV2OwogCXNkYXRhLT5sb2NhbCA9IGxvY2FsOwotCWllZWU4MDIxMV9pZl9zZGF0YV9pbml0KHNkYXRhKTsKKwlzZGF0YS0+ZGV2ID0gbmRldjsKKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfRlJBR01FTlRfTUFYOyBpKyspCisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNkYXRhLT5mcmFnbWVudHNbaV0uc2tiX2xpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJnNkYXRhLT5rZXlfbGlzdCk7CisKKwlzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gLTE7CisJc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gLTE7CisKKwkvKiBzZXR1cCB0eXBlLWRlcGVuZGVudCBkYXRhICovCisJaWVlZTgwMjExX3NldHVwX3NkYXRhKHNkYXRhLCB0eXBlKTsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZShuZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKLQlpZWVlODAyMTFfZGVidWdmc19hZGRfbmV0ZGV2KHNkYXRhKTsKLQlpZWVlODAyMTFfaWZfc2V0X3R5cGUobmRldiwgdHlwZSk7CisJbmRldi0+dW5pbml0ID0gaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhOwogCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikgJiYKIAkgICAgcGFyYW1zICYmIHBhcmFtcy0+bWVzaF9pZF9sZW4pCkBAIC05NSwxMSArMjI5LDYgQEAKIAkJCQkJICAgICBwYXJhbXMtPm1lc2hfaWRfbGVuLAogCQkJCQkgICAgIHBhcmFtcy0+bWVzaF9pZCk7CiAKLQkvKiB3ZSdyZSB1bmRlciBSVE5MIHNvIGFsbCB0aGlzIGlzIGZpbmUgKi8KLQlpZiAodW5saWtlbHkobG9jYWwtPnJlZ19zdGF0ZSA9PSBJRUVFODAyMTFfREVWX1VOUkVHSVNURVJFRCkpIHsKLQkJX19pZWVlODAyMTFfaWZfZGVsKGxvY2FsLCBzZGF0YSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KIAlsaXN0X2FkZF90YWlsX3JjdSgmc2RhdGEtPmxpc3QsICZsb2NhbC0+aW50ZXJmYWNlcyk7CiAKIAlpZiAobmV3X2RldikKQEAgLTEwNywyMTcgKzIzNiwzNCBAQAogCiAJcmV0dXJuIDA7CiAKLWZhaWw6CisgZmFpbDoKIAlmcmVlX25ldGRldihuZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIGllZWU4MDIxMV9pZl9zZXRfdHlwZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdHlwZSkKK3ZvaWQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpbnQgb2xkdHlwZSA9IHNkYXRhLT52aWYudHlwZTsKLQotCS8qCi0JICogV2UgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gb24gdGhlIG1hc3RlciBpbnRlcmZhY2UKLQkgKiB3aGljaCBhbHJlYWR5IGhhcyBhIGhhcmRfc3RhcnRfeG1pdCByb3V0aW5lIGFzc2lnbmVkCi0JICogd2hpY2ggbXVzdCBub3QgYmUgY2hhbmdlZC4KLQkgKi8KLQlpZiAoZGV2ICE9IHNkYXRhLT5sb2NhbC0+bWRldikKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdDsKLQotCS8qCi0JICogQ2FsbGVkIGV2ZW4gd2hlbiByZWdpc3Rlcl9uZXRkZXZpY2UgZmFpbHMsIGl0IHdvdWxkCi0JICogb29wcyBpZiBhc3NpZ25lZCBiZWZvcmUgaW5pdGlhbGlzaW5nIHRoZSByZXN0LgotCSAqLwotCWRldi0+dW5pbml0ID0gaWVlZTgwMjExX2lmX3JlaW5pdDsKLQotCS8qIG1vc3QgaGF2ZSBubyBCU1MgcG9pbnRlciAqLwotCXNkYXRhLT5ic3MgPSBOVUxMOwotCXNkYXRhLT52aWYudHlwZSA9IHR5cGU7Ci0KLQlzZGF0YS0+YmFzaWNfcmF0ZXMgPSAwOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6Ci0JCS8qIG5vdGhpbmcgc3BlY2lhbCAqLwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46Ci0JCXNkYXRhLT51LnZsYW4uYXAgPSBOVUxMOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0FQOgotCQlzZGF0YS0+dS5hcC5mb3JjZV91bmljYXN0X3JhdGVpZHggPSAtMTsKLQkJc2RhdGEtPnUuYXAubWF4X3JhdGVjdHJsX3JhdGVpZHggPSAtMTsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2RhdGEtPnUuYXAucHNfYmNfYnVmKTsKLQkJc2RhdGEtPmJzcyA9ICZzZGF0YS0+dS5hcDsKLQkJSU5JVF9MSVNUX0hFQUQoJnNkYXRhLT51LmFwLnZsYW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UOgotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSUJTUzogewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICptc2RhdGE7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKLQotCQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JCUlOSVRfV09SSygmaWZzdGEtPndvcmssIGllZWU4MDIxMV9zdGFfd29yayk7Ci0JCXNldHVwX3RpbWVyKCZpZnN0YS0+dGltZXIsIGllZWU4MDIxMV9zdGFfdGltZXIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZzdGEtPnNrYl9xdWV1ZSk7Ci0KLQkJaWZzdGEtPmNhcGFiID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKLQkJaWZzdGEtPmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIHwKLQkJCUlFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZOwotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUyB8Ci0JCQlJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEIHwKLQkJCUlFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAotCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwotCi0JCW1zZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHNkYXRhLT5sb2NhbC0+bWRldik7Ci0JCXNkYXRhLT5ic3MgPSAmbXNkYXRhLT51LmFwOwotCi0JCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQotCQkJaWVlZTgwMjExX21lc2hfaW5pdF9zZGF0YShzZGF0YSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01OVFI6Ci0JCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdDsKLQkJc2RhdGEtPnUubW50cl9mbGFncyA9IE1PTklUT1JfRkxBR19DT05UUk9MIHwKLQkJCQkgICAgICBNT05JVE9SX0ZMQUdfT1RIRVJfQlNTOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXM6IFVua25vd24gaW50ZXJmYWNlIHR5cGUgMHgleCIsCi0JCSAgICAgICBkZXYtPm5hbWUsIF9fZnVuY19fLCB0eXBlKTsKLQl9Ci0JaWVlZTgwMjExX2RlYnVnZnNfY2hhbmdlX2lmX3R5cGUoc2RhdGEsIG9sZHR5cGUpOwotfQotCi0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJ0bmwgbG9jayBoZWxkLiAqLwotdm9pZCBpZWVlODAyMTFfaWZfcmVpbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgZmx1c2hlZDsKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQlpZWVlODAyMTFfZnJlZV9rZXlzKHNkYXRhKTsKLQotCWllZWU4MDIxMV9pZl9zZGF0YV9kZWluaXQoc2RhdGEpOwotCi0JLyogTmVlZCB0byBoYW5kbGUgbWVzaCBzcGVjaWFsbHkgdG8gYWxsb3cgZWxpZGluZyB0aGUgZnVuY3Rpb24gY2FsbCAqLwotCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQotCQltZXNoX3JtY19mcmVlKGRldik7Ci0KLQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSU5WQUxJRDoKLQkJLyogY2Fubm90IGhhcHBlbiAqLwotCQlXQVJOX09OKDEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0FQOiB7Ci0JCS8qIFJlbW92ZSBhbGwgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXNlIHRoaXMgQlNTCi0JCSAqIGFzIHRoZWlyIHNkYXRhLT5ic3MgKi8KLQkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqdHNkYXRhLCAqbjsKLQkJc3RydWN0IGJlYWNvbl9kYXRhICpiZWFjb247Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRzZGF0YSwgbiwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCQlpZiAodHNkYXRhICE9IHNkYXRhICYmIHRzZGF0YS0+YnNzID09ICZzZGF0YS0+dS5hcCkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVtb3ZpbmcgdmlydHVhbCAiCi0JCQkJICAgICAgICJpbnRlcmZhY2UgJXMgYmVjYXVzZSBpdHMgQlNTIGludGVyZmFjZSIKLQkJCQkgICAgICAgIiBpcyBiZWluZyByZW1vdmVkXG4iLAotCQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB0c2RhdGEtPmRldi0+bmFtZSk7Ci0JCQkJbGlzdF9kZWxfcmN1KCZ0c2RhdGEtPmxpc3QpOwotCQkJCS8qCi0JCQkJICogV2UgaGF2ZSBsb3RzIG9mIHRpbWUgYW5kIGNhbiBhZmZvcmQKLQkJCQkgKiB0byBzeW5jIGZvciBlYWNoIGludGVyZmFjZQotCQkJCSAqLwotCQkJCXN5bmNocm9uaXplX3JjdSgpOwotCQkJCV9faWVlZTgwMjExX2lmX2RlbChsb2NhbCwgdHNkYXRhKTsKLQkJCX0KLQkJfQotCi0JCWJlYWNvbiA9IHNkYXRhLT51LmFwLmJlYWNvbjsKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT51LmFwLmJlYWNvbiwgTlVMTCk7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCQlrZnJlZShiZWFjb24pOwotCi0JCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNkYXRhLT51LmFwLnBzX2JjX2J1ZikpKSB7Ci0JCQlsb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQtLTsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJfQotCi0JCWJyZWFrOwotCX0KLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1dEUzoKLQkJLyogbm90aGluZyB0byBkbyAqLwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQ6Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOgotCQlrZnJlZShzZGF0YS0+dS5zdGEuZXh0cmFfaWUpOwotCQlzZGF0YS0+dS5zdGEuZXh0cmFfaWUgPSBOVUxMOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuYXNzb2NyZXFfaWVzKTsKLQkJc2RhdGEtPnUuc3RhLmFzc29jcmVxX2llcyA9IE5VTEw7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5hc3NvY3Jlc3BfaWVzKTsKLQkJc2RhdGEtPnUuc3RhLmFzc29jcmVzcF9pZXMgPSBOVUxMOwotCQlpZiAoc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3ApIHsKLQkJCWRldl9rZnJlZV9za2Ioc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3ApOwotCQkJc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3AgPSBOVUxMOwotCQl9Ci0KLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSOgotCQlkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfVkxBTjoKLQkJc2RhdGEtPnUudmxhbi5hcCA9IE5VTEw7Ci0JCWJyZWFrOwotCX0KLQotCWZsdXNoZWQgPSBzdGFfaW5mb19mbHVzaChsb2NhbCwgc2RhdGEpOwotCVdBUk5fT04oZmx1c2hlZCk7Ci0KLQltZW1zZXQoJnNkYXRhLT51LCAwLCBzaXplb2Yoc2RhdGEtPnUpKTsKLQlpZWVlODAyMTFfaWZfc2RhdGFfaW5pdChzZGF0YSk7Ci19Ci0KLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcnRubCBsb2NrIGhlbGQuICovCi12b2lkIF9faWVlZTgwMjExX2lmX2RlbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzZGF0YS0+ZGV2OwotCi0JaWVlZTgwMjExX2RlYnVnZnNfcmVtb3ZlX25ldGRldihzZGF0YSk7CisJbGlzdF9kZWxfcmN1KCZzZGF0YS0+bGlzdCk7CisJc3luY2hyb25pemVfcmN1KCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKLQkvKiBFeGNlcHQgbWFzdGVyIGludGVyZmFjZSwgdGhlIG5ldF9kZXZpY2Ugd2lsbCBiZSBmcmVlZCBieQotCSAqIG5ldF9kZXZpY2UtPmRlc3RydWN0b3IgKGkuIGUuIGllZWU4MDIxMV9pZl9mcmVlKS4gKi8KIH0KIAotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBydG5sIGxvY2sgaGVsZC4gKi8KLWludCBpZWVlODAyMTFfaWZfcmVtb3ZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCkKKy8qCisgKiBSZW1vdmUgYWxsIGludGVyZmFjZXMsIG1heSBvbmx5IGJlIGNhbGxlZCBhdCBoYXJkd2FyZSB1bnJlZ2lzdHJhdGlvbgorICogdGltZSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gUkNVLXNhZmUgbGlzdCByZW1vdmFscy4KKyAqLwordm9pZCBpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgKm47CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsICp0bXA7CiAKIAlBU1NFUlRfUlROTCgpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYXRhLCBuLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKChzZGF0YS0+dmlmLnR5cGUgPT0gaWQgfHwgaWQgPT0gLTEpICYmCi0JCSAgICBzdHJjbXAobmFtZSwgc2RhdGEtPmRldi0+bmFtZSkgPT0gMCAmJgotCQkgICAgc2RhdGEtPmRldiAhPSBsb2NhbC0+bWRldikgewotCQkJbGlzdF9kZWxfcmN1KCZzZGF0YS0+bGlzdCk7Ci0JCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJCV9faWVlZTgwMjExX2lmX2RlbChsb2NhbCwgc2RhdGEpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RhdGEsIHRtcCwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZzZGF0YS0+bGlzdCk7CisJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHNkYXRhLT5kZXYpOwogCX0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotdm9pZCBpZWVlODAyMTFfaWZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWllZWU4MDIxMV9pZl9zZGF0YV9kZWluaXQoc2RhdGEpOwotCWZyZWVfbmV0ZGV2KGRldik7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmMKaW5kZXggMjIwZTgzYi4uNjU5N2M3NyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5jCisrKyBiL25ldC9tYWM4MDIxMS9rZXkuYwpAQCAtMzIxLDggKzMyMSwxNSBAQAogCQkgKiBzb21lIGhhcmR3YXJlIGNhbm5vdCBoYW5kbGUgVEtJUCB3aXRoIFFvUywgc28KIAkJICogd2UgaW5kaWNhdGUgd2hldGhlciBRb1MgY291bGQgYmUgaW4gdXNlLgogCQkgKi8KLQkJaWYgKHN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9XTUUpCisJCWlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1dNRSkpCiAJCQlrZXktPmNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1dNTV9TVEE7CisKKwkJLyoKKwkJICogVGhpcyBrZXkgaXMgZm9yIGEgc3BlY2lmaWMgc3RhIGludGVyZmFjZSwKKwkJICogaW5mb3JtIHRoZSBkcml2ZXIgdGhhdCBpdCBzaG91bGQgdHJ5IHRvIHN0b3JlCisJCSAqIHRoaXMga2V5IGFzIHBhaXJ3aXNlIGtleS4KKwkJICovCisJCWtleS0+Y29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0U7CiAJfSBlbHNlIHsKIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpIHsKIAkJCXN0cnVjdCBzdGFfaW5mbyAqYXA7CkBAIC0zMzUsNyArMzQyLDcgQEAKIAkJCS8qIHNhbWUgaGVyZSwgdGhlIEFQIGNvdWxkIGJlIHVzaW5nIFFvUyAqLwogCQkJYXAgPSBzdGFfaW5mb19nZXQoa2V5LT5sb2NhbCwga2V5LT5zZGF0YS0+dS5zdGEuYnNzaWQpOwogCQkJaWYgKGFwKSB7Ci0JCQkJaWYgKGFwLT5mbGFncyAmIFdMQU5fU1RBX1dNRSkKKwkJCQlpZiAodGVzdF9zdGFfZmxhZ3MoYXAsIFdMQU5fU1RBX1dNRSkpCiAJCQkJCWtleS0+Y29uZi5mbGFncyB8PQogCQkJCQkJSUVFRTgwMjExX0tFWV9GTEFHX1dNTV9TVEE7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmggYi9uZXQvbWFjODAyMTEva2V5LmgKaW5kZXggZjUyYzNkZi4uNDI1ODE2ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5oCisrKyBiL25ldC9tYWM4MDIxMS9rZXkuaApAQCAtMTYsMzEgKzE2LDE4IEBACiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAotLyogQUxHX1RLSVAKLSAqIHN0cnVjdCBpZWVlODAyMTFfa2V5OjprZXkgaXMgZW5jb2RlZCBhcyBhIDI1Ni1iaXQgKDMyIGJ5dGUpIGRhdGEgYmxvY2s6Ci0gKiBUZW1wb3JhbCBFbmNyeXB0aW9uIEtleSAoMTI4IGJpdHMpCi0gKiBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFR4IE1JQyBLZXkgKDY0IGJpdHMpCi0gKiBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFJ4IE1JQyBLZXkgKDY0IGJpdHMpCi0gKi8KKyNkZWZpbmUgV0VQX0lWX0xFTgkJNAorI2RlZmluZSBXRVBfSUNWX0xFTgkJNAorI2RlZmluZSBBTEdfVEtJUF9LRVlfTEVOCTMyCisjZGVmaW5lIEFMR19DQ01QX0tFWV9MRU4JMTYKKyNkZWZpbmUgQ0NNUF9IRFJfTEVOCQk4CisjZGVmaW5lIENDTVBfTUlDX0xFTgkJOAorI2RlZmluZSBDQ01QX1RLX0xFTgkJMTYKKyNkZWZpbmUgQ0NNUF9QTl9MRU4JCTYKKyNkZWZpbmUgVEtJUF9JVl9MRU4JCTgKKyNkZWZpbmUgVEtJUF9JQ1ZfTEVOCQk0CiAKLSNkZWZpbmUgV0VQX0lWX0xFTiA0Ci0jZGVmaW5lIFdFUF9JQ1ZfTEVOIDQKLQotI2RlZmluZSBBTEdfVEtJUF9LRVlfTEVOIDMyCi0vKiBTdGFydGluZyBvZmZzZXRzIGZvciBlYWNoIGtleSAqLwotI2RlZmluZSBBTEdfVEtJUF9URU1QX0VOQ1JfS0VZIDAKLSNkZWZpbmUgQUxHX1RLSVBfVEVNUF9BVVRIX1RYX01JQ19LRVkgMTYKLSNkZWZpbmUgQUxHX1RLSVBfVEVNUF9BVVRIX1JYX01JQ19LRVkgMjQKLSNkZWZpbmUgVEtJUF9JVl9MRU4gOAotI2RlZmluZSBUS0lQX0lDVl9MRU4gNAotCi0jZGVmaW5lIEFMR19DQ01QX0tFWV9MRU4gMTYKLSNkZWZpbmUgQ0NNUF9IRFJfTEVOIDgKLSNkZWZpbmUgQ0NNUF9NSUNfTEVOIDgKLSNkZWZpbmUgQ0NNUF9US19MRU4gMTYKLSNkZWZpbmUgQ0NNUF9QTl9MRU4gNgotCi0jZGVmaW5lIE5VTV9SWF9EQVRBX1FVRVVFUyAxNworI2RlZmluZSBOVU1fUlhfREFUQV9RVUVVRVMJMTcKIAogc3RydWN0IGllZWU4MDIxMV9sb2NhbDsKIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGE7CkBAIC02OSw2ICs1NiwxMyBAQAogCUtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlMJPSBCSVQoNSksCiB9OwogCitzdHJ1Y3QgdGtpcF9jdHggeworCXUzMiBpdjMyOworCXUxNiBpdjE2OworCXUxNiBwMWtbNV07CisJaW50IGluaXRpYWxpemVkOworfTsKKwogc3RydWN0IGllZWU4MDIxMV9rZXkgewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwpAQCAtODUsMTYgKzc5LDEwIEBACiAJdW5pb24gewogCQlzdHJ1Y3QgewogCQkJLyogbGFzdCB1c2VkIFRTQyAqLwotCQkJdTMyIGl2MzI7Ci0JCQl1MTYgaXYxNjsKLQkJCXUxNiBwMWtbNV07Ci0JCQlpbnQgdHhfaW5pdGlhbGl6ZWQ7CisJCQlzdHJ1Y3QgdGtpcF9jdHggdHg7CiAKIAkJCS8qIGxhc3QgcmVjZWl2ZWQgUlNDICovCi0JCQl1MzIgaXYzMl9yeFtOVU1fUlhfREFUQV9RVUVVRVNdOwotCQkJdTE2IGl2MTZfcnhbTlVNX1JYX0RBVEFfUVVFVUVTXTsKLQkJCXUxNiBwMWtfcnhbTlVNX1JYX0RBVEFfUVVFVUVTXVs1XTsKLQkJCWludCByeF9pbml0aWFsaXplZFtOVU1fUlhfREFUQV9RVUVVRVNdOworCQkJc3RydWN0IHRraXBfY3R4IHJ4W05VTV9SWF9EQVRBX1FVRVVFU107CiAJCX0gdGtpcDsKIAkJc3RydWN0IHsKIAkJCXU4IHR4X3BuWzZdOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggZGYwODM2Zi4uZjFhODNkNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21haW4uYworKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jCkBAIC0zNSw4ICszNSw2IEBACiAjaW5jbHVkZSAiZGVidWdmcy5oIgogI2luY2x1ZGUgImRlYnVnZnNfbmV0ZGV2LmgiCiAKLSNkZWZpbmUgU1VQUF9NQ1NfU0VUX0xFTiAxNgotCiAvKgogICogRm9yIHNlZWluZyB0cmFuc21pdHRlZCBwYWNrZXRzIG9uIG1vbml0b3IgaW50ZXJmYWNlcwogICogd2UgaGF2ZSBhIHJhZGlvdGFwIGhlYWRlciB0b28uCkBAIC0xMDcsMTIgKzEwNSwxOCBAQAogCiAJLyogd2UgaG9sZCB0aGUgUlROTCBoZXJlIHNvIGNhbiBzYWZlbHkgd2FsayB0aGUgbGlzdCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoc2RhdGEtPmRldiAhPSBkZXYgJiYgbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgewogCQkJcmVzID0gMDsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJldHVybiByZXM7CisKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhsb2NhbC0+bWRldik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfbWFzdGVyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEyMiw3ICsxMjYsNyBAQAogCiAJLyogd2UgaG9sZCB0aGUgUlROTCBoZXJlIHNvIGNhbiBzYWZlbHkgd2FsayB0aGUgbGlzdCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkKLQkJaWYgKHNkYXRhLT5kZXYgIT0gZGV2ICYmIG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQogCQkJZGV2X2Nsb3NlKHNkYXRhLT5kZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xNDcsOSArMTUxLDcgQEAKIAkvKiBGSVg6IHdoYXQgd291bGQgYmUgcHJvcGVyIGxpbWl0cyBmb3IgTVRVPwogCSAqIFRoaXMgaW50ZXJmYWNlIHVzZXMgODAyLjMgZnJhbWVzLiAqLwogCWlmIChuZXdfbXR1IDwgMjU2IHx8Ci0JCW5ld19tdHUgPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOIC0gMjQgLSA2IC0gbWVzaGhkcmxlbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW52YWxpZCBNVFUgJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIG5ld19tdHUpOworCSAgICBuZXdfbXR1ID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTiAtIDI0IC0gNiAtIG1lc2hoZHJsZW4pIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xODAsMTAgKzE4MiwxMSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCAqbnNkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKKwl1MzIgY2hhbmdlZCA9IDA7CiAJaW50IHJlczsKIAlib29sIG5lZWRfaHdfcmVjb25maWcgPSAwOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCkBAIC0xOTEsNyArMTk0LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5zZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbnNkYXRhLT5kZXY7CiAKLQkJaWYgKG5kZXYgIT0gZGV2ICYmIG5kZXYgIT0gbG9jYWwtPm1kZXYgJiYgbmV0aWZfcnVubmluZyhuZGV2KSkgeworCQlpZiAobmRldiAhPSBkZXYgJiYgbmV0aWZfcnVubmluZyhuZGV2KSkgewogCQkJLyoKIAkJCSAqIEFsbG93IG9ubHkgYSBzaW5nbGUgSUJTUyBpbnRlcmZhY2UgdG8gYmUgdXAgYXQgYW55CiAJCQkgKiB0aW1lLiBUaGlzIGlzIHJlc3RyaWN0ZWQgYmVjYXVzZSBiZWFjb24gZGlzdHJpYnV0aW9uCkBAIC0yMDcsMzAgKzIxMCw2IEBACiAJCQkJcmV0dXJuIC1FQlVTWTsKIAogCQkJLyoKLQkJCSAqIERpc2FsbG93IG11bHRpcGxlIElCU1MvU1RBIG1vZGUgaW50ZXJmYWNlcy4KLQkJCSAqCi0JCQkgKiBUaGlzIGlzIGEgdGVjaG5pY2FsIHJlc3RyaWN0aW9uLCBpdCBpcyBwb3NzaWJsZSBhbHRob3VnaAotCQkJICogbW9zdCBsaWtlbHkgbm90IElFRUUgODAyLjExIGNvbXBsaWFudCB0byBoYXZlIG11bHRpcGxlCi0JCQkgKiBTVEFzIHdpdGgganVzdCBhIHNpbmdsZSBoYXJkd2FyZSAodGhlIFRTRiB0aW1lciB3aWxsIG5vdAotCQkJICogYmUgYWRqdXN0ZWQgcHJvcGVybHkuKQotCQkJICoKLQkJCSAqIEhvd2V2ZXIsIGJlY2F1c2UgbWFjODAyMTEgdXNlcyB0aGUgbWFzdGVyIGRldmljZSdzIEJTUwotCQkJICogaW5mb3JtYXRpb24gZm9yIGVhY2ggU1RBL0lCU1MgaW50ZXJmYWNlLCBkb2luZyB0aGlzIHdpbGwKLQkJCSAqIGN1cnJlbnRseSBjb3JydXB0IHRoYXQgQlNTIGluZm9ybWF0aW9uIGNvbXBsZXRlbHksIHVubGVzcywKLQkJCSAqIGEgbm90IHZlcnkgdXNlZnVsIGNhc2UsIGJvdGggU1RBcyBhcmUgYXNzb2NpYXRlZCB0byB0aGUKLQkJCSAqIHNhbWUgQlNTLgotCQkJICoKLQkJCSAqIFRvIHJlbW92ZSB0aGlzIHJlc3RyaWN0aW9uLCB0aGUgQlNTIGluZm9ybWF0aW9uIG5lZWRzIHRvCi0JCQkgKiBiZSBlbWJlZGRlZCBpbiB0aGUgU1RBL0lCU1MgbW9kZSBzZGF0YSBpbnN0ZWFkIG9mIHVzaW5nCi0JCQkgKiB0aGUgbWFzdGVyIGRldmljZSdzIEJTUyBzdHJ1Y3R1cmUuCi0JCQkgKi8KLQkJCWlmICgoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSB8fAotCQkJICAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgJiYKLQkJCSAgICAobnNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKLQkJCSAgICAgbnNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSkKLQkJCQlyZXR1cm4gLUVCVVNZOwotCi0JCQkvKgogCQkJICogVGhlIHJlbWFpbmluZyBjaGVja3MgYXJlIG9ubHkgcGVyZm9ybWVkIGZvciBpbnRlcmZhY2VzCiAJCQkgKiB3aXRoIHRoZSBzYW1lIE1BQyBhZGRyZXNzLgogCQkJICovCkBAIC0yNDksNyArMjI4LDcgQEAKIAkJCSAqLwogCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOICYmCiAJCQkgICAgbnNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkKLQkJCQlzZGF0YS0+dS52bGFuLmFwID0gbnNkYXRhOworCQkJCXNkYXRhLT5ic3MgPSAmbnNkYXRhLT51LmFwOwogCQl9CiAJfQogCkBAIC0yNTksMTAgKzIzOCwxMyBAQAogCQkJcmV0dXJuIC1FTk9MSU5LOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46Ci0JCWlmICghc2RhdGEtPnUudmxhbi5hcCkKKwkJaWYgKCFzZGF0YS0+YnNzKQogCQkJcmV0dXJuIC1FTk9MSU5LOworCQlsaXN0X2FkZCgmc2RhdGEtPnUudmxhbi5saXN0LCAmc2RhdGEtPmJzcy0+dmxhbnMpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0FQOgorCQlzZGF0YS0+YnNzID0gJnNkYXRhLT51LmFwOworCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01OVFI6CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOgpAQCAtMjgwLDE0ICsyNjIsMTMgQEAKIAkJaWYgKGxvY2FsLT5vcHMtPnN0YXJ0KQogCQkJcmVzID0gbG9jYWwtPm9wcy0+c3RhcnQobG9jYWxfdG9faHcobG9jYWwpKTsKIAkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7CisJCQlnb3RvIGVycl9kZWxfYnNzOwogCQluZWVkX2h3X3JlY29uZmlnID0gMTsKIAkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgbG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCk7CiAJfQogCiAJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46Ci0JCWxpc3RfYWRkKCZzZGF0YS0+dS52bGFuLmxpc3QsICZzZGF0YS0+dS52bGFuLmFwLT51LmFwLnZsYW5zKTsKIAkJLyogbm8gbmVlZCB0byB0ZWxsIGRyaXZlciAqLwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01OVFI6CkBAIC0zMTAsOSArMjkxLDkgQEAKIAkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfT1RIRVJfQlNTKQogCQkJbG9jYWwtPmZpZl9vdGhlcl9ic3MrKzsKIAotCQluZXRpZl90eF9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKKwkJbmV0aWZfYWRkcl9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAkJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwotCQluZXRpZl90eF91bmxvY2tfYmgobG9jYWwtPm1kZXYpOworCQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSUJTUzoKQEAgLTMyNiw4ICszMDcsMTAgQEAKIAkJaWYgKHJlcykKIAkJCWdvdG8gZXJyX3N0b3A7CiAKLQkJaWVlZTgwMjExX2lmX2NvbmZpZyhkZXYpOwotCQlpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oZGV2KTsKKwkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCisJCQlpZWVlODAyMTFfc3RhcnRfbWVzaChzZGF0YS0+ZGV2KTsKKwkJY2hhbmdlZCB8PSBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oZGV2KTsKKwkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGNoYW5nZWQpOwogCQlpZWVlODAyMTFfZW5hYmxlX2tleXMoc2RhdGEpOwogCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBICYmCkBAIC0zNDYsNiArMzI5LDcgQEAKIAkJCWdvdG8gZXJyX2RlbF9pbnRlcmZhY2U7CiAJCX0KIAorCQkvKiBubyBsb2NraW5nIHJlcXVpcmVkIHNpbmNlIFNUQSBpcyBub3QgbGl2ZSB5ZXQgKi8KIAkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9BVVRIT1JJWkVEOwogCiAJCXJlcyA9IHN0YV9pbmZvX2luc2VydChzdGEpOwpAQCAtMzg1LDEzICszNjksMTMgQEAKIAkgKiB5ZXQgYmUgZWZmZWN0aXZlLiBUcmlnZ2VyIGV4ZWN1dGlvbiBvZiBpZWVlODAyMTFfc3RhX3dvcmsKIAkgKiB0byBmaXggdGhpcy4KIAkgKi8KLQlpZihzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBIHx8Ci0JICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSB8fAorCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CiAJfQogCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7CiAKIAlyZXR1cm4gMDsKICBlcnJfZGVsX2ludGVyZmFjZToKQEAgLTM5OSw2ICszODMsMTAgQEAKICBlcnJfc3RvcDoKIAlpZiAoIWxvY2FsLT5vcGVuX2NvdW50ICYmIGxvY2FsLT5vcHMtPnN0b3ApCiAJCWxvY2FsLT5vcHMtPnN0b3AobG9jYWxfdG9faHcobG9jYWwpKTsKKyBlcnJfZGVsX2JzczoKKwlzZGF0YS0+YnNzID0gTlVMTDsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4pCisJCWxpc3RfZGVsKCZzZGF0YS0+dS52bGFuLmxpc3QpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTQxMiw3ICs0MDAsNyBAQAogCS8qCiAJICogU3RvcCBUWCBvbiB0aGlzIGludGVyZmFjZSBmaXJzdC4KIAkgKi8KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CiAKIAkvKgogCSAqIE5vdyBkZWxldGUgYWxsIGFjdGl2ZSBhZ2dyZWdhdGlvbiBzZXNzaW9ucy4KQEAgLTQ4MSw3ICs0NjksNiBAQAogCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOOgogCQlsaXN0X2RlbCgmc2RhdGEtPnUudmxhbi5saXN0KTsKLQkJc2RhdGEtPnUudmxhbi5hcCA9IE5VTEw7CiAJCS8qIG5vIG5lZWQgdG8gdGVsbCBkcml2ZXIgKi8KIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSOgpAQCAtNTAzLDkgKzQ5MCw5IEBACiAJCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX09USEVSX0JTUykKIAkJCWxvY2FsLT5maWZfb3RoZXJfYnNzLS07CiAKLQkJbmV0aWZfdHhfbG9ja19iaChsb2NhbC0+bWRldik7CisJCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7CiAJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQkJbmV0aWZfdHhfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKKwkJbmV0aWZfYWRkcl91bmxvY2tfYmgobG9jYWwtPm1kZXYpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQ6CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6CkBAIC01NDQsNiArNTMxLDggQEAKIAkJbG9jYWwtPm9wcy0+cmVtb3ZlX2ludGVyZmFjZShsb2NhbF90b19odyhsb2NhbCksICZjb25mKTsKIAl9CiAKKwlzZGF0YS0+YnNzID0gTlVMTDsKKwogCWlmIChsb2NhbC0+b3Blbl9jb3VudCA9PSAwKSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGxvY2FsLT5tZGV2KSkKIAkJCWRldl9jbG9zZShsb2NhbC0+bWRldik7CkBAIC01ODQsMTcgKzU3MywxOSBAQAogCiAJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CiAJaWYgKCFzdGEpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHRoZSBzdGF0aW9uXG4iKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiAtRU5PRU5UOworI2VuZGlmCisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXhpdDsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCiAJLyogd2UgaGF2ZSB0cmllZCB0b28gbWFueSB0aW1lcywgcmVjZWl2ZXIgZG9lcyBub3Qgd2FudCBBLU1QRFUgKi8KIAlpZiAoc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA+IEhUX0FHR19NQVhfUkVUUklFUykgewogCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gc3RhcnRfYmFfZXhpdDsKKwkJZ290byBlcnJfdW5sb2NrX3N0YTsKIAl9CiAKIAlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CkBAIC02MDUsMTggKzU5NiwyMCBAQAogCQkJCSAiaWRsZSBvbiB0aWQgJXVcbiIsIHRpZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCiAJCXJldCA9IC1FQUdBSU47Ci0JCWdvdG8gc3RhcnRfYmFfZXhpdDsKKwkJZ290byBlcnJfdW5sb2NrX3N0YTsKIAl9CiAKIAkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLwogCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9CiAJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgdHggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAogCQkJCQl0aWQpOworI2VuZGlmCiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gc3RhcnRfYmFfZXhpdDsKKwkJZ290byBlcnJfdW5sb2NrX3N0YTsKIAl9CiAJLyogVHggdGltZXIgKi8KIAlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZnVuY3Rpb24gPQpAQCAtNjI1LDEwICs2MTgsNiBAQAogCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CiAJaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKIAotCS8qIGVuc3VyZSB0aGF0IFRYIGZsb3cgd29uJ3QgaW50ZXJydXB0IHVzCi0JICogdW50aWwgdGhlIGVuZCBvZiB0aGUgY2FsbCB0byByZXF1ZXVlIGZ1bmN0aW9uICovCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+bWRldi0+cXVldWVfbG9jayk7Ci0KIAkvKiBjcmVhdGUgYSBuZXcgcXVldWUgZm9yIHRoaXMgYWdncmVnYXRpb24gKi8KIAlyZXQgPSBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChsb2NhbCwgc3RhLCB0aWQpOwogCkBAIC02MzksNyArNjI4LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gcXVldWUgdW5hdmFpbGFibGUgZm9yIgogCQkJCQkiIHRpZCAlZFxuIiwgdGlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJZ290byBzdGFydF9iYV9lcnI7CisJCWdvdG8gZXJyX3VubG9ja19xdWV1ZTsKIAl9CiAJc2RhdGEgPSBzdGEtPnNkYXRhOwogCkBAIC02NTUsMTggKzY0NCwxOCBAQAogCQkvKiBObyBuZWVkIHRvIHJlcXVldWUgdGhlIHBhY2tldHMgaW4gdGhlIGFnZyBxdWV1ZSwgc2luY2Ugd2UKIAkJICogaGVsZCB0aGUgdHggbG9jazogbm8gcGFja2V0IGNvdWxkIGJlIGVucXVldWVkIHRvIHRoZSBuZXdseQogCQkgKiBhbGxvY2F0ZWQgcXVldWUgKi8KLQkJIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMCk7CisJCWllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIEhXIHVuYXZhaWxhYmxlIGZvciIKIAkJCQkJIiB0aWQgJWRcbiIsIHRpZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCiAJCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwotCQlnb3RvIHN0YXJ0X2JhX2VycjsKKwkJZ290byBlcnJfdW5sb2NrX3F1ZXVlOwogCX0KIAogCS8qIFdpbGwgcHV0IGFsbCB0aGUgcGFja2V0cyBpbiB0aGUgbmV3IFNXIHF1ZXVlICovCiAJaWVlZTgwMjExX3JlcXVldWUobG9jYWwsIGllZWU4MDJfMWRfdG9fYWNbdGlkXSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5tZGV2LT5xdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAogCS8qIHNlbmQgYW4gYWRkQkEgcmVxdWVzdCAqLwogCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yKys7CkBAIC02NzQsMjUgKzY2MywyNyBAQAogCQkJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3I7CiAJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24gPSBzdGFydF9zZXFfbnVtOwogCisKIAlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0YS0+c2RhdGEtPmRldiwgcmEsIHRpZCwKIAkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiwKIAkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiwKIAkJCSAweDQwLCA1MDAwKTsKLQogCS8qIGFjdGl2YXRlIHRoZSB0aW1lciBmb3IgdGhlIHJlY2lwaWVudCdzIGFkZEJBIHJlc3BvbnNlICovCiAJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmV4cGlyZXMgPQogCQkJCWppZmZpZXMgKyBBRERCQV9SRVNQX0lOVEVSVkFMOwogCWFkZF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiYWN0aXZhdGVkIGFkZEJBIHJlc3BvbnNlIHRpbWVyIG9uIHRpZCAlZFxuIiwgdGlkKTsKLQlnb3RvIHN0YXJ0X2JhX2V4aXQ7CisjZW5kaWYKKwlnb3RvIGV4aXQ7CiAKLXN0YXJ0X2JhX2VycjoKK2Vycl91bmxvY2tfcXVldWU6CiAJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKIAlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+bWRldi0+cXVldWVfbG9jayk7CiAJcmV0ID0gLUVCVVNZOwotc3RhcnRfYmFfZXhpdDoKLQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKK2Vycl91bmxvY2tfc3RhOgorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworZXhpdDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzIwLDcgKzcxMSw3IEBACiAKIAkvKiBjaGVjayBpZiB0aGUgVElEIGlzIGluIGFnZ3JlZ2F0aW9uICovCiAJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAKIAlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgewogCQlyZXQgPSAtRU5PRU5UOwpAQCAtNzUwLDcgKzc0MSw3IEBACiAJfQogCiBzdG9wX0JBX2V4aXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTc2NCw4ICs3NTUsMTAgQEAKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCiAJCQkJdGlkLCBTVEFfVElEX05VTSk7CisjZW5kaWYKIAkJcmV0dXJuOwogCX0KIApAQCAtNzczLDE4ICs3NjYsMjIgQEAKIAlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHN0YXRpb246ICVzXG4iLAogCQkJCXByaW50X21hYyhtYWMsIHJhKSk7CisjZW5kaWYKIAkJcmV0dXJuOwogCX0KIAogCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQlzcGluX2xvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCiAJaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHdhcyBub3QgcmVxdWVzdGVkIHlldCwgc3RhdGUgaXMgJWRcbiIsCiAJCQkJKnN0YXRlKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisjZW5kaWYKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQpAQCAtNzk0LDEwICs3OTEsMTIgQEAKIAkqc3RhdGUgfD0gSFRfQUREQkFfRFJWX1JFQURZX01TSzsKIAogCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJBZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGlkICVkIFxuIiwgdGlkKTsKKyNlbmRpZgogCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYik7CkBAIC04MTEsOCArODEwLDEwIEBACiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlpZiAodGlkID49IFNUQV9USURfTlVNKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgVElEIHZhbHVlOiB0aWQgPSAlZCAoPj0gJWQpXG4iLAogCQkJCXRpZCwgU1RBX1RJRF9OVU0pOworI2VuZGlmCiAJCXJldHVybjsKIAl9CiAKQEAgLTgyNCwxNyArODI1LDIzIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwogCWlmICghc3RhKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlc1xuIiwKIAkJCQlwcmludF9tYWMobWFjLCByYSkpOworI2VuZGlmCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQogCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKIAotCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwkvKiBOT1RFOiBubyBuZWVkIHRvIHVzZSBzdGEtPmxvY2sgaW4gdGhpcyBzdGF0ZSBjaGVjaywgYXMKKwkgKiBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uIHdpbGwgbGV0IG9ubHkgb25lIHN0b3AgY2FsbCB0bworCSAqIHBhc3MgdGhyb3VnaCBwZXIgc3RhL3RpZAorCSAqLwogCWlmICgoKnN0YXRlICYgSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSykgPT0gMCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBjYWxsYmFjayB0byBBLU1QRFUgc3RvcFxuIik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworI2VuZGlmCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQpAQCAtODQ1LDIzICs4NTIsMjAgQEAKIAogCWFnZ19xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKIAotCS8qIGF2b2lkIG9yZGVyaW5nIGlzc3Vlczogd2UgYXJlIHRoZSBvbmx5IG9uZSB0aGF0IGNhbiBtb2RpZnkKLQkgKiB0aGUgY29udGVudCBvZiB0aGUgcWRpc2NzICovCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+bWRldi0+cXVldWVfbG9jayk7Ci0JLyogcmVtb3ZlIHRoZSBxdWV1ZSBmb3IgdGhpcyBhZ2dyZWdhdGlvbiAqLwogCWllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5tZGV2LT5xdWV1ZV9sb2NrKTsKIAotCS8qIHdlIGp1c3QgcmVxdWV1ZWQgdGhlIGFsbCB0aGUgZnJhbWVzIHRoYXQgd2VyZSBpbiB0aGUgcmVtb3ZlZAotCSAqIHF1ZXVlLCBhbmQgc2luY2Ugd2UgbWlnaHQgbWlzcyBhIHNvZnRpcnEgd2UgZG8gbmV0aWZfc2NoZWR1bGUuCi0JICogaWVlZTgwMjExX3dha2VfcXVldWUgaXMgbm90IHVzZWQgaGVyZSBhcyB0aGlzIHF1ZXVlIGlzIG5vdAotCSAqIG5lY2Vzc2FyaWx5IHN0b3BwZWQgKi8KLQluZXRpZl9zY2hlZHVsZShsb2NhbC0+bWRldik7CisJLyogV2UganVzdCByZXF1ZXVlZCB0aGUgYWxsIHRoZSBmcmFtZXMgdGhhdCB3ZXJlIGluIHRoZQorCSAqIHJlbW92ZWQgcXVldWUsIGFuZCBzaW5jZSB3ZSBtaWdodCBtaXNzIGEgc29mdGlycSB3ZSBkbworCSAqIG5ldGlmX3NjaGVkdWxlX3F1ZXVlLiAgaWVlZTgwMjExX3dha2VfcXVldWUgaXMgbm90IHVzZWQKKwkgKiBoZXJlIGFzIHRoaXMgcXVldWUgaXMgbm90IG5lY2Vzc2FyaWx5IHN0b3BwZWQKKwkgKi8KKwluZXRpZl9zY2hlZHVsZV9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBhZ2dfcXVldWUpKTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7CiAJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7CiAJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKIAlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC04NzUsOSArODc5LDExIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoMCk7CiAKIAlpZiAodW5saWtlbHkoIXNrYikpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgogCQkJICAgICAgICJkcm9wcGluZyBzdGFydCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOworI2VuZGlmCiAJCXJldHVybjsKIAl9CiAJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOwpAQCAtODk4LDkgKzkwNCwxMSBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOwogCiAJaWYgKHVubGlrZWx5KCFza2IpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKIAkJCSAgICAgICAiZHJvcHBpbmcgc3RvcCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOworI2VuZGlmCiAJCXJldHVybjsKIAl9CiAJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOwpAQCAtOTUxLDcgKzk1OSw2IEBACiAJLmNhY2hlX3VwZGF0ZQk9IGV0aF9oZWFkZXJfY2FjaGVfdXBkYXRlLAogfTsKIAotLyogTXVzdCBub3QgYmUgY2FsbGVkIGZvciBtZGV2ICovCiB2b2lkIGllZWU4MDIxMV9pZl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWV0aGVyX3NldHVwKGRldik7CkBAIC05NjEsNjkgKzk2OCw1NCBAQAogCWRldi0+Y2hhbmdlX210dSA9IGllZWU4MDIxMV9jaGFuZ2VfbXR1OwogCWRldi0+b3BlbiA9IGllZWU4MDIxMV9vcGVuOwogCWRldi0+c3RvcCA9IGllZWU4MDIxMV9zdG9wOwotCWRldi0+ZGVzdHJ1Y3RvciA9IGllZWU4MDIxMV9pZl9mcmVlOworCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwogfQogCiAvKiBldmVyeXRoaW5nIGVsc2UgKi8KIAotc3RhdGljIGludCBfX2llZWU4MDIxMV9pZl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IHNrX2J1ZmYgKmJlYWNvbiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQoraW50IGllZWU4MDIxMV9pZl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUzMiBjaGFuZ2VkKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiBjb25mOwogCi0JaWYgKCFsb2NhbC0+b3BzLT5jb25maWdfaW50ZXJmYWNlIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpCisJaWYgKFdBUk5fT04oIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpKQorCQlyZXR1cm4gMDsKKworCWlmICghbG9jYWwtPm9wcy0+Y29uZmlnX2ludGVyZmFjZSkKIAkJcmV0dXJuIDA7CiAKIAltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihjb25mKSk7Ci0JY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOworCWNvbmYuY2hhbmdlZCA9IGNoYW5nZWQ7CisKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSB8fAogCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewogCQljb25mLmJzc2lkID0gc2RhdGEtPnUuc3RhLmJzc2lkOwogCQljb25mLnNzaWQgPSBzZGF0YS0+dS5zdGEuc3NpZDsKIAkJY29uZi5zc2lkX2xlbiA9IHNkYXRhLT51LnN0YS5zc2lkX2xlbjsKLQl9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKLQkJY29uZi5iZWFjb24gPSBiZWFjb247Ci0JCWNvbmYuYmVhY29uX2NvbnRyb2wgPSBjb250cm9sOwotCQlpZWVlODAyMTFfc3RhcnRfbWVzaChkZXYpOwogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7CisJCWNvbmYuYnNzaWQgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKIAkJY29uZi5zc2lkID0gc2RhdGEtPnUuYXAuc3NpZDsKIAkJY29uZi5zc2lkX2xlbiA9IHNkYXRhLT51LmFwLnNzaWRfbGVuOwotCQljb25mLmJlYWNvbiA9IGJlYWNvbjsKLQkJY29uZi5iZWFjb25fY29udHJvbCA9IGNvbnRyb2w7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7CisJCXU4IHplcm9bRVRIX0FMRU5dID0geyAwIH07CisJCWNvbmYuYnNzaWQgPSB6ZXJvOworCQljb25mLnNzaWQgPSB6ZXJvOworCQljb25mLnNzaWRfbGVuID0gMDsKKwl9IGVsc2UgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKKwlpZiAoV0FSTl9PTighY29uZi5ic3NpZCAmJiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JTU0lEKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFdBUk5fT04oIWNvbmYuc3NpZCAmJiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX1NTSUQpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlyZXR1cm4gbG9jYWwtPm9wcy0+Y29uZmlnX2ludGVyZmFjZShsb2NhbF90b19odyhsb2NhbCksCiAJCQkJCSAgICAmc2RhdGEtPnZpZiwgJmNvbmYpOwogfQogCi1pbnQgaWVlZTgwMjExX2lmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCAmJgotCSAgICAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hPU1RfR0VOX0JFQUNPTl9URU1QTEFURSkpCi0JCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnX2JlYWNvbihkZXYpOwotCXJldHVybiBfX2llZWU4MDIxMV9pZl9jb25maWcoZGV2LCBOVUxMLCBOVUxMKTsKLX0KLQotaW50IGllZWU4MDIxMV9pZl9jb25maWdfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IT1NUX0dFTl9CRUFDT05fVEVNUExBVEUpKQotCQlyZXR1cm4gMDsKLQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChsb2NhbF90b19odyhsb2NhbCksICZzZGF0YS0+dmlmLAotCQkJCSAgICZjb250cm9sKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIF9faWVlZTgwMjExX2lmX2NvbmZpZyhkZXYsIHNrYiwgJmNvbnRyb2wpOwotfQotCiBpbnQgaWVlZTgwMjExX2h3X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CkBAIC0xMDY4LDU2ICsxMDYwLDg0IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvIGh0X2NvbmY7CiAJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyBodF9ic3NfY29uZjsKLQlpbnQgaTsKIAl1MzIgY2hhbmdlZCA9IDA7CisJaW50IGk7CisJdTggbWF4X3R4X3N0cmVhbXMgPSBJRUVFODAyMTFfSFRfQ0FQX01BWF9TVFJFQU1TOworCXU4IHR4X21jc19zZXRfY2FwOwogCiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOwogCi0JLyogSFQgaXMgbm90IHN1cHBvcnRlZCAqLwotCWlmICghc2JhbmQtPmh0X2luZm8uaHRfc3VwcG9ydGVkKSB7Ci0JCWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREU7Ci0JCXJldHVybiAwOwotCX0KLQogCW1lbXNldCgmaHRfY29uZiwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykpOwogCW1lbXNldCgmaHRfYnNzX2NvbmYsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvKSk7CiAKLQlpZiAoZW5hYmxlX2h0KSB7Ci0JCWlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfU1VQUE9SVF9IVF9NT0RFKSkKLQkJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfSFQ7CisJLyogSFQgaXMgbm90IHN1cHBvcnRlZCAqLworCWlmICghc2JhbmQtPmh0X2luZm8uaHRfc3VwcG9ydGVkKSB7CisJCWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREU7CisJCWdvdG8gb3V0OworCX0KIAotCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREU7Ci0JCWh0X2NvbmYuaHRfc3VwcG9ydGVkID0gMTsKLQotCQlodF9jb25mLmNhcCA9IHJlcV9odF9jYXAtPmNhcCAmIHNiYW5kLT5odF9pbmZvLmNhcDsKLQkJaHRfY29uZi5jYXAgJj0gfihJRUVFODAyMTFfSFRfQ0FQX01JTU9fUFMpOwotCQlodF9jb25mLmNhcCB8PSBzYmFuZC0+aHRfaW5mby5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX01JTU9fUFM7Ci0KLQkJZm9yIChpID0gMDsgaSA8IFNVUFBfTUNTX1NFVF9MRU47IGkrKykKLQkJCWh0X2NvbmYuc3VwcF9tY3Nfc2V0W2ldID0KLQkJCQkJc2JhbmQtPmh0X2luZm8uc3VwcF9tY3Nfc2V0W2ldICYKLQkJCQkJcmVxX2h0X2NhcC0+c3VwcF9tY3Nfc2V0W2ldOwotCi0JCWh0X2Jzc19jb25mLnByaW1hcnlfY2hhbm5lbCA9IHJlcV9ic3NfY2FwLT5wcmltYXJ5X2NoYW5uZWw7Ci0JCWh0X2Jzc19jb25mLmJzc19jYXAgPSByZXFfYnNzX2NhcC0+YnNzX2NhcDsKLQkJaHRfYnNzX2NvbmYuYnNzX29wX21vZGUgPSByZXFfYnNzX2NhcC0+YnNzX29wX21vZGU7Ci0KLQkJaHRfY29uZi5hbXBkdV9mYWN0b3IgPSByZXFfaHRfY2FwLT5hbXBkdV9mYWN0b3I7Ci0JCWh0X2NvbmYuYW1wZHVfZGVuc2l0eSA9IHJlcV9odF9jYXAtPmFtcGR1X2RlbnNpdHk7Ci0KLQkJLyogaWYgYnNzIGNvbmZpZ3VyYXRpb24gY2hhbmdlZCBzdG9yZSB0aGUgbmV3IG9uZSAqLwotCQlpZiAobWVtY21wKCZjb25mLT5odF9jb25mLCAmaHRfY29uZiwgc2l6ZW9mKGh0X2NvbmYpKSB8fAotCQkgICAgbWVtY21wKCZjb25mLT5odF9ic3NfY29uZiwgJmh0X2Jzc19jb25mLCBzaXplb2YoaHRfYnNzX2NvbmYpKSkgewotCQkJY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9IVDsKLQkJCW1lbWNweSgmY29uZi0+aHRfY29uZiwgJmh0X2NvbmYsIHNpemVvZihodF9jb25mKSk7Ci0JCQltZW1jcHkoJmNvbmYtPmh0X2Jzc19jb25mLCAmaHRfYnNzX2NvbmYsIHNpemVvZihodF9ic3NfY29uZikpOwotCQl9Ci0JfSBlbHNlIHsKKwkvKiBkaXNhYmxlIEhUICovCisJaWYgKCFlbmFibGVfaHQpIHsKIAkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfU1VQUE9SVF9IVF9NT0RFKQogCQkJY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9IVDsKIAkJY29uZi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1NVUFBPUlRfSFRfTU9ERTsKKwkJY29uZi0+aHRfY29uZi5odF9zdXBwb3J0ZWQgPSAwOworCQlnb3RvIG91dDsKIAl9CiAKKworCWlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfU1VQUE9SVF9IVF9NT0RFKSkKKwkJY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9IVDsKKworCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1NVUFBPUlRfSFRfTU9ERTsKKwlodF9jb25mLmh0X3N1cHBvcnRlZCA9IDE7CisKKwlodF9jb25mLmNhcCA9IHJlcV9odF9jYXAtPmNhcCAmIHNiYW5kLT5odF9pbmZvLmNhcDsKKwlodF9jb25mLmNhcCAmPSB+KElFRUU4MDIxMV9IVF9DQVBfTUlNT19QUyk7CisJaHRfY29uZi5jYXAgfD0gc2JhbmQtPmh0X2luZm8uY2FwICYgSUVFRTgwMjExX0hUX0NBUF9NSU1PX1BTOworCWh0X2Jzc19jb25mLnByaW1hcnlfY2hhbm5lbCA9IHJlcV9ic3NfY2FwLT5wcmltYXJ5X2NoYW5uZWw7CisJaHRfYnNzX2NvbmYuYnNzX2NhcCA9IHJlcV9ic3NfY2FwLT5ic3NfY2FwOworCWh0X2Jzc19jb25mLmJzc19vcF9tb2RlID0gcmVxX2Jzc19jYXAtPmJzc19vcF9tb2RlOworCisJaHRfY29uZi5hbXBkdV9mYWN0b3IgPSByZXFfaHRfY2FwLT5hbXBkdV9mYWN0b3I7CisJaHRfY29uZi5hbXBkdV9kZW5zaXR5ID0gcmVxX2h0X2NhcC0+YW1wZHVfZGVuc2l0eTsKKworCS8qIEJpdHMgOTYtMTAwICovCisJdHhfbWNzX3NldF9jYXAgPSBzYmFuZC0+aHRfaW5mby5zdXBwX21jc19zZXRbMTJdOworCisJLyogY29uZmlndXJlIHN1cHBvZXJ0ZWQgVHggTUNTIGFjY29yZGluZyB0byByZXF1ZXN0ZWQgTUNTCisJICogKGJhc2VkIGluIG1vc3QgY2FzZXMgb24gUnggY2FwYWJpbGl0aWVzIG9mIHBlZXIpIGFuZCBzZWxmCisJICogVHggTUNTIGNhcGFiaWxpdGllcyAoYXMgZGVmaW5lZCBieSBsb3cgbGV2ZWwgZHJpdmVyIEhXCisJICogVHggY2FwYWJpbGl0aWVzKSAqLworCWlmICghKHR4X21jc19zZXRfY2FwICYgSUVFRTgwMjExX0hUX0NBUF9NQ1NfVFhfREVGSU5FRCkpCisJCWdvdG8gY2hlY2tfY2hhbmdlZDsKKworCS8qIENvdW50aW5nIGZyb20gMCB0aGVyZm9yZSArIDEgKi8KKwlpZiAodHhfbWNzX3NldF9jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX01DU19UWF9SWF9ESUZGKQorCQltYXhfdHhfc3RyZWFtcyA9ICgodHhfbWNzX3NldF9jYXAgJgorCQkJCUlFRUU4MDIxMV9IVF9DQVBfTUNTX1RYX1NUUkVBTVMpID4+IDIpICsgMTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXhfdHhfc3RyZWFtczsgaSsrKQorCQlodF9jb25mLnN1cHBfbWNzX3NldFtpXSA9CisJCQlzYmFuZC0+aHRfaW5mby5zdXBwX21jc19zZXRbaV0gJgorCQkJCQlyZXFfaHRfY2FwLT5zdXBwX21jc19zZXRbaV07CisKKwlpZiAodHhfbWNzX3NldF9jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX01DU19UWF9VRVFNKQorCQlmb3IgKGkgPSBJRUVFODAyMTFfU1VQUF9NQ1NfU0VUX1VFUU07CisJCSAgICAgaSA8IElFRUU4MDIxMV9TVVBQX01DU19TRVRfTEVOOyBpKyspCisJCQlodF9jb25mLnN1cHBfbWNzX3NldFtpXSA9CisJCQkJc2JhbmQtPmh0X2luZm8uc3VwcF9tY3Nfc2V0W2ldICYKKwkJCQkJcmVxX2h0X2NhcC0+c3VwcF9tY3Nfc2V0W2ldOworCitjaGVja19jaGFuZ2VkOgorCS8qIGlmIGJzcyBjb25maWd1cmF0aW9uIGNoYW5nZWQgc3RvcmUgdGhlIG5ldyBvbmUgKi8KKwlpZiAobWVtY21wKCZjb25mLT5odF9jb25mLCAmaHRfY29uZiwgc2l6ZW9mKGh0X2NvbmYpKSB8fAorCSAgICBtZW1jbXAoJmNvbmYtPmh0X2Jzc19jb25mLCAmaHRfYnNzX2NvbmYsIHNpemVvZihodF9ic3NfY29uZikpKSB7CisJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfSFQ7CisJCW1lbWNweSgmY29uZi0+aHRfY29uZiwgJmh0X2NvbmYsIHNpemVvZihodF9jb25mKSk7CisJCW1lbWNweSgmY29uZi0+aHRfYnNzX2NvbmYsICZodF9ic3NfY29uZiwgc2l6ZW9mKGh0X2Jzc19jb25mKSk7CisJfQorb3V0OgogCXJldHVybiBjaGFuZ2VkOwogfQogCkBAIC0xMTM2LDUwICsxMTU2LDMwIEBACiAJCQkJCSAgICAgY2hhbmdlZCk7CiB9CiAKLXZvaWQgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit1MzIgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCiAJc2RhdGEtPmJzc19jb25mLnVzZV9jdHNfcHJvdCA9IDA7CiAJc2RhdGEtPmJzc19jb25mLnVzZV9zaG9ydF9wcmVhbWJsZSA9IDA7Ci0JaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsCi0JCQkJCSBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QgfAotCQkJCQkgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKTsKKwlyZXR1cm4gQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UIHwgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFOwogfQogCiB2b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnN0YXR1cykKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqc2F2ZWQ7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCB0bXA7CiAKIAlza2ItPmRldiA9IGxvY2FsLT5tZGV2OwotCXNhdmVkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMpLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoIXNhdmVkKSkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCi0JCQkgICAgICAgImRyb3BwaW5nIHR4IHN0YXR1cyIsIHNrYi0+ZGV2LT5uYW1lKTsKLQkJLyogc2hvdWxkIGJlIGRldl9rZnJlZV9za2JfaXJxLCBidXQgZHVlIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcKLQkJICogbmFtZWQgX2lycXNhZmUgaW5zdGVhZCBvZiBqdXN0IF9pcnEgd2UgY2FuJ3QgYmUgc3VyZSB0aGF0Ci0JCSAqIHBlb3BsZSB3b24ndCBjYWxsIGl0IGZyb20gbm9uLWlycSBjb250ZXh0cyAqLwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlyZXR1cm47Ci0JfQotCW1lbWNweShzYXZlZCwgc3RhdHVzLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMpKTsKLQkvKiBjb3B5IHBvaW50ZXIgdG8gc2F2ZWQgc3RhdHVzIGludG8gc2tiLT5jYiBmb3IgdXNlIGJ5IHRhc2tsZXQgKi8KLQltZW1jcHkoc2tiLT5jYiwgJnNhdmVkLCBzaXplb2Yoc2F2ZWQpKTsKLQogCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfVFhfU1RBVFVTX01TRzsKLQlza2JfcXVldWVfdGFpbChzdGF0dXMtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfUkVRX1RYX1NUQVRVUyA/CisJc2tiX3F1ZXVlX3RhaWwoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMgPwogCQkgICAgICAgJmxvY2FsLT5za2JfcXVldWUgOiAmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlLCBza2IpOwogCXRtcCA9IHNrYl9xdWV1ZV9sZW4oJmxvY2FsLT5za2JfcXVldWUpICsKIAkJc2tiX3F1ZXVlX2xlbigmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKTsKIAl3aGlsZSAodG1wID4gSUVFRTgwMjExX0lSUVNBRkVfUVVFVUVfTElNSVQgJiYKIAkgICAgICAgKHNrYiA9IHNrYl9kZXF1ZXVlKCZsb2NhbC0+c2tiX3F1ZXVlX3VucmVsaWFibGUpKSkgewotCQltZW1jcHkoJnNhdmVkLCBza2ItPmNiLCBzaXplb2Yoc2F2ZWQpKTsKLQkJa2ZyZWUoc2F2ZWQpOwogCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQl0bXAtLTsKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X3N0YXR1c19kcm9wKTsKQEAgLTExOTMsNyArMTE5Myw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqKSBkYXRhOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICp0eF9zdGF0dXM7CiAJc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmxvY2FsLT5za2JfcXVldWUpKSB8fApAQCAtMTIwOCwxMiArMTIwNyw4IEBACiAJCQlfX2llZWU4MDIxMV9yeChsb2NhbF90b19odyhsb2NhbCksIHNrYiwgJnJ4X3N0YXR1cyk7CiAJCQlicmVhazsKIAkJY2FzZSBJRUVFODAyMTFfVFhfU1RBVFVTX01TRzoKLQkJCS8qIGdldCBwb2ludGVyIHRvIHNhdmVkIHN0YXR1cyBvdXQgb2Ygc2tiLT5jYiAqLwotCQkJbWVtY3B5KCZ0eF9zdGF0dXMsIHNrYi0+Y2IsIHNpemVvZih0eF9zdGF0dXMpKTsKIAkJCXNrYi0+cGt0X3R5cGUgPSAwOwotCQkJaWVlZTgwMjExX3R4X3N0YXR1cyhsb2NhbF90b19odyhsb2NhbCksCi0JCQkJCSAgICBza2IsIHR4X3N0YXR1cyk7Ci0JCQlrZnJlZSh0eF9zdGF0dXMpOworCQkJaWVlZTgwMjExX3R4X3N0YXR1cyhsb2NhbF90b19odyhsb2NhbCksIHNrYik7CiAJCQlicmVhazsKIAkJY2FzZSBJRUVFODAyMTFfREVMQkFfTVNHOgogCQkJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOwpAQCAtMTIyNyw5ICsxMjIyLDggQEAKIAkJCQkJCSByYV90aWQtPnJhLCByYV90aWQtPnRpZCk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlicmVhayA7Ci0JCWRlZmF1bHQ6IC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSEgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVua25vd24gbWVzc2FnZSB0eXBlICglZClcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBza2ItPnBrdF90eXBlKTsKKwkJZGVmYXVsdDoKKwkJCVdBUk5fT04oMSk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJfQpAQCAtMTI0MiwyNCArMTIzNiwxNSBAQAogICogQWxzbywgdHhfcGFja2V0X2RhdGEgaW4gY2IgaXMgcmVzdG9yZWQgZnJvbSB0eF9jb250cm9sLiAqLwogc3RhdGljIHZvaWQgaWVlZTgwMjExX3JlbW92ZV90eF9leHRyYShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAotCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IGhkcmxlbiwgaXZfbGVuLCBtaWNfbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKnBrdF9kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAotCXBrdF9kYXRhID0gKHN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKilza2ItPmNiOwotCXBrdF9kYXRhLT5pZmluZGV4ID0gdmlmX3RvX3NkYXRhKGNvbnRyb2wtPnZpZiktPmRldi0+aWZpbmRleDsKLQlwa3RfZGF0YS0+ZmxhZ3MgPSAwOwotCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9SRVFfVFhfU1RBVFVTKQotCQlwa3RfZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUERfUkVRX1RYX1NUQVRVUzsKLQlpZiAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQpCi0JCXBrdF9kYXRhLT5mbGFncyB8PSBJRUVFODAyMTFfVFhQRF9ET19OT1RfRU5DUllQVDsKLQlpZiAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfUkVRVUVVRSkKLQkJcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX1JFUVVFVUU7Ci0JaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0VBUE9MX0ZSQU1FKQotCQlwa3RfZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUERfRUFQT0xfRlJBTUU7Ci0JcGt0X2RhdGEtPnF1ZXVlID0gY29udHJvbC0+cXVldWU7CisJaW5mby0+ZmxhZ3MgJj0JSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTIHwKKwkJCUlFRUU4MDIxMV9UWF9DVExfRE9fTk9UX0VOQ1JZUFQgfAorCQkJSUVFRTgwMjExX1RYX0NUTF9SRVFVRVVFIHwKKwkJCUlFRUU4MDIxMV9UWF9DVExfRUFQT0xfRlJBTUU7CiAKIAloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwogCkBAIC0xMzA2LDkgKzEyOTEsMTAgQEAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9maWx0ZXJlZF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAotCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzdGF0dXMpCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwogCXN0YS0+dHhfZmlsdGVyZWRfY291bnQrKzsKIAogCS8qCkBAIC0xMzE2LDcgKzEzMDIsNyBAQAogCSAqIHBhY2tldC4gSWYgdGhlIFNUQSB3ZW50IHRvIHBvd2VyIHNhdmUgbW9kZSwgdGhpcyB3aWxsIGhhcHBlbgogCSAqIHdoZW4gaXQgd2FrZXMgdXAgZm9yIHRoZSBuZXh0IHRpbWUuCiAJICovCi0Jc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9DTEVBUl9QU19GSUxUOworCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9DTEVBUl9QU19GSUxUKTsKIAogCS8qCiAJICogVGhpcyBjb2RlIHJhY2VzIGluIHRoZSBmb2xsb3dpbmcgd2F5OgpAQCAtMTM0OCw4NCArMTMzNCw4OSBAQAogCSAqICAgICAgY2FuIGJlIHVua25vd24sIGZvciBleGFtcGxlIHdpdGggZGlmZmVyZW50IGludGVycnVwdCBzdGF0dXMKIAkgKgliaXRzLgogCSAqLwotCWlmIChzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMgJiYKKwlpZiAodGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QUykgJiYKIAkgICAgc2tiX3F1ZXVlX2xlbigmc3RhLT50eF9maWx0ZXJlZCkgPCBTVEFfTUFYX1RYX0JVRkZFUikgewotCQlpZWVlODAyMTFfcmVtb3ZlX3R4X2V4dHJhKGxvY2FsLCBzdGEtPmtleSwgc2tiLAotCQkJCQkgICZzdGF0dXMtPmNvbnRyb2wpOworCQlpZWVlODAyMTFfcmVtb3ZlX3R4X2V4dHJhKGxvY2FsLCBzdGEtPmtleSwgc2tiKTsKIAkJc2tiX3F1ZXVlX3RhaWwoJnN0YS0+dHhfZmlsdGVyZWQsIHNrYik7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIShzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMpICYmCi0JICAgICEoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1JFUVVFVUUpKSB7CisJaWYgKCF0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTKSAmJgorCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SRVFVRVVFKSkgewogCQkvKiBTb2Z0d2FyZSByZXRyeSB0aGUgcGFja2V0IG9uY2UgKi8KLQkJc3RhdHVzLT5jb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9SRVFVRVVFOwotCQlpZWVlODAyMTFfcmVtb3ZlX3R4X2V4dHJhKGxvY2FsLCBzdGEtPmtleSwgc2tiLAotCQkJCQkgICZzdGF0dXMtPmNvbnRyb2wpOworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUVVFVUU7CisJCWllZWU4MDIxMV9yZW1vdmVfdHhfZXh0cmEobG9jYWwsIHN0YS0+a2V5LCBza2IpOwogCQlkZXZfcXVldWVfeG1pdChza2IpOwogCQlyZXR1cm47CiAJfQogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgVFggZmlsdGVyZWQgZnJhbWUsICIKIAkJICAgICAgICJxdWV1ZV9sZW49JWQgUFM9JWQgQCVsdVxuIiwKIAkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwKIAkJICAgICAgIHNrYl9xdWV1ZV9sZW4oJnN0YS0+dHhfZmlsdGVyZWQpLAotCQkgICAgICAgISEoc3RhLT5mbGFncyAmIFdMQU5fU1RBX1BTKSwgamlmZmllcyk7CisJCSAgICAgICAhIXRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFMpLCBqaWZmaWVzKTsKKyNlbmRpZgogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAotdm9pZCBpZWVlODAyMTFfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJIHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzdGF0dXMpCit2b2lkIGllZWU4MDIxMV90eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXUxNiBmcmFnLCB0eXBlOworCV9fbGUxNiBmYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1c19ydGFwX2hkciAqcnRoZHI7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnByZXZfZGV2ID0gTlVMTDsKLQotCWlmICghc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzOiBpZWVlODAyMTFfdHhfc3RhdHVzIGNhbGxlZCB3aXRoIE5VTEwgc3RhdHVzXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQorCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JaWYgKHN0YXR1cy0+ZXhjZXNzaXZlX3JldHJpZXMpIHsKLQkJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJaWYgKGluZm8tPnN0YXR1cy5leGNlc3NpdmVfcmV0cmllcykgewogCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwogCQlpZiAoc3RhKSB7Ci0JCQlpZiAoc3RhLT5mbGFncyAmIFdMQU5fU1RBX1BTKSB7CisJCQlpZiAodGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QUykpIHsKIAkJCQkvKgogCQkJCSAqIFRoZSBTVEEgaXMgaW4gcG93ZXIgc2F2ZSBtb2RlLCBzbyBhc3N1bWUKIAkJCQkgKiB0aGF0IHRoaXMgVFggcGFja2V0IGZhaWxlZCBiZWNhdXNlIG9mIHRoYXQuCiAJCQkJICovCi0JCQkJc3RhdHVzLT5leGNlc3NpdmVfcmV0cmllcyA9IDA7Ci0JCQkJc3RhdHVzLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVFVTX1RYX0ZJTFRFUkVEOwotCQkJCWllZWU4MDIxMV9oYW5kbGVfZmlsdGVyZWRfZnJhbWUobG9jYWwsIHN0YSwKLQkJCQkJCQkJc2tiLCBzdGF0dXMpOworCQkJCWllZWU4MDIxMV9oYW5kbGVfZmlsdGVyZWRfZnJhbWUobG9jYWwsIHN0YSwgc2tiKTsKIAkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KIAl9CiAKLQlpZiAoc3RhdHVzLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfVFhfRklMVEVSRUQpIHsKLQkJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlpZiAoKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFVfTk9fQkFDSykgJiYKKwkgICAgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpKSB7CisJCXUxNiB0aWQsIHNzbjsKKwkJdTggKnFjOwogCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwogCQlpZiAoc3RhKSB7Ci0JCQlpZWVlODAyMTFfaGFuZGxlX2ZpbHRlcmVkX2ZyYW1lKGxvY2FsLCBzdGEsIHNrYiwKLQkJCQkJCQlzdGF0dXMpOworCQkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKKwkJCXRpZCA9IHFjWzBdICYgMHhmOworCQkJc3NuID0gKChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSArIDB4MTApCisJCQkJCQkmIElFRUU4MDIxMV9TQ1RMX1NFUSk7CisJCQlpZWVlODAyMTFfc2VuZF9iYXIoc3RhLT5zZGF0YS0+ZGV2LCBoZHItPmFkZHIxLAorCQkJCQkgICB0aWQsIHNzbik7CisJCX0KKwl9CisKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRCkgeworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOworCQlpZiAoc3RhKSB7CisJCQlpZWVlODAyMTFfaGFuZGxlX2ZpbHRlcmVkX2ZyYW1lKGxvY2FsLCBzdGEsIHNrYik7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZQotCQlyYXRlX2NvbnRyb2xfdHhfc3RhdHVzKGxvY2FsLT5tZGV2LCBza2IsIHN0YXR1cyk7CisJCXJhdGVfY29udHJvbF90eF9zdGF0dXMobG9jYWwtPm1kZXYsIHNrYik7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtMTQzOSwxNCArMTQzMCwxNCBAQAogCWZyYWcgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUc7CiAJdHlwZSA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkgJiBJRUVFODAyMTFfRkNUTF9GVFlQRTsKIAotCWlmIChzdGF0dXMtPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRVU19BQ0spIHsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spIHsKIAkJaWYgKGZyYWcgPT0gMCkgewogCQkJbG9jYWwtPmRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50Kys7CiAJCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCiAJCQkJbG9jYWwtPmRvdDExTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50Kys7Ci0JCQlpZiAoc3RhdHVzLT5yZXRyeV9jb3VudCA+IDApCisJCQlpZiAoaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50ID4gMCkKIAkJCQlsb2NhbC0+ZG90MTFSZXRyeUNvdW50Kys7Ci0JCQlpZiAoc3RhdHVzLT5yZXRyeV9jb3VudCA+IDEpCisJCQlpZiAoaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50ID4gMSkKIAkJCQlsb2NhbC0+ZG90MTFNdWx0aXBsZVJldHJ5Q291bnQrKzsKIAkJfQogCkBAIC0xNDgzLDcgKzE0NzQsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JcnRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXNfcnRhcF9oZHIqKQorCXJ0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyICopCiAJCQkJc2tiX3B1c2goc2tiLCBzaXplb2YoKnJ0aGRyKSk7CiAKIAltZW1zZXQocnRoZHIsIDAsIHNpemVvZigqcnRoZHIpKTsKQEAgLTE0OTIsMTcgKzE0ODMsMTcgQEAKIAkJY3B1X3RvX2xlMzIoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1RYX0ZMQUdTKSB8CiAJCQkgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RBVEFfUkVUUklFUykpOwogCi0JaWYgKCEoc3RhdHVzLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLKSAmJgorCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSAmJgogCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCiAJCXJ0aGRyLT50eF9mbGFncyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9GQUlMKTsKIAotCWlmICgoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKSAmJgotCSAgICAoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkpCisJaWYgKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX1JUU19DVFMpICYmCisJICAgIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX0NUU19QUk9URUNUKSkKIAkJcnRoZHItPnR4X2ZsYWdzIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX0NUUyk7Ci0JZWxzZSBpZiAoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKQorCWVsc2UgaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9VU0VfUlRTX0NUUykKIAkJcnRoZHItPnR4X2ZsYWdzIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX1JUUyk7CiAKLQlydGhkci0+ZGF0YV9yZXRyaWVzID0gc3RhdHVzLT5yZXRyeV9jb3VudDsKKwlydGhkci0+ZGF0YV9yZXRyaWVzID0gaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50OwogCiAJLyogWFhYOiBpcyB0aGlzIHN1ZmZpY2llbnQgZm9yIEJQRj8gKi8KIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAwKTsKQEAgLTE2MjgsNyArMTYxOSw3IEBACiAJaW50IHJlc3VsdDsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqbXdkZXY7CiAKIAkvKgogCSAqIGdlbmVyaWMgY29kZSBndWFyYW50ZWVzIGF0IGxlYXN0IG9uZSBiYW5kLApAQCAtMTY1MiwxOSArMTY0MywzMCBAQAogCWlmIChyZXN1bHQgPCAwKQogCQlyZXR1cm4gcmVzdWx0OwogCi0JLyogZm9yIG5vdywgbWRldiBuZWVkcyBzdWJfaWZfZGF0YSA6LyAqLwotCW1kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEpLAotCQkJICAgICJ3bWFzdGVyJWQiLCBldGhlcl9zZXR1cCk7CisJLyoKKwkgKiBXZSB1c2UgdGhlIG51bWJlciBvZiBxdWV1ZXMgZm9yIGZlYXR1cmUgdGVzdHMgKFFvUywgSFQpIGludGVybmFsbHkKKwkgKiBzbyByZXN0cmljdCB0aGVtIGFwcHJvcHJpYXRlbHkuCisJICovCisJaWYgKGh3LT5xdWV1ZXMgPiBJRUVFODAyMTFfTUFYX1FVRVVFUykKKwkJaHctPnF1ZXVlcyA9IElFRUU4MDIxMV9NQVhfUVVFVUVTOworCWlmIChody0+YW1wZHVfcXVldWVzID4gSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMpCisJCWh3LT5hbXBkdV9xdWV1ZXMgPSBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUzsKKwlpZiAoaHctPnF1ZXVlcyA8IDQpCisJCWh3LT5hbXBkdV9xdWV1ZXMgPSAwOworCisJbWRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2Yoc3RydWN0IHdpcmVsZXNzX2RldiksCisJCQkgICAgICAgIndtYXN0ZXIlZCIsIGV0aGVyX3NldHVwLAorCQkJICAgICAgIGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSk7CiAJaWYgKCFtZGV2KQogCQlnb3RvIGZhaWxfbWRldl9hbGxvYzsKIAotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYobWRldik7Ci0JbWRldi0+aWVlZTgwMjExX3B0ciA9ICZzZGF0YS0+d2RldjsKLQlzZGF0YS0+d2Rldi53aXBoeSA9IGxvY2FsLT5ody53aXBoeTsKKwltd2RldiA9IG5ldGRldl9wcml2KG1kZXYpOworCW1kZXYtPmllZWU4MDIxMV9wdHIgPSBtd2RldjsKKwltd2Rldi0+d2lwaHkgPSBsb2NhbC0+aHcud2lwaHk7CiAKIAlsb2NhbC0+bWRldiA9IG1kZXY7CiAKLQlpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChtZGV2KTsKKwlpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChsb2NhbCk7CiAKIAltZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfbWFzdGVyX3N0YXJ0X3htaXQ7CiAJbWRldi0+b3BlbiA9IGllZWU4MDIxMV9tYXN0ZXJfb3BlbjsKQEAgLTE2NzMsMTggKzE2NzUsOCBAQAogCW1kZXYtPmhlYWRlcl9vcHMgPSAmaWVlZTgwMjExX2hlYWRlcl9vcHM7CiAJbWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX21hc3Rlcl9zZXRfbXVsdGljYXN0X2xpc3Q7CiAKLQlzZGF0YS0+dmlmLnR5cGUgPSBJRUVFODAyMTFfSUZfVFlQRV9BUDsKLQlzZGF0YS0+ZGV2ID0gbWRldjsKLQlzZGF0YS0+bG9jYWwgPSBsb2NhbDsKLQlzZGF0YS0+dS5hcC5mb3JjZV91bmljYXN0X3JhdGVpZHggPSAtMTsKLQlzZGF0YS0+dS5hcC5tYXhfcmF0ZWN0cmxfcmF0ZWlkeCA9IC0xOwotCWllZWU4MDIxMV9pZl9zZGF0YV9pbml0KHNkYXRhKTsKLQotCS8qIG5vIFJDVSBuZWVkZWQgc2luY2Ugd2UncmUgc3RpbGwgZHVyaW5nIGluaXQgcGhhc2UgKi8KLQlsaXN0X2FkZF90YWlsKCZzZGF0YS0+bGlzdCwgJmxvY2FsLT5pbnRlcmZhY2VzKTsKLQogCW5hbWUgPSB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KS0+ZHJpdmVyLT5uYW1lOwotCWxvY2FsLT5ody53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShuYW1lKTsKKwlsb2NhbC0+aHcud29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKG5hbWUpOwogCWlmICghbG9jYWwtPmh3LndvcmtxdWV1ZSkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfd29ya3F1ZXVlOwpAQCAtMTcwMCwxNSArMTY5MiwxNiBAQAogCiAJZGVidWdmc19od19hZGQobG9jYWwpOwogCi0JbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDA7CisJaWYgKGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPCAxMCkKKwkJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDsKIAotCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gbG9jYWwtPmh3Lm1heF9yc3NpID8KLQkJCSAgICAgICBJV19RVUFMX0xFVkVMX1VQREFURUQgOiBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7Ci0JbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcubWF4X3NpZ25hbCA/CisJbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcuZmxhZ3MgJiAoSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMgfAorCQkJCQkJICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCIHwKKwkJCQkJCSAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pID8KIAkJCSAgICAgICBJV19RVUFMX1FVQUxfVVBEQVRFRCA6IElXX1FVQUxfUVVBTF9JTlZBTElEOwotCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gbG9jYWwtPmh3Lm1heF9ub2lzZSA/CisJbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNID8KIAkJCSAgICAgICBJV19RVUFMX05PSVNFX1VQREFURUQgOiBJV19RVUFMX05PSVNFX0lOVkFMSUQ7Ci0JaWYgKGxvY2FsLT5ody5tYXhfcnNzaSA8IDAgfHwgbG9jYWwtPmh3Lm1heF9ub2lzZSA8IDApCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQogCQlsb2NhbC0+d3N0YXRzX2ZsYWdzIHw9IElXX1FVQUxfREJNOwogCiAJcmVzdWx0ID0gc3RhX2luZm9fc3RhcnQobG9jYWwpOwpAQCAtMTcyNyw5ICsxNzIwLDYgQEAKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBmYWlsX2RldjsKIAotCWllZWU4MDIxMV9kZWJ1Z2ZzX2FkZF9uZXRkZXYoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYobG9jYWwtPm1kZXYpKTsKLQlpZWVlODAyMTFfaWZfc2V0X3R5cGUobG9jYWwtPm1kZXYsIElFRUU4MDIxMV9JRl9UWVBFX0FQKTsKLQogCXJlc3VsdCA9IGllZWU4MDIxMV9pbml0X3JhdGVfY3RybF9hbGcobG9jYWwsCiAJCQkJCSAgICAgIGh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtKTsKIAlpZiAocmVzdWx0IDwgMCkgewpAQCAtMTc0NiwxNiArMTczNiwxNSBAQAogCQlnb3RvIGZhaWxfd2VwOwogCX0KIAotCWllZWU4MDIxMV9pbnN0YWxsX3FkaXNjKGxvY2FsLT5tZGV2KTsKKwlsb2NhbC0+bWRldi0+c2VsZWN0X3F1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZTsKIAogCS8qIGFkZCBvbmUgZGVmYXVsdCBTVEEgaW50ZXJmYWNlICovCi0JcmVzdWx0ID0gaWVlZTgwMjExX2lmX2FkZChsb2NhbC0+bWRldiwgIndsYW4lZCIsIE5VTEwsCisJcmVzdWx0ID0gaWVlZTgwMjExX2lmX2FkZChsb2NhbCwgIndsYW4lZCIsIE5VTEwsCiAJCQkJICBJRUVFODAyMTFfSUZfVFlQRV9TVEEsIE5VTEwpOwogCWlmIChyZXN1bHQpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBGYWlsZWQgdG8gYWRkIGRlZmF1bHQgdmlydHVhbCBpZmFjZVxuIiwKIAkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7CiAKLQlsb2NhbC0+cmVnX3N0YXRlID0gSUVFRTgwMjExX0RFVl9SRUdJU1RFUkVEOwogCXJ0bmxfdW5sb2NrKCk7CiAKIAlpZWVlODAyMTFfbGVkX2luaXQobG9jYWwpOwpAQCAtMTc2NSw3ICsxNzU0LDYgQEAKIGZhaWxfd2VwOgogCXJhdGVfY29udHJvbF9kZWluaXRpYWxpemUobG9jYWwpOwogZmFpbF9yYXRlOgotCWllZWU4MDIxMV9kZWJ1Z2ZzX3JlbW92ZV9uZXRkZXYoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYobG9jYWwtPm1kZXYpKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZShsb2NhbC0+bWRldik7CiAJbG9jYWwtPm1kZXYgPSBOVUxMOwogZmFpbF9kZXY6CkBAIC0xNzc1LDEwICsxNzYzLDggQEAKIAlkZWJ1Z2ZzX2h3X2RlbChsb2NhbCk7CiAJZGVzdHJveV93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7CiBmYWlsX3dvcmtxdWV1ZToKLQlpZiAobG9jYWwtPm1kZXYgIT0gTlVMTCkgewotCQlpZWVlODAyMTFfaWZfZnJlZShsb2NhbC0+bWRldik7Ci0JCWxvY2FsLT5tZGV2ID0gTlVMTDsKLQl9CisJaWYgKGxvY2FsLT5tZGV2KQorCQlmcmVlX25ldGRldihsb2NhbC0+bWRldik7CiBmYWlsX21kZXZfYWxsb2M6CiAJd2lwaHlfdW5yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwogCXJldHVybiByZXN1bHQ7CkBAIC0xNzg4LDQyICsxNzc0LDI3IEBACiB2b2lkIGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCAqdG1wOwogCiAJdGFza2xldF9raWxsKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKIAl0YXNrbGV0X2tpbGwoJmxvY2FsLT50YXNrbGV0KTsKIAogCXJ0bmxfbG9jaygpOwogCi0JQlVHX09OKGxvY2FsLT5yZWdfc3RhdGUgIT0gSUVFRTgwMjExX0RFVl9SRUdJU1RFUkVEKTsKLQotCWxvY2FsLT5yZWdfc3RhdGUgPSBJRUVFODAyMTFfREVWX1VOUkVHSVNURVJFRDsKLQogCS8qCiAJICogQXQgdGhpcyBwb2ludCwgaW50ZXJmYWNlIGxpc3QgbWFuaXB1bGF0aW9ucyBhcmUgZmluZQogCSAqIGJlY2F1c2UgdGhlIGRyaXZlciBjYW5ub3QgYmUgaGFuZGluZyB1cyBmcmFtZXMgYW55CiAJICogbW9yZSBhbmQgdGhlIHRhc2tsZXQgaXMga2lsbGVkLgogCSAqLwogCi0JLyoKLQkgKiBGaXJzdCwgd2UgcmVtb3ZlIGFsbCBub24tbWFzdGVyIGludGVyZmFjZXMuIERvIHRoaXMgYmVjYXVzZSB0aGV5Ci0JICogbWF5IGhhdmUgYnNzIHBvaW50ZXIgZGVwZW5kZW5jeSBvbiB0aGUgbWFzdGVyLCBhbmQgd2hlbiB3ZSBmcmVlCi0JICogdGhlIG1hc3RlciB0aGVzZSB3b3VsZCBiZSBmcmVlZCBhcyB3ZWxsLCBicmVha2luZyBvdXIgbGlzdAotCSAqIGl0ZXJhdGlvbiBjb21wbGV0ZWx5LgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZGF0YSwgdG1wLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKHNkYXRhLT5kZXYgPT0gbG9jYWwtPm1kZXYpCi0JCQljb250aW51ZTsKLQkJbGlzdF9kZWwoJnNkYXRhLT5saXN0KTsKLQkJX19pZWVlODAyMTFfaWZfZGVsKGxvY2FsLCBzZGF0YSk7Ci0JfQorCS8qIEZpcnN0LCB3ZSByZW1vdmUgYWxsIHZpcnR1YWwgaW50ZXJmYWNlcy4gKi8KKwlpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMobG9jYWwpOwogCiAJLyogdGhlbiwgZmluYWxseSwgcmVtb3ZlIHRoZSBtYXN0ZXIgaW50ZXJmYWNlICovCi0JX19pZWVlODAyMTFfaWZfZGVsKGxvY2FsLCBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihsb2NhbC0+bWRldikpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGxvY2FsLT5tZGV2KTsKIAogCXJ0bmxfdW5sb2NrKCk7CiAKLQlpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KGxvY2FsLT5tZGV2KTsKKwlpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KGxvY2FsKTsKIAlpZWVlODAyMTFfY2xlYXJfdHhfcGVuZGluZyhsb2NhbCk7CiAJc3RhX2luZm9fc3RvcChsb2NhbCk7CiAJcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShsb2NhbCk7CkBAIC0xODQwLDggKzE4MTEsNyBAQAogCXdpcGh5X3VucmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKIAlpZWVlODAyMTFfd2VwX2ZyZWUobG9jYWwpOwogCWllZWU4MDIxMV9sZWRfZXhpdChsb2NhbCk7Ci0JaWVlZTgwMjExX2lmX2ZyZWUobG9jYWwtPm1kZXYpOwotCWxvY2FsLT5tZGV2ID0gTlVMTDsKKwlmcmVlX25ldGRldihsb2NhbC0+bWRldik7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KTsKIApAQCAtMTg1OCwyNyArMTgyOCwxNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHJldDsKIAotCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSkgPiBzaXplb2Yoc2tiLT5jYikpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvKSA+IHNpemVvZihza2ItPmNiKSk7CisJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbywgZHJpdmVyX2RhdGEpICsKKwkgICAgICAgICAgICAgSUVFRTgwMjExX1RYX0lORk9fRFJJVkVSX0RBVEFfU0laRSA+IHNpemVvZihza2ItPmNiKSk7CiAKIAlyZXQgPSByYzgwMjExX3BpZF9pbml0KCk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBpZWVlODAyMTFfd21lX3JlZ2lzdGVyKCk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2luaXQ6IGZhaWxlZCB0byAiCi0JCSAgICAgICAiaW5pdGlhbGl6ZSBXTUUgKGVycj0lZClcbiIsIHJldCk7Ci0JCWdvdG8gb3V0X2NsZWFudXBfcGlkOwotCX0KKwkJcmV0dXJuIHJldDsKIAogCWllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9pbml0KCk7CiAKIAlyZXR1cm4gMDsKLQotIG91dF9jbGVhbnVwX3BpZDoKLQlyYzgwMjExX3BpZF9leGl0KCk7Ci0gb3V0OgotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpZWVlODAyMTFfZXhpdCh2b2lkKQpAQCAtMTg5NCw3ICsxODU0LDYgQEAKIAlpZiAobWVzaF9hbGxvY2F0ZWQpCiAJCWllZWU4MDIxMXNfc3RvcCgpOwogCi0JaWVlZTgwMjExX3dtZV91bnJlZ2lzdGVyKCk7CiAJaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2V4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2guYyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKaW5kZXggNjk3ZWY2Ny4uYjU5MzNiMiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2guYworKysgYi9uZXQvbWFjODAyMTEvbWVzaC5jCkBAIC0zMTUsNiArMzE1LDEzIEBACiAJcmV0dXJuIG5ld3RibDsKIH0KIAorc3RhdGljIHZvaWQgX19tZXNoX3RhYmxlX2ZyZWUoc3RydWN0IG1lc2hfdGFibGUgKnRibCkKK3sKKwlrZnJlZSh0YmwtPmhhc2hfYnVja2V0cyk7CisJa2ZyZWUodGJsLT5oYXNod2xvY2spOworCWtmcmVlKHRibCk7Cit9CisKIHZvaWQgbWVzaF90YWJsZV9mcmVlKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIGJvb2wgZnJlZV9sZWFmcykKIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqbWVzaF9oYXNoOwpAQCAtMzMwLDkgKzMzNyw3IEBACiAJCX0KIAkJc3Bpbl91bmxvY2soJnRibC0+aGFzaHdsb2NrW2ldKTsKIAl9Ci0Ja2ZyZWUodGJsLT5oYXNoX2J1Y2tldHMpOwotCWtmcmVlKHRibC0+aGFzaHdsb2NrKTsKLQlrZnJlZSh0YmwpOworCV9fbWVzaF90YWJsZV9mcmVlKHRibCk7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tZXNoX3BhdGhfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMzQ5LDIxICszNTQsMTYgQEAKIHsKIAlzdHJ1Y3QgbWVzaF90YWJsZSAqbmV3dGJsOwogCXN0cnVjdCBobGlzdF9oZWFkICpvbGRoYXNoOwotCXN0cnVjdCBobGlzdF9ub2RlICpwOwotCWludCBlcnIgPSAwOworCXN0cnVjdCBobGlzdF9ub2RlICpwLCAqcTsKIAlpbnQgaTsKIAogCWlmIChhdG9taWNfcmVhZCgmdGJsLT5lbnRyaWVzKQotCQkJPCB0YmwtPm1lYW5fY2hhaW5fbGVuICogKHRibC0+aGFzaF9tYXNrICsgMSkpIHsKLQkJZXJyID0gLUVQRVJNOworCQkJPCB0YmwtPm1lYW5fY2hhaW5fbGVuICogKHRibC0+aGFzaF9tYXNrICsgMSkpCiAJCWdvdG8gZW5kZ3JvdzsKLQl9CiAKIAluZXd0YmwgPSBtZXNoX3RhYmxlX2FsbG9jKHRibC0+c2l6ZV9vcmRlciArIDEpOwotCWlmICghbmV3dGJsKSB7Ci0JCWVyciA9IC1FTk9NRU07CisJaWYgKCFuZXd0YmwpCiAJCWdvdG8gZW5kZ3JvdzsKLQl9CiAKIAluZXd0YmwtPmZyZWVfbm9kZSA9IHRibC0+ZnJlZV9ub2RlOwogCW5ld3RibC0+bWVhbl9jaGFpbl9sZW4gPSB0YmwtPm1lYW5fY2hhaW5fbGVuOwpAQCAtMzczLDEzICszNzMsMTkgQEAKIAlvbGRoYXNoID0gdGJsLT5oYXNoX2J1Y2tldHM7CiAJZm9yIChpID0gMDsgaSA8PSB0YmwtPmhhc2hfbWFzazsgaSsrKQogCQlobGlzdF9mb3JfZWFjaChwLCAmb2xkaGFzaFtpXSkKLQkJCXRibC0+Y29weV9ub2RlKHAsIG5ld3RibCk7CisJCQlpZiAodGJsLT5jb3B5X25vZGUocCwgbmV3dGJsKSA8IDApCisJCQkJZ290byBlcnJjb3B5OwogCisJcmV0dXJuIG5ld3RibDsKKworZXJyY29weToKKwlmb3IgKGkgPSAwOyBpIDw9IG5ld3RibC0+aGFzaF9tYXNrOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmbmV3dGJsLT5oYXNoX2J1Y2tldHNbaV0pCisJCQl0YmwtPmZyZWVfbm9kZShwLCAwKTsKKwl9CisJX19tZXNoX3RhYmxlX2ZyZWUodGJsKTsKIGVuZGdyb3c6Ci0JaWYgKGVycikKLQkJcmV0dXJuIE5VTEw7Ci0JZWxzZQotCQlyZXR1cm4gbmV3dGJsOworCXJldHVybiBOVUxMOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IDJlMTYxZjYuLjY2OWVhZmEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtMTA5LDcgKzEwOSw3IEBACiAJX191MzIgaGFzaF9ybmQ7CQkJLyogVXNlZCBmb3IgaGFzaCBnZW5lcmF0aW9uICovCiAJYXRvbWljX3QgZW50cmllczsJCS8qIFVwIHRvIE1BWF9NRVNIX05FSUdIQk9VUlMgKi8KIAl2b2lkICgqZnJlZV9ub2RlKSAoc3RydWN0IGhsaXN0X25vZGUgKnAsIGJvb2wgZnJlZV9sZWFmcyk7Ci0Jdm9pZCAoKmNvcHlfbm9kZSkgKHN0cnVjdCBobGlzdF9ub2RlICpwLCBzdHJ1Y3QgbWVzaF90YWJsZSAqbmV3dGJsKTsKKwlpbnQgKCpjb3B5X25vZGUpIChzdHJ1Y3QgaGxpc3Rfbm9kZSAqcCwgc3RydWN0IG1lc2hfdGFibGUgKm5ld3RibCk7CiAJaW50IHNpemVfb3JkZXI7CiAJaW50IG1lYW5fY2hhaW5fbGVuOwogfTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwppbmRleCBhZjBjZDFlLi43ZmExNDllIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCkBAIC0yNiw3ICsyNiw3IEBACiB7CiAJaWYgKGFlKQogCQlvZmZzZXQgKz0gNjsKLQlyZXR1cm4gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopIChwcmVxX2VsZW0gKyBvZmZzZXQpKSk7CisJcmV0dXJuIGdldF91bmFsaWduZWRfbGUzMihwcmVxX2VsZW0gKyBvZmZzZXQpOwogfQogCiAvKiBIV01QIElFIHByb2Nlc3NpbmcgbWFjcm9zICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggOTljMmQzNi4uNWY4OGEyZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtMTU4LDE5ICsxNTgsMTQgQEAKIAlpZiAoYXRvbWljX2FkZF91bmxlc3MoJnNkYXRhLT51LnN0YS5tcGF0aHMsIDEsIE1FU0hfTUFYX01QQVRIUykgPT0gMCkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKKwllcnIgPSAtRU5PTUVNOwogCW5ld19tcGF0aCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZXNoX3BhdGgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5ld19tcGF0aCkgewotCQlhdG9taWNfZGVjKCZzZGF0YS0+dS5zdGEubXBhdGhzKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlbmRhZGQyOwotCX0KKwlpZiAoIW5ld19tcGF0aCkKKwkJZ290byBlcnJfcGF0aF9hbGxvYzsKKwogCW5ld19ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1wYXRoX25vZGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5ld19ub2RlKSB7Ci0JCWtmcmVlKG5ld19tcGF0aCk7Ci0JCWF0b21pY19kZWMoJnNkYXRhLT51LnN0YS5tcGF0aHMpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVuZGFkZDI7Ci0JfQorCWlmICghbmV3X25vZGUpCisJCWdvdG8gZXJyX25vZGVfYWxsb2M7CiAKIAlyZWFkX2xvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCW1lbWNweShuZXdfbXBhdGgtPmRzdCwgZHN0LCBFVEhfQUxFTik7CkBAIC0xODksMTYgKzE4NCwxMSBAQAogCiAJc3Bpbl9sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKIAorCWVyciA9IC1FRVhJU1Q7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgbiwgYnVja2V0LCBsaXN0KSB7CiAJCW1wYXRoID0gbm9kZS0+bXBhdGg7Ci0JCWlmIChtcGF0aC0+ZGV2ID09IGRldiAmJiBtZW1jbXAoZHN0LCBtcGF0aC0+ZHN0LCBFVEhfQUxFTikKLQkJCQk9PSAwKSB7Ci0JCQllcnIgPSAtRUVYSVNUOwotCQkJYXRvbWljX2RlYygmc2RhdGEtPnUuc3RhLm1wYXRocyk7Ci0JCQlrZnJlZShuZXdfbm9kZSk7Ci0JCQlrZnJlZShuZXdfbXBhdGgpOwotCQkJZ290byBlbmRhZGQ7Ci0JCX0KKwkJaWYgKG1wYXRoLT5kZXYgPT0gZGV2ICYmIG1lbWNtcChkc3QsIG1wYXRoLT5kc3QsIEVUSF9BTEVOKSA9PSAwKQorCQkJZ290byBlcnJfZXhpc3RzOwogCX0KIAogCWhsaXN0X2FkZF9oZWFkX3JjdSgmbmV3X25vZGUtPmxpc3QsIGJ1Y2tldCk7CkBAIC0yMDYsMTAgKzE5Niw5IEBACiAJCW1lc2hfcGF0aHMtPm1lYW5fY2hhaW5fbGVuICogKG1lc2hfcGF0aHMtPmhhc2hfbWFzayArIDEpKQogCQlncm93ID0gMTsKIAotZW5kYWRkOgogCXNwaW5fdW5sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKIAlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7Ci0JaWYgKCFlcnIgJiYgZ3JvdykgeworCWlmIChncm93KSB7CiAJCXN0cnVjdCBtZXNoX3RhYmxlICpvbGR0YmwsICpuZXd0Ymw7CiAKIAkJd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CkBAIC0yMTcsNyArMjA2LDcgQEAKIAkJbmV3dGJsID0gbWVzaF90YWJsZV9ncm93KG1lc2hfcGF0aHMpOwogCQlpZiAoIW5ld3RibCkgewogCQkJd3JpdGVfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIDA7CiAJCX0KIAkJcmN1X2Fzc2lnbl9wb2ludGVyKG1lc2hfcGF0aHMsIG5ld3RibCk7CiAJCXdyaXRlX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CkBAIC0yMjUsNyArMjE0LDE2IEBACiAJCXN5bmNocm9uaXplX3JjdSgpOwogCQltZXNoX3RhYmxlX2ZyZWUob2xkdGJsLCBmYWxzZSk7CiAJfQotZW5kYWRkMjoKKwlyZXR1cm4gMDsKKworZXJyX2V4aXN0czoKKwlzcGluX3VubG9jaygmbWVzaF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CisJcmVhZF91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCWtmcmVlKG5ld19ub2RlKTsKK2Vycl9ub2RlX2FsbG9jOgorCWtmcmVlKG5ld19tcGF0aCk7CitlcnJfcGF0aF9hbGxvYzoKKwlhdG9taWNfZGVjKCZzZGF0YS0+dS5zdGEubXBhdGhzKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNjQsNyArMjYyLDYgQEAKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9Ci1FWFBPUlRfU1lNQk9MKG1lc2hfcGxpbmtfYnJva2VuKTsKIAogLyoqCiAgKiBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcCAtIERlbGV0ZXMgbWVzaCBwYXRocyBpZiB0aGVpciBuZXh0IGhvcCBtYXRjaGVzCkBAIC00NjAsMjUgKzQ1NywyOCBAQAogCXN0cnVjdCBtcGF0aF9ub2RlICpub2RlID0gaGxpc3RfZW50cnkocCwgc3RydWN0IG1wYXRoX25vZGUsIGxpc3QpOwogCW1wYXRoID0gbm9kZS0+bXBhdGg7CiAJaGxpc3RfZGVsX3JjdShwKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKIAlpZiAoZnJlZV9sZWFmcykKIAkJa2ZyZWUobXBhdGgpOwogCWtmcmVlKG5vZGUpOwogfQogCi1zdGF0aWMgdm9pZCBtZXNoX3BhdGhfbm9kZV9jb3B5KHN0cnVjdCBobGlzdF9ub2RlICpwLCBzdHJ1Y3QgbWVzaF90YWJsZSAqbmV3dGJsKQorc3RhdGljIGludCBtZXNoX3BhdGhfbm9kZV9jb3B5KHN0cnVjdCBobGlzdF9ub2RlICpwLCBzdHJ1Y3QgbWVzaF90YWJsZSAqbmV3dGJsKQogewogCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOwogCXN0cnVjdCBtcGF0aF9ub2RlICpub2RlLCAqbmV3X25vZGU7CiAJdTMyIGhhc2hfaWR4OwogCisJbmV3X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXBhdGhfbm9kZSksIEdGUF9BVE9NSUMpOworCWlmIChuZXdfbm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCW5vZGUgPSBobGlzdF9lbnRyeShwLCBzdHJ1Y3QgbXBhdGhfbm9kZSwgbGlzdCk7CiAJbXBhdGggPSBub2RlLT5tcGF0aDsKLQluZXdfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtcGF0aF9ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJbmV3X25vZGUtPm1wYXRoID0gbXBhdGg7CiAJaGFzaF9pZHggPSBtZXNoX3RhYmxlX2hhc2gobXBhdGgtPmRzdCwgbXBhdGgtPmRldiwgbmV3dGJsKTsKIAlobGlzdF9hZGRfaGVhZCgmbmV3X25vZGUtPmxpc3QsCiAJCQkmbmV3dGJsLT5oYXNoX2J1Y2tldHNbaGFzaF9pZHhdKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IG1lc2hfcGF0aHRibF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwppbmRleCAzN2YwYzJiLi45ZWZlYjFmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKQEAgLTc5LDcgKzc5LDcgQEAKICAqCiAgKiBAc3RhOiBtZXMgcGVlciBsaW5rIHRvIHJlc3RhcnQKICAqCi0gKiBMb2NraW5nOiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGhvbGRpbmcgc3RhLT5wbGlua19sb2NrCisgKiBMb2NraW5nOiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGhvbGRpbmcgc3RhLT5sb2NrCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZXNoX3BsaW5rX2ZzbV9yZXN0YXJ0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewpAQCAtMTA1LDcgKzEwNSw3IEBACiAJaWYgKCFzdGEpCiAJCXJldHVybiBOVUxMOwogCi0Jc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9BVVRIT1JJWkVEOworCXN0YS0+ZmxhZ3MgPSBXTEFOX1NUQV9BVVRIT1JJWkVEOwogCXN0YS0+c3VwcF9yYXRlc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXSA9IHJhdGVzOwogCiAJcmV0dXJuIHN0YTsKQEAgLTExOCw3ICsxMTgsNyBAQAogICoKICAqIEFsbCBtZXNoIHBhdGhzIHdpdGggdGhpcyBwZWVyIGFzIG5leHQgaG9wIHdpbGwgYmUgZmx1c2hlZAogICoKLSAqIExvY2tpbmc6IHRoZSBjYWxsZXIgbXVzdCBob2xkIHN0YS0+cGxpbmtfbG9jaworICogTG9ja2luZzogdGhlIGNhbGxlciBtdXN0IGhvbGQgc3RhLT5sb2NrCiAgKi8KIHN0YXRpYyB2b2lkIF9fbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewpAQCAtMTM5LDkgKzEzOSw5IEBACiAgKi8KIHZvaWQgbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewotCXNwaW5fbG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIH0KIAogc3RhdGljIGludCBtZXNoX3BsaW5rX2ZyYW1lX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yNzAsMTAgKzI3MCwxMCBAQAogCSAqLwogCXN0YSA9IChzdHJ1Y3Qgc3RhX2luZm8gKikgZGF0YTsKIAotCXNwaW5fbG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJaWYgKHN0YS0+aWdub3JlX3BsaW5rX3RpbWVyKSB7CiAJCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gZmFsc2U7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJcmV0dXJuOwogCX0KIAltcGxfZGJnKCJNZXNoIHBsaW5rIHRpbWVyIGZvciAlcyBmaXJlZCBvbiBzdGF0ZSAlZFxuIiwKQEAgLTI5OCw3ICsyOTgsNyBAQAogCQkJCQkgICAgIHJhbmQgJSBzdGEtPnBsaW5rX3RpbWVvdXQ7CiAJCQkrK3N0YS0+cGxpbmtfcmV0cmllczsKIAkJCW1vZF9wbGlua190aW1lcihzdGEsIHN0YS0+cGxpbmtfdGltZW91dCk7Ci0JCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCQkJbWVzaF9wbGlua19mcmFtZV90eChkZXYsIFBMSU5LX09QRU4sIHN0YS0+YWRkciwgbGxpZCwKIAkJCQkJICAgIDAsIDApOwogCQkJYnJlYWs7CkBAIC0zMTEsNyArMzExLDcgQEAKIAkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ09ORklSTV9USU1FT1VUKTsKIAkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7CiAJCW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJbWVzaF9wbGlua19mcmFtZV90eChkZXYsIFBMSU5LX0NMT1NFLCBzdGEtPmFkZHIsIGxsaWQsIHBsaWQsCiAJCQkJICAgIHJlYXNvbik7CiAJCWJyZWFrOwpAQCAtMzE5LDEwICszMTksMTAgQEAKIAkJLyogaG9sZGluZyB0aW1lciAqLwogCQlkZWxfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOwogCQltZXNoX3BsaW5rX2ZzbV9yZXN0YXJ0KHN0YSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCQlicmVhazsKIAl9CiB9CkBAIC0zNDQsMTYgKzM0NCwxNiBAQAogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogI2VuZGlmCiAKLQlzcGluX2xvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCWdldF9yYW5kb21fYnl0ZXMoJmxsaWQsIDIpOwogCXN0YS0+bGxpZCA9IGxsaWQ7CiAJaWYgKHN0YS0+cGxpbmtfc3RhdGUgIT0gUExJTktfTElTVEVOKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX09QTl9TTlQ7CiAJbWVzaF9wbGlua190aW1lcl9zZXQoc3RhLCBkb3QxMU1lc2hSZXRyeVRpbWVvdXQoc2RhdGEpKTsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAltcGxfZGJnKCJNZXNoIHBsaW5rOiBzdGFydGluZyBlc3RhYmxpc2htZW50IHdpdGggJXNcbiIsCiAJCXByaW50X21hYyhtYWMsIHN0YS0+YWRkcikpOwogCkBAIC0zNjcsMTAgKzM2NywxMCBAQAogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogI2VuZGlmCiAKLQlzcGluX2xvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCV9fbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0YSk7CiAJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0JMT0NLRUQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiB9CiAKIGludCBtZXNoX3BsaW5rX2Nsb3NlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQpAQCAtMzgzLDE0ICszODMsMTQgQEAKIAogCW1wbF9kYmcoIk1lc2ggcGxpbms6IGNsb3NpbmcgbGluayB3aXRoICVzXG4iLAogCQkJcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7Ci0Jc3Bpbl9sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAlzdGEtPnJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfTElOS19DQU5DRUxMRUQpOwogCXJlYXNvbiA9IHN0YS0+cmVhc29uOwogCiAJaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfTElTVEVOIHx8CiAJICAgIHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfQkxPQ0tFRCkgewogCQltZXNoX3BsaW5rX2ZzbV9yZXN0YXJ0KHN0YSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0VTVEFCKSB7CiAJCV9fbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0YSk7CkBAIC00MDIsNyArNDAyLDcgQEAKIAlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfSE9MRElORzsKIAlsbGlkID0gc3RhLT5sbGlkOwogCXBsaWQgPSBzdGEtPnBsaWQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJbWVzaF9wbGlua19mcmFtZV90eChzdGEtPnNkYXRhLT5kZXYsIFBMSU5LX0NMT1NFLCBzdGEtPmFkZHIsIGxsaWQsCiAJCQkgICAgcGxpZCwgcmVhc29uKTsKIAlyZXR1cm4gMDsKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQkJLyogYXZvaWQgd2FybmluZyAqLwogCQkJYnJlYWs7CiAJCX0KLQkJc3Bpbl9sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJfSBlbHNlIGlmICghc3RhKSB7CiAJCS8qIGZ0eXBlID09IFBMSU5LX09QRU4gKi8KIAkJdTY0IHJhdGVzOwpAQCAtNTEyLDkgKzUxMiw5IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJZXZlbnQgPSBPUE5fQUNQVDsKLQkJc3Bpbl9sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJCXN3aXRjaCAoZnR5cGUpIHsKIAkJY2FzZSBQTElOS19PUEVOOgogCQkJaWYgKCFtZXNoX3BsaW5rX2ZyZWVfY291bnQoc2RhdGEpIHx8CkBAIC01NTEsNyArNTUxLDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJbXBsX2RiZygiTWVzaCBwbGluazogdW5rbm93biBmcmFtZSBzdWJ0eXBlXG4iKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNTY4LDcgKzU2OCw3IEBACiAJCXN3aXRjaCAoZXZlbnQpIHsKIAkJY2FzZSBDTFNfQUNQVDoKIAkJCW1lc2hfcGxpbmtfZnNtX3Jlc3RhcnQoc3RhKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQlicmVhazsKIAkJY2FzZSBPUE5fQUNQVDoKIAkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19PUE5fUkNWRDsKQEAgLTU3NiwxNCArNTc2LDE0IEBACiAJCQlnZXRfcmFuZG9tX2J5dGVzKCZsbGlkLCAyKTsKIAkJCXN0YS0+bGxpZCA9IGxsaWQ7CiAJCQltZXNoX3BsaW5rX3RpbWVyX3NldChzdGEsIGRvdDExTWVzaFJldHJ5VGltZW91dChzZGF0YSkpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19PUEVOLCBzdGEtPmFkZHIsIGxsaWQsCiAJCQkJCSAgICAwLCAwKTsKIAkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DT05GSVJNLCBzdGEtPmFkZHIsCiAJCQkJCSAgICBsbGlkLCBwbGlkLCAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwpAQCAtNjAzLDcgKzYwMyw3IEBACiAJCQkJc3RhLT5pZ25vcmVfcGxpbmtfdGltZXIgPSB0cnVlOwogCiAJCQlsbGlkID0gc3RhLT5sbGlkOwotCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DTE9TRSwgc3RhLT5hZGRyLCBsbGlkLAogCQkJCQkgICAgcGxpZCwgcmVhc29uKTsKIAkJCWJyZWFrOwpAQCAtNjEyLDcgKzYxMiw3IEBACiAJCQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfT1BOX1JDVkQ7CiAJCQlzdGEtPnBsaWQgPSBwbGlkOwogCQkJbGxpZCA9IHN0YS0+bGxpZDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfQ09ORklSTSwgc3RhLT5hZGRyLCBsbGlkLAogCQkJCQkgICAgcGxpZCwgMCk7CiAJCQlicmVhazsKQEAgLTYyMiwxMCArNjIyLDEwIEBACiAJCQkJCSAgICAgZG90MTFNZXNoQ29uZmlybVRpbWVvdXQoc2RhdGEpKSkKIAkJCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7CiAKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTY0NSwxMyArNjQ1LDEzIEBACiAJCQkJc3RhLT5pZ25vcmVfcGxpbmtfdGltZXIgPSB0cnVlOwogCiAJCQlsbGlkID0gc3RhLT5sbGlkOwotCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DTE9TRSwgc3RhLT5hZGRyLCBsbGlkLAogCQkJCQkgICAgcGxpZCwgcmVhc29uKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QTl9BQ1BUOgogCQkJbGxpZCA9IHN0YS0+bGxpZDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfQ09ORklSTSwgc3RhLT5hZGRyLCBsbGlkLAogCQkJCQkgICAgcGxpZCwgMCk7CiAJCQlicmVhazsKQEAgLTY1OSwxMiArNjU5LDEyIEBACiAJCQlkZWxfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOwogCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0VTVEFCOwogCQkJbWVzaF9wbGlua19pbmNfZXN0YWJfY291bnQoc2RhdGEpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCW1wbF9kYmcoIk1lc2ggcGxpbmsgd2l0aCAlcyBFU1RBQkxJU0hFRFxuIiwKIAkJCQkJcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTY4NCw3ICs2ODQsNyBAQAogCQkJCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gdHJ1ZTsKIAogCQkJbGxpZCA9IHN0YS0+bGxpZDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfQ0xPU0UsIHN0YS0+YWRkciwgbGxpZCwKIAkJCQkJICAgIHBsaWQsIHJlYXNvbik7CiAJCQlicmVhazsKQEAgLTY5MiwxNCArNjkyLDE0IEBACiAJCQlkZWxfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOwogCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0VTVEFCOwogCQkJbWVzaF9wbGlua19pbmNfZXN0YWJfY291bnQoc2RhdGEpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCW1wbF9kYmcoIk1lc2ggcGxpbmsgd2l0aCAlcyBFU1RBQkxJU0hFRFxuIiwKIAkJCQkJcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7CiAJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfQ09ORklSTSwgc3RhLT5hZGRyLCBsbGlkLAogCQkJCQkgICAgcGxpZCwgMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTcxMywxOCArNzEzLDE4IEBACiAJCQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfSE9MRElORzsKIAkJCWxsaWQgPSBzdGEtPmxsaWQ7CiAJCQltb2RfcGxpbmtfdGltZXIoc3RhLCBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DTE9TRSwgc3RhLT5hZGRyLCBsbGlkLAogCQkJCQkgICAgcGxpZCwgcmVhc29uKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QTl9BQ1BUOgogCQkJbGxpZCA9IHN0YS0+bGxpZDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfQ09ORklSTSwgc3RhLT5hZGRyLCBsbGlkLAogCQkJCQkgICAgcGxpZCwgMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTczNCw3ICs3MzQsNyBAQAogCQkJaWYgKGRlbF90aW1lcigmc3RhLT5wbGlua190aW1lcikpCiAJCQkJc3RhLT5pZ25vcmVfcGxpbmtfdGltZXIgPSAxOwogCQkJbWVzaF9wbGlua19mc21fcmVzdGFydChzdGEpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QTl9BQ1BUOgogCQljYXNlIENORl9BQ1BUOgpAQCAtNzQyLDE5ICs3NDIsMTkgQEAKIAkJY2FzZSBDTkZfUkpDVDoKIAkJCWxsaWQgPSBzdGEtPmxsaWQ7CiAJCQlyZWFzb24gPSBzdGEtPnJlYXNvbjsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfQ0xPU0UsIHN0YS0+YWRkciwgbGxpZCwKIAkJCQkJICAgIHBsaWQsIHJlYXNvbik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogc2hvdWxkIG5vdCBnZXQgaGVyZSwgUExJTktfQkxPQ0tFRCBpcyBkZWFsdCB3aXRoIGF0IHRoZQogCQkgKiBiZWdnaW5pbmcgb2YgdGhlIGZ1bmN0aW9uCiAJCSAqLwotCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21pY2hhZWwuYyBiL25ldC9tYWM4MDIxMS9taWNoYWVsLmMKaW5kZXggMGY4NDRmNy4uNDA4NjQ5YmQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9taWNoYWVsLmMKKysrIGIvbmV0L21hYzgwMjExL21pY2hhZWwuYwpAQCAtNiw4NSArNiw2OCBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgIm1pY2hhZWwuaCIKIAotc3RhdGljIGlubGluZSB1MzIgcm90cih1MzIgdmFsLCBpbnQgYml0cykKK3N0YXRpYyB2b2lkIG1pY2hhZWxfYmxvY2soc3RydWN0IG1pY2hhZWxfbWljX2N0eCAqbWN0eCwgdTMyIHZhbCkKIHsKLQlyZXR1cm4gKHZhbCA+PiBiaXRzKSB8ICh2YWwgPDwgKDMyIC0gYml0cykpOworCW1jdHgtPmwgXj0gdmFsOworCW1jdHgtPnIgXj0gcm9sMzIobWN0eC0+bCwgMTcpOworCW1jdHgtPmwgKz0gbWN0eC0+cjsKKwltY3R4LT5yIF49ICgobWN0eC0+bCAmIDB4ZmYwMGZmMDApID4+IDgpIHwKKwkJICAgKChtY3R4LT5sICYgMHgwMGZmMDBmZikgPDwgOCk7CisJbWN0eC0+bCArPSBtY3R4LT5yOworCW1jdHgtPnIgXj0gcm9sMzIobWN0eC0+bCwgMyk7CisJbWN0eC0+bCArPSBtY3R4LT5yOworCW1jdHgtPnIgXj0gcm9yMzIobWN0eC0+bCwgMik7CisJbWN0eC0+bCArPSBtY3R4LT5yOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgdTMyIHJvdGwodTMyIHZhbCwgaW50IGJpdHMpCitzdGF0aWMgdm9pZCBtaWNoYWVsX21pY19oZHIoc3RydWN0IG1pY2hhZWxfbWljX2N0eCAqbWN0eCwgY29uc3QgdTggKmtleSwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewotCXJldHVybiAodmFsIDw8IGJpdHMpIHwgKHZhbCA+PiAoMzIgLSBiaXRzKSk7CisJdTggKmRhLCAqc2EsIHRpZDsKKworCWRhID0gaWVlZTgwMjExX2dldF9EQShoZHIpOworCXNhID0gaWVlZTgwMjExX2dldF9TQShoZHIpOworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJdGlkID0gKmllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CisJZWxzZQorCQl0aWQgPSAwOworCisJbWN0eC0+bCA9IGdldF91bmFsaWduZWRfbGUzMihrZXkpOworCW1jdHgtPnIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgNCk7CisKKwkvKgorCSAqIEEgcHNldWRvIGhlYWRlciAoREEsIFNBLCBQcmlvcml0eSwgMCwgMCwgMCkgaXMgdXNlZCBpbiBNaWNoYWVsIE1JQworCSAqIGNhbGN1bGF0aW9uLCBidXQgaXQgaXMgX25vdF8gdHJhbnNtaXR0ZWQKKwkgKi8KKwltaWNoYWVsX2Jsb2NrKG1jdHgsIGdldF91bmFsaWduZWRfbGUzMihkYSkpOworCW1pY2hhZWxfYmxvY2sobWN0eCwgZ2V0X3VuYWxpZ25lZF9sZTE2KCZkYVs0XSkgfAorCQkJICAgIChnZXRfdW5hbGlnbmVkX2xlMTYoc2EpIDw8IDE2KSk7CisJbWljaGFlbF9ibG9jayhtY3R4LCBnZXRfdW5hbGlnbmVkX2xlMzIoJnNhWzJdKSk7CisJbWljaGFlbF9ibG9jayhtY3R4LCB0aWQpOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgdTMyIHhzd2FwKHUzMiB2YWwpCit2b2lkIG1pY2hhZWxfbWljKGNvbnN0IHU4ICprZXksIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCisJCSBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQogewotCXJldHVybiAoKHZhbCAmIDB4ZmYwMGZmMDApID4+IDgpIHwgKCh2YWwgJiAweDAwZmYwMGZmKSA8PCA4KTsKLX0KLQotCi0jZGVmaW5lIG1pY2hhZWxfYmxvY2sobCwgcikgXAotZG8geyBcCi0JciBePSByb3RsKGwsIDE3KTsgXAotCWwgKz0gcjsgXAotCXIgXj0geHN3YXAobCk7IFwKLQlsICs9IHI7IFwKLQlyIF49IHJvdGwobCwgMyk7IFwKLQlsICs9IHI7IFwKLQlyIF49IHJvdHIobCwgMik7IFwKLQlsICs9IHI7IFwKLX0gd2hpbGUgKDApCi0KLQotc3RhdGljIGlubGluZSB1MzIgbWljaGFlbF9nZXQzMih1OCAqZGF0YSkKLXsKLQlyZXR1cm4gZGF0YVswXSB8IChkYXRhWzFdIDw8IDgpIHwgKGRhdGFbMl0gPDwgMTYpIHwgKGRhdGFbM10gPDwgMjQpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtaWNoYWVsX3B1dDMyKHUzMiB2YWwsIHU4ICpkYXRhKQotewotCWRhdGFbMF0gPSB2YWwgJiAweGZmOwotCWRhdGFbMV0gPSAodmFsID4+IDgpICYgMHhmZjsKLQlkYXRhWzJdID0gKHZhbCA+PiAxNikgJiAweGZmOwotCWRhdGFbM10gPSAodmFsID4+IDI0KSAmIDB4ZmY7Ci19Ci0KLQotdm9pZCBtaWNoYWVsX21pYyh1OCAqa2V5LCB1OCAqZGEsIHU4ICpzYSwgdTggcHJpb3JpdHksCi0JCSB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQotewotCXUzMiBsLCByLCB2YWw7CisJdTMyIHZhbDsKIAlzaXplX3QgYmxvY2ssIGJsb2NrcywgbGVmdDsKKwlzdHJ1Y3QgbWljaGFlbF9taWNfY3R4IG1jdHg7CiAKLQlsID0gbWljaGFlbF9nZXQzMihrZXkpOwotCXIgPSBtaWNoYWVsX2dldDMyKGtleSArIDQpOwotCi0JLyogQSBwc2V1ZG8gaGVhZGVyIChEQSwgU0EsIFByaW9yaXR5LCAwLCAwLCAwKSBpcyB1c2VkIGluIE1pY2hhZWwgTUlDCi0JICogY2FsY3VsYXRpb24sIGJ1dCBpdCBpcyBfbm90XyB0cmFuc21pdHRlZCAqLwotCWwgXj0gbWljaGFlbF9nZXQzMihkYSk7Ci0JbWljaGFlbF9ibG9jayhsLCByKTsKLQlsIF49IGRhWzRdIHwgKGRhWzVdIDw8IDgpIHwgKHNhWzBdIDw8IDE2KSB8IChzYVsxXSA8PCAyNCk7Ci0JbWljaGFlbF9ibG9jayhsLCByKTsKLQlsIF49IG1pY2hhZWxfZ2V0MzIoJnNhWzJdKTsKLQltaWNoYWVsX2Jsb2NrKGwsIHIpOwotCWwgXj0gcHJpb3JpdHk7Ci0JbWljaGFlbF9ibG9jayhsLCByKTsKKwltaWNoYWVsX21pY19oZHIoJm1jdHgsIGtleSwgaGRyKTsKIAogCS8qIFJlYWwgZGF0YSAqLwogCWJsb2NrcyA9IGRhdGFfbGVuIC8gNDsKIAlsZWZ0ID0gZGF0YV9sZW4gJSA0OwogCi0JZm9yIChibG9jayA9IDA7IGJsb2NrIDwgYmxvY2tzOyBibG9jaysrKSB7Ci0JCWwgXj0gbWljaGFlbF9nZXQzMigmZGF0YVtibG9jayAqIDRdKTsKLQkJbWljaGFlbF9ibG9jayhsLCByKTsKLQl9CisJZm9yIChibG9jayA9IDA7IGJsb2NrIDwgYmxvY2tzOyBibG9jaysrKQorCQltaWNoYWVsX2Jsb2NrKCZtY3R4LCBnZXRfdW5hbGlnbmVkX2xlMzIoJmRhdGFbYmxvY2sgKiA0XSkpOwogCiAJLyogUGFydGlhbCBibG9jayBvZiAwLi4zIGJ5dGVzIGFuZCBwYWRkaW5nOiAweDVhICsgNC4uNyB6ZXJvcyB0byBtYWtlCiAJICogdG90YWwgbGVuZ3RoIGEgbXVsdGlwbGUgb2YgNC4gKi8KQEAgLTk0LDExICs3NywxMCBAQAogCQlsZWZ0LS07CiAJCXZhbCB8PSBkYXRhW2Jsb2NrcyAqIDQgKyBsZWZ0XTsKIAl9Ci0JbCBePSB2YWw7Ci0JbWljaGFlbF9ibG9jayhsLCByKTsKLQkvKiBsYXN0IGJsb2NrIGlzIHplcm8sIHNvIGwgXiAwID0gbCAqLwotCW1pY2hhZWxfYmxvY2sobCwgcik7CiAKLQltaWNoYWVsX3B1dDMyKGwsIG1pYyk7Ci0JbWljaGFlbF9wdXQzMihyLCBtaWMgKyA0KTsKKwltaWNoYWVsX2Jsb2NrKCZtY3R4LCB2YWwpOworCW1pY2hhZWxfYmxvY2soJm1jdHgsIDApOworCisJcHV0X3VuYWxpZ25lZF9sZTMyKG1jdHgubCwgbWljKTsKKwlwdXRfdW5hbGlnbmVkX2xlMzIobWN0eC5yLCBtaWMgKyA0KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9taWNoYWVsLmggYi9uZXQvbWFjODAyMTEvbWljaGFlbC5oCmluZGV4IDJlNmFlYmEuLjNiODQ4ZGEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9taWNoYWVsLmgKKysrIGIvbmV0L21hYzgwMjExL21pY2hhZWwuaApAQCAtMTQsNyArMTQsMTEgQEAKIAogI2RlZmluZSBNSUNIQUVMX01JQ19MRU4gOAogCi12b2lkIG1pY2hhZWxfbWljKHU4ICprZXksIHU4ICpkYSwgdTggKnNhLCB1OCBwcmlvcml0eSwKLQkJIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpOworc3RydWN0IG1pY2hhZWxfbWljX2N0eCB7CisJdTMyIGwsIHI7Cit9OworCit2b2lkIG1pY2hhZWxfbWljKGNvbnN0IHU4ICprZXksIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCisJCSBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKTsKIAogI2VuZGlmIC8qIE1JQ0hBRUxfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggYjQwNDUzNy4uZDdjMzcxZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC03OCw3ICs3OCw3IEBACiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICoKIGllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpic3NpZCwgaW50IGZyZXEsCiAJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX3B1dChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MpOwogc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSk7CkBAIC04Nyw2ICs4Nyw3IEBACiAJCQkJICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOwogc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpOworc3RhdGljIHZvaWQgc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKTsKIAogCiB2b2lkIGllZWU4MDJfMTFfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLApAQCAtMjAzLDYgKzIwNCwyNSBAQAogCQkJZWxlbXMtPnBlcnIgPSBwb3M7CiAJCQllbGVtcy0+cGVycl9sZW4gPSBlbGVuOwogCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfQ0hBTk5FTF9TV0lUQ0g6CisJCQllbGVtcy0+Y2hfc3dpdGNoX2VsZW0gPSBwb3M7CisJCQllbGVtcy0+Y2hfc3dpdGNoX2VsZW1fbGVuID0gZWxlbjsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX1FVSUVUOgorCQkJaWYgKCFlbGVtcy0+cXVpZXRfZWxlbSkgeworCQkJCWVsZW1zLT5xdWlldF9lbGVtID0gcG9zOworCQkJCWVsZW1zLT5xdWlldF9lbGVtX2xlbiA9IGVsZW47CisJCQl9CisJCQllbGVtcy0+bnVtX29mX3F1aWV0X2VsZW0rKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX0NPVU5UUlk6CisJCQllbGVtcy0+Y291bnRyeV9lbGVtID0gcG9zOworCQkJZWxlbXMtPmNvdW50cnlfZWxlbV9sZW4gPSBlbGVuOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfUFdSX0NPTlNUUkFJTlQ6CisJCQllbGVtcy0+cHdyX2NvbnN0cl9lbGVtID0gcG9zOworCQkJZWxlbXMtPnB3cl9jb25zdHJfZWxlbV9sZW4gPSBlbGVuOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMjU2LDE5ICsyNzYsOCBAQAogCQlxcGFyYW0uY3dfbWF4ID0gMTAyMzsKIAkJcXBhcmFtLnR4b3AgPSAwOwogCi0JCWZvciAoaSA9IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMDsgaSA8IE5VTV9UWF9EQVRBX1FVRVVFUzsgaSsrKQotCQkJbG9jYWwtPm9wcy0+Y29uZl90eChsb2NhbF90b19odyhsb2NhbCksCi0JCQkJCSAgIGkgKyBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTAsCi0JCQkJCSAgICZxcGFyYW0pOwotCi0JCWlmIChpYnNzKSB7Ci0JCQkvKiBJQlNTIHVzZXMgZGlmZmVyZW50IHBhcmFtZXRlcnMgZm9yIEJlYWNvbiBzZW5kaW5nICovCi0JCQlxcGFyYW0uY3dfbWluKys7Ci0JCQlxcGFyYW0uY3dfbWluICo9IDI7Ci0JCQlxcGFyYW0uY3dfbWluLS07Ci0JCQlsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwKLQkJCQkJICAgSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTiwgJnFwYXJhbSk7Ci0JCX0KKwkJZm9yIChpID0gMDsgaSA8IGxvY2FsX3RvX2h3KGxvY2FsKS0+cXVldWVzOyBpKyspCisJCQlsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgaSwgJnFwYXJhbSk7CiAJfQogfQogCkBAIC0yODIsNiArMjkxLDEyIEBACiAJaW50IGNvdW50OwogCXU4ICpwb3M7CiAKKwlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkKKwkJcmV0dXJuOworCisJaWYgKCF3bW1fcGFyYW0pCisJCXJldHVybjsKKwogCWlmICh3bW1fcGFyYW1fbGVuIDwgOCB8fCB3bW1fcGFyYW1bNV0gLyogdmVyc2lvbiAqLyAhPSAxKQogCQlyZXR1cm47CiAJY291bnQgPSB3bW1fcGFyYW1bNl0gJiAweDBmOwpAQCAtMzA1LDM3ICszMjAsMzMgQEAKIAogCQlzd2l0Y2ggKGFjaSkgewogCQljYXNlIDE6Ci0JCQlxdWV1ZSA9IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMzsKLQkJCWlmIChhY20pIHsKKwkJCXF1ZXVlID0gMzsKKwkJCWlmIChhY20pCiAJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOwotCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCXF1ZXVlID0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEExOwotCQkJaWYgKGFjbSkgeworCQkJcXVldWUgPSAxOworCQkJaWYgKGFjbSkKIAkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNCkgfCBCSVQoNSk7Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSAzOgotCQkJcXVldWUgPSBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTA7Ci0JCQlpZiAoYWNtKSB7CisJCQlxdWV1ZSA9IDA7CisJCQlpZiAoYWNtKQogCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg2KSB8IEJJVCg3KTsKLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDA6CiAJCWRlZmF1bHQ6Ci0JCQlxdWV1ZSA9IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMjsKLQkJCWlmIChhY20pIHsKKwkJCXF1ZXVlID0gMjsKKwkJCWlmIChhY20pCiAJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDEpIHwgQklUKDIpOwotCQkJfQogCQkJYnJlYWs7CiAJCX0KIAogCQlwYXJhbXMuYWlmcyA9IHBvc1swXSAmIDB4MGY7CiAJCXBhcmFtcy5jd19tYXggPSBlY3cyY3coKHBvc1sxXSAmIDB4ZjApID4+IDQpOwogCQlwYXJhbXMuY3dfbWluID0gZWN3MmN3KHBvc1sxXSAmIDB4MGYpOwotCQlwYXJhbXMudHhvcCA9IHBvc1syXSB8IChwb3NbM10gPDwgOCk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHCisJCXBhcmFtcy50eG9wID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHBvcyArIDIpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogV01NIHF1ZXVlPSVkIGFjaT0lZCBhY209JWQgYWlmcz0lZCAiCiAJCSAgICAgICAiY1dtaW49JWQgY1dtYXg9JWQgdHhvcD0lZFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcXVldWUsIGFjaSwgYWNtLCBwYXJhbXMuYWlmcywgcGFyYW1zLmN3X21pbiwKQEAgLTM1NSwxMSArMzY2LDE0IEBACiAJCQkJCSAgIGJvb2wgdXNlX3Nob3J0X3ByZWFtYmxlKQogewogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnNkYXRhLT5ic3NfY29uZjsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisjZW5kaWYKIAl1MzIgY2hhbmdlZCA9IDA7CiAKIAlpZiAodXNlX3Byb3RlY3Rpb24gIT0gYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQ1RTIHByb3RlY3Rpb24gJXMgKEJTU0lEPSIKIAkJCSAgICAgICAiJXMpXG4iLApAQCAtMzY3LDExICszODEsMTMgQEAKIAkJCSAgICAgICB1c2VfcHJvdGVjdGlvbiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCiAJCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaWZzdGEtPmJzc2lkKSk7CiAJCX0KKyNlbmRpZgogCQlic3NfY29uZi0+dXNlX2N0c19wcm90ID0gdXNlX3Byb3RlY3Rpb247CiAJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UOwogCX0KIAogCWlmICh1c2Vfc2hvcnRfcHJlYW1ibGUgIT0gYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc3dpdGNoZWQgdG8gJXMgYmFya2VyIHByZWFtYmxlIgogCQkJICAgICAgICIgKEJTU0lEPSVzKVxuIiwKQEAgLTM3OSw2ICszOTUsNyBAQAogCQkJICAgICAgIHVzZV9zaG9ydF9wcmVhbWJsZSA/ICJzaG9ydCIgOiAibG9uZyIsCiAJCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaWZzdGEtPmJzc2lkKSk7CiAJCX0KKyNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID0gdXNlX3Nob3J0X3ByZWFtYmxlOwogCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRTsKIAl9CkBAIC01MzcsNyArNTU0LDcgQEAKIAogCQkJY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHNkYXRhLCBic3MpOwogCi0JCQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIGJzcyk7CisJCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIAkJfQogCiAJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1NVUFBPUlRfSFRfTU9ERSkgewpAQCAtNTU1LDcgKzU3Miw3IEBACiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKGRldiwgaWZzdGEtPmJzc2lkKTsKIAkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7Ci0JCWllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhkZXYpOworCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhkZXYpOwogCiAJCXNkYXRhLT5ic3NfY29uZi5hc3NvY19odCA9IDA7CiAJCXNkYXRhLT5ic3NfY29uZi5odF9jb25mID0gTlVMTDsKQEAgLTU4OSw3ICs2MDYsNyBAQAogCQkgICAgICBpbnQgZW5jcnlwdCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICpwa3RfZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJc2tiLT5kZXYgPSBzZGF0YS0+bG9jYWwtPm1kZXY7CkBAIC01OTcsMTEgKzYxNCwxMSBAQAogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCAwKTsKIAotCXBrdF9kYXRhID0gKHN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKikgc2tiLT5jYjsKLQltZW1zZXQocGt0X2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhKSk7Ci0JcGt0X2RhdGEtPmlmaW5kZXggPSBzZGF0YS0+ZGV2LT5pZmluZGV4OworCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJbWVtc2V0KGluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8pKTsKKwlpbmZvLT5jb250cm9sLmlmaW5kZXggPSBzZGF0YS0+ZGV2LT5pZmluZGV4OwogCWlmICghZW5jcnlwdCkKLQkJcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX0RPX05PVF9FTkNSWVBUOworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0RPX05PVF9FTkNSWVBUOwogCiAJZGV2X3F1ZXVlX3htaXQoc2tiKTsKIH0KQEAgLTczMCw5ICs3NDcsOCBAQAogCWlmIChic3MpIHsKIAkJaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQogCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7Ci0JCWlmIChic3MtPndtbV9pZSkgeworCQlpZiAoYnNzLT53bW1faWUpCiAJCQl3bW0gPSAxOwotCQl9CiAKIAkJLyogZ2V0IGFsbCByYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgdGhlIEFQIGFzCiAJCSAqIHNvbWUgQVBzIGRvbid0IGxpa2UgZ2V0dGluZyBhIHN1cGVyc2V0IG9mIHRoZWlyIHJhdGVzCkBAIC03NDAsNyArNzU2LDExIEBACiAJCSAqIGItb25seSBtb2RlKSAqLwogCQlyYXRlc19sZW4gPSBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyhic3MsIHNiYW5kLCAmcmF0ZXMpOwogCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGRldiwgYnNzKTsKKwkJaWYgKChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKKwkJICAgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVCkpCisJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVDsKKworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIAl9IGVsc2UgewogCQlyYXRlcyA9IH4wOwogCQlyYXRlc19sZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKQEAgLTgwNyw2ICs4MjcsMjYgQEAKIAkJfQogCX0KIAorCWlmIChjYXBhYiAmIFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UKSB7CisJCS8qIDEuIHBvd2VyIGNhcGFiaWxpdGllcyAqLworCQlwb3MgPSBza2JfcHV0KHNrYiwgNCk7CisJCSpwb3MrKyA9IFdMQU5fRUlEX1BXUl9DQVBBQklMSVRZOworCQkqcG9zKysgPSAyOworCQkqcG9zKysgPSAwOyAvKiBtaW4gdHggcG93ZXIgKi8KKwkJKnBvcysrID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+bWF4X3Bvd2VyOyAvKiBtYXggdHggcG93ZXIgKi8KKworCQkvKiAyLiBzdXBwb3J0ZWQgY2hhbm5lbHMgKi8KKwkJLyogVE9ETzogZ2V0IHRoaXMgaW4gcmVnIGRvbWFpbiBmb3JtYXQgKi8KKwkJcG9zID0gc2tiX3B1dChza2IsIDIgKiBzYmFuZC0+bl9jaGFubmVscyArIDIpOworCQkqcG9zKysgPSBXTEFOX0VJRF9TVVBQT1JURURfQ0hBTk5FTFM7CisJCSpwb3MrKyA9IDIgKiBzYmFuZC0+bl9jaGFubmVsczsKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKKwkJCQkJc2JhbmQtPmNoYW5uZWxzW2ldLmNlbnRlcl9mcmVxKTsKKwkJCSpwb3MrKyA9IDE7IC8qIG9uZSBjaGFubmVsIGluIHRoZSBzdWJiYW5kKi8KKwkJfQorCX0KKwogCWlmIChpZnN0YS0+ZXh0cmFfaWUpIHsKIAkJcG9zID0gc2tiX3B1dChza2IsIGlmc3RhLT5leHRyYV9pZV9sZW4pOwogCQltZW1jcHkocG9zLCBpZnN0YS0+ZXh0cmFfaWUsIGlmc3RhLT5leHRyYV9pZV9sZW4pOwpAQCAtODI0LDkgKzg2NCwzMiBAQAogCQkqcG9zKysgPSAxOyAvKiBXTUUgdmVyICovCiAJCSpwb3MrKyA9IDA7CiAJfQorCiAJLyogd21tIHN1cHBvcnQgaXMgYSBtdXN0IHRvIEhUICovCi0JaWYgKHdtbSAmJiBzYmFuZC0+aHRfaW5mby5odF9zdXBwb3J0ZWQpIHsKLQkJX19sZTE2IHRtcCA9IGNwdV90b19sZTE2KHNiYW5kLT5odF9pbmZvLmNhcCk7CisJaWYgKHdtbSAmJiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkgICAgc2JhbmQtPmh0X2luZm8uaHRfc3VwcG9ydGVkICYmIGJzcy0+aHRfYWRkX2llKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvICpodF9hZGRfaW5mbyA9CisJCQkoc3RydWN0IGllZWU4MDIxMV9odF9hZGR0X2luZm8gKilic3MtPmh0X2FkZF9pZTsKKwkJdTE2IGNhcCA9IHNiYW5kLT5odF9pbmZvLmNhcDsKKwkJX19sZTE2IHRtcDsKKwkJdTMyIGZsYWdzID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+ZmxhZ3M7CisKKwkJc3dpdGNoIChodF9hZGRfaW5mby0+aHRfcGFyYW0gJiBJRUVFODAyMTFfSFRfSUVfQ0hBX1NFQ19PRkZTRVQpIHsKKwkJY2FzZSBJRUVFODAyMTFfSFRfSUVfQ0hBX1NFQ19BQk9WRToKKwkJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0ZBVF9BQk9WRSkgeworCQkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEg7CisJCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9IVF9JRV9DSEFfU0VDX0JFTE9XOgorCQkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fRkFUX0JFTE9XKSB7CisJCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSDsKKwkJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQl0bXAgPSBjcHVfdG9fbGUxNihjYXApOwogCQlwb3MgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSsyKTsKIAkJKnBvcysrID0gV0xBTl9FSURfSFRfQ0FQQUJJTElUWTsKIAkJKnBvcysrID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKTsKQEAgLTkyOSw3ICs5OTIsNyBAQAogCXdlcF9wcml2YWN5ID0gISFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKGRldik7CiAJcHJpdmFjeV9pbnZva2VkID0gISEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQpOwogCi0JaWVlZTgwMjExX3J4X2Jzc19wdXQoZGV2LCBic3MpOworCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwogCiAJaWYgKChic3NfcHJpdmFjeSA9PSB3ZXBfcHJpdmFjeSkgfHwgKGJzc19wcml2YWN5ID09IHByaXZhY3lfaW52b2tlZCkpCiAJCXJldHVybiAwOwpAQCAtMTEyMSwxNCArMTE4NCwxMCBAQAogCXU4ICpwb3M7CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlcGx5aW5nIHRvIGF1dGggY2hhbGxlbmdlXG4iLCBkZXYtPm5hbWUpOwogCXBvcyA9IG1nbXQtPnUuYXV0aC52YXJpYWJsZTsKIAlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKLQlpZiAoIWVsZW1zLmNoYWxsZW5nZSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vIGNoYWxsZW5nZSBJRSBpbiBzaGFyZWQga2V5IGF1dGggIgotCQkgICAgICAgImZyYW1lXG4iLCBkZXYtPm5hbWUpOworCWlmICghZWxlbXMuY2hhbGxlbmdlKQogCQlyZXR1cm47Ci0JfQogCWllZWU4MDIxMV9zZW5kX2F1dGgoZGV2LCBpZnN0YSwgMywgZWxlbXMuY2hhbGxlbmdlIC0gMiwKIAkJCSAgICBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwgMSk7CiB9CkBAIC0xMTQ0LDggKzEyMDMsOCBAQAogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgY2FwYWI7CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyAxICsKLQkJCQkJc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcCkpOworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgogCQkgICAgICAgImZvciBhZGRiYSByZXNwIGZyYW1lXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTE5Myw5ICsxMjUyLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJdTE2IGNhcGFiOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMSArCi0JCQkJc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxKSk7Ci0KKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCkBAIC0xMjk2LDcgKzEzNTMsNyBAQAogCiAKIAkvKiBleGFtaW5lIHN0YXRlIG1hY2hpbmUgKi8KLQlzcGluX2xvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV9yeCk7CisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCiAJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwpAQCAtMTMxMiw5ICsxMzY5LDExIEBACiAJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0KIAkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfcngpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSByeCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCiAJCQkJCXRpZCk7CisjZW5kaWYKIAkJZ290byBlbmQ7CiAJfQogCS8qIHJ4IHRpbWVyICovCkBAIC0xMzMwLDkgKzEzODksMTEgQEAKIAl0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZiA9CiAJCWttYWxsb2MoYnVmX3NpemUgKiBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksIEdGUF9BVE9NSUMpOwogCWlmICghdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvY2F0ZSByZW9yZGVyaW5nIGJ1ZmZlciAiCiAJCQkgICAgICAgInRvIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZgogCQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOwogCQlnb3RvIGVuZDsKIAl9CkBAIC0xMzYzLDcgKzE0MjQsNyBAQAogCXRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9IDA7CiAJc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKIGVuZDoKLQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3J4KTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAogZW5kX25vX2xvY2s6CiAJaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdGEtPnNkYXRhLT5kZXYsIHN0YS0+YWRkciwgdGlkLApAQCAtMTM5NSwxOCArMTQ1NiwxNiBAQAogCiAJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwogCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAogCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOwotCQlwcmludGsoS0VSTl9ERUJVRyAic3RhdGUgbm90IEhUX0FEREJBX1JFUVVFU1RFRF9NU0s6IgotCQkJIiVkXG4iLCAqc3RhdGUpOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJZ290byBhZGRiYV9yZXNwX2V4aXQ7CiAJfQogCiAJaWYgKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gIT0KIAkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4pIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAid3JvbmcgYWRkQkEgcmVzcG9uc2UgdG9rZW4sIHRpZCAlZFxuIiwgdGlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KQEAgLTE0MTksMjYgKzE0NzgsMTggQEAKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KIAlpZiAobGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cykKIAkJCT09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKLQkJaWYgKCpzdGF0ZSAmIEhUX0FEREJBX1JFQ0VJVkVEX01TSykKLQkJCXByaW50ayhLRVJOX0RFQlVHICJkb3VibGUgYWRkQkEgcmVzcG9uc2VcbiIpOwotCiAJCSpzdGF0ZSB8PSBIVF9BRERCQV9SRUNFSVZFRF9NU0s7CiAJCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPSAwOwogCi0JCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQWdncmVnYXRpb24gb24gZm9yIHRpZCAlZCBcbiIsIHRpZCk7CisJCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKQogCQkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7Ci0JCX0KIAotCQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInJlY2lwaWVudCBhY2NlcHRlZCBhZ2c6IHRpZCAlZCBcbiIsIHRpZCk7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJyZWNpcGllbnQgcmVqZWN0ZWQgYWdnOiB0aWQgJWQgXG4iLCB0aWQpOwotCiAJCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0rKzsKIAkJLyogdGhpcyB3aWxsIGFsbG93IHRoZSBzdGF0ZSBjaGVjayBpbiBzdG9wX0JBX3Nlc3Npb24gKi8KIAkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOwotCQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oaHcsIHN0YS0+YWRkciwgdGlkLAogCQkJCQkgICAgIFdMQU5fQkFDS19JTklUSUFUT1IpOwogCX0KQEAgLTE0NTcsOCArMTUwOCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCXUxNiBwYXJhbXM7CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyAxICsKLQkJCQkJc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEpKTsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCkBAIC0xNDkxLDYgKzE1NDEsMzUgQEAKIAlpZWVlODAyMTFfc3RhX3R4KGRldiwgc2tiLCAwKTsKIH0KIAordm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JhciAqYmFyOworCXUxNiBiYXJfY29udHJvbCA9IDA7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqYmFyKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgorCQkJImJhciBmcmFtZVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJYmFyID0gKHN0cnVjdCBpZWVlODAyMTFfYmFyICopc2tiX3B1dChza2IsIHNpemVvZigqYmFyKSk7CisJbWVtc2V0KGJhciwgMCwgc2l6ZW9mKCpiYXIpKTsKKwliYXItPmZyYW1lX2NvbnRyb2wgPSBJRUVFODAyMTFfRkMoSUVFRTgwMjExX0ZUWVBFX0NUTCwKKwkJCQkJSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVRKTsKKwltZW1jcHkoYmFyLT5yYSwgcmEsIEVUSF9BTEVOKTsKKwltZW1jcHkoYmFyLT50YSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0FDS19QT0xJQ1lfTk9STUFMOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0NCTVRJRF9DT01QUkVTU0VEX0JBOworCWJhcl9jb250cm9sIHw9ICh1MTYpKHRpZCA8PCAxMik7CisJYmFyLT5jb250cm9sID0gY3B1X3RvX2xlMTYoYmFyX2NvbnRyb2wpOworCWJhci0+c3RhcnRfc2VxX251bSA9IGNwdV90b19sZTE2KHNzbik7CisKKwlpZWVlODAyMTFfc3RhX3R4KGRldiwgc2tiLCAwKTsKK30KKwogdm9pZCBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqcmEsIHUxNiB0aWQsCiAJCQkJCXUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24pCiB7CkBAIC0xNTA5LDE3ICsxNTg4LDE3IEBACiAJfQogCiAJLyogY2hlY2sgaWYgVElEIGlzIGluIG9wZXJhdGlvbmFsIHN0YXRlICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfcngpOworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdCiAJCQkJIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfcngpOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CiAJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0KIAkJSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8CiAJCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV9yeCk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAKIAkvKiBzdG9wIEhXIFJ4IGFnZ3JlZ2F0aW9uLiBhbXBkdV9hY3Rpb24gZXhpc3RlbmNlCiAJICogYWxyZWFkeSB2ZXJpZmllZCBpbiBzZXNzaW9uIGluaXQgc28gd2UgYWRkIHRoZSBCVUdfT04gKi8KQEAgLTE1MzQsNyArMTYxMyw3IEBACiAJCQkJCXJhLCB0aWQsIE5VTEwpOwogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX0RFQlVHICJIVyBwcm9ibGVtIC0gY2FuIG5vdCBzdG9wIHJ4ICIKLQkJCQkiYWdnZXJnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKKwkJCQkiYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKIAogCS8qIHNodXRkb3duIHRpbWVyIGhhcyBub3QgZXhwaXJlZCAqLwogCWlmIChpbml0aWF0b3IgIT0gV0xBTl9CQUNLX1RJTUVSKQpAQCAtMTU5NiwxMCArMTY3NSwxMCBAQAogCQlpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihkZXYsIHN0YS0+YWRkciwgdGlkLAogCQkJCQkJIFdMQU5fQkFDS19JTklUSUFUT1IsIDApOwogCWVsc2UgeyAvKiBXTEFOX0JBQ0tfUkVDSVBJRU5UICovCi0JCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF0gPQogCQkJCUhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCQlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKCZsb2NhbC0+aHcsIHN0YS0+YWRkciwgdGlkLAogCQkJCQkgICAgIFdMQU5fQkFDS19SRUNJUElFTlQpOwogCX0KQEAgLTE2MzYsMjAgKzE3MTUsMjQgQEAKIAogCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKIAkvKiBjaGVjayBpZiB0aGUgVElEIHdhaXRzIGZvciBhZGRCQSByZXNwb25zZSAqLwotCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIGV4cGlyZWQgb24gdGlkICVkIGJ1dCB3ZSBhcmUgbm90ICIKIAkJCQkiZXhwZWN0aW5nIGFkZEJBIHJlc3BvbnNlIHRoZXJlIiwgdGlkKTsKKyNlbmRpZgogCQlnb3RvIHRpbWVyX2V4cGlyZWRfZXhpdDsKIAl9CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgcmVzcG9uc2UgdGltZXIgZXhwaXJlZCBvbiB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYKIAogCS8qIGdvIHRocm91Z2ggdGhlIHN0YXRlIGNoZWNrIGluIHN0b3BfQkFfc2Vzc2lvbiAqLwogCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKGh3LCB0ZW1wX3N0YS0+YWRkciwgdGlkLAogCQkJCSAgICAgV0xBTl9CQUNLX0lOSVRJQVRPUik7CiAKQEAgLTE2NjIsNyArMTc0NSw3IEBACiAgKiByZXNldHRpbmcgaXQgYWZ0ZXIgZWFjaCBmcmFtZSB0aGF0IGFycml2ZXMgZnJvbSB0aGUgb3JpZ2luYXRvci4KICAqIGlmIHRoaXMgdGltZXIgZXhwaXJlcyBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbiB3aWxsIGJlIGV4ZWN1dGVkLgogICovCi12b2lkIHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAkvKiBub3QgYW4gZWxlZ2FudCBkZXRvdXIsIGJ1dCB0aGVyZSBpcyBubyBjaG9pY2UgYXMgdGhlIHRpbWVyIHBhc3NlcwogCSAqIG9ubHkgb25lIGFyZ3VtZW50LCBhbmQgdmFyaW91cyBzdGFfaW5mbyBhcmUgbmVlZGVkIGhlcmUsIHNvIGluaXQKQEAgLTE2NzMsNyArMTc1Niw5IEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodGltZXJfdG9faWQsIHN0cnVjdCBzdGFfaW5mbywKIAkJCQkJIHRpbWVyX3RvX3RpZFswXSk7CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAicnggc2Vzc2lvbiB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgKHUxNikqcHRpZCk7CisjZW5kaWYKIAlpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEtPnNkYXRhLT5kZXYsIHN0YS0+YWRkciwKIAkJCQkJICh1MTYpKnB0aWQsIFdMQU5fQkFDS19USU1FUiwKIAkJCQkJIFdMQU5fUkVBU09OX1FTVEFfVElNRU9VVCk7CkBAIC0xNjkzLDYgKzE3NzgsNzEgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX3JlZnVzZV9tZWFzdXJlbWVudF9yZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfbXNybWVudF9pZSAqcmVxdWVzdF9pZSwKKwkJCQkJY29uc3QgdTggKmRhLCBjb25zdCB1OCAqYnNzaWQsCisJCQkJCXU4IGRpYWxvZ190b2tlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptc3JfcmVwb3J0OworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1zcl9yZXBvcnQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tc3JtZW50X2llKSk7CisKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCisJCQkJIm1lYXN1cmVtZW50IHJlcG9ydCBmcmFtZVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwltc3JfcmVwb3J0ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1zcl9yZXBvcnQsIDAsIDI0KTsKKwltZW1jcHkobXNyX3JlcG9ydC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1zcl9yZXBvcnQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1zcl9yZXBvcnQtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCW1zcl9yZXBvcnQtPmZyYW1lX2NvbnRyb2wgPSBJRUVFODAyMTFfRkMoSUVFRTgwMjExX0ZUWVBFX01HTVQsCisJCQkJCQlJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKKworCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKG1zcl9yZXBvcnQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQpKTsKKwltc3JfcmVwb3J0LT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfU1BFQ1RSVU1fTUdNVDsKKwltc3JfcmVwb3J0LT51LmFjdGlvbi51Lm1lYXN1cmVtZW50LmFjdGlvbl9jb2RlID0KKwkJCQlXTEFOX0FDVElPTl9TUENUX01TUl9SUFJUOworCW1zcl9yZXBvcnQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCisJbXNyX3JlcG9ydC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5lbGVtZW50X2lkID0gV0xBTl9FSURfTUVBU1VSRV9SRVBPUlQ7CisJbXNyX3JlcG9ydC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5sZW5ndGggPQorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbXNybWVudF9pZSk7CisKKwltZW1zZXQoJm1zcl9yZXBvcnQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQubXNyX2VsZW0sIDAsCisJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21zcm1lbnRfaWUpKTsKKwltc3JfcmVwb3J0LT51LmFjdGlvbi51Lm1lYXN1cmVtZW50Lm1zcl9lbGVtLnRva2VuID0gcmVxdWVzdF9pZS0+dG9rZW47CisJbXNyX3JlcG9ydC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5tc3JfZWxlbS5tb2RlIHw9CisJCQlJRUVFODAyMTFfU1BDVF9NU1JfUlBSVF9NT0RFX1JFRlVTRUQ7CisJbXNyX3JlcG9ydC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5tc3JfZWxlbS50eXBlID0gcmVxdWVzdF9pZS0+dHlwZTsKKworCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Byb2Nlc3NfbWVhc3VyZW1lbnRfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCQlzaXplX3QgbGVuKQoreworCS8qCisJICogSWdub3JpbmcgbWVhc3VyZW1lbnQgcmVxdWVzdCBpcyBzcGVjIHZpb2xhdGlvbi4KKwkgKiBNYW5kYXRvcnkgbWVhc3VyZW1lbnRzIG11c3QgYmUgcmVwb3J0ZWQgb3B0aW9uYWwKKwkgKiBtZWFzdXJlbWVudHMgbWlnaHQgYmUgcmVmdXNlZCBvciByZXBvcnRlZCBpbmNhcGFibGUKKwkgKiBGb3Igbm93IGp1c3QgcmVmdXNlCisJICogVE9ETzogQW5zd2VyIGJhc2ljIG1lYXN1cmVtZW50IGFzIHVubWVhc3VyZWQKKwkgKi8KKwlpZWVlODAyMTFfc2VuZF9yZWZ1c2VfbWVhc3VyZW1lbnRfcmVxdWVzdChkZXYsCisJCQkmbWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5tc3JfZWxlbSwKKwkJCW1nbXQtPnNhLCBtZ210LT5ic3NpZCwKKwkJCW1nbXQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQuZGlhbG9nX3Rva2VuKTsKK30KKworCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKQEAgLTE3MDMsNzMgKzE4NTMsNDEgQEAKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX0FVVEhFTlRJQ0FURSAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgotCQkgICAgICAgIiVzLCBidXQgbm90IGluIGF1dGhlbnRpY2F0ZSBzdGF0ZSAtIGlnbm9yZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSk7CisJICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKQogCQlyZXR1cm47Ci0JfQogCi0JaWYgKGxlbiA8IDI0ICsgNikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRvbyBzaG9ydCAoJXpkKSBhdXRoZW50aWNhdGlvbiBmcmFtZSAiCi0JCSAgICAgICAicmVjZWl2ZWQgZnJvbSAlcyAtIGlnbm9yZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGxlbiwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpKTsKKwlpZiAobGVuIDwgMjQgKyA2KQogCQlyZXR1cm47Ci0JfQogCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCi0JICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgotCQkgICAgICAgInVua25vd24gQVAgKFNBPSVzIEJTU0lEPSVzKSAtICIKLQkJICAgICAgICJpZ25vcmVkXG4iLCBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPmJzc2lkKSk7CisJICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKIAkJcmV0dXJuOwotCX0KIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyAmJgotCSAgICBtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGlvbiBmcmFtZSByZWNlaXZlZCBmcm9tICIKLQkJICAgICAgICJ1bmtub3duIEJTU0lEIChTQT0lcyBCU1NJRD0lcykgLSAiCi0JCSAgICAgICAiaWdub3JlZFxuIiwgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSksCi0JCSAgICAgICBwcmludF9tYWMobWFjLCBtZ210LT5ic3NpZCkpOworCSAgICBtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKLQl9CiAKIAlhdXRoX2FsZyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CiAJYXV0aF90cmFuc2FjdGlvbiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKIAlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIGF1dGhlbnRpY2F0aW9uIGZyb20gJXMgKGFsZz0lZCAiCi0JICAgICAgICJ0cmFuc2FjdGlvbj0lZCBzdGF0dXM9JWQpXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwgYXV0aF9hbGcsCi0JICAgICAgIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlKTsKLQogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewotCQkvKiBJRUVFIDgwMi4xMSBzdGFuZGFyZCBkb2VzIG5vdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGluIElCU1MKKwkJLyoKKwkJICogSUVFRSA4MDIuMTEgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBpbiBJQlNTCiAJCSAqIG5ldHdvcmtzIGFuZCBtb3N0IGltcGxlbWVudGF0aW9ucyBkbyBub3Qgc2VlbSB0byB1c2UgaXQuCiAJCSAqIEhvd2V2ZXIsIHRyeSB0byByZXBseSB0byBhdXRoZW50aWNhdGlvbiBhdHRlbXB0cyBpZiBzb21lb25lCiAJCSAqIGhhcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB0aGlzLgotCQkgKiBUT0RPOiBDb3VsZCBpbXBsZW1lbnQgc2hhcmVkIGtleSBhdXRoZW50aWNhdGlvbi4gKi8KLQkJaWYgKGF1dGhfYWxnICE9IFdMQU5fQVVUSF9PUEVOIHx8IGF1dGhfdHJhbnNhY3Rpb24gIT0gMSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bmV4cGVjdGVkIElCU1MgYXV0aGVudGljYXRpb24gIgotCQkJICAgICAgICJmcmFtZSAoYWxnPSVkIHRyYW5zYWN0aW9uPSVkKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uKTsKKwkJICovCisJCWlmIChhdXRoX2FsZyAhPSBXTEFOX0FVVEhfT1BFTiB8fCBhdXRoX3RyYW5zYWN0aW9uICE9IDEpCiAJCQlyZXR1cm47Ci0JCX0KIAkJaWVlZTgwMjExX3NlbmRfYXV0aChkZXYsIGlmc3RhLCAyLCBOVUxMLCAwLCAwKTsKIAl9CiAKIAlpZiAoYXV0aF9hbGcgIT0gaWZzdGEtPmF1dGhfYWxnIHx8Ci0JICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24pIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bmV4cGVjdGVkIGF1dGhlbnRpY2F0aW9uIGZyYW1lICIKLQkJICAgICAgICIoYWxnPSVkIHRyYW5zYWN0aW9uPSVkKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24pOworCSAgICBhdXRoX3RyYW5zYWN0aW9uICE9IGlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uKQogCQlyZXR1cm47Ci0JfQogCiAJaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBUCBkZW5pZWQgYXV0aGVudGljYXRpb24gKGF1dGhfYWxnPSVkICIKLQkJICAgICAgICJjb2RlPSVkKVxuIiwgZGV2LT5uYW1lLCBpZnN0YS0+YXV0aF9hbGcsIHN0YXR1c19jb2RlKTsKIAkJaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX05PVF9TVVBQT1JURURfQVVUSF9BTEcpIHsKIAkJCXU4IGFsZ3NbM107CiAJCQljb25zdCBpbnQgbnVtX2FsZ3MgPSBBUlJBWV9TSVpFKGFsZ3MpOwpAQCAtMTc5OCw5ICsxOTE2LDYgQEAKIAkJCQkgICAgIWllZWU4MDIxMV9zdGFfd2VwX2NvbmZpZ3VyZWQoZGV2KSkKIAkJCQkJY29udGludWU7CiAJCQkJaWZzdGEtPmF1dGhfYWxnID0gYWxnc1twb3NdOwotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2V0IGF1dGhfYWxnPSVkIGZvciAiCi0JCQkJICAgICAgICJuZXh0IHRyeVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBpZnN0YS0+YXV0aF9hbGcpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0xODMwLDMwICsxOTQ1LDE2IEBACiAJdTE2IHJlYXNvbl9jb2RlOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCi0JaWYgKGxlbiA8IDI0ICsgMikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRvbyBzaG9ydCAoJXpkKSBkZWF1dGhlbnRpY2F0aW9uIGZyYW1lICIKLQkJICAgICAgICJyZWNlaXZlZCBmcm9tICVzIC0gaWdub3JlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSkpOworCWlmIChsZW4gPCAyNCArIDIpCiAJCXJldHVybjsKLQl9CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGlvbiBmcmFtZSByZWNlaXZlZCBmcm9tICIKLQkJICAgICAgICJ1bmtub3duIEFQIChTQT0lcyBCU1NJRD0lcykgLSAiCi0JCSAgICAgICAiaWdub3JlZFxuIiwgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSksCi0JCSAgICAgICBwcmludF9tYWMobWFjLCBtZ210LT5ic3NpZCkpOworCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRlYXV0aC5yZWFzb25fY29kZSk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIGRlYXV0aGVudGljYXRpb24gZnJvbSAlcyIKLQkgICAgICAgIiAocmVhc29uPSVkKVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSksIHJlYXNvbl9jb2RlKTsKLQotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpIHsKKwlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRlZFxuIiwgZGV2LT5uYW1lKTsKLQl9CiAKIAlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9BVVRIRU5USUNBVEUgfHwKIAkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9BU1NPQ0lBVEUgfHwKQEAgLTE4NzYsMjcgKzE5NzcsMTQgQEAKIAl1MTYgcmVhc29uX2NvZGU7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKLQlpZiAobGVuIDwgMjQgKyAyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIHNob3J0ICglemQpIGRpc2Fzc29jaWF0aW9uIGZyYW1lICIKLQkJICAgICAgICJyZWNlaXZlZCBmcm9tICVzIC0gaWdub3JlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSkpOworCWlmIChsZW4gPCAyNCArIDIpCiAJCXJldHVybjsKLQl9CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRpb24gZnJhbWUgcmVjZWl2ZWQgZnJvbSAiCi0JCSAgICAgICAidW5rbm93biBBUCAoU0E9JXMgQlNTSUQ9JXMpIC0gIgotCQkgICAgICAgImlnbm9yZWRcbiIsIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLAotCQkgICAgICAgcHJpbnRfbWFjKG1hYywgbWdtdC0+YnNzaWQpKTsKKwlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOwotCX0KIAogCXJlYXNvbl9jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5kaXNhc3NvYy5yZWFzb25fY29kZSk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIGRpc2Fzc29jaWF0aW9uIGZyb20gJXMiCi0JICAgICAgICIgKHJlYXNvbj0lZClcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLCByZWFzb25fY29kZSk7Ci0KIAlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0ZWRcbiIsIGRldi0+bmFtZSk7CiAKQEAgLTE5MzIsMjcgKzIwMjAsMTQgQEAKIAkvKiBBc3NvY1Jlc3AgYW5kIFJlYXNzb2NSZXNwIGhhdmUgaWRlbnRpY2FsIHN0cnVjdHVyZSwgc28gcHJvY2VzcyBib3RoCiAJICogb2YgdGhlbSBpbiB0aGlzIGZ1bmN0aW9uLiAqLwogCi0JaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfQVNTT0NJQVRFKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRpb24gZnJhbWUgcmVjZWl2ZWQgZnJvbSAiCi0JCSAgICAgICAiJXMsIGJ1dCBub3QgaW4gYXNzb2NpYXRlIHN0YXRlIC0gaWdub3JlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpKTsKKwlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9BU1NPQ0lBVEUpCiAJCXJldHVybjsKLQl9CiAKLQlpZiAobGVuIDwgMjQgKyA2KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIHNob3J0ICglemQpIGFzc29jaWF0aW9uIGZyYW1lICIKLQkJICAgICAgICJyZWNlaXZlZCBmcm9tICVzIC0gaWdub3JlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSkpOworCWlmIChsZW4gPCAyNCArIDYpCiAJCXJldHVybjsKLQl9CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRpb24gZnJhbWUgcmVjZWl2ZWQgZnJvbSAiCi0JCSAgICAgICAidW5rbm93biBBUCAoU0E9JXMgQlNTSUQ9JXMpIC0gIgotCQkgICAgICAgImlnbm9yZWRcbiIsIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLAotCQkgICAgICAgcHJpbnRfbWFjKG1hYywgbWdtdC0+YnNzaWQpKTsKKwlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47Ci0JfQogCiAJY2FwYWJfaW5mbyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5jYXBhYl9pbmZvKTsKIAlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5zdGF0dXNfY29kZSk7CkBAIC0yMDE2LDEwICsyMDkxLDEwIEBACiAJCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAogCQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKIAkJaWYgKGJzcykgewotCQkJc3RhLT5sYXN0X3Jzc2kgPSBic3MtPnJzc2k7CiAJCQlzdGEtPmxhc3Rfc2lnbmFsID0gYnNzLT5zaWduYWw7CisJCQlzdGEtPmxhc3RfcXVhbCA9IGJzcy0+cXVhbDsKIAkJCXN0YS0+bGFzdF9ub2lzZSA9IGJzcy0+bm9pc2U7Ci0JCQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIGJzcyk7CisJCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIAkJfQogCiAJCWVyciA9IHN0YV9pbmZvX2luc2VydChzdGEpOwpAQCAtMjA0MSw4ICsyMTE2LDggQEAKIAkgKgkgIHRvIGJldHdlZW4gdGhlIHN0YV9pbmZvX2FsbG9jKCkgYW5kIHN0YV9pbmZvX2luc2VydCgpIGFib3ZlLgogCSAqLwogCi0Jc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9BVVRIIHwgV0xBTl9TVEFfQVNTT0MgfCBXTEFOX1NUQV9BU1NPQ19BUCB8Ci0JCSAgICAgIFdMQU5fU1RBX0FVVEhPUklaRUQ7CisJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEggfCBXTEFOX1NUQV9BU1NPQyB8IFdMQU5fU1RBX0FTU09DX0FQIHwKKwkJCSAgIFdMQU5fU1RBX0FVVEhPUklaRUQpOwogCiAJcmF0ZXMgPSAwOwogCWJhc2ljX3JhdGVzID0gMDsKQEAgLTIwODYsNyArMjE2MSw4IEBACiAJZWxzZQogCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CiAKLQlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYgZWxlbXMuaHRfaW5mb19lbGVtICYmIGVsZW1zLndtbV9wYXJhbSkgeworCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJiBlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtICYmCisJICAgIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvIGJzc19pbmZvOwogCQlpZWVlODAyMTFfaHRfY2FwX2llX3RvX2h0X2luZm8oCiAJCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopCkBAIC0yMDk5LDggKzIxNzUsOCBAQAogCiAJcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdGEsIGxvY2FsKTsKIAotCWlmIChlbGVtcy53bW1fcGFyYW0gJiYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7Ci0JCXN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfV01FOworCWlmIChlbGVtcy53bW1fcGFyYW0pIHsKKwkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1dNRSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMoZGV2LCBpZnN0YSwgZWxlbXMud21tX3BhcmFtLAogCQkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CkBAIC0yMTM2LDEwICsyMjEyLDkgQEAKIAogCiAvKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5zdGFfYnNzX2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfZGVsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzcykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYiwgKnByZXYgPSBOVUxMOwogCWIgPSBsb2NhbC0+c3RhX2Jzc19oYXNoW1NUQV9IQVNIKGJzcy0+YnNzaWQpXTsKIAl3aGlsZSAoYikgewpAQCAtMjI4NCw0NSArMjM1OSw0MiBAQAogCWtmcmVlKGJzcy0+cnNuX2llKTsKIAlrZnJlZShic3MtPndtbV9pZSk7CiAJa2ZyZWUoYnNzLT5odF9pZSk7CisJa2ZyZWUoYnNzLT5odF9hZGRfaWUpOwogCWtmcmVlKGJzc19tZXNoX2lkKGJzcykpOwogCWtmcmVlKGJzc19tZXNoX2NmZyhic3MpKTsKIAlrZnJlZShic3MpOwogfQogCiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX3B1dChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJmJzcy0+dXNlcnMsICZsb2NhbC0+c3RhX2Jzc19sb2NrKSkgewogCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJcmV0dXJuOwogCX0KIAotCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2RlbChkZXYsIGJzcyk7CisJX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfZGVsKGxvY2FsLCBic3MpOwogCWxpc3RfZGVsKCZic3MtPmxpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKIAlpZWVlODAyMTFfcnhfYnNzX2ZyZWUoYnNzKTsKIH0KIAogCi12b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit2b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5zdGFfYnNzX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+c3RhX2Jzc19saXN0KTsKIH0KIAogCi12b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9kZWluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzLCAqdG1wOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wLCAmbG9jYWwtPnN0YV9ic3NfbGlzdCwgbGlzdCkKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQoZGV2LCBic3MpOworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIH0KIAogCkBAIC0yMzM0LDggKzI0MDYsNiBAQAogCWludCByZXMsIHJhdGVzLCBpLCBqOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBjb250cm9sOwotCXN0cnVjdCByYXRlX3NlbGVjdGlvbiByYXRlc2VsOwogCXU4ICpwb3M7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CkBAIC0yMzUzLDcgKzI0MjMsNyBAQAogCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKIAl9CiAJbWVtY3B5KGlmc3RhLT5ic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoZGV2KTsKKwlyZXMgPSBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIApAQCAtMjM2NywyNCArMjQzNywyMiBAQAogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKLQkvKiBTZXQgYmVhY29uIHRlbXBsYXRlICovCisJLyogQnVpbGQgSUJTUyBwcm9iZSByZXNwb25zZSAqLwogCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgNDAwKTsKLQlkbyB7Ci0JCWlmICghc2tiKQotCQkJYnJlYWs7Ci0KKwlpZiAoc2tiKSB7CiAJCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKIAogCQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKQogCQkJc2tiX3B1dChza2IsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7CiAJCW1lbXNldChtZ210LCAwLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOwogCQltZ210LT5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAotCQkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CisJCQkJCQkgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CiAJCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwogCQltZW1jcHkobWdtdC0+c2EsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9CiAJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5iZWFjb25faW50KTsKKwkJbWdtdC0+dS5iZWFjb24udGltZXN0YW1wID0gY3B1X3RvX2xlNjQoYnNzLT50aW1lc3RhbXApOwogCQltZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoYnNzLT5jYXBhYmlsaXR5KTsKIAogCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmc3RhLT5zc2lkX2xlbik7CkBAIC0yNDIyLDYxICsyNDkwLDIzIEBACiAJCQltZW1jcHkocG9zLCAmYnNzLT5zdXBwX3JhdGVzWzhdLCByYXRlcyk7CiAJCX0KIAotCQltZW1zZXQoJmNvbnRyb2wsIDAsIHNpemVvZihjb250cm9sKSk7Ci0JCXJhdGVfY29udHJvbF9nZXRfcmF0ZShkZXYsIHNiYW5kLCBza2IsICZyYXRlc2VsKTsKLQkJaWYgKCFyYXRlc2VsLnJhdGUpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGRldGVybWluZSBUWCByYXRlICIKLQkJCSAgICAgICAiZm9yIElCU1MgYmVhY29uXG4iLCBkZXYtPm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY29udHJvbC52aWYgPSAmc2RhdGEtPnZpZjsKLQkJY29udHJvbC50eF9yYXRlID0gcmF0ZXNlbC5yYXRlOwotCQlpZiAoc2RhdGEtPmJzc19jb25mLnVzZV9zaG9ydF9wcmVhbWJsZSAmJgotCQkgICAgcmF0ZXNlbC5yYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKQotCQkJY29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEU7Ci0JCWNvbnRyb2wuYW50ZW5uYV9zZWxfdHggPSBsb2NhbC0+aHcuY29uZi5hbnRlbm5hX3NlbF90eDsKLQkJY29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfTk9fQUNLOwotCQljb250cm9sLnJldHJ5X2xpbWl0ID0gMTsKKwkJaWZzdGEtPnByb2JlX3Jlc3AgPSBza2I7CiAKLQkJaWZzdGEtPnByb2JlX3Jlc3AgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwotCQlpZiAoaWZzdGEtPnByb2JlX3Jlc3ApIHsKLQkJCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopCi0JCQkJaWZzdGEtPnByb2JlX3Jlc3AtPmRhdGE7Ci0JCQltZ210LT5mcmFtZV9jb250cm9sID0KLQkJCQlJRUVFODAyMTFfRkMoSUVFRTgwMjExX0ZUWVBFX01HTVQsCi0JCQkJCSAgICAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgUHJvYmVSZXNwICIKLQkJCSAgICAgICAidGVtcGxhdGUgZm9yIElCU1NcbiIsIGRldi0+bmFtZSk7Ci0JCX0KLQotCQlpZiAobG9jYWwtPm9wcy0+YmVhY29uX3VwZGF0ZSAmJgotCQkgICAgbG9jYWwtPm9wcy0+YmVhY29uX3VwZGF0ZShsb2NhbF90b19odyhsb2NhbCksCi0JCQkJCSAgICAgc2tiLCAmY29udHJvbCkgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDb25maWd1cmVkIElCU1MgYmVhY29uICIKLQkJCSAgICAgICAidGVtcGxhdGVcbiIsIGRldi0+bmFtZSk7Ci0JCQlza2IgPSBOVUxMOwotCQl9Ci0KLQkJcmF0ZXMgPSAwOwotCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0JCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJCWludCBiaXRyYXRlID0gKGJzcy0+c3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNTsKLQkJCWZvciAoaiA9IDA7IGogPCBzYmFuZC0+bl9iaXRyYXRlczsgaisrKQotCQkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSBiaXRyYXRlKQotCQkJCQlyYXRlcyB8PSBCSVQoaik7Ci0JCX0KLQkJaWZzdGEtPnN1cHBfcmF0ZXNfYml0c1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXSA9IHJhdGVzOwotCi0JCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoZGV2LCBic3MsIDEpOwotCX0gd2hpbGUgKDApOwotCi0JaWYgKHNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZhaWxlZCB0byBjb25maWd1cmUgSUJTUyBiZWFjb24gIgotCQkgICAgICAgInRlbXBsYXRlXG4iLCBkZXYtPm5hbWUpOwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTik7CiAJfQogCisJcmF0ZXMgPSAwOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKwlmb3IgKGkgPSAwOyBpIDwgYnNzLT5zdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCWludCBiaXRyYXRlID0gKGJzcy0+c3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNTsKKwkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspCisJCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gYml0cmF0ZSkKKwkJCQlyYXRlcyB8PSBCSVQoaik7CisJfQorCWlmc3RhLT5zdXBwX3JhdGVzX2JpdHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF0gPSByYXRlczsKKworCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoZGV2LCBic3MsIDEpOworCiAJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX0lCU1NfSk9JTkVEOwogCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOwogCkBAIC0yNTI4LDExICsyNTU4LDEwIEBACiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICBzaXplX3QgbGVuLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKKwkJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKIAkJCQkgIGludCBiZWFjb24pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKLQlzaXplX3QgYmFzZWxlbjsKIAlpbnQgZnJlcSwgY2xlbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKQEAgLTI1NDUsMzUgKzI1NzQsMjQgQEAKIAlpZiAoIWJlYWNvbiAmJiBtZW1jbXAobWdtdC0+ZGEsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOyAvKiBpZ25vcmUgUHJvYmVSZXNwIHRvIGZvcmVpZ24gYWRkcmVzcyAqLwogCi0jaWYgMAotCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggJXMgZnJvbSAlcyB0byAlc1xuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBiZWFjb24gPyAiQmVhY29uIiA6ICJQcm9iZSBSZXNwb25zZSIsCi0JICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwgcHJpbnRfbWFjKG1hYzIsIG1nbXQtPmRhKSk7Ci0jZW5kaWYKLQotCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKLQlpZiAoYmFzZWxlbiA+IGxlbikKLQkJcmV0dXJuOwotCiAJYmVhY29uX3RpbWVzdGFtcCA9IGxlNjRfdG9fY3B1KG1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCk7Ci0JaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJmVsZW1zKTsKIAotCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpICYmIGVsZW1zLm1lc2hfaWQgJiYKLQkgICAgZWxlbXMubWVzaF9jb25maWcgJiYgbWVzaF9tYXRjaGVzX2xvY2FsKCZlbGVtcywgZGV2KSkgewotCQl1NjQgcmF0ZXMgPSBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhsb2NhbCwgJmVsZW1zLAorCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpICYmIGVsZW1zLT5tZXNoX2lkICYmCisJICAgIGVsZW1zLT5tZXNoX2NvbmZpZyAmJiBtZXNoX21hdGNoZXNfbG9jYWwoZWxlbXMsIGRldikpIHsKKwkJdTY0IHJhdGVzID0gaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMobG9jYWwsIGVsZW1zLAogCQkJCQkJcnhfc3RhdHVzLT5iYW5kKTsKIAogCQltZXNoX25laWdoYm91cl91cGRhdGUobWdtdC0+c2EsIHJhdGVzLCBkZXYsCi0JCQkJICAgICAgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKCZlbGVtcywgZGV2KSk7CisJCQkJICAgICAgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKGVsZW1zLCBkZXYpKTsKIAl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgJiYgZWxlbXMuc3VwcF9yYXRlcyAmJgorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyAmJiBlbGVtcy0+c3VwcF9yYXRlcyAmJgogCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pID09IDAgJiYKIAkgICAgKHN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbWdtdC0+c2EpKSkgewogCQl1NjQgcHJldl9yYXRlczsKLQkJdTY0IHN1cHBfcmF0ZXMgPSBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhsb2NhbCwgJmVsZW1zLAorCQl1NjQgc3VwcF9yYXRlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKGxvY2FsLCBlbGVtcywKIAkJCQkJCQlyeF9zdGF0dXMtPmJhbmQpOwogCiAJCXByZXZfcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbcnhfc3RhdHVzLT5iYW5kXTsKQEAgLTI1ODUsMjEgKzI2MDMsMTIgQEAKIAkJCXN0YS0+c3VwcF9yYXRlc1tyeF9zdGF0dXMtPmJhbmRdID0KIAkJCQlzZGF0YS0+dS5zdGEuc3VwcF9yYXRlc19iaXRzW3J4X3N0YXR1cy0+YmFuZF07CiAJCX0KLQkJaWYgKHN0YS0+c3VwcF9yYXRlc1tyeF9zdGF0dXMtPmJhbmRdICE9IHByZXZfcmF0ZXMpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdXBkYXRlZCBzdXBwX3JhdGVzIHNldCBmb3IgIgotCQkJICAgICAgICIlcyBiYXNlZCBvbiBiZWFjb24gaW5mbyAoMHglbGx4ICYgMHglbGx4IC0+ICIKLQkJCSAgICAgICAiMHglbGx4KVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIHN0YS0+YWRkciksCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcHJldl9yYXRlcywKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdXBwX3JhdGVzLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YS0+c3VwcF9yYXRlc1tyeF9zdGF0dXMtPmJhbmRdKTsKLQkJfQogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JaWYgKGVsZW1zLmRzX3BhcmFtcyAmJiBlbGVtcy5kc19wYXJhbXNfbGVuID09IDEpCi0JCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZWxlbXMuZHNfcGFyYW1zWzBdKTsKKwlpZiAoZWxlbXMtPmRzX3BhcmFtcyAmJiBlbGVtcy0+ZHNfcGFyYW1zX2xlbiA9PSAxKQorCQlmcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGVsZW1zLT5kc19wYXJhbXNbMF0pOwogCWVsc2UKIAkJZnJlcSA9IHJ4X3N0YXR1cy0+ZnJlcTsKIApAQCAtMjYwOSwyMyArMjYxOCwyMyBAQAogCQlyZXR1cm47CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotCWlmIChlbGVtcy5tZXNoX2NvbmZpZykKLQkJYnNzID0gaWVlZTgwMjExX3J4X21lc2hfYnNzX2dldChkZXYsIGVsZW1zLm1lc2hfaWQsCi0JCQkJZWxlbXMubWVzaF9pZF9sZW4sIGVsZW1zLm1lc2hfY29uZmlnLCBmcmVxKTsKKwlpZiAoZWxlbXMtPm1lc2hfY29uZmlnKQorCQlic3MgPSBpZWVlODAyMTFfcnhfbWVzaF9ic3NfZ2V0KGRldiwgZWxlbXMtPm1lc2hfaWQsCisJCQkJZWxlbXMtPm1lc2hfaWRfbGVuLCBlbGVtcy0+bWVzaF9jb25maWcsIGZyZXEpOwogCWVsc2UKICNlbmRpZgogCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIG1nbXQtPmJzc2lkLCBmcmVxLAotCQkJCQkgICBlbGVtcy5zc2lkLCBlbGVtcy5zc2lkX2xlbik7CisJCQkJCSAgIGVsZW1zLT5zc2lkLCBlbGVtcy0+c3NpZF9sZW4pOwogCWlmICghYnNzKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLQkJaWYgKGVsZW1zLm1lc2hfY29uZmlnKQotCQkJYnNzID0gaWVlZTgwMjExX3J4X21lc2hfYnNzX2FkZChkZXYsIGVsZW1zLm1lc2hfaWQsCi0JCQkJZWxlbXMubWVzaF9pZF9sZW4sIGVsZW1zLm1lc2hfY29uZmlnLAotCQkJCWVsZW1zLm1lc2hfY29uZmlnX2xlbiwgZnJlcSk7CisJCWlmIChlbGVtcy0+bWVzaF9jb25maWcpCisJCQlic3MgPSBpZWVlODAyMTFfcnhfbWVzaF9ic3NfYWRkKGRldiwgZWxlbXMtPm1lc2hfaWQsCisJCQkJZWxlbXMtPm1lc2hfaWRfbGVuLCBlbGVtcy0+bWVzaF9jb25maWcsCisJCQkJZWxlbXMtPm1lc2hfY29uZmlnX2xlbiwgZnJlcSk7CiAJCWVsc2UKICNlbmRpZgogCQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19hZGQoZGV2LCBtZ210LT5ic3NpZCwgZnJlcSwKLQkJCQkJCSAgIGVsZW1zLnNzaWQsIGVsZW1zLnNzaWRfbGVuKTsKKwkJCQkJCSAgZWxlbXMtPnNzaWQsIGVsZW1zLT5zc2lkX2xlbik7CiAJCWlmICghYnNzKQogCQkJcmV0dXJuOwogCX0gZWxzZSB7CkBAIC0yNjM4LDQ2ICsyNjQ3LDY2IEBACiAJfQogCiAJLyogc2F2ZSB0aGUgRVJQIHZhbHVlIHNvIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGF0IGFzc29jaWF0aW9uIHRpbWUgKi8KLQlpZiAoZWxlbXMuZXJwX2luZm8gJiYgZWxlbXMuZXJwX2luZm9fbGVuID49IDEpIHsKLQkJYnNzLT5lcnBfdmFsdWUgPSBlbGVtcy5lcnBfaW5mb1swXTsKKwlpZiAoZWxlbXMtPmVycF9pbmZvICYmIGVsZW1zLT5lcnBfaW5mb19sZW4gPj0gMSkgeworCQlic3MtPmVycF92YWx1ZSA9IGVsZW1zLT5lcnBfaW5mb1swXTsKIAkJYnNzLT5oYXNfZXJwX3ZhbHVlID0gMTsKIAl9CiAKLQlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYKLQkgICAgICghYnNzLT5odF9pZSB8fCBic3MtPmh0X2llX2xlbiAhPSBlbGVtcy5odF9jYXBfZWxlbV9sZW4gfHwKLQkgICAgIG1lbWNtcChic3MtPmh0X2llLCBlbGVtcy5odF9jYXBfZWxlbSwgZWxlbXMuaHRfY2FwX2VsZW1fbGVuKSkpIHsKKwlpZiAoZWxlbXMtPmh0X2NhcF9lbGVtICYmCisJICAgICAoIWJzcy0+aHRfaWUgfHwgYnNzLT5odF9pZV9sZW4gIT0gZWxlbXMtPmh0X2NhcF9lbGVtX2xlbiB8fAorCSAgICAgbWVtY21wKGJzcy0+aHRfaWUsIGVsZW1zLT5odF9jYXBfZWxlbSwgZWxlbXMtPmh0X2NhcF9lbGVtX2xlbikpKSB7CiAJCWtmcmVlKGJzcy0+aHRfaWUpOwotCQlic3MtPmh0X2llID0ga21hbGxvYyhlbGVtcy5odF9jYXBfZWxlbV9sZW4gKyAyLCBHRlBfQVRPTUlDKTsKKwkJYnNzLT5odF9pZSA9IGttYWxsb2MoZWxlbXMtPmh0X2NhcF9lbGVtX2xlbiArIDIsIEdGUF9BVE9NSUMpOwogCQlpZiAoYnNzLT5odF9pZSkgewotCQkJbWVtY3B5KGJzcy0+aHRfaWUsIGVsZW1zLmh0X2NhcF9lbGVtIC0gMiwKLQkJCQllbGVtcy5odF9jYXBfZWxlbV9sZW4gKyAyKTsKLQkJCWJzcy0+aHRfaWVfbGVuID0gZWxlbXMuaHRfY2FwX2VsZW1fbGVuICsgMjsKKwkJCW1lbWNweShic3MtPmh0X2llLCBlbGVtcy0+aHRfY2FwX2VsZW0gLSAyLAorCQkJCWVsZW1zLT5odF9jYXBfZWxlbV9sZW4gKyAyKTsKKwkJCWJzcy0+aHRfaWVfbGVuID0gZWxlbXMtPmh0X2NhcF9lbGVtX2xlbiArIDI7CiAJCX0gZWxzZQogCQkJYnNzLT5odF9pZV9sZW4gPSAwOwotCX0gZWxzZSBpZiAoIWVsZW1zLmh0X2NhcF9lbGVtICYmIGJzcy0+aHRfaWUpIHsKKwl9IGVsc2UgaWYgKCFlbGVtcy0+aHRfY2FwX2VsZW0gJiYgYnNzLT5odF9pZSkgewogCQlrZnJlZShic3MtPmh0X2llKTsKIAkJYnNzLT5odF9pZSA9IE5VTEw7CiAJCWJzcy0+aHRfaWVfbGVuID0gMDsKIAl9CiAKKwlpZiAoZWxlbXMtPmh0X2luZm9fZWxlbSAmJgorCSAgICAgKCFic3MtPmh0X2FkZF9pZSB8fAorCSAgICAgYnNzLT5odF9hZGRfaWVfbGVuICE9IGVsZW1zLT5odF9pbmZvX2VsZW1fbGVuIHx8CisJICAgICBtZW1jbXAoYnNzLT5odF9hZGRfaWUsIGVsZW1zLT5odF9pbmZvX2VsZW0sCisJCQllbGVtcy0+aHRfaW5mb19lbGVtX2xlbikpKSB7CisJCWtmcmVlKGJzcy0+aHRfYWRkX2llKTsKKwkJYnNzLT5odF9hZGRfaWUgPQorCQkJa21hbGxvYyhlbGVtcy0+aHRfaW5mb19lbGVtX2xlbiArIDIsIEdGUF9BVE9NSUMpOworCQlpZiAoYnNzLT5odF9hZGRfaWUpIHsKKwkJCW1lbWNweShic3MtPmh0X2FkZF9pZSwgZWxlbXMtPmh0X2luZm9fZWxlbSAtIDIsCisJCQkJZWxlbXMtPmh0X2luZm9fZWxlbV9sZW4gKyAyKTsKKwkJCWJzcy0+aHRfYWRkX2llX2xlbiA9IGVsZW1zLT5odF9pbmZvX2VsZW1fbGVuICsgMjsKKwkJfSBlbHNlCisJCQlic3MtPmh0X2FkZF9pZV9sZW4gPSAwOworCX0gZWxzZSBpZiAoIWVsZW1zLT5odF9pbmZvX2VsZW0gJiYgYnNzLT5odF9hZGRfaWUpIHsKKwkJa2ZyZWUoYnNzLT5odF9hZGRfaWUpOworCQlic3MtPmh0X2FkZF9pZSA9IE5VTEw7CisJCWJzcy0+aHRfYWRkX2llX2xlbiA9IDA7CisJfQorCiAJYnNzLT5iZWFjb25faW50ID0gbGUxNl90b19jcHUobWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCk7CiAJYnNzLT5jYXBhYmlsaXR5ID0gbGUxNl90b19jcHUobWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbyk7CiAKIAlic3MtPnN1cHBfcmF0ZXNfbGVuID0gMDsKLQlpZiAoZWxlbXMuc3VwcF9yYXRlcykgeworCWlmIChlbGVtcy0+c3VwcF9yYXRlcykgewogCQljbGVuID0gSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTIC0gYnNzLT5zdXBwX3JhdGVzX2xlbjsKLQkJaWYgKGNsZW4gPiBlbGVtcy5zdXBwX3JhdGVzX2xlbikKLQkJCWNsZW4gPSBlbGVtcy5zdXBwX3JhdGVzX2xlbjsKLQkJbWVtY3B5KCZic3MtPnN1cHBfcmF0ZXNbYnNzLT5zdXBwX3JhdGVzX2xlbl0sIGVsZW1zLnN1cHBfcmF0ZXMsCisJCWlmIChjbGVuID4gZWxlbXMtPnN1cHBfcmF0ZXNfbGVuKQorCQkJY2xlbiA9IGVsZW1zLT5zdXBwX3JhdGVzX2xlbjsKKwkJbWVtY3B5KCZic3MtPnN1cHBfcmF0ZXNbYnNzLT5zdXBwX3JhdGVzX2xlbl0sIGVsZW1zLT5zdXBwX3JhdGVzLAogCQkgICAgICAgY2xlbik7CiAJCWJzcy0+c3VwcF9yYXRlc19sZW4gKz0gY2xlbjsKIAl9Ci0JaWYgKGVsZW1zLmV4dF9zdXBwX3JhdGVzKSB7CisJaWYgKGVsZW1zLT5leHRfc3VwcF9yYXRlcykgewogCQljbGVuID0gSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTIC0gYnNzLT5zdXBwX3JhdGVzX2xlbjsKLQkJaWYgKGNsZW4gPiBlbGVtcy5leHRfc3VwcF9yYXRlc19sZW4pCi0JCQljbGVuID0gZWxlbXMuZXh0X3N1cHBfcmF0ZXNfbGVuOworCQlpZiAoY2xlbiA+IGVsZW1zLT5leHRfc3VwcF9yYXRlc19sZW4pCisJCQljbGVuID0gZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbjsKIAkJbWVtY3B5KCZic3MtPnN1cHBfcmF0ZXNbYnNzLT5zdXBwX3JhdGVzX2xlbl0sCi0JCSAgICAgICBlbGVtcy5leHRfc3VwcF9yYXRlcywgY2xlbik7CisJCSAgICAgICBlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMsIGNsZW4pOwogCQlic3MtPnN1cHBfcmF0ZXNfbGVuICs9IGNsZW47CiAJfQogCkBAIC0yNjg1LDkgKzI3MTQsOSBAQAogCiAJYnNzLT50aW1lc3RhbXAgPSBiZWFjb25fdGltZXN0YW1wOwogCWJzcy0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOwotCWJzcy0+cnNzaSA9IHJ4X3N0YXR1cy0+c3NpOwogCWJzcy0+c2lnbmFsID0gcnhfc3RhdHVzLT5zaWduYWw7CiAJYnNzLT5ub2lzZSA9IHJ4X3N0YXR1cy0+bm9pc2U7CisJYnNzLT5xdWFsID0gcnhfc3RhdHVzLT5xdWFsOwogCWlmICghYmVhY29uICYmICFic3MtPnByb2JlX3Jlc3ApCiAJCWJzcy0+cHJvYmVfcmVzcCA9IHRydWU7CiAKQEAgLTI2OTcsMzcgKzI3MjYsMzcgQEAKIAkgKi8KIAlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgJiYKIAkgICAgYnNzLT5wcm9iZV9yZXNwICYmIGJlYWNvbikgewotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIGJzcyk7CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGVsZW1zLndwYSAmJgotCSAgICAoIWJzcy0+d3BhX2llIHx8IGJzcy0+d3BhX2llX2xlbiAhPSBlbGVtcy53cGFfbGVuIHx8Ci0JICAgICBtZW1jbXAoYnNzLT53cGFfaWUsIGVsZW1zLndwYSwgZWxlbXMud3BhX2xlbikpKSB7CisJaWYgKGVsZW1zLT53cGEgJiYKKwkgICAgKCFic3MtPndwYV9pZSB8fCBic3MtPndwYV9pZV9sZW4gIT0gZWxlbXMtPndwYV9sZW4gfHwKKwkgICAgIG1lbWNtcChic3MtPndwYV9pZSwgZWxlbXMtPndwYSwgZWxlbXMtPndwYV9sZW4pKSkgewogCQlrZnJlZShic3MtPndwYV9pZSk7Ci0JCWJzcy0+d3BhX2llID0ga21hbGxvYyhlbGVtcy53cGFfbGVuICsgMiwgR0ZQX0FUT01JQyk7CisJCWJzcy0+d3BhX2llID0ga21hbGxvYyhlbGVtcy0+d3BhX2xlbiArIDIsIEdGUF9BVE9NSUMpOwogCQlpZiAoYnNzLT53cGFfaWUpIHsKLQkJCW1lbWNweShic3MtPndwYV9pZSwgZWxlbXMud3BhIC0gMiwgZWxlbXMud3BhX2xlbiArIDIpOwotCQkJYnNzLT53cGFfaWVfbGVuID0gZWxlbXMud3BhX2xlbiArIDI7CisJCQltZW1jcHkoYnNzLT53cGFfaWUsIGVsZW1zLT53cGEgLSAyLCBlbGVtcy0+d3BhX2xlbiArIDIpOworCQkJYnNzLT53cGFfaWVfbGVuID0gZWxlbXMtPndwYV9sZW4gKyAyOwogCQl9IGVsc2UKIAkJCWJzcy0+d3BhX2llX2xlbiA9IDA7Ci0JfSBlbHNlIGlmICghZWxlbXMud3BhICYmIGJzcy0+d3BhX2llKSB7CisJfSBlbHNlIGlmICghZWxlbXMtPndwYSAmJiBic3MtPndwYV9pZSkgewogCQlrZnJlZShic3MtPndwYV9pZSk7CiAJCWJzcy0+d3BhX2llID0gTlVMTDsKIAkJYnNzLT53cGFfaWVfbGVuID0gMDsKIAl9CiAKLQlpZiAoZWxlbXMucnNuICYmCi0JICAgICghYnNzLT5yc25faWUgfHwgYnNzLT5yc25faWVfbGVuICE9IGVsZW1zLnJzbl9sZW4gfHwKLQkgICAgIG1lbWNtcChic3MtPnJzbl9pZSwgZWxlbXMucnNuLCBlbGVtcy5yc25fbGVuKSkpIHsKKwlpZiAoZWxlbXMtPnJzbiAmJgorCSAgICAoIWJzcy0+cnNuX2llIHx8IGJzcy0+cnNuX2llX2xlbiAhPSBlbGVtcy0+cnNuX2xlbiB8fAorCSAgICAgbWVtY21wKGJzcy0+cnNuX2llLCBlbGVtcy0+cnNuLCBlbGVtcy0+cnNuX2xlbikpKSB7CiAJCWtmcmVlKGJzcy0+cnNuX2llKTsKLQkJYnNzLT5yc25faWUgPSBrbWFsbG9jKGVsZW1zLnJzbl9sZW4gKyAyLCBHRlBfQVRPTUlDKTsKKwkJYnNzLT5yc25faWUgPSBrbWFsbG9jKGVsZW1zLT5yc25fbGVuICsgMiwgR0ZQX0FUT01JQyk7CiAJCWlmIChic3MtPnJzbl9pZSkgewotCQkJbWVtY3B5KGJzcy0+cnNuX2llLCBlbGVtcy5yc24gLSAyLCBlbGVtcy5yc25fbGVuICsgMik7Ci0JCQlic3MtPnJzbl9pZV9sZW4gPSBlbGVtcy5yc25fbGVuICsgMjsKKwkJCW1lbWNweShic3MtPnJzbl9pZSwgZWxlbXMtPnJzbiAtIDIsIGVsZW1zLT5yc25fbGVuICsgMik7CisJCQlic3MtPnJzbl9pZV9sZW4gPSBlbGVtcy0+cnNuX2xlbiArIDI7CiAJCX0gZWxzZQogCQkJYnNzLT5yc25faWVfbGVuID0gMDsKLQl9IGVsc2UgaWYgKCFlbGVtcy5yc24gJiYgYnNzLT5yc25faWUpIHsKKwl9IGVsc2UgaWYgKCFlbGVtcy0+cnNuICYmIGJzcy0+cnNuX2llKSB7CiAJCWtmcmVlKGJzcy0+cnNuX2llKTsKIAkJYnNzLT5yc25faWUgPSBOVUxMOwogCQlic3MtPnJzbl9pZV9sZW4gPSAwOwpAQCAtMjc0NywyMCArMjc3NiwyMSBAQAogCSAqIGluY2x1c2lvbiBvZiB0aGUgV01NIFBhcmFtZXRlcnMgaW4gYmVhY29ucywgaG93ZXZlciwgaXMgb3B0aW9uYWwuCiAJICovCiAKLQlpZiAoZWxlbXMud21tX3BhcmFtICYmCi0JICAgICghYnNzLT53bW1faWUgfHwgYnNzLT53bW1faWVfbGVuICE9IGVsZW1zLndtbV9wYXJhbV9sZW4gfHwKLQkgICAgIG1lbWNtcChic3MtPndtbV9pZSwgZWxlbXMud21tX3BhcmFtLCBlbGVtcy53bW1fcGFyYW1fbGVuKSkpIHsKKwlpZiAoZWxlbXMtPndtbV9wYXJhbSAmJgorCSAgICAoIWJzcy0+d21tX2llIHx8IGJzcy0+d21tX2llX2xlbiAhPSBlbGVtcy0+d21tX3BhcmFtX2xlbiB8fAorCSAgICAgbWVtY21wKGJzcy0+d21tX2llLCBlbGVtcy0+d21tX3BhcmFtLCBlbGVtcy0+d21tX3BhcmFtX2xlbikpKSB7CiAJCWtmcmVlKGJzcy0+d21tX2llKTsKLQkJYnNzLT53bW1faWUgPSBrbWFsbG9jKGVsZW1zLndtbV9wYXJhbV9sZW4gKyAyLCBHRlBfQVRPTUlDKTsKKwkJYnNzLT53bW1faWUgPSBrbWFsbG9jKGVsZW1zLT53bW1fcGFyYW1fbGVuICsgMiwgR0ZQX0FUT01JQyk7CiAJCWlmIChic3MtPndtbV9pZSkgewotCQkJbWVtY3B5KGJzcy0+d21tX2llLCBlbGVtcy53bW1fcGFyYW0gLSAyLAotCQkJICAgICAgIGVsZW1zLndtbV9wYXJhbV9sZW4gKyAyKTsKLQkJCWJzcy0+d21tX2llX2xlbiA9IGVsZW1zLndtbV9wYXJhbV9sZW4gKyAyOworCQkJbWVtY3B5KGJzcy0+d21tX2llLCBlbGVtcy0+d21tX3BhcmFtIC0gMiwKKwkJCSAgICAgICBlbGVtcy0+d21tX3BhcmFtX2xlbiArIDIpOworCQkJYnNzLT53bW1faWVfbGVuID0gZWxlbXMtPndtbV9wYXJhbV9sZW4gKyAyOwogCQl9IGVsc2UKIAkJCWJzcy0+d21tX2llX2xlbiA9IDA7Ci0JfSBlbHNlIGlmIChlbGVtcy53bW1faW5mbyAmJgotCQkgICAgKCFic3MtPndtbV9pZSB8fCBic3MtPndtbV9pZV9sZW4gIT0gZWxlbXMud21tX2luZm9fbGVuIHx8Ci0JCSAgICAgbWVtY21wKGJzcy0+d21tX2llLCBlbGVtcy53bW1faW5mbywgZWxlbXMud21tX2luZm9fbGVuKSkpIHsKKwl9IGVsc2UgaWYgKGVsZW1zLT53bW1faW5mbyAmJgorCQkgICAgKCFic3MtPndtbV9pZSB8fCBic3MtPndtbV9pZV9sZW4gIT0gZWxlbXMtPndtbV9pbmZvX2xlbiB8fAorCQkgICAgIG1lbWNtcChic3MtPndtbV9pZSwgZWxlbXMtPndtbV9pbmZvLAorCQkJCQkJZWxlbXMtPndtbV9pbmZvX2xlbikpKSB7CiAJCSAvKiBBcyBmb3IgY2VydGFpbiBBUCdzIEZpZnRoIGJpdCBpcyBub3Qgc2V0IGluIFdNTSBJRSBpbgogCQkgICogYmVhY29uIGZyYW1lcy5TbyB3aGlsZSBwYXJzaW5nIHRoZSBiZWFjb24gZnJhbWUgdGhlCiAJCSAgKiB3bW1faW5mbyBzdHJ1Y3R1cmUgaXMgdXNlZCBpbnN0ZWFkIG9mIHdtbV9wYXJhbS4KQEAgLTI3NzAsMTQgKzI4MDAsMTQgQEAKIAkJICAqIG4tYmFuZCBhc3NvY2lhdGlvbi4KIAkJICAqLwogCQlrZnJlZShic3MtPndtbV9pZSk7Ci0JCWJzcy0+d21tX2llID0ga21hbGxvYyhlbGVtcy53bW1faW5mb19sZW4gKyAyLCBHRlBfQVRPTUlDKTsKKwkJYnNzLT53bW1faWUgPSBrbWFsbG9jKGVsZW1zLT53bW1faW5mb19sZW4gKyAyLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGJzcy0+d21tX2llKSB7Ci0JCQltZW1jcHkoYnNzLT53bW1faWUsIGVsZW1zLndtbV9pbmZvIC0gMiwKLQkJCSAgICAgICBlbGVtcy53bW1faW5mb19sZW4gKyAyKTsKLQkJCWJzcy0+d21tX2llX2xlbiA9IGVsZW1zLndtbV9pbmZvX2xlbiArIDI7CisJCQltZW1jcHkoYnNzLT53bW1faWUsIGVsZW1zLT53bW1faW5mbyAtIDIsCisJCQkgICAgICAgZWxlbXMtPndtbV9pbmZvX2xlbiArIDIpOworCQkJYnNzLT53bW1faWVfbGVuID0gZWxlbXMtPndtbV9pbmZvX2xlbiArIDI7CiAJCX0gZWxzZQogCQkJYnNzLT53bW1faWVfbGVuID0gMDsKLQl9IGVsc2UgaWYgKCFlbGVtcy53bW1fcGFyYW0gJiYgIWVsZW1zLndtbV9pbmZvICYmIGJzcy0+d21tX2llKSB7CisJfSBlbHNlIGlmICghZWxlbXMtPndtbV9wYXJhbSAmJiAhZWxlbXMtPndtbV9pbmZvICYmIGJzcy0+d21tX2llKSB7CiAJCWtmcmVlKGJzcy0+d21tX2llKTsKIAkJYnNzLT53bW1faWUgPSBOVUxMOwogCQlic3MtPndtbV9pZV9sZW4gPSAwOwpAQCAtMjc4OCw4ICsyODE4LDkgQEAKIAkgICAgIWxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgJiYgIWxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcgJiYKIAkgICAgYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MgJiYKIAkgICAgYnNzLT5mcmVxID09IGxvY2FsLT5vcGVyX2NoYW5uZWwtPmNlbnRlcl9mcmVxICYmCi0JICAgIGVsZW1zLnNzaWRfbGVuID09IHNkYXRhLT51LnN0YS5zc2lkX2xlbiAmJgotCSAgICBtZW1jbXAoZWxlbXMuc3NpZCwgc2RhdGEtPnUuc3RhLnNzaWQsIHNkYXRhLT51LnN0YS5zc2lkX2xlbikgPT0gMCkgeworCSAgICBlbGVtcy0+c3NpZF9sZW4gPT0gc2RhdGEtPnUuc3RhLnNzaWRfbGVuICYmCisJICAgIG1lbWNtcChlbGVtcy0+c3NpZCwgc2RhdGEtPnUuc3RhLnNzaWQsCisJCQkJc2RhdGEtPnUuc3RhLnNzaWRfbGVuKSA9PSAwKSB7CiAJCWlmIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1RTRlQpIHsKIAkJCS8qIGluIG9yZGVyIGZvciBjb3JyZWN0IElCU1MgbWVyZ2luZyB3ZSBuZWVkIG1hY3RpbWUKIAkJCSAqCkBAIC0yODI3LDE4ICsyODU4LDE4IEBACiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KIAkJaWYgKGJlYWNvbl90aW1lc3RhbXAgPiByeF90aW1lc3RhbXApIHsKICNpZm5kZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJlYWNvbiBUU0YgaGlnaGVyIHRoYW4gIgorCQkJICAgICAgICJsb2NhbCBUU0YgLSBJQlNTIG1lcmdlIHdpdGggQlNTSUQgJXNcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtZ210LT5ic3NpZCkpOwogI2VuZGlmCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiZWFjb24gVFNGIGhpZ2hlciB0aGFuICIKLQkJCQkgICAgICAgImxvY2FsIFRTRiAtIElCU1MgbWVyZ2Ugd2l0aCBCU1NJRCAlc1xuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtZ210LT5ic3NpZCkpOwogCQkJaWVlZTgwMjExX3N0YV9qb2luX2lic3MoZGV2LCAmc2RhdGEtPnUuc3RhLCBic3MpOwogCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShkZXYsIE5VTEwsCi0JCQkJCSAgICAgICBtZ210LT5ic3NpZCwgbWdtdC0+c2EpOworCQkJCQkgICAgICAgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLAorCQkJCQkgICAgICAgQklUKHJ4X3N0YXR1cy0+cmF0ZV9pZHgpKTsKIAkJfQogCX0KIAotCWllZWU4MDIxMV9yeF9ic3NfcHV0KGRldiwgYnNzKTsKKwlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIH0KIAogCkBAIC0yODQ3LDcgKzI4NzgsMTcgQEAKIAkJCQkJIHNpemVfdCBsZW4sCiAJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQogewotCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhkZXYsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAwKTsKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pCisJCXJldHVybjsKKworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMobWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlLCBsZW4gLSBiYXNlbGVuLAorCQkJCSZlbGVtcyk7CisKKwlpZWVlODAyMTFfcnhfYnNzX2luZm8oZGV2LCBtZ210LCBsZW4sIHJ4X3N0YXR1cywgJmVsZW1zLCAwKTsKIH0KIAogCkBAIC0yODY0LDcgKzI5MDUsMTQgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWwtPmh3LmNvbmY7CiAJdTMyIGNoYW5nZWQgPSAwOwogCi0JaWVlZTgwMjExX3J4X2Jzc19pbmZvKGRldiwgbWdtdCwgbGVuLCByeF9zdGF0dXMsIDEpOworCS8qIFByb2Nlc3MgYmVhY29uIGZyb20gdGhlIGN1cnJlbnQgQlNTICovCisJYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LmJlYWNvbi52YXJpYWJsZSAtICh1OCAqKSBtZ210OworCWlmIChiYXNlbGVuID4gbGVuKQorCQlyZXR1cm47CisKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlLCBsZW4gLSBiYXNlbGVuLCAmZWxlbXMpOworCisJaWVlZTgwMjExX3J4X2Jzc19pbmZvKGRldiwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywgMSk7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpCkBAIC0yODc1LDE3ICsyOTIzLDggQEAKIAkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKLQkvKiBQcm9jZXNzIGJlYWNvbiBmcm9tIHRoZSBjdXJyZW50IEJTUyAqLwotCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKLQlpZiAoYmFzZWxlbiA+IGxlbikKLQkJcmV0dXJuOwotCi0JaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJmVsZW1zKTsKLQotCWlmIChlbGVtcy53bW1fcGFyYW0gJiYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7Ci0JCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhkZXYsIGlmc3RhLCBlbGVtcy53bW1fcGFyYW0sCi0JCQkJCSBlbGVtcy53bW1fcGFyYW1fbGVuKTsKLQl9CisJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGRldiwgaWZzdGEsIGVsZW1zLndtbV9wYXJhbSwKKwkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CiAKIAkvKiBEbyBub3Qgc2VuZCBjaGFuZ2VzIHRvIGRyaXZlciBpZiB3ZSBhcmUgc2Nhbm5pbmcuIFRoaXMgcmVtb3ZlcwogCSAqIHJlcXVpcmVtZW50IHRoYXQgZHJpdmVyJ3MgYnNzX2luZm9fY2hhbmdlZCBmdW5jdGlvbiBuZWVkcyB0byBiZQpAQCAtMjk2MiwxMSArMzAwMSwxMSBAQAogCXBvcyA9IG1nbXQtPnUucHJvYmVfcmVxLnZhcmlhYmxlOwogCWlmIChwb3NbMF0gIT0gV0xBTl9FSURfU1NJRCB8fAogCSAgICBwb3MgKyAyICsgcG9zWzFdID4gZW5kKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBTU0lEIElFIGluIFByb2JlUmVxICIKLQkJCSAgICAgICAiZnJvbSAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSk7Ci0JCX0KKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgU1NJRCBJRSBpbiBQcm9iZVJlcSAiCisJCSAgICAgICAiZnJvbSAlc1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpKTsKKyNlbmRpZgogCQlyZXR1cm47CiAJfQogCWlmIChwb3NbMV0gIT0gMCAmJgpAQCAtMjk5NywxMSArMzAzNiwyNCBAQAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAogCWlmIChsZW4gPCBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFKQogCQlyZXR1cm47CiAKIAlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5KSB7CisJY2FzZSBXTEFOX0NBVEVHT1JZX1NQRUNUUlVNX01HTVQ6CisJCWlmIChsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kICE9IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQlicmVhazsKKwkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LmNoYW5fc3dpdGNoLmFjdGlvbl9jb2RlKSB7CisJCWNhc2UgV0xBTl9BQ1RJT05fU1BDVF9NU1JfUkVROgorCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKKwkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudCkpKQorCQkJCWJyZWFrOworCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX21lYXN1cmVtZW50X3JlcShkZXYsIG1nbXQsIGxlbik7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAljYXNlIFdMQU5fQ0FURUdPUllfQkFDSzoKIAkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSkgewogCQljYXNlIFdMQU5fQUNUSU9OX0FEREJBX1JFUToKQEAgLTMwMjIsMTEgKzMwNzQsNiBAQAogCQkJCWJyZWFrOwogCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2RlbGJhKGRldiwgbWdtdCwgbGVuKTsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCSAgIHByaW50ayhLRVJOX0RFQlVHICIlczogUnggdW5rbm93biBBLU1QRFUgYWN0aW9uXG4iLAotCQkJCQlkZXYtPm5hbWUpOwotCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQTElOS19DQVRFR09SWToKQEAgLTMwMzcsMTEgKzMwODQsNiBAQAogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJCW1lc2hfcnhfcGF0aF9zZWxfZnJhbWUoZGV2LCBtZ210LCBsZW4pOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSeCB1bmtub3duIGFjdGlvbiBmcmFtZSAtICIKLQkJCSJjYXRlZ29yeT0lZFxuIiwgZGV2LT5uYW1lLCBtZ210LT51LmFjdGlvbi5jYXRlZ29yeSk7Ci0JCWJyZWFrOwogCX0KIH0KIApAQCAtMzA3NywxMSArMzExOSw2IEBACiAJCXNrYl9xdWV1ZV90YWlsKCZpZnN0YS0+c2tiX3F1ZXVlLCBza2IpOwogCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CiAJCXJldHVybjsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIHVua25vd24gbWFuYWdlbWVudCBmcmFtZSAtICIKLQkJICAgICAgICJzdHlwZT0lZFxuIiwgZGV2LT5uYW1lLAotCQkgICAgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID4+IDQpOwotCQlicmVhazsKIAl9CiAKICBmYWlsOgpAQCAtMzE0NSwzMyArMzE4MiwzMiBAQAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1MTYgZmM7CisJX19sZTE2IGZjOwogCiAJaWYgKHNrYi0+bGVuIDwgMikKIAkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKKwlmYyA9IG1nbXQtPmZyYW1lX2NvbnRyb2w7CiAKLQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9DVEwpCisJaWYgKGllZWU4MDIxMV9pc19jdGwoZmMpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAotCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpIHsKLQkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCkgewotCQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChkZXYsIG1nbXQsCi0JCQkJCQkgICAgIHNrYi0+bGVuLCByeF9zdGF0dXMpOwotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIFJYX1FVRVVFRDsKLQkJfSBlbHNlIGlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikgewotCQkJaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKGRldiwgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCQkgcnhfc3RhdHVzKTsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiBSWF9RVUVVRUQ7Ci0JCX0KKwlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKSB7CisJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3AoZGV2LCBtZ210LCBza2ItPmxlbiwgcnhfc3RhdHVzKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gUlhfUVVFVUVEOwogCX0KKworCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkgeworCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oZGV2LCBtZ210LCBza2ItPmxlbiwgcnhfc3RhdHVzKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gUlhfUVVFVUVEOworCX0KKwogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIApAQCAtMzIxMSw4ICszMjQ3LDEwIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhLT5sYXN0X3J4ICsgZXhwX3RpbWUpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhwaXJpbmcgaW5hY3RpdmUgU1RBICVzXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7CisjZW5kaWYKIAkJCV9fc3RhX2luZm9fdW5saW5rKCZzdGEpOwogCQkJaWYgKHN0YSkKIAkJCQlsaXN0X2FkZCgmc3RhLT5saXN0LCAmdG1wX2xpc3QpOwpAQCAtMzI1MSw3ICszMjg5LDcgQEAKIAogCWZyZWVfcGxpbmtzID0gbWVzaF9wbGlua19hdmFpbGFibGVzKHNkYXRhKTsKIAlpZiAoZnJlZV9wbGlua3MgIT0gc2RhdGEtPnUuc3RhLmFjY2VwdGluZ19wbGlua3MpCi0JCWllZWU4MDIxMV9pZl9jb25maWdfYmVhY29uKGRldik7CisJCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTik7CiAKIAltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCiAJCQlJRUVFODAyMTFfTUVTSF9IT1VTRUtFRVBJTkdfSU5URVJWQUwpOwpAQCAtMzI5NSwxMyArMzMzMywxMCBAQAogCWlmIChsb2NhbC0+c3RhX3N3X3NjYW5uaW5nIHx8IGxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcpCiAJCXJldHVybjsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaWVlZTgwMjExX3N0YV93b3JrOiBub24tU1RBIGludGVyZmFjZSAiCi0JCSAgICAgICAiKHR5cGU9JWQpXG4iLCBkZXYtPm5hbWUsIHNkYXRhLT52aWYudHlwZSk7CisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1NUQSAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgJiYKKwkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UKSkKIAkJcmV0dXJuOwotCX0KIAlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpZnN0YS0+c2tiX3F1ZXVlKSkpCkBAIC0zMzU1LDggKzMzOTAsNyBAQAogCQlicmVhazsKICNlbmRpZgogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfc3RhX3dvcms6IFVua25vd24gc3RhdGUgJWRcbiIsCi0JCSAgICAgICBpZnN0YS0+c3RhdGUpOworCQlXQVJOX09OKDEpOwogCQlicmVhazsKIAl9CiAKQEAgLTMzOTEsOCArMzQyNSw2IEBACiAJCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9MRUFQOwogCWVsc2UKIAkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbml0aWFsIGF1dGhfYWxnPSVkXG4iLCBkZXYtPm5hbWUsCi0JICAgICAgIGlmc3RhLT5hdXRoX2FsZyk7CiAJaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPSAtMTsKIAlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKIAlpZnN0YS0+YXV0aF90cmllcyA9IGlmc3RhLT5hc3NvY190cmllcyA9IDA7CkBAIC0zNDgxLDkgKzM1MTMsOSBAQAogCQkgICAgIWllZWU4MDIxMV9zdGFfbWF0Y2hfc3NpZChpZnN0YSwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghc2VsZWN0ZWQgfHwgdG9wX3Jzc2kgPCBic3MtPnJzc2kpIHsKKwkJaWYgKCFzZWxlY3RlZCB8fCB0b3BfcnNzaSA8IGJzcy0+c2lnbmFsKSB7CiAJCQlzZWxlY3RlZCA9IGJzczsKLQkJCXRvcF9yc3NpID0gYnNzLT5yc3NpOworCQkJdG9wX3Jzc2kgPSBic3MtPnNpZ25hbDsKIAkJfQogCX0KIAlpZiAoc2VsZWN0ZWQpCkBAIC0zNDk3LDcgKzM1MjksNyBAQAogCQkJCQkgICAgICAgc2VsZWN0ZWQtPnNzaWRfbGVuKTsKIAkJaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoZGV2LCBzZWxlY3RlZC0+YnNzaWQpOwogCQlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKGRldiwgc2VsZWN0ZWQsIDApOwotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIHNlbGVjdGVkKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIHNlbGVjdGVkKTsKIAkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX0FVVEhFTlRJQ0FURTsKIAkJaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKGRldiwgaWZzdGEpOwogCQlyZXR1cm4gMDsKQEAgLTM1NTYsMTQgKzM1ODgsMTYgQEAKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYnNzLT5iYW5kXTsKIAogCWlmIChsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID09IDApCi0JCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSAxMDAwMDsKKwkJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDsKIAlic3MtPmJlYWNvbl9pbnQgPSBsb2NhbC0+aHcuY29uZi5iZWFjb25faW50OwogCWJzcy0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOwogCWJzcy0+Y2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOwotCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpIHsKKworCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCiAJCWJzcy0+Y2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKLQl9IGVsc2UKKwllbHNlCiAJCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gMDsKKwogCWJzcy0+c3VwcF9yYXRlc19sZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKIAlwb3MgPSBic3MtPnN1cHBfcmF0ZXM7CiAJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKQEAgLTM1NzIsNyArMzYwNiw3IEBACiAJfQogCiAJcmV0ID0gaWVlZTgwMjExX3N0YV9qb2luX2lic3MoZGV2LCBpZnN0YSwgYnNzKTsKLQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIGJzcyk7CisJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzYyOCw3ICszNjYyLDcgQEAKIAkJICAgICAgICIgYmFzZWQgb24gY29uZmlndXJlZCBTU0lEXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBic3NpZCkpOwogCQlyZXQgPSBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhkZXYsIGlmc3RhLCBic3MpOwotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIGJzcyk7CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwogCQlyZXR1cm4gcmV0OwogCX0KICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwpAQCAtMzY3OSwyOCArMzcxMyw0NSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJaW50IHJlczsKIAogCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAotCWlmIChpZnN0YS0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKQorCWlmIChpZnN0YS0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKSB7CisJCW1lbXNldChpZnN0YS0+c3NpZCwgMCwgc2l6ZW9mKGlmc3RhLT5zc2lkKSk7CisJCW1lbWNweShpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKTsKKwkJaWZzdGEtPnNzaWRfbGVuID0gbGVuOwogCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7Ci0JbWVtY3B5KGlmc3RhLT5zc2lkLCBzc2lkLCBsZW4pOwotCW1lbXNldChpZnN0YS0+c3NpZCArIGxlbiwgMCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTiAtIGxlbik7Ci0JaWZzdGEtPnNzaWRfbGVuID0gbGVuOworCisJCXJlcyA9IDA7CisJCS8qCisJCSAqIEhhY2shIE1MTUUgY29kZSBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIHRvIGhhdmUgZGlmZmVyZW50CisJCSAqIGVudHJ5IHBvaW50cyBmb3IgY29uZmlndXJhdGlvbiBhbmQgaW50ZXJuYWwgc2VsZWN0aW9uIGNoYW5nZQorCQkgKi8KKwkJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQlyZXMgPSBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19TU0lEKTsKKwkJaWYgKHJlcykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGYWlsZWQgdG8gY29uZmlnIG5ldyBTU0lEIHRvICIKKwkJCSAgICAgICAidGhlIGxvdy1sZXZlbCBkcml2ZXJcbiIsIGRldi0+bmFtZSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJfQogCiAJaWYgKGxlbikKIAkJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CiAJZWxzZQogCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CisKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgJiYKIAkgICAgIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCkpIHsKIAkJaWZzdGEtPmlic3Nfam9pbl9yZXEgPSBqaWZmaWVzOwogCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19TRUFSQ0g7CiAJCXJldHVybiBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhkZXYsIGlmc3RhKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzcyNiw3ICszNzc3LDEyIEBACiAKIAlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAhPSAwKSB7CiAJCW1lbWNweShpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoZGV2KTsKKwkJcmVzID0gMDsKKwkJLyoKKwkJICogSGFjayEgU2VlIGFsc28gaWVlZTgwMjExX3N0YV9zZXRfc3NpZC4KKwkJICovCisJCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpOwogCQlpZiAocmVzKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZhaWxlZCB0byBjb25maWcgbmV3IEJTU0lEIHRvICIKIAkJCSAgICAgICAidGhlIGxvdy1sZXZlbCBkcml2ZXJcbiIsIGRldi0+bmFtZSk7CkBAIC0zNzQ5LDcgKzM4MDUsNyBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOwotCXUxNiBmYzsKKwlfX2xlMTYgZmM7CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKIAlpZiAoIXNrYikgewpAQCAtMzc2MSwxMSArMzgxNywxMSBAQAogCiAJbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobnVsbGZ1bmMsIDAsIDI0KTsKLQlmYyA9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKLQkgICAgIElFRUU4MDIxMV9GQ1RMX1RPRFM7CisJZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8CisJCQkgSUVFRTgwMjExX0ZDVExfVE9EUyk7CiAJaWYgKHBvd2Vyc2F2ZSkKLQkJZmMgfD0gSUVFRTgwMjExX0ZDVExfUE07Ci0JbnVsbGZ1bmMtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CisJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGZjOwogCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwogCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CkBAIC0zODEzLDYgKzM4NjksNyBAQAogCiAKIAluZXRpZl90eF9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKKwluZXRpZl9hZGRyX2xvY2sobG9jYWwtPm1kZXYpOwogCWxvY2FsLT5maWx0ZXJfZmxhZ3MgJj0gfkZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDOwogCWxvY2FsLT5vcHMtPmNvbmZpZ3VyZV9maWx0ZXIobG9jYWxfdG9faHcobG9jYWwpLAogCQkJCSAgICAgRklGX0JDTl9QUkJSRVNQX1BST01JU0MsCkBAIC0zODIwLDE1ICszODc3LDExIEBACiAJCQkJICAgICBsb2NhbC0+bWRldi0+bWNfY291bnQsCiAJCQkJICAgICBsb2NhbC0+bWRldi0+bWNfbGlzdCk7CiAKKwluZXRpZl9hZGRyX3VubG9jayhsb2NhbC0+bWRldik7CiAJbmV0aWZfdHhfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0KLQkJLyogTm8gbmVlZCB0byB3YWtlIHRoZSBtYXN0ZXIgZGV2aWNlLiAqLwotCQlpZiAoc2RhdGEtPmRldiA9PSBsb2NhbC0+bWRldikKLQkJCWNvbnRpbnVlOwotCiAJCS8qIFRlbGwgQVAgd2UncmUgYmFjayAqLwogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSAmJgogCQkgICAgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQpAQCAtMzk5NCwxMiArNDA0Nyw2IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCi0JCS8qIERvbid0IHN0b3AgdGhlIG1hc3RlciBpbnRlcmZhY2UsIG90aGVyd2lzZSB3ZSBjYW4ndCB0cmFuc21pdAotCQkgKiBwcm9iZXMhICovCi0JCWlmIChzZGF0YS0+ZGV2ID09IGxvY2FsLT5tZGV2KQotCQkJY29udGludWU7Ci0KIAkJbmV0aWZfc3RvcF9xdWV1ZShzZGF0YS0+ZGV2KTsKIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgJiYKIAkJICAgIChzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQpAQCAtNDAxNywxNCArNDA2NCwxNCBAQAogCWxvY2FsLT5zY2FuX2JhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCWxvY2FsLT5zY2FuX2RldiA9IGRldjsKIAotCW5ldGlmX3R4X2xvY2tfYmgobG9jYWwtPm1kZXYpOworCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7CiAJbG9jYWwtPmZpbHRlcl9mbGFncyB8PSBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQzsKIAlsb2NhbC0+b3BzLT5jb25maWd1cmVfZmlsdGVyKGxvY2FsX3RvX2h3KGxvY2FsKSwKIAkJCQkgICAgIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDLAogCQkJCSAgICAgJmxvY2FsLT5maWx0ZXJfZmxhZ3MsCiAJCQkJICAgICBsb2NhbC0+bWRldi0+bWNfY291bnQsCiAJCQkJICAgICBsb2NhbC0+bWRldi0+bWNfbGlzdCk7Ci0JbmV0aWZfdHhfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKKwluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CiAKIAkvKiBUT0RPOiBzdGFydCBzY2FuIGFzIHNvb24gYXMgYWxsIG51bGxmdW5jIGZyYW1lcyBhcmUgQUNLZWQgKi8KIAlxdWV1ZV9kZWxheWVkX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmxvY2FsLT5zY2FuX3dvcmssCkBAIC00MDU5LDYgKzQxMDYsNyBAQAogCiBzdGF0aWMgY2hhciAqCiBpZWVlODAyMTFfc3RhX3NjYW5fcmVzdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzLAogCQkJICBjaGFyICpjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQogewpAQCAtNDA3Myw3ICs0MTIxLDcgQEAKIAlpd2UuY21kID0gU0lPQ0dJV0FQOwogCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKIAkJCQkJICBJV19FVl9BRERSX0xFTik7CiAKIAltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwpAQCAtNDA4MSwxMyArNDEyOSwxMyBAQAogCWlmIChic3NfbWVzaF9jZmcoYnNzKSkgewogCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzc19tZXNoX2lkX2xlbihic3MpOwogCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCQkgIGJzc19tZXNoX2lkKGJzcykpOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgYnNzX21lc2hfaWQoYnNzKSk7CiAJfSBlbHNlIHsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBic3MtPnNzaWRfbGVuOwogCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCQkgIGJzcy0+c3NpZCk7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBic3MtPnNzaWQpOwogCX0KIAogCWlmIChic3MtPmNhcGFiaWxpdHkgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKQpAQCAtNDEwMCwzMCArNDE0OCwzMCBAQAogCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwogCQllbHNlCiAJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCQkgIElXX0VWX1VJTlRfTEVOKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKIAl9CiAKIAltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwogCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKIAlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5mcmVxKTsKIAlpd2UudS5mcmVxLmUgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAogCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKIAogCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CiAJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwogCWl3ZS51LmZyZXEubSA9IGJzcy0+ZnJlcTsKIAlpd2UudS5mcmVxLmUgPSA2OwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAogCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKIAltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwogCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnF1YWwgPSBic3MtPnNpZ25hbDsKLQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5yc3NpOworCWl3ZS51LnF1YWwucXVhbCA9IGJzcy0+cXVhbDsKKwlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5zaWduYWw7CiAJaXdlLnUucXVhbC5ub2lzZSA9IGJzcy0+bm9pc2U7CiAJaXdlLnUucXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKIAkJCQkJICBJV19FVl9RVUFMX0xFTik7CiAKIAltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwpAQCAtNDEzMywyNyArNDE4MSwzNiBAQAogCWVsc2UKIAkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICIiKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCAiIik7CiAKIAlpZiAoYnNzICYmIGJzcy0+d3BhX2llKSB7CiAJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CiAJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT53cGFfaWVfbGVuOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCSAgYnNzLT53cGFfaWUpOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgYnNzLT53cGFfaWUpOwogCX0KIAogCWlmIChic3MgJiYgYnNzLT5yc25faWUpIHsKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IElXRVZHRU5JRTsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBic3MtPnJzbl9pZV9sZW47Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkJICBic3MtPnJzbl9pZSk7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBic3MtPnJzbl9pZSk7CisJfQorCisJaWYgKGJzcyAmJiBic3MtPmh0X2llKSB7CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT5odF9pZV9sZW47CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBic3MtPmh0X2llKTsKIAl9CiAKIAlpZiAoYnNzICYmIGJzcy0+c3VwcF9yYXRlc19sZW4gPiAwKSB7CiAJCS8qIGRpc3BsYXkgYWxsIHN1cHBvcnRlZCByYXRlcyBpbiByZWFkYWJsZSBmb3JtYXQgKi8KLQkJY2hhciAqcCA9IGN1cnJlbnRfZXYgKyBJV19FVl9MQ1BfTEVOOworCQljaGFyICpwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKIAkJaW50IGk7CiAKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKQEAgLTQxNjQsNyArNDIyMSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKIAkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGJzcy0+c3VwcF9yYXRlc1tpXSAmCiAJCQkJCQkJMHg3ZikgKiA1MDAwMDApOwotCQkJcCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGN1cnJlbnRfZXYsIHAsCisJCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwKIAkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKIAkJfQogCQljdXJyZW50X2V2ID0gcDsKQEAgLTQxNzgsOCArNDIzNSwxNiBAQAogCQkJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJCQlzcHJpbnRmKGJ1ZiwgInRzZj0lMDE2bGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykoYnNzLT50aW1lc3RhbXApKTsKIAkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKIAkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCQlzcHJpbnRmKGJ1ZiwgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGJzcy0+bGFzdF91cGRhdGUpKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsICZpd2UsIGJ1Zik7CiAJCQlrZnJlZShidWYpOwogCQl9CiAJfQpAQCAtNDE5MywzMSArNDI1OCwzNiBAQAogCQkJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJCQlzcHJpbnRmKGJ1ZiwgIk1lc2ggbmV0d29yayAodmVyc2lvbiAlZCkiLCBjZmdbMF0pOwogCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLAogCQkJCQkJCSAgJml3ZSwgYnVmKTsKIAkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gUHJvdG9jb2wgSUQ6ICIKIAkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzFdLCBjZmdbMl0sIGNmZ1szXSwKIAkJCQkJCQljZmdbNF0pOwogCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLAogCQkJCQkJCSAgJml3ZSwgYnVmKTsKIAkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gTWV0cmljIElEOiAiCiAJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s1XSwgY2ZnWzZdLCBjZmdbN10sCiAJCQkJCQkJY2ZnWzhdKTsKIAkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKIAkJCQkJCQkgICZpd2UsIGJ1Zik7CiAJCQlzcHJpbnRmKGJ1ZiwgIkNvbmdlc3Rpb24gQ29udHJvbCBNb2RlIElEOiAiCiAJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s5XSwgY2ZnWzEwXSwKIAkJCQkJCQljZmdbMTFdLCBjZmdbMTJdKTsKIAkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKIAkJCQkJCQkgICZpd2UsIGJ1Zik7CiAJCQlzcHJpbnRmKGJ1ZiwgIkNoYW5uZWwgUHJlY2VkZW5jZTogIgogCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMTNdLCBjZmdbMTRdLAogCQkJCQkJCWNmZ1sxNV0sIGNmZ1sxNl0pOwogCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLAogCQkJCQkJCSAgJml3ZSwgYnVmKTsKIAkJCWtmcmVlKGJ1Zik7CiAJCX0KQEAgLTQyMjcsNyArNDI5Nyw5IEBACiB9CiAKIAotaW50IGllZWU4MDIxMV9zdGFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK2ludCBpZWVlODAyMTFfc3RhX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJY2hhciAqY3VycmVudF9ldiA9IGJ1ZjsKQEAgLTQyNDAsOCArNDMxMiw4IEBACiAJCQlzcGluX3VubG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7CiAJCQlyZXR1cm4gLUUyQklHOwogCQl9Ci0JCWN1cnJlbnRfZXYgPSBpZWVlODAyMTFfc3RhX3NjYW5fcmVzdWx0KGRldiwgYnNzLCBjdXJyZW50X2V2LAotCQkJCQkJICAgICAgIGVuZF9idWYpOworCQljdXJyZW50X2V2ID0gaWVlZTgwMjExX3N0YV9zY2FuX3Jlc3VsdChkZXYsIGluZm8sIGJzcywKKwkJCQkJCSAgICAgICBjdXJyZW50X2V2LCBlbmRfYnVmKTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOwogCXJldHVybiBjdXJyZW50X2V2IC0gYnVmOwpAQCAtNDI1Miw2ICs0MzI0LDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwogCWtmcmVlKGlmc3RhLT5leHRyYV9pZSk7CiAJaWYgKGxlbiA9PSAwKSB7CiAJCWlmc3RhLT5leHRyYV9pZSA9IE5VTEw7CkBAIC00MjY5LDE0ICs0MzQyLDE1IEBACiB9CiAKIAotc3RydWN0IHN0YV9pbmZvICogaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmJzc2lkLAotCQkJCQkgdTggKmFkZHIpCitzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmJzc2lkLAorCQkJCQl1OCAqYWRkciwgdTY0IHN1cHBfcmF0ZXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJaW50IGJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOwogCiAJLyogVE9ETzogQ291bGQgY29uc2lkZXIgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgZW50cnkgYW5kCiAJICogYWxsb3cgbmV3IG9uZSB0byBiZSBhZGRlZC4gKi8KQEAgLTQyODgsMTcgKzQzNjIsMjQgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkaW5nIG5ldyBJQlNTIHN0YXRpb24gJXMgKGRldj0lcylcbiIsCiAJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgcHJpbnRfbWFjKG1hYywgYWRkciksIGRldi0+bmFtZSk7CisjZW5kaWYKIAogCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXN0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX0FVVEhPUklaRUQ7CisJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpOwogCi0Jc3RhLT5zdXBwX3JhdGVzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdID0KLQkJc2RhdGEtPnUuc3RhLnN1cHBfcmF0ZXNfYml0c1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKwlpZiAoc3VwcF9yYXRlcykKKwkJc3RhLT5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlczsKKwllbHNlCisJCXN0YS0+c3VwcF9yYXRlc1tiYW5kXSA9IHNkYXRhLT51LnN0YS5zdXBwX3JhdGVzX2JpdHNbYmFuZF07CiAKIAlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSwgbG9jYWwpOwogCkBAIC00MzE0LDcgKzQzOTUsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0ZShyZWFzb249JWQpXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGluZyBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgcmVhc29uKTsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBICYmCkBAIC00MzMyLDcgKzQ0MTMsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGUocmVhc29uPSVkKVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0aW5nIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCByZWFzb24pOwogCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpCkBAIC00MzU2LDEyICs0NDM3LDEwIEBACiAJY2FzZSBJRUVFODAyMTFfTk9USUZZX1JFX0FTU09DOgogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQorCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkgewotCQkJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEtPmRldiwKLQkJCQkJCSAgICAgICAmc2RhdGEtPnUuc3RhKTsKLQkJCX0KLQorCQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YS0+ZGV2LCAmc2RhdGEtPnUuc3RhKTsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5jIGIvbmV0L21hYzgwMjExL3JhdGUuYwppbmRleCA4NDFkZjkzLi4wMzg4YzA5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmF0ZS5jCisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKQEAgLTE3NiwyMCArMTc2LDI0IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CiAKLQltZW1zZXQoc2VsLCAwLCBzaXplb2Yoc3RydWN0IHJhdGVfc2VsZWN0aW9uKSk7CisJc2VsLT5yYXRlX2lkeCA9IC0xOworCXNlbC0+bm9uZXJwX2lkeCA9IC0xOworCXNlbC0+cHJvYmVfaWR4ID0gLTE7CiAKIAlyZWYtPm9wcy0+Z2V0X3JhdGUocmVmLT5wcml2LCBkZXYsIHNiYW5kLCBza2IsIHNlbCk7CiAKKwlCVUdfT04oc2VsLT5yYXRlX2lkeCA8IDApOworCiAJLyogU2VsZWN0IGEgbm9uLUVSUCBiYWNrdXAgcmF0ZS4gKi8KLQlpZiAoIXNlbC0+bm9uZXJwKSB7CisJaWYgKHNlbC0+bm9uZXJwX2lkeCA8IDApIHsKIAkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07Ci0JCQlpZiAoc2VsLT5yYXRlLT5iaXRyYXRlIDwgcmF0ZS0+Yml0cmF0ZSkKKwkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbc2VsLT5yYXRlX2lkeF0uYml0cmF0ZSA8IHJhdGUtPmJpdHJhdGUpCiAJCQkJYnJlYWs7CiAKIAkJCWlmIChyYXRlX3N1cHBvcnRlZChzdGEsIHNiYW5kLT5iYW5kLCBpKSAmJgogCQkJICAgICEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9FUlBfRykpCi0JCQkJc2VsLT5ub25lcnAgPSByYXRlOworCQkJCXNlbC0+bm9uZXJwX2lkeCA9IGk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmggYi9uZXQvbWFjODAyMTEvcmF0ZS5oCmluZGV4IDViNDVmMzMuLmVkZTdhYjUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmgKKysrIGIvbmV0L21hYzgwMjExL3JhdGUuaApAQCAtMTksMjIgKzE5LDIyIEBACiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKICNpbmNsdWRlICJzdGFfaW5mby5oIgogCi0vKiBUT0RPOiBrZG9jICovCisvKioKKyAqIHN0cnVjdCByYXRlX3NlbGVjdGlvbiAtIHJhdGUgc2VsZWN0aW9uIGZvciByYXRlIGNvbnRyb2wgYWxnb3MKKyAqIEByYXRlOiBzZWxlY3RlZCB0cmFuc21pc3Npb24gcmF0ZSBpbmRleAorICogQG5vbmVycDogTm9uLUVSUCByYXRlIHRvIHVzZSBpbnN0ZWFkIGlmIEVSUCBjYW5ub3QgYmUgdXNlZAorICogQHByb2JlOiByYXRlIGZvciBwcm9iaW5nIChvciAtMSkKKyAqCisgKi8KIHN0cnVjdCByYXRlX3NlbGVjdGlvbiB7Ci0JLyogU2VsZWN0ZWQgdHJhbnNtaXNzaW9uIHJhdGUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JLyogTm9uLUVSUCByYXRlIHRvIHVzZSBpZiBtYWM4MDIxMSBkZWNpZGVzIGl0IGNhbm5vdCB1c2UgYW4gRVJQIHJhdGUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKm5vbmVycDsKLQkvKiBwcm9iZSB3aXRoIHRoaXMgcmF0ZSwgb3IgTlVMTCBmb3Igbm8gcHJvYmluZyAqLwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcHJvYmU7CisJczggcmF0ZV9pZHgsIG5vbmVycF9pZHgsIHByb2JlX2lkeDsKIH07CiAKIHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAJY29uc3QgY2hhciAqbmFtZTsKIAl2b2lkICgqdHhfc3RhdHVzKSh2b2lkICpwcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqc3RhdHVzKTsKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJdm9pZCAoKmdldF9yYXRlKSh2b2lkICpwcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQsCiAJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTc2LDEzICs3NiwxMiBAQAogdm9pZCByYXRlX2NvbnRyb2xfcHV0KHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX3R4X3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnN0YXR1cykKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IGxvY2FsLT5yYXRlX2N0cmw7CiAKLQlyZWYtPm9wcy0+dHhfc3RhdHVzKHJlZi0+cHJpdiwgZGV2LCBza2IsIHN0YXR1cyk7CisJcmVmLT5vcHMtPnR4X3N0YXR1cyhyZWYtPnByaXYsIGRldiwgc2tiKTsKIH0KIAogCkBAIC0xMzgsNyArMTM3LDcgQEAKIAlyZXR1cm4gKHN0YSA9PSBOVUxMIHx8IHN0YS0+c3VwcF9yYXRlc1tiYW5kXSAmIEJJVChpbmRleCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGlubGluZSBzOAogcmF0ZV9sb3dlc3RfaW5kZXgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCSAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCiAJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEpCkBAIC0xNTUsMTQgKzE1NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9yYXRlICoKLXJhdGVfbG93ZXN0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0JcmV0dXJuICZzYmFuZC0+Yml0cmF0ZXNbcmF0ZV9sb3dlc3RfaW5kZXgobG9jYWwsIHNiYW5kLCBzdGEpXTsKLX0KLQogCiAvKiBmdW5jdGlvbnMgZm9yIHJhdGUgY29udHJvbCByZWxhdGVkIHRvIGEgZGV2aWNlICovCiBpbnQgaWVlZTgwMjExX2luaXRfcmF0ZV9jdHJsX2FsZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTE3MSw5ICsxNjIsNyBAQAogCiAKIC8qIFJhdGUgY29udHJvbCBhbGdvcml0aG1zICovCi0jaWYgZGVmaW5lZChSQzgwMjExX1BJRF9DT01QSUxFKSB8fCBcCi0JKGRlZmluZWQoQ09ORklHX01BQzgwMjExX1JDX1BJRCkgJiYgXAotCSAhZGVmaW5lZChDT05GSUdfTUFDODAyMTFfUkNfUElEX01PRFVMRSkpCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1JDX1BJRAogZXh0ZXJuIGludCByYzgwMjExX3BpZF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcmM4MDIxMV9waWRfZXhpdCh2b2lkKTsKICNlbHNlCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWQuaCBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZC5oCmluZGV4IDRlYTdiOTcuLjBhOTEzNWIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZC5oCisrKyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZC5oCkBAIC02MSw3ICs2MSw3IEBACiB1bmlvbiByY19waWRfZXZlbnRfZGF0YSB7CiAJLyogUkNfUElEX0VWRU5UX1RYX1NUQVRVUyAqLwogCXN0cnVjdCB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHR4X3N0YXR1czsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIHR4X3N0YXR1czsKIAl9OwogCS8qIFJDX1BJRF9FVkVOVF9UWVBFX1JBVEVfQ0hBTkdFICovCiAJLyogUkNfUElEX0VWRU5UX1RZUEVfVFhfUkFURSAqLwpAQCAtMTU2LDcgKzE1Niw3IEBACiB9OwogCiB2b2lkIHJhdGVfY29udHJvbF9waWRfZXZlbnRfdHhfc3RhdHVzKHN0cnVjdCByY19waWRfZXZlbnRfYnVmZmVyICpidWYsCi0JCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnN0YXQpOworCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqc3RhdCk7CiAKIHZvaWQgcmF0ZV9jb250cm9sX3BpZF9ldmVudF9yYXRlX2NoYW5nZShzdHJ1Y3QgcmNfcGlkX2V2ZW50X2J1ZmZlciAqYnVmLAogCQkJCQkgICAgICAgaW50IGluZGV4LCBpbnQgcmF0ZSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfYWxnby5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYwppbmRleCBiY2QyN2MxZC4uYTkxNGJhNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfYWxnby5jCkBAIC0yMzcsOCArMjM3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcmF0ZV9jb250cm9sX3BpZF90eF9zdGF0dXModm9pZCAqcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnN0YXR1cykKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwpAQCAtMjQ4LDYgKzI0Nyw3IEBACiAJc3RydWN0IHJjX3BpZF9zdGFfaW5mbyAqc3BpbmZvOwogCXVuc2lnbmVkIGxvbmcgcGVyaW9kOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIApAQCAtMjU5LDM1ICsyNTksMzUgQEAKIAogCS8qIERvbid0IHVwZGF0ZSB0aGUgc3RhdGUgaWYgd2UncmUgbm90IGNvbnRyb2xsaW5nIHRoZSByYXRlLiAqLwogCXNkYXRhID0gc3RhLT5zZGF0YTsKLQlpZiAoc2RhdGEtPmJzcyAmJiBzZGF0YS0+YnNzLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPiAtMSkgewotCQlzdGEtPnR4cmF0ZV9pZHggPSBzZGF0YS0+YnNzLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeDsKKwlpZiAoc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA+IC0xKSB7CisJCXN0YS0+dHhyYXRlX2lkeCA9IHNkYXRhLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeDsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJLyogSWdub3JlIGFsbCBmcmFtZXMgdGhhdCB3ZXJlIHNlbnQgd2l0aCBhIGRpZmZlcmVudCByYXRlIHRoYW4gdGhlIHJhdGUKIAkgKiB3ZSBjdXJyZW50bHkgYWR2aXNlIG1hYzgwMjExIHRvIHVzZS4gKi8KLQlpZiAoc3RhdHVzLT5jb250cm9sLnR4X3JhdGUgIT0gJnNiYW5kLT5iaXRyYXRlc1tzdGEtPnR4cmF0ZV9pZHhdKQorCWlmIChpbmZvLT50eF9yYXRlX2lkeCAhPSBzdGEtPnR4cmF0ZV9pZHgpCiAJCWdvdG8gdW5sb2NrOwogCiAJc3BpbmZvID0gc3RhLT5yYXRlX2N0cmxfcHJpdjsKIAlzcGluZm8tPnR4X251bV94bWl0Kys7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwotCXJhdGVfY29udHJvbF9waWRfZXZlbnRfdHhfc3RhdHVzKCZzcGluZm8tPmV2ZW50cywgc3RhdHVzKTsKKwlyYXRlX2NvbnRyb2xfcGlkX2V2ZW50X3R4X3N0YXR1cygmc3BpbmZvLT5ldmVudHMsIGluZm8pOwogI2VuZGlmCiAKIAkvKiBXZSBjb3VudCBmcmFtZXMgdGhhdCB0b3RhbGx5IGZhaWxlZCB0byBiZSB0cmFuc21pdHRlZCBhcyB0d28gYmFkCiAJICogZnJhbWVzLCB0aG9zZSB0aGF0IG1hZGUgaXQgb3V0IGJ1dCBoYWQgc29tZSByZXRyaWVzIGFzIG9uZSBnb29kIGFuZAogCSAqIG9uZSBiYWQgZnJhbWUuICovCi0JaWYgKHN0YXR1cy0+ZXhjZXNzaXZlX3JldHJpZXMpIHsKKwlpZiAoaW5mby0+c3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzKSB7CiAJCXNwaW5mby0+dHhfbnVtX2ZhaWxlZCArPSAyOwogCQlzcGluZm8tPnR4X251bV94bWl0Kys7Ci0JfSBlbHNlIGlmIChzdGF0dXMtPnJldHJ5X2NvdW50KSB7CisJfSBlbHNlIGlmIChpbmZvLT5zdGF0dXMucmV0cnlfY291bnQpIHsKIAkJc3BpbmZvLT50eF9udW1fZmFpbGVkKys7CiAJCXNwaW5mby0+dHhfbnVtX3htaXQrKzsKIAl9CiAKLQlpZiAoc3RhdHVzLT5leGNlc3NpdmVfcmV0cmllcykgeworCWlmIChpbmZvLT5zdGF0dXMuZXhjZXNzaXZlX3JldHJpZXMpIHsKIAkJc3RhLT50eF9yZXRyeV9mYWlsZWQrKzsKIAkJc3RhLT50eF9udW1fY29uc2VjdXRpdmVfZmFpbHVyZXMrKzsKIAkJc3RhLT50eF9udW1fbXBkdV9mYWlsKys7CkBAIC0yOTUsOCArMjk1LDggQEAKIAkJc3RhLT50eF9udW1fY29uc2VjdXRpdmVfZmFpbHVyZXMgPSAwOwogCQlzdGEtPnR4X251bV9tcGR1X29rKys7CiAJfQotCXN0YS0+dHhfcmV0cnlfY291bnQgKz0gc3RhdHVzLT5yZXRyeV9jb3VudDsKLQlzdGEtPnR4X251bV9tcGR1X2ZhaWwgKz0gc3RhdHVzLT5yZXRyeV9jb3VudDsKKwlzdGEtPnR4X3JldHJ5X2NvdW50ICs9IGluZm8tPnN0YXR1cy5yZXRyeV9jb3VudDsKKwlzdGEtPnR4X251bV9tcGR1X2ZhaWwgKz0gaW5mby0+c3RhdHVzLnJldHJ5X2NvdW50OwogCiAJLyogVXBkYXRlIFBJRCBjb250cm9sbGVyIHN0YXRlLiAqLwogCXBlcmlvZCA9IChIWiAqIHBpbmZvLT5zYW1wbGluZ19wZXJpb2QgKyA1MDApIC8gMTAwMDsKQEAgLTMzMCwxNSArMzMwLDE1IEBACiAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfHwKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwgIXN0YSkgewotCQlzZWwtPnJhdGUgPSByYXRlX2xvd2VzdChsb2NhbCwgc2JhbmQsIHN0YSk7CisJCXNlbC0+cmF0ZV9pZHggPSByYXRlX2xvd2VzdF9pbmRleChsb2NhbCwgc2JhbmQsIHN0YSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQogCiAJLyogSWYgYSBmb3JjZWQgcmF0ZSBpcyBpbiBlZmZlY3QsIHNlbGVjdCBpdC4gKi8KIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT5ic3MgJiYgc2RhdGEtPmJzcy0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpCi0JCXN0YS0+dHhyYXRlX2lkeCA9IHNkYXRhLT5ic3MtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeDsKKwlpZiAoc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA+IC0xKQorCQlzdGEtPnR4cmF0ZV9pZHggPSBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4OwogCiAJcmF0ZWlkeCA9IHN0YS0+dHhyYXRlX2lkeDsKIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCXNlbC0+cmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbcmF0ZWlkeF07CisJc2VsLT5yYXRlX2lkeCA9IHJhdGVpZHg7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogCXJhdGVfY29udHJvbF9waWRfZXZlbnRfdHhfcmF0ZSgKQEAgLTUzNSwxMSArNTM1LDYgQEAKICNlbmRpZgogfTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJQSUQgY29udHJvbGxlciBiYXNlZCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIik7Ci1NT0RVTEVfQVVUSE9SKCJTdGVmYW5vIEJyaXZpbyIpOwotTU9EVUxFX0FVVEhPUigiTWF0dGlhcyBOaXNzbGVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KIGludCBfX2luaXQgcmM4MDIxMV9waWRfaW5pdCh2b2lkKQogewogCXJldHVybiBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCZtYWM4MDIxMV9yY3BpZCk7CkBAIC01NDksOCArNTQ0LDMgQEAKIHsKIAlpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoJm1hYzgwMjExX3JjcGlkKTsKIH0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9SQ19QSURfTU9EVUxFCi1tb2R1bGVfaW5pdChyYzgwMjExX3BpZF9pbml0KTsKLW1vZHVsZV9leGl0KHJjODAyMTFfcGlkX2V4aXQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYwppbmRleCBmZjVjMzgwZi4uODEyMWQzYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jCkBAIC0zOSwxMSArMzksMTEgQEAKIH0KIAogdm9pZCByYXRlX2NvbnRyb2xfcGlkX2V2ZW50X3R4X3N0YXR1cyhzdHJ1Y3QgcmNfcGlkX2V2ZW50X2J1ZmZlciAqYnVmLAotCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzdGF0KQorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqc3RhdCkKIHsKIAl1bmlvbiByY19waWRfZXZlbnRfZGF0YSBldmQ7CiAKLQltZW1jcHkoJmV2ZC50eF9zdGF0dXMsIHN0YXQsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cykpOworCW1lbWNweSgmZXZkLnR4X3N0YXR1cywgc3RhdCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbykpOwogCXJhdGVfY29udHJvbF9waWRfZXZlbnQoYnVmLCBSQ19QSURfRVZFTlRfVFlQRV9UWF9TVEFUVVMsICZldmQpOwogfQogCkBAIC0xNjcsOCArMTY3LDggQEAKIAlzd2l0Y2ggKGV2LT50eXBlKSB7CiAJY2FzZSBSQ19QSURfRVZFTlRfVFlQRV9UWF9TVEFUVVM6CiAJCXAgKz0gc25wcmludGYocGIgKyBwLCBsZW5ndGggLSBwLCAidHhfc3RhdHVzICV1ICV1IiwKLQkJCSAgICAgIGV2LT5kYXRhLnR4X3N0YXR1cy5leGNlc3NpdmVfcmV0cmllcywKLQkJCSAgICAgIGV2LT5kYXRhLnR4X3N0YXR1cy5yZXRyeV9jb3VudCk7CisJCQkgICAgICBldi0+ZGF0YS50eF9zdGF0dXMuc3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzLAorCQkJICAgICAgZXYtPmRhdGEudHhfc3RhdHVzLnN0YXR1cy5yZXRyeV9jb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgUkNfUElEX0VWRU5UX1RZUEVfUkFURV9DSEFOR0U6CiAJCXAgKz0gc25wcmludGYocGIgKyBwLCBsZW5ndGggLSBwLCAicmF0ZV9jaGFuZ2UgJWQgJWQiLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCAwOTQxZTVkLi42ZDlhZTY3YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKKysrIGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTYxLDIyICs2MSwxNDcgQEAKIAkJCQkgICAgaW50IHByZXNlbnRfZmNzX2xlbiwKIAkJCQkgICAgaW50IHJhZGlvdGFwX2xlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCiAJaWYgKHN0YXR1cy0+ZmxhZyAmIChSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDIHwgUlhfRkxBR19GQUlMRURfUExDUF9DUkMpKQogCQlyZXR1cm4gMTsKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCAxNiArIHByZXNlbnRfZmNzX2xlbiArIHJhZGlvdGFwX2xlbikpCiAJCXJldHVybiAxOwotCWlmICgoKGhkci0+ZnJhbWVfY29udHJvbCAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSkgPT0KLQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwpKSAmJgotCSAgICAoKGhkci0+ZnJhbWVfY29udHJvbCAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgIT0KLQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpKSAmJgotCSAgICAoKGhkci0+ZnJhbWVfY29udHJvbCAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgIT0KLQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSkpKQorCWlmIChpZWVlODAyMTFfaXNfY3RsKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgIWllZWU4MDIxMV9pc19wc3BvbGwoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAhaWVlZTgwMjExX2lzX2JhY2tfcmVxKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitpZWVlODAyMTFfcnhfcmFkaW90YXBfbGVuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKQoreworCWludCBsZW47CisKKwkvKiBhbHdheXMgcHJlc2VudCBmaWVsZHMgKi8KKwlsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIpICsgOTsKKworCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1RTRlQpCisJCWxlbiArPSA4OworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCIHx8CisJICAgIGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQorCQlsZW4gKz0gMTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PSVNFX0RCTSkKKwkJbGVuICs9IDE7CisKKwlpZiAobGVuICYgMSkgLyogcGFkZGluZyBmb3IgUlhfRkxBR1MgaWYgbmVjZXNzYXJ5ICovCisJCWxlbisrOworCisJLyogbWFrZSBzdXJlIHJhZGlvdGFwIHN0YXJ0cyBhdCBhIG5hdHVyYWxseSBhbGlnbmVkIGFkZHJlc3MgKi8KKwlpZiAobGVuICUgOCkKKwkJbGVuID0gcm91bmR1cChsZW4sIDgpOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiBpZWVlODAyMTFfYWRkX3J4X3JhZGlvdGFwX2hlYWRlciAtIGFkZCByYWRpb3RhcCBoZWFkZXIKKyAqCisgKiBhZGQgYSByYWRpb3RhcCBoZWFkZXIgY29udGFpbmluZyBhbGwgdGhlIGZpZWxkcyB3aGljaCB0aGUgaGFyZHdhcmUgcHJvdmlkZWQuCisgKi8KK3N0YXRpYyB2b2lkCitpZWVlODAyMTFfYWRkX3J4X3JhZGlvdGFwX2hlYWRlcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlLAorCQkJCSBpbnQgcnRhcF9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJ0aGRyOworCXVuc2lnbmVkIGNoYXIgKnBvczsKKworCXJ0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopc2tiX3B1c2goc2tiLCBydGFwX2xlbik7CisJbWVtc2V0KHJ0aGRyLCAwLCBydGFwX2xlbik7CisKKwkvKiByYWRpb3RhcCBoZWFkZXIsIHNldCBhbHdheXMgcHJlc2VudCBmbGFncyAqLworCXJ0aGRyLT5pdF9wcmVzZW50ID0KKwkJY3B1X3RvX2xlMzIoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CisJCQkgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKKwkJCSAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCkgfAorCQkJICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BKSB8CisJCQkgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTKSk7CisJcnRoZHItPml0X2xlbiA9IGNwdV90b19sZTE2KHJ0YXBfbGVuKTsKKworCXBvcyA9ICh1bnNpZ25lZCBjaGFyICopKHJ0aGRyKzEpOworCisJLyogdGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzIGlzIGltcG9ydGFudCAqLworCisJLyogSUVFRTgwMjExX1JBRElPVEFQX1RTRlQgKi8KKwlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7CisJCSooX19sZTY0ICopcG9zID0gY3B1X3RvX2xlNjQoc3RhdHVzLT5tYWN0aW1lKTsKKwkJcnRoZHItPml0X3ByZXNlbnQgfD0KKwkJCWNwdV90b19sZTMyKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1RTRlQpOworCQlwb3MgKz0gODsKKwl9CisKKwkvKiBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1MgKi8KKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUykKKwkJKnBvcyB8PSBJRUVFODAyMTFfUkFESU9UQVBfRl9GQ1M7CisJcG9zKys7CisKKwkvKiBJRUVFODAyMTFfUkFESU9UQVBfUkFURSAqLworCSpwb3MgPSByYXRlLT5iaXRyYXRlIC8gNTsKKwlwb3MrKzsKKworCS8qIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMICovCisJKihfX2xlMTYgKilwb3MgPSBjcHVfdG9fbGUxNihzdGF0dXMtPmZyZXEpOworCXBvcyArPSAyOworCWlmIChzdGF0dXMtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJKihfX2xlMTYgKilwb3MgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfQ0hBTl9PRkRNIHwKKwkJCQkJICAgICBJRUVFODAyMTFfQ0hBTl81R0haKTsKKwllbHNlCisJCSooX19sZTE2ICopcG9zID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0NIQU5fRFlOIHwKKwkJCQkJICAgICBJRUVFODAyMTFfQ0hBTl8yR0haKTsKKwlwb3MgKz0gMjsKKworCS8qIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMICovCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSB7CisJCSpwb3MgPSBzdGF0dXMtPnNpZ25hbDsKKwkJcnRoZHItPml0X3ByZXNlbnQgfD0KKwkJCWNwdV90b19sZTMyKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUwpOworCQlwb3MrKzsKKwl9CisKKwkvKiBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVE5PSVNFICovCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT0lTRV9EQk0pIHsKKwkJKnBvcyA9IHN0YXR1cy0+bm9pc2U7CisJCXJ0aGRyLT5pdF9wcmVzZW50IHw9CisJCQljcHVfdG9fbGUzMigxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0UpOworCQlwb3MrKzsKKwl9CisKKwkvKiBJRUVFODAyMTFfUkFESU9UQVBfTE9DS19RVUFMSVRZIGlzIG1pc3NpbmcgKi8KKworCS8qIElFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BICovCisJKnBvcyA9IHN0YXR1cy0+YW50ZW5uYTsKKwlwb3MrKzsKKworCS8qIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwgKi8KKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQikgeworCQkqcG9zID0gc3RhdHVzLT5zaWduYWw7CisJCXJ0aGRyLT5pdF9wcmVzZW50IHw9CisJCQljcHVfdG9fbGUzMigxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwpOworCQlwb3MrKzsKKwl9CisKKwkvKiBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0UgaXMgbm90IHVzZWQgKi8KKworCS8qIElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUyAqLworCS8qIGVuc3VyZSAyIGJ5dGUgYWxpZ25tZW50IGZvciB0aGUgMiBieXRlIGZpZWxkIGFzIHJlcXVpcmVkICovCisJaWYgKChwb3MgLSAodW5zaWduZWQgY2hhciAqKXJ0aGRyKSAmIDEpCisJCXBvcysrOworCS8qIEZJWE1FOiB3aGVuIHJhZGlvdGFwIGdldHMgYSAnYmFkIFBMQ1AnIGZsYWcgdXNlIGl0IGhlcmUgKi8KKwlpZiAoc3RhdHVzLT5mbGFnICYgKFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkMgfCBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQykpCisJCSooX19sZTE2ICopcG9zIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9SQURJT1RBUF9GX1JYX0JBREZDUyk7CisJcG9zICs9IDI7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhIHJlY2VpdmVkIGZyYW1lIHRvIGFsbCBtb25pdG9yIGludGVyZmFjZXMgYW5kCiAgKiByZXR1cm5zIGEgY2xlYW5lZC11cCBTS0IgdGhhdCBubyBsb25nZXIgaW5jbHVkZXMgdGhlIEZDUyBub3IgdGhlCkBAIC04OSwxNyArMjE0LDYgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlpbnQgbmVlZGVkX2hlYWRyb29tID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRoZHI7Ci0JX19sZTY0ICpydHRzZnQgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfcnRhcF9maXhlZF9kYXRhIHsKLQkJdTggZmxhZ3M7Ci0JCXU4IHJhdGU7Ci0JCV9fbGUxNiBjaGFuX2ZyZXE7Ci0JCV9fbGUxNiBjaGFuX2ZsYWdzOwotCQl1OCBhbnRzaWduYWw7Ci0JCXU4IHBhZGRpbmdfZm9yX3J4ZmxhZ3M7Ci0JCV9fbGUxNiByeF9mbGFnczsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqcnRmaXhlZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqc2tiMjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcHJldl9kZXYgPSBOVUxMOwogCWludCBwcmVzZW50X2Zjc19sZW4gPSAwOwpAQCAtMTE2LDggKzIzMCw4IEBACiAJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfUkFESU9UQVApCiAJCXJ0YXBfbGVuID0gaWVlZTgwMjExX2dldF9yYWRpb3RhcF9sZW4ob3JpZ3NrYi0+ZGF0YSk7CiAJZWxzZQotCQkvKiByb29tIGZvciByYWRpb3RhcCBoZWFkZXIsIGFsd2F5cyBwcmVzZW50IGZpZWxkcyBhbmQgVFNGVCAqLwotCQluZWVkZWRfaGVhZHJvb20gPSBzaXplb2YoKnJ0aGRyKSArIHNpemVvZigqcnRmaXhlZCkgKyA4OworCQkvKiByb29tIGZvciB0aGUgcmFkaW90YXAgaGVhZGVyIGJhc2VkIG9uIGRyaXZlciBmZWF0dXJlcyAqLworCQluZWVkZWRfaGVhZHJvb20gPSBpZWVlODAyMTFfcnhfcmFkaW90YXBfbGVuKGxvY2FsLCBzdGF0dXMpOwogCiAJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MpCiAJCXByZXNlbnRfZmNzX2xlbiA9IEZDU19MRU47CkBAIC0xNjMsNTUgKzI3Nyw5IEBACiAJfQogCiAJLyogaWYgbmVjZXNzYXJ5LCBwcmVwZW5kIHJhZGlvdGFwIGluZm9ybWF0aW9uICovCi0JaWYgKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19SQURJT1RBUCkpIHsKLQkJcnRmaXhlZCA9ICh2b2lkICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpydGZpeGVkKSk7Ci0JCXJ0YXBfbGVuID0gc2l6ZW9mKCpydGhkcikgKyBzaXplb2YoKnJ0Zml4ZWQpOwotCQlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7Ci0JCQlydHRzZnQgPSAodm9pZCAqKSBza2JfcHVzaChza2IsIHNpemVvZigqcnR0c2Z0KSk7Ci0JCQlydGFwX2xlbiArPSA4OwotCQl9Ci0JCXJ0aGRyID0gKHZvaWQgKikgc2tiX3B1c2goc2tiLCBzaXplb2YoKnJ0aGRyKSk7Ci0JCW1lbXNldChydGhkciwgMCwgc2l6ZW9mKCpydGhkcikpOwotCQltZW1zZXQocnRmaXhlZCwgMCwgc2l6ZW9mKCpydGZpeGVkKSk7Ci0JCXJ0aGRyLT5pdF9wcmVzZW50ID0KLQkJCWNwdV90b19sZTMyKCgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUykgfAotCQkJCSAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSkgfAotCQkJCSAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCkgfAotCQkJCSAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMKSB8Ci0JCQkJICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUykpOwotCQlydGZpeGVkLT5mbGFncyA9IDA7Ci0JCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTKQotCQkJcnRmaXhlZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTOwotCi0JCWlmIChydHRzZnQpIHsKLQkJCSpydHRzZnQgPSBjcHVfdG9fbGU2NChzdGF0dXMtPm1hY3RpbWUpOwotCQkJcnRoZHItPml0X3ByZXNlbnQgfD0KLQkJCQljcHVfdG9fbGUzMigxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9UU0ZUKTsKLQkJfQotCi0JCS8qIEZJWE1FOiB3aGVuIHJhZGlvdGFwIGdldHMgYSAnYmFkIFBMQ1AnIGZsYWcgdXNlIGl0IGhlcmUgKi8KLQkJcnRmaXhlZC0+cnhfZmxhZ3MgPSAwOwotCQlpZiAoc3RhdHVzLT5mbGFnICYKLQkJICAgIChSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDIHwgUlhfRkxBR19GQUlMRURfUExDUF9DUkMpKQotCQkJcnRmaXhlZC0+cnhfZmxhZ3MgfD0KLQkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9CQURGQ1MpOwotCi0JCXJ0Zml4ZWQtPnJhdGUgPSByYXRlLT5iaXRyYXRlIC8gNTsKLQotCQlydGZpeGVkLT5jaGFuX2ZyZXEgPSBjcHVfdG9fbGUxNihzdGF0dXMtPmZyZXEpOwotCi0JCWlmIChzdGF0dXMtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJCXJ0Zml4ZWQtPmNoYW5fZmxhZ3MgPQotCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9DSEFOX09GRE0gfAotCQkJCQkgICAgSUVFRTgwMjExX0NIQU5fNUdIWik7Ci0JCWVsc2UKLQkJCXJ0Zml4ZWQtPmNoYW5fZmxhZ3MgPQotCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9DSEFOX0RZTiB8Ci0JCQkJCSAgICBJRUVFODAyMTFfQ0hBTl8yR0haKTsKLQotCQlydGZpeGVkLT5hbnRzaWduYWwgPSBzdGF0dXMtPnNzaTsKLQkJcnRoZHItPml0X2xlbiA9IGNwdV90b19sZTE2KHJ0YXBfbGVuKTsKLQl9CisJaWYgKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19SQURJT1RBUCkpCisJCWllZWU4MDIxMV9hZGRfcnhfcmFkaW90YXBfaGVhZGVyKGxvY2FsLCBza2IsIHN0YXR1cywgcmF0ZSwKKwkJCQkJCSBuZWVkZWRfaGVhZHJvb20pOwogCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtMjUzLDMzICszMjEsMzMgQEAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3BhcnNlX3FvcyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewotCXU4ICpkYXRhID0gcngtPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtPnNrYi0+ZGF0YTsKIAlpbnQgdGlkOwogCiAJLyogZG9lcyB0aGUgZnJhbWUgaGF2ZSBhIHFvcyBjb250cm9sIGZpZWxkPyAqLwotCWlmIChXTEFOX0ZDX0lTX1FPU19EQVRBKHJ4LT5mYykpIHsKLQkJdTggKnFjID0gZGF0YSArIGllZWU4MDIxMV9nZXRfaGRybGVuKHJ4LT5mYykgLSBRT1NfQ09OVFJPTF9MRU47CisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCXU4ICpxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwogCQkvKiBmcmFtZSBoYXMgcW9zIGNvbnRyb2wgKi8KLQkJdGlkID0gcWNbMF0gJiBRT1NfQ09OVFJPTF9USURfTUFTSzsKLQkJaWYgKHFjWzBdICYgSUVFRTgwMjExX1FPU19DT05UUk9MX0FfTVNEVV9QUkVTRU5UKQorCQl0aWQgPSAqcWMgJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKKwkJaWYgKCpxYyAmIElFRUU4MDIxMV9RT1NfQ09OVFJPTF9BX01TRFVfUFJFU0VOVCkKIAkJCXJ4LT5mbGFncyB8PSBJRUVFODAyMTFfUlhfQU1TRFU7CiAJCWVsc2UKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX0FNU0RVOwogCX0gZWxzZSB7Ci0JCWlmICh1bmxpa2VseSgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9NR01UKSkgewotCQkJLyogU2VwYXJhdGUgVElEIGZvciBtYW5hZ2VtZW50IGZyYW1lcyAqLwotCQkJdGlkID0gTlVNX1JYX0RBVEFfUVVFVUVTIC0gMTsKLQkJfSBlbHNlIHsKLQkJCS8qIG5vIHFvcyBjb250cm9sIHByZXNlbnQgKi8KLQkJCXRpZCA9IDA7IC8qIDgwMi4xZCAtIEJlc3QgRWZmb3J0ICovCi0JCX0KKwkJLyoKKwkJICogSUVFRSA4MDIuMTEtMjAwNywgNy4xLjMuNC4xICgiU2VxdWVuY2UgTnVtYmVyIGZpZWxkIik6CisJCSAqCisJCSAqCVNlcXVlbmNlIG51bWJlcnMgZm9yIG1hbmFnZW1lbnQgZnJhbWVzLCBRb1MgZGF0YQorCQkgKglmcmFtZXMgd2l0aCBhIGJyb2FkY2FzdC9tdWx0aWNhc3QgYWRkcmVzcyBpbiB0aGUKKwkJICoJQWRkcmVzcyAxIGZpZWxkLCBhbmQgYWxsIG5vbi1Rb1MgZGF0YSBmcmFtZXMgc2VudAorCQkgKglieSBRb1MgU1RBcyBhcmUgYXNzaWduZWQgdXNpbmcgYW4gYWRkaXRpb25hbCBzaW5nbGUKKwkJICoJbW9kdWxvLTQwOTYgY291bnRlciwgWy4uLl0KKwkJICoKKwkJICogV2UgYWxzbyB1c2UgdGhhdCBjb3VudGVyIGZvciBub24tUW9TIFNUQXMuCisJCSAqLworCQl0aWQgPSBOVU1fUlhfREFUQV9RVUVVRVMgLSAxOwogCX0KIAotCUk4MDJfREVCVUdfSU5DKHJ4LT5sb2NhbC0+d21lX3J4X3F1ZXVlW3RpZF0pOwotCS8qIG9ubHkgYSBkZWJ1ZyBjb3VudGVyLCBzdGEgbWlnaHQgbm90IGJlIGFzc2lnbmVkIHByb3Blcmx5IHlldCAqLwotCWlmIChyeC0+c3RhKQotCQlJODAyX0RFQlVHX0lOQyhyeC0+c3RhLT53bWVfcnhfcXVldWVbdGlkXSk7Ci0KIAlyeC0+cXVldWUgPSB0aWQ7CiAJLyogU2V0IHNrYi0+cHJpb3JpdHkgdG8gMWQgdGFnIGlmIGhpZ2hlc3Qgb3JkZXIgYml0IG9mIFRJRCBpcyBub3Qgc2V0LgogCSAqIEZvciBub3csIHNldCBza2ItPnByaW9yaXR5IHRvIDAgZm9yIG90aGVyIGNhc2VzLiAqLwpAQCAtMjg5LDkgKzM1NywxMCBAQAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3ZlcmlmeV9pcF9hbGlnbm1lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfUEFDS0VUX0FMSUdOTUVOVAorCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCWludCBoZHJsZW47CiAKLQlpZiAoIVdMQU5fRkNfREFUQV9QUkVTRU5UKHJ4LT5mYykpCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0zMTMsNyArMzgyLDcgQEAKIAkgKiBoZWFkZXIgYW5kIHRoZSBwYXlsb2FkIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgaXMgcmVxdWlyZWQKIAkgKiB0byBtb3ZlIHRoZSA4MDIuMTEgaGVhZGVyIGZ1cnRoZXIgYmFjayBpbiB0aGF0IGNhc2UuCiAJICovCi0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4ocngtPmZjKTsKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJaWYgKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9BTVNEVSkKIAkJaGRybGVuICs9IEVUSF9ITEVOOwogCVdBUk5fT05fT05DRSgoKHVuc2lnbmVkIGxvbmcpKHJ4LT5za2ItPmRhdGEgKyBoZHJsZW4pKSAmIDMpOwpAQCAtMzIxLDUxICszOTAsOSBAQAogfQogCiAKLXN0YXRpYyB1MzIgaWVlZTgwMjExX3J4X2xvYWRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1MzIgbG9hZCA9IDAsIGhkcnRpbWU7Ci0KLQkvKiBFc3RpbWF0ZSB0b3RhbCBjaGFubmVsIHVzZSBjYXVzZWQgYnkgdGhpcyBmcmFtZSAqLwotCi0JLyogMSBiaXQgYXQgMSBNYml0L3MgdGFrZXMgMSB1c2VjOyBpbiBjaGFubmVsX3VzZSB2YWx1ZXMsCi0JICogMSB1c2VjID0gMS84ICogKDEwODAgLyAxMCkgPSAxMy41ICovCi0KLQlpZiAoc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFogfHwKLQkgICAgKHN0YXR1cy0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haICYmCi0JICAgICByYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUF9HKSkKLQkJaGRydGltZSA9IENIQU5fVVRJTF9IRFJfU0hPUlQ7Ci0JZWxzZQotCQloZHJ0aW1lID0gQ0hBTl9VVElMX0hEUl9MT05HOwotCi0JbG9hZCA9IGhkcnRpbWU7Ci0JaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKLQkJbG9hZCArPSBoZHJ0aW1lOwotCi0JLyogVE9ETzogb3B0aW1pc2UgYWdhaW4gKi8KLQlsb2FkICs9IHNrYi0+bGVuICogQ0hBTl9VVElMX1JBVEVfTENNIC8gcmF0ZS0+Yml0cmF0ZTsKLQotCS8qIERpdmlkZSBjaGFubmVsX3VzZSBieSA4IHRvIGF2b2lkIHdyYXBwaW5nIGFyb3VuZCB0aGUgY291bnRlciAqLwotCWxvYWQgPj49IENIQU5fVVRJTF9TSElGVDsKLQotCXJldHVybiBsb2FkOwotfQotCiAvKiByeCBoYW5kbGVycyAqLwogCi1zdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAotaWVlZTgwMjExX3J4X2hfaWZfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKLXsKLQlpZiAocngtPnN0YSkKLQkJcngtPnN0YS0+Y2hhbm5lbF91c2VfcmF3ICs9IHJ4LT5sb2FkOwotCXJ4LT5zZGF0YS0+Y2hhbm5lbF91c2VfcmF3ICs9IHJ4LT5sb2FkOwotCXJldHVybiBSWF9DT05USU5VRTsKLX0KLQotc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKK3N0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0IGRlYnVnX25vaW5saW5lCiBpZWVlODAyMTFfcnhfaF9wYXNzaXZlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHJ4LT5sb2NhbDsKQEAgLTM5NCwxNCArNDIxLDExIEBACiBzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAogaWVlZTgwMjExX3J4X21lc2hfY2hlY2soc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKLQlpbnQgaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4ocngtPmZjKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHJ4LT5za2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CisJdW5zaWduZWQgaW50IGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAotI2RlZmluZSBtc2hfaF9nZXQoaCwgbCkgKChzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKikgKCh1OCAqKWggKyBsKSkKLQotCWlmICgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7Ci0JCWlmICghKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpICYmCi0JCSAgICAgIChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkpCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJaWYgKCFpZWVlODAyMTFfaGFzX2E0KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCQlpZiAobWVtY21wKGhkci0+YWRkcjQsIHJ4LT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkKIAkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CkBAIC00MTQsMjcgKzQzOCwzMCBAQAogCWlmICghcngtPnN0YSB8fCBzdGFfcGxpbmtfc3RhdGUocngtPnN0YSkgIT0gUExJTktfRVNUQUIpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCi0JCWlmICgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9NR01UKQorCQlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JCXN3aXRjaCAocngtPmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgorCQlpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWhkcjsKIAkJCWlmIChtZ210LT51LmFjdGlvbi5jYXRlZ29yeSAhPSBQTElOS19DQVRFR09SWSkKIAkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwotCQkJLyogZmFsbCB0aHJvdWdoIG9uIGVsc2UgKi8KLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CiAJCQlyZXR1cm4gUlhfQ09OVElOVUU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAJCX0KIAotCSB9IGVsc2UgaWYgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKLQkJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCi0JCSAgICBtZXNoX3JtY19jaGVjayhoZHItPmFkZHI0LCBtc2hfaF9nZXQoaGRyLCBoZHJsZW4pLCByeC0+ZGV2KSkKKwkJaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCQkgICAgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCQkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwl9CisKKyNkZWZpbmUgbXNoX2hfZ2V0KGgsIGwpICgoc3RydWN0IGllZWU4MDIxMXNfaGRyICopICgodTggKiloICsgbCkpCisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgorCSAgICBtZXNoX3JtY19jaGVjayhoZHItPmFkZHI0LCBtc2hfaF9nZXQoaGRyLCBoZHJsZW4pLCByeC0+ZGV2KSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKICN1bmRlZiBtc2hfaF9nZXQKIApAQCAtNDQyLDE2ICs0NjksMTQgQEAKIH0KIAogCi1zdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV9yeF9oX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSByeC0+c2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCiAJLyogRHJvcCBkdXBsaWNhdGUgODAyLjExIHJldHJhbnNtaXNzaW9ucyAoSUVFRSA4MDIuMTEgQ2hhcC4gOS4yLjkpICovCiAJaWYgKHJ4LT5zdGEgJiYgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7Ci0JCWlmICh1bmxpa2VseShyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9SRVRSWSAmJgorCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2hhc19yZXRyeShoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCQkgICAgIHJ4LT5zdGEtPmxhc3Rfc2VxX2N0cmxbcngtPnF1ZXVlXSA9PQogCQkJICAgICBoZHItPnNlcV9jdHJsKSkgewogCQkJaWYgKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkgewpAQCAtNDgwLDE1ICs1MDUsMTQgQEAKIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZyeC0+c2RhdGEtPnZpZikpCiAJCXJldHVybiBpZWVlODAyMTFfcnhfbWVzaF9jaGVjayhyeCk7CiAKLQlpZiAodW5saWtlbHkoKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfHwKLQkJICAgICAgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCAmJgotCQkgICAgICAgKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMKSkgJiYKKwlpZiAodW5saWtlbHkoKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkJICAgICAgaWVlZTgwMjExX2lzX3BzcG9sbChoZHItPmZyYW1lX2NvbnRyb2wpKSAmJgogCQkgICAgIHJ4LT5zZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyAmJgotCQkgICAgICghcngtPnN0YSB8fCAhKHJ4LT5zdGEtPmZsYWdzICYgV0xBTl9TVEFfQVNTT0MpKSkpIHsKLQkJaWYgKCghKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykgJiYKLQkJICAgICAhKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpICYmCi0JCSAgICAgKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkKLQkJICAgIHx8ICEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkgeworCQkgICAgICghcngtPnN0YSB8fCAhdGVzdF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfQVNTT0MpKSkpIHsKKwkJaWYgKCghaWVlZTgwMjExX2hhc19mcm9tZHMoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgICAgICFpZWVlODAyMTFfaGFzX3RvZHMoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHx8CisJCSAgICAhKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpIHsKIAkJCS8qIERyb3AgSUJTUyBmcmFtZXMgYW5kIGZyYW1lcyBmb3Igb3RoZXIgaG9zdHMKIAkJCSAqIHNpbGVudGx5LiAqLwogCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKQEAgLTUwMSwxMCArNTI1LDEwIEBACiB9CiAKIAotc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKK3N0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0IGRlYnVnX25vaW5saW5lCiBpZWVlODAyMTFfcnhfaF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSByeC0+c2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCWludCBrZXlpZHg7CiAJaW50IGhkcmxlbjsKIAlpZWVlODAyMTFfcnhfcmVzdWx0IHJlc3VsdCA9IFJYX0RST1BfVU5VU0FCTEU7CkBAIC01MzYsNyArNTYwLDcgQEAKIAkgKiBwb3NzaWJsZS4KIAkgKi8KIAotCWlmICghKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpCisJaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAkvKgpAQCAtNTY1LDcgKzU4OSw3IEBACiAJCSAgICAocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQogCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCi0JCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKHJ4LT5mYyk7CisJCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCQlpZiAocngtPnNrYi0+bGVuIDwgOCArIGhkcmxlbikKIAkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOyAvKiBUT0RPOiBjb3VudCB0aGlzPyAqLwpAQCAtNTkyLDE3ICs2MTYsMTIgQEAKIAkJcngtPmtleS0+dHhfcnhfY291bnQrKzsKIAkJLyogVE9ETzogYWRkIHRocmVzaG9sZCBzdHVmZiBhZ2FpbiAqLwogCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIHByb3RlY3RlZCBmcmFtZSwiCi0JCQkgICAgICAgIiBidXQgaGF2ZSBubyBrZXlcbiIsIHJ4LT5kZXYtPm5hbWUpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVRyAqLwogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCX0KIAogCS8qIENoZWNrIGZvciB3ZWFrIElWcyBpZiBwb3NzaWJsZSAqLwogCWlmIChyeC0+c3RhICYmIHJ4LT5rZXktPmNvbmYuYWxnID09IEFMR19XRVAgJiYKLQkgICAgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpICYmCisJICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKIAkgICAgKCEocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpIHx8CiAJICAgICAhKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpICYmCiAJICAgIGllZWU4MDIxMV93ZXBfaXNfd2Vha19pdihyeC0+c2tiLCByeC0+a2V5KSkKQEAgLTYzMywxMCArNjUyLDggQEAKIAogCXNkYXRhID0gc3RhLT5zZGF0YTsKIAotCWlmIChzZGF0YS0+YnNzKQotCQlhdG9taWNfaW5jKCZzZGF0YS0+YnNzLT5udW1fc3RhX3BzKTsKLQlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX1BTOwotCXN0YS0+ZmxhZ3MgJj0gfldMQU5fU1RBX1BTUE9MTDsKKwlhdG9taWNfaW5jKCZzZGF0YS0+YnNzLT5udW1fc3RhX3BzKTsKKwlzZXRfYW5kX2NsZWFyX3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTLCBXTEFOX1NUQV9QU1BPTEwpOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXMgYWlkICVkIGVudGVycyBwb3dlciBzYXZlIG1vZGVcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSwgc3RhLT5haWQpOwpAQCAtNjQ5LDE1ICs2NjYsMTQgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBzZW50ID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICpwa3RfZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlzZGF0YSA9IHN0YS0+c2RhdGE7CiAKLQlpZiAoc2RhdGEtPmJzcykKLQkJYXRvbWljX2RlYygmc2RhdGEtPmJzcy0+bnVtX3N0YV9wcyk7CisJYXRvbWljX2RlYygmc2RhdGEtPmJzcy0+bnVtX3N0YV9wcyk7CiAKLQlzdGEtPmZsYWdzICY9IH4oV0xBTl9TVEFfUFMgfCBXTEFOX1NUQV9QU1BPTEwpOworCWNsZWFyX3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTIHwgV0xBTl9TVEFfUFNQT0xMKTsKIAogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnBzX3R4X2J1ZikpCiAJCXN0YV9pbmZvX2NsZWFyX3RpbV9iaXQoc3RhKTsKQEAgLTY2OSwxMyArNjg1LDEzIEBACiAKIAkvKiBTZW5kIGFsbCBidWZmZXJlZCBmcmFtZXMgdG8gdGhlIHN0YXRpb24gKi8KIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzdGEtPnR4X2ZpbHRlcmVkKSkgIT0gTlVMTCkgewotCQlwa3RfZGF0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICopIHNrYi0+Y2I7CisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJCXNlbnQrKzsKLQkJcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX1JFUVVFVUU7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRVUVVRTsKIAkJZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAl9CiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc3RhLT5wc190eF9idWYpKSAhPSBOVUxMKSB7Ci0JCXBrdF9kYXRhID0gKHN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKikgc2tiLT5jYjsKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAkJbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkLS07CiAJCXNlbnQrKzsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwpAQCAtNjgzLDE5ICs2OTksMTkgQEAKIAkJICAgICAgICJzaW5jZSBTVEEgbm90IHNsZWVwaW5nIGFueW1vcmVcbiIsIGRldi0+bmFtZSwKIAkJICAgICAgIHByaW50X21hYyhtYWMsIHN0YS0+YWRkciksIHN0YS0+YWlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwotCQlwa3RfZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUERfUkVRVUVVRTsKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFVRVVFOwogCQlkZXZfcXVldWVfeG1pdChza2IpOwogCX0KIAogCXJldHVybiBzZW50OwogfQogCi1zdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV9yeF9oX3N0YV9wcm9jZXNzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSByeC0+c3RhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByeC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgcngtPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtPnNrYi0+ZGF0YTsKIAogCWlmICghc3RhKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CkBAIC03MjUsMjQgKzc0MSwyNiBAQAogCiAJc3RhLT5yeF9mcmFnbWVudHMrKzsKIAlzdGEtPnJ4X2J5dGVzICs9IHJ4LT5za2ItPmxlbjsKLQlzdGEtPmxhc3RfcnNzaSA9IHJ4LT5zdGF0dXMtPnNzaTsKIAlzdGEtPmxhc3Rfc2lnbmFsID0gcngtPnN0YXR1cy0+c2lnbmFsOworCXN0YS0+bGFzdF9xdWFsID0gcngtPnN0YXR1cy0+cXVhbDsKIAlzdGEtPmxhc3Rfbm9pc2UgPSByeC0+c3RhdHVzLT5ub2lzZTsKIAotCWlmICghKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykpIHsKKwlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgfHwKKwkgICAgIHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTikpIHsKIAkJLyogQ2hhbmdlIFNUQSBwb3dlciBzYXZpbmcgbW9kZSBvbmx5IGluIHRoZSBlbmQgb2YgYSBmcmFtZQogCQkgKiBleGNoYW5nZSBzZXF1ZW5jZSAqLwotCQlpZiAoKHN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9QUykgJiYgIShyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9QTSkpCisJCWlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTKSAmJgorCQkgICAgIWllZWU4MDIxMV9oYXNfcG0oaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCXJ4LT5zZW50X3BzX2J1ZmZlcmVkICs9IGFwX3N0YV9wc19lbmQoZGV2LCBzdGEpOwotCQllbHNlIGlmICghKHN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9QUykgJiYKLQkJCSAocngtPmZjICYgSUVFRTgwMjExX0ZDVExfUE0pKQorCQllbHNlIGlmICghdGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QUykgJiYKKwkJCSBpZWVlODAyMTFfaGFzX3BtKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQlhcF9zdGFfcHNfc3RhcnQoZGV2LCBzdGEpOwogCX0KIAogCS8qIERyb3AgZGF0YTo6bnVsbGZ1bmMgZnJhbWVzIHNpbGVudGx5LCBzaW5jZSB0aGV5IGFyZSB1c2VkIG9ubHkgdG8KIAkgKiBjb250cm9sIHN0YXRpb24gcG93ZXIgc2F2aW5nIG1vZGUuICovCi0JaWYgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKLQkgICAgKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMpIHsKKwlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJSTgwMl9ERUJVR19JTkMocngtPmxvY2FsLT5yeF9oYW5kbGVyc19kcm9wX251bGxmdW5jKTsKIAkJLyogVXBkYXRlIGNvdW50ZXIgYW5kIGZyZWUgcGFja2V0IGhlcmUgdG8gYXZvaWQgY291bnRpbmcgdGhpcwogCQkgKiBhcyBhIGRyb3BwZWQgcGFja2VkLiAqLwpAQCAtNzY4LDcgKzc4Niw3IEBACiAJCXNkYXRhLT5mcmFnbWVudF9uZXh0ID0gMDsKIAogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZlbnRyeS0+c2tiX2xpc3QpKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgZW50cnktPnNrYl9saXN0Lm5leHQtPmRhdGE7CiAJCURFQ0xBUkVfTUFDX0JVRihtYWMpOwpAQCAtNzgwLDcgKzc5OCw3IEBACiAJCSAgICAgICBqaWZmaWVzIC0gZW50cnktPmZpcnN0X2ZyYWdfdGltZSwgZW50cnktPnNlcSwKIAkJICAgICAgIGVudHJ5LT5sYXN0X2ZyYWcsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjEpLAogCQkgICAgICAgcHJpbnRfbWFjKG1hYzIsIGhkci0+YWRkcjIpKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfREVCVUcgKi8KKyNlbmRpZgogCQlfX3NrYl9xdWV1ZV9wdXJnZSgmZW50cnktPnNrYl9saXN0KTsKIAl9CiAKQEAgLTgzNyw3ICs4NTUsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwpAQCAtOTAxLDE4ICs5MTksOCBAQAogCQkJCWJyZWFrOwogCQl9CiAJCXJwbiA9IHJ4LT5rZXktPnUuY2NtcC5yeF9wbltyeC0+cXVldWVdOwotCQlpZiAobWVtY21wKHBuLCBycG4sIENDTVBfUE5fTEVOKSAhPSAwKSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVmcmFnOiBDQ01QIFBOIG5vdCAiCi0JCQkJICAgICAgICJzZXF1ZW50aWFsIEEyPSVzIgotCQkJCSAgICAgICAiIFBOPSUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCi0JCQkJICAgICAgICIoZXhwZWN0ZWQgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4KVxuIiwKLQkJCQkgICAgICAgcngtPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksCi0JCQkJICAgICAgIHJwblswXSwgcnBuWzFdLCBycG5bMl0sIHJwblszXSwgcnBuWzRdLAotCQkJCSAgICAgICBycG5bNV0sIHBuWzBdLCBwblsxXSwgcG5bMl0sIHBuWzNdLAotCQkJCSAgICAgICBwbls0XSwgcG5bNV0pOworCQlpZiAobWVtY21wKHBuLCBycG4sIENDTVBfUE5fTEVOKSkKIAkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCQl9CiAJCW1lbWNweShlbnRyeS0+bGFzdF9wbiwgcG4sIENDTVBfUE5fTEVOKTsKIAl9CiAKQEAgLTk1Myw3ICs5NjEsNyBAQAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAotc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKK3N0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0IGRlYnVnX25vaW5saW5lCiBpZWVlODAyMTFfcnhfaF9wc19wb2xsKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihyeC0+ZGV2KTsKQEAgLTk4OCw3ICs5OTYsNyBAQAogCQkgKiBUZWxsIFRYIHBhdGggdG8gc2VuZCBvbmUgZnJhbWUgZXZlbiB0aG91Z2ggdGhlIFNUQSBtYXkKIAkJICogc3RpbGwgcmVtYWluIGlzIFBTIG1vZGUgYWZ0ZXIgdGhpcyBmcmFtZSBleGNoYW5nZS4KIAkJICovCi0JCXJ4LT5zdGEtPmZsYWdzIHw9IFdMQU5fU1RBX1BTUE9MTDsKKwkJc2V0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9QU1BPTEwpOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlNUQSAlcyBhaWQgJWQ6IFBTIFBvbGwgKGVudHJpZXMgYWZ0ZXIgJWQpXG4iLApAQCAtMTAxNiw3ICsxMDI0LDcgQEAKIAkJICoJICBoYXZlIG5vdGhpbmcgYnVmZmVyZWQgZm9yIGl0PwogCQkgKi8KIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXMgc2VudCBQUyBQb2xsIGV2ZW4gIgotCQkgICAgICAgInRob3VnaCB0aGVyZSBpcyBubyBidWZmZXJlZCBmcmFtZXMgZm9yIGl0XG4iLAorCQkgICAgICAgInRob3VnaCB0aGVyZSBhcmUgbm8gYnVmZmVyZWQgZnJhbWVzIGZvciBpdFxuIiwKIAkJICAgICAgIHJ4LT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIHJ4LT5zdGEtPmFkZHIpKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwogCX0KQEAgLTEwMjgsMjIgKzEwMzYsMjIgQEAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQogCi1zdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV9yeF9oX3JlbW92ZV9xb3NfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewotCXUxNiBmYyA9IHJ4LT5mYzsKIAl1OCAqZGF0YSA9IHJ4LT5za2ItPmRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilkYXRhOwogCi0JaWYgKCFXTEFOX0ZDX0lTX1FPU19EQVRBKGZjKSkKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAkvKiByZW1vdmUgdGhlIHFvcyBjb250cm9sIGZpZWxkLCB1cGRhdGUgZnJhbWUgdHlwZSBhbmQgbWV0YS1kYXRhICovCi0JbWVtbW92ZShkYXRhICsgMiwgZGF0YSwgaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpIC0gMik7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdWxsKHJ4LT5za2IsIDIpOworCW1lbW1vdmUoZGF0YSArIElFRUU4MDIxMV9RT1NfQ1RMX0xFTiwgZGF0YSwKKwkJaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpIC0gSUVFRTgwMjExX1FPU19DVExfTEVOKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2JfcHVsbChyeC0+c2tiLCBJRUVFODAyMTFfUU9TX0NUTF9MRU4pOwogCS8qIGNoYW5nZSBmcmFtZSB0eXBlIHRvIG5vbiBRT1MgKi8KLQlyeC0+ZmMgPSBmYyAmPSB+SUVFRTgwMjExX1NUWVBFX1FPU19EQVRBOwotCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKKwlyeC0+ZmMgJj0gfklFRUU4MDIxMV9TVFlQRV9RT1NfREFUQTsKKwloZHItPmZyYW1lX2NvbnRyb2wgJj0gfmNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSk7CiAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CkBAIC0xMDUxLDE0ICsxMDU5LDkgQEAKIHN0YXRpYyBpbnQKIGllZWU4MDIxMV84MDJfMXhfcG9ydF9jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7Ci0JaWYgKHVubGlrZWx5KCFyeC0+c3RhIHx8ICEocngtPnN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9BVVRIT1JJWkVEKSkpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBmcmFtZSAiCi0JCQkgICAgICAgIih1bmF1dGhvcml6ZWQgcG9ydClcbiIsIHJ4LT5kZXYtPm5hbWUpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVRyAqLworCWlmICh1bmxpa2VseSghcngtPnN0YSB8fAorCSAgICAhdGVzdF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCkpKQogCQlyZXR1cm4gLUVBQ0NFUzsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMzgsMTYgKzExNDEsOCBAQAogCQltZW1jcHkoc3JjLCBoZHItPmFkZHIyLCBFVEhfQUxFTik7CiAKIAkJaWYgKHVubGlrZWx5KHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCAmJgotCQkJICAgICBzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTikpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIFRvRFMgZnJhbWUgIgotCQkJCSAgICAgICAiKEJTU0lEPSVzIFNBPSVzIERBPSVzKVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLAotCQkJCSAgICAgICBwcmludF9tYWMobWFjLCBoZHItPmFkZHIxKSwKLQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzIsIGhkci0+YWRkcjIpLAotCQkJCSAgICAgICBwcmludF9tYWMobWFjMywgaGRyLT5hZGRyMykpOworCQkJICAgICBzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTikpCiAJCQlyZXR1cm4gLTE7Ci0JCX0KIAkJYnJlYWs7CiAJY2FzZSAoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUyk6CiAJCS8qIFJBIFRBIERBIFNBICovCkBAIC0xMTU1LDE3ICsxMTUwLDggQEAKIAkJbWVtY3B5KHNyYywgaGRyLT5hZGRyNCwgRVRIX0FMRU4pOwogCiAJCSBpZiAodW5saWtlbHkoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1dEUyAmJgotCQkJICAgICBzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkpIHsKLQkJCSBpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCSBwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgRnJvbURTJlRvRFMgIgotCQkJCSAgICAgICAiZnJhbWUgKFJBPSVzIFRBPSVzIERBPSVzIFNBPSVzKVxuIiwKLQkJCQkgICAgICAgcngtPmRldi0+bmFtZSwKLQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMSksCi0JCQkJICAgICAgIHByaW50X21hYyhtYWMyLCBoZHItPmFkZHIyKSwKLQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzMsIGhkci0+YWRkcjMpLAotCQkJCSAgICAgICBwcmludF9tYWMobWFjNCwgaGRyLT5hZGRyNCkpOworCQkJICAgICBzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkpCiAJCQlyZXR1cm4gLTE7Ci0JCX0KIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfRkNUTF9GUk9NRFM6CiAJCS8qIERBIEJTU0lEIFNBICovCkBAIC0xMTgyLDI3ICsxMTY4LDEzIEBACiAJCW1lbWNweShkc3QsIGhkci0+YWRkcjEsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KHNyYywgaGRyLT5hZGRyMiwgRVRIX0FMRU4pOwogCi0JCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBJQlNTIGZyYW1lICIKLQkJCQkgICAgICAgIihEQT0lcyBTQT0lcyBCU1NJRD0lcylcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwKLQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMSksCi0JCQkJICAgICAgIHByaW50X21hYyhtYWMyLCBoZHItPmFkZHIyKSwKLQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzMsIGhkci0+YWRkcjMpKTsKLQkJCX0KKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKQogCQkJcmV0dXJuIC0xOwotCQl9CiAJCWJyZWFrOwogCX0KIAotCWlmICh1bmxpa2VseShza2ItPmxlbiAtIGhkcmxlbiA8IDgpKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggdG9vIHNob3J0IGRhdGEgZnJhbWUgIgotCQkJICAgICAgICJwYXlsb2FkXG4iLCBkZXYtPm5hbWUpOwotCQl9CisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIC0gaGRybGVuIDwgOCkpCiAJCXJldHVybiAtMTsKLQl9CiAKIAlwYXlsb2FkID0gc2tiLT5kYXRhICsgaGRybGVuOwogCWV0aGVydHlwZSA9IChwYXlsb2FkWzZdIDw8IDgpIHwgcGF5bG9hZFs3XTsKQEAgLTEzNDUsNyArMTMxNyw3IEBACiAJfQogfQogCi1zdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV9yeF9oX2Ftc2R1KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJ4LT5kZXY7CkBAIC0xMzk0LDEwICsxMzY2LDggQEAKIAogCQlwYWRkaW5nID0gKCg0IC0gc3ViZnJhbWVfbGVuKSAmIDB4Myk7CiAJCS8qIHRoZSBsYXN0IE1TRFUgaGFzIG5vIHBhZGRpbmcgKi8KLQkJaWYgKHN1YmZyYW1lX2xlbiA+IHJlbWFpbmluZykgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3cm9uZyBidWZmZXIgc2l6ZVxuIiwgZGV2LT5uYW1lKTsKKwkJaWYgKHN1YmZyYW1lX2xlbiA+IHJlbWFpbmluZykKIAkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCQl9CiAKIAkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwogCQkvKiBpZiBsYXN0IHN1YmZyYW1lIHJldXNlIHNrYiAqLwpAQCAtMTQxOCw4ICsxMzg4LDYgQEAKIAkJCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9wdWxsKHNrYiwgbnRvaHMobGVuKSArCiAJCQkJCQkJcGFkZGluZyk7CiAJCQlpZiAoIWV0aCkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogd3JvbmcgYnVmZmVyIHNpemVcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCQkJZGV2X2tmcmVlX3NrYihmcmFtZSk7CiAJCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJCQl9CkBAIC0xNDYyLDcgKzE0MzAsNyBAQAogCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0CitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3J4X2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByeC0+ZGV2OwpAQCAtMTQ5MywyMSArMTQ2MSwyMSBAQAogCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0CitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3J4X2hfY3RybChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JhciAqYmFyID0gKHN0cnVjdCBpZWVlODAyMTFfYmFyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JhciAqYmFyID0gKHN0cnVjdCBpZWVlODAyMTFfYmFyICopc2tiLT5kYXRhOwogCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7CiAJdTE2IHN0YXJ0X3NlcV9udW07CiAJdTE2IHRpZDsKIAotCWlmIChsaWtlbHkoKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSAhPSBJRUVFODAyMTFfRlRZUEVfQ1RMKSkKKwlpZiAobGlrZWx5KCFpZWVlODAyMTFfaXNfY3RsKGJhci0+ZnJhbWVfY29udHJvbCkpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKLQlpZiAoKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEpIHsKKwlpZiAoaWVlZTgwMjExX2lzX2JhY2tfcmVxKGJhci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJaWYgKCFyeC0+c3RhKQogCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCQl0aWQgPSBsZTE2X3RvX2NwdShiYXItPmNvbnRyb2wpID4+IDEyOwpAQCAtMTUzNyw3ICsxNTA1LDcgQEAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0CitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3J4X2hfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwpAQCAtMTU2MSw0MSArMTUyOSwyNyBAQAogCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7Ci0JaW50IGtleWlkeCwgaGRybGVuOworCWludCBrZXlpZHg7CisJdW5zaWduZWQgaW50IGhkcmxlbjsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAlERUNMQVJFX01BQ19CVUYobWFjMik7CiAKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihyeC0+c2tiKTsKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJaWYgKHJ4LT5za2ItPmxlbiA+PSBoZHJsZW4gKyA0KQogCQlrZXlpZHggPSByeC0+c2tiLT5kYXRhW2hkcmxlbiArIDNdID4+IDY7CiAJZWxzZQogCQlrZXlpZHggPSAtMTsKIAotCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBod2FjY2VsIHJlcG9ydGVkIE1pY2hhZWwgTUlDICIKLQkJICAgICAgICJmYWlsdXJlIGZyb20gJXMgdG8gJXMga2V5aWR4PSVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIyKSwKLQkJICAgICAgIHByaW50X21hYyhtYWMyLCBoZHItPmFkZHIxKSwga2V5aWR4KTsKLQogCWlmICghcngtPnN0YSkgewogCQkvKgogCQkgKiBTb21lIGhhcmR3YXJlIHNlZW0gdG8gZ2VuZXJhdGUgaW5jb3JyZWN0IE1pY2hhZWwgTUlDCiAJCSAqIHJlcG9ydHM7IGlnbm9yZSB0aGVtIHRvIGF2b2lkIHRyaWdnZXJpbmcgY291bnRlcm1lYXN1cmVzLgogCQkgKi8KLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaWdub3JlZCBzcHVyaW91cyBNaWNoYWVsIE1JQyAiCi0JCQkgICAgICAgImVycm9yIGZvciB1bmtub3duIGFkZHJlc3MgJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIyKSk7CiAJCWdvdG8gaWdub3JlOwogCX0KIAotCWlmICghKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaWdub3JlZCBzcHVyaW91cyBNaWNoYWVsIE1JQyAiCi0JCQkgICAgICAgImVycm9yIGZvciBhIGZyYW1lIHdpdGggbm8gUFJPVEVDVEVEIGZsYWcgKHNyYyAiCi0JCQkgICAgICAgIiVzKVxuIiwgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIyKSk7CisJaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlnb3RvIGlnbm9yZTsKLQl9CiAKIAlpZiAocngtPnNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCAmJiBrZXlpZHgpIHsKIAkJLyoKQEAgLTE2MDQsMjQgKzE1NTgsMTIgQEAKIAkJICogZ3JvdXAga2V5cyBhbmQgb25seSB0aGUgQVAgaXMgc2VuZGluZyByZWFsIG11bHRpY2FzdAogCQkgKiBmcmFtZXMgaW4gdGhlIEJTUy4KIAkJICovCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlnbm9yZWQgTWljaGFlbCBNSUMgZXJyb3IgZm9yICIKLQkJCSAgICAgICAiYSBmcmFtZSB3aXRoIG5vbi16ZXJvIGtleWlkeCAoJWQpIgotCQkJICAgICAgICIgKHNyYyAlcylcbiIsIGRldi0+bmFtZSwga2V5aWR4LAotCQkJICAgICAgIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpKTsKIAkJZ290byBpZ25vcmU7CiAJfQogCi0JaWYgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKLQkgICAgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgfHwKLQkgICAgIChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgIT0gSUVFRTgwMjExX1NUWVBFX0FVVEgpKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlnbm9yZWQgc3B1cmlvdXMgTWljaGFlbCBNSUMgIgotCQkJICAgICAgICJlcnJvciBmb3IgYSBmcmFtZSB0aGF0IGNhbm5vdCBiZSBlbmNyeXB0ZWQgIgotCQkJICAgICAgICIoZmM9MHglMDR4KSAoc3JjICVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHJ4LT5mYywgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMikpOworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAhaWVlZTgwMjExX2lzX2F1dGgoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJZ290byBpZ25vcmU7Ci0JfQogCiAJbWFjODAyMTFfZXZfbWljaGFlbF9taWNfZmFpbHVyZShyeC0+ZGV2LCBrZXlpZHgsIGhkcik7CiAgaWdub3JlOgpAQCAtMTcxMCw2NyArMTY1Miw1NyBAQAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAotdHlwZWRlZiBpZWVlODAyMTFfcnhfcmVzdWx0ICgqaWVlZTgwMjExX3J4X2hhbmRsZXIpKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqKTsKLXN0YXRpYyBpZWVlODAyMTFfcnhfaGFuZGxlciBpZWVlODAyMTFfcnhfaGFuZGxlcnNbXSA9Ci17Ci0JaWVlZTgwMjExX3J4X2hfaWZfc3RhdHMsCi0JaWVlZTgwMjExX3J4X2hfcGFzc2l2ZV9zY2FuLAotCWllZWU4MDIxMV9yeF9oX2NoZWNrLAotCWllZWU4MDIxMV9yeF9oX2RlY3J5cHQsCi0JaWVlZTgwMjExX3J4X2hfc3RhX3Byb2Nlc3MsCi0JaWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudCwKLQlpZWVlODAyMTFfcnhfaF9wc19wb2xsLAotCWllZWU4MDIxMV9yeF9oX21pY2hhZWxfbWljX3ZlcmlmeSwKLQkvKiB0aGlzIG11c3QgYmUgYWZ0ZXIgZGVjcnlwdGlvbiAtIHNvIGhlYWRlciBpcyBjb3VudGVkIGluIE1QRFUgbWljCi0JICogbXVzdCBiZSBiZWZvcmUgcGFlIGFuZCBkYXRhLCBzbyBRT1NfREFUQSBmb3JtYXQgZnJhbWVzCi0JICogYXJlIG5vdCBwYXNzZWQgdG8gdXNlciBzcGFjZSBieSB0aGVzZSBmdW5jdGlvbnMKLQkgKi8KLQlpZWVlODAyMTFfcnhfaF9yZW1vdmVfcW9zX2NvbnRyb2wsCi0JaWVlZTgwMjExX3J4X2hfYW1zZHUsCi0JaWVlZTgwMjExX3J4X2hfZGF0YSwKLQlpZWVlODAyMTFfcnhfaF9jdHJsLAotCWllZWU4MDIxMV9yeF9oX21nbXQsCi0JTlVMTAotfTsKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWllZWU4MDIxMV9yeF9oYW5kbGVyICpoYW5kbGVyOwogCWllZWU4MDIxMV9yeF9yZXN1bHQgcmVzID0gUlhfRFJPUF9NT05JVE9SOwogCiAJcngtPnNrYiA9IHNrYjsKIAlyeC0+c2RhdGEgPSBzZGF0YTsKIAlyeC0+ZGV2ID0gc2RhdGEtPmRldjsKIAotCWZvciAoaGFuZGxlciA9IGllZWU4MDIxMV9yeF9oYW5kbGVyczsgKmhhbmRsZXIgIT0gTlVMTDsgaGFuZGxlcisrKSB7Ci0JCXJlcyA9ICgqaGFuZGxlcikocngpOworI2RlZmluZSBDQUxMX1JYSChyeGgpCQlcCisJcmVzID0gcnhoKHJ4KTsJCVwKKwlpZiAocmVzICE9IFJYX0NPTlRJTlVFKQlcCisJCWdvdG8gcnhoX2RvbmU7CiAKLQkJc3dpdGNoIChyZXMpIHsKLQkJY2FzZSBSWF9DT05USU5VRToKLQkJCWNvbnRpbnVlOwotCQljYXNlIFJYX0RST1BfVU5VU0FCTEU6Ci0JCWNhc2UgUlhfRFJPUF9NT05JVE9SOgotCQkJSTgwMl9ERUJVR19JTkMoc2RhdGEtPmxvY2FsLT5yeF9oYW5kbGVyc19kcm9wKTsKLQkJCWlmIChyeC0+c3RhKQotCQkJCXJ4LT5zdGEtPnJ4X2Ryb3BwZWQrKzsKLQkJCWJyZWFrOwotCQljYXNlIFJYX1FVRVVFRDoKLQkJCUk4MDJfREVCVUdfSU5DKHNkYXRhLT5sb2NhbC0+cnhfaGFuZGxlcnNfcXVldWVkKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCX0KKwlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9wYXNzaXZlX3NjYW4pCisJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfY2hlY2spCisJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfZGVjcnlwdCkKKwlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9zdGFfcHJvY2VzcykKKwlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9kZWZyYWdtZW50KQorCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX3BzX3BvbGwpCisJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfbWljaGFlbF9taWNfdmVyaWZ5KQorCS8qIG11c3QgYmUgYWZ0ZXIgTU1JQyB2ZXJpZnkgc28gaGVhZGVyIGlzIGNvdW50ZWQgaW4gTVBEVSBtaWMgKi8KKwlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9yZW1vdmVfcW9zX2NvbnRyb2wpCisJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfYW1zZHUpCisJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfZGF0YSkKKwlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9jdHJsKQorCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX21nbXQpCiAKKyN1bmRlZiBDQUxMX1JYSAorCisgcnhoX2RvbmU6CiAJc3dpdGNoIChyZXMpIHsKLQljYXNlIFJYX0NPTlRJTlVFOgogCWNhc2UgUlhfRFJPUF9NT05JVE9SOgorCQlJODAyX0RFQlVHX0lOQyhzZGF0YS0+bG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3ApOworCQlpZiAocngtPnN0YSkKKwkJCXJ4LT5zdGEtPnJ4X2Ryb3BwZWQrKzsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBSWF9DT05USU5VRToKIAkJaWVlZTgwMjExX3J4X2Nvb2tlZF9tb25pdG9yKHJ4KTsKIAkJYnJlYWs7CiAJY2FzZSBSWF9EUk9QX1VOVVNBQkxFOgorCQlJODAyX0RFQlVHX0lOQyhzZGF0YS0+bG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3ApOworCQlpZiAocngtPnN0YSkKKwkJCXJ4LT5zdGEtPnJ4X2Ryb3BwZWQrKzsKIAkJZGV2X2tmcmVlX3NrYihyeC0+c2tiKTsKIAkJYnJlYWs7CisJY2FzZSBSWF9RVUVVRUQ6CisJCUk4MDJfREVCVUdfSU5DKHNkYXRhLT5sb2NhbC0+cnhfaGFuZGxlcnNfcXVldWVkKTsKKwkJYnJlYWs7CiAJfQogfQogCkBAIC0xODAxLDkgKzE3MzMsMTMgQEAKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6CiAJCWlmICghYnNzaWQpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYKLQkJICAgIChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikKKwkJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJaWYgKCFyeC0+c3RhKQorCQkJCXJ4LT5zdGEgPSBpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLT5kZXYsCisJCQkJCQlyeC0+c2tiLCBic3NpZCwgaGRyLT5hZGRyMiwKKwkJCQkJCUJJVChyeC0+c3RhdHVzLT5yYXRlX2lkeCkpOwogCQkJcmV0dXJuIDE7CisJCX0KIAkJZWxzZSBpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkgewogCQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKQogCQkJCXJldHVybiAwOwpAQCAtMTgxNiw3ICsxNzUyLDggQEAKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwogCQl9IGVsc2UgaWYgKCFyeC0+c3RhKQogCQkJcngtPnN0YSA9IGllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEtPmRldiwgcngtPnNrYiwKLQkJCQkJCQkgYnNzaWQsIGhkci0+YWRkcjIpOworCQkJCQkJYnNzaWQsIGhkci0+YWRkcjIsCisJCQkJCQlCSVQocngtPnN0YXR1cy0+cmF0ZV9pZHgpKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoIW11bHRpY2FzdCAmJgpAQCAtMTg0MCwxNSArMTc3Nyw5IEBACiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKIAkJfQotCQlpZiAoc2RhdGEtPmRldiA9PSBzZGF0YS0+bG9jYWwtPm1kZXYgJiYKLQkJICAgICEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKQotCQkJLyogZG8gbm90IHJlY2VpdmUgYW55dGhpbmcgdmlhCi0JCQkgKiBtYXN0ZXIgZGV2aWNlIHdoZW4gbm90IHNjYW5uaW5nICovCi0JCQlyZXR1cm4gMDsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6Ci0JCWlmIChic3NpZCB8fAotCQkgICAgKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSAhPSBJRUVFODAyMTFfRlRZUEVfREFUQSkKKwkJaWYgKGJzc2lkIHx8ICFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJcmV0dXJuIDA7CiAJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCBoZHItPmFkZHIyKSkKIAkJCXJldHVybiAwOwpAQCAtMTg3Miw3ICsxODAzLDYgQEAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKLQkJCQkJIHUzMiBsb2FkLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwpAQCAtMTg5MSw3ICsxODIxLDYgQEAKIAlyeC5sb2NhbCA9IGxvY2FsOwogCiAJcnguc3RhdHVzID0gc3RhdHVzOwotCXJ4LmxvYWQgPSBsb2FkOwogCXJ4LnJhdGUgPSByYXRlOwogCXJ4LmZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAl0eXBlID0gcnguZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRTsKQEAgLTIwMDAsNyArMTkyOSw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOwogCXUxNiBoZWFkX3NlcV9udW0sIGJ1Zl9zaXplOwogCWludCBpbmRleDsKLQl1MzIgcGt0X2xvYWQ7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwogCkBAIC0yMDM1LDEyICsxOTYzLDkgQEAKIAkJCQkJc2l6ZW9mKHN0YXR1cykpOwogCQkJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tzdGF0dXMuYmFuZF07CiAJCQkJcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbc3RhdHVzLnJhdGVfaWR4XTsKLQkJCQlwa3RfbG9hZCA9IGllZWU4MDIxMV9yeF9sb2FkX3N0YXRzKGxvY2FsLAotCQkJCQkJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdLAotCQkJCQkJJnN0YXR1cywgcmF0ZSk7CiAJCQkJX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywKIAkJCQkJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdLAotCQkJCQkmc3RhdHVzLCBwa3RfbG9hZCwgcmF0ZSk7CisJCQkJCSZzdGF0dXMsIHJhdGUpOwogCQkJCXRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bS0tOwogCQkJCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XSA9IE5VTEw7CiAJCQl9CkBAIC0yMDgyLDExICsyMDA3LDggQEAKIAkJCXNpemVvZihzdGF0dXMpKTsKIAkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW3N0YXR1cy5iYW5kXTsKIAkJcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbc3RhdHVzLnJhdGVfaWR4XTsKLQkJcGt0X2xvYWQgPSBpZWVlODAyMTFfcnhfbG9hZF9zdGF0cyhsb2NhbCwKLQkJCQkJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdLAotCQkJCQkmc3RhdHVzLCByYXRlKTsKIAkJX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdLAotCQkJCQkgICAgICZzdGF0dXMsIHBrdF9sb2FkLCByYXRlKTsKKwkJCQkJICAgICAmc3RhdHVzLCByYXRlKTsKIAkJdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtLS07CiAJCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XSA9IE5VTEw7CiAJCXRpZF9hZ2dfcngtPmhlYWRfc2VxX251bSA9IHNlcV9pbmModGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtKTsKQEAgLTIxMDMsMzIgKzIwMjUsMjkgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4OwotCXUxNiBmYywgc2M7CisJdTE2IHNjOwogCXUxNiBtcGR1X3NlcV9udW07Ci0JdTggcmV0ID0gMCwgKnFjOworCXU4IHJldCA9IDA7CiAJaW50IHRpZDsKIAogCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMik7CiAJaWYgKCFzdGEpCiAJCXJldHVybiByZXQ7CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0KIAkvKiBmaWx0ZXIgdGhlIFFvUyBkYXRhIHJ4IHN0cmVhbSBhY2NvcmRpbmcgdG8KIAkgKiBTVEEvVElEIGFuZCBjaGVjayBpZiB0aGlzIFNUQS9USUQgaXMgb24gYWdncmVnYXRpb24gKi8KLQlpZiAoIVdMQU5fRkNfSVNfUU9TX0RBVEEoZmMpKQorCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCWdvdG8gZW5kX3Jlb3JkZXI7CiAKLQlxYyA9IHNrYi0+ZGF0YSArIGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKSAtIFFPU19DT05UUk9MX0xFTjsKLQl0aWQgPSBxY1swXSAmIFFPU19DT05UUk9MX1RJRF9NQVNLOworCXRpZCA9ICppZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwogCiAJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpCiAJCWdvdG8gZW5kX3Jlb3JkZXI7CiAKIAl0aWRfYWdnX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdOwogCi0JLyogbnVsbCBkYXRhIGZyYW1lcyBhcmUgZXhjbHVkZWQgKi8KLQlpZiAodW5saWtlbHkoZmMgJiBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMpKQorCS8qIHFvcyBudWxsIGRhdGEgZnJhbWVzIGFyZSBleGNsdWRlZCAqLworCWlmICh1bmxpa2VseShoZHItPmZyYW1lX2NvbnRyb2wgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMpKSkKIAkJZ290byBlbmRfcmVvcmRlcjsKIAogCS8qIG5ldyB1bi1vcmRlcmVkIGFtcGR1IGZyYW1lIC0gcHJvY2VzcyBpdCAqLwpAQCAtMjE2NSw3ICsyMDg0LDYgQEAKIAkJICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0JdTMyIHBrdF9sb2FkOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAKQEAgLTIyMDUsMTEgKzIxMjMsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JcGt0X2xvYWQgPSBpZWVlODAyMTFfcnhfbG9hZF9zdGF0cyhsb2NhbCwgc2tiLCBzdGF0dXMsIHJhdGUpOwotCWxvY2FsLT5jaGFubmVsX3VzZV9yYXcgKz0gcGt0X2xvYWQ7Ci0KIAlpZiAoIWllZWU4MDIxMV9yeF9yZW9yZGVyX2FtcGR1KGxvY2FsLCBza2IpKQotCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBza2IsIHN0YXR1cywgcGt0X2xvYWQsIHJhdGUpOworCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBza2IsIHN0YXR1cywgcmF0ZSk7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggN2Q0ZmU0YS4uZjJiYTY1MyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTEzNSw2ICsxMzUsNyBAQAogLyoqCiAgKiBfX3N0YV9pbmZvX2ZyZWUgLSBpbnRlcm5hbCBTVEEgZnJlZSBoZWxwZXIKICAqCisgKiBAbG9jYWw6IHBvaW50ZXIgdG8gdGhlIGdsb2JhbCBpbmZvcm1hdGlvbgogICogQHN0YTogU1RBIGluZm8gdG8gZnJlZQogICoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCB1bmRvIGV2ZXJ5dGhpbmcgZG9uZSBieSBzdGFfaW5mb19hbGxvYygpCkBAIC0yMDIsMTQgKzIwMywxMiBAQAogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCiAJZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7Ci0JCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3J4KTsKKwkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXSkKIAkJICBkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXS0+c2Vzc2lvbl90aW1lcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfcngpOwotCQlzcGluX2xvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CiAJCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldKQogCQkgIGRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5hZGRiYV9yZXNwX3RpbWVyKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCX0KIAogCV9fc3RhX2luZm9fZnJlZShsb2NhbCwgc3RhKTsKQEAgLTIzNiw2ICsyMzUsOSBAQAogCWlmICghc3RhKQogCQlyZXR1cm4gTlVMTDsKIAorCXNwaW5fbG9ja19pbml0KCZzdGEtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZzdGEtPmZsYWdsb2NrKTsKKwogCW1lbWNweShzdGEtPmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKIAlzdGEtPmxvY2FsID0gbG9jYWw7CiAJc3RhLT5zZGF0YSA9IHNkYXRhOwpAQCAtMjQ5LDE1ICsyNTEsMTMgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV9yeCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CiAJZm9yIChpID0gMDsgaSA8IFNUQV9USURfTlVNOyBpKyspIHsKIAkJLyogdGltZXJfdG9fdGlkIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBpZGVudGl0eSBtYXBwaW5nIHRvCiAJCSAqIGVuYWJsZSBzZXNzaW9uX3RpbWVyJ3MgZGF0YSBkaWZmZXJlbnRpYXRpb24uIHJlZmVyIHRvCiAJCSAqIHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkIGZvciB1c2VhZ2UgKi8KIAkJc3RhLT50aW1lcl90b190aWRbaV0gPSBpOwogCQkvKiB0aWQgdG8gdHggcXVldWU6IGluaXRpYWxpemUgYWNjb3JkaW5nIHRvIEhXICgwIGlzIHZhbGlkKSAqLwotCQlzdGEtPnRpZF90b190eF9xW2ldID0gbG9jYWwtPmh3LnF1ZXVlczsKKwkJc3RhLT50aWRfdG9fdHhfcVtpXSA9IGllZWU4MDIxMV9udW1fcXVldWVzKCZsb2NhbC0+aHcpOwogCQkvKiByeCAqLwogCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldID0gSFRfQUdHX1NUQVRFX0lETEU7CiAJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0gPSBOVUxMOwpAQCAtMjc2LDcgKzI3Niw2IEBACiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19MSVNURU47Ci0Jc3Bpbl9sb2NrX2luaXQoJnN0YS0+cGxpbmtfbG9jayk7CiAJaW5pdF90aW1lcigmc3RhLT5wbGlua190aW1lcik7CiAjZW5kaWYKIApAQCAtMzIxLDcgKzMyMCw5IEBACiAJLyogbm90aWZ5IGRyaXZlciAqLwogCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KSB7CiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTikKLQkJCXNkYXRhID0gc2RhdGEtPnUudmxhbi5hcDsKKwkJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkJICAgICB1LmFwKTsKIAogCQlsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KGxvY2FsX3RvX2h3KGxvY2FsKSwgJnNkYXRhLT52aWYsCiAJCQkJICAgICAgIFNUQV9OT1RJRllfQURELCBzdGEtPmFkZHIpOwpAQCAtMzc2LDggKzM3NywxMCBAQAogc3RhdGljIHZvaWQgX19zdGFfaW5mb19zZXRfdGltX2JpdChzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICpic3MsCiAJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7Ci0JaWYgKGJzcykKLQkJX19ic3NfdGltX3NldChic3MsIHN0YS0+YWlkKTsKKwlCVUdfT04oIWJzcyk7CisKKwlfX2Jzc190aW1fc2V0KGJzcywgc3RhLT5haWQpOworCiAJaWYgKHN0YS0+bG9jYWwtPm9wcy0+c2V0X3RpbSkgewogCQlzdGEtPmxvY2FsLT50aW1faW5fbG9ja2VkX3NlY3Rpb24gPSB0cnVlOwogCQlzdGEtPmxvY2FsLT5vcHMtPnNldF90aW0obG9jYWxfdG9faHcoc3RhLT5sb2NhbCksIHN0YS0+YWlkLCAxKTsKQEAgLTM4OSw2ICszOTIsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlCVUdfT04oIXN0YS0+c2RhdGEtPmJzcyk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT5sb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKIAlfX3N0YV9pbmZvX3NldF90aW1fYml0KHN0YS0+c2RhdGEtPmJzcywgc3RhKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwpAQCAtMzk3LDggKzQwMiwxMCBAQAogc3RhdGljIHZvaWQgX19zdGFfaW5mb19jbGVhcl90aW1fYml0KHN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmJzcywKIAkJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewotCWlmIChic3MpCi0JCV9fYnNzX3RpbV9jbGVhcihic3MsIHN0YS0+YWlkKTsKKwlCVUdfT04oIWJzcyk7CisKKwlfX2Jzc190aW1fY2xlYXIoYnNzLCBzdGEtPmFpZCk7CisKIAlpZiAoc3RhLT5sb2NhbC0+b3BzLT5zZXRfdGltKSB7CiAJCXN0YS0+bG9jYWwtPnRpbV9pbl9sb2NrZWRfc2VjdGlvbiA9IHRydWU7CiAJCXN0YS0+bG9jYWwtPm9wcy0+c2V0X3RpbShsb2NhbF90b19odyhzdGEtPmxvY2FsKSwgc3RhLT5haWQsIDApOwpAQCAtNDEwLDYgKzQxNyw4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCUJVR19PTighc3RhLT5zZGF0YS0+YnNzKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZzdGEtPmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwogCV9fc3RhX2luZm9fY2xlYXJfdGltX2JpdChzdGEtPnNkYXRhLT5ic3MsIHN0YSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhLT5sb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTQzNywxMCArNDQ2LDEwIEBACiAKIAlsaXN0X2RlbCgmKCpzdGEpLT5saXN0KTsKIAotCWlmICgoKnN0YSktPmZsYWdzICYgV0xBTl9TVEFfUFMpIHsKLQkJKCpzdGEpLT5mbGFncyAmPSB+V0xBTl9TVEFfUFM7Ci0JCWlmIChzZGF0YS0+YnNzKQotCQkJYXRvbWljX2RlYygmc2RhdGEtPmJzcy0+bnVtX3N0YV9wcyk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX3N0YV9mbGFncygqc3RhLCBXTEFOX1NUQV9QUykpIHsKKwkJQlVHX09OKCFzZGF0YS0+YnNzKTsKKworCQlhdG9taWNfZGVjKCZzZGF0YS0+YnNzLT5udW1fc3RhX3BzKTsKIAkJX19zdGFfaW5mb19jbGVhcl90aW1fYml0KHNkYXRhLT5ic3MsICpzdGEpOwogCX0KIApAQCAtNDQ4LDcgKzQ1Nyw5IEBACiAKIAlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgewogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4pCi0JCQlzZGF0YSA9IHNkYXRhLT51LnZsYW4uYXA7CisJCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAorCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJCSAgICAgdS5hcCk7CiAKIAkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeShsb2NhbF90b19odyhsb2NhbCksICZzZGF0YS0+dmlmLAogCQkJCSAgICAgICBTVEFfTk9USUZZX1JFTU9WRSwgKCpzdGEpLT5hZGRyKTsKQEAgLTUxNSwyMCArNTI2LDIwIEBACiAJCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICpwa3RfZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJaW50IHRpbWVvdXQ7CiAKIAlpZiAoIXNrYikKIAkJcmV0dXJuIDA7CiAKLQlwa3RfZGF0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICopIHNrYi0+Y2I7CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCS8qIFRpbWVvdXQ6ICgyICogbGlzdGVuX2ludGVydmFsICogYmVhY29uX2ludCAqIDEwMjQgLyAxMDAwMDAwKSBzZWMgKi8KIAl0aW1lb3V0ID0gKHN0YS0+bGlzdGVuX2ludGVydmFsICogbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCAqIDMyIC8KIAkJICAgMTU2MjUpICogSFo7CiAJaWYgKHRpbWVvdXQgPCBTVEFfVFhfQlVGRkVSX0VYUElSRSkKIAkJdGltZW91dCA9IFNUQV9UWF9CVUZGRVJfRVhQSVJFOwotCXJldHVybiB0aW1lX2FmdGVyKGppZmZpZXMsIHBrdF9kYXRhLT5qaWZmaWVzICsgdGltZW91dCk7CisJcmV0dXJuIHRpbWVfYWZ0ZXIoamlmZmllcywgaW5mby0+Y29udHJvbC5qaWZmaWVzICsgdGltZW91dCk7CiB9CiAKIApAQCAtNTU3LDggKzU2OCwxMCBAQAogCiAJCXNkYXRhID0gc3RhLT5zZGF0YTsKIAkJbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkLS07CisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkJ1ZmZlcmVkIGZyYW1lIGV4cGlyZWQgKFNUQSAiCiAJCSAgICAgICAiJXMpXG4iLCBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpKTsKKyNlbmRpZgogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc3RhLT5wc190eF9idWYpKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAppbmRleCBmOGM5NWJjLi4xMDlkYjc4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAorKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtMzIsNyArMzIsNyBAQAogICogQFdMQU5fU1RBX1dEUzogU3RhdGlvbiBpcyBvbmUgb2Ygb3VyIFdEUyBwZWVycy4KICAqIEBXTEFOX1NUQV9QU1BPTEw6IFN0YXRpb24gaGFzIGp1c3QgUFMtcG9sbGVkIHVzLgogICogQFdMQU5fU1RBX0NMRUFSX1BTX0ZJTFQ6IENsZWFyIFBTIGZpbHRlciBpbiBoYXJkd2FyZSAodXNpbmcgdGhlCi0gKglJRUVFODAyMTFfVFhDVExfQ0xFQVJfUFNfRklMVCBjb250cm9sIGZsYWcpIHdoZW4gdGhlIG5leHQKKyAqCUlFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCBjb250cm9sIGZsYWcpIHdoZW4gdGhlIG5leHQKICAqCWZyYW1lIHRvIHRoaXMgc3RhdGlvbiBpcyB0cmFuc21pdHRlZC4KICAqLwogZW51bSBpZWVlODAyMTFfc3RhX2luZm9fZmxhZ3MgewpAQCAtMTI5LDIzICsxMjksMTkgQEAKICAqCiAgKiBAdGlkX3N0YXRlX3J4OiBUSUQncyBzdGF0ZSBpbiBSeCBzZXNzaW9uIHN0YXRlIG1hY2hpbmUuCiAgKiBAdGlkX3J4OiBhZ2dyZWdhdGlvbiBpbmZvIGZvciBSeCBwZXIgVElECi0gKiBAYW1wZHVfcng6IGZvciBsb2NraW5nIHNlY3Rpb25zIGluIGFnZ3JlZ2F0aW9uIFJ4IGZsb3cKICAqIEB0aWRfc3RhdGVfdHg6IFRJRCdzIHN0YXRlIGluIFR4IHNlc3Npb24gc3RhdGUgbWFjaGluZS4KICAqIEB0aWRfdHg6IGFnZ3JlZ2F0aW9uIGluZm8gZm9yIFR4IHBlciBUSUQKICAqIEBhZGRiYV9yZXFfbnVtOiBudW1iZXIgb2YgdGltZXMgYWRkQkEgcmVxdWVzdCBoYXMgYmVlbiBzZW50LgotICogQGFtcGR1X3R4OiBmb3IgbG9ja2luZyBzZWN0aW9uc2kgaW4gYWdncmVnYXRpb24gVHggZmxvdwogICogQGRpYWxvZ190b2tlbl9hbGxvY2F0b3I6IGRpYWxvZyB0b2tlbiBlbnVtZXJhdG9yIGZvciBlYWNoIG5ldyBzZXNzaW9uOwogICovCiBzdHJ1Y3Qgc3RhX2FtcGR1X21sbWUgewogCS8qIHJ4ICovCiAJdTggdGlkX3N0YXRlX3J4W1NUQV9USURfTlVNXTsKIAlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfcnhbU1RBX1RJRF9OVU1dOwotCXNwaW5sb2NrX3QgYW1wZHVfcng7CiAJLyogdHggKi8KIAl1OCB0aWRfc3RhdGVfdHhbU1RBX1RJRF9OVU1dOwogCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eFtTVEFfVElEX05VTV07CiAJdTggYWRkYmFfcmVxX251bVtTVEFfVElEX05VTV07Ci0Jc3BpbmxvY2tfdCBhbXBkdV90eDsKIAl1OCBkaWFsb2dfdG9rZW5fYWxsb2NhdG9yOwogfTsKIApAQCAtMTY0LDkgKzE2MCwyMCBAQAogICogQGxpc3Q6IGdsb2JhbCBsaW5rZWQgbGlzdCBlbnRyeQogICogQGhuZXh0OiBoYXNoIHRhYmxlIGxpbmtlZCBsaXN0IHBvaW50ZXIKICAqIEBsb2NhbDogcG9pbnRlciB0byB0aGUgZ2xvYmFsIGluZm9ybWF0aW9uCisgKiBAc2RhdGE6IFRCRAorICogQGtleTogVEJECisgKiBAcmF0ZV9jdHJsOiBUQkQKKyAqIEByYXRlX2N0cmxfcHJpdjogVEJECisgKiBAbG9jazogdXNlZCBmb3IgbG9ja2luZyBhbGwgZmllbGRzIHRoYXQgcmVxdWlyZSBsb2NraW5nLCBzZWUgY29tbWVudHMKKyAqCWluIHRoZSBoZWFkZXIgZmlsZS4KKyAqIEBmbGFnbG9jazogc3BpbmxvY2sgZm9yIGZsYWdzIGFjY2Vzc2VzCisgKiBAaHRfaW5mbzogSFQgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBCisgKiBAc3VwcF9yYXRlczogQml0bWFwIG9mIHN1cHBvcnRlZCByYXRlcyAocGVyIGJhbmQpCiAgKiBAYWRkcjogTUFDIGFkZHJlc3Mgb2YgdGhpcyBTVEEKICAqIEBhaWQ6IFNUQSdzIHVuaXF1ZSBBSUQgKDEuLjIwMDcsIDAgPSBub3QgYXNzaWduZWQgeWV0KSwKICAqCW9ubHkgdXNlZCBpbiBBUCAoYW5kIElCU1M/KSBtb2RlCisgKiBAbGlzdGVuX2ludGVydmFsOiBUQkQKKyAqIEBwaW5fc3RhdHVzOiBUQkQKICAqIEBmbGFnczogU1RBIGZsYWdzLCBzZWUgJmVudW0gaWVlZTgwMjExX3N0YV9pbmZvX2ZsYWdzCiAgKiBAcHNfdHhfYnVmOiBidWZmZXIgb2YgZnJhbWVzIHRvIHRyYW5zbWl0IHRvIHRoaXMgc3RhdGlvbgogICoJd2hlbiBpdCBsZWF2ZXMgcG93ZXIgc2F2aW5nIHN0YXRlCkBAIC0xNzUsOCArMTgyLDQxIEBACiAgKglwb3dlciBzYXZpbmcgc3RhdGUKICAqIEByeF9wYWNrZXRzOiBOdW1iZXIgb2YgTVNEVXMgcmVjZWl2ZWQgZnJvbSB0aGlzIFNUQQogICogQHJ4X2J5dGVzOiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgZnJvbSB0aGlzIFNUQQotICogQHN1cHBfcmF0ZXM6IEJpdG1hcCBvZiBzdXBwb3J0ZWQgcmF0ZXMgKHBlciBiYW5kKQotICogQGh0X2luZm86IEhUIGNhcGFiaWxpdGllcyBvZiB0aGlzIFNUQQorICogQHdlcF93ZWFrX2l2X2NvdW50OiBUQkQKKyAqIEBsYXN0X3J4OiBUQkQKKyAqIEBudW1fZHVwbGljYXRlczogbnVtYmVyIG9mIGR1cGxpY2F0ZSBmcmFtZXMgcmVjZWl2ZWQgZnJvbSB0aGlzIFNUQQorICogQHJ4X2ZyYWdtZW50czogbnVtYmVyIG9mIHJlY2VpdmVkIE1QRFVzCisgKiBAcnhfZHJvcHBlZDogbnVtYmVyIG9mIGRyb3BwZWQgTVBEVXMgZnJvbSB0aGlzIFNUQQorICogQGxhc3Rfc2lnbmFsOiBzaWduYWwgb2YgbGFzdCByZWNlaXZlZCBmcmFtZSBmcm9tIHRoaXMgU1RBCisgKiBAbGFzdF9xdWFsOiBxdWFsIG9mIGxhc3QgcmVjZWl2ZWQgZnJhbWUgZnJvbSB0aGlzIFNUQQorICogQGxhc3Rfbm9pc2U6IG5vaXNlIG9mIGxhc3QgcmVjZWl2ZWQgZnJhbWUgZnJvbSB0aGlzIFNUQQorICogQGxhc3Rfc2VxX2N0cmw6IGxhc3QgcmVjZWl2ZWQgc2VxL2ZyYWcgbnVtYmVyIGZyb20gdGhpcyBTVEEgKHBlciBSWCBxdWV1ZSkKKyAqIEB3bWVfcnhfcXVldWU6IFRCRAorICogQHR4X2ZpbHRlcmVkX2NvdW50OiBUQkQKKyAqIEB0eF9yZXRyeV9mYWlsZWQ6IFRCRAorICogQHR4X3JldHJ5X2NvdW50OiBUQkQKKyAqIEB0eF9udW1fY29uc2VjdXRpdmVfZmFpbHVyZXM6IFRCRAorICogQHR4X251bV9tcGR1X29rOiBUQkQKKyAqIEB0eF9udW1fbXBkdV9mYWlsOiBUQkQKKyAqIEBmYWlsX2F2ZzogbW92aW5nIHBlcmNlbnRhZ2Ugb2YgZmFpbGVkIE1TRFVzCisgKiBAdHhfcGFja2V0czogbnVtYmVyIG9mIFJYL1RYIE1TRFVzCisgKiBAdHhfYnl0ZXM6IFRCRAorICogQHR4X2ZyYWdtZW50czogbnVtYmVyIG9mIHRyYW5zbWl0dGVkIE1QRFVzCisgKiBAdHhyYXRlX2lkeDogVEJECisgKiBAbGFzdF90eHJhdGVfaWR4OiBUQkQKKyAqIEB3bWVfdHhfcXVldWU6IFRCRAorICogQGFtcGR1X21sbWU6IFRCRAorICogQHRpbWVyX3RvX3RpZDogaWRlbnRpdHkgbWFwcGluZyB0byBJRCB0aW1lcnMKKyAqIEB0aWRfdG9fdHhfcTogbWFwIHRpZCB0byB0eCBxdWV1ZQorICogQGxsaWQ6IExvY2FsIGxpbmsgSUQKKyAqIEBwbGlkOiBQZWVyIGxpbmsgSUQKKyAqIEByZWFzb246IENhbmNlbCByZWFzb24gb24gUExJTktfSE9MRElORyBzdGF0ZQorICogQHBsaW5rX3JldHJpZXM6IFJldHJpZXMgaW4gZXN0YWJsaXNobWVudAorICogQGlnbm9yZV9wbGlua190aW1lcjogVEJECisgKiBAcGxpbmtfc3RhdGUgcGxpbmtfc3RhdGU6IFRCRAorICogQHBsaW5rX3RpbWVvdXQ6IFRCRAorICogQHBsaW5rX3RpbWVyOiBUQkQKKyAqIEBkZWJ1Z2ZzOiBkZWJ1ZyBmaWxlc3lzdGVtIGluZm8KICAqLwogc3RydWN0IHN0YV9pbmZvIHsKIAkvKiBHZW5lcmFsIGluZm9ybWF0aW9uLCBtb3N0bHkgc3RhdGljICovCkBAIC0xODcsNiArMjI3LDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwogCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyYXRlX2N0cmw7CiAJdm9pZCAqcmF0ZV9jdHJsX3ByaXY7CisJc3BpbmxvY2tfdCBsb2NrOworCXNwaW5sb2NrX3QgZmxhZ2xvY2s7CiAJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvIGh0X2luZm87CiAJdTY0IHN1cHBfcmF0ZXNbSUVFRTgwMjExX05VTV9CQU5EU107CiAJdTggYWRkcltFVEhfQUxFTl07CkBAIC0xOTksNyArMjQxLDEwIEBACiAJICovCiAJdTggcGluX3N0YXR1czsKIAotCS8qIGZyZXF1ZW50bHkgdXBkYXRlZCBpbmZvcm1hdGlvbiwgbmVlZHMgbG9ja2luZz8gKi8KKwkvKgorCSAqIGZyZXF1ZW50bHkgdXBkYXRlZCwgbG9ja2VkIHdpdGggb3duIHNwaW5sb2NrIChmbGFnbG9jayksCisJICogdXNlIHRoZSBhY2Nlc3NvcnMgZGVmaW5lZCBiZWxvdworCSAqLwogCXUzMiBmbGFnczsKIAogCS8qCkBAIC0yMTMsMTQgKzI1OCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0cywgcnhfYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyB3ZXBfd2Vha19pdl9jb3VudDsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfcng7Ci0JdW5zaWduZWQgbG9uZyBudW1fZHVwbGljYXRlczsgLyogbnVtYmVyIG9mIGR1cGxpY2F0ZSBmcmFtZXMgcmVjZWl2ZWQKLQkJCQkgICAgICAgKiBmcm9tIHRoaXMgU1RBICovCi0JdW5zaWduZWQgbG9uZyByeF9mcmFnbWVudHM7IC8qIG51bWJlciBvZiByZWNlaXZlZCBNUERVcyAqLwotCXVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsgLyogbnVtYmVyIG9mIGRyb3BwZWQgTVBEVXMgZnJvbSB0aGlzIFNUQSAqLwotCWludCBsYXN0X3Jzc2k7IC8qIFJTU0kgb2YgbGFzdCByZWNlaXZlZCBmcmFtZSBmcm9tIHRoaXMgU1RBICovCi0JaW50IGxhc3Rfc2lnbmFsOyAvKiBzaWduYWwgb2YgbGFzdCByZWNlaXZlZCBmcmFtZSBmcm9tIHRoaXMgU1RBICovCi0JaW50IGxhc3Rfbm9pc2U7IC8qIG5vaXNlIG9mIGxhc3QgcmVjZWl2ZWQgZnJhbWUgZnJvbSB0aGlzIFNUQSAqLwotCS8qIGxhc3QgcmVjZWl2ZWQgc2VxL2ZyYWcgbnVtYmVyIGZyb20gdGhpcyBTVEEgKHBlciBSWCBxdWV1ZSkgKi8KKwl1bnNpZ25lZCBsb25nIG51bV9kdXBsaWNhdGVzOworCXVuc2lnbmVkIGxvbmcgcnhfZnJhZ21lbnRzOworCXVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsKKwlpbnQgbGFzdF9zaWduYWw7CisJaW50IGxhc3RfcXVhbDsKKwlpbnQgbGFzdF9ub2lzZTsKIAlfX2xlMTYgbGFzdF9zZXFfY3RybFtOVU1fUlhfREFUQV9RVUVVRVNdOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSUwogCXVuc2lnbmVkIGludCB3bWVfcnhfcXVldWVbTlVNX1JYX0RBVEFfUVVFVUVTXTsKQEAgLTIzNyw0MiArMjgwLDM2IEBACiAJdW5zaWduZWQgaW50IGZhaWxfYXZnOwogCiAJLyogVXBkYXRlZCBmcm9tIFRYIHBhdGggb25seSwgbm8gbG9ja2luZyByZXF1aXJlbWVudHMgKi8KLQl1bnNpZ25lZCBsb25nIHR4X3BhY2tldHM7IC8qIG51bWJlciBvZiBSWC9UWCBNU0RVcyAqLworCXVuc2lnbmVkIGxvbmcgdHhfcGFja2V0czsKIAl1bnNpZ25lZCBsb25nIHR4X2J5dGVzOwotCXVuc2lnbmVkIGxvbmcgdHhfZnJhZ21lbnRzOyAvKiBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgTVBEVXMgKi8KKwl1bnNpZ25lZCBsb25nIHR4X2ZyYWdtZW50czsKIAlpbnQgdHhyYXRlX2lkeDsKIAlpbnQgbGFzdF90eHJhdGVfaWR4OworCXUxNiB0aWRfc2VxW0lFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLICsgMV07CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiAJdW5zaWduZWQgaW50IHdtZV90eF9xdWV1ZVtOVU1fUlhfREFUQV9RVUVVRVNdOwogI2VuZGlmCiAKLQkvKiBEZWJ1ZyBjb3VudGVycywgbm8gbG9ja2luZyBkb2Vzbid0IG1hdHRlciAqLwotCWludCBjaGFubmVsX3VzZTsKLQlpbnQgY2hhbm5lbF91c2VfcmF3OwotCiAJLyoKLQkgKiBBZ2dyZWdhdGlvbiBpbmZvcm1hdGlvbiwgY29tZXMgd2l0aCBvd24gbG9ja2luZy4KKwkgKiBBZ2dyZWdhdGlvbiBpbmZvcm1hdGlvbiwgbG9ja2VkIHdpdGggbG9jay4KIAkgKi8KIAlzdHJ1Y3Qgc3RhX2FtcGR1X21sbWUgYW1wZHVfbWxtZTsKLQl1OCB0aW1lcl90b190aWRbU1RBX1RJRF9OVU1dOwkvKiBpZGVudGl0eSBtYXBwaW5nIHRvIElEIHRpbWVycyAqLwotCXU4IHRpZF90b190eF9xW1NUQV9USURfTlVNXTsJLyogbWFwIHRpZCB0byB0eCBxdWV1ZSAqLworCXU4IHRpbWVyX3RvX3RpZFtTVEFfVElEX05VTV07CisJdTggdGlkX3RvX3R4X3FbU1RBX1RJRF9OVU1dOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAkvKgogCSAqIE1lc2ggcGVlciBsaW5rIGF0dHJpYnV0ZXMKIAkgKiBUT0RPOiBtb3ZlIHRvIGEgc3ViLXN0cnVjdHVyZSB0aGF0IGlzIHJlZmVyZW5jZWQgd2l0aCBwb2ludGVyPwogCSAqLwotCV9fbGUxNiBsbGlkOwkJLyogTG9jYWwgbGluayBJRCAqLwotCV9fbGUxNiBwbGlkOwkJLyogUGVlciBsaW5rIElEICovCi0JX19sZTE2IHJlYXNvbjsJCS8qIENhbmNlbCByZWFzb24gb24gUExJTktfSE9MRElORyBzdGF0ZSAqLwotCXU4IHBsaW5rX3JldHJpZXM7CS8qIFJldHJpZXMgaW4gZXN0YWJsaXNobWVudCAqLworCV9fbGUxNiBsbGlkOworCV9fbGUxNiBwbGlkOworCV9fbGUxNiByZWFzb247CisJdTggcGxpbmtfcmV0cmllczsKIAlib29sIGlnbm9yZV9wbGlua190aW1lcjsKIAllbnVtIHBsaW5rX3N0YXRlIHBsaW5rX3N0YXRlOwogCXUzMiBwbGlua190aW1lb3V0OwogCXN0cnVjdCB0aW1lcl9saXN0IHBsaW5rX3RpbWVyOwotCXNwaW5sb2NrX3QgcGxpbmtfbG9jazsJLyogRm9yIHBlZXJfc3RhdGUgcmVhZHMgLyB1cGRhdGVzIGFuZCBvdGhlcgotCQkJCSAgIHVwZGF0ZXMgaW4gdGhlIHN0cnVjdHVyZS4gRW5zdXJlcyByb2J1c3QKLQkJCQkgICB0cmFuc2l0aW9ucyBmb3IgdGhlIHBlZXJsaW5rIEZTTSAqLwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwpAQCAtMjk5LDYgKzMzNiw3MyBAQAogCXJldHVybiBQTElOS19MSVNURU47CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3RhX2ZsYWdzKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBjb25zdCB1MzIgZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzdGEtPmZsYWdsb2NrLCBpcnFmbCk7CisJc3RhLT5mbGFncyB8PSBmbGFnczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmZsYWdsb2NrLCBpcnFmbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zdGFfZmxhZ3Moc3RydWN0IHN0YV9pbmZvICpzdGEsIGNvbnN0IHUzMiBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YS0+ZmxhZ2xvY2ssIGlycWZsKTsKKwlzdGEtPmZsYWdzICY9IH5mbGFnczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmZsYWdsb2NrLCBpcnFmbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYW5kX2NsZWFyX3N0YV9mbGFncyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCQkJICAgY29uc3QgdTMyIHNldCwgY29uc3QgdTMyIGNsZWFyKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT5mbGFnbG9jaywgaXJxZmwpOworCXN0YS0+ZmxhZ3MgfD0gc2V0OworCXN0YS0+ZmxhZ3MgJj0gfmNsZWFyOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YS0+ZmxhZ2xvY2ssIGlycWZsKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgdGVzdF9zdGFfZmxhZ3Moc3RydWN0IHN0YV9pbmZvICpzdGEsIGNvbnN0IHUzMiBmbGFncykKK3sKKwl1MzIgcmV0OworCXVuc2lnbmVkIGxvbmcgaXJxZmw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT5mbGFnbG9jaywgaXJxZmwpOworCXJldCA9IHN0YS0+ZmxhZ3MgJiBmbGFnczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmZsYWdsb2NrLCBpcnFmbCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiB0ZXN0X2FuZF9jbGVhcl9zdGFfZmxhZ3Moc3RydWN0IHN0YV9pbmZvICpzdGEsCisJCQkJCSAgIGNvbnN0IHUzMiBmbGFncykKK3sKKwl1MzIgcmV0OworCXVuc2lnbmVkIGxvbmcgaXJxZmw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT5mbGFnbG9jaywgaXJxZmwpOworCXJldCA9IHN0YS0+ZmxhZ3MgJiBmbGFnczsKKwlzdGEtPmZsYWdzICY9IH5mbGFnczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmZsYWdsb2NrLCBpcnFmbCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfc3RhX2ZsYWdzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCXUzMiByZXQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzdGEtPmZsYWdsb2NrLCBpcnFmbCk7CisJcmV0ID0gc3RhLT5mbGFnczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmZsYWdsb2NrLCBpcnFmbCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnRseSByZWdpc3RlcmVkIHN0YXRpb25zICovCiAjZGVmaW5lIE1BWF9TVEFfQ09VTlQgMjAwNwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RraXAuYyBiL25ldC9tYWM4MDIxMS90a2lwLmMKaW5kZXggMDkwOTNkYS4uOTk1ZjdhZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RraXAuYworKysgYi9uZXQvbWFjODAyMTEvdGtpcC5jCkBAIC02LDI1ICs2LDIzIEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAia2V5LmgiCiAjaW5jbHVkZSAidGtpcC5oIgogI2luY2x1ZGUgIndlcC5oIgogCi0KLS8qIFRLSVAga2V5IG1peGluZyBmdW5jdGlvbnMgKi8KLQotCiAjZGVmaW5lIFBIQVNFMV9MT09QX0NPVU5UIDgKIAotCi0vKiAyLWJ5dGUgYnkgMi1ieXRlIHN1YnNldCBvZiB0aGUgZnVsbCBBRVMgUy1ib3ggdGFibGU7IHNlY29uZCBwYXJ0IG9mIHRoaXMKLSAqIHRhYmxlIGlzIGlkZW50aWNhbCB0byBmaXJzdCBwYXJ0IGJ1dCBieXRlLXN3YXBwZWQgKi8KKy8qCisgKiAyLWJ5dGUgYnkgMi1ieXRlIHN1YnNldCBvZiB0aGUgZnVsbCBBRVMgUy1ib3ggdGFibGU7IHNlY29uZCBwYXJ0IG9mIHRoaXMKKyAqIHRhYmxlIGlzIGlkZW50aWNhbCB0byBmaXJzdCBwYXJ0IGJ1dCBieXRlLXN3YXBwZWQKKyAqLwogc3RhdGljIGNvbnN0IHUxNiB0a2lwX3Nib3hbMjU2XSA9CiB7CiAJMHhDNkE1LCAweEY4ODQsIDB4RUU5OSwgMHhGNjhELCAweEZGMEQsIDB4RDZCRCwgMHhERUIxLCAweDkxNTQsCkBAIC02MSw4NCArNTksNTQgQEAKIAkweDgyQzMsIDB4MjlCMCwgMHg1QTc3LCAweDFFMTEsIDB4N0JDQiwgMHhBOEZDLCAweDZERDYsIDB4MkMzQSwKIH07CiAKLQotc3RhdGljIGlubGluZSB1MTYgTWsxNih1OCB4LCB1OCB5KQorc3RhdGljIHUxNiB0a2lwUyh1MTYgdmFsKQogewotCXJldHVybiAoKHUxNikgeCA8PCA4KSB8ICh1MTYpIHk7CisJcmV0dXJuIHRraXBfc2JveFt2YWwgJiAweGZmXSBeIHN3YWIxNih0a2lwX3Nib3hbdmFsID4+IDhdKTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIHU4IEhpOCh1MTYgdikKK3N0YXRpYyB1OCAqd3JpdGVfdGtpcF9pdih1OCAqcG9zLCB1MTYgaXYxNikKIHsKLQlyZXR1cm4gdiA+PiA4OworCSpwb3MrKyA9IGl2MTYgPj4gODsKKwkqcG9zKysgPSAoKGl2MTYgPj4gOCkgfCAweDIwKSAmIDB4N2Y7CisJKnBvcysrID0gaXYxNiAmIDB4RkY7CisJcmV0dXJuIHBvczsKIH0KIAotCi1zdGF0aWMgaW5saW5lIHU4IExvOCh1MTYgdikKLXsKLQlyZXR1cm4gdiAmIDB4ZmY7Ci19Ci0KLQotc3RhdGljIGlubGluZSB1MTYgSGkxNih1MzIgdikKLXsKLQlyZXR1cm4gdiA+PiAxNjsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHUxNiBMbzE2KHUzMiB2KQotewotCXJldHVybiB2ICYgMHhmZmZmOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdTE2IFJvdFIxKHUxNiB2KQotewotCXJldHVybiAodiA+PiAxKSB8ICgodiAmIDB4MDAwMSkgPDwgMTUpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdTE2IHRraXBfUyh1MTYgdmFsKQotewotCXUxNiBhID0gdGtpcF9zYm94W0hpOCh2YWwpXTsKLQotCXJldHVybiB0a2lwX3Nib3hbTG84KHZhbCldIF4gSGk4KGEpIF4gKExvOChhKSA8PCA4KTsKLX0KLQotCi0KLS8qIFAxSyA6PSBQaGFzZTEoVEEsIFRLLCBUU0MpCisvKgorICogUDFLIDo9IFBoYXNlMShUQSwgVEssIFRTQykKICAqIFRBID0gdHJhbnNtaXR0ZXIgYWRkcmVzcyAoNDggYml0cykKICAqIFRLID0gZG90MTFEZWZhdWx0S2V5VmFsdWUgb3IgZG90MTFLZXlNYXBwaW5nVmFsdWUgKDEyOCBiaXRzKQogICogVFNDID0gVEtJUCBzZXF1ZW5jZSBjb3VudGVyICg0OCBiaXRzLCBvbmx5IDMyIG1zYiBiaXRzIHVzZWQpCiAgKiBQMUs6IDgwIGJpdHMKICAqLwotc3RhdGljIHZvaWQgdGtpcF9taXhpbmdfcGhhc2UxKGNvbnN0IHU4ICp0YSwgY29uc3QgdTggKnRrLCB1MzIgdHNjX0lWMzIsCi0JCQkgICAgICAgdTE2ICpwMWspCitzdGF0aWMgdm9pZCB0a2lwX21peGluZ19waGFzZTEoY29uc3QgdTggKnRrLCBzdHJ1Y3QgdGtpcF9jdHggKmN0eCwKKwkJCSAgICAgICBjb25zdCB1OCAqdGEsIHUzMiB0c2NfSVYzMikKIHsKIAlpbnQgaSwgajsKKwl1MTYgKnAxayA9IGN0eC0+cDFrOwogCi0JcDFrWzBdID0gTG8xNih0c2NfSVYzMik7Ci0JcDFrWzFdID0gSGkxNih0c2NfSVYzMik7Ci0JcDFrWzJdID0gTWsxNih0YVsxXSwgdGFbMF0pOwotCXAxa1szXSA9IE1rMTYodGFbM10sIHRhWzJdKTsKLQlwMWtbNF0gPSBNazE2KHRhWzVdLCB0YVs0XSk7CisJcDFrWzBdID0gdHNjX0lWMzIgJiAweEZGRkY7CisJcDFrWzFdID0gdHNjX0lWMzIgPj4gMTY7CisJcDFrWzJdID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHRhICsgMCk7CisJcDFrWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHRhICsgMik7CisJcDFrWzRdID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHRhICsgNCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUEhBU0UxX0xPT1BfQ09VTlQ7IGkrKykgewogCQlqID0gMiAqIChpICYgMSk7Ci0JCXAxa1swXSArPSB0a2lwX1MocDFrWzRdIF4gTWsxNih0a1sgMSArIGpdLCB0a1sgMCArIGpdKSk7Ci0JCXAxa1sxXSArPSB0a2lwX1MocDFrWzBdIF4gTWsxNih0a1sgNSArIGpdLCB0a1sgNCArIGpdKSk7Ci0JCXAxa1syXSArPSB0a2lwX1MocDFrWzFdIF4gTWsxNih0a1sgOSArIGpdLCB0a1sgOCArIGpdKSk7Ci0JCXAxa1szXSArPSB0a2lwX1MocDFrWzJdIF4gTWsxNih0a1sxMyArIGpdLCB0a1sxMiArIGpdKSk7Ci0JCXAxa1s0XSArPSB0a2lwX1MocDFrWzNdIF4gTWsxNih0a1sgMSArIGpdLCB0a1sgMCArIGpdKSkgKyBpOworCQlwMWtbMF0gKz0gdGtpcFMocDFrWzRdIF4gZ2V0X3VuYWxpZ25lZF9sZTE2KHRrICsgMCArIGopKTsKKwkJcDFrWzFdICs9IHRraXBTKHAxa1swXSBeIGdldF91bmFsaWduZWRfbGUxNih0ayArIDQgKyBqKSk7CisJCXAxa1syXSArPSB0a2lwUyhwMWtbMV0gXiBnZXRfdW5hbGlnbmVkX2xlMTYodGsgKyA4ICsgaikpOworCQlwMWtbM10gKz0gdGtpcFMocDFrWzJdIF4gZ2V0X3VuYWxpZ25lZF9sZTE2KHRrICsgMTIgKyBqKSk7CisJCXAxa1s0XSArPSB0a2lwUyhwMWtbM10gXiBnZXRfdW5hbGlnbmVkX2xlMTYodGsgKyAwICsgaikpICsgaTsKIAl9CisJY3R4LT5pbml0aWFsaXplZCA9IDE7CiB9CiAKLQotc3RhdGljIHZvaWQgdGtpcF9taXhpbmdfcGhhc2UyKGNvbnN0IHUxNiAqcDFrLCBjb25zdCB1OCAqdGssIHUxNiB0c2NfSVYxNiwKLQkJCSAgICAgICB1OCAqcmM0a2V5KQorc3RhdGljIHZvaWQgdGtpcF9taXhpbmdfcGhhc2UyKGNvbnN0IHU4ICp0aywgc3RydWN0IHRraXBfY3R4ICpjdHgsCisJCQkgICAgICAgdTE2IHRzY19JVjE2LCB1OCAqcmM0a2V5KQogewogCXUxNiBwcGtbNl07CisJY29uc3QgdTE2ICpwMWsgPSBjdHgtPnAxazsKIAlpbnQgaTsKIAogCXBwa1swXSA9IHAxa1swXTsKQEAgLTE0OCw3MCArMTE2LDM1IEBACiAJcHBrWzRdID0gcDFrWzRdOwogCXBwa1s1XSA9IHAxa1s0XSArIHRzY19JVjE2OwogCi0JcHBrWzBdICs9IHRraXBfUyhwcGtbNV0gXiBNazE2KHRrWyAxXSwgdGtbIDBdKSk7Ci0JcHBrWzFdICs9IHRraXBfUyhwcGtbMF0gXiBNazE2KHRrWyAzXSwgdGtbIDJdKSk7Ci0JcHBrWzJdICs9IHRraXBfUyhwcGtbMV0gXiBNazE2KHRrWyA1XSwgdGtbIDRdKSk7Ci0JcHBrWzNdICs9IHRraXBfUyhwcGtbMl0gXiBNazE2KHRrWyA3XSwgdGtbIDZdKSk7Ci0JcHBrWzRdICs9IHRraXBfUyhwcGtbM10gXiBNazE2KHRrWyA5XSwgdGtbIDhdKSk7Ci0JcHBrWzVdICs9IHRraXBfUyhwcGtbNF0gXiBNazE2KHRrWzExXSwgdGtbMTBdKSk7Ci0JcHBrWzBdICs9ICBSb3RSMShwcGtbNV0gXiBNazE2KHRrWzEzXSwgdGtbMTJdKSk7Ci0JcHBrWzFdICs9ICBSb3RSMShwcGtbMF0gXiBNazE2KHRrWzE1XSwgdGtbMTRdKSk7Ci0JcHBrWzJdICs9ICBSb3RSMShwcGtbMV0pOwotCXBwa1szXSArPSAgUm90UjEocHBrWzJdKTsKLQlwcGtbNF0gKz0gIFJvdFIxKHBwa1szXSk7Ci0JcHBrWzVdICs9ICBSb3RSMShwcGtbNF0pOworCXBwa1swXSArPSB0a2lwUyhwcGtbNV0gXiBnZXRfdW5hbGlnbmVkX2xlMTYodGsgKyAwKSk7CisJcHBrWzFdICs9IHRraXBTKHBwa1swXSBeIGdldF91bmFsaWduZWRfbGUxNih0ayArIDIpKTsKKwlwcGtbMl0gKz0gdGtpcFMocHBrWzFdIF4gZ2V0X3VuYWxpZ25lZF9sZTE2KHRrICsgNCkpOworCXBwa1szXSArPSB0a2lwUyhwcGtbMl0gXiBnZXRfdW5hbGlnbmVkX2xlMTYodGsgKyA2KSk7CisJcHBrWzRdICs9IHRraXBTKHBwa1szXSBeIGdldF91bmFsaWduZWRfbGUxNih0ayArIDgpKTsKKwlwcGtbNV0gKz0gdGtpcFMocHBrWzRdIF4gZ2V0X3VuYWxpZ25lZF9sZTE2KHRrICsgMTApKTsKKwlwcGtbMF0gKz0gcm9yMTYocHBrWzVdIF4gZ2V0X3VuYWxpZ25lZF9sZTE2KHRrICsgMTIpLCAxKTsKKwlwcGtbMV0gKz0gcm9yMTYocHBrWzBdIF4gZ2V0X3VuYWxpZ25lZF9sZTE2KHRrICsgMTQpLCAxKTsKKwlwcGtbMl0gKz0gcm9yMTYocHBrWzFdLCAxKTsKKwlwcGtbM10gKz0gcm9yMTYocHBrWzJdLCAxKTsKKwlwcGtbNF0gKz0gcm9yMTYocHBrWzNdLCAxKTsKKwlwcGtbNV0gKz0gcm9yMTYocHBrWzRdLCAxKTsKIAotCXJjNGtleVswXSA9IEhpOCh0c2NfSVYxNik7Ci0JcmM0a2V5WzFdID0gKEhpOCh0c2NfSVYxNikgfCAweDIwKSAmIDB4N2Y7Ci0JcmM0a2V5WzJdID0gTG84KHRzY19JVjE2KTsKLQlyYzRrZXlbM10gPSBMbzgoKHBwa1s1XSBeIE1rMTYodGtbMV0sIHRrWzBdKSkgPj4gMSk7CisJcmM0a2V5ID0gd3JpdGVfdGtpcF9pdihyYzRrZXksIHRzY19JVjE2KTsKKwkqcmM0a2V5KysgPSAoKHBwa1s1XSBeIGdldF91bmFsaWduZWRfbGUxNih0aykpID4+IDEpICYgMHhGRjsKIAotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJcmM0a2V5WzQgKyAyICogaV0gPSBMbzgocHBrW2ldKTsKLQkJcmM0a2V5WzUgKyAyICogaV0gPSBIaTgocHBrW2ldKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KHBwa1tpXSwgcmM0a2V5ICsgMiAqIGkpOwogfQogCi0KIC8qIEFkZCBUS0lQIElWIGFuZCBFeHQuIElWIGF0IEBwb3MuIEBpdjAsIEBpdjEsIGFuZCBAaXYyIGFyZSB0aGUgZmlyc3Qgb2N0ZXRzCiAgKiBvZiB0aGUgSVYuIFJldHVybnMgcG9pbnRlciB0byB0aGUgb2N0ZXQgZm9sbG93aW5nIElWcyAoaS5lLiwgYmVnaW5uaW5nIG9mCiAgKiB0aGUgcGFja2V0IHBheWxvYWQpLiAqLwotdTggKiBpZWVlODAyMTFfdGtpcF9hZGRfaXYodTggKnBvcywgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKLQkJCSAgIHU4IGl2MCwgdTggaXYxLCB1OCBpdjIpCit1OCAqaWVlZTgwMjExX3RraXBfYWRkX2l2KHU4ICpwb3MsIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIHUxNiBpdjE2KQogewotCSpwb3MrKyA9IGl2MDsKLQkqcG9zKysgPSBpdjE7Ci0JKnBvcysrID0gaXYyOworCXBvcyA9IHdyaXRlX3RraXBfaXYocG9zLCBpdjE2KTsKIAkqcG9zKysgPSAoa2V5LT5jb25mLmtleWlkeCA8PCA2KSB8ICgxIDw8IDUpIC8qIEV4dCBJViAqLzsKLQkqcG9zKysgPSBrZXktPnUudGtpcC5pdjMyICYgMHhmZjsKLQkqcG9zKysgPSAoa2V5LT51LnRraXAuaXYzMiA+PiA4KSAmIDB4ZmY7Ci0JKnBvcysrID0gKGtleS0+dS50a2lwLml2MzIgPj4gMTYpICYgMHhmZjsKLQkqcG9zKysgPSAoa2V5LT51LnRraXAuaXYzMiA+PiAyNCkgJiAweGZmOwotCXJldHVybiBwb3M7Ci19Ci0KLQotdm9pZCBpZWVlODAyMTFfdGtpcF9nZW5fcGhhc2Uxa2V5KHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIHU4ICp0YSwKLQkJCQkgIHUxNiAqcGhhc2Uxa2V5KQotewotCXRraXBfbWl4aW5nX3BoYXNlMSh0YSwgJmtleS0+Y29uZi5rZXlbQUxHX1RLSVBfVEVNUF9FTkNSX0tFWV0sCi0JCQkgICBrZXktPnUudGtpcC5pdjMyLCBwaGFzZTFrZXkpOwotfQotCi12b2lkIGllZWU4MDIxMV90a2lwX2dlbl9yYzRrZXkoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgdTggKnRhLAotCQkJICAgICAgIHU4ICpyYzRrZXkpCi17Ci0JLyogQ2FsY3VsYXRlIHBlci1wYWNrZXQga2V5ICovCi0JaWYgKGtleS0+dS50a2lwLml2MTYgPT0gMCB8fCAha2V5LT51LnRraXAudHhfaW5pdGlhbGl6ZWQpIHsKLQkJLyogSVYxNiB3cmFwcGVkIGFyb3VuZCAtIHBlcmZvcm0gVEtJUCBwaGFzZSAxICovCi0JCXRraXBfbWl4aW5nX3BoYXNlMSh0YSwgJmtleS0+Y29uZi5rZXlbQUxHX1RLSVBfVEVNUF9FTkNSX0tFWV0sCi0JCQkJICAga2V5LT51LnRraXAuaXYzMiwga2V5LT51LnRraXAucDFrKTsKLQkJa2V5LT51LnRraXAudHhfaW5pdGlhbGl6ZWQgPSAxOwotCX0KLQotCXRraXBfbWl4aW5nX3BoYXNlMihrZXktPnUudGtpcC5wMWssCi0JCQkgICAma2V5LT5jb25mLmtleVtBTEdfVEtJUF9URU1QX0VOQ1JfS0VZXSwKLQkJCSAgIGtleS0+dS50a2lwLml2MTYsIHJjNGtleSk7CisJcHV0X3VuYWxpZ25lZF9sZTMyKGtleS0+dS50a2lwLnR4Lml2MzIsIHBvcyk7CisJcmV0dXJuIHBvcyArIDQ7CiB9CiAKIHZvaWQgaWVlZTgwMjExX2dldF90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLApAQCAtMjIwLDQ4ICsxNTMsNDQgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gKHN0cnVjdCBpZWVlODAyMTFfa2V5ICopCiAJCQljb250YWluZXJfb2Yoa2V5Y29uZiwgc3RydWN0IGllZWU4MDIxMV9rZXksIGNvbmYpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXU4ICpkYXRhID0gKHU4ICopIGhkcjsKLQl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWludCBoZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOwotCXU4ICp0YSA9IGhkci0+YWRkcjI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwl1OCAqZGF0YTsKKwljb25zdCB1OCAqdGs7CisJc3RydWN0IHRraXBfY3R4ICpjdHg7CiAJdTE2IGl2MTY7CiAJdTMyIGl2MzI7CiAKLQlpdjE2ID0gZGF0YVtoZHJfbGVuXSA8PCA4OwotCWl2MTYgKz0gZGF0YVtoZHJfbGVuICsgMl07Ci0JaXYzMiA9IGRhdGFbaGRyX2xlbiArIDRdIHwgKGRhdGFbaGRyX2xlbiArIDVdIDw8IDgpIHwKLQkgICAgICAgKGRhdGFbaGRyX2xlbiArIDZdIDw8IDE2KSB8IChkYXRhW2hkcl9sZW4gKyA3XSA8PCAyNCk7CisJZGF0YSA9ICh1OCAqKWhkciArIGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKKwlpdjE2ID0gZGF0YVsyXSB8IChkYXRhWzBdIDw8IDgpOworCWl2MzIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmRhdGFbNF0pOwogCi0jaWZkZWYgQ09ORklHX1RLSVBfREVCVUcKKwl0ayA9ICZrZXktPmNvbmYua2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWV07CisJY3R4ID0gJmtleS0+dS50a2lwLnR4OworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1RLSVBfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiVEtJUCBlbmNyeXB0OiBpdjE2ID0gMHglMDR4LCBpdjMyID0gMHglMDh4XG4iLAogCQkJaXYxNiwgaXYzMik7CiAKLQlpZiAoaXYzMiAhPSBrZXktPnUudGtpcC5pdjMyKSB7CisJaWYgKGl2MzIgIT0gY3R4LT5pdjMyKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJza2I6IGl2MzIgPSAweCUwOHgga2V5OiBpdjMyID0gMHglMDh4XG4iLAotCQkJaXYzMiwga2V5LT51LnRraXAuaXYzMik7CisJCQlpdjMyLCBjdHgtPml2MzIpOwogCQlwcmludGsoS0VSTl9ERUJVRyAiV3JhcCBhcm91bmQgb2YgaXYxNiBpbiB0aGUgbWlkZGxlIG9mIGEgIgogCQkJImZyYWdtZW50ZWQgcGFja2V0XG4iKTsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX1RLSVBfREVCVUcgKi8KKyNlbmRpZgogCiAJLyogVXBkYXRlIHRoZSBwMWsgb25seSB3aGVuIHRoZSBpdjE2IGluIHRoZSBwYWNrZXQgd3JhcHMgYXJvdW5kLCB0aGlzCiAJICogbWlnaHQgb2NjdXIgYWZ0ZXIgdGhlIHdyYXAgYXJvdW5kIG9mIGl2MTYgaW4gdGhlIGtleSBpbiBjYXNlIG9mCiAJICogZnJhZ21lbnRlZCBwYWNrZXRzLiAqLwotCWlmIChpdjE2ID09IDAgfHwgIWtleS0+dS50a2lwLnR4X2luaXRpYWxpemVkKSB7Ci0JCS8qIElWMTYgd3JhcHBlZCBhcm91bmQgLSBwZXJmb3JtIFRLSVAgcGhhc2UgMSAqLwotCQl0a2lwX21peGluZ19waGFzZTEodGEsICZrZXktPmNvbmYua2V5W0FMR19US0lQX1RFTVBfRU5DUl9LRVldLAotCQkJaXYzMiwga2V5LT51LnRraXAucDFrKTsKLQkJa2V5LT51LnRraXAudHhfaW5pdGlhbGl6ZWQgPSAxOwotCX0KKwlpZiAoaXYxNiA9PSAwIHx8ICFjdHgtPmluaXRpYWxpemVkKQorCQl0a2lwX21peGluZ19waGFzZTEodGssIGN0eCwgaGRyLT5hZGRyMiwgaXYzMik7CiAKIAlpZiAodHlwZSA9PSBJRUVFODAyMTFfVEtJUF9QMV9LRVkpIHsKLQkJbWVtY3B5KG91dGtleSwga2V5LT51LnRraXAucDFrLCBzaXplb2YodTE2KSAqIDUpOworCQltZW1jcHkob3V0a2V5LCBjdHgtPnAxaywgc2l6ZW9mKHUxNikgKiA1KTsKIAkJcmV0dXJuOwogCX0KIAotCXRraXBfbWl4aW5nX3BoYXNlMihrZXktPnUudGtpcC5wMWssCi0JCSZrZXktPmNvbmYua2V5W0FMR19US0lQX1RFTVBfRU5DUl9LRVldLAlpdjE2LCBvdXRrZXkpOworCXRraXBfbWl4aW5nX3BoYXNlMih0aywgY3R4LCBpdjE2LCBvdXRrZXkpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X3RraXBfa2V5KTsKIApAQCAtMjc1LDEzICsyMDQsMTkgQEAKIAkJCQkgdTggKnBvcywgc2l6ZV90IHBheWxvYWRfbGVuLCB1OCAqdGEpCiB7CiAJdTggcmM0a2V5WzE2XTsKKwlzdHJ1Y3QgdGtpcF9jdHggKmN0eCA9ICZrZXktPnUudGtpcC50eDsKKwljb25zdCB1OCAqdGsgPSAma2V5LT5jb25mLmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVldOwogCi0JaWVlZTgwMjExX3RraXBfZ2VuX3JjNGtleShrZXksIHRhLCByYzRrZXkpOwotCXBvcyA9IGllZWU4MDIxMV90a2lwX2FkZF9pdihwb3MsIGtleSwgcmM0a2V5WzBdLCByYzRrZXlbMV0sIHJjNGtleVsyXSk7CisJLyogQ2FsY3VsYXRlIHBlci1wYWNrZXQga2V5ICovCisJaWYgKGN0eC0+aXYxNiA9PSAwIHx8ICFjdHgtPmluaXRpYWxpemVkKQorCQl0a2lwX21peGluZ19waGFzZTEodGssIGN0eCwgdGEsIGN0eC0+aXYzMik7CisKKwl0a2lwX21peGluZ19waGFzZTIodGssIGN0eCwgY3R4LT5pdjE2LCByYzRrZXkpOworCisJcG9zID0gaWVlZTgwMjExX3RraXBfYWRkX2l2KHBvcywga2V5LCBrZXktPnUudGtpcC50eC5pdjE2KTsKIAlpZWVlODAyMTFfd2VwX2VuY3J5cHRfZGF0YSh0Zm0sIHJjNGtleSwgMTYsIHBvcywgcGF5bG9hZF9sZW4pOwogfQogCi0KIC8qIERlY3J5cHQgcGFja2V0IHBheWxvYWQgd2l0aCBUS0lQIHVzaW5nIEBrZXkuIEBwb3MgaXMgYSBwb2ludGVyIHRvIHRoZQogICogYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyBJRUVFIDgwMi4xMSBoZWFkZXIgcGF5bG9hZCwgaS5lLiwKICAqIGluY2x1ZGluZyBJViwgRXh0LiBJViwgcmVhbCBkYXRhLCBNaWNoYWVsIE1JQywgSUNWLiBAcGF5bG9hZF9sZW4gaXMgdGhlCkBAIC0yOTYsMTUgKzIzMSwxNiBAQAogCXUzMiBpdjE2OwogCXU4IHJjNGtleVsxNl0sIGtleWlkLCAqcG9zID0gcGF5bG9hZDsKIAlpbnQgcmVzOworCWNvbnN0IHU4ICp0ayA9ICZrZXktPmNvbmYua2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWV07CiAKIAlpZiAocGF5bG9hZF9sZW4gPCAxMikKIAkJcmV0dXJuIC0xOwogCiAJaXYxNiA9IChwb3NbMF0gPDwgOCkgfCBwb3NbMl07CiAJa2V5aWQgPSBwb3NbM107Ci0JaXYzMiA9IHBvc1s0XSB8IChwb3NbNV0gPDwgOCkgfCAocG9zWzZdIDw8IDE2KSB8IChwb3NbN10gPDwgMjQpOworCWl2MzIgPSBnZXRfdW5hbGlnbmVkX2xlMzIocG9zICsgNCk7CiAJcG9zICs9IDg7Ci0jaWZkZWYgQ09ORklHX1RLSVBfREVCVUcKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVEtJUF9ERUJVRwogCXsKIAkJaW50IGk7CiAJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQIGRlY3J5cHQ6IGRhdGEobGVuPSV6ZCkiLCBwYXlsb2FkX2xlbik7CkBAIC0zMTQsNyArMjUwLDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVAgZGVjcnlwdDogaXYxNj0lMDR4IGl2MzI9JTA4eFxuIiwKIAkJICAgICAgIGl2MTYsIGl2MzIpOwogCX0KLSNlbmRpZiAvKiBDT05GSUdfVEtJUF9ERUJVRyAqLworI2VuZGlmCiAKIAlpZiAoIShrZXlpZCAmICgxIDw8IDUpKSkKIAkJcmV0dXJuIFRLSVBfREVDUllQVF9OT19FWFRfSVY7CkBAIC0zMjIsNTAgKzI1OCw0OCBAQAogCWlmICgoa2V5aWQgPj4gNikgIT0ga2V5LT5jb25mLmtleWlkeCkKIAkJcmV0dXJuIFRLSVBfREVDUllQVF9JTlZBTElEX0tFWUlEWDsKIAotCWlmIChrZXktPnUudGtpcC5yeF9pbml0aWFsaXplZFtxdWV1ZV0gJiYKLQkgICAgKGl2MzIgPCBrZXktPnUudGtpcC5pdjMyX3J4W3F1ZXVlXSB8fAotCSAgICAgKGl2MzIgPT0ga2V5LT51LnRraXAuaXYzMl9yeFtxdWV1ZV0gJiYKLQkgICAgICBpdjE2IDw9IGtleS0+dS50a2lwLml2MTZfcnhbcXVldWVdKSkpIHsKLSNpZmRlZiBDT05GSUdfVEtJUF9ERUJVRworCWlmIChrZXktPnUudGtpcC5yeFtxdWV1ZV0uaW5pdGlhbGl6ZWQgJiYKKwkgICAgKGl2MzIgPCBrZXktPnUudGtpcC5yeFtxdWV1ZV0uaXYzMiB8fAorCSAgICAgKGl2MzIgPT0ga2V5LT51LnRraXAucnhbcXVldWVdLml2MzIgJiYKKwkgICAgICBpdjE2IDw9IGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5pdjE2KSkpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVEtJUF9ERUJVRwogCQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVAgcmVwbGF5IGRldGVjdGVkIGZvciBSWCBmcmFtZSBmcm9tICIKIAkJICAgICAgICIlcyAoUlggSVYgKCUwNHgsJTAyeCkgPD0gcHJldi4gSVYgKCUwNHgsJTAyeClcbiIsCiAJCSAgICAgICBwcmludF9tYWMobWFjLCB0YSksCi0JCSAgICAgICBpdjMyLCBpdjE2LCBrZXktPnUudGtpcC5pdjMyX3J4W3F1ZXVlXSwKLQkJICAgICAgIGtleS0+dS50a2lwLml2MTZfcnhbcXVldWVdKTsKLSNlbmRpZiAvKiBDT05GSUdfVEtJUF9ERUJVRyAqLworCQkgICAgICAgaXYzMiwgaXYxNiwga2V5LT51LnRraXAucnhbcXVldWVdLml2MzIsCisJCSAgICAgICBrZXktPnUudGtpcC5yeFtxdWV1ZV0uaXYxNik7CisjZW5kaWYKIAkJcmV0dXJuIFRLSVBfREVDUllQVF9SRVBMQVk7CiAJfQogCiAJaWYgKG9ubHlfaXYpIHsKIAkJcmVzID0gVEtJUF9ERUNSWVBUX09LOwotCQlrZXktPnUudGtpcC5yeF9pbml0aWFsaXplZFtxdWV1ZV0gPSAxOworCQlrZXktPnUudGtpcC5yeFtxdWV1ZV0uaW5pdGlhbGl6ZWQgPSAxOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKCFrZXktPnUudGtpcC5yeF9pbml0aWFsaXplZFtxdWV1ZV0gfHwKLQkgICAga2V5LT51LnRraXAuaXYzMl9yeFtxdWV1ZV0gIT0gaXYzMikgewotCQlrZXktPnUudGtpcC5yeF9pbml0aWFsaXplZFtxdWV1ZV0gPSAxOworCWlmICgha2V5LT51LnRraXAucnhbcXVldWVdLmluaXRpYWxpemVkIHx8CisJICAgIGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5pdjMyICE9IGl2MzIpIHsKIAkJLyogSVYxNiB3cmFwcGVkIGFyb3VuZCAtIHBlcmZvcm0gVEtJUCBwaGFzZSAxICovCi0JCXRraXBfbWl4aW5nX3BoYXNlMSh0YSwgJmtleS0+Y29uZi5rZXlbQUxHX1RLSVBfVEVNUF9FTkNSX0tFWV0sCi0JCQkJICAgaXYzMiwga2V5LT51LnRraXAucDFrX3J4W3F1ZXVlXSk7Ci0jaWZkZWYgQ09ORklHX1RLSVBfREVCVUcKKwkJdGtpcF9taXhpbmdfcGhhc2UxKHRrLCAma2V5LT51LnRraXAucnhbcXVldWVdLCB0YSwgaXYzMik7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX1RLSVBfREVCVUcKIAkJewogCQkJaW50IGk7CisJCQl1OCBrZXlfb2Zmc2V0ID0gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZOwogCQkJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUCBkZWNyeXB0OiBQaGFzZTEgVEE9JXMiCiAJCQkgICAgICAgIiBUSz0iLCBwcmludF9tYWMobWFjLCB0YSkpOwogCQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAJCQkJcHJpbnRrKCIlMDJ4ICIsCi0JCQkJICAgICAgIGtleS0+Y29uZi5rZXlbCi0JCQkJCQlBTEdfVEtJUF9URU1QX0VOQ1JfS0VZICsgaV0pOworCQkJCSAgICAgICBrZXktPmNvbmYua2V5W2tleV9vZmZzZXQgKyBpXSk7CiAJCQlwcmludGsoIlxuIik7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUCBkZWNyeXB0OiBQMUs9Iik7CiAJCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQotCQkJCXByaW50aygiJTA0eCAiLCBrZXktPnUudGtpcC5wMWtfcnhbcXVldWVdW2ldKTsKKwkJCQlwcmludGsoIiUwNHggIiwga2V5LT51LnRraXAucnhbcXVldWVdLnAxa1tpXSk7CiAJCQlwcmludGsoIlxuIik7CiAJCX0KLSNlbmRpZiAvKiBDT05GSUdfVEtJUF9ERUJVRyAqLworI2VuZGlmCiAJCWlmIChrZXktPmxvY2FsLT5vcHMtPnVwZGF0ZV90a2lwX2tleSAmJgogCQkJa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7CiAJCQl1OCBiY2FzdFtFVEhfQUxFTl0gPQpAQCAtMzc3LDE0ICszMTEsMTIgQEAKIAogCQkJa2V5LT5sb2NhbC0+b3BzLT51cGRhdGVfdGtpcF9rZXkoCiAJCQkJbG9jYWxfdG9faHcoa2V5LT5sb2NhbCksICZrZXktPmNvbmYsCi0JCQkJc3RhX2FkZHIsIGl2MzIsIGtleS0+dS50a2lwLnAxa19yeFtxdWV1ZV0pOworCQkJCXN0YV9hZGRyLCBpdjMyLCBrZXktPnUudGtpcC5yeFtxdWV1ZV0ucDFrKTsKIAkJfQogCX0KIAotCXRraXBfbWl4aW5nX3BoYXNlMihrZXktPnUudGtpcC5wMWtfcnhbcXVldWVdLAotCQkJICAgJmtleS0+Y29uZi5rZXlbQUxHX1RLSVBfVEVNUF9FTkNSX0tFWV0sCi0JCQkgICBpdjE2LCByYzRrZXkpOwotI2lmZGVmIENPTkZJR19US0lQX0RFQlVHCisJdGtpcF9taXhpbmdfcGhhc2UyKHRrLCAma2V5LT51LnRraXAucnhbcXVldWVdLCBpdjE2LCByYzRrZXkpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9US0lQX0RFQlVHCiAJewogCQlpbnQgaTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVAgZGVjcnlwdDogUGhhc2UyIHJjNGtleT0iKTsKQEAgLTM5Miw3ICszMjQsNyBAQAogCQkJcHJpbnRrKCIlMDJ4ICIsIHJjNGtleVtpXSk7CiAJCXByaW50aygiXG4iKTsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX1RLSVBfREVCVUcgKi8KKyNlbmRpZgogCiAJcmVzID0gaWVlZTgwMjExX3dlcF9kZWNyeXB0X2RhdGEodGZtLCByYzRrZXksIDE2LCBwb3MsIHBheWxvYWRfbGVuIC0gMTIpOwogIGRvbmU6CkBAIC00MDksNSArMzQxLDMgQEAKIAogCXJldHVybiByZXM7CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RraXAuaCBiL25ldC9tYWM4MDIxMS90a2lwLmgKaW5kZXggYjdjMmVlNy4uZDQ3MTQzOCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RraXAuaAorKysgYi9uZXQvbWFjODAyMTEvdGtpcC5oCkBAIC0xMywxMiArMTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgImtleS5oIgogCi11OCAqIGllZWU4MDIxMV90a2lwX2FkZF9pdih1OCAqcG9zLCBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAotCQkJICAgdTggaXYwLCB1OCBpdjEsIHU4IGl2Mik7Ci12b2lkIGllZWU4MDIxMV90a2lwX2dlbl9waGFzZTFrZXkoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgdTggKnRhLAotCQkJCSAgdTE2ICpwaGFzZTFrZXkpOwotdm9pZCBpZWVlODAyMTFfdGtpcF9nZW5fcmM0a2V5KHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIHU4ICp0YSwKLQkJCSAgICAgICB1OCAqcmM0a2V5KTsKK3U4ICppZWVlODAyMTFfdGtpcF9hZGRfaXYodTggKnBvcywgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgdTE2IGl2MTYpOworCiB2b2lkIGllZWU4MDIxMV90a2lwX2VuY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJCSB1OCAqcG9zLCBzaXplX3QgcGF5bG9hZF9sZW4sIHU4ICp0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IGM4MGQ1ODkuLjBmYmFkZDggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0zOCwyMyArMzgsMTIgQEAKIAogLyogbWlzYyB1dGlscyAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2luY2x1ZGVfc2VxdWVuY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCi17Ci0JLyogU2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgZnJhbWUuICovCi0JaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KHNkYXRhLT5zZXF1ZW5jZSk7Ci0KLQkvKiBJbmNyZWFzZSB0aGUgc2VxdWVuY2UgbnVtYmVyLiAqLwotCXNkYXRhLT5zZXF1ZW5jZSA9IChzZGF0YS0+c2VxdWVuY2UgKyAweDEwKSAmIElFRUU4MDIxMV9TQ1RMX1NFUTsKLX0KLQogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MT1dUWF9GUkFNRV9EVU1QCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZHVtcF9mcmFtZShjb25zdCBjaGFyICppZm5hbWUsIGNvbnN0IGNoYXIgKnRpdGxlLAogCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXUxNiBmYzsKLQlpbnQgaGRybGVuOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJdW5zaWduZWQgaW50IGhkcmxlbjsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogJXMgKGxlbj0lZCkiLCBpZm5hbWUsIHRpdGxlLCBza2ItPmxlbik7CkBAIC02MywxMyArNTIsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCWlmIChoZHJsZW4gPiBza2ItPmxlbikKIAkJaGRybGVuID0gc2tiLT5sZW47CiAJaWYgKGhkcmxlbiA+PSA0KQogCQlwcmludGsoIiBGQz0weCUwNHggRFVSPTB4JTA0eCIsCi0JCSAgICAgICBmYywgbGUxNl90b19jcHUoaGRyLT5kdXJhdGlvbl9pZCkpOworCQkgICAgbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSwgbGUxNl90b19jcHUoaGRyLT5kdXJhdGlvbl9pZCkpOwogCWlmIChoZHJsZW4gPj0gMTApCiAJCXByaW50aygiIEExPSVzIiwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMSkpOwogCWlmIChoZHJsZW4gPj0gMTYpCkBAIC04NywxNSArNzUsMTYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTE9XVFhfRlJBTUVfRFVNUCAqLwogCi1zdGF0aWMgdTE2IGllZWU4MDIxMV9kdXJhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4LCBpbnQgZ3JvdXBfYWRkciwKLQkJCSAgICAgIGludCBuZXh0X2ZyYWdfbGVuKQorc3RhdGljIF9fbGUxNiBpZWVlODAyMTFfZHVyYXRpb24oc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwgaW50IGdyb3VwX2FkZHIsCisJCQkJIGludCBuZXh0X2ZyYWdfbGVuKQogewogCWludCByYXRlLCBtcmF0ZSwgZXJwLCBkdXIsIGk7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICp0eHJhdGUgPSB0eC0+cmF0ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnR4cmF0ZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHR4LT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbdHgtPmNoYW5uZWwtPmJhbmRdOworCXR4cmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbdHgtPnJhdGVfaWR4XTsKIAogCWVycCA9IDA7CiAJaWYgKHR4LT5zZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFKQpAQCAtMTM5LDcgKzEyOCw3IEBACiAKIAkvKiBkYXRhL21nbXQgKi8KIAlpZiAoMCAvKiBGSVg6IGRhdGEvbWdtdCBkdXJpbmcgQ0ZQICovKQotCQlyZXR1cm4gMzI3Njg7CisJCXJldHVybiBjcHVfdG9fbGUxNigzMjc2OCk7CiAKIAlpZiAoZ3JvdXBfYWRkcikgLyogR3JvdXAgYWRkcmVzcyBhcyB0aGUgZGVzdGluYXRpb24gLSBubyBBQ0sgKi8KIAkJcmV0dXJuIDA7CkBAIC0yMDksMTkgKzE5OCw3IEBACiAJCQkJdHgtPnNkYXRhLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpOwogCX0KIAotCXJldHVybiBkdXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9faWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCSAgICBpbnQgcXVldWUpCi17Ci0JcmV0dXJuIHRlc3RfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1hPRkYsICZsb2NhbC0+c3RhdGVbcXVldWVdKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19pZWVlODAyMTFfcXVldWVfcGVuZGluZyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkJICAgIGludCBxdWV1ZSkKLXsKLQlyZXR1cm4gdGVzdF9iaXQoSUVFRTgwMjExX0xJTktfU1RBVEVfUEVORElORywgJmxvY2FsLT5zdGF0ZVtxdWV1ZV0pOworCXJldHVybiBjcHVfdG9fbGUxNihkdXIpOwogfQogCiBzdGF0aWMgaW50IGlubGluZSBpc19pZWVlODAyMTFfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yMzMsMTYgKzIxMCwxNiBAQAogCiAvKiB0eCBoYW5kbGVycyAqLwogCi1zdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAorc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtPnNrYi0+ZGF0YTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRyAqLworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPnNrYik7CiAJdTMyIHN0YV9mbGFnczsKIAotCWlmICh1bmxpa2VseSh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfSU5KRUNURUQpKQorCWlmICh1bmxpa2VseShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKQogCQlyZXR1cm4gVFhfQ09OVElOVUU7CiAKIAlpZiAodW5saWtlbHkodHgtPmxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcpICYmCkBAIC0yNTYsNyArMjMzLDcgQEAKIAlpZiAodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYX1BTX0JVRkZFUkVEKQogCQlyZXR1cm4gVFhfQ09OVElOVUU7CiAKLQlzdGFfZmxhZ3MgPSB0eC0+c3RhID8gdHgtPnN0YS0+ZmxhZ3MgOiAwOworCXN0YV9mbGFncyA9IHR4LT5zdGEgPyBnZXRfc3RhX2ZsYWdzKHR4LT5zdGEpIDogMDsKIAogCWlmIChsaWtlbHkodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYX1VOSUNBU1QpKSB7CiAJCWlmICh1bmxpa2VseSghKHN0YV9mbGFncyAmIFdMQU5fU1RBX0FTU09DKSAmJgpAQCAtMjg3LDE3ICsyNjQsNiBAQAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQKLWllZWU4MDIxMV90eF9oX3NlcXVlbmNlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5za2ItPmRhdGE7Ci0KLQlpZiAoaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkgPj0gMjQpCi0JCWllZWU4MDIxMV9pbmNsdWRlX3NlcXVlbmNlKHR4LT5zZGF0YSwgaGRyKTsKLQotCXJldHVybiBUWF9DT05USU5VRTsKLX0KLQogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIEFQIGlzIGFib3V0IHRvIGV4Y2VlZCB0aGUgbWF4aW11bSBsaW1pdAogICogb2YgYnVmZmVyZWQgZnJhbWVzIGZvciBwb3dlciBzYXZpbmcgU1RBcy4gVGhpcyBzaXR1YXRpb24gc2hvdWxkIG5vdCByZWFsbHkKICAqIGhhcHBlbiBvZnRlbiBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgc28gZHJvcHBpbmcgdGhlIG9sZGVzdCBidWZmZXJlZCBwYWNrZXQKQEAgLTMxNiw4ICsyODIsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICphcDsKLQkJaWYgKHNkYXRhLT5kZXYgPT0gbG9jYWwtPm1kZXYgfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCkKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCkKIAkJCWNvbnRpbnVlOwogCQlhcCA9ICZzZGF0YS0+dS5hcDsKIAkJc2tiID0gc2tiX2RlcXVldWUoJmFwLT5wc19iY19idWYpOwpAQCAtMzQwLDEzICszMDUsMTcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWxvY2FsLT50b3RhbF9wc19idWZmZXJlZCA9IHRvdGFsOworI2lmZGVmIE1BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBTIGJ1ZmZlcnMgZnVsbCAtIHB1cmdlZCAlZCBmcmFtZXNcbiIsCiAJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgcHVyZ2VkKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAogaWVlZTgwMjExX3R4X2hfbXVsdGljYXN0X3BzX2J1ZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogeworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPnNrYik7CisKIAkvKgogCSAqIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWUKIAkgKgpAQCAtMzU1LDggKzMyNCwxMiBAQAogCSAqIFRoaXMgaXMgZG9uZSBlaXRoZXIgYnkgdGhlIGhhcmR3YXJlIG9yIHVzLgogCSAqLwogCi0JLyogbm90IEFQL0lCU1Mgb3Igb3JkZXJlZCBmcmFtZSAqLwotCWlmICghdHgtPnNkYXRhLT5ic3MgfHwgKHR4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX09SREVSKSkKKwkvKiBwb3dlcnNhdmluZyBTVEFzIG9ubHkgaW4gQVAvVkxBTiBtb2RlICovCisJaWYgKCF0eC0+c2RhdGEtPmJzcykKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOworCisJLyogbm8gYnVmZmVyaW5nIGZvciBvcmRlcmVkIGZyYW1lcyAqLworCWlmICh0eC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9PUkRFUikKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCiAJLyogbm8gc3RhdGlvbnMgaW4gUFMgbW9kZSAqLwpAQCAtMzY5LDExICszNDIsMTMgQEAKIAkJCXB1cmdlX29sZF9wc19idWZmZXJzKHR4LT5sb2NhbCk7CiAJCWlmIChza2JfcXVldWVfbGVuKCZ0eC0+c2RhdGEtPmJzcy0+cHNfYmNfYnVmKSA+PQogCQkgICAgQVBfTUFYX0JDX0JVRkZFUikgeworI2lmZGVmIE1BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEJDIFRYIGJ1ZmZlciBmdWxsIC0gIgogCQkJCSAgICAgICAiZHJvcHBpbmcgdGhlIG9sZGVzdCBmcmFtZVxuIiwKIAkJCQkgICAgICAgdHgtPmRldi0+bmFtZSk7CiAJCQl9CisjZW5kaWYKIAkJCWRldl9rZnJlZV9za2Ioc2tiX2RlcXVldWUoJnR4LT5zZGF0YS0+YnNzLT5wc19iY19idWYpKTsKIAkJfSBlbHNlCiAJCQl0eC0+bG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkKys7CkBAIC0zODIsNyArMzU3LDcgQEAKIAl9CiAKIAkvKiBidWZmZXJlZCBpbiBoYXJkd2FyZSAqLwotCXR4LT5jb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfU0VORF9BRlRFUl9EVElNOworCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQpAQCAtMzkxLDYgKzM2Niw4IEBACiBpZWVlODAyMTFfdHhfaF91bmljYXN0X3BzX2J1ZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gdHgtPnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LT5za2IpOworCXUzMiBzdGFmbGFnczsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWlmICh1bmxpa2VseSghc3RhIHx8CkBAIC0zOTgsOSArMzc1LDEwIEBACiAJCSAgICAgICh0eC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApKSkKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCi0JaWYgKHVubGlrZWx5KChzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMpICYmCi0JCSAgICAgIShzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFNQT0xMKSkpIHsKLQkJc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSAqcGt0X2RhdGE7CisJc3RhZmxhZ3MgPSBnZXRfc3RhX2ZsYWdzKHN0YSk7CisKKwlpZiAodW5saWtlbHkoKHN0YWZsYWdzICYgV0xBTl9TVEFfUFMpICYmCisJCSAgICAgIShzdGFmbGFncyAmIFdMQU5fU1RBX1BTUE9MTCkpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlNUQSAlcyBhaWQgJWQ6IFBTIGJ1ZmZlciAoZW50cmllcyAiCiAJCSAgICAgICAiYmVmb3JlICVkKVxuIiwKQEAgLTQxMSwxMSArMzg5LDEzIEBACiAJCQlwdXJnZV9vbGRfcHNfYnVmZmVycyh0eC0+bG9jYWwpOwogCQlpZiAoc2tiX3F1ZXVlX2xlbigmc3RhLT5wc190eF9idWYpID49IFNUQV9NQVhfVFhfQlVGRkVSKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkID0gc2tiX2RlcXVldWUoJnN0YS0+cHNfdHhfYnVmKTsKKyNpZmRlZiBNQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXMgVFggIgogCQkJCSAgICAgICAiYnVmZmVyIGZ1bGwgLSBkcm9wcGluZyBvbGRlc3QgZnJhbWVcbiIsCiAJCQkJICAgICAgIHR4LT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIHN0YS0+YWRkcikpOwogCQkJfQorI2VuZGlmCiAJCQlkZXZfa2ZyZWVfc2tiKG9sZCk7CiAJCX0gZWxzZQogCQkJdHgtPmxvY2FsLT50b3RhbF9wc19idWZmZXJlZCsrOwpAQCAtNDI0LDI0ICs0MDQsMjMgQEAKIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc3RhLT5wc190eF9idWYpKQogCQkJc3RhX2luZm9fc2V0X3RpbV9iaXQoc3RhKTsKIAotCQlwa3RfZGF0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICopdHgtPnNrYi0+Y2I7Ci0JCXBrdF9kYXRhLT5qaWZmaWVzID0gamlmZmllczsKKwkJaW5mby0+Y29udHJvbC5qaWZmaWVzID0gamlmZmllczsKIAkJc2tiX3F1ZXVlX3RhaWwoJnN0YS0+cHNfdHhfYnVmLCB0eC0+c2tiKTsKIAkJcmV0dXJuIFRYX1FVRVVFRDsKIAl9CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKLQllbHNlIGlmICh1bmxpa2VseShzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMpKSB7CisJZWxzZSBpZiAodW5saWtlbHkodGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QUykpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogU1RBICVzIGluIFBTIG1vZGUsIGJ1dCBwc3BvbGwgIgogCQkgICAgICAgInNldCAtPiBzZW5kIGZyYW1lXG4iLCB0eC0+ZGV2LT5uYW1lLAogCQkgICAgICAgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHICovCi0Jc3RhLT5mbGFncyAmPSB+V0xBTl9TVEFfUFNQT0xMOworCWNsZWFyX3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTUE9MTCk7CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0CitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfcHNfYnVmKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJaWYgKHVubGlrZWx5KHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9QU19CVUZGRVJFRCkpCkBAIC00NTMsMjEgKzQzMiwyMiBAQAogCQlyZXR1cm4gaWVlZTgwMjExX3R4X2hfbXVsdGljYXN0X3BzX2J1Zih0eCk7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0CitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfc2VsZWN0X2tleShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+c2tiKTsKIAl1MTYgZmMgPSB0eC0+ZmM7CiAKLQlpZiAodW5saWtlbHkodHgtPmNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0RPX05PVF9FTkNSWVBUKSkKKwlpZiAodW5saWtlbHkoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0RPX05PVF9FTkNSWVBUKSkKIAkJdHgtPmtleSA9IE5VTEw7CiAJZWxzZSBpZiAodHgtPnN0YSAmJiAoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHR4LT5zdGEtPmtleSkpKQogCQl0eC0+a2V5ID0ga2V5OwogCWVsc2UgaWYgKChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnNkYXRhLT5kZWZhdWx0X2tleSkpKQogCQl0eC0+a2V5ID0ga2V5OwogCWVsc2UgaWYgKHR4LT5zZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCAmJgotCQkgISh0eC0+Y29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfRUFQT0xfRlJBTUUpICYmCi0JCSAhKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTkpFQ1RFRCkpIHsKKwkJICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0VBUE9MX0ZSQU1FKSAmJgorCQkgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7CiAJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF91bmVuY3J5cHRlZCk7CiAJCXJldHVybiBUWF9EUk9QOwogCX0gZWxzZQpAQCAtNDk2LDE1ICs0NzYsMTk3IEBACiAJfQogCiAJaWYgKCF0eC0+a2V5IHx8ICEodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkpCi0JCXR4LT5jb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQ7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfRE9fTk9UX0VOQ1JZUFQ7CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0CitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQoraWVlZTgwMjExX3R4X2hfcmF0ZV9jdHJsKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCit7CisJc3RydWN0IHJhdGVfc2VsZWN0aW9uIHJzZWw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+c2tiKTsKKworCXNiYW5kID0gdHgtPmxvY2FsLT5ody53aXBoeS0+YmFuZHNbdHgtPmNoYW5uZWwtPmJhbmRdOworCisJaWYgKGxpa2VseSh0eC0+cmF0ZV9pZHggPCAwKSkgeworCQlyYXRlX2NvbnRyb2xfZ2V0X3JhdGUodHgtPmRldiwgc2JhbmQsIHR4LT5za2IsICZyc2VsKTsKKwkJdHgtPnJhdGVfaWR4ID0gcnNlbC5yYXRlX2lkeDsKKwkJaWYgKHVubGlrZWx5KHJzZWwucHJvYmVfaWR4ID49IDApKSB7CisJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKKwkJCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUFJPQkVfTEFTVF9GUkFHOworCQkJaW5mby0+Y29udHJvbC5hbHRfcmV0cnlfcmF0ZV9pZHggPSB0eC0+cmF0ZV9pZHg7CisJCQl0eC0+cmF0ZV9pZHggPSByc2VsLnByb2JlX2lkeDsKKwkJfSBlbHNlCisJCQlpbmZvLT5jb250cm9sLmFsdF9yZXRyeV9yYXRlX2lkeCA9IC0xOworCisJCWlmICh1bmxpa2VseSh0eC0+cmF0ZV9pZHggPCAwKSkKKwkJCXJldHVybiBUWF9EUk9QOworCX0gZWxzZQorCQlpbmZvLT5jb250cm9sLmFsdF9yZXRyeV9yYXRlX2lkeCA9IC0xOworCisJaWYgKHR4LT5zZGF0YS0+YnNzX2NvbmYudXNlX2N0c19wcm90ICYmCisJICAgICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfRlJBR01FTlRFRCkgJiYgKHJzZWwubm9uZXJwX2lkeCA+PSAwKSkgeworCQl0eC0+bGFzdF9mcmFnX3JhdGVfaWR4ID0gdHgtPnJhdGVfaWR4OworCQlpZiAocnNlbC5wcm9iZV9pZHggPj0gMCkKKwkJCXR4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1BST0JFX0xBU1RfRlJBRzsKKwkJZWxzZQorCQkJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9QUk9CRV9MQVNUX0ZSQUc7CisJCXR4LT5yYXRlX2lkeCA9IHJzZWwubm9uZXJwX2lkeDsKKwkJaW5mby0+dHhfcmF0ZV9pZHggPSByc2VsLm5vbmVycF9pZHg7CisJCWluZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKKwl9IGVsc2UgeworCQl0eC0+bGFzdF9mcmFnX3JhdGVfaWR4ID0gdHgtPnJhdGVfaWR4OworCQlpbmZvLT50eF9yYXRlX2lkeCA9IHR4LT5yYXRlX2lkeDsKKwl9CisJaW5mby0+dHhfcmF0ZV9pZHggPSB0eC0+cmF0ZV9pZHg7CisKKwlyZXR1cm4gVFhfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCitpZWVlODAyMTFfdHhfaF9taXNjKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5za2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+c2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCXNiYW5kID0gdHgtPmxvY2FsLT5ody53aXBoeS0+YmFuZHNbdHgtPmNoYW5uZWwtPmJhbmRdOworCisJaWYgKHR4LT5zdGEpCisJCWluZm8tPmNvbnRyb2wuYWlkID0gdHgtPnN0YS0+YWlkOworCisJaWYgKCFpbmZvLT5jb250cm9sLnJldHJ5X2xpbWl0KSB7CisJCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKKwkJCWludCBsZW4gPSBtaW5fdChpbnQsIHR4LT5za2ItPmxlbiArIEZDU19MRU4sCisJCQkJCXR4LT5sb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQpOworCQkJaWYgKGxlbiA+IHR4LT5sb2NhbC0+cnRzX3RocmVzaG9sZAorCQkJICAgICYmIHR4LT5sb2NhbC0+cnRzX3RocmVzaG9sZCA8CisJCQkJCQlJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQpIHsKKwkJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1VTRV9SVFNfQ1RTOworCQkJCWluZm8tPmZsYWdzIHw9CisJCQkJCUlFRUU4MDIxMV9UWF9DVExfTE9OR19SRVRSWV9MSU1JVDsKKwkJCQlpbmZvLT5jb250cm9sLnJldHJ5X2xpbWl0ID0KKwkJCQkJdHgtPmxvY2FsLT5sb25nX3JldHJ5X2xpbWl0OworCQkJfSBlbHNlIHsKKwkJCQlpbmZvLT5jb250cm9sLnJldHJ5X2xpbWl0ID0KKwkJCQkJdHgtPmxvY2FsLT5zaG9ydF9yZXRyeV9saW1pdDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWluZm8tPmNvbnRyb2wucmV0cnlfbGltaXQgPSAxOworCQl9CisJfQorCisJaWYgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSB7CisJCS8qIERvIG5vdCB1c2UgbXVsdGlwbGUgcmV0cnkgcmF0ZXMgd2hlbiBzZW5kaW5nIGZyYWdtZW50ZWQKKwkJICogZnJhbWVzLgorCQkgKiBUT0RPOiBUaGUgbGFzdCBmcmFnbWVudCBjb3VsZCBzdGlsbCB1c2UgbXVsdGlwbGUgcmV0cnkKKwkJICogcmF0ZXMuICovCisJCWluZm8tPmNvbnRyb2wuYWx0X3JldHJ5X3JhdGVfaWR4ID0gLTE7CisJfQorCisJLyogVXNlIENUUyBwcm90ZWN0aW9uIGZvciB1bmljYXN0IGZyYW1lcyBzZW50IHVzaW5nIGV4dGVuZGVkIHJhdGVzIGlmCisJICogdGhlcmUgYXJlIGFzc29jaWF0ZWQgbm9uLUVSUCBzdGF0aW9ucyBhbmQgUlRTL0NUUyBpcyBub3QgY29uZmlndXJlZAorCSAqIGZvciB0aGUgZnJhbWUuICovCisJaWYgKCh0eC0+c2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERSkgJiYKKwkgICAgKHNiYW5kLT5iaXRyYXRlc1t0eC0+cmF0ZV9pZHhdLmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQX0cpICYmCisJICAgICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfVU5JQ0FTVCkgJiYKKwkgICAgdHgtPnNkYXRhLT5ic3NfY29uZi51c2VfY3RzX3Byb3QgJiYKKwkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX1JUU19DVFMpKQorCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1VTRV9DVFNfUFJPVEVDVDsKKworCS8qIFRyYW5zbWl0IGRhdGEgZnJhbWVzIHVzaW5nIHNob3J0IHByZWFtYmxlcyBpZiB0aGUgZHJpdmVyIHN1cHBvcnRzCisJICogc2hvcnQgcHJlYW1ibGVzIGF0IHRoZSBzZWxlY3RlZCByYXRlIGFuZCBzaG9ydCBwcmVhbWJsZXMgYXJlCisJICogYXZhaWxhYmxlIG9uIHRoZSBuZXR3b3JrIGF0IHRoZSBjdXJyZW50IHBvaW50IGluIHRpbWUuICovCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgKHNiYW5kLT5iaXRyYXRlc1t0eC0+cmF0ZV9pZHhdLmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpICYmCisJICAgIHR4LT5zZGF0YS0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlICYmCisJICAgICghdHgtPnN0YSB8fCB0ZXN0X3N0YV9mbGFncyh0eC0+c3RhLCBXTEFOX1NUQV9TSE9SVF9QUkVBTUJMRSkpKSB7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfU0hPUlRfUFJFQU1CTEU7CisJfQorCisJaWYgKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX1JUU19DVFMpIHx8CisJICAgIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfVVNFX0NUU19QUk9URUNUKSkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7CisJCXM4IGJhc2VyYXRlID0gLTE7CisJCWludCBpZHg7CisKKwkJLyogRG8gbm90IHVzZSBtdWx0aXBsZSByZXRyeSByYXRlcyB3aGVuIHVzaW5nIFJUUy9DVFMgKi8KKwkJaW5mby0+Y29udHJvbC5hbHRfcmV0cnlfcmF0ZV9pZHggPSAtMTsKKworCQkvKiBVc2UgbWluKGRhdGEgcmF0ZSwgbWF4IGJhc2UgcmF0ZSkgYXMgQ1RTL1JUUyByYXRlICovCisJCXJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW3R4LT5yYXRlX2lkeF07CisKKwkJZm9yIChpZHggPSAwOyBpZHggPCBzYmFuZC0+bl9iaXRyYXRlczsgaWR4KyspIHsKKwkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbaWR4XS5iaXRyYXRlID4gcmF0ZS0+Yml0cmF0ZSkKKwkJCQljb250aW51ZTsKKwkJCWlmICh0eC0+c2RhdGEtPmJhc2ljX3JhdGVzICYgQklUKGlkeCkgJiYKKwkJCSAgICAoYmFzZXJhdGUgPCAwIHx8CisJCQkgICAgIChzYmFuZC0+Yml0cmF0ZXNbYmFzZXJhdGVdLmJpdHJhdGUKKwkJCSAgICAgIDwgc2JhbmQtPmJpdHJhdGVzW2lkeF0uYml0cmF0ZSkpKQorCQkJCWJhc2VyYXRlID0gaWR4OworCQl9CisKKwkJaWYgKGJhc2VyYXRlID49IDApCisJCQlpbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHggPSBiYXNlcmF0ZTsKKwkJZWxzZQorCQkJaW5mby0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4ID0gMDsKKwl9CisKKwlpZiAodHgtPnN0YSkKKwkJaW5mby0+Y29udHJvbC5haWQgPSB0eC0+c3RhLT5haWQ7CisKKwlyZXR1cm4gVFhfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCitpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPnNrYik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5za2ItPmRhdGE7CisJdTE2ICpzZXE7CisJdTggKnFjOworCWludCB0aWQ7CisKKwkvKiBvbmx5IGZvciBpbmplY3RlZCBmcmFtZXMgKi8KKwlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX2N0bChoZHItPmZyYW1lX2NvbnRyb2wpKSkKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOworCisJaWYgKGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKSA8IDI0KQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUTsKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOworCX0KKworCS8qCisJICogVGhpcyBzaG91bGQgYmUgdHJ1ZSBmb3IgaW5qZWN0ZWQvbWFuYWdlbWVudCBmcmFtZXMgb25seSwgZm9yCisJICogbWFuYWdlbWVudCBmcmFtZXMgd2UgaGF2ZSBzZXQgdGhlIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUQorCSAqIGFib3ZlIHNpbmNlIHRoZXkgYXJlIG5vdCBRb1MtZGF0YSBmcmFtZXMuCisJICovCisJaWYgKCF0eC0+c3RhKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwkvKiBpbmNsdWRlIHBlci1TVEEsIHBlci1USUQgc2VxdWVuY2UgY291bnRlciAqLworCisJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKKwl0aWQgPSAqcWMgJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKKwlzZXEgPSAmdHgtPnN0YS0+dGlkX3NlcVt0aWRdOworCisJaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KCpzZXEpOworCisJLyogSW5jcmVhc2UgdGhlIHNlcXVlbmNlIG51bWJlci4gKi8KKwkqc2VxID0gKCpzZXEgKyAweDEwKSAmIElFRUU4MDIxMV9TQ1RMX1NFUTsKKworCXJldHVybiBUWF9DT05USU5VRTsKK30KKworc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV90eF9oX2ZyYWdtZW50KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSB0eC0+c2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0+c2tiLT5kYXRhOwogCXNpemVfdCBoZHJsZW4sIHBlcl9mcmFnbSwgbnVtX2ZyYWdtLCBwYXlsb2FkX2xlbiwgbGVmdDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKmZyYWdzLCAqZmlyc3QsICpmcmFnOwogCWludCBpOwpAQCAtNTE1LDkgKzY3NywxOSBAQAogCWlmICghKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSkKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCisJLyoKKwkgKiBXYXJuIHdoZW4gc3VibWl0dGluZyBhIGZyYWdtZW50ZWQgQS1NUERVIGZyYW1lIGFuZCBkcm9wIGl0LgorCSAqIFRoaXMgc2NlbmFyaW8gaXMgaGFuZGxlZCBpbiBfX2llZWU4MDIxMV90eF9wcmVwYXJlIGJ1dCBleHRyYQorCSAqIGNhdXRpb24gdGFrZW4gaGVyZSBhcyBmcmFnbWVudGVkIGFtcGR1IG1heSBjYXVzZSBUeCBzdG9wLgorCSAqLworCWlmIChXQVJOX09OKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUgfHwKKwkJICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyh0eC0+c2tiKSA+PQorCQkJaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcygmdHgtPmxvY2FsLT5odykpKQorCQlyZXR1cm4gVFhfRFJPUDsKKwogCWZpcnN0ID0gdHgtPnNrYjsKIAotCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKHR4LT5mYyk7CisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCXBheWxvYWRfbGVuID0gZmlyc3QtPmxlbiAtIGhkcmxlbjsKIAlwZXJfZnJhZ20gPSBmcmFnX3RocmVzaG9sZCAtIGhkcmxlbiAtIEZDU19MRU47CiAJbnVtX2ZyYWdtID0gRElWX1JPVU5EX1VQKHBheWxvYWRfbGVuLCBwZXJfZnJhZ20pOwpAQCAtNTU4LDYgKzczMCw4IEBACiAJCWZoZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoc2VxIHwgKChpICsgMSkgJiBJRUVFODAyMTFfU0NUTF9GUkFHKSk7CiAJCWNvcHlsZW4gPSBsZWZ0ID4gcGVyX2ZyYWdtID8gcGVyX2ZyYWdtIDogbGVmdDsKIAkJbWVtY3B5KHNrYl9wdXQoZnJhZywgY29weWxlbiksIHBvcywgY29weWxlbik7CisJCW1lbWNweShmcmFnLT5jYiwgZmlyc3QtPmNiLCBzaXplb2YoZnJhZy0+Y2IpKTsKKwkJc2tiX2NvcHlfcXVldWVfbWFwcGluZyhmcmFnLCBmaXJzdCk7CiAKIAkJcG9zICs9IGNvcHlsZW47CiAJCWxlZnQgLT0gY29weWxlbjsKQEAgLTU3MCw3ICs3NDQsNiBAQAogCXJldHVybiBUWF9DT05USU5VRTsKIAogIGZhaWw6Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gZnJhZ21lbnQgZnJhbWVcbiIsIHR4LT5kZXYtPm5hbWUpOwogCWlmIChmcmFncykgewogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZyYWdtIC0gMTsgaSsrKQogCQkJaWYgKGZyYWdzW2ldKQpAQCAtNTgxLDcgKzc1NCw3IEBACiAJcmV0dXJuIFRYX0RST1A7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0CitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCWlmICghdHgtPmtleSkKQEAgLTYwMSwyMzYgKzc3NCw1NyBAQAogCXJldHVybiBUWF9EUk9QOwogfQogCi1zdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAotaWVlZTgwMjExX3R4X2hfcmF0ZV9jdHJsKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQoraWVlZTgwMjExX3R4X2hfY2FsY3VsYXRlX2R1cmF0aW9uKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7Ci0Jc3RydWN0IHJhdGVfc2VsZWN0aW9uIHJzZWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5za2ItPmRhdGE7CisJaW50IG5leHRfbGVuLCBpOworCWludCBncm91cF9hZGRyID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CiAKLQlzYmFuZCA9IHR4LT5sb2NhbC0+aHcud2lwaHktPmJhbmRzW3R4LT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCWlmIChsaWtlbHkoIXR4LT5yYXRlKSkgewotCQlyYXRlX2NvbnRyb2xfZ2V0X3JhdGUodHgtPmRldiwgc2JhbmQsIHR4LT5za2IsICZyc2VsKTsKLQkJdHgtPnJhdGUgPSByc2VsLnJhdGU7Ci0JCWlmICh1bmxpa2VseShyc2VsLnByb2JlKSkgewotCQkJdHgtPmNvbnRyb2wtPmZsYWdzIHw9Ci0JCQkJSUVFRTgwMjExX1RYQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKLQkJCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUFJPQkVfTEFTVF9GUkFHOwotCQkJdHgtPmNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlID0gdHgtPnJhdGU7Ci0JCQl0eC0+cmF0ZSA9IHJzZWwucHJvYmU7Ci0JCX0gZWxzZQotCQkJdHgtPmNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlID0gTlVMTDsKLQotCQlpZiAoIXR4LT5yYXRlKQotCQkJcmV0dXJuIFRYX0RST1A7Ci0JfSBlbHNlCi0JCXR4LT5jb250cm9sLT5hbHRfcmV0cnlfcmF0ZSA9IE5VTEw7Ci0KLQlpZiAodHgtPnNkYXRhLT5ic3NfY29uZi51c2VfY3RzX3Byb3QgJiYKLQkgICAgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSAmJiByc2VsLm5vbmVycCkgewotCQl0eC0+bGFzdF9mcmFnX3JhdGUgPSB0eC0+cmF0ZTsKLQkJaWYgKHJzZWwucHJvYmUpCi0JCQl0eC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9QUk9CRV9MQVNUX0ZSQUc7Ci0JCWVsc2UKLQkJCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUFJPQkVfTEFTVF9GUkFHOwotCQl0eC0+cmF0ZSA9IHJzZWwubm9uZXJwOwotCQl0eC0+Y29udHJvbC0+dHhfcmF0ZSA9IHJzZWwubm9uZXJwOwotCQl0eC0+Y29udHJvbC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWENUTF9SQVRFX0NUUkxfUFJPQkU7Ci0JfSBlbHNlIHsKLQkJdHgtPmxhc3RfZnJhZ19yYXRlID0gdHgtPnJhdGU7Ci0JCXR4LT5jb250cm9sLT50eF9yYXRlID0gdHgtPnJhdGU7CisJaWYgKCEodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQpKSB7CisJCWhkci0+ZHVyYXRpb25faWQgPSBpZWVlODAyMTFfZHVyYXRpb24odHgsIGdyb3VwX2FkZHIsIDApOworCQlyZXR1cm4gVFhfQ09OVElOVUU7CiAJfQotCXR4LT5jb250cm9sLT50eF9yYXRlID0gdHgtPnJhdGU7CiAKLQlyZXR1cm4gVFhfQ09OVElOVUU7Ci19CisJaGRyLT5kdXJhdGlvbl9pZCA9IGllZWU4MDIxMV9kdXJhdGlvbih0eCwgZ3JvdXBfYWRkciwKKwkJCQkJICAgICAgdHgtPmV4dHJhX2ZyYWdbMF0tPmxlbik7CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0Ci1pZWVlODAyMTFfdHhfaF9taXNjKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSB0eC0+c2tiLT5kYXRhOwotCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JdTE2IGR1cjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wgPSB0eC0+Y29udHJvbDsKLQotCWlmICghY29udHJvbC0+cmV0cnlfbGltaXQpIHsKLQkJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgewotCQkJaWYgKHR4LT5za2ItPmxlbiArIEZDU19MRU4gPiB0eC0+bG9jYWwtPnJ0c190aHJlc2hvbGQKLQkJCSAgICAmJiB0eC0+bG9jYWwtPnJ0c190aHJlc2hvbGQgPAotCQkJCQlJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQpIHsKLQkJCQljb250cm9sLT5mbGFncyB8PQotCQkJCQlJRUVFODAyMTFfVFhDVExfVVNFX1JUU19DVFM7Ci0JCQkJY29udHJvbC0+ZmxhZ3MgfD0KLQkJCQkJSUVFRTgwMjExX1RYQ1RMX0xPTkdfUkVUUllfTElNSVQ7Ci0JCQkJY29udHJvbC0+cmV0cnlfbGltaXQgPQotCQkJCQl0eC0+bG9jYWwtPmxvbmdfcmV0cnlfbGltaXQ7Ci0JCQl9IGVsc2UgewotCQkJCWNvbnRyb2wtPnJldHJ5X2xpbWl0ID0KLQkJCQkJdHgtPmxvY2FsLT5zaG9ydF9yZXRyeV9saW1pdDsKLQkJCX0KKwlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspIHsKKwkJaWYgKGkgKyAxIDwgdHgtPm51bV9leHRyYV9mcmFnKSB7CisJCQluZXh0X2xlbiA9IHR4LT5leHRyYV9mcmFnW2kgKyAxXS0+bGVuOwogCQl9IGVsc2UgewotCQkJY29udHJvbC0+cmV0cnlfbGltaXQgPSAxOwotCQl9Ci0JfQotCi0JaWYgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSB7Ci0JCS8qIERvIG5vdCB1c2UgbXVsdGlwbGUgcmV0cnkgcmF0ZXMgd2hlbiBzZW5kaW5nIGZyYWdtZW50ZWQKLQkJICogZnJhbWVzLgotCQkgKiBUT0RPOiBUaGUgbGFzdCBmcmFnbWVudCBjb3VsZCBzdGlsbCB1c2UgbXVsdGlwbGUgcmV0cnkKLQkJICogcmF0ZXMuICovCi0JCWNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlID0gTlVMTDsKLQl9Ci0KLQkvKiBVc2UgQ1RTIHByb3RlY3Rpb24gZm9yIHVuaWNhc3QgZnJhbWVzIHNlbnQgdXNpbmcgZXh0ZW5kZWQgcmF0ZXMgaWYKLQkgKiB0aGVyZSBhcmUgYXNzb2NpYXRlZCBub24tRVJQIHN0YXRpb25zIGFuZCBSVFMvQ1RTIGlzIG5vdCBjb25maWd1cmVkCi0JICogZm9yIHRoZSBmcmFtZS4gKi8KLQlpZiAoKHR4LT5zZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFKSAmJgotCSAgICAodHgtPnJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQX0cpICYmCi0JICAgICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfVU5JQ0FTVCkgJiYKLQkgICAgdHgtPnNkYXRhLT5ic3NfY29uZi51c2VfY3RzX3Byb3QgJiYKLQkgICAgIShjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykpCi0JCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1Q7Ci0KLQkvKiBUcmFuc21pdCBkYXRhIGZyYW1lcyB1c2luZyBzaG9ydCBwcmVhbWJsZXMgaWYgdGhlIGRyaXZlciBzdXBwb3J0cwotCSAqIHNob3J0IHByZWFtYmxlcyBhdCB0aGUgc2VsZWN0ZWQgcmF0ZSBhbmQgc2hvcnQgcHJlYW1ibGVzIGFyZQotCSAqIGF2YWlsYWJsZSBvbiB0aGUgbmV0d29yayBhdCB0aGUgY3VycmVudCBwb2ludCBpbiB0aW1lLiAqLwotCWlmICgoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSAmJgotCSAgICAodHgtPnJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpICYmCi0JICAgIHR4LT5zZGF0YS0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlICYmCi0JICAgICghdHgtPnN0YSB8fCAodHgtPnN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9TSE9SVF9QUkVBTUJMRSkpKSB7Ci0JCXR4LT5jb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEU7Ci0JfQotCi0JLyogU2V0dXAgZHVyYXRpb24gZmllbGQgZm9yIHRoZSBmaXJzdCBmcmFnbWVudCBvZiB0aGUgZnJhbWUuIER1cmF0aW9uCi0JICogZm9yIHJlbWFpbmluZyBmcmFnbWVudHMgd2lsbCBiZSB1cGRhdGVkIHdoZW4gdGhleSBhcmUgYmVpbmcgc2VudAotCSAqIHRvIGxvdy1sZXZlbCBkcml2ZXIgaW4gaWVlZTgwMjExX3R4KCkuICovCi0JZHVyID0gaWVlZTgwMjExX2R1cmF0aW9uKHR4LCBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSwKLQkJCQkgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSA/Ci0JCQkJIHR4LT5leHRyYV9mcmFnWzBdLT5sZW4gOiAwKTsKLQloZHItPmR1cmF0aW9uX2lkID0gY3B1X3RvX2xlMTYoZHVyKTsKLQotCWlmICgoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX1JUU19DVFMpIHx8Ci0JICAgIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QpKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUsICpiYXNlcmF0ZTsKLQkJaW50IGlkeDsKLQotCQlzYmFuZCA9IHR4LT5sb2NhbC0+aHcud2lwaHktPmJhbmRzWwotCQkJCXR4LT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCQkvKiBEbyBub3QgdXNlIG11bHRpcGxlIHJldHJ5IHJhdGVzIHdoZW4gdXNpbmcgUlRTL0NUUyAqLwotCQljb250cm9sLT5hbHRfcmV0cnlfcmF0ZSA9IE5VTEw7Ci0KLQkJLyogVXNlIG1pbihkYXRhIHJhdGUsIG1heCBiYXNlIHJhdGUpIGFzIENUUy9SVFMgcmF0ZSAqLwotCQlyYXRlID0gdHgtPnJhdGU7Ci0JCWJhc2VyYXRlID0gTlVMTDsKLQotCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpZHgrKykgewotCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tpZHhdLmJpdHJhdGUgPiByYXRlLT5iaXRyYXRlKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHR4LT5zZGF0YS0+YmFzaWNfcmF0ZXMgJiBCSVQoaWR4KSAmJgotCQkJICAgICghYmFzZXJhdGUgfHwKLQkJCSAgICAgKGJhc2VyYXRlLT5iaXRyYXRlIDwgc2JhbmQtPmJpdHJhdGVzW2lkeF0uYml0cmF0ZSkpKQotCQkJCWJhc2VyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpZHhdOworCQkJbmV4dF9sZW4gPSAwOworCQkJdHgtPnJhdGVfaWR4ID0gdHgtPmxhc3RfZnJhZ19yYXRlX2lkeDsKIAkJfQogCi0JCWlmIChiYXNlcmF0ZSkKLQkJCWNvbnRyb2wtPnJ0c19jdHNfcmF0ZSA9IGJhc2VyYXRlOwotCQllbHNlCi0JCQljb250cm9sLT5ydHNfY3RzX3JhdGUgPSAmc2JhbmQtPmJpdHJhdGVzWzBdOwotCX0KLQotCWlmICh0eC0+c3RhKSB7Ci0JCWNvbnRyb2wtPmFpZCA9IHR4LT5zdGEtPmFpZDsKLQkJdHgtPnN0YS0+dHhfcGFja2V0cysrOwotCQl0eC0+c3RhLT50eF9mcmFnbWVudHMrKzsKLQkJdHgtPnN0YS0+dHhfYnl0ZXMgKz0gdHgtPnNrYi0+bGVuOwotCQlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKLQkJCWludCBpOwotCQkJdHgtPnN0YS0+dHhfZnJhZ21lbnRzICs9IHR4LT5udW1fZXh0cmFfZnJhZzsKLQkJCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQkJCXR4LT5zdGEtPnR4X2J5dGVzICs9Ci0JCQkJCXR4LT5leHRyYV9mcmFnW2ldLT5sZW47Ci0JCQl9Ci0JCX0KKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtPmV4dHJhX2ZyYWdbaV0tPmRhdGE7CisJCWhkci0+ZHVyYXRpb25faWQgPSBpZWVlODAyMTFfZHVyYXRpb24odHgsIDAsIG5leHRfbGVuKTsKIAl9CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0Ci1pZWVlODAyMTFfdHhfaF9sb2FkX3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQoraWVlZTgwMjExX3R4X2hfc3RhdHMoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHR4LT5sb2NhbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1MzIgbG9hZCA9IDAsIGhkcnRpbWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gdHgtPnJhdGU7CisJaW50IGk7CiAKLQkvKiBUT0RPOiB0aGlzIGNvdWxkIGJlIHBhcnQgb2YgdHhfc3RhdHVzIGhhbmRsaW5nLCBzbyB0aGF0IHRoZSBudW1iZXIKLQkgKiBvZiByZXRyaWVzIHdvdWxkIGJlIGtub3duOyBUWCByYXRlIHNob3VsZCBpbiB0aGF0IGNhc2UgYmUgc3RvcmVkCi0JICogc29tZXdoZXJlIHdpdGggdGhlIHBhY2tldCAqLworCWlmICghdHgtPnN0YSkKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCi0JLyogRXN0aW1hdGUgdG90YWwgY2hhbm5lbCB1c2UgY2F1c2VkIGJ5IHRoaXMgZnJhbWUgKi8KLQotCS8qIDEgYml0IGF0IDEgTWJpdC9zIHRha2VzIDEgdXNlYzsgaW4gY2hhbm5lbF91c2UgdmFsdWVzLAotCSAqIDEgdXNlYyA9IDEvOCAqICgxMDgwIC8gMTApID0gMTMuNSAqLwotCi0JaWYgKHR4LT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFogfHwKLQkgICAgKHR4LT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKLQkgICAgIHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQX0cpKQotCQloZHJ0aW1lID0gQ0hBTl9VVElMX0hEUl9TSE9SVDsKLQllbHNlCi0JCWhkcnRpbWUgPSBDSEFOX1VUSUxfSERSX0xPTkc7Ci0KLQlsb2FkID0gaGRydGltZTsKLQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQotCQlsb2FkICs9IGhkcnRpbWU7Ci0KLQlpZiAodHgtPmNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKQotCQlsb2FkICs9IDIgKiBoZHJ0aW1lOwotCWVsc2UgaWYgKHR4LT5jb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QpCi0JCWxvYWQgKz0gaGRydGltZTsKLQotCS8qIFRPRE86IG9wdGltaXNlIGFnYWluICovCi0JbG9hZCArPSBza2ItPmxlbiAqIENIQU5fVVRJTF9SQVRFX0xDTSAvIHJhdGUtPmJpdHJhdGU7Ci0KKwl0eC0+c3RhLT50eF9wYWNrZXRzKys7CisJdHgtPnN0YS0+dHhfZnJhZ21lbnRzKys7CisJdHgtPnN0YS0+dHhfYnl0ZXMgKz0gdHgtPnNrYi0+bGVuOwogCWlmICh0eC0+ZXh0cmFfZnJhZykgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7Ci0JCQlsb2FkICs9IDIgKiBoZHJ0aW1lOwotCQkJbG9hZCArPSB0eC0+ZXh0cmFfZnJhZ1tpXS0+bGVuICoKLQkJCQl0eC0+cmF0ZS0+Yml0cmF0ZTsKLQkJfQorCQl0eC0+c3RhLT50eF9mcmFnbWVudHMgKz0gdHgtPm51bV9leHRyYV9mcmFnOworCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspCisJCQl0eC0+c3RhLT50eF9ieXRlcyArPSB0eC0+ZXh0cmFfZnJhZ1tpXS0+bGVuOwogCX0KIAotCS8qIERpdmlkZSBjaGFubmVsX3VzZSBieSA4IHRvIGF2b2lkIHdyYXBwaW5nIGFyb3VuZCB0aGUgY291bnRlciAqLwotCWxvYWQgPj49IENIQU5fVVRJTF9TSElGVDsKLQlsb2NhbC0+Y2hhbm5lbF91c2VfcmF3ICs9IGxvYWQ7Ci0JaWYgKHR4LT5zdGEpCi0JCXR4LT5zdGEtPmNoYW5uZWxfdXNlX3JhdyArPSBsb2FkOwotCXR4LT5zZGF0YS0+Y2hhbm5lbF91c2VfcmF3ICs9IGxvYWQ7Ci0KIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKIAotdHlwZWRlZiBpZWVlODAyMTFfdHhfcmVzdWx0ICgqaWVlZTgwMjExX3R4X2hhbmRsZXIpKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqKTsKLXN0YXRpYyBpZWVlODAyMTFfdHhfaGFuZGxlciBpZWVlODAyMTFfdHhfaGFuZGxlcnNbXSA9Ci17Ci0JaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MsCi0JaWVlZTgwMjExX3R4X2hfc2VxdWVuY2UsCi0JaWVlZTgwMjExX3R4X2hfcHNfYnVmLAotCWllZWU4MDIxMV90eF9oX3NlbGVjdF9rZXksCi0JaWVlZTgwMjExX3R4X2hfbWljaGFlbF9taWNfYWRkLAotCWllZWU4MDIxMV90eF9oX2ZyYWdtZW50LAotCWllZWU4MDIxMV90eF9oX2VuY3J5cHQsCi0JaWVlZTgwMjExX3R4X2hfcmF0ZV9jdHJsLAotCWllZWU4MDIxMV90eF9oX21pc2MsCi0JaWVlZTgwMjExX3R4X2hfbG9hZF9zdGF0cywKLQlOVUxMCi19OwotCiAvKiBhY3R1YWwgdHJhbnNtaXQgcGF0aCAqLwogCiAvKgpAQCAtODU0LDEyICs4NDgsMTIgQEAKIAkJKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlpbnQgcmV0ID0gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQoJml0ZXJhdG9yLCBydGhkciwgc2tiLT5sZW4pOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCA9IHR4LT5jb250cm9sOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAotCXNiYW5kID0gdHgtPmxvY2FsLT5ody53aXBoeS0+YmFuZHNbdHgtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCXNiYW5kID0gdHgtPmxvY2FsLT5ody53aXBoeS0+YmFuZHNbdHgtPmNoYW5uZWwtPmJhbmRdOwogCi0JY29udHJvbC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX0RPX05PVF9FTkNSWVBUOwotCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5KRUNURUQ7CisJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9ET19OT1RfRU5DUllQVDsKKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEOwogCXR4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAKIAkvKgpAQCAtODk2LDcgKzg5MCw3IEBACiAJCQkJciA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07CiAKIAkJCQlpZiAoci0+Yml0cmF0ZSA9PSB0YXJnZXRfcmF0ZSkgewotCQkJCQl0eC0+cmF0ZSA9IHI7CisJCQkJCXR4LT5yYXRlX2lkeCA9IGk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KQEAgLTkwNyw3ICs5MDEsNyBAQAogCQkJICogcmFkaW90YXAgdXNlcyAwIGZvciAxc3QgYW50LCBtYWM4MDIxMSBpcyAxIGZvcgogCQkJICogMXN0IGFudAogCQkJICovCi0JCQljb250cm9sLT5hbnRlbm5hX3NlbF90eCA9ICgqaXRlcmF0b3IudGhpc19hcmcpICsgMTsKKwkJCWluZm8tPmFudGVubmFfc2VsX3R4ID0gKCppdGVyYXRvci50aGlzX2FyZykgKyAxOwogCQkJYnJlYWs7CiAKICNpZiAwCkBAIC05MzEsOCArOTI1LDggQEAKIAkJCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gRkNTX0xFTik7CiAJCQl9CiAJCQlpZiAoKml0ZXJhdG9yLnRoaXNfYXJnICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfV0VQKQotCQkJCWNvbnRyb2wtPmZsYWdzICY9Ci0JCQkJCX5JRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQ7CisJCQkJaW5mby0+ZmxhZ3MgJj0KKwkJCQkJfklFRUU4MDIxMV9UWF9DVExfRE9fTk9UX0VOQ1JZUFQ7CiAJCQlpZiAoKml0ZXJhdG9yLnRoaXNfYXJnICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRykKIAkJCQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAJCQlicmVhazsKQEAgLTk2NywxMiArOTYxLDEyIEBACiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAogX19pZWVlODAyMTFfdHhfcHJlcGFyZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4LAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCisJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKIAlpbnQgaGRybGVuOwogCkBAIC05ODEsNyArOTc1LDkgQEAKIAl0eC0+ZGV2ID0gZGV2OyAvKiB1c2Ugb3JpZ2luYWwgaW50ZXJmYWNlICovCiAJdHgtPmxvY2FsID0gbG9jYWw7CiAJdHgtPnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQl0eC0+Y29udHJvbCA9IGNvbnRyb2w7CisJdHgtPmNoYW5uZWwgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOworCXR4LT5yYXRlX2lkeCA9IC0xOworCXR4LT5sYXN0X2ZyYWdfcmF0ZV9pZHggPSAtMTsKIAkvKgogCSAqIFNldCB0aGlzIGZsYWcgKHVzZWQgYmVsb3cgdG8gaW5kaWNhdGUgImF1dG9tYXRpYyBmcmFnbWVudGF0aW9uIiksCiAJICogaXQgd2lsbCBiZSBjbGVhcmVkL2xlZnQgYnkgcmFkaW90YXAgYXMgZGVzaXJlZC4KQEAgLTEwMDgsMzQgKzEwMDQsMzMgQEAKIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgewogCQl0eC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9VTklDQVNUOwotCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfTk9fQUNLOworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSzsKIAl9IGVsc2UgewogCQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1VOSUNBU1Q7Ci0JCWNvbnRyb2wtPmZsYWdzICY9IH5JRUVFODAyMTFfVFhDVExfTk9fQUNLOworCQlpbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0NUTF9OT19BQ0s7CiAJfQogCiAJaWYgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSB7CiAJCWlmICgodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYX1VOSUNBU1QpICYmCiAJCSAgICBza2ItPmxlbiArIEZDU19MRU4gPiBsb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgJiYKLQkJICAgICFsb2NhbC0+b3BzLT5zZXRfZnJhZ190aHJlc2hvbGQpCisJCSAgICAhbG9jYWwtPm9wcy0+c2V0X2ZyYWdfdGhyZXNob2xkICYmCisJCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpCiAJCQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAJCWVsc2UKIAkJCXR4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAJfQogCiAJaWYgKCF0eC0+c3RhKQotCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfQ0xFQVJfUFNfRklMVDsKLQllbHNlIGlmICh0eC0+c3RhLT5mbGFncyAmIFdMQU5fU1RBX0NMRUFSX1BTX0ZJTFQpIHsKLQkJY29udHJvbC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX0NMRUFSX1BTX0ZJTFQ7Ci0JCXR4LT5zdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9DTEVBUl9QU19GSUxUOwotCX0KKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUOworCWVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX3N0YV9mbGFncyh0eC0+c3RhLCBXTEFOX1NUQV9DTEVBUl9QU19GSUxUKSkKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUOwogCiAJaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4odHgtPmZjKTsKIAlpZiAoc2tiLT5sZW4gPiBoZHJsZW4gKyBzaXplb2YocmZjMTA0Ml9oZWFkZXIpICsgMikgewogCQl1OCAqcG9zID0gJnNrYi0+ZGF0YVtoZHJsZW4gKyBzaXplb2YocmZjMTA0Ml9oZWFkZXIpXTsKIAkJdHgtPmV0aGVydHlwZSA9IChwb3NbMF0gPDwgOCkgfCBwb3NbMV07CiAJfQotCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9GSVJTVF9GUkFHTUVOVDsKKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQpAQCAtMTA0NSwxNCArMTA0MCwxMiBAQAogICovCiBzdGF0aWMgaW50IGllZWU4MDIxMV90eF9wcmVwYXJlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbWRldiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSAqcGt0X2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlwa3RfZGF0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICopc2tiLT5jYjsKLQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgcGt0X2RhdGEtPmlmaW5kZXgpOworCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpbmZvLT5jb250cm9sLmlmaW5kZXgpOwogCWlmICh1bmxpa2VseShkZXYgJiYgIWlzX2llZWU4MDIxMV9kZXZpY2UoZGV2LCBtZGV2KSkpIHsKIAkJZGV2X3B1dChkZXYpOwogCQlkZXYgPSBOVUxMOwpAQCAtMTA2MCw3ICsxMDUzLDcgQEAKIAlpZiAodW5saWtlbHkoIWRldikpCiAJCXJldHVybiAtRU5PREVWOwogCS8qIGluaXRpYWxpc2VzIHR4IHdpdGggY29udHJvbCAqLwotCV9faWVlZTgwMjExX3R4X3ByZXBhcmUodHgsIHNrYiwgZGV2LCBjb250cm9sKTsKKwlfX2llZWU4MDIxMV90eF9wcmVwYXJlKHR4LCBza2IsIGRldik7CiAJZGV2X3B1dChkZXYpOwogCXJldHVybiAwOwogfQpAQCAtMTA2OCw1MCArMTA2MSw0OSBAQAogc3RhdGljIGludCBfX2llZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wgPSB0eC0+Y29udHJvbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJaW50IHJldCwgaTsKIAotCWlmICghaWVlZTgwMjExX3FkaXNjX2luc3RhbGxlZChsb2NhbC0+bWRldikgJiYKLQkgICAgX19pZWVlODAyMTFfcXVldWVfc3RvcHBlZChsb2NhbCwgMCkpIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShsb2NhbC0+bWRldik7CisJaWYgKG5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsIHNrYikpCiAJCXJldHVybiBJRUVFODAyMTFfVFhfQUdBSU47Ci0JfQorCiAJaWYgKHNrYikgewogCQlpZWVlODAyMTFfZHVtcF9mcmFtZSh3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksCiAJCQkJICAgICAiVFggdG8gbG93LWxldmVsIGRyaXZlciIsIHNrYik7Ci0JCXJldCA9IGxvY2FsLT5vcHMtPnR4KGxvY2FsX3RvX2h3KGxvY2FsKSwgc2tiLCBjb250cm9sKTsKKwkJcmV0ID0gbG9jYWwtPm9wcy0+dHgobG9jYWxfdG9faHcobG9jYWwpLCBza2IpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9BR0FJTjsKIAkJbG9jYWwtPm1kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJaWVlZTgwMjExX2xlZF90eChsb2NhbCwgMSk7CiAJfQogCWlmICh0eC0+ZXh0cmFfZnJhZykgewotCQljb250cm9sLT5mbGFncyAmPSB+KElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUyB8Ci0JCQkJICAgIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QgfAotCQkJCSAgICBJRUVFODAyMTFfVFhDVExfQ0xFQVJfUFNfRklMVCB8Ci0JCQkJICAgIElFRUU4MDIxMV9UWENUTF9GSVJTVF9GUkFHTUVOVCk7CiAJCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewogCQkJaWYgKCF0eC0+ZXh0cmFfZnJhZ1tpXSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChfX2llZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKGxvY2FsLCBjb250cm9sLT5xdWV1ZSkpCisJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+ZXh0cmFfZnJhZ1tpXSk7CisJCQlpbmZvLT5mbGFncyAmPSB+KElFRUU4MDIxMV9UWF9DVExfVVNFX1JUU19DVFMgfAorCQkJCQkgSUVFRTgwMjExX1RYX0NUTF9VU0VfQ1RTX1BST1RFQ1QgfAorCQkJCQkgSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUIHwKKwkJCQkJIElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQpOworCQkJaWYgKG5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsCisJCQkJCQkgICB0eC0+ZXh0cmFfZnJhZ1tpXSkpCiAJCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9GUkFHX0FHQUlOOwogCQkJaWYgKGkgPT0gdHgtPm51bV9leHRyYV9mcmFnKSB7Ci0JCQkJY29udHJvbC0+dHhfcmF0ZSA9IHR4LT5sYXN0X2ZyYWdfcmF0ZTsKKwkJCQlpbmZvLT50eF9yYXRlX2lkeCA9IHR4LT5sYXN0X2ZyYWdfcmF0ZV9pZHg7CiAKIAkJCQlpZiAodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYX1BST0JFX0xBU1RfRlJBRykKLQkJCQkJY29udHJvbC0+ZmxhZ3MgfD0KLQkJCQkJCUlFRUU4MDIxMV9UWENUTF9SQVRFX0NUUkxfUFJPQkU7CisJCQkJCWluZm8tPmZsYWdzIHw9CisJCQkJCQlJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKIAkJCQllbHNlCi0JCQkJCWNvbnRyb2wtPmZsYWdzICY9Ci0JCQkJCQl+SUVFRTgwMjExX1RYQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKKwkJCQkJaW5mby0+ZmxhZ3MgJj0KKwkJCQkJCX5JRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKIAkJCX0KIAogCQkJaWVlZTgwMjExX2R1bXBfZnJhbWUod2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLAogCQkJCQkgICAgICJUWCB0byBsb3ctbGV2ZWwgZHJpdmVyIiwKIAkJCQkJICAgICB0eC0+ZXh0cmFfZnJhZ1tpXSk7CiAJCQlyZXQgPSBsb2NhbC0+b3BzLT50eChsb2NhbF90b19odyhsb2NhbCksCi0JCQkJCSAgICB0eC0+ZXh0cmFfZnJhZ1tpXSwKLQkJCQkJICAgIGNvbnRyb2wpOworCQkJCQkgICAgdHgtPmV4dHJhX2ZyYWdbaV0pOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU47CiAJCQlsb2NhbC0+bWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwpAQCAtMTEyNCwxNyArMTExNiw2NSBAQAogCXJldHVybiBJRUVFODAyMTFfVFhfT0s7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCisvKgorICogSW52b2tlIFRYIGhhbmRsZXJzLCByZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCBub24temVybyBpZiB0aGUKKyAqIGZyYW1lIHdhcyBkcm9wcGVkIG9yIHF1ZXVlZC4KKyAqLworc3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKKwlpZWVlODAyMTFfdHhfcmVzdWx0IHJlcyA9IFRYX0RST1A7CisJaW50IGk7CisKKyNkZWZpbmUgQ0FMTF9UWEgodHhoKQkJXAorCXJlcyA9IHR4aCh0eCk7CQlcCisJaWYgKHJlcyAhPSBUWF9DT05USU5VRSkJXAorCQlnb3RvIHR4aF9kb25lOworCisJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MpCisJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfcHNfYnVmKQorCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlbGVjdF9rZXkpCisJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfbWljaGFlbF9taWNfYWRkKQorCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3JhdGVfY3RybCkKKwlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9taXNjKQorCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKQorCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX2ZyYWdtZW50KQorCS8qIGhhbmRsZXJzIGFmdGVyIGZyYWdtZW50IG11c3QgYmUgYXdhcmUgb2YgdHggaW5mbyBmcmFnbWVudGF0aW9uISAqLworCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX2VuY3J5cHQpCisJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2FsY3VsYXRlX2R1cmF0aW9uKQorCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3N0YXRzKQorI3VuZGVmIENBTExfVFhICisKKyB0eGhfZG9uZToKKwlpZiAodW5saWtlbHkocmVzID09IFRYX0RST1ApKSB7CisJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcCk7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKQorCQkJaWYgKHR4LT5leHRyYV9mcmFnW2ldKQorCQkJCWRldl9rZnJlZV9za2IodHgtPmV4dHJhX2ZyYWdbaV0pOworCQlrZnJlZSh0eC0+ZXh0cmFfZnJhZyk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKHVubGlrZWx5KHJlcyA9PSBUWF9RVUVVRUQpKSB7CisJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfcXVldWVkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaWVlZTgwMjExX3R4X2hhbmRsZXIgKmhhbmRsZXI7CiAJc3RydWN0IGllZWU4MDIxMV90eF9kYXRhIHR4OwotCWllZWU4MDIxMV90eF9yZXN1bHQgcmVzID0gVFhfRFJPUCwgcmVzX3ByZXBhcmU7Ci0JaW50IHJldCwgaSwgcmV0cmllcyA9IDA7CisJaWVlZTgwMjExX3R4X3Jlc3VsdCByZXNfcHJlcGFyZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJaW50IHJldCwgaTsKKwl1MTYgcXVldWU7CiAKLQlXQVJOX09OKF9faWVlZTgwMjExX3F1ZXVlX3BlbmRpbmcobG9jYWwsIGNvbnRyb2wtPnF1ZXVlKSk7CisJcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKworCVdBUk5fT04odGVzdF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZykpOwogCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMTApKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTExNDQsNyArMTE4NCw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCiAJLyogaW5pdGlhbGlzZXMgdHggKi8KLQlyZXNfcHJlcGFyZSA9IF9faWVlZTgwMjExX3R4X3ByZXBhcmUoJnR4LCBza2IsIGRldiwgY29udHJvbCk7CisJcmVzX3ByZXBhcmUgPSBfX2llZWU4MDIxMV90eF9wcmVwYXJlKCZ0eCwgc2tiLCBkZXYpOwogCiAJaWYgKHJlc19wcmVwYXJlID09IFRYX0RST1ApIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTE1NCw4NiArMTE5NCw1MyBAQAogCiAJc3RhID0gdHguc3RhOwogCXR4LmNoYW5uZWwgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOworCWluZm8tPmJhbmQgPSB0eC5jaGFubmVsLT5iYW5kOwogCi0JZm9yIChoYW5kbGVyID0gaWVlZTgwMjExX3R4X2hhbmRsZXJzOyAqaGFuZGxlciAhPSBOVUxMOwotCSAgICAgaGFuZGxlcisrKSB7Ci0JCXJlcyA9ICgqaGFuZGxlcikoJnR4KTsKLQkJaWYgKHJlcyAhPSBUWF9DT05USU5VRSkKLQkJCWJyZWFrOwotCX0KLQotCXNrYiA9IHR4LnNrYjsgLyogaGFuZGxlcnMgYXJlIGFsbG93ZWQgdG8gY2hhbmdlIHNrYiAqLwotCi0JaWYgKHVubGlrZWx5KHJlcyA9PSBUWF9EUk9QKSkgewotCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcCk7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLQlpZiAodW5saWtlbHkocmVzID09IFRYX1FVRVVFRCkpIHsKLQkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2hhbmRsZXJzX3F1ZXVlZCk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAodHguZXh0cmFfZnJhZykgewotCQlmb3IgKGkgPSAwOyBpIDwgdHgubnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQkJaW50IG5leHRfbGVuLCBkdXI7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0KLQkJCQkoc3RydWN0IGllZWU4MDIxMV9oZHIgKikKLQkJCQl0eC5leHRyYV9mcmFnW2ldLT5kYXRhOwotCi0JCQlpZiAoaSArIDEgPCB0eC5udW1fZXh0cmFfZnJhZykgewotCQkJCW5leHRfbGVuID0gdHguZXh0cmFfZnJhZ1tpICsgMV0tPmxlbjsKLQkJCX0gZWxzZSB7Ci0JCQkJbmV4dF9sZW4gPSAwOwotCQkJCXR4LnJhdGUgPSB0eC5sYXN0X2ZyYWdfcmF0ZTsKLQkJCX0KLQkJCWR1ciA9IGllZWU4MDIxMV9kdXJhdGlvbigmdHgsIDAsIG5leHRfbGVuKTsKLQkJCWhkci0+ZHVyYXRpb25faWQgPSBjcHVfdG9fbGUxNihkdXIpOwotCQl9Ci0JfQorCWlmIChpbnZva2VfdHhfaGFuZGxlcnMoJnR4KSkKKwkJZ290byBvdXQ7CiAKIHJldHJ5OgogCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCBza2IsICZ0eCk7CiAJaWYgKHJldCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0b3JlZF9wYWNrZXQgKnN0b3JlID0KLQkJCSZsb2NhbC0+cGVuZGluZ19wYWNrZXRbY29udHJvbC0+cXVldWVdOworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0b3JlZF9wYWNrZXQgKnN0b3JlOworCisJCS8qCisJCSAqIFNpbmNlIHRoZXJlIGFyZSBubyBmcmFnbWVudGVkIGZyYW1lcyBvbiBBLU1QRFUKKwkJICogcXVldWVzLCB0aGVyZSdzIG5vIHJlYXNvbiBmb3IgYSBkcml2ZXIgdG8gcmVqZWN0CisJCSAqIGEgZnJhbWUgdGhlcmUsIHdhcm4gYW5kIGRyb3AgaXQuCisJCSAqLworCQlpZiAoV0FSTl9PTihxdWV1ZSA+PSBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKCZsb2NhbC0+aHcpKSkKKwkJCWdvdG8gZHJvcDsKKworCQlzdG9yZSA9ICZsb2NhbC0+cGVuZGluZ19wYWNrZXRbcXVldWVdOwogCiAJCWlmIChyZXQgPT0gSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU4pCiAJCQlza2IgPSBOVUxMOwotCQlzZXRfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1BFTkRJTkcsCi0JCQkmbG9jYWwtPnN0YXRlW2NvbnRyb2wtPnF1ZXVlXSk7CisJCXNldF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZyk7CiAJCXNtcF9tYigpOwotCQkvKiBXaGVuIHRoZSBkcml2ZXIgZ2V0cyBvdXQgb2YgYnVmZmVycyBkdXJpbmcgc2VuZGluZyBvZgotCQkgKiBmcmFnbWVudHMgYW5kIGNhbGxzIGllZWU4MDIxMV9zdG9wX3F1ZXVlLCB0aGVyZSBpcwotCQkgKiBhIHNtYWxsIHdpbmRvdyBiZXR3ZWVuIElFRUU4MDIxMV9MSU5LX1NUQVRFX1hPRkYgYW5kCi0JCSAqIElFRUU4MDIxMV9MSU5LX1NUQVRFX1BFTkRJTkcgZmxhZ3MgYXJlIHNldC4gSWYgYSBidWZmZXIKKwkJLyoKKwkJICogV2hlbiB0aGUgZHJpdmVyIGdldHMgb3V0IG9mIGJ1ZmZlcnMgZHVyaW5nIHNlbmRpbmcgb2YKKwkJICogZnJhZ21lbnRzIGFuZCBjYWxscyBpZWVlODAyMTFfc3RvcF9xdWV1ZSwgdGhlIG5ldGlmCisJCSAqIHN1YnF1ZXVlIGlzIHN0b3BwZWQuIFRoZXJlIGlzLCBob3dldmVyLCBhIHNtYWxsIHdpbmRvdworCQkgKiBpbiB3aGljaCB0aGUgUEVORElORyBiaXQgaXMgbm90IHlldCBzZXQuIElmIGEgYnVmZmVyCiAJCSAqIGdldHMgYXZhaWxhYmxlIGluIHRoYXQgd2luZG93IChpLmUuIGRyaXZlciBjYWxscwogCQkgKiBpZWVlODAyMTFfd2FrZV9xdWV1ZSksIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGllZWU4MDIxMV90eAotCQkgKiBjYWxsZWQgd2l0aCBJRUVFODAyMTFfTElOS19TVEFURV9QRU5ESU5HLiBQcmV2ZW50IHRoaXMgYnkKKwkJICogY2FsbGVkIHdpdGggdGhlIFBFTkRJTkcgYml0IHN0aWxsIHNldC4gUHJldmVudCB0aGlzIGJ5CiAJCSAqIGNvbnRpbnVpbmcgdHJhbnNtaXR0aW5nIGhlcmUgd2hlbiB0aGF0IHNpdHVhdGlvbiBpcwotCQkgKiBwb3NzaWJsZSB0byBoYXZlIGhhcHBlbmVkLiAqLwotCQlpZiAoIV9faWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQobG9jYWwsIGNvbnRyb2wtPnF1ZXVlKSkgewotCQkJY2xlYXJfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1BFTkRJTkcsCi0JCQkJICAmbG9jYWwtPnN0YXRlW2NvbnRyb2wtPnF1ZXVlXSk7Ci0JCQlyZXRyaWVzKys7Ci0JCQkvKgotCQkJICogRHJpdmVyIGJ1ZywgaXQncyByZWplY3RpbmcgcGFja2V0cyBidXQKLQkJCSAqIG5vdCBzdG9wcGluZyBxdWV1ZXMuCi0JCQkgKi8KLQkJCWlmIChXQVJOX09OX09OQ0UocmV0cmllcyA+IDUpKQotCQkJCWdvdG8gZHJvcDsKKwkJICogcG9zc2libGUgdG8gaGF2ZSBoYXBwZW5lZC4KKwkJICovCisJCWlmICghX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBxdWV1ZSkpIHsKKwkJCWNsZWFyX2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KLQkJbWVtY3B5KCZzdG9yZS0+Y29udHJvbCwgY29udHJvbCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wpKTsKIAkJc3RvcmUtPnNrYiA9IHNrYjsKIAkJc3RvcmUtPmV4dHJhX2ZyYWcgPSB0eC5leHRyYV9mcmFnOwogCQlzdG9yZS0+bnVtX2V4dHJhX2ZyYWcgPSB0eC5udW1fZXh0cmFfZnJhZzsKLQkJc3RvcmUtPmxhc3RfZnJhZ19yYXRlID0gdHgubGFzdF9mcmFnX3JhdGU7CisJCXN0b3JlLT5sYXN0X2ZyYWdfcmF0ZV9pZHggPSB0eC5sYXN0X2ZyYWdfcmF0ZV9pZHg7CiAJCXN0b3JlLT5sYXN0X2ZyYWdfcmF0ZV9jdHJsX3Byb2JlID0KIAkJCSEhKHR4LmZsYWdzICYgSUVFRTgwMjExX1RYX1BST0JFX0xBU1RfRlJBRyk7CiAJfQorIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gMDsKIApAQCAtMTI1MCwyNCArMTI1Nyw1NyBAQAogCiAvKiBkZXZpY2UgeG1pdCBoYW5kbGVycyAqLwogCitzdGF0aWMgaW50IGllZWU4MDIxMV9za2JfcmVzaXplKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQkJaW50IGhlYWRfbmVlZCwgYm9vbCBtYXlfZW5jcnlwdCkKK3sKKwlpbnQgdGFpbF9uZWVkID0gMDsKKworCS8qCisJICogVGhpcyBjb3VsZCBiZSBvcHRpbWlzZWQsIGRldmljZXMgdGhhdCBkbyBmdWxsIGhhcmR3YXJlCisJICogY3J5cHRvIChpbmNsdWRpbmcgVEtJUCBNTUlDKSBuZWVkIG5vIHRhaWxyb29tLi4uIEJ1dCB3ZQorCSAqIGhhdmUgbm8gZHJpdmVycyBmb3Igc3VjaCBkZXZpY2VzIGN1cnJlbnRseS4KKwkgKi8KKwlpZiAobWF5X2VuY3J5cHQpIHsKKwkJdGFpbF9uZWVkID0gSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT007CisJCXRhaWxfbmVlZCAtPSBza2JfdGFpbHJvb20oc2tiKTsKKwkJdGFpbF9uZWVkID0gbWF4X3QoaW50LCB0YWlsX25lZWQsIDApOworCX0KKworCWlmIChoZWFkX25lZWQgfHwgdGFpbF9uZWVkKSB7CisJCS8qIFNvcnJ5LiBDYW4ndCBhY2NvdW50IGZvciB0aGlzIGFueSBtb3JlICovCisJCXNrYl9vcnBoYW4oc2tiKTsKKwl9CisKKwlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkKKwkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZF9jbG9uZWQpOworCWVsc2UKKwkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZCk7CisKKwlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGhlYWRfbmVlZCwgdGFpbF9uZWVkLCBHRlBfQVRPTUlDKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byByZWFsbG9jYXRlIFRYIGJ1ZmZlclxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHVwZGF0ZSB0cnVlc2l6ZSB0b28gKi8KKwlza2ItPnRydWVzaXplICs9IGhlYWRfbmVlZCArIHRhaWxfbmVlZDsKKworCXJldHVybiAwOworfQorCiBpbnQgaWVlZTgwMjExX21hc3Rlcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICpwa3RfZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKm9zZGF0YTsKIAlpbnQgaGVhZHJvb207CisJYm9vbCBtYXlfZW5jcnlwdDsKIAlpbnQgcmV0OwogCi0JLyoKLQkgKiBjb3B5IGNvbnRyb2wgb3V0IG9mIHRoZSBza2Igc28gb3RoZXIgcGVvcGxlIGNhbiB1c2Ugc2tiLT5jYgotCSAqLwotCXBrdF9kYXRhID0gKHN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKilza2ItPmNiOwotCW1lbXNldCgmY29udHJvbCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCkpOwotCi0JaWYgKHBrdF9kYXRhLT5pZmluZGV4KQotCQlvZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIHBrdF9kYXRhLT5pZmluZGV4KTsKKwlpZiAoaW5mby0+Y29udHJvbC5pZmluZGV4KQorCQlvZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGluZm8tPmNvbnRyb2wuaWZpbmRleCk7CiAJaWYgKHVubGlrZWx5KG9kZXYgJiYgIWlzX2llZWU4MDIxMV9kZXZpY2Uob2RldiwgZGV2KSkpIHsKIAkJZGV2X3B1dChvZGV2KTsKIAkJb2RldiA9IE5VTEw7CkBAIC0xMjgwLDMyICsxMzIwLDI1IEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQorCiAJb3NkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYob2Rldik7CiAKLQloZWFkcm9vbSA9IG9zZGF0YS0+bG9jYWwtPnR4X2hlYWRyb29tICsgSUVFRTgwMjExX0VOQ1JZUFRfSEVBRFJPT007Ci0JaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgaGVhZHJvb20pIHsKLQkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBoZWFkcm9vbSwgMCwgR0ZQX0FUT01JQykpIHsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWRldl9wdXQob2Rldik7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCW1heV9lbmNyeXB0ID0gIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfRE9fTk9UX0VOQ1JZUFQpOworCisJaGVhZHJvb20gPSBvc2RhdGEtPmxvY2FsLT50eF9oZWFkcm9vbTsKKwlpZiAobWF5X2VuY3J5cHQpCisJCWhlYWRyb29tICs9IElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NOworCWhlYWRyb29tIC09IHNrYl9oZWFkcm9vbShza2IpOworCWhlYWRyb29tID0gbWF4X3QoaW50LCAwLCBoZWFkcm9vbSk7CisKKwlpZiAoaWVlZTgwMjExX3NrYl9yZXNpemUob3NkYXRhLT5sb2NhbCwgc2tiLCBoZWFkcm9vbSwgbWF5X2VuY3J5cHQpKSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJZGV2X3B1dChvZGV2KTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JY29udHJvbC52aWYgPSAmb3NkYXRhLT52aWY7Ci0JY29udHJvbC50eXBlID0gb3NkYXRhLT52aWYudHlwZTsKLQlpZiAocGt0X2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1RYUERfUkVRX1RYX1NUQVRVUykKLQkJY29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfUkVRX1RYX1NUQVRVUzsKLQlpZiAocGt0X2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1RYUERfRE9fTk9UX0VOQ1JZUFQpCi0JCWNvbnRyb2wuZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX0RPX05PVF9FTkNSWVBUOwotCWlmIChwa3RfZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhQRF9SRVFVRVVFKQotCQljb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9SRVFVRVVFOwotCWlmIChwa3RfZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhQRF9FQVBPTF9GUkFNRSkKLQkJY29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfRUFQT0xfRlJBTUU7Ci0JaWYgKHBrdF9kYXRhLT5mbGFncyAmIElFRUU4MDIxMV9UWFBEX0FNUERVKQotCQljb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9BTVBEVTsKLQljb250cm9sLnF1ZXVlID0gcGt0X2RhdGEtPnF1ZXVlOwotCi0JcmV0ID0gaWVlZTgwMjExX3R4KG9kZXYsIHNrYiwgJmNvbnRyb2wpOworCWluZm8tPmNvbnRyb2wudmlmID0gJm9zZGF0YS0+dmlmOworCXJldCA9IGllZWU4MDIxMV90eChvZGV2LCBza2IpOwogCWRldl9wdXQob2Rldik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTMxNSw3ICsxMzQ4LDcgQEAKIAkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKnBrdF9kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcHJ0aGRyID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopc2tiLT5kYXRhOwogCXUxNiBsZW5fcnRoZHI7CkBAIC0xMzM3LDEyICsxMzcwLDEyIEBACiAKIAlza2ItPmRldiA9IGxvY2FsLT5tZGV2OwogCi0JcGt0X2RhdGEgPSAoc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSAqKXNrYi0+Y2I7Ci0JbWVtc2V0KHBrdF9kYXRhLCAwLCBzaXplb2YoKnBrdF9kYXRhKSk7CiAJLyogbmVlZGVkIGJlY2F1c2Ugd2Ugc2V0IHNrYiBkZXZpY2UgdG8gbWFzdGVyICovCi0JcGt0X2RhdGEtPmlmaW5kZXggPSBkZXYtPmlmaW5kZXg7CisJaW5mby0+Y29udHJvbC5pZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCi0JcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX0RPX05PVF9FTkNSWVBUOworCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfRE9fTk9UX0VOQ1JZUFQ7CisJLyogSW50ZXJmYWNlcyBzaG91bGQgYWx3YXlzIHJlcXVlc3QgYSBzdGF0dXMgcmVwb3J0ICovCisJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwogCiAJLyoKIAkgKiBmaXggdXAgdGhlIHBvaW50ZXJzIGFjY291bnRpbmcgZm9yIHRoZSByYWRpb3RhcApAQCAtMTM4NiwxMCArMTQxOSwxMSBAQAogCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICpwa3RfZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IHJldCA9IDEsIGhlYWRfbmVlZDsKLQl1MTYgZXRoZXJ0eXBlLCBoZHJsZW4sICBtZXNoaGRybGVuID0gMCwgZmM7CisJdTE2IGV0aGVydHlwZSwgaGRybGVuLCAgbWVzaGhkcmxlbiA9IDA7CisJX19sZTE2IGZjOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyIGhkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExc19oZHIgbWVzaF9oZHI7CiAJY29uc3QgdTggKmVuY2Fwc19kYXRhOwpAQCAtMTQwMCw4ICsxNDM0LDYgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBFVEhfSExFTikpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzaG9ydCBza2IgKGxlbj0lZClcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHNrYi0+bGVuKTsKIAkJcmV0ID0gMDsKIAkJZ290byBmYWlsOwogCX0KQEAgLTE0MTIsMTIgKzE0NDQsMTIgQEAKIAkvKiBjb252ZXJ0IEV0aGVybmV0IGhlYWRlciB0byBwcm9wZXIgODAyLjExIGhlYWRlciAoYmFzZWQgb24KIAkgKiBvcGVyYXRpb24gbW9kZSkgKi8KIAlldGhlcnR5cGUgPSAoc2tiLT5kYXRhWzEyXSA8PCA4KSB8IHNrYi0+ZGF0YVsxM107Ci0JZmMgPSBJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9EQVRBOworCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfREFUQSk7CiAKIAlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfQVA6CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOOgotCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9GUk9NRFM7CisJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyk7CiAJCS8qIERBIEJTU0lEIFNBICovCiAJCW1lbWNweShoZHIuYWRkcjEsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CkBAIC0xNDI1LDcgKzE0NTcsNyBAQAogCQloZHJsZW4gPSAyNDsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6Ci0JCWZjIHw9IElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFM7CisJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCQkvKiBSQSBUQSBEQSBTQSAqLwogCQltZW1jcHkoaGRyLmFkZHIxLCBzZGF0YS0+dS53ZHMucmVtb3RlX2FkZHIsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyMiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwpAQCAtMTQzNSw3ICsxNDY3LDcgQEAKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQ6Ci0JCWZjIHw9IElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFM7CisJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCQkvKiBSQSBUQSBEQSBTQSAqLwogCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoc2tiLT5kYXRhKSkKIAkJCW1lbWNweShoZHIuYWRkcjEsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwpAQCAtMTQ2NSw3ICsxNDk3LDcgQEAKIAkJYnJlYWs7CiAjZW5kaWYKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKLQkJZmMgfD0gSUVFRTgwMjExX0ZDVExfVE9EUzsKKwkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk7CiAJCS8qIEJTU0lEIFNBIERBICovCiAJCW1lbWNweShoZHIuYWRkcjEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIyLCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwpAQCAtMTQ5MywxMyArMTUyNSwxNCBAQAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLmFkZHIxKTsKIAkJaWYgKHN0YSkKLQkJCXN0YV9mbGFncyA9IHN0YS0+ZmxhZ3M7CisJCQlzdGFfZmxhZ3MgPSBnZXRfc3RhX2ZsYWdzKHN0YSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAotCS8qIHJlY2VpdmVyIGlzIFFvUyBlbmFibGVkLCB1c2UgYSBRb1MgdHlwZSBmcmFtZSAqLwotCWlmIChzdGFfZmxhZ3MgJiBXTEFOX1NUQV9XTUUpIHsKLQkJZmMgfD0gSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBOworCS8qIHJlY2VpdmVyIGFuZCB3ZSBhcmUgUW9TIGVuYWJsZWQsIHVzZSBhIFFvUyB0eXBlIGZyYW1lICovCisJaWYgKHN0YV9mbGFncyAmIFdMQU5fU1RBX1dNRSAmJgorCSAgICBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKCZsb2NhbC0+aHcpID49IDQpIHsKKwkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBKTsKIAkJaGRybGVuICs9IDI7CiAJfQogCkBAIC0xNTI3LDcgKzE1NjAsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JaGRyLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CisJaGRyLmZyYW1lX2NvbnRyb2wgPSBmYzsKIAloZHIuZHVyYXRpb25faWQgPSAwOwogCWhkci5zZXFfY3RybCA9IDA7CiAKQEAgLTE1NjIsMzIgKzE1OTUsMjYgQEAKIAkgKiBidWlsZCBpbiBoZWFkcm9vbSBpbiBfX2Rldl9hbGxvY19za2IoKSAobGludXgvc2tidWZmLmgpIGFuZAogCSAqIGFsbG9jX3NrYigpIChuZXQvY29yZS9za2J1ZmYuYykKIAkgKi8KLQloZWFkX25lZWQgPSBoZHJsZW4gKyBlbmNhcHNfbGVuICsgbWVzaGhkcmxlbiArIGxvY2FsLT50eF9oZWFkcm9vbTsKLQloZWFkX25lZWQgLT0gc2tiX2hlYWRyb29tKHNrYik7CisJaGVhZF9uZWVkID0gaGRybGVuICsgZW5jYXBzX2xlbiArIG1lc2hoZHJsZW4gLSBza2JfaGVhZHJvb20oc2tiKTsKIAotCS8qIFdlIGFyZSBnb2luZyB0byBtb2RpZnkgc2tiIGRhdGEsIHNvIG1ha2UgYSBjb3B5IG9mIGl0IGlmIGhhcHBlbnMgdG8KLQkgKiBiZSBjbG9uZWQuIFRoaXMgY291bGQgaGFwcGVuLCBlLmcuLCB3aXRoIExpbnV4IGJyaWRnZSBjb2RlIHBhc3NpbmcKLQkgKiB1cyBicm9hZGNhc3QgZnJhbWVzLiAqLworCS8qCisJICogU28gd2UgbmVlZCB0byBtb2RpZnkgdGhlIHNrYiBoZWFkZXIgYW5kIGhlbmNlIG5lZWQgYSBjb3B5IG9mCisJICogdGhhdC4gVGhlIGhlYWRfbmVlZCB2YXJpYWJsZSBhYm92ZSBkb2Vzbid0LCBzbyBmYXIsIGluY2x1ZGUKKwkgKiB0aGUgbmVlZGVkIGhlYWRlciBzcGFjZSB0aGF0IHdlIGRvbid0IG5lZWQgcmlnaHQgYXdheS4gSWYgd2UKKwkgKiBjYW4sIHRoZW4gd2UgZG9uJ3QgcmVhbGxvY2F0ZSByaWdodCBub3cgYnV0IG9ubHkgYWZ0ZXIgdGhlCisJICogZnJhbWUgYXJyaXZlcyBhdCB0aGUgbWFzdGVyIGRldmljZSAoaWYgaXQgZG9lcy4uLikKKwkgKgorCSAqIElmIHdlIGNhbm5vdCwgaG93ZXZlciwgdGhlbiB3ZSB3aWxsIHJlYWxsb2NhdGUgdG8gaW5jbHVkZSBhbGwKKwkgKiB0aGUgZXZlciBuZWVkZWQgc3BhY2UuIEFsc28sIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBpdCBhbnl3YXksCisJICogbWFrZSBpdCBiaWcgZW5vdWdoIGZvciBldmVyeXRoaW5nIHdlIG1heSBldmVyIG5lZWQuCisJICovCiAKIAlpZiAoaGVhZF9uZWVkID4gMCB8fCBza2JfY2xvbmVkKHNrYikpIHsKLSNpZiAwCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogbmVlZCB0byByZWFsbG9jYXRlIGJ1ZmZlciBmb3IgJWQgYnl0ZXMgIgotCQkgICAgICAgIm9mIGhlYWRyb29tXG4iLCBkZXYtPm5hbWUsIGhlYWRfbmVlZCk7Ci0jZW5kaWYKLQotCQlpZiAoc2tiX2Nsb25lZChza2IpKQotCQkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZF9jbG9uZWQpOwotCQllbHNlCi0JCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfZXhwYW5kX3NrYl9oZWFkKTsKLQkJLyogU2luY2Ugd2UgaGF2ZSB0byByZWFsbG9jYXRlIHRoZSBidWZmZXIsIG1ha2Ugc3VyZSB0aGF0IHRoZXJlCi0JCSAqIGlzIGVub3VnaCByb29tIGZvciBwb3NzaWJsZSBXRVAgSVYvSUNWIGFuZCBUS0lQICg4IGJ5dGVzCi0JCSAqIGJlZm9yZSBwYXlsb2FkIGFuZCAxMiBhZnRlcikuICovCi0JCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgKGhlYWRfbmVlZCA+IDAgPyBoZWFkX25lZWQgKyA4IDogOCksCi0JCQkJICAgICAxMiwgR0ZQX0FUT01JQykpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHJlYWxsb2NhdGUgVFggYnVmZmVyIgotCQkJICAgICAgICJcbiIsIGRldi0+bmFtZSk7CisJCWhlYWRfbmVlZCArPSBJRUVFODAyMTFfRU5DUllQVF9IRUFEUk9PTTsKKwkJaGVhZF9uZWVkICs9IGxvY2FsLT50eF9oZWFkcm9vbTsKKwkJaGVhZF9uZWVkID0gbWF4X3QoaW50LCAwLCBoZWFkX25lZWQpOworCQlpZiAoaWVlZTgwMjExX3NrYl9yZXNpemUobG9jYWwsIHNrYiwgaGVhZF9uZWVkLCB0cnVlKSkKIAkJCWdvdG8gZmFpbDsKLQkJfQogCX0KIAogCWlmIChlbmNhcHNfZGF0YSkgewpAQCAtMTYwMiw3ICsxNjI5LDcgQEAKIAkJaF9wb3MgKz0gbWVzaGhkcmxlbjsKIAl9CiAKLQlpZiAoZmMgJiBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEpIHsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQlfX2xlMTYgKnFvc19jb250cm9sOwogCiAJCXFvc19jb250cm9sID0gKF9fbGUxNiopIHNrYl9wdXNoKHNrYiwgMik7CkBAIC0xNjE4LDExICsxNjQ1LDE0IEBACiAJbmhfcG9zICs9IGhkcmxlbjsKIAloX3BvcyArPSBoZHJsZW47CiAKLQlwa3RfZGF0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICopc2tiLT5jYjsKLQltZW1zZXQocGt0X2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhKSk7Ci0JcGt0X2RhdGEtPmlmaW5kZXggPSBkZXYtPmlmaW5kZXg7CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisJaW5mby0+Y29udHJvbC5pZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCWlmIChldGhlcnR5cGUgPT0gRVRIX1BfUEFFKQotCQlwa3RfZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUERfRUFQT0xfRlJBTUU7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfRUFQT0xfRlJBTUU7CisKKwkvKiBJbnRlcmZhY2VzIHNob3VsZCBhbHdheXMgcmVxdWVzdCBhIHN0YXR1cyByZXBvcnQgKi8KKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7CiAKIAlza2ItPmRldiA9IGxvY2FsLT5tZGV2OwogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwpAQCAtMTY0Nyw0NiArMTY3Nyw1NSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIGhlbHBlciBmdW5jdGlvbnMgZm9yIHBlbmRpbmcgcGFja2V0cyBmb3Igd2hlbiBxdWV1ZXMgYXJlIHN0b3BwZWQgKi8KIAorLyoKKyAqIGllZWU4MDIxMV9jbGVhcl90eF9wZW5kaW5nIG1heSBub3QgYmUgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZQorICogaXQgaXMgcG9zc2libGUgdGhhdCBpdCBwYWNrZXRzIGNvdWxkIGNvbWUgaW4gYWdhaW4uCisgKi8KIHZvaWQgaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJaW50IGksIGo7CiAJc3RydWN0IGllZWU4MDIxMV90eF9zdG9yZWRfcGFja2V0ICpzdG9yZTsKIAotCWZvciAoaSA9IDA7IGkgPCBsb2NhbC0+aHcucXVldWVzOyBpKyspIHsKLQkJaWYgKCFfX2llZWU4MDIxMV9xdWV1ZV9wZW5kaW5nKGxvY2FsLCBpKSkKKwlmb3IgKGkgPSAwOyBpIDwgaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcygmbG9jYWwtPmh3KTsgaSsrKSB7CisJCWlmICghdGVzdF9iaXQoaSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKSkKIAkJCWNvbnRpbnVlOwogCQlzdG9yZSA9ICZsb2NhbC0+cGVuZGluZ19wYWNrZXRbaV07CiAJCWtmcmVlX3NrYihzdG9yZS0+c2tiKTsKIAkJZm9yIChqID0gMDsgaiA8IHN0b3JlLT5udW1fZXh0cmFfZnJhZzsgaisrKQogCQkJa2ZyZWVfc2tiKHN0b3JlLT5leHRyYV9mcmFnW2pdKTsKIAkJa2ZyZWUoc3RvcmUtPmV4dHJhX2ZyYWcpOwotCQljbGVhcl9iaXQoSUVFRTgwMjExX0xJTktfU1RBVEVfUEVORElORywgJmxvY2FsLT5zdGF0ZVtpXSk7CisJCWNsZWFyX2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpOwogCX0KIH0KIAorLyoKKyAqIFRyYW5zbWl0IGFsbCBwZW5kaW5nIHBhY2tldHMuIENhbGxlZCBmcm9tIHRhc2tsZXQsIGxvY2tzIG1hc3RlciBkZXZpY2UKKyAqIFRYIGxvY2sgc28gdGhhdCBubyBuZXcgcGFja2V0cyBjYW4gY29tZSBpbi4KKyAqLwogdm9pZCBpZWVlODAyMTFfdHhfcGVuZGluZyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqKWRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5tZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RvcmVkX3BhY2tldCAqc3RvcmU7CiAJc3RydWN0IGllZWU4MDIxMV90eF9kYXRhIHR4OwotCWludCBpLCByZXQsIHJlc2NoZWR1bGUgPSAwOworCWludCBpLCByZXQ7CiAKIAluZXRpZl90eF9sb2NrX2JoKGRldik7Ci0JZm9yIChpID0gMDsgaSA8IGxvY2FsLT5ody5xdWV1ZXM7IGkrKykgewotCQlpZiAoX19pZWVlODAyMTFfcXVldWVfc3RvcHBlZChsb2NhbCwgaSkpCisJZm9yIChpID0gMDsgaSA8IGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoJmxvY2FsLT5odyk7IGkrKykgeworCQkvKiBDaGVjayB0aGF0IHRoaXMgcXVldWUgaXMgb2sgKi8KKwkJaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgaSkpCiAJCQljb250aW51ZTsKLQkJaWYgKCFfX2llZWU4MDIxMV9xdWV1ZV9wZW5kaW5nKGxvY2FsLCBpKSkgewotCQkJcmVzY2hlZHVsZSA9IDE7CisKKwkJaWYgKCF0ZXN0X2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpKSB7CisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZSgmbG9jYWwtPmh3LCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CisKIAkJc3RvcmUgPSAmbG9jYWwtPnBlbmRpbmdfcGFja2V0W2ldOwotCQl0eC5jb250cm9sID0gJnN0b3JlLT5jb250cm9sOwogCQl0eC5leHRyYV9mcmFnID0gc3RvcmUtPmV4dHJhX2ZyYWc7CiAJCXR4Lm51bV9leHRyYV9mcmFnID0gc3RvcmUtPm51bV9leHRyYV9mcmFnOwotCQl0eC5sYXN0X2ZyYWdfcmF0ZSA9IHN0b3JlLT5sYXN0X2ZyYWdfcmF0ZTsKKwkJdHgubGFzdF9mcmFnX3JhdGVfaWR4ID0gc3RvcmUtPmxhc3RfZnJhZ19yYXRlX2lkeDsKIAkJdHguZmxhZ3MgPSAwOwogCQlpZiAoc3RvcmUtPmxhc3RfZnJhZ19yYXRlX2N0cmxfcHJvYmUpCiAJCQl0eC5mbGFncyB8PSBJRUVFODAyMTFfVFhfUFJPQkVfTEFTVF9GUkFHOwpAQCAtMTY5NSwxOSArMTczNCwxMSBAQAogCQkJaWYgKHJldCA9PSBJRUVFODAyMTFfVFhfRlJBR19BR0FJTikKIAkJCQlzdG9yZS0+c2tiID0gTlVMTDsKIAkJfSBlbHNlIHsKLQkJCWNsZWFyX2JpdChJRUVFODAyMTFfTElOS19TVEFURV9QRU5ESU5HLAotCQkJCSAgJmxvY2FsLT5zdGF0ZVtpXSk7Ci0JCQlyZXNjaGVkdWxlID0gMTsKKwkJCWNsZWFyX2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpOworCQkJaWVlZTgwMjExX3dha2VfcXVldWUoJmxvY2FsLT5odywgaSk7CiAJCX0KIAl9CiAJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7Ci0JaWYgKHJlc2NoZWR1bGUpIHsKLQkJaWYgKCFpZWVlODAyMTFfcWRpc2NfaW5zdGFsbGVkKGRldikpIHsKLQkJCWlmICghX19pZWVlODAyMTFfcXVldWVfc3RvcHBlZChsb2NhbCwgMCkpCi0JCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQl9IGVsc2UKLQkJCW5ldGlmX3NjaGVkdWxlKGRldik7Ci0JfQogfQogCiAvKiBmdW5jdGlvbnMgZm9yIGRyaXZlcnMgdG8gZ2V0IGNlcnRhaW4gZnJhbWVzICovCkBAIC0xNzc2LDIzICsxODA3LDI0IEBACiB9CiAKIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYmVhY29uX2dldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBuZXRfZGV2aWNlICpiZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICphcCA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gTlVMTDsKIAlzdHJ1Y3QgcmF0ZV9zZWxlY3Rpb24gcnNlbDsKIAlzdHJ1Y3QgYmVhY29uX2RhdGEgKmJlYWNvbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJaW50ICpudW1fYmVhY29uczsKLQlib29sIGVyciA9IHRydWU7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKIAl1OCAqcG9zOwogCi0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIApAQCAtMTgxNyw5ICsxODQ5LDYgQEAKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgYmVhY29uLT5oZWFkX2xlbiksIGJlYWNvbi0+aGVhZCwKIAkJCSAgICAgICBiZWFjb24tPmhlYWRfbGVuKTsKIAotCQkJaWVlZTgwMjExX2luY2x1ZGVfc2VxdWVuY2Uoc2RhdGEsCi0JCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSk7Ci0KIAkJCS8qCiAJCQkgKiBOb3QgdmVyeSBuaWNlLCBidXQgd2Ugd2FudCB0byBhbGxvdyB0aGUgZHJpdmVyIHRvIGNhbGwKIAkJCSAqIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgYXMgYSByZXNwb25zZSB0byB0aGUgc2V0X3RpbSgpCkBAIC0xODQyLDkgKzE4NzEsMjQgQEAKIAkJCQkgICAgICAgYmVhY29uLT50YWlsLCBiZWFjb24tPnRhaWxfbGVuKTsKIAogCQkJbnVtX2JlYWNvbnMgPSAmYXAtPm51bV9iZWFjb25zOworCQl9IGVsc2UKKwkJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwkJaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCi0JCQllcnIgPSBmYWxzZTsKLQkJfQorCQlpZiAoIWlmc3RhLT5wcm9iZV9yZXNwKQorCQkJZ290byBvdXQ7CisKKwkJc2tiID0gc2tiX2NvcHkoaWZzdGEtPnByb2JlX3Jlc3AsIEdGUF9BVE9NSUMpOworCQlpZiAoIXNrYikKKwkJCWdvdG8gb3V0OworCisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJCWhkci0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKKwkJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CisKKwkJbnVtX2JlYWNvbnMgPSAmaWZzdGEtPm51bV9iZWFjb25zOwogCX0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewogCQkvKiBoZWFkcm9vbSwgaGVhZCBsZW5ndGgsIHRhaWwgbGVuZ3RoIGFuZCBtYXhpbXVtIFRJTSBsZW5ndGggKi8KIAkJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+dHhfaGVhZHJvb20gKyA0MDApOwpAQCAtMTg1NSw4ICsxODk5LDggQEAKIAkJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikKIAkJCXNrYl9wdXQoc2tiLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOwogCQltZW1zZXQobWdtdCwgMCwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKLQkJbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKLQkJCQkJCSAgIElFRUU4MDIxMV9TVFlQRV9CRUFDT04pOworCQltZ210LT5mcmFtZV9jb250cm9sID0KKwkJICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CiAJCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwogCQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJCS8qIEJTU0lEIGlzIGxlZnQgemVyb2VkLCB3aWxkY2FyZCB2YWx1ZSAqLwpAQCAtMTg3MSw0NCArMTkxNSw0MSBAQAogCQltZXNoX21nbXRfaWVzX2FkZChza2IsIHNkYXRhLT5kZXYpOwogCiAJCW51bV9iZWFjb25zID0gJnNkYXRhLT51LnN0YS5udW1fYmVhY29uczsKLQotCQllcnIgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlXQVJOX09OKDEpOworCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZXJyKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJubyBiZWFjb24gZGF0YSBhdmFpbCBmb3IgJXNcbiIsCi0JCQkgICAgICAgYmRldi0+bmFtZSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJaW5mby0+YmFuZCA9IGJhbmQ7CisJcmF0ZV9jb250cm9sX2dldF9yYXRlKGxvY2FsLT5tZGV2LCBzYmFuZCwgc2tiLCAmcnNlbCk7CisKKwlpZiAodW5saWtlbHkocnNlbC5yYXRlX2lkeCA8IDApKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaWVlZTgwMjExX2JlYWNvbl9nZXQ6ICIKKwkJCSAgICAgICAibm8gcmF0ZSBmb3VuZFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCQl9CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJc2tiID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGNvbnRyb2wpIHsKLQkJcmF0ZV9jb250cm9sX2dldF9yYXRlKGxvY2FsLT5tZGV2LCBzYmFuZCwgc2tiLCAmcnNlbCk7Ci0JCWlmICghcnNlbC5yYXRlKSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpZWVlODAyMTFfYmVhY29uX2dldDogIgotCQkJCSAgICAgICAibm8gcmF0ZSBmb3VuZFxuIiwKLQkJCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKLQkJCX0KLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXNrYiA9IE5VTEw7Ci0JCQlnb3RvIG91dDsKLQkJfQorCWluZm8tPmNvbnRyb2wudmlmID0gdmlmOworCWluZm8tPnR4X3JhdGVfaWR4ID0gcnNlbC5yYXRlX2lkeDsKIAotCQljb250cm9sLT52aWYgPSB2aWY7Ci0JCWNvbnRyb2wtPnR4X3JhdGUgPSByc2VsLnJhdGU7Ci0JCWlmIChzZGF0YS0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlICYmCi0JCSAgICByc2VsLnJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpCi0JCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEU7Ci0JCWNvbnRyb2wtPmFudGVubmFfc2VsX3R4ID0gbG9jYWwtPmh3LmNvbmYuYW50ZW5uYV9zZWxfdHg7Ci0JCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9OT19BQ0s7Ci0JCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9ET19OT1RfRU5DUllQVDsKLQkJY29udHJvbC0+cmV0cnlfbGltaXQgPSAxOwotCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfQ0xFQVJfUFNfRklMVDsKLQl9CisJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9OT19BQ0s7CisJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9ET19OT1RfRU5DUllQVDsKKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0NMRUFSX1BTX0ZJTFQ7CisJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VROworCWlmIChzZGF0YS0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlICYmCisJICAgIHNiYW5kLT5iaXRyYXRlc1tyc2VsLnJhdGVfaWR4XS5mbGFncyAmIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKQorCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1NIT1JUX1BSRUFNQkxFOworCisJaW5mby0+YW50ZW5uYV9zZWxfdHggPSBsb2NhbC0+aHcuY29uZi5hbnRlbm5hX3NlbF90eDsKKwlpbmZvLT5jb250cm9sLnJldHJ5X2xpbWl0ID0gMTsKKwogCSgqbnVtX2JlYWNvbnMpKys7CiBvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xOTE4LDE0ICsxOTU5LDEzIEBACiAKIHZvaWQgaWVlZTgwMjExX3J0c19nZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCSAgICAgICBjb25zdCB2b2lkICpmcmFtZSwgc2l6ZV90IGZyYW1lX2xlbiwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqZnJhbWVfdHhjdGwsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmZyYW1lX3R4Y3RsLAogCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ydHMgKnJ0cykKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gZnJhbWU7Ci0JdTE2IGZjdGw7CiAKLQlmY3RsID0gSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9SVFM7Ci0JcnRzLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmN0bCk7CisJcnRzLT5mcmFtZV9jb250cm9sID0KKwkgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9SVFMpOwogCXJ0cy0+ZHVyYXRpb24gPSBpZWVlODAyMTFfcnRzX2R1cmF0aW9uKGh3LCB2aWYsIGZyYW1lX2xlbiwKIAkJCQkJICAgICAgIGZyYW1lX3R4Y3RsKTsKIAltZW1jcHkocnRzLT5yYSwgaGRyLT5hZGRyMSwgc2l6ZW9mKHJ0cy0+cmEpKTsKQEAgLTE5MzUsMTQgKzE5NzUsMTMgQEAKIAogdm9pZCBpZWVlODAyMTFfY3RzdG9zZWxmX2dldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgICAgY29uc3Qgdm9pZCAqZnJhbWUsIHNpemVfdCBmcmFtZV9sZW4sCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqZnJhbWVfdHhjdGwsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqZnJhbWVfdHhjdGwsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY3RzICpjdHMpCiB7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IGZyYW1lOwotCXUxNiBmY3RsOwogCi0JZmN0bCA9IElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfQ1RTOwotCWN0cy0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjdGwpOworCWN0cy0+ZnJhbWVfY29udHJvbCA9CisJICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfQ1RTKTsKIAljdHMtPmR1cmF0aW9uID0gaWVlZTgwMjExX2N0c3Rvc2VsZl9kdXJhdGlvbihodywgdmlmLAogCQkJCQkJICAgICBmcmFtZV9sZW4sIGZyYW1lX3R4Y3RsKTsKIAltZW1jcHkoY3RzLT5yYSwgaGRyLT5hZGRyMSwgc2l6ZW9mKGN0cy0+cmEpKTsKQEAgLTE5NTEsMjMgKzE5OTAsMjEgQEAKIAogc3RydWN0IHNrX2J1ZmYgKgogaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaWVlZTgwMjExX3R4X2hhbmRsZXIgKmhhbmRsZXI7CiAJc3RydWN0IGllZWU4MDIxMV90eF9kYXRhIHR4OwotCWllZWU4MDIxMV90eF9yZXN1bHQgcmVzID0gVFhfRFJPUDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqYmRldjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICpic3MgPSBOVUxMOwogCXN0cnVjdCBiZWFjb25fZGF0YSAqYmVhY29uOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAogCXNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CiAJYmRldiA9IHNkYXRhLT5kZXY7Ci0KKwlic3MgPSAmc2RhdGEtPnUuYXA7CiAKIAlpZiAoIWJzcykKIAkJcmV0dXJuIE5VTEw7CkBAIC0xOTc1LDE5ICsyMDEyLDE2IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWJlYWNvbiA9IHJjdV9kZXJlZmVyZW5jZShic3MtPmJlYWNvbik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0FQIHx8ICFiZWFjb24gfHwKLQkgICAgIWJlYWNvbi0+aGVhZCkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgfHwgIWJlYWNvbiB8fCAhYmVhY29uLT5oZWFkKQorCQlnb3RvIG91dDsKIAogCWlmIChic3MtPmR0aW1fY291bnQgIT0gMCkKLQkJcmV0dXJuIE5VTEw7IC8qIHNlbmQgYnVmZmVyZWQgYmMvbWMgb25seSBhZnRlciBEVElNIGJlYWNvbiAqLwotCW1lbXNldChjb250cm9sLCAwLCBzaXplb2YoKmNvbnRyb2wpKTsKKwkJZ290byBvdXQ7IC8qIHNlbmQgYnVmZmVyZWQgYmMvbWMgb25seSBhZnRlciBEVElNIGJlYWNvbiAqLworCiAJd2hpbGUgKDEpIHsKIAkJc2tiID0gc2tiX2RlcXVldWUoJmJzcy0+cHNfYmNfYnVmKTsKIAkJaWYgKCFza2IpCi0JCQlyZXR1cm4gTlVMTDsKKwkJCWdvdG8gb3V0OwogCQlsb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQtLTsKIAogCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYnNzLT5wc19iY19idWYpICYmIHNrYi0+bGVuID49IDIpIHsKQEAgLTIwMDAsMzAgKzIwMzQsMjEgQEAKIAkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CiAJCX0KIAotCQlpZiAoIWllZWU4MDIxMV90eF9wcmVwYXJlKCZ0eCwgc2tiLCBsb2NhbC0+bWRldiwgY29udHJvbCkpCisJCWlmICghaWVlZTgwMjExX3R4X3ByZXBhcmUoJnR4LCBza2IsIGxvY2FsLT5tZGV2KSkKIAkJCWJyZWFrOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KKworCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKIAlzdGEgPSB0eC5zdGE7CiAJdHguZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1BTX0JVRkZFUkVEOwogCXR4LmNoYW5uZWwgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOworCWluZm8tPmJhbmQgPSB0eC5jaGFubmVsLT5iYW5kOwogCi0JZm9yIChoYW5kbGVyID0gaWVlZTgwMjExX3R4X2hhbmRsZXJzOyAqaGFuZGxlciAhPSBOVUxMOyBoYW5kbGVyKyspIHsKLQkJcmVzID0gKCpoYW5kbGVyKSgmdHgpOwotCQlpZiAocmVzID09IFRYX0RST1AgfHwgcmVzID09IFRYX1FVRVVFRCkKLQkJCWJyZWFrOwotCX0KLQlza2IgPSB0eC5za2I7IC8qIGhhbmRsZXJzIGFyZSBhbGxvd2VkIHRvIGNoYW5nZSBza2IgKi8KLQotCWlmIChyZXMgPT0gVFhfRFJPUCkgewotCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcCk7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlpZiAoaW52b2tlX3R4X2hhbmRsZXJzKCZ0eCkpCiAJCXNrYiA9IE5VTEw7Ci0JfSBlbHNlIGlmIChyZXMgPT0gVFhfUVVFVUVEKSB7Ci0JCUk4MDJfREVCVUdfSU5DKGxvY2FsLT50eF9oYW5kbGVyc19xdWV1ZWQpOwotCQlza2IgPSBOVUxMOwotCX0KLQorIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBza2I7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCA0ZTk3YjI2Li4xOWY4NWUxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTQ1LDM4ICs0NSwzNyBAQAogdTggKmllZWU4MDIxMV9nZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgc2l6ZV90IGxlbiwKIAkJCWVudW0gaWVlZTgwMjExX2lmX3R5cGVzIHR5cGUpCiB7Ci0JdTE2IGZjOworCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAogCSAvKiBkcm9wIEFDSy9DVFMgZnJhbWVzIGFuZCBpbmNvcnJlY3QgaGRyIGxlbiAoY3RybCkgKi8KIAlpZiAobGVuIDwgMTYpCiAJCXJldHVybiBOVUxMOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCi0Jc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CiAJCWlmIChsZW4gPCAyNCkgLyogZHJvcCBpbmNvcnJlY3QgaGRyIGxlbiAoZGF0YSkgKi8KIAkJCXJldHVybiBOVUxMOwotCQlzd2l0Y2ggKGZjICYgKElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSB7Ci0JCWNhc2UgSUVFRTgwMjExX0ZDVExfVE9EUzoKLQkJCXJldHVybiBoZHItPmFkZHIxOwotCQljYXNlIChJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKToKKworCQlpZiAoaWVlZTgwMjExX2hhc19hNChmYykpCiAJCQlyZXR1cm4gTlVMTDsKLQkJY2FzZSBJRUVFODAyMTFfRkNUTF9GUk9NRFM6CisJCWlmIChpZWVlODAyMTFfaGFzX3RvZHMoZmMpKQorCQkJcmV0dXJuIGhkci0+YWRkcjE7CisJCWlmIChpZWVlODAyMTFfaGFzX2Zyb21kcyhmYykpCiAJCQlyZXR1cm4gaGRyLT5hZGRyMjsKLQkJY2FzZSAwOgotCQkJcmV0dXJuIGhkci0+YWRkcjM7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKKworCQlyZXR1cm4gaGRyLT5hZGRyMzsKKwl9CisKKwlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKSB7CiAJCWlmIChsZW4gPCAyNCkgLyogZHJvcCBpbmNvcnJlY3QgaGRyIGxlbiAobWdtdCkgKi8KIAkJCXJldHVybiBOVUxMOwogCQlyZXR1cm4gaGRyLT5hZGRyMzsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX1BTUE9MTCkKKwl9CisKKwlpZiAoaWVlZTgwMjExX2lzX2N0bChmYykpIHsKKwkJaWYoaWVlZTgwMjExX2lzX3BzcG9sbChmYykpCiAJCQlyZXR1cm4gaGRyLT5hZGRyMTsKLQkJZWxzZSBpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09Ci0JCQkJCQlJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEpIHsKKworCQlpZiAoaWVlZTgwMjExX2lzX2JhY2tfcmVxKGZjKSkgewogCQkJc3dpdGNoICh0eXBlKSB7CiAJCQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKIAkJCQlyZXR1cm4gaGRyLT5hZGRyMjsKQEAgLTg0LDExICs4Myw5IEBACiAJCQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46CiAJCQkJcmV0dXJuIGhkci0+YWRkcjE7CiAJCQlkZWZhdWx0OgotCQkJCXJldHVybiBOVUxMOworCQkJCWJyZWFrOyAvKiBmYWxsIHRocm91Z2ggdG8gdGhlIHJldHVybiAqLwogCQkJfQogCQl9Ci0JCWVsc2UKLQkJCXJldHVybiBOVUxMOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtMTMzLDE0ICsxMzAsNDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2dldF9oZHJsZW4pOwogCi1pbnQgaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3Vuc2lnbmVkIGludCBpZWVlODAyMTFfaGRybGVuKF9fbGUxNiBmYykKIHsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlpbnQgaGRybGVuOworCXVuc2lnbmVkIGludCBoZHJsZW4gPSAyNDsKKworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKKwkJaWYgKGllZWU4MDIxMV9oYXNfYTQoZmMpKQorCQkJaGRybGVuID0gMzA7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKQorCQkJaGRybGVuICs9IElFRUU4MDIxMV9RT1NfQ1RMX0xFTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGllZWU4MDIxMV9pc19jdGwoZmMpKSB7CisJCS8qCisJCSAqIEFDSyBhbmQgQ1RTIGFyZSAxMCBieXRlcywgYWxsIG90aGVycyAxNi4gVG8gc2VlIGhvdworCQkgKiB0byBnZXQgdGhpcyBjb25kaXRpb24gY29uc2lkZXIKKwkJICogICBzdWJ0eXBlIG1hc2s6ICAgMGIwMDAwMDAwMDExMTEwMDAwICgweDAwRjApCisJCSAqICAgQUNLIHN1YnR5cGU6ICAgIDBiMDAwMDAwMDAxMTAxMDAwMCAoMHgwMEQwKQorCQkgKiAgIENUUyBzdWJ0eXBlOiAgICAwYjAwMDAwMDAwMTEwMDAwMDAgKDB4MDBDMCkKKwkJICogICBiaXRzIHRoYXQgbWF0dGVyOiAgICAgICAgIF5eXiAgICAgICgweDAwRTApCisJCSAqICAgdmFsdWUgb2YgdGhvc2U6IDBiMDAwMDAwMDAxMTAwMDAwMCAoMHgwMEMwKQorCQkgKi8KKwkJaWYgKChmYyAmIGNwdV90b19sZTE2KDB4MDBFMCkpID09IGNwdV90b19sZTE2KDB4MDBDMCkpCisJCQloZHJsZW4gPSAxMDsKKwkJZWxzZQorCQkJaGRybGVuID0gMTY7CisJfQorb3V0OgorCXJldHVybiBoZHJsZW47Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9oZHJsZW4pOworCit1bnNpZ25lZCBpbnQgaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCXVuc2lnbmVkIGludCBoZHJsZW47CiAKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCAxMCkpCiAJCXJldHVybiAwOwotCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAlpZiAodW5saWtlbHkoaGRybGVuID4gc2tiLT5sZW4pKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gaGRybGVuOwpAQCAtMjU4LDcgKzI4Nyw3IEBACiAKIF9fbGUxNiBpZWVlODAyMTFfcnRzX2R1cmF0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc2l6ZV90IGZyYW1lX2xlbiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqZnJhbWVfdHhjdGwpCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmZyYW1lX3R4Y3RsKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKQEAgLTI2NiwxMCArMjk1LDEzIEBACiAJYm9vbCBzaG9ydF9wcmVhbWJsZTsKIAlpbnQgZXJwOwogCXUxNiBkdXI7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CiAKIAlzaG9ydF9wcmVhbWJsZSA9IHNkYXRhLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGU7CiAKLQlyYXRlID0gZnJhbWVfdHhjdGwtPnJ0c19jdHNfcmF0ZTsKKwlyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tmcmFtZV90eGN0bC0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4XTsKIAogCWVycCA9IDA7CiAJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREUpCkBAIC0yOTIsNyArMzI0LDcgQEAKIF9fbGUxNiBpZWVlODAyMTFfY3RzdG9zZWxmX2R1cmF0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICBzaXplX3QgZnJhbWVfbGVuLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmZyYW1lX3R4Y3RsKQorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmZyYW1lX3R4Y3RsKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKQEAgLTMwMCwxMCArMzMyLDEzIEBACiAJYm9vbCBzaG9ydF9wcmVhbWJsZTsKIAlpbnQgZXJwOwogCXUxNiBkdXI7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CiAKIAlzaG9ydF9wcmVhbWJsZSA9IHNkYXRhLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGU7CiAKLQlyYXRlID0gZnJhbWVfdHhjdGwtPnJ0c19jdHNfcmF0ZTsKKwlyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tmcmFtZV90eGN0bC0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4XTsKIAllcnAgPSAwOwogCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFKQogCQllcnAgPSByYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUF9HOwpAQCAtMzExLDcgKzM0Niw3IEBACiAJLyogRGF0YSBmcmFtZSBkdXJhdGlvbiAqLwogCWR1ciA9IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihsb2NhbCwgZnJhbWVfbGVuLCByYXRlLT5iaXRyYXRlLAogCQkJCSAgICAgICBlcnAsIHNob3J0X3ByZWFtYmxlKTsKLQlpZiAoIShmcmFtZV90eGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfTk9fQUNLKSkgeworCWlmICghKGZyYW1lX3R4Y3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgewogCQkvKiBBQ0sgZHVyYXRpb24gKi8KIAkJZHVyICs9IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihsb2NhbCwgMTAsIHJhdGUtPmJpdHJhdGUsCiAJCQkJCQllcnAsIHNob3J0X3ByZWFtYmxlKTsKQEAgLTMyNSwxNyArMzYwLDEwIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1hPRkYsCi0JCQkgICAgICAgJmxvY2FsLT5zdGF0ZVtxdWV1ZV0pKSB7Ci0JCWlmICh0ZXN0X2JpdChJRUVFODAyMTFfTElOS19TVEFURV9QRU5ESU5HLAotCQkJICAgICAmbG9jYWwtPnN0YXRlW3F1ZXVlXSkpCi0JCQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKLQkJZWxzZQotCQkJaWYgKCFpZWVlODAyMTFfcWRpc2NfaW5zdGFsbGVkKGxvY2FsLT5tZGV2KSkgewotCQkJCWlmIChxdWV1ZSA9PSAwKQotCQkJCQluZXRpZl93YWtlX3F1ZXVlKGxvY2FsLT5tZGV2KTsKLQkJCX0gZWxzZQotCQkJCV9fbmV0aWZfc2NoZWR1bGUobG9jYWwtPm1kZXYpOworCWlmICh0ZXN0X2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKSkgeworCQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKKwl9IGVsc2UgeworCQluZXRpZl93YWtlX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd2FrZV9xdWV1ZSk7CkBAIC0zNDQsMjkgKzM3MiwxNSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCi0JaWYgKCFpZWVlODAyMTFfcWRpc2NfaW5zdGFsbGVkKGxvY2FsLT5tZGV2KSAmJiBxdWV1ZSA9PSAwKQotCQluZXRpZl9zdG9wX3F1ZXVlKGxvY2FsLT5tZGV2KTsKLQlzZXRfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1hPRkYsICZsb2NhbC0+c3RhdGVbcXVldWVdKTsKKwluZXRpZl9zdG9wX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3F1ZXVlKTsKIAotdm9pZCBpZWVlODAyMTFfc3RhcnRfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxvY2FsLT5ody5xdWV1ZXM7IGkrKykKLQkJY2xlYXJfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1hPRkYsICZsb2NhbC0+c3RhdGVbaV0pOwotCWlmICghaWVlZTgwMjExX3FkaXNjX2luc3RhbGxlZChsb2NhbC0+bWRldikpCi0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGxvY2FsLT5tZGV2KTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3F1ZXVlcyk7Ci0KIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpOyBpKyspCiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBpKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfcXVldWVzKTsKQEAgLTM3NSw3ICszODksNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnF1ZXVlcyArIGh3LT5hbXBkdV9xdWV1ZXM7IGkrKykKIAkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIGkpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd2FrZV9xdWV1ZXMpOwpAQCAtNDA0LDggKzQxOCw2IEBACiAJCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVDoKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChzZGF0YS0+ZGV2ID09IGxvY2FsLT5tZGV2KQotCQkJY29udGludWU7CiAJCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQogCQkJaXRlcmF0b3IoZGF0YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsCiAJCQkJICZzZGF0YS0+dmlmKTsKQEAgLTQzOSw4ICs0NTEsNiBAQAogCQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQ6CiAJCQlicmVhazsKIAkJfQotCQlpZiAoc2RhdGEtPmRldiA9PSBsb2NhbC0+bWRldikKLQkJCWNvbnRpbnVlOwogCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKIAkJCWl0ZXJhdG9yKGRhdGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLAogCQkJCSAmc2RhdGEtPnZpZik7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2VwLmMgYi9uZXQvbWFjODAyMTEvd2VwLmMKaW5kZXggYWZmY2VjZC4uODcyZDJmYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dlcC5jCisrKyBiL25ldC9tYWM4MDIxMS93ZXAuYwpAQCAtODQsMjQgKzg0LDE3IEBACiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXUxNiBmYzsKLQlpbnQgaGRybGVuOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJdW5zaWduZWQgaW50IGhkcmxlbjsKIAl1OCAqbmV3aGRyOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWZjIHw9IElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRDsKLQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CisJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CiAKLQlpZiAoKHNrYl9oZWFkcm9vbShza2IpIDwgV0VQX0lWX0xFTiB8fAotCSAgICAgc2tiX3RhaWxyb29tKHNrYikgPCBXRVBfSUNWX0xFTikpIHsKLQkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZCk7Ci0JCWlmICh1bmxpa2VseShwc2tiX2V4cGFuZF9oZWFkKHNrYiwgV0VQX0lWX0xFTiwgV0VQX0lDVl9MRU4sCi0JCQkJCSAgICAgIEdGUF9BVE9NSUMpKSkKLQkJCXJldHVybiBOVUxMOwotCX0KKwlpZiAoV0FSTl9PTihza2JfdGFpbHJvb20oc2tiKSA8IFdFUF9JQ1ZfTEVOIHx8CisJCSAgICBza2JfaGVhZHJvb20oc2tiKSA8IFdFUF9JVl9MRU4pKQorCQlyZXR1cm4gTlVMTDsKIAotCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJbmV3aGRyID0gc2tiX3B1c2goc2tiLCBXRVBfSVZfTEVOKTsKIAltZW1tb3ZlKG5ld2hkciwgbmV3aGRyICsgV0VQX0lWX0xFTiwgaGRybGVuKTsKIAlpZWVlODAyMTFfd2VwX2dldF9pdihsb2NhbCwga2V5LCBuZXdoZHIgKyBoZHJsZW4pOwpAQCAtMTEzLDEyICsxMDYsMTAgQEAKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1MTYgZmM7Ci0JaW50IGhkcmxlbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCXVuc2lnbmVkIGludCBoZHJsZW47CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAltZW1tb3ZlKHNrYi0+ZGF0YSArIFdFUF9JVl9MRU4sIHNrYi0+ZGF0YSwgaGRybGVuKTsKIAlza2JfcHVsbChza2IsIFdFUF9JVl9MRU4pOwogfQpAQCAtMjI4LDE3ICsyMTksMTUgQEAKIAl1MzIga2xlbjsKIAl1OCAqcmM0a2V5OwogCXU4IGtleWlkeDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1MTYgZmM7Ci0JaW50IGhkcmxlbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCXVuc2lnbmVkIGludCBoZHJsZW47CiAJc2l6ZV90IGxlbjsKIAlpbnQgcmV0ID0gMDsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpCisJaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm4gLTE7CiAKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKHNrYi0+bGVuIDwgOCArIGhkcmxlbikKIAkJcmV0dXJuIC0xOwpAQCAtMjY0LDExICsyNTMsOCBAQAogCiAJaWYgKGllZWU4MDIxMV93ZXBfZGVjcnlwdF9kYXRhKGxvY2FsLT53ZXBfcnhfdGZtLCByYzRrZXksIGtsZW4sCiAJCQkJICAgICAgIHNrYi0+ZGF0YSArIGhkcmxlbiArIFdFUF9JVl9MRU4sCi0JCQkJICAgICAgIGxlbikpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJXRVAgZGVjcnlwdCBmYWlsZWQgKElDVilcbiIpOworCQkJCSAgICAgICBsZW4pKQogCQlyZXQgPSAtMTsKLQl9CiAKIAlrZnJlZShyYzRrZXkpOwogCkBAIC0yODUsMTcgKzI3MSwxNSBAQAogCiB1OCAqIGllZWU4MDIxMV93ZXBfaXNfd2Vha19pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXUxNiBmYzsKLQlpbnQgaGRybGVuOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJdW5zaWduZWQgaW50IGhkcmxlbjsKIAl1OCAqaXZwb3M7CiAJdTMyIGl2OwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWlmICghKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkKKwlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybiBOVUxMOwogCi0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAlpdnBvcyA9IHNrYi0+ZGF0YSArIGhkcmxlbjsKIAlpdiA9IChpdnBvc1swXSA8PCAxNikgfCAoaXZwb3NbMV0gPDwgOCkgfCBpdnBvc1syXTsKIApAQCAtMzE0LDE0ICsyOTgsOCBAQAogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlpZiAoIShyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpKSB7Ci0JCWlmIChpZWVlODAyMTFfd2VwX2RlY3J5cHQocngtPmxvY2FsLCByeC0+c2tiLCByeC0+a2V5KSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVRwotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFdFUCBmcmFtZSwgZGVjcnlwdCAiCi0JCQkJICAgICAgICJmYWlsZWRcbiIsIHJ4LT5kZXYtPm5hbWUpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVRyAqLworCQlpZiAoaWVlZTgwMjExX3dlcF9kZWNyeXB0KHJ4LT5sb2NhbCwgcngtPnNrYiwgcngtPmtleSkpCiAJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQkJfQogCX0gZWxzZSBpZiAoIShyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpIHsKIAkJaWVlZTgwMjExX3dlcF9yZW1vdmVfaXYocngtPmxvY2FsLCByeC0+c2tiLCByeC0+a2V5KTsKIAkJLyogcmVtb3ZlIElDViAqLwpAQCAtMzMzLDExICszMTEsMTYgQEAKIAogc3RhdGljIGludCB3ZXBfZW5jcnlwdF9za2Ioc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwlpbmZvLT5jb250cm9sLml2X2xlbiA9IFdFUF9JVl9MRU47CisJaW5mby0+Y29udHJvbC5pY3ZfbGVuID0gV0VQX0lDVl9MRU47CisKIAlpZiAoISh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSkgewogCQlpZiAoaWVlZTgwMjExX3dlcF9lbmNyeXB0KHR4LT5sb2NhbCwgc2tiLCB0eC0+a2V5KSkKIAkJCXJldHVybiAtMTsKIAl9IGVsc2UgewotCQl0eC0+Y29udHJvbC0+a2V5X2lkeCA9IHR4LT5rZXktPmNvbmYuaHdfa2V5X2lkeDsKKwkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKIAkJaWYgKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHsKIAkJCWlmICghaWVlZTgwMjExX3dlcF9hZGRfaXYodHgtPmxvY2FsLCBza2IsIHR4LT5rZXkpKQogCQkJCXJldHVybiAtMTsKQEAgLTM0OSw4ICszMzIsNiBAQAogaWVlZTgwMjExX3R4X3Jlc3VsdAogaWVlZTgwMjExX2NyeXB0b193ZXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewotCXR4LT5jb250cm9sLT5pdl9sZW4gPSBXRVBfSVZfTEVOOwotCXR4LT5jb250cm9sLT5pY3ZfbGVuID0gV0VQX0lDVl9MRU47CiAJaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQodHgpOwogCiAJaWYgKHdlcF9lbmNyeXB0X3NrYih0eCwgdHgtPnNrYikgPCAwKSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2VwLmggYi9uZXQvbWFjODAyMTEvd2VwLmgKaW5kZXggMzYzNzc5Yy4uZTU4NzE3MiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dlcC5oCisrKyBiL25ldC9tYWM4MDIxMS93ZXAuaApAQCAtMjYsNyArMjYsNyBAQAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKIGludCBpZWVlODAyMTFfd2VwX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwotdTggKiBpZWVlODAyMTFfd2VwX2lzX3dlYWtfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7Cit1OCAqaWVlZTgwMjExX3dlcF9pc193ZWFrX2l2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogCiBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfY3J5cHRvX3dlcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dleHQuYyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKaW5kZXggZTg0MDQyMS4uMzRmYThlZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dleHQuYworKysgYi9uZXQvbWFjODAyMTEvd2V4dC5jCkBAIC0xNDIsNyArMTQyLDM5IEBACiAJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXU4IGlzX2h0ID0gMCwgaXNfYSA9IDAsIGlzX2IgPSAwLCBpc19nID0gMDsKKworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCWlmIChzYmFuZCkgeworCQlpc19hID0gMTsKKwkJaXNfaHQgfD0gc2JhbmQtPmh0X2luZm8uaHRfc3VwcG9ydGVkOworCX0KKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwlpZiAoc2JhbmQpIHsKKwkJaW50IGk7CisJCS8qIENoZWNrIGZvciBtYW5kYXRvcnkgcmF0ZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZSA9PSAxMCkKKwkJCQlpc19iID0gMTsKKwkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZSA9PSA2MCkKKwkJCQlpc19nID0gMTsKKwkJfQorCQlpc19odCB8PSBzYmFuZC0+aHRfaW5mby5odF9zdXBwb3J0ZWQ7CisJfQorCiAJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMSIpOworCWlmIChpc19hKQorCQlzdHJjYXQobmFtZSwgImEiKTsKKwlpZiAoaXNfYikKKwkJc3RyY2F0KG5hbWUsICJiIik7CisJaWYgKGlzX2cpCisJCXN0cmNhdChuYW1lLCAiZyIpOworCWlmIChpc19odCkKKwkJc3RyY2F0KG5hbWUsICJuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3NiwxNCArMjA4LDI2IEBACiAJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CiAJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBOVU1fREVGQVVMVF9LRVlTOwogCi0JcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSBsb2NhbC0+aHcubWF4X3NpZ25hbDsKLQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSBsb2NhbC0+aHcubWF4X3Jzc2k7Ci0JcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gbG9jYWwtPmh3Lm1heF9ub2lzZTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMgfHwKKwkgICAgbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQikKKwkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gbG9jYWwtPmh3Lm1heF9zaWduYWw7CisJZWxzZSBpZiAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQorCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAtMTEwOworCWVsc2UKKwkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKKworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKQorCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAtMTEwOworCWVsc2UKKwkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKKworCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwogCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKIAotCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gbG9jYWwtPmh3Lm1heF9zaWduYWwvMjsKLQlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAwOwotCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDA7CisJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA1MDsKKwkvKiBub3QgYWx3YXlzIHRydWUgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcgKi8KKwlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSByYW5nZS0+bWF4X3F1YWwubGV2ZWwgLyAyOworCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IHJhbmdlLT5tYXhfcXVhbC5ub2lzZSAvIDI7CiAJcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+d3N0YXRzX2ZsYWdzOwogCiAJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8CkBAIC0yNTIsMTUgKzI5Niw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICh0eXBlID09IHNkYXRhLT52aWYudHlwZSkKLQkJcmV0dXJuIDA7Ci0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWllZWU4MDIxMV9pZl9yZWluaXQoZGV2KTsKLQlpZWVlODAyMTFfaWZfc2V0X3R5cGUoZGV2LCB0eXBlKTsKLQotCXJldHVybiAwOworCXJldHVybiBpZWVlODAyMTFfaWZfY2hhbmdlX3R5cGUoc2RhdGEsIHR5cGUpOwogfQogCiAKQEAgLTQwOCw3ICs0NDQsNyBAQAogCQltZW1zZXQoc2RhdGEtPnUuYXAuc3NpZCArIGxlbiwgMCwKIAkJICAgICAgIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4gLSBsZW4pOwogCQlzZGF0YS0+dS5hcC5zc2lkX2xlbiA9IGxlbjsKLQkJcmV0dXJuIGllZWU4MDIxMV9pZl9jb25maWcoZGV2KTsKKwkJcmV0dXJuIGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX1NTSUQpOwogCX0KIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CkBAIC01NjIsNyArNTk4LDcgQEAKIAlpZiAobG9jYWwtPnN0YV9zd19zY2FubmluZyB8fCBsb2NhbC0+c3RhX2h3X3NjYW5uaW5nKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCXJlcyA9IGllZWU4MDIxMV9zdGFfc2Nhbl9yZXN1bHRzKGRldiwgZXh0cmEsIGRhdGEtPmxlbmd0aCk7CisJcmVzID0gaWVlZTgwMjExX3N0YV9zY2FuX3Jlc3VsdHMoZGV2LCBpbmZvLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKIAlpZiAocmVzID49IDApIHsKIAkJZGF0YS0+bGVuZ3RoID0gcmVzOwogCQlyZXR1cm4gMDsKQEAgLTU4MywxNiArNjE5LDE0IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKCFzZGF0YS0+YnNzKQotCQlyZXR1cm4gLUVOT0RFVjsKIAogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKIAogCS8qIHRhcmdldF9yYXRlID0gLTEsIHJhdGUtPmZpeGVkID0gMCBtZWFucyBhdXRvIG9ubHksIHNvIHVzZSBhbGwgcmF0ZXMKIAkgKiB0YXJnZXRfcmF0ZSA9IFgsIHJhdGUtPmZpeGVkID0gMSBtZWFucyBvbmx5IHJhdGUgWAogCSAqIHRhcmdldF9yYXRlID0gWCwgcmF0ZS0+Zml4ZWQgPSAwIG1lYW5zIGFsbCByYXRlcyA8PSBYICovCi0Jc2RhdGEtPmJzcy0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSAtMTsKLQlzZGF0YS0+YnNzLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSAtMTsKKwlzZGF0YS0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSAtMTsKKwlzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gLTE7CiAJaWYgKHJhdGUtPnZhbHVlIDwgMCkKIAkJcmV0dXJuIDA7CiAKQEAgLTYwMSw5ICs2MzUsOSBAQAogCQlpbnQgdGhpc19yYXRlID0gYnJhdGUtPmJpdHJhdGU7CiAKIAkJaWYgKHRhcmdldF9yYXRlID09IHRoaXNfcmF0ZSkgewotCQkJc2RhdGEtPmJzcy0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSBpOworCQkJc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gaTsKIAkJCWlmIChyYXRlLT5maXhlZCkKLQkJCQlzZGF0YS0+YnNzLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSBpOworCQkJCXNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSBpOwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC03MTYsNiArNzUwLDkgQEAKIAogCWlmIChydHMtPmRpc2FibGVkKQogCQlsb2NhbC0+cnRzX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRDsKKwllbHNlIGlmICghcnRzLT5maXhlZCkKKwkJLyogaWYgdGhlIHJ0cyB2YWx1ZSBpcyBub3QgZml4ZWQsIHRoZW4gdGFrZSBkZWZhdWx0ICovCisJCWxvY2FsLT5ydHNfdGhyZXNob2xkID0gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEOwogCWVsc2UgaWYgKHJ0cy0+dmFsdWUgPCAwIHx8IHJ0cy0+dmFsdWUgPiBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQpCiAJCXJldHVybiAtRUlOVkFMOwogCWVsc2UKQEAgLTc1Myw2ICs3OTAsOCBAQAogCiAJaWYgKGZyYWctPmRpc2FibGVkKQogCQlsb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEOworCWVsc2UgaWYgKCFmcmFnLT5maXhlZCkKKwkJbG9jYWwtPmZyYWdtZW50YXRpb25fdGhyZXNob2xkID0gSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRDsKIAllbHNlIGlmIChmcmFnLT52YWx1ZSA8IDI1NiB8fAogCQkgZnJhZy0+dmFsdWUgPiBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk0NCw2ICs5ODMsNTggQEAKIAllcnEtPmxlbmd0aCA9IHNkYXRhLT5rZXlzW2lkeF0tPmNvbmYua2V5bGVuOwogCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CiAKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCQlzd2l0Y2ggKGlmc3RhLT5hdXRoX2FsZykgeworCQljYXNlIFdMQU5fQVVUSF9PUEVOOgorCQljYXNlIFdMQU5fQVVUSF9MRUFQOgorCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fQVVUSF9TSEFSRURfS0VZOgorCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19wYXJhbSAqd3JxLAorCQkJCSAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZsb2NhbC0+aHcuY29uZjsKKworCWlmICh3cnEtPmRpc2FibGVkKSB7CisJCWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9QUzsKKwkJcmV0dXJuIGllZWU4MDIxMV9od19jb25maWcobG9jYWwpOworCX0KKworCXN3aXRjaCAod3JxLT5mbGFncyAmIElXX1BPV0VSX01PREUpIHsKKwljYXNlIElXX1BPV0VSX09OOiAgICAgICAvKiBJZiBub3Qgc3BlY2lmaWVkICovCisJY2FzZSBJV19QT1dFUl9NT0RFOiAgICAgLyogSWYgc2V0IGFsbCBtYXNrICovCisJY2FzZSBJV19QT1dFUl9BTExfUjogICAgLyogSWYgZXhwbGljaXRlbHkgc3RhdGUgYWxsICovCisJCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOworCQlicmVhazsKKwlkZWZhdWx0OiAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2Ugd2UgZG9uJ3Qgc3VwcG9ydCBpdCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkJICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsLT5ody5jb25mOworCisJd3JxdS0+cG93ZXIuZGlzYWJsZWQgPSAhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMTUsOCArMTEwNiw4IEBACiAJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IDA7CiAJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfSU5WQUxJRDsKIAl9IGVsc2UgewotCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzdGEtPmxhc3RfcnNzaTsKLQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBzdGEtPmxhc3Rfc2lnbmFsOworCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzdGEtPmxhc3Rfc2lnbmFsOworCQl3c3RhdHMtPnF1YWwucXVhbCA9IHN0YS0+bGFzdF9xdWFsOwogCQl3c3RhdHMtPnF1YWwubm9pc2UgPSBzdGEtPmxhc3Rfbm9pc2U7CiAJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKIAl9CkBAIC0xMTQ5LDggKzEyNDAsOCBAQAogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3cmV0cnksCQkvKiBTSU9DR0lXUkVUUlkgKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2VuY29kZSwJCS8qIFNJT0NTSVdFTkNPREUgKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2VuY29kZSwJCS8qIFNJT0NHSVdFTkNPREUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1BPV0VSICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdQT1dFUiAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3cG93ZXIsCQkvKiBTSU9DU0lXUE9XRVIgKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3Bvd2VyLAkJLyogU0lPQ0dJV1BPV0VSICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KIAkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3Z2VuaWUsCQkvKiBTSU9DU0lXR0VOSUUgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuYyBiL25ldC9tYWM4MDIxMS93bWUuYwppbmRleCA1ZDA5ZTg2Li4wN2VkZGEwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmMKKysrIGIvbmV0L21hYzgwMjExL3dtZS5jCkBAIC0xOCw2MSArMTgsNDIgQEAKICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgogI2luY2x1ZGUgIndtZS5oIgogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgd2Ugc3VwcG9ydC4gKi8KLSNkZWZpbmUgVENfODAyMTFfTUFYX1FVRVVFUyAxNgotCisvKiBEZWZhdWx0IG1hcHBpbmcgaW4gY2xhc3NpZmllciB0byB3b3JrIHdpdGggZGVmYXVsdAorICogcXVldWUgc2V0dXAuCisgKi8KIGNvbnN0IGludCBpZWVlODAyXzFkX3RvX2FjWzhdID0geyAyLCAzLCAzLCAyLCAxLCAxLCAwLCAwIH07CiAKLXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YQotewotCXVuc2lnbmVkIGxvbmcgcWRpc2NfcG9vbFtCSVRTX1RPX0xPTkdTKFRDXzgwMjExX01BWF9RVUVVRVMpXTsKLQlzdHJ1Y3QgdGNmX3Byb3RvICpmaWx0ZXJfbGlzdDsKLQlzdHJ1Y3QgUWRpc2MgKnF1ZXVlc1tUQ184MDIxMV9NQVhfUVVFVUVTXTsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJlcXVldWVkW1RDXzgwMjExX01BWF9RVUVVRVNdOwotfTsKLQogc3RhdGljIGNvbnN0IGNoYXIgbGxjX2lwX2hkcls4XSA9IHsweEFBLCAweEFBLCAweDMsIDAsIDAsIDAsIDB4MDgsIDB9OwogCi0vKiBnaXZlbiBhIGRhdGEgZnJhbWUgZGV0ZXJtaW5lIHRoZSA4MDIuMXAvMWQgdGFnIHRvIHVzZSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjbGFzc2lmeV8xZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnFkKQorLyogR2l2ZW4gYSBkYXRhIGZyYW1lIGRldGVybWluZSB0aGUgODAyLjFwLzFkIHRhZyB0byB1c2UuICAqLworc3RhdGljIHVuc2lnbmVkIGludCBjbGFzc2lmeV8xZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcGhkciAqaXA7Ci0JaW50IGRzY3A7Ci0JaW50IG9mZnNldDsKLQotCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocWQpOwotCXN0cnVjdCB0Y2ZfcmVzdWx0IHJlcyA9IHsgLTEsIDAgfTsKLQotCS8qIGlmIHRoZXJlIGlzIGEgdXNlciBzZXQgZmlsdGVyIGxpc3QsIGNhbGwgb3V0IHRvIHRoYXQgKi8KLQlpZiAocS0+ZmlsdGVyX2xpc3QpIHsKLQkJdGNfY2xhc3NpZnkoc2tiLCBxLT5maWx0ZXJfbGlzdCwgJnJlcyk7Ci0JCWlmIChyZXMuY2xhc3MgIT0gLTEpCi0JCQlyZXR1cm4gcmVzLmNsYXNzOwotCX0KKwl1bnNpZ25lZCBpbnQgZHNjcDsKIAogCS8qIHNrYi0+cHJpb3JpdHkgdmFsdWVzIGZyb20gMjU2LT4yNjMgYXJlIG1hZ2ljIHZhbHVlcyB0bwotCSAqIGRpcmVjdGx5IGluZGljYXRlIGEgc3BlY2lmaWMgODAyLjFkIHByaW9yaXR5LgotCSAqIFRoaXMgaXMgdXNlZCB0byBhbGxvdyA4MDIuMWQgcHJpb3JpdHkgdG8gYmUgcGFzc2VkIGRpcmVjdGx5IGluCi0JICogZnJvbSBWTEFOIHRhZ3MsIGV0Yy4gKi8KKwkgKiBkaXJlY3RseSBpbmRpY2F0ZSBhIHNwZWNpZmljIDgwMi4xZCBwcmlvcml0eS4gIFRoaXMgaXMgdXNlZAorCSAqIHRvIGFsbG93IDgwMi4xZCBwcmlvcml0eSB0byBiZSBwYXNzZWQgZGlyZWN0bHkgaW4gZnJvbSBWTEFOCisJICogdGFncywgZXRjLgorCSAqLwogCWlmIChza2ItPnByaW9yaXR5ID49IDI1NiAmJiBza2ItPnByaW9yaXR5IDw9IDI2MykKIAkJcmV0dXJuIHNrYi0+cHJpb3JpdHkgLSAyNTY7CiAKLQkvKiBjaGVjayB0aGVyZSBpcyBhIHZhbGlkIElQIGhlYWRlciBwcmVzZW50ICovCi0Jb2Zmc2V0ID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQlpZiAoc2tiLT5sZW4gPCBvZmZzZXQgKyBzaXplb2YobGxjX2lwX2hkcikgKyBzaXplb2YoKmlwKSB8fAotCSAgICBtZW1jbXAoc2tiLT5kYXRhICsgb2Zmc2V0LCBsbGNfaXBfaGRyLCBzaXplb2YobGxjX2lwX2hkcikpKQorCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgeworCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCWRzY3AgPSBpcF9oZHIoc2tiKS0+dG9zICYgMHhmYzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgogCQlyZXR1cm4gMDsKKwl9CiAKLQlpcCA9IChzdHJ1Y3QgaXBoZHIgKikgKHNrYi0+ZGF0YSArIG9mZnNldCArIHNpemVvZihsbGNfaXBfaGRyKSk7Ci0KLQlkc2NwID0gaXAtPnRvcyAmIDB4ZmM7CiAJaWYgKGRzY3AgJiAweDFjKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gZHNjcCA+PiA1OwogfQogCiAKLXN0YXRpYyBpbmxpbmUgaW50IHdtZV9kb3duZ3JhZGVfYWMoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgd21lX2Rvd25ncmFkZV9hYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN3aXRjaCAoc2tiLT5wcmlvcml0eSkgewogCWNhc2UgNjoKQEAgLTkzLDQzICs3NCwzOCBAQAogfQogCiAKLS8qIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hpY2ggcXVldWUgdG8gdXNlCi0gKiBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRvIGRyb3AgdGhlIGZyYW1lICovCi1zdGF0aWMgaW5saW5lIGludCBjbGFzc2lmeTgwMjExKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcWQpCisvKiBJbmRpY2F0ZSB3aGljaCBxdWV1ZSB0byB1c2UuICAqLworc3RhdGljIHUxNiBjbGFzc2lmeTgwMjExKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYocWQtPmRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1bnNpZ25lZCBzaG9ydCBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaW50IHFvczsKIAotCS8qIHNlZSBpZiBmcmFtZSBpcyBkYXRhIG9yIG5vbiBkYXRhIGZyYW1lICovCi0JaWYgKHVubGlrZWx5KChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSAhPSBJRUVFODAyMTFfRlRZUEVfREFUQSkpIHsKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJLyogbWFuYWdlbWVudCBmcmFtZXMgZ28gb24gQUNfVk8gcXVldWUsIGJ1dCBhcmUgc2VudAogCQkqIHdpdGhvdXQgUW9TIGNvbnRyb2wgZmllbGRzICovCi0JCXJldHVybiBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTA7CisJCXJldHVybiAwOwogCX0KIAogCWlmICgwIC8qIGluamVjdGVkICovKSB7CiAJCS8qIHVzZSBBQyBmcm9tIHJhZGlvdGFwICovCiAJfQogCi0JLyogaXMgdGhpcyBhIFFvUyBmcmFtZT8gKi8KLQlxb3MgPSBmYyAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQTsKLQotCWlmICghcW9zKSB7CisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlza2ItPnByaW9yaXR5ID0gMDsgLyogcmVxdWlyZWQgZm9yIGNvcnJlY3QgV1BBLzExaSBNSUMgKi8KIAkJcmV0dXJuIGllZWU4MDJfMWRfdG9fYWNbc2tiLT5wcmlvcml0eV07CiAJfQogCiAJLyogdXNlIHRoZSBkYXRhIGNsYXNzaWZpZXIgdG8gZGV0ZXJtaW5lIHdoYXQgODAyLjFkIHRhZyB0aGUKIAkgKiBkYXRhIGZyYW1lIGhhcyAqLwotCXNrYi0+cHJpb3JpdHkgPSBjbGFzc2lmeV8xZChza2IsIHFkKTsKKwlza2ItPnByaW9yaXR5ID0gY2xhc3NpZnlfMWQoc2tiKTsKIAogCS8qIGluIGNhc2Ugd2UgYXJlIGEgY2xpZW50IHZlcmlmeSBhY20gaXMgbm90IHNldCBmb3IgdGhpcyBhYyAqLwogCXdoaWxlICh1bmxpa2VseShsb2NhbC0+d21tX2FjbSAmIEJJVChza2ItPnByaW9yaXR5KSkpIHsKIAkJaWYgKHdtZV9kb3duZ3JhZGVfYWMoc2tiKSkgewotCQkJLyogTm8gQUMgd2l0aCBsb3dlciBwcmlvcml0eSBoYXMgYWNtPTAsIGRyb3AgcGFja2V0LiAqLwotCQkJcmV0dXJuIC0xOworCQkJLyogVGhlIG9sZCBjb2RlIHdvdWxkIGRyb3AgdGhlIHBhY2tldCBpbiB0aGlzCisJCQkgKiBjYXNlLgorCQkJICovCisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIApAQCAtMTM3LDU1ICsxMTMsNTIgQEAKIAlyZXR1cm4gaWVlZTgwMl8xZF90b19hY1tza2ItPnByaW9yaXR5XTsKIH0KIAotCi1zdGF0aWMgaW50IHdtZV9xZGlzY29wX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjKiBxZCkKK3UxNiBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYocWQtPmRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihxZCk7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSAqcGt0X2RhdGEgPQotCQkoc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSAqKSBza2ItPmNiOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXVuc2lnbmVkIHNob3J0IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQlzdHJ1Y3QgUWRpc2MgKnFkaXNjOwotCWludCBlcnIsIHF1ZXVlOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXUxNiBxdWV1ZTsKIAl1OCB0aWQ7CiAKLQlpZiAocGt0X2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1RYUERfUkVRVUVVRSkgewotCQlxdWV1ZSA9IHBrdF9kYXRhLT5xdWV1ZTsKKwlxdWV1ZSA9IGNsYXNzaWZ5ODAyMTEoc2tiLCBkZXYpOworCWlmICh1bmxpa2VseShxdWV1ZSA+PSBsb2NhbC0+aHcucXVldWVzKSkKKwkJcXVldWUgPSBsb2NhbC0+aHcucXVldWVzIC0gMTsKKworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkVRVUVVRSkgewogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7Ci0JCXRpZCA9IHNrYi0+cHJpb3JpdHkgJiBRT1NfQ09OVFJPTF9UQUcxRF9NQVNLOworCQl0aWQgPSBza2ItPnByaW9yaXR5ICYgSUVFRTgwMjExX1FPU19DVExfVEFHMURfTUFTSzsKIAkJaWYgKHN0YSkgeworCQkJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwogCQkJaW50IGFtcGR1X3F1ZXVlID0gc3RhLT50aWRfdG9fdHhfcVt0aWRdOwotCQkJaWYgKChhbXBkdV9xdWV1ZSA8IGxvY2FsLT5ody5xdWV1ZXMpICYmCi0JCQkgICAgdGVzdF9iaXQoYW1wZHVfcXVldWUsIHEtPnFkaXNjX3Bvb2wpKSB7CisKKwkJCWlmICgoYW1wZHVfcXVldWUgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodykpICYmCisJCQkgICAgdGVzdF9iaXQoYW1wZHVfcXVldWUsIGxvY2FsLT5xdWV1ZV9wb29sKSkgewogCQkJCXF1ZXVlID0gYW1wZHVfcXVldWU7Ci0JCQkJcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX0FNUERVOworCQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfQU1QRFU7CiAJCQl9IGVsc2UgewotCQkJCXBrdF9kYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYUERfQU1QRFU7CisJCQkJaW5mby0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9DVExfQU1QRFU7CiAJCQl9CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXNrYl9xdWV1ZV90YWlsKCZxLT5yZXF1ZXVlZFtxdWV1ZV0sIHNrYik7Ci0JCXFkLT5xLnFsZW4rKzsKLQkJcmV0dXJuIDA7CisKKwkJcmV0dXJuIHF1ZXVlOwogCX0KIAotCXF1ZXVlID0gY2xhc3NpZnk4MDIxMShza2IsIHFkKTsKLQotCS8qIG5vdyB3ZSBrbm93IHRoZSAxZCBwcmlvcml0eSwgZmlsbCBpbiB0aGUgUW9TIGhlYWRlciBpZiB0aGVyZSBpcyBvbmUKKwkvKiBOb3cgd2Uga25vdyB0aGUgMWQgcHJpb3JpdHksIGZpbGwgaW4gdGhlIFFvUyBoZWFkZXIgaWYKKwkgKiB0aGVyZSBpcyBvbmUuCiAJICovCi0JaWYgKFdMQU5fRkNfSVNfUU9TX0RBVEEoZmMpKSB7Ci0JCXU4ICpwID0gc2tiLT5kYXRhICsgaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpIC0gMjsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJdTggKnAgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdTggYWNrX3BvbGljeSA9IDA7Ci0JCXRpZCA9IHNrYi0+cHJpb3JpdHkgJiBRT1NfQ09OVFJPTF9UQUcxRF9NQVNLOworCQl0aWQgPSBza2ItPnByaW9yaXR5ICYgSUVFRTgwMjExX1FPU19DVExfVEFHMURfTUFTSzsKIAkJaWYgKGxvY2FsLT53aWZpX3dtZV9ub2Fja190ZXN0KQogCQkJYWNrX3BvbGljeSB8PSBRT1NfQ09OVFJPTF9BQ0tfUE9MSUNZX05PQUNLIDw8CiAJCQkJCVFPU19DT05UUk9MX0FDS19QT0xJQ1lfU0hJRlQ7CiAJCS8qIHFvcyBoZWFkZXIgaXMgMiBieXRlcywgc2Vjb25kIHJlc2VydmVkICovCi0JCSpwID0gYWNrX3BvbGljeSB8IHRpZDsKLQkJcCsrOworCQkqcCsrID0gYWNrX3BvbGljeSB8IHRpZDsKIAkJKnAgPSAwOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKQEAgLTE5Myw0NzUgKzE2NiwzNyBAQAogCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwogCQlpZiAoc3RhKSB7CiAJCQlpbnQgYW1wZHVfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0JCQlpZiAoKGFtcGR1X3F1ZXVlIDwgbG9jYWwtPmh3LnF1ZXVlcykgJiYKLQkJCQl0ZXN0X2JpdChhbXBkdV9xdWV1ZSwgcS0+cWRpc2NfcG9vbCkpIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKKworCQkJaWYgKChhbXBkdV9xdWV1ZSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSkgJiYKKwkJCSAgICB0ZXN0X2JpdChhbXBkdV9xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKSB7CiAJCQkJcXVldWUgPSBhbXBkdV9xdWV1ZTsKLQkJCQlwa3RfZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUERfQU1QRFU7CisJCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9BTVBEVTsKIAkJCX0gZWxzZSB7Ci0JCQkJcGt0X2RhdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfVFhQRF9BTVBEVTsKKwkJCQlpbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0NUTF9BTVBEVTsKIAkJCX0KIAkJfQogCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAotCWlmICh1bmxpa2VseShxdWV1ZSA+PSBsb2NhbC0+aHcucXVldWVzKSkgewotI2lmIDAKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIC0gcXVldWU9JWQgKGh3IGRvZXMgbm90ICIKLQkJCSAgICAgICAic3VwcG9ydCkgLT4gJWRcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHF1ZXVlLCBsb2NhbC0+aHcucXVldWVzIC0gMSk7Ci0JCX0KLSNlbmRpZgotCQlxdWV1ZSA9IGxvY2FsLT5ody5xdWV1ZXMgLSAxOwotCX0KLQotCWlmICh1bmxpa2VseShxdWV1ZSA8IDApKSB7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJCWVyciA9IE5FVF9YTUlUX0RST1A7Ci0JfSBlbHNlIHsKLQkJdGlkID0gc2tiLT5wcmlvcml0eSAmIFFPU19DT05UUk9MX1RBRzFEX01BU0s7Ci0JCXBrdF9kYXRhLT5xdWV1ZSA9ICh1bnNpZ25lZCBpbnQpIHF1ZXVlOwotCQlxZGlzYyA9IHEtPnF1ZXVlc1txdWV1ZV07Ci0JCWVyciA9IHFkaXNjLT5lbnF1ZXVlKHNrYiwgcWRpc2MpOwotCQlpZiAoZXJyID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKLQkJCXFkLT5xLnFsZW4rKzsKLQkJCXFkLT5ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCQlxZC0+YnN0YXRzLnBhY2tldHMrKzsKLQkJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwotCQl9Ci0JfQotCXFkLT5xc3RhdHMuZHJvcHMrKzsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIFRPRE86IGNsZWFuIHVwIHRoZSBjYXNlcyB3aGVyZSBtYXN0ZXJfaGFyZF9zdGFydF94bWl0Ci0gKiByZXR1cm5zIG5vbiAwIC0gaXQgc2hvdWxkbid0IGV2ZXIgZG8gdGhhdC4gT25jZSBkb25lIHdlCi0gKiBjYW4gcmVtb3ZlIHRoaXMgZnVuY3Rpb24gKi8KLXN0YXRpYyBpbnQgd21lX3FkaXNjb3BfcmVxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MqIHFkKQotewotCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocWQpOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKnBrdF9kYXRhID0KLQkJKHN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKikgc2tiLT5jYjsKLQlzdHJ1Y3QgUWRpc2MgKnFkaXNjOwotCWludCBlcnI7Ci0KLQkvKiB3ZSByZWNvcmRlZCB3aGljaCBxdWV1ZSB0byB1c2UgZWFybGllciEgKi8KLQlxZGlzYyA9IHEtPnF1ZXVlc1twa3RfZGF0YS0+cXVldWVdOwotCi0JaWYgKChlcnIgPSBxZGlzYy0+b3BzLT5yZXF1ZXVlKHNrYiwgcWRpc2MpKSA9PSAwKSB7Ci0JCXFkLT5xLnFsZW4rKzsKLQkJcmV0dXJuIDA7Ci0JfQotCXFkLT5xc3RhdHMuZHJvcHMrKzsKLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqd21lX3FkaXNjb3BfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MqIHFkKQotewotCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocWQpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IFFkaXNjICpxZGlzYzsKLQlpbnQgcXVldWU7Ci0KLQkvKiBjaGVjayBhbGwgdGhlIGgvdyBxdWV1ZXMgaW4gbnVtZXJpYy9wcmlvcml0eSBvcmRlciAqLwotCWZvciAocXVldWUgPSAwOyBxdWV1ZSA8IGh3LT5xdWV1ZXM7IHF1ZXVlKyspIHsKLQkJLyogc2VlIGlmIHRoZXJlIGlzIHJvb20gaW4gdGhpcyBoYXJkd2FyZSBxdWV1ZSAqLwotCQlpZiAoKHRlc3RfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1hPRkYsCi0JCQkJJmxvY2FsLT5zdGF0ZVtxdWV1ZV0pKSB8fAotCQkgICAgKHRlc3RfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1BFTkRJTkcsCi0JCQkJJmxvY2FsLT5zdGF0ZVtxdWV1ZV0pKSB8fAotCQkJICghdGVzdF9iaXQocXVldWUsIHEtPnFkaXNjX3Bvb2wpKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHRoZXJlIGlzIHNwYWNlIC0gdHJ5IGFuZCBnZXQgYSBmcmFtZSAqLwotCQlza2IgPSBza2JfZGVxdWV1ZSgmcS0+cmVxdWV1ZWRbcXVldWVdKTsKLQkJaWYgKHNrYikgewotCQkJcWQtPnEucWxlbi0tOwotCQkJcmV0dXJuIHNrYjsKLQkJfQotCi0JCXFkaXNjID0gcS0+cXVldWVzW3F1ZXVlXTsKLQkJc2tiID0gcWRpc2MtPmRlcXVldWUocWRpc2MpOwotCQlpZiAoc2tiKSB7Ci0JCQlxZC0+cS5xbGVuLS07Ci0JCQlyZXR1cm4gc2tiOwotCQl9Ci0JfQotCS8qIHJldHVybmluZyBhIE5VTEwgaGVyZSB3aGVuIGFsbCB0aGUgaC93IHF1ZXVlcyBhcmUgZnVsbCBtZWFucyB3ZQotCSAqIG5ldmVyIG5lZWQgdG8gY2FsbCBuZXRpZl9zdG9wX3F1ZXVlIGluIHRoZSBkcml2ZXIgKi8KLQlyZXR1cm4gTlVMTDsKLX0KLQotCi1zdGF0aWMgdm9pZCB3bWVfcWRpc2NvcF9yZXNldChzdHJ1Y3QgUWRpc2MqIHFkKQotewotCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocWQpOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KHFkLT5kZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQlpbnQgcXVldWU7Ci0KLQkvKiBRVUVTVElPTjogc2hvdWxkIHdlIGhhdmUgc29tZSBoYXJkd2FyZSBmbHVzaCBmdW5jdGlvbmFsaXR5IGhlcmU/ICovCi0KLQlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBody0+cXVldWVzOyBxdWV1ZSsrKSB7Ci0JCXNrYl9xdWV1ZV9wdXJnZSgmcS0+cmVxdWV1ZWRbcXVldWVdKTsKLQkJcWRpc2NfcmVzZXQocS0+cXVldWVzW3F1ZXVlXSk7Ci0JfQotCXFkLT5xLnFsZW4gPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHdtZV9xZGlzY29wX2Rlc3Ryb3koc3RydWN0IFFkaXNjKiBxZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHFkKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihxZC0+ZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0JaW50IHF1ZXVlOwotCi0JdGNmX2Rlc3Ryb3lfY2hhaW4oJnEtPmZpbHRlcl9saXN0KTsKLQotCWZvciAocXVldWU9MDsgcXVldWUgPCBody0+cXVldWVzOyBxdWV1ZSsrKSB7Ci0JCXNrYl9xdWV1ZV9wdXJnZSgmcS0+cmVxdWV1ZWRbcXVldWVdKTsKLQkJcWRpc2NfZGVzdHJveShxLT5xdWV1ZXNbcXVldWVdKTsKLQkJcS0+cXVldWVzW3F1ZXVlXSA9ICZub29wX3FkaXNjOwotCX0KLX0KLQotCi0vKiBjYWxsZWQgd2hlbmV2ZXIgcGFyYW1ldGVycyBhcmUgdXBkYXRlZCBvbiBleGlzdGluZyBxZGlzYyAqLwotc3RhdGljIGludCB3bWVfcWRpc2NvcF90dW5lKHN0cnVjdCBRZGlzYyAqcWQsIHN0cnVjdCBubGF0dHIgKm9wdCkKLXsKLS8qCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocWQpOwotKi8KLQkvKiBjaGVjayBvdXIgb3B0aW9ucyBibG9jayBpcyB0aGUgcmlnaHQgc2l6ZSAqLwotCS8qIGNvcHkgYW55IG9wdGlvbnMgdG8gb3VyIGxvY2FsIHN0cnVjdHVyZSAqLwotLyoJSWdub3JlIG9wdGlvbnMgYmxvY2sgZm9yIG5vdyAtIGFsd2F5cyB1c2Ugc3RhdGljIG1hcHBpbmcKLQlzdHJ1Y3QgdGNfaWVlZTgwMjExX3FvcHQgKnFvcHQgPSBubGFfZGF0YShvcHQpOwotCi0JaWYgKG9wdC0+bmxhX2xlbiA8IG5sYV9hdHRyX3NpemUoc2l6ZW9mKCpxb3B0KSkpCi0JCXJldHVybiAtRUlOVkFMOwotCW1lbWNweShxLT50YWcycXVldWUsIHFvcHQtPnRhZzJxdWV1ZSwgc2l6ZW9mKHFvcHQtPnRhZzJxdWV1ZSkpOwotKi8KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBjYWxsZWQgZHVyaW5nIGluaXRpYWwgY3JlYXRpb24gb2YgcWRpc2Mgb24gZGV2aWNlICovCi1zdGF0aWMgaW50IHdtZV9xZGlzY29wX2luaXQoc3RydWN0IFFkaXNjICpxZCwgc3RydWN0IG5sYXR0ciAqb3B0KQotewotCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocWQpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwotCWludCBxdWV1ZXM7Ci0JaW50IGVyciA9IDAsIGk7Ci0KLQkvKiBjaGVjayB0aGF0IGRldmljZSBpcyBhIG1hYzgwMjExIGRldmljZSAqLwotCWlmICghZGV2LT5pZWVlODAyMTFfcHRyIHx8Ci0JICAgIGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHktPnByaXZpZCAhPSBtYWM4MDIxMV93aXBoeV9wcml2aWQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogY2hlY2sgdGhpcyBkZXZpY2UgaXMgYW4gaWVlZTgwMjExIG1hc3RlciB0eXBlIGRldmljZSAqLwotCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBjaGVjayB0aGF0IHRoZXJlIGlzIG5vIHFkaXNjIGN1cnJlbnRseSBhdHRhY2hlZCB0byBkZXZpY2UKLQkgKiB0aGlzIGVuc3VyZXMgdGhhdCB3ZSB3aWxsIGJlIHRoZSByb290IHFkaXNjLiAoSSBjYW4ndCBmaW5kIGEgYmV0dGVyCi0JICogd2F5IHRvIHRlc3QgdGhpcyBleHBsaWNpdGx5KSAqLwotCWlmIChkZXYtPnFkaXNjX3NsZWVwaW5nICE9ICZub29wX3FkaXNjKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChxZC0+ZmxhZ3MgJiBUQ1FfRl9JTkdSRVNTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0JcXVldWVzID0gbG9jYWwtPmh3LnF1ZXVlczsKLQotCS8qIGlmIG9wdGlvbnMgd2VyZSBwYXNzZWQgaW4sIHNldCB0aGVtICovCi0JaWYgKG9wdCkgewotCQllcnIgPSB3bWVfcWRpc2NvcF90dW5lKHFkLCBvcHQpOwotCX0KLQotCS8qIGNyZWF0ZSBjaGlsZCBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcXVldWVzOyBpKyspIHsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcS0+cmVxdWV1ZWRbaV0pOwotCQlxLT5xdWV1ZXNbaV0gPSBxZGlzY19jcmVhdGVfZGZsdChxZC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLAotCQkJCQkJIHFkLT5oYW5kbGUpOwotCQlpZiAoIXEtPnF1ZXVlc1tpXSkgewotCQkJcS0+cXVldWVzW2ldID0gJm5vb3BfcWRpc2M7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzIGNoaWxkIHFkaXNjICVpIGNyZWF0aW9uIGZhaWxlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGkpOwotCQl9Ci0JfQotCi0JLyogcmVzZXJ2ZSBhbGwgbGVnYWN5IFFvUyBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbWluKElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBNCwgcXVldWVzKTsgaSsrKQotCQlzZXRfYml0KGksIHEtPnFkaXNjX3Bvb2wpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCB3bWVfcWRpc2NvcF9kdW1wKHN0cnVjdCBRZGlzYyAqcWQsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0vKglzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHFkKTsKLQl1bnNpZ25lZCBjaGFyICpwID0gc2tiLT50YWlsOwotCXN0cnVjdCB0Y19pZWVlODAyMTFfcW9wdCBvcHQ7Ci0KLQltZW1jcHkoJm9wdC50YWcycXVldWUsIHEtPnRhZzJxdWV1ZSwgVENfODAyMTFfTUFYX1RBRyArIDEpOwotCU5MQV9QVVQoc2tiLCBUQ0FfT1BUSU9OUywgc2l6ZW9mKG9wdCksICZvcHQpOwotKi8JcmV0dXJuIHNrYi0+bGVuOwotLyoKLW5sYV9wdXRfZmFpbHVyZToKLQlza2JfdHJpbShza2IsIHAgLSBza2ItPmRhdGEpOyovCi0JcmV0dXJuIC0xOwotfQotCi0KLXN0YXRpYyBpbnQgd21lX2NsYXNzb3BfZ3JhZnQoc3RydWN0IFFkaXNjICpxZCwgdW5zaWduZWQgbG9uZyBhcmcsCi0JCQkgICAgIHN0cnVjdCBRZGlzYyAqbmV3LCBzdHJ1Y3QgUWRpc2MgKipvbGQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihxZCk7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYocWQtPmRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCXVuc2lnbmVkIGxvbmcgcXVldWUgPSBhcmcgLSAxOwotCi0JaWYgKHF1ZXVlID49IGh3LT5xdWV1ZXMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFuZXcpCi0JCW5ldyA9ICZub29wX3FkaXNjOwotCi0Jc2NoX3RyZWVfbG9jayhxZCk7Ci0JKm9sZCA9IHEtPnF1ZXVlc1txdWV1ZV07Ci0JcS0+cXVldWVzW3F1ZXVlXSA9IG5ldzsKLQlxZGlzY19yZXNldCgqb2xkKTsKLQlzY2hfdHJlZV91bmxvY2socWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBRZGlzYyAqCi13bWVfY2xhc3NvcF9sZWFmKHN0cnVjdCBRZGlzYyAqcWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocWQpOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KHFkLT5kZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQl1bnNpZ25lZCBsb25nIHF1ZXVlID0gYXJnIC0gMTsKLQotCWlmIChxdWV1ZSA+PSBody0+cXVldWVzKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBxLT5xdWV1ZXNbcXVldWVdOwotfQotCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdtZV9jbGFzc29wX2dldChzdHJ1Y3QgUWRpc2MgKnFkLCB1MzIgY2xhc3NpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihxZC0+ZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0JdW5zaWduZWQgbG9uZyBxdWV1ZSA9IFRDX0hfTUlOKGNsYXNzaWQpOwotCi0JaWYgKHF1ZXVlIC0gMSA+PSBody0+cXVldWVzKQotCQlyZXR1cm4gMDsKLQogCXJldHVybiBxdWV1ZTsKIH0KIAotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB3bWVfY2xhc3NvcF9iaW5kKHN0cnVjdCBRZGlzYyAqcWQsIHVuc2lnbmVkIGxvbmcgcGFyZW50LAotCQkJCSAgICAgIHUzMiBjbGFzc2lkKQotewotCXJldHVybiB3bWVfY2xhc3NvcF9nZXQocWQsIGNsYXNzaWQpOwotfQotCi0KLXN0YXRpYyB2b2lkIHdtZV9jbGFzc29wX3B1dChzdHJ1Y3QgUWRpc2MgKnEsIHVuc2lnbmVkIGxvbmcgY2wpCi17Ci19Ci0KLQotc3RhdGljIGludCB3bWVfY2xhc3NvcF9jaGFuZ2Uoc3RydWN0IFFkaXNjICpxZCwgdTMyIGhhbmRsZSwgdTMyIHBhcmVudCwKLQkJCSAgICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHVuc2lnbmVkIGxvbmcgKmFyZykKLXsKLQl1bnNpZ25lZCBsb25nIGNsID0gKmFyZzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihxZC0+ZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0KLQlpZiAoY2wgLSAxID4gaHctPnF1ZXVlcykKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQkvKiBUT0RPOiBwdXQgY29kZSB0byBwcm9ncmFtIGhhcmR3YXJlIHF1ZXVlIHBhcmFtZXRlcnMgaGVyZSwKLQkgKiB0byBhbGxvdyBwcm9ncmFtbWluZyBmcm9tIHRjIGNvbW1hbmQgbGluZSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyogd2UgZG9uJ3Qgc3VwcG9ydCBkZWxldGluZyBoYXJkd2FyZSBxdWV1ZXMKLSAqIHdoZW4gd2UgYWRkIFdNTS1TQSBzdXBwb3J0IC0gVFNQRUNzIG1heSBiZSBkZWxldGVkIGhlcmUgKi8KLXN0YXRpYyBpbnQgd21lX2NsYXNzb3BfZGVsZXRlKHN0cnVjdCBRZGlzYyAqcWQsIHVuc2lnbmVkIGxvbmcgY2wpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYocWQtPmRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCi0JaWYgKGNsIC0gMSA+IGh3LT5xdWV1ZXMpCi0JCXJldHVybiAtRU5PRU5UOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgd21lX2NsYXNzb3BfZHVtcF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnFkLCB1bnNpZ25lZCBsb25nIGNsLAotCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihxZCk7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYocWQtPmRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCi0JaWYgKGNsIC0gMSA+IGh3LT5xdWV1ZXMpCi0JCXJldHVybiAtRU5PRU5UOwotCXRjbS0+dGNtX2hhbmRsZSA9IFRDX0hfTUlOKGNsKTsKLQl0Y20tPnRjbV9wYXJlbnQgPSBxZC0+aGFuZGxlOwotCXRjbS0+dGNtX2luZm8gPSBxLT5xdWV1ZXNbY2wtMV0tPmhhbmRsZTsgLyogZG8gd2UgbmVlZCB0aGlzPyAqLwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHdtZV9jbGFzc29wX3dhbGsoc3RydWN0IFFkaXNjICpxZCwgc3RydWN0IHFkaXNjX3dhbGtlciAqYXJnKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KHFkLT5kZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQlpbnQgcXVldWU7Ci0KLQlpZiAoYXJnLT5zdG9wKQotCQlyZXR1cm47Ci0KLQlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBody0+cXVldWVzOyBxdWV1ZSsrKSB7Ci0JCWlmIChhcmctPmNvdW50IDwgYXJnLT5za2lwKSB7Ci0JCQlhcmctPmNvdW50Kys7Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKiB3ZSBzaG91bGQgcmV0dXJuIGNsYXNzaWRzIGZvciBvdXIgaW50ZXJuYWwgcXVldWVzIGhlcmUKLQkJICogYXMgd2VsbCBhcyB0aGUgZXh0ZXJuYWwgb25lcyAqLwotCQlpZiAoYXJnLT5mbihxZCwgcXVldWUrMSwgYXJnKSA8IDApIHsKLQkJCWFyZy0+c3RvcCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQlhcmctPmNvdW50Kys7Ci0JfQotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvICoqIHdtZV9jbGFzc29wX2ZpbmRfdGNmKHN0cnVjdCBRZGlzYyAqcWQsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGNsKQotewotCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocWQpOwotCi0JaWYgKGNsKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiAmcS0+ZmlsdGVyX2xpc3Q7Ci19Ci0KLQotLyogdGhpcyBxZGlzYyBpcyBjbGFzc2Z1bCAoaS5lLiBoYXMgY2xhc3Nlcywgc29tZSBvZiB3aGljaCBtYXkgaGF2ZSBsZWFmIHFkaXNjcyBhdHRhY2hlZCkKLSAqIC0gdGhlc2UgYXJlIHRoZSBvcGVyYXRpb25zIG9uIHRoZSBjbGFzc2VzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBjbGFzc19vcHMgPQotewotCS5ncmFmdCA9IHdtZV9jbGFzc29wX2dyYWZ0LAotCS5sZWFmID0gd21lX2NsYXNzb3BfbGVhZiwKLQotCS5nZXQgPSB3bWVfY2xhc3NvcF9nZXQsCi0JLnB1dCA9IHdtZV9jbGFzc29wX3B1dCwKLQkuY2hhbmdlID0gd21lX2NsYXNzb3BfY2hhbmdlLAotCS5kZWxldGUgPSB3bWVfY2xhc3NvcF9kZWxldGUsCi0JLndhbGsgPSB3bWVfY2xhc3NvcF93YWxrLAotCi0JLnRjZl9jaGFpbiA9IHdtZV9jbGFzc29wX2ZpbmRfdGNmLAotCS5iaW5kX3RjZiA9IHdtZV9jbGFzc29wX2JpbmQsCi0JLnVuYmluZF90Y2YgPSB3bWVfY2xhc3NvcF9wdXQsCi0KLQkuZHVtcCA9IHdtZV9jbGFzc29wX2R1bXBfY2xhc3MsCi19OwotCi0KLS8qIHF1ZXVlaW5nIGRpc2NpcGxpbmUgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBRZGlzY19vcHMgd21lX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0KLXsKLQkubmV4dCA9IE5VTEwsCi0JLmNsX29wcyA9ICZjbGFzc19vcHMsCi0JLmlkID0gImllZWU4MDIxMSIsCi0JLnByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX2RhdGEpLAotCi0JLmVucXVldWUgPSB3bWVfcWRpc2NvcF9lbnF1ZXVlLAotCS5kZXF1ZXVlID0gd21lX3FkaXNjb3BfZGVxdWV1ZSwKLQkucmVxdWV1ZSA9IHdtZV9xZGlzY29wX3JlcXVldWUsCi0JLmRyb3AgPSBOVUxMLCAvKiBkcm9wIG5vdCBuZWVkZWQgc2luY2Ugd2UgYXJlIGFsd2F5cyB0aGUgcm9vdCBxZGlzYyAqLwotCi0JLmluaXQgPSB3bWVfcWRpc2NvcF9pbml0LAotCS5yZXNldCA9IHdtZV9xZGlzY29wX3Jlc2V0LAotCS5kZXN0cm95ID0gd21lX3FkaXNjb3BfZGVzdHJveSwKLQkuY2hhbmdlID0gd21lX3FkaXNjb3BfdHVuZSwKLQotCS5kdW1wID0gd21lX3FkaXNjb3BfZHVtcCwKLX07Ci0KLQotdm9pZCBpZWVlODAyMTFfaW5zdGFsbF9xZGlzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBRZGlzYyAqcWRpc2M7Ci0KLQlxZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldiwgJndtZV9xZGlzY19vcHMsIFRDX0hfUk9PVCk7Ci0JaWYgKCFxZGlzYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBxZGlzYyBpbnN0YWxsYXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogc2FtZSBoYW5kbGUgYXMgd291bGQgYmUgYWxsb2NhdGVkIGJ5IHFkaXNjX2FsbG9jX2hhbmRsZSgpICovCi0JcWRpc2MtPmhhbmRsZSA9IDB4ODAwMTAwMDA7Ci0KLQlxZGlzY19sb2NrX3RyZWUoZGV2KTsKLQlsaXN0X2FkZF90YWlsKCZxZGlzYy0+bGlzdCwgJmRldi0+cWRpc2NfbGlzdCk7Ci0JZGV2LT5xZGlzY19zbGVlcGluZyA9IHFkaXNjOwotCXFkaXNjX3VubG9ja190cmVlKGRldik7Ci19Ci0KLQotaW50IGllZWU4MDIxMV9xZGlzY19pbnN0YWxsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZGV2LT5xZGlzY19zbGVlcGluZy0+b3BzID09ICZ3bWVfcWRpc2Nfb3BzOwotfQotCi0KLWludCBpZWVlODAyMTFfd21lX3JlZ2lzdGVyKHZvaWQpCi17Ci0JcmV0dXJuIHJlZ2lzdGVyX3FkaXNjKCZ3bWVfcWRpc2Nfb3BzKTsKLX0KLQotCi12b2lkIGllZWU4MDIxMV93bWVfdW5yZWdpc3Rlcih2b2lkKQotewotCXVucmVnaXN0ZXJfcWRpc2MoJndtZV9xZGlzY19vcHMpOwotfQotCiBpbnQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKKwkJCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX2RhdGEgKnEgPQotCQkJcWRpc2NfcHJpdihsb2NhbC0+bWRldi0+cWRpc2Nfc2xlZXBpbmcpOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJLyogcHJlcGFyZSB0aGUgZmlsdGVyIGFuZCBzYXZlIGl0IGZvciB0aGUgU1cgcXVldWUKLQkgKiBtYXRjaGluZyB0aGUgcmVjaWV2ZWQgSFcgcXVldWUgKi8KKwkgKiBtYXRjaGluZyB0aGUgcmVjZWl2ZWQgSFcgcXVldWUgKi8KKworCWlmICghbG9jYWwtPmh3LmFtcGR1X3F1ZXVlcykKKwkJcmV0dXJuIC1FUEVSTTsKIAogCS8qIHRyeSB0byBnZXQgYSBRZGlzYyBmcm9tIHRoZSBwb29sICovCi0JZm9yIChpID0gSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTjsgaSA8IGxvY2FsLT5ody5xdWV1ZXM7IGkrKykKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksIHEtPnFkaXNjX3Bvb2wpKSB7CisJZm9yIChpID0gbG9jYWwtPmh3LnF1ZXVlczsgaSA8IGllZWU4MDIxMV9udW1fcXVldWVzKCZsb2NhbC0+aHcpOyBpKyspCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCBsb2NhbC0+cXVldWVfcG9vbCkpIHsKIAkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGxvY2FsX3RvX2h3KGxvY2FsKSwgaSk7CiAJCQlzdGEtPnRpZF90b190eF9xW3RpZF0gPSBpOwogCkBAIC02NzAsMTEgKzIwNSwxMyBAQAogCQkJICogb24gdGhlIHByZXZpb3VzIHF1ZXVlCiAJCQkgKiBzaW5jZSBIVCBpcyBzdHJpY3QgaW4gb3JkZXIgKi8KICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCQkJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgImFsbG9jYXRlZCBhZ2dyZWdhdGlvbiBxdWV1ZSIKIAkJCQkJIiAlZCB0aWQgJWQgYWRkciAlcyBwb29sPTB4JWxYXG4iLAogCQkJCQlpLCB0aWQsIHByaW50X21hYyhtYWMsIHN0YS0+YWRkciksCi0JCQkJCXEtPnFkaXNjX3Bvb2xbMF0pOworCQkJCQlsb2NhbC0+cXVldWVfcG9vbFswXSk7CisJCQl9CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtNjgzLDQ0ICsyMjAsNzkgQEAKIH0KIAogLyoqCi0gKiB0aGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgbG9jYWwtPm1kZXYtPnF1ZXVlX2xvY2sKKyAqIHRoZSBjYWxsZXIgbmVlZHMgdG8gaG9sZCBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBYKS0+bG9jawogICovCiB2b2lkIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAogCQkJCSAgIHU4IHJlcXVldWUpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2hlZF9kYXRhICpxID0KLQkJcWRpc2NfcHJpdihsb2NhbC0+bWRldi0+cWRpc2Nfc2xlZXBpbmcpOwogCWludCBhZ2dfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwogCiAJLyogcmV0dXJuIHRoZSBxZGlzYyB0byB0aGUgcG9vbCAqLwotCWNsZWFyX2JpdChhZ2dfcXVldWUsIHEtPnFkaXNjX3Bvb2wpOwotCXN0YS0+dGlkX3RvX3R4X3FbdGlkXSA9IGxvY2FsLT5ody5xdWV1ZXM7CisJY2xlYXJfYml0KGFnZ19xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpOworCXN0YS0+dGlkX3RvX3R4X3FbdGlkXSA9IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KTsKIAotCWlmIChyZXF1ZXVlKQorCWlmIChyZXF1ZXVlKSB7CiAJCWllZWU4MDIxMV9yZXF1ZXVlKGxvY2FsLCBhZ2dfcXVldWUpOwotCWVsc2UKLQkJcS0+cXVldWVzW2FnZ19xdWV1ZV0tPm9wcy0+cmVzZXQocS0+cXVldWVzW2FnZ19xdWV1ZV0pOworCX0gZWxzZSB7CisJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKKwkJc3BpbmxvY2tfdCAqcm9vdF9sb2NrOworCisJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsIGFnZ19xdWV1ZSk7CisJCXJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayh0eHEtPnFkaXNjKTsKKworCQlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKKwkJcWRpc2NfcmVzZXQodHhxLT5xZGlzYyk7CisJCXNwaW5fdW5sb2NrX2JoKHJvb3RfbG9jayk7CisJfQogfQogCiB2b2lkIGllZWU4MDIxMV9yZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcXVldWUpCiB7Ci0Jc3RydWN0IFFkaXNjICpyb290X3FkID0gbG9jYWwtPm1kZXYtPnFkaXNjX3NsZWVwaW5nOwotCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocm9vdF9xZCk7Ci0Jc3RydWN0IFFkaXNjICpxZGlzYyA9IHEtPnF1ZXVlc1txdWV1ZV07Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOworCXN0cnVjdCBza19idWZmX2hlYWQgbGlzdDsKKwlzcGlubG9ja190ICpyb290X2xvY2s7CisJc3RydWN0IFFkaXNjICpxZGlzYzsKIAl1MzIgbGVuOwogCi0JaWYgKCFxZGlzYyB8fCAhcWRpc2MtPmRlcXVldWUpCi0JCXJldHVybjsKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAicmVxdWV1ZTogcWxlbiA9ICVkXG4iLCBxZGlzYy0+cS5xbGVuKTsKKwlxZGlzYyA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKKwlpZiAoIXFkaXNjIHx8ICFxZGlzYy0+ZGVxdWV1ZSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbGlzdCk7CisKKwlyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2socWRpc2MpOworCXNwaW5fbG9jayhyb290X2xvY2spOwogCWZvciAobGVuID0gcWRpc2MtPnEucWxlbjsgbGVuID4gMDsgbGVuLS0pIHsKLQkJc2tiID0gcWRpc2MtPmRlcXVldWUocWRpc2MpOwotCQlyb290X3FkLT5xLnFsZW4tLTsKLQkJLyogcGFja2V0IHdpbGwgYmUgY2xhc3NpZmllZCBhZ2FpbiBhbmQgKi8KLQkJLyogc2tiLT5wYWNrZXRfZGF0YS0+cXVldWUgd2lsbCBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZCAqLworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcWRpc2MtPmRlcXVldWUocWRpc2MpOworCiAJCWlmIChza2IpCi0JCQl3bWVfcWRpc2NvcF9lbnF1ZXVlKHNrYiwgcm9vdF9xZCk7CisJCQlfX3NrYl9xdWV1ZV90YWlsKCZsaXN0LCBza2IpOwogCX0KKwlzcGluX3VubG9jayhyb290X2xvY2spOworCisJZm9yIChsZW4gPSBsaXN0LnFsZW47IGxlbiA+IDA7IGxlbi0tKSB7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKCZsaXN0KTsKKwkJdTE2IG5ld19xdWV1ZTsKKworCQlCVUdfT04oIXNrYik7CisJCW5ld19xdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWUobG9jYWwtPm1kZXYsIHNrYik7CisJCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIG5ld19xdWV1ZSk7CisKKwkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgbmV3X3F1ZXVlKTsKKworCisJCXFkaXNjID0gcmN1X2RlcmVmZXJlbmNlKHR4cS0+cWRpc2MpOworCQlyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2socWRpc2MpOworCisJCXNwaW5fbG9jayhyb290X2xvY2spOworCQlxZGlzY19lbnF1ZXVlX3Jvb3Qoc2tiLCBxZGlzYyk7CisJCXNwaW5fdW5sb2NrKHJvb3RfbG9jayk7CisJfQorCitvdXRfdW5sb2NrOgorCXJjdV9yZWFkX3VubG9ja19iaCgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dtZS5oIGIvbmV0L21hYzgwMjExL3dtZS5oCmluZGV4IGZjYzZiMDUuLjA0ZGUyOGMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93bWUuaAorKysgYi9uZXQvbWFjODAyMTEvd21lLmgKQEAgLTE5LDU3ICsxOSwxNiBAQAogI2RlZmluZSBRT1NfQ09OVFJPTF9BQ0tfUE9MSUNZX05PUk1BTCAwCiAjZGVmaW5lIFFPU19DT05UUk9MX0FDS19QT0xJQ1lfTk9BQ0sgMQogCi0jZGVmaW5lIFFPU19DT05UUk9MX1RJRF9NQVNLIDB4MGYKICNkZWZpbmUgUU9TX0NPTlRST0xfQUNLX1BPTElDWV9TSElGVCA1CiAKLSNkZWZpbmUgUU9TX0NPTlRST0xfVEFHMURfTUFTSyAweDA3Ci0KIGV4dGVybiBjb25zdCBpbnQgaWVlZTgwMl8xZF90b19hY1s4XTsKIAotc3RhdGljIGlubGluZSBpbnQgV0xBTl9GQ19JU19RT1NfREFUQSh1MTYgZmMpCi17Ci0JcmV0dXJuIChmYyAmIDB4OEMpID09IDB4ODg7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTkVUX1NDSEVECi12b2lkIGllZWU4MDIxMV9pbnN0YWxsX3FkaXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGllZWU4MDIxMV9xZGlzY19pbnN0YWxsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit1MTYgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCk7CiB2b2lkIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAogCQkJCSAgIHU4IHJlcXVldWUpOwogdm9pZCBpZWVlODAyMTFfcmVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHF1ZXVlKTsKLWludCBpZWVlODAyMTFfd21lX3JlZ2lzdGVyKHZvaWQpOwotdm9pZCBpZWVlODAyMTFfd21lX3VucmVnaXN0ZXIodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9pbnN0YWxsX3FkaXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci19Ci1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfcWRpc2NfaW5zdGFsbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKLXsKLQlyZXR1cm4gLUVBR0FJTjsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKLQkJCQkJCSB1OCByZXF1ZXVlKQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9yZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcXVldWUpCi17Ci19Ci1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfd21lX3JlZ2lzdGVyKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3dtZV91bnJlZ2lzdGVyKHZvaWQpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX05FVF9TQ0hFRCAqLwogCiAjZW5kaWYgLyogX1dNRV9IICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd3BhLmMgYi9uZXQvbWFjODAyMTEvd3BhLmMKaW5kZXggNDU3MDlhZC4uMmYzM2RmMCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dwYS5jCisrKyBiL25ldC9tYWM4MDIxMS93cGEuYwpAQCAtMTEsNiArMTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAogI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCkBAIC0xOSw3NiArMjEsMzAgQEAKICNpbmNsdWRlICJhZXNfY2NtLmgiCiAjaW5jbHVkZSAid3BhLmgiCiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9oZHJfaW5mbyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqKnNhLCB1OCAqKmRhLAotCQkJCSAgdTggKnFvc190aWQsIHU4ICoqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXNpemVfdCBoZHJsZW47Ci0JdTE2IGZjOwotCWludCBhNF9pbmNsdWRlZDsKLQl1OCAqcG9zOwotCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0KLQloZHJsZW4gPSAyNDsKLQlpZiAoKGZjICYgKElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFMpKSA9PQotCSAgICAoSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZDVExfVE9EUykpIHsKLQkJaGRybGVuICs9IEVUSF9BTEVOOwotCQkqc2EgPSBoZHItPmFkZHI0OwotCQkqZGEgPSBoZHItPmFkZHIzOwotCX0gZWxzZSBpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpIHsKLQkJKnNhID0gaGRyLT5hZGRyMzsKLQkJKmRhID0gaGRyLT5hZGRyMTsKLQl9IGVsc2UgaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykgewotCQkqc2EgPSBoZHItPmFkZHIyOwotCQkqZGEgPSBoZHItPmFkZHIzOwotCX0gZWxzZSB7Ci0JCSpzYSA9IGhkci0+YWRkcjI7Ci0JCSpkYSA9IGhkci0+YWRkcjE7Ci0JfQotCi0JaWYgKGZjICYgMHg4MCkKLQkJaGRybGVuICs9IDI7Ci0KLQkqZGF0YSA9IHNrYi0+ZGF0YSArIGhkcmxlbjsKLQkqZGF0YV9sZW4gPSBza2ItPmxlbiAtIGhkcmxlbjsKLQotCWE0X2luY2x1ZGVkID0gKGZjICYgKElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSA9PQotCQkoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUyk7Ci0JaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSAmJgotCSAgICBmYyAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkgewotCQlwb3MgPSAodTggKikgJmhkci0+YWRkcjQ7Ci0JCWlmIChhNF9pbmNsdWRlZCkKLQkJCXBvcyArPSA2OwotCQkqcW9zX3RpZCA9IHBvc1swXSAmIDB4MGY7Ci0JCSpxb3NfdGlkIHw9IDB4ODA7IC8qIHFvc19pbmNsdWRlZCBmbGFnICovCi0JfSBlbHNlCi0JCSpxb3NfdGlkID0gMDsKLQotCXJldHVybiBza2ItPmxlbiA8IGhkcmxlbiA/IC0xIDogMDsKLX0KLQotCiBpZWVlODAyMTFfdHhfcmVzdWx0CiBpZWVlODAyMTFfdHhfaF9taWNoYWVsX21pY19hZGQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQl1OCAqZGF0YSwgKnNhLCAqZGEsICprZXksICptaWMsIHFvc190aWQ7CisJdTggKmRhdGEsICprZXksICptaWMsIGtleV9vZmZzZXQ7CiAJc2l6ZV90IGRhdGFfbGVuOwotCXUxNiBmYzsKKwl1bnNpZ25lZCBpbnQgaGRybGVuOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CiAJaW50IGF1dGhlbnRpY2F0b3I7CiAJaW50IHdwYV90ZXN0ID0gMDsKKwlpbnQgdGFpbDsKIAotCWZjID0gdHgtPmZjOwotCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCWlmICghdHgtPmtleSB8fCB0eC0+a2V5LT5jb25mLmFsZyAhPSBBTEdfVEtJUCB8fCBza2ItPmxlbiA8IDI0IHx8Ci0JICAgICFXTEFOX0ZDX0RBVEFfUFJFU0VOVChmYykpCisJICAgICFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAotCWlmIChpZWVlODAyMTFfZ2V0X2hkcl9pbmZvKHNrYiwgJnNhLCAmZGEsICZxb3NfdGlkLCAmZGF0YSwgJmRhdGFfbGVuKSkKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CisJaWYgKHNrYi0+bGVuIDwgaGRybGVuKQogCQlyZXR1cm4gVFhfRFJPUDsKIAorCWRhdGEgPSBza2ItPmRhdGEgKyBoZHJsZW47CisJZGF0YV9sZW4gPSBza2ItPmxlbiAtIGhkcmxlbjsKKwogCWlmICgodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgJiYKIAkgICAgISh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfRlJBR01FTlRFRCkgJiYKIAkgICAgISh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpICYmCkBAIC05OCwyNiArNTQsMjcgQEAKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCX0KIAotCWlmIChza2JfdGFpbHJvb20oc2tiKSA8IE1JQ0hBRUxfTUlDX0xFTikgewotCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZCk7Ci0JCWlmICh1bmxpa2VseShwc2tiX2V4cGFuZF9oZWFkKHNrYiwgVEtJUF9JVl9MRU4sCi0JCQkJCSAgICAgIE1JQ0hBRUxfTUlDX0xFTiArIFRLSVBfSUNWX0xFTiwKLQkJCQkJICAgICAgR0ZQX0FUT01JQykpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBtb3JlIG1lbW9yeSAiCi0JCQkgICAgICAgImZvciBNaWNoYWVsIE1JQ1xuIiwgdHgtPmRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gVFhfRFJPUDsKLQkJfQotCX0KKwl0YWlsID0gTUlDSEFFTF9NSUNfTEVOOworCWlmICghKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKQorCQl0YWlsICs9IFRLSVBfSUNWX0xFTjsKKworCWlmIChXQVJOX09OKHNrYl90YWlscm9vbShza2IpIDwgdGFpbCB8fAorCQkgICAgc2tiX2hlYWRyb29tKHNrYikgPCBUS0lQX0lWX0xFTikpCisJCXJldHVybiBUWF9EUk9QOwogCiAjaWYgMAogCWF1dGhlbnRpY2F0b3IgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUzsgLyogRklYICovCiAjZWxzZQogCWF1dGhlbnRpY2F0b3IgPSAxOwogI2VuZGlmCi0Ja2V5ID0gJnR4LT5rZXktPmNvbmYua2V5W2F1dGhlbnRpY2F0b3IgPyBBTEdfVEtJUF9URU1QX0FVVEhfVFhfTUlDX0tFWSA6Ci0JCQkJIEFMR19US0lQX1RFTVBfQVVUSF9SWF9NSUNfS0VZXTsKKwkvKiBBdCB0aGlzIHBvaW50IHdlIGtub3cgd2UncmUgdXNpbmcgQUxHX1RLSVAuIFRvIGdldCB0aGUgTUlDIGtleQorCSAqIHdlIG5vdyB3aWxsIHJlbHkgb24gdGhlIG9mZnNldCBmcm9tIHRoZSBpZWVlODAyMTFfa2V5X2NvbmY6OmtleSAqLworCWtleV9vZmZzZXQgPSBhdXRoZW50aWNhdG9yID8KKwkJTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVkgOgorCQlOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWTsKKwlrZXkgPSAmdHgtPmtleS0+Y29uZi5rZXlba2V5X29mZnNldF07CiAJbWljID0gc2tiX3B1dChza2IsIE1JQ0hBRUxfTUlDX0xFTik7Ci0JbWljaGFlbF9taWMoa2V5LCBkYSwgc2EsIHFvc190aWQgJiAweDBmLCBkYXRhLCBkYXRhX2xlbiwgbWljKTsKKwltaWNoYWVsX21pYyhrZXksIGhkciwgZGF0YSwgZGF0YV9sZW4sIG1pYyk7CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CkBAIC0xMjYsNDcgKzgzLDUwIEBACiBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfcnhfaF9taWNoYWVsX21pY192ZXJpZnkoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKLQl1OCAqZGF0YSwgKnNhLCAqZGEsICprZXkgPSBOVUxMLCBxb3NfdGlkOworCXU4ICpkYXRhLCAqa2V5ID0gTlVMTCwga2V5X29mZnNldDsKIAlzaXplX3QgZGF0YV9sZW47Ci0JdTE2IGZjOworCXVuc2lnbmVkIGludCBoZHJsZW47CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAl1OCBtaWNbTUlDSEFFTF9NSUNfTEVOXTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKIAlpbnQgYXV0aGVudGljYXRvciA9IDEsIHdwYV90ZXN0ID0gMDsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAotCWZjID0gcngtPmZjOwotCiAJLyoKIAkgKiBObyB3YXkgdG8gdmVyaWZ5IHRoZSBNSUMgaWYgdGhlIGhhcmR3YXJlIHN0cmlwcGVkIGl0CiAJICovCiAJaWYgKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfU1RSSVBQRUQpCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAorCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlpZiAoIXJ4LT5rZXkgfHwgcngtPmtleS0+Y29uZi5hbGcgIT0gQUxHX1RLSVAgfHwKLQkgICAgIShyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpIHx8ICFXTEFOX0ZDX0RBVEFfUFJFU0VOVChmYykpCisJICAgICFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgICFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAotCWlmIChpZWVlODAyMTFfZ2V0X2hkcl9pbmZvKHNrYiwgJnNhLCAmZGEsICZxb3NfdGlkLCAmZGF0YSwgJmRhdGFfbGVuKQotCSAgICB8fCBkYXRhX2xlbiA8IE1JQ0hBRUxfTUlDX0xFTikKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CisJaWYgKHNrYi0+bGVuIDwgaGRybGVuICsgTUlDSEFFTF9NSUNfTEVOKQogCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAotCWRhdGFfbGVuIC09IE1JQ0hBRUxfTUlDX0xFTjsKKwlkYXRhID0gc2tiLT5kYXRhICsgaGRybGVuOworCWRhdGFfbGVuID0gc2tiLT5sZW4gLSBoZHJsZW4gLSBNSUNIQUVMX01JQ19MRU47CiAKICNpZiAwCiAJYXV0aGVudGljYXRvciA9IGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUzsgLyogRklYICovCiAjZWxzZQogCWF1dGhlbnRpY2F0b3IgPSAxOwogI2VuZGlmCi0Ja2V5ID0gJnJ4LT5rZXktPmNvbmYua2V5W2F1dGhlbnRpY2F0b3IgPyBBTEdfVEtJUF9URU1QX0FVVEhfUlhfTUlDX0tFWSA6Ci0JCQkJIEFMR19US0lQX1RFTVBfQVVUSF9UWF9NSUNfS0VZXTsKLQltaWNoYWVsX21pYyhrZXksIGRhLCBzYSwgcW9zX3RpZCAmIDB4MGYsIGRhdGEsIGRhdGFfbGVuLCBtaWMpOworCS8qIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB3ZSdyZSB1c2luZyBBTEdfVEtJUC4gVG8gZ2V0IHRoZSBNSUMga2V5CisJICogd2Ugbm93IHdpbGwgcmVseSBvbiB0aGUgb2Zmc2V0IGZyb20gdGhlIGllZWU4MDIxMV9rZXlfY29uZjo6a2V5ICovCisJa2V5X29mZnNldCA9IGF1dGhlbnRpY2F0b3IgPworCQlOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWSA6CisJCU5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZOworCWtleSA9ICZyeC0+a2V5LT5jb25mLmtleVtrZXlfb2Zmc2V0XTsKKwltaWNoYWVsX21pYyhrZXksIGhkciwgZGF0YSwgZGF0YV9sZW4sIG1pYyk7CiAJaWYgKG1lbWNtcChtaWMsIGRhdGEgKyBkYXRhX2xlbiwgTUlDSEFFTF9NSUNfTEVOKSAhPSAwIHx8IHdwYV90ZXN0KSB7CiAJCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCiAJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGludmFsaWQgTWljaGFlbCBNSUMgaW4gZGF0YSBmcmFtZSBmcm9tICIKLQkJICAgICAgICIlc1xuIiwgcngtPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgc2EpKTsKLQogCQltYWM4MDIxMV9ldl9taWNoYWVsX21pY19mYWlsdXJlKHJ4LT5kZXYsIHJ4LT5rZXktPmNvbmYua2V5aWR4LAogCQkJCQkJKHZvaWQgKikgc2tiLT5kYXRhKTsKIAkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CkBAIC0xNzYsNTkgKzEzNiw1OCBAQAogCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU4pOwogCiAJLyogdXBkYXRlIElWIGluIGtleSBpbmZvcm1hdGlvbiB0byBiZSBhYmxlIHRvIGRldGVjdCByZXBsYXlzICovCi0JcngtPmtleS0+dS50a2lwLml2MzJfcnhbcngtPnF1ZXVlXSA9IHJ4LT50a2lwX2l2MzI7Ci0JcngtPmtleS0+dS50a2lwLml2MTZfcnhbcngtPnF1ZXVlXSA9IHJ4LT50a2lwX2l2MTY7CisJcngtPmtleS0+dS50a2lwLnJ4W3J4LT5xdWV1ZV0uaXYzMiA9IHJ4LT50a2lwX2l2MzI7CisJcngtPmtleS0+dS50a2lwLnJ4W3J4LT5xdWV1ZV0uaXYxNiA9IHJ4LT50a2lwX2l2MTY7CiAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CiAKIAotc3RhdGljIGludCB0a2lwX2VuY3J5cHRfc2tiKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsCi0JCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRlc3QpCitzdGF0aWMgaW50IHRraXBfZW5jcnlwdF9za2Ioc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gdHgtPmtleTsKLQlpbnQgaGRybGVuLCBsZW4sIHRhaWxuZWVkOwotCXUxNiBmYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJdW5zaWduZWQgaW50IGhkcmxlbjsKKwlpbnQgbGVuLCB0YWlsOwogCXU4ICpwb3M7CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOworCWluZm8tPmNvbnRyb2wuaWN2X2xlbiA9IFRLSVBfSUNWX0xFTjsKKwlpbmZvLT5jb250cm9sLml2X2xlbiA9IFRLSVBfSVZfTEVOOworCisJaWYgKCh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJgorCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpKSB7CisJCS8qIGh3YWNjZWwgLSB3aXRoIG5vIG5lZWQgZm9yIHByZWFsbG9jYXRlZCByb29tIGZvciBJVi9JQ1YgKi8KKwkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKKwkJcmV0dXJuIDA7CisJfQorCisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCWxlbiA9IHNrYi0+bGVuIC0gaGRybGVuOwogCiAJaWYgKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpCi0JCXRhaWxuZWVkID0gMDsKKwkJdGFpbCA9IDA7CiAJZWxzZQotCQl0YWlsbmVlZCA9IFRLSVBfSUNWX0xFTjsKKwkJdGFpbCA9IFRLSVBfSUNWX0xFTjsKIAotCWlmICgoc2tiX2hlYWRyb29tKHNrYikgPCBUS0lQX0lWX0xFTiB8fAotCSAgICAgc2tiX3RhaWxyb29tKHNrYikgPCB0YWlsbmVlZCkpIHsKLQkJSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT50eF9leHBhbmRfc2tiX2hlYWQpOwotCQlpZiAodW5saWtlbHkocHNrYl9leHBhbmRfaGVhZChza2IsIFRLSVBfSVZfTEVOLCB0YWlsbmVlZCwKLQkJCQkJICAgICAgR0ZQX0FUT01JQykpKQotCQkJcmV0dXJuIC0xOwotCX0KKwlpZiAoV0FSTl9PTihza2JfdGFpbHJvb20oc2tiKSA8IHRhaWwgfHwKKwkJICAgIHNrYl9oZWFkcm9vbShza2IpIDwgVEtJUF9JVl9MRU4pKQorCQlyZXR1cm4gLTE7CiAKIAlwb3MgPSBza2JfcHVzaChza2IsIFRLSVBfSVZfTEVOKTsKIAltZW1tb3ZlKHBvcywgcG9zICsgVEtJUF9JVl9MRU4sIGhkcmxlbik7CiAJcG9zICs9IGhkcmxlbjsKIAogCS8qIEluY3JlYXNlIElWIGZvciB0aGUgZnJhbWUgKi8KLQlrZXktPnUudGtpcC5pdjE2Kys7Ci0JaWYgKGtleS0+dS50a2lwLml2MTYgPT0gMCkKLQkJa2V5LT51LnRraXAuaXYzMisrOworCWtleS0+dS50a2lwLnR4Lml2MTYrKzsKKwlpZiAoa2V5LT51LnRraXAudHguaXYxNiA9PSAwKQorCQlrZXktPnUudGtpcC50eC5pdjMyKys7CiAKIAlpZiAodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgewotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0KIAkJLyogaHdhY2NlbCAtIHdpdGggcHJlYWxsb2NhdGVkIHJvb20gZm9yIElWICovCi0JCWllZWU4MDIxMV90a2lwX2FkZF9pdihwb3MsIGtleSwKLQkJCQkgICAgICAodTgpIChrZXktPnUudGtpcC5pdjE2ID4+IDgpLAotCQkJCSAgICAgICh1OCkgKCgoa2V5LT51LnRraXAuaXYxNiA+PiA4KSB8IDB4MjApICYKLQkJCQkJICAgIDB4N2YpLAotCQkJCSAgICAgICh1OCkga2V5LT51LnRraXAuaXYxNik7CisJCWllZWU4MDIxMV90a2lwX2FkZF9pdihwb3MsIGtleSwga2V5LT51LnRraXAudHguaXYxNik7CiAKLQkJdHgtPmNvbnRyb2wtPmtleV9pZHggPSB0eC0+a2V5LT5jb25mLmh3X2tleV9pZHg7CisJCWluZm8tPmNvbnRyb2wuaHdfa2V5ID0gJnR4LT5rZXktPmNvbmY7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjQ2LDI4ICsyMDUsMTYgQEAKIGllZWU4MDIxMV9jcnlwdG9fdGtpcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7Ci0JaW50IHdwYV90ZXN0ID0gMCwgdGVzdCA9IDA7CiAKLQl0eC0+Y29udHJvbC0+aWN2X2xlbiA9IFRLSVBfSUNWX0xFTjsKLQl0eC0+Y29udHJvbC0+aXZfbGVuID0gVEtJUF9JVl9MRU47CiAJaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQodHgpOwogCi0JaWYgKCh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJgotCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpICYmCi0JICAgICF3cGFfdGVzdCkgewotCQkvKiBod2FjY2VsIC0gd2l0aCBubyBuZWVkIGZvciBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgSVYvSUNWICovCi0JCXR4LT5jb250cm9sLT5rZXlfaWR4ID0gdHgtPmtleS0+Y29uZi5od19rZXlfaWR4OwotCQlyZXR1cm4gVFhfQ09OVElOVUU7Ci0JfQotCi0JaWYgKHRraXBfZW5jcnlwdF9za2IodHgsIHNrYiwgdGVzdCkgPCAwKQorCWlmICh0a2lwX2VuY3J5cHRfc2tiKHR4LCBza2IpIDwgMCkKIAkJcmV0dXJuIFRYX0RST1A7CiAKIAlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQkJaWYgKHRraXBfZW5jcnlwdF9za2IodHgsIHR4LT5leHRyYV9mcmFnW2ldLCB0ZXN0KQotCQkJICAgIDwgMCkKKwkJCWlmICh0a2lwX2VuY3J5cHRfc2tiKHR4LCB0eC0+ZXh0cmFfZnJhZ1tpXSkgPCAwKQogCQkJCXJldHVybiBUWF9EUk9QOwogCQl9CiAJfQpAQCAtMjgwLDE2ICsyMjcsMTQgQEAKIGllZWU4MDIxMV9jcnlwdG9fdGtpcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSByeC0+c2tiLT5kYXRhOwotCXUxNiBmYzsKIAlpbnQgaGRybGVuLCByZXMsIGh3YWNjZWwgPSAwLCB3cGFfdGVzdCA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IHJ4LT5rZXk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2I7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAotCWlmICgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKQorCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJaWYgKCFyeC0+c3RhIHx8IHNrYi0+bGVuIC0gaGRybGVuIDwgMTIpCkBAIC0zMTUsMTUgKzI2MCw4IEBACiAJCQkJCSAgaGRyLT5hZGRyMSwgaHdhY2NlbCwgcngtPnF1ZXVlLAogCQkJCQkgICZyeC0+dGtpcF9pdjMyLAogCQkJCQkgICZyeC0+dGtpcF9pdjE2KTsKLQlpZiAocmVzICE9IFRLSVBfREVDUllQVF9PSyB8fCB3cGFfdGVzdCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGRlY3J5cHQgZmFpbGVkIGZvciBSWCAiCi0JCQkgICAgICAgImZyYW1lIGZyb20gJXMgKHJlcz0lZClcbiIsIHJ4LT5kZXYtPm5hbWUsCi0JCQkgICAgICAgcHJpbnRfbWFjKG1hYywgcngtPnN0YS0+YWRkciksIHJlcyk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0RFQlVHICovCisJaWYgKHJlcyAhPSBUS0lQX0RFQ1JZUFRfT0sgfHwgd3BhX3Rlc3QpCiAJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCX0KIAogCS8qIFRyaW0gSUNWICovCiAJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFRLSVBfSUNWX0xFTik7CkBAIC0zMzYsNzAgKzI3NCw2OCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGNjbXBfc3BlY2lhbF9ibG9ja3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKnBuLCB1OCAqYl8wLCB1OCAqYWFkLAorc3RhdGljIHZvaWQgY2NtcF9zcGVjaWFsX2Jsb2NrcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqcG4sIHU4ICpzY3JhdGNoLAogCQkJCWludCBlbmNyeXB0ZWQpCiB7Ci0JdTE2IGZjOwotCWludCBhNF9pbmNsdWRlZCwgcW9zX2luY2x1ZGVkOwotCXU4IHFvc190aWQsICpmY19wb3MsICpkYXRhLCAqc2EsICpkYTsKLQlpbnQgbGVuX2E7Ci0Jc2l6ZV90IGRhdGFfbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCV9fbGUxNiBtYXNrX2ZjOworCWludCBhNF9pbmNsdWRlZDsKKwl1OCBxb3NfdGlkOworCXU4ICpiXzAsICphYWQ7CisJdTE2IGRhdGFfbGVuLCBsZW5fYTsKKwl1bnNpZ25lZCBpbnQgaGRybGVuOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAKLQlmY19wb3MgPSAodTggKikgJmhkci0+ZnJhbWVfY29udHJvbDsKLQlmYyA9IGZjX3Bvc1swXSBeIChmY19wb3NbMV0gPDwgOCk7Ci0JYTRfaW5jbHVkZWQgPSAoZmMgJiAoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUykpID09Ci0JCShJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKTsKKwliXzAgPSBzY3JhdGNoICsgMyAqIEFFU19CTE9DS19MRU47CisJYWFkID0gc2NyYXRjaCArIDQgKiBBRVNfQkxPQ0tfTEVOOwogCi0JaWVlZTgwMjExX2dldF9oZHJfaW5mbyhza2IsICZzYSwgJmRhLCAmcW9zX3RpZCwgJmRhdGEsICZkYXRhX2xlbik7Ci0JZGF0YV9sZW4gLT0gQ0NNUF9IRFJfTEVOICsgKGVuY3J5cHRlZCA/IENDTVBfTUlDX0xFTiA6IDApOwotCWlmIChxb3NfdGlkICYgMHg4MCkgewotCQlxb3NfaW5jbHVkZWQgPSAxOwotCQlxb3NfdGlkICY9IDB4MGY7Ci0JfSBlbHNlCi0JCXFvc19pbmNsdWRlZCA9IDA7CisJLyoKKwkgKiBNYXNrIEZDOiB6ZXJvIHN1YnR5cGUgYjQgYjUgYjYKKwkgKiBSZXRyeSwgUHdyTWd0LCBNb3JlRGF0YTsgc2V0IFByb3RlY3RlZAorCSAqLworCW1hc2tfZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJbWFza19mYyAmPSB+Y3B1X3RvX2xlMTYoMHgwMDcwIHwgSUVFRTgwMjExX0ZDVExfUkVUUlkgfAorCQkJCUlFRUU4MDIxMV9GQ1RMX1BNIHwgSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOworCW1hc2tfZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKKwlsZW5fYSA9IGhkcmxlbiAtIDI7CisJYTRfaW5jbHVkZWQgPSBpZWVlODAyMTFfaGFzX2E0KGhkci0+ZnJhbWVfY29udHJvbCk7CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXFvc190aWQgPSAqaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcikgJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKKwllbHNlCisJCXFvc190aWQgPSAwOworCisJZGF0YV9sZW4gPSBza2ItPmxlbiAtIGhkcmxlbiAtIENDTVBfSERSX0xFTjsKKwlpZiAoZW5jcnlwdGVkKQorCQlkYXRhX2xlbiAtPSBDQ01QX01JQ19MRU47CisKIAkvKiBGaXJzdCBibG9jaywgYl8wICovCi0KIAliXzBbMF0gPSAweDU5OyAvKiBmbGFnczogQWRhdGE6IDEsIE06IDAxMSwgTDogMDAxICovCiAJLyogTm9uY2U6IFFvUyBQcmlvcml0eSB8IEEyIHwgUE4gKi8KIAliXzBbMV0gPSBxb3NfdGlkOwotCW1lbWNweSgmYl8wWzJdLCBoZHItPmFkZHIyLCA2KTsKKwltZW1jcHkoJmJfMFsyXSwgaGRyLT5hZGRyMiwgRVRIX0FMRU4pOwogCW1lbWNweSgmYl8wWzhdLCBwbiwgQ0NNUF9QTl9MRU4pOwogCS8qIGwobSkgKi8KLQliXzBbMTRdID0gKGRhdGFfbGVuID4+IDgpICYgMHhmZjsKLQliXzBbMTVdID0gZGF0YV9sZW4gJiAweGZmOwotCisJcHV0X3VuYWxpZ25lZF9iZTE2KGRhdGFfbGVuLCAmYl8wWzE0XSk7CiAKIAkvKiBBQUQgKGV4dHJhIGF1dGhlbnRpY2F0ZS1vbmx5IGRhdGEpIC8gbWFza2VkIDgwMi4xMSBoZWFkZXIKIAkgKiBGQyB8IEExIHwgQTIgfCBBMyB8IFNDIHwgW0E0XSB8IFtRQ10gKi8KLQotCWxlbl9hID0gYTRfaW5jbHVkZWQgPyAyOCA6IDIyOwotCWlmIChxb3NfaW5jbHVkZWQpCi0JCWxlbl9hICs9IDI7Ci0KLQlhYWRbMF0gPSAwOyAvKiAobGVuX2EgPj4gOCkgJiAweGZmOyAqLwotCWFhZFsxXSA9IGxlbl9hICYgMHhmZjsKLQkvKiBNYXNrIEZDOiB6ZXJvIHN1YnR5cGUgYjQgYjUgYjYgKi8KLQlhYWRbMl0gPSBmY19wb3NbMF0gJiB+KEJJVCg0KSB8IEJJVCg1KSB8IEJJVCg2KSk7Ci0JLyogUmV0cnksIFB3ck1ndCwgTW9yZURhdGE7IHNldCBQcm90ZWN0ZWQgKi8KLQlhYWRbM10gPSAoZmNfcG9zWzFdICYgfihCSVQoMykgfCBCSVQoNCkgfCBCSVQoNSkpKSB8IEJJVCg2KTsKLQltZW1jcHkoJmFhZFs0XSwgJmhkci0+YWRkcjEsIDE4KTsKKwlwdXRfdW5hbGlnbmVkX2JlMTYobGVuX2EsICZhYWRbMF0pOworCXB1dF91bmFsaWduZWQobWFza19mYywgKF9fbGUxNiAqKSZhYWRbMl0pOworCW1lbWNweSgmYWFkWzRdLCAmaGRyLT5hZGRyMSwgMyAqIEVUSF9BTEVOKTsKIAogCS8qIE1hc2sgU2VxIywgbGVhdmUgRnJhZyMgKi8KIAlhYWRbMjJdID0gKigodTggKikgJmhkci0+c2VxX2N0cmwpICYgMHgwZjsKIAlhYWRbMjNdID0gMDsKLQlpZiAoYTRfaW5jbHVkZWQpIHsKLQkJbWVtY3B5KCZhYWRbMjRdLCBoZHItPmFkZHI0LCA2KTsKLQkJYWFkWzMwXSA9IDA7Ci0JCWFhZFszMV0gPSAwOwotCX0gZWxzZQotCQltZW1zZXQoJmFhZFsyNF0sIDAsIDgpOwotCWlmIChxb3NfaW5jbHVkZWQpIHsKLQkJdTggKmRwb3MgPSAmYWFkW2E0X2luY2x1ZGVkID8gMzAgOiAyNF07CiAKLQkJLyogTWFzayBRb1MgQ29udHJvbCBmaWVsZCAqLwotCQlkcG9zWzBdID0gcW9zX3RpZDsKLQkJZHBvc1sxXSA9IDA7CisJaWYgKGE0X2luY2x1ZGVkKSB7CisJCW1lbWNweSgmYWFkWzI0XSwgaGRyLT5hZGRyNCwgRVRIX0FMRU4pOworCQlhYWRbMzBdID0gcW9zX3RpZDsKKwkJYWFkWzMxXSA9IDA7CisJfSBlbHNlIHsKKwkJbWVtc2V0KCZhYWRbMjRdLCAwLCBFVEhfQUxFTiArIElFRUU4MDIxMV9RT1NfQ1RMX0xFTik7CisJCWFhZFsyNF0gPSBxb3NfdGlkOwogCX0KIH0KIApAQCAtNDI5LDM2ICszNjUsMzcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGNjbXBfZW5jcnlwdF9za2Ioc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwKLQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGVzdCkKK3N0YXRpYyBpbnQgY2NtcF9lbmNyeXB0X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSB0eC0+a2V5OwotCWludCBoZHJsZW4sIGxlbiwgdGFpbG5lZWQ7Ci0JdTE2IGZjOwotCXU4ICpwb3MsICpwbiwgKmJfMCwgKmFhZCwgKnNjcmF0Y2g7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWludCBoZHJsZW4sIGxlbiwgdGFpbDsKKwl1OCAqcG9zLCAqcG47CiAJaW50IGk7CiAKLQlzY3JhdGNoID0ga2V5LT51LmNjbXAudHhfY3J5cHRvX2J1ZjsKLQliXzAgPSBzY3JhdGNoICsgMyAqIEFFU19CTE9DS19MRU47Ci0JYWFkID0gc2NyYXRjaCArIDQgKiBBRVNfQkxPQ0tfTEVOOworCWluZm8tPmNvbnRyb2wuaWN2X2xlbiA9IENDTVBfTUlDX0xFTjsKKwlpbmZvLT5jb250cm9sLml2X2xlbiA9IENDTVBfSERSX0xFTjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJaWYgKCh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJgorCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpKSB7CisJCS8qIGh3YWNjZWwgLSB3aXRoIG5vIG5lZWQgZm9yIHByZWFsbG9jYXRlZCByb29tIGZvciBDQ01QICIKKwkJICogaGVhZGVyIG9yIE1JQyBmaWVsZHMgKi8KKwkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKKwkJcmV0dXJuIDA7CisJfQorCisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCWxlbiA9IHNrYi0+bGVuIC0gaGRybGVuOwogCiAJaWYgKGtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkKLQkJdGFpbG5lZWQgPSAwOworCQl0YWlsID0gMDsKIAllbHNlCi0JCXRhaWxuZWVkID0gQ0NNUF9NSUNfTEVOOworCQl0YWlsID0gQ0NNUF9NSUNfTEVOOwogCi0JaWYgKChza2JfaGVhZHJvb20oc2tiKSA8IENDTVBfSERSX0xFTiB8fAotCSAgICAgc2tiX3RhaWxyb29tKHNrYikgPCB0YWlsbmVlZCkpIHsKLQkJSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT50eF9leHBhbmRfc2tiX2hlYWQpOwotCQlpZiAodW5saWtlbHkocHNrYl9leHBhbmRfaGVhZChza2IsIENDTVBfSERSX0xFTiwgdGFpbG5lZWQsCi0JCQkJCSAgICAgIEdGUF9BVE9NSUMpKSkKLQkJCXJldHVybiAtMTsKLQl9CisJaWYgKFdBUk5fT04oc2tiX3RhaWxyb29tKHNrYikgPCB0YWlsIHx8CisJCSAgICBza2JfaGVhZHJvb20oc2tiKSA8IENDTVBfSERSX0xFTikpCisJCXJldHVybiAtMTsKIAogCXBvcyA9IHNrYl9wdXNoKHNrYiwgQ0NNUF9IRFJfTEVOKTsKIAltZW1tb3ZlKHBvcywgcG9zICsgQ0NNUF9IRFJfTEVOLCBoZHJsZW4pOwpAQCAtNDc4LDEzICs0MTUsMTMgQEAKIAogCWlmIChrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpIHsKIAkJLyogaHdhY2NlbCAtIHdpdGggcHJlYWxsb2NhdGVkIHJvb20gZm9yIENDTVAgaGVhZGVyICovCi0JCXR4LT5jb250cm9sLT5rZXlfaWR4ID0ga2V5LT5jb25mLmh3X2tleV9pZHg7CisJCWluZm8tPmNvbnRyb2wuaHdfa2V5ID0gJnR4LT5rZXktPmNvbmY7CiAJCXJldHVybiAwOwogCX0KIAogCXBvcyArPSBDQ01QX0hEUl9MRU47Ci0JY2NtcF9zcGVjaWFsX2Jsb2Nrcyhza2IsIHBuLCBiXzAsIGFhZCwgMCk7Ci0JaWVlZTgwMjExX2Flc19jY21fZW5jcnlwdChrZXktPnUuY2NtcC50Zm0sIHNjcmF0Y2gsIGJfMCwgYWFkLCBwb3MsIGxlbiwKKwljY21wX3NwZWNpYWxfYmxvY2tzKHNrYiwgcG4sIGtleS0+dS5jY21wLnR4X2NyeXB0b19idWYsIDApOworCWllZWU4MDIxMV9hZXNfY2NtX2VuY3J5cHQoa2V5LT51LmNjbXAudGZtLCBrZXktPnUuY2NtcC50eF9jcnlwdG9fYnVmLCBwb3MsIGxlbiwKIAkJCQkgIHBvcywgc2tiX3B1dChza2IsIENDTVBfTUlDX0xFTikpOwogCiAJcmV0dXJuIDA7CkBAIC00OTUsMjggKzQzMiwxNiBAQAogaWVlZTgwMjExX2NyeXB0b19jY21wX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKLQlpbnQgdGVzdCA9IDA7CiAKLQl0eC0+Y29udHJvbC0+aWN2X2xlbiA9IENDTVBfTUlDX0xFTjsKLQl0eC0+Y29udHJvbC0+aXZfbGVuID0gQ0NNUF9IRFJfTEVOOwogCWllZWU4MDIxMV90eF9zZXRfcHJvdGVjdGVkKHR4KTsKIAotCWlmICgodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgJiYKLQkgICAgISh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSkgewotCQkvKiBod2FjY2VsIC0gd2l0aCBubyBuZWVkIGZvciBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgQ0NNUCAiCi0JCSAqIGhlYWRlciBvciBNSUMgZmllbGRzICovCi0JCXR4LT5jb250cm9sLT5rZXlfaWR4ID0gdHgtPmtleS0+Y29uZi5od19rZXlfaWR4OwotCQlyZXR1cm4gVFhfQ09OVElOVUU7Ci0JfQotCi0JaWYgKGNjbXBfZW5jcnlwdF9za2IodHgsIHNrYiwgdGVzdCkgPCAwKQorCWlmIChjY21wX2VuY3J5cHRfc2tiKHR4LCBza2IpIDwgMCkKIAkJcmV0dXJuIFRYX0RST1A7CiAKIAlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQkJaWYgKGNjbXBfZW5jcnlwdF9za2IodHgsIHR4LT5leHRyYV9mcmFnW2ldLCB0ZXN0KQotCQkJICAgIDwgMCkKKwkJCWlmIChjY21wX2VuY3J5cHRfc2tiKHR4LCB0eC0+ZXh0cmFfZnJhZ1tpXSkgPCAwKQogCQkJCXJldHVybiBUWF9EUk9QOwogCQl9CiAJfQpAQCAtNTI4LDggKzQ1Myw3IEBACiBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgcngtPnNrYi0+ZGF0YTsKLQl1MTYgZmM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CiAJaW50IGhkcmxlbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gcngtPmtleTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKQEAgLTUzNywxMCArNDYxLDkgQEAKIAlpbnQgZGF0YV9sZW47CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAotCWlmICgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKQorCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJZGF0YV9sZW4gPSBza2ItPmxlbiAtIGhkcmxlbiAtIENDTVBfSERSX0xFTiAtIENDTVBfTUlDX0xFTjsKQEAgLTU1NCw0MSArNDc3LDE5IEBACiAJKHZvaWQpIGNjbXBfaGRyMnBuKHBuLCBza2ItPmRhdGEgKyBoZHJsZW4pOwogCiAJaWYgKG1lbWNtcChwbiwga2V5LT51LmNjbXAucnhfcG5bcngtPnF1ZXVlXSwgQ0NNUF9QTl9MRU4pIDw9IDApIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUcKLQkJdTggKnBwbiA9IGtleS0+dS5jY21wLnJ4X3BuW3J4LT5xdWV1ZV07Ci0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDQ01QIHJlcGxheSBkZXRlY3RlZCBmb3IgUlggZnJhbWUgZnJvbSAiCi0JCSAgICAgICAiJXMgKFJYIFBOICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCA8PSBwcmV2LiBQTiAiCi0JCSAgICAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4KVxuIiwgcngtPmRldi0+bmFtZSwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIHJ4LT5zdGEtPmFkZHIpLAotCQkgICAgICAgcG5bMF0sIHBuWzFdLCBwblsyXSwgcG5bM10sIHBuWzRdLCBwbls1XSwKLQkJICAgICAgIHBwblswXSwgcHBuWzFdLCBwcG5bMl0sIHBwblszXSwgcHBuWzRdLCBwcG5bNV0pOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVRyAqLwogCQlrZXktPnUuY2NtcC5yZXBsYXlzKys7CiAJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCX0KIAogCWlmICghKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpIHsKIAkJLyogaGFyZHdhcmUgZGlkbid0IGRlY3J5cHQvdmVyaWZ5IE1JQyAqLwotCQl1OCAqc2NyYXRjaCwgKmJfMCwgKmFhZDsKLQotCQlzY3JhdGNoID0ga2V5LT51LmNjbXAucnhfY3J5cHRvX2J1ZjsKLQkJYl8wID0gc2NyYXRjaCArIDMgKiBBRVNfQkxPQ0tfTEVOOwotCQlhYWQgPSBzY3JhdGNoICsgNCAqIEFFU19CTE9DS19MRU47Ci0KLQkJY2NtcF9zcGVjaWFsX2Jsb2Nrcyhza2IsIHBuLCBiXzAsIGFhZCwgMSk7CisJCWNjbXBfc3BlY2lhbF9ibG9ja3Moc2tiLCBwbiwga2V5LT51LmNjbXAucnhfY3J5cHRvX2J1ZiwgMSk7CiAKIAkJaWYgKGllZWU4MDIxMV9hZXNfY2NtX2RlY3J5cHQoCi0JCQkgICAga2V5LT51LmNjbXAudGZtLCBzY3JhdGNoLCBiXzAsIGFhZCwKKwkJCSAgICBrZXktPnUuY2NtcC50Zm0sIGtleS0+dS5jY21wLnJ4X2NyeXB0b19idWYsCiAJCQkgICAgc2tiLT5kYXRhICsgaGRybGVuICsgQ0NNUF9IRFJfTEVOLCBkYXRhX2xlbiwKIAkJCSAgICBza2ItPmRhdGEgKyBza2ItPmxlbiAtIENDTVBfTUlDX0xFTiwKIAkJCSAgICBza2ItPmRhdGEgKyBoZHJsZW4gKyBDQ01QX0hEUl9MRU4pKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHCi0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQ0NNUCBkZWNyeXB0IGZhaWxlZCAiCi0JCQkJICAgICAgICJmb3IgUlggZnJhbWUgZnJvbSAlc1xuIiwgcngtPmRldi0+bmFtZSwKLQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYywgcngtPnN0YS0+YWRkcikpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVRyAqLwogCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggYWE4ZDgwYy4uZWU4OThlNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMzMsOSArMzMsOCBAQAogCSAgaW50byBjb25uZWN0aW9ucy4KIAogCSAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29yawotCSAgQWRkcmVzcyBUcmFuc2xhdGlvbiAoZXhjZXB0IGZvciBGYXN0IE5BVCkuICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvCi0JICBlbmhhbmNlIHBhY2tldCBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JwotCSAgYmVsb3cpLgorCSAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXQKKwkgIGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQnIGJlbG93KS4KIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKQEAgLTUwLDYgKzQ5LDE1IEBACiAJICBUaG9zZSBjb3VudGVycyBjYW4gYmUgdXNlZCBmb3IgZmxvdy1iYXNlZCBhY2NvdW50aW5nIG9yIHRoZQogCSAgYGNvbm5ieXRlcycgbWF0Y2guCiAKKwkgIFBsZWFzZSBub3RlIHRoYXQgY3VycmVudGx5IHRoaXMgb3B0aW9uIG9ubHkgc2V0cyBhIGRlZmF1bHQgc3RhdGUuCisJICBZb3UgbWF5IGNoYW5nZSBpdCBhdCBib290IHRpbWUgd2l0aCBuZl9jb25udHJhY2suYWNjdD0wLzEga2VybmVsCisJICBwYXJhbWF0ZXIgb3IgYnkgbG9hZGluZyB0aGUgbmZfY29ubnRyYWNrIG1vZHVsZSB3aXRoIGFjY3Q9MC8xLgorCisJICBZb3UgbWF5IGFsc28gZGlzYWJsZS9lbmFibGUgaXQgb24gYSBydW5uaW5nIHN5c3RlbSB3aXRoOgorCSAgIHN5c2N0bCBuZXQubmV0ZmlsdGVyLm5mX2Nvbm50cmFja19hY2N0PTAvMQorCisJICBUaGlzIG9wdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gMi42LjI5LgorCiAJICBJZiB1bnN1cmUsIHNheSBgTicuCiAKIGNvbmZpZyBORl9DT05OVFJBQ0tfTUFSSwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggNWM0YjE4My4uM2JkMmNjNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogbmV0ZmlsdGVyLW9ianMgOj0gY29yZS5vIG5mX2xvZy5vIG5mX3F1ZXVlLm8gbmZfc29ja29wdC5vCiAKLW5mX2Nvbm50cmFjay15CTo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIG5mX2Nvbm50cmFja19wcm90by5vIG5mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5vIG5mX2Nvbm50cmFja19wcm90b190Y3AubyBuZl9jb25udHJhY2tfcHJvdG9fdWRwLm8gbmZfY29ubnRyYWNrX2V4dGVuZC5vCituZl9jb25udHJhY2steQk6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBuZl9jb25udHJhY2tfcHJvdG8ubyBuZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIG5mX2Nvbm50cmFja19leHRlbmQubyBuZl9jb25udHJhY2tfYWNjdC5vCiBuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUykgKz0gbmZfY29ubnRyYWNrX2VjYWNoZS5vCiAKIG9iai0kKENPTkZJR19ORVRGSUxURVIpID0gbmV0ZmlsdGVyLm8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWJkOGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5jCkBAIC0wLDAgKzEsMTA0IEBACisvKiBBY2NvdXRpbmcgaGFuZGxpbmcgZm9yIG5ldGZpbHRlci4gKi8KKworLyoKKyAqIChDKSAyMDA4IEtyenlzenRvZiBQaW90ciBPbGVkemtpIDxvbGVAYW5zLnBsPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaD4KKworI2lmZGVmIENPTkZJR19ORl9DVF9BQ0NUCisjZGVmaW5lIE5GX0NUX0FDQ1RfREVGQVVMVCAxCisjZWxzZQorI2RlZmluZSBORl9DVF9BQ0NUX0RFRkFVTFQgMAorI2VuZGlmCisKK2ludCBuZl9jdF9hY2N0IF9fcmVhZF9tb3N0bHkgPSBORl9DVF9BQ0NUX0RFRkFVTFQ7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9hY2N0KTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGFjY3QsIG5mX2N0X2FjY3QsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhY2N0LCAiRW5hYmxlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZmxvdyBhY2NvdW50aW5nLiIpOworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICphY2N0X3N5c2N0bF9oZWFkZXI7CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBhY2N0X3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfYWNjdCIsCisJCS5kYXRhCQk9ICZuZl9jdF9hY2N0LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7fQorfTsKKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisKK3Vuc2lnbmVkIGludAorc2VxX3ByaW50X2FjY3Qoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGludCBkaXIpCit7CisJc3RydWN0IG5mX2Nvbm5fY291bnRlciAqYWNjdDsKKworCWFjY3QgPSBuZl9jb25uX2FjY3RfZmluZChjdCk7CisJaWYgKCFhY2N0KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzZXFfcHJpbnRmKHMsICJwYWNrZXRzPSVsbHUgYnl0ZXM9JWxsdSAiLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWFjY3RbZGlyXS5wYWNrZXRzLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWFjY3RbZGlyXS5ieXRlcyk7Cit9OworRVhQT1JUX1NZTUJPTF9HUEwoc2VxX3ByaW50X2FjY3QpOworCitzdGF0aWMgc3RydWN0IG5mX2N0X2V4dF90eXBlIGFjY3RfZXh0ZW5kIF9fcmVhZF9tb3N0bHkgPSB7CisJLmxlbgk9IHNpemVvZihzdHJ1Y3QgbmZfY29ubl9jb3VudGVyW0lQX0NUX0RJUl9NQVhdKSwKKwkuYWxpZ24JPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgbmZfY29ubl9jb3VudGVyW0lQX0NUX0RJUl9NQVhdKSwKKwkuaWQJPSBORl9DVF9FWFRfQUNDVCwKK307CisKK2ludCBuZl9jb25udHJhY2tfYWNjdF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworI2lmZGVmIENPTkZJR19ORl9DVF9BQ0NUCisJcHJpbnRrKEtFUk5fV0FSTklORyAiQ09ORklHX05GX0NUX0FDQ1QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb24uIFBsYXNlIHVzZVxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAibmZfY29ubnRyYWNrLmFjY3Q9MSBrZXJuZWwgcGFyYW1hdGVyLCBhY2N0PTEgbmZfY29ubnRyYWNrIG1vZHVsZSBvcHRpb24gb3JcbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2N0bCBuZXQubmV0ZmlsdGVyLm5mX2Nvbm50cmFja19hY2N0PTEgdG8gZW5hYmxlIGl0LlxuIik7CisjZW5kaWYKKworCXJldCA9IG5mX2N0X2V4dGVuZF9yZWdpc3RlcigmYWNjdF9leHRlbmQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibmZfY29ubnRyYWNrX2FjY3Q6IFVuYWJsZSB0byByZWdpc3RlciBleHRlbnNpb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworI2lmZGVmIENPTkZJR19TWVNDVEwKKwlhY2N0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMobmZfbmV0X25ldGZpbHRlcl9zeXNjdGxfcGF0aCwKKwkJCQlhY2N0X3N5c2N0bF90YWJsZSk7CisKKwlpZiAoIWFjY3Rfc3lzY3RsX2hlYWRlcikgeworCQluZl9jdF9leHRlbmRfdW5yZWdpc3RlcigmYWNjdF9leHRlbmQpOworCisJCXByaW50ayhLRVJOX0VSUiAibmZfY29ubnRyYWNrX2FjY3Q6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisjZW5kaWYKKworCXJldHVybiAwOworfQorCit2b2lkIG5mX2Nvbm50cmFja19hY2N0X2Zpbmkodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoYWNjdF9zeXNjdGxfaGVhZGVyKTsKKyNlbmRpZgorCW5mX2N0X2V4dGVuZF91bnJlZ2lzdGVyKCZhY2N0X2V4dGVuZCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggNjYyYzFjYy4uYzUxOWQwOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0Lmg+CiAKICNkZWZpbmUgTkZfQ09OTlRSQUNLX1ZFUlNJT04JIjAuNS4wIgogCkBAIC00NjQsNyArNDY1LDggQEAKIH0KIAogc3RydWN0IG5mX2Nvbm4gKm5mX2Nvbm50cmFja19hbGxvYyhjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnJlcGwpCisJCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcmVwbCwKKwkJCQkgICBnZnBfdCBnZnApCiB7CiAJc3RydWN0IG5mX2Nvbm4gKmN0ID0gTlVMTDsKIApAQCAtNDg5LDcgKzQ5MSw3IEBACiAJCX0KIAl9CiAKLQljdCA9IGttZW1fY2FjaGVfemFsbG9jKG5mX2Nvbm50cmFja19jYWNoZXAsIEdGUF9BVE9NSUMpOworCWN0ID0ga21lbV9jYWNoZV96YWxsb2MobmZfY29ubnRyYWNrX2NhY2hlcCwgZ2ZwKTsKIAlpZiAoY3QgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygibmZfY29ubnRyYWNrX2FsbG9jOiBDYW4ndCBhbGxvYyBjb25udHJhY2suXG4iKTsKIAkJYXRvbWljX2RlYygmbmZfY29ubnRyYWNrX2NvdW50KTsKQEAgLTU0Miw3ICs1NDQsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQljdCA9IG5mX2Nvbm50cmFja19hbGxvYyh0dXBsZSwgJnJlcGxfdHVwbGUpOworCWN0ID0gbmZfY29ubnRyYWNrX2FsbG9jKHR1cGxlLCAmcmVwbF90dXBsZSwgR0ZQX0FUT01JQyk7CiAJaWYgKGN0ID09IE5VTEwgfHwgSVNfRVJSKGN0KSkgewogCQlwcl9kZWJ1ZygiQ2FuJ3QgYWxsb2NhdGUgY29ubnRyYWNrLlxuIik7CiAJCXJldHVybiAoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICopY3Q7CkBAIC01NTQsNiArNTU2LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJbmZfY3RfYWNjdF9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTsKKwogCXNwaW5fbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCWV4cCA9IG5mX2N0X2ZpbmRfZXhwZWN0YXRpb24odHVwbGUpOwogCWlmIChleHApIHsKQEAgLTgyNywxNyArODMxLDE2IEBACiAJfQogCiBhY2N0OgotI2lmZGVmIENPTkZJR19ORl9DVF9BQ0NUCiAJaWYgKGRvX2FjY3QpIHsKLQkJY3QtPmNvdW50ZXJzW0NUSU5GTzJESVIoY3RpbmZvKV0ucGFja2V0cysrOwotCQljdC0+Y291bnRlcnNbQ1RJTkZPMkRJUihjdGluZm8pXS5ieXRlcyArPQotCQkJc2tiLT5sZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKKwkJc3RydWN0IG5mX2Nvbm5fY291bnRlciAqYWNjdDsKIAotCQlpZiAoKGN0LT5jb3VudGVyc1tDVElORk8yRElSKGN0aW5mbyldLnBhY2tldHMgJiAweDgwMDAwMDAwKQotCQkgICAgfHwgKGN0LT5jb3VudGVyc1tDVElORk8yRElSKGN0aW5mbyldLmJ5dGVzICYgMHg4MDAwMDAwMCkpCi0JCQlldmVudCB8PSBJUENUX0NPVU5URVJfRklMTElORzsKKwkJYWNjdCA9IG5mX2Nvbm5fYWNjdF9maW5kKGN0KTsKKwkJaWYgKGFjY3QpIHsKKwkJCWFjY3RbQ1RJTkZPMkRJUihjdGluZm8pXS5wYWNrZXRzKys7CisJCQlhY2N0W0NUSU5GTzJESVIoY3RpbmZvKV0uYnl0ZXMgKz0KKwkJCQlza2ItPmxlbiAtIHNrYl9uZXR3b3JrX29mZnNldChza2IpOworCQl9CiAJfQotI2VuZGlmCiAKIAlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCkBAIC04NDcsNiArODUwLDMyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX25mX2N0X3JlZnJlc2hfYWNjdCk7CiAKK2Jvb2wgX19uZl9jdF9raWxsX2FjY3Qoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgaW50IGRvX2FjY3QpCit7CisJaWYgKGRvX2FjY3QpIHsKKwkJc3RydWN0IG5mX2Nvbm5fY291bnRlciAqYWNjdDsKKworCQlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkJYWNjdCA9IG5mX2Nvbm5fYWNjdF9maW5kKGN0KTsKKwkJaWYgKGFjY3QpIHsKKwkJCWFjY3RbQ1RJTkZPMkRJUihjdGluZm8pXS5wYWNrZXRzKys7CisJCQlhY2N0W0NUSU5GTzJESVIoY3RpbmZvKV0uYnl0ZXMgKz0KKwkJCQlza2ItPmxlbiAtIHNrYl9uZXR3b3JrX29mZnNldChza2IpOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJfQorCisJaWYgKGRlbF90aW1lcigmY3QtPnRpbWVvdXQpKSB7CisJCWN0LT50aW1lb3V0LmZ1bmN0aW9uKCh1bnNpZ25lZCBsb25nKWN0KTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY3Rfa2lsbF9hY2N0KTsKKwogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oPgpAQCAtMTAwNiw2ICsxMDM1LDcgQEAKIAluZl9jb25udHJhY2tfcHJvdG9fZmluaSgpOwogCW5mX2Nvbm50cmFja19oZWxwZXJfZmluaSgpOwogCW5mX2Nvbm50cmFja19leHBlY3RfZmluaSgpOworCW5mX2Nvbm50cmFja19hY2N0X2ZpbmkoKTsKIH0KIAogc3RydWN0IGhsaXN0X2hlYWQgKm5mX2N0X2FsbG9jX2hhc2h0YWJsZSh1bnNpZ25lZCBpbnQgKnNpemVwLCBpbnQgKnZtYWxsb2NlZCkKQEAgLTExNDUsNiArMTE3NSwxMCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF9maW5pX2V4cGVjdDsKIAorCXJldCA9IG5mX2Nvbm50cmFja19hY2N0X2luaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZmluaV9oZWxwZXI7CisKIAkvKiBGb3IgdXNlIGJ5IFJFSkVDVCB0YXJnZXQgKi8KIAlyY3VfYXNzaWduX3BvaW50ZXIoaXBfY3RfYXR0YWNoLCBuZl9jb25udHJhY2tfYXR0YWNoKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZfY3RfZGVzdHJveSwgZGVzdHJveV9jb25udHJhY2spOwpAQCAtMTE1Nyw2ICsxMTkxLDggQEAKIAogCXJldHVybiByZXQ7CiAKK291dF9maW5pX2hlbHBlcjoKKwluZl9jb25udHJhY2tfaGVscGVyX2ZpbmkoKTsKIG91dF9maW5pX2V4cGVjdDoKIAluZl9jb25udHJhY2tfZXhwZWN0X2ZpbmkoKTsKIG91dF9maW5pX3Byb3RvOgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYwppbmRleCA4YTNmOGIzLi4zNDY5YmM3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYwpAQCAtOTUsMTMgKzk1LDExIEBACiAJbmV3bGVuID0gbmV3b2ZmICsgdC0+bGVuOwogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JaWYgKG5ld2xlbiA+PSBrc2l6ZShjdC0+ZXh0KSkgewotCQluZXcgPSBrbWFsbG9jKG5ld2xlbiwgZ2ZwKTsKLQkJaWYgKCFuZXcpCi0JCQlyZXR1cm4gTlVMTDsKKwluZXcgPSBrcmVhbGxvYyhjdC0+ZXh0LCBuZXdsZW4sIGdmcCk7CisJaWYgKCFuZXcpCisJCXJldHVybiBOVUxMOwogCi0JCW1lbWNweShuZXcsIGN0LT5leHQsIGN0LT5leHQtPmxlbik7Ci0KKwlpZiAobmV3ICE9IGN0LT5leHQpIHsKIAkJZm9yIChpID0gMDsgaSA8IE5GX0NUX0VYVF9OVU07IGkrKykgewogCQkJaWYgKCFuZl9jdF9leHRfZXhpc3QoY3QsIGkpKQogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDA3N2JjZDIuLjEwNWE2MTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTQsNyArNCw3IEBACiAgKiAoQykgMjAwMSBieSBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgogICogKEMpIDIwMDItMjAwNiBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgogICogKEMpIDIwMDMgYnkgUGF0cmljayBNY2hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Ci0gKiAoQykgMjAwNS0yMDA3IGJ5IFBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BuZXRmaWx0ZXIub3JnPgorICogKEMpIDIwMDUtMjAwOCBieSBQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0ZmlsdGVyLm9yZz4KICAqCiAgKiBJbml0aWFsIGNvbm5lY3Rpb24gdHJhY2tpbmcgdmlhIG5ldGxpbmsgZGV2ZWxvcG1lbnQgZnVuZGVkIGFuZAogICogZ2VuZXJhbGx5IG1hZGUgcG9zc2libGUgYnkgTmV0d29yayBSb2JvdHMsIEluYy4gKHd3dy5uZXR3b3Jrcm9ib3RzLmNvbSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5oPgogI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CkBAIC0yMDYsMjIgKzIwNywyNiBAQAogCXJldHVybiAtMTsKIH0KIAotI2lmZGVmIENPTkZJR19ORl9DVF9BQ0NUCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfZHVtcF9jb3VudGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKQogewogCWVudW0gY3RhdHRyX3R5cGUgdHlwZSA9IGRpciA/IENUQV9DT1VOVEVSU19SRVBMWTogQ1RBX0NPVU5URVJTX09SSUc7CiAJc3RydWN0IG5sYXR0ciAqbmVzdF9jb3VudDsKKwljb25zdCBzdHJ1Y3QgbmZfY29ubl9jb3VudGVyICphY2N0OworCisJYWNjdCA9IG5mX2Nvbm5fYWNjdF9maW5kKGN0KTsKKwlpZiAoIWFjY3QpCisJCXJldHVybiAwOwogCiAJbmVzdF9jb3VudCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgdHlwZSB8IE5MQV9GX05FU1RFRCk7CiAJaWYgKCFuZXN0X2NvdW50KQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCU5MQV9QVVRfQkUzMihza2IsIENUQV9DT1VOVEVSUzMyX1BBQ0tFVFMsCi0JCSAgICAgaHRvbmwoY3QtPmNvdW50ZXJzW2Rpcl0ucGFja2V0cykpOwotCU5MQV9QVVRfQkUzMihza2IsIENUQV9DT1VOVEVSUzMyX0JZVEVTLAotCQkgICAgIGh0b25sKGN0LT5jb3VudGVyc1tkaXJdLmJ5dGVzKSk7CisJTkxBX1BVVF9CRTY0KHNrYiwgQ1RBX0NPVU5URVJTX1BBQ0tFVFMsCisJCSAgICAgY3B1X3RvX2JlNjQoYWNjdFtkaXJdLnBhY2tldHMpKTsKKwlOTEFfUFVUX0JFNjQoc2tiLCBDVEFfQ09VTlRFUlNfQllURVMsCisJCSAgICAgY3B1X3RvX2JlNjQoYWNjdFtkaXJdLmJ5dGVzKSk7CiAKIAlubGFfbmVzdF9lbmQoc2tiLCBuZXN0X2NvdW50KTsKIApAQCAtMjMwLDkgKzIzNSw2IEBACiBubGFfcHV0X2ZhaWx1cmU6CiAJcmV0dXJuIC0xOwogfQotI2Vsc2UKLSNkZWZpbmUgY3RuZXRsaW5rX2R1bXBfY291bnRlcnMoYSwgYiwgYykgKDApCi0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSwogc3RhdGljIGlubGluZSBpbnQKQEAgLTQ3NiwxNCArNDc4LDE0IEBACiAJaWYgKGN0bmV0bGlua19kdW1wX2lkKHNrYiwgY3QpIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKKwlpZiAoY3RuZXRsaW5rX2R1bXBfc3RhdHVzKHNrYiwgY3QpIDwgMCkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKIAlpZiAoZXZlbnRzICYgSVBDVF9ERVNUUk9ZKSB7CiAJCWlmIChjdG5ldGxpbmtfZHVtcF9jb3VudGVycyhza2IsIGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpIDwgMCB8fAogCQkgICAgY3RuZXRsaW5rX2R1bXBfY291bnRlcnMoc2tiLCBjdCwgSVBfQ1RfRElSX1JFUExZKSA8IDApCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAl9IGVsc2UgewotCQlpZiAoY3RuZXRsaW5rX2R1bXBfc3RhdHVzKHNrYiwgY3QpIDwgMCkKLQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCiAJCWlmIChjdG5ldGxpbmtfZHVtcF90aW1lb3V0KHNrYiwgY3QpIDwgMCkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC01MDEsMTEgKzUwMyw2IEBACiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKICNlbmRpZgogCi0JCWlmIChldmVudHMgJiBJUENUX0NPVU5URVJfRklMTElORyAmJgotCQkgICAgKGN0bmV0bGlua19kdW1wX2NvdW50ZXJzKHNrYiwgY3QsIElQX0NUX0RJUl9PUklHSU5BTCkgPCAwIHx8Ci0JCSAgICAgY3RuZXRsaW5rX2R1bXBfY291bnRlcnMoc2tiLCBjdCwgSVBfQ1RfRElSX1JFUExZKSA8IDApKQotCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0KIAkJaWYgKGV2ZW50cyAmIElQQ1RfUkVMQVRFRCAmJgogCQkgICAgY3RuZXRsaW5rX2R1bXBfbWFzdGVyKHNrYiwgY3QpIDwgMCkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwpAQCAtNTc2LDExICs1NzMsMTUgQEAKIAkJCQljYi0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKWN0OwogCQkJCWdvdG8gb3V0OwogCQkJfQotI2lmZGVmIENPTkZJR19ORl9DVF9BQ0NUCisKIAkJCWlmIChORk5MX01TR19UWVBFKGNiLT5ubGgtPm5sbXNnX3R5cGUpID09Ci0JCQkJCQlJUENUTkxfTVNHX0NUX0dFVF9DVFJaRVJPKQotCQkJCW1lbXNldCgmY3QtPmNvdW50ZXJzLCAwLCBzaXplb2YoY3QtPmNvdW50ZXJzKSk7Ci0jZW5kaWYKKwkJCQkJCUlQQ1ROTF9NU0dfQ1RfR0VUX0NUUlpFUk8pIHsKKwkJCQlzdHJ1Y3QgbmZfY29ubl9jb3VudGVyICphY2N0OworCisJCQkJYWNjdCA9IG5mX2Nvbm5fYWNjdF9maW5kKGN0KTsKKwkJCQlpZiAoYWNjdCkKKwkJCQkJbWVtc2V0KGFjY3QsIDAsIHNpemVvZihzdHJ1Y3QgbmZfY29ubl9jb3VudGVyW0lQX0NUX0RJUl9NQVhdKSk7CisJCQl9CiAJCX0KIAkJaWYgKGNiLT5hcmdzWzFdKSB7CiAJCQljYi0+YXJnc1sxXSA9IDA7CkBAIC04MTMsOSArODE0LDggQEAKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJfQotCWlmIChkZWxfdGltZXIoJmN0LT50aW1lb3V0KSkKLQkJY3QtPnRpbWVvdXQuZnVuY3Rpb24oKHVuc2lnbmVkIGxvbmcpY3QpOwogCisJbmZfY3Rfa2lsbChjdCk7CiAJbmZfY3RfcHV0KGN0KTsKIAogCXJldHVybiAwOwpAQCAtODMzLDE0ICs4MzMsOSBAQAogCXVfaW50OF90IHUzID0gbmZtc2ctPm5mZ2VuX2ZhbWlseTsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgewotI2lmbmRlZiBDT05GSUdfTkZfQ1RfQUNDVAotCQlpZiAoTkZOTF9NU0dfVFlQRShubGgtPm5sbXNnX3R5cGUpID09IElQQ1ROTF9NU0dfQ1RfR0VUX0NUUlpFUk8pCi0JCQlyZXR1cm4gLUVOT1RTVVBQOwotI2VuZGlmCisJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKQogCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KGN0bmwsIHNrYiwgbmxoLCBjdG5ldGxpbmtfZHVtcF90YWJsZSwKIAkJCQkJICBjdG5ldGxpbmtfZG9uZSk7Ci0JfQogCiAJaWYgKGNkYVtDVEFfVFVQTEVfT1JJR10pCiAJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsICZ0dXBsZSwgQ1RBX1RVUExFX09SSUcsIHUzKTsKQEAgLTg5MiwyMCArODg3LDE5IEBACiAKIAlpZiAoZCAmIChJUFNfRVhQRUNURUR8SVBTX0NPTkZJUk1FRHxJUFNfRFlJTkcpKQogCQkvKiB1bmNoYW5nZWFibGUgKi8KLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoZCAmIElQU19TRUVOX1JFUExZICYmICEoc3RhdHVzICYgSVBTX1NFRU5fUkVQTFkpKQogCQkvKiBTRUVOX1JFUExZIGJpdCBjYW4gb25seSBiZSBzZXQgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0KKwkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChkICYgSVBTX0FTU1VSRUQgJiYgIShzdGF0dXMgJiBJUFNfQVNTVVJFRCkpCiAJCS8qIEFTU1VSRUQgYml0IGNhbiBvbmx5IGJlIHNldCAqLwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0pIHsKICNpZm5kZWYgQ09ORklHX05GX05BVF9ORUVERUQKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKICNlbHNlCiAJCXN0cnVjdCBuZl9uYXRfcmFuZ2UgcmFuZ2U7CiAKQEAgLTk0Niw3ICs5NDAsNyBAQAogCiAJLyogZG9uJ3QgY2hhbmdlIGhlbHBlciBvZiBzaWJsaW5nIGNvbm5lY3Rpb25zICovCiAJaWYgKGN0LT5tYXN0ZXIpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVCVVNZOwogCiAJZXJyID0gY3RuZXRsaW5rX3BhcnNlX2hlbHAoY2RhW0NUQV9IRUxQXSwgJmhlbHBuYW1lKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTk2NCw3ICs5NTgsNyBAQAogCiAJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGhlbHBuYW1lKTsKIAlpZiAoaGVscGVyID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoaGVscCkgewogCQlpZiAoaGVscC0+aGVscGVyID09IGhlbHBlcikKQEAgLTExMzEsNyArMTEyNSw3IEBACiAJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOwogCi0JY3QgPSBuZl9jb25udHJhY2tfYWxsb2Mob3R1cGxlLCBydHVwbGUpOworCWN0ID0gbmZfY29ubnRyYWNrX2FsbG9jKG90dXBsZSwgcnR1cGxlLCBHRlBfS0VSTkVMKTsKIAlpZiAoY3QgPT0gTlVMTCB8fCBJU19FUlIoY3QpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTE1NCw2ICsxMTQ4LDggQEAKIAkJCWdvdG8gZXJyOwogCX0KIAorCW5mX2N0X2FjY3RfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7CisKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykKIAlpZiAoY2RhW0NUQV9NQVJLXSkKIAkJY3QtPm1hcmsgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9NQVJLXSkpOwpAQCAtMTI1OSwxMiArMTI1NSwxMiBAQAogCWlmICghKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9FWENMKSkgewogCQkvKiB3ZSBvbmx5IGFsbG93IG5hdCBjb25maWcgZm9yIG5ldyBjb25udHJhY2tzICovCiAJCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0pIHsKLQkJCWVyciA9IC1FSU5WQUw7CisJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCQkvKiBjYW4ndCBsaW5rIGFuIGV4aXN0aW5nIGNvbm50cmFjayB0byBhIG1hc3RlciAqLwogCQlpZiAoY2RhW0NUQV9UVVBMRV9NQVNURVJdKSB7Ci0JCQllcnIgPSAtRUlOVkFMOworCQkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2sobmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKSwKQEAgLTE2MDksNyArMTYwNSw3IEBACiAJCWggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUobmFtZSk7CiAJCWlmICghaCkgewogCQkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBuZl9jdF9leHBlY3RfaHNpemU7IGkrKykgewogCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShleHAsIG4sIG5leHQsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggYWZiNGExOC4uZTc4NjZkZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYwpAQCAtNDc1LDggKzQ3NSw3IEBACiAJaWYgKHR5cGUgPT0gRENDUF9QS1RfUkVTRVQgJiYKIAkgICAgIXRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKSB7CiAJCS8qIFRlYXIgZG93biBjb25uZWN0aW9uIGltbWVkaWF0ZWx5IGlmIG9ubHkgcmVwbHkgaXMgYSBSRVNFVCAqLwotCQlpZiAoZGVsX3RpbWVyKCZjdC0+dGltZW91dCkpCi0JCQljdC0+dGltZW91dC5mdW5jdGlvbigodW5zaWduZWQgbG9uZyljdCk7CisJCW5mX2N0X2tpbGxfYWNjdChjdCwgY3RpbmZvLCBza2IpOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCmluZGV4IGNiZjJlMjcuLjMwYWE1YjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKQEAgLTQ2Myw2ICs0NjMsODIgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmg+CisKK3N0YXRpYyBpbnQgc2N0cF90b19ubGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sYXR0ciAqbmxhLAorCQkJICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJc3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtczsKKworCXJlYWRfbG9ja19iaCgmc2N0cF9sb2NrKTsKKwluZXN0X3Bhcm1zID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBDVEFfUFJPVE9JTkZPX1NDVFAgfCBOTEFfRl9ORVNURUQpOworCWlmICghbmVzdF9wYXJtcykKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlOTEFfUFVUX1U4KHNrYiwgQ1RBX1BST1RPSU5GT19TQ1RQX1NUQVRFLCBjdC0+cHJvdG8uc2N0cC5zdGF0ZSk7CisKKwlOTEFfUFVUX0JFMzIoc2tiLAorCQkgICAgIENUQV9QUk9UT0lORk9fU0NUUF9WVEFHX09SSUdJTkFMLAorCQkgICAgIGN0LT5wcm90by5zY3RwLnZ0YWdbSVBfQ1RfRElSX09SSUdJTkFMXSk7CisKKwlOTEFfUFVUX0JFMzIoc2tiLAorCQkgICAgIENUQV9QUk9UT0lORk9fU0NUUF9WVEFHX1JFUExZLAorCQkgICAgIGN0LT5wcm90by5zY3RwLnZ0YWdbSVBfQ1RfRElSX1JFUExZXSk7CisKKwlyZWFkX3VubG9ja19iaCgmc2N0cF9sb2NrKTsKKworCW5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpOworCisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlyZWFkX3VubG9ja19iaCgmc2N0cF9sb2NrKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzY3RwX25sYV9wb2xpY3lbQ1RBX1BST1RPSU5GT19TQ1RQX01BWCsxXSA9IHsKKwlbQ1RBX1BST1RPSU5GT19TQ1RQX1NUQVRFXQkgICAgPSB7IC50eXBlID0gTkxBX1U4IH0sCisJW0NUQV9QUk9UT0lORk9fU0NUUF9WVEFHX09SSUdJTkFMXSAgPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtDVEFfUFJPVE9JTkZPX1NDVFBfVlRBR19SRVBMWV0gICAgID0geyAudHlwZSA9IE5MQV9VMzIgfSwKK307CisKK3N0YXRpYyBpbnQgbmxhdHRyX3RvX3NjdHAoc3RydWN0IG5sYXR0ciAqY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlzdHJ1Y3QgbmxhdHRyICphdHRyID0gY2RhW0NUQV9QUk9UT0lORk9fU0NUUF07CisJc3RydWN0IG5sYXR0ciAqdGJbQ1RBX1BST1RPSU5GT19TQ1RQX01BWCsxXTsKKwlpbnQgZXJyOworCisJLyogdXBkYXRlcyBtYXkgbm90IGNvbnRhaW4gdGhlIGludGVybmFsIHByb3RvY29sIGluZm8sIHNraXAgcGFyc2luZyAqLworCWlmICghYXR0cikKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLAorCQkJICAgICAgIENUQV9QUk9UT0lORk9fU0NUUF9NQVgsCisJCQkgICAgICAgYXR0ciwKKwkJCSAgICAgICBzY3RwX25sYV9wb2xpY3kpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCF0YltDVEFfUFJPVE9JTkZPX1NDVFBfU1RBVEVdIHx8CisJICAgICF0YltDVEFfUFJPVE9JTkZPX1NDVFBfVlRBR19PUklHSU5BTF0gfHwKKwkgICAgIXRiW0NUQV9QUk9UT0lORk9fU0NUUF9WVEFHX1JFUExZXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZV9sb2NrX2JoKCZzY3RwX2xvY2spOworCWN0LT5wcm90by5zY3RwLnN0YXRlID0gbmxhX2dldF91OCh0YltDVEFfUFJPVE9JTkZPX1NDVFBfU1RBVEVdKTsKKwljdC0+cHJvdG8uc2N0cC52dGFnW0lQX0NUX0RJUl9PUklHSU5BTF0gPQorCQlubGFfZ2V0X2JlMzIodGJbQ1RBX1BST1RPSU5GT19TQ1RQX1ZUQUdfT1JJR0lOQUxdKTsKKwljdC0+cHJvdG8uc2N0cC52dGFnW0lQX0NUX0RJUl9SRVBMWV0gPQorCQlubGFfZ2V0X2JlMzIodGJbQ1RBX1BST1RPSU5GT19TQ1RQX1ZUQUdfUkVQTFldKTsKKwl3cml0ZV91bmxvY2tfYmgoJnNjdHBfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogc3RhdGljIHVuc2lnbmVkIGludCBzY3RwX3N5c2N0bF90YWJsZV91c2VyczsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc2N0cF9zeXNjdGxfaGVhZGVyOwpAQCAtNTkxLDYgKzY2Nyw4IEBACiAJLm5ldyAJCQk9IHNjdHBfbmV3LAogCS5tZSAJCQk9IFRISVNfTU9EVUxFLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQorCS50b19ubGF0dHIJCT0gc2N0cF90b19ubGF0dHIsCisJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b19zY3RwLAogCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LApAQCAtNjE3LDYgKzY5NSw4IEBACiAJLm5ldyAJCQk9IHNjdHBfbmV3LAogCS5tZSAJCQk9IFRISVNfTU9EVUxFLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQorCS50b19ubGF0dHIJCT0gc2N0cF90b19ubGF0dHIsCisJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b19zY3RwLAogCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCBkZDI4ZmIyLi40MjBhMTBkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtODQ0LDE0ICs4NDQsMTMgQEAKIAkJCS8qIEF0dGVtcHQgdG8gcmVvcGVuIGEgY2xvc2VkL2Fib3J0ZWQgY29ubmVjdGlvbi4KIAkJCSAqIERlbGV0ZSB0aGlzIGNvbm5lY3Rpb24gYW5kIGxvb2sgdXAgYWdhaW4uICovCiAJCQl3cml0ZV91bmxvY2tfYmgoJnRjcF9sb2NrKTsKKwogCQkJLyogT25seSByZXBlYXQgaWYgd2UgY2FuIGFjdHVhbGx5IHJlbW92ZSB0aGUgdGltZXIuCiAJCQkgKiBEZXN0cnVjdGlvbiBtYXkgYWxyZWFkeSBiZSBpbiBwcm9ncmVzcyBpbiBwcm9jZXNzCiAJCQkgKiBjb250ZXh0IGFuZCB3ZSBtdXN0IGdpdmUgaXQgYSBjaGFuY2UgdG8gdGVybWluYXRlLgogCQkJICovCi0JCQlpZiAoZGVsX3RpbWVyKCZjdC0+dGltZW91dCkpIHsKLQkJCQljdC0+dGltZW91dC5mdW5jdGlvbigodW5zaWduZWQgbG9uZyljdCk7CisJCQlpZiAobmZfY3Rfa2lsbChjdCkpCiAJCQkJcmV0dXJuIC1ORl9SRVBFQVQ7Ci0JCQl9CiAJCQlyZXR1cm4gLU5GX0RST1A7CiAJCX0KIAkJLyogRmFsbCB0aHJvdWdoICovCkBAIC04ODQsOCArODgzLDcgQEAKIAkJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1RDUCkpCiAJCQkJbmZfbG9nX3BhY2tldChwZiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgICJuZl9jdF90Y3A6IGtpbGxpbmcgb3V0IG9mIHN5bmMgc2Vzc2lvbiAiKTsKLQkJCWlmIChkZWxfdGltZXIoJmN0LT50aW1lb3V0KSkKLQkJCQljdC0+dGltZW91dC5mdW5jdGlvbigodW5zaWduZWQgbG9uZyljdCk7CisJCQluZl9jdF9raWxsKGN0KTsKIAkJCXJldHVybiAtTkZfRFJPUDsKIAkJfQogCQljdC0+cHJvdG8udGNwLmxhc3RfaW5kZXggPSBpbmRleDsKQEAgLTk2OCw4ICs5NjYsNyBAQAogCQkgICBwcm9ibGVtIGNhc2UsIHNvIHdlIGNhbiBkZWxldGUgdGhlIGNvbm50cmFjawogCQkgICBpbW1lZGlhdGVseS4gIC0tUlIgKi8KIAkJaWYgKHRoLT5yc3QpIHsKLQkJCWlmIChkZWxfdGltZXIoJmN0LT50aW1lb3V0KSkKLQkJCQljdC0+dGltZW91dC5mdW5jdGlvbigodW5zaWduZWQgbG9uZyljdCk7CisJCQluZl9jdF9raWxsX2FjY3QoY3QsIGN0aW5mbywgc2tiKTsKIAkJCXJldHVybiBORl9BQ0NFUFQ7CiAJCX0KIAl9IGVsc2UgaWYgKCF0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjdC0+c3RhdHVzKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IDQ2ZWE1NDIuLjg2OWVmOTMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5oPgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTM4LDE5ICszOSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwcmludF90dXBsZSk7CiAKLSNpZmRlZiBDT05GSUdfTkZfQ1RfQUNDVAotc3RhdGljIHVuc2lnbmVkIGludAotc2VxX3ByaW50X2NvdW50ZXJzKHN0cnVjdCBzZXFfZmlsZSAqcywKLQkJICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja19jb3VudGVyICpjb3VudGVyKQotewotCXJldHVybiBzZXFfcHJpbnRmKHMsICJwYWNrZXRzPSVsbHUgYnl0ZXM9JWxsdSAiLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWNvdW50ZXItPnBhY2tldHMsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpY291bnRlci0+Ynl0ZXMpOwotfQotI2Vsc2UKLSNkZWZpbmUgc2VxX3ByaW50X2NvdW50ZXJzKHgsIHkpCTAKLSNlbmRpZgotCiBzdHJ1Y3QgY3RfaXRlcl9zdGF0ZSB7CiAJdW5zaWduZWQgaW50IGJ1Y2tldDsKIH07CkBAIC0xNDYsNyArMTM0LDcgQEAKIAkJCWwzcHJvdG8sIGw0cHJvdG8pKQogCQlyZXR1cm4gLUVOT1NQQzsKIAotCWlmIChzZXFfcHJpbnRfY291bnRlcnMocywgJmN0LT5jb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdKSkKKwlpZiAoc2VxX3ByaW50X2FjY3QocywgY3QsIElQX0NUX0RJUl9PUklHSU5BTCkpCiAJCXJldHVybiAtRU5PU1BDOwogCiAJaWYgKCEodGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmY3QtPnN0YXR1cykpKQpAQCAtMTU3LDcgKzE0NSw3IEBACiAJCQlsM3Byb3RvLCBsNHByb3RvKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKLQlpZiAoc2VxX3ByaW50X2NvdW50ZXJzKHMsICZjdC0+Y291bnRlcnNbSVBfQ1RfRElSX1JFUExZXSkpCisJaWYgKHNlcV9wcmludF9hY2N0KHMsIGN0LCBJUF9DVF9ESVJfUkVQTFkpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCWlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjdC0+c3RhdHVzKSkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfc29ja29wdC5jIGIvbmV0L25ldGZpbHRlci9uZl9zb2Nrb3B0LmMKaW5kZXggNjlkNjk5ZjkuLjAxNDg5NjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfc29ja29wdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfc29ja29wdC5jCkBAIC02NSw3ICs2NSw3IEBACiB7CiAJc3RydWN0IG5mX3NvY2tvcHRfb3BzICpvcHM7CiAKLQlpZiAoc29ja19uZXQoc2spICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShzb2NrX25ldChzayksICZpbml0X25ldCkpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9QUk9UT09QVCk7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZuZl9zb2Nrb3B0X211dGV4KSAhPSAwKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCBiODE3M2FmLi45YTM1YjU3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtNDUzLDYgKzQ1MywxNCBAQAogCQl9CiAJfQogCisJaWYgKGluZGV2ICYmIHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSkgeworCQlOTEFfUFVUX0JFMTYoaW5zdC0+c2tiLCBORlVMQV9IV1RZUEUsIGh0b25zKHNrYi0+ZGV2LT50eXBlKSk7CisJCU5MQV9QVVRfQkUxNihpbnN0LT5za2IsIE5GVUxBX0hXTEVOLAorCQkJICAgICBodG9ucyhza2ItPmRldi0+aGFyZF9oZWFkZXJfbGVuKSk7CisJCU5MQV9QVVQoaW5zdC0+c2tiLCBORlVMQV9IV0hFQURFUiwgc2tiLT5kZXYtPmhhcmRfaGVhZGVyX2xlbiwKKwkJCXNrYl9tYWNfaGVhZGVyKHNrYikpOworCX0KKwogCWlmIChza2ItPnRzdGFtcC50djY0KSB7CiAJCXN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgdHM7CiAJCXN0cnVjdCB0aW1ldmFsIHR2ID0ga3RpbWVfdG9fdGltZXZhbChza2ItPnRzdGFtcCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwppbmRleCAzNDQ3MDI1Li44Yzg2MDExIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKQEAgLTI0Myw3ICsyNDMsNiBAQAogCXN3aXRjaCAoKGVudW0gbmZxbmxfY29uZmlnX21vZGUpcXVldWUtPmNvcHlfbW9kZSkgewogCWNhc2UgTkZRTkxfQ09QWV9NRVRBOgogCWNhc2UgTkZRTkxfQ09QWV9OT05FOgotCQlkYXRhX2xlbiA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBORlFOTF9DT1BZX1BBQ0tFVDoKQEAgLTU1Niw3ICs1NTUsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCS8qIERyb3AgYW55IHBhY2tldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3duZWQgZGV2aWNlICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMKaW5kZXggMjExMTg5ZS4uNzZjYTFmMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYwpAQCAtOCw3ICs4LDcgQEAKICAqICAgQ29weXJpZ2h0IChDKSAyMDAyLDIwMDQgTUFSQSBTeXN0ZW1zIEFCIDxodHRwOi8vd3d3Lm1hcmFzeXN0ZW1zLmNvbT4KICAqICAgIGJ5IEhlbnJpayBOb3Jkc3Ryb20gPGhub0BtYXJhc3lzdGVtcy5jb20+CiAgKgotICogKEMpIDIwMDYgUmVkIEhhdCwgSW5jLiwgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CisgKiAoQykgMjAwNiwyMDA4IFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtOTQsNiArOTQsMTIgQEAKIHsKIAljb25zdCBzdHJ1Y3QgeHRfY29ubnNlY21hcmtfdGFyZ2V0X2luZm8gKmluZm8gPSB0YXJnaW5mbzsKIAorCWlmIChzdHJjbXAodGFibGVuYW1lLCAibWFuZ2xlIikgJiYgc3RyY21wKHRhYmxlbmFtZSwgInNlY3VyaXR5IikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInRhcmdldCBvbmx5IHZhbGlkIGluIHRoZSBcJ21hbmdsZVwnICIKKwkJICAgICAgICJvciBcJ3NlY3VyaXR5XCcgdGFibGVzLCBub3QgXCclc1wnLlxuIiwgdGFibGVuYW1lKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCXN3aXRjaCAoaW5mby0+bW9kZSkgewogCWNhc2UgQ09OTlNFQ01BUktfU0FWRToKIAljYXNlIENPTk5TRUNNQVJLX1JFU1RPUkU6CkBAIC0xMjYsNyArMTMyLDYgQEAKIAkJLmRlc3Ryb3kJPSBjb25uc2VjbWFya190Z19kZXN0cm95LAogCQkudGFyZ2V0CQk9IGNvbm5zZWNtYXJrX3RnLAogCQkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfY29ubnNlY21hcmtfdGFyZ2V0X2luZm8pLAotCQkudGFibGUJCT0gIm1hbmdsZSIsCiAJCS5tZQkJPSBUSElTX01PRFVMRSwKIAl9LAogCXsKQEAgLTEzNiw3ICsxNDEsNiBAQAogCQkuZGVzdHJveQk9IGNvbm5zZWNtYXJrX3RnX2Rlc3Ryb3ksCiAJCS50YXJnZXQJCT0gY29ubnNlY21hcmtfdGcsCiAJCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyksCi0JCS50YWJsZQkJPSAibWFuZ2xlIiwKIAkJLm1lCQk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYwppbmRleCBjMDI4NDg1Li45NGY4N2VlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEJhc2VkIG9uIHRoZSBuZm1hcmsgbWF0Y2ggYnk6CiAgKiAoQykgMTk5OS0yMDAxIE1hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPgogICoKLSAqIChDKSAyMDA2IFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICogKEMpIDIwMDYsMjAwOCBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTg5LDYgKzg5LDEyIEBACiB7CiAJc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X2luZm8gKmluZm8gPSB0YXJnaW5mbzsKIAorCWlmIChzdHJjbXAodGFibGVuYW1lLCAibWFuZ2xlIikgJiYgc3RyY21wKHRhYmxlbmFtZSwgInNlY3VyaXR5IikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInRhcmdldCBvbmx5IHZhbGlkIGluIHRoZSBcJ21hbmdsZVwnICIKKwkJICAgICAgICJvciBcJ3NlY3VyaXR5XCcgdGFibGVzLCBub3QgXCclc1wnLlxuIiwgdGFibGVuYW1lKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCWlmIChtb2RlICYmIG1vZGUgIT0gaW5mby0+bW9kZSkgewogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAibW9kZSBhbHJlYWR5IHNldCB0byAlaHUgY2Fubm90IG1peCB3aXRoICIKIAkJICAgICAgICJydWxlcyBmb3IgbW9kZSAlaHVcbiIsIG1vZGUsIGluZm8tPm1vZGUpOwpAQCAtMTI3LDcgKzEzMyw2IEBACiAJCS5kZXN0cm95CT0gc2VjbWFya190Z19kZXN0cm95LAogCQkudGFyZ2V0CQk9IHNlY21hcmtfdGcsCiAJCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvKSwKLQkJLnRhYmxlCQk9ICJtYW5nbGUiLAogCQkubWUJCT0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMzcsNyArMTQyLDYgQEAKIAkJLmRlc3Ryb3kJPSBzZWNtYXJrX3RnX2Rlc3Ryb3ksCiAJCS50YXJnZXQJCT0gc2VjbWFya190ZywKIAkJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X2luZm8pLAotCQkudGFibGUJCT0gIm1hbmdsZSIsCiAJCS5tZQkJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jCmluZGV4IDIxN2UyYjYuLmJlYjUwOTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYwpAQCAtMTQ3LDE3ICsxNDcsMjEgQEAKIAlyZXR1cm4gVENQT0xFTl9NU1M7CiB9CiAKLXN0YXRpYyB1X2ludDMyX3QgdGNwbXNzX3JldmVyc2VfbXR1NChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCkKK3N0YXRpYyB1X2ludDMyX3QgdGNwbXNzX3JldmVyc2VfbXR1KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHVuc2lnbmVkIGludCBmYW1pbHkpCiB7Ci0Jc3RydWN0IGZsb3dpIGZsID0gewotCQkuZmw0X2RzdCA9IGlwaC0+c2FkZHIsCi0JfTsKKwlzdHJ1Y3QgZmxvd2kgZmwgPSB7fTsKIAljb25zdCBzdHJ1Y3QgbmZfYWZpbmZvICphaTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IE5VTEw7CiAJdV9pbnQzMl90IG10dSAgICAgPSB+MFU7CiAKKwlpZiAoZmFtaWx5ID09IFBGX0lORVQpCisJCWZsLmZsNF9kc3QgPSBpcF9oZHIoc2tiKS0+c2FkZHI7CisJZWxzZQorCQlmbC5mbDZfZHN0ID0gaXB2Nl9oZHIoc2tiKS0+c2FkZHI7CisKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JYWkgPSBuZl9nZXRfYWZpbmZvKEFGX0lORVQpOworCWFpID0gbmZfZ2V0X2FmaW5mbyhmYW1pbHkpOwogCWlmIChhaSAhPSBOVUxMKQogCQlhaS0+cm91dGUoKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0LCAmZmwpOwogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMTc4LDcgKzE4Miw4IEBACiAJX19iZTE2IG5ld2xlbjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gdGNwbXNzX21hbmdsZV9wYWNrZXQoc2tiLCB0YXJnaW5mbywgdGNwbXNzX3JldmVyc2VfbXR1NChpcGgpLAorCXJldCA9IHRjcG1zc19tYW5nbGVfcGFja2V0KHNrYiwgdGFyZ2luZm8sCisJCQkJICAgdGNwbXNzX3JldmVyc2VfbXR1KHNrYiwgUEZfSU5FVCksCiAJCQkJICAgaXBoLT5paGwgKiA0LAogCQkJCSAgIHNpemVvZigqaXBoKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSk7CiAJaWYgKHJldCA8IDApCkBAIC0xOTMsMjggKzE5OCw2IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVMpIHx8IGRlZmluZWQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19NT0RVTEUpCi1zdGF0aWMgdV9pbnQzMl90IHRjcG1zc19yZXZlcnNlX210dTYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCkKLXsKLQlzdHJ1Y3QgZmxvd2kgZmwgPSB7Ci0JCS5mbDZfZHN0ID0gaXBoLT5zYWRkciwKLQl9OwotCWNvbnN0IHN0cnVjdCBuZl9hZmluZm8gKmFpOwotCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsKLQl1X2ludDMyX3QgbXR1ICAgICA9IH4wVTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlhaSA9IG5mX2dldF9hZmluZm8oQUZfSU5FVDYpOwotCWlmIChhaSAhPSBOVUxMKQotCQlhaS0+cm91dGUoKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0LCAmZmwpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JaWYgKHJ0ICE9IE5VTEwpIHsKLQkJbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KTsKLQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7Ci0JfQotCXJldHVybiBtdHU7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQKIHRjcG1zc190ZzYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LCB1bnNpZ25lZCBpbnQgaG9va251bSwKQEAgLTIyOSw3ICsyMTIsOCBAQAogCXRjcGhvZmYgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgc2l6ZW9mKCppcHY2aCksICZuZXh0aGRyKTsKIAlpZiAodGNwaG9mZiA8IDApCiAJCXJldHVybiBORl9EUk9QOwotCXJldCA9IHRjcG1zc19tYW5nbGVfcGFja2V0KHNrYiwgdGFyZ2luZm8sIHRjcG1zc19yZXZlcnNlX210dTYoaXB2NmgpLAorCXJldCA9IHRjcG1zc19tYW5nbGVfcGFja2V0KHNrYiwgdGFyZ2luZm8sCisJCQkJICAgdGNwbXNzX3JldmVyc2VfbXR1KHNrYiwgUEZfSU5FVDYpLAogCQkJCSAgIHRjcGhvZmYsCiAJCQkJICAgc2l6ZW9mKCppcHY2aCkgKyBzaXplb2Yoc3RydWN0IHRjcGhkcikpOwogCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25uYnl0ZXMuYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmMKaW5kZXggZDdlODk4My4uM2UzOWM0ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25uYnl0ZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaD4KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CkBAIC0yNywxMiArMjgsMTUgQEAKIAl1X2ludDY0X3Qgd2hhdCA9IDA7CS8qIGluaXRpYWxpemUgdG8gbWFrZSBnY2MgaGFwcHkgKi8KIAl1X2ludDY0X3QgYnl0ZXMgPSAwOwogCXVfaW50NjRfdCBwa3RzID0gMDsKLQljb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX2NvdW50ZXIgKmNvdW50ZXJzOworCWNvbnN0IHN0cnVjdCBuZl9jb25uX2NvdW50ZXIgKmNvdW50ZXJzOwogCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAlpZiAoIWN0KQogCQlyZXR1cm4gZmFsc2U7Ci0JY291bnRlcnMgPSBjdC0+Y291bnRlcnM7CisKKwljb3VudGVycyA9IG5mX2Nvbm5fYWNjdF9maW5kKGN0KTsKKwlpZiAoIWNvdW50ZXJzKQorCQlyZXR1cm4gZmFsc2U7CiAKIAlzd2l0Y2ggKHNpbmZvLT53aGF0KSB7CiAJY2FzZSBYVF9DT05OQllURVNfUEtUUzoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jCmluZGV4IDcyZjY5NGQuLjQ5MDMxODIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYwpAQCAtMjksMTIgKzI5LDE2IEBACiB7CiAJY29uc3Qgc3RydWN0IHh0X3N0cmluZ19pbmZvICpjb25mID0gbWF0Y2hpbmZvOwogCXN0cnVjdCB0c19zdGF0ZSBzdGF0ZTsKKwlpbnQgaW52ZXJ0OwogCiAJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCB0c19zdGF0ZSkpOwogCisJaW52ZXJ0ID0gKG1hdGNoLT5yZXZpc2lvbiA9PSAwID8gY29uZi0+dS52MC5pbnZlcnQgOgorCQkJCSAgICBjb25mLT51LnYxLmZsYWdzICYgWFRfU1RSSU5HX0ZMQUdfSU5WRVJUKTsKKwogCXJldHVybiAoc2tiX2ZpbmRfdGV4dCgoc3RydWN0IHNrX2J1ZmYgKilza2IsIGNvbmYtPmZyb21fb2Zmc2V0LAogCQkJICAgICBjb25mLT50b19vZmZzZXQsIGNvbmYtPmNvbmZpZywgJnN0YXRlKQotCQkJICAgICAhPSBVSU5UX01BWCkgXiBjb25mLT5pbnZlcnQ7CisJCQkgICAgICE9IFVJTlRfTUFYKSBeIGludmVydDsKIH0KIAogI2RlZmluZSBTVFJJTkdfVEVYVF9QUklWKG0pICgoc3RydWN0IHh0X3N0cmluZ19pbmZvICopKG0pKQpAQCAtNDYsNiArNTAsNyBAQAogewogCXN0cnVjdCB4dF9zdHJpbmdfaW5mbyAqY29uZiA9IG1hdGNoaW5mbzsKIAlzdHJ1Y3QgdHNfY29uZmlnICp0c19jb25mOworCWludCBmbGFncyA9IFRTX0FVVE9MT0FEOwogCiAJLyogRGFtbiwgY2FuJ3QgaGFuZGxlIHRoaXMgY2FzZSBwcm9wZXJseSB3aXRoIGlwdGFibGVzLi4uICovCiAJaWYgKGNvbmYtPmZyb21fb2Zmc2V0ID4gY29uZi0+dG9fb2Zmc2V0KQpAQCAtNTQsOCArNTksMTUgQEAKIAkJcmV0dXJuIGZhbHNlOwogCWlmIChjb25mLT5wYXRsZW4gPiBYVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRSkKIAkJcmV0dXJuIGZhbHNlOworCWlmIChtYXRjaC0+cmV2aXNpb24gPT0gMSkgeworCQlpZiAoY29uZi0+dS52MS5mbGFncyAmCisJCSAgICB+KFhUX1NUUklOR19GTEFHX0lHTk9SRUNBU0UgfCBYVF9TVFJJTkdfRkxBR19JTlZFUlQpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoY29uZi0+dS52MS5mbGFncyAmIFhUX1NUUklOR19GTEFHX0lHTk9SRUNBU0UpCisJCQlmbGFncyB8PSBUU19JR05PUkVDQVNFOworCX0KIAl0c19jb25mID0gdGV4dHNlYXJjaF9wcmVwYXJlKGNvbmYtPmFsZ28sIGNvbmYtPnBhdHRlcm4sIGNvbmYtPnBhdGxlbiwKLQkJCQkgICAgIEdGUF9LRVJORUwsIFRTX0FVVE9MT0FEKTsKKwkJCQkgICAgIEdGUF9LRVJORUwsIGZsYWdzKTsKIAlpZiAoSVNfRVJSKHRzX2NvbmYpKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTcyLDYgKzg0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggc3RyaW5nX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkubmFtZSAJCT0gInN0cmluZyIsCisJCS5yZXZpc2lvbgk9IDAsCiAJCS5mYW1pbHkJCT0gQUZfSU5FVCwKIAkJLmNoZWNrZW50cnkJPSBzdHJpbmdfbXRfY2hlY2ssCiAJCS5tYXRjaCAJCT0gc3RyaW5nX210LApAQCAtODEsNiArOTQsMjcgQEAKIAl9LAogCXsKIAkJLm5hbWUgCQk9ICJzdHJpbmciLAorCQkucmV2aXNpb24JPSAxLAorCQkuZmFtaWx5CQk9IEFGX0lORVQsCisJCS5jaGVja2VudHJ5CT0gc3RyaW5nX210X2NoZWNrLAorCQkubWF0Y2ggCQk9IHN0cmluZ19tdCwKKwkJLmRlc3Ryb3kgCT0gc3RyaW5nX210X2Rlc3Ryb3ksCisJCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3N0cmluZ19pbmZvKSwKKwkJLm1lIAkJPSBUSElTX01PRFVMRQorCX0sCisJeworCQkubmFtZSAJCT0gInN0cmluZyIsCisJCS5yZXZpc2lvbgk9IDAsCisJCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJCS5jaGVja2VudHJ5CT0gc3RyaW5nX210X2NoZWNrLAorCQkubWF0Y2ggCQk9IHN0cmluZ19tdCwKKwkJLmRlc3Ryb3kgCT0gc3RyaW5nX210X2Rlc3Ryb3ksCisJCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3N0cmluZ19pbmZvKSwKKwkJLm1lIAkJPSBUSElTX01PRFVMRQorCX0sCisJeworCQkubmFtZSAJCT0gInN0cmluZyIsCisJCS5yZXZpc2lvbgk9IDEsCiAJCS5mYW1pbHkJCT0gQUZfSU5FVDYsCiAJCS5jaGVja2VudHJ5CT0gc3RyaW5nX210X2NoZWNrLAogCQkubWF0Y2ggCQk9IHN0cmluZ19tdCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfdGltZS5jIGIvbmV0L25ldGZpbHRlci94dF90aW1lLmMKaW5kZXggZWQ3NmJhYWIuLjlmMzI4NTkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGltZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfdGltZS5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAkJX19uZXRfdGltZXN0YW1wKChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYik7CiAKIAlzdGFtcCA9IGt0aW1lX3RvX25zKHNrYi0+dHN0YW1wKTsKLQlkb19kaXYoc3RhbXAsIE5TRUNfUEVSX1NFQyk7CisJc3RhbXAgPSBkaXZfczY0KHN0YW1wLCBOU0VDX1BFUl9TRUMpOwogCiAJaWYgKGluZm8tPmZsYWdzICYgWFRfVElNRV9MT0NBTF9UWikKIAkJLyogQWRqdXN0IGZvciBsb2NhbCB0aW1lem9uZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYwppbmRleCA5MDgwYzYxLi4wYWVjMzE4IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYwpAQCAtNTkxLDcgKzU5MSw3IEBACiAJaWYgKG5sc3plX211bHQgPCA0KSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlrZnJlZV9za2IoYW5zX3NrYik7Ci0JCW5sc3plX211bHQrKzsKKwkJbmxzemVfbXVsdCAqPSAyOwogCQlnb3RvIGxpc3Rfc3RhcnQ7CiAJfQogbGlzdF9mYWlsdXJlX2xvY2s6CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKaW5kZXggNTZmODA4Ny4uOTIxYzExOCAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYwpAQCAtOTU0LDcgKzk1NCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9pZmFjZSAqaWZhY2UgPSBOVUxMOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAkvKiBYWFggLSBzaG91bGQgdGhpcyBiZSBhIGNoZWNrIGZvciBORVRERVZfRE9XTiBvciBfVU5SRUdJU1RFUj8gKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwppbmRleCAzNDlhYmExLi45OGJmZTI3IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCkBAIC03NTksNyArNzU5LDcgQEAKICAqIDA6IGNvbnRpbnVlCiAgKiAxOiByZXBlYXQgbG9va3VwIC0gcmVmZXJlbmNlIGRyb3BwZWQgd2hpbGUgd2FpdGluZyBmb3Igc29ja2V0IG1lbW9yeS4KICAqLwotaW50IG5ldGxpbmtfYXR0YWNoc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5vbmJsb2NrLAoraW50IG5ldGxpbmtfYXR0YWNoc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICAgbG9uZyAqdGltZW8sIHN0cnVjdCBzb2NrICpzc2spCiB7CiAJc3RydWN0IG5ldGxpbmtfc29jayAqbmxrOwpAQCAtODkyLDcgKzg5Miw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JZXJyID0gbmV0bGlua19hdHRhY2hza2Ioc2ssIHNrYiwgbm9uYmxvY2ssICZ0aW1lbywgc3NrKTsKKwllcnIgPSBuZXRsaW5rX2F0dGFjaHNrYihzaywgc2tiLCAmdGltZW8sIHNzayk7CiAJaWYgKGVyciA9PSAxKQogCQlnb3RvIHJldHJ5OwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwppbmRleCA0YmFlOGI5Li41MzJlNGZhIDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCisrKyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKQEAgLTczLDYgKzczLDIwIEBACiAgKiBzZXBhcmF0ZSBjbGFzcyBzaW5jZSB0aGV5IGFsd2F5cyBuZXN0LgogICovCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG5yX25ldGRldl94bWl0X2xvY2tfa2V5Oworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBucl9uZXRkZXZfYWRkcl9sb2NrX2tleTsKKworc3RhdGljIHZvaWQgbnJfc2V0X2xvY2tkZXBfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLAorCQkJICAgICAgIHZvaWQgKl91bnVzZWQpCit7CisJbG9ja2RlcF9zZXRfY2xhc3MoJnR4cS0+X3htaXRfbG9jaywgJm5yX25ldGRldl94bWl0X2xvY2tfa2V5KTsKK30KKworc3RhdGljIHZvaWQgbnJfc2V0X2xvY2tkZXBfa2V5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbG9ja2RlcF9zZXRfY2xhc3MoJmRldi0+YWRkcl9saXN0X2xvY2ssICZucl9uZXRkZXZfYWRkcl9sb2NrX2tleSk7CisJbmV0ZGV2X2Zvcl9lYWNoX3R4X3F1ZXVlKGRldiwgbnJfc2V0X2xvY2tkZXBfb25lLCBOVUxMKTsKK30KIAogLyoKICAqCVNvY2tldCByZW1vdmFsIGR1cmluZyBhbiBpbnRlcnJ1cHQgaXMgbm93IHNhZmUuCkBAIC0xMDYsNyArMTIwLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopcHRyOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgIT0gTkVUREVWX0RPV04pCkBAIC00NzUsMTMgKzQ4OSwxMSBAQAogCXNvY2tfaW5pdF9kYXRhKE5VTEwsIHNrKTsKIAogCXNrLT5za190eXBlICAgICA9IG9zay0+c2tfdHlwZTsKLQlzay0+c2tfc29ja2V0ICAgPSBvc2stPnNrX3NvY2tldDsKIAlzay0+c2tfcHJpb3JpdHkgPSBvc2stPnNrX3ByaW9yaXR5OwogCXNrLT5za19wcm90b2NvbCA9IG9zay0+c2tfcHJvdG9jb2w7CiAJc2stPnNrX3JjdmJ1ZiAgID0gb3NrLT5za19yY3ZidWY7CiAJc2stPnNrX3NuZGJ1ZiAgID0gb3NrLT5za19zbmRidWY7CiAJc2stPnNrX3N0YXRlICAgID0gVENQX0VTVEFCTElTSEVEOwotCXNrLT5za19zbGVlcCAgICA9IG9zay0+c2tfc2xlZXA7CiAJc29ja19jb3B5X2ZsYWdzKHNrLCBvc2spOwogCiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbnItPmFja19xdWV1ZSk7CkBAIC01MzgsMTEgKzU1MCw5IEBACiAJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOwogCQlzb2NrX29ycGhhbihzayk7CiAJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVTVFJPWSk7Ci0JCXNrLT5za19zb2NrZXQgICA9IE5VTEw7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJc2stPnNrX3NvY2tldCA9IE5VTEw7CiAJCWJyZWFrOwogCX0KIApAQCAtODEwLDEzICs4MjAsMTEgQEAKIAkJZ290byBvdXRfcmVsZWFzZTsKIAogCW5ld3NrID0gc2tiLT5zazsKLQluZXdzay0+c2tfc29ja2V0ID0gbmV3c29jazsKLQluZXdzay0+c2tfc2xlZXAgPSAmbmV3c29jay0+d2FpdDsKKwlzb2NrX2dyYWZ0KG5ld3NrLCBuZXdzb2NrKTsKIAogCS8qIE5vdyBhdHRhY2ggdXAgdGhlIG5ldyBzb2NrZXQgKi8KIAlrZnJlZV9za2Ioc2tiKTsKIAlza19hY2NlcHRxX3JlbW92ZWQoc2spOwotCW5ld3NvY2stPnNrID0gbmV3c2s7CiAKIG91dF9yZWxlYXNlOgogCXJlbGVhc2Vfc29jayhzayk7CkBAIC0xNDM2LDcgKzE0NDQsNyBAQAogCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJCWdvdG8gZmFpbDsKIAkJfQotCQlsb2NrZGVwX3NldF9jbGFzcygmZGV2LT5feG1pdF9sb2NrLCAmbnJfbmV0ZGV2X3htaXRfbG9ja19rZXkpOworCQlucl9zZXRfbG9ja2RlcF9rZXkoZGV2KTsKIAkJZGV2X25yW2ldID0gZGV2OwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggMmNlZTg3ZC4uZDU2Y2FlMSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC01LDggKzUsNiBAQAogICoKICAqCQlQQUNLRVQgLSBpbXBsZW1lbnRzIHJhdyBwYWNrZXQgc29ja2V0cy4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IGFmX3BhY2tldC5jLHYgMS42MSAyMDAyLzAyLzA4IDAzOjU3OjE5IGRhdmVtIEV4cCAkCi0gKgogICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJQWxhbiBDb3gsIDxndzRwdHNAZ3c0cHRzLmFtcHIub3JnPgpAQCAtMTg4LDYgKzE4Niw5IEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgcGdfdmVjX29yZGVyOwogCXVuc2lnbmVkIGludAkJcGdfdmVjX3BhZ2VzOwogCXVuc2lnbmVkIGludAkJcGdfdmVjX2xlbjsKKwllbnVtIHRwYWNrZXRfdmVyc2lvbnMJdHBfdmVyc2lvbjsKKwl1bnNpZ25lZCBpbnQJCXRwX2hkcmxlbjsKKwl1bnNpZ25lZCBpbnQJCXRwX3Jlc2VydmU7CiAjZW5kaWYKIH07CiAKQEAgLTIwMywxNCArMjA0LDUyIEBACiAKICNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdHBhY2tldF9oZHIgKnBhY2tldF9sb29rdXBfZnJhbWUoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdW5zaWduZWQgaW50IHBvc2l0aW9uKQorc3RhdGljIHZvaWQgKnBhY2tldF9sb29rdXBfZnJhbWUoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdW5zaWduZWQgaW50IHBvc2l0aW9uLAorCQkJCSBpbnQgc3RhdHVzKQogewogCXVuc2lnbmVkIGludCBwZ192ZWNfcG9zLCBmcmFtZV9vZmZzZXQ7CisJdW5pb24geworCQlzdHJ1Y3QgdHBhY2tldF9oZHIgKmgxOworCQlzdHJ1Y3QgdHBhY2tldDJfaGRyICpoMjsKKwkJdm9pZCAqcmF3OworCX0gaDsKIAogCXBnX3ZlY19wb3MgPSBwb3NpdGlvbiAvIHBvLT5mcmFtZXNfcGVyX2Jsb2NrOwogCWZyYW1lX29mZnNldCA9IHBvc2l0aW9uICUgcG8tPmZyYW1lc19wZXJfYmxvY2s7CiAKLQlyZXR1cm4gKHN0cnVjdCB0cGFja2V0X2hkciAqKShwby0+cGdfdmVjW3BnX3ZlY19wb3NdICsgKGZyYW1lX29mZnNldCAqIHBvLT5mcmFtZV9zaXplKSk7CisJaC5yYXcgPSBwby0+cGdfdmVjW3BnX3ZlY19wb3NdICsgKGZyYW1lX29mZnNldCAqIHBvLT5mcmFtZV9zaXplKTsKKwlzd2l0Y2ggKHBvLT50cF92ZXJzaW9uKSB7CisJY2FzZSBUUEFDS0VUX1YxOgorCQlpZiAoc3RhdHVzICE9IGguaDEtPnRwX3N0YXR1cyA/IFRQX1NUQVRVU19VU0VSIDoKKwkJCQkJCVRQX1NUQVRVU19LRVJORUwpCisJCQlyZXR1cm4gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSBUUEFDS0VUX1YyOgorCQlpZiAoc3RhdHVzICE9IGguaDItPnRwX3N0YXR1cyA/IFRQX1NUQVRVU19VU0VSIDoKKwkJCQkJCVRQX1NUQVRVU19LRVJORUwpCisJCQlyZXR1cm4gTlVMTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBoLnJhdzsKK30KKworc3RhdGljIHZvaWQgX19wYWNrZXRfc2V0X3N0YXR1cyhzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSwgaW50IHN0YXR1cykKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCB0cGFja2V0X2hkciAqaDE7CisJCXN0cnVjdCB0cGFja2V0Ml9oZHIgKmgyOworCQl2b2lkICpyYXc7CisJfSBoOworCisJaC5yYXcgPSBmcmFtZTsKKwlzd2l0Y2ggKHBvLT50cF92ZXJzaW9uKSB7CisJY2FzZSBUUEFDS0VUX1YxOgorCQloLmgxLT50cF9zdGF0dXMgPSBzdGF0dXM7CisJCWJyZWFrOworCWNhc2UgVFBBQ0tFVF9WMjoKKwkJaC5oMi0+dHBfc3RhdHVzID0gc3RhdHVzOworCQlicmVhazsKKwl9CiB9CiAjZW5kaWYKIApAQCAtNTUzLDE0ICs1OTIsMTkgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHBhY2tldF9zb2NrICpwbzsKIAlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbDsKLQlzdHJ1Y3QgdHBhY2tldF9oZHIgKmg7CisJdW5pb24geworCQlzdHJ1Y3QgdHBhY2tldF9oZHIgKmgxOworCQlzdHJ1Y3QgdHBhY2tldDJfaGRyICpoMjsKKwkJdm9pZCAqcmF3OworCX0gaDsKIAl1OCAqIHNrYl9oZWFkID0gc2tiLT5kYXRhOwogCWludCBza2JfbGVuID0gc2tiLT5sZW47CiAJdW5zaWduZWQgaW50IHNuYXBsZW4sIHJlczsKIAl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IFRQX1NUQVRVU19MT1NJTkd8VFBfU1RBVFVTX1VTRVI7Ci0JdW5zaWduZWQgc2hvcnQgbWFjb2ZmLCBuZXRvZmY7CisJdW5zaWduZWQgc2hvcnQgbWFjb2ZmLCBuZXRvZmYsIGhkcmxlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqY29weV9za2IgPSBOVUxMOwogCXN0cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCB0aW1lc3BlYyB0czsKIAogCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSykKIAkJZ290byBkcm9wOwpAQCAtNTkyLDEwICs2MzYsMTMgQEAKIAkJc25hcGxlbiA9IHJlczsKIAogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7Ci0JCW1hY29mZiA9IG5ldG9mZiA9IFRQQUNLRVRfQUxJR04oVFBBQ0tFVF9IRFJMRU4pICsgMTY7CisJCW1hY29mZiA9IG5ldG9mZiA9IFRQQUNLRVRfQUxJR04ocG8tPnRwX2hkcmxlbikgKyAxNiArCisJCQkJICBwby0+dHBfcmVzZXJ2ZTsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBtYWNsZW4gPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKLQkJbmV0b2ZmID0gVFBBQ0tFVF9BTElHTihUUEFDS0VUX0hEUkxFTiArIChtYWNsZW4gPCAxNiA/IDE2IDogbWFjbGVuKSk7CisJCW5ldG9mZiA9IFRQQUNLRVRfQUxJR04ocG8tPnRwX2hkcmxlbiArCisJCQkJICAgICAgIChtYWNsZW4gPCAxNiA/IDE2IDogbWFjbGVuKSkgKworCQkJcG8tPnRwX3Jlc2VydmU7CiAJCW1hY29mZiA9IG5ldG9mZiAtIG1hY2xlbjsKIAl9CiAKQEAgLTYxOCw5ICs2NjUsOCBAQAogCX0KIAogCXNwaW5fbG9jaygmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7Ci0JaCA9IHBhY2tldF9sb29rdXBfZnJhbWUocG8sIHBvLT5oZWFkKTsKLQotCWlmIChoLT50cF9zdGF0dXMpCisJaC5yYXcgPSBwYWNrZXRfbG9va3VwX2ZyYW1lKHBvLCBwby0+aGVhZCwgVFBfU1RBVFVTX0tFUk5FTCk7CisJaWYgKCFoLnJhdykKIAkJZ290byByaW5nX2lzX2Z1bGw7CiAJcG8tPmhlYWQgPSBwby0+aGVhZCAhPSBwby0+ZnJhbWVfbWF4ID8gcG8tPmhlYWQrMSA6IDA7CiAJcG8tPnN0YXRzLnRwX3BhY2tldHMrKzsKQEAgLTYzMiwyMCArNjc4LDQxIEBACiAJCXN0YXR1cyAmPSB+VFBfU1RBVFVTX0xPU0lORzsKIAlzcGluX3VubG9jaygmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CiAKLQlza2JfY29weV9iaXRzKHNrYiwgMCwgKHU4KiloICsgbWFjb2ZmLCBzbmFwbGVuKTsKKwlza2JfY29weV9iaXRzKHNrYiwgMCwgaC5yYXcgKyBtYWNvZmYsIHNuYXBsZW4pOwogCi0JaC0+dHBfbGVuID0gc2tiLT5sZW47Ci0JaC0+dHBfc25hcGxlbiA9IHNuYXBsZW47Ci0JaC0+dHBfbWFjID0gbWFjb2ZmOwotCWgtPnRwX25ldCA9IG5ldG9mZjsKLQlpZiAoc2tiLT50c3RhbXAudHY2NCkKLQkJdHYgPSBrdGltZV90b190aW1ldmFsKHNrYi0+dHN0YW1wKTsKLQllbHNlCi0JCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCWgtPnRwX3NlYyA9IHR2LnR2X3NlYzsKLQloLT50cF91c2VjID0gdHYudHZfdXNlYzsKKwlzd2l0Y2ggKHBvLT50cF92ZXJzaW9uKSB7CisJY2FzZSBUUEFDS0VUX1YxOgorCQloLmgxLT50cF9sZW4gPSBza2ItPmxlbjsKKwkJaC5oMS0+dHBfc25hcGxlbiA9IHNuYXBsZW47CisJCWguaDEtPnRwX21hYyA9IG1hY29mZjsKKwkJaC5oMS0+dHBfbmV0ID0gbmV0b2ZmOworCQlpZiAoc2tiLT50c3RhbXAudHY2NCkKKwkJCXR2ID0ga3RpbWVfdG9fdGltZXZhbChza2ItPnRzdGFtcCk7CisJCWVsc2UKKwkJCWRvX2dldHRpbWVvZmRheSgmdHYpOworCQloLmgxLT50cF9zZWMgPSB0di50dl9zZWM7CisJCWguaDEtPnRwX3VzZWMgPSB0di50dl91c2VjOworCQloZHJsZW4gPSBzaXplb2YoKmguaDEpOworCQlicmVhazsKKwljYXNlIFRQQUNLRVRfVjI6CisJCWguaDItPnRwX2xlbiA9IHNrYi0+bGVuOworCQloLmgyLT50cF9zbmFwbGVuID0gc25hcGxlbjsKKwkJaC5oMi0+dHBfbWFjID0gbWFjb2ZmOworCQloLmgyLT50cF9uZXQgPSBuZXRvZmY7CisJCWlmIChza2ItPnRzdGFtcC50djY0KQorCQkJdHMgPSBrdGltZV90b190aW1lc3BlYyhza2ItPnRzdGFtcCk7CisJCWVsc2UKKwkJCWdldG5zdGltZW9mZGF5KCZ0cyk7CisJCWguaDItPnRwX3NlYyA9IHRzLnR2X3NlYzsKKwkJaC5oMi0+dHBfbnNlYyA9IHRzLnR2X25zZWM7CisJCWguaDItPnRwX3ZsYW5fdGNpID0gc2tiLT52bGFuX3RjaTsKKwkJaGRybGVuID0gc2l6ZW9mKCpoLmgyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQogCi0Jc2xsID0gKHN0cnVjdCBzb2NrYWRkcl9sbCopKCh1OCopaCArIFRQQUNLRVRfQUxJR04oc2l6ZW9mKCpoKSkpOworCXNsbCA9IGgucmF3ICsgVFBBQ0tFVF9BTElHTihoZHJsZW4pOwogCXNsbC0+c2xsX2hhbGVuID0gZGV2X3BhcnNlX2hlYWRlcihza2IsIHNsbC0+c2xsX2FkZHIpOwogCXNsbC0+c2xsX2ZhbWlseSA9IEFGX1BBQ0tFVDsKIAlzbGwtPnNsbF9oYXR5cGUgPSBkZXYtPnR5cGU7CkBAIC02NTYsMTQgKzcyMywxNCBAQAogCWVsc2UKIAkJc2xsLT5zbGxfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKIAotCWgtPnRwX3N0YXR1cyA9IHN0YXR1czsKKwlfX3BhY2tldF9zZXRfc3RhdHVzKHBvLCBoLnJhdywgc3RhdHVzKTsKIAlzbXBfbWIoKTsKIAogCXsKIAkJc3RydWN0IHBhZ2UgKnBfc3RhcnQsICpwX2VuZDsKLQkJdTggKmhfZW5kID0gKHU4ICopaCArIG1hY29mZiArIHNuYXBsZW4gLSAxOworCQl1OCAqaF9lbmQgPSBoLnJhdyArIG1hY29mZiArIHNuYXBsZW4gLSAxOwogCi0JCXBfc3RhcnQgPSB2aXJ0X3RvX3BhZ2UoaCk7CisJCXBfc3RhcnQgPSB2aXJ0X3RvX3BhZ2UoaC5yYXcpOwogCQlwX2VuZCA9IHZpcnRfdG9fcGFnZShoX2VuZCk7CiAJCXdoaWxlIChwX3N0YXJ0IDw9IHBfZW5kKSB7CiAJCQlmbHVzaF9kY2FjaGVfcGFnZShwX3N0YXJ0KTsKQEAgLTExMDksNiArMTE3Niw3IEBACiAJCWF1eC50cF9zbmFwbGVuID0gc2tiLT5sZW47CiAJCWF1eC50cF9tYWMgPSAwOwogCQlhdXgudHBfbmV0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7CisJCWF1eC50cF92bGFuX3RjaSA9IHNrYi0+dmxhbl90Y2k7CiAKIAkJcHV0X2Ntc2cobXNnLCBTT0xfUEFDS0VULCBQQUNLRVRfQVVYREFUQSwgc2l6ZW9mKGF1eCksICZhdXgpOwogCX0KQEAgLTExNzUsNyArMTI0Myw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBhY2tldF9kZXZfbWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF9tY2xpc3QgKmksIGludCB3aGF0KQorc3RhdGljIGludCBwYWNrZXRfZGV2X21jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfbWNsaXN0ICppLAorCQkJIGludCB3aGF0KQogewogCXN3aXRjaCAoaS0+dHlwZSkgewogCWNhc2UgUEFDS0VUX01SX01VTFRJQ0FTVDoKQEAgLTExODUsMTMgKzEyNTQsMTQgQEAKIAkJCWRldl9tY19kZWxldGUoZGV2LCBpLT5hZGRyLCBpLT5hbGVuLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVRfTVJfUFJPTUlTQzoKLQkJZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIHdoYXQpOworCQlyZXR1cm4gZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIHdoYXQpOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVF9NUl9BTExNVUxUSToKLQkJZGV2X3NldF9hbGxtdWx0aShkZXYsIHdoYXQpOworCQlyZXR1cm4gZGV2X3NldF9hbGxtdWx0aShkZXYsIHdoYXQpOwogCQlicmVhazsKIAlkZWZhdWx0OjsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHBhY2tldF9kZXZfbWNsaXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfbWNsaXN0ICppLCBpbnQgd2hhdCkKQEAgLTEyNDUsNyArMTMxNSwxMSBAQAogCWktPmNvdW50ID0gMTsKIAlpLT5uZXh0ID0gcG8tPm1jbGlzdDsKIAlwby0+bWNsaXN0ID0gaTsKLQlwYWNrZXRfZGV2X21jKGRldiwgaSwgKzEpOworCWVyciA9IHBhY2tldF9kZXZfbWMoZGV2LCBpLCAxKTsKKwlpZiAoZXJyKSB7CisJCXBvLT5tY2xpc3QgPSBpLT5uZXh0OworCQlrZnJlZShpKTsKKwl9CiAKIGRvbmU6CiAJcnRubF91bmxvY2soKTsKQEAgLTEzNTgsNiArMTQzMiwzOCBAQAogCQlwa3Rfc2soc2spLT5jb3B5X3RocmVzaCA9IHZhbDsKIAkJcmV0dXJuIDA7CiAJfQorCWNhc2UgUEFDS0VUX1ZFUlNJT046CisJeworCQlpbnQgdmFsOworCisJCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHZhbCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHBvLT5wZ192ZWMpCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbCwgb3B0dmFsLCBzaXplb2YodmFsKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJc3dpdGNoICh2YWwpIHsKKwkJY2FzZSBUUEFDS0VUX1YxOgorCQljYXNlIFRQQUNLRVRfVjI6CisJCQlwby0+dHBfdmVyc2lvbiA9IHZhbDsKKwkJCXJldHVybiAwOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJY2FzZSBQQUNLRVRfUkVTRVJWRToKKwl7CisJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJaWYgKG9wdGxlbiAhPSBzaXplb2YodmFsKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAocG8tPnBnX3ZlYykKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsLCBvcHR2YWwsIHNpemVvZih2YWwpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlwby0+dHBfcmVzZXJ2ZSA9IHZhbDsKKwkJcmV0dXJuIDA7CisJfQogI2VuZGlmCiAJY2FzZSBQQUNLRVRfQVVYREFUQToKIAl7CkBAIC0xNDMzLDYgKzE1MzksMzcgQEAKIAogCQlkYXRhID0gJnZhbDsKIAkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCisJY2FzZSBQQUNLRVRfVkVSU0lPTjoKKwkJaWYgKGxlbiA+IHNpemVvZihpbnQpKQorCQkJbGVuID0gc2l6ZW9mKGludCk7CisJCXZhbCA9IHBvLT50cF92ZXJzaW9uOworCQlkYXRhID0gJnZhbDsKKwkJYnJlYWs7CisJY2FzZSBQQUNLRVRfSERSTEVOOgorCQlpZiAobGVuID4gc2l6ZW9mKGludCkpCisJCQlsZW4gPSBzaXplb2YoaW50KTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YWwsIG9wdHZhbCwgbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlzd2l0Y2ggKHZhbCkgeworCQljYXNlIFRQQUNLRVRfVjE6CisJCQl2YWwgPSBzaXplb2Yoc3RydWN0IHRwYWNrZXRfaGRyKTsKKwkJCWJyZWFrOworCQljYXNlIFRQQUNLRVRfVjI6CisJCQl2YWwgPSBzaXplb2Yoc3RydWN0IHRwYWNrZXQyX2hkcik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRhdGEgPSAmdmFsOworCQlicmVhazsKKwljYXNlIFBBQ0tFVF9SRVNFUlZFOgorCQlpZiAobGVuID4gc2l6ZW9mKHVuc2lnbmVkIGludCkpCisJCQlsZW4gPSBzaXplb2YodW5zaWduZWQgaW50KTsKKwkJdmFsID0gcG8tPnRwX3Jlc2VydmU7CisJCWRhdGEgPSAmdmFsOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQpAQCAtMTU0MCw3ICsxNjc3LDcgQEAKIAkJY2FzZSBTSU9DR0lGRFNUQUREUjoKIAkJY2FzZSBTSU9DU0lGRFNUQUREUjoKIAkJY2FzZSBTSU9DU0lGRkxBR1M6Ci0JCQlpZiAoc29ja19uZXQoc2spICE9ICZpbml0X25ldCkKKwkJCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgJmluaXRfbmV0KSkKIAkJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCQkJcmV0dXJuIGluZXRfZGdyYW1fb3BzLmlvY3RsKHNvY2ssIGNtZCwgYXJnKTsKICNlbmRpZgpAQCAtMTU2NiwxMSArMTcwMyw4IEBACiAJc3Bpbl9sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKIAlpZiAocG8tPnBnX3ZlYykgewogCQl1bnNpZ25lZCBsYXN0ID0gcG8tPmhlYWQgPyBwby0+aGVhZC0xIDogcG8tPmZyYW1lX21heDsKLQkJc3RydWN0IHRwYWNrZXRfaGRyICpoOwogCi0JCWggPSBwYWNrZXRfbG9va3VwX2ZyYW1lKHBvLCBsYXN0KTsKLQotCQlpZiAoaC0+dHBfc3RhdHVzKQorCQlpZiAocGFja2V0X2xvb2t1cF9mcmFtZShwbywgbGFzdCwgVFBfU1RBVFVTX1VTRVIpKQogCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CkBAIC0xNjY1LDExICsxNzk5LDIxIEBACiAJCWlmICh1bmxpa2VseShwby0+cGdfdmVjKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKKwkJc3dpdGNoIChwby0+dHBfdmVyc2lvbikgeworCQljYXNlIFRQQUNLRVRfVjE6CisJCQlwby0+dHBfaGRybGVuID0gVFBBQ0tFVF9IRFJMRU47CisJCQlicmVhazsKKwkJY2FzZSBUUEFDS0VUX1YyOgorCQkJcG8tPnRwX2hkcmxlbiA9IFRQQUNLRVQyX0hEUkxFTjsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKHVubGlrZWx5KChpbnQpcmVxLT50cF9ibG9ja19zaXplIDw9IDApKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICh1bmxpa2VseShyZXEtPnRwX2Jsb2NrX3NpemUgJiAoUEFHRV9TSVpFIC0gMSkpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICh1bmxpa2VseShyZXEtPnRwX2ZyYW1lX3NpemUgPCBUUEFDS0VUX0hEUkxFTikpCisJCWlmICh1bmxpa2VseShyZXEtPnRwX2ZyYW1lX3NpemUgPCBwby0+dHBfaGRybGVuICsKKwkJCQkJCSAgcG8tPnRwX3Jlc2VydmUpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICh1bmxpa2VseShyZXEtPnRwX2ZyYW1lX3NpemUgJiAoVFBBQ0tFVF9BTElHTk1FTlQgLSAxKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2ODgsMTMgKzE4MzIsMTEgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWZvciAoaSA9IDA7IGkgPCByZXEtPnRwX2Jsb2NrX25yOyBpKyspIHsKLQkJCWNoYXIgKnB0ciA9IHBnX3ZlY1tpXTsKLQkJCXN0cnVjdCB0cGFja2V0X2hkciAqaGVhZGVyOworCQkJdm9pZCAqcHRyID0gcGdfdmVjW2ldOwogCQkJaW50IGs7CiAKIAkJCWZvciAoayA9IDA7IGsgPCBwby0+ZnJhbWVzX3Blcl9ibG9jazsgaysrKSB7Ci0JCQkJaGVhZGVyID0gKHN0cnVjdCB0cGFja2V0X2hkciAqKSBwdHI7Ci0JCQkJaGVhZGVyLT50cF9zdGF0dXMgPSBUUF9TVEFUVVNfS0VSTkVMOworCQkJCV9fcGFja2V0X3NldF9zdGF0dXMocG8sIHB0ciwgVFBfU1RBVFVTX0tFUk5FTCk7CiAJCQkJcHRyICs9IHJlcS0+dHBfZnJhbWVfc2l6ZTsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3Jma2lsbC9yZmtpbGwtaW5wdXQuYyBiL25ldC9yZmtpbGwvcmZraWxsLWlucHV0LmMKaW5kZXggZTRiMDUxZC4uOGFhODIyNyAxMDA2NDQKLS0tIGEvbmV0L3Jma2lsbC9yZmtpbGwtaW5wdXQuYworKysgYi9uZXQvcmZraWxsL3Jma2lsbC1pbnB1dC5jCkBAIC0zMCwzOSArMzAsNDMgQEAKIAlzcGlubG9ja190IGxvY2s7IC8qIGZvciBhY2Nlc3NpbmcgbGFzdCBhbmQgZGVzaXJlZCBzdGF0ZSAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdDsgLyogbGFzdCBzY2hlZHVsZSAqLwogCWVudW0gcmZraWxsX3N0YXRlIGRlc2lyZWRfc3RhdGU7IC8qIG9uL29mZiAqLwotCWVudW0gcmZraWxsX3N0YXRlIGN1cnJlbnRfc3RhdGU7IC8qIG9uL29mZiAqLwogfTsKIAogc3RhdGljIHZvaWQgcmZraWxsX3Rhc2tfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJma2lsbF90YXNrICp0YXNrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZmtpbGxfdGFzaywgd29yayk7Ci0JZW51bSByZmtpbGxfc3RhdGUgc3RhdGU7CiAKIAltdXRleF9sb2NrKCZ0YXNrLT5tdXRleCk7CiAKLQkvKgotCSAqIFVzZSB0ZW1wIHZhcmlhYmxlIHRvIGZldGNoIGRlc2lyZWQgc3RhdGUgdG8ga2VlcCBpdAotCSAqIGNvbnNpc3RlbnQgZXZlbiBpZiByZmtpbGxfc2NoZWR1bGVfdG9nZ2xlKCkgcnVucyBpbgotCSAqIGFub3RoZXIgdGhyZWFkIG9yIGludGVycnVwdHMgdXMuCi0JICovCi0Jc3RhdGUgPSB0YXNrLT5kZXNpcmVkX3N0YXRlOwotCi0JaWYgKHN0YXRlICE9IHRhc2stPmN1cnJlbnRfc3RhdGUpIHsKLQkJcmZraWxsX3N3aXRjaF9hbGwodGFzay0+dHlwZSwgc3RhdGUpOwotCQl0YXNrLT5jdXJyZW50X3N0YXRlID0gc3RhdGU7Ci0JfQorCXJma2lsbF9zd2l0Y2hfYWxsKHRhc2stPnR5cGUsIHRhc2stPmRlc2lyZWRfc3RhdGUpOwogCiAJbXV0ZXhfdW5sb2NrKCZ0YXNrLT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJma2lsbF9zY2hlZHVsZV90b2dnbGUoc3RydWN0IHJma2lsbF90YXNrICp0YXNrKQorc3RhdGljIHZvaWQgcmZraWxsX3Rhc2tfZXBvX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXJma2lsbF9lcG8oKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhlcG9fd29yaywgcmZraWxsX3Rhc2tfZXBvX2hhbmRsZXIpOworCitzdGF0aWMgdm9pZCByZmtpbGxfc2NoZWR1bGVfZXBvKHZvaWQpCit7CisJc2NoZWR1bGVfd29yaygmZXBvX3dvcmspOworfQorCitzdGF0aWMgdm9pZCByZmtpbGxfc2NoZWR1bGVfc2V0KHN0cnVjdCByZmtpbGxfdGFzayAqdGFzaywKKwkJCQllbnVtIHJma2lsbF9zdGF0ZSBkZXNpcmVkX3N0YXRlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAodW5saWtlbHkod29ya19wZW5kaW5nKCZlcG9fd29yaykpKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGFzay0+bGFzdCArIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSkpIHsKLQkJdGFzay0+ZGVzaXJlZF9zdGF0ZSA9ICF0YXNrLT5kZXNpcmVkX3N0YXRlOworCQl0YXNrLT5kZXNpcmVkX3N0YXRlID0gZGVzaXJlZF9zdGF0ZTsKIAkJdGFzay0+bGFzdCA9IGppZmZpZXM7CiAJCXNjaGVkdWxlX3dvcmsoJnRhc2stPndvcmspOwogCX0KQEAgLTcwLDI2ICs3NCw0NSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPmxvY2ssIGZsYWdzKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkZLSUxMX1RBU0sobiwgdCkJCQlcCi0Jc3RydWN0IHJma2lsbF90YXNrIG4gPSB7CQkJXAotCQkud29yayA9IF9fV09SS19JTklUSUFMSVpFUihuLndvcmssCVwKLQkJCQlyZmtpbGxfdGFza19oYW5kbGVyKSwJXAotCQkudHlwZSA9IHQsCQkJCVwKLQkJLm11dGV4ID0gX19NVVRFWF9JTklUSUFMSVpFUihuLm11dGV4KSwJXAotCQkubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKG4ubG9jayksCVwKLQkJLmRlc2lyZWRfc3RhdGUgPSBSRktJTExfU1RBVEVfT04sCVwKLQkJLmN1cnJlbnRfc3RhdGUgPSBSRktJTExfU1RBVEVfT04sCVwKK3N0YXRpYyB2b2lkIHJma2lsbF9zY2hlZHVsZV90b2dnbGUoc3RydWN0IHJma2lsbF90YXNrICp0YXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkod29ya19wZW5kaW5nKCZlcG9fd29yaykpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+bG9jaywgZmxhZ3MpOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGFzay0+bGFzdCArIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSkpIHsKKwkJdGFzay0+ZGVzaXJlZF9zdGF0ZSA9CisJCQkJcmZraWxsX3N0YXRlX2NvbXBsZW1lbnQodGFzay0+ZGVzaXJlZF9zdGF0ZSk7CisJCXRhc2stPmxhc3QgPSBqaWZmaWVzOworCQlzY2hlZHVsZV93b3JrKCZ0YXNrLT53b3JrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT5sb2NrLCBmbGFncyk7Cit9CisKKyNkZWZpbmUgREVGSU5FX1JGS0lMTF9UQVNLKG4sIHQpCQkJCVwKKwlzdHJ1Y3QgcmZraWxsX3Rhc2sgbiA9IHsJCQkJXAorCQkud29yayA9IF9fV09SS19JTklUSUFMSVpFUihuLndvcmssCQlcCisJCQkJcmZraWxsX3Rhc2tfaGFuZGxlciksCQlcCisJCS50eXBlID0gdCwJCQkJCVwKKwkJLm11dGV4ID0gX19NVVRFWF9JTklUSUFMSVpFUihuLm11dGV4KSwJCVwKKwkJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChuLmxvY2spLAkJXAorCQkuZGVzaXJlZF9zdGF0ZSA9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQsCVwKIAl9CiAKIHN0YXRpYyBERUZJTkVfUkZLSUxMX1RBU0socmZraWxsX3dsYW4sIFJGS0lMTF9UWVBFX1dMQU4pOwogc3RhdGljIERFRklORV9SRktJTExfVEFTSyhyZmtpbGxfYnQsIFJGS0lMTF9UWVBFX0JMVUVUT09USCk7CiBzdGF0aWMgREVGSU5FX1JGS0lMTF9UQVNLKHJma2lsbF91d2IsIFJGS0lMTF9UWVBFX1VXQik7CiBzdGF0aWMgREVGSU5FX1JGS0lMTF9UQVNLKHJma2lsbF93aW1heCwgUkZLSUxMX1RZUEVfV0lNQVgpOworc3RhdGljIERFRklORV9SRktJTExfVEFTSyhyZmtpbGxfd3dhbiwgUkZLSUxMX1RZUEVfV1dBTik7CiAKIHN0YXRpYyB2b2lkIHJma2lsbF9ldmVudChzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUsIHVuc2lnbmVkIGludCB0eXBlLAotCQkJdW5zaWduZWQgaW50IGNvZGUsIGludCBkb3duKQorCQkJdW5zaWduZWQgaW50IGNvZGUsIGludCBkYXRhKQogewotCWlmICh0eXBlID09IEVWX0tFWSAmJiBkb3duID09IDEpIHsKKwlpZiAodHlwZSA9PSBFVl9LRVkgJiYgZGF0YSA9PSAxKSB7CiAJCXN3aXRjaCAoY29kZSkgewogCQljYXNlIEtFWV9XTEFOOgogCQkJcmZraWxsX3NjaGVkdWxlX3RvZ2dsZSgmcmZraWxsX3dsYW4pOwpAQCAtMTA2LDYgKzEyOSwyOCBAQAogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KKwl9IGVsc2UgaWYgKHR5cGUgPT0gRVZfU1cpIHsKKwkJc3dpdGNoIChjb2RlKSB7CisJCWNhc2UgU1dfUkZLSUxMX0FMTDoKKwkJCS8qIEVWRVJZIHJhZGlvIHR5cGUuIGRhdGEgIT0gMCBtZWFucyByYWRpb3MgT04gKi8KKwkJCS8qIGhhbmRsZSBFUE8gKGVtZXJnZW5jeSBwb3dlciBvZmYpIHRocm91Z2ggc2hvcnRjdXQgKi8KKwkJCWlmIChkYXRhKSB7CisJCQkJcmZraWxsX3NjaGVkdWxlX3NldCgmcmZraWxsX3d3YW4sCisJCQkJCQkgICAgUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCk7CisJCQkJcmZraWxsX3NjaGVkdWxlX3NldCgmcmZraWxsX3dpbWF4LAorCQkJCQkJICAgIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpOworCQkJCXJma2lsbF9zY2hlZHVsZV9zZXQoJnJma2lsbF91d2IsCisJCQkJCQkgICAgUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCk7CisJCQkJcmZraWxsX3NjaGVkdWxlX3NldCgmcmZraWxsX2J0LAorCQkJCQkJICAgIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpOworCQkJCXJma2lsbF9zY2hlZHVsZV9zZXQoJnJma2lsbF93bGFuLAorCQkJCQkJICAgIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpOworCQkJfSBlbHNlCisJCQkJcmZraWxsX3NjaGVkdWxlX2VwbygpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQogCX0KIH0KIApAQCAtMTY4LDYgKzIxMywxMSBAQAogCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0tFWSkgfSwKIAkJLmtleWJpdCA9IHsgW0JJVF9XT1JEKEtFWV9XSU1BWCldID0gQklUX01BU0soS0VZX1dJTUFYKSB9LAogCX0sCisJeworCQkuZmxhZ3MgPSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQgfCBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfU1dCSVQsCisJCS5ldmJpdCA9IHsgQklUKEVWX1NXKSB9LAorCQkuc3diaXQgPSB7IFtCSVRfV09SRChTV19SRktJTExfQUxMKV0gPSBCSVRfTUFTSyhTV19SRktJTExfQUxMKSB9LAorCX0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL3Jma2lsbC1pbnB1dC5oIGIvbmV0L3Jma2lsbC9yZmtpbGwtaW5wdXQuaAppbmRleCA0ZGFlNTAwLi5mNjNkMDUwIDEwMDY0NAotLS0gYS9uZXQvcmZraWxsL3Jma2lsbC1pbnB1dC5oCisrKyBiL25ldC9yZmtpbGwvcmZraWxsLWlucHV0LmgKQEAgLTEyLDUgKzEyLDYgQEAKICNkZWZpbmUgX19SRktJTExfSU5QVVRfSAogCiB2b2lkIHJma2lsbF9zd2l0Y2hfYWxsKGVudW0gcmZraWxsX3R5cGUgdHlwZSwgZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpOwordm9pZCByZmtpbGxfZXBvKHZvaWQpOwogCiAjZW5kaWYgLyogX19SRktJTExfSU5QVVRfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3Jma2lsbC9yZmtpbGwuYyBiL25ldC9yZmtpbGwvcmZraWxsLmMKaW5kZXggNGUxMGE5NS4uN2E1NjBiNyAxMDA2NDQKLS0tIGEvbmV0L3Jma2lsbC9yZmtpbGwuYworKysgYi9uZXQvcmZraWxsL3Jma2lsbC5jCkBAIC0zOSw4ICszOSw1NiBAQAogc3RhdGljIExJU1RfSEVBRChyZmtpbGxfbGlzdCk7CS8qIGxpc3Qgb2YgcmVnaXN0ZXJlZCByZiBzd2l0Y2hlcyAqLwogc3RhdGljIERFRklORV9NVVRFWChyZmtpbGxfbXV0ZXgpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IHJma2lsbF9kZWZhdWx0X3N0YXRlID0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWZhdWx0X3N0YXRlLCByZmtpbGxfZGVmYXVsdF9zdGF0ZSwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfc3RhdGUsCisJCSAiRGVmYXVsdCBpbml0aWFsIHN0YXRlIGZvciBhbGwgcmFkaW8gdHlwZXMsIDAgPSByYWRpbyBvZmYiKTsKKwogc3RhdGljIGVudW0gcmZraWxsX3N0YXRlIHJma2lsbF9zdGF0ZXNbUkZLSUxMX1RZUEVfTUFYXTsKIAorc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocmZraWxsX25vdGlmaWVyX2xpc3QpOworCisKKy8qKgorICogcmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyIC0gQWRkIG5vdGlmaWVyIHRvIHJma2lsbCBub3RpZmllciBjaGFpbgorICogQG5iOiBwb2ludGVyIHRvIHRoZSBuZXcgZW50cnkgdG8gYWRkIHRvIHRoZSBjaGFpbgorICoKKyAqIFNlZSBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigpIGZvciByZXR1cm4gdmFsdWUgYW5kIGZ1cnRoZXIKKyAqIG9ic2VydmF0aW9ucy4KKyAqCisgKiBBZGRzIGEgbm90aWZpZXIgdG8gdGhlIHJma2lsbCBub3RpZmllciBjaGFpbi4gIFRoZSBjaGFpbiB3aWxsIGJlCisgKiBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50IHJma2lsbCBzdHJ1Y3R1cmUgYXMgYSBwYXJhbWV0ZXIsCisgKiByZWZlciB0byBpbmNsdWRlL2xpbnV4L3Jma2lsbC5oIGZvciB0aGUgcG9zc2libGUgZXZlbnRzLgorICoKKyAqIE5vdGlmaWVycyBhZGRlZCB0byB0aGlzIGNoYWluIGFyZSB0byBhbHdheXMgcmV0dXJuIE5PVElGWV9ET05FLiAgVGhpcworICogY2hhaW4gaXMgYSBibG9ja2luZyBub3RpZmllciBjaGFpbjogbm90aWZpZXJzIGNhbiBzbGVlcC4KKyAqCisgKiBDYWxscyB0byB0aGlzIGNoYWluIG1heSBoYXZlIGJlZW4gZG9uZSB0aHJvdWdoIGEgd29ya3F1ZXVlLiAgT25lIG11c3QKKyAqIGFzc3VtZSB1bm9yZGVyZWQgYXN5bmNocm9ub3VzIGJlaGF2aW91ciwgdGhlcmUgaXMgbm8gd2F5IHRvIGtub3cgaWYKKyAqIGFjdGlvbnMgcmVsYXRlZCB0byB0aGUgZXZlbnQgdGhhdCBnZW5lcmF0ZWQgdGhlIG5vdGlmaWNhdGlvbiBoYXZlIGJlZW4KKyAqIGNhcnJpZWQgb3V0IGFscmVhZHkuCisgKi8KK2ludCByZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnJma2lsbF9ub3RpZmllcl9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIpOworCisvKioKKyAqIHVucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyIC0gcmVtb3ZlIG5vdGlmaWVyIGZyb20gcmZraWxsIG5vdGlmaWVyIGNoYWluCisgKiBAbmI6IHBvaW50ZXIgdG8gdGhlIGVudHJ5IHRvIHJlbW92ZSBmcm9tIHRoZSBjaGFpbgorICoKKyAqIFNlZSBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCkgZm9yIHJldHVybiB2YWx1ZSBhbmQgZnVydGhlcgorICogb2JzZXJ2YXRpb25zLgorICoKKyAqIFJlbW92ZXMgYSBub3RpZmllciBmcm9tIHRoZSByZmtpbGwgbm90aWZpZXIgY2hhaW4uCisgKi8KK2ludCB1bnJlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZyZmtpbGxfbm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIpOworCiAKIHN0YXRpYyB2b2lkIHJma2lsbF9sZWRfdHJpZ2dlcihzdHJ1Y3QgcmZraWxsICpyZmtpbGwsCiAJCQkgICAgICAgZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpCkBAIC01MCwyNCArOTgsMTAxIEBACiAKIAlpZiAoIWxlZC0+bmFtZSkKIAkJcmV0dXJuOwotCWlmIChzdGF0ZSA9PSBSRktJTExfU1RBVEVfT0ZGKQorCWlmIChzdGF0ZSAhPSBSRktJTExfU1RBVEVfVU5CTE9DS0VEKQogCQlsZWRfdHJpZ2dlcl9ldmVudChsZWQsIExFRF9PRkYpOwogCWVsc2UKIAkJbGVkX3RyaWdnZXJfZXZlbnQobGVkLCBMRURfRlVMTCk7CiAjZW5kaWYgLyogQ09ORklHX1JGS0lMTF9MRURTICovCiB9CiAKK3N0YXRpYyB2b2lkIG5vdGlmeV9yZmtpbGxfc3RhdGVfY2hhbmdlKHN0cnVjdCByZmtpbGwgKnJma2lsbCkKK3sKKwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZyZmtpbGxfbm90aWZpZXJfbGlzdCwKKwkJCVJGS0lMTF9TVEFURV9DSEFOR0VELAorCQkJcmZraWxsKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3Jma2lsbF9zdGF0ZShzdHJ1Y3QgcmZraWxsICpyZmtpbGwpCit7CisJZW51bSByZmtpbGxfc3RhdGUgbmV3c3RhdGUsIG9sZHN0YXRlOworCisJaWYgKHJma2lsbC0+Z2V0X3N0YXRlKSB7CisJCW11dGV4X2xvY2soJnJma2lsbC0+bXV0ZXgpOworCQlpZiAoIXJma2lsbC0+Z2V0X3N0YXRlKHJma2lsbC0+ZGF0YSwgJm5ld3N0YXRlKSkgeworCQkJb2xkc3RhdGUgPSByZmtpbGwtPnN0YXRlOworCQkJcmZraWxsLT5zdGF0ZSA9IG5ld3N0YXRlOworCQkJaWYgKG9sZHN0YXRlICE9IG5ld3N0YXRlKQorCQkJCW5vdGlmeV9yZmtpbGxfc3RhdGVfY2hhbmdlKHJma2lsbCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZyZmtpbGwtPm11dGV4KTsKKwl9Cit9CisKKy8qKgorICogcmZraWxsX3RvZ2dsZV9yYWRpbyAtIHdyYXBwZXIgZm9yIHRvZ2dsZV9yYWRpbyBob29rCisgKgorICogQHJma2lsbDogdGhlIHJma2lsbCBzdHJ1Y3QgdG8gdXNlCisgKiBAZm9yY2U6IGNhbGxzIHRvZ2dsZV9yYWRpbyBldmVuIGlmIGNhY2hlIHNheXMgaXQgaXMgbm90IG5lZWRlZCwKKyAqCWFuZCBhbHNvIG1ha2VzIHN1cmUgbm90aWZpY2F0aW9ucyBvZiB0aGUgc3RhdGUgd2lsbCBiZQorICoJc2VudCBldmVuIGlmIGl0IGRpZG4ndCBjaGFuZ2UKKyAqIEBzdGF0ZTogdGhlIG5ldyBzdGF0ZSB0byBjYWxsIHRvZ2dsZV9yYWRpbygpIHdpdGgKKyAqCisgKiBDYWxscyByZmtpbGwtPnRvZ2dsZV9yYWRpbywgZW5mb3JjaW5nIHRoZSBBUEkgZm9yIHRvZ2dsZV9yYWRpbworICogY2FsbHMgYW5kIGhhbmRsaW5nIGFsbCB0aGUgcmVkIHRhcGUgc3VjaCBhcyBpc3N1aW5nIG5vdGlmaWNhdGlvbnMKKyAqIGlmIHRoZSBjYWxsIGlzIHN1Y2Nlc3NmdWwuCisgKgorICogTm90ZSB0aGF0IEBmb3JjZSBjYW5ub3Qgb3ZlcnJpZGUgYSAocG9zc2libHkgY2FjaGVkKSBzdGF0ZSBvZgorICogUkZLSUxMX1NUQVRFX0hBUkRfQkxPQ0tFRC4gIEFueSBkZXZpY2UgbWFraW5nIHVzZSBvZgorICogUkZLSUxMX1NUQVRFX0hBUkRfQkxPQ0tFRCBpbXBsZW1lbnRzIGVpdGhlciBnZXRfc3RhdGUoKSBvcgorICogcmZraWxsX2ZvcmNlX3N0YXRlKCksIHNvIHRoZSBjYWNoZSBlaXRoZXIgaXMgYnlwYXNzZWQgb3IgdmFsaWQuCisgKgorICogTm90ZSB0aGF0IHdlIGRvIGNhbGwgdG9nZ2xlX3JhZGlvIGZvciBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VECisgKiBldmVuIGlmIHRoZSByYWRpbyBpcyBpbiBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEIHN0YXRlLCBzbyBhcyB0bworICogZ2l2ZSB0aGUgZHJpdmVyIGEgaGludCB0aGF0IGl0IHNob3VsZCBkb3VibGUtQkxPQ0sgdGhlIHRyYW5zbWl0dGVyLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgYXF1aXJlZCByZmtpbGxfbXV0ZXguCisgKi8KIHN0YXRpYyBpbnQgcmZraWxsX3RvZ2dsZV9yYWRpbyhzdHJ1Y3QgcmZraWxsICpyZmtpbGwsCi0JCQkJZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpCisJCQkJZW51bSByZmtpbGxfc3RhdGUgc3RhdGUsCisJCQkJaW50IGZvcmNlKQogewogCWludCByZXR2YWwgPSAwOworCWVudW0gcmZraWxsX3N0YXRlIG9sZHN0YXRlLCBuZXdzdGF0ZTsKIAotCWlmIChzdGF0ZSAhPSByZmtpbGwtPnN0YXRlKSB7CisJb2xkc3RhdGUgPSByZmtpbGwtPnN0YXRlOworCisJaWYgKHJma2lsbC0+Z2V0X3N0YXRlICYmICFmb3JjZSAmJgorCSAgICAhcmZraWxsLT5nZXRfc3RhdGUocmZraWxsLT5kYXRhLCAmbmV3c3RhdGUpKQorCQlyZmtpbGwtPnN0YXRlID0gbmV3c3RhdGU7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEOgorCQkvKiB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIHJlZnJlc2hpbmcgaGFyZHdhcmUgc3RhdGUsCisJCSAqIHN1Y2ggYXMgb24gcmVzdW1lICovCisJCXN0YXRlID0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDsKKwkJYnJlYWs7CisJY2FzZSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOgorCQkvKiBmb3JjZSBjYW4ndCBvdmVycmlkZSB0aGlzLCBvbmx5IHJma2lsbF9mb3JjZV9zdGF0ZSgpIGNhbiAqLworCQlpZiAocmZraWxsLT5zdGF0ZSA9PSBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJYnJlYWs7CisJY2FzZSBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEOgorCQkvKiBub3RoaW5nIHRvIGRvLCB3ZSB3YW50IHRvIGdpdmUgZHJpdmVycyB0aGUgaGludCB0byBkb3VibGUKKwkJICogQkxPQ0sgZXZlbiBhIHRyYW5zbWl0dGVyIHRoYXQgaXMgYWxyZWFkeSBpbiBzdGF0ZQorCQkgKiBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEICovCisJCWJyZWFrOworCX0KKworCWlmIChmb3JjZSB8fCBzdGF0ZSAhPSByZmtpbGwtPnN0YXRlKSB7CiAJCXJldHZhbCA9IHJma2lsbC0+dG9nZ2xlX3JhZGlvKHJma2lsbC0+ZGF0YSwgc3RhdGUpOwotCQlpZiAoIXJldHZhbCkgeworCQkvKiBuZXZlciBhbGxvdyBhIEhBUkQtPlNPRlQgZG93bmdyYWRlISAqLworCQlpZiAoIXJldHZhbCAmJiByZmtpbGwtPnN0YXRlICE9IFJGS0lMTF9TVEFURV9IQVJEX0JMT0NLRUQpCiAJCQlyZmtpbGwtPnN0YXRlID0gc3RhdGU7Ci0JCQlyZmtpbGxfbGVkX3RyaWdnZXIocmZraWxsLCBzdGF0ZSk7Ci0JCX0KKwl9CisKKwlpZiAoZm9yY2UgfHwgcmZraWxsLT5zdGF0ZSAhPSBvbGRzdGF0ZSkgeworCQlyZmtpbGxfbGVkX3RyaWdnZXIocmZraWxsLCByZmtpbGwtPnN0YXRlKTsKKwkJbm90aWZ5X3Jma2lsbF9zdGF0ZV9jaGFuZ2UocmZraWxsKTsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtODIsNyArMjA3LDYgQEAKICAqIGEgc3BlY2lmaWMgc3dpdGNoIGlzIGNsYWltZWQgYnkgdXNlcnNwYWNlIGluIHdoaWNoIGNhc2UgaXQgaXMKICAqIGxlZnQgYWxvbmUuCiAgKi8KLQogdm9pZCByZmtpbGxfc3dpdGNoX2FsbChlbnVtIHJma2lsbF90eXBlIHR5cGUsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKQEAgLTkzLDEzICsyMTcsNjYgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmZraWxsLCAmcmZraWxsX2xpc3QsIG5vZGUpIHsKIAkJaWYgKCghcmZraWxsLT51c2VyX2NsYWltKSAmJiAocmZraWxsLT50eXBlID09IHR5cGUpKQotCQkJcmZraWxsX3RvZ2dsZV9yYWRpbyhyZmtpbGwsIHN0YXRlKTsKKwkJCXJma2lsbF90b2dnbGVfcmFkaW8ocmZraWxsLCBzdGF0ZSwgMCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZyZmtpbGxfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChyZmtpbGxfc3dpdGNoX2FsbCk7CiAKKy8qKgorICogcmZraWxsX2VwbyAtIGVtZXJnZW5jeSBwb3dlciBvZmYgYWxsIHRyYW5zbWl0dGVycworICoKKyAqIFRoaXMga2lja3MgYWxsIHJma2lsbCBkZXZpY2VzIHRvIFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQsIGlnbm9yaW5nCisgKiBldmVyeXRoaW5nIGluIGl0cyBwYXRoIGJ1dCByZmtpbGxfbXV0ZXguCisgKi8KK3ZvaWQgcmZraWxsX2Vwbyh2b2lkKQoreworCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKKworCW11dGV4X2xvY2soJnJma2lsbF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZmtpbGwsICZyZmtpbGxfbGlzdCwgbm9kZSkgeworCQlyZmtpbGxfdG9nZ2xlX3JhZGlvKHJma2lsbCwgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCwgMSk7CisJfQorCW11dGV4X3VubG9jaygmcmZraWxsX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJma2lsbF9lcG8pOworCisvKioKKyAqIHJma2lsbF9mb3JjZV9zdGF0ZSAtIEZvcmNlIHRoZSBpbnRlcm5hbCByZmtpbGwgcmFkaW8gc3RhdGUKKyAqIEByZmtpbGw6IHBvaW50ZXIgdG8gdGhlIHJma2lsbCBjbGFzcyB0byBtb2RpZnkuCisgKiBAc3RhdGU6IHRoZSBjdXJyZW50IHJhZGlvIHN0YXRlIHRoZSBjbGFzcyBzaG91bGQgYmUgZm9yY2VkIHRvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHJhZGlvIGNhY2hlZAorICogYnkgdGhlIHJma2lsbCBjbGFzcy4gIEl0IHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIGRyaXZlciBnZXRzCisgKiBhIG5vdGlmaWNhdGlvbiBieSB0aGUgZmlybXdhcmUvaGFyZHdhcmUgb2YgdGhlIGN1cnJlbnQgKnJlYWwqCisgKiBzdGF0ZSBvZiB0aGUgcmFkaW8gcmZraWxsIHN3aXRjaC4KKyAqCisgKiBJdCBtYXkgbm90IGJlIGNhbGxlZCBmcm9tIGFuIGF0b21pYyBjb250ZXh0LgorICovCitpbnQgcmZraWxsX2ZvcmNlX3N0YXRlKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpCit7CisJZW51bSByZmtpbGxfc3RhdGUgb2xkc3RhdGU7CisKKwlpZiAoc3RhdGUgIT0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCAmJgorCSAgICBzdGF0ZSAhPSBSRktJTExfU1RBVEVfVU5CTE9DS0VEICYmCisJICAgIHN0YXRlICE9IFJGS0lMTF9TVEFURV9IQVJEX0JMT0NLRUQpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcmZraWxsLT5tdXRleCk7CisKKwlvbGRzdGF0ZSA9IHJma2lsbC0+c3RhdGU7CisJcmZraWxsLT5zdGF0ZSA9IHN0YXRlOworCisJaWYgKHN0YXRlICE9IG9sZHN0YXRlKQorCQlub3RpZnlfcmZraWxsX3N0YXRlX2NoYW5nZShyZmtpbGwpOworCisJbXV0ZXhfdW5sb2NrKCZyZmtpbGwtPm11dGV4KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChyZmtpbGxfZm9yY2Vfc3RhdGUpOworCiBzdGF0aWMgc3NpemVfdCByZmtpbGxfbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljaGFyICpidWYpCkBAIC0xMDksMzEgKzI4NiwzMSBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCByZmtpbGwtPm5hbWUpOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqcmZraWxsX2dldF90eXBlX3N0cihlbnVtIHJma2lsbF90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBSRktJTExfVFlQRV9XTEFOOgorCQlyZXR1cm4gIndsYW4iOworCWNhc2UgUkZLSUxMX1RZUEVfQkxVRVRPT1RIOgorCQlyZXR1cm4gImJsdWV0b290aCI7CisJY2FzZSBSRktJTExfVFlQRV9VV0I6CisJCXJldHVybiAidWx0cmF3aWRlYmFuZCI7CisJY2FzZSBSRktJTExfVFlQRV9XSU1BWDoKKwkJcmV0dXJuICJ3aW1heCI7CisJY2FzZSBSRktJTExfVFlQRV9XV0FOOgorCQlyZXR1cm4gInd3YW4iOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKwogc3RhdGljIHNzaXplX3QgcmZraWxsX3R5cGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCByZmtpbGwgKnJma2lsbCA9IHRvX3Jma2lsbChkZXYpOwotCWNvbnN0IGNoYXIgKnR5cGU7CiAKLQlzd2l0Y2ggKHJma2lsbC0+dHlwZSkgewotCWNhc2UgUkZLSUxMX1RZUEVfV0xBTjoKLQkJdHlwZSA9ICJ3bGFuIjsKLQkJYnJlYWs7Ci0JY2FzZSBSRktJTExfVFlQRV9CTFVFVE9PVEg6Ci0JCXR5cGUgPSAiYmx1ZXRvb3RoIjsKLQkJYnJlYWs7Ci0JY2FzZSBSRktJTExfVFlQRV9VV0I6Ci0JCXR5cGUgPSAidWx0cmF3aWRlYmFuZCI7Ci0JCWJyZWFrOwotCWNhc2UgUkZLSUxMX1RZUEVfV0lNQVg6Ci0JCXR5cGUgPSAid2ltYXgiOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdHlwZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHJma2lsbF9nZXRfdHlwZV9zdHIocmZraWxsLT50eXBlKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJma2lsbF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTE0Miw2ICszMTksNyBAQAogewogCXN0cnVjdCByZmtpbGwgKnJma2lsbCA9IHRvX3Jma2lsbChkZXYpOwogCisJdXBkYXRlX3Jma2lsbF9zdGF0ZShyZmtpbGwpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCByZmtpbGwtPnN0YXRlKTsKIH0KIApAQCAtMTU2LDEwICszMzQsMTQgQEAKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKKwkvKiBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEIGlzIGlsbGVnYWwgaGVyZS4uLiAqLworCWlmIChzdGF0ZSAhPSBSRktJTExfU1RBVEVfVU5CTE9DS0VEICYmCisJICAgIHN0YXRlICE9IFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmZraWxsLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JZXJyb3IgPSByZmtpbGxfdG9nZ2xlX3JhZGlvKHJma2lsbCwKLQkJCXN0YXRlID8gUkZLSUxMX1NUQVRFX09OIDogUkZLSUxMX1NUQVRFX09GRik7CisJZXJyb3IgPSByZmtpbGxfdG9nZ2xlX3JhZGlvKHJma2lsbCwgc3RhdGUsIDApOwogCW11dGV4X3VubG9jaygmcmZraWxsLT5tdXRleCk7CiAKIAlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IGNvdW50OwpAQCAtMjAwLDcgKzM4Miw4IEBACiAJaWYgKHJma2lsbC0+dXNlcl9jbGFpbSAhPSBjbGFpbSkgewogCQlpZiAoIWNsYWltKQogCQkJcmZraWxsX3RvZ2dsZV9yYWRpbyhyZmtpbGwsCi0JCQkJCSAgICByZmtpbGxfc3RhdGVzW3Jma2lsbC0+dHlwZV0pOworCQkJCQkgICAgcmZraWxsX3N0YXRlc1tyZmtpbGwtPnR5cGVdLAorCQkJCQkgICAgMCk7CiAJCXJma2lsbC0+dXNlcl9jbGFpbSA9IGNsYWltOwogCX0KIApAQCAtMjMzLDEyICs0MTYsMTIgQEAKIAogCWlmIChkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9IHN0YXRlLmV2ZW50KSB7CiAJCWlmIChzdGF0ZS5ldmVudCAmIFBNX0VWRU5UX1NMRUVQKSB7CisJCQkvKiBTdG9wIHRyYW5zbWl0dGVyLCBrZWVwIHN0YXRlLCBubyBub3RpZmllcyAqLworCQkJdXBkYXRlX3Jma2lsbF9zdGF0ZShyZmtpbGwpOworCiAJCQltdXRleF9sb2NrKCZyZmtpbGwtPm11dGV4KTsKLQotCQkJaWYgKHJma2lsbC0+c3RhdGUgPT0gUkZLSUxMX1NUQVRFX09OKQotCQkJCXJma2lsbC0+dG9nZ2xlX3JhZGlvKHJma2lsbC0+ZGF0YSwKLQkJCQkJCSAgICAgUkZLSUxMX1NUQVRFX09GRik7Ci0KKwkJCXJma2lsbC0+dG9nZ2xlX3JhZGlvKHJma2lsbC0+ZGF0YSwKKwkJCQkJCVJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQpOwogCQkJbXV0ZXhfdW5sb2NrKCZyZmtpbGwtPm11dGV4KTsKIAkJfQogCkBAIC0yNTUsOCArNDM4LDggQEAKIAlpZiAoZGV2LT5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPSBQTV9FVkVOVF9PTikgewogCQltdXRleF9sb2NrKCZyZmtpbGwtPm11dGV4KTsKIAotCQlpZiAocmZraWxsLT5zdGF0ZSA9PSBSRktJTExfU1RBVEVfT04pCi0JCQlyZmtpbGwtPnRvZ2dsZV9yYWRpbyhyZmtpbGwtPmRhdGEsIFJGS0lMTF9TVEFURV9PTik7CisJCS8qIHJlc3RvcmUgcmFkaW8gc3RhdGUgQU5EIG5vdGlmeSBldmVyeWJvZHkgKi8KKwkJcmZraWxsX3RvZ2dsZV9yYWRpbyhyZmtpbGwsIHJma2lsbC0+c3RhdGUsIDEpOwogCiAJCW11dGV4X3VubG9jaygmcmZraWxsLT5tdXRleCk7CiAJfQpAQCAtMjY5LDM0ICs0NTIsNzEgQEAKICNkZWZpbmUgcmZraWxsX3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAorc3RhdGljIGludCByZmtpbGxfYmxvY2tpbmdfdWV2ZW50X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJCXVuc2lnbmVkIGxvbmcgZXZlbnRpZCwKKwkJCQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmZraWxsICpyZmtpbGwgPSAoc3RydWN0IHJma2lsbCAqKWRhdGE7CisKKwlzd2l0Y2ggKGV2ZW50aWQpIHsKKwljYXNlIFJGS0lMTF9TVEFURV9DSEFOR0VEOgorCQlrb2JqZWN0X3VldmVudCgmcmZraWxsLT5kZXYua29iaiwgS09CSl9DSEFOR0UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcmZraWxsX2Jsb2NraW5nX3VldmVudF9uYiA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHJma2lsbF9ibG9ja2luZ191ZXZlbnRfbm90aWZpZXIsCisJLnByaW9yaXR5CT0gMCwKK307CisKK3N0YXRpYyBpbnQgcmZraWxsX2Rldl91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCit7CisJc3RydWN0IHJma2lsbCAqcmZraWxsID0gdG9fcmZraWxsKGRldik7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJSRktJTExfTkFNRT0lcyIsIHJma2lsbC0+bmFtZSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJZXJyb3IgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJSRktJTExfVFlQRT0lcyIsCisJCQkJcmZraWxsX2dldF90eXBlX3N0cihyZmtpbGwtPnR5cGUpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwllcnJvciA9IGFkZF91ZXZlbnRfdmFyKGVudiwgIlJGS0lMTF9TVEFURT0lZCIsIHJma2lsbC0+c3RhdGUpOworCXJldHVybiBlcnJvcjsKK30KKwogc3RhdGljIHN0cnVjdCBjbGFzcyByZmtpbGxfY2xhc3MgPSB7CiAJLm5hbWUJCT0gInJma2lsbCIsCiAJLmRldl9yZWxlYXNlCT0gcmZraWxsX3JlbGVhc2UsCiAJLmRldl9hdHRycwk9IHJma2lsbF9kZXZfYXR0cnMsCiAJLnN1c3BlbmQJPSByZmtpbGxfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHJma2lsbF9yZXN1bWUsCisJLmRldl91ZXZlbnQJPSByZmtpbGxfZGV2X3VldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgcmZraWxsX2FkZF9zd2l0Y2goc3RydWN0IHJma2lsbCAqcmZraWxsKQogewotCWludCBlcnJvcjsKLQogCW11dGV4X2xvY2soJnJma2lsbF9tdXRleCk7CiAKLQllcnJvciA9IHJma2lsbF90b2dnbGVfcmFkaW8ocmZraWxsLCByZmtpbGxfc3RhdGVzW3Jma2lsbC0+dHlwZV0pOwotCWlmICghZXJyb3IpCi0JCWxpc3RfYWRkX3RhaWwoJnJma2lsbC0+bm9kZSwgJnJma2lsbF9saXN0KTsKKwlyZmtpbGxfdG9nZ2xlX3JhZGlvKHJma2lsbCwgcmZraWxsX3N0YXRlc1tyZmtpbGwtPnR5cGVdLCAwKTsKKworCWxpc3RfYWRkX3RhaWwoJnJma2lsbC0+bm9kZSwgJnJma2lsbF9saXN0KTsKIAogCW11dGV4X3VubG9jaygmcmZraWxsX211dGV4KTsKIAotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcmZraWxsX3JlbW92ZV9zd2l0Y2goc3RydWN0IHJma2lsbCAqcmZraWxsKQogewogCW11dGV4X2xvY2soJnJma2lsbF9tdXRleCk7CiAJbGlzdF9kZWxfaW5pdCgmcmZraWxsLT5ub2RlKTsKLQlyZmtpbGxfdG9nZ2xlX3JhZGlvKHJma2lsbCwgUkZLSUxMX1NUQVRFX09GRik7CisJcmZraWxsX3RvZ2dsZV9yYWRpbyhyZmtpbGwsIFJGS0lMTF9TVEFURV9TT0ZUX0JMT0NLRUQsIDEpOwogCW11dGV4X3VubG9jaygmcmZraWxsX211dGV4KTsKIH0KIApAQCAtNDEyLDcgKzYzMiw3IEBACiBFWFBPUlRfU1lNQk9MKHJma2lsbF9yZWdpc3Rlcik7CiAKIC8qKgotICogcmZraWxsX3VucmVnaXN0ZXIgLSBVZWdpc3RlciBhIHJma2lsbCBzdHJ1Y3R1cmUuCisgKiByZmtpbGxfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgYSByZmtpbGwgc3RydWN0dXJlLgogICogQHJma2lsbDogcmZraWxsIHN0cnVjdHVyZSB0byBiZSB1bnJlZ2lzdGVyZWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIG5ldHdvcmsgZHJpdmVyIGR1cmluZyBkZXZpY2UKQEAgLTQzNiw4ICs2NTYsMTMgQEAKIAlpbnQgZXJyb3I7CiAJaW50IGk7CiAKKwkvKiBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEIGlzIGlsbGVnYWwgaGVyZS4uLiAqLworCWlmIChyZmtpbGxfZGVmYXVsdF9zdGF0ZSAhPSBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEICYmCisJICAgIHJma2lsbF9kZWZhdWx0X3N0YXRlICE9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpCisJCXJldHVybiAtRUlOVkFMOworCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmZraWxsX3N0YXRlcyk7IGkrKykKLQkJcmZraWxsX3N0YXRlc1tpXSA9IFJGS0lMTF9TVEFURV9PTjsKKwkJcmZraWxsX3N0YXRlc1tpXSA9IHJma2lsbF9kZWZhdWx0X3N0YXRlOwogCiAJZXJyb3IgPSBjbGFzc19yZWdpc3RlcigmcmZraWxsX2NsYXNzKTsKIAlpZiAoZXJyb3IpIHsKQEAgLTQ0NSwxMSArNjcwLDE0IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKKwlyZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoJnJma2lsbF9ibG9ja2luZ191ZXZlbnRfbmIpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByZmtpbGxfZXhpdCh2b2lkKQogeworCXVucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCZyZmtpbGxfYmxvY2tpbmdfdWV2ZW50X25iKTsKIAljbGFzc191bnJlZ2lzdGVyKCZyZmtpbGxfY2xhc3MpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcm9zZS9hZl9yb3NlLmMgYi9uZXQvcm9zZS9hZl9yb3NlLmMKaW5kZXggMWViZjY1Mi4uYTdmMWNlMSAxMDA2NDQKLS0tIGEvbmV0L3Jvc2UvYWZfcm9zZS5jCisrKyBiL25ldC9yb3NlL2FmX3Jvc2UuYwpAQCAtNzQsNiArNzQsMjAgQEAKICAqIHNlcGFyYXRlIGNsYXNzIHNpbmNlIHRoZXkgYWx3YXlzIG5lc3QuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcm9zZV9uZXRkZXZfeG1pdF9sb2NrX2tleTsKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcm9zZV9uZXRkZXZfYWRkcl9sb2NrX2tleTsKKworc3RhdGljIHZvaWQgcm9zZV9zZXRfbG9ja2RlcF9vbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLAorCQkJCSB2b2lkICpfdW51c2VkKQoreworCWxvY2tkZXBfc2V0X2NsYXNzKCZ0eHEtPl94bWl0X2xvY2ssICZyb3NlX25ldGRldl94bWl0X2xvY2tfa2V5KTsKK30KKworc3RhdGljIHZvaWQgcm9zZV9zZXRfbG9ja2RlcF9rZXkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlsb2NrZGVwX3NldF9jbGFzcygmZGV2LT5hZGRyX2xpc3RfbG9jaywgJnJvc2VfbmV0ZGV2X2FkZHJfbG9ja19rZXkpOworCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIHJvc2Vfc2V0X2xvY2tkZXBfb25lLCBOVUxMKTsKK30KIAogLyoKICAqCUNvbnZlcnQgYSBST1NFIGFkZHJlc3MgaW50byB0ZXh0LgpAQCAtMTk3LDcgKzIxMSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGV2ZW50ICE9IE5FVERFVl9ET1dOKQpAQCAtNTY2LDEzICs1ODAsMTEgQEAKICNlbmRpZgogCiAJc2stPnNrX3R5cGUgICAgID0gb3NrLT5za190eXBlOwotCXNrLT5za19zb2NrZXQgICA9IG9zay0+c2tfc29ja2V0OwogCXNrLT5za19wcmlvcml0eSA9IG9zay0+c2tfcHJpb3JpdHk7CiAJc2stPnNrX3Byb3RvY29sID0gb3NrLT5za19wcm90b2NvbDsKIAlzay0+c2tfcmN2YnVmICAgPSBvc2stPnNrX3JjdmJ1ZjsKIAlzay0+c2tfc25kYnVmICAgPSBvc2stPnNrX3NuZGJ1ZjsKIAlzay0+c2tfc3RhdGUgICAgPSBUQ1BfRVNUQUJMSVNIRUQ7Ci0Jc2stPnNrX3NsZWVwICAgID0gb3NrLT5za19zbGVlcDsKIAlzb2NrX2NvcHlfZmxhZ3Moc2ssIG9zayk7CiAKIAlpbml0X3RpbWVyKCZyb3NlLT50aW1lcik7CkBAIC03NTksNyArNzcxLDcgQEAKIAlzb2NrLT5zdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwogCiAJcm9zZS0+bmVpZ2hib3VyID0gcm9zZV9nZXRfbmVpZ2goJmFkZHItPnNyb3NlX2FkZHIsICZjYXVzZSwKLQkJCQkJICZkaWFnbm9zdGljKTsKKwkJCQkJICZkaWFnbm9zdGljLCAwKTsKIAlpZiAoIXJvc2UtPm5laWdoYm91cikgewogCQllcnIgPSAtRU5FVFVOUkVBQ0g7CiAJCWdvdG8gb3V0X3JlbGVhc2U7CkBAIC04NTUsNyArODY3LDcgQEAKIAogCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7CiAJLyogVHJ5IG5leHQgbmVpZ2hib3VyICovCi0JCXJvc2UtPm5laWdoYm91ciA9IHJvc2VfZ2V0X25laWdoKCZhZGRyLT5zcm9zZV9hZGRyLCAmY2F1c2UsICZkaWFnbm9zdGljKTsKKwkJcm9zZS0+bmVpZ2hib3VyID0gcm9zZV9nZXRfbmVpZ2goJmFkZHItPnNyb3NlX2FkZHIsICZjYXVzZSwgJmRpYWdub3N0aWMsIDApOwogCQlpZiAocm9zZS0+bmVpZ2hib3VyKQogCQkJZ290byByb3NlX3RyeV9uZXh0X25laWdoOwogCkBAIC05MjQsMTQgKzkzNiwxMiBAQAogCQlnb3RvIG91dF9yZWxlYXNlOwogCiAJbmV3c2sgPSBza2ItPnNrOwotCW5ld3NrLT5za19zb2NrZXQgPSBuZXdzb2NrOwotCW5ld3NrLT5za19zbGVlcCA9ICZuZXdzb2NrLT53YWl0OworCXNvY2tfZ3JhZnQobmV3c2ssIG5ld3NvY2spOwogCiAJLyogTm93IGF0dGFjaCB1cCB0aGUgbmV3IHNvY2tldCAqLwogCXNrYi0+c2sgPSBOVUxMOwogCWtmcmVlX3NrYihza2IpOwogCXNrLT5za19hY2tfYmFja2xvZy0tOwotCW5ld3NvY2stPnNrID0gbmV3c2s7CiAKIG91dF9yZWxlYXNlOgogCXJlbGVhc2Vfc29jayhzayk7CkBAIC0xNTgwLDcgKzE1OTAsNyBAQAogCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJCWdvdG8gZmFpbDsKIAkJfQotCQlsb2NrZGVwX3NldF9jbGFzcygmZGV2LT5feG1pdF9sb2NrLCAmcm9zZV9uZXRkZXZfeG1pdF9sb2NrX2tleSk7CisJCXJvc2Vfc2V0X2xvY2tkZXBfa2V5KGRldik7CiAJCWRldl9yb3NlW2ldID0gZGV2OwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCmluZGV4IGJkNTkzODcuLmE4MTA2NmEgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2Vfcm91dGUuYworKysgYi9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKQEAgLTY2MiwyNyArNjYyLDM0IEBACiB9CiAKIC8qCi0gKglGaW5kIGEgbmVpZ2hib3VyIGdpdmVuIGEgUk9TRSBhZGRyZXNzLgorICoJRmluZCBhIG5laWdoYm91ciBvciBhIHJvdXRlIGdpdmVuIGEgUk9TRSBhZGRyZXNzLgogICovCiBzdHJ1Y3Qgcm9zZV9uZWlnaCAqcm9zZV9nZXRfbmVpZ2gocm9zZV9hZGRyZXNzICphZGRyLCB1bnNpZ25lZCBjaGFyICpjYXVzZSwKLQl1bnNpZ25lZCBjaGFyICpkaWFnbm9zdGljKQorCXVuc2lnbmVkIGNoYXIgKmRpYWdub3N0aWMsIGludCBuZXcpCiB7CiAJc3RydWN0IHJvc2VfbmVpZ2ggKnJlcyA9IE5VTEw7CiAJc3RydWN0IHJvc2Vfbm9kZSAqbm9kZTsKIAlpbnQgZmFpbGVkID0gMDsKIAlpbnQgaTsKIAotCXNwaW5fbG9ja19iaCgmcm9zZV9ub2RlX2xpc3RfbG9jayk7CisJaWYgKCFuZXcpIHNwaW5fbG9ja19iaCgmcm9zZV9ub2RlX2xpc3RfbG9jayk7CiAJZm9yIChub2RlID0gcm9zZV9ub2RlX2xpc3Q7IG5vZGUgIT0gTlVMTDsgbm9kZSA9IG5vZGUtPm5leHQpIHsKIAkJaWYgKHJvc2VjbXBtKGFkZHIsICZub2RlLT5hZGRyZXNzLCBub2RlLT5tYXNrKSA9PSAwKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+Y291bnQ7IGkrKykgewotCQkJCWlmICghcm9zZV9mdGltZXJfcnVubmluZyhub2RlLT5uZWlnaGJvdXJbaV0pKSB7Ci0JCQkJCXJlcyA9IG5vZGUtPm5laWdoYm91cltpXTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfSBlbHNlCi0JCQkJCWZhaWxlZCA9IDE7CisJCQkJaWYgKG5ldykgeworCQkJCQlpZiAobm9kZS0+bmVpZ2hib3VyW2ldLT5yZXN0YXJ0ZWQpIHsKKwkJCQkJCXJlcyA9IG5vZGUtPm5laWdoYm91cltpXTsKKwkJCQkJCWdvdG8gb3V0OworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlpZiAoIXJvc2VfZnRpbWVyX3J1bm5pbmcobm9kZS0+bmVpZ2hib3VyW2ldKSkgeworCQkJCQkJcmVzID0gbm9kZS0+bmVpZ2hib3VyW2ldOworCQkJCQkJZ290byBvdXQ7CisJCQkJCX0gZWxzZQorCQkJCQkJZmFpbGVkID0gMTsKKwkJCQl9CiAJCQl9Ci0JCQlicmVhazsKIAkJfQogCX0KIApAQCAtNjk1LDcgKzcwMiw3IEBACiAJfQogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnJvc2Vfbm9kZV9saXN0X2xvY2spOworCWlmICghbmV3KSBzcGluX3VubG9ja19iaCgmcm9zZV9ub2RlX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTAxOCw3ICsxMDI1LDcgQEAKIAkJcm9zZV9yb3V0ZSA9IHJvc2Vfcm91dGUtPm5leHQ7CiAJfQogCi0JaWYgKChuZXdfbmVpZ2ggPSByb3NlX2dldF9uZWlnaChkZXN0X2FkZHIsICZjYXVzZSwgJmRpYWdub3N0aWMpKSA9PSBOVUxMKSB7CisJaWYgKChuZXdfbmVpZ2ggPSByb3NlX2dldF9uZWlnaChkZXN0X2FkZHIsICZjYXVzZSwgJmRpYWdub3N0aWMsIDEpKSA9PSBOVUxMKSB7CiAJCXJvc2VfdHJhbnNtaXRfY2xlYXJfcmVxdWVzdChyb3NlX25laWdoLCBsY2ksIGNhdXNlLCBkaWFnbm9zdGljKTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWlucHV0LmMgYi9uZXQvcnhycGMvYXItaW5wdXQuYwppbmRleCBmOGE2OTllLi5mOThjODAyIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItaW5wdXQuYworKysgYi9uZXQvcnhycGMvYXItaW5wdXQuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPG5ldC9hZl9yeHJwYy5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgImFyLWludGVybmFsLmgiCiAKIHVuc2lnbmVkIGxvbmcgcnhycGNfYWNrX3RpbWVvdXQgPSAxOwpAQCAtNzA4LDEyICs3MDksMTIgQEAKIAlpZiAoc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKIAkJcnhycGNfZnJlZV9za2Ioc2tiKTsKIAkJcnhycGNfcHV0X2xvY2FsKGxvY2FsKTsKLQkJVURQX0lOQ19TVEFUU19CSChVRFBfTUlCX0lORVJST1JTLCAwKTsKKwkJVURQX0lOQ19TVEFUU19CSCgmaW5pdF9uZXQsIFVEUF9NSUJfSU5FUlJPUlMsIDApOwogCQlfbGVhdmUoIiBbQ1NVTSBmYWlsZWRdIik7CiAJCXJldHVybjsKIAl9CiAKLQlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5EQVRBR1JBTVMsIDApOworCVVEUF9JTkNfU1RBVFNfQkgoJmluaXRfbmV0LCBVRFBfTUlCX0lOREFUQUdSQU1TLCAwKTsKIAogCS8qIHRoZSBzb2NrZXQgYnVmZmVyIHdlIGhhdmUgaXMgb3duZWQgYnkgVURQLCB3aXRoIFVEUCdzIGRhdGEgYWxsIG92ZXIKIAkgKiBpdCwgYnV0IHdlIHJlYWxseSB3YW50IG91ciBvd24gKi8KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jIGIvbmV0L3NjaGVkL2FjdF9nYWN0LmMKaW5kZXggNDIyODcyYy4uYWMwNDI4OSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9nYWN0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9nYWN0LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogI2Vsc2UKIAlhY3Rpb24gPSBnYWN0LT50Y2ZfYWN0aW9uOwogI2VuZGlmCi0JZ2FjdC0+dGNmX2JzdGF0cy5ieXRlcyArPSBza2ItPmxlbjsKKwlnYWN0LT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAlnYWN0LT50Y2ZfYnN0YXRzLnBhY2tldHMrKzsKIAlpZiAoYWN0aW9uID09IFRDX0FDVF9TSE9UKQogCQlnYWN0LT50Y2ZfcXN0YXRzLmRyb3BzKys7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lwdC5jIGIvbmV0L3NjaGVkL2FjdF9pcHQuYwppbmRleCBkYTY5NmZkLi5kMTI2M2IzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lwdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfaXB0LmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCXNwaW5fbG9jaygmaXB0LT50Y2ZfbG9jayk7CiAKIAlpcHQtPnRjZl90bS5sYXN0dXNlID0gamlmZmllczsKLQlpcHQtPnRjZl9ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJaXB0LT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAlpcHQtPnRjZl9ic3RhdHMucGFja2V0cysrOwogCiAJLyogeWVzLCB3ZSBoYXZlIHRvIHdvcnJ5IGFib3V0IGJvdGggaW4gYW5kIG91dCBkZXYKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfbWlycmVkLmMgYi9uZXQvc2NoZWQvYWN0X21pcnJlZC5jCmluZGV4IDFhZmYwMDUuLjcwMzQxYzAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfbWlycmVkLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9taXJyZWQuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCWlmIChza2IyICE9IE5VTEwpCiAJCQlrZnJlZV9za2Ioc2tiMik7CiAJCW0tPnRjZl9xc3RhdHMub3ZlcmxpbWl0cysrOwotCQltLT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHNrYi0+bGVuOworCQltLT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAkJbS0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CiAJCXNwaW5fdW5sb2NrKCZtLT50Y2ZfbG9jayk7CiAJCS8qIHNob3VsZCB3ZSBiZSBhc2tpbmcgZm9yIHBhY2tldCB0byBiZSBkcm9wcGVkPwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJCWdvdG8gYmFkX21pcnJlZDsKIAl9CiAKLQltLT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHNrYjItPmxlbjsKKwltLT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiMik7CiAJbS0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CiAJaWYgKCEoYXQgJiBBVF9FR1JFU1MpKQogCQlpZiAobS0+dGNmbV9va19wdXNoKQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9uYXQuYyBiL25ldC9zY2hlZC9hY3RfbmF0LmMKaW5kZXggMGEzYzgzMy4uN2IzOWVkNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9uYXQuYworKysgYi9uZXQvc2NoZWQvYWN0X25hdC5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAllZ3Jlc3MgPSBwLT5mbGFncyAmIFRDQV9OQVRfRkxBR19FR1JFU1M7CiAJYWN0aW9uID0gcC0+dGNmX2FjdGlvbjsKIAotCXAtPnRjZl9ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJcC0+dGNmX2JzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJcC0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CiAKIAlzcGluX3VubG9jaygmcC0+dGNmX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCmluZGV4IDNjYzRjYjkuLmQ1ZjRlMzQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYworKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKQEAgLTE4Miw3ICsxODIsNyBAQAogYmFkOgogCXAtPnRjZl9xc3RhdHMub3ZlcmxpbWl0cysrOwogZG9uZToKLQlwLT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHNrYi0+bGVuOworCXAtPnRjZl9ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwogCXAtPnRjZl9ic3RhdHMucGFja2V0cysrOwogCXNwaW5fdW5sb2NrKCZwLT50Y2ZfbG9jayk7CiAJcmV0dXJuIHAtPnRjZl9hY3Rpb247CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwppbmRleCAwODk4MTIwLi4zMmMzZjlkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCisrKyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogCiAJc3Bpbl9sb2NrKCZwb2xpY2UtPnRjZl9sb2NrKTsKIAotCXBvbGljZS0+dGNmX2JzdGF0cy5ieXRlcyArPSBza2ItPmxlbjsKKwlwb2xpY2UtPnRjZl9ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwogCXBvbGljZS0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CiAKIAlpZiAocG9saWNlLT50Y2ZwX2V3bWFfcmF0ZSAmJgpAQCAtMjgyLDcgKzI4Miw3IEBACiAJCXJldHVybiBwb2xpY2UtPnRjZl9hY3Rpb247CiAJfQogCi0JaWYgKHNrYi0+bGVuIDw9IHBvbGljZS0+dGNmcF9tdHUpIHsKKwlpZiAocWRpc2NfcGt0X2xlbihza2IpIDw9IHBvbGljZS0+dGNmcF9tdHUpIHsKIAkJaWYgKHBvbGljZS0+dGNmcF9SX3RhYiA9PSBOVUxMKSB7CiAJCQlzcGluX3VubG9jaygmcG9saWNlLT50Y2ZfbG9jayk7CiAJCQlyZXR1cm4gcG9saWNlLT50Y2ZwX3Jlc3VsdDsKQEAgLTI5NSwxMiArMjk1LDEyIEBACiAJCQlwdG9rcyA9IHRva3MgKyBwb2xpY2UtPnRjZnBfcHRva3M7CiAJCQlpZiAocHRva3MgPiAobG9uZylMMlRfUChwb2xpY2UsIHBvbGljZS0+dGNmcF9tdHUpKQogCQkJCXB0b2tzID0gKGxvbmcpTDJUX1AocG9saWNlLCBwb2xpY2UtPnRjZnBfbXR1KTsKLQkJCXB0b2tzIC09IEwyVF9QKHBvbGljZSwgc2tiLT5sZW4pOworCQkJcHRva3MgLT0gTDJUX1AocG9saWNlLCBxZGlzY19wa3RfbGVuKHNrYikpOwogCQl9CiAJCXRva3MgKz0gcG9saWNlLT50Y2ZwX3Rva3M7CiAJCWlmICh0b2tzID4gKGxvbmcpcG9saWNlLT50Y2ZwX2J1cnN0KQogCQkJdG9rcyA9IHBvbGljZS0+dGNmcF9idXJzdDsKLQkJdG9rcyAtPSBMMlQocG9saWNlLCBza2ItPmxlbik7CisJCXRva3MgLT0gTDJUKHBvbGljZSwgcWRpc2NfcGt0X2xlbihza2IpKTsKIAkJaWYgKCh0b2tzfHB0b2tzKSA+PSAwKSB7CiAJCQlwb2xpY2UtPnRjZnBfdF9jID0gbm93OwogCQkJcG9saWNlLT50Y2ZwX3Rva3MgPSB0b2tzOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zaW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2ltcGxlLmMKaW5kZXggMWQ0MjFkMC4uZTc4NTFjZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9zaW1wbGUuYworKysgYi9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCkBAIC00MSw3ICs0MSw3IEBACiAKIAlzcGluX2xvY2soJmQtPnRjZl9sb2NrKTsKIAlkLT50Y2ZfdG0ubGFzdHVzZSA9IGppZmZpZXM7Ci0JZC0+dGNmX2JzdGF0cy5ieXRlcyArPSBza2ItPmxlbjsKKwlkLT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAlkLT50Y2ZfYnN0YXRzLnBhY2tldHMrKzsKIAogCS8qIHByaW50IHBvbGljeSBzdHJpbmcgZm9sbG93ZWQgYnkgXyB0aGVuIHBhY2tldCBjb3VudApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggOTM2MGZjOC4uZDJiNmY1NCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuYworKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCkBAIC0xMjAsNiArMTIwLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX01BWCArIDFdOworCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKIAlzdHJ1Y3QgdGNtc2cgKnQ7CiAJdTMyIHByb3RvY29sOwogCXUzMiBwcmlvOwpAQCAtMTY2LDcgKzE2Nyw4IEBACiAKIAkvKiBGaW5kIHFkaXNjICovCiAJaWYgKCFwYXJlbnQpIHsKLQkJcSA9IGRldi0+cWRpc2Nfc2xlZXBpbmc7CisJCXN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKKwkJcSA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7CiAJCXBhcmVudCA9IHEtPmhhbmRsZTsKIAl9IGVsc2UgewogCQlxID0gcWRpc2NfbG9va3VwKGRldiwgVENfSF9NQUoodC0+dGNtX3BhcmVudCkpOwpAQCAtMjAzLDYgKzIwNSw4IEBACiAJCX0KIAl9CiAKKwlyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2socSk7CisKIAlpZiAodHAgPT0gTlVMTCkgewogCQkvKiBQcm90by10Y2YgZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBuZXcgb25lICovCiAKQEAgLTI2MiwxMCArMjY2LDEwIEBACiAJCQlnb3RvIGVycm91dDsKIAkJfQogCi0JCXFkaXNjX2xvY2tfdHJlZShkZXYpOworCQlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKIAkJdHAtPm5leHQgPSAqYmFjazsKIAkJKmJhY2sgPSB0cDsKLQkJcWRpc2NfdW5sb2NrX3RyZWUoZGV2KTsKKwkJc3Bpbl91bmxvY2tfYmgocm9vdF9sb2NrKTsKIAogCX0gZWxzZSBpZiAodGNhW1RDQV9LSU5EXSAmJiBubGFfc3RyY21wKHRjYVtUQ0FfS0lORF0sIHRwLT5vcHMtPmtpbmQpKQogCQlnb3RvIGVycm91dDsKQEAgLTI3NCw5ICsyNzgsOSBAQAogCiAJaWYgKGZoID09IDApIHsKIAkJaWYgKG4tPm5sbXNnX3R5cGUgPT0gUlRNX0RFTFRGSUxURVIgJiYgdC0+dGNtX2hhbmRsZSA9PSAwKSB7Ci0JCQlxZGlzY19sb2NrX3RyZWUoZGV2KTsKKwkJCXNwaW5fbG9ja19iaChyb290X2xvY2spOwogCQkJKmJhY2sgPSB0cC0+bmV4dDsKLQkJCXFkaXNjX3VubG9ja190cmVlKGRldik7CisJCQlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKIAogCQkJdGZpbHRlcl9ub3RpZnkoc2tiLCBuLCB0cCwgZmgsIFJUTV9ERUxURklMVEVSKTsKIAkJCXRjZl9kZXN0cm95KHRwKTsKQEAgLTMzNCw3ICszMzgsNyBAQAogCXRjbS0+dGNtX2ZhbWlseSA9IEFGX1VOU1BFQzsKIAl0Y20tPnRjbV9fcGFkMSA9IDA7CiAJdGNtLT50Y21fX3BhZDEgPSAwOwotCXRjbS0+dGNtX2lmaW5kZXggPSB0cC0+cS0+ZGV2LT5pZmluZGV4OworCXRjbS0+dGNtX2lmaW5kZXggPSBxZGlzY19kZXYodHAtPnEpLT5pZmluZGV4OwogCXRjbS0+dGNtX3BhcmVudCA9IHRwLT5jbGFzc2lkOwogCXRjbS0+dGNtX2luZm8gPSBUQ19IX01BS0UodHAtPnByaW8sIHRwLT5wcm90b2NvbCk7CiAJTkxBX1BVVF9TVFJJTkcoc2tiLCBUQ0FfS0lORCwgdHAtPm9wcy0+a2luZCk7CkBAIC0zOTAsNiArMzk0LDcgQEAKIHN0YXRpYyBpbnQgdGNfZHVtcF90ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWU7CiAJaW50IHQ7CiAJaW50IHNfdDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtNDA4LDggKzQxMyw5IEBACiAJaWYgKChkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgdGNtLT50Y21faWZpbmRleCkpID09IE5VTEwpCiAJCXJldHVybiBza2ItPmxlbjsKIAorCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKIAlpZiAoIXRjbS0+dGNtX3BhcmVudCkKLQkJcSA9IGRldi0+cWRpc2Nfc2xlZXBpbmc7CisJCXEgPSBkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nOwogCWVsc2UKIAkJcSA9IHFkaXNjX2xvb2t1cChkZXYsIFRDX0hfTUFKKHRjbS0+dGNtX3BhcmVudCkpOwogCWlmICghcSkKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvdy5jIGIvbmV0L3NjaGVkL2Nsc19mbG93LmMKaW5kZXggOTcxYjg2Ny4uOGY2M2ExYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93LmMKKysrIGIvbmV0L3NjaGVkL2Nsc19mbG93LmMKQEAgLTM2LDYgKzM2LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJc3RydWN0IHRjZl9leHRzCQlleHRzOwogCXN0cnVjdCB0Y2ZfZW1hdGNoX3RyZWUJZW1hdGNoZXM7CisJc3RydWN0IHRpbWVyX2xpc3QJcGVydHVyYl90aW1lcjsKKwl1MzIJCQlwZXJ0dXJiX3BlcmlvZDsKIAl1MzIJCQloYW5kbGU7CiAKIAl1MzIJCQlua2V5czsKQEAgLTQ3LDExICs0OSw5IEBACiAJdTMyCQkJYWRkZW5kOwogCXUzMgkJCWRpdmlzb3I7CiAJdTMyCQkJYmFzZWNsYXNzOworCXUzMgkJCWhhc2hybmQ7CiB9OwogCi1zdGF0aWMgdTMyIGZsb3dfaGFzaHJuZCBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGludCBmbG93X2hhc2hybmRfaW5pdHRlZCBfX3JlYWRfbW9zdGx5OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRjZl9leHRfbWFwIGZsb3dfZXh0X21hcCA9IHsKIAkuYWN0aW9uCT0gVENBX0ZMT1dfQUNULAogCS5wb2xpY2UJPSBUQ0FfRkxPV19QT0xJQ0UsCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAkJfQogCiAJCWlmIChmLT5tb2RlID09IEZMT1dfTU9ERV9IQVNIKQotCQkJY2xhc3NpZCA9IGpoYXNoMihrZXlzLCBmLT5ua2V5cywgZmxvd19oYXNocm5kKTsKKwkJCWNsYXNzaWQgPSBqaGFzaDIoa2V5cywgZi0+bmtleXMsIGYtPmhhc2hybmQpOwogCQllbHNlIHsKIAkJCWNsYXNzaWQgPSBrZXlzWzBdOwogCQkJY2xhc3NpZCA9IChjbGFzc2lkICYgZi0+bWFzaykgXiBmLT54b3I7CkBAIC0zNjksNiArMzY5LDE1IEBACiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgdm9pZCBmbG93X3BlcnR1cmJhdGlvbih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZmxvd19maWx0ZXIgKmYgPSAoc3RydWN0IGZsb3dfZmlsdGVyICopYXJnOworCisJZ2V0X3JhbmRvbV9ieXRlcygmZi0+aGFzaHJuZCwgNCk7CisJaWYgKGYtPnBlcnR1cmJfcGVyaW9kKQorCQltb2RfdGltZXIoJmYtPnBlcnR1cmJfdGltZXIsIGppZmZpZXMgKyBmLT5wZXJ0dXJiX3BlcmlvZCk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmbG93X3BvbGljeVtUQ0FfRkxPV19NQVggKyAxXSA9IHsKIAlbVENBX0ZMT1dfS0VZU10JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbVENBX0ZMT1dfTU9ERV0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKQEAgLTM4MSw2ICszOTAsNyBAQAogCVtUQ0FfRkxPV19BQ1RdCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiAJW1RDQV9GTE9XX1BPTElDRV0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAogCVtUQ0FfRkxPV19FTUFUQ0hFU10JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtUQ0FfRkxPV19QRVJUVVJCXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiB9OwogCiBzdGF0aWMgaW50IGZsb3dfY2hhbmdlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsCkBAIC0zOTQsNiArNDA0LDcgQEAKIAlzdHJ1Y3QgdGNmX2V4dHMgZTsKIAlzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlIHQ7CiAJdW5zaWduZWQgaW50IG5rZXlzID0gMDsKKwl1bnNpZ25lZCBpbnQgcGVydHVyYl9wZXJpb2QgPSAwOwogCXUzMiBiYXNlY2xhc3MgPSAwOwogCXUzMiBrZXltYXNrID0gMDsKIAl1MzIgbW9kZTsKQEAgLTQ0Miw2ICs0NTMsMTQgQEAKIAkJCW1vZGUgPSBubGFfZ2V0X3UzMih0YltUQ0FfRkxPV19NT0RFXSk7CiAJCWlmIChtb2RlICE9IEZMT1dfTU9ERV9IQVNIICYmIG5rZXlzID4gMSkKIAkJCWdvdG8gZXJyMjsKKworCQlpZiAobW9kZSA9PSBGTE9XX01PREVfSEFTSCkKKwkJCXBlcnR1cmJfcGVyaW9kID0gZi0+cGVydHVyYl9wZXJpb2Q7CisJCWlmICh0YltUQ0FfRkxPV19QRVJUVVJCXSkgeworCQkJaWYgKG1vZGUgIT0gRkxPV19NT0RFX0hBU0gpCisJCQkJZ290byBlcnIyOworCQkJcGVydHVyYl9wZXJpb2QgPSBubGFfZ2V0X3UzMih0YltUQ0FfRkxPV19QRVJUVVJCXSkgKiBIWjsKKwkJfQogCX0gZWxzZSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWlmICghaGFuZGxlKQpAQCAtNDU1LDYgKzQ3NCwxMiBAQAogCQlpZiAobW9kZSAhPSBGTE9XX01PREVfSEFTSCAmJiBua2V5cyA+IDEpCiAJCQlnb3RvIGVycjI7CiAKKwkJaWYgKHRiW1RDQV9GTE9XX1BFUlRVUkJdKSB7CisJCQlpZiAobW9kZSAhPSBGTE9XX01PREVfSEFTSCkKKwkJCQlnb3RvIGVycjI7CisJCQlwZXJ0dXJiX3BlcmlvZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9GTE9XX1BFUlRVUkJdKSAqIEhaOworCQl9CisKIAkJaWYgKFRDX0hfTUFKKGJhc2VjbGFzcykgPT0gMCkKIAkJCWJhc2VjbGFzcyA9IFRDX0hfTUFLRSh0cC0+cS0+aGFuZGxlLCBiYXNlY2xhc3MpOwogCQlpZiAoVENfSF9NSU4oYmFzZWNsYXNzKSA9PSAwKQpAQCAtNDY3LDYgKzQ5MiwxMSBAQAogCiAJCWYtPmhhbmRsZSA9IGhhbmRsZTsKIAkJZi0+bWFzawkgID0gfjBVOworCisJCWdldF9yYW5kb21fYnl0ZXMoJmYtPmhhc2hybmQsIDQpOworCQlmLT5wZXJ0dXJiX3RpbWVyLmZ1bmN0aW9uID0gZmxvd19wZXJ0dXJiYXRpb247CisJCWYtPnBlcnR1cmJfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWY7CisJCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmZi0+cGVydHVyYl90aW1lcik7CiAJfQogCiAJdGNmX2V4dHNfY2hhbmdlKHRwLCAmZi0+ZXh0cywgJmUpOwpAQCAtNDk1LDYgKzUyNSwxMSBAQAogCWlmIChiYXNlY2xhc3MpCiAJCWYtPmJhc2VjbGFzcyA9IGJhc2VjbGFzczsKIAorCWYtPnBlcnR1cmJfcGVyaW9kID0gcGVydHVyYl9wZXJpb2Q7CisJZGVsX3RpbWVyKCZmLT5wZXJ0dXJiX3RpbWVyKTsKKwlpZiAocGVydHVyYl9wZXJpb2QpCisJCW1vZF90aW1lcigmZi0+cGVydHVyYl90aW1lciwgamlmZmllcyArIHBlcnR1cmJfcGVyaW9kKTsKKwogCWlmICgqYXJnID09IDApCiAJCWxpc3RfYWRkX3RhaWwoJmYtPmxpc3QsICZoZWFkLT5maWx0ZXJzKTsKIApAQCAtNTEyLDYgKzU0Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGZsb3dfZGVzdHJveV9maWx0ZXIoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBmbG93X2ZpbHRlciAqZikKIHsKKwlkZWxfdGltZXJfc3luYygmZi0+cGVydHVyYl90aW1lcik7CiAJdGNmX2V4dHNfZGVzdHJveSh0cCwgJmYtPmV4dHMpOwogCXRjZl9lbV90cmVlX2Rlc3Ryb3kodHAsICZmLT5lbWF0Y2hlcyk7CiAJa2ZyZWUoZik7CkBAIC01MzIsMTEgKzU2OCw2IEBACiB7CiAJc3RydWN0IGZsb3dfaGVhZCAqaGVhZDsKIAotCWlmICghZmxvd19oYXNocm5kX2luaXR0ZWQpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmZmxvd19oYXNocm5kLCA0KTsKLQkJZmxvd19oYXNocm5kX2luaXR0ZWQgPSAxOwotCX0KLQogCWhlYWQgPSBremFsbG9jKHNpemVvZigqaGVhZCksIEdGUF9LRVJORUwpOwogCWlmIChoZWFkID09IE5VTEwpCiAJCXJldHVybiAtRU5PQlVGUzsKQEAgLTYwNSw2ICs2MzYsOSBAQAogCWlmIChmLT5iYXNlY2xhc3MpCiAJCU5MQV9QVVRfVTMyKHNrYiwgVENBX0ZMT1dfQkFTRUNMQVNTLCBmLT5iYXNlY2xhc3MpOwogCisJaWYgKGYtPnBlcnR1cmJfcGVyaW9kKQorCQlOTEFfUFVUX1UzMihza2IsIFRDQV9GTE9XX1BFUlRVUkIsIGYtPnBlcnR1cmJfcGVyaW9kIC8gSFopOworCiAJaWYgKHRjZl9leHRzX2R1bXAoc2tiLCAmZi0+ZXh0cywgJmZsb3dfZXh0X21hcCkgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKICNpZmRlZiBDT05GSUdfTkVUX0VNQVRDSApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCmluZGV4IDc4NGRjYjguLjQ4MTI2MGEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuYworKysgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKQEAgLTczLDExICs3MywxMyBAQAogfQogCiBzdGF0aWMgaW5saW5lCi12b2lkIHJvdXRlNF9yZXNldF9mYXN0bWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwgdTMyIGlkKQordm9pZCByb3V0ZTRfcmVzZXRfZmFzdG1hcChzdHJ1Y3QgUWRpc2MgKnEsIHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwgdTMyIGlkKQogewotCXFkaXNjX2xvY2tfdHJlZShkZXYpOworCXNwaW5sb2NrX3QgKnJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayhxKTsKKworCXNwaW5fbG9ja19iaChyb290X2xvY2spOwogCW1lbXNldChoZWFkLT5mYXN0bWFwLCAwLCBzaXplb2YoaGVhZC0+ZmFzdG1hcCkpOwotCXFkaXNjX3VubG9ja190cmVlKGRldik7CisJc3Bpbl91bmxvY2tfYmgocm9vdF9sb2NrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0zMDIsNyArMzA0LDcgQEAKIAkJCSpmcCA9IGYtPm5leHQ7CiAJCQl0Y2ZfdHJlZV91bmxvY2sodHApOwogCi0JCQlyb3V0ZTRfcmVzZXRfZmFzdG1hcCh0cC0+cS0+ZGV2LCBoZWFkLCBmLT5pZCk7CisJCQlyb3V0ZTRfcmVzZXRfZmFzdG1hcCh0cC0+cSwgaGVhZCwgZi0+aWQpOwogCQkJcm91dGU0X2RlbGV0ZV9maWx0ZXIodHAsIGYpOwogCiAJCQkvKiBTdHJpcCB0cmVlICovCkBAIC01MDAsNyArNTAyLDcgQEAKIAl9CiAJdGNmX3RyZWVfdW5sb2NrKHRwKTsKIAotCXJvdXRlNF9yZXNldF9mYXN0bWFwKHRwLT5xLT5kZXYsIGhlYWQsIGYtPmlkKTsKKwlyb3V0ZTRfcmVzZXRfZmFzdG1hcCh0cC0+cSwgaGVhZCwgZi0+aWQpOwogCSphcmcgPSAodW5zaWduZWQgbG9uZylmOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCA0ZDc1NTQ0Li41MjdkYjI1IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCisrKyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTc1LDcgKzc1LDYgQEAKIAogc3RydWN0IHRjX3VfY29tbW9uCiB7Ci0Jc3RydWN0IHRjX3VfY29tbW9uCSpuZXh0OwogCXN0cnVjdCB0Y191X2hub2RlCSpobGlzdDsKIAlzdHJ1Y3QgUWRpc2MJCSpxOwogCWludAkJCXJlZmNudDsKQEAgLTg3LDggKzg2LDYgQEAKIAkucG9saWNlID0gVENBX1UzMl9QT0xJQ0UKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdGNfdV9jb21tb24gKnUzMl9saXN0OwotCiBzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCB1MzJfaGFzaF9mb2xkKF9fYmUzMiBrZXksIHN0cnVjdCB0Y191MzJfc2VsICpzZWwsIHU4IGZzaGlmdCkKIHsKIAl1bnNpZ25lZCBoID0gbnRvaGwoa2V5ICYgc2VsLT5obWFzayk+PmZzaGlmdDsKQEAgLTI4Nyw5ICsyODQsNyBAQAogCXN0cnVjdCB0Y191X2hub2RlICpyb290X2h0OwogCXN0cnVjdCB0Y191X2NvbW1vbiAqdHBfYzsKIAotCWZvciAodHBfYyA9IHUzMl9saXN0OyB0cF9jOyB0cF9jID0gdHBfYy0+bmV4dCkKLQkJaWYgKHRwX2MtPnEgPT0gdHAtPnEpCi0JCQlicmVhazsKKwl0cF9jID0gdHAtPnEtPnUzMl9ub2RlOwogCiAJcm9vdF9odCA9IGt6YWxsb2Moc2l6ZW9mKCpyb290X2h0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJvb3RfaHQgPT0gTlVMTCkKQEAgLTMwNyw4ICszMDIsNyBAQAogCQkJcmV0dXJuIC1FTk9CVUZTOwogCQl9CiAJCXRwX2MtPnEgPSB0cC0+cTsKLQkJdHBfYy0+bmV4dCA9IHUzMl9saXN0OwotCQl1MzJfbGlzdCA9IHRwX2M7CisJCXRwLT5xLT51MzJfbm9kZSA9IHRwX2M7CiAJfQogCiAJdHBfYy0+cmVmY250Kys7CkBAIC00MDIsMTQgKzM5Niw4IEBACiAKIAlpZiAoLS10cF9jLT5yZWZjbnQgPT0gMCkgewogCQlzdHJ1Y3QgdGNfdV9obm9kZSAqaHQ7Ci0JCXN0cnVjdCB0Y191X2NvbW1vbiAqKnRwX2NwOwogCi0JCWZvciAodHBfY3AgPSAmdTMyX2xpc3Q7ICp0cF9jcDsgdHBfY3AgPSAmKCp0cF9jcCktPm5leHQpIHsKLQkJCWlmICgqdHBfY3AgPT0gdHBfYykgewotCQkJCSp0cF9jcCA9IHRwX2MtPm5leHQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KKwkJdHAtPnEtPnUzMl9ub2RlID0gTlVMTDsKIAogCQlmb3IgKGh0ID0gdHBfYy0+aGxpc3Q7IGh0OyBodCA9IGh0LT5uZXh0KSB7CiAJCQlodC0+cmVmY250LS07CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCAxMGYwMWFkLi5iMDYwMTY0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTk5LDcgKzk5LDcgQEAKICAgIC0tLXJlcXVldWUKIAogICAgcmVxdWV1ZXMgb25jZSBkZXF1ZXVlZCBwYWNrZXQuIEl0IGlzIHVzZWQgZm9yIG5vbi1zdGFuZGFyZCBvcgotICAganVzdCBidWdneSBkZXZpY2VzLCB3aGljaCBjYW4gZGVmZXIgb3V0cHV0IGV2ZW4gaWYgZGV2LT50YnVzeT0wLgorICAganVzdCBidWdneSBkZXZpY2VzLCB3aGljaCBjYW4gZGVmZXIgb3V0cHV0IGV2ZW4gaWYgbmV0aWZfcXVldWVfc3RvcHBlZCgpPTAuCiAKICAgIC0tLXJlc2V0CiAKQEAgLTE4NSwxMSArMTg1LDIwIEBACiAKIHN0cnVjdCBRZGlzYyAqcWRpc2NfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBoYW5kbGUpCiB7Ci0Jc3RydWN0IFFkaXNjICpxOworCXVuc2lnbmVkIGludCBpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmZGV2LT5xZGlzY19saXN0LCBsaXN0KSB7Ci0JCWlmIChxLT5oYW5kbGUgPT0gaGFuZGxlKQotCQkJcmV0dXJuIHE7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKKwkJc3RydWN0IFFkaXNjICpxLCAqdHhxX3Jvb3QgPSB0eHEtPnFkaXNjOworCisJCWlmICghKHR4cV9yb290LT5mbGFncyAmIFRDUV9GX0JVSUxUSU4pICYmCisJCSAgICB0eHFfcm9vdC0+aGFuZGxlID09IGhhbmRsZSkKKwkJCXJldHVybiB0eHFfcm9vdDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZ0eHFfcm9vdC0+bGlzdCwgbGlzdCkgeworCQkJaWYgKHEtPmhhbmRsZSA9PSBoYW5kbGUpCisJCQkJcmV0dXJuIHE7CisJCX0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yNzcsMTUgKzI4NiwxMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfcHV0X3J0YWIpOwogCitzdGF0aWMgTElTVF9IRUFEKHFkaXNjX3N0YWJfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHFkaXNjX3N0YWJfbG9jayk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzdGFiX3BvbGljeVtUQ0FfU1RBQl9NQVggKyAxXSA9IHsKKwlbVENBX1NUQUJfQkFTRV0JPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IHRjX3NpemVzcGVjKSB9LAorCVtUQ0FfU1RBQl9EQVRBXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sCit9OworCitzdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCkKK3sKKwlzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfU1RBQl9NQVggKyAxXTsKKwlzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYjsKKwlzdHJ1Y3QgdGNfc2l6ZXNwZWMgKnM7CisJdW5zaWduZWQgaW50IHRzaXplID0gMDsKKwl1MTYgKnRhYiA9IE5VTEw7CisJaW50IGVycjsKKworCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9TVEFCX01BWCwgb3B0LCBzdGFiX3BvbGljeSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBFUlJfUFRSKGVycik7CisJaWYgKCF0YltUQ0FfU1RBQl9CQVNFXSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlzID0gbmxhX2RhdGEodGJbVENBX1NUQUJfQkFTRV0pOworCisJaWYgKHMtPnRzaXplID4gMCkgeworCQlpZiAoIXRiW1RDQV9TVEFCX0RBVEFdKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJCXRhYiA9IG5sYV9kYXRhKHRiW1RDQV9TVEFCX0RBVEFdKTsKKwkJdHNpemUgPSBubGFfbGVuKHRiW1RDQV9TVEFCX0RBVEFdKSAvIHNpemVvZih1MTYpOworCX0KKworCWlmICghcyB8fCB0c2l6ZSAhPSBzLT50c2l6ZSB8fCAoIXRhYiAmJiB0c2l6ZSA+IDApKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXNwaW5fbG9jaygmcWRpc2Nfc3RhYl9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhYiwgJnFkaXNjX3N0YWJfbGlzdCwgbGlzdCkgeworCQlpZiAobWVtY21wKCZzdGFiLT5zem9wdHMsIHMsIHNpemVvZigqcykpKQorCQkJY29udGludWU7CisJCWlmICh0c2l6ZSA+IDAgJiYgbWVtY21wKHN0YWItPmRhdGEsIHRhYiwgdHNpemUgKiBzaXplb2YodTE2KSkpCisJCQljb250aW51ZTsKKwkJc3RhYi0+cmVmY250Kys7CisJCXNwaW5fdW5sb2NrKCZxZGlzY19zdGFiX2xvY2spOworCQlyZXR1cm4gc3RhYjsKKwl9CisKKwlzcGluX3VubG9jaygmcWRpc2Nfc3RhYl9sb2NrKTsKKworCXN0YWIgPSBrbWFsbG9jKHNpemVvZigqc3RhYikgKyB0c2l6ZSAqIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YWIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3RhYi0+cmVmY250ID0gMTsKKwlzdGFiLT5zem9wdHMgPSAqczsKKwlpZiAodHNpemUgPiAwKQorCQltZW1jcHkoc3RhYi0+ZGF0YSwgdGFiLCB0c2l6ZSAqIHNpemVvZih1MTYpKTsKKworCXNwaW5fbG9jaygmcWRpc2Nfc3RhYl9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZzdGFiLT5saXN0LCAmcWRpc2Nfc3RhYl9saXN0KTsKKwlzcGluX3VubG9jaygmcWRpc2Nfc3RhYl9sb2NrKTsKKworCXJldHVybiBzdGFiOworfQorCit2b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpCit7CisJaWYgKCF0YWIpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmcWRpc2Nfc3RhYl9sb2NrKTsKKworCWlmICgtLXRhYi0+cmVmY250ID09IDApIHsKKwkJbGlzdF9kZWwoJnRhYi0+bGlzdCk7CisJCWtmcmVlKHRhYik7CisJfQorCisJc3Bpbl91bmxvY2soJnFkaXNjX3N0YWJfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHFkaXNjX3B1dF9zdGFiKTsKKworc3RhdGljIGludCBxZGlzY19kdW1wX3N0YWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpCit7CisJc3RydWN0IG5sYXR0ciAqbmVzdDsKKworCW5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIFRDQV9TVEFCKTsKKwlOTEFfUFVUKHNrYiwgVENBX1NUQUJfQkFTRSwgc2l6ZW9mKHN0YWItPnN6b3B0cyksICZzdGFiLT5zem9wdHMpOworCW5sYV9uZXN0X2VuZChza2IsIG5lc3QpOworCisJcmV0dXJuIHNrYi0+bGVuOworCitubGFfcHV0X2ZhaWx1cmU6CisJcmV0dXJuIC0xOworfQorCit2b2lkIHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKQoreworCWludCBwa3RfbGVuLCBzbG90OworCisJcGt0X2xlbiA9IHNrYi0+bGVuICsgc3RhYi0+c3pvcHRzLm92ZXJoZWFkOworCWlmICh1bmxpa2VseSghc3RhYi0+c3pvcHRzLnRzaXplKSkKKwkJZ290byBvdXQ7CisKKwlzbG90ID0gcGt0X2xlbiArIHN0YWItPnN6b3B0cy5jZWxsX2FsaWduOworCWlmICh1bmxpa2VseShzbG90IDwgMCkpCisJCXNsb3QgPSAwOworCisJc2xvdCA+Pj0gc3RhYi0+c3pvcHRzLmNlbGxfbG9nOworCWlmIChsaWtlbHkoc2xvdCA8IHN0YWItPnN6b3B0cy50c2l6ZSkpCisJCXBrdF9sZW4gPSBzdGFiLT5kYXRhW3Nsb3RdOworCWVsc2UKKwkJcGt0X2xlbiA9IHN0YWItPmRhdGFbc3RhYi0+c3pvcHRzLnRzaXplIC0gMV0gKgorCQkJCShzbG90IC8gc3RhYi0+c3pvcHRzLnRzaXplKSArCisJCQkJc3RhYi0+ZGF0YVtzbG90ICUgc3RhYi0+c3pvcHRzLnRzaXplXTsKKworCXBrdF9sZW4gPDw9IHN0YWItPnN6b3B0cy5zaXplX2xvZzsKK291dDoKKwlpZiAodW5saWtlbHkocGt0X2xlbiA8IDEpKQorCQlwa3RfbGVuID0gMTsKKwlxZGlzY19za2JfY2Ioc2tiKS0+cGt0X2xlbiA9IHBrdF9sZW47Cit9CitFWFBPUlRfU1lNQk9MKHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKTsKKwogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHFkaXNjX3dhdGNoZG9nKHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKIAlzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2csCiAJCQkJCQkgdGltZXIpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB3ZC0+cWRpc2MtPmRldjsKIAogCXdkLT5xZGlzYy0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKIAlzbXBfd21iKCk7Ci0JbmV0aWZfc2NoZWR1bGUoZGV2KTsKKwlfX25ldGlmX3NjaGVkdWxlKHdkLT5xZGlzYyk7CiAKIAlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CiB9CkBAIC0zMTYsNiArNDQ3LDExMCBAQAogfQogRVhQT1JUX1NZTUJPTChxZGlzY193YXRjaGRvZ19jYW5jZWwpOwogCitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnFkaXNjX2NsYXNzX2hhc2hfYWxsb2ModW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgaW50IHNpemUgPSBuICogc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSwgaTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaDsKKworCWlmIChzaXplIDw9IFBBR0VfU0laRSkKKwkJaCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZWxzZQorCQloID0gKHN0cnVjdCBobGlzdF9oZWFkICopCisJCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihzaXplKSk7CisKKwlpZiAoaCAhPSBOVUxMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlJTklUX0hMSVNUX0hFQUQoJmhbaV0pOworCX0KKwlyZXR1cm4gaDsKK30KKworc3RhdGljIHZvaWQgcWRpc2NfY2xhc3NfaGFzaF9mcmVlKHN0cnVjdCBobGlzdF9oZWFkICpoLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IG4gKiBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpOworCisJaWYgKHNpemUgPD0gUEFHRV9TSVpFKQorCQlrZnJlZShoKTsKKwllbHNlCisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpaCwgZ2V0X29yZGVyKHNpemUpKTsKK30KKwordm9pZCBxZGlzY19jbGFzc19oYXNoX2dyb3coc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gpCit7CisJc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbiAqY2w7CisJc3RydWN0IGhsaXN0X25vZGUgKm4sICpuZXh0OworCXN0cnVjdCBobGlzdF9oZWFkICpuaGFzaCwgKm9oYXNoOworCXVuc2lnbmVkIGludCBuc2l6ZSwgbm1hc2ssIG9zaXplOworCXVuc2lnbmVkIGludCBpLCBoOworCisJLyogUmVoYXNoIHdoZW4gbG9hZCBmYWN0b3IgZXhjZWVkcyAwLjc1ICovCisJaWYgKGNsaGFzaC0+aGFzaGVsZW1zICogNCA8PSBjbGhhc2gtPmhhc2hzaXplICogMykKKwkJcmV0dXJuOworCW5zaXplID0gY2xoYXNoLT5oYXNoc2l6ZSAqIDI7CisJbm1hc2sgPSBuc2l6ZSAtIDE7CisJbmhhc2ggPSBxZGlzY19jbGFzc19oYXNoX2FsbG9jKG5zaXplKTsKKwlpZiAobmhhc2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJb2hhc2ggPSBjbGhhc2gtPmhhc2g7CisJb3NpemUgPSBjbGhhc2gtPmhhc2hzaXplOworCisJc2NoX3RyZWVfbG9jayhzY2gpOworCWZvciAoaSA9IDA7IGkgPCBvc2l6ZTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2wsIG4sIG5leHQsICZvaGFzaFtpXSwgaG5vZGUpIHsKKwkJCWggPSBxZGlzY19jbGFzc19oYXNoKGNsLT5jbGFzc2lkLCBubWFzayk7CisJCQlobGlzdF9hZGRfaGVhZCgmY2wtPmhub2RlLCAmbmhhc2hbaF0pOworCQl9CisJfQorCWNsaGFzaC0+aGFzaCAgICAgPSBuaGFzaDsKKwljbGhhc2gtPmhhc2hzaXplID0gbnNpemU7CisJY2xoYXNoLT5oYXNobWFzayA9IG5tYXNrOworCXNjaF90cmVlX3VubG9jayhzY2gpOworCisJcWRpc2NfY2xhc3NfaGFzaF9mcmVlKG9oYXNoLCBvc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfZ3Jvdyk7CisKK2ludCBxZGlzY19jbGFzc19oYXNoX2luaXQoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IDQ7CisKKwljbGhhc2gtPmhhc2ggPSBxZGlzY19jbGFzc19oYXNoX2FsbG9jKHNpemUpOworCWlmIChjbGhhc2gtPmhhc2ggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2xoYXNoLT5oYXNoc2l6ZSAgPSBzaXplOworCWNsaGFzaC0+aGFzaG1hc2sgID0gc2l6ZSAtIDE7CisJY2xoYXNoLT5oYXNoZWxlbXMgPSAwOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2luaXQpOworCit2b2lkIHFkaXNjX2NsYXNzX2hhc2hfZGVzdHJveShzdHJ1Y3QgUWRpc2NfY2xhc3NfaGFzaCAqY2xoYXNoKQoreworCXFkaXNjX2NsYXNzX2hhc2hfZnJlZShjbGhhc2gtPmhhc2gsIGNsaGFzaC0+aGFzaHNpemUpOworfQorRVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2Rlc3Ryb3kpOworCit2b2lkIHFkaXNjX2NsYXNzX2hhc2hfaW5zZXJ0KHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gsCisJCQkgICAgIHN0cnVjdCBRZGlzY19jbGFzc19jb21tb24gKmNsKQoreworCXVuc2lnbmVkIGludCBoOworCisJSU5JVF9ITElTVF9OT0RFKCZjbC0+aG5vZGUpOworCWggPSBxZGlzY19jbGFzc19oYXNoKGNsLT5jbGFzc2lkLCBjbGhhc2gtPmhhc2htYXNrKTsKKwlobGlzdF9hZGRfaGVhZCgmY2wtPmhub2RlLCAmY2xoYXNoLT5oYXNoW2hdKTsKKwljbGhhc2gtPmhhc2hlbGVtcysrOworfQorRVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2luc2VydCk7CisKK3ZvaWQgcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaCwKKwkJCSAgICAgc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbiAqY2wpCit7CisJaGxpc3RfZGVsKCZjbC0+aG5vZGUpOworCWNsaGFzaC0+aGFzaGVsZW1zLS07Cit9CitFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfcmVtb3ZlKTsKKwogLyogQWxsb2NhdGUgYW4gdW5pcXVlIGhhbmRsZSBmcm9tIHNwYWNlIG1hbmFnZWQgYnkga2VybmVsICovCiAKIHN0YXRpYyB1MzIgcWRpc2NfYWxsb2NfaGFuZGxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMzIsMzIgKzU2NywzOSBAQAogCXJldHVybiBpPjAgPyBhdXRvaGFuZGxlIDogMDsKIH0KIAotLyogQXR0YWNoIHRvcGxldmVsIHFkaXNjIHRvIGRldmljZSBkZXYgKi8KKy8qIEF0dGFjaCB0b3BsZXZlbCBxZGlzYyB0byBkZXZpY2UgcXVldWUuICovCiAKLXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKgotZGV2X2dyYWZ0X3FkaXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBRZGlzYyAqcWRpc2MpCitzdGF0aWMgc3RydWN0IFFkaXNjICpkZXZfZ3JhZnRfcWRpc2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAorCQkJCSAgICAgc3RydWN0IFFkaXNjICpxZGlzYykKIHsKKwlzcGlubG9ja190ICpyb290X2xvY2s7CiAJc3RydWN0IFFkaXNjICpvcWRpc2M7CisJaW50IGluZ3Jlc3M7CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkKLQkJZGV2X2RlYWN0aXZhdGUoZGV2KTsKKwlpbmdyZXNzID0gMDsKKwlpZiAocWRpc2MgJiYgcWRpc2MtPmZsYWdzJlRDUV9GX0lOR1JFU1MpCisJCWluZ3Jlc3MgPSAxOwogCi0JcWRpc2NfbG9ja190cmVlKGRldik7Ci0JaWYgKHFkaXNjICYmIHFkaXNjLT5mbGFncyZUQ1FfRl9JTkdSRVNTKSB7Ci0JCW9xZGlzYyA9IGRldi0+cWRpc2NfaW5ncmVzczsKKwlpZiAoaW5ncmVzcykgeworCQlvcWRpc2MgPSBkZXZfcXVldWUtPnFkaXNjOworCX0gZWxzZSB7CisJCW9xZGlzYyA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7CisJfQorCisJcm9vdF9sb2NrID0gcWRpc2Nfcm9vdF9sb2NrKG9xZGlzYyk7CisJc3Bpbl9sb2NrX2JoKHJvb3RfbG9jayk7CisKKwlpZiAoaW5ncmVzcykgewogCQkvKiBQcnVuZSBvbGQgc2NoZWR1bGVyICovCiAJCWlmIChvcWRpc2MgJiYgYXRvbWljX3JlYWQoJm9xZGlzYy0+cmVmY250KSA8PSAxKSB7CiAJCQkvKiBkZWxldGUgKi8KIAkJCXFkaXNjX3Jlc2V0KG9xZGlzYyk7Ci0JCQlkZXYtPnFkaXNjX2luZ3Jlc3MgPSBOVUxMOworCQkJZGV2X3F1ZXVlLT5xZGlzYyA9IE5VTEw7CiAJCX0gZWxzZSB7ICAvKiBuZXcgKi8KLQkJCWRldi0+cWRpc2NfaW5ncmVzcyA9IHFkaXNjOworCQkJZGV2X3F1ZXVlLT5xZGlzYyA9IHFkaXNjOwogCQl9CiAKIAl9IGVsc2UgewotCi0JCW9xZGlzYyA9IGRldi0+cWRpc2Nfc2xlZXBpbmc7Ci0KIAkJLyogUHJ1bmUgb2xkIHNjaGVkdWxlciAqLwogCQlpZiAob3FkaXNjICYmIGF0b21pY19yZWFkKCZvcWRpc2MtPnJlZmNudCkgPD0gMSkKIAkJCXFkaXNjX3Jlc2V0KG9xZGlzYyk7CkBAIC0zNjUsMTQgKzYwNywxMSBAQAogCQkvKiAuLi4gYW5kIGdyYWZ0IG5ldyBvbmUgKi8KIAkJaWYgKHFkaXNjID09IE5VTEwpCiAJCQlxZGlzYyA9ICZub29wX3FkaXNjOwotCQlkZXYtPnFkaXNjX3NsZWVwaW5nID0gcWRpc2M7Ci0JCWRldi0+cWRpc2MgPSAmbm9vcF9xZGlzYzsKKwkJZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZyA9IHFkaXNjOworCQlkZXZfcXVldWUtPnFkaXNjID0gJm5vb3BfcWRpc2M7CiAJfQogCi0JcWRpc2NfdW5sb2NrX3RyZWUoZGV2KTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQotCQlkZXZfYWN0aXZhdGUoZGV2KTsKKwlzcGluX3VubG9ja19iaChyb290X2xvY2spOwogCiAJcmV0dXJuIG9xZGlzYzsKIH0KQEAgLTM4OSw3ICs2MjgsNyBAQAogCQlpZiAoVENfSF9NQUoocGFyZW50aWQpID09IFRDX0hfTUFKKFRDX0hfSU5HUkVTUykpCiAJCQlyZXR1cm47CiAKLQkJc2NoID0gcWRpc2NfbG9va3VwKHNjaC0+ZGV2LCBUQ19IX01BSihwYXJlbnRpZCkpOworCQlzY2ggPSBxZGlzY19sb29rdXAocWRpc2NfZGV2KHNjaCksIFRDX0hfTUFKKHBhcmVudGlkKSk7CiAJCWlmIChzY2ggPT0gTlVMTCkgewogCQkJV0FSTl9PTihwYXJlbnRpZCAhPSBUQ19IX1JPT1QpOwogCQkJcmV0dXJuOwpAQCAtNDA1LDI2ICs2NDQsNjYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKTsKIAotLyogR3JhZnQgcWRpc2MgIm5ldyIgdG8gY2xhc3MgImNsYXNzaWQiIG9mIHFkaXNjICJwYXJlbnQiIG9yCi0gICB0byBkZXZpY2UgImRldiIuCitzdGF0aWMgdm9pZCBub3RpZnlfYW5kX2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLCB1MzIgY2xpZCwKKwkJCSAgICAgICBzdHJ1Y3QgUWRpc2MgKm9sZCwgc3RydWN0IFFkaXNjICpuZXcpCit7CisJaWYgKG5ldyB8fCBvbGQpCisJCXFkaXNjX25vdGlmeShza2IsIG4sIGNsaWQsIG9sZCwgbmV3KTsKIAotICAgT2xkIHFkaXNjIGlzIG5vdCBkZXN0cm95ZWQgYnV0IHJldHVybmVkIGluICpvbGQuCisJaWYgKG9sZCkgeworCQlzcGluX2xvY2tfYmgoJm9sZC0+cS5sb2NrKTsKKwkJcWRpc2NfZGVzdHJveShvbGQpOworCQlzcGluX3VubG9ja19iaCgmb2xkLT5xLmxvY2spOworCX0KK30KKworLyogR3JhZnQgcWRpc2MgIm5ldyIgdG8gY2xhc3MgImNsYXNzaWQiIG9mIHFkaXNjICJwYXJlbnQiIG9yCisgKiB0byBkZXZpY2UgImRldiIuCisgKgorICogV2hlbiBhcHByb3ByaWF0ZSBzZW5kIGEgbmV0bGluayBub3RpZmljYXRpb24gdXNpbmcgJ3NrYicKKyAqIGFuZCAibiIuCisgKgorICogT24gc3VjY2VzcywgZGVzdHJveSBvbGQgcWRpc2MuCiAgKi8KIAogc3RhdGljIGludCBxZGlzY19ncmFmdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgUWRpc2MgKnBhcmVudCwKLQkJICAgICAgIHUzMiBjbGFzc2lkLAotCQkgICAgICAgc3RydWN0IFFkaXNjICpuZXcsIHN0cnVjdCBRZGlzYyAqKm9sZCkKKwkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbiwgdTMyIGNsYXNzaWQsCisJCSAgICAgICBzdHJ1Y3QgUWRpc2MgKm5ldywgc3RydWN0IFFkaXNjICpvbGQpCiB7CisJc3RydWN0IFFkaXNjICpxID0gb2xkOwogCWludCBlcnIgPSAwOwotCXN0cnVjdCBRZGlzYyAqcSA9ICpvbGQ7Ci0KIAogCWlmIChwYXJlbnQgPT0gTlVMTCkgewotCQlpZiAocSAmJiBxLT5mbGFncyZUQ1FfRl9JTkdSRVNTKSB7Ci0JCQkqb2xkID0gZGV2X2dyYWZ0X3FkaXNjKGRldiwgcSk7Ci0JCX0gZWxzZSB7Ci0JCQkqb2xkID0gZGV2X2dyYWZ0X3FkaXNjKGRldiwgbmV3KTsKKwkJdW5zaWduZWQgaW50IGksIG51bV9xLCBpbmdyZXNzOworCisJCWluZ3Jlc3MgPSAwOworCQludW1fcSA9IGRldi0+bnVtX3R4X3F1ZXVlczsKKwkJaWYgKHEgJiYgcS0+ZmxhZ3MgJiBUQ1FfRl9JTkdSRVNTKSB7CisJCQludW1fcSA9IDE7CisJCQlpbmdyZXNzID0gMTsKIAkJfQorCisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQorCQkJZGV2X2RlYWN0aXZhdGUoZGV2KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3E7IGkrKykgeworCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlID0gJmRldi0+cnhfcXVldWU7CisKKwkJCWlmICghaW5ncmVzcykKKwkJCQlkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CisKKwkJCWlmIChpbmdyZXNzKSB7CisJCQkJb2xkID0gZGV2X2dyYWZ0X3FkaXNjKGRldl9xdWV1ZSwgcSk7CisJCQl9IGVsc2UgeworCQkJCW9sZCA9IGRldl9ncmFmdF9xZGlzYyhkZXZfcXVldWUsIG5ldyk7CisJCQkJaWYgKG5ldyAmJiBpID4gMCkKKwkJCQkJYXRvbWljX2luYygmbmV3LT5yZWZjbnQpOworCQkJfQorCQkJbm90aWZ5X2FuZF9kZXN0cm95KHNrYiwgbiwgY2xhc3NpZCwgb2xkLCBuZXcpOworCQl9CisKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCQlkZXZfYWN0aXZhdGUoZGV2KTsKIAl9IGVsc2UgewogCQljb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzICpjb3BzID0gcGFyZW50LT5vcHMtPmNsX29wczsKIApAQCAtNDMzLDEwICs3MTIsMTIgQEAKIAkJaWYgKGNvcHMpIHsKIAkJCXVuc2lnbmVkIGxvbmcgY2wgPSBjb3BzLT5nZXQocGFyZW50LCBjbGFzc2lkKTsKIAkJCWlmIChjbCkgewotCQkJCWVyciA9IGNvcHMtPmdyYWZ0KHBhcmVudCwgY2wsIG5ldywgb2xkKTsKKwkJCQllcnIgPSBjb3BzLT5ncmFmdChwYXJlbnQsIGNsLCBuZXcsICZvbGQpOwogCQkJCWNvcHMtPnB1dChwYXJlbnQsIGNsKTsKIAkJCX0KIAkJfQorCQlpZiAoIWVycikKKwkJCW5vdGlmeV9hbmRfZGVzdHJveShza2IsIG4sIGNsYXNzaWQsIG9sZCwgbmV3KTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ0OCwxMyArNzI5LDE0IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBRZGlzYyAqCi1xZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBhcmVudCwgdTMyIGhhbmRsZSwKLQkgICBzdHJ1Y3QgbmxhdHRyICoqdGNhLCBpbnQgKmVycnApCitxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAorCSAgICAgdTMyIHBhcmVudCwgdTMyIGhhbmRsZSwgc3RydWN0IG5sYXR0ciAqKnRjYSwgaW50ICplcnJwKQogewogCWludCBlcnI7CiAJc3RydWN0IG5sYXR0ciAqa2luZCA9IHRjYVtUQ0FfS0lORF07CiAJc3RydWN0IFFkaXNjICpzY2g7CiAJc3RydWN0IFFkaXNjX29wcyAqb3BzOworCXN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiOwogCiAJb3BzID0gcWRpc2NfbG9va3VwX29wcyhraW5kKTsKICNpZmRlZiBDT05GSUdfS01PRApAQCAtNDg5LDcgKzc3MSw3IEBACiAJaWYgKG9wcyA9PSBOVUxMKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlzY2ggPSBxZGlzY19hbGxvYyhkZXYsIG9wcyk7CisJc2NoID0gcWRpc2NfYWxsb2MoZGV2X3F1ZXVlLCBvcHMpOwogCWlmIChJU19FUlIoc2NoKSkgewogCQllcnIgPSBQVFJfRVJSKHNjaCk7CiAJCWdvdG8gZXJyX291dDI7CkBAIC00OTksMTAgKzc4MSw4IEBACiAKIAlpZiAoaGFuZGxlID09IFRDX0hfSU5HUkVTUykgewogCQlzY2gtPmZsYWdzIHw9IFRDUV9GX0lOR1JFU1M7Ci0JCXNjaC0+c3RhdHNfbG9jayA9ICZkZXYtPmluZ3Jlc3NfbG9jazsKIAkJaGFuZGxlID0gVENfSF9NQUtFKFRDX0hfSU5HUkVTUywgMCk7CiAJfSBlbHNlIHsKLQkJc2NoLT5zdGF0c19sb2NrID0gJmRldi0+cXVldWVfbG9jazsKIAkJaWYgKGhhbmRsZSA9PSAwKSB7CiAJCQloYW5kbGUgPSBxZGlzY19hbGxvY19oYW5kbGUoZGV2KTsKIAkJCWVyciA9IC1FTk9NRU07CkBAIC01MTQsOSArNzk0LDE3IEBACiAJc2NoLT5oYW5kbGUgPSBoYW5kbGU7CiAKIAlpZiAoIW9wcy0+aW5pdCB8fCAoZXJyID0gb3BzLT5pbml0KHNjaCwgdGNhW1RDQV9PUFRJT05TXSkpID09IDApIHsKKwkJaWYgKHRjYVtUQ0FfU1RBQl0pIHsKKwkJCXN0YWIgPSBxZGlzY19nZXRfc3RhYih0Y2FbVENBX1NUQUJdKTsKKwkJCWlmIChJU19FUlIoc3RhYikpIHsKKwkJCQllcnIgPSBQVFJfRVJSKHN0YWIpOworCQkJCWdvdG8gZXJyX291dDM7CisJCQl9CisJCQlzY2gtPnN0YWIgPSBzdGFiOworCQl9CiAJCWlmICh0Y2FbVENBX1JBVEVdKSB7CiAJCQllcnIgPSBnZW5fbmV3X2VzdGltYXRvcigmc2NoLT5ic3RhdHMsICZzY2gtPnJhdGVfZXN0LAotCQkJCQkJc2NoLT5zdGF0c19sb2NrLAorCQkJCQkJcWRpc2Nfcm9vdF9sb2NrKHNjaCksCiAJCQkJCQl0Y2FbVENBX1JBVEVdKTsKIAkJCWlmIChlcnIpIHsKIAkJCQkvKgpAQCAtNTI5LDEzICs4MTcsMTMgQEAKIAkJCQlnb3RvIGVycl9vdXQzOwogCQkJfQogCQl9Ci0JCXFkaXNjX2xvY2tfdHJlZShkZXYpOwotCQlsaXN0X2FkZF90YWlsKCZzY2gtPmxpc3QsICZkZXYtPnFkaXNjX2xpc3QpOwotCQlxZGlzY191bmxvY2tfdHJlZShkZXYpOworCQlpZiAocGFyZW50KQorCQkJbGlzdF9hZGRfdGFpbCgmc2NoLT5saXN0LCAmZGV2X3F1ZXVlLT5xZGlzYy0+bGlzdCk7CiAKIAkJcmV0dXJuIHNjaDsKIAl9CiBlcnJfb3V0MzoKKwlxZGlzY19wdXRfc3RhYihzY2gtPnN0YWIpOwogCWRldl9wdXQoZGV2KTsKIAlrZnJlZSgoY2hhciAqKSBzY2ggLSBzY2gtPnBhZGRlZCk7CiBlcnJfb3V0MjoKQEAgLTU0NywxOCArODM1LDI5IEBACiAKIHN0YXRpYyBpbnQgcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhKQogewotCWlmICh0Y2FbVENBX09QVElPTlNdKSB7Ci0JCWludCBlcnI7CisJc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIgPSBOVUxMOworCWludCBlcnIgPSAwOwogCisJaWYgKHRjYVtUQ0FfT1BUSU9OU10pIHsKIAkJaWYgKHNjaC0+b3BzLT5jaGFuZ2UgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQllcnIgPSBzY2gtPm9wcy0+Y2hhbmdlKHNjaCwgdGNhW1RDQV9PUFRJT05TXSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KKworCWlmICh0Y2FbVENBX1NUQUJdKSB7CisJCXN0YWIgPSBxZGlzY19nZXRfc3RhYih0Y2FbVENBX1NUQUJdKTsKKwkJaWYgKElTX0VSUihzdGFiKSkKKwkJCXJldHVybiBQVFJfRVJSKHN0YWIpOworCX0KKworCXFkaXNjX3B1dF9zdGFiKHNjaC0+c3RhYik7CisJc2NoLT5zdGFiID0gc3RhYjsKKwogCWlmICh0Y2FbVENBX1JBVEVdKQogCQlnZW5fcmVwbGFjZV9lc3RpbWF0b3IoJnNjaC0+YnN0YXRzLCAmc2NoLT5yYXRlX2VzdCwKLQkJCXNjaC0+c3RhdHNfbG9jaywgdGNhW1RDQV9SQVRFXSk7CisJCQkJICAgICAgcWRpc2Nfcm9vdF9sb2NrKHNjaCksIHRjYVtUQ0FfUkFURV0pOwogCXJldHVybiAwOwogfQogCkBAIC02MzQsMTAgKzkzMywxMiBAQAogCQkJCQlyZXR1cm4gLUVOT0VOVDsKIAkJCQlxID0gcWRpc2NfbGVhZihwLCBjbGlkKTsKIAkJCX0gZWxzZSB7IC8qIGluZ3Jlc3MgKi8KLQkJCQlxID0gZGV2LT5xZGlzY19pbmdyZXNzOworCQkJCXEgPSBkZXYtPnJ4X3F1ZXVlLnFkaXNjOwogCQkJfQogCQl9IGVsc2UgewotCQkJcSA9IGRldi0+cWRpc2Nfc2xlZXBpbmc7CisJCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWU7CisJCQlkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7CisJCQlxID0gZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZzsKIAkJfQogCQlpZiAoIXEpCiAJCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTY1NywxNCArOTU4LDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAocS0+aGFuZGxlID09IDApCiAJCQlyZXR1cm4gLUVOT0VOVDsKLQkJaWYgKChlcnIgPSBxZGlzY19ncmFmdChkZXYsIHAsIGNsaWQsIE5VTEwsICZxKSkgIT0gMCkKKwkJaWYgKChlcnIgPSBxZGlzY19ncmFmdChkZXYsIHAsIHNrYiwgbiwgY2xpZCwgTlVMTCwgcSkpICE9IDApCiAJCQlyZXR1cm4gZXJyOwotCQlpZiAocSkgewotCQkJcWRpc2Nfbm90aWZ5KHNrYiwgbiwgY2xpZCwgcSwgTlVMTCk7Ci0JCQlxZGlzY19sb2NrX3RyZWUoZGV2KTsKLQkJCXFkaXNjX2Rlc3Ryb3kocSk7Ci0JCQlxZGlzY191bmxvY2tfdHJlZShkZXYpOwotCQl9CiAJfSBlbHNlIHsKIAkJcWRpc2Nfbm90aWZ5KHNrYiwgbiwgY2xpZCwgTlVMTCwgcSk7CiAJfQpAQCAtNzA4LDEwICsxMDAzLDEyIEBACiAJCQkJCXJldHVybiAtRU5PRU5UOwogCQkJCXEgPSBxZGlzY19sZWFmKHAsIGNsaWQpOwogCQkJfSBlbHNlIHsgLyppbmdyZXNzICovCi0JCQkJcSA9IGRldi0+cWRpc2NfaW5ncmVzczsKKwkJCQlxID0gZGV2LT5yeF9xdWV1ZS5xZGlzYzsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXEgPSBkZXYtPnFkaXNjX3NsZWVwaW5nOworCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlOworCQkJZGV2X3F1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOworCQkJcSA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7CiAJCX0KIAogCQkvKiBJdCBtYXkgYmUgZGVmYXVsdCBxZGlzYywgaWdub3JlIGl0ICovCkBAIC03ODgsMTAgKzEwODUsMTIgQEAKIAlpZiAoIShuLT5ubG1zZ19mbGFncyZOTE1fRl9DUkVBVEUpKQogCQlyZXR1cm4gLUVOT0VOVDsKIAlpZiAoY2xpZCA9PSBUQ19IX0lOR1JFU1MpCi0JCXEgPSBxZGlzY19jcmVhdGUoZGV2LCB0Y20tPnRjbV9wYXJlbnQsIHRjbS0+dGNtX3BhcmVudCwKKwkJcSA9IHFkaXNjX2NyZWF0ZShkZXYsICZkZXYtPnJ4X3F1ZXVlLAorCQkJCSB0Y20tPnRjbV9wYXJlbnQsIHRjbS0+dGNtX3BhcmVudCwKIAkJCQkgdGNhLCAmZXJyKTsKIAllbHNlCi0JCXEgPSBxZGlzY19jcmVhdGUoZGV2LCB0Y20tPnRjbV9wYXJlbnQsIHRjbS0+dGNtX2hhbmRsZSwKKwkJcSA9IHFkaXNjX2NyZWF0ZShkZXYsIG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKSwKKwkJCQkgdGNtLT50Y21fcGFyZW50LCB0Y20tPnRjbV9oYW5kbGUsCiAJCQkJIHRjYSwgJmVycik7CiAJaWYgKHEgPT0gTlVMTCkgewogCQlpZiAoZXJyID09IC1FQUdBSU4pCkBAIC04MDEsMjIgKzExMDAsMTggQEAKIAogZ3JhZnQ6CiAJaWYgKDEpIHsKLQkJc3RydWN0IFFkaXNjICpvbGRfcSA9IE5VTEw7Ci0JCWVyciA9IHFkaXNjX2dyYWZ0KGRldiwgcCwgY2xpZCwgcSwgJm9sZF9xKTsKKwkJc3BpbmxvY2tfdCAqcm9vdF9sb2NrOworCisJCWVyciA9IHFkaXNjX2dyYWZ0KGRldiwgcCwgc2tiLCBuLCBjbGlkLCBxLCBOVUxMKTsKIAkJaWYgKGVycikgewogCQkJaWYgKHEpIHsKLQkJCQlxZGlzY19sb2NrX3RyZWUoZGV2KTsKKwkJCQlyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2socSk7CisJCQkJc3Bpbl9sb2NrX2JoKHJvb3RfbG9jayk7CiAJCQkJcWRpc2NfZGVzdHJveShxKTsKLQkJCQlxZGlzY191bmxvY2tfdHJlZShkZXYpOworCQkJCXNwaW5fdW5sb2NrX2JoKHJvb3RfbG9jayk7CiAJCQl9CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCXFkaXNjX25vdGlmeShza2IsIG4sIGNsaWQsIG9sZF9xLCBxKTsKLQkJaWYgKG9sZF9xKSB7Ci0JCQlxZGlzY19sb2NrX3RyZWUoZGV2KTsKLQkJCXFkaXNjX2Rlc3Ryb3kob2xkX3EpOwotCQkJcWRpc2NfdW5sb2NrX3RyZWUoZGV2KTsKLQkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTgzNCw3ICsxMTI5LDcgQEAKIAl0Y20tPnRjbV9mYW1pbHkgPSBBRl9VTlNQRUM7CiAJdGNtLT50Y21fX3BhZDEgPSAwOwogCXRjbS0+dGNtX19wYWQyID0gMDsKLQl0Y20tPnRjbV9pZmluZGV4ID0gcS0+ZGV2LT5pZmluZGV4OworCXRjbS0+dGNtX2lmaW5kZXggPSBxZGlzY19kZXYocSktPmlmaW5kZXg7CiAJdGNtLT50Y21fcGFyZW50ID0gY2xpZDsKIAl0Y20tPnRjbV9oYW5kbGUgPSBxLT5oYW5kbGU7CiAJdGNtLT50Y21faW5mbyA9IGF0b21pY19yZWFkKCZxLT5yZWZjbnQpOwpAQCAtODQzLDggKzExMzgsMTEgQEAKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJcS0+cXN0YXRzLnFsZW4gPSBxLT5xLnFsZW47CiAKKwlpZiAocS0+c3RhYiAmJiBxZGlzY19kdW1wX3N0YWIoc2tiLCBxLT5zdGFiKSA8IDApCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCiAJaWYgKGduZXRfc3RhdHNfc3RhcnRfY29weV9jb21wYXQoc2tiLCBUQ0FfU1RBVFMyLCBUQ0FfU1RBVFMsCi0JCQlUQ0FfWFNUQVRTLCBxLT5zdGF0c19sb2NrLCAmZCkgPCAwKQorCQkJCQkgVENBX1hTVEFUUywgcWRpc2Nfcm9vdF9sb2NrKHEpLCAmZCkgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWlmIChxLT5vcHMtPmR1bXBfc3RhdHMgJiYgcS0+b3BzLT5kdW1wX3N0YXRzKHEsICZkKSA8IDApCkBAIC04OTQsMTMgKzExOTIsNTcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGJvb2wgdGNfcWRpc2NfZHVtcF9pZ25vcmUoc3RydWN0IFFkaXNjICpxKQoreworCXJldHVybiAocS0+ZmxhZ3MgJiBUQ1FfRl9CVUlMVElOKSA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGludCB0Y19kdW1wX3FkaXNjX3Jvb3Qoc3RydWN0IFFkaXNjICpyb290LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAorCQkJICAgICAgaW50ICpxX2lkeF9wLCBpbnQgc19xX2lkeCkKK3sKKwlpbnQgcmV0ID0gMCwgcV9pZHggPSAqcV9pZHhfcDsKKwlzdHJ1Y3QgUWRpc2MgKnE7CisKKwlpZiAoIXJvb3QpCisJCXJldHVybiAwOworCisJcSA9IHJvb3Q7CisJaWYgKHFfaWR4IDwgc19xX2lkeCkgeworCQlxX2lkeCsrOworCX0gZWxzZSB7CisJCWlmICghdGNfcWRpc2NfZHVtcF9pZ25vcmUocSkgJiYKKwkJICAgIHRjX2ZpbGxfcWRpc2Moc2tiLCBxLCBxLT5wYXJlbnQsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCSAgY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwgUlRNX05FV1FESVNDKSA8PSAwKQorCQkJZ290byBkb25lOworCQlxX2lkeCsrOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZyb290LT5saXN0LCBsaXN0KSB7CisJCWlmIChxX2lkeCA8IHNfcV9pZHgpIHsKKwkJCXFfaWR4Kys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXRjX3FkaXNjX2R1bXBfaWdub3JlKHEpICYmIAorCQkgICAgdGNfZmlsbF9xZGlzYyhza2IsIHEsIHEtPnBhcmVudCwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQkJICBjYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLCBSVE1fTkVXUURJU0MpIDw9IDApCisJCQlnb3RvIGRvbmU7CisJCXFfaWR4Kys7CisJfQorCitvdXQ6CisJKnFfaWR4X3AgPSBxX2lkeDsKKwlyZXR1cm4gcmV0OworZG9uZToKKwlyZXQgPSAtMTsKKwlnb3RvIG91dDsKK30KKwogc3RhdGljIGludCB0Y19kdW1wX3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlpbnQgaWR4LCBxX2lkeDsKIAlpbnQgc19pZHgsIHNfcV9pZHg7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgUWRpc2MgKnE7CiAKIAlpZiAobmV0ICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIDA7CkBAIC05MTAsMjEgKzEyNTIsMjIgQEAKIAlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwogCWlkeCA9IDA7CiAJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KSB7CisJCXN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZTsKKwogCQlpZiAoaWR4IDwgc19pZHgpCiAJCQlnb3RvIGNvbnQ7CiAJCWlmIChpZHggPiBzX2lkeCkKIAkJCXNfcV9pZHggPSAwOwogCQlxX2lkeCA9IDA7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocSwgJmRldi0+cWRpc2NfbGlzdCwgbGlzdCkgewotCQkJaWYgKHFfaWR4IDwgc19xX2lkeCkgewotCQkJCXFfaWR4Kys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAodGNfZmlsbF9xZGlzYyhza2IsIHEsIHEtPnBhcmVudCwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCi0JCQkJCSAgY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwgUlRNX05FV1FESVNDKSA8PSAwKQotCQkJCWdvdG8gZG9uZTsKLQkJCXFfaWR4Kys7Ci0JCX0KKworCQlkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7CisJCWlmICh0Y19kdW1wX3FkaXNjX3Jvb3QoZGV2X3F1ZXVlLT5xZGlzYywgc2tiLCBjYiwgJnFfaWR4LCBzX3FfaWR4KSA8IDApCisJCQlnb3RvIGRvbmU7CisKKwkJZGV2X3F1ZXVlID0gJmRldi0+cnhfcXVldWU7CisJCWlmICh0Y19kdW1wX3FkaXNjX3Jvb3QoZGV2X3F1ZXVlLT5xZGlzYywgc2tiLCBjYiwgJnFfaWR4LCBzX3FfaWR4KSA8IDApCisJCQlnb3RvIGRvbmU7CisKIGNvbnQ6CiAJCWlkeCsrOwogCX0KQEAgLTk0OSw2ICsxMjkyLDcgQEAKIHN0YXRpYyBpbnQgdGNfY3RsX3RjbGFzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWU7CiAJc3RydWN0IHRjbXNnICp0Y20gPSBOTE1TR19EQVRBKG4pOwogCXN0cnVjdCBubGF0dHIgKnRjYVtUQ0FfTUFYICsgMV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTk4Niw2ICsxMzMwLDcgQEAKIAogCS8qIFN0ZXAgMS4gRGV0ZXJtaW5lIHFkaXNjIGhhbmRsZSBYOjAgKi8KIAorCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKIAlpZiAocGlkICE9IFRDX0hfUk9PVCkgewogCQl1MzIgcWlkMSA9IFRDX0hfTUFKKHBpZCk7CiAKQEAgLTk5Niw3ICsxMzQxLDcgQEAKIAkJfSBlbHNlIGlmIChxaWQxKSB7CiAJCQlxaWQgPSBxaWQxOwogCQl9IGVsc2UgaWYgKHFpZCA9PSAwKQotCQkJcWlkID0gZGV2LT5xZGlzY19zbGVlcGluZy0+aGFuZGxlOworCQkJcWlkID0gZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZy0+aGFuZGxlOwogCiAJCS8qIE5vdyBxaWQgaXMgZ2VudWluZSBxZGlzYyBoYW5kbGUgY29uc2lzdGVudAogCQkgICBib3RoIHdpdGggcGFyZW50IGFuZCBjaGlsZC4KQEAgLTEwMDcsNyArMTM1Miw3IEBACiAJCQlwaWQgPSBUQ19IX01BS0UocWlkLCBwaWQpOwogCX0gZWxzZSB7CiAJCWlmIChxaWQgPT0gMCkKLQkJCXFpZCA9IGRldi0+cWRpc2Nfc2xlZXBpbmctPmhhbmRsZTsKKwkJCXFpZCA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmctPmhhbmRsZTsKIAl9CiAKIAkvKiBPSy4gTG9jYXRlIHFkaXNjICovCkBAIC0xMDgwLDcgKzE0MjUsNyBAQAogCW5saCA9IE5MTVNHX05FVyhza2IsIHBpZCwgc2VxLCBldmVudCwgc2l6ZW9mKCp0Y20pLCBmbGFncyk7CiAJdGNtID0gTkxNU0dfREFUQShubGgpOwogCXRjbS0+dGNtX2ZhbWlseSA9IEFGX1VOU1BFQzsKLQl0Y20tPnRjbV9pZmluZGV4ID0gcS0+ZGV2LT5pZmluZGV4OworCXRjbS0+dGNtX2lmaW5kZXggPSBxZGlzY19kZXYocSktPmlmaW5kZXg7CiAJdGNtLT50Y21fcGFyZW50ID0gcS0+aGFuZGxlOwogCXRjbS0+dGNtX2hhbmRsZSA9IHEtPmhhbmRsZTsKIAl0Y20tPnRjbV9pbmZvID0gMDsKQEAgLTEwODksNyArMTQzNCw3IEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJaWYgKGduZXRfc3RhdHNfc3RhcnRfY29weV9jb21wYXQoc2tiLCBUQ0FfU1RBVFMyLCBUQ0FfU1RBVFMsCi0JCQlUQ0FfWFNUQVRTLCBxLT5zdGF0c19sb2NrLCAmZCkgPCAwKQorCQkJCQkgVENBX1hTVEFUUywgcWRpc2Nfcm9vdF9sb2NrKHEpLCAmZCkgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWlmIChjbF9vcHMtPmR1bXBfc3RhdHMgJiYgY2xfb3BzLT5kdW1wX3N0YXRzKHEsIGNsLCAmZCkgPCAwKQpAQCAtMTE0MCwxNSArMTQ4NSw2MiBAQAogCQkJICAgICAgYS0+Y2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwgUlRNX05FV1RDTEFTUyk7CiB9CiAKK3N0YXRpYyBpbnQgdGNfZHVtcF90Y2xhc3NfcWRpc2Moc3RydWN0IFFkaXNjICpxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCB0Y21zZyAqdGNtLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCisJCQkJaW50ICp0X3AsIGludCBzX3QpCit7CisJc3RydWN0IHFkaXNjX2R1bXBfYXJncyBhcmc7CisKKwlpZiAodGNfcWRpc2NfZHVtcF9pZ25vcmUocSkgfHwKKwkgICAgKnRfcCA8IHNfdCB8fCAhcS0+b3BzLT5jbF9vcHMgfHwKKwkgICAgKHRjbS0+dGNtX3BhcmVudCAmJgorCSAgICAgVENfSF9NQUoodGNtLT50Y21fcGFyZW50KSAhPSBxLT5oYW5kbGUpKSB7CisJCSgqdF9wKSsrOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCp0X3AgPiBzX3QpCisJCW1lbXNldCgmY2ItPmFyZ3NbMV0sIDAsIHNpemVvZihjYi0+YXJncyktc2l6ZW9mKGNiLT5hcmdzWzBdKSk7CisJYXJnLncuZm4gPSBxZGlzY19jbGFzc19kdW1wOworCWFyZy5za2IgPSBza2I7CisJYXJnLmNiID0gY2I7CisJYXJnLncuc3RvcCAgPSAwOworCWFyZy53LnNraXAgPSBjYi0+YXJnc1sxXTsKKwlhcmcudy5jb3VudCA9IDA7CisJcS0+b3BzLT5jbF9vcHMtPndhbGsocSwgJmFyZy53KTsKKwljYi0+YXJnc1sxXSA9IGFyZy53LmNvdW50OworCWlmIChhcmcudy5zdG9wKQorCQlyZXR1cm4gLTE7CisJKCp0X3ApKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGNfZHVtcF90Y2xhc3Nfcm9vdChzdHJ1Y3QgUWRpc2MgKnJvb3QsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgc3RydWN0IHRjbXNnICp0Y20sIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKKwkJCSAgICAgICBpbnQgKnRfcCwgaW50IHNfdCkKK3sKKwlzdHJ1Y3QgUWRpc2MgKnE7CisKKwlpZiAoIXJvb3QpCisJCXJldHVybiAwOworCisJaWYgKHRjX2R1bXBfdGNsYXNzX3FkaXNjKHJvb3QsIHNrYiwgdGNtLCBjYiwgdF9wLCBzX3QpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmcm9vdC0+bGlzdCwgbGlzdCkgeworCQlpZiAodGNfZHVtcF90Y2xhc3NfcWRpc2MocSwgc2tiLCB0Y20sIGNiLCB0X3AsIHNfdCkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHRjX2R1bXBfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKLQlpbnQgdDsKLQlpbnQgc190OwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IFFkaXNjICpxOwogCXN0cnVjdCB0Y21zZyAqdGNtID0gKHN0cnVjdCB0Y21zZyopTkxNU0dfREFUQShjYi0+bmxoKTsKLQlzdHJ1Y3QgcWRpc2NfZHVtcF9hcmdzIGFyZzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWU7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgdCwgc190OwogCiAJaWYgKG5ldCAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiAwOwpAQCAtMTE2MSwyOCArMTU1MywxNSBAQAogCXNfdCA9IGNiLT5hcmdzWzBdOwogCXQgPSAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmZGV2LT5xZGlzY19saXN0LCBsaXN0KSB7Ci0JCWlmICh0IDwgc190IHx8ICFxLT5vcHMtPmNsX29wcyB8fAotCQkgICAgKHRjbS0+dGNtX3BhcmVudCAmJgotCQkgICAgIFRDX0hfTUFKKHRjbS0+dGNtX3BhcmVudCkgIT0gcS0+aGFuZGxlKSkgewotCQkJdCsrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHQgPiBzX3QpCi0JCQltZW1zZXQoJmNiLT5hcmdzWzFdLCAwLCBzaXplb2YoY2ItPmFyZ3MpLXNpemVvZihjYi0+YXJnc1swXSkpOwotCQlhcmcudy5mbiA9IHFkaXNjX2NsYXNzX2R1bXA7Ci0JCWFyZy5za2IgPSBza2I7Ci0JCWFyZy5jYiA9IGNiOwotCQlhcmcudy5zdG9wICA9IDA7Ci0JCWFyZy53LnNraXAgPSBjYi0+YXJnc1sxXTsKLQkJYXJnLncuY291bnQgPSAwOwotCQlxLT5vcHMtPmNsX29wcy0+d2FsayhxLCAmYXJnLncpOwotCQljYi0+YXJnc1sxXSA9IGFyZy53LmNvdW50OwotCQlpZiAoYXJnLncuc3RvcCkKLQkJCWJyZWFrOwotCQl0Kys7Ci0JfQorCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKKwlpZiAodGNfZHVtcF90Y2xhc3Nfcm9vdChkZXZfcXVldWUtPnFkaXNjLCBza2IsIHRjbSwgY2IsICZ0LCBzX3QpIDwgMCkKKwkJZ290byBkb25lOwogCisJZGV2X3F1ZXVlID0gJmRldi0+cnhfcXVldWU7CisJaWYgKHRjX2R1bXBfdGNsYXNzX3Jvb3QoZGV2X3F1ZXVlLT5xZGlzYywgc2tiLCB0Y20sIGNiLCAmdCwgc190KSA8IDApCisJCWdvdG8gZG9uZTsKKworZG9uZToKIAljYi0+YXJnc1swXSA9IHQ7CiAKIAlkZXZfcHV0KGRldik7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2F0bS5jIGIvbmV0L3NjaGVkL3NjaF9hdG0uYwppbmRleCBkYjBlMjNhLi4wNGZhYTgzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2F0bS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXRtLmMKQEAgLTI5Niw3ICsyOTYsOCBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCWZsb3ctPmZpbHRlcl9saXN0ID0gTlVMTDsKLQlmbG93LT5xID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMsIGNsYXNzaWQpOworCWZsb3ctPnEgPSBxZGlzY19jcmVhdGVfZGZsdChxZGlzY19kZXYoc2NoKSwgc2NoLT5kZXZfcXVldWUsCisJCQkJICAgICZwZmlmb19xZGlzY19vcHMsIGNsYXNzaWQpOwogCWlmICghZmxvdy0+cSkKIAkJZmxvdy0+cSA9ICZub29wX3FkaXNjOwogCXByX2RlYnVnKCJhdG1fdGNfY2hhbmdlOiBxZGlzYyAlcFxuIiwgZmxvdy0+cSk7CkBAIC00MjgsNyArNDI5LDcgQEAKICNlbmRpZgogCX0KIAotCXJldCA9IGZsb3ctPnEtPmVucXVldWUoc2tiLCBmbG93LT5xKTsKKwlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgZmxvdy0+cSk7CiAJaWYgKHJldCAhPSAwKSB7CiBkcm9wOiBfX21heWJlX3VudXNlZAogCQlzY2gtPnFzdGF0cy5kcm9wcysrOwpAQCAtNDM2LDkgKzQzNyw5IEBACiAJCQlmbG93LT5xc3RhdHMuZHJvcHMrKzsKIAkJcmV0dXJuIHJldDsKIAl9Ci0Jc2NoLT5ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwogCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKLQlmbG93LT5ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJZmxvdy0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAlmbG93LT5ic3RhdHMucGFja2V0cysrOwogCS8qCiAJICogT2theSwgdGhpcyBtYXkgc2VlbSB3ZWlyZC4gV2UgcHJldGVuZCB3ZSd2ZSBkcm9wcGVkIHRoZSBwYWNrZXQgaWYKQEAgLTU1NSw3ICs1NTYsOCBAQAogCiAJcHJfZGVidWcoImF0bV90Y19pbml0KHNjaCAlcCxbcWRpc2MgJXBdLG9wdCAlcClcbiIsIHNjaCwgcCwgb3B0KTsKIAlwLT5mbG93cyA9ICZwLT5saW5rOwotCXAtPmxpbmsucSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLCBzY2gtPmhhbmRsZSk7CisJcC0+bGluay5xID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAorCQkJCSAgICAgICZwZmlmb19xZGlzY19vcHMsIHNjaC0+aGFuZGxlKTsKIAlpZiAoIXAtPmxpbmsucSkKIAkJcC0+bGluay5xID0gJm5vb3BfcWRpc2M7CiAJcHJfZGVidWcoImF0bV90Y19pbml0OiBsaW5rICglcCkgcWRpc2MgJXBcbiIsICZwLT5saW5rLCBwLT5saW5rLnEpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggMmEzYzk3Zi4uZjFkMmY4ZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC03MywxMSArNzMsMTAgQEAKIAogc3RydWN0IGNicV9jbGFzcwogewotCXN0cnVjdCBjYnFfY2xhc3MJKm5leHQ7CQkvKiBoYXNoIHRhYmxlIGxpbmsgKi8KKwlzdHJ1Y3QgUWRpc2NfY2xhc3NfY29tbW9uIGNvbW1vbjsKIAlzdHJ1Y3QgY2JxX2NsYXNzCSpuZXh0X2FsaXZlOwkvKiBuZXh0IGNsYXNzIHdpdGggYmFja2xvZyBpbiB0aGlzIHByaW9yaXR5IGJhbmQgKi8KIAogLyogUGFyYW1ldGVycyAqLwotCXUzMgkJCWNsYXNzaWQ7CiAJdW5zaWduZWQgY2hhcgkJcHJpb3JpdHk7CS8qIGNsYXNzIHByaW9yaXR5ICovCiAJdW5zaWduZWQgY2hhcgkJcHJpb3JpdHkyOwkvKiBwcmlvcml0eSB0byBiZSB1c2VkIGFmdGVyIG92ZXJsaW1pdCAqLwogCXVuc2lnbmVkIGNoYXIJCWV3bWFfbG9nOwkvKiB0aW1lIGNvbnN0YW50IGZvciBpZGxlIHRpbWUgY2FsY3VsYXRpb24gKi8KQEAgLTE0NCw3ICsxNDMsNyBAQAogCiBzdHJ1Y3QgY2JxX3NjaGVkX2RhdGEKIHsKLQlzdHJ1Y3QgY2JxX2NsYXNzCSpjbGFzc2VzWzE2XTsJCS8qIEhhc2ggdGFibGUgb2YgYWxsIGNsYXNzZXMgKi8KKwlzdHJ1Y3QgUWRpc2NfY2xhc3NfaGFzaAljbGhhc2g7CQkJLyogSGFzaCB0YWJsZSBvZiBhbGwgY2xhc3NlcyAqLwogCWludAkJCW5jbGFzc2VzW1RDX0NCUV9NQVhQUklPKzFdOwogCXVuc2lnbmVkCQlxdWFudGFbVENfQ0JRX01BWFBSSU8rMV07CiAKQEAgLTE3NywyMyArMTc2LDE1IEBACiAKICNkZWZpbmUgTDJUKGNsLGxlbikJcWRpc2NfbDJ0KChjbCktPlJfdGFiLGxlbikKIAotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjYnFfaGFzaCh1MzIgaCkKLXsKLQloIF49IGg+Pjg7Ci0JaCBePSBoPj40OwotCXJldHVybiBoJjB4RjsKLX0KLQogc3RhdGljIF9faW5saW5lX18gc3RydWN0IGNicV9jbGFzcyAqCiBjYnFfY2xhc3NfbG9va3VwKHN0cnVjdCBjYnFfc2NoZWRfZGF0YSAqcSwgdTMyIGNsYXNzaWQpCiB7Ci0Jc3RydWN0IGNicV9jbGFzcyAqY2w7CisJc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbiAqY2xjOwogCi0JZm9yIChjbCA9IHEtPmNsYXNzZXNbY2JxX2hhc2goY2xhc3NpZCldOyBjbDsgY2wgPSBjbC0+bmV4dCkKLQkJaWYgKGNsLT5jbGFzc2lkID09IGNsYXNzaWQpCi0JCQlyZXR1cm4gY2w7Ci0JcmV0dXJuIE5VTEw7CisJY2xjID0gcWRpc2NfY2xhc3NfZmluZCgmcS0+Y2xoYXNoLCBjbGFzc2lkKTsKKwlpZiAoY2xjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXJldHVybiBjb250YWluZXJfb2YoY2xjLCBzdHJ1Y3QgY2JxX2NsYXNzLCBjb21tb24pOwogfQogCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCkBAIC0zNzksNyArMzcwLDYgQEAKIGNicV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKQogewogCXN0cnVjdCBjYnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKLQlpbnQgbGVuID0gc2tiLT5sZW47CiAJaW50IHVuaW5pdGlhbGl6ZWRfdmFyKHJldCk7CiAJc3RydWN0IGNicV9jbGFzcyAqY2wgPSBjYnFfY2xhc3NpZnkoc2tiLCBzY2gsICZyZXQpOwogCkBAIC0zOTYsMTAgKzM4NiwxMSBAQAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCWNsLT5xLT5fX3BhcmVudCA9IHNjaDsKICNlbmRpZgotCWlmICgocmV0ID0gY2wtPnEtPmVucXVldWUoc2tiLCBjbC0+cSkpID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKKwlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnEpOworCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewogCQlzY2gtPnEucWxlbisrOwogCQlzY2gtPmJzdGF0cy5wYWNrZXRzKys7Ci0JCXNjaC0+YnN0YXRzLmJ5dGVzKz1sZW47CisJCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAkJY2JxX21hcmtfdG9wbGV2ZWwocSwgY2wpOwogCQlpZiAoIWNsLT5uZXh0X2FsaXZlKQogCQkJY2JxX2FjdGl2YXRlX2NsYXNzKGNsKTsKQEAgLTY1OSwxNCArNjUwLDEzIEBACiAJfQogCiAJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOwotCW5ldGlmX3NjaGVkdWxlKHNjaC0+ZGV2KTsKKwlfX25ldGlmX3NjaGVkdWxlKHNjaCk7CiAJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwogfQogCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiBzdGF0aWMgaW50IGNicV9yZXNoYXBlX2ZhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpjaGlsZCkKIHsKLQlpbnQgbGVuID0gc2tiLT5sZW47CiAJc3RydWN0IFFkaXNjICpzY2ggPSBjaGlsZC0+X19wYXJlbnQ7CiAJc3RydWN0IGNicV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCBjYnFfY2xhc3MgKmNsID0gcS0+cnhfY2xhc3M7CkBAIC02ODAsMTAgKzY3MCwxMCBAQAogCQlxLT5yeF9jbGFzcyA9IGNsOwogCQljbC0+cS0+X19wYXJlbnQgPSBzY2g7CiAKLQkJaWYgKGNsLT5xLT5lbnF1ZXVlKHNrYiwgY2wtPnEpID09IDApIHsKKwkJaWYgKHFkaXNjX2VucXVldWUoc2tiLCBjbC0+cSkgPT0gMCkgewogCQkJc2NoLT5xLnFsZW4rKzsKIAkJCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKLQkJCXNjaC0+YnN0YXRzLmJ5dGVzKz1sZW47CisJCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJCQlpZiAoIWNsLT5uZXh0X2FsaXZlKQogCQkJCWNicV9hY3RpdmF0ZV9jbGFzcyhjbCk7CiAJCQlyZXR1cm4gMDsKQEAgLTg4OSw3ICs4NzksNyBAQAogCQkJaWYgKHNrYiA9PSBOVUxMKQogCQkJCWdvdG8gc2tpcF9jbGFzczsKIAotCQkJY2wtPmRlZmljaXQgLT0gc2tiLT5sZW47CisJCQljbC0+ZGVmaWNpdCAtPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJCQlxLT50eF9jbGFzcyA9IGNsOwogCQkJcS0+dHhfYm9ycm93ZWQgPSBib3Jyb3c7CiAJCQlpZiAoYm9ycm93ICE9IGNsKSB7CkBAIC04OTcsMTEgKzg4NywxMSBAQAogCQkJCWJvcnJvdy0+eHN0YXRzLmJvcnJvd3MrKzsKIAkJCQljbC0+eHN0YXRzLmJvcnJvd3MrKzsKICNlbHNlCi0JCQkJYm9ycm93LT54c3RhdHMuYm9ycm93cyArPSBza2ItPmxlbjsKLQkJCQljbC0+eHN0YXRzLmJvcnJvd3MgKz0gc2tiLT5sZW47CisJCQkJYm9ycm93LT54c3RhdHMuYm9ycm93cyArPSBxZGlzY19wa3RfbGVuKHNrYik7CisJCQkJY2wtPnhzdGF0cy5ib3Jyb3dzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKICNlbmRpZgogCQkJfQotCQkJcS0+dHhfbGVuID0gc2tiLT5sZW47CisJCQlxLT50eF9sZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CiAKIAkJCWlmIChjbC0+ZGVmaWNpdCA8PSAwKSB7CiAJCQkJcS0+YWN0aXZlW3ByaW9dID0gY2w7CkBAIC0xMDcxLDEzICsxMDYxLDE0IEBACiBzdGF0aWMgdm9pZCBjYnFfbm9ybWFsaXplX3F1YW50YShzdHJ1Y3QgY2JxX3NjaGVkX2RhdGEgKnEsIGludCBwcmlvKQogewogCXN0cnVjdCBjYnFfY2xhc3MgKmNsOwotCXVuc2lnbmVkIGg7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisJdW5zaWduZWQgaW50IGg7CiAKIAlpZiAocS0+cXVhbnRhW3ByaW9dID09IDApCiAJCXJldHVybjsKIAotCWZvciAoaD0wOyBoPDE2OyBoKyspIHsKLQkJZm9yIChjbCA9IHEtPmNsYXNzZXNbaF07IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisJZm9yIChoID0gMDsgaCA8IHEtPmNsaGFzaC5oYXNoc2l6ZTsgaCsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsLCBuLCAmcS0+Y2xoYXNoLmhhc2hbaF0sIGNvbW1vbi5obm9kZSkgewogCQkJLyogQlVHR0dHLi4uIEJld2FyZSEgVGhpcyBleHByZXNzaW9uIHN1ZmZlciBvZgogCQkJICAgYXJpdGhtZXRpYyBvdmVyZmxvd3MhCiAJCQkgKi8KQEAgLTEwODUsOSArMTA3Niw5IEBACiAJCQkJY2wtPnF1YW50dW0gPSAoY2wtPndlaWdodCpjbC0+YWxsb3QqcS0+bmNsYXNzZXNbcHJpb10pLwogCQkJCQlxLT5xdWFudGFbcHJpb107CiAJCQl9Ci0JCQlpZiAoY2wtPnF1YW50dW0gPD0gMCB8fCBjbC0+cXVhbnR1bT4zMipjbC0+cWRpc2MtPmRldi0+bXR1KSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0JROiBjbGFzcyAlMDh4IGhhcyBiYWQgcXVhbnR1bT09JWxkLCByZXBhaXJlZC5cbiIsIGNsLT5jbGFzc2lkLCBjbC0+cXVhbnR1bSk7Ci0JCQkJY2wtPnF1YW50dW0gPSBjbC0+cWRpc2MtPmRldi0+bXR1LzIgKyAxOworCQkJaWYgKGNsLT5xdWFudHVtIDw9IDAgfHwgY2wtPnF1YW50dW0+MzIqcWRpc2NfZGV2KGNsLT5xZGlzYyktPm10dSkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNCUTogY2xhc3MgJTA4eCBoYXMgYmFkIHF1YW50dW09PSVsZCwgcmVwYWlyZWQuXG4iLCBjbC0+Y29tbW9uLmNsYXNzaWQsIGNsLT5xdWFudHVtKTsKKwkJCQljbC0+cXVhbnR1bSA9IHFkaXNjX2RldihjbC0+cWRpc2MpLT5tdHUvMiArIDE7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMTE0LDEwICsxMTA1LDEyIEBACiAJCWlmIChzcGxpdC0+ZGVmYXVsdHNbaV0pCiAJCQljb250aW51ZTsKIAotCQlmb3IgKGg9MDsgaDwxNjsgaCsrKSB7CisJCWZvciAoaCA9IDA7IGggPCBxLT5jbGhhc2guaGFzaHNpemU7IGgrKykgeworCQkJc3RydWN0IGhsaXN0X25vZGUgKm47CiAJCQlzdHJ1Y3QgY2JxX2NsYXNzICpjOwogCi0JCQlmb3IgKGMgPSBxLT5jbGFzc2VzW2hdOyBjOyBjID0gYy0+bmV4dCkgeworCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoYywgbiwgJnEtPmNsaGFzaC5oYXNoW2hdLAorCQkJCQkgICAgIGNvbW1vbi5obm9kZSkgewogCQkJCWlmIChjLT5zcGxpdCA9PSBzcGxpdCAmJiBjLT5sZXZlbCA8IGxldmVsICYmCiAJCQkJICAgIGMtPmRlZm1hcCYoMTw8aSkpIHsKIAkJCQkJc3BsaXQtPmRlZmF1bHRzW2ldID0gYzsKQEAgLTExMzUsMTIgKzExMjgsMTIgQEAKIAlpZiAoc3BsaXRpZCA9PSAwKSB7CiAJCWlmICgoc3BsaXQgPSBjbC0+c3BsaXQpID09IE5VTEwpCiAJCQlyZXR1cm47Ci0JCXNwbGl0aWQgPSBzcGxpdC0+Y2xhc3NpZDsKKwkJc3BsaXRpZCA9IHNwbGl0LT5jb21tb24uY2xhc3NpZDsKIAl9CiAKLQlpZiAoc3BsaXQgPT0gTlVMTCB8fCBzcGxpdC0+Y2xhc3NpZCAhPSBzcGxpdGlkKSB7CisJaWYgKHNwbGl0ID09IE5VTEwgfHwgc3BsaXQtPmNvbW1vbi5jbGFzc2lkICE9IHNwbGl0aWQpIHsKIAkJZm9yIChzcGxpdCA9IGNsLT50cGFyZW50OyBzcGxpdDsgc3BsaXQgPSBzcGxpdC0+dHBhcmVudCkKLQkJCWlmIChzcGxpdC0+Y2xhc3NpZCA9PSBzcGxpdGlkKQorCQkJaWYgKHNwbGl0LT5jb21tb24uY2xhc3NpZCA9PSBzcGxpdGlkKQogCQkJCWJyZWFrOwogCX0KIApAQCAtMTE2MywxMyArMTE1Niw3IEBACiAJc3RydWN0IGNicV9jbGFzcyAqY2wsICoqY2xwOwogCXN0cnVjdCBjYnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYodGhpcy0+cWRpc2MpOwogCi0JZm9yIChjbHAgPSAmcS0+Y2xhc3Nlc1tjYnFfaGFzaCh0aGlzLT5jbGFzc2lkKV07IChjbCA9ICpjbHApICE9IE5VTEw7IGNscCA9ICZjbC0+bmV4dCkgewotCQlpZiAoY2wgPT0gdGhpcykgewotCQkJKmNscCA9IGNsLT5uZXh0OwotCQkJY2wtPm5leHQgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoJnEtPmNsaGFzaCwgJnRoaXMtPmNvbW1vbik7CiAKIAlpZiAodGhpcy0+dHBhcmVudCkgewogCQljbHA9JnRoaXMtPnNpYmxpbmc7CkBAIC0xMTk1LDEyICsxMTgyLDEwIEBACiBzdGF0aWMgdm9pZCBjYnFfbGlua19jbGFzcyhzdHJ1Y3QgY2JxX2NsYXNzICp0aGlzKQogewogCXN0cnVjdCBjYnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYodGhpcy0+cWRpc2MpOwotCXVuc2lnbmVkIGggPSBjYnFfaGFzaCh0aGlzLT5jbGFzc2lkKTsKIAlzdHJ1Y3QgY2JxX2NsYXNzICpwYXJlbnQgPSB0aGlzLT50cGFyZW50OwogCiAJdGhpcy0+c2libGluZyA9IHRoaXM7Ci0JdGhpcy0+bmV4dCA9IHEtPmNsYXNzZXNbaF07Ci0JcS0+Y2xhc3Nlc1toXSA9IHRoaXM7CisJcWRpc2NfY2xhc3NfaGFzaF9pbnNlcnQoJnEtPmNsaGFzaCwgJnRoaXMtPmNvbW1vbik7CiAKIAlpZiAocGFyZW50ID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTEyNDIsNiArMTIyNyw3IEBACiB7CiAJc3RydWN0IGNicV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCBjYnFfY2xhc3MgKmNsOworCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCWludCBwcmlvOwogCXVuc2lnbmVkIGg7CiAKQEAgLTEyNTgsOCArMTI0NCw4IEBACiAJZm9yIChwcmlvID0gMDsgcHJpbyA8PSBUQ19DQlFfTUFYUFJJTzsgcHJpbysrKQogCQlxLT5hY3RpdmVbcHJpb10gPSBOVUxMOwogCi0JZm9yIChoID0gMDsgaCA8IDE2OyBoKyspIHsKLQkJZm9yIChjbCA9IHEtPmNsYXNzZXNbaF07IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisJZm9yIChoID0gMDsgaCA8IHEtPmNsaGFzaC5oYXNoc2l6ZTsgaCsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsLCBuLCAmcS0+Y2xoYXNoLmhhc2hbaF0sIGNvbW1vbi5obm9kZSkgewogCQkJcWRpc2NfcmVzZXQoY2wtPnEpOwogCiAJCQljbC0+bmV4dF9hbGl2ZSA9IE5VTEw7CkBAIC0xNDA2LDExICsxMzkyLDE2IEBACiAJaWYgKChxLT5saW5rLlJfdGFiID0gcWRpc2NfZ2V0X3J0YWIociwgdGJbVENBX0NCUV9SVEFCXSkpID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZXJyID0gcWRpc2NfY2xhc3NfaGFzaF9pbml0KCZxLT5jbGhhc2gpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHB1dF9ydGFiOworCiAJcS0+bGluay5yZWZjbnQgPSAxOwogCXEtPmxpbmsuc2libGluZyA9ICZxLT5saW5rOwotCXEtPmxpbmsuY2xhc3NpZCA9IHNjaC0+aGFuZGxlOworCXEtPmxpbmsuY29tbW9uLmNsYXNzaWQgPSBzY2gtPmhhbmRsZTsKIAlxLT5saW5rLnFkaXNjID0gc2NoOwotCWlmICghKHEtPmxpbmsucSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLAorCWlmICghKHEtPmxpbmsucSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHFkaXNjX2RldihzY2gpLCBzY2gtPmRldl9xdWV1ZSwKKwkJCQkJICAgICZwZmlmb19xZGlzY19vcHMsCiAJCQkJCSAgICBzY2gtPmhhbmRsZSkpKQogCQlxLT5saW5rLnEgPSAmbm9vcF9xZGlzYzsKIApAQCAtMTQxOSw3ICsxNDEwLDcgQEAKIAlxLT5saW5rLmNwcmlvcml0eSA9IFRDX0NCUV9NQVhQUklPLTE7CiAJcS0+bGluay5vdmxfc3RyYXRlZ3kgPSBUQ19DQlFfT1ZMX0NMQVNTSUM7CiAJcS0+bGluay5vdmVybGltaXQgPSBjYnFfb3ZsX2NsYXNzaWM7Ci0JcS0+bGluay5hbGxvdCA9IHBzY2hlZF9tdHUoc2NoLT5kZXYpOworCXEtPmxpbmsuYWxsb3QgPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTsKIAlxLT5saW5rLnF1YW50dW0gPSBxLT5saW5rLmFsbG90OwogCXEtPmxpbmsud2VpZ2h0ID0gcS0+bGluay5SX3RhYi0+cmF0ZS5yYXRlOwogCkBAIC0xNDQxLDYgKzE0MzIsMTAgQEAKIAogCWNicV9hZGRwcmlvKHEsICZxLT5saW5rKTsKIAlyZXR1cm4gMDsKKworcHV0X3J0YWI6CisJcWRpc2NfcHV0X3J0YWIocS0+bGluay5SX3RhYik7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIF9faW5saW5lX18gaW50IGNicV9kdW1wX3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNicV9jbGFzcyAqY2wpCkBAIC0xNTIxLDcgKzE1MTYsNyBAQAogCXN0cnVjdCB0Y19jYnFfZm9wdCBvcHQ7CiAKIAlpZiAoY2wtPnNwbGl0IHx8IGNsLT5kZWZtYXApIHsKLQkJb3B0LnNwbGl0ID0gY2wtPnNwbGl0ID8gY2wtPnNwbGl0LT5jbGFzc2lkIDogMDsKKwkJb3B0LnNwbGl0ID0gY2wtPnNwbGl0ID8gY2wtPnNwbGl0LT5jb21tb24uY2xhc3NpZCA6IDA7CiAJCW9wdC5kZWZtYXAgPSBjbC0+ZGVmbWFwOwogCQlvcHQuZGVmY2hhbmdlID0gfjA7CiAJCU5MQV9QVVQoc2tiLCBUQ0FfQ0JRX0ZPUFQsIHNpemVvZihvcHQpLCAmb3B0KTsKQEAgLTE2MDIsMTAgKzE1OTcsMTAgQEAKIAlzdHJ1Y3QgbmxhdHRyICpuZXN0OwogCiAJaWYgKGNsLT50cGFyZW50KQotCQl0Y20tPnRjbV9wYXJlbnQgPSBjbC0+dHBhcmVudC0+Y2xhc3NpZDsKKwkJdGNtLT50Y21fcGFyZW50ID0gY2wtPnRwYXJlbnQtPmNvbW1vbi5jbGFzc2lkOwogCWVsc2UKIAkJdGNtLT50Y21fcGFyZW50ID0gVENfSF9ST09UOwotCXRjbS0+dGNtX2hhbmRsZSA9IGNsLT5jbGFzc2lkOworCXRjbS0+dGNtX2hhbmRsZSA9IGNsLT5jb21tb24uY2xhc3NpZDsKIAl0Y20tPnRjbV9pbmZvID0gY2wtPnEtPmhhbmRsZTsKIAogCW5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIFRDQV9PUFRJT05TKTsKQEAgLTE2NTAsOCArMTY0NSwxMCBAQAogCiAJaWYgKGNsKSB7CiAJCWlmIChuZXcgPT0gTlVMTCkgewotCQkJaWYgKChuZXcgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcywKLQkJCQkJCSAgICAgY2wtPmNsYXNzaWQpKSA9PSBOVUxMKQorCQkJbmV3ID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAorCQkJCQkJJnBmaWZvX3FkaXNjX29wcywKKwkJCQkJCWNsLT5jb21tb24uY2xhc3NpZCk7CisJCQlpZiAobmV3ID09IE5VTEwpCiAJCQkJcmV0dXJuIC1FTk9CVUZTOwogCQl9IGVsc2UgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVApAQCAtMTcxNiw2ICsxNzEzLDcgQEAKIGNicV9kZXN0cm95KHN0cnVjdCBRZGlzYyogc2NoKQogewogCXN0cnVjdCBjYnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKm5leHQ7CiAJc3RydWN0IGNicV9jbGFzcyAqY2w7CiAJdW5zaWduZWQgaDsKIApAQCAtMTcyNywxOCArMTcyNSwxNiBAQAogCSAqIGNsYXNzZXMgZnJvbSByb290IHRvIGxlYWZzIHdoaWNoIG1lYW5zIHRoYXQgZmlsdGVycyBjYW4gc3RpbGwKIAkgKiBiZSBib3VuZCB0byBjbGFzc2VzIHdoaWNoIGhhdmUgYmVlbiBkZXN0cm95ZWQgYWxyZWFkeS4gLS1UR1IgJzA0CiAJICovCi0JZm9yIChoID0gMDsgaCA8IDE2OyBoKyspIHsKLQkJZm9yIChjbCA9IHEtPmNsYXNzZXNbaF07IGNsOyBjbCA9IGNsLT5uZXh0KQorCWZvciAoaCA9IDA7IGggPCBxLT5jbGhhc2guaGFzaHNpemU7IGgrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjbCwgbiwgJnEtPmNsaGFzaC5oYXNoW2hdLCBjb21tb24uaG5vZGUpCiAJCQl0Y2ZfZGVzdHJveV9jaGFpbigmY2wtPmZpbHRlcl9saXN0KTsKIAl9Ci0JZm9yIChoID0gMDsgaCA8IDE2OyBoKyspIHsKLQkJc3RydWN0IGNicV9jbGFzcyAqbmV4dDsKLQotCQlmb3IgKGNsID0gcS0+Y2xhc3Nlc1toXTsgY2w7IGNsID0gbmV4dCkgewotCQkJbmV4dCA9IGNsLT5uZXh0OworCWZvciAoaCA9IDA7IGggPCBxLT5jbGhhc2guaGFzaHNpemU7IGgrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsLCBuLCBuZXh0LCAmcS0+Y2xoYXNoLmhhc2hbaF0sCisJCQkJCSAgY29tbW9uLmhub2RlKQogCQkJY2JxX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7Ci0JCX0KIAl9CisJcWRpc2NfY2xhc3NfaGFzaF9kZXN0cm95KCZxLT5jbGhhc2gpOwogfQogCiBzdGF0aWMgdm9pZCBjYnFfcHV0KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKQEAgLTE3NDcsMTIgKzE3NDMsMTMgQEAKIAogCWlmICgtLWNsLT5yZWZjbnQgPT0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAorCQlzcGlubG9ja190ICpyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2soc2NoKTsKIAkJc3RydWN0IGNicV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCi0JCXNwaW5fbG9ja19iaCgmc2NoLT5kZXYtPnF1ZXVlX2xvY2spOworCQlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKIAkJaWYgKHEtPnJ4X2NsYXNzID09IGNsKQogCQkJcS0+cnhfY2xhc3MgPSBOVUxMOwotCQlzcGluX3VubG9ja19iaCgmc2NoLT5kZXYtPnF1ZXVlX2xvY2spOworCQlzcGluX3VubG9ja19iaChyb290X2xvY2spOwogI2VuZGlmCiAKIAkJY2JxX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CkBAIC0xNzgxLDcgKzE3NzgsOCBAQAogCWlmIChjbCkgewogCQkvKiBDaGVjayBwYXJlbnQgKi8KIAkJaWYgKHBhcmVudGlkKSB7Ci0JCQlpZiAoY2wtPnRwYXJlbnQgJiYgY2wtPnRwYXJlbnQtPmNsYXNzaWQgIT0gcGFyZW50aWQpCisJCQlpZiAoY2wtPnRwYXJlbnQgJiYKKwkJCSAgICBjbC0+dHBhcmVudC0+Y29tbW9uLmNsYXNzaWQgIT0gcGFyZW50aWQpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZiAoIWNsLT50cGFyZW50ICYmIHBhcmVudGlkICE9IFRDX0hfUk9PVCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE4MzAsNyArMTgyOCw3IEBACiAKIAkJaWYgKHRjYVtUQ0FfUkFURV0pCiAJCQlnZW5fcmVwbGFjZV9lc3RpbWF0b3IoJmNsLT5ic3RhdHMsICZjbC0+cmF0ZV9lc3QsCi0JCQkJCSAgICAgICZzY2gtPmRldi0+cXVldWVfbG9jaywKKwkJCQkJICAgICAgcWRpc2Nfcm9vdF9sb2NrKHNjaCksCiAJCQkJCSAgICAgIHRjYVtUQ0FfUkFURV0pOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xODgxLDkgKzE4NzksMTAgQEAKIAljbC0+Ul90YWIgPSBydGFiOwogCXJ0YWIgPSBOVUxMOwogCWNsLT5yZWZjbnQgPSAxOwotCWlmICghKGNsLT5xID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMsIGNsYXNzaWQpKSkKKwlpZiAoIShjbC0+cSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHFkaXNjX2RldihzY2gpLCBzY2gtPmRldl9xdWV1ZSwKKwkJCQkJJnBmaWZvX3FkaXNjX29wcywgY2xhc3NpZCkpKQogCQljbC0+cSA9ICZub29wX3FkaXNjOwotCWNsLT5jbGFzc2lkID0gY2xhc3NpZDsKKwljbC0+Y29tbW9uLmNsYXNzaWQgPSBjbGFzc2lkOwogCWNsLT50cGFyZW50ID0gcGFyZW50OwogCWNsLT5xZGlzYyA9IHNjaDsKIAljbC0+YWxsb3QgPSBwYXJlbnQtPmFsbG90OwpAQCAtMTkxNiw5ICsxOTE1LDExIEBACiAJCWNicV9zZXRfZm9wdChjbCwgbmxhX2RhdGEodGJbVENBX0NCUV9GT1BUXSkpOwogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCisJcWRpc2NfY2xhc3NfaGFzaF9ncm93KHNjaCwgJnEtPmNsaGFzaCk7CisKIAlpZiAodGNhW1RDQV9SQVRFXSkKIAkJZ2VuX25ld19lc3RpbWF0b3IoJmNsLT5ic3RhdHMsICZjbC0+cmF0ZV9lc3QsCi0JCQkJICAmc2NoLT5kZXYtPnF1ZXVlX2xvY2ssIHRjYVtUQ0FfUkFURV0pOworCQkJCSAgcWRpc2Nfcm9vdF9sb2NrKHNjaCksIHRjYVtUQ0FfUkFURV0pOwogCiAJKmFyZyA9ICh1bnNpZ25lZCBsb25nKWNsOwogCXJldHVybiAwOwpAQCAtMjAwOCwxNSArMjAwOSwxNSBAQAogc3RhdGljIHZvaWQgY2JxX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKmFyZykKIHsKIAlzdHJ1Y3QgY2JxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IGNicV9jbGFzcyAqY2w7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CiAJdW5zaWduZWQgaDsKIAogCWlmIChhcmctPnN0b3ApCiAJCXJldHVybjsKIAotCWZvciAoaCA9IDA7IGggPCAxNjsgaCsrKSB7Ci0JCXN0cnVjdCBjYnFfY2xhc3MgKmNsOwotCi0JCWZvciAoY2wgPSBxLT5jbGFzc2VzW2hdOyBjbDsgY2wgPSBjbC0+bmV4dCkgeworCWZvciAoaCA9IDA7IGggPCBxLT5jbGhhc2guaGFzaHNpemU7IGgrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjbCwgbiwgJnEtPmNsaGFzaC5oYXNoW2hdLCBjb21tb24uaG5vZGUpIHsKIAkJCWlmIChhcmctPmNvdW50IDwgYXJnLT5za2lwKSB7CiAJCQkJYXJnLT5jb3VudCsrOwogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYyBiL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKaW5kZXggYzRjMTMxNy4uYTkzNTY3NiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYworKysgYi9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCkBAIC02MCw3ICs2MCw4IEBACiAJCXNjaCwgcCwgbmV3LCBvbGQpOwogCiAJaWYgKG5ldyA9PSBOVUxMKSB7Ci0JCW5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLAorCQluZXcgPSBxZGlzY19jcmVhdGVfZGZsdChxZGlzY19kZXYoc2NoKSwgc2NoLT5kZXZfcXVldWUsCisJCQkJCSZwZmlmb19xZGlzY19vcHMsCiAJCQkJCXNjaC0+aGFuZGxlKTsKIAkJaWYgKG5ldyA9PSBOVUxMKQogCQkJbmV3ID0gJm5vb3BfcWRpc2M7CkBAIC0yNTEsMTMgKzI1MiwxMyBAQAogCQl9CiAJfQogCi0JZXJyID0gcC0+cS0+ZW5xdWV1ZShza2IsIHAtPnEpOworCWVyciA9IHFkaXNjX2VucXVldWUoc2tiLCBwLT5xKTsKIAlpZiAoZXJyICE9IE5FVF9YTUlUX1NVQ0NFU1MpIHsKIAkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlzY2gtPmJzdGF0cy5ieXRlcyArPSBza2ItPmxlbjsKKwlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJc2NoLT5ic3RhdHMucGFja2V0cysrOwogCXNjaC0+cS5xbGVuKys7CiAKQEAgLTM5MCw3ICszOTEsOCBAQAogCXAtPmRlZmF1bHRfaW5kZXggPSBkZWZhdWx0X2luZGV4OwogCXAtPnNldF90Y19pbmRleCA9IG5sYV9nZXRfZmxhZyh0YltUQ0FfRFNNQVJLX1NFVF9UQ19JTkRFWF0pOwogCi0JcC0+cSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLCBzY2gtPmhhbmRsZSk7CisJcC0+cSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHFkaXNjX2RldihzY2gpLCBzY2gtPmRldl9xdWV1ZSwKKwkJCQkgJnBmaWZvX3FkaXNjX29wcywgc2NoLT5oYW5kbGUpOwogCWlmIChwLT5xID09IE5VTEwpCiAJCXAtPnEgPSAmbm9vcF9xZGlzYzsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9maWZvLmMgYi9uZXQvc2NoZWQvc2NoX2ZpZm8uYwppbmRleCA5NWVkNDgyLi4yM2QyNThiIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2ZpZm8uYworKysgYi9uZXQvc2NoZWQvc2NoX2ZpZm8uYwpAQCAtMjcsNyArMjcsNyBAQAogewogCXN0cnVjdCBmaWZvX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAKLQlpZiAobGlrZWx5KHNjaC0+cXN0YXRzLmJhY2tsb2cgKyBza2ItPmxlbiA8PSBxLT5saW1pdCkpCisJaWYgKGxpa2VseShzY2gtPnFzdGF0cy5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIDw9IHEtPmxpbWl0KSkKIAkJcmV0dXJuIHFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7CiAKIAlyZXR1cm4gcWRpc2NfcmVzaGFwZV9mYWlsKHNrYiwgc2NoKTsKQEAgLTQ4LDEwICs0OCwxMCBAQAogCXN0cnVjdCBmaWZvX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAKIAlpZiAob3B0ID09IE5VTEwpIHsKLQkJdTMyIGxpbWl0ID0gc2NoLT5kZXYtPnR4X3F1ZXVlX2xlbiA/IDogMTsKKwkJdTMyIGxpbWl0ID0gcWRpc2NfZGV2KHNjaCktPnR4X3F1ZXVlX2xlbiA/IDogMTsKIAogCQlpZiAoc2NoLT5vcHMgPT0gJmJmaWZvX3FkaXNjX29wcykKLQkJCWxpbWl0ICo9IHNjaC0+ZGV2LT5tdHU7CisJCQlsaW1pdCAqPSBxZGlzY19kZXYoc2NoKS0+bXR1OwogCiAJCXEtPmxpbWl0ID0gbGltaXQ7CiAJfSBlbHNlIHsKQEAgLTEwNywzICsxMDcsNDYgQEAKIAkub3duZXIJCT0JVEhJU19NT0RVTEUsCiB9OwogRVhQT1JUX1NZTUJPTChiZmlmb19xZGlzY19vcHMpOworCisvKiBQYXNzIHNpemUgY2hhbmdlIG1lc3NhZ2UgZG93biB0byBlbWJlZGRlZCBGSUZPICovCitpbnQgZmlmb19zZXRfbGltaXQoc3RydWN0IFFkaXNjICpxLCB1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJc3RydWN0IG5sYXR0ciAqbmxhOworCWludCByZXQgPSAtRU5PTUVNOworCisJLyogSGFjayB0byBhdm9pZCBzZW5kaW5nIGNoYW5nZSBtZXNzYWdlIHRvIG5vbi1GSUZPICovCisJaWYgKHN0cm5jbXAocS0+b3BzLT5pZCArIDEsICJmaWZvIiwgNCkgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlubGEgPSBrbWFsbG9jKG5sYV9hdHRyX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19maWZvX3FvcHQpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5sYSkgeworCQlubGEtPm5sYV90eXBlID0gUlRNX05FV1FESVNDOworCQlubGEtPm5sYV9sZW4gPSBubGFfYXR0cl9zaXplKHNpemVvZihzdHJ1Y3QgdGNfZmlmb19xb3B0KSk7CisJCSgoc3RydWN0IHRjX2ZpZm9fcW9wdCAqKW5sYV9kYXRhKG5sYSkpLT5saW1pdCA9IGxpbWl0OworCisJCXJldCA9IHEtPm9wcy0+Y2hhbmdlKHEsIG5sYSk7CisJCWtmcmVlKG5sYSk7CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGZpZm9fc2V0X2xpbWl0KTsKKworc3RydWN0IFFkaXNjICpmaWZvX2NyZWF0ZV9kZmx0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGxpbWl0KQoreworCXN0cnVjdCBRZGlzYyAqcTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXEgPSBxZGlzY19jcmVhdGVfZGZsdChxZGlzY19kZXYoc2NoKSwgc2NoLT5kZXZfcXVldWUsCisJCQkgICAgICBvcHMsIFRDX0hfTUFLRShzY2gtPmhhbmRsZSwgMSkpOworCWlmIChxKSB7CisJCWVyciA9IGZpZm9fc2V0X2xpbWl0KHEsIGxpbWl0KTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXFkaXNjX2Rlc3Ryb3kocSk7CisJCQlxID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBxID8gOiBFUlJfUFRSKGVycik7Cit9CitFWFBPUlRfU1lNQk9MKGZpZm9fY3JlYXRlX2RmbHQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCAxM2FmYTcyLi40YWM3ZTNhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtMjksNTggKzI5LDM2IEBACiAvKiBNYWluIHRyYW5zbWlzc2lvbiBxdWV1ZS4gKi8KIAogLyogTW9kaWZpY2F0aW9ucyB0byBkYXRhIHBhcnRpY2lwYXRpbmcgaW4gc2NoZWR1bGluZyBtdXN0IGJlIHByb3RlY3RlZCB3aXRoCi0gKiBkZXYtPnF1ZXVlX2xvY2sgc3BpbmxvY2suCisgKiBxZGlzY19yb290X2xvY2socWRpc2MpIHNwaW5sb2NrLgogICoKICAqIFRoZSBpZGVhIGlzIHRoZSBmb2xsb3dpbmc6Ci0gKiAtIGVucXVldWUsIGRlcXVldWUgYXJlIHNlcmlhbGl6ZWQgdmlhIHRvcCBsZXZlbCBkZXZpY2UKLSAqICAgc3BpbmxvY2sgZGV2LT5xdWV1ZV9sb2NrLgotICogLSBpbmdyZXNzIGZpbHRlcmluZyBpcyBzZXJpYWxpemVkIHZpYSB0b3AgbGV2ZWwgZGV2aWNlCi0gKiAgIHNwaW5sb2NrIGRldi0+aW5ncmVzc19sb2NrLgorICogLSBlbnF1ZXVlLCBkZXF1ZXVlIGFyZSBzZXJpYWxpemVkIHZpYSBxZGlzYyByb290IGxvY2sKKyAqIC0gaW5ncmVzcyBmaWx0ZXJpbmcgaXMgYWxzbyBzZXJpYWxpemVkIHZpYSBxZGlzYyByb290IGxvY2sKICAqIC0gdXBkYXRlcyB0byB0cmVlIGFuZCB0cmVlIHdhbGtpbmcgYXJlIG9ubHkgZG9uZSB1bmRlciB0aGUgcnRubCBtdXRleC4KICAqLwogCi12b2lkIHFkaXNjX2xvY2tfdHJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotCV9fYWNxdWlyZXMoZGV2LT5xdWV1ZV9sb2NrKQotCV9fYWNxdWlyZXMoZGV2LT5pbmdyZXNzX2xvY2spCi17Ci0Jc3Bpbl9sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwotCXNwaW5fbG9jaygmZGV2LT5pbmdyZXNzX2xvY2spOwotfQotRVhQT1JUX1NZTUJPTChxZGlzY19sb2NrX3RyZWUpOwotCi12b2lkIHFkaXNjX3VubG9ja190cmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi0JX19yZWxlYXNlcyhkZXYtPmluZ3Jlc3NfbG9jaykKLQlfX3JlbGVhc2VzKGRldi0+cXVldWVfbG9jaykKLXsKLQlzcGluX3VubG9jaygmZGV2LT5pbmdyZXNzX2xvY2spOwotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwotfQotRVhQT1JUX1NZTUJPTChxZGlzY191bmxvY2tfdHJlZSk7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHFkaXNjX3FsZW4oc3RydWN0IFFkaXNjICpxKQogewogCXJldHVybiBxLT5xLnFsZW47CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRldl9yZXF1ZXVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IFFkaXNjICpxKQorc3RhdGljIGlubGluZSBpbnQgZGV2X3JlcXVldWVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcSkKIHsKIAlpZiAodW5saWtlbHkoc2tiLT5uZXh0KSkKLQkJZGV2LT5nc29fc2tiID0gc2tiOworCQlxLT5nc29fc2tiID0gc2tiOwogCWVsc2UKIAkJcS0+b3BzLT5yZXF1ZXVlKHNrYiwgcSk7CiAKLQluZXRpZl9zY2hlZHVsZShkZXYpOworCV9fbmV0aWZfc2NoZWR1bGUocSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmRldl9kZXF1ZXVlX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgICBzdHJ1Y3QgUWRpc2MgKnEpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpkZXF1ZXVlX3NrYihzdHJ1Y3QgUWRpc2MgKnEpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCWlmICgoc2tiID0gZGV2LT5nc29fc2tiKSkKLQkJZGV2LT5nc29fc2tiID0gTlVMTDsKKwlpZiAoKHNrYiA9IHEtPmdzb19za2IpKQorCQlxLT5nc29fc2tiID0gTlVMTDsKIAllbHNlCiAJCXNrYiA9IHEtPmRlcXVldWUocSk7CiAKQEAgLTg4LDEyICs2NiwxMiBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBoYW5kbGVfZGV2X2NwdV9jb2xsaXNpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAogCQkJCQkgICBzdHJ1Y3QgUWRpc2MgKnEpCiB7CiAJaW50IHJldDsKIAotCWlmICh1bmxpa2VseShkZXYtPnhtaXRfbG9ja19vd25lciA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpKSB7CisJaWYgKHVubGlrZWx5KGRldl9xdWV1ZS0+eG1pdF9sb2NrX293bmVyID09IHNtcF9wcm9jZXNzb3JfaWQoKSkpIHsKIAkJLyoKIAkJICogU2FtZSBDUFUgaG9sZGluZyB0aGUgbG9jay4gSXQgbWF5IGJlIGEgdHJhbnNpZW50CiAJCSAqIGNvbmZpZ3VyYXRpb24gZXJyb3IsIHdoZW4gaGFyZF9zdGFydF94bWl0KCkgcmVjdXJzZXMuIFdlCkBAIC0xMDMsNyArODEsNyBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRlYWQgbG9vcCBvbiBuZXRkZXZpY2UgJXMsICIKLQkJCSAgICAgICAiZml4IGl0IHVyZ2VudGx5IVxuIiwgZGV2LT5uYW1lKTsKKwkJCSAgICAgICAiZml4IGl0IHVyZ2VudGx5IVxuIiwgZGV2X3F1ZXVlLT5kZXYtPm5hbWUpOwogCQlyZXQgPSBxZGlzY19xbGVuKHEpOwogCX0gZWxzZSB7CiAJCS8qCkBAIC0xMTEsMjIgKzg5LDIyIEBACiAJCSAqIHNvbWUgdGltZS4KIAkJICovCiAJCV9fZ2V0X2NwdV92YXIobmV0ZGV2X3J4X3N0YXQpLmNwdV9jb2xsaXNpb24rKzsKLQkJcmV0ID0gZGV2X3JlcXVldWVfc2tiKHNrYiwgZGV2LCBxKTsKKwkJcmV0ID0gZGV2X3JlcXVldWVfc2tiKHNrYiwgcSk7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAogLyoKLSAqIE5PVEU6IENhbGxlZCB1bmRlciBkZXYtPnF1ZXVlX2xvY2sgd2l0aCBsb2NhbGx5IGRpc2FibGVkIEJILgorICogTk9URTogQ2FsbGVkIHVuZGVyIHFkaXNjX2xvY2socSkgd2l0aCBsb2NhbGx5IGRpc2FibGVkIEJILgogICoKLSAqIF9fTElOS19TVEFURV9RRElTQ19SVU5OSU5HIGd1YXJhbnRlZXMgb25seSBvbmUgQ1BVIGNhbiBwcm9jZXNzIHRoaXMKLSAqIGRldmljZSBhdCBhIHRpbWUuIGRldi0+cXVldWVfbG9jayBzZXJpYWxpemVzIHF1ZXVlIGFjY2Vzc2VzIGZvcgotICogdGhpcyBkZXZpY2UgQU5EIGRldi0+cWRpc2MgcG9pbnRlciBpdHNlbGYuCisgKiBfX1FESVNDX1NUQVRFX1JVTk5JTkcgZ3VhcmFudGVlcyBvbmx5IG9uZSBDUFUgY2FuIHByb2Nlc3MKKyAqIHRoaXMgcWRpc2MgYXQgYSB0aW1lLiBxZGlzY19sb2NrKHEpIHNlcmlhbGl6ZXMgcXVldWUgYWNjZXNzZXMgZm9yCisgKiB0aGlzIHF1ZXVlLgogICoKICAqICBuZXRpZl90eF9sb2NrIHNlcmlhbGl6ZXMgYWNjZXNzZXMgdG8gZGV2aWNlIGRyaXZlci4KICAqCi0gKiAgZGV2LT5xdWV1ZV9sb2NrIGFuZCBuZXRpZl90eF9sb2NrIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsCisgKiAgcWRpc2NfbG9jayhxKSBhbmQgbmV0aWZfdHhfbG9jayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLAogICogIGlmIG9uZSBpcyBncmFiYmVkLCBhbm90aGVyIG11c3QgYmUgZnJlZS4KICAqCiAgKiBOb3RlLCB0aGF0IHRoaXMgcHJvY2VkdXJlIGNhbiBiZSBjYWxsZWQgYnkgYSB3YXRjaGRvZyB0aW1lcgpAQCAtMTM2LDI3ICsxMTQsMzIgQEAKICAqCQkJCT4wIC0gcXVldWUgaXMgbm90IGVtcHR5LgogICoKICAqLwotc3RhdGljIGlubGluZSBpbnQgcWRpc2NfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBpbnQgcWRpc2NfcmVzdGFydChzdHJ1Y3QgUWRpc2MgKnEpCiB7Ci0Jc3RydWN0IFFkaXNjICpxID0gZGV2LT5xZGlzYzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlpbnQgcmV0ID0gTkVUREVWX1RYX0JVU1k7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzcGlubG9ja190ICpyb290X2xvY2s7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCS8qIERlcXVldWUgcGFja2V0ICovCi0JaWYgKHVubGlrZWx5KChza2IgPSBkZXZfZGVxdWV1ZV9za2IoZGV2LCBxKSkgPT0gTlVMTCkpCisJaWYgKHVubGlrZWx5KChza2IgPSBkZXF1ZXVlX3NrYihxKSkgPT0gTlVMTCkpCiAJCXJldHVybiAwOwogCisJcm9vdF9sb2NrID0gcWRpc2Nfcm9vdF9sb2NrKHEpOwogCi0JLyogQW5kIHJlbGVhc2UgcXVldWUgKi8KLQlzcGluX3VubG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsKKwkvKiBBbmQgcmVsZWFzZSBxZGlzYyAqLworCXNwaW5fdW5sb2NrKHJvb3RfbG9jayk7CiAKLQlIQVJEX1RYX0xPQ0soZGV2LCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWRldiA9IHFkaXNjX2RldihxKTsKKwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCisJSEFSRF9UWF9MT0NLKGRldiwgdHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWlmICghbmV0aWZfc3VicXVldWVfc3RvcHBlZChkZXYsIHNrYikpCi0JCXJldCA9IGRldl9oYXJkX3N0YXJ0X3htaXQoc2tiLCBkZXYpOwotCUhBUkRfVFhfVU5MT0NLKGRldik7CisJCXJldCA9IGRldl9oYXJkX3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSk7CisJSEFSRF9UWF9VTkxPQ0soZGV2LCB0eHEpOwogCi0Jc3Bpbl9sb2NrKCZkZXYtPnF1ZXVlX2xvY2spOwotCXEgPSBkZXYtPnFkaXNjOworCXNwaW5fbG9jayhyb290X2xvY2spOwogCiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIE5FVERFVl9UWF9PSzoKQEAgLTE2Niw3ICsxNDksNyBAQAogCiAJY2FzZSBORVRERVZfVFhfTE9DS0VEOgogCQkvKiBEcml2ZXIgdHJ5IGxvY2sgZmFpbGVkICovCi0JCXJldCA9IGhhbmRsZV9kZXZfY3B1X2NvbGxpc2lvbihza2IsIGRldiwgcSk7CisJCXJldCA9IGhhbmRsZV9kZXZfY3B1X2NvbGxpc2lvbihza2IsIHR4cSwgcSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTE3NSwzMyArMTU4LDMzIEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJCVUcgJXMgY29kZSAlZCBxbGVuICVkXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgcmV0LCBxLT5xLnFsZW4pOwogCi0JCXJldCA9IGRldl9yZXF1ZXVlX3NrYihza2IsIGRldiwgcSk7CisJCXJldCA9IGRldl9yZXF1ZXVlX3NrYihza2IsIHEpOwogCQlicmVhazsKIAl9CiAKKwlpZiAocmV0ICYmIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkKKwkJcmV0ID0gMDsKKwogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgX19xZGlzY19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgX19xZGlzY19ydW4oc3RydWN0IFFkaXNjICpxKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSA9IGppZmZpZXM7CiAKLQl3aGlsZSAocWRpc2NfcmVzdGFydChkZXYpKSB7Ci0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCi0JCQlicmVhazsKLQorCXdoaWxlIChxZGlzY19yZXN0YXJ0KHEpKSB7CiAJCS8qCiAJCSAqIFBvc3Rwb25lIHByb2Nlc3NpbmcgaWYKIAkJICogMS4gYW5vdGhlciBwcm9jZXNzIG5lZWRzIHRoZSBDUFU7CiAJCSAqIDIuIHdlJ3ZlIGJlZW4gZG9pbmcgaXQgZm9yIHRvbyBsb25nLgogCQkgKi8KIAkJaWYgKG5lZWRfcmVzY2hlZCgpIHx8IGppZmZpZXMgIT0gc3RhcnRfdGltZSkgewotCQkJbmV0aWZfc2NoZWR1bGUoZGV2KTsKKwkJCV9fbmV0aWZfc2NoZWR1bGUocSk7CiAJCQlicmVhazsKIAkJfQogCX0KIAotCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfUURJU0NfUlVOTklORywgJmRldi0+c3RhdGUpOworCWNsZWFyX2JpdChfX1FESVNDX1NUQVRFX1JVTk5JTkcsICZxLT5zdGF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRldl93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGFyZykKQEAgLTIwOSwxOSArMTkyLDM1IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWFyZzsKIAogCW5ldGlmX3R4X2xvY2soZGV2KTsKLQlpZiAoZGV2LT5xZGlzYyAhPSAmbm9vcF9xZGlzYykgeworCWlmICghcWRpc2NfdHhfaXNfbm9vcChkZXYpKSB7CiAJCWlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpICYmCiAJCSAgICBuZXRpZl9ydW5uaW5nKGRldikgJiYKIAkJICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJgotCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgZGV2LT50cmFuc19zdGFydCArIGRldi0+d2F0Y2hkb2dfdGltZW8pKSB7CisJCQlpbnQgc29tZV9xdWV1ZV9zdG9wcGVkID0gMDsKKwkJCXVuc2lnbmVkIGludCBpOwogCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiTkVUREVWIFdBVENIRE9HOiAlczogdHJhbnNtaXQgdGltZWQgb3V0XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOworCisJCQkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOworCQkJCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpIHsKKwkJCQkJc29tZV9xdWV1ZV9zdG9wcGVkID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoc29tZV9xdWV1ZV9zdG9wcGVkICYmCisJCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCAoZGV2LT50cmFuc19zdGFydCArCisJCQkJCQkgZGV2LT53YXRjaGRvZ190aW1lbykpKSB7CisJCQkJY2hhciBkcml2ZXJuYW1lWzY0XTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJORVRERVYgV0FUQ0hET0c6ICVzICglcyk6IHRyYW5zbWl0IHRpbWVkIG91dFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBuZXRkZXZfZHJpdmVybmFtZShkZXYsIGRyaXZlcm5hbWUsIDY0KSk7CiAJCQkJZGV2LT50eF90aW1lb3V0KGRldik7CiAJCQkJV0FSTl9PTl9PTkNFKDEpOwogCQkJfQotCQkJaWYgKCFtb2RfdGltZXIoJmRldi0+d2F0Y2hkb2dfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIGRldi0+d2F0Y2hkb2dfdGltZW8pKSkKKwkJCWlmICghbW9kX3RpbWVyKCZkZXYtPndhdGNoZG9nX3RpbWVyLAorCQkJCSAgICAgICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKworCQkJCQkJICAgICBkZXYtPndhdGNoZG9nX3RpbWVvKSkpCiAJCQkJZGV2X2hvbGQoZGV2KTsKIAkJfQogCX0KQEAgLTMxNywxMiArMzE2LDE4IEBACiAJLm93bmVyCQk9CVRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgbm9vcF9uZXRkZXZfcXVldWUgPSB7CisJLnFkaXNjCQk9CSZub29wX3FkaXNjLAorfTsKKwogc3RydWN0IFFkaXNjIG5vb3BfcWRpc2MgPSB7CiAJLmVucXVldWUJPQlub29wX2VucXVldWUsCiAJLmRlcXVldWUJPQlub29wX2RlcXVldWUsCiAJLmZsYWdzCQk9CVRDUV9GX0JVSUxUSU4sCiAJLm9wcwkJPQkmbm9vcF9xZGlzY19vcHMsCiAJLmxpc3QJCT0JTElTVF9IRUFEX0lOSVQobm9vcF9xZGlzYy5saXN0KSwKKwkucS5sb2NrCQk9CV9fU1BJTl9MT0NLX1VOTE9DS0VEKG5vb3BfcWRpc2MucS5sb2NrKSwKKwkuZGV2X3F1ZXVlCT0JJm5vb3BfbmV0ZGV2X3F1ZXVlLAogfTsKIEVYUE9SVF9TWU1CT0wobm9vcF9xZGlzYyk7CiAKQEAgLTMzNSwxMiArMzQwLDE5IEBACiAJLm93bmVyCQk9CVRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIHN0cnVjdCBRZGlzYyBub3F1ZXVlX3FkaXNjOworc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgbm9xdWV1ZV9uZXRkZXZfcXVldWUgPSB7CisJLnFkaXNjCQk9CSZub3F1ZXVlX3FkaXNjLAorfTsKKwogc3RhdGljIHN0cnVjdCBRZGlzYyBub3F1ZXVlX3FkaXNjID0gewogCS5lbnF1ZXVlCT0JTlVMTCwKIAkuZGVxdWV1ZQk9CW5vb3BfZGVxdWV1ZSwKIAkuZmxhZ3MJCT0JVENRX0ZfQlVJTFRJTiwKIAkub3BzCQk9CSZub3F1ZXVlX3FkaXNjX29wcywKIAkubGlzdAkJPQlMSVNUX0hFQURfSU5JVChub3F1ZXVlX3FkaXNjLmxpc3QpLAorCS5xLmxvY2sJCT0JX19TUElOX0xPQ0tfVU5MT0NLRUQobm9xdWV1ZV9xZGlzYy5xLmxvY2spLAorCS5kZXZfcXVldWUJPQkmbm9xdWV1ZV9uZXRkZXZfcXVldWUsCiB9OwogCiAKQEAgLTM2NCw3ICszNzYsNyBAQAogewogCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBwcmlvMmxpc3Qoc2tiLCBxZGlzYyk7CiAKLQlpZiAoc2tiX3F1ZXVlX2xlbihsaXN0KSA8IHFkaXNjLT5kZXYtPnR4X3F1ZXVlX2xlbikgeworCWlmIChza2JfcXVldWVfbGVuKGxpc3QpIDwgcWRpc2NfZGV2KHFkaXNjKS0+dHhfcXVldWVfbGVuKSB7CiAJCXFkaXNjLT5xLnFsZW4rKzsKIAkJcmV0dXJuIF9fcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgcWRpc2MsIGxpc3QpOwogCX0KQEAgLTQ0MCw3ICs0NTIsOCBAQAogCS5vd25lcgkJPQlUSElTX01PRFVMRSwKIH07CiAKLXN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IFFkaXNjX29wcyAqb3BzKQorc3RydWN0IFFkaXNjICpxZGlzY19hbGxvYyhzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsCisJCQkgIHN0cnVjdCBRZGlzY19vcHMgKm9wcykKIHsKIAl2b2lkICpwOwogCXN0cnVjdCBRZGlzYyAqc2NoOwpAQCAtNDYyLDggKzQ3NSw4IEBACiAJc2NoLT5vcHMgPSBvcHM7CiAJc2NoLT5lbnF1ZXVlID0gb3BzLT5lbnF1ZXVlOwogCXNjaC0+ZGVxdWV1ZSA9IG9wcy0+ZGVxdWV1ZTsKLQlzY2gtPmRldiA9IGRldjsKLQlkZXZfaG9sZChkZXYpOworCXNjaC0+ZGV2X3F1ZXVlID0gZGV2X3F1ZXVlOworCWRldl9ob2xkKHFkaXNjX2RldihzY2gpKTsKIAlhdG9taWNfc2V0KCZzY2gtPnJlZmNudCwgMSk7CiAKIAlyZXR1cm4gc2NoOwpAQCAtNDcxLDE1ICs0ODQsMTYgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCi1zdHJ1Y3QgUWRpc2MgKiBxZGlzY19jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsCitzdHJ1Y3QgUWRpc2MgKiBxZGlzY19jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsCisJCQkJIHN0cnVjdCBRZGlzY19vcHMgKm9wcywKIAkJCQkgdW5zaWduZWQgaW50IHBhcmVudGlkKQogewogCXN0cnVjdCBRZGlzYyAqc2NoOwogCi0Jc2NoID0gcWRpc2NfYWxsb2MoZGV2LCBvcHMpOworCXNjaCA9IHFkaXNjX2FsbG9jKGRldl9xdWV1ZSwgb3BzKTsKIAlpZiAoSVNfRVJSKHNjaCkpCiAJCWdvdG8gZXJyb3V0OwotCXNjaC0+c3RhdHNfbG9jayA9ICZkZXYtPnF1ZXVlX2xvY2s7CiAJc2NoLT5wYXJlbnQgPSBwYXJlbnRpZDsKIAogCWlmICghb3BzLT5pbml0IHx8IG9wcy0+aW5pdChzY2gsIE5VTEwpID09IDApCkBAIC00OTEsNyArNTA1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfY3JlYXRlX2RmbHQpOwogCi0vKiBVbmRlciBkZXYtPnF1ZXVlX2xvY2sgYW5kIEJIISAqLworLyogVW5kZXIgcWRpc2Nfcm9vdF9sb2NrKHFkaXNjKSBhbmQgQkghICovCiAKIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYykKIHsKQEAgLTUwOCwyMCArNTIyLDExIEBACiBzdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewogCXN0cnVjdCBRZGlzYyAqcWRpc2MgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IFFkaXNjLCBxX3JjdSk7Ci0Ja2ZyZWUoKGNoYXIgKikgcWRpc2MgLSBxZGlzYy0+cGFkZGVkKTsKLX0KLQotLyogVW5kZXIgZGV2LT5xdWV1ZV9sb2NrIGFuZCBCSCEgKi8KLQotdm9pZCBxZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpCi17CiAJY29uc3Qgc3RydWN0IFFkaXNjX29wcyAgKm9wcyA9IHFkaXNjLT5vcHM7CiAKLQlpZiAocWRpc2MtPmZsYWdzICYgVENRX0ZfQlVJTFRJTiB8fAotCSAgICAhYXRvbWljX2RlY19hbmRfdGVzdCgmcWRpc2MtPnJlZmNudCkpCi0JCXJldHVybjsKLQotCWxpc3RfZGVsKCZxZGlzYy0+bGlzdCk7CisjaWZkZWYgQ09ORklHX05FVF9TQ0hFRAorCXFkaXNjX3B1dF9zdGFiKHFkaXNjLT5zdGFiKTsKKyNlbmRpZgogCWdlbl9raWxsX2VzdGltYXRvcigmcWRpc2MtPmJzdGF0cywgJnFkaXNjLT5yYXRlX2VzdCk7CiAJaWYgKG9wcy0+cmVzZXQpCiAJCW9wcy0+cmVzZXQocWRpc2MpOwpAQCAtNTI5LDY1ICs1MzQsMTQ5IEBACiAJCW9wcy0+ZGVzdHJveShxZGlzYyk7CiAKIAltb2R1bGVfcHV0KG9wcy0+b3duZXIpOwotCWRldl9wdXQocWRpc2MtPmRldik7CisJZGV2X3B1dChxZGlzY19kZXYocWRpc2MpKTsKKworCWtmcmVlX3NrYihxZGlzYy0+Z3NvX3NrYik7CisKKwlrZnJlZSgoY2hhciAqKSBxZGlzYyAtIHFkaXNjLT5wYWRkZWQpOworfQorCisvKiBVbmRlciBxZGlzY19yb290X2xvY2socWRpc2MpIGFuZCBCSCEgKi8KKwordm9pZCBxZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpCit7CisJaWYgKHFkaXNjLT5mbGFncyAmIFRDUV9GX0JVSUxUSU4gfHwKKwkgICAgIWF0b21pY19kZWNfYW5kX3Rlc3QoJnFkaXNjLT5yZWZjbnQpKQorCQlyZXR1cm47CisKKwlpZiAocWRpc2MtPnBhcmVudCkKKwkJbGlzdF9kZWwoJnFkaXNjLT5saXN0KTsKKwogCWNhbGxfcmN1KCZxZGlzYy0+cV9yY3UsIF9fcWRpc2NfZGVzdHJveSk7CiB9CiBFWFBPUlRfU1lNQk9MKHFkaXNjX2Rlc3Ryb3kpOwogCitzdGF0aWMgYm9vbCBkZXZfYWxsX3FkaXNjX3NsZWVwaW5nX25vb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CisKKwkJaWYgKHR4cS0+cWRpc2Nfc2xlZXBpbmcgIT0gJm5vb3BfcWRpc2MpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBhdHRhY2hfb25lX2RlZmF1bHRfcWRpc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSwKKwkJCQkgICAgIHZvaWQgKl91bnVzZWQpCit7CisJc3RydWN0IFFkaXNjICpxZGlzYzsKKworCWlmIChkZXYtPnR4X3F1ZXVlX2xlbikgeworCQlxZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldiwgZGV2X3F1ZXVlLAorCQkJCQkgICZwZmlmb19mYXN0X29wcywgVENfSF9ST09UKTsKKwkJaWYgKCFxZGlzYykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGFjdGl2YXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJcWRpc2MgPSAgJm5vcXVldWVfcWRpc2M7CisJfQorCWRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmcgPSBxZGlzYzsKK30KKworc3RhdGljIHZvaWQgdHJhbnNpdGlvbl9vbmVfcWRpc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAorCQkJCSB2b2lkICpfbmVlZF93YXRjaGRvZykKK3sKKwlzdHJ1Y3QgUWRpc2MgKm5ld19xZGlzYyA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7CisJaW50ICpuZWVkX3dhdGNoZG9nX3AgPSBfbmVlZF93YXRjaGRvZzsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihkZXZfcXVldWUtPnFkaXNjLCBuZXdfcWRpc2MpOworCWlmIChuZXdfcWRpc2MgIT0gJm5vcXVldWVfcWRpc2MpCisJCSpuZWVkX3dhdGNoZG9nX3AgPSAxOworfQorCiB2b2lkIGRldl9hY3RpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWludCBuZWVkX3dhdGNoZG9nOworCiAJLyogTm8gcXVldWVpbmcgZGlzY2lwbGluZSBpcyBhdHRhY2hlZCB0byBkZXZpY2U7CiAJICAgY3JlYXRlIGRlZmF1bHQgb25lIGkuZS4gcGZpZm9fZmFzdCBmb3IgZGV2aWNlcywKIAkgICB3aGljaCBuZWVkIHF1ZXVlaW5nIGFuZCBub3F1ZXVlX3FkaXNjIGZvcgogCSAgIHZpcnR1YWwgaW50ZXJmYWNlcwogCSAqLwogCi0JaWYgKGRldi0+cWRpc2Nfc2xlZXBpbmcgPT0gJm5vb3BfcWRpc2MpIHsKLQkJc3RydWN0IFFkaXNjICpxZGlzYzsKLQkJaWYgKGRldi0+dHhfcXVldWVfbGVuKSB7Ci0JCQlxZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldiwgJnBmaWZvX2Zhc3Rfb3BzLAotCQkJCQkJICBUQ19IX1JPT1QpOwotCQkJaWYgKHFkaXNjID09IE5VTEwpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogYWN0aXZhdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJbGlzdF9hZGRfdGFpbCgmcWRpc2MtPmxpc3QsICZkZXYtPnFkaXNjX2xpc3QpOwotCQl9IGVsc2UgewotCQkJcWRpc2MgPSAgJm5vcXVldWVfcWRpc2M7Ci0JCX0KLQkJZGV2LT5xZGlzY19zbGVlcGluZyA9IHFkaXNjOwotCX0KKwlpZiAoZGV2X2FsbF9xZGlzY19zbGVlcGluZ19ub29wKGRldikpCisJCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIGF0dGFjaF9vbmVfZGVmYXVsdF9xZGlzYywgTlVMTCk7CiAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkKIAkJLyogRGVsYXkgYWN0aXZhdGlvbiB1bnRpbCBuZXh0IGNhcnJpZXItb24gZXZlbnQgKi8KIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwotCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPnFkaXNjLCBkZXYtPnFkaXNjX3NsZWVwaW5nKTsKLQlpZiAoZGV2LT5xZGlzYyAhPSAmbm9xdWV1ZV9xZGlzYykgeworCW5lZWRfd2F0Y2hkb2cgPSAwOworCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIHRyYW5zaXRpb25fb25lX3FkaXNjLCAmbmVlZF93YXRjaGRvZyk7CisKKwlpZiAobmVlZF93YXRjaGRvZykgewogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJZGV2X3dhdGNoZG9nX3VwKGRldik7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBkZXZfZGVhY3RpdmF0ZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsCisJCQkJIHZvaWQgKl9xZGlzY19kZWZhdWx0KQoreworCXN0cnVjdCBRZGlzYyAqcWRpc2NfZGVmYXVsdCA9IF9xZGlzY19kZWZhdWx0OworCXN0cnVjdCBRZGlzYyAqcWRpc2M7CisKKwlxZGlzYyA9IGRldl9xdWV1ZS0+cWRpc2M7CisJaWYgKHFkaXNjKSB7CisJCXNwaW5fbG9ja19iaChxZGlzY19sb2NrKHFkaXNjKSk7CisKKwkJZGV2X3F1ZXVlLT5xZGlzYyA9IHFkaXNjX2RlZmF1bHQ7CisJCXFkaXNjX3Jlc2V0KHFkaXNjKTsKKworCQlzcGluX3VubG9ja19iaChxZGlzY19sb2NrKHFkaXNjKSk7CisJfQorfQorCitzdGF0aWMgYm9vbCBzb21lX3FkaXNjX2lzX3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxvY2spCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlOworCQlzcGlubG9ja190ICpyb290X2xvY2s7CisJCXN0cnVjdCBRZGlzYyAqcTsKKwkJaW50IHZhbDsKKworCQlkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CisJCXEgPSBkZXZfcXVldWUtPnFkaXNjOworCQlyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2socSk7CisKKwkJaWYgKGxvY2spCisJCQlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKKworCQl2YWwgPSB0ZXN0X2JpdChfX1FESVNDX1NUQVRFX1JVTk5JTkcsICZxLT5zdGF0ZSk7CisKKwkJaWYgKGxvY2spCisJCQlzcGluX3VubG9ja19iaChyb290X2xvY2spOworCisJCWlmICh2YWwpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIGRldl9kZWFjdGl2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFFkaXNjICpxZGlzYzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBydW5uaW5nOworCWJvb2wgcnVubmluZzsKIAotCXNwaW5fbG9ja19iaCgmZGV2LT5xdWV1ZV9sb2NrKTsKLQlxZGlzYyA9IGRldi0+cWRpc2M7Ci0JZGV2LT5xZGlzYyA9ICZub29wX3FkaXNjOwotCi0JcWRpc2NfcmVzZXQocWRpc2MpOwotCi0Jc2tiID0gZGV2LT5nc29fc2tiOwotCWRldi0+Z3NvX3NrYiA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7Ci0KLQlrZnJlZV9za2Ioc2tiKTsKKwluZXRkZXZfZm9yX2VhY2hfdHhfcXVldWUoZGV2LCBkZXZfZGVhY3RpdmF0ZV9xdWV1ZSwgJm5vb3BfcWRpc2MpOwogCiAJZGV2X3dhdGNoZG9nX2Rvd24oZGV2KTsKIApAQCAtNTk2LDE2ICs2ODUsMTQgQEAKIAogCS8qIFdhaXQgZm9yIG91dHN0YW5kaW5nIHFkaXNjX3J1biBjYWxscy4gKi8KIAlkbyB7Ci0JCXdoaWxlICh0ZXN0X2JpdChfX0xJTktfU1RBVEVfUURJU0NfUlVOTklORywgJmRldi0+c3RhdGUpKQorCQl3aGlsZSAoc29tZV9xZGlzY19pc19ydW5uaW5nKGRldiwgMCkpCiAJCQl5aWVsZCgpOwogCiAJCS8qCiAJCSAqIERvdWJsZS1jaGVjayBpbnNpZGUgcXVldWUgbG9jayB0byBlbnN1cmUgdGhhdCBhbGwgZWZmZWN0cwogCQkgKiBvZiB0aGUgcXVldWUgcnVuIGFyZSB2aXNpYmxlIHdoZW4gd2UgcmV0dXJuLgogCQkgKi8KLQkJc3Bpbl9sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwotCQlydW5uaW5nID0gdGVzdF9iaXQoX19MSU5LX1NUQVRFX1FESVNDX1JVTk5JTkcsICZkZXYtPnN0YXRlKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7CisJCXJ1bm5pbmcgPSBzb21lX3FkaXNjX2lzX3J1bm5pbmcoZGV2LCAxKTsKIAogCQkvKgogCQkgKiBUaGUgcnVubmluZyBmbGFnIHNob3VsZCBuZXZlciBiZSBzZXQgYXQgdGhpcyBwb2ludCBiZWNhdXNlCkBAIC02MTgsMzIgKzcwNSw0NiBAQAogCX0gd2hpbGUgKFdBUk5fT05fT05DRShydW5uaW5nKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGRldl9pbml0X3NjaGVkdWxlcl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAorCQkJCSAgICAgdm9pZCAqX3FkaXNjKQoreworCXN0cnVjdCBRZGlzYyAqcWRpc2MgPSBfcWRpc2M7CisKKwlkZXZfcXVldWUtPnFkaXNjID0gcWRpc2M7CisJZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZyA9IHFkaXNjOworfQorCiB2b2lkIGRldl9pbml0X3NjaGVkdWxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXFkaXNjX2xvY2tfdHJlZShkZXYpOwotCWRldi0+cWRpc2MgPSAmbm9vcF9xZGlzYzsKLQlkZXYtPnFkaXNjX3NsZWVwaW5nID0gJm5vb3BfcWRpc2M7Ci0JSU5JVF9MSVNUX0hFQUQoJmRldi0+cWRpc2NfbGlzdCk7Ci0JcWRpc2NfdW5sb2NrX3RyZWUoZGV2KTsKKwluZXRkZXZfZm9yX2VhY2hfdHhfcXVldWUoZGV2LCBkZXZfaW5pdF9zY2hlZHVsZXJfcXVldWUsICZub29wX3FkaXNjKTsKKwlkZXZfaW5pdF9zY2hlZHVsZXJfcXVldWUoZGV2LCAmZGV2LT5yeF9xdWV1ZSwgTlVMTCk7CiAKIAlzZXR1cF90aW1lcigmZGV2LT53YXRjaGRvZ190aW1lciwgZGV2X3dhdGNoZG9nLCAodW5zaWduZWQgbG9uZylkZXYpOwogfQogCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9zY2hlZHVsZXJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSwKKwkJCQkgICAgIHZvaWQgKl9xZGlzY19kZWZhdWx0KQoreworCXN0cnVjdCBRZGlzYyAqcWRpc2MgPSBkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nOworCXN0cnVjdCBRZGlzYyAqcWRpc2NfZGVmYXVsdCA9IF9xZGlzY19kZWZhdWx0OworCisJaWYgKHFkaXNjKSB7CisJCXNwaW5sb2NrX3QgKnJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayhxZGlzYyk7CisKKwkJZGV2X3F1ZXVlLT5xZGlzYyA9IHFkaXNjX2RlZmF1bHQ7CisJCWRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmcgPSBxZGlzY19kZWZhdWx0OworCisJCXNwaW5fbG9jayhyb290X2xvY2spOworCQlxZGlzY19kZXN0cm95KHFkaXNjKTsKKwkJc3Bpbl91bmxvY2socm9vdF9sb2NrKTsKKwl9Cit9CisKIHZvaWQgZGV2X3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFFkaXNjICpxZGlzYzsKLQotCXFkaXNjX2xvY2tfdHJlZShkZXYpOwotCXFkaXNjID0gZGV2LT5xZGlzY19zbGVlcGluZzsKLQlkZXYtPnFkaXNjID0gJm5vb3BfcWRpc2M7Ci0JZGV2LT5xZGlzY19zbGVlcGluZyA9ICZub29wX3FkaXNjOwotCXFkaXNjX2Rlc3Ryb3kocWRpc2MpOwotI2lmIGRlZmluZWQoQ09ORklHX05FVF9TQ0hfSU5HUkVTUykgfHwgZGVmaW5lZChDT05GSUdfTkVUX1NDSF9JTkdSRVNTX01PRFVMRSkKLQlpZiAoKHFkaXNjID0gZGV2LT5xZGlzY19pbmdyZXNzKSAhPSBOVUxMKSB7Ci0JCWRldi0+cWRpc2NfaW5ncmVzcyA9IE5VTEw7Ci0JCXFkaXNjX2Rlc3Ryb3kocWRpc2MpOwotCX0KLSNlbmRpZgorCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIHNodXRkb3duX3NjaGVkdWxlcl9xdWV1ZSwgJm5vb3BfcWRpc2MpOworCXNodXRkb3duX3NjaGVkdWxlcl9xdWV1ZShkZXYsICZkZXYtPnJ4X3F1ZXVlLCBOVUxMKTsKIAlCVUdfVFJBUCghdGltZXJfcGVuZGluZygmZGV2LT53YXRjaGRvZ190aW1lcikpOwotCXFkaXNjX3VubG9ja190cmVlKGRldik7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dyZWQuYyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCmluZGV4IGM4OWZiYTUuLmMxYWQ2YjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jCisrKyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkJCSAqIGlmIG5vIGRlZmF1bHQgRFAgaGFzIGJlZW4gY29uZmlndXJlZC4gVGhpcwogCQkJICogYWxsb3dzIGZvciBEUCBmbG93cyB0byBiZSBsZWZ0IHVudG91Y2hlZC4KIAkJCSAqLwotCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJnNjaC0+cSkgPCBzY2gtPmRldi0+dHhfcXVldWVfbGVuKQorCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJnNjaC0+cSkgPCBxZGlzY19kZXYoc2NoKS0+dHhfcXVldWVfbGVuKQogCQkJCXJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpOwogCQkJZWxzZQogCQkJCWdvdG8gZHJvcDsKQEAgLTE4OCw3ICsxODgsNyBAQAogCX0KIAogCXEtPnBhY2tldHNpbisrOwotCXEtPmJ5dGVzaW4gKz0gc2tiLT5sZW47CisJcS0+Ynl0ZXNpbiArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAKIAlpZiAoZ3JlZF93cmVkX21vZGUodCkpCiAJCWdyZWRfbG9hZF93cmVkX3NldCh0LCBxKTsKQEAgLTIyNiw4ICsyMjYsOCBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKHEtPmJhY2tsb2cgKyBza2ItPmxlbiA8PSBxLT5saW1pdCkgewotCQlxLT5iYWNrbG9nICs9IHNrYi0+bGVuOworCWlmIChxLT5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIDw9IHEtPmxpbWl0KSB7CisJCXEtPmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpOwogCQlyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKIAl9CiAKQEAgLTI1NCw3ICsyNTQsNyBAQAogCX0gZWxzZSB7CiAJCWlmIChyZWRfaXNfaWRsaW5nKCZxLT5wYXJtcykpCiAJCQlyZWRfZW5kX29mX2lkbGVfcGVyaW9kKCZxLT5wYXJtcyk7Ci0JCXEtPmJhY2tsb2cgKz0gc2tiLT5sZW47CisJCXEtPmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpOwogCX0KIAogCXJldHVybiBxZGlzY19yZXF1ZXVlKHNrYiwgc2NoKTsKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCQkJCSAgICAgICAiVlEgMHgleCBhZnRlciBkZXF1ZXVlLCBzY3Jld2luZyB1cCAiCiAJCQkJICAgICAgICJiYWNrbG9nLlxuIiwgdGNfaW5kZXhfdG9fZHAoc2tiKSk7CiAJCX0gZWxzZSB7Ci0JCQlxLT5iYWNrbG9nIC09IHNrYi0+bGVuOworCQkJcS0+YmFja2xvZyAtPSBxZGlzY19wa3RfbGVuKHNrYik7CiAKIAkJCWlmICghcS0+YmFja2xvZyAmJiAhZ3JlZF93cmVkX21vZGUodCkpCiAJCQkJcmVkX3N0YXJ0X29mX2lkbGVfcGVyaW9kKCZxLT5wYXJtcyk7CkBAIC0yOTksNyArMjk5LDcgQEAKIAogCXNrYiA9IHFkaXNjX2RlcXVldWVfdGFpbChzY2gpOwogCWlmIChza2IpIHsKLQkJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOworCQl1bnNpZ25lZCBpbnQgbGVuID0gcWRpc2NfcGt0X2xlbihza2IpOwogCQlzdHJ1Y3QgZ3JlZF9zY2hlZF9kYXRhICpxOwogCQl1MTYgZHAgPSB0Y19pbmRleF90b19kcChza2IpOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IGU4MTdhYTAuLjBhZTdkMTkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogc3RydWN0IGhmc2NfY2xhc3MKIHsKLQl1MzIJCWNsYXNzaWQ7CS8qIGNsYXNzIGlkICovCisJc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbiBjbF9jb21tb247CiAJdW5zaWduZWQgaW50CXJlZmNudDsJCS8qIHVzYWdlIGNvdW50ICovCiAKIAlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYyBic3RhdHM7CkBAIC0xMzQsNyArMTM0LDYgQEAKIAlzdHJ1Y3QgcmJfbm9kZSB2dF9ub2RlOwkJLyogcGFyZW50J3MgdnRfdHJlZSBtZW1iZXIgKi8KIAlzdHJ1Y3QgcmJfcm9vdCBjZl90cmVlOwkJLyogYWN0aXZlIGNoaWxkcmVuIHNvcnRlZCBieSBjbF9mICovCiAJc3RydWN0IHJiX25vZGUgY2Zfbm9kZTsJCS8qIHBhcmVudCdzIGNmX2hlYXAgbWVtYmVyICovCi0Jc3RydWN0IGxpc3RfaGVhZCBobGlzdDsJCS8qIGhhc2ggbGlzdCBtZW1iZXIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwkJLyogZHJvcCBsaXN0IG1lbWJlciAqLwogCiAJdTY0CWNsX3RvdGFsOwkJLyogdG90YWwgd29yayBpbiBieXRlcyAqLwpAQCAtMTc3LDEzICsxNzYsMTEgQEAKIAl1bnNpZ25lZCBsb25nCWNsX25hY3RpdmU7CS8qIG51bWJlciBvZiBhY3RpdmUgY2hpbGRyZW4gKi8KIH07CiAKLSNkZWZpbmUgSEZTQ19IU0laRQkxNgotCiBzdHJ1Y3QgaGZzY19zY2hlZAogewogCXUxNglkZWZjbHM7CQkJCS8qIGRlZmF1bHQgY2xhc3MgaWQgKi8KIAlzdHJ1Y3QgaGZzY19jbGFzcyByb290OwkJCS8qIHJvb3QgY2xhc3MgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGNsaGFzaFtIRlNDX0hTSVpFXTsJLyogY2xhc3MgaGFzaCAqLworCXN0cnVjdCBRZGlzY19jbGFzc19oYXNoIGNsaGFzaDsJCS8qIGNsYXNzIGhhc2ggKi8KIAlzdHJ1Y3QgcmJfcm9vdCBlbGlnaWJsZTsJCS8qIGVsaWdpYmxlIHRyZWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRyb3BsaXN0OwkJLyogYWN0aXZlIGxlYWYgY2xhc3MgbGlzdCAoZm9yCiAJCQkJCQkgICBkcm9wcGluZykgKi8KQEAgLTg5OCw3ICs4OTUsNyBAQAogCQkJcHJpbnRrKCJxZGlzY19wZWVrX2xlbjogbm9uIHdvcmstY29uc2VydmluZyBxZGlzYyA/XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWxlbiA9IHNrYi0+bGVuOworCWxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAlpZiAodW5saWtlbHkoc2NoLT5vcHMtPnJlcXVldWUoc2tiLCBzY2gpICE9IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoInFkaXNjX3BlZWtfbGVuOiBmYWlsZWQgdG8gcmVxdWV1ZVxuIik7CkBAIC05MzMsMjYgKzkzMCwxNiBAQAogCX0gd2hpbGUgKChjbCA9IGNsLT5jbF9wYXJlbnQpICE9IE5VTEwpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotaGZzY19oYXNoKHUzMiBoKQotewotCWggXj0gaCA+PiA4OwotCWggXj0gaCA+PiA0OwotCi0JcmV0dXJuIGggJiAoSEZTQ19IU0laRSAtIDEpOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNjX2NsYXNzICoKIGhmc2NfZmluZF9jbGFzcyh1MzIgY2xhc3NpZCwgc3RydWN0IFFkaXNjICpzY2gpCiB7CiAJc3RydWN0IGhmc2Nfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7Ci0Jc3RydWN0IGhmc2NfY2xhc3MgKmNsOworCXN0cnVjdCBRZGlzY19jbGFzc19jb21tb24gKmNsYzsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2wsICZxLT5jbGhhc2hbaGZzY19oYXNoKGNsYXNzaWQpXSwgaGxpc3QpIHsKLQkJaWYgKGNsLT5jbGFzc2lkID09IGNsYXNzaWQpCi0JCQlyZXR1cm4gY2w7Ci0JfQotCXJldHVybiBOVUxMOworCWNsYyA9IHFkaXNjX2NsYXNzX2ZpbmQoJnEtPmNsaGFzaCwgY2xhc3NpZCk7CisJaWYgKGNsYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gY29udGFpbmVyX29mKGNsYywgc3RydWN0IGhmc2NfY2xhc3MsIGNsX2NvbW1vbik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDMyLDcgKzEwMTksOCBAQAogCiAJaWYgKGNsICE9IE5VTEwpIHsKIAkJaWYgKHBhcmVudGlkKSB7Ci0JCQlpZiAoY2wtPmNsX3BhcmVudCAmJiBjbC0+Y2xfcGFyZW50LT5jbGFzc2lkICE9IHBhcmVudGlkKQorCQkJaWYgKGNsLT5jbF9wYXJlbnQgJiYKKwkJCSAgICBjbC0+Y2xfcGFyZW50LT5jbF9jb21tb24uY2xhc3NpZCAhPSBwYXJlbnRpZCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWlmIChjbC0+Y2xfcGFyZW50ID09IE5VTEwgJiYgcGFyZW50aWQgIT0gVENfSF9ST09UKQogCQkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTA1Nyw3ICsxMDQ1LDcgQEAKIAogCQlpZiAodGNhW1RDQV9SQVRFXSkKIAkJCWdlbl9yZXBsYWNlX2VzdGltYXRvcigmY2wtPmJzdGF0cywgJmNsLT5yYXRlX2VzdCwKLQkJCQkJICAgICAgJnNjaC0+ZGV2LT5xdWV1ZV9sb2NrLAorCQkJCQkgICAgICBxZGlzY19yb290X2xvY2soc2NoKSwKIAkJCQkJICAgICAgdGNhW1RDQV9SQVRFXSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEwOTEsMTEgKzEwNzksMTIgQEAKIAlpZiAodXNjICE9IE5VTEwpCiAJCWhmc2NfY2hhbmdlX3VzYyhjbCwgdXNjLCAwKTsKIAorCWNsLT5jbF9jb21tb24uY2xhc3NpZCA9IGNsYXNzaWQ7CiAJY2wtPnJlZmNudCAgICA9IDE7Ci0JY2wtPmNsYXNzaWQgICA9IGNsYXNzaWQ7CiAJY2wtPnNjaGVkICAgICA9IHE7CiAJY2wtPmNsX3BhcmVudCA9IHBhcmVudDsKLQljbC0+cWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcywgY2xhc3NpZCk7CisJY2wtPnFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAorCQkJCSAgICAgICZwZmlmb19xZGlzY19vcHMsIGNsYXNzaWQpOwogCWlmIChjbC0+cWRpc2MgPT0gTlVMTCkKIAkJY2wtPnFkaXNjID0gJm5vb3BfcWRpc2M7CiAJSU5JVF9MSVNUX0hFQUQoJmNsLT5jaGlsZHJlbik7CkBAIC0xMTAzLDcgKzEwOTIsNyBAQAogCWNsLT5jZl90cmVlID0gUkJfUk9PVDsKIAogCXNjaF90cmVlX2xvY2soc2NoKTsKLQlsaXN0X2FkZF90YWlsKCZjbC0+aGxpc3QsICZxLT5jbGhhc2hbaGZzY19oYXNoKGNsYXNzaWQpXSk7CisJcWRpc2NfY2xhc3NfaGFzaF9pbnNlcnQoJnEtPmNsaGFzaCwgJmNsLT5jbF9jb21tb24pOwogCWxpc3RfYWRkX3RhaWwoJmNsLT5zaWJsaW5ncywgJnBhcmVudC0+Y2hpbGRyZW4pOwogCWlmIChwYXJlbnQtPmxldmVsID09IDApCiAJCWhmc2NfcHVyZ2VfcXVldWUoc2NoLCBwYXJlbnQpOwpAQCAtMTExMSw5ICsxMTAwLDExIEBACiAJY2wtPmNsX3BjdnRvZmYgPSBwYXJlbnQtPmNsX2N2dG9mZjsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAorCXFkaXNjX2NsYXNzX2hhc2hfZ3JvdyhzY2gsICZxLT5jbGhhc2gpOworCiAJaWYgKHRjYVtUQ0FfUkFURV0pCiAJCWdlbl9uZXdfZXN0aW1hdG9yKCZjbC0+YnN0YXRzLCAmY2wtPnJhdGVfZXN0LAotCQkJCSAgJnNjaC0+ZGV2LT5xdWV1ZV9sb2NrLCB0Y2FbVENBX1JBVEVdKTsKKwkJCQkgIHFkaXNjX3Jvb3RfbG9jayhzY2gpLCB0Y2FbVENBX1JBVEVdKTsKIAkqYXJnID0gKHVuc2lnbmVkIGxvbmcpY2w7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQ1LDcgKzExMzYsNyBAQAogCWhmc2NfYWRqdXN0X2xldmVscyhjbC0+Y2xfcGFyZW50KTsKIAogCWhmc2NfcHVyZ2VfcXVldWUoc2NoLCBjbCk7Ci0JbGlzdF9kZWwoJmNsLT5obGlzdCk7CisJcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoJnEtPmNsaGFzaCwgJmNsLT5jbF9jb21tb24pOwogCiAJaWYgKC0tY2wtPnJlZmNudCA9PSAwKQogCQloZnNjX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CkBAIC0xMjExLDggKzEyMDIsOSBAQAogCWlmIChjbC0+bGV2ZWwgPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobmV3ID09IE5VTEwpIHsKLQkJbmV3ID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMsCi0JCQkJCWNsLT5jbGFzc2lkKTsKKwkJbmV3ID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAorCQkJCQkmcGZpZm9fcWRpc2Nfb3BzLAorCQkJCQljbC0+Y2xfY29tbW9uLmNsYXNzaWQpOwogCQlpZiAobmV3ID09IE5VTEwpCiAJCQluZXcgPSAmbm9vcF9xZGlzYzsKIAl9CkBAIC0xMzQ1LDggKzEzMzcsOSBAQAogCXN0cnVjdCBoZnNjX2NsYXNzICpjbCA9IChzdHJ1Y3QgaGZzY19jbGFzcyAqKWFyZzsKIAlzdHJ1Y3QgbmxhdHRyICpuZXN0OwogCi0JdGNtLT50Y21fcGFyZW50ID0gY2wtPmNsX3BhcmVudCA/IGNsLT5jbF9wYXJlbnQtPmNsYXNzaWQgOiBUQ19IX1JPT1Q7Ci0JdGNtLT50Y21faGFuZGxlID0gY2wtPmNsYXNzaWQ7CisJdGNtLT50Y21fcGFyZW50ID0gY2wtPmNsX3BhcmVudCA/IGNsLT5jbF9wYXJlbnQtPmNsX2NvbW1vbi5jbGFzc2lkIDoKKwkJCQkJICBUQ19IX1JPT1Q7CisJdGNtLT50Y21faGFuZGxlID0gY2wtPmNsX2NvbW1vbi5jbGFzc2lkOwogCWlmIChjbC0+bGV2ZWwgPT0gMCkKIAkJdGNtLT50Y21faW5mbyA9IGNsLT5xZGlzYy0+aGFuZGxlOwogCkBAIC0xMzkwLDE0ICsxMzgzLDE2IEBACiBoZnNjX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKmFyZykKIHsKIAlzdHJ1Y3QgaGZzY19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAlzdHJ1Y3QgaGZzY19jbGFzcyAqY2w7CiAJdW5zaWduZWQgaW50IGk7CiAKIAlpZiAoYXJnLT5zdG9wKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpIDwgSEZTQ19IU0laRTsgaSsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY2wsICZxLT5jbGhhc2hbaV0sIGhsaXN0KSB7CisJZm9yIChpID0gMDsgaSA8IHEtPmNsaGFzaC5oYXNoc2l6ZTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsLCBuLCAmcS0+Y2xoYXNoLmhhc2hbaV0sCisJCQkJICAgICBjbF9jb21tb24uaG5vZGUpIHsKIAkJCWlmIChhcmctPmNvdW50IDwgYXJnLT5za2lwKSB7CiAJCQkJYXJnLT5jb3VudCsrOwogCQkJCWNvbnRpbnVlOwpAQCAtMTQzMywyMyArMTQyOCwyNSBAQAogewogCXN0cnVjdCBoZnNjX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCB0Y19oZnNjX3FvcHQgKnFvcHQ7Ci0JdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKIAogCWlmIChvcHQgPT0gTlVMTCB8fCBubGFfbGVuKG9wdCkgPCBzaXplb2YoKnFvcHQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlxb3B0ID0gbmxhX2RhdGEob3B0KTsKIAogCXEtPmRlZmNscyA9IHFvcHQtPmRlZmNsczsKLQlmb3IgKGkgPSAwOyBpIDwgSEZTQ19IU0laRTsgaSsrKQotCQlJTklUX0xJU1RfSEVBRCgmcS0+Y2xoYXNoW2ldKTsKKwllcnIgPSBxZGlzY19jbGFzc19oYXNoX2luaXQoJnEtPmNsaGFzaCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJcS0+ZWxpZ2libGUgPSBSQl9ST09UOwogCUlOSVRfTElTVF9IRUFEKCZxLT5kcm9wbGlzdCk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcS0+cmVxdWV1ZSk7CiAKKwlxLT5yb290LmNsX2NvbW1vbi5jbGFzc2lkID0gc2NoLT5oYW5kbGU7CiAJcS0+cm9vdC5yZWZjbnQgID0gMTsKLQlxLT5yb290LmNsYXNzaWQgPSBzY2gtPmhhbmRsZTsKIAlxLT5yb290LnNjaGVkICAgPSBxOwotCXEtPnJvb3QucWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcywKKwlxLT5yb290LnFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAorCQkJCQkgICZwZmlmb19xZGlzY19vcHMsCiAJCQkJCSAgc2NoLT5oYW5kbGUpOwogCWlmIChxLT5yb290LnFkaXNjID09IE5VTEwpCiAJCXEtPnJvb3QucWRpc2MgPSAmbm9vcF9xZGlzYzsKQEAgLTE0NTcsNyArMTQ1NCw4IEBACiAJcS0+cm9vdC52dF90cmVlID0gUkJfUk9PVDsKIAlxLT5yb290LmNmX3RyZWUgPSBSQl9ST09UOwogCi0JbGlzdF9hZGQoJnEtPnJvb3QuaGxpc3QsICZxLT5jbGhhc2hbaGZzY19oYXNoKHEtPnJvb3QuY2xhc3NpZCldKTsKKwlxZGlzY19jbGFzc19oYXNoX2luc2VydCgmcS0+Y2xoYXNoLCAmcS0+cm9vdC5jbF9jb21tb24pOworCXFkaXNjX2NsYXNzX2hhc2hfZ3JvdyhzY2gsICZxLT5jbGhhc2gpOwogCiAJcWRpc2Nfd2F0Y2hkb2dfaW5pdCgmcS0+d2F0Y2hkb2csIHNjaCk7CiAKQEAgLTE1MjAsMTAgKzE1MTgsMTEgQEAKIHsKIAlzdHJ1Y3QgaGZzY19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlzdHJ1Y3QgaGZzY19jbGFzcyAqY2w7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSEZTQ19IU0laRTsgaSsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY2wsICZxLT5jbGhhc2hbaV0sIGhsaXN0KQorCWZvciAoaSA9IDA7IGkgPCBxLT5jbGhhc2guaGFzaHNpemU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjbCwgbiwgJnEtPmNsaGFzaC5oYXNoW2ldLCBjbF9jb21tb24uaG5vZGUpCiAJCQloZnNjX3Jlc2V0X2NsYXNzKGNsKTsKIAl9CiAJX19za2JfcXVldWVfcHVyZ2UoJnEtPnJlcXVldWUpOwpAQCAtMTUzNywxNyArMTUzNiwyMCBAQAogaGZzY19kZXN0cm95X3FkaXNjKHN0cnVjdCBRZGlzYyAqc2NoKQogewogCXN0cnVjdCBoZnNjX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwotCXN0cnVjdCBoZnNjX2NsYXNzICpjbCwgKm5leHQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm4sICpuZXh0OworCXN0cnVjdCBoZnNjX2NsYXNzICpjbDsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBIRlNDX0hTSVpFOyBpKyspIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbCwgJnEtPmNsaGFzaFtpXSwgaGxpc3QpCisJZm9yIChpID0gMDsgaSA8IHEtPmNsaGFzaC5oYXNoc2l6ZTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsLCBuLCAmcS0+Y2xoYXNoLmhhc2hbaV0sIGNsX2NvbW1vbi5obm9kZSkKIAkJCXRjZl9kZXN0cm95X2NoYWluKCZjbC0+ZmlsdGVyX2xpc3QpOwogCX0KLQlmb3IgKGkgPSAwOyBpIDwgSEZTQ19IU0laRTsgaSsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbCwgbmV4dCwgJnEtPmNsaGFzaFtpXSwgaGxpc3QpCisJZm9yIChpID0gMDsgaSA8IHEtPmNsaGFzaC5oYXNoc2l6ZTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2wsIG4sIG5leHQsICZxLT5jbGhhc2guaGFzaFtpXSwKKwkJCQkJICBjbF9jb21tb24uaG5vZGUpCiAJCQloZnNjX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CiAJfQorCXFkaXNjX2NsYXNzX2hhc2hfZGVzdHJveSgmcS0+Y2xoYXNoKTsKIAlfX3NrYl9xdWV1ZV9wdXJnZSgmcS0+cmVxdWV1ZSk7CiAJcWRpc2Nfd2F0Y2hkb2dfY2FuY2VsKCZxLT53YXRjaGRvZyk7CiB9CkBAIC0xNTcyLDcgKzE1NzQsNiBAQAogaGZzY19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKQogewogCXN0cnVjdCBoZnNjX2NsYXNzICpjbDsKLQl1bnNpZ25lZCBpbnQgbGVuOwogCWludCBlcnI7CiAKIAljbCA9IGhmc2NfY2xhc3NpZnkoc2tiLCBzY2gsICZlcnIpOwpAQCAtMTU4Myw4ICsxNTg0LDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlsZW4gPSBza2ItPmxlbjsKLQllcnIgPSBjbC0+cWRpc2MtPmVucXVldWUoc2tiLCBjbC0+cWRpc2MpOworCWVyciA9IHFkaXNjX2VucXVldWUoc2tiLCBjbC0+cWRpc2MpOwogCWlmICh1bmxpa2VseShlcnIgIT0gTkVUX1hNSVRfU1VDQ0VTUykpIHsKIAkJY2wtPnFzdGF0cy5kcm9wcysrOwogCQlzY2gtPnFzdGF0cy5kcm9wcysrOwpAQCAtMTU5MiwxMiArMTU5MiwxMiBAQAogCX0KIAogCWlmIChjbC0+cWRpc2MtPnEucWxlbiA9PSAxKQotCQlzZXRfYWN0aXZlKGNsLCBsZW4pOworCQlzZXRfYWN0aXZlKGNsLCBxZGlzY19wa3RfbGVuKHNrYikpOwogCiAJY2wtPmJzdGF0cy5wYWNrZXRzKys7Ci0JY2wtPmJzdGF0cy5ieXRlcyArPSBsZW47CisJY2wtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJc2NoLT5ic3RhdHMucGFja2V0cysrOwotCXNjaC0+YnN0YXRzLmJ5dGVzICs9IGxlbjsKKwlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJc2NoLT5xLnFsZW4rKzsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwpAQCAtMTY0Nyw5ICsxNjQ3LDkgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JdXBkYXRlX3ZmKGNsLCBza2ItPmxlbiwgY3VyX3RpbWUpOworCXVwZGF0ZV92ZihjbCwgcWRpc2NfcGt0X2xlbihza2IpLCBjdXJfdGltZSk7CiAJaWYgKHJlYWx0aW1lKQotCQljbC0+Y2xfY3VtdWwgKz0gc2tiLT5sZW47CisJCWNsLT5jbF9jdW11bCArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAKIAlpZiAoY2wtPnFkaXNjLT5xLnFsZW4gIT0gMCkgewogCQlpZiAoY2wtPmNsX2ZsYWdzICYgSEZTQ19SU0MpIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IDNmYjU4ZjQuLjMwYzk5OWM2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTI0LDggKzI0LDYgQEAKICAqCQlKaXJpIEZvanRhc2VrCiAgKgkJCWZpeGVkIHJlcXVldWUgcm91dGluZQogICoJCWFuZCBtYW55IG90aGVycy4gdGhhbmtzLgotICoKLSAqICRJZDogc2NoX2h0Yi5jLHYgMS4yNSAyMDAzLzEyLzA3IDExOjA4OjI1IGRldmlrIEV4cCBkZXZpayAkCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtNTMsNyArNTEsNiBAQAogICAgIG9uZSBsZXNzIHRoYW4gdGhlaXIgcGFyZW50LgogKi8KIAotI2RlZmluZSBIVEJfSFNJWkUgMTYJCS8qIGNsYXNzaWQgaGFzaCBzaXplICovCiBzdGF0aWMgaW50IGh0Yl9oeXN0ZXJlc2lzIF9fcmVhZF9tb3N0bHkgPSAwOyAvKiB3aGV0aGVyIHRvIHVzZSBtb2RlIGh5c3RlcmVzaXMgZm9yIHNwZWVkdXAgKi8KICNkZWZpbmUgSFRCX1ZFUiAweDMwMDExCQkvKiBtYWpvciBtdXN0IGJlIG1hdGNoZWQgd2l0aCBudW1iZXIgc3VwbGllZCBieSBUQyBhcyB2ZXJzaW9uICovCiAKQEAgLTc0LDggKzcxLDggQEAKIAogLyogaW50ZXJpb3IgJiBsZWFmIG5vZGVzOyBwcm9wcyBzcGVjaWZpYyB0byBsZWF2ZXMgYXJlIG1hcmtlZCBMOiAqLwogc3RydWN0IGh0Yl9jbGFzcyB7CisJc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbiBjb21tb247CiAJLyogZ2VuZXJhbCBjbGFzcyBwYXJhbWV0ZXJzICovCi0JdTMyIGNsYXNzaWQ7CiAJc3RydWN0IGduZXRfc3RhdHNfYmFzaWMgYnN0YXRzOwogCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlIHFzdGF0czsKIAlzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdCByYXRlX2VzdDsKQEAgLTg0LDEwICs4MSw4IEBACiAKIAkvKiB0b3BvbG9neSAqLwogCWludCBsZXZlbDsJCS8qIG91ciBsZXZlbCAoc2VlIGFib3ZlKSAqLworCXVuc2lnbmVkIGludCBjaGlsZHJlbjsKIAlzdHJ1Y3QgaHRiX2NsYXNzICpwYXJlbnQ7CS8qIHBhcmVudCBjbGFzcyAqLwotCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0OwkvKiBjbGFzc2lkIGhhc2ggbGlzdCBpdGVtICovCi0Jc3RydWN0IGxpc3RfaGVhZCBzaWJsaW5nOwkvKiBzaWJsaW5nIGxpc3QgaXRlbSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CS8qIGNoaWxkcmVuIGxpc3QgKi8KIAogCXVuaW9uIHsKIAkJc3RydWN0IGh0Yl9jbGFzc19sZWFmIHsKQEAgLTE0Miw4ICsxMzcsNyBAQAogfQogCiBzdHJ1Y3QgaHRiX3NjaGVkIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJvb3Q7CS8qIHJvb3QgY2xhc3NlcyBsaXN0ICovCi0Jc3RydWN0IGhsaXN0X2hlYWQgaGFzaFtIVEJfSFNJWkVdOwkvKiBoYXNoZWQgYnkgY2xhc3NpZCAqLworCXN0cnVjdCBRZGlzY19jbGFzc19oYXNoIGNsaGFzaDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRyb3BzW1RDX0hUQl9OVU1QUklPXTsvKiBhY3RpdmUgbGVhdmVzIChmb3IgZHJvcHMpICovCiAKIAkvKiBzZWxmIGxpc3QgLSByb290cyBvZiBzZWxmIGdlbmVyYXRpbmcgdHJlZSAqLwpAQCAtMTY1LDcgKzE1OSw2IEBACiAKIAkvKiBmaWx0ZXJzIGZvciBxZGlzYyBpdHNlbGYgKi8KIAlzdHJ1Y3QgdGNmX3Byb3RvICpmaWx0ZXJfbGlzdDsKLQlpbnQgZmlsdGVyX2NudDsKIAogCWludCByYXRlMnF1YW50dW07CS8qIHF1YW50ID0gcmF0ZSAvIHJhdGUycXVhbnR1bSAqLwogCXBzY2hlZF90aW1lX3Qgbm93OwkvKiBjYWNoZWQgZGVxdWV1ZSB0aW1lICovCkBAIC0xNzgsMzIgKzE3MSwxNiBAQAogCWxvbmcgZGlyZWN0X3BrdHM7CiB9OwogCi0vKiBjb21wdXRlIGhhc2ggb2Ygc2l6ZSBIVEJfSFNJWkUgZm9yIGdpdmVuIGhhbmRsZSAqLwotc3RhdGljIGlubGluZSBpbnQgaHRiX2hhc2godTMyIGgpCi17Ci0jaWYgSFRCX0hTSVpFICE9IDE2Ci0jZXJyb3IgIkRlY2xhcmUgbmV3IGhhc2ggZm9yIHlvdXIgSFRCX0hTSVpFIgotI2VuZGlmCi0JaCBePSBoID4+IDg7CQkvKiBzdG9sZW4gZnJvbSBjYnFfaGFzaCAqLwotCWggXj0gaCA+PiA0OwotCXJldHVybiBoICYgMHhmOwotfQotCiAvKiBmaW5kIGNsYXNzIGluIGdsb2JhbCBoYXNoIHRhYmxlIHVzaW5nIGdpdmVuIGhhbmRsZSAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaHRiX2NsYXNzICpodGJfZmluZCh1MzIgaGFuZGxlLCBzdHJ1Y3QgUWRpc2MgKnNjaCkKIHsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwotCXN0cnVjdCBobGlzdF9ub2RlICpwOwotCXN0cnVjdCBodGJfY2xhc3MgKmNsOworCXN0cnVjdCBRZGlzY19jbGFzc19jb21tb24gKmNsYzsKIAotCWlmIChUQ19IX01BSihoYW5kbGUpICE9IHNjaC0+aGFuZGxlKQorCWNsYyA9IHFkaXNjX2NsYXNzX2ZpbmQoJnEtPmNsaGFzaCwgaGFuZGxlKTsKKwlpZiAoY2xjID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkoY2wsIHAsIHEtPmhhc2ggKyBodGJfaGFzaChoYW5kbGUpLCBobGlzdCkgewotCQlpZiAoY2wtPmNsYXNzaWQgPT0gaGFuZGxlKQotCQkJcmV0dXJuIGNsOwotCX0KLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gY29udGFpbmVyX29mKGNsYywgc3RydWN0IGh0Yl9jbGFzcywgY29tbW9uKTsKIH0KIAogLyoqCkBAIC0yODQsNyArMjYxLDcgQEAKIAkJcGFyZW50ID0gKnA7CiAJCWMgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBodGJfY2xhc3MsIG5vZGVbcHJpb10pOwogCi0JCWlmIChjbC0+Y2xhc3NpZCA+IGMtPmNsYXNzaWQpCisJCWlmIChjbC0+Y29tbW9uLmNsYXNzaWQgPiBjLT5jb21tb24uY2xhc3NpZCkKIAkJCXAgPSAmcGFyZW50LT5yYl9yaWdodDsKIAkJZWxzZQogCQkJcCA9ICZwYXJlbnQtPnJiX2xlZnQ7CkBAIC00NDgsNyArNDI1LDcgQEAKIAkJCQkvKiB3ZSBhcmUgcmVtb3ZpbmcgY2hpbGQgd2hpY2ggaXMgcG9pbnRlZCB0byBmcm9tCiAJCQkJICAgcGFyZW50IGZlZWQgLSBmb3JnZXQgdGhlIHBvaW50ZXIgYnV0IHJlbWVtYmVyCiAJCQkJICAgY2xhc3NpZCAqLwotCQkJCXAtPnVuLmlubmVyLmxhc3RfcHRyX2lkW3ByaW9dID0gY2wtPmNsYXNzaWQ7CisJCQkJcC0+dW4uaW5uZXIubGFzdF9wdHJfaWRbcHJpb10gPSBjbC0+Y29tbW9uLmNsYXNzaWQ7CiAJCQkJcC0+dW4uaW5uZXIucHRyW3ByaW9dID0gTlVMTDsKIAkJCX0KIApAQCAtNTk1LDIxICs1NzIsMjAgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiByZXQ7CiAjZW5kaWYKLQl9IGVsc2UgaWYgKGNsLT51bi5sZWFmLnEtPmVucXVldWUoc2tiLCBjbC0+dW4ubGVhZi5xKSAhPQotCQkgICBORVRfWE1JVF9TVUNDRVNTKSB7CisJfSBlbHNlIGlmIChxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnVuLmxlYWYucSkgIT0gTkVUX1hNSVRfU1VDQ0VTUykgewogCQlzY2gtPnFzdGF0cy5kcm9wcysrOwogCQljbC0+cXN0YXRzLmRyb3BzKys7CiAJCXJldHVybiBORVRfWE1JVF9EUk9QOwogCX0gZWxzZSB7CiAJCWNsLT5ic3RhdHMucGFja2V0cyArPQogCQkJc2tiX2lzX2dzbyhza2IpP3NrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3M6MTsKLQkJY2wtPmJzdGF0cy5ieXRlcyArPSBza2ItPmxlbjsKKwkJY2wtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJCWh0Yl9hY3RpdmF0ZShxLCBjbCk7CiAJfQogCiAJc2NoLT5xLnFsZW4rKzsKIAlzY2gtPmJzdGF0cy5wYWNrZXRzICs9IHNrYl9pc19nc28oc2tiKT9za2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzOjE7Ci0Jc2NoLT5ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogfQogCkBAIC02NjYsNyArNjQyLDcgQEAKIHN0YXRpYyB2b2lkIGh0Yl9jaGFyZ2VfY2xhc3Moc3RydWN0IGh0Yl9zY2hlZCAqcSwgc3RydWN0IGh0Yl9jbGFzcyAqY2wsCiAJCQkgICAgIGludCBsZXZlbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgYnl0ZXMgPSBza2ItPmxlbjsKKwlpbnQgYnl0ZXMgPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJbG9uZyB0b2tzLCBkaWZmOwogCWVudW0gaHRiX2Ntb2RlIG9sZF9tb2RlOwogCkBAIC03NTMsMTAgKzcyOSwxMCBAQAogCXdoaWxlIChuKSB7CiAJCXN0cnVjdCBodGJfY2xhc3MgKmNsID0KIAkJICAgIHJiX2VudHJ5KG4sIHN0cnVjdCBodGJfY2xhc3MsIG5vZGVbcHJpb10pOwotCQlpZiAoaWQgPT0gY2wtPmNsYXNzaWQpCisJCWlmIChpZCA9PSBjbC0+Y29tbW9uLmNsYXNzaWQpCiAJCQlyZXR1cm4gbjsKIAotCQlpZiAoaWQgPiBjbC0+Y2xhc3NpZCkgeworCQlpZiAoaWQgPiBjbC0+Y29tbW9uLmNsYXNzaWQpIHsKIAkJCW4gPSBuLT5yYl9yaWdodDsKIAkJfSBlbHNlIHsKIAkJCXIgPSBuOwpAQCAtODY2LDcgKzg0Miw3IEBACiAJCWlmICghY2wtPndhcm5lZCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICJodGI6IGNsYXNzICVYIGlzbid0IHdvcmsgY29uc2VydmluZyA/IVxuIiwKLQkJCSAgICAgICBjbC0+Y2xhc3NpZCk7CisJCQkgICAgICAgY2wtPmNvbW1vbi5jbGFzc2lkKTsKIAkJCWNsLT53YXJuZWQgPSAxOwogCQl9CiAJCXEtPm53Y19oaXQrKzsKQEAgLTg3OSw3ICs4NTUsOCBAQAogCX0gd2hpbGUgKGNsICE9IHN0YXJ0KTsKIAogCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7Ci0JCWlmICgoY2wtPnVuLmxlYWYuZGVmaWNpdFtsZXZlbF0gLT0gc2tiLT5sZW4pIDwgMCkgeworCQljbC0+dW4ubGVhZi5kZWZpY2l0W2xldmVsXSAtPSBxZGlzY19wa3RfbGVuKHNrYik7CisJCWlmIChjbC0+dW4ubGVhZi5kZWZpY2l0W2xldmVsXSA8IDApIHsKIAkJCWNsLT51bi5sZWFmLmRlZmljaXRbbGV2ZWxdICs9IGNsLT51bi5sZWFmLnF1YW50dW07CiAJCQlodGJfbmV4dF9yYl9ub2RlKChsZXZlbCA/IGNsLT5wYXJlbnQtPnVuLmlubmVyLnB0ciA6IHEtPgogCQkJCQkgIHB0clswXSkgKyBwcmlvKTsKQEAgLTk3NywxMyArOTU0LDEyIEBACiBzdGF0aWMgdm9pZCBodGJfcmVzZXQoc3RydWN0IFFkaXNjICpzY2gpCiB7CiAJc3RydWN0IGh0Yl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKLQlpbnQgaTsKKwlzdHJ1Y3QgaHRiX2NsYXNzICpjbDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBIVEJfSFNJWkU7IGkrKykgewotCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcDsKLQkJc3RydWN0IGh0Yl9jbGFzcyAqY2w7Ci0KLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY2wsIHAsIHEtPmhhc2ggKyBpLCBobGlzdCkgeworCWZvciAoaSA9IDA7IGkgPCBxLT5jbGhhc2guaGFzaHNpemU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjbCwgbiwgJnEtPmNsaGFzaC5oYXNoW2ldLCBjb21tb24uaG5vZGUpIHsKIAkJCWlmIChjbC0+bGV2ZWwpCiAJCQkJbWVtc2V0KCZjbC0+dW4uaW5uZXIsIDAsIHNpemVvZihjbC0+dW4uaW5uZXIpKTsKIAkJCWVsc2UgewpAQCAtMTA0MSwxNiArMTAxNywxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlJTklUX0xJU1RfSEVBRCgmcS0+cm9vdCk7Ci0JZm9yIChpID0gMDsgaSA8IEhUQl9IU0laRTsgaSsrKQotCQlJTklUX0hMSVNUX0hFQUQocS0+aGFzaCArIGkpOworCWVyciA9IHFkaXNjX2NsYXNzX2hhc2hfaW5pdCgmcS0+Y2xoYXNoKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlmb3IgKGkgPSAwOyBpIDwgVENfSFRCX05VTVBSSU87IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQocS0+ZHJvcHMgKyBpKTsKIAogCXFkaXNjX3dhdGNoZG9nX2luaXQoJnEtPndhdGNoZG9nLCBzY2gpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnEtPmRpcmVjdF9xdWV1ZSk7CiAKLQlxLT5kaXJlY3RfcWxlbiA9IHNjaC0+ZGV2LT50eF9xdWV1ZV9sZW47CisJcS0+ZGlyZWN0X3FsZW4gPSBxZGlzY19kZXYoc2NoKS0+dHhfcXVldWVfbGVuOwogCWlmIChxLT5kaXJlY3RfcWxlbiA8IDIpCS8qIHNvbWUgZGV2aWNlcyBoYXZlIHplcm8gdHhfcXVldWVfbGVuICovCiAJCXEtPmRpcmVjdF9xbGVuID0gMjsKIApAQCAtMTA2MywxMSArMTAzOSwxMiBAQAogCiBzdGF0aWMgaW50IGh0Yl9kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXNwaW5sb2NrX3QgKnJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayhzY2gpOwogCXN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJc3RydWN0IG5sYXR0ciAqbmVzdDsKIAlzdHJ1Y3QgdGNfaHRiX2dsb2IgZ29wdDsKIAotCXNwaW5fbG9ja19iaCgmc2NoLT5kZXYtPnF1ZXVlX2xvY2spOworCXNwaW5fbG9ja19iaChyb290X2xvY2spOwogCiAJZ29wdC5kaXJlY3RfcGt0cyA9IHEtPmRpcmVjdF9wa3RzOwogCWdvcHQudmVyc2lvbiA9IEhUQl9WRVI7CkBAIC0xMDgxLDExICsxMDU4LDExIEBACiAJTkxBX1BVVChza2IsIFRDQV9IVEJfSU5JVCwgc2l6ZW9mKGdvcHQpLCAmZ29wdCk7CiAJbmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7CiAKLQlzcGluX3VubG9ja19iaCgmc2NoLT5kZXYtPnF1ZXVlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKHJvb3RfbG9jayk7CiAJcmV0dXJuIHNrYi0+bGVuOwogCiBubGFfcHV0X2ZhaWx1cmU6Ci0Jc3Bpbl91bmxvY2tfYmgoJnNjaC0+ZGV2LT5xdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaChyb290X2xvY2spOwogCW5sYV9uZXN0X2NhbmNlbChza2IsIG5lc3QpOwogCXJldHVybiAtMTsKIH0KQEAgLTEwOTQsMTIgKzEwNzEsMTMgQEAKIAkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pCiB7CiAJc3RydWN0IGh0Yl9jbGFzcyAqY2wgPSAoc3RydWN0IGh0Yl9jbGFzcyAqKWFyZzsKKwlzcGlubG9ja190ICpyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2soc2NoKTsKIAlzdHJ1Y3QgbmxhdHRyICpuZXN0OwogCXN0cnVjdCB0Y19odGJfb3B0IG9wdDsKIAotCXNwaW5fbG9ja19iaCgmc2NoLT5kZXYtPnF1ZXVlX2xvY2spOwotCXRjbS0+dGNtX3BhcmVudCA9IGNsLT5wYXJlbnQgPyBjbC0+cGFyZW50LT5jbGFzc2lkIDogVENfSF9ST09UOwotCXRjbS0+dGNtX2hhbmRsZSA9IGNsLT5jbGFzc2lkOworCXNwaW5fbG9ja19iaChyb290X2xvY2spOworCXRjbS0+dGNtX3BhcmVudCA9IGNsLT5wYXJlbnQgPyBjbC0+cGFyZW50LT5jb21tb24uY2xhc3NpZCA6IFRDX0hfUk9PVDsKKwl0Y20tPnRjbV9oYW5kbGUgPSBjbC0+Y29tbW9uLmNsYXNzaWQ7CiAJaWYgKCFjbC0+bGV2ZWwgJiYgY2wtPnVuLmxlYWYucSkKIAkJdGNtLT50Y21faW5mbyA9IGNsLT51bi5sZWFmLnEtPmhhbmRsZTsKIApAQCAtMTExOSwxMSArMTA5NywxMSBAQAogCU5MQV9QVVQoc2tiLCBUQ0FfSFRCX1BBUk1TLCBzaXplb2Yob3B0KSwgJm9wdCk7CiAKIAlubGFfbmVzdF9lbmQoc2tiLCBuZXN0KTsKLQlzcGluX3VubG9ja19iaCgmc2NoLT5kZXYtPnF1ZXVlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKHJvb3RfbG9jayk7CiAJcmV0dXJuIHNrYi0+bGVuOwogCiBubGFfcHV0X2ZhaWx1cmU6Ci0Jc3Bpbl91bmxvY2tfYmgoJnNjaC0+ZGV2LT5xdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaChyb290X2xvY2spOwogCW5sYV9uZXN0X2NhbmNlbChza2IsIG5lc3QpOwogCXJldHVybiAtMTsKIH0KQEAgLTExNTMsOCArMTEzMSw5IEBACiAKIAlpZiAoY2wgJiYgIWNsLT5sZXZlbCkgewogCQlpZiAobmV3ID09IE5VTEwgJiYKLQkJICAgIChuZXcgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcywKLQkJCQkJICAgICBjbC0+Y2xhc3NpZCkpCisJCSAgICAobmV3ID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAorCQkJCQkgICAgICZwZmlmb19xZGlzY19vcHMsCisJCQkJCSAgICAgY2wtPmNvbW1vbi5jbGFzc2lkKSkKIAkJICAgID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCXNjaF90cmVlX2xvY2soc2NoKTsKQEAgLTExOTUsMTIgKzExNzQsOSBAQAogCWlmICghY2wtPnBhcmVudCkKIAkJLyogdGhlIHJvb3QgY2xhc3MgKi8KIAkJcmV0dXJuIDA7Ci0KLQlpZiAoIShjbC0+cGFyZW50LT5jaGlsZHJlbi5uZXh0ID09ICZjbC0+c2libGluZyAmJgotCQljbC0+cGFyZW50LT5jaGlsZHJlbi5wcmV2ID09ICZjbC0+c2libGluZykpCisJaWYgKGNsLT5wYXJlbnQtPmNoaWxkcmVuID4gMSkKIAkJLyogbm90IHRoZSBsYXN0IGNoaWxkICovCiAJCXJldHVybiAwOwotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEyMjgsOCArMTIwNCw2IEBACiAKIHN0YXRpYyB2b2lkIGh0Yl9kZXN0cm95X2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgaHRiX2NsYXNzICpjbCkKIHsKLQlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwotCiAJaWYgKCFjbC0+bGV2ZWwpIHsKIAkJQlVHX1RSQVAoY2wtPnVuLmxlYWYucSk7CiAJCXFkaXNjX2Rlc3Ryb3koY2wtPnVuLmxlYWYucSk7CkBAIC0xMjM5LDIxICsxMjEzLDYgQEAKIAlxZGlzY19wdXRfcnRhYihjbC0+Y2VpbCk7CiAKIAl0Y2ZfZGVzdHJveV9jaGFpbigmY2wtPmZpbHRlcl9saXN0KTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmY2wtPmNoaWxkcmVuKSkKLQkJaHRiX2Rlc3Ryb3lfY2xhc3Moc2NoLCBsaXN0X2VudHJ5KGNsLT5jaGlsZHJlbi5uZXh0LAotCQkJCQkJICBzdHJ1Y3QgaHRiX2NsYXNzLCBzaWJsaW5nKSk7Ci0KLQkvKiBub3RlOiB0aGlzIGRlbGV0ZSBtYXkgaGFwcGVuIHR3aWNlIChzZWUgaHRiX2RlbGV0ZSkgKi8KLQlobGlzdF9kZWxfaW5pdCgmY2wtPmhsaXN0KTsKLQlsaXN0X2RlbCgmY2wtPnNpYmxpbmcpOwotCi0JaWYgKGNsLT5wcmlvX2FjdGl2aXR5KQotCQlodGJfZGVhY3RpdmF0ZShxLCBjbCk7Ci0KLQlpZiAoY2wtPmNtb2RlICE9IEhUQl9DQU5fU0VORCkKLQkJaHRiX3NhZmVfcmJfZXJhc2UoJmNsLT5wcV9ub2RlLCBxLT53YWl0X3BxICsgY2wtPmxldmVsKTsKLQogCWtmcmVlKGNsKTsKIH0KIApAQCAtMTI2MSw2ICsxMjIwLDkgQEAKIHN0YXRpYyB2b2lkIGh0Yl9kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKQogewogCXN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IGhsaXN0X25vZGUgKm4sICpuZXh0OworCXN0cnVjdCBodGJfY2xhc3MgKmNsOworCXVuc2lnbmVkIGludCBpOwogCiAJcWRpc2Nfd2F0Y2hkb2dfY2FuY2VsKCZxLT53YXRjaGRvZyk7CiAJLyogVGhpcyBsaW5lIHVzZWQgdG8gYmUgYWZ0ZXIgaHRiX2Rlc3Ryb3lfY2xhc3MgY2FsbCBiZWxvdwpAQCAtMTI2OSwxMCArMTIzMSwxNiBAQAogCSAgIHVuYmluZF9maWx0ZXIgb24gaXQgKHdpdGhvdXQgT29wcykuICovCiAJdGNmX2Rlc3Ryb3lfY2hhaW4oJnEtPmZpbHRlcl9saXN0KTsKIAotCXdoaWxlICghbGlzdF9lbXB0eSgmcS0+cm9vdCkpCi0JCWh0Yl9kZXN0cm95X2NsYXNzKHNjaCwgbGlzdF9lbnRyeShxLT5yb290Lm5leHQsCi0JCQkJCQkgIHN0cnVjdCBodGJfY2xhc3MsIHNpYmxpbmcpKTsKLQorCWZvciAoaSA9IDA7IGkgPCBxLT5jbGhhc2guaGFzaHNpemU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjbCwgbiwgJnEtPmNsaGFzaC5oYXNoW2ldLCBjb21tb24uaG5vZGUpCisJCQl0Y2ZfZGVzdHJveV9jaGFpbigmY2wtPmZpbHRlcl9saXN0KTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHEtPmNsaGFzaC5oYXNoc2l6ZTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2wsIG4sIG5leHQsICZxLT5jbGhhc2guaGFzaFtpXSwKKwkJCQkJICBjb21tb24uaG5vZGUpCisJCQlodGJfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTsKKwl9CisJcWRpc2NfY2xhc3NfaGFzaF9kZXN0cm95KCZxLT5jbGhhc2gpOwogCV9fc2tiX3F1ZXVlX3B1cmdlKCZxLT5kaXJlY3RfcXVldWUpOwogfQogCkBAIC0xMjg3LDEyICsxMjU1LDEzIEBACiAJLy8gVE9ETzogd2h5IGRvbid0IGFsbG93IHRvIGRlbGV0ZSBzdWJ0cmVlID8gcmVmZXJlbmNlcyA/IGRvZXMKIAkvLyB0YyBzdWJzeXMgcXVhcmFudGVlIHVzIHRoYXQgaW4gaHRiX2Rlc3Ryb3kgaXQgaG9sZHMgbm8gY2xhc3MKIAkvLyByZWZzIHNvIHRoYXQgd2UgY2FuIHJlbW92ZSBjaGlsZHJlbiBzYWZlbHkgdGhlcmUgPwotCWlmICghbGlzdF9lbXB0eSgmY2wtPmNoaWxkcmVuKSB8fCBjbC0+ZmlsdGVyX2NudCkKKwlpZiAoY2wtPmNoaWxkcmVuIHx8IGNsLT5maWx0ZXJfY250KQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKCFjbC0+bGV2ZWwgJiYgaHRiX3BhcmVudF9sYXN0X2NoaWxkKGNsKSkgewotCQluZXdfcSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLAotCQkJCQkJY2wtPnBhcmVudC0+Y2xhc3NpZCk7CisJCW5ld19xID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAorCQkJCQkgICZwZmlmb19xZGlzY19vcHMsCisJCQkJCSAgY2wtPnBhcmVudC0+Y29tbW9uLmNsYXNzaWQpOwogCQlsYXN0X2NoaWxkID0gMTsKIAl9CiAKQEAgLTEzMDUsMTEgKzEyNzQsMTUgQEAKIAl9CiAKIAkvKiBkZWxldGUgZnJvbSBoYXNoIGFuZCBhY3RpdmU7IHJlbWFpbmRlciBpbiBkZXN0cm95X2NsYXNzICovCi0JaGxpc3RfZGVsX2luaXQoJmNsLT5obGlzdCk7CisJcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoJnEtPmNsaGFzaCwgJmNsLT5jb21tb24pOworCWNsLT5wYXJlbnQtPmNoaWxkcmVuLS07CiAKIAlpZiAoY2wtPnByaW9fYWN0aXZpdHkpCiAJCWh0Yl9kZWFjdGl2YXRlKHEsIGNsKTsKIAorCWlmIChjbC0+Y21vZGUgIT0gSFRCX0NBTl9TRU5EKQorCQlodGJfc2FmZV9yYl9lcmFzZSgmY2wtPnBxX25vZGUsIHEtPndhaXRfcHEgKyBjbC0+bGV2ZWwpOworCiAJaWYgKGxhc3RfY2hpbGQpCiAJCWh0Yl9wYXJlbnRfdG9fbGVhZihxLCBjbCwgbmV3X3EpOwogCkBAIC0xMzk0LDEyICsxMzY3LDEwIEBACiAJCQlnb3RvIGZhaWx1cmU7CiAKIAkJZ2VuX25ld19lc3RpbWF0b3IoJmNsLT5ic3RhdHMsICZjbC0+cmF0ZV9lc3QsCi0JCQkJICAmc2NoLT5kZXYtPnF1ZXVlX2xvY2ssCisJCQkJICBxZGlzY19yb290X2xvY2soc2NoKSwKIAkJCQkgIHRjYVtUQ0FfUkFURV0gPyA6ICZlc3QubmxhKTsKIAkJY2wtPnJlZmNudCA9IDE7Ci0JCUlOSVRfTElTVF9IRUFEKCZjbC0+c2libGluZyk7Ci0JCUlOSVRfSExJU1RfTk9ERSgmY2wtPmhsaXN0KTsKLQkJSU5JVF9MSVNUX0hFQUQoJmNsLT5jaGlsZHJlbik7CisJCWNsLT5jaGlsZHJlbiA9IDA7CiAJCUlOSVRfTElTVF9IRUFEKCZjbC0+dW4ubGVhZi5kcm9wX2xpc3QpOwogCQlSQl9DTEVBUl9OT0RFKCZjbC0+cHFfbm9kZSk7CiAKQEAgLTE0MDksNyArMTM4MCw4IEBACiAJCS8qIGNyZWF0ZSBsZWFmIHFkaXNjIGVhcmx5IGJlY2F1c2UgaXQgdXNlcyBrbWFsbG9jKEdGUF9LRVJORUwpCiAJCSAgIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCBpbnNpZGUgb2Ygc2NoX3RyZWVfbG9jawogCQkgICAtLSB0aGFua3MgdG8gS2FybGlzIFBlaXNlbmlla3MgKi8KLQkJbmV3X3EgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcywgY2xhc3NpZCk7CisJCW5ld19xID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAorCQkJCQkgICZwZmlmb19xZGlzY19vcHMsIGNsYXNzaWQpOwogCQlzY2hfdHJlZV9sb2NrKHNjaCk7CiAJCWlmIChwYXJlbnQgJiYgIXBhcmVudC0+bGV2ZWwpIHsKIAkJCXVuc2lnbmVkIGludCBxbGVuID0gcGFyZW50LT51bi5sZWFmLnEtPnEucWxlbjsKQEAgLTE0MzMsNyArMTQwNSw3IEBACiAJCS8qIGxlYWYgKHdlKSBuZWVkcyBlbGVtZW50YXJ5IHFkaXNjICovCiAJCWNsLT51bi5sZWFmLnEgPSBuZXdfcSA/IG5ld19xIDogJm5vb3BfcWRpc2M7CiAKLQkJY2wtPmNsYXNzaWQgPSBjbGFzc2lkOworCQljbC0+Y29tbW9uLmNsYXNzaWQgPSBjbGFzc2lkOwogCQljbC0+cGFyZW50ID0gcGFyZW50OwogCiAJCS8qIHNldCBjbGFzcyB0byBiZSBpbiBIVEJfQ0FOX1NFTkQgc3RhdGUgKi8KQEAgLTE0NDQsMTMgKzE0MTYsMTMgQEAKIAkJY2wtPmNtb2RlID0gSFRCX0NBTl9TRU5EOwogCiAJCS8qIGF0dGFjaCB0byB0aGUgaGFzaCBsaXN0IGFuZCBwYXJlbnQncyBmYW1pbHkgKi8KLQkJaGxpc3RfYWRkX2hlYWQoJmNsLT5obGlzdCwgcS0+aGFzaCArIGh0Yl9oYXNoKGNsYXNzaWQpKTsKLQkJbGlzdF9hZGRfdGFpbCgmY2wtPnNpYmxpbmcsCi0JCQkgICAgICBwYXJlbnQgPyAmcGFyZW50LT5jaGlsZHJlbiA6ICZxLT5yb290KTsKKwkJcWRpc2NfY2xhc3NfaGFzaF9pbnNlcnQoJnEtPmNsaGFzaCwgJmNsLT5jb21tb24pOworCQlpZiAocGFyZW50KQorCQkJcGFyZW50LT5jaGlsZHJlbisrOwogCX0gZWxzZSB7CiAJCWlmICh0Y2FbVENBX1JBVEVdKQogCQkJZ2VuX3JlcGxhY2VfZXN0aW1hdG9yKCZjbC0+YnN0YXRzLCAmY2wtPnJhdGVfZXN0LAotCQkJCQkgICAgICAmc2NoLT5kZXYtPnF1ZXVlX2xvY2ssCisJCQkJCSAgICAgIHFkaXNjX3Jvb3RfbG9jayhzY2gpLAogCQkJCQkgICAgICB0Y2FbVENBX1JBVEVdKTsKIAkJc2NoX3RyZWVfbG9jayhzY2gpOwogCX0KQEAgLTE0NjIsMTMgKzE0MzQsMTMgQEAKIAkJaWYgKCFob3B0LT5xdWFudHVtICYmIGNsLT51bi5sZWFmLnF1YW50dW0gPCAxMDAwKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIkhUQjogcXVhbnR1bSBvZiBjbGFzcyAlWCBpcyBzbWFsbC4gQ29uc2lkZXIgcjJxIGNoYW5nZS5cbiIsCi0JCQkgICAgICAgY2wtPmNsYXNzaWQpOworCQkJICAgICAgIGNsLT5jb21tb24uY2xhc3NpZCk7CiAJCQljbC0+dW4ubGVhZi5xdWFudHVtID0gMTAwMDsKIAkJfQogCQlpZiAoIWhvcHQtPnF1YW50dW0gJiYgY2wtPnVuLmxlYWYucXVhbnR1bSA+IDIwMDAwMCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICJIVEI6IHF1YW50dW0gb2YgY2xhc3MgJVggaXMgYmlnLiBDb25zaWRlciByMnEgY2hhbmdlLlxuIiwKLQkJCSAgICAgICBjbC0+Y2xhc3NpZCk7CisJCQkgICAgICAgY2wtPmNvbW1vbi5jbGFzc2lkKTsKIAkJCWNsLT51bi5sZWFmLnF1YW50dW0gPSAyMDAwMDA7CiAJCX0KIAkJaWYgKGhvcHQtPnF1YW50dW0pCkBAIC0xNDkxLDYgKzE0NjMsOCBAQAogCWNsLT5jZWlsID0gY3RhYjsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAorCXFkaXNjX2NsYXNzX2hhc2hfZ3JvdyhzY2gsICZxLT5jbGhhc2gpOworCiAJKmFyZyA9ICh1bnNpZ25lZCBsb25nKWNsOwogCXJldHVybiAwOwogCkBAIC0xNTE0LDcgKzE0ODgsNiBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgaHRiX2JpbmRfZmlsdGVyKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIHBhcmVudCwKIAkJCQkgICAgIHUzMiBjbGFzc2lkKQogewotCXN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJc3RydWN0IGh0Yl9jbGFzcyAqY2wgPSBodGJfZmluZChjbGFzc2lkLCBzY2gpOwogCiAJLyppZiAoY2wgJiYgIWNsLT5sZXZlbCkgcmV0dXJuIDA7CkBAIC0xNTI4LDM1ICsxNTAxLDI5IEBACiAJICovCiAJaWYgKGNsKQogCQljbC0+ZmlsdGVyX2NudCsrOwotCWVsc2UKLQkJcS0+ZmlsdGVyX2NudCsrOwogCXJldHVybiAodW5zaWduZWQgbG9uZyljbDsKIH0KIAogc3RhdGljIHZvaWQgaHRiX3VuYmluZF9maWx0ZXIoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJc3RydWN0IGh0Yl9jbGFzcyAqY2wgPSAoc3RydWN0IGh0Yl9jbGFzcyAqKWFyZzsKIAogCWlmIChjbCkKIAkJY2wtPmZpbHRlcl9jbnQtLTsKLQllbHNlCi0JCXEtPmZpbHRlcl9jbnQtLTsKIH0KIAogc3RhdGljIHZvaWQgaHRiX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKmFyZykKIHsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwotCWludCBpOworCXN0cnVjdCBodGJfY2xhc3MgKmNsOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKGFyZy0+c3RvcCkKIAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IEhUQl9IU0laRTsgaSsrKSB7Ci0JCXN0cnVjdCBobGlzdF9ub2RlICpwOwotCQlzdHJ1Y3QgaHRiX2NsYXNzICpjbDsKLQotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjbCwgcCwgcS0+aGFzaCArIGksIGhsaXN0KSB7CisJZm9yIChpID0gMDsgaSA8IHEtPmNsaGFzaC5oYXNoc2l6ZTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsLCBuLCAmcS0+Y2xoYXNoLmhhc2hbaV0sIGNvbW1vbi5obm9kZSkgewogCQkJaWYgKGFyZy0+Y291bnQgPCBhcmctPnNraXApIHsKIAkJCQlhcmctPmNvdW50Kys7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2luZ3Jlc3MuYyBiL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jCmluZGV4IDk1NmM4MGEuLjRhMmI3NzMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJcmVzdWx0ID0gdGNfY2xhc3NpZnkoc2tiLCBwLT5maWx0ZXJfbGlzdCwgJnJlcyk7CiAKIAlzY2gtPmJzdGF0cy5wYWNrZXRzKys7Ci0Jc2NoLT5ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwogCXN3aXRjaCAocmVzdWx0KSB7CiAJY2FzZSBUQ19BQ1RfU0hPVDoKIAkJcmVzdWx0ID0gVENfQUNUX1NIT1Q7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKaW5kZXggYzljNjQ5Yi4uYTU5MDg1NyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwpAQCAtODIsNiArODIsMTMgQEAKIAlwc2NoZWRfdGltZV90CXRpbWVfdG9fc2VuZDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldGVtX3NrYl9jYiAqbmV0ZW1fc2tiX2NiKHN0cnVjdCBza19idWZmICpza2IpCit7CisJQlVJTERfQlVHX09OKHNpemVvZihza2ItPmNiKSA8CisJCXNpemVvZihzdHJ1Y3QgcWRpc2Nfc2tiX2NiKSArIHNpemVvZihzdHJ1Y3QgbmV0ZW1fc2tiX2NiKSk7CisJcmV0dXJuIChzdHJ1Y3QgbmV0ZW1fc2tiX2NiICopcWRpc2Nfc2tiX2NiKHNrYiktPmRhdGE7Cit9CisKIC8qIGluaXRfY3JhbmRvbSAtIGluaXRpYWxpemUgY29ycmVsYXRlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgogICogVXNlIGVudHJvcHkgc291cmNlIGZvciBpbml0aWFsIHNlZWQuCiAgKi8KQEAgLTE4MCwxMSArMTg3LDExIEBACiAJICogc2tiIHdpbGwgYmUgcXVldWVkLgogCSAqLwogCWlmIChjb3VudCA+IDEgJiYgKHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKSkgIT0gTlVMTCkgewotCQlzdHJ1Y3QgUWRpc2MgKnJvb3RxID0gc2NoLT5kZXYtPnFkaXNjOworCQlzdHJ1Y3QgUWRpc2MgKnJvb3RxID0gcWRpc2Nfcm9vdChzY2gpOwogCQl1MzIgZHVwc2F2ZSA9IHEtPmR1cGxpY2F0ZTsgLyogcHJldmVudCBkdXBsaWNhdGluZyBhIGR1cC4uLiAqLwogCQlxLT5kdXBsaWNhdGUgPSAwOwogCi0JCXJvb3RxLT5lbnF1ZXVlKHNrYjIsIHJvb3RxKTsKKwkJcWRpc2NfZW5xdWV1ZV9yb290KHNrYjIsIHJvb3RxKTsKIAkJcS0+ZHVwbGljYXRlID0gZHVwc2F2ZTsKIAl9CiAKQEAgLTIwNSw3ICsyMTIsNyBAQAogCQlza2ItPmRhdGFbbmV0X3JhbmRvbSgpICUgc2tiX2hlYWRsZW4oc2tiKV0gXj0gMTw8KG5ldF9yYW5kb20oKSAlIDgpOwogCX0KIAotCWNiID0gKHN0cnVjdCBuZXRlbV9za2JfY2IgKilza2ItPmNiOworCWNiID0gbmV0ZW1fc2tiX2NiKHNrYik7CiAJaWYgKHEtPmdhcCA9PSAwIAkJLyogbm90IGRvaW5nIHJlb3JkZXJpbmcgKi8KIAkgICAgfHwgcS0+Y291bnRlciA8IHEtPmdhcCAJLyogaW5zaWRlIGxhc3QgcmVvcmRlcmluZyBnYXAgKi8KIAkgICAgfHwgcS0+cmVvcmRlciA8IGdldF9jcmFuZG9tKCZxLT5yZW9yZGVyX2NvcikpIHsKQEAgLTIxOCw3ICsyMjUsNyBAQAogCQlub3cgPSBwc2NoZWRfZ2V0X3RpbWUoKTsKIAkJY2ItPnRpbWVfdG9fc2VuZCA9IG5vdyArIGRlbGF5OwogCQkrK3EtPmNvdW50ZXI7Ci0JCXJldCA9IHEtPnFkaXNjLT5lbnF1ZXVlKHNrYiwgcS0+cWRpc2MpOworCQlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgcS0+cWRpc2MpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIERvIHJlLW9yZGVyaW5nIGJ5IHB1dHRpbmcgb25lIG91dCBvZiBOIHBhY2tldHMgYXQgdGhlIGZyb250CkBAIC0yMzEsNyArMjM4LDcgQEAKIAogCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CiAJCXNjaC0+cS5xbGVuKys7Ci0JCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHNrYi0+bGVuOworCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKIAl9IGVsc2UKIAkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKQEAgLTI3Nyw4ICsyODQsNyBAQAogCiAJc2tiID0gcS0+cWRpc2MtPmRlcXVldWUocS0+cWRpc2MpOwogCWlmIChza2IpIHsKLQkJY29uc3Qgc3RydWN0IG5ldGVtX3NrYl9jYiAqY2IKLQkJCT0gKGNvbnN0IHN0cnVjdCBuZXRlbV9za2JfY2IgKilza2ItPmNiOworCQljb25zdCBzdHJ1Y3QgbmV0ZW1fc2tiX2NiICpjYiA9IG5ldGVtX3NrYl9jYihza2IpOwogCQlwc2NoZWRfdGltZV90IG5vdyA9IHBzY2hlZF9nZXRfdGltZSgpOwogCiAJCS8qIGlmIG1vcmUgdGltZSByZW1haW5pbmc/ICovCkBAIC0zMTAsMjggKzMxNiw2IEBACiAJcWRpc2Nfd2F0Y2hkb2dfY2FuY2VsKCZxLT53YXRjaGRvZyk7CiB9CiAKLS8qIFBhc3Mgc2l6ZSBjaGFuZ2UgbWVzc2FnZSBkb3duIHRvIGVtYmVkZGVkIEZJRk8gKi8KLXN0YXRpYyBpbnQgc2V0X2ZpZm9fbGltaXQoc3RydWN0IFFkaXNjICpxLCBpbnQgbGltaXQpCi17Ci0Jc3RydWN0IG5sYXR0ciAqbmxhOwotCWludCByZXQgPSAtRU5PTUVNOwotCi0JLyogSGFjayB0byBhdm9pZCBzZW5kaW5nIGNoYW5nZSBtZXNzYWdlIHRvIG5vbi1GSUZPICovCi0JaWYgKHN0cm5jbXAocS0+b3BzLT5pZCArIDEsICJmaWZvIiwgNCkgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlubGEgPSBrbWFsbG9jKG5sYV9hdHRyX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19maWZvX3FvcHQpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG5sYSkgewotCQlubGEtPm5sYV90eXBlID0gUlRNX05FV1FESVNDOwotCQlubGEtPm5sYV9sZW4gPSBubGFfYXR0cl9zaXplKHNpemVvZihzdHJ1Y3QgdGNfZmlmb19xb3B0KSk7Ci0JCSgoc3RydWN0IHRjX2ZpZm9fcW9wdCAqKW5sYV9kYXRhKG5sYSkpLT5saW1pdCA9IGxpbWl0OwotCi0JCXJldCA9IHEtPm9wcy0+Y2hhbmdlKHEsIG5sYSk7Ci0JCWtmcmVlKG5sYSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBEaXN0cmlidXRpb24gZGF0YSBpcyBhIHZhcmlhYmxlIHNpemUgcGF5bG9hZCBjb250YWluaW5nCiAgKiBzaWduZWQgMTYgYml0IHZhbHVlcy4KQEAgLTM0MSw2ICszMjUsNyBAQAogCXN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXVuc2lnbmVkIGxvbmcgbiA9IG5sYV9sZW4oYXR0cikvc2l6ZW9mKF9fczE2KTsKIAljb25zdCBfX3MxNiAqZGF0YSA9IG5sYV9kYXRhKGF0dHIpOworCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKIAlzdHJ1Y3QgZGlzdHRhYmxlICpkOwogCWludCBpOwogCkBAIC0zNTUsOSArMzQwLDExIEBACiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykKIAkJZC0+dGFibGVbaV0gPSBkYXRhW2ldOwogCi0Jc3Bpbl9sb2NrX2JoKCZzY2gtPmRldi0+cXVldWVfbG9jayk7CisJcm9vdF9sb2NrID0gcWRpc2Nfcm9vdF9sb2NrKHNjaCk7CisKKwlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKIAlkID0geGNoZygmcS0+ZGVsYXlfZGlzdCwgZCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnNjaC0+ZGV2LT5xdWV1ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaChyb290X2xvY2spOwogCiAJa2ZyZWUoZCk7CiAJcmV0dXJuIDA7CkBAIC00MTYsNyArNDAzLDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNldF9maWZvX2xpbWl0KHEtPnFkaXNjLCBxb3B0LT5saW1pdCk7CisJcmV0ID0gZmlmb19zZXRfbGltaXQocS0+cWRpc2MsIHFvcHQtPmxpbWl0KTsKIAlpZiAocmV0KSB7CiAJCXByX2RlYnVnKCJuZXRlbTogY2FuJ3Qgc2V0IGZpZm8gbGltaXRcbiIpOwogCQlyZXR1cm4gcmV0OwpAQCAtNDc2LDcgKzQ2Myw3IEBACiB7CiAJc3RydWN0IGZpZm9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0ID0gJnNjaC0+cTsKLQlwc2NoZWRfdGltZV90IHRuZXh0ID0gKChzdHJ1Y3QgbmV0ZW1fc2tiX2NiICopbnNrYi0+Y2IpLT50aW1lX3RvX3NlbmQ7CisJcHNjaGVkX3RpbWVfdCB0bmV4dCA9IG5ldGVtX3NrYl9jYihuc2tiKS0+dGltZV90b19zZW5kOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZiAobGlrZWx5KHNrYl9xdWV1ZV9sZW4obGlzdCkgPCBxLT5saW1pdCkpIHsKQEAgLTQ4Nyw4ICs0NzQsNyBAQAogCQl9CiAKIAkJc2tiX3F1ZXVlX3JldmVyc2Vfd2FsayhsaXN0LCBza2IpIHsKLQkJCWNvbnN0IHN0cnVjdCBuZXRlbV9za2JfY2IgKmNiCi0JCQkJPSAoY29uc3Qgc3RydWN0IG5ldGVtX3NrYl9jYiAqKXNrYi0+Y2I7CisJCQljb25zdCBzdHJ1Y3QgbmV0ZW1fc2tiX2NiICpjYiA9IG5ldGVtX3NrYl9jYihza2IpOwogCiAJCQlpZiAodG5leHQgPj0gY2ItPnRpbWVfdG9fc2VuZCkKIAkJCQlicmVhazsKQEAgLTQ5Niw4ICs0ODIsOCBAQAogCiAJCV9fc2tiX3F1ZXVlX2FmdGVyKGxpc3QsIHNrYiwgbnNrYik7CiAKLQkJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBuc2tiLT5sZW47Ci0JCXNjaC0+YnN0YXRzLmJ5dGVzICs9IG5za2ItPmxlbjsKKwkJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKG5za2IpOworCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKG5za2IpOwogCQlzY2gtPmJzdGF0cy5wYWNrZXRzKys7CiAKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CkBAIC01MTcsNyArNTAzLDcgQEAKIAogCQlxLT5saW1pdCA9IGN0bC0+bGltaXQ7CiAJfSBlbHNlCi0JCXEtPmxpbWl0ID0gbWF4X3QodTMyLCBzY2gtPmRldi0+dHhfcXVldWVfbGVuLCAxKTsKKwkJcS0+bGltaXQgPSBtYXhfdCh1MzIsIHFkaXNjX2RldihzY2gpLT50eF9xdWV1ZV9sZW4sIDEpOwogCiAJcS0+b2xkZXN0ID0gUFNDSEVEX1BBU1RQRVJGRUNUOwogCXJldHVybiAwOwpAQCAtNTU4LDcgKzU0NCw4IEBACiAKIAlxZGlzY193YXRjaGRvZ19pbml0KCZxLT53YXRjaGRvZywgc2NoKTsKIAotCXEtPnFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZ0Zmlmb19xZGlzY19vcHMsCisJcS0+cWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChxZGlzY19kZXYoc2NoKSwgc2NoLT5kZXZfcXVldWUsCisJCQkJICAgICAmdGZpZm9fcWRpc2Nfb3BzLAogCQkJCSAgICAgVENfSF9NQUtFKHNjaC0+aGFuZGxlLCAxKSk7CiAJaWYgKCFxLT5xZGlzYykgewogCQlwcl9kZWJ1ZygibmV0ZW06IHFkaXNjIGNyZWF0ZSBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwppbmRleCA1NTMyZjEwLi5mODQ5MjQzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3ByaW8uYworKysgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwpAQCAtMjQsMTEgKzI0LDkgQEAKIHN0cnVjdCBwcmlvX3NjaGVkX2RhdGEKIHsKIAlpbnQgYmFuZHM7Ci0JaW50IGN1cmJhbmQ7IC8qIGZvciByb3VuZC1yb2JpbiAqLwogCXN0cnVjdCB0Y2ZfcHJvdG8gKmZpbHRlcl9saXN0OwogCXU4ICBwcmlvMmJhbmRbVENfUFJJT19NQVgrMV07CiAJc3RydWN0IFFkaXNjICpxdWV1ZXNbVENRX1BSSU9fQkFORFNdOwotCWludCBtcTsKIH07CiAKIApAQCAtNTUsMTcgKzUzLDE0IEBACiAJCWlmICghcS0+ZmlsdGVyX2xpc3QgfHwgZXJyIDwgMCkgewogCQkJaWYgKFRDX0hfTUFKKGJhbmQpKQogCQkJCWJhbmQgPSAwOwotCQkJYmFuZCA9IHEtPnByaW8yYmFuZFtiYW5kJlRDX1BSSU9fTUFYXTsKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIHEtPnF1ZXVlc1txLT5wcmlvMmJhbmRbYmFuZCZUQ19QUklPX01BWF1dOwogCQl9CiAJCWJhbmQgPSByZXMuY2xhc3NpZDsKIAl9CiAJYmFuZCA9IFRDX0hfTUlOKGJhbmQpIC0gMTsKIAlpZiAoYmFuZCA+PSBxLT5iYW5kcykKLQkJYmFuZCA9IHEtPnByaW8yYmFuZFswXTsKLW91dDoKLQlpZiAocS0+bXEpCi0JCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIGJhbmQpOworCQlyZXR1cm4gcS0+cXVldWVzW3EtPnByaW8yYmFuZFswXV07CisKIAlyZXR1cm4gcS0+cXVldWVzW2JhbmRdOwogfQogCkBAIC04Niw4ICs4MSw5IEBACiAJfQogI2VuZGlmCiAKLQlpZiAoKHJldCA9IHFkaXNjLT5lbnF1ZXVlKHNrYiwgcWRpc2MpKSA9PSBORVRfWE1JVF9TVUNDRVNTKSB7Ci0JCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHNrYi0+bGVuOworCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBxZGlzYyk7CisJaWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7CisJCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAkJc2NoLT5ic3RhdHMucGFja2V0cysrOwogCQlzY2gtPnEucWxlbisrOwogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKQEAgLTEyMyw2NyArMTE5LDIzIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBza19idWZmICoKLXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MqIHNjaCkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyogc2NoKQogewotCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHByaW9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlpbnQgcHJpbzsKLQlzdHJ1Y3QgUWRpc2MgKnFkaXNjOwogCiAJZm9yIChwcmlvID0gMDsgcHJpbyA8IHEtPmJhbmRzOyBwcmlvKyspIHsKLQkJLyogQ2hlY2sgaWYgdGhlIHRhcmdldCBzdWJxdWV1ZSBpcyBhdmFpbGFibGUgYmVmb3JlCi0JCSAqIHB1bGxpbmcgYW4gc2tiLiAgVGhpcyB3YXkgd2UgYXZvaWQgZXhjZXNzaXZlIHJlcXVldWVzCi0JCSAqIGZvciBzbG93ZXIgcXVldWVzLgotCQkgKi8KLQkJaWYgKCFfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoc2NoLT5kZXYsIChxLT5tcSA/IHByaW8gOiAwKSkpIHsKLQkJCXFkaXNjID0gcS0+cXVldWVzW3ByaW9dOwotCQkJc2tiID0gcWRpc2MtPmRlcXVldWUocWRpc2MpOwotCQkJaWYgKHNrYikgewotCQkJCXNjaC0+cS5xbGVuLS07Ci0JCQkJcmV0dXJuIHNrYjsKLQkJCX0KKwkJc3RydWN0IFFkaXNjICpxZGlzYyA9IHEtPnF1ZXVlc1twcmlvXTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKKwkJaWYgKHNrYikgeworCQkJc2NoLT5xLnFsZW4tLTsKKwkJCXJldHVybiBza2I7CiAJCX0KIAl9CiAJcmV0dXJuIE5VTEw7CiAKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpycl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyogc2NoKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHByaW9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKLQlzdHJ1Y3QgUWRpc2MgKnFkaXNjOwotCWludCBiYW5kY291bnQ7Ci0KLQkvKiBPbmx5IHRha2Ugb25lIHBhc3MgdGhyb3VnaCB0aGUgcXVldWVzLiAgSWYgbm90aGluZyBpcyBhdmFpbGFibGUsCi0JICogcmV0dXJuIG5vdGhpbmcuCi0JICovCi0JZm9yIChiYW5kY291bnQgPSAwOyBiYW5kY291bnQgPCBxLT5iYW5kczsgYmFuZGNvdW50KyspIHsKLQkJLyogQ2hlY2sgaWYgdGhlIHRhcmdldCBzdWJxdWV1ZSBpcyBhdmFpbGFibGUgYmVmb3JlCi0JCSAqIHB1bGxpbmcgYW4gc2tiLiAgVGhpcyB3YXkgd2UgYXZvaWQgZXhjZXNzaXZlIHJlcXVldWVzCi0JCSAqIGZvciBzbG93ZXIgcXVldWVzLiAgSWYgdGhlIHF1ZXVlIGlzIHN0b3BwZWQsIHRyeSB0aGUKLQkJICogbmV4dCBxdWV1ZS4KLQkJICovCi0JCWlmICghX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKHNjaC0+ZGV2LAotCQkJCQkgICAgKHEtPm1xID8gcS0+Y3VyYmFuZCA6IDApKSkgewotCQkJcWRpc2MgPSBxLT5xdWV1ZXNbcS0+Y3VyYmFuZF07Ci0JCQlza2IgPSBxZGlzYy0+ZGVxdWV1ZShxZGlzYyk7Ci0JCQlpZiAoc2tiKSB7Ci0JCQkJc2NoLT5xLnFsZW4tLTsKLQkJCQlxLT5jdXJiYW5kKys7Ci0JCQkJaWYgKHEtPmN1cmJhbmQgPj0gcS0+YmFuZHMpCi0JCQkJCXEtPmN1cmJhbmQgPSAwOwotCQkJCXJldHVybiBza2I7Ci0JCQl9Ci0JCX0KLQkJcS0+Y3VyYmFuZCsrOwotCQlpZiAocS0+Y3VyYmFuZCA+PSBxLT5iYW5kcykKLQkJCXEtPmN1cmJhbmQgPSAwOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBwcmlvX2Ryb3Aoc3RydWN0IFFkaXNjKiBzY2gpCiB7CiAJc3RydWN0IHByaW9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKQEAgLTIyOCw0NSArMTgwLDIyIEBACiB7CiAJc3RydWN0IHByaW9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlzdHJ1Y3QgdGNfcHJpb19xb3B0ICpxb3B0OwotCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9QUklPX01BWCArIDFdOwotCWludCBlcnI7CiAJaW50IGk7CiAKLQllcnIgPSBubGFfcGFyc2VfbmVzdGVkX2NvbXBhdCh0YiwgVENBX1BSSU9fTUFYLCBvcHQsIE5VTEwsIHFvcHQsCi0JCQkJICAgICAgc2l6ZW9mKCpxb3B0KSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJaWYgKG5sYV9sZW4ob3B0KSA8IHNpemVvZigqcW9wdCkpCisJCXJldHVybiAtRUlOVkFMOworCXFvcHQgPSBubGFfZGF0YShvcHQpOwogCi0JcS0+YmFuZHMgPSBxb3B0LT5iYW5kczsKLQkvKiBJZiB3ZSdyZSBtdWx0aXF1ZXVlLCBtYWtlIHN1cmUgdGhlIG51bWJlciBvZiBpbmNvbWluZyBiYW5kcwotCSAqIG1hdGNoZXMgdGhlIG51bWJlciBvZiBxdWV1ZXMgb24gdGhlIGRldmljZSB3ZSdyZSBhc3NvY2lhdGluZyB3aXRoLgotCSAqIElmIHRoZSBudW1iZXIgb2YgYmFuZHMgcmVxdWVzdGVkIGlzIHplcm8sIHRoZW4gc2V0IHEtPmJhbmRzIHRvCi0JICogZGV2LT5lZ3Jlc3Nfc3VicXVldWVfY291bnQuICBBbHNvLCB0aGUgcm9vdCBxZGlzYyBtdXN0IGJlIHRoZQotCSAqIG9ubHkgb25lIHRoYXQgaXMgZW5hYmxlZCBmb3IgbXVsdGlxdWV1ZSwgc2luY2UgaXQncyB0aGUgb25seSBvbmUKLQkgKiB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRldmljZS4KLQkgKi8KLQlxLT5tcSA9IG5sYV9nZXRfZmxhZyh0YltUQ0FfUFJJT19NUV0pOwotCWlmIChxLT5tcSkgewotCQlpZiAoc2NoLT5wYXJlbnQgIT0gVENfSF9ST09UKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChuZXRpZl9pc19tdWx0aXF1ZXVlKHNjaC0+ZGV2KSkgewotCQkJaWYgKHEtPmJhbmRzID09IDApCi0JCQkJcS0+YmFuZHMgPSBzY2gtPmRldi0+ZWdyZXNzX3N1YnF1ZXVlX2NvdW50OwotCQkJZWxzZSBpZiAocS0+YmFuZHMgIT0gc2NoLT5kZXYtPmVncmVzc19zdWJxdWV1ZV9jb3VudCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JaWYgKHEtPmJhbmRzID4gVENRX1BSSU9fQkFORFMgfHwgcS0+YmFuZHMgPCAyKQorCWlmIChxb3B0LT5iYW5kcyA+IFRDUV9QUklPX0JBTkRTIHx8IHFvcHQtPmJhbmRzIDwgMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmb3IgKGk9MDsgaTw9VENfUFJJT19NQVg7IGkrKykgewotCQlpZiAocW9wdC0+cHJpb21hcFtpXSA+PSBxLT5iYW5kcykKKwkJaWYgKHFvcHQtPnByaW9tYXBbaV0gPj0gcW9wdC0+YmFuZHMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlzY2hfdHJlZV9sb2NrKHNjaCk7CisJcS0+YmFuZHMgPSBxb3B0LT5iYW5kczsKIAltZW1jcHkocS0+cHJpbzJiYW5kLCBxb3B0LT5wcmlvbWFwLCBUQ19QUklPX01BWCsxKTsKIAogCWZvciAoaT1xLT5iYW5kczsgaTxUQ1FfUFJJT19CQU5EUzsgaSsrKSB7CkBAIC0yODEsNyArMjEwLDggQEAKIAlmb3IgKGk9MDsgaTxxLT5iYW5kczsgaSsrKSB7CiAJCWlmIChxLT5xdWV1ZXNbaV0gPT0gJm5vb3BfcWRpc2MpIHsKIAkJCXN0cnVjdCBRZGlzYyAqY2hpbGQ7Ci0JCQljaGlsZCA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLAorCQkJY2hpbGQgPSBxZGlzY19jcmVhdGVfZGZsdChxZGlzY19kZXYoc2NoKSwgc2NoLT5kZXZfcXVldWUsCisJCQkJCQkgICZwZmlmb19xZGlzY19vcHMsCiAJCQkJCQkgIFRDX0hfTUFLRShzY2gtPmhhbmRsZSwgaSArIDEpKTsKIAkJCWlmIChjaGlsZCkgewogCQkJCXNjaF90cmVlX2xvY2soc2NoKTsKQEAgLTMzMSwxMCArMjYxLDYgQEAKIAluZXN0ID0gbmxhX25lc3RfY29tcGF0X3N0YXJ0KHNrYiwgVENBX09QVElPTlMsIHNpemVvZihvcHQpLCAmb3B0KTsKIAlpZiAobmVzdCA9PSBOVUxMKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAocS0+bXEpIHsKLQkJaWYgKG5sYV9wdXRfZmxhZyhza2IsIFRDQV9QUklPX01RKSA8IDApCi0JCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQl9CiAJbmxhX25lc3RfY29tcGF0X2VuZChza2IsIG5lc3QpOwogCiAJcmV0dXJuIHNrYi0+bGVuOwpAQCAtNTA3LDQ0ICs0MzMsMTcgQEAKIAkub3duZXIJCT0JVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBycl9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHsKLQkubmV4dAkJPQlOVUxMLAotCS5jbF9vcHMJCT0JJnByaW9fY2xhc3Nfb3BzLAotCS5pZAkJPQkicnIiLAotCS5wcml2X3NpemUJPQlzaXplb2Yoc3RydWN0IHByaW9fc2NoZWRfZGF0YSksCi0JLmVucXVldWUJPQlwcmlvX2VucXVldWUsCi0JLmRlcXVldWUJPQlycl9kZXF1ZXVlLAotCS5yZXF1ZXVlCT0JcHJpb19yZXF1ZXVlLAotCS5kcm9wCQk9CXByaW9fZHJvcCwKLQkuaW5pdAkJPQlwcmlvX2luaXQsCi0JLnJlc2V0CQk9CXByaW9fcmVzZXQsCi0JLmRlc3Ryb3kJPQlwcmlvX2Rlc3Ryb3ksCi0JLmNoYW5nZQkJPQlwcmlvX3R1bmUsCi0JLmR1bXAJCT0JcHJpb19kdW1wLAotCS5vd25lcgkJPQlUSElTX01PRFVMRSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHByaW9fbW9kdWxlX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gcmVnaXN0ZXJfcWRpc2MoJnByaW9fcWRpc2Nfb3BzKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSByZWdpc3Rlcl9xZGlzYygmcnJfcWRpc2Nfb3BzKTsKLQlpZiAoZXJyIDwgMCkKLQkJdW5yZWdpc3Rlcl9xZGlzYygmcHJpb19xZGlzY19vcHMpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIHJlZ2lzdGVyX3FkaXNjKCZwcmlvX3FkaXNjX29wcyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcmlvX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9xZGlzYygmcHJpb19xZGlzY19vcHMpOwotCXVucmVnaXN0ZXJfcWRpc2MoJnJyX3FkaXNjX29wcyk7CiB9CiAKIG1vZHVsZV9pbml0KHByaW9fbW9kdWxlX2luaXQpCiBtb2R1bGVfZXhpdChwcmlvX21vZHVsZV9leGl0KQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVMoInNjaF9yciIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9yZWQuYyBiL25ldC9zY2hlZC9zY2hfcmVkLmMKaW5kZXggNWM1Njk4NS4uM2YyZDFkNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9yZWQuYworKysgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCkBAIC05Miw5ICs5Miw5IEBACiAJCQlicmVhazsKIAl9CiAKLQlyZXQgPSBjaGlsZC0+ZW5xdWV1ZShza2IsIGNoaWxkKTsKKwlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2hpbGQpOwogCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7Ci0JCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHNrYi0+bGVuOworCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKIAkJc2NoLT5xLnFsZW4rKzsKIAl9IGVsc2UgewpAQCAtMTc0LDMzICsxNzQsNiBAQAogCXFkaXNjX2Rlc3Ryb3kocS0+cWRpc2MpOwogfQogCi1zdGF0aWMgc3RydWN0IFFkaXNjICpyZWRfY3JlYXRlX2RmbHQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsaW1pdCkKLXsKLQlzdHJ1Y3QgUWRpc2MgKnE7Ci0Jc3RydWN0IG5sYXR0ciAqbmxhOwotCWludCByZXQ7Ci0KLQlxID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZiZmlmb19xZGlzY19vcHMsCi0JCQkgICAgICBUQ19IX01BS0Uoc2NoLT5oYW5kbGUsIDEpKTsKLQlpZiAocSkgewotCQlubGEgPSBrbWFsbG9jKG5sYV9hdHRyX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19maWZvX3FvcHQpKSwKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCQlpZiAobmxhKSB7Ci0JCQlubGEtPm5sYV90eXBlID0gUlRNX05FV1FESVNDOwotCQkJbmxhLT5ubGFfbGVuID0gbmxhX2F0dHJfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2ZpZm9fcW9wdCkpOwotCQkJKChzdHJ1Y3QgdGNfZmlmb19xb3B0ICopbmxhX2RhdGEobmxhKSktPmxpbWl0ID0gbGltaXQ7Ci0KLQkJCXJldCA9IHEtPm9wcy0+Y2hhbmdlKHEsIG5sYSk7Ci0JCQlrZnJlZShubGEpOwotCi0JCQlpZiAocmV0ID09IDApCi0JCQkJcmV0dXJuIHE7Ci0JCX0KLQkJcWRpc2NfZGVzdHJveShxKTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSByZWRfcG9saWN5W1RDQV9SRURfTUFYICsgMV0gPSB7CiAJW1RDQV9SRURfUEFSTVNdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y19yZWRfcW9wdCkgfSwKIAlbVENBX1JFRF9TVEFCXQk9IHsgLmxlbiA9IFJFRF9TVEFCX1NJWkUgfSwKQEAgLTIyOCw5ICsyMDEsOSBAQAogCWN0bCA9IG5sYV9kYXRhKHRiW1RDQV9SRURfUEFSTVNdKTsKIAogCWlmIChjdGwtPmxpbWl0ID4gMCkgewotCQljaGlsZCA9IHJlZF9jcmVhdGVfZGZsdChzY2gsIGN0bC0+bGltaXQpOwotCQlpZiAoY2hpbGQgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOworCQljaGlsZCA9IGZpZm9fY3JlYXRlX2RmbHQoc2NoLCAmYmZpZm9fcWRpc2Nfb3BzLCBjdGwtPmxpbWl0KTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CiAJfQogCiAJc2NoX3RyZWVfbG9jayhzY2gpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZnEuYyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKaW5kZXggNmE5N2FmYi4uODU4OWRhNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuYworKysgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlpZiAoZCA+IDEpIHsKIAkJc2ZxX2luZGV4IHggPSBxLT5kZXBbZCArIFNGUV9ERVBUSF0ubmV4dDsKIAkJc2tiID0gcS0+cXNbeF0ucHJldjsKLQkJbGVuID0gc2tiLT5sZW47CisJCWxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAkJX19za2JfdW5saW5rKHNrYiwgJnEtPnFzW3hdKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXNmcV9kZWMocSwgeCk7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAkJcS0+bmV4dFtxLT50YWlsXSA9IHEtPm5leHRbZF07CiAJCXEtPmFsbG90W3EtPm5leHRbZF1dICs9IHEtPnF1YW50dW07CiAJCXNrYiA9IHEtPnFzW2RdLnByZXY7Ci0JCWxlbiA9IHNrYi0+bGVuOworCQlsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJCV9fc2tiX3VubGluayhza2IsICZxLT5xc1tkXSk7CiAJCWtmcmVlX3NrYihza2IpOwogCQlzZnFfZGVjKHEsIGQpOwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJaWYgKHEtPnFzW3hdLnFsZW4gPj0gcS0+bGltaXQpCiAJCXJldHVybiBxZGlzY19kcm9wKHNrYiwgc2NoKTsKIAotCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gc2tiLT5sZW47CisJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJX19za2JfcXVldWVfdGFpbCgmcS0+cXNbeF0sIHNrYik7CiAJc2ZxX2luYyhxLCB4KTsKIAlpZiAocS0+cXNbeF0ucWxlbiA9PSAxKSB7CQkvKiBUaGUgZmxvdyBpcyBuZXcgKi8KQEAgLTMyMCw3ICszMjAsNyBAQAogCQl9CiAJfQogCWlmICgrK3NjaC0+cS5xbGVuIDw9IHEtPmxpbWl0KSB7Ci0JCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHNrYi0+bGVuOworCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzUyLDcgKzM1Miw3IEBACiAJCXEtPmhhc2hbeF0gPSBoYXNoOwogCX0KIAotCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gc2tiLT5sZW47CisJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJX19za2JfcXVldWVfaGVhZCgmcS0+cXNbeF0sIHNrYik7CiAJLyogSWYgc2VsZWN0ZWQgcXVldWUgaGFzIGxlbmd0aCBxLT5saW1pdCsxLCB0aGlzIG1lYW5zIHRoYXQKIAkgKiBhbGwgYW5vdGhlciBxdWV1ZXMgYXJlIGVtcHR5IGFuZCB3ZSBkbyBzaW1wbGUgdGFpbCBkcm9wLgpAQCAtMzYzLDcgKzM2Myw3IEBACiAJCXNrYiA9IHEtPnFzW3hdLnByZXY7CiAJCV9fc2tiX3VubGluayhza2IsICZxLT5xc1t4XSk7CiAJCXNjaC0+cXN0YXRzLmRyb3BzKys7Ci0JCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gc2tiLT5sZW47CisJCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gcWRpc2NfcGt0X2xlbihza2IpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVF9YTUlUX0NOOwogCX0KQEAgLTQxMSw3ICs0MTEsNyBAQAogCXNrYiA9IF9fc2tiX2RlcXVldWUoJnEtPnFzW2FdKTsKIAlzZnFfZGVjKHEsIGEpOwogCXNjaC0+cS5xbGVuLS07Ci0Jc2NoLT5xc3RhdHMuYmFja2xvZyAtPSBza2ItPmxlbjsKKwlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAogCS8qIElzIHRoZSBzbG90IGVtcHR5PyAqLwogCWlmIChxLT5xc1thXS5xbGVuID09IDApIHsKQEAgLTQyMyw3ICs0MjMsNyBAQAogCQl9CiAJCXEtPm5leHRbcS0+dGFpbF0gPSBhOwogCQlxLT5hbGxvdFthXSArPSBxLT5xdWFudHVtOwotCX0gZWxzZSBpZiAoKHEtPmFsbG90W2FdIC09IHNrYi0+bGVuKSA8PSAwKSB7CisJfSBlbHNlIGlmICgocS0+YWxsb3RbYV0gLT0gcWRpc2NfcGt0X2xlbihza2IpKSA8PSAwKSB7CiAJCXEtPnRhaWwgPSBhOwogCQlhID0gcS0+bmV4dFthXTsKIAkJcS0+YWxsb3RbYV0gKz0gcS0+cXVhbnR1bTsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNjaF90cmVlX2xvY2soc2NoKTsKLQlxLT5xdWFudHVtID0gY3RsLT5xdWFudHVtID8gOiBwc2NoZWRfbXR1KHNjaC0+ZGV2KTsKKwlxLT5xdWFudHVtID0gY3RsLT5xdWFudHVtID8gOiBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTsKIAlxLT5wZXJ0dXJiX3BlcmlvZCA9IGN0bC0+cGVydHVyYl9wZXJpb2QgKiBIWjsKIAlpZiAoY3RsLT5saW1pdCkKIAkJcS0+bGltaXQgPSBtaW5fdCh1MzIsIGN0bC0+bGltaXQsIFNGUV9ERVBUSCAtIDEpOwpAQCAtNTAyLDcgKzUwMiw3IEBACiAJcS0+bWF4X2RlcHRoID0gMDsKIAlxLT50YWlsID0gU0ZRX0RFUFRIOwogCWlmIChvcHQgPT0gTlVMTCkgewotCQlxLT5xdWFudHVtID0gcHNjaGVkX210dShzY2gtPmRldik7CisJCXEtPnF1YW50dW0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTsKIAkJcS0+cGVydHVyYl9wZXJpb2QgPSAwOwogCQlxLT5wZXJ0dXJiYXRpb24gPSBuZXRfcmFuZG9tKCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IDBiN2Q3OGY1Li5iMjk2NjcyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RiZi5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCXN0cnVjdCB0YmZfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlpbnQgcmV0OwogCi0JaWYgKHNrYi0+bGVuID4gcS0+bWF4X3NpemUpIHsKKwlpZiAocWRpc2NfcGt0X2xlbihza2IpID4gcS0+bWF4X3NpemUpIHsKIAkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAkJaWYgKHNjaC0+cmVzaGFwZV9mYWlsID09IE5VTEwgfHwgc2NoLT5yZXNoYXBlX2ZhaWwoc2tiLCBzY2gpKQpAQCAtMTMzLDEzICsxMzMsMTQgQEAKIAkJcmV0dXJuIE5FVF9YTUlUX0RST1A7CiAJfQogCi0JaWYgKChyZXQgPSBxLT5xZGlzYy0+ZW5xdWV1ZShza2IsIHEtPnFkaXNjKSkgIT0gMCkgeworCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBxLT5xZGlzYyk7CisJaWYgKHJldCAhPSAwKSB7CiAJCXNjaC0+cXN0YXRzLmRyb3BzKys7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJc2NoLT5xLnFsZW4rKzsKLQlzY2gtPmJzdGF0cy5ieXRlcyArPSBza2ItPmxlbjsKKwlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CiAJc2NoLT5ic3RhdHMucGFja2V0cysrOwogCXJldHVybiAwOwogfQpAQCAtMTgwLDcgKzE4MSw3IEBACiAJCXBzY2hlZF90aW1lX3Qgbm93OwogCQlsb25nIHRva3M7CiAJCWxvbmcgcHRva3MgPSAwOwotCQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CisJCXVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CiAKIAkJbm93ID0gcHNjaGVkX2dldF90aW1lKCk7CiAJCXRva3MgPSBwc2NoZWRfdGRpZmZfYm91bmRlZChub3csIHEtPnRfYywgcS0+YnVmZmVyKTsKQEAgLTI0MiwzNCArMjQzLDYgQEAKIAlxZGlzY193YXRjaGRvZ19jYW5jZWwoJnEtPndhdGNoZG9nKTsKIH0KIAotc3RhdGljIHN0cnVjdCBRZGlzYyAqdGJmX2NyZWF0ZV9kZmx0X3FkaXNjKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgbGltaXQpCi17Ci0Jc3RydWN0IFFkaXNjICpxOwotCXN0cnVjdCBubGF0dHIgKm5sYTsKLQlpbnQgcmV0OwotCi0JcSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmYmZpZm9fcWRpc2Nfb3BzLAotCQkJICAgICAgVENfSF9NQUtFKHNjaC0+aGFuZGxlLCAxKSk7Ci0JaWYgKHEpIHsKLQkJbmxhID0ga21hbGxvYyhubGFfYXR0cl9zaXplKHNpemVvZihzdHJ1Y3QgdGNfZmlmb19xb3B0KSksCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKG5sYSkgewotCQkJbmxhLT5ubGFfdHlwZSA9IFJUTV9ORVdRRElTQzsKLQkJCW5sYS0+bmxhX2xlbiA9IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19maWZvX3FvcHQpKTsKLQkJCSgoc3RydWN0IHRjX2ZpZm9fcW9wdCAqKW5sYV9kYXRhKG5sYSkpLT5saW1pdCA9IGxpbWl0OwotCi0JCQlyZXQgPSBxLT5vcHMtPmNoYW5nZShxLCBubGEpOwotCQkJa2ZyZWUobmxhKTsKLQotCQkJaWYgKHJldCA9PSAwKQotCQkJCXJldHVybiBxOwotCQl9Ci0JCXFkaXNjX2Rlc3Ryb3kocSk7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0YmZfcG9saWN5W1RDQV9UQkZfTUFYICsgMV0gPSB7CiAJW1RDQV9UQkZfUEFSTVNdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y190YmZfcW9wdCkgfSwKIAlbVENBX1RCRl9SVEFCXQk9IHsgLnR5cGUgPSBOTEFfQklOQVJZLCAubGVuID0gVENfUlRBQl9TSVpFIH0sCkBAIC0zMjIsOCArMjk1LDExIEBACiAJCWdvdG8gZG9uZTsKIAogCWlmIChxb3B0LT5saW1pdCA+IDApIHsKLQkJaWYgKChjaGlsZCA9IHRiZl9jcmVhdGVfZGZsdF9xZGlzYyhzY2gsIHFvcHQtPmxpbWl0KSkgPT0gTlVMTCkKKwkJY2hpbGQgPSBmaWZvX2NyZWF0ZV9kZmx0KHNjaCwgJmJmaWZvX3FkaXNjX29wcywgcW9wdC0+bGltaXQpOworCQlpZiAoSVNfRVJSKGNoaWxkKSkgeworCQkJZXJyID0gUFRSX0VSUihjaGlsZCk7CiAJCQlnb3RvIGRvbmU7CisJCX0KIAl9CiAKIAlzY2hfdHJlZV9sb2NrKHNjaCk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RlcWwuYyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCmluZGV4IDA0NDRmZDAuLjUzNzIyMzYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGVxbC5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCkBAIC03OCwxMiArNzgsMTIgQEAKIHN0YXRpYyBpbnQKIHRlcWxfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MqIHNjaCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2NoLT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpOwogCXN0cnVjdCB0ZXFsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAKIAlpZiAocS0+cS5xbGVuIDwgZGV2LT50eF9xdWV1ZV9sZW4pIHsKIAkJX19za2JfcXVldWVfdGFpbCgmcS0+cSwgc2tiKTsKLQkJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAkJc2NoLT5ic3RhdHMucGFja2V0cysrOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMDcsMTcgKzEwNywxOSBAQAogdGVxbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyogc2NoKQogewogCXN0cnVjdCB0ZXFsX3NjaGVkX2RhdGEgKmRhdCA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkYXRfcXVldWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrYiA9IF9fc2tiX2RlcXVldWUoJmRhdC0+cSk7CisJZGF0X3F1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkYXQtPm0tPmRldiwgMCk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICptID0gZGF0LT5tLT5kZXYtPnFkaXNjLT5kZXY7CisJCXN0cnVjdCBuZXRfZGV2aWNlICptID0gcWRpc2NfZGV2KGRhdF9xdWV1ZS0+cWRpc2MpOwogCQlpZiAobSkgewogCQkJZGF0LT5tLT5zbGF2ZXMgPSBzY2g7CiAJCQluZXRpZl93YWtlX3F1ZXVlKG0pOwogCQl9CiAJfQotCXNjaC0+cS5xbGVuID0gZGF0LT5xLnFsZW4gKyBkYXQtPm0tPmRldi0+cWRpc2MtPnEucWxlbjsKKwlzY2gtPnEucWxlbiA9IGRhdC0+cS5xbGVuICsgZGF0X3F1ZXVlLT5xZGlzYy0+cS5xbGVuOwogCXJldHVybiBza2I7CiB9CiAKQEAgLTE1MywxMCArMTU1LDE2IEBACiAJCQkJaWYgKHEgPT0gbWFzdGVyLT5zbGF2ZXMpIHsKIAkJCQkJbWFzdGVyLT5zbGF2ZXMgPSBORVhUX1NMQVZFKHEpOwogCQkJCQlpZiAocSA9PSBtYXN0ZXItPnNsYXZlcykgeworCQkJCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOworCQkJCQkJc3BpbmxvY2tfdCAqcm9vdF9sb2NrOworCisJCQkJCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKG1hc3Rlci0+ZGV2LCAwKTsKIAkJCQkJCW1hc3Rlci0+c2xhdmVzID0gTlVMTDsKLQkJCQkJCXNwaW5fbG9ja19iaCgmbWFzdGVyLT5kZXYtPnF1ZXVlX2xvY2spOwotCQkJCQkJcWRpc2NfcmVzZXQobWFzdGVyLT5kZXYtPnFkaXNjKTsKLQkJCQkJCXNwaW5fdW5sb2NrX2JoKCZtYXN0ZXItPmRldi0+cXVldWVfbG9jayk7CisKKwkJCQkJCXJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayh0eHEtPnFkaXNjKTsKKwkJCQkJCXNwaW5fbG9ja19iaChyb290X2xvY2spOworCQkJCQkJcWRpc2NfcmVzZXQodHhxLT5xZGlzYyk7CisJCQkJCQlzcGluX3VubG9ja19iaChyb290X2xvY2spOwogCQkJCQl9CiAJCQkJfQogCQkJCXNrYl9xdWV1ZV9wdXJnZSgmZGF0LT5xKTsKQEAgLTE3MCw3ICsxNzgsNyBAQAogCiBzdGF0aWMgaW50IHRlcWxfcWRpc2NfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzY2gtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7CiAJc3RydWN0IHRlcWxfbWFzdGVyICptID0gKHN0cnVjdCB0ZXFsX21hc3Rlciopc2NoLT5vcHM7CiAJc3RydWN0IHRlcWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIApAQCAtMjE2LDcgKzIyNCw4IEBACiBzdGF0aWMgaW50CiBfX3RlcWxfcmVzb2x2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3Jlcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGVxbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihkZXYtPnFkaXNjKTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7CisJc3RydWN0IHRlcWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoZGV2X3F1ZXVlLT5xZGlzYyk7CiAJc3RydWN0IG5laWdoYm91ciAqbW4gPSBza2ItPmRzdC0+bmVpZ2hib3VyOwogCXN0cnVjdCBuZWlnaGJvdXIgKm4gPSBxLT5uY2FjaGU7CiAKQEAgLTI1Miw3ICsyNjEsOCBAQAogc3RhdGljIGlubGluZSBpbnQgdGVxbF9yZXNvbHZlKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYl9yZXMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGRldi0+cWRpc2MgPT0gJm5vb3BfcWRpc2MpCisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOworCWlmICh0eHEtPnFkaXNjID09ICZub29wX3FkaXNjKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChkZXYtPmhlYWRlcl9vcHMgPT0gTlVMTCB8fApAQCAtMjY4LDcgKzI3OCw2IEBACiAJc3RydWN0IFFkaXNjICpzdGFydCwgKnE7CiAJaW50IGJ1c3k7CiAJaW50IG5vcmVzOwotCWludCBsZW4gPSBza2ItPmxlbjsKIAlpbnQgc3VicSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCXN0cnVjdCBza19idWZmICpza2JfcmVzID0gTlVMTDsKIApAQCAtMjgyLDEyICsyOTEsMTMgQEAKIAkJZ290byBkcm9wOwogCiAJZG8gewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmUgPSBxLT5kZXY7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZSA9IHFkaXNjX2RldihxKTsKKwkJc3RydWN0IG5ldGRldl9xdWV1ZSAqc2xhdmVfdHhxOwogCi0JCWlmIChzbGF2ZS0+cWRpc2Nfc2xlZXBpbmcgIT0gcSkKKwkJc2xhdmVfdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShzbGF2ZSwgMCk7CisJCWlmIChzbGF2ZV90eHEtPnFkaXNjX3NsZWVwaW5nICE9IHEpCiAJCQljb250aW51ZTsKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoc2xhdmUpIHx8Ci0JCSAgICBfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoc2xhdmUsIHN1YnEpIHx8CisJCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoc2xhdmUsIHN1YnEpIHx8CiAJCSAgICAhbmV0aWZfcnVubmluZyhzbGF2ZSkpIHsKIAkJCWJ1c3kgPSAxOwogCQkJY29udGludWU7CkBAIC0yOTYsMTQgKzMwNiwxNCBAQAogCQlzd2l0Y2ggKHRlcWxfcmVzb2x2ZShza2IsIHNrYl9yZXMsIHNsYXZlKSkgewogCQljYXNlIDA6CiAJCQlpZiAobmV0aWZfdHhfdHJ5bG9jayhzbGF2ZSkpIHsKLQkJCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoc2xhdmUpICYmCi0JCQkJICAgICFfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoc2xhdmUsIHN1YnEpICYmCisJCQkJaWYgKCFfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoc2xhdmUsIHN1YnEpICYmCiAJCQkJICAgIHNsYXZlLT5oYXJkX3N0YXJ0X3htaXQoc2tiLCBzbGF2ZSkgPT0gMCkgewogCQkJCQluZXRpZl90eF91bmxvY2soc2xhdmUpOwogCQkJCQltYXN0ZXItPnNsYXZlcyA9IE5FWFRfU0xBVkUocSk7CiAJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJCQkJbWFzdGVyLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQkJCW1hc3Rlci0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOworCQkJCQltYXN0ZXItPnN0YXRzLnR4X2J5dGVzICs9CisJCQkJCQlxZGlzY19wa3RfbGVuKHNrYik7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCQluZXRpZl90eF91bmxvY2soc2xhdmUpOwpAQCAtMzUyLDcgKzM2Miw3IEBACiAKIAlxID0gbS0+c2xhdmVzOwogCWRvIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlID0gcS0+ZGV2OworCQlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmUgPSBxZGlzY19kZXYocSk7CiAKIAkJaWYgKHNsYXZlID09IE5VTEwpCiAJCQlyZXR1cm4gLUVVTkFUQ0g7CkBAIC00MDMsNyArNDEzLDcgQEAKIAlxID0gbS0+c2xhdmVzOwogCWlmIChxKSB7CiAJCWRvIHsKLQkJCWlmIChuZXdfbXR1ID4gcS0+ZGV2LT5tdHUpCisJCQlpZiAobmV3X210dSA+IHFkaXNjX2RldihxKS0+bXR1KQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9IHdoaWxlICgocT1ORVhUX1NMQVZFKHEpKSAhPSBtLT5zbGF2ZXMpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9zY3RwL0tjb25maWcgYi9uZXQvc2N0cC9LY29uZmlnCmluZGV4IDBiNzlmODYuLjU4YjNlODggMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL0tjb25maWcKKysrIGIvbmV0L3NjdHAvS2NvbmZpZwpAQCAtNDcsMTEgKzQ3LDExIEBACiAKIGNvbmZpZyBTQ1RQX0RCR19PQkpDTlQKIAlib29sICJTQ1RQOiBEZWJ1ZyBvYmplY3QgY291bnRzIgorCWRlcGVuZHMgb24gUFJPQ19GUwogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSwgdGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgY291bnRpbmcgdGhlIAogCSAgdHlwZSBvZiBvYmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgCi0JICBpZGVudGlmeWluZyBtZW1vcnkgbGVha3MuICAgSWYgdGhlIC9wcm9jIGZpbGVzeXN0ZW0gaXMgZW5hYmxlZCB0aGlzIAotCSAgZGVidWcgaW5mb3JtYXRpb24gY2FuIGJlIHZpZXdlZCBieSAKKwkgIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcy4gVGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgdmlld2VkIGJ5CiAJICAnY2F0IC9wcm9jL25ldC9zY3RwL3NjdHBfZGJnX29iamNudCcKIAogCSAgSWYgdW5zdXJlLCBzYXkgTgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvTWFrZWZpbGUgYi9uZXQvc2N0cC9NYWtlZmlsZQppbmRleCBmNTM1NmI5Li42Yjc5NDczIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9NYWtlZmlsZQorKysgYi9uZXQvc2N0cC9NYWtlZmlsZQpAQCAtOSwxMCArOSwxMCBAQAogCSAgdHJhbnNwb3J0Lm8gY2h1bmsubyBzbV9tYWtlX2NodW5rLm8gdWxwZXZlbnQubyBcCiAJICBpbnF1ZXVlLm8gb3V0cXVldWUubyB1bHBxdWV1ZS5vIGNvbW1hbmQubyBcCiAJICB0c25tYXAubyBiaW5kX2FkZHIubyBzb2NrZXQubyBwcmltaXRpdmUubyBcCi0JICBvdXRwdXQubyBpbnB1dC5vIGRlYnVnLm8gc3NubWFwLm8gcHJvYy5vIFwKLQkgIGF1dGgubworCSAgb3V0cHV0Lm8gaW5wdXQubyBkZWJ1Zy5vIHNzbm1hcC5vIGF1dGgubwogCiBzY3RwLSQoQ09ORklHX1NDVFBfREJHX09CSkNOVCkgKz0gb2JqY250Lm8KK3NjdHAtJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBzY3RwLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsLm8KIAogc2N0cC0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkJKz0gaXB2Ni5vCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCmluZGV4IDAyNGMzZWIuLmVjMmEwYTMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2Fzc29jaW9sYS5jCisrKyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCkBAIC0xMzYsNiArMTM2LDcgQEAKIAogCS8qIFNldCBhc3NvY2lhdGlvbiBkZWZhdWx0IFNBQ0sgZGVsYXkgKi8KIAlhc29jLT5zYWNrZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKHNwLT5zYWNrZGVsYXkpOworCWFzb2MtPnNhY2tmcmVxID0gc3AtPnNhY2tmcmVxOwogCiAJLyogU2V0IHRoZSBhc3NvY2lhdGlvbiBkZWZhdWx0IGZsYWdzIGNvbnRyb2xsaW5nCiAJICogSGVhcnRiZWF0LCBTQUNLIGRlbGF5LCBhbmQgUGF0aCBNVFUgRGlzY292ZXJ5LgpAQCAtMjYxLDYgKzI2Miw3IEBACiAJICogYWxyZWFkeSByZWNlaXZlZCBvbmUgcGFja2V0Ll0KIAkgKi8KIAlhc29jLT5wZWVyLnNhY2tfbmVlZGVkID0gMTsKKwlhc29jLT5wZWVyLnNhY2tfY250ID0gMDsKIAogCS8qIEFzc3VtZSB0aGF0IHRoZSBwZWVyIHdpbGwgdGVsbCB1cyBpZiBoZSByZWNvZ25pemVzIEFTQ09ORgogCSAqIGFzIHBhcnQgb2YgSU5JVCBleGNoYW5nZS4KQEAgLTYyNCw2ICs2MjYsNyBAQAogCSAqIGFzc29jaWF0aW9uIGNvbmZpZ3VyZWQgdmFsdWUuCiAJICovCiAJcGVlci0+c2Fja2RlbGF5ID0gYXNvYy0+c2Fja2RlbGF5OworCXBlZXItPnNhY2tmcmVxID0gYXNvYy0+c2Fja2ZyZXE7CiAKIAkvKiBFbmFibGUvZGlzYWJsZSBoZWFydGJlYXQsIFNBQ0sgZGVsYXksIGFuZCBwYXRoIE1UVSBkaXNjb3ZlcnkKIAkgKiBiYXNlZCBvbiBhc3NvY2lhdGlvbiBzZXR0aW5nLgpAQCAtNjUwLDYgKzY1Myw3IEBACiAKIAlTQ1RQX0RFQlVHX1BSSU5USygic2N0cF9hc3NvY19hZGRfcGVlcjphc3NvY2lhdGlvbiAlcCBQTVRVIHNldCB0byAiCiAJCQkgICIlZFxuIiwgYXNvYywgYXNvYy0+cGF0aG10dSk7CisJcGVlci0+cG10dV9wZW5kaW5nID0gMDsKIAogCWFzb2MtPmZyYWdfcG9pbnQgPSBzY3RwX2ZyYWdfcG9pbnQoc3AsIGFzb2MtPnBhdGhtdHUpOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9iaW5kX2FkZHIuYyBiL25ldC9zY3RwL2JpbmRfYWRkci5jCmluZGV4IDgwZTZkZjAuLmY2MmJjMjQgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2JpbmRfYWRkci5jCisrKyBiL25ldC9zY3RwL2JpbmRfYWRkci5jCkBAIC0zNDgsNiArMzQ4LDQzIEBACiAJcmV0dXJuIG1hdGNoOwogfQogCisvKiBEb2VzIHRoZSBhZGRyZXNzICdhZGRyJyBjb25mbGljdCB3aXRoIGFueSBhZGRyZXNzZXMgaW4KKyAqIHRoZSBicC4KKyAqLworaW50IHNjdHBfYmluZF9hZGRyX2NvbmZsaWN0KHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnAsCisJCQkgICAgY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyLAorCQkJICAgIHN0cnVjdCBzY3RwX3NvY2sgKmJwX3NwLAorCQkJICAgIHN0cnVjdCBzY3RwX3NvY2sgKmFkZHJfc3ApCit7CisJc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKmxhZGRyOworCWludCBjb25mbGljdCA9IDA7CisJc3RydWN0IHNjdHBfc29jayAqc3A7CisKKwkvKiBQaWNrIHRoZSBJUHY2IHNvY2tldCBhcyB0aGUgYmFzaXMgb2YgY29tcGFyaXNvbgorCSAqIHNpbmNlIGl0J3MgdXN1YWxseSBhIHN1cGVyc2V0IG9mIHRoZSBJUHY0LgorCSAqIElmIHRoZXJlIGlzIG5vIElQdjYgc29ja2V0LCB0aGVuIGRlZmF1bHQgdG8gYmluZF9hZGRyLgorCSAqLworCWlmIChzY3RwX29wdDJzayhicF9zcCktPnNrX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJc3AgPSBicF9zcDsKKwllbHNlIGlmIChzY3RwX29wdDJzayhhZGRyX3NwKS0+c2tfZmFtaWx5ID09IEFGX0lORVQ2KQorCQlzcCA9IGFkZHJfc3A7CisJZWxzZQorCQlzcCA9IGJwX3NwOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCAmYnAtPmFkZHJlc3NfbGlzdCwgbGlzdCkgeworCQlpZiAoIWxhZGRyLT52YWxpZCkKKwkJCWNvbnRpbnVlOworCisJCWNvbmZsaWN0ID0gc3AtPnBmLT5jbXBfYWRkcigmbGFkZHItPmEsIGFkZHIsIHNwKTsKKwkJaWYgKGNvbmZsaWN0KQorCQkJYnJlYWs7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIGNvbmZsaWN0OworfQorCiAvKiBHZXQgdGhlIHN0YXRlIG9mIHRoZSBlbnRyeSBpbiB0aGUgYmluZF9hZGRyX2xpc3QgKi8KIGludCBzY3RwX2JpbmRfYWRkcl9zdGF0ZShjb25zdCBzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKmJwLAogCQkJIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqYWRkcikKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucHV0LmMgYi9uZXQvc2N0cC9pbnB1dC5jCmluZGV4IGNhNmIwMjIuLmE0OWZhODAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucHV0LmMKKysrIGIvbmV0L3NjdHAvaW5wdXQuYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgPG5ldC9zY3RwL3NjdHAuaD4KICNpbmNsdWRlIDxuZXQvc2N0cC9zbS5oPgogI2luY2x1ZGUgPG5ldC9zY3RwL2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIGludGVybmFsIGhlbHBlcnMuICovCiBzdGF0aWMgaW50IHNjdHBfcmN2X29vdGIoc3RydWN0IHNrX2J1ZmYgKik7CkBAIC04Miw4ICs4Myw4IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKmxpc3QgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsKIAlzdHJ1Y3Qgc2N0cGhkciAqc2ggPSBzY3RwX2hkcihza2IpOwotCV9fdTMyIGNtcCA9IG50b2hsKHNoLT5jaGVja3N1bSk7Ci0JX191MzIgdmFsID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKXNoLCBza2JfaGVhZGxlbihza2IpKTsKKwlfX2JlMzIgY21wID0gc2gtPmNoZWNrc3VtOworCV9fYmUzMiB2YWwgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIHNrYl9oZWFkbGVuKHNrYikpOwogCiAJZm9yICg7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQogCQl2YWwgPSBzY3RwX3VwZGF0ZV9ja3N1bSgoX191OCAqKWxpc3QtPmRhdGEsIHNrYl9oZWFkbGVuKGxpc3QpLApAQCAtNDMwLDYgKzQzMSw5IEBACiAJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IE5VTEw7CisJc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqY2h1bmtoZHI7CisJX191MzIgdnRhZyA9IG50b2hsKHNjdHBoZHItPnZ0YWcpOworCWludCBsZW4gPSBza2ItPmxlbiAtICgodm9pZCAqKXNjdHBoZHIgLSAodm9pZCAqKXNrYi0+ZGF0YSk7CiAKIAkqYXBwID0gTlVMTDsgKnRwcCA9IE5VTEw7CiAKQEAgLTQ1MSw4ICs0NTUsMjggQEAKIAogCXNrID0gYXNvYy0+YmFzZS5zazsKIAotCWlmIChudG9obChzY3RwaGRyLT52dGFnKSAhPSBhc29jLT5jLnBlZXJfdnRhZykgewotCQlJQ01QX0lOQ19TVEFUU19CSChJQ01QX01JQl9JTkVSUk9SUyk7CisJLyogUkZDIDQ5NjAsIEFwcGVuZGl4IEMuIElDTVAgSGFuZGxpbmcKKwkgKgorCSAqIElDTVA2KSBBbiBpbXBsZW1lbnRhdGlvbiBNVVNUIHZhbGlkYXRlIHRoYXQgdGhlIFZlcmlmaWNhdGlvbiBUYWcKKwkgKiBjb250YWluZWQgaW4gdGhlIElDTVAgbWVzc2FnZSBtYXRjaGVzIHRoZSBWZXJpZmljYXRpb24gVGFnIG9mCisJICogdGhlIHBlZXIuICBJZiB0aGUgVmVyaWZpY2F0aW9uIFRhZyBpcyBub3QgMCBhbmQgZG9lcyBOT1QKKwkgKiBtYXRjaCwgZGlzY2FyZCB0aGUgSUNNUCBtZXNzYWdlLiAgSWYgaXQgaXMgMCBhbmQgdGhlIElDTVAKKwkgKiBtZXNzYWdlIGNvbnRhaW5zIGVub3VnaCBieXRlcyB0byB2ZXJpZnkgdGhhdCB0aGUgY2h1bmsgdHlwZSBpcworCSAqIGFuIElOSVQgY2h1bmsgYW5kIHRoYXQgdGhlIEluaXRpYXRlIFRhZyBtYXRjaGVzIHRoZSB0YWcgb2YgdGhlCisJICogcGVlciwgY29udGludWUgd2l0aCBJQ01QNy4gIElmIHRoZSBJQ01QIG1lc3NhZ2UgaXMgdG9vIHNob3J0CisJICogb3IgdGhlIGNodW5rIHR5cGUgb3IgdGhlIEluaXRpYXRlIFRhZyBkb2VzIG5vdCBtYXRjaCwgc2lsZW50bHkKKwkgKiBkaXNjYXJkIHRoZSBwYWNrZXQuCisJICovCisJaWYgKHZ0YWcgPT0gMCkgeworCQljaHVua2hkciA9IChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICopKCh2b2lkICopc2N0cGhkcgorCQkJCSsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCkKKwkJCSAgKyBzaXplb2YoX19iZTMyKSB8fAorCQkgICAgY2h1bmtoZHItPmNodW5rX2hkci50eXBlICE9IFNDVFBfQ0lEX0lOSVQgfHwKKwkJICAgIG50b2hsKGNodW5raGRyLT5pbml0X2hkci5pbml0X3RhZykgIT0gYXNvYy0+Yy5teV92dGFnKSB7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSBpZiAodnRhZyAhPSBhc29jLT5jLnBlZXJfdnRhZykgewogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTQ2Miw3ICs0ODYsNyBAQAogCSAqIHNlcnZlcnMgdGhpcyBuZWVkcyB0byBiZSBzb2x2ZWQgZGlmZmVyZW50bHkuCiAJICovCiAJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpCi0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0xPQ0tEUk9QUEVESUNNUFMpOworCQlORVRfSU5DX1NUQVRTX0JIKCZpbml0X25ldCwgTElOVVhfTUlCX0xPQ0tEUk9QUEVESUNNUFMpOwogCiAJKmFwcCA9IGFzb2M7CiAJKnRwcCA9IHRyYW5zcG9ydDsKQEAgLTUxMSw3ICs1MzUsNyBAQAogCWludCBlcnI7CiAKIAlpZiAoc2tiLT5sZW4gPCBpaGxlbiArIDgpIHsKLQkJSUNNUF9JTkNfU1RBVFNfQkgoSUNNUF9NSUJfSU5FUlJPUlMpOworCQlJQ01QX0lOQ19TVEFUU19CSCgmaW5pdF9uZXQsIElDTVBfTUlCX0lORVJST1JTKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTI1LDcgKzU0OSw3IEBACiAJc2tiLT5uZXR3b3JrX2hlYWRlciA9IHNhdmVpcDsKIAlza2ItPnRyYW5zcG9ydF9oZWFkZXIgPSBzYXZlc2N0cDsKIAlpZiAoIXNrKSB7Ci0JCUlDTVBfSU5DX1NUQVRTX0JIKElDTVBfTUlCX0lORVJST1JTKTsKKwkJSUNNUF9JTkNfU1RBVFNfQkgoJmluaXRfbmV0LCBJQ01QX01JQl9JTkVSUk9SUyk7CiAJCXJldHVybjsKIAl9CiAJLyogV2FybmluZzogIFRoZSBzb2NrIGxvY2sgaXMgaGVsZC4gIFJlbWVtYmVyIHRvIGNhbGwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lwdjYuYyBiL25ldC9zY3RwL2lwdjYuYwppbmRleCBhMmY0ZDRkLi5hMjM4ZDY4MyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtODE4LDcgKzgxOCw3IEBACiAJCXJldHVybiAxOwogCS8qIHY0LW1hcHBlZC12NiBhZGRyZXNzZXMgKi8KIAljYXNlIEFGX0lORVQ6Ci0JCWlmICghX19pcHY2X29ubHlfc29jayhzY3RwX29wdDJzayhzcCkpICYmIHNwLT52NG1hcHBlZCkKKwkJaWYgKCFfX2lwdjZfb25seV9zb2NrKHNjdHBfb3B0MnNrKHNwKSkpCiAJCQlyZXR1cm4gMTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKQEAgLTg0MCw2ICs4NDAsMTEgQEAKIAogCWlmICghYWYxIHx8ICFhZjIpCiAJCXJldHVybiAwOworCisJLyogSWYgdGhlIHNvY2tldCBpcyBJUHY2IG9ubHksIHY0IGFkZHJzIHdpbGwgbm90IG1hdGNoICovCisJaWYgKF9faXB2Nl9vbmx5X3NvY2soc2N0cF9vcHQyc2sob3B0KSkgJiYgYWYxICE9IGFmMikKKwkJcmV0dXJuIDA7CisKIAkvKiBUb2RheSwgd2lsZGNhcmQgQUZfSU5FVC9BRl9JTkVUNi4gKi8KIAlpZiAoc2N0cF9pc19hbnkoYWRkcjEpIHx8IHNjdHBfaXNfYW55KGFkZHIyKSkKIAkJcmV0dXJuIDE7CkBAIC04NzYsNyArODgxLDExIEBACiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlkZXZfcHV0KGRldik7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEKSB7CisJCQlpZiAoIW9wdC0+djRtYXBwZWQpCisJCQkJcmV0dXJuIDA7CiAJCX0KKwogCQlhZiA9IG9wdC0+cGYtPmFmOwogCX0KIAlyZXR1cm4gYWYtPmF2YWlsYWJsZShhZGRyLCBvcHQpOwpAQCAtOTE5LDkgKzkyOCwxMiBAQAogc3RhdGljIGludCBzY3RwX2luZXQ2X3N1cHBvcnRlZF9hZGRycyhjb25zdCBzdHJ1Y3Qgc2N0cF9zb2NrICpvcHQsCiAJCQkJICAgICAgX19iZTE2ICp0eXBlcykKIHsKLQl0eXBlc1swXSA9IFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOwotCXR5cGVzWzFdID0gU0NUUF9QQVJBTV9JUFY2X0FERFJFU1M7Ci0JcmV0dXJuIDI7CisJdHlwZXNbMF0gPSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzsKKwlpZiAoIW9wdCB8fCAhaXB2Nl9vbmx5X3NvY2soc2N0cF9vcHQyc2sob3B0KSkpIHsKKwkJdHlwZXNbMV0gPSBTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUzsKKwkJcmV0dXJuIDI7CisJfQorCXJldHVybiAxOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9zZXFwYWNrZXRfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cHV0LmMgYi9uZXQvc2N0cC9vdXRwdXQuYwppbmRleCA2ZDQ1YmFlLi40NTY4NDY0IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRwdXQuYworKysgYi9uZXQvc2N0cC9vdXRwdXQuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9lY24uaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAKICNpZm5kZWYgVEVTVF9GUkFNRQogI2luY2x1ZGUgPG5ldC90Y3AuaD4KQEAgLTE1Nyw3ICsxNTgsOCBAQAogICogcGFja2V0IGNhbiBiZSBzZW50IG9ubHkgYWZ0ZXIgcmVjZWl2aW5nIHRoZSBDT09LSUVfQUNLLgogICovCiBzY3RwX3htaXRfdCBzY3RwX3BhY2tldF90cmFuc21pdF9jaHVuayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKLQkJCQkgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rKQorCQkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCisJCQkJICAgICAgIGludCBvbmVfcGFja2V0KQogewogCXNjdHBfeG1pdF90IHJldHZhbDsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtMTc1LDcgKzE3Nyw5IEBACiAJCQkvKiBJZiB3ZSBoYXZlIGFuIGVtcHR5IHBhY2tldCwgdGhlbiB3ZSBjYW4gTk9UIGV2ZXIKIAkJCSAqIHJldHVybiBQTVRVX0ZVTEwuCiAJCQkgKi8KLQkJCXJldHZhbCA9IHNjdHBfcGFja2V0X2FwcGVuZF9jaHVuayhwYWNrZXQsIGNodW5rKTsKKwkJCWlmICghb25lX3BhY2tldCkKKwkJCQlyZXR2YWwgPSBzY3RwX3BhY2tldF9hcHBlbmRfY2h1bmsocGFja2V0LAorCQkJCQkJCQkgIGNodW5rKTsKIAkJfQogCQlicmVhazsKIApAQCAtMzYxLDcgKzM2NSw3IEBACiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cCA9IHBhY2tldC0+dHJhbnNwb3J0OwogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gdHAtPmFzb2M7CiAJc3RydWN0IHNjdHBoZHIgKnNoOwotCV9fdTMyIGNyYzMyID0gMDsKKwlfX2JlMzIgY3JjMzIgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDApOwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgKnRtcDsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC01MzQsNyArNTM4LDcgQEAKIAkvKiAzKSBQdXQgdGhlIHJlc3VsdGFudCB2YWx1ZSBpbnRvIHRoZSBjaGVja3N1bSBmaWVsZCBpbiB0aGUKIAkgKiAgICBjb21tb24gaGVhZGVyLCBhbmQgbGVhdmUgdGhlIHJlc3Qgb2YgdGhlIGJpdHMgdW5jaGFuZ2VkLgogCSAqLwotCXNoLT5jaGVja3N1bSA9IGh0b25sKGNyYzMyKTsKKwlzaC0+Y2hlY2tzdW0gPSBjcmMzMjsKIAogCS8qIElQIGxheWVyIEVDTiBzdXBwb3J0CiAJICogRnJvbSBSRkMgMjQ4MQpAQCAtNTkyLDcgKzU5Niw3IEBACiAJcmV0dXJuIGVycjsKIG5vX3JvdXRlOgogCWtmcmVlX3NrYihuc2tiKTsKLQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworCUlQX0lOQ19TVEFUU19CSCgmaW5pdF9uZXQsIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKIAogCS8qIEZJWE1FOiBSZXR1cm5pbmcgdGhlICdlcnInIHdpbGwgZWZmZWN0IGFsbCB0aGUgYXNzb2NpYXRpb25zCiAJICogYXNzb2NpYXRlZCB3aXRoIGEgc29ja2V0LCBhbHRob3VnaCBvbmx5IG9uZSBvZiB0aGUgcGF0aHMgb2YgdGhlCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRxdWV1ZS5jIGIvbmV0L3NjdHAvb3V0cXVldWUuYwppbmRleCBhY2U2NzcwLi40MzI4YWQ1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRxdWV1ZS5jCisrKyBiL25ldC9zY3RwL291dHF1ZXVlLmMKQEAgLTcxLDYgKzcxLDggQEAKIAogc3RhdGljIHZvaWQgc2N0cF9nZW5lcmF0ZV9md2R0c24oc3RydWN0IHNjdHBfb3V0cSAqcSwgX191MzIgc2Fja19jdHNuKTsKIAorc3RhdGljIGludCBzY3RwX291dHFfZmx1c2goc3RydWN0IHNjdHBfb3V0cSAqcSwgaW50IHJ0eF90aW1lb3V0KTsKKwogLyogQWRkIGRhdGEgdG8gdGhlIGZyb250IG9mIHRoZSBxdWV1ZS4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX291dHFfaGVhZF9kYXRhKHN0cnVjdCBzY3RwX291dHEgKnEsCiAJCQkJCXN0cnVjdCBzY3RwX2NodW5rICpjaCkKQEAgLTcwMiw2ICs3MDQsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorCiAvKgogICogVHJ5IHRvIGZsdXNoIGFuIG91dHF1ZXVlLgogICoKQEAgLTcxMSw3ICs3MTQsNyBAQAogICogbG9ja2luZyBjb25jZXJucyBtdXN0IGJlIG1hZGUuICBUb2RheSB3ZSB1c2UgdGhlIHNvY2sgbG9jayB0byBwcm90ZWN0CiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCi1pbnQgc2N0cF9vdXRxX2ZsdXNoKHN0cnVjdCBzY3RwX291dHEgKnEsIGludCBydHhfdGltZW91dCkKK3N0YXRpYyBpbnQgc2N0cF9vdXRxX2ZsdXNoKHN0cnVjdCBzY3RwX291dHEgKnEsIGludCBydHhfdGltZW91dCkKIHsKIAlzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldDsKIAlzdHJ1Y3Qgc2N0cF9wYWNrZXQgc2luZ2xldG9uOwpAQCAtNzI1LDYgKzcyOCw3IEBACiAJc2N0cF94bWl0X3Qgc3RhdHVzOwogCWludCBlcnJvciA9IDA7CiAJaW50IHN0YXJ0X3RpbWVyID0gMDsKKwlpbnQgb25lX3BhY2tldCA9IDA7CiAKIAkvKiBUaGVzZSB0cmFuc3BvcnRzIGhhdmUgY2h1bmtzIHRvIHNlbmQuICovCiAJc3RydWN0IGxpc3RfaGVhZCB0cmFuc3BvcnRfbGlzdDsKQEAgLTgzMCwyMCArODM0LDMzIEBACiAJCQlpZiAoc2N0cF90ZXN0X1RfYml0KGNodW5rKSkgewogCQkJCXBhY2tldC0+dnRhZyA9IGFzb2MtPmMubXlfdnRhZzsKIAkJCX0KKwkJLyogVGhlIGZvbGxvd2luZyBjaHVua3MgYXJlICJyZXNwb25zZSIgY2h1bmtzLCBpLmUuCisJCSAqIHRoZXkgYXJlIGdlbmVyYXRlZCBpbiByZXNwb25zZSB0byBzb21ldGhpbmcgd2UKKwkJICogcmVjZWl2ZWQuICBJZiB3ZSBhcmUgc2VuZGluZyB0aGVzZSwgdGhlbiB3ZSBjYW4KKwkJICogc2VuZCBvbmx5IDEgcGFja2V0IGNvbnRhaW5pbmcgdGhlc2UgY2h1bmtzLgorCQkgKi8KKwkJY2FzZSBTQ1RQX0NJRF9IRUFSVEJFQVRfQUNLOgorCQljYXNlIFNDVFBfQ0lEX1NIVVRET1dOX0FDSzoKKwkJY2FzZSBTQ1RQX0NJRF9DT09LSUVfQUNLOgorCQljYXNlIFNDVFBfQ0lEX0NPT0tJRV9FQ0hPOgorCQljYXNlIFNDVFBfQ0lEX0VSUk9SOgorCQljYXNlIFNDVFBfQ0lEX0VDTl9DV1I6CisJCWNhc2UgU0NUUF9DSURfQVNDT05GX0FDSzoKKwkJCW9uZV9wYWNrZXQgPSAxOworCQkJLyogRmFsbCB0aHJvdWdodCAqLworCiAJCWNhc2UgU0NUUF9DSURfU0FDSzoKIAkJY2FzZSBTQ1RQX0NJRF9IRUFSVEJFQVQ6Ci0JCWNhc2UgU0NUUF9DSURfSEVBUlRCRUFUX0FDSzoKIAkJY2FzZSBTQ1RQX0NJRF9TSFVURE9XTjoKLQkJY2FzZSBTQ1RQX0NJRF9TSFVURE9XTl9BQ0s6Ci0JCWNhc2UgU0NUUF9DSURfRVJST1I6Ci0JCWNhc2UgU0NUUF9DSURfQ09PS0lFX0VDSE86Ci0JCWNhc2UgU0NUUF9DSURfQ09PS0lFX0FDSzoKIAkJY2FzZSBTQ1RQX0NJRF9FQ05fRUNORToKLQkJY2FzZSBTQ1RQX0NJRF9FQ05fQ1dSOgogCQljYXNlIFNDVFBfQ0lEX0FTQ09ORjoKLQkJY2FzZSBTQ1RQX0NJRF9BU0NPTkZfQUNLOgogCQljYXNlIFNDVFBfQ0lEX0ZXRF9UU046Ci0JCQlzY3RwX3BhY2tldF90cmFuc21pdF9jaHVuayhwYWNrZXQsIGNodW5rKTsKKwkJCXN0YXR1cyA9IHNjdHBfcGFja2V0X3RyYW5zbWl0X2NodW5rKHBhY2tldCwgY2h1bmssCisJCQkJCQkJICAgIG9uZV9wYWNrZXQpOworCQkJaWYgKHN0YXR1cyAgIT0gU0NUUF9YTUlUX09LKSB7CisJCQkJLyogcHV0IHRoZSBjaHVuayBiYWNrICovCisJCQkJbGlzdF9hZGQoJmNodW5rLT5saXN0LCAmcS0+Y29udHJvbF9jaHVua19saXN0KTsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC05NzQsNyArOTkxLDcgQEAKIAkJCQkJYXRvbWljX3JlYWQoJmNodW5rLT5za2ItPnVzZXJzKSA6IC0xKTsKIAogCQkJLyogQWRkIHRoZSBjaHVuayB0byB0aGUgcGFja2V0LiAgKi8KLQkJCXN0YXR1cyA9IHNjdHBfcGFja2V0X3RyYW5zbWl0X2NodW5rKHBhY2tldCwgY2h1bmspOworCQkJc3RhdHVzID0gc2N0cF9wYWNrZXRfdHJhbnNtaXRfY2h1bmsocGFja2V0LCBjaHVuaywgMCk7CiAKIAkJCXN3aXRjaCAoc3RhdHVzKSB7CiAJCQljYXNlIFNDVFBfWE1JVF9QTVRVX0ZVTEw6CkBAIC0xMjM5LDcgKzEyNTYsNiBAQAogCSAqIE1ha2Ugc3VyZSB0aGUgZW1wdHkgcXVldWUgaGFuZGxlciB3aWxsIGdldCBydW4gbGF0ZXIuCiAJICovCiAJcS0+ZW1wdHkgPSAobGlzdF9lbXB0eSgmcS0+b3V0X2NodW5rX2xpc3QpICYmCi0JCSAgICBsaXN0X2VtcHR5KCZxLT5jb250cm9sX2NodW5rX2xpc3QpICYmCiAJCSAgICBsaXN0X2VtcHR5KCZxLT5yZXRyYW5zbWl0KSk7CiAJaWYgKCFxLT5lbXB0eSkKIAkJZ290byBmaW5pc2g7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm9jLmMgYi9uZXQvc2N0cC9wcm9jLmMKaW5kZXggMGFiYTc1OS4uZjI2ODkxMCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvYy5jCisrKyBiL25ldC9zY3RwL3Byb2MuYwpAQCAtMzgzLDMgKzM4MywxMzkgQEAKIHsKIAlyZW1vdmVfcHJvY19lbnRyeSgiYXNzb2NzIiwgcHJvY19uZXRfc2N0cCk7CiB9CisKK3N0YXRpYyB2b2lkICpzY3RwX3JlbWFkZHJfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3sKKwlpZiAoKnBvcyA+PSBzY3RwX2Fzc29jX2hhc2hzaXplKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICgqcG9zIDwgMCkKKwkJKnBvcyA9IDA7CisKKwlpZiAoKnBvcyA9PSAwKQorCQlzZXFfcHJpbnRmKHNlcSwgIkFERFIgQVNTT0NfSUQgSEJfQUNUIFJUTyBNQVhfUEFUSF9SVFggIgorCQkJCSJSRU1fQUREUl9SVFggIFNUQVJUXG4iKTsKKworCXJldHVybiAodm9pZCAqKXBvczsKK30KKworc3RhdGljIHZvaWQgKnNjdHBfcmVtYWRkcl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJaWYgKCsrKnBvcyA+PSBzY3RwX2Fzc29jX2hhc2hzaXplKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyB2b2lkIHNjdHBfcmVtYWRkcl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgc2N0cF9yZW1hZGRyX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBzY3RwX2hhc2hidWNrZXQgKmhlYWQ7CisJc3RydWN0IHNjdHBfZXBfY29tbW9uICplcGI7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwOworCWludCAgICBoYXNoID0gKihsb2ZmX3QgKil2OworCisJaWYgKGhhc2ggPj0gc2N0cF9hc3NvY19oYXNoc2l6ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZWFkID0gJnNjdHBfYXNzb2NfaGFzaHRhYmxlW2hhc2hdOworCXNjdHBfbG9jYWxfYmhfZGlzYWJsZSgpOworCXJlYWRfbG9jaygmaGVhZC0+bG9jayk7CisJc2N0cF9mb3JfZWFjaF9oZW50cnkoZXBiLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKKwkJYXNzb2MgPSBzY3RwX2Fzc29jKGVwYik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodHNwLCAmYXNzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKKwkJCQkJdHJhbnNwb3J0cykgeworCQkJLyoKKwkJCSAqIFRoZSByZW1vdGUgYWRkcmVzcyAoQUREUikKKwkJCSAqLworCQkJdHNwLT5hZl9zcGVjaWZpYy0+c2VxX2R1bXBfYWRkcihzZXEsICZ0c3AtPmlwYWRkcik7CisJCQlzZXFfcHJpbnRmKHNlcSwgIiAiKTsKKworCQkJLyoKKwkJCSAqIFRoZSBhc3NvY2lhdGlvbiBJRCAoQVNTT0NfSUQpCisJCQkgKi8KKwkJCXNlcV9wcmludGYoc2VxLCAiJWQgIiwgdHNwLT5hc29jLT5hc3NvY19pZCk7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgSGVhcnRiZWF0IGlzIGFjdGl2ZSAoSEJfQUNUKQorCQkJICogTm90ZTogMSA9IEFjdGl2ZSwgMCA9IEluYWN0aXZlCisJCQkgKi8KKwkJCXNlcV9wcmludGYoc2VxLCAiJWQgIiwgdGltZXJfcGVuZGluZygmdHNwLT5oYl90aW1lcikpOworCisJCQkvKgorCQkJICogUmV0cmFuc21pdCB0aW1lIG91dCAoUlRPKQorCQkJICovCisJCQlzZXFfcHJpbnRmKHNlcSwgIiVsdSAiLCB0c3AtPnJ0byk7CisKKwkJCS8qCisJCQkgKiBNYXhpbXVtIHBhdGggcmV0cmFuc21pdCBjb3VudCAoUEFUSF9NQVhfUlRYKQorCQkJICovCisJCQlzZXFfcHJpbnRmKHNlcSwgIiVkICIsIHRzcC0+cGF0aG1heHJ4dCk7CisKKwkJCS8qCisJCQkgKiByZW1vdGUgYWRkcmVzcyByZXRyYW5zbWl0IGNvdW50IChSRU1fQUREUl9SVFgpCisJCQkgKiBOb3RlOiBXZSBkb24ndCBoYXZlIGEgd2F5IHRvIHRhbGx5IHRoaXMgYXQgdGhlIG1vbWVudAorCQkJICogc28gbGV0cyBqdXN0IGxlYXZlIGl0IGFzIHplcm8gZm9yIHRoZSBtb21lbnQKKwkJCSAqLworCQkJc2VxX3ByaW50ZihzZXEsICIwICIpOworCisJCQkvKgorCQkJICogcmVtb3RlIGFkZHJlc3Mgc3RhcnQgdGltZSAoU1RBUlQpLiAgVGhpcyBpcyBhbHNvIG5vdAorCQkJICogY3VycmVudGx5IGltcGxlbWVudGVkLCBidXQgd2UgY2FuIHJlY29yZCBpdCB3aXRoIGEKKwkJCSAqIGppZmZpZXMgbWFya2VyIGluIGEgc3Vic2VxdWVudCBwYXRjaAorCQkJICovCisJCQlzZXFfcHJpbnRmKHNlcSwgIjAiKTsKKworCQkJc2VxX3ByaW50ZihzZXEsICJcbiIpOworCQl9CisJfQorCisJcmVhZF91bmxvY2soJmhlYWQtPmxvY2spOworCXNjdHBfbG9jYWxfYmhfZW5hYmxlKCk7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjdHBfcmVtYWRkcl9vcHMgPSB7CisJLnN0YXJ0ID0gc2N0cF9yZW1hZGRyX3NlcV9zdGFydCwKKwkubmV4dCAgPSBzY3RwX3JlbWFkZHJfc2VxX25leHQsCisJLnN0b3AgID0gc2N0cF9yZW1hZGRyX3NlcV9zdG9wLAorCS5zaG93ICA9IHNjdHBfcmVtYWRkcl9zZXFfc2hvdywKK307CisKKy8qIENsZWFudXAgdGhlIHByb2MgZnMgZW50cnkgZm9yICdyZW1hZGRyJyBvYmplY3QuICovCit2b2lkIHNjdHBfcmVtYWRkcl9wcm9jX2V4aXQodm9pZCkKK3sKKwlyZW1vdmVfcHJvY19lbnRyeSgicmVtYWRkciIsIHByb2NfbmV0X3NjdHApOworfQorCitzdGF0aWMgaW50IHNjdHBfcmVtYWRkcl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjdHBfcmVtYWRkcl9vcHMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3RwX3JlbWFkZHJfc2VxX2ZvcHMgPSB7CisJLm9wZW4gPSBzY3RwX3JlbWFkZHJfc2VxX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitpbnQgX19pbml0IHNjdHBfcmVtYWRkcl9wcm9jX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CisKKwlwID0gY3JlYXRlX3Byb2NfZW50cnkoInJlbWFkZHIiLCBTX0lSVUdPLCBwcm9jX25ldF9zY3RwKTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCXAtPnByb2NfZm9wcyA9ICZzY3RwX3JlbWFkZHJfc2VxX2ZvcHM7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IDkyNThkZmUuLmE2ZTA4MTggMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtNTIsNiArNTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CkBAIC02NCw5ICs2NiwxMiBAQAogCiAvKiBHbG9iYWwgZGF0YSBzdHJ1Y3R1cmVzLiAqLwogc3RydWN0IHNjdHBfZ2xvYmFscyBzY3RwX2dsb2JhbHMgX19yZWFkX21vc3RseTsKLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcHJvY19uZXRfc2N0cDsKIERFRklORV9TTk1QX1NUQVQoc3RydWN0IHNjdHBfbWliLCBzY3RwX3N0YXRpc3RpY3MpIF9fcmVhZF9tb3N0bHk7CiAKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX25ldF9zY3RwOworI2VuZGlmCisKIHN0cnVjdCBpZHIgc2N0cF9hc3NvY3NfaWQ7CiBERUZJTkVfU1BJTkxPQ0soc2N0cF9hc3NvY3NfaWRfbG9jayk7CiAKQEAgLTk3LDYgKzEwMiw3IEBACiAvKiBTZXQgdXAgdGhlIHByb2MgZnMgZW50cnkgZm9yIHRoZSBTQ1RQIHByb3RvY29sLiAqLwogc3RhdGljIF9faW5pdCBpbnQgc2N0cF9wcm9jX2luaXQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmICghcHJvY19uZXRfc2N0cCkgewogCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKIAkJZW50ID0gcHJvY19ta2Rpcigic2N0cCIsIGluaXRfbmV0LnByb2NfbmV0KTsKQEAgLTExMyw5ICsxMTksMTMgQEAKIAkJZ290byBvdXRfZXBzX3Byb2NfaW5pdDsKIAlpZiAoc2N0cF9hc3NvY3NfcHJvY19pbml0KCkpCiAJCWdvdG8gb3V0X2Fzc29jc19wcm9jX2luaXQ7CisJaWYgKHNjdHBfcmVtYWRkcl9wcm9jX2luaXQoKSkKKwkJZ290byBvdXRfcmVtYWRkcl9wcm9jX2luaXQ7CiAKIAlyZXR1cm4gMDsKIAorb3V0X3JlbWFkZHJfcHJvY19pbml0OgorCXNjdHBfYXNzb2NzX3Byb2NfZXhpdCgpOwogb3V0X2Fzc29jc19wcm9jX2luaXQ6CiAJc2N0cF9lcHNfcHJvY19leGl0KCk7CiBvdXRfZXBzX3Byb2NfaW5pdDoKQEAgLTEyNyw2ICsxMzcsOSBAQAogCX0KIG91dF9ub21lbToKIAlyZXR1cm4gLUVOT01FTTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIH0KIAogLyogQ2xlYW4gdXAgdGhlIHByb2MgZnMgZW50cnkgZm9yIHRoZSBTQ1RQIHByb3RvY29sLgpAQCAtMTM1LDE0ICsxNDgsMTcgQEAKICAqLwogc3RhdGljIHZvaWQgc2N0cF9wcm9jX2V4aXQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXNjdHBfc25tcF9wcm9jX2V4aXQoKTsKIAlzY3RwX2Vwc19wcm9jX2V4aXQoKTsKIAlzY3RwX2Fzc29jc19wcm9jX2V4aXQoKTsKKwlzY3RwX3JlbWFkZHJfcHJvY19leGl0KCk7CiAKIAlpZiAocHJvY19uZXRfc2N0cCkgewogCQlwcm9jX25ldF9zY3RwID0gTlVMTDsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoInNjdHAiLCBpbml0X25ldC5wcm9jX25ldCk7CiAJfQorI2VuZGlmCiB9CiAKIC8qIFByaXZhdGUgaGVscGVyIHRvIGV4dHJhY3QgaXB2NCBhZGRyZXNzIGFuZCBzdGFzaCB0aGVtIGluCkBAIC0zNjcsNiArMzgzLDEwIEBACiAJCQkgICAgICBzdHJ1Y3Qgc2N0cF9zb2NrICpzcCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CisJLyogSVB2NCBhZGRyZXNzZXMgbm90IGFsbG93ZWQgKi8KKwlpZiAoc3AgJiYgaXB2Nl9vbmx5X3NvY2soc2N0cF9vcHQyc2soc3ApKSkKKwkJcmV0dXJuIDA7CisKIAkvKiBJcyB0aGlzIGEgbm9uLXVuaWNhc3QgYWRkcmVzcyBvciBhIHVudXNhYmxlIFNDVFAgYWRkcmVzcz8gKi8KIAlpZiAoSVNfSVBWNF9VTlVTQUJMRV9BRERSRVNTKGFkZHItPnY0LnNpbl9hZGRyLnNfYWRkcikpCiAJCXJldHVybiAwOwpAQCAtMzkwLDYgKzQxMCw5IEBACiAJICAgIXN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKQogCQlyZXR1cm4gMDsKIAorCWlmIChpcHY2X29ubHlfc29jayhzY3RwX29wdDJzayhzcCkpKQorCQlyZXR1cm4gMDsKKwogCXJldHVybiAxOwogfQogCkBAIC02NDUsNyArNjY4LDcgQEAKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqdGVtcDsKIAlpbnQgZm91bmQgPSAwOwogCi0JaWYgKGRldl9uZXQoaWZhLT5pZmFfZGV2LT5kZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGlmYS0+aWZhX2Rldi0+ZGV2KSwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJc3dpdGNoIChldikgewpAQCAtMTA1OSw2ICsxMDgyLDcgQEAKIAlpbnQgc3RhdHVzID0gLUVJTlZBTDsKIAl1bnNpZ25lZCBsb25nIGdvYWw7CiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKKwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwogCWludCBtYXhfc2hhcmU7CiAJaW50IG9yZGVyOwogCkBAIC0xMTU0LDggKzExNzgsOSBAQAogCSAqIE5vdGUgdGhpcyBpbml0YWxpemVzIHRoZSBkYXRhIGluIHNjdHB2Nl9wcm90IHRvbwogCSAqIFVuYWJhc2hlZGx5IHN0b2xlbiBmcm9tIHRjcF9pbml0CiAJICovCi0JbGltaXQgPSBtaW4obnVtX3BoeXNwYWdlcywgMVVMPDwoMjgtUEFHRV9TSElGVCkpID4+ICgyMC1QQUdFX1NISUZUKTsKLQlsaW1pdCA9IChsaW1pdCAqIChudW1fcGh5c3BhZ2VzID4+ICgyMC1QQUdFX1NISUZUKSkpID4+IChQQUdFX1NISUZULTExKTsKKwlucl9wYWdlcyA9IHRvdGFscmFtX3BhZ2VzIC0gdG90YWxoaWdoX3BhZ2VzOworCWxpbWl0ID0gbWluKG5yX3BhZ2VzLCAxVUw8PCgyOC1QQUdFX1NISUZUKSkgPj4gKDIwLVBBR0VfU0hJRlQpOworCWxpbWl0ID0gKGxpbWl0ICogKG5yX3BhZ2VzID4+ICgyMC1QQUdFX1NISUZUKSkpID4+IChQQUdFX1NISUZULTExKTsKIAlsaW1pdCA9IG1heChsaW1pdCwgMTI4VUwpOwogCXN5c2N0bF9zY3RwX21lbVswXSA9IGxpbWl0IC8gNCAqIDM7CiAJc3lzY3RsX3NjdHBfbWVtWzFdID0gbGltaXQ7CkBAIC0xMTY1LDcgKzExOTAsNyBAQAogCWxpbWl0ID0gKHN5c2N0bF9zY3RwX21lbVsxXSkgPDwgKFBBR0VfU0hJRlQgLSA3KTsKIAltYXhfc2hhcmUgPSBtaW4oNFVMKjEwMjQqMTAyNCwgbGltaXQpOwogCi0Jc3lzY3RsX3NjdHBfcm1lbVswXSA9IFBBR0VfU0laRTsgLyogZ2l2ZSBlYWNoIGFzb2MgMSBwYWdlIG1pbiAqLworCXN5c2N0bF9zY3RwX3JtZW1bMF0gPSBTS19NRU1fUVVBTlRVTTsgLyogZ2l2ZSBlYWNoIGFzb2MgMSBwYWdlIG1pbiAqLwogCXN5c2N0bF9zY3RwX3JtZW1bMV0gPSAoMTUwMCAqKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikgKyAxKSk7CiAJc3lzY3RsX3NjdHBfcm1lbVsyXSA9IG1heChzeXNjdGxfc2N0cF9ybWVtWzFdLCBtYXhfc2hhcmUpOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggYmJjNzEwNy4uZThjYTRlNSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMjM2NCw4ICsyMzY0LDEzIEBACiAJY2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzoKIAkJaWYgKFBGX0lORVQ2ICE9IGFzb2MtPmJhc2Uuc2stPnNrX2ZhbWlseSkKIAkJCWJyZWFrOwotCQkvKiBGYWxsIHRocm91Z2guICovCisJCWdvdG8gZG9fYWRkcl9wYXJhbTsKKwogCWNhc2UgU0NUUF9QQVJBTV9JUFY0X0FERFJFU1M6CisJCS8qIHY0IGFkZHJlc3NlcyBhcmUgbm90IGFsbG93ZWQgb24gdjYtb25seSBzb2NrZXQgKi8KKwkJaWYgKGlwdjZfb25seV9zb2NrKGFzb2MtPmJhc2Uuc2spKQorCQkJYnJlYWs7Citkb19hZGRyX3BhcmFtOgogCQlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHBhcmFtX3R5cGUyYWYocGFyYW0ucC0+dHlwZSkpOwogCQlhZi0+ZnJvbV9hZGRyX3BhcmFtKCZhZGRyLCBwYXJhbS5hZGRyLCBodG9ucyhhc29jLT5wZWVyLnBvcnQpLCAwKTsKIAkJc2NvcGUgPSBzY3RwX3Njb3BlKHBlZXJfYWRkcik7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKaW5kZXggMjNhOWYxYS4uOTczMmM3OSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCisrKyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwpAQCAtMTkwLDIwICsxOTAsMjggQEAKIAkgKiB1bmFja25vd2xlZGdlZCBEQVRBIGNodW5rLiAuLi4KIAkgKi8KIAlpZiAoIWFzb2MtPnBlZXIuc2Fja19uZWVkZWQpIHsKLQkJLyogV2Ugd2lsbCBuZWVkIGEgU0FDSyBmb3IgdGhlIG5leHQgcGFja2V0LiAgKi8KLQkJYXNvYy0+cGVlci5zYWNrX25lZWRlZCA9IDE7CisJCWFzb2MtPnBlZXIuc2Fja19jbnQrKzsKIAogCQkvKiBTZXQgdGhlIFNBQ0sgZGVsYXkgdGltZW91dCBiYXNlZCBvbiB0aGUKIAkJICogU0FDSyBkZWxheSBmb3IgdGhlIGxhc3QgdHJhbnNwb3J0CiAJCSAqIGRhdGEgd2FzIHJlY2VpdmVkIGZyb20sIG9yIHRoZSBkZWZhdWx0CiAJCSAqIGZvciB0aGUgYXNzb2NpYXRpb24uCiAJCSAqLwotCQlpZiAodHJhbnMpCisJCWlmICh0cmFucykgeworCQkJLyogV2Ugd2lsbCBuZWVkIGEgU0FDSyBmb3IgdGhlIG5leHQgcGFja2V0LiAgKi8KKwkJCWlmIChhc29jLT5wZWVyLnNhY2tfY250ID49IHRyYW5zLT5zYWNrZnJlcSAtIDEpCisJCQkJYXNvYy0+cGVlci5zYWNrX25lZWRlZCA9IDE7CisKIAkJCWFzb2MtPnRpbWVvdXRzW1NDVFBfRVZFTlRfVElNRU9VVF9TQUNLXSA9CiAJCQkJdHJhbnMtPnNhY2tkZWxheTsKLQkJZWxzZQorCQl9IGVsc2UgeworCQkJLyogV2Ugd2lsbCBuZWVkIGEgU0FDSyBmb3IgdGhlIG5leHQgcGFja2V0LiAgKi8KKwkJCWlmIChhc29jLT5wZWVyLnNhY2tfY250ID49IGFzb2MtPnNhY2tmcmVxIC0gMSkKKwkJCQlhc29jLT5wZWVyLnNhY2tfbmVlZGVkID0gMTsKKwogCQkJYXNvYy0+dGltZW91dHNbU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0tdID0KIAkJCQlhc29jLT5zYWNrZGVsYXk7CisJCX0KIAogCQkvKiBSZXN0YXJ0IHRoZSBTQUNLIHRpbWVyLiAqLwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RJTUVSX1JFU1RBUlQsCkBAIC0yMTYsNiArMjI0LDcgQEAKIAkJCWdvdG8gbm9tZW07CiAKIAkJYXNvYy0+cGVlci5zYWNrX25lZWRlZCA9IDA7CisJCWFzb2MtPnBlZXIuc2Fja19jbnQgPSAwOwogCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQTFksIFNDVFBfQ0hVTksoc2FjaykpOwogCkBAIC02NTUsNyArNjY0LDcgQEAKIAkJCQkgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJIHN0cnVjdCBzY3RwX3NhY2toZHIgKnNhY2toKQogewotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAlpZiAoc2N0cF9vdXRxX3NhY2soJmFzb2MtPm91dHF1ZXVlLCBzYWNraCkpIHsKIAkJLyogVGhlcmUgYXJlIG5vIG1vcmUgVFNOcyBhd2FpdGluZyBTQUNLLiAgKi8KQEAgLTY2MywxMSArNjcyLDYgQEAKIAkJCQkgU0NUUF9TVF9PVEhFUihTQ1RQX0VWRU5UX05PX1BFTkRJTkdfVFNOKSwKIAkJCQkgYXNvYy0+c3RhdGUsIGFzb2MtPmVwLCBhc29jLCBOVUxMLAogCQkJCSBHRlBfQVRPTUlDKTsKLQl9IGVsc2UgewotCQkvKiBXaW5kb3dzIG1heSBoYXZlIG9wZW5lZCwgc28gd2UgbmVlZAotCQkgKiB0byBjaGVjayBpZiB3ZSBoYXZlIERBVEEgdG8gdHJhbnNtaXQKLQkJICovCi0JCWVyciA9IHNjdHBfb3V0cV9mbHVzaCgmYXNvYy0+b3V0cXVldWUsIDApOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0xNDcyLDggKzE0NzYsMTUgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0NUUF9DTURfRElTQ0FSRF9QQUNLRVQ6Ci0JCQkvKiBXZSBuZWVkIHRvIGRpc2NhcmQgdGhlIHdob2xlIHBhY2tldC4gICovCisJCQkvKiBXZSBuZWVkIHRvIGRpc2NhcmQgdGhlIHdob2xlIHBhY2tldC4KKwkJCSAqIFVuY29yayB0aGUgcXVldWUgc2luY2UgdGhlcmUgbWlnaHQgYmUKKwkJCSAqIHJlc3BvbnNlcyBwZW5kaW5nCisJCQkgKi8KIAkJCWNodW5rLT5wZGlzY2FyZCA9IDE7CisJCQlpZiAoYXNvYykgeworCQkJCXNjdHBfb3V0cV91bmNvcmsoJmFzb2MtPm91dHF1ZXVlKTsKKwkJCQlsb2NhbF9jb3JrID0gMDsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgU0NUUF9DTURfUlRPX1BFTkRJTkc6CkBAIC0xNTQ0LDggKzE1NTUsMTUgQEAKIAl9CiAKIG91dDoKLQlpZiAobG9jYWxfY29yaykKLQkJc2N0cF9vdXRxX3VuY29yaygmYXNvYy0+b3V0cXVldWUpOworCS8qIElmIHRoaXMgaXMgaW4gcmVzcG9uc2UgdG8gYSByZWNlaXZlZCBjaHVuaywgd2FpdCB1bnRpbAorCSAqIHdlIGFyZSBkb25lIHdpdGggdGhlIHBhY2tldCB0byBvcGVuIHRoZSBxdWV1ZSBzbyB0aGF0IHdlIGRvbid0CisJICogc2VuZCBtdWx0aXBsZSBwYWNrZXRzIGluIHJlc3BvbnNlIHRvIGEgc2luZ2xlIHJlcXVlc3QuCisJICovCisJaWYgKGFzb2MgJiYgU0NUUF9FVkVOVF9UX0NIVU5LID09IGV2ZW50X3R5cGUgJiYgY2h1bmspIHsKKwkJaWYgKGNodW5rLT5lbmRfb2ZfcGFja2V0IHx8IGNodW5rLT5zaW5nbGV0b24pCisJCQlzY3RwX291dHFfdW5jb3JrKCZhc29jLT5vdXRxdWV1ZSk7CisJfSBlbHNlIGlmIChsb2NhbF9jb3JrKQorCQkJc2N0cF9vdXRxX3VuY29yaygmYXNvYy0+b3V0cXVldWUpOwogCXJldHVybiBlcnJvcjsKIG5vbWVtOgogCWVycm9yID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggZmNkYjQ1ZC4uODg0OGQzMiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTc5NSw4ICs3OTUsNiBAQAogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RJTUVSX1NUQVJULAogCQkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX0FVVE9DTE9TRSkpOwogCi0Jc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU01JVCwgU0NUUF9OVUxMKCkpOwotCiAJLyogVGhpcyB3aWxsIHNlbmQgdGhlIENPT0tJRSBBQ0sgKi8KIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1JFUExZLCBTQ1RQX0NIVU5LKHJlcGwpKTsKIApAQCAtODgzLDcgKzg4MSw2IEBACiAJaWYgKGFzb2MtPmF1dG9jbG9zZSkKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9TVEFSVCwKIAkJCQlTQ1RQX1RPKFNDVFBfRVZFTlRfVElNRU9VVF9BVVRPQ0xPU0UpKTsKLQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TTUlULCBTQ1RQX05VTEwoKSk7CiAKIAkvKiBJdCBtYXkgYWxzbyBub3RpZnkgaXRzIFVMUCBhYm91dCB0aGUgc3VjY2Vzc2Z1bAogCSAqIGVzdGFibGlzaG1lbnQgb2YgdGhlIGFzc29jaWF0aW9uIHdpdGggYSBDb21tdW5pY2F0aW9uIFVwCkBAIC0xNzgxLDcgKzE3NzgsNiBAQAogCQlnb3RvIG5vbWVtOwogCiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9SRVBMWSwgU0NUUF9DSFVOSyhyZXBsKSk7Ci0Jc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU01JVCwgU0NUUF9OVUxMKCkpOwogCiAJLyogUkZDIDI5NjAgNS4xIE5vcm1hbCBFc3RhYmxpc2htZW50IG9mIGFuIEFzc29jaWF0aW9uCiAJICoKQEAgLTE4OTgsMTIgKzE4OTQsMTMgQEAKIAogCQl9CiAJfQotCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNNSVQsIFNDVFBfTlVMTCgpKTsKIAogCXJlcGwgPSBzY3RwX21ha2VfY29va2llX2FjayhuZXdfYXNvYywgY2h1bmspOwogCWlmICghcmVwbCkKIAkJZ290byBub21lbTsKIAorCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQTFksIFNDVFBfQ0hVTksocmVwbCkpOworCiAJaWYgKGV2KQogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0VWRU5UX1VMUCwKIAkJCQlTQ1RQX1VMUEVWRU5UKGV2KSk7CkBAIC0xOTExLDkgKzE5MDgsNiBAQAogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0VWRU5UX1VMUCwKIAkJCQkJU0NUUF9VTFBFVkVOVChhaV9ldikpOwogCi0Jc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9SRVBMWSwgU0NUUF9DSFVOSyhyZXBsKSk7Ci0Jc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU01JVCwgU0NUUF9OVUxMKCkpOwotCiAJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTsKIAogbm9tZW06CkBAIC0zOTcwLDkgKzM5NjQsNiBAQAogCQlyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiAJCWJyZWFrOwogCWNhc2UgU0NUUF9DSURfQUNUSU9OX0RJU0NBUkRfRVJSOgotCQkvKiBEaXNjYXJkIHRoZSBwYWNrZXQuICAqLwotCQlzY3RwX3NmX3BkaXNjYXJkKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKLQogCQkvKiBHZW5lcmF0ZSBhbiBFUlJPUiBjaHVuayBhcyByZXNwb25zZS4gKi8KIAkJaGRyID0gdW5rX2NodW5rLT5jaHVua19oZHI7CiAJCWVycl9jaHVuayA9IHNjdHBfbWFrZV9vcF9lcnJvcihhc29jLCB1bmtfY2h1bmssCkBAIC0zOTgyLDYgKzM5NzMsOSBAQAogCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9SRVBMWSwKIAkJCQkJU0NUUF9DSFVOSyhlcnJfY2h1bmspKTsKIAkJfQorCisJCS8qIERpc2NhcmQgdGhlIHBhY2tldC4gICovCisJCXNjdHBfc2ZfcGRpc2NhcmQoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOwogCQlicmVhazsKIAljYXNlIFNDVFBfQ0lEX0FDVElPTl9TS0lQOgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCAwZGJjZGU2Li43OWJlY2UxIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMTE2LDcgKzExNiw3IEBACiBzdGF0aWMgYXRvbWljX3Qgc2N0cF9tZW1vcnlfYWxsb2NhdGVkOwogc3RhdGljIGF0b21pY190IHNjdHBfc29ja2V0c19hbGxvY2F0ZWQ7CiAKLXN0YXRpYyB2b2lkIHNjdHBfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHZvaWQpCitzdGF0aWMgdm9pZCBzY3RwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc2N0cF9tZW1vcnlfcHJlc3N1cmUgPSAxOwogfQpAQCAtMzA4LDkgKzMwOCwxNiBAQAogCWlmIChsZW4gPCBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcikpCiAJCXJldHVybiBOVUxMOwogCi0JLyogRG9lcyB0aGlzIFBGIHN1cHBvcnQgdGhpcyBBRj8gKi8KLQlpZiAoIW9wdC0+cGYtPmFmX3N1cHBvcnRlZChhZGRyLT5zYS5zYV9mYW1pbHksIG9wdCkpCi0JCXJldHVybiBOVUxMOworCS8qIFY0IG1hcHBlZCBhZGRyZXNzIGFyZSByZWFsbHkgb2YgQUZfSU5FVCBmYW1pbHkgKi8KKwlpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2ICYmCisJICAgIGlwdjZfYWRkcl92NG1hcHBlZCgmYWRkci0+djYuc2luNl9hZGRyKSkgeworCQlpZiAoIW9wdC0+cGYtPmFmX3N1cHBvcnRlZChBRl9JTkVULCBvcHQpKQorCQkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIHsKKwkJLyogRG9lcyB0aGlzIFBGIHN1cHBvcnQgdGhpcyBBRj8gKi8KKwkJaWYgKCFvcHQtPnBmLT5hZl9zdXBwb3J0ZWQoYWRkci0+c2Euc2FfZmFtaWx5LCBvcHQpKQorCQkJcmV0dXJuIE5VTEw7CisJfQogCiAJLyogSWYgd2UgZ2V0IHRoaXMgZmFyLCBhZiBpcyB2YWxpZC4gKi8KIAlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKGFkZHItPnNhLnNhX2ZhbWlseSk7CkBAIC0zNzAsMTggKzM3NywxOSBAQAogCWlmIChzbnVtICYmIHNudW0gPCBQUk9UX1NPQ0sgJiYgIWNhcGFibGUoQ0FQX05FVF9CSU5EX1NFUlZJQ0UpKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAorCS8qIFNlZSBpZiB0aGUgYWRkcmVzcyBtYXRjaGVzIGFueSBvZiB0aGUgYWRkcmVzc2VzIHdlIG1heSBoYXZlCisJICogYWxyZWFkeSBib3VuZCBiZWZvcmUgY2hlY2tpbmcgYWdhaW5zdCBvdGhlciBlbmRwb2ludHMuCisJICovCisJaWYgKHNjdHBfYmluZF9hZGRyX21hdGNoKGJwLCBhZGRyLCBzcCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogTWFrZSBzdXJlIHdlIGFyZSBhbGxvd2VkIHRvIGJpbmQgaGVyZS4KIAkgKiBUaGUgZnVuY3Rpb24gc2N0cF9nZXRfcG9ydF9sb2NhbCgpIGRvZXMgZHVwbGljYXRlIGFkZHJlc3MKIAkgKiBkZXRlY3Rpb24uCiAJICovCiAJYWRkci0+djQuc2luX3BvcnQgPSBodG9ucyhzbnVtKTsKIAlpZiAoKHJldCA9IHNjdHBfZ2V0X3BvcnRfbG9jYWwoc2ssIGFkZHIpKSkgewotCQlpZiAocmV0ID09IChsb25nKSBzaykgewotCQkJLyogVGhpcyBlbmRwb2ludCBoYXMgYSBjb25mbGljdGluZyBhZGRyZXNzLiAqLwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVBRERSSU5VU0U7Ci0JCX0KKwkJcmV0dXJuIC1FQUREUklOVVNFOwogCX0KIAogCS8qIFJlZnJlc2ggZXBoZW1lcmFsIHBvcnQuICAqLwpAQCAtOTU2LDcgKzk2NCw4IEBACiAgKi8KIHN0YXRpYyBpbnQgX19zY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2sqIHNrLAogCQkJICBzdHJ1Y3Qgc29ja2FkZHIgKmthZGRycywKLQkJCSAgaW50IGFkZHJzX3NpemUpCisJCQkgIGludCBhZGRyc19zaXplLAorCQkJICBzY3RwX2Fzc29jX3QgKmFzc29jX2lkKQogewogCXN0cnVjdCBzY3RwX3NvY2sgKnNwOwogCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcDsKQEAgLTExMTEsNiArMTEyMCw4IEBACiAJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmX2ZsYWdzICYgT19OT05CTE9DSyk7CiAKIAllcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgJnRpbWVvKTsKKwlpZiAoIWVyciAmJiBhc3NvY19pZCkKKwkJKmFzc29jX2lkID0gYXNvYy0+YXNzb2NfaWQ7CiAKIAkvKiBEb24ndCBmcmVlIGFzc29jaWF0aW9uIG9uIGV4aXQuICovCiAJYXNvYyA9IE5VTEw7CkBAIC0xMTI4LDcgKzExMzksOCBAQAogLyogSGVscGVyIGZvciB0dW5uZWxpbmcgc2N0cF9jb25uZWN0eCgpIHJlcXVlc3RzIHRocm91Z2ggc2N0cF9zZXRzb2Nrb3B0KCkKICAqCiAgKiBBUEkgOC45Ci0gKiBpbnQgc2N0cF9jb25uZWN0eChpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqYWRkcnMsIGludCBhZGRyY250KTsKKyAqIGludCBzY3RwX2Nvbm5lY3R4KGludCBzZCwgc3RydWN0IHNvY2thZGRyICphZGRycywgaW50IGFkZHJjbnQsCisgKiAJCQlzY3RwX2Fzc29jX3QgKmFzb2MpOwogICoKICAqIElmIHNkIGlzIGFuIElQdjQgc29ja2V0LCB0aGUgYWRkcmVzc2VzIHBhc3NlZCBtdXN0IGJlIElQdjQgYWRkcmVzc2VzLgogICogSWYgdGhlIHNkIGlzIGFuIElQdjYgc29ja2V0LCB0aGUgYWRkcmVzc2VzIHBhc3NlZCBjYW4gZWl0aGVyIGJlIElQdjQKQEAgLTExNDQsOCArMTE1NiwxMCBAQAogICogcmVwcmVzZW50YXRpb24gaXMgdGVybWVkIGEgInBhY2tlZCBhcnJheSIgb2YgYWRkcmVzc2VzKS4gVGhlIGNhbGxlcgogICogc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYWRkcmVzc2VzIGluIHRoZSBhcnJheSB3aXRoIGFkZHJjbnQuCiAgKgotICogT24gc3VjY2Vzcywgc2N0cF9jb25uZWN0eCgpIHJldHVybnMgMC4gT24gZmFpbHVyZSwgc2N0cF9jb25uZWN0eCgpIHJldHVybnMKLSAqIC0xLCBhbmQgc2V0cyBlcnJubyB0byB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4KKyAqIE9uIHN1Y2Nlc3MsIHNjdHBfY29ubmVjdHgoKSByZXR1cm5zIDAuIEl0IGFsc28gc2V0cyB0aGUgYXNzb2NfaWQgdG8KKyAqIHRoZSBhc3NvY2lhdGlvbiBpZCBvZiB0aGUgbmV3IGFzc29jaWF0aW9uLiAgT24gZmFpbHVyZSwgc2N0cF9jb25uZWN0eCgpCisgKiByZXR1cm5zIC0xLCBhbmQgc2V0cyBlcnJubyB0byB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4gIFRoZSBhc3NvY19pZAorICogaXMgbm90IHRvdWNoZWQgYnkgdGhlIGtlcm5lbC4KICAqCiAgKiBGb3IgU0NUUCwgdGhlIHBvcnQgZ2l2ZW4gaW4gZWFjaCBzb2NrZXQgYWRkcmVzcyBtdXN0IGJlIHRoZSBzYW1lLCBvcgogICogc2N0cF9jb25uZWN0eCgpIHdpbGwgZmFpbCwgc2V0dGluZyBlcnJubyB0byBFSU5WQUwuCkBAIC0xMTgyLDExICsxMTk2LDEyIEBACiAgKiBhZGRycyAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIGFkZHJlc3NlcyBpbiB1c2VyIGxhbmQKICAqIGFkZHJzc2l6ZSBTaXplIG9mIHRoZSBhZGRycyBidWZmZXIKICAqCi0gKiBSZXR1cm5zIDAgaWYgb2ssIDwwIGVycm5vIGNvZGUgb24gZXJyb3IuCisgKiBSZXR1cm5zID49MCBpZiBvaywgPDAgZXJybm8gY29kZSBvbiBlcnJvci4KICAqLwotU0NUUF9TVEFUSUMgaW50IHNjdHBfc2V0c29ja29wdF9jb25uZWN0eChzdHJ1Y3Qgc29jayogc2ssCitTQ1RQX1NUQVRJQyBpbnQgX19zY3RwX3NldHNvY2tvcHRfY29ubmVjdHgoc3RydWN0IHNvY2sqIHNrLAogCQkJCSAgICAgIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKmFkZHJzLAotCQkJCSAgICAgIGludCBhZGRyc19zaXplKQorCQkJCSAgICAgIGludCBhZGRyc19zaXplLAorCQkJCSAgICAgIHNjdHBfYXNzb2NfdCAqYXNzb2NfaWQpCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IHNvY2thZGRyICprYWRkcnM7CkBAIC0xMjA5LDEzICsxMjI0LDQ2IEBACiAJaWYgKF9fY29weV9mcm9tX3VzZXIoa2FkZHJzLCBhZGRycywgYWRkcnNfc2l6ZSkpIHsKIAkJZXJyID0gLUVGQVVMVDsKIAl9IGVsc2UgewotCQllcnIgPSBfX3NjdHBfY29ubmVjdChzaywga2FkZHJzLCBhZGRyc19zaXplKTsKKwkJZXJyID0gX19zY3RwX2Nvbm5lY3Qoc2ssIGthZGRycywgYWRkcnNfc2l6ZSwgYXNzb2NfaWQpOwogCX0KIAogCWtmcmVlKGthZGRycyk7CisKIAlyZXR1cm4gZXJyOwogfQogCisvKgorICogVGhpcyBpcyBhbiBvbGRlciBpbnRlcmZhY2UuICBJdCdzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAqIHRvIHRoZSBvcHRpb24gdGhhdCBkb2Vzbid0IHByb3ZpZGUgYXNzb2NpYXRpb24gaWQuCisgKi8KK1NDVFBfU1RBVElDIGludCBzY3RwX3NldHNvY2tvcHRfY29ubmVjdHhfb2xkKHN0cnVjdCBzb2NrKiBzaywKKwkJCQkgICAgICBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICphZGRycywKKwkJCQkgICAgICBpbnQgYWRkcnNfc2l6ZSkKK3sKKwlyZXR1cm4gX19zY3RwX3NldHNvY2tvcHRfY29ubmVjdHgoc2ssIGFkZHJzLCBhZGRyc19zaXplLCBOVUxMKTsKK30KKworLyoKKyAqIE5ldyBpbnRlcmZhY2UgZm9yIHRoZSBBUEkuICBUaGUgc2luY2UgdGhlIEFQSSBpcyBkb25lIHdpdGggYSBzb2NrZXQKKyAqIG9wdGlvbiwgdG8gbWFrZSBpdCBzaW1wbGUgd2UgZmVlZCBiYWNrIHRoZSBhc3NvY2lhdGlvbiBpZCBpcyBhcyBhIHJldHVybgorICogaW5kaWNhdGlvbiB0byB0aGUgY2FsbC4gIEVycm9yIGlzIGFsd2F5cyBuZWdhdGl2ZSBhbmQgYXNzb2NpYXRpb24gaWQgaXMKKyAqIGFsd2F5cyBwb3NpdGl2ZS4KKyAqLworU0NUUF9TVEFUSUMgaW50IHNjdHBfc2V0c29ja29wdF9jb25uZWN0eChzdHJ1Y3Qgc29jayogc2ssCisJCQkJICAgICAgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqYWRkcnMsCisJCQkJICAgICAgaW50IGFkZHJzX3NpemUpCit7CisJc2N0cF9hc3NvY190IGFzc29jX2lkID0gMDsKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IF9fc2N0cF9zZXRzb2Nrb3B0X2Nvbm5lY3R4KHNrLCBhZGRycywgYWRkcnNfc2l6ZSwgJmFzc29jX2lkKTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQlyZXR1cm4gYXNzb2NfaWQ7Cit9CisKIC8qIEFQSSAzLjEuNCBjbG9zZSgpIC0gVURQIFN0eWxlIFN5bnRheAogICogQXBwbGljYXRpb25zIHVzZSBjbG9zZSgpIHRvIHBlcmZvcm0gZ3JhY2VmdWwgc2h1dGRvd24gKGFzIGRlc2NyaWJlZCBpbgogICogU2VjdGlvbiAxMC4xIG9mIFtTQ1RQXSkgb24gQUxMIHRoZSBhc3NvY2lhdGlvbnMgY3VycmVudGx5IHJlcHJlc2VudGVkCkBAIC0yMzA1LDc0ICsyMzUzLDk4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIDcuMS4yMy4gRGVsYXllZCBBY2sgVGltZXIgKFNDVFBfREVMQVlFRF9BQ0tfVElNRSkKKy8qCisgKiA3LjEuMjMuICBHZXQgb3Igc2V0IGRlbGF5ZWQgYWNrIHRpbWVyIChTQ1RQX0RFTEFZRURfU0FDSykKICAqCi0gKiAgIFRoaXMgb3B0aW9ucyB3aWxsIGdldCBvciBzZXQgdGhlIGRlbGF5ZWQgYWNrIHRpbWVyLiAgVGhlIHRpbWUgaXMgc2V0Ci0gKiAgIGluIG1pbGxpc2Vjb25kcy4gIElmIHRoZSBhc3NvY19pZCBpcyAwLCB0aGVuIHRoaXMgc2V0cyBvciBnZXRzIHRoZQotICogICBlbmRwb2ludHMgZGVmYXVsdCBkZWxheWVkIGFjayB0aW1lciB2YWx1ZS4gIElmIHRoZSBhc3NvY19pZCBmaWVsZCBpcwotICogICBub24temVybywgdGhlbiB0aGUgc2V0IG9yIGdldCBlZmZlY3RzIHRoZSBzcGVjaWZpZWQgYXNzb2NpYXRpb24uCisgKiBUaGlzIG9wdGlvbiB3aWxsIGVmZmVjdCB0aGUgd2F5IGRlbGF5ZWQgYWNrcyBhcmUgcGVyZm9ybWVkLiAgVGhpcworICogb3B0aW9uIGFsbG93cyB5b3UgdG8gZ2V0IG9yIHNldCB0aGUgZGVsYXllZCBhY2sgdGltZSwgaW4KKyAqIG1pbGxpc2Vjb25kcy4gIEl0IGFsc28gYWxsb3dzIGNoYW5naW5nIHRoZSBkZWxheWVkIGFjayBmcmVxdWVuY3kuCisgKiBDaGFuZ2luZyB0aGUgZnJlcXVlbmN5IHRvIDEgZGlzYWJsZXMgdGhlIGRlbGF5ZWQgc2FjayBhbGdvcml0aG0uICBJZgorICogdGhlIGFzc29jX2lkIGlzIDAsIHRoZW4gdGhpcyBzZXRzIG9yIGdldHMgdGhlIGVuZHBvaW50cyBkZWZhdWx0CisgKiB2YWx1ZXMuICBJZiB0aGUgYXNzb2NfaWQgZmllbGQgaXMgbm9uLXplcm8sIHRoZW4gdGhlIHNldCBvciBnZXQKKyAqIGVmZmVjdHMgdGhlIHNwZWNpZmllZCBhc3NvY2lhdGlvbiBmb3IgdGhlIG9uZSB0byBtYW55IG1vZGVsICh0aGUKKyAqIGFzc29jX2lkIGZpZWxkIGlzIGlnbm9yZWQgYnkgdGhlIG9uZSB0byBvbmUgbW9kZWwpLiAgTm90ZSB0aGF0IGlmCisgKiBzYWNrX2RlbGF5IG9yIHNhY2tfZnJlcSBhcmUgMCB3aGVuIHNldHRpbmcgdGhpcyBvcHRpb24sIHRoZW4gdGhlCisgKiBjdXJyZW50IHZhbHVlcyB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuCiAgKgotICogICBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB7Ci0gKiAgICAgICBzY3RwX2Fzc29jX3QgICAgICAgICAgICBhc3NvY19pZDsKLSAqICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGFzc29jX3ZhbHVlOwotICogICB9OworICogc3RydWN0IHNjdHBfc2Fja19pbmZvIHsKKyAqICAgICBzY3RwX2Fzc29jX3QgICAgICAgICAgICBzYWNrX2Fzc29jX2lkOworICogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHNhY2tfZGVsYXk7CisgKiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgc2Fja19mcmVxOworICogfTsKICAqCi0gKiAgICAgYXNzb2NfaWQgICAgLSBUaGlzIHBhcmFtZXRlciwgaW5kaWNhdGVzIHdoaWNoIGFzc29jaWF0aW9uIHRoZQotICogICAgICAgICAgICAgICAgICAgdXNlciBpcyBwcmVmb3JtaW5nIGFuIGFjdGlvbiB1cG9uLiBOb3RlIHRoYXQgaWYKLSAqICAgICAgICAgICAgICAgICAgIHRoaXMgZmllbGQncyB2YWx1ZSBpcyB6ZXJvIHRoZW4gdGhlIGVuZHBvaW50cwotICogICAgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBpcyBjaGFuZ2VkIChlZmZlY3RpbmcgZnV0dXJlCi0gKiAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMgb25seSkuCisgKiBzYWNrX2Fzc29jX2lkIC0gIFRoaXMgcGFyYW1ldGVyLCBpbmRpY2F0ZXMgd2hpY2ggYXNzb2NpYXRpb24gdGhlIHVzZXIKKyAqICAgIGlzIHBlcmZvcm1pbmcgYW4gYWN0aW9uIHVwb24uICBOb3RlIHRoYXQgaWYgdGhpcyBmaWVsZCdzIHZhbHVlIGlzCisgKiAgICB6ZXJvIHRoZW4gdGhlIGVuZHBvaW50cyBkZWZhdWx0IHZhbHVlIGlzIGNoYW5nZWQgKGVmZmVjdGluZyBmdXR1cmUKKyAqICAgIGFzc29jaWF0aW9ucyBvbmx5KS4KICAqCi0gKiAgICAgYXNzb2NfdmFsdWUgLSBUaGlzIHBhcmFtZXRlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcwotICogICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgdXNlciBpcyByZXF1ZXN0aW5nIHRoZSBkZWxheWVkIEFDSyB0aW1lcgotICogICAgICAgICAgICAgICAgICAgYmUgc2V0IHRvLiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyBkZWZpbmVkIGluCi0gKiAgICAgICAgICAgICAgICAgICB0aGUgc3RhbmRhcmQgdG8gYmUgYmV0d2VlbiAyMDAgYW5kIDUwMCBtaWxsaXNlY29uZHMuCisgKiBzYWNrX2RlbGF5IC0gIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQKKyAqICAgIHRoZSB1c2VyIGlzIHJlcXVlc3RpbmcgdGhlIGRlbGF5ZWQgQUNLIHRpbWVyIGJlIHNldCB0by4gIE5vdGUgdGhhdAorICogICAgdGhpcyB2YWx1ZSBpcyBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZCB0byBiZSBiZXR3ZWVuIDIwMCBhbmQgNTAwCisgKiAgICBtaWxsaXNlY29uZHMuCiAgKgotICogICAgICAgICAgICAgICAgICAgTm90ZTogYSB2YWx1ZSBvZiB6ZXJvIHdpbGwgbGVhdmUgdGhlIHZhbHVlIGFsb25lLAotICogICAgICAgICAgICAgICAgICAgYnV0IGRpc2FibGUgU0FDSyBkZWxheS4gQSBub24temVybyB2YWx1ZSB3aWxsIGFsc28KLSAqICAgICAgICAgICAgICAgICAgIGVuYWJsZSBTQUNLIGRlbGF5LgorICogc2Fja19mcmVxIC0gIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IG11c3QKKyAqICAgIGJlIHJlY2VpdmVkIGJlZm9yZSBhIHNhY2sgaXMgc2VudCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBkZWxheQorICogICAgdGltZXIgdG8gZXhwaXJlLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgMiwgc2V0dGluZyB0aGlzCisgKiAgICB2YWx1ZSB0byAxIHdpbGwgZGlzYWJsZSB0aGUgZGVsYXllZCBzYWNrIGFsZ29yaXRobS4KICAqLwogCi1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2Fja190aW1lKHN0cnVjdCBzb2NrICpzaywKK3N0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2RlbGF5ZWRfYWNrKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7Ci0Jc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgIHBhcmFtczsKKwlzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8gICAgcGFyYW1zOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAgICp0cmFucyA9IE5VTEw7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSBOVUxMOwogCXN0cnVjdCBzY3RwX3NvY2sgICAgICAgICpzcCA9IHNjdHBfc2soc2spOwogCi0JaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKQorCWlmIChvcHRsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfaW5mbykpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbXMsIG9wdHZhbCwgb3B0bGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChwYXJhbXMuc2Fja19kZWxheSA9PSAwICYmIHBhcmFtcy5zYWNrX2ZyZXEgPT0gMCkKKwkJCXJldHVybiAwOworCX0gZWxzZSBpZiAob3B0bGVuID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0NUUDogVXNlIG9mIHN0cnVjdCBzY3RwX3NhY2tfaW5mbyAiCisJCSAgICAgICAiaW4gZGVsYXllZF9hY2sgc29ja2V0IG9wdGlvbiBkZXByZWNhdGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0NUUDogc3RydWN0IHNjdHBfc2Fja19pbmZvIGluc3RlYWRcbiIpOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnBhcmFtcywgb3B0dmFsLCBvcHRsZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHBhcmFtcy5zYWNrX2RlbGF5ID09IDApCisJCQlwYXJhbXMuc2Fja19mcmVxID0gMTsKKwkJZWxzZQorCQkJcGFyYW1zLnNhY2tfZnJlcSA9IDA7CisJfSBlbHNlCiAJCXJldHVybiAtIEVJTlZBTDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCiAJLyogVmFsaWRhdGUgdmFsdWUgcGFyYW1ldGVyLiAqLwotCWlmIChwYXJhbXMuYXNzb2NfdmFsdWUgPiA1MDApCisJaWYgKHBhcmFtcy5zYWNrX2RlbGF5ID4gNTAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEdldCBhc3NvY2lhdGlvbiwgaWYgYXNzb2NfaWQgIT0gMCBhbmQgdGhlIHNvY2tldCBpcyBhIG9uZQorCS8qIEdldCBhc3NvY2lhdGlvbiwgaWYgc2Fja19hc3NvY19pZCAhPSAwIGFuZCB0aGUgc29ja2V0IGlzIGEgb25lCiAJICogdG8gbWFueSBzdHlsZSBzb2NrZXQsIGFuZCBhbiBhc3NvY2lhdGlvbiB3YXMgbm90IGZvdW5kLCB0aGVuCiAJICogdGhlIGlkIHdhcyBpbnZhbGlkLgogCSAqLwotCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuYXNzb2NfaWQpOwotCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgJiYgc2N0cF9zdHlsZShzaywgVURQKSkKKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLnNhY2tfYXNzb2NfaWQpOworCWlmICghYXNvYyAmJiBwYXJhbXMuc2Fja19hc3NvY19pZCAmJiBzY3RwX3N0eWxlKHNrLCBVRFApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChwYXJhbXMuYXNzb2NfdmFsdWUpIHsKKwlpZiAocGFyYW1zLnNhY2tfZGVsYXkpIHsKIAkJaWYgKGFzb2MpIHsKIAkJCWFzb2MtPnNhY2tkZWxheSA9Ci0JCQkJbXNlY3NfdG9famlmZmllcyhwYXJhbXMuYXNzb2NfdmFsdWUpOworCQkJCW1zZWNzX3RvX2ppZmZpZXMocGFyYW1zLnNhY2tfZGVsYXkpOwogCQkJYXNvYy0+cGFyYW1fZmxhZ3MgPQogCQkJCShhc29jLT5wYXJhbV9mbGFncyAmIH5TUFBfU0FDS0RFTEFZKSB8CiAJCQkJU1BQX1NBQ0tERUxBWV9FTkFCTEU7CiAJCX0gZWxzZSB7Ci0JCQlzcC0+c2Fja2RlbGF5ID0gcGFyYW1zLmFzc29jX3ZhbHVlOworCQkJc3AtPnNhY2tkZWxheSA9IHBhcmFtcy5zYWNrX2RlbGF5OwogCQkJc3AtPnBhcmFtX2ZsYWdzID0KIAkJCQkoc3AtPnBhcmFtX2ZsYWdzICYgflNQUF9TQUNLREVMQVkpIHwKIAkJCQlTUFBfU0FDS0RFTEFZX0VOQUJMRTsKIAkJfQotCX0gZWxzZSB7CisJfQorCisJaWYgKHBhcmFtcy5zYWNrX2ZyZXEgPT0gMSkgewogCQlpZiAoYXNvYykgewogCQkJYXNvYy0+cGFyYW1fZmxhZ3MgPQogCQkJCShhc29jLT5wYXJhbV9mbGFncyAmIH5TUFBfU0FDS0RFTEFZKSB8CkBAIC0yMzgyLDIyICsyNDU0LDQwIEBACiAJCQkJKHNwLT5wYXJhbV9mbGFncyAmIH5TUFBfU0FDS0RFTEFZKSB8CiAJCQkJU1BQX1NBQ0tERUxBWV9ESVNBQkxFOwogCQl9CisJfSBlbHNlIGlmIChwYXJhbXMuc2Fja19mcmVxID4gMSkgeworCQlpZiAoYXNvYykgeworCQkJYXNvYy0+c2Fja2ZyZXEgPSBwYXJhbXMuc2Fja19mcmVxOworCQkJYXNvYy0+cGFyYW1fZmxhZ3MgPQorCQkJCShhc29jLT5wYXJhbV9mbGFncyAmIH5TUFBfU0FDS0RFTEFZKSB8CisJCQkJU1BQX1NBQ0tERUxBWV9FTkFCTEU7CisJCX0gZWxzZSB7CisJCQlzcC0+c2Fja2ZyZXEgPSBwYXJhbXMuc2Fja19mcmVxOworCQkJc3AtPnBhcmFtX2ZsYWdzID0KKwkJCQkoc3AtPnBhcmFtX2ZsYWdzICYgflNQUF9TQUNLREVMQVkpIHwKKwkJCQlTUFBfU0FDS0RFTEFZX0VOQUJMRTsKKwkJfQogCX0KIAogCS8qIElmIGNoYW5nZSBpcyBmb3IgYXNzb2NpYXRpb24sIGFsc28gYXBwbHkgdG8gZWFjaCB0cmFuc3BvcnQuICovCiAJaWYgKGFzb2MpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKIAkJCQl0cmFuc3BvcnRzKSB7Ci0JCQlpZiAocGFyYW1zLmFzc29jX3ZhbHVlKSB7CisJCQlpZiAocGFyYW1zLnNhY2tfZGVsYXkpIHsKIAkJCQl0cmFucy0+c2Fja2RlbGF5ID0KLQkJCQkJbXNlY3NfdG9famlmZmllcyhwYXJhbXMuYXNzb2NfdmFsdWUpOworCQkJCQltc2Vjc190b19qaWZmaWVzKHBhcmFtcy5zYWNrX2RlbGF5KTsKIAkJCQl0cmFucy0+cGFyYW1fZmxhZ3MgPQogCQkJCQkodHJhbnMtPnBhcmFtX2ZsYWdzICYgflNQUF9TQUNLREVMQVkpIHwKIAkJCQkJU1BQX1NBQ0tERUxBWV9FTkFCTEU7Ci0JCQl9IGVsc2UgeworCQkJfQorCQkJaWYgKHBhcmFtcy5zYWNrX2ZyZXEgPT0gMSkgewogCQkJCXRyYW5zLT5wYXJhbV9mbGFncyA9CiAJCQkJCSh0cmFucy0+cGFyYW1fZmxhZ3MgJiB+U1BQX1NBQ0tERUxBWSkgfAogCQkJCQlTUFBfU0FDS0RFTEFZX0RJU0FCTEU7CisJCQl9IGVsc2UgaWYgKHBhcmFtcy5zYWNrX2ZyZXEgPiAxKSB7CisJCQkJdHJhbnMtPnNhY2tmcmVxID0gcGFyYW1zLnNhY2tfZnJlcTsKKwkJCQl0cmFucy0+cGFyYW1fZmxhZ3MgPQorCQkJCQkodHJhbnMtPnBhcmFtX2ZsYWdzICYgflNQUF9TQUNLREVMQVkpIHwKKwkJCQkJU1BQX1NBQ0tERUxBWV9FTkFCTEU7CiAJCQl9CiAJCX0KIAl9CkBAIC0zMTY0LDEwICszMjU0LDE4IEBACiAJCQkJCSAgICAgICBvcHRsZW4sIFNDVFBfQklORFhfUkVNX0FERFIpOwogCQlicmVhazsKIAorCWNhc2UgU0NUUF9TT0NLT1BUX0NPTk5FQ1RYX09MRDoKKwkJLyogJ29wdGxlbicgaXMgdGhlIHNpemUgb2YgdGhlIGFkZHJlc3NlcyBidWZmZXIuICovCisJCXJldHZhbCA9IHNjdHBfc2V0c29ja29wdF9jb25uZWN0eF9vbGQoc2ssCisJCQkJCSAgICAoc3RydWN0IHNvY2thZGRyIF9fdXNlciAqKW9wdHZhbCwKKwkJCQkJICAgIG9wdGxlbik7CisJCWJyZWFrOworCiAJY2FzZSBTQ1RQX1NPQ0tPUFRfQ09OTkVDVFg6CiAJCS8qICdvcHRsZW4nIGlzIHRoZSBzaXplIG9mIHRoZSBhZGRyZXNzZXMgYnVmZmVyLiAqLwotCQlyZXR2YWwgPSBzY3RwX3NldHNvY2tvcHRfY29ubmVjdHgoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICopb3B0dmFsLAotCQkJCQkgICAgICAgb3B0bGVuKTsKKwkJcmV0dmFsID0gc2N0cF9zZXRzb2Nrb3B0X2Nvbm5lY3R4KHNrLAorCQkJCQkgICAgKHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKilvcHR2YWwsCisJCQkJCSAgICBvcHRsZW4pOwogCQlicmVhazsKIAogCWNhc2UgU0NUUF9ESVNBQkxFX0ZSQUdNRU5UUzoKQEAgLTMxODYsOCArMzI4NCw4IEBACiAJCXJldHZhbCA9IHNjdHBfc2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHNrLCBvcHR2YWwsIG9wdGxlbik7CiAJCWJyZWFrOwogCi0JY2FzZSBTQ1RQX0RFTEFZRURfQUNLX1RJTUU6Ci0JCXJldHZhbCA9IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2Fja190aW1lKHNrLCBvcHR2YWwsIG9wdGxlbik7CisJY2FzZSBTQ1RQX0RFTEFZRURfQUNLOgorCQlyZXR2YWwgPSBzY3RwX3NldHNvY2tvcHRfZGVsYXllZF9hY2soc2ssIG9wdHZhbCwgb3B0bGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfUE9JTlQ6CiAJCXJldHZhbCA9IHNjdHBfc2V0c29ja29wdF9wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50KHNrLCBvcHR2YWwsIG9wdGxlbik7CkBAIC0zMjk0LDcgKzMzOTIsNyBAQAogCQkvKiBQYXNzIGNvcnJlY3QgYWRkciBsZW4gdG8gY29tbW9uIHJvdXRpbmUgKHNvIGl0IGtub3dzIHRoZXJlCiAJCSAqIGlzIG9ubHkgb25lIGFkZHJlc3MgYmVpbmcgcGFzc2VkLgogCQkgKi8KLQkJZXJyID0gX19zY3RwX2Nvbm5lY3Qoc2ssIGFkZHIsIGFmLT5zb2NrYWRkcl9sZW4pOworCQllcnIgPSBfX3NjdHBfY29ubmVjdChzaywgYWRkciwgYWYtPnNvY2thZGRyX2xlbiwgTlVMTCk7CiAJfQogCiAJc2N0cF9yZWxlYXNlX3NvY2soc2spOwpAQCAtMzQ0Niw2ICszNTQ0LDcgQEAKIAlzcC0+cGF0aG1heHJ4dCAgPSBzY3RwX21heF9yZXRyYW5zX3BhdGg7CiAJc3AtPnBhdGhtdHUgICAgID0gMDsgLy8gYWxsb3cgZGVmYXVsdCBkaXNjb3ZlcnkKIAlzcC0+c2Fja2RlbGF5ICAgPSBzY3RwX3NhY2tfdGltZW91dDsKKwlzcC0+c2Fja2ZyZXEJPSAyOwogCXNwLT5wYXJhbV9mbGFncyA9IFNQUF9IQl9FTkFCTEUgfAogCQkJICBTUFBfUE1UVURfRU5BQkxFIHwKIAkJCSAgU1BQX1NBQ0tERUxBWV9FTkFCTEU7CkBAIC0zNDk3LDcgKzM1OTYsNyBAQAogfQogCiAvKiBDbGVhbnVwIGFueSBTQ1RQIHBlciBzb2NrZXQgcmVzb3VyY2VzLiAgKi8KLVNDVFBfU1RBVElDIGludCBzY3RwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCitTQ1RQX1NUQVRJQyB2b2lkIHNjdHBfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXA7CiAKQEAgLTM1MDcsNyArMzYwNiw2IEBACiAJZXAgPSBzY3RwX3NrKHNrKS0+ZXA7CiAJc2N0cF9lbmRwb2ludF9mcmVlKGVwKTsKIAlhdG9taWNfZGVjKCZzY3RwX3NvY2tldHNfYWxsb2NhdGVkKTsKLQlyZXR1cm4gMDsKIH0KIAogLyogQVBJIDQuMS43IHNodXRkb3duKCkgLSBUQ1AgU3R5bGUgU3ludGF4CkBAIC0zOTk5LDcwICs0MDk3LDkxIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIDcuMS4yMy4gRGVsYXllZCBBY2sgVGltZXIgKFNDVFBfREVMQVlFRF9BQ0tfVElNRSkKKy8qCisgKiA3LjEuMjMuICBHZXQgb3Igc2V0IGRlbGF5ZWQgYWNrIHRpbWVyIChTQ1RQX0RFTEFZRURfU0FDSykKICAqCi0gKiAgIFRoaXMgb3B0aW9ucyB3aWxsIGdldCBvciBzZXQgdGhlIGRlbGF5ZWQgYWNrIHRpbWVyLiAgVGhlIHRpbWUgaXMgc2V0Ci0gKiAgIGluIG1pbGxpc2Vjb25kcy4gIElmIHRoZSBhc3NvY19pZCBpcyAwLCB0aGVuIHRoaXMgc2V0cyBvciBnZXRzIHRoZQotICogICBlbmRwb2ludHMgZGVmYXVsdCBkZWxheWVkIGFjayB0aW1lciB2YWx1ZS4gIElmIHRoZSBhc3NvY19pZCBmaWVsZCBpcwotICogICBub24temVybywgdGhlbiB0aGUgc2V0IG9yIGdldCBlZmZlY3RzIHRoZSBzcGVjaWZpZWQgYXNzb2NpYXRpb24uCisgKiBUaGlzIG9wdGlvbiB3aWxsIGVmZmVjdCB0aGUgd2F5IGRlbGF5ZWQgYWNrcyBhcmUgcGVyZm9ybWVkLiAgVGhpcworICogb3B0aW9uIGFsbG93cyB5b3UgdG8gZ2V0IG9yIHNldCB0aGUgZGVsYXllZCBhY2sgdGltZSwgaW4KKyAqIG1pbGxpc2Vjb25kcy4gIEl0IGFsc28gYWxsb3dzIGNoYW5naW5nIHRoZSBkZWxheWVkIGFjayBmcmVxdWVuY3kuCisgKiBDaGFuZ2luZyB0aGUgZnJlcXVlbmN5IHRvIDEgZGlzYWJsZXMgdGhlIGRlbGF5ZWQgc2FjayBhbGdvcml0aG0uICBJZgorICogdGhlIGFzc29jX2lkIGlzIDAsIHRoZW4gdGhpcyBzZXRzIG9yIGdldHMgdGhlIGVuZHBvaW50cyBkZWZhdWx0CisgKiB2YWx1ZXMuICBJZiB0aGUgYXNzb2NfaWQgZmllbGQgaXMgbm9uLXplcm8sIHRoZW4gdGhlIHNldCBvciBnZXQKKyAqIGVmZmVjdHMgdGhlIHNwZWNpZmllZCBhc3NvY2lhdGlvbiBmb3IgdGhlIG9uZSB0byBtYW55IG1vZGVsICh0aGUKKyAqIGFzc29jX2lkIGZpZWxkIGlzIGlnbm9yZWQgYnkgdGhlIG9uZSB0byBvbmUgbW9kZWwpLiAgTm90ZSB0aGF0IGlmCisgKiBzYWNrX2RlbGF5IG9yIHNhY2tfZnJlcSBhcmUgMCB3aGVuIHNldHRpbmcgdGhpcyBvcHRpb24sIHRoZW4gdGhlCisgKiBjdXJyZW50IHZhbHVlcyB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuCiAgKgotICogICBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB7Ci0gKiAgICAgICBzY3RwX2Fzc29jX3QgICAgICAgICAgICBhc3NvY19pZDsKLSAqICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGFzc29jX3ZhbHVlOwotICogICB9OworICogc3RydWN0IHNjdHBfc2Fja19pbmZvIHsKKyAqICAgICBzY3RwX2Fzc29jX3QgICAgICAgICAgICBzYWNrX2Fzc29jX2lkOworICogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHNhY2tfZGVsYXk7CisgKiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgc2Fja19mcmVxOworICogfTsKICAqCi0gKiAgICAgYXNzb2NfaWQgICAgLSBUaGlzIHBhcmFtZXRlciwgaW5kaWNhdGVzIHdoaWNoIGFzc29jaWF0aW9uIHRoZQotICogICAgICAgICAgICAgICAgICAgdXNlciBpcyBwcmVmb3JtaW5nIGFuIGFjdGlvbiB1cG9uLiBOb3RlIHRoYXQgaWYKLSAqICAgICAgICAgICAgICAgICAgIHRoaXMgZmllbGQncyB2YWx1ZSBpcyB6ZXJvIHRoZW4gdGhlIGVuZHBvaW50cwotICogICAgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBpcyBjaGFuZ2VkIChlZmZlY3RpbmcgZnV0dXJlCi0gKiAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMgb25seSkuCisgKiBzYWNrX2Fzc29jX2lkIC0gIFRoaXMgcGFyYW1ldGVyLCBpbmRpY2F0ZXMgd2hpY2ggYXNzb2NpYXRpb24gdGhlIHVzZXIKKyAqICAgIGlzIHBlcmZvcm1pbmcgYW4gYWN0aW9uIHVwb24uICBOb3RlIHRoYXQgaWYgdGhpcyBmaWVsZCdzIHZhbHVlIGlzCisgKiAgICB6ZXJvIHRoZW4gdGhlIGVuZHBvaW50cyBkZWZhdWx0IHZhbHVlIGlzIGNoYW5nZWQgKGVmZmVjdGluZyBmdXR1cmUKKyAqICAgIGFzc29jaWF0aW9ucyBvbmx5KS4KICAqCi0gKiAgICAgYXNzb2NfdmFsdWUgLSBUaGlzIHBhcmFtZXRlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcwotICogICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgdXNlciBpcyByZXF1ZXN0aW5nIHRoZSBkZWxheWVkIEFDSyB0aW1lcgotICogICAgICAgICAgICAgICAgICAgYmUgc2V0IHRvLiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyBkZWZpbmVkIGluCi0gKiAgICAgICAgICAgICAgICAgICB0aGUgc3RhbmRhcmQgdG8gYmUgYmV0d2VlbiAyMDAgYW5kIDUwMCBtaWxsaXNlY29uZHMuCisgKiBzYWNrX2RlbGF5IC0gIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQKKyAqICAgIHRoZSB1c2VyIGlzIHJlcXVlc3RpbmcgdGhlIGRlbGF5ZWQgQUNLIHRpbWVyIGJlIHNldCB0by4gIE5vdGUgdGhhdAorICogICAgdGhpcyB2YWx1ZSBpcyBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZCB0byBiZSBiZXR3ZWVuIDIwMCBhbmQgNTAwCisgKiAgICBtaWxsaXNlY29uZHMuCiAgKgotICogICAgICAgICAgICAgICAgICAgTm90ZTogYSB2YWx1ZSBvZiB6ZXJvIHdpbGwgbGVhdmUgdGhlIHZhbHVlIGFsb25lLAotICogICAgICAgICAgICAgICAgICAgYnV0IGRpc2FibGUgU0FDSyBkZWxheS4gQSBub24temVybyB2YWx1ZSB3aWxsIGFsc28KLSAqICAgICAgICAgICAgICAgICAgIGVuYWJsZSBTQUNLIGRlbGF5LgorICogc2Fja19mcmVxIC0gIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IG11c3QKKyAqICAgIGJlIHJlY2VpdmVkIGJlZm9yZSBhIHNhY2sgaXMgc2VudCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBkZWxheQorICogICAgdGltZXIgdG8gZXhwaXJlLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgMiwgc2V0dGluZyB0aGlzCisgKiAgICB2YWx1ZSB0byAxIHdpbGwgZGlzYWJsZSB0aGUgZGVsYXllZCBzYWNrIGFsZ29yaXRobS4KICAqLwotc3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfZGVsYXllZF9hY2tfdGltZShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCitzdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCiAJCQkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLAogCQkJCQkgICAgaW50IF9fdXNlciAqb3B0bGVuKQogewotCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICBwYXJhbXM7CisJc3RydWN0IHNjdHBfc2Fja19pbmZvICAgIHBhcmFtczsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IE5VTEw7CiAJc3RydWN0IHNjdHBfc29jayAgICAgICAgKnNwID0gc2N0cF9zayhzayk7CiAKLQlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkKKwlpZiAobGVuID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8pKSB7CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8pOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIGxlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgaWYgKGxlbiA9PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNDVFA6IFVzZSBvZiBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8gIgorCQkgICAgICAgImluIGRlbGF5ZWRfYWNrIHNvY2tldCBvcHRpb24gZGVwcmVjYXRlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNDVFA6IHN0cnVjdCBzY3RwX3NhY2tfaW5mbyBpbnN0ZWFkXG4iKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbXMsIG9wdHZhbCwgbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZQogCQlyZXR1cm4gLSBFSU5WQUw7CiAKLQlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbXMsIG9wdHZhbCwgbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBHZXQgYXNzb2NpYXRpb24sIGlmIGFzc29jX2lkICE9IDAgYW5kIHRoZSBzb2NrZXQgaXMgYSBvbmUKKwkvKiBHZXQgYXNzb2NpYXRpb24sIGlmIHNhY2tfYXNzb2NfaWQgIT0gMCBhbmQgdGhlIHNvY2tldCBpcyBhIG9uZQogCSAqIHRvIG1hbnkgc3R5bGUgc29ja2V0LCBhbmQgYW4gYXNzb2NpYXRpb24gd2FzIG5vdCBmb3VuZCwgdGhlbgogCSAqIHRoZSBpZCB3YXMgaW52YWxpZC4KIAkgKi8KLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsKLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkICYmIHNjdHBfc3R5bGUoc2ssIFVEUCkpCisJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy5zYWNrX2Fzc29jX2lkKTsKKwlpZiAoIWFzb2MgJiYgcGFyYW1zLnNhY2tfYXNzb2NfaWQgJiYgc2N0cF9zdHlsZShzaywgVURQKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXNvYykgewogCQkvKiBGZXRjaCBhc3NvY2lhdGlvbiB2YWx1ZXMuICovCi0JCWlmIChhc29jLT5wYXJhbV9mbGFncyAmIFNQUF9TQUNLREVMQVlfRU5BQkxFKQotCQkJcGFyYW1zLmFzc29jX3ZhbHVlID0gamlmZmllc190b19tc2VjcygKKwkJaWYgKGFzb2MtPnBhcmFtX2ZsYWdzICYgU1BQX1NBQ0tERUxBWV9FTkFCTEUpIHsKKwkJCXBhcmFtcy5zYWNrX2RlbGF5ID0gamlmZmllc190b19tc2VjcygKIAkJCQlhc29jLT5zYWNrZGVsYXkpOwotCQllbHNlCi0JCQlwYXJhbXMuYXNzb2NfdmFsdWUgPSAwOworCQkJcGFyYW1zLnNhY2tfZnJlcSA9IGFzb2MtPnNhY2tmcmVxOworCisJCX0gZWxzZSB7CisJCQlwYXJhbXMuc2Fja19kZWxheSA9IDA7CisJCQlwYXJhbXMuc2Fja19mcmVxID0gMTsKKwkJfQogCX0gZWxzZSB7CiAJCS8qIEZldGNoIHNvY2tldCB2YWx1ZXMuICovCi0JCWlmIChzcC0+cGFyYW1fZmxhZ3MgJiBTUFBfU0FDS0RFTEFZX0VOQUJMRSkKLQkJCXBhcmFtcy5hc3NvY192YWx1ZSAgPSBzcC0+c2Fja2RlbGF5OwotCQllbHNlCi0JCQlwYXJhbXMuYXNzb2NfdmFsdWUgID0gMDsKKwkJaWYgKHNwLT5wYXJhbV9mbGFncyAmIFNQUF9TQUNLREVMQVlfRU5BQkxFKSB7CisJCQlwYXJhbXMuc2Fja19kZWxheSAgPSBzcC0+c2Fja2RlbGF5OworCQkJcGFyYW1zLnNhY2tfZnJlcSA9IHNwLT5zYWNrZnJlcTsKKwkJfSBlbHNlIHsKKwkJCXBhcmFtcy5zYWNrX2RlbGF5ICA9IDA7CisJCQlwYXJhbXMuc2Fja19mcmVxID0gMTsKKwkJfQogCX0KIAogCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmcGFyYW1zLCBsZW4pKQpAQCAtNDExMiw2ICs0MjMxLDggQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmlkLCBvcHR2YWwsIHNpemVvZihzY3RwX2Fzc29jX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKKwlwcmludGsoS0VSTl9XQVJOSU5HICJTQ1RQOiBVc2Ugb2YgU0NUUF9HRVRfUEVFUl9BRERSU19OVU1fT0xEICIKKwkJCSAgICAic29ja2V0IG9wdGlvbiBkZXByZWNhdGVkXG4iKTsKIAkvKiBGb3IgVURQLXN0eWxlIHNvY2tldHMsIGlkIHNwZWNpZmllcyB0aGUgYXNzb2NpYXRpb24gdG8gcXVlcnkuICAqLwogCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBpZCk7CiAJaWYgKCFhc29jKQpAQCAtNDE1MSw2ICs0MjcyLDkgQEAKIAogCWlmIChnZXRhZGRycy5hZGRyX251bSA8PSAwKSByZXR1cm4gLUVJTlZBTDsKIAorCXByaW50ayhLRVJOX1dBUk5JTkcgIlNDVFA6IFVzZSBvZiBTQ1RQX0dFVF9QRUVSX0FERFJTX09MRCAiCisJCQkgICAgInNvY2tldCBvcHRpb24gZGVwcmVjYXRlZFxuIik7CisKIAkvKiBGb3IgVURQLXN0eWxlIHNvY2tldHMsIGlkIHNwZWNpZmllcyB0aGUgYXNzb2NpYXRpb24gdG8gcXVlcnkuICAqLwogCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBnZXRhZGRycy5hc3NvY19pZCk7CiAJaWYgKCFhc29jKQpAQCAtNDI0NCw2ICs0MzY4LDkgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmlkLCBvcHR2YWwsIHNpemVvZihzY3RwX2Fzc29jX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKKwlwcmludGsoS0VSTl9XQVJOSU5HICJTQ1RQOiBVc2Ugb2YgU0NUUF9HRVRfTE9DQUxfQUREUlNfTlVNX09MRCAiCisJCQkgICAgInNvY2tldCBvcHRpb24gZGVwcmVjYXRlZFxuIik7CisKIAkvKgogCSAqICBGb3IgVURQLXN0eWxlIHNvY2tldHMsIGlkIHNwZWNpZmllcyB0aGUgYXNzb2NpYXRpb24gdG8gcXVlcnkuCiAJICogIElmIHRoZSBpZCBmaWVsZCBpcyBzZXQgdG8gdGhlIHZhbHVlICcwJyB0aGVuIHRoZSBsb2NhbGx5IGJvdW5kCkBAIC00Mjc2LDYgKzQ0MDMsMTEgQEAKIAkJCQkgICAgKEFGX0lORVQ2ID09IGFkZHItPmEuc2Euc2FfZmFtaWx5KSkKIAkJCQkJY29udGludWU7CiAKKwkJCQlpZiAoKFBGX0lORVQ2ID09IHNrLT5za19mYW1pbHkpICYmCisJCQkJICAgIGluZXRfdjZfaXB2Nm9ubHkoc2spICYmCisJCQkJICAgIChBRl9JTkVUID09IGFkZHItPmEuc2Euc2FfZmFtaWx5KSkKKwkJCQkJY29udGludWU7CisKIAkJCQljbnQrKzsKIAkJCX0KIAkJCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtNDMxNiw2ICs0NDQ4LDEwIEBACiAJCWlmICgoUEZfSU5FVCA9PSBzay0+c2tfZmFtaWx5KSAmJgogCQkgICAgKEFGX0lORVQ2ID09IGFkZHItPmEuc2Euc2FfZmFtaWx5KSkKIAkJCWNvbnRpbnVlOworCQlpZiAoKFBGX0lORVQ2ID09IHNrLT5za19mYW1pbHkpICYmCisJCSAgICBpbmV0X3Y2X2lwdjZvbmx5KHNrKSAmJgorCQkgICAgKEFGX0lORVQgPT0gYWRkci0+YS5zYS5zYV9mYW1pbHkpKQorCQkJY29udGludWU7CiAJCW1lbWNweSgmdGVtcCwgJmFkZHItPmEsIHNpemVvZih0ZW1wKSk7CiAJCWlmICghdGVtcC52NC5zaW5fcG9ydCkKIAkJCXRlbXAudjQuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKQEAgLTQzNTEsNiArNDQ4NywxMCBAQAogCQlpZiAoKFBGX0lORVQgPT0gc2stPnNrX2ZhbWlseSkgJiYKIAkJICAgIChBRl9JTkVUNiA9PSBhZGRyLT5hLnNhLnNhX2ZhbWlseSkpCiAJCQljb250aW51ZTsKKwkJaWYgKChQRl9JTkVUNiA9PSBzay0+c2tfZmFtaWx5KSAmJgorCQkgICAgaW5ldF92Nl9pcHY2b25seShzaykgJiYKKwkJICAgIChBRl9JTkVUID09IGFkZHItPmEuc2Euc2FfZmFtaWx5KSkKKwkJCWNvbnRpbnVlOwogCQltZW1jcHkoJnRlbXAsICZhZGRyLT5hLCBzaXplb2YodGVtcCkpOwogCQlpZiAoIXRlbXAudjQuc2luX3BvcnQpCiAJCQl0ZW1wLnY0LnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CkBAIC00NDA0LDYgKzQ1NDQsMTAgQEAKIAlpZiAoZ2V0YWRkcnMuYWRkcl9udW0gPD0gMCB8fAogCSAgICBnZXRhZGRycy5hZGRyX251bSA+PSAoSU5UX01BWCAvIHNpemVvZih1bmlvbiBzY3RwX2FkZHIpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJTQ1RQOiBVc2Ugb2YgU0NUUF9HRVRfTE9DQUxfQUREUlNfT0xEICIKKwkJCSAgICAic29ja2V0IG9wdGlvbiBkZXByZWNhdGVkXG4iKTsKKwogCS8qCiAJICogIEZvciBVRFAtc3R5bGUgc29ja2V0cywgaWQgc3BlY2lmaWVzIHRoZSBhc3NvY2lhdGlvbiB0byBxdWVyeS4KIAkgKiAgSWYgdGhlIGlkIGZpZWxkIGlzIHNldCB0byB0aGUgdmFsdWUgJzAnIHRoZW4gdGhlIGxvY2FsbHkgYm91bmQKQEAgLTUyMjAsOCArNTM2NCw4IEBACiAJCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHNrLCBsZW4sIG9wdHZhbCwKIAkJCQkJCQkgIG9wdGxlbik7CiAJCWJyZWFrOwotCWNhc2UgU0NUUF9ERUxBWUVEX0FDS19USU1FOgotCQlyZXR2YWwgPSBzY3RwX2dldHNvY2tvcHRfZGVsYXllZF9hY2tfdGltZShzaywgbGVuLCBvcHR2YWwsCisJY2FzZSBTQ1RQX0RFTEFZRURfQUNLOgorCQlyZXR2YWwgPSBzY3RwX2dldHNvY2tvcHRfZGVsYXllZF9hY2soc2ssIGxlbiwgb3B0dmFsLAogCQkJCQkJCSAgb3B0bGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX0lOSVRNU0c6CkBAIC01NDQxLDEyICs1NTg1LDEzIEBACiAJCQlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAyOwogCQkJZXAyID0gc2N0cF9zayhzazIpLT5lcDsKIAotCQkJaWYgKHJldXNlICYmIHNrMi0+c2tfcmV1c2UgJiYKLQkJCSAgICBzazItPnNrX3N0YXRlICE9IFNDVFBfU1NfTElTVEVOSU5HKQorCQkJaWYgKHNrID09IHNrMiB8fAorCQkJICAgIChyZXVzZSAmJiBzazItPnNrX3JldXNlICYmCisJCQkgICAgIHNrMi0+c2tfc3RhdGUgIT0gU0NUUF9TU19MSVNURU5JTkcpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoc2N0cF9iaW5kX2FkZHJfbWF0Y2goJmVwMi0+YmFzZS5iaW5kX2FkZHIsIGFkZHIsCi0JCQkJCQkgc2N0cF9zayhzaykpKSB7CisJCQlpZiAoc2N0cF9iaW5kX2FkZHJfY29uZmxpY3QoJmVwMi0+YmFzZS5iaW5kX2FkZHIsIGFkZHIsCisJCQkJCQkgc2N0cF9zayhzazIpLCBzY3RwX3NrKHNrKSkpIHsKIAkJCQlyZXQgPSAobG9uZylzazI7CiAJCQkJZ290byBmYWlsX3VubG9jazsKIAkJCX0KQEAgLTU1NTksOCArNTcwNCwxMyBAQAogCWlmICghZXAtPmJhc2UuYmluZF9hZGRyLnBvcnQpIHsKIAkJaWYgKHNjdHBfYXV0b2JpbmQoc2spKQogCQkJcmV0dXJuIC1FQUdBSU47Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJaWYgKHNjdHBfZ2V0X3BvcnQoc2ssIGluZXRfc2soc2spLT5udW0pKSB7CisJCQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0NMT1NFRDsKKwkJCXJldHVybiAtRUFERFJJTlVTRTsKKwkJfQogCQlzY3RwX3NrKHNrKS0+YmluZF9oYXNoLT5mYXN0cmV1c2UgPSAwOworCX0KIAogCXNjdHBfaGFzaF9lbmRwb2ludChlcCk7CiAJcmV0dXJuIDA7CkBAIC01NjMwLDcgKzU3ODAsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIEFsbG9jYXRlIEhNQUMgZm9yIGdlbmVyYXRpbmcgY29va2llLiAqLwotCWlmIChzY3RwX2htYWNfYWxnKSB7CisJaWYgKCFzY3RwX3NrKHNrKS0+aG1hYyAmJiBzY3RwX2htYWNfYWxnKSB7CiAJCXRmbSA9IGNyeXB0b19hbGxvY19oYXNoKHNjdHBfaG1hY19hbGcsIDAsIENSWVBUT19BTEdfQVNZTkMpOwogCQlpZiAoSVNfRVJSKHRmbSkpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKQEAgLTU2NTgsNyArNTgwOCw4IEBACiAJCWdvdG8gY2xlYW51cDsKIAogCS8qIFN0b3JlIGF3YXkgdGhlIHRyYW5zZm9ybSByZWZlcmVuY2UuICovCi0Jc2N0cF9zayhzayktPmhtYWMgPSB0Zm07CisJaWYgKCFzY3RwX3NrKHNrKS0+aG1hYykKKwkJc2N0cF9zayhzayktPmhtYWMgPSB0Zm07CiBvdXQ6CiAJc2N0cF9yZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC90cmFuc3BvcnQuYyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCmluZGV4IDNmMzRmNjEuLmU3NDVjMTEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCkBAIC0xMDAsNiArMTAwLDkgQEAKIAlJTklUX0xJU1RfSEVBRCgmcGVlci0+c2VuZF9yZWFkeSk7CiAJSU5JVF9MSVNUX0hFQUQoJnBlZXItPnRyYW5zcG9ydHMpOwogCisJcGVlci0+VDNfcnR4X3RpbWVyLmV4cGlyZXMgPSAwOworCXBlZXItPmhiX3RpbWVyLmV4cGlyZXMgPSAwOworCiAJc2V0dXBfdGltZXIoJnBlZXItPlQzX3J0eF90aW1lciwgc2N0cF9nZW5lcmF0ZV90M19ydHhfZXZlbnQsCiAJCQkodW5zaWduZWQgbG9uZylwZWVyKTsKIAlzZXR1cF90aW1lcigmcGVlci0+aGJfdGltZXIsIHNjdHBfZ2VuZXJhdGVfaGVhcnRiZWF0X2V2ZW50LApkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDY2YzRhOGMuLjFiYTU3ZDggMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTkwLDYgKzkwLDcgQEAKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKICNpbmNsdWRlIDxuZXQvY29tcGF0Lmg+CisjaW5jbHVkZSA8bmV0L3dleHQuaD4KIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CkBAIC0xNzksOSArMTgwLDkgQEAKICAqCWludmFsaWQgYWRkcmVzc2VzIC1FRkFVTFQgaXMgcmV0dXJuZWQuIE9uIGEgc3VjY2VzcyAwIGlzIHJldHVybmVkLgogICovCiAKLWludCBtb3ZlX2FkZHJfdG9fa2VybmVsKHZvaWQgX191c2VyICp1YWRkciwgaW50IHVsZW4sIHZvaWQgKmthZGRyKQoraW50IG1vdmVfYWRkcl90b19rZXJuZWwodm9pZCBfX3VzZXIgKnVhZGRyLCBpbnQgdWxlbiwgc3RydWN0IHNvY2thZGRyICprYWRkcikKIHsKLQlpZiAodWxlbiA8IDAgfHwgdWxlbiA+IE1BWF9TT0NLX0FERFIpCisJaWYgKHVsZW4gPCAwIHx8IHVsZW4gPiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodWxlbiA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTIwNyw3ICsyMDgsNyBAQAogICoJc3BlY2lmaWVkLiBaZXJvIGlzIHJldHVybmVkIGZvciBhIHN1Y2Nlc3MuCiAgKi8KIAotaW50IG1vdmVfYWRkcl90b191c2VyKHZvaWQgKmthZGRyLCBpbnQga2xlbiwgdm9pZCBfX3VzZXIgKnVhZGRyLAoraW50IG1vdmVfYWRkcl90b191c2VyKHN0cnVjdCBzb2NrYWRkciAqa2FkZHIsIGludCBrbGVuLCB2b2lkIF9fdXNlciAqdWFkZHIsCiAJCSAgICAgIGludCBfX3VzZXIgKnVsZW4pCiB7CiAJaW50IGVycjsKQEAgLTIxOCw3ICsyMTksNyBAQAogCQlyZXR1cm4gZXJyOwogCWlmIChsZW4gPiBrbGVuKQogCQlsZW4gPSBrbGVuOwotCWlmIChsZW4gPCAwIHx8IGxlbiA+IE1BWF9TT0NLX0FERFIpCisJaWYgKGxlbiA8IDAgfHwgbGVuID4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGxlbikgewogCQlpZiAoYXVkaXRfc29ja2FkZHIoa2xlbiwga2FkZHIpKQpAQCAtMTM0MSwyMCArMTM0MiwyMCBAQAogYXNtbGlua2FnZSBsb25nIHN5c19iaW5kKGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdW15YWRkciwgaW50IGFkZHJsZW4pCiB7CiAJc3RydWN0IHNvY2tldCAqc29jazsKLQljaGFyIGFkZHJlc3NbTUFYX1NPQ0tfQUREUl07CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcmVzczsKIAlpbnQgZXJyLCBmcHV0X25lZWRlZDsKIAogCXNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpOwogCWlmIChzb2NrKSB7Ci0JCWVyciA9IG1vdmVfYWRkcl90b19rZXJuZWwodW15YWRkciwgYWRkcmxlbiwgYWRkcmVzcyk7CisJCWVyciA9IG1vdmVfYWRkcl90b19rZXJuZWwodW15YWRkciwgYWRkcmxlbiwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzKTsKIAkJaWYgKGVyciA+PSAwKSB7CiAJCQllcnIgPSBzZWN1cml0eV9zb2NrZXRfYmluZChzb2NrLAotCQkJCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsCisJCQkJCQkgICAoc3RydWN0IHNvY2thZGRyICopJmFkZHJlc3MsCiAJCQkJCQkgICBhZGRybGVuKTsKIAkJCWlmICghZXJyKQogCQkJCWVyciA9IHNvY2stPm9wcy0+YmluZChzb2NrLAogCQkJCQkJICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKQotCQkJCQkJICAgICAgYWRkcmVzcywgYWRkcmxlbik7CisJCQkJCQkgICAgICAmYWRkcmVzcywgYWRkcmxlbik7CiAJCX0KIAkJZnB1dF9saWdodChzb2NrLT5maWxlLCBmcHV0X25lZWRlZCk7CiAJfQpAQCAtMTQwNiw3ICsxNDA3LDcgQEAKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAqbmV3c29jazsKIAlzdHJ1Y3QgZmlsZSAqbmV3ZmlsZTsKIAlpbnQgZXJyLCBsZW4sIG5ld2ZkLCBmcHV0X25lZWRlZDsKLQljaGFyIGFkZHJlc3NbTUFYX1NPQ0tfQUREUl07CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcmVzczsKIAogCXNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpOwogCWlmICghc29jaykKQEAgLTE0NDUsMTMgKzE0NDYsMTMgQEAKIAkJZ290byBvdXRfZmQ7CiAKIAlpZiAodXBlZXJfc29ja2FkZHIpIHsKLQkJaWYgKG5ld3NvY2stPm9wcy0+Z2V0bmFtZShuZXdzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywKKwkJaWYgKG5ld3NvY2stPm9wcy0+Z2V0bmFtZShuZXdzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHJlc3MsCiAJCQkJCSAgJmxlbiwgMikgPCAwKSB7CiAJCQllcnIgPSAtRUNPTk5BQk9SVEVEOwogCQkJZ290byBvdXRfZmQ7CiAJCX0KLQkJZXJyID0gbW92ZV9hZGRyX3RvX3VzZXIoYWRkcmVzcywgbGVuLCB1cGVlcl9zb2NrYWRkciwKLQkJCQkJdXBlZXJfYWRkcmxlbik7CisJCWVyciA9IG1vdmVfYWRkcl90b191c2VyKChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmVzcywKKwkJCQkJbGVuLCB1cGVlcl9zb2NrYWRkciwgdXBlZXJfYWRkcmxlbik7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXRfZmQ7CiAJfQpAQCAtMTQ5NCwyMiArMTQ5NSwyMiBAQAogCQkJICAgIGludCBhZGRybGVuKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JY2hhciBhZGRyZXNzW01BWF9TT0NLX0FERFJdOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJlc3M7CiAJaW50IGVyciwgZnB1dF9uZWVkZWQ7CiAKIAlzb2NrID0gc29ja2ZkX2xvb2t1cF9saWdodChmZCwgJmVyciwgJmZwdXRfbmVlZGVkKTsKIAlpZiAoIXNvY2spCiAJCWdvdG8gb3V0OwotCWVyciA9IG1vdmVfYWRkcl90b19rZXJuZWwodXNlcnZhZGRyLCBhZGRybGVuLCBhZGRyZXNzKTsKKwllcnIgPSBtb3ZlX2FkZHJfdG9fa2VybmVsKHVzZXJ2YWRkciwgYWRkcmxlbiwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfcHV0OwogCiAJZXJyID0KLQkgICAgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pOworCSAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHJlc3MsIGFkZHJsZW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3B1dDsKIAotCWVyciA9IHNvY2stPm9wcy0+Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbiwKKwllcnIgPSBzb2NrLT5vcHMtPmNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzLCBhZGRybGVuLAogCQkJCSBzb2NrLT5maWxlLT5mX2ZsYWdzKTsKIG91dF9wdXQ6CiAJZnB1dF9saWdodChzb2NrLT5maWxlLCBmcHV0X25lZWRlZCk7CkBAIC0xNTI2LDcgKzE1MjcsNyBAQAogCQkJCWludCBfX3VzZXIgKnVzb2NrYWRkcl9sZW4pCiB7CiAJc3RydWN0IHNvY2tldCAqc29jazsKLQljaGFyIGFkZHJlc3NbTUFYX1NPQ0tfQUREUl07CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcmVzczsKIAlpbnQgbGVuLCBlcnIsIGZwdXRfbmVlZGVkOwogCiAJc29jayA9IHNvY2tmZF9sb29rdXBfbGlnaHQoZmQsICZlcnIsICZmcHV0X25lZWRlZCk7CkBAIC0xNTM3LDEwICsxNTM4LDEwIEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfcHV0OwogCi0JZXJyID0gc29jay0+b3BzLT5nZXRuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCAmbGVuLCAwKTsKKwllcnIgPSBzb2NrLT5vcHMtPmdldG5hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzLCAmbGVuLCAwKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9wdXQ7Ci0JZXJyID0gbW92ZV9hZGRyX3RvX3VzZXIoYWRkcmVzcywgbGVuLCB1c29ja2FkZHIsIHVzb2NrYWRkcl9sZW4pOworCWVyciA9IG1vdmVfYWRkcl90b191c2VyKChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmVzcywgbGVuLCB1c29ja2FkZHIsIHVzb2NrYWRkcl9sZW4pOwogCiBvdXRfcHV0OgogCWZwdXRfbGlnaHQoc29jay0+ZmlsZSwgZnB1dF9uZWVkZWQpOwpAQCAtMTU1Nyw3ICsxNTU4LDcgQEAKIAkJCQlpbnQgX191c2VyICp1c29ja2FkZHJfbGVuKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JY2hhciBhZGRyZXNzW01BWF9TT0NLX0FERFJdOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJlc3M7CiAJaW50IGxlbiwgZXJyLCBmcHV0X25lZWRlZDsKIAogCXNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpOwpAQCAtMTU2OSwxMCArMTU3MCwxMCBAQAogCQl9CiAKIAkJZXJyID0KLQkJICAgIHNvY2stPm9wcy0+Z2V0bmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgJmxlbiwKKwkJICAgIHNvY2stPm9wcy0+Z2V0bmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHJlc3MsICZsZW4sCiAJCQkJICAgICAgIDEpOwogCQlpZiAoIWVycikKLQkJCWVyciA9IG1vdmVfYWRkcl90b191c2VyKGFkZHJlc3MsIGxlbiwgdXNvY2thZGRyLAorCQkJZXJyID0gbW92ZV9hZGRyX3RvX3VzZXIoKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzLCBsZW4sIHVzb2NrYWRkciwKIAkJCQkJCXVzb2NrYWRkcl9sZW4pOwogCQlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIAl9CkBAIC0xNTkwLDcgKzE1OTEsNyBAQAogCQkJICAgaW50IGFkZHJfbGVuKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JY2hhciBhZGRyZXNzW01BWF9TT0NLX0FERFJdOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJlc3M7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbXNnaGRyIG1zZzsKIAlzdHJ1Y3QgaW92ZWMgaW92OwpAQCAtMTYwOSwxMCArMTYxMCwxMCBAQAogCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CiAJbXNnLm1zZ19uYW1lbGVuID0gMDsKIAlpZiAoYWRkcikgewotCQllcnIgPSBtb3ZlX2FkZHJfdG9fa2VybmVsKGFkZHIsIGFkZHJfbGVuLCBhZGRyZXNzKTsKKwkJZXJyID0gbW92ZV9hZGRyX3RvX2tlcm5lbChhZGRyLCBhZGRyX2xlbiwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dF9wdXQ7Ci0JCW1zZy5tc2dfbmFtZSA9IGFkZHJlc3M7CisJCW1zZy5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmVzczsKIAkJbXNnLm1zZ19uYW1lbGVuID0gYWRkcl9sZW47CiAJfQogCWlmIChzb2NrLT5maWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKQEAgLTE2NDgsNyArMTY0OSw3IEBACiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlzdHJ1Y3QgaW92ZWMgaW92OwogCXN0cnVjdCBtc2doZHIgbXNnOwotCWNoYXIgYWRkcmVzc1tNQVhfU09DS19BRERSXTsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyZXNzOwogCWludCBlcnIsIGVycjI7CiAJaW50IGZwdXRfbmVlZGVkOwogCkBAIC0xNjYyLDE0ICsxNjYzLDE1IEBACiAJbXNnLm1zZ19pb3YgPSAmaW92OwogCWlvdi5pb3ZfbGVuID0gc2l6ZTsKIAlpb3YuaW92X2Jhc2UgPSB1YnVmOwotCW1zZy5tc2dfbmFtZSA9IGFkZHJlc3M7Ci0JbXNnLm1zZ19uYW1lbGVuID0gTUFYX1NPQ0tfQUREUjsKKwltc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHJlc3M7CisJbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKGFkZHJlc3MpOwogCWlmIChzb2NrLT5maWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJZmxhZ3MgfD0gTVNHX0RPTlRXQUlUOwogCWVyciA9IHNvY2tfcmVjdm1zZyhzb2NrLCAmbXNnLCBzaXplLCBmbGFncyk7CiAKIAlpZiAoZXJyID49IDAgJiYgYWRkciAhPSBOVUxMKSB7Ci0JCWVycjIgPSBtb3ZlX2FkZHJfdG9fdXNlcihhZGRyZXNzLCBtc2cubXNnX25hbWVsZW4sIGFkZHIsIGFkZHJfbGVuKTsKKwkJZXJyMiA9IG1vdmVfYWRkcl90b191c2VyKChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmVzcywKKwkJCQkJIG1zZy5tc2dfbmFtZWxlbiwgYWRkciwgYWRkcl9sZW4pOwogCQlpZiAoZXJyMiA8IDApCiAJCQllcnIgPSBlcnIyOwogCX0KQEAgLTE3ODksNyArMTc5MSw3IEBACiAJc3RydWN0IGNvbXBhdF9tc2doZHIgX191c2VyICptc2dfY29tcGF0ID0KIAkgICAgKHN0cnVjdCBjb21wYXRfbXNnaGRyIF9fdXNlciAqKW1zZzsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCWNoYXIgYWRkcmVzc1tNQVhfU09DS19BRERSXTsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyZXNzOwogCXN0cnVjdCBpb3ZlYyBpb3ZzdGFja1tVSU9fRkFTVElPVl0sICppb3YgPSBpb3ZzdGFjazsKIAl1bnNpZ25lZCBjaGFyIGN0bFtzaXplb2Yoc3RydWN0IGNtc2doZHIpICsgMjBdCiAJICAgIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKHNpemVvZihfX2tlcm5lbF9zaXplX3QpKSkpOwpAQCAtMTgyNyw5ICsxODI5LDEzIEBACiAKIAkvKiBUaGlzIHdpbGwgYWxzbyBtb3ZlIHRoZSBhZGRyZXNzIGRhdGEgaW50byBrZXJuZWwgc3BhY2UgKi8KIAlpZiAoTVNHX0NNU0dfQ09NUEFUICYgZmxhZ3MpIHsKLQkJZXJyID0gdmVyaWZ5X2NvbXBhdF9pb3ZlYygmbXNnX3N5cywgaW92LCBhZGRyZXNzLCBWRVJJRllfUkVBRCk7CisJCWVyciA9IHZlcmlmeV9jb21wYXRfaW92ZWMoJm1zZ19zeXMsIGlvdiwKKwkJCQkJICAoc3RydWN0IHNvY2thZGRyICopJmFkZHJlc3MsCisJCQkJCSAgVkVSSUZZX1JFQUQpOwogCX0gZWxzZQotCQllcnIgPSB2ZXJpZnlfaW92ZWMoJm1zZ19zeXMsIGlvdiwgYWRkcmVzcywgVkVSSUZZX1JFQUQpOworCQllcnIgPSB2ZXJpZnlfaW92ZWMoJm1zZ19zeXMsIGlvdiwKKwkJCQkgICAoc3RydWN0IHNvY2thZGRyICopJmFkZHJlc3MsCisJCQkJICAgVkVSSUZZX1JFQUQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9mcmVlaW92OwogCXRvdGFsX2xlbiA9IGVycjsKQEAgLTE5MDAsNyArMTkwNiw3IEBACiAJaW50IGZwdXRfbmVlZGVkOwogCiAJLyoga2VybmVsIG1vZGUgYWRkcmVzcyAqLwotCWNoYXIgYWRkcltNQVhfU09DS19BRERSXTsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOwogCiAJLyogdXNlciBtb2RlIGFkZHJlc3MgcG9pbnRlcnMgKi8KIAlzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1YWRkcjsKQEAgLTE5MzgsOSArMTk0NCwxMyBAQAogCXVhZGRyID0gKF9fZm9yY2Ugdm9pZCBfX3VzZXIgKiltc2dfc3lzLm1zZ19uYW1lOwogCXVhZGRyX2xlbiA9IENPTVBBVF9OQU1FTEVOKG1zZyk7CiAJaWYgKE1TR19DTVNHX0NPTVBBVCAmIGZsYWdzKSB7Ci0JCWVyciA9IHZlcmlmeV9jb21wYXRfaW92ZWMoJm1zZ19zeXMsIGlvdiwgYWRkciwgVkVSSUZZX1dSSVRFKTsKKwkJZXJyID0gdmVyaWZ5X2NvbXBhdF9pb3ZlYygmbXNnX3N5cywgaW92LAorCQkJCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwKKwkJCQkJICBWRVJJRllfV1JJVEUpOwogCX0gZWxzZQotCQllcnIgPSB2ZXJpZnlfaW92ZWMoJm1zZ19zeXMsIGlvdiwgYWRkciwgVkVSSUZZX1dSSVRFKTsKKwkJZXJyID0gdmVyaWZ5X2lvdmVjKCZtc2dfc3lzLCBpb3YsCisJCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLAorCQkJCSAgIFZFUklGWV9XUklURSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X2ZyZWVpb3Y7CiAJdG90YWxfbGVuID0gZXJyOwpAQCAtMTk1Niw3ICsxOTY2LDggQEAKIAlsZW4gPSBlcnI7CiAKIAlpZiAodWFkZHIgIT0gTlVMTCkgewotCQllcnIgPSBtb3ZlX2FkZHJfdG9fdXNlcihhZGRyLCBtc2dfc3lzLm1zZ19uYW1lbGVuLCB1YWRkciwKKwkJZXJyID0gbW92ZV9hZGRyX3RvX3VzZXIoKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLAorCQkJCQltc2dfc3lzLm1zZ19uYW1lbGVuLCB1YWRkciwKIAkJCQkJdWFkZHJfbGVuKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dF9mcmVlaW92OwpAQCAtMjIxMCwxMCArMjIyMSwxOSBAQAogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IC1FTk9JT0NUTENNRDsKKwlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IG5ldCAqbmV0OworCisJc2sgPSBzb2NrLT5zazsKKwluZXQgPSBzb2NrX25ldChzayk7CiAKIAlpZiAoc29jay0+b3BzLT5jb21wYXRfaW9jdGwpCiAJCXJldCA9IHNvY2stPm9wcy0+Y29tcGF0X2lvY3RsKHNvY2ssIGNtZCwgYXJnKTsKIAorCWlmIChyZXQgPT0gLUVOT0lPQ1RMQ01EICYmCisJICAgIChjbWQgPj0gU0lPQ0lXRklSU1QgJiYgY21kIDw9IFNJT0NJV0xBU1QpKQorCQlyZXQgPSBjb21wYXRfd2V4dF9oYW5kbGVfaW9jdGwobmV0LCBjbWQsIGFyZyk7CisKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL01ha2VmaWxlIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9NYWtlZmlsZQppbmRleCBmMzQzMWE3Li40ZGU4YmNmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL01ha2VmaWxlCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvTWFrZWZpbGUKQEAgLTUsMTIgKzUsMTIgQEAKIG9iai0kKENPTkZJR19TVU5SUENfR1NTKSArPSBhdXRoX3JwY2dzcy5vCiAKIGF1dGhfcnBjZ3NzLW9ianMgOj0gYXV0aF9nc3MubyBnc3NfZ2VuZXJpY190b2tlbi5vIFwKLQlnc3NfbWVjaF9zd2l0Y2gubyBzdmNhdXRoX2dzcy5vIGdzc19rcmI1X2NyeXB0by5vCisJZ3NzX21lY2hfc3dpdGNoLm8gc3ZjYXV0aF9nc3MubwogCiBvYmotJChDT05GSUdfUlBDU0VDX0dTU19LUkI1KSArPSBycGNzZWNfZ3NzX2tyYjUubwogCiBycGNzZWNfZ3NzX2tyYjUtb2JqcyA6PSBnc3Nfa3JiNV9tZWNoLm8gZ3NzX2tyYjVfc2VhbC5vIGdzc19rcmI1X3Vuc2VhbC5vIFwKLQlnc3Nfa3JiNV9zZXFudW0ubyBnc3Nfa3JiNV93cmFwLm8KKwlnc3Nfa3JiNV9zZXFudW0ubyBnc3Nfa3JiNV93cmFwLm8gZ3NzX2tyYjVfY3J5cHRvLm8KIAogb2JqLSQoQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMpICs9IHJwY3NlY19nc3Nfc3BrbTMubwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKaW5kZXggODM0YTgzMS4uODUzYTQxNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwpAQCAtMzMsOCArMzMsNiBAQAogICogIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCiAgKiAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiAgKiAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogJElkJAogICovCiAKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMKaW5kZXggMWQ1MjMwOC4uYzkzZmNhMiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jCkBAIC04Myw4ICs4Myw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotRVhQT1JUX1NZTUJPTChrcmI1X2VuY3J5cHQpOwotCiB1MzIKIGtyYjVfZGVjcnlwdCgKICAgICAgc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwKQEAgLTExOCw4ICsxMTYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLUVYUE9SVF9TWU1CT0woa3JiNV9kZWNyeXB0KTsKLQogc3RhdGljIGludAogY2hlY2tzdW1tZXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdm9pZCAqZGF0YSkKIHsKQEAgLTE2MSw4ICsxNTcsNiBAQAogCXJldHVybiBlcnIgPyBHU1NfU19GQUlMVVJFIDogMDsKIH0KIAotRVhQT1JUX1NZTUJPTChtYWtlX2NoZWNrc3VtKTsKLQogc3RydWN0IGVuY3J5cHRvcl9kZXNjIHsKIAl1OCBpdls4XTsgLyogWFhYIGhhcmQtY29kZWQgYmxvY2tzaXplICovCiAJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CkBAIC0yNjIsOCArMjU2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1FWFBPUlRfU1lNQk9MKGdzc19lbmNyeXB0X3hkcl9idWYpOwotCiBzdHJ1Y3QgZGVjcnlwdG9yX2Rlc2MgewogCXU4IGl2WzhdOyAvKiBYWFggaGFyZC1jb2RlZCBibG9ja3NpemUgKi8KIAlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYzsKQEAgLTMzNCw1ICszMjYsMyBAQAogCiAJcmV0dXJuIHhkcl9wcm9jZXNzX2J1ZihidWYsIG9mZnNldCwgYnVmLT5sZW4gLSBvZmZzZXQsIGRlY3J5cHRvciwgJmRlc2MpOwogfQotCi1FWFBPUlRfU1lNQk9MKGdzc19kZWNyeXB0X3hkcl9idWYpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZWFsLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYwppbmRleCA1ZjFkMzZkLi5iOGY0MmVmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYwpAQCAtNzgsNyArNzgsNyBAQAogCXN0cnVjdCBrcmI1X2N0eAkJKmN0eCA9IGdzc19jdHgtPmludGVybmFsX2N0eF9pZDsKIAljaGFyCQkJY2tzdW1kYXRhWzE2XTsKIAlzdHJ1Y3QgeGRyX25ldG9iagltZDVja3N1bSA9IHsubGVuID0gMCwgLmRhdGEgPSBja3N1bWRhdGF9OwotCXVuc2lnbmVkIGNoYXIJCSpwdHIsICprcmI1X2hkciwgKm1zZ19zdGFydDsKKwl1bnNpZ25lZCBjaGFyCQkqcHRyLCAqbXNnX3N0YXJ0OwogCXMzMgkJCW5vdzsKIAl1MzIJCQlzZXFfc2VuZDsKIApAQCAtODcsMzYgKzg3LDM2IEBACiAKIAlub3cgPSBnZXRfc2Vjb25kcygpOwogCi0JdG9rZW4tPmxlbiA9IGdfdG9rZW5fc2l6ZSgmY3R4LT5tZWNoX3VzZWQsIDI0KTsKKwl0b2tlbi0+bGVuID0gZ190b2tlbl9zaXplKCZjdHgtPm1lY2hfdXNlZCwgR1NTX0tSQjVfVE9LX0hEUl9MRU4gKyA4KTsKIAogCXB0ciA9IHRva2VuLT5kYXRhOwotCWdfbWFrZV90b2tlbl9oZWFkZXIoJmN0eC0+bWVjaF91c2VkLCAyNCwgJnB0cik7CisJZ19tYWtlX3Rva2VuX2hlYWRlcigmY3R4LT5tZWNoX3VzZWQsIEdTU19LUkI1X1RPS19IRFJfTEVOICsgOCwgJnB0cik7CiAKLQkqcHRyKysgPSAodW5zaWduZWQgY2hhcikgKChLR19UT0tfTUlDX01TRz4+OCkmMHhmZik7Ci0JKnB0cisrID0gKHVuc2lnbmVkIGNoYXIpIChLR19UT0tfTUlDX01TRyYweGZmKTsKKwkvKiBwdHIgbm93IGF0IGhlYWRlciBkZXNjcmliZWQgaW4gcmZjIDE5NjQsIHNlY3Rpb24gMS4yLjE6ICovCisJcHRyWzBdID0gKHVuc2lnbmVkIGNoYXIpICgoS0dfVE9LX01JQ19NU0cgPj4gOCkgJiAweGZmKTsKKwlwdHJbMV0gPSAodW5zaWduZWQgY2hhcikgKEtHX1RPS19NSUNfTVNHICYgMHhmZik7CiAKLQkvKiBwdHIgbm93IGF0IGJ5dGUgMiBvZiBoZWFkZXIgZGVzY3JpYmVkIGluIHJmYyAxOTY0LCBzZWN0aW9uIDEuMi4xOiAqLwotCWtyYjVfaGRyID0gcHRyIC0gMjsKLQltc2dfc3RhcnQgPSBrcmI1X2hkciArIDI0OworCW1zZ19zdGFydCA9IHB0ciArIEdTU19LUkI1X1RPS19IRFJfTEVOICsgODsKIAotCSooX19iZTE2ICopKGtyYjVfaGRyICsgMikgPSBodG9ucyhTR05fQUxHX0RFU19NQUNfTUQ1KTsKLQltZW1zZXQoa3JiNV9oZHIgKyA0LCAweGZmLCA0KTsKKwkqKF9fYmUxNiAqKShwdHIgKyAyKSA9IGh0b25zKFNHTl9BTEdfREVTX01BQ19NRDUpOworCW1lbXNldChwdHIgKyA0LCAweGZmLCA0KTsKIAotCWlmIChtYWtlX2NoZWNrc3VtKCJtZDUiLCBrcmI1X2hkciwgOCwgdGV4dCwgMCwgJm1kNWNrc3VtKSkKKwlpZiAobWFrZV9jaGVja3N1bSgibWQ1IiwgcHRyLCA4LCB0ZXh0LCAwLCAmbWQ1Y2tzdW0pKQogCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKIAogCWlmIChrcmI1X2VuY3J5cHQoY3R4LT5zZXEsIE5VTEwsIG1kNWNrc3VtLmRhdGEsCiAJCQkgIG1kNWNrc3VtLmRhdGEsIG1kNWNrc3VtLmxlbikpCiAJCXJldHVybiBHU1NfU19GQUlMVVJFOwogCi0JbWVtY3B5KGtyYjVfaGRyICsgMTYsIG1kNWNrc3VtLmRhdGEgKyBtZDVja3N1bS5sZW4gLSA4LCA4KTsKKwltZW1jcHkocHRyICsgR1NTX0tSQjVfVE9LX0hEUl9MRU4sIG1kNWNrc3VtLmRhdGEgKyBtZDVja3N1bS5sZW4gLSA4LCA4KTsKIAogCXNwaW5fbG9jaygma3JiNV9zZXFfbG9jayk7CiAJc2VxX3NlbmQgPSBjdHgtPnNlcV9zZW5kKys7CiAJc3Bpbl91bmxvY2soJmtyYjVfc2VxX2xvY2spOwogCiAJaWYgKGtyYjVfbWFrZV9zZXFfbnVtKGN0eC0+c2VxLCBjdHgtPmluaXRpYXRlID8gMCA6IDB4ZmYsCi0JCQkgICAgICBzZXFfc2VuZCwga3JiNV9oZHIgKyAxNiwga3JiNV9oZHIgKyA4KSkKKwkJCSAgICAgIHNlcV9zZW5kLCBwdHIgKyBHU1NfS1JCNV9UT0tfSERSX0xFTiwKKwkJCSAgICAgIHB0ciArIDgpKQogCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKIAogCXJldHVybiAoY3R4LT5lbmR0aW1lIDwgbm93KSA/IEdTU19TX0NPTlRFWFRfRVhQSVJFRCA6IEdTU19TX0NPTVBMRVRFOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV91bnNlYWwuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfdW5zZWFsLmMKaW5kZXggZDkxYTVkMC4uMDY2ZWM3MyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV91bnNlYWwuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3Vuc2VhbC5jCkBAIC05MiwzMCArOTIsMzAgQEAKIAkJCQkJcmVhZF90b2tlbi0+bGVuKSkKIAkJcmV0dXJuIEdTU19TX0RFRkVDVElWRV9UT0tFTjsKIAotCWlmICgoKnB0cisrICE9ICgoS0dfVE9LX01JQ19NU0c+PjgpJjB4ZmYpKSB8fAotCSAgICAoKnB0cisrICE9ICggS0dfVE9LX01JQ19NU0cgICAgJjB4ZmYpKSAgICkKKwlpZiAoKHB0clswXSAhPSAoKEtHX1RPS19NSUNfTVNHID4+IDgpICYgMHhmZikpIHx8CisJICAgIChwdHJbMV0gIT0gIChLR19UT0tfTUlDX01TRyAmIDB4ZmYpKSkKIAkJcmV0dXJuIEdTU19TX0RFRkVDVElWRV9UT0tFTjsKIAogCS8qIFhYWCBzYW5pdHktY2hlY2sgYm9keXNpemU/PyAqLwogCi0Jc2lnbmFsZyA9IHB0clswXSArIChwdHJbMV0gPDwgOCk7CisJc2lnbmFsZyA9IHB0clsyXSArIChwdHJbM10gPDwgOCk7CiAJaWYgKHNpZ25hbGcgIT0gU0dOX0FMR19ERVNfTUFDX01ENSkKIAkJcmV0dXJuIEdTU19TX0RFRkVDVElWRV9UT0tFTjsKIAotCXNlYWxhbGcgPSBwdHJbMl0gKyAocHRyWzNdIDw8IDgpOworCXNlYWxhbGcgPSBwdHJbNF0gKyAocHRyWzVdIDw8IDgpOwogCWlmIChzZWFsYWxnICE9IFNFQUxfQUxHX05PTkUpCiAJCXJldHVybiBHU1NfU19ERUZFQ1RJVkVfVE9LRU47CiAKLQlpZiAoKHB0cls0XSAhPSAweGZmKSB8fCAocHRyWzVdICE9IDB4ZmYpKQorCWlmICgocHRyWzZdICE9IDB4ZmYpIHx8IChwdHJbN10gIT0gMHhmZikpCiAJCXJldHVybiBHU1NfU19ERUZFQ1RJVkVfVE9LRU47CiAKLQlpZiAobWFrZV9jaGVja3N1bSgibWQ1IiwgcHRyIC0gMiwgOCwgbWVzc2FnZV9idWZmZXIsIDAsICZtZDVja3N1bSkpCisJaWYgKG1ha2VfY2hlY2tzdW0oIm1kNSIsIHB0ciwgOCwgbWVzc2FnZV9idWZmZXIsIDAsICZtZDVja3N1bSkpCiAJCXJldHVybiBHU1NfU19GQUlMVVJFOwogCiAJaWYgKGtyYjVfZW5jcnlwdChjdHgtPnNlcSwgTlVMTCwgbWQ1Y2tzdW0uZGF0YSwgbWQ1Y2tzdW0uZGF0YSwgMTYpKQogCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKIAotCWlmIChtZW1jbXAobWQ1Y2tzdW0uZGF0YSArIDgsIHB0ciArIDE0LCA4KSkKKwlpZiAobWVtY21wKG1kNWNrc3VtLmRhdGEgKyA4LCBwdHIgKyBHU1NfS1JCNV9UT0tfSERSX0xFTiwgOCkpCiAJCXJldHVybiBHU1NfU19CQURfU0lHOwogCiAJLyogaXQgZ290IHRocm91Z2ggdW5zY2F0aGVkLiAgTWFrZSBzdXJlIHRoZSBjb250ZXh0IGlzIHVuZXhwaXJlZCAqLwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIAkvKiBkbyBzZXF1ZW5jaW5nIGNoZWNrcyAqLwogCi0JaWYgKGtyYjVfZ2V0X3NlcV9udW0oY3R4LT5zZXEsIHB0ciArIDE0LCBwdHIgKyA2LCAmZGlyZWN0aW9uLCAmc2VxbnVtKSkKKwlpZiAoa3JiNV9nZXRfc2VxX251bShjdHgtPnNlcSwgcHRyICsgR1NTX0tSQjVfVE9LX0hEUl9MRU4sIHB0ciArIDgsICZkaXJlY3Rpb24sICZzZXFudW0pKQogCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKIAogCWlmICgoY3R4LT5pbml0aWF0ZSAmJiBkaXJlY3Rpb24gIT0gMHhmZikgfHwKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfd3JhcC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKaW5kZXggYjAwYjFiNC4uYWU4ZTY5YiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKQEAgLTg3LDggKzg3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1tYWtlX2NvbmZvdW5kZXIoY2hhciAqcCwgaW50IGJsb2Nrc2l6ZSkKK3N0YXRpYyB2b2lkCittYWtlX2NvbmZvdW5kZXIoY2hhciAqcCwgdTMyIGNvbmZsZW4pCiB7CiAJc3RhdGljIHU2NCBpID0gMDsKIAl1NjQgKnEgPSAodTY0ICopcDsKQEAgLTEwMiw4ICsxMDIsMjIgQEAKIAkgKiB1bmlxdWVuZXNzIHdvdWxkIG1lYW4gd29ycnlpbmcgYWJvdXQgYXRvbWljaXR5IGFuZCByb2xsb3ZlciwgYW5kIEkKIAkgKiBkb24ndCBjYXJlIGVub3VnaC4gKi8KIAotCUJVR19PTihibG9ja3NpemUgIT0gOCk7Ci0JKnEgPSBpKys7CisJLyogaW5pdGlhbGl6ZSB0byByYW5kb20gdmFsdWUgKi8KKwlpZiAoaSA9PSAwKSB7CisJCWkgPSByYW5kb20zMigpOworCQlpID0gKGkgPDwgMzIpIHwgcmFuZG9tMzIoKTsKKwl9CisKKwlzd2l0Y2ggKGNvbmZsZW4pIHsKKwljYXNlIDE2OgorCQkqcSsrID0gaSsrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDg6CisJCSpxKysgPSBpKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KIH0KIAogLyogQXNzdW1wdGlvbnM6IHRoZSBoZWFkIGFuZCB0YWlsIG9mIGluYnVmIGFyZSBvdXJzIHRvIHBsYXkgd2l0aC4KQEAgLTEyMiw3ICsxMzYsNyBAQAogCWNoYXIJCQlja3N1bWRhdGFbMTZdOwogCXN0cnVjdCB4ZHJfbmV0b2JqCW1kNWNrc3VtID0gey5sZW4gPSAwLCAuZGF0YSA9IGNrc3VtZGF0YX07CiAJaW50CQkJYmxvY2tzaXplID0gMCwgcGxhaW5sZW47Ci0JdW5zaWduZWQgY2hhcgkJKnB0ciwgKmtyYjVfaGRyLCAqbXNnX3N0YXJ0OworCXVuc2lnbmVkIGNoYXIJCSpwdHIsICptc2dfc3RhcnQ7CiAJczMyCQkJbm93OwogCWludAkJCWhlYWRsZW47CiAJc3RydWN0IHBhZ2UJCSoqdG1wX3BhZ2VzOwpAQCAtMTQ5LDI2ICsxNjMsMjYgQEAKIAlidWYtPmxlbiArPSBoZWFkbGVuOwogCUJVR19PTigoYnVmLT5sZW4gLSBvZmZzZXQgLSBoZWFkbGVuKSAlIGJsb2Nrc2l6ZSk7CiAKLQlnX21ha2VfdG9rZW5faGVhZGVyKCZrY3R4LT5tZWNoX3VzZWQsIDI0ICsgcGxhaW5sZW4sICZwdHIpOworCWdfbWFrZV90b2tlbl9oZWFkZXIoJmtjdHgtPm1lY2hfdXNlZCwKKwkJCQlHU1NfS1JCNV9UT0tfSERSX0xFTiArIDggKyBwbGFpbmxlbiwgJnB0cik7CiAKIAotCSpwdHIrKyA9ICh1bnNpZ25lZCBjaGFyKSAoKEtHX1RPS19XUkFQX01TRz4+OCkmMHhmZik7Ci0JKnB0cisrID0gKHVuc2lnbmVkIGNoYXIpIChLR19UT0tfV1JBUF9NU0cmMHhmZik7CisJLyogcHRyIG5vdyBhdCBoZWFkZXIgZGVzY3JpYmVkIGluIHJmYyAxOTY0LCBzZWN0aW9uIDEuMi4xOiAqLworCXB0clswXSA9ICh1bnNpZ25lZCBjaGFyKSAoKEtHX1RPS19XUkFQX01TRyA+PiA4KSAmIDB4ZmYpOworCXB0clsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoS0dfVE9LX1dSQVBfTVNHICYgMHhmZik7CiAKLQkvKiBwdHIgbm93IGF0IGJ5dGUgMiBvZiBoZWFkZXIgZGVzY3JpYmVkIGluIHJmYyAxOTY0LCBzZWN0aW9uIDEuMi4xOiAqLwotCWtyYjVfaGRyID0gcHRyIC0gMjsKLQltc2dfc3RhcnQgPSBrcmI1X2hkciArIDI0OworCW1zZ19zdGFydCA9IHB0ciArIDI0OwogCi0JKihfX2JlMTYgKikoa3JiNV9oZHIgKyAyKSA9IGh0b25zKFNHTl9BTEdfREVTX01BQ19NRDUpOwotCW1lbXNldChrcmI1X2hkciArIDQsIDB4ZmYsIDQpOwotCSooX19iZTE2ICopKGtyYjVfaGRyICsgNCkgPSBodG9ucyhTRUFMX0FMR19ERVMpOworCSooX19iZTE2ICopKHB0ciArIDIpID0gaHRvbnMoU0dOX0FMR19ERVNfTUFDX01ENSk7CisJbWVtc2V0KHB0ciArIDQsIDB4ZmYsIDQpOworCSooX19iZTE2ICopKHB0ciArIDQpID0gaHRvbnMoU0VBTF9BTEdfREVTKTsKIAogCW1ha2VfY29uZm91bmRlcihtc2dfc3RhcnQsIGJsb2Nrc2l6ZSk7CiAKIAkvKiBYWFhKQkY6IFVHSCE6ICovCiAJdG1wX3BhZ2VzID0gYnVmLT5wYWdlczsKIAlidWYtPnBhZ2VzID0gcGFnZXM7Ci0JaWYgKG1ha2VfY2hlY2tzdW0oIm1kNSIsIGtyYjVfaGRyLCA4LCBidWYsCisJaWYgKG1ha2VfY2hlY2tzdW0oIm1kNSIsIHB0ciwgOCwgYnVmLAogCQkJCW9mZnNldCArIGhlYWRsZW4gLSBibG9ja3NpemUsICZtZDVja3N1bSkpCiAJCXJldHVybiBHU1NfU19GQUlMVVJFOwogCWJ1Zi0+cGFnZXMgPSB0bXBfcGFnZXM7CkBAIC0xNzYsNyArMTkwLDcgQEAKIAlpZiAoa3JiNV9lbmNyeXB0KGtjdHgtPnNlcSwgTlVMTCwgbWQ1Y2tzdW0uZGF0YSwKIAkJCSAgbWQ1Y2tzdW0uZGF0YSwgbWQ1Y2tzdW0ubGVuKSkKIAkJcmV0dXJuIEdTU19TX0ZBSUxVUkU7Ci0JbWVtY3B5KGtyYjVfaGRyICsgMTYsIG1kNWNrc3VtLmRhdGEgKyBtZDVja3N1bS5sZW4gLSA4LCA4KTsKKwltZW1jcHkocHRyICsgR1NTX0tSQjVfVE9LX0hEUl9MRU4sIG1kNWNrc3VtLmRhdGEgKyBtZDVja3N1bS5sZW4gLSA4LCA4KTsKIAogCXNwaW5fbG9jaygma3JiNV9zZXFfbG9jayk7CiAJc2VxX3NlbmQgPSBrY3R4LT5zZXFfc2VuZCsrOwpAQCAtMTg1LDcgKzE5OSw3IEBACiAJLyogWFhYIHdvdWxkIHByb2JhYmx5IGJlIG1vcmUgZWZmaWNpZW50IHRvIGNvbXB1dGUgY2hlY2tzdW0KIAkgKiBhbmQgZW5jcnlwdCBhdCB0aGUgc2FtZSB0aW1lOiAqLwogCWlmICgoa3JiNV9tYWtlX3NlcV9udW0oa2N0eC0+c2VxLCBrY3R4LT5pbml0aWF0ZSA/IDAgOiAweGZmLAotCQkJICAgICAgIHNlcV9zZW5kLCBrcmI1X2hkciArIDE2LCBrcmI1X2hkciArIDgpKSkKKwkJCSAgICAgICBzZXFfc2VuZCwgcHRyICsgR1NTX0tSQjVfVE9LX0hEUl9MRU4sIHB0ciArIDgpKSkKIAkJcmV0dXJuIEdTU19TX0ZBSUxVUkU7CiAKIAlpZiAoZ3NzX2VuY3J5cHRfeGRyX2J1ZihrY3R4LT5lbmMsIGJ1Ziwgb2Zmc2V0ICsgaGVhZGxlbiAtIGJsb2Nrc2l6ZSwKQEAgLTIxOSwzOCArMjMzLDM4IEBACiAJCQkJCWJ1Zi0+bGVuIC0gb2Zmc2V0KSkKIAkJcmV0dXJuIEdTU19TX0RFRkVDVElWRV9UT0tFTjsKIAotCWlmICgoKnB0cisrICE9ICgoS0dfVE9LX1dSQVBfTVNHPj44KSYweGZmKSkgfHwKLQkgICAgKCpwdHIrKyAhPSAgKEtHX1RPS19XUkFQX01TRyAgICAmMHhmZikpICAgKQorCWlmICgocHRyWzBdICE9ICgoS0dfVE9LX1dSQVBfTVNHID4+IDgpICYgMHhmZikpIHx8CisJICAgIChwdHJbMV0gIT0gIChLR19UT0tfV1JBUF9NU0cgJiAweGZmKSkpCiAJCXJldHVybiBHU1NfU19ERUZFQ1RJVkVfVE9LRU47CiAKIAkvKiBYWFggc2FuaXR5LWNoZWNrIGJvZHlzaXplPz8gKi8KIAogCS8qIGdldCB0aGUgc2lnbiBhbmQgc2VhbCBhbGdvcml0aG1zICovCiAKLQlzaWduYWxnID0gcHRyWzBdICsgKHB0clsxXSA8PCA4KTsKKwlzaWduYWxnID0gcHRyWzJdICsgKHB0clszXSA8PCA4KTsKIAlpZiAoc2lnbmFsZyAhPSBTR05fQUxHX0RFU19NQUNfTUQ1KQogCQlyZXR1cm4gR1NTX1NfREVGRUNUSVZFX1RPS0VOOwogCi0Jc2VhbGFsZyA9IHB0clsyXSArIChwdHJbM10gPDwgOCk7CisJc2VhbGFsZyA9IHB0cls0XSArIChwdHJbNV0gPDwgOCk7CiAJaWYgKHNlYWxhbGcgIT0gU0VBTF9BTEdfREVTKQogCQlyZXR1cm4gR1NTX1NfREVGRUNUSVZFX1RPS0VOOwogCi0JaWYgKChwdHJbNF0gIT0gMHhmZikgfHwgKHB0cls1XSAhPSAweGZmKSkKKwlpZiAoKHB0cls2XSAhPSAweGZmKSB8fCAocHRyWzddICE9IDB4ZmYpKQogCQlyZXR1cm4gR1NTX1NfREVGRUNUSVZFX1RPS0VOOwogCiAJaWYgKGdzc19kZWNyeXB0X3hkcl9idWYoa2N0eC0+ZW5jLCBidWYsCi0JCQlwdHIgKyAyMiAtICh1bnNpZ25lZCBjaGFyICopYnVmLT5oZWFkWzBdLmlvdl9iYXNlKSkKKwkJCXB0ciArIEdTU19LUkI1X1RPS19IRFJfTEVOICsgOCAtICh1bnNpZ25lZCBjaGFyICopYnVmLT5oZWFkWzBdLmlvdl9iYXNlKSkKIAkJcmV0dXJuIEdTU19TX0RFRkVDVElWRV9UT0tFTjsKIAotCWlmIChtYWtlX2NoZWNrc3VtKCJtZDUiLCBwdHIgLSAyLCA4LCBidWYsCi0JCSBwdHIgKyAyMiAtICh1bnNpZ25lZCBjaGFyICopYnVmLT5oZWFkWzBdLmlvdl9iYXNlLCAmbWQ1Y2tzdW0pKQorCWlmIChtYWtlX2NoZWNrc3VtKCJtZDUiLCBwdHIsIDgsIGJ1ZiwKKwkJIHB0ciArIEdTU19LUkI1X1RPS19IRFJfTEVOICsgOCAtICh1bnNpZ25lZCBjaGFyICopYnVmLT5oZWFkWzBdLmlvdl9iYXNlLCAmbWQ1Y2tzdW0pKQogCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKIAogCWlmIChrcmI1X2VuY3J5cHQoa2N0eC0+c2VxLCBOVUxMLCBtZDVja3N1bS5kYXRhLAogCQkJICAgbWQ1Y2tzdW0uZGF0YSwgbWQ1Y2tzdW0ubGVuKSkKIAkJcmV0dXJuIEdTU19TX0ZBSUxVUkU7CiAKLQlpZiAobWVtY21wKG1kNWNrc3VtLmRhdGEgKyA4LCBwdHIgKyAxNCwgOCkpCisJaWYgKG1lbWNtcChtZDVja3N1bS5kYXRhICsgOCwgcHRyICsgR1NTX0tSQjVfVE9LX0hEUl9MRU4sIDgpKQogCQlyZXR1cm4gR1NTX1NfQkFEX1NJRzsKIAogCS8qIGl0IGdvdCB0aHJvdWdoIHVuc2NhdGhlZC4gIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBpcyB1bmV4cGlyZWQgKi8KQEAgLTI2Miw4ICsyNzYsOCBAQAogCiAJLyogZG8gc2VxdWVuY2luZyBjaGVja3MgKi8KIAotCWlmIChrcmI1X2dldF9zZXFfbnVtKGtjdHgtPnNlcSwgcHRyICsgMTQsIHB0ciArIDYsICZkaXJlY3Rpb24sCi0JCQkJICAgICZzZXFudW0pKQorCWlmIChrcmI1X2dldF9zZXFfbnVtKGtjdHgtPnNlcSwgcHRyICsgR1NTX0tSQjVfVE9LX0hEUl9MRU4sIHB0ciArIDgsCisJCQkJICAgICZkaXJlY3Rpb24sICZzZXFudW0pKQogCQlyZXR1cm4gR1NTX1NfQkFEX1NJRzsKIAogCWlmICgoa2N0eC0+aW5pdGlhdGUgJiYgZGlyZWN0aW9uICE9IDB4ZmYpIHx8CkBAIC0yNzQsNyArMjg4LDcgQEAKIAkgKiBiZXR0ZXIgdG8gY29weSBhbmQgZW5jcnlwdCBhdCB0aGUgc2FtZSB0aW1lLiAqLwogCiAJYmxvY2tzaXplID0gY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUoa2N0eC0+ZW5jKTsKLQlkYXRhX3N0YXJ0ID0gcHRyICsgMjIgKyBibG9ja3NpemU7CisJZGF0YV9zdGFydCA9IHB0ciArIEdTU19LUkI1X1RPS19IRFJfTEVOICsgOCArIGJsb2Nrc2l6ZTsKIAlvcmlnX3N0YXJ0ID0gYnVmLT5oZWFkWzBdLmlvdl9iYXNlICsgb2Zmc2V0OwogCWRhdGFfbGVuID0gKGJ1Zi0+aGVhZFswXS5pb3ZfYmFzZSArIGJ1Zi0+aGVhZFswXS5pb3ZfbGVuKSAtIGRhdGFfc3RhcnQ7CiAJbWVtbW92ZShvcmlnX3N0YXJ0LCBkYXRhX3N0YXJ0LCBkYXRhX2xlbik7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCAwMWM3ZTMxLi44MzVkMjc0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Yy5jCisrKyBiL25ldC9zdW5ycGMvc3ZjLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KQEAgLTI5MSwxNSArMjkyLDE0IEBACiAKIAogLyoKLSAqIFNldCB0aGUgY3VycmVudCB0aHJlYWQncyBjcHVzX2FsbG93ZWQgbWFzayBzbyB0aGF0IGl0CisgKiBTZXQgdGhlIGdpdmVuIHRocmVhZCdzIGNwdXNfYWxsb3dlZCBtYXNrIHNvIHRoYXQgaXQKICAqIHdpbGwgb25seSBydW4gb24gY3B1cyBpbiB0aGUgZ2l2ZW4gcG9vbC4KLSAqCi0gKiBSZXR1cm5zIDEgYW5kIGZpbGxzIGluIG9sZG1hc2sgaWZmIGEgY3B1bWFzayB3YXMgYXBwbGllZC4KICAqLwotc3RhdGljIGlubGluZSBpbnQKLXN2Y19wb29sX21hcF9zZXRfY3B1bWFzayh1bnNpZ25lZCBpbnQgcGlkeCwgY3B1bWFza190ICpvbGRtYXNrKQorc3RhdGljIGlubGluZSB2b2lkCitzdmNfcG9vbF9tYXBfc2V0X2NwdW1hc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBpbnQgcGlkeCkKIHsKIAlzdHJ1Y3Qgc3ZjX3Bvb2xfbWFwICptID0gJnN2Y19wb29sX21hcDsKKwl1bnNpZ25lZCBpbnQgbm9kZSA9IG0tPnBvb2xfdG9bcGlkeF07CiAKIAkvKgogCSAqIFRoZSBjYWxsZXIgY2hlY2tzIGZvciBzdl9ucnBvb2xzID4gMSwgd2hpY2gKQEAgLTMwNywyNiArMzA3LDE4IEBACiAJICovCiAJQlVHX09OKG0tPmNvdW50ID09IDApOwogCi0Jc3dpdGNoIChtLT5tb2RlKQotCXsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKG0tPm1vZGUpIHsKIAljYXNlIFNWQ19QT09MX1BFUkNQVToKIAl7Ci0JCXVuc2lnbmVkIGludCBjcHUgPSBtLT5wb29sX3RvW3BpZHhdOwotCi0JCSpvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSk7Ci0JCXJldHVybiAxOworCQljcHVtYXNrX29mX2NwdV9wdHIoY3B1bWFzaywgbm9kZSk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRhc2ssIGNwdW1hc2spOworCQlicmVhazsKIAl9CiAJY2FzZSBTVkNfUE9PTF9QRVJOT0RFOgogCXsKLQkJdW5zaWduZWQgaW50IG5vZGUgPSBtLT5wb29sX3RvW3BpZHhdOwogCQlub2RlX3RvX2NwdW1hc2tfcHRyKG5vZGVjcHVtYXNrLCBub2RlKTsKLQotCQkqb2xkbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbm9kZWNwdW1hc2spOwotCQlyZXR1cm4gMTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIodGFzaywgbm9kZWNwdW1hc2spOworCQlicmVhazsKIAl9CiAJfQogfQpAQCAtNDQzLDcgKzQzNSw3IEBACiBzdHJ1Y3Qgc3ZjX3NlcnYgKgogc3ZjX2NyZWF0ZV9wb29sZWQoc3RydWN0IHN2Y19wcm9ncmFtICpwcm9nLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSwKIAkJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpLAotCQkgIHN2Y190aHJlYWRfZm4gZnVuYywgaW50IHNpZywgc3RydWN0IG1vZHVsZSAqbW9kKQorCQkgIHN2Y190aHJlYWRfZm4gZnVuYywgc3RydWN0IG1vZHVsZSAqbW9kKQogewogCXN0cnVjdCBzdmNfc2VydiAqc2VydjsKIAl1bnNpZ25lZCBpbnQgbnBvb2xzID0gc3ZjX3Bvb2xfbWFwX2dldCgpOwpAQCAtNDUyLDcgKzQ0NCw2IEBACiAKIAlpZiAoc2VydiAhPSBOVUxMKSB7CiAJCXNlcnYtPnN2X2Z1bmN0aW9uID0gZnVuYzsKLQkJc2Vydi0+c3Zfa2lsbF9zaWduYWwgPSBzaWc7CiAJCXNlcnYtPnN2X21vZHVsZSA9IG1vZDsKIAl9CiAKQEAgLTQ2MSw3ICs0NTIsOCBAQAogRVhQT1JUX1NZTUJPTChzdmNfY3JlYXRlX3Bvb2xlZCk7CiAKIC8qCi0gKiBEZXN0cm95IGFuIFJQQyBzZXJ2aWNlLiAgU2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBCS0wgaGVsZAorICogRGVzdHJveSBhbiBSUEMgc2VydmljZS4gU2hvdWxkIGJlIGNhbGxlZCB3aXRoIGFwcHJvcHJpYXRlIGxvY2tpbmcgdG8KKyAqIHByb3RlY3QgdGhlIHN2X25ydGhyZWFkcywgc3ZfcGVybXNvY2tzIGFuZCBzdl90ZW1wc29ja3MuCiAgKi8KIHZvaWQKIHN2Y19kZXN0cm95KHN0cnVjdCBzdmNfc2VydiAqc2VydikKQEAgLTU3OCw0NiArNTcwLDYgQEAKIEVYUE9SVF9TWU1CT0woc3ZjX3ByZXBhcmVfdGhyZWFkKTsKIAogLyoKLSAqIENyZWF0ZSBhIHRocmVhZCBpbiB0aGUgZ2l2ZW4gcG9vbC4gIENhbGxlciBtdXN0IGhvbGQgQktMLgotICogT24gYSBOVU1BIG9yIFNNUCBtYWNoaW5lLCB3aXRoIGEgbXVsdGktcG9vbCBzZXJ2LCB0aGUgdGhyZWFkCi0gKiB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gcnVuIG9uIHRoZSBjcHVzIGJlbG9uZ2luZyB0byB0aGUgcG9vbC4KLSAqLwotc3RhdGljIGludAotX19zdmNfY3JlYXRlX3RocmVhZChzdmNfdGhyZWFkX2ZuIGZ1bmMsIHN0cnVjdCBzdmNfc2VydiAqc2VydiwKLQkJICAgIHN0cnVjdCBzdmNfcG9vbCAqcG9vbCkKLXsKLQlzdHJ1Y3Qgc3ZjX3Jxc3QJKnJxc3RwOwotCWludAkJZXJyb3IgPSAtRU5PTUVNOwotCWludAkJaGF2ZV9vbGRtYXNrID0gMDsKLQljcHVtYXNrX3QJdW5pbml0aWFsaXplZF92YXIob2xkbWFzayk7Ci0KLQlycXN0cCA9IHN2Y19wcmVwYXJlX3RocmVhZChzZXJ2LCBwb29sKTsKLQlpZiAoSVNfRVJSKHJxc3RwKSkgewotCQllcnJvciA9IFBUUl9FUlIocnFzdHApOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoc2Vydi0+c3ZfbnJwb29scyA+IDEpCi0JCWhhdmVfb2xkbWFzayA9IHN2Y19wb29sX21hcF9zZXRfY3B1bWFzayhwb29sLT5zcF9pZCwgJm9sZG1hc2spOwotCi0JZXJyb3IgPSBrZXJuZWxfdGhyZWFkKChpbnQgKCopKHZvaWQgKikpIGZ1bmMsIHJxc3RwLCAwKTsKLQotCWlmIChoYXZlX29sZG1hc2spCi0JCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkbWFzayk7Ci0KLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIG91dF90aHJlYWQ7Ci0Jc3ZjX3NvY2tfdXBkYXRlX2J1ZnMoc2Vydik7Ci0JZXJyb3IgPSAwOwotb3V0OgotCXJldHVybiBlcnJvcjsKLQotb3V0X3RocmVhZDoKLQlzdmNfZXhpdF90aHJlYWQocnFzdHApOwotCWdvdG8gb3V0OwotfQotCi0vKgogICogQ2hvb3NlIGEgcG9vbCBpbiB3aGljaCB0byBjcmVhdGUgYSBuZXcgdGhyZWFkLCBmb3Igc3ZjX3NldF9udW1fdGhyZWFkcwogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzdmNfcG9vbCAqCkBAIC02NzQsNyArNjI2LDcgQEAKICAqIG9mIHRocmVhZHMgdGhlIGdpdmVuIG51bWJlci4gIElmIGBwb29sJyBpcyBub24tTlVMTCwgYXBwbGllcwogICogb25seSB0byB0aHJlYWRzIGluIHRoYXQgcG9vbCwgb3RoZXJ3aXNlIHJvdW5kLXJvYmlucyBiZXR3ZWVuCiAgKiBhbGwgcG9vbHMuICBNdXN0IGJlIGNhbGxlZCB3aXRoIGEgc3ZjX2dldCgpIHJlZmVyZW5jZSBhbmQKLSAqIHRoZSBCS0wgaGVsZC4KKyAqIHRoZSBCS0wgb3IgYW5vdGhlciBsb2NrIHRvIHByb3RlY3QgYWNjZXNzIHRvIHN2Y19zZXJ2IGZpZWxkcy4KICAqCiAgKiBEZXN0cm95aW5nIHRocmVhZHMgcmVsaWVzIG9uIHRoZSBzZXJ2aWNlIHRocmVhZHMgZmlsbGluZyBpbgogICogcnFzdHAtPnJxX3Rhc2ssIHdoaWNoIG9ubHkgdGhlIG5mcyBvbmVzIGRvLiAgQXNzdW1lcyB0aGUgc2VydgpAQCAtNjg2LDcgKzYzOCw5IEBACiBpbnQKIHN2Y19zZXRfbnVtX3RocmVhZHMoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wsIGludCBucnNlcnZzKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltOworCXN0cnVjdCBzdmNfcnFzdAkqcnFzdHA7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXN0cnVjdCBzdmNfcG9vbCAqY2hvc2VuX3Bvb2w7CiAJaW50IGVycm9yID0gMDsKIAl1bnNpZ25lZCBpbnQgc3RhdGUgPSBzZXJ2LT5zdl9ucnRocmVhZHMtMTsKIApAQCAtNzAyLDE4ICs2NTYsMzQgQEAKIAkvKiBjcmVhdGUgbmV3IHRocmVhZHMgKi8KIAl3aGlsZSAobnJzZXJ2cyA+IDApIHsKIAkJbnJzZXJ2cy0tOwotCQlfX21vZHVsZV9nZXQoc2Vydi0+c3ZfbW9kdWxlKTsKLQkJZXJyb3IgPSBfX3N2Y19jcmVhdGVfdGhyZWFkKHNlcnYtPnN2X2Z1bmN0aW9uLCBzZXJ2LAotCQkJCQkgICAgY2hvb3NlX3Bvb2woc2VydiwgcG9vbCwgJnN0YXRlKSk7Ci0JCWlmIChlcnJvciA8IDApIHsKLQkJCW1vZHVsZV9wdXQoc2Vydi0+c3ZfbW9kdWxlKTsKKwkJY2hvc2VuX3Bvb2wgPSBjaG9vc2VfcG9vbChzZXJ2LCBwb29sLCAmc3RhdGUpOworCisJCXJxc3RwID0gc3ZjX3ByZXBhcmVfdGhyZWFkKHNlcnYsIGNob3Nlbl9wb29sKTsKKwkJaWYgKElTX0VSUihycXN0cCkpIHsKKwkJCWVycm9yID0gUFRSX0VSUihycXN0cCk7CiAJCQlicmVhazsKIAkJfQorCisJCV9fbW9kdWxlX2dldChzZXJ2LT5zdl9tb2R1bGUpOworCQl0YXNrID0ga3RocmVhZF9jcmVhdGUoc2Vydi0+c3ZfZnVuY3Rpb24sIHJxc3RwLCBzZXJ2LT5zdl9uYW1lKTsKKwkJaWYgKElTX0VSUih0YXNrKSkgeworCQkJZXJyb3IgPSBQVFJfRVJSKHRhc2spOworCQkJbW9kdWxlX3B1dChzZXJ2LT5zdl9tb2R1bGUpOworCQkJc3ZjX2V4aXRfdGhyZWFkKHJxc3RwKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcnFzdHAtPnJxX3Rhc2sgPSB0YXNrOworCQlpZiAoc2Vydi0+c3ZfbnJwb29scyA+IDEpCisJCQlzdmNfcG9vbF9tYXBfc2V0X2NwdW1hc2sodGFzaywgY2hvc2VuX3Bvb2wtPnNwX2lkKTsKKworCQlzdmNfc29ja191cGRhdGVfYnVmcyhzZXJ2KTsKKwkJd2FrZV91cF9wcm9jZXNzKHRhc2spOwogCX0KIAkvKiBkZXN0cm95IG9sZCB0aHJlYWRzICovCiAJd2hpbGUgKG5yc2VydnMgPCAwICYmCi0JICAgICAgICh2aWN0aW0gPSBjaG9vc2VfdmljdGltKHNlcnYsIHBvb2wsICZzdGF0ZSkpICE9IE5VTEwpIHsKLQkJc2VuZF9zaWcoc2Vydi0+c3Zfa2lsbF9zaWduYWwsIHZpY3RpbSwgMSk7CisJICAgICAgICh0YXNrID0gY2hvb3NlX3ZpY3RpbShzZXJ2LCBwb29sLCAmc3RhdGUpKSAhPSBOVUxMKSB7CisJCXNlbmRfc2lnKFNJR0lOVCwgdGFzaywgMSk7CiAJCW5yc2VydnMrKzsKIAl9CiAKQEAgLTcyMiw3ICs2OTIsOCBAQAogRVhQT1JUX1NZTUJPTChzdmNfc2V0X251bV90aHJlYWRzKTsKIAogLyoKLSAqIENhbGxlZCBmcm9tIGEgc2VydmVyIHRocmVhZCBhcyBpdCdzIGV4aXRpbmcuICBDYWxsZXIgbXVzdCBob2xkIEJLTC4KKyAqIENhbGxlZCBmcm9tIGEgc2VydmVyIHRocmVhZCBhcyBpdCdzIGV4aXRpbmcuIENhbGxlciBtdXN0IGhvbGQgdGhlIEJLTCBvcgorICogdGhlICJzZXJ2aWNlIG11dGV4Iiwgd2hpY2hldmVyIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgc2VydmljZS4KICAqLwogdm9pZAogc3ZjX2V4aXRfdGhyZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hLmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hLmMKaW5kZXggODhjMGNhMi4uODcxMDExNyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYS5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWEuYwpAQCAtNjksNiArNjksMTAgQEAKIGF0b21pY190IHJkbWFfc3RhdF9zcV9wb2xsOwogYXRvbWljX3QgcmRtYV9zdGF0X3NxX3Byb2Q7CiAKKy8qIFRlbXBvcmFyeSBORlMgcmVxdWVzdCBtYXAgYW5kIGNvbnRleHQgY2FjaGVzICovCitzdHJ1Y3Qga21lbV9jYWNoZSAqc3ZjX3JkbWFfbWFwX2NhY2hlcDsKK3N0cnVjdCBrbWVtX2NhY2hlICpzdmNfcmRtYV9jdHh0X2NhY2hlcDsKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyByZWFkaW5nIGFuZCByZXNldHRpbmcgYW4gYXRvbWljX3Qgc3RhdAogICogdmFyaWFibGUgdGhyb3VnaCByZWFkL3dyaXRlIHRvIGEgcHJvYyBmaWxlLiBBbnkgd3JpdGUgdG8gdGhlIGZpbGUKQEAgLTIzNiwxMSArMjQwLDE0IEBACiB2b2lkIHN2Y19yZG1hX2NsZWFudXAodm9pZCkKIHsKIAlkcHJpbnRrKCJTVkNSRE1BIE1vZHVsZSBSZW1vdmVkLCBkZXJlZ2lzdGVyIFJQQyBSRE1BIHRyYW5zcG9ydFxuIik7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlpZiAoc3ZjcmRtYV90YWJsZV9oZWFkZXIpIHsKIAkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3ZjcmRtYV90YWJsZV9oZWFkZXIpOwogCQlzdmNyZG1hX3RhYmxlX2hlYWRlciA9IE5VTEw7CiAJfQogCXN2Y191bnJlZ194cHJ0X2NsYXNzKCZzdmNfcmRtYV9jbGFzcyk7CisJa21lbV9jYWNoZV9kZXN0cm95KHN2Y19yZG1hX21hcF9jYWNoZXApOworCWttZW1fY2FjaGVfZGVzdHJveShzdmNfcmRtYV9jdHh0X2NhY2hlcCk7CiB9CiAKIGludCBzdmNfcmRtYV9pbml0KHZvaWQpCkBAIC0yNTUsOSArMjYyLDM3IEBACiAJCXN2Y3JkbWFfdGFibGVfaGVhZGVyID0KIAkJCXJlZ2lzdGVyX3N5c2N0bF90YWJsZShzdmNyZG1hX3Jvb3RfdGFibGUpOwogCisJLyogQ3JlYXRlIHRoZSB0ZW1wb3JhcnkgbWFwIGNhY2hlICovCisJc3ZjX3JkbWFfbWFwX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJzdmNfcmRtYV9tYXBfY2FjaGUiLAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBzdmNfcmRtYV9yZXFfbWFwKSwKKwkJCQkJCTAsCisJCQkJCQlTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJCQlOVUxMKTsKKwlpZiAoIXN2Y19yZG1hX21hcF9jYWNoZXApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IGFsbG9jYXRlIG1hcCBjYWNoZS5cbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJLyogQ3JlYXRlIHRoZSB0ZW1wb3JhcnkgY29udGV4dCBjYWNoZSAqLworCXN2Y19yZG1hX2N0eHRfY2FjaGVwID0KKwkJa21lbV9jYWNoZV9jcmVhdGUoInN2Y19yZG1hX2N0eHRfY2FjaGUiLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0KSwKKwkJCQkgIDAsCisJCQkJICBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJICBOVUxMKTsKKwlpZiAoIXN2Y19yZG1hX2N0eHRfY2FjaGVwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNvdWxkIG5vdCBhbGxvY2F0ZSBXUiBjdHh0IGNhY2hlLlxuIik7CisJCWdvdG8gZXJyMTsKKwl9CisKIAkvKiBSZWdpc3RlciBSRE1BIHdpdGggdGhlIFNWQyB0cmFuc3BvcnQgc3dpdGNoICovCiAJc3ZjX3JlZ194cHJ0X2NsYXNzKCZzdmNfcmRtYV9jbGFzcyk7CiAJcmV0dXJuIDA7CisgZXJyMToKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc3ZjX3JkbWFfbWFwX2NhY2hlcCk7CisgZXJyMDoKKwl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShzdmNyZG1hX3RhYmxlX2hlYWRlcik7CisJcmV0dXJuIC1FTk9NRU07CiB9CiBNT0RVTEVfQVVUSE9SKCJUb20gVHVja2VyIDx0b21Ab3BlbmdyaWRjb21wdXRpbmcuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTVkMgUkRNQSBUcmFuc3BvcnQiKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfcmVjdmZyb20uYyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfcmVjdmZyb20uYwppbmRleCAwNmFiNDg0Li5iNGIxN2Y0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3JlY3Zmcm9tLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9yZWN2ZnJvbS5jCkBAIC0xMTIsMTEgKzExMiw2IEBACiAJcnFzdHAtPnJxX2FyZy50YWlsWzBdLmlvdl9sZW4gPSAwOwogfQogCi1zdHJ1Y3QgY2h1bmtfc2dlIHsKLQlpbnQgc3RhcnQ7CQkvKiBzZ2Ugbm8gZm9yIHRoaXMgY2h1bmsgKi8KLQlpbnQgY291bnQ7CQkvKiBzZ2UgY291bnQgZm9yIHRoaXMgY2h1bmsgKi8KLX07Ci0KIC8qIEVuY29kZSBhIHJlYWQtY2h1bmstbGlzdCBhcyBhbiBhcnJheSBvZiBJQiBTR0UKICAqCiAgKiBBc3N1bXB0aW9uczoKQEAgLTEzNCw4ICsxMjksOCBAQAogCQkJICAgc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKIAkJCSAgIHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpoZWFkLAogCQkJICAgc3RydWN0IHJwY3JkbWFfbXNnICpybXNncCwKLQkJCSAgIHN0cnVjdCBpYl9zZ2UgKnNnZSwKLQkJCSAgIHN0cnVjdCBjaHVua19zZ2UgKmNoX3NnZV9hcnksCisJCQkgICBzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqcnBsX21hcCwKKwkJCSAgIHN0cnVjdCBzdmNfcmRtYV9yZXFfbWFwICpjaGxfbWFwLAogCQkJICAgaW50IGNoX2NvdW50LAogCQkJICAgaW50IGJ5dGVfY291bnQpCiB7CkBAIC0xNTYsMjIgKzE1MSwxOCBAQAogCWhlYWQtPmFyZy5oZWFkWzBdID0gcnFzdHAtPnJxX2FyZy5oZWFkWzBdOwogCWhlYWQtPmFyZy50YWlsWzBdID0gcnFzdHAtPnJxX2FyZy50YWlsWzBdOwogCWhlYWQtPmFyZy5wYWdlcyA9ICZoZWFkLT5wYWdlc1toZWFkLT5jb3VudF07Ci0JaGVhZC0+c2dlWzBdLmxlbmd0aCA9IGhlYWQtPmNvdW50OyAvKiBzYXZlIGNvdW50IG9mIGhkciBwYWdlcyAqLworCWhlYWQtPmhkcl9jb3VudCA9IGhlYWQtPmNvdW50OyAvKiBzYXZlIGNvdW50IG9mIGhkciBwYWdlcyAqLwogCWhlYWQtPmFyZy5wYWdlX2Jhc2UgPSAwOwogCWhlYWQtPmFyZy5wYWdlX2xlbiA9IGNoX2J5dGVzOwogCWhlYWQtPmFyZy5sZW4gPSBycXN0cC0+cnFfYXJnLmxlbiArIGNoX2J5dGVzOwogCWhlYWQtPmFyZy5idWZsZW4gPSBycXN0cC0+cnFfYXJnLmJ1ZmxlbiArIGNoX2J5dGVzOwogCWhlYWQtPmNvdW50Kys7Ci0JY2hfc2dlX2FyeVswXS5zdGFydCA9IDA7CisJY2hsX21hcC0+Y2hbMF0uc3RhcnQgPSAwOwogCXdoaWxlIChieXRlX2NvdW50KSB7CisJCXJwbF9tYXAtPnNnZVtzZ2Vfbm9dLmlvdl9iYXNlID0KKwkJCXBhZ2VfYWRkcmVzcyhycXN0cC0+cnFfYXJnLnBhZ2VzW3BhZ2Vfbm9dKSArIHBhZ2Vfb2ZmOwogCQlzZ2VfYnl0ZXMgPSBtaW5fdChpbnQsIFBBR0VfU0laRS1wYWdlX29mZiwgY2hfYnl0ZXMpOwotCQlzZ2Vbc2dlX25vXS5hZGRyID0KLQkJCWliX2RtYV9tYXBfcGFnZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAotCQkJCQlycXN0cC0+cnFfYXJnLnBhZ2VzW3BhZ2Vfbm9dLAotCQkJCQlwYWdlX29mZiwgc2dlX2J5dGVzLAotCQkJCQlETUFfRlJPTV9ERVZJQ0UpOwotCQlzZ2Vbc2dlX25vXS5sZW5ndGggPSBzZ2VfYnl0ZXM7Ci0JCXNnZVtzZ2Vfbm9dLmxrZXkgPSB4cHJ0LT5zY19waHlzX21yLT5sa2V5OworCQlycGxfbWFwLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuID0gc2dlX2J5dGVzOwogCQkvKgogCQkgKiBEb24ndCBidW1wIGhlYWQtPmNvdW50IGhlcmUgYmVjYXVzZSB0aGUgc2FtZSBwYWdlCiAJCSAqIG1heSBiZSB1c2VkIGJ5IG11bHRpcGxlIFNHRS4KQEAgLTE4NywxMSArMTc4LDExIEBACiAJCSAqIFNHRSwgbW92ZSB0byB0aGUgbmV4dCBTR0UKIAkJICovCiAJCWlmIChjaF9ieXRlcyA9PSAwKSB7Ci0JCQljaF9zZ2VfYXJ5W2NoX25vXS5jb3VudCA9Ci0JCQkJc2dlX25vIC0gY2hfc2dlX2FyeVtjaF9ub10uc3RhcnQ7CisJCQljaGxfbWFwLT5jaFtjaF9ub10uY291bnQgPQorCQkJCXNnZV9ubyAtIGNobF9tYXAtPmNoW2NoX25vXS5zdGFydDsKIAkJCWNoX25vKys7CiAJCQljaCsrOwotCQkJY2hfc2dlX2FyeVtjaF9ub10uc3RhcnQgPSBzZ2Vfbm87CisJCQljaGxfbWFwLT5jaFtjaF9ub10uc3RhcnQgPSBzZ2Vfbm87CiAJCQljaF9ieXRlcyA9IGNoLT5yY190YXJnZXQucnNfbGVuZ3RoOwogCQkJLyogSWYgYnl0ZXMgcmVtYWluaW5nIGFjY291bnQgZm9yIG5leHQgY2h1bmsgKi8KIAkJCWlmIChieXRlX2NvdW50KSB7CkBAIC0yMjAsMTggKzIxMSwyNSBAQAogCXJldHVybiBzZ2Vfbm87CiB9CiAKLXN0YXRpYyB2b2lkIHJkbWFfc2V0X2N0eHRfc2dlKHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0LAotCQkJICAgICAgc3RydWN0IGliX3NnZSAqc2dlLAorc3RhdGljIHZvaWQgcmRtYV9zZXRfY3R4dF9zZ2Uoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKKwkJCSAgICAgIHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0LAorCQkJICAgICAgc3RydWN0IGt2ZWMgKnZlYywKIAkJCSAgICAgIHU2NCAqc2dsX29mZnNldCwKIAkJCSAgICAgIGludCBjb3VudCkKIHsKIAlpbnQgaTsKIAogCWN0eHQtPmNvdW50ID0gY291bnQ7CisJY3R4dC0+ZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWN0eHQtPnNnZVtpXS5hZGRyID0gc2dlW2ldLmFkZHI7Ci0JCWN0eHQtPnNnZVtpXS5sZW5ndGggPSBzZ2VbaV0ubGVuZ3RoOwotCQkqc2dsX29mZnNldCA9ICpzZ2xfb2Zmc2V0ICsgc2dlW2ldLmxlbmd0aDsKKwkJYXRvbWljX2luYygmeHBydC0+c2NfZG1hX3VzZWQpOworCQljdHh0LT5zZ2VbaV0uYWRkciA9CisJCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCQkgIHZlY1tpXS5pb3ZfYmFzZSwgdmVjW2ldLmlvdl9sZW4sCisJCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKKwkJY3R4dC0+c2dlW2ldLmxlbmd0aCA9IHZlY1tpXS5pb3ZfbGVuOworCQljdHh0LT5zZ2VbaV0ubGtleSA9IHhwcnQtPnNjX3BoeXNfbXItPmxrZXk7CisJCSpzZ2xfb2Zmc2V0ID0gKnNnbF9vZmZzZXQgKyB2ZWNbaV0uaW92X2xlbjsKIAl9CiB9CiAKQEAgLTI4MiwzNCArMjgwLDI5IEBACiAJc3RydWN0IGliX3NlbmRfd3IgcmVhZF93cjsKIAlpbnQgZXJyID0gMDsKIAlpbnQgY2hfbm87Ci0Jc3RydWN0IGliX3NnZSAqc2dlOwogCWludCBjaF9jb3VudDsKIAlpbnQgYnl0ZV9jb3VudDsKIAlpbnQgc2dlX2NvdW50OwogCXU2NCBzZ2xfb2Zmc2V0OwogCXN0cnVjdCBycGNyZG1hX3JlYWRfY2h1bmsgKmNoOwogCXN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0ID0gTlVMTDsKLQlzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqdG1wX3NnZV9jdHh0OwotCXN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICp0bXBfY2hfY3R4dDsKLQlzdHJ1Y3QgY2h1bmtfc2dlICpjaF9zZ2VfYXJ5OworCXN0cnVjdCBzdmNfcmRtYV9yZXFfbWFwICpycGxfbWFwOworCXN0cnVjdCBzdmNfcmRtYV9yZXFfbWFwICpjaGxfbWFwOwogCiAJLyogSWYgbm8gcmVhZCBsaXN0IGlzIHByZXNlbnQsIHJldHVybiAwICovCiAJY2ggPSBzdmNfcmRtYV9nZXRfcmVhZF9jaHVuayhybXNncCk7CiAJaWYgKCFjaCkKIAkJcmV0dXJuIDA7CiAKLQkvKiBBbGxvY2F0ZSB0ZW1wb3JhcnkgY29udGV4dHMgdG8ga2VlcCBTR0UgKi8KLQlCVUdfT04oc2l6ZW9mKHN0cnVjdCBpYl9zZ2UpIDwgc2l6ZW9mKHN0cnVjdCBjaHVua19zZ2UpKTsKLQl0bXBfc2dlX2N0eHQgPSBzdmNfcmRtYV9nZXRfY29udGV4dCh4cHJ0KTsKLQlzZ2UgPSB0bXBfc2dlX2N0eHQtPnNnZTsKLQl0bXBfY2hfY3R4dCA9IHN2Y19yZG1hX2dldF9jb250ZXh0KHhwcnQpOwotCWNoX3NnZV9hcnkgPSAoc3RydWN0IGNodW5rX3NnZSAqKXRtcF9jaF9jdHh0LT5zZ2U7CisJLyogQWxsb2NhdGUgdGVtcG9yYXJ5IHJlcGx5IGFuZCBjaHVuayBtYXBzICovCisJcnBsX21hcCA9IHN2Y19yZG1hX2dldF9yZXFfbWFwKCk7CisJY2hsX21hcCA9IHN2Y19yZG1hX2dldF9yZXFfbWFwKCk7CiAKIAlzdmNfcmRtYV9yY2xfY2h1bmtfY291bnRzKGNoLCAmY2hfY291bnQsICZieXRlX2NvdW50KTsKIAlpZiAoY2hfY291bnQgPiBSUENTVkNfTUFYUEFHRVMpCiAJCXJldHVybiAtRUlOVkFMOwogCXNnZV9jb3VudCA9IHJkbWFfcmNsX3RvX3NnZSh4cHJ0LCBycXN0cCwgaGRyX2N0eHQsIHJtc2dwLAotCQkJCSAgICBzZ2UsIGNoX3NnZV9hcnksCisJCQkJICAgIHJwbF9tYXAsIGNobF9tYXAsCiAJCQkJICAgIGNoX2NvdW50LCBieXRlX2NvdW50KTsKIAlzZ2xfb2Zmc2V0ID0gMDsKIAljaF9ubyA9IDA7CkBAIC0zMzEsMTQgKzMyNCwxNSBAQAogCQlyZWFkX3dyLndyLnJkbWEucmVtb3RlX2FkZHIgPQogCQkJZ2V0X3VuYWxpZ25lZCgmKGNoLT5yY190YXJnZXQucnNfb2Zmc2V0KSkgKwogCQkJc2dsX29mZnNldDsKLQkJcmVhZF93ci5zZ19saXN0ID0gJnNnZVtjaF9zZ2VfYXJ5W2NoX25vXS5zdGFydF07CisJCXJlYWRfd3Iuc2dfbGlzdCA9IGN0eHQtPnNnZTsKIAkJcmVhZF93ci5udW1fc2dlID0KLQkJCXJkbWFfcmVhZF9tYXhfc2dlKHhwcnQsIGNoX3NnZV9hcnlbY2hfbm9dLmNvdW50KTsKLQkJcmRtYV9zZXRfY3R4dF9zZ2UoY3R4dCwgJnNnZVtjaF9zZ2VfYXJ5W2NoX25vXS5zdGFydF0sCisJCQlyZG1hX3JlYWRfbWF4X3NnZSh4cHJ0LCBjaGxfbWFwLT5jaFtjaF9ub10uY291bnQpOworCQlyZG1hX3NldF9jdHh0X3NnZSh4cHJ0LCBjdHh0LAorCQkJCSAgJnJwbF9tYXAtPnNnZVtjaGxfbWFwLT5jaFtjaF9ub10uc3RhcnRdLAogCQkJCSAgJnNnbF9vZmZzZXQsCiAJCQkJICByZWFkX3dyLm51bV9zZ2UpOwogCQlpZiAoKChjaCsxKS0+cmNfZGlzY3JpbSA9PSAwKSAmJgotCQkgICAgKHJlYWRfd3IubnVtX3NnZSA9PSBjaF9zZ2VfYXJ5W2NoX25vXS5jb3VudCkpIHsKKwkJICAgIChyZWFkX3dyLm51bV9zZ2UgPT0gY2hsX21hcC0+Y2hbY2hfbm9dLmNvdW50KSkgewogCQkJLyoKIAkJCSAqIE1hcmsgdGhlIGxhc3QgUkRNQV9SRUFEIHdpdGggYSBiaXQgdG8KIAkJCSAqIGluZGljYXRlIGFsbCBSUEMgZGF0YSBoYXMgYmVlbiBmZXRjaGVkIGZyb20KQEAgLTM1OCw5ICszNTIsOSBAQAogCQl9CiAJCWF0b21pY19pbmMoJnJkbWFfc3RhdF9yZWFkKTsKIAotCQlpZiAocmVhZF93ci5udW1fc2dlIDwgY2hfc2dlX2FyeVtjaF9ub10uY291bnQpIHsKLQkJCWNoX3NnZV9hcnlbY2hfbm9dLmNvdW50IC09IHJlYWRfd3IubnVtX3NnZTsKLQkJCWNoX3NnZV9hcnlbY2hfbm9dLnN0YXJ0ICs9IHJlYWRfd3IubnVtX3NnZTsKKwkJaWYgKHJlYWRfd3IubnVtX3NnZSA8IGNobF9tYXAtPmNoW2NoX25vXS5jb3VudCkgeworCQkJY2hsX21hcC0+Y2hbY2hfbm9dLmNvdW50IC09IHJlYWRfd3IubnVtX3NnZTsKKwkJCWNobF9tYXAtPmNoW2NoX25vXS5zdGFydCArPSByZWFkX3dyLm51bV9zZ2U7CiAJCQlnb3RvIG5leHRfc2dlOwogCQl9CiAJCXNnbF9vZmZzZXQgPSAwOwpAQCAtMzY4LDggKzM2Miw4IEBACiAJfQogCiAgb3V0OgotCXN2Y19yZG1hX3B1dF9jb250ZXh0KHRtcF9zZ2VfY3R4dCwgMCk7Ci0Jc3ZjX3JkbWFfcHV0X2NvbnRleHQodG1wX2NoX2N0eHQsIDApOworCXN2Y19yZG1hX3B1dF9yZXFfbWFwKHJwbF9tYXApOworCXN2Y19yZG1hX3B1dF9yZXFfbWFwKGNobF9tYXApOwogCiAJLyogRGV0YWNoIGFyZyBwYWdlcy4gc3ZjX3JlY3Ygd2lsbCByZXBsZW5pc2ggdGhlbSAqLwogCWZvciAoY2hfbm8gPSAwOyAmcnFzdHAtPnJxX3BhZ2VzW2NoX25vXSA8IHJxc3RwLT5ycV9yZXNwYWdlczsgY2hfbm8rKykKQEAgLTM5OSw3ICszOTMsNyBAQAogCQlycXN0cC0+cnFfcGFnZXNbcGFnZV9ub10gPSBoZWFkLT5wYWdlc1twYWdlX25vXTsKIAl9CiAJLyogUG9pbnQgcnFfYXJnLnBhZ2VzIHBhc3QgaGVhZGVyICovCi0JcnFzdHAtPnJxX2FyZy5wYWdlcyA9ICZycXN0cC0+cnFfcGFnZXNbaGVhZC0+c2dlWzBdLmxlbmd0aF07CisJcnFzdHAtPnJxX2FyZy5wYWdlcyA9ICZycXN0cC0+cnFfcGFnZXNbaGVhZC0+aGRyX2NvdW50XTsKIAlycXN0cC0+cnFfYXJnLnBhZ2VfbGVuID0gaGVhZC0+YXJnLnBhZ2VfbGVuOwogCXJxc3RwLT5ycV9hcmcucGFnZV9iYXNlID0gaGVhZC0+YXJnLnBhZ2VfYmFzZTsKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9zZW5kdG8uYyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfc2VuZHRvLmMKaW5kZXggZmI4MmIxYi4uYTE5YjIyYiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9zZW5kdG8uYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jCkBAIC02Myw1MiArNjMsNDQgQEAKICAqIFNHRVsyLi5zZ2VfY291bnQtMl0gZGF0YSBmcm9tIHhkci0+cGFnZXNbXQogICogU0dFW3NnZV9jb3VudC0xXSAgICBkYXRhIGZyb20geGRyLT50YWlsLgogICoKKyAqIFRoZSBtYXggU0dFIHdlIG5lZWQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgWERSIC8gcGFnZXNpemUgKyBvbmUgZm9yCisgKiBoZWFkICsgb25lIGZvciB0YWlsICsgb25lIGZvciBSUENSRE1BIGhlYWRlci4gU2luY2UgUlBDU1ZDX01BWFBBR0VTCisgKiByZXNlcnZlcyBhIHBhZ2UgZm9yIGJvdGggdGhlIHJlcXVlc3QgYW5kIHRoZSByZXBseSBoZWFkZXIsIGFuZCB0aGlzCisgKiBhcnJheSBpcyBvbmx5IGNvbmNlcm5lZCB3aXRoIHRoZSByZXBseSB3ZSBhcmUgYXNzdXJlZCB0aGF0IHdlIGhhdmUKKyAqIG9uIGV4dHJhIHBhZ2UgZm9yIHRoZSBSUENSTURBIGhlYWRlci4KICAqLwotc3RhdGljIHN0cnVjdCBpYl9zZ2UgKnhkcl90b19zZ2Uoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKLQkJCQkgc3RydWN0IHhkcl9idWYgKnhkciwKLQkJCQkgc3RydWN0IGliX3NnZSAqc2dlLAotCQkJCSBpbnQgKnNnZV9jb3VudCkKK3N0YXRpYyB2b2lkIHhkcl90b19zZ2Uoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKKwkJICAgICAgIHN0cnVjdCB4ZHJfYnVmICp4ZHIsCisJCSAgICAgICBzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqdmVjKQogewotCS8qIE1heCB3ZSBuZWVkIGlzIHRoZSBsZW5ndGggb2YgdGhlIFhEUiAvIHBhZ2VzaXplICsgb25lIGZvcgotCSAqIGhlYWQgKyBvbmUgZm9yIHRhaWwgKyBvbmUgZm9yIFJQQ1JETUEgaGVhZGVyCi0JICovCiAJaW50IHNnZV9tYXggPSAoeGRyLT5sZW4rUEFHRV9TSVpFLTEpIC8gUEFHRV9TSVpFICsgMzsKIAlpbnQgc2dlX25vOwotCXUzMiBieXRlX2NvdW50ID0geGRyLT5sZW47CiAJdTMyIHNnZV9ieXRlczsKIAl1MzIgcGFnZV9ieXRlczsKLQlpbnQgcGFnZV9vZmY7CisJdTMyIHBhZ2Vfb2ZmOwogCWludCBwYWdlX25vOwogCisJQlVHX09OKHhkci0+bGVuICE9CisJICAgICAgICh4ZHItPmhlYWRbMF0uaW92X2xlbiArIHhkci0+cGFnZV9sZW4gKyB4ZHItPnRhaWxbMF0uaW92X2xlbikpOworCiAJLyogU2tpcCB0aGUgZmlyc3Qgc2dlLCB0aGlzIGlzIGZvciB0aGUgUlBDUkRNQSBoZWFkZXIgKi8KIAlzZ2Vfbm8gPSAxOwogCiAJLyogSGVhZCBTR0UgKi8KLQlzZ2Vbc2dlX25vXS5hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoeHBydC0+c2NfY21faWQtPmRldmljZSwKLQkJCQkJICAgICB4ZHItPmhlYWRbMF0uaW92X2Jhc2UsCi0JCQkJCSAgICAgeGRyLT5oZWFkWzBdLmlvdl9sZW4sCi0JCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7Ci0Jc2dlX2J5dGVzID0gbWluX3QodTMyLCBieXRlX2NvdW50LCB4ZHItPmhlYWRbMF0uaW92X2xlbik7Ci0JYnl0ZV9jb3VudCAtPSBzZ2VfYnl0ZXM7Ci0Jc2dlW3NnZV9ub10ubGVuZ3RoID0gc2dlX2J5dGVzOwotCXNnZVtzZ2Vfbm9dLmxrZXkgPSB4cHJ0LT5zY19waHlzX21yLT5sa2V5OworCXZlYy0+c2dlW3NnZV9ub10uaW92X2Jhc2UgPSB4ZHItPmhlYWRbMF0uaW92X2Jhc2U7CisJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuID0geGRyLT5oZWFkWzBdLmlvdl9sZW47CiAJc2dlX25vKys7CiAKIAkvKiBwYWdlcyBTR0UgKi8KIAlwYWdlX25vID0gMDsKIAlwYWdlX2J5dGVzID0geGRyLT5wYWdlX2xlbjsKIAlwYWdlX29mZiA9IHhkci0+cGFnZV9iYXNlOwotCXdoaWxlIChieXRlX2NvdW50ICYmIHBhZ2VfYnl0ZXMpIHsKLQkJc2dlX2J5dGVzID0gbWluX3QodTMyLCBieXRlX2NvdW50LCAoUEFHRV9TSVpFLXBhZ2Vfb2ZmKSk7Ci0JCXNnZVtzZ2Vfbm9dLmFkZHIgPQotCQkJaWJfZG1hX21hcF9wYWdlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCi0JCQkJCXhkci0+cGFnZXNbcGFnZV9ub10sIHBhZ2Vfb2ZmLAotCQkJCQlzZ2VfYnl0ZXMsIERNQV9UT19ERVZJQ0UpOwotCQlzZ2VfYnl0ZXMgPSBtaW4oc2dlX2J5dGVzLCBwYWdlX2J5dGVzKTsKLQkJYnl0ZV9jb3VudCAtPSBzZ2VfYnl0ZXM7CisJd2hpbGUgKHBhZ2VfYnl0ZXMpIHsKKwkJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfYmFzZSA9CisJCQlwYWdlX2FkZHJlc3MoeGRyLT5wYWdlc1twYWdlX25vXSkgKyBwYWdlX29mZjsKKwkJc2dlX2J5dGVzID0gbWluX3QodTMyLCBwYWdlX2J5dGVzLCAoUEFHRV9TSVpFIC0gcGFnZV9vZmYpKTsKIAkJcGFnZV9ieXRlcyAtPSBzZ2VfYnl0ZXM7Ci0JCXNnZVtzZ2Vfbm9dLmxlbmd0aCA9IHNnZV9ieXRlczsKLQkJc2dlW3NnZV9ub10ubGtleSA9IHhwcnQtPnNjX3BoeXNfbXItPmxrZXk7CisJCXZlYy0+c2dlW3NnZV9ub10uaW92X2xlbiA9IHNnZV9ieXRlczsKIAogCQlzZ2Vfbm8rKzsKIAkJcGFnZV9ubysrOwpAQCAtMTE2LDM2ICsxMDgsMjQgQEAKIAl9CiAKIAkvKiBUYWlsIFNHRSAqLwotCWlmIChieXRlX2NvdW50ICYmIHhkci0+dGFpbFswXS5pb3ZfbGVuKSB7Ci0JCXNnZVtzZ2Vfbm9dLmFkZHIgPQotCQkJaWJfZG1hX21hcF9zaW5nbGUoeHBydC0+c2NfY21faWQtPmRldmljZSwKLQkJCQkJICB4ZHItPnRhaWxbMF0uaW92X2Jhc2UsCi0JCQkJCSAgeGRyLT50YWlsWzBdLmlvdl9sZW4sCi0JCQkJCSAgRE1BX1RPX0RFVklDRSk7Ci0JCXNnZV9ieXRlcyA9IG1pbl90KHUzMiwgYnl0ZV9jb3VudCwgeGRyLT50YWlsWzBdLmlvdl9sZW4pOwotCQlieXRlX2NvdW50IC09IHNnZV9ieXRlczsKLQkJc2dlW3NnZV9ub10ubGVuZ3RoID0gc2dlX2J5dGVzOwotCQlzZ2Vbc2dlX25vXS5sa2V5ID0geHBydC0+c2NfcGh5c19tci0+bGtleTsKKwlpZiAoeGRyLT50YWlsWzBdLmlvdl9sZW4pIHsKKwkJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfYmFzZSA9IHhkci0+dGFpbFswXS5pb3ZfYmFzZTsKKwkJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuID0geGRyLT50YWlsWzBdLmlvdl9sZW47CiAJCXNnZV9ubysrOwogCX0KIAogCUJVR19PTihzZ2Vfbm8gPiBzZ2VfbWF4KTsKLQlCVUdfT04oYnl0ZV9jb3VudCAhPSAwKTsKLQotCSpzZ2VfY291bnQgPSBzZ2Vfbm87Ci0JcmV0dXJuIHNnZTsKKwl2ZWMtPmNvdW50ID0gc2dlX25vOwogfQogCi0KIC8qIEFzc3VtcHRpb25zOgogICogLSBUaGUgc3BlY2lmaWVkIHdyaXRlX2xlbiBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gc2NfbWF4X3NnZSAqIFBBR0VfU0laRQogICovCiBzdGF0aWMgaW50IHNlbmRfd3JpdGUoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwgc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKIAkJICAgICAgdTMyIHJtciwgdTY0IHRvLAogCQkgICAgICB1MzIgeGRyX29mZiwgaW50IHdyaXRlX2xlbiwKLQkJICAgICAgc3RydWN0IGliX3NnZSAqeGRyX3NnZSwgaW50IHNnZV9jb3VudCkKKwkJICAgICAgc3RydWN0IHN2Y19yZG1hX3JlcV9tYXAgKnZlYykKIHsKLQlzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqdG1wX3NnZV9jdHh0OwogCXN0cnVjdCBpYl9zZW5kX3dyIHdyaXRlX3dyOwogCXN0cnVjdCBpYl9zZ2UgKnNnZTsKIAlpbnQgeGRyX3NnZV9ubzsKQEAgLTE1NCwyNSArMTM0LDIzIEBACiAJaW50IHNnZV9vZmY7CiAJaW50IGJjOwogCXN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0OwotCWludCByZXQgPSAwOwogCi0JQlVHX09OKHNnZV9jb3VudCA+IFJQQ1NWQ19NQVhQQUdFUyk7CisJQlVHX09OKHZlYy0+Y291bnQgPiBSUENTVkNfTUFYUEFHRVMpOwogCWRwcmludGsoInN2Y3JkbWE6IFJETUFfV1JJVEUgcm1yPSV4LCB0bz0lbGx4LCB4ZHJfb2ZmPSVkLCAiCi0JCSJ3cml0ZV9sZW49JWQsIHhkcl9zZ2U9JXAsIHNnZV9jb3VudD0lZFxuIiwKKwkJIndyaXRlX2xlbj0lZCwgdmVjLT5zZ2U9JXAsIHZlYy0+Y291bnQ9JWx1XG4iLAogCQlybXIsICh1bnNpZ25lZCBsb25nIGxvbmcpdG8sIHhkcl9vZmYsCi0JCXdyaXRlX2xlbiwgeGRyX3NnZSwgc2dlX2NvdW50KTsKKwkJd3JpdGVfbGVuLCB2ZWMtPnNnZSwgdmVjLT5jb3VudCk7CiAKIAljdHh0ID0gc3ZjX3JkbWFfZ2V0X2NvbnRleHQoeHBydCk7Ci0JY3R4dC0+Y291bnQgPSAwOwotCXRtcF9zZ2VfY3R4dCA9IHN2Y19yZG1hX2dldF9jb250ZXh0KHhwcnQpOwotCXNnZSA9IHRtcF9zZ2VfY3R4dC0+c2dlOworCWN0eHQtPmRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CisJc2dlID0gY3R4dC0+c2dlOwogCiAJLyogRmluZCB0aGUgU0dFIGFzc29jaWF0ZWQgd2l0aCB4ZHJfb2ZmICovCi0JZm9yIChiYyA9IHhkcl9vZmYsIHhkcl9zZ2Vfbm8gPSAxOyBiYyAmJiB4ZHJfc2dlX25vIDwgc2dlX2NvdW50OworCWZvciAoYmMgPSB4ZHJfb2ZmLCB4ZHJfc2dlX25vID0gMTsgYmMgJiYgeGRyX3NnZV9ubyA8IHZlYy0+Y291bnQ7CiAJICAgICB4ZHJfc2dlX25vKyspIHsKLQkJaWYgKHhkcl9zZ2VbeGRyX3NnZV9ub10ubGVuZ3RoID4gYmMpCisJCWlmICh2ZWMtPnNnZVt4ZHJfc2dlX25vXS5pb3ZfbGVuID4gYmMpCiAJCQlicmVhazsKLQkJYmMgLT0geGRyX3NnZVt4ZHJfc2dlX25vXS5sZW5ndGg7CisJCWJjIC09IHZlYy0+c2dlW3hkcl9zZ2Vfbm9dLmlvdl9sZW47CiAJfQogCiAJc2dlX29mZiA9IGJjOwpAQCAtMTgwLDIxICsxNTgsMjggQEAKIAlzZ2Vfbm8gPSAwOwogCiAJLyogQ29weSB0aGUgcmVtYWluaW5nIFNHRSAqLwotCXdoaWxlIChiYyAhPSAwICYmIHhkcl9zZ2Vfbm8gPCBzZ2VfY291bnQpIHsKLQkJc2dlW3NnZV9ub10uYWRkciA9IHhkcl9zZ2VbeGRyX3NnZV9ub10uYWRkciArIHNnZV9vZmY7Ci0JCXNnZVtzZ2Vfbm9dLmxrZXkgPSB4ZHJfc2dlW3hkcl9zZ2Vfbm9dLmxrZXk7CisJd2hpbGUgKGJjICE9IDAgJiYgeGRyX3NnZV9ubyA8IHZlYy0+Y291bnQpIHsKKwkJc2dlW3NnZV9ub10ubGtleSA9IHhwcnQtPnNjX3BoeXNfbXItPmxrZXk7CiAJCXNnZV9ieXRlcyA9IG1pbigoc2l6ZV90KWJjLAotCQkJCShzaXplX3QpKHhkcl9zZ2VbeGRyX3NnZV9ub10ubGVuZ3RoLXNnZV9vZmYpKTsKKwkJCQkoc2l6ZV90KSh2ZWMtPnNnZVt4ZHJfc2dlX25vXS5pb3ZfbGVuLXNnZV9vZmYpKTsKIAkJc2dlW3NnZV9ub10ubGVuZ3RoID0gc2dlX2J5dGVzOwotCisJCWF0b21pY19pbmMoJnhwcnQtPnNjX2RtYV91c2VkKTsKKwkJc2dlW3NnZV9ub10uYWRkciA9CisJCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCQkgICh2b2lkICopCisJCQkJCSAgdmVjLT5zZ2VbeGRyX3NnZV9ub10uaW92X2Jhc2UgKyBzZ2Vfb2ZmLAorCQkJCQkgIHNnZV9ieXRlcywgRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihzZ2Vbc2dlX25vXS5hZGRyKSkKKwkJCWdvdG8gZXJyOwogCQlzZ2Vfb2ZmID0gMDsKIAkJc2dlX25vKys7CisJCWN0eHQtPmNvdW50Kys7CiAJCXhkcl9zZ2Vfbm8rKzsKIAkJYmMgLT0gc2dlX2J5dGVzOwogCX0KIAogCUJVR19PTihiYyAhPSAwKTsKLQlCVUdfT04oeGRyX3NnZV9ubyA+IHNnZV9jb3VudCk7CisJQlVHX09OKHhkcl9zZ2Vfbm8gPiB2ZWMtPmNvdW50KTsKIAogCS8qIFByZXBhcmUgV1JJVEUgV1IgKi8KIAltZW1zZXQoJndyaXRlX3dyLCAwLCBzaXplb2Ygd3JpdGVfd3IpOwpAQCAtMjA5LDIxICsxOTQsMjAgQEAKIAogCS8qIFBvc3QgSXQgKi8KIAlhdG9taWNfaW5jKCZyZG1hX3N0YXRfd3JpdGUpOwotCWlmIChzdmNfcmRtYV9zZW5kKHhwcnQsICZ3cml0ZV93cikpIHsKLQkJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMSk7Ci0JCS8qIEZhdGFsIGVycm9yLCBjbG9zZSB0cmFuc3BvcnQgKi8KLQkJcmV0ID0gLUVJTzsKLQl9Ci0Jc3ZjX3JkbWFfcHV0X2NvbnRleHQodG1wX3NnZV9jdHh0LCAwKTsKLQlyZXR1cm4gcmV0OworCWlmIChzdmNfcmRtYV9zZW5kKHhwcnQsICZ3cml0ZV93cikpCisJCWdvdG8gZXJyOworCXJldHVybiAwOworIGVycjoKKwlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAwKTsKKwkvKiBGYXRhbCBlcnJvciwgY2xvc2UgdHJhbnNwb3J0ICovCisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgc2VuZF93cml0ZV9jaHVua3Moc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKIAkJCSAgICAgc3RydWN0IHJwY3JkbWFfbXNnICpyZG1hX2FyZ3AsCiAJCQkgICAgIHN0cnVjdCBycGNyZG1hX21zZyAqcmRtYV9yZXNwLAogCQkJICAgICBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAotCQkJICAgICBzdHJ1Y3QgaWJfc2dlICpzZ2UsCi0JCQkgICAgIGludCBzZ2VfY291bnQpCisJCQkgICAgIHN0cnVjdCBzdmNfcmRtYV9yZXFfbWFwICp2ZWMpCiB7CiAJdTMyIHhmZXJfbGVuID0gcnFzdHAtPnJxX3Jlcy5wYWdlX2xlbiArIHJxc3RwLT5ycV9yZXMudGFpbFswXS5pb3ZfbGVuOwogCWludCB3cml0ZV9sZW47CkBAIC0yNjksOCArMjUzLDcgQEAKIAkJCQkJIHJzX29mZnNldCArIGNodW5rX29mZiwKIAkJCQkJIHhkcl9vZmYsCiAJCQkJCSB0aGlzX3dyaXRlLAotCQkJCQkgc2dlLAotCQkJCQkgc2dlX2NvdW50KTsKKwkJCQkJIHZlYyk7CiAJCQlpZiAocmV0KSB7CiAJCQkJZHByaW50aygic3ZjcmRtYTogUkRNQV9XUklURSBmYWlsZWQsIHJldD0lZFxuIiwKIAkJCQkJcmV0KTsKQEAgLTI5Miw4ICsyNzUsNyBAQAogCQkJICAgICBzdHJ1Y3QgcnBjcmRtYV9tc2cgKnJkbWFfYXJncCwKIAkJCSAgICAgc3RydWN0IHJwY3JkbWFfbXNnICpyZG1hX3Jlc3AsCiAJCQkgICAgIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCi0JCQkgICAgIHN0cnVjdCBpYl9zZ2UgKnNnZSwKLQkJCSAgICAgaW50IHNnZV9jb3VudCkKKwkJCSAgICAgc3RydWN0IHN2Y19yZG1hX3JlcV9tYXAgKnZlYykKIHsKIAl1MzIgeGZlcl9sZW4gPSBycXN0cC0+cnFfcmVzLmxlbjsKIAlpbnQgd3JpdGVfbGVuOwpAQCAtMzQxLDggKzMyMyw3IEBACiAJCQkJCSByc19vZmZzZXQgKyBjaHVua19vZmYsCiAJCQkJCSB4ZHJfb2ZmLAogCQkJCQkgdGhpc193cml0ZSwKLQkJCQkJIHNnZSwKLQkJCQkJIHNnZV9jb3VudCk7CisJCQkJCSB2ZWMpOwogCQkJaWYgKHJldCkgewogCQkJCWRwcmludGsoInN2Y3JkbWE6IFJETUFfV1JJVEUgZmFpbGVkLCByZXQ9JWRcbiIsCiAJCQkJCXJldCk7CkBAIC0zODAsNyArMzYxLDcgQEAKIAkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCSAgICAgIHN0cnVjdCBycGNyZG1hX21zZyAqcmRtYV9yZXNwLAogCQkgICAgICBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dCwKLQkJICAgICAgaW50IHNnZV9jb3VudCwKKwkJICAgICAgc3RydWN0IHN2Y19yZG1hX3JlcV9tYXAgKnZlYywKIAkJICAgICAgaW50IGJ5dGVfY291bnQpCiB7CiAJc3RydWN0IGliX3NlbmRfd3Igc2VuZF93cjsKQEAgLTQwNSw2ICszODYsNyBAQAogCWN0eHQtPmNvdW50ID0gMTsKIAogCS8qIFByZXBhcmUgdGhlIFNHRSBmb3IgdGhlIFJQQ1JETUEgSGVhZGVyICovCisJYXRvbWljX2luYygmcmRtYS0+c2NfZG1hX3VzZWQpOwogCWN0eHQtPnNnZVswXS5hZGRyID0KIAkJaWJfZG1hX21hcF9wYWdlKHJkbWEtPnNjX2NtX2lkLT5kZXZpY2UsCiAJCQkJcGFnZSwgMCwgUEFHRV9TSVpFLCBETUFfVE9fREVWSUNFKTsKQEAgLTQxMywxMCArMzk1LDE2IEBACiAJY3R4dC0+c2dlWzBdLmxrZXkgPSByZG1hLT5zY19waHlzX21yLT5sa2V5OwogCiAJLyogRGV0ZXJtaW5lIGhvdyBtYW55IG9mIG91ciBTR0UgYXJlIHRvIGJlIHRyYW5zbWl0dGVkICovCi0JZm9yIChzZ2Vfbm8gPSAxOyBieXRlX2NvdW50ICYmIHNnZV9ubyA8IHNnZV9jb3VudDsgc2dlX25vKyspIHsKLQkJc2dlX2J5dGVzID0gbWluKChzaXplX3QpY3R4dC0+c2dlW3NnZV9ub10ubGVuZ3RoLAotCQkJCShzaXplX3QpYnl0ZV9jb3VudCk7CisJZm9yIChzZ2Vfbm8gPSAxOyBieXRlX2NvdW50ICYmIHNnZV9ubyA8IHZlYy0+Y291bnQ7IHNnZV9ubysrKSB7CisJCXNnZV9ieXRlcyA9IG1pbl90KHNpemVfdCwgdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuLCBieXRlX2NvdW50KTsKIAkJYnl0ZV9jb3VudCAtPSBzZ2VfYnl0ZXM7CisJCWF0b21pY19pbmMoJnJkbWEtPnNjX2RtYV91c2VkKTsKKwkJY3R4dC0+c2dlW3NnZV9ub10uYWRkciA9CisJCQlpYl9kbWFfbWFwX3NpbmdsZShyZG1hLT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCQkgIHZlYy0+c2dlW3NnZV9ub10uaW92X2Jhc2UsCisJCQkJCSAgc2dlX2J5dGVzLCBETUFfVE9fREVWSUNFKTsKKwkJY3R4dC0+c2dlW3NnZV9ub10ubGVuZ3RoID0gc2dlX2J5dGVzOworCQljdHh0LT5zZ2Vbc2dlX25vXS5sa2V5ID0gcmRtYS0+c2NfcGh5c19tci0+bGtleTsKIAl9CiAJQlVHX09OKGJ5dGVfY291bnQgIT0gMCk7CiAKQEAgLTQyOCw4ICs0MTYsMTAgQEAKIAkJY3R4dC0+cGFnZXNbcGFnZV9ubysxXSA9IHJxc3RwLT5ycV9yZXNwYWdlc1twYWdlX25vXTsKIAkJY3R4dC0+Y291bnQrKzsKIAkJcnFzdHAtPnJxX3Jlc3BhZ2VzW3BhZ2Vfbm9dID0gTlVMTDsKKwkJLyogSWYgdGhlcmUgYXJlIG1vcmUgcGFnZXMgdGhhbiBTR0UsIHRlcm1pbmF0ZSBTR0UgbGlzdCAqLworCQlpZiAocGFnZV9ubysxID49IHNnZV9ubykKKwkJCWN0eHQtPnNnZVtwYWdlX25vKzFdLmxlbmd0aCA9IDA7CiAJfQotCiAJQlVHX09OKHNnZV9ubyA+IHJkbWEtPnNjX21heF9zZ2UpOwogCW1lbXNldCgmc2VuZF93ciwgMCwgc2l6ZW9mIHNlbmRfd3IpOwogCWN0eHQtPndyX29wID0gSUJfV1JfU0VORDsKQEAgLTQ3MywyMCArNDYzLDIwIEBACiAJZW51bSBycGNyZG1hX3Byb2MgcmVwbHlfdHlwZTsKIAlpbnQgcmV0OwogCWludCBpbmxpbmVfYnl0ZXM7Ci0Jc3RydWN0IGliX3NnZSAqc2dlOwotCWludCBzZ2VfY291bnQgPSAwOwogCXN0cnVjdCBwYWdlICpyZXNfcGFnZTsKIAlzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dDsKKwlzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqdmVjOwogCiAJZHByaW50aygic3ZjcmRtYTogc2VuZGluZyByZXNwb25zZSBmb3IgcnFzdHA9JXBcbiIsIHJxc3RwKTsKIAogCS8qIEdldCB0aGUgUkRNQSByZXF1ZXN0IGhlYWRlci4gKi8KIAlyZG1hX2FyZ3AgPSB4ZHJfc3RhcnQoJnJxc3RwLT5ycV9hcmcpOwogCi0JLyogQnVpbGQgYW4gU0dFIGZvciB0aGUgWERSICovCisJLyogQnVpbGQgYW4gcmVxIHZlYyBmb3IgdGhlIFhEUiAqLwogCWN0eHQgPSBzdmNfcmRtYV9nZXRfY29udGV4dChyZG1hKTsKIAljdHh0LT5kaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwotCXNnZSA9IHhkcl90b19zZ2UocmRtYSwgJnJxc3RwLT5ycV9yZXMsIGN0eHQtPnNnZSwgJnNnZV9jb3VudCk7CisJdmVjID0gc3ZjX3JkbWFfZ2V0X3JlcV9tYXAoKTsKKwl4ZHJfdG9fc2dlKHJkbWEsICZycXN0cC0+cnFfcmVzLCB2ZWMpOwogCiAJaW5saW5lX2J5dGVzID0gcnFzdHAtPnJxX3Jlcy5sZW47CiAKQEAgLTUwMyw3ICs0OTMsNyBAQAogCiAJLyogU2VuZCBhbnkgd3JpdGUtY2h1bmsgZGF0YSBhbmQgYnVpbGQgcmVzcCB3cml0ZS1saXN0ICovCiAJcmV0ID0gc2VuZF93cml0ZV9jaHVua3MocmRtYSwgcmRtYV9hcmdwLCByZG1hX3Jlc3AsCi0JCQkJcnFzdHAsIHNnZSwgc2dlX2NvdW50KTsKKwkJCQlycXN0cCwgdmVjKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInN2Y3JkbWE6IGZhaWxlZCB0byBzZW5kIHdyaXRlIGNodW5rcywgcmM9JWRcbiIsCiAJCSAgICAgICByZXQpOwpAQCAtNTEzLDcgKzUwMyw3IEBACiAKIAkvKiBTZW5kIGFueSByZXBseS1saXN0IGRhdGEgYW5kIHVwZGF0ZSByZXNwIHJlcGx5LWxpc3QgKi8KIAlyZXQgPSBzZW5kX3JlcGx5X2NodW5rcyhyZG1hLCByZG1hX2FyZ3AsIHJkbWFfcmVzcCwKLQkJCQlycXN0cCwgc2dlLCBzZ2VfY291bnQpOworCQkJCXJxc3RwLCB2ZWMpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3ZjcmRtYTogZmFpbGVkIHRvIHNlbmQgcmVwbHkgY2h1bmtzLCByYz0lZFxuIiwKIAkJICAgICAgIHJldCk7CkBAIC01MjEsMTEgKzUxMSwxMyBAQAogCX0KIAlpbmxpbmVfYnl0ZXMgLT0gcmV0OwogCi0JcmV0ID0gc2VuZF9yZXBseShyZG1hLCBycXN0cCwgcmVzX3BhZ2UsIHJkbWFfcmVzcCwgY3R4dCwgc2dlX2NvdW50LAorCXJldCA9IHNlbmRfcmVwbHkocmRtYSwgcnFzdHAsIHJlc19wYWdlLCByZG1hX3Jlc3AsIGN0eHQsIHZlYywKIAkJCSBpbmxpbmVfYnl0ZXMpOworCXN2Y19yZG1hX3B1dF9yZXFfbWFwKHZlYyk7CiAJZHByaW50aygic3ZjcmRtYTogc2VuZF9yZXBseSByZXR1cm5zICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiAgZXJyb3I6CisJc3ZjX3JkbWFfcHV0X3JlcV9tYXAodmVjKTsKIAlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAwKTsKIAlwdXRfcGFnZShyZXNfcGFnZSk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCmluZGV4IGUxMzI1MDkuLjE5ZGRjMzggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwpAQCAtODQsNzIgKzg0LDM5IEBACiAJLnhjbF9tYXhfcGF5bG9hZCA9IFJQQ1NWQ19NQVhQQVlMT0FEX1RDUCwKIH07CiAKLXN0YXRpYyBpbnQgcmRtYV9idW1wX2NvbnRleHRfY2FjaGUoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCkKLXsKLQlpbnQgdGFyZ2V0OwotCWludCBhdF9sZWFzdF9vbmUgPSAwOwotCXN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0OwotCi0JdGFyZ2V0ID0gbWluKHhwcnQtPnNjX2N0eHRfY250ICsgeHBydC0+c2NfY3R4dF9idW1wLAotCQkgICAgIHhwcnQtPnNjX2N0eHRfbWF4KTsKLQotCXNwaW5fbG9ja19iaCgmeHBydC0+c2NfY3R4dF9sb2NrKTsKLQl3aGlsZSAoeHBydC0+c2NfY3R4dF9jbnQgPCB0YXJnZXQpIHsKLQkJeHBydC0+c2NfY3R4dF9jbnQrKzsKLQkJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnNjX2N0eHRfbG9jayk7Ci0KLQkJY3R4dCA9IGttYWxsb2Moc2l6ZW9mKCpjdHh0KSwgR0ZQX0tFUk5FTCk7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZ4cHJ0LT5zY19jdHh0X2xvY2spOwotCQlpZiAoY3R4dCkgewotCQkJYXRfbGVhc3Rfb25lID0gMTsKLQkJCUlOSVRfTElTVF9IRUFEKCZjdHh0LT5mcmVlX2xpc3QpOwotCQkJbGlzdF9hZGQoJmN0eHQtPmZyZWVfbGlzdCwgJnhwcnQtPnNjX2N0eHRfZnJlZSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBrbWFsbG9jIGZhaWxlZC4uLmdpdmUgdXAgZm9yIG5vdyAqLwotCQkJeHBydC0+c2NfY3R4dF9jbnQtLTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT5zY19jdHh0X2xvY2spOwotCWRwcmludGsoInN2Y3JkbWE6IHNjX2N0eHRfbWF4PSVkLCBzY19jdHh0X2NudD0lZFxuIiwKLQkJeHBydC0+c2NfY3R4dF9tYXgsIHhwcnQtPnNjX2N0eHRfY250KTsKLQlyZXR1cm4gYXRfbGVhc3Rfb25lOwotfQorLyogV1IgY29udGV4dCBjYWNoZS4gQ3JlYXRlZCBpbiBzdmNfcmRtYS5jICAqLworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpzdmNfcmRtYV9jdHh0X2NhY2hlcDsKIAogc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKnN2Y19yZG1hX2dldF9jb250ZXh0KHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQpCiB7CiAJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmN0eHQ7CiAKIAl3aGlsZSAoMSkgewotCQlzcGluX2xvY2tfYmgoJnhwcnQtPnNjX2N0eHRfbG9jayk7Ci0JCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZ4cHJ0LT5zY19jdHh0X2ZyZWUpKSkgewotCQkJLyogVHJ5IHRvIGJ1bXAgbXkgY2FjaGUuICovCi0JCQlzcGluX3VubG9ja19iaCgmeHBydC0+c2NfY3R4dF9sb2NrKTsKLQotCQkJaWYgKHJkbWFfYnVtcF9jb250ZXh0X2NhY2hlKHhwcnQpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlwcmludGsoS0VSTl9JTkZPICJzdmNyZG1hOiBzbGVlcGluZyB3YWl0aW5nIGZvciAiCi0JCQkgICAgICAgImNvbnRleHQgbWVtb3J5IG9uIHhwcnQ9JXBcbiIsCi0JCQkgICAgICAgeHBydCk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDUwMCkpOwotCQkJY29udGludWU7Ci0JCX0KLQkJY3R4dCA9IGxpc3RfZW50cnkoeHBydC0+c2NfY3R4dF9mcmVlLm5leHQsCi0JCQkJICBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCwKLQkJCQkgIGZyZWVfbGlzdCk7Ci0JCWxpc3RfZGVsX2luaXQoJmN0eHQtPmZyZWVfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT5zY19jdHh0X2xvY2spOwotCQljdHh0LT54cHJ0ID0geHBydDsKLQkJSU5JVF9MSVNUX0hFQUQoJmN0eHQtPmR0b19xKTsKLQkJY3R4dC0+Y291bnQgPSAwOwotCQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19jdHh0X3VzZWQpOwotCQlicmVhazsKKwkJY3R4dCA9IGttZW1fY2FjaGVfYWxsb2Moc3ZjX3JkbWFfY3R4dF9jYWNoZXAsIEdGUF9LRVJORUwpOworCQlpZiAoY3R4dCkKKwkJCWJyZWFrOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDUwMCkpOwogCX0KKwljdHh0LT54cHJ0ID0geHBydDsKKwlJTklUX0xJU1RfSEVBRCgmY3R4dC0+ZHRvX3EpOworCWN0eHQtPmNvdW50ID0gMDsKKwlhdG9taWNfaW5jKCZ4cHJ0LT5zY19jdHh0X3VzZWQpOwogCXJldHVybiBjdHh0OwogfQogCitzdGF0aWMgdm9pZCBzdmNfcmRtYV91bm1hcF9kbWEoc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCA9IGN0eHQtPnhwcnQ7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGN0eHQtPmNvdW50ICYmIGN0eHQtPnNnZVtpXS5sZW5ndGg7IGkrKykgeworCQlhdG9taWNfZGVjKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CisJCWliX2RtYV91bm1hcF9zaW5nbGUoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkgICAgY3R4dC0+c2dlW2ldLmFkZHIsCisJCQkJICAgIGN0eHQtPnNnZVtpXS5sZW5ndGgsCisJCQkJICAgIGN0eHQtPmRpcmVjdGlvbik7CisJfQorfQorCiB2b2lkIHN2Y19yZG1hX3B1dF9jb250ZXh0KHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0LCBpbnQgZnJlZV9wYWdlcykKIHsKIAlzdHJ1Y3Qgc3ZjeHBydF9yZG1hICp4cHJ0OwpAQCAtMTYxLDE4ICsxMjgsMzYgQEAKIAkJZm9yIChpID0gMDsgaSA8IGN0eHQtPmNvdW50OyBpKyspCiAJCQlwdXRfcGFnZShjdHh0LT5wYWdlc1tpXSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY3R4dC0+Y291bnQ7IGkrKykKLQkJaWJfZG1hX3VubWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAotCQkJCSAgICBjdHh0LT5zZ2VbaV0uYWRkciwKLQkJCQkgICAgY3R4dC0+c2dlW2ldLmxlbmd0aCwKLQkJCQkgICAgY3R4dC0+ZGlyZWN0aW9uKTsKLQotCXNwaW5fbG9ja19iaCgmeHBydC0+c2NfY3R4dF9sb2NrKTsKLQlsaXN0X2FkZCgmY3R4dC0+ZnJlZV9saXN0LCAmeHBydC0+c2NfY3R4dF9mcmVlKTsKLQlzcGluX3VubG9ja19iaCgmeHBydC0+c2NfY3R4dF9sb2NrKTsKKwlrbWVtX2NhY2hlX2ZyZWUoc3ZjX3JkbWFfY3R4dF9jYWNoZXAsIGN0eHQpOwogCWF0b21pY19kZWMoJnhwcnQtPnNjX2N0eHRfdXNlZCk7CiB9CiAKKy8qIFRlbXBvcmFyeSBORlMgcmVxdWVzdCBtYXAgY2FjaGUuIENyZWF0ZWQgaW4gc3ZjX3JkbWEuYyAgKi8KK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqc3ZjX3JkbWFfbWFwX2NhY2hlcDsKKworLyoKKyAqIFRlbXBvcmFyeSBORlMgcmVxIG1hcHBpbmdzIGFyZSBzaGFyZWQgYWNyb3NzIGFsbCB0cmFuc3BvcnQKKyAqIGluc3RhbmNlcy4gVGhlc2UgYXJlIHNob3J0IGxpdmVkIGFuZCBzaG91bGQgYmUgYm91bmRlZCBieSB0aGUgbnVtYmVyCisgKiBvZiBjb25jdXJyZW50IHNlcnZlciB0aHJlYWRzICogZGVwdGggb2YgdGhlIFNRLgorICovCitzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqc3ZjX3JkbWFfZ2V0X3JlcV9tYXAodm9pZCkKK3sKKwlzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqbWFwOworCXdoaWxlICgxKSB7CisJCW1hcCA9IGttZW1fY2FjaGVfYWxsb2Moc3ZjX3JkbWFfbWFwX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJCWlmIChtYXApCisJCQlicmVhazsKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyg1MDApKTsKKwl9CisJbWFwLT5jb3VudCA9IDA7CisJcmV0dXJuIG1hcDsKK30KKwordm9pZCBzdmNfcmRtYV9wdXRfcmVxX21hcChzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqbWFwKQoreworCWttZW1fY2FjaGVfZnJlZShzdmNfcmRtYV9tYXBfY2FjaGVwLCBtYXApOworfQorCiAvKiBpYl9jcSBldmVudCBoYW5kbGVyICovCiBzdGF0aWMgdm9pZCBjcV9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmNvbnRleHQpCiB7CkBAIC0zMDIsNiArMjg3LDcgQEAKIAkJY3R4dCA9IChzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqKSh1bnNpZ25lZCBsb25nKXdjLndyX2lkOwogCQljdHh0LT53Y19zdGF0dXMgPSB3Yy5zdGF0dXM7CiAJCWN0eHQtPmJ5dGVfbGVuID0gd2MuYnl0ZV9sZW47CisJCXN2Y19yZG1hX3VubWFwX2RtYShjdHh0KTsKIAkJaWYgKHdjLnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTKSB7CiAJCQkvKiBDbG9zZSB0aGUgdHJhbnNwb3J0ICovCiAJCQlkcHJpbnRrKCJzdmNyZG1hOiB0cmFuc3BvcnQgY2xvc2luZyBwdXR0aW5nIGN0eHQgJXBcbiIsIGN0eHQpOwpAQCAtMzUxLDYgKzMzNyw3IEBACiAJCWN0eHQgPSAoc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKikodW5zaWduZWQgbG9uZyl3Yy53cl9pZDsKIAkJeHBydCA9IGN0eHQtPnhwcnQ7CiAKKwkJc3ZjX3JkbWFfdW5tYXBfZG1hKGN0eHQpOwogCQlpZiAod2Muc3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpCiAJCQkvKiBDbG9zZSB0aGUgdHJhbnNwb3J0ICovCiAJCQlzZXRfYml0KFhQVF9DTE9TRSwgJnhwcnQtPnNjX3hwcnQueHB0X2ZsYWdzKTsKQEAgLTM2MSwxMCArMzQ4LDEzIEBACiAKIAkJc3dpdGNoIChjdHh0LT53cl9vcCkgewogCQljYXNlIElCX1dSX1NFTkQ6Ci0JCWNhc2UgSUJfV1JfUkRNQV9XUklURToKIAkJCXN2Y19yZG1hX3B1dF9jb250ZXh0KGN0eHQsIDEpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCQkJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMCk7CisJCQlicmVhazsKKwogCQljYXNlIElCX1dSX1JETUFfUkVBRDoKIAkJCWlmICh0ZXN0X2JpdChSRE1BQ1RYVF9GX0xBU1RfQ1RYVCwgJmN0eHQtPmZsYWdzKSkgewogCQkJCXN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpyZWFkX2hkciA9IGN0eHQtPnJlYWRfaGRyOwpAQCAtNDIzLDQwICs0MTMsNiBAQAogCXRhc2tsZXRfc2NoZWR1bGUoJmR0b190YXNrbGV0KTsKIH0KIAotc3RhdGljIHZvaWQgY3JlYXRlX2NvbnRleHRfY2FjaGUoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKLQkJCQkgaW50IGN0eHRfY291bnQsIGludCBjdHh0X2J1bXAsIGludCBjdHh0X21heCkKLXsKLQlzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dDsKLQlpbnQgaTsKLQotCXhwcnQtPnNjX2N0eHRfbWF4ID0gY3R4dF9tYXg7Ci0JeHBydC0+c2NfY3R4dF9idW1wID0gY3R4dF9idW1wOwotCXhwcnQtPnNjX2N0eHRfY250ID0gMDsKLQlhdG9taWNfc2V0KCZ4cHJ0LT5zY19jdHh0X3VzZWQsIDApOwotCi0JSU5JVF9MSVNUX0hFQUQoJnhwcnQtPnNjX2N0eHRfZnJlZSk7Ci0JZm9yIChpID0gMDsgaSA8IGN0eHRfY291bnQ7IGkrKykgewotCQljdHh0ID0ga21hbGxvYyhzaXplb2YoKmN0eHQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGN0eHQpIHsKLQkJCUlOSVRfTElTVF9IRUFEKCZjdHh0LT5mcmVlX2xpc3QpOwotCQkJbGlzdF9hZGQoJmN0eHQtPmZyZWVfbGlzdCwgJnhwcnQtPnNjX2N0eHRfZnJlZSk7Ci0JCQl4cHJ0LT5zY19jdHh0X2NudCsrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkZXN0cm95X2NvbnRleHRfY2FjaGUoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCkKLXsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnhwcnQtPnNjX2N0eHRfZnJlZSkpIHsKLQkJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmN0eHQ7Ci0JCWN0eHQgPSBsaXN0X2VudHJ5KHhwcnQtPnNjX2N0eHRfZnJlZS5uZXh0LAotCQkJCSAgc3RydWN0IHN2Y19yZG1hX29wX2N0eHQsCi0JCQkJICBmcmVlX2xpc3QpOwotCQlsaXN0X2RlbF9pbml0KCZjdHh0LT5mcmVlX2xpc3QpOwotCQlrZnJlZShjdHh0KTsKLQl9Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc3ZjeHBydF9yZG1hICpyZG1hX2NyZWF0ZV94cHJ0KHN0cnVjdCBzdmNfc2VydiAqc2VydiwKIAkJCQkJICAgICBpbnQgbGlzdGVuZXIpCiB7CkBAIC00NzMsNyArNDI5LDYgQEAKIAogCXNwaW5fbG9ja19pbml0KCZjbWFfeHBydC0+c2NfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNtYV94cHJ0LT5zY19yZWFkX2NvbXBsZXRlX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjbWFfeHBydC0+c2NfY3R4dF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY21hX3hwcnQtPnNjX3JxX2R0b19sb2NrKTsKIAogCWNtYV94cHJ0LT5zY19vcmQgPSBzdmNyZG1hX29yZDsKQEAgLTQ4MiwyMSArNDM3LDkgQEAKIAljbWFfeHBydC0+c2NfbWF4X3JlcXVlc3RzID0gc3ZjcmRtYV9tYXhfcmVxdWVzdHM7CiAJY21hX3hwcnQtPnNjX3NxX2RlcHRoID0gc3ZjcmRtYV9tYXhfcmVxdWVzdHMgKiBSUENSRE1BX1NRX0RFUFRIX01VTFQ7CiAJYXRvbWljX3NldCgmY21hX3hwcnQtPnNjX3NxX2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZjbWFfeHBydC0+c2NfY3R4dF91c2VkLCAwKTsKIAotCWlmICghbGlzdGVuZXIpIHsKLQkJaW50IHJlcXMgPSBjbWFfeHBydC0+c2NfbWF4X3JlcXVlc3RzOwotCQljcmVhdGVfY29udGV4dF9jYWNoZShjbWFfeHBydCwKLQkJCQkgICAgIHJlcXMgPDwgMSwgLyogc3RhcnRpbmcgc2l6ZSAqLwotCQkJCSAgICAgcmVxcywJLyogYnVtcCBhbW91bnQgKi8KLQkJCQkgICAgIHJlcXMgKwotCQkJCSAgICAgY21hX3hwcnQtPnNjX3NxX2RlcHRoICsKLQkJCQkgICAgIFJQQ1JETUFfTUFYX1RIUkVBRFMgKyAxKTsgLyogbWF4ICovCi0JCWlmIChsaXN0X2VtcHR5KCZjbWFfeHBydC0+c2NfY3R4dF9mcmVlKSkgewotCQkJa2ZyZWUoY21hX3hwcnQpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJY2xlYXJfYml0KFhQVF9MSVNURU5FUiwgJmNtYV94cHJ0LT5zY194cHJ0LnhwdF9mbGFncyk7Ci0JfSBlbHNlCisJaWYgKGxpc3RlbmVyKQogCQlzZXRfYml0KFhQVF9MSVNURU5FUiwgJmNtYV94cHJ0LT5zY194cHJ0LnhwdF9mbGFncyk7CiAKIAlyZXR1cm4gY21hX3hwcnQ7CkBAIC01MzIsNiArNDc1LDcgQEAKIAkJQlVHX09OKHNnZV9ubyA+PSB4cHJ0LT5zY19tYXhfc2dlKTsKIAkJcGFnZSA9IHN2Y19yZG1hX2dldF9wYWdlKCk7CiAJCWN0eHQtPnBhZ2VzW3NnZV9ub10gPSBwYWdlOworCQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CiAJCXBhID0gaWJfZG1hX21hcF9wYWdlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCiAJCQkJICAgICBwYWdlLCAwLCBQQUdFX1NJWkUsCiAJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwpAQCAtNTY2LDcgKzUxMCw3IEBACiAgKiB3aWxsIGNhbGwgdGhlIHJlY3Zmcm9tIG1ldGhvZCBvbiB0aGUgbGlzdGVuIHhwcnQgd2hpY2ggd2lsbCBhY2NlcHQgdGhlIG5ldwogICogY29ubmVjdGlvbi4KICAqLwotc3RhdGljIHZvaWQgaGFuZGxlX2Nvbm5lY3RfcmVxKHN0cnVjdCByZG1hX2NtX2lkICpuZXdfY21hX2lkKQorc3RhdGljIHZvaWQgaGFuZGxlX2Nvbm5lY3RfcmVxKHN0cnVjdCByZG1hX2NtX2lkICpuZXdfY21hX2lkLCBzaXplX3QgY2xpZW50X2lyZCkKIHsKIAlzdHJ1Y3Qgc3ZjeHBydF9yZG1hICpsaXN0ZW5feHBydCA9IG5ld19jbWFfaWQtPmNvbnRleHQ7CiAJc3RydWN0IHN2Y3hwcnRfcmRtYSAqbmV3eHBydDsKQEAgLTU4Myw2ICs1MjcsOSBAQAogCWRwcmludGsoInN2Y3JkbWE6IENyZWF0aW5nIG5ld3hwcnQ9JXAsIGNtX2lkPSVwLCBsaXN0ZW54cHJ0PSVwXG4iLAogCQluZXd4cHJ0LCBuZXd4cHJ0LT5zY19jbV9pZCwgbGlzdGVuX3hwcnQpOwogCisJLyogU2F2ZSBjbGllbnQgYWR2ZXJ0aXNlZCBpbmJvdW5kIHJlYWQgbGltaXQgZm9yIHVzZSBsYXRlciBpbiBhY2NlcHQuICovCisJbmV3eHBydC0+c2Nfb3JkID0gY2xpZW50X2lyZDsKKwogCS8qIFNldCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgaW4gdGhlIHRyYW5zcG9ydCAqLwogCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZuZXd4cHJ0LT5zY19jbV9pZC0+cm91dGUuYWRkci5kc3RfYWRkcjsKIAlzdmNfeHBydF9zZXRfcmVtb3RlKCZuZXd4cHJ0LT5zY194cHJ0LCBzYSwgc3ZjX2FkZHJfbGVuKHNhKSk7CkBAIC02MTksNyArNTY2LDggQEAKIAljYXNlIFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNUOgogCQlkcHJpbnRrKCJzdmNyZG1hOiBDb25uZWN0IHJlcXVlc3Qgb24gY21hX2lkPSVwLCB4cHJ0ID0gJXAsICIKIAkJCSJldmVudD0lZFxuIiwgY21hX2lkLCBjbWFfaWQtPmNvbnRleHQsIGV2ZW50LT5ldmVudCk7Ci0JCWhhbmRsZV9jb25uZWN0X3JlcShjbWFfaWQpOworCQloYW5kbGVfY29ubmVjdF9yZXEoY21hX2lkLAorCQkJCSAgIGV2ZW50LT5wYXJhbS5jb25uLnJlc3BvbmRlcl9yZXNvdXJjZXMpOwogCQlicmVhazsKIAogCWNhc2UgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDoKQEAgLTc5Myw4ICs3NDEsMTIgQEAKIAkJCQkgICAoc2l6ZV90KXN2Y3JkbWFfbWF4X3JlcXVlc3RzKTsKIAluZXd4cHJ0LT5zY19zcV9kZXB0aCA9IFJQQ1JETUFfU1FfREVQVEhfTVVMVCAqIG5ld3hwcnQtPnNjX21heF9yZXF1ZXN0czsKIAotCW5ld3hwcnQtPnNjX29yZCA9ICBtaW4oKHNpemVfdClkZXZhdHRyLm1heF9xcF9yZF9hdG9tLAotCQkJICAgICAgIChzaXplX3Qpc3ZjcmRtYV9vcmQpOworCS8qCisJICogTGltaXQgT1JEIGJhc2VkIG9uIGNsaWVudCBsaW1pdCwgbG9jYWwgZGV2aWNlIGxpbWl0LCBhbmQKKwkgKiBjb25maWd1cmVkIHN2Y3JkbWEgbGltaXQuCisJICovCisJbmV3eHBydC0+c2Nfb3JkID0gbWluX3Qoc2l6ZV90LCBkZXZhdHRyLm1heF9xcF9yZF9hdG9tLCBuZXd4cHJ0LT5zY19vcmQpOworCW5ld3hwcnQtPnNjX29yZCA9IG1pbl90KHNpemVfdCwJc3ZjcmRtYV9vcmQsIG5ld3hwcnQtPnNjX29yZCk7CiAKIAluZXd4cHJ0LT5zY19wZCA9IGliX2FsbG9jX3BkKG5ld3hwcnQtPnNjX2NtX2lkLT5kZXZpY2UpOwogCWlmIChJU19FUlIobmV3eHBydC0+c2NfcGQpKSB7CkBAIC05ODcsNyArOTM5LDYgQEAKIAkgKiBjbV9pZCBiZWNhdXNlIHRoZSBkZXZpY2UgcHRyIGlzIG5lZWRlZCB0byB1bm1hcCB0aGUgZG1hIGluCiAJICogc3ZjX3JkbWFfcHV0X2NvbnRleHQuCiAJICovCi0Jc3Bpbl9sb2NrX2JoKCZyZG1hLT5zY19yZWFkX2NvbXBsZXRlX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmcmRtYS0+c2NfcmVhZF9jb21wbGV0ZV9xKSkgewogCQlzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dDsKIAkJY3R4dCA9IGxpc3RfZW50cnkocmRtYS0+c2NfcmVhZF9jb21wbGV0ZV9xLm5leHQsCkBAIC05OTYsMTAgKzk0Nyw4IEBACiAJCWxpc3RfZGVsX2luaXQoJmN0eHQtPmR0b19xKTsKIAkJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMSk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZyZG1hLT5zY19yZWFkX2NvbXBsZXRlX2xvY2spOwogCiAJLyogRGVzdHJveSBxdWV1ZWQsIGJ1dCBub3QgcHJvY2Vzc2VkIHJlY3YgY29tcGxldGlvbnMgKi8KLQlzcGluX2xvY2tfYmgoJnJkbWEtPnNjX3JxX2R0b19sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnJkbWEtPnNjX3JxX2R0b19xKSkgewogCQlzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dDsKIAkJY3R4dCA9IGxpc3RfZW50cnkocmRtYS0+c2NfcnFfZHRvX3EubmV4dCwKQEAgLTEwMDgsMTAgKzk1NywxMCBAQAogCQlsaXN0X2RlbF9pbml0KCZjdHh0LT5kdG9fcSk7CiAJCXN2Y19yZG1hX3B1dF9jb250ZXh0KGN0eHQsIDEpOwogCX0KLQlzcGluX3VubG9ja19iaCgmcmRtYS0+c2NfcnFfZHRvX2xvY2spOwogCiAJLyogV2FybiBpZiB3ZSBsZWFrZWQgYSByZXNvdXJjZSBvciB1bmRlci1yZWZlcmVuY2VkICovCiAJV0FSTl9PTihhdG9taWNfcmVhZCgmcmRtYS0+c2NfY3R4dF91c2VkKSAhPSAwKTsKKwlXQVJOX09OKGF0b21pY19yZWFkKCZyZG1hLT5zY19kbWFfdXNlZCkgIT0gMCk7CiAKIAkvKiBEZXN0cm95IHRoZSBRUCBpZiBwcmVzZW50IChub3QgYSBsaXN0ZW5lcikgKi8KIAlpZiAocmRtYS0+c2NfcXAgJiYgIUlTX0VSUihyZG1hLT5zY19xcCkpCkBAIC0xMDMyLDcgKzk4MSw2IEBACiAJLyogRGVzdHJveSB0aGUgQ00gSUQgKi8KIAlyZG1hX2Rlc3Ryb3lfaWQocmRtYS0+c2NfY21faWQpOwogCi0JZGVzdHJveV9jb250ZXh0X2NhY2hlKHJkbWEpOwogCWtmcmVlKHJkbWEpOwogfQogCkBAIC0xMTMyLDYgKzEwODAsNyBAQAogCWxlbmd0aCA9IHN2Y19yZG1hX3hkcl9lbmNvZGVfZXJyb3IoeHBydCwgcm1zZ3AsIGVyciwgdmEpOwogCiAJLyogUHJlcGFyZSBTR0UgZm9yIGxvY2FsIGFkZHJlc3MgKi8KKwlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CiAJc2dlLmFkZHIgPSBpYl9kbWFfbWFwX3BhZ2UoeHBydC0+c2NfY21faWQtPmRldmljZSwKIAkJCQkgICBwLCAwLCBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAJc2dlLmxrZXkgPSB4cHJ0LT5zY19waHlzX21yLT5sa2V5OwpkaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmMKaW5kZXggYjRmMDUyNS4uMDA3YzFhNiAxMDA2NDQKLS0tIGEvbmV0L3N5c2N0bF9uZXQuYworKysgYi9uZXQvc3lzY3RsX25ldC5jCkBAIC00LDcgKzQsNiBAQAogICogQmVndW4gQXByaWwgMSwgMTk5NiwgTWlrZSBTaGF2ZXIuCiAgKiBBZGRlZCAvcHJvYy9zeXMvbmV0IGRpcmVjdG9yaWVzIGZvciBlYWNoIHByb3RvY29sIGZhbWlseS4gW01TXQogICoKLSAqICRMb2c6IHN5c2N0bF9uZXQuYyx2ICQKICAqIFJldmlzaW9uIDEuMiAgMTk5Ni8wNS8wOCAgMjA6MjQ6NDAgIHNoYXZlcgogICogQWRkZWQgYml0cyBmb3IgTkVUX0JSSURHRSBhbmQgdGhlIE5FVF9JUFY0X0FSUCBzdHVmZiBhbmQKICAqIE5FVF9JUFY0X0lQX0ZPUldBUkQuCkBAIC00MCw2ICszOSwyNyBAQAogCS5sb29rdXAgPSBuZXRfY3RsX2hlYWRlcl9sb29rdXAsCiB9OwogCitzdGF0aWMgTElTVF9IRUFEKG5ldF9zeXNjdGxfcm9fdGFibGVzKTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfY3RsX3JvX2hlYWRlcl9sb29rdXAoc3RydWN0IGN0bF90YWJsZV9yb290ICpyb290LAorCQlzdHJ1Y3QgbnNwcm94eSAqbmFtZXNwYWNlcykKK3sKKwlyZXR1cm4gJm5ldF9zeXNjdGxfcm9fdGFibGVzOworfQorCitzdGF0aWMgaW50IG5ldF9jdGxfcm9faGVhZGVyX3Blcm1zKHN0cnVjdCBjdGxfdGFibGVfcm9vdCAqcm9vdCwKKwkJc3RydWN0IG5zcHJveHkgKm5hbWVzcGFjZXMsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQoreworCWlmIChuYW1lc3BhY2VzLT5uZXRfbnMgPT0gJmluaXRfbmV0KQorCQlyZXR1cm4gdGFibGUtPm1vZGU7CisJZWxzZQorCQlyZXR1cm4gdGFibGUtPm1vZGUgJiB+MDIyMjsKK30KKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfcm9vdCBuZXRfc3lzY3RsX3JvX3Jvb3QgPSB7CisJLmxvb2t1cCA9IG5ldF9jdGxfcm9faGVhZGVyX2xvb2t1cCwKKwkucGVybWlzc2lvbnMgPSBuZXRfY3RsX3JvX2hlYWRlcl9wZXJtcywKK307CisKIHN0YXRpYyBpbnQgc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlJTklUX0xJU1RfSEVBRCgmbmV0LT5zeXNjdGxfdGFibGVfaGVhZGVycyk7CkBAIC02NCw2ICs4NCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAJcmVnaXN0ZXJfc3lzY3RsX3Jvb3QoJm5ldF9zeXNjdGxfcm9vdCk7CisJcmVnaXN0ZXJfc3lzY3RsX3Jvb3QoJm5ldF9zeXNjdGxfcm9fcm9vdCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgwLDYgKzEwMSwxNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZSk7CiAKK3N0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3JvdGFibGUoY29uc3QKKwkJc3RydWN0IGN0bF9wYXRoICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSkKK3sKKwlyZXR1cm4gX19yZWdpc3Rlcl9zeXNjdGxfcGF0aHMoJm5ldF9zeXNjdGxfcm9fcm9vdCwKKwkJCSZpbml0X25zcHJveHksIHBhdGgsIHRhYmxlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX25ldF9zeXNjdGxfcm90YWJsZSk7CisKIHZvaWQgdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIpCiB7CiAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaGVhZGVyKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JjYXN0LmMgYi9uZXQvdGlwYy9iY2FzdC5jCmluZGV4IGU3ODgwMTcuLmIxZmYxNmFhIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5jCisrKyBiL25ldC90aXBjL2JjYXN0LmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCWlmIChidWYpIHsKIAkJbXNnID0gYnVmX21zZyhidWYpOwogCQltc2dfaW5pdChtc2csIEJDQVNUX1BST1RPQ09MLCBTVEFURV9NU0csCi0JCQkgVElQQ19PSywgSU5UX0hfU0laRSwgbl9wdHItPmFkZHIpOworCQkJIElOVF9IX1NJWkUsIG5fcHRyLT5hZGRyKTsKIAkJbXNnX3NldF9tY19uZXRpZChtc2csIHRpcGNfbmV0X2lkKTsKIAkJbXNnX3NldF9iY2FzdF9hY2sobXNnLCBtb2Qobl9wdHItPmJjbGluay5sYXN0X2luKSk7CiAJCW1zZ19zZXRfYmNnYXBfYWZ0ZXIobXNnLCBuX3B0ci0+YmNsaW5rLmdhcF9hZnRlcik7CkBAIC01NzEsNyArNTcxLDcgQEAKIAkJYXNzZXJ0KHRpcGNfY2x0cl9iY2FzdF9ub2Rlcy5jb3VudCAhPSAwKTsKIAkJYmNidWZfc2V0X2Fja3MoYnVmLCB0aXBjX2NsdHJfYmNhc3Rfbm9kZXMuY291bnQpOwogCQltc2cgPSBidWZfbXNnKGJ1Zik7Ci0JCW1zZ19zZXRfbm9uX3NlcShtc2cpOworCQltc2dfc2V0X25vbl9zZXEobXNnLCAxKTsKIAkJbXNnX3NldF9tY19uZXRpZChtc2csIHRpcGNfbmV0X2lkKTsKIAl9CiAKQEAgLTYxMSw3ICs2MTEsNyBAQAogCQliY2JlYXJlci0+YnBhaXJzW2JwX2luZGV4XS5zZWNvbmRhcnkgPSBwOwogdXBkYXRlOgogCQlpZiAoYmNiZWFyZXItPnJlbWFpbnNfbmV3LmNvdW50ID09IDApCi0JCQlyZXR1cm4gVElQQ19PSzsKKwkJCXJldHVybiAwOwogCiAJCWJjYmVhcmVyLT5yZW1haW5zID0gYmNiZWFyZXItPnJlbWFpbnNfbmV3OwogCX0KQEAgLTYyMCw3ICs2MjAsNyBAQAogCiAJYmNiZWFyZXItPmJlYXJlci5wdWJsLmJsb2NrZWQgPSAxOwogCWJjbC0+c3RhdHMuYmVhcmVyX2NvbmdzKys7Ci0JcmV0dXJuIH5USVBDX09LOworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTc1Niw3ICs3NTYsNyBAQAogCXNwaW5fbG9ja19iaCgmYmNfbG9jayk7CiAJbWVtc2V0KCZiY2wtPnN0YXRzLCAwLCBzaXplb2YoYmNsLT5zdGF0cykpOwogCXNwaW5fdW5sb2NrX2JoKCZiY19sb2NrKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHRpcGNfYmNsaW5rX3NldF9xdWV1ZV9saW1pdHModTMyIGxpbWl0KQpAQCAtNzY5LDcgKzc2OSw3IEBACiAJc3Bpbl9sb2NrX2JoKCZiY19sb2NrKTsKIAl0aXBjX2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyhiY2wsIGxpbWl0KTsKIAlzcGluX3VubG9ja19iaCgmYmNfbG9jayk7Ci0JcmV0dXJuIFRJUENfT0s7CisJcmV0dXJuIDA7CiB9CiAKIGludCB0aXBjX2JjbGlua19pbml0KHZvaWQpCkBAIC04MTAsNyArODEwLDcgQEAKIAkJdGlwY19wcmludGJ1Zl9pbml0KCZiY2wtPnByaW50X2J1ZiwgcGIsIEJDTElOS19MT0dfQlVGX1NJWkUpOwogCX0KIAotCXJldHVybiBUSVBDX09LOworCXJldHVybiAwOwogfQogCiB2b2lkIHRpcGNfYmNsaW5rX3N0b3Aodm9pZCkKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JlYXJlci5jIGIvbmV0L3RpcGMvYmVhcmVyLmMKaW5kZXggMjcxYTM3NS4uNmE5YWJhMyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmVhcmVyLmMKKysrIGIvbmV0L3RpcGMvYmVhcmVyLmMKQEAgLTM3MCw3ICszNzAsNyBAQAogICovCiBzdGF0aWMgaW50IGJlYXJlcl9wdXNoKHN0cnVjdCBiZWFyZXIgKmJfcHRyKQogewotCXUzMiByZXMgPSBUSVBDX09LOworCXUzMiByZXMgPSAwOwogCXN0cnVjdCBsaW5rICpsbiwgKnRsbjsKIAogCWlmIChiX3B0ci0+cHVibC5ibG9ja2VkKQpAQCAtNjA3LDcgKzYwNyw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2JoKCZiX3B0ci0+cHVibC5sb2NrKTsKIAlyZWFkX3VubG9ja19iaCgmdGlwY19uZXRfbG9jayk7Ci0JcmV0dXJuIFRJUENfT0s7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNjQ1LDcgKzY0NSw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2JoKCZiX3B0ci0+cHVibC5sb2NrKTsKIAltZW1zZXQoYl9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgYmVhcmVyKSk7Ci0JcmV0dXJuIFRJUENfT0s7CisJcmV0dXJuIDA7CiB9CiAKIGludCB0aXBjX2Rpc2FibGVfYmVhcmVyKGNvbnN0IGNoYXIgKm5hbWUpCkBAIC02NjgsNyArNjY4LDcgQEAKIAl0aXBjX2JlYXJlcnMgPSBrY2FsbG9jKE1BWF9CRUFSRVJTLCBzaXplb2Yoc3RydWN0IGJlYXJlciksIEdGUF9BVE9NSUMpOwogCW1lZGlhX2xpc3QgPSBrY2FsbG9jKE1BWF9NRURJQSwgc2l6ZW9mKHN0cnVjdCBtZWRpYSksIEdGUF9BVE9NSUMpOwogCWlmICh0aXBjX2JlYXJlcnMgJiYgbWVkaWFfbGlzdCkgewotCQlyZXMgPSBUSVBDX09LOworCQlyZXMgPSAwOwogCX0gZWxzZSB7CiAJCWtmcmVlKHRpcGNfYmVhcmVycyk7CiAJCWtmcmVlKG1lZGlhX2xpc3QpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY2x1c3Rlci5jIGIvbmV0L3RpcGMvY2x1c3Rlci5jCmluZGV4IDRiYjM0MDQuLjQ2ZWU2YzUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NsdXN0ZXIuYworKysgYi9uZXQvdGlwYy9jbHVzdGVyLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCWlmIChidWYpIHsKIAkJbXNnID0gYnVmX21zZyhidWYpOwogCQltZW1zZXQoKGNoYXIgKiltc2csIDAsIHNpemUpOwotCQltc2dfaW5pdChtc2csIFJPVVRFX0RJU1RSSUJVVE9SLCAwLCBUSVBDX09LLCBJTlRfSF9TSVpFLCBkZXN0KTsKKwkJbXNnX2luaXQobXNnLCBST1VURV9ESVNUUklCVVRPUiwgMCwgSU5UX0hfU0laRSwgZGVzdCk7CiAJfQogCXJldHVybiBidWY7CiB9CkBAIC01NzEsNiArNTcxLDYgQEAKIGludCB0aXBjX2NsdHJfaW5pdCh2b2lkKQogewogCXRpcGNfaGlnaGVzdF9hbGxvd2VkX3NsYXZlID0gTE9XRVNUX1NMQVZFICsgdGlwY19tYXhfc2xhdmVzOwotCXJldHVybiB0aXBjX2NsdHJfY3JlYXRlKHRpcGNfb3duX2FkZHIpID8gVElQQ19PSyA6IC1FTk9NRU07CisJcmV0dXJuIHRpcGNfY2x0cl9jcmVhdGUodGlwY19vd25fYWRkcikgPyAwIDogLUVOT01FTTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29uZmlnLmMgYi9uZXQvdGlwYy9jb25maWcuYwppbmRleCBjNzEzMzdhMi4uY2EzNTQ0ZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvY29uZmlnLmMKKysrIGIvbmV0L3RpcGMvY29uZmlnLmMKQEAgLTIsNyArMiw3IEBACiAgKiBuZXQvdGlwYy9jb25maWcuYzogVElQQyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgY29kZQogICoKICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDcsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5Myw3ICsyOTMsNiBAQAogCWlmICh0aXBjX21vZGUgPT0gVElQQ19ORVRfTU9ERSkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19OT1RfU1VQUE9SVEVECiAJCQkJCQkgICAiIChjYW5ub3QgY2hhbmdlIG5vZGUgYWRkcmVzcyBvbmNlIGFzc2lnbmVkKSIpOwotCXRpcGNfb3duX2FkZHIgPSBhZGRyOwogCiAJLyoKIAkgKiBNdXN0IHJlbGVhc2UgYWxsIHNwaW5sb2NrcyBiZWZvcmUgY2FsbGluZyBzdGFydF9uZXQoKSBiZWNhdXNlCkBAIC0zMDYsNyArMzA1LDcgQEAKIAkgKi8KIAogCXNwaW5fdW5sb2NrX2JoKCZjb25maWdfbG9jayk7Ci0JdGlwY19jb3JlX3N0YXJ0X25ldCgpOworCXRpcGNfY29yZV9zdGFydF9uZXQoYWRkcik7CiAJc3Bpbl9sb2NrX2JoKCZjb25maWdfbG9jayk7CiAJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKIH0KQEAgLTUyOSw3ICs1MjgsNyBAQAogCQlicmVhazsKICNlbmRpZgogCWNhc2UgVElQQ19DTURfU0VUX0xPR19TSVpFOgotCQlyZXBfdGx2X2J1ZiA9IHRpcGNfbG9nX3Jlc2l6ZShyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UpOworCQlyZXBfdGx2X2J1ZiA9IHRpcGNfbG9nX3Jlc2l6ZV9jbWQocmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlKTsKIAkJYnJlYWs7CiAJY2FzZSBUSVBDX0NNRF9EVU1QX0xPRzoKIAkJcmVwX3Rsdl9idWYgPSB0aXBjX2xvZ19kdW1wKCk7CkBAIC02MDIsNiArNjAxLDEwIEBACiAJY2FzZSBUSVBDX0NNRF9HRVRfTkVUSUQ6CiAJCXJlcF90bHZfYnVmID0gdGlwY19jZmdfcmVwbHlfdW5zaWduZWQodGlwY19uZXRfaWQpOwogCQlicmVhazsKKwljYXNlIFRJUENfQ01EX05PVF9ORVRfQURNSU46CisJCXJlcF90bHZfYnVmID0KKwkJCXRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19OT1RfTkVUX0FETUlOKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVwX3Rsdl9idWYgPSB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAogCQkJCQkJCSAgIiAodW5rbm93biBjb21tYW5kKSIpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5jIGIvbmV0L3RpcGMvY29yZS5jCmluZGV4IDc0MGFhYzUuLjMyNTZiZDcgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuYworKysgYi9uZXQvdGlwYy9jb3JlLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogCi0jZGVmaW5lIFRJUENfTU9EX1ZFUiAiMS42LjMiCisjZGVmaW5lIFRJUENfTU9EX1ZFUiAiMS42LjQiCiAKICNpZm5kZWYgQ09ORklHX1RJUENfWk9ORVMKICNkZWZpbmUgQ09ORklHX1RJUENfWk9ORVMgMwpAQCAtMTE3LDExICsxMTcsMTEgQEAKICAqIHN0YXJ0X25ldCAtIHN0YXJ0IFRJUEMgbmV0d29ya2luZyBzdWItc3lzdGVtcwogICovCiAKLWludCB0aXBjX2NvcmVfc3RhcnRfbmV0KHZvaWQpCitpbnQgdGlwY19jb3JlX3N0YXJ0X25ldCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaW50IHJlczsKIAotCWlmICgocmVzID0gdGlwY19uZXRfc3RhcnQoKSkgfHwKKwlpZiAoKHJlcyA9IHRpcGNfbmV0X3N0YXJ0KGFkZHIpKSB8fAogCSAgICAocmVzID0gdGlwY19ldGhfbWVkaWFfc3RhcnQoKSkpIHsKIAkJdGlwY19jb3JlX3N0b3BfbmV0KCk7CiAJfQpAQCAtMTY0LDggKzE2NCw3IEBACiAJdGlwY19tb2RlID0gVElQQ19OT0RFX01PREU7CiAKIAlpZiAoKHJlcyA9IHRpcGNfaGFuZGxlcl9zdGFydCgpKSB8fAotCSAgICAocmVzID0gdGlwY19yZWZfdGFibGVfaW5pdCh0aXBjX21heF9wb3J0cyArIHRpcGNfbWF4X3N1YnNjcmlwdGlvbnMsCi0JCQkJICAgICAgIHRpcGNfcmFuZG9tKSkgfHwKKwkgICAgKHJlcyA9IHRpcGNfcmVmX3RhYmxlX2luaXQodGlwY19tYXhfcG9ydHMsIHRpcGNfcmFuZG9tKSkgfHwKIAkgICAgKHJlcyA9IHRpcGNfcmVnX3N0YXJ0KCkpIHx8CiAJICAgIChyZXMgPSB0aXBjX25hbWV0YmxfaW5pdCgpKSB8fAogCSAgICAocmVzID0gdGlwY19rX3NpZ25hbCgoSGFuZGxlcil0aXBjX3N1YnNjcl9zdGFydCwgMCkpIHx8CkBAIC0xODIsNyArMTgxLDcgQEAKIHsKIAlpbnQgcmVzOwogCi0JdGlwY19sb2dfcmVpbml0KENPTkZJR19USVBDX0xPRyk7CisJdGlwY19sb2dfcmVzaXplKENPTkZJR19USVBDX0xPRyk7CiAJaW5mbygiQWN0aXZhdGVkICh2ZXJzaW9uICIgVElQQ19NT0RfVkVSCiAJICAgICAiIGNvbXBpbGVkICIgX19EQVRFX18gIiAiIF9fVElNRV9fICIpXG4iKTsKIApAQCAtMjA5LDcgKzIwOCw3IEBACiAJdGlwY19jb3JlX3N0b3BfbmV0KCk7CiAJdGlwY19jb3JlX3N0b3AoKTsKIAlpbmZvKCJEZWFjdGl2YXRlZFxuIik7Ci0JdGlwY19sb2dfc3RvcCgpOworCXRpcGNfbG9nX3Jlc2l6ZSgwKTsKIH0KIAogbW9kdWxlX2luaXQodGlwY19pbml0KTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaAppbmRleCA1YTBlNDg3Li5hODgxZjkyIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmgKKysrIGIvbmV0L3RpcGMvY29yZS5oCkBAIC0yLDcgKzIsNyBAQAogICogbmV0L3RpcGMvY29yZS5oOiBJbmNsdWRlIGZpbGUgZm9yIFRJUEMgZ2xvYmFsIGRlY2xhcmF0aW9ucwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU5LDg0ICs1OSwxMDggQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKIC8qCi0gKiBUSVBDIGRlYnVnZ2luZyBjb2RlCisgKiBUSVBDIHNhbml0eSB0ZXN0IG1hY3JvcwogICovCiAKICNkZWZpbmUgYXNzZXJ0KGkpICBCVUdfT04oIShpKSkKIAotc3RydWN0IHRpcGNfbXNnOwotZXh0ZXJuIHN0cnVjdCBwcmludF9idWYgKlRJUENfTlVMTCwgKlRJUENfQ09OUywgKlRJUENfTE9HOwotZXh0ZXJuIHN0cnVjdCBwcmludF9idWYgKlRJUENfVEVFKHN0cnVjdCBwcmludF9idWYgKiwgc3RydWN0IHByaW50X2J1ZiAqKTsKLXZvaWQgdGlwY19tc2dfcHJpbnQoc3RydWN0IHByaW50X2J1Ziosc3RydWN0IHRpcGNfbXNnICosY29uc3QgY2hhciopOwotdm9pZCB0aXBjX3ByaW50ZihzdHJ1Y3QgcHJpbnRfYnVmICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLXZvaWQgdGlwY19kdW1wKHN0cnVjdCBwcmludF9idWYqLGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLQotI2lmZGVmIENPTkZJR19USVBDX0RFQlVHCi0KIC8qCi0gKiBUSVBDIGRlYnVnIHN1cHBvcnQgaW5jbHVkZWQ6Ci0gKiAtIHN5c3RlbSBtZXNzYWdlcyBhcmUgcHJpbnRlZCB0byBUSVBDX09VVFBVVCBwcmludCBidWZmZXIKLSAqIC0gZGVidWcgbWVzc2FnZXMgYXJlIHByaW50ZWQgdG8gREJHX09VVFBVVCBwcmludCBidWZmZXIKKyAqIFRJUEMgc3lzdGVtIG1vbml0b3JpbmcgY29kZQogICovCiAKLSNkZWZpbmUgZXJyKGZtdCwgYXJnLi4uKSAgdGlwY19wcmludGYoVElQQ19PVVRQVVQsIEtFUk5fRVJSICJUSVBDOiAiIGZtdCwgIyMgYXJnKQotI2RlZmluZSB3YXJuKGZtdCwgYXJnLi4uKSB0aXBjX3ByaW50ZihUSVBDX09VVFBVVCwgS0VSTl9XQVJOSU5HICJUSVBDOiAiIGZtdCwgIyMgYXJnKQotI2RlZmluZSBpbmZvKGZtdCwgYXJnLi4uKSB0aXBjX3ByaW50ZihUSVBDX09VVFBVVCwgS0VSTl9OT1RJQ0UgIlRJUEM6ICIgZm10LCAjIyBhcmcpCisvKgorICogVElQQydzIHByaW50IGJ1ZmZlciBzdWJzeXN0ZW0gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwcmludCBidWZmZXJzOgorICoKKyAqIFRJUENfTlVMTCA6IG51bGwgYnVmZmVyIChpLmUuIHByaW50IG5vd2hlcmUpCisgKiBUSVBDX0NPTlMgOiBzeXN0ZW0gY29uc29sZQorICogVElQQ19MT0cgIDogVElQQyBsb2cgYnVmZmVyCisgKiAmYnVmCSAgICAgOiB1c2VyLWRlZmluZWQgYnVmZmVyIChzdHJ1Y3QgcHJpbnRfYnVmICopCisgKgorICogTm90ZTogVElQQ19MT0cgaXMgY29uZmlndXJlZCB0byBlY2hvIGl0cyBvdXRwdXQgdG8gdGhlIHN5c3RlbSBjb25zb2xlOworICogICAgICAgdXNlci1kZWZpbmVkIGJ1ZmZlcnMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZG8gdGhlIHNhbWUgdGhpbmcuCisgKi8KIAotI2RlZmluZSBkYmcoZm10LCBhcmcuLi4pICBkbyB7aWYgKERCR19PVVRQVVQgIT0gVElQQ19OVUxMKSB0aXBjX3ByaW50ZihEQkdfT1VUUFVULCBmbXQsICMjIGFyZyk7fSB3aGlsZSgwKQotI2RlZmluZSBtc2dfZGJnKG1zZywgdHh0KSBkbyB7aWYgKERCR19PVVRQVVQgIT0gVElQQ19OVUxMKSB0aXBjX21zZ19wcmludChEQkdfT1VUUFVULCBtc2csIHR4dCk7fSB3aGlsZSgwKQotI2RlZmluZSBkdW1wKGZtdCwgYXJnLi4uKSBkbyB7aWYgKERCR19PVVRQVVQgIT0gVElQQ19OVUxMKSB0aXBjX2R1bXAoREJHX09VVFBVVCwgZm10LCAjI2FyZyk7fSB3aGlsZSgwKQorZXh0ZXJuIHN0cnVjdCBwcmludF9idWYgKmNvbnN0IFRJUENfTlVMTDsKK2V4dGVybiBzdHJ1Y3QgcHJpbnRfYnVmICpjb25zdCBUSVBDX0NPTlM7CitleHRlcm4gc3RydWN0IHByaW50X2J1ZiAqY29uc3QgVElQQ19MT0c7CiAKK3ZvaWQgdGlwY19wcmludGYoc3RydWN0IHByaW50X2J1ZiAqLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKIC8qCi0gKiBCeSBkZWZhdWx0LCBUSVBDX09VVFBVVCBpcyBkZWZpbmVkIHRvIGJlIHN5c3RlbSBjb25zb2xlIGFuZCBUSVBDIGxvZyBidWZmZXIsCi0gKiB3aGlsZSBEQkdfT1VUUFVUIGlzIHRoZSBudWxsIHByaW50IGJ1ZmZlci4gIFRoZXNlIGRlZmF1bHRzIGNhbiBiZSBjaGFuZ2VkCi0gKiBoZXJlLCBvciBvbiBhIHBlciAuYyBmaWxlIGJhc2lzLCBieSByZWRlZmluaW5nIHRoZXNlIHN5bWJvbHMuICBUaGUgZm9sbG93aW5nCi0gKiBwcmludCBidWZmZXIgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOgotICoKLSAqIFRJUENfTlVMTAkJICAgOiBudWxsIGJ1ZmZlciAoaS5lLiBwcmludCBub3doZXJlKQotICogVElQQ19DT05TCQkgICA6IHN5c3RlbSBjb25zb2xlCi0gKiBUSVBDX0xPRwkJICAgOiBUSVBDIGxvZyBidWZmZXIKLSAqICZidWYJCQkgICA6IHVzZXItZGVmaW5lZCBidWZmZXIgKHN0cnVjdCBwcmludF9idWYgKikKLSAqIFRJUENfVEVFKCZidWZfYSwmYnVmX2IpIDogbGlzdCBvZiBidWZmZXJzIChlZy4gVElQQ19URUUoVElQQ19DT05TLFRJUENfTE9HKSkKKyAqIFRJUENfT1VUUFVUIGlzIHRoZSBkZXN0aW5hdGlvbiBwcmludCBidWZmZXIgZm9yIHN5c3RlbSBtZXNzYWdlcy4KICAqLwogCiAjaWZuZGVmIFRJUENfT1VUUFVUCi0jZGVmaW5lIFRJUENfT1VUUFVUIFRJUENfVEVFKFRJUENfQ09OUyxUSVBDX0xPRykKKyNkZWZpbmUgVElQQ19PVVRQVVQgVElQQ19MT0cKICNlbmRpZgogCi0jaWZuZGVmIERCR19PVVRQVVQKLSNkZWZpbmUgREJHX09VVFBVVCBUSVBDX05VTEwKLSNlbmRpZgotCi0jZWxzZQotCiAvKgotICogVElQQyBkZWJ1ZyBzdXBwb3J0IG5vdCBpbmNsdWRlZDoKLSAqIC0gc3lzdGVtIG1lc3NhZ2VzIGFyZSBwcmludGVkIHRvIHN5c3RlbSBjb25zb2xlCi0gKiAtIGRlYnVnIG1lc3NhZ2VzIGFyZSBub3QgcHJpbnRlZAorICogVElQQyBjYW4gYmUgY29uZmlndXJlZCB0byBzZW5kIHN5c3RlbSBtZXNzYWdlcyB0byBUSVBDX09VVFBVVAorICogb3IgdG8gdGhlIHN5c3RlbSBjb25zb2xlIG9ubHkuCiAgKi8KIAorI2lmZGVmIENPTkZJR19USVBDX0RFQlVHCisKKyNkZWZpbmUgZXJyKGZtdCwgYXJnLi4uKSAgdGlwY19wcmludGYoVElQQ19PVVRQVVQsIFwKKwkJCQkJS0VSTl9FUlIgIlRJUEM6ICIgZm10LCAjIyBhcmcpCisjZGVmaW5lIHdhcm4oZm10LCBhcmcuLi4pIHRpcGNfcHJpbnRmKFRJUENfT1VUUFVULCBcCisJCQkJCUtFUk5fV0FSTklORyAiVElQQzogIiBmbXQsICMjIGFyZykKKyNkZWZpbmUgaW5mbyhmbXQsIGFyZy4uLikgdGlwY19wcmludGYoVElQQ19PVVRQVVQsIFwKKwkJCQkJS0VSTl9OT1RJQ0UgIlRJUEM6ICIgZm10LCAjIyBhcmcpCisKKyNlbHNlCisKICNkZWZpbmUgZXJyKGZtdCwgYXJnLi4uKSAgcHJpbnRrKEtFUk5fRVJSICJUSVBDOiAiIGZtdCAsICMjIGFyZykKICNkZWZpbmUgaW5mbyhmbXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiVElQQzogIiBmbXQgLCAjIyBhcmcpCiAjZGVmaW5lIHdhcm4oZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgIlRJUEM6ICIgZm10ICwgIyMgYXJnKQogCi0jZGVmaW5lIGRiZyhmbXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIG1zZ19kYmcobXNnLHR4dCkgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIGR1bXAoZm10LGFyZy4uLikgZG8ge30gd2hpbGUgKDApCi0KKyNlbmRpZgogCiAvKgotICogVElQQ19PVVRQVVQgaXMgZGVmaW5lZCB0byBiZSB0aGUgc3lzdGVtIGNvbnNvbGUsIHdoaWxlIERCR19PVVRQVVQgaXMKLSAqIHRoZSBudWxsIHByaW50IGJ1ZmZlci4gIFRoZXMgZW5zdXJlcyB0aGF0IGFueSBzeXN0ZW0gb3IgZGVidWcgbWVzc2FnZXMKLSAqIHRoYXQgYXJlIGdlbmVyYXRlZCB3aXRob3V0IHVzaW5nIHRoZSBhYm92ZSBtYWNyb3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorICogREJHX09VVFBVVCBpcyB0aGUgZGVzdGluYXRpb24gcHJpbnQgYnVmZmVyIGZvciBkZWJ1ZyBtZXNzYWdlcy4KKyAqIEl0IGRlZmF1bHRzIHRvIHRoZSB0aGUgbnVsbCBwcmludCBidWZmZXIsIGJ1dCBjYW4gYmUgcmVkZWZpbmVkCisgKiAodHlwaWNhbGx5IGluIHRoZSBpbmRpdmlkdWFsIC5jIGZpbGVzIGJlaW5nIGRlYnVnZ2VkKSB0byBhbGxvdworICogc2VsZWN0ZWQgZGVidWcgbWVzc2FnZXMgdG8gYmUgZ2VuZXJhdGVkIHdoZXJlIG5lZWRlZC4KICAqLwogCi0jdW5kZWYgIFRJUENfT1VUUFVUCi0jZGVmaW5lIFRJUENfT1VUUFVUIFRJUENfQ09OUwotCi0jdW5kZWYgIERCR19PVVRQVVQKKyNpZm5kZWYgREJHX09VVFBVVAogI2RlZmluZSBEQkdfT1VUUFVUIFRJUENfTlVMTAorI2VuZGlmCisKKy8qCisgKiBUSVBDIGNhbiBiZSBjb25maWd1cmVkIHRvIHNlbmQgZGVidWcgbWVzc2FnZXMgdG8gdGhlIHNwZWNpZmllZCBwcmludCBidWZmZXIKKyAqICh0eXBpY2FsbHkgREJHX09VVFBVVCkgb3IgdG8gc3VwcHJlc3MgdGhlbSBlbnRpcmVseS4KKyAqLworCisjaWZkZWYgQ09ORklHX1RJUENfREVCVUcKKworI2RlZmluZSBkYmcoZm10LCBhcmcuLi4pICBcCisJZG8geyBcCisJCWlmIChEQkdfT1VUUFVUICE9IFRJUENfTlVMTCkgXAorCQkJdGlwY19wcmludGYoREJHX09VVFBVVCwgZm10LCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgbXNnX2RiZyhtc2csIHR4dCkgXAorCWRvIHsgXAorCQlpZiAoREJHX09VVFBVVCAhPSBUSVBDX05VTEwpIFwKKwkJCXRpcGNfbXNnX2RiZyhEQkdfT1VUUFVULCBtc2csIHR4dCk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBkdW1wKGZtdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChEQkdfT1VUUFVUICE9IFRJUENfTlVMTCkgXAorCQkJdGlwY19kdW1wX2RiZyhEQkdfT1VUUFVULCBmbXQsICMjYXJnKTsgXAorCX0gd2hpbGUgKDApCisKK3ZvaWQgdGlwY19tc2dfZGJnKHN0cnVjdCBwcmludF9idWYgKiwgc3RydWN0IHRpcGNfbXNnICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIHRpcGNfZHVtcF9kYmcoc3RydWN0IHByaW50X2J1ZiAqLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNlbHNlCisKKyNkZWZpbmUgZGJnKGZtdCwgYXJnLi4uKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgbXNnX2RiZyhtc2csIHR4dCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGR1bXAoZm10LCBhcmcuLi4pCWRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIHRpcGNfbXNnX2RiZyguLi4pCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB0aXBjX2R1bXBfZGJnKC4uLikJZG8ge30gd2hpbGUgKDApCiAKICNlbmRpZgogCkBAIC0xNzgsNyArMjAyLDcgQEAKIAogZXh0ZXJuIGludCAgdGlwY19jb3JlX3N0YXJ0KHZvaWQpOwogZXh0ZXJuIHZvaWQgdGlwY19jb3JlX3N0b3Aodm9pZCk7Ci1leHRlcm4gaW50ICB0aXBjX2NvcmVfc3RhcnRfbmV0KHZvaWQpOworZXh0ZXJuIGludCAgdGlwY19jb3JlX3N0YXJ0X25ldCh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIHZvaWQgdGlwY19jb3JlX3N0b3BfbmV0KHZvaWQpOwogZXh0ZXJuIGludCAgdGlwY19oYW5kbGVyX3N0YXJ0KHZvaWQpOwogZXh0ZXJuIHZvaWQgdGlwY19oYW5kbGVyX3N0b3Aodm9pZCk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9kYmcuYyBiL25ldC90aXBjL2RiZy5jCmluZGV4IGU4MDlkMmEuLjI5ZWNhZTggMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2RiZy5jCisrKyBiL25ldC90aXBjL2RiZy5jCkBAIC0yLDcgKzIsNyBAQAogICogbmV0L3RpcGMvZGJnLmM6IFRJUEMgcHJpbnQgYnVmZmVyIHJvdXRpbmVzIGZvciBkZWJ1Z2dpbmcKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNiwgRXJpY3Nzb24gQUIKLSAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2LCBXaW5kIFJpdmVyIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA3LCBXaW5kIFJpdmVyIFN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOCwxOCArMzgsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJkYmcuaCIKIAorLyoKKyAqIFRJUEMgcHJlLWRlZmluZXMgdGhlIGZvbGxvd2luZyBwcmludCBidWZmZXJzOgorICoKKyAqIFRJUENfTlVMTCA6IG51bGwgYnVmZmVyIChpLmUuIHByaW50IG5vd2hlcmUpCisgKiBUSVBDX0NPTlMgOiBzeXN0ZW0gY29uc29sZQorICogVElQQ19MT0cgIDogVElQQyBsb2cgYnVmZmVyCisgKgorICogQWRkaXRpb25hbCB1c2VyLWRlZmluZWQgcHJpbnQgYnVmZmVycyBhcmUgYWxzbyBwZXJtaXR0ZWQuCisgKi8KKworc3RhdGljIHN0cnVjdCBwcmludF9idWYgbnVsbF9idWYgPSB7IE5VTEwsIDAsIE5VTEwsIDAgfTsKK3N0cnVjdCBwcmludF9idWYgKmNvbnN0IFRJUENfTlVMTCA9ICZudWxsX2J1ZjsKKworc3RhdGljIHN0cnVjdCBwcmludF9idWYgY29uc19idWYgPSB7IE5VTEwsIDAsIE5VTEwsIDEgfTsKK3N0cnVjdCBwcmludF9idWYgKmNvbnN0IFRJUENfQ09OUyA9ICZjb25zX2J1ZjsKKworc3RhdGljIHN0cnVjdCBwcmludF9idWYgbG9nX2J1ZiA9IHsgTlVMTCwgMCwgTlVMTCwgMSB9Oworc3RydWN0IHByaW50X2J1ZiAqY29uc3QgVElQQ19MT0cgPSAmbG9nX2J1ZjsKKworLyoKKyAqIExvY2tpbmcgcG9saWN5IHdoZW4gdXNpbmcgcHJpbnQgYnVmZmVycy4KKyAqCisgKiAxKSB0aXBjX3ByaW50ZigpIHVzZXMgJ3ByaW50X2xvY2snIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGFjY2VzcyB0bworICogJ3ByaW50X3N0cmluZycgd2hlbiB3cml0aW5nIHRvIGEgcHJpbnQgYnVmZmVyLiBUaGlzIGFsc28gcHJvdGVjdHMgYWdhaW5zdAorICogY29uY3VycmVudCB3cml0ZXMgdG8gdGhlIHByaW50IGJ1ZmZlciBiZWluZyB3cml0dGVuIHRvLgorICoKKyAqIDIpIHRpcGNfZHVtcCgpIGFuZCB0aXBjX2xvZ19YWFgoKSBsZXZlcmFnZSB0aGUgYWZvcmVtZW50aW9uZWQKKyAqIHVzZSBvZiAncHJpbnRfbG9jaycgdG8gcHJvdGVjdCBhZ2FpbnN0IGFsbCB0eXBlcyBvZiBjb25jdXJyZW50IG9wZXJhdGlvbnMKKyAqIG9uIHRoZWlyIGFzc29jaWF0ZWQgcHJpbnQgYnVmZmVyIChub3QganVzdCB3cml0ZSBvcGVyYXRpb25zKS4KKyAqCisgKiBOb3RlOiBBbGwgcm91dGluZXMgb2YgdGhlIGZvcm0gdGlwY19wcmludGJ1Zl9YWFgoKSBhcmUgbG9jay1mcmVlLCBhbmQgcmVseQorICogb24gdGhlIGNhbGxlciB0byBwcmV2ZW50IHNpbXVsdGFuZW91cyB1c2Ugb2YgdGhlIHByaW50IGJ1ZmZlcihzKSBiZWluZworICogbWFuaXB1bGF0ZWQuCisgKi8KKwogc3RhdGljIGNoYXIgcHJpbnRfc3RyaW5nW1RJUENfUEJfTUFYX1NUUl07CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHByaW50X2xvY2spOwogCi1zdGF0aWMgc3RydWN0IHByaW50X2J1ZiBudWxsX2J1ZiA9IHsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Owotc3RydWN0IHByaW50X2J1ZiAqVElQQ19OVUxMID0gJm51bGxfYnVmOwotCi1zdGF0aWMgc3RydWN0IHByaW50X2J1ZiBjb25zX2J1ZiA9IHsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Owotc3RydWN0IHByaW50X2J1ZiAqVElQQ19DT05TID0gJmNvbnNfYnVmOwotCi1zdGF0aWMgc3RydWN0IHByaW50X2J1ZiBsb2dfYnVmID0geyBOVUxMLCAwLCBOVUxMLCBOVUxMIH07Ci1zdHJ1Y3QgcHJpbnRfYnVmICpUSVBDX0xPRyA9ICZsb2dfYnVmOwotCiAKICNkZWZpbmUgRk9STUFUKFBUUixMRU4sRk1UKSBcCiB7XApAQCAtNjAsMjcgKzg2LDE0IEBACiAgICAgICAgKihQVFIgKyBMRU4pID0gJ1wwJztcCiB9CiAKLS8qCi0gKiBMb2NraW5nIHBvbGljeSB3aGVuIHVzaW5nIHByaW50IGJ1ZmZlcnMuCi0gKgotICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyB1c2UgJ3ByaW50X2xvY2snIGZvciBwcm90ZWN0aW9uOgotICogMSkgdGlwY19wcmludGYoKSAgLSB0byBwcm90ZWN0IGl0cyBwcmludCBidWZmZXIocykgYW5kICdwcmludF9zdHJpbmcnCi0gKiAyKSBUSVBDX1RFRSgpICAgICAtIHRvIHByb3RlY3QgaXRzIHByaW50IGJ1ZmZlcihzKQotICogMykgdGlwY19kdW1wKCkgICAgLSB0byBwcm90ZWN0IGl0cyBwcmludCBidWZmZXIocykgYW5kICdwcmludF9zdHJpbmcnCi0gKiA0KSB0aXBjX2xvZ19YWFgoKSAtIHRvIHByb3RlY3QgVElQQ19MT0cKLSAqCi0gKiBBbGwgcm91dGluZXMgb2YgdGhlIGZvcm0gdGlwY19wcmludGJ1Zl9YWFgoKSByZWx5IG9uIHRoZSBjYWxsZXIgdG8gcHJldmVudAotICogc2ltdWx0YW5lb3VzIHVzZSBvZiB0aGUgcHJpbnQgYnVmZmVyKHMpIGJlaW5nIG1hbmlwdWxhdGVkLgotICovCi0KIC8qKgogICogdGlwY19wcmludGJ1Zl9pbml0IC0gaW5pdGlhbGl6ZSBwcmludCBidWZmZXIgdG8gZW1wdHkKICAqIEBwYjogcG9pbnRlciB0byBwcmludCBidWZmZXIgc3RydWN0dXJlCiAgKiBAcmF3OiBwb2ludGVyIHRvIGNoYXJhY3RlciBhcnJheSB1c2VkIGJ5IHByaW50IGJ1ZmZlcgogICogQHNpemU6IHNpemUgb2YgY2hhcmFjdGVyIGFycmF5CiAgKgotICogTWFrZXMgdGhlIHByaW50IGJ1ZmZlciBhIG51bGwgZGV2aWNlIHRoYXQgZGlzY2FyZHMgYW55dGhpbmcgd3JpdHRlbiB0byBpdAotICogaWYgdGhlIGNoYXJhY3RlciBhcnJheSBpcyB0b28gc21hbGwgKG9yIGFic2VudCkuCisgKiBOb3RlOiBJZiB0aGUgY2hhcmFjdGVyIGFycmF5IGlzIHRvbyBzbWFsbCAob3IgYWJzZW50KSwgdGhlIHByaW50IGJ1ZmZlcgorICogYmVjb21lcyBhIG51bGwgZGV2aWNlIHRoYXQgZGlzY2FyZHMgYW55dGhpbmcgd3JpdHRlbiB0byBpdC4KICAqLwogCiB2b2lkIHRpcGNfcHJpbnRidWZfaW5pdChzdHJ1Y3QgcHJpbnRfYnVmICpwYiwgY2hhciAqcmF3LCB1MzIgc2l6ZSkKQEAgLTg4LDEzICsxMDEsMTMgQEAKIAlwYi0+YnVmID0gcmF3OwogCXBiLT5jcnMgPSByYXc7CiAJcGItPnNpemUgPSBzaXplOwotCXBiLT5uZXh0ID0gTlVMTDsKKwlwYi0+ZWNobyA9IDA7CiAKIAlpZiAoc2l6ZSA8IFRJUENfUEJfTUlOX1NJWkUpIHsKIAkJcGItPmJ1ZiA9IE5VTEw7CiAJfSBlbHNlIGlmIChyYXcpIHsKIAkJcGItPmJ1ZlswXSA9IDA7Ci0JCXBiLT5idWZbc2l6ZS0xXSA9IH4wOworCQlwYi0+YnVmW3NpemUgLSAxXSA9IH4wOwogCX0KIH0KIApAQCAtMTA1LDcgKzExOCwxMSBAQAogCiB2b2lkIHRpcGNfcHJpbnRidWZfcmVzZXQoc3RydWN0IHByaW50X2J1ZiAqcGIpCiB7Ci0JdGlwY19wcmludGJ1Zl9pbml0KHBiLCBwYi0+YnVmLCBwYi0+c2l6ZSk7CisJaWYgKHBiLT5idWYpIHsKKwkJcGItPmNycyA9IHBiLT5idWY7CisJCXBiLT5idWZbMF0gPSAwOworCQlwYi0+YnVmW3BiLT5zaXplIC0gMV0gPSB+MDsKKwl9CiB9CiAKIC8qKgpAQCAtMTQxLDcgKzE1OCw3IEBACiAKIAlpZiAocGItPmJ1ZltwYi0+c2l6ZSAtIDFdID09IDApIHsKIAkJY3BfYnVmID0ga21hbGxvYyhwYi0+c2l6ZSwgR0ZQX0FUT01JQyk7Ci0JCWlmIChjcF9idWYgIT0gTlVMTCl7CisJCWlmIChjcF9idWYpIHsKIAkJCXRpcGNfcHJpbnRidWZfaW5pdCgmY2IsIGNwX2J1ZiwgcGItPnNpemUpOwogCQkJdGlwY19wcmludGJ1Zl9tb3ZlKCZjYiwgcGIpOwogCQkJdGlwY19wcmludGJ1Zl9tb3ZlKHBiLCAmY2IpOwpAQCAtMTc5LDE1ICsxOTYsMTYgQEAKIAl9CiAKIAlpZiAocGJfdG8tPnNpemUgPCBwYl9mcm9tLT5zaXplKSB7Ci0JCXRpcGNfcHJpbnRidWZfcmVzZXQocGJfdG8pOwotCQl0aXBjX3ByaW50ZihwYl90bywgIioqKiBQUklOVCBCVUZGRVIgTU9WRSBFUlJPUiAqKioiKTsKKwkJc3RyY3B5KHBiX3RvLT5idWYsICIqKiogUFJJTlQgQlVGRkVSIE1PVkUgRVJST1IgKioqIik7CisJCXBiX3RvLT5idWZbcGJfdG8tPnNpemUgLSAxXSA9IH4wOworCQlwYl90by0+Y3JzID0gc3RyY2hyKHBiX3RvLT5idWYsIDApOwogCQlyZXR1cm47CiAJfQogCiAJLyogQ29weSBkYXRhIGZyb20gY2hhciBhZnRlciBjdXJzb3IgdG8gZW5kIChpZiB1c2VkKSAqLwogCiAJbGVuID0gcGJfZnJvbS0+YnVmICsgcGJfZnJvbS0+c2l6ZSAtIHBiX2Zyb20tPmNycyAtIDI7Ci0JaWYgKChwYl9mcm9tLT5idWZbcGJfZnJvbS0+c2l6ZS0xXSA9PSAwKSAmJiAobGVuID4gMCkpIHsKKwlpZiAoKHBiX2Zyb20tPmJ1ZltwYl9mcm9tLT5zaXplIC0gMV0gPT0gMCkgJiYgKGxlbiA+IDApKSB7CiAJCXN0cmNweShwYl90by0+YnVmLCBwYl9mcm9tLT5jcnMgKyAxKTsKIAkJcGJfdG8tPmNycyA9IHBiX3RvLT5idWYgKyBsZW47CiAJfSBlbHNlCkBAIC0yMDMsOCArMjIxLDggQEAKIH0KIAogLyoqCi0gKiB0aXBjX3ByaW50ZiAtIGFwcGVuZCBmb3JtYXR0ZWQgb3V0cHV0IHRvIHByaW50IGJ1ZmZlciBjaGFpbgotICogQHBiOiBwb2ludGVyIHRvIGNoYWluIG9mIHByaW50IGJ1ZmZlcnMgKG1heSBiZSBOVUxMKQorICogdGlwY19wcmludGYgLSBhcHBlbmQgZm9ybWF0dGVkIG91dHB1dCB0byBwcmludCBidWZmZXIKKyAqIEBwYjogcG9pbnRlciB0byBwcmludCBidWZmZXIKICAqIEBmbXQ6IGZvcm1hdHRlZCBpbmZvIHRvIGJlIHByaW50ZWQKICAqLwogCkBAIC0yMTMsNjcgKzIzMSwzOSBAQAogCWludCBjaGFyc190b19hZGQ7CiAJaW50IGNoYXJzX2xlZnQ7CiAJY2hhciBzYXZlX2NoYXI7Ci0Jc3RydWN0IHByaW50X2J1ZiAqcGJfbmV4dDsKIAogCXNwaW5fbG9ja19iaCgmcHJpbnRfbG9jayk7CisKIAlGT1JNQVQocHJpbnRfc3RyaW5nLCBjaGFyc190b19hZGQsIGZtdCk7CiAJaWYgKGNoYXJzX3RvX2FkZCA+PSBUSVBDX1BCX01BWF9TVFIpCiAJCXN0cmNweShwcmludF9zdHJpbmcsICIqKiogUFJJTlQgQlVGRkVSIFNUUklORyBUT08gTE9ORyAqKioiKTsKIAotCXdoaWxlIChwYikgewotCQlpZiAocGIgPT0gVElQQ19DT05TKQotCQkJcHJpbnRrKHByaW50X3N0cmluZyk7Ci0JCWVsc2UgaWYgKHBiLT5idWYpIHsKLQkJCWNoYXJzX2xlZnQgPSBwYi0+YnVmICsgcGItPnNpemUgLSBwYi0+Y3JzIC0gMTsKLQkJCWlmIChjaGFyc190b19hZGQgPD0gY2hhcnNfbGVmdCkgewotCQkJCXN0cmNweShwYi0+Y3JzLCBwcmludF9zdHJpbmcpOwotCQkJCXBiLT5jcnMgKz0gY2hhcnNfdG9fYWRkOwotCQkJfSBlbHNlIGlmIChjaGFyc190b19hZGQgPj0gKHBiLT5zaXplIC0gMSkpIHsKLQkJCQlzdHJjcHkocGItPmJ1ZiwgcHJpbnRfc3RyaW5nICsgY2hhcnNfdG9fYWRkICsgMQotCQkJCSAgICAgICAtIHBiLT5zaXplKTsKLQkJCQlwYi0+Y3JzID0gcGItPmJ1ZiArIHBiLT5zaXplIC0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3RyY3B5KHBiLT5idWYsIHByaW50X3N0cmluZyArIGNoYXJzX2xlZnQpOwotCQkJCXNhdmVfY2hhciA9IHByaW50X3N0cmluZ1tjaGFyc19sZWZ0XTsKLQkJCQlwcmludF9zdHJpbmdbY2hhcnNfbGVmdF0gPSAwOwotCQkJCXN0cmNweShwYi0+Y3JzLCBwcmludF9zdHJpbmcpOwotCQkJCXByaW50X3N0cmluZ1tjaGFyc19sZWZ0XSA9IHNhdmVfY2hhcjsKLQkJCQlwYi0+Y3JzID0gcGItPmJ1ZiArIGNoYXJzX3RvX2FkZCAtIGNoYXJzX2xlZnQ7Ci0JCQl9CisJaWYgKHBiLT5idWYpIHsKKwkJY2hhcnNfbGVmdCA9IHBiLT5idWYgKyBwYi0+c2l6ZSAtIHBiLT5jcnMgLSAxOworCQlpZiAoY2hhcnNfdG9fYWRkIDw9IGNoYXJzX2xlZnQpIHsKKwkJCXN0cmNweShwYi0+Y3JzLCBwcmludF9zdHJpbmcpOworCQkJcGItPmNycyArPSBjaGFyc190b19hZGQ7CisJCX0gZWxzZSBpZiAoY2hhcnNfdG9fYWRkID49IChwYi0+c2l6ZSAtIDEpKSB7CisJCQlzdHJjcHkocGItPmJ1ZiwgcHJpbnRfc3RyaW5nICsgY2hhcnNfdG9fYWRkICsgMQorCQkJICAgICAgIC0gcGItPnNpemUpOworCQkJcGItPmNycyA9IHBiLT5idWYgKyBwYi0+c2l6ZSAtIDE7CisJCX0gZWxzZSB7CisJCQlzdHJjcHkocGItPmJ1ZiwgcHJpbnRfc3RyaW5nICsgY2hhcnNfbGVmdCk7CisJCQlzYXZlX2NoYXIgPSBwcmludF9zdHJpbmdbY2hhcnNfbGVmdF07CisJCQlwcmludF9zdHJpbmdbY2hhcnNfbGVmdF0gPSAwOworCQkJc3RyY3B5KHBiLT5jcnMsIHByaW50X3N0cmluZyk7CisJCQlwcmludF9zdHJpbmdbY2hhcnNfbGVmdF0gPSBzYXZlX2NoYXI7CisJCQlwYi0+Y3JzID0gcGItPmJ1ZiArIGNoYXJzX3RvX2FkZCAtIGNoYXJzX2xlZnQ7CiAJCX0KLQkJcGJfbmV4dCA9IHBiLT5uZXh0OwotCQlwYi0+bmV4dCA9IE5VTEw7Ci0JCXBiID0gcGJfbmV4dDsKIAl9CisKKwlpZiAocGItPmVjaG8pCisJCXByaW50ayhwcmludF9zdHJpbmcpOworCiAJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwogfQogCi0vKioKLSAqIFRJUENfVEVFIC0gcGVyZm9ybSBuZXh0IG91dHB1dCBvcGVyYXRpb24gb24gYm90aCBwcmludCBidWZmZXJzCi0gKiBAYjA6IHBvaW50ZXIgdG8gY2hhaW4gb2YgcHJpbnQgYnVmZmVycyAobWF5IGJlIE5VTEwpCi0gKiBAYjE6IHBvaW50ZXIgdG8gcHJpbnQgYnVmZmVyIHRvIGFkZCB0byBjaGFpbgotICoKLSAqIFJldHVybnMgcG9pbnRlciB0byBwcmludCBidWZmZXIgY2hhaW4uCi0gKi8KLQotc3RydWN0IHByaW50X2J1ZiAqVElQQ19URUUoc3RydWN0IHByaW50X2J1ZiAqYjAsIHN0cnVjdCBwcmludF9idWYgKmIxKQotewotCXN0cnVjdCBwcmludF9idWYgKnBiID0gYjA7Ci0KLQlpZiAoIWIwIHx8IChiMCA9PSBiMSkpCi0JCXJldHVybiBiMTsKLQotCXNwaW5fbG9ja19iaCgmcHJpbnRfbG9jayk7Ci0Jd2hpbGUgKHBiLT5uZXh0KSB7Ci0JCWlmICgocGItPm5leHQgPT0gYjEpIHx8IChwYi0+bmV4dCA9PSBiMCkpCi0JCQlwYi0+bmV4dCA9IHBiLT5uZXh0LT5uZXh0OwotCQllbHNlCi0JCQlwYiA9IHBiLT5uZXh0OwotCX0KLQlwYi0+bmV4dCA9IGIxOwotCXNwaW5fdW5sb2NrX2JoKCZwcmludF9sb2NrKTsKLQlyZXR1cm4gYjA7Ci19CisjaWZkZWYgQ09ORklHX1RJUENfREVCVUcKIAogLyoqCiAgKiBwcmludF90b19jb25zb2xlIC0gd3JpdGUgc3RyaW5nIG9mIGJ5dGVzIHRvIGNvbnNvbGUgaW4gbXVsdGlwbGUgY2h1bmtzCkBAIC0zMjEsNzIgKzMxMSw2NiBAQAogfQogCiAvKioKLSAqIHRpcGNfZHVtcCAtIGR1bXAgbm9uLWNvbnNvbGUgcHJpbnQgYnVmZmVyKHMpIHRvIGNvbnNvbGUKLSAqIEBwYjogcG9pbnRlciB0byBjaGFpbiBvZiBwcmludCBidWZmZXJzCisgKiB0aXBjX2R1bXBfZGJnIC0gZHVtcCAobm9uLWNvbnNvbGUpIHByaW50IGJ1ZmZlciB0byBjb25zb2xlCisgKiBAcGI6IHBvaW50ZXIgdG8gcHJpbnQgYnVmZmVyCiAgKi8KIAotdm9pZCB0aXBjX2R1bXAoc3RydWN0IHByaW50X2J1ZiAqcGIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQordm9pZCB0aXBjX2R1bXBfZGJnKHN0cnVjdCBwcmludF9idWYgKnBiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKLQlzdHJ1Y3QgcHJpbnRfYnVmICpwYl9uZXh0OwogCWludCBsZW47CiAKKwlpZiAocGIgPT0gVElQQ19DT05TKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfYmgoJnByaW50X2xvY2spOworCiAJRk9STUFUKHByaW50X3N0cmluZywgbGVuLCBmbXQpOwogCXByaW50ayhwcmludF9zdHJpbmcpOwogCi0JZm9yICg7IHBiOyBwYiA9IHBiLT5uZXh0KSB7Ci0JCWlmIChwYiAhPSBUSVBDX0NPTlMpIHsKLQkJCXByaW50aygiXG4tLS0tIFN0YXJ0IG9mICVzIGxvZyBkdW1wIC0tLS1cblxuIiwKLQkJCSAgICAgICAocGIgPT0gVElQQ19MT0cpID8gImdsb2JhbCIgOiAibG9jYWwiKTsKLQkJCXByaW50YnVmX2R1bXAocGIpOwotCQkJdGlwY19wcmludGJ1Zl9yZXNldChwYik7Ci0JCQlwcmludGsoIlxuLS0tLSBFbmQgb2YgZHVtcCAtLS0tXG4iKTsKLQkJfQotCQlwYl9uZXh0ID0gcGItPm5leHQ7Ci0JCXBiLT5uZXh0ID0gTlVMTDsKLQkJcGIgPSBwYl9uZXh0OwotCX0KKwlwcmludGsoIlxuLS0tLSBTdGFydCBvZiAlcyBsb2cgZHVtcCAtLS0tXG5cbiIsCisJICAgICAgIChwYiA9PSBUSVBDX0xPRykgPyAiZ2xvYmFsIiA6ICJsb2NhbCIpOworCXByaW50YnVmX2R1bXAocGIpOworCXRpcGNfcHJpbnRidWZfcmVzZXQocGIpOworCXByaW50aygiXG4tLS0tIEVuZCBvZiBkdW1wIC0tLS1cbiIpOworCiAJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwogfQogCisjZW5kaWYKKwogLyoqCi0gKiB0aXBjX2xvZ19zdG9wIC0gZnJlZSB1cCBUSVBDIGxvZyBwcmludCBidWZmZXIKKyAqIHRpcGNfbG9nX3Jlc2l6ZSAtIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgVElQQyBsb2cgYnVmZmVyCisgKiBAbG9nX3NpemU6IHByaW50IGJ1ZmZlciBzaXplIHRvIHVzZQogICovCiAKLXZvaWQgdGlwY19sb2dfc3RvcCh2b2lkKQoraW50IHRpcGNfbG9nX3Jlc2l6ZShpbnQgbG9nX3NpemUpCiB7CisJaW50IHJlcyA9IDA7CisKIAlzcGluX2xvY2tfYmgoJnByaW50X2xvY2spOwogCWlmIChUSVBDX0xPRy0+YnVmKSB7CiAJCWtmcmVlKFRJUENfTE9HLT5idWYpOwogCQlUSVBDX0xPRy0+YnVmID0gTlVMTDsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwotfQotCi0vKioKLSAqIHRpcGNfbG9nX3JlaW5pdCAtIChyZSlpbml0aWFsaXplIFRJUEMgbG9nIHByaW50IGJ1ZmZlcgotICogQGxvZ19zaXplOiBwcmludCBidWZmZXIgc2l6ZSB0byB1c2UKLSAqLwotCi12b2lkIHRpcGNfbG9nX3JlaW5pdChpbnQgbG9nX3NpemUpCi17Ci0JdGlwY19sb2dfc3RvcCgpOwotCiAJaWYgKGxvZ19zaXplKSB7CiAJCWlmIChsb2dfc2l6ZSA8IFRJUENfUEJfTUlOX1NJWkUpCiAJCQlsb2dfc2l6ZSA9IFRJUENfUEJfTUlOX1NJWkU7Ci0JCXNwaW5fbG9ja19iaCgmcHJpbnRfbG9jayk7CisJCXJlcyA9IFRJUENfTE9HLT5lY2hvOwogCQl0aXBjX3ByaW50YnVmX2luaXQoVElQQ19MT0csIGttYWxsb2MobG9nX3NpemUsIEdGUF9BVE9NSUMpLAogCQkJCSAgIGxvZ19zaXplKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOworCQlUSVBDX0xPRy0+ZWNobyA9IHJlczsKKwkJcmVzID0gIVRJUENfTE9HLT5idWY7CiAJfQorCXNwaW5fdW5sb2NrX2JoKCZwcmludF9sb2NrKTsKKworCXJldHVybiByZXM7CiB9CiAKIC8qKgotICogdGlwY19sb2dfcmVzaXplIC0gcmVjb25maWd1cmUgc2l6ZSBvZiBUSVBDIGxvZyBidWZmZXIKKyAqIHRpcGNfbG9nX3Jlc2l6ZV9jbWQgLSByZWNvbmZpZ3VyZSBzaXplIG9mIFRJUEMgbG9nIGJ1ZmZlcgogICovCiAKLXN0cnVjdCBza19idWZmICp0aXBjX2xvZ19yZXNpemUoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLCBpbnQgcmVxX3Rsdl9zcGFjZSkKK3N0cnVjdCBza19idWZmICp0aXBjX2xvZ19yZXNpemVfY21kKGNvbnN0IHZvaWQgKnJlcV90bHZfYXJlYSwgaW50IHJlcV90bHZfc3BhY2UpCiB7CiAJdTMyIHZhbHVlOwogCkBAIC0zOTcsNyArMzgxLDkgQEAKIAlpZiAodmFsdWUgIT0gZGVsaW1pdCh2YWx1ZSwgMCwgMzI3NjgpKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUKIAkJCQkJCSAgICIgKGxvZyBzaXplIG11c3QgYmUgMC0zMjc2OCkiKTsKLQl0aXBjX2xvZ19yZWluaXQodmFsdWUpOworCWlmICh0aXBjX2xvZ19yZXNpemUodmFsdWUpKQorCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKAorCQkJInVuYWJsZSB0byBjcmVhdGUgc3BlY2lmaWVkIGxvZyAobG9nIHNpemUgaXMgbm93IDApIik7CiAJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKIH0KIApAQCAtNDEwLDI3ICszOTYsMzIgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAKIAlzcGluX2xvY2tfYmgoJnByaW50X2xvY2spOwotCWlmICghVElQQ19MT0ctPmJ1ZikKKwlpZiAoIVRJUENfTE9HLT5idWYpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwogCQlyZXBseSA9IHRpcGNfY2ZnX3JlcGx5X3VsdHJhX3N0cmluZygibG9nIG5vdCBhY3RpdmF0ZWRcbiIpOwotCWVsc2UgaWYgKHRpcGNfcHJpbnRidWZfZW1wdHkoVElQQ19MT0cpKQorCX0gZWxzZSBpZiAodGlwY19wcmludGJ1Zl9lbXB0eShUSVBDX0xPRykpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwogCQlyZXBseSA9IHRpcGNfY2ZnX3JlcGx5X3VsdHJhX3N0cmluZygibG9nIGlzIGVtcHR5XG4iKTsKKwl9CiAJZWxzZSB7CiAJCXN0cnVjdCB0bHZfZGVzYyAqcmVwX3RsdjsKIAkJc3RydWN0IHByaW50X2J1ZiBwYjsKIAkJaW50IHN0cl9sZW47CiAKIAkJc3RyX2xlbiA9IG1pbihUSVBDX0xPRy0+c2l6ZSwgMzI3Njh1KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwogCQlyZXBseSA9IHRpcGNfY2ZnX3JlcGx5X2FsbG9jKFRMVl9TUEFDRShzdHJfbGVuKSk7CiAJCWlmIChyZXBseSkgewogCQkJcmVwX3RsdiA9IChzdHJ1Y3QgdGx2X2Rlc2MgKilyZXBseS0+ZGF0YTsKIAkJCXRpcGNfcHJpbnRidWZfaW5pdCgmcGIsIFRMVl9EQVRBKHJlcF90bHYpLCBzdHJfbGVuKTsKKwkJCXNwaW5fbG9ja19iaCgmcHJpbnRfbG9jayk7CiAJCQl0aXBjX3ByaW50YnVmX21vdmUoJnBiLCBUSVBDX0xPRyk7CisJCQlzcGluX3VubG9ja19iaCgmcHJpbnRfbG9jayk7CiAJCQlzdHJfbGVuID0gc3RybGVuKFRMVl9EQVRBKHJlcF90bHYpKSArIDE7CiAJCQlza2JfcHV0KHJlcGx5LCBUTFZfU1BBQ0Uoc3RyX2xlbikpOwogCQkJVExWX1NFVChyZXBfdGx2LCBUSVBDX1RMVl9VTFRSQV9TVFJJTkcsIE5VTEwsIHN0cl9sZW4pOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZwcmludF9sb2NrKTsKIAlyZXR1cm4gcmVwbHk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC90aXBjL2RiZy5oIGIvbmV0L3RpcGMvZGJnLmgKaW5kZXggYzAxYjA4NS4uNWVmMWJjOCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvZGJnLmgKKysrIGIvbmV0L3RpcGMvZGJnLmgKQEAgLTIsNyArMiw3IEBACiAgKiBuZXQvdGlwYy9kYmcuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIHByaW50IGJ1ZmZlciByb3V0aW5lcwogICoKICAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQyLDE0ICs0MiwxNCBAQAogICogQGJ1ZjogcG9pbnRlciB0byBjaGFyYWN0ZXIgYXJyYXkgY29udGFpbmluZyBwcmludCBidWZmZXIgY29udGVudHMKICAqIEBzaXplOiBzaXplIG9mIGNoYXJhY3RlciBhcnJheQogICogQGNyczogcG9pbnRlciB0byBmaXJzdCB1bnVzZWQgc3BhY2UgaW4gY2hhcmFjdGVyIGFycmF5IChpLmUuIGZpbmFsIE5VTCkKLSAqIEBuZXh0OiB1c2VkIHRvIGxpbmsgcHJpbnQgYnVmZmVycyB3aGVuIHByaW50aW5nIHRvIG1vcmUgdGhhbiBvbmUgYXQgYSB0aW1lCisgKiBAZWNobzogZWNobyBvdXRwdXQgdG8gc3lzdGVtIGNvbnNvbGUgaWYgbm9uLXplcm8KICAqLwogCiBzdHJ1Y3QgcHJpbnRfYnVmIHsKIAljaGFyICpidWY7CiAJdTMyIHNpemU7CiAJY2hhciAqY3JzOwotCXN0cnVjdCBwcmludF9idWYgKm5leHQ7CisJaW50IGVjaG87CiB9OwogCiAjZGVmaW5lIFRJUENfUEJfTUlOX1NJWkUgNjQJLyogbWluaW11bSBzaXplIGZvciBhIHByaW50IGJ1ZmZlcidzIGFycmF5ICovCkBAIC02MSwxMCArNjEsMTAgQEAKIGludCAgdGlwY19wcmludGJ1Zl92YWxpZGF0ZShzdHJ1Y3QgcHJpbnRfYnVmICpwYik7CiB2b2lkIHRpcGNfcHJpbnRidWZfbW92ZShzdHJ1Y3QgcHJpbnRfYnVmICpwYl90bywgc3RydWN0IHByaW50X2J1ZiAqcGJfZnJvbSk7CiAKLXZvaWQgdGlwY19sb2dfcmVpbml0KGludCBsb2dfc2l6ZSk7Ci12b2lkIHRpcGNfbG9nX3N0b3Aodm9pZCk7CitpbnQgdGlwY19sb2dfcmVzaXplKGludCBsb2dfc2l6ZSk7CiAKLXN0cnVjdCBza19idWZmICp0aXBjX2xvZ19yZXNpemUoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLCBpbnQgcmVxX3Rsdl9zcGFjZSk7CitzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19sb2dfcmVzaXplX2NtZChjb25zdCB2b2lkICpyZXFfdGx2X2FyZWEsCisJCQkJICAgIGludCByZXFfdGx2X3NwYWNlKTsKIHN0cnVjdCBza19idWZmICp0aXBjX2xvZ19kdW1wKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL2Rpc2NvdmVyLmMgYi9uZXQvdGlwYy9kaXNjb3Zlci5jCmluZGV4IDVkNjQzZTUuLjE2NTdmMGUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2Rpc2NvdmVyLmMKKysrIGIvbmV0L3RpcGMvZGlzY292ZXIuYwpAQCAtMTIwLDkgKzEyMCw4IEBACiAKIAlpZiAoYnVmKSB7CiAJCW1zZyA9IGJ1Zl9tc2coYnVmKTsKLQkJbXNnX2luaXQobXNnLCBMSU5LX0NPTkZJRywgdHlwZSwgVElQQ19PSywgRFNDX0hfU0laRSwKLQkJCSBkZXN0X2RvbWFpbik7Ci0JCW1zZ19zZXRfbm9uX3NlcShtc2cpOworCQltc2dfaW5pdChtc2csIExJTktfQ09ORklHLCB0eXBlLCBEU0NfSF9TSVpFLCBkZXN0X2RvbWFpbik7CisJCW1zZ19zZXRfbm9uX3NlcShtc2csIDEpOwogCQltc2dfc2V0X3JlcV9saW5rcyhtc2csIHJlcV9saW5rcyk7CiAJCW1zZ19zZXRfZGVzdF9kb21haW4obXNnLCBkZXN0X2RvbWFpbik7CiAJCW1zZ19zZXRfYmNfbmV0aWQobXNnLCB0aXBjX25ldF9pZCk7CkBAIC0xNTYsMTEgKzE1NSwxMSBAQAogLyoqCiAgKiB0aXBjX2Rpc2NfcmVjdl9tc2cgLSBoYW5kbGUgaW5jb21pbmcgbGluayBzZXR1cCBtZXNzYWdlIChyZXF1ZXN0IG9yIHJlc3BvbnNlKQogICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgbWVzc2FnZQorICogQGJfcHRyOiBiZWFyZXIgdGhhdCBtZXNzYWdlIGFycml2ZWQgb24KICAqLwogCi12b2lkIHRpcGNfZGlzY19yZWN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQordm9pZCB0aXBjX2Rpc2NfcmVjdl9tc2coc3RydWN0IHNrX2J1ZmYgKmJ1Ziwgc3RydWN0IGJlYXJlciAqYl9wdHIpCiB7Ci0Jc3RydWN0IGJlYXJlciAqYl9wdHIgPSAoc3RydWN0IGJlYXJlciAqKVRJUENfU0tCX0NCKGJ1ZiktPmhhbmRsZTsKIAlzdHJ1Y3QgbGluayAqbGluazsKIAlzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIG1lZGlhX2FkZHI7CiAJc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKGJ1Zik7CkBAIC0yMDAsOSArMTk5LDggQEAKIAkJZGJnKCIgaW4gb3duIGNsdXN0ZXJcbiIpOwogCQlpZiAobl9wdHIgPT0gTlVMTCkgewogCQkJbl9wdHIgPSB0aXBjX25vZGVfY3JlYXRlKG9yaWcpOwotCQl9Ci0JCWlmIChuX3B0ciA9PSBOVUxMKSB7Ci0JCQlyZXR1cm47CisJCQlpZiAoIW5fcHRyKQorCQkJCXJldHVybjsKIAkJfQogCQlzcGluX2xvY2tfYmgoJm5fcHRyLT5sb2NrKTsKIAkJbGluayA9IG5fcHRyLT5saW5rc1tiX3B0ci0+aWRlbnRpdHldOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGlzY292ZXIuaCBiL25ldC90aXBjL2Rpc2NvdmVyLmgKaW5kZXggOWZkNzU4Ny4uYzM2ZWFlYiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvZGlzY292ZXIuaAorKysgYi9uZXQvdGlwYy9kaXNjb3Zlci5oCkBAIC00OCw3ICs0OCw3IEBACiB2b2lkIHRpcGNfZGlzY191cGRhdGVfbGlua19yZXEoc3RydWN0IGxpbmtfcmVxICpyZXEpOwogdm9pZCB0aXBjX2Rpc2Nfc3RvcF9saW5rX3JlcShzdHJ1Y3QgbGlua19yZXEgKnJlcSk7CiAKLXZvaWQgdGlwY19kaXNjX3JlY3ZfbXNnKHN0cnVjdCBza19idWZmICpidWYpOwordm9pZCB0aXBjX2Rpc2NfcmVjdl9tc2coc3RydWN0IHNrX2J1ZmYgKmJ1Ziwgc3RydWN0IGJlYXJlciAqYl9wdHIpOwogCiB2b2lkIHRpcGNfZGlzY19saW5rX2V2ZW50KHUzMiBhZGRyLCBjaGFyICpuYW1lLCBpbnQgdXApOwogI2lmIDAKZGlmZiAtLWdpdCBhL25ldC90aXBjL2V0aF9tZWRpYS5jIGIvbmV0L3RpcGMvZXRoX21lZGlhLmMKaW5kZXggOWNkMzVlZS4uZmU0M2VmNyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvZXRoX21lZGlhLmMKKysrIGIvbmV0L3RpcGMvZXRoX21lZGlhLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAkJCQkgZGV2LT5kZXZfYWRkciwgY2xvbmUtPmxlbik7CiAJCWRldl9xdWV1ZV94bWl0KGNsb25lKTsKIAl9Ci0JcmV0dXJuIFRJUENfT0s7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTAxLDcgKzEwMSw3IEBACiAJc3RydWN0IGV0aF9iZWFyZXIgKmViX3B0ciA9IChzdHJ1Y3QgZXRoX2JlYXJlciAqKXB0LT5hZl9wYWNrZXRfcHJpdjsKIAl1MzIgc2l6ZTsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KSB7CisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKSB7CiAJCWtmcmVlX3NrYihidWYpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMTMsMTIgKzExMywxMiBAQAogCQkJaWYgKGxpa2VseShidWYtPmxlbiA9PSBzaXplKSkgewogCQkJCWJ1Zi0+bmV4dCA9IE5VTEw7CiAJCQkJdGlwY19yZWN2X21zZyhidWYsIGViX3B0ci0+YmVhcmVyKTsKLQkJCQlyZXR1cm4gVElQQ19PSzsKKwkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQogCX0KIAlrZnJlZV9za2IoYnVmKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlzdHJ1Y3QgZXRoX2JlYXJlciAqZWJfcHRyID0gJmV0aF9iZWFyZXJzWzBdOwogCXN0cnVjdCBldGhfYmVhcmVyICpzdG9wID0gJmV0aF9iZWFyZXJzW01BWF9FVEhfQkVBUkVSU107CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCXdoaWxlICgoZWJfcHRyLT5kZXYgIT0gZGV2KSkgewpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbGluay5jIGIvbmV0L3RpcGMvbGluay5jCmluZGV4IDJhMjZhMTYuLmQ2MDExM2IgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2xpbmsuYworKysgYi9uZXQvdGlwYy9saW5rLmMKQEAgLTUxLDYgKzUxLDEyIEBACiAKIAogLyoKKyAqIE91dC1vZi1yYW5nZSB2YWx1ZSBmb3IgbGluayBzZXNzaW9uIG51bWJlcnMKKyAqLworCisjZGVmaW5lIElOVkFMSURfU0VTU0lPTiAweDEwMDAwCisKKy8qCiAgKiBMaW1pdCBmb3IgZGVmZXJyZWQgcmVjZXB0aW9uIHF1ZXVlOgogICovCiAKQEAgLTE0Nyw5ICsxNTMsMjEgQEAKIAogI2RlZmluZSBMSU5LX0xPR19CVUZfU0laRSAwCiAKLSNkZWZpbmUgZGJnX2xpbmsoZm10LCBhcmcuLi4pICBkbyB7aWYgKExJTktfTE9HX0JVRl9TSVpFKSB0aXBjX3ByaW50ZigmbF9wdHItPnByaW50X2J1ZiwgZm10LCAjIyBhcmcpOyB9IHdoaWxlKDApCi0jZGVmaW5lIGRiZ19saW5rX21zZyhtc2csIHR4dCkgZG8ge2lmIChMSU5LX0xPR19CVUZfU0laRSkgdGlwY19tc2dfcHJpbnQoJmxfcHRyLT5wcmludF9idWYsIG1zZywgdHh0KTsgfSB3aGlsZSgwKQotI2RlZmluZSBkYmdfbGlua19zdGF0ZSh0eHQpIGRvIHtpZiAoTElOS19MT0dfQlVGX1NJWkUpIGxpbmtfcHJpbnQobF9wdHIsICZsX3B0ci0+cHJpbnRfYnVmLCB0eHQpOyB9IHdoaWxlKDApCisjZGVmaW5lIGRiZ19saW5rKGZtdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChMSU5LX0xPR19CVUZfU0laRSkgXAorCQkJdGlwY19wcmludGYoJmxfcHRyLT5wcmludF9idWYsIGZtdCwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGRiZ19saW5rX21zZyhtc2csIHR4dCkgXAorCWRvIHsgXAorCQlpZiAoTElOS19MT0dfQlVGX1NJWkUpIFwKKwkJCXRpcGNfbXNnX2RiZygmbF9wdHItPnByaW50X2J1ZiwgbXNnLCB0eHQpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGJnX2xpbmtfc3RhdGUodHh0KSBcCisJZG8geyBcCisJCWlmIChMSU5LX0xPR19CVUZfU0laRSkgXAorCQkJbGlua19wcmludChsX3B0ciwgJmxfcHRyLT5wcmludF9idWYsIHR4dCk7IFwKKwl9IHdoaWxlICgwKQogI2RlZmluZSBkYmdfbGlua19kdW1wKCkgZG8geyBcCiAJaWYgKExJTktfTE9HX0JVRl9TSVpFKSB7IFwKIAkJdGlwY19wcmludGYoTE9HLCAiXG5cbkR1bXBpbmcgbGluayA8JXM+OlxuIiwgbF9wdHItPm5hbWUpOyBcCkBAIC00NTAsOSArNDY4LDkgQEAKIAogCWxfcHRyLT5wbXNnID0gKHN0cnVjdCB0aXBjX21zZyAqKSZsX3B0ci0+cHJvdG9fbXNnOwogCW1zZyA9IGxfcHRyLT5wbXNnOwotCW1zZ19pbml0KG1zZywgTElOS19QUk9UT0NPTCwgUkVTRVRfTVNHLCBUSVBDX09LLCBJTlRfSF9TSVpFLCBsX3B0ci0+YWRkcik7CisJbXNnX2luaXQobXNnLCBMSU5LX1BST1RPQ09MLCBSRVNFVF9NU0csIElOVF9IX1NJWkUsIGxfcHRyLT5hZGRyKTsKIAltc2dfc2V0X3NpemUobXNnLCBzaXplb2YobF9wdHItPnByb3RvX21zZykpOwotCW1zZ19zZXRfc2Vzc2lvbihtc2csIHRpcGNfcmFuZG9tKTsKKwltc2dfc2V0X3Nlc3Npb24obXNnLCAodGlwY19yYW5kb20gJiAweGZmZmYpKTsKIAltc2dfc2V0X2JlYXJlcl9pZChtc2csIGJfcHRyLT5pZGVudGl0eSk7CiAJc3RyY3B5KChjaGFyICopbXNnX2RhdGEobXNnKSwgaWZfbmFtZSk7CiAKQEAgLTY5MywxMCArNzExLDEwIEBACiAJdTMyIGNoZWNrcG9pbnQgPSBsX3B0ci0+bmV4dF9pbl9ubzsKIAlpbnQgd2FzX2FjdGl2ZV9saW5rID0gdGlwY19saW5rX2lzX2FjdGl2ZShsX3B0cik7CiAKLQltc2dfc2V0X3Nlc3Npb24obF9wdHItPnBtc2csIG1zZ19zZXNzaW9uKGxfcHRyLT5wbXNnKSArIDEpOworCW1zZ19zZXRfc2Vzc2lvbihsX3B0ci0+cG1zZywgKChtc2dfc2Vzc2lvbihsX3B0ci0+cG1zZykgKyAxKSAmIDB4ZmZmZikpOwogCi0JLyogTGluayBpcyBkb3duLCBhY2NlcHQgYW55IHNlc3Npb246ICovCi0JbF9wdHItPnBlZXJfc2Vzc2lvbiA9IDA7CisJLyogTGluayBpcyBkb3duLCBhY2NlcHQgYW55IHNlc3Npb24gKi8KKwlsX3B0ci0+cGVlcl9zZXNzaW9uID0gSU5WQUxJRF9TRVNTSU9OOwogCiAJLyogUHJlcGFyZSBmb3IgbWF4IHBhY2tldCBzaXplIG5lZ290aWF0aW9uICovCiAJbGlua19pbml0X21heF9wa3QobF9wdHIpOwpAQCAtMTExMCw3ICsxMTI4LDcgQEAKIAogCQkJaWYgKGJ1bmRsZXIpIHsKIAkJCQltc2dfaW5pdCgmYnVuZGxlcl9oZHIsIE1TR19CVU5ETEVSLCBPUEVOX01TRywKLQkJCQkJIFRJUENfT0ssIElOVF9IX1NJWkUsIGxfcHRyLT5hZGRyKTsKKwkJCQkJIElOVF9IX1NJWkUsIGxfcHRyLT5hZGRyKTsKIAkJCQlza2JfY29weV90b19saW5lYXJfZGF0YShidW5kbGVyLCAmYnVuZGxlcl9oZHIsCiAJCQkJCQkJSU5UX0hfU0laRSk7CiAJCQkJc2tiX3RyaW0oYnVuZGxlciwgSU5UX0hfU0laRSk7CkBAIC0xMzc0LDcgKzEzOTIsNyBAQAogCiAJbXNnX2RiZyhoZHIsICI+RlJBR01FTlRJTkc+Iik7CiAJbXNnX2luaXQoJmZyYWdtX2hkciwgTVNHX0ZSQUdNRU5URVIsIEZJUlNUX0ZSQUdNRU5ULAotCQkgVElQQ19PSywgSU5UX0hfU0laRSwgbXNnX2Rlc3Rub2RlKGhkcikpOworCQkgSU5UX0hfU0laRSwgbXNnX2Rlc3Rub2RlKGhkcikpOwogCW1zZ19zZXRfbGlua19zZWxlY3RvcigmZnJhZ21faGRyLCBzZW5kZXItPnB1YmwucmVmKTsKIAltc2dfc2V0X3NpemUoJmZyYWdtX2hkciwgbWF4X3BrdCk7CiAJbXNnX3NldF9mcmFnbV9ubygmZnJhZ21faGRyLCAxKTsKQEAgLTE1NDMsNyArMTU2MSw3IEBACiAJCQlsX3B0ci0+cmV0cmFuc21fcXVldWVfaGVhZCA9IG1vZCgrK3JfcV9oZWFkKTsKIAkJCWxfcHRyLT5yZXRyYW5zbV9xdWV1ZV9zaXplID0gLS1yX3Ffc2l6ZTsKIAkJCWxfcHRyLT5zdGF0cy5yZXRyYW5zbWl0dGVkKys7Ci0JCQlyZXR1cm4gVElQQ19PSzsKKwkJCXJldHVybiAwOwogCQl9IGVsc2UgewogCQkJbF9wdHItPnN0YXRzLmJlYXJlcl9jb25ncysrOwogCQkJbXNnX2RiZyhidWZfbXNnKGJ1ZiksICJ8PkRFRi1SRVRSPiIpOwpAQCAtMTU2Miw3ICsxNTgwLDcgQEAKIAkJCWxfcHRyLT51bmFja2VkX3dpbmRvdyA9IDA7CiAJCQlidWZfZGlzY2FyZChidWYpOwogCQkJbF9wdHItPnByb3RvX21zZ19xdWV1ZSA9IE5VTEw7Ci0JCQlyZXR1cm4gVElQQ19PSzsKKwkJCXJldHVybiAwOwogCQl9IGVsc2UgewogCQkJbXNnX2RiZyhidWZfbXNnKGJ1ZiksICJ8PkRFRi1QUk9UPiIpOwogCQkJbF9wdHItPnN0YXRzLmJlYXJlcl9jb25ncysrOwpAQCAtMTU4Niw3ICsxNjA0LDcgQEAKIAkJCQkJbXNnX3NldF90eXBlKG1zZywgQ0xPU0VEX01TRyk7CiAJCQkJbXNnX2RiZyhtc2csICI+UFVTSC1EQVRBPiIpOwogCQkJCWxfcHRyLT5uZXh0X291dCA9IGJ1Zi0+bmV4dDsKLQkJCQlyZXR1cm4gVElQQ19PSzsKKwkJCQlyZXR1cm4gMDsKIAkJCX0gZWxzZSB7CiAJCQkJbXNnX2RiZyhtc2csICJ8UFVTSC1EQVRBfCIpOwogCQkJCWxfcHRyLT5zdGF0cy5iZWFyZXJfY29uZ3MrKzsKQEAgLTE2MTAsOCArMTYyOCw4IEBACiAKIAlkbyB7CiAJCXJlcyA9IHRpcGNfbGlua19wdXNoX3BhY2tldChsX3B0cik7Ci0JfQotCXdoaWxlIChyZXMgPT0gVElQQ19PSyk7CisJfSB3aGlsZSAoIXJlcyk7CisKIAlpZiAocmVzID09IFBVU0hfRkFJTEVEKQogCQl0aXBjX2JlYXJlcl9zY2hlZHVsZShsX3B0ci0+Yl9wdHIsIGxfcHRyKTsKIH0KQEAgLTE2NTEsNyArMTY2OSw3IEBACiAJc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKGJ1Zik7CiAKIAl3YXJuKCJSZXRyYW5zbWlzc2lvbiBmYWlsdXJlIG9uIGxpbmsgPCVzPlxuIiwgbF9wdHItPm5hbWUpOwotCXRpcGNfbXNnX3ByaW50KFRJUENfT1VUUFVULCBtc2csICI+UkVUUi1GQUlMPiIpOworCXRpcGNfbXNnX2RiZyhUSVBDX09VVFBVVCwgbXNnLCAiPlJFVFItRkFJTD4iKTsKIAogCWlmIChsX3B0ci0+YWRkcikgewogCkBAIC0xNzQ4LDIxICsxNzY2LDYgQEAKIAlsX3B0ci0+cmV0cmFuc21fcXVldWVfaGVhZCA9IGxfcHRyLT5yZXRyYW5zbV9xdWV1ZV9zaXplID0gMDsKIH0KIAotLyoKLSAqIGxpbmtfcmVjdl9ub25fc2VxOiBSZWNlaXZlIHBhY2tldHMgd2hpY2ggYXJlIG91dHNpZGUKLSAqICAgICAgICAgICAgICAgICAgICB0aGUgbGluayBzZXF1ZW5jZSBmbG93Ci0gKi8KLQotc3RhdGljIHZvaWQgbGlua19yZWN2X25vbl9zZXEoc3RydWN0IHNrX2J1ZmYgKmJ1ZikKLXsKLQlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKLQotCWlmIChtc2dfdXNlcihtc2cpID09ICBMSU5LX0NPTkZJRykKLQkJdGlwY19kaXNjX3JlY3ZfbXNnKGJ1Zik7Ci0JZWxzZQotCQl0aXBjX2JjbGlua19yZWN2X3BrdChidWYpOwotfQotCiAvKioKICAqIGxpbmtfaW5zZXJ0X2RlZmVycmVkX3F1ZXVlIC0gaW5zZXJ0IGRlZmVycmVkIG1lc3NhZ2VzIGJhY2sgaW50byByZWNlaXZlIGNoYWluCiAgKi8KQEAgLTE4MzksNyArMTg0Miw3IEBACiB7CiAJcmVhZF9sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKIAl3aGlsZSAoaGVhZCkgewotCQlzdHJ1Y3QgYmVhcmVyICpiX3B0cjsKKwkJc3RydWN0IGJlYXJlciAqYl9wdHIgPSAoc3RydWN0IGJlYXJlciAqKXRiX3B0cjsKIAkJc3RydWN0IG5vZGUgKm5fcHRyOwogCQlzdHJ1Y3QgbGluayAqbF9wdHI7CiAJCXN0cnVjdCBza19idWZmICpjcnM7CkBAIC0xODUwLDkgKzE4NTMsNiBAQAogCQl1MzIgcmVsZWFzZWQgPSAwOwogCQlpbnQgdHlwZTsKIAotCQliX3B0ciA9IChzdHJ1Y3QgYmVhcmVyICopdGJfcHRyOwotCQlUSVBDX1NLQl9DQihidWYpLT5oYW5kbGUgPSBiX3B0cjsKLQogCQloZWFkID0gaGVhZC0+bmV4dDsKIAogCQkvKiBFbnN1cmUgbWVzc2FnZSBpcyB3ZWxsLWZvcm1lZCAqLwpAQCAtMTg3MSw3ICsxODcxLDEwIEBACiAJCW1zZyA9IGJ1Zl9tc2coYnVmKTsKIAogCQlpZiAodW5saWtlbHkobXNnX25vbl9zZXEobXNnKSkpIHsKLQkJCWxpbmtfcmVjdl9ub25fc2VxKGJ1Zik7CisJCQlpZiAobXNnX3VzZXIobXNnKSA9PSAgTElOS19DT05GSUcpCisJCQkJdGlwY19kaXNjX3JlY3ZfbXNnKGJ1ZiwgYl9wdHIpOworCQkJZWxzZQorCQkJCXRpcGNfYmNsaW5rX3JlY3ZfcGt0KGJ1Zik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xOTc4LDggKzE5ODEsNiBAQAogCQkJCQkJaWYgKGxpbmtfcmVjdl9jaGFuZ2VvdmVyX21zZygmbF9wdHIsICZidWYpKSB7CiAJCQkJCQkJbXNnID0gYnVmX21zZyhidWYpOwogCQkJCQkJCXNlcV9ubyA9IG1zZ19zZXFubyhtc2cpOwotCQkJCQkJCVRJUENfU0tCX0NCKGJ1ZiktPmhhbmRsZQotCQkJCQkJCQk9IGJfcHRyOwogCQkJCQkJCWlmICh0eXBlID09IE9SSUdJTkFMX01TRykKIAkJCQkJCQkJZ290byBkZWxpdmVyOwogCQkJCQkJCWdvdG8gcHJvdG9jb2xfY2hlY2s7CkBAIC0yMjYzLDcgKzIyNjQsOCBAQAogCXN3aXRjaCAobXNnX3R5cGUobXNnKSkgewogCiAJY2FzZSBSRVNFVF9NU0c6Ci0JCWlmICghbGlua193b3JraW5nX3Vua25vd24obF9wdHIpICYmIGxfcHRyLT5wZWVyX3Nlc3Npb24pIHsKKwkJaWYgKCFsaW5rX3dvcmtpbmdfdW5rbm93bihsX3B0cikgJiYKKwkJICAgIChsX3B0ci0+cGVlcl9zZXNzaW9uICE9IElOVkFMSURfU0VTU0lPTikpIHsKIAkJCWlmIChtc2dfc2Vzc2lvbihtc2cpID09IGxfcHRyLT5wZWVyX3Nlc3Npb24pIHsKIAkJCQlkYmcoIkR1cGxpY2F0ZSBSRVNFVDogJXU8LT4ldVxuIiwKIAkJCQkgICAgbXNnX3Nlc3Npb24obXNnKSwgbF9wdHItPnBlZXJfc2Vzc2lvbik7CkBAIC0yNDI0LDcgKzI0MjYsNyBAQAogCX0KIAogCW1zZ19pbml0KCZ0dW5uZWxfaGRyLCBDSEFOR0VPVkVSX1BST1RPQ09MLAotCQkgT1JJR0lOQUxfTVNHLCBUSVBDX09LLCBJTlRfSF9TSVpFLCBsX3B0ci0+YWRkcik7CisJCSBPUklHSU5BTF9NU0csIElOVF9IX1NJWkUsIGxfcHRyLT5hZGRyKTsKIAltc2dfc2V0X2JlYXJlcl9pZCgmdHVubmVsX2hkciwgbF9wdHItPnBlZXJfYmVhcmVyX2lkKTsKIAltc2dfc2V0X21zZ2NudCgmdHVubmVsX2hkciwgbXNnY291bnQpOwogCWRiZygiTGluayBjaGFuZ2VvdmVyIHJlcXVpcmVzICV1IHR1bm5lbCBtZXNzYWdlc1xuIiwgbXNnY291bnQpOwpAQCAtMjQ3OSw3ICsyNDgxLDcgQEAKIAlzdHJ1Y3QgdGlwY19tc2cgdHVubmVsX2hkcjsKIAogCW1zZ19pbml0KCZ0dW5uZWxfaGRyLCBDSEFOR0VPVkVSX1BST1RPQ09MLAotCQkgRFVQTElDQVRFX01TRywgVElQQ19PSywgSU5UX0hfU0laRSwgbF9wdHItPmFkZHIpOworCQkgRFVQTElDQVRFX01TRywgSU5UX0hfU0laRSwgbF9wdHItPmFkZHIpOwogCW1zZ19zZXRfbXNnY250KCZ0dW5uZWxfaGRyLCBsX3B0ci0+b3V0X3F1ZXVlX3NpemUpOwogCW1zZ19zZXRfYmVhcmVyX2lkKCZ0dW5uZWxfaGRyLCBsX3B0ci0+cGVlcl9iZWFyZXJfaWQpOwogCWl0ZXIgPSBsX3B0ci0+Zmlyc3Rfb3V0OwpAQCAtMjY3MiwxMCArMjY3NCwxMiBAQAogCXUzMiBwYWNrX3N6ID0gbGlua19tYXhfcGt0KGxfcHRyKTsKIAl1MzIgZnJhZ21fc3ogPSBwYWNrX3N6IC0gSU5UX0hfU0laRTsKIAl1MzIgZnJhZ21fbm8gPSAxOwotCXUzMiBkZXN0YWRkciA9IG1zZ19kZXN0bm9kZShpbm1zZyk7CisJdTMyIGRlc3RhZGRyOwogCiAJaWYgKG1zZ19zaG9ydChpbm1zZykpCiAJCWRlc3RhZGRyID0gbF9wdHItPmFkZHI7CisJZWxzZQorCQlkZXN0YWRkciA9IG1zZ19kZXN0bm9kZShpbm1zZyk7CiAKIAlpZiAobXNnX3JvdXRlZChpbm1zZykpCiAJCW1zZ19zZXRfcHJldm5vZGUoaW5tc2csIHRpcGNfb3duX2FkZHIpOwpAQCAtMjY4Myw3ICsyNjg3LDcgQEAKIAkvKiBQcmVwYXJlIHJldXNhYmxlIGZyYWdtZW50IGhlYWRlcjogKi8KIAogCW1zZ19pbml0KCZmcmFnbV9oZHIsIE1TR19GUkFHTUVOVEVSLCBGSVJTVF9GUkFHTUVOVCwKLQkJIFRJUENfT0ssIElOVF9IX1NJWkUsIGRlc3RhZGRyKTsKKwkJIElOVF9IX1NJWkUsIGRlc3RhZGRyKTsKIAltc2dfc2V0X2xpbmtfc2VsZWN0b3IoJmZyYWdtX2hkciwgbXNnX2xpbmtfc2VsZWN0b3IoaW5tc2cpKTsKIAltc2dfc2V0X2xvbmdfbXNnbm8oJmZyYWdtX2hkciwgbW9kKGxfcHRyLT5sb25nX21zZ19zZXFfbm8rKykpOwogCW1zZ19zZXRfZnJhZ21fbm8oJmZyYWdtX2hkciwgZnJhZ21fbm8pOwpAQCAtMjk5NCw3ICsyOTk4LDcgQEAKIAkJCWxpbmtfc2V0X3N1cGVydmlzaW9uX3Byb3BzKGxfcHRyLCBuZXdfdmFsdWUpOwogCQkJdGlwY19saW5rX3NlbmRfcHJvdG9fbXNnKGxfcHRyLCBTVEFURV9NU0csCiAJCQkJCQkgMCwgMCwgbmV3X3ZhbHVlLCAwLCAwKTsKLQkJCXJlcyA9IFRJUENfT0s7CisJCQlyZXMgPSAwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgVElQQ19DTURfU0VUX0xJTktfUFJJOgpAQCAtMzAwMywxNCArMzAwNywxNCBAQAogCQkJbF9wdHItPnByaW9yaXR5ID0gbmV3X3ZhbHVlOwogCQkJdGlwY19saW5rX3NlbmRfcHJvdG9fbXNnKGxfcHRyLCBTVEFURV9NU0csCiAJCQkJCQkgMCwgMCwgMCwgbmV3X3ZhbHVlLCAwKTsKLQkJCXJlcyA9IFRJUENfT0s7CisJCQlyZXMgPSAwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgVElQQ19DTURfU0VUX0xJTktfV0lORE9XOgogCQlpZiAoKG5ld192YWx1ZSA+PSBUSVBDX01JTl9MSU5LX1dJTikgJiYKIAkJICAgIChuZXdfdmFsdWUgPD0gVElQQ19NQVhfTElOS19XSU4pKSB7CiAJCQl0aXBjX2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyhsX3B0ciwgbmV3X3ZhbHVlKTsKLQkJCXJlcyA9IFRJUENfT0s7CisJCQlyZXMgPSAwOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTMyMjYsNyArMzIzMCw3IEBACiAJCQlpZiAob3AgPT0gVElQQ19DTURfVU5CTE9DS19MSU5LKSB7CiAJCQkJbF9wdHItPmJsb2NrZWQgPSAwOwogCQkJfQotCQkJcmVzID0gVElQQ19PSzsKKwkJCXJlcyA9IDA7CiAJCX0KIAkJdGlwY19ub2RlX3VubG9jayhub2RlKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9tc2cuYyBiL25ldC90aXBjL21zZy5jCmluZGV4IDY5NmE4NjMuLjczZGNkMDAgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL21zZy5jCisrKyBiL25ldC90aXBjL21zZy5jCkBAIC00MSw3ICs0MSw5IEBACiAjaW5jbHVkZSAiYmVhcmVyLmgiCiAKIAotdm9pZCB0aXBjX21zZ19wcmludChzdHJ1Y3QgcHJpbnRfYnVmICpidWYsIHN0cnVjdCB0aXBjX21zZyAqbXNnLCBjb25zdCBjaGFyICpzdHIpCisjaWZkZWYgQ09ORklHX1RJUENfREVCVUcKKwordm9pZCB0aXBjX21zZ19kYmcoc3RydWN0IHByaW50X2J1ZiAqYnVmLCBzdHJ1Y3QgdGlwY19tc2cgKm1zZywgY29uc3QgY2hhciAqc3RyKQogewogCXUzMiB1c3IgPSBtc2dfdXNlcihtc2cpOwogCXRpcGNfcHJpbnRmKGJ1Ziwgc3RyKTsKQEAgLTIyOCwxMyArMjMwLDEwIEBACiAKIAlzd2l0Y2ggKHVzcikgewogCWNhc2UgQ09OTl9NQU5BR0VSOgotCWNhc2UgTkFNRV9ESVNUUklCVVRPUjoKIAljYXNlIFRJUENfTE9XX0lNUE9SVEFOQ0U6CiAJY2FzZSBUSVBDX01FRElVTV9JTVBPUlRBTkNFOgogCWNhc2UgVElQQ19ISUdIX0lNUE9SVEFOQ0U6CiAJY2FzZSBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0U6Ci0JCWlmIChtc2dfc2hvcnQobXNnKSkKLQkJCWJyZWFrOwkvKiBObyBlcnJvciAqLwogCQlzd2l0Y2ggKG1zZ19lcnJjb2RlKG1zZykpIHsKIAkJY2FzZSBUSVBDX09LOgogCQkJYnJlYWs7CkBAIC0zMTUsOSArMzE0LDExIEBACiAJfQogCXRpcGNfcHJpbnRmKGJ1ZiwgIlxuIik7CiAJaWYgKCh1c3IgPT0gQ0hBTkdFT1ZFUl9QUk9UT0NPTCkgJiYgKG1zZ19tc2djbnQobXNnKSkpIHsKLQkJdGlwY19tc2dfcHJpbnQoYnVmLG1zZ19nZXRfd3JhcHBlZChtc2cpLCIgICAgICAvIik7CisJCXRpcGNfbXNnX2RiZyhidWYsIG1zZ19nZXRfd3JhcHBlZChtc2cpLCAiICAgICAgLyIpOwogCX0KIAlpZiAoKHVzciA9PSBNU0dfRlJBR01FTlRFUikgJiYgKG1zZ190eXBlKG1zZykgPT0gRklSU1RfRlJBR01FTlQpKSB7Ci0JCXRpcGNfbXNnX3ByaW50KGJ1Zixtc2dfZ2V0X3dyYXBwZWQobXNnKSwiICAgICAgLyIpOworCQl0aXBjX21zZ19kYmcoYnVmLCBtc2dfZ2V0X3dyYXBwZWQobXNnKSwgIiAgICAgIC8iKTsKIAl9CiB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbXNnLmggYi9uZXQvdGlwYy9tc2cuaAppbmRleCBhZDQ4N2U4Li43ZWU2YWUyMyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbXNnLmgKKysrIGIvbmV0L3RpcGMvbXNnLmgKQEAgLTIsNyArMiw3IEBACiAgKiBuZXQvdGlwYy9tc2cuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIG1lc3NhZ2UgaGVhZGVyIHJvdXRpbmVzCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDcsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNywgV2luZCBSaXZlciBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgV2luZCBSaXZlciBTeXN0ZW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzUsNiArNzUsMTQgQEAKIAltLT5oZHJbd10gfD0gaHRvbmwodmFsKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG1zZ19zd2FwX3dvcmRzKHN0cnVjdCB0aXBjX21zZyAqbXNnLCB1MzIgYSwgdTMyIGIpCit7CisJdTMyIHRlbXAgPSBtc2ctPmhkclthXTsKKworCW1zZy0+aGRyW2FdID0gbXNnLT5oZHJbYl07CisJbXNnLT5oZHJbYl0gPSB0ZW1wOworfQorCiAvKgogICogV29yZCAwCiAgKi8KQEAgLTExOSw5ICsxMjcsOSBAQAogCXJldHVybiBtc2dfYml0cyhtLCAwLCAyMCwgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X25vbl9zZXEoc3RydWN0IHRpcGNfbXNnICptKQorc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfbm9uX3NlcShzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiBuKQogewotCW1zZ19zZXRfYml0cyhtLCAwLCAyMCwgMSwgMSk7CisJbXNnX3NldF9iaXRzKG0sIDAsIDIwLCAxLCBuKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbXNnX2Rlc3RfZHJvcHBhYmxlKHN0cnVjdCB0aXBjX21zZyAqbSkKQEAgLTIyNCw2ICsyMzIsMjUgQEAKIAltc2dfc2V0X2JpdHMobSwgMiwgMCwgMHhmZmZmLCBuKTsKIH0KIAorLyoKKyAqIFRJUEMgbWF5IHV0aWxpemUgdGhlICJsaW5rIGFjayAjIiBhbmQgImxpbmsgc2VxICMiIGZpZWxkcyBvZiBhIHNob3J0CisgKiBtZXNzYWdlIGhlYWRlciB0byBob2xkIHRoZSBkZXN0aW5hdGlvbiBub2RlIGZvciB0aGUgbWVzc2FnZSwgc2luY2UgdGhlCisgKiBub3JtYWwgImRlc3Qgbm9kZSIgZmllbGQgaXNuJ3QgcHJlc2VudC4gIFRoaXMgY2FjaGUgaXMgb25seSByZWZlcmVuY2VkCisgKiB3aGVuIHJlcXVpcmVkLCBzbyBwb3B1bGF0aW5nIHRoZSBjYWNoZSBvZiBhIGxvbmdlciBtZXNzYWdlIGhlYWRlciBpcworICogaGFybWxlc3MgKGFzIGxvbmcgYXMgdGhlIGhlYWRlciBoYXMgdGhlIHR3byBsaW5rIHNlcXVlbmNlIGZpZWxkcyBwcmVzZW50KS4KKyAqCisgKiBOb3RlOiBIb3N0IGJ5dGUgb3JkZXIgaXMgT0sgaGVyZSwgc2luY2UgdGhlIGluZm8gbmV2ZXIgZ29lcyBvZmYtY2FyZC4KKyAqLworCitzdGF0aWMgaW5saW5lIHUzMiBtc2dfZGVzdG5vZGVfY2FjaGUoc3RydWN0IHRpcGNfbXNnICptKQoreworCXJldHVybiBtLT5oZHJbMl07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X2Rlc3Rub2RlX2NhY2hlKHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIGRub2RlKQoreworCW0tPmhkclsyXSA9IGRub2RlOworfQogCiAvKgogICogV29yZHMgMy0xMApAQCAtMzI1LDcgKzM1Miw3IEBACiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwogICAgdzA6fHZlcnMgfG1zZyB1c3J8aGRyIHN6IHxufHJlc3J2fCAgICAgICAgICAgIHBhY2tldCBzaXplICAgICAgICAgIHwKICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3MTp8bSB0eXB8cnN2PTB8ICAgc2VxdWVuY2UgZ2FwICAgIHwgICAgICAgYnJvYWRjYXN0IGFjayBubyAgICAgICAgfAorICAgdzE6fG0gdHlwfCAgICAgIHNlcXVlbmNlIGdhcCAgICAgICB8ICAgICAgIGJyb2FkY2FzdCBhY2sgbm8gICAgICAgIHwKICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCiAgICB3Mjp8IGxpbmsgbGV2ZWwgYWNrIG5vL2JjX2dhcF9mcm9tIHwgICAgIHNlcSBubyAvIGJjYXN0X2dhcF90byAgICAgfAogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKQEAgLTM4OCwxMiArNDE1LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdTMyIG1zZ19zZXFfZ2FwKHN0cnVjdCB0aXBjX21zZyAqbSkKIHsKLQlyZXR1cm4gbXNnX2JpdHMobSwgMSwgMTYsIDB4ZmYpOworCXJldHVybiBtc2dfYml0cyhtLCAxLCAxNiwgMHgxZmZmKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfc2VxX2dhcChzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiBuKQogewotCW1zZ19zZXRfYml0cyhtLCAxLCAxNiwgMHhmZiwgbik7CisJbXNnX3NldF9iaXRzKG0sIDEsIDE2LCAweDFmZmYsIG4pOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBtc2dfcmVxX2xpbmtzKHN0cnVjdCB0aXBjX21zZyAqbSkKQEAgLTY5Niw3ICs3MjMsNyBAQAogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfaW5pdChzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiB1c2VyLCB1MzIgdHlwZSwKLQkJCSAgICB1MzIgZXJyLCB1MzIgaHNpemUsIHUzMiBkZXN0bm9kZSkKKwkJCSAgICB1MzIgaHNpemUsIHUzMiBkZXN0bm9kZSkKIHsKIAltZW1zZXQobSwgMCwgaHNpemUpOwogCW1zZ19zZXRfdmVyc2lvbihtKTsKQEAgLTcwNSw3ICs3MzIsNiBAQAogCW1zZ19zZXRfc2l6ZShtLCBoc2l6ZSk7CiAJbXNnX3NldF9wcmV2bm9kZShtLCB0aXBjX293bl9hZGRyKTsKIAltc2dfc2V0X3R5cGUobSwgdHlwZSk7Ci0JbXNnX3NldF9lcnJjb2RlKG0sIGVycik7CiAJaWYgKCFtc2dfc2hvcnQobSkpIHsKIAkJbXNnX3NldF9vcmlnbm9kZShtLCB0aXBjX293bl9hZGRyKTsKIAkJbXNnX3NldF9kZXN0bm9kZShtLCBkZXN0bm9kZSk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKaW5kZXggMzlmZDE2MS4uMTBhNjk4OSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwpAQCAtNDEsOSArNDEsNiBAQAogI2luY2x1ZGUgIm1zZy5oIgogI2luY2x1ZGUgIm5hbWVfZGlzdHIuaCIKIAotI3VuZGVmICBEQkdfT1VUUFVUCi0jZGVmaW5lIERCR19PVVRQVVQgTlVMTAotCiAjZGVmaW5lIElURU1fU0laRSBzaXplb2Yoc3RydWN0IGRpc3RyX2l0ZW0pCiAKIC8qKgpAQCAtMTA2LDggKzEwMyw3IEBACiAKIAlpZiAoYnVmICE9IE5VTEwpIHsKIAkJbXNnID0gYnVmX21zZyhidWYpOwotCQltc2dfaW5pdChtc2csIE5BTUVfRElTVFJJQlVUT1IsIHR5cGUsIFRJUENfT0ssCi0JCQkgTE9OR19IX1NJWkUsIGRlc3QpOworCQltc2dfaW5pdChtc2csIE5BTUVfRElTVFJJQlVUT1IsIHR5cGUsIExPTkdfSF9TSVpFLCBkZXN0KTsKIAkJbXNnX3NldF9zaXplKG1zZywgTE9OR19IX1NJWkUgKyBzaXplKTsKIAl9CiAJcmV0dXJuIGJ1ZjsKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuYwppbmRleCBhYzdkZmRkLi5jZDcyZTIyIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC0yLDcgKzIsNyBAQAogICogbmV0L3RpcGMvbmFtZV90YWJsZS5jOiBUSVBDIG5hbWUgdGFibGUgY29kZQogICoKICAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDgsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTUyLDkgKzUyLDE2IEBACiAgKiBzdHJ1Y3Qgc3ViX3NlcSAtIGNvbnRhaW5lciBmb3IgYWxsIHB1Ymxpc2hlZCBpbnN0YW5jZXMgb2YgYSBuYW1lIHNlcXVlbmNlCiAgKiBAbG93ZXI6IG5hbWUgc2VxdWVuY2UgbG93ZXIgYm91bmQKICAqIEB1cHBlcjogbmFtZSBzZXF1ZW5jZSB1cHBlciBib3VuZAotICogQG5vZGVfbGlzdDogY2lyY3VsYXIgbGlzdCBvZiBtYXRjaGluZyBwdWJsaWNhdGlvbnMgd2l0aCA+PSBub2RlIHNjb3BlCi0gKiBAY2x1c3Rlcl9saXN0OiBjaXJjdWxhciBsaXN0IG9mIG1hdGNoaW5nIHB1YmxpY2F0aW9ucyB3aXRoID49IGNsdXN0ZXIgc2NvcGUKLSAqIEB6b25lX2xpc3Q6IGNpcmN1bGFyIGxpc3Qgb2YgbWF0Y2hpbmcgcHVibGljYXRpb25zIHdpdGggPj0gem9uZSBzY29wZQorICogQG5vZGVfbGlzdDogY2lyY3VsYXIgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbWFkZSBieSBvd24gbm9kZQorICogQGNsdXN0ZXJfbGlzdDogY2lyY3VsYXIgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbWFkZSBieSBvd24gY2x1c3RlcgorICogQHpvbmVfbGlzdDogY2lyY3VsYXIgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbWFkZSBieSBvd24gem9uZQorICogQG5vZGVfbGlzdF9zaXplOiBudW1iZXIgb2YgZW50cmllcyBpbiAibm9kZV9saXN0IgorICogQGNsdXN0ZXJfbGlzdF9zaXplOiBudW1iZXIgb2YgZW50cmllcyBpbiAiY2x1c3Rlcl9saXN0IgorICogQHpvbmVfbGlzdF9zaXplOiBudW1iZXIgb2YgZW50cmllcyBpbiAiem9uZV9saXN0IgorICoKKyAqIE5vdGU6IFRoZSB6b25lIGxpc3QgYWx3YXlzIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBlbnRyeSwgc2luY2UgYWxsCisgKiAgICAgICBwdWJsaWNhdGlvbnMgb2YgdGhlIGFzc29jaWF0ZWQgbmFtZSBzZXF1ZW5jZSBiZWxvbmcgdG8gaXQuCisgKiAgICAgICAoVGhlIGNsdXN0ZXIgYW5kIG5vZGUgbGlzdHMgbWF5IGJlIGVtcHR5LikKICAqLwogCiBzdHJ1Y3Qgc3ViX3NlcSB7CkBAIC02Myw2ICs3MCw5IEBACiAJc3RydWN0IHB1YmxpY2F0aW9uICpub2RlX2xpc3Q7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpjbHVzdGVyX2xpc3Q7CiAJc3RydWN0IHB1YmxpY2F0aW9uICp6b25lX2xpc3Q7CisJdTMyIG5vZGVfbGlzdF9zaXplOworCXUzMiBjbHVzdGVyX2xpc3Rfc2l6ZTsKKwl1MzIgem9uZV9saXN0X3NpemU7CiB9OwogCiAvKioKQEAgLTc0LDcgKzg0LDcgQEAKICAqIEBmaXJzdF9mcmVlOiBhcnJheSBpbmRleCBvZiBmaXJzdCB1bnVzZWQgc3ViLXNlcXVlbmNlIGVudHJ5CiAgKiBAbnNfbGlzdDogbGlua3MgdG8gYWRqYWNlbnQgbmFtZSBzZXF1ZW5jZXMgaW4gaGFzaCBjaGFpbgogICogQHN1YnNjcmlwdGlvbnM6IGxpc3Qgb2Ygc3Vic2NyaXB0aW9ucyBmb3IgdGhpcyAndHlwZScKLSAqIEBsb2NrOiBzcGlubG9jayBjb250cm9sbGluZyBhY2Nlc3MgdG8gbmFtZSBzZXF1ZW5jZSBzdHJ1Y3R1cmUKKyAqIEBsb2NrOiBzcGlubG9jayBjb250cm9sbGluZyBhY2Nlc3MgdG8gcHVibGljYXRpb24gbGlzdHMgb2YgYWxsIHN1Yi1zZXF1ZW5jZXMKICAqLwogCiBzdHJ1Y3QgbmFtZV9zZXEgewpAQCAtMzE3LDYgKzMyNyw3IEBACiAJZGJnKCJpbnNlcnRpbmcgcHVibCAlcCwgbm9kZT0weCV4IHB1YmwtPm5vZGU9MHgleCwgc3Vic2NyLT5ub2RlPSVwXG4iLAogCSAgICBwdWJsLCBub2RlLCBwdWJsLT5ub2RlLCBwdWJsLT5zdWJzY3Iubm9kZSk7CiAKKwlzc2VxLT56b25lX2xpc3Rfc2l6ZSsrOwogCWlmICghc3NlcS0+em9uZV9saXN0KQogCQlzc2VxLT56b25lX2xpc3QgPSBwdWJsLT56b25lX2xpc3RfbmV4dCA9IHB1Ymw7CiAJZWxzZSB7CkBAIC0zMjUsNiArMzM2LDcgQEAKIAl9CiAKIAlpZiAoaW5fb3duX2NsdXN0ZXIobm9kZSkpIHsKKwkJc3NlcS0+Y2x1c3Rlcl9saXN0X3NpemUrKzsKIAkJaWYgKCFzc2VxLT5jbHVzdGVyX2xpc3QpCiAJCQlzc2VxLT5jbHVzdGVyX2xpc3QgPSBwdWJsLT5jbHVzdGVyX2xpc3RfbmV4dCA9IHB1Ymw7CiAJCWVsc2UgewpAQCAtMzM1LDYgKzM0Nyw3IEBACiAJfQogCiAJaWYgKG5vZGUgPT0gdGlwY19vd25fYWRkcikgeworCQlzc2VxLT5ub2RlX2xpc3Rfc2l6ZSsrOwogCQlpZiAoIXNzZXEtPm5vZGVfbGlzdCkKIAkJCXNzZXEtPm5vZGVfbGlzdCA9IHB1YmwtPm5vZGVfbGlzdF9uZXh0ID0gcHVibDsKIAkJZWxzZSB7CkBAIC00MTEsNiArNDI0LDcgQEAKIAl9IGVsc2UgewogCQlzc2VxLT56b25lX2xpc3QgPSBOVUxMOwogCX0KKwlzc2VxLT56b25lX2xpc3Rfc2l6ZS0tOwogCiAJLyogUmVtb3ZlIHB1YmxpY2F0aW9uIGZyb20gY2x1c3RlciBzY29wZSBsaXN0LCBpZiBwcmVzZW50ICovCiAKQEAgLTQzOSw2ICs0NTMsNyBAQAogCQl9IGVsc2UgewogCQkJc3NlcS0+Y2x1c3Rlcl9saXN0ID0gTlVMTDsKIAkJfQorCQlzc2VxLT5jbHVzdGVyX2xpc3Rfc2l6ZS0tOwogCX0KIGVuZF9jbHVzdGVyOgogCkBAIC00NjksNiArNDg0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXNzZXEtPm5vZGVfbGlzdCA9IE5VTEw7CiAJCX0KKwkJc3NlcS0+bm9kZV9saXN0X3NpemUtLTsKIAl9CiBlbmRfbm9kZToKIApAQCAtNzA5LDE1ICs3MjUsMTggQEAKIAogCQlpZiAoc3NlcS0+bG93ZXIgPiB1cHBlcikKIAkJCWJyZWFrOwotCQlwdWJsID0gc3NlcS0+Y2x1c3Rlcl9saXN0OwotCQlpZiAocHVibCAmJiAocHVibC0+c2NvcGUgPD0gbGltaXQpKQorCisJCXB1YmwgPSBzc2VxLT5ub2RlX2xpc3Q7CisJCWlmIChwdWJsKSB7CiAJCQlkbyB7Ci0JCQkJaWYgKHB1YmwtPm5vZGUgPT0gdGlwY19vd25fYWRkcikKKwkJCQlpZiAocHVibC0+c2NvcGUgPD0gbGltaXQpCiAJCQkJCXRpcGNfcG9ydF9saXN0X2FkZChkcG9ydHMsIHB1YmwtPnJlZik7Ci0JCQkJZWxzZQotCQkJCQlyZXMgPSAxOwotCQkJCXB1YmwgPSBwdWJsLT5jbHVzdGVyX2xpc3RfbmV4dDsKLQkJCX0gd2hpbGUgKHB1YmwgIT0gc3NlcS0+Y2x1c3Rlcl9saXN0KTsKKwkJCQlwdWJsID0gcHVibC0+bm9kZV9saXN0X25leHQ7CisJCQl9IHdoaWxlIChwdWJsICE9IHNzZXEtPm5vZGVfbGlzdCk7CisJCX0KKworCQlpZiAoc3NlcS0+Y2x1c3Rlcl9saXN0X3NpemUgIT0gc3NlcS0+bm9kZV9saXN0X3NpemUpCisJCQlyZXMgPSAxOwogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZzZXEtPmxvY2spOwpAQCAtOTA1LDYgKzkyNCw5IEBACiAJc3RydWN0IHN1Yl9zZXEgKnNzZXE7CiAJY2hhciB0eXBlYXJlYVsxMV07CiAKKwlpZiAoc2VxLT5maXJzdF9mcmVlID09IDApCisJCXJldHVybjsKKwogCXNwcmludGYodHlwZWFyZWEsICIlLTEwdSIsIHNlcS0+dHlwZSk7CiAKIAlpZiAoZGVwdGggPT0gMSkgewpAQCAtOTE1LDcgKzkzNyw5IEBACiAJZm9yIChzc2VxID0gc2VxLT5zc2Vxczsgc3NlcSAhPSAmc2VxLT5zc2Vxc1tzZXEtPmZpcnN0X2ZyZWVdOyBzc2VxKyspIHsKIAkJaWYgKChsb3dib3VuZCA8PSBzc2VxLT51cHBlcikgJiYgKHVwYm91bmQgPj0gc3NlcS0+bG93ZXIpKSB7CiAJCQl0aXBjX3ByaW50ZihidWYsICIlcyAiLCB0eXBlYXJlYSk7CisJCQlzcGluX2xvY2tfYmgoJnNlcS0+bG9jayk7CiAJCQlzdWJzZXFfbGlzdChzc2VxLCBidWYsIGRlcHRoLCBpbmRleCk7CisJCQlzcGluX3VubG9ja19iaCgmc2VxLT5sb2NrKTsKIAkJCXNwcmludGYodHlwZWFyZWEsICIlMTBzIiwgIiAiKTsKIAkJfQogCX0KQEAgLTEwNTAsMTUgKzEwNzQsMTIgQEAKIAogaW50IHRpcGNfbmFtZXRibF9pbml0KHZvaWQpCiB7Ci0JaW50IGFycmF5X3NpemUgPSBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpICogdGlwY19uYW1ldGJsX3NpemU7Ci0KLQl0YWJsZS50eXBlcyA9IGt6YWxsb2MoYXJyYXlfc2l6ZSwgR0ZQX0FUT01JQyk7CisJdGFibGUudHlwZXMgPSBrY2FsbG9jKHRpcGNfbmFtZXRibF9zaXplLCBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpLAorCQkJICAgICAgR0ZQX0FUT01JQyk7CiAJaWYgKCF0YWJsZS50eXBlcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl3cml0ZV9sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7CiAJdGFibGUubG9jYWxfcHVibF9jb3VudCA9IDA7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldC5jIGIvbmV0L3RpcGMvbmV0LmMKaW5kZXggYzM5Yzc2Mi4uZWM3YjA0ZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmV0LmMKKysrIGIvbmV0L3RpcGMvbmV0LmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCWlmICghdGlwY19uZXQuem9uZXMpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJldHVybiBUSVBDX09LOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBuZXRfc3RvcCh2b2lkKQpAQCAtMjY2LDcgKzI2Niw3IEBACiAJdGlwY19saW5rX3NlbmQoYnVmLCBkbm9kZSwgbXNnX2xpbmtfc2VsZWN0b3IobXNnKSk7CiB9CiAKLWludCB0aXBjX25ldF9zdGFydCh2b2lkKQoraW50IHRpcGNfbmV0X3N0YXJ0KHUzMiBhZGRyKQogewogCWNoYXIgYWRkcl9zdHJpbmdbMTZdOwogCWludCByZXM7CkBAIC0yNzQsNiArMjc0LDEwIEBACiAJaWYgKHRpcGNfbW9kZSAhPSBUSVBDX05PREVfTU9ERSkKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAorCXRpcGNfc3Vic2NyX3N0b3AoKTsKKwl0aXBjX2NmZ19zdG9wKCk7CisKKwl0aXBjX293bl9hZGRyID0gYWRkcjsKIAl0aXBjX21vZGUgPSBUSVBDX05FVF9NT0RFOwogCXRpcGNfbmFtZWRfcmVpbml0KCk7CiAJdGlwY19wb3J0X3JlaW5pdCgpOwpAQCAtMjg0LDE0ICsyODgsMTQgQEAKIAkgICAgKHJlcyA9IHRpcGNfYmNsaW5rX2luaXQoKSkpIHsKIAkJcmV0dXJuIHJlczsKIAl9Ci0JdGlwY19zdWJzY3Jfc3RvcCgpOwotCXRpcGNfY2ZnX3N0b3AoKTsKKwogCXRpcGNfa19zaWduYWwoKEhhbmRsZXIpdGlwY19zdWJzY3Jfc3RhcnQsIDApOwogCXRpcGNfa19zaWduYWwoKEhhbmRsZXIpdGlwY19jZmdfaW5pdCwgMCk7CisKIAlpbmZvKCJTdGFydGVkIGluIG5ldHdvcmsgbW9kZVxuIik7CiAJaW5mbygiT3duIG5vZGUgYWRkcmVzcyAlcywgbmV0d29yayBpZGVudGl0eSAldVxuIiwKIAkgICAgIGFkZHJfc3RyaW5nX2ZpbGwoYWRkcl9zdHJpbmcsIHRpcGNfb3duX2FkZHIpLCB0aXBjX25ldF9pZCk7Ci0JcmV0dXJuIFRJUENfT0s7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgdGlwY19uZXRfc3RvcCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmggYi9uZXQvdGlwYy9uZXQuaAppbmRleCBhNmEwZTk5Li5kMTU0YWMyIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXQuaAorKysgYi9uZXQvdGlwYy9uZXQuaApAQCAtNTgsNyArNTgsNyBAQAogc3RydWN0IG5vZGUgKnRpcGNfbmV0X3NlbGVjdF9yZW1vdGVfbm9kZSh1MzIgYWRkciwgdTMyIHJlZik7CiB1MzIgdGlwY19uZXRfc2VsZWN0X3JvdXRlcih1MzIgYWRkciwgdTMyIHJlZik7CiAKLWludCB0aXBjX25ldF9zdGFydCh2b2lkKTsKK2ludCB0aXBjX25ldF9zdGFydCh1MzIgYWRkcik7CiB2b2lkIHRpcGNfbmV0X3N0b3Aodm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0bGluay5jIGIvbmV0L3RpcGMvbmV0bGluay5jCmluZGV4IDZhN2Y3YjQuLmMzODcyMTcgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25ldGxpbmsuYworKysgYi9uZXQvdGlwYy9uZXRsaW5rLmMKQEAgLTIsNyArMiw3IEBACiAgKiBuZXQvdGlwYy9uZXRsaW5rLmM6IFRJUEMgY29uZmlndXJhdGlvbiBoYW5kbGluZwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LCBXaW5kIFJpdmVyIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA3LCBXaW5kIFJpdmVyIFN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00NSwxNSArNDUsMTcgQEAKIAlzdHJ1Y3Qgbmxtc2doZHIgKnJlcV9ubGggPSBpbmZvLT5ubGhkcjsKIAlzdHJ1Y3QgdGlwY19nZW5sbXNnaGRyICpyZXFfdXNlcmhkciA9IGluZm8tPnVzZXJoZHI7CiAJaW50IGhkcl9zcGFjZSA9IE5MTVNHX1NQQUNFKEdFTkxfSERSTEVOICsgVElQQ19HRU5MX0hEUkxFTik7CisJdTE2IGNtZDsKIAogCWlmICgocmVxX3VzZXJoZHItPmNtZCAmIDB4QzAwMCkgJiYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSkKLQkJcmVwX2J1ZiA9IHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19OT1RfTkVUX0FETUlOKTsKKwkJY21kID0gVElQQ19DTURfTk9UX05FVF9BRE1JTjsKIAllbHNlCi0JCXJlcF9idWYgPSB0aXBjX2NmZ19kb19jbWQocmVxX3VzZXJoZHItPmRlc3QsCi0JCQkJCSAgcmVxX3VzZXJoZHItPmNtZCwKLQkJCQkJICBOTE1TR19EQVRBKHJlcV9ubGgpICsgR0VOTF9IRFJMRU4gKyBUSVBDX0dFTkxfSERSTEVOLAotCQkJCQkgIE5MTVNHX1BBWUxPQUQocmVxX25saCwgR0VOTF9IRFJMRU4gKyBUSVBDX0dFTkxfSERSTEVOKSwKLQkJCQkJICBoZHJfc3BhY2UpOworCQljbWQgPSByZXFfdXNlcmhkci0+Y21kOworCisJcmVwX2J1ZiA9IHRpcGNfY2ZnX2RvX2NtZChyZXFfdXNlcmhkci0+ZGVzdCwgY21kLAorCQkJTkxNU0dfREFUQShyZXFfbmxoKSArIEdFTkxfSERSTEVOICsgVElQQ19HRU5MX0hEUkxFTiwKKwkJCU5MTVNHX1BBWUxPQUQocmVxX25saCwgR0VOTF9IRFJMRU4gKyBUSVBDX0dFTkxfSERSTEVOKSwKKwkJCWhkcl9zcGFjZSk7CiAKIAlpZiAocmVwX2J1ZikgewogCQlza2JfcHVzaChyZXBfYnVmLCBoZHJfc3BhY2UpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jCmluZGV4IDU5OGY0ZDMuLmVlOTUyYWQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuYworKysgYi9uZXQvdGlwYy9ub2RlLmMKQEAgLTUyLDE2ICs1Miw0MCBAQAogCiBzdHJ1Y3Qgbm9kZSAqdGlwY19ub2RlcyA9IE5VTEw7CS8qIHNvcnRlZCBsaXN0IG9mIG5vZGVzIHdpdGhpbiBjbHVzdGVyICovCiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobm9kZV9jcmVhdGVfbG9jayk7CisKIHUzMiB0aXBjX293bl90YWcgPSAwOwogCisvKioKKyAqIHRpcGNfbm9kZV9jcmVhdGUgLSBjcmVhdGUgbmVpZ2hib3Jpbmcgbm9kZQorICoKKyAqIEN1cnJlbnRseSwgdGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSBuZWlnaGJvciBkaXNjb3ZlcnkgY29kZSwgd2hpY2ggaG9sZHMKKyAqIG5ldF9sb2NrIGZvciByZWFkaW5nIG9ubHkuICBXZSBtdXN0IHRha2Ugbm9kZV9jcmVhdGVfbG9jayB0byBlbnN1cmUgYSBub2RlCisgKiBpc24ndCBjcmVhdGVkIHR3aWNlIGlmIHR3byBkaWZmZXJlbnQgYmVhcmVycyBkaXNjb3ZlciB0aGUgbm9kZSBhdCB0aGUgc2FtZQorICogdGltZS4gIChJdCB3b3VsZCBiZSBwcmVmZXJhYmxlIHRvIHN3aXRjaCB0byBob2xkaW5nIG5ldF9sb2NrIGluIHdyaXRlIG1vZGUsCisgKiBidXQgdGhpcyBpcyBhIG5vbi10cml2aWFsIGNoYW5nZS4pCisgKi8KKwogc3RydWN0IG5vZGUgKnRpcGNfbm9kZV9jcmVhdGUodTMyIGFkZHIpCiB7CiAJc3RydWN0IGNsdXN0ZXIgKmNfcHRyOwogCXN0cnVjdCBub2RlICpuX3B0cjsKIAlzdHJ1Y3Qgbm9kZSAqKmN1cnJfbm9kZTsKIAorCXNwaW5fbG9ja19iaCgmbm9kZV9jcmVhdGVfbG9jayk7CisKKwlmb3IgKG5fcHRyID0gdGlwY19ub2Rlczsgbl9wdHI7IG5fcHRyID0gbl9wdHItPm5leHQpIHsKKwkJaWYgKGFkZHIgPCBuX3B0ci0+YWRkcikKKwkJCWJyZWFrOworCQlpZiAoYWRkciA9PSBuX3B0ci0+YWRkcikgeworCQkJc3Bpbl91bmxvY2tfYmgoJm5vZGVfY3JlYXRlX2xvY2spOworCQkJcmV0dXJuIG5fcHRyOworCQl9CisJfQorCiAJbl9wdHIgPSBremFsbG9jKHNpemVvZigqbl9wdHIpLEdGUF9BVE9NSUMpOwogCWlmICghbl9wdHIpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJm5vZGVfY3JlYXRlX2xvY2spOwogCQl3YXJuKCJOb2RlIGNyZWF0aW9uIGZhaWxlZCwgbm8gbWVtb3J5XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNzEsNiArOTUsNyBAQAogCQljX3B0ciA9IHRpcGNfY2x0cl9jcmVhdGUoYWRkcik7CiAJfQogCWlmICghY19wdHIpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJm5vZGVfY3JlYXRlX2xvY2spOwogCQlrZnJlZShuX3B0cik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTkxLDYgKzExNiw3IEBACiAJCX0KIAl9CiAJKCpjdXJyX25vZGUpID0gbl9wdHI7CisJc3Bpbl91bmxvY2tfYmgoJm5vZGVfY3JlYXRlX2xvY2spOwogCXJldHVybiBuX3B0cjsKIH0KIApAQCAtNTc0LDEyICs2MDAsMTQgQEAKIAlzdHJ1Y3Qgbm9kZSAqbl9wdHI7CiAJdTMyIGNudCA9IDA7CiAKKwlyZWFkX2xvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwogCWZvciAobl9wdHIgPSB0aXBjX25vZGVzOyBuX3B0cjsgbl9wdHIgPSBuX3B0ci0+bmV4dCkgewogCQlpZiAoIWluX3Njb3BlKGRvbWFpbiwgbl9wdHItPmFkZHIpKQogCQkJY29udGludWU7CiAJCWlmICh0aXBjX25vZGVfaXNfdXAobl9wdHIpKQogCQkJY250Kys7CiAJfQorCXJlYWRfdW5sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKIAlyZXR1cm4gY250OwogfQogCkBAIC01OTksMTkgKzYyNywyNiBAQAogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUKIAkJCQkJCSAgICIgKG5ldHdvcmsgYWRkcmVzcykiKTsKIAotCWlmICghdGlwY19ub2RlcykKKwlyZWFkX2xvY2tfYmgoJnRpcGNfbmV0X2xvY2spOworCWlmICghdGlwY19ub2RlcykgeworCQlyZWFkX3VubG9ja19iaCgmdGlwY19uZXRfbG9jayk7CiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7CisJfQogCiAJLyogRm9yIG5vdywgZ2V0IHNwYWNlIGZvciBhbGwgb3RoZXIgbm9kZXMKIAkgICAod2lsbCBuZWVkIHRvIG1vZGlmeSB0aGlzIHdoZW4gc2xhdmUgbm9kZXMgYXJlIHN1cHBvcnRlZCAqLwogCiAJcGF5bG9hZF9zaXplID0gVExWX1NQQUNFKHNpemVvZihub2RlX2luZm8pKSAqICh0aXBjX21heF9ub2RlcyAtIDEpOwotCWlmIChwYXlsb2FkX3NpemUgPiAzMjc2OHUpCisJaWYgKHBheWxvYWRfc2l6ZSA+IDMyNzY4dSkgeworCQlyZWFkX3VubG9ja19iaCgmdGlwY19uZXRfbG9jayk7CiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAogCQkJCQkJICAgIiAodG9vIG1hbnkgbm9kZXMpIik7CisJfQogCWJ1ZiA9IHRpcGNfY2ZnX3JlcGx5X2FsbG9jKHBheWxvYWRfc2l6ZSk7Ci0JaWYgKCFidWYpCisJaWYgKCFidWYpIHsKKwkJcmVhZF91bmxvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwogCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAkvKiBBZGQgVExWcyBmb3IgYWxsIG5vZGVzIGluIHNjb3BlICovCiAKQEAgLTYyNCw2ICs2NTksNyBAQAogCQkJCSAgICAmbm9kZV9pbmZvLCBzaXplb2Yobm9kZV9pbmZvKSk7CiAJfQogCisJcmVhZF91bmxvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwogCXJldHVybiBidWY7CiB9CiAKQEAgLTY0NiwxNiArNjgyLDIyIEBACiAJaWYgKHRpcGNfbW9kZSAhPSBUSVBDX05FVF9NT0RFKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfbm9uZSgpOwogCisJcmVhZF9sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKKwogCS8qIEdldCBzcGFjZSBmb3IgYWxsIHVuaWNhc3QgbGlua3MgKyBtdWx0aWNhc3QgbGluayAqLwogCiAJcGF5bG9hZF9zaXplID0gVExWX1NQQUNFKHNpemVvZihsaW5rX2luZm8pKSAqCiAJCSh0aXBjX25ldC56b25lc1t0aXBjX3pvbmUodGlwY19vd25fYWRkcildLT5saW5rcyArIDEpOwotCWlmIChwYXlsb2FkX3NpemUgPiAzMjc2OHUpCisJaWYgKHBheWxvYWRfc2l6ZSA+IDMyNzY4dSkgeworCQlyZWFkX3VubG9ja19iaCgmdGlwY19uZXRfbG9jayk7CiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAogCQkJCQkJICAgIiAodG9vIG1hbnkgbGlua3MpIik7CisJfQogCWJ1ZiA9IHRpcGNfY2ZnX3JlcGx5X2FsbG9jKHBheWxvYWRfc2l6ZSk7Ci0JaWYgKCFidWYpCisJaWYgKCFidWYpIHsKKwkJcmVhZF91bmxvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwogCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAkvKiBBZGQgVExWIGZvciBicm9hZGNhc3QgbGluayAqLwogCkBAIC02NzEsNiArNzEzLDcgQEAKIAogCQlpZiAoIWluX3Njb3BlKGRvbWFpbiwgbl9wdHItPmFkZHIpKQogCQkJY29udGludWU7CisJCXRpcGNfbm9kZV9sb2NrKG5fcHRyKTsKIAkJZm9yIChpID0gMDsgaSA8IE1BWF9CRUFSRVJTOyBpKyspIHsKIAkJCWlmICghbl9wdHItPmxpbmtzW2ldKQogCQkJCWNvbnRpbnVlOwpAQCAtNjgwLDcgKzcyMyw5IEBACiAJCQl0aXBjX2NmZ19hcHBlbmRfdGx2KGJ1ZiwgVElQQ19UTFZfTElOS19JTkZPLAogCQkJCQkgICAgJmxpbmtfaW5mbywgc2l6ZW9mKGxpbmtfaW5mbykpOwogCQl9CisJCXRpcGNfbm9kZV91bmxvY2sobl9wdHIpOwogCX0KIAorCXJlYWRfdW5sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKIAlyZXR1cm4gYnVmOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvcG9ydC5jIGIvbmV0L3RpcGMvcG9ydC5jCmluZGV4IDJmNTgwNjQuLmU3MGQyN2UgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3BvcnQuYworKysgYi9uZXQvdGlwYy9wb3J0LmMKQEAgLTIsNyArMiw3IEBACiAgKiBuZXQvdGlwYy9wb3J0LmM6IFRJUEMgcG9ydCBjb2RlCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTkyLTIwMDcsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNywgV2luZCBSaXZlciBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCwgV2luZCBSaXZlciBTeXN0ZW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjExLDEyICsyMTEsMTIgQEAKIH0KIAogLyoqCi0gKiB0aXBjX2NyZWF0ZXBvcnRfcmF3IC0gY3JlYXRlIGEgbmF0aXZlIFRJUEMgcG9ydAorICogdGlwY19jcmVhdGVwb3J0X3JhdyAtIGNyZWF0ZSBhIGdlbmVyaWMgVElQQyBwb3J0CiAgKgotICogUmV0dXJucyBsb2NhbCBwb3J0IHJlZmVyZW5jZQorICogUmV0dXJucyBwb2ludGVyIHRvIChsb2NrZWQpIFRJUEMgcG9ydCwgb3IgTlVMTCBpZiB1bmFibGUgdG8gY3JlYXRlIGl0CiAgKi8KIAotdTMyIHRpcGNfY3JlYXRlcG9ydF9yYXcodm9pZCAqdXNyX2hhbmRsZSwKK3N0cnVjdCB0aXBjX3BvcnQgKnRpcGNfY3JlYXRlcG9ydF9yYXcodm9pZCAqdXNyX2hhbmRsZSwKIAkJCXUzMiAoKmRpc3BhdGNoZXIpKHN0cnVjdCB0aXBjX3BvcnQgKiwgc3RydWN0IHNrX2J1ZmYgKiksCiAJCQl2b2lkICgqd2FrZXVwKShzdHJ1Y3QgdGlwY19wb3J0ICopLAogCQkJY29uc3QgdTMyIGltcG9ydGFuY2UpCkBAIC0yMjgsMjYgKzIyOCwyMSBAQAogCXBfcHRyID0ga3phbGxvYyhzaXplb2YoKnBfcHRyKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFwX3B0cikgewogCQl3YXJuKCJQb3J0IGNyZWF0aW9uIGZhaWxlZCwgbm8gbWVtb3J5XG4iKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCX0KIAlyZWYgPSB0aXBjX3JlZl9hY3F1aXJlKHBfcHRyLCAmcF9wdHItPnB1YmwubG9jayk7CiAJaWYgKCFyZWYpIHsKIAkJd2FybigiUG9ydCBjcmVhdGlvbiBmYWlsZWQsIHJlZmVyZW5jZSB0YWJsZSBleGhhdXN0ZWRcbiIpOwogCQlrZnJlZShwX3B0cik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQl0aXBjX3BvcnRfbG9jayhyZWYpOwogCXBfcHRyLT5wdWJsLnVzcl9oYW5kbGUgPSB1c3JfaGFuZGxlOwogCXBfcHRyLT5wdWJsLm1heF9wa3QgPSBNQVhfUEtUX0RFRkFVTFQ7CiAJcF9wdHItPnB1YmwucmVmID0gcmVmOwogCW1zZyA9ICZwX3B0ci0+cHVibC5waGRyOwotCW1zZ19pbml0KG1zZywgVElQQ19MT1dfSU1QT1JUQU5DRSwgVElQQ19OQU1FRF9NU0csIFRJUENfT0ssIExPTkdfSF9TSVpFLAotCQkgMCk7Ci0JbXNnX3NldF9vcmlnbm9kZShtc2csIHRpcGNfb3duX2FkZHIpOwotCW1zZ19zZXRfcHJldm5vZGUobXNnLCB0aXBjX293bl9hZGRyKTsKKwltc2dfaW5pdChtc2csIGltcG9ydGFuY2UsIFRJUENfTkFNRURfTVNHLCBMT05HX0hfU0laRSwgMCk7CiAJbXNnX3NldF9vcmlncG9ydChtc2csIHJlZik7Ci0JbXNnX3NldF9pbXBvcnRhbmNlKG1zZyxpbXBvcnRhbmNlKTsKIAlwX3B0ci0+bGFzdF9pbl9zZXFubyA9IDQxOwogCXBfcHRyLT5zZW50ID0gMTsKIAlJTklUX0xJU1RfSEVBRCgmcF9wdHItPndhaXRfbGlzdCk7CkBAIC0yNjIsOCArMjU3LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmcF9wdHItPnBvcnRfbGlzdCk7CiAJbGlzdF9hZGRfdGFpbCgmcF9wdHItPnBvcnRfbGlzdCwgJnBvcnRzKTsKIAlzcGluX3VubG9ja19iaCgmdGlwY19wb3J0X2xpc3RfbG9jayk7Ci0JdGlwY19wb3J0X3VubG9jayhwX3B0cik7Ci0JcmV0dXJuIHJlZjsKKwlyZXR1cm4gJihwX3B0ci0+cHVibCk7CiB9CiAKIGludCB0aXBjX2RlbGV0ZXBvcnQodTMyIHJlZikKQEAgLTI5Nyw3ICsyOTEsNyBAQAogCWtmcmVlKHBfcHRyKTsKIAlkYmcoIkRlbGV0ZWQgcG9ydCAldVxuIiwgcmVmKTsKIAl0aXBjX25ldF9yb3V0ZV9tc2coYnVmKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0zNDIsNyArMzM2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJKmlzdW5yZWxpYWJsZSA9IHBvcnRfdW5yZWxpYWJsZShwX3B0cik7CiAJdGlwY19wb3J0X3VubG9jayhwX3B0cik7Ci0JcmV0dXJuIFRJUENfT0s7CisJcmV0dXJuIDA7CiB9CiAKIGludCB0aXBjX3NldF9wb3J0dW5yZWxpYWJsZSh1MzIgcmVmLCB1bnNpZ25lZCBpbnQgaXN1bnJlbGlhYmxlKQpAQCAtMzU0LDcgKzM0OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCW1zZ19zZXRfc3JjX2Ryb3BwYWJsZSgmcF9wdHItPnB1YmwucGhkciwgKGlzdW5yZWxpYWJsZSAhPSAwKSk7CiAJdGlwY19wb3J0X3VubG9jayhwX3B0cik7Ci0JcmV0dXJuIFRJUENfT0s7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcG9ydF91bnJldHVybmFibGUoc3RydWN0IHBvcnQgKnBfcHRyKQpAQCAtMzcxLDcgKzM2NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCSppc3VucmVqZWN0YWJsZSA9IHBvcnRfdW5yZXR1cm5hYmxlKHBfcHRyKTsKIAl0aXBjX3BvcnRfdW5sb2NrKHBfcHRyKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHRpcGNfc2V0X3BvcnR1bnJldHVybmFibGUodTMyIHJlZiwgdW5zaWduZWQgaW50IGlzdW5yZWplY3RhYmxlKQpAQCAtMzgzLDcgKzM3Nyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCW1zZ19zZXRfZGVzdF9kcm9wcGFibGUoJnBfcHRyLT5wdWJsLnBoZHIsIChpc3VucmVqZWN0YWJsZSAhPSAwKSk7CiAJdGlwY19wb3J0X3VubG9jayhwX3B0cik7Ci0JcmV0dXJuIFRJUENfT0s7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC00MDIsMTAgKzM5NiwxMCBAQAogCWJ1ZiA9IGJ1Zl9hY3F1aXJlKExPTkdfSF9TSVpFKTsKIAlpZiAoYnVmKSB7CiAJCW1zZyA9IGJ1Zl9tc2coYnVmKTsKLQkJbXNnX2luaXQobXNnLCB1c3IsIHR5cGUsIGVyciwgTE9OR19IX1NJWkUsIGRlc3Rub2RlKTsKKwkJbXNnX2luaXQobXNnLCB1c3IsIHR5cGUsIExPTkdfSF9TSVpFLCBkZXN0bm9kZSk7CisJCW1zZ19zZXRfZXJyY29kZShtc2csIGVycik7CiAJCW1zZ19zZXRfZGVzdHBvcnQobXNnLCBkZXN0cG9ydCk7CiAJCW1zZ19zZXRfb3JpZ3BvcnQobXNnLCBvcmlncG9ydCk7Ci0JCW1zZ19zZXRfZGVzdG5vZGUobXNnLCBkZXN0bm9kZSk7CiAJCW1zZ19zZXRfb3JpZ25vZGUobXNnLCBvcmlnbm9kZSk7CiAJCW1zZ19zZXRfdHJhbnNwX3NlcW5vKG1zZywgc2Vxbm8pOwogCQltc2dfc2V0X21zZ2NudChtc2csIGFjayk7CkBAIC00NDYsMTcgKzQ0MCwxOSBAQAogCQlyZXR1cm4gZGF0YV9zejsKIAl9CiAJcm1zZyA9IGJ1Zl9tc2cocmJ1Zik7Ci0JbXNnX2luaXQocm1zZywgaW1wLCBtc2dfdHlwZShtc2cpLCBlcnIsIGhkcl9zeiwgbXNnX29yaWdub2RlKG1zZykpOworCW1zZ19pbml0KHJtc2csIGltcCwgbXNnX3R5cGUobXNnKSwgaGRyX3N6LCBtc2dfb3JpZ25vZGUobXNnKSk7CisJbXNnX3NldF9lcnJjb2RlKHJtc2csIGVycik7CiAJbXNnX3NldF9kZXN0cG9ydChybXNnLCBtc2dfb3JpZ3BvcnQobXNnKSk7Ci0JbXNnX3NldF9wcmV2bm9kZShybXNnLCB0aXBjX293bl9hZGRyKTsKIAltc2dfc2V0X29yaWdwb3J0KHJtc2csIG1zZ19kZXN0cG9ydChtc2cpKTsKLQlpZiAobXNnX3Nob3J0KG1zZykpCisJaWYgKG1zZ19zaG9ydChtc2cpKSB7CiAJCW1zZ19zZXRfb3JpZ25vZGUocm1zZywgdGlwY19vd25fYWRkcik7Ci0JZWxzZQorCQkvKiBsZWF2ZSBuYW1lIHR5cGUgJiBpbnN0YW5jZSBhcyB6ZXJvZXMgKi8KKwl9IGVsc2UgewogCQltc2dfc2V0X29yaWdub2RlKHJtc2csIG1zZ19kZXN0bm9kZShtc2cpKTsKKwkJbXNnX3NldF9uYW1ldHlwZShybXNnLCBtc2dfbmFtZXR5cGUobXNnKSk7CisJCW1zZ19zZXRfbmFtZWluc3Qocm1zZywgbXNnX25hbWVpbnN0KG1zZykpOworCX0KIAltc2dfc2V0X3NpemUocm1zZywgZGF0YV9zeiArIGhkcl9zeik7Ci0JbXNnX3NldF9uYW1ldHlwZShybXNnLCBtc2dfbmFtZXR5cGUobXNnKSk7Ci0JbXNnX3NldF9uYW1laW5zdChybXNnLCBtc2dfbmFtZWluc3QobXNnKSk7CiAJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGFfb2Zmc2V0KHJidWYsIGhkcl9zeiwgbXNnX2RhdGEobXNnKSwgZGF0YV9zeik7CiAKIAkvKiBzZW5kIHNlbGYtYWJvcnQgbWVzc2FnZSB3aGVuIHJlamVjdGluZyBvbiBhIGNvbm5lY3RlZCBwb3J0ICovCkBAIC03NzgsNiArNzc0LDcgQEAKIAkJbXNnID0gJnBfcHRyLT5wdWJsLnBoZHI7CiAJCWlmIChtc2dfb3JpZ25vZGUobXNnKSA9PSB0aXBjX293bl9hZGRyKQogCQkJYnJlYWs7CisJCW1zZ19zZXRfcHJldm5vZGUobXNnLCB0aXBjX293bl9hZGRyKTsKIAkJbXNnX3NldF9vcmlnbm9kZShtc2csIHRpcGNfb3duX2FkZHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmdGlwY19wb3J0X2xpc3RfbG9jayk7CkBAIC04MzgsMTcgKzgzNSwxNCBAQAogCQkJCXUzMiBwZWVyX25vZGUgPSBwb3J0X3BlZXJub2RlKHBfcHRyKTsKIAogCQkJCXRpcGNfcG9ydF91bmxvY2socF9wdHIpOwotCQkJCWlmICh1bmxpa2VseSghY29ubmVjdGVkKSkgewotCQkJCQlpZiAodW5saWtlbHkocHVibGlzaGVkKSkKLQkJCQkJCWdvdG8gcmVqZWN0OwotCQkJCQl0aXBjX2Nvbm5lY3QycG9ydChkcmVmLCZvcmlnKTsKLQkJCQl9Ci0JCQkJaWYgKHVubGlrZWx5KG1zZ19vcmlncG9ydChtc2cpICE9IHBlZXJfcG9ydCkpCi0JCQkJCWdvdG8gcmVqZWN0OwotCQkJCWlmICh1bmxpa2VseShtc2dfb3JpZ25vZGUobXNnKSAhPSBwZWVyX25vZGUpKQotCQkJCQlnb3RvIHJlamVjdDsKIAkJCQlpZiAodW5saWtlbHkoIWNiKSkKIAkJCQkJZ290byByZWplY3Q7CisJCQkJaWYgKHVubGlrZWx5KCFjb25uZWN0ZWQpKSB7CisJCQkJCWlmICh0aXBjX2Nvbm5lY3QycG9ydChkcmVmLCAmb3JpZykpCisJCQkJCQlnb3RvIHJlamVjdDsKKwkJCQl9IGVsc2UgaWYgKChtc2dfb3JpZ3BvcnQobXNnKSAhPSBwZWVyX3BvcnQpIHx8CisJCQkJCSAgIChtc2dfb3JpZ25vZGUobXNnKSAhPSBwZWVyX25vZGUpKQorCQkJCQlnb3RvIHJlamVjdDsKIAkJCQlpZiAodW5saWtlbHkoKytwX3B0ci0+cHVibC5jb25uX3VuYWNrZWQgPj0KIAkJCQkJICAgICBUSVBDX0ZMT1dfQ09OVFJPTF9XSU4pKQogCQkJCQl0aXBjX2Fja25vd2xlZGdlKGRyZWYsCkBAIC04NjIsOSArODU2LDcgQEAKIAkJCQl0aXBjX21zZ19ldmVudCBjYiA9IHVwX3B0ci0+bXNnX2NiOwogCiAJCQkJdGlwY19wb3J0X3VubG9jayhwX3B0cik7Ci0JCQkJaWYgKHVubGlrZWx5KGNvbm5lY3RlZCkpCi0JCQkJCWdvdG8gcmVqZWN0OwotCQkJCWlmICh1bmxpa2VseSghY2IpKQorCQkJCWlmICh1bmxpa2VseSghY2IgfHwgY29ubmVjdGVkKSkKIAkJCQkJZ290byByZWplY3Q7CiAJCQkJc2tiX3B1bGwoYnVmLCBtc2dfaGRyX3N6KG1zZykpOwogCQkJCWNiKHVzcl9oYW5kbGUsIGRyZWYsICZidWYsIG1zZ19kYXRhKG1zZyksCkBAIC04NzcsMTEgKzg2OSw3IEBACiAJCQkJdGlwY19uYW1lZF9tc2dfZXZlbnQgY2IgPSB1cF9wdHItPm5hbWVkX21zZ19jYjsKIAogCQkJCXRpcGNfcG9ydF91bmxvY2socF9wdHIpOwotCQkJCWlmICh1bmxpa2VseShjb25uZWN0ZWQpKQotCQkJCQlnb3RvIHJlamVjdDsKLQkJCQlpZiAodW5saWtlbHkoIWNiKSkKLQkJCQkJZ290byByZWplY3Q7Ci0JCQkJaWYgKHVubGlrZWx5KCFwdWJsaXNoZWQpKQorCQkJCWlmICh1bmxpa2VseSghY2IgfHwgY29ubmVjdGVkIHx8ICFwdWJsaXNoZWQpKQogCQkJCQlnb3RvIHJlamVjdDsKIAkJCQlkc2VxLnR5cGUgPSAgbXNnX25hbWV0eXBlKG1zZyk7CiAJCQkJZHNlcS5sb3dlciA9IG1zZ19uYW1laW5zdChtc2cpOwpAQCAtOTA4LDExICs4OTYsMTAgQEAKIAkJCQl1MzIgcGVlcl9ub2RlID0gcG9ydF9wZWVybm9kZShwX3B0cik7CiAKIAkJCQl0aXBjX3BvcnRfdW5sb2NrKHBfcHRyKTsKLQkJCQlpZiAoIWNvbm5lY3RlZCB8fCAhY2IpCisJCQkJaWYgKCFjYiB8fCAhY29ubmVjdGVkKQogCQkJCQlicmVhazsKLQkJCQlpZiAobXNnX29yaWdwb3J0KG1zZykgIT0gcGVlcl9wb3J0KQotCQkJCQlicmVhazsKLQkJCQlpZiAobXNnX29yaWdub2RlKG1zZykgIT0gcGVlcl9ub2RlKQorCQkJCWlmICgobXNnX29yaWdwb3J0KG1zZykgIT0gcGVlcl9wb3J0KSB8fAorCQkJCSAgICAobXNnX29yaWdub2RlKG1zZykgIT0gcGVlcl9ub2RlKSkKIAkJCQkJYnJlYWs7CiAJCQkJdGlwY19kaXNjb25uZWN0KGRyZWYpOwogCQkJCXNrYl9wdWxsKGJ1ZiwgbXNnX2hkcl9zeihtc2cpKTsKQEAgLTkyNCw3ICs5MTEsNyBAQAogCQkJCXRpcGNfbXNnX2Vycl9ldmVudCBjYiA9IHVwX3B0ci0+ZXJyX2NiOwogCiAJCQkJdGlwY19wb3J0X3VubG9jayhwX3B0cik7Ci0JCQkJaWYgKGNvbm5lY3RlZCB8fCAhY2IpCisJCQkJaWYgKCFjYiB8fCBjb25uZWN0ZWQpCiAJCQkJCWJyZWFrOwogCQkJCXNrYl9wdWxsKGJ1ZiwgbXNnX2hkcl9zeihtc2cpKTsKIAkJCQljYih1c3JfaGFuZGxlLCBkcmVmLCAmYnVmLCBtc2dfZGF0YShtc2cpLApAQCAtOTM3LDcgKzkyNCw3IEBACiAJCQkJCXVwX3B0ci0+bmFtZWRfZXJyX2NiOwogCiAJCQkJdGlwY19wb3J0X3VubG9jayhwX3B0cik7Ci0JCQkJaWYgKGNvbm5lY3RlZCB8fCAhY2IpCisJCQkJaWYgKCFjYiB8fCBjb25uZWN0ZWQpCiAJCQkJCWJyZWFrOwogCQkJCWRzZXEudHlwZSA9ICBtc2dfbmFtZXR5cGUobXNnKTsKIAkJCQlkc2VxLmxvd2VyID0gbXNnX25hbWVpbnN0KG1zZyk7CkBAIC05NzYsNyArOTYzLDcgQEAKIAkJdGlwY19rX3NpZ25hbCgoSGFuZGxlcilwb3J0X2Rpc3BhdGNoZXJfc2lnaCwgMCk7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTEwNTMsMTUgKzEwNDAsMTQgQEAKIHsKIAlzdHJ1Y3QgdXNlcl9wb3J0ICp1cF9wdHI7CiAJc3RydWN0IHBvcnQgKnBfcHRyOwotCXUzMiByZWY7CiAKIAl1cF9wdHIgPSBrbWFsbG9jKHNpemVvZigqdXBfcHRyKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCF1cF9wdHIpIHsKIAkJd2FybigiUG9ydCBjcmVhdGlvbiBmYWlsZWQsIG5vIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlyZWYgPSB0aXBjX2NyZWF0ZXBvcnRfcmF3KE5VTEwsIHBvcnRfZGlzcGF0Y2hlciwgcG9ydF93YWtldXAsIGltcG9ydGFuY2UpOwotCXBfcHRyID0gdGlwY19wb3J0X2xvY2socmVmKTsKKwlwX3B0ciA9IChzdHJ1Y3QgcG9ydCAqKXRpcGNfY3JlYXRlcG9ydF9yYXcoTlVMTCwgcG9ydF9kaXNwYXRjaGVyLAorCQkJCQkJICAgcG9ydF93YWtldXAsIGltcG9ydGFuY2UpOwogCWlmICghcF9wdHIpIHsKIAkJa2ZyZWUodXBfcHRyKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDgxLDE2ICsxMDY3LDE1IEBACiAJSU5JVF9MSVNUX0hFQUQoJnVwX3B0ci0+dXBvcnRfbGlzdCk7CiAJdGlwY19yZWdfYWRkX3BvcnQodXBfcHRyKTsKIAkqcG9ydHJlZiA9IHBfcHRyLT5wdWJsLnJlZjsKLQlkYmcoIiB0aXBjX2NyZWF0ZXBvcnQ6ICV4IHdpdGggcmVmICV1XG4iLCBwX3B0ciwgcF9wdHItPnB1YmwucmVmKTsKIAl0aXBjX3BvcnRfdW5sb2NrKHBfcHRyKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHRpcGNfb3duaWRlbnRpdHkodTMyIHJlZiwgc3RydWN0IHRpcGNfcG9ydGlkICppZCkKIHsKIAlpZC0+cmVmID0gcmVmOwogCWlkLT5ub2RlID0gdGlwY19vd25fYWRkcjsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHRpcGNfcG9ydGltcG9ydGFuY2UodTMyIHJlZiwgdW5zaWduZWQgaW50ICppbXBvcnRhbmNlKQpAQCAtMTEwMiw3ICsxMDg3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJKmltcG9ydGFuY2UgPSAodW5zaWduZWQgaW50KW1zZ19pbXBvcnRhbmNlKCZwX3B0ci0+cHVibC5waGRyKTsKIAl0aXBjX3BvcnRfdW5sb2NrKHBfcHRyKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHRpcGNfc2V0X3BvcnRpbXBvcnRhbmNlKHUzMiByZWYsIHVuc2lnbmVkIGludCBpbXApCkBAIC0xMTE3LDcgKzExMDIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAltc2dfc2V0X2ltcG9ydGFuY2UoJnBfcHRyLT5wdWJsLnBoZHIsICh1MzIpaW1wKTsKIAl0aXBjX3BvcnRfdW5sb2NrKHBfcHRyKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0xMTUyLDcgKzExMzcsNyBAQAogCQlsaXN0X2FkZCgmcHVibC0+cHBvcnRfbGlzdCwgJnBfcHRyLT5wdWJsaWNhdGlvbnMpOwogCQlwX3B0ci0+cHViX2NvdW50Kys7CiAJCXBfcHRyLT5wdWJsLnB1Ymxpc2hlZCA9IDE7Ci0JCXJlcyA9IFRJUENfT0s7CisJCXJlcyA9IDA7CiAJfQogZXhpdDoKIAl0aXBjX3BvcnRfdW5sb2NrKHBfcHRyKTsKQEAgLTExNzUsNyArMTE2MCw3IEBACiAJCQl0aXBjX25hbWV0Ymxfd2l0aGRyYXcocHVibC0+dHlwZSwgcHVibC0+bG93ZXIsCiAJCQkJCSAgICAgIHB1YmwtPnJlZiwgcHVibC0+a2V5KTsKIAkJfQotCQlyZXMgPSBUSVBDX09LOworCQlyZXMgPSAwOwogCX0gZWxzZSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdWJsLCB0cHVibCwKIAkJCQkJICZwX3B0ci0+cHVibGljYXRpb25zLCBwcG9ydF9saXN0KSB7CkBAIC0xMTg5LDcgKzExNzQsNyBAQAogCQkJCWJyZWFrOwogCQkJdGlwY19uYW1ldGJsX3dpdGhkcmF3KHB1YmwtPnR5cGUsIHB1YmwtPmxvd2VyLAogCQkJCQkgICAgICBwdWJsLT5yZWYsIHB1YmwtPmtleSk7Ci0JCQlyZXMgPSBUSVBDX09LOworCQkJcmVzID0gMDsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTIzMyw3ICsxMjE4LDcgQEAKIAl0aXBjX25vZGVzdWJfc3Vic2NyaWJlKCZwX3B0ci0+c3Vic2NyaXB0aW9uLHBlZXItPm5vZGUsCiAJCQkgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpcmVmLAogCQkJICAobmV0X2V2X2hhbmRsZXIpcG9ydF9oYW5kbGVfbm9kZV9kb3duKTsKLQlyZXMgPSBUSVBDX09LOworCXJlcyA9IDA7CiBleGl0OgogCXRpcGNfcG9ydF91bmxvY2socF9wdHIpOwogCXBfcHRyLT5wdWJsLm1heF9wa3QgPSB0aXBjX2xpbmtfZ2V0X21heF9wa3QocGVlci0+bm9kZSwgcmVmKTsKQEAgLTEyNTUsNyArMTI0MCw3IEBACiAJCS8qIGxldCB0aW1lciBleHBpcmUgb24gaXQncyBvd24gdG8gYXZvaWQgZGVhZGxvY2shICovCiAJCXRpcGNfbm9kZXN1Yl91bnN1YnNjcmliZSgKIAkJCSYoKHN0cnVjdCBwb3J0ICopdHBfcHRyKS0+c3Vic2NyaXB0aW9uKTsKLQkJcmVzID0gVElQQ19PSzsKKwkJcmVzID0gMDsKIAl9IGVsc2UgewogCQlyZXMgPSAtRU5PVENPTk47CiAJfQpAQCAtMTMyMCw3ICsxMzA1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJKmlzY29ubmVjdGVkID0gcF9wdHItPnB1YmwuY29ubmVjdGVkOwogCXRpcGNfcG9ydF91bmxvY2socF9wdHIpOwotCXJldHVybiBUSVBDX09LOworCXJldHVybiAwOwogfQogCiBpbnQgdGlwY19wZWVyKHUzMiByZWYsIHN0cnVjdCB0aXBjX3BvcnRpZCAqcGVlcikKQEAgLTEzMzQsNyArMTMxOSw3IEBACiAJaWYgKHBfcHRyLT5wdWJsLmNvbm5lY3RlZCkgewogCQlwZWVyLT5yZWYgPSBwb3J0X3BlZXJwb3J0KHBfcHRyKTsKIAkJcGVlci0+bm9kZSA9IHBvcnRfcGVlcm5vZGUocF9wdHIpOwotCQlyZXMgPSBUSVBDX09LOworCQlyZXMgPSAwOwogCX0gZWxzZQogCQlyZXMgPSAtRU5PVENPTk47CiAJdGlwY19wb3J0X3VubG9jayhwX3B0cik7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9yZWYuYyBiL25ldC90aXBjL3JlZi5jCmluZGV4IDg5Y2JhYjIuLjQxNGZjMzRiIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9yZWYuYworKysgYi9uZXQvdGlwYy9yZWYuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJdGlwY19yZWZfdGFibGUuaW5kZXhfbWFzayA9IGFjdHVhbF9zaXplIC0gMTsKIAl0aXBjX3JlZl90YWJsZS5zdGFydF9tYXNrID0gc3RhcnQgJiB+dGlwY19yZWZfdGFibGUuaW5kZXhfbWFzazsKIAotCXJldHVybiBUSVBDX09LOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE0Miw5ICsxNDIsMTMgQEAKIC8qKgogICogdGlwY19yZWZfYWNxdWlyZSAtIGNyZWF0ZSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0CiAgKgotICogUmV0dXJuIGEgdW5pcXVlIHJlZmVyZW5jZSB2YWx1ZSB3aGljaCBjYW4gYmUgdHJhbnNsYXRlZCBiYWNrIHRvIHRoZSBwb2ludGVyCi0gKiAnb2JqZWN0JyBhdCBhIGxhdGVyIHRpbWUuICBBbHNvLCBwYXNzIGJhY2sgYSBwb2ludGVyIHRvIHRoZSBsb2NrIHByb3RlY3RpbmcKLSAqIHRoZSBvYmplY3QsIGJ1dCB3aXRob3V0IGxvY2tpbmcgaXQuCisgKiBSZWdpc3RlciBhbiBvYmplY3QgcG9pbnRlciBpbiByZWZlcmVuY2UgdGFibGUgYW5kIGxvY2sgdGhlIG9iamVjdC4KKyAqIFJldHVybnMgYSB1bmlxdWUgcmVmZXJlbmNlIHZhbHVlIHRoYXQgaXMgdXNlZCBmcm9tIHRoZW4gb24gdG8gcmV0cmlldmUgdGhlCisgKiBvYmplY3QgcG9pbnRlciwgb3IgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlIG9iamVjdCBoYXMgYmVlbiBkZXJlZ2lzdGVyZWQuCisgKgorICogTm90ZTogVGhlIG9iamVjdCBpcyByZXR1cm5lZCBpbiB0aGUgbG9ja2VkIHN0YXRlIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4KKyAqIHJlZ2lzdGVyIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIG9iamVjdCwgd2l0aG91dCBydW5uaW5nIHRoZSByaXNrIHRoYXQKKyAqIHRoZSBvYmplY3Qgd2lsbCBiZSBhY2Nlc3NlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuCiAgKi8KIAogdTMyIHRpcGNfcmVmX2FjcXVpcmUodm9pZCAqb2JqZWN0LCBzcGlubG9ja190ICoqbG9jaykKQEAgLTE3OCwxMyArMTgyLDEzIEBACiAJCXJlZiA9IChuZXh0X3BsdXNfdXBwZXIgJiB+aW5kZXhfbWFzaykgKyBpbmRleDsKIAkJZW50cnktPnJlZiA9IHJlZjsKIAkJZW50cnktPm9iamVjdCA9IG9iamVjdDsKLQkJc3Bpbl91bmxvY2tfYmgoJmVudHJ5LT5sb2NrKTsKIAkJKmxvY2sgPSAmZW50cnktPmxvY2s7CiAJfQogCWVsc2UgaWYgKHRpcGNfcmVmX3RhYmxlLmluaXRfcG9pbnQgPCB0aXBjX3JlZl90YWJsZS5jYXBhY2l0eSkgewogCQlpbmRleCA9IHRpcGNfcmVmX3RhYmxlLmluaXRfcG9pbnQrKzsKIAkJZW50cnkgPSAmKHRpcGNfcmVmX3RhYmxlLmVudHJpZXNbaW5kZXhdKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmVudHJ5LT5sb2NrKTsKKwkJc3Bpbl9sb2NrX2JoKCZlbnRyeS0+bG9jayk7CiAJCXJlZiA9IHRpcGNfcmVmX3RhYmxlLnN0YXJ0X21hc2sgKyBpbmRleDsKIAkJZW50cnktPnJlZiA9IHJlZjsKIAkJZW50cnktPm9iamVjdCA9IG9iamVjdDsKZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmMKaW5kZXggMjMwZjljYS4uMTg0ODY5MyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvc29ja2V0LmMKKysrIGIvbmV0L3RpcGMvc29ja2V0LmMKQEAgLTIsNyArMiw3IEBACiAgKiBuZXQvdGlwYy9zb2NrZXQuYzogVElQQyBzb2NrZXQgQVBJCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNywgV2luZCBSaXZlciBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCwgV2luZCBSaXZlciBTeXN0ZW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjMsNiArNjMsNyBAQAogc3RydWN0IHRpcGNfc29jayB7CiAJc3RydWN0IHNvY2sgc2s7CiAJc3RydWN0IHRpcGNfcG9ydCAqcDsKKwlzdHJ1Y3QgdGlwY19wb3J0aWQgcGVlcl9uYW1lOwogfTsKIAogI2RlZmluZSB0aXBjX3NrKHNrKSAoKHN0cnVjdCB0aXBjX3NvY2sgKikoc2spKQpAQCAtMTg4LDcgKzE4OSw3IEBACiAJY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzOwogCXNvY2tldF9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3Qgc29jayAqc2s7Ci0JdTMyIHBvcnRyZWY7CisJc3RydWN0IHRpcGNfcG9ydCAqdHBfcHRyOwogCiAJLyogVmFsaWRhdGUgYXJndW1lbnRzICovCiAKQEAgLTIyNCw5ICsyMjUsOSBAQAogCiAJLyogQWxsb2NhdGUgVElQQyBwb3J0IGZvciBzb2NrZXQgdG8gdXNlICovCiAKLQlwb3J0cmVmID0gdGlwY19jcmVhdGVwb3J0X3JhdyhzaywgJmRpc3BhdGNoLCAmd2FrZXVwZGlzcGF0Y2gsCi0JCQkJICAgICAgVElQQ19MT1dfSU1QT1JUQU5DRSk7Ci0JaWYgKHVubGlrZWx5KHBvcnRyZWYgPT0gMCkpIHsKKwl0cF9wdHIgPSB0aXBjX2NyZWF0ZXBvcnRfcmF3KHNrLCAmZGlzcGF0Y2gsICZ3YWtldXBkaXNwYXRjaCwKKwkJCQkgICAgIFRJUENfTE9XX0lNUE9SVEFOQ0UpOworCWlmICh1bmxpa2VseSghdHBfcHRyKSkgewogCQlza19mcmVlKHNrKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMjM5LDEyICsyNDAsMTQgQEAKIAlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CiAJc2stPnNrX3JjdnRpbWVvID0gbXNlY3NfdG9famlmZmllcyhDT05OX1RJTUVPVVRfREVGQVVMVCk7CiAJc2stPnNrX2JhY2tsb2dfcmN2ID0gYmFja2xvZ19yY3Y7Ci0JdGlwY19zayhzayktPnAgPSB0aXBjX2dldF9wb3J0KHBvcnRyZWYpOworCXRpcGNfc2soc2spLT5wID0gdHBfcHRyOworCisJc3Bpbl91bmxvY2tfYmgodHBfcHRyLT5sb2NrKTsKIAogCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19SRUFEWSkgewotCQl0aXBjX3NldF9wb3J0dW5yZXR1cm5hYmxlKHBvcnRyZWYsIDEpOworCQl0aXBjX3NldF9wb3J0dW5yZXR1cm5hYmxlKHRwX3B0ci0+cmVmLCAxKTsKIAkJaWYgKHNvY2stPnR5cGUgPT0gU09DS19ER1JBTSkKLQkJCXRpcGNfc2V0X3BvcnR1bnJlbGlhYmxlKHBvcnRyZWYsIDEpOworCQkJdGlwY19zZXRfcG9ydHVucmVsaWFibGUodHBfcHRyLT5yZWYsIDEpOwogCX0KIAogCWF0b21pY19pbmMoJnRpcGNfdXNlcl9jb3VudCk7CkBAIC0zNzUsMjcgKzM3OCwyOSBAQAogICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmUKICAqIEB1YWRkcjogYXJlYSBmb3IgcmV0dXJuZWQgc29ja2V0IGFkZHJlc3MKICAqIEB1YWRkcl9sZW46IGFyZWEgZm9yIHJldHVybmVkIGxlbmd0aCBvZiBzb2NrZXQgYWRkcmVzcwotICogQHBlZXI6IDAgdG8gb2J0YWluIHNvY2tldCBuYW1lLCAxIHRvIG9idGFpbiBwZWVyIHNvY2tldCBuYW1lCisgKiBAcGVlcjogMCA9IG93biBJRCwgMSA9IGN1cnJlbnQgcGVlciBJRCwgMiA9IGN1cnJlbnQvZm9ybWVyIHBlZXIgSUQKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlCiAgKgotICogTk9URTogVGhpcyByb3V0aW5lIGRvZXNuJ3QgbmVlZCB0byB0YWtlIHRoZSBzb2NrZXQgbG9jayBzaW5jZSBpdCBkb2Vzbid0Ci0gKiAgICAgICBhY2Nlc3MgYW55IG5vbi1jb25zdGFudCBzb2NrZXQgaW5mb3JtYXRpb24uCisgKiBOT1RFOiBUaGlzIHJvdXRpbmUgZG9lc24ndCBuZWVkIHRvIHRha2UgdGhlIHNvY2tldCBsb2NrIHNpbmNlIGl0IG9ubHkKKyAqICAgICAgIGFjY2Vzc2VzIHNvY2tldCBpbmZvcm1hdGlvbiB0aGF0IGlzIHVuY2hhbmdpbmcgKG9yIHdoaWNoIGNoYW5nZXMgaW4KKyAqIAkgYSBjb21wbGV0ZWx5IHByZWRpY3RhYmxlIG1hbm5lcikuCiAgKi8KIAogc3RhdGljIGludCBnZXRfbmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAogCQkgICAgaW50ICp1YWRkcl9sZW4sIGludCBwZWVyKQogewogCXN0cnVjdCBzb2NrYWRkcl90aXBjICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl90aXBjICopdWFkZHI7Ci0JdTMyIHBvcnRyZWYgPSB0aXBjX3NrX3BvcnQoc29jay0+c2spLT5yZWY7Ci0JdTMyIHJlczsKKwlzdHJ1Y3QgdGlwY19zb2NrICp0c29jayA9IHRpcGNfc2soc29jay0+c2spOwogCiAJaWYgKHBlZXIpIHsKLQkJcmVzID0gdGlwY19wZWVyKHBvcnRyZWYsICZhZGRyLT5hZGRyLmlkKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7CisJCWlmICgoc29jay0+c3RhdGUgIT0gU1NfQ09OTkVDVEVEKSAmJgorCQkJKChwZWVyICE9IDIpIHx8IChzb2NrLT5zdGF0ZSAhPSBTU19ESVNDT05ORUNUSU5HKSkpCisJCQlyZXR1cm4gLUVOT1RDT05OOworCQlhZGRyLT5hZGRyLmlkLnJlZiA9IHRzb2NrLT5wZWVyX25hbWUucmVmOworCQlhZGRyLT5hZGRyLmlkLm5vZGUgPSB0c29jay0+cGVlcl9uYW1lLm5vZGU7CiAJfSBlbHNlIHsKLQkJdGlwY19vd25pZGVudGl0eShwb3J0cmVmLCAmYWRkci0+YWRkci5pZCk7CisJCXRpcGNfb3duaWRlbnRpdHkodHNvY2stPnAtPnJlZiwgJmFkZHItPmFkZHIuaWQpOwogCX0KIAogCSp1YWRkcl9sZW4gPSBzaXplb2YoKmFkZHIpOwpAQCAtNzY0LDE4ICs3NjksMTcgQEAKIAogc3RhdGljIGludCBhdXRvX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHRpcGNfbXNnICptc2cpCiB7Ci0Jc3RydWN0IHRpcGNfcG9ydCAqdHBvcnQgPSB0aXBjX3NrX3BvcnQoc29jay0+c2spOwotCXN0cnVjdCB0aXBjX3BvcnRpZCBwZWVyOworCXN0cnVjdCB0aXBjX3NvY2sgKnRzb2NrID0gdGlwY19zayhzb2NrLT5zayk7CiAKIAlpZiAobXNnX2VycmNvZGUobXNnKSkgewogCQlzb2NrLT5zdGF0ZSA9IFNTX0RJU0NPTk5FQ1RJTkc7CiAJCXJldHVybiAtRUNPTk5SRUZVU0VEOwogCX0KIAotCXBlZXIucmVmID0gbXNnX29yaWdwb3J0KG1zZyk7Ci0JcGVlci5ub2RlID0gbXNnX29yaWdub2RlKG1zZyk7Ci0JdGlwY19jb25uZWN0MnBvcnQodHBvcnQtPnJlZiwgJnBlZXIpOwotCXRpcGNfc2V0X3BvcnRpbXBvcnRhbmNlKHRwb3J0LT5yZWYsIG1zZ19pbXBvcnRhbmNlKG1zZykpOworCXRzb2NrLT5wZWVyX25hbWUucmVmID0gbXNnX29yaWdwb3J0KG1zZyk7CisJdHNvY2stPnBlZXJfbmFtZS5ub2RlID0gbXNnX29yaWdub2RlKG1zZyk7CisJdGlwY19jb25uZWN0MnBvcnQodHNvY2stPnAtPnJlZiwgJnRzb2NrLT5wZWVyX25hbWUpOworCXRpcGNfc2V0X3BvcnRpbXBvcnRhbmNlKHRzb2NrLT5wLT5yZWYsIG1zZ19pbXBvcnRhbmNlKG1zZykpOwogCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOwogCXJldHVybiAwOwogfQpAQCAtMTEzMSw3ICsxMTM1LDcgQEAKIAkvKiBMb29wIGFyb3VuZCBpZiBtb3JlIGRhdGEgaXMgcmVxdWlyZWQgKi8KIAogCWlmICgoc3pfY29waWVkIDwgYnVmX2xlbikgICAgLyogZGlkbid0IGdldCBhbGwgcmVxdWVzdGVkIGRhdGEgKi8KLQkgICAgJiYgKCFza2JfcXVldWVfZW1wdHkoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSB8fAorCSAgICAmJiAoIXNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3JlY2VpdmVfcXVldWUpIHx8CiAJCShmbGFncyAmIE1TR19XQUlUQUxMKSkKIAkJCQkgICAgIC8qIC4uLiBhbmQgbW9yZSBpcyByZWFkeSBvciByZXF1aXJlZCAqLwogCSAgICAmJiAoIShmbGFncyAmIE1TR19QRUVLKSkgLyogLi4uIGFuZCBhcmVuJ3QganVzdCBwZWVraW5nIGF0IGRhdGEgKi8KQEAgLTE1MjcsOSArMTUzMSw5IEBACiAJcmVzID0gdGlwY19jcmVhdGUoc29ja19uZXQoc29jay0+c2spLCBuZXdfc29jaywgMCk7CiAJaWYgKCFyZXMpIHsKIAkJc3RydWN0IHNvY2sgKm5ld19zayA9IG5ld19zb2NrLT5zazsKLQkJc3RydWN0IHRpcGNfcG9ydCAqbmV3X3Rwb3J0ID0gdGlwY19za19wb3J0KG5ld19zayk7CisJCXN0cnVjdCB0aXBjX3NvY2sgKm5ld190c29jayA9IHRpcGNfc2sobmV3X3NrKTsKKwkJc3RydWN0IHRpcGNfcG9ydCAqbmV3X3Rwb3J0ID0gbmV3X3Rzb2NrLT5wOwogCQl1MzIgbmV3X3JlZiA9IG5ld190cG9ydC0+cmVmOwotCQlzdHJ1Y3QgdGlwY19wb3J0aWQgaWQ7CiAJCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwogCiAJCWxvY2tfc29jayhuZXdfc2spOwpAQCAtMTU0Myw5ICsxNTQ3LDkgQEAKIAogCQkvKiBDb25uZWN0IG5ldyBzb2NrZXQgdG8gaXQncyBwZWVyICovCiAKLQkJaWQucmVmID0gbXNnX29yaWdwb3J0KG1zZyk7Ci0JCWlkLm5vZGUgPSBtc2dfb3JpZ25vZGUobXNnKTsKLQkJdGlwY19jb25uZWN0MnBvcnQobmV3X3JlZiwgJmlkKTsKKwkJbmV3X3Rzb2NrLT5wZWVyX25hbWUucmVmID0gbXNnX29yaWdwb3J0KG1zZyk7CisJCW5ld190c29jay0+cGVlcl9uYW1lLm5vZGUgPSBtc2dfb3JpZ25vZGUobXNnKTsKKwkJdGlwY19jb25uZWN0MnBvcnQobmV3X3JlZiwgJm5ld190c29jay0+cGVlcl9uYW1lKTsKIAkJbmV3X3NvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOwogCiAJCXRpcGNfc2V0X3BvcnRpbXBvcnRhbmNlKG5ld19yZWYsIG1zZ19pbXBvcnRhbmNlKG1zZykpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc3Vic2NyLmMgYi9uZXQvdGlwYy9zdWJzY3IuYwppbmRleCA4YzAxY2NkLi4wMzI2ZDMwIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zdWJzY3IuYworKysgYi9uZXQvdGlwYy9zdWJzY3IuYwpAQCAtMSw4ICsxLDggQEAKIC8qCi0gKiBuZXQvdGlwYy9zdWJzY3IuYzogVElQQyBzdWJzY3JpcHRpb24gc2VydmljZQorICogbmV0L3RpcGMvc3Vic2NyLmM6IFRJUEMgbmV0d29yayB0b3BvbG9neSBzZXJ2aWNlCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM2LDI3ICszNiwyNCBAQAogCiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgImRiZy5oIgotI2luY2x1ZGUgInN1YnNjci5oIgogI2luY2x1ZGUgIm5hbWVfdGFibGUuaCIKKyNpbmNsdWRlICJwb3J0LmgiCiAjaW5jbHVkZSAicmVmLmgiCisjaW5jbHVkZSAic3Vic2NyLmgiCiAKIC8qKgogICogc3RydWN0IHN1YnNjcmliZXIgLSBUSVBDIG5ldHdvcmsgdG9wb2xvZ3kgc3Vic2NyaWJlcgotICogQHJlZjogb2JqZWN0IHJlZmVyZW5jZSB0byBzdWJzY3JpYmVyIG9iamVjdCBpdHNlbGYKLSAqIEBsb2NrOiBwb2ludGVyIHRvIHNwaW5sb2NrIGNvbnRyb2xsaW5nIGFjY2VzcyB0byBzdWJzY3JpYmVyIG9iamVjdAorICogQHBvcnRfcmVmOiBvYmplY3QgcmVmZXJlbmNlIHRvIHNlcnZlciBwb3J0IGNvbm5lY3RpbmcgdG8gc3Vic2NyaWJlcgorICogQGxvY2s6IHBvaW50ZXIgdG8gc3BpbmxvY2sgY29udHJvbGxpbmcgYWNjZXNzIHRvIHN1YnNjcmliZXIncyBzZXJ2ZXIgcG9ydAogICogQHN1YnNjcmliZXJfbGlzdDogYWRqYWNlbnQgc3Vic2NyaWJlcnMgaW4gdG9wLiBzZXJ2ZXIncyBsaXN0IG9mIHN1YnNjcmliZXJzCiAgKiBAc3Vic2NyaXB0aW9uX2xpc3Q6IGxpc3Qgb2Ygc3Vic2NyaXB0aW9uIG9iamVjdHMgZm9yIHRoaXMgc3Vic2NyaWJlcgotICogQHBvcnRfcmVmOiBvYmplY3QgcmVmZXJlbmNlIHRvIHBvcnQgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1YnNjcmliZXIKLSAqIEBzd2FwOiBpbmRpY2F0ZXMgaWYgc3Vic2NyaWJlciB1c2VzIG9wcG9zaXRlIGVuZGlhbm5lc3MgaW4gaXRzIG1lc3NhZ2VzCiAgKi8KIAogc3RydWN0IHN1YnNjcmliZXIgewotCXUzMiByZWY7CisJdTMyIHBvcnRfcmVmOwogCXNwaW5sb2NrX3QgKmxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBzdWJzY3JpYmVyX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBzdWJzY3JpcHRpb25fbGlzdDsKLQl1MzIgcG9ydF9yZWY7Ci0JaW50IHN3YXA7CiB9OwogCiAvKioKQEAgLTg4LDEzICs4NSwxNCBAQAogCiBzdGF0aWMgdTMyIGh0b2hsKHUzMiBpbiwgaW50IHN3YXApCiB7Ci0JY2hhciAqYyA9IChjaGFyICopJmluOwotCi0JcmV0dXJuIHN3YXAgPyAoKGNbM10gPDwgMykgKyAoY1syXSA8PCAyKSArIChjWzFdIDw8IDEpICsgY1swXSkgOiBpbjsKKwlyZXR1cm4gc3dhcCA/ICh1MzIpX19fY29uc3RhbnRfc3dhYjMyKGluKSA6IGluOwogfQogCiAvKioKICAqIHN1YnNjcl9zZW5kX2V2ZW50IC0gc2VuZCBhIG1lc3NhZ2UgY29udGFpbmluZyBhIHRpcGNfZXZlbnQgdG8gdGhlIHN1YnNjcmliZXIKKyAqCisgKiBOb3RlOiBNdXN0IG5vdCBob2xkIHN1YnNjcmliZXIncyBzZXJ2ZXIgcG9ydCBsb2NrLCBzaW5jZSB0aXBjX3NlbmQoKSB3aWxsCisgKiAgICAgICB0cnkgdG8gdGFrZSB0aGUgbG9jayBpZiB0aGUgbWVzc2FnZSBpcyByZWplY3RlZCBhbmQgcmV0dXJuZWQhCiAgKi8KIAogc3RhdGljIHZvaWQgc3Vic2NyX3NlbmRfZXZlbnQoc3RydWN0IHN1YnNjcmlwdGlvbiAqc3ViLApAQCAtMTA5LDEyICsxMDcsMTIgQEAKIAltc2dfc2VjdC5pb3ZfYmFzZSA9ICh2b2lkICopJnN1Yi0+ZXZ0OwogCW1zZ19zZWN0Lmlvdl9sZW4gPSBzaXplb2Yoc3RydWN0IHRpcGNfZXZlbnQpOwogCi0Jc3ViLT5ldnQuZXZlbnQgPSBodG9obChldmVudCwgc3ViLT5vd25lci0+c3dhcCk7Ci0Jc3ViLT5ldnQuZm91bmRfbG93ZXIgPSBodG9obChmb3VuZF9sb3dlciwgc3ViLT5vd25lci0+c3dhcCk7Ci0Jc3ViLT5ldnQuZm91bmRfdXBwZXIgPSBodG9obChmb3VuZF91cHBlciwgc3ViLT5vd25lci0+c3dhcCk7Ci0Jc3ViLT5ldnQucG9ydC5yZWYgPSBodG9obChwb3J0X3JlZiwgc3ViLT5vd25lci0+c3dhcCk7Ci0Jc3ViLT5ldnQucG9ydC5ub2RlID0gaHRvaGwobm9kZSwgc3ViLT5vd25lci0+c3dhcCk7Ci0JdGlwY19zZW5kKHN1Yi0+b3duZXItPnBvcnRfcmVmLCAxLCAmbXNnX3NlY3QpOworCXN1Yi0+ZXZ0LmV2ZW50ID0gaHRvaGwoZXZlbnQsIHN1Yi0+c3dhcCk7CisJc3ViLT5ldnQuZm91bmRfbG93ZXIgPSBodG9obChmb3VuZF9sb3dlciwgc3ViLT5zd2FwKTsKKwlzdWItPmV2dC5mb3VuZF91cHBlciA9IGh0b2hsKGZvdW5kX3VwcGVyLCBzdWItPnN3YXApOworCXN1Yi0+ZXZ0LnBvcnQucmVmID0gaHRvaGwocG9ydF9yZWYsIHN1Yi0+c3dhcCk7CisJc3ViLT5ldnQucG9ydC5ub2RlID0gaHRvaGwobm9kZSwgc3ViLT5zd2FwKTsKKwl0aXBjX3NlbmQoc3ViLT5zZXJ2ZXJfcmVmLCAxLCAmbXNnX3NlY3QpOwogfQogCiAvKioKQEAgLTE1MSwxMyArMTQ5LDEyIEBACiAJCQkJdTMyIG5vZGUsCiAJCQkJaW50IG11c3QpCiB7Ci0JZGJnKCJSZXAgb3ZlcmxhcCAldToldSwldTwtPiV1LCV1XG4iLCBzdWItPnNlcS50eXBlLCBzdWItPnNlcS5sb3dlciwKLQkgICAgc3ViLT5zZXEudXBwZXIsIGZvdW5kX2xvd2VyLCBmb3VuZF91cHBlcik7CiAJaWYgKCF0aXBjX3N1YnNjcl9vdmVybGFwKHN1YiwgZm91bmRfbG93ZXIsIGZvdW5kX3VwcGVyKSkKIAkJcmV0dXJuOwogCWlmICghbXVzdCAmJiAhKHN1Yi0+ZmlsdGVyICYgVElQQ19TVUJfUE9SVFMpKQogCQlyZXR1cm47Ci0Jc3Vic2NyX3NlbmRfZXZlbnQoc3ViLCBmb3VuZF9sb3dlciwgZm91bmRfdXBwZXIsIGV2ZW50LCBwb3J0X3JlZiwgbm9kZSk7CisKKwlzdWItPmV2ZW50X2NiKHN1YiwgZm91bmRfbG93ZXIsIGZvdW5kX3VwcGVyLCBldmVudCwgcG9ydF9yZWYsIG5vZGUpOwogfQogCiAvKioKQEAgLTE2NiwyMCArMTYzLDE4IEBACiAKIHN0YXRpYyB2b2lkIHN1YnNjcl90aW1lb3V0KHN0cnVjdCBzdWJzY3JpcHRpb24gKnN1YikKIHsKLQlzdHJ1Y3Qgc3Vic2NyaWJlciAqc3Vic2NyaWJlcjsKLQl1MzIgc3Vic2NyaWJlcl9yZWY7CisJc3RydWN0IHBvcnQgKnNlcnZlcl9wb3J0OwogCi0JLyogVmFsaWRhdGUgc3Vic2NyaWJlciByZWZlcmVuY2UgKGluIGNhc2Ugc3Vic2NyaWJlciBpcyB0ZXJtaW5hdGluZykgKi8KKwkvKiBWYWxpZGF0ZSBzZXJ2ZXIgcG9ydCByZWZlcmVuY2UgKGluIGNhc2Ugc3Vic2NyaWJlciBpcyB0ZXJtaW5hdGluZykgKi8KIAotCXN1YnNjcmliZXJfcmVmID0gc3ViLT5vd25lci0+cmVmOwotCXN1YnNjcmliZXIgPSAoc3RydWN0IHN1YnNjcmliZXIgKil0aXBjX3JlZl9sb2NrKHN1YnNjcmliZXJfcmVmKTsKLQlpZiAoc3Vic2NyaWJlciA9PSBOVUxMKQorCXNlcnZlcl9wb3J0ID0gdGlwY19wb3J0X2xvY2soc3ViLT5zZXJ2ZXJfcmVmKTsKKwlpZiAoc2VydmVyX3BvcnQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJLyogVmFsaWRhdGUgdGltZW91dCAoaW4gY2FzZSBzdWJzY3JpcHRpb24gaXMgYmVpbmcgY2FuY2VsbGVkKSAqLwogCiAJaWYgKHN1Yi0+dGltZW91dCA9PSBUSVBDX1dBSVRfRk9SRVZFUikgewotCQl0aXBjX3JlZl91bmxvY2soc3Vic2NyaWJlcl9yZWYpOworCQl0aXBjX3BvcnRfdW5sb2NrKHNlcnZlcl9wb3J0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTg3LDE5ICsxODIsMjEgQEAKIAogCXRpcGNfbmFtZXRibF91bnN1YnNjcmliZShzdWIpOwogCi0JLyogTm90aWZ5IHN1YnNjcmliZXIgb2YgdGltZW91dCwgdGhlbiB1bmxpbmsgc3Vic2NyaXB0aW9uICovCisJLyogVW5saW5rIHN1YnNjcmlwdGlvbiBmcm9tIHN1YnNjcmliZXIgKi8KIAotCXN1YnNjcl9zZW5kX2V2ZW50KHN1YiwKLQkJCSAgc3ViLT5ldnQucy5zZXEubG93ZXIsCi0JCQkgIHN1Yi0+ZXZ0LnMuc2VxLnVwcGVyLAotCQkJICBUSVBDX1NVQlNDUl9USU1FT1VULAotCQkJICAwLAotCQkJICAwKTsKIAlsaXN0X2RlbCgmc3ViLT5zdWJzY3JpcHRpb25fbGlzdCk7CiAKKwkvKiBSZWxlYXNlIHN1YnNjcmliZXIncyBzZXJ2ZXIgcG9ydCAqLworCisJdGlwY19wb3J0X3VubG9jayhzZXJ2ZXJfcG9ydCk7CisKKwkvKiBOb3RpZnkgc3Vic2NyaWJlciBvZiB0aW1lb3V0ICovCisKKwlzdWJzY3Jfc2VuZF9ldmVudChzdWIsIHN1Yi0+ZXZ0LnMuc2VxLmxvd2VyLCBzdWItPmV2dC5zLnNlcS51cHBlciwKKwkJCSAgVElQQ19TVUJTQ1JfVElNRU9VVCwgMCwgMCk7CisKIAkvKiBOb3cgZGVzdHJveSBzdWJzY3JpcHRpb24gKi8KIAotCXRpcGNfcmVmX3VubG9jayhzdWJzY3JpYmVyX3JlZik7CiAJa190ZXJtX3RpbWVyKCZzdWItPnRpbWVyKTsKIAlrZnJlZShzdWIpOwogCWF0b21pY19kZWMoJnRvcHNydi5zdWJzY3JpcHRpb25fY291bnQpOwpAQCAtMjA4LDcgKzIwNSw3IEBACiAvKioKICAqIHN1YnNjcl9kZWwgLSBkZWxldGUgYSBzdWJzY3JpcHRpb24gd2l0aGluIGEgc3Vic2NyaXB0aW9uIGxpc3QKICAqCi0gKiBDYWxsZWQgd2l0aCBzdWJzY3JpYmVyIGxvY2tlZC4KKyAqIENhbGxlZCB3aXRoIHN1YnNjcmliZXIgcG9ydCBsb2NrZWQuCiAgKi8KIAogc3RhdGljIHZvaWQgc3Vic2NyX2RlbChzdHJ1Y3Qgc3Vic2NyaXB0aW9uICpzdWIpCkBAIC0yMjIsNyArMjE5LDcgQEAKIC8qKgogICogc3Vic2NyX3Rlcm1pbmF0ZSAtIHRlcm1pbmF0ZSBjb21tdW5pY2F0aW9uIHdpdGggYSBzdWJzY3JpYmVyCiAgKgotICogQ2FsbGVkIHdpdGggc3Vic2NyaWJlciBsb2NrZWQuICBSb3V0aW5lIG11c3QgdGVtcG9yYXJpbHkgcmVsZWFzZSB0aGlzIGxvY2sKKyAqIENhbGxlZCB3aXRoIHN1YnNjcmliZXIgcG9ydCBsb2NrZWQuICBSb3V0aW5lIG11c3QgdGVtcG9yYXJpbHkgcmVsZWFzZSBsb2NrCiAgKiB0byBlbmFibGUgc3Vic2NyaXB0aW9uIHRpbWVvdXQgcm91dGluZShzKSB0byBmaW5pc2ggd2l0aG91dCBkZWFkbG9ja2luZzsKICAqIHRoZSBsb2NrIGlzIHRoZW4gcmVjbGFpbWVkIHRvIGFsbG93IGNhbGxlciB0byByZWxlYXNlIGl0IHVwb24gcmV0dXJuLgogICogKFRoaXMgc2hvdWxkIHdvcmsgZXZlbiBpbiB0aGUgdW5saWtlbHkgZXZlbnQgc29tZSBvdGhlciB0aHJlYWQgY3JlYXRlcwpAQCAtMjMyLDE0ICsyMjksMjEgQEAKIAogc3RhdGljIHZvaWQgc3Vic2NyX3Rlcm1pbmF0ZShzdHJ1Y3Qgc3Vic2NyaWJlciAqc3Vic2NyaWJlcikKIHsKKwl1MzIgcG9ydF9yZWY7CiAJc3RydWN0IHN1YnNjcmlwdGlvbiAqc3ViOwogCXN0cnVjdCBzdWJzY3JpcHRpb24gKnN1Yl90ZW1wOwogCiAJLyogSW52YWxpZGF0ZSBzdWJzY3JpYmVyIHJlZmVyZW5jZSAqLwogCi0JdGlwY19yZWZfZGlzY2FyZChzdWJzY3JpYmVyLT5yZWYpOworCXBvcnRfcmVmID0gc3Vic2NyaWJlci0+cG9ydF9yZWY7CisJc3Vic2NyaWJlci0+cG9ydF9yZWYgPSAwOwogCXNwaW5fdW5sb2NrX2JoKHN1YnNjcmliZXItPmxvY2spOwogCisJLyogU2V2ZXIgY29ubmVjdGlvbiB0byBzdWJzY3JpYmVyICovCisKKwl0aXBjX3NodXRkb3duKHBvcnRfcmVmKTsKKwl0aXBjX2RlbGV0ZXBvcnQocG9ydF9yZWYpOworCiAJLyogRGVzdHJveSBhbnkgZXhpc3Rpbmcgc3Vic2NyaXB0aW9ucyBmb3Igc3Vic2NyaWJlciAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN1Yiwgc3ViX3RlbXAsICZzdWJzY3JpYmVyLT5zdWJzY3JpcHRpb25fbGlzdCwKQEAgLTI1MywyNyArMjU3LDI1IEBACiAJCXN1YnNjcl9kZWwoc3ViKTsKIAl9CiAKLQkvKiBTZXZlciBjb25uZWN0aW9uIHRvIHN1YnNjcmliZXIgKi8KLQotCXRpcGNfc2h1dGRvd24oc3Vic2NyaWJlci0+cG9ydF9yZWYpOwotCXRpcGNfZGVsZXRlcG9ydChzdWJzY3JpYmVyLT5wb3J0X3JlZik7Ci0KIAkvKiBSZW1vdmUgc3Vic2NyaWJlciBmcm9tIHRvcG9sb2d5IHNlcnZlcidzIHN1YnNjcmliZXIgbGlzdCAqLwogCiAJc3Bpbl9sb2NrX2JoKCZ0b3BzcnYubG9jayk7CiAJbGlzdF9kZWwoJnN1YnNjcmliZXItPnN1YnNjcmliZXJfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJnRvcHNydi5sb2NrKTsKIAotCS8qIE5vdyBkZXN0cm95IHN1YnNjcmliZXIgKi8KKwkvKiBSZWNsYWltIHN1YnNjcmliZXIgbG9jayAqLwogCiAJc3Bpbl9sb2NrX2JoKHN1YnNjcmliZXItPmxvY2spOworCisJLyogTm93IGRlc3Ryb3kgc3Vic2NyaWJlciAqLworCiAJa2ZyZWUoc3Vic2NyaWJlcik7CiB9CiAKIC8qKgogICogc3Vic2NyX2NhbmNlbCAtIGhhbmRsZSBzdWJzY3JpcHRpb24gY2FuY2VsbGF0aW9uIHJlcXVlc3QKICAqCi0gKiBDYWxsZWQgd2l0aCBzdWJzY3JpYmVyIGxvY2tlZC4gIFJvdXRpbmUgbXVzdCB0ZW1wb3JhcmlseSByZWxlYXNlIHRoaXMgbG9jaworICogQ2FsbGVkIHdpdGggc3Vic2NyaWJlciBwb3J0IGxvY2tlZC4gIFJvdXRpbmUgbXVzdCB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2sKICAqIHRvIGVuYWJsZSB0aGUgc3Vic2NyaXB0aW9uIHRpbWVvdXQgcm91dGluZSB0byBmaW5pc2ggd2l0aG91dCBkZWFkbG9ja2luZzsKICAqIHRoZSBsb2NrIGlzIHRoZW4gcmVjbGFpbWVkIHRvIGFsbG93IGNhbGxlciB0byByZWxlYXNlIGl0IHVwb24gcmV0dXJuLgogICoKQEAgLTMxNiwyNyArMzE4LDI1IEBACiAvKioKICAqIHN1YnNjcl9zdWJzY3JpYmUgLSBjcmVhdGUgc3Vic2NyaXB0aW9uIGZvciBzdWJzY3JpYmVyCiAgKgotICogQ2FsbGVkIHdpdGggc3Vic2NyaWJlciBsb2NrZWQKKyAqIENhbGxlZCB3aXRoIHN1YnNjcmliZXIgcG9ydCBsb2NrZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgc3Vic2NyX3N1YnNjcmliZShzdHJ1Y3QgdGlwY19zdWJzY3IgKnMsCi0JCQkgICAgIHN0cnVjdCBzdWJzY3JpYmVyICpzdWJzY3JpYmVyKQorc3RhdGljIHN0cnVjdCBzdWJzY3JpcHRpb24gKnN1YnNjcl9zdWJzY3JpYmUoc3RydWN0IHRpcGNfc3Vic2NyICpzLAorCQkJCQkgICAgIHN0cnVjdCBzdWJzY3JpYmVyICpzdWJzY3JpYmVyKQogewogCXN0cnVjdCBzdWJzY3JpcHRpb24gKnN1YjsKKwlpbnQgc3dhcDsKIAotCS8qIERldGVybWluZS91cGRhdGUgc3Vic2NyaWJlcidzIGVuZGlhbm5lc3MgKi8KKwkvKiBEZXRlcm1pbmUgc3Vic2NyaWJlcidzIGVuZGlhbm5lc3MgKi8KIAotCWlmIChzLT5maWx0ZXIgJiAoVElQQ19TVUJfUE9SVFMgfCBUSVBDX1NVQl9TRVJWSUNFKSkKLQkJc3Vic2NyaWJlci0+c3dhcCA9IDA7Ci0JZWxzZQotCQlzdWJzY3JpYmVyLT5zd2FwID0gMTsKKwlzd2FwID0gIShzLT5maWx0ZXIgJiAoVElQQ19TVUJfUE9SVFMgfCBUSVBDX1NVQl9TRVJWSUNFKSk7CiAKIAkvKiBEZXRlY3QgJiBwcm9jZXNzIGEgc3Vic2NyaXB0aW9uIGNhbmNlbGxhdGlvbiByZXF1ZXN0ICovCiAKLQlpZiAocy0+ZmlsdGVyICYgaHRvaGwoVElQQ19TVUJfQ0FOQ0VMLCBzdWJzY3JpYmVyLT5zd2FwKSkgewotCQlzLT5maWx0ZXIgJj0gfmh0b2hsKFRJUENfU1VCX0NBTkNFTCwgc3Vic2NyaWJlci0+c3dhcCk7CisJaWYgKHMtPmZpbHRlciAmIGh0b2hsKFRJUENfU1VCX0NBTkNFTCwgc3dhcCkpIHsKKwkJcy0+ZmlsdGVyICY9IH5odG9obChUSVBDX1NVQl9DQU5DRUwsIHN3YXApOwogCQlzdWJzY3JfY2FuY2VsKHMsIHN1YnNjcmliZXIpOwotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIFJlZnVzZSBzdWJzY3JpcHRpb24gaWYgZ2xvYmFsIGxpbWl0IGV4Y2VlZGVkICovCkBAIC0zNDUsNjMgKzM0NSw2NiBAQAogCQl3YXJuKCJTdWJzY3JpcHRpb24gcmVqZWN0ZWQsIHN1YnNjcmlwdGlvbiBsaW1pdCByZWFjaGVkICgldSlcbiIsCiAJCSAgICAgdGlwY19tYXhfc3Vic2NyaXB0aW9ucyk7CiAJCXN1YnNjcl90ZXJtaW5hdGUoc3Vic2NyaWJlcik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyogQWxsb2NhdGUgc3Vic2NyaXB0aW9uIG9iamVjdCAqLwogCi0Jc3ViID0ga3phbGxvYyhzaXplb2YoKnN1YiksIEdGUF9BVE9NSUMpOworCXN1YiA9IGttYWxsb2Moc2l6ZW9mKCpzdWIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXN1YikgewogCQl3YXJuKCJTdWJzY3JpcHRpb24gcmVqZWN0ZWQsIG5vIG1lbW9yeVxuIik7CiAJCXN1YnNjcl90ZXJtaW5hdGUoc3Vic2NyaWJlcik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSBzdWJzY3JpcHRpb24gb2JqZWN0ICovCiAKLQlzdWItPnNlcS50eXBlID0gaHRvaGwocy0+c2VxLnR5cGUsIHN1YnNjcmliZXItPnN3YXApOwotCXN1Yi0+c2VxLmxvd2VyID0gaHRvaGwocy0+c2VxLmxvd2VyLCBzdWJzY3JpYmVyLT5zd2FwKTsKLQlzdWItPnNlcS51cHBlciA9IGh0b2hsKHMtPnNlcS51cHBlciwgc3Vic2NyaWJlci0+c3dhcCk7Ci0Jc3ViLT50aW1lb3V0ID0gaHRvaGwocy0+dGltZW91dCwgc3Vic2NyaWJlci0+c3dhcCk7Ci0Jc3ViLT5maWx0ZXIgPSBodG9obChzLT5maWx0ZXIsIHN1YnNjcmliZXItPnN3YXApOworCXN1Yi0+c2VxLnR5cGUgPSBodG9obChzLT5zZXEudHlwZSwgc3dhcCk7CisJc3ViLT5zZXEubG93ZXIgPSBodG9obChzLT5zZXEubG93ZXIsIHN3YXApOworCXN1Yi0+c2VxLnVwcGVyID0gaHRvaGwocy0+c2VxLnVwcGVyLCBzd2FwKTsKKwlzdWItPnRpbWVvdXQgPSBodG9obChzLT50aW1lb3V0LCBzd2FwKTsKKwlzdWItPmZpbHRlciA9IGh0b2hsKHMtPmZpbHRlciwgc3dhcCk7CiAJaWYgKCghKHN1Yi0+ZmlsdGVyICYgVElQQ19TVUJfUE9SVFMpCiAJICAgICA9PSAhKHN1Yi0+ZmlsdGVyICYgVElQQ19TVUJfU0VSVklDRSkpCiAJICAgIHx8IChzdWItPnNlcS5sb3dlciA+IHN1Yi0+c2VxLnVwcGVyKSkgewogCQl3YXJuKCJTdWJzY3JpcHRpb24gcmVqZWN0ZWQsIGlsbGVnYWwgcmVxdWVzdFxuIik7CiAJCWtmcmVlKHN1Yik7CiAJCXN1YnNjcl90ZXJtaW5hdGUoc3Vic2NyaWJlcik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbWNweSgmc3ViLT5ldnQucywgcywgc2l6ZW9mKHN0cnVjdCB0aXBjX3N1YnNjcikpOwotCUlOSVRfTElTVF9IRUFEKCZzdWItPnN1YnNjcmlwdGlvbl9saXN0KTsKKwlzdWItPmV2ZW50X2NiID0gc3Vic2NyX3NlbmRfZXZlbnQ7CiAJSU5JVF9MSVNUX0hFQUQoJnN1Yi0+bmFtZXNlcV9saXN0KTsKIAlsaXN0X2FkZCgmc3ViLT5zdWJzY3JpcHRpb25fbGlzdCwgJnN1YnNjcmliZXItPnN1YnNjcmlwdGlvbl9saXN0KTsKKwlzdWItPnNlcnZlcl9yZWYgPSBzdWJzY3JpYmVyLT5wb3J0X3JlZjsKKwlzdWItPnN3YXAgPSBzd2FwOworCW1lbWNweSgmc3ViLT5ldnQucywgcywgc2l6ZW9mKHN0cnVjdCB0aXBjX3N1YnNjcikpOwogCWF0b21pY19pbmMoJnRvcHNydi5zdWJzY3JpcHRpb25fY291bnQpOwogCWlmIChzdWItPnRpbWVvdXQgIT0gVElQQ19XQUlUX0ZPUkVWRVIpIHsKIAkJa19pbml0X3RpbWVyKCZzdWItPnRpbWVyLAogCQkJICAgICAoSGFuZGxlcilzdWJzY3JfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpc3ViKTsKIAkJa19zdGFydF90aW1lcigmc3ViLT50aW1lciwgc3ViLT50aW1lb3V0KTsKIAl9Ci0Jc3ViLT5vd25lciA9IHN1YnNjcmliZXI7Ci0JdGlwY19uYW1ldGJsX3N1YnNjcmliZShzdWIpOworCisJcmV0dXJuIHN1YjsKIH0KIAogLyoqCiAgKiBzdWJzY3JfY29ubl9zaHV0ZG93bl9ldmVudCAtIGhhbmRsZSB0ZXJtaW5hdGlvbiByZXF1ZXN0IGZyb20gc3Vic2NyaWJlcgorICoKKyAqIENhbGxlZCB3aXRoIHN1YnNjcmliZXIncyBzZXJ2ZXIgcG9ydCB1bmxvY2tlZC4KICAqLwogCiBzdGF0aWMgdm9pZCBzdWJzY3JfY29ubl9zaHV0ZG93bl9ldmVudCh2b2lkICp1c3JfaGFuZGxlLAotCQkJCSAgICAgICB1MzIgcG9ydHJlZiwKKwkJCQkgICAgICAgdTMyIHBvcnRfcmVmLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZiwKIAkJCQkgICAgICAgdW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHNpemUsCiAJCQkJICAgICAgIGludCByZWFzb24pCiB7Ci0Jc3RydWN0IHN1YnNjcmliZXIgKnN1YnNjcmliZXI7CisJc3RydWN0IHN1YnNjcmliZXIgKnN1YnNjcmliZXIgPSB1c3JfaGFuZGxlOwogCXNwaW5sb2NrX3QgKnN1YnNjcmliZXJfbG9jazsKIAotCXN1YnNjcmliZXIgPSB0aXBjX3JlZl9sb2NrKCh1MzIpKHVuc2lnbmVkIGxvbmcpdXNyX2hhbmRsZSk7Ci0JaWYgKHN1YnNjcmliZXIgPT0gTlVMTCkKKwlpZiAodGlwY19wb3J0X2xvY2socG9ydF9yZWYpID09IE5VTEwpCiAJCXJldHVybjsKIAogCXN1YnNjcmliZXJfbG9jayA9IHN1YnNjcmliZXItPmxvY2s7CkBAIC00MTEsNiArNDE0LDggQEAKIAogLyoqCiAgKiBzdWJzY3JfY29ubl9tc2dfZXZlbnQgLSBoYW5kbGUgbmV3IHN1YnNjcmlwdGlvbiByZXF1ZXN0IGZyb20gc3Vic2NyaWJlcgorICoKKyAqIENhbGxlZCB3aXRoIHN1YnNjcmliZXIncyBzZXJ2ZXIgcG9ydCB1bmxvY2tlZC4KICAqLwogCiBzdGF0aWMgdm9pZCBzdWJzY3JfY29ubl9tc2dfZXZlbnQodm9pZCAqdXNyX2hhbmRsZSwKQEAgLTQxOSwyMCArNDI0LDQ2IEBACiAJCQkJICBjb25zdCB1bmNoYXIgKmRhdGEsCiAJCQkJICB1MzIgc2l6ZSkKIHsKLQlzdHJ1Y3Qgc3Vic2NyaWJlciAqc3Vic2NyaWJlcjsKKwlzdHJ1Y3Qgc3Vic2NyaWJlciAqc3Vic2NyaWJlciA9IHVzcl9oYW5kbGU7CiAJc3BpbmxvY2tfdCAqc3Vic2NyaWJlcl9sb2NrOworCXN0cnVjdCBzdWJzY3JpcHRpb24gKnN1YjsKIAotCXN1YnNjcmliZXIgPSB0aXBjX3JlZl9sb2NrKCh1MzIpKHVuc2lnbmVkIGxvbmcpdXNyX2hhbmRsZSk7Ci0JaWYgKHN1YnNjcmliZXIgPT0gTlVMTCkKKwkvKgorCSAqIExvY2sgc3Vic2NyaWJlcidzIHNlcnZlciBwb3J0ICgmIG1ha2UgYSBsb2NhbCBjb3B5IG9mIGxvY2sgcG9pbnRlciwKKwkgKiBpbiBjYXNlIHN1YnNjcmliZXIgaXMgZGVsZXRlZCB3aGlsZSBwcm9jZXNzaW5nIHN1YnNjcmlwdGlvbiByZXF1ZXN0KQorCSAqLworCisJaWYgKHRpcGNfcG9ydF9sb2NrKHBvcnRfcmVmKSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlzdWJzY3JpYmVyX2xvY2sgPSBzdWJzY3JpYmVyLT5sb2NrOwotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdGlwY19zdWJzY3IpKQotCQlzdWJzY3JfdGVybWluYXRlKHN1YnNjcmliZXIpOwotCWVsc2UKLQkJc3Vic2NyX3N1YnNjcmliZSgoc3RydWN0IHRpcGNfc3Vic2NyICopZGF0YSwgc3Vic2NyaWJlcik7CiAKLQlzcGluX3VubG9ja19iaChzdWJzY3JpYmVyX2xvY2spOworCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdGlwY19zdWJzY3IpKSB7CisJCXN1YnNjcl90ZXJtaW5hdGUoc3Vic2NyaWJlcik7CisJCXNwaW5fdW5sb2NrX2JoKHN1YnNjcmliZXJfbG9jayk7CisJfSBlbHNlIHsKKwkJc3ViID0gc3Vic2NyX3N1YnNjcmliZSgoc3RydWN0IHRpcGNfc3Vic2NyICopZGF0YSwgc3Vic2NyaWJlcik7CisJCXNwaW5fdW5sb2NrX2JoKHN1YnNjcmliZXJfbG9jayk7CisJCWlmIChzdWIgIT0gTlVMTCkgeworCisJCQkvKgorCQkJICogV2UgbXVzdCByZWxlYXNlIHRoZSBzZXJ2ZXIgcG9ydCBsb2NrIGJlZm9yZSBhZGRpbmcgYQorCQkJICogc3Vic2NyaXB0aW9uIHRvIHRoZSBuYW1lIHRhYmxlIHNpbmNlIFRJUEMgbmVlZHMgdG8gYmUKKwkJCSAqIGFibGUgdG8gKHJlKWFjcXVpcmUgdGhlIHBvcnQgbG9jayBpZiBhbiBldmVudCBtZXNzYWdlCisJCQkgKiBpc3N1ZWQgYnkgdGhlIHN1YnNjcmlwdGlvbiBwcm9jZXNzIGlzIHJlamVjdGVkIGFuZAorCQkJICogcmV0dXJuZWQuICBUaGUgc3Vic2NyaXB0aW9uIGNhbm5vdCBiZSBkZWxldGVkIHdoaWxlCisJCQkgKiBpdCBpcyBiZWluZyBhZGRlZCB0byB0aGUgbmFtZSB0YWJsZSBiZWNhdXNlOgorCQkJICogYSkgdGhlIHNpbmdsZS10aHJlYWRpbmcgb2YgdGhlIG5hdGl2ZSBBUEkgcG9ydCBjb2RlCisJCQkgKiAgICBlbnN1cmVzIHRoZSBzdWJzY3JpcHRpb24gY2Fubm90IGJlIGNhbmNlbGxlZCBhbmQKKwkJCSAqICAgIHRoZSBzdWJzY3JpYmVyIGNvbm5lY3Rpb24gY2Fubm90IGJlIGJyb2tlbiwgYW5kCisJCQkgKiBiKSB0aGUgbmFtZSB0YWJsZSBsb2NrIGVuc3VyZXMgdGhlIHN1YnNjcmlwdGlvbgorCQkJICogICAgdGltZW91dCBjb2RlIGNhbm5vdCBkZWxldGUgdGhlIHN1YnNjcmlwdGlvbiwKKwkJCSAqIHNvIHRoZSBzdWJzY3JpcHRpb24gb2JqZWN0IGlzIHN0aWxsIHByb3RlY3RlZC4KKwkJCSAqLworCisJCQl0aXBjX25hbWV0Ymxfc3Vic2NyaWJlKHN1Yik7CisJCX0KKwl9CiB9CiAKIC8qKgpAQCAtNDQ4LDE2ICs0NzksMTAgQEAKIAkJCQkgICBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKm9yaWcsCiAJCQkJICAgc3RydWN0IHRpcGNfbmFtZV9zZXEgY29uc3QgKmRlc3QpCiB7Ci0Jc3RydWN0IHN1YnNjcmliZXIgKnN1YnNjcmliZXI7Ci0Jc3RydWN0IGlvdmVjIG1zZ19zZWN0ID0ge05VTEwsIDB9OwotCXNwaW5sb2NrX3QgKnN1YnNjcmliZXJfbG9jazsKKwlzdGF0aWMgc3RydWN0IGlvdmVjIG1zZ19zZWN0ID0ge05VTEwsIDB9OwogCi0JZGJnKCJzdWJzY3JfbmFtZWRfbXNnX2V2ZW50OiBvcmlnID0gJXggb3duID0gJXgsXG4iLAotCSAgICBvcmlnLT5ub2RlLCB0aXBjX293bl9hZGRyKTsKLQlpZiAoc2l6ZSAmJiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHRpcGNfc3Vic2NyKSkpIHsKLQkJd2FybigiU3Vic2NyaWJlciByZWplY3RlZCwgaW52YWxpZCBzdWJzY3JpcHRpb24gc2l6ZVxuIik7Ci0JCXJldHVybjsKLQl9CisJc3RydWN0IHN1YnNjcmliZXIgKnN1YnNjcmliZXI7CisJdTMyIHNlcnZlcl9wb3J0X3JlZjsKIAogCS8qIENyZWF0ZSBzdWJzY3JpYmVyIG9iamVjdCAqLwogCkBAIC00NjgsMTcgKzQ5MywxMSBAQAogCX0KIAlJTklUX0xJU1RfSEVBRCgmc3Vic2NyaWJlci0+c3Vic2NyaXB0aW9uX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZzdWJzY3JpYmVyLT5zdWJzY3JpYmVyX2xpc3QpOwotCXN1YnNjcmliZXItPnJlZiA9IHRpcGNfcmVmX2FjcXVpcmUoc3Vic2NyaWJlciwgJnN1YnNjcmliZXItPmxvY2spOwotCWlmIChzdWJzY3JpYmVyLT5yZWYgPT0gMCkgewotCQl3YXJuKCJTdWJzY3JpYmVyIHJlamVjdGVkLCByZWZlcmVuY2UgdGFibGUgZXhoYXVzdGVkXG4iKTsKLQkJa2ZyZWUoc3Vic2NyaWJlcik7Ci0JCXJldHVybjsKLQl9CiAKLQkvKiBFc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHN1YnNjcmliZXIgKi8KKwkvKiBDcmVhdGUgc2VydmVyIHBvcnQgJiBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzdWJzY3JpYmVyICovCiAKIAl0aXBjX2NyZWF0ZXBvcnQodG9wc3J2LnVzZXJfcmVmLAotCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylzdWJzY3JpYmVyLT5yZWYsCisJCQlzdWJzY3JpYmVyLAogCQkJaW1wb3J0YW5jZSwKIAkJCU5VTEwsCiAJCQlOVUxMLApAQCAtNDkwLDMyICs1MDksMzYgQEAKIAkJCSZzdWJzY3JpYmVyLT5wb3J0X3JlZik7CiAJaWYgKHN1YnNjcmliZXItPnBvcnRfcmVmID09IDApIHsKIAkJd2FybigiU3Vic2NyaWJlciByZWplY3RlZCwgdW5hYmxlIHRvIGNyZWF0ZSBwb3J0XG4iKTsKLQkJdGlwY19yZWZfZGlzY2FyZChzdWJzY3JpYmVyLT5yZWYpOwogCQlrZnJlZShzdWJzY3JpYmVyKTsKIAkJcmV0dXJuOwogCX0KIAl0aXBjX2Nvbm5lY3QycG9ydChzdWJzY3JpYmVyLT5wb3J0X3JlZiwgb3JpZyk7CiAKKwkvKiBMb2NrIHNlcnZlciBwb3J0ICgmIHNhdmUgbG9jayBhZGRyZXNzIGZvciBmdXR1cmUgdXNlKSAqLworCisJc3Vic2NyaWJlci0+bG9jayA9IHRpcGNfcG9ydF9sb2NrKHN1YnNjcmliZXItPnBvcnRfcmVmKS0+cHVibC5sb2NrOwogCiAJLyogQWRkIHN1YnNjcmliZXIgdG8gdG9wb2xvZ3kgc2VydmVyJ3Mgc3Vic2NyaWJlciBsaXN0ICovCiAKLQl0aXBjX3JlZl9sb2NrKHN1YnNjcmliZXItPnJlZik7CiAJc3Bpbl9sb2NrX2JoKCZ0b3BzcnYubG9jayk7CiAJbGlzdF9hZGQoJnN1YnNjcmliZXItPnN1YnNjcmliZXJfbGlzdCwgJnRvcHNydi5zdWJzY3JpYmVyX2xpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZ0b3BzcnYubG9jayk7CiAKLQkvKgotCSAqIFN1YnNjcmliZSBub3cgaWYgbWVzc2FnZSBjb250YWlucyBhIHN1YnNjcmlwdGlvbiwKLQkgKiBvdGhlcndpc2Ugc2VuZCBhbiBlbXB0eSByZXNwb25zZSB0byBjb21wbGV0ZSBjb25uZWN0aW9uIGhhbmRzaGFraW5nCi0JICovCisJLyogVW5sb2NrIHNlcnZlciBwb3J0ICovCiAKLQlzdWJzY3JpYmVyX2xvY2sgPSBzdWJzY3JpYmVyLT5sb2NrOwotCWlmIChzaXplKQotCQlzdWJzY3Jfc3Vic2NyaWJlKChzdHJ1Y3QgdGlwY19zdWJzY3IgKilkYXRhLCBzdWJzY3JpYmVyKTsKLQllbHNlCi0JCXRpcGNfc2VuZChzdWJzY3JpYmVyLT5wb3J0X3JlZiwgMSwgJm1zZ19zZWN0KTsKKwlzZXJ2ZXJfcG9ydF9yZWYgPSBzdWJzY3JpYmVyLT5wb3J0X3JlZjsKKwlzcGluX3VubG9ja19iaChzdWJzY3JpYmVyLT5sb2NrKTsKIAotCXNwaW5fdW5sb2NrX2JoKHN1YnNjcmliZXJfbG9jayk7CisJLyogU2VuZCBhbiBBQ0stIHRvIGNvbXBsZXRlIGNvbm5lY3Rpb24gaGFuZHNoYWtpbmcgKi8KKworCXRpcGNfc2VuZChzZXJ2ZXJfcG9ydF9yZWYsIDEsICZtc2dfc2VjdCk7CisKKwkvKiBIYW5kbGUgb3B0aW9uYWwgc3Vic2NyaXB0aW9uIHJlcXVlc3QgKi8KKworCWlmIChzaXplICE9IDApIHsKKwkJc3Vic2NyX2Nvbm5fbXNnX2V2ZW50KHN1YnNjcmliZXIsIHNlcnZlcl9wb3J0X3JlZiwKKwkJCQkgICAgICBidWYsIGRhdGEsIHNpemUpOworCX0KIH0KIAogaW50IHRpcGNfc3Vic2NyX3N0YXJ0KHZvaWQpCkBAIC01NzQsOCArNTk3LDggQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN1YnNjcmliZXIsIHN1YnNjcmliZXJfdGVtcCwKIAkJCQkJICZ0b3BzcnYuc3Vic2NyaWJlcl9saXN0LAogCQkJCQkgc3Vic2NyaWJlcl9saXN0KSB7Ci0JCQl0aXBjX3JlZl9sb2NrKHN1YnNjcmliZXItPnJlZik7CiAJCQlzdWJzY3JpYmVyX2xvY2sgPSBzdWJzY3JpYmVyLT5sb2NrOworCQkJc3Bpbl9sb2NrX2JoKHN1YnNjcmliZXJfbG9jayk7CiAJCQlzdWJzY3JfdGVybWluYXRlKHN1YnNjcmliZXIpOwogCQkJc3Bpbl91bmxvY2tfYmgoc3Vic2NyaWJlcl9sb2NrKTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc3Vic2NyLmggYi9uZXQvdGlwYy9zdWJzY3IuaAppbmRleCA5M2E4ZTY3Li40NWQ4OWJmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zdWJzY3IuaAorKysgYi9uZXQvdGlwYy9zdWJzY3IuaApAQCAtMSw4ICsxLDggQEAKIC8qCi0gKiBuZXQvdGlwYy9zdWJzY3IuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIHN1YnNjcmlwdGlvbiBzZXJ2aWNlCisgKiBuZXQvdGlwYy9zdWJzY3IuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIG5ldHdvcmsgdG9wb2xvZ3kgc2VydmljZQogICoKICAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LCBXaW5kIFJpdmVyIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA3LCBXaW5kIFJpdmVyIFN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNywzNCArMzcsNDQgQEAKICNpZm5kZWYgX1RJUENfU1VCU0NSX0gKICNkZWZpbmUgX1RJUENfU1VCU0NSX0gKIAorc3RydWN0IHN1YnNjcmlwdGlvbjsKKwordHlwZWRlZiB2b2lkICgqdGlwY19zdWJzY3JfZXZlbnQpIChzdHJ1Y3Qgc3Vic2NyaXB0aW9uICpzdWIsCisJCQkJICAgdTMyIGZvdW5kX2xvd2VyLCB1MzIgZm91bmRfdXBwZXIsCisJCQkJICAgdTMyIGV2ZW50LCB1MzIgcG9ydF9yZWYsIHUzMiBub2RlKTsKKwogLyoqCiAgKiBzdHJ1Y3Qgc3Vic2NyaXB0aW9uIC0gVElQQyBuZXR3b3JrIHRvcG9sb2d5IHN1YnNjcmlwdGlvbiBvYmplY3QKICAqIEBzZXE6IG5hbWUgc2VxdWVuY2UgYXNzb2NpYXRlZCB3aXRoIHN1YnNjcmlwdGlvbgogICogQHRpbWVvdXQ6IGR1cmF0aW9uIG9mIHN1YnNjcmlwdGlvbiAoaW4gbXMpCiAgKiBAZmlsdGVyOiBldmVudCBmaWx0ZXJpbmcgdG8gYmUgZG9uZSBmb3Igc3Vic2NyaXB0aW9uCi0gKiBAZXZ0OiB0ZW1wbGF0ZSBmb3IgZXZlbnRzIGdlbmVyYXRlZCBieSBzdWJzY3JpcHRpb24KLSAqIEBzdWJzY3JpcHRpb25fbGlzdDogYWRqYWNlbnQgc3Vic2NyaXB0aW9ucyBpbiBzdWJzY3JpYmVyJ3Mgc3Vic2NyaXB0aW9uIGxpc3QKKyAqIEBldmVudF9jYjogcm91dGluZSBpbnZva2VkIHdoZW4gYSBzdWJzY3JpcHRpb24gZXZlbnQgaXMgZGV0ZWN0ZWQKKyAqIEB0aW1lcjogdGltZXIgZ292ZXJuaW5nIHN1YnNjcmlwdGlvbiBkdXJhdGlvbiAob3B0aW9uYWwpCiAgKiBAbmFtZXNlcV9saXN0OiBhZGphY2VudCBzdWJzY3JpcHRpb25zIGluIG5hbWUgc2VxdWVuY2UncyBzdWJzY3JpcHRpb24gbGlzdAotICogQHRpbWVyX3JlZjogcmVmZXJlbmNlIHRvIHRpbWVyIGdvdmVybmluZyBzdWJzY3JpcHRpb24gZHVyYXRpb24gKG1heSBiZSBOVUxMKQotICogQG93bmVyOiBwb2ludGVyIHRvIHN1YnNjcmliZXIgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1YnNjcmlwdGlvbgorICogQHN1YnNjcmlwdGlvbl9saXN0OiBhZGphY2VudCBzdWJzY3JpcHRpb25zIGluIHN1YnNjcmliZXIncyBzdWJzY3JpcHRpb24gbGlzdAorICogQHNlcnZlcl9yZWY6IG9iamVjdCByZWZlcmVuY2Ugb2Ygc2VydmVyIHBvcnQgYXNzb2NpYXRlZCB3aXRoIHN1YnNjcmlwdGlvbgorICogQHN3YXA6IGluZGljYXRlcyBpZiBzdWJzY3JpYmVyIHVzZXMgb3Bwb3NpdGUgZW5kaWFubmVzcyBpbiBpdHMgbWVzc2FnZXMKKyAqIEBldnQ6IHRlbXBsYXRlIGZvciBldmVudHMgZ2VuZXJhdGVkIGJ5IHN1YnNjcmlwdGlvbgogICovCiAKIHN0cnVjdCBzdWJzY3JpcHRpb24gewogCXN0cnVjdCB0aXBjX25hbWVfc2VxIHNlcTsKIAl1MzIgdGltZW91dDsKIAl1MzIgZmlsdGVyOwotCXN0cnVjdCB0aXBjX2V2ZW50IGV2dDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHN1YnNjcmlwdGlvbl9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgbmFtZXNlcV9saXN0OworCXRpcGNfc3Vic2NyX2V2ZW50IGV2ZW50X2NiOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXN0cnVjdCBzdWJzY3JpYmVyICpvd25lcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5hbWVzZXFfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN1YnNjcmlwdGlvbl9saXN0OworCXUzMiBzZXJ2ZXJfcmVmOworCWludCBzd2FwOworCXN0cnVjdCB0aXBjX2V2ZW50IGV2dDsKIH07CiAKLWludCB0aXBjX3N1YnNjcl9vdmVybGFwKHN0cnVjdCBzdWJzY3JpcHRpb24gKiBzdWIsCitpbnQgdGlwY19zdWJzY3Jfb3ZlcmxhcChzdHJ1Y3Qgc3Vic2NyaXB0aW9uICpzdWIsCiAJCQl1MzIgZm91bmRfbG93ZXIsCiAJCQl1MzIgZm91bmRfdXBwZXIpOwogCi12b2lkIHRpcGNfc3Vic2NyX3JlcG9ydF9vdmVybGFwKHN0cnVjdCBzdWJzY3JpcHRpb24gKiBzdWIsCit2b2lkIHRpcGNfc3Vic2NyX3JlcG9ydF9vdmVybGFwKHN0cnVjdCBzdWJzY3JpcHRpb24gKnN1YiwKIAkJCQl1MzIgZm91bmRfbG93ZXIsCiAJCQkJdTMyIGZvdW5kX3VwcGVyLAogCQkJCXUzMiBldmVudCwKZGlmZiAtLWdpdCBhL25ldC90aXBjL3VzZXJfcmVnLmMgYi9uZXQvdGlwYy91c2VyX3JlZy5jCmluZGV4IDQxNDZjNDAuLjUwNjkyODgwIDEwMDY0NAotLS0gYS9uZXQvdGlwYy91c2VyX3JlZy5jCisrKyBiL25ldC90aXBjL3VzZXJfcmVnLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAkJfQogCX0KIAlzcGluX3VubG9ja19iaCgmcmVnX2xvY2spOwotCXJldHVybiB1c2VycyA/IFRJUENfT0sgOiAtRU5PTUVNOworCXJldHVybiB1c2VycyA/IDAgOiAtRU5PTUVNOwogfQogCiAvKioKQEAgLTEyOSw3ICsxMjksNyBAQAogCQkJdGlwY19rX3NpZ25hbCgoSGFuZGxlcilyZWdfY2FsbGJhY2ssCiAJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpJnVzZXJzW3VdKTsKIAl9Ci0JcmV0dXJuIFRJUENfT0s7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTg0LDcgKzE4NCw3IEBACiAKIAlpZiAoY2IgJiYgKHRpcGNfbW9kZSAhPSBUSVBDX05PVF9SVU5OSU5HKSkKIAkJdGlwY19rX3NpZ25hbCgoSGFuZGxlcilyZWdfY2FsbGJhY2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yMzAsNyArMjMwLDcgQEAKIAlzdHJ1Y3QgdGlwY191c2VyICp1c2VyX3B0cjsKIAogCWlmICh1cF9wdHItPnVzZXJfcmVmID09IDApCi0JCXJldHVybiBUSVBDX09LOworCQlyZXR1cm4gMDsKIAlpZiAodXBfcHRyLT51c2VyX3JlZiA+IE1BWF9VU0VSSUQpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICgodGlwY19tb2RlID09IFRJUENfTk9UX1JVTk5JTkcpIHx8ICF1c2VycyApCkBAIC0yNDAsNyArMjQwLDcgQEAKIAl1c2VyX3B0ciA9ICZ1c2Vyc1t1cF9wdHItPnVzZXJfcmVmXTsKIAlsaXN0X2FkZCgmdXBfcHRyLT51cG9ydF9saXN0LCAmdXNlcl9wdHItPnBvcnRzKTsKIAlzcGluX3VubG9ja19iaCgmcmVnX2xvY2spOwotCXJldHVybiBUSVBDX09LOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTI1MCw3ICsyNTAsNyBAQAogaW50IHRpcGNfcmVnX3JlbW92ZV9wb3J0KHN0cnVjdCB1c2VyX3BvcnQgKnVwX3B0cikKIHsKIAlpZiAodXBfcHRyLT51c2VyX3JlZiA9PSAwKQotCQlyZXR1cm4gVElQQ19PSzsKKwkJcmV0dXJuIDA7CiAJaWYgKHVwX3B0ci0+dXNlcl9yZWYgPiBNQVhfVVNFUklEKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIXVzZXJzICkKQEAgLTI1OSw2ICsyNTksNiBAQAogCXNwaW5fbG9ja19iaCgmcmVnX2xvY2spOwogCWxpc3RfZGVsX2luaXQoJnVwX3B0ci0+dXBvcnRfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJnJlZ19sb2NrKTsKLQlyZXR1cm4gVElQQ19PSzsKKwlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IDc4MzMxN2QuLjcwY2ViMTYgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2FmX3VuaXguYworKysgYi9uZXQvdW5peC9hZl91bml4LmMKQEAgLTgsOCArOCw2IEBACiAgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBWZXJzaW9uOgkkSWQ6IGFmX3VuaXguYyx2IDEuMTMzIDIwMDIvMDIvMDggMDM6NTc6MTkgZGF2ZW0gRXhwICQKLSAqCiAgKiBGaXhlczoKICAqCQlMaW51cyBUb3J2YWxkcwk6CUFzc29ydGVkIGJ1ZyBjdXJlcy4KICAqCQlOaWliZSBZdXRha2EJOglhc3luYyBJL08gc3VwcG9ydC4KZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvS2NvbmZpZyBiL25ldC93YW5yb3V0ZXIvS2NvbmZpZwppbmRleCAxZGViZTFjLi42MWNlYWUwIDEwMDY0NAotLS0gYS9uZXQvd2Fucm91dGVyL0tjb25maWcKKysrIGIvbmV0L3dhbnJvdXRlci9LY29uZmlnCkBAIC0yMCw4ICsyMCw2IEBACiAJICB3aXNoIHRvIHVzZSB5b3VyIExpbnV4IGJveCBhcyBhIFdBTiByb3V0ZXIsIHNheSBZIGhlcmUgYW5kIGFsc28gdG8KIAkgIHRoZSBXQU4gZHJpdmVyIGZvciB5b3VyIGNhcmQsIGJlbG93LiAgWW91IHdpbGwgdGhlbiBuZWVkIHRoZQogCSAgd2FuLXRvb2xzIHBhY2thZ2Ugd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20gPGZ0cDovL2Z0cC5zYW5nb21hLmNvbS8+LgotCSAgUmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbi4KIAogCSAgVG8gY29tcGlsZSBXQU4gcm91dGluZyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3YW5yb3V0ZXIuCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCmluZGV4IDlhYjMxYTMuLmIyMTBhODggMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCkBAIC0zNTAsOSArMzUwLDkgQEAKICAqCW8gZXhlY3V0ZSByZXF1ZXN0ZWQgYWN0aW9uIG9yIHBhc3MgY29tbWFuZCB0byB0aGUgZGV2aWNlIGRyaXZlcgogICovCiAKLWludCB3YW5yb3V0ZXJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorbG9uZyB3YW5yb3V0ZXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnIgPSAwOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGVudDsKIAlzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2OwpAQCAtMzcyLDYgKzM3Miw3IEBACiAJaWYgKHdhbmRldi0+bWFnaWMgIT0gUk9VVEVSX01BR0lDKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWxvY2tfa2VybmVsKCk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFJPVVRFUl9TRVRVUDoKIAkJZXJyID0gd2Fucm91dGVyX2RldmljZV9zZXR1cCh3YW5kZXYsIGRhdGEpOwpAQCAtNDAzLDYgKzQwNCw3IEBACiAJCQllcnIgPSB3YW5kZXYtPmlvY3RsKHdhbmRldiwgY21kLCBhcmcpOwogCQllbHNlIGVyciA9IC1FSU5WQUw7CiAJfQorCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbnByb2MuYyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCmluZGV4IDViZWJlNDAuLjI2N2Y3ZmYgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAkucmVhZAkgPSBzZXFfcmVhZCwKIAkubGxzZWVrCSA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotCS5pb2N0bAkgPSB3YW5yb3V0ZXJfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsICA9IHdhbnJvdXRlcl9pb2N0bCwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDc5MjcwOTAuLmFiMDE1YzYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9LY29uZmlnCisrKyBiL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC0yOSwzICsyOSwxNCBAQAogCiAJICBTYXkgTiAoaWYgeW91IGNhbikgdW5sZXNzIHlvdSBrbm93IHlvdSBuZWVkIHdpcmVsZXNzCiAJICBleHRlbnNpb25zIGZvciBleHRlcm5hbCBtb2R1bGVzLgorCitjb25maWcgV0lSRUxFU1NfRVhUX1NZU0ZTCisJYm9vbCAiV2lyZWxlc3MgZXh0ZW5zaW9ucyBzeXNmcyBmaWxlcyIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVCAmJiBTWVNGUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGRlcHJlY2F0ZWQgd2lyZWxlc3Mgc3RhdGlzdGljcworCSAgZmlsZXMgaW4gL3N5cy9jbGFzcy9uZXQvKi93aXJlbGVzcy8uIFRoZSBzYW1lIGluZm9ybWF0aW9uCisJICBpcyBhdmFpbGFibGUgdmlhIHRoZSBpb2N0bHMgYXMgd2VsbC4KKworCSAgU2F5IFkgaWYgeW91IGhhdmUgcHJvZ3JhbXMgdXNpbmcgaXQgKHdlIGRvbid0IGtub3cgb2YgYW55KS4KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IDgwYWZhY2QuLmYxZGEwYjkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMTQzLDggKzE0MywxMSBAQAogaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJY2hhciAqbmV3bmFtZSkKIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKIAlpbnQgaWR4LCB0YWtlbiA9IC0xLCByZXN1bHQsIGRpZ2l0czsKIAorCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisKIAkvKiBwcm9oaWJpdCBjYWxsaW5nIHRoZSB0aGluZyBwaHklZCB3aGVuICVkIGlzIG5vdCBpdHMgbnVtYmVyICovCiAJc3NjYW5mKG5ld25hbWUsIFBIWV9OQU1FICIlZCVuIiwgJmlkeCwgJnRha2VuKTsKIAlpZiAodGFrZW4gPT0gc3RybGVuKG5ld25hbWUpICYmIGlkeCAhPSByZGV2LT5pZHgpIHsKQEAgLTE1NiwxNCArMTU5LDMwIEBACiAJCSAqIGRlbnkgdGhlIG5hbWUgaWYgaXQgaXMgcGh5PGlkeD4gd2hlcmUgPGlkeD4gaXMgcHJpbnRlZAogCQkgKiB3aXRob3V0IGxlYWRpbmcgemVyb2VzLiB0YWtlbiA9PSBzdHJsZW4obmV3bmFtZSkgaGVyZQogCQkgKi8KKwkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJaWYgKHRha2VuID09IHN0cmxlbihQSFlfTkFNRSkgKyBkaWdpdHMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQkvKiB0aGlzIHdpbGwgY2hlY2sgZm9yIGNvbGxpc2lvbnMgKi8KKworCS8qIElnbm9yZSBub3AgcmVuYW1lcyAqLworCXJlc3VsdCA9IDA7CisJaWYgKHN0cmNtcChuZXduYW1lLCBkZXZfbmFtZSgmcmRldi0+d2lwaHkuZGV2KSkgPT0gMCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyogRW5zdXJlIGFub3RoZXIgZGV2aWNlIGRvZXMgbm90IGFscmVhZHkgaGF2ZSB0aGlzIG5hbWUuICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlpZiAoc3RyY21wKG5ld25hbWUsIGRldl9uYW1lKCZkcnYtPndpcGh5LmRldikpID09IDApCisJCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyogdGhpcyB3aWxsIG9ubHkgY2hlY2sgZm9yIGNvbGxpc2lvbnMgaW4gc3lzZnMKKwkgKiB3aGljaCBpcyBub3QgZXZlbiBhbHdheXMgY29tcGlsZWQgaW4uCisJICovCiAJcmVzdWx0ID0gZGV2aWNlX3JlbmFtZSgmcmRldi0+d2lwaHkuZGV2LCBuZXduYW1lKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OworCQlnb3RvIG91dF91bmxvY2s7CiAKIAlpZiAoIWRlYnVnZnNfcmVuYW1lKHJkZXYtPndpcGh5LmRlYnVnZnNkaXItPmRfcGFyZW50LAogCQkJICAgIHJkZXYtPndpcGh5LmRlYnVnZnNkaXIsCkBAIC0xNzIsOSArMTkxLDEzIEBACiAJCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IGZhaWxlZCB0byByZW5hbWUgZGVidWdmcyBkaXIgdG8gJXMhXG4iLAogCQkgICAgICAgbmV3bmFtZSk7CiAKLQlubDgwMjExX25vdGlmeV9kZXZfcmVuYW1lKHJkZXYpOworCXJlc3VsdCA9IDA7CitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlpZiAocmVzdWx0ID09IDApCisJCW5sODAyMTFfbm90aWZ5X2Rldl9yZW5hbWUocmRldik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKiBleHBvcnRlZCBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IGZiNzVmMjYuLmI3ZmVmZmYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtMTk5LDEyICsxOTksMTQgQEAKIAogCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgewotCQlpZiAoKytpZHggPCBzdGFydCkKKwkJaWYgKCsraWR4IDw9IHN0YXJ0KQogCQkJY29udGludWU7CiAJCWlmIChubDgwMjExX3NlbmRfd2lwaHkoc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkgICAgICAgY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwKLQkJCQkgICAgICAgZGV2KSA8IDApCisJCQkJICAgICAgIGRldikgPCAwKSB7CisJCQlpZHgtLTsKIAkJCWJyZWFrOworCQl9CiAJfQogCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JhZGlvdGFwLmMgYi9uZXQvd2lyZWxlc3MvcmFkaW90YXAuYwppbmRleCAyOGZiZDBiLi5mNTkxODcxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmFkaW90YXAuYworKysgYi9uZXQvd2lyZWxlc3MvcmFkaW90YXAuYwpAQCAtNTksMjMgKzU5LDIxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogc2FuaXR5IGNoZWNrIGZvciBhbGxvd2VkIGxlbmd0aCBhbmQgcmFkaW90YXAgbGVuZ3RoIGZpZWxkICovCi0JaWYgKG1heF9sZW5ndGggPCBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKCZyYWRpb3RhcF9oZWFkZXItPml0X2xlbikpKQorCWlmIChtYXhfbGVuZ3RoIDwgZ2V0X3VuYWxpZ25lZF9sZTE2KCZyYWRpb3RhcF9oZWFkZXItPml0X2xlbikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaXRlcmF0b3ItPnJ0aGVhZGVyID0gcmFkaW90YXBfaGVhZGVyOwotCWl0ZXJhdG9yLT5tYXhfbGVuZ3RoID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgKLQkJCQkJCSZyYWRpb3RhcF9oZWFkZXItPml0X2xlbikpOworCWl0ZXJhdG9yLT5tYXhfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZyYWRpb3RhcF9oZWFkZXItPml0X2xlbik7CiAJaXRlcmF0b3ItPmFyZ19pbmRleCA9IDA7Ci0JaXRlcmF0b3ItPmJpdG1hcF9zaGlmdGVyID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgKLQkJCQkJCSZyYWRpb3RhcF9oZWFkZXItPml0X3ByZXNlbnQpKTsKKwlpdGVyYXRvci0+Yml0bWFwX3NoaWZ0ZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJnJhZGlvdGFwX2hlYWRlci0+aXRfcHJlc2VudCk7CiAJaXRlcmF0b3ItPmFyZyA9ICh1OCAqKXJhZGlvdGFwX2hlYWRlciArIHNpemVvZigqcmFkaW90YXBfaGVhZGVyKTsKIAlpdGVyYXRvci0+dGhpc19hcmcgPSBOVUxMOwogCiAJLyogZmluZCBwYXlsb2FkIHN0YXJ0IGFsbG93aW5nIGZvciBleHRlbmRlZCBiaXRtYXAocykgKi8KIAogCWlmICh1bmxpa2VseShpdGVyYXRvci0+Yml0bWFwX3NoaWZ0ZXIgJiAoMTw8SUVFRTgwMjExX1JBRElPVEFQX0VYVCkpKSB7Ci0JCXdoaWxlIChsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMzIgKilpdGVyYXRvci0+YXJnKSkgJgotCQkJCSAgICgxPDxJRUVFODAyMTFfUkFESU9UQVBfRVhUKSkgeworCQl3aGlsZSAoZ2V0X3VuYWxpZ25lZF9sZTMyKGl0ZXJhdG9yLT5hcmcpICYKKwkJICAgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSB7CiAJCQlpdGVyYXRvci0+YXJnICs9IHNpemVvZih1MzIpOwogCiAJCQkvKgpAQCAtMjQxLDggKzIzOSw4IEBACiAJCQlpZiAoaXRlcmF0b3ItPmJpdG1hcF9zaGlmdGVyICYgMSkgewogCQkJCS8qIGIzMSB3YXMgc2V0LCB0aGVyZSBpcyBtb3JlICovCiAJCQkJLyogbW92ZSB0byBuZXh0IHUzMiBiaXRtYXAgKi8KLQkJCQlpdGVyYXRvci0+Yml0bWFwX3NoaWZ0ZXIgPSBsZTMyX3RvX2NwdSgKLQkJCQkJZ2V0X3VuYWxpZ25lZChpdGVyYXRvci0+bmV4dF9iaXRtYXApKTsKKwkJCQlpdGVyYXRvci0+Yml0bWFwX3NoaWZ0ZXIgPQorCQkJCSAgICBnZXRfdW5hbGlnbmVkX2xlMzIoaXRlcmF0b3ItPm5leHRfYml0bWFwKTsKIAkJCQlpdGVyYXRvci0+bmV4dF9iaXRtYXArKzsKIAkJCX0gZWxzZQogCQkJCS8qIG5vIG1vcmUgYml0bWFwczogZW5kICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC5jIGIvbmV0L3dpcmVsZXNzL3dleHQuYwppbmRleCA5NDcxODhhLi5kZjViMzg4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LmMKQEAgLTUwMCw3ICs1MDAsNyBAQAogLyoKICAqIENhbGN1bGF0ZSBzaXplIG9mIHByaXZhdGUgYXJndW1lbnRzCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdldF9wcml2X3NpemUoX191MTYJYXJncykKK3N0YXRpYyBpbnQgZ2V0X3ByaXZfc2l6ZShfX3UxNiBhcmdzKQogewogCWludAludW0gPSBhcmdzICYgSVdfUFJJVl9TSVpFX01BU0s7CiAJaW50CXR5cGUgPSAoYXJncyAmIElXX1BSSVZfVFlQRV9NQVNLKSA+PiAxMjsKQEAgLTUxMiwxMCArNTEyLDkgQEAKIC8qCiAgKiBSZS1jYWxjdWxhdGUgdGhlIHNpemUgb2YgcHJpdmF0ZSBhcmd1bWVudHMKICAqLwotc3RhdGljIGlubGluZSBpbnQgYWRqdXN0X3ByaXZfc2l6ZShfX3UxNgkJYXJncywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICoJd3JxdSkKK3N0YXRpYyBpbnQgYWRqdXN0X3ByaXZfc2l6ZShfX3UxNiBhcmdzLCBzdHJ1Y3QgaXdfcG9pbnQgKml3cCkKIHsKLQlpbnQJbnVtID0gd3JxdS0+ZGF0YS5sZW5ndGg7CisJaW50CW51bSA9IGl3cC0+bGVuZ3RoOwogCWludAltYXggPSBhcmdzICYgSVdfUFJJVl9TSVpFX01BU0s7CiAJaW50CXR5cGUgPSAoYXJncyAmIElXX1BSSVZfVFlQRV9NQVNLKSA+PiAxMjsKIApAQCAtNjk1LDE5ICs2OTQsMTUwIEBACiAgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBpb2N0bF9zdGFuZGFyZF9pd19wb2ludChzdHJ1Y3QgaXdfcG9pbnQgKml3cCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaXdfaW9jdGxfZGVzY3JpcHRpb24gKmRlc2NyLAorCQkJCSAgIGl3X2hhbmRsZXIgaGFuZGxlciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvKQoreworCWludCBlcnIsIGV4dHJhX3NpemUsIHVzZXJfbGVuZ3RoID0gMCwgZXNzaWRfY29tcGF0ID0gMDsKKwljaGFyICpleHRyYTsKKworCS8qIENhbGN1bGF0ZSBzcGFjZSBuZWVkZWQgYnkgYXJndW1lbnRzLiBBbHdheXMgYWxsb2NhdGUKKwkgKiBmb3IgbWF4IHNwYWNlLgorCSAqLworCWV4dHJhX3NpemUgPSBkZXNjci0+bWF4X3Rva2VucyAqIGRlc2NyLT50b2tlbl9zaXplOworCisJLyogQ2hlY2sgbmVlZCBmb3IgRVNTSUQgY29tcGF0aWJpbGl0eSBmb3IgV0UgPCAyMSAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DU0lXRVNTSUQ6CisJY2FzZSBTSU9DR0lXRVNTSUQ6CisJY2FzZSBTSU9DU0lXTklDS046CisJY2FzZSBTSU9DR0lXTklDS046CisJCWlmIChpd3AtPmxlbmd0aCA9PSBkZXNjci0+bWF4X3Rva2VucyArIDEpCisJCQllc3NpZF9jb21wYXQgPSAxOworCQllbHNlIGlmIChJV19JU19TRVQoY21kKSAmJiAoaXdwLT5sZW5ndGggIT0gMCkpIHsKKwkJCWNoYXIgZXNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKKworCQkJZXJyID0gY29weV9mcm9tX3VzZXIoZXNzaWQsIGl3cC0+cG9pbnRlciwKKwkJCQkJICAgICBpd3AtPmxlbmd0aCAqCisJCQkJCSAgICAgZGVzY3ItPnRva2VuX3NpemUpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJaWYgKGVzc2lkW2l3cC0+bGVuZ3RoIC0gMV0gPT0gJ1wwJykKKwkJCQllc3NpZF9jb21wYXQgPSAxOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWl3cC0+bGVuZ3RoIC09IGVzc2lkX2NvbXBhdDsKKworCS8qIENoZWNrIHdoYXQgdXNlciBzcGFjZSBpcyBnaXZpbmcgdXMgKi8KKwlpZiAoSVdfSVNfU0VUKGNtZCkpIHsKKwkJLyogQ2hlY2sgTlVMTCBwb2ludGVyICovCisJCWlmICghaXdwLT5wb2ludGVyICYmIGl3cC0+bGVuZ3RoICE9IDApCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJLyogQ2hlY2sgaWYgbnVtYmVyIG9mIHRva2VuIGZpdHMgd2l0aGluIGJvdW5kcyAqLworCQlpZiAoaXdwLT5sZW5ndGggPiBkZXNjci0+bWF4X3Rva2VucykKKwkJCXJldHVybiAtRTJCSUc7CisJCWlmIChpd3AtPmxlbmd0aCA8IGRlc2NyLT5taW5fdG9rZW5zKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJLyogQ2hlY2sgTlVMTCBwb2ludGVyICovCisJCWlmICghaXdwLT5wb2ludGVyKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCS8qIFNhdmUgdXNlciBzcGFjZSBidWZmZXIgc2l6ZSBmb3IgY2hlY2tpbmcgKi8KKwkJdXNlcl9sZW5ndGggPSBpd3AtPmxlbmd0aDsKKworCQkvKiBEb24ndCBjaGVjayBpZiB1c2VyX2xlbmd0aCA+IG1heCB0byBhbGxvdyBmb3J3YXJkCisJCSAqIGNvbXBhdGliaWxpdHkuIFRoZSB0ZXN0IHVzZXJfbGVuZ3RoIDwgbWluIGlzCisJCSAqIGltcGxpZWQgYnkgdGhlIHRlc3QgYXQgdGhlIGVuZC4KKwkJICovCisKKwkJLyogU3VwcG9ydCBmb3IgdmVyeSBsYXJnZSByZXF1ZXN0cyAqLworCQlpZiAoKGRlc2NyLT5mbGFncyAmIElXX0RFU0NSX0ZMQUdfTk9NQVgpICYmCisJCSAgICAodXNlcl9sZW5ndGggPiBkZXNjci0+bWF4X3Rva2VucykpIHsKKwkJCS8qIEFsbG93IHVzZXJzcGFjZSB0byBHRVQgbW9yZSB0aGFuIG1heCBzbworCQkJICogd2UgY2FuIHN1cHBvcnQgYW55IHNpemUgR0VUIHJlcXVlc3RzLgorCQkJICogVGhlcmUgaXMgc3RpbGwgYSBsaW1pdCA6IC1FTk9NRU0uCisJCQkgKi8KKwkJCWV4dHJhX3NpemUgPSB1c2VyX2xlbmd0aCAqIGRlc2NyLT50b2tlbl9zaXplOworCisJCQkvKiBOb3RlIDogdXNlcl9sZW5ndGggaXMgb3JpZ2luYWxseSBhIF9fdTE2LAorCQkJICogYW5kIHRva2VuX3NpemUgaXMgY29udHJvbGxlZCBieSB1cywKKwkJCSAqIHNvIGV4dHJhX3NpemUgd29uJ3QgZ2V0IG5lZ2F0aXZlIGFuZAorCQkJICogd29uJ3Qgb3ZlcmZsb3cuLi4KKwkJCSAqLworCQl9CisJfQorCisJLyoga3phbGxvYygpIGVuc3VyZXMgTlVMTC10ZXJtaW5hdGlvbiBmb3IgZXNzaWRfY29tcGF0LiAqLworCWV4dHJhID0ga3phbGxvYyhleHRyYV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV4dHJhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIElmIGl0IGlzIGEgU0VULCBnZXQgYWxsIHRoZSBleHRyYSBkYXRhIGluIGhlcmUgKi8KKwlpZiAoSVdfSVNfU0VUKGNtZCkgJiYgKGl3cC0+bGVuZ3RoICE9IDApKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcihleHRyYSwgaXdwLT5wb2ludGVyLAorCQkJCSAgIGl3cC0+bGVuZ3RoICoKKwkJCQkgICBkZXNjci0+dG9rZW5fc2l6ZSkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWVyciA9IGhhbmRsZXIoZGV2LCBpbmZvLCAodW5pb24gaXdyZXFfZGF0YSAqKSBpd3AsIGV4dHJhKTsKKworCWl3cC0+bGVuZ3RoICs9IGVzc2lkX2NvbXBhdDsKKworCS8qIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHJldHVybiB0byB0aGUgdXNlciAqLworCWlmICghZXJyICYmIElXX0lTX0dFVChjbWQpKSB7CisJCS8qIENoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCBidWZmZXIgdXAgdGhlcmUgKi8KKwkJaWYgKHVzZXJfbGVuZ3RoIDwgaXdwLT5sZW5ndGgpIHsKKwkJCWVyciA9IC1FMkJJRzsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGNvcHlfdG9fdXNlcihpd3AtPnBvaW50ZXIsIGV4dHJhLAorCQkJCSBpd3AtPmxlbmd0aCAqCisJCQkJIGRlc2NyLT50b2tlbl9zaXplKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogR2VuZXJhdGUgYW4gZXZlbnQgdG8gbm90aWZ5IGxpc3RlbmVycyBvZiB0aGUgY2hhbmdlICovCisJaWYgKChkZXNjci0+ZmxhZ3MgJiBJV19ERVNDUl9GTEFHX0VWRU5UKSAmJiBlcnIgPT0gLUVJV0NPTU1JVCkgeworCQl1bmlvbiBpd3JlcV9kYXRhICpkYXRhID0gKHVuaW9uIGl3cmVxX2RhdGEgKikgaXdwOworCisJCWlmIChkZXNjci0+ZmxhZ3MgJiBJV19ERVNDUl9GTEFHX1JFU1RSSUNUKQorCQkJLyogSWYgdGhlIGV2ZW50IGlzIHJlc3RyaWN0ZWQsIGRvbid0CisJCQkgKiBleHBvcnQgdGhlIHBheWxvYWQuCisJCQkgKi8KKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBjbWQsIGRhdGEsIE5VTEwpOworCQllbHNlCisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgY21kLCBkYXRhLCBleHRyYSk7CisJfQorCitvdXQ6CisJa2ZyZWUoZXh0cmEpOworCXJldHVybiBlcnI7Cit9CisKIC8qCiAgKiBXcmFwcGVyIHRvIGNhbGwgYSBzdGFuZGFyZCBXaXJlbGVzcyBFeHRlbnNpb24gaGFuZGxlci4KICAqIFdlIGRvIHZhcmlvdXMgY2hlY2tzIGFuZCBhbHNvIHRha2UgY2FyZSBvZiBtb3ZpbmcgZGF0YSBiZXR3ZWVuCiAgKiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuCiAgKi8KIHN0YXRpYyBpbnQgaW9jdGxfc3RhbmRhcmRfY2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaWZyZXEgKgkJaWZyLAorCQkJICAgICAgIHN0cnVjdCBpd3JlcQkJKml3ciwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQJCWNtZCwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvCSppbmZvLAogCQkJICAgICAgIGl3X2hhbmRsZXIJCWhhbmRsZXIpCiB7Ci0Jc3RydWN0IGl3cmVxICoJCQkJaXdyID0gKHN0cnVjdCBpd3JlcSAqKSBpZnI7CiAJY29uc3Qgc3RydWN0IGl3X2lvY3RsX2Rlc2NyaXB0aW9uICoJZGVzY3I7Ci0Jc3RydWN0IGl3X3JlcXVlc3RfaW5mbwkJCWluZm87CiAJaW50CQkJCQlyZXQgPSAtRUlOVkFMOwogCiAJLyogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSU9DVEwgKi8KQEAgLTcxNSwxNDUgKzg0NSwxOSBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJZGVzY3IgPSAmKHN0YW5kYXJkX2lvY3RsW2NtZCAtIFNJT0NJV0ZJUlNUXSk7CiAKLQkvKiBQcmVwYXJlIHRoZSBjYWxsICovCi0JaW5mby5jbWQgPSBjbWQ7Ci0JaW5mby5mbGFncyA9IDA7Ci0KIAkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgcG9pbnRlciB0byB1c2VyIHNwYWNlIGRhdGEgb3Igbm90ICovCiAJaWYgKGRlc2NyLT5oZWFkZXJfdHlwZSAhPSBJV19IRUFERVJfVFlQRV9QT0lOVCkgewogCiAJCS8qIE5vIGV4dHJhIGFyZ3VtZW50cy4gVHJpdmlhbCB0byBoYW5kbGUgKi8KLQkJcmV0ID0gaGFuZGxlcihkZXYsICZpbmZvLCAmKGl3ci0+dSksIE5VTEwpOworCQlyZXQgPSBoYW5kbGVyKGRldiwgaW5mbywgJihpd3ItPnUpLCBOVUxMKTsKIAogCQkvKiBHZW5lcmF0ZSBhbiBldmVudCB0byBub3RpZnkgbGlzdGVuZXJzIG9mIHRoZSBjaGFuZ2UgKi8KIAkJaWYgKChkZXNjci0+ZmxhZ3MgJiBJV19ERVNDUl9GTEFHX0VWRU5UKSAmJgogCQkgICAoKHJldCA9PSAwKSB8fCAocmV0ID09IC1FSVdDT01NSVQpKSkKIAkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBjbWQsICYoaXdyLT51KSwgTlVMTCk7CiAJfSBlbHNlIHsKLQkJY2hhciAqCWV4dHJhOwotCQlpbnQJZXh0cmFfc2l6ZTsKLQkJaW50CXVzZXJfbGVuZ3RoID0gMDsKLQkJaW50CWVycjsKLQkJaW50CWVzc2lkX2NvbXBhdCA9IDA7Ci0KLQkJLyogQ2FsY3VsYXRlIHNwYWNlIG5lZWRlZCBieSBhcmd1bWVudHMuIEFsd2F5cyBhbGxvY2F0ZQotCQkgKiBmb3IgbWF4IHNwYWNlLiBFYXNpZXIsIGFuZCB3b24ndCBsYXN0IGxvbmcuLi4gKi8KLQkJZXh0cmFfc2l6ZSA9IGRlc2NyLT5tYXhfdG9rZW5zICogZGVzY3ItPnRva2VuX3NpemU7Ci0KLQkJLyogQ2hlY2sgbmVlZCBmb3IgRVNTSUQgY29tcGF0aWJpbGl0eSBmb3IgV0UgPCAyMSAqLwotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFNJT0NTSVdFU1NJRDoKLQkJY2FzZSBTSU9DR0lXRVNTSUQ6Ci0JCWNhc2UgU0lPQ1NJV05JQ0tOOgotCQljYXNlIFNJT0NHSVdOSUNLTjoKLQkJCWlmIChpd3ItPnUuZGF0YS5sZW5ndGggPT0gZGVzY3ItPm1heF90b2tlbnMgKyAxKQotCQkJCWVzc2lkX2NvbXBhdCA9IDE7Ci0JCQllbHNlIGlmIChJV19JU19TRVQoY21kKSAmJiAoaXdyLT51LmRhdGEubGVuZ3RoICE9IDApKSB7Ci0JCQkJY2hhciBlc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOwotCi0JCQkJZXJyID0gY29weV9mcm9tX3VzZXIoZXNzaWQsIGl3ci0+dS5kYXRhLnBvaW50ZXIsCi0JCQkJCQkgICAgIGl3ci0+dS5kYXRhLmxlbmd0aCAqCi0JCQkJCQkgICAgIGRlc2NyLT50b2tlbl9zaXplKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJCWlmIChlc3NpZFtpd3ItPnUuZGF0YS5sZW5ndGggLSAxXSA9PSAnXDAnKQotCQkJCQllc3NpZF9jb21wYXQgPSAxOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCWl3ci0+dS5kYXRhLmxlbmd0aCAtPSBlc3NpZF9jb21wYXQ7Ci0KLQkJLyogQ2hlY2sgd2hhdCB1c2VyIHNwYWNlIGlzIGdpdmluZyB1cyAqLwotCQlpZiAoSVdfSVNfU0VUKGNtZCkpIHsKLQkJCS8qIENoZWNrIE5VTEwgcG9pbnRlciAqLwotCQkJaWYgKChpd3ItPnUuZGF0YS5wb2ludGVyID09IE5VTEwpICYmCi0JCQkgICAoaXdyLT51LmRhdGEubGVuZ3RoICE9IDApKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJLyogQ2hlY2sgaWYgbnVtYmVyIG9mIHRva2VuIGZpdHMgd2l0aGluIGJvdW5kcyAqLwotCQkJaWYgKGl3ci0+dS5kYXRhLmxlbmd0aCA+IGRlc2NyLT5tYXhfdG9rZW5zKQotCQkJCXJldHVybiAtRTJCSUc7Ci0JCQlpZiAoaXdyLT51LmRhdGEubGVuZ3RoIDwgZGVzY3ItPm1pbl90b2tlbnMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBDaGVjayBOVUxMIHBvaW50ZXIgKi8KLQkJCWlmIChpd3ItPnUuZGF0YS5wb2ludGVyID09IE5VTEwpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkvKiBTYXZlIHVzZXIgc3BhY2UgYnVmZmVyIHNpemUgZm9yIGNoZWNraW5nICovCi0JCQl1c2VyX2xlbmd0aCA9IGl3ci0+dS5kYXRhLmxlbmd0aDsKLQotCQkJLyogRG9uJ3QgY2hlY2sgaWYgdXNlcl9sZW5ndGggPiBtYXggdG8gYWxsb3cgZm9yd2FyZAotCQkJICogY29tcGF0aWJpbGl0eS4gVGhlIHRlc3QgdXNlcl9sZW5ndGggPCBtaW4gaXMKLQkJCSAqIGltcGxpZWQgYnkgdGhlIHRlc3QgYXQgdGhlIGVuZC4gKi8KLQotCQkJLyogU3VwcG9ydCBmb3IgdmVyeSBsYXJnZSByZXF1ZXN0cyAqLwotCQkJaWYgKChkZXNjci0+ZmxhZ3MgJiBJV19ERVNDUl9GTEFHX05PTUFYKSAmJgotCQkJICAgKHVzZXJfbGVuZ3RoID4gZGVzY3ItPm1heF90b2tlbnMpKSB7Ci0JCQkJLyogQWxsb3cgdXNlcnNwYWNlIHRvIEdFVCBtb3JlIHRoYW4gbWF4IHNvCi0JCQkJICogd2UgY2FuIHN1cHBvcnQgYW55IHNpemUgR0VUIHJlcXVlc3RzLgotCQkJCSAqIFRoZXJlIGlzIHN0aWxsIGEgbGltaXQgOiAtRU5PTUVNLiAqLwotCQkJCWV4dHJhX3NpemUgPSB1c2VyX2xlbmd0aCAqIGRlc2NyLT50b2tlbl9zaXplOwotCQkJCS8qIE5vdGUgOiB1c2VyX2xlbmd0aCBpcyBvcmlnaW5hbGx5IGEgX191MTYsCi0JCQkJICogYW5kIHRva2VuX3NpemUgaXMgY29udHJvbGxlZCBieSB1cywKLQkJCQkgKiBzbyBleHRyYV9zaXplIHdvbid0IGdldCBuZWdhdGl2ZSBhbmQKLQkJCQkgKiB3b24ndCBvdmVyZmxvdy4uLiAqLwotCQkJfQotCQl9Ci0KLQkJLyogQ3JlYXRlIHRoZSBrZXJuZWwgYnVmZmVyICovCi0JCS8qICAgIGt6YWxsb2MgZW5zdXJlcyBOVUxMLXRlcm1pbmF0aW9uIGZvciBlc3NpZF9jb21wYXQgKi8KLQkJZXh0cmEgPSBremFsbG9jKGV4dHJhX3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoZXh0cmEgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCS8qIElmIGl0IGlzIGEgU0VULCBnZXQgYWxsIHRoZSBleHRyYSBkYXRhIGluIGhlcmUgKi8KLQkJaWYgKElXX0lTX1NFVChjbWQpICYmIChpd3ItPnUuZGF0YS5sZW5ndGggIT0gMCkpIHsKLQkJCWVyciA9IGNvcHlfZnJvbV91c2VyKGV4dHJhLCBpd3ItPnUuZGF0YS5wb2ludGVyLAotCQkJCQkgICAgIGl3ci0+dS5kYXRhLmxlbmd0aCAqCi0JCQkJCSAgICAgZGVzY3ItPnRva2VuX3NpemUpOwotCQkJaWYgKGVycikgewotCQkJCWtmcmVlKGV4dHJhKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJfQotCi0JCS8qIENhbGwgdGhlIGhhbmRsZXIgKi8KLQkJcmV0ID0gaGFuZGxlcihkZXYsICZpbmZvLCAmKGl3ci0+dSksIGV4dHJhKTsKLQotCQlpd3ItPnUuZGF0YS5sZW5ndGggKz0gZXNzaWRfY29tcGF0OwotCi0JCS8qIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHJldHVybiB0byB0aGUgdXNlciAqLwotCQlpZiAoIXJldCAmJiBJV19JU19HRVQoY21kKSkgewotCQkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIGJ1ZmZlciB1cCB0aGVyZSAqLwotCQkJaWYgKHVzZXJfbGVuZ3RoIDwgaXdyLT51LmRhdGEubGVuZ3RoKSB7Ci0JCQkJa2ZyZWUoZXh0cmEpOwotCQkJCXJldHVybiAtRTJCSUc7Ci0JCQl9Ci0KLQkJCWVyciA9IGNvcHlfdG9fdXNlcihpd3ItPnUuZGF0YS5wb2ludGVyLCBleHRyYSwKLQkJCQkJICAgaXdyLT51LmRhdGEubGVuZ3RoICoKLQkJCQkJICAgZGVzY3ItPnRva2VuX3NpemUpOwotCQkJaWYgKGVycikKLQkJCQlyZXQgPSAgLUVGQVVMVDsKLQkJfQotCi0JCS8qIEdlbmVyYXRlIGFuIGV2ZW50IHRvIG5vdGlmeSBsaXN0ZW5lcnMgb2YgdGhlIGNoYW5nZSAqLwotCQlpZiAoKGRlc2NyLT5mbGFncyAmIElXX0RFU0NSX0ZMQUdfRVZFTlQpICYmCi0JCSAgICgocmV0ID09IDApIHx8IChyZXQgPT0gLUVJV0NPTU1JVCkpKSB7Ci0JCQlpZiAoZGVzY3ItPmZsYWdzICYgSVdfREVTQ1JfRkxBR19SRVNUUklDVCkKLQkJCQkvKiBJZiB0aGUgZXZlbnQgaXMgcmVzdHJpY3RlZCwgZG9uJ3QKLQkJCQkgKiBleHBvcnQgdGhlIHBheWxvYWQgKi8KLQkJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgY21kLCAmKGl3ci0+dSksIE5VTEwpOwotCQkJZWxzZQotCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBjbWQsICYoaXdyLT51KSwKLQkJCQkJCSAgICBleHRyYSk7Ci0JCX0KLQotCQkvKiBDbGVhbnVwIC0gSSB0b2xkIHlvdSBpdCB3YXNuJ3QgdGhhdCBsb25nIDstKSAqLwotCQlrZnJlZShleHRyYSk7CisJCXJldCA9IGlvY3RsX3N0YW5kYXJkX2l3X3BvaW50KCZpd3ItPnUuZGF0YSwgY21kLCBkZXNjciwKKwkJCQkJICAgICAgaGFuZGxlciwgZGV2LCBpbmZvKTsKIAl9CiAKIAkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyIGlmIG5lZWRlZCBhbmQgZGVmaW5lZCAqLwpAQCAtODgxLDI1ICs4ODUsMjIgQEAKICAqIGEgaXdfaGFuZGxlciBidXQgcHJvY2VzcyBpdCBpbiB5b3VyIGlvY3RsIGhhbmRsZXIgKGkuZS4gdXNlIHRoZQogICogb2xkIGRyaXZlciBBUEkpLgogICovCi1zdGF0aWMgaW50IGlvY3RsX3ByaXZhdGVfY2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIGl3X2hhbmRsZXIgaGFuZGxlcikKK3N0YXRpYyBpbnQgZ2V0X3ByaXZfZGVzY3JfYW5kX3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzICoqZGVzY3JwKQogewotCXN0cnVjdCBpd3JlcSAqCQkJaXdyID0gKHN0cnVjdCBpd3JlcSAqKSBpZnI7Ci0JY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyAqCWRlc2NyID0gTlVMTDsKLQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvCQlpbmZvOwotCWludAkJCQlleHRyYV9zaXplID0gMDsKLQlpbnQJCQkJaTsKLQlpbnQJCQkJcmV0ID0gLUVJTlZBTDsKKwljb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzICpkZXNjcjsKKwlpbnQgaSwgZXh0cmFfc2l6ZTsKIAotCS8qIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIElPQ1RMICovCi0JZm9yIChpID0gMDsgaSA8IGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPm51bV9wcml2YXRlX2FyZ3M7IGkrKykKKwlkZXNjciA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPm51bV9wcml2YXRlX2FyZ3M7IGkrKykgewogCQlpZiAoY21kID09IGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPnByaXZhdGVfYXJnc1tpXS5jbWQpIHsKLQkJCWRlc2NyID0gJihkZXYtPndpcmVsZXNzX2hhbmRsZXJzLT5wcml2YXRlX2FyZ3NbaV0pOworCQkJZGVzY3IgPSAmZGV2LT53aXJlbGVzc19oYW5kbGVycy0+cHJpdmF0ZV9hcmdzW2ldOwogCQkJYnJlYWs7CiAJCX0KKwl9CiAKLQkvKiBDb21wdXRlIHRoZSBzaXplIG9mIHRoZSBzZXQvZ2V0IGFyZ3VtZW50cyAqLwotCWlmIChkZXNjciAhPSBOVUxMKSB7CisJZXh0cmFfc2l6ZSA9IDA7CisJaWYgKGRlc2NyKSB7CiAJCWlmIChJV19JU19TRVQoY21kKSkgewogCQkJaW50CW9mZnNldCA9IDA7CS8qIEZvciBzdWItaW9jdGxzICovCiAJCQkvKiBDaGVjayBmb3Igc3ViLWlvY3RsIGhhbmRsZXIgKi8KQEAgLTkyNCw3MyArOTI1LDc4IEBACiAJCQkJZXh0cmFfc2l6ZSA9IDA7CiAJCX0KIAl9CisJKmRlc2NycCA9IGRlc2NyOworCXJldHVybiBleHRyYV9zaXplOworfQogCi0JLyogUHJlcGFyZSB0aGUgY2FsbCAqLwotCWluZm8uY21kID0gY21kOwotCWluZm8uZmxhZ3MgPSAwOworc3RhdGljIGludCBpb2N0bF9wcml2YXRlX2l3X3BvaW50KHN0cnVjdCBpd19wb2ludCAqaXdwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyAqZGVzY3IsCisJCQkJICBpd19oYW5kbGVyIGhhbmRsZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBpbnQgZXh0cmFfc2l6ZSkKK3sKKwljaGFyICpleHRyYTsKKwlpbnQgZXJyOworCisJLyogQ2hlY2sgd2hhdCB1c2VyIHNwYWNlIGlzIGdpdmluZyB1cyAqLworCWlmIChJV19JU19TRVQoY21kKSkgeworCQlpZiAoIWl3cC0+cG9pbnRlciAmJiBpd3AtPmxlbmd0aCAhPSAwKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGl3cC0+bGVuZ3RoID4gKGRlc2NyLT5zZXRfYXJncyAmIElXX1BSSVZfU0laRV9NQVNLKSkKKwkJCXJldHVybiAtRTJCSUc7CisJfSBlbHNlIGlmICghaXdwLT5wb2ludGVyKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWV4dHJhID0ga21hbGxvYyhleHRyYV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV4dHJhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIElmIGl0IGlzIGEgU0VULCBnZXQgYWxsIHRoZSBleHRyYSBkYXRhIGluIGhlcmUgKi8KKwlpZiAoSVdfSVNfU0VUKGNtZCkgJiYgKGl3cC0+bGVuZ3RoICE9IDApKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcihleHRyYSwgaXdwLT5wb2ludGVyLCBleHRyYV9zaXplKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogQ2FsbCB0aGUgaGFuZGxlciAqLworCWVyciA9IGhhbmRsZXIoZGV2LCBpbmZvLCAodW5pb24gaXdyZXFfZGF0YSAqKSBpd3AsIGV4dHJhKTsKKworCS8qIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHJldHVybiB0byB0aGUgdXNlciAqLworCWlmICghZXJyICYmIElXX0lTX0dFVChjbWQpKSB7CisJCS8qIEFkanVzdCBmb3IgdGhlIGFjdHVhbCBsZW5ndGggaWYgaXQncyB2YXJpYWJsZSwKKwkJICogYXZvaWQgbGVha2luZyBrZXJuZWwgYml0cyBvdXRzaWRlLgorCQkgKi8KKwkJaWYgKCEoZGVzY3ItPmdldF9hcmdzICYgSVdfUFJJVl9TSVpFX0ZJWEVEKSkKKwkJCWV4dHJhX3NpemUgPSBhZGp1c3RfcHJpdl9zaXplKGRlc2NyLT5nZXRfYXJncywgaXdwKTsKKworCQlpZiAoY29weV90b191c2VyKGl3cC0+cG9pbnRlciwgZXh0cmEsIGV4dHJhX3NpemUpKQorCQkJZXJyID0gIC1FRkFVTFQ7CisJfQorCitvdXQ6CisJa2ZyZWUoZXh0cmEpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfcHJpdmF0ZV9jYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd3JlcSAqaXdyLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIGl3X2hhbmRsZXIgaGFuZGxlcikKK3sKKwlpbnQgZXh0cmFfc2l6ZSA9IDAsIHJldCA9IC1FSU5WQUw7CisJY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyAqZGVzY3I7CisKKwlleHRyYV9zaXplID0gZ2V0X3ByaXZfZGVzY3JfYW5kX3NpemUoZGV2LCBjbWQsICZkZXNjcik7CiAKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgcG9pbnRlciB0byB1c2VyIHNwYWNlIGRhdGEgb3Igbm90LiAqLwogCWlmIChleHRyYV9zaXplID09IDApIHsKIAkJLyogTm8gZXh0cmEgYXJndW1lbnRzLiBUcml2aWFsIHRvIGhhbmRsZSAqLwotCQlyZXQgPSBoYW5kbGVyKGRldiwgJmluZm8sICYoaXdyLT51KSwgKGNoYXIgKikgJihpd3ItPnUpKTsKKwkJcmV0ID0gaGFuZGxlcihkZXYsIGluZm8sICYoaXdyLT51KSwgKGNoYXIgKikgJihpd3ItPnUpKTsKIAl9IGVsc2UgewotCQljaGFyICoJZXh0cmE7Ci0JCWludAllcnI7Ci0KLQkJLyogQ2hlY2sgd2hhdCB1c2VyIHNwYWNlIGlzIGdpdmluZyB1cyAqLwotCQlpZiAoSVdfSVNfU0VUKGNtZCkpIHsKLQkJCS8qIENoZWNrIE5VTEwgcG9pbnRlciAqLwotCQkJaWYgKChpd3ItPnUuZGF0YS5wb2ludGVyID09IE5VTEwpICYmCi0JCQkgICAoaXdyLT51LmRhdGEubGVuZ3RoICE9IDApKQotCQkJCXJldHVybiAtRUZBVUxUOwotCi0JCQkvKiBEb2VzIGl0IGZpdHMgd2l0aGluIGJvdW5kcyA/ICovCi0JCQlpZiAoaXdyLT51LmRhdGEubGVuZ3RoID4gKGRlc2NyLT5zZXRfYXJncyAmCi0JCQkJCQkgSVdfUFJJVl9TSVpFX01BU0spKQotCQkJCXJldHVybiAtRTJCSUc7Ci0JCX0gZWxzZSBpZiAoaXdyLT51LmRhdGEucG9pbnRlciA9PSBOVUxMKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJLyogQWx3YXlzIGFsbG9jYXRlIGZvciBtYXggc3BhY2UuIEVhc2llciwgYW5kIHdvbid0IGxhc3QKLQkJICogbG9uZy4uLiAqLwotCQlleHRyYSA9IGttYWxsb2MoZXh0cmFfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChleHRyYSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJLyogSWYgaXQgaXMgYSBTRVQsIGdldCBhbGwgdGhlIGV4dHJhIGRhdGEgaW4gaGVyZSAqLwotCQlpZiAoSVdfSVNfU0VUKGNtZCkgJiYgKGl3ci0+dS5kYXRhLmxlbmd0aCAhPSAwKSkgewotCQkJZXJyID0gY29weV9mcm9tX3VzZXIoZXh0cmEsIGl3ci0+dS5kYXRhLnBvaW50ZXIsCi0JCQkJCSAgICAgZXh0cmFfc2l6ZSk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJa2ZyZWUoZXh0cmEpOwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQl9Ci0KLQkJLyogQ2FsbCB0aGUgaGFuZGxlciAqLwotCQlyZXQgPSBoYW5kbGVyKGRldiwgJmluZm8sICYoaXdyLT51KSwgZXh0cmEpOwotCi0JCS8qIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHJldHVybiB0byB0aGUgdXNlciAqLwotCQlpZiAoIXJldCAmJiBJV19JU19HRVQoY21kKSkgewotCi0JCQkvKiBBZGp1c3QgZm9yIHRoZSBhY3R1YWwgbGVuZ3RoIGlmIGl0J3MgdmFyaWFibGUsCi0JCQkgKiBhdm9pZCBsZWFraW5nIGtlcm5lbCBiaXRzIG91dHNpZGUuICovCi0JCQlpZiAoIShkZXNjci0+Z2V0X2FyZ3MgJiBJV19QUklWX1NJWkVfRklYRUQpKSB7Ci0JCQkJZXh0cmFfc2l6ZSA9IGFkanVzdF9wcml2X3NpemUoZGVzY3ItPmdldF9hcmdzLAotCQkJCQkJCSAgICAgICYoaXdyLT51KSk7Ci0JCQl9Ci0KLQkJCWVyciA9IGNvcHlfdG9fdXNlcihpd3ItPnUuZGF0YS5wb2ludGVyLCBleHRyYSwKLQkJCQkJICAgZXh0cmFfc2l6ZSk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldCA9ICAtRUZBVUxUOwotCQl9Ci0KLQkJLyogQ2xlYW51cCAtIEkgdG9sZCB5b3UgaXQgd2Fzbid0IHRoYXQgbG9uZyA7LSkgKi8KLQkJa2ZyZWUoZXh0cmEpOworCQlyZXQgPSBpb2N0bF9wcml2YXRlX2l3X3BvaW50KCZpd3ItPnUuZGF0YSwgY21kLCBkZXNjciwKKwkJCQkJICAgICBoYW5kbGVyLCBkZXYsIGluZm8sIGV4dHJhX3NpemUpOwogCX0KIAotCiAJLyogQ2FsbCBjb21taXQgaGFuZGxlciBpZiBuZWVkZWQgYW5kIGRlZmluZWQgKi8KIAlpZiAocmV0ID09IC1FSVdDT01NSVQpCiAJCXJldCA9IGNhbGxfY29tbWl0X2hhbmRsZXIoZGV2KTsKQEAgLTk5OSwxMiArMTAwNSwyMSBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIGludCAoKndleHRfaW9jdGxfZnVuYykoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGl3cmVxICosCisJCQkgICAgICAgdW5zaWduZWQgaW50LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICosCisJCQkgICAgICAgaXdfaGFuZGxlcik7CisKIC8qCiAgKiBNYWluIElPQ1RsIGRpc3BhdGNoZXIuCiAgKiBDaGVjayB0aGUgdHlwZSBvZiBJT0NUTCBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgd3JhcHBlci4uLgogICovCi1zdGF0aWMgaW50IHdpcmVsZXNzX3Byb2Nlc3NfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdW5zaWduZWQgaW50IGNtZCkKK3N0YXRpYyBpbnQgd2lyZWxlc3NfcHJvY2Vzc19pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLAorCQkJCSAgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB3ZXh0X2lvY3RsX2Z1bmMgc3RhbmRhcmQsCisJCQkJICB3ZXh0X2lvY3RsX2Z1bmMgcHJpdmF0ZSkKIHsKKwlzdHJ1Y3QgaXdyZXEgKml3ciA9IChzdHJ1Y3QgaXdyZXEgKikgaWZyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaXdfaGFuZGxlcgloYW5kbGVyOwogCkBAIC0xMDE5LDEyICsxMDM0LDEyIEBACiAJICogTm90ZSB0aGF0ICdjbWQnIGlzIGFscmVhZHkgZmlsdGVyZWQgaW4gZGV2X2lvY3RsKCkgd2l0aAogCSAqIChjbWQgPj0gU0lPQ0lXRklSU1QgJiYgY21kIDw9IFNJT0NJV0xBU1QpICovCiAJaWYgKGNtZCA9PSBTSU9DR0lXU1RBVFMpCi0JCXJldHVybiBpb2N0bF9zdGFuZGFyZF9jYWxsKGRldiwgaWZyLCBjbWQsCi0JCQkJCSAgICZpd19oYW5kbGVyX2dldF9pd3N0YXRzKTsKKwkJcmV0dXJuIHN0YW5kYXJkKGRldiwgaXdyLCBjbWQsIGluZm8sCisJCQkJJml3X2hhbmRsZXJfZ2V0X2l3c3RhdHMpOwogCiAJaWYgKGNtZCA9PSBTSU9DR0lXUFJJViAmJiBkZXYtPndpcmVsZXNzX2hhbmRsZXJzKQotCQlyZXR1cm4gaW9jdGxfc3RhbmRhcmRfY2FsbChkZXYsIGlmciwgY21kLAotCQkJCQkgICAmaXdfaGFuZGxlcl9nZXRfcHJpdmF0ZSk7CisJCXJldHVybiBzdGFuZGFyZChkZXYsIGl3ciwgY21kLCBpbmZvLAorCQkJCSZpd19oYW5kbGVyX2dldF9wcml2YXRlKTsKIAogCS8qIEJhc2ljIGNoZWNrICovCiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQpAQCAtMTAzNSw5ICsxMDUwLDkgQEAKIAlpZiAoaGFuZGxlcikgewogCQkvKiBTdGFuZGFyZCBhbmQgcHJpdmF0ZSBhcmUgbm90IHRoZSBzYW1lICovCiAJCWlmIChjbWQgPCBTSU9DSVdGSVJTVFBSSVYpCi0JCQlyZXR1cm4gaW9jdGxfc3RhbmRhcmRfY2FsbChkZXYsIGlmciwgY21kLCBoYW5kbGVyKTsKKwkJCXJldHVybiBzdGFuZGFyZChkZXYsIGl3ciwgY21kLCBpbmZvLCBoYW5kbGVyKTsKIAkJZWxzZQotCQkJcmV0dXJuIGlvY3RsX3ByaXZhdGVfY2FsbChkZXYsIGlmciwgY21kLCBoYW5kbGVyKTsKKwkJCXJldHVybiBwcml2YXRlKGRldiwgaXdyLCBjbWQsIGluZm8sIGhhbmRsZXIpOwogCX0KIAkvKiBPbGQgZHJpdmVyIEFQSSA6IGNhbGwgZHJpdmVyIGlvY3RsIGhhbmRsZXIgKi8KIAlpZiAoZGV2LT5kb19pb2N0bCkKQEAgLTEwNDUsMjggKzEwNjAsMTU1IEBACiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi0vKiBlbnRyeSBwb2ludCBmcm9tIGRldiBpb2N0bCAqLwotaW50IHdleHRfaGFuZGxlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHVuc2lnbmVkIGludCBjbWQsCi0JCSAgICAgIHZvaWQgX191c2VyICphcmcpCisvKiBJZiBjb21tYW5kIGlzIGBzZXQgYSBwYXJhbWV0ZXInLCBvciBgZ2V0IHRoZSBlbmNvZGluZyBwYXJhbWV0ZXJzJywKKyAqIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyB0aGUgcmlnaHQgdG8gZG8gaXQuCisgKi8KK3N0YXRpYyBpbnQgd2V4dF9wZXJtaXNzaW9uX2NoZWNrKHVuc2lnbmVkIGludCBjbWQpCiB7Ci0JaW50IHJldDsKLQotCS8qIElmIGNvbW1hbmQgaXMgYHNldCBhIHBhcmFtZXRlcicsIG9yCi0JICogYGdldCB0aGUgZW5jb2RpbmcgcGFyYW1ldGVycycsIGNoZWNrIGlmCi0JICogdGhlIHVzZXIgaGFzIHRoZSByaWdodCB0byBkbyBpdCAqLwogCWlmICgoSVdfSVNfU0VUKGNtZCkgfHwgY21kID09IFNJT0NHSVdFTkNPREUgfHwgY21kID09IFNJT0NHSVdFTkNPREVFWFQpCiAJICAgICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCisJcmV0dXJuIDA7Cit9CisKKy8qIGVudHJ5IHBvaW50IGZyb20gZGV2IGlvY3RsICovCitzdGF0aWMgaW50IHdleHRfaW9jdGxfZGlzcGF0Y2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHdleHRfaW9jdGxfZnVuYyBzdGFuZGFyZCwKKwkJCSAgICAgICB3ZXh0X2lvY3RsX2Z1bmMgcHJpdmF0ZSkKK3sKKwlpbnQgcmV0ID0gd2V4dF9wZXJtaXNzaW9uX2NoZWNrKGNtZCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJZGV2X2xvYWQobmV0LCBpZnItPmlmcl9uYW1lKTsKIAlydG5sX2xvY2soKTsKLQlyZXQgPSB3aXJlbGVzc19wcm9jZXNzX2lvY3RsKG5ldCwgaWZyLCBjbWQpOworCXJldCA9IHdpcmVsZXNzX3Byb2Nlc3NfaW9jdGwobmV0LCBpZnIsIGNtZCwgaW5mbywgc3RhbmRhcmQsIHByaXZhdGUpOwogCXJ0bmxfdW5sb2NrKCk7Ci0JaWYgKElXX0lTX0dFVChjbWQpICYmIGNvcHlfdG9fdXNlcihhcmcsIGlmciwgc2l6ZW9mKHN0cnVjdCBpd3JlcSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwogCXJldHVybiByZXQ7CiB9CiAKK2ludCB3ZXh0X2hhbmRsZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB1bnNpZ25lZCBpbnQgY21kLAorCQkgICAgICB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gaW5mbyA9IHsgLmNtZCA9IGNtZCwgLmZsYWdzID0gMCB9OworCWludCByZXQ7CisKKwlyZXQgPSB3ZXh0X2lvY3RsX2Rpc3BhdGNoKG5ldCwgaWZyLCBjbWQsICZpbmZvLAorCQkJCSAgaW9jdGxfc3RhbmRhcmRfY2FsbCwKKwkJCQkgIGlvY3RsX3ByaXZhdGVfY2FsbCk7CisJaWYgKHJldCA+PSAwICYmCisJICAgIElXX0lTX0dFVChjbWQpICYmCisJICAgIGNvcHlfdG9fdXNlcihhcmcsIGlmciwgc2l6ZW9mKHN0cnVjdCBpd3JlcSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IGNvbXBhdF9zdGFuZGFyZF9jYWxsKHN0cnVjdCBuZXRfZGV2aWNlCSpkZXYsCisJCQkJc3RydWN0IGl3cmVxCQkqaXdyLAorCQkJCXVuc2lnbmVkIGludAkJY21kLAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8JKmluZm8sCisJCQkJaXdfaGFuZGxlcgkJaGFuZGxlcikKK3sKKwljb25zdCBzdHJ1Y3QgaXdfaW9jdGxfZGVzY3JpcHRpb24gKmRlc2NyOworCXN0cnVjdCBjb21wYXRfaXdfcG9pbnQgKml3cF9jb21wYXQ7CisJc3RydWN0IGl3X3BvaW50IGl3cDsKKwlpbnQgZXJyOworCisJZGVzY3IgPSBzdGFuZGFyZF9pb2N0bCArIChjbWQgLSBTSU9DSVdGSVJTVCk7CisKKwlpZiAoZGVzY3ItPmhlYWRlcl90eXBlICE9IElXX0hFQURFUl9UWVBFX1BPSU5UKQorCQlyZXR1cm4gaW9jdGxfc3RhbmRhcmRfY2FsbChkZXYsIGl3ciwgY21kLCBpbmZvLCBoYW5kbGVyKTsKKworCWl3cF9jb21wYXQgPSAoc3RydWN0IGNvbXBhdF9pd19wb2ludCAqKSAmaXdyLT51LmRhdGE7CisJaXdwLnBvaW50ZXIgPSBjb21wYXRfcHRyKGl3cF9jb21wYXQtPnBvaW50ZXIpOworCWl3cC5sZW5ndGggPSBpd3BfY29tcGF0LT5sZW5ndGg7CisJaXdwLmZsYWdzID0gaXdwX2NvbXBhdC0+ZmxhZ3M7CisKKwllcnIgPSBpb2N0bF9zdGFuZGFyZF9pd19wb2ludCgmaXdwLCBjbWQsIGRlc2NyLCBoYW5kbGVyLCBkZXYsIGluZm8pOworCisJaXdwX2NvbXBhdC0+cG9pbnRlciA9IHB0cl90b19jb21wYXQoaXdwLnBvaW50ZXIpOworCWl3cF9jb21wYXQtPmxlbmd0aCA9IGl3cC5sZW5ndGg7CisJaXdwX2NvbXBhdC0+ZmxhZ3MgPSBpd3AuZmxhZ3M7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9wcml2YXRlX2NhbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3cmVxICppd3IsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBpd19oYW5kbGVyIGhhbmRsZXIpCit7CisJY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyAqZGVzY3I7CisJaW50IHJldCwgZXh0cmFfc2l6ZTsKKworCWV4dHJhX3NpemUgPSBnZXRfcHJpdl9kZXNjcl9hbmRfc2l6ZShkZXYsIGNtZCwgJmRlc2NyKTsKKworCS8qIENoZWNrIGlmIHdlIGhhdmUgYSBwb2ludGVyIHRvIHVzZXIgc3BhY2UgZGF0YSBvciBub3QuICovCisJaWYgKGV4dHJhX3NpemUgPT0gMCkgeworCQkvKiBObyBleHRyYSBhcmd1bWVudHMuIFRyaXZpYWwgdG8gaGFuZGxlICovCisJCXJldCA9IGhhbmRsZXIoZGV2LCBpbmZvLCAmKGl3ci0+dSksIChjaGFyICopICYoaXdyLT51KSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGNvbXBhdF9pd19wb2ludCAqaXdwX2NvbXBhdDsKKwkJc3RydWN0IGl3X3BvaW50IGl3cDsKKworCQlpd3BfY29tcGF0ID0gKHN0cnVjdCBjb21wYXRfaXdfcG9pbnQgKikgJml3ci0+dS5kYXRhOworCQlpd3AucG9pbnRlciA9IGNvbXBhdF9wdHIoaXdwX2NvbXBhdC0+cG9pbnRlcik7CisJCWl3cC5sZW5ndGggPSBpd3BfY29tcGF0LT5sZW5ndGg7CisJCWl3cC5mbGFncyA9IGl3cF9jb21wYXQtPmZsYWdzOworCisJCXJldCA9IGlvY3RsX3ByaXZhdGVfaXdfcG9pbnQoJml3cCwgY21kLCBkZXNjciwKKwkJCQkJICAgICBoYW5kbGVyLCBkZXYsIGluZm8sIGV4dHJhX3NpemUpOworCisJCWl3cF9jb21wYXQtPnBvaW50ZXIgPSBwdHJfdG9fY29tcGF0KGl3cC5wb2ludGVyKTsKKwkJaXdwX2NvbXBhdC0+bGVuZ3RoID0gaXdwLmxlbmd0aDsKKwkJaXdwX2NvbXBhdC0+ZmxhZ3MgPSBpd3AuZmxhZ3M7CisJfQorCisJLyogQ2FsbCBjb21taXQgaGFuZGxlciBpZiBuZWVkZWQgYW5kIGRlZmluZWQgKi8KKwlpZiAocmV0ID09IC1FSVdDT01NSVQpCisJCXJldCA9IGNhbGxfY29tbWl0X2hhbmRsZXIoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBjb21wYXRfd2V4dF9oYW5kbGVfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvIGluZm87CisJc3RydWN0IGl3cmVxIGl3cjsKKwljaGFyICpjb2xvbjsKKwlpbnQgcmV0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpd3IsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgaXdyZXEpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpd3IuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAwOworCWNvbG9uID0gc3RyY2hyKGl3ci5pZnJfbmFtZSwgJzonKTsKKwlpZiAoY29sb24pCisJCSpjb2xvbiA9IDA7CisKKwlpbmZvLmNtZCA9IGNtZDsKKwlpbmZvLmZsYWdzID0gSVdfUkVRVUVTVF9GTEFHX0NPTVBBVDsKKworCXJldCA9IHdleHRfaW9jdGxfZGlzcGF0Y2gobmV0LCAoc3RydWN0IGlmcmVxICopICZpd3IsIGNtZCwgJmluZm8sCisJCQkJICBjb21wYXRfc3RhbmRhcmRfY2FsbCwKKwkJCQkgIGNvbXBhdF9wcml2YXRlX2NhbGwpOworCisJaWYgKHJldCA+PSAwICYmCisJICAgIElXX0lTX0dFVChjbWQpICYmCisJICAgIGNvcHlfdG9fdXNlcihhcmdwLCAmaXdyLCBzaXplb2Yoc3RydWN0IGl3cmVxKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiBFVkVOVCBQUk9DRVNTSU5HICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogUHJvY2VzcyBldmVudHMgZ2VuZXJhdGVkIGJ5IHRoZSB3aXJlbGVzcyBsYXllciBvciB0aGUgZHJpdmVyLgpAQCAtMTE1Nyw3ICsxMjk5LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnI7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCiAJCXJldHVybjsKIAogCXNrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9BVE9NSUMpOwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS9hZl94MjUuYyBiL25ldC94MjUvYWZfeDI1LmMKaW5kZXggNmJhNjdjNS4uOWZjNWIwMiAxMDA2NDQKLS0tIGEvbmV0L3gyNS9hZl94MjUuYworKysgYi9uZXQveDI1L2FmX3gyNS5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCXN0cnVjdCB4MjVfbmVpZ2ggKm5iOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9YMjUKQEAgLTU1NSwxMyArNTU1LDExIEBACiAJeDI1ID0geDI1X3NrKHNrKTsKIAogCXNrLT5za190eXBlICAgICAgICA9IG9zay0+c2tfdHlwZTsKLQlzay0+c2tfc29ja2V0ICAgICAgPSBvc2stPnNrX3NvY2tldDsKIAlzay0+c2tfcHJpb3JpdHkgICAgPSBvc2stPnNrX3ByaW9yaXR5OwogCXNrLT5za19wcm90b2NvbCAgICA9IG9zay0+c2tfcHJvdG9jb2w7CiAJc2stPnNrX3JjdmJ1ZiAgICAgID0gb3NrLT5za19yY3ZidWY7CiAJc2stPnNrX3NuZGJ1ZiAgICAgID0gb3NrLT5za19zbmRidWY7CiAJc2stPnNrX3N0YXRlICAgICAgID0gVENQX0VTVEFCTElTSEVEOwotCXNrLT5za19zbGVlcCAgICAgICA9IG9zay0+c2tfc2xlZXA7CiAJc2stPnNrX2JhY2tsb2dfcmN2ID0gb3NrLT5za19iYWNrbG9nX3JjdjsKIAlzb2NrX2NvcHlfZmxhZ3Moc2ssIG9zayk7CiAKQEAgLTYxNCw4ICs2MTIsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0Jc29jay0+c2sJPSBOVUxMOwotCXNrLT5za19zb2NrZXQJPSBOVUxMOwkvKiBOb3QgdXNlZCwgYnV0IHdlIHNob3VsZCBkbyB0aGlzICovCisJc29ja19vcnBoYW4oc2spOwogb3V0OgogCXJldHVybiAwOwogfQpAQCAtODA4LDE0ICs4MDUsMTIgQEAKIAlpZiAoIXNrYi0+c2spCiAJCWdvdG8gb3V0MjsKIAluZXdzawkJID0gc2tiLT5zazsKLQluZXdzay0+c2tfc29ja2V0ID0gbmV3c29jazsKLQluZXdzay0+c2tfc2xlZXAgID0gJm5ld3NvY2stPndhaXQ7CisJc29ja19ncmFmdChuZXdzaywgbmV3c29jayk7CiAKIAkvKiBOb3cgYXR0YWNoIHVwIHRoZSBuZXcgc29ja2V0ICovCiAJc2tiLT5zayA9IE5VTEw7CiAJa2ZyZWVfc2tiKHNrYik7CiAJc2stPnNrX2Fja19iYWNrbG9nLS07Ci0JbmV3c29jay0+c2sgICAgPSBuZXdzazsKIAluZXdzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKIAlyYyA9IDA7CiBvdXQyOgpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfZGV2LmMgYi9uZXQveDI1L3gyNV9kZXYuYwppbmRleCAzZmYyMDZjLi4zZTFlZmU1IDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9kZXYuYworKysgYi9uZXQveDI1L3gyNV9kZXYuYwpAQCAtOTUsNyArOTUsNyBAQAogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXN0cnVjdCB4MjVfbmVpZ2ggKm5iOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlnb3RvIGRyb3A7CiAKIAluc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IGNhZTlmZDguLjg0MWIzMmEgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMjM2MCw3ICsyMzYwLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9maXJtd2FyZV9jbGFzcy5jIGIvc2FtcGxlcy9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZmlybXdhcmVfY2xhc3MuYwppbmRleCA5MzkyMTE2Li5lNmNmN2E0IDEwMDY0NAotLS0gYS9zYW1wbGVzL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9maXJtd2FyZV9jbGFzcy5jCisrKyBiL3NhbXBsZXMvZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2Zpcm13YXJlX2NsYXNzLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCWNsYXNzX2Rldi0+Y2xhc3NfaWRbQlVTX0lEX1NJWkUtMV0gPSAnXDAnOwogCWNsYXNzX2Rldi0+ZGV2ID0gZGV2aWNlOwogCi0JY2xhc3NfZGV2LT5jbGFzcyA9ICZmaXJtd2FyZV9jbGFzcywKKwljbGFzc19kZXYtPmNsYXNzID0gJmZpcm13YXJlX2NsYXNzOwogCWNsYXNzX3NldF9kZXZkYXRhKGNsYXNzX2RldiwgZndfcHJpdik7CiAJcmV0dmFsID0gY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKGNsYXNzX2Rldik7CiAJaWYgKHJldHZhbCkgewpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9rb2JqZWN0L2tzZXQtZXhhbXBsZS5jIGIvc2FtcGxlcy9rb2JqZWN0L2tzZXQtZXhhbXBsZS5jCmluZGV4IGIwYTFiNGYuLjczOTVjMGIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMva29iamVjdC9rc2V0LWV4YW1wbGUuYworKysgYi9zYW1wbGVzL2tvYmplY3Qva3NldC1leGFtcGxlLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCSAqLwogCXJldHZhbCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZmb28tPmtvYmosICZmb29fa3R5cGUsIE5VTEwsICIlcyIsIG5hbWUpOwogCWlmIChyZXR2YWwpIHsKLQkJa2ZyZWUoZm9vKTsKKwkJa29iamVjdF9wdXQoJmZvby0+a29iaik7CiAJCXJldHVybiBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0IGIvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CmluZGV4IDE3MDkyZDYuLjllZTk3ODMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAorKysgYi9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKQEAgLTEwMSw2ICsxMDEsNyBAQAogICAgICAgY21kX2tlcm5lbC1tb2QgPSAkKG1vZHBvc3QpICRACiAKIHZtbGludXgubzogRk9SQ0UKKwlAcm0gLWZyICQoa2VybmVsbWFya2Vyc2ZpbGUpCiAJJChjYWxsIGNtZCxrZXJuZWwtbW9kKQogCiAjIERlY2xhcmUgZ2VuZXJhdGVkIGZpbGVzIGFzIHRhcmdldHMgZm9yIG1vZHBvc3QKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCAzN2Q1YzM2Li4xZmNhZjMyIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC0zNDAsMTEgKzM0MCwxOCBAQAogfQogCiAvKiBsb29rcyBsaWtlOiAicG5wOmREIiAqLwotc3RhdGljIGludCBkb19wbnBfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQlzdHJ1Y3QgcG5wX2RldmljZV9pZCAqaWQsIGNoYXIgKmFsaWFzKQorc3RhdGljIHZvaWQgZG9fcG5wX2RldmljZV9lbnRyeSh2b2lkICpzeW12YWwsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQlzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0Jc3ByaW50ZihhbGlhcywgInBucDpkJXMqIiwgaWQtPmlkKTsKLQlyZXR1cm4gMTsKKwljb25zdCB1bnNpZ25lZCBsb25nIGlkX3NpemUgPSBzaXplb2Yoc3RydWN0IHBucF9kZXZpY2VfaWQpOworCWNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCA9IHN5bXZhbDsKKworCWRldmljZV9pZF9jaGVjayhtb2QtPm5hbWUsICJwbnAiLCBzaXplLCBpZF9zaXplLCBzeW12YWwpOworCisJYnVmX3ByaW50ZigmbW9kLT5kZXZfdGFibGVfYnVmLAorCQkgICAiTU9EVUxFX0FMSUFTKFwicG5wOmQlcypcIik7XG4iLCBpZC0+aWQpOworCWJ1Zl9wcmludGYoJm1vZC0+ZGV2X3RhYmxlX2J1ZiwKKwkJICAgIk1PRFVMRV9BTElBUyhcImFjcGkqOiVzOipcIik7XG4iLCBpZC0+aWQpOwogfQogCiAvKiBsb29rcyBsaWtlOiAicG5wOmREIiBmb3IgZXZlcnkgZGV2aWNlIG9mIHRoZSBjYXJkICovCkBAIC0zODgsOSArMzk1LDEyIEBACiAJCQl9CiAKIAkJCS8qIGFkZCBhbiBpbmRpdmlkdWFsIGFsaWFzIGZvciBldmVyeSBkZXZpY2UgZW50cnkgKi8KLQkJCWlmICghZHVwKQorCQkJaWYgKCFkdXApIHsKIAkJCQlidWZfcHJpbnRmKCZtb2QtPmRldl90YWJsZV9idWYsCiAJCQkJCSAgICJNT0RVTEVfQUxJQVMoXCJwbnA6ZCVzKlwiKTtcbiIsIGlkKTsKKwkJCQlidWZfcHJpbnRmKCZtb2QtPmRldl90YWJsZV9idWYsCisJCQkJCSAgICJNT0RVTEVfQUxJQVMoXCJhY3BpKjolczoqXCIpO1xuIiwgaWQpOworCQkJfQogCQl9CiAJfQogfQpAQCAtNzAxLDkgKzcxMSw3IEBACiAJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX2RldmljZV9pZCksICJhY3BpIiwKIAkJCSBkb19hY3BpX2VudHJ5LCBtb2QpOwogCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfcG5wX2RldmljZV90YWJsZSIpKQotCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKLQkJCSBzaXplb2Yoc3RydWN0IHBucF9kZXZpY2VfaWQpLCAicG5wIiwKLQkJCSBkb19wbnBfZW50cnksIG1vZCk7CisJCWRvX3BucF9kZXZpY2VfZW50cnkoc3ltdmFsLCBzeW0tPnN0X3NpemUsIG1vZCk7CiAJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF9wbnBfY2FyZF9kZXZpY2VfdGFibGUiKSkKIAkJZG9fcG5wX2NhcmRfZW50cmllcyhzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX3BjbWNpYV9kZXZpY2VfdGFibGUiKSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCBhMDdmOTFhLi44ZjAzOGU2IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC0xOTkyLDcgKzE5OTIsOCBAQAogCQkJbW9kLT5za2lwID0gMTsKIAkJfQogCi0JCWFkZF9tYXJrZXIobW9kLCBtYXJrZXIsIGZtdCk7CisJCWlmICghbW9kLT5za2lwKQorCQkJYWRkX21hcmtlcihtb2QsIG1hcmtlciwgZm10KTsKIAl9CiAJcmV0dXJuOwogZmFpbDoKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmMKaW5kZXggNWMyNTRkNC4uZGY0NmJiYyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKKysrIGIvc291bmQvY29yZS9pbml0LmMKQEAgLTU0OCw4ICs1NDgsOSBAQAogCXNuZF9hc3NlcnQoY2FyZCAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CiAjaWZuZGVmIENPTkZJR19TWVNGU19ERVBSRUNBVEVECiAJaWYgKCFjYXJkLT5jYXJkX2RldikgewotCQljYXJkLT5jYXJkX2RldiA9IGRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIGNhcmQtPmRldiwgMCwKLQkJCQkJICAgICAgICJjYXJkJWkiLCBjYXJkLT5udW1iZXIpOworCQljYXJkLT5jYXJkX2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShzb3VuZF9jbGFzcywgY2FyZC0+ZGV2LAorCQkJCQkJICAgICAgIE1LREVWKDAsIDApLCBOVUxMLAorCQkJCQkJICAgICAgICJjYXJkJWkiLCBjYXJkLT5udW1iZXIpOwogCQlpZiAoSVNfRVJSKGNhcmQtPmNhcmRfZGV2KSkKIAkJCWNhcmQtPmNhcmRfZGV2ID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMgYi9zb3VuZC9vc3Mvc291bmRjYXJkLmMKaW5kZXggYTljMjNiMi4uN2Q4OWMwOCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NvdW5kY2FyZC5jCisrKyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwpAQCAtNTYwLDE3ICs1NjAsMTkgQEAKIAlzb3VuZF9kbWFwX2ZsYWcgPSAoZG1hYnVmID4gMCA/IDEgOiAwKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldl9saXN0KTsgaSsrKSB7Ci0JCWRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIE5VTEwsCi0JCQkgICAgICBNS0RFVihTT1VORF9NQUpPUiwgZGV2X2xpc3RbaV0ubWlub3IpLAotCQkJICAgICAgIiVzIiwgZGV2X2xpc3RbaV0ubmFtZSk7CisJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShzb3VuZF9jbGFzcywgTlVMTCwKKwkJCQkgICAgICBNS0RFVihTT1VORF9NQUpPUiwgZGV2X2xpc3RbaV0ubWlub3IpLAorCQkJCSAgICAgIE5VTEwsICIlcyIsIGRldl9saXN0W2ldLm5hbWUpOwogCiAJCWlmICghZGV2X2xpc3RbaV0ubnVtKQogCQkJY29udGludWU7CiAKIAkJZm9yIChqID0gMTsgaiA8ICpkZXZfbGlzdFtpXS5udW07IGorKykKLQkJCWRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIE5VTEwsCi0JCQkJICAgICAgTUtERVYoU09VTkRfTUFKT1IsIGRldl9saXN0W2ldLm1pbm9yICsgKGoqMHgxMCkpLAotCQkJCSAgICAgICIlcyVkIiwgZGV2X2xpc3RbaV0ubmFtZSwgaik7CisJCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoc291bmRfY2xhc3MsIE5VTEwsCisJCQkJCSAgICAgIE1LREVWKFNPVU5EX01BSk9SLAorCQkJCQkJICAgIGRldl9saXN0W2ldLm1pbm9yICsgKGoqMHgxMCkpLAorCQkJCQkgICAgICBOVUxMLAorCQkJCQkgICAgICAiJXMlZCIsIGRldl9saXN0W2ldLm5hbWUsIGopOwogCX0KIAogCWlmIChzb3VuZF9uYmxvY2tzID49IDEwMjQpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL0tjb25maWcgYi9zb3VuZC9zb2MvcHhhL0tjb25maWcKaW5kZXggMTJmNmFjOS4uOTIxMmMzNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwpAQCAtNDgsNiArNDgsNyBAQAogY29uZmlnIFNORF9QWEEyWFhfU09DX1RPU0EKIAl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgVG9zYSIKIAlkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfVE9TQQorCWRlcGVuZHMgb24gTUZEX1RDNjM5M1hCCiAJc2VsZWN0IFNORF9QWEEyWFhfU09DX0FDOTcKIAlzZWxlY3QgU05EX1NPQ19XTTk3MTIKIAloZWxwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCmluZGV4IGI2ZWRiNjEuLmZlNmNjYTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvdG9zYS5jCisrKyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0yOCw3ICsyOSw3IEBACiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3RtaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC90b3NhLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F1ZGlvLmg+CkBAIC0xMzcsMTAgKzEzOCw3IEBACiBzdGF0aWMgaW50IHRvc2FfaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQogewotCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKQotCQlzZXRfdGM2MzkzX2dwaW8oJnRjNjM5M19kZXZpY2UuZGV2LFRPU0FfVEM2MzkzX0xfTVVURSk7Ci0JZWxzZQotCQlyZXNldF90YzYzOTNfZ3BpbygmdGM2MzkzX2RldmljZS5kZXYsVE9TQV9UQzYzOTNfTF9NVVRFKTsKKwlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fTF9NVVRFLCBTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpID8gMSA6MCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1NCwxNiArMjUyLDI4IEBACiAJaWYgKCFtYWNoaW5lX2lzX3Rvc2EoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlyZXQgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX0xfTVVURSwgIkhlYWRwaG9uZSBKYWNrIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoVE9TQV9HUElPX0xfTVVURSwgMCk7CisKIAl0b3NhX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKLQlpZiAoIXRvc2Ffc25kX2RldmljZSkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCF0b3NhX3NuZF9kZXZpY2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2M7CisJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEodG9zYV9zbmRfZGV2aWNlLCAmdG9zYV9zbmRfZGV2ZGF0YSk7CiAJdG9zYV9zbmRfZGV2ZGF0YS5kZXYgPSAmdG9zYV9zbmRfZGV2aWNlLT5kZXY7CiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZCh0b3NhX3NuZF9kZXZpY2UpOwogCi0JaWYgKHJldCkKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dCh0b3NhX3NuZF9kZXZpY2UpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXBsYXRmb3JtX2RldmljZV9wdXQodG9zYV9zbmRfZGV2aWNlKTsKKworZXJyX2FsbG9jOgorCWdwaW9fZnJlZShUT1NBX0dQSU9fTF9NVVRFKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNzEsNiArMjgxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0b3NhX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b3NhX3NuZF9kZXZpY2UpOworCWdwaW9fZnJlZShUT1NBX0dQSU9fTF9NVVRFKTsKIH0KIAogbW9kdWxlX2luaXQodG9zYV9pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvdW5kX2NvcmUuYyBiL3NvdW5kL3NvdW5kX2NvcmUuYwppbmRleCBkY2ZjMWQ1Li4xYjA0MjU5IDEwMDY0NAotLS0gYS9zb3VuZC9zb3VuZF9jb3JlLmMKKysrIGIvc291bmQvc291bmRfY29yZS5jCkBAIC0xNzEsOCArMTcxLDkgQEAKIAllbHNlCiAJCXNwcmludGYocy0+bmFtZSwgInNvdW5kLyVzJWQiLCBuYW1lLCByIC8gU09VTkRfU1RFUCk7CiAKLQlkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBkZXYsIE1LREVWKFNPVU5EX01BSk9SLCBzLT51bml0X21pbm9yKSwKLQkJICAgICAgcy0+bmFtZSs2KTsKKwlkZXZpY2VfY3JlYXRlX2RydmRhdGEoc291bmRfY2xhc3MsIGRldiwKKwkJCSAgICAgIE1LREVWKFNPVU5EX01BSk9SLCBzLT51bml0X21pbm9yKSwKKwkJCSAgICAgIE5VTEwsIHMtPm5hbWUrNik7CiAJcmV0dXJuIHI7CiAKICBmYWlsOgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vY29hbGVzY2VkX21taW8uYyBiL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlNjIwZAotLS0gL2Rldi9udWxsCisrKyBiL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBLVk0gY29hbGVzY2VkIE1NSU8KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQnVsbCBTLkEuUy4KKyAqCisgKiAgQXV0aG9yOiBMYXVyZW50IFZpdmllciA8TGF1cmVudC5WaXZpZXJAYnVsbC5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlICJpb2Rldi5oIgorCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm0uaD4KKworI2luY2x1ZGUgImNvYWxlc2NlZF9tbWlvLmgiCisKK3N0YXRpYyBpbnQgY29hbGVzY2VkX21taW9faW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCisJCQkJICAgZ3BhX3QgYWRkciwgaW50IGxlbiwgaW50IGlzX3dyaXRlKQoreworCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2ICpkZXYgPQorCQkJCShzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiopdGhpcy0+cHJpdmF0ZTsKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUgKnpvbmU7CisJaW50IG5leHQ7CisJaW50IGk7CisKKwlpZiAoIWlzX3dyaXRlKQorCQlyZXR1cm4gMDsKKworCS8qIGt2bS0+bG9jayBpcyB0YWtlbiBieSB0aGUgY2FsbGVyIGFuZCBtdXN0IGJlIG5vdCByZWxlYXNlZCBiZWZvcmUKKyAgICAgICAgICogZGV2LnJlYWQvd3JpdGUKKyAgICAgICAgICovCisKKwkvKiBBcmUgd2UgYWJsZSB0byBiYXRjaCBpdCA/ICovCisKKwkvKiBsYXN0IGlzIHRoZSBmaXJzdCBmcmVlIGVudHJ5CisJICogY2hlY2sgaWYgd2UgZG9uJ3QgbWVldCB0aGUgZmlyc3QgdXNlZCBlbnRyeQorCSAqIHRoZXJlIGlzIGFsd2F5cyBvbmUgdW51c2VkIGVudHJ5IGluIHRoZSBidWZmZXIKKwkgKi8KKworCW5leHQgPSAoZGV2LT5rdm0tPmNvYWxlc2NlZF9tbWlvX3JpbmctPmxhc3QgKyAxKSAlCisJCQkJCQkJS1ZNX0NPQUxFU0NFRF9NTUlPX01BWDsKKwlpZiAobmV4dCA9PSBkZXYtPmt2bS0+Y29hbGVzY2VkX21taW9fcmluZy0+Zmlyc3QpIHsKKwkJLyogZnVsbCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBpcyBpdCBpbiBhIGJhdGNoYWJsZSBhcmVhID8gKi8KKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5iX3pvbmVzOyBpKyspIHsKKwkJem9uZSA9ICZkZXYtPnpvbmVbaV07CisKKwkJLyogKGFkZHIsbGVuKSBpcyBmdWxseSBpbmNsdWRlZCBpbgorCQkgKiAoem9uZS0+YWRkciwgem9uZS0+c2l6ZSkKKwkJICovCisKKwkJaWYgKHpvbmUtPmFkZHIgPD0gYWRkciAmJgorCQkgICAgYWRkciArIGxlbiA8PSB6b25lLT5hZGRyICsgem9uZS0+c2l6ZSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29hbGVzY2VkX21taW9fd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCisJCQkJIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKnZhbCkKK3sKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqZGV2ID0KKwkJCQkoc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19kZXYqKXRoaXMtPnByaXZhdGU7CisJc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19yaW5nICpyaW5nID0gZGV2LT5rdm0tPmNvYWxlc2NlZF9tbWlvX3Jpbmc7CisKKwkvKiBrdm0tPmxvY2sgbXVzdCBiZSB0YWtlbiBieSBjYWxsZXIgYmVmb3JlIGNhbGwgdG8gaW5fcmFuZ2UoKSovCisKKwkvKiBjb3B5IGRhdGEgaW4gZmlyc3QgZnJlZSBlbnRyeSBvZiB0aGUgcmluZyAqLworCisJcmluZy0+Y29hbGVzY2VkX21taW9bcmluZy0+bGFzdF0ucGh5c19hZGRyID0gYWRkcjsKKwlyaW5nLT5jb2FsZXNjZWRfbW1pb1tyaW5nLT5sYXN0XS5sZW4gPSBsZW47CisJbWVtY3B5KHJpbmctPmNvYWxlc2NlZF9tbWlvW3JpbmctPmxhc3RdLmRhdGEsIHZhbCwgbGVuKTsKKwlzbXBfd21iKCk7CisJcmluZy0+bGFzdCA9IChyaW5nLT5sYXN0ICsgMSkgJSBLVk1fQ09BTEVTQ0VEX01NSU9fTUFYOworfQorCitzdGF0aWMgdm9pZCBjb2FsZXNjZWRfbW1pb19kZXN0cnVjdG9yKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzKQoreworCWtmcmVlKHRoaXMpOworfQorCitpbnQga3ZtX2NvYWxlc2NlZF9tbWlvX2luaXQoc3RydWN0IGt2bSAqa3ZtKQoreworCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2ICpkZXY7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXYtPmRldi53cml0ZSAgPSBjb2FsZXNjZWRfbW1pb193cml0ZTsKKwlkZXYtPmRldi5pbl9yYW5nZSAgPSBjb2FsZXNjZWRfbW1pb19pbl9yYW5nZTsKKwlkZXYtPmRldi5kZXN0cnVjdG9yICA9IGNvYWxlc2NlZF9tbWlvX2Rlc3RydWN0b3I7CisJZGV2LT5kZXYucHJpdmF0ZSAgPSBkZXY7CisJZGV2LT5rdm0gPSBrdm07CisJa3ZtLT5jb2FsZXNjZWRfbW1pb19kZXYgPSBkZXY7CisJa3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoJmt2bS0+bW1pb19idXMsICZkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGt2bV92bV9pb2N0bF9yZWdpc3Rlcl9jb2FsZXNjZWRfbW1pbyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICAgICAgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lICp6b25lKQoreworCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2ICpkZXYgPSBrdm0tPmNvYWxlc2NlZF9tbWlvX2RldjsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCWlmIChkZXYtPm5iX3pvbmVzID49IEtWTV9DT0FMRVNDRURfTU1JT19aT05FX01BWCkgeworCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCXJldHVybiAtRU5PQlVGUzsKKwl9CisKKwlkZXYtPnpvbmVbZGV2LT5uYl96b25lc10gPSAqem9uZTsKKwlkZXYtPm5iX3pvbmVzKys7CisKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1fdm1faW9jdGxfdW5yZWdpc3Rlcl9jb2FsZXNjZWRfbW1pbyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkJCSAgIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSAqem9uZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqZGV2ID0ga3ZtLT5jb2FsZXNjZWRfbW1pb19kZXY7CisJc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lICp6OworCisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisKKwlpID0gZGV2LT5uYl96b25lczsKKwl3aGlsZShpKSB7CisJCXogPSAmZGV2LT56b25lW2kgLSAxXTsKKworCQkvKiB1bnJlZ2lzdGVyIGFsbCB6b25lcworCQkgKiBpbmNsdWRlZCBpbiAoem9uZS0+YWRkciwgem9uZS0+c2l6ZSkKKwkJICovCisKKwkJaWYgKHpvbmUtPmFkZHIgPD0gei0+YWRkciAmJgorCQkgICAgei0+YWRkciArIHotPnNpemUgPD0gem9uZS0+YWRkciArIHpvbmUtPnNpemUpIHsKKwkJCWRldi0+bmJfem9uZXMtLTsKKwkJCSp6ID0gZGV2LT56b25lW2Rldi0+bmJfem9uZXNdOworCQl9CisJCWktLTsKKwl9CisKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmggYi92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzBlYzYKLS0tIC9kZXYvbnVsbAorKysgYi92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBLVk0gY29hbGVzY2VkIE1NSU8KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQnVsbCBTLkEuUy4KKyAqCisgKiAgQXV0aG9yOiBMYXVyZW50IFZpdmllciA8TGF1cmVudC5WaXZpZXJAYnVsbC5uZXQ+CisgKgorICovCisKKyNkZWZpbmUgS1ZNX0NPQUxFU0NFRF9NTUlPX1pPTkVfTUFYIDEwMAorCitzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiB7CisJc3RydWN0IGt2bV9pb19kZXZpY2UgZGV2OworCXN0cnVjdCBrdm0gKmt2bTsKKwlpbnQgbmJfem9uZXM7CisJc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lIHpvbmVbS1ZNX0NPQUxFU0NFRF9NTUlPX1pPTkVfTUFYXTsKK307CisKK2ludCBrdm1fY29hbGVzY2VkX21taW9faW5pdChzdHJ1Y3Qga3ZtICprdm0pOworaW50IGt2bV92bV9pb2N0bF9yZWdpc3Rlcl9jb2FsZXNjZWRfbW1pbyhzdHJ1Y3Qga3ZtICprdm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUgKnpvbmUpOworaW50IGt2bV92bV9pb2N0bF91bnJlZ2lzdGVyX2NvYWxlc2NlZF9tbWlvKHN0cnVjdCBrdm0gKmt2bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lICp6b25lKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lvYXBpYy5jIGIvdmlydC9rdm0vaW9hcGljLmMKaW5kZXggNDQ1ODkwOC4uYzBkMjI4NyAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9hcGljLmMKKysrIGIvdmlydC9rdm0vaW9hcGljLmMKQEAgLTE0Niw2ICsxNDYsMTEgQEAKIAlyZXR1cm4ga3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCB2ZWN0b3IsIHRyaWdfbW9kZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGlvYXBpY19pbmpfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1faW5qZWN0X25taSh2Y3B1KTsKK30KKwogc3RhdGljIHUzMiBpb2FwaWNfZ2V0X2RlbGl2ZXJ5X2JpdG1hc2soc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTggZGVzdCwKIAkJCQkgICAgICAgdTggZGVzdF9tb2RlKQogewpAQCAtMjM5LDggKzI0NCwxOSBAQAogCQkJfQogCQl9CiAJCWJyZWFrOwotCi0JCS8qIFRPRE86IE5NSSAqLworCWNhc2UgSU9BUElDX05NSToKKwkJZm9yICh2Y3B1X2lkID0gMDsgZGVsaXZlcl9iaXRtYXNrICE9IDA7IHZjcHVfaWQrKykgeworCQkJaWYgKCEoZGVsaXZlcl9iaXRtYXNrICYgKDEgPDwgdmNwdV9pZCkpKQorCQkJCWNvbnRpbnVlOworCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKKwkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07CisJCQlpZiAodmNwdSkKKwkJCQlpb2FwaWNfaW5qX25taSh2Y3B1KTsKKwkJCWVsc2UKKwkJCQlpb2FwaWNfZGVidWcoIk5NSSB0byB2Y3B1ICVkIGZhaWxlZFxuIiwKKwkJCQkJCXZjcHUtPnZjcHVfaWQpOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuc3VwcG9ydGVkIGRlbGl2ZXJ5IG1vZGUgJWRcbiIsCiAJCSAgICAgICBkZWxpdmVyeV9tb2RlKTsKQEAgLTI5MSw3ICszMDcsOCBAQAogCQkJX19rdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLCBpKTsKIH0KIAotc3RhdGljIGludCBpb2FwaWNfaW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIpCitzdGF0aWMgaW50IGlvYXBpY19pbl9yYW5nZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRkciwKKwkJCSAgIGludCBsZW4sIGludCBpc193cml0ZSkKIHsKIAlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0gKHN0cnVjdCBrdm1faW9hcGljICopdGhpcy0+cHJpdmF0ZTsKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9kZXYuaCBiL3ZpcnQva3ZtL2lvZGV2LmgKaW5kZXggYzE0ZTY0Mi4uNTVlODg0NiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9kZXYuaAorKysgYi92aXJ0L2t2bS9pb2Rldi5oCkBAIC0yNyw3ICsyNyw4IEBACiAJCSAgICAgIGdwYV90IGFkZHIsCiAJCSAgICAgIGludCBsZW4sCiAJCSAgICAgIGNvbnN0IHZvaWQgKnZhbCk7Ci0JaW50ICgqaW5fcmFuZ2UpKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyKTsKKwlpbnQgKCppbl9yYW5nZSkoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsIGludCBsZW4sCisJCQlpbnQgaXNfd3JpdGUpOwogCXZvaWQgKCpkZXN0cnVjdG9yKShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyk7CiAKIAl2b2lkICAgICAgICAgICAgICpwcml2YXRlOwpAQCAtNDksOSArNTAsMTAgQEAKIAlkZXYtPndyaXRlKGRldiwgYWRkciwgbGVuLCB2YWwpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBrdm1faW9kZXZpY2VfaW5yYW5nZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2LCBncGFfdCBhZGRyKQorc3RhdGljIGlubGluZSBpbnQga3ZtX2lvZGV2aWNlX2lucmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgZ3BhX3QgYWRkciwgaW50IGxlbiwgaW50IGlzX3dyaXRlKQogewotCXJldHVybiBkZXYtPmluX3JhbmdlKGRldiwgYWRkcik7CisJcmV0dXJuIGRldi0+aW5fcmFuZ2UoZGV2LCBhZGRyLCBsZW4sIGlzX3dyaXRlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGt2bV9pb2RldmljZV9kZXN0cnVjdG9yKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCBkNGVhZTZhLi45MDRkN2I3IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTQ3LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCisjaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCisjaW5jbHVkZSAiY29hbGVzY2VkX21taW8uaCIKKyNlbmRpZgorCiBNT0RVTEVfQVVUSE9SKCJRdW1yYW5ldCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC02NSw2ICs2OSw4IEBACiBzdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGlvY3RsLAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpOwogCitib29sIGt2bV9yZWJvb3Rpbmc7CisKIHN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX3ZjcHUoaW50IG4pCiB7CiAJcmV0dXJuIGxpa2VseShuID49IDAgJiYgbiA8IEtWTV9NQVhfVkNQVVMpOwpAQCAtOTksMTAgKzEwNSwxMSBAQAogCiB2b2lkIGt2bV9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaW50IGksIGNwdTsKKwlpbnQgaSwgY3B1LCBtZTsKIAljcHVtYXNrX3QgY3B1czsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAKKwltZSA9IGdldF9jcHUoKTsKIAljcHVzX2NsZWFyKGNwdXMpOwogCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpIHsKIAkJdmNwdSA9IGt2bS0+dmNwdXNbaV07CkBAIC0xMTEsMjEgKzExOCwyNCBAQAogCQlpZiAodGVzdF9hbmRfc2V0X2JpdChLVk1fUkVRX1RMQl9GTFVTSCwgJnZjcHUtPnJlcXVlc3RzKSkKIAkJCWNvbnRpbnVlOwogCQljcHUgPSB2Y3B1LT5jcHU7Ci0JCWlmIChjcHUgIT0gLTEgJiYgY3B1ICE9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpCisJCWlmIChjcHUgIT0gLTEgJiYgY3B1ICE9IG1lKQogCQkJY3B1X3NldChjcHUsIGNwdXMpOwogCX0KIAlpZiAoY3B1c19lbXB0eShjcHVzKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAkrK2t2bS0+c3RhdC5yZW1vdGVfdGxiX2ZsdXNoOwogCXNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1cywgYWNrX2ZsdXNoLCBOVUxMLCAxKTsKK291dDoKKwlwdXRfY3B1KCk7CiB9CiAKIHZvaWQga3ZtX3JlbG9hZF9yZW1vdGVfbW11cyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaW50IGksIGNwdTsKKwlpbnQgaSwgY3B1LCBtZTsKIAljcHVtYXNrX3QgY3B1czsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAKKwltZSA9IGdldF9jcHUoKTsKIAljcHVzX2NsZWFyKGNwdXMpOwogCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpIHsKIAkJdmNwdSA9IGt2bS0+dmNwdXNbaV07CkBAIC0xMzQsMTIgKzE0NCwxNCBAQAogCQlpZiAodGVzdF9hbmRfc2V0X2JpdChLVk1fUkVRX01NVV9SRUxPQUQsICZ2Y3B1LT5yZXF1ZXN0cykpCiAJCQljb250aW51ZTsKIAkJY3B1ID0gdmNwdS0+Y3B1OwotCQlpZiAoY3B1ICE9IC0xICYmIGNwdSAhPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQlpZiAoY3B1ICE9IC0xICYmIGNwdSAhPSBtZSkKIAkJCWNwdV9zZXQoY3B1LCBjcHVzKTsKIAl9CiAJaWYgKGNwdXNfZW1wdHkoY3B1cykpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVzLCBhY2tfZmx1c2gsIE5VTEwsIDEpOworb3V0OgorCXB1dF9jcHUoKTsKIH0KIAogCkBAIC0xODMsMTAgKzE5NSwyMyBAQAogc3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odm9pZCkKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fYXJjaF9jcmVhdGVfdm0oKTsKKyNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKyNlbmRpZgogCiAJaWYgKElTX0VSUihrdm0pKQogCQlnb3RvIG91dDsKIAorI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAorCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwlpZiAoIXBhZ2UpIHsKKwkJa2ZyZWUoa3ZtKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCWt2bS0+Y29hbGVzY2VkX21taW9fcmluZyA9CisJCQkoc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19yaW5nICopcGFnZV9hZGRyZXNzKHBhZ2UpOworI2VuZGlmCisKIAlrdm0tPm1tID0gY3VycmVudC0+bW07CiAJYXRvbWljX2luYygma3ZtLT5tbS0+bW1fY291bnQpOwogCXNwaW5fbG9ja19pbml0KCZrdm0tPm1tdV9sb2NrKTsKQEAgLTE5OCw2ICsyMjMsOSBAQAogCXNwaW5fbG9jaygma3ZtX2xvY2spOwogCWxpc3RfYWRkKCZrdm0tPnZtX2xpc3QsICZ2bV9saXN0KTsKIAlzcGluX3VubG9jaygma3ZtX2xvY2spOworI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAorCWt2bV9jb2FsZXNjZWRfbW1pb19pbml0KGt2bSk7CisjZW5kaWYKIG91dDoKIAlyZXR1cm4ga3ZtOwogfQpAQCAtMjQwLDYgKzI2OCwxMCBAQAogCXNwaW5fdW5sb2NrKCZrdm1fbG9jayk7CiAJa3ZtX2lvX2J1c19kZXN0cm95KCZrdm0tPnBpb19idXMpOwogCWt2bV9pb19idXNfZGVzdHJveSgma3ZtLT5tbWlvX2J1cyk7CisjaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCisJaWYgKGt2bS0+Y29hbGVzY2VkX21taW9fcmluZyAhPSBOVUxMKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa3ZtLT5jb2FsZXNjZWRfbW1pb19yaW5nKTsKKyNlbmRpZgogCWt2bV9hcmNoX2Rlc3Ryb3lfdm0oa3ZtKTsKIAltbWRyb3AobW0pOwogfQpAQCAtMzMzLDYgKzM2NSw3IEBACiAJciA9IC1FTk9NRU07CiAKIAkvKiBBbGxvY2F0ZSBpZiBhIHNsb3QgaXMgYmVpbmcgY3JlYXRlZCAqLworI2lmbmRlZiBDT05GSUdfUzM5MAogCWlmIChucGFnZXMgJiYgIW5ldy5ybWFwKSB7CiAJCW5ldy5ybWFwID0gdm1hbGxvYyhucGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwogCkBAIC0zNzMsMTAgKzQwNiwxNCBAQAogCQkJZ290byBvdXRfZnJlZTsKIAkJbWVtc2V0KG5ldy5kaXJ0eV9iaXRtYXAsIDAsIGRpcnR5X2J5dGVzKTsKIAl9CisjZW5kaWYgLyogbm90IGRlZmluZWQgQ09ORklHX1MzOTAgKi8KIAogCWlmIChtZW0tPnNsb3QgPj0ga3ZtLT5ubWVtc2xvdHMpCiAJCWt2bS0+bm1lbXNsb3RzID0gbWVtLT5zbG90ICsgMTsKIAorCWlmICghbnBhZ2VzKQorCQlrdm1fYXJjaF9mbHVzaF9zaGFkb3coa3ZtKTsKKwogCSptZW1zbG90ID0gbmV3OwogCiAJciA9IGt2bV9hcmNoX3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgbWVtLCBvbGQsIHVzZXJfYWxsb2MpOwpAQCAtNTMyLDYgKzU2OSw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2VbMV07CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCWludCBucGFnZXM7CisJcGZuX3QgcGZuOwogCiAJbWlnaHRfc2xlZXAoKTsKIApAQCAtNTQ0LDE5ICs1ODIsMzggQEAKIAlucGFnZXMgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgYWRkciwgMSwgMSwgMSwgcGFnZSwKIAkJCQlOVUxMKTsKIAotCWlmIChucGFnZXMgIT0gMSkgewotCQlnZXRfcGFnZShiYWRfcGFnZSk7Ci0JCXJldHVybiBwYWdlX3RvX3BmbihiYWRfcGFnZSk7Ci0JfQorCWlmICh1bmxpa2VseShucGFnZXMgIT0gMSkpIHsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKLQlyZXR1cm4gcGFnZV90b19wZm4ocGFnZVswXSk7CisJCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKKwkJaWYgKHZtYSA9PSBOVUxMIHx8IGFkZHIgPCB2bWEtPnZtX3N0YXJ0IHx8CisJCSAgICAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9QRk5NQVApKSB7CisJCQlnZXRfcGFnZShiYWRfcGFnZSk7CisJCQlyZXR1cm4gcGFnZV90b19wZm4oYmFkX3BhZ2UpOworCQl9CisKKwkJcGZuID0gKChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCkgKyB2bWEtPnZtX3Bnb2ZmOworCQlCVUdfT04ocGZuX3ZhbGlkKHBmbikpOworCX0gZWxzZQorCQlwZm4gPSBwYWdlX3RvX3BmbihwYWdlWzBdKTsKKworCXJldHVybiBwZm47CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGdmbl90b19wZm4pOwogCiBzdHJ1Y3QgcGFnZSAqZ2ZuX3RvX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7Ci0JcmV0dXJuIHBmbl90b19wYWdlKGdmbl90b19wZm4oa3ZtLCBnZm4pKTsKKwlwZm5fdCBwZm47CisKKwlwZm4gPSBnZm5fdG9fcGZuKGt2bSwgZ2ZuKTsKKwlpZiAocGZuX3ZhbGlkKHBmbikpCisJCXJldHVybiBwZm5fdG9fcGFnZShwZm4pOworCisJV0FSTl9PTighcGZuX3ZhbGlkKHBmbikpOworCisJZ2V0X3BhZ2UoYmFkX3BhZ2UpOworCXJldHVybiBiYWRfcGFnZTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoZ2ZuX3RvX3BhZ2UpOwpAQCAtNTY5LDcgKzYyNiw4IEBACiAKIHZvaWQga3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbl90IHBmbikKIHsKLQlwdXRfcGFnZShwZm5fdG9fcGFnZShwZm4pKTsKKwlpZiAocGZuX3ZhbGlkKHBmbikpCisJCXB1dF9wYWdlKHBmbl90b19wYWdlKHBmbikpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKTsKIApAQCAtNTk0LDIxICs2NTIsMjUgQEAKIAogdm9pZCBrdm1fc2V0X3Bmbl9kaXJ0eShwZm5fdCBwZm4pCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpKQotCQlTZXRQYWdlRGlydHkocGFnZSk7CisJaWYgKHBmbl92YWxpZChwZm4pKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKwkJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkpCisJCQlTZXRQYWdlRGlydHkocGFnZSk7CisJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3NldF9wZm5fZGlydHkpOwogCiB2b2lkIGt2bV9zZXRfcGZuX2FjY2Vzc2VkKHBmbl90IHBmbikKIHsKLQltYXJrX3BhZ2VfYWNjZXNzZWQocGZuX3RvX3BhZ2UocGZuKSk7CisJaWYgKHBmbl92YWxpZChwZm4pKQorCQltYXJrX3BhZ2VfYWNjZXNzZWQocGZuX3RvX3BhZ2UocGZuKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fc2V0X3Bmbl9hY2Nlc3NlZCk7CiAKIHZvaWQga3ZtX2dldF9wZm4ocGZuX3QgcGZuKQogewotCWdldF9wYWdlKHBmbl90b19wYWdlKHBmbikpOworCWlmIChwZm5fdmFsaWQocGZuKSkKKwkJZ2V0X3BhZ2UocGZuX3RvX3BhZ2UocGZuKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X3Bmbik7CiAKQEAgLTc5OSw2ICs4NjEsMTAgQEAKIAllbHNlIGlmICh2bWYtPnBnb2ZmID09IEtWTV9QSU9fUEFHRV9PRkZTRVQpCiAJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmNwdS0+YXJjaC5waW9fZGF0YSk7CiAjZW5kaWYKKyNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKKwllbHNlIGlmICh2bWYtPnBnb2ZmID09IEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVCkKKwkJcGFnZSA9IHZpcnRfdG9fcGFnZSh2Y3B1LT5rdm0tPmNvYWxlc2NlZF9tbWlvX3JpbmcpOworI2VuZGlmCiAJZWxzZQogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogCWdldF9wYWdlKHBhZ2UpOwpAQCAtMTEyMSw2ICsxMTg3LDMyIEBACiAJCQlnb3RvIG91dDsKIAkJYnJlYWs7CiAJfQorI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAorCWNhc2UgS1ZNX1JFR0lTVEVSX0NPQUxFU0NFRF9NTUlPOiB7CisJCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSB6b25lOworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ6b25lLCBhcmdwLCBzaXplb2Ygem9uZSkpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FTlhJTzsKKwkJciA9IGt2bV92bV9pb2N0bF9yZWdpc3Rlcl9jb2FsZXNjZWRfbW1pbyhrdm0sICZ6b25lKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9VTlJFR0lTVEVSX0NPQUxFU0NFRF9NTUlPOiB7CisJCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSB6b25lOworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ6b25lLCBhcmdwLCBzaXplb2Ygem9uZSkpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FTlhJTzsKKwkJciA9IGt2bV92bV9pb2N0bF91bnJlZ2lzdGVyX2NvYWxlc2NlZF9tbWlvKGt2bSwgJnpvbmUpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQlyID0gMDsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAJZGVmYXVsdDoKIAkJciA9IGt2bV9hcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpOwogCX0KQEAgLTExNzksNyArMTI3MSw2IEBACiBzdGF0aWMgbG9uZyBrdm1fZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJICB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWxvbmcgciA9IC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGlvY3RsKSB7CkBAIC0xMTk2LDcgKzEyODcsNyBAQAogCQlyID0ga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0oKTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0hFQ0tfRVhURU5TSU9OOgotCQlyID0ga3ZtX2Rldl9pb2N0bF9jaGVja19leHRlbnNpb24oKGxvbmcpYXJncCk7CisJCXIgPSBrdm1fZGV2X2lvY3RsX2NoZWNrX2V4dGVuc2lvbihhcmcpOwogCQlicmVhazsKIAljYXNlIEtWTV9HRVRfVkNQVV9NTUFQX1NJWkU6CiAJCXIgPSAtRUlOVkFMOwpAQCAtMTIwNiw2ICsxMjk3LDkgQEAKICNpZmRlZiBDT05GSUdfWDg2CiAJCXIgKz0gUEFHRV9TSVpFOyAgICAvKiBwaW8gZGF0YSBwYWdlICovCiAjZW5kaWYKKyNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKKwkJciArPSBQQUdFX1NJWkU7ICAgIC8qIGNvYWxlc2NlZCBtbWlvIHJpbmcgcGFnZSAqLworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgS1ZNX1RSQUNFX0VOQUJMRToKIAljYXNlIEtWTV9UUkFDRV9QQVVTRToKQEAgLTEyNDcsNyArMTM0MSw2IEBACiAJaWYgKCFjcHVfaXNzZXQoY3B1LCBjcHVzX2hhcmR3YXJlX2VuYWJsZWQpKQogCQlyZXR1cm47CiAJY3B1X2NsZWFyKGNwdSwgY3B1c19oYXJkd2FyZV9lbmFibGVkKTsKLQlkZWNhY2hlX3ZjcHVzX29uX2NwdShjcHUpOwogCWt2bV9hcmNoX2hhcmR3YXJlX2Rpc2FibGUoTlVMTCk7CiB9CiAKQEAgLTEyNzcsNiArMTM3MCwxOCBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKKworYXNtbGlua2FnZSB2b2lkIGt2bV9oYW5kbGVfZmF1bHRfb25fcmVib290KHZvaWQpCit7CisJaWYgKGt2bV9yZWJvb3RpbmcpCisJCS8qIHNwaW4gd2hpbGUgcmVzZXQgZ29lcyBvbiAqLworCQl3aGlsZSAodHJ1ZSkKKwkJCTsKKwkvKiBGYXVsdCB3aGlsZSBub3QgcmVib290aW5nLiAgV2Ugd2FudCB0aGUgdHJhY2UuICovCisJQlVHKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1faGFuZGxlX2ZhdWx0X29uX3JlYm9vdCk7CisKIHN0YXRpYyBpbnQga3ZtX3JlYm9vdChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyLCB1bnNpZ25lZCBsb25nIHZhbCwKIAkJICAgICAgdm9pZCAqdikKIHsKQEAgLTEyODYsNiArMTM5MSw3IEBACiAJCSAqIGluIHZteCByb290IG1vZGUuCiAJCSAqLwogCQlwcmludGsoS0VSTl9JTkZPICJrdm06IGV4aXRpbmcgaGFyZHdhcmUgdmlydHVhbGl6YXRpb25cbiIpOworCQlrdm1fcmVib290aW5nID0gdHJ1ZTsKIAkJb25fZWFjaF9jcHUoaGFyZHdhcmVfZGlzYWJsZSwgTlVMTCwgMSk7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CkBAIC0xMzEyLDE0ICsxNDE4LDE1IEBACiAJfQogfQogCi1zdHJ1Y3Qga3ZtX2lvX2RldmljZSAqa3ZtX2lvX2J1c19maW5kX2RldihzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLCBncGFfdCBhZGRyKQorc3RydWN0IGt2bV9pb19kZXZpY2UgKmt2bV9pb19idXNfZmluZF9kZXYoc3RydWN0IGt2bV9pb19idXMgKmJ1cywKKwkJCQkJICBncGFfdCBhZGRyLCBpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYnVzLT5kZXZfY291bnQ7IGkrKykgewogCQlzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqcG9zID0gYnVzLT5kZXZzW2ldOwogCi0JCWlmIChwb3MtPmluX3JhbmdlKHBvcywgYWRkcikpCisJCWlmIChwb3MtPmluX3JhbmdlKHBvcywgYWRkciwgbGVuLCBpc193cml0ZSkpCiAJCQlyZXR1cm4gcG9zOwogCX0KIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX3RyYWNlLmMgYi92aXJ0L2t2bS9rdm1fdHJhY2UuYwppbmRleCAwZTQ5NTQ3Li41ODE0MWYzIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fdHJhY2UuYworKysgYi92aXJ0L2t2bS9rdm1fdHJhY2UuYwpAQCAtNzIsMTEgKzcyLDcgQEAKIAlyZWMuY3ljbGVfaW4gCT0gcC0+Y3ljbGVfaW47CiAKIAlpZiAocmVjLmN5Y2xlX2luKSB7Ci0JCXU2NCBjeWNsZSA9IDA7Ci0KLQkJY3ljbGUgPSBnZXRfY3ljbGVzKCk7Ci0JCXJlYy51LmN5Y2xlLmN5Y2xlX2xvID0gKHUzMiljeWNsZTsKLQkJcmVjLnUuY3ljbGUuY3ljbGVfaGkgPSAodTMyKShjeWNsZSA+PiAzMik7CisJCXJlYy51LmN5Y2xlLmN5Y2xlX3U2NCA9IGdldF9jeWNsZXMoKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgcmVjLmV4dHJhX3UzMjsgaSsrKQogCQkJcmVjLnUuY3ljbGUuZXh0cmFfdTMyW2ldID0gdmFfYXJnKCphcmdzLCB1MzIpOwpAQCAtMTE0LDggKzExMCwxOCBAQAogewogCXN0cnVjdCBrdm1fdHJhY2UgKmt0OwogCi0JaWYgKCFyZWxheV9idWZfZnVsbChidWYpKQorCWlmICghcmVsYXlfYnVmX2Z1bGwoYnVmKSkgeworCQlpZiAoIXByZXZfc3ViYnVmKSB7CisJCQkvKgorCQkJICogZXhlY3V0ZWQgb25seSBvbmNlIHdoZW4gdGhlIGNoYW5uZWwgaXMgb3BlbmVkCisJCQkgKiBzYXZlIG1ldGFkYXRhIGFzIGZpcnN0IHJlY29yZAorCQkJICovCisJCQlzdWJidWZfc3RhcnRfcmVzZXJ2ZShidWYsIHNpemVvZih1MzIpKTsKKwkJCSoodTMyICopc3ViYnVmID0gMHgxMjM0NTY3ODsKKwkJfQorCiAJCXJldHVybiAxOworCX0KIAogCWt0ID0gYnVmLT5jaGFuLT5wcml2YXRlX2RhdGE7CiAJYXRvbWljX2luYygma3QtPmxvc3RfcmVjb3Jkcyk7Cg==